<?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>216302</bug_id>
          
          <creation_ts>2020-09-08 19:11:42 -0700</creation_ts>
          <short_desc>Web Inspector: modernize generated backend protocol code</short_desc>
          <delta_ts>2020-10-16 20:14:35 -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>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=216341</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=216342</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=216343</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=216344</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=216345</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=216346</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=216347</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=216348</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=216409</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=216477</see_also>
          <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>
          
          <blocked>179847</blocked>
    
    <blocked>216486</blocked>
    
    <blocked>216675</blocked>
    
    <blocked>217863</blocked>
    
    <blocked>217864</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Devin Rousso">hi</reporter>
          <assigned_to name="Devin Rousso">hi</assigned_to>
          <cc>bburg</cc>
    
    <cc>benjamin</cc>
    
    <cc>calvaris</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fujii</cc>
    
    <cc>glenn</cc>
    
    <cc>hi</cc>
    
    <cc>inspector-bugzilla-changes</cc>
    
    <cc>jer.noble</cc>
    
    <cc>joepeck</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>pangle</cc>
    
    <cc>philipj</cc>
    
    <cc>saam</cc>
    
    <cc>sergio</cc>
    
    <cc>timothy</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1686875</commentid>
    <comment_count>0</comment_count>
    <who name="Devin Rousso">hi</who>
    <bug_when>2020-09-08 19:11:42 -0700</bug_when>
    <thetext>- use `Optional&amp;&amp;` and `RefPtr&amp;&amp;` instead of `*`
 - use `Ref&amp;&amp;` instead of `&amp;`
 - parse enum values and pass the enum directly instead of the raw string
 - don&apos;t use out parameters</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1686895</commentid>
    <comment_count>1</comment_count>
      <attachid>408308</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2020-09-08 20:38:22 -0700</bug_when>
    <thetext>Created attachment 408308
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1686896</commentid>
    <comment_count>2</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-09-08 20:38:53 -0700</bug_when>
    <thetext>&lt;rdar://problem/68547649&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1686897</commentid>
    <comment_count>3</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2020-09-08 20:39:20 -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`)

This patch modifies the inspector protocol. Please ensure that any frontend changes appropriately use feature checks for new protocol features.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1686903</commentid>
    <comment_count>4</comment_count>
      <attachid>408310</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2020-09-08 21:31:37 -0700</bug_when>
    <thetext>Created attachment 408310
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1686914</commentid>
    <comment_count>5</comment_count>
      <attachid>408313</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2020-09-08 23:36:16 -0700</bug_when>
    <thetext>Created attachment 408313
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1686915</commentid>
    <comment_count>6</comment_count>
      <attachid>408314</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2020-09-08 23:51:49 -0700</bug_when>
    <thetext>Created attachment 408314
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1686916</commentid>
    <comment_count>7</comment_count>
      <attachid>408315</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2020-09-08 23:58:23 -0700</bug_when>
    <thetext>Created attachment 408315
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1686918</commentid>
    <comment_count>8</comment_count>
      <attachid>408316</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2020-09-09 00:03:44 -0700</bug_when>
    <thetext>Created attachment 408316
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1686921</commentid>
    <comment_count>9</comment_count>
      <attachid>408318</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2020-09-09 00:29:32 -0700</bug_when>
    <thetext>Created attachment 408318
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1686993</commentid>
    <comment_count>10</comment_count>
      <attachid>408318</attachid>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2020-09-09 09:15:30 -0700</bug_when>
    <thetext>Comment on attachment 408318
Patch

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

&gt; Source/JavaScriptCore/inspector/InspectorBackendDispatcher.cpp:279
&gt; +    T result;

Very nice. But, why is object passed by pointer instead of reference? The error message for !object seems wrong, that case is about the &apos;params&apos; object or whatever being empty. It would be better to handle that case at callers of this, if its not too much extra pain.

&gt; Source/JavaScriptCore/inspector/InspectorBackendDispatcher.cpp:304
&gt; +    return getPropertyValue&lt;Optional&lt;bool&gt;&gt;(object, name, required, &amp;JSON::Value::asBoolean, &quot;Boolean&quot;);

Uh.. yeah.. this whole area is a mess.

&gt; Source/JavaScriptCore/inspector/InspectorProtocolTypes.h:38
&gt; +using ErrorString = String;

I&apos;ve been wondering if we want to make this flexible enough to return more than just a string in the future. Seems ok for now.

&gt; Source/JavaScriptCore/inspector/InspectorProtocolTypes.h:59
&gt; +        return static_reference_cast&lt;JSON::ArrayOf&lt;T&gt;&gt;(static_reference_cast&lt;JSON::ArrayBase&gt;(array.releaseNonNull()));

Didn&apos;t know this was a thing!

&gt; Source/JavaScriptCore/inspector/JSGlobalObjectConsoleClient.cpp:151
&gt; +        m_scriptProfilerAgent-&gt;stopTracking();

It would be prudent to at least log any errors returned by the agent calls that happen here.

&gt; Source/JavaScriptCore/inspector/agents/InspectorAuditAgent.cpp:62
&gt; +    Protocol::ErrorString errorString;

Nit: move this next to the first assignment.

&gt; Source/JavaScriptCore/inspector/agents/InspectorAuditAgent.h:66
&gt; +    virtual InjectedScript injectedScriptForEval(Protocol::ErrorString&amp;, Optional&lt;Protocol::Runtime::ExecutionContextId&gt;&amp;&amp;) = 0;

Seems like InjectedScript needs some modernization, too. Can you file &amp; relate bugs for followup modernizations?

&gt; Source/JavaScriptCore/inspector/agents/InspectorConsoleAgent.cpp:200
&gt; +    auto [timestamp, snapshotData] = WTFMove(result.value());

Neat.

&gt; Source/JavaScriptCore/inspector/agents/InspectorDebuggerAgent.cpp:138
&gt; +        ignoreCount = options-&gt;getInteger(Protocol::Debugger::BreakpointOptions::ignoreCountKey).valueOr(0);

Nice!

&gt; Source/JavaScriptCore/inspector/agents/InspectorDebuggerAgent.cpp:514
&gt; +static bool parseLocation(Protocol::ErrorString&amp; errorString, const JSON::Object&amp; location, JSC::SourceID&amp; sourceID, unsigned&amp; lineNumber, unsigned&amp; columnNumber)

Followup: more modernization possible.

&gt; Source/JavaScriptCore/inspector/agents/InspectorDebuggerAgent.cpp:544
&gt; +    auto protocolBreakpoint = ProtocolBreakpoint::fromPayload(errorString, !!url ? url : urlRegex, !!urlRegex, lineNumber, columnNumber.valueOr(0), WTFMove(options));

Followup: more modernization possible.

&gt; Source/JavaScriptCore/inspector/agents/InspectorDebuggerAgent.cpp:573
&gt; +    return { { protocolBreakpoint-&gt;id(), WTFMove(locations) } };

Nice.

&gt; Source/JavaScriptCore/inspector/agents/InspectorDebuggerAgent.h:145
&gt; +    virtual void internalDisable(bool isBeingDestroyed);

OK

&gt; Source/JavaScriptCore/inspector/agents/InspectorHeapAgent.cpp:59
&gt; +    disable();

MARK: I reviewed from the top to here. (9/9/2020 @ 9:15am)

&gt; Source/WebCore/inspector/agents/worker/WorkerAuditAgent.cpp:-51
&gt; -InjectedScript WorkerAuditAgent::injectedScriptForEval(ErrorString&amp; errorString, const int* executionContextId)

MARK: I reviewed from here to the bottom. (9/9/2020 @ 9:15am)

&gt; Source/WebDriver/Session.cpp:1048
&gt; +        if (!inViewCenterPointX || !inViewCenterPointY) {

So much nicer!

&gt; Source/WebKit/UIProcess/Automation/Automation.json:32
&gt;              &quot;description&quot;: &quot;The coordinate system in which rects, points, and sizes are to be interpreted.&quot;,

Nit: document that &apos;LayoutViewport&apos; is legacy

&gt; Source/WebKit/UIProcess/Automation/WebAutomationSession.cpp:-386
&gt; -    Optional&lt;float&gt; x;

Why did this change from float to double? (Not a problem just curious)

&gt; Source/WebKit/UIProcess/Automation/WebAutomationSession.cpp:430
&gt; +static Inspector::Protocol::Automation::PageLoadStrategy pageLoadStrategyFromParameter(Optional&lt;Inspector::Protocol::Automation::PageLoadStrategy&gt;&amp;&amp; optionalPageLoadStrategy)

Nit: I think this function can be removed and the default value inlined.

&gt; Source/WebKit/UIProcess/Automation/WebAutomationSession.cpp:1013
&gt; +    case Inspector::Protocol::Automation::CoordinateSystem::Viewport:

Nit: add link to followup bug to remove &apos;LayoutViewport&apos; if you plan to rename the wire value on the client side (safaridriver/webkitgtkdriver).

&gt; Source/WebKit/UIProcess/Automation/WebAutomationSession.cpp:-1675
&gt; -        if (!parsedInteraction)

Ayy, nice to hoist the parsing to earlier.

&gt; Source/WebKit/UIProcess/Automation/WebAutomationSession.cpp:1914
&gt; +            if (!!pressedCharKeyString)

Is this actually necessary? If pressedCharKeyString is Optional&lt;String&gt; then operator bool() defined on Optional should just work, right?

&gt; Tools/TestWebKitAPI/Tests/WTF/JSONValue.cpp:63
&gt; +        // Integers can be get as doubles.

Nit: grammaro

&gt; Tools/TestWebKitAPI/Tests/WTF/JSONValue.cpp:82
&gt; +        // Doubles can be get as integers.

Nit: grammaro</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1687079</commentid>
    <comment_count>11</comment_count>
      <attachid>408318</attachid>
    <who name="Blaze Burg">bburg</who>
    <bug_when>2020-09-09 11:43:48 -0700</bug_when>
    <thetext>Comment on attachment 408318
Patch

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

r=me, fantastic stamina. Please make remaining bots happy and be around to fix problems when this lands.

&gt; Source/JavaScriptCore/inspector/agents/InspectorRuntimeAgent.cpp:-53
&gt; -{

o_O

&gt; Source/JavaScriptCore/inspector/agents/InspectorRuntimeAgent.cpp:345
&gt; +

Nit: extra newline

&gt; Source/JavaScriptCore/inspector/scripts/codegen/cpp_generator.py:68
&gt; +            # fallthrough

Nit. # Fallthrough.

&gt; Source/JavaScriptCore/inspector/scripts/codegen/cpp_generator.py:74
&gt; +        if isinstance(_type, ObjectType) or _type.qualified_name() in [&apos;object&apos;]:

What&apos;s the case where it&apos;s not ObjectType but the qualified_name() is &apos;object&apos;?

&gt; Source/JavaScriptCore/inspector/scripts/codegen/cpp_generator.py:119
&gt; +            # fallthrough

Ditto.

&gt; Source/JavaScriptCore/inspector/scripts/codegen/cpp_generator.py:124
&gt; +            # fallthrough

Ditto (more below)

&gt; Source/JavaScriptCore/inspector/scripts/codegen/cpp_generator.py:254
&gt; +            # fallthroug

Nit: typo

&gt; Source/JavaScriptCore/inspector/scripts/codegen/cpp_generator.py:256
&gt; +        if isinstance(_type, EnumType) and _type.is_anonymous:

Can you file a followup bug about modernizing / removing anonymous enums?

&gt; Source/JavaScriptCore/inspector/scripts/codegen/cpp_generator.py:349
&gt; +    def should_move_argument(_type, is_optional):

Nice, this is cleaner.

&gt; Source/JavaScriptCore/inspector/scripts/codegen/cpp_generator_templates.py:98
&gt; +    void dispatch(long protocol_callId, const String&amp; protocol_method, Ref&lt;JSON::Object&gt;&amp;&amp; protocol_message) final;

Nit: I prefer protocol_requestId.

&gt; Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_backend_dispatcher_header.py:212
&gt; +        return self.wrap_with_guard_for_condition(command.condition, &quot;    void %s(long protocl_callId, RefPtr&lt;JSON::Object&gt;&amp;&amp; protocol_parameters);&quot; % command.command_name)

Nit: typo

&gt; Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_backend_dispatcher_implementation.py:185
&gt; +            elif CppGenerator.should_release_argument(_type, parameter.is_optional):

V. nice

&gt; Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_backend_dispatcher_implementation.py:263
&gt; +                    parameter_expression = &apos;WTFMove(%s)&apos; % variable_name

This code should use the helpers that you created (should_move, should_dereference, etc.)

&gt; Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_backend_dispatcher_implementation.py:369
&gt; +                lines.append(&apos;    auto [%s] = WTFMove(result.value());&apos; % &quot;, &quot;.join(result_extraction_names))

Suggestion: destructured_tuple_names?

&gt; Source/WebCore/inspector/InspectorCanvas.cpp:913
&gt;      initialStatePayload-&gt;setContent(getCanvasContentAsDataURL(ignored));

Another followup to modernize getCanvasContentAsDataURL()...

&gt; Source/WebCore/inspector/InspectorStyleSheet.cpp:537
&gt; +        if (auto range = buildSourceRangeObject(sourceData-&gt;ruleBodyRange, m_parentStyleSheet-&gt;lineEndings()))

Do we expect this to ever fail?

&gt; Source/WebCore/inspector/InspectorStyleSheet.cpp:696
&gt; +                        auto newStatus = activeIt-&gt;value-&gt;getString(Protocol::CSS::CSSProperty::statusKey);

This section was tricky to follow, but I think it&apos;s correct.

&gt; Source/WebCore/inspector/InspectorStyleSheet.cpp:1179
&gt; +    auto result = inspectorStyle-&gt;buildObjectForStyle();

NIt: extra newline

&gt; Source/WebCore/inspector/agents/InspectorCSSAgent.cpp:495
&gt;          if (!includePseudo || *includePseudo) {

I think this should be includePseudo.value_or(true)

&gt; Source/WebCore/inspector/agents/InspectorCSSAgent.cpp:511
&gt;          if (!includeInherited || *includeInherited) {

Ditto above.

&gt; Source/WebCore/inspector/agents/InspectorCSSAgent.cpp:1040
&gt; +void InspectorCSSAgent::didRemoveDOMNode(Node&amp; node, Protocol::DOM::NodeId nodeId)

Nice.

&gt; Source/WebCore/inspector/agents/InspectorCanvasAgent.cpp:192
&gt;      if (!inspectorCanvas)

Another modernization followup for assertInspectorCanvas() and friends.

&gt; Source/WebCore/inspector/agents/InspectorDOMAgent.cpp:323
&gt;      setSearchingForNode(ignored, false, nullptr, false);

Another modernization followup for setSearchingForNode().

&gt; Source/WebCore/inspector/agents/InspectorDOMAgent.cpp:703
&gt; +    Element* element = assertEditableElement(errorString, nodeId);

More modernization followup for assertEditableElement() .

&gt; Source/WebCore/inspector/agents/InspectorDOMAgent.cpp:707
&gt; +    if (!m_domEditor-&gt;setAttribute(*element, name, value, errorString))

More modernization followup for setAttribute().

&gt; Source/WebCore/inspector/agents/InspectorDOMAgent.cpp:2017
&gt; +                    if (auto controlledElementId = pushNodePathToFrontend(controlledElement))

Slightly different behavior, but its OK.

&gt; Source/WebCore/inspector/agents/InspectorDOMAgent.cpp:2754
&gt; +        if (auto nodeId = pushNodePathToFrontend(errorString, node))

Modernization followup: pushNodePathToFrontend()

&gt; Source/WebCore/inspector/agents/InspectorDOMDebuggerAgent.cpp:151
&gt; +        if (!setAnimationFrameBreakpoint(errorString, WTFMove(breakpoint)))

Modernization followup: setAnimationFrameBreakpoint &amp; friends.

&gt; Source/WebCore/inspector/agents/InspectorDOMDebuggerAgent.cpp:328
&gt; +        m_pauseOnAllURLsBreakpoint = WTFMove(breakpoint);

Nit: newline

&gt; Source/WebCore/inspector/agents/InspectorDOMStorageAgent.cpp:101
&gt; +    RefPtr&lt;StorageArea&gt; storageArea = findStorageArea(errorString, WTFMove(storageId), frame);

Modernization followup: findStorageArea() and friends.

&gt; Source/WebCore/inspector/agents/InspectorIndexedDBAgent.cpp:-283
&gt; -    static NeverDestroyed&lt;const String&gt; numberType(MAKE_STATIC_STRING_IMPL(&quot;number&quot;));

Eww

&gt; Source/WebCore/inspector/agents/InspectorIndexedDBAgent.cpp:398
&gt; +        if (!primaryKey)

Thanks for adding error handling!

&gt; Source/WebCore/inspector/agents/InspectorNetworkAgent.cpp:210
&gt;  

Nit: extra newline

&gt; Source/WebCore/inspector/agents/InspectorPageAgent.cpp:404
&gt; -    if (reloadFromOrigin)
&gt; +    if (ignoreCache &amp;&amp; *ignoreCache)

Use value_or(false)? In general I don&apos;t like the foo &amp;&amp; *foo pattern. (and its cousins like !foo || !*foo)

&gt; Source/WebCore/inspector/agents/InspectorTimelineAgent.cpp:168
&gt; +        auto instrument = Protocol::Helpers::parseEnumValueFromString&lt;Protocol::Timeline::Instrument&gt;(instrumentString);

Should we auto-parse/convert arrays of enums? (Not necessarily right now)

&gt; Source/WebCore/inspector/agents/page/PageNetworkAgent.cpp:94
&gt; +void PageNetworkAgent::setResourceCachingDisabledInteral(bool disabled)

ERROR: speling</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1687290</commentid>
    <comment_count>12</comment_count>
      <attachid>408318</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2020-09-09 23:50:07 -0700</bug_when>
    <thetext>Comment on attachment 408318
Patch

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

&gt;&gt; Source/JavaScriptCore/inspector/InspectorBackendDispatcher.cpp:279
&gt;&gt; +    T result;
&gt; 
&gt; Very nice. But, why is object passed by pointer instead of reference? The error message for !object seems wrong, that case is about the &apos;params&apos; object or whatever being empty. It would be better to handle that case at callers of this, if its not too much extra pain.

In this case, `object` actually is the `params` object, which can be `nullptr` if the JSON message is malformed 😅

Doing this in the caller would mean that every `*BackendDispatcher::*` would need to check for whether `params` exists or not and throw an error if that command has a required property.  IMO, this way is much cleaner and avoids duplicated code.

I&apos;ll rename `object` to `params` for clarity.

&gt;&gt; Source/JavaScriptCore/inspector/JSGlobalObjectConsoleClient.cpp:151
&gt;&gt; +        m_scriptProfilerAgent-&gt;stopTracking();
&gt; 
&gt; It would be prudent to at least log any errors returned by the agent calls that happen here.

Log to where?  Most of the `stop*`/`disable*` commands tend to be very lenient and not result in errors as they are sorta &quot;overused&quot; in order to make sure things really are turned off.  I think logging errors would likely be misleading most of the time.

&gt;&gt; Source/JavaScriptCore/inspector/agents/InspectorAuditAgent.cpp:62
&gt;&gt; +    Protocol::ErrorString errorString;
&gt; 
&gt; Nit: move this next to the first assignment.

I intentionally put these as the first thing in the command handler so that it was kinda &quot;obvious&quot; that we need to remove it.  This would relate to followup(s) for removing `Protocol::ErrorString` as out-parameters in helper methods too.

&gt;&gt; Source/JavaScriptCore/inspector/agents/InspectorAuditAgent.h:66
&gt;&gt; +    virtual InjectedScript injectedScriptForEval(Protocol::ErrorString&amp;, Optional&lt;Protocol::Runtime::ExecutionContextId&gt;&amp;&amp;) = 0;
&gt; 
&gt; Seems like InjectedScript needs some modernization, too. Can you file &amp; relate bugs for followup modernizations?

&lt;https://webkit.org/b/216341&gt; Web Inspector: modernize InjectedScript code

&gt;&gt; Source/JavaScriptCore/inspector/agents/InspectorDebuggerAgent.cpp:514
&gt;&gt; +static bool parseLocation(Protocol::ErrorString&amp; errorString, const JSON::Object&amp; location, JSC::SourceID&amp; sourceID, unsigned&amp; lineNumber, unsigned&amp; columnNumber)
&gt; 
&gt; Followup: more modernization possible.

&lt;https://webkit.org/b/216342&gt; Web Inspector: modernize *DebuggerAgent code

&gt;&gt; Source/JavaScriptCore/inspector/agents/InspectorDebuggerAgent.cpp:544
&gt;&gt; +    auto protocolBreakpoint = ProtocolBreakpoint::fromPayload(errorString, !!url ? url : urlRegex, !!urlRegex, lineNumber, columnNumber.valueOr(0), WTFMove(options));
&gt; 
&gt; Followup: more modernization possible.

&lt;https://webkit.org/b/216342&gt; Web Inspector: modernize *DebuggerAgent code

&gt;&gt; Source/JavaScriptCore/inspector/agents/InspectorDebuggerAgent.h:145
&gt;&gt; +    virtual void internalDisable(bool isBeingDestroyed);
&gt; 
&gt; OK

Yeah this is perhaps one of the only downsides to this change, in that we can no longer have other methods that share the same name as commands if they have the same arguments.  IMO that&apos;s not really a downside tho, as I personally believe there should be 1-1 mappings for commands :)

&gt;&gt; Source/JavaScriptCore/inspector/scripts/codegen/cpp_generator.py:74
&gt;&gt; +        if isinstance(_type, ObjectType) or _type.qualified_name() in [&apos;object&apos;]:
&gt; 
&gt; What&apos;s the case where it&apos;s not ObjectType but the qualified_name() is &apos;object&apos;?

I believe that inlined/anonymous objects are a `PrimitiveType` and have a `qualified_name` of `&apos;object&apos;` (e.g. the `data` parameter of the `Debugger.paused` event).

&gt;&gt; Source/JavaScriptCore/inspector/scripts/codegen/cpp_generator.py:256
&gt;&gt; +        if isinstance(_type, EnumType) and _type.is_anonymous:
&gt; 
&gt; Can you file a followup bug about modernizing / removing anonymous enums?

&lt;https://webkit.org/b/216343&gt; Web Inspector: remove anonymous enums from protocol

&gt;&gt; Source/JavaScriptCore/inspector/scripts/codegen/generate_cpp_backend_dispatcher_implementation.py:263
&gt;&gt; +                    parameter_expression = &apos;WTFMove(%s)&apos; % variable_name
&gt; 
&gt; This code should use the helpers that you created (should_move, should_dereference, etc.)

I remember trying to also use it for this code too, but not getting it to work right.  The rest of the code that uses those helpers deals with the &quot;final&quot; type of those objects, whereas this code is about actually generating those final types (e.g. in every other case, we always want to `releaseNonNull` an optional object/array, but in this case we just want to `WTFMove` it).  This is because the `BackendDispatcher::get*` always returns an &quot;optional&quot; value (e.g. always `RefPtr` never `Ref`) even for properties that we expect to exist.

&gt;&gt; Source/WebCore/inspector/InspectorCanvas.cpp:913
&gt;&gt;      initialStatePayload-&gt;setContent(getCanvasContentAsDataURL(ignored));
&gt; 
&gt; Another followup to modernize getCanvasContentAsDataURL()...

&lt;https://webkit.org/b/216344&gt; Web Inspector: modernize *CanvasAgent code

&gt;&gt; Source/WebCore/inspector/InspectorStyleSheet.cpp:537
&gt;&gt; +        if (auto range = buildSourceRangeObject(sourceData-&gt;ruleBodyRange, m_parentStyleSheet-&gt;lineEndings()))
&gt; 
&gt; Do we expect this to ever fail?

There&apos;s an early `return nullptr;` in that function, so I guess yes?  This was fine before because `set*` allowed for `RefPtr` and (I believe) could handle invalid values.  Now that we expect/require valid values, we should check it just to be sure.

&gt;&gt; Source/WebCore/inspector/InspectorStyleSheet.cpp:696
&gt;&gt; +                        auto newStatus = activeIt-&gt;value-&gt;getString(Protocol::CSS::CSSProperty::statusKey);
&gt; 
&gt; This section was tricky to follow, but I think it&apos;s correct.

this entire file is tricky to follow T.T

&gt;&gt; Source/WebCore/inspector/agents/InspectorCSSAgent.cpp:495
&gt;&gt;          if (!includePseudo || *includePseudo) {
&gt; 
&gt; I think this should be includePseudo.value_or(true)

i personally don&apos;t like using `valueOr` cause it&apos;s more work than the separate operations

&gt;&gt; Source/WebCore/inspector/agents/InspectorCanvasAgent.cpp:192
&gt;&gt;      if (!inspectorCanvas)
&gt; 
&gt; Another modernization followup for assertInspectorCanvas() and friends.

&lt;https://webkit.org/b/216344&gt; Web Inspector: modernize *CanvasAgent code

&gt;&gt; Source/WebCore/inspector/agents/InspectorDOMAgent.cpp:323
&gt;&gt;      setSearchingForNode(ignored, false, nullptr, false);
&gt; 
&gt; Another modernization followup for setSearchingForNode().

&lt;https://webkit.org/b/216345&gt; Web Inspector: modernize *DOMAgent code and related helper classes

FYI this would probably fall under my existing desire to just rebuild the DOM agent
 - &lt;https://webkit.org/b/189687&gt; Web Inspector: preserve DOM.NodeId if a node is removed and re-added
 - &lt;https://webkit.org/b/213499&gt; Web Inspector: allow DOM nodes to be instrumented at any point, regardless of whether the main document has also been instrumented

&gt;&gt; Source/WebCore/inspector/agents/InspectorDOMAgent.cpp:703
&gt;&gt; +    Element* element = assertEditableElement(errorString, nodeId);
&gt; 
&gt; More modernization followup for assertEditableElement() .

ditto

&gt;&gt; Source/WebCore/inspector/agents/InspectorDOMAgent.cpp:707
&gt;&gt; +    if (!m_domEditor-&gt;setAttribute(*element, name, value, errorString))
&gt; 
&gt; More modernization followup for setAttribute().

ditto

&gt;&gt; Source/WebCore/inspector/agents/InspectorDOMAgent.cpp:2754
&gt;&gt; +        if (auto nodeId = pushNodePathToFrontend(errorString, node))
&gt; 
&gt; Modernization followup: pushNodePathToFrontend()

ditto

&gt;&gt; Source/WebCore/inspector/agents/InspectorDOMDebuggerAgent.cpp:151
&gt;&gt; +        if (!setAnimationFrameBreakpoint(errorString, WTFMove(breakpoint)))
&gt; 
&gt; Modernization followup: setAnimationFrameBreakpoint &amp; friends.

&lt;https://webkit.org/b/216346&gt; Web Inspector: modernize *DOMDebuggerAgent code

&gt;&gt; Source/WebCore/inspector/agents/InspectorDOMStorageAgent.cpp:101
&gt;&gt; +    RefPtr&lt;StorageArea&gt; storageArea = findStorageArea(errorString, WTFMove(storageId), frame);
&gt; 
&gt; Modernization followup: findStorageArea() and friends.

&lt;https://webkit.org/b/216347&gt; Web Inspector: modernize *DOMStorageAgent code

&gt;&gt; Source/WebCore/inspector/agents/InspectorTimelineAgent.cpp:168
&gt;&gt; +        auto instrument = Protocol::Helpers::parseEnumValueFromString&lt;Protocol::Timeline::Instrument&gt;(instrumentString);
&gt; 
&gt; Should we auto-parse/convert arrays of enums? (Not necessarily right now)

yes, we should really be able to auto-parse/auto-convert all the things

&gt;&gt; Source/WebKit/UIProcess/Automation/WebAutomationSession.cpp:-386
&gt;&gt; -    Optional&lt;float&gt; x;
&gt; 
&gt; Why did this change from float to double? (Not a problem just curious)

there are no longer template overloads for `getNumber`, so the value must either be an `int` or a `double`

&gt;&gt; Source/WebKit/UIProcess/Automation/WebAutomationSession.cpp:1013
&gt;&gt; +    case Inspector::Protocol::Automation::CoordinateSystem::Viewport:
&gt; 
&gt; Nit: add link to followup bug to remove &apos;LayoutViewport&apos; if you plan to rename the wire value on the client side (safaridriver/webkitgtkdriver).

&lt;https://webkit.org/b/216348&gt; remove code handling incorrectly named `Automation.CoordinateSystem.LayoutViewport` in favor of the correctly named `Automation.CoordinateSystem.Viewport`

&gt;&gt; Source/WebKit/UIProcess/Automation/WebAutomationSession.cpp:1914
&gt;&gt; +            if (!!pressedCharKeyString)
&gt; 
&gt; Is this actually necessary? If pressedCharKeyString is Optional&lt;String&gt; then operator bool() defined on Optional should just work, right?

So `getString` doesn&apos;t return `Optional&lt;String&gt;` as `String` is already a tri-state (null vs empty vs value), meaning that we can use just `String` and know whether it exists or not.

Unfortunately, while `String` doesn&apos;t have `operator bool()`, it does have `operator!`, so I&apos;m using that instead.  I could also use `!string.isNull()` if that&apos;d be preferred.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1687291</commentid>
    <comment_count>13</comment_count>
      <attachid>408416</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2020-09-09 23:52:31 -0700</bug_when>
    <thetext>Created attachment 408416
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1687483</commentid>
    <comment_count>14</comment_count>
      <attachid>408416</attachid>
    <who name="Devin Rousso">hi</who>
    <bug_when>2020-09-10 11:55:20 -0700</bug_when>
    <thetext>Comment on attachment 408416
Patch

I&apos;m pretty sure the win bot failure is not accurate as it&apos;s complaining about code that should&apos;ve changed in this patch.

e.g.
```
C:\cygwin\home\buildbot\worker\Windows-EWS\build\WebKitBuild\Release\DerivedSources\ForwardingHeaders\JavaScriptCore\InspectorProtocolObjects.h(487,1): error C2664: &apos;void WTF::JSONImpl::ObjectBase::setObject(const WTF::String &amp;,WTF::Ref&lt;WTF::JSONImpl::ObjectBase,WTF::DumbPtrTraits&lt;T&gt;&gt; &amp;&amp;)&apos;: cannot convert argument 2 from &apos;WTF::RefPtr&lt;Inspector::Protocol::Animation::Effect,WTF::DumbPtrTraits&lt;T&gt;&gt;&apos; to &apos;WTF::Ref&lt;WTF::JSONImpl::ObjectBase,WTF::DumbPtrTraits&lt;T&gt;&gt; &amp;&amp;&apos; [C:\cygwin\home\buildbot\worker\Windows-EWS\build\WebKitBuild\Release\Source\WebCore\WebCore.vcxproj]
```
is complaining about the argument being a `RefPtr&lt;Inspector::Protocol::Animation::Effect&gt;`, which in this case is the argument to `Inspector::Protocol::Animation::Animation::setEffect`, but this patch changes that argument to be a `Ref` (the code is autogenerated)

The win bot seems to have issues when changes are made to autogenerated inspector code :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1687486</commentid>
    <comment_count>15</comment_count>
    <who name="Devin Rousso">hi</who>
    <bug_when>2020-09-10 11:57:48 -0700</bug_when>
    <thetext>also, it&apos;s worth mentioning that attachment 408318 didn&apos;t have any issues, and attachment 408416 didn&apos;t change anything near the code that seems to be causing problems</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1687497</commentid>
    <comment_count>16</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-09-10 12:23:23 -0700</bug_when>
    <thetext>Committed r266885: &lt;https://trac.webkit.org/changeset/266885&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 408416.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1687518</commentid>
    <comment_count>17</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2020-09-10 13:25:26 -0700</bug_when>
    <thetext>Committed r266889: &lt;https://trac.webkit.org/changeset/266889&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>408308</attachid>
            <date>2020-09-08 20:38:22 -0700</date>
            <delta_ts>2020-09-08 21:31:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216302-20200908203820.patch</filename>
            <type>text/plain</type>
            <size>1409720</size>
            <attacher name="Devin Rousso">hi</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDdhMGViNGY4YTlhMTBhMTkyZjg2MGNjMTc1MjI4
ZDNkMWRhMzQ0NDEuLjkyZmUwZDRkOGM3ZmNjNTdiMWVhNGI3ODI2ZmQzOWMyYzQ0MDIzY2YgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyNyBAQAorMjAyMC0wOS0wOCAgRGV2
aW4gUm91c3NvICA8ZHJvdXNzb0BhcHBsZS5jb20+CisKKyAgICAgICAgV2ViIEluc3BlY3Rvcjog
bW9kZXJuaXplIGdlbmVyYXRlZCBiYWNrZW5kIHByb3RvY29sIGNvZGUKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNjMwMgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFByZXZpb3VzbHksIHRoZSBpbnNwZWN0
b3IgcHJvdG9jb2wgd2FzIGV4cHJlc3NlZCBpbiBjb2RlIGluIGEgc29tZXdoYXQgY29uZnVzaW5n
IHdheToKKyAgICAgICAgIC0gdGhlIGVycm9yIHN0cmluZyB3YXMgdGhlIGZpcnN0IGFyZ3VtZW50
CisgICAgICAgICAtIHJlcXVpcmVkIHBhcmFtZXRlcnMgd2VyZSBgVGAgb3IgYGNvbnN0IFQmYAor
ICAgICAgICAgLSBvcHRpb25hbCBwYXJhbWV0ZXJzIHdlcmUgYGNvbnN0IFQqYAorICAgICAgICAg
LSBlbnVtIHBhcmFtZXRlcnMgd2VyZSB0aGUgdW5kZXJseWluZyB0eXBlIHJlcXVpcmluZyB0aGUg
YmFja2VuZCBkaXNwYXRjaGVyIGhhbmRsZXIgdG8KKyAgICAgICAgICAgcHJvY2VzcyBpdCBpbnN0
ZWFkIG9mIGl0IGJlaW5nIHByZXByb2Nlc3NlZAorICAgICAgICAgLSByZXF1aXJlZCByZXR1cm5z
IHdlcmUgYFQmYAorICAgICAgICAgLSBvcHRpb25hbCByZXR1cm5zIHdlcmUgYFQqYAorICAgICAg
ICBUaGlzIGRvZXNuJ3QgcmVhbGx5IG1ha2UgZm9yIGVhc3kvb2J2aW91cyByZWFkaW5nIG9mIGNv
ZGUgc2luY2UgdGhlIG9yZGVyIG9mIGFyZ3VtZW50cyBpcworICAgICAgICBub3Qgd2VpcmQgKGUu
Zy4gZXJyb3Igc3RyaW5nIGZpcnN0KSwgYW5kIHRoYXQgdGhlcmUgYXJlIHJlZmVyZW5jZXMvcG9p
bnRlcnMgdG8gcHJpbWl0aXZlCisgICAgICAgIHR5cGVzLgorCisgICAgICAgIFRoaXMgcGF0Y2gg
Y2xlYW5zIHVwIHRoZSBnZW5lcmF0ZWQgaW5zcGVjdG9yIHByb3RvY29sIGNvZGUgdG8gYmU6Cisg
ICAgICAgICAtIHJlcXVpcmVkIHBhcmFtZXRlcnMgYXJlIGBUYCBvciBgUmVmPFQ+JiZgCisgICAg
ICAgICAtIG9wdGlvbmFsIHBhcmFtZXRlcnMgYXJlIGBPcHRpb25hbDxUPiYmYCBvciBgUmVmUHRy
PFQ+JiZgCisgICAgICAgICAtIGVudW0gcGFyYW1ldGVycyBhcmUgcHJlcHJvY2Vzc2VkIGFuZCBw
YXNzZWQgdG8gdGhlIGJhY2tlbmQgZGlzcGF0Y2hlciBoYW5kbGVyIGlmIHZhbGlkCisgICAgICAg
ICAtIHN5bmNocm9ub3VzIGNvbW1hbmRzIHJldHVybiBgRXhwZWN0ZWQ8WCwgRXJyb3JTdHJpbmc+
YCB1c2luZyB0aGUgc2FtZSB0eXBlcy9ydWxlcyBhYm92ZQorICAgICAgICAgICB3aGVyZSBgWGAg
aXMgZWl0aGVyIGEgc2luZ2xlIHJldHVybiBvciBhIGBzdGQ6OnR1cGxlYCBvZiBtdWx0aXBsZSBy
ZXR1cm5zCisKKyAgICAgICAgVGhlIG9uZSBleGNlcHRpb24gdG8gdGhlIGFib3ZlIGlzIGBTdHJp
bmdgLCB3aGljaCBpcyBhbHJlYWR5IGEgdHJpLXN0YXRlIG9mIGBudWxsU3RyaW5nKClgLAorICAg
ICAgICBgZW1wdHlTdHJpbmcoKWAsIGFuZCBzb21ldGhpbmcgc2V0LCBzbyB0aGVyZSdzIG5vIG5l
ZWQgdG8gdXNlIGBPcHRpb25hbDxTdHJpbmc+YC4KKworICAgICAgICBBbHNvIHVzZSBgUHJvdG9j
b2xgIG9iamVjdHMvYHR5cGVkZWZzYCB3aGVyZXZlciBwb3NzaWJsZSB0byBmdXJ0aGVyIHJlbGF0
ZSB0aGUgcHJvdG9jb2wKKyAgICAgICAgSlNPTiBhbmQgdGhlIGFjdHVhbCBiYWNrZW5kIGRpc3Bh
dGNoZXIgaGFuZGxlciBpbXBsZW1lbnRhdGlvbi4KKworICAgICAgICAqIGluc3BlY3Rvci9zY3Jp
cHRzL2NvZGVnZW4vZ2VuZXJhdG9yLnB5OgorICAgICAgICAoR2VuZXJhdG9yLmdlbmVyYXRlX2lu
Y2x1ZGVzX2Zyb21fZW50cmllcyk6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdl
bi9jcHBfZ2VuZXJhdG9yX3RlbXBsYXRlcy5weToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0
cy9jb2RlZ2VuL2NwcF9nZW5lcmF0b3IucHk6CisgICAgICAgIChDcHBHZW5lcmF0b3IuaGVscGVy
c19uYW1lc3BhY2UpOgorICAgICAgICAoQ3BwR2VuZXJhdG9yLmNwcF9nZXR0ZXJfbWV0aG9kX2Zv
cl90eXBlKToKKyAgICAgICAgKENwcEdlbmVyYXRvci5jcHBfc2V0dGVyX21ldGhvZF9mb3JfdHlw
ZSk6CisgICAgICAgIChDcHBHZW5lcmF0b3IuY3BwX3Byb3RvY29sX3R5cGVfZm9yX3R5cGUpOgor
ICAgICAgICAoQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl90eXBlX21lbWJlcl9hcmd1bWVudCk6
IEFkZGVkLgorICAgICAgICAoQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl9jb21tYW5kX3BhcmFt
ZXRlcik6IEFkZGVkLgorICAgICAgICAoQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl9jb21tYW5k
X3JldHVybl9kZWNsYXJhdGlvbik6IEFkZGVkLgorICAgICAgICAoQ3BwR2VuZXJhdG9yLmNwcF90
eXBlX2Zvcl9jb21tYW5kX3JldHVybl9hcmd1bWVudCk6IEFkZGVkLgorICAgICAgICAoQ3BwR2Vu
ZXJhdG9yLmNwcF90eXBlX2Zvcl9ldmVudF9wYXJhbWV0ZXIpOiBBZGRlZC4KKyAgICAgICAgKENw
cEdlbmVyYXRvci5jcHBfdHlwZV9mb3JfZW51bSk6IEFkZGVkLgorICAgICAgICAoQ3BwR2VuZXJh
dG9yLnNob3VsZF9tb3ZlX2FyZ3VtZW50KTogQWRkZWQuCisgICAgICAgIChDcHBHZW5lcmF0b3Iu
c2hvdWxkX3JlbGVhc2VfYXJndW1lbnQpOiBBZGRlZC4KKyAgICAgICAgKENwcEdlbmVyYXRvci5z
aG91bGRfZGVyZWZlcmVuY2VfYXJndW1lbnQpOiBBZGRlZC4KKyAgICAgICAgKENwcEdlbmVyYXRv
ci5jcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZV9tZW1iZXIpOiBEZWxldGVkLgorICAgICAgICAo
Q3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl91bmNoZWNrZWRfZm9ybWFsX2luX3BhcmFtZXRlcik6
IERlbGV0ZWQuCisgICAgICAgIChDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX2NoZWNrZWRfZm9y
bWFsX2V2ZW50X3BhcmFtZXRlcik6IERlbGV0ZWQuCisgICAgICAgIChDcHBHZW5lcmF0b3IuY3Bw
X3R5cGVfZm9yX3R5cGVfbWVtYmVyKTogRGVsZXRlZC4KKyAgICAgICAgKENwcEdlbmVyYXRvci5j
cHBfdHlwZV9mb3JfdHlwZV93aXRoX25hbWUpOiBEZWxldGVkLgorICAgICAgICAoQ3BwR2VuZXJh
dG9yLmNwcF90eXBlX2Zvcl9mb3JtYWxfb3V0X3BhcmFtZXRlcik6IERlbGV0ZWQuCisgICAgICAg
IChDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX2Zvcm1hbF9hc3luY19wYXJhbWV0ZXIpOiBEZWxl
dGVkLgorICAgICAgICAoQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl9zdGFja19pbl9wYXJhbWV0
ZXIpOiBEZWxldGVkLgorICAgICAgICAoQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl9zdGFja19v
dXRfcGFyYW1ldGVyKTogRGVsZXRlZC4KKyAgICAgICAgKENwcEdlbmVyYXRvci5jcHBfYXNzZXJ0
aW9uX21ldGhvZF9mb3JfdHlwZV9tZW1iZXIpOiBEZWxldGVkLgorICAgICAgICAoQ3BwR2VuZXJh
dG9yLmNwcF9hc3NlcnRpb25fbWV0aG9kX2Zvcl90eXBlX21lbWJlci5hc3NlcnRpb25fbWV0aG9k
X2Zvcl90eXBlKTogRGVsZXRlZC4KKyAgICAgICAgKENwcEdlbmVyYXRvci5zaG91bGRfdXNlX3dy
YXBwZXJfZm9yX3JldHVybl90eXBlKTogRGVsZXRlZC4KKyAgICAgICAgKENwcEdlbmVyYXRvci5z
aG91bGRfdXNlX3JlZmVyZW5jZXNfZm9yX3R5cGUpOiBEZWxldGVkLgorICAgICAgICAoQ3BwR2Vu
ZXJhdG9yLnNob3VsZF9wYXNzX2J5X2NvcHlfZm9yX3JldHVybl90eXBlKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9hbHRlcm5hdGVf
YmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weToKKyAgICAgICAgKENwcEFsdGVybmF0ZUJhY2tl
bmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yLl9nZW5lcmF0ZV9zZWNvbmRhcnlfaGVhZGVyX2lu
Y2x1ZGVzKToKKyAgICAgICAgKENwcEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2Vu
ZXJhdG9yLl9nZW5lcmF0ZV9oYW5kbGVyX2RlY2xhcmF0aW9uX2Zvcl9jb21tYW5kKToKKyAgICAg
ICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9iYWNrZW5kX2Rpc3Bh
dGNoZXJfaGVhZGVyLnB5OgorICAgICAgICAoQ3BwQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5l
cmF0b3IuZ2VuZXJhdGVfb3V0cHV0KToKKyAgICAgICAgKENwcEJhY2tlbmREaXNwYXRjaGVySGVh
ZGVyR2VuZXJhdG9yLl9nZW5lcmF0ZV9zZWNvbmRhcnlfaGVhZGVyX2luY2x1ZGVzKToKKyAgICAg
ICAgKENwcEJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yLl9nZW5lcmF0ZV9oYW5kbGVy
X2RlY2xhcmF0aW9uc19mb3JfZG9tYWluKToKKyAgICAgICAgKENwcEJhY2tlbmREaXNwYXRjaGVy
SGVhZGVyR2VuZXJhdG9yLl9nZW5lcmF0ZV9oYW5kbGVyX2RlY2xhcmF0aW9uX2Zvcl9jb21tYW5k
KToKKyAgICAgICAgKENwcEJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yLl9nZW5lcmF0
ZV9hc3luY19oYW5kbGVyX2RlY2xhcmF0aW9uX2Zvcl9jb21tYW5kKToKKyAgICAgICAgKENwcEJh
Y2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yLl9nZW5lcmF0ZV9kaXNwYXRjaGVyX2RlY2xh
cmF0aW9uX2Zvcl9jb21tYW5kKToKKyAgICAgICAgKENwcEJhY2tlbmREaXNwYXRjaGVySGVhZGVy
R2VuZXJhdG9yLl9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9mb3JfcGFyYW1ldGVyKTogRGVsZXRl
ZC4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9iYWNr
ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHk6CisgICAgICAgIChDcHBCYWNrZW5kRGlz
cGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9zZWNvbmRhcnlfaGVhZGVy
X2luY2x1ZGVzKToKKyAgICAgICAgKENwcEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25H
ZW5lcmF0b3IuX2dlbmVyYXRlX3NtYWxsX2Rpc3BhdGNoZXJfc3dpdGNoX2ltcGxlbWVudGF0aW9u
X2Zvcl9kb21haW4pOgorICAgICAgICAoQ3BwQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlv
bkdlbmVyYXRvci5fZ2VuZXJhdGVfYXN5bmNfZGlzcGF0Y2hlcl9jbGFzc19mb3JfZG9tYWluKToK
KyAgICAgICAgKENwcEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dl
bmVyYXRlX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb25fZm9yX2NvbW1hbmQpOgorICAgICAgICAq
IGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2Zyb250ZW5kX2Rpc3BhdGNo
ZXJfaGVhZGVyLnB5OgorICAgICAgICAoQ3BwRnJvbnRlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJh
dG9yLl9nZW5lcmF0ZV9zZWNvbmRhcnlfaGVhZGVyX2luY2x1ZGVzKToKKyAgICAgICAgKENwcEZy
b250ZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvci5fZ2VuZXJhdGVfZGlzcGF0Y2hlcl9kZWNs
YXJhdGlvbl9mb3JfZXZlbnQpOgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4v
Z2VuZXJhdGVfY3BwX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHk6CisgICAg
ICAgIChDcHBGcm9udGVuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJh
dGVfc2Vjb25kYXJ5X2hlYWRlcl9pbmNsdWRlcyk6CisgICAgICAgIChDcHBGcm9udGVuZERpc3Bh
dGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfZGlzcGF0Y2hlcl9pbXBsZW1l
bnRhdGlvbl9mb3JfZXZlbnQpOgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4v
Z2VuZXJhdGVfY3BwX3Byb3RvY29sX3R5cGVzX2hlYWRlci5weToKKyAgICAgICAgKENwcFByb3Rv
Y29sVHlwZXNIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRlX3NlY29uZGFyeV9oZWFkZXJfaW5jbHVk
ZXMpOgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX3By
b3RvY29sX3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5OgorICAgICAgICAoQ3BwUHJvdG9jb2xUeXBl
c0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9zZWNvbmRhcnlfaGVhZGVyX2luY2x1
ZGVzKToKKyAgICAgICAgKENwcFByb3RvY29sVHlwZXNJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5f
Z2VuZXJhdGVfZW51bV9jb252ZXJzaW9uX21ldGhvZHNfZm9yX2RvbWFpbik6CisgICAgICAgIChD
cHBQcm90b2NvbFR5cGVzSW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX29wZW5fZmll
bGRfbmFtZXMpOgorICAgICAgICAoQ3BwUHJvdG9jb2xUeXBlc0ltcGxlbWVudGF0aW9uR2VuZXJh
dG9yLl9nZW5lcmF0ZV9hc3NlcnRpb25fZm9yX2VudW0pOgorICAgICAgICAqIGluc3BlY3Rvci9z
Y3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5
OgorICAgICAgICAoT2JqQ0JhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yLl9nZW5lcmF0
ZV9vYmpjX2hhbmRsZXJfZGVjbGFyYXRpb25fZm9yX2NvbW1hbmQpOgorICAgICAgICAqIGluc3Bl
Y3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19iYWNrZW5kX2Rpc3BhdGNoZXJfaW1w
bGVtZW50YXRpb24ucHk6CisgICAgICAgIChPYmpDQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRh
dGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfaGFuZGxlcl9pbXBsZW1lbnRhdGlvbl9mb3JfY29tbWFu
ZCk6CisgICAgICAgIChPYmpDQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRv
ci5fZ2VuZXJhdGVfc3VjY2Vzc19ibG9ja19mb3JfY29tbWFuZCk6CisgICAgICAgIChPYmpDQmFj
a2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfc3VjY2Vzc19i
bG9ja19mb3JfY29tbWFuZC5hbmQpOgorICAgICAgICAoT2JqQ0JhY2tlbmREaXNwYXRjaGVySW1w
bGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX2NvbnZlcnNpb25zX2Zvcl9jb21tYW5kLmlu
X3BhcmFtX2V4cHJlc3Npb24pOgorICAgICAgICAoT2JqQ0JhY2tlbmREaXNwYXRjaGVySW1wbGVt
ZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX2NvbnZlcnNpb25zX2Zvcl9jb21tYW5kKToKKyAg
ICAgICAgKE9iakNCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5l
cmF0ZV9pbnZvY2F0aW9uX2Zvcl9jb21tYW5kKToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0
cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlv
bi5weToKKyAgICAgICAgKE9iakNGcm9udGVuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVy
YXRvci5fZ2VuZXJhdGVfZXZlbnQpOgorICAgICAgICAoT2JqQ0Zyb250ZW5kRGlzcGF0Y2hlcklt
cGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9ldmVudF9vdXRfcGFyYW1ldGVycyk6Cisg
ICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9vYmpjX2dlbmVyYXRvcl90ZW1wbGF0
ZXMucHk6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9vYmpjX2dlbmVyYXRv
ci5weToKKyAgICAgICAgKE9iakNHZW5lcmF0b3IucHJvdG9jb2xfdHlwZV9mb3JfdHlwZSk6Cisg
ICAgICAgIChPYmpDR2VuZXJhdG9yLm9iamNfdHlwZV9mb3JfcGFyYW1faW50ZXJuYWwpOgorICAg
ICAgICAoT2JqQ0dlbmVyYXRvci5vYmpjX3Byb3RvY29sX2ltcG9ydF9leHByZXNzaW9uX2Zvcl9w
YXJhbWV0ZXIpOgorCisgICAgICAgICogaW5zcGVjdG9yL3Byb3RvY29sL1BhZ2UuanNvbjoKKyAg
ICAgICAgTm93IHRoYXQgZW51bXMgYXJlIHByb2Nlc3NlZCBiZWZvcmUgYmVpbmcgcGFzc2VkIHRv
IGJhY2tlbmQgZGlzcGFjaGVyIGhhbmRsZXJzLCB0aGUKKyAgICAgICAgYGFwcGVhcmFuY2VgIHBh
cmFtZXRlciBvZiBgUGFnZS5zZXRGb3JjZWRBcHBlYXJhbmNlYCBtdXN0IGJlIG1hcmtlZCBgb3B0
aW9uYWxgIGFzCisgICAgICAgIHRoZXJlJ3Mgbm8gd2F5IGZvciBpdCB0byBhY2NlcHQgYW4gZW1w
dHkgc3RyaW5nLCBhcyB0aGF0J3Mgbm90IHBvc3NpYmxlIGZvciBhbiBlbnVtLgorCisgICAgICAg
ICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rv
ci9hZ2VudHMvSW5zcGVjdG9yQWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9yQXVkaXRBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVj
dG9yQXVkaXRBZ2VudC5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JD
b25zb2xlQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNvbnNv
bGVBZ2VudC5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JEZWJ1Z2dl
ckFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JEZWJ1Z2dlckFn
ZW50LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckhlYXBBZ2VudC5o
OgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9ySGVhcEFnZW50LmNwcDoKKyAg
ICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclJ1bnRpbWVBZ2VudC5oOgorICAgICAg
ICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUnVudGltZUFnZW50LmNwcDoKKyAgICAgICAg
KiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclNjcmlwdFByb2ZpbGVyQWdlbnQuaDoKKyAgICAg
ICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclNjcmlwdFByb2ZpbGVyQWdlbnQuY3BwOgor
ICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yVGFyZ2V0QWdlbnQuaDoKKyAgICAg
ICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclRhcmdldEFnZW50LmNwcDoKKyAgICAgICAg
KiBpbnNwZWN0b3IvYWdlbnRzL0pTR2xvYmFsT2JqZWN0QXVkaXRBZ2VudC5oOgorICAgICAgICAq
IGluc3BlY3Rvci9hZ2VudHMvSlNHbG9iYWxPYmplY3RBdWRpdEFnZW50LmNwcDoKKyAgICAgICAg
KiBpbnNwZWN0b3IvYWdlbnRzL0pTR2xvYmFsT2JqZWN0RGVidWdnZXJBZ2VudC5oOgorICAgICAg
ICAqIGluc3BlY3Rvci9hZ2VudHMvSlNHbG9iYWxPYmplY3REZWJ1Z2dlckFnZW50LmNwcDoKKyAg
ICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0pTR2xvYmFsT2JqZWN0UnVudGltZUFnZW50Lmg6Cisg
ICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9KU0dsb2JhbE9iamVjdFJ1bnRpbWVBZ2VudC5jcHA6
CisgICAgICAgICogaW5zcGVjdG9yL0pTR2xvYmFsT2JqZWN0Q29uc29sZUNsaWVudC5jcHA6Cisg
ICAgICAgICogaW5zcGVjdG9yL0pTR2xvYmFsT2JqZWN0SW5zcGVjdG9yQ29udHJvbGxlci5jcHA6
CisgICAgICAgIEVsaWRlZCBiYWNrZW5kIGRpc3BhdGNoZXIgaGFuZGxlciBjaGFuZ2VzIGRlc2Ny
aWJlIGFib3ZlLgorCisgICAgICAgICogYmluZGluZ3MvU2NyaXB0VmFsdWUuY3BwOgorICAgICAg
ICAoSW5zcGVjdG9yOjpqc1RvSW5zcGVjdG9yVmFsdWUpOgorICAgICAgICAqIGluc3BlY3Rvci9B
c3luY1N0YWNrVHJhY2UuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvQXN5bmNTdGFja1RyYWNlLmNw
cDoKKyAgICAgICAgKEluc3BlY3Rvcjo6QXN5bmNTdGFja1RyYWNlOjpidWlsZEluc3BlY3Rvck9i
amVjdCBjb25zdCk6CisgICAgICAgICogaW5zcGVjdG9yL0NvbnNvbGVNZXNzYWdlLmNwcDoKKyAg
ICAgICAgKEluc3BlY3Rvcjo6Q29uc29sZU1lc3NhZ2U6OmFkZFRvRnJvbnRlbmQpOgorICAgICAg
ICAqIGluc3BlY3Rvci9JbmplY3RlZFNjcmlwdEJhc2UuaDoKKyAgICAgICAgKiBpbnNwZWN0b3Iv
SW5qZWN0ZWRTY3JpcHRCYXNlLmNwcDoKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3Jp
cHRCYXNlOjptYWtlRXZhbENhbGwpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlw
dEJhc2U6OmNoZWNrQ2FsbFJlc3VsdCk6CisgICAgICAgIChJbnNwZWN0b3I6OkluamVjdGVkU2Ny
aXB0QmFzZTo6Y2hlY2tBc3luY0NhbGxSZXN1bHQpOgorICAgICAgICAqIGluc3BlY3Rvci9Jbmpl
Y3RlZFNjcmlwdC5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbmplY3RlZFNjcmlwdC5jcHA6Cisg
ICAgICAgIChJbnNwZWN0b3I6OkluamVjdGVkU2NyaXB0OjpleGVjdXRlKToKKyAgICAgICAgKElu
c3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHQ6OmV2YWx1YXRlKToKKyAgICAgICAgKEluc3BlY3Rvcjo6
SW5qZWN0ZWRTY3JpcHQ6OmNhbGxGdW5jdGlvbk9uKToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5q
ZWN0ZWRTY3JpcHQ6OmV2YWx1YXRlT25DYWxsRnJhbWUpOgorICAgICAgICAoSW5zcGVjdG9yOjpJ
bmplY3RlZFNjcmlwdDo6Z2V0RnVuY3Rpb25EZXRhaWxzKToKKyAgICAgICAgKEluc3BlY3Rvcjo6
SW5qZWN0ZWRTY3JpcHQ6OmZ1bmN0aW9uRGV0YWlscyk6CisgICAgICAgIChJbnNwZWN0b3I6Oklu
amVjdGVkU2NyaXB0OjpnZXRQcmV2aWV3KToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5qZWN0ZWRT
Y3JpcHQ6OmdldFByb3BlcnRpZXMpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlw
dDo6Z2V0RGlzcGxheWFibGVQcm9wZXJ0aWVzKToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5qZWN0
ZWRTY3JpcHQ6OmdldEludGVybmFsUHJvcGVydGllcyk6CisgICAgICAgIChJbnNwZWN0b3I6Oklu
amVjdGVkU2NyaXB0OjpnZXRDb2xsZWN0aW9uRW50cmllcyk6CisgICAgICAgIChJbnNwZWN0b3I6
OkluamVjdGVkU2NyaXB0OjpzYXZlUmVzdWx0KToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5qZWN0
ZWRTY3JpcHQ6OndyYXBDYWxsRnJhbWVzIGNvbnN0KToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5q
ZWN0ZWRTY3JpcHQ6OndyYXBPYmplY3QgY29uc3QpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbmpl
Y3RlZFNjcmlwdDo6d3JhcEpTT05TdHJpbmcgY29uc3QpOgorICAgICAgICAoSW5zcGVjdG9yOjpJ
bmplY3RlZFNjcmlwdDo6d3JhcFRhYmxlIGNvbnN0KToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5q
ZWN0ZWRTY3JpcHQ6OnByZXZpZXdWYWx1ZSBjb25zdCk6CisgICAgICAgICogaW5zcGVjdG9yL0lu
amVjdGVkU2NyaXB0TWFuYWdlci5jcHA6CisgICAgICAgIChJbnNwZWN0b3I6OkluamVjdGVkU2Ny
aXB0TWFuYWdlcjo6aW5qZWN0ZWRTY3JpcHRGb3JPYmplY3RJZCk6CisgICAgICAgICogaW5zcGVj
dG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg6CisgICAgICAgICogaW5zcGVjdG9yL0lu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmNwcDoKKyAgICAgICAgKEluc3BlY3Rvcjo6QmFja2Vu
ZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZTo6c2VuZFN1Y2Nlc3MpOgorICAgICAgICAoSW5zcGVj
dG9yOjpCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gpOgorICAgICAgICAoSW5zcGVjdG9yOjpC
YWNrZW5kRGlzcGF0Y2hlcjo6c2VuZFJlc3BvbnNlKToKKyAgICAgICAgKEluc3BlY3Rvcjo6QmFj
a2VuZERpc3BhdGNoZXI6OmdldFByb3BlcnR5VmFsdWUpOgorICAgICAgICAoSW5zcGVjdG9yOjpC
YWNrZW5kRGlzcGF0Y2hlcjo6Z2V0Qm9vbGVhbik6CisgICAgICAgIChJbnNwZWN0b3I6OkJhY2tl
bmREaXNwYXRjaGVyOjpnZXRJbnRlZ2VyKToKKyAgICAgICAgKEluc3BlY3Rvcjo6QmFja2VuZERp
c3BhdGNoZXI6OmdldERvdWJsZSk6CisgICAgICAgIChJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRj
aGVyOjpnZXRTdHJpbmcpOgorICAgICAgICAoSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlcjo6
Z2V0VmFsdWUpOgorICAgICAgICAoSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0T2Jq
ZWN0KToKKyAgICAgICAgKEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXI6OmdldEFycmF5KToK
KyAgICAgICAgKEluc3BlY3Rvcjo6Y2FzdFRvSW50ZWdlcik6IERlbGV0ZWQuCisgICAgICAgIChJ
bnNwZWN0b3I6OmNhc3RUb051bWJlcik6IERlbGV0ZWQuCisgICAgICAgICogaW5zcGVjdG9yL0lu
c3BlY3RvclByb3RvY29sVHlwZXMuaDoKKyAgICAgICAgKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkJp
bmRpbmdUcmFpdHM8SlNPTjo6QXJyYXlPZjxUPj46OnJ1bnRpbWVDYXN0KToKKyAgICAgICAgKElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkJpbmRpbmdUcmFpdHM8SlNPTjo6QXJyYXlPZjxUPj46OmFzc2Vy
dFZhbHVlSGFzRXhwZWN0ZWRUeXBlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvcmVtb3RlL3NvY2tl
dC9SZW1vdGVJbnNwZWN0b3JDb25uZWN0aW9uQ2xpZW50LmNwcDoKKyAgICAgICAgKEluc3BlY3Rv
cjo6UmVtb3RlSW5zcGVjdG9yQ29ubmVjdGlvbkNsaWVudDo6ZXh0cmFjdEV2ZW50KToKKyAgICAg
ICAgKiBydW50aW1lL1R5cGVTZXQuY3BwOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTaGFwZTo6
aW5zcGVjdG9yUmVwcmVzZW50YXRpb24pOgorICAgICAgICBgSlNPTmAgY2xhc3NlcyBub3cgdXNl
IGBSZWYmJmAgd2hlcmV2ZXIgcG9zc2libGUgYW5kIGBPcHRpb25hbGAgaW5zdGVhZCBvZiBhbiBv
dXQgcGFyYW1ldGVyCisgICAgICAgIGZvciBgZ2V0KmAvYGFzKmAgc28gdGhhdCB2YWx1ZXMgY2Fu
IGJlIG1vcmUgZWFzaWx5IG1hbmlwdWxhdGVkIGFuZCBjYW4gYmUgY29uZmlkZW50bHkga25vd24K
KyAgICAgICAgdG8gZXhpc3QuCisKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9l
bnVtLXZhbHVlcy5qc29uOgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVj
dGVkL2NvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNv
bi1yZXN1bHQ6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvY29t
bWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbi1yZXN1bHQ6CisgICAgICAgICogaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJl
dHVybi1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2V4cGVjdGVkL2RlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24tcmVzdWx0
OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2RvbWFpbi1kZWJ1
Z2dhYmxlVHlwZXMuanNvbi1yZXN1bHQ6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZXhwZWN0ZWQvZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVU
eXBlLmpzb24tcmVzdWx0OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVj
dGVkL2RvbWFpbi10YXJnZXRUeXBlcy5qc29uLXJlc3VsdDoKKyAgICAgICAgKiBpbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9leHBlY3RlZC9kb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVz
Lmpzb24tcmVzdWx0OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVk
L2VudW0tdmFsdWVzLmpzb24tcmVzdWx0OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2V4cGVjdGVkL2V2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVU
eXBlLmpzb24tcmVzdWx0OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVj
dGVkL2V2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbi1yZXN1bHQ6CisgICAgICAg
ICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZ2VuZXJhdGUtZG9tYWlucy13aXRo
LWZlYXR1cmUtZ3VhcmRzLmpzb24tcmVzdWx0OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2V4cGVjdGVkL3NhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24tcmVzdWx0
OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3NoYWRvd2VkLW9w
dGlvbmFsLXR5cGUtc2V0dGVycy5qc29uLXJlc3VsdDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9leHBlY3RlZC9zaG91bGQtc3RyaXAtY29tbWVudHMuanNvbi1yZXN1bHQ6Cisg
ICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlv
bi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24tcmVzdWx0OgorICAgICAgICAqIGluc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29u
LXJlc3VsdDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBl
LWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uLXJlc3VsdDoKKyAgICAgICAgKiBpbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24t
cmVzdWx0OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUt
cmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbi1yZXN1bHQ6CisgICAgICAgICogaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS13aXRoLW9wZW4tcGFyYW1ldGVycy5qc29uLXJl
c3VsdDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC92ZXJzaW9u
Lmpzb24tcmVzdWx0OgorCiAyMDIwLTA5LTA1ICBEZXZpbiBSb3Vzc28gIDxkcm91c3NvQGFwcGxl
LmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBhbGxvdyBET00gYnJlYWtwb2ludHMgdG8g
YmUgY29uZmlndXJlZApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V1RGL0NoYW5nZUxvZwppbmRleCBkMGI1MWVkYjgwNjA4NjBiN2JiMTNjMDYyYTUwMzExZmE0MjRm
MWRhLi4wZTMxY2E4M2U0ZDFmNWY4NjcyMDc0MjliOGU0MDhjNzEwZjk4MmM2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV1RGL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDUxIEBACisyMDIwLTA5LTA4ICBEZXZpbiBSb3Vzc28gIDxkcm91c3NvQGFwcGxlLmNvbT4K
KworICAgICAgICBXZWIgSW5zcGVjdG9yOiBtb2Rlcm5pemUgZ2VuZXJhdGVkIGJhY2tlbmQgcHJv
dG9jb2wgY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjE2MzAyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiB3dGYvSlNPTlZhbHVlcy5oOgorICAgICAgICAoV1RGOjpKU09OSW1wbDo6T2JqZWN0QmFz
ZTo6c2V0VmFsdWUpOgorICAgICAgICAoV1RGOjpKU09OSW1wbDo6T2JqZWN0QmFzZTo6c2V0T2Jq
ZWN0KToKKyAgICAgICAgKFdURjo6SlNPTkltcGw6Ok9iamVjdEJhc2U6OnNldEFycmF5KToKKyAg
ICAgICAgKFdURjo6SlNPTkltcGw6OkFycmF5QmFzZTo6cHVzaFZhbHVlKToKKyAgICAgICAgKFdU
Rjo6SlNPTkltcGw6OkFycmF5QmFzZTo6cHVzaE9iamVjdCk6CisgICAgICAgIChXVEY6OkpTT05J
bXBsOjpBcnJheUJhc2U6OnB1c2hBcnJheSk6CisgICAgICAgIChXVEY6OkpTT05JbXBsOjpBcnJh
eU9mOjpBcnJheU9mKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6SlNPTkltcGw6OkFycmF5T2Y6
OmNhc3RlZEFycmF5KTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6SlNPTkltcGw6OkFycmF5T2Y6
OmFkZEl0ZW0pOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpKU09OSW1wbDo6QXJyYXlPZjo6Y3Jl
YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKiB3dGYvSlNPTlZhbHVlcy5jcHA6CisgICAgICAgIChX
VEY6OkpTT05JbXBsOjpWYWx1ZTo6YXNWYWx1ZSk6CisgICAgICAgIChXVEY6OkpTT05JbXBsOjpW
YWx1ZTo6YXNPYmplY3QpOgorICAgICAgICAoV1RGOjpKU09OSW1wbDo6VmFsdWU6OmFzQXJyYXkp
OgorICAgICAgICAoV1RGOjpKU09OSW1wbDo6VmFsdWU6OnBhcnNlSlNPTik6CisgICAgICAgIChX
VEY6OkpTT05JbXBsOjpWYWx1ZTo6YXNCb29sZWFuIGNvbnN0KToKKyAgICAgICAgKFdURjo6SlNP
TkltcGw6OlZhbHVlOjphc0RvdWJsZSBjb25zdCk6CisgICAgICAgIChXVEY6OkpTT05JbXBsOjpW
YWx1ZTo6YXNJbnRlZ2VyIGNvbnN0KToKKyAgICAgICAgKFdURjo6SlNPTkltcGw6OlZhbHVlOjph
c1N0cmluZyBjb25zdCk6CisgICAgICAgIChXVEY6OkpTT05JbXBsOjpPYmplY3RCYXNlOjphc09i
amVjdCk6CisgICAgICAgIChXVEY6OkpTT05JbXBsOjpPYmplY3RCYXNlOjptZW1vcnlDb3N0IGNv
bnN0KToKKyAgICAgICAgKFdURjo6SlNPTkltcGw6Ok9iamVjdEJhc2U6OmdldEJvb2xlYW4gY29u
c3QpOgorICAgICAgICAoV1RGOjpKU09OSW1wbDo6T2JqZWN0QmFzZTo6Z2V0RG91YmxlIGNvbnN0
KToKKyAgICAgICAgKFdURjo6SlNPTkltcGw6Ok9iamVjdEJhc2U6OmdldEludGVnZXIgY29uc3Qp
OgorICAgICAgICAoV1RGOjpKU09OSW1wbDo6T2JqZWN0QmFzZTo6Z2V0U3RyaW5nIGNvbnN0KToK
KyAgICAgICAgKFdURjo6SlNPTkltcGw6Ok9iamVjdEJhc2U6OmdldE9iamVjdCBjb25zdCk6Cisg
ICAgICAgIChXVEY6OkpTT05JbXBsOjpPYmplY3RCYXNlOjpnZXRBcnJheSBjb25zdCk6CisgICAg
ICAgIChXVEY6OkpTT05JbXBsOjpPYmplY3RCYXNlOjpnZXRWYWx1ZSBjb25zdCk6CisgICAgICAg
IChXVEY6OkpTT05JbXBsOjpPYmplY3RCYXNlOjpPYmplY3RCYXNlKToKKyAgICAgICAgKFdURjo6
SlNPTkltcGw6OkFycmF5QmFzZTo6YXNBcnJheSk6CisgICAgICAgIChXVEY6OkpTT05JbXBsOjpB
cnJheUJhc2U6OndyaXRlSlNPTiBjb25zdCk6CisgICAgICAgIChXVEY6OkpTT05JbXBsOjpBcnJh
eUJhc2U6OkFycmF5QmFzZSk6CisgICAgICAgIChXVEY6OkpTT05JbXBsOjpBcnJheUJhc2U6Omdl
dCBjb25zdCk6CisgICAgICAgIChXVEY6OkpTT05JbXBsOjpBcnJheUJhc2U6Om1lbW9yeUNvc3Qg
Y29uc3QpOgorICAgICAgICAoV1RGOjpKU09OSW1wbDo6T2JqZWN0QmFzZTo6b3BlbkFjY2Vzc29y
cyk6IERlbGV0ZWQuCisgICAgICAgIFVzZSBgUmVmJiZgIHdoZXJldmVyIHBvc3NpYmxlIGFuZCBg
T3B0aW9uYWxgIGluc3RlYWQgb2YgYW4gb3V0IHBhcmFtZXRlciBmb3IgYGdldCpgL2BhcypgCisg
ICAgICAgIHNvIHRoYXQgdmFsdWVzIGNhbiBiZSBtb3JlIGVhc2lseSBtYW5pcHVsYXRlZCBhbmQg
Y2FuIGJlIGNvbmZpZGVudGx5IGFzc3VtZWQgdG8gZXhpc3QuCisgICAgICAgIFJlbW92ZSB1bnVz
ZWQgb3ZlcmxvYWRzIGFuZCBhbGxvdyBzdWJjbGFzc2VzIHRvIGNhbGwgYGFzKmAgaW5zdGVhZCBv
ZiBgb3BlbkFjY2Vzc29yc2AgYXMKKyAgICAgICAgdGhleSdyZSBlZmZlY3RpdmVseSB0aGUgc2Ft
ZSB0aGluZy4KKwogMjAyMC0wOS0wNSAgTXlsZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBw
bGUuY29tPgogCiAgICAgICAgIFtDb2NvYV0gQ1RGb250SXNTeXN0ZW1VSUZvbnQoKSBpcyBmYXN0
ZXIgdGhhbiBDVEZvbnREZXNjcmlwdG9ySXNTeXN0ZW1VSUZvbnQoKS9DVEZvbnRDb3B5Rm9udERl
c2NyaXB0b3IoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDA3YTUzNWQ0ZDg0YzNlOWFiZjhiMjVmMGVhYTZkMjhi
ZWUzMjNiOWQuLmI3MTNlMGY4MWZmNjc4ZGI3MTEwNDU4OWUwNWFjN2Y1NTExNDgyOTkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwxMzggQEAKKzIwMjAtMDktMDggIERldmluIFJvdXNzbyAgPGRyb3Vz
c29AYXBwbGUuY29tPgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IG1vZGVybml6ZSBnZW5lcmF0
ZWQgYmFja2VuZCBwcm90b2NvbCBjb2RlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMTYzMDIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBQcmV2aW91c2x5LCB0aGUgaW5zcGVjdG9yIHByb3RvY29sIHdhcyBl
eHByZXNzZWQgaW4gY29kZSBpbiBhIHNvbWV3aGF0IGNvbmZ1c2luZyB3YXk6CisgICAgICAgICAt
IHRoZSBlcnJvciBzdHJpbmcgd2FzIHRoZSBmaXJzdCBhcmd1bWVudAorICAgICAgICAgLSByZXF1
aXJlZCBwYXJhbWV0ZXJzIHdlcmUgYFRgIG9yIGBjb25zdCBUJmAKKyAgICAgICAgIC0gb3B0aW9u
YWwgcGFyYW1ldGVycyB3ZXJlIGBjb25zdCBUKmAKKyAgICAgICAgIC0gZW51bSBwYXJhbWV0ZXJz
IHdlcmUgdGhlIHVuZGVybHlpbmcgdHlwZSByZXF1aXJpbmcgdGhlIGJhY2tlbmQgZGlzcGF0Y2hl
ciBoYW5kbGVyIHRvCisgICAgICAgICAgIHByb2Nlc3MgaXQgaW5zdGVhZCBvZiBpdCBiZWluZyBw
cmVwcm9jZXNzZWQKKyAgICAgICAgIC0gcmVxdWlyZWQgcmV0dXJucyB3ZXJlIGBUJmAKKyAgICAg
ICAgIC0gb3B0aW9uYWwgcmV0dXJucyB3ZXJlIGBUKmAKKyAgICAgICAgVGhpcyBkb2Vzbid0IHJl
YWxseSBtYWtlIGZvciBlYXN5L29idmlvdXMgcmVhZGluZyBvZiBjb2RlIHNpbmNlIHRoZSBvcmRl
ciBvZiBhcmd1bWVudHMgaXMKKyAgICAgICAgbm90IHdlaXJkIChlLmcuIGVycm9yIHN0cmluZyBm
aXJzdCksIGFuZCB0aGF0IHRoZXJlIGFyZSByZWZlcmVuY2VzL3BvaW50ZXJzIHRvIHByaW1pdGl2
ZQorICAgICAgICB0eXBlcy4KKworICAgICAgICBUaGlzIHBhdGNoIGNsZWFucyB1cCB0aGUgZ2Vu
ZXJhdGVkIGluc3BlY3RvciBwcm90b2NvbCBjb2RlIHRvIGJlOgorICAgICAgICAgLSByZXF1aXJl
ZCBwYXJhbWV0ZXJzIGFyZSBgVGAgb3IgYFJlZjxUPiYmYAorICAgICAgICAgLSBvcHRpb25hbCBw
YXJhbWV0ZXJzIGFyZSBgT3B0aW9uYWw8VD4mJmAgb3IgYFJlZlB0cjxUPiYmYAorICAgICAgICAg
LSBlbnVtIHBhcmFtZXRlcnMgYXJlIHByZXByb2Nlc3NlZCBhbmQgcGFzc2VkIHRvIHRoZSBiYWNr
ZW5kIGRpc3BhdGNoZXIgaGFuZGxlciBpZiB2YWxpZAorICAgICAgICAgLSBzeW5jaHJvbm91cyBj
b21tYW5kcyByZXR1cm4gYEV4cGVjdGVkPFgsIEVycm9yU3RyaW5nPmAgdXNpbmcgdGhlIHNhbWUg
dHlwZXMvcnVsZXMgYWJvdmUKKyAgICAgICAgICAgd2hlcmUgYFhgIGlzIGVpdGhlciBhIHNpbmds
ZSByZXR1cm4gb3IgYSBgc3RkOjp0dXBsZWAgb2YgbXVsdGlwbGUgcmV0dXJucworCisgICAgICAg
IFRoZSBvbmUgZXhjZXB0aW9uIHRvIHRoZSBhYm92ZSBpcyBgU3RyaW5nYCwgd2hpY2ggaXMgYWxy
ZWFkeSBhIHRyaS1zdGF0ZSBvZiBgbnVsbFN0cmluZygpYCwKKyAgICAgICAgYGVtcHR5U3RyaW5n
KClgLCBhbmQgc29tZXRoaW5nIHNldCwgc28gdGhlcmUncyBubyBuZWVkIHRvIHVzZSBgT3B0aW9u
YWw8U3RyaW5nPmAuCisKKyAgICAgICAgQWxzbyB1c2UgYFByb3RvY29sYCBvYmplY3RzL2B0eXBl
ZGVmc2Agd2hlcmV2ZXIgcG9zc2libGUgdG8gZnVydGhlciByZWxhdGUgdGhlIHByb3RvY29sCisg
ICAgICAgIEpTT04gYW5kIHRoZSBhY3R1YWwgYmFja2VuZCBkaXNwYXRjaGVyIGhhbmRsZXIgaW1w
bGVtZW50YXRpb24uCisKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQXVkaXRSZXNvdXJj
ZXNPYmplY3QuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDYW52YXMuaDoKKyAg
ICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzLmNwcDoKKyAgICAgICAgKiBpbnNwZWN0
b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rv
clN0eWxlU2hlZXQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5j
cHA6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBbmltYXRpb25BZ2VudC5o
OgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQW5pbWF0aW9uQWdlbnQuY3Bw
OgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFn
ZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBcHBsaWNhdGlvbkNh
Y2hlQWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ1BVUHJv
ZmlsZXJBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ1BVUHJv
ZmlsZXJBZ2VudC5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDU1NB
Z2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ1NTQWdlbnQuY3Bw
OgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ2FudmFzQWdlbnQuaDoKKyAg
ICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNhbnZhc0FnZW50LmNwcDoKKyAgICAg
ICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50Lmg6CisgICAgICAgICogaW5z
cGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01BZ2VudC5jcHA6CisgICAgICAgICogaW5zcGVjdG9y
L2FnZW50cy9JbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9y
L2FnZW50cy9JbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0
b3IvYWdlbnRzL0luc3BlY3RvckRPTVN0b3JhZ2VBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rv
ci9hZ2VudHMvSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0
b3IvYWdlbnRzL0luc3BlY3RvckRhdGFiYXNlQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3Iv
YWdlbnRzL0luc3BlY3RvckRhdGFiYXNlQWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9h
Z2VudHMvSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdl
bnRzL0luc3BlY3RvckluZGV4ZWREQkFnZW50LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdl
bnRzL0luc3BlY3RvckxheWVyVHJlZUFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50
cy9JbnNwZWN0b3JMYXllclRyZWVBZ2VudC5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50
cy9JbnNwZWN0b3JNZW1vcnlBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5z
cGVjdG9yTWVtb3J5QWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVj
dG9yTmV0d29ya0FnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JO
ZXR3b3JrQWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUGFn
ZUFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JQYWdlQWdlbnQu
Y3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5o
OgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5jcHA6
CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JXb3JrZXJBZ2VudC5oOgorICAg
ICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yV29ya2VyQWdlbnQuY3BwOgorICAgICAg
ICAqIGluc3BlY3Rvci9hZ2VudHMvV2ViQ29uc29sZUFnZW50Lmg6CisgICAgICAgICogaW5zcGVj
dG9yL2FnZW50cy9XZWJEZWJ1Z2dlckFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50
cy9XZWJEZWJ1Z2dlckFnZW50LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL1dlYkhl
YXBBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvV2ViSGVhcEFnZW50LmNwcDoK
KyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZUF1ZGl0QWdlbnQuaDoKKyAgICAg
ICAgKiBpbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZUF1ZGl0QWdlbnQuY3BwOgorICAgICAgICAq
IGluc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlQ29uc29sZUFnZW50Lmg6CisgICAgICAgICogaW5z
cGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VDb25zb2xlQWdlbnQuY3BwOgorICAgICAgICAqIGluc3Bl
Y3Rvci9hZ2VudHMvcGFnZS9QYWdlRE9NRGVidWdnZXJBZ2VudC5oOgorICAgICAgICAqIGluc3Bl
Y3Rvci9hZ2VudHMvcGFnZS9QYWdlRE9NRGVidWdnZXJBZ2VudC5jcHA6CisgICAgICAgICogaW5z
cGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VEZWJ1Z2dlckFnZW50Lmg6CisgICAgICAgICogaW5zcGVj
dG9yL2FnZW50cy9wYWdlL1BhZ2VEZWJ1Z2dlckFnZW50LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0
b3IvYWdlbnRzL3BhZ2UvUGFnZUhlYXBBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2Vu
dHMvcGFnZS9QYWdlSGVhcEFnZW50LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL3Bh
Z2UvUGFnZU5ldHdvcmtBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvcGFnZS9Q
YWdlTmV0d29ya0FnZW50LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFn
ZVJ1bnRpbWVBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlUnVu
dGltZUFnZW50LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9TZXJ2aWNl
V29ya2VyQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9TZXJ2aWNl
V29ya2VyQWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtl
ckF1ZGl0QWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJD
b25zb2xlQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJB
dWRpdEFnZW50LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJE
T01EZWJ1Z2dlckFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29y
a2VyRE9NRGVidWdnZXJBZ2VudC5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy93b3Jr
ZXIvV29ya2VyRGVidWdnZXJBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvd29y
a2VyL1dvcmtlckRlYnVnZ2VyQWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMv
d29ya2VyL1dvcmtlck5ldHdvcmtBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMv
d29ya2VyL1dvcmtlck5ldHdvcmtBZ2VudC5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50
cy93b3JrZXIvV29ya2VyUnVudGltZUFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50
cy93b3JrZXIvV29ya2VyUnVudGltZUFnZW50LmNwcDoKKyAgICAgICAgRWxpZGVkIGJhY2tlbmQg
ZGlzcGF0Y2hlciBoYW5kbGVyIGNoYW5nZXMgZGVzY3JpYmUgYWJvdmUuCisKKyAgICAgICAgKiBp
bnNwZWN0b3IvQ29tbWFuZExpbmVBUElIb3N0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbW1h
bmRMaW5lQVBJSG9zdDo6aW5zcGVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDb21tYW5kTGluZUFQ
SUhvc3Q6OmNsZWFyQ29uc29sZU1lc3NhZ2VzKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVj
dG9yRnJvbnRlbmRIb3N0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnZhbHVlUGF5bG9hZEZyb21K
U09OVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRIb3N0Ojpsb2dE
aWFnbm9zdGljRXZlbnQpOgorICAgICAgICAqIGluc3BlY3Rvci9UaW1lbGluZVJlY29yZEZhY3Rv
cnkuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvVGltZWxpbmVSZWNvcmRGYWN0b3J5LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6YXBwZW5kTGF5b3V0Um9vdCk6
CisgICAgICAgICogTW9kdWxlcy9hcHBsaWNhdGlvbm1hbmlmZXN0L0FwcGxpY2F0aW9uTWFuaWZl
c3RQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25NYW5pZmVzdFBhcnNl
cjo6cGFyc2VNYW5pZmVzdCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbk1hbmlmZXN0
UGFyc2VyOjpwYXJzZVN0YXJ0VVJMKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uTWFu
aWZlc3RQYXJzZXI6OnBhcnNlRGlzcGxheSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlv
bk1hbmlmZXN0UGFyc2VyOjpwYXJzZVNjb3BlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0
aW9uTWFuaWZlc3RQYXJzZXI6OnBhcnNlR2VuZXJpY1N0cmluZyk6CisgICAgICAgICogTW9kdWxl
cy9lbmNyeXB0ZWRtZWRpYS9Jbml0RGF0YVJlZ2lzdHJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OmV4dHJhY3RLZXlJRHNLZXlpZHMpOgorICAgICAgICAqIHBsYXRmb3JtL2VuY3J5cHRlZG1lZGlh
L0NETVV0aWxpdGllcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDRE1VdGlsaXRpZXM6OnBhcnNl
SlNPTk9iamVjdCk6CisgICAgICAgICogcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkv
Q0RNQ2xlYXJLZXkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VMaWNlbnNlRm9ybWF0KToK
KyAgICAgICAgKFdlYkNvcmU6OnBhcnNlTGljZW5zZVJlbGVhc2VBY2tub3dsZWRnZW1lbnRGb3Jt
YXQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9DRE1GYWlyUGxh
eVN0cmVhbWluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpleHRyYWN0U2luZkRhdGEpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NETUluc3RhbmNlRmFp
clBsYXlTdHJlYW1pbmdBVkZPYmpDLm1tOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VKU09OVmFs
dWUpOgorICAgICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VTZXNzaW9uRmFpclBsYXlTdHJlYW1p
bmdBVkZPYmpDOjp1cGRhdGVMaWNlbnNlKToKKyAgICAgICAgYEpTT05gIGNsYXNzZXMgbm93IHVz
ZSBgUmVmJiZgIHdoZXJldmVyIHBvc3NpYmxlIGFuZCBgT3B0aW9uYWxgIGluc3RlYWQgb2YgYW4g
b3V0IHBhcmFtZXRlcgorICAgICAgICBmb3IgYGdldCpgL2BhcypgIHNvIHRoYXQgdmFsdWVzIGNh
biBiZSBtb3JlIGVhc2lseSBtYW5pcHVsYXRlZCBhbmQgY2FuIGJlIGNvbmZpZGVudGx5IGtub3du
CisgICAgICAgIHRvIGV4aXN0LgorCiAyMDIwLTA5LTA1ICBEZXZpbiBSb3Vzc28gIDxkcm91c3Nv
QGFwcGxlLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBhbGxvdyBET00gYnJlYWtwb2lu
dHMgdG8gYmUgY29uZmlndXJlZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkRyaXZlci9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV2ViRHJpdmVyL0NoYW5nZUxvZwppbmRleCBkYTNiNjRjYWQ1ZWUxNDk1NjY0
YzdmOGNiMGY3ODQ4OTlmNTc4ODk0Li5jZjZjYjFkODM2ZjhkY2MwYmJkMzA4ODJjZDMzOTUxMjE3
MThlZDYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViRHJpdmVyL0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV2ViRHJpdmVyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU3IEBACisyMDIwLTA5LTA4ICBEZXZp
biBSb3Vzc28gIDxkcm91c3NvQGFwcGxlLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBt
b2Rlcm5pemUgZ2VuZXJhdGVkIGJhY2tlbmQgcHJvdG9jb2wgY29kZQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE2MzAyCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTZXNzaW9uLmNwcDoKKyAgICAgICAg
KFdlYkRyaXZlcjo6Zmlyc3RXaW5kb3dIYW5kbGVJblJlc3VsdCk6CisgICAgICAgIChXZWJEcml2
ZXI6OlNlc3Npb246OmNyZWF0ZVRvcExldmVsQnJvd3NpbmdDb250ZXh0KToKKyAgICAgICAgKFdl
YkRyaXZlcjo6U2Vzc2lvbjo6aGFuZGxlVXNlclByb21wdHMpOgorICAgICAgICAoV2ViRHJpdmVy
OjpTZXNzaW9uOjpyZXBvcnRVbmV4cGVjdGVkQWxlcnRPcGVuKToKKyAgICAgICAgKFdlYkRyaXZl
cjo6U2Vzc2lvbjo6Z2V0Q3VycmVudFVSTCk6CisgICAgICAgIChXZWJEcml2ZXI6OlNlc3Npb246
OmdldFRpdGxlKToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6Z2V0V2luZG93SGFuZGxl
KToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6Z2V0V2luZG93SGFuZGxlcyk6CisgICAg
ICAgIChXZWJEcml2ZXI6OlNlc3Npb246Om5ld1dpbmRvdyk6CisgICAgICAgIChXZWJEcml2ZXI6
OlNlc3Npb246OnN3aXRjaFRvRnJhbWUpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjpz
d2l0Y2hUb1BhcmVudEZyYW1lKToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6Z2V0VG9w
bGV2ZWxCcm93c2luZ0NvbnRleHRSZWN0KToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6
ZnVsbHNjcmVlbldpbmRvdyk6CisgICAgICAgIChXZWJEcml2ZXI6OlNlc3Npb246OmNyZWF0ZUVs
ZW1lbnQpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjpleHRyYWN0RWxlbWVudElEKToK
KyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6Y29tcHV0ZUVsZW1lbnRMYXlvdXQpOgorICAg
ICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjpmaW5kRWxlbWVudHMpOgorICAgICAgICAoV2ViRHJp
dmVyOjpTZXNzaW9uOjpnZXRBY3RpdmVFbGVtZW50KToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vz
c2lvbjo6aXNFbGVtZW50U2VsZWN0ZWQpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjpn
ZXRFbGVtZW50VGV4dCk6CisgICAgICAgIChXZWJEcml2ZXI6OlNlc3Npb246OmdldEVsZW1lbnRU
YWdOYW1lKToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6aXNFbGVtZW50RW5hYmxlZCk6
CisgICAgICAgIChXZWJEcml2ZXI6OlNlc3Npb246OmlzRWxlbWVudERpc3BsYXllZCk6CisgICAg
ICAgIChXZWJEcml2ZXI6OlNlc3Npb246OmdldEVsZW1lbnRBdHRyaWJ1dGUpOgorICAgICAgICAo
V2ViRHJpdmVyOjpTZXNzaW9uOjpnZXRFbGVtZW50UHJvcGVydHkpOgorICAgICAgICAoV2ViRHJp
dmVyOjpTZXNzaW9uOjpnZXRFbGVtZW50Q1NTVmFsdWUpOgorICAgICAgICAoV2ViRHJpdmVyOjpT
ZXNzaW9uOjplbGVtZW50SXNGaWxlVXBsb2FkKToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lv
bjo6cGFyc2VFbGVtZW50SXNGaWxlVXBsb2FkUmVzdWx0KToKKyAgICAgICAgKFdlYkRyaXZlcjo6
U2Vzc2lvbjo6ZWxlbWVudENsaWNrKToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6ZWxl
bWVudElzRWRpdGFibGUpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjplbGVtZW50Q2xl
YXIpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjpnZXRQYWdlU291cmNlKToKKyAgICAg
ICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6aGFuZGxlU2NyaXB0UmVzdWx0KToKKyAgICAgICAgKFdl
YkRyaXZlcjo6U2Vzc2lvbjo6ZXhlY3V0ZVNjcmlwdCk6CisgICAgICAgIChXZWJEcml2ZXI6OlNl
c3Npb246OmdldEFsbENvb2tpZXMpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjpnZXRO
YW1lZENvb2tpZSk6CisgICAgICAgIChXZWJEcml2ZXI6OlNlc3Npb246OmdldEFsZXJ0VGV4dCk6
CisgICAgICAgIChXZWJEcml2ZXI6OlNlc3Npb246OnRha2VTY3JlZW5zaG90KToKKyAgICAgICAg
KiBTZXNzaW9uSG9zdC5jcHA6CisgICAgICAgIChXZWJEcml2ZXI6OlNlc3Npb25Ib3N0OjpkaXNw
YXRjaE1lc3NhZ2UpOgorICAgICAgICAqIFdlYkRyaXZlclNlcnZpY2UuY3BwOgorICAgICAgICAo
V2ViRHJpdmVyOjpXZWJEcml2ZXJTZXJ2aWNlOjpoYW5kbGVSZXF1ZXN0KToKKyAgICAgICAgYEpT
T05gIGNsYXNzZXMgbm93IHVzZSBgUmVmJiZgIHdoZXJldmVyIHBvc3NpYmxlIGFuZCBgT3B0aW9u
YWxgIGluc3RlYWQgb2YgYW4gb3V0IHBhcmFtZXRlcgorICAgICAgICBmb3IgYGdldCpgL2Bhcypg
IHNvIHRoYXQgdmFsdWVzIGNhbiBiZSBtb3JlIGVhc2lseSBtYW5pcHVsYXRlZCBhbmQgY2FuIGJl
IGNvbmZpZGVudGx5IGtub3duCisgICAgICAgIHRvIGV4aXN0LgorCiAyMDIwLTA3LTE1ICBGdWpp
aSBIaXJvbm9yaSAgPEhpcm9ub3JpLkZ1amlpQHNvbnkuY29tPgogCiAgICAgICAgIFtDTWFrZV1b
V2ViRHJpdmVyXSBHZW5lcmF0aW5nIFdlYkRyaXZlckF0b21zLmNwcCBpcyByYXJlbHkgZmFpbGlu
ZyBhcyAiSW1wb3J0RXJyb3I6IE5vIG1vZHVsZSBuYW1lZCBqc21pbiIKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvQ2hh
bmdlTG9nCmluZGV4IDk5Y2MxYzcwMWIxM2ViOGViZmY0YjgyNDY5OWU1NDgwODBlMDk2Y2QuLjk3
ZDM4MjkzNTRlODcwZDZiNThjN2MwZTg3ODRkYWVjNzBhMzE5OWIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL0No
YW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDIwLTA5LTA4ICBEZXZpbiBSb3Vzc28gIDxkcm91
c3NvQGFwcGxlLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBtb2Rlcm5pemUgZ2VuZXJh
dGVkIGJhY2tlbmQgcHJvdG9jb2wgY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjE2MzAyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0NTU01hbmFnZXIu
anM6CisgICAgICAgIChXSS5DU1NNYW5hZ2VyLnByb3RvdHlwZS5zZXQgZm9yY2VkQXBwZWFyYW5j
ZSk6CisgICAgICAgIE5vdyB0aGF0IGVudW1zIGFyZSBwcm9jZXNzZWQgYmVmb3JlIGJlaW5nIHBh
c3NlZCB0byBiYWNrZW5kIGRpc3BhY2hlciBoYW5kbGVycywgdGhlCisgICAgICAgIGBhcHBlYXJh
bmNlYCBwYXJhbWV0ZXIgb2YgYFBhZ2Uuc2V0Rm9yY2VkQXBwZWFyYW5jZWAgbXVzdCBiZSBtYXJr
ZWQgYG9wdGlvbmFsYCBhcworICAgICAgICB0aGVyZSdzIG5vIHdheSBmb3IgaXQgdG8gYWNjZXB0
IGFuIGVtcHR5IHN0cmluZywgYXMgdGhhdCdzIG5vdCBwb3NzaWJsZSBmb3IgYW4gZW51bS4KKyAg
ICAgICAgQXMgc3VjaCwgcmV3b3JrIHRoZSBmcm9udGVuZCBsb2dpYyBmb3IgaW52b2tpbmcgYFBh
Z2Uuc2V0Rm9yY2VkQXBwZWFyYW5jZWAgdG8gaW5zdGVhZAorICAgICAgICBub3QgcHJvdmlkZSBh
biBgYXBwZWFyYW5jZWAgcGFyYW1ldGVyIGF0IGFsbCB3aGVuIHdhbnRpbmcgdG8gInVuc2V0IiBp
dC4KKworICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVmlld3MvU2V0dGluZ3NUYWJDb250ZW50Vmll
dy5qczoKKyAgICAgICAgKFdJLlNldHRpbmdzVGFiQ29udGVudFZpZXcucHJvdG90eXBlLl9jcmVh
dGVDb25zb2xlU2V0dGluZ3NWaWV3KToKKyAgICAgICAgTm93IHRoYXQgYWxsIGxvZ2dpbmcgY2hh
bm5lbHMgbWF0Y2hpbmcgYSBgQ29uc29sZS5DaGFubmVsU291cmNlYCBhcmUgcmV0dXJuZWQgaW5z
dGVhZCBvZgorICAgICAgICBqdXN0IHRoZSBoYXJkY29kZWQgbGlzdCwgY2hlY2sgZm9yIGEgbWF0
Y2hpbmcgYFdJLlVJU3RyaW5nYCBiZWZvcmUgc2hvd2luZyBhIGA8c2VsZWN0PmAuCisKIDIwMjAt
MDktMDUgIERldmluIFJvdXNzbyAgPGRyb3Vzc29AYXBwbGUuY29tPgogCiAgICAgICAgIFdlYiBJ
bnNwZWN0b3I6IGFsbG93IERPTSBicmVha3BvaW50cyB0byBiZSBjb25maWd1cmVkCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmlu
ZGV4IDFjODc4MDc4MzQzYTMyMzdjZGM3YjgxNDJkOTRjMjU5NzJkYjlkNzcuLmRkM2VjNjA2YjYx
OGIzZmRiZTNjNzI4YjY3ZmJjZjhhNTEzZDhmYTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTQgQEAK
KzIwMjAtMDktMDggIERldmluIFJvdXNzbyAgPGRyb3Vzc29AYXBwbGUuY29tPgorCisgICAgICAg
IFdlYiBJbnNwZWN0b3I6IG1vZGVybml6ZSBnZW5lcmF0ZWQgYmFja2VuZCBwcm90b2NvbCBjb2Rl
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTYzMDIK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQcmV2aW91
c2x5LCB0aGUgaW5zcGVjdG9yIHByb3RvY29sIHdhcyBleHByZXNzZWQgaW4gY29kZSBpbiBhIHNv
bWV3aGF0IGNvbmZ1c2luZyB3YXk6CisgICAgICAgICAtIHRoZSBlcnJvciBzdHJpbmcgd2FzIHRo
ZSBmaXJzdCBhcmd1bWVudAorICAgICAgICAgLSByZXF1aXJlZCBwYXJhbWV0ZXJzIHdlcmUgYFRg
IG9yIGBjb25zdCBUJmAKKyAgICAgICAgIC0gb3B0aW9uYWwgcGFyYW1ldGVycyB3ZXJlIGBjb25z
dCBUKmAKKyAgICAgICAgIC0gZW51bSBwYXJhbWV0ZXJzIHdlcmUgdGhlIHVuZGVybHlpbmcgdHlw
ZSByZXF1aXJpbmcgdGhlIGJhY2tlbmQgZGlzcGF0Y2hlciBoYW5kbGVyIHRvCisgICAgICAgICAg
IHByb2Nlc3MgaXQgaW5zdGVhZCBvZiBpdCBiZWluZyBwcmVwcm9jZXNzZWQKKyAgICAgICAgIC0g
cmVxdWlyZWQgcmV0dXJucyB3ZXJlIGBUJmAKKyAgICAgICAgIC0gb3B0aW9uYWwgcmV0dXJucyB3
ZXJlIGBUKmAKKyAgICAgICAgVGhpcyBkb2Vzbid0IHJlYWxseSBtYWtlIGZvciBlYXN5L29idmlv
dXMgcmVhZGluZyBvZiBjb2RlIHNpbmNlIHRoZSBvcmRlciBvZiBhcmd1bWVudHMgaXMKKyAgICAg
ICAgbm90IHdlaXJkIChlLmcuIGVycm9yIHN0cmluZyBmaXJzdCksIGFuZCB0aGF0IHRoZXJlIGFy
ZSByZWZlcmVuY2VzL3BvaW50ZXJzIHRvIHByaW1pdGl2ZQorICAgICAgICB0eXBlcy4KKworICAg
ICAgICBUaGlzIHBhdGNoIGNsZWFucyB1cCB0aGUgZ2VuZXJhdGVkIGluc3BlY3RvciBwcm90b2Nv
bCBjb2RlIHRvIGJlOgorICAgICAgICAgLSByZXF1aXJlZCBwYXJhbWV0ZXJzIGFyZSBgVGAgb3Ig
YFJlZjxUPiYmYAorICAgICAgICAgLSBvcHRpb25hbCBwYXJhbWV0ZXJzIGFyZSBgT3B0aW9uYWw8
VD4mJmAgb3IgYFJlZlB0cjxUPiYmYAorICAgICAgICAgLSBlbnVtIHBhcmFtZXRlcnMgYXJlIHBy
ZXByb2Nlc3NlZCBhbmQgcGFzc2VkIHRvIHRoZSBiYWNrZW5kIGRpc3BhdGNoZXIgaGFuZGxlciBp
ZiB2YWxpZAorICAgICAgICAgLSBzeW5jaHJvbm91cyBjb21tYW5kcyByZXR1cm4gYEV4cGVjdGVk
PFgsIEVycm9yU3RyaW5nPmAgdXNpbmcgdGhlIHNhbWUgdHlwZXMvcnVsZXMgYWJvdmUKKyAgICAg
ICAgICAgd2hlcmUgYFhgIGlzIGVpdGhlciBhIHNpbmdsZSByZXR1cm4gb3IgYSBgc3RkOjp0dXBs
ZWAgb2YgbXVsdGlwbGUgcmV0dXJucworCisgICAgICAgIFRoZSBvbmUgZXhjZXB0aW9uIHRvIHRo
ZSBhYm92ZSBpcyBgU3RyaW5nYCwgd2hpY2ggaXMgYWxyZWFkeSBhIHRyaS1zdGF0ZSBvZiBgbnVs
bFN0cmluZygpYCwKKyAgICAgICAgYGVtcHR5U3RyaW5nKClgLCBhbmQgc29tZXRoaW5nIHNldCwg
c28gdGhlcmUncyBubyBuZWVkIHRvIHVzZSBgT3B0aW9uYWw8U3RyaW5nPmAuCisKKyAgICAgICAg
QWxzbyB1c2UgYFByb3RvY29sYCBvYmplY3RzL2B0eXBlZGVmc2Agd2hlcmV2ZXIgcG9zc2libGUg
dG8gZnVydGhlciByZWxhdGUgdGhlIHByb3RvY29sCisgICAgICAgIEpTT04gYW5kIHRoZSBhY3R1
YWwgYmFja2VuZCBkaXNwYXRjaGVyIGhhbmRsZXIgaW1wbGVtZW50YXRpb24uCisKKyAgICAgICAg
KiBVSVByb2Nlc3MvQXV0b21hdGlvbi9BdXRvbWF0aW9uLmpzb246CisgICAgICAgIGBDb29yZGlu
YXRlU3lzdGVtYCBoYXMgYFBhZ2VgIGFuZCBgVmlld3BvcnRgIGVudW0gdmFsdWVzLCBidXQgYFdl
YkF1dG9tYXRpb25TZXNzaW9uYCBjaGVja3MKKyAgICAgICAgZm9yIGAiUGFnZSJgIGFuZCBgIkxh
eW91dFZpZXdwb3J0ImAuIEFkZCBhIGBMYXlvdXRWaWV3cG9ydGAgZW51bSB2YWx1ZSBub3cgdGhh
dCBlbnVtcyBhcmUKKyAgICAgICAgcHJvY2Vzc2VkIGJlZm9yZSBiZWluZyBwYXNzZWQgdG8gYmFj
a2VuZCBkaXNwYWNoZXIgaGFuZGxlcnMgdG8gcHJlc2VydmUgZnVuY3Rpb25hbGl0eS4KKworICAg
ICAgICAqIFVJUHJvY2Vzcy9JbnNwZWN0b3IvQWdlbnRzL0luc3BlY3RvckJyb3dzZXJBZ2VudC5o
OgorICAgICAgICAqIFVJUHJvY2Vzcy9JbnNwZWN0b3IvQWdlbnRzL0luc3BlY3RvckJyb3dzZXJB
Z2VudC5jcHA6CisgICAgICAgICogVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNl
c3Npb25NYWNyb3MuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0
aW9uU2Vzc2lvbi5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRp
b25TZXNzaW9uLmNwcDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQXV0b21hdGlvbi9tYWMvV2ViQXV0
b21hdGlvblNlc3Npb25NYWMubW06CisgICAgICAgIEVsaWRlZCBiYWNrZW5kIGRpc3BhdGNoZXIg
aGFuZGxlciBjaGFuZ2VzIGRlc2NyaWJlIGFib3ZlLgorCisgICAgICAgICogVUlQcm9jZXNzL0lu
c3BlY3Rvci9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYktp
dDo6UmVtb3RlSW5zcGVjdG9yQ2xpZW50OjpzZXRUYXJnZXRMaXN0KToKKyAgICAgICAgYEpTT05g
IGNsYXNzZXMgbm93IHVzZSBgUmVmJiZgIHdoZXJldmVyIHBvc3NpYmxlIGFuZCBgT3B0aW9uYWxg
IGluc3RlYWQgb2YgYW4gb3V0IHBhcmFtZXRlcgorICAgICAgICBmb3IgYGdldCpgL2BhcypgIHNv
IHRoYXQgdmFsdWVzIGNhbiBiZSBtb3JlIGVhc2lseSBtYW5pcHVsYXRlZCBhbmQgY2FuIGJlIGNv
bmZpZGVudGx5IGtub3duCisgICAgICAgIHRvIGV4aXN0LgorCiAyMDIwLTA5LTA1ICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KIAogICAgICAgICBbV2ViSURMXSBSZWFsaWduIG91ciBJ
REwgZXh0ZW5kZWQgYXR0cmlidXRlIG5hbWVzIHdpdGggdGhvc2Ugc3BlY2lmaWVkIGluIFdlYklE
TApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2JpbmRpbmdzL1NjcmlwdFZhbHVl
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9TY3JpcHRWYWx1ZS5jcHAKaW5k
ZXggNmI4NTNjOTMxZjFkY2U5MjUzYmJhYzA2YTk1ZTZhYWM1MjdjZjI1YS4uNzk2OGI5MGE3M2Iy
ODJkZjU5ODIyNTZhNmVkY2IyZDZlNTc0Mzk2ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2JpbmRpbmdzL1NjcmlwdFZhbHVlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYmluZGluZ3MvU2NyaXB0VmFsdWUuY3BwCkBAIC02OSw3ICs2OSw3IEBAIHN0YXRpYyBSZWZQ
dHI8SlNPTjo6VmFsdWU+IGpzVG9JbnNwZWN0b3JWYWx1ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU1ZhCiAgICAgICAgICAgICAgICAgYXV0byBlbGVtZW50VmFsdWUgPSBqc1RvSW5z
cGVjdG9yVmFsdWUoZ2xvYmFsT2JqZWN0LCBhcnJheS5nZXRJbmRleChnbG9iYWxPYmplY3QsIGkp
LCBtYXhEZXB0aCk7CiAgICAgICAgICAgICAgICAgaWYgKCFlbGVtZW50VmFsdWUpCiAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICAgICAgICAgIGluc3BlY3RvckFy
cmF5LT5wdXNoVmFsdWUoV1RGTW92ZShlbGVtZW50VmFsdWUpKTsKKyAgICAgICAgICAgICAgICBp
bnNwZWN0b3JBcnJheS0+cHVzaFZhbHVlKGVsZW1lbnRWYWx1ZS5yZWxlYXNlTm9uTnVsbCgpKTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBpbnNwZWN0b3JBcnJheTsKICAgICAg
ICAgfQpAQCAtODIsNyArODIsNyBAQCBzdGF0aWMgUmVmUHRyPEpTT046OlZhbHVlPiBqc1RvSW5z
cGVjdG9yVmFsdWUoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYQogICAgICAgICAg
ICAgYXV0byBpbnNwZWN0b3JWYWx1ZSA9IGpzVG9JbnNwZWN0b3JWYWx1ZShnbG9iYWxPYmplY3Qs
IG9iamVjdC5nZXQoZ2xvYmFsT2JqZWN0LCBuYW1lKSwgbWF4RGVwdGgpOwogICAgICAgICAgICAg
aWYgKCFpbnNwZWN0b3JWYWx1ZSkKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICAgICAgICAgIGluc3BlY3Rvck9iamVjdC0+c2V0VmFsdWUobmFtZS5zdHJpbmcoKSwgV1RGTW92
ZShpbnNwZWN0b3JWYWx1ZSkpOworICAgICAgICAgICAgaW5zcGVjdG9yT2JqZWN0LT5zZXRWYWx1
ZShuYW1lLnN0cmluZygpLCBpbnNwZWN0b3JWYWx1ZS5yZWxlYXNlTm9uTnVsbCgpKTsKICAgICAg
ICAgfQogICAgICAgICByZXR1cm4gaW5zcGVjdG9yT2JqZWN0OwogICAgIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvQXN5bmNTdGFja1RyYWNlLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvQXN5bmNTdGFja1RyYWNlLmNwcAppbmRleCA1
NDUwZTJmM2MwMDljNjAxOGNmOWM1MzBhMDM2YzNkYjdhNjM0NTBlLi5hNTk2Mzk1Y2JlYTc5MWU3
MGJlM2UyMzYyZmU1N2Y0MzgzNGE1OTRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL0FzeW5jU3RhY2tUcmFjZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9Bc3luY1N0YWNrVHJhY2UuY3BwCkBAIC05Nyw3ICs5Nyw3IEBAIHZvaWQg
QXN5bmNTdGFja1RyYWNlOjpkaWRDYW5jZWxBc3luY0NhbGwoKQogICAgIG1fc3RhdGUgPSBTdGF0
ZTo6Q2FuY2VsZWQ7CiB9CiAKLVJlZlB0cjxQcm90b2NvbDo6Q29uc29sZTo6U3RhY2tUcmFjZT4g
QXN5bmNTdGFja1RyYWNlOjpidWlsZEluc3BlY3Rvck9iamVjdCgpIGNvbnN0CitSZWY8UHJvdG9j
b2w6OkNvbnNvbGU6OlN0YWNrVHJhY2U+IEFzeW5jU3RhY2tUcmFjZTo6YnVpbGRJbnNwZWN0b3JP
YmplY3QoKSBjb25zdAogewogICAgIFJlZlB0cjxQcm90b2NvbDo6Q29uc29sZTo6U3RhY2tUcmFj
ZT4gdG9wU3RhY2tUcmFjZTsKICAgICBSZWZQdHI8UHJvdG9jb2w6OkNvbnNvbGU6OlN0YWNrVHJh
Y2U+IHByZXZpb3VzU3RhY2tUcmFjZTsKQEAgLTEyMCwxMyArMTIwLDEzIEBAIFJlZlB0cjxQcm90
b2NvbDo6Q29uc29sZTo6U3RhY2tUcmFjZT4gQXN5bmNTdGFja1RyYWNlOjpidWlsZEluc3BlY3Rv
ck9iamVjdCgpIGNvCiAgICAgICAgICAgICB0b3BTdGFja1RyYWNlID0gcHJvdG9jb2xPYmplY3Qu
cHRyKCk7CiAKICAgICAgICAgaWYgKHByZXZpb3VzU3RhY2tUcmFjZSkKLSAgICAgICAgICAgIHBy
ZXZpb3VzU3RhY2tUcmFjZS0+c2V0UGFyZW50U3RhY2tUcmFjZShwcm90b2NvbE9iamVjdC5wdHIo
KSk7CisgICAgICAgICAgICBwcmV2aW91c1N0YWNrVHJhY2UtPnNldFBhcmVudFN0YWNrVHJhY2Uo
cHJvdG9jb2xPYmplY3QuY29weVJlZigpKTsKIAogICAgICAgICBwcmV2aW91c1N0YWNrVHJhY2Ug
PSBXVEZNb3ZlKHByb3RvY29sT2JqZWN0KTsKICAgICAgICAgc3RhY2tUcmFjZSA9IHN0YWNrVHJh
Y2UtPm1fcGFyZW50LmdldCgpOwogICAgIH0KIAotICAgIHJldHVybiB0b3BTdGFja1RyYWNlOwor
ICAgIHJldHVybiB0b3BTdGFja1RyYWNlLnJlbGVhc2VOb25OdWxsKCk7CiB9CiAKIHZvaWQgQXN5
bmNTdGFja1RyYWNlOjp0cnVuY2F0ZShzaXplX3QgbWF4RGVwdGgpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0FzeW5jU3RhY2tUcmFjZS5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9Bc3luY1N0YWNrVHJhY2UuaAppbmRleCA2ZWRlNmM0MjVh
YmNhYTJkNjFlNWJiN2IxYmExOWUzMmU1NzIzYjZjLi40OTlhMWUwNWZkNTk0M2Y5ZmFlZGMzMGUw
YmQzZDIwZTBjNWRkYmVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL0FzeW5jU3RhY2tUcmFjZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3IvQXN5bmNTdGFja1RyYWNlLmgKQEAgLTUxLDcgKzUxLDcgQEAgcHVibGljOgogICAgIHZvaWQg
ZGlkRGlzcGF0Y2hBc3luY0NhbGwoKTsKICAgICB2b2lkIGRpZENhbmNlbEFzeW5jQ2FsbCgpOwog
Ci0gICAgUmVmUHRyPFByb3RvY29sOjpDb25zb2xlOjpTdGFja1RyYWNlPiBidWlsZEluc3BlY3Rv
ck9iamVjdCgpIGNvbnN0OworICAgIFJlZjxQcm90b2NvbDo6Q29uc29sZTo6U3RhY2tUcmFjZT4g
YnVpbGRJbnNwZWN0b3JPYmplY3QoKSBjb25zdDsKIAogICAgIH5Bc3luY1N0YWNrVHJhY2UoKTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9Db25zb2xlTWVz
c2FnZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0NvbnNvbGVNZXNzYWdl
LmNwcAppbmRleCA1NDJjN2M3YjM3ZWZiMmU0YTc2YTMyYTAwOGQwNjNkYmM4MDVjZGQwLi45MGEx
ZGQ5NjA0NzBhNTRlZDNiMTQ2NmNlY2ZkZWZhODM0OTQ1ODBmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0NvbnNvbGVNZXNzYWdlLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0NvbnNvbGVNZXNzYWdlLmNwcApAQCAtMjYxLDkgKzI2
MSwxMSBAQCB2b2lkIENvbnNvbGVNZXNzYWdlOjphZGRUb0Zyb250ZW5kKENvbnNvbGVGcm9udGVu
ZERpc3BhdGNoZXImIGNvbnNvbGVGcm9udGVuZERpcwogICAgICAgICAgICAgICAgICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRzT2JqZWN0
LT5hZGRJdGVtKFdURk1vdmUoaW5zcGVjdG9yVmFsdWUpKTsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKG1fYXJndW1lbnRzLT5hcmd1bWVudENvdW50KCkgPiAxKQotICAgICAgICAgICAgICAgICAg
ICAgICAgYXJndW1lbnRzT2JqZWN0LT5hZGRJdGVtKGluamVjdGVkU2NyaXB0LndyYXBPYmplY3Qo
Y29sdW1ucywgImNvbnNvbGUiX3MsIHRydWUpKTsKKyAgICAgICAgICAgICAgICAgICAgYXJndW1l
bnRzT2JqZWN0LT5hZGRJdGVtKGluc3BlY3RvclZhbHVlLnJlbGVhc2VOb25OdWxsKCkpOworICAg
ICAgICAgICAgICAgICAgICBpZiAobV9hcmd1bWVudHMtPmFyZ3VtZW50Q291bnQoKSA+IDEpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhdXRvIGluc3BlY3Rvck9iamVjdCA9IGluamVj
dGVkU2NyaXB0LndyYXBPYmplY3QoY29sdW1ucywgImNvbnNvbGUiX3MsIHRydWUpKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50c09iamVjdC0+YWRkSXRlbShpbnNwZWN0b3JP
YmplY3QucmVsZWFzZU5vbk51bGwoKSk7CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbV9hcmd1bWVudHMtPmFyZ3VtZW50Q291bnQoKTsgKytpKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBhdXRvIGluc3BlY3RvclZhbHVlID0gaW5qZWN0ZWRTY3JpcHQud3JhcE9iamVj
dChtX2FyZ3VtZW50cy0+YXJndW1lbnRBdChpKSwgImNvbnNvbGUiX3MsIGdlbmVyYXRlUHJldmll
dyk7CkBAIC0yNzEsNyArMjczLDcgQEAgdm9pZCBDb25zb2xlTWVzc2FnZTo6YWRkVG9Gcm9udGVu
ZChDb25zb2xlRnJvbnRlbmREaXNwYXRjaGVyJiBjb25zb2xlRnJvbnRlbmREaXMKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBhcmd1bWVudHNPYmplY3QtPmFkZEl0ZW0oV1RGTW92ZShpbnNwZWN0
b3JWYWx1ZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRzT2JqZWN0LT5hZGRJ
dGVtKGluc3BlY3RvclZhbHVlLnJlbGVhc2VOb25OdWxsKCkpOwogICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtMjg0LDcgKzI4Niw3IEBA
IHZvaWQgQ29uc29sZU1lc3NhZ2U6OmFkZFRvRnJvbnRlbmQoQ29uc29sZUZyb250ZW5kRGlzcGF0
Y2hlciYgY29uc29sZUZyb250ZW5kRGlzCiAgICAgICAgICAgICAgICAgICAgIGlmICghaW5zcGVj
dG9yVmFsdWUpCiAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICAg
ICAgICAgICAgICBhcmd1bWVudHNPYmplY3QtPmFkZEl0ZW0oV1RGTW92ZShpbnNwZWN0b3JWYWx1
ZSkpOworICAgICAgICAgICAgICAgICAgICBhcmd1bWVudHNPYmplY3QtPmFkZEl0ZW0oaW5zcGVj
dG9yVmFsdWUucmVsZWFzZU5vbk51bGwoKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luamVj
dGVkU2NyaXB0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRT
Y3JpcHQuY3BwCmluZGV4IGNjODQ5ZjA1MWZhNDA1MThhOWQxYTAzNDI5YmMyYjRkYmNmYjMxMDIu
LjY5MDlhMzM5ZWEyZTNkZTYwMGY1NWZkNmZlNDY4MzY0NjE3MWUwYTcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHQuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHQuY3BwCkBAIC01Niw3
ICs1Niw3IEBAIEluamVjdGVkU2NyaXB0Ojp+SW5qZWN0ZWRTY3JpcHQoKQogewogfQogCi12b2lk
IEluamVjdGVkU2NyaXB0OjpleGVjdXRlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3Qg
U3RyaW5nJiBmdW5jdGlvblN0cmluZywgRXhlY3V0ZU9wdGlvbnMmJiBvcHRpb25zLCBSZWZQdHI8
UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3VsdCwgT3B0aW9uYWw8Ym9vbD4m
IHdhc1Rocm93biwgT3B0aW9uYWw8aW50PiYgc2F2ZWRSZXN1bHRJbmRleCkKK3ZvaWQgSW5qZWN0
ZWRTY3JpcHQ6OmV4ZWN1dGUoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29u
c3QgU3RyaW5nJiBmdW5jdGlvblN0cmluZywgRXhlY3V0ZU9wdGlvbnMmJiBvcHRpb25zLCBSZWZQ
dHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3VsdCwgT3B0aW9uYWw8Ym9v
bD4mIHdhc1Rocm93biwgT3B0aW9uYWw8aW50PiYgc2F2ZWRSZXN1bHRJbmRleCkKIHsKICAgICBE
ZXByZWNhdGVkOjpTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24oaW5qZWN0ZWRTY3JpcHRPYmpl
Y3QoKSwgImV4ZWN1dGUiX3MsIGluc3BlY3RvckVudmlyb25tZW50KCktPmZ1bmN0aW9uQ2FsbEhh
bmRsZXIoKSk7CiAgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoZnVuY3Rpb25TdHJpbmcpOwpA
QCAtNjksNyArNjksNyBAQCB2b2lkIEluamVjdGVkU2NyaXB0OjpleGVjdXRlKEVycm9yU3RyaW5n
JiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBmdW5jdGlvblN0cgogICAgIG1ha2VFdmFsQ2Fs
bChlcnJvclN0cmluZywgZnVuY3Rpb24sIHJlc3VsdCwgd2FzVGhyb3duLCBzYXZlZFJlc3VsdElu
ZGV4KTsKIH0KIAotdm9pZCBJbmplY3RlZFNjcmlwdDo6ZXZhbHVhdGUoRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIGNvbnN0IFN0cmluZyYgb2JqZWN0
R3JvdXAsIGJvb2wgaW5jbHVkZUNvbW1hbmRMaW5lQVBJLCBib29sIHJldHVybkJ5VmFsdWUsIGJv
b2wgZ2VuZXJhdGVQcmV2aWV3LCBib29sIHNhdmVSZXN1bHQsIFJlZlB0cjxQcm90b2NvbDo6UnVu
dGltZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0LCBPcHRpb25hbDxib29sPiYgd2FzVGhyb3duLCBP
cHRpb25hbDxpbnQ+JiBzYXZlZFJlc3VsdEluZGV4KQordm9pZCBJbmplY3RlZFNjcmlwdDo6ZXZh
bHVhdGUoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBl
eHByZXNzaW9uLCBjb25zdCBTdHJpbmcmIG9iamVjdEdyb3VwLCBib29sIGluY2x1ZGVDb21tYW5k
TGluZUFQSSwgYm9vbCByZXR1cm5CeVZhbHVlLCBib29sIGdlbmVyYXRlUHJldmlldywgYm9vbCBz
YXZlUmVzdWx0LCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3Vs
dCwgT3B0aW9uYWw8Ym9vbD4mIHdhc1Rocm93biwgT3B0aW9uYWw8aW50PiYgc2F2ZWRSZXN1bHRJ
bmRleCkKIHsKICAgICBEZXByZWNhdGVkOjpTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24oaW5q
ZWN0ZWRTY3JpcHRPYmplY3QoKSwgImV2YWx1YXRlIl9zLCBpbnNwZWN0b3JFbnZpcm9ubWVudCgp
LT5mdW5jdGlvbkNhbGxIYW5kbGVyKCkpOwogICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KGV4
cHJlc3Npb24pOwpAQCAtOTEsNyArOTEsNyBAQCB2b2lkIEluamVjdGVkU2NyaXB0Ojphd2FpdFBy
b21pc2UoY29uc3QgU3RyaW5nJiBwcm9taXNlT2JqZWN0SWQsIGJvb2wgcmV0dXJuQnlWYQogICAg
IG1ha2VBc3luY0NhbGwoZnVuY3Rpb24sIFdURk1vdmUoY2FsbGJhY2spKTsKIH0KIAotdm9pZCBJ
bmplY3RlZFNjcmlwdDo6Y2FsbEZ1bmN0aW9uT24oRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBj
b25zdCBTdHJpbmcmIG9iamVjdElkLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIGNvbnN0IFN0
cmluZyYgYXJndW1lbnRzLCBib29sIHJldHVybkJ5VmFsdWUsIGJvb2wgZ2VuZXJhdGVQcmV2aWV3
LCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3VsdCwgT3B0aW9u
YWw8Ym9vbD4mIHdhc1Rocm93bikKK3ZvaWQgSW5qZWN0ZWRTY3JpcHQ6OmNhbGxGdW5jdGlvbk9u
KFByb3RvY29sOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgb2JqZWN0
SWQsIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgY29uc3QgU3RyaW5nJiBhcmd1bWVudHMsIGJv
b2wgcmV0dXJuQnlWYWx1ZSwgYm9vbCBnZW5lcmF0ZVByZXZpZXcsIFJlZlB0cjxQcm90b2NvbDo6
UnVudGltZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0LCBPcHRpb25hbDxib29sPiYgd2FzVGhyb3du
KQogewogICAgIERlcHJlY2F0ZWQ6OlNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihpbmplY3Rl
ZFNjcmlwdE9iamVjdCgpLCAiY2FsbEZ1bmN0aW9uT24iX3MsIGluc3BlY3RvckVudmlyb25tZW50
KCktPmZ1bmN0aW9uQ2FsbEhhbmRsZXIoKSk7CiAgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQo
b2JqZWN0SWQpOwpAQCAtMTA1LDcgKzEwNSw3IEBAIHZvaWQgSW5qZWN0ZWRTY3JpcHQ6OmNhbGxG
dW5jdGlvbk9uKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBvYmplCiAg
ICAgQVNTRVJUKCFzYXZlZFJlc3VsdEluZGV4KTsKIH0KIAotdm9pZCBJbmplY3RlZFNjcmlwdDo6
ZXZhbHVhdGVPbkNhbGxGcmFtZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIEpTQzo6SlNWYWx1
ZSBjYWxsRnJhbWVzLCBjb25zdCBTdHJpbmcmIGNhbGxGcmFtZUlkLCBjb25zdCBTdHJpbmcmIGV4
cHJlc3Npb24sIGNvbnN0IFN0cmluZyYgb2JqZWN0R3JvdXAsIGJvb2wgaW5jbHVkZUNvbW1hbmRM
aW5lQVBJLCBib29sIHJldHVybkJ5VmFsdWUsIGJvb2wgZ2VuZXJhdGVQcmV2aWV3LCBib29sIHNh
dmVSZXN1bHQsIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0
LCBPcHRpb25hbDxib29sPiYgd2FzVGhyb3duLCBPcHRpb25hbDxpbnQ+JiBzYXZlZFJlc3VsdElu
ZGV4KQordm9pZCBJbmplY3RlZFNjcmlwdDo6ZXZhbHVhdGVPbkNhbGxGcmFtZShQcm90b2NvbDo6
RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBKU0M6OkpTVmFsdWUgY2FsbEZyYW1lcywgY29uc3Qg
U3RyaW5nJiBjYWxsRnJhbWVJZCwgY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBjb25zdCBTdHJp
bmcmIG9iamVjdEdyb3VwLCBib29sIGluY2x1ZGVDb21tYW5kTGluZUFQSSwgYm9vbCByZXR1cm5C
eVZhbHVlLCBib29sIGdlbmVyYXRlUHJldmlldywgYm9vbCBzYXZlUmVzdWx0LCBSZWZQdHI8UHJv
dG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3VsdCwgT3B0aW9uYWw8Ym9vbD4mIHdh
c1Rocm93biwgT3B0aW9uYWw8aW50PiYgc2F2ZWRSZXN1bHRJbmRleCkKIHsKICAgICBEZXByZWNh
dGVkOjpTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24oaW5qZWN0ZWRTY3JpcHRPYmplY3QoKSwg
ImV2YWx1YXRlT25DYWxsRnJhbWUiX3MsIGluc3BlY3RvckVudmlyb25tZW50KCktPmZ1bmN0aW9u
Q2FsbEhhbmRsZXIoKSk7CiAgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoY2FsbEZyYW1lcyk7
CkBAIC0xMTksNTIgKzExOSw1NSBAQCB2b2lkIEluamVjdGVkU2NyaXB0OjpldmFsdWF0ZU9uQ2Fs
bEZyYW1lKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgSlNDOjpKU1ZhbHVlCiAgICAgbWFrZUV2
YWxDYWxsKGVycm9yU3RyaW5nLCBmdW5jdGlvbiwgcmVzdWx0LCB3YXNUaHJvd24sIHNhdmVkUmVz
dWx0SW5kZXgpOwogfQogCi12b2lkIEluamVjdGVkU2NyaXB0OjpnZXRGdW5jdGlvbkRldGFpbHMo
RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGZ1bmN0aW9uSWQsIFJlZlB0
cjxQcm90b2NvbDo6RGVidWdnZXI6OkZ1bmN0aW9uRGV0YWlscz4mIHJlc3VsdCkKK3ZvaWQgSW5q
ZWN0ZWRTY3JpcHQ6OmdldEZ1bmN0aW9uRGV0YWlscyhQcm90b2NvbDo6RXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGZ1bmN0aW9uSWQsIFJlZlB0cjxQcm90b2NvbDo6RGVi
dWdnZXI6OkZ1bmN0aW9uRGV0YWlscz4mIHJlc3VsdCkKIHsKICAgICBEZXByZWNhdGVkOjpTY3Jp
cHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24oaW5qZWN0ZWRTY3JpcHRPYmplY3QoKSwgImdldEZ1bmN0
aW9uRGV0YWlscyJfcywgaW5zcGVjdG9yRW52aXJvbm1lbnQoKS0+ZnVuY3Rpb25DYWxsSGFuZGxl
cigpKTsKICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChmdW5jdGlvbklkKTsKIAogICAgIFJl
ZlB0cjxKU09OOjpWYWx1ZT4gcmVzdWx0VmFsdWUgPSBtYWtlQ2FsbChmdW5jdGlvbik7CiAgICAg
aWYgKCFyZXN1bHRWYWx1ZSB8fCByZXN1bHRWYWx1ZS0+dHlwZSgpICE9IEpTT046OlZhbHVlOjpU
eXBlOjpPYmplY3QpIHsKLSAgICAgICAgaWYgKCFyZXN1bHRWYWx1ZS0+YXNTdHJpbmcoZXJyb3JT
dHJpbmcpKQorICAgICAgICBlcnJvclN0cmluZyA9IHJlc3VsdFZhbHVlLT5hc1N0cmluZygpOwor
ICAgICAgICBpZiAoIWVycm9yU3RyaW5nKQogICAgICAgICAgICAgZXJyb3JTdHJpbmcgPSAiSW50
ZXJuYWwgZXJyb3IiX3M7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICByZXN1bHQgPSBC
aW5kaW5nVHJhaXRzPFByb3RvY29sOjpEZWJ1Z2dlcjo6RnVuY3Rpb25EZXRhaWxzPjo6cnVudGlt
ZUNhc3QoV1RGTW92ZShyZXN1bHRWYWx1ZSkpOworICAgIHJlc3VsdCA9IFByb3RvY29sOjpCaW5k
aW5nVHJhaXRzPFByb3RvY29sOjpEZWJ1Z2dlcjo6RnVuY3Rpb25EZXRhaWxzPjo6cnVudGltZUNh
c3QocmVzdWx0VmFsdWUucmVsZWFzZU5vbk51bGwoKSk7CiB9CiAKLXZvaWQgSW5qZWN0ZWRTY3Jp
cHQ6OmZ1bmN0aW9uRGV0YWlscyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSwgUmVmUHRyPFByb3RvY29sOjpEZWJ1Z2dlcjo6RnVuY3Rpb25EZXRhaWxzPiYgcmVz
dWx0KQordm9pZCBJbmplY3RlZFNjcmlwdDo6ZnVuY3Rpb25EZXRhaWxzKFByb3RvY29sOjpFcnJv
clN0cmluZyYgZXJyb3JTdHJpbmcsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgUmVmUHRyPFByb3RvY29s
OjpEZWJ1Z2dlcjo6RnVuY3Rpb25EZXRhaWxzPiYgcmVzdWx0KQogewogICAgIERlcHJlY2F0ZWQ6
OlNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihpbmplY3RlZFNjcmlwdE9iamVjdCgpLCAiZnVu
Y3Rpb25EZXRhaWxzIl9zLCBpbnNwZWN0b3JFbnZpcm9ubWVudCgpLT5mdW5jdGlvbkNhbGxIYW5k
bGVyKCkpOwogICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KHZhbHVlKTsKIAogICAgIFJlZlB0
cjxKU09OOjpWYWx1ZT4gcmVzdWx0VmFsdWUgPSBtYWtlQ2FsbChmdW5jdGlvbik7CiAgICAgaWYg
KCFyZXN1bHRWYWx1ZSB8fCByZXN1bHRWYWx1ZS0+dHlwZSgpICE9IEpTT046OlZhbHVlOjpUeXBl
OjpPYmplY3QpIHsKLSAgICAgICAgaWYgKCFyZXN1bHRWYWx1ZS0+YXNTdHJpbmcoZXJyb3JTdHJp
bmcpKQorICAgICAgICBlcnJvclN0cmluZyA9IHJlc3VsdFZhbHVlLT5hc1N0cmluZygpOworICAg
ICAgICBpZiAoIWVycm9yU3RyaW5nKQogICAgICAgICAgICAgZXJyb3JTdHJpbmcgPSAiSW50ZXJu
YWwgZXJyb3IiX3M7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICByZXN1bHQgPSBCaW5k
aW5nVHJhaXRzPFByb3RvY29sOjpEZWJ1Z2dlcjo6RnVuY3Rpb25EZXRhaWxzPjo6cnVudGltZUNh
c3QoV1RGTW92ZShyZXN1bHRWYWx1ZSkpOworICAgIHJlc3VsdCA9IFByb3RvY29sOjpCaW5kaW5n
VHJhaXRzPFByb3RvY29sOjpEZWJ1Z2dlcjo6RnVuY3Rpb25EZXRhaWxzPjo6cnVudGltZUNhc3Qo
cmVzdWx0VmFsdWUucmVsZWFzZU5vbk51bGwoKSk7CiB9CiAKLXZvaWQgSW5qZWN0ZWRTY3JpcHQ6
OmdldFByZXZpZXcoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIG9iamVj
dElkLCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6Ok9iamVjdFByZXZpZXc+JiByZXN1bHQpCit2
b2lkIEluamVjdGVkU2NyaXB0OjpnZXRQcmV2aWV3KFByb3RvY29sOjpFcnJvclN0cmluZyYgZXJy
b3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgb2JqZWN0SWQsIFJlZlB0cjxQcm90b2NvbDo6UnVudGlt
ZTo6T2JqZWN0UHJldmlldz4mIHJlc3VsdCkKIHsKICAgICBEZXByZWNhdGVkOjpTY3JpcHRGdW5j
dGlvbkNhbGwgZnVuY3Rpb24oaW5qZWN0ZWRTY3JpcHRPYmplY3QoKSwgImdldFByZXZpZXciX3Ms
IGluc3BlY3RvckVudmlyb25tZW50KCktPmZ1bmN0aW9uQ2FsbEhhbmRsZXIoKSk7CiAgICAgZnVu
Y3Rpb24uYXBwZW5kQXJndW1lbnQob2JqZWN0SWQpOwogCiAgICAgUmVmUHRyPEpTT046OlZhbHVl
PiByZXN1bHRWYWx1ZSA9IG1ha2VDYWxsKGZ1bmN0aW9uKTsKICAgICBpZiAoIXJlc3VsdFZhbHVl
IHx8IHJlc3VsdFZhbHVlLT50eXBlKCkgIT0gSlNPTjo6VmFsdWU6OlR5cGU6Ok9iamVjdCkgewot
ICAgICAgICBpZiAoIXJlc3VsdFZhbHVlLT5hc1N0cmluZyhlcnJvclN0cmluZykpCisgICAgICAg
IGVycm9yU3RyaW5nID0gcmVzdWx0VmFsdWUtPmFzU3RyaW5nKCk7CisgICAgICAgIGlmICghZXJy
b3JTdHJpbmcpCiAgICAgICAgICAgICBlcnJvclN0cmluZyA9ICJJbnRlcm5hbCBlcnJvciJfczsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHJlc3VsdCA9IEJpbmRpbmdUcmFpdHM8UHJv
dG9jb2w6OlJ1bnRpbWU6Ok9iamVjdFByZXZpZXc+OjpydW50aW1lQ2FzdChXVEZNb3ZlKHJlc3Vs
dFZhbHVlKSk7CisgICAgcmVzdWx0ID0gUHJvdG9jb2w6OkJpbmRpbmdUcmFpdHM8UHJvdG9jb2w6
OlJ1bnRpbWU6Ok9iamVjdFByZXZpZXc+OjpydW50aW1lQ2FzdChyZXN1bHRWYWx1ZS5yZWxlYXNl
Tm9uTnVsbCgpKTsKIH0KIAotdm9pZCBJbmplY3RlZFNjcmlwdDo6Z2V0UHJvcGVydGllcyhFcnJv
clN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgb2JqZWN0SWQsIGJvb2wgb3duUHJv
cGVydGllcywgaW50IGZldGNoU3RhcnQsIGludCBmZXRjaENvdW50LCBib29sIGdlbmVyYXRlUHJl
dmlldywgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OlByb3BlcnR5RGVz
Y3JpcHRvcj4+JiBwcm9wZXJ0aWVzKQordm9pZCBJbmplY3RlZFNjcmlwdDo6Z2V0UHJvcGVydGll
cyhQcm90b2NvbDo6RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIG9iamVj
dElkLCBib29sIG93blByb3BlcnRpZXMsIGludCBmZXRjaFN0YXJ0LCBpbnQgZmV0Y2hDb3VudCwg
Ym9vbCBnZW5lcmF0ZVByZXZpZXcsIFJlZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50
aW1lOjpQcm9wZXJ0eURlc2NyaXB0b3I+PiYgcHJvcGVydGllcykKIHsKICAgICBBU1NFUlQoZmV0
Y2hTdGFydCA+PSAwKTsKICAgICBBU1NFUlQoZmV0Y2hDb3VudCA+PSAwKTsKQEAgLTE4MiwxMCAr
MTg1LDEwIEBAIHZvaWQgSW5qZWN0ZWRTY3JpcHQ6OmdldFByb3BlcnRpZXMoRXJyb3JTdHJpbmcm
IGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIG9iamVjCiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBwcm9wZXJ0aWVzID0gQmluZGluZ1RyYWl0czxKU09OOjpBcnJheU9mPFByb3RvY29s
OjpSdW50aW1lOjpQcm9wZXJ0eURlc2NyaXB0b3I+Pjo6cnVudGltZUNhc3QoV1RGTW92ZShyZXN1
bHQpKTsKKyAgICBwcm9wZXJ0aWVzID0gUHJvdG9jb2w6OkJpbmRpbmdUcmFpdHM8SlNPTjo6QXJy
YXlPZjxQcm90b2NvbDo6UnVudGltZTo6UHJvcGVydHlEZXNjcmlwdG9yPj46OnJ1bnRpbWVDYXN0
KHJlc3VsdC5yZWxlYXNlTm9uTnVsbCgpKTsKIH0KIAotdm9pZCBJbmplY3RlZFNjcmlwdDo6Z2V0
RGlzcGxheWFibGVQcm9wZXJ0aWVzKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3Ry
aW5nJiBvYmplY3RJZCwgaW50IGZldGNoU3RhcnQsIGludCBmZXRjaENvdW50LCBib29sIGdlbmVy
YXRlUHJldmlldywgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OlByb3Bl
cnR5RGVzY3JpcHRvcj4+JiBwcm9wZXJ0aWVzKQordm9pZCBJbmplY3RlZFNjcmlwdDo6Z2V0RGlz
cGxheWFibGVQcm9wZXJ0aWVzKFByb3RvY29sOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNv
bnN0IFN0cmluZyYgb2JqZWN0SWQsIGludCBmZXRjaFN0YXJ0LCBpbnQgZmV0Y2hDb3VudCwgYm9v
bCBnZW5lcmF0ZVByZXZpZXcsIFJlZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1l
OjpQcm9wZXJ0eURlc2NyaXB0b3I+PiYgcHJvcGVydGllcykKIHsKICAgICBBU1NFUlQoZmV0Y2hT
dGFydCA+PSAwKTsKICAgICBBU1NFUlQoZmV0Y2hDb3VudCA+PSAwKTsKQEAgLTIwMiwxMCArMjA1
LDEwIEBAIHZvaWQgSW5qZWN0ZWRTY3JpcHQ6OmdldERpc3BsYXlhYmxlUHJvcGVydGllcyhFcnJv
clN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBwcm9wZXJ0aWVzID0gQmluZGluZ1RyYWl0czxKU09OOjpBcnJheU9mPFByb3RvY29sOjpS
dW50aW1lOjpQcm9wZXJ0eURlc2NyaXB0b3I+Pjo6cnVudGltZUNhc3QoV1RGTW92ZShyZXN1bHQp
KTsKKyAgICBwcm9wZXJ0aWVzID0gUHJvdG9jb2w6OkJpbmRpbmdUcmFpdHM8SlNPTjo6QXJyYXlP
ZjxQcm90b2NvbDo6UnVudGltZTo6UHJvcGVydHlEZXNjcmlwdG9yPj46OnJ1bnRpbWVDYXN0KHJl
c3VsdC5yZWxlYXNlTm9uTnVsbCgpKTsKIH0KIAotdm9pZCBJbmplY3RlZFNjcmlwdDo6Z2V0SW50
ZXJuYWxQcm9wZXJ0aWVzKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBv
YmplY3RJZCwgYm9vbCBnZW5lcmF0ZVByZXZpZXcsIFJlZlB0cjxKU09OOjpBcnJheU9mPFByb3Rv
Y29sOjpSdW50aW1lOjpJbnRlcm5hbFByb3BlcnR5RGVzY3JpcHRvcj4+JiBwcm9wZXJ0aWVzKQor
dm9pZCBJbmplY3RlZFNjcmlwdDo6Z2V0SW50ZXJuYWxQcm9wZXJ0aWVzKFByb3RvY29sOjpFcnJv
clN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgb2JqZWN0SWQsIGJvb2wgZ2VuZXJh
dGVQcmV2aWV3LCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UnVudGltZTo6SW50ZXJu
YWxQcm9wZXJ0eURlc2NyaXB0b3I+PiYgcHJvcGVydGllcykKIHsKICAgICBEZXByZWNhdGVkOjpT
Y3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24oaW5qZWN0ZWRTY3JpcHRPYmplY3QoKSwgImdldElu
dGVybmFsUHJvcGVydGllcyJfcywgaW5zcGVjdG9yRW52aXJvbm1lbnQoKS0+ZnVuY3Rpb25DYWxs
SGFuZGxlcigpKTsKICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChvYmplY3RJZCk7CkBAIC0y
MTcsMTEgKzIyMCwxMiBAQCB2b2lkIEluamVjdGVkU2NyaXB0OjpnZXRJbnRlcm5hbFByb3BlcnRp
ZXMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbgogICAgICAgICByZXR1cm47
CiAgICAgfQogCi0gICAgYXV0byBhcnJheSA9IEJpbmRpbmdUcmFpdHM8SlNPTjo6QXJyYXlPZjxQ
cm90b2NvbDo6UnVudGltZTo6SW50ZXJuYWxQcm9wZXJ0eURlc2NyaXB0b3I+Pjo6cnVudGltZUNh
c3QoV1RGTW92ZShyZXN1bHQpKTsKLSAgICBwcm9wZXJ0aWVzID0gYXJyYXktPmxlbmd0aCgpID4g
MCA/IGFycmF5IDogbnVsbHB0cjsKKyAgICBhdXRvIGFycmF5ID0gUHJvdG9jb2w6OkJpbmRpbmdU
cmFpdHM8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UnVudGltZTo6SW50ZXJuYWxQcm9wZXJ0eURl
c2NyaXB0b3I+Pjo6cnVudGltZUNhc3QocmVzdWx0LnJlbGVhc2VOb25OdWxsKCkpOworICAgIGlm
IChhcnJheS0+bGVuZ3RoKCkpCisgICAgICAgIHByb3BlcnRpZXMgPSBXVEZNb3ZlKGFycmF5KTsK
IH0KIAotdm9pZCBJbmplY3RlZFNjcmlwdDo6Z2V0Q29sbGVjdGlvbkVudHJpZXMoRXJyb3JTdHJp
bmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBjb25zdCBTdHJpbmcmIG9i
amVjdEdyb3VwLCBpbnQgZmV0Y2hTdGFydCwgaW50IGZldGNoQ291bnQsIFJlZlB0cjxKU09OOjpB
cnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpDb2xsZWN0aW9uRW50cnk+PiYgZW50cmllcykKK3Zv
aWQgSW5qZWN0ZWRTY3JpcHQ6OmdldENvbGxlY3Rpb25FbnRyaWVzKFByb3RvY29sOjpFcnJvclN0
cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgb2JqZWN0SWQsIGNvbnN0IFN0cmluZyYg
b2JqZWN0R3JvdXAsIGludCBmZXRjaFN0YXJ0LCBpbnQgZmV0Y2hDb3VudCwgUmVmUHRyPEpTT046
OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OkNvbGxlY3Rpb25FbnRyeT4+JiBlbnRyaWVzKQog
ewogICAgIEFTU0VSVChmZXRjaFN0YXJ0ID49IDApOwogICAgIEFTU0VSVChmZXRjaENvdW50ID49
IDApOwpAQCAtMjM4LDEwICsyNDIsMTAgQEAgdm9pZCBJbmplY3RlZFNjcmlwdDo6Z2V0Q29sbGVj
dGlvbkVudHJpZXMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIGVudHJpZXMgPSBCaW5kaW5nVHJhaXRzPEpTT046OkFy
cmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OkNvbGxlY3Rpb25FbnRyeT4+OjpydW50aW1lQ2FzdChX
VEZNb3ZlKHJlc3VsdCkpOworICAgIGVudHJpZXMgPSBQcm90b2NvbDo6QmluZGluZ1RyYWl0czxK
U09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpDb2xsZWN0aW9uRW50cnk+Pjo6cnVudGlt
ZUNhc3QocmVzdWx0LnJlbGVhc2VOb25OdWxsKCkpOwogfQogCi12b2lkIEluamVjdGVkU2NyaXB0
OjpzYXZlUmVzdWx0KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBjYWxs
QXJndW1lbnRKU09OLCBPcHRpb25hbDxpbnQ+JiBzYXZlZFJlc3VsdEluZGV4KQordm9pZCBJbmpl
Y3RlZFNjcmlwdDo6c2F2ZVJlc3VsdChQcm90b2NvbDo6RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5n
LCBjb25zdCBTdHJpbmcmIGNhbGxBcmd1bWVudEpTT04sIE9wdGlvbmFsPGludD4mIHNhdmVkUmVz
dWx0SW5kZXgpCiB7CiAgICAgRGVwcmVjYXRlZDo6U2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9u
KGluamVjdGVkU2NyaXB0T2JqZWN0KCksICJzYXZlUmVzdWx0Il9zLCBpbnNwZWN0b3JFbnZpcm9u
bWVudCgpLT5mdW5jdGlvbkNhbGxIYW5kbGVyKCkpOwogICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3Vt
ZW50KGNhbGxBcmd1bWVudEpTT04pOwpAQCAtMjUyLDkgKzI1Niw3IEBAIHZvaWQgSW5qZWN0ZWRT
Y3JpcHQ6OnNhdmVSZXN1bHQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcm
IGNhbGxBcmd1CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpbnQgcmVzdWx0SW5kZXgg
PSAwOwotICAgIGlmIChyZXN1bHQtPmFzSW50ZWdlcihyZXN1bHRJbmRleCkgJiYgcmVzdWx0SW5k
ZXggPiAwKQotICAgICAgICBzYXZlZFJlc3VsdEluZGV4ID0gcmVzdWx0SW5kZXg7CisgICAgc2F2
ZWRSZXN1bHRJbmRleCA9IHJlc3VsdC0+YXNJbnRlZ2VyKCk7CiB9CiAKIFJlZjxKU09OOjpBcnJh
eU9mPFByb3RvY29sOjpEZWJ1Z2dlcjo6Q2FsbEZyYW1lPj4gSW5qZWN0ZWRTY3JpcHQ6OndyYXBD
YWxsRnJhbWVzKEpTQzo6SlNWYWx1ZSBjYWxsRnJhbWVzKSBjb25zdApAQCAtMjY5LDggKzI3MSw4
IEBAIFJlZjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpEZWJ1Z2dlcjo6Q2FsbEZyYW1lPj4gSW5q
ZWN0ZWRTY3JpcHQ6OndyYXBDYWxsRnJhbWVzCiAgICAgICAgIHJldHVybiBKU09OOjpBcnJheU9m
PFByb3RvY29sOjpEZWJ1Z2dlcjo6Q2FsbEZyYW1lPjo6Y3JlYXRlKCk7CiAKICAgICBSZWZQdHI8
SlNPTjo6VmFsdWU+IHJlc3VsdCA9IHRvSW5zcGVjdG9yVmFsdWUoZ2xvYmFsT2JqZWN0KCksIGNh
bGxSZXN1bHQudmFsdWUoKSk7Ci0gICAgaWYgKHJlc3VsdC0+dHlwZSgpID09IEpTT046OlZhbHVl
OjpUeXBlOjpBcnJheSkKLSAgICAgICAgcmV0dXJuIEJpbmRpbmdUcmFpdHM8SlNPTjo6QXJyYXlP
ZjxQcm90b2NvbDo6RGVidWdnZXI6OkNhbGxGcmFtZT4+OjpydW50aW1lQ2FzdChXVEZNb3ZlKHJl
c3VsdCkpLnJlbGVhc2VOb25OdWxsKCk7CisgICAgaWYgKHJlc3VsdCAmJiByZXN1bHQtPnR5cGUo
KSA9PSBKU09OOjpWYWx1ZTo6VHlwZTo6QXJyYXkpCisgICAgICAgIHJldHVybiBQcm90b2NvbDo6
QmluZGluZ1RyYWl0czxKU09OOjpBcnJheU9mPFByb3RvY29sOjpEZWJ1Z2dlcjo6Q2FsbEZyYW1l
Pj46OnJ1bnRpbWVDYXN0KHJlc3VsdC5yZWxlYXNlTm9uTnVsbCgpKTsKIAogICAgIHJldHVybiBK
U09OOjpBcnJheU9mPFByb3RvY29sOjpEZWJ1Z2dlcjo6Q2FsbEZyYW1lPjo6Y3JlYXRlKCk7CiB9
CkBAIC0yODgsMTEgKzI5MCwxNSBAQCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9i
amVjdD4gSW5qZWN0ZWRTY3JpcHQ6OndyYXBPYmplY3QoSlNDOjpKU1ZhbHVlCiAgICAgaWYgKCFj
YWxsUmVzdWx0KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIFJlZlB0cjxKU09OOjpP
YmplY3Q+IHJlc3VsdE9iamVjdDsKLSAgICBib29sIGNhc3RTdWNjZWVkZWQgPSB0b0luc3BlY3Rv
clZhbHVlKGdsb2JhbE9iamVjdCgpLCBjYWxsUmVzdWx0LnZhbHVlKCkpLT5hc09iamVjdChyZXN1
bHRPYmplY3QpOwotICAgIEFTU0VSVF9VTlVTRUQoY2FzdFN1Y2NlZWRlZCwgY2FzdFN1Y2NlZWRl
ZCk7CisgICAgYXV0byByZXN1bHRWYWx1ZSA9IHRvSW5zcGVjdG9yVmFsdWUoZ2xvYmFsT2JqZWN0
KCksIGNhbGxSZXN1bHQudmFsdWUoKSk7CisgICAgaWYgKCFyZXN1bHRWYWx1ZSkKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gQmluZGluZ1RyYWl0czxQcm90b2NvbDo6UnVu
dGltZTo6UmVtb3RlT2JqZWN0Pjo6cnVudGltZUNhc3QocmVzdWx0T2JqZWN0KTsKKyAgICBhdXRv
IHJlc3VsdE9iamVjdCA9IHJlc3VsdFZhbHVlLT5hc09iamVjdCgpOworICAgIGlmICghcmVzdWx0
T2JqZWN0KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBQcm90b2NvbDo6
QmluZGluZ1RyYWl0czxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0Pjo6cnVudGltZUNh
c3QocmVzdWx0T2JqZWN0LnJlbGVhc2VOb25OdWxsKCkpOwogfQogCiBSZWZQdHI8UHJvdG9jb2w6
OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4gSW5qZWN0ZWRTY3JpcHQ6OndyYXBKU09OU3RyaW5nKGNv
bnN0IFN0cmluZyYganNvbiwgY29uc3QgU3RyaW5nJiBncm91cE5hbWUsIGJvb2wgZ2VuZXJhdGVQ
cmV2aWV3KSBjb25zdApAQCAtMzEwLDExICszMTYsMTUgQEAgUmVmUHRyPFByb3RvY29sOjpSdW50
aW1lOjpSZW1vdGVPYmplY3Q+IEluamVjdGVkU2NyaXB0Ojp3cmFwSlNPTlN0cmluZyhjb25zdCBT
dHIKICAgICBpZiAoY2FsbFJlc3VsdC52YWx1ZSgpLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKIAotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHJlc3VsdE9iamVjdDsKLSAgICBi
b29sIGNhc3RTdWNjZWVkZWQgPSB0b0luc3BlY3RvclZhbHVlKGdsb2JhbE9iamVjdCgpLCBjYWxs
UmVzdWx0LnZhbHVlKCkpLT5hc09iamVjdChyZXN1bHRPYmplY3QpOwotICAgIEFTU0VSVF9VTlVT
RUQoY2FzdFN1Y2NlZWRlZCwgY2FzdFN1Y2NlZWRlZCk7CisgICAgYXV0byByZXN1bHRWYWx1ZSA9
IHRvSW5zcGVjdG9yVmFsdWUoZ2xvYmFsT2JqZWN0KCksIGNhbGxSZXN1bHQudmFsdWUoKSk7Cisg
ICAgaWYgKCFyZXN1bHRWYWx1ZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1
cm4gQmluZGluZ1RyYWl0czxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0Pjo6cnVudGlt
ZUNhc3QocmVzdWx0T2JqZWN0KTsKKyAgICBhdXRvIHJlc3VsdE9iamVjdCA9IHJlc3VsdFZhbHVl
LT5hc09iamVjdCgpOworICAgIGlmICghcmVzdWx0T2JqZWN0KQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKworICAgIHJldHVybiBQcm90b2NvbDo6QmluZGluZ1RyYWl0czxQcm90b2NvbDo6UnVu
dGltZTo6UmVtb3RlT2JqZWN0Pjo6cnVudGltZUNhc3QocmVzdWx0T2JqZWN0LnJlbGVhc2VOb25O
dWxsKCkpOwogfQogCiBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4gSW5q
ZWN0ZWRTY3JpcHQ6OndyYXBUYWJsZShKU0M6OkpTVmFsdWUgdGFibGUsIEpTQzo6SlNWYWx1ZSBj
b2x1bW5zKSBjb25zdApAQCAtMzMyLDExICszNDIsMTUgQEAgUmVmUHRyPFByb3RvY29sOjpSdW50
aW1lOjpSZW1vdGVPYmplY3Q+IEluamVjdGVkU2NyaXB0Ojp3cmFwVGFibGUoSlNDOjpKU1ZhbHVl
IHQKICAgICBpZiAoIWNhbGxSZXN1bHQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAg
UmVmUHRyPEpTT046Ok9iamVjdD4gcmVzdWx0T2JqZWN0OwotICAgIGJvb2wgY2FzdFN1Y2NlZWRl
ZCA9IHRvSW5zcGVjdG9yVmFsdWUoZ2xvYmFsT2JqZWN0KCksIGNhbGxSZXN1bHQudmFsdWUoKSkt
PmFzT2JqZWN0KHJlc3VsdE9iamVjdCk7Ci0gICAgQVNTRVJUX1VOVVNFRChjYXN0U3VjY2VlZGVk
LCBjYXN0U3VjY2VlZGVkKTsKKyAgICBhdXRvIHJlc3VsdFZhbHVlID0gdG9JbnNwZWN0b3JWYWx1
ZShnbG9iYWxPYmplY3QoKSwgY2FsbFJlc3VsdC52YWx1ZSgpKTsKKyAgICBpZiAoIXJlc3VsdFZh
bHVlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiBCaW5kaW5nVHJhaXRz
PFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+OjpydW50aW1lQ2FzdChyZXN1bHRPYmpl
Y3QpOworICAgIGF1dG8gcmVzdWx0T2JqZWN0ID0gcmVzdWx0VmFsdWUtPmFzT2JqZWN0KCk7Cisg
ICAgaWYgKCFyZXN1bHRPYmplY3QpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0
dXJuIFByb3RvY29sOjpCaW5kaW5nVHJhaXRzPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmpl
Y3Q+OjpydW50aW1lQ2FzdChyZXN1bHRPYmplY3QucmVsZWFzZU5vbk51bGwoKSk7CiB9CiAKIFJl
ZlB0cjxQcm90b2NvbDo6UnVudGltZTo6T2JqZWN0UHJldmlldz4gSW5qZWN0ZWRTY3JpcHQ6OnBy
ZXZpZXdWYWx1ZShKU0M6OkpTVmFsdWUgdmFsdWUpIGNvbnN0CkBAIC0zNDksMTEgKzM2MywxNSBA
QCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6Ok9iamVjdFByZXZpZXc+IEluamVjdGVkU2NyaXB0
OjpwcmV2aWV3VmFsdWUoSlNDOjpKU1ZhbAogICAgIGlmICghY2FsbFJlc3VsdCkKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiByZXN1bHRPYmplY3Q7
Ci0gICAgYm9vbCBjYXN0U3VjY2VlZGVkID0gdG9JbnNwZWN0b3JWYWx1ZShnbG9iYWxPYmplY3Qo
KSwgY2FsbFJlc3VsdC52YWx1ZSgpKS0+YXNPYmplY3QocmVzdWx0T2JqZWN0KTsKLSAgICBBU1NF
UlRfVU5VU0VEKGNhc3RTdWNjZWVkZWQsIGNhc3RTdWNjZWVkZWQpOworICAgIGF1dG8gcmVzdWx0
VmFsdWUgPSB0b0luc3BlY3RvclZhbHVlKGdsb2JhbE9iamVjdCgpLCBjYWxsUmVzdWx0LnZhbHVl
KCkpOworICAgIGlmICghcmVzdWx0VmFsdWUpCisgICAgICAgIHJldHVybiBudWxscHRyOwogCi0g
ICAgcmV0dXJuIEJpbmRpbmdUcmFpdHM8UHJvdG9jb2w6OlJ1bnRpbWU6Ok9iamVjdFByZXZpZXc+
OjpydW50aW1lQ2FzdChyZXN1bHRPYmplY3QpOworICAgIGF1dG8gcmVzdWx0T2JqZWN0ID0gcmVz
dWx0VmFsdWUtPmFzT2JqZWN0KCk7CisgICAgaWYgKCFyZXN1bHRPYmplY3QpCisgICAgICAgIHJl
dHVybiBudWxscHRyOworCisgICAgcmV0dXJuIFByb3RvY29sOjpCaW5kaW5nVHJhaXRzPFByb3Rv
Y29sOjpSdW50aW1lOjpPYmplY3RQcmV2aWV3Pjo6cnVudGltZUNhc3QocmVzdWx0T2JqZWN0LnJl
bGVhc2VOb25OdWxsKCkpOwogfQogCiB2b2lkIEluamVjdGVkU2NyaXB0OjpzZXRFdmVudFZhbHVl
KEpTQzo6SlNWYWx1ZSB2YWx1ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3IvSW5qZWN0ZWRTY3JpcHQuaAppbmRleCBjZGVlNDVmMmQ2YjMzNzdmMWUwNTIzY2ZlNDAxYWUy
OGJjZjJkZjZmLi5kNjNhZWYwMjU5OTY0ODg0NmM2ODM2MTVjYjU2YzY0M2MzODliMWE1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0LmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdC5oCkBA
IC01OSwyMCArNTksMjAgQEAgcHVibGljOgogICAgICAgICBib29sIHNhdmVSZXN1bHQgeyBmYWxz
ZSB9OwogICAgICAgICBWZWN0b3I8SlNDOjpKU1ZhbHVlPiBhcmdzOwogICAgIH07Ci0gICAgdm9p
ZCBleGVjdXRlKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBmdW5jdGlvblN0cmluZywgRXhl
Y3V0ZU9wdGlvbnMmJiwgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiBy
ZXN1bHQsIE9wdGlvbmFsPGJvb2w+JiB3YXNUaHJvd24sIE9wdGlvbmFsPGludD4mIHNhdmVkUmVz
dWx0SW5kZXgpOworICAgIHZvaWQgZXhlY3V0ZShQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBjb25z
dCBTdHJpbmcmIGZ1bmN0aW9uU3RyaW5nLCBFeGVjdXRlT3B0aW9ucyYmLCBSZWZQdHI8UHJvdG9j
b2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3VsdCwgT3B0aW9uYWw8Ym9vbD4mIHdhc1Ro
cm93biwgT3B0aW9uYWw8aW50PiYgc2F2ZWRSZXN1bHRJbmRleCk7CiAKLSAgICB2b2lkIGV2YWx1
YXRlKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBjb25zdCBTdHJpbmcm
IG9iamVjdEdyb3VwLCBib29sIGluY2x1ZGVDb21tYW5kTGluZUFQSSwgYm9vbCByZXR1cm5CeVZh
bHVlLCBib29sIGdlbmVyYXRlUHJldmlldywgYm9vbCBzYXZlUmVzdWx0LCBSZWZQdHI8UHJvdG9j
b2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3VsdCwgT3B0aW9uYWw8Ym9vbD4mIHdhc1Ro
cm93biwgT3B0aW9uYWw8aW50PiYgc2F2ZWRSZXN1bHRJbmRleCk7CisgICAgdm9pZCBldmFsdWF0
ZShQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIGNvbnN0
IFN0cmluZyYgb2JqZWN0R3JvdXAsIGJvb2wgaW5jbHVkZUNvbW1hbmRMaW5lQVBJLCBib29sIHJl
dHVybkJ5VmFsdWUsIGJvb2wgZ2VuZXJhdGVQcmV2aWV3LCBib29sIHNhdmVSZXN1bHQsIFJlZlB0
cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0LCBPcHRpb25hbDxib29s
PiYgd2FzVGhyb3duLCBPcHRpb25hbDxpbnQ+JiBzYXZlZFJlc3VsdEluZGV4KTsKICAgICB2b2lk
IGF3YWl0UHJvbWlzZShjb25zdCBTdHJpbmcmIHByb21pc2VPYmplY3RJZCwgYm9vbCByZXR1cm5C
eVZhbHVlLCBib29sIGdlbmVyYXRlUHJldmlldywgYm9vbCBzYXZlUmVzdWx0LCBBc3luY0NhbGxD
YWxsYmFjayYmKTsKLSAgICB2b2lkIGV2YWx1YXRlT25DYWxsRnJhbWUoRXJyb3JTdHJpbmcmLCBK
U0M6OkpTVmFsdWUgY2FsbEZyYW1lcywgY29uc3QgU3RyaW5nJiBjYWxsRnJhbWVJZCwgY29uc3Qg
U3RyaW5nJiBleHByZXNzaW9uLCBjb25zdCBTdHJpbmcmIG9iamVjdEdyb3VwLCBib29sIGluY2x1
ZGVDb21tYW5kTGluZUFQSSwgYm9vbCByZXR1cm5CeVZhbHVlLCBib29sIGdlbmVyYXRlUHJldmll
dywgYm9vbCBzYXZlUmVzdWx0LCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVj
dD4mIHJlc3VsdCwgT3B0aW9uYWw8Ym9vbD4mIHdhc1Rocm93biwgT3B0aW9uYWw8aW50PiYgc2F2
ZWRSZXN1bHRJbmRleCk7Ci0gICAgdm9pZCBjYWxsRnVuY3Rpb25PbihFcnJvclN0cmluZyYsIGNv
bnN0IFN0cmluZyYgb2JqZWN0SWQsIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgY29uc3QgU3Ry
aW5nJiBhcmd1bWVudHMsIGJvb2wgcmV0dXJuQnlWYWx1ZSwgYm9vbCBnZW5lcmF0ZVByZXZpZXcs
IFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0LCBPcHRpb25h
bDxib29sPiYgd2FzVGhyb3duKTsKLSAgICB2b2lkIGdldEZ1bmN0aW9uRGV0YWlscyhFcnJvclN0
cmluZyYsIGNvbnN0IFN0cmluZyYgZnVuY3Rpb25JZCwgUmVmUHRyPFByb3RvY29sOjpEZWJ1Z2dl
cjo6RnVuY3Rpb25EZXRhaWxzPiYgcmVzdWx0KTsKLSAgICB2b2lkIGZ1bmN0aW9uRGV0YWlscyhF
cnJvclN0cmluZyYsIEpTQzo6SlNWYWx1ZSwgUmVmUHRyPFByb3RvY29sOjpEZWJ1Z2dlcjo6RnVu
Y3Rpb25EZXRhaWxzPiYgcmVzdWx0KTsKLSAgICB2b2lkIGdldFByZXZpZXcoRXJyb3JTdHJpbmcm
LCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6Ok9iamVj
dFByZXZpZXc+JiByZXN1bHQpOwotICAgIHZvaWQgZ2V0UHJvcGVydGllcyhFcnJvclN0cmluZyYs
IGNvbnN0IFN0cmluZyYgb2JqZWN0SWQsIGJvb2wgb3duUHJvcGVydGllcywgaW50IGZldGNoU3Rh
cnQsIGludCBmZXRjaENvdW50LCBib29sIGdlbmVyYXRlUHJldmlldywgUmVmUHRyPEpTT046OkFy
cmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OlByb3BlcnR5RGVzY3JpcHRvcj4+JiByZXN1bHQpOwot
ICAgIHZvaWQgZ2V0RGlzcGxheWFibGVQcm9wZXJ0aWVzKEVycm9yU3RyaW5nJiwgY29uc3QgU3Ry
aW5nJiBvYmplY3RJZCwgaW50IGZldGNoU3RhcnQsIGludCBmZXRjaENvdW50LCBib29sIGdlbmVy
YXRlUHJldmlldywgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OlByb3Bl
cnR5RGVzY3JpcHRvcj4+JiByZXN1bHQpOwotICAgIHZvaWQgZ2V0SW50ZXJuYWxQcm9wZXJ0aWVz
KEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBvYmplY3RJZCwgYm9vbCBnZW5lcmF0ZVByZXZp
ZXcsIFJlZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpJbnRlcm5hbFByb3Bl
cnR5RGVzY3JpcHRvcj4+JiByZXN1bHQpOwotICAgIHZvaWQgZ2V0Q29sbGVjdGlvbkVudHJpZXMo
RXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBjb25zdCBTdHJpbmcmIG9iamVj
dEdyb3VwLCBpbnQgZmV0Y2hTdGFydCwgaW50IGZldGNoQ291bnQsIFJlZlB0cjxKU09OOjpBcnJh
eU9mPFByb3RvY29sOjpSdW50aW1lOjpDb2xsZWN0aW9uRW50cnk+PiYgZW50cmllcyk7Ci0gICAg
dm9pZCBzYXZlUmVzdWx0KEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBjYWxsQXJndW1lbnRK
U09OLCBPcHRpb25hbDxpbnQ+JiBzYXZlZFJlc3VsdEluZGV4KTsKKyAgICB2b2lkIGV2YWx1YXRl
T25DYWxsRnJhbWUoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiwgSlNDOjpKU1ZhbHVlIGNhbGxGcmFt
ZXMsIGNvbnN0IFN0cmluZyYgY2FsbEZyYW1lSWQsIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwg
Y29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCwgYm9vbCBpbmNsdWRlQ29tbWFuZExpbmVBUEksIGJv
b2wgcmV0dXJuQnlWYWx1ZSwgYm9vbCBnZW5lcmF0ZVByZXZpZXcsIGJvb2wgc2F2ZVJlc3VsdCwg
UmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiByZXN1bHQsIE9wdGlvbmFs
PGJvb2w+JiB3YXNUaHJvd24sIE9wdGlvbmFsPGludD4mIHNhdmVkUmVzdWx0SW5kZXgpOworICAg
IHZvaWQgY2FsbEZ1bmN0aW9uT24oUHJvdG9jb2w6OkVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5n
JiBvYmplY3RJZCwgY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBjb25zdCBTdHJpbmcmIGFyZ3Vt
ZW50cywgYm9vbCByZXR1cm5CeVZhbHVlLCBib29sIGdlbmVyYXRlUHJldmlldywgUmVmUHRyPFBy
b3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiByZXN1bHQsIE9wdGlvbmFsPGJvb2w+JiB3
YXNUaHJvd24pOworICAgIHZvaWQgZ2V0RnVuY3Rpb25EZXRhaWxzKFByb3RvY29sOjpFcnJvclN0
cmluZyYsIGNvbnN0IFN0cmluZyYgZnVuY3Rpb25JZCwgUmVmUHRyPFByb3RvY29sOjpEZWJ1Z2dl
cjo6RnVuY3Rpb25EZXRhaWxzPiYgcmVzdWx0KTsKKyAgICB2b2lkIGZ1bmN0aW9uRGV0YWlscyhQ
cm90b2NvbDo6RXJyb3JTdHJpbmcmLCBKU0M6OkpTVmFsdWUsIFJlZlB0cjxQcm90b2NvbDo6RGVi
dWdnZXI6OkZ1bmN0aW9uRGV0YWlscz4mIHJlc3VsdCk7CisgICAgdm9pZCBnZXRQcmV2aWV3KFBy
b3RvY29sOjpFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgb2JqZWN0SWQsIFJlZlB0cjxQcm90
b2NvbDo6UnVudGltZTo6T2JqZWN0UHJldmlldz4mIHJlc3VsdCk7CisgICAgdm9pZCBnZXRQcm9w
ZXJ0aWVzKFByb3RvY29sOjpFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgb2JqZWN0SWQsIGJv
b2wgb3duUHJvcGVydGllcywgaW50IGZldGNoU3RhcnQsIGludCBmZXRjaENvdW50LCBib29sIGdl
bmVyYXRlUHJldmlldywgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OlBy
b3BlcnR5RGVzY3JpcHRvcj4+JiByZXN1bHQpOworICAgIHZvaWQgZ2V0RGlzcGxheWFibGVQcm9w
ZXJ0aWVzKFByb3RvY29sOjpFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgb2JqZWN0SWQsIGlu
dCBmZXRjaFN0YXJ0LCBpbnQgZmV0Y2hDb3VudCwgYm9vbCBnZW5lcmF0ZVByZXZpZXcsIFJlZlB0
cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpQcm9wZXJ0eURlc2NyaXB0b3I+PiYg
cmVzdWx0KTsKKyAgICB2b2lkIGdldEludGVybmFsUHJvcGVydGllcyhQcm90b2NvbDo6RXJyb3JT
dHJpbmcmLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBib29sIGdlbmVyYXRlUHJldmlldywgUmVm
UHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OkludGVybmFsUHJvcGVydHlEZXNj
cmlwdG9yPj4mIHJlc3VsdCk7CisgICAgdm9pZCBnZXRDb2xsZWN0aW9uRW50cmllcyhQcm90b2Nv
bDo6RXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBjb25zdCBTdHJpbmcmIG9i
amVjdEdyb3VwLCBpbnQgZmV0Y2hTdGFydCwgaW50IGZldGNoQ291bnQsIFJlZlB0cjxKU09OOjpB
cnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpDb2xsZWN0aW9uRW50cnk+PiYgZW50cmllcyk7Cisg
ICAgdm9pZCBzYXZlUmVzdWx0KFByb3RvY29sOjpFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYg
Y2FsbEFyZ3VtZW50SlNPTiwgT3B0aW9uYWw8aW50PiYgc2F2ZWRSZXN1bHRJbmRleCk7CiAKICAg
ICBSZWY8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6RGVidWdnZXI6OkNhbGxGcmFtZT4+IHdyYXBD
YWxsRnJhbWVzKEpTQzo6SlNWYWx1ZSkgY29uc3Q7CiAgICAgUmVmUHRyPFByb3RvY29sOjpSdW50
aW1lOjpSZW1vdGVPYmplY3Q+IHdyYXBPYmplY3QoSlNDOjpKU1ZhbHVlLCBjb25zdCBTdHJpbmcm
IGdyb3VwTmFtZSwgYm9vbCBnZW5lcmF0ZVByZXZpZXcgPSBmYWxzZSkgY29uc3Q7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0QmFzZS5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0QmFzZS5j
cHAKaW5kZXggNzU2OWY1YjVkOTc1ODA4ODI0ZjY0ZWIyZWYwYTQwNmI2NGE0ZDkzOS4uMDkwMTY2
YTkxZmM2NmFkMWNkZTcxODE5NTNjZjQ3NzNmZjY2ZjA4ZiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdEJhc2UuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRCYXNlLmNwcApAQCAtMTAw
LDcgKzEwMCw3IEBAIFJlZjxKU09OOjpWYWx1ZT4gSW5qZWN0ZWRTY3JpcHRCYXNlOjptYWtlQ2Fs
bChEZXByZWNhdGVkOjpTY3JpcHRGdW5jdGlvbkNhbGwmIGZ1CiAgICAgcmV0dXJuIHJlc3VsdEpT
T05WYWx1ZS5yZWxlYXNlTm9uTnVsbCgpOwogfQogCi12b2lkIEluamVjdGVkU2NyaXB0QmFzZTo6
bWFrZUV2YWxDYWxsKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgRGVwcmVjYXRlZDo6U2NyaXB0
RnVuY3Rpb25DYWxsJiBmdW5jdGlvbiwgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVP
YmplY3Q+JiBvdXRfcmVzdWx0T2JqZWN0LCBPcHRpb25hbDxib29sPiYgb3V0X3dhc1Rocm93biwg
T3B0aW9uYWw8aW50PiYgb3V0X3NhdmVkUmVzdWx0SW5kZXgpCit2b2lkIEluamVjdGVkU2NyaXB0
QmFzZTo6bWFrZUV2YWxDYWxsKFByb3RvY29sOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIERl
cHJlY2F0ZWQ6OlNjcmlwdEZ1bmN0aW9uQ2FsbCYgZnVuY3Rpb24sIFJlZlB0cjxQcm90b2NvbDo6
UnVudGltZTo6UmVtb3RlT2JqZWN0PiYgb3V0X3Jlc3VsdE9iamVjdCwgT3B0aW9uYWw8Ym9vbD4m
IG91dF93YXNUaHJvd24sIE9wdGlvbmFsPGludD4mIG91dF9zYXZlZFJlc3VsdEluZGV4KQogewog
ICAgIGNoZWNrQ2FsbFJlc3VsdChlcnJvclN0cmluZywgbWFrZUNhbGwoZnVuY3Rpb24pLCBvdXRf
cmVzdWx0T2JqZWN0LCBvdXRfd2FzVGhyb3duLCBvdXRfc2F2ZWRSZXN1bHRJbmRleCk7CiB9CkBA
IC0xNDMsNyArMTQzLDcgQEAgdm9pZCBJbmplY3RlZFNjcmlwdEJhc2U6Om1ha2VBc3luY0NhbGwo
RGVwcmVjYXRlZDo6U2NyaXB0RnVuY3Rpb25DYWxsJiBmdW5jdGlvbiwKICAgICB9CiB9CiAKLXZv
aWQgSW5qZWN0ZWRTY3JpcHRCYXNlOjpjaGVja0NhbGxSZXN1bHQoRXJyb3JTdHJpbmcmIGVycm9y
U3RyaW5nLCBSZWZQdHI8SlNPTjo6VmFsdWU+IHJlc3VsdCwgUmVmUHRyPFByb3RvY29sOjpSdW50
aW1lOjpSZW1vdGVPYmplY3Q+JiBvdXRfcmVzdWx0T2JqZWN0LCBPcHRpb25hbDxib29sPiYgb3V0
X3dhc1Rocm93biwgT3B0aW9uYWw8aW50PiYgb3V0X3NhdmVkUmVzdWx0SW5kZXgpCit2b2lkIElu
amVjdGVkU2NyaXB0QmFzZTo6Y2hlY2tDYWxsUmVzdWx0KFByb3RvY29sOjpFcnJvclN0cmluZyYg
ZXJyb3JTdHJpbmcsIFJlZlB0cjxKU09OOjpWYWx1ZT4gcmVzdWx0LCBSZWZQdHI8UHJvdG9jb2w6
OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIG91dF9yZXN1bHRPYmplY3QsIE9wdGlvbmFsPGJvb2w+
JiBvdXRfd2FzVGhyb3duLCBPcHRpb25hbDxpbnQ+JiBvdXRfc2F2ZWRSZXN1bHRJbmRleCkKIHsK
ICAgICBpZiAoIXJlc3VsdCkgewogICAgICAgICBlcnJvclN0cmluZyA9ICJJbnRlcm5hbCBlcnJv
cjogcmVzdWx0IHZhbHVlIGlzIGVtcHR5Il9zOwpAQCAtMTUxLDQ5ICsxNTEsNDIgQEAgdm9pZCBJ
bmplY3RlZFNjcmlwdEJhc2U6OmNoZWNrQ2FsbFJlc3VsdChFcnJvclN0cmluZyYgZXJyb3JTdHJp
bmcsIFJlZlB0cjxKU09OOjoKICAgICB9CiAKICAgICBpZiAocmVzdWx0LT50eXBlKCkgPT0gSlNP
Tjo6VmFsdWU6OlR5cGU6OlN0cmluZykgewotICAgICAgICByZXN1bHQtPmFzU3RyaW5nKGVycm9y
U3RyaW5nKTsKLSAgICAgICAgQVNTRVJUKGVycm9yU3RyaW5nLmxlbmd0aCgpKTsKKyAgICAgICAg
ZXJyb3JTdHJpbmcgPSByZXN1bHQtPmFzU3RyaW5nKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiByZXN1bHRUdXBsZTsKLSAgICBpZiAoIXJlc3Vs
dC0+YXNPYmplY3QocmVzdWx0VHVwbGUpKSB7CisgICAgYXV0byByZXN1bHRUdXBsZSA9IHJlc3Vs
dC0+YXNPYmplY3QoKTsKKyAgICBpZiAoIXJlc3VsdFR1cGxlKSB7CiAgICAgICAgIGVycm9yU3Ry
aW5nID0gIkludGVybmFsIGVycm9yOiByZXN1bHQgaXMgbm90IGFuIE9iamVjdCJfczsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHJlc3VsdE9iamVj
dDsKLSAgICBpZiAoIXJlc3VsdFR1cGxlLT5nZXRPYmplY3QoInJlc3VsdCJfcywgcmVzdWx0T2Jq
ZWN0KSkgeworICAgIGF1dG8gcmVzdWx0T2JqZWN0ID0gcmVzdWx0VHVwbGUtPmdldE9iamVjdCgi
cmVzdWx0Il9zKTsKKyAgICBpZiAoIXJlc3VsdE9iamVjdCkgewogICAgICAgICBlcnJvclN0cmlu
ZyA9ICJJbnRlcm5hbCBlcnJvcjogcmVzdWx0IGlzIG5vdCBhIHBhaXIgb2YgdmFsdWUgYW5kIHdh
c1Rocm93biBmbGFnIl9zOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYm9vbCB3YXNU
aHJvd24gPSBmYWxzZTsKLSAgICBpZiAoIXJlc3VsdFR1cGxlLT5nZXRCb29sZWFuKCJ3YXNUaHJv
d24iX3MsIHdhc1Rocm93bikpIHsKKyAgICBvdXRfd2FzVGhyb3duID0gcmVzdWx0VHVwbGUtPmdl
dEJvb2xlYW4oIndhc1Rocm93biJfcyk7CisgICAgaWYgKCFvdXRfd2FzVGhyb3duKSB7CiAgICAg
ICAgIGVycm9yU3RyaW5nID0gIkludGVybmFsIGVycm9yOiByZXN1bHQgaXMgbm90IGEgcGFpciBv
ZiB2YWx1ZSBhbmQgd2FzVGhyb3duIGZsYWciX3M7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBvdXRfcmVzdWx0T2JqZWN0ID0gQmluZGluZ1RyYWl0czxQcm90b2NvbDo6UnVudGltZTo6
UmVtb3RlT2JqZWN0Pjo6cnVudGltZUNhc3QocmVzdWx0T2JqZWN0KTsKLQotICAgIGlmICh3YXNU
aHJvd24pCi0gICAgICAgIG91dF93YXNUaHJvd24gPSB3YXNUaHJvd247Ci0KLSAgICBpbnQgc2F2
ZWRSZXN1bHRJbmRleDsKLSAgICBpZiAocmVzdWx0VHVwbGUtPmdldEludGVnZXIoInNhdmVkUmVz
dWx0SW5kZXgiX3MsIHNhdmVkUmVzdWx0SW5kZXgpKQotICAgICAgICBvdXRfc2F2ZWRSZXN1bHRJ
bmRleCA9IHNhdmVkUmVzdWx0SW5kZXg7CisgICAgb3V0X3Jlc3VsdE9iamVjdCA9IFByb3RvY29s
OjpCaW5kaW5nVHJhaXRzPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+OjpydW50aW1l
Q2FzdChyZXN1bHRPYmplY3QucmVsZWFzZU5vbk51bGwoKSk7CisgICAgb3V0X3NhdmVkUmVzdWx0
SW5kZXggPSByZXN1bHRUdXBsZS0+Z2V0SW50ZWdlcigic2F2ZWRSZXN1bHRJbmRleCJfcyk7CiB9
CiAKIHZvaWQgSW5qZWN0ZWRTY3JpcHRCYXNlOjpjaGVja0FzeW5jQ2FsbFJlc3VsdChSZWZQdHI8
SlNPTjo6VmFsdWU+IHJlc3VsdCwgY29uc3QgQXN5bmNDYWxsQ2FsbGJhY2smIGNhbGxiYWNrKQog
ewotICAgIEVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworICAgIFByb3RvY29sOjpFcnJvclN0cmlu
ZyBlcnJvclN0cmluZzsKICAgICBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVj
dD4gcmVzdWx0T2JqZWN0OwogICAgIE9wdGlvbmFsPGJvb2w+IHdhc1Rocm93bjsKICAgICBPcHRp
b25hbDxpbnQ+IHNhdmVkUmVzdWx0SW5kZXg7CiAKICAgICBjaGVja0NhbGxSZXN1bHQoZXJyb3JT
dHJpbmcsIHJlc3VsdCwgcmVzdWx0T2JqZWN0LCB3YXNUaHJvd24sIHNhdmVkUmVzdWx0SW5kZXgp
OwogCi0gICAgY2FsbGJhY2soZXJyb3JTdHJpbmcsIFdURk1vdmUocmVzdWx0T2JqZWN0KSwgd2Fz
VGhyb3duLCBzYXZlZFJlc3VsdEluZGV4KTsKKyAgICBjYWxsYmFjayhlcnJvclN0cmluZywgV1RG
TW92ZShyZXN1bHRPYmplY3QpLCBXVEZNb3ZlKHdhc1Rocm93biksIFdURk1vdmUoc2F2ZWRSZXN1
bHRJbmRleCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRCYXNlLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0QmFzZS5oCmluZGV4IDgx
MjNmMWQ2NmU5YjEzYWQ0YWQwZWNiMWEzY2FkMzNmNTk3NmQ1ZDcuLmY0ZTZhMGZlZWE0MTFjZDA1
ODU5ODRiZDc0YWNjNGIyNGFhOGVkMGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRCYXNlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdEJhc2UuaApAQCAtNDcsOCArNDcsNyBAQCBjbGFz
cyBTY3JpcHRGdW5jdGlvbkNhbGw7CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCi10eXBlZGVm
IFN0cmluZyBFcnJvclN0cmluZzsKLXR5cGVkZWYgV1RGOjpGdW5jdGlvbjx2b2lkKEVycm9yU3Ry
aW5nJiwgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiYsIE9wdGlvbmFs
PGJvb2w+JiwgT3B0aW9uYWw8aW50PiYpPiBBc3luY0NhbGxDYWxsYmFjazsKK3VzaW5nIEFzeW5j
Q2FsbENhbGxiYWNrID0gV1RGOjpGdW5jdGlvbjx2b2lkKFByb3RvY29sOjpFcnJvclN0cmluZyYs
IFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYmLCBPcHRpb25hbDxib29s
PiYmLCBPcHRpb25hbDxpbnQ+JiYpPjsKIAogY2xhc3MgSlNfRVhQT1JUX1BSSVZBVEUgSW5qZWN0
ZWRTY3JpcHRCYXNlIHsKIHB1YmxpYzoKQEAgLTY5LDExICs2OCwxMSBAQCBwcm90ZWN0ZWQ6CiAg
ICAgY29uc3QgRGVwcmVjYXRlZDo6U2NyaXB0T2JqZWN0JiBpbmplY3RlZFNjcmlwdE9iamVjdCgp
IGNvbnN0OwogICAgIEV4cGVjdGVkPEpTQzo6SlNWYWx1ZSwgTmFrZWRQdHI8SlNDOjpFeGNlcHRp
b24+PiBjYWxsRnVuY3Rpb25XaXRoRXZhbEVuYWJsZWQoRGVwcmVjYXRlZDo6U2NyaXB0RnVuY3Rp
b25DYWxsJikgY29uc3Q7CiAgICAgUmVmPEpTT046OlZhbHVlPiBtYWtlQ2FsbChEZXByZWNhdGVk
OjpTY3JpcHRGdW5jdGlvbkNhbGwmKTsKLSAgICB2b2lkIG1ha2VFdmFsQ2FsbChFcnJvclN0cmlu
ZyYsIERlcHJlY2F0ZWQ6OlNjcmlwdEZ1bmN0aW9uQ2FsbCYsIFJlZlB0cjxQcm90b2NvbDo6UnVu
dGltZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0T2JqZWN0LCBPcHRpb25hbDxib29sPiYgd2FzVGhy
b3duLCBPcHRpb25hbDxpbnQ+JiBzYXZlZFJlc3VsdEluZGV4KTsKKyAgICB2b2lkIG1ha2VFdmFs
Q2FsbChQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBEZXByZWNhdGVkOjpTY3JpcHRGdW5jdGlvbkNh
bGwmLCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3VsdE9iamVj
dCwgT3B0aW9uYWw8Ym9vbD4mIHdhc1Rocm93biwgT3B0aW9uYWw8aW50PiYgc2F2ZWRSZXN1bHRJ
bmRleCk7CiAgICAgdm9pZCBtYWtlQXN5bmNDYWxsKERlcHJlY2F0ZWQ6OlNjcmlwdEZ1bmN0aW9u
Q2FsbCYsIEFzeW5jQ2FsbENhbGxiYWNrJiYpOwogCiBwcml2YXRlOgotICAgIHZvaWQgY2hlY2tD
YWxsUmVzdWx0KEVycm9yU3RyaW5nJiwgUmVmUHRyPEpTT046OlZhbHVlPiByZXN1bHQsIFJlZlB0
cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0T2JqZWN0LCBPcHRpb25h
bDxib29sPiYgd2FzVGhyb3duLCBPcHRpb25hbDxpbnQ+JiBzYXZlZFJlc3VsdEluZGV4KTsKKyAg
ICB2b2lkIGNoZWNrQ2FsbFJlc3VsdChQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBSZWZQdHI8SlNP
Tjo6VmFsdWU+IHJlc3VsdCwgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+
JiByZXN1bHRPYmplY3QsIE9wdGlvbmFsPGJvb2w+JiB3YXNUaHJvd24sIE9wdGlvbmFsPGludD4m
IHNhdmVkUmVzdWx0SW5kZXgpOwogICAgIHZvaWQgY2hlY2tBc3luY0NhbGxSZXN1bHQoUmVmUHRy
PEpTT046OlZhbHVlPiByZXN1bHQsIGNvbnN0IEFzeW5jQ2FsbENhbGxiYWNrJik7CiAKICAgICBT
dHJpbmcgbV9uYW1lOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9JbmplY3RlZFNjcmlwdE1hbmFnZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9JbmplY3RlZFNjcmlwdE1hbmFnZXIuY3BwCmluZGV4IDkwYWY3YThmM2EzMzA1NjE2YjQ5
NWU1YjNjYWRmMDUzMzExZTIzNTAuLmZjY2M4ZWYxOTg2ZDg4NmQ3NTYwMGY3MzYxMDBhN2ViMzk2
YjUwMDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0
ZWRTY3JpcHRNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L0luamVjdGVkU2NyaXB0TWFuYWdlci5jcHAKQEAgLTEwMiwxOSArMTAyLDE5IEBAIGludCBJbmpl
Y3RlZFNjcmlwdE1hbmFnZXI6OmluamVjdGVkU2NyaXB0SWRGb3IoSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCkKIAogSW5qZWN0ZWRTY3JpcHQgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOjppbmpl
Y3RlZFNjcmlwdEZvck9iamVjdElkKGNvbnN0IFN0cmluZyYgb2JqZWN0SWQpCiB7Ci0gICAgUmVm
UHRyPEpTT046OlZhbHVlPiBwYXJzZWRPYmplY3RJZDsKLSAgICBpZiAoIUpTT046OlZhbHVlOjpw
YXJzZUpTT04ob2JqZWN0SWQsIHBhcnNlZE9iamVjdElkKSkKKyAgICBhdXRvIHBhcnNlZE9iamVj
dElkID0gSlNPTjo6VmFsdWU6OnBhcnNlSlNPTihvYmplY3RJZCk7CisgICAgaWYgKCFwYXJzZWRP
YmplY3RJZCkKICAgICAgICAgcmV0dXJuIEluamVjdGVkU2NyaXB0KCk7CiAKLSAgICBSZWZQdHI8
SlNPTjo6T2JqZWN0PiByZXN1bHRPYmplY3Q7Ci0gICAgaWYgKCFwYXJzZWRPYmplY3RJZC0+YXNP
YmplY3QocmVzdWx0T2JqZWN0KSkKKyAgICBhdXRvIHJlc3VsdE9iamVjdCA9IHBhcnNlZE9iamVj
dElkLT5hc09iamVjdCgpOworICAgIGlmICghcmVzdWx0T2JqZWN0KQogICAgICAgICByZXR1cm4g
SW5qZWN0ZWRTY3JpcHQoKTsKIAotICAgIGxvbmcgaW5qZWN0ZWRTY3JpcHRJZCA9IDA7Ci0gICAg
aWYgKCFyZXN1bHRPYmplY3QtPmdldEludGVnZXIoImluamVjdGVkU2NyaXB0SWQiX3MsIGluamVj
dGVkU2NyaXB0SWQpKQorICAgIGF1dG8gaW5qZWN0ZWRTY3JpcHRJZCA9IHJlc3VsdE9iamVjdC0+
Z2V0SW50ZWdlcigiaW5qZWN0ZWRTY3JpcHRJZCJfcyk7CisgICAgaWYgKCFpbmplY3RlZFNjcmlw
dElkKQogICAgICAgICByZXR1cm4gSW5qZWN0ZWRTY3JpcHQoKTsKIAotICAgIHJldHVybiBtX2lk
VG9JbmplY3RlZFNjcmlwdC5nZXQoaW5qZWN0ZWRTY3JpcHRJZCk7CisgICAgcmV0dXJuIG1faWRU
b0luamVjdGVkU2NyaXB0LmdldCgqaW5qZWN0ZWRTY3JpcHRJZCk7CiB9CiAKIHZvaWQgSW5qZWN0
ZWRTY3JpcHRNYW5hZ2VyOjpyZWxlYXNlT2JqZWN0R3JvdXAoY29uc3QgU3RyaW5nJiBvYmplY3RH
cm91cCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5jcHAKaW5kZXggNjkzZThiMjVjNzM3NzgzNDBl
ODM5NDA0Njc4NmQ5MzE4YThhMDkyNC4uZGJhMTdkNGE2NWE3MGQzNTg1MWM4YzUxOWFkMWVjYmQ1
NzE3NTJkZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5jcHAKQEAgLTY4LDcgKzY4LDcgQEAg
dm9pZCBCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlOjpzZW5kRmFpbHVyZShjb25zdCBF
cnJvclN0cmluZyYgZXJyb3IpCiAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFBlbmRpbmdF
cnJvcnMoKTsKIH0KIAotdm9pZCBCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlOjpzZW5k
U3VjY2VzcyhSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcnRpYWxNZXNzYWdlKQordm9pZCBCYWNr
ZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlOjpzZW5kU3VjY2VzcyhSZWY8SlNPTjo6T2JqZWN0
PiYmIHBhcnRpYWxNZXNzYWdlKQogewogICAgIGlmIChtX2FscmVhZHlTZW50KQogICAgICAgICBy
ZXR1cm47CkBAIC0xMDcsNyArMTA3LDcgQEAgdm9pZCBCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0
Y2goY29uc3QgU3RyaW5nJiBtZXNzYWdlKQogCiAgICAgQVNTRVJUKCFtX3Byb3RvY29sRXJyb3Jz
LnNpemUoKSk7CiAKLSAgICBsb25nIHJlcXVlc3RJZCA9IDA7CisgICAgaW50IHJlcXVlc3RJZCA9
IDA7CiAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gbWVzc2FnZU9iamVjdDsKIAogICAgIHsKQEAg
LTExNSw0NiArMTE1LDUwIEBAIHZvaWQgQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGNvbnN0
IFN0cmluZyYgbWVzc2FnZSkKICAgICAgICAgLy8gdGhlIG91dGVyIHJlcXVlc3QncyBpZCBqdXN0
IGJlY2F1c2UgdGhlIGlubmVyIHJlcXVlc3QgaXMgYm9ndXMuCiAgICAgICAgIFNldEZvclNjb3Bl
PE9wdGlvbmFsPGxvbmc+PiBzY29wZWRSZXF1ZXN0SWQobV9jdXJyZW50UmVxdWVzdElkLCBXVEY6
Om51bGxvcHQpOwogCi0gICAgICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gcGFyc2VkTWVzc2FnZTsK
LSAgICAgICAgaWYgKCFKU09OOjpWYWx1ZTo6cGFyc2VKU09OKG1lc3NhZ2UsIHBhcnNlZE1lc3Nh
Z2UpKSB7CisgICAgICAgIGF1dG8gcGFyc2VkTWVzc2FnZSA9IEpTT046OlZhbHVlOjpwYXJzZUpT
T04obWVzc2FnZSk7CisgICAgICAgIGlmICghcGFyc2VkTWVzc2FnZSkgewogICAgICAgICAgICAg
cmVwb3J0UHJvdG9jb2xFcnJvcihQYXJzZUVycm9yLCAiTWVzc2FnZSBtdXN0IGJlIGluIEpTT04g
Zm9ybWF0Il9zKTsKICAgICAgICAgICAgIHNlbmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoIXBhcnNlZE1lc3NhZ2UtPmFzT2Jq
ZWN0KG1lc3NhZ2VPYmplY3QpKSB7CisgICAgICAgIG1lc3NhZ2VPYmplY3QgPSBwYXJzZWRNZXNz
YWdlLT5hc09iamVjdCgpOworICAgICAgICBpZiAoIW1lc3NhZ2VPYmplY3QpIHsKICAgICAgICAg
ICAgIHJlcG9ydFByb3RvY29sRXJyb3IoSW52YWxpZFJlcXVlc3QsICJNZXNzYWdlIG11c3QgYmUg
YSBKU09OaWZpZWQgb2JqZWN0Il9zKTsKICAgICAgICAgICAgIHNlbmRQZW5kaW5nRXJyb3JzKCk7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBSZWZQdHI8SlNPTjo6
VmFsdWU+IHJlcXVlc3RJZFZhbHVlOwotICAgICAgICBpZiAoIW1lc3NhZ2VPYmplY3QtPmdldFZh
bHVlKCJpZCJfcywgcmVxdWVzdElkVmFsdWUpKSB7CisgICAgICAgIGF1dG8gcmVxdWVzdElkVmFs
dWUgPSBtZXNzYWdlT2JqZWN0LT5nZXRWYWx1ZSgiaWQiX3MpOworICAgICAgICBpZiAoIXJlcXVl
c3RJZFZhbHVlKSB7CiAgICAgICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKEludmFsaWRSZXF1
ZXN0LCAiJ2lkJyBwcm9wZXJ0eSB3YXMgbm90IGZvdW5kIl9zKTsKICAgICAgICAgICAgIHNlbmRQ
ZW5kaW5nRXJyb3JzKCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAg
ICBpZiAoIXJlcXVlc3RJZFZhbHVlLT5hc0ludGVnZXIocmVxdWVzdElkKSkgeworICAgICAgICBh
dXRvIHJlcXVlc3RJZEludCA9IHJlcXVlc3RJZFZhbHVlLT5hc0ludGVnZXIoKTsKKyAgICAgICAg
aWYgKCFyZXF1ZXN0SWRJbnQpIHsKICAgICAgICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoSW52
YWxpZFJlcXVlc3QsICJUaGUgdHlwZSBvZiAnaWQnIHByb3BlcnR5IG11c3QgYmUgaW50ZWdlciJf
cyk7CiAgICAgICAgICAgICBzZW5kUGVuZGluZ0Vycm9ycygpOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CisKKyAgICAgICAgcmVxdWVzdElkID0gKnJlcXVlc3RJZEludDsKICAgICB9
CiAKICAgICB7CiAgICAgICAgIC8vIFdlIGNvdWxkIGJlIGNhbGxlZCByZS1lbnRyYW50bHkgZnJv
bSBhIG5lc3RlZCBydW4gbG9vcCwgc28gcmVzdG9yZSB0aGUgcHJldmlvdXMgaWQuCiAgICAgICAg
IFNldEZvclNjb3BlPE9wdGlvbmFsPGxvbmc+PiBzY29wZWRSZXF1ZXN0SWQobV9jdXJyZW50UmVx
dWVzdElkLCByZXF1ZXN0SWQpOwogCi0gICAgICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gbWV0aG9k
VmFsdWU7Ci0gICAgICAgIGlmICghbWVzc2FnZU9iamVjdC0+Z2V0VmFsdWUoIm1ldGhvZCJfcywg
bWV0aG9kVmFsdWUpKSB7CisgICAgICAgIGF1dG8gbWV0aG9kVmFsdWUgPSBtZXNzYWdlT2JqZWN0
LT5nZXRWYWx1ZSgibWV0aG9kIl9zKTsKKyAgICAgICAgaWYgKCFtZXRob2RWYWx1ZSkgewogICAg
ICAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihJbnZhbGlkUmVxdWVzdCwgIidtZXRob2QnIHBy
b3BlcnR5IHdhc24ndCBmb3VuZCJfcyk7CiAgICAgICAgICAgICBzZW5kUGVuZGluZ0Vycm9ycygp
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgU3RyaW5nIG1ldGhv
ZFN0cmluZzsKLSAgICAgICAgaWYgKCFtZXRob2RWYWx1ZS0+YXNTdHJpbmcobWV0aG9kU3RyaW5n
KSkgeworICAgICAgICBhdXRvIG1ldGhvZFN0cmluZyA9IG1ldGhvZFZhbHVlLT5hc1N0cmluZygp
OworICAgICAgICBpZiAoIW1ldGhvZFN0cmluZykgewogICAgICAgICAgICAgcmVwb3J0UHJvdG9j
b2xFcnJvcihJbnZhbGlkUmVxdWVzdCwgIlRoZSB0eXBlIG9mICdtZXRob2QnIHByb3BlcnR5IG11
c3QgYmUgc3RyaW5nIl9zKTsKICAgICAgICAgICAgIHNlbmRQZW5kaW5nRXJyb3JzKCk7CiAgICAg
ICAgICAgICByZXR1cm47CkBAIC0xODQsMTIgKzE4OCwxMiBAQCB2b2lkIEJhY2tlbmREaXNwYXRj
aGVyOjpkaXNwYXRjaChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCiB9CiAKIC8vIEZJWE1FOiByZW1v
dmUgdGhpcyBmdW5jdGlvbiB3aGVuIGxlZ2FjeSBJbnNwZWN0b3JPYmplY3Qgc3ltYm9scyBhcmUg
bm8gbG9uZ2VyIG5lZWRlZCA8aHR0cDovL3dlYmtpdC5vcmcvYi8xNzk4NDc+Lgotdm9pZCBCYWNr
ZW5kRGlzcGF0Y2hlcjo6c2VuZFJlc3BvbnNlKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6
T2JqZWN0PiYmIHJlc3VsdCkKK3ZvaWQgQmFja2VuZERpc3BhdGNoZXI6OnNlbmRSZXNwb25zZShs
b25nIHJlcXVlc3RJZCwgUmVmPEpTT046Ok9iamVjdD4mJiByZXN1bHQpCiB7CiAgICAgc2VuZFJl
c3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7CiB9CiAKLXZvaWQgQmFj
a2VuZERpc3BhdGNoZXI6OnNlbmRSZXNwb25zZShsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046
Ok9iamVjdD4mJiByZXN1bHQsIGJvb2wpCit2b2lkIEJhY2tlbmREaXNwYXRjaGVyOjpzZW5kUmVz
cG9uc2UobG9uZyByZXF1ZXN0SWQsIFJlZjxKU09OOjpPYmplY3Q+JiYgcmVzdWx0LCBib29sKQog
ewogICAgIEFTU0VSVCghbV9wcm90b2NvbEVycm9ycy5zaXplKCkpOwogCkBAIC0yNzAsNzQgKzI3
NCw2NCBAQCB2b2lkIEJhY2tlbmREaXNwYXRjaGVyOjpyZXBvcnRQcm90b2NvbEVycm9yKE9wdGlv
bmFsPGxvbmc+IHJlbGF0ZWRSZXF1ZXN0SWQsIENvbQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PgotVCBCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0UHJvcGVydHlWYWx1ZShKU09OOjpPYmplY3QqIG9i
amVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiBvdXRfb3B0aW9uYWxWYWx1ZUZvdW5kLCBU
IGRlZmF1bHRWYWx1ZSwgc3RkOjpmdW5jdGlvbjxib29sKEpTT046OlZhbHVlJiwgVCYpPiBhc01l
dGhvZCwgY29uc3QgY2hhciogdHlwZU5hbWUpCitUIEJhY2tlbmREaXNwYXRjaGVyOjpnZXRQcm9w
ZXJ0eVZhbHVlKEpTT046Ok9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wg
cmVxdWlyZWQsIHN0ZDo6ZnVuY3Rpb248VChKU09OOjpWYWx1ZSYpPiBjb252ZXJ0ZXIsIGNvbnN0
IGNoYXIqIHR5cGVOYW1lKQogewotICAgIFQgcmVzdWx0KGRlZmF1bHRWYWx1ZSk7Ci0gICAgLy8g
b3V0X29wdGlvbmFsVmFsdWVGb3VuZCBzaWduYWxzIHRvIHRoZSBjYWxsZXIgd2hldGhlciBhbiBv
cHRpb25hbCBwcm9wZXJ0eSB3YXMgZm91bmQuCi0gICAgLy8gaWYgb3V0X29wdGlvbmFsVmFsdWVG
b3VuZCA9PSBudWxscHRyLCB0aGVuIHRoaXMgaXMgYSByZXF1aXJlZCBwcm9wZXJ0eS4KLSAgICBp
ZiAob3V0X29wdGlvbmFsVmFsdWVGb3VuZCkKLSAgICAgICAgKm91dF9vcHRpb25hbFZhbHVlRm91
bmQgPSBmYWxzZTsKKyAgICBUIHJlc3VsdDsKIAogICAgIGlmICghb2JqZWN0KSB7Ci0gICAgICAg
IGlmICghb3V0X29wdGlvbmFsVmFsdWVGb3VuZCkKKyAgICAgICAgaWYgKHJlcXVpcmVkKQogICAg
ICAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBh
cmFtcywgbWFrZVN0cmluZygiJ3BhcmFtcycgb2JqZWN0IG11c3QgY29udGFpbiByZXF1aXJlZCBw
YXJhbWV0ZXIgJyIsIG5hbWUsICInIHdpdGggdHlwZSAnIiwgdHlwZU5hbWUsICInLiIpKTsKICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKICAgICBhdXRvIGZpbmRSZXN1bHQgPSBvYmpl
Y3QtPmZpbmQobmFtZSk7CiAgICAgaWYgKGZpbmRSZXN1bHQgPT0gb2JqZWN0LT5lbmQoKSkgewot
ICAgICAgICBpZiAoIW91dF9vcHRpb25hbFZhbHVlRm91bmQpCisgICAgICAgIGlmIChyZXF1aXJl
ZCkKICAgICAgICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Oklu
dmFsaWRQYXJhbXMsIG1ha2VTdHJpbmcoIlBhcmFtZXRlciAnIiwgbmFtZSwgIicgd2l0aCB0eXBl
ICciLCB0eXBlTmFtZSwgIicgd2FzIG5vdCBmb3VuZC4iKSk7CiAgICAgICAgIHJldHVybiByZXN1
bHQ7CiAgICAgfQogCi0gICAgaWYgKCFhc01ldGhvZCgqZmluZFJlc3VsdC0+dmFsdWUsIHJlc3Vs
dCkpIHsKLSAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6SW52
YWxpZFBhcmFtcywgbWFrZVN0cmluZygiUGFyYW1ldGVyICciLCBuYW1lLCAiJyBoYXMgd3Jvbmcg
dHlwZS4gSXQgbXVzdCBiZSAnIiwgdHlwZU5hbWUsICInLiIpKTsKLSAgICAgICAgcmV0dXJuIHJl
c3VsdDsKLSAgICB9CisgICAgcmVzdWx0ID0gY29udmVydGVyKGZpbmRSZXN1bHQtPnZhbHVlKTsK
IAotICAgIGlmIChvdXRfb3B0aW9uYWxWYWx1ZUZvdW5kKQotICAgICAgICAqb3V0X29wdGlvbmFs
VmFsdWVGb3VuZCA9IHRydWU7CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJlcG9ydFByb3Rv
Y29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OkludmFsaWRQYXJhbXMsIG1ha2VTdHJpbmcoIlBh
cmFtZXRlciAnIiwgbmFtZSwgIicgaGFzIHdyb25nIHR5cGUuIEl0IG11c3QgYmUgJyIsIHR5cGVO
YW1lLCAiJy4iKSk7CiAKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgYm9vbCBjYXN0
VG9JbnRlZ2VyKEpTT046OlZhbHVlJiB2YWx1ZSwgaW50JiByZXN1bHQpIHsgcmV0dXJuIHZhbHVl
LmFzSW50ZWdlcihyZXN1bHQpOyB9Ci1zdGF0aWMgYm9vbCBjYXN0VG9OdW1iZXIoSlNPTjo6VmFs
dWUmIHZhbHVlLCBkb3VibGUmIHJlc3VsdCkgeyByZXR1cm4gdmFsdWUuYXNEb3VibGUocmVzdWx0
KTsgfQotCi1pbnQgQmFja2VuZERpc3BhdGNoZXI6OmdldEludGVnZXIoSlNPTjo6T2JqZWN0KiBv
YmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCkKK09wdGlvbmFsPGJv
b2w+IEJhY2tlbmREaXNwYXRjaGVyOjpnZXRCb29sZWFuKEpTT046Ok9iamVjdCogb2JqZWN0LCBj
b25zdCBTdHJpbmcmIG5hbWUsIGJvb2wgcmVxdWlyZWQpCiB7Ci0gICAgcmV0dXJuIGdldFByb3Bl
cnR5VmFsdWU8aW50PihvYmplY3QsIG5hbWUsIHZhbHVlRm91bmQsIDAsICZjYXN0VG9JbnRlZ2Vy
LCAiSW50ZWdlciIpOworICAgIHJldHVybiBnZXRQcm9wZXJ0eVZhbHVlPE9wdGlvbmFsPGJvb2w+
PihvYmplY3QsIG5hbWUsIHJlcXVpcmVkLCAmSlNPTjo6VmFsdWU6OmFzQm9vbGVhbiwgIkJvb2xl
YW4iKTsKIH0KIAotZG91YmxlIEJhY2tlbmREaXNwYXRjaGVyOjpnZXREb3VibGUoSlNPTjo6T2Jq
ZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCkKK09wdGlv
bmFsPGludD4gQmFja2VuZERpc3BhdGNoZXI6OmdldEludGVnZXIoSlNPTjo6T2JqZWN0KiBvYmpl
Y3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCByZXF1aXJlZCkKIHsKLSAgICByZXR1cm4gZ2V0
UHJvcGVydHlWYWx1ZTxkb3VibGU+KG9iamVjdCwgbmFtZSwgdmFsdWVGb3VuZCwgMCwgJmNhc3RU
b051bWJlciwgIk51bWJlciIpOworICAgIHJldHVybiBnZXRQcm9wZXJ0eVZhbHVlPE9wdGlvbmFs
PGludD4+KG9iamVjdCwgbmFtZSwgcmVxdWlyZWQsICZKU09OOjpWYWx1ZTo6YXNJbnRlZ2VyLCAi
SW50ZWdlciIpOwogfQogCi1TdHJpbmcgQmFja2VuZERpc3BhdGNoZXI6OmdldFN0cmluZyhKU09O
OjpPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kKQor
T3B0aW9uYWw8ZG91YmxlPiBCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0RG91YmxlKEpTT046Ok9iamVj
dCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wgcmVxdWlyZWQpCiB7Ci0gICAgcmV0
dXJuIGdldFByb3BlcnR5VmFsdWU8U3RyaW5nPihvYmplY3QsIG5hbWUsIHZhbHVlRm91bmQsICIi
LCAmSlNPTjo6VmFsdWU6OmFzU3RyaW5nLCAiU3RyaW5nIik7CisgICAgcmV0dXJuIGdldFByb3Bl
cnR5VmFsdWU8T3B0aW9uYWw8ZG91YmxlPj4ob2JqZWN0LCBuYW1lLCByZXF1aXJlZCwgJkpTT046
OlZhbHVlOjphc0RvdWJsZSwgIk51bWJlciIpOwogfQogCi1ib29sIEJhY2tlbmREaXNwYXRjaGVy
OjpnZXRCb29sZWFuKEpTT046Ok9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJv
b2wqIHZhbHVlRm91bmQpCitTdHJpbmcgQmFja2VuZERpc3BhdGNoZXI6OmdldFN0cmluZyhKU09O
OjpPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sIHJlcXVpcmVkKQogewot
ICAgIHJldHVybiBnZXRQcm9wZXJ0eVZhbHVlPGJvb2w+KG9iamVjdCwgbmFtZSwgdmFsdWVGb3Vu
ZCwgZmFsc2UsICZKU09OOjpWYWx1ZTo6YXNCb29sZWFuLCAiQm9vbGVhbiIpOworICAgIHJldHVy
biBnZXRQcm9wZXJ0eVZhbHVlPFN0cmluZz4ob2JqZWN0LCBuYW1lLCByZXF1aXJlZCwgJkpTT046
OlZhbHVlOjphc1N0cmluZywgIlN0cmluZyIpOwogfQogCi1SZWZQdHI8SlNPTjo6T2JqZWN0PiBC
YWNrZW5kRGlzcGF0Y2hlcjo6Z2V0T2JqZWN0KEpTT046Ok9iamVjdCogb2JqZWN0LCBjb25zdCBT
dHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQpCitSZWZQdHI8SlNPTjo6VmFsdWU+IEJhY2tl
bmREaXNwYXRjaGVyOjpnZXRWYWx1ZShKU09OOjpPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5n
JiBuYW1lLCBib29sIHJlcXVpcmVkKQogewotICAgIHJldHVybiBnZXRQcm9wZXJ0eVZhbHVlPFJl
ZlB0cjxKU09OOjpPYmplY3Q+PihvYmplY3QsIG5hbWUsIHZhbHVlRm91bmQsIG51bGxwdHIsICZK
U09OOjpWYWx1ZTo6YXNPYmplY3QsICJPYmplY3QiKTsKKyAgICByZXR1cm4gZ2V0UHJvcGVydHlW
YWx1ZTxSZWZQdHI8SlNPTjo6VmFsdWU+PihvYmplY3QsIG5hbWUsIHJlcXVpcmVkLCAmSlNPTjo6
VmFsdWU6OmFzVmFsdWUsICJWYWx1ZSIpOwogfQogCi1SZWZQdHI8SlNPTjo6QXJyYXk+IEJhY2tl
bmREaXNwYXRjaGVyOjpnZXRBcnJheShKU09OOjpPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5n
JiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kKQorUmVmUHRyPEpTT046Ok9iamVjdD4gQmFja2VuZERp
c3BhdGNoZXI6OmdldE9iamVjdChKU09OOjpPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBu
YW1lLCBib29sIHJlcXVpcmVkKQogewotICAgIHJldHVybiBnZXRQcm9wZXJ0eVZhbHVlPFJlZlB0
cjxKU09OOjpBcnJheT4+KG9iamVjdCwgbmFtZSwgdmFsdWVGb3VuZCwgbnVsbHB0ciwgJkpTT046
OlZhbHVlOjphc0FycmF5LCAiQXJyYXkiKTsKKyAgICByZXR1cm4gZ2V0UHJvcGVydHlWYWx1ZTxS
ZWZQdHI8SlNPTjo6T2JqZWN0Pj4ob2JqZWN0LCBuYW1lLCByZXF1aXJlZCwgJkpTT046OlZhbHVl
Ojphc09iamVjdCwgIk9iamVjdCIpOwogfQogCi1SZWZQdHI8SlNPTjo6VmFsdWU+IEJhY2tlbmRE
aXNwYXRjaGVyOjpnZXRWYWx1ZShKU09OOjpPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBu
YW1lLCBib29sKiB2YWx1ZUZvdW5kKQorUmVmUHRyPEpTT046OkFycmF5PiBCYWNrZW5kRGlzcGF0
Y2hlcjo6Z2V0QXJyYXkoSlNPTjo6T2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwg
Ym9vbCByZXF1aXJlZCkKIHsKLSAgICByZXR1cm4gZ2V0UHJvcGVydHlWYWx1ZTxSZWZQdHI8SlNP
Tjo6VmFsdWU+PihvYmplY3QsIG5hbWUsIHZhbHVlRm91bmQsIG51bGxwdHIsICZKU09OOjpWYWx1
ZTo6YXNWYWx1ZSwgIlZhbHVlIik7CisgICAgcmV0dXJuIGdldFByb3BlcnR5VmFsdWU8UmVmUHRy
PEpTT046OkFycmF5Pj4ob2JqZWN0LCBuYW1lLCByZXF1aXJlZCwgJkpTT046OlZhbHVlOjphc0Fy
cmF5LCAiQXJyYXkiKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyLmgKaW5kZXggOTVkOWQ4MTE4OGU3MzVlOGYxYjcwY2MwZGVlZTI2ODJjYjY3MTRm
MC4uMDJjOTZkNzI2MzhjMjIyZjAzMGQxNDkxY2M5YjkyNjJiMDhiZWNiYSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
ci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXIuaApAQCAtMjksOCArMjksMTAgQEAKICNpbmNsdWRlICJJbnNwZWN0b3JGcm9u
dGVuZFJvdXRlci5oIgogI2luY2x1ZGUgIkluc3BlY3RvclByb3RvY29sVHlwZXMuaCIKICNpbmNs
dWRlIDxmdW5jdGlvbmFsPgorI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbi5oPgogI2luY2x1ZGUgPHd0
Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3Rm
L1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKQEAgLTU5LDcgKzYxLDcgQEAgcHVibGljOgogICAgICAgICBib29sIGlzQWN0
aXZlKCkgY29uc3Q7CiAgICAgICAgIHZvaWQgZGlzYWJsZSgpIHsgbV9hbHJlYWR5U2VudCA9IHRy
dWU7IH0KIAotICAgICAgICB2b2lkIHNlbmRTdWNjZXNzKFJlZlB0cjxKU09OOjpPYmplY3Q+JiYp
OworICAgICAgICB2b2lkIHNlbmRTdWNjZXNzKFJlZjxKU09OOjpPYmplY3Q+JiYpOwogICAgICAg
ICB2b2lkIHNlbmRGYWlsdXJlKGNvbnN0IEVycm9yU3RyaW5nJik7CiAKICAgICBwcml2YXRlOgpA
QCAtODcsMjggKzg5LDI3IEBAIHB1YmxpYzoKICAgICAvLyBOb3RlIHRoYXQgJ3VudXNlZCcgaXMg
YSB3b3JrYXJvdW5kIHNvIHRoZSBjb21waWxlciBjYW4gcGljayB0aGUgcmlnaHQgc2VuZFJlc3Bv
bnNlIGJhc2VkIG9uIGFyaXR5LgogICAgIC8vIFdoZW4gPGh0dHA6Ly93ZWJraXQub3JnL2IvMTc5
ODQ3PiBpcyBmaXhlZCBvciB0aGlzIGNsYXNzIGlzIHJlbmFtZWQgZm9yIHRoZSBKU09OOjpPYmpl
Y3QgY2FzZSwKICAgICAvLyB0aGVuIHRoaXMgYWx0ZXJuYXRlIG1ldGhvZCB3aXRoIGEgZHVtbXkg
cGFyYW1ldGVyIGNhbiBiZSByZW1vdmVkIGluIGZhdm9yIG9mIHRoZSBvbmUgd2l0aG91dCBpdC4K
LSAgICB2b2lkIHNlbmRSZXNwb25zZShsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVj
dD4mJiByZXN1bHQsIGJvb2wgdW51c2VkKTsKLSAgICB2b2lkIHNlbmRSZXNwb25zZShsb25nIHJl
cXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiByZXN1bHQpOworICAgIHZvaWQgc2VuZFJl
c3BvbnNlKGxvbmcgcmVxdWVzdElkLCBSZWY8SlNPTjo6T2JqZWN0PiYmIHJlc3VsdCwgYm9vbCB1
bnVzZWQpOworICAgIHZvaWQgc2VuZFJlc3BvbnNlKGxvbmcgcmVxdWVzdElkLCBSZWY8SlNPTjo6
T2JqZWN0PiYmIHJlc3VsdCk7CiAgICAgdm9pZCBzZW5kUGVuZGluZ0Vycm9ycygpOwogCiAgICAg
dm9pZCByZXBvcnRQcm90b2NvbEVycm9yKENvbW1vbkVycm9yQ29kZSwgY29uc3QgU3RyaW5nJiBl
cnJvck1lc3NhZ2UpOwogICAgIHZvaWQgcmVwb3J0UHJvdG9jb2xFcnJvcihPcHRpb25hbDxsb25n
PiByZWxhdGVkUmVxdWVzdElkLCBDb21tb25FcnJvckNvZGUsIGNvbnN0IFN0cmluZyYgZXJyb3JN
ZXNzYWdlKTsKIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgV1RGX0lOVEVSTkFMCi0g
ICAgVCBnZXRQcm9wZXJ0eVZhbHVlKEpTT046Ok9iamVjdCosIGNvbnN0IFN0cmluZyYgbmFtZSwg
Ym9vbCogb3V0X29wdGlvbmFsVmFsdWVGb3VuZCwgVCBkZWZhdWx0VmFsdWUsIHN0ZDo6ZnVuY3Rp
b248Ym9vbChKU09OOjpWYWx1ZSYsIFQmKT4sIGNvbnN0IGNoYXIqIHR5cGVOYW1lKTsKLQotICAg
IGludCBnZXRJbnRlZ2VyKEpTT046Ok9iamVjdCosIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCog
dmFsdWVGb3VuZCk7Ci0gICAgZG91YmxlIGdldERvdWJsZShKU09OOjpPYmplY3QqLCBjb25zdCBT
dHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQpOwotICAgIFN0cmluZyBnZXRTdHJpbmcoSlNP
Tjo6T2JqZWN0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kKTsKLSAgICBi
b29sIGdldEJvb2xlYW4oSlNPTjo6T2JqZWN0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2
YWx1ZUZvdW5kKTsKLSAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IGdldFZhbHVlKEpTT046Ok9iamVj
dCosIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCk7Ci0gICAgUmVmUHRyPEpT
T046Ok9iamVjdD4gZ2V0T2JqZWN0KEpTT046Ok9iamVjdCosIGNvbnN0IFN0cmluZyYgbmFtZSwg
Ym9vbCogdmFsdWVGb3VuZCk7Ci0gICAgUmVmUHRyPEpTT046OkFycmF5PiBnZXRBcnJheShKU09O
OjpPYmplY3QqLCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQpOworICAgIE9w
dGlvbmFsPGJvb2w+IGdldEJvb2xlYW4oSlNPTjo6T2JqZWN0KiwgY29uc3QgU3RyaW5nJiBuYW1l
LCBib29sIHJlcXVpcmVkKTsKKyAgICBPcHRpb25hbDxpbnQ+IGdldEludGVnZXIoSlNPTjo6T2Jq
ZWN0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sIHJlcXVpcmVkKTsKKyAgICBPcHRpb25hbDxk
b3VibGU+IGdldERvdWJsZShKU09OOjpPYmplY3QqLCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wg
cmVxdWlyZWQpOworICAgIFN0cmluZyBnZXRTdHJpbmcoSlNPTjo6T2JqZWN0KiwgY29uc3QgU3Ry
aW5nJiBuYW1lLCBib29sIHJlcXVpcmVkKTsKKyAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IGdldFZh
bHVlKEpTT046Ok9iamVjdCosIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCByZXF1aXJlZCk7Cisg
ICAgUmVmUHRyPEpTT046Ok9iamVjdD4gZ2V0T2JqZWN0KEpTT046Ok9iamVjdCosIGNvbnN0IFN0
cmluZyYgbmFtZSwgYm9vbCByZXF1aXJlZCk7CisgICAgUmVmUHRyPEpTT046OkFycmF5PiBnZXRB
cnJheShKU09OOjpPYmplY3QqLCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wgcmVxdWlyZWQpOwog
CiBwcml2YXRlOgogICAgIEJhY2tlbmREaXNwYXRjaGVyKFJlZjxGcm9udGVuZFJvdXRlcj4mJik7
CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIFQgZ2V0UHJvcGVydHlWYWx1ZShKU09O
OjpPYmplY3QqLCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wgcmVxdWlyZWQsIHN0ZDo6ZnVuY3Rp
b248VChKU09OOjpWYWx1ZSYpPiBjb252ZXJ0ZXIsIGNvbnN0IGNoYXIqIHR5cGVOYW1lKTsKKwog
ICAgIFJlZjxGcm9udGVuZFJvdXRlcj4gbV9mcm9udGVuZFJvdXRlcjsKICAgICBIYXNoTWFwPFN0
cmluZywgU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIqPiBtX2Rpc3BhdGNoZXJzOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvclByb3Rv
Y29sVHlwZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUHJv
dG9jb2xUeXBlcy5oCmluZGV4IGQ3MDEwYTVjNjJlODYzM2E0ZGQwMWIyYzAwNjA1YmFhY2M5Yzhj
NzkuLjU4NzdlMGQ3NDEwODJmNzExYTVmZmVkNDM1Y2VmYzBmMjEzMTMzNWUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUHJvdG9jb2xU
eXBlcy5oCkBAIC0yNywxMiArMjcsMTkgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSA8d3Rm
L0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4KICNpbmNsdWRlIDx3dGYv
SlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKIAogbmFtZXNwYWNlIFByb3RvY29sIHsKIAordXNpbmcgRXJyb3JTdHJp
bmcgPSBTdHJpbmc7CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgordXNpbmcgRXJyb3JTdHJpbmdP
ciA9IEV4cGVjdGVkPFQsIEVycm9yU3RyaW5nPjsKKwogdGVtcGxhdGU8dHlwZW5hbWU+IHN0cnVj
dCBCaW5kaW5nVHJhaXRzOwogCiB0ZW1wbGF0ZTxKU09OOjpWYWx1ZTo6VHlwZSB0eXBlPiBzdHJ1
Y3QgUHJpbWl0aXZlQmluZGluZ1RyYWl0cyB7CkBAIC00NCwyOSArNTEsMjMgQEAgdGVtcGxhdGU8
SlNPTjo6VmFsdWU6OlR5cGUgdHlwZT4gc3RydWN0IFByaW1pdGl2ZUJpbmRpbmdUcmFpdHMgewog
fTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEJpbmRpbmdUcmFpdHM8SlNPTjo6QXJy
YXlPZjxUPj4gewotICAgIHN0YXRpYyBSZWZQdHI8SlNPTjo6QXJyYXlPZjxUPj4gcnVudGltZUNh
c3QoUmVmUHRyPEpTT046OlZhbHVlPiYmIHZhbHVlKQorICAgIHN0YXRpYyBSZWY8SlNPTjo6QXJy
YXlPZjxUPj4gcnVudGltZUNhc3QoUmVmPEpTT046OlZhbHVlPiYmIHZhbHVlKQogICAgIHsKLSAg
ICAgICAgQVNTRVJUX0FSRyh2YWx1ZSwgdmFsdWUpOwotICAgICAgICBSZWZQdHI8SlNPTjo6QXJy
YXk+IGFycmF5OwotICAgICAgICBib29sIGNhc3RTdWNjZWVkZWQgPSB2YWx1ZS0+YXNBcnJheShh
cnJheSk7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQoY2FzdFN1Y2NlZWRlZCwgY2FzdFN1Y2NlZWRl
ZCk7Ci0gICAgICAgIGFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKGFycmF5LmdldCgpKTsKKyAg
ICAgICAgYXV0byBhcnJheSA9IHZhbHVlLT5hc0FycmF5KCk7CisgICAgICAgIEJpbmRpbmdUcmFp
dHM8SlNPTjo6QXJyYXlPZjxUPj46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKGFycmF5Lmdl
dCgpKTsKICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKEpTT046OkFycmF5T2Y8VD4pID09
IHNpemVvZihKU09OOjpBcnJheSksIHR5cGVfY2FzdF9wcm9ibGVtKTsKLSAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PEpTT046OkFycmF5T2Y8VD4qPihzdGF0aWNfY2FzdDxKU09OOjpBcnJheUJh
c2UqPihhcnJheS5nZXQoKSkpOworICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0
PEpTT046OkFycmF5T2Y8VD4+KHN0YXRpY19yZWZlcmVuY2VfY2FzdDxKU09OOjpBcnJheUJhc2U+
KGFycmF5LnJlbGVhc2VOb25OdWxsKCkpKTsKICAgICB9CiAKICAgICBzdGF0aWMgdm9pZCBhc3Nl
cnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShKU09OOjpWYWx1ZSogdmFsdWUpCiAgICAgeworICAgICAg
ICBBU1NFUlRfVU5VU0VEKHZhbHVlLCB2YWx1ZSk7CiAjaWYgQVNTRVJUX0VOQUJMRUQKLSAgICAg
ICAgQVNTRVJUX0FSRyh2YWx1ZSwgdmFsdWUpOwotICAgICAgICBSZWZQdHI8SlNPTjo6QXJyYXk+
IGFycmF5OwotICAgICAgICBib29sIGNhc3RTdWNjZWVkZWQgPSB2YWx1ZS0+YXNBcnJheShhcnJh
eSk7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQoY2FzdFN1Y2NlZWRlZCwgY2FzdFN1Y2NlZWRlZCk7
CisgICAgICAgIGF1dG8gYXJyYXkgPSB2YWx1ZS0+YXNBcnJheSgpOworICAgICAgICBBU1NFUlQo
YXJyYXkpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXJyYXktPmxlbmd0aCgp
OyBpKyspCi0gICAgICAgICAgICBCaW5kaW5nVHJhaXRzPFQ+Ojphc3NlcnRWYWx1ZUhhc0V4cGVj
dGVkVHlwZShhcnJheS0+Z2V0KGkpLmdldCgpKTsKLSNlbHNlCi0gICAgICAgIFVOVVNFRF9QQVJB
TSh2YWx1ZSk7Ci0jZW5kaWYgLy8gQVNTRVJUX0VOQUJMRUQKKyAgICAgICAgICAgIEJpbmRpbmdU
cmFpdHM8VD46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKGFycmF5LT5nZXQoaSkucHRyKCkp
OworI2VuZGlmCiAgICAgfQogfTsKIApAQCAtODUsNiArODYsNCBAQCB0ZW1wbGF0ZTw+IHN0cnVj
dCBCaW5kaW5nVHJhaXRzPGludD4gOiBQcmltaXRpdmVCaW5kaW5nVHJhaXRzPEpTT046OlZhbHVl
OjpUeXBlOgogCiB9CiAKLXVzaW5nIFByb3RvY29sOjpCaW5kaW5nVHJhaXRzOwotCiB9IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3IvSlNHbG9iYWxPYmplY3RDb25zb2xlQ2xpZW50LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3IvSlNHbG9iYWxPYmplY3RDb25zb2xlQ2xpZW50LmNwcAppbmRleCA0NmQw
YjY5NDMyOGVlMDQxNzY2NTAzZmU1NmY5ZDZjMjI5OTc1N2M2Li5iYzYzNjlhMGMzOWQ5YmI2NDA5
NWY1ZDg3MDQ0ZDYwNzUzY2Q0ODdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL0pTR2xvYmFsT2JqZWN0Q29uc29sZUNsaWVudC5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0dsb2JhbE9iamVjdENvbnNvbGVDbGllbnQuY3BwCkBA
IC0xMzYsMjggKzEzNiwyMiBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0Q29uc29sZUNsaWVudDo6cHJv
ZmlsZUVuZChKU0M6OkpTR2xvYmFsT2JqZWN0KiwgY29uc3QgU3RyaW5nJgogCiB2b2lkIEpTR2xv
YmFsT2JqZWN0Q29uc29sZUNsaWVudDo6c3RhcnRDb25zb2xlUHJvZmlsZSgpCiB7Ci0gICAgRXJy
b3JTdHJpbmcgaWdub3JlZDsKLQogICAgIGlmIChtX2RlYnVnZ2VyQWdlbnQpIHsKICAgICAgICAg
bV9wcm9maWxlUmVzdG9yZUJyZWFrcG9pbnRBY3RpdmVWYWx1ZSA9IG1fZGVidWdnZXJBZ2VudC0+
YnJlYWtwb2ludHNBY3RpdmUoKTsKLSAgICAgICAgbV9kZWJ1Z2dlckFnZW50LT5zZXRCcmVha3Bv
aW50c0FjdGl2ZShpZ25vcmVkLCBmYWxzZSk7CisgICAgICAgIG1fZGVidWdnZXJBZ2VudC0+c2V0
QnJlYWtwb2ludHNBY3RpdmUoZmFsc2UpOwogICAgIH0KIAotICAgIGlmIChtX3NjcmlwdFByb2Zp
bGVyQWdlbnQpIHsKLSAgICAgICAgY29uc3QgYm9vbCBpbmNsdWRlU2FtcGxlcyA9IHRydWU7Ci0g
ICAgICAgIG1fc2NyaXB0UHJvZmlsZXJBZ2VudC0+c3RhcnRUcmFja2luZyhpZ25vcmVkLCAmaW5j
bHVkZVNhbXBsZXMpOwotICAgIH0KKyAgICBpZiAobV9zY3JpcHRQcm9maWxlckFnZW50KQorICAg
ICAgICBtX3NjcmlwdFByb2ZpbGVyQWdlbnQtPnN0YXJ0VHJhY2tpbmcodHJ1ZSk7CiB9CiAKIHZv
aWQgSlNHbG9iYWxPYmplY3RDb25zb2xlQ2xpZW50OjpzdG9wQ29uc29sZVByb2ZpbGUoKQogewot
ICAgIEVycm9yU3RyaW5nIGlnbm9yZWQ7Ci0KICAgICBpZiAobV9zY3JpcHRQcm9maWxlckFnZW50
KQotICAgICAgICBtX3NjcmlwdFByb2ZpbGVyQWdlbnQtPnN0b3BUcmFja2luZyhpZ25vcmVkKTsK
KyAgICAgICAgbV9zY3JpcHRQcm9maWxlckFnZW50LT5zdG9wVHJhY2tpbmcoKTsKIAogICAgIGlm
IChtX2RlYnVnZ2VyQWdlbnQpCi0gICAgICAgIG1fZGVidWdnZXJBZ2VudC0+c2V0QnJlYWtwb2lu
dHNBY3RpdmUoaWdub3JlZCwgbV9wcm9maWxlUmVzdG9yZUJyZWFrcG9pbnRBY3RpdmVWYWx1ZSk7
CisgICAgICAgIG1fZGVidWdnZXJBZ2VudC0+c2V0QnJlYWtwb2ludHNBY3RpdmUobV9wcm9maWxl
UmVzdG9yZUJyZWFrcG9pbnRBY3RpdmVWYWx1ZSk7CiB9CiAKIHZvaWQgSlNHbG9iYWxPYmplY3RD
b25zb2xlQ2xpZW50Ojp0YWtlSGVhcFNuYXBzaG90KEpTQzo6SlNHbG9iYWxPYmplY3QqLCBjb25z
dCBTdHJpbmcmIHRpdGxlKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9KU0dsb2JhbE9iamVjdEluc3BlY3RvckNvbnRyb2xsZXIuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9KU0dsb2JhbE9iamVjdEluc3BlY3RvckNvbnRyb2xsZXIuY3Bw
CmluZGV4IGQ0ZGI1NjNlYmQ3NjUzMjY2MDRmNTEyYzMxZTlkYjI4NmQxMDgzZjQuLmE2MGYyNWQ0
MzdmYmU5ZmRmY2U2YmE1OGQzZTgyYzI2ZGQ1NmQ2M2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNHbG9iYWxPYmplY3RJbnNwZWN0b3JDb250cm9sbGVyLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTR2xvYmFsT2JqZWN0SW5z
cGVjdG9yQ29udHJvbGxlci5jcHAKQEAgLTIzMSw5ICsyMzEsOCBAQCB2b2lkIEpTR2xvYmFsT2Jq
ZWN0SW5zcGVjdG9yQ29udHJvbGxlcjo6ZnJvbnRlbmRJbml0aWFsaXplZCgpCiAgICAgaWYgKG1f
cGF1c2VBZnRlckluaXRpYWxpemF0aW9uKSB7CiAgICAgICAgIG1fcGF1c2VBZnRlckluaXRpYWxp
emF0aW9uID0gZmFsc2U7CiAKLSAgICAgICAgRXJyb3JTdHJpbmcgaWdub3JlZDsKLSAgICAgICAg
ZW5zdXJlRGVidWdnZXJBZ2VudCgpLmVuYWJsZShpZ25vcmVkKTsKLSAgICAgICAgZW5zdXJlRGVi
dWdnZXJBZ2VudCgpLnBhdXNlKGlnbm9yZWQpOworICAgICAgICBlbnN1cmVEZWJ1Z2dlckFnZW50
KCkuZW5hYmxlKCk7CisgICAgICAgIGVuc3VyZURlYnVnZ2VyQWdlbnQoKS5wYXVzZSgpOwogICAg
IH0KIAogI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQWdlbnQuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQWdlbnQuY3BwCmluZGV4
IDViOWE3MTU0MDg1MDg2NDFjYTA2MWFlY2Y4ZjAxMTg0NmY3MTA0NDguLjg2ODZkNjk0MWI3ODQ3
OTk1YjJkZmZkZDY3OGI2NmQzYjQ4MWRkYjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckFnZW50LmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBZ2VudC5jcHAKQEAgLTU0LDQ0
ICs1NCw0OSBAQCB2b2lkIEluc3BlY3RvckFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFj
a2VuZChEaXNjb25uZWN0UmVhc29uKQogewogICAgIG1fcGVuZGluZ0V2YWx1YXRlVGVzdENvbW1h
bmRzLmNsZWFyKCk7CiAKLSAgICBFcnJvclN0cmluZyBpZ25vcmVkOwotICAgIGRpc2FibGUoaWdu
b3JlZCk7CisgICAgZGlzYWJsZSgpOwogfQogCi12b2lkIEluc3BlY3RvckFnZW50OjplbmFibGUo
RXJyb3JTdHJpbmcmKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yQWdl
bnQ6OmVuYWJsZSgpCiB7CiAgICAgbV9lbmFibGVkID0gdHJ1ZTsKIAogICAgIGlmIChtX3BlbmRp
bmdJbnNwZWN0RGF0YS5maXJzdCkKLSAgICAgICAgaW5zcGVjdChtX3BlbmRpbmdJbnNwZWN0RGF0
YS5maXJzdC5jb3B5UmVmKCksIG1fcGVuZGluZ0luc3BlY3REYXRhLnNlY29uZC5jb3B5UmVmKCkp
OworICAgICAgICBpbnNwZWN0KG1fcGVuZGluZ0luc3BlY3REYXRhLmZpcnN0LnJlbGVhc2VOb25O
dWxsKCksIG1fcGVuZGluZ0luc3BlY3REYXRhLnNlY29uZC5yZWxlYXNlTm9uTnVsbCgpKTsKIAog
ICAgIGZvciAoYXV0byYgdGVzdENvbW1hbmQgOiBtX3BlbmRpbmdFdmFsdWF0ZVRlc3RDb21tYW5k
cykKICAgICAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPmV2YWx1YXRlRm9yVGVzdEluRnJvbnRl
bmQodGVzdENvbW1hbmQpOwogCiAgICAgbV9wZW5kaW5nRXZhbHVhdGVUZXN0Q29tbWFuZHMuY2xl
YXIoKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yQWdlbnQ6OmRpc2Fi
bGUoRXJyb3JTdHJpbmcmKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9y
QWdlbnQ6OmRpc2FibGUoKQogewogICAgIG1fZW5hYmxlZCA9IGZhbHNlOworCisgICAgcmV0dXJu
IHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JBZ2VudDo6aW5pdGlhbGl6ZWQoRXJyb3JTdHJpbmcm
KQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yQWdlbnQ6OmluaXRpYWxp
emVkKCkKIHsKICAgICBtX2Vudmlyb25tZW50LmZyb250ZW5kSW5pdGlhbGl6ZWQoKTsKKworICAg
IHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yQWdlbnQ6Omluc3BlY3QoUmVmUHRyPFBy
b3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiYgb2JqZWN0VG9JbnNwZWN0LCBSZWZQdHI8
SlNPTjo6T2JqZWN0PiYmIGhpbnRzKQordm9pZCBJbnNwZWN0b3JBZ2VudDo6aW5zcGVjdChSZWY8
UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mJiBvYmplY3QsIFJlZjxKU09OOjpPYmpl
Y3Q+JiYgaGludHMpCiB7CiAgICAgaWYgKG1fZW5hYmxlZCkgewotICAgICAgICBtX2Zyb250ZW5k
RGlzcGF0Y2hlci0+aW5zcGVjdChvYmplY3RUb0luc3BlY3QsIGhpbnRzKTsKKyAgICAgICAgbV9m
cm9udGVuZERpc3BhdGNoZXItPmluc3BlY3QoV1RGTW92ZShvYmplY3QpLCBXVEZNb3ZlKGhpbnRz
KSk7CiAgICAgICAgIG1fcGVuZGluZ0luc3BlY3REYXRhLmZpcnN0ID0gbnVsbHB0cjsKICAgICAg
ICAgbV9wZW5kaW5nSW5zcGVjdERhdGEuc2Vjb25kID0gbnVsbHB0cjsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIG1fcGVuZGluZ0luc3BlY3REYXRhLmZpcnN0ID0gb2JqZWN0VG9JbnNw
ZWN0OwotICAgIG1fcGVuZGluZ0luc3BlY3REYXRhLnNlY29uZCA9IGhpbnRzOworICAgIG1fcGVu
ZGluZ0luc3BlY3REYXRhLmZpcnN0ID0gV1RGTW92ZShvYmplY3QpOworICAgIG1fcGVuZGluZ0lu
c3BlY3REYXRhLnNlY29uZCA9IFdURk1vdmUoaGludHMpOwogfQogCiB2b2lkIEluc3BlY3RvckFn
ZW50OjpldmFsdWF0ZUZvclRlc3RJbkZyb250ZW5kKGNvbnN0IFN0cmluZyYgc2NyaXB0KQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9y
QWdlbnQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rv
ckFnZW50LmgKaW5kZXggODU4YzY5YWMyZWI4NmRjMTgyOGEyZjNlMTI2NzE1ODA5ZTg5ZjM1YS4u
NTk0Y2VlNzE3NDA2MDU5OWM4OTkzNmQwYzI3MzZhMTUzYWEyNzNkNCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQWdlbnQuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBZ2VudC5o
CkBAIC00MCwyNiArNDAsMjQgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiBjbGFzcyBCYWNrZW5k
RGlzcGF0Y2hlcjsKIGNsYXNzIEluc3BlY3RvckVudmlyb25tZW50OwogCi10eXBlZGVmIFN0cmlu
ZyBFcnJvclN0cmluZzsKLQogY2xhc3MgSlNfRVhQT1JUX1BSSVZBVEUgSW5zcGVjdG9yQWdlbnQg
ZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yQWdlbnRCYXNlLCBwdWJsaWMgSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbnNwZWN0b3JB
Z2VudCk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgSW5zcGVj
dG9yQWdlbnQoQWdlbnRDb250ZXh0Jik7Ci0gICAgfkluc3BlY3RvckFnZW50KCkgZmluYWw7Cisg
ICAgfkluc3BlY3RvckFnZW50KCk7CiAKICAgICAvLyBJbnNwZWN0b3JBZ2VudEJhc2UKLSAgICB2
b2lkIGRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChGcm9udGVuZFJvdXRlciosIEJhY2tlbmRE
aXNwYXRjaGVyKikgZmluYWw7Ci0gICAgdm9pZCB3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2Vu
ZChEaXNjb25uZWN0UmVhc29uKSBmaW5hbDsKKyAgICB2b2lkIGRpZENyZWF0ZUZyb250ZW5kQW5k
QmFja2VuZChGcm9udGVuZFJvdXRlciosIEJhY2tlbmREaXNwYXRjaGVyKik7CisgICAgdm9pZCB3
aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChEaXNjb25uZWN0UmVhc29uKTsKIAogICAgIC8v
IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVySGFuZGxlcgotICAgIHZvaWQgZW5hYmxlKEVycm9y
U3RyaW5nJikgZmluYWw7Ci0gICAgdm9pZCBkaXNhYmxlKEVycm9yU3RyaW5nJikgZmluYWw7Ci0g
ICAgdm9pZCBpbml0aWFsaXplZChFcnJvclN0cmluZyYpIGZpbmFsOworICAgIFByb3RvY29sOjpF
cnJvclN0cmluZ09yPHZvaWQ+IGVuYWJsZSgpOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09y
PHZvaWQ+IGRpc2FibGUoKTsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBpbml0
aWFsaXplZCgpOwogCiAgICAgLy8gQ29tbWFuZExpbmVBUEkKLSAgICB2b2lkIGluc3BlY3QoUmVm
UHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiYgb2JqZWN0VG9JbnNwZWN0LCBS
ZWZQdHI8SlNPTjo6T2JqZWN0PiYmIGhpbnRzKTsKKyAgICB2b2lkIGluc3BlY3QoUmVmPFByb3Rv
Y29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiYsIFJlZjxKU09OOjpPYmplY3Q+JiYgaGludHMp
OwogCiAgICAgdm9pZCBldmFsdWF0ZUZvclRlc3RJbkZyb250ZW5kKGNvbnN0IFN0cmluZyYgc2Ny
aXB0KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2Vu
dHMvSW5zcGVjdG9yQXVkaXRBZ2VudC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL2FnZW50cy9JbnNwZWN0b3JBdWRpdEFnZW50LmNwcAppbmRleCAwMGIxZWNjMWFmNDgwNzBl
ZmVkYzc2NmEzYmE2ZmY1YjZmNGJhNzAwLi4yZjlmOGYwNTljYjEzOTEzYWZhMzBmNjQ5NzdlMDMz
YjUzNGM5NDkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2Fn
ZW50cy9JbnNwZWN0b3JBdWRpdEFnZW50LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBdWRpdEFnZW50LmNwcApAQCAtNTcsNDEgKzU3LDQx
IEBAIHZvaWQgSW5zcGVjdG9yQXVkaXRBZ2VudDo6d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tl
bmQoRGlzY29ubmVjdFJlYXNvbikKIHsKIH0KIAotdm9pZCBJbnNwZWN0b3JBdWRpdEFnZW50Ojpz
ZXR1cChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IGludCogZXhlY3V0aW9uQ29udGV4
dElkKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yQXVkaXRBZ2VudDo6
c2V0dXAoT3B0aW9uYWw8UHJvdG9jb2w6OlJ1bnRpbWU6OkV4ZWN1dGlvbkNvbnRleHRJZD4mJiBl
eGVjdXRpb25Db250ZXh0SWQpCiB7Ci0gICAgaWYgKGhhc0FjdGl2ZUF1ZGl0KCkpIHsKLSAgICAg
ICAgZXJyb3JTdHJpbmcgPSAiTXVzdCBjYWxsIHRlYXJkb3duIGJlZm9yZSBjYWxsaW5nIHNldHVw
IGFnYWluIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIFByb3RvY29sOjpFcnJvclN0
cmluZyBlcnJvclN0cmluZzsKIAotICAgIEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0ID0g
aW5qZWN0ZWRTY3JpcHRGb3JFdmFsKGVycm9yU3RyaW5nLCBleGVjdXRpb25Db250ZXh0SWQpOwor
ICAgIGlmIChoYXNBY3RpdmVBdWRpdCgpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQo
Ik11c3QgY2FsbCB0ZWFyZG93biBiZWZvcmUgY2FsbGluZyBzZXR1cCBhZ2FpbiJfcyk7CisKKyAg
ICBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdCA9IGluamVjdGVkU2NyaXB0Rm9yRXZhbChl
cnJvclN0cmluZywgV1RGTW92ZShleGVjdXRpb25Db250ZXh0SWQpKTsKICAgICBpZiAoaW5qZWN0
ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBt
YWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAgICBKU0M6OkpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QgPSBpbmplY3RlZFNjcmlwdC5nbG9iYWxPYmplY3QoKTsKLSAgICBpZiAoIWds
b2JhbE9iamVjdCkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIGV4ZWN1dGlvbiBz
dGF0ZSBvZiBpbmplY3RlZCBzY3JpcHQgZm9yIGdpdmVuIGV4ZWN1dGlvbkNvbnRleHRJZCJfczsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoIWdsb2JhbE9iamVjdCkKKyAgICAgICAg
cmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJNaXNzaW5nIGV4ZWN1dGlvbiBzdGF0ZSBvZiBpbmplY3Rl
ZCBzY3JpcHQgZm9yIGdpdmVuIGV4ZWN1dGlvbkNvbnRleHRJZCJfcyk7CiAKICAgICBWTSYgdm0g
PSBnbG9iYWxPYmplY3QtPnZtKCk7CiAKICAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKGdsb2Jh
bE9iamVjdCk7CiAKICAgICBtX2luamVjdGVkV2ViSW5zcGVjdG9yQXVkaXRWYWx1ZS5zZXQodm0s
IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGdsb2JhbE9iamVjdCkpOwotICAgIGlmICghbV9pbmplY3Rl
ZFdlYkluc3BlY3RvckF1ZGl0VmFsdWUpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiVW5hYmxl
IHRvIGNvbnN0cnVjdCBpbmplY3RlZCBXZWJJbnNwZWN0b3JBdWRpdCBvYmplY3QuIl9zOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghbV9pbmplY3RlZFdlYkluc3BlY3RvckF1ZGl0
VmFsdWUpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiVW5hYmxlIHRvIGNvbnN0cnVj
dCBpbmplY3RlZCBXZWJJbnNwZWN0b3JBdWRpdCBvYmplY3QuIl9zKTsKIAogICAgIHBvcHVsYXRl
QXVkaXRPYmplY3QoZ2xvYmFsT2JqZWN0LCBtX2luamVjdGVkV2ViSW5zcGVjdG9yQXVkaXRWYWx1
ZSk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckF1ZGl0QWdlbnQ6OnJ1
bihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgdGVzdCwgY29uc3QgaW50
KiBleGVjdXRpb25Db250ZXh0SWQsIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2Jq
ZWN0PiYgcmVzdWx0LCBPcHRpb25hbDxib29sPiYgd2FzVGhyb3duKQorUHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8c3RkOjp0dXBsZTxSZWY8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4s
IE9wdGlvbmFsPGJvb2w+IC8qIHdhc1Rocm93biAqLz4+IEluc3BlY3RvckF1ZGl0QWdlbnQ6OnJ1
bihjb25zdCBTdHJpbmcmIHRlc3QsIE9wdGlvbmFsPFByb3RvY29sOjpSdW50aW1lOjpFeGVjdXRp
b25Db250ZXh0SWQ+JiYgZXhlY3V0aW9uQ29udGV4dElkKQogewotICAgIEluamVjdGVkU2NyaXB0
IGluamVjdGVkU2NyaXB0ID0gaW5qZWN0ZWRTY3JpcHRGb3JFdmFsKGVycm9yU3RyaW5nLCBleGVj
dXRpb25Db250ZXh0SWQpOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsK
KworICAgIEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0ID0gaW5qZWN0ZWRTY3JpcHRGb3JF
dmFsKGVycm9yU3RyaW5nLCBXVEZNb3ZlKGV4ZWN1dGlvbkNvbnRleHRJZCkpOwogICAgIGlmIChp
bmplY3RlZFNjcmlwdC5oYXNOb1ZhbHVlKCkpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0
dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgIFN0cmluZ0J1aWxkZXIgZnVu
Y3Rpb25TdHJpbmc7CiAgICAgZnVuY3Rpb25TdHJpbmcuYXBwZW5kTGl0ZXJhbCgiKGZ1bmN0aW9u
KFdlYkluc3BlY3RvckF1ZGl0KSB7IFwidXNlIHN0cmljdFwiOyByZXR1cm4gZXZhbChgKCIpOwpA
QCAtMTAzLDYgKzEwMyw4IEBAIHZvaWQgSW5zcGVjdG9yQXVkaXRBZ2VudDo6cnVuKEVycm9yU3Ry
aW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiB0ZXN0LCBjb25zCiAgICAgaWYgKG1faW5q
ZWN0ZWRXZWJJbnNwZWN0b3JBdWRpdFZhbHVlKQogICAgICAgICBvcHRpb25zLmFyZ3MgPSB7IG1f
aW5qZWN0ZWRXZWJJbnNwZWN0b3JBdWRpdFZhbHVlLmdldCgpIH07CiAKKyAgICBSZWZQdHI8UHJv
dG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4gcmVzdWx0OworICAgIE9wdGlvbmFsPGJvb2w+
IHdhc1Rocm93bjsKICAgICBPcHRpb25hbDxpbnQ+IHNhdmVkUmVzdWx0SW5kZXg7CiAKICAgICBK
U0M6OkRlYnVnZ2VyOjpUZW1wb3JhcmlseURpc2FibGVFeGNlcHRpb25CcmVha3BvaW50cyB0ZW1w
b3JhcmlseURpc2FibGVFeGNlcHRpb25CcmVha3BvaW50cyhtX2RlYnVnZ2VyKTsKQEAgLTExMywx
NiArMTE1LDIxIEBAIHZvaWQgSW5zcGVjdG9yQXVkaXRBZ2VudDo6cnVuKEVycm9yU3RyaW5nJiBl
cnJvclN0cmluZywgY29uc3QgU3RyaW5nJiB0ZXN0LCBjb25zCiAgICAgaW5qZWN0ZWRTY3JpcHQu
ZXhlY3V0ZShlcnJvclN0cmluZywgZnVuY3Rpb25TdHJpbmcudG9TdHJpbmcoKSwgV1RGTW92ZShv
cHRpb25zKSwgcmVzdWx0LCB3YXNUaHJvd24sIHNhdmVkUmVzdWx0SW5kZXgpOwogCiAgICAgdW5t
dXRlQ29uc29sZSgpOworCisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJldHVybiBtYWtlVW5l
eHBlY3RlZChlcnJvclN0cmluZyk7CisKKyAgICByZXR1cm4geyB7IHJlc3VsdC5yZWxlYXNlTm9u
TnVsbCgpLCBXVEZNb3ZlKHdhc1Rocm93bikgfSB9OwogfQogCi12b2lkIEluc3BlY3RvckF1ZGl0
QWdlbnQ6OnRlYXJkb3duKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZykKK1Byb3RvY29sOjpFcnJv
clN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckF1ZGl0QWdlbnQ6OnRlYXJkb3duKCkKIHsKLSAgICBp
ZiAoIWhhc0FjdGl2ZUF1ZGl0KCkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiTXVzdCBjYWxs
IHNldHVwIGJlZm9yZSBjYWxsaW5nIHRlYXJkb3duIl9zOwotICAgICAgICByZXR1cm47Ci0gICAg
fQorICAgIGlmICghaGFzQWN0aXZlQXVkaXQoKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVj
dGVkKCJNdXN0IGNhbGwgc2V0dXAgYmVmb3JlIGNhbGxpbmcgdGVhcmRvd24iX3MpOwogCiAgICAg
bV9pbmplY3RlZFdlYkluc3BlY3RvckF1ZGl0VmFsdWUuY2xlYXIoKTsKKworICAgIHJldHVybiB7
IH07CiB9CiAKIGJvb2wgSW5zcGVjdG9yQXVkaXRBZ2VudDo6aGFzQWN0aXZlQXVkaXQoKSBjb25z
dApAQCAtMTM5LDcgKzE0Niw3IEBAIHZvaWQgSW5zcGVjdG9yQXVkaXRBZ2VudDo6cG9wdWxhdGVB
dWRpdE9iamVjdChKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsCiAgICAgSlNDOjpW
TSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayh2
bSk7CiAKLSAgICBhdWRpdE9iamVjdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZy
b21TdHJpbmcodm0sICJWZXJzaW9uIiksIEpTQzo6SlNWYWx1ZShJbnNwZWN0b3I6OlByb3RvY29s
OjpBdWRpdDo6VkVSU0lPTikpOworICAgIGF1ZGl0T2JqZWN0LT5wdXREaXJlY3Qodm0sIEpTQzo6
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIlZlcnNpb24iKSwgSlNDOjpKU1ZhbHVlKFByb3Rv
Y29sOjpBdWRpdDo6VkVSU0lPTikpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rv
ckF1ZGl0QWdlbnQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0lu
c3BlY3RvckF1ZGl0QWdlbnQuaAppbmRleCA1YjZkOGFhYjcyMjYzZjE4YWE2NDEwNzg1YzAxYzli
YThjNGQzMGY4Li5iZjUwNmMzNmQyZGZmM2Y2ZmNhNTk5ZjY3ZTU4NTRhMjY4YTdiMWQ1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JB
dWRpdEFnZW50LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9yQXVkaXRBZ2VudC5oCkBAIC00MCw3ICs0MCw2IEBAIG5hbWVzcGFjZSBJbnNwZWN0
b3IgewogCiBjbGFzcyBJbmplY3RlZFNjcmlwdDsKIGNsYXNzIEluamVjdGVkU2NyaXB0TWFuYWdl
cjsKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwogCiBjbGFzcyBKU19FWFBPUlRfUFJJVkFU
RSBJbnNwZWN0b3JBdWRpdEFnZW50IDogcHVibGljIEluc3BlY3RvckFnZW50QmFzZSwgcHVibGlj
IEF1ZGl0QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShJbnNwZWN0b3JBdWRpdEFnZW50KTsKQEAgLTUzLDkgKzUyLDkgQEAgcHVibGljOgogICAgIHZv
aWQgd2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoRGlzY29ubmVjdFJlYXNvbikgZmluYWw7
CiAKICAgICAvLyBBdWRpdEJhY2tlbmREaXNwYXRjaGVySGFuZGxlcgotICAgIHZvaWQgc2V0dXAo
RXJyb3JTdHJpbmcmLCBjb25zdCBpbnQqIGV4ZWN1dGlvbkNvbnRleHRJZCkgZmluYWw7Ci0gICAg
dm9pZCBydW4oRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHRlc3QsIGNvbnN0IGludCogZXhl
Y3V0aW9uQ29udGV4dElkLCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4m
IHJlc3VsdCwgT3B0aW9uYWw8Ym9vbD4mIHdhc1Rocm93bikgZmluYWw7Ci0gICAgdm9pZCB0ZWFy
ZG93bihFcnJvclN0cmluZyYpIGZpbmFsOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZv
aWQ+IHNldHVwKE9wdGlvbmFsPFByb3RvY29sOjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0SWQ+
JiYpIGZpbmFsOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHN0ZDo6dHVwbGU8UmVmPFBy
b3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+LCBPcHRpb25hbDxib29sPiAvKiB3YXNUaHJv
d24gKi8+PiBydW4oY29uc3QgU3RyaW5nJiB0ZXN0LCBPcHRpb25hbDxQcm90b2NvbDo6UnVudGlt
ZTo6RXhlY3V0aW9uQ29udGV4dElkPiYmKSBmaW5hbDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJp
bmdPcjx2b2lkPiB0ZWFyZG93bigpIGZpbmFsOwogCiAgICAgYm9vbCBoYXNBY3RpdmVBdWRpdCgp
IGNvbnN0OwogCkBAIC02NCw3ICs2Myw3IEBAIHByb3RlY3RlZDoKIAogICAgIEluamVjdGVkU2Ny
aXB0TWFuYWdlciYgaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKCkgeyByZXR1cm4gbV9pbmplY3RlZFNj
cmlwdE1hbmFnZXI7IH0KIAotICAgIHZpcnR1YWwgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3Jp
cHRGb3JFdmFsKEVycm9yU3RyaW5nJiwgY29uc3QgaW50KiBleGVjdXRpb25Db250ZXh0SWQpID0g
MDsKKyAgICB2aXJ0dWFsIEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0Rm9yRXZhbChQcm90
b2NvbDo6RXJyb3JTdHJpbmcmLCBPcHRpb25hbDxQcm90b2NvbDo6UnVudGltZTo6RXhlY3V0aW9u
Q29udGV4dElkPiYmKSA9IDA7CiAKICAgICB2aXJ0dWFsIHZvaWQgcG9wdWxhdGVBdWRpdE9iamVj
dChKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJvbmc8SlNDOjpKU09iamVjdD4mIGF1ZGl0
T2JqZWN0KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9h
Z2VudHMvSW5zcGVjdG9yQ29uc29sZUFnZW50LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNvbnNvbGVBZ2VudC5jcHAKaW5kZXggMTA1ZmU2ZmM2
YzIyMDhlZjc2MzcxZWFlZGRiZmE0NzMxZmJmYjY1NC4uMTNiNjIzNGQxZjUzMjg1MGUzMDA1Mjc5
NzNjMjE1YjcyZTM2YWUxNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9hZ2VudHMvSW5zcGVjdG9yQ29uc29sZUFnZW50LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDb25zb2xlQWdlbnQuY3BwCkBAIC01
Myw4ICs1Myw3IEBAIHZvaWQgSW5zcGVjdG9yQ29uc29sZUFnZW50OjpkaWRDcmVhdGVGcm9udGVu
ZEFuZEJhY2tlbmQoRnJvbnRlbmRSb3V0ZXIqLCBCYWNrZW5kCiAKIHZvaWQgSW5zcGVjdG9yQ29u
c29sZUFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChEaXNjb25uZWN0UmVhc29u
KQogewotICAgIFN0cmluZyBlcnJvclN0cmluZzsKLSAgICBkaXNhYmxlKGVycm9yU3RyaW5nKTsK
KyAgICBkaXNhYmxlKCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ29uc29sZUFnZW50OjpkaXNjYXJk
VmFsdWVzKCkKQEAgLTYzLDEwICs2MiwxMCBAQCB2b2lkIEluc3BlY3RvckNvbnNvbGVBZ2VudDo6
ZGlzY2FyZFZhbHVlcygpCiAgICAgbV9leHBpcmVkQ29uc29sZU1lc3NhZ2VDb3VudCA9IDA7CiB9
CiAKLXZvaWQgSW5zcGVjdG9yQ29uc29sZUFnZW50OjplbmFibGUoRXJyb3JTdHJpbmcmKQorUHJv
dG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yQ29uc29sZUFnZW50OjplbmFibGUo
KQogewogICAgIGlmIChtX2VuYWJsZWQpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJu
IHsgfTsKIAogICAgIG1fZW5hYmxlZCA9IHRydWU7CiAKQEAgLTgwLDE3ICs3OSwyMSBAQCB2b2lk
IEluc3BlY3RvckNvbnNvbGVBZ2VudDo6ZW5hYmxlKEVycm9yU3RyaW5nJikKIAogICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbWVzc2FnZXMuc2l6ZSgpOyArK2kpCiAgICAgICAgIG1lc3NhZ2Vz
W2ldLT5hZGRUb0Zyb250ZW5kKCptX2Zyb250ZW5kRGlzcGF0Y2hlciwgbV9pbmplY3RlZFNjcmlw
dE1hbmFnZXIsIGZhbHNlKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9y
Q29uc29sZUFnZW50OjpkaXNhYmxlKEVycm9yU3RyaW5nJikKK1Byb3RvY29sOjpFcnJvclN0cmlu
Z09yPHZvaWQ+IEluc3BlY3RvckNvbnNvbGVBZ2VudDo6ZGlzYWJsZSgpCiB7CiAgICAgaWYgKCFt
X2VuYWJsZWQpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIG1f
ZW5hYmxlZCA9IGZhbHNlOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JD
b25zb2xlQWdlbnQ6OmNsZWFyTWVzc2FnZXMoRXJyb3JTdHJpbmcmKQorUHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yQ29uc29sZUFnZW50OjpjbGVhck1lc3NhZ2VzKCkKIHsK
ICAgICBtX2NvbnNvbGVNZXNzYWdlcy5jbGVhcigpOwogICAgIG1fZXhwaXJlZENvbnNvbGVNZXNz
YWdlQ291bnQgPSAwOwpAQCAtOTksNiArMTAyLDggQEAgdm9pZCBJbnNwZWN0b3JDb25zb2xlQWdl
bnQ6OmNsZWFyTWVzc2FnZXMoRXJyb3JTdHJpbmcmKQogCiAgICAgaWYgKG1fZW5hYmxlZCkKICAg
ICAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPm1lc3NhZ2VzQ2xlYXJlZCgpOworCisgICAgcmV0
dXJuIHsgfTsKIH0KIAogYm9vbCBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OmRldmVsb3BlckV4dHJh
c0VuYWJsZWQoKSBjb25zdApAQCAtMTA4LDggKzExMyw3IEBAIGJvb2wgSW5zcGVjdG9yQ29uc29s
ZUFnZW50OjpkZXZlbG9wZXJFeHRyYXNFbmFibGVkKCkgY29uc3QKIAogdm9pZCBJbnNwZWN0b3JD
b25zb2xlQWdlbnQ6OnJlc2V0KCkKIHsKLSAgICBFcnJvclN0cmluZyBpZ25vcmVkOwotICAgIGNs
ZWFyTWVzc2FnZXMoaWdub3JlZCk7CisgICAgY2xlYXJNZXNzYWdlcygpOwogCiAgICAgbV90aW1l
cy5jbGVhcigpOwogICAgIG1fY291bnRzLmNsZWFyKCk7CkBAIC0xMTcsMTAgKzEyMSw4IEBAIHZv
aWQgSW5zcGVjdG9yQ29uc29sZUFnZW50OjpyZXNldCgpCiAKIHZvaWQgSW5zcGVjdG9yQ29uc29s
ZUFnZW50OjphZGRNZXNzYWdlVG9Db25zb2xlKHN0ZDo6dW5pcXVlX3B0cjxDb25zb2xlTWVzc2Fn
ZT4gbWVzc2FnZSkKIHsKLSAgICBpZiAobWVzc2FnZS0+dHlwZSgpID09IE1lc3NhZ2VUeXBlOjpD
bGVhcikgewotICAgICAgICBFcnJvclN0cmluZyBpZ25vcmVkOwotICAgICAgICBjbGVhck1lc3Nh
Z2VzKGlnbm9yZWQpOwotICAgIH0KKyAgICBpZiAobWVzc2FnZS0+dHlwZSgpID09IE1lc3NhZ2VU
eXBlOjpDbGVhcikKKyAgICAgICAgY2xlYXJNZXNzYWdlcygpOwogCiAgICAgYWRkQ29uc29sZU1l
c3NhZ2UoV1RGTW92ZShtZXNzYWdlKSk7CiB9CkBAIC0xOTEsMTIgKzE5MywxMiBAQCB2b2lkIElu
c3BlY3RvckNvbnNvbGVBZ2VudDo6dGFrZUhlYXBTbmFwc2hvdChjb25zdCBTdHJpbmcmIHRpdGxl
KQogICAgIGlmICghbV9oZWFwQWdlbnQpCiAgICAgICAgIHJldHVybjsKIAotICAgIEVycm9yU3Ry
aW5nIGlnbm9yZWQ7Ci0gICAgZG91YmxlIHRpbWVzdGFtcDsKLSAgICBTdHJpbmcgc25hcHNob3RE
YXRhOwotICAgIG1faGVhcEFnZW50LT5zbmFwc2hvdChpZ25vcmVkLCAmdGltZXN0YW1wLCAmc25h
cHNob3REYXRhKTsKKyAgICBhdXRvIHJlc3VsdCA9IG1faGVhcEFnZW50LT5zbmFwc2hvdCgpOwor
ICAgIGlmICghcmVzdWx0KQorICAgICAgICByZXR1cm47CiAKLSAgICBtX2Zyb250ZW5kRGlzcGF0
Y2hlci0+aGVhcFNuYXBzaG90KHRpbWVzdGFtcCwgc25hcHNob3REYXRhLCB0aXRsZS5pc0VtcHR5
KCkgPyBudWxscHRyIDogJnRpdGxlKTsKKyAgICBhdXRvIFt0aW1lc3RhbXAsIHNuYXBzaG90RGF0
YV0gPSBXVEZNb3ZlKHJlc3VsdC52YWx1ZSgpKTsKKyAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+
aGVhcFNuYXBzaG90KHRpbWVzdGFtcCwgc25hcHNob3REYXRhLCB0aXRsZSk7CiB9CiAKIHZvaWQg
SW5zcGVjdG9yQ29uc29sZUFnZW50Ojpjb3VudChKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIGNvbnN0IFN0cmluZyYgbGFiZWwpCkBAIC0yNTYsMTUgKzI1OCwxNSBAQCB2b2lkIElu
c3BlY3RvckNvbnNvbGVBZ2VudDo6YWRkQ29uc29sZU1lc3NhZ2Uoc3RkOjp1bmlxdWVfcHRyPENv
bnNvbGVNZXNzYWdlPiBjbwogICAgIH0KIH0KIAotdm9pZCBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6
OmdldExvZ2dpbmdDaGFubmVscyhFcnJvclN0cmluZyYsIFJlZlB0cjxKU09OOjpBcnJheU9mPFBy
b3RvY29sOjpDb25zb2xlOjpDaGFubmVsPj4mIGNoYW5uZWxzKQorUHJvdG9jb2w6OkVycm9yU3Ry
aW5nT3I8UmVmPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWw+Pj4gSW5z
cGVjdG9yQ29uc29sZUFnZW50OjpnZXRMb2dnaW5nQ2hhbm5lbHMoKQogewogICAgIC8vIERlZmF1
bHQgaW1wbGVtZW50YXRpb24gaGFzIG5vIGxvZ2dpbmcgY2hhbm5lbHMuCi0gICAgY2hhbm5lbHMg
PSBKU09OOjpBcnJheU9mPFByb3RvY29sOjpDb25zb2xlOjpDaGFubmVsPjo6Y3JlYXRlKCk7Cisg
ICAgcmV0dXJuIEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWw+OjpjcmVh
dGUoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OnNldExvZ2dpbmdDaGFubmVs
TGV2ZWwoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJp
bmcmKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yQ29uc29sZUFnZW50
OjpzZXRMb2dnaW5nQ2hhbm5lbExldmVsKFByb3RvY29sOjpDb25zb2xlOjpDaGFubmVsU291cmNl
LCBQcm90b2NvbDo6Q29uc29sZTo6Q2hhbm5lbExldmVsKQogewotICAgIGVycm9yU3RyaW5nID0g
Ik5vdCBzdXBwb3J0ZWQiX3M7CisgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJOb3Qgc3VwcG9y
dGVkIl9zKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDb25zb2xlQWdlbnQu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNvbnNv
bGVBZ2VudC5oCmluZGV4IDc4Y2FmMWFkMDhhZTU3YjFlMDc4NWM5YWRkNTE2NzUzNmFmYmYyOTYu
LmVkOGUxZjY5OWE1ZDBjOTFjZDA1NjY5MWE3ZGIyMTk4MGYyMzVkMjIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNvbnNvbGVBZ2Vu
dC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rv
ckNvbnNvbGVBZ2VudC5oCkBAIC00Niw3ICs0Niw2IEBAIGNsYXNzIEluamVjdGVkU2NyaXB0TWFu
YWdlcjsKIGNsYXNzIEluc3BlY3RvckhlYXBBZ2VudDsKIGNsYXNzIFNjcmlwdEFyZ3VtZW50czsK
IGNsYXNzIFNjcmlwdENhbGxTdGFjazsKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwogCiBj
bGFzcyBKU19FWFBPUlRfUFJJVkFURSBJbnNwZWN0b3JDb25zb2xlQWdlbnQgOiBwdWJsaWMgSW5z
cGVjdG9yQWdlbnRCYXNlLCBwdWJsaWMgQ29uc29sZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7
CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW5zcGVjdG9yQ29uc29sZUFnZW50KTsKQEAgLTYx
LDExICs2MCwxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBkaXNjYXJkVmFsdWVzKCkgZmluYWw7CiAK
ICAgICAvLyBDb25zb2xlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyCi0gICAgdm9pZCBlbmFibGUo
RXJyb3JTdHJpbmcmKSBmaW5hbDsKLSAgICB2b2lkIGRpc2FibGUoRXJyb3JTdHJpbmcmKSBmaW5h
bDsKLSAgICB2b2lkIGNsZWFyTWVzc2FnZXMoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2
b2lkIGdldExvZ2dpbmdDaGFubmVscyhFcnJvclN0cmluZyYsIFJlZlB0cjxKU09OOjpBcnJheU9m
PFByb3RvY29sOjpDb25zb2xlOjpDaGFubmVsPj4mKSBvdmVycmlkZTsKLSAgICB2b2lkIHNldExv
Z2dpbmdDaGFubmVsTGV2ZWwoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGNoYW5uZWwsIGNv
bnN0IFN0cmluZyYgbGV2ZWwpIG92ZXJyaWRlOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09y
PHZvaWQ+IGVuYWJsZSgpIGZpbmFsOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+
IGRpc2FibGUoKSBmaW5hbDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBjbGVh
ck1lc3NhZ2VzKCkgb3ZlcnJpZGU7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEpT
T046OkFycmF5T2Y8UHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWw+Pj4gZ2V0TG9nZ2luZ0NoYW5u
ZWxzKCkgb3ZlcnJpZGU7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc2V0TG9n
Z2luZ0NoYW5uZWxMZXZlbChQcm90b2NvbDo6Q29uc29sZTo6Q2hhbm5lbFNvdXJjZSwgUHJvdG9j
b2w6OkNvbnNvbGU6OkNoYW5uZWxMZXZlbCkgb3ZlcnJpZGU7CiAKICAgICB2b2lkIHNldEhlYXBB
Z2VudChJbnNwZWN0b3JIZWFwQWdlbnQqIGFnZW50KSB7IG1faGVhcEFnZW50ID0gYWdlbnQ7IH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5z
cGVjdG9yRGVidWdnZXJBZ2VudC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L2FnZW50cy9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcAppbmRleCAxM2ZjMmM1M2I1YWM0NjVl
NmUzZDY2YWJlMDU1YzBlZTZkNGRjMDcwLi40MWY0YmE0MjdlYTRmNzlkYzE0NDdmZWE1OTY0YWQ4
MDYzY2JkZjcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2Fn
ZW50cy9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcApAQCAtNjQsMjUg
KzY0LDI1IEBAIHN0YXRpYyBib29sIGlzV2ViS2l0SW5qZWN0ZWRTY3JpcHQoY29uc3QgU3RyaW5n
JiBzb3VyY2VVUkwpCiAgICAgcmV0dXJuIHNvdXJjZVVSTC5zdGFydHNXaXRoKCJfX0luamVjdGVk
U2NyaXB0XyIpICYmIHNvdXJjZVVSTC5lbmRzV2l0aCgiLmpzIik7CiB9CiAKLXN0YXRpYyBPcHRp
b25hbDxKU0M6OkJyZWFrcG9pbnQ6OkFjdGlvbjo6VHlwZT4gYnJlYWtwb2ludEFjdGlvblR5cGVG
b3JTdHJpbmcoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHR5cGVTdHJp
bmcpCitzdGF0aWMgT3B0aW9uYWw8SlNDOjpCcmVha3BvaW50OjpBY3Rpb246OlR5cGU+IGJyZWFr
cG9pbnRBY3Rpb25UeXBlRm9yU3RyaW5nKFByb3RvY29sOjpFcnJvclN0cmluZyYgZXJyb3JTdHJp
bmcsIGNvbnN0IFN0cmluZyYgdHlwZVN0cmluZykKIHsKLSAgICBhdXRvIHR5cGUgPSBJbnNwZWN0
b3I6OlByb3RvY29sOjpJbnNwZWN0b3JIZWxwZXJzOjpwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8
SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OkJyZWFrcG9pbnRBY3Rpb246OlR5cGU+KHR5
cGVTdHJpbmcpOworICAgIGF1dG8gdHlwZSA9IFByb3RvY29sOjpIZWxwZXJzOjpwYXJzZUVudW1W
YWx1ZUZyb21TdHJpbmc8UHJvdG9jb2w6OkRlYnVnZ2VyOjpCcmVha3BvaW50QWN0aW9uOjpUeXBl
Pih0eXBlU3RyaW5nKTsKICAgICBpZiAoIXR5cGUpIHsKICAgICAgICAgZXJyb3JTdHJpbmcgPSBt
YWtlU3RyaW5nKCJVbmtub3duIGJyZWFrcG9pbnQgYWN0aW9uIHR5cGU6ICJfcywgdHlwZVN0cmlu
Zyk7CiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgfQogCiAgICAgc3dpdGNoICgq
dHlwZSkgewotICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OkJyZWFrcG9p
bnRBY3Rpb246OlR5cGU6OkxvZzoKKyAgICBjYXNlIFByb3RvY29sOjpEZWJ1Z2dlcjo6QnJlYWtw
b2ludEFjdGlvbjo6VHlwZTo6TG9nOgogICAgICAgICByZXR1cm4gSlNDOjpCcmVha3BvaW50OjpB
Y3Rpb246OlR5cGU6OkxvZzsKIAotICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdn
ZXI6OkJyZWFrcG9pbnRBY3Rpb246OlR5cGU6OkV2YWx1YXRlOgorICAgIGNhc2UgUHJvdG9jb2w6
OkRlYnVnZ2VyOjpCcmVha3BvaW50QWN0aW9uOjpUeXBlOjpFdmFsdWF0ZToKICAgICAgICAgcmV0
dXJuIEpTQzo6QnJlYWtwb2ludDo6QWN0aW9uOjpUeXBlOjpFdmFsdWF0ZTsKIAotICAgIGNhc2Ug
SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OkJyZWFrcG9pbnRBY3Rpb246OlR5cGU6OlNv
dW5kOgorICAgIGNhc2UgUHJvdG9jb2w6OkRlYnVnZ2VyOjpCcmVha3BvaW50QWN0aW9uOjpUeXBl
OjpTb3VuZDoKICAgICAgICAgcmV0dXJuIEpTQzo6QnJlYWtwb2ludDo6QWN0aW9uOjpUeXBlOjpT
b3VuZDsKIAotICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OkJyZWFrcG9p
bnRBY3Rpb246OlR5cGU6OlByb2JlOgorICAgIGNhc2UgUHJvdG9jb2w6OkRlYnVnZ2VyOjpCcmVh
a3BvaW50QWN0aW9uOjpUeXBlOjpQcm9iZToKICAgICAgICAgcmV0dXJuIEpTQzo6QnJlYWtwb2lu
dDo6QWN0aW9uOjpUeXBlOjpQcm9iZTsKICAgICB9CiAKQEAgLTkxLDMwICs5MSwyOSBAQCBzdGF0
aWMgT3B0aW9uYWw8SlNDOjpCcmVha3BvaW50OjpBY3Rpb246OlR5cGU+IGJyZWFrcG9pbnRBY3Rp
b25UeXBlRm9yU3RyaW5nKEVycgogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLXN0YXRpYyBU
IHBhcnNlQnJlYWtwb2ludE9wdGlvbnMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBK
U09OOjpPYmplY3QqIG9wdGlvbnNQYXlsb2FkLCBGdW5jdGlvbjxUKGNvbnN0IFN0cmluZyYsIEpT
Qzo6QnJlYWtwb2ludDo6QWN0aW9uc1ZlY3RvciYmLCBib29sLCBzaXplX3QpPiBjYWxsYmFjaykK
K3N0YXRpYyBUIHBhcnNlQnJlYWtwb2ludE9wdGlvbnMoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBl
cnJvclN0cmluZywgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBvcHRpb25zLCBGdW5jdGlvbjxUKGNv
bnN0IFN0cmluZyYsIEpTQzo6QnJlYWtwb2ludDo6QWN0aW9uc1ZlY3RvciYmLCBib29sLCBzaXpl
X3QpPiBjYWxsYmFjaykKIHsKICAgICBTdHJpbmcgY29uZGl0aW9uOwogICAgIEpTQzo6QnJlYWtw
b2ludDo6QWN0aW9uc1ZlY3RvciBhY3Rpb25zOwogICAgIGJvb2wgYXV0b0NvbnRpbnVlID0gZmFs
c2U7CiAgICAgc2l6ZV90IGlnbm9yZUNvdW50ID0gMDsKIAotICAgIGlmIChvcHRpb25zUGF5bG9h
ZCkgewotICAgICAgICBvcHRpb25zUGF5bG9hZC0+Z2V0U3RyaW5nKCJjb25kaXRpb24iX3MsIGNv
bmRpdGlvbik7CisgICAgaWYgKG9wdGlvbnMpIHsKKyAgICAgICAgY29uZGl0aW9uID0gb3B0aW9u
cy0+Z2V0U3RyaW5nKFByb3RvY29sOjpEZWJ1Z2dlcjo6QnJlYWtwb2ludE9wdGlvbnM6OmNvbmRp
dGlvbktleSk7CiAKLSAgICAgICAgUmVmUHRyPEpTT046OkFycmF5PiBhY3Rpb25zUGF5bG9hZDsK
LSAgICAgICAgb3B0aW9uc1BheWxvYWQtPmdldEFycmF5KCJhY3Rpb25zIl9zLCBhY3Rpb25zUGF5
bG9hZCk7CisgICAgICAgIGF1dG8gYWN0aW9uc1BheWxvYWQgPSBvcHRpb25zLT5nZXRBcnJheShQ
cm90b2NvbDo6RGVidWdnZXI6OkJyZWFrcG9pbnRPcHRpb25zOjphY3Rpb25zS2V5KTsKICAgICAg
ICAgaWYgKGF1dG8gY291bnQgPSBhY3Rpb25zUGF5bG9hZCA/IGFjdGlvbnNQYXlsb2FkLT5sZW5n
dGgoKSA6IDApIHsKICAgICAgICAgICAgIGFjdGlvbnMucmVzZXJ2ZUNhcGFjaXR5KGNvdW50KTsK
IAogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAg
ICAgICAgICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBhY3Rpb25PYmplY3Q7Ci0gICAgICAg
ICAgICAgICAgaWYgKCFhY3Rpb25zUGF5bG9hZC0+Z2V0KGkpLT5hc09iamVjdChhY3Rpb25PYmpl
Y3QpKSB7CisgICAgICAgICAgICAgICAgYXV0byBhY3Rpb25PYmplY3QgPSBhY3Rpb25zUGF5bG9h
ZC0+Z2V0KGkpLT5hc09iamVjdCgpOworICAgICAgICAgICAgICAgIGlmICghYWN0aW9uT2JqZWN0
KSB7CiAgICAgICAgICAgICAgICAgICAgIGVycm9yU3RyaW5nID0gIlVuZXhwZWN0ZWQgbm9uLW9i
amVjdCBpdGVtIGluIGdpdmVuIGFjdGlvbnMiX3M7CiAgICAgICAgICAgICAgICAgICAgIHJldHVy
biB7IH07CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgU3RyaW5nIGFjdGlv
blR5cGVTdHJpbmc7Ci0gICAgICAgICAgICAgICAgaWYgKCFhY3Rpb25PYmplY3QtPmdldFN0cmlu
ZygidHlwZSJfcywgYWN0aW9uVHlwZVN0cmluZykpIHsKKyAgICAgICAgICAgICAgICBhdXRvIGFj
dGlvblR5cGVTdHJpbmcgPSBhY3Rpb25PYmplY3QtPmdldFN0cmluZyhQcm90b2NvbDo6RGVidWdn
ZXI6OkJyZWFrcG9pbnRBY3Rpb246OnR5cGVLZXkpOworICAgICAgICAgICAgICAgIGlmICghYWN0
aW9uVHlwZVN0cmluZykgewogICAgICAgICAgICAgICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNz
aW5nIHR5cGUgZm9yIGl0ZW0gaW4gZ2l2ZW4gYWN0aW9ucyJfczsKICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHsgfTsKICAgICAgICAgICAgICAgICB9CkBAIC0xMjUsMzMgKzEyNCwzMyBAQCBz
dGF0aWMgVCBwYXJzZUJyZWFrcG9pbnRPcHRpb25zKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywg
Y29uc3QgSlNPTjo6T2JqZWN0KiBvcAogCiAgICAgICAgICAgICAgICAgSlNDOjpCcmVha3BvaW50
OjpBY3Rpb24gYWN0aW9uKCphY3Rpb25UeXBlKTsKIAotICAgICAgICAgICAgICAgIGFjdGlvbk9i
amVjdC0+Z2V0U3RyaW5nKCJkYXRhIl9zLCBhY3Rpb24uZGF0YSk7CisgICAgICAgICAgICAgICAg
YWN0aW9uLmRhdGEgPSBhY3Rpb25PYmplY3QtPmdldFN0cmluZyhQcm90b2NvbDo6RGVidWdnZXI6
OkJyZWFrcG9pbnRBY3Rpb246OmRhdGFLZXkpOwogCiAgICAgICAgICAgICAgICAgLy8gU3BlY2lm
eWluZyBhbiBpZGVudGlmaWVyIGlzIG9wdGlvbmFsLiBUaGV5IGFyZSB1c2VkIHRvIGNvcnJlbGF0
ZSBwcm9iZSBzYW1wbGVzCiAgICAgICAgICAgICAgICAgLy8gaW4gdGhlIGZyb250ZW5kIGFjcm9z
cyBtdWx0aXBsZSBiYWNrZW5kIHByb2JlIGFjdGlvbnMgYW5kIHNlZ3JlZ2F0ZSBvYmplY3QgZ3Jv
dXBzLgotICAgICAgICAgICAgICAgIGFjdGlvbk9iamVjdC0+Z2V0SW50ZWdlcigiaWQiX3MsIGFj
dGlvbi5pZCk7CisgICAgICAgICAgICAgICAgYWN0aW9uLmlkID0gYWN0aW9uT2JqZWN0LT5nZXRJ
bnRlZ2VyKFByb3RvY29sOjpEZWJ1Z2dlcjo6QnJlYWtwb2ludEFjdGlvbjo6aWRLZXkpLnZhbHVl
T3IoSlNDOjpub0JyZWFrcG9pbnRBY3Rpb25JRCk7CiAKICAgICAgICAgICAgICAgICBhY3Rpb25z
LmFwcGVuZChXVEZNb3ZlKGFjdGlvbikpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAg
ICAgICAgb3B0aW9uc1BheWxvYWQtPmdldEJvb2xlYW4oImF1dG9Db250aW51ZSJfcywgYXV0b0Nv
bnRpbnVlKTsKLSAgICAgICAgb3B0aW9uc1BheWxvYWQtPmdldEludGVnZXIoImlnbm9yZUNvdW50
Il9zLCBpZ25vcmVDb3VudCk7CisgICAgICAgIGF1dG9Db250aW51ZSA9IG9wdGlvbnMtPmdldEJv
b2xlYW4oUHJvdG9jb2w6OkRlYnVnZ2VyOjpCcmVha3BvaW50T3B0aW9uczo6YXV0b0NvbnRpbnVl
S2V5KS52YWx1ZU9yKGZhbHNlKTsKKyAgICAgICAgaWdub3JlQ291bnQgPSBvcHRpb25zLT5nZXRJ
bnRlZ2VyKFByb3RvY29sOjpEZWJ1Z2dlcjo6QnJlYWtwb2ludE9wdGlvbnM6Omlnbm9yZUNvdW50
S2V5KS52YWx1ZU9yKDApOwogICAgIH0KIAogICAgIHJldHVybiBjYWxsYmFjayhjb25kaXRpb24s
IFdURk1vdmUoYWN0aW9ucyksIGF1dG9Db250aW51ZSwgaWdub3JlQ291bnQpOwogfQogCi1PcHRp
b25hbDxJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpQcm90b2NvbEJyZWFrcG9pbnQ+IEluc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQ6OlByb3RvY29sQnJlYWtwb2ludDo6ZnJvbVBheWxvYWQoRXJyb3JTdHJp
bmcmIGVycm9yU3RyaW5nLCBKU0M6OlNvdXJjZUlEIHNvdXJjZUlELCB1bnNpZ25lZCBsaW5lTnVt
YmVyLCB1bnNpZ25lZCBjb2x1bW5OdW1iZXIsIGNvbnN0IEpTT046Ok9iamVjdCogb3B0aW9uc1Bh
eWxvYWQpCitPcHRpb25hbDxJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpQcm90b2NvbEJyZWFrcG9p
bnQ+IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OlByb3RvY29sQnJlYWtwb2ludDo6ZnJvbVBheWxv
YWQoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgSlNDOjpTb3VyY2VJRCBzb3Vy
Y2VJRCwgdW5zaWduZWQgbGluZU51bWJlciwgdW5zaWduZWQgY29sdW1uTnVtYmVyLCBSZWZQdHI8
SlNPTjo6T2JqZWN0PiYmIG9wdGlvbnMpCiB7Ci0gICAgcmV0dXJuIHBhcnNlQnJlYWtwb2ludE9w
dGlvbnM8T3B0aW9uYWw8UHJvdG9jb2xCcmVha3BvaW50Pj4oZXJyb3JTdHJpbmcsIG9wdGlvbnNQ
YXlsb2FkLCBbJl0gKGNvbnN0IFN0cmluZyYgY29uZGl0aW9uLCBKU0M6OkJyZWFrcG9pbnQ6OkFj
dGlvbnNWZWN0b3ImJiBhY3Rpb25zLCBib29sIGF1dG9Db250aW51ZSwgc2l6ZV90IGlnbm9yZUNv
dW50KSAtPiBPcHRpb25hbDxQcm90b2NvbEJyZWFrcG9pbnQ+IHsKKyAgICByZXR1cm4gcGFyc2VC
cmVha3BvaW50T3B0aW9uczxPcHRpb25hbDxQcm90b2NvbEJyZWFrcG9pbnQ+PihlcnJvclN0cmlu
ZywgV1RGTW92ZShvcHRpb25zKSwgWyZdIChjb25zdCBTdHJpbmcmIGNvbmRpdGlvbiwgSlNDOjpC
cmVha3BvaW50OjpBY3Rpb25zVmVjdG9yJiYgYWN0aW9ucywgYm9vbCBhdXRvQ29udGludWUsIHNp
emVfdCBpZ25vcmVDb3VudCkgLT4gT3B0aW9uYWw8UHJvdG9jb2xCcmVha3BvaW50PiB7CiAgICAg
ICAgIHJldHVybiBQcm90b2NvbEJyZWFrcG9pbnQoc291cmNlSUQsIGxpbmVOdW1iZXIsIGNvbHVt
bk51bWJlciwgY29uZGl0aW9uLCBXVEZNb3ZlKGFjdGlvbnMpLCBhdXRvQ29udGludWUsIGlnbm9y
ZUNvdW50KTsKICAgICB9KTsKIH0KIAotT3B0aW9uYWw8SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6
UHJvdG9jb2xCcmVha3BvaW50PiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpQcm90b2NvbEJyZWFr
cG9pbnQ6OmZyb21QYXlsb2FkKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5n
JiB1cmwsIGJvb2wgaXNSZWdleCwgdW5zaWduZWQgbGluZU51bWJlciwgdW5zaWduZWQgY29sdW1u
TnVtYmVyLCBjb25zdCBKU09OOjpPYmplY3QqIG9wdGlvbnNQYXlsb2FkKQorT3B0aW9uYWw8SW5z
cGVjdG9yRGVidWdnZXJBZ2VudDo6UHJvdG9jb2xCcmVha3BvaW50PiBJbnNwZWN0b3JEZWJ1Z2dl
ckFnZW50OjpQcm90b2NvbEJyZWFrcG9pbnQ6OmZyb21QYXlsb2FkKFByb3RvY29sOjpFcnJvclN0
cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgdXJsLCBib29sIGlzUmVnZXgsIHVuc2ln
bmVkIGxpbmVOdW1iZXIsIHVuc2lnbmVkIGNvbHVtbk51bWJlciwgUmVmUHRyPEpTT046Ok9iamVj
dD4mJiBvcHRpb25zKQogewotICAgIHJldHVybiBwYXJzZUJyZWFrcG9pbnRPcHRpb25zPE9wdGlv
bmFsPFByb3RvY29sQnJlYWtwb2ludD4+KGVycm9yU3RyaW5nLCBvcHRpb25zUGF5bG9hZCwgWyZd
IChjb25zdCBTdHJpbmcmIGNvbmRpdGlvbiwgSlNDOjpCcmVha3BvaW50OjpBY3Rpb25zVmVjdG9y
JiYgYWN0aW9ucywgYm9vbCBhdXRvQ29udGludWUsIHNpemVfdCBpZ25vcmVDb3VudCkgLT4gT3B0
aW9uYWw8UHJvdG9jb2xCcmVha3BvaW50PiB7CisgICAgcmV0dXJuIHBhcnNlQnJlYWtwb2ludE9w
dGlvbnM8T3B0aW9uYWw8UHJvdG9jb2xCcmVha3BvaW50Pj4oZXJyb3JTdHJpbmcsIFdURk1vdmUo
b3B0aW9ucyksIFsmXSAoY29uc3QgU3RyaW5nJiBjb25kaXRpb24sIEpTQzo6QnJlYWtwb2ludDo6
QWN0aW9uc1ZlY3RvciYmIGFjdGlvbnMsIGJvb2wgYXV0b0NvbnRpbnVlLCBzaXplX3QgaWdub3Jl
Q291bnQpIC0+IE9wdGlvbmFsPFByb3RvY29sQnJlYWtwb2ludD4gewogICAgICAgICByZXR1cm4g
UHJvdG9jb2xCcmVha3BvaW50KHVybCwgaXNSZWdleCwgbGluZU51bWJlciwgY29sdW1uTnVtYmVy
LCBjb25kaXRpb24sIFdURk1vdmUoYWN0aW9ucyksIGF1dG9Db250aW51ZSwgaWdub3JlQ291bnQp
OwogICAgIH0pOwogfQpAQCAtMjA3LDkgKzIwNiw5IEBAIGJvb2wgSW5zcGVjdG9yRGVidWdnZXJB
Z2VudDo6UHJvdG9jb2xCcmVha3BvaW50OjptYXRjaGVzU2NyaXB0VVJMKGNvbnN0IFN0cmluZyYK
ICAgICByZXR1cm4gbV91cmwgPT0gc2NyaXB0VVJMOwogfQogCi1SZWZQdHI8SlNDOjpCcmVha3Bv
aW50PiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkZWJ1Z2dlckJyZWFrcG9pbnRGcm9tUGF5bG9h
ZChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IEpTT046Ok9iamVjdCogb3B0aW9uc1Bh
eWxvYWQpCitSZWZQdHI8SlNDOjpCcmVha3BvaW50PiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojpk
ZWJ1Z2dlckJyZWFrcG9pbnRGcm9tUGF5bG9hZChQcm90b2NvbDo6RXJyb3JTdHJpbmcmIGVycm9y
U3RyaW5nLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIG9wdGlvbnMpCiB7Ci0gICAgcmV0dXJuIHBh
cnNlQnJlYWtwb2ludE9wdGlvbnM8UmVmUHRyPEpTQzo6QnJlYWtwb2ludD4+KGVycm9yU3RyaW5n
LCBvcHRpb25zUGF5bG9hZCwgW10gKGNvbnN0IFN0cmluZyYgY29uZGl0aW9uLCBKU0M6OkJyZWFr
cG9pbnQ6OkFjdGlvbnNWZWN0b3ImJiBhY3Rpb25zLCBib29sIGF1dG9Db250aW51ZSwgc2l6ZV90
IGlnbm9yZUNvdW50KSB7CisgICAgcmV0dXJuIHBhcnNlQnJlYWtwb2ludE9wdGlvbnM8UmVmUHRy
PEpTQzo6QnJlYWtwb2ludD4+KGVycm9yU3RyaW5nLCBXVEZNb3ZlKG9wdGlvbnMpLCBbXSAoY29u
c3QgU3RyaW5nJiBjb25kaXRpb24sIEpTQzo6QnJlYWtwb2ludDo6QWN0aW9uc1ZlY3RvciYmIGFj
dGlvbnMsIGJvb2wgYXV0b0NvbnRpbnVlLCBzaXplX3QgaWdub3JlQ291bnQpIHsKICAgICAgICAg
cmV0dXJuIEpTQzo6QnJlYWtwb2ludDo6Y3JlYXRlKEpTQzo6bm9CcmVha3BvaW50SUQsIGNvbmRp
dGlvbiwgV1RGTW92ZShhY3Rpb25zKSwgYXV0b0NvbnRpbnVlLCBpZ25vcmVDb3VudCk7CiAgICAg
fSk7CiB9CkBAIC0yMzQsMTAgKzIzMywxMCBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6
OmRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChGcm9udGVuZFJvdXRlciosIEJhY2tlbgogdm9p
ZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChE
aXNjb25uZWN0UmVhc29uIHJlYXNvbikKIHsKICAgICBpZiAoZW5hYmxlZCgpKQotICAgICAgICBk
aXNhYmxlKHJlYXNvbiA9PSBEaXNjb25uZWN0UmVhc29uOjpJbnNwZWN0ZWRUYXJnZXREZXN0cm95
ZWQpOworICAgICAgICBpbnRlcm5hbERpc2FibGUocmVhc29uID09IERpc2Nvbm5lY3RSZWFzb246
Okluc3BlY3RlZFRhcmdldERlc3Ryb3llZCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJB
Z2VudDo6ZW5hYmxlKCkKK3ZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6aW50ZXJuYWxFbmFi
bGUoKQogewogICAgIG1fZW5hYmxlZCA9IHRydWU7CiAKQEAgLTI1Nyw3ICsyNTYsNyBAQCB2b2lk
IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmVuYWJsZSgpCiAgICAgfQogfQogCi12b2lkIEluc3Bl
Y3RvckRlYnVnZ2VyQWdlbnQ6OmRpc2FibGUoYm9vbCBpc0JlaW5nRGVzdHJveWVkKQordm9pZCBJ
bnNwZWN0b3JEZWJ1Z2dlckFnZW50OjppbnRlcm5hbERpc2FibGUoYm9vbCBpc0JlaW5nRGVzdHJv
eWVkKQogewogICAgIGZvciAoYXV0byogbGlzdGVuZXIgOiBjb3B5VG9WZWN0b3IobV9saXN0ZW5l
cnMpKQogICAgICAgICBsaXN0ZW5lci0+ZGVidWdnZXJXYXNEaXNhYmxlZCgpOwpAQCAtMjc3LDE5
ICsyNzYsMjEgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkaXNhYmxlKGJvb2wgaXNC
ZWluZ0Rlc3Ryb3llZCkKICAgICBtX2VuYWJsZWQgPSBmYWxzZTsKIH0KIAotdm9pZCBJbnNwZWN0
b3JEZWJ1Z2dlckFnZW50OjplbmFibGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nKQorUHJvdG9j
b2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZW5hYmxlKCkK
IHsKLSAgICBpZiAoZW5hYmxlZCgpKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIkRlYnVnZ2Vy
IGRvbWFpbiBhbHJlYWR5IGVuYWJsZWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAg
aWYgKGVuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJEZWJ1Z2dlciBk
b21haW4gYWxyZWFkeSBlbmFibGVkIl9zKTsKIAotICAgIGVuYWJsZSgpOworICAgIGludGVybmFs
RW5hYmxlKCk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckRlYnVnZ2Vy
QWdlbnQ6OmRpc2FibGUoRXJyb3JTdHJpbmcmKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9p
ZD4gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlzYWJsZSgpCiB7Ci0gICAgZGlzYWJsZShmYWxz
ZSk7CisgICAgaW50ZXJuYWxEaXNhYmxlKGZhbHNlKTsKKworICAgIHJldHVybiB7IH07CiB9CiAK
IGJvb2wgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6YnJlYWtwb2ludHNBY3RpdmUoKSBjb25zdApA
QCAtMjk3LDI4ICsyOTgsMzAgQEAgYm9vbCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpicmVha3Bv
aW50c0FjdGl2ZSgpIGNvbnN0CiAgICAgcmV0dXJuIG1fZGVidWdnZXIuYnJlYWtwb2ludHNBY3Rp
dmUoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZXRBc3luY1N0YWNrVHJh
Y2VEZXB0aChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBkZXB0aCkKK1Byb3RvY29sOjpF
cnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldEFzeW5jU3RhY2tU
cmFjZURlcHRoKGludCBkZXB0aCkKIHsKICAgICBpZiAobV9hc3luY1N0YWNrVHJhY2VEZXB0aCA9
PSBkZXB0aCkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4geyB9OwogCi0gICAgaWYg
KGRlcHRoIDwgMCkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJVbmV4cGVjdGVkIG5lZ2F0aXZl
IGRlcHRoIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmIChkZXB0aCA8IDApCisg
ICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiVW5leHBlY3RlZCBuZWdhdGl2ZSBkZXB0aCJf
cyk7CiAKICAgICBtX2FzeW5jU3RhY2tUcmFjZURlcHRoID0gZGVwdGg7CiAKICAgICBpZiAoIW1f
YXN5bmNTdGFja1RyYWNlRGVwdGgpCiAgICAgICAgIGNsZWFyQXN5bmNTdGFja1RyYWNlRGF0YSgp
OworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojpz
ZXRCcmVha3BvaW50c0FjdGl2ZShFcnJvclN0cmluZyYsIGJvb2wgYWN0aXZlKQorUHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0QnJlYWtwb2lu
dHNBY3RpdmUoYm9vbCBhY3RpdmUpCiB7CiAgICAgaWYgKGFjdGl2ZSkKICAgICAgICAgbV9kZWJ1
Z2dlci5hY3RpdmF0ZUJyZWFrcG9pbnRzKCk7CiAgICAgZWxzZQogICAgICAgICBtX2RlYnVnZ2Vy
LmRlYWN0aXZhdGVCcmVha3BvaW50cygpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAogYm9vbCBJ
bnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojppc1BhdXNlZCgpIGNvbnN0CkBAIC0zNDIsMjAgKzM0NSwy
MCBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnVwZGF0ZVBhdXNlUmVhc29uQW5kRGF0
YShEZWJ1Z2dlckZyb250ZW5kRGlzcGF0Y2hlcgogICAgIG1fcGF1c2VEYXRhID0gV1RGTW92ZShk
YXRhKTsKIH0KIAotc3RhdGljIFJlZlB0cjxKU09OOjpPYmplY3Q+IGJ1aWxkQXNzZXJ0UGF1c2VS
ZWFzb24oY29uc3QgU3RyaW5nJiBtZXNzYWdlKQorc3RhdGljIFJlZjxKU09OOjpPYmplY3Q+IGJ1
aWxkQXNzZXJ0UGF1c2VSZWFzb24oY29uc3QgU3RyaW5nJiBtZXNzYWdlKQogewogICAgIGF1dG8g
cmVhc29uID0gUHJvdG9jb2w6OkRlYnVnZ2VyOjpBc3NlcnRQYXVzZVJlYXNvbjo6Y3JlYXRlKCku
cmVsZWFzZSgpOwogICAgIGlmICghbWVzc2FnZS5pc051bGwoKSkKICAgICAgICAgcmVhc29uLT5z
ZXRNZXNzYWdlKG1lc3NhZ2UpOwotICAgIHJldHVybiByZWFzb24tPm9wZW5BY2Nlc3NvcnMoKTsK
KyAgICByZXR1cm4gKnJlYXNvbi0+YXNPYmplY3QoKTsKIH0KIAotc3RhdGljIFJlZlB0cjxKU09O
OjpPYmplY3Q+IGJ1aWxkQ1NQVmlvbGF0aW9uUGF1c2VSZWFzb24oY29uc3QgU3RyaW5nJiBkaXJl
Y3RpdmVUZXh0KQorc3RhdGljIFJlZjxKU09OOjpPYmplY3Q+IGJ1aWxkQ1NQVmlvbGF0aW9uUGF1
c2VSZWFzb24oY29uc3QgU3RyaW5nJiBkaXJlY3RpdmVUZXh0KQogewogICAgIGF1dG8gcmVhc29u
ID0gUHJvdG9jb2w6OkRlYnVnZ2VyOjpDU1BWaW9sYXRpb25QYXVzZVJlYXNvbjo6Y3JlYXRlKCkK
ICAgICAgICAgLnNldERpcmVjdGl2ZShkaXJlY3RpdmVUZXh0KQogICAgICAgICAucmVsZWFzZSgp
OwotICAgIHJldHVybiByZWFzb24tPm9wZW5BY2Nlc3NvcnMoKTsKKyAgICByZXR1cm4gKnJlYXNv
bi0+YXNPYmplY3QoKTsKIH0KIAogUmVmUHRyPEpTT046Ok9iamVjdD4gSW5zcGVjdG9yRGVidWdn
ZXJBZ2VudDo6YnVpbGRCcmVha3BvaW50UGF1c2VSZWFzb24oSlNDOjpCcmVha3BvaW50SUQgZGVi
dWdnZXJCcmVha3BvaW50SUQpCkBAIC0zNjgsNyArMzcxLDcgQEAgUmVmUHRyPEpTT046Ok9iamVj
dD4gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6YnVpbGRCcmVha3BvaW50UGF1c2VSZWFzb24oSlND
OjpCcmUKICAgICAgICAgICAgICAgICBhdXRvIHJlYXNvbiA9IFByb3RvY29sOjpEZWJ1Z2dlcjo6
QnJlYWtwb2ludFBhdXNlUmVhc29uOjpjcmVhdGUoKQogICAgICAgICAgICAgICAgICAgICAuc2V0
QnJlYWtwb2ludElkKHByb3RvY29sQnJlYWtwb2ludElEKQogICAgICAgICAgICAgICAgICAgICAu
cmVsZWFzZSgpOwotICAgICAgICAgICAgICAgIHJldHVybiByZWFzb24tPm9wZW5BY2Nlc3NvcnMo
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVhc29uLT5hc09iamVjdCgpOwogICAgICAgICAg
ICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtMzg2LDcgKzM4OSwxMSBAQCBSZWZQdHI8SlNPTjo6
T2JqZWN0PiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpidWlsZEV4Y2VwdGlvblBhdXNlUmVhc29u
KEpTQzo6SlNWYQogICAgIGlmIChpbmplY3RlZFNjcmlwdC5oYXNOb1ZhbHVlKCkpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJuIGluamVjdGVkU2NyaXB0LndyYXBPYmplY3Qo
ZXhjZXB0aW9uLCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpiYWNrdHJhY2VPYmplY3RHcm91cCkt
Pm9wZW5BY2Nlc3NvcnMoKTsKKyAgICBhdXRvIGV4Y2VwdGlvblZhbHVlID0gaW5qZWN0ZWRTY3Jp
cHQud3JhcE9iamVjdChleGNlcHRpb24sIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmJhY2t0cmFj
ZU9iamVjdEdyb3VwKTsKKyAgICBpZiAoIWV4Y2VwdGlvblZhbHVlKQorICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKworICAgIHJldHVybiBleGNlcHRpb25WYWx1ZS0+YXNPYmplY3QoKTsKIH0KIAog
dm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpoYW5kbGVDb25zb2xlQXNzZXJ0KGNvbnN0IFN0
cmluZyYgbWVzc2FnZSkKQEAgLTQ5Miw3ICs0OTksNyBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2Vy
QWdlbnQ6OmRpZERpc3BhdGNoQXN5bmNDYWxsKCkKICAgICAgICAgbV9wZW5kaW5nQXN5bmNDYWxs
cy5yZW1vdmUoaWRlbnRpZmllcik7CiB9CiAKLXN0YXRpYyBSZWZQdHI8UHJvdG9jb2w6OkRlYnVn
Z2VyOjpMb2NhdGlvbj4gYnVpbGREZWJ1Z2dlckxvY2F0aW9uKGNvbnN0IEpTQzo6QnJlYWtwb2lu
dCYgZGVidWdnZXJCcmVha3BvaW50KQorc3RhdGljIFJlZjxQcm90b2NvbDo6RGVidWdnZXI6Okxv
Y2F0aW9uPiBidWlsZERlYnVnZ2VyTG9jYXRpb24oY29uc3QgSlNDOjpCcmVha3BvaW50JiBkZWJ1
Z2dlckJyZWFrcG9pbnQpCiB7CiAgICAgQVNTRVJUKGRlYnVnZ2VyQnJlYWtwb2ludC5pc1Jlc29s
dmVkKCkpOwogCkBAIC01MDEsNTAgKzUwOCw0OSBAQCBzdGF0aWMgUmVmUHRyPFByb3RvY29sOjpE
ZWJ1Z2dlcjo6TG9jYXRpb24+IGJ1aWxkRGVidWdnZXJMb2NhdGlvbihjb25zdCBKU0M6OkJyZQog
ICAgICAgICAuc2V0TGluZU51bWJlcihkZWJ1Z2dlckJyZWFrcG9pbnQubGluZU51bWJlcigpKQog
ICAgICAgICAucmVsZWFzZSgpOwogICAgIGxvY2F0aW9uLT5zZXRDb2x1bW5OdW1iZXIoZGVidWdn
ZXJCcmVha3BvaW50LmNvbHVtbk51bWJlcigpKTsKLQogICAgIHJldHVybiBsb2NhdGlvbjsKIH0K
IAotc3RhdGljIGJvb2wgcGFyc2VMb2NhdGlvbihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNv
bnN0IEpTT046Ok9iamVjdCYgbG9jYXRpb24sIEpTQzo6U291cmNlSUQmIHNvdXJjZUlELCB1bnNp
Z25lZCYgbGluZU51bWJlciwgdW5zaWduZWQmIGNvbHVtbk51bWJlcikKK3N0YXRpYyBib29sIHBh
cnNlTG9jYXRpb24oUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgSlNP
Tjo6T2JqZWN0JiBsb2NhdGlvbiwgSlNDOjpTb3VyY2VJRCYgc291cmNlSUQsIHVuc2lnbmVkJiBs
aW5lTnVtYmVyLCB1bnNpZ25lZCYgY29sdW1uTnVtYmVyKQogewotICAgIGlmICghbG9jYXRpb24u
Z2V0SW50ZWdlcigibGluZU51bWJlciJfcywgbGluZU51bWJlcikpIHsKKyAgICBhdXRvIGxpbmVO
dW1iZXJWYWx1ZSA9IGxvY2F0aW9uLmdldEludGVnZXIoUHJvdG9jb2w6OkRlYnVnZ2VyOjpMb2Nh
dGlvbjo6bGluZU51bWJlcktleSk7CisgICAgaWYgKCFsaW5lTnVtYmVyVmFsdWUpIHsKICAgICAg
ICAgZXJyb3JTdHJpbmcgPSAiVW5leHBlY3RlZCBub24taW50ZWdlciBsaW5lTnVtYmVyIGluIGdp
dmVuIGxvY2F0aW9uIl9zOwogICAgICAgICBzb3VyY2VJRCA9IEpTQzo6bm9Tb3VyY2VJRDsKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIFN0cmluZyBzY3JpcHRJRFN0cjsKLSAg
ICBpZiAoIWxvY2F0aW9uLmdldFN0cmluZygic2NyaXB0SWQiX3MsIHNjcmlwdElEU3RyKSkgewor
ICAgIGxpbmVOdW1iZXIgPSAqbGluZU51bWJlclZhbHVlOworCisgICAgYXV0byBzY3JpcHRJRFN0
ciA9IGxvY2F0aW9uLmdldFN0cmluZyhQcm90b2NvbDo6RGVidWdnZXI6OkxvY2F0aW9uOjpzY3Jp
cHRJZEtleSk7CisgICAgaWYgKCFzY3JpcHRJRFN0cikgewogICAgICAgICBzb3VyY2VJRCA9IEpT
Qzo6bm9Tb3VyY2VJRDsKICAgICAgICAgZXJyb3JTdHJpbmcgPSAiVW5leGVwY3RlZCBub24tc3Ry
aW5nIHNjcmlwdElkIGluIGdpdmVuIGxvY2F0aW9uIl9zOwogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQogCiAgICAgc291cmNlSUQgPSBzY3JpcHRJRFN0ci50b0ludFB0cigpOwotICAgIGNv
bHVtbk51bWJlciA9IDA7Ci0gICAgbG9jYXRpb24uZ2V0SW50ZWdlcigiY29sdW1uTnVtYmVyIl9z
LCBjb2x1bW5OdW1iZXIpOworICAgIGNvbHVtbk51bWJlciA9IGxvY2F0aW9uLmdldEludGVnZXIo
UHJvdG9jb2w6OkRlYnVnZ2VyOjpMb2NhdGlvbjo6Y29sdW1uTnVtYmVyS2V5KS52YWx1ZU9yKDAp
OwogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNl
dEJyZWFrcG9pbnRCeVVybChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBsaW5lTnVtYmVy
LCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsVVJMLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsVVJMUmVn
ZXgsIGNvbnN0IGludCogb3B0aW9uYWxDb2x1bW5OdW1iZXIsIGNvbnN0IEpTT046Ok9iamVjdCog
b3B0aW9uc1BheWxvYWQsIFByb3RvY29sOjpEZWJ1Z2dlcjo6QnJlYWtwb2ludElkKiBvdXRCcmVh
a3BvaW50SWQsIFJlZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpEZWJ1Z2dlcjo6TG9jYXRp
b24+PiYgb3V0TG9jYXRpb25zKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8c3RkOjp0dXBsZTxQ
cm90b2NvbDo6RGVidWdnZXI6OkJyZWFrcG9pbnRJZCwgUmVmPEpTT046OkFycmF5T2Y8UHJvdG9j
b2w6OkRlYnVnZ2VyOjpMb2NhdGlvbj4+Pj4gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0QnJl
YWtwb2ludEJ5VXJsKGludCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3Ry
aW5nJiB1cmxSZWdleCwgT3B0aW9uYWw8aW50PiYmIGNvbHVtbk51bWJlciwgUmVmUHRyPEpTT046
Ok9iamVjdD4mJiBvcHRpb25zKQogewotICAgIGlmICghb3B0aW9uYWxVUkwgPT0gIW9wdGlvbmFs
VVJMUmVnZXgpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiRWl0aGVyIHVybCBvciB1cmxSZWdl
eCBtdXN0IGJlIHNwZWNpZmllZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAo
IXVybCA9PSAhdXJsUmVnZXgpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiRWl0aGVy
IHVybCBvciB1cmxSZWdleCBtdXN0IGJlIHNwZWNpZmllZCJfcyk7CiAKLSAgICBhdXRvIHByb3Rv
Y29sQnJlYWtwb2ludCA9IFByb3RvY29sQnJlYWtwb2ludDo6ZnJvbVBheWxvYWQoZXJyb3JTdHJp
bmcsIG9wdGlvbmFsVVJMID8gKm9wdGlvbmFsVVJMIDogKm9wdGlvbmFsVVJMUmVnZXgsICEhb3B0
aW9uYWxVUkxSZWdleCwgbGluZU51bWJlciwgb3B0aW9uYWxDb2x1bW5OdW1iZXIgPyAqb3B0aW9u
YWxDb2x1bW5OdW1iZXIgOiAwLCBvcHRpb25zUGF5bG9hZCk7CisgICAgUHJvdG9jb2w6OkVycm9y
U3RyaW5nIGVycm9yU3RyaW5nOworCisgICAgYXV0byBwcm90b2NvbEJyZWFrcG9pbnQgPSBQcm90
b2NvbEJyZWFrcG9pbnQ6OmZyb21QYXlsb2FkKGVycm9yU3RyaW5nLCAhIXVybCA/IHVybCA6IHVy
bFJlZ2V4LCAhIXVybFJlZ2V4LCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIudmFsdWVPcigwKSwg
V1RGTW92ZShvcHRpb25zKSk7CiAgICAgaWYgKCFwcm90b2NvbEJyZWFrcG9pbnQpCi0gICAgICAg
IHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAot
ICAgIGlmIChtX3Byb3RvY29sQnJlYWtwb2ludEZvclByb3RvY29sQnJlYWtwb2ludElELmNvbnRh
aW5zKHByb3RvY29sQnJlYWtwb2ludC0+aWQoKSkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAi
QnJlYWtwb2ludCBmb3IgZ2l2ZW4gbG9jYXRpb24gYWxyZWFkeSBleGlzdHMuIl9zOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQorICAgIGlmIChtX3Byb3RvY29sQnJlYWtwb2ludEZvclByb3RvY29s
QnJlYWtwb2ludElELmNvbnRhaW5zKHByb3RvY29sQnJlYWtwb2ludC0+aWQoKSkpCisgICAgICAg
IHJldHVybiBtYWtlVW5leHBlY3RlZCgiQnJlYWtwb2ludCBmb3IgZ2l2ZW4gbG9jYXRpb24gYWxy
ZWFkeSBleGlzdHMuIl9zKTsKIAogICAgIG1fcHJvdG9jb2xCcmVha3BvaW50Rm9yUHJvdG9jb2xC
cmVha3BvaW50SUQuc2V0KHByb3RvY29sQnJlYWtwb2ludC0+aWQoKSwgKnByb3RvY29sQnJlYWtw
b2ludCk7CiAKLSAgICBvdXRMb2NhdGlvbnMgPSBKU09OOjpBcnJheU9mPFByb3RvY29sOjpEZWJ1
Z2dlcjo6TG9jYXRpb24+OjpjcmVhdGUoKTsKKyAgICBhdXRvIGxvY2F0aW9ucyA9IEpTT046OkFy
cmF5T2Y8UHJvdG9jb2w6OkRlYnVnZ2VyOjpMb2NhdGlvbj46OmNyZWF0ZSgpOwogCiAgICAgZm9y
IChhdXRvJiBbc291cmNlSUQsIHNjcmlwdF0gOiBtX3NjcmlwdHMpIHsKICAgICAgICAgU3RyaW5n
IHNjcmlwdFVSTEZvckJyZWFrcG9pbnRzID0gIXNjcmlwdC5zb3VyY2VVUkwuaXNFbXB0eSgpID8g
c2NyaXB0LnNvdXJjZVVSTCA6IHNjcmlwdC51cmw7CkBAIC01NjEsMjkgKzU2NywyOSBAQCB2b2lk
IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldEJyZWFrcG9pbnRCeVVybChFcnJvclN0cmluZyYg
ZXJyb3JTdHJpbmcsIGludCBsaQogCiAgICAgICAgIGRpZFNldEJyZWFrcG9pbnQoKnByb3RvY29s
QnJlYWtwb2ludCwgZGVidWdnZXJCcmVha3BvaW50KTsKIAotICAgICAgICBvdXRMb2NhdGlvbnMt
PmFkZEl0ZW0oYnVpbGREZWJ1Z2dlckxvY2F0aW9uKGRlYnVnZ2VyQnJlYWtwb2ludCkpOworICAg
ICAgICBsb2NhdGlvbnMtPmFkZEl0ZW0oYnVpbGREZWJ1Z2dlckxvY2F0aW9uKGRlYnVnZ2VyQnJl
YWtwb2ludCkpOwogICAgIH0KIAotICAgICpvdXRCcmVha3BvaW50SWQgPSBwcm90b2NvbEJyZWFr
cG9pbnQtPmlkKCk7CisgICAgcmV0dXJuIHsgeyBwcm90b2NvbEJyZWFrcG9pbnQtPmlkKCksIFdU
Rk1vdmUobG9jYXRpb25zKSB9IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6
c2V0QnJlYWtwb2ludChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IEpTT046Ok9iamVj
dCYgbG9jYXRpb24sIGNvbnN0IEpTT046Ok9iamVjdCogb3B0aW9uc1BheWxvYWQsIFByb3RvY29s
OjpEZWJ1Z2dlcjo6QnJlYWtwb2ludElkKiBvdXRCcmVha3BvaW50SWQsIFJlZlB0cjxQcm90b2Nv
bDo6RGVidWdnZXI6OkxvY2F0aW9uPiYgb3V0QWN0dWFsTG9jYXRpb24pCitQcm90b2NvbDo6RXJy
b3JTdHJpbmdPcjxzdGQ6OnR1cGxlPFByb3RvY29sOjpEZWJ1Z2dlcjo6QnJlYWtwb2ludElkLCBS
ZWY8UHJvdG9jb2w6OkRlYnVnZ2VyOjpMb2NhdGlvbj4+PiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50
OjpzZXRCcmVha3BvaW50KFJlZjxKU09OOjpPYmplY3Q+JiYgbG9jYXRpb24sIFJlZlB0cjxKU09O
OjpPYmplY3Q+JiYgb3B0aW9ucykKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JT
dHJpbmc7CisKICAgICBKU0M6OlNvdXJjZUlEIHNvdXJjZUlEOwogICAgIHVuc2lnbmVkIGxpbmVO
dW1iZXI7CiAgICAgdW5zaWduZWQgY29sdW1uTnVtYmVyOwogICAgIGlmICghcGFyc2VMb2NhdGlv
bihlcnJvclN0cmluZywgbG9jYXRpb24sIHNvdXJjZUlELCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1i
ZXIpKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJv
clN0cmluZyk7CiAKICAgICBhdXRvIHNjcmlwdEl0ZXJhdG9yID0gbV9zY3JpcHRzLmZpbmQoc291
cmNlSUQpOwotICAgIGlmIChzY3JpcHRJdGVyYXRvciA9PSBtX3NjcmlwdHMuZW5kKCkpIHsKLSAg
ICAgICAgZXJyb3JTdHJpbmcgPSAiTWlzc2luZyBzY3JpcHQgZm9yIHNjcmlwdElkIGluIGdpdmVu
IGxvY2F0aW9uIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmIChzY3JpcHRJdGVy
YXRvciA9PSBtX3NjcmlwdHMuZW5kKCkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgi
TWlzc2luZyBzY3JpcHQgZm9yIHNjcmlwdElkIGluIGdpdmVuIGxvY2F0aW9uIl9zKTsKIAotICAg
IGF1dG8gcHJvdG9jb2xCcmVha3BvaW50ID0gUHJvdG9jb2xCcmVha3BvaW50Ojpmcm9tUGF5bG9h
ZChlcnJvclN0cmluZywgc291cmNlSUQsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlciwgb3B0aW9u
c1BheWxvYWQpOworICAgIGF1dG8gcHJvdG9jb2xCcmVha3BvaW50ID0gUHJvdG9jb2xCcmVha3Bv
aW50Ojpmcm9tUGF5bG9hZChlcnJvclN0cmluZywgc291cmNlSUQsIGxpbmVOdW1iZXIsIGNvbHVt
bk51bWJlciwgV1RGTW92ZShvcHRpb25zKSk7CiAgICAgaWYgKCFwcm90b2NvbEJyZWFrcG9pbnQp
Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3Ry
aW5nKTsKIAogICAgIC8vIERvbid0IHNhdmUgYHByb3RvY29sQnJlYWtwb2ludGAgaW4gYG1fcHJv
dG9jb2xCcmVha3BvaW50Rm9yUHJvdG9jb2xCcmVha3BvaW50SURgIGJlY2F1c2UgaXQKICAgICAv
LyB3YXMgc2V0IHNwZWNpZmljYWxseSBmb3IgdGhlIGdpdmVuIGBzb3VyY2VJRGAsIHdoaWNoIGlz
IHVuaXF1ZSwgbWVhbmluZyB0aGF0IGl0IHdpbGwgbmV2ZXIKQEAgLTU5MSwyMCArNTk3LDE1IEBA
IHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0QnJlYWtwb2ludChFcnJvclN0cmluZyYg
ZXJyb3JTdHJpbmcsIGNvbnN0IEpTT046CiAKICAgICBhdXRvIGRlYnVnZ2VyQnJlYWtwb2ludCA9
IHByb3RvY29sQnJlYWtwb2ludC0+Y3JlYXRlRGVidWdnZXJCcmVha3BvaW50KG1fbmV4dERlYnVn
Z2VyQnJlYWtwb2ludElEKyssIHNvdXJjZUlEKTsKIAotICAgIGlmICghcmVzb2x2ZUJyZWFrcG9p
bnQoc2NyaXB0SXRlcmF0b3ItPnZhbHVlLCBkZWJ1Z2dlckJyZWFrcG9pbnQpKSB7Ci0gICAgICAg
IGVycm9yU3RyaW5nID0gIkNvdWxkIG5vdCByZXNvbHZlIGJyZWFrcG9pbnQiX3M7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9CisgICAgaWYgKCFyZXNvbHZlQnJlYWtwb2ludChzY3JpcHRJdGVyYXRv
ci0+dmFsdWUsIGRlYnVnZ2VyQnJlYWtwb2ludCkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBl
Y3RlZCgiQ291bGQgbm90IHJlc29sdmUgYnJlYWtwb2ludCJfcyk7CiAKLSAgICBpZiAoIXNldEJy
ZWFrcG9pbnQoZGVidWdnZXJCcmVha3BvaW50KSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJC
cmVha3BvaW50IGZvciBnaXZlbiBsb2NhdGlvbiBhbHJlYWR5IGV4aXN0cyJfczsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KKyAgICBpZiAoIXNldEJyZWFrcG9pbnQoZGVidWdnZXJCcmVha3BvaW50
KSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJCcmVha3BvaW50IGZvciBnaXZlbiBs
b2NhdGlvbiBhbHJlYWR5IGV4aXN0cyJfcyk7CiAKICAgICBkaWRTZXRCcmVha3BvaW50KCpwcm90
b2NvbEJyZWFrcG9pbnQsIGRlYnVnZ2VyQnJlYWtwb2ludCk7CiAKLSAgICBvdXRBY3R1YWxMb2Nh
dGlvbiA9IGJ1aWxkRGVidWdnZXJMb2NhdGlvbihkZWJ1Z2dlckJyZWFrcG9pbnQpOwotICAgICpv
dXRCcmVha3BvaW50SWQgPSBwcm90b2NvbEJyZWFrcG9pbnQtPmlkKCk7CisgICAgcmV0dXJuIHsg
eyBwcm90b2NvbEJyZWFrcG9pbnQtPmlkKCksIGJ1aWxkRGVidWdnZXJMb2NhdGlvbihkZWJ1Z2dl
ckJyZWFrcG9pbnQpIH0gfTsKIH0KIAogdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkaWRT
ZXRCcmVha3BvaW50KFByb3RvY29sQnJlYWtwb2ludCYgcHJvdG9jb2xCcmVha3BvaW50LCBKU0M6
OkJyZWFrcG9pbnQmIGRlYnVnZ2VyQnJlYWtwb2ludCkKQEAgLTYzMCw3ICs2MzEsNyBAQCBib29s
IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldEJyZWFrcG9pbnQoSlNDOjpCcmVha3BvaW50JiBk
ZWJ1Z2dlckJyZWFrcG9pbnQpCiAgICAgcmV0dXJuIG1fZGVidWdnZXIuc2V0QnJlYWtwb2ludChk
ZWJ1Z2dlckJyZWFrcG9pbnQpOwogfQogCi12b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnJl
bW92ZUJyZWFrcG9pbnQoRXJyb3JTdHJpbmcmLCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpE
ZWJ1Z2dlcjo6QnJlYWtwb2ludElkJiBwcm90b2NvbEJyZWFrcG9pbnRJRCkKK1Byb3RvY29sOjpF
cnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnJlbW92ZUJyZWFrcG9p
bnQoY29uc3QgUHJvdG9jb2w6OkRlYnVnZ2VyOjpCcmVha3BvaW50SWQmIHByb3RvY29sQnJlYWtw
b2ludElEKQogewogICAgIG1fcHJvdG9jb2xCcmVha3BvaW50Rm9yUHJvdG9jb2xCcmVha3BvaW50
SUQucmVtb3ZlKHByb3RvY29sQnJlYWtwb2ludElEKTsKIApAQCAtNjQxLDI0ICs2NDIsMzQgQEAg
dm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpyZW1vdmVCcmVha3BvaW50KEVycm9yU3RyaW5n
JiwgY29uc3QgSW5zcGVjdG9yOjpQcm8KICAgICAgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9ja2Vy
KG1fZGVidWdnZXIudm0oKSk7CiAgICAgICAgIG1fZGVidWdnZXIucmVtb3ZlQnJlYWtwb2ludChk
ZWJ1Z2dlckJyZWFrcG9pbnQpOwogICAgIH0KKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQg
SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6Y29udGludWVVbnRpbE5leHRSdW5Mb29wKEVycm9yU3Ry
aW5nJiBlcnJvclN0cmluZykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQ6OmNvbnRpbnVlVW50aWxOZXh0UnVuTG9vcCgpCiB7Ci0gICAgaWYgKCFh
c3NlcnRQYXVzZWQoZXJyb3JTdHJpbmcpKQotICAgICAgICByZXR1cm47CisgICAgUHJvdG9jb2w6
OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOwogCi0gICAgcmVzdW1lKGVycm9yU3RyaW5nKTsKKyAg
ICBpZiAoIWFzc2VydFBhdXNlZChlcnJvclN0cmluZykpCisgICAgICAgIHJldHVybiBtYWtlVW5l
eHBlY3RlZChlcnJvclN0cmluZyk7CisKKyAgICBhdXRvIHJlc3VtZVJlc3VsdCA9IHJlc3VtZSgp
OworICAgIGlmICghcmVzdW1lUmVzdWx0KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQo
cmVzdW1lUmVzdWx0LmVycm9yKCkpOwogCiAgICAgbV9lbmFibGVQYXVzZVdoZW5JZGxlID0gdHJ1
ZTsKIAogICAgIHJlZ2lzdGVySWRsZUhhbmRsZXIoKTsKKworICAgIHJldHVybiB7IH07CiB9CiAK
LXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6Y29udGludWVUb0xvY2F0aW9uKEVycm9yU3Ry
aW5nJiBlcnJvclN0cmluZywgY29uc3QgSlNPTjo6T2JqZWN0JiBsb2NhdGlvbikKK1Byb3RvY29s
OjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmNvbnRpbnVlVG9M
b2NhdGlvbihSZWY8SlNPTjo6T2JqZWN0PiYmIGxvY2F0aW9uKQogeworICAgIFByb3RvY29sOjpF
cnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIGlmICghYXNzZXJ0UGF1c2VkKGVycm9yU3Ry
aW5nKSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJy
b3JTdHJpbmcpOwogCiAgICAgaWYgKG1fY29udGludWVUb0xvY2F0aW9uRGVidWdnZXJCcmVha3Bv
aW50KSB7CiAgICAgICAgIG1fZGVidWdnZXIucmVtb3ZlQnJlYWtwb2ludCgqbV9jb250aW51ZVRv
TG9jYXRpb25EZWJ1Z2dlckJyZWFrcG9pbnQpOwpAQCAtNjY5LDE5ICs2ODAsMTggQEAgdm9pZCBJ
bnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojpjb250aW51ZVRvTG9jYXRpb24oRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBjb25zdAogICAgIHVuc2lnbmVkIGxpbmVOdW1iZXI7CiAgICAgdW5zaWduZWQg
Y29sdW1uTnVtYmVyOwogICAgIGlmICghcGFyc2VMb2NhdGlvbihlcnJvclN0cmluZywgbG9jYXRp
b24sIHNvdXJjZUlELCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIpKQotICAgICAgICByZXR1cm47
CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAgICBhdXRv
IHNjcmlwdEl0ZXJhdG9yID0gbV9zY3JpcHRzLmZpbmQoc291cmNlSUQpOwogICAgIGlmIChzY3Jp
cHRJdGVyYXRvciA9PSBtX3NjcmlwdHMuZW5kKCkpIHsKICAgICAgICAgbV9kZWJ1Z2dlci5jb250
aW51ZVByb2dyYW0oKTsKICAgICAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPnJlc3VtZWQoKTsK
LSAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWlzc2luZyBzY3JpcHQgZm9yIHNjcmlwdElkIGluIGdp
dmVuIGxvY2F0aW9uIl9zOwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5l
eHBlY3RlZCgiTWlzc2luZyBzY3JpcHQgZm9yIHNjcmlwdElkIGluIGdpdmVuIGxvY2F0aW9uIl9z
KTsKICAgICB9CiAKICAgICBhdXRvIHByb3RvY29sQnJlYWtwb2ludCA9IFByb3RvY29sQnJlYWtw
b2ludDo6ZnJvbVBheWxvYWQoZXJyb3JTdHJpbmcsIHNvdXJjZUlELCBsaW5lTnVtYmVyLCBjb2x1
bW5OdW1iZXIpOwogICAgIGlmICghcHJvdG9jb2xCcmVha3BvaW50KQotICAgICAgICByZXR1cm47
CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAgICAvLyBE
b24ndCBzYXZlIGBwcm90b2NvbEJyZWFrcG9pbnRgIGluIGBtX3Byb3RvY29sQnJlYWtwb2ludEZv
clByb3RvY29sQnJlYWtwb2ludElEYCBiZWNhdXNlIGl0CiAgICAgLy8gaXMgYSB0ZW1wb3Jhcnkg
YnJlYWtwb2ludCB0aGF0IHdpbGwgYmUgcmVtb3ZlZCBhcyBzb29uIGFzIGBsb2NhdGlvbmAgaXMg
cmVhY2hlZC4KQEAgLTY5MSw4ICs3MDEsNyBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6
OmNvbnRpbnVlVG9Mb2NhdGlvbihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0CiAgICAg
aWYgKCFyZXNvbHZlQnJlYWtwb2ludChzY3JpcHRJdGVyYXRvci0+dmFsdWUsIGRlYnVnZ2VyQnJl
YWtwb2ludCkpIHsKICAgICAgICAgbV9kZWJ1Z2dlci5jb250aW51ZVByb2dyYW0oKTsKICAgICAg
ICAgbV9mcm9udGVuZERpc3BhdGNoZXItPnJlc3VtZWQoKTsKLSAgICAgICAgZXJyb3JTdHJpbmcg
PSAiQ291bGQgbm90IHJlc29sdmUgYnJlYWtwb2ludCJfczsKLSAgICAgICAgcmV0dXJuOworICAg
ICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkNvdWxkIG5vdCByZXNvbHZlIGJyZWFrcG9pbnQi
X3MpOwogICAgIH0KIAogICAgIGlmICghc2V0QnJlYWtwb2ludChkZWJ1Z2dlckJyZWFrcG9pbnQp
KSB7CkBAIC03MDEsNyArNzEwLDcgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojpjb250
aW51ZVRvTG9jYXRpb24oRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdAogICAgICAgICAv
LyBoaXQgdGhpcyBuZXcgYnJlYWtwb2ludCBvciBub3QuCiAgICAgICAgIG1fZGVidWdnZXIuY29u
dGludWVQcm9ncmFtKCk7CiAgICAgICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5yZXN1bWVkKCk7
Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKICAgICBtX2Nv
bnRpbnVlVG9Mb2NhdGlvbkRlYnVnZ2VyQnJlYWtwb2ludCA9IFdURk1vdmUoZGVidWdnZXJCcmVh
a3BvaW50KTsKQEAgLTcxMCw0MSArNzE5LDQyIEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2Vu
dDo6Y29udGludWVUb0xvY2F0aW9uKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QKICAg
ICAvLyBTbyBkb24ndCBpc3N1ZSBhIHJlc3VtZWQgZXZlbnQgdW5sZXNzIHdlIGV4aXQgdGhlIFZN
IHdpdGhvdXQgcGF1c2luZy4KICAgICB3aWxsU3RlcEFuZE1heUJlY29tZUlkbGUoKTsKICAgICBt
X2RlYnVnZ2VyLmNvbnRpbnVlUHJvZ3JhbSgpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9p
ZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZWFyY2hJbkNvbnRlbnQoRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHNjcmlwdElEU3RyLCBjb25zdCBTdHJpbmcmIHF1ZXJ5
LCBjb25zdCBib29sKiBvcHRpb25hbENhc2VTZW5zaXRpdmUsIGNvbnN0IGJvb2wqIG9wdGlvbmFs
SXNSZWdleCwgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkdlbmVyaWNUeXBlczo6U2Vh
cmNoTWF0Y2g+PiYgcmVzdWx0cykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpB
cnJheU9mPFByb3RvY29sOjpHZW5lcmljVHlwZXM6OlNlYXJjaE1hdGNoPj4+IEluc3BlY3RvckRl
YnVnZ2VyQWdlbnQ6OnNlYXJjaEluQ29udGVudChjb25zdCBQcm90b2NvbDo6RGVidWdnZXI6OlNj
cmlwdElkJiBzY3JpcHRJZCwgY29uc3QgU3RyaW5nJiBxdWVyeSwgT3B0aW9uYWw8Ym9vbD4mJiBj
YXNlU2Vuc2l0aXZlLCBPcHRpb25hbDxib29sPiYmIGlzUmVnZXgpCiB7Ci0gICAgSlNDOjpTb3Vy
Y2VJRCBzb3VyY2VJRCA9IHNjcmlwdElEU3RyLnRvSW50UHRyKCk7Ci0gICAgYXV0byBpdCA9IG1f
c2NyaXB0cy5maW5kKHNvdXJjZUlEKTsKLSAgICBpZiAoaXQgPT0gbV9zY3JpcHRzLmVuZCgpKSB7
Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIk1pc3Npbmcgc2NyaXB0IGZvciBnaXZlbiBzY3JpcHRJ
ZCI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgYXV0byBpdCA9IG1fc2NyaXB0cy5maW5k
KHNjcmlwdElkLnRvSW50UHRyKCkpOworICAgIGlmIChpdCA9PSBtX3NjcmlwdHMuZW5kKCkpCisg
ICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTWlzc2luZyBzY3JpcHQgZm9yIGdpdmVuIHNj
cmlwdElkIl9zKTsKIAotICAgIGJvb2wgaXNSZWdleCA9IG9wdGlvbmFsSXNSZWdleCA/ICpvcHRp
b25hbElzUmVnZXggOiBmYWxzZTsKLSAgICBib29sIGNhc2VTZW5zaXRpdmUgPSBvcHRpb25hbENh
c2VTZW5zaXRpdmUgPyAqb3B0aW9uYWxDYXNlU2Vuc2l0aXZlIDogZmFsc2U7Ci0gICAgcmVzdWx0
cyA9IENvbnRlbnRTZWFyY2hVdGlsaXRpZXM6OnNlYXJjaEluVGV4dEJ5TGluZXMoaXQtPnZhbHVl
LnNvdXJjZSwgcXVlcnksIGNhc2VTZW5zaXRpdmUsIGlzUmVnZXgpOworICAgIHJldHVybiBDb250
ZW50U2VhcmNoVXRpbGl0aWVzOjpzZWFyY2hJblRleHRCeUxpbmVzKGl0LT52YWx1ZS5zb3VyY2Us
IHF1ZXJ5LCBjYXNlU2Vuc2l0aXZlLnZhbHVlT3IoZmFsc2UpLCBpc1JlZ2V4LnZhbHVlT3IoZmFs
c2UpKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpnZXRTY3JpcHRTb3VyY2Uo
RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHNjcmlwdElEU3RyLCBTdHJp
bmcqIHNjcmlwdFNvdXJjZSkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPFN0cmluZz4gSW5zcGVj
dG9yRGVidWdnZXJBZ2VudDo6Z2V0U2NyaXB0U291cmNlKGNvbnN0IFByb3RvY29sOjpEZWJ1Z2dl
cjo6U2NyaXB0SWQmIHNjcmlwdElkKQogewotICAgIEpTQzo6U291cmNlSUQgc291cmNlSUQgPSBz
Y3JpcHRJRFN0ci50b0ludFB0cigpOwotICAgIGF1dG8gaXQgPSBtX3NjcmlwdHMuZmluZChzb3Vy
Y2VJRCk7Ci0gICAgaWYgKGl0ICE9IG1fc2NyaXB0cy5lbmQoKSkKLSAgICAgICAgKnNjcmlwdFNv
dXJjZSA9IGl0LT52YWx1ZS5zb3VyY2U7Ci0gICAgZWxzZQotICAgICAgICBlcnJvclN0cmluZyA9
ICJNaXNzaW5nIHNjcmlwdCBmb3IgZ2l2ZW4gc2NyaXB0SWQiOworICAgIGF1dG8gaXQgPSBtX3Nj
cmlwdHMuZmluZChzY3JpcHRJZC50b0ludFB0cigpKTsKKyAgICBpZiAoaXQgPT0gbV9zY3JpcHRz
LmVuZCgpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk1pc3Npbmcgc2NyaXB0IGZv
ciBnaXZlbiBzY3JpcHRJZCIpOworCisgICAgcmV0dXJuIGl0LT52YWx1ZS5zb3VyY2U7CiB9CiAK
LXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6Z2V0RnVuY3Rpb25EZXRhaWxzKEVycm9yU3Ry
aW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBmdW5jdGlvbklkLCBSZWZQdHI8UHJvdG9j
b2w6OkRlYnVnZ2VyOjpGdW5jdGlvbkRldGFpbHM+JiBkZXRhaWxzKQorUHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8UmVmPFByb3RvY29sOjpEZWJ1Z2dlcjo6RnVuY3Rpb25EZXRhaWxzPj4gSW5zcGVj
dG9yRGVidWdnZXJBZ2VudDo6Z2V0RnVuY3Rpb25EZXRhaWxzKGNvbnN0IFN0cmluZyYgZnVuY3Rp
b25JZCkKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBJ
bmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdCA9IG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmlu
amVjdGVkU2NyaXB0Rm9yT2JqZWN0SWQoZnVuY3Rpb25JZCk7Ci0gICAgaWYgKGluamVjdGVkU2Ny
aXB0Lmhhc05vVmFsdWUoKSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIGluamVj
dGVkIHNjcmlwdCBmb3IgZ2l2ZW4gZnVuY3Rpb25JZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KKyAgICBpZiAoaW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKQorICAgICAgICByZXR1cm4g
bWFrZVVuZXhwZWN0ZWQoIk1pc3NpbmcgaW5qZWN0ZWQgc2NyaXB0IGZvciBnaXZlbiBmdW5jdGlv
bklkIl9zKTsKIAorICAgIFJlZlB0cjxQcm90b2NvbDo6RGVidWdnZXI6OkZ1bmN0aW9uRGV0YWls
cz4gZGV0YWlsczsKICAgICBpbmplY3RlZFNjcmlwdC5nZXRGdW5jdGlvbkRldGFpbHMoZXJyb3JT
dHJpbmcsIGZ1bmN0aW9uSWQsIGRldGFpbHMpOworICAgIGlmICghZGV0YWlscykKKyAgICAgICAg
cmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKKworICAgIHJldHVybiBkZXRhaWxz
LnJlbGVhc2VOb25OdWxsKCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2No
ZWR1bGVQYXVzZUF0TmV4dE9wcG9ydHVuaXR5KERlYnVnZ2VyRnJvbnRlbmREaXNwYXRjaGVyOjpS
ZWFzb24gcmVhc29uLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIGRhdGEpCkBAIC03OTIsNTcgKzgw
Miw3NSBAQCBib29sIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmNhbmNlbFBhdXNlRm9yU3BlY2lh
bEJyZWFrcG9pbnQoSlNDOjpCcmVha3BvaW50JiBicgogICAgIHJldHVybiB0cnVlOwogfQogCi12
b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnBhdXNlKEVycm9yU3RyaW5nJikKK1Byb3RvY29s
OjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnBhdXNlKCkKIHsK
ICAgICBzY2hlZHVsZVBhdXNlQXROZXh0T3Bwb3J0dW5pdHkoRGVidWdnZXJGcm9udGVuZERpc3Bh
dGNoZXI6OlJlYXNvbjo6UGF1c2VPbk5leHRTdGF0ZW1lbnQpOworCisgICAgcmV0dXJuIHsgfTsK
IH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpyZXN1bWUoRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yRGVidWdn
ZXJBZ2VudDo6cmVzdW1lKCkKIHsKLSAgICBpZiAoIW1fcGF1c2VkR2xvYmFsT2JqZWN0ICYmICFt
X2phdmFTY3JpcHRQYXVzZVNjaGVkdWxlZCkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJNdXN0
IGJlIHBhdXNlZCBvciB3YWl0aW5nIHRvIHBhdXNlIl9zOwotICAgICAgICByZXR1cm47Ci0gICAg
fQorICAgIGlmICghbV9wYXVzZWRHbG9iYWxPYmplY3QgJiYgIW1famF2YVNjcmlwdFBhdXNlU2No
ZWR1bGVkKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk11c3QgYmUgcGF1c2VkIG9y
IHdhaXRpbmcgdG8gcGF1c2UiX3MpOwogCiAgICAgY2FuY2VsUGF1c2VBdE5leHRPcHBvcnR1bml0
eSgpOwogICAgIG1fZGVidWdnZXIuY29udGludWVQcm9ncmFtKCk7CiAgICAgbV9jb25kaXRpb25U
b0Rpc3BhdGNoUmVzdW1lZCA9IFNob3VsZERpc3BhdGNoUmVzdW1lZDo6V2hlbkNvbnRpbnVlZDsK
KworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c3Rl
cE5leHQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8
dm9pZD4gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c3RlcE5leHQoKQogeworICAgIFByb3RvY29s
OjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIGlmICghYXNzZXJ0UGF1c2VkKGVycm9y
U3RyaW5nKSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQo
ZXJyb3JTdHJpbmcpOwogCiAgICAgd2lsbFN0ZXBBbmRNYXlCZWNvbWVJZGxlKCk7CiAgICAgbV9k
ZWJ1Z2dlci5zdGVwTmV4dEV4cHJlc3Npb24oKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZv
aWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c3RlcE92ZXIoRXJyb3JTdHJpbmcmIGVycm9yU3Ry
aW5nKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yRGVidWdnZXJBZ2Vu
dDo6c3RlcE92ZXIoKQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsK
KwogICAgIGlmICghYXNzZXJ0UGF1c2VkKGVycm9yU3RyaW5nKSkKLSAgICAgICAgcmV0dXJuOwor
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCiAgICAgd2lsbFN0
ZXBBbmRNYXlCZWNvbWVJZGxlKCk7CiAgICAgbV9kZWJ1Z2dlci5zdGVwT3ZlclN0YXRlbWVudCgp
OworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojpz
dGVwSW50byhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdP
cjx2b2lkPiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzdGVwSW50bygpCiB7CisgICAgUHJvdG9j
b2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAgICAgaWYgKCFhc3NlcnRQYXVzZWQoZXJy
b3JTdHJpbmcpKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3Rl
ZChlcnJvclN0cmluZyk7CiAKICAgICB3aWxsU3RlcEFuZE1heUJlY29tZUlkbGUoKTsKICAgICBt
X2RlYnVnZ2VyLnN0ZXBJbnRvU3RhdGVtZW50KCk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12
b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnN0ZXBPdXQoRXJyb3JTdHJpbmcmIGVycm9yU3Ry
aW5nKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yRGVidWdnZXJBZ2Vu
dDo6c3RlcE91dCgpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOwor
CiAgICAgaWYgKCFhc3NlcnRQYXVzZWQoZXJyb3JTdHJpbmcpKQotICAgICAgICByZXR1cm47Cisg
ICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAgICB3aWxsU3Rl
cEFuZE1heUJlY29tZUlkbGUoKTsKICAgICBtX2RlYnVnZ2VyLnN0ZXBPdXRPZkZ1bmN0aW9uKCk7
CisKKyAgICByZXR1cm4geyB9OwogfQogCiB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnJl
Z2lzdGVySWRsZUhhbmRsZXIoKQpAQCAtODc3LDg2ICs5MDUsOTggQEAgdm9pZCBJbnNwZWN0b3JE
ZWJ1Z2dlckFnZW50OjpkaWRCZWNvbWVJZGxlKCkKIAogICAgIG1fY29uZGl0aW9uVG9EaXNwYXRj
aFJlc3VtZWQgPSBTaG91bGREaXNwYXRjaFJlc3VtZWQ6Ok5vOwogCi0gICAgaWYgKG1fZW5hYmxl
UGF1c2VXaGVuSWRsZSkgewotICAgICAgICBFcnJvclN0cmluZyBpZ25vcmVkOwotICAgICAgICBw
YXVzZShpZ25vcmVkKTsKLSAgICB9CisgICAgaWYgKG1fZW5hYmxlUGF1c2VXaGVuSWRsZSkKKyAg
ICAgICAgcGF1c2UoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZXRQYXVz
ZU9uRGVidWdnZXJTdGF0ZW1lbnRzKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgYm9vbCBlbmFi
bGVkLCBjb25zdCBKU09OOjpPYmplY3QqIG9wdGlvbnNQYXlsb2FkKQorUHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0UGF1c2VPbkRlYnVnZ2Vy
U3RhdGVtZW50cyhib29sIGVuYWJsZWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgb3B0aW9ucykK
IHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBpZiAoIWVu
YWJsZWQpIHsKICAgICAgICAgbV9kZWJ1Z2dlci5zZXRQYXVzZU9uRGVidWdnZXJTdGF0ZW1lbnRz
QnJlYWtwb2ludChudWxscHRyKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4geyB9
OwogICAgIH0KIAotICAgIGF1dG8gYnJlYWtwb2ludCA9IGRlYnVnZ2VyQnJlYWtwb2ludEZyb21Q
YXlsb2FkKGVycm9yU3RyaW5nLCBvcHRpb25zUGF5bG9hZCk7CisgICAgYXV0byBicmVha3BvaW50
ID0gZGVidWdnZXJCcmVha3BvaW50RnJvbVBheWxvYWQoZXJyb3JTdHJpbmcsIFdURk1vdmUob3B0
aW9ucykpOwogICAgIGlmICghYnJlYWtwb2ludCkKLSAgICAgICAgcmV0dXJuOworICAgICAgICBy
ZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCiAgICAgbV9kZWJ1Z2dlci5zZXRQ
YXVzZU9uRGVidWdnZXJTdGF0ZW1lbnRzQnJlYWtwb2ludChXVEZNb3ZlKGJyZWFrcG9pbnQpKTsK
KworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0
UGF1c2VPbkV4Y2VwdGlvbnMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcm
IHN0YXRlU3RyaW5nLCBjb25zdCBKU09OOjpPYmplY3QqIG9wdGlvbnNQYXlsb2FkKQorUHJvdG9j
b2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0UGF1c2VP
bkV4Y2VwdGlvbnMoY29uc3QgU3RyaW5nJiBzdGF0ZVN0cmluZywgUmVmUHRyPEpTT046Ok9iamVj
dD4mJiBvcHRpb25zKQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsK
KwogICAgIFJlZlB0cjxKU0M6OkJyZWFrcG9pbnQ+IGFsbEV4Y2VwdGlvbnNCcmVha3BvaW50Owog
ICAgIFJlZlB0cjxKU0M6OkJyZWFrcG9pbnQ+IHVuY2F1Z2h0RXhjZXB0aW9uc0JyZWFrcG9pbnQ7
CiAKICAgICBpZiAoc3RhdGVTdHJpbmcgPT0gImFsbCIpIHsKLSAgICAgICAgYWxsRXhjZXB0aW9u
c0JyZWFrcG9pbnQgPSBkZWJ1Z2dlckJyZWFrcG9pbnRGcm9tUGF5bG9hZChlcnJvclN0cmluZywg
b3B0aW9uc1BheWxvYWQpOworICAgICAgICBhbGxFeGNlcHRpb25zQnJlYWtwb2ludCA9IGRlYnVn
Z2VyQnJlYWtwb2ludEZyb21QYXlsb2FkKGVycm9yU3RyaW5nLCBXVEZNb3ZlKG9wdGlvbnMpKTsK
ICAgICAgICAgaWYgKCFhbGxFeGNlcHRpb25zQnJlYWtwb2ludCkKLSAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAgICAg
fSBlbHNlIGlmIChzdGF0ZVN0cmluZyA9PSAidW5jYXVnaHQiKSB7Ci0gICAgICAgIHVuY2F1Z2h0
RXhjZXB0aW9uc0JyZWFrcG9pbnQgPSBkZWJ1Z2dlckJyZWFrcG9pbnRGcm9tUGF5bG9hZChlcnJv
clN0cmluZywgb3B0aW9uc1BheWxvYWQpOworICAgICAgICB1bmNhdWdodEV4Y2VwdGlvbnNCcmVh
a3BvaW50ID0gZGVidWdnZXJCcmVha3BvaW50RnJvbVBheWxvYWQoZXJyb3JTdHJpbmcsIFdURk1v
dmUob3B0aW9ucykpOwogICAgICAgICBpZiAoIXVuY2F1Z2h0RXhjZXB0aW9uc0JyZWFrcG9pbnQp
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgfSBlbHNlIGlmIChzdGF0ZVN0cmluZyAhPSAibm9u
ZSIpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSBtYWtlU3RyaW5nKCJVbmtub3duIHN0YXRlOiAi
X3MsIHN0YXRlU3RyaW5nKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICAgICAgICAgIHJl
dHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CisgICAgfSBlbHNlIGlmIChzdGF0ZVN0
cmluZyAhPSAibm9uZSIpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChtYWtlU3RyaW5n
KCJVbmtub3duIHN0YXRlOiAiX3MsIHN0YXRlU3RyaW5nKSk7CiAKICAgICBtX2RlYnVnZ2VyLnNl
dFBhdXNlT25BbGxFeGNlcHRpb25zQnJlYWtwb2ludChXVEZNb3ZlKGFsbEV4Y2VwdGlvbnNCcmVh
a3BvaW50KSk7CiAgICAgbV9kZWJ1Z2dlci5zZXRQYXVzZU9uVW5jYXVnaHRFeGNlcHRpb25zQnJl
YWtwb2ludChXVEZNb3ZlKHVuY2F1Z2h0RXhjZXB0aW9uc0JyZWFrcG9pbnQpKTsKKworICAgIHJl
dHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0UGF1c2VPbkFz
c2VydGlvbnMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBib29sIGVuYWJsZWQsIGNvbnN0IEpT
T046Ok9iamVjdCogb3B0aW9uc1BheWxvYWQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lk
PiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZXRQYXVzZU9uQXNzZXJ0aW9ucyhib29sIGVuYWJs
ZWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgb3B0aW9ucykKIHsKKyAgICBQcm90b2NvbDo6RXJy
b3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBpZiAoIWVuYWJsZWQpIHsKICAgICAgICAgbV9w
YXVzZU9uQXNzZXJ0aW9uc0JyZWFrcG9pbnQgPSBudWxscHRyOwotICAgICAgICByZXR1cm47Cisg
ICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCi0gICAgYXV0byBicmVha3BvaW50ID0gZGVidWdn
ZXJCcmVha3BvaW50RnJvbVBheWxvYWQoZXJyb3JTdHJpbmcsIG9wdGlvbnNQYXlsb2FkKTsKKyAg
ICBhdXRvIGJyZWFrcG9pbnQgPSBkZWJ1Z2dlckJyZWFrcG9pbnRGcm9tUGF5bG9hZChlcnJvclN0
cmluZywgV1RGTW92ZShvcHRpb25zKSk7CiAgICAgaWYgKCFicmVha3BvaW50KQotICAgICAgICBy
ZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAg
ICBtX3BhdXNlT25Bc3NlcnRpb25zQnJlYWtwb2ludCA9IFdURk1vdmUoYnJlYWtwb2ludCk7CisK
KyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldFBh
dXNlT25NaWNyb3Rhc2tzKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgYm9vbCBlbmFibGVkLCBj
b25zdCBKU09OOjpPYmplY3QqIG9wdGlvbnNQYXlsb2FkKQorUHJvdG9jb2w6OkVycm9yU3RyaW5n
T3I8dm9pZD4gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0UGF1c2VPbk1pY3JvdGFza3MoYm9v
bCBlbmFibGVkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIG9wdGlvbnMpCiB7CisgICAgUHJvdG9j
b2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAgICAgaWYgKCFlbmFibGVkKSB7CiAgICAg
ICAgIG1fcGF1c2VPbk1pY3JvdGFza3NCcmVha3BvaW50ID0gbnVsbHB0cjsKLSAgICAgICAgcmV0
dXJuOworICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAotICAgIGF1dG8gYnJlYWtwb2ludCA9
IGRlYnVnZ2VyQnJlYWtwb2ludEZyb21QYXlsb2FkKGVycm9yU3RyaW5nLCBvcHRpb25zUGF5bG9h
ZCk7CisgICAgYXV0byBicmVha3BvaW50ID0gZGVidWdnZXJCcmVha3BvaW50RnJvbVBheWxvYWQo
ZXJyb3JTdHJpbmcsIFdURk1vdmUob3B0aW9ucykpOwogICAgIGlmICghYnJlYWtwb2ludCkKLSAg
ICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcp
OwogCiAgICAgbV9wYXVzZU9uTWljcm90YXNrc0JyZWFrcG9pbnQgPSBXVEZNb3ZlKGJyZWFrcG9p
bnQpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50
OjpldmFsdWF0ZU9uQ2FsbEZyYW1lKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3Ry
aW5nJiBjYWxsRnJhbWVJZCwgY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBjb25zdCBTdHJpbmcq
IG9iamVjdEdyb3VwLCBjb25zdCBib29sKiBpbmNsdWRlQ29tbWFuZExpbmVBUEksIGNvbnN0IGJv
b2wqIGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29sZSwgY29uc3QgYm9vbCogcmV0
dXJuQnlWYWx1ZSwgY29uc3QgYm9vbCogZ2VuZXJhdGVQcmV2aWV3LCBjb25zdCBib29sKiBzYXZl
UmVzdWx0LCBjb25zdCBib29sKiAvKiBlbXVsYXRlVXNlckdlc3R1cmUgKi8sIFJlZlB0cjxQcm90
b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0LCBPcHRpb25hbDxib29sPiYgd2Fz
VGhyb3duLCBPcHRpb25hbDxpbnQ+JiBzYXZlZFJlc3VsdEluZGV4KQorUHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8c3RkOjp0dXBsZTxSZWY8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4s
IE9wdGlvbmFsPGJvb2w+IC8qIHdhc1Rocm93biAqLywgT3B0aW9uYWw8aW50PiAvKiBzYXZlZFJl
c3VsdEluZGV4ICovPj4gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZXZhbHVhdGVPbkNhbGxGcmFt
ZShjb25zdCBQcm90b2NvbDo6RGVidWdnZXI6OkNhbGxGcmFtZUlkJiBjYWxsRnJhbWVJZCwgY29u
c3QgU3RyaW5nJiBleHByZXNzaW9uLCBjb25zdCBTdHJpbmcmIG9iamVjdEdyb3VwLCBPcHRpb25h
bDxib29sPiYmIGluY2x1ZGVDb21tYW5kTGluZUFQSSwgT3B0aW9uYWw8Ym9vbD4mJiBkb05vdFBh
dXNlT25FeGNlcHRpb25zQW5kTXV0ZUNvbnNvbGUsIE9wdGlvbmFsPGJvb2w+JiYgcmV0dXJuQnlW
YWx1ZSwgT3B0aW9uYWw8Ym9vbD4mJiBnZW5lcmF0ZVByZXZpZXcsIE9wdGlvbmFsPGJvb2w+JiYg
c2F2ZVJlc3VsdCwgT3B0aW9uYWw8Ym9vbD4mJiAgLyogZW11bGF0ZVVzZXJHZXN0dXJlICovKQog
eworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIGlmICghYXNz
ZXJ0UGF1c2VkKGVycm9yU3RyaW5nKSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4g
bWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCiAgICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0
ZWRTY3JpcHQgPSBtX2luamVjdGVkU2NyaXB0TWFuYWdlci5pbmplY3RlZFNjcmlwdEZvck9iamVj
dElkKGNhbGxGcmFtZUlkKTsKLSAgICBpZiAoaW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKSB7
Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIk1pc3NpbmcgaW5qZWN0ZWQgc2NyaXB0IGZvciBnaXZl
biBjYWxsRnJhbWVJZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoaW5qZWN0
ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk1p
c3NpbmcgaW5qZWN0ZWQgc2NyaXB0IGZvciBnaXZlbiBjYWxsRnJhbWVJZCJfcyk7CiAKICAgICBK
U0M6OkRlYnVnZ2VyOjpUZW1wb3JhcmlseURpc2FibGVFeGNlcHRpb25CcmVha3BvaW50cyB0ZW1w
b3JhcmlseURpc2FibGVFeGNlcHRpb25CcmVha3BvaW50cyhtX2RlYnVnZ2VyKTsKIApAQCAtOTY2
LDI4ICsxMDA2LDMxIEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZXZhbHVhdGVPbkNh
bGxGcmFtZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0CiAgICAgICAgIG11dGVDb25z
b2xlKCk7CiAgICAgfQogCi0gICAgaW5qZWN0ZWRTY3JpcHQuZXZhbHVhdGVPbkNhbGxGcmFtZShl
cnJvclN0cmluZywgbV9jdXJyZW50Q2FsbFN0YWNrLmdldCgpLCBjYWxsRnJhbWVJZCwgZXhwcmVz
c2lvbiwKLSAgICAgICAgb2JqZWN0R3JvdXAgPyAqb2JqZWN0R3JvdXAgOiBlbXB0eVN0cmluZygp
LCBpbmNsdWRlQ29tbWFuZExpbmVBUEkgJiYgKmluY2x1ZGVDb21tYW5kTGluZUFQSSwgcmV0dXJu
QnlWYWx1ZSAmJiAqcmV0dXJuQnlWYWx1ZSwgZ2VuZXJhdGVQcmV2aWV3ICYmICpnZW5lcmF0ZVBy
ZXZpZXcsIHNhdmVSZXN1bHQgJiYgKnNhdmVSZXN1bHQsCi0gICAgICAgIHJlc3VsdCwgd2FzVGhy
b3duLCBzYXZlZFJlc3VsdEluZGV4KTsKKyAgICBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJl
bW90ZU9iamVjdD4gcmVzdWx0OworICAgIE9wdGlvbmFsPGJvb2w+IHdhc1Rocm93bjsKKyAgICBP
cHRpb25hbDxpbnQ+IHNhdmVkUmVzdWx0SW5kZXg7CisKKyAgICBpbmplY3RlZFNjcmlwdC5ldmFs
dWF0ZU9uQ2FsbEZyYW1lKGVycm9yU3RyaW5nLCBtX2N1cnJlbnRDYWxsU3RhY2suZ2V0KCksIGNh
bGxGcmFtZUlkLCBleHByZXNzaW9uLCBvYmplY3RHcm91cCwgaW5jbHVkZUNvbW1hbmRMaW5lQVBJ
LnZhbHVlT3IoZmFsc2UpLCByZXR1cm5CeVZhbHVlLnZhbHVlT3IoZmFsc2UpLCBnZW5lcmF0ZVBy
ZXZpZXcudmFsdWVPcihmYWxzZSksIHNhdmVSZXN1bHQudmFsdWVPcihmYWxzZSksIHJlc3VsdCwg
d2FzVGhyb3duLCBzYXZlZFJlc3VsdEluZGV4KTsKIAogICAgIGlmIChwYXVzZUFuZE11dGUpCiAg
ICAgICAgIHVubXV0ZUNvbnNvbGUoKTsKKworICAgIGlmICghcmVzdWx0KQorICAgICAgICByZXR1
cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOworCisgICAgcmV0dXJuIHsgeyByZXN1bHQu
cmVsZWFzZU5vbk51bGwoKSwgV1RGTW92ZSh3YXNUaHJvd24pLCBXVEZNb3ZlKHNhdmVkUmVzdWx0
SW5kZXgpIH0gfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZXRTaG91bGRC
bGFja2JveFVSTChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgdXJsLCBi
b29sIHNob3VsZEJsYWNrYm94LCBjb25zdCBib29sKiBvcHRpb25hbENhc2VTZW5zaXRpdmUsIGNv
bnN0IGJvb2wqIG9wdGlvbmFsSXNSZWdleCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+
IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldFNob3VsZEJsYWNrYm94VVJMKGNvbnN0IFN0cmlu
ZyYgdXJsLCBib29sIHNob3VsZEJsYWNrYm94LCBPcHRpb25hbDxib29sPiYmIG9wdGlvbmFsQ2Fz
ZVNlbnNpdGl2ZSwgT3B0aW9uYWw8Ym9vbD4mJiBvcHRpb25hbElzUmVnZXgpCiB7Ci0gICAgaWYg
KHVybC5pc0VtcHR5KCkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiVVJMIG11c3Qgbm90IGJl
IGVtcHR5Il9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICh1cmwuaXNFbXB0eSgp
KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIlVSTCBtdXN0IG5vdCBiZSBlbXB0eSJf
cyk7CiAKLSAgICBib29sIGNhc2VTZW5zaXRpdmUgPSBvcHRpb25hbENhc2VTZW5zaXRpdmUgJiYg
Km9wdGlvbmFsQ2FzZVNlbnNpdGl2ZTsKLSAgICBib29sIGlzUmVnZXggPSBvcHRpb25hbElzUmVn
ZXggJiYgKm9wdGlvbmFsSXNSZWdleDsKKyAgICBib29sIGNhc2VTZW5zaXRpdmUgPSBvcHRpb25h
bENhc2VTZW5zaXRpdmUudmFsdWVPcihmYWxzZSk7CisgICAgYm9vbCBpc1JlZ2V4ID0gb3B0aW9u
YWxJc1JlZ2V4LnZhbHVlT3IoZmFsc2UpOwogCi0gICAgaWYgKCFjYXNlU2Vuc2l0aXZlICYmICFp
c1JlZ2V4ICYmIGlzV2ViS2l0SW5qZWN0ZWRTY3JpcHQodXJsKSkgewotICAgICAgICBlcnJvclN0
cmluZyA9ICJCbGFja2JveGluZyBvZiBpbnRlcm5hbCBzY3JpcHRzIGlzIGNvbnRyb2xsZWQgYnkg
J0RlYnVnZ2VyLnNldFBhdXNlRm9ySW50ZXJuYWxTY3JpcHRzJyJfczsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KKyAgICBpZiAoIWNhc2VTZW5zaXRpdmUgJiYgIWlzUmVnZXggJiYgaXNXZWJLaXRJ
bmplY3RlZFNjcmlwdCh1cmwpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkJsYWNr
Ym94aW5nIG9mIGludGVybmFsIHNjcmlwdHMgaXMgY29udHJvbGxlZCBieSAnRGVidWdnZXIuc2V0
UGF1c2VGb3JJbnRlcm5hbFNjcmlwdHMnIl9zKTsKIAogICAgIEJsYWNrYm94Q29uZmlnIGNvbmZp
ZyB7IHVybCwgY2FzZVNlbnNpdGl2ZSwgaXNSZWdleCB9OwogICAgIGlmIChzaG91bGRCbGFja2Jv
eCkKQEAgLTEwMDQsNiArMTA0Nyw4IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0
U2hvdWxkQmxhY2tib3hVUkwoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zCiAgICAgICAg
ICAgICBibGFja2JveFR5cGUgPSBKU0M6OkRlYnVnZ2VyOjpCbGFja2JveFR5cGU6OkRlZmVycmVk
OwogICAgICAgICBtX2RlYnVnZ2VyLnNldEJsYWNrYm94VHlwZShzb3VyY2VJRCwgYmxhY2tib3hU
eXBlKTsKICAgICB9CisKKyAgICByZXR1cm4geyB9OwogfQogCiBib29sIEluc3BlY3RvckRlYnVn
Z2VyQWdlbnQ6OnNob3VsZEJsYWNrYm94VVJMKGNvbnN0IFN0cmluZyYgdXJsKSBjb25zdApAQCAt
MTAzOSwxMCArMTA4NCwxMCBAQCBTdHJpbmcgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c291cmNl
TWFwVVJMRm9yU2NyaXB0KGNvbnN0IEpTQzo6RGVidWdnZXI6OlNjcmlwdAogICAgIHJldHVybiBz
Y3JpcHQuc291cmNlTWFwcGluZ1VSTDsKIH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50
OjpzZXRQYXVzZUZvckludGVybmFsU2NyaXB0cyhFcnJvclN0cmluZyYsIGJvb2wgc2hvdWxkUGF1
c2UpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50
OjpzZXRQYXVzZUZvckludGVybmFsU2NyaXB0cyhib29sIHNob3VsZFBhdXNlKQogewogICAgIGlm
IChzaG91bGRQYXVzZSA9PSBtX3BhdXNlRm9ySW50ZXJuYWxTY3JpcHRzKQotICAgICAgICByZXR1
cm47CisgICAgICAgIHJldHVybiB7IH07CiAKICAgICBtX3BhdXNlRm9ySW50ZXJuYWxTY3JpcHRz
ID0gc2hvdWxkUGF1c2U7CiAKQEAgLTEwNTIsNiArMTA5Nyw4IEBAIHZvaWQgSW5zcGVjdG9yRGVi
dWdnZXJBZ2VudDo6c2V0UGF1c2VGb3JJbnRlcm5hbFNjcmlwdHMoRXJyb3JTdHJpbmcmLCBib29s
IHNob3VsCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgbV9kZWJ1Z2dlci5zZXRCbGFj
a2JveFR5cGUoc291cmNlSUQsIGJsYWNrYm94VHlwZSk7CiAgICAgfQorCisgICAgcmV0dXJuIHsg
fTsKIH0KIAogdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkaWRQYXJzZVNvdXJjZShKU0M6
OlNvdXJjZUlEIHNvdXJjZUlELCBjb25zdCBKU0M6OkRlYnVnZ2VyOjpTY3JpcHQmIHNjcmlwdCkK
QEAgLTEwNjEsMTIgKzExMDgsNyBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpZFBh
cnNlU291cmNlKEpTQzo6U291cmNlSUQgc291cmNlSUQsIGNvbnN0IEpTQzo6RAogICAgIFN0cmlu
ZyBzb3VyY2VVUkwgPSBzY3JpcHQuc291cmNlVVJMOwogICAgIFN0cmluZyBzb3VyY2VNYXBwaW5n
VVJMID0gc291cmNlTWFwVVJMRm9yU2NyaXB0KHNjcmlwdCk7CiAKLSAgICBjb25zdCBib29sIGlz
TW9kdWxlID0gc2NyaXB0LnNvdXJjZVByb3ZpZGVyLT5zb3VyY2VUeXBlKCkgPT0gSlNDOjpTb3Vy
Y2VQcm92aWRlclNvdXJjZVR5cGU6Ok1vZHVsZTsKLSAgICBjb25zdCBib29sKiBpc0NvbnRlbnRT
Y3JpcHQgPSBzY3JpcHQuaXNDb250ZW50U2NyaXB0ID8gJnNjcmlwdC5pc0NvbnRlbnRTY3JpcHQg
OiBudWxscHRyOwotICAgIFN0cmluZyogc291cmNlVVJMUGFyYW0gPSBoYXNTb3VyY2VVUkwgPyAm
c291cmNlVVJMIDogbnVsbHB0cjsKLSAgICBTdHJpbmcqIHNvdXJjZU1hcFVSTFBhcmFtID0gc291
cmNlTWFwcGluZ1VSTC5pc0VtcHR5KCkgPyBudWxscHRyIDogJnNvdXJjZU1hcHBpbmdVUkw7Ci0K
LSAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+c2NyaXB0UGFyc2VkKHNjcmlwdElEU3RyLCBzY3Jp
cHQudXJsLCBzY3JpcHQuc3RhcnRMaW5lLCBzY3JpcHQuc3RhcnRDb2x1bW4sIHNjcmlwdC5lbmRM
aW5lLCBzY3JpcHQuZW5kQ29sdW1uLCBpc0NvbnRlbnRTY3JpcHQsIHNvdXJjZVVSTFBhcmFtLCBz
b3VyY2VNYXBVUkxQYXJhbSwgaXNNb2R1bGUgPyAmaXNNb2R1bGUgOiBudWxscHRyKTsKKyAgICBt
X2Zyb250ZW5kRGlzcGF0Y2hlci0+c2NyaXB0UGFyc2VkKHNjcmlwdElEU3RyLCBzY3JpcHQudXJs
LCBzY3JpcHQuc3RhcnRMaW5lLCBzY3JpcHQuc3RhcnRDb2x1bW4sIHNjcmlwdC5lbmRMaW5lLCBz
Y3JpcHQuZW5kQ29sdW1uLCBzY3JpcHQuaXNDb250ZW50U2NyaXB0LCBzb3VyY2VVUkwsIHNvdXJj
ZU1hcHBpbmdVUkwsIHNjcmlwdC5zb3VyY2VQcm92aWRlci0+c291cmNlVHlwZSgpID09IEpTQzo6
U291cmNlUHJvdmlkZXJTb3VyY2VUeXBlOjpNb2R1bGUpOwogCiAgICAgbV9zY3JpcHRzLnNldChz
b3VyY2VJRCwgc2NyaXB0KTsKIApAQCAtMTE4MCwxMiArMTIyMiwxMyBAQCB2b2lkIEluc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQ6OmRpZFBhdXNlKEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNDOjpEZQogICAgICAgICBpZiAoYXV0byBkZWJ1Z2dlckJyZWFrcG9pbnRJZCA9IG1fZGVi
dWdnZXIucGF1c2luZ0JyZWFrcG9pbnRJRCgpKSB7CiAgICAgICAgICAgICBBU1NFUlQoIW1fY29u
dGludWVUb0xvY2F0aW9uRGVidWdnZXJCcmVha3BvaW50IHx8IGRlYnVnZ2VyQnJlYWtwb2ludElk
ICE9IG1fY29udGludWVUb0xvY2F0aW9uRGVidWdnZXJCcmVha3BvaW50LT5pZCgpKTsKICAgICAg
ICAgICAgIGRhdGEgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgICAgICAgICAgZGF0YS0+
c2V0U3RyaW5nKCJvcmlnaW5hbFJlYXNvbiJfcywgUHJvdG9jb2w6Okluc3BlY3RvckhlbHBlcnM6
OmdldEVudW1Db25zdGFudFZhbHVlKERlYnVnZ2VyRnJvbnRlbmREaXNwYXRjaGVyOjpSZWFzb246
OkJyZWFrcG9pbnQpKTsKLSAgICAgICAgICAgIGRhdGEtPnNldFZhbHVlKCJvcmlnaW5hbERhdGEi
X3MsIGJ1aWxkQnJlYWtwb2ludFBhdXNlUmVhc29uKGRlYnVnZ2VyQnJlYWtwb2ludElkKSk7Cisg
ICAgICAgICAgICBkYXRhLT5zZXRTdHJpbmcoIm9yaWdpbmFsUmVhc29uIl9zLCBQcm90b2NvbDo6
SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUoRGVidWdnZXJGcm9udGVuZERpc3BhdGNoZXI6
OlJlYXNvbjo6QnJlYWtwb2ludCkpOworICAgICAgICAgICAgaWYgKGF1dG8gcGF1c2VSZWFzb24g
PSBidWlsZEJyZWFrcG9pbnRQYXVzZVJlYXNvbihkZWJ1Z2dlckJyZWFrcG9pbnRJZCkpCisgICAg
ICAgICAgICAgICAgZGF0YS0+c2V0VmFsdWUoIm9yaWdpbmFsRGF0YSJfcywgcGF1c2VSZWFzb24u
cmVsZWFzZU5vbk51bGwoKSk7CiAgICAgICAgIH0gZWxzZSBpZiAobV9wcmVCbGFja2JveFBhdXNl
RGF0YSkgewogICAgICAgICAgICAgZGF0YSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAg
ICAgICAgICBkYXRhLT5zZXRTdHJpbmcoIm9yaWdpbmFsUmVhc29uIl9zLCBQcm90b2NvbDo6SW5z
cGVjdG9ySGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUobV9wcmVCbGFja2JveFBhdXNlUmVh
c29uKSk7Ci0gICAgICAgICAgICBkYXRhLT5zZXRWYWx1ZSgib3JpZ2luYWxEYXRhIl9zLCBtX3By
ZUJsYWNrYm94UGF1c2VEYXRhKTsKKyAgICAgICAgICAgIGRhdGEtPnNldFN0cmluZygib3JpZ2lu
YWxSZWFzb24iX3MsIFByb3RvY29sOjpIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShtX3By
ZUJsYWNrYm94UGF1c2VSZWFzb24pKTsKKyAgICAgICAgICAgIGRhdGEtPnNldFZhbHVlKCJvcmln
aW5hbERhdGEiX3MsIG1fcHJlQmxhY2tib3hQYXVzZURhdGEucmVsZWFzZU5vbk51bGwoKSk7CiAg
ICAgICAgIH0KICAgICAgICAgdXBkYXRlUGF1c2VSZWFzb25BbmREYXRhKERlYnVnZ2VyRnJvbnRl
bmREaXNwYXRjaGVyOjpSZWFzb246OkJsYWNrYm94ZWRTY3JpcHQsIFdURk1vdmUoZGF0YSkpOwog
ICAgIH0KQEAgLTEyMDYsNyArMTI0OSw3IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6
ZGlkUGF1c2UoSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkRlCiAgICAg
ICAgICAgICBhc3luY1N0YWNrVHJhY2UgPSBpdC0+dmFsdWUtPmJ1aWxkSW5zcGVjdG9yT2JqZWN0
KCk7CiAgICAgfQogCi0gICAgbV9mcm9udGVuZERpc3BhdGNoZXItPnBhdXNlZChjdXJyZW50Q2Fs
bEZyYW1lcyhpbmplY3RlZFNjcmlwdCksIG1fcGF1c2VSZWFzb24sIG1fcGF1c2VEYXRhLCBhc3lu
Y1N0YWNrVHJhY2UpOworICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5wYXVzZWQoY3VycmVudENh
bGxGcmFtZXMoaW5qZWN0ZWRTY3JpcHQpLCBQcm90b2NvbDo6SGVscGVyczo6Z2V0RW51bUNvbnN0
YW50VmFsdWUobV9wYXVzZVJlYXNvbiksIG1fcGF1c2VEYXRhLmNvcHlSZWYoKSwgV1RGTW92ZShh
c3luY1N0YWNrVHJhY2UpKTsKIAogICAgIG1famF2YVNjcmlwdFBhdXNlU2NoZWR1bGVkID0gZmFs
c2U7CiAKQEAgLTEyMzEsMTIgKzEyNzQsMTUgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50
OjpicmVha3BvaW50QWN0aW9uUHJvYmUoSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2IKIHsK
ICAgICBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdCA9IG1faW5qZWN0ZWRTY3JpcHRNYW5h
Z2VyLmluamVjdGVkU2NyaXB0Rm9yKGdsb2JhbE9iamVjdCk7CiAgICAgYXV0byBwYXlsb2FkID0g
aW5qZWN0ZWRTY3JpcHQud3JhcE9iamVjdChzYW1wbGUsIG9iamVjdEdyb3VwRm9yQnJlYWtwb2lu
dEFjdGlvbihhY3Rpb25JRCksIHRydWUpOworICAgIGlmICghcGF5bG9hZCkKKyAgICAgICAgcmV0
dXJuOworCiAgICAgYXV0byByZXN1bHQgPSBQcm90b2NvbDo6RGVidWdnZXI6OlByb2JlU2FtcGxl
OjpjcmVhdGUoKQogICAgICAgICAuc2V0UHJvYmVJZChhY3Rpb25JRCkKICAgICAgICAgLnNldEJh
dGNoSWQoYmF0Y2hJZCkKICAgICAgICAgLnNldFNhbXBsZUlkKHNhbXBsZUlkKQogICAgICAgICAu
c2V0VGltZXN0YW1wKG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmluc3BlY3RvckVudmlyb25tZW50
KCkuZXhlY3V0aW9uU3RvcHdhdGNoKCkuZWxhcHNlZFRpbWUoKS5zZWNvbmRzKCkpCi0gICAgICAg
IC5zZXRQYXlsb2FkKFdURk1vdmUocGF5bG9hZCkpCisgICAgICAgIC5zZXRQYXlsb2FkKHBheWxv
YWQucmVsZWFzZU5vbk51bGwoKSkKICAgICAgICAgLnJlbGVhc2UoKTsKICAgICBtX2Zyb250ZW5k
RGlzcGF0Y2hlci0+ZGlkU2FtcGxlUHJvYmUoV1RGTW92ZShyZXN1bHQpKTsKIH0KQEAgLTEyNjcs
OSArMTMxMyw4IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6YnJlYWtQcm9ncmFtKERl
YnVnZ2VyRnJvbnRlbmREaXNwYXRjaGVyOjpSZWFzb24gcmVhCiAKIHZvaWQgSW5zcGVjdG9yRGVi
dWdnZXJBZ2VudDo6Y2xlYXJJbnNwZWN0b3JCcmVha3BvaW50U3RhdGUoKQogewotICAgIEVycm9y
U3RyaW5nIGlnbm9yZWQ7CiAgICAgZm9yIChhdXRvJiBwcm90b2NvbEJyZWFrcG9pbnRJRCA6IGNv
cHlUb1ZlY3RvcihtX2RlYnVnZ2VyQnJlYWtwb2ludHNGb3JQcm90b2NvbEJyZWFrcG9pbnRJRC5r
ZXlzKCkpKQotICAgICAgICByZW1vdmVCcmVha3BvaW50KGlnbm9yZWQsIHByb3RvY29sQnJlYWtw
b2ludElEKTsKKyAgICAgICAgcmVtb3ZlQnJlYWtwb2ludChwcm90b2NvbEJyZWFrcG9pbnRJRCk7
CiAKICAgICBtX3Byb3RvY29sQnJlYWtwb2ludEZvclByb3RvY29sQnJlYWtwb2ludElELmNsZWFy
KCk7CiAKQEAgLTEzMTcsNyArMTM2Miw3IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6
ZGlkQ2xlYXJHbG9iYWxPYmplY3QoKQogICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5nbG9iYWxP
YmplY3RDbGVhcmVkKCk7CiB9CiAKLWJvb2wgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6YXNzZXJ0
UGF1c2VkKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZykKK2Jvb2wgSW5zcGVjdG9yRGVidWdnZXJB
Z2VudDo6YXNzZXJ0UGF1c2VkKFByb3RvY29sOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCiB7
CiAgICAgaWYgKCFtX3BhdXNlZEdsb2JhbE9iamVjdCkgewogICAgICAgICBlcnJvclN0cmluZyA9
ICJNdXN0IGJlIHBhdXNlZCJfczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuaAppbmRleCAz
MGZmOWYzYzI2ZDFhZTA0NjZhNzFhNWJmNjM2NjE4Mjk1NGZhMmQ4Li40ZmMzZjg0YTZlMjEyYjg4
NWI2YTJmMzI4ZjgxZWRmNzVmOTBhNDZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5o
CkBAIC00OCw3ICs0OCw2IEBAIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogY2xhc3MgQXN5bmNTdGFj
a1RyYWNlOwogY2xhc3MgSW5qZWN0ZWRTY3JpcHQ7CiBjbGFzcyBJbmplY3RlZFNjcmlwdE1hbmFn
ZXI7Ci10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKIAogY2xhc3MgSlNfRVhQT1JUX1BSSVZB
VEUgSW5zcGVjdG9yRGVidWdnZXJBZ2VudCA6IHB1YmxpYyBJbnNwZWN0b3JBZ2VudEJhc2UsIHB1
YmxpYyBEZWJ1Z2dlckJhY2tlbmREaXNwYXRjaGVySGFuZGxlciwgcHVibGljIEpTQzo6RGVidWdn
ZXI6Ok9ic2VydmVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbnNwZWN0b3JEZWJ1Z2dl
ckFnZW50KTsKQEAgLTU2LDcgKzU1LDcgQEAgY2xhc3MgSlNfRVhQT1JUX1BSSVZBVEUgSW5zcGVj
dG9yRGVidWdnZXJBZ2VudCA6IHB1YmxpYyBJbnNwZWN0b3JBZ2VudEJhc2UsIHB1YmwKIHB1Ymxp
YzoKICAgICB+SW5zcGVjdG9yRGVidWdnZXJBZ2VudCgpIG92ZXJyaWRlOwogCi0gICAgc3RhdGlj
IFJlZlB0cjxKU0M6OkJyZWFrcG9pbnQ+IGRlYnVnZ2VyQnJlYWtwb2ludEZyb21QYXlsb2FkKEVy
cm9yU3RyaW5nJiwgY29uc3QgSlNPTjo6T2JqZWN0KiBvcHRpb25zUGF5bG9hZCk7CisgICAgc3Rh
dGljIFJlZlB0cjxKU0M6OkJyZWFrcG9pbnQ+IGRlYnVnZ2VyQnJlYWtwb2ludEZyb21QYXlsb2Fk
KFByb3RvY29sOjpFcnJvclN0cmluZyYsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgb3B0aW9ucyk7
CiAKICAgICBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgYmFja3RyYWNlT2JqZWN0R3JvdXA7CiAK
QEAgLTY2LDMxICs2NSwzMSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGVuYWJsZWQoKSBj
b25zdCB7IHJldHVybiBtX2VuYWJsZWQ7IH0KIAogICAgIC8vIERlYnVnZ2VyQmFja2VuZERpc3Bh
dGNoZXJIYW5kbGVyCi0gICAgdm9pZCBlbmFibGUoRXJyb3JTdHJpbmcmKSBmaW5hbDsKLSAgICB2
b2lkIGRpc2FibGUoRXJyb3JTdHJpbmcmKSBmaW5hbDsKLSAgICB2b2lkIHNldEFzeW5jU3RhY2tU
cmFjZURlcHRoKEVycm9yU3RyaW5nJiwgaW50IGRlcHRoKSBmaW5hbDsKLSAgICB2b2lkIHNldEJy
ZWFrcG9pbnRzQWN0aXZlKEVycm9yU3RyaW5nJiwgYm9vbCBhY3RpdmUpIGZpbmFsOwotICAgIHZv
aWQgc2V0QnJlYWtwb2ludEJ5VXJsKEVycm9yU3RyaW5nJiwgaW50IGxpbmVOdW1iZXIsIGNvbnN0
IFN0cmluZyogb3B0aW9uYWxVUkwsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxVUkxSZWdleCwgY29u
c3QgaW50KiBvcHRpb25hbENvbHVtbk51bWJlciwgY29uc3QgSlNPTjo6T2JqZWN0KiBvcHRpb25z
LCBQcm90b2NvbDo6RGVidWdnZXI6OkJyZWFrcG9pbnRJZCosIFJlZlB0cjxKU09OOjpBcnJheU9m
PFByb3RvY29sOjpEZWJ1Z2dlcjo6TG9jYXRpb24+PiYgbG9jYXRpb25zKSBmaW5hbDsKLSAgICB2
b2lkIHNldEJyZWFrcG9pbnQoRXJyb3JTdHJpbmcmLCBjb25zdCBKU09OOjpPYmplY3QmIGxvY2F0
aW9uLCBjb25zdCBKU09OOjpPYmplY3QqIG9wdGlvbnMsIFByb3RvY29sOjpEZWJ1Z2dlcjo6QnJl
YWtwb2ludElkKiBvdXRCcmVha3BvaW50SWQsIFJlZlB0cjxQcm90b2NvbDo6RGVidWdnZXI6Okxv
Y2F0aW9uPiYgb3V0QWN0dWFsTG9jYXRpb24pIGZpbmFsOwotICAgIHZvaWQgcmVtb3ZlQnJlYWtw
b2ludChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgYnJlYWtwb2ludElkZW50aWZpZXIpIGZp
bmFsOwotICAgIHZvaWQgY29udGludWVVbnRpbE5leHRSdW5Mb29wKEVycm9yU3RyaW5nJikgZmlu
YWw7Ci0gICAgdm9pZCBjb250aW51ZVRvTG9jYXRpb24oRXJyb3JTdHJpbmcmLCBjb25zdCBKU09O
OjpPYmplY3QmIGxvY2F0aW9uKSBmaW5hbDsKLSAgICB2b2lkIHN0ZXBOZXh0KEVycm9yU3RyaW5n
JikgZmluYWw7Ci0gICAgdm9pZCBzdGVwT3ZlcihFcnJvclN0cmluZyYpIGZpbmFsOwotICAgIHZv
aWQgc3RlcEludG8oRXJyb3JTdHJpbmcmKSBmaW5hbDsKLSAgICB2b2lkIHN0ZXBPdXQoRXJyb3JT
dHJpbmcmKSBmaW5hbDsKLSAgICB2b2lkIHBhdXNlKEVycm9yU3RyaW5nJikgZmluYWw7Ci0gICAg
dm9pZCByZXN1bWUoRXJyb3JTdHJpbmcmKSBmaW5hbDsKLSAgICB2b2lkIHNlYXJjaEluQ29udGVu
dChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgc2NyaXB0SUQsIGNvbnN0IFN0cmluZyYgcXVl
cnksIGNvbnN0IGJvb2wqIG9wdGlvbmFsQ2FzZVNlbnNpdGl2ZSwgY29uc3QgYm9vbCogb3B0aW9u
YWxJc1JlZ2V4LCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6R2VuZXJpY1R5cGVzOjpT
ZWFyY2hNYXRjaD4+JikgZmluYWw7Ci0gICAgdm9pZCBnZXRTY3JpcHRTb3VyY2UoRXJyb3JTdHJp
bmcmLCBjb25zdCBTdHJpbmcmIHNjcmlwdElELCBTdHJpbmcqIHNjcmlwdFNvdXJjZSkgZmluYWw7
Ci0gICAgdm9pZCBnZXRGdW5jdGlvbkRldGFpbHMoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcm
IGZ1bmN0aW9uSWQsIFJlZlB0cjxQcm90b2NvbDo6RGVidWdnZXI6OkZ1bmN0aW9uRGV0YWlscz4m
KSBmaW5hbDsKLSAgICB2b2lkIHNldFBhdXNlT25EZWJ1Z2dlclN0YXRlbWVudHMoRXJyb3JTdHJp
bmcmLCBib29sIGVuYWJsZWQsIGNvbnN0IEpTT046Ok9iamVjdCogb3B0aW9ucykgZmluYWw7Ci0g
ICAgdm9pZCBzZXRQYXVzZU9uRXhjZXB0aW9ucyhFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYg
cGF1c2VTdGF0ZSwgY29uc3QgSlNPTjo6T2JqZWN0KiBvcHRpb25zKSBmaW5hbDsKLSAgICB2b2lk
IHNldFBhdXNlT25Bc3NlcnRpb25zKEVycm9yU3RyaW5nJiwgYm9vbCBlbmFibGVkLCBjb25zdCBK
U09OOjpPYmplY3QqIG9wdGlvbnMpIGZpbmFsOwotICAgIHZvaWQgc2V0UGF1c2VPbk1pY3JvdGFz
a3MoRXJyb3JTdHJpbmcmLCBib29sIGVuYWJsZWQsIGNvbnN0IEpTT046Ok9iamVjdCogb3B0aW9u
cykgZmluYWw7Ci0gICAgdm9pZCBzZXRQYXVzZUZvckludGVybmFsU2NyaXB0cyhFcnJvclN0cmlu
ZyYsIGJvb2wgc2hvdWxkUGF1c2UpIGZpbmFsOwotICAgIHZvaWQgZXZhbHVhdGVPbkNhbGxGcmFt
ZShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgY2FsbEZyYW1lSWQsIGNvbnN0IFN0cmluZyYg
ZXhwcmVzc2lvbiwgY29uc3QgU3RyaW5nKiBvYmplY3RHcm91cCwgY29uc3QgYm9vbCogaW5jbHVk
ZUNvbW1hbmRMaW5lQVBJLCBjb25zdCBib29sKiBkb05vdFBhdXNlT25FeGNlcHRpb25zQW5kTXV0
ZUNvbnNvbGUsIGNvbnN0IGJvb2wqIHJldHVybkJ5VmFsdWUsIGNvbnN0IGJvb2wqIGdlbmVyYXRl
UHJldmlldywgY29uc3QgYm9vbCogc2F2ZVJlc3VsdCwgY29uc3QgYm9vbCogZW11bGF0ZVVzZXJH
ZXN0dXJlLCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3VsdCwg
T3B0aW9uYWw8Ym9vbD4mIHdhc1Rocm93biwgT3B0aW9uYWw8aW50PiYgc2F2ZWRSZXN1bHRJbmRl
eCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRTaG91bGRCbGFja2JveFVSTChFcnJvclN0cmluZyYs
IGNvbnN0IFN0cmluZyYgdXJsLCBib29sIHNob3VsZEJsYWNrYm94LCBjb25zdCBib29sKiBjYXNl
U2Vuc2l0aXZlLCBjb25zdCBib29sKiBpc1JlZ2V4KSBmaW5hbDsKKyAgICBQcm90b2NvbDo6RXJy
b3JTdHJpbmdPcjx2b2lkPiBlbmFibGUoKSBmaW5hbDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJp
bmdPcjx2b2lkPiBkaXNhYmxlKCkgZmluYWw7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8
dm9pZD4gc2V0QXN5bmNTdGFja1RyYWNlRGVwdGgoaW50KSBmaW5hbDsKKyAgICBQcm90b2NvbDo6
RXJyb3JTdHJpbmdPcjx2b2lkPiBzZXRCcmVha3BvaW50c0FjdGl2ZShib29sKSBmaW5hbDsKKyAg
ICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxzdGQ6OnR1cGxlPFByb3RvY29sOjpEZWJ1Z2dlcjo6
QnJlYWtwb2ludElkLCBSZWY8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6RGVidWdnZXI6OkxvY2F0
aW9uPj4+PiBzZXRCcmVha3BvaW50QnlVcmwoaW50IGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyYg
dXJsLCBjb25zdCBTdHJpbmcmIHVybFJlZ2V4LCBPcHRpb25hbDxpbnQ+JiYgY29sdW1uTnVtYmVy
LCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIG9wdGlvbnMpIGZpbmFsOworICAgIFByb3RvY29sOjpF
cnJvclN0cmluZ09yPHN0ZDo6dHVwbGU8UHJvdG9jb2w6OkRlYnVnZ2VyOjpCcmVha3BvaW50SWQs
IFJlZjxQcm90b2NvbDo6RGVidWdnZXI6OkxvY2F0aW9uPj4+IHNldEJyZWFrcG9pbnQoUmVmPEpT
T046Ok9iamVjdD4mJiBsb2NhdGlvbiwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBvcHRpb25zKSBm
aW5hbDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiByZW1vdmVCcmVha3BvaW50
KGNvbnN0IFByb3RvY29sOjpEZWJ1Z2dlcjo6QnJlYWtwb2ludElkJikgZmluYWw7CisgICAgUHJv
dG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gY29udGludWVVbnRpbE5leHRSdW5Mb29wKCkgZmlu
YWw7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gY29udGludWVUb0xvY2F0aW9u
KFJlZjxKU09OOjpPYmplY3Q+JiYgbG9jYXRpb24pIGZpbmFsOworICAgIFByb3RvY29sOjpFcnJv
clN0cmluZ09yPHZvaWQ+IHN0ZXBOZXh0KCkgZmluYWw7CisgICAgUHJvdG9jb2w6OkVycm9yU3Ry
aW5nT3I8dm9pZD4gc3RlcE92ZXIoKSBmaW5hbDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdP
cjx2b2lkPiBzdGVwSW50bygpIGZpbmFsOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZv
aWQ+IHN0ZXBPdXQoKSBmaW5hbDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBw
YXVzZSgpIGZpbmFsOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHJlc3VtZSgp
IGZpbmFsOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPFBy
b3RvY29sOjpHZW5lcmljVHlwZXM6OlNlYXJjaE1hdGNoPj4+IHNlYXJjaEluQ29udGVudChjb25z
dCBQcm90b2NvbDo6RGVidWdnZXI6OlNjcmlwdElkJiwgY29uc3QgU3RyaW5nJiBxdWVyeSwgT3B0
aW9uYWw8Ym9vbD4mJiBjYXNlU2Vuc2l0aXZlLCBPcHRpb25hbDxib29sPiYmIGlzUmVnZXgpIGZp
bmFsOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPFN0cmluZz4gZ2V0U2NyaXB0U291cmNl
KGNvbnN0IFByb3RvY29sOjpEZWJ1Z2dlcjo6U2NyaXB0SWQmKSBmaW5hbDsKKyAgICBQcm90b2Nv
bDo6RXJyb3JTdHJpbmdPcjxSZWY8UHJvdG9jb2w6OkRlYnVnZ2VyOjpGdW5jdGlvbkRldGFpbHM+
PiBnZXRGdW5jdGlvbkRldGFpbHMoY29uc3QgU3RyaW5nJiBmdW5jdGlvbklkKSBmaW5hbDsKKyAg
ICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzZXRQYXVzZU9uRGVidWdnZXJTdGF0ZW1l
bnRzKGJvb2wgZW5hYmxlZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBvcHRpb25zKSBmaW5hbDsK
KyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzZXRQYXVzZU9uRXhjZXB0aW9ucyhj
b25zdCBTdHJpbmcmIHN0YXRlLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIG9wdGlvbnMpIGZpbmFs
OworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHNldFBhdXNlT25Bc3NlcnRpb25z
KGJvb2wgZW5hYmxlZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBvcHRpb25zKSBmaW5hbDsKKyAg
ICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzZXRQYXVzZU9uTWljcm90YXNrcyhib29s
IGVuYWJsZWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgb3B0aW9ucykgZmluYWw7CisgICAgUHJv
dG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc2V0UGF1c2VGb3JJbnRlcm5hbFNjcmlwdHMoYm9v
bCBzaG91bGRQYXVzZSkgZmluYWw7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8c3RkOjp0
dXBsZTxSZWY8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4sIE9wdGlvbmFsPGJvb2w+
IC8qIHdhc1Rocm93biAqLywgT3B0aW9uYWw8aW50PiAvKiBzYXZlZFJlc3VsdEluZGV4ICovPj4g
ZXZhbHVhdGVPbkNhbGxGcmFtZShjb25zdCBQcm90b2NvbDo6RGVidWdnZXI6OkNhbGxGcmFtZUlk
JiwgY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBjb25zdCBTdHJpbmcmIG9iamVjdEdyb3VwLCBP
cHRpb25hbDxib29sPiYmIGluY2x1ZGVDb21tYW5kTGluZUFQSSwgT3B0aW9uYWw8Ym9vbD4mJiBk
b05vdFBhdXNlT25FeGNlcHRpb25zQW5kTXV0ZUNvbnNvbGUsIE9wdGlvbmFsPGJvb2w+JiYgcmV0
dXJuQnlWYWx1ZSwgT3B0aW9uYWw8Ym9vbD4mJiBnZW5lcmF0ZVByZXZpZXcsIE9wdGlvbmFsPGJv
b2w+JiYgc2F2ZVJlc3VsdCwgT3B0aW9uYWw8Ym9vbD4mJiBlbXVsYXRlVXNlckdlc3R1cmUpIG92
ZXJyaWRlOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHNldFNob3VsZEJsYWNr
Ym94VVJMKGNvbnN0IFN0cmluZyYgdXJsLCBib29sIHNob3VsZEJsYWNrYm94LCBPcHRpb25hbDxi
b29sPiYmIGNhc2VTZW5zaXRpdmUsIE9wdGlvbmFsPGJvb2w+JiYgaXNSZWdleCkgZmluYWw7CiAK
ICAgICAvLyBKU0M6OkRlYnVnZ2VyOjpPYnNlcnZlcgogICAgIHZvaWQgZGlkUGFyc2VTb3VyY2Uo
SlNDOjpTb3VyY2VJRCwgY29uc3QgSlNDOjpEZWJ1Z2dlcjo6U2NyaXB0JikgZmluYWw7CkBAIC0x
NDIsMTEgKzE0MSwxMSBAQCBwdWJsaWM6CiAKIHByb3RlY3RlZDoKICAgICBJbnNwZWN0b3JEZWJ1
Z2dlckFnZW50KEFnZW50Q29udGV4dCYpOwotICAgIHZpcnR1YWwgdm9pZCBlbmFibGUoKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgZGlzYWJsZShib29sIGlzQmVpbmdEZXN0cm95ZWQpOworICAgIHZpcnR1
YWwgdm9pZCBpbnRlcm5hbEVuYWJsZSgpOworICAgIHZpcnR1YWwgdm9pZCBpbnRlcm5hbERpc2Fi
bGUoYm9vbCBpc0JlaW5nRGVzdHJveWVkKTsKIAogICAgIEluamVjdGVkU2NyaXB0TWFuYWdlciYg
aW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKCkgY29uc3QgeyByZXR1cm4gbV9pbmplY3RlZFNjcmlwdE1h
bmFnZXI7IH0KLSAgICB2aXJ0dWFsIEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0Rm9yRXZh
bChFcnJvclN0cmluZyYsIGNvbnN0IGludCogZXhlY3V0aW9uQ29udGV4dElkKSA9IDA7CisgICAg
dmlydHVhbCBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdEZvckV2YWwoUHJvdG9jb2w6OkVy
cm9yU3RyaW5nJiwgT3B0aW9uYWw8UHJvdG9jb2w6OlJ1bnRpbWU6OkV4ZWN1dGlvbkNvbnRleHRJ
ZD4mJikgPSAwOwogCiAgICAgSlNDOjpEZWJ1Z2dlciYgZGVidWdnZXIoKSB7IHJldHVybiBtX2Rl
YnVnZ2VyOyB9CiAKQEAgLTE2Niw4ICsxNjUsOCBAQCBwcml2YXRlOgogICAgIGNsYXNzIFByb3Rv
Y29sQnJlYWtwb2ludCB7CiAgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogICAgIHB1
YmxpYzoKLSAgICAgICAgc3RhdGljIE9wdGlvbmFsPFByb3RvY29sQnJlYWtwb2ludD4gZnJvbVBh
eWxvYWQoRXJyb3JTdHJpbmcmLCBKU0M6OlNvdXJjZUlELCB1bnNpZ25lZCBsaW5lTnVtYmVyLCB1
bnNpZ25lZCBjb2x1bW5OdW1iZXIsIGNvbnN0IEpTT046Ok9iamVjdCogb3B0aW9uc1BheWxvYWQg
PSBudWxscHRyKTsKLSAgICAgICAgc3RhdGljIE9wdGlvbmFsPFByb3RvY29sQnJlYWtwb2ludD4g
ZnJvbVBheWxvYWQoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHVybCwgYm9vbCBpc1JlZ2V4
LCB1bnNpZ25lZCBsaW5lTnVtYmVyLCB1bnNpZ25lZCBjb2x1bW5OdW1iZXIsIGNvbnN0IEpTT046
Ok9iamVjdCogb3B0aW9uc1BheWxvYWQgPSBudWxscHRyKTsKKyAgICAgICAgc3RhdGljIE9wdGlv
bmFsPFByb3RvY29sQnJlYWtwb2ludD4gZnJvbVBheWxvYWQoUHJvdG9jb2w6OkVycm9yU3RyaW5n
JiwgSlNDOjpTb3VyY2VJRCwgdW5zaWduZWQgbGluZU51bWJlciwgdW5zaWduZWQgY29sdW1uTnVt
YmVyLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIG9wdGlvbnMgPSBudWxscHRyKTsKKyAgICAgICAg
c3RhdGljIE9wdGlvbmFsPFByb3RvY29sQnJlYWtwb2ludD4gZnJvbVBheWxvYWQoUHJvdG9jb2w6
OkVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiB1cmwsIGJvb2wgaXNSZWdleCwgdW5zaWduZWQg
bGluZU51bWJlciwgdW5zaWduZWQgY29sdW1uTnVtYmVyLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYm
IG9wdGlvbnMgPSBudWxscHRyKTsKIAogICAgICAgICBQcm90b2NvbEJyZWFrcG9pbnQoKTsKICAg
ICAgICAgUHJvdG9jb2xCcmVha3BvaW50KEpTQzo6U291cmNlSUQsIHVuc2lnbmVkIGxpbmVOdW1i
ZXIsIHVuc2lnbmVkIGNvbHVtbk51bWJlciwgY29uc3QgU3RyaW5nJiBjb25kaXRpb24gPSBudWxs
U3RyaW5nKCksIEpTQzo6QnJlYWtwb2ludDo6QWN0aW9uc1ZlY3RvciYmIGFjdGlvbnMgPSB7IH0s
IGJvb2wgYXV0b0NvbnRpbnVlID0gZmFsc2UsIHNpemVfdCBpZ25vcmVDb3VudCA9IDApOwpAQCAt
MTc1LDEyICsxNzQsMTIgQEAgcHJpdmF0ZToKIAogICAgICAgICBSZWY8SlNDOjpCcmVha3BvaW50
PiBjcmVhdGVEZWJ1Z2dlckJyZWFrcG9pbnQoSlNDOjpCcmVha3BvaW50SUQsIEpTQzo6U291cmNl
SUQpIGNvbnN0OwogCi0gICAgICAgIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2Vy
OjpCcmVha3BvaW50SWQmIGlkKCkgY29uc3QgeyByZXR1cm4gbV9pZDsgfQorICAgICAgICBjb25z
dCBQcm90b2NvbDo6RGVidWdnZXI6OkJyZWFrcG9pbnRJZCYgaWQoKSBjb25zdCB7IHJldHVybiBt
X2lkOyB9CiAKICAgICAgICAgYm9vbCBtYXRjaGVzU2NyaXB0VVJMKGNvbnN0IFN0cmluZyYpIGNv
bnN0OwogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdn
ZXI6OkJyZWFrcG9pbnRJZCBtX2lkOworICAgICAgICBQcm90b2NvbDo6RGVidWdnZXI6OkJyZWFr
cG9pbnRJZCBtX2lkOwogCiAjaWYgQVNTRVJUX0VOQUJMRUQKICAgICAgICAgSlNDOjpTb3VyY2VJ
RCBtX3NvdXJjZUlEIHsgSlNDOjpub1NvdXJjZUlEIH07CkBAIC0yMDIsNyArMjAxLDcgQEAgcHJp
dmF0ZToKICAgICBib29sIHNldEJyZWFrcG9pbnQoSlNDOjpCcmVha3BvaW50Jik7CiAgICAgdm9p
ZCBkaWRTZXRCcmVha3BvaW50KFByb3RvY29sQnJlYWtwb2ludCYsIEpTQzo6QnJlYWtwb2ludCYp
OwogCi0gICAgYm9vbCBhc3NlcnRQYXVzZWQoRXJyb3JTdHJpbmcmKTsKKyAgICBib29sIGFzc2Vy
dFBhdXNlZChQcm90b2NvbDo6RXJyb3JTdHJpbmcmKTsKICAgICB2b2lkIGNsZWFyRGVidWdnZXJC
cmVha3BvaW50U3RhdGUoKTsKICAgICB2b2lkIGNsZWFySW5zcGVjdG9yQnJlYWtwb2ludFN0YXRl
KCk7CiAgICAgdm9pZCBjbGVhclBhdXNlRGV0YWlscygpOwpAQCAtMjQ4LDggKzI0Nyw4IEBAIHBy
aXZhdGU6CiAgICAgSlNDOjpKU0dsb2JhbE9iamVjdCogbV9wYXVzZWRHbG9iYWxPYmplY3QgeyBu
dWxscHRyIH07CiAgICAgSlNDOjpTdHJvbmc8SlNDOjpVbmtub3duPiBtX2N1cnJlbnRDYWxsU3Rh
Y2s7CiAKLSAgICBIYXNoTWFwPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpCcmVha3Bv
aW50SWQsIFByb3RvY29sQnJlYWtwb2ludD4gbV9wcm90b2NvbEJyZWFrcG9pbnRGb3JQcm90b2Nv
bEJyZWFrcG9pbnRJRDsKLSAgICBIYXNoTWFwPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2Vy
OjpCcmVha3BvaW50SWQsIEpTQzo6QnJlYWtwb2ludHNWZWN0b3I+IG1fZGVidWdnZXJCcmVha3Bv
aW50c0ZvclByb3RvY29sQnJlYWtwb2ludElEOworICAgIEhhc2hNYXA8UHJvdG9jb2w6OkRlYnVn
Z2VyOjpCcmVha3BvaW50SWQsIFByb3RvY29sQnJlYWtwb2ludD4gbV9wcm90b2NvbEJyZWFrcG9p
bnRGb3JQcm90b2NvbEJyZWFrcG9pbnRJRDsKKyAgICBIYXNoTWFwPFByb3RvY29sOjpEZWJ1Z2dl
cjo6QnJlYWtwb2ludElkLCBKU0M6OkJyZWFrcG9pbnRzVmVjdG9yPiBtX2RlYnVnZ2VyQnJlYWtw
b2ludHNGb3JQcm90b2NvbEJyZWFrcG9pbnRJRDsKICAgICBKU0M6OkJyZWFrcG9pbnRJRCBtX25l
eHREZWJ1Z2dlckJyZWFrcG9pbnRJRCB7IEpTQzo6bm9CcmVha3BvaW50SUQgKyAxIH07CiAKICAg
ICBSZWZQdHI8SlNDOjpCcmVha3BvaW50PiBtX2NvbnRpbnVlVG9Mb2NhdGlvbkRlYnVnZ2VyQnJl
YWtwb2ludDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdl
bnRzL0luc3BlY3RvckhlYXBBZ2VudC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL2FnZW50cy9JbnNwZWN0b3JIZWFwQWdlbnQuY3BwCmluZGV4IDhjNjIxYWQ0MWM0ZGE1MDA0
M2QzMDIyMDBhNDZmYWU5ZWZjOTcxOGMuLjg1Y2VkOWYzZGY2MjIzMDFiOTVlMzNlNDkzNWNiYmYx
NjJiN2UzMzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdl
bnRzL0luc3BlY3RvckhlYXBBZ2VudC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9ySGVhcEFnZW50LmNwcApAQCAtNTYsMjggKzU2LDI1IEBA
IHZvaWQgSW5zcGVjdG9ySGVhcEFnZW50OjpkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoRnJv
bnRlbmRSb3V0ZXIqLCBCYWNrZW5kRGlzCiAKIHZvaWQgSW5zcGVjdG9ySGVhcEFnZW50Ojp3aWxs
RGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChEaXNjb25uZWN0UmVhc29uKQogewotICAgIEVycm9y
U3RyaW5nIGlnbm9yZWQ7Ci0gICAgZGlzYWJsZShpZ25vcmVkKTsKKyAgICBkaXNhYmxlKCk7CiB9
CiAKLXZvaWQgSW5zcGVjdG9ySGVhcEFnZW50OjplbmFibGUoRXJyb3JTdHJpbmcmIGVycm9yU3Ry
aW5nKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9ySGVhcEFnZW50Ojpl
bmFibGUoKQogewotICAgIGlmIChtX2VuYWJsZWQpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAi
SGVhcCBkb21haW4gYWxyZWFkeSBlbmFibGVkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQor
ICAgIGlmIChtX2VuYWJsZWQpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiSGVhcCBk
b21haW4gYWxyZWFkeSBlbmFibGVkIl9zKTsKIAogICAgIG1fZW5hYmxlZCA9IHRydWU7CiAKICAg
ICBtX2Vudmlyb25tZW50LnZtKCkuaGVhcC5hZGRPYnNlcnZlcih0aGlzKTsKKworICAgIHJldHVy
biB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9ySGVhcEFnZW50OjpkaXNhYmxlKEVycm9yU3RyaW5n
JiBlcnJvclN0cmluZykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3Rvckhl
YXBBZ2VudDo6ZGlzYWJsZSgpCiB7Ci0gICAgaWYgKCFtX2VuYWJsZWQpIHsKLSAgICAgICAgZXJy
b3JTdHJpbmcgPSAiSGVhcCBkb21haW4gYWxyZWFkeSBkaXNhYmxlZCJfczsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KKyAgICBpZiAoIW1fZW5hYmxlZCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4
cGVjdGVkKCJIZWFwIGRvbWFpbiBhbHJlYWR5IGRpc2FibGVkIl9zKTsKIAogICAgIG1fZW5hYmxl
ZCA9IGZhbHNlOwogICAgIG1fdHJhY2tpbmcgPSBmYWxzZTsKQEAgLTg1LDE3ICs4MiwyMSBAQCB2
b2lkIEluc3BlY3RvckhlYXBBZ2VudDo6ZGlzYWJsZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcp
CiAgICAgbV9lbnZpcm9ubWVudC52bSgpLmhlYXAucmVtb3ZlT2JzZXJ2ZXIodGhpcyk7CiAKICAg
ICBjbGVhckhlYXBTbmFwc2hvdHMoKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5z
cGVjdG9ySGVhcEFnZW50OjpnYyhFcnJvclN0cmluZyYpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdP
cjx2b2lkPiBJbnNwZWN0b3JIZWFwQWdlbnQ6OmdjKCkKIHsKICAgICBWTSYgdm0gPSBtX2Vudmly
b25tZW50LnZtKCk7CiAgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOwogICAgIHNhbml0aXplU3Rh
Y2tGb3JWTSh2bSk7CiAgICAgdm0uaGVhcC5jb2xsZWN0Tm93KFN5bmMsIENvbGxlY3Rpb25TY29w
ZTo6RnVsbCk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckhlYXBBZ2Vu
dDo6c25hcHNob3QoRXJyb3JTdHJpbmcmLCBkb3VibGUqIHRpbWVzdGFtcCwgU3RyaW5nKiBzbmFw
c2hvdERhdGEpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxzdGQ6OnR1cGxlPGRvdWJsZSwgUHJv
dG9jb2w6OkhlYXA6OkhlYXBTbmFwc2hvdERhdGE+PiBJbnNwZWN0b3JIZWFwQWdlbnQ6OnNuYXBz
aG90KCkKIHsKICAgICBWTSYgdm0gPSBtX2Vudmlyb25tZW50LnZtKCk7CiAgICAgSlNMb2NrSG9s
ZGVyIGxvY2sodm0pOwpAQCAtMTAzLDggKzEwNCw4IEBAIHZvaWQgSW5zcGVjdG9ySGVhcEFnZW50
OjpzbmFwc2hvdChFcnJvclN0cmluZyYsIGRvdWJsZSogdGltZXN0YW1wLCBTdHJpbmcqIHNuYXBz
CiAgICAgSGVhcFNuYXBzaG90QnVpbGRlciBzbmFwc2hvdEJ1aWxkZXIodm0uZW5zdXJlSGVhcFBy
b2ZpbGVyKCkpOwogICAgIHNuYXBzaG90QnVpbGRlci5idWlsZFNuYXBzaG90KCk7CiAKLSAgICAq
dGltZXN0YW1wID0gbV9lbnZpcm9ubWVudC5leGVjdXRpb25TdG9wd2F0Y2goKS5lbGFwc2VkVGlt
ZSgpLnNlY29uZHMoKTsKLSAgICAqc25hcHNob3REYXRhID0gc25hcHNob3RCdWlsZGVyLmpzb24o
WyZdIChjb25zdCBIZWFwU25hcHNob3ROb2RlJiBub2RlKSB7CisgICAgYXV0byB0aW1lc3RhbXAg
PSBtX2Vudmlyb25tZW50LmV4ZWN1dGlvblN0b3B3YXRjaCgpLmVsYXBzZWRUaW1lKCkuc2Vjb25k
cygpOworICAgIGF1dG8gc25hcHNob3REYXRhID0gc25hcHNob3RCdWlsZGVyLmpzb24oWyZdIChj
b25zdCBIZWFwU25hcHNob3ROb2RlJiBub2RlKSB7CiAgICAgICAgIGlmIChTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9IG5vZGUuY2VsbC0+c3RydWN0dXJlKHZtKSkgewogICAgICAgICAgICAgaWYgKEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBzdHJ1Y3R1cmUtPmdsb2JhbE9iamVjdCgpKSB7
CiAgICAgICAgICAgICAgICAgaWYgKCFtX2Vudmlyb25tZW50LmNhbkFjY2Vzc0luc3BlY3RlZFNj
cmlwdFN0YXRlKGdsb2JhbE9iamVjdCkpCkBAIC0xMTMsMzcgKzExNCw0NSBAQCB2b2lkIEluc3Bl
Y3RvckhlYXBBZ2VudDo6c25hcHNob3QoRXJyb3JTdHJpbmcmLCBkb3VibGUqIHRpbWVzdGFtcCwg
U3RyaW5nKiBzbmFwcwogICAgICAgICB9CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0pOwor
CisgICAgcmV0dXJuIHsgeyB0aW1lc3RhbXAsIHNuYXBzaG90RGF0YSB9IH07CiB9CiAKLXZvaWQg
SW5zcGVjdG9ySGVhcEFnZW50OjpzdGFydFRyYWNraW5nKEVycm9yU3RyaW5nJiBlcnJvclN0cmlu
ZykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckhlYXBBZ2VudDo6c3Rh
cnRUcmFja2luZygpCiB7CiAgICAgaWYgKG1fdHJhY2tpbmcpCi0gICAgICAgIHJldHVybjsKKyAg
ICAgICAgcmV0dXJuIHsgfTsKIAogICAgIG1fdHJhY2tpbmcgPSB0cnVlOwogCi0gICAgZG91Ymxl
IHRpbWVzdGFtcDsKLSAgICBTdHJpbmcgc25hcHNob3REYXRhOwotICAgIHNuYXBzaG90KGVycm9y
U3RyaW5nLCAmdGltZXN0YW1wLCAmc25hcHNob3REYXRhKTsKKyAgICBhdXRvIHJlc3VsdCA9IHNu
YXBzaG90KCk7CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3Rl
ZChXVEZNb3ZlKHJlc3VsdC5lcnJvcigpKSk7CiAKKyAgICBhdXRvIFt0aW1lc3RhbXAsIHNuYXBz
aG90RGF0YV0gPSBXVEZNb3ZlKHJlc3VsdC52YWx1ZSgpKTsKICAgICBtX2Zyb250ZW5kRGlzcGF0
Y2hlci0+dHJhY2tpbmdTdGFydCh0aW1lc3RhbXAsIHNuYXBzaG90RGF0YSk7CisKKyAgICByZXR1
cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckhlYXBBZ2VudDo6c3RvcFRyYWNraW5nKEVycm9y
U3RyaW5nJiBlcnJvclN0cmluZykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3Bl
Y3RvckhlYXBBZ2VudDo6c3RvcFRyYWNraW5nKCkKIHsKICAgICBpZiAoIW1fdHJhY2tpbmcpCi0g
ICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIG1fdHJhY2tpbmcgPSBm
YWxzZTsKIAotICAgIGRvdWJsZSB0aW1lc3RhbXA7Ci0gICAgU3RyaW5nIHNuYXBzaG90RGF0YTsK
LSAgICBzbmFwc2hvdChlcnJvclN0cmluZywgJnRpbWVzdGFtcCwgJnNuYXBzaG90RGF0YSk7Cisg
ICAgYXV0byByZXN1bHQgPSBzbmFwc2hvdCgpOworICAgIGlmICghcmVzdWx0KQorICAgICAgICBy
ZXR1cm4gbWFrZVVuZXhwZWN0ZWQoV1RGTW92ZShyZXN1bHQuZXJyb3IoKSkpOwogCisgICAgYXV0
byBbdGltZXN0YW1wLCBzbmFwc2hvdERhdGFdID0gV1RGTW92ZShyZXN1bHQudmFsdWUoKSk7CiAg
ICAgbV9mcm9udGVuZERpc3BhdGNoZXItPnRyYWNraW5nQ29tcGxldGUodGltZXN0YW1wLCBzbmFw
c2hvdERhdGEpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotT3B0aW9uYWw8SGVhcFNuYXBzaG90
Tm9kZT4gSW5zcGVjdG9ySGVhcEFnZW50Ojpub2RlRm9ySGVhcE9iamVjdElkZW50aWZpZXIoRXJy
b3JTdHJpbmcmIGVycm9yU3RyaW5nLCB1bnNpZ25lZCBoZWFwT2JqZWN0SWRlbnRpZmllcikKK09w
dGlvbmFsPEhlYXBTbmFwc2hvdE5vZGU+IEluc3BlY3RvckhlYXBBZ2VudDo6bm9kZUZvckhlYXBP
YmplY3RJZGVudGlmaWVyKFByb3RvY29sOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIHVuc2ln
bmVkIGhlYXBPYmplY3RJZGVudGlmaWVyKQogewogICAgIEhlYXBQcm9maWxlciogaGVhcFByb2Zp
bGVyID0gbV9lbnZpcm9ubWVudC52bSgpLmhlYXBQcm9maWxlcigpOwogICAgIGlmICghaGVhcFBy
b2ZpbGVyKSB7CkBAIC0xNjYsOCArMTc1LDEwIEBAIE9wdGlvbmFsPEhlYXBTbmFwc2hvdE5vZGU+
IEluc3BlY3RvckhlYXBBZ2VudDo6bm9kZUZvckhlYXBPYmplY3RJZGVudGlmaWVyKEVycm9yCiAg
ICAgcmV0dXJuIG9wdGlvbmFsTm9kZTsKIH0KIAotdm9pZCBJbnNwZWN0b3JIZWFwQWdlbnQ6Omdl
dFByZXZpZXcoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgaGVhcE9iamVjdElkLCBPcHRp
b25hbDxTdHJpbmc+JiByZXN1bHRTdHJpbmcsIFJlZlB0cjxQcm90b2NvbDo6RGVidWdnZXI6OkZ1
bmN0aW9uRGV0YWlscz4mIGZ1bmN0aW9uRGV0YWlscywgUmVmUHRyPFByb3RvY29sOjpSdW50aW1l
OjpPYmplY3RQcmV2aWV3PiYgb2JqZWN0UHJldmlldykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09y
PHN0ZDo6dHVwbGU8U3RyaW5nLCBSZWZQdHI8UHJvdG9jb2w6OkRlYnVnZ2VyOjpGdW5jdGlvbkRl
dGFpbHM+LCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6Ok9iamVjdFByZXZpZXc+Pj4gSW5zcGVj
dG9ySGVhcEFnZW50OjpnZXRQcmV2aWV3KGludCBoZWFwT2JqZWN0SWQpCiB7CisgICAgUHJvdG9j
b2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAgICAgLy8gUHJldmVudCB0aGUgY2VsbCBm
cm9tIGdldHRpbmcgY29sbGVjdGVkIGFzIHdlIGxvb2sgaXQgdXAuCiAgICAgVk0mIHZtID0gbV9l
bnZpcm9ubWVudC52bSgpOwogICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKQEAgLTE3Niw1MyAr
MTg3LDQ4IEBAIHZvaWQgSW5zcGVjdG9ySGVhcEFnZW50OjpnZXRQcmV2aWV3KEVycm9yU3RyaW5n
JiBlcnJvclN0cmluZywgaW50IGhlYXBPYmplY3RJZCwKICAgICB1bnNpZ25lZCBoZWFwT2JqZWN0
SWRlbnRpZmllciA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihoZWFwT2JqZWN0SWQpOwogICAgIGNv
bnN0IE9wdGlvbmFsPEhlYXBTbmFwc2hvdE5vZGU+IG9wdGlvbmFsTm9kZSA9IG5vZGVGb3JIZWFw
T2JqZWN0SWRlbnRpZmllcihlcnJvclN0cmluZywgaGVhcE9iamVjdElkZW50aWZpZXIpOwogICAg
IGlmICghb3B0aW9uYWxOb2RlKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtl
VW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAgICAvLyBTdHJpbmcgcHJldmlldy4KICAgICBK
U0NlbGwqIGNlbGwgPSBvcHRpb25hbE5vZGUtPmNlbGw7Ci0gICAgaWYgKGNlbGwtPmlzU3RyaW5n
KCkpIHsKLSAgICAgICAgcmVzdWx0U3RyaW5nID0gYXNTdHJpbmcoY2VsbCktPnRyeUdldFZhbHVl
KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKGNlbGwtPmlzU3RyaW5nKCkpCisg
ICAgICAgIHJldHVybiB7IHsgYXNTdHJpbmcoY2VsbCktPnRyeUdldFZhbHVlKCksIG51bGxwdHIs
IG51bGxwdHIgfSB9OwogCiAgICAgLy8gQmlnSW50IHByZXZpZXcuCi0gICAgaWYgKGNlbGwtPmlz
SGVhcEJpZ0ludCgpKSB7Ci0gICAgICAgIHJlc3VsdFN0cmluZyA9IEpTQmlnSW50Ojp0cnlHZXRT
dHJpbmcodm0sIGFzSGVhcEJpZ0ludChjZWxsKSwgMTApOwotICAgICAgICByZXR1cm47Ci0gICAg
fQorICAgIGlmIChjZWxsLT5pc0hlYXBCaWdJbnQoKSkKKyAgICAgICAgcmV0dXJuIHsgeyBKU0Jp
Z0ludDo6dHJ5R2V0U3RyaW5nKHZtLCBhc0hlYXBCaWdJbnQoY2VsbCksIDEwKSwgbnVsbHB0ciwg
bnVsbHB0ciB9IH07CiAKICAgICAvLyBGSVhNRTogUHJvdmlkZSBwcmV2aWV3IGluZm9ybWF0aW9u
IGZvciBJbnRlcm5hbCBPYmplY3RzPyBDb2RlQmxvY2ssIEV4ZWN1dGFibGUsIGV0Yy4KIAogICAg
IFN0cnVjdHVyZSogc3RydWN0dXJlID0gY2VsbC0+c3RydWN0dXJlKHZtKTsKLSAgICBpZiAoIXN0
cnVjdHVyZSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJVbmFibGUgdG8gZ2V0IG9iamVjdCBk
ZXRhaWxzIC0gU3RydWN0dXJlIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICgh
c3RydWN0dXJlKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIlVuYWJsZSB0byBnZXQg
b2JqZWN0IGRldGFpbHMgLSBTdHJ1Y3R1cmUiX3MpOwogCiAgICAgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCA9IHN0cnVjdHVyZS0+Z2xvYmFsT2JqZWN0KCk7Ci0gICAgaWYgKCFnbG9iYWxP
YmplY3QpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiVW5hYmxlIHRvIGdldCBvYmplY3QgZGV0
YWlscyAtIEdsb2JhbE9iamVjdCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAo
IWdsb2JhbE9iamVjdCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJVbmFibGUgdG8g
Z2V0IG9iamVjdCBkZXRhaWxzIC0gR2xvYmFsT2JqZWN0Il9zKTsKIAogICAgIEluamVjdGVkU2Ny
aXB0IGluamVjdGVkU2NyaXB0ID0gbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIuaW5qZWN0ZWRTY3Jp
cHRGb3IoZ2xvYmFsT2JqZWN0KTsKLSAgICBpZiAoaW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgp
KSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIlVuYWJsZSB0byBnZXQgb2JqZWN0IGRldGFpbHMg
LSBJbmplY3RlZFNjcmlwdCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoaW5q
ZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQo
IlVuYWJsZSB0byBnZXQgb2JqZWN0IGRldGFpbHMgLSBJbmplY3RlZFNjcmlwdCJfcyk7CiAKICAg
ICAvLyBGdW5jdGlvbiBwcmV2aWV3LgogICAgIGlmIChjZWxsLT5pbmhlcml0czxKU0Z1bmN0aW9u
Pih2bSkpIHsKKyAgICAgICAgUmVmUHRyPFByb3RvY29sOjpEZWJ1Z2dlcjo6RnVuY3Rpb25EZXRh
aWxzPiBmdW5jdGlvbkRldGFpbHM7CiAgICAgICAgIGluamVjdGVkU2NyaXB0LmZ1bmN0aW9uRGV0
YWlscyhlcnJvclN0cmluZywgY2VsbCwgZnVuY3Rpb25EZXRhaWxzKTsKLSAgICAgICAgcmV0dXJu
OworICAgICAgICBpZiAoIWZ1bmN0aW9uRGV0YWlscykKKyAgICAgICAgICAgIHJldHVybiBtYWtl
VW5leHBlY3RlZChlcnJvclN0cmluZyk7CisgICAgICAgIHJldHVybiB7IHsgbnVsbFN0cmluZygp
LCBmdW5jdGlvbkRldGFpbHMsIG51bGxwdHIgfSB9OwogICAgIH0KIAogICAgIC8vIE9iamVjdCBw
cmV2aWV3LgotICAgIG9iamVjdFByZXZpZXcgPSBpbmplY3RlZFNjcmlwdC5wcmV2aWV3VmFsdWUo
Y2VsbCk7CisgICAgcmV0dXJuIHsgeyBudWxsU3RyaW5nKCksIG51bGxwdHIsIGluamVjdGVkU2Ny
aXB0LnByZXZpZXdWYWx1ZShjZWxsKSB9IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9ySGVhcEFnZW50
OjpnZXRSZW1vdGVPYmplY3QoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgaGVhcE9iamVj
dElkLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsT2JqZWN0R3JvdXAsIFJlZlB0cjxQcm90b2NvbDo6
UnVudGltZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0KQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8
UmVmPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+PiBJbnNwZWN0b3JIZWFwQWdlbnQ6
OmdldFJlbW90ZU9iamVjdChpbnQgaGVhcE9iamVjdElkLCBjb25zdCBTdHJpbmcmIG9iamVjdEdy
b3VwKQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIC8v
IFByZXZlbnQgdGhlIGNlbGwgZnJvbSBnZXR0aW5nIGNvbGxlY3RlZCBhcyB3ZSBsb29rIGl0IHVw
LgogICAgIFZNJiB2bSA9IG1fZW52aXJvbm1lbnQudm0oKTsKICAgICBKU0xvY2tIb2xkZXIgbG9j
ayh2bSk7CkBAIC0yMzEsMjkgKzIzNywyNiBAQCB2b2lkIEluc3BlY3RvckhlYXBBZ2VudDo6Z2V0
UmVtb3RlT2JqZWN0KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IGhlYXBPYmplYwogICAg
IHVuc2lnbmVkIGhlYXBPYmplY3RJZGVudGlmaWVyID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGhl
YXBPYmplY3RJZCk7CiAgICAgY29uc3QgT3B0aW9uYWw8SGVhcFNuYXBzaG90Tm9kZT4gb3B0aW9u
YWxOb2RlID0gbm9kZUZvckhlYXBPYmplY3RJZGVudGlmaWVyKGVycm9yU3RyaW5nLCBoZWFwT2Jq
ZWN0SWRlbnRpZmllcik7CiAgICAgaWYgKCFvcHRpb25hbE5vZGUpCi0gICAgICAgIHJldHVybjsK
KyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgIEpTQ2Vs
bCogY2VsbCA9IG9wdGlvbmFsTm9kZS0+Y2VsbDsKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9
IGNlbGwtPnN0cnVjdHVyZSh2bSk7Ci0gICAgaWYgKCFzdHJ1Y3R1cmUpIHsKLSAgICAgICAgZXJy
b3JTdHJpbmcgPSAiVW5hYmxlIHRvIGdldCBvYmplY3QgZGV0YWlscyAtIFN0cnVjdHVyZSJfczsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoIXN0cnVjdHVyZSkKKyAgICAgICAgcmV0
dXJuIG1ha2VVbmV4cGVjdGVkKCJVbmFibGUgdG8gZ2V0IG9iamVjdCBkZXRhaWxzIC0gU3RydWN0
dXJlIl9zKTsKIAogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBzdHJ1Y3R1cmUt
Pmdsb2JhbE9iamVjdCgpOwotICAgIGlmICghZ2xvYmFsT2JqZWN0KSB7Ci0gICAgICAgIGVycm9y
U3RyaW5nID0gIlVuYWJsZSB0byBnZXQgb2JqZWN0IGRldGFpbHMgLSBHbG9iYWxPYmplY3QiX3M7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKCFnbG9iYWxPYmplY3QpCisgICAgICAg
IHJldHVybiBtYWtlVW5leHBlY3RlZCgiVW5hYmxlIHRvIGdldCBvYmplY3QgZGV0YWlscyAtIEds
b2JhbE9iamVjdCJfcyk7CiAKICAgICBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdCA9IG1f
aW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmluamVjdGVkU2NyaXB0Rm9yKGdsb2JhbE9iamVjdCk7Ci0g
ICAgaWYgKGluamVjdGVkU2NyaXB0Lmhhc05vVmFsdWUoKSkgewotICAgICAgICBlcnJvclN0cmlu
ZyA9ICJVbmFibGUgdG8gZ2V0IG9iamVjdCBkZXRhaWxzIC0gSW5qZWN0ZWRTY3JpcHQiX3M7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKGluamVjdGVkU2NyaXB0Lmhhc05vVmFsdWUo
KSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJVbmFibGUgdG8gZ2V0IG9iamVjdCBk
ZXRhaWxzIC0gSW5qZWN0ZWRTY3JpcHQiX3MpOwogCi0gICAgU3RyaW5nIG9iamVjdEdyb3VwID0g
b3B0aW9uYWxPYmplY3RHcm91cCA/ICpvcHRpb25hbE9iamVjdEdyb3VwIDogU3RyaW5nKCk7Ci0g
ICAgcmVzdWx0ID0gaW5qZWN0ZWRTY3JpcHQud3JhcE9iamVjdChjZWxsLCBvYmplY3RHcm91cCwg
dHJ1ZSk7CisgICAgYXV0byBvYmplY3QgPSBpbmplY3RlZFNjcmlwdC53cmFwT2JqZWN0KGNlbGws
IG9iamVjdEdyb3VwLCB0cnVlKTsKKyAgICBpZiAoIW9iamVjdCkKKyAgICAgICAgcmV0dXJuIG1h
a2VVbmV4cGVjdGVkKCJJbnRlcm5hbCBlcnJvcjogdW5hYmxlIHRvIGNhc3QgT2JqZWN0Iik7CisK
KyAgICByZXR1cm4gb2JqZWN0LnJlbGVhc2VOb25OdWxsKCk7CiB9CiAKIHN0YXRpYyBQcm90b2Nv
bDo6SGVhcDo6R2FyYmFnZUNvbGxlY3Rpb246OlR5cGUgcHJvdG9jb2xUeXBlRm9ySGVhcE9wZXJh
dGlvbihDb2xsZWN0aW9uU2NvcGUgc2NvcGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JIZWFwQWdlbnQuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckhlYXBBZ2VudC5oCmluZGV4IGRl
ZjZhY2RlOTQ2MGU3MTI4MDA0MWRhYTY1ZmNjZDY4NWUwZjdjMGYuLmNhYTUxMmQwYWIyZTEwYTg4
ZTBlZTYwYzJlMzJkNzQzOTQyMjI3YWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckhlYXBBZ2VudC5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckhlYXBBZ2VudC5oCkBAIC00MCw3
ICs0MCw2IEBAIHN0cnVjdCBIZWFwU25hcHNob3ROb2RlOwogbmFtZXNwYWNlIEluc3BlY3RvciB7
CiAKIGNsYXNzIEluamVjdGVkU2NyaXB0TWFuYWdlcjsKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3Ry
aW5nOwogCiBjbGFzcyBKU19FWFBPUlRfUFJJVkFURSBJbnNwZWN0b3JIZWFwQWdlbnQgOiBwdWJs
aWMgSW5zcGVjdG9yQWdlbnRCYXNlLCBwdWJsaWMgSGVhcEJhY2tlbmREaXNwYXRjaGVySGFuZGxl
ciwgcHVibGljIEpTQzo6SGVhcE9ic2VydmVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJ
bnNwZWN0b3JIZWFwQWdlbnQpOwpAQCAtNTQsMTQgKzUzLDE0IEBAIHB1YmxpYzoKICAgICB2b2lk
IHdpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKERpc2Nvbm5lY3RSZWFzb24pIGZpbmFsOwog
CiAgICAgLy8gSGVhcEJhY2tlbmREaXNwYXRjaGVySGFuZGxlcgotICAgIHZvaWQgZW5hYmxlKEVy
cm9yU3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkaXNhYmxlKEVycm9yU3RyaW5nJikgb3Zl
cnJpZGU7Ci0gICAgdm9pZCBnYyhFcnJvclN0cmluZyYpIGZpbmFsOwotICAgIHZvaWQgc25hcHNo
b3QoRXJyb3JTdHJpbmcmLCBkb3VibGUqIHRpbWVzdGFtcCwgU3RyaW5nKiBzbmFwc2hvdERhdGEp
IGZpbmFsOwotICAgIHZvaWQgc3RhcnRUcmFja2luZyhFcnJvclN0cmluZyYpIGZpbmFsOwotICAg
IHZvaWQgc3RvcFRyYWNraW5nKEVycm9yU3RyaW5nJikgZmluYWw7Ci0gICAgdm9pZCBnZXRQcmV2
aWV3KEVycm9yU3RyaW5nJiwgaW50IGhlYXBPYmplY3RJZCwgT3B0aW9uYWw8U3RyaW5nPiYgcmVz
dWx0U3RyaW5nLCBSZWZQdHI8UHJvdG9jb2w6OkRlYnVnZ2VyOjpGdW5jdGlvbkRldGFpbHM+Jiwg
UmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpPYmplY3RQcmV2aWV3PiYpIGZpbmFsOwotICAgIHZv
aWQgZ2V0UmVtb3RlT2JqZWN0KEVycm9yU3RyaW5nJiwgaW50IGhlYXBPYmplY3RJZCwgY29uc3Qg
U3RyaW5nKiBvcHRpb25hbE9iamVjdEdyb3VwLCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJl
bW90ZU9iamVjdD4mIHJlc3VsdCkgZmluYWw7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8
dm9pZD4gZW5hYmxlKCkgb3ZlcnJpZGU7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9p
ZD4gZGlzYWJsZSgpIG92ZXJyaWRlOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+
IGdjKCkgZmluYWw7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8c3RkOjp0dXBsZTxkb3Vi
bGUsIFByb3RvY29sOjpIZWFwOjpIZWFwU25hcHNob3REYXRhPj4gc25hcHNob3QoKSBmaW5hbDsK
KyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzdGFydFRyYWNraW5nKCkgZmluYWw7
CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc3RvcFRyYWNraW5nKCkgZmluYWw7
CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8c3RkOjp0dXBsZTxTdHJpbmcsIFJlZlB0cjxQ
cm90b2NvbDo6RGVidWdnZXI6OkZ1bmN0aW9uRGV0YWlscz4sIFJlZlB0cjxQcm90b2NvbDo6UnVu
dGltZTo6T2JqZWN0UHJldmlldz4+PiBnZXRQcmV2aWV3KGludCBoZWFwT2JqZWN0SWQpIGZpbmFs
OworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxQcm90b2NvbDo6UnVudGltZTo6UmVt
b3RlT2JqZWN0Pj4gZ2V0UmVtb3RlT2JqZWN0KGludCBoZWFwT2JqZWN0SWQsIGNvbnN0IFN0cmlu
ZyYgb2JqZWN0R3JvdXApIGZpbmFsOwogCiAgICAgLy8gSlNDOjpIZWFwT2JzZXJ2ZXIKICAgICB2
b2lkIHdpbGxHYXJiYWdlQ29sbGVjdCgpIGZpbmFsOwpAQCAtNzMsNyArNzIsNyBAQCBwcm90ZWN0
ZWQ6CiAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoR2FyYmFnZUNvbGxlY3RlZEV2ZW50KFByb3Rv
Y29sOjpIZWFwOjpHYXJiYWdlQ29sbGVjdGlvbjo6VHlwZSwgU2Vjb25kcyBzdGFydFRpbWUsIFNl
Y29uZHMgZW5kVGltZSk7CiAKIHByaXZhdGU6Ci0gICAgT3B0aW9uYWw8SlNDOjpIZWFwU25hcHNo
b3ROb2RlPiBub2RlRm9ySGVhcE9iamVjdElkZW50aWZpZXIoRXJyb3JTdHJpbmcmLCB1bnNpZ25l
ZCBoZWFwT2JqZWN0SWRlbnRpZmllcik7CisgICAgT3B0aW9uYWw8SlNDOjpIZWFwU25hcHNob3RO
b2RlPiBub2RlRm9ySGVhcE9iamVjdElkZW50aWZpZXIoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiwg
dW5zaWduZWQgaGVhcE9iamVjdElkZW50aWZpZXIpOwogCiAgICAgSW5qZWN0ZWRTY3JpcHRNYW5h
Z2VyJiBtX2luamVjdGVkU2NyaXB0TWFuYWdlcjsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SGVhcEZy
b250ZW5kRGlzcGF0Y2hlcj4gbV9mcm9udGVuZERpc3BhdGNoZXI7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JSdW50aW1lQWdlbnQu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUnVu
dGltZUFnZW50LmNwcAppbmRleCA5YWIxYWY3NGQ0MzM2MzcxZjY0OTI5YmY2MDY1YTQyY2UxYjk5
Zjg0Li4wNTFjOWYzMzY4MjhiZGUyOTk0MDJkM2NhNjkyMWU2ZTkyMjkzODBiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JSdW50aW1l
QWdlbnQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0lu
c3BlY3RvclJ1bnRpbWVBZ2VudC5jcHAKQEAgLTQ5LDE4ICs0OSw2IEBAIG5hbWVzcGFjZSBJbnNw
ZWN0b3IgewogCiB1c2luZyBuYW1lc3BhY2UgSlNDOwogCi1zdGF0aWMgYm9vbCBhc0Jvb2woY29u
c3QgYm9vbCogYikKLXsKLSAgICByZXR1cm4gYiAmJiAqYjsKLX0KLQotc3RhdGljIGludCBhc0lu
dChjb25zdCBpbnQqIGkpCi17Ci0gICAgaWYgKGkpCi0gICAgICAgIHJldHVybiAqaTsKLSAgICBy
ZXR1cm4gMDsKLX0KLQogSW5zcGVjdG9yUnVudGltZUFnZW50OjpJbnNwZWN0b3JSdW50aW1lQWdl
bnQoQWdlbnRDb250ZXh0JiBjb250ZXh0KQogICAgIDogSW5zcGVjdG9yQWdlbnRCYXNlKCJSdW50
aW1lIl9zKQogICAgICwgbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIoY29udGV4dC5pbmplY3RlZFNj
cmlwdE1hbmFnZXIpCkBAIC04MSwyNSArNjksNDYgQEAgc3RhdGljIFJlZjxQcm90b2NvbDo6UnVu
dGltZTo6RXJyb3JSYW5nZT4gYnVpbGRFcnJvclJhbmdlT2JqZWN0KGNvbnN0IEpTVG9rZW5Mb2MK
ICAgICAgICAgLnJlbGVhc2UoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OnBh
cnNlKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBQcm90b2NvbDo6UnVu
dGltZTo6U3ludGF4RXJyb3JUeXBlKiByZXN1bHQsIE9wdGlvbmFsPFN0cmluZz4mIG1lc3NhZ2Us
IFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6RXJyb3JSYW5nZT4mIHJhbmdlKQorUHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yUnVudGltZUFnZW50OjplbmFibGUoKQorewor
ICAgIG1fZW5hYmxlZCA9IHRydWU7CisKKyAgICByZXR1cm4geyB9OworfQorCitQcm90b2NvbDo6
RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmRpc2FibGUoKQorewor
ICAgIG1fZW5hYmxlZCA9IGZhbHNlOworCisgICAgcmV0dXJuIHsgfTsKK30KKworUHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8c3RkOjp0dXBsZTxQcm90b2NvbDo6UnVudGltZTo6U3ludGF4RXJyb3JU
eXBlLCBTdHJpbmcgLyogbWVzc2FnZSAqLywgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpFcnJv
clJhbmdlPj4+IEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6cGFyc2UoY29uc3QgU3RyaW5nJiBleHBy
ZXNzaW9uKQogewogICAgIEpTTG9ja0hvbGRlciBsb2NrKG1fdm0pOwogCiAgICAgUGFyc2VyRXJy
b3IgZXJyb3I7CiAgICAgY2hlY2tTeW50YXgobV92bSwgSlNDOjptYWtlU291cmNlKGV4cHJlc3Np
b24sIHsgfSksIGVycm9yKTsKIAorICAgIE9wdGlvbmFsPFByb3RvY29sOjpSdW50aW1lOjpTeW50
YXhFcnJvclR5cGU+IHJlc3VsdDsKKyAgICBTdHJpbmcgbWVzc2FnZTsKKyAgICBSZWZQdHI8UHJv
dG9jb2w6OlJ1bnRpbWU6OkVycm9yUmFuZ2U+IHJhbmdlOworCiAgICAgc3dpdGNoIChlcnJvci5z
eW50YXhFcnJvclR5cGUoKSkgewogICAgIGNhc2UgUGFyc2VyRXJyb3I6OlN5bnRheEVycm9yTm9u
ZToKLSAgICAgICAgKnJlc3VsdCA9IFByb3RvY29sOjpSdW50aW1lOjpTeW50YXhFcnJvclR5cGU6
Ok5vbmU7CisgICAgICAgIHJlc3VsdCA9IFByb3RvY29sOjpSdW50aW1lOjpTeW50YXhFcnJvclR5
cGU6Ok5vbmU7CiAgICAgICAgIGJyZWFrOworCiAgICAgY2FzZSBQYXJzZXJFcnJvcjo6U3ludGF4
RXJyb3JJcnJlY292ZXJhYmxlOgotICAgICAgICAqcmVzdWx0ID0gUHJvdG9jb2w6OlJ1bnRpbWU6
OlN5bnRheEVycm9yVHlwZTo6SXJyZWNvdmVyYWJsZTsKKyAgICAgICAgcmVzdWx0ID0gUHJvdG9j
b2w6OlJ1bnRpbWU6OlN5bnRheEVycm9yVHlwZTo6SXJyZWNvdmVyYWJsZTsKICAgICAgICAgYnJl
YWs7CisKICAgICBjYXNlIFBhcnNlckVycm9yOjpTeW50YXhFcnJvclVudGVybWluYXRlZExpdGVy
YWw6Ci0gICAgICAgICpyZXN1bHQgPSBQcm90b2NvbDo6UnVudGltZTo6U3ludGF4RXJyb3JUeXBl
OjpVbnRlcm1pbmF0ZWRMaXRlcmFsOworICAgICAgICByZXN1bHQgPSBQcm90b2NvbDo6UnVudGlt
ZTo6U3ludGF4RXJyb3JUeXBlOjpVbnRlcm1pbmF0ZWRMaXRlcmFsOwogICAgICAgICBicmVhazsK
KwogICAgIGNhc2UgUGFyc2VyRXJyb3I6OlN5bnRheEVycm9yUmVjb3ZlcmFibGU6Ci0gICAgICAg
ICpyZXN1bHQgPSBQcm90b2NvbDo6UnVudGltZTo6U3ludGF4RXJyb3JUeXBlOjpSZWNvdmVyYWJs
ZTsKKyAgICAgICAgcmVzdWx0ID0gUHJvdG9jb2w6OlJ1bnRpbWU6OlN5bnRheEVycm9yVHlwZTo6
UmVjb3ZlcmFibGU7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtMTA3LDI5ICsxMTYsNDIg
QEAgdm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OnBhcnNlKEVycm9yU3RyaW5nJiwgY29uc3Qg
U3RyaW5nJiBleHByZXNzaW9uLCBQcm90b2MKICAgICAgICAgbWVzc2FnZSA9IGVycm9yLm1lc3Nh
Z2UoKTsKICAgICAgICAgcmFuZ2UgPSBidWlsZEVycm9yUmFuZ2VPYmplY3QoZXJyb3IudG9rZW4o
KS5tX2xvY2F0aW9uKTsKICAgICB9CisKKyAgICByZXR1cm4geyB7ICpyZXN1bHQsIG1lc3NhZ2Us
IFdURk1vdmUocmFuZ2UpIH0gfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmV2
YWx1YXRlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBleHByZXNzaW9u
LCBjb25zdCBTdHJpbmcqIG9iamVjdEdyb3VwLCBjb25zdCBib29sKiBpbmNsdWRlQ29tbWFuZExp
bmVBUEksIGNvbnN0IGJvb2wqIGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29sZSwg
Y29uc3QgaW50KiBleGVjdXRpb25Db250ZXh0SWQsIGNvbnN0IGJvb2wqIHJldHVybkJ5VmFsdWUs
IGNvbnN0IGJvb2wqIGdlbmVyYXRlUHJldmlldywgY29uc3QgYm9vbCogc2F2ZVJlc3VsdCwgY29u
c3QgYm9vbCogLyogZW11bGF0ZVVzZXJHZXN0dXJlICovLCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRp
bWU6OlJlbW90ZU9iamVjdD4mIHJlc3VsdCwgT3B0aW9uYWw8Ym9vbD4mIHdhc1Rocm93biwgT3B0
aW9uYWw8aW50PiYgc2F2ZWRSZXN1bHRJbmRleCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHN0
ZDo6dHVwbGU8UmVmPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+LCBPcHRpb25hbDxi
b29sPiAvKiB3YXNUaHJvd24gKi8sIE9wdGlvbmFsPGludD4gLyogc2F2ZWRSZXN1bHRJbmRleCAq
Lz4+IEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6ZXZhbHVhdGUoY29uc3QgU3RyaW5nJiBleHByZXNz
aW9uLCBjb25zdCBTdHJpbmcmIG9iamVjdEdyb3VwLCBPcHRpb25hbDxib29sPiYmIGluY2x1ZGVD
b21tYW5kTGluZUFQSSwgT3B0aW9uYWw8Ym9vbD4mJiBkb05vdFBhdXNlT25FeGNlcHRpb25zQW5k
TXV0ZUNvbnNvbGUsIE9wdGlvbmFsPFByb3RvY29sOjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0
SWQ+JiYgZXhlY3V0aW9uQ29udGV4dElkLCBPcHRpb25hbDxib29sPiYmIHJldHVybkJ5VmFsdWUs
IE9wdGlvbmFsPGJvb2w+JiYgZ2VuZXJhdGVQcmV2aWV3LCBPcHRpb25hbDxib29sPiYmIHNhdmVS
ZXN1bHQsIE9wdGlvbmFsPGJvb2w+JiYgLyogZW11bGF0ZVVzZXJHZXN0dXJlICovKQogewotICAg
IEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0ID0gaW5qZWN0ZWRTY3JpcHRGb3JFdmFsKGVy
cm9yU3RyaW5nLCBleGVjdXRpb25Db250ZXh0SWQpOworICAgIFByb3RvY29sOjpFcnJvclN0cmlu
ZyBlcnJvclN0cmluZzsKKworICAgIEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0ID0gaW5q
ZWN0ZWRTY3JpcHRGb3JFdmFsKGVycm9yU3RyaW5nLCBXVEZNb3ZlKGV4ZWN1dGlvbkNvbnRleHRJ
ZCkpOwogICAgIGlmIChpbmplY3RlZFNjcmlwdC5oYXNOb1ZhbHVlKCkpCi0gICAgICAgIHJldHVy
bjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKKworICAgIFJl
ZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiByZXN1bHQ7CisgICAgT3B0aW9u
YWw8Ym9vbD4gd2FzVGhyb3duOworICAgIE9wdGlvbmFsPGludD4gc2F2ZWRSZXN1bHRJbmRleDsK
IAogICAgIEpTQzo6RGVidWdnZXI6OlRlbXBvcmFyaWx5RGlzYWJsZUV4Y2VwdGlvbkJyZWFrcG9p
bnRzIHRlbXBvcmFyaWx5RGlzYWJsZUV4Y2VwdGlvbkJyZWFrcG9pbnRzKG1fZGVidWdnZXIpOwog
Ci0gICAgYm9vbCBwYXVzZUFuZE11dGUgPSBhc0Jvb2woZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0Fu
ZE11dGVDb25zb2xlKTsKKyAgICBib29sIHBhdXNlQW5kTXV0ZSA9IGRvTm90UGF1c2VPbkV4Y2Vw
dGlvbnNBbmRNdXRlQ29uc29sZS52YWx1ZU9yKGZhbHNlKTsKICAgICBpZiAocGF1c2VBbmRNdXRl
KSB7CiAgICAgICAgIHRlbXBvcmFyaWx5RGlzYWJsZUV4Y2VwdGlvbkJyZWFrcG9pbnRzLnJlcGxh
Y2UoKTsKICAgICAgICAgbXV0ZUNvbnNvbGUoKTsKICAgICB9CiAKLSAgICBpbmplY3RlZFNjcmlw
dC5ldmFsdWF0ZShlcnJvclN0cmluZywgZXhwcmVzc2lvbiwgb2JqZWN0R3JvdXAgPyAqb2JqZWN0
R3JvdXAgOiBTdHJpbmcoKSwgYXNCb29sKGluY2x1ZGVDb21tYW5kTGluZUFQSSksIGFzQm9vbChy
ZXR1cm5CeVZhbHVlKSwgYXNCb29sKGdlbmVyYXRlUHJldmlldyksIGFzQm9vbChzYXZlUmVzdWx0
KSwgcmVzdWx0LCB3YXNUaHJvd24sIHNhdmVkUmVzdWx0SW5kZXgpOworICAgIGluamVjdGVkU2Ny
aXB0LmV2YWx1YXRlKGVycm9yU3RyaW5nLCBleHByZXNzaW9uLCBvYmplY3RHcm91cCwgaW5jbHVk
ZUNvbW1hbmRMaW5lQVBJLnZhbHVlT3IoZmFsc2UpLCByZXR1cm5CeVZhbHVlLnZhbHVlT3IoZmFs
c2UpLCBnZW5lcmF0ZVByZXZpZXcudmFsdWVPcihmYWxzZSksIHNhdmVSZXN1bHQudmFsdWVPcihm
YWxzZSksIHJlc3VsdCwgd2FzVGhyb3duLCBzYXZlZFJlc3VsdEluZGV4KTsKIAogICAgIGlmIChw
YXVzZUFuZE11dGUpCiAgICAgICAgIHVubXV0ZUNvbnNvbGUoKTsKKworICAgIGlmICghcmVzdWx0
KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOworCisgICAgcmV0
dXJuIHsge3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpLCBXVEZNb3ZlKHdhc1Rocm93biksIFdURk1v
dmUoc2F2ZWRSZXN1bHRJbmRleCkgfSB9OwogfQogCi12b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2Vu
dDo6YXdhaXRQcm9taXNlKGNvbnN0IFN0cmluZyYgcHJvbWlzZU9iamVjdElkLCBjb25zdCBib29s
KiByZXR1cm5CeVZhbHVlLCBjb25zdCBib29sKiBnZW5lcmF0ZVByZXZpZXcsIGNvbnN0IGJvb2wq
IHNhdmVSZXN1bHQsIFJlZjxBd2FpdFByb21pc2VDYWxsYmFjaz4mJiBjYWxsYmFjaykKK3ZvaWQg
SW5zcGVjdG9yUnVudGltZUFnZW50Ojphd2FpdFByb21pc2UoY29uc3QgUHJvdG9jb2w6OlJ1bnRp
bWU6OlJlbW90ZU9iamVjdElkJiBwcm9taXNlT2JqZWN0SWQsIE9wdGlvbmFsPGJvb2w+JiYgcmV0
dXJuQnlWYWx1ZSwgT3B0aW9uYWw8Ym9vbD4mJiBnZW5lcmF0ZVByZXZpZXcsIE9wdGlvbmFsPGJv
b2w+JiYgc2F2ZVJlc3VsdCwgUmVmPEF3YWl0UHJvbWlzZUNhbGxiYWNrPiYmIGNhbGxiYWNrKQog
ewogICAgIEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0ID0gbV9pbmplY3RlZFNjcmlwdE1h
bmFnZXIuaW5qZWN0ZWRTY3JpcHRGb3JPYmplY3RJZChwcm9taXNlT2JqZWN0SWQpOwogICAgIGlm
IChpbmplY3RlZFNjcmlwdC5oYXNOb1ZhbHVlKCkpIHsKQEAgLTEzNywyMTkgKzE1OSwyNDQgQEAg
dm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmF3YWl0UHJvbWlzZShjb25zdCBTdHJpbmcmIHBy
b21pc2VPYmplY3RJZCwgY29uc3QgYm8KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlu
amVjdGVkU2NyaXB0LmF3YWl0UHJvbWlzZShwcm9taXNlT2JqZWN0SWQsIGFzQm9vbChyZXR1cm5C
eVZhbHVlKSwgYXNCb29sKGdlbmVyYXRlUHJldmlldyksIGFzQm9vbChzYXZlUmVzdWx0KSwgW2Nh
bGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayldIChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIFJl
ZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYmIHJlc3VsdCwgT3B0aW9uYWw8
Ym9vbD4mIHdhc1Rocm93biwgT3B0aW9uYWw8aW50PiYgc2F2ZWRSZXN1bHRJbmRleCkgewotICAg
ICAgICBpZiAoIWVycm9yU3RyaW5nLmlzRW1wdHkoKSkKKyAgICBpbmplY3RlZFNjcmlwdC5hd2Fp
dFByb21pc2UocHJvbWlzZU9iamVjdElkLCByZXR1cm5CeVZhbHVlLnZhbHVlT3IoZmFsc2UpLCBn
ZW5lcmF0ZVByZXZpZXcudmFsdWVPcihmYWxzZSksIHNhdmVSZXN1bHQudmFsdWVPcihmYWxzZSks
IFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXSAoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBl
cnJvclN0cmluZywgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiYgcmVz
dWx0LCBPcHRpb25hbDxib29sPiYmIHdhc1Rocm93biwgT3B0aW9uYWw8aW50PiYmIHNhdmVkUmVz
dWx0SW5kZXgpIHsKKyAgICAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgICAgICBjYWxsYmFjay0+
c2VuZEZhaWx1cmUoZXJyb3JTdHJpbmcpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBjYWxs
YmFjay0+c2VuZFN1Y2Nlc3MoV1RGTW92ZShyZXN1bHQpLCB3YXNUaHJvd24sIHNhdmVkUmVzdWx0
SW5kZXgpOworICAgICAgICAgICAgY2FsbGJhY2stPnNlbmRTdWNjZXNzKHJlc3VsdC5yZWxlYXNl
Tm9uTnVsbCgpLCBXVEZNb3ZlKHdhc1Rocm93biksIFdURk1vdmUoc2F2ZWRSZXN1bHRJbmRleCkp
OwogICAgIH0pOwogfQogCi12b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6Y2FsbEZ1bmN0aW9u
T24oRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBjb25z
dCBTdHJpbmcmIGV4cHJlc3Npb24sIGNvbnN0IEpTT046OkFycmF5KiBvcHRpb25hbEFyZ3VtZW50
cywgY29uc3QgYm9vbCogZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xlLCBjb25z
dCBib29sKiByZXR1cm5CeVZhbHVlLCBjb25zdCBib29sKiBnZW5lcmF0ZVByZXZpZXcsIGNvbnN0
IGJvb2wqIC8qIGVtdWxhdGVVc2VyR2VzdHVyZSAqLywgUmVmUHRyPFByb3RvY29sOjpSdW50aW1l
OjpSZW1vdGVPYmplY3Q+JiByZXN1bHQsIE9wdGlvbmFsPGJvb2w+JiB3YXNUaHJvd24pCitQcm90
b2NvbDo6RXJyb3JTdHJpbmdPcjxzdGQ6OnR1cGxlPFJlZjxQcm90b2NvbDo6UnVudGltZTo6UmVt
b3RlT2JqZWN0PiwgT3B0aW9uYWw8Ym9vbD4gLyogd2FzVGhyb3duICovPj4gSW5zcGVjdG9yUnVu
dGltZUFnZW50OjpjYWxsRnVuY3Rpb25Pbihjb25zdCBQcm90b2NvbDo6UnVudGltZTo6UmVtb3Rl
T2JqZWN0SWQmIG9iamVjdElkLCBjb25zdCBTdHJpbmcmIGZ1bmN0aW9uRGVjbGFyYXRpb24sIFJl
ZlB0cjxKU09OOjpBcnJheT4mJiBhcmd1bWVudHMsIE9wdGlvbmFsPGJvb2w+JiYgZG9Ob3RQYXVz
ZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xlLCBPcHRpb25hbDxib29sPiYmIHJldHVybkJ5VmFs
dWUsIE9wdGlvbmFsPGJvb2w+JiYgZ2VuZXJhdGVQcmV2aWV3LCBPcHRpb25hbDxib29sPiYmIC8q
IGVtdWxhdGVVc2VyR2VzdHVyZSAqLykKIHsKLSAgICBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNj
cmlwdCA9IG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmluamVjdGVkU2NyaXB0Rm9yT2JqZWN0SWQo
b2JqZWN0SWQpOwotICAgIGlmIChpbmplY3RlZFNjcmlwdC5oYXNOb1ZhbHVlKCkpIHsKLSAgICAg
ICAgZXJyb3JTdHJpbmcgPSAiTWlzc2luZyBpbmplY3RlZCBzY3JpcHQgZm9yIGdpdmVuIG9iamVj
dElkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIFByb3RvY29sOjpFcnJvclN0cmlu
ZyBlcnJvclN0cmluZzsKIAotICAgIFN0cmluZyBhcmd1bWVudHM7Ci0gICAgaWYgKG9wdGlvbmFs
QXJndW1lbnRzKQotICAgICAgICBhcmd1bWVudHMgPSBvcHRpb25hbEFyZ3VtZW50cy0+dG9KU09O
U3RyaW5nKCk7CisgICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHQgPSBtX2luamVjdGVk
U2NyaXB0TWFuYWdlci5pbmplY3RlZFNjcmlwdEZvck9iamVjdElkKG9iamVjdElkKTsKKyAgICBp
ZiAoaW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoIk1pc3NpbmcgaW5qZWN0ZWQgc2NyaXB0IGZvciBnaXZlbiBvYmplY3RJZCJfcyk7CisK
KyAgICBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4gcmVzdWx0OworICAg
IE9wdGlvbmFsPGJvb2w+IHdhc1Rocm93bjsKIAogICAgIEpTQzo6RGVidWdnZXI6OlRlbXBvcmFy
aWx5RGlzYWJsZUV4Y2VwdGlvbkJyZWFrcG9pbnRzIHRlbXBvcmFyaWx5RGlzYWJsZUV4Y2VwdGlv
bkJyZWFrcG9pbnRzKG1fZGVidWdnZXIpOwogCi0gICAgYm9vbCBwYXVzZUFuZE11dGUgPSBhc0Jv
b2woZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xlKTsKKyAgICBib29sIHBhdXNl
QW5kTXV0ZSA9IGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29sZS52YWx1ZU9yKGZh
bHNlKTsKICAgICBpZiAocGF1c2VBbmRNdXRlKSB7CiAgICAgICAgIHRlbXBvcmFyaWx5RGlzYWJs
ZUV4Y2VwdGlvbkJyZWFrcG9pbnRzLnJlcGxhY2UoKTsKICAgICAgICAgbXV0ZUNvbnNvbGUoKTsK
ICAgICB9CiAKLSAgICBpbmplY3RlZFNjcmlwdC5jYWxsRnVuY3Rpb25PbihlcnJvclN0cmluZywg
b2JqZWN0SWQsIGV4cHJlc3Npb24sIGFyZ3VtZW50cywgYXNCb29sKHJldHVybkJ5VmFsdWUpLCBh
c0Jvb2woZ2VuZXJhdGVQcmV2aWV3KSwgcmVzdWx0LCB3YXNUaHJvd24pOworICAgIGluamVjdGVk
U2NyaXB0LmNhbGxGdW5jdGlvbk9uKGVycm9yU3RyaW5nLCBvYmplY3RJZCwgZnVuY3Rpb25EZWNs
YXJhdGlvbiwgYXJndW1lbnRzID8gYXJndW1lbnRzLT50b0pTT05TdHJpbmcoKSA6IG51bGxTdHJp
bmcoKSwgcmV0dXJuQnlWYWx1ZS52YWx1ZU9yKGZhbHNlKSwgZ2VuZXJhdGVQcmV2aWV3LnZhbHVl
T3IoZmFsc2UpLCByZXN1bHQsIHdhc1Rocm93bik7CiAKICAgICBpZiAocGF1c2VBbmRNdXRlKQog
ICAgICAgICB1bm11dGVDb25zb2xlKCk7CisKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgcmV0
dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKKworICAgIHJldHVybiB7IHsgcmVzdWx0
LnJlbGVhc2VOb25OdWxsKCksIFdURk1vdmUod2FzVGhyb3duKSB9IH07CiB9CiAKLXZvaWQgSW5z
cGVjdG9yUnVudGltZUFnZW50OjpnZXRQcmV2aWV3KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywg
Y29uc3QgU3RyaW5nJiBvYmplY3RJZCwgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpPYmplY3RQ
cmV2aWV3PiYgcHJldmlldykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxQcm90b2NvbDo6
UnVudGltZTo6T2JqZWN0UHJldmlldz4+IEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6Z2V0UHJldmll
dyhjb25zdCBQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0SWQmIG9iamVjdElkKQogewor
ICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIEluamVjdGVkU2Ny
aXB0IGluamVjdGVkU2NyaXB0ID0gbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIuaW5qZWN0ZWRTY3Jp
cHRGb3JPYmplY3RJZChvYmplY3RJZCk7Ci0gICAgaWYgKGluamVjdGVkU2NyaXB0Lmhhc05vVmFs
dWUoKSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIGluamVjdGVkIHNjcmlwdCBm
b3IgZ2l2ZW4gb2JqZWN0SWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKGlu
amVjdGVkU2NyaXB0Lmhhc05vVmFsdWUoKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVk
KCJNaXNzaW5nIGluamVjdGVkIHNjcmlwdCBmb3IgZ2l2ZW4gb2JqZWN0SWQiX3MpOwogCiAgICAg
SlNDOjpEZWJ1Z2dlcjo6VGVtcG9yYXJpbHlEaXNhYmxlRXhjZXB0aW9uQnJlYWtwb2ludHMgdGVt
cG9yYXJpbHlEaXNhYmxlRXhjZXB0aW9uQnJlYWtwb2ludHMobV9kZWJ1Z2dlcik7CiAgICAgdGVt
cG9yYXJpbHlEaXNhYmxlRXhjZXB0aW9uQnJlYWtwb2ludHMucmVwbGFjZSgpOwogCisgICAgUmVm
UHRyPFByb3RvY29sOjpSdW50aW1lOjpPYmplY3RQcmV2aWV3PiBwcmV2aWV3OworCiAgICAgbXV0
ZUNvbnNvbGUoKTsKIAogICAgIGluamVjdGVkU2NyaXB0LmdldFByZXZpZXcoZXJyb3JTdHJpbmcs
IG9iamVjdElkLCBwcmV2aWV3KTsKIAogICAgIHVubXV0ZUNvbnNvbGUoKTsKKworICAgIGlmICgh
cHJldmlldykKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKKwor
ICAgIHJldHVybiBwcmV2aWV3LnJlbGVhc2VOb25OdWxsKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9y
UnVudGltZUFnZW50OjpnZXRQcm9wZXJ0aWVzKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29u
c3QgU3RyaW5nJiBvYmplY3RJZCwgY29uc3QgYm9vbCogb3duUHJvcGVydGllcywgY29uc3QgaW50
KiBmZXRjaFN0YXJ0LCBjb25zdCBpbnQqIGZldGNoQ291bnQsIGNvbnN0IGJvb2wqIGdlbmVyYXRl
UHJldmlldywgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OlByb3BlcnR5
RGVzY3JpcHRvcj4+JiBwcm9wZXJ0aWVzLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6
UnVudGltZTo6SW50ZXJuYWxQcm9wZXJ0eURlc2NyaXB0b3I+PiYgaW50ZXJuYWxQcm9wZXJ0aWVz
KQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8c3RkOjp0dXBsZTxSZWY8SlNPTjo6QXJyYXlPZjxQ
cm90b2NvbDo6UnVudGltZTo6UHJvcGVydHlEZXNjcmlwdG9yPj4sIFJlZlB0cjxKU09OOjpBcnJh
eU9mPFByb3RvY29sOjpSdW50aW1lOjpJbnRlcm5hbFByb3BlcnR5RGVzY3JpcHRvcj4+Pj4gSW5z
cGVjdG9yUnVudGltZUFnZW50OjpnZXRQcm9wZXJ0aWVzKGNvbnN0IFByb3RvY29sOjpSdW50aW1l
OjpSZW1vdGVPYmplY3RJZCYgb2JqZWN0SWQsIE9wdGlvbmFsPGJvb2w+JiYgb3duUHJvcGVydGll
cywgT3B0aW9uYWw8aW50PiYmIGZldGNoU3RhcnQsIE9wdGlvbmFsPGludD4mJiBmZXRjaENvdW50
LCBPcHRpb25hbDxib29sPiYmIGdlbmVyYXRlUHJldmlldykKIHsKKyAgICBQcm90b2NvbDo6RXJy
b3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlw
dCA9IG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmluamVjdGVkU2NyaXB0Rm9yT2JqZWN0SWQob2Jq
ZWN0SWQpOwotICAgIGlmIChpbmplY3RlZFNjcmlwdC5oYXNOb1ZhbHVlKCkpIHsKLSAgICAgICAg
ZXJyb3JTdHJpbmcgPSAiTWlzc2luZyBpbmplY3RlZCBzY3JpcHQgZm9yIGdpdmVuIG9iamVjdElk
Il9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmIChpbmplY3RlZFNjcmlwdC5oYXNO
b1ZhbHVlKCkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTWlzc2luZyBpbmplY3Rl
ZCBzY3JpcHQgZm9yIGdpdmVuIG9iamVjdElkIl9zKTsKIAotICAgIGludCBzdGFydCA9IGFzSW50
KGZldGNoU3RhcnQpOwotICAgIGlmIChzdGFydCA8IDApIHsKLSAgICAgICAgZXJyb3JTdHJpbmcg
PSAiZmV0Y2hTdGFydCBjYW5ub3QgYmUgbmVnYXRpdmUiX3M7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9CisgICAgaW50IHN0YXJ0ID0gZmV0Y2hTdGFydC52YWx1ZU9yKDApOworICAgIGlmIChzdGFy
dCA8IDApCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiZmV0Y2hTdGFydCBjYW5ub3Qg
YmUgbmVnYXRpdmUiX3MpOwogCi0gICAgaW50IGNvdW50ID0gYXNJbnQoZmV0Y2hDb3VudCk7Ci0g
ICAgaWYgKGNvdW50IDwgMCkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJmZXRjaENvdW50IGNh
bm5vdCBiZSBuZWdhdGl2ZSJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpbnQgY291
bnQgPSBmZXRjaENvdW50LnZhbHVlT3IoMCk7CisgICAgaWYgKGNvdW50IDwgMCkKKyAgICAgICAg
cmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJmZXRjaENvdW50IGNhbm5vdCBiZSBuZWdhdGl2ZSJfcyk7
CisKKyAgICBSZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UnVudGltZTo6UHJvcGVydHlE
ZXNjcmlwdG9yPj4gcHJvcGVydGllczsKKyAgICBSZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90b2Nv
bDo6UnVudGltZTo6SW50ZXJuYWxQcm9wZXJ0eURlc2NyaXB0b3I+PiBpbnRlcm5hbFByb3BlcnRp
ZXM7CiAKICAgICBKU0M6OkRlYnVnZ2VyOjpUZW1wb3JhcmlseURpc2FibGVFeGNlcHRpb25CcmVh
a3BvaW50cyB0ZW1wb3JhcmlseURpc2FibGVFeGNlcHRpb25CcmVha3BvaW50cyhtX2RlYnVnZ2Vy
KTsKICAgICB0ZW1wb3JhcmlseURpc2FibGVFeGNlcHRpb25CcmVha3BvaW50cy5yZXBsYWNlKCk7
CiAKICAgICBtdXRlQ29uc29sZSgpOwogCi0gICAgaW5qZWN0ZWRTY3JpcHQuZ2V0UHJvcGVydGll
cyhlcnJvclN0cmluZywgb2JqZWN0SWQsIGFzQm9vbChvd25Qcm9wZXJ0aWVzKSwgc3RhcnQsIGNv
dW50LCBhc0Jvb2woZ2VuZXJhdGVQcmV2aWV3KSwgcHJvcGVydGllcyk7CisgICAgaW5qZWN0ZWRT
Y3JpcHQuZ2V0UHJvcGVydGllcyhlcnJvclN0cmluZywgb2JqZWN0SWQsIG93blByb3BlcnRpZXMu
dmFsdWVPcihmYWxzZSksIHN0YXJ0LCBjb3VudCwgZ2VuZXJhdGVQcmV2aWV3LnZhbHVlT3IoZmFs
c2UpLCBwcm9wZXJ0aWVzKTsKIAogICAgIC8vIE9ubHkgaW5jbHVkZSBpbnRlcm5hbCBwcm9wZXJ0
aWVzIGZvciB0aGUgZmlyc3QgZmV0Y2guCiAgICAgaWYgKCFzdGFydCkKLSAgICAgICAgaW5qZWN0
ZWRTY3JpcHQuZ2V0SW50ZXJuYWxQcm9wZXJ0aWVzKGVycm9yU3RyaW5nLCBvYmplY3RJZCwgYXNC
b29sKGdlbmVyYXRlUHJldmlldyksIGludGVybmFsUHJvcGVydGllcyk7CisgICAgICAgIGluamVj
dGVkU2NyaXB0LmdldEludGVybmFsUHJvcGVydGllcyhlcnJvclN0cmluZywgb2JqZWN0SWQsIGdl
bmVyYXRlUHJldmlldy52YWx1ZU9yKGZhbHNlKSwgaW50ZXJuYWxQcm9wZXJ0aWVzKTsKIAogICAg
IHVubXV0ZUNvbnNvbGUoKTsKKworICAgIGlmICghcHJvcGVydGllcykKKyAgICAgICAgcmV0dXJu
IG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKKworICAgIHJldHVybiB7IHsgcHJvcGVydGll
cy5yZWxlYXNlTm9uTnVsbCgpLCBXVEZNb3ZlKGludGVybmFsUHJvcGVydGllcykgfSB9OwogfQog
Ci12b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6Z2V0RGlzcGxheWFibGVQcm9wZXJ0aWVzKEVy
cm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBvYmplY3RJZCwgY29uc3QgaW50
KiBmZXRjaFN0YXJ0LCBjb25zdCBpbnQqIGZldGNoQ291bnQsIGNvbnN0IGJvb2wqIGdlbmVyYXRl
UHJldmlldywgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OlByb3BlcnR5
RGVzY3JpcHRvcj4+JiBwcm9wZXJ0aWVzLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6
UnVudGltZTo6SW50ZXJuYWxQcm9wZXJ0eURlc2NyaXB0b3I+PiYgaW50ZXJuYWxQcm9wZXJ0aWVz
KQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8c3RkOjp0dXBsZTxSZWY8SlNPTjo6QXJyYXlPZjxQ
cm90b2NvbDo6UnVudGltZTo6UHJvcGVydHlEZXNjcmlwdG9yPj4sIFJlZlB0cjxKU09OOjpBcnJh
eU9mPFByb3RvY29sOjpSdW50aW1lOjpJbnRlcm5hbFByb3BlcnR5RGVzY3JpcHRvcj4+Pj4gSW5z
cGVjdG9yUnVudGltZUFnZW50OjpnZXREaXNwbGF5YWJsZVByb3BlcnRpZXMoY29uc3QgUHJvdG9j
b2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdElkJiBvYmplY3RJZCwgT3B0aW9uYWw8aW50PiYmIGZl
dGNoU3RhcnQsIE9wdGlvbmFsPGludD4mJiBmZXRjaENvdW50LCBPcHRpb25hbDxib29sPiYmIGdl
bmVyYXRlUHJldmlldykKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7
CisKICAgICBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdCA9IG1faW5qZWN0ZWRTY3JpcHRN
YW5hZ2VyLmluamVjdGVkU2NyaXB0Rm9yT2JqZWN0SWQob2JqZWN0SWQpOwotICAgIGlmIChpbmpl
Y3RlZFNjcmlwdC5oYXNOb1ZhbHVlKCkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWlzc2lu
ZyBpbmplY3RlZCBzY3JpcHQgZm9yIGdpdmVuIG9iamVjdElkIl9zOwotICAgICAgICByZXR1cm47
Ci0gICAgfQorICAgIGlmIChpbmplY3RlZFNjcmlwdC5oYXNOb1ZhbHVlKCkpCisgICAgICAgIHJl
dHVybiBtYWtlVW5leHBlY3RlZCgiTWlzc2luZyBpbmplY3RlZCBzY3JpcHQgZm9yIGdpdmVuIG9i
amVjdElkIl9zKTsKIAotICAgIGludCBzdGFydCA9IGFzSW50KGZldGNoU3RhcnQpOwotICAgIGlm
IChzdGFydCA8IDApIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiZmV0Y2hTdGFydCBjYW5ub3Qg
YmUgbmVnYXRpdmUiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaW50IHN0YXJ0ID0g
ZmV0Y2hTdGFydC52YWx1ZU9yKDApOworICAgIGlmIChzdGFydCA8IDApCisgICAgICAgIHJldHVy
biBtYWtlVW5leHBlY3RlZCgiZmV0Y2hTdGFydCBjYW5ub3QgYmUgbmVnYXRpdmUiX3MpOwogCi0g
ICAgaW50IGNvdW50ID0gYXNJbnQoZmV0Y2hDb3VudCk7Ci0gICAgaWYgKGNvdW50IDwgMCkgewot
ICAgICAgICBlcnJvclN0cmluZyA9ICJmZXRjaENvdW50IGNhbm5vdCBiZSBuZWdhdGl2ZSJfczsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpbnQgY291bnQgPSBmZXRjaENvdW50LnZhbHVl
T3IoMCk7CisgICAgaWYgKGNvdW50IDwgMCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVk
KCJmZXRjaENvdW50IGNhbm5vdCBiZSBuZWdhdGl2ZSJfcyk7CisKKyAgICBSZWZQdHI8SlNPTjo6
QXJyYXlPZjxQcm90b2NvbDo6UnVudGltZTo6UHJvcGVydHlEZXNjcmlwdG9yPj4gcHJvcGVydGll
czsKKyAgICBSZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UnVudGltZTo6SW50ZXJuYWxQ
cm9wZXJ0eURlc2NyaXB0b3I+PiBpbnRlcm5hbFByb3BlcnRpZXM7CiAKICAgICBKU0M6OkRlYnVn
Z2VyOjpUZW1wb3JhcmlseURpc2FibGVFeGNlcHRpb25CcmVha3BvaW50cyB0ZW1wb3JhcmlseURp
c2FibGVFeGNlcHRpb25CcmVha3BvaW50cyhtX2RlYnVnZ2VyKTsKICAgICB0ZW1wb3JhcmlseURp
c2FibGVFeGNlcHRpb25CcmVha3BvaW50cy5yZXBsYWNlKCk7CiAKICAgICBtdXRlQ29uc29sZSgp
OwogCi0gICAgaW5qZWN0ZWRTY3JpcHQuZ2V0RGlzcGxheWFibGVQcm9wZXJ0aWVzKGVycm9yU3Ry
aW5nLCBvYmplY3RJZCwgc3RhcnQsIGNvdW50LCBhc0Jvb2woZ2VuZXJhdGVQcmV2aWV3KSwgcHJv
cGVydGllcyk7CisgICAgaW5qZWN0ZWRTY3JpcHQuZ2V0RGlzcGxheWFibGVQcm9wZXJ0aWVzKGVy
cm9yU3RyaW5nLCBvYmplY3RJZCwgc3RhcnQsIGNvdW50LCBnZW5lcmF0ZVByZXZpZXcudmFsdWVP
cihmYWxzZSksIHByb3BlcnRpZXMpOwogCiAgICAgLy8gT25seSBpbmNsdWRlIGludGVybmFsIHBy
b3BlcnRpZXMgZm9yIHRoZSBmaXJzdCBmZXRjaC4KICAgICBpZiAoIXN0YXJ0KQotICAgICAgICBp
bmplY3RlZFNjcmlwdC5nZXRJbnRlcm5hbFByb3BlcnRpZXMoZXJyb3JTdHJpbmcsIG9iamVjdElk
LCBhc0Jvb2woZ2VuZXJhdGVQcmV2aWV3KSwgaW50ZXJuYWxQcm9wZXJ0aWVzKTsKKyAgICAgICAg
aW5qZWN0ZWRTY3JpcHQuZ2V0SW50ZXJuYWxQcm9wZXJ0aWVzKGVycm9yU3RyaW5nLCBvYmplY3RJ
ZCwgZ2VuZXJhdGVQcmV2aWV3LnZhbHVlT3IoZmFsc2UpLCBpbnRlcm5hbFByb3BlcnRpZXMpOwog
CiAgICAgdW5tdXRlQ29uc29sZSgpOworCisgICAgaWYgKCFwcm9wZXJ0aWVzKQorICAgICAgICBy
ZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOworCisgICAgcmV0dXJuIHsgeyBwcm9w
ZXJ0aWVzLnJlbGVhc2VOb25OdWxsKCksIFdURk1vdmUoaW50ZXJuYWxQcm9wZXJ0aWVzKSB9IH07
CiB9CiAKLXZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50OjpnZXRDb2xsZWN0aW9uRW50cmllcyhF
cnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgb2JqZWN0SWQsIGNvbnN0IFN0
cmluZyogb2JqZWN0R3JvdXAsIGNvbnN0IGludCogZmV0Y2hTdGFydCwgY29uc3QgaW50KiBmZXRj
aENvdW50LCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UnVudGltZTo6Q29sbGVjdGlv
bkVudHJ5Pj4mIGVudHJpZXMpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SlNPTjo6QXJy
YXlPZjxQcm90b2NvbDo6UnVudGltZTo6Q29sbGVjdGlvbkVudHJ5Pj4+IEluc3BlY3RvclJ1bnRp
bWVBZ2VudDo6Z2V0Q29sbGVjdGlvbkVudHJpZXMoY29uc3QgUHJvdG9jb2w6OlJ1bnRpbWU6OlJl
bW90ZU9iamVjdElkJiBvYmplY3RJZCwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCwgT3B0aW9u
YWw8aW50PiYmIGZldGNoU3RhcnQsIE9wdGlvbmFsPGludD4mJiBmZXRjaENvdW50KQogeworICAg
IFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIEluamVjdGVkU2NyaXB0
IGluamVjdGVkU2NyaXB0ID0gbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIuaW5qZWN0ZWRTY3JpcHRG
b3JPYmplY3RJZChvYmplY3RJZCk7Ci0gICAgaWYgKGluamVjdGVkU2NyaXB0Lmhhc05vVmFsdWUo
KSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIGluamVjdGVkIHNjcmlwdCBmb3Ig
Z2l2ZW4gb2JqZWN0SWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKGluamVj
dGVkU2NyaXB0Lmhhc05vVmFsdWUoKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJN
aXNzaW5nIGluamVjdGVkIHNjcmlwdCBmb3IgZ2l2ZW4gb2JqZWN0SWQiX3MpOwogCi0gICAgaW50
IHN0YXJ0ID0gYXNJbnQoZmV0Y2hTdGFydCk7Ci0gICAgaWYgKHN0YXJ0IDwgMCkgewotICAgICAg
ICBlcnJvclN0cmluZyA9ICJmZXRjaFN0YXJ0IGNhbm5vdCBiZSBuZWdhdGl2ZSJfczsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KKyAgICBpbnQgc3RhcnQgPSBmZXRjaFN0YXJ0LnZhbHVlT3IoMCk7
CisgICAgaWYgKHN0YXJ0IDwgMCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJmZXRj
aFN0YXJ0IGNhbm5vdCBiZSBuZWdhdGl2ZSJfcyk7CiAKLSAgICBpbnQgY291bnQgPSBhc0ludChm
ZXRjaENvdW50KTsKLSAgICBpZiAoY291bnQgPCAwKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0g
ImZldGNoQ291bnQgY2Fubm90IGJlIG5lZ2F0aXZlIl9zOwotICAgICAgICByZXR1cm47Ci0gICAg
fQorICAgIGludCBjb3VudCA9IGZldGNoQ291bnQudmFsdWVPcigwKTsKKyAgICBpZiAoY291bnQg
PCAwKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoImZldGNoQ291bnQgY2Fubm90IGJl
IG5lZ2F0aXZlIl9zKTsKIAotICAgIGluamVjdGVkU2NyaXB0LmdldENvbGxlY3Rpb25FbnRyaWVz
KGVycm9yU3RyaW5nLCBvYmplY3RJZCwgb2JqZWN0R3JvdXAgPyAqb2JqZWN0R3JvdXAgOiBTdHJp
bmcoKSwgc3RhcnQsIGNvdW50LCBlbnRyaWVzKTsKKyAgICBSZWZQdHI8SlNPTjo6QXJyYXlPZjxQ
cm90b2NvbDo6UnVudGltZTo6Q29sbGVjdGlvbkVudHJ5Pj4gZW50cmllczsKKworICAgIGluamVj
dGVkU2NyaXB0LmdldENvbGxlY3Rpb25FbnRyaWVzKGVycm9yU3RyaW5nLCBvYmplY3RJZCwgb2Jq
ZWN0R3JvdXAsIHN0YXJ0LCBjb3VudCwgZW50cmllcyk7CisKKyAgICBpZiAoIWVudHJpZXMpCisg
ICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CisKKyAgICByZXR1cm4g
ZW50cmllcy5yZWxlYXNlTm9uTnVsbCgpOwogfQogCi12b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2Vu
dDo6c2F2ZVJlc3VsdChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IEpTT046Ok9iamVj
dCYgY2FsbEFyZ3VtZW50LCBjb25zdCBpbnQqIGV4ZWN1dGlvbkNvbnRleHRJZCwgT3B0aW9uYWw8
aW50PiYgc2F2ZWRSZXN1bHRJbmRleCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPE9wdGlvbmFs
PGludD4gLyogc2F2ZVJlc3VsdEluZGV4ICovPiBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OnNhdmVS
ZXN1bHQoUmVmPEpTT046Ok9iamVjdD4mJiBjYWxsQXJndW1lbnQsIE9wdGlvbmFsPFByb3RvY29s
OjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0SWQ+JiYgZXhlY3V0aW9uQ29udGV4dElkKQogewor
ICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIEluamVjdGVkU2Ny
aXB0IGluamVjdGVkU2NyaXB0OwogCi0gICAgU3RyaW5nIG9iamVjdElkOwotICAgIGlmIChjYWxs
QXJndW1lbnQuZ2V0U3RyaW5nKCJvYmplY3RJZCJfcywgb2JqZWN0SWQpKSB7Ci0gICAgICAgIGlu
amVjdGVkU2NyaXB0ID0gbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIuaW5qZWN0ZWRTY3JpcHRGb3JP
YmplY3RJZChvYmplY3RJZCk7Ci0gICAgICAgIGlmIChpbmplY3RlZFNjcmlwdC5oYXNOb1ZhbHVl
KCkpIHsKLSAgICAgICAgICAgIGVycm9yU3RyaW5nID0gIk1pc3NpbmcgaW5qZWN0ZWQgc2NyaXB0
IGZvciBnaXZlbiBvYmplY3RJZCJfczsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIGluamVjdGVkU2NyaXB0ID0gaW5qZWN0ZWRTY3JpcHRGb3JF
dmFsKGVycm9yU3RyaW5nLCBleGVjdXRpb25Db250ZXh0SWQpOworICAgIGF1dG8gb2JqZWN0SWQg
PSBjYWxsQXJndW1lbnQtPmdldFN0cmluZyhQcm90b2NvbDo6UnVudGltZTo6Q2FsbEFyZ3VtZW50
OjpvYmplY3RJZEtleSk7CisgICAgaWYgKCFvYmplY3RJZCkgeworICAgICAgICBpbmplY3RlZFNj
cmlwdCA9IGluamVjdGVkU2NyaXB0Rm9yRXZhbChlcnJvclN0cmluZywgV1RGTW92ZShleGVjdXRp
b25Db250ZXh0SWQpKTsKICAgICAgICAgaWYgKGluamVjdGVkU2NyaXB0Lmhhc05vVmFsdWUoKSkK
LSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChl
cnJvclN0cmluZyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaW5qZWN0ZWRTY3JpcHQgPSBtX2lu
amVjdGVkU2NyaXB0TWFuYWdlci5pbmplY3RlZFNjcmlwdEZvck9iamVjdElkKG9iamVjdElkKTsK
KyAgICAgICAgaWYgKGluamVjdGVkU2NyaXB0Lmhhc05vVmFsdWUoKSkKKyAgICAgICAgICAgIHJl
dHVybiBtYWtlVW5leHBlY3RlZCgiTWlzc2luZyBpbmplY3RlZCBzY3JpcHQgZm9yIGdpdmVuIG9i
amVjdElkIl9zKTsKICAgICB9Ci0gICAgCi0gICAgaW5qZWN0ZWRTY3JpcHQuc2F2ZVJlc3VsdChl
cnJvclN0cmluZywgY2FsbEFyZ3VtZW50LnRvSlNPTlN0cmluZygpLCBzYXZlZFJlc3VsdEluZGV4
KTsKKworICAgIE9wdGlvbmFsPGludD4gc2F2ZWRSZXN1bHRJbmRleDsKKworICAgIGluamVjdGVk
U2NyaXB0LnNhdmVSZXN1bHQoZXJyb3JTdHJpbmcsIGNhbGxBcmd1bWVudC0+dG9KU09OU3RyaW5n
KCksIHNhdmVkUmVzdWx0SW5kZXgpOworCisgICAgaWYgKCFzYXZlZFJlc3VsdEluZGV4KQorICAg
ICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOworCisgICAgcmV0dXJuIFdU
Rk1vdmUoc2F2ZWRSZXN1bHRJbmRleCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50
OjpzZXRTYXZlZFJlc3VsdEFsaWFzKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nKiBhbGlhcykK
K1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6c2V0
U2F2ZWRSZXN1bHRBbGlhcyhjb25zdCBTdHJpbmcmIHNhdmVkUmVzdWx0QWxpYXMpCiB7Ci0gICAg
T3B0aW9uYWw8U3RyaW5nPiBzYXZlZFJlc3VsdEFsaWFzOwotICAgIGlmIChhbGlhcyAmJiAhYWxp
YXMtPmlzRW1wdHkoKSkKLSAgICAgICAgc2F2ZWRSZXN1bHRBbGlhcyA9ICphbGlhczsKICAgICBt
X2luamVjdGVkU2NyaXB0TWFuYWdlci5pbmplY3RlZFNjcmlwdEhvc3QoKS5zZXRTYXZlZFJlc3Vs
dEFsaWFzKHNhdmVkUmVzdWx0QWxpYXMpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJ
bnNwZWN0b3JSdW50aW1lQWdlbnQ6OnJlbGVhc2VPYmplY3QoRXJyb3JTdHJpbmcmLCBjb25zdCBT
dHJpbmcmIG9iamVjdElkKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9y
UnVudGltZUFnZW50OjpyZWxlYXNlT2JqZWN0KGNvbnN0IFByb3RvY29sOjpSdW50aW1lOjpSZW1v
dGVPYmplY3RJZCYgb2JqZWN0SWQpCiB7CiAgICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3Jp
cHQgPSBtX2luamVjdGVkU2NyaXB0TWFuYWdlci5pbmplY3RlZFNjcmlwdEZvck9iamVjdElkKG9i
amVjdElkKTsKICAgICBpZiAoIWluamVjdGVkU2NyaXB0Lmhhc05vVmFsdWUoKSkKICAgICAgICAg
aW5qZWN0ZWRTY3JpcHQucmVsZWFzZU9iamVjdChvYmplY3RJZCk7CisKKyAgICByZXR1cm4geyB9
OwogfQogCi12b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6cmVsZWFzZU9iamVjdEdyb3VwKEVy
cm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCkKK1Byb3RvY29sOjpFcnJvclN0
cmluZ09yPHZvaWQ+IEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6cmVsZWFzZU9iamVjdEdyb3VwKGNv
bnN0IFN0cmluZyYgb2JqZWN0R3JvdXApCiB7CiAgICAgbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIu
cmVsZWFzZU9iamVjdEdyb3VwKG9iamVjdEdyb3VwKTsKKworICAgIHJldHVybiB7IH07CiB9CiAK
LXZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50OjpnZXRSdW50aW1lVHlwZXNGb3JWYXJpYWJsZXNB
dE9mZnNldHMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBKU09OOjpBcnJheSYgbG9j
YXRpb25zLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UnVudGltZTo6VHlwZURlc2Ny
aXB0aW9uPj4mIHR5cGVEZXNjcmlwdGlvbnMpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8
SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UnVudGltZTo6VHlwZURlc2NyaXB0aW9uPj4+IEluc3Bl
Y3RvclJ1bnRpbWVBZ2VudDo6Z2V0UnVudGltZVR5cGVzRm9yVmFyaWFibGVzQXRPZmZzZXRzKFJl
ZjxKU09OOjpBcnJheT4mJiBsb2NhdGlvbnMpCiB7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29s
IHZlcmJvc2UgPSBmYWxzZTsKIAotICAgIHR5cGVEZXNjcmlwdGlvbnMgPSBKU09OOjpBcnJheU9m
PFByb3RvY29sOjpSdW50aW1lOjpUeXBlRGVzY3JpcHRpb24+OjpjcmVhdGUoKTsKLSAgICBpZiAo
IW1fdm0udHlwZVByb2ZpbGVyKCkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiVk0gaGFzIG5v
IHR5cGUgaW5mb3JtYXRpb24iX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKCFt
X3ZtLnR5cGVQcm9maWxlcigpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIlZNIGhh
cyBubyB0eXBlIGluZm9ybWF0aW9uIl9zKTsKKworICAgIGF1dG8gdHlwZXMgPSBKU09OOjpBcnJh
eU9mPFByb3RvY29sOjpSdW50aW1lOjpUeXBlRGVzY3JpcHRpb24+OjpjcmVhdGUoKTsKIAogICAg
IE1vbm90b25pY1RpbWUgc3RhcnQgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKICAgICBtX3ZtLnR5
cGVQcm9maWxlckxvZygpLT5wcm9jZXNzTG9nRW50cmllcyhtX3ZtLCAiVXNlciBRdWVyeSJfcyk7
CiAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxvY2F0aW9ucy5sZW5ndGgoKTsgaSsrKSB7
Ci0gICAgICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gdmFsdWUgPSBsb2NhdGlvbnMuZ2V0KGkpOwot
ICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBsb2NhdGlvbjsKLSAgICAgICAgaWYgKCF2YWx1
ZS0+YXNPYmplY3QobG9jYXRpb24pKSB7Ci0gICAgICAgICAgICBlcnJvclN0cmluZyA9ICJVbmV4
cGVjdGVkIG5vbi1vYmplY3QgaXRlbSBpbiBsb2NhdGlvbnMiX3M7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxvY2F0aW9ucy0+bGVu
Z3RoKCk7IGkrKykgeworICAgICAgICBhdXRvIGxvY2F0aW9uID0gbG9jYXRpb25zLT5nZXQoaSkt
PmFzT2JqZWN0KCk7CisgICAgICAgIGlmICghbG9jYXRpb24pCisgICAgICAgICAgICByZXR1cm4g
bWFrZVVuZXhwZWN0ZWQoIlVuZXhwZWN0ZWQgbm9uLW9iamVjdCBpdGVtIGluIGxvY2F0aW9ucyJf
cyk7CiAKLSAgICAgICAgaW50IGRlc2NyaXB0b3I7Ci0gICAgICAgIFN0cmluZyBzb3VyY2VJREFz
U3RyaW5nOwotICAgICAgICBpbnQgZGl2b3Q7Ci0gICAgICAgIGxvY2F0aW9uLT5nZXRJbnRlZ2Vy
KCJ0eXBlSW5mb3JtYXRpb25EZXNjcmlwdG9yIl9zLCBkZXNjcmlwdG9yKTsKLSAgICAgICAgbG9j
YXRpb24tPmdldFN0cmluZygic291cmNlSUQiX3MsIHNvdXJjZUlEQXNTdHJpbmcpOwotICAgICAg
ICBsb2NhdGlvbi0+Z2V0SW50ZWdlcigiZGl2b3QiX3MsIGRpdm90KTsKKyAgICAgICAgYXV0byBk
ZXNjcmlwdG9yID0gbG9jYXRpb24tPmdldEludGVnZXIoUHJvdG9jb2w6OlJ1bnRpbWU6OlR5cGVM
b2NhdGlvbjo6dHlwZUluZm9ybWF0aW9uRGVzY3JpcHRvcktleSkudmFsdWVPcihUeXBlUHJvZmls
ZXJTZWFyY2hEZXNjcmlwdG9yTm9ybWFsKTsKKyAgICAgICAgYXV0byBzb3VyY2VJRFN0cmluZyA9
IGxvY2F0aW9uLT5nZXRTdHJpbmcoUHJvdG9jb2w6OlJ1bnRpbWU6OlR5cGVMb2NhdGlvbjo6c291
cmNlSURLZXkpOworICAgICAgICBhdXRvIGRpdm90ID0gbG9jYXRpb24tPmdldEludGVnZXIoUHJv
dG9jb2w6OlJ1bnRpbWU6OlR5cGVMb2NhdGlvbjo6ZGl2b3RLZXkpLnZhbHVlT3IoMCk7CiAKICAg
ICAgICAgYm9vbCBva2F5OwotICAgICAgICBUeXBlTG9jYXRpb24qIHR5cGVMb2NhdGlvbiA9IG1f
dm0udHlwZVByb2ZpbGVyKCktPmZpbmRMb2NhdGlvbihkaXZvdCwgc291cmNlSURBc1N0cmluZy50
b0ludFB0clN0cmljdCgmb2theSksIHN0YXRpY19jYXN0PFR5cGVQcm9maWxlclNlYXJjaERlc2Ny
aXB0b3I+KGRlc2NyaXB0b3IpLCBtX3ZtKTsKKyAgICAgICAgVHlwZUxvY2F0aW9uKiB0eXBlTG9j
YXRpb24gPSBtX3ZtLnR5cGVQcm9maWxlcigpLT5maW5kTG9jYXRpb24oZGl2b3QsIHNvdXJjZUlE
U3RyaW5nLnRvSW50UHRyU3RyaWN0KCZva2F5KSwgc3RhdGljX2Nhc3Q8VHlwZVByb2ZpbGVyU2Vh
cmNoRGVzY3JpcHRvcj4oZGVzY3JpcHRvciksIG1fdm0pOwogICAgICAgICBBU1NFUlQob2theSk7
CiAKICAgICAgICAgUmVmUHRyPFR5cGVTZXQ+IHR5cGVTZXQ7CkBAIC0zNzIsMTIgKzQxOSwxNCBA
QCB2b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6Z2V0UnVudGltZVR5cGVzRm9yVmFyaWFibGVz
QXRPZmZzZXRzKEVycm9yU3RyaW5nJiBlcgogICAgICAgICAgICAgZGVzY3JpcHRpb24tPnNldElz
VHJ1bmNhdGVkKHR5cGVTZXQtPmlzT3ZlcmZsb3duKCkpOwogICAgICAgICB9CiAKLSAgICAgICAg
dHlwZURlc2NyaXB0aW9ucy0+YWRkSXRlbShXVEZNb3ZlKGRlc2NyaXB0aW9uKSk7CisgICAgICAg
IHR5cGVzLT5hZGRJdGVtKFdURk1vdmUoZGVzY3JpcHRpb24pKTsKICAgICB9CiAKICAgICBNb25v
dG9uaWNUaW1lIGVuZCA9IE1vbm90b25pY1RpbWU6Om5vdygpOwogICAgIGlmICh2ZXJib3NlKQog
ICAgICAgICBkYXRhTG9nRigiSW5zcGVjdG9yOjpnZXRSdW50aW1lVHlwZXNGb3JWYXJpYWJsZXNB
dE9mZnNldHMgdG9vayAlbGZtc1xuIiwgKGVuZCAtIHN0YXJ0KS5taWxsaXNlY29uZHMoKSk7CisK
KyAgICByZXR1cm4gV1RGTW92ZSh0eXBlcyk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yUnVudGltZUFn
ZW50OjpkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9udGVuZFJvdXRl
ciosIEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXIqKQpAQCAtMzg5LDI4ICs0MzgsMzUgQEAg
dm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5k
KERpc2Nvbm5lY3RSZWFzb24gcmVhc28KICAgICBpZiAocmVhc29uICE9IERpc2Nvbm5lY3RSZWFz
b246Okluc3BlY3RlZFRhcmdldERlc3Ryb3llZCAmJiBtX2lzVHlwZVByb2ZpbGluZ0VuYWJsZWQp
CiAgICAgICAgIHNldFR5cGVQcm9maWxlckVuYWJsZWRTdGF0ZShmYWxzZSk7CiAKLSAgICBTdHJp
bmcgdW51c2VkOwotICAgIGRpc2FibGUodW51c2VkKTsKKyAgICBkaXNhYmxlKCk7CiB9CiAKLXZv
aWQgSW5zcGVjdG9yUnVudGltZUFnZW50OjplbmFibGVUeXBlUHJvZmlsZXIoRXJyb3JTdHJpbmcm
KQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yUnVudGltZUFnZW50Ojpl
bmFibGVUeXBlUHJvZmlsZXIoKQogewogICAgIHNldFR5cGVQcm9maWxlckVuYWJsZWRTdGF0ZSh0
cnVlKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50
OjpkaXNhYmxlVHlwZVByb2ZpbGVyKEVycm9yU3RyaW5nJikKK1Byb3RvY29sOjpFcnJvclN0cmlu
Z09yPHZvaWQ+IEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6ZGlzYWJsZVR5cGVQcm9maWxlcigpCiB7
CiAgICAgc2V0VHlwZVByb2ZpbGVyRW5hYmxlZFN0YXRlKGZhbHNlKTsKKworICAgIHJldHVybiB7
IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50OjplbmFibGVDb250cm9sRmxvd1By
b2ZpbGVyKEVycm9yU3RyaW5nJikKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3Bl
Y3RvclJ1bnRpbWVBZ2VudDo6ZW5hYmxlQ29udHJvbEZsb3dQcm9maWxlcigpCiB7CiAgICAgc2V0
Q29udHJvbEZsb3dQcm9maWxlckVuYWJsZWRTdGF0ZSh0cnVlKTsKKworICAgIHJldHVybiB7IH07
CiB9CiAKLXZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50OjpkaXNhYmxlQ29udHJvbEZsb3dQcm9m
aWxlcihFcnJvclN0cmluZyYpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0
b3JSdW50aW1lQWdlbnQ6OmRpc2FibGVDb250cm9sRmxvd1Byb2ZpbGVyKCkKIHsKICAgICBzZXRD
b250cm9sRmxvd1Byb2ZpbGVyRW5hYmxlZFN0YXRlKGZhbHNlKTsKKworICAgIHJldHVybiB7IH07
CiB9CiAKIHZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50OjpzZXRUeXBlUHJvZmlsZXJFbmFibGVk
U3RhdGUoYm9vbCBpc1R5cGVQcm9maWxpbmdFbmFibGVkKQpAQCAtNDQyLDE5ICs0OTgsMTMgQEAg
dm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OnNldENvbnRyb2xGbG93UHJvZmlsZXJFbmFibGVk
U3RhdGUoYm9vbCBpc0NvbnRyb2xGbG8KICAgICB9KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSdW50
aW1lQWdlbnQ6OmdldEJhc2ljQmxvY2tzKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3Qg
U3RyaW5nJiBzb3VyY2VJREFzU3RyaW5nLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6
UnVudGltZTo6QmFzaWNCbG9jaz4+JiBiYXNpY0Jsb2NrcykKK1Byb3RvY29sOjpFcnJvclN0cmlu
Z09yPFJlZjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpCYXNpY0Jsb2NrPj4+IElu
c3BlY3RvclJ1bnRpbWVBZ2VudDo6Z2V0QmFzaWNCbG9ja3MoY29uc3QgU3RyaW5nJiBzb3VyY2VJ
RCkKIHsKLSAgICBpZiAoIW1fdm0uY29udHJvbEZsb3dQcm9maWxlcigpKSB7Ci0gICAgICAgIGVy
cm9yU3RyaW5nID0gIlZNIGhhcyBubyBjb250cm9sIGZsb3cgaW5mb3JtYXRpb24iX3M7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKCFtX3ZtLmNvbnRyb2xGbG93UHJvZmlsZXIoKSkK
KyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJWTSBoYXMgbm8gY29udHJvbCBmbG93IGlu
Zm9ybWF0aW9uIl9zKTsKIAotICAgIGJvb2wgb2theTsKLSAgICBpbnRwdHJfdCBzb3VyY2VJRCA9
IHNvdXJjZUlEQXNTdHJpbmcudG9JbnRQdHJTdHJpY3QoJm9rYXkpOwotICAgIEFTU0VSVChva2F5
KTsKLSAgICBjb25zdCBWZWN0b3I8QmFzaWNCbG9ja1JhbmdlPiYgYmFzaWNCbG9ja1JhbmdlcyA9
IG1fdm0uY29udHJvbEZsb3dQcm9maWxlcigpLT5nZXRCYXNpY0Jsb2Nrc0ZvclNvdXJjZUlEKHNv
dXJjZUlELCBtX3ZtKTsKLSAgICBiYXNpY0Jsb2NrcyA9IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6
OlJ1bnRpbWU6OkJhc2ljQmxvY2s+OjpjcmVhdGUoKTsKLSAgICBmb3IgKGNvbnN0IEJhc2ljQmxv
Y2tSYW5nZSYgYmxvY2sgOiBiYXNpY0Jsb2NrUmFuZ2VzKSB7CisgICAgYXV0byBiYXNpY0Jsb2Nr
cyA9IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OkJhc2ljQmxvY2s+OjpjcmVhdGUo
KTsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGJsb2NrIDogbV92bS5jb250cm9sRmxvd1Byb2ZpbGVy
KCktPmdldEJhc2ljQmxvY2tzRm9yU291cmNlSUQoc291cmNlSUQudG9JbnRQdHIoKSwgbV92bSkp
IHsKICAgICAgICAgYXV0byBsb2NhdGlvbiA9IFByb3RvY29sOjpSdW50aW1lOjpCYXNpY0Jsb2Nr
OjpjcmVhdGUoKQogICAgICAgICAgICAgLnNldFN0YXJ0T2Zmc2V0KGJsb2NrLm1fc3RhcnRPZmZz
ZXQpCiAgICAgICAgICAgICAuc2V0RW5kT2Zmc2V0KGJsb2NrLm1fZW5kT2Zmc2V0KQpAQCAtNDYz
LDYgKzUxMyw3IEBAIHZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50OjpnZXRCYXNpY0Jsb2NrcyhF
cnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluCiAgICAgICAgICAgICAucmVsZWFz
ZSgpOwogICAgICAgICBiYXNpY0Jsb2Nrcy0+YWRkSXRlbShXVEZNb3ZlKGxvY2F0aW9uKSk7CiAg
ICAgfQorICAgIHJldHVybiBXVEZNb3ZlKGJhc2ljQmxvY2tzKTsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L2FnZW50cy9JbnNwZWN0b3JSdW50aW1lQWdlbnQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclJ1bnRpbWVBZ2VudC5oCmluZGV4IDE3NTYxNTExYWY5
NzliM2IyYjc5MWM3NGRkNzI3ZDRhZTMxMjRlY2UuLmY0MDI5NDZmZjZkYWE4OGM0ODVkMDk3YWFj
NjFjMWQ5ZWJmYzA5YWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3IvYWdlbnRzL0luc3BlY3RvclJ1bnRpbWVBZ2VudC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclJ1bnRpbWVBZ2VudC5oCkBAIC00NSw3ICs0
NSw2IEBAIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCiBjbGFzcyBJbmplY3RlZFNjcmlwdDsKIGNs
YXNzIEluamVjdGVkU2NyaXB0TWFuYWdlcjsKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwog
CiBjbGFzcyBKU19FWFBPUlRfUFJJVkFURSBJbnNwZWN0b3JSdW50aW1lQWdlbnQgOiBwdWJsaWMg
SW5zcGVjdG9yQWdlbnRCYXNlLCBwdWJsaWMgUnVudGltZUJhY2tlbmREaXNwYXRjaGVySGFuZGxl
ciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW5zcGVjdG9yUnVudGltZUFnZW50KTsKQEAg
LTU4LDMzICs1NywzMyBAQCBwdWJsaWM6CiAgICAgdm9pZCB3aWxsRGVzdHJveUZyb250ZW5kQW5k
QmFja2VuZChEaXNjb25uZWN0UmVhc29uKSBmaW5hbDsKIAogICAgIC8vIFJ1bnRpbWVCYWNrZW5k
RGlzcGF0Y2hlckhhbmRsZXIKLSAgICB2b2lkIGVuYWJsZShFcnJvclN0cmluZyYpIG92ZXJyaWRl
IHsgbV9lbmFibGVkID0gdHJ1ZTsgfQotICAgIHZvaWQgZGlzYWJsZShFcnJvclN0cmluZyYpIG92
ZXJyaWRlIHsgbV9lbmFibGVkID0gZmFsc2U7IH0KLSAgICB2b2lkIHBhcnNlKEVycm9yU3RyaW5n
JiwgY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBQcm90b2NvbDo6UnVudGltZTo6U3ludGF4RXJy
b3JUeXBlKiByZXN1bHQsIE9wdGlvbmFsPFN0cmluZz4mIG1lc3NhZ2UsIFJlZlB0cjxQcm90b2Nv
bDo6UnVudGltZTo6RXJyb3JSYW5nZT4mKSBmaW5hbDsKLSAgICB2b2lkIGV2YWx1YXRlKEVycm9y
U3RyaW5nJiwgY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBjb25zdCBTdHJpbmcqIG9iamVjdEdy
b3VwLCBjb25zdCBib29sKiBpbmNsdWRlQ29tbWFuZExpbmVBUEksIGNvbnN0IGJvb2wqIGRvTm90
UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29sZSwgY29uc3QgaW50KiBleGVjdXRpb25Db250
ZXh0SWQsIGNvbnN0IGJvb2wqIHJldHVybkJ5VmFsdWUsIGNvbnN0IGJvb2wqIGdlbmVyYXRlUHJl
dmlldywgY29uc3QgYm9vbCogc2F2ZVJlc3VsdCwgY29uc3QgYm9vbCogZW11bGF0ZVVzZXJHZXN0
dXJlLCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3VsdCwgT3B0
aW9uYWw8Ym9vbD4mIHdhc1Rocm93biwgT3B0aW9uYWw8aW50PiYgc2F2ZWRSZXN1bHRJbmRleCkg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBhd2FpdFByb21pc2UoY29uc3QgU3RyaW5nJiBwcm9taXNlT2Jq
ZWN0SWQsIGNvbnN0IGJvb2wqIHJldHVybkJ5VmFsdWUsIGNvbnN0IGJvb2wqIGdlbmVyYXRlUHJl
dmlldywgY29uc3QgYm9vbCogc2F2ZVJlc3VsdCwgUmVmPEF3YWl0UHJvbWlzZUNhbGxiYWNrPiYm
KSBmaW5hbDsKLSAgICB2b2lkIGNhbGxGdW5jdGlvbk9uKEVycm9yU3RyaW5nJiwgY29uc3QgU3Ry
aW5nJiBvYmplY3RJZCwgY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBjb25zdCBKU09OOjpBcnJh
eSogb3B0aW9uYWxBcmd1bWVudHMsIGNvbnN0IGJvb2wqIGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNB
bmRNdXRlQ29uc29sZSwgY29uc3QgYm9vbCogcmV0dXJuQnlWYWx1ZSwgY29uc3QgYm9vbCogZ2Vu
ZXJhdGVQcmV2aWV3LCBjb25zdCBib29sKiBlbXVsYXRlVXNlckdlc3R1cmUsIFJlZlB0cjxQcm90
b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0LCBPcHRpb25hbDxib29sPiYgd2Fz
VGhyb3duKSBvdmVycmlkZTsKLSAgICB2b2lkIHJlbGVhc2VPYmplY3QoRXJyb3JTdHJpbmcmLCBj
b25zdCBFcnJvclN0cmluZyYgb2JqZWN0SWQpIGZpbmFsOwotICAgIHZvaWQgZ2V0UHJldmlldyhF
cnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgb2JqZWN0SWQsIFJlZlB0cjxQcm90b2NvbDo6UnVu
dGltZTo6T2JqZWN0UHJldmlldz4mKSBmaW5hbDsKLSAgICB2b2lkIGdldFByb3BlcnRpZXMoRXJy
b3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBjb25zdCBib29sKiBvd25Qcm9wZXJ0
aWVzLCBjb25zdCBpbnQqIGZldGNoU3RhcnQsIGNvbnN0IGludCogZmV0Y2hDb3VudCwgY29uc3Qg
Ym9vbCogZ2VuZXJhdGVQcmV2aWV3LCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UnVu
dGltZTo6UHJvcGVydHlEZXNjcmlwdG9yPj4mIHByb3BlcnRpZXMsIFJlZlB0cjxKU09OOjpBcnJh
eU9mPFByb3RvY29sOjpSdW50aW1lOjpJbnRlcm5hbFByb3BlcnR5RGVzY3JpcHRvcj4+JiBpbnRl
cm5hbFByb3BlcnRpZXMpIGZpbmFsOwotICAgIHZvaWQgZ2V0RGlzcGxheWFibGVQcm9wZXJ0aWVz
KEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBvYmplY3RJZCwgY29uc3QgaW50KiBmZXRjaFN0
YXJ0LCBjb25zdCBpbnQqIGZldGNoQ291bnQsIGNvbnN0IGJvb2wqIGdlbmVyYXRlUHJldmlldywg
UmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OlByb3BlcnR5RGVzY3JpcHRv
cj4+JiBwcm9wZXJ0aWVzLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UnVudGltZTo6
SW50ZXJuYWxQcm9wZXJ0eURlc2NyaXB0b3I+PiYgaW50ZXJuYWxQcm9wZXJ0aWVzKSBmaW5hbDsK
LSAgICB2b2lkIGdldENvbGxlY3Rpb25FbnRyaWVzKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5n
JiBvYmplY3RJZCwgY29uc3QgU3RyaW5nKiBvYmplY3RHcm91cCwgY29uc3QgaW50KiBmZXRjaFN0
YXJ0LCBjb25zdCBpbnQqIGZldGNoQ291bnQsIFJlZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29s
OjpSdW50aW1lOjpDb2xsZWN0aW9uRW50cnk+PiYgZW50cmllcykgZmluYWw7Ci0gICAgdm9pZCBz
YXZlUmVzdWx0KEVycm9yU3RyaW5nJiwgY29uc3QgSlNPTjo6T2JqZWN0JiBjYWxsQXJndW1lbnQs
IGNvbnN0IGludCogZXhlY3V0aW9uQ29udGV4dElkLCBPcHRpb25hbDxpbnQ+JiBzYXZlZFJlc3Vs
dEluZGV4KSBmaW5hbDsKLSAgICB2b2lkIHNldFNhdmVkUmVzdWx0QWxpYXMoRXJyb3JTdHJpbmcm
LCBjb25zdCBTdHJpbmcqIGFsaWFzKSBmaW5hbDsKLSAgICB2b2lkIHJlbGVhc2VPYmplY3RHcm91
cChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgb2JqZWN0R3JvdXApIGZpbmFsOwotICAgIHZv
aWQgZ2V0UnVudGltZVR5cGVzRm9yVmFyaWFibGVzQXRPZmZzZXRzKEVycm9yU3RyaW5nJiwgY29u
c3QgSlNPTjo6QXJyYXkmIGxvY2F0aW9ucywgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6
OlJ1bnRpbWU6OlR5cGVEZXNjcmlwdGlvbj4+JikgZmluYWw7Ci0gICAgdm9pZCBlbmFibGVUeXBl
UHJvZmlsZXIoRXJyb3JTdHJpbmcmKSBmaW5hbDsKLSAgICB2b2lkIGRpc2FibGVUeXBlUHJvZmls
ZXIoRXJyb3JTdHJpbmcmKSBmaW5hbDsKLSAgICB2b2lkIGVuYWJsZUNvbnRyb2xGbG93UHJvZmls
ZXIoRXJyb3JTdHJpbmcmKSBmaW5hbDsKLSAgICB2b2lkIGRpc2FibGVDb250cm9sRmxvd1Byb2Zp
bGVyKEVycm9yU3RyaW5nJikgZmluYWw7Ci0gICAgdm9pZCBnZXRCYXNpY0Jsb2NrcyhFcnJvclN0
cmluZyYsIGNvbnN0IFN0cmluZyYgaW5fc291cmNlSUQsIFJlZlB0cjxKU09OOjpBcnJheU9mPFBy
b3RvY29sOjpSdW50aW1lOjpCYXNpY0Jsb2NrPj4mIG91dF9iYXNpY0Jsb2NrcykgZmluYWw7Cisg
ICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZW5hYmxlKCkgb3ZlcnJpZGU7CisgICAg
UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZGlzYWJsZSgpIG92ZXJyaWRlOworICAgIFBy
b3RvY29sOjpFcnJvclN0cmluZ09yPHN0ZDo6dHVwbGU8UHJvdG9jb2w6OlJ1bnRpbWU6OlN5bnRh
eEVycm9yVHlwZSwgU3RyaW5nIC8qIG1lc3NhZ2UgKi8sIFJlZlB0cjxQcm90b2NvbDo6UnVudGlt
ZTo6RXJyb3JSYW5nZT4+PiBwYXJzZShjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24pIGZpbmFsOwor
ICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHN0ZDo6dHVwbGU8UmVmPFByb3RvY29sOjpSdW50
aW1lOjpSZW1vdGVPYmplY3Q+LCBPcHRpb25hbDxib29sPiAvKiB3YXNUaHJvd24gKi8sIE9wdGlv
bmFsPGludD4gLyogc2F2ZWRSZXN1bHRJbmRleCAqLz4+IGV2YWx1YXRlKGNvbnN0IFN0cmluZyYg
ZXhwcmVzc2lvbiwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCwgT3B0aW9uYWw8Ym9vbD4mJiBp
bmNsdWRlQ29tbWFuZExpbmVBUEksIE9wdGlvbmFsPGJvb2w+JiYgZG9Ob3RQYXVzZU9uRXhjZXB0
aW9uc0FuZE11dGVDb25zb2xlLCBPcHRpb25hbDxQcm90b2NvbDo6UnVudGltZTo6RXhlY3V0aW9u
Q29udGV4dElkPiYmLCBPcHRpb25hbDxib29sPiYmIHJldHVybkJ5VmFsdWUsIE9wdGlvbmFsPGJv
b2w+JiYgZ2VuZXJhdGVQcmV2aWV3LCBPcHRpb25hbDxib29sPiYmIHNhdmVSZXN1bHQsIE9wdGlv
bmFsPGJvb2w+JiYgZW11bGF0ZVVzZXJHZXN0dXJlKSBvdmVycmlkZTsKKyAgICB2b2lkIGF3YWl0
UHJvbWlzZShjb25zdCBQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0SWQmLCBPcHRpb25h
bDxib29sPiYmIHJldHVybkJ5VmFsdWUsIE9wdGlvbmFsPGJvb2w+JiYgZ2VuZXJhdGVQcmV2aWV3
LCBPcHRpb25hbDxib29sPiYmIHNhdmVSZXN1bHQsIFJlZjxBd2FpdFByb21pc2VDYWxsYmFjaz4m
JikgZmluYWw7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8c3RkOjp0dXBsZTxSZWY8UHJv
dG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4sIE9wdGlvbmFsPGJvb2w+IC8qIHdhc1Rocm93
biAqLz4+IGNhbGxGdW5jdGlvbk9uKGNvbnN0IFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmpl
Y3RJZCYsIGNvbnN0IFN0cmluZyYgZnVuY3Rpb25EZWNsYXJhdGlvbiwgUmVmUHRyPEpTT046OkFy
cmF5PiYmIGFyZ3VtZW50cywgT3B0aW9uYWw8Ym9vbD4mJiBkb05vdFBhdXNlT25FeGNlcHRpb25z
QW5kTXV0ZUNvbnNvbGUsIE9wdGlvbmFsPGJvb2w+JiYgcmV0dXJuQnlWYWx1ZSwgT3B0aW9uYWw8
Ym9vbD4mJiBnZW5lcmF0ZVByZXZpZXcsIE9wdGlvbmFsPGJvb2w+JiYgZW11bGF0ZVVzZXJHZXN0
dXJlKSBvdmVycmlkZTsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiByZWxlYXNl
T2JqZWN0KGNvbnN0IFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3RJZCYpIGZpbmFsOwor
ICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxQcm90b2NvbDo6UnVudGltZTo6T2JqZWN0
UHJldmlldz4+IGdldFByZXZpZXcoY29uc3QgUHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVj
dElkJikgZmluYWw7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8c3RkOjp0dXBsZTxSZWY8
SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UnVudGltZTo6UHJvcGVydHlEZXNjcmlwdG9yPj4sIFJl
ZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpJbnRlcm5hbFByb3BlcnR5RGVz
Y3JpcHRvcj4+Pj4gZ2V0UHJvcGVydGllcyhjb25zdCBQcm90b2NvbDo6UnVudGltZTo6UmVtb3Rl
T2JqZWN0SWQmLCBPcHRpb25hbDxib29sPiYmIG93blByb3BlcnRpZXMsIE9wdGlvbmFsPGludD4m
JiBmZXRjaFN0YXJ0LCBPcHRpb25hbDxpbnQ+JiYgZmV0Y2hDb3VudCwgT3B0aW9uYWw8Ym9vbD4m
JiBnZW5lcmF0ZVByZXZpZXcpIGZpbmFsOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHN0
ZDo6dHVwbGU8UmVmPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OlByb3BlcnR5RGVz
Y3JpcHRvcj4+LCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UnVudGltZTo6SW50ZXJu
YWxQcm9wZXJ0eURlc2NyaXB0b3I+Pj4+IGdldERpc3BsYXlhYmxlUHJvcGVydGllcyhjb25zdCBQ
cm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0SWQmLCBPcHRpb25hbDxpbnQ+JiYgZmV0Y2hT
dGFydCwgT3B0aW9uYWw8aW50PiYmIGZldGNoQ291bnQsIE9wdGlvbmFsPGJvb2w+JiYgZ2VuZXJh
dGVQcmV2aWV3KSBmaW5hbDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SlNPTjo6
QXJyYXlPZjxQcm90b2NvbDo6UnVudGltZTo6Q29sbGVjdGlvbkVudHJ5Pj4+IGdldENvbGxlY3Rp
b25FbnRyaWVzKGNvbnN0IFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3RJZCYsIGNvbnN0
IFN0cmluZyYgb2JqZWN0R3JvdXAsIE9wdGlvbmFsPGludD4mJiBmZXRjaFN0YXJ0LCBPcHRpb25h
bDxpbnQ+JiYgZmV0Y2hDb3VudCkgZmluYWw7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8
T3B0aW9uYWw8aW50PiAvKiBzYXZlUmVzdWx0SW5kZXggKi8+IHNhdmVSZXN1bHQoUmVmPEpTT046
Ok9iamVjdD4mJiBjYWxsQXJndW1lbnQsIE9wdGlvbmFsPFByb3RvY29sOjpSdW50aW1lOjpFeGVj
dXRpb25Db250ZXh0SWQ+JiYpIGZpbmFsOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZv
aWQ+IHNldFNhdmVkUmVzdWx0QWxpYXMoY29uc3QgU3RyaW5nJikgZmluYWw7CisgICAgUHJvdG9j
b2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gcmVsZWFzZU9iamVjdEdyb3VwKGNvbnN0IFN0cmluZyYp
IGZpbmFsOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPFBy
b3RvY29sOjpSdW50aW1lOjpUeXBlRGVzY3JpcHRpb24+Pj4gZ2V0UnVudGltZVR5cGVzRm9yVmFy
aWFibGVzQXRPZmZzZXRzKFJlZjxKU09OOjpBcnJheT4mJiBsb2NhdGlvbnMpIGZpbmFsOworICAg
IFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGVuYWJsZVR5cGVQcm9maWxlcigpIGZpbmFs
OworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGRpc2FibGVUeXBlUHJvZmlsZXIo
KSBmaW5hbDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBlbmFibGVDb250cm9s
Rmxvd1Byb2ZpbGVyKCkgZmluYWw7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4g
ZGlzYWJsZUNvbnRyb2xGbG93UHJvZmlsZXIoKSBmaW5hbDsKKyAgICBQcm90b2NvbDo6RXJyb3JT
dHJpbmdPcjxSZWY8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UnVudGltZTo6QmFzaWNCbG9jaz4+
PiBnZXRCYXNpY0Jsb2Nrcyhjb25zdCBTdHJpbmcmIHNvdXJjZUlEKSBmaW5hbDsKIAogcHJvdGVj
dGVkOgogICAgIEluc3BlY3RvclJ1bnRpbWVBZ2VudChBZ2VudENvbnRleHQmKTsKIAogICAgIElu
amVjdGVkU2NyaXB0TWFuYWdlciYgaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKCkgeyByZXR1cm4gbV9p
bmplY3RlZFNjcmlwdE1hbmFnZXI7IH0KIAotICAgIHZpcnR1YWwgSW5qZWN0ZWRTY3JpcHQgaW5q
ZWN0ZWRTY3JpcHRGb3JFdmFsKEVycm9yU3RyaW5nJiwgY29uc3QgaW50KiBleGVjdXRpb25Db250
ZXh0SWQpID0gMDsKKyAgICB2aXJ0dWFsIEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0Rm9y
RXZhbChQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBPcHRpb25hbDxQcm90b2NvbDo6UnVudGltZTo6
RXhlY3V0aW9uQ29udGV4dElkPiYmKSA9IDA7CiAKICAgICB2aXJ0dWFsIHZvaWQgbXV0ZUNvbnNv
bGUoKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHVubXV0ZUNvbnNvbGUoKSA9IDA7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JTY3Jp
cHRQcm9maWxlckFnZW50LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdl
bnRzL0luc3BlY3RvclNjcmlwdFByb2ZpbGVyQWdlbnQuY3BwCmluZGV4IDY4MTNlMDc1YTk0YjM2
MzFmYjUyZWFkZDljZTc5OWI5YzdkY2Q4ZGUuLjdlYjUxYWYzMGZkYTgwMmNhODFhOGIxMGVjZDdl
NmViZWUyMjExN2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
YWdlbnRzL0luc3BlY3RvclNjcmlwdFByb2ZpbGVyQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclNjcmlwdFByb2ZpbGVyQWdlbnQu
Y3BwCkBAIC02NCwxMCArNjQsMTAgQEAgdm9pZCBJbnNwZWN0b3JTY3JpcHRQcm9maWxlckFnZW50
Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChEaXNjb25uZWN0UmVhc28KICAgICB9CiB9
CiAKLXZvaWQgSW5zcGVjdG9yU2NyaXB0UHJvZmlsZXJBZ2VudDo6c3RhcnRUcmFja2luZyhFcnJv
clN0cmluZyYsIGNvbnN0IGJvb2wqIGluY2x1ZGVTYW1wbGVzKQorUHJvdG9jb2w6OkVycm9yU3Ry
aW5nT3I8dm9pZD4gSW5zcGVjdG9yU2NyaXB0UHJvZmlsZXJBZ2VudDo6c3RhcnRUcmFja2luZyhP
cHRpb25hbDxib29sPiYmIGluY2x1ZGVTYW1wbGVzKQogewogICAgIGlmIChtX3RyYWNraW5nKQot
ICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB7IH07CiAKICAgICBtX3RyYWNraW5nID0g
dHJ1ZTsKIApAQCAtOTEsMTIgKzkxLDE0IEBAIHZvaWQgSW5zcGVjdG9yU2NyaXB0UHJvZmlsZXJB
Z2VudDo6c3RhcnRUcmFja2luZyhFcnJvclN0cmluZyYsIGNvbnN0IGJvb2wqIGluY2x1CiAgICAg
bV9lbnZpcm9ubWVudC5kZWJ1Z2dlcigpLnNldFByb2ZpbGluZ0NsaWVudCh0aGlzKTsKIAogICAg
IG1fZnJvbnRlbmREaXNwYXRjaGVyLT50cmFja2luZ1N0YXJ0KHN0b3B3YXRjaC5lbGFwc2VkVGlt
ZSgpLnNlY29uZHMoKSk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvclNj
cmlwdFByb2ZpbGVyQWdlbnQ6OnN0b3BUcmFja2luZyhFcnJvclN0cmluZyYpCitQcm90b2NvbDo6
RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JTY3JpcHRQcm9maWxlckFnZW50OjpzdG9wVHJh
Y2tpbmcoKQogewogICAgIGlmICghbV90cmFja2luZykKLSAgICAgICAgcmV0dXJuOworICAgICAg
ICByZXR1cm4geyB9OwogCiAgICAgbV90cmFja2luZyA9IGZhbHNlOwogICAgIG1fYWN0aXZlRXZh
bHVhdGVTY3JpcHQgPSBmYWxzZTsKQEAgLTEwNCw2ICsxMDYsOCBAQCB2b2lkIEluc3BlY3RvclNj
cmlwdFByb2ZpbGVyQWdlbnQ6OnN0b3BUcmFja2luZyhFcnJvclN0cmluZyYpCiAgICAgbV9lbnZp
cm9ubWVudC5kZWJ1Z2dlcigpLnNldFByb2ZpbGluZ0NsaWVudChudWxscHRyKTsKIAogICAgIHRy
YWNraW5nQ29tcGxldGUoKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKIGJvb2wgSW5zcGVjdG9y
U2NyaXB0UHJvZmlsZXJBZ2VudDo6aXNBbHJlYWR5UHJvZmlsaW5nKCkgY29uc3QKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclNjcmlw
dFByb2ZpbGVyQWdlbnQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRz
L0luc3BlY3RvclNjcmlwdFByb2ZpbGVyQWdlbnQuaAppbmRleCA3ZTdjZGM5Zjk3NTA2Nzc2NjI5
NzQwYWFkY2I1NGZiNGRhMDBkMDhmLi4yOGY1NDg4ZDBhZmMwNjNiMjlkZDBmZjdjZGQ1MGU1ZDUw
YTY0Nzg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50
cy9JbnNwZWN0b3JTY3JpcHRQcm9maWxlckFnZW50LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yU2NyaXB0UHJvZmlsZXJBZ2VudC5oCkBAIC0z
NywyNyArMzcsMjUgQEAgY2xhc3MgUHJvZmlsZTsKIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAK
LXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCiBjbGFzcyBKU19FWFBPUlRfUFJJVkFURSBJ
bnNwZWN0b3JTY3JpcHRQcm9maWxlckFnZW50IGZpbmFsIDogcHVibGljIEluc3BlY3RvckFnZW50
QmFzZSwgcHVibGljIFNjcmlwdFByb2ZpbGVyQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyLCBwdWJs
aWMgSlNDOjpEZWJ1Z2dlcjo6UHJvZmlsaW5nQ2xpZW50IHsKICAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShJbnNwZWN0b3JTY3JpcHRQcm9maWxlckFnZW50KTsKICAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKIHB1YmxpYzoKICAgICBJbnNwZWN0b3JTY3JpcHRQcm9maWxlckFnZW50KEFnZW50
Q29udGV4dCYpOwotICAgIH5JbnNwZWN0b3JTY3JpcHRQcm9maWxlckFnZW50KCkgZmluYWw7Cisg
ICAgfkluc3BlY3RvclNjcmlwdFByb2ZpbGVyQWdlbnQoKTsKIAogICAgIC8vIEluc3BlY3RvckFn
ZW50QmFzZQotICAgIHZvaWQgZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEZyb250ZW5kUm91
dGVyKiwgQmFja2VuZERpc3BhdGNoZXIqKSBmaW5hbDsKLSAgICB2b2lkIHdpbGxEZXN0cm95RnJv
bnRlbmRBbmRCYWNrZW5kKERpc2Nvbm5lY3RSZWFzb24pIGZpbmFsOworICAgIHZvaWQgZGlkQ3Jl
YXRlRnJvbnRlbmRBbmRCYWNrZW5kKEZyb250ZW5kUm91dGVyKiwgQmFja2VuZERpc3BhdGNoZXIq
KTsKKyAgICB2b2lkIHdpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKERpc2Nvbm5lY3RSZWFz
b24pOwogCiAgICAgLy8gU2NyaXB0UHJvZmlsZXJCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIKLSAg
ICB2b2lkIHN0YXJ0VHJhY2tpbmcoRXJyb3JTdHJpbmcmLCBjb25zdCBib29sKiBpbmNsdWRlU2Ft
cGxlcykgZmluYWw7Ci0gICAgdm9pZCBzdG9wVHJhY2tpbmcoRXJyb3JTdHJpbmcmKSBmaW5hbDsK
KyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzdGFydFRyYWNraW5nKE9wdGlvbmFs
PGJvb2w+JiYgaW5jbHVkZVNhbXBsZXMpOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZv
aWQ+IHN0b3BUcmFja2luZygpOwogCiAgICAgLy8gSlNDOjpEZWJ1Z2dlcjo6UHJvZmlsaW5nQ2xp
ZW50Ci0gICAgYm9vbCBpc0FscmVhZHlQcm9maWxpbmcoKSBjb25zdCBmaW5hbDsKLSAgICBTZWNv
bmRzIHdpbGxFdmFsdWF0ZVNjcmlwdCgpIGZpbmFsOwotICAgIHZvaWQgZGlkRXZhbHVhdGVTY3Jp
cHQoU2Vjb25kcywgSlNDOjpQcm9maWxpbmdSZWFzb24pIGZpbmFsOworICAgIGJvb2wgaXNBbHJl
YWR5UHJvZmlsaW5nKCkgY29uc3Q7CisgICAgU2Vjb25kcyB3aWxsRXZhbHVhdGVTY3JpcHQoKTsK
KyAgICB2b2lkIGRpZEV2YWx1YXRlU2NyaXB0KFNlY29uZHMsIEpTQzo6UHJvZmlsaW5nUmVhc29u
KTsKIAogcHJpdmF0ZToKICAgICB2b2lkIGFkZEV2ZW50KFNlY29uZHMgc3RhcnRUaW1lLCBTZWNv
bmRzIGVuZFRpbWUsIEpTQzo6UHJvZmlsaW5nUmVhc29uKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclRhcmdldEFnZW50LmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclRhcmdldEFn
ZW50LmNwcAppbmRleCA4ZmNiNWExZTU1NzUwZDMyNWE4NDgyNGQ4NmM0OWNmZTZmYjA0MjY4Li41
MDhlYjAyZWM5NWM1MjQwODM4NGExZTJiNzc2NDhhZmQ0MjZkZDlkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JUYXJnZXRBZ2VudC5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9y
VGFyZ2V0QWdlbnQuY3BwCkBAIC01NSwzNiArNTUsMzYgQEAgdm9pZCBJbnNwZWN0b3JUYXJnZXRB
Z2VudDo6d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoRGlzY29ubmVjdFJlYXNvbikKICAg
ICBtX3Nob3VsZFBhdXNlT25TdGFydCA9IGZhbHNlOwogfQogCi12b2lkIEluc3BlY3RvclRhcmdl
dEFnZW50OjpzZXRQYXVzZU9uU3RhcnQoRXJyb3JTdHJpbmcmLCBib29sIHBhdXNlT25TdGFydCkK
K1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvclRhcmdldEFnZW50OjpzZXRQ
YXVzZU9uU3RhcnQoYm9vbCBwYXVzZU9uU3RhcnQpCiB7CiAgICAgbV9zaG91bGRQYXVzZU9uU3Rh
cnQgPSBwYXVzZU9uU3RhcnQ7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3Rv
clRhcmdldEFnZW50OjpyZXN1bWUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJp
bmcmIHRhcmdldElkKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yVGFy
Z2V0QWdlbnQ6OnJlc3VtZShjb25zdCBTdHJpbmcmIHRhcmdldElkKQogewogICAgIGF1dG8qIHRh
cmdldCA9IG1fdGFyZ2V0cy5nZXQodGFyZ2V0SWQpOwotICAgIGlmICghdGFyZ2V0KSB7Ci0gICAg
ICAgIGVycm9yU3RyaW5nID0gIk1pc3NpbmcgdGFyZ2V0IGZvciBnaXZlbiB0YXJnZXRJZCJfczsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoIXRhcmdldCkKKyAgICAgICAgcmV0dXJu
IG1ha2VVbmV4cGVjdGVkKCJNaXNzaW5nIHRhcmdldCBmb3IgZ2l2ZW4gdGFyZ2V0SWQiX3MpOwog
Ci0gICAgaWYgKCF0YXJnZXQtPmlzUGF1c2VkKCkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAi
VGFyZ2V0IGZvciBnaXZlbiB0YXJnZXRJZCBpcyBub3QgcGF1c2VkIl9zOwotICAgICAgICByZXR1
cm47Ci0gICAgfQorICAgIGlmICghdGFyZ2V0LT5pc1BhdXNlZCgpKQorICAgICAgICByZXR1cm4g
bWFrZVVuZXhwZWN0ZWQoIlRhcmdldCBmb3IgZ2l2ZW4gdGFyZ2V0SWQgaXMgbm90IHBhdXNlZCJf
cyk7CiAKICAgICB0YXJnZXQtPnJlc3VtZSgpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9p
ZCBJbnNwZWN0b3JUYXJnZXRBZ2VudDo6c2VuZE1lc3NhZ2VUb1RhcmdldChFcnJvclN0cmluZyYg
ZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQsIGNvbnN0IFN0cmluZyYgbWVzc2Fn
ZSkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvclRhcmdldEFnZW50Ojpz
ZW5kTWVzc2FnZVRvVGFyZ2V0KGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQsIGNvbnN0IFN0cmluZyYg
bWVzc2FnZSkKIHsKICAgICBJbnNwZWN0b3JUYXJnZXQqIHRhcmdldCA9IG1fdGFyZ2V0cy5nZXQo
dGFyZ2V0SWQpOwotICAgIGlmICghdGFyZ2V0KSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIk1p
c3NpbmcgdGFyZ2V0IGZvciBnaXZlbiB0YXJnZXRJZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KKyAgICBpZiAoIXRhcmdldCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJNaXNz
aW5nIHRhcmdldCBmb3IgZ2l2ZW4gdGFyZ2V0SWQiX3MpOwogCiAgICAgdGFyZ2V0LT5zZW5kTWVz
c2FnZVRvVGFyZ2V0QmFja2VuZChtZXNzYWdlKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKIHZv
aWQgSW5zcGVjdG9yVGFyZ2V0QWdlbnQ6OnNlbmRNZXNzYWdlRnJvbVRhcmdldFRvRnJvbnRlbmQo
Y29uc3QgU3RyaW5nJiB0YXJnZXRJZCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yVGFyZ2V0
QWdlbnQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rv
clRhcmdldEFnZW50LmgKaW5kZXggYjkyOWRkZmZlMjljM2ZiMDg4YWI2NzE0MDg3Yzk5MzAyYzI3
NTIxNC4uZWRjZDQ4OWI3NmUwODA4MjdlMDc0MWYxNGJhYjA5ZjllYTkzMDNkNCAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yVGFyZ2V0
QWdlbnQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNw
ZWN0b3JUYXJnZXRBZ2VudC5oCkBAIC0zNSwyMyArMzUsMjEgQEAgbmFtZXNwYWNlIEluc3BlY3Rv
ciB7CiAKIGNsYXNzIEluc3BlY3RvclRhcmdldDsKIAotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJp
bmc7Ci0KIGNsYXNzIEpTX0VYUE9SVF9QUklWQVRFIEluc3BlY3RvclRhcmdldEFnZW50IGZpbmFs
IDogcHVibGljIEluc3BlY3RvckFnZW50QmFzZSwgcHVibGljIFRhcmdldEJhY2tlbmREaXNwYXRj
aGVySGFuZGxlciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW5zcGVjdG9yVGFyZ2V0QWdl
bnQpOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIEluc3BlY3Rv
clRhcmdldEFnZW50KEZyb250ZW5kUm91dGVyJiwgQmFja2VuZERpc3BhdGNoZXImKTsKLSAgICB+
SW5zcGVjdG9yVGFyZ2V0QWdlbnQoKSBmaW5hbDsKKyAgICB+SW5zcGVjdG9yVGFyZ2V0QWdlbnQo
KTsKIAogICAgIC8vIEluc3BlY3RvckFnZW50QmFzZQotICAgIHZvaWQgZGlkQ3JlYXRlRnJvbnRl
bmRBbmRCYWNrZW5kKEZyb250ZW5kUm91dGVyKiwgQmFja2VuZERpc3BhdGNoZXIqKSBmaW5hbDsK
LSAgICB2b2lkIHdpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKERpc2Nvbm5lY3RSZWFzb24p
IGZpbmFsOworICAgIHZvaWQgZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEZyb250ZW5kUm91
dGVyKiwgQmFja2VuZERpc3BhdGNoZXIqKTsKKyAgICB2b2lkIHdpbGxEZXN0cm95RnJvbnRlbmRB
bmRCYWNrZW5kKERpc2Nvbm5lY3RSZWFzb24pOwogCiAgICAgLy8gVGFyZ2V0QmFja2VuZERpc3Bh
dGNoZXJIYW5kbGVyCi0gICAgdm9pZCBzZXRQYXVzZU9uU3RhcnQoRXJyb3JTdHJpbmcmLCBib29s
IHBhdXNlT25TdGFydCkgZmluYWw7Ci0gICAgdm9pZCByZXN1bWUoRXJyb3JTdHJpbmcmLCBjb25z
dCBTdHJpbmcmIHRhcmdldElkKSBmaW5hbDsKLSAgICB2b2lkIHNlbmRNZXNzYWdlVG9UYXJnZXQo
RXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHRhcmdldElkLCBjb25zdCBTdHJpbmcmIG1lc3Nh
Z2UpIGZpbmFsOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHNldFBhdXNlT25T
dGFydChib29sKTsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiByZXN1bWUoY29u
c3QgU3RyaW5nJiB0YXJnZXRJZCk7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4g
c2VuZE1lc3NhZ2VUb1RhcmdldChjb25zdCBTdHJpbmcmIHRhcmdldElkLCBjb25zdCBTdHJpbmcm
IG1lc3NhZ2UpOwogCiAgICAgLy8gVGFyZ2V0IGxpZmVjeWNsZS4KICAgICB2b2lkIHRhcmdldENy
ZWF0ZWQoSW5zcGVjdG9yVGFyZ2V0Jik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL2FnZW50cy9KU0dsb2JhbE9iamVjdEF1ZGl0QWdlbnQuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSlNHbG9iYWxPYmplY3RBdWRpdEFnZW50
LmNwcAppbmRleCA0YmZhOWY1YWE3ZmRlMTU0YjUzM2M4ZjIzY2Q3YmFlNjc3NThhYjAwLi4yOWZj
ZWM5N2JiOGU3ZjQ3NzJkNGQ3Y2M4ZmFkNmM5MjMxNzFmODk3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9KU0dsb2JhbE9iamVjdEF1ZGl0QWdlbnQu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0pTR2xvYmFs
T2JqZWN0QXVkaXRBZ2VudC5jcHAKQEAgLTQxLDcgKzQxLDcgQEAgSlNHbG9iYWxPYmplY3RBdWRp
dEFnZW50OjpKU0dsb2JhbE9iamVjdEF1ZGl0QWdlbnQoSlNBZ2VudENvbnRleHQmIGNvbnRleHQp
CiAKIEpTR2xvYmFsT2JqZWN0QXVkaXRBZ2VudDo6fkpTR2xvYmFsT2JqZWN0QXVkaXRBZ2VudCgp
ID0gZGVmYXVsdDsKIAotSW5qZWN0ZWRTY3JpcHQgSlNHbG9iYWxPYmplY3RBdWRpdEFnZW50Ojpp
bmplY3RlZFNjcmlwdEZvckV2YWwoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBpbnQq
IGV4ZWN1dGlvbkNvbnRleHRJZCkKK0luamVjdGVkU2NyaXB0IEpTR2xvYmFsT2JqZWN0QXVkaXRB
Z2VudDo6aW5qZWN0ZWRTY3JpcHRGb3JFdmFsKFByb3RvY29sOjpFcnJvclN0cmluZyYgZXJyb3JT
dHJpbmcsIE9wdGlvbmFsPFByb3RvY29sOjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0SWQ+JiYg
ZXhlY3V0aW9uQ29udGV4dElkKQogewogICAgIGlmIChleGVjdXRpb25Db250ZXh0SWQpIHsKICAg
ICAgICAgZXJyb3JTdHJpbmcgPSAiZXhlY3V0aW9uQ29udGV4dElkIGlzIG5vdCBzdXBwb3J0ZWQg
Zm9yIEpTQ29udGV4dHMgYXMgdGhlcmUgaXMgb25seSBvbmUgZXhlY3V0aW9uIGNvbnRleHQiX3M7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9KU0ds
b2JhbE9iamVjdEF1ZGl0QWdlbnQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
YWdlbnRzL0pTR2xvYmFsT2JqZWN0QXVkaXRBZ2VudC5oCmluZGV4IDdkNDY3MGQwNGRjN2ZkMzMw
ODNhMTUwNjFkMzc3NjViMWE2YzNlZTYuLjU4NGQwNTAyNjQ1ODliNDgwNWM2MWI0YzRkYmEzODE5
OWE2ZmVkZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdl
bnRzL0pTR2xvYmFsT2JqZWN0QXVkaXRBZ2VudC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3IvYWdlbnRzL0pTR2xvYmFsT2JqZWN0QXVkaXRBZ2VudC5oCkBAIC0zOCwxMCAr
MzgsMTAgQEAgY2xhc3MgSlNHbG9iYWxPYmplY3RBdWRpdEFnZW50IGZpbmFsIDogcHVibGljIElu
c3BlY3RvckF1ZGl0QWdlbnQgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGlj
OgogICAgIEpTR2xvYmFsT2JqZWN0QXVkaXRBZ2VudChKU0FnZW50Q29udGV4dCYpOwotICAgIH5K
U0dsb2JhbE9iamVjdEF1ZGl0QWdlbnQoKSBmaW5hbDsKKyAgICB+SlNHbG9iYWxPYmplY3RBdWRp
dEFnZW50KCk7CiAKIHByaXZhdGU6Ci0gICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHRG
b3JFdmFsKEVycm9yU3RyaW5nJiwgY29uc3QgaW50KiBleGVjdXRpb25Db250ZXh0SWQpIGZpbmFs
OworICAgIEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0Rm9yRXZhbChQcm90b2NvbDo6RXJy
b3JTdHJpbmcmLCBPcHRpb25hbDxQcm90b2NvbDo6UnVudGltZTo6RXhlY3V0aW9uQ29udGV4dElk
PiYmKTsKIAogICAgIEpTQzo6SlNHbG9iYWxPYmplY3QmIG1fZ2xvYmFsT2JqZWN0OwogfTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0pTR2xvYmFs
T2JqZWN0RGVidWdnZXJBZ2VudC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L2FnZW50cy9KU0dsb2JhbE9iamVjdERlYnVnZ2VyQWdlbnQuY3BwCmluZGV4IDI1NTFlN2E0MjM5
Mzk5NWQ2YTNlZWE5Y2U0OTE3NDlhMzg3ODkxODkuLjNiNzAyODc4YTFjYTUxNjI0NDA5OTlmNGU2
NGI1M2ZjMzRmOTUzMmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3IvYWdlbnRzL0pTR2xvYmFsT2JqZWN0RGVidWdnZXJBZ2VudC5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSlNHbG9iYWxPYmplY3REZWJ1Z2dlckFnZW50
LmNwcApAQCAtNDQsNyArNDQsNyBAQCBKU0dsb2JhbE9iamVjdERlYnVnZ2VyQWdlbnQ6OkpTR2xv
YmFsT2JqZWN0RGVidWdnZXJBZ2VudChKU0FnZW50Q29udGV4dCYgY29udGV4dAogCiBKU0dsb2Jh
bE9iamVjdERlYnVnZ2VyQWdlbnQ6On5KU0dsb2JhbE9iamVjdERlYnVnZ2VyQWdlbnQoKSA9IGRl
ZmF1bHQ7CiAKLUluamVjdGVkU2NyaXB0IEpTR2xvYmFsT2JqZWN0RGVidWdnZXJBZ2VudDo6aW5q
ZWN0ZWRTY3JpcHRGb3JFdmFsKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgaW50KiBl
eGVjdXRpb25Db250ZXh0SWQpCitJbmplY3RlZFNjcmlwdCBKU0dsb2JhbE9iamVjdERlYnVnZ2Vy
QWdlbnQ6OmluamVjdGVkU2NyaXB0Rm9yRXZhbChQcm90b2NvbDo6RXJyb3JTdHJpbmcmIGVycm9y
U3RyaW5nLCBPcHRpb25hbDxQcm90b2NvbDo6UnVudGltZTo6RXhlY3V0aW9uQ29udGV4dElkPiYm
IGV4ZWN1dGlvbkNvbnRleHRJZCkKIHsKICAgICBpZiAoZXhlY3V0aW9uQ29udGV4dElkKSB7CiAg
ICAgICAgIGVycm9yU3RyaW5nID0gImV4ZWN1dGlvbkNvbnRleHRJZCBpcyBub3Qgc3VwcG9ydGVk
IGZvciBKU0NvbnRleHRzIGFzIHRoZXJlIGlzIG9ubHkgb25lIGV4ZWN1dGlvbiBjb250ZXh0Il9z
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSlNH
bG9iYWxPYmplY3REZWJ1Z2dlckFnZW50LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL2FnZW50cy9KU0dsb2JhbE9iamVjdERlYnVnZ2VyQWdlbnQuaAppbmRleCA2Zjc5Mjc4ZDUz
MzE3MWUxZmRkMGFlZmU5ZGQyOWIzM2JmZDFmZTk1Li4xMDBmYjIzZTMxNWRmMDQ3ZjlmODU2Y2Nj
OWE1YTZmODBlODNkNzc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL2FnZW50cy9KU0dsb2JhbE9iamVjdERlYnVnZ2VyQWdlbnQuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9KU0dsb2JhbE9iamVjdERlYnVnZ2VyQWdlbnQu
aApAQCAtMzYsMTggKzM2LDE4IEBAIGNsYXNzIEpTR2xvYmFsT2JqZWN0RGVidWdnZXJBZ2VudCBm
aW5hbCA6IHB1YmxpYyBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50IHsKICAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBKU0dsb2JhbE9iamVjdERlYnVnZ2VyQWdlbnQoSlNB
Z2VudENvbnRleHQmLCBJbnNwZWN0b3JDb25zb2xlQWdlbnQqKTsKLSAgICB+SlNHbG9iYWxPYmpl
Y3REZWJ1Z2dlckFnZW50KCkgZmluYWw7CisgICAgfkpTR2xvYmFsT2JqZWN0RGVidWdnZXJBZ2Vu
dCgpOwogCiAgICAgLy8gSlNDOjpEZWJ1Z2dlcjo6T2JzZXJ2ZXIKLSAgICB2b2lkIGJyZWFrcG9p
bnRBY3Rpb25Mb2coSlNDOjpKU0dsb2JhbE9iamVjdCosIGNvbnN0IFN0cmluZyYgZGF0YSkgZmlu
YWw7CisgICAgdm9pZCBicmVha3BvaW50QWN0aW9uTG9nKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBj
b25zdCBTdHJpbmcmIGRhdGEpOwogCiBwcml2YXRlOgotICAgIEluamVjdGVkU2NyaXB0IGluamVj
dGVkU2NyaXB0Rm9yRXZhbChFcnJvclN0cmluZyYsIGNvbnN0IGludCogZXhlY3V0aW9uQ29udGV4
dElkKSBmaW5hbDsKKyAgICBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdEZvckV2YWwoUHJv
dG9jb2w6OkVycm9yU3RyaW5nJiwgT3B0aW9uYWw8UHJvdG9jb2w6OlJ1bnRpbWU6OkV4ZWN1dGlv
bkNvbnRleHRJZD4mJik7CiAKICAgICAvLyBOT1RFOiBKYXZhU2NyaXB0IGluc3BlY3RvciBkb2Vz
IG5vdCB5ZXQgbmVlZCB0byBtdXRlIGEgY29uc29sZSBiZWNhdXNlIG5vIG1lc3NhZ2VzCiAgICAg
Ly8gYXJlIHNlbnQgdG8gdGhlIGNvbnNvbGUgb3V0c2lkZSBvZiB0aGUgQVBJIGJvdW5kYXJ5IG9y
IGNvbnNvbGUgb2JqZWN0LgotICAgIHZvaWQgbXV0ZUNvbnNvbGUoKSBmaW5hbCB7IH0KLSAgICB2
b2lkIHVubXV0ZUNvbnNvbGUoKSBmaW5hbCB7IH0KKyAgICB2b2lkIG11dGVDb25zb2xlKCkgeyB9
CisgICAgdm9pZCB1bm11dGVDb25zb2xlKCkgeyB9CiAKICAgICBJbnNwZWN0b3JDb25zb2xlQWdl
bnQqIG1fY29uc29sZUFnZW50IHsgbnVsbHB0ciB9OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0pTR2xvYmFsT2JqZWN0UnVudGltZUFnZW50
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0pTR2xvYmFsT2Jq
ZWN0UnVudGltZUFnZW50LmNwcAppbmRleCBjODY2OWVlMGFhNWI4Y2E4NGU1ZDI5NDM3ZjM0NDQ3
MWMxZjlhMDYwLi5lMjU0NDg3NDhmMTRlNTBhMmZjNWNkZTc2YjA2ODkwMmIwMzgzYjFlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9KU0dsb2JhbE9i
amVjdFJ1bnRpbWVBZ2VudC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9hZ2VudHMvSlNHbG9iYWxPYmplY3RSdW50aW1lQWdlbnQuY3BwCkBAIC00Myw5ICs0MywxMiBA
QCBKU0dsb2JhbE9iamVjdFJ1bnRpbWVBZ2VudDo6SlNHbG9iYWxPYmplY3RSdW50aW1lQWdlbnQo
SlNBZ2VudENvbnRleHQmIGNvbnRleHQpCiAKIEpTR2xvYmFsT2JqZWN0UnVudGltZUFnZW50Ojp+
SlNHbG9iYWxPYmplY3RSdW50aW1lQWdlbnQoKSA9IGRlZmF1bHQ7CiAKLUluamVjdGVkU2NyaXB0
IEpTR2xvYmFsT2JqZWN0UnVudGltZUFnZW50OjppbmplY3RlZFNjcmlwdEZvckV2YWwoRXJyb3JT
dHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBpbnQqIGV4ZWN1dGlvbkNvbnRleHRJZCkKK0luamVj
dGVkU2NyaXB0IEpTR2xvYmFsT2JqZWN0UnVudGltZUFnZW50OjppbmplY3RlZFNjcmlwdEZvckV2
YWwoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgT3B0aW9uYWw8UHJvdG9jb2w6
OlJ1bnRpbWU6OkV4ZWN1dGlvbkNvbnRleHRJZD4mJiBleGVjdXRpb25Db250ZXh0SWQpCiB7Ci0g
ICAgQVNTRVJUX1VOVVNFRChleGVjdXRpb25Db250ZXh0SWQsICFleGVjdXRpb25Db250ZXh0SWQp
OworICAgIGlmIChleGVjdXRpb25Db250ZXh0SWQpIHsKKyAgICAgICAgZXJyb3JTdHJpbmcgPSAi
ZXhlY3V0aW9uQ29udGV4dElkIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIEpTQ29udGV4dHMgYXMgdGhl
cmUgaXMgb25seSBvbmUgZXhlY3V0aW9uIGNvbnRleHQiX3M7CisgICAgICAgIHJldHVybiBJbmpl
Y3RlZFNjcmlwdCgpOworICAgIH0KIAogICAgIEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0
ID0gaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKCkuaW5qZWN0ZWRTY3JpcHRGb3IoJm1fZ2xvYmFsT2Jq
ZWN0KTsKICAgICBpZiAoaW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSlNHbG9iYWxPYmplY3RSdW50
aW1lQWdlbnQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0pTR2xv
YmFsT2JqZWN0UnVudGltZUFnZW50LmgKaW5kZXggNmYwY2U5MDU5ZDcyMzM4Mzc4YjFkNDdhNzFh
NzI1YzM5MmNkMjc3YS4uYmZlYmRhOTJhMDhhOTFkMzhjZTJjNTE3NTY3OTY3MzFkNTlhMmM5YyAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSlNHbG9i
YWxPYmplY3RSdW50aW1lQWdlbnQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL2FnZW50cy9KU0dsb2JhbE9iamVjdFJ1bnRpbWVBZ2VudC5oCkBAIC0zOSwxNSArMzksMTUg
QEAgY2xhc3MgSlNHbG9iYWxPYmplY3RSdW50aW1lQWdlbnQgZmluYWwgOiBwdWJsaWMgSW5zcGVj
dG9yUnVudGltZUFnZW50IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoK
ICAgICBKU0dsb2JhbE9iamVjdFJ1bnRpbWVBZ2VudChKU0FnZW50Q29udGV4dCYpOwotICAgIH5K
U0dsb2JhbE9iamVjdFJ1bnRpbWVBZ2VudCgpIGZpbmFsOworICAgIH5KU0dsb2JhbE9iamVjdFJ1
bnRpbWVBZ2VudCgpOwogCiBwcml2YXRlOgotICAgIEluamVjdGVkU2NyaXB0IGluamVjdGVkU2Ny
aXB0Rm9yRXZhbChFcnJvclN0cmluZyYsIGNvbnN0IGludCogZXhlY3V0aW9uQ29udGV4dElkKSBm
aW5hbDsKKyAgICBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdEZvckV2YWwoUHJvdG9jb2w6
OkVycm9yU3RyaW5nJiwgT3B0aW9uYWw8UHJvdG9jb2w6OlJ1bnRpbWU6OkV4ZWN1dGlvbkNvbnRl
eHRJZD4mJik7CiAKICAgICAvLyBOT1RFOiBKYXZhU2NyaXB0IGluc3BlY3RvciBkb2VzIG5vdCB5
ZXQgbmVlZCB0byBtdXRlIGEgY29uc29sZSBiZWNhdXNlIG5vIG1lc3NhZ2VzCiAgICAgLy8gYXJl
IHNlbnQgdG8gdGhlIGNvbnNvbGUgb3V0c2lkZSBvZiB0aGUgQVBJIGJvdW5kYXJ5IG9yIGNvbnNv
bGUgb2JqZWN0LgotICAgIHZvaWQgbXV0ZUNvbnNvbGUoKSBmaW5hbCB7IH0KLSAgICB2b2lkIHVu
bXV0ZUNvbnNvbGUoKSBmaW5hbCB7IH0KKyAgICB2b2lkIG11dGVDb25zb2xlKCkgeyB9CisgICAg
dm9pZCB1bm11dGVDb25zb2xlKCkgeyB9CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UnVudGltZUZy
b250ZW5kRGlzcGF0Y2hlcj4gbV9mcm9udGVuZERpc3BhdGNoZXI7CiAgICAgUmVmUHRyPFJ1bnRp
bWVCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvUGFnZS5qc29uIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9QYWdlLmpzb24KaW5kZXggM2I4ZmEx
OGJkN2U4ZDk1ZDdlOGY5NWI0NDJhZmM2M2U1NTBjZTYzYS4uZmRlNGY2OTY0ZDQwZThhNTY1MTE2
YmUyYmM2OTJhNDUxYzJkYTEwNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9wcm90b2NvbC9QYWdlLmpzb24KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9wcm90b2NvbC9QYWdlLmpzb24KQEAgLTI2Nyw3ICsyNjcsNyBAQAogICAgICAgICAg
ICAgImNvbmRpdGlvbiI6ICIoZGVmaW5lZChFTkFCTEVfREFSS19NT0RFX0NTUykgJiYgRU5BQkxF
X0RBUktfTU9ERV9DU1MpIHx8IChkZWZpbmVkKEhBVkVfT1NfREFSS19NT0RFX1NVUFBPUlQpICYm
IEhBVkVfT1NfREFSS19NT0RFX1NVUFBPUlQpIiwKICAgICAgICAgICAgICJ0YXJnZXRUeXBlcyI6
IFsicGFnZSJdLAogICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCi0gICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJhcHBlYXJhbmNlIiwgIiRyZWYiOiAiQXBwZWFyYW5jZSIsICJkZXNjcmlwdGlv
biI6ICJBcHBlYXJhbmNlIG5hbWUgdG8gZm9yY2UuIEVtcHR5IHN0cmluZyBkaXNhYmxlcyB0aGUg
b3ZlcnJpZGUuIiB9CisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJhcHBlYXJhbmNlIiwgIiRy
ZWYiOiAiQXBwZWFyYW5jZSIsICJvcHRpb25hbCI6IHRydWUgfQogICAgICAgICAgICAgXQogICAg
ICAgICB9LAogICAgICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3JlbW90ZS9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yQ29ubmVjdGlvbkNsaWVudC5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3JlbW90ZS9zb2NrZXQvUmVtb3RlSW5z
cGVjdG9yQ29ubmVjdGlvbkNsaWVudC5jcHAKaW5kZXggMDY1MmUxMjcwOGJmODYyMzBiZTQ2Mjlm
ZTY1NzI1YmJiYzM1YjY3MC4uMTEwMDAwNDczZGNmY2M0MzY0NzY4NDgxN2Q5NTM4YzcxNWM3Mjg1
OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9yZW1vdGUvc29j
a2V0L1JlbW90ZUluc3BlY3RvckNvbm5lY3Rpb25DbGllbnQuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3IvcmVtb3RlL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JDb25uZWN0
aW9uQ2xpZW50LmNwcApAQCAtOTIsMzIgKzkyLDI0IEBAIE9wdGlvbmFsPFJlbW90ZUluc3BlY3Rv
ckNvbm5lY3Rpb25DbGllbnQ6OkV2ZW50PiBSZW1vdGVJbnNwZWN0b3JDb25uZWN0aW9uQ2xpZW50
CiAKICAgICBTdHJpbmcganNvbkRhdGEgPSBTdHJpbmc6OmZyb21VVEY4KGRhdGEpOwogCi0gICAg
UmVmUHRyPEpTT046OlZhbHVlPiBtZXNzYWdlVmFsdWU7Ci0gICAgaWYgKCFKU09OOjpWYWx1ZTo6
cGFyc2VKU09OKGpzb25EYXRhLCBtZXNzYWdlVmFsdWUpKQorICAgIGF1dG8gbWVzc2FnZVZhbHVl
ID0gSlNPTjo6VmFsdWU6OnBhcnNlSlNPTihqc29uRGF0YSk7CisgICAgaWYgKCFtZXNzYWdlVmFs
dWUpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiBtZXNzYWdlT2JqZWN0OwotICAgIGlmICghbWVzc2FnZVZhbHVlLT5hc09iamVjdChtZXNz
YWdlT2JqZWN0KSkKKyAgICBhdXRvIG1lc3NhZ2VPYmplY3QgPSBtZXNzYWdlVmFsdWUtPmFzT2Jq
ZWN0KCk7CisgICAgaWYgKCFtZXNzYWdlT2JqZWN0KQogICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwogCiAgICAgRXZlbnQgZXZlbnQ7Ci0gICAgaWYgKCFtZXNzYWdlT2JqZWN0LT5nZXRTdHJp
bmcoImV2ZW50Il9zLCBldmVudC5tZXRob2ROYW1lKSkKKworICAgIGV2ZW50Lm1ldGhvZE5hbWUg
PSBtZXNzYWdlT2JqZWN0LT5nZXRTdHJpbmcoImV2ZW50Il9zKTsKKyAgICBpZiAoIWV2ZW50Lm1l
dGhvZE5hbWUpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICBldmVudC5jbGll
bnRJRCA9IGNsaWVudElEOwotCi0gICAgQ29ubmVjdGlvbklEIGNvbm5lY3Rpb25JRDsKLSAgICBp
ZiAobWVzc2FnZU9iamVjdC0+Z2V0SW50ZWdlcigiY29ubmVjdGlvbklEIl9zLCBjb25uZWN0aW9u
SUQpKQotICAgICAgICBldmVudC5jb25uZWN0aW9uSUQgPSBjb25uZWN0aW9uSUQ7Ci0KLSAgICBU
YXJnZXRJRCB0YXJnZXRJRDsKLSAgICBpZiAobWVzc2FnZU9iamVjdC0+Z2V0SW50ZWdlcigidGFy
Z2V0SUQiX3MsIHRhcmdldElEKSkKLSAgICAgICAgZXZlbnQudGFyZ2V0SUQgPSB0YXJnZXRJRDsK
LQotICAgIFN0cmluZyBtZXNzYWdlOwotICAgIGlmIChtZXNzYWdlT2JqZWN0LT5nZXRTdHJpbmco
Im1lc3NhZ2UiX3MsIG1lc3NhZ2UpKQotICAgICAgICBldmVudC5tZXNzYWdlID0gbWVzc2FnZTsK
LQorICAgIGV2ZW50LmNvbm5lY3Rpb25JRCA9IG1lc3NhZ2VPYmplY3QtPmdldEludGVnZXIoImNv
bm5lY3Rpb25JRCJfcyk7CisgICAgZXZlbnQudGFyZ2V0SUQgPSBtZXNzYWdlT2JqZWN0LT5nZXRJ
bnRlZ2VyKCJ0YXJnZXRJRCJfcyk7CisgICAgZXZlbnQubWVzc2FnZSA9IG1lc3NhZ2VPYmplY3Qt
PmdldFN0cmluZygibWVzc2FnZSJfcyk7CiAgICAgcmV0dXJuIGV2ZW50OwogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9jcHBf
Z2VuZXJhdG9yLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2Nv
ZGVnZW4vY3BwX2dlbmVyYXRvci5weQppbmRleCBmNzMzOGY2ZGQzZjE4MWU4OTVlMTllZWM2NmNh
MjFkNTljYmJkYWZhLi40NmI5MDY1N2MzOWU0ZDI1MDNiN2M3MWQyYzRjZGQzNzk3ODVjN2NjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdl
bi9jcHBfZ2VuZXJhdG9yLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9jb2RlZ2VuL2NwcF9nZW5lcmF0b3IucHkKQEAgLTU1LDI3OSArNTUsMzI5IEBAIGNs
YXNzIENwcEdlbmVyYXRvcihHZW5lcmF0b3IpOgogICAgICAgICByZXR1cm4gc2VsZi5tb2RlbCgp
LmZyYW1ld29yay5zZXR0aW5nKCdjcHBfcHJvdG9jb2xfZ3JvdXAnLCAnJykKIAogICAgIGRlZiBo
ZWxwZXJzX25hbWVzcGFjZShzZWxmKToKLSAgICAgICAgcmV0dXJuICclc0hlbHBlcnMnICUgc2Vs
Zi5wcm90b2NvbF9uYW1lKCkKKyAgICAgICAgbmFtZXNwYWNlID0gJ0hlbHBlcnMnCisgICAgICAg
IGlmIHNlbGYucHJvdG9jb2xfbmFtZSgpICE9ICdJbnNwZWN0b3InOgorICAgICAgICAgICAgbmFt
ZXNwYWNlID0gc2VsZi5wcm90b2NvbF9uYW1lKCkgKyBuYW1lc3BhY2UKKyAgICAgICAgcmV0dXJu
IG5hbWVzcGFjZQogCiAgICAgIyBNaXNjZWxsYW5lb3VzIHRleHQgbWFuaXB1bGF0aW9uIHJvdXRp
bmVzLgogICAgIEBzdGF0aWNtZXRob2QKICAgICBkZWYgY3BwX2dldHRlcl9tZXRob2RfZm9yX3R5
cGUoX3R5cGUpOgotICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBPYmplY3RUeXBlKToKLSAg
ICAgICAgICAgIHJldHVybiAnZ2V0T2JqZWN0JwotICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBl
LCBBcnJheVR5cGUpOgotICAgICAgICAgICAgcmV0dXJuICdnZXRBcnJheScKLSAgICAgICAgaWYg
aXNpbnN0YW5jZShfdHlwZSwgUHJpbWl0aXZlVHlwZSk6Ci0gICAgICAgICAgICBpZiBfdHlwZS5y
YXdfbmFtZSgpID09ICdpbnRlZ2VyJzoKLSAgICAgICAgICAgICAgICByZXR1cm4gJ2dldEludGVn
ZXInCi0gICAgICAgICAgICBlbGlmIF90eXBlLnJhd19uYW1lKCkgPT0gJ251bWJlcic6Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuICdnZXREb3VibGUnCi0gICAgICAgICAgICBlbGlmIF90eXBlLnJh
d19uYW1lKCkgPT0gJ2FueSc6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICdnZXRWYWx1ZScKLSAg
ICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICdnZXQnICsgdWNmaXJzdChf
dHlwZS5yYXdfbmFtZSgpKQogICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBBbGlhc2VkVHlw
ZSk6Ci0gICAgICAgICAgICByZXR1cm4gQ3BwR2VuZXJhdG9yLmNwcF9nZXR0ZXJfbWV0aG9kX2Zv
cl90eXBlKF90eXBlLmFsaWFzZWRfdHlwZSkKKyAgICAgICAgICAgIF90eXBlID0gX3R5cGUuYWxp
YXNlZF90eXBlCisgICAgICAgICAgICAjIGZhbGx0aHJvdWdoCisKICAgICAgICAgaWYgaXNpbnN0
YW5jZShfdHlwZSwgRW51bVR5cGUpOgotICAgICAgICAgICAgcmV0dXJuIENwcEdlbmVyYXRvci5j
cHBfZ2V0dGVyX21ldGhvZF9mb3JfdHlwZShfdHlwZS5wcmltaXRpdmVfdHlwZSkKKyAgICAgICAg
ICAgIF90eXBlID0gX3R5cGUucHJpbWl0aXZlX3R5cGUKKyAgICAgICAgICAgICMgZmFsbHRocm91
Z2gKKworICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBPYmplY3RUeXBlKSBvciBfdHlwZS5x
dWFsaWZpZWRfbmFtZSgpIGluIFsnb2JqZWN0J106CisgICAgICAgICAgICByZXR1cm4gJ2dldE9i
amVjdCcKKworICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBBcnJheVR5cGUpIG9yIF90eXBl
LnF1YWxpZmllZF9uYW1lKCkgaW4gWydhcnJheSddOgorICAgICAgICAgICAgcmV0dXJuICdnZXRB
cnJheScKKworICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBQcmltaXRpdmVUeXBlKToKKyAg
ICAgICAgICAgIGlmIF90eXBlLnJhd19uYW1lKCkgPT0gJ251bWJlcic6CisgICAgICAgICAgICAg
ICAgcmV0dXJuICdnZXREb3VibGUnCisgICAgICAgICAgICBpZiBfdHlwZS5yYXdfbmFtZSgpID09
ICdhbnknOgorICAgICAgICAgICAgICAgIHJldHVybiAnZ2V0VmFsdWUnCisgICAgICAgICAgICBy
ZXR1cm4gJ2dldCcgKyB1Y2ZpcnN0KF90eXBlLnJhd19uYW1lKCkpCisKKyAgICAgICAgcmFpc2Ug
VmFsdWVFcnJvcigidW5rbm93biB0eXBlIikKIAogICAgIEBzdGF0aWNtZXRob2QKICAgICBkZWYg
Y3BwX3NldHRlcl9tZXRob2RfZm9yX3R5cGUoX3R5cGUpOgotICAgICAgICBpZiBpc2luc3RhbmNl
KF90eXBlLCBPYmplY3RUeXBlKToKLSAgICAgICAgICAgIHJldHVybiAnc2V0T2JqZWN0JwotICAg
ICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBBcnJheVR5cGUpOgotICAgICAgICAgICAgcmV0dXJu
ICdzZXRBcnJheScKLSAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgUHJpbWl0aXZlVHlwZSk6
Ci0gICAgICAgICAgICBpZiBfdHlwZS5yYXdfbmFtZSgpID09ICdpbnRlZ2VyJzoKLSAgICAgICAg
ICAgICAgICByZXR1cm4gJ3NldEludGVnZXInCi0gICAgICAgICAgICBlbGlmIF90eXBlLnJhd19u
YW1lKCkgPT0gJ251bWJlcic6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICdzZXREb3VibGUnCi0g
ICAgICAgICAgICBlbGlmIF90eXBlLnJhd19uYW1lKCkgPT0gJ2FueSc6Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuICdzZXRWYWx1ZScKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAg
cmV0dXJuICdzZXQnICsgdWNmaXJzdChfdHlwZS5yYXdfbmFtZSgpKQogICAgICAgICBpZiBpc2lu
c3RhbmNlKF90eXBlLCBBbGlhc2VkVHlwZSk6Ci0gICAgICAgICAgICByZXR1cm4gQ3BwR2VuZXJh
dG9yLmNwcF9zZXR0ZXJfbWV0aG9kX2Zvcl90eXBlKF90eXBlLmFsaWFzZWRfdHlwZSkKKyAgICAg
ICAgICAgIF90eXBlID0gX3R5cGUuYWxpYXNlZF90eXBlCisgICAgICAgICAgICAjIGZhbGx0aHJv
dWdoCisKICAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgRW51bVR5cGUpOgotICAgICAgICAg
ICAgcmV0dXJuIENwcEdlbmVyYXRvci5jcHBfc2V0dGVyX21ldGhvZF9mb3JfdHlwZShfdHlwZS5w
cmltaXRpdmVfdHlwZSkKKyAgICAgICAgICAgIF90eXBlID0gX3R5cGUucHJpbWl0aXZlX3R5cGUK
KyAgICAgICAgICAgICMgZmFsbHRocm91Z2gKKworICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBl
LCBPYmplY3RUeXBlKSBvciBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpIGluIFsnb2JqZWN0J106Cisg
ICAgICAgICAgICByZXR1cm4gJ3NldE9iamVjdCcKKworICAgICAgICBpZiBpc2luc3RhbmNlKF90
eXBlLCBBcnJheVR5cGUpIG9yIF90eXBlLnF1YWxpZmllZF9uYW1lKCkgaW4gWydhcnJheSddOgor
ICAgICAgICAgICAgcmV0dXJuICdzZXRBcnJheScKKworICAgICAgICBpZiBpc2luc3RhbmNlKF90
eXBlLCBQcmltaXRpdmVUeXBlKToKKyAgICAgICAgICAgIGlmIF90eXBlLnJhd19uYW1lKCkgPT0g
J251bWJlcic6CisgICAgICAgICAgICAgICAgcmV0dXJuICdzZXREb3VibGUnCisgICAgICAgICAg
ICBpZiBfdHlwZS5yYXdfbmFtZSgpID09ICdhbnknOgorICAgICAgICAgICAgICAgIHJldHVybiAn
c2V0VmFsdWUnCisgICAgICAgICAgICByZXR1cm4gJ3NldCcgKyB1Y2ZpcnN0KF90eXBlLnJhd19u
YW1lKCkpCisKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigidW5rbm93biB0eXBlIikKIAogICAg
ICMgR2VuZXJhdGUgdHlwZSByZXByZXNlbnRhdGlvbnMgZm9yIHZhcmlvdXMgc2l0dWF0aW9ucy4K
ICAgICBAc3RhdGljbWV0aG9kCiAgICAgZGVmIGNwcF9wcm90b2NvbF90eXBlX2Zvcl90eXBlKF90
eXBlKToKICAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgQWxpYXNlZFR5cGUpOgotICAgICAg
ICAgICAgX3R5cGUgPSBfdHlwZS5hbGlhc2VkX3R5cGUgICMgRmFsbCB0aHJvdWdoIHRvIGVudW0g
b3IgcHJpbWl0aXZlLgorICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5hbGlhc2VkX3R5cGUKKyAg
ICAgICAgICAgICMgZmFsbHRocm91Z2gKIAotICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBP
YmplY3RUeXBlKSBhbmQgbGVuKF90eXBlLm1lbWJlcnMpID09IDA6Ci0gICAgICAgICAgICByZXR1
cm4gJ0pTT046Ok9iamVjdCcKICAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgQXJyYXlUeXBl
KToKLSAgICAgICAgICAgIGlmIF90eXBlLnJhd19uYW1lKCkgaXMgTm9uZTogICMgT3RoZXJ3aXNl
LCBmYWxsIHRocm91Z2ggYW5kIHVzZSB0eXBlZGVmJ2QgbmFtZS4KKyAgICAgICAgICAgIGlmIF90
eXBlLnJhd19uYW1lKCkgaXMgTm9uZToKICAgICAgICAgICAgICAgICByZXR1cm4gJ0pTT046OkFy
cmF5T2Y8JXM+JyAlIENwcEdlbmVyYXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZShfdHlw
ZS5lbGVtZW50X3R5cGUpCisgICAgICAgICAgICAjIGZhbGx0aHJvdWdoCisKICAgICAgICAgaWYg
aXNpbnN0YW5jZShfdHlwZSwgKE9iamVjdFR5cGUsIEVudW1UeXBlLCBBcnJheVR5cGUpKToKLSAg
ICAgICAgICAgIHJldHVybiAnSW5zcGVjdG9yOjpQcm90b2NvbDo6JXM6OiVzJyAlIChfdHlwZS50
eXBlX2RvbWFpbigpLmRvbWFpbl9uYW1lLCBfdHlwZS5yYXdfbmFtZSgpKQorICAgICAgICAgICAg
cmV0dXJuICdQcm90b2NvbDo6JXM6OiVzJyAlIChfdHlwZS50eXBlX2RvbWFpbigpLmRvbWFpbl9u
YW1lLCBfdHlwZS5yYXdfbmFtZSgpKQorCiAgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIFBy
aW1pdGl2ZVR5cGUpOgogICAgICAgICAgICAgcmV0dXJuIENwcEdlbmVyYXRvci5jcHBfbmFtZV9m
b3JfcHJpbWl0aXZlX3R5cGUoX3R5cGUpCiAKLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIGNw
cF9wcm90b2NvbF90eXBlX2Zvcl90eXBlX21lbWJlcih0eXBlX21lbWJlciwgb2JqZWN0X2RlY2xh
cmF0aW9uKToKLSAgICAgICAgaWYgaXNpbnN0YW5jZSh0eXBlX21lbWJlci50eXBlLCBFbnVtVHlw
ZSkgYW5kIHR5cGVfbWVtYmVyLnR5cGUuaXNfYW5vbnltb3VzOgotICAgICAgICAgICAgcmV0dXJu
ICc6Oicuam9pbihbQ3BwR2VuZXJhdG9yLmNwcF9wcm90b2NvbF90eXBlX2Zvcl90eXBlKG9iamVj
dF9kZWNsYXJhdGlvbi50eXBlKSwgdWNmaXJzdCh0eXBlX21lbWJlci5tZW1iZXJfbmFtZSldKQot
ICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuIENwcEdlbmVyYXRvci5jcHBfcHJvdG9j
b2xfdHlwZV9mb3JfdHlwZSh0eXBlX21lbWJlci50eXBlKQorICAgICAgICByYWlzZSBWYWx1ZUVy
cm9yKCJ1bmtub3duIHR5cGUiKQogCiAgICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBjcHBfdHlw
ZV9mb3JfdW5jaGVja2VkX2Zvcm1hbF9pbl9wYXJhbWV0ZXIocGFyYW1ldGVyKToKLSAgICAgICAg
X3R5cGUgPSBwYXJhbWV0ZXIudHlwZQorICAgIGRlZiBjcHBfdHlwZV9mb3JfdHlwZV9tZW1iZXJf
YXJndW1lbnQoX3R5cGUsIG5hbWUpOgogICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBBbGlh
c2VkVHlwZSk6Ci0gICAgICAgICAgICBfdHlwZSA9IF90eXBlLmFsaWFzZWRfdHlwZSAgIyBGYWxs
IHRocm91Z2ggdG8gZW51bSBvciBwcmltaXRpdmUuCisgICAgICAgICAgICBfdHlwZSA9IF90eXBl
LmFsaWFzZWRfdHlwZQorICAgICAgICAgICAgIyBmYWxsdGhyb3VnaAogCi0gICAgICAgIGlmIGlz
aW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKToKLSAgICAgICAgICAgIF90eXBlID0gX3R5cGUucHJp
bWl0aXZlX3R5cGUgICMgRmFsbCB0aHJvdWdoIHRvIHByaW1pdGl2ZS4KLQotICAgICAgICAjIFRo
aXMgaGFuZGxlcyB0aGUgJ2FueScgdHlwZSBhbmQgb2JqZWN0cyB3aXRoIGRlZmluZWQgcHJvcGVy
dGllcy4KLSAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgT2JqZWN0VHlwZSkgb3IgX3R5cGUu
cXVhbGlmaWVkX25hbWUoKSA9PSAnb2JqZWN0JzoKLSAgICAgICAgICAgIGNwcF9uYW1lID0gJ0pT
T046Ok9iamVjdCcKLSAgICAgICAgICAgIGlmIHBhcmFtZXRlci5pc19vcHRpb25hbDoKLSAgICAg
ICAgICAgICAgICByZXR1cm4gJ2NvbnN0ICVzKicgJSBjcHBfbmFtZQotICAgICAgICAgICAgZWxz
ZToKLSAgICAgICAgICAgICAgICByZXR1cm4gJ2NvbnN0ICVzJicgJSBjcHBfbmFtZQotICAgICAg
ICBpZiBpc2luc3RhbmNlKF90eXBlLCBBcnJheVR5cGUpOgotICAgICAgICAgICAgY3BwX25hbWUg
PSAnSlNPTjo6QXJyYXknCi0gICAgICAgICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuICdjb25zdCAlcyonICUgY3BwX25hbWUKLSAgICAgICAgICAg
IGVsc2U6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICdjb25zdCAlcyYnICUgY3BwX25hbWUKLSAg
ICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgUHJpbWl0aXZlVHlwZSk6Ci0gICAgICAgICAgICBj
cHBfbmFtZSA9IENwcEdlbmVyYXRvci5jcHBfbmFtZV9mb3JfcHJpbWl0aXZlX3R5cGUoX3R5cGUp
Ci0gICAgICAgICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6Ci0gICAgICAgICAgICAgICAg
cmV0dXJuICdjb25zdCAlcyonICUgY3BwX25hbWUKLSAgICAgICAgICAgIGVsaWYgX3R5cGUucmF3
X25hbWUoKSBpbiBbJ3N0cmluZyddOgotICAgICAgICAgICAgICAgIHJldHVybiAnY29uc3QgJXMm
JyAlIGNwcF9uYW1lCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJldHVybiBj
cHBfbmFtZQotCi0gICAgICAgIHJldHVybiAidW5rbm93bl91bmNoZWNrZWRfZm9ybWFsX2luX3Bh
cmFtZXRlcl90eXBlIgotCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBjcHBfdHlwZV9mb3Jf
Y2hlY2tlZF9mb3JtYWxfZXZlbnRfcGFyYW1ldGVyKHBhcmFtZXRlcik6Ci0gICAgICAgIHJldHVy
biBDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX3R5cGVfd2l0aF9uYW1lKHBhcmFtZXRlci50eXBl
LCBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUsIHBhcmFtZXRlci5pc19vcHRpb25hbCkKLQotICAg
IEBzdGF0aWNtZXRob2QKLSAgICBkZWYgY3BwX3R5cGVfZm9yX3R5cGVfbWVtYmVyKG1lbWJlcik6
Ci0gICAgICAgIHJldHVybiBDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX3R5cGVfd2l0aF9uYW1l
KG1lbWJlci50eXBlLCBtZW1iZXIubWVtYmVyX25hbWUsIEZhbHNlKQotCi0gICAgQHN0YXRpY21l
dGhvZAotICAgIGRlZiBjcHBfdHlwZV9mb3JfdHlwZV93aXRoX25hbWUoX3R5cGUsIHR5cGVfbmFt
ZSwgaXNfb3B0aW9uYWwpOgogICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCAoQXJyYXlUeXBl
LCBPYmplY3RUeXBlKSk6Ci0gICAgICAgICAgICByZXR1cm4gJ1JlZlB0cjwlcz4nICUgQ3BwR2Vu
ZXJhdG9yLmNwcF9wcm90b2NvbF90eXBlX2Zvcl90eXBlKF90eXBlKQotICAgICAgICBpZiBpc2lu
c3RhbmNlKF90eXBlLCBBbGlhc2VkVHlwZSk6Ci0gICAgICAgICAgICBidWlsZGVyX3R5cGUgPSBD
cHBHZW5lcmF0b3IuY3BwX3Byb3RvY29sX3R5cGVfZm9yX3R5cGUoX3R5cGUpCi0gICAgICAgICAg
ICBpZiBpc19vcHRpb25hbDoKLSAgICAgICAgICAgICAgICByZXR1cm4gJ2NvbnN0ICVzKicgJSBi
dWlsZGVyX3R5cGUKLSAgICAgICAgICAgIGVsaWYgX3R5cGUuYWxpYXNlZF90eXBlLnF1YWxpZmll
ZF9uYW1lKCkgaW4gWydpbnRlZ2VyJywgJ251bWJlciddOgotICAgICAgICAgICAgICAgIHJldHVy
biBDcHBHZW5lcmF0b3IuY3BwX25hbWVfZm9yX3ByaW1pdGl2ZV90eXBlKF90eXBlLmFsaWFzZWRf
dHlwZSkKLSAgICAgICAgICAgIGVsaWYgX3R5cGUuYWxpYXNlZF90eXBlLnF1YWxpZmllZF9uYW1l
KCkgaW4gWydzdHJpbmcnXToKLSAgICAgICAgICAgICAgICByZXR1cm4gJ2NvbnN0ICVzJicgJSBi
dWlsZGVyX3R5cGUKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGJ1
aWxkZXJfdHlwZQotICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBQcmltaXRpdmVUeXBlKToK
LSAgICAgICAgICAgIGNwcF9uYW1lID0gQ3BwR2VuZXJhdG9yLmNwcF9uYW1lX2Zvcl9wcmltaXRp
dmVfdHlwZShfdHlwZSkKLSAgICAgICAgICAgIGlmIF90eXBlLnF1YWxpZmllZF9uYW1lKCkgaW4g
WydvYmplY3QnXToKLSAgICAgICAgICAgICAgICByZXR1cm4gJ1JlZlB0cjxKU09OOjpPYmplY3Q+
JwotICAgICAgICAgICAgZWxpZiBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpIGluIFsnYW55J106Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuICdSZWZQdHI8SlNPTjo6VmFsdWU+JwotICAgICAgICAgICAg
ZWxpZiBpc19vcHRpb25hbDoKLSAgICAgICAgICAgICAgICByZXR1cm4gJ2NvbnN0ICVzKicgJSBj
cHBfbmFtZQotICAgICAgICAgICAgZWxpZiBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpIGluIFsnc3Ry
aW5nJ106Ci0gICAgICAgICAgICAgICAgcmV0dXJuICdjb25zdCAlcyYnICUgY3BwX25hbWUKLSAg
ICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGNwcF9uYW1lCisgICAgICAg
ICAgICByZXR1cm4gJ1JlZjwlcz4mJicgJSBDcHBHZW5lcmF0b3IuY3BwX3Byb3RvY29sX3R5cGVf
Zm9yX3R5cGUoX3R5cGUpCisKKyAgICAgICAgaWYgX3R5cGUucXVhbGlmaWVkX25hbWUoKSA9PSAn
b2JqZWN0JzoKKyAgICAgICAgICAgIHJldHVybiAnUmVmPEpTT046Ok9iamVjdD4mJicKKworICAg
ICAgICBpZiBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpID09ICdhcnJheSc6CisgICAgICAgICAgICBy
ZXR1cm4gJ1JlZjxKU09OOjpBcnJheT4mJicKKworICAgICAgICBpZiBfdHlwZS5xdWFsaWZpZWRf
bmFtZSgpID09ICdhbnknOgorICAgICAgICAgICAgcmV0dXJuICdSZWY8SlNPTjo6VmFsdWU+JiYn
CisKKyAgICAgICAgaWYgX3R5cGUucXVhbGlmaWVkX25hbWUoKSA9PSAnc3RyaW5nJzoKKyAgICAg
ICAgICAgIHJldHVybiAnY29uc3QgJXMmJyAlIENwcEdlbmVyYXRvci5jcHBfbmFtZV9mb3JfcHJp
bWl0aXZlX3R5cGUoX3R5cGUpCisKICAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgRW51bVR5
cGUpOgogICAgICAgICAgICAgaWYgX3R5cGUuaXNfYW5vbnltb3VzOgotICAgICAgICAgICAgICAg
IGVudW1fdHlwZV9uYW1lID0gdWNmaXJzdCh0eXBlX25hbWUpCi0gICAgICAgICAgICBlbHNlOgot
ICAgICAgICAgICAgICAgIGVudW1fdHlwZV9uYW1lID0gJ0luc3BlY3Rvcjo6UHJvdG9jb2w6OiVz
OjolcycgJSAoX3R5cGUudHlwZV9kb21haW4oKS5kb21haW5fbmFtZSwgX3R5cGUucmF3X25hbWUo
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdWNmaXJzdChuYW1lKQorICAgICAgICAgICAgcmV0
dXJuICdQcm90b2NvbDo6JXM6OiVzJyAlIChfdHlwZS50eXBlX2RvbWFpbigpLmRvbWFpbl9uYW1l
LCBfdHlwZS5yYXdfbmFtZSgpKQogCi0gICAgICAgICAgICBpZiBpc19vcHRpb25hbDoKLSAgICAg
ICAgICAgICAgICByZXR1cm4gJyVzKicgJSBlbnVtX3R5cGVfbmFtZQotICAgICAgICAgICAgZWxz
ZToKLSAgICAgICAgICAgICAgICByZXR1cm4gJyVzJyAlIGVudW1fdHlwZV9uYW1lCi0KLSAgICBA
c3RhdGljbWV0aG9kCi0gICAgZGVmIGNwcF90eXBlX2Zvcl9mb3JtYWxfb3V0X3BhcmFtZXRlcihw
YXJhbWV0ZXIpOgotICAgICAgICBfdHlwZSA9IHBhcmFtZXRlci50eXBlCi0KLSAgICAgICAgaWYg
aXNpbnN0YW5jZShfdHlwZSwgQWxpYXNlZFR5cGUpOgotICAgICAgICAgICAgX3R5cGUgPSBfdHlw
ZS5hbGlhc2VkX3R5cGUgICMgRmFsbCB0aHJvdWdoLgotCi0gICAgICAgIGlmIGlzaW5zdGFuY2Uo
X3R5cGUsIChPYmplY3RUeXBlLCBBcnJheVR5cGUpKToKLSAgICAgICAgICAgIHJldHVybiAnUmVm
UHRyPCVzPiYnICUgQ3BwR2VuZXJhdG9yLmNwcF9wcm90b2NvbF90eXBlX2Zvcl90eXBlKF90eXBl
KQogICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBQcmltaXRpdmVUeXBlKToKLSAgICAgICAg
ICAgIGNwcF9uYW1lID0gQ3BwR2VuZXJhdG9yLmNwcF9uYW1lX2Zvcl9wcmltaXRpdmVfdHlwZShf
dHlwZSkKLSAgICAgICAgICAgIGlmIHBhcmFtZXRlci5pc19vcHRpb25hbDoKLSAgICAgICAgICAg
ICAgICByZXR1cm4gIk9wdGlvbmFsPCVzPiYiICUgY3BwX25hbWUKLSAgICAgICAgICAgIGVsc2U6
Ci0gICAgICAgICAgICAgICAgcmV0dXJuICclcyonICUgY3BwX25hbWUKLSAgICAgICAgaWYgaXNp
bnN0YW5jZShfdHlwZSwgRW51bVR5cGUpOgotICAgICAgICAgICAgaWYgX3R5cGUuaXNfYW5vbnlt
b3VzOgotICAgICAgICAgICAgICAgIHJldHVybiAnJXNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6
OiVzKicgJSAoX3R5cGUudHlwZV9kb21haW4oKS5kb21haW5fbmFtZSwgdWNmaXJzdChwYXJhbWV0
ZXIucGFyYW1ldGVyX25hbWUpKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gJ0luc3BlY3Rvcjo6UHJvdG9jb2w6OiVzOjolcyonICUgKF90eXBlLnR5cGVfZG9tYWlu
KCkuZG9tYWluX25hbWUsIF90eXBlLnJhd19uYW1lKCkpCisgICAgICAgICAgICByZXR1cm4gQ3Bw
R2VuZXJhdG9yLmNwcF9uYW1lX2Zvcl9wcmltaXRpdmVfdHlwZShfdHlwZSkKIAotICAgICAgICBy
YWlzZSBWYWx1ZUVycm9yKCJ1bmtub3duIGZvcm1hbCBvdXQgcGFyYW1ldGVyIHR5cGUuIikKLQot
ICAgICMgRklYTUU6IHRoaXMgaXMgb25seSBzbGlnaHRseSBkaWZmZXJlbnQgZnJvbSBvdXQgcGFy
YW1ldGVyczsgdGhleSBjb3VsZCBiZSB1bmlmaWVkLgotICAgIEBzdGF0aWNtZXRob2QKLSAgICBk
ZWYgY3BwX3R5cGVfZm9yX2Zvcm1hbF9hc3luY19wYXJhbWV0ZXIocGFyYW1ldGVyKToKLSAgICAg
ICAgX3R5cGUgPSBwYXJhbWV0ZXIudHlwZQotICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBB
bGlhc2VkVHlwZSk6Ci0gICAgICAgICAgICBfdHlwZSA9IF90eXBlLmFsaWFzZWRfdHlwZSAgIyBG
YWxsIHRocm91Z2guCi0KLSAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgKE9iamVjdFR5cGUs
IEFycmF5VHlwZSkpOgotICAgICAgICAgICAgcmV0dXJuICdSZWZQdHI8JXM+JiYnICUgQ3BwR2Vu
ZXJhdG9yLmNwcF9wcm90b2NvbF90eXBlX2Zvcl90eXBlKF90eXBlKQotICAgICAgICBpZiBpc2lu
c3RhbmNlKF90eXBlLCBQcmltaXRpdmVUeXBlKToKLSAgICAgICAgICAgIGNwcF9uYW1lID0gQ3Bw
R2VuZXJhdG9yLmNwcF9uYW1lX2Zvcl9wcmltaXRpdmVfdHlwZShfdHlwZSkKLSAgICAgICAgICAg
IGlmIHBhcmFtZXRlci5pc19vcHRpb25hbDoKLSAgICAgICAgICAgICAgICByZXR1cm4gIk9wdGlv
bmFsPCVzPiYiICUgY3BwX25hbWUKLSAgICAgICAgICAgIGVsaWYgX3R5cGUucXVhbGlmaWVkX25h
bWUoKSBpbiBbJ2ludGVnZXInLCAnbnVtYmVyJ106Ci0gICAgICAgICAgICAgICAgcmV0dXJuIENw
cEdlbmVyYXRvci5jcHBfbmFtZV9mb3JfcHJpbWl0aXZlX3R5cGUoX3R5cGUpCi0gICAgICAgICAg
ICBlbGlmIF90eXBlLnF1YWxpZmllZF9uYW1lKCkgaW4gWydzdHJpbmcnXToKLSAgICAgICAgICAg
ICAgICByZXR1cm4gJ2NvbnN0ICVzJicgJSBjcHBfbmFtZQotICAgICAgICAgICAgZWxzZToKLSAg
ICAgICAgICAgICAgICByZXR1cm4gY3BwX25hbWUKLSAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlw
ZSwgRW51bVR5cGUpOgotICAgICAgICAgICAgaWYgX3R5cGUuaXNfYW5vbnltb3VzOgotICAgICAg
ICAgICAgICAgIGNwcF9uYW1lID0gJyVzQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjolcycgJSAo
X3R5cGUudHlwZV9kb21haW4oKS5kb21haW5fbmFtZSwgdWNmaXJzdChwYXJhbWV0ZXIucGFyYW1l
dGVyX25hbWUpKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBjcHBfbmFtZSA9
ICdJbnNwZWN0b3I6OlByb3RvY29sOjolczo6JXMnICUgKF90eXBlLnR5cGVfZG9tYWluKCkuZG9t
YWluX25hbWUsIF90eXBlLnJhd19uYW1lKCkpCi0KLSAgICAgICAgICAgIGlmIHBhcmFtZXRlci5p
c19vcHRpb25hbDoKLSAgICAgICAgICAgICAgICByZXR1cm4gIk9wdGlvbmFsPCVzPiIgJSBjcHBf
bmFtZQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByZXR1cm4gY3BwX25hbWUK
LQotICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJVbmtub3duIGZvcm1hbCBhc3luYyBwYXJhbWV0
ZXIgdHlwZS4iKQorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJ1bmtub3duIHR5cGUiKQogCiAg
ICAgIyBJbi1wYXJhbWV0ZXJzIGRvbid0IHVzZSBidWlsZGVyIHR5cGVzLCBiZWNhdXNlIHRoZXkg
Y291bGQgYmUgcGFzc2VkCiAgICAgIyAib3BlbiB0eXBlcyIgdGhhdCBhcmUgbWFudWFsbHkgY29u
c3RydWN0ZWQgb3V0IG9mIEluc3BlY3Rvck9iamVjdHMuCi0KLSAgICAjIEZJWE1FOiBPbmx5IHBh
cmFtZXRlcnMgdGhhdCBhcmUgYWN0dWFsbHkgb3BlbiB0eXBlcyBzaG91bGQgbmVlZCBub24tYnVp
bGRlciBwYXJhbWV0ZXIgdHlwZXMuCiAgICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBjcHBfdHlw
ZV9mb3Jfc3RhY2tfaW5fcGFyYW1ldGVyKHBhcmFtZXRlcik6Ci0gICAgICAgIF90eXBlID0gcGFy
YW1ldGVyLnR5cGUKKyAgICBkZWYgY3BwX3R5cGVfZm9yX2NvbW1hbmRfcGFyYW1ldGVyKF90eXBl
LCBpc19vcHRpb25hbCk6CiAgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEFsaWFzZWRUeXBl
KToKLSAgICAgICAgICAgIF90eXBlID0gX3R5cGUuYWxpYXNlZF90eXBlICAjIEZhbGwgdGhyb3Vn
aC4KKyAgICAgICAgICAgIF90eXBlID0gX3R5cGUuYWxpYXNlZF90eXBlCisgICAgICAgICAgICAj
IGZhbGx0aHJvdWdoCisKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgRW51bVR5cGUpIGFu
ZCBfdHlwZS5pc19hbm9ueW1vdXM6CisgICAgICAgICAgICBfdHlwZSA9IF90eXBlLnByaW1pdGl2
ZV90eXBlCisgICAgICAgICAgICAjIGZhbGx0aHJvdWdoCisKKyAgICAgICAgaWYgaXNpbnN0YW5j
ZShfdHlwZSwgT2JqZWN0VHlwZSkgb3IgX3R5cGUucXVhbGlmaWVkX25hbWUoKSA9PSAnb2JqZWN0
JzoKKyAgICAgICAgICAgIGlmIGlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAgIHJldHVybiAn
UmVmUHRyPEpTT046Ok9iamVjdD4mJicKKyAgICAgICAgICAgIHJldHVybiAnUmVmPEpTT046Ok9i
amVjdD4mJicKKworICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBBcnJheVR5cGUpIG9yIF90
eXBlLnF1YWxpZmllZF9uYW1lKCkgPT0gJ2FycmF5JzoKKyAgICAgICAgICAgIGlmIGlzX29wdGlv
bmFsOgorICAgICAgICAgICAgICAgIHJldHVybiAnUmVmUHRyPEpTT046OkFycmF5PiYmJworICAg
ICAgICAgICAgcmV0dXJuICdSZWY8SlNPTjo6QXJyYXk+JiYnCisKKyAgICAgICAgaWYgX3R5cGUu
cXVhbGlmaWVkX25hbWUoKSA9PSAnYW55JzoKKyAgICAgICAgICAgIGlmIGlzX29wdGlvbmFsOgor
ICAgICAgICAgICAgICAgIHJldHVybiAnUmVmUHRyPEpTT046OlZhbHVlPiYmJworICAgICAgICAg
ICAgcmV0dXJuICdSZWY8SlNPTjo6VmFsdWU+JiYnCisKKyAgICAgICAgaWYgX3R5cGUucXVhbGlm
aWVkX25hbWUoKSA9PSAnc3RyaW5nJzoKKyAgICAgICAgICAgIHJldHVybiAnY29uc3QgJXMmJyAl
IENwcEdlbmVyYXRvci5jcHBfbmFtZV9mb3JfcHJpbWl0aXZlX3R5cGUoX3R5cGUpCiAKICAgICAg
ICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgRW51bVR5cGUpOgotICAgICAgICAgICAgX3R5cGUgPSBf
dHlwZS5wcmltaXRpdmVfdHlwZSAgIyBGYWxsIHRocm91Z2guCi0KLSAgICAgICAgaWYgaXNpbnN0
YW5jZShfdHlwZSwgT2JqZWN0VHlwZSk6Ci0gICAgICAgICAgICByZXR1cm4gIlJlZlB0cjxKU09O
OjpPYmplY3Q+IgotICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBBcnJheVR5cGUpOgotICAg
ICAgICAgICAgcmV0dXJuICJSZWZQdHI8SlNPTjo6QXJyYXk+IgotICAgICAgICBpZiBpc2luc3Rh
bmNlKF90eXBlLCBQcmltaXRpdmVUeXBlKToKKyAgICAgICAgICAgIGNwcF9uYW1lID0gJ1Byb3Rv
Y29sOjolczo6JXMnICUgKF90eXBlLnR5cGVfZG9tYWluKCkuZG9tYWluX25hbWUsIF90eXBlLnJh
d19uYW1lKCkpCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShfdHlwZSwgUHJpbWl0aXZlVHlwZSk6
CiAgICAgICAgICAgICBjcHBfbmFtZSA9IENwcEdlbmVyYXRvci5jcHBfbmFtZV9mb3JfcHJpbWl0
aXZlX3R5cGUoX3R5cGUpCi0gICAgICAgICAgICBpZiBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpIGlu
IFsnYW55JywgJ29iamVjdCddOgotICAgICAgICAgICAgICAgIHJldHVybiAiUmVmUHRyPCVzPiIg
JSBDcHBHZW5lcmF0b3IuY3BwX25hbWVfZm9yX3ByaW1pdGl2ZV90eXBlKF90eXBlKQotICAgICAg
ICAgICAgZWxpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwgYW5kIF90eXBlLnF1YWxpZmllZF9uYW1l
KCkgbm90IGluIFsnYm9vbGVhbicsICdzdHJpbmcnLCAnaW50ZWdlcicsICdudW1iZXInXToKLSAg
ICAgICAgICAgICAgICByZXR1cm4gIk9wdGlvbmFsPCVzPiIgJSBjcHBfbmFtZQotICAgICAgICAg
ICAgZWxzZToKLSAgICAgICAgICAgICAgICByZXR1cm4gY3BwX25hbWUKKyAgICAgICAgZWxzZToK
KyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInVua25vd24gdHlwZSIpCisKKyAgICAgICAg
aWYgaXNfb3B0aW9uYWw6CisgICAgICAgICAgICBjcHBfbmFtZSA9ICdPcHRpb25hbDwlcz4mJicg
JSBjcHBfbmFtZQorICAgICAgICByZXR1cm4gY3BwX25hbWUKIAogICAgIEBzdGF0aWNtZXRob2QK
LSAgICBkZWYgY3BwX3R5cGVfZm9yX3N0YWNrX291dF9wYXJhbWV0ZXIocGFyYW1ldGVyKToKLSAg
ICAgICAgX3R5cGUgPSBwYXJhbWV0ZXIudHlwZQorICAgIGRlZiBjcHBfdHlwZV9mb3JfY29tbWFu
ZF9yZXR1cm5fZGVjbGFyYXRpb24oX3R5cGUsIGlzX29wdGlvbmFsKToKKyAgICAgICAgaWYgaXNp
bnN0YW5jZShfdHlwZSwgQWxpYXNlZFR5cGUpOgorICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5h
bGlhc2VkX3R5cGUKKyAgICAgICAgICAgICMgZmFsbHRocm91Z2gKKworICAgICAgICBpZiBpc2lu
c3RhbmNlKF90eXBlLCBFbnVtVHlwZSkgYW5kIF90eXBlLmlzX2Fub255bW91czoKKyAgICAgICAg
ICAgIF90eXBlID0gX3R5cGUucHJpbWl0aXZlX3R5cGUKKyAgICAgICAgICAgICMgZmFsbHRocm91
Z2gKKwogICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCAoQXJyYXlUeXBlLCBPYmplY3RUeXBl
KSk6Ci0gICAgICAgICAgICByZXR1cm4gJ1JlZlB0cjwlcz4nICUgQ3BwR2VuZXJhdG9yLmNwcF9w
cm90b2NvbF90eXBlX2Zvcl90eXBlKF90eXBlKQotICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBl
LCBBbGlhc2VkVHlwZSk6Ci0gICAgICAgICAgICBidWlsZGVyX3R5cGUgPSBDcHBHZW5lcmF0b3Iu
Y3BwX3Byb3RvY29sX3R5cGVfZm9yX3R5cGUoX3R5cGUpCi0gICAgICAgICAgICBpZiBwYXJhbWV0
ZXIuaXNfb3B0aW9uYWw6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICJPcHRpb25hbDwlcz4iICUg
YnVpbGRlcl90eXBlCi0gICAgICAgICAgICByZXR1cm4gJyVzJyAlIGJ1aWxkZXJfdHlwZQotICAg
ICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBQcmltaXRpdmVUeXBlKToKLSAgICAgICAgICAgIGNw
cF9uYW1lID0gQ3BwR2VuZXJhdG9yLmNwcF9uYW1lX2Zvcl9wcmltaXRpdmVfdHlwZShfdHlwZSkK
LSAgICAgICAgICAgIGlmIHBhcmFtZXRlci5pc19vcHRpb25hbDoKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gIk9wdGlvbmFsPCVzPiIgJSBjcHBfbmFtZQotICAgICAgICAgICAgZWxzZToKLSAgICAg
ICAgICAgICAgICByZXR1cm4gY3BwX25hbWUKKyAgICAgICAgICAgIGlmIGlzX29wdGlvbmFsOgor
ICAgICAgICAgICAgICAgIHJldHVybiAnUmVmUHRyPCVzPicgJSBDcHBHZW5lcmF0b3IuY3BwX3By
b3RvY29sX3R5cGVfZm9yX3R5cGUoX3R5cGUpCisgICAgICAgICAgICByZXR1cm4gJ1JlZjwlcz4n
ICUgQ3BwR2VuZXJhdG9yLmNwcF9wcm90b2NvbF90eXBlX2Zvcl90eXBlKF90eXBlKQorCisgICAg
ICAgIGlmIF90eXBlLnF1YWxpZmllZF9uYW1lKCkgPT0gJ29iamVjdCc6CisgICAgICAgICAgICBp
ZiBpc19vcHRpb25hbDoKKyAgICAgICAgICAgICAgICByZXR1cm4gJ1JlZlB0cjxKU09OOjpPYmpl
Y3Q+JworICAgICAgICAgICAgcmV0dXJuICdSZWY8SlNPTjo6T2JqZWN0PicKKworICAgICAgICBp
ZiBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpID09ICdhcnJheSc6CisgICAgICAgICAgICBpZiBpc19v
cHRpb25hbDoKKyAgICAgICAgICAgICAgICByZXR1cm4gJ1JlZlB0cjxKU09OOjpBcnJheT4nCisg
ICAgICAgICAgICByZXR1cm4gJ1JlZjxKU09OOjpBcnJheT4nCisKKyAgICAgICAgaWYgX3R5cGUu
cXVhbGlmaWVkX25hbWUoKSA9PSAnYW55JzoKKyAgICAgICAgICAgIGlmIGlzX29wdGlvbmFsOgor
ICAgICAgICAgICAgICAgIHJldHVybiAnUmVmUHRyPEpTT046OlZhbHVlPicKKyAgICAgICAgICAg
IHJldHVybiAnUmVmPEpTT046OlZhbHVlPicKKworICAgICAgICBpZiBfdHlwZS5xdWFsaWZpZWRf
bmFtZSgpID09ICdzdHJpbmcnOgorICAgICAgICAgICAgcmV0dXJuIENwcEdlbmVyYXRvci5jcHBf
bmFtZV9mb3JfcHJpbWl0aXZlX3R5cGUoX3R5cGUpCisKICAgICAgICAgaWYgaXNpbnN0YW5jZShf
dHlwZSwgRW51bVR5cGUpOgotICAgICAgICAgICAgaWYgX3R5cGUuaXNfYW5vbnltb3VzOgotICAg
ICAgICAgICAgICAgIHJldHVybiAnJXNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OiVzJyAlIChf
dHlwZS50eXBlX2RvbWFpbigpLmRvbWFpbl9uYW1lLCB1Y2ZpcnN0KHBhcmFtZXRlci5wYXJhbWV0
ZXJfbmFtZSkpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJldHVybiAnSW5z
cGVjdG9yOjpQcm90b2NvbDo6JXM6OiVzJyAlIChfdHlwZS50eXBlX2RvbWFpbigpLmRvbWFpbl9u
YW1lLCBfdHlwZS5yYXdfbmFtZSgpKQorICAgICAgICAgICAgY3BwX25hbWUgPSAnUHJvdG9jb2w6
OiVzOjolcycgJSAoX3R5cGUudHlwZV9kb21haW4oKS5kb21haW5fbmFtZSwgX3R5cGUucmF3X25h
bWUoKSkKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKF90eXBlLCBQcmltaXRpdmVUeXBlKToKKyAg
ICAgICAgICAgIGNwcF9uYW1lID0gQ3BwR2VuZXJhdG9yLmNwcF9uYW1lX2Zvcl9wcmltaXRpdmVf
dHlwZShfdHlwZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3Io
InVua25vd24gdHlwZSIpCisKKyAgICAgICAgaWYgaXNfb3B0aW9uYWw6CisgICAgICAgICAgICBj
cHBfbmFtZSA9ICdPcHRpb25hbDwlcz4nICUgY3BwX25hbWUKKyAgICAgICAgcmV0dXJuIGNwcF9u
YW1lCiAKICAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIGNwcF9hc3NlcnRpb25fbWV0aG9kX2Zv
cl90eXBlX21lbWJlcih0eXBlX21lbWJlciwgb2JqZWN0X2RlY2xhcmF0aW9uKToKKyAgICBkZWYg
Y3BwX3R5cGVfZm9yX2NvbW1hbmRfcmV0dXJuX2FyZ3VtZW50KF90eXBlLCBpc19vcHRpb25hbCk6
CisgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEFsaWFzZWRUeXBlKToKKyAgICAgICAgICAg
IF90eXBlID0gX3R5cGUuYWxpYXNlZF90eXBlCisgICAgICAgICAgICAjIGZhbGx0aHJvdWcKIAot
ICAgICAgICBkZWYgYXNzZXJ0aW9uX21ldGhvZF9mb3JfdHlwZShfdHlwZSk6Ci0gICAgICAgICAg
ICByZXR1cm4gJ0JpbmRpbmdUcmFpdHM8JXM+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZScg
JSBDcHBHZW5lcmF0b3IuY3BwX3Byb3RvY29sX3R5cGVfZm9yX3R5cGUoX3R5cGUpCisgICAgICAg
IGlmIGlzaW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKSBhbmQgX3R5cGUuaXNfYW5vbnltb3VzOgor
ICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5wcmltaXRpdmVfdHlwZQorICAgICAgICAgICAgIyBm
YWxsdGhyb3VnaAogCi0gICAgICAgIGlmIGlzaW5zdGFuY2UodHlwZV9tZW1iZXIudHlwZSwgQWxp
YXNlZFR5cGUpOgotICAgICAgICAgICAgcmV0dXJuIGFzc2VydGlvbl9tZXRob2RfZm9yX3R5cGUo
dHlwZV9tZW1iZXIudHlwZS5hbGlhc2VkX3R5cGUpCi0gICAgICAgIGlmIGlzaW5zdGFuY2UodHlw
ZV9tZW1iZXIudHlwZSwgRW51bVR5cGUpIGFuZCB0eXBlX21lbWJlci50eXBlLmlzX2Fub255bW91
czoKLSAgICAgICAgICAgIHJldHVybiAnQmluZGluZ1RyYWl0czwlcz46OmFzc2VydFZhbHVlSGFz
RXhwZWN0ZWRUeXBlJyAlIENwcEdlbmVyYXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZV9t
ZW1iZXIodHlwZV9tZW1iZXIsIG9iamVjdF9kZWNsYXJhdGlvbikKKyAgICAgICAgaWYgaXNpbnN0
YW5jZShfdHlwZSwgKEFycmF5VHlwZSwgT2JqZWN0VHlwZSkpOgorICAgICAgICAgICAgaWYgaXNf
b3B0aW9uYWw6CisgICAgICAgICAgICAgICAgcmV0dXJuICdSZWZQdHI8JXM+JiYnICUgQ3BwR2Vu
ZXJhdG9yLmNwcF9wcm90b2NvbF90eXBlX2Zvcl90eXBlKF90eXBlKQorICAgICAgICAgICAgcmV0
dXJuICdSZWY8JXM+JiYnICUgQ3BwR2VuZXJhdG9yLmNwcF9wcm90b2NvbF90eXBlX2Zvcl90eXBl
KF90eXBlKQogCi0gICAgICAgIHJldHVybiBhc3NlcnRpb25fbWV0aG9kX2Zvcl90eXBlKHR5cGVf
bWVtYmVyLnR5cGUpCisgICAgICAgIGlmIF90eXBlLnF1YWxpZmllZF9uYW1lKCkgPT0gJ29iamVj
dCc6CisgICAgICAgICAgICBpZiBpc19vcHRpb25hbDoKKyAgICAgICAgICAgICAgICByZXR1cm4g
J1JlZlB0cjxKU09OOjpPYmplY3Q+JiYnCisgICAgICAgICAgICByZXR1cm4gJ1JlZjxKU09OOjpP
YmplY3Q+JiYnCisKKyAgICAgICAgaWYgX3R5cGUucXVhbGlmaWVkX25hbWUoKSA9PSAnYXJyYXkn
OgorICAgICAgICAgICAgaWYgaXNfb3B0aW9uYWw6CisgICAgICAgICAgICAgICAgcmV0dXJuICdS
ZWZQdHI8SlNPTjo6QXJyYXk+JiYnCisgICAgICAgICAgICByZXR1cm4gJ1JlZjxKU09OOjpBcnJh
eT4mJicKKworICAgICAgICBpZiBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpID09ICdhbnknOgorICAg
ICAgICAgICAgaWYgaXNfb3B0aW9uYWw6CisgICAgICAgICAgICAgICAgcmV0dXJuICdSZWZQdHI8
SlNPTjo6VmFsdWU+JiYnCisgICAgICAgICAgICByZXR1cm4gJ1JlZjxKU09OOjpWYWx1ZT4mJicK
KworICAgICAgICBpZiBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpID09ICdzdHJpbmcnOgorICAgICAg
ICAgICAgcmV0dXJuICdjb25zdCAlcyYnICUgQ3BwR2VuZXJhdG9yLmNwcF9uYW1lX2Zvcl9wcmlt
aXRpdmVfdHlwZShfdHlwZSkKKworICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBFbnVtVHlw
ZSk6CisgICAgICAgICAgICBjcHBfbmFtZSA9ICdQcm90b2NvbDo6JXM6OiVzJyAlIChfdHlwZS50
eXBlX2RvbWFpbigpLmRvbWFpbl9uYW1lLCBfdHlwZS5yYXdfbmFtZSgpKQorICAgICAgICBlbGlm
IGlzaW5zdGFuY2UoX3R5cGUsIFByaW1pdGl2ZVR5cGUpOgorICAgICAgICAgICAgY3BwX25hbWUg
PSBDcHBHZW5lcmF0b3IuY3BwX25hbWVfZm9yX3ByaW1pdGl2ZV90eXBlKF90eXBlKQorICAgICAg
ICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigidW5rbm93biB0eXBlIikKKwor
ICAgICAgICBpZiBpc19vcHRpb25hbDoKKyAgICAgICAgICAgIGNwcF9uYW1lID0gJ09wdGlvbmFs
PCVzPiYmJyAlIGNwcF9uYW1lCisgICAgICAgIHJldHVybiBjcHBfbmFtZQorCisgICAgQHN0YXRp
Y21ldGhvZAorICAgIGRlZiBjcHBfdHlwZV9mb3JfZXZlbnRfcGFyYW1ldGVyKF90eXBlLCBpc19v
cHRpb25hbCk6CisgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEFsaWFzZWRUeXBlKToKKyAg
ICAgICAgICAgIF90eXBlID0gX3R5cGUuYWxpYXNlZF90eXBlCisgICAgICAgICAgICAjIGZhbGx0
aHJvdWdoCisKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgRW51bVR5cGUpIGFuZCBfdHlw
ZS5pc19hbm9ueW1vdXM6CisgICAgICAgICAgICBfdHlwZSA9IF90eXBlLnByaW1pdGl2ZV90eXBl
CisgICAgICAgICAgICAjIGZhbGx0aHJvdWdoCisKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlw
ZSwgKEFycmF5VHlwZSwgT2JqZWN0VHlwZSkpOgorICAgICAgICAgICAgaWYgaXNfb3B0aW9uYWw6
CisgICAgICAgICAgICAgICAgcmV0dXJuICdSZWZQdHI8JXM+JiYnICUgQ3BwR2VuZXJhdG9yLmNw
cF9wcm90b2NvbF90eXBlX2Zvcl90eXBlKF90eXBlKQorICAgICAgICAgICAgcmV0dXJuICdSZWY8
JXM+JiYnICUgQ3BwR2VuZXJhdG9yLmNwcF9wcm90b2NvbF90eXBlX2Zvcl90eXBlKF90eXBlKQor
CisgICAgICAgIGlmIF90eXBlLnF1YWxpZmllZF9uYW1lKCkgPT0gJ29iamVjdCc6CisgICAgICAg
ICAgICBpZiBpc19vcHRpb25hbDoKKyAgICAgICAgICAgICAgICByZXR1cm4gJ1JlZlB0cjxKU09O
OjpPYmplY3Q+JiYnCisgICAgICAgICAgICByZXR1cm4gJ1JlZjxKU09OOjpPYmplY3Q+JiYnCisK
KyAgICAgICAgaWYgX3R5cGUucXVhbGlmaWVkX25hbWUoKSA9PSAnYXJyYXknOgorICAgICAgICAg
ICAgaWYgaXNfb3B0aW9uYWw6CisgICAgICAgICAgICAgICAgcmV0dXJuICdSZWZQdHI8SlNPTjo6
QXJyYXk+JiYnCisgICAgICAgICAgICByZXR1cm4gJ1JlZjxKU09OOjpBcnJheT4mJicKKworICAg
ICAgICBpZiBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpID09ICdhbnknOgorICAgICAgICAgICAgaWYg
aXNfb3B0aW9uYWw6CisgICAgICAgICAgICAgICAgcmV0dXJuICdSZWZQdHI8SlNPTjo6VmFsdWU+
JiYnCisgICAgICAgICAgICByZXR1cm4gJ1JlZjxKU09OOjpWYWx1ZT4mJicKKworICAgICAgICBp
ZiBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpID09ICdzdHJpbmcnOgorICAgICAgICAgICAgcmV0dXJu
ICdjb25zdCAlcyYnICUgQ3BwR2VuZXJhdG9yLmNwcF9uYW1lX2Zvcl9wcmltaXRpdmVfdHlwZShf
dHlwZSkKKworICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBFbnVtVHlwZSk6CisgICAgICAg
ICAgICBjcHBfbmFtZSA9ICdQcm90b2NvbDo6JXM6OiVzJyAlIChfdHlwZS50eXBlX2RvbWFpbigp
LmRvbWFpbl9uYW1lLCBfdHlwZS5yYXdfbmFtZSgpKQorICAgICAgICBlbGlmIGlzaW5zdGFuY2Uo
X3R5cGUsIFByaW1pdGl2ZVR5cGUpOgorICAgICAgICAgICAgY3BwX25hbWUgPSBDcHBHZW5lcmF0
b3IuY3BwX25hbWVfZm9yX3ByaW1pdGl2ZV90eXBlKF90eXBlKQorICAgICAgICBlbHNlOgorICAg
ICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigidW5rbm93biB0eXBlIikKKworICAgICAgICBpZiBp
c19vcHRpb25hbDoKKyAgICAgICAgICAgIGNwcF9uYW1lID0gJ09wdGlvbmFsPCVzPiYmJyAlIGNw
cF9uYW1lCisgICAgICAgIHJldHVybiBjcHBfbmFtZQorCisgICAgQHN0YXRpY21ldGhvZAorICAg
IGRlZiBjcHBfdHlwZV9mb3JfZW51bShlbnVtX3R5cGUsIG5hbWUpOgorICAgICAgICBpZiBlbnVt
X3R5cGUuaXNfYW5vbnltb3VzOgorICAgICAgICAgICAgcmV0dXJuICdQcm90b2NvbDo6JXM6OiVz
JyAlIChlbnVtX3R5cGUudHlwZV9kb21haW4oKS5kb21haW5fbmFtZSwgdWNmaXJzdChuYW1lKSkK
KyAgICAgICAgcmV0dXJuICdQcm90b2NvbDo6JXM6OiVzJyAlIChlbnVtX3R5cGUudHlwZV9kb21h
aW4oKS5kb21haW5fbmFtZSwgZW51bV90eXBlLnJhd19uYW1lKCkpCiAKICAgICBAc3RhdGljbWV0
aG9kCiAgICAgZGVmIGNwcF9uYW1lX2Zvcl9wcmltaXRpdmVfdHlwZShfdHlwZSk6CiAgICAgICAg
IHJldHVybiBfUFJJTUlUSVZFX1RPX0NQUF9OQU1FX01BUC5nZXQoX3R5cGUucmF3X25hbWUoKSkK
IAotICAgICMgRGVjaWRlIHdoZXRoZXIgY2VydGFpbiBoZWxwZXJzIGFyZSBuZWNlc3NhcnkgaW4g
YSBzaXR1YXRpb24uCiAgICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBzaG91bGRfdXNlX3dyYXBw
ZXJfZm9yX3JldHVybl90eXBlKF90eXBlKToKLSAgICAgICAgcmV0dXJuIG5vdCBpc2luc3RhbmNl
KF90eXBlLCAoQXJyYXlUeXBlLCBPYmplY3RUeXBlKSkKKyAgICBkZWYgc2hvdWxkX21vdmVfYXJn
dW1lbnQoX3R5cGUsIGlzX29wdGlvbmFsKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwg
QWxpYXNlZFR5cGUpOgorICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5hbGlhc2VkX3R5cGUKKyAg
ICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgRW51bVR5cGUpOgorICAgICAgICAgICAgX3R5cGUg
PSBfdHlwZS5wcmltaXRpdmVfdHlwZQorCisgICAgICAgIGlmIF90eXBlLnJhd19uYW1lKCkgPT0g
J3N0cmluZyc6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIGlzX29w
dGlvbmFsID09IChfdHlwZS5yYXdfbmFtZSgpIGluIFsnYm9vbGVhbicsICdpbnRlZ2VyJywgJ251
bWJlciddKQogCiAgICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBzaG91bGRfdXNlX3JlZmVyZW5j
ZXNfZm9yX3R5cGUoX3R5cGUpOgotICAgICAgICByZXR1cm4gaXNpbnN0YW5jZShfdHlwZSwgKEFy
cmF5VHlwZSwgT2JqZWN0VHlwZSkpIG9yIChpc2luc3RhbmNlKF90eXBlLCAoUHJpbWl0aXZlVHlw
ZSkpIGFuZCBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpIGluIFsiYW55IiwgIm9iamVjdCJdKQorICAg
IGRlZiBzaG91bGRfcmVsZWFzZV9hcmd1bWVudChfdHlwZSwgaXNfb3B0aW9uYWwpOgorICAgICAg
ICBpZiBpc2luc3RhbmNlKF90eXBlLCBBbGlhc2VkVHlwZSk6CisgICAgICAgICAgICBfdHlwZSA9
IF90eXBlLmFsaWFzZWRfdHlwZQorICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBFbnVtVHlw
ZSk6CisgICAgICAgICAgICBfdHlwZSA9IF90eXBlLnByaW1pdGl2ZV90eXBlCisKKyAgICAgICAg
aWYgX3R5cGUucmF3X25hbWUoKSA9PSAnc3RyaW5nJzoKKyAgICAgICAgICAgIHJldHVybiBGYWxz
ZQorICAgICAgICBpZiBfdHlwZS5yYXdfbmFtZSgpIGluIFsnYm9vbGVhbicsICdpbnRlZ2VyJywg
J251bWJlciddOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHJldHVybiBpc19v
cHRpb25hbAogCiAgICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBzaG91bGRfcGFzc19ieV9jb3B5
X2Zvcl9yZXR1cm5fdHlwZShfdHlwZSk6Ci0gICAgICAgIHJldHVybiBpc2luc3RhbmNlKF90eXBl
LCAoQXJyYXlUeXBlLCBPYmplY3RUeXBlKSkgb3IgKGlzaW5zdGFuY2UoX3R5cGUsIChQcmltaXRp
dmVUeXBlKSkgYW5kIF90eXBlLnF1YWxpZmllZF9uYW1lKCkgPT0gIm9iamVjdCIpCisgICAgZGVm
IHNob3VsZF9kZXJlZmVyZW5jZV9hcmd1bWVudChfdHlwZSwgaXNfb3B0aW9uYWwpOgorICAgICAg
ICBpZiBpc2luc3RhbmNlKF90eXBlLCBBbGlhc2VkVHlwZSk6CisgICAgICAgICAgICBfdHlwZSA9
IF90eXBlLmFsaWFzZWRfdHlwZQorICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBFbnVtVHlw
ZSk6CisgICAgICAgICAgICBfdHlwZSA9IF90eXBlLnByaW1pdGl2ZV90eXBlCisKKyAgICAgICAg
aWYgX3R5cGUucmF3X25hbWUoKSA9PSAnc3RyaW5nJzoKKyAgICAgICAgICAgIHJldHVybiBGYWxz
ZQorICAgICAgICBpZiBfdHlwZS5yYXdfbmFtZSgpIG5vdCBpbiBbJ2Jvb2xlYW4nLCAnaW50ZWdl
cicsICdudW1iZXInXToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICByZXR1cm4g
aXNfb3B0aW9uYWwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9jb2RlZ2VuL2NwcF9nZW5lcmF0b3JfdGVtcGxhdGVzLnB5IGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vY3BwX2dlbmVyYXRvcl90ZW1wbGF0
ZXMucHkKaW5kZXggMDgyYmUzM2YxNWRlMjViZTg4OTU3Y2IxNDIyOTM1MjAzNmVlMjJjZi4uN2M4
NDg1Nzg2ZTljZGNmMTQyZTkzOTYyYWUyY2Y0ZDEwNzFlMWQ4NyAxMDA3NTUKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vY3BwX2dlbmVyYXRvcl90
ZW1wbGF0ZXMucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2NvZGVnZW4vY3BwX2dlbmVyYXRvcl90ZW1wbGF0ZXMucHkKQEAgLTk1LDcgKzk1LDcgQEAgcHJv
dGVjdGVkOgogICAgICIiIiR7Y2xhc3NBbmRFeHBvcnRNYWNyb30gJHtkb21haW5OYW1lfUJhY2tl
bmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVy
IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPCR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hl
cj4gY3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiwgJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRj
aGVySGFuZGxlciopOwotICAgIHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0
cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpIGZpbmFsOworICAgIHZv
aWQgZGlzcGF0Y2gobG9uZyBwcm90b2NvbF9jYWxsSWQsIGNvbnN0IFN0cmluZyYgcHJvdG9jb2xf
bWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX21lc3NhZ2UpIGZpbmFsOwogJHtj
b21tYW5kRGVjbGFyYXRpb25zfQogcHJpdmF0ZToKICAgICAke2RvbWFpbk5hbWV9QmFja2VuZERp
c3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImLCAke2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNo
ZXJIYW5kbGVyKik7CkBAIC0xMTQsMzIgKzExNCwzMCBAQCBwcml2YXRlOgogICAgICIiIiAgICAk
e2NsYXNzQW5kRXhwb3J0TWFjcm99ICR7Y2FsbGJhY2tOYW1lfSA6IHB1YmxpYyBCYWNrZW5kRGlz
cGF0Y2hlcjo6Q2FsbGJhY2tCYXNlIHsKICAgICBwdWJsaWM6CiAgICAgICAgICR7Y2FsbGJhY2tO
YW1lfShSZWY8QmFja2VuZERpc3BhdGNoZXI+JiYsIGludCBpZCk7Ci0gICAgICAgIHZvaWQgc2Vu
ZFN1Y2Nlc3MoJHtvdXRQYXJhbWV0ZXJzfSk7CisgICAgICAgIHZvaWQgc2VuZFN1Y2Nlc3MoJHty
ZXR1cm5zfSk7CiAgICAgfTsKLSAgICB2aXJ0dWFsIHZvaWQgJHtjb21tYW5kTmFtZX0oJHtpblBh
cmFtZXRlcnN9KSA9IDA7IiIiKQorICAgIHZpcnR1YWwgdm9pZCAke2NvbW1hbmROYW1lfSgke3Bh
cmFtZXRlcnN9KSA9IDA7IiIiKQogCiAgICAgQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlv
blNtYWxsU3dpdGNoID0gKAotICAgICIiInZvaWQgJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRj
aGVyOjpkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxK
U09OOjpPYmplY3Q+JiYgbWVzc2FnZSkKKyAgICAiIiJ2b2lkICR7ZG9tYWluTmFtZX1CYWNrZW5k
RGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyBwcm90b2NvbF9jYWxsSWQsIGNvbnN0IFN0cmluZyYg
cHJvdG9jb2xfbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX21lc3NhZ2UpCiB7
CiAgICAgUmVmPCR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7
CiAKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzOwotICAgIG1lc3NhZ2UtPmdl
dE9iamVjdCgicGFyYW1zIl9zLCBwYXJhbWV0ZXJzKTsKKyAgICBhdXRvIHByb3RvY29sX3BhcmFt
ZXRlcnMgPSBwcm90b2NvbF9tZXNzYWdlLT5nZXRPYmplY3QoInBhcmFtcyJfcyk7CiAKICR7ZGlz
cGF0Y2hDYXNlc30KIAotICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJy
b3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJyR7ZG9tYWluTmFtZX0uIiAr
IG1ldGhvZCArICInIHdhcyBub3QgZm91bmQiKTsKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5y
ZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIick
e2RvbWFpbk5hbWV9LiIgKyBwcm90b2NvbF9tZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7CiB9
IiIiKQogCiAgICAgQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkxhcmdlU3dpdGNoID0g
KAotIiIidm9pZCAke2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcg
cmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNz
YWdlKQorIiIidm9pZCAke2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxv
bmcgcHJvdG9jb2xfY2FsbElkLCBjb25zdCBTdHJpbmcmIHByb3RvY29sX21ldGhvZCwgUmVmPEpT
T046Ok9iamVjdD4mJiBwcm90b2NvbF9tZXNzYWdlKQogewogICAgIFJlZjwke2RvbWFpbk5hbWV9
QmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOwogCi0gICAgUmVmUHRyPEpTT046Ok9i
amVjdD4gcGFyYW1ldGVyczsKLSAgICBtZXNzYWdlLT5nZXRPYmplY3QoInBhcmFtcyJfcywgcGFy
YW1ldGVycyk7CisgICAgYXV0byBwcm90b2NvbF9wYXJhbWV0ZXJzID0gcHJvdG9jb2xfbWVzc2Fn
ZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3MpOwogCi0gICAgdXNpbmcgQ2FsbEhhbmRsZXIgPSB2b2lk
ICgke2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXI6OiopKGxvbmcgcmVxdWVzdElkLCBSZWZQ
dHI8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpOworICAgIHVzaW5nIENhbGxIYW5kbGVyID0gdm9p
ZCAoJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyOjoqKShsb25nIHByb3RvY29sX2NhbGxJ
ZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9tZXNzYWdlKTsKICAgICB1c2luZyBE
aXNwYXRjaE1hcCA9IEhhc2hNYXA8U3RyaW5nLCBDYWxsSGFuZGxlcj47CiAgICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPERpc3BhdGNoTWFwPiBkaXNwYXRjaE1hcDsKICAgICBpZiAoZGlzcGF0Y2hN
YXAuZ2V0KCkuaXNFbXB0eSgpKSB7CkBAIC0xNTQsMTMgKzE1MiwxMyBAQCAke2Rpc3BhdGNoQ2Fz
ZXN9CiAgICAgICAgICAgICBkaXNwYXRjaE1hcC5nZXQoKS5hZGQoY29tbWFuZHNbaV0ubmFtZSwg
Y29tbWFuZHNbaV0uaGFuZGxlcik7CiAgICAgfQogCi0gICAgYXV0byBmaW5kUmVzdWx0ID0gZGlz
cGF0Y2hNYXAuZ2V0KCkuZmluZChtZXRob2QpOworICAgIGF1dG8gZmluZFJlc3VsdCA9IGRpc3Bh
dGNoTWFwLmdldCgpLmZpbmQocHJvdG9jb2xfbWV0aG9kKTsKICAgICBpZiAoZmluZFJlc3VsdCA9
PSBkaXNwYXRjaE1hcC5nZXQoKS5lbmQoKSkgewotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVy
LT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwg
Iicke2RvbWFpbk5hbWV9LiIgKyBtZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7CisgICAgICAg
IG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNo
ZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJyR7ZG9tYWluTmFtZX0uIiArIHByb3RvY29sX21ldGhvZCAr
ICInIHdhcyBub3QgZm91bmQiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgICgoKnRo
aXMpLipmaW5kUmVzdWx0LT52YWx1ZSkocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsK
KyAgICAoKCp0aGlzKS4qZmluZFJlc3VsdC0+dmFsdWUpKHByb3RvY29sX2NhbGxJZCwgV1RGTW92
ZShwcm90b2NvbF9wYXJhbWV0ZXJzKSk7CiB9IiIiKQogCiAgICAgQmFja2VuZERpc3BhdGNoZXJJ
bXBsZW1lbnRhdGlvbkRvbWFpbkNvbnN0cnVjdG9yID0gKApAQCAtMTc3LDcgKzE3NSw3IEBAICR7
ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcjo6JHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRj
aGVyKEJhY2tlbmREaXNwYXRjaGVyCiB9IiIiKQogCiAgICAgQmFja2VuZERpc3BhdGNoZXJJbXBs
ZW1lbnRhdGlvblByZXBhcmVDb21tYW5kQXJndW1lbnRzID0gKAotIiIiJHtpblBhcmFtZXRlckRl
Y2xhcmF0aW9uc30KKyIiIiR7cGFyYW1ldGVyRGVjbGFyYXRpb25zfQogICAgIGlmIChtX2JhY2tl
bmREaXNwYXRjaGVyLT5oYXNQcm90b2NvbEVycm9ycygpKSB7CiAgICAgICAgIG1fYmFja2VuZERp
c3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OkludmFsaWRQ
YXJhbXMsICJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgXCcke2RvbWFpbk5hbWV9LiR7Y29tbWFu
ZE5hbWV9XCcgY2FuJ3QgYmUgcHJvY2Vzc2VkIl9zKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMTg3
LDExICsxODUsMTEgQEAgJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyOjoke2RvbWFpbk5h
bWV9QmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXIKICAgICBCYWNrZW5kRGlzcGF0
Y2hlckltcGxlbWVudGF0aW9uQXN5bmNDb21tYW5kID0gKAogIiIiJHtkb21haW5OYW1lfUJhY2tl
bmREaXNwYXRjaGVySGFuZGxlcjo6JHtjYWxsYmFja05hbWV9Ojoke2NhbGxiYWNrTmFtZX0oUmVm
PEJhY2tlbmREaXNwYXRjaGVyPiYmIGJhY2tlbmREaXNwYXRjaGVyLCBpbnQgaWQpIDogQmFja2Vu
ZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZShXVEZNb3ZlKGJhY2tlbmREaXNwYXRjaGVyKSwgaWQp
IHsgfQogCi12b2lkICR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OiR7Y2Fs
bGJhY2tOYW1lfTo6c2VuZFN1Y2Nlc3MoJHtmb3JtYWxQYXJhbWV0ZXJzfSkKK3ZvaWQgJHtkb21h
aW5OYW1lfUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6JHtjYWxsYmFja05hbWV9OjpzZW5kU3Vj
Y2Vzcygke2NhbGxiYWNrUGFyYW1ldGVyc30pCiB7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4ganNv
bk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotJHtvdXRQYXJhbWV0ZXJBc3NpZ25t
ZW50c30KLSAgICBDYWxsYmFja0Jhc2U6OnNlbmRTdWNjZXNzKFdURk1vdmUoanNvbk1lc3NhZ2Up
KTsKKyAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUo
KTsKKyR7cmV0dXJuQXNzaWdubWVudHN9CisgICAgQ2FsbGJhY2tCYXNlOjpzZW5kU3VjY2VzcyhX
VEZNb3ZlKHByb3RvY29sX2pzb25NZXNzYWdlKSk7CiB9IiIiKQogCiAgICAgRnJvbnRlbmREaXNw
YXRjaGVyRG9tYWluRGlzcGF0Y2hlckRlY2xhcmF0aW9uID0gKApAQCAtMjQ2LDEzICsyNDQsMTEg
QEAgJHtjb25zdHJ1Y3RvckV4YW1wbGV9CiAgICAgfSIiIikKIAogICAgIFByb3RvY29sT2JqZWN0
UnVudGltZUNhc3QgPSAoCi0iIiJSZWZQdHI8JHtvYmplY3RUeXBlfT4gQmluZGluZ1RyYWl0czwk
e29iamVjdFR5cGV9Pjo6cnVudGltZUNhc3QoUmVmUHRyPEpTT046OlZhbHVlPiYmIHZhbHVlKQor
IiIiUmVmPCR7b2JqZWN0VHlwZX0+IEJpbmRpbmdUcmFpdHM8JHtvYmplY3RUeXBlfT46OnJ1bnRp
bWVDYXN0KFJlZjxKU09OOjpWYWx1ZT4mJiB2YWx1ZSkKIHsKLSAgICBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiByZXN1bHQ7Ci0gICAgYm9vbCBjYXN0U3VjY2VlZGVkID0gdmFsdWUtPmFzT2JqZWN0KHJl
c3VsdCk7Ci0gICAgQVNTRVJUX1VOVVNFRChjYXN0U3VjY2VlZGVkLCBjYXN0U3VjY2VlZGVkKTsK
KyAgICBhdXRvIHJlc3VsdCA9IHZhbHVlLT5hc09iamVjdCgpOwogICAgIEJpbmRpbmdUcmFpdHM8
JHtvYmplY3RUeXBlfT46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKHJlc3VsdC5nZXQoKSk7
CiAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKCR7b2JqZWN0VHlwZX0pID09IHNpemVvZihKU09O
OjpPYmplY3RCYXNlKSwgdHlwZV9jYXN0X3Byb2JsZW0pOwotICAgIHJldHVybiBzdGF0aWNfY2Fz
dDwke29iamVjdFR5cGV9Kj4oc3RhdGljX2Nhc3Q8SlNPTjo6T2JqZWN0QmFzZSo+KHJlc3VsdC5n
ZXQoKSkpOworICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8JHtvYmplY3RUeXBlfT4o
c3RhdGljX3JlZmVyZW5jZV9jYXN0PEpTT046Ok9iamVjdEJhc2U+KHJlc3VsdC5yZWxlYXNlTm9u
TnVsbCgpKSk7CiB9CiAiIiIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfYWx0ZXJuYXRlX2JhY2tlbmRfZGlz
cGF0Y2hlcl9oZWFkZXIucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfYWx0ZXJuYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFk
ZXIucHkKaW5kZXggZTFhNjYxYmEzNzljZGVhNDA2NGM2Zjc3YzRlZmNiMTE2MmFjZWZjMC4uYjlj
NjYxNzQ5MjI0NGQwMGUwYTc0NWQ3OTRiYWI2NzEwMmU3NDRjNSAxMDA3NTUKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2Fs
dGVybmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5CisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9hbHRlcm5hdGVf
YmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weQpAQCAtMzMsOSArMzMsMTEgQEAgZnJvbSBzdHJp
bmcgaW1wb3J0IFRlbXBsYXRlCiB0cnk6CiAgICAgZnJvbSAuY3BwX2dlbmVyYXRvciBpbXBvcnQg
Q3BwR2VuZXJhdG9yCiAgICAgZnJvbSAuY3BwX2dlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IENw
cEdlbmVyYXRvclRlbXBsYXRlcyBhcyBDcHBUZW1wbGF0ZXMKKyAgICBmcm9tIC5tb2RlbHMgaW1w
b3J0IEVudW1UeXBlLCBBbGlhc2VkVHlwZQogZXhjZXB0IFZhbHVlRXJyb3I6CiAgICAgZnJvbSBj
cHBfZ2VuZXJhdG9yIGltcG9ydCBDcHBHZW5lcmF0b3IKICAgICBmcm9tIGNwcF9nZW5lcmF0b3Jf
dGVtcGxhdGVzIGltcG9ydCBDcHBHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgQ3BwVGVtcGxhdGVzCisg
ICAgZnJvbSBtb2RlbHMgaW1wb3J0IEVudW1UeXBlLCBBbGlhc2VkVHlwZQogCiBsb2cgPSBsb2dn
aW5nLmdldExvZ2dlcignZ2xvYmFsJykKIApAQCAtNjUsNyArNjcsNyBAQCBjbGFzcyBDcHBBbHRl
cm5hdGVCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAg
IGRlZiBfZ2VuZXJhdGVfc2Vjb25kYXJ5X2hlYWRlcl9pbmNsdWRlcyhzZWxmKToKICAgICAgICAg
dGFyZ2V0X2ZyYW1ld29ya19uYW1lID0gc2VsZi5tb2RlbCgpLmZyYW1ld29yay5uYW1lCiAgICAg
ICAgIGhlYWRlcl9pbmNsdWRlcyA9IFsKLSAgICAgICAgICAgIChbdGFyZ2V0X2ZyYW1ld29ya19u
YW1lXSwgKHRhcmdldF9mcmFtZXdvcmtfbmFtZSwgIiVzUHJvdG9jb2xUeXBlcy5oIiAlIHNlbGYu
cHJvdG9jb2xfbmFtZSgpKSksCisgICAgICAgICAgICAoW3RhcmdldF9mcmFtZXdvcmtfbmFtZV0s
ICh0YXJnZXRfZnJhbWV3b3JrX25hbWUsICIlc1Byb3RvY29sT2JqZWN0cy5oIiAlIHNlbGYucHJv
dG9jb2xfbmFtZSgpKSksCiAgICAgICAgICAgICAoWyJKYXZhU2NyaXB0Q29yZSJdLCAoIkphdmFT
Y3JpcHRDb3JlIiwgImluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oIikpLAogICAg
ICAgICAgICAgKFsiSmF2YVNjcmlwdENvcmUiXSwgKCJKYXZhU2NyaXB0Q29yZSIsICJpbnNwZWN0
b3IvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaCIpKSwKICAgICAgICAgXQpAQCAtOTEsOSAr
OTMsMTkgQEAgY2xhc3MgQ3BwQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0
b3IoQ3BwR2VuZXJhdG9yKToKIAogICAgIGRlZiBfZ2VuZXJhdGVfaGFuZGxlcl9kZWNsYXJhdGlv
bl9mb3JfY29tbWFuZChzZWxmLCBjb21tYW5kKToKICAgICAgICAgbGluZXMgPSBbXQotICAgICAg
ICBwYXJhbWV0ZXJzID0gWydsb25nIGNhbGxJZCddCi0gICAgICAgIGZvciBfcGFyYW1ldGVyIGlu
IGNvbW1hbmQuY2FsbF9wYXJhbWV0ZXJzOgotICAgICAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQo
JyVzIGluXyVzJyAlIChDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX3VuY2hlY2tlZF9mb3JtYWxf
aW5fcGFyYW1ldGVyKF9wYXJhbWV0ZXIpLCBfcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKSkKKyAg
ICAgICAgcGFyYW1ldGVycyA9IFsnbG9uZyBwcm90b2NvbF9jYWxsSWQnXQorICAgICAgICBmb3Ig
cGFyYW1ldGVyIGluIGNvbW1hbmQuY2FsbF9wYXJhbWV0ZXJzOgorICAgICAgICAgICAgcGFyYW1l
dGVyX3R5cGUgPSBwYXJhbWV0ZXIudHlwZQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShwYXJh
bWV0ZXJfdHlwZSwgQWxpYXNlZFR5cGUpOgorICAgICAgICAgICAgICAgIHBhcmFtZXRlcl90eXBl
ID0gcGFyYW1ldGVyX3R5cGUuYWxpYXNlZF90eXBlCisgICAgICAgICAgICBpZiBpc2luc3RhbmNl
KHBhcmFtZXRlcl90eXBlLCBFbnVtVHlwZSk6CisgICAgICAgICAgICAgICAgcGFyYW1ldGVyX3R5
cGUgPSBwYXJhbWV0ZXJfdHlwZS5wcmltaXRpdmVfdHlwZQorCisgICAgICAgICAgICBwYXJhbWV0
ZXJfbmFtZSA9IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZQorICAgICAgICAgICAgaWYgcGFyYW1l
dGVyLmlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAgIHBhcmFtZXRlcl9uYW1lID0gJ29wdF8n
ICsgcGFyYW1ldGVyX25hbWUKKworICAgICAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoJyVzICVz
JyAlIChDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX2NvbW1hbmRfcGFyYW1ldGVyKHBhcmFtZXRl
cl90eXBlLCBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwpLCBwYXJhbWV0ZXJfbmFtZSkpCiAKICAgICAg
ICAgY29tbWFuZF9hcmdzID0gewogICAgICAgICAgICAgJ2NvbW1hbmROYW1lJzogY29tbWFuZC5j
b21tYW5kX25hbWUsCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5w
eSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVy
YXRlX2NwcF9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5CmluZGV4IDEwZDhmMTRiZDVmZWJl
YjhhMWIwNmIwMTc2NzVhMTQzYThkNGY3MzguLjZkOWRkMmE0OGRjMzQ2OTIwNzFjMWRiYzFiOGIz
YjRlN2M3M2E5MTUgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dl
bmVyYXRlX2NwcF9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5CkBAIC01NSwxMCArNTUsOSBA
QCBjbGFzcyBDcHBCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvcihDcHBHZW5lcmF0b3Ip
OgogICAgICAgICByZXR1cm4gW2RvbWFpbiBmb3IgZG9tYWluIGluIEdlbmVyYXRvci5kb21haW5z
X3RvX2dlbmVyYXRlKHNlbGYpIGlmIGxlbihzZWxmLmNvbW1hbmRzX2Zvcl9kb21haW4oZG9tYWlu
KSkgPiAwXQogCiAgICAgZGVmIGdlbmVyYXRlX291dHB1dChzZWxmKToKLSAgICAgICAgdHlwZWRl
ZnMgPSBbKCdTdHJpbmcnLCAnRXJyb3JTdHJpbmcnKV0KICAgICAgICAgaGVhZGVyX2FyZ3MgPSB7
CiAgICAgICAgICAgICAnaW5jbHVkZXMnOiBzZWxmLl9nZW5lcmF0ZV9zZWNvbmRhcnlfaGVhZGVy
X2luY2x1ZGVzKCksCi0gICAgICAgICAgICAndHlwZWRlZnMnOiAnXG4nLmpvaW4oWyd0eXBlZGVm
ICVzICVzOycgJSB0eXBlZGVmIGZvciB0eXBlZGVmIGluIHR5cGVkZWZzXSksCisgICAgICAgICAg
ICAndHlwZWRlZnMnOiAnJywKICAgICAgICAgfQogCiAgICAgICAgIGRvbWFpbnMgPSBzZWxmLmRv
bWFpbnNfdG9fZ2VuZXJhdGUoKQpAQCAtNzksOSArNzgsMTEgQEAgY2xhc3MgQ3BwQmFja2VuZERp
c3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAgICAgaGVhZGVyX2lu
Y2x1ZGVzID0gWwogICAgICAgICAgICAgKFsiSmF2YVNjcmlwdENvcmUiLCAiV2ViS2l0Il0sIChz
ZWxmLm1vZGVsKCkuZnJhbWV3b3JrLm5hbWUsICIlc1Byb3RvY29sT2JqZWN0cy5oIiAlIHNlbGYu
cHJvdG9jb2xfbmFtZSgpKSksCiAgICAgICAgICAgICAoWyJKYXZhU2NyaXB0Q29yZSIsICJXZWJL
aXQiXSwgKCJKYXZhU2NyaXB0Q29yZSIsICJpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXIuaCIpKSwKLSAgICAgICAgICAgIChbIkphdmFTY3JpcHRDb3JlIiwgIldlYktpdCJdLCAo
IldURiIsICJ3dGYvdGV4dC9XVEZTdHJpbmcuaCIpKQorICAgICAgICAgICAgKFsiSmF2YVNjcmlw
dENvcmUiLCAiV2ViS2l0Il0sICgiV1RGIiwgInd0Zi9FeHBlY3RlZC5oIikpLAorICAgICAgICAg
ICAgKFsiSmF2YVNjcmlwdENvcmUiLCAiV2ViS2l0Il0sICgiV1RGIiwgInd0Zi9PcHRpb25hbC5o
IikpLAorICAgICAgICAgICAgKFsiSmF2YVNjcmlwdENvcmUiLCAiV2ViS2l0Il0sICgiV1RGIiwg
Ind0Zi90ZXh0L1dURlN0cmluZy5oIikpLAorICAgICAgICAgICAgKFsiSmF2YVNjcmlwdENvcmUi
LCAiV2ViS2l0Il0sICgic3RkIiwgInR1cGxlIikpLAogICAgICAgICBdCi0KICAgICAgICAgcmV0
dXJuICdcbicuam9pbihzZWxmLmdlbmVyYXRlX2luY2x1ZGVzX2Zyb21fZW50cmllcyhoZWFkZXJf
aW5jbHVkZXMpKQogCiAgICAgZGVmIF9nZW5lcmF0ZV9hbHRlcm5hdGVfaGFuZGxlcl9mb3J3YXJk
X2RlY2xhcmF0aW9uc19mb3JfZG9tYWlucyhzZWxmLCBkb21haW5zKToKQEAgLTEwMSwxMSArMTAy
LDkgQEAgY2xhc3MgQ3BwQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IoQ3BwR2VuZXJh
dG9yKToKICAgICAgICAgaWYgZXhwb3J0TWFjcm8gaXMgbm90IE5vbmU6CiAgICAgICAgICAgICBj
bGFzc0NvbXBvbmVudHMuYXBwZW5kKGV4cG9ydE1hY3JvKQogCi0gICAgICAgIHVzZWRfZW51bV9u
YW1lcyA9IHNldCgpCi0KICAgICAgICAgY29tbWFuZF9kZWNsYXJhdGlvbnMgPSBbXQogICAgICAg
ICBmb3IgY29tbWFuZCBpbiBzZWxmLmNvbW1hbmRzX2Zvcl9kb21haW4oZG9tYWluKToKLSAgICAg
ICAgICAgIGNvbW1hbmRfZGVjbGFyYXRpb25zLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9oYW5kbGVy
X2RlY2xhcmF0aW9uX2Zvcl9jb21tYW5kKGNvbW1hbmQsIHVzZWRfZW51bV9uYW1lcykpCisgICAg
ICAgICAgICBjb21tYW5kX2RlY2xhcmF0aW9ucy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfaGFuZGxl
cl9kZWNsYXJhdGlvbl9mb3JfY29tbWFuZChjb21tYW5kKSkKIAogICAgICAgICBoYW5kbGVyX2Fy
Z3MgPSB7CiAgICAgICAgICAgICAnY2xhc3NBbmRFeHBvcnRNYWNybyc6ICIgIi5qb2luKGNsYXNz
Q29tcG9uZW50cyksCkBAIC0xMTUsNjkgKzExNCw1NiBAQCBjbGFzcyBDcHBCYWNrZW5kRGlzcGF0
Y2hlckhlYWRlckdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogCiAgICAgICAgIHJldHVybiBzZWxm
LndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGRvbWFpbi5jb25kaXRpb24sIFRlbXBsYXRl
KENwcFRlbXBsYXRlcy5CYWNrZW5kRGlzcGF0Y2hlckhlYWRlckRvbWFpbkhhbmRsZXJEZWNsYXJh
dGlvbikuc3Vic3RpdHV0ZShOb25lLCAqKmhhbmRsZXJfYXJncykpCiAKLSAgICBkZWYgX2dlbmVy
YXRlX2Fub255bW91c19lbnVtX2Zvcl9wYXJhbWV0ZXIoc2VsZiwgcGFyYW1ldGVyLCBjb21tYW5k
KToKLSAgICAgICAgZW51bV9hcmdzID0gewotICAgICAgICAgICAgJ3BhcmFtZXRlck5hbWUnOiBw
YXJhbWV0ZXIucGFyYW1ldGVyX25hbWUsCi0gICAgICAgICAgICAnY29tbWFuZE5hbWUnOiBjb21t
YW5kLmNvbW1hbmRfbmFtZQotICAgICAgICB9Ci0KLSAgICAgICAgbGluZXMgPSBbXQotICAgICAg
ICBsaW5lcy5hcHBlbmQoJyAgICAvLyBOYW1lZCBhZnRlciBwYXJhbWV0ZXIgXCclKHBhcmFtZXRl
ck5hbWUpc1wnIHdoaWxlIGdlbmVyYXRpbmcgY29tbWFuZC9ldmVudCAlKGNvbW1hbmROYW1lKXMu
JyAlIGVudW1fYXJncykKLSAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgZW51bSBjbGFzcyAlcyB7
JyAlIHVjZmlyc3QocGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKSkKLSAgICAgICAgZm9yIGVudW1f
dmFsdWUgaW4gcGFyYW1ldGVyLnR5cGUuZW51bV92YWx1ZXMoKToKLSAgICAgICAgICAgIGxpbmVz
LmFwcGVuZCgnICAgICAgICAlcyA9ICVkLCcgJSAoR2VuZXJhdG9yLnN0eWxpemVkX25hbWVfZm9y
X2VudW1fdmFsdWUoZW51bV92YWx1ZSksIHNlbGYuZW5jb2RpbmdfZm9yX2VudW1fdmFsdWUoZW51
bV92YWx1ZSkpKQotICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICB9OyAvLyBlbnVtIGNsYXNzICVz
JyAlIHVjZmlyc3QocGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKSkKLSAgICAgICAgcmV0dXJuICdc
bicuam9pbihsaW5lcykKLQotICAgIGRlZiBfZ2VuZXJhdGVfaGFuZGxlcl9kZWNsYXJhdGlvbl9m
b3JfY29tbWFuZChzZWxmLCBjb21tYW5kLCB1c2VkX2VudW1fbmFtZXMpOgorICAgIGRlZiBfZ2Vu
ZXJhdGVfaGFuZGxlcl9kZWNsYXJhdGlvbl9mb3JfY29tbWFuZChzZWxmLCBjb21tYW5kKToKICAg
ICAgICAgaWYgY29tbWFuZC5pc19hc3luYzoKICAgICAgICAgICAgIHJldHVybiBzZWxmLl9nZW5l
cmF0ZV9hc3luY19oYW5kbGVyX2RlY2xhcmF0aW9uX2Zvcl9jb21tYW5kKGNvbW1hbmQpCiAKICAg
ICAgICAgbGluZXMgPSBbXQotICAgICAgICBwYXJhbWV0ZXJzID0gWydFcnJvclN0cmluZyYnXQot
ICAgICAgICBmb3IgX3BhcmFtZXRlciBpbiBjb21tYW5kLmNhbGxfcGFyYW1ldGVyczoKLSAgICAg
ICAgICAgIHBhcmFtZXRlcl9uYW1lID0gJ2luXycgKyBfcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1l
Ci0gICAgICAgICAgICBpZiBfcGFyYW1ldGVyLmlzX29wdGlvbmFsOgorCisgICAgICAgIHBhcmFt
ZXRlcnMgPSBbXQorICAgICAgICBmb3IgcGFyYW1ldGVyIGluIGNvbW1hbmQuY2FsbF9wYXJhbWV0
ZXJzOgorICAgICAgICAgICAgcGFyYW1ldGVyX25hbWUgPSBwYXJhbWV0ZXIucGFyYW1ldGVyX25h
bWUKKyAgICAgICAgICAgIGlmIHBhcmFtZXRlci5pc19vcHRpb25hbDoKICAgICAgICAgICAgICAg
ICBwYXJhbWV0ZXJfbmFtZSA9ICdvcHRfJyArIHBhcmFtZXRlcl9uYW1lCisgICAgICAgICAgICBw
YXJhbWV0ZXJzLmFwcGVuZCgiJXMgJXMiICUgKENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3JfY29t
bWFuZF9wYXJhbWV0ZXIocGFyYW1ldGVyLnR5cGUsIHBhcmFtZXRlci5pc19vcHRpb25hbCksIHBh
cmFtZXRlcl9uYW1lKSkKIAotICAgICAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoIiVzICVzIiAl
IChDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX3VuY2hlY2tlZF9mb3JtYWxfaW5fcGFyYW1ldGVy
KF9wYXJhbWV0ZXIpLCBwYXJhbWV0ZXJfbmFtZSkpCi0KLSAgICAgICAgICAgIGlmIGlzaW5zdGFu
Y2UoX3BhcmFtZXRlci50eXBlLCBFbnVtVHlwZSkgYW5kIF9wYXJhbWV0ZXIudHlwZS5pc19hbm9u
eW1vdXMgYW5kIF9wYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUgbm90IGluIHVzZWRfZW51bV9uYW1l
czoKLSAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYW5vbnltb3Vz
X2VudW1fZm9yX3BhcmFtZXRlcihfcGFyYW1ldGVyLCBjb21tYW5kKSkKLSAgICAgICAgICAgICAg
ICB1c2VkX2VudW1fbmFtZXMuYWRkKF9wYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpCi0KLSAgICAg
ICAgZm9yIF9wYXJhbWV0ZXIgaW4gY29tbWFuZC5yZXR1cm5fcGFyYW1ldGVyczoKLSAgICAgICAg
ICAgIHBhcmFtZXRlcl9uYW1lID0gJ291dF8nICsgX3BhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZQot
ICAgICAgICAgICAgaWYgX3BhcmFtZXRlci5pc19vcHRpb25hbDoKKyAgICAgICAgcmV0dXJucyA9
IFtdCisgICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gY29tbWFuZC5yZXR1cm5fcGFyYW1ldGVyczoK
KyAgICAgICAgICAgIHBhcmFtZXRlcl9uYW1lID0gcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lCisg
ICAgICAgICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6CiAgICAgICAgICAgICAgICAgcGFy
YW1ldGVyX25hbWUgPSAnb3B0XycgKyBwYXJhbWV0ZXJfbmFtZQotICAgICAgICAgICAgcGFyYW1l
dGVycy5hcHBlbmQoIiVzICVzIiAlIChDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX2Zvcm1hbF9v
dXRfcGFyYW1ldGVyKF9wYXJhbWV0ZXIpLCBwYXJhbWV0ZXJfbmFtZSkpCi0KLSAgICAgICAgICAg
IGlmIGlzaW5zdGFuY2UoX3BhcmFtZXRlci50eXBlLCBFbnVtVHlwZSkgYW5kIF9wYXJhbWV0ZXIu
dHlwZS5pc19hbm9ueW1vdXMgYW5kIF9wYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUgbm90IGluIHVz
ZWRfZW51bV9uYW1lczoKLSAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJh
dGVfYW5vbnltb3VzX2VudW1fZm9yX3BhcmFtZXRlcihfcGFyYW1ldGVyLCBjb21tYW5kKSkKLSAg
ICAgICAgICAgICAgICB1c2VkX2VudW1fbmFtZXMuYWRkKF9wYXJhbWV0ZXIucGFyYW1ldGVyX25h
bWUpCisgICAgICAgICAgICByZXR1cm5zLmFwcGVuZCgnJXMgLyogJXMgKi8nICUgKENwcEdlbmVy
YXRvci5jcHBfdHlwZV9mb3JfY29tbWFuZF9yZXR1cm5fZGVjbGFyYXRpb24ocGFyYW1ldGVyLnR5
cGUsIHBhcmFtZXRlci5pc19vcHRpb25hbCksIHBhcmFtZXRlcl9uYW1lKSkKIAogICAgICAgICBj
b21tYW5kX2FyZ3MgPSB7CiAgICAgICAgICAgICAnY29tbWFuZE5hbWUnOiBjb21tYW5kLmNvbW1h
bmRfbmFtZSwKLSAgICAgICAgICAgICdwYXJhbWV0ZXJzJzogIiwgIi5qb2luKHBhcmFtZXRlcnMp
CisgICAgICAgICAgICAncGFyYW1ldGVycyc6ICIsICIuam9pbihwYXJhbWV0ZXJzKSwKKyAgICAg
ICAgICAgICdyZXR1cm5zJzogIiwgIi5qb2luKHJldHVybnMpLAogICAgICAgICB9Ci0gICAgICAg
IGxpbmVzLmFwcGVuZCgnICAgIHZpcnR1YWwgdm9pZCAlKGNvbW1hbmROYW1lKXMoJShwYXJhbWV0
ZXJzKXMpID0gMDsnICUgY29tbWFuZF9hcmdzKQorICAgICAgICBpZiBsZW4ocmV0dXJucykgPT0g
MToKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIHZpcnR1YWwgUHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8JShyZXR1cm5zKXM+ICUoY29tbWFuZE5hbWUpcyglKHBhcmFtZXRlcnMpcykgPSAw
OycgJSBjb21tYW5kX2FyZ3MpCisgICAgICAgIGVsaWYgbGVuKHJldHVybnMpID4gMToKKyAgICAg
ICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIHZpcnR1YWwgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8
c3RkOjp0dXBsZTwlKHJldHVybnMpcz4+ICUoY29tbWFuZE5hbWUpcyglKHBhcmFtZXRlcnMpcykg
PSAwOycgJSBjb21tYW5kX2FyZ3MpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsaW5lcy5h
cHBlbmQoJyAgICB2aXJ0dWFsIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+ICUoY29tbWFu
ZE5hbWUpcyglKHBhcmFtZXRlcnMpcykgPSAwOycgJSBjb21tYW5kX2FyZ3MpCiAgICAgICAgIHJl
dHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGNvbW1hbmQuY29uZGl0aW9u
LCAnXG4nLmpvaW4obGluZXMpKQogCiAgICAgZGVmIF9nZW5lcmF0ZV9hc3luY19oYW5kbGVyX2Rl
Y2xhcmF0aW9uX2Zvcl9jb21tYW5kKHNlbGYsIGNvbW1hbmQpOgogICAgICAgICBjYWxsYmFja05h
bWUgPSAiJXNDYWxsYmFjayIgJSB1Y2ZpcnN0KGNvbW1hbmQuY29tbWFuZF9uYW1lKQogCi0gICAg
ICAgIGluX3BhcmFtZXRlcnMgPSBbXQotICAgICAgICBmb3IgX3BhcmFtZXRlciBpbiBjb21tYW5k
LmNhbGxfcGFyYW1ldGVyczoKLSAgICAgICAgICAgIHBhcmFtZXRlcl9uYW1lID0gJ2luXycgKyBf
cGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lCi0gICAgICAgICAgICBpZiBfcGFyYW1ldGVyLmlzX29w
dGlvbmFsOgorICAgICAgICBwYXJhbWV0ZXJzID0gW10KKyAgICAgICAgZm9yIHBhcmFtZXRlciBp
biBjb21tYW5kLmNhbGxfcGFyYW1ldGVyczoKKyAgICAgICAgICAgIHBhcmFtZXRlcl9uYW1lID0g
cGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lCisgICAgICAgICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0
aW9uYWw6CiAgICAgICAgICAgICAgICAgcGFyYW1ldGVyX25hbWUgPSAnb3B0XycgKyBwYXJhbWV0
ZXJfbmFtZQorICAgICAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoIiVzICVzIiAlIChDcHBHZW5l
cmF0b3IuY3BwX3R5cGVfZm9yX2NvbW1hbmRfcGFyYW1ldGVyKHBhcmFtZXRlci50eXBlLCBwYXJh
bWV0ZXIuaXNfb3B0aW9uYWwpLCBwYXJhbWV0ZXJfbmFtZSkpCisgICAgICAgIHBhcmFtZXRlcnMu
YXBwZW5kKCJSZWY8JXM+JiYiICUgY2FsbGJhY2tOYW1lKQogCi0gICAgICAgICAgICBpbl9wYXJh
bWV0ZXJzLmFwcGVuZCgiJXMgJXMiICUgKENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3JfdW5jaGVj
a2VkX2Zvcm1hbF9pbl9wYXJhbWV0ZXIoX3BhcmFtZXRlciksIHBhcmFtZXRlcl9uYW1lKSkKLSAg
ICAgICAgaW5fcGFyYW1ldGVycy5hcHBlbmQoIlJlZjwlcz4mJiBjYWxsYmFjayIgJSBjYWxsYmFj
a05hbWUpCi0KLSAgICAgICAgb3V0X3BhcmFtZXRlcnMgPSBbXQotICAgICAgICBmb3IgX3BhcmFt
ZXRlciBpbiBjb21tYW5kLnJldHVybl9wYXJhbWV0ZXJzOgotICAgICAgICAgICAgb3V0X3BhcmFt
ZXRlcnMuYXBwZW5kKCIlcyAlcyIgJSAoQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl9mb3JtYWxf
YXN5bmNfcGFyYW1ldGVyKF9wYXJhbWV0ZXIpLCBfcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKSkK
KyAgICAgICAgcmV0dXJucyA9IFtdCisgICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gY29tbWFuZC5y
ZXR1cm5fcGFyYW1ldGVyczoKKyAgICAgICAgICAgIHBhcmFtZXRlcl9uYW1lID0gcGFyYW1ldGVy
LnBhcmFtZXRlcl9uYW1lCisgICAgICAgICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6Cisg
ICAgICAgICAgICAgICAgcGFyYW1ldGVyX25hbWUgPSAnb3B0XycgKyBwYXJhbWV0ZXJfbmFtZQor
ICAgICAgICAgICAgcmV0dXJucy5hcHBlbmQoIiVzICVzIiAlIChDcHBHZW5lcmF0b3IuY3BwX3R5
cGVfZm9yX2NvbW1hbmRfcmV0dXJuX2FyZ3VtZW50KHBhcmFtZXRlci50eXBlLCBwYXJhbWV0ZXIu
aXNfb3B0aW9uYWwpLCBwYXJhbWV0ZXJfbmFtZSkpCiAKICAgICAgICAgY2xhc3NfY29tcG9uZW50
cyA9IFsnY2xhc3MnXQogICAgICAgICBleHBvcnRfbWFjcm8gPSBzZWxmLm1vZGVsKCkuZnJhbWV3
b3JrLnNldHRpbmcoJ2V4cG9ydF9tYWNybycsIE5vbmUpCkBAIC0xODgsOCArMTc0LDggQEAgY2xh
c3MgQ3BwQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAg
ICAgICAgICAgICdjbGFzc0FuZEV4cG9ydE1hY3JvJzogJyAnLmpvaW4oY2xhc3NfY29tcG9uZW50
cyksCiAgICAgICAgICAgICAnY2FsbGJhY2tOYW1lJzogY2FsbGJhY2tOYW1lLAogICAgICAgICAg
ICAgJ2NvbW1hbmROYW1lJzogY29tbWFuZC5jb21tYW5kX25hbWUsCi0gICAgICAgICAgICAnaW5Q
YXJhbWV0ZXJzJzogIiwgIi5qb2luKGluX3BhcmFtZXRlcnMpLAotICAgICAgICAgICAgJ291dFBh
cmFtZXRlcnMnOiAiLCAiLmpvaW4ob3V0X3BhcmFtZXRlcnMpLAorICAgICAgICAgICAgJ3BhcmFt
ZXRlcnMnOiAiLCAiLmpvaW4ocGFyYW1ldGVycyksCisgICAgICAgICAgICAncmV0dXJucyc6ICIs
ICIuam9pbihyZXR1cm5zKSwKICAgICAgICAgfQogCiAgICAgICAgIHJldHVybiBzZWxmLndyYXBf
d2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGNvbW1hbmQuY29uZGl0aW9uLCBUZW1wbGF0ZShDcHBU
ZW1wbGF0ZXMuQmFja2VuZERpc3BhdGNoZXJIZWFkZXJBc3luY0NvbW1hbmREZWNsYXJhdGlvbiku
c3Vic3RpdHV0ZShOb25lLCAqKmNvbW1hbmRfYXJncykpCkBAIC0yMjMsNCArMjA5LDQgQEAgY2xh
c3MgQ3BwQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAg
ICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZG9tYWluLmNv
bmRpdGlvbiwgVGVtcGxhdGUoQ3BwVGVtcGxhdGVzLkJhY2tlbmREaXNwYXRjaGVySGVhZGVyRG9t
YWluRGlzcGF0Y2hlckRlY2xhcmF0aW9uKS5zdWJzdGl0dXRlKE5vbmUsICoqaGFuZGxlcl9hcmdz
KSkKIAogICAgIGRlZiBfZ2VuZXJhdGVfZGlzcGF0Y2hlcl9kZWNsYXJhdGlvbl9mb3JfY29tbWFu
ZChzZWxmLCBjb21tYW5kKToKLSAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zv
cl9jb25kaXRpb24oY29tbWFuZC5jb25kaXRpb24sICIgICAgdm9pZCAlcyhsb25nIHJlcXVlc3RJ
ZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsiICUgY29tbWFuZC5jb21tYW5k
X25hbWUpCisgICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9u
KGNvbW1hbmQuY29uZGl0aW9uLCAiICAgIHZvaWQgJXMobG9uZyBwcm90b2NsX2NhbGxJZCwgUmVm
UHRyPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9wYXJhbWV0ZXJzKTsiICUgY29tbWFuZC5jb21t
YW5kX25hbWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0
aW9uLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4v
Z2VuZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQppbmRleCBk
YWYxOWM5NTBmYjA3YWFhMmQ4YjMxYTJmNDljN2NhYjUwNzAyYzYwLi44ZGZiMjk0YWI5ZDI2ZTRl
ODU1ZjVlMTI5ZGI4MzFlN2Y5MDFhYmRlIDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRj
aGVyX2ltcGxlbWVudGF0aW9uLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVt
ZW50YXRpb24ucHkKQEAgLTMzLDEyICszMywxMiBAQCB0cnk6CiAgICAgZnJvbSAuY3BwX2dlbmVy
YXRvciBpbXBvcnQgQ3BwR2VuZXJhdG9yCiAgICAgZnJvbSAuY3BwX2dlbmVyYXRvcl90ZW1wbGF0
ZXMgaW1wb3J0IENwcEdlbmVyYXRvclRlbXBsYXRlcyBhcyBDcHBUZW1wbGF0ZXMKICAgICBmcm9t
IC5nZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvciwgdWNmaXJzdAotICAgIGZyb20gLm1vZGVscyBp
bXBvcnQgT2JqZWN0VHlwZSwgQXJyYXlUeXBlCisgICAgZnJvbSAubW9kZWxzIGltcG9ydCBPYmpl
Y3RUeXBlLCBBcnJheVR5cGUsIEFsaWFzZWRUeXBlLCBFbnVtVHlwZQogZXhjZXB0IFZhbHVlRXJy
b3I6CiAgICAgZnJvbSBjcHBfZ2VuZXJhdG9yIGltcG9ydCBDcHBHZW5lcmF0b3IKICAgICBmcm9t
IGNwcF9nZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBDcHBHZW5lcmF0b3JUZW1wbGF0ZXMgYXMg
Q3BwVGVtcGxhdGVzCiAgICAgZnJvbSBnZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvciwgdWNmaXJz
dAotICAgIGZyb20gbW9kZWxzIGltcG9ydCBPYmplY3RUeXBlLCBBcnJheVR5cGUKKyAgICBmcm9t
IG1vZGVscyBpbXBvcnQgT2JqZWN0VHlwZSwgQXJyYXlUeXBlLCBBbGlhc2VkVHlwZSwgRW51bVR5
cGUKIAogbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2JhbCcpCiAKQEAgLTgwLDExICs4MCw4
IEBAIGNsYXNzIENwcEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IoQ3Bw
R2VuZXJhdG9yKToKICAgICBkZWYgX2dlbmVyYXRlX3NlY29uZGFyeV9oZWFkZXJfaW5jbHVkZXMo
c2VsZik6CiAgICAgICAgIGhlYWRlcl9pbmNsdWRlcyA9IFsKICAgICAgICAgICAgIChbIkphdmFT
Y3JpcHRDb3JlIiwgIldlYktpdCJdLCAoIkphdmFTY3JpcHRDb3JlIiwgImluc3BlY3Rvci9JbnNw
ZWN0b3JGcm9udGVuZFJvdXRlci5oIikpLAotICAgICAgICAgICAgKFsiSmF2YVNjcmlwdENvcmUi
LCAiV2ViS2l0Il0sICgiV1RGIiwgInd0Zi9KU09OVmFsdWVzLmgiKSksCiAgICAgICAgICAgICAo
WyJKYXZhU2NyaXB0Q29yZSIsICJXZWJLaXQiXSwgKCJXVEYiLCAid3RmL05ldmVyRGVzdHJveWVk
LmgiKSksCi0gICAgICAgICAgICAoWyJKYXZhU2NyaXB0Q29yZSIsICJXZWJLaXQiXSwgKCJXVEYi
LCAid3RmL3RleHQvQ1N0cmluZy5oIikpCiAgICAgICAgIF0KLQogICAgICAgICByZXR1cm4gc2Vs
Zi5nZW5lcmF0ZV9pbmNsdWRlc19mcm9tX2VudHJpZXMoaGVhZGVyX2luY2x1ZGVzKQogCiAKQEAg
LTEyMyw4ICsxMjAsOCBAQCBjbGFzcyBDcHBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9u
R2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAgIGNhc2VzID0gW10KIAogICAgICAgICBm
aXJzdF9jb21tYW5kX3N0cmluZyA9ICJcbiIuam9pbihbCi0gICAgICAgICAgICAnICAgIGlmICht
ZXRob2QgPT0gIiVzIikgeycgJSBjb21tYW5kc1swXS5jb21tYW5kX25hbWUsCi0gICAgICAgICAg
ICAnICAgICAgICAlcyhyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykpOycgJSBjb21tYW5k
c1swXS5jb21tYW5kX25hbWUsCisgICAgICAgICAgICAnICAgIGlmIChwcm90b2NvbF9tZXRob2Qg
PT0gIiVzIikgeycgJSBjb21tYW5kc1swXS5jb21tYW5kX25hbWUsCisgICAgICAgICAgICAnICAg
ICAgICAlcyhwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJvdG9jb2xfcGFyYW1ldGVycykpOycg
JSBjb21tYW5kc1swXS5jb21tYW5kX25hbWUsCiAgICAgICAgICAgICAnICAgICAgICByZXR1cm47
JywKICAgICAgICAgICAgICcgICAgfScsCiAgICAgICAgIF0pCkBAIC0xMzIsOCArMTI5LDggQEAg
Y2xhc3MgQ3BwQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihDcHBHZW5l
cmF0b3IpOgogCiAgICAgICAgIGZvciBjb21tYW5kIGluIGNvbW1hbmRzWzE6XToKICAgICAgICAg
ICAgIGFkZGl0aW9uYWxfY29tbWFuZF9zdHJpbmcgPSAiXG4iLmpvaW4oWwotICAgICAgICAgICAg
ICAgICcgICAgaWYgKG1ldGhvZCA9PSAiJXMiKSB7JyAlIGNvbW1hbmQuY29tbWFuZF9uYW1lLAot
ICAgICAgICAgICAgICAgICcgICAgICAgICVzKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJz
KSk7JyAlIGNvbW1hbmQuY29tbWFuZF9uYW1lLAorICAgICAgICAgICAgICAgICcgICAgaWYgKHBy
b3RvY29sX21ldGhvZCA9PSAiJXMiKSB7JyAlIGNvbW1hbmQuY29tbWFuZF9uYW1lLAorICAgICAg
ICAgICAgICAgICcgICAgICAgICVzKHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9w
YXJhbWV0ZXJzKSk7JyAlIGNvbW1hbmQuY29tbWFuZF9uYW1lLAogICAgICAgICAgICAgICAgICcg
ICAgICAgIHJldHVybjsnLAogICAgICAgICAgICAgICAgICcgICAgfScsCiAgICAgICAgICAgICBd
KQpAQCAtMTY1LDE0NiArMTYyLDEzNiBAQCBjbGFzcyBDcHBCYWNrZW5kRGlzcGF0Y2hlckltcGxl
bWVudGF0aW9uR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAgIHJldHVybiBUZW1wbGF0
ZShDcHBUZW1wbGF0ZXMuQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkxhcmdlU3dpdGNo
KS5zdWJzdGl0dXRlKE5vbmUsICoqc3dpdGNoX2FyZ3MpCiAKICAgICBkZWYgX2dlbmVyYXRlX2Fz
eW5jX2Rpc3BhdGNoZXJfY2xhc3NfZm9yX2RvbWFpbihzZWxmLCBjb21tYW5kLCBkb21haW4pOgot
ICAgICAgICBvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRzID0gW10KLSAgICAgICAgZm9ybWFsX3Bh
cmFtZXRlcnMgPSBbXQorICAgICAgICByZXR1cm5fYXNzaWdubWVudHMgPSBbXQorICAgICAgICBj
YWxsYmFja19wYXJhbWV0ZXJzID0gW10KIAogICAgICAgICBmb3IgcGFyYW1ldGVyIGluIGNvbW1h
bmQucmV0dXJuX3BhcmFtZXRlcnM6CisgICAgICAgICAgICBwYXJhbWV0ZXJfbmFtZSA9IHBhcmFt
ZXRlci5wYXJhbWV0ZXJfbmFtZQorICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFs
OgorICAgICAgICAgICAgICAgIHBhcmFtZXRlcl9uYW1lID0gJ29wdF8nICsgcGFyYW1ldGVyX25h
bWUKKworICAgICAgICAgICAgcGFyYW1ldGVyX3ZhbHVlID0gcGFyYW1ldGVyX25hbWUKKworICAg
ICAgICAgICAgX3R5cGUgPSBwYXJhbWV0ZXIudHlwZQorICAgICAgICAgICAgaWYgaXNpbnN0YW5j
ZShfdHlwZSwgQWxpYXNlZFR5cGUpOgorICAgICAgICAgICAgICAgIF90eXBlID0gX3R5cGUuYWxp
YXNlZF90eXBlCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBFbnVtVHlwZSkgYW5k
IF90eXBlLmlzX2Fub255bW91czoKKyAgICAgICAgICAgICAgICBfdHlwZSA9IF90eXBlLnByaW1p
dGl2ZV90eXBlCisKKyAgICAgICAgICAgIGlmIF90eXBlLmlzX2VudW0oKToKKyAgICAgICAgICAg
ICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6CisgICAgICAgICAgICAgICAgICAgIHBhcmFt
ZXRlcl92YWx1ZSA9ICcqJyArIHBhcmFtZXRlcl92YWx1ZQorICAgICAgICAgICAgICAgIHBhcmFt
ZXRlcl92YWx1ZSA9ICdQcm90b2NvbDo6JXM6OmdldEVudW1Db25zdGFudFZhbHVlKCVzKScgJSAo
c2VsZi5oZWxwZXJzX25hbWVzcGFjZSgpLCBwYXJhbWV0ZXJfdmFsdWUpCisgICAgICAgICAgICBl
bGlmIENwcEdlbmVyYXRvci5zaG91bGRfcmVsZWFzZV9hcmd1bWVudChfdHlwZSwgcGFyYW1ldGVy
LmlzX29wdGlvbmFsKToKKyAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfdmFsdWUgPSBwYXJhbWV0
ZXJfdmFsdWUgKyAnLnJlbGVhc2VOb25OdWxsKCknCisgICAgICAgICAgICBlbGlmIENwcEdlbmVy
YXRvci5zaG91bGRfZGVyZWZlcmVuY2VfYXJndW1lbnQoX3R5cGUsIHBhcmFtZXRlci5pc19vcHRp
b25hbCk6CisgICAgICAgICAgICAgICAgcGFyYW1ldGVyX3ZhbHVlID0gJyonICsgcGFyYW1ldGVy
X3ZhbHVlCisgICAgICAgICAgICBlbGlmIENwcEdlbmVyYXRvci5zaG91bGRfbW92ZV9hcmd1bWVu
dChfdHlwZSwgcGFyYW1ldGVyLmlzX29wdGlvbmFsKToKKyAgICAgICAgICAgICAgICBwYXJhbWV0
ZXJfdmFsdWUgPSAnV1RGTW92ZSglcyknICUgcGFyYW1ldGVyX3ZhbHVlCisKICAgICAgICAgICAg
IHBhcmFtX2FyZ3MgPSB7Ci0gICAgICAgICAgICAgICAgJ2tleWVkU2V0TWV0aG9kJzogQ3BwR2Vu
ZXJhdG9yLmNwcF9zZXR0ZXJfbWV0aG9kX2Zvcl90eXBlKHBhcmFtZXRlci50eXBlKSwKKyAgICAg
ICAgICAgICAgICAna2V5ZWRTZXRNZXRob2QnOiBDcHBHZW5lcmF0b3IuY3BwX3NldHRlcl9tZXRo
b2RfZm9yX3R5cGUoX3R5cGUpLAogICAgICAgICAgICAgICAgICdwYXJhbWV0ZXJLZXknOiBwYXJh
bWV0ZXIucGFyYW1ldGVyX25hbWUsCi0gICAgICAgICAgICAgICAgJ3BhcmFtZXRlck5hbWUnOiBw
YXJhbWV0ZXIucGFyYW1ldGVyX25hbWUsCi0gICAgICAgICAgICAgICAgJ3BhcmFtZXRlclR5cGUn
OiBDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX3N0YWNrX2luX3BhcmFtZXRlcihwYXJhbWV0ZXIp
LAotICAgICAgICAgICAgICAgICdoZWxwZXJzTmFtZXNwYWNlJzogc2VsZi5oZWxwZXJzX25hbWVz
cGFjZSgpLAorICAgICAgICAgICAgICAgICdwYXJhbWV0ZXJOYW1lJzogcGFyYW1ldGVyX25hbWUs
CisgICAgICAgICAgICAgICAgJ3BhcmFtZXRlclZhbHVlJzogcGFyYW1ldGVyX3ZhbHVlLAogICAg
ICAgICAgICAgfQogCi0gICAgICAgICAgICBmb3JtYWxfcGFyYW1ldGVycy5hcHBlbmQoJyVzICVz
JyAlIChDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX2Zvcm1hbF9hc3luY19wYXJhbWV0ZXIocGFy
YW1ldGVyKSwgcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKSkKKyAgICAgICAgICAgIGNhbGxiYWNr
X3BhcmFtZXRlcnMuYXBwZW5kKCclcyAlcycgJSAoQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl9j
b21tYW5kX3JldHVybl9hcmd1bWVudChfdHlwZSwgcGFyYW1ldGVyLmlzX29wdGlvbmFsKSwgcGFy
YW1ldGVyX25hbWUpKQogCiAgICAgICAgICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6Ci0g
ICAgICAgICAgICAgICAgaWYgQ3BwR2VuZXJhdG9yLnNob3VsZF91c2Vfd3JhcHBlcl9mb3JfcmV0
dXJuX3R5cGUocGFyYW1ldGVyLnR5cGUpOgotICAgICAgICAgICAgICAgICAgICBvdXRfcGFyYW1l
dGVyX2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAgIGlmICglKHBhcmFtZXRlck5hbWUpcy5oYXNWYWx1
ZSgpKScgJSBwYXJhbV9hcmdzKQotICAgICAgICAgICAgICAgICAgICBvdXRfcGFyYW1ldGVyX2Fz
c2lnbm1lbnRzLmFwcGVuZCgnICAgICAgICBqc29uTWVzc2FnZS0+JShrZXllZFNldE1ldGhvZClz
KCIlKHBhcmFtZXRlcktleSlzIl9zLCAqJShwYXJhbWV0ZXJOYW1lKXMpOycgJSBwYXJhbV9hcmdz
KQotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIG91dF9wYXJhbWV0
ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAgaWYgKCUocGFyYW1ldGVyTmFtZSlzKScgJSBwYXJh
bV9hcmdzKQotICAgICAgICAgICAgICAgICAgICBvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRzLmFw
cGVuZCgnICAgICAgICBqc29uTWVzc2FnZS0+JShrZXllZFNldE1ldGhvZClzKCIlKHBhcmFtZXRl
cktleSlzIl9zLCAlKHBhcmFtZXRlck5hbWUpcyk7JyAlIHBhcmFtX2FyZ3MpCi0gICAgICAgICAg
ICBlbGlmIHBhcmFtZXRlci50eXBlLmlzX2VudW0oKToKLSAgICAgICAgICAgICAgICBvdXRfcGFy
YW1ldGVyX2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAgIGpzb25NZXNzYWdlLT4lKGtleWVkU2V0TWV0
aG9kKXMoIiUocGFyYW1ldGVyS2V5KXMiX3MsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OiUoaGVscGVy
c05hbWVzcGFjZSlzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZSglKHBhcmFtZXRlck5hbWUpcykpOycg
JSBwYXJhbV9hcmdzKQorICAgICAgICAgICAgICAgIHJldHVybl9hc3NpZ25tZW50cy5hcHBlbmQo
JyAgICBpZiAoISElKHBhcmFtZXRlck5hbWUpcyknICUgcGFyYW1fYXJncykKKyAgICAgICAgICAg
ICAgICByZXR1cm5fYXNzaWdubWVudHMuYXBwZW5kKCcgICAgICAgIHByb3RvY29sX2pzb25NZXNz
YWdlLT4lKGtleWVkU2V0TWV0aG9kKXMoIiUocGFyYW1ldGVyS2V5KXMiX3MsICUocGFyYW1ldGVy
VmFsdWUpcyk7JyAlIHBhcmFtX2FyZ3MpCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAg
ICAgIG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAganNvbk1lc3NhZ2UtPiUo
a2V5ZWRTZXRNZXRob2QpcygiJShwYXJhbWV0ZXJLZXkpcyJfcywgJShwYXJhbWV0ZXJOYW1lKXMp
OycgJSBwYXJhbV9hcmdzKQorICAgICAgICAgICAgICAgIHJldHVybl9hc3NpZ25tZW50cy5hcHBl
bmQoJyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+JShrZXllZFNldE1ldGhvZClzKCIlKHBhcmFt
ZXRlcktleSlzIl9zLCAlKHBhcmFtZXRlclZhbHVlKXMpOycgJSBwYXJhbV9hcmdzKQogCiAgICAg
ICAgIGFzeW5jX2FyZ3MgPSB7CiAgICAgICAgICAgICAnZG9tYWluTmFtZSc6IGRvbWFpbi5kb21h
aW5fbmFtZSwKICAgICAgICAgICAgICdjYWxsYmFja05hbWUnOiB1Y2ZpcnN0KGNvbW1hbmQuY29t
bWFuZF9uYW1lKSArICdDYWxsYmFjaycsCi0gICAgICAgICAgICAnZm9ybWFsUGFyYW1ldGVycyc6
ICIsICIuam9pbihmb3JtYWxfcGFyYW1ldGVycyksCi0gICAgICAgICAgICAnb3V0UGFyYW1ldGVy
QXNzaWdubWVudHMnOiAiXG4iLmpvaW4ob3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cykKKyAgICAg
ICAgICAgICdjYWxsYmFja1BhcmFtZXRlcnMnOiAiLCAiLmpvaW4oY2FsbGJhY2tfcGFyYW1ldGVy
cyksCisgICAgICAgICAgICAncmV0dXJuQXNzaWdubWVudHMnOiAiXG4iLmpvaW4ocmV0dXJuX2Fz
c2lnbm1lbnRzKQogICAgICAgICB9CiAgICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFy
ZF9mb3JfY29uZGl0aW9uKGNvbW1hbmQuY29uZGl0aW9uLCBUZW1wbGF0ZShDcHBUZW1wbGF0ZXMu
QmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkFzeW5jQ29tbWFuZCkuc3Vic3RpdHV0ZShO
b25lLCAqKmFzeW5jX2FyZ3MpKQogCiAgICAgZGVmIF9nZW5lcmF0ZV9kaXNwYXRjaGVyX2ltcGxl
bWVudGF0aW9uX2Zvcl9jb21tYW5kKHNlbGYsIGNvbW1hbmQsIGRvbWFpbik6Ci0gICAgICAgIGlu
X3BhcmFtZXRlcl9kZWNsYXJhdGlvbnMgPSBbXQotICAgICAgICBvdXRfcGFyYW1ldGVyX2RlY2xh
cmF0aW9ucyA9IFtdCi0gICAgICAgIG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMgPSBbXQotICAg
ICAgICBhbHRlcm5hdGVfZGlzcGF0Y2hlcl9tZXRob2RfcGFyYW1ldGVycyA9IFsncmVxdWVzdElk
J10KKyAgICAgICAgcGFyYW1ldGVyX2RlY2xhcmF0aW9ucyA9IFtdCisgICAgICAgIHBhcmFtZXRl
cl9lbnVtX3Jlc29sdXRpb25zID0gW10KKyAgICAgICAgYWx0ZXJuYXRlX2Rpc3BhdGNoZXJfbWV0
aG9kX3BhcmFtZXRlcnMgPSBbJ3Byb3RvY29sX2NhbGxJZCddCiAgICAgICAgIG1ldGhvZF9wYXJh
bWV0ZXJzID0gW10KLSAgICAgICAgaWYgbm90IGNvbW1hbmQuaXNfYXN5bmM6Ci0gICAgICAgICAg
ICBtZXRob2RfcGFyYW1ldGVycy5hcHBlbmQoJ2Vycm9yJykKIAogICAgICAgICBmb3IgcGFyYW1l
dGVyIGluIGNvbW1hbmQuY2FsbF9wYXJhbWV0ZXJzOgotICAgICAgICAgICAgcGFyYW1ldGVyX25h
bWUgPSAnaW5fJyArIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZQorICAgICAgICAgICAgcGFyYW1l
dGVyX25hbWUgPSBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUKICAgICAgICAgICAgIGlmIHBhcmFt
ZXRlci5pc19vcHRpb25hbDoKICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfbmFtZSA9ICdvcHRf
JyArIHBhcmFtZXRlcl9uYW1lCisgICAgICAgICAgICBwYXJhbWV0ZXJfbmFtZSA9ICdpbl8nICsg
cGFyYW1ldGVyX25hbWUKIAotICAgICAgICAgICAgb3V0X3N1Y2Nlc3NfYXJndW1lbnQgPSAnbnVs
bHB0cicKLSAgICAgICAgICAgIGlmIHBhcmFtZXRlci5pc19vcHRpb25hbDoKLSAgICAgICAgICAg
ICAgICBvdXRfc3VjY2Vzc19hcmd1bWVudCA9ICcmJXNfdmFsdWVGb3VuZCcgJSBwYXJhbWV0ZXJf
bmFtZQotICAgICAgICAgICAgICAgIGluX3BhcmFtZXRlcl9kZWNsYXJhdGlvbnMuYXBwZW5kKCcg
ICAgYm9vbCAlc192YWx1ZUZvdW5kID0gZmFsc2U7JyAlIHBhcmFtZXRlcl9uYW1lKQorICAgICAg
ICAgICAgdmFyaWFibGVfbmFtZSA9IHBhcmFtZXRlcl9uYW1lCiAKLSAgICAgICAgICAgICMgTm93
IGFkZCBhcHByb3ByaWF0ZSBvcGVyYXRvcnMuCi0gICAgICAgICAgICBwYXJhbWV0ZXJfZXhwcmVz
c2lvbiA9IHBhcmFtZXRlcl9uYW1lCisgICAgICAgICAgICBfdHlwZSA9IHBhcmFtZXRlci50eXBl
CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBBbGlhc2VkVHlwZSk6CisgICAgICAg
ICAgICAgICAgX3R5cGUgPSBfdHlwZS5hbGlhc2VkX3R5cGUKKyAgICAgICAgICAgIGlmIGlzaW5z
dGFuY2UoX3R5cGUsIEVudW1UeXBlKSBhbmQgX3R5cGUuaXNfYW5vbnltb3VzOgorICAgICAgICAg
ICAgICAgIF90eXBlID0gX3R5cGUucHJpbWl0aXZlX3R5cGUKIAotICAgICAgICAgICAgaWYgQ3Bw
R2VuZXJhdG9yLnNob3VsZF91c2VfcmVmZXJlbmNlc19mb3JfdHlwZShwYXJhbWV0ZXIudHlwZSk6
Ci0gICAgICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgotICAgICAgICAgICAg
ICAgICAgICBwYXJhbWV0ZXJfZXhwcmVzc2lvbiA9ICclcy5nZXQoKScgJSBwYXJhbWV0ZXJfZXhw
cmVzc2lvbgotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICMgVGhp
cyBhc3N1bWVzIHRoYXQgd2UgaGF2ZSBhbHJlYWR5IHByb3ZlZCB0aGUgb2JqZWN0IGlzIG5vbi1u
dWxsLgotICAgICAgICAgICAgICAgICAgICAjIElmIGEgcmVxdWlyZWQgcHJvcGVydHkgaXMgbWlz
c2luZywgSW5zcGVjdG9yQmFja2VuZDo6Z2V0T2JqZWN0IHdpbGwKLSAgICAgICAgICAgICAgICAg
ICAgIyBhcHBlbmQgYSBwcm90b2NvbCBlcnJvciwgYW5kIHRoZSBtZXRob2QgZGlzcGF0Y2hlciB3
aWxsIHJldHVybiB3aXRob3V0Ci0gICAgICAgICAgICAgICAgICAgICMgaW52b2tpbmcgdGhlIGJh
Y2tlbmQgbWV0aG9kIChhbmQgZGVyZWZlcmVuY2luZyB0aGUgb2JqZWN0KS4KLSAgICAgICAgICAg
ICAgICAgICAgcGFyYW1ldGVyX2V4cHJlc3Npb24gPSAnKiVzJyAlIHBhcmFtZXRlcl9leHByZXNz
aW9uCi0gICAgICAgICAgICBlbGlmIHBhcmFtZXRlci5pc19vcHRpb25hbDoKLSAgICAgICAgICAg
ICAgICBwYXJhbWV0ZXJfZXhwcmVzc2lvbiA9ICcmJXMnICUgcGFyYW1ldGVyX2V4cHJlc3Npb24K
KyAgICAgICAgICAgIGlmIF90eXBlLmlzX2VudW0oKToKKyAgICAgICAgICAgICAgICBwYXJhbWV0
ZXJfbmFtZSA9IHBhcmFtZXRlcl9uYW1lICsgJ19qc29uJwogCi0gICAgICAgICAgICBwYXJhbV9h
cmdzID0gewotICAgICAgICAgICAgICAgICdwYXJhbWV0ZXJUeXBlJzogQ3BwR2VuZXJhdG9yLmNw
cF90eXBlX2Zvcl9zdGFja19pbl9wYXJhbWV0ZXIocGFyYW1ldGVyKSwKLSAgICAgICAgICAgICAg
ICAncGFyYW1ldGVyS2V5JzogcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lLAotICAgICAgICAgICAg
ICAgICdwYXJhbWV0ZXJOYW1lJzogcGFyYW1ldGVyX25hbWUsCi0gICAgICAgICAgICAgICAgJ3Bh
cmFtZXRlckV4cHJlc3Npb24nOiBwYXJhbWV0ZXJfZXhwcmVzc2lvbiwKLSAgICAgICAgICAgICAg
ICAna2V5ZWRHZXRNZXRob2QnOiBDcHBHZW5lcmF0b3IuY3BwX2dldHRlcl9tZXRob2RfZm9yX3R5
cGUocGFyYW1ldGVyLnR5cGUpLAotICAgICAgICAgICAgICAgICdzdWNjZXNzT3V0UGFyYW0nOiBv
dXRfc3VjY2Vzc19hcmd1bWVudAotICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGFsdGVy
bmF0ZV9kaXNwYXRjaGVyX21ldGhvZF9wYXJhbWV0ZXJzLmFwcGVuZChwYXJhbWV0ZXJfbmFtZSkK
IAotICAgICAgICAgICAgaW5fcGFyYW1ldGVyX2RlY2xhcmF0aW9ucy5hcHBlbmQoJyAgICAlKHBh
cmFtZXRlclR5cGUpcyAlKHBhcmFtZXRlck5hbWUpcyA9IG1fYmFja2VuZERpc3BhdGNoZXItPiUo
a2V5ZWRHZXRNZXRob2QpcyhwYXJhbWV0ZXJzLmdldCgpLCAiJShwYXJhbWV0ZXJLZXkpcyJfcywg
JShzdWNjZXNzT3V0UGFyYW0pcyk7JyAlIHBhcmFtX2FyZ3MpCi0KLSAgICAgICAgICAgIGlmIHBh
cmFtZXRlci5pc19vcHRpb25hbDoKLSAgICAgICAgICAgICAgICBvcHRpb25hbF9pbl9wYXJhbWV0
ZXJfc3RyaW5nID0gJyUocGFyYW1ldGVyTmFtZSlzX3ZhbHVlRm91bmQgPyAlKHBhcmFtZXRlckV4
cHJlc3Npb24pcyA6IG51bGxwdHInICUgcGFyYW1fYXJncwotICAgICAgICAgICAgICAgIGFsdGVy
bmF0ZV9kaXNwYXRjaGVyX21ldGhvZF9wYXJhbWV0ZXJzLmFwcGVuZChvcHRpb25hbF9pbl9wYXJh
bWV0ZXJfc3RyaW5nKQotICAgICAgICAgICAgICAgIG1ldGhvZF9wYXJhbWV0ZXJzLmFwcGVuZChv
cHRpb25hbF9pbl9wYXJhbWV0ZXJfc3RyaW5nKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAg
ICAgICAgICBhbHRlcm5hdGVfZGlzcGF0Y2hlcl9tZXRob2RfcGFyYW1ldGVycy5hcHBlbmQocGFy
YW1ldGVyX2V4cHJlc3Npb24pCi0gICAgICAgICAgICAgICAgbWV0aG9kX3BhcmFtZXRlcnMuYXBw
ZW5kKHBhcmFtZXRlcl9leHByZXNzaW9uKQotCi0gICAgICAgIGlmIGNvbW1hbmQuaXNfYXN5bmM6
Ci0gICAgICAgICAgICBhc3luY19hcmdzID0gewotICAgICAgICAgICAgICAgICdkb21haW5OYW1l
JzogZG9tYWluLmRvbWFpbl9uYW1lLAotICAgICAgICAgICAgICAgICdjYWxsYmFja05hbWUnOiB1
Y2ZpcnN0KGNvbW1hbmQuY29tbWFuZF9uYW1lKSArICdDYWxsYmFjaycKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgb3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICAgICAg
Y2FsbGJhY2stPmRpc2FibGUoKTsnKQotICAgICAgICAgICAgb3V0X3BhcmFtZXRlcl9hc3NpZ25t
ZW50cy5hcHBlbmQoJyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xF
cnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsnKQotICAgICAgICAg
ICAgb3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICAgICAgcmV0dXJuOycpCi0g
ICAgICAgICAgICBtZXRob2RfcGFyYW1ldGVycy5hcHBlbmQoJ2NhbGxiYWNrLmNvcHlSZWYoKScp
Ci0KLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gY29tbWFuZC5y
ZXR1cm5fcGFyYW1ldGVyczoKLSAgICAgICAgICAgICAgICBwYXJhbV9hcmdzID0gewotICAgICAg
ICAgICAgICAgICAgICAncGFyYW1ldGVyVHlwZSc6IENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3Jf
c3RhY2tfb3V0X3BhcmFtZXRlcihwYXJhbWV0ZXIpLAotICAgICAgICAgICAgICAgICAgICAncGFy
YW1ldGVyS2V5JzogcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lLAotICAgICAgICAgICAgICAgICAg
ICAncGFyYW1ldGVyTmFtZSc6IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwKLSAgICAgICAgICAg
ICAgICAgICAgJ2tleWVkU2V0TWV0aG9kJzogQ3BwR2VuZXJhdG9yLmNwcF9zZXR0ZXJfbWV0aG9k
X2Zvcl90eXBlKHBhcmFtZXRlci50eXBlKSwKKyAgICAgICAgICAgICAgICBlbnVtX2FyZ3MgPSB7
CiAgICAgICAgICAgICAgICAgICAgICdoZWxwZXJzTmFtZXNwYWNlJzogc2VsZi5oZWxwZXJzX25h
bWVzcGFjZSgpLAorICAgICAgICAgICAgICAgICAgICAncGFyYW1ldGVyS2V5JzogcGFyYW1ldGVy
LnBhcmFtZXRlcl9uYW1lLAorICAgICAgICAgICAgICAgICAgICAnZW51bVR5cGUnOiBDcHBHZW5l
cmF0b3IuY3BwX3Byb3RvY29sX3R5cGVfZm9yX3R5cGUoX3R5cGUpLAorICAgICAgICAgICAgICAg
ICAgICAnZW51bVZhcmlhYmxlTmFtZSc6IHZhcmlhYmxlX25hbWUsCisgICAgICAgICAgICAgICAg
ICAgICdzdHJpbmdWYXJpYWJsZU5hbWUnOiBwYXJhbWV0ZXJfbmFtZSwKICAgICAgICAgICAgICAg
ICB9CiAKLSAgICAgICAgICAgICAgICBvdXRfcGFyYW1ldGVyX2RlY2xhcmF0aW9ucy5hcHBlbmQo
JyAgICAlKHBhcmFtZXRlclR5cGUpcyBvdXRfJShwYXJhbWV0ZXJOYW1lKXM7JyAlIHBhcmFtX2Fy
Z3MpCisgICAgICAgICAgICAgICAgaWYgbGVuKHBhcmFtZXRlcl9lbnVtX3Jlc29sdXRpb25zKToK
KyAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyX2VudW1fcmVzb2x1dGlvbnMuYXBwZW5kKCcn
KQorICAgICAgICAgICAgICAgIHBhcmFtZXRlcl9lbnVtX3Jlc29sdXRpb25zLmFwcGVuZCgnICAg
IGF1dG8gJShlbnVtVmFyaWFibGVOYW1lKXMgPSBQcm90b2NvbDo6JShoZWxwZXJzTmFtZXNwYWNl
KXM6OnBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzwlKGVudW1UeXBlKXM+KCUoc3RyaW5nVmFyaWFi
bGVOYW1lKXMpOycgJSBlbnVtX2FyZ3MpCiAgICAgICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlz
X29wdGlvbmFsOgotICAgICAgICAgICAgICAgICAgICBpZiBDcHBHZW5lcmF0b3Iuc2hvdWxkX3Vz
ZV93cmFwcGVyX2Zvcl9yZXR1cm5fdHlwZShwYXJhbWV0ZXIudHlwZSk6Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAgICAgICBpZiAo
b3V0XyUocGFyYW1ldGVyTmFtZSlzLmhhc1ZhbHVlKCkpJyAlIHBhcmFtX2FyZ3MpCi0gICAgICAg
ICAgICAgICAgICAgICAgICBvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAgICAg
ICAgICAgcmVzdWx0LT4lKGtleWVkU2V0TWV0aG9kKXMoIiUocGFyYW1ldGVyS2V5KXMiX3MsICpv
dXRfJShwYXJhbWV0ZXJOYW1lKXMpOycgJSBwYXJhbV9hcmdzKQotICAgICAgICAgICAgICAgICAg
ICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgb3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50
cy5hcHBlbmQoJyAgICAgICAgaWYgKG91dF8lKHBhcmFtZXRlck5hbWUpcyknICUgcGFyYW1fYXJn
cykKLSAgICAgICAgICAgICAgICAgICAgICAgIG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBw
ZW5kKCcgICAgICAgICAgICByZXN1bHQtPiUoa2V5ZWRTZXRNZXRob2QpcygiJShwYXJhbWV0ZXJL
ZXkpcyJfcywgb3V0XyUocGFyYW1ldGVyTmFtZSlzKTsnICUgcGFyYW1fYXJncykKLSAgICAgICAg
ICAgICAgICBlbGlmIHBhcmFtZXRlci50eXBlLmlzX2VudW0oKToKLSAgICAgICAgICAgICAgICAg
ICAgb3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICAgICAgcmVzdWx0LT4lKGtl
eWVkU2V0TWV0aG9kKXMoIiUocGFyYW1ldGVyS2V5KXMiX3MsIEluc3BlY3Rvcjo6UHJvdG9jb2w6
OiUoaGVscGVyc05hbWVzcGFjZSlzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShvdXRfJShwYXJhbWV0
ZXJOYW1lKXMpKTsnICUgcGFyYW1fYXJncykKKyAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVy
X2V4cHJlc3Npb24gPSAnV1RGTW92ZSglcyknICUgdmFyaWFibGVfbmFtZQogICAgICAgICAgICAg
ICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMu
YXBwZW5kKCcgICAgICAgIHJlc3VsdC0+JShrZXllZFNldE1ldGhvZClzKCIlKHBhcmFtZXRlcktl
eSlzIl9zLCBvdXRfJShwYXJhbWV0ZXJOYW1lKXMpOycgJSBwYXJhbV9hcmdzKQorICAgICAgICAg
ICAgICAgICAgICBwYXJhbWV0ZXJfZW51bV9yZXNvbHV0aW9ucy5hcHBlbmQoJyAgICBpZiAoISUo
ZW51bVZhcmlhYmxlTmFtZSlzKSB7JyAlIGVudW1fYXJncykKKyAgICAgICAgICAgICAgICAgICAg
cGFyYW1ldGVyX2VudW1fcmVzb2x1dGlvbnMuYXBwZW5kKCcgICAgICAgIG1fYmFja2VuZERpc3Bh
dGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9y
LCBtYWtlU3RyaW5nKCJVbmtub3duICUocGFyYW1ldGVyS2V5KXM6ICJfcywgJShzdHJpbmdWYXJp
YWJsZU5hbWUpcykpOycgJSBlbnVtX2FyZ3MpCisgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRl
cl9lbnVtX3Jlc29sdXRpb25zLmFwcGVuZCgnICAgICAgICByZXR1cm47JykKKyAgICAgICAgICAg
ICAgICAgICAgcGFyYW1ldGVyX2VudW1fcmVzb2x1dGlvbnMuYXBwZW5kKCcgICAgfScpCisgICAg
ICAgICAgICAgICAgICAgIHBhcmFtZXRlcl9leHByZXNzaW9uID0gJyonICsgdmFyaWFibGVfbmFt
ZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpZiBfdHlwZS5yYXdfbmFtZSgp
ID09ICdzdHJpbmcnOgorICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfZXhwcmVzc2lvbiA9
IHZhcmlhYmxlX25hbWUKKyAgICAgICAgICAgICAgICBlbGlmIHBhcmFtZXRlci5pc19vcHRpb25h
bDoKKyAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyX2V4cHJlc3Npb24gPSAnV1RGTW92ZSgl
cyknICUgdmFyaWFibGVfbmFtZQorICAgICAgICAgICAgICAgIGVsaWYgX3R5cGUucmF3X25hbWUo
KSBpbiBbJ2Jvb2xlYW4nLCAnaW50ZWdlcicsICdudW1iZXInXToKKyAgICAgICAgICAgICAgICAg
ICAgcGFyYW1ldGVyX2V4cHJlc3Npb24gPSAnKicgKyB2YXJpYWJsZV9uYW1lCisgICAgICAgICAg
ICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyX2V4cHJlc3Npb24gPSB2
YXJpYWJsZV9uYW1lICsgJy5yZWxlYXNlTm9uTnVsbCgpJworICAgICAgICAgICAgICAgIGFsdGVy
bmF0ZV9kaXNwYXRjaGVyX21ldGhvZF9wYXJhbWV0ZXJzLmFwcGVuZChwYXJhbWV0ZXJfZXhwcmVz
c2lvbikKKyAgICAgICAgICAgIG1ldGhvZF9wYXJhbWV0ZXJzLmFwcGVuZChwYXJhbWV0ZXJfZXhw
cmVzc2lvbikKIAotICAgICAgICAgICAgICAgIGlmIENwcEdlbmVyYXRvci5zaG91bGRfcGFzc19i
eV9jb3B5X2Zvcl9yZXR1cm5fdHlwZShwYXJhbWV0ZXIudHlwZSkgb3IgcGFyYW1ldGVyLmlzX29w
dGlvbmFsIGFuZCBDcHBHZW5lcmF0b3Iuc2hvdWxkX3VzZV93cmFwcGVyX2Zvcl9yZXR1cm5fdHlw
ZShwYXJhbWV0ZXIudHlwZSk6Ci0gICAgICAgICAgICAgICAgICAgIG1ldGhvZF9wYXJhbWV0ZXJz
LmFwcGVuZCgnb3V0XycgKyBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpCi0gICAgICAgICAgICAg
ICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgbWV0aG9kX3BhcmFtZXRlcnMuYXBwZW5kKCcm
b3V0XycgKyBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpCisgICAgICAgICAgICBwYXJhbV9hcmdz
ID0geworICAgICAgICAgICAgICAgICdwYXJhbWV0ZXJLZXknOiBwYXJhbWV0ZXIucGFyYW1ldGVy
X25hbWUsCisgICAgICAgICAgICAgICAgJ3BhcmFtZXRlck5hbWUnOiBwYXJhbWV0ZXJfbmFtZSwK
KyAgICAgICAgICAgICAgICAna2V5ZWRHZXRNZXRob2QnOiBDcHBHZW5lcmF0b3IuY3BwX2dldHRl
cl9tZXRob2RfZm9yX3R5cGUoX3R5cGUpLAorICAgICAgICAgICAgICAgICdyZXF1aXJlZCc6ICdm
YWxzZScgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsIGVsc2UgJ3RydWUnLAorICAgICAgICAgICAg
fQorICAgICAgICAgICAgcGFyYW1ldGVyX2RlY2xhcmF0aW9ucy5hcHBlbmQoJyAgICBhdXRvICUo
cGFyYW1ldGVyTmFtZSlzID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+JShrZXllZEdldE1ldGhvZClz
KHByb3RvY29sX3BhcmFtZXRlcnMuZ2V0KCksICIlKHBhcmFtZXRlcktleSlzIl9zLCAlKHJlcXVp
cmVkKXMpOycgJSBwYXJhbV9hcmdzKQorCisgICAgICAgIGlmIGNvbW1hbmQuaXNfYXN5bmM6Cisg
ICAgICAgICAgICBtZXRob2RfcGFyYW1ldGVycy5hcHBlbmQoJ2Fkb3B0UmVmKCpuZXcgJXNCYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXI6OiVzKG1fYmFja2VuZERpc3BhdGNoZXIuY29weVJlZigpLCBw
cm90b2NvbF9jYWxsSWQpKScgJSAoZG9tYWluLmRvbWFpbl9uYW1lLCAnJXNDYWxsYmFjaycgJSB1
Y2ZpcnN0KGNvbW1hbmQuY29tbWFuZF9uYW1lKSkpCiAKICAgICAgICAgY29tbWFuZF9hcmdzID0g
ewogICAgICAgICAgICAgJ2RvbWFpbk5hbWUnOiBkb21haW4uZG9tYWluX25hbWUsCi0gICAgICAg
ICAgICAnY2FsbGJhY2tOYW1lJzogJyVzQ2FsbGJhY2snICUgdWNmaXJzdChjb21tYW5kLmNvbW1h
bmRfbmFtZSksCiAgICAgICAgICAgICAnY29tbWFuZE5hbWUnOiBjb21tYW5kLmNvbW1hbmRfbmFt
ZSwKLSAgICAgICAgICAgICdpblBhcmFtZXRlckRlY2xhcmF0aW9ucyc6ICdcbicuam9pbihpbl9w
YXJhbWV0ZXJfZGVjbGFyYXRpb25zKSwKKyAgICAgICAgICAgICdwYXJhbWV0ZXJEZWNsYXJhdGlv
bnMnOiAnXG4nLmpvaW4ocGFyYW1ldGVyX2RlY2xhcmF0aW9ucyksCiAgICAgICAgICAgICAnaW52
b2NhdGlvblBhcmFtZXRlcnMnOiAnLCAnLmpvaW4obWV0aG9kX3BhcmFtZXRlcnMpLAogICAgICAg
ICAgICAgJ2FsdGVybmF0ZUludm9jYXRpb25QYXJhbWV0ZXJzJzogJywgJy5qb2luKGFsdGVybmF0
ZV9kaXNwYXRjaGVyX21ldGhvZF9wYXJhbWV0ZXJzKSwKICAgICAgICAgfQogCiAgICAgICAgIGxp
bmVzID0gW10KICAgICAgICAgaWYgbGVuKGNvbW1hbmQuY2FsbF9wYXJhbWV0ZXJzKSA9PSAwOgot
ICAgICAgICAgICAgbGluZXMuYXBwZW5kKCd2b2lkICUoZG9tYWluTmFtZSlzQmFja2VuZERpc3Bh
dGNoZXI6OiUoY29tbWFuZE5hbWUpcyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVj
dD4mJiknICUgY29tbWFuZF9hcmdzKQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCd2b2lkICUo
ZG9tYWluTmFtZSlzQmFja2VuZERpc3BhdGNoZXI6OiUoY29tbWFuZE5hbWUpcyhsb25nIHByb3Rv
Y29sX2NhbGxJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiknICUgY29tbWFuZF9hcmdzKQogICAg
ICAgICBlbHNlOgotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCd2b2lkICUoZG9tYWluTmFtZSlz
QmFja2VuZERpc3BhdGNoZXI6OiUoY29tbWFuZE5hbWUpcyhsb25nIHJlcXVlc3RJZCwgUmVmUHRy
PEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKScgJSBjb21tYW5kX2FyZ3MpCisgICAgICAgICAg
ICBsaW5lcy5hcHBlbmQoJ3ZvaWQgJShkb21haW5OYW1lKXNCYWNrZW5kRGlzcGF0Y2hlcjo6JShj
b21tYW5kTmFtZSlzKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYm
IHByb3RvY29sX3BhcmFtZXRlcnMpJyAlIGNvbW1hbmRfYXJncykKICAgICAgICAgbGluZXMuYXBw
ZW5kKCd7JykKIAogICAgICAgICBpZiBsZW4oY29tbWFuZC5jYWxsX3BhcmFtZXRlcnMpID4gMDoK
QEAgLTMxOSwzMSArMzA2LDcxIEBAIGNsYXNzIENwcEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50
YXRpb25HZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgn
I2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKScpCiAgICAg
ICAgICAgICBsaW5lcy5hcHBlbmQoJycpCiAKKyAgICAgICAgaWYgbGVuKHBhcmFtZXRlcl9lbnVt
X3Jlc29sdXRpb25zKToKKyAgICAgICAgICAgIGxpbmVzLmV4dGVuZChwYXJhbWV0ZXJfZW51bV9y
ZXNvbHV0aW9ucykKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnJykKKwogICAgICAgICBpZiBj
b21tYW5kLmlzX2FzeW5jOgotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgUmVmPCUoZG9t
YWluTmFtZSlzQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjolKGNhbGxiYWNrTmFtZSlzPiBjYWxs
YmFjayA9IGFkb3B0UmVmKCpuZXcgJShkb21haW5OYW1lKXNCYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXI6OiUoY2FsbGJhY2tOYW1lKXMobV9iYWNrZW5kRGlzcGF0Y2hlci5jb3B5UmVmKCksIHJlcXVl
c3RJZCkpOycgJSBjb21tYW5kX2FyZ3MpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBt
X2FnZW50LT4lKGNvbW1hbmROYW1lKXMoJShpbnZvY2F0aW9uUGFyYW1ldGVycylzKTsnICUgY29t
bWFuZF9hcmdzKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAg
RXJyb3JTdHJpbmcgZXJyb3I7JykKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIFJlZjxK
U09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7JykKKyAgICAgICAg
ICAgIHJlc3VsdF9leHRyYWN0aW9uX25hbWVzID0gW10KKyAgICAgICAgICAgIHJlc3VsdF9jb252
ZXJzaW9uX2xpbmVzID0gW10KKyAgICAgICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gY29tbWFuZC5y
ZXR1cm5fcGFyYW1ldGVyczoKKyAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfbmFtZSA9IHBhcmFt
ZXRlci5wYXJhbWV0ZXJfbmFtZQorICAgICAgICAgICAgICAgIGlmIHBhcmFtZXRlci5pc19vcHRp
b25hbDoKKyAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyX25hbWUgPSAnb3B0XycgKyBwYXJh
bWV0ZXJfbmFtZQorICAgICAgICAgICAgICAgIHBhcmFtZXRlcl9uYW1lID0gJ291dF8nICsgcGFy
YW1ldGVyX25hbWUKIAotICAgICAgICBpZiBsZW4oY29tbWFuZC5yZXR1cm5fcGFyYW1ldGVycykg
PiAwOgotICAgICAgICAgICAgbGluZXMuZXh0ZW5kKG91dF9wYXJhbWV0ZXJfZGVjbGFyYXRpb25z
KQotICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBtX2FnZW50LT4lKGNvbW1hbmROYW1lKXMoJShp
bnZvY2F0aW9uUGFyYW1ldGVycylzKTsnICUgY29tbWFuZF9hcmdzKQotICAgICAgICBsaW5lcy5h
cHBlbmQoJycpCisgICAgICAgICAgICAgICAgcmVzdWx0X2V4dHJhY3Rpb25fbmFtZXMuYXBwZW5k
KHBhcmFtZXRlcl9uYW1lKQogCi0gICAgICAgIGlmIG5vdCBjb21tYW5kLmlzX2FzeW5jOgotICAg
ICAgICAgICAgaWYgbGVuKGNvbW1hbmQucmV0dXJuX3BhcmFtZXRlcnMpID4gMToKLSAgICAgICAg
ICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBpZiAoIWVycm9yLmxlbmd0aCgpKSB7JykKLSAgICAg
ICAgICAgICAgICBsaW5lcy5leHRlbmQob3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cykKLSAgICAg
ICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICB9JykKLSAgICAgICAgICAgIGVsaWYgbGVuKGNv
bW1hbmQucmV0dXJuX3BhcmFtZXRlcnMpID09IDE6Ci0gICAgICAgICAgICAgICAgbGluZXMuYXBw
ZW5kKCcgICAgaWYgKCFlcnJvci5sZW5ndGgoKSknKQotICAgICAgICAgICAgICAgIGxpbmVzLmV4
dGVuZChvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRzKQorICAgICAgICAgICAgICAgIHBhcmFtZXRl
cl92YWx1ZSA9IHBhcmFtZXRlcl9uYW1lCisKKyAgICAgICAgICAgICAgICBfdHlwZSA9IHBhcmFt
ZXRlci50eXBlCisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgQWxpYXNlZFR5
cGUpOgorICAgICAgICAgICAgICAgICAgICBfdHlwZSA9IF90eXBlLmFsaWFzZWRfdHlwZQorICAg
ICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKSBhbmQgX3R5cGUuaXNf
YW5vbnltb3VzOgorICAgICAgICAgICAgICAgICAgICBfdHlwZSA9IF90eXBlLnByaW1pdGl2ZV90
eXBlCisKKyAgICAgICAgICAgICAgICBpZiBfdHlwZS5pc19lbnVtKCk6CisgICAgICAgICAgICAg
ICAgICAgIGlmIHBhcmFtZXRlci5pc19vcHRpb25hbDoKKyAgICAgICAgICAgICAgICAgICAgICAg
IHBhcmFtZXRlcl92YWx1ZSA9ICcqJyArIHBhcmFtZXRlcl92YWx1ZQorICAgICAgICAgICAgICAg
ICAgICBwYXJhbWV0ZXJfdmFsdWUgPSAnUHJvdG9jb2w6OiVzOjpnZXRFbnVtQ29uc3RhbnRWYWx1
ZSglcyknICUgKHNlbGYuaGVscGVyc19uYW1lc3BhY2UoKSwgcGFyYW1ldGVyX3ZhbHVlKQorICAg
ICAgICAgICAgICAgIGVsaWYgQ3BwR2VuZXJhdG9yLnNob3VsZF9yZWxlYXNlX2FyZ3VtZW50KF90
eXBlLCBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwpOgorICAgICAgICAgICAgICAgICAgICBwYXJhbWV0
ZXJfdmFsdWUgPSBwYXJhbWV0ZXJfdmFsdWUgKyAnLnJlbGVhc2VOb25OdWxsKCknCisgICAgICAg
ICAgICAgICAgZWxpZiBDcHBHZW5lcmF0b3Iuc2hvdWxkX2RlcmVmZXJlbmNlX2FyZ3VtZW50KF90
eXBlLCBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwpOgorICAgICAgICAgICAgICAgICAgICBwYXJhbWV0
ZXJfdmFsdWUgPSAnKicgKyBwYXJhbWV0ZXJfdmFsdWUKKyAgICAgICAgICAgICAgICBlbGlmIENw
cEdlbmVyYXRvci5zaG91bGRfbW92ZV9hcmd1bWVudChfdHlwZSwgcGFyYW1ldGVyLmlzX29wdGlv
bmFsKToKKyAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyX3ZhbHVlID0gJ1dURk1vdmUoJXMp
JyAlIHBhcmFtZXRlcl92YWx1ZQorCisgICAgICAgICAgICAgICAgcGFyYW1fYXJncyA9IHsKKyAg
ICAgICAgICAgICAgICAgICAgJ2tleWVkU2V0TWV0aG9kJzogQ3BwR2VuZXJhdG9yLmNwcF9zZXR0
ZXJfbWV0aG9kX2Zvcl90eXBlKF90eXBlKSwKKyAgICAgICAgICAgICAgICAgICAgJ3BhcmFtZXRl
cktleSc6IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgJ3Bh
cmFtZXRlck5hbWUnOiBwYXJhbWV0ZXJfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgJ3BhcmFt
ZXRlclZhbHVlJzogcGFyYW1ldGVyX3ZhbHVlLAorICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgIGlmIHBhcmFtZXRlci5pc19vcHRpb25hbDoKKyAgICAgICAgICAgICAgICAgICAg
cmVzdWx0X2NvbnZlcnNpb25fbGluZXMuYXBwZW5kKCcgICAgaWYgKCEhJShwYXJhbWV0ZXJOYW1l
KXMpJyAlIHBhcmFtX2FyZ3MpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdF9jb252ZXJzaW9u
X2xpbmVzLmFwcGVuZCgnICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+JShrZXllZFNldE1l
dGhvZClzKCIlKHBhcmFtZXRlcktleSlzIl9zLCAlKHBhcmFtZXRlclZhbHVlKXMpOycgJSBwYXJh
bV9hcmdzKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJlc3Vs
dF9jb252ZXJzaW9uX2xpbmVzLmFwcGVuZCgnICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT4lKGtl
eWVkU2V0TWV0aG9kKXMoIiUocGFyYW1ldGVyS2V5KXMiX3MsICUocGFyYW1ldGVyVmFsdWUpcyk7
JyAlIHBhcmFtX2FyZ3MpCisKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGF1dG8gcmVz
dWx0ID0gbV9hZ2VudC0+JShjb21tYW5kTmFtZSlzKCUoaW52b2NhdGlvblBhcmFtZXRlcnMpcyk7
JyAlIGNvbW1hbmRfYXJncykKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGlmICghcmVz
dWx0KSB7JykKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBBU1NFUlQoIXJlc3Vs
dC5lcnJvcigpLmlzRW1wdHkoKSk7JykKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAg
ICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRj
aGVyOjpTZXJ2ZXJFcnJvciwgcmVzdWx0LmVycm9yKCkpOycpCisgICAgICAgICAgICBsaW5lcy5h
cHBlbmQoJyAgICAgICAgcmV0dXJuOycpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICB9
JykKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnJykKKyAgICAgICAgICAgIGlmIGxlbihyZXN1
bHRfZXh0cmFjdGlvbl9uYW1lcykgPT0gMToKKyAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQo
JyAgICBhdXRvICVzID0gV1RGTW92ZShyZXN1bHQudmFsdWUoKSk7JyAlIHJlc3VsdF9leHRyYWN0
aW9uX25hbWVzWzBdKQogICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnJykKLQotICAgICAg
ICAgICAgbGluZXMuYXBwZW5kKCcgICAgaWYgKCFlcnJvci5sZW5ndGgoKSknKQotICAgICAgICAg
ICAgbGluZXMuYXBwZW5kKCcgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25z
ZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2UpOycpCi0gICAgICAgICAgICBsaW5l
cy5hcHBlbmQoJyAgICBlbHNlJykKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBt
X2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVy
OjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOycpCisgICAgICAgICAgICBlbGlmIGxlbihy
ZXN1bHRfZXh0cmFjdGlvbl9uYW1lcykgPiAxOgorICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVu
ZCgnICAgIGF1dG8gWyVzXSA9IFdURk1vdmUocmVzdWx0LnZhbHVlKCkpOycgJSAiLCAiLmpvaW4o
cmVzdWx0X2V4dHJhY3Rpb25fbmFtZXMpKQorICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgn
JykKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3Nh
Z2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOycpCisgICAgICAgICAgICBsaW5lcy5leHRlbmQo
cmVzdWx0X2NvbnZlcnNpb25fbGluZXMpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBt
X2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocHJvdG9jb2xfY2FsbElkLCBXVEZNb3Zl
KHByb3RvY29sX2pzb25NZXNzYWdlKSwgZmFsc2UpOycpCiAKICAgICAgICAgbGluZXMuYXBwZW5k
KCd9JykKICAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24o
Y29tbWFuZC5jb25kaXRpb24sICJcbiIuam9pbihsaW5lcykpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfZnJv
bnRlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfZnJvbnRlbmRfZGlzcGF0Y2hlcl9oZWFk
ZXIucHkKaW5kZXggMTE5ZDIzYzM4Y2RmMjRjZjU2ZDBmZmM2NmQ1N2I4YTNkNGUyZGE0NC4uYmVh
YTE3Yzk4MTU0YjdlZTIyZTNiNWI5NzZkMDE4Mzk0MGE0NjkxMyAxMDA3NTUKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2Zy
b250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9mcm9udGVuZF9kaXNwYXRjaGVy
X2hlYWRlci5weQpAQCAtNzMsOSArNzMsOSBAQCBjbGFzcyBDcHBGcm9udGVuZERpc3BhdGNoZXJI
ZWFkZXJHZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAgICAgaGVhZGVyX2luY2x1ZGVzID0g
WwogICAgICAgICAgICAgKFsiSmF2YVNjcmlwdENvcmUiLCAiV2ViS2l0Il0sIChzZWxmLm1vZGVs
KCkuZnJhbWV3b3JrLm5hbWUsICIlc1Byb3RvY29sT2JqZWN0cy5oIiAlIHNlbGYucHJvdG9jb2xf
bmFtZSgpKSksCiAgICAgICAgICAgICAoWyJKYXZhU2NyaXB0Q29yZSIsICJXZWJLaXQiXSwgKCJX
VEYiLCAid3RmL0pTT05WYWx1ZXMuaCIpKSwKLSAgICAgICAgICAgIChbIkphdmFTY3JpcHRDb3Jl
IiwgIldlYktpdCJdLCAoIldURiIsICJ3dGYvdGV4dC9XVEZTdHJpbmcuaCIpKQorICAgICAgICAg
ICAgKFsiSmF2YVNjcmlwdENvcmUiLCAiV2ViS2l0Il0sICgiV1RGIiwgInd0Zi9PcHRpb25hbC5o
IikpLAorICAgICAgICAgICAgKFsiSmF2YVNjcmlwdENvcmUiLCAiV2ViS2l0Il0sICgiV1RGIiwg
Ind0Zi90ZXh0L1dURlN0cmluZy5oIikpLAogICAgICAgICBdCi0KICAgICAgICAgcmV0dXJuICdc
bicuam9pbihzZWxmLmdlbmVyYXRlX2luY2x1ZGVzX2Zyb21fZW50cmllcyhoZWFkZXJfaW5jbHVk
ZXMpKQogCiAgICAgZGVmIF9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9mb3JfcGFyYW1ldGVyKHNl
bGYsIHBhcmFtZXRlciwgZXZlbnQpOgpAQCAtMTE3LDggKzExNywxMyBAQCBjbGFzcyBDcHBGcm9u
dGVuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAgICAgZm9y
bWFsX3BhcmFtZXRlcnMgPSBbXQogICAgICAgICBsaW5lcyA9IFtdCiAgICAgICAgIGZvciBwYXJh
bWV0ZXIgaW4gZXZlbnQuZXZlbnRfcGFyYW1ldGVyczoKLSAgICAgICAgICAgIGZvcm1hbF9wYXJh
bWV0ZXJzLmFwcGVuZCgnJXMgJXMnICUgKENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3JfY2hlY2tl
ZF9mb3JtYWxfZXZlbnRfcGFyYW1ldGVyKHBhcmFtZXRlciksIHBhcmFtZXRlci5wYXJhbWV0ZXJf
bmFtZSkpCi0gICAgICAgICAgICBpZiBpc2luc3RhbmNlKHBhcmFtZXRlci50eXBlLCBFbnVtVHlw
ZSkgYW5kIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSBub3QgaW4gdXNlZF9lbnVtX25hbWVzOgor
ICAgICAgICAgICAgcGFyYW1ldGVyX25hbWUgPSBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUKKyAg
ICAgICAgICAgIGlmIHBhcmFtZXRlci5pc19vcHRpb25hbDoKKyAgICAgICAgICAgICAgICBwYXJh
bWV0ZXJfbmFtZSA9ICdvcHRfJyArIHBhcmFtZXRlcl9uYW1lCisKKyAgICAgICAgICAgIGZvcm1h
bF9wYXJhbWV0ZXJzLmFwcGVuZCgnJXMgJXMnICUgKENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3Jf
ZXZlbnRfcGFyYW1ldGVyKHBhcmFtZXRlci50eXBlLCBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwpLCBw
YXJhbWV0ZXJfbmFtZSkpCisKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UocGFyYW1ldGVyLnR5
cGUsIEVudW1UeXBlKSBhbmQgcGFyYW1ldGVyLnR5cGUuaXNfYW5vbnltb3VzIGFuZCBwYXJhbWV0
ZXIucGFyYW1ldGVyX25hbWUgbm90IGluIHVzZWRfZW51bV9uYW1lczoKICAgICAgICAgICAgICAg
ICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYW5vbnltb3VzX2VudW1fZm9yX3BhcmFtZXRl
cihwYXJhbWV0ZXIsIGV2ZW50KSkKICAgICAgICAgICAgICAgICB1c2VkX2VudW1fbmFtZXMuYWRk
KHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2Zyb250ZW5kX2Rp
c3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBs
ZW1lbnRhdGlvbi5weQppbmRleCA2NmRjNmUxODVjZmUyYjYxYjFlY2E3NzU3M2NlMTY3NGU2YjM1
YTQ5Li43NjNlMDFkZmI3OGNkZWM4ZDYwMzBkMmVkYzM1MDU0ODkxNzY5ODBjIDEwMDc1NQotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0
ZV9jcHBfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfZnJv
bnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQpAQCAtMzMsMTIgKzMzLDEyIEBAIHRy
eToKICAgICBmcm9tIC5jcHBfZ2VuZXJhdG9yIGltcG9ydCBDcHBHZW5lcmF0b3IKICAgICBmcm9t
IC5jcHBfZ2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgQ3BwR2VuZXJhdG9yVGVtcGxhdGVzIGFz
IENwcFRlbXBsYXRlcwogICAgIGZyb20gLmdlbmVyYXRvciBpbXBvcnQgR2VuZXJhdG9yLCB1Y2Zp
cnN0Ci0gICAgZnJvbSAubW9kZWxzIGltcG9ydCBPYmplY3RUeXBlLCBBcnJheVR5cGUKKyAgICBm
cm9tIC5tb2RlbHMgaW1wb3J0IE9iamVjdFR5cGUsIEFycmF5VHlwZSwgQWxpYXNlZFR5cGUsIEVu
dW1UeXBlCiBleGNlcHQ6CiAgICAgZnJvbSBjcHBfZ2VuZXJhdG9yIGltcG9ydCBDcHBHZW5lcmF0
b3IKICAgICBmcm9tIGNwcF9nZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBDcHBHZW5lcmF0b3JU
ZW1wbGF0ZXMgYXMgQ3BwVGVtcGxhdGVzCiAgICAgZnJvbSBnZW5lcmF0b3IgaW1wb3J0IEdlbmVy
YXRvciwgdWNmaXJzdAotICAgIGZyb20gbW9kZWxzIGltcG9ydCBPYmplY3RUeXBlLCBBcnJheVR5
cGUKKyAgICBmcm9tIG1vZGVscyBpbXBvcnQgT2JqZWN0VHlwZSwgQXJyYXlUeXBlLCBBbGlhc2Vk
VHlwZSwgRW51bVR5cGUKIAogbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2JhbCcpCiAKQEAg
LTcxLDkgKzcxLDcgQEAgY2xhc3MgQ3BwRnJvbnRlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25H
ZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICBkZWYgX2dlbmVyYXRlX3NlY29uZGFyeV9oZWFk
ZXJfaW5jbHVkZXMoc2VsZik6CiAgICAgICAgIGhlYWRlcl9pbmNsdWRlcyA9IFsKICAgICAgICAg
ICAgIChbIkphdmFTY3JpcHRDb3JlIiwgIldlYktpdCJdLCAoIkphdmFTY3JpcHRDb3JlIiwgImlu
c3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oIikpLAotICAgICAgICAgICAgKFsiSmF2
YVNjcmlwdENvcmUiLCAiV2ViS2l0Il0sICgiV1RGIiwgInd0Zi90ZXh0L0NTdHJpbmcuaCIpKQog
ICAgICAgICBdCi0KICAgICAgICAgcmV0dXJuICdcbicuam9pbihzZWxmLmdlbmVyYXRlX2luY2x1
ZGVzX2Zyb21fZW50cmllcyhoZWFkZXJfaW5jbHVkZXMpKQogCiAgICAgZGVmIF9nZW5lcmF0ZV9k
aXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uc19mb3JfZG9tYWluKHNlbGYsIGRvbWFpbik6CkBAIC05
MCwyNyArODgsNDMgQEAgY2xhc3MgQ3BwRnJvbnRlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25H
ZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAgICAgZm9ybWFsX3BhcmFtZXRlcnMgPSBbXQog
CiAgICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gZXZlbnQuZXZlbnRfcGFyYW1ldGVyczoKKyAgICAg
ICAgICAgIHBhcmFtZXRlcl9uYW1lID0gcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lCisgICAgICAg
ICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6CisgICAgICAgICAgICAgICAgcGFyYW1ldGVy
X25hbWUgPSAnb3B0XycgKyBwYXJhbWV0ZXJfbmFtZQogCi0gICAgICAgICAgICBwYXJhbWV0ZXJf
dmFsdWUgPSBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUKLSAgICAgICAgICAgIGlmIHBhcmFtZXRl
ci5pc19vcHRpb25hbCBhbmQgbm90IENwcEdlbmVyYXRvci5zaG91bGRfcGFzc19ieV9jb3B5X2Zv
cl9yZXR1cm5fdHlwZShwYXJhbWV0ZXIudHlwZSk6CisgICAgICAgICAgICBwYXJhbWV0ZXJfdmFs
dWUgPSBwYXJhbWV0ZXJfbmFtZQorCisgICAgICAgICAgICBfdHlwZSA9IHBhcmFtZXRlci50eXBl
CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBBbGlhc2VkVHlwZSk6CisgICAgICAg
ICAgICAgICAgX3R5cGUgPSBfdHlwZS5hbGlhc2VkX3R5cGUKKyAgICAgICAgICAgIGlmIGlzaW5z
dGFuY2UoX3R5cGUsIEVudW1UeXBlKSBhbmQgX3R5cGUuaXNfYW5vbnltb3VzOgorICAgICAgICAg
ICAgICAgIF90eXBlID0gX3R5cGUucHJpbWl0aXZlX3R5cGUKKworICAgICAgICAgICAgaWYgX3R5
cGUuaXNfZW51bSgpOgorICAgICAgICAgICAgICAgIGlmIHBhcmFtZXRlci5pc19vcHRpb25hbDoK
KyAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyX3ZhbHVlID0gJyonICsgcGFyYW1ldGVyX3Zh
bHVlCisgICAgICAgICAgICAgICAgcGFyYW1ldGVyX3ZhbHVlID0gJ1Byb3RvY29sOjolczo6Z2V0
RW51bUNvbnN0YW50VmFsdWUoJXMpJyAlIChzZWxmLmhlbHBlcnNfbmFtZXNwYWNlKCksIHBhcmFt
ZXRlcl92YWx1ZSkKKyAgICAgICAgICAgIGVsaWYgQ3BwR2VuZXJhdG9yLnNob3VsZF9yZWxlYXNl
X2FyZ3VtZW50KF90eXBlLCBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwpOgorICAgICAgICAgICAgICAg
IHBhcmFtZXRlcl92YWx1ZSA9IHBhcmFtZXRlcl92YWx1ZSArICcucmVsZWFzZU5vbk51bGwoKScK
KyAgICAgICAgICAgIGVsaWYgQ3BwR2VuZXJhdG9yLnNob3VsZF9kZXJlZmVyZW5jZV9hcmd1bWVu
dChfdHlwZSwgcGFyYW1ldGVyLmlzX29wdGlvbmFsKToKICAgICAgICAgICAgICAgICBwYXJhbWV0
ZXJfdmFsdWUgPSAnKicgKyBwYXJhbWV0ZXJfdmFsdWUKLSAgICAgICAgICAgIGlmIHBhcmFtZXRl
ci50eXBlLmlzX2VudW0oKToKLSAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfdmFsdWUgPSAnSW5z
cGVjdG9yOjpQcm90b2NvbDo6JXM6OmdldEVudW1Db25zdGFudFZhbHVlKCVzKScgJSAoc2VsZi5o
ZWxwZXJzX25hbWVzcGFjZSgpLCBwYXJhbWV0ZXJfdmFsdWUpCisgICAgICAgICAgICBlbGlmIENw
cEdlbmVyYXRvci5zaG91bGRfbW92ZV9hcmd1bWVudChfdHlwZSwgcGFyYW1ldGVyLmlzX29wdGlv
bmFsKToKKyAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfdmFsdWUgPSAnV1RGTW92ZSglcyknICUg
cGFyYW1ldGVyX3ZhbHVlCiAKICAgICAgICAgICAgIHBhcmFtZXRlcl9hcmdzID0gewotICAgICAg
ICAgICAgICAgICdwYXJhbWV0ZXJUeXBlJzogQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl9zdGFj
a19vdXRfcGFyYW1ldGVyKHBhcmFtZXRlciksCi0gICAgICAgICAgICAgICAgJ3BhcmFtZXRlck5h
bWUnOiBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUsCisgICAgICAgICAgICAgICAgJ3BhcmFtZXRl
cktleSc6IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwKKyAgICAgICAgICAgICAgICAncGFyYW1l
dGVyTmFtZSc6IHBhcmFtZXRlcl9uYW1lLAogICAgICAgICAgICAgICAgICdwYXJhbWV0ZXJWYWx1
ZSc6IHBhcmFtZXRlcl92YWx1ZSwKLSAgICAgICAgICAgICAgICAna2V5ZWRTZXRNZXRob2QnOiBD
cHBHZW5lcmF0b3IuY3BwX3NldHRlcl9tZXRob2RfZm9yX3R5cGUocGFyYW1ldGVyLnR5cGUpLAor
ICAgICAgICAgICAgICAgICdrZXllZFNldE1ldGhvZCc6IENwcEdlbmVyYXRvci5jcHBfc2V0dGVy
X21ldGhvZF9mb3JfdHlwZShfdHlwZSksCiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlm
IHBhcmFtZXRlci5pc19vcHRpb25hbDoKLSAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfYXNzaWdu
bWVudHMuYXBwZW5kKCcgICAgaWYgKCUocGFyYW1ldGVyTmFtZSlzKScgJSBwYXJhbWV0ZXJfYXJn
cykKLSAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAgICAg
IHBhcmFtc09iamVjdC0+JShrZXllZFNldE1ldGhvZClzKCIlKHBhcmFtZXRlck5hbWUpcyJfcywg
JShwYXJhbWV0ZXJWYWx1ZSlzKTsnICUgcGFyYW1ldGVyX2FyZ3MpCisgICAgICAgICAgICAgICAg
cGFyYW1ldGVyX2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAgIGlmICghISUocGFyYW1ldGVyTmFtZSlz
KScgJSBwYXJhbWV0ZXJfYXJncykKKyAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfYXNzaWdubWVu
dHMuYXBwZW5kKCcgICAgICAgIHByb3RvY29sX3BhcmFtc09iamVjdC0+JShrZXllZFNldE1ldGhv
ZClzKCIlKHBhcmFtZXRlcktleSlzIl9zLCAlKHBhcmFtZXRlclZhbHVlKXMpOycgJSBwYXJhbWV0
ZXJfYXJncykKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcGFyYW1ldGVyX2Fz
c2lnbm1lbnRzLmFwcGVuZCgnICAgIHBhcmFtc09iamVjdC0+JShrZXllZFNldE1ldGhvZClzKCIl
KHBhcmFtZXRlck5hbWUpcyJfcywgJShwYXJhbWV0ZXJWYWx1ZSlzKTsnICUgcGFyYW1ldGVyX2Fy
Z3MpCisgICAgICAgICAgICAgICAgcGFyYW1ldGVyX2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAgIHBy
b3RvY29sX3BhcmFtc09iamVjdC0+JShrZXllZFNldE1ldGhvZClzKCIlKHBhcmFtZXRlcktleSlz
Il9zLCAlKHBhcmFtZXRlclZhbHVlKXMpOycgJSBwYXJhbWV0ZXJfYXJncykKIAotICAgICAgICAg
ICAgZm9ybWFsX3BhcmFtZXRlcnMuYXBwZW5kKCclcyAlcycgJSAoQ3BwR2VuZXJhdG9yLmNwcF90
eXBlX2Zvcl9jaGVja2VkX2Zvcm1hbF9ldmVudF9wYXJhbWV0ZXIocGFyYW1ldGVyKSwgcGFyYW1l
dGVyLnBhcmFtZXRlcl9uYW1lKSkKKyAgICAgICAgICAgIGZvcm1hbF9wYXJhbWV0ZXJzLmFwcGVu
ZCgnJXMgJXMnICUgKENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3JfZXZlbnRfcGFyYW1ldGVyKF90
eXBlLCBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwpLCBwYXJhbWV0ZXJfbmFtZSkpCiAKICAgICAgICAg
ZXZlbnRfYXJncyA9IHsKICAgICAgICAgICAgICdkb21haW5OYW1lJzogZG9tYWluLmRvbWFpbl9u
YW1lLApAQCAtMTIwLDE1ICsxMzQsMTUgQEAgY2xhc3MgQ3BwRnJvbnRlbmREaXNwYXRjaGVySW1w
bGVtZW50YXRpb25HZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKIAogICAgICAgICBsaW5lcy5hcHBl
bmQoJ3ZvaWQgJShkb21haW5OYW1lKXNGcm9udGVuZERpc3BhdGNoZXI6OiUoZXZlbnROYW1lKXMo
JShmb3JtYWxQYXJhbWV0ZXJzKXMpJyAlIGV2ZW50X2FyZ3MpCiAgICAgICAgIGxpbmVzLmFwcGVu
ZCgneycpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25N
ZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsnKQotICAgICAgICBsaW5lcy5hcHBlbmQo
JyAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICIlKGRvbWFpbk5hbWUpcy4l
KGV2ZW50TmFtZSlzIl9zKTsnICUgZXZlbnRfYXJncykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcg
ICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7JykK
KyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmlu
ZygibWV0aG9kIl9zLCAiJShkb21haW5OYW1lKXMuJShldmVudE5hbWUpcyJfcyk7JyAlIGV2ZW50
X2FyZ3MpCiAKICAgICAgICAgaWYgbGVuKHBhcmFtZXRlcl9hc3NpZ25tZW50cykgPiAwOgotICAg
ICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgUmVmPEpTT046Ok9iamVjdD4gcGFyYW1zT2JqZWN0
ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsnKQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcg
ICAgYXV0byBwcm90b2NvbF9wYXJhbXNPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOycp
CiAgICAgICAgICAgICBsaW5lcy5leHRlbmQocGFyYW1ldGVyX2Fzc2lnbm1lbnRzKQotICAgICAg
ICAgICAgbGluZXMuYXBwZW5kKCcgICAganNvbk1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIl9z
LCBXVEZNb3ZlKHBhcmFtc09iamVjdCkpOycpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAg
ICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiX3MsIFdURk1vdmUocHJv
dG9jb2xfcGFyYW1zT2JqZWN0KSk7JykKIAogICAgICAgICBsaW5lcy5hcHBlbmQoJycpCi0gICAg
ICAgIGxpbmVzLmFwcGVuZCgnICAgIG1fZnJvbnRlbmRSb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNz
YWdlLT50b0pTT05TdHJpbmcoKSk7JykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgbV9mcm9u
dGVuZFJvdXRlci5zZW5kRXZlbnQocHJvdG9jb2xfanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygp
KTsnKQogICAgICAgICBsaW5lcy5hcHBlbmQoJ30nKQogICAgICAgICByZXR1cm4gc2VsZi53cmFw
X3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihldmVudC5jb25kaXRpb24sICJcbiIuam9pbihsaW5l
cykpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Y29kZWdlbi9nZW5lcmF0ZV9jcHBfcHJvdG9jb2xfdHlwZXNfaGVhZGVyLnB5IGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX3Byb3Rv
Y29sX3R5cGVzX2hlYWRlci5weQppbmRleCAwMDE5MjRkZTBlYjA4MjdmNzQ1ZDNkNzM2YzBhYjky
MDIxMjRkYjM2Li43ODFkMDZkOTQwNTY2YjE3MmVjNTVjMmVmYmQxMDFhMDA1MGQ3MWE4IDEwMDc1
NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9n
ZW5lcmF0ZV9jcHBfcHJvdG9jb2xfdHlwZXNfaGVhZGVyLnB5CisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9wcm90b2NvbF90
eXBlc19oZWFkZXIucHkKQEAgLTg1LDkgKzg1LDEwIEBAIGNsYXNzIENwcFByb3RvY29sVHlwZXNI
ZWFkZXJHZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICBkZWYgX2dlbmVyYXRlX3NlY29uZGFy
eV9oZWFkZXJfaW5jbHVkZXMoc2VsZik6CiAgICAgICAgIGhlYWRlcl9pbmNsdWRlcyA9IFsKICAg
ICAgICAgICAgIChbIkphdmFTY3JpcHRDb3JlIiwgIldlYktpdCJdLCAoIkphdmFTY3JpcHRDb3Jl
IiwgImluc3BlY3Rvci9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmgiKSksCi0gICAgICAgICAgICAo
WyJKYXZhU2NyaXB0Q29yZSIsICJXZWJLaXQiXSwgKCJXVEYiLCAid3RmL0Fzc2VydGlvbnMuaCIp
KQorICAgICAgICAgICAgKFsiSmF2YVNjcmlwdENvcmUiLCAiV2ViS2l0Il0sICgiV1RGIiwgInd0
Zi9KU09OVmFsdWVzLmgiKSksCisgICAgICAgICAgICAoWyJKYXZhU2NyaXB0Q29yZSIsICJXZWJL
aXQiXSwgKCJXVEYiLCAid3RmL09wdGlvbmFsLmgiKSksCisgICAgICAgICAgICAoWyJKYXZhU2Ny
aXB0Q29yZSIsICJXZWJLaXQiXSwgKCJXVEYiLCAid3RmL3RleHQvV1RGU3RyaW5nLmgiKSksCiAg
ICAgICAgIF0KLQogICAgICAgICByZXR1cm4gJ1xuJy5qb2luKHNlbGYuZ2VuZXJhdGVfaW5jbHVk
ZXNfZnJvbV9lbnRyaWVzKGhlYWRlcl9pbmNsdWRlcykpCiAKICAgICBkZWYgX2dlbmVyYXRlX3Zl
cnNpb25zKHNlbGYsIGRvbWFpbnMpOgpAQCAtMjMyLDkgKzIzMyw2IEBAIGNsYXNzIENwcFByb3Rv
Y29sVHlwZXNIZWFkZXJHZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAgICAgcmV0dXJuIHNl
bGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZG9tYWluLmNvbmRpdGlvbiwgJ1xuJy5q
b2luKGxpbmVzKSkKIAogICAgIGRlZiBfZ2VuZXJhdGVfY2xhc3NfZm9yX29iamVjdF9kZWNsYXJh
dGlvbihzZWxmLCB0eXBlX2RlY2xhcmF0aW9uLCBkb21haW4pOgotICAgICAgICBpZiBsZW4odHlw
ZV9kZWNsYXJhdGlvbi50eXBlX21lbWJlcnMpID09IDA6Ci0gICAgICAgICAgICByZXR1cm4gJycK
LQogICAgICAgICBlbnVtX21lbWJlcnMgPSBbbWVtYmVyIGZvciBtZW1iZXIgaW4gdHlwZV9kZWNs
YXJhdGlvbi50eXBlX21lbWJlcnMgaWYgaXNpbnN0YW5jZShtZW1iZXIudHlwZSwgRW51bVR5cGUp
IGFuZCBtZW1iZXIudHlwZS5pc19hbm9ueW1vdXNdCiAgICAgICAgIHJlcXVpcmVkX21lbWJlcnMg
PSBbbWVtYmVyIGZvciBtZW1iZXIgaW4gdHlwZV9kZWNsYXJhdGlvbi50eXBlX21lbWJlcnMgaWYg
bm90IG1lbWJlci5pc19vcHRpb25hbF0KICAgICAgICAgb3B0aW9uYWxfbWVtYmVycyA9IFttZW1i
ZXIgZm9yIG1lbWJlciBpbiB0eXBlX2RlY2xhcmF0aW9uLnR5cGVfbWVtYmVycyBpZiBtZW1iZXIu
aXNfb3B0aW9uYWxdCkBAIC0yNDYsMTEgKzI0NCwxMiBAQCBjbGFzcyBDcHBQcm90b2NvbFR5cGVz
SGVhZGVyR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAgIGJhc2VfY2xhc3MgPSAnSlNP
Tjo6T2JqZWN0JwogICAgICAgICBpZiBub3QgR2VuZXJhdG9yLnR5cGVfaGFzX29wZW5fZmllbGRz
KHR5cGVfZGVjbGFyYXRpb24udHlwZSk6CiAgICAgICAgICAgICBiYXNlX2NsYXNzID0gYmFzZV9j
bGFzcyArICdCYXNlJwotICAgICAgICBsaW5lcy5hcHBlbmQoJ2NsYXNzICVzIDogcHVibGljICVz
IHsnICUgKG9iamVjdF9uYW1lLCBiYXNlX2NsYXNzKSkKKyAgICAgICAgbGluZXMuYXBwZW5kKCdj
bGFzcyAlcyBmaW5hbCA6IHB1YmxpYyAlcyB7JyAlIChvYmplY3RfbmFtZSwgYmFzZV9jbGFzcykp
CiAgICAgICAgIGxpbmVzLmFwcGVuZCgncHVibGljOicpCiAgICAgICAgIGZvciBlbnVtX21lbWJl
ciBpbiBlbnVtX21lbWJlcnM6CiAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAvLyBOYW1l
ZCBhZnRlciBwcm9wZXJ0eSBuYW1lIFwnJXNcJyB3aGlsZSBnZW5lcmF0aW5nICVzLicgJSAoZW51
bV9tZW1iZXIubWVtYmVyX25hbWUsIG9iamVjdF9uYW1lKSkKICAgICAgICAgICAgIGxpbmVzLmFw
cGVuZChzZWxmLl9nZW5lcmF0ZV9zdHJ1Y3RfZm9yX2Fub255bW91c19lbnVtX21lbWJlcihlbnVt
X21lbWJlcikpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJycpCiAgICAgICAgIGxpbmVzLmFw
cGVuZChzZWxmLl9nZW5lcmF0ZV9idWlsZGVyX3N0YXRlX2VudW0odHlwZV9kZWNsYXJhdGlvbikp
CiAKICAgICAgICAgY29uc3RydWN0b3JfZXhhbXBsZSA9IFtdCkBAIC0yNzcsNyArMjc2LDcgQEAg
Y2xhc3MgQ3BwUHJvdG9jb2xUeXBlc0hlYWRlckdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAg
ICAgICAgICAgb3Blbl9tZW1iZXJzID0gR2VuZXJhdG9yLm9wZW5fZmllbGRzKHR5cGVfZGVjbGFy
YXRpb24pCiAgICAgICAgICAgICBmb3IgdHlwZV9tZW1iZXIgaW4gb3Blbl9tZW1iZXJzOgogICAg
ICAgICAgICAgICAgIGV4cG9ydF9tYWNybyA9IHNlbGYubW9kZWwoKS5mcmFtZXdvcmsuc2V0dGlu
ZygnZXhwb3J0X21hY3JvJywgTm9uZSkKLSAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAg
ICAlcyBzdGF0aWMgY29uc3QgY2hhciogJXM7JyAlIChleHBvcnRfbWFjcm8sIHVjZmlyc3QodHlw
ZV9tZW1iZXIubWVtYmVyX25hbWUpKSkKKyAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAg
ICAlcyBzdGF0aWMgY29uc3QgY2hhciogJXNLZXk7JyAlIChleHBvcnRfbWFjcm8sIHR5cGVfbWVt
YmVyLm1lbWJlcl9uYW1lKSkKIAogICAgICAgICBsaW5lcy5hcHBlbmQoJ307JykKICAgICAgICAg
cmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24odHlwZV9kZWNsYXJhdGlv
bi5jb25kaXRpb24sICdcbicuam9pbihsaW5lcykpCkBAIC0zMjgsNDcgKzMyNyw1NiBAQCBjbGFz
cyBDcHBQcm90b2NvbFR5cGVzSGVhZGVyR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAg
IHJldHVybiAnXG4nLmpvaW4obGluZXMpCiAKICAgICBkZWYgX2dlbmVyYXRlX2J1aWxkZXJfc2V0
dGVyX2Zvcl9tZW1iZXIoc2VsZiwgdHlwZV9tZW1iZXIsIGRvbWFpbik6CisgICAgICAgIG1lbWJl
cl9uYW1lID0gJ2luXycgKyB0eXBlX21lbWJlci5tZW1iZXJfbmFtZQorCisgICAgICAgIG1lbWJl
cl92YWx1ZSA9IG1lbWJlcl9uYW1lCisgICAgICAgIGlmIHR5cGVfbWVtYmVyLnR5cGUuaXNfZW51
bSgpOgorICAgICAgICAgICAgbWVtYmVyX3ZhbHVlID0gJ1Byb3RvY29sOjolczo6Z2V0RW51bUNv
bnN0YW50VmFsdWUoJXMpJyAlIChzZWxmLmhlbHBlcnNfbmFtZXNwYWNlKCksIG1lbWJlcl92YWx1
ZSkKKyAgICAgICAgZWxpZiBDcHBHZW5lcmF0b3Iuc2hvdWxkX21vdmVfYXJndW1lbnQodHlwZV9t
ZW1iZXIudHlwZSwgRmFsc2UpOgorICAgICAgICAgICAgbWVtYmVyX3ZhbHVlID0gJ1dURk1vdmUo
JXMpJyAlIG1lbWJlcl92YWx1ZQorCiAgICAgICAgIHNldHRlcl9hcmdzID0gewogICAgICAgICAg
ICAgJ2NhbWVsTmFtZSc6IHVjZmlyc3QodHlwZV9tZW1iZXIubWVtYmVyX25hbWUpLAotICAgICAg
ICAgICAgJ2tleWVkU2V0JzogQ3BwR2VuZXJhdG9yLmNwcF9zZXR0ZXJfbWV0aG9kX2Zvcl90eXBl
KHR5cGVfbWVtYmVyLnR5cGUpLAotICAgICAgICAgICAgJ25hbWUnOiB0eXBlX21lbWJlci5tZW1i
ZXJfbmFtZSwKLSAgICAgICAgICAgICdwYXJhbWV0ZXJUeXBlJzogQ3BwR2VuZXJhdG9yLmNwcF90
eXBlX2Zvcl90eXBlX21lbWJlcih0eXBlX21lbWJlciksCi0gICAgICAgICAgICAnaGVscGVyc05h
bWVzcGFjZSc6IHNlbGYuaGVscGVyc19uYW1lc3BhY2UoKSwKKyAgICAgICAgICAgICdzZXR0ZXIn
OiBDcHBHZW5lcmF0b3IuY3BwX3NldHRlcl9tZXRob2RfZm9yX3R5cGUodHlwZV9tZW1iZXIudHlw
ZSksCisgICAgICAgICAgICAnbWVtYmVyVHlwZSc6IENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3Jf
dHlwZV9tZW1iZXJfYXJndW1lbnQodHlwZV9tZW1iZXIudHlwZSwgdHlwZV9tZW1iZXIubWVtYmVy
X25hbWUpLAorICAgICAgICAgICAgJ21lbWJlcktleSc6IHR5cGVfbWVtYmVyLm1lbWJlcl9uYW1l
LAorICAgICAgICAgICAgJ21lbWJlck5hbWUnOiBtZW1iZXJfbmFtZSwKKyAgICAgICAgICAgICdt
ZW1iZXJWYWx1ZSc6IG1lbWJlcl92YWx1ZSwKICAgICAgICAgfQogCiAgICAgICAgIGxpbmVzID0g
W10KICAgICAgICAgbGluZXMuYXBwZW5kKCcnKQotICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAg
ICAgQnVpbGRlcjxTVEFURSB8ICUoY2FtZWxOYW1lKXNTZXQ+JiBzZXQlKGNhbWVsTmFtZSlzKCUo
cGFyYW1ldGVyVHlwZSlzIHZhbHVlKScgJSBzZXR0ZXJfYXJncykKKyAgICAgICAgbGluZXMuYXBw
ZW5kKCcgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCAlKGNhbWVsTmFtZSlzU2V0PiYgc2V0JShjYW1l
bE5hbWUpcyglKG1lbWJlclR5cGUpcyAlKG1lbWJlck5hbWUpcyknICUgc2V0dGVyX2FyZ3MpCiAg
ICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICB7JykKLSAgICAgICAgbGluZXMuYXBwZW5kKCcg
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgJShjYW1lbE5hbWUpc1NldCksIHBy
b3BlcnR5XyUobmFtZSlzX2FscmVhZHlfc2V0KTsnICUgc2V0dGVyX2FyZ3MpCi0KLSAgICAgICAg
aWYgaXNpbnN0YW5jZSh0eXBlX21lbWJlci50eXBlLCBFbnVtVHlwZSk6Ci0gICAgICAgICAgICBs
aW5lcy5hcHBlbmQoJyAgICAgICAgICAgIG1fcmVzdWx0LT4lKGtleWVkU2V0KXMoIiUobmFtZSlz
Il9zLCBJbnNwZWN0b3I6OlByb3RvY29sOjolKGhlbHBlcnNOYW1lc3BhY2Upczo6Z2V0RW51bUNv
bnN0YW50VmFsdWUodmFsdWUpKTsnICUgc2V0dGVyX2FyZ3MpCi0gICAgICAgIGVsc2U6Ci0gICAg
ICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgICAgIG1fcmVzdWx0LT4lKGtleWVkU2V0KXMo
IiUobmFtZSlzIl9zLCB2YWx1ZSk7JyAlIHNldHRlcl9hcmdzKQorICAgICAgICBsaW5lcy5hcHBl
bmQoJyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiAlKGNhbWVsTmFtZSlzU2V0
KSwgcHJvcGVydHlfJShtZW1iZXJLZXkpc19hbHJlYWR5X3NldCk7JyAlIHNldHRlcl9hcmdzKQor
ICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgICAgIG1fcmVzdWx0LT4lKHNldHRlcilzKCIl
KG1lbWJlcktleSlzIl9zLCAlKG1lbWJlclZhbHVlKXMpOycgJSBzZXR0ZXJfYXJncykKICAgICAg
ICAgbGluZXMuYXBwZW5kKCcgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPCUoY2FtZWxOYW1l
KXNTZXQ+KCk7JyAlIHNldHRlcl9hcmdzKQogICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAg
fScpCiAgICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCiAKICAgICBkZWYgX2dlbmVyYXRl
X3VuY2hlY2tlZF9zZXR0ZXJfZm9yX21lbWJlcihzZWxmLCB0eXBlX21lbWJlciwgZG9tYWluKToK
KyAgICAgICAgbWVtYmVyX25hbWUgPSAnaW5fb3B0XycgKyB0eXBlX21lbWJlci5tZW1iZXJfbmFt
ZQorCisgICAgICAgIG1lbWJlcl92YWx1ZSA9IG1lbWJlcl9uYW1lCisgICAgICAgIGlmIHR5cGVf
bWVtYmVyLnR5cGUuaXNfZW51bSgpOgorICAgICAgICAgICAgbWVtYmVyX3ZhbHVlID0gJ1Byb3Rv
Y29sOjolczo6Z2V0RW51bUNvbnN0YW50VmFsdWUoJXMpJyAlIChzZWxmLmhlbHBlcnNfbmFtZXNw
YWNlKCksIG1lbWJlcl92YWx1ZSkKKyAgICAgICAgZWxpZiBDcHBHZW5lcmF0b3Iuc2hvdWxkX21v
dmVfYXJndW1lbnQodHlwZV9tZW1iZXIudHlwZSwgRmFsc2UpOgorICAgICAgICAgICAgbWVtYmVy
X3ZhbHVlID0gJ1dURk1vdmUoJXMpJyAlIG1lbWJlcl92YWx1ZQorCiAgICAgICAgIHNldHRlcl9h
cmdzID0gewogICAgICAgICAgICAgJ2NhbWVsTmFtZSc6IHVjZmlyc3QodHlwZV9tZW1iZXIubWVt
YmVyX25hbWUpLAotICAgICAgICAgICAgJ2tleWVkU2V0JzogQ3BwR2VuZXJhdG9yLmNwcF9zZXR0
ZXJfbWV0aG9kX2Zvcl90eXBlKHR5cGVfbWVtYmVyLnR5cGUpLAotICAgICAgICAgICAgJ25hbWUn
OiB0eXBlX21lbWJlci5tZW1iZXJfbmFtZSwKLSAgICAgICAgICAgICdwYXJhbWV0ZXJUeXBlJzog
Q3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl90eXBlX21lbWJlcih0eXBlX21lbWJlciksCi0gICAg
ICAgICAgICAnaGVscGVyc05hbWVzcGFjZSc6IHNlbGYuaGVscGVyc19uYW1lc3BhY2UoKSwKKyAg
ICAgICAgICAgICdzZXR0ZXInOiBDcHBHZW5lcmF0b3IuY3BwX3NldHRlcl9tZXRob2RfZm9yX3R5
cGUodHlwZV9tZW1iZXIudHlwZSksCisgICAgICAgICAgICAnbWVtYmVyS2V5JzogdHlwZV9tZW1i
ZXIubWVtYmVyX25hbWUsCisgICAgICAgICAgICAnbWVtYmVyTmFtZSc6IG1lbWJlcl9uYW1lLAor
ICAgICAgICAgICAgJ21lbWJlclZhbHVlJzogbWVtYmVyX3ZhbHVlLAorICAgICAgICAgICAgJ21l
bWJlclR5cGUnOiBDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX3R5cGVfbWVtYmVyX2FyZ3VtZW50
KHR5cGVfbWVtYmVyLnR5cGUsIHR5cGVfbWVtYmVyLm1lbWJlcl9uYW1lKSwKICAgICAgICAgfQog
CiAgICAgICAgIGxpbmVzID0gW10KICAgICAgICAgbGluZXMuYXBwZW5kKCcnKQotICAgICAgICBs
aW5lcy5hcHBlbmQoJyAgICB2b2lkIHNldCUoY2FtZWxOYW1lKXMoJShwYXJhbWV0ZXJUeXBlKXMg
dmFsdWUpJyAlIHNldHRlcl9hcmdzKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICB2b2lkIHNl
dCUoY2FtZWxOYW1lKXMoJShtZW1iZXJUeXBlKXMgJShtZW1iZXJOYW1lKXMpJyAlIHNldHRlcl9h
cmdzKQogICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICB7JykKLSAgICAgICAgaWYgaXNpbnN0YW5j
ZSh0eXBlX21lbWJlci50eXBlLCBFbnVtVHlwZSk6Ci0gICAgICAgICAgICBsaW5lcy5hcHBlbmQo
JyAgICAgICAgSlNPTjo6T2JqZWN0QmFzZTo6JShrZXllZFNldClzKCIlKG5hbWUpcyJfcywgSW5z
cGVjdG9yOjpQcm90b2NvbDo6JShoZWxwZXJzTmFtZXNwYWNlKXM6OmdldEVudW1Db25zdGFudFZh
bHVlKHZhbHVlKSk7JyAlIHNldHRlcl9hcmdzKQotICAgICAgICBlbGlmIENwcEdlbmVyYXRvci5z
aG91bGRfdXNlX3JlZmVyZW5jZXNfZm9yX3R5cGUodHlwZV9tZW1iZXIudHlwZSk6Ci0gICAgICAg
ICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgSlNPTjo6T2JqZWN0QmFzZTo6JShrZXllZFNldClz
KCIlKG5hbWUpcyJfcywgV1RGTW92ZSh2YWx1ZSkpOycgJSBzZXR0ZXJfYXJncykKLSAgICAgICAg
ZWxzZToKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBKU09OOjpPYmplY3RCYXNl
OjolKGtleWVkU2V0KXMoIiUobmFtZSlzIl9zLCB2YWx1ZSk7JyAlIHNldHRlcl9hcmdzKQorICAg
ICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgSlNPTjo6T2JqZWN0QmFzZTo6JShzZXR0ZXIpcygi
JShtZW1iZXJLZXkpcyJfcywgJShtZW1iZXJWYWx1ZSlzKTsnICUgc2V0dGVyX2FyZ3MpCiAgICAg
ICAgIGxpbmVzLmFwcGVuZCgnICAgIH0nKQogICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVz
KQogCkBAIC0zODEsMTMgKzM4OSwxMyBAQCBjbGFzcyBDcHBQcm90b2NvbFR5cGVzSGVhZGVyR2Vu
ZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAgICAgICBkZWNsYXJhdGlvbnNfdG9fZ2VuZXJh
dGUgPSBbZGVjbCBmb3IgZGVjbCBpbiB0eXBlX2RlY2xhcmF0aW9ucyBpZiBzZWxmLnR5cGVfbmVl
ZHNfc2hhcGVfYXNzZXJ0aW9ucyhkZWNsLnR5cGUpXQogCiAgICAgICAgICAgICBmb3IgdHlwZV9k
ZWNsYXJhdGlvbiBpbiBkZWNsYXJhdGlvbnNfdG9fZ2VuZXJhdGU6Ci0gICAgICAgICAgICAgICAg
Zm9yIHR5cGVfbWVtYmVyIGluIHR5cGVfZGVjbGFyYXRpb24udHlwZV9tZW1iZXJzOgotICAgICAg
ICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHR5cGVfbWVtYmVyLnR5cGUsIEVudW1UeXBlKToK
LSAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVfYXJndW1lbnRzLmFwcGVuZCgoc2VsZi53cmFw
X3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbih0eXBlX2RlY2xhcmF0aW9uLmNvbmRpdGlvbiwgQ3Bw
R2VuZXJhdG9yLmNwcF9wcm90b2NvbF90eXBlX2Zvcl90eXBlX21lbWJlcih0eXBlX21lbWJlciwg
dHlwZV9kZWNsYXJhdGlvbikpLCBGYWxzZSkpCi0KICAgICAgICAgICAgICAgICBpZiBpc2luc3Rh
bmNlKHR5cGVfZGVjbGFyYXRpb24udHlwZSwgT2JqZWN0VHlwZSk6CiAgICAgICAgICAgICAgICAg
ICAgIHR5cGVfYXJndW1lbnRzLmFwcGVuZCgoc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRp
dGlvbih0eXBlX2RlY2xhcmF0aW9uLmNvbmRpdGlvbiwgQ3BwR2VuZXJhdG9yLmNwcF9wcm90b2Nv
bF90eXBlX2Zvcl90eXBlKHR5cGVfZGVjbGFyYXRpb24udHlwZSkpLCBHZW5lcmF0b3IudHlwZV9u
ZWVkc19ydW50aW1lX2Nhc3RzKHR5cGVfZGVjbGFyYXRpb24udHlwZSkpKQogCisgICAgICAgICAg
ICAgICAgZm9yIHR5cGVfbWVtYmVyIGluIHR5cGVfZGVjbGFyYXRpb24udHlwZV9tZW1iZXJzOgor
ICAgICAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHR5cGVfbWVtYmVyLnR5cGUsIEVudW1U
eXBlKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVfYXJndW1lbnRzLmFwcGVuZCgoc2Vs
Zi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbih0eXBlX2RlY2xhcmF0aW9uLmNvbmRpdGlv
biwgQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl9lbnVtKHR5cGVfbWVtYmVyLnR5cGUsICclczo6
JXMnICUgKHR5cGVfZGVjbGFyYXRpb24udHlwZV9uYW1lLCB1Y2ZpcnN0KHR5cGVfbWVtYmVyLm1l
bWJlcl9uYW1lKSkpKSwgRmFsc2UpKQorCiAgICAgICAgIHN0cnVjdF9rZXl3b3JkcyA9IFsnc3Ry
dWN0J10KICAgICAgICAgZnVuY3Rpb25fa2V5d29yZHMgPSBbJ3N0YXRpYyB2b2lkJ10KICAgICAg
ICAgZXhwb3J0X21hY3JvID0gc2VsZi5tb2RlbCgpLmZyYW1ld29yay5zZXR0aW5nKCdleHBvcnRf
bWFjcm8nLCBOb25lKQpAQCAtMzk5LDcgKzQwNyw3IEBAIGNsYXNzIENwcFByb3RvY29sVHlwZXNI
ZWFkZXJHZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAgICAgZm9yIGFyZ3VtZW50IGluIHR5
cGVfYXJndW1lbnRzOgogICAgICAgICAgICAgbGluZXMuYXBwZW5kKCd0ZW1wbGF0ZTw+ICVzIEJp
bmRpbmdUcmFpdHM8JXM+IHsnICUgKCcgJy5qb2luKHN0cnVjdF9rZXl3b3JkcyksIGFyZ3VtZW50
WzBdKSkKICAgICAgICAgICAgIGlmIGFyZ3VtZW50WzFdOgotICAgICAgICAgICAgICAgIGxpbmVz
LmFwcGVuZCgnc3RhdGljIFJlZlB0cjwlcz4gcnVudGltZUNhc3QoUmVmUHRyPEpTT046OlZhbHVl
PiYmIHZhbHVlKTsnICUgYXJndW1lbnRbMF0pCisgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5k
KCdzdGF0aWMgUmVmPCVzPiBydW50aW1lQ2FzdChSZWY8SlNPTjo6VmFsdWU+JiYgdmFsdWUpOycg
JSBhcmd1bWVudFswXSkKICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnJXMgYXNzZXJ0VmFsdWVI
YXNFeHBlY3RlZFR5cGUoSlNPTjo6VmFsdWUqKTsnICUgJyAnLmpvaW4oZnVuY3Rpb25fa2V5d29y
ZHMpKQogICAgICAgICAgICAgbGluZXMuYXBwZW5kKCd9OycpCiAgICAgICAgIHJldHVybiAnXG4n
LmpvaW4obGluZXMpCkBAIC00MzgsMTMgKzQ0NiwxMyBAQCBjbGFzcyBDcHBQcm90b2NvbFR5cGVz
SGVhZGVyR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAgICAgICBkb21haW5fbGluZXMg
PSBbXQogICAgICAgICAgICAgZG9tYWluX2xpbmVzLmFwcGVuZCgiLy8gRW51bXMgaW4gdGhlICcl
cycgRG9tYWluIiAlIGRvbWFpbi5kb21haW5fbmFtZSkKICAgICAgICAgICAgIGZvciBlbnVtX3R5
cGUgaW4gZW51bV90eXBlczoKLSAgICAgICAgICAgICAgICBjcHBfcHJvdG9jb2xfdHlwZSA9IENw
cEdlbmVyYXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZShlbnVtX3R5cGUpCisgICAgICAg
ICAgICAgICAgY3BwX3Byb3RvY29sX3R5cGUgPSBDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX2Vu
dW0oZW51bV90eXBlLCBlbnVtX3R5cGUucmF3X25hbWUoKSkKICAgICAgICAgICAgICAgICBkb21h
aW5fbGluZXMuYXBwZW5kKHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZW51bV90
eXBlLmRlY2xhcmF0aW9uKCkuY29uZGl0aW9uLCAndGVtcGxhdGU8PlxuJXMgcGFyc2VFbnVtVmFs
dWVGcm9tU3RyaW5nPCVzPihjb25zdCBTdHJpbmcmKTsnICUgKHJldHVybl90eXBlX3dpdGhfZXhw
b3J0X21hY3JvKGNwcF9wcm90b2NvbF90eXBlKSwgY3BwX3Byb3RvY29sX3R5cGUpKSkKIAogICAg
ICAgICAgICAgZm9yIG9iamVjdF90eXBlIGluIG9iamVjdF90eXBlczoKICAgICAgICAgICAgICAg
ICBvYmplY3RfbGluZXMgPSBbXQogICAgICAgICAgICAgICAgIGZvciBlbnVtX21lbWJlciBpbiBm
aWx0ZXIodHlwZV9tZW1iZXJfaXNfYW5vbnltb3VzX2VudW1fdHlwZSwgb2JqZWN0X3R5cGUubWVt
YmVycyk6Ci0gICAgICAgICAgICAgICAgICAgIGNwcF9wcm90b2NvbF90eXBlID0gQ3BwR2VuZXJh
dG9yLmNwcF9wcm90b2NvbF90eXBlX2Zvcl90eXBlX21lbWJlcihlbnVtX21lbWJlciwgb2JqZWN0
X3R5cGUuZGVjbGFyYXRpb24oKSkKKyAgICAgICAgICAgICAgICAgICAgY3BwX3Byb3RvY29sX3R5
cGUgPSBDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX2VudW0oZW51bV9tZW1iZXIudHlwZSwgJyVz
OjolcycgJSAob2JqZWN0X3R5cGUucmF3X25hbWUoKSwgdWNmaXJzdChlbnVtX21lbWJlci5tZW1i
ZXJfbmFtZSkpKQogICAgICAgICAgICAgICAgICAgICBvYmplY3RfbGluZXMuYXBwZW5kKCd0ZW1w
bGF0ZTw+XG4lcyBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8JXM+KGNvbnN0IFN0cmluZyYpOycg
JSAocmV0dXJuX3R5cGVfd2l0aF9leHBvcnRfbWFjcm8oY3BwX3Byb3RvY29sX3R5cGUpLCBjcHBf
cHJvdG9jb2xfdHlwZSkpCiAgICAgICAgICAgICAgICAgaWYgbGVuKG9iamVjdF9saW5lcyk6CiAg
ICAgICAgICAgICAgICAgICAgIGRvbWFpbl9saW5lcy5hcHBlbmQoc2VsZi53cmFwX3dpdGhfZ3Vh
cmRfZm9yX2NvbmRpdGlvbihvYmplY3RfdHlwZS5kZWNsYXJhdGlvbigpLmNvbmRpdGlvbiwgJ1xu
Jy5qb2luKG9iamVjdF9saW5lcykpKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX3Byb3RvY29sX3R5cGVzX2lt
cGxlbWVudGF0aW9uLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2NvZGVnZW4vZ2VuZXJhdGVfY3BwX3Byb3RvY29sX3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5Cmlu
ZGV4IDVkZDUzNDY5NDQ4NTUxNTQ4ZDY3YWEwYjQ1NmM2YTFhNjY1OGQ1OTMuLjEzZTU4OTcyNmQ0
Y2RiN2E0NTJjNjcwYzgzMjVlYjFhMzllZTYyMjIgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9wcm90b2NvbF90
eXBlc19pbXBsZW1lbnRhdGlvbi5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfcHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50
YXRpb24ucHkKQEAgLTgyLDEwICs4Miw4IEBAIGNsYXNzIENwcFByb3RvY29sVHlwZXNJbXBsZW1l
bnRhdGlvbkdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogCiAgICAgZGVmIF9nZW5lcmF0ZV9zZWNv
bmRhcnlfaGVhZGVyX2luY2x1ZGVzKHNlbGYpOgogICAgICAgICBoZWFkZXJfaW5jbHVkZXMgPSBb
Ci0gICAgICAgICAgICAoWyJKYXZhU2NyaXB0Q29yZSIsICJXZWJLaXQiXSwgKCJXVEYiLCAid3Rm
L09wdGlvbmFsLmgiKSksCi0gICAgICAgICAgICAoWyJKYXZhU2NyaXB0Q29yZSIsICJXZWJLaXQi
XSwgKCJXVEYiLCAid3RmL3RleHQvQ1N0cmluZy5oIikpLAorICAgICAgICAgICAgKFsiSmF2YVNj
cmlwdENvcmUiLCAiV2ViS2l0Il0sICgiV1RGIiwgInd0Zi9Bc3NlcnRpb25zLmgiKSksCiAgICAg
ICAgIF0KLQogICAgICAgICByZXR1cm4gJ1xuJy5qb2luKHNlbGYuZ2VuZXJhdGVfaW5jbHVkZXNf
ZnJvbV9lbnRyaWVzKGhlYWRlcl9pbmNsdWRlcykpCiAKICAgICBkZWYgX2dlbmVyYXRlX2VudW1f
bWFwcGluZyhzZWxmKToKQEAgLTE0NCwxNCArMTQyLDE0IEBAIGNsYXNzIENwcFByb3RvY29sVHlw
ZXNJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAgICBsaW5lcyA9
IFtdCiAgICAgICAgIGxpbmVzLmFwcGVuZCgiLy8gRW51bXMgaW4gdGhlICclcycgRG9tYWluIiAl
IGRvbWFpbi5kb21haW5fbmFtZSkKICAgICAgICAgZm9yIGVudW1fdHlwZSBpbiBlbnVtX3R5cGVz
OgotICAgICAgICAgICAgY3BwX3Byb3RvY29sX3R5cGUgPSBDcHBHZW5lcmF0b3IuY3BwX3Byb3Rv
Y29sX3R5cGVfZm9yX3R5cGUoZW51bV90eXBlKQorICAgICAgICAgICAgY3BwX3Byb3RvY29sX3R5
cGUgPSBDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX2VudW0oZW51bV90eXBlLCBlbnVtX3R5cGUu
cmF3X25hbWUoKSkKICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnJykKICAgICAgICAgICAgIGxp
bmVzLmFwcGVuZChzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGVudW1fdHlwZS5k
ZWNsYXJhdGlvbigpLmNvbmRpdGlvbiwgZ2VuZXJhdGVfY29udmVyc2lvbl9tZXRob2RfYm9keShl
bnVtX3R5cGUsIGNwcF9wcm90b2NvbF90eXBlKSkpCiAKICAgICAgICAgZm9yIG9iamVjdF90eXBl
IGluIG9iamVjdF90eXBlczoKICAgICAgICAgICAgIG9iamVjdF9saW5lcyA9IFtdCiAgICAgICAg
ICAgICBmb3IgZW51bV9tZW1iZXIgaW4gZmlsdGVyKHR5cGVfbWVtYmVyX2lzX2Fub255bW91c19l
bnVtX3R5cGUsIG9iamVjdF90eXBlLm1lbWJlcnMpOgotICAgICAgICAgICAgICAgIGNwcF9wcm90
b2NvbF90eXBlID0gQ3BwR2VuZXJhdG9yLmNwcF9wcm90b2NvbF90eXBlX2Zvcl90eXBlX21lbWJl
cihlbnVtX21lbWJlciwgb2JqZWN0X3R5cGUuZGVjbGFyYXRpb24oKSkKKyAgICAgICAgICAgICAg
ICBjcHBfcHJvdG9jb2xfdHlwZSA9IENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3JfZW51bShlbnVt
X21lbWJlci50eXBlLCAnJXM6OiVzJyAlIChvYmplY3RfdHlwZS5yYXdfbmFtZSgpLCB1Y2ZpcnN0
KGVudW1fbWVtYmVyLm1lbWJlcl9uYW1lKSkpCiAgICAgICAgICAgICAgICAgb2JqZWN0X2xpbmVz
LmFwcGVuZChnZW5lcmF0ZV9jb252ZXJzaW9uX21ldGhvZF9ib2R5KGVudW1fbWVtYmVyLnR5cGUs
IGNwcF9wcm90b2NvbF90eXBlKSkKICAgICAgICAgICAgIGlmIGxlbihvYmplY3RfbGluZXMpOgog
ICAgICAgICAgICAgICAgIGlmIGxlbihsaW5lcyk6CkBAIC0xODMsOCArMTgxLDcgQEAgY2xhc3Mg
Q3BwUHJvdG9jb2xUeXBlc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAg
ICAgICAgICAgICBmb3IgdHlwZV9kZWNsYXJhdGlvbiBpbiBbZGVjbCBmb3IgZGVjbCBpbiB0eXBl
X2RlY2xhcmF0aW9ucyBpZiBHZW5lcmF0b3IudHlwZV9oYXNfb3Blbl9maWVsZHMoZGVjbC50eXBl
KV06CiAgICAgICAgICAgICAgICAgb3Blbl9tZW1iZXJzID0gR2VuZXJhdG9yLm9wZW5fZmllbGRz
KHR5cGVfZGVjbGFyYXRpb24pCiAgICAgICAgICAgICAgICAgZm9yIHR5cGVfbWVtYmVyIGluIHNv
cnRlZChvcGVuX21lbWJlcnMsIGtleT1sYW1iZGEgbWVtYmVyOiBtZW1iZXIubWVtYmVyX25hbWUp
OgotICAgICAgICAgICAgICAgICAgICBmaWVsZF9uYW1lID0gJzo6Jy5qb2luKFsnSW5zcGVjdG9y
JywgJ1Byb3RvY29sJywgZG9tYWluLmRvbWFpbl9uYW1lLCB1Y2ZpcnN0KHR5cGVfZGVjbGFyYXRp
b24udHlwZV9uYW1lKSwgdWNmaXJzdCh0eXBlX21lbWJlci5tZW1iZXJfbmFtZSldKQotICAgICAg
ICAgICAgICAgICAgICBkb21haW5fbGluZXMuYXBwZW5kKCdjb25zdCBjaGFyKiAlcyA9ICIlcyI7
JyAlIChmaWVsZF9uYW1lLCB0eXBlX21lbWJlci5tZW1iZXJfbmFtZSkpCisgICAgICAgICAgICAg
ICAgICAgIGRvbWFpbl9saW5lcy5hcHBlbmQoJ2NvbnN0IGNoYXIqIFByb3RvY29sOjolczo6JXM6
OiVzS2V5ID0gIiVzIjsnICUgKGRvbWFpbi5kb21haW5fbmFtZSwgdWNmaXJzdCh0eXBlX2RlY2xh
cmF0aW9uLnR5cGVfbmFtZSksIHR5cGVfbWVtYmVyLm1lbWJlcl9uYW1lLCB0eXBlX21lbWJlci5t
ZW1iZXJfbmFtZSkpCiAgICAgICAgICAgICBpZiBsZW4oZG9tYWluX2xpbmVzKToKICAgICAgICAg
ICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihk
b21haW4uY29uZGl0aW9uLCAnXG4nLmpvaW4oZG9tYWluX2xpbmVzKSkpCiAKQEAgLTIyNywzNyAr
MjI0LDU0IEBAIGNsYXNzIENwcFByb3RvY29sVHlwZXNJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihD
cHBHZW5lcmF0b3IpOgogCiAgICAgICAgIGxpbmVzLmFwcGVuZCgndm9pZCBCaW5kaW5nVHJhaXRz
PCVzPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoSlNPTjo6VmFsdWUqIHZhbHVlKScgJSAo
Q3BwR2VuZXJhdG9yLmNwcF9wcm90b2NvbF90eXBlX2Zvcl90eXBlKG9iamVjdF9kZWNsYXJhdGlv
bi50eXBlKSkpCiAgICAgICAgIGxpbmVzLmFwcGVuZCgiIiJ7CisgICAgQVNTRVJUX1VOVVNFRCh2
YWx1ZSwgdmFsdWUpOwogI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgQVNTRVJUX0FSRyh2YWx1ZSwg
dmFsdWUpOwotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG9iamVjdDsKLSAgICBib29sIGNhc3RT
dWNjZWVkZWQgPSB2YWx1ZS0+YXNPYmplY3Qob2JqZWN0KTsKLSAgICBBU1NFUlRfVU5VU0VEKGNh
c3RTdWNjZWVkZWQsIGNhc3RTdWNjZWVkZWQpOyIiIikKKyAgICBhdXRvIG9iamVjdCA9IHZhbHVl
LT5hc09iamVjdCgpOworICAgIEFTU0VSVChvYmplY3QpOyIiIikKICAgICAgICAgZm9yIHR5cGVf
bWVtYmVyIGluIHJlcXVpcmVkX21lbWJlcnM6CisgICAgICAgICAgICBtZW1iZXJfdHlwZSA9IHR5
cGVfbWVtYmVyLnR5cGUKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UobWVtYmVyX3R5cGUsIEFs
aWFzZWRUeXBlKToKKyAgICAgICAgICAgICAgICBtZW1iZXJfdHlwZSA9IG1lbWJlcl90eXBlLmFs
aWFzZWRfdHlwZQorCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKG1lbWJlcl90eXBlLCBFbnVt
VHlwZSk6CisgICAgICAgICAgICAgICAgbWVtYmVyX3R5cGUgPSBDcHBHZW5lcmF0b3IuY3BwX3R5
cGVfZm9yX2VudW0obWVtYmVyX3R5cGUsICclczo6JXMnICUgKG9iamVjdF9kZWNsYXJhdGlvbi50
eXBlX25hbWUsIHVjZmlyc3QodHlwZV9tZW1iZXIubWVtYmVyX25hbWUpKSkKKyAgICAgICAgICAg
IGVsc2U6CisgICAgICAgICAgICAgICAgbWVtYmVyX3R5cGUgPSBDcHBHZW5lcmF0b3IuY3BwX3By
b3RvY29sX3R5cGVfZm9yX3R5cGUobWVtYmVyX3R5cGUpCisKICAgICAgICAgICAgIGFyZ3MgPSB7
CiAgICAgICAgICAgICAgICAgJ21lbWJlck5hbWUnOiB0eXBlX21lbWJlci5tZW1iZXJfbmFtZSwK
LSAgICAgICAgICAgICAgICAnYXNzZXJ0TWV0aG9kJzogQ3BwR2VuZXJhdG9yLmNwcF9hc3NlcnRp
b25fbWV0aG9kX2Zvcl90eXBlX21lbWJlcih0eXBlX21lbWJlciwgb2JqZWN0X2RlY2xhcmF0aW9u
KQorICAgICAgICAgICAgICAgICdtZW1iZXJUeXBlJzogbWVtYmVyX3R5cGUKICAgICAgICAgICAg
IH0KIAogICAgICAgICAgICAgbGluZXMuYXBwZW5kKCIiIiAgICB7CiAgICAgICAgIGF1dG8gJSht
ZW1iZXJOYW1lKXNQb3MgPSBvYmplY3QtPmZpbmQoIiUobWVtYmVyTmFtZSlzIl9zKTsKICAgICAg
ICAgQVNTRVJUKCUobWVtYmVyTmFtZSlzUG9zICE9IG9iamVjdC0+ZW5kKCkpOwotICAgICAgICAl
KGFzc2VydE1ldGhvZClzKCUobWVtYmVyTmFtZSlzUG9zLT52YWx1ZS5nZXQoKSk7CisgICAgICAg
IEJpbmRpbmdUcmFpdHM8JShtZW1iZXJUeXBlKXM+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlw
ZSglKG1lbWJlck5hbWUpc1Bvcy0+dmFsdWUucHRyKCkpOwogICAgIH0iIiIgJSBhcmdzKQogCiAg
ICAgICAgIGlmIHNob3VsZF9jb3VudF9wcm9wZXJ0aWVzOgogICAgICAgICAgICAgbGluZXMuYXBw
ZW5kKCcnKQotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgaW50IGZvdW5kUHJvcGVydGll
c0NvdW50ID0gJXM7JyAlIGxlbihyZXF1aXJlZF9tZW1iZXJzKSkKKyAgICAgICAgICAgIGxpbmVz
LmFwcGVuZCgnICAgIHNpemVfdCBmb3VuZFByb3BlcnRpZXNDb3VudCA9ICVzOycgJSBsZW4ocmVx
dWlyZWRfbWVtYmVycykpCiAKICAgICAgICAgZm9yIHR5cGVfbWVtYmVyIGluIG9wdGlvbmFsX21l
bWJlcnM6CisgICAgICAgICAgICBtZW1iZXJfdHlwZSA9IHR5cGVfbWVtYmVyLnR5cGUKKyAgICAg
ICAgICAgIGlmIGlzaW5zdGFuY2UobWVtYmVyX3R5cGUsIEFsaWFzZWRUeXBlKToKKyAgICAgICAg
ICAgICAgICBtZW1iZXJfdHlwZSA9IG1lbWJlcl90eXBlLmFsaWFzZWRfdHlwZQorCisgICAgICAg
ICAgICBpZiBpc2luc3RhbmNlKG1lbWJlcl90eXBlLCBFbnVtVHlwZSk6CisgICAgICAgICAgICAg
ICAgbWVtYmVyX3R5cGUgPSBDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX2VudW0obWVtYmVyX3R5
cGUsICclczo6JXMnICUgKG9iamVjdF9kZWNsYXJhdGlvbi50eXBlX25hbWUsIHVjZmlyc3QodHlw
ZV9tZW1iZXIubWVtYmVyX25hbWUpKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAg
ICAgbWVtYmVyX3R5cGUgPSBDcHBHZW5lcmF0b3IuY3BwX3Byb3RvY29sX3R5cGVfZm9yX3R5cGUo
bWVtYmVyX3R5cGUpCisKICAgICAgICAgICAgIGFyZ3MgPSB7CiAgICAgICAgICAgICAgICAgJ21l
bWJlck5hbWUnOiB0eXBlX21lbWJlci5tZW1iZXJfbmFtZSwKLSAgICAgICAgICAgICAgICAnYXNz
ZXJ0TWV0aG9kJzogQ3BwR2VuZXJhdG9yLmNwcF9hc3NlcnRpb25fbWV0aG9kX2Zvcl90eXBlX21l
bWJlcih0eXBlX21lbWJlciwgb2JqZWN0X2RlY2xhcmF0aW9uKQorICAgICAgICAgICAgICAgICdt
ZW1iZXJUeXBlJzogbWVtYmVyX3R5cGUKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgbGlu
ZXMuYXBwZW5kKCIiIiAgICB7CiAgICAgICAgIGF1dG8gJShtZW1iZXJOYW1lKXNQb3MgPSBvYmpl
Y3QtPmZpbmQoIiUobWVtYmVyTmFtZSlzIl9zKTsKICAgICAgICAgaWYgKCUobWVtYmVyTmFtZSlz
UG9zICE9IG9iamVjdC0+ZW5kKCkpIHsKLSAgICAgICAgICAgICUoYXNzZXJ0TWV0aG9kKXMoJSht
ZW1iZXJOYW1lKXNQb3MtPnZhbHVlLmdldCgpKTsiIiIgJSBhcmdzKQorICAgICAgICAgICAgQmlu
ZGluZ1RyYWl0czwlKG1lbWJlclR5cGUpcz46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKCUo
bWVtYmVyTmFtZSlzUG9zLT52YWx1ZS5wdHIoKSk7IiIiICUgYXJncykKIAogICAgICAgICAgICAg
aWYgc2hvdWxkX2NvdW50X3Byb3BlcnRpZXM6CiAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5k
KCcgICAgICAgICAgICArK2ZvdW5kUHJvcGVydGllc0NvdW50OycpCkBAIC0yNjcsMjcgKzI4MSwy
MiBAQCBjbGFzcyBDcHBQcm90b2NvbFR5cGVzSW1wbGVtZW50YXRpb25HZW5lcmF0b3IoQ3BwR2Vu
ZXJhdG9yKToKICAgICAgICAgaWYgc2hvdWxkX2NvdW50X3Byb3BlcnRpZXM6CiAgICAgICAgICAg
ICBsaW5lcy5hcHBlbmQoJyAgICBpZiAoZm91bmRQcm9wZXJ0aWVzQ291bnQgIT0gb2JqZWN0LT5z
aXplKCkpJykKICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBGQVRBTCgiVW5leHBl
Y3RlZCBwcm9wZXJ0aWVzIGluIG9iamVjdDogJXNcXG4iLCBvYmplY3QtPnRvSlNPTlN0cmluZygp
LmFzY2lpKCkuZGF0YSgpKTsnKQotICAgICAgICBsaW5lcy5hcHBlbmQoJyNlbHNlIC8vIEFTU0VS
VF9FTkFCTEVEJykKLSAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgVU5VU0VEX1BBUkFNKHZhbHVl
KTsnKQotICAgICAgICBsaW5lcy5hcHBlbmQoJyNlbmRpZiAvLyBBU1NFUlRfRU5BQkxFRCcpCisg
ICAgICAgIGxpbmVzLmFwcGVuZCgnI2VuZGlmJykKICAgICAgICAgbGluZXMuYXBwZW5kKCd9JykK
ICAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKIAogICAgIGRlZiBfZ2VuZXJhdGVfYXNz
ZXJ0aW9uX2Zvcl9lbnVtKHNlbGYsIGVudW1fbWVtYmVyLCBvYmplY3RfZGVjbGFyYXRpb24pOgog
ICAgICAgICBsaW5lcyA9IFtdCi0gICAgICAgIGxpbmVzLmFwcGVuZCgndm9pZCAlcyhKU09OOjpW
YWx1ZSogdmFsdWUpJyAlIENwcEdlbmVyYXRvci5jcHBfYXNzZXJ0aW9uX21ldGhvZF9mb3JfdHlw
ZV9tZW1iZXIoZW51bV9tZW1iZXIsIG9iamVjdF9kZWNsYXJhdGlvbikpCisgICAgICAgIGxpbmVz
LmFwcGVuZCgndm9pZCBCaW5kaW5nVHJhaXRzPCVzPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5
cGUoSlNPTjo6VmFsdWUqIHZhbHVlKScgJSBDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX2VudW0o
ZW51bV9tZW1iZXIudHlwZSwgJyVzOjolcycgJSAob2JqZWN0X2RlY2xhcmF0aW9uLnR5cGVfbmFt
ZSwgdWNmaXJzdChlbnVtX21lbWJlci5tZW1iZXJfbmFtZSkpKSkKICAgICAgICAgbGluZXMuYXBw
ZW5kKCd7JykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgQVNTRVJUX1VOVVNFRCh2YWx1ZSwg
dmFsdWUpOycpCiAgICAgICAgIGxpbmVzLmFwcGVuZCgnI2lmIEFTU0VSVF9FTkFCTEVEJykKLSAg
ICAgICAgbGluZXMuYXBwZW5kKCcgICAgQVNTRVJUX0FSRyh2YWx1ZSwgdmFsdWUpOycpCi0gICAg
ICAgIGxpbmVzLmFwcGVuZCgnICAgIFN0cmluZyByZXN1bHQ7JykKLSAgICAgICAgbGluZXMuYXBw
ZW5kKCcgICAgYm9vbCBjYXN0U3VjY2VlZGVkID0gdmFsdWUtPmFzU3RyaW5nKHJlc3VsdCk7JykK
LSAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgQVNTRVJUKGNhc3RTdWNjZWVkZWQpOycpCisgICAg
ICAgIGxpbmVzLmFwcGVuZCgnICAgIGF1dG8gcmVzdWx0ID0gdmFsdWUtPmFzU3RyaW5nKCk7JykK
KyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgQVNTRVJUKHJlc3VsdCk7JykKIAogICAgICAgICBh
c3NlcnRfY29uZGl0aW9uID0gJyB8fCAnLmpvaW4oWydyZXN1bHQgPT0gIiVzIicgJSBlbnVtX3Zh
bHVlIGZvciBlbnVtX3ZhbHVlIGluIGVudW1fbWVtYmVyLnR5cGUuZW51bV92YWx1ZXMoKV0pCiAg
ICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIEFTU0VSVCglcyk7JyAlIGFzc2VydF9jb25kaXRpb24p
Ci0gICAgICAgIGxpbmVzLmFwcGVuZCgnI2Vsc2UgLy8gQVNTRVJUX0VOQUJMRUQnKQotICAgICAg
ICBsaW5lcy5hcHBlbmQoJyAgICBVTlVTRURfUEFSQU0odmFsdWUpOycpCi0gICAgICAgIGxpbmVz
LmFwcGVuZCgnI2VuZGlmIC8vIEFTU0VSVF9FTkFCTEVEJykKKyAgICAgICAgbGluZXMuYXBwZW5k
KCcjZW5kaWYnKQogICAgICAgICBsaW5lcy5hcHBlbmQoJ30nKQogCiAgICAgICAgIHJldHVybiAn
XG4nLmpvaW4obGluZXMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFk
ZXIucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9n
ZW5lcmF0ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkKaW5kZXggM2UxMzk3NGFi
MzYyMTNkYTc4YjcyY2EyMzJlNzdlMWE5OTRjNTVmNy4uOTZiNmI2MTI2ZGM3ZWQ4MTMyYzNmMmUy
MzVkZTNmNzAxZGNmODkxMSAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19iYWNrZW5kX2Rpc3BhdGNoZXJfaGVh
ZGVyLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2Rl
Z2VuL2dlbmVyYXRlX29iamNfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weQpAQCAtMzMsMTMg
KzMzLDEzIEBAIGZyb20gc3RyaW5nIGltcG9ydCBUZW1wbGF0ZQogdHJ5OgogICAgIGZyb20gLmNw
cF9nZW5lcmF0b3IgaW1wb3J0IENwcEdlbmVyYXRvcgogICAgIGZyb20gLmdlbmVyYXRvciBpbXBv
cnQgR2VuZXJhdG9yCi0gICAgZnJvbSAubW9kZWxzIGltcG9ydCBGcmFtZXdvcmtzCisgICAgZnJv
bSAubW9kZWxzIGltcG9ydCBFbnVtVHlwZSwgQWxpYXNlZFR5cGUsIEZyYW1ld29ya3MKICAgICBm
cm9tIC5vYmpjX2dlbmVyYXRvciBpbXBvcnQgT2JqQ0dlbmVyYXRvcgogICAgIGZyb20gLm9iamNf
Z2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgT2JqQ0dlbmVyYXRvclRlbXBsYXRlcyBhcyBPYmpD
VGVtcGxhdGVzCiBleGNlcHQgVmFsdWVFcnJvcjoKICAgICBmcm9tIGNwcF9nZW5lcmF0b3IgaW1w
b3J0IENwcEdlbmVyYXRvcgogICAgIGZyb20gZ2VuZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IKLSAg
ICBmcm9tIG1vZGVscyBpbXBvcnQgRnJhbWV3b3JrcworICAgIGZyb20gbW9kZWxzIGltcG9ydCBF
bnVtVHlwZSwgQWxpYXNlZFR5cGUsIEZyYW1ld29ya3MKICAgICBmcm9tIG9iamNfZ2VuZXJhdG9y
IGltcG9ydCBPYmpDR2VuZXJhdG9yCiAgICAgZnJvbSBvYmpjX2dlbmVyYXRvcl90ZW1wbGF0ZXMg
aW1wb3J0IE9iakNHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgT2JqQ1RlbXBsYXRlcwogCkBAIC0xMDMs
OSArMTAzLDE5IEBAIGNsYXNzIE9iakNCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvcihP
YmpDR2VuZXJhdG9yKToKIAogICAgIGRlZiBfZ2VuZXJhdGVfb2JqY19oYW5kbGVyX2RlY2xhcmF0
aW9uX2Zvcl9jb21tYW5kKHNlbGYsIGNvbW1hbmQpOgogICAgICAgICBsaW5lcyA9IFtdCi0gICAg
ICAgIHBhcmFtZXRlcnMgPSBbJ2xvbmcgcmVxdWVzdElkJ10KLSAgICAgICAgZm9yIF9wYXJhbWV0
ZXIgaW4gY29tbWFuZC5jYWxsX3BhcmFtZXRlcnM6Ci0gICAgICAgICAgICBwYXJhbWV0ZXJzLmFw
cGVuZCgnJXMgaW5fJXMnICUgKENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3JfdW5jaGVja2VkX2Zv
cm1hbF9pbl9wYXJhbWV0ZXIoX3BhcmFtZXRlciksIF9wYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUp
KQorICAgICAgICBwYXJhbWV0ZXJzID0gWydsb25nIHByb3RvY29sX2NhbGxJZCddCisgICAgICAg
IGZvciBwYXJhbWV0ZXIgaW4gY29tbWFuZC5jYWxsX3BhcmFtZXRlcnM6CisgICAgICAgICAgICBw
YXJhbWV0ZXJfdHlwZSA9IHBhcmFtZXRlci50eXBlCisgICAgICAgICAgICBpZiBpc2luc3RhbmNl
KHBhcmFtZXRlcl90eXBlLCBBbGlhc2VkVHlwZSk6CisgICAgICAgICAgICAgICAgcGFyYW1ldGVy
X3R5cGUgPSBwYXJhbWV0ZXJfdHlwZS5hbGlhc2VkX3R5cGUKKyAgICAgICAgICAgIGlmIGlzaW5z
dGFuY2UocGFyYW1ldGVyX3R5cGUsIEVudW1UeXBlKToKKyAgICAgICAgICAgICAgICBwYXJhbWV0
ZXJfdHlwZSA9IHBhcmFtZXRlcl90eXBlLnByaW1pdGl2ZV90eXBlCisKKyAgICAgICAgICAgIHBh
cmFtZXRlcl9uYW1lID0gcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lCisgICAgICAgICAgICBpZiBw
YXJhbWV0ZXIuaXNfb3B0aW9uYWw6CisgICAgICAgICAgICAgICAgcGFyYW1ldGVyX25hbWUgPSAn
b3B0XycgKyBwYXJhbWV0ZXJfbmFtZQorCisgICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZCgn
JXMgJXMnICUgKENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3JfY29tbWFuZF9wYXJhbWV0ZXIocGFy
YW1ldGVyX3R5cGUsIHBhcmFtZXRlci5pc19vcHRpb25hbCksIHBhcmFtZXRlcl9uYW1lKSkKIAog
ICAgICAgICBjb21tYW5kX2FyZ3MgPSB7CiAgICAgICAgICAgICAnY29tbWFuZE5hbWUnOiBjb21t
YW5kLmNvbW1hbmRfbmFtZSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfYmFja2VuZF9kaXNwYXRjaGVyX2lt
cGxlbWVudGF0aW9uLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24u
cHkKaW5kZXggZjVlZThlNTgzOThkNjliYWU0YmViNGMxODY3MDYzY2NkNTIyMDllYy4uMWJkOTYz
NWJkMzI1MTk5MTUxY2ZkOTgwMTNhNTEyNzI4OTg4ZDFiOSAxMDA3NTUKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19iYWNr
ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19iYWNrZW5kX2Rpc3Bh
dGNoZXJfaW1wbGVtZW50YXRpb24ucHkKQEAgLTkwLDkgKzkwLDIwIEBAIGNsYXNzIE9iakNCYWNr
ZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKE9iakNHZW5lcmF0b3IpOgogCiAg
ICAgZGVmIF9nZW5lcmF0ZV9oYW5kbGVyX2ltcGxlbWVudGF0aW9uX2Zvcl9jb21tYW5kKHNlbGYs
IGRvbWFpbiwgY29tbWFuZCk6CiAgICAgICAgIGxpbmVzID0gW10KLSAgICAgICAgcGFyYW1ldGVy
cyA9IFsnbG9uZyByZXF1ZXN0SWQnXQorICAgICAgICBwYXJhbWV0ZXJzID0gWydsb25nIHByb3Rv
Y29sX2NhbGxJZCddCiAgICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gY29tbWFuZC5jYWxsX3BhcmFt
ZXRlcnM6Ci0gICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZCgnJXMgaW5fJXMnICUgKENwcEdl
bmVyYXRvci5jcHBfdHlwZV9mb3JfdW5jaGVja2VkX2Zvcm1hbF9pbl9wYXJhbWV0ZXIocGFyYW1l
dGVyKSwgcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKSkKKyAgICAgICAgICAgIHBhcmFtZXRlcl90
eXBlID0gcGFyYW1ldGVyLnR5cGUKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UocGFyYW1ldGVy
X3R5cGUsIEFsaWFzZWRUeXBlKToKKyAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfdHlwZSA9IHBh
cmFtZXRlcl90eXBlLmFsaWFzZWRfdHlwZQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShwYXJh
bWV0ZXJfdHlwZSwgRW51bVR5cGUpOgorICAgICAgICAgICAgICAgIHBhcmFtZXRlcl90eXBlID0g
cGFyYW1ldGVyX3R5cGUucHJpbWl0aXZlX3R5cGUKKworICAgICAgICAgICAgcGFyYW1ldGVyX25h
bWUgPSBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUKKyAgICAgICAgICAgIGlmIHBhcmFtZXRlci5p
c19vcHRpb25hbDoKKyAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfbmFtZSA9ICdvcHRfJyArIHBh
cmFtZXRlcl9uYW1lCisgICAgICAgICAgICBwYXJhbWV0ZXJfbmFtZSA9ICdpbl8nICsgcGFyYW1l
dGVyX25hbWUKKworICAgICAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoJyVzICVzJyAlIChDcHBH
ZW5lcmF0b3IuY3BwX3R5cGVfZm9yX2NvbW1hbmRfcGFyYW1ldGVyKHBhcmFtZXRlcl90eXBlLCBw
YXJhbWV0ZXIuaXNfb3B0aW9uYWwpLCBwYXJhbWV0ZXJfbmFtZSkpCiAKICAgICAgICAgY29tbWFu
ZF9hcmdzID0gewogICAgICAgICAgICAgJ2RvbWFpbk5hbWUnOiBkb21haW4uZG9tYWluX25hbWUs
CkBAIC0xMTUsNDUgKzEyNiw1NCBAQCBjbGFzcyBPYmpDQmFja2VuZERpc3BhdGNoZXJJbXBsZW1l
bnRhdGlvbkdlbmVyYXRvcihPYmpDR2VuZXJhdG9yKToKICAgICAgICAgaWYgY29tbWFuZC5yZXR1
cm5fcGFyYW1ldGVyczoKICAgICAgICAgICAgIHN1Y2Nlc3NfYmxvY2tfcGFyYW1ldGVycyA9IFtd
CiAgICAgICAgICAgICBmb3IgcGFyYW1ldGVyIGluIGNvbW1hbmQucmV0dXJuX3BhcmFtZXRlcnM6
CisgICAgICAgICAgICAgICAgb3V0X3BhcmFtX25hbWUgPSBwYXJhbWV0ZXIucGFyYW1ldGVyX25h
bWUKKyAgICAgICAgICAgICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6CisgICAgICAgICAg
ICAgICAgICAgIG91dF9wYXJhbV9uYW1lID0gJ29wdF8nICsgb3V0X3BhcmFtX25hbWUKKyAgICAg
ICAgICAgICAgICBvdXRfcGFyYW1fbmFtZSA9ICdvdXRfJyArIG91dF9wYXJhbV9uYW1lCiAgICAg
ICAgICAgICAgICAgb2JqY190eXBlID0gc2VsZi5vYmpjX3R5cGVfZm9yX3BhcmFtKGRvbWFpbiwg
Y29tbWFuZC5jb21tYW5kX25hbWUsIHBhcmFtZXRlcikKLSAgICAgICAgICAgICAgICB2YXJfbmFt
ZSA9IE9iakNHZW5lcmF0b3IuaWRlbnRpZmllcl90b19vYmpjX2lkZW50aWZpZXIocGFyYW1ldGVy
LnBhcmFtZXRlcl9uYW1lKQotICAgICAgICAgICAgICAgIHN1Y2Nlc3NfYmxvY2tfcGFyYW1ldGVy
cy5hcHBlbmQoam9pbl90eXBlX2FuZF9uYW1lKG9iamNfdHlwZSwgdmFyX25hbWUpKQorICAgICAg
ICAgICAgICAgIHN1Y2Nlc3NfYmxvY2tfcGFyYW1ldGVycy5hcHBlbmQoam9pbl90eXBlX2FuZF9u
YW1lKG9iamNfdHlwZSwgb3V0X3BhcmFtX25hbWUpKQogICAgICAgICAgICAgbGluZXMuYXBwZW5k
KCcgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXiglcykgeycgJSAnLCAnLmpvaW4oc3VjY2Vzc19i
bG9ja19wYXJhbWV0ZXJzKSkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGxpbmVzLmFwcGVu
ZCgnICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF57JykKIAorICAgICAgICBsaW5lcy5hcHBlbmQo
JyAgICAgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRl
KCk7JykKICAgICAgICAgaWYgY29tbWFuZC5yZXR1cm5fcGFyYW1ldGVyczoKLSAgICAgICAgICAg
IGxpbmVzLmFwcGVuZCgnICAgICAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHRPYmplY3QgPSBK
U09OOjpPYmplY3Q6OmNyZWF0ZSgpOycpCi0KICAgICAgICAgICAgIHJlcXVpcmVkX3BvaW50ZXJf
cGFyYW1ldGVycyA9IFtwYXJhbWV0ZXIgZm9yIHBhcmFtZXRlciBpbiBjb21tYW5kLnJldHVybl9w
YXJhbWV0ZXJzIGlmIG5vdCBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwgYW5kIE9iakNHZW5lcmF0b3Iu
aXNfdHlwZV9vYmpjX3BvaW50ZXJfdHlwZShwYXJhbWV0ZXIudHlwZSldCiAgICAgICAgICAgICBm
b3IgcGFyYW1ldGVyIGluIHJlcXVpcmVkX3BvaW50ZXJfcGFyYW1ldGVyczoKLSAgICAgICAgICAg
ICAgICB2YXJfbmFtZSA9IE9iakNHZW5lcmF0b3IuaWRlbnRpZmllcl90b19vYmpjX2lkZW50aWZp
ZXIocGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKQotICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVu
ZCgnICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUiglcywgQCIl
cyIpOycgJSAodmFyX25hbWUsIHZhcl9uYW1lKSkKKyAgICAgICAgICAgICAgICBvdXRfcGFyYW1f
bmFtZSA9IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZQorICAgICAgICAgICAgICAgIGlmIHBhcmFt
ZXRlci5pc19vcHRpb25hbDoKKyAgICAgICAgICAgICAgICAgICAgb3V0X3BhcmFtX25hbWUgPSAn
b3B0XycgKyBvdXRfcGFyYW1fbmFtZQorICAgICAgICAgICAgICAgIG91dF9wYXJhbV9uYW1lID0g
J291dF8nICsgb3V0X3BhcmFtX25hbWUKKyAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAg
ICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoJXMsIEAiJXMiKTsn
ICUgKG91dF9wYXJhbV9uYW1lLCBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpKQogICAgICAgICAg
ICAgICAgIG9iamNfYXJyYXlfY2xhc3MgPSBzZWxmLm9iamNfY2xhc3NfZm9yX2FycmF5X3R5cGUo
cGFyYW1ldGVyLnR5cGUpCiAgICAgICAgICAgICAgICAgaWYgb2JqY19hcnJheV9jbGFzcyBhbmQg
b2JqY19hcnJheV9jbGFzcy5zdGFydHN3aXRoKHNlbGYub2JqY19wcmVmaXgoKSk6Ci0gICAgICAg
ICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JB
RF9UWVBFX0lOX0FSUkFZKCVzLCBbJXMgY2xhc3NdKTsnICUgKHZhcl9uYW1lLCBvYmpjX2FycmF5
X2NsYXNzKSkKKyAgICAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIFRIUk9X
X0VYQ0VQVElPTl9GT1JfQkFEX1RZUEVfSU5fQVJSQVkoJXMsIFslcyBjbGFzc10pOycgJSAob3V0
X3BhcmFtX25hbWUsIG9iamNfYXJyYXlfY2xhc3MpKQogCiAgICAgICAgICAgICBvcHRpb25hbF9w
b2ludGVyX3BhcmFtZXRlcnMgPSBbcGFyYW1ldGVyIGZvciBwYXJhbWV0ZXIgaW4gY29tbWFuZC5y
ZXR1cm5fcGFyYW1ldGVycyBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwgYW5kIE9iakNHZW5lcmF0
b3IuaXNfdHlwZV9vYmpjX3BvaW50ZXJfdHlwZShwYXJhbWV0ZXIudHlwZSldCiAgICAgICAgICAg
ICBmb3IgcGFyYW1ldGVyIGluIG9wdGlvbmFsX3BvaW50ZXJfcGFyYW1ldGVyczoKLSAgICAgICAg
ICAgICAgICB2YXJfbmFtZSA9IE9iakNHZW5lcmF0b3IuaWRlbnRpZmllcl90b19vYmpjX2lkZW50
aWZpZXIocGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKQotICAgICAgICAgICAgICAgIGxpbmVzLmFw
cGVuZCgnICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIo
JXMsIEAiJXMiKTsnICUgKHZhcl9uYW1lLCB2YXJfbmFtZSkpCisgICAgICAgICAgICAgICAgb3V0
X3BhcmFtX25hbWUgPSBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUKKyAgICAgICAgICAgICAgICBp
ZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6CisgICAgICAgICAgICAgICAgICAgIG91dF9wYXJhbV9u
YW1lID0gJ29wdF8nICsgb3V0X3BhcmFtX25hbWUKKyAgICAgICAgICAgICAgICBvdXRfcGFyYW1f
bmFtZSA9ICdvdXRfJyArIG91dF9wYXJhbV9uYW1lCisgICAgICAgICAgICAgICAgbGluZXMuYXBw
ZW5kKCcgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUigl
cywgQCIlcyIpOycgJSAob3V0X3BhcmFtX25hbWUsIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkp
CiAgICAgICAgICAgICAgICAgb2JqY19hcnJheV9jbGFzcyA9IHNlbGYub2JqY19jbGFzc19mb3Jf
YXJyYXlfdHlwZShwYXJhbWV0ZXIudHlwZSkKICAgICAgICAgICAgICAgICBpZiBvYmpjX2FycmF5
X2NsYXNzIGFuZCBvYmpjX2FycmF5X2NsYXNzLnN0YXJ0c3dpdGgoc2VsZi5vYmpjX3ByZWZpeCgp
KToKLSAgICAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIFRIUk9XX0VYQ0VQ
VElPTl9GT1JfQkFEX1RZUEVfSU5fT1BUSU9OQUxfQVJSQVkoJXMsIFslcyBjbGFzc10pOycgJSAo
dmFyX25hbWUsIG9iamNfYXJyYXlfY2xhc3MpKQorICAgICAgICAgICAgICAgICAgICBsaW5lcy5h
cHBlbmQoJyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRV9JTl9PUFRJT05BTF9B
UlJBWSglcywgWyVzIGNsYXNzXSk7JyAlIChvdXRfcGFyYW1fbmFtZSwgb2JqY19hcnJheV9jbGFz
cykpCiAKICAgICAgICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gY29tbWFuZC5yZXR1cm5fcGFyYW1l
dGVyczoKKyAgICAgICAgICAgICAgICBvdXRfcGFyYW1fbmFtZSA9IHBhcmFtZXRlci5wYXJhbWV0
ZXJfbmFtZQorICAgICAgICAgICAgICAgIGlmIHBhcmFtZXRlci5pc19vcHRpb25hbDoKKyAgICAg
ICAgICAgICAgICAgICAgb3V0X3BhcmFtX25hbWUgPSAnb3B0XycgKyBvdXRfcGFyYW1fbmFtZQor
ICAgICAgICAgICAgICAgIG91dF9wYXJhbV9uYW1lID0gJ291dF8nICsgb3V0X3BhcmFtX25hbWUK
ICAgICAgICAgICAgICAgICBrZXllZF9zZXRfbWV0aG9kID0gQ3BwR2VuZXJhdG9yLmNwcF9zZXR0
ZXJfbWV0aG9kX2Zvcl90eXBlKHBhcmFtZXRlci50eXBlKQotICAgICAgICAgICAgICAgIHZhcl9u
YW1lID0gT2JqQ0dlbmVyYXRvci5pZGVudGlmaWVyX3RvX29iamNfaWRlbnRpZmllcihwYXJhbWV0
ZXIucGFyYW1ldGVyX25hbWUpCi0gICAgICAgICAgICAgICAgdmFyX2V4cHJlc3Npb24gPSAnKiVz
JyAlIHZhcl9uYW1lIGlmIHBhcmFtZXRlci5pc19vcHRpb25hbCBlbHNlIHZhcl9uYW1lCisgICAg
ICAgICAgICAgICAgdmFyX2V4cHJlc3Npb24gPSAnKiVzJyAlIG91dF9wYXJhbV9uYW1lIGlmIHBh
cmFtZXRlci5pc19vcHRpb25hbCBlbHNlIG91dF9wYXJhbV9uYW1lCiAgICAgICAgICAgICAgICAg
ZXhwb3J0X2V4cHJlc3Npb24gPSBzZWxmLm9iamNfcHJvdG9jb2xfZXhwb3J0X2V4cHJlc3Npb25f
Zm9yX3ZhcmlhYmxlKHBhcmFtZXRlci50eXBlLCB2YXJfZXhwcmVzc2lvbikKICAgICAgICAgICAg
ICAgICBpZiBub3QgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgotICAgICAgICAgICAgICAgICAgICBs
aW5lcy5hcHBlbmQoJyAgICAgICAgcmVzdWx0T2JqZWN0LT4lcygiJXMiX3MsICVzKTsnICUgKGtl
eWVkX3NldF9tZXRob2QsIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwgZXhwb3J0X2V4cHJlc3Np
b24pKQorICAgICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgcHJvdG9jb2xf
anNvbk1lc3NhZ2UtPiVzKCIlcyJfcywgJXMpOycgJSAoa2V5ZWRfc2V0X21ldGhvZCwgcGFyYW1l
dGVyLnBhcmFtZXRlcl9uYW1lLCBleHBvcnRfZXhwcmVzc2lvbikpCiAgICAgICAgICAgICAgICAg
ZWxzZToKLSAgICAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIGlmICglcykn
ICUgdmFyX25hbWUpCi0gICAgICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICAg
ICAgcmVzdWx0T2JqZWN0LT4lcygiJXMiX3MsICVzKTsnICUgKGtleWVkX3NldF9tZXRob2QsIHBh
cmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwgZXhwb3J0X2V4cHJlc3Npb24pKQotICAgICAgICAgICAg
bGluZXMuYXBwZW5kKCcgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShy
ZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0T2JqZWN0KSwgZmFsc2UpOycpCi0gICAgICAgIGVsc2U6
Ci0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+
c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSwgZmFsc2UpOycp
CisgICAgICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBpZiAoISElcyknICUg
b3V0X3BhcmFtX25hbWUpCisgICAgICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAg
ICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPiVzKCIlcyJfcywgJXMpOycgJSAoa2V5ZWRfc2V0
X21ldGhvZCwgcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lLCBleHBvcnRfZXhwcmVzc2lvbikpCisg
ICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVz
cG9uc2UocHJvdG9jb2xfY2FsbElkLCBXVEZNb3ZlKHByb3RvY29sX2pzb25NZXNzYWdlKSwgZmFs
c2UpOycpCiAKICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgfTsnKQogICAgICAgICByZXR1cm4g
J1xuJy5qb2luKGxpbmVzKQpAQCAtMTY2LDE3ICsxODYsMjcgQEAgY2xhc3MgT2JqQ0JhY2tlbmRE
aXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6CiAgICAgICAg
IGRlZiBpbl9wYXJhbV9leHByZXNzaW9uKHBhcmFtX25hbWUsIHBhcmFtZXRlcik6CiAgICAgICAg
ICAgICBfdHlwZSA9IHBhcmFtZXRlci50eXBlCiAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKF90
eXBlLCBBbGlhc2VkVHlwZSk6Ci0gICAgICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5hbGlhc2Vk
X3R5cGUgICMgRmFsbCB0aHJvdWdoIHRvIGVudW0gb3IgcHJpbWl0aXZlLgorICAgICAgICAgICAg
ICAgIF90eXBlID0gX3R5cGUuYWxpYXNlZF90eXBlCiAgICAgICAgICAgICBpZiBpc2luc3RhbmNl
KF90eXBlLCBFbnVtVHlwZSk6Ci0gICAgICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5wcmltaXRp
dmVfdHlwZSAgIyBGYWxsIHRocm91Z2ggdG8gcHJpbWl0aXZlLgotICAgICAgICAgICAgaWYgaXNp
bnN0YW5jZShfdHlwZSwgUHJpbWl0aXZlVHlwZSk6Ci0gICAgICAgICAgICAgICAgaWYgX3R5cGUu
cmF3X25hbWUoKSBpbiBbJ2FycmF5JywgJ2FueScsICdvYmplY3QnXToKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuICcmJXMnICUgcGFyYW1fbmFtZSBpZiBub3QgcGFyYW1ldGVyLmlzX29wdGlv
bmFsIGVsc2UgcGFyYW1fbmFtZQotICAgICAgICAgICAgICAgIHJldHVybiAnKiVzJyAlIHBhcmFt
X25hbWUgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsIGVsc2UgcGFyYW1fbmFtZQotICAgICAgICAg
ICAgcmV0dXJuICcmJXMnICUgcGFyYW1fbmFtZSBpZiBub3QgcGFyYW1ldGVyLmlzX29wdGlvbmFs
IGVsc2UgcGFyYW1fbmFtZQorICAgICAgICAgICAgICAgIF90eXBlID0gX3R5cGUucHJpbWl0aXZl
X3R5cGUKKworICAgICAgICAgICAgaWYgX3R5cGUuaXNfZW51bSgpOgorICAgICAgICAgICAgICAg
IGlmIHBhcmFtZXRlci5pc19vcHRpb25hbDoKKyAgICAgICAgICAgICAgICAgICAgcGFyYW1fbmFt
ZSA9ICcqJyArIHBhcmFtX25hbWUKKyAgICAgICAgICAgICAgICByZXR1cm4gJ1Byb3RvY29sOjpI
ZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZSglcyknICUgcGFyYW1fbmFtZQorICAgICAgICAg
ICAgaWYgQ3BwR2VuZXJhdG9yLnNob3VsZF9yZWxlYXNlX2FyZ3VtZW50KF90eXBlLCBwYXJhbWV0
ZXIuaXNfb3B0aW9uYWwpOgorICAgICAgICAgICAgICAgIHJldHVybiBwYXJhbV9uYW1lICsgJy5y
ZWxlYXNlTm9uTnVsbCgpJworICAgICAgICAgICAgaWYgQ3BwR2VuZXJhdG9yLnNob3VsZF9kZXJl
ZmVyZW5jZV9hcmd1bWVudChfdHlwZSwgcGFyYW1ldGVyLmlzX29wdGlvbmFsKToKKyAgICAgICAg
ICAgICAgICByZXR1cm4gJyonICsgcGFyYW1fbmFtZQorICAgICAgICAgICAgaWYgQ3BwR2VuZXJh
dG9yLnNob3VsZF9tb3ZlX2FyZ3VtZW50KF90eXBlLCBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwpOgor
ICAgICAgICAgICAgICAgIHJldHVybiAnV1RGTW92ZSglcyknICUgcGFyYW1fbmFtZQorICAgICAg
ICAgICAgcmV0dXJuIHBhcmFtX25hbWUKIAogICAgICAgICBmb3IgcGFyYW1ldGVyIGluIGNvbW1h
bmQuY2FsbF9wYXJhbWV0ZXJzOgotICAgICAgICAgICAgaW5fcGFyYW1fbmFtZSA9ICdpbl8lcycg
JSBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUKKyAgICAgICAgICAgIGluX3BhcmFtX25hbWUgPSBw
YXJhbWV0ZXIucGFyYW1ldGVyX25hbWUKKyAgICAgICAgICAgIGlmIHBhcmFtZXRlci5pc19vcHRp
b25hbDoKKyAgICAgICAgICAgICAgICBpbl9wYXJhbV9uYW1lID0gJ29wdF8nICsgaW5fcGFyYW1f
bmFtZQorICAgICAgICAgICAgaW5fcGFyYW1fbmFtZSA9ICdpbl8nICsgaW5fcGFyYW1fbmFtZQog
ICAgICAgICAgICAgb2JqY19pbl9wYXJhbV9uYW1lID0gJ29fJXMnICUgaW5fcGFyYW1fbmFtZQog
ICAgICAgICAgICAgb2JqY190eXBlID0gc2VsZi5vYmpjX3R5cGVfZm9yX3BhcmFtKGRvbWFpbiwg
Y29tbWFuZC5jb21tYW5kX25hbWUsIHBhcmFtZXRlciwgRmFsc2UpCiAgICAgICAgICAgICBpZiBp
c2luc3RhbmNlKHBhcmFtZXRlci50eXBlLCBFbnVtVHlwZSk6CkBAIC0xOTQsMTEgKzIyNCw4IEBA
IGNsYXNzIE9iakNCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKE9iakNH
ZW5lcmF0b3IpOgogCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIGxpbmVzLmFw
cGVuZCgnICAgICVzOycgJSBqb2luX3R5cGVfYW5kX25hbWUob2JqY190eXBlLCBvYmpjX2luX3Bh
cmFtX25hbWUpKQotICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGlmICglcyknICUg
aW5fcGFyYW1fbmFtZSkKKyAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBpZiAoISEl
cyknICUgaW5fcGFyYW1fbmFtZSkKICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAg
ICAgJXMgPSAlczsnICUgKG9iamNfaW5fcGFyYW1fbmFtZSwgaW1wb3J0X2V4cHJlc3Npb24pKQot
Ci0gICAgICAgIGlmIGxpbmVzOgotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcnKQogICAgICAg
ICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQogCiAgICAgZGVmIF9nZW5lcmF0ZV9pbnZvY2F0aW9u
X2Zvcl9jb21tYW5kKHNlbGYsIGRvbWFpbiwgY29tbWFuZCk6CkBAIC0yMDYsNyArMjMzLDEwIEBA
IGNsYXNzIE9iakNCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKE9iakNH
ZW5lcmF0b3IpOgogICAgICAgICBwYWlycy5hcHBlbmQoJ1dpdGhFcnJvckNhbGxiYWNrOmVycm9y
Q2FsbGJhY2snKQogICAgICAgICBwYWlycy5hcHBlbmQoJ3N1Y2Nlc3NDYWxsYmFjazpzdWNjZXNz
Q2FsbGJhY2snKQogICAgICAgICBmb3IgcGFyYW1ldGVyIGluIGNvbW1hbmQuY2FsbF9wYXJhbWV0
ZXJzOgotICAgICAgICAgICAgaW5fcGFyYW1fbmFtZSA9ICdpbl8lcycgJSBwYXJhbWV0ZXIucGFy
YW1ldGVyX25hbWUKKyAgICAgICAgICAgIGluX3BhcmFtX25hbWUgPSBwYXJhbWV0ZXIucGFyYW1l
dGVyX25hbWUKKyAgICAgICAgICAgIGlmIHBhcmFtZXRlci5pc19vcHRpb25hbDoKKyAgICAgICAg
ICAgICAgICBpbl9wYXJhbV9uYW1lID0gJ29wdF8nICsgaW5fcGFyYW1fbmFtZQorICAgICAgICAg
ICAgaW5fcGFyYW1fbmFtZSA9ICdpbl8nICsgaW5fcGFyYW1fbmFtZQogICAgICAgICAgICAgb2Jq
Y19pbl9wYXJhbV9leHByZXNzaW9uID0gJ29fJXMnICUgaW5fcGFyYW1fbmFtZQogICAgICAgICAg
ICAgaWYgbm90IHBhcmFtZXRlci5pc19vcHRpb25hbDoKICAgICAgICAgICAgICAgICBpZiBpc2lu
c3RhbmNlKHBhcmFtZXRlci50eXBlLCBFbnVtVHlwZSk6CkBAIC0yMTcsNiArMjQ3LDYgQEAgY2xh
c3MgT2JqQ0JhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IoT2JqQ0dlbmVy
YXRvcik6CiAgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShwYXJhbWV0ZXIudHlwZSwgRW51
bVR5cGUpOgogICAgICAgICAgICAgICAgICAgICBvYmpjX2luX3BhcmFtX2V4cHJlc3Npb24gPSAn
JXMudmFsdWUoKScgJSBvYmpjX2luX3BhcmFtX2V4cHJlc3Npb24KIAotICAgICAgICAgICAgICAg
IG9wdGlvbmFsX2V4cHJlc3Npb24gPSAnKCVzID8gJiVzIDogbmlsKScgJSAoaW5fcGFyYW1fbmFt
ZSwgb2JqY19pbl9wYXJhbV9leHByZXNzaW9uKQorICAgICAgICAgICAgICAgIG9wdGlvbmFsX2V4
cHJlc3Npb24gPSAnKCEhJXMgPyAmJXMgOiBuaWwpJyAlIChpbl9wYXJhbV9uYW1lLCBvYmpjX2lu
X3BhcmFtX2V4cHJlc3Npb24pCiAgICAgICAgICAgICAgICAgcGFpcnMuYXBwZW5kKCclczolcycg
JSAocGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lLCBvcHRpb25hbF9leHByZXNzaW9uKSkKICAgICAg
ICAgcmV0dXJuICcgICAgW21fZGVsZWdhdGUgJXMlc107JyAlIChjb21tYW5kLmNvbW1hbmRfbmFt
ZSwgJyAnLmpvaW4ocGFpcnMpKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19mcm9udGVuZF9kaXNwYXRjaGVy
X2ltcGxlbWVudGF0aW9uLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0
aW9uLnB5CmluZGV4IGRkZGIyN2E4OGMyYmFmZjVmYzZmMjdiYzQzYTAxZTMxZWE5Y2Q0OWQuLjhk
NDE5MzgxMjNmOTA2ZmJmMDkxZTJhYjdiMzZhNjA3MzNkYjM5NTIgMTAwNzU1Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNf
ZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2Zyb250ZW5k
X2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkKQEAgLTEyNSwxMSArMTI1LDExIEBAIGNsYXNz
IE9iakNGcm9udGVuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihPYmpDR2VuZXJh
dG9yKToKICAgICAgICAgaWYgcmVxdWlyZWRfcG9pbnRlcl9wYXJhbWV0ZXJzIG9yIG9wdGlvbmFs
X3BvaW50ZXJfcGFyYW1ldGVyczoKICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnJykKIAotICAg
ICAgICBsaW5lcy5hcHBlbmQoJyAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpT
T046Ok9iamVjdDo6Y3JlYXRlKCk7JykKLSAgICAgICAgbGluZXMuYXBwZW5kKCcgICAganNvbk1l
c3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiJXMuJXMiX3MpOycgJSAoZG9tYWluLmRvbWFp
bl9uYW1lLCBldmVudC5ldmVudF9uYW1lKSkKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgYXV0
byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7JykKKyAgICAg
ICAgbGluZXMuYXBwZW5kKCcgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0
aG9kIl9zLCAiJXMuJXMiX3MpOycgJSAoZG9tYWluLmRvbWFpbl9uYW1lLCBldmVudC5ldmVudF9u
YW1lKSkKICAgICAgICAgaWYgZXZlbnQuZXZlbnRfcGFyYW1ldGVyczoKICAgICAgICAgICAgIGxp
bmVzLmV4dGVuZChzZWxmLl9nZW5lcmF0ZV9ldmVudF9vdXRfcGFyYW1ldGVycyhkb21haW4sIGV2
ZW50KSkKLSAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgcm91dGVyLnNlbmRFdmVudChqc29uTWVz
c2FnZS0+dG9KU09OU3RyaW5nKCkpOycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIHJvdXRl
ci5zZW5kRXZlbnQocHJvdG9jb2xfanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsnKQogICAg
ICAgICBsaW5lcy5hcHBlbmQoJ30nKQogICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3Vh
cmRfZm9yX2NvbmRpdGlvbihldmVudC5jb25kaXRpb24sICdcbicuam9pbihsaW5lcykpCiAKQEAg
LTE0NSwxNiArMTQ1LDE2IEBAIGNsYXNzIE9iakNGcm9udGVuZERpc3BhdGNoZXJJbXBsZW1lbnRh
dGlvbkdlbmVyYXRvcihPYmpDR2VuZXJhdG9yKToKIAogICAgIGRlZiBfZ2VuZXJhdGVfZXZlbnRf
b3V0X3BhcmFtZXRlcnMoc2VsZiwgZG9tYWluLCBldmVudCk6CiAgICAgICAgIGxpbmVzID0gW10K
LSAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgUmVmPEpTT046Ok9iamVjdD4gcGFyYW1zT2JqZWN0
ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsnKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBh
dXRvIHByb3RvY29sX3BhcmFtc09iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7JykKICAg
ICAgICAgZm9yIHBhcmFtZXRlciBpbiBldmVudC5ldmVudF9wYXJhbWV0ZXJzOgogICAgICAgICAg
ICAga2V5ZWRfc2V0X21ldGhvZCA9IENwcEdlbmVyYXRvci5jcHBfc2V0dGVyX21ldGhvZF9mb3Jf
dHlwZShwYXJhbWV0ZXIudHlwZSkKICAgICAgICAgICAgIHZhcl9uYW1lID0gcGFyYW1ldGVyLnBh
cmFtZXRlcl9uYW1lCiAgICAgICAgICAgICBzYWZlX3Zhcl9uYW1lID0gJygqJXMpJyAlIHZhcl9u
YW1lIGlmIHBhcmFtZXRlci5pc19vcHRpb25hbCBlbHNlIHZhcl9uYW1lCiAgICAgICAgICAgICBl
eHBvcnRfZXhwcmVzc2lvbiA9IHNlbGYub2JqY19wcm90b2NvbF9leHBvcnRfZXhwcmVzc2lvbl9m
b3JfdmFyaWFibGUocGFyYW1ldGVyLnR5cGUsIHNhZmVfdmFyX25hbWUpCiAgICAgICAgICAgICBp
ZiBub3QgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgotICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVu
ZCgnICAgIHBhcmFtc09iamVjdC0+JXMoIiVzIl9zLCAlcyk7JyAlIChrZXllZF9zZXRfbWV0aG9k
LCBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUsIGV4cG9ydF9leHByZXNzaW9uKSkKKyAgICAgICAg
ICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBwcm90b2NvbF9wYXJhbXNPYmplY3QtPiVzKCIlcyJf
cywgJXMpOycgJSAoa2V5ZWRfc2V0X21ldGhvZCwgcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lLCBl
eHBvcnRfZXhwcmVzc2lvbikpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIGxp
bmVzLmFwcGVuZCgnICAgIGlmICglcyknICUgKHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkpCi0g
ICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIHBhcmFtc09iamVjdC0+JXMoIiVz
Il9zLCAlcyk7JyAlIChrZXllZF9zZXRfbWV0aG9kLCBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUs
IGV4cG9ydF9leHByZXNzaW9uKSkKLSAgICAgICAgbGluZXMuYXBwZW5kKCcgICAganNvbk1lc3Nh
Z2UtPnNldE9iamVjdCgicGFyYW1zIl9zLCBXVEZNb3ZlKHBhcmFtc09iamVjdCkpOycpCisgICAg
ICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIHByb3RvY29sX3BhcmFtc09iamVjdC0+
JXMoIiVzIl9zLCAlcyk7JyAlIChrZXllZF9zZXRfbWV0aG9kLCBwYXJhbWV0ZXIucGFyYW1ldGVy
X25hbWUsIGV4cG9ydF9leHByZXNzaW9uKSkKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgcHJv
dG9jb2xfanNvbk1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIl9zLCBXVEZNb3ZlKHByb3RvY29s
X3BhcmFtc09iamVjdCkpOycpCiAgICAgICAgIHJldHVybiBsaW5lcwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdG9yLnB5
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJh
dG9yLnB5CmluZGV4IDk0ZDE4ZDlkNjYxOTRkMTU4NWMwZTEwYzA0OTRiYjRiMWExM2I5NTUuLjI5
YTJkZWE3MjRmMGJiZWNmZWJhNmRiOTIwNjA4MTcwMWU1MTBjNTEgMTAwNzU1Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRvci5weQor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5l
cmF0b3IucHkKQEAgLTczLDkgKzczLDYgQEAgX1RZUEVTX05FRURJTkdfUlVOVElNRV9DQVNUUyA9
IHNldChbCiAgICAgIlJ1bnRpbWUuQ29sbGVjdGlvbkVudHJ5IiwKICAgICAiRGVidWdnZXIuRnVu
Y3Rpb25EZXRhaWxzIiwKICAgICAiRGVidWdnZXIuQ2FsbEZyYW1lIiwKLSAgICAiQ2FudmFzLlRy
YWNlTG9nIiwKLSAgICAiQ2FudmFzLlJlc291cmNlSW5mbyIsCi0gICAgIkNhbnZhcy5SZXNvdXJj
ZVN0YXRlIiwKICAgICAjIFRoaXMgc2hvdWxkIGJlIGEgdGVtcG9yYXJ5IGhhY2suIFRpbWVsaW5l
RXZlbnQgc2hvdWxkIGJlIGNyZWF0ZWQgdmlhIGdlbmVyYXRlZCBDKysgQVBJLgogICAgICJUaW1l
bGluZS5UaW1lbGluZUV2ZW50IiwKICAgICAjIEZvciB0ZXN0aW5nIHB1cnBvc2VzIG9ubHkuCkBA
IC04NSwxMCArODIsMTkgQEAgX1RZUEVTX05FRURJTkdfUlVOVElNRV9DQVNUUyA9IHNldChbCiAj
IEZJWE1FOiBUaGlzIHNob3VsZCBiZSBjb252ZXJ0ZWQgaW50byBhIHByb3BlcnR5IGluIEpTT04u
CiBfVFlQRVNfV0lUSF9PUEVOX0ZJRUxEUyA9IHsKICAgICAiVGltZWxpbmUuVGltZWxpbmVFdmVu
dCI6IFtdLAotICAgICMgSW5zcGVjdG9yU3R5bGVTaGVldCBub3Qgb25seSBjcmVhdGVzIHRoaXMg
cHJvcGVydHkgYnV0IHdhbnRzIHRvIHJlYWQgaXQgYW5kIG1vZGlmeSBpdC4KLSAgICAiQ1NTLkNT
U1Byb3BlcnR5IjogW10sCi0gICAgIyBJbnNwZWN0b3JOZXR3b3JrQWdlbnQgbmVlZHMgdG8gdXBk
YXRlIG1pbWUtdHlwZS4KLSAgICAiTmV0d29yay5SZXNwb25zZSI6IFsibWltZVR5cGUiXSwKKyAg
ICAiQ1NTLkNTU1Byb3BlcnR5IjogWyJwcmlvcml0eSIsICJwYXJzZWRPayIsICJzdGF0dXMiXSwK
KyAgICAiRE9NLkhpZ2hsaWdodENvbmZpZyI6IFtdLAorICAgICJET00uUkdCQUNvbG9yIjogW10s
CisgICAgIkRPTVN0b3JhZ2UuU3RvcmFnZUlkIjogW10sCisgICAgIkRlYnVnZ2VyLkJyZWFrcG9p
bnRBY3Rpb24iOiBbXSwKKyAgICAiRGVidWdnZXIuQnJlYWtwb2ludE9wdGlvbnMiOiBbXSwKKyAg
ICAiRGVidWdnZXIuTG9jYXRpb24iOiBbXSwKKyAgICAiSW5kZXhlZERCLktleSI6IFtdLAorICAg
ICJJbmRleGVkREIuS2V5UmFuZ2UiOiBbXSwKKyAgICAiTmV0d29yay5SZXNwb25zZSI6IFsic3Rh
dHVzIiwgInN0YXR1c1RleHQiLCAibWltZVR5cGUiLCAic291cmNlIl0sCisgICAgIlBhZ2UuQ29v
a2llIjogW10sCisgICAgIlJ1bnRpbWUuQ2FsbEFyZ3VtZW50IjogWyJvYmplY3RJZCJdLAorICAg
ICJSdW50aW1lLlR5cGVMb2NhdGlvbiI6IFtdLAogICAgICMgRm9yIHRlc3RpbmcgcHVycG9zZXMg
b25seS4KICAgICAiVGVzdC5PcGVuUGFyYW1ldGVycyI6IFsiYWxwaGEiXSwKIH0KQEAgLTEzNCw3
ICsxNDAsNyBAQCBjbGFzcyBHZW5lcmF0b3I6CiAgICAgICAgICAgICBpZiBzZWxmLm1vZGVsKCku
ZnJhbWV3b3JrLm5hbWUgbm90IGluIGFsbG93ZWRfZnJhbWV3b3JrczoKICAgICAgICAgICAgICAg
ICBjb250aW51ZQogCi0gICAgICAgICAgICBpZiBmcmFtZXdvcmtfbmFtZSA9PSAiV1RGIjoKKyAg
ICAgICAgICAgIGlmIGZyYW1ld29ya19uYW1lID09ICJXVEYiIG9yIGZyYW1ld29ya19uYW1lID09
ICJzdGQiOgogICAgICAgICAgICAgICAgIGluY2x1ZGVzLmFkZCgiI2luY2x1ZGUgPCVzPiIgJSBo
ZWFkZXJfcGF0aCkKICAgICAgICAgICAgIGVsaWYgc2VsZi5tb2RlbCgpLmZyYW1ld29yay5uYW1l
ICE9IGZyYW1ld29ya19uYW1lOgogICAgICAgICAgICAgICAgIGluY2x1ZGVzLmFkZCgiI2luY2x1
ZGUgPCVzLyVzPiIgJSAoZnJhbWV3b3JrX25hbWUsIG9zLnBhdGguYmFzZW5hbWUoaGVhZGVyX3Bh
dGgpKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9jb2RlZ2VuL29iamNfZ2VuZXJhdG9yLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2NvZGVnZW4vb2JqY19nZW5lcmF0b3IucHkKaW5kZXggNzMxNTNiOTU0NjY3
MmI5OTA0ZTdmNWViOTE4ODY1ZmM4YTUxNjhiNi4uYTJkMzc2ZGYzYjk0M2RkYzkxNjc4YmJiYTVh
MmVkM2YwMmUzNzBjMCAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2NvZGVnZW4vb2JqY19nZW5lcmF0b3IucHkKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vb2JqY19nZW5lcmF0b3IucHkKQEAgLTI2
Myw3ICsyNjMsNyBAQCBjbGFzcyBPYmpDR2VuZXJhdG9yKEdlbmVyYXRvcik6CiAgICAgICAgIGlm
IChpc2luc3RhbmNlKF90eXBlLCBFbnVtVHlwZSkpOgogICAgICAgICAgICAgcmV0dXJuIE9iakNH
ZW5lcmF0b3IucHJvdG9jb2xfdHlwZV9mb3JfdHlwZShfdHlwZS5wcmltaXRpdmVfdHlwZSkKICAg
ICAgICAgaWYgKGlzaW5zdGFuY2UoX3R5cGUsIE9iamVjdFR5cGUpKToKLSAgICAgICAgICAgIHJl
dHVybiAnSW5zcGVjdG9yOjpQcm90b2NvbDo6JXM6OiVzJyAlIChfdHlwZS50eXBlX2RvbWFpbigp
LmRvbWFpbl9uYW1lLCBfdHlwZS5yYXdfbmFtZSgpKQorICAgICAgICAgICAgcmV0dXJuICdQcm90
b2NvbDo6JXM6OiVzJyAlIChfdHlwZS50eXBlX2RvbWFpbigpLmRvbWFpbl9uYW1lLCBfdHlwZS5y
YXdfbmFtZSgpKQogICAgICAgICBpZiAoaXNpbnN0YW5jZShfdHlwZSwgQXJyYXlUeXBlKSk6CiAg
ICAgICAgICAgICBzdWJfdHlwZSA9IE9iakNHZW5lcmF0b3IucHJvdG9jb2xfdHlwZV9mb3JfdHlw
ZShfdHlwZS5lbGVtZW50X3R5cGUpCiAgICAgICAgICAgICByZXR1cm4gJ0pTT046OkFycmF5T2Y8
JXM+JyAlIHN1Yl90eXBlCkBAIC0zNTMsOCArMzUzLDYgQEAgY2xhc3MgT2JqQ0dlbmVyYXRvcihH
ZW5lcmF0b3IpOgogICAgICAgICBpZiAoaXNpbnN0YW5jZShfdHlwZSwgUHJpbWl0aXZlVHlwZSkp
OgogICAgICAgICAgICAgcmV0dXJuIHNlbGYub2JqY190eXBlX2Zvcl9yYXdfbmFtZShfdHlwZS5y
YXdfbmFtZSgpKQogICAgICAgICBpZiAoaXNpbnN0YW5jZShfdHlwZSwgRW51bVR5cGUpKToKLSAg
ICAgICAgICAgIGlmIF90eXBlLmlzX2Fub255bW91czoKLSAgICAgICAgICAgICAgICByZXR1cm4g
c2VsZi5vYmpjX2VudW1fbmFtZV9mb3JfYW5vbnltb3VzX2VudW1fcGFyYW1ldGVyKGRvbWFpbiwg
ZXZlbnRfb3JfY29tbWFuZF9uYW1lLCBwYXJhbWV0ZXIpCiAgICAgICAgICAgICByZXR1cm4gc2Vs
Zi5vYmpjX2VudW1fbmFtZV9mb3Jfbm9uX2Fub255bW91c19lbnVtKF90eXBlKQogICAgICAgICBp
ZiAoaXNpbnN0YW5jZShfdHlwZSwgT2JqZWN0VHlwZSkpOgogICAgICAgICAgICAgcmV0dXJuIHNl
bGYub2JqY19uYW1lX2Zvcl90eXBlKF90eXBlKSArICcgKicKQEAgLTM5OCw4ICszOTYsNiBAQCBj
bGFzcyBPYmpDR2VuZXJhdG9yKEdlbmVyYXRvcik6CiAKICAgICBkZWYgb2JqY19wcm90b2NvbF9p
bXBvcnRfZXhwcmVzc2lvbl9mb3JfcGFyYW1ldGVyKHNlbGYsIG5hbWUsIGRvbWFpbiwgZXZlbnRf
b3JfY29tbWFuZF9uYW1lLCBwYXJhbWV0ZXIpOgogICAgICAgICBpZiBpc2luc3RhbmNlKHBhcmFt
ZXRlci50eXBlLCBFbnVtVHlwZSk6Ci0gICAgICAgICAgICBpZiBwYXJhbWV0ZXIudHlwZS5pc19h
bm9ueW1vdXM6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICdmcm9tUHJvdG9jb2xTdHJpbmc8JXM+
KCVzKScgJSAoc2VsZi5vYmpjX2VudW1fbmFtZV9mb3JfYW5vbnltb3VzX2VudW1fcGFyYW1ldGVy
KGRvbWFpbiwgZXZlbnRfb3JfY29tbWFuZF9uYW1lLCBwYXJhbWV0ZXIpLCBuYW1lKQogICAgICAg
ICAgICAgcmV0dXJuICdmcm9tUHJvdG9jb2xTdHJpbmc8JXM+KCVzKScgJSAoc2VsZi5vYmpjX2Vu
dW1fbmFtZV9mb3Jfbm9uX2Fub255bW91c19lbnVtKHBhcmFtZXRlci50eXBlKSwgbmFtZSkKICAg
ICAgICAgcmV0dXJuIHNlbGYub2JqY19wcm90b2NvbF9pbXBvcnRfZXhwcmVzc2lvbl9mb3JfdmFy
aWFibGUocGFyYW1ldGVyLnR5cGUsIG5hbWUpCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL29iamNfZ2VuZXJhdG9yX3RlbXBsYXRl
cy5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL29i
amNfZ2VuZXJhdG9yX3RlbXBsYXRlcy5weQppbmRleCAzMjZjMjYyNWVhMzRmMDY2YjJkNGNjOTg0
NmUxNGEyMzQxYjgxODgxLi5iNTZkMTQ4MTk1YzRiNjVmZmQyNDNhOTkxMGFhZDM2MzMzYTA4NTJk
IDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29k
ZWdlbi9vYmpjX2dlbmVyYXRvcl90ZW1wbGF0ZXMucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vb2JqY19nZW5lcmF0b3JfdGVtcGxhdGVzLnB5
CkBAIC0xMTQsMTMgKzExNCwxMyBAQCBwcml2YXRlOgogICAgICIiInZvaWQgT2JqQ0luc3BlY3Rv
ciR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcjo6JHtjb21tYW5kTmFtZX0oJHtwYXJhbWV0
ZXJzfSkKIHsKICAgICBpZiAoISR7cmVzcG9uZHNUb1NlbGVjdG9yfSkgewotICAgICAgICBiYWNr
ZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERp
c3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJyR7ZG9tYWluTmFtZX0uJHtjb21tYW5kTmFtZX0n
IHdhcyBub3QgZm91bmQiX3MpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQ
cm90b2NvbEVycm9yKHByb3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5v
dEZvdW5kLCAiJyR7ZG9tYWluTmFtZX0uJHtjb21tYW5kTmFtZX0nIHdhcyBub3QgZm91bmQiX3Mp
OwogICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcg
KmVycm9yKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJy
b3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAg
ICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9j
YWxsSWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwogICAgICAgICBi
YWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgIH07CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9lbnVt
LXZhbHVlcy5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2VudW0tdmFsdWVzLmpzb24KaW5kZXggY2RhZDYxZGY3YzlmOWM3NmU2OTI4OTdjM2RmZTBi
MDgyM2Y5MGU0ZC4uMjgxNTYxYjk0OGUxOWE0MWZhMGEyYzgwZWNmMmUwOWFmM2E4YmM0OSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2Vu
dW0tdmFsdWVzLmpzb24KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2VudW0tdmFsdWVzLmpzb24KQEAgLTMsOSArMyw5IEBACiAgICAgImRvbWFpbiI6
ICJUeXBlRG9tYWluIiwKICAgICAidHlwZXMiOiBbCiAgICAgICAgIHsKLSAgICAgICAgICAgICJp
ZCI6ICJUeXBlRG9tYWluRW51bSIsCisgICAgICAgICAgICAiaWQiOiAiRW51bSIsCiAgICAgICAg
ICAgICAidHlwZSI6ICJzdHJpbmciLAotICAgICAgICAgICAgImVudW0iOiBbInNoYXJlZCIsICJy
ZWQiLCAiZ3JlZW4iLCAiYmx1ZSJdCisgICAgICAgICAgICAiZW51bSI6IFsic2hhcmVkIiwgIjEi
LCAiMiJdCiAgICAgICAgIH0KICAgICBdCiB9LApAQCAtMTMsMTAgKzEzLDE4IEBACiAgICAgImRv
bWFpbiI6ICJDb21tYW5kRG9tYWluIiwKICAgICAiY29tbWFuZHMiOiBbCiAgICAgICAgIHsKLSAg
ICAgICAgICAgICJuYW1lIjogImNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlIiwKLSAgICAgICAg
ICAgICJwYXJhbWV0ZXJzIjogW10sCisgICAgICAgICAgICAibmFtZSI6ICJjb21tYW5kIiwKKyAg
ICAgICAgICAgICJwYXJhbWV0ZXJzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZW51
bVJlcXVpcmVkIiwgIiRyZWYiOiAiVHlwZURvbWFpbi5FbnVtIiB9LAorICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAiZW51bU9wdGlvbmFsIiwgIiRyZWYiOiAiVHlwZURvbWFpbi5FbnVtIiwgIm9w
dGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicGFyYW1ldGVyUmVx
dWlyZWQiLCAidHlwZSI6ICJzdHJpbmciLCAiZW51bSI6IFsic2hhcmVkIiwgInNoYXJlZFJlcXVp
cmVkIiwgImJsYWNrIl0gfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBhcmFtZXRlck9w
dGlvbmFsIiwgInR5cGUiOiAic3RyaW5nIiwgImVudW0iOiBbInNoYXJlZCIsICJzaGFyZWRPcHRp
b25hbCIsICJyZWQiXSwgIm9wdGlvbmFsIjogdHJ1ZSB9CisgICAgICAgICAgICBdLAogICAgICAg
ICAgICAgInJldHVybnMiOiBbCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJyZXR1cm5WYWx1
ZSIsICJ0eXBlIjogInN0cmluZyIsICJlbnVtIjogWyJzaGFyZWQiLCAiY3lhbiIsICJtYWdlbnRh
IiwgInllbGxvdyJdIH0KKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImVudW1SZXF1aXJlZCIs
ICIkcmVmIjogIlR5cGVEb21haW4uRW51bSIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjog
ImVudW1PcHRpb25hbCIsICIkcmVmIjogIlR5cGVEb21haW4uRW51bSIsICJvcHRpb25hbCI6IHRy
dWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInJldHVyblJlcXVpcmVkIiwgInR5cGUi
OiAic3RyaW5nIiwgImVudW0iOiBbInNoYXJlZCIsICJzaGFyZWRSZXF1aXJlZCIsICJ3aGl0ZSJd
IH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJyZXR1cm5PcHRpb25hbCIsICJ0eXBlIjog
InN0cmluZyIsICJlbnVtIjogWyJzaGFyZWQiLCAic2hhcmVkT3B0aW9uYWwiLCAiYmx1ZSJdLCAi
b3B0aW9uYWwiOiB0cnVlIH0KICAgICAgICAgICAgIF0KICAgICAgICAgfQogICAgIF0KQEAgLTI1
LDkgKzMzLDEyIEBACiAgICAgImRvbWFpbiI6ICJFdmVudERvbWFpbiIsCiAgICAgImV2ZW50cyI6
IFsKICAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAiZXZlbnRXaXRoRW51bVBhcmFtZXRl
ciIsCisgICAgICAgICAgICAibmFtZSI6ICJldmVudCIsCiAgICAgICAgICAgICAicGFyYW1ldGVy
cyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBhcmFtZXRlciIsICJ0eXBlIjogInN0
cmluZyIsICJlbnVtIjogWyJzaGFyZWQiLCAiYmxhY2siLCAid2hpdGUiXSB9CisgICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJlbnVtUmVxdWlyZWQiLCAiJHJlZiI6ICJUeXBlRG9tYWluLkVudW0i
IH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJlbnVtT3B0aW9uYWwiLCAiJHJlZiI6ICJU
eXBlRG9tYWluLkVudW0iLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJwYXJhbWV0ZXJSZXF1aXJlZCIsICJ0eXBlIjogInN0cmluZyIsICJlbnVtIjogWyJz
aGFyZWQiLCAic2hhcmVkUmVxdWlyZWQiLCAiZ3JleSJdIH0sCisgICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJwYXJhbWV0ZXJPcHRpb25hbCIsICJ0eXBlIjogInN0cmluZyIsICJlbnVtIjogWyJz
aGFyZWQiLCAic2hhcmVkT3B0aW9uYWwiLCAiZ3JlZW4iXSwgIm9wdGlvbmFsIjogdHJ1ZSB9CiAg
ICAgICAgICAgICBdCiAgICAgICAgIH0KICAgICBdCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvY29tbWFuZC10YXJnZXRU
eXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uLXJlc3VsdCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9jb21tYW5kLXRh
cmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24tcmVzdWx0CmluZGV4
IGU5YzE4YmZhZTViMzJjOTU3YmJlYWQ0ZTBlYjlkMDZiNjM5OGIwNjMuLjMyZDRhOGU4MTE0NjAx
ZWZkNjZlZjk4NzliZGNhNmNmZmU3MGJjODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9jb21tYW5kLXRhcmdldFR5cGUt
bWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24tcmVzdWx0CisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9jb21tYW5kLXRh
cmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24tcmVzdWx0CkBAIC03
MCw3ICs3MCw3IEBAIEluc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIkRvbWFpbiIsIFsi
cGFnZSJdKTsKIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQog
Ci0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xP
YmplY3RzLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXIuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRl
ci5oPgogCkBAIC04OCw3ICs4OCw3IEBAIHByaXZhdGU6CiBjbGFzcyBBbHRlcm5hdGVEb21haW5C
YWNrZW5kRGlzcGF0Y2hlciA6IHB1YmxpYyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7CiBw
dWJsaWM6CiAgICAgdmlydHVhbCB+QWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIoKSB7
IH0KLSAgICB2aXJ0dWFsIHZvaWQgQ29tbWFuZChsb25nIGNhbGxJZCkgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBDb21tYW5kKGxvbmcgcHJvdG9jb2xfY2FsbElkKSA9IDA7CiB9OwogCiB9IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKQEAgLTEzMCwxMSArMTMwLDE0IEBAIHB1YmxpYzoKIAogI2luY2x1
ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHR1cGxlPgorI2luY2x1ZGUgPHd0
Zi9FeHBlY3RlZC5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAotdHlwZWRlZiBTdHJp
bmcgRXJyb3JTdHJpbmc7CisKIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BB
VENIRVJTKQogY2xhc3MgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXI7CkBAIC0xNDIs
NyArMTQ1LDcgQEAgY2xhc3MgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXI7CiAKIGNs
YXNzIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7CiBwdWJsaWM6Ci0gICAgdmlydHVh
bCB2b2lkIENvbW1hbmQoRXJyb3JTdHJpbmcmKSA9IDA7CisgICAgdmlydHVhbCBQcm90b2NvbDo6
RXJyb3JTdHJpbmdPcjx2b2lkPiBDb21tYW5kKCkgPSAwOwogcHJvdGVjdGVkOgogICAgIHZpcnR1
YWwgfkRvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpOwogfTsKQEAgLTE1MCw5ICsxNTMs
OSBAQCBwcm90ZWN0ZWQ6CiBjbGFzcyBEb21haW5CYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1
YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7CiBwdWJsaWM6CiAgICAgc3RhdGlj
IFJlZjxEb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiwg
RG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7Ci0gICAgdm9pZCBkaXNwYXRjaChsb25n
IHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVz
c2FnZSkgZmluYWw7CisgICAgdm9pZCBkaXNwYXRjaChsb25nIHByb3RvY29sX2NhbGxJZCwgY29u
c3QgU3RyaW5nJiBwcm90b2NvbF9tZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xf
bWVzc2FnZSkgZmluYWw7CiBwcml2YXRlOgotICAgIHZvaWQgQ29tbWFuZChsb25nIHJlcXVlc3RJ
ZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKKyAgICB2b2lkIENvbW1hbmQo
bG9uZyBwcm90b2NsX2NhbGxJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9wYXJh
bWV0ZXJzKTsKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIHB1
YmxpYzoKICAgICB2b2lkIHNldEFsdGVybmF0ZURpc3BhdGNoZXIoQWx0ZXJuYXRlRG9tYWluQmFj
a2VuZERpc3BhdGNoZXIqIGFsdGVybmF0ZURpc3BhdGNoZXIpIHsgbV9hbHRlcm5hdGVEaXNwYXRj
aGVyID0gYWx0ZXJuYXRlRGlzcGF0Y2hlcjsgfQpAQCAtMjAxLDkgKzIwNCw3IEBAIHByaXZhdGU6
CiAjaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgogCiAjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSlNPTlZh
bHVlcy5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90
ZXh0L0NTdHJpbmcuaD4KIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENI
RVJTKQogI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKQEAgLTIy
NSwzOCArMjI2LDM4IEBAIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpEb21haW5CYWNrZW5kRGlz
cGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhCiAgICAgbV9iYWNrZW5kRGlz
cGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRjaGVyRm9yRG9tYWluKCJEb21haW4iX3MsIHRoaXMpOwog
fQogCi12b2lkIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHJlcXVlc3RJ
ZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkKK3Zv
aWQgRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcHJvdG9jb2xfY2FsbElk
LCBjb25zdCBTdHJpbmcmIHByb3RvY29sX21ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBwcm90
b2NvbF9tZXNzYWdlKQogewogICAgIFJlZjxEb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVj
dCgqdGhpcyk7CiAKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzOwotICAgIG1l
c3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9zLCBwYXJhbWV0ZXJzKTsKKyAgICBhdXRvIHByb3Rv
Y29sX3BhcmFtZXRlcnMgPSBwcm90b2NvbF9tZXNzYWdlLT5nZXRPYmplY3QoInBhcmFtcyJfcyk7
CiAKLSAgICBpZiAobWV0aG9kID09ICJDb21tYW5kIikgewotICAgICAgICBDb21tYW5kKHJlcXVl
c3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7CisgICAgaWYgKHByb3RvY29sX21ldGhvZCA9PSAi
Q29tbWFuZCIpIHsKKyAgICAgICAgQ29tbWFuZChwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJv
dG9jb2xfcGFyYW1ldGVycykpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbV9iYWNr
ZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0
aG9kTm90Rm91bmQsICInRG9tYWluLiIgKyBtZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7Cisg
ICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0
Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRG9tYWluLiIgKyBwcm90b2NvbF9tZXRob2QgKyAiJyB3
YXMgbm90IGZvdW5kIik7CiB9CiAKLXZvaWQgRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkNvbW1h
bmQobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCit2b2lkIERvbWFpbkJh
Y2tlbmREaXNwYXRjaGVyOjpDb21tYW5kKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBSZWZQdHI8SlNP
Tjo6T2JqZWN0PiYmKQogewogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENI
RVJTKQogICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5h
dGVEaXNwYXRjaGVyLT5Db21tYW5kKHJlcXVlc3RJZCk7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlz
cGF0Y2hlci0+Q29tbWFuZChwcm90b2NvbF9jYWxsSWQpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogCi0g
ICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNP
Tjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBtX2FnZW50LT5Db21tYW5kKGVycm9yKTsKKyAgICBh
dXRvIHJlc3VsdCA9IG1fYWdlbnQtPkNvbW1hbmQoKTsKKyAgICBpZiAoIXJlc3VsdCkgeworICAg
ICAgICBBU1NFUlQoIXJlc3VsdC5lcnJvcigpLmlzRW1wdHkoKSk7CisgICAgICAgIG1fYmFja2Vu
ZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZl
ckVycm9yLCByZXN1bHQuZXJyb3IoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBp
ZiAoIWVycm9yLmxlbmd0aCgpKQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVz
cG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKLSAgICBlbHNlCi0gICAg
ICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3Bh
dGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7CisgICAgYXV0byBwcm90b2NvbF9q
c29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgbV9iYWNrZW5kRGlzcGF0
Y2hlci0+c2VuZFJlc3BvbnNlKHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9qc29u
TWVzc2FnZSksIGZhbHNlKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCkBAIC0yOTcs
NiArMjk4LDcgQEAgdm9pZCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Q29tbWFuZChsb25nIHJl
cXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikKIAogI2luY2x1ZGUgIlRlc3RQcm90b2Nv
bE9iamVjdHMuaCIKICNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9P
cHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKQEAgLTM0OSwxNiArMzUxLDE1IEBAIHByaXZhdGU6CiAjaW5jbHVkZSAiVGVz
dEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiBu
YW1lc3BhY2UgSW5zcGVjdG9yIHsKIAogdm9pZCBEb21haW5Gcm9udGVuZERpc3BhdGNoZXI6OkV2
ZW50KCkKIHsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVj
dDo6Y3JlYXRlKCk7Ci0gICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiRG9t
YWluLkV2ZW50Il9zKTsKKyAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2Jq
ZWN0OjpjcmVhdGUoKTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRo
b2QiX3MsICJEb21haW4uRXZlbnQiX3MpOwogCi0gICAgbV9mcm9udGVuZFJvdXRlci5zZW5kRXZl
bnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKKyAgICBtX2Zyb250ZW5kUm91dGVyLnNl
bmRFdmVudChwcm90b2NvbF9qc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwogfQogCiB9IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKQEAgLTM5OCw3ICszOTksOSBAQCB2b2lkIERvbWFpbkZyb250
ZW5kRGlzcGF0Y2hlcjo6RXZlbnQoKQogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlv
bnMuaD4KKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25h
bC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVj
dG9yIHsKIApAQCAtNDUyLDggKzQ1NSw3IEBAIG5hbWVzcGFjZSBQcm90b2NvbCB7CiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogCi0jaW5jbHVk
ZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1
ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC01MDks
NyArNTExLDcgQEAgY2xhc3MgT2JqQ0luc3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyIGZp
bmFsIDogcHVibGljIEFsdGVybmF0ZURvbWFpbkJhY2tlbmQKICAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKIHB1YmxpYzoKICAgICBPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNo
ZXIoaWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4gaGFuZGxlcikgeyBtX2RlbGVn
YXRlID0gaGFuZGxlcjsgfQotICAgIHZvaWQgQ29tbWFuZChsb25nIHJlcXVlc3RJZCkgZmluYWw7
CisgICAgdm9pZCBDb21tYW5kKGxvbmcgcHJvdG9jb2xfY2FsbElkKSBmaW5hbDsKIHByaXZhdGU6
CiAgICAgUmV0YWluUHRyPGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+PiBtX2Rl
bGVnYXRlOwogfTsKQEAgLTU1NywyMSArNTU5LDIyIEBAIHByaXZhdGU6CiAKIG5hbWVzcGFjZSBJ
bnNwZWN0b3IgewogCi12b2lkIE9iakNJbnNwZWN0b3JEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6
Q29tbWFuZChsb25nIHJlcXVlc3RJZCkKK3ZvaWQgT2JqQ0luc3BlY3RvckRvbWFpbkJhY2tlbmRE
aXNwYXRjaGVyOjpDb21tYW5kKGxvbmcgcHJvdG9jb2xfY2FsbElkKQogewogICAgIGlmICghW21f
ZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihDb21tYW5kV2l0aEVycm9yQ2Fs
bGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCkt
PnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9k
Tm90Rm91bmQsICInRG9tYWluLkNvbW1hbmQnIHdhcyBub3QgZm91bmQiX3MpOworICAgICAgICBi
YWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHByb3RvY29sX2NhbGxJZCwg
QmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RvbWFpbi5Db21tYW5kJyB3YXMg
bm90IGZvdW5kIl9zKTsKICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdF
cnJvcnMoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlkIGVycm9yQ2FsbGJhY2sg
PSBeKE5TU3RyaW5nICplcnJvcikgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBv
cnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9y
LCBlcnJvcik7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJy
b3IocHJvdG9jb2xfY2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9y
KTsKICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKICAg
ICB9OwogCiAgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKLSAgICAgICAgYmFja2VuZERpc3Bh
dGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSwg
ZmFsc2UpOworICAgICAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0
OjpjcmVhdGUoKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHBy
b3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSksIGZhbHNlKTsKICAg
ICB9OwogCiAgICAgW21fZGVsZWdhdGUgQ29tbWFuZFdpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2Fs
bGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107CkBAIC03NzMsOSArNzc2LDkg
QEAgdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKIHsKICAgICBjb25zdCBGcm9udGVuZFJvdXRl
ciYgcm91dGVyID0gX2NvbnRyb2xsZXItPmZyb250ZW5kUm91dGVyKCk7CiAKLSAgICBSZWY8SlNP
Tjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAganNv
bk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiRG9tYWluLkV2ZW50Il9zKTsKLSAgICBy
b3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7CisgICAgYXV0byBw
cm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgcHJvdG9j
b2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiRG9tYWluLkV2ZW50Il9zKTsK
KyAgICByb3V0ZXIuc2VuZEV2ZW50KHByb3RvY29sX2pzb25NZXNzYWdlLT50b0pTT05TdHJpbmco
KSk7CiB9CiAKIEBlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9jb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5q
c29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9leHBlY3RlZC9jb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uLXJlc3VsdAppbmRl
eCBkMWM2OWIwMzFjZGI0NzFkMThhMmU0OTc4ZjIxMjdiMGVjZDQ3YzUyLi40Y2U2ZmMzZDIxMzZh
NGViNGFiMjI0NjUxYTliZmIxNjVlNDUzMGY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1hc3lu
Yy1hdHRyaWJ1dGUuanNvbi1yZXN1bHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2NvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRl
Lmpzb24tcmVzdWx0CkBAIC03Myw3ICs3Myw3IEBAIEluc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVE
b21haW4oIkRhdGFiYXNlIiwgbnVsbCk7CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKIAotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVk
ZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yRnJvbnRlbmRSb3V0ZXIuaD4KIApAQCAtOTEsMTAgKzkxLDEwIEBAIHByaXZhdGU6CiBjbGFz
cyBBbHRlcm5hdGVEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyIDogcHVibGljIEFsdGVybmF0ZUJh
Y2tlbmREaXNwYXRjaGVyIHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5BbHRlcm5hdGVEYXRhYmFz
ZUJhY2tlbmREaXNwYXRjaGVyKCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVTUUxTeW5j
T3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyBjYWxsSWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25z
dCBTdHJpbmcmIGluX3F1ZXJ5KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVTUUxBc3lu
Y09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgY2FsbElkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29u
c3QgU3RyaW5nJiBpbl9xdWVyeSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU1FMU3lu
Yyhsb25nIGNhbGxJZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnkp
ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNRTEFzeW5jKGxvbmcgY2FsbElkLCBpbnQg
aW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSkgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgcHJvdG9jb2xfY2Fs
bElkLCBpbnQgZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBxdWVyeSkgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIHByb3RvY29s
X2NhbGxJZCwgaW50IGRhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgcXVlcnkpID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgZXhlY3V0ZVNRTFN5bmMobG9uZyBwcm90b2NvbF9jYWxsSWQsIGludCBkYXRh
YmFzZUlkLCBjb25zdCBTdHJpbmcmIHF1ZXJ5KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGV4ZWN1
dGVTUUxBc3luYyhsb25nIHByb3RvY29sX2NhbGxJZCwgaW50IGRhdGFiYXNlSWQsIGNvbnN0IFN0
cmluZyYgcXVlcnkpID0gMDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgpAQCAtMTM2
LDExICsxMzYsMTQgQEAgcHVibGljOgogCiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5o
IgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+
CisjaW5jbHVkZSA8dHVwbGU+CisjaW5jbHVkZSA8d3RmL0V4cGVjdGVkLmg+CisjaW5jbHVkZSA8
d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVz
cGFjZSBJbnNwZWN0b3IgewogCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKwogCiAjaWYg
RU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiBjbGFzcyBBbHRlcm5hdGVE
YXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOwpAQCAtMTQ4LDI3ICsxNTEsMjAgQEAgY2xhc3MgQWx0
ZXJuYXRlRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjsKIAogY2xhc3MgRGF0YWJhc2VCYWNrZW5k
RGlzcGF0Y2hlckhhbmRsZXIgewogcHVibGljOgotICAgIC8vIE5hbWVkIGFmdGVyIHBhcmFtZXRl
ciAncHJpbnRDb2xvcicgd2hpbGUgZ2VuZXJhdGluZyBjb21tYW5kL2V2ZW50IGV4ZWN1dGVTUUxT
eW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMuCi0gICAgZW51bSBjbGFzcyBQcmludENvbG9yIHsKLSAg
ICAgICAgQ3lhbiA9IDMsCi0gICAgICAgIE1hZ2VudGEgPSA0LAotICAgICAgICBZZWxsb3cgPSA1
LAotICAgICAgICBCbGFjayA9IDYsCi0gICAgfTsgLy8gZW51bSBjbGFzcyBQcmludENvbG9yCi0g
ICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMoRXJyb3JT
dHJpbmcmLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSwgUmVmUHRy
PEpTT046OkFycmF5T2Y8U3RyaW5nPj4mIG9wdF9vdXRfY29sdW1uTmFtZXMsIE9wdGlvbmFsPFN0
cmluZz4mIG9wdF9vdXRfbm90ZXMsIE9wdGlvbmFsPGRvdWJsZT4mIG9wdF9vdXRfdGltZXN0YW1w
LCBPcHRpb25hbDxKU09OOjpPYmplY3Q+JiBvcHRfb3V0X3ZhbHVlcywgT3B0aW9uYWw8SlNPTjo6
VmFsdWU+JiBvcHRfb3V0X3BheWxvYWQsIE9wdGlvbmFsPGludD4mIG9wdF9vdXRfZGF0YWJhc2VJ
ZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4mIG9wdF9vdXRf
c3FsRXJyb3IsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzKiBv
cHRfb3V0X3NjcmVlbkNvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6
OkNvbG9yTGlzdD4mIG9wdF9vdXRfYWx0ZXJuYXRlQ29sb3JzLCBEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVySGFuZGxlcjo6UHJpbnRDb2xvciogb3B0X291dF9wcmludENvbG9yKSA9IDA7CisgICAg
dmlydHVhbCBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxzdGQ6OnR1cGxlPFJlZlB0cjxKU09OOjpB
cnJheU9mPFN0cmluZz4+IC8qIG9wdF9jb2x1bW5OYW1lcyAqLywgU3RyaW5nIC8qIG9wdF9ub3Rl
cyAqLywgT3B0aW9uYWw8ZG91YmxlPiAvKiBvcHRfdGltZXN0YW1wICovLCBSZWZQdHI8SlNPTjo6
T2JqZWN0PiAvKiBvcHRfdmFsdWVzICovLCBSZWZQdHI8SlNPTjo6VmFsdWU+IC8qIG9wdF9wYXls
b2FkICovLCBPcHRpb25hbDxpbnQ+IC8qIG9wdF9kYXRhYmFzZUlkICovLCBSZWZQdHI8UHJvdG9j
b2w6OkRhdGFiYXNlOjpFcnJvcj4gLyogb3B0X3NxbEVycm9yICovLCBPcHRpb25hbDxQcm90b2Nv
bDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+IC8qIG9wdF9zY3JlZW5Db2xvciAqLywgUmVmUHRy
PFByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiAvKiBvcHRfYWx0ZXJuYXRlQ29sb3JzICov
LCBTdHJpbmcgLyogb3B0X3ByaW50Q29sb3IgKi8+PiBleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0
dXJuVmFsdWVzKGludCBkYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIHF1ZXJ5KSA9IDA7CiAgICAg
Y2xhc3MgRXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNDYWxsYmFjayA6IHB1Ymxp
YyBCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlIHsKICAgICBwdWJsaWM6CiAgICAgICAg
IEV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJhY2soUmVmPEJhY2tlbmRE
aXNwYXRjaGVyPiYmLCBpbnQgaWQpOwotICAgICAgICB2b2lkIHNlbmRTdWNjZXNzKFJlZlB0cjxK
U09OOjpBcnJheU9mPFN0cmluZz4+JiYgY29sdW1uTmFtZXMsIE9wdGlvbmFsPFN0cmluZz4mIG5v
dGVzLCBPcHRpb25hbDxkb3VibGU+JiB0aW1lc3RhbXAsIE9wdGlvbmFsPEpTT046Ok9iamVjdD4m
IHZhbHVlcywgT3B0aW9uYWw8SlNPTjo6VmFsdWU+JiBwYXlsb2FkLCBPcHRpb25hbDxpbnQ+JiBk
YXRhYmFzZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiYm
IHNxbEVycm9yLCBPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFy
eUNvbG9ycz4gc2NyZWVuQ29sb3IsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFz
ZTo6Q29sb3JMaXN0PiYmIGFsdGVybmF0ZUNvbG9ycywgT3B0aW9uYWw8RGF0YWJhc2VCYWNrZW5k
RGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3I+IHByaW50Q29sb3IpOworICAgICAgICB2b2lk
IHNlbmRTdWNjZXNzKFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+JiYgb3B0X2NvbHVtbk5h
bWVzLCBjb25zdCBTdHJpbmcmIG9wdF9ub3RlcywgT3B0aW9uYWw8ZG91YmxlPiYmIG9wdF90aW1l
c3RhbXAsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgb3B0X3ZhbHVlcywgUmVmUHRyPEpTT046OlZh
bHVlPiYmIG9wdF9wYXlsb2FkLCBPcHRpb25hbDxpbnQ+JiYgb3B0X2RhdGFiYXNlSWQsIFJlZlB0
cjxQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiYmIG9wdF9zcWxFcnJvciwgT3B0aW9uYWw8UHJv
dG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPiYmIG9wdF9zY3JlZW5Db2xvciwgUmVmUHRy
PFByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiYmIG9wdF9hbHRlcm5hdGVDb2xvcnMsIGNv
bnN0IFN0cmluZyYgb3B0X3ByaW50Q29sb3IpOwogICAgIH07Ci0gICAgdmlydHVhbCB2b2lkIGV4
ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGludCBpbl9kYXRhYmFzZUlkLCBjb25z
dCBTdHJpbmcmIGluX3F1ZXJ5LCBSZWY8RXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1
ZXNDYWxsYmFjaz4mJiBjYWxsYmFjaykgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU1FM
U3luYyhFcnJvclN0cmluZyYsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1
ZXJ5LCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiYgb3V0X2NvbHVtbk5hbWVzLCBTdHJp
bmcqIG91dF9ub3RlcywgZG91YmxlKiBvdXRfdGltZXN0YW1wLCBKU09OOjpPYmplY3QqIG91dF92
YWx1ZXMsIEpTT046OlZhbHVlKiBvdXRfcGF5bG9hZCwgaW50KiBvdXRfZGF0YWJhc2VJZCwgUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4mIG91dF9zcWxFcnJvciwg
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+JiBvdXRfYWx0
ZXJuYXRlQ29sb3JzLCBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9y
cyogb3V0X3NjcmVlbkNvbG9yLCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UHJp
bnRDb2xvciogb3V0X3ByaW50Q29sb3IpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNR
TEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMoaW50IGRhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYg
cXVlcnksIFJlZjxFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc0NhbGxiYWNrPiYm
KSA9IDA7CisgICAgdmlydHVhbCBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxzdGQ6OnR1cGxlPFJl
ZjxKU09OOjpBcnJheU9mPFN0cmluZz4+IC8qIGNvbHVtbk5hbWVzICovLCBTdHJpbmcgLyogbm90
ZXMgKi8sIGRvdWJsZSAvKiB0aW1lc3RhbXAgKi8sIFJlZjxKU09OOjpPYmplY3Q+IC8qIHZhbHVl
cyAqLywgUmVmPEpTT046OlZhbHVlPiAvKiBwYXlsb2FkICovLCBpbnQgLyogZGF0YWJhc2VJZCAq
LywgUmVmPFByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IC8qIHNxbEVycm9yICovLCBSZWY8UHJv
dG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+IC8qIGFsdGVybmF0ZUNvbG9ycyAqLywgUHJvdG9j
b2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzIC8qIHNjcmVlbkNvbG9yICovLCBTdHJpbmcgLyog
cHJpbnRDb2xvciAqLz4+IGV4ZWN1dGVTUUxTeW5jKGludCBkYXRhYmFzZUlkLCBjb25zdCBTdHJp
bmcmIHF1ZXJ5KSA9IDA7CiAgICAgY2xhc3MgRXhlY3V0ZVNRTEFzeW5jQ2FsbGJhY2sgOiBwdWJs
aWMgQmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZSB7CiAgICAgcHVibGljOgogICAgICAg
ICBFeGVjdXRlU1FMQXN5bmNDYWxsYmFjayhSZWY8QmFja2VuZERpc3BhdGNoZXI+JiYsIGludCBp
ZCk7Ci0gICAgICAgIHZvaWQgc2VuZFN1Y2Nlc3MoUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5n
Pj4mJiBjb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBub3RlcywgZG91YmxlIHRpbWVzdGFtcCwg
SlNPTjo6T2JqZWN0IHZhbHVlcywgSlNPTjo6VmFsdWUgcGF5bG9hZCwgaW50IGRhdGFiYXNlSWQs
IFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+JiYgc3FsRXJyb3Is
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzIHNjcmVlbkNvbG9y
LCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4mJiBhbHRl
cm5hdGVDb2xvcnMsIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQcmludENvbG9y
IHByaW50Q29sb3IpOworICAgICAgICB2b2lkIHNlbmRTdWNjZXNzKFJlZjxKU09OOjpBcnJheU9m
PFN0cmluZz4+JiYgY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgbm90ZXMsIGRvdWJsZSB0aW1l
c3RhbXAsIFJlZjxKU09OOjpPYmplY3Q+JiYgdmFsdWVzLCBSZWY8SlNPTjo6VmFsdWU+JiYgcGF5
bG9hZCwgaW50IGRhdGFiYXNlSWQsIFJlZjxQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiYmIHNx
bEVycm9yLCBQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMgc2NyZWVuQ29sb3IsIFJl
ZjxQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4mJiBhbHRlcm5hdGVDb2xvcnMsIGNvbnN0
IFN0cmluZyYgcHJpbnRDb2xvcik7CiAgICAgfTsKLSAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNR
TEFzeW5jKGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5LCBSZWY8RXhl
Y3V0ZVNRTEFzeW5jQ2FsbGJhY2s+JiYgY2FsbGJhY2spID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
ZXhlY3V0ZVNRTEFzeW5jKGludCBkYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIHF1ZXJ5LCBSZWY8
RXhlY3V0ZVNRTEFzeW5jQ2FsbGJhY2s+JiYpID0gMDsKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFs
IH5EYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpOwogfTsKQEAgLTE3NiwxMiArMTcy
LDEyIEBAIHByb3RlY3RlZDoKIGNsYXNzIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIgZmluYWwg
OiBwdWJsaWMgU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIgewogcHVibGljOgogICAgIHN0
YXRpYyBSZWY8RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEJhY2tlbmREaXNwYXRj
aGVyJiwgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKLSAgICB2b2lkIGRpc3Bh
dGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVj
dD4mJiBtZXNzYWdlKSBmaW5hbDsKKyAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcHJvdG9jb2xfY2Fs
bElkLCBjb25zdCBTdHJpbmcmIHByb3RvY29sX21ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBw
cm90b2NvbF9tZXNzYWdlKSBmaW5hbDsKIHByaXZhdGU6Ci0gICAgdm9pZCBleGVjdXRlU1FMU3lu
Y09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0
PiYmIHBhcmFtZXRlcnMpOwotICAgIHZvaWQgZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5W
YWx1ZXMobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7
Ci0gICAgdm9pZCBleGVjdXRlU1FMU3luYyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9i
amVjdD4mJiBwYXJhbWV0ZXJzKTsKLSAgICB2b2lkIGV4ZWN1dGVTUUxBc3luYyhsb25nIHJlcXVl
c3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKKyAgICB2b2lkIGV4ZWN1
dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyBwcm90b2NsX2NhbGxJZCwgUmVmUHRy
PEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9wYXJhbWV0ZXJzKTsKKyAgICB2b2lkIGV4ZWN1dGVT
UUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgcHJvdG9jbF9jYWxsSWQsIFJlZlB0cjxK
U09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfcGFyYW1ldGVycyk7CisgICAgdm9pZCBleGVjdXRlU1FM
U3luYyhsb25nIHByb3RvY2xfY2FsbElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29s
X3BhcmFtZXRlcnMpOworICAgIHZvaWQgZXhlY3V0ZVNRTEFzeW5jKGxvbmcgcHJvdG9jbF9jYWxs
SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfcGFyYW1ldGVycyk7CiAjaWYgRU5B
QkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiBwdWJsaWM6CiAgICAgdm9pZCBz
ZXRBbHRlcm5hdGVEaXNwYXRjaGVyKEFsdGVybmF0ZURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIq
IGFsdGVybmF0ZURpc3BhdGNoZXIpIHsgbV9hbHRlcm5hdGVEaXNwYXRjaGVyID0gYWx0ZXJuYXRl
RGlzcGF0Y2hlcjsgfQpAQCAtMjMwLDkgKzIyNiw3IEBAIHByaXZhdGU6CiAjaW5jbHVkZSAiVGVz
dEJhY2tlbmREaXNwYXRjaGVycy5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgogI2luY2x1
ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
IAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogI2luY2x1ZGUg
IlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKQEAgLTI1NCwzNyArMjQ4LDM2IEBA
IERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OkRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIoQmFj
a2VuZERpc3BhdGNoZXImIGJhY2tlbmRECiAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0
ZXJEaXNwYXRjaGVyRm9yRG9tYWluKCJEYXRhYmFzZSJfcywgdGhpcyk7CiB9CiAKLXZvaWQgRGF0
YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0
cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpCit2b2lkIERhdGFiYXNl
QmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBjb25zdCBT
dHJpbmcmIHByb3RvY29sX21ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9tZXNz
YWdlKQogewogICAgIFJlZjxEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlz
KTsKIAotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnM7Ci0gICAgbWVzc2FnZS0+
Z2V0T2JqZWN0KCJwYXJhbXMiX3MsIHBhcmFtZXRlcnMpOworICAgIGF1dG8gcHJvdG9jb2xfcGFy
YW1ldGVycyA9IHByb3RvY29sX21lc3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9zKTsKIAotICAg
IGlmIChtZXRob2QgPT0gImV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMiKSB7Ci0g
ICAgICAgIGV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMocmVxdWVzdElkLCBXVEZN
b3ZlKHBhcmFtZXRlcnMpKTsKKyAgICBpZiAocHJvdG9jb2xfbWV0aG9kID09ICJleGVjdXRlU1FM
U3luY09wdGlvbmFsUmV0dXJuVmFsdWVzIikgeworICAgICAgICBleGVjdXRlU1FMU3luY09wdGlv
bmFsUmV0dXJuVmFsdWVzKHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9wYXJhbWV0
ZXJzKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKG1ldGhvZCA9PSAiZXhlY3V0
ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMiKSB7Ci0gICAgICAgIGV4ZWN1dGVTUUxBc3lu
Y09wdGlvbmFsUmV0dXJuVmFsdWVzKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7Cisg
ICAgaWYgKHByb3RvY29sX21ldGhvZCA9PSAiZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5W
YWx1ZXMiKSB7CisgICAgICAgIGV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKHBy
b3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9wYXJhbWV0ZXJzKSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9Ci0gICAgaWYgKG1ldGhvZCA9PSAiZXhlY3V0ZVNRTFN5bmMiKSB7Ci0gICAg
ICAgIGV4ZWN1dGVTUUxTeW5jKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7CisgICAg
aWYgKHByb3RvY29sX21ldGhvZCA9PSAiZXhlY3V0ZVNRTFN5bmMiKSB7CisgICAgICAgIGV4ZWN1
dGVTUUxTeW5jKHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9wYXJhbWV0ZXJzKSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKG1ldGhvZCA9PSAiZXhlY3V0ZVNRTEFz
eW5jIikgewotICAgICAgICBleGVjdXRlU1FMQXN5bmMocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFt
ZXRlcnMpKTsKKyAgICBpZiAocHJvdG9jb2xfbWV0aG9kID09ICJleGVjdXRlU1FMQXN5bmMiKSB7
CisgICAgICAgIGV4ZWN1dGVTUUxBc3luYyhwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJvdG9j
b2xfcGFyYW1ldGVycykpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbV9iYWNrZW5k
RGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9k
Tm90Rm91bmQsICInRGF0YWJhc2UuIiArIG1ldGhvZCArICInIHdhcyBub3QgZm91bmQiKTsKKyAg
ICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRj
aGVyOjpNZXRob2ROb3RGb3VuZCwgIidEYXRhYmFzZS4iICsgcHJvdG9jb2xfbWV0aG9kICsgIicg
d2FzIG5vdCBmb3VuZCIpOwogfQogCi12b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4
ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxK
U09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycykKK3ZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hl
cjo6ZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIHByb3RvY29sX2NhbGxJ
ZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9wYXJhbWV0ZXJzKQogewotICAgIGlu
dCBpbl9kYXRhYmFzZUlkID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0SW50ZWdlcihwYXJhbWV0
ZXJzLmdldCgpLCAiZGF0YWJhc2VJZCJfcywgbnVsbHB0cik7Ci0gICAgU3RyaW5nIGluX3F1ZXJ5
ID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3RyaW5nKHBhcmFtZXRlcnMuZ2V0KCksICJxdWVy
eSJfcywgbnVsbHB0cik7CisgICAgYXV0byBpbl9kYXRhYmFzZUlkID0gbV9iYWNrZW5kRGlzcGF0
Y2hlci0+Z2V0SW50ZWdlcihwcm90b2NvbF9wYXJhbWV0ZXJzLmdldCgpLCAiZGF0YWJhc2VJZCJf
cywgdHJ1ZSk7CisgICAgYXV0byBpbl9xdWVyeSA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFN0
cmluZyhwcm90b2NvbF9wYXJhbWV0ZXJzLmdldCgpLCAicXVlcnkiX3MsIHRydWUpOwogICAgIGlm
IChtX2JhY2tlbmREaXNwYXRjaGVyLT5oYXNQcm90b2NvbEVycm9ycygpKSB7CiAgICAgICAgIG1f
YmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6
OkludmFsaWRQYXJhbXMsICJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJ0RhdGFiYXNlLmV4ZWN1
dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMnIGNhbid0IGJlIHByb2Nlc3NlZCJfcyk7CiAg
ICAgICAgIHJldHVybjsKQEAgLTI5Miw4NSArMjg1LDc2IEBAIHZvaWQgRGF0YWJhc2VCYWNrZW5k
RGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIHJlcXVl
c3RJCiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKICAgICBp
ZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hl
ci0+ZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhyZXF1ZXN0SWQsIGluX2RhdGFi
YXNlSWQsIGluX3F1ZXJ5KTsKKyAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5leGVjdXRl
U1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKHByb3RvY29sX2NhbGxJZCwgKmluX2RhdGFiYXNl
SWQsIGluX3F1ZXJ5KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZiAvLyBFTkFCTEUo
SU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIAotICAgIEVycm9yU3RyaW5nIGVycm9y
OwotICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7
Ci0gICAgUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4gb3V0X2NvbHVtbk5hbWVzOwotICAg
IE9wdGlvbmFsPFN0cmluZz4gb3V0X25vdGVzOwotICAgIE9wdGlvbmFsPGRvdWJsZT4gb3V0X3Rp
bWVzdGFtcDsKLSAgICBPcHRpb25hbDxKU09OOjpPYmplY3Q+IG91dF92YWx1ZXM7Ci0gICAgT3B0
aW9uYWw8SlNPTjo6VmFsdWU+IG91dF9wYXlsb2FkOwotICAgIE9wdGlvbmFsPGludD4gb3V0X2Rh
dGFiYXNlSWQ7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJv
cj4gb3V0X3NxbEVycm9yOwotICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmlt
YXJ5Q29sb3JzIG91dF9zY3JlZW5Db2xvcjsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4gb3V0X2FsdGVybmF0ZUNvbG9yczsKLSAgICBEYXRhYmFz
ZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UHJpbnRDb2xvciBvdXRfcHJpbnRDb2xvcjsKLSAg
ICBtX2FnZW50LT5leGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGVycm9yLCBpbl9k
YXRhYmFzZUlkLCBpbl9xdWVyeSwgb3V0X2NvbHVtbk5hbWVzLCBvdXRfbm90ZXMsIG91dF90aW1l
c3RhbXAsIG91dF92YWx1ZXMsIG91dF9wYXlsb2FkLCBvdXRfZGF0YWJhc2VJZCwgb3V0X3NxbEVy
cm9yLCBvdXRfc2NyZWVuQ29sb3IsIG91dF9hbHRlcm5hdGVDb2xvcnMsIG91dF9wcmludENvbG9y
KTsKLQotICAgIGlmICghZXJyb3IubGVuZ3RoKCkpIHsKLSAgICAgICAgaWYgKG91dF9jb2x1bW5O
YW1lcykKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCBvdXRf
Y29sdW1uTmFtZXMpOwotICAgICAgICBpZiAob3V0X25vdGVzLmhhc1ZhbHVlKCkpCi0gICAgICAg
ICAgICByZXN1bHQtPnNldFN0cmluZygibm90ZXMiX3MsICpvdXRfbm90ZXMpOwotICAgICAgICBp
ZiAob3V0X3RpbWVzdGFtcC5oYXNWYWx1ZSgpKQotICAgICAgICAgICAgcmVzdWx0LT5zZXREb3Vi
bGUoInRpbWVzdGFtcCJfcywgKm91dF90aW1lc3RhbXApOwotICAgICAgICBpZiAob3V0X3ZhbHVl
cy5oYXNWYWx1ZSgpKQotICAgICAgICAgICAgcmVzdWx0LT5zZXRPYmplY3QoInZhbHVlcyJfcywg
Km91dF92YWx1ZXMpOwotICAgICAgICBpZiAob3V0X3BheWxvYWQuaGFzVmFsdWUoKSkKLSAgICAg
ICAgICAgIHJlc3VsdC0+c2V0VmFsdWUoInBheWxvYWQiX3MsICpvdXRfcGF5bG9hZCk7Ci0gICAg
ICAgIGlmIChvdXRfZGF0YWJhc2VJZC5oYXNWYWx1ZSgpKQotICAgICAgICAgICAgcmVzdWx0LT5z
ZXRJbnRlZ2VyKCJkYXRhYmFzZUlkIl9zLCAqb3V0X2RhdGFiYXNlSWQpOwotICAgICAgICBpZiAo
b3V0X3NxbEVycm9yKQotICAgICAgICAgICAgcmVzdWx0LT5zZXRPYmplY3QoInNxbEVycm9yIl9z
LCBvdXRfc3FsRXJyb3IpOwotICAgICAgICBpZiAob3V0X3NjcmVlbkNvbG9yLmhhc1ZhbHVlKCkp
Ci0gICAgICAgICAgICByZXN1bHQtPnNldFN0cmluZygic2NyZWVuQ29sb3IiX3MsICpvdXRfc2Ny
ZWVuQ29sb3IpOwotICAgICAgICBpZiAob3V0X2FsdGVybmF0ZUNvbG9ycykKLSAgICAgICAgICAg
IHJlc3VsdC0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywgb3V0X2FsdGVybmF0ZUNvbG9y
cyk7Ci0gICAgICAgIGlmIChvdXRfcHJpbnRDb2xvci5oYXNWYWx1ZSgpKQotICAgICAgICAgICAg
cmVzdWx0LT5zZXRTdHJpbmcoInByaW50Q29sb3IiX3MsICpvdXRfcHJpbnRDb2xvcik7CisgICAg
YXV0byByZXN1bHQgPSBtX2FnZW50LT5leGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVz
KCppbl9kYXRhYmFzZUlkLCBpbl9xdWVyeSk7CisgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAgICAg
QVNTRVJUKCFyZXN1bHQuZXJyb3IoKS5pc0VtcHR5KCkpOworICAgICAgICBtX2JhY2tlbmREaXNw
YXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJv
ciwgcmVzdWx0LmVycm9yKCkpOworICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmICghZXJy
b3IubGVuZ3RoKCkpCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShy
ZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2UpOwotICAgIGVsc2UKLSAgICAgICAgbV9i
YWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6
U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKKworICAgIGF1dG8gW291dF9vcHRfY29sdW1u
TmFtZXMsIG91dF9vcHRfbm90ZXMsIG91dF9vcHRfdGltZXN0YW1wLCBvdXRfb3B0X3ZhbHVlcywg
b3V0X29wdF9wYXlsb2FkLCBvdXRfb3B0X2RhdGFiYXNlSWQsIG91dF9vcHRfc3FsRXJyb3IsIG91
dF9vcHRfc2NyZWVuQ29sb3IsIG91dF9vcHRfYWx0ZXJuYXRlQ29sb3JzLCBvdXRfb3B0X3ByaW50
Q29sb3JdID0gV1RGTW92ZShyZXN1bHQudmFsdWUoKSk7CisKKyAgICBhdXRvIHByb3RvY29sX2pz
b25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBpZiAoISFvdXRfb3B0X2Nv
bHVtbk5hbWVzKQorICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0QXJyYXkoImNvbHVt
bk5hbWVzIl9zLCBvdXRfb3B0X2NvbHVtbk5hbWVzLnJlbGVhc2VOb25OdWxsKCkpOworICAgIGlm
ICghIW91dF9vcHRfbm90ZXMpCisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJp
bmcoIm5vdGVzIl9zLCBvdXRfb3B0X25vdGVzKTsKKyAgICBpZiAoISFvdXRfb3B0X3RpbWVzdGFt
cCkKKyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldERvdWJsZSgidGltZXN0YW1wIl9z
LCAqb3V0X29wdF90aW1lc3RhbXApOworICAgIGlmICghIW91dF9vcHRfdmFsdWVzKQorICAgICAg
ICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIG91dF9vcHRfdmFs
dWVzLnJlbGVhc2VOb25OdWxsKCkpOworICAgIGlmICghIW91dF9vcHRfcGF5bG9hZCkKKyAgICAg
ICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCBvdXRfb3B0X3Bh
eWxvYWQucmVsZWFzZU5vbk51bGwoKSk7CisgICAgaWYgKCEhb3V0X29wdF9kYXRhYmFzZUlkKQor
ICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0SW50ZWdlcigiZGF0YWJhc2VJZCJfcywg
Km91dF9vcHRfZGF0YWJhc2VJZCk7CisgICAgaWYgKCEhb3V0X29wdF9zcWxFcnJvcikKKyAgICAg
ICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIG91dF9vcHRf
c3FsRXJyb3IucmVsZWFzZU5vbk51bGwoKSk7CisgICAgaWYgKCEhb3V0X29wdF9zY3JlZW5Db2xv
cikKKyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygic2NyZWVuQ29sb3Ii
X3MsIFByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUoKm91dF9vcHRf
c2NyZWVuQ29sb3IpKTsKKyAgICBpZiAoISFvdXRfb3B0X2FsdGVybmF0ZUNvbG9ycykKKyAgICAg
ICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIG91
dF9vcHRfYWx0ZXJuYXRlQ29sb3JzLnJlbGVhc2VOb25OdWxsKCkpOworICAgIGlmICghIW91dF9v
cHRfcHJpbnRDb2xvcikKKyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygi
cHJpbnRDb2xvciJfcywgb3V0X29wdF9wcmludENvbG9yKTsKKyAgICBtX2JhY2tlbmREaXNwYXRj
aGVyLT5zZW5kUmVzcG9uc2UocHJvdG9jb2xfY2FsbElkLCBXVEZNb3ZlKHByb3RvY29sX2pzb25N
ZXNzYWdlKSwgZmFsc2UpOwogfQogCiBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6
RXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNDYWxsYmFjazo6RXhlY3V0ZVNRTEFz
eW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNDYWxsYmFjayhSZWY8QmFja2VuZERpc3BhdGNoZXI+JiYg
YmFja2VuZERpc3BhdGNoZXIsIGludCBpZCkgOiBCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tC
YXNlKFdURk1vdmUoYmFja2VuZERpc3BhdGNoZXIpLCBpZCkgeyB9CiAKLXZvaWQgRGF0YWJhc2VC
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFs
dWVzQ2FsbGJhY2s6OnNlbmRTdWNjZXNzKFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+JiYg
Y29sdW1uTmFtZXMsIE9wdGlvbmFsPFN0cmluZz4mIG5vdGVzLCBPcHRpb25hbDxkb3VibGU+JiB0
aW1lc3RhbXAsIE9wdGlvbmFsPEpTT046Ok9iamVjdD4mIHZhbHVlcywgT3B0aW9uYWw8SlNPTjo6
VmFsdWU+JiBwYXlsb2FkLCBPcHRpb25hbDxpbnQ+JiBkYXRhYmFzZUlkLCBSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiYmIHNxbEVycm9yLCBPcHRpb25hbDxJbnNw
ZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4gc2NyZWVuQ29sb3IsIFJl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiYmIGFsdGVybmF0
ZUNvbG9ycywgT3B0aW9uYWw8RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50
Q29sb3I+IHByaW50Q29sb3IpCit2b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVy
OjpFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc0NhbGxiYWNrOjpzZW5kU3VjY2Vz
cyhSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiYmIG9wdF9jb2x1bW5OYW1lcywgY29uc3Qg
U3RyaW5nJiBvcHRfbm90ZXMsIE9wdGlvbmFsPGRvdWJsZT4mJiBvcHRfdGltZXN0YW1wLCBSZWZQ
dHI8SlNPTjo6T2JqZWN0PiYmIG9wdF92YWx1ZXMsIFJlZlB0cjxKU09OOjpWYWx1ZT4mJiBvcHRf
cGF5bG9hZCwgT3B0aW9uYWw8aW50PiYmIG9wdF9kYXRhYmFzZUlkLCBSZWZQdHI8UHJvdG9jb2w6
OkRhdGFiYXNlOjpFcnJvcj4mJiBvcHRfc3FsRXJyb3IsIE9wdGlvbmFsPFByb3RvY29sOjpEYXRh
YmFzZTo6UHJpbWFyeUNvbG9ycz4mJiBvcHRfc2NyZWVuQ29sb3IsIFJlZlB0cjxQcm90b2NvbDo6
RGF0YWJhc2U6OkNvbG9yTGlzdD4mJiBvcHRfYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcm
IG9wdF9wcmludENvbG9yKQogewotICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0g
SlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBpZiAoY29sdW1uTmFtZXMpCi0gICAgICAgIGpz
b25NZXNzYWdlLT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIGNvbHVtbk5hbWVzKTsKLSAgICBp
ZiAobm90ZXMuaGFzVmFsdWUoKSkKLSAgICAgICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibm90
ZXMiX3MsICpub3Rlcyk7Ci0gICAgaWYgKHRpbWVzdGFtcC5oYXNWYWx1ZSgpKQotICAgICAgICBq
c29uTWVzc2FnZS0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsICp0aW1lc3RhbXApOwotICAgIGlm
ICh2YWx1ZXMuaGFzVmFsdWUoKSkKLSAgICAgICAganNvbk1lc3NhZ2UtPnNldE9iamVjdCgidmFs
dWVzIl9zLCAqdmFsdWVzKTsKLSAgICBpZiAocGF5bG9hZC5oYXNWYWx1ZSgpKQotICAgICAgICBq
c29uTWVzc2FnZS0+c2V0VmFsdWUoInBheWxvYWQiX3MsICpwYXlsb2FkKTsKLSAgICBpZiAoZGF0
YWJhc2VJZC5oYXNWYWx1ZSgpKQotICAgICAgICBqc29uTWVzc2FnZS0+c2V0SW50ZWdlcigiZGF0
YWJhc2VJZCJfcywgKmRhdGFiYXNlSWQpOwotICAgIGlmIChzcWxFcnJvcikKLSAgICAgICAganNv
bk1lc3NhZ2UtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIHNxbEVycm9yKTsKLSAgICBpZiAoc2Ny
ZWVuQ29sb3IuaGFzVmFsdWUoKSkKLSAgICAgICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygic2Ny
ZWVuQ29sb3IiX3MsICpzY3JlZW5Db2xvcik7Ci0gICAgaWYgKGFsdGVybmF0ZUNvbG9ycykKLSAg
ICAgICAganNvbk1lc3NhZ2UtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIGFsdGVybmF0
ZUNvbG9ycyk7Ci0gICAgaWYgKHByaW50Q29sb3IuaGFzVmFsdWUoKSkKLSAgICAgICAganNvbk1l
c3NhZ2UtPnNldFN0cmluZygicHJpbnRDb2xvciJfcywgKnByaW50Q29sb3IpOwotICAgIENhbGxi
YWNrQmFzZTo6c2VuZFN1Y2Nlc3MoV1RGTW92ZShqc29uTWVzc2FnZSkpOworICAgIGF1dG8gcHJv
dG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGlmICghIW9w
dF9jb2x1bW5OYW1lcykKKyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldEFycmF5KCJj
b2x1bW5OYW1lcyJfcywgb3B0X2NvbHVtbk5hbWVzLnJlbGVhc2VOb25OdWxsKCkpOworICAgIGlm
ICghIW9wdF9ub3RlcykKKyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygi
bm90ZXMiX3MsIG9wdF9ub3Rlcyk7CisgICAgaWYgKCEhb3B0X3RpbWVzdGFtcCkKKyAgICAgICAg
cHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCAqb3B0X3RpbWVz
dGFtcCk7CisgICAgaWYgKCEhb3B0X3ZhbHVlcykKKyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3Nh
Z2UtPnNldE9iamVjdCgidmFsdWVzIl9zLCBvcHRfdmFsdWVzLnJlbGVhc2VOb25OdWxsKCkpOwor
ICAgIGlmICghIW9wdF9wYXlsb2FkKQorICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0
VmFsdWUoInBheWxvYWQiX3MsIG9wdF9wYXlsb2FkLnJlbGVhc2VOb25OdWxsKCkpOworICAgIGlm
ICghIW9wdF9kYXRhYmFzZUlkKQorICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0SW50
ZWdlcigiZGF0YWJhc2VJZCJfcywgKm9wdF9kYXRhYmFzZUlkKTsKKyAgICBpZiAoISFvcHRfc3Fs
RXJyb3IpCisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRPYmplY3QoInNxbEVycm9y
Il9zLCBvcHRfc3FsRXJyb3IucmVsZWFzZU5vbk51bGwoKSk7CisgICAgaWYgKCEhb3B0X3NjcmVl
bkNvbG9yKQorICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJzY3JlZW5D
b2xvciJfcywgUHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZSgqb3B0
X3NjcmVlbkNvbG9yKSk7CisgICAgaWYgKCEhb3B0X2FsdGVybmF0ZUNvbG9ycykKKyAgICAgICAg
cHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIG9wdF9h
bHRlcm5hdGVDb2xvcnMucmVsZWFzZU5vbk51bGwoKSk7CisgICAgaWYgKCEhb3B0X3ByaW50Q29s
b3IpCisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoInByaW50Q29sb3Ii
X3MsIG9wdF9wcmludENvbG9yKTsKKyAgICBDYWxsYmFja0Jhc2U6OnNlbmRTdWNjZXNzKFdURk1v
dmUocHJvdG9jb2xfanNvbk1lc3NhZ2UpKTsKIH0KIAotdm9pZCBEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVyOjpleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIHJlcXVlc3RJ
ZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKQordm9pZCBEYXRhYmFzZUJhY2tl
bmREaXNwYXRjaGVyOjpleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIHBy
b3RvY29sX2NhbGxJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9wYXJhbWV0ZXJz
KQogewotICAgIGludCBpbl9kYXRhYmFzZUlkID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0SW50
ZWdlcihwYXJhbWV0ZXJzLmdldCgpLCAiZGF0YWJhc2VJZCJfcywgbnVsbHB0cik7Ci0gICAgU3Ry
aW5nIGluX3F1ZXJ5ID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3RyaW5nKHBhcmFtZXRlcnMu
Z2V0KCksICJxdWVyeSJfcywgbnVsbHB0cik7CisgICAgYXV0byBpbl9kYXRhYmFzZUlkID0gbV9i
YWNrZW5kRGlzcGF0Y2hlci0+Z2V0SW50ZWdlcihwcm90b2NvbF9wYXJhbWV0ZXJzLmdldCgpLCAi
ZGF0YWJhc2VJZCJfcywgdHJ1ZSk7CisgICAgYXV0byBpbl9xdWVyeSA9IG1fYmFja2VuZERpc3Bh
dGNoZXItPmdldFN0cmluZyhwcm90b2NvbF9wYXJhbWV0ZXJzLmdldCgpLCAicXVlcnkiX3MsIHRy
dWUpOwogICAgIGlmIChtX2JhY2tlbmREaXNwYXRjaGVyLT5oYXNQcm90b2NvbEVycm9ycygpKSB7
CiAgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2Vu
ZERpc3BhdGNoZXI6OkludmFsaWRQYXJhbXMsICJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJ0Rh
dGFiYXNlLmV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzJyBjYW4ndCBiZSBwcm9j
ZXNzZWQiX3MpOwogICAgICAgICByZXR1cm47CkBAIC0zNzgsMjAgKzM2MiwxOCBAQCB2b2lkIERh
dGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFs
dWVzKGxvbmcgcmVxdWVzdAogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFU
Q0hFUlMpCiAgICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgewotICAgICAgICBtX2FsdGVy
bmF0ZURpc3BhdGNoZXItPmV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKHJlcXVl
c3RJZCwgaW5fZGF0YWJhc2VJZCwgaW5fcXVlcnkpOworICAgICAgICBtX2FsdGVybmF0ZURpc3Bh
dGNoZXItPmV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKHByb3RvY29sX2NhbGxJ
ZCwgKmluX2RhdGFiYXNlSWQsIGluX3F1ZXJ5KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNl
bmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIAotICAgIFJl
ZjxEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5jT3B0aW9u
YWxSZXR1cm5WYWx1ZXNDYWxsYmFjaz4gY2FsbGJhY2sgPSBhZG9wdFJlZigqbmV3IERhdGFiYXNl
QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZh
bHVlc0NhbGxiYWNrKG1fYmFja2VuZERpc3BhdGNoZXIuY29weVJlZigpLCByZXF1ZXN0SWQpKTsK
LSAgICBtX2FnZW50LT5leGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhpbl9kYXRh
YmFzZUlkLCBpbl9xdWVyeSwgY2FsbGJhY2suY29weVJlZigpKTsKLQorICAgIG1fYWdlbnQtPmV4
ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKCppbl9kYXRhYmFzZUlkLCBpbl9xdWVy
eSwgYWRvcHRSZWYoKm5ldyBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0
ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNDYWxsYmFjayhtX2JhY2tlbmREaXNwYXRjaGVy
LmNvcHlSZWYoKSwgcHJvdG9jb2xfY2FsbElkKSkpOwogfQogCi12b2lkIERhdGFiYXNlQmFja2Vu
ZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxTeW5jKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6
T2JqZWN0PiYmIHBhcmFtZXRlcnMpCit2b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4
ZWN1dGVTUUxTeW5jKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYm
IHByb3RvY29sX3BhcmFtZXRlcnMpCiB7Ci0gICAgaW50IGluX2RhdGFiYXNlSWQgPSBtX2JhY2tl
bmREaXNwYXRjaGVyLT5nZXRJbnRlZ2VyKHBhcmFtZXRlcnMuZ2V0KCksICJkYXRhYmFzZUlkIl9z
LCBudWxscHRyKTsKLSAgICBTdHJpbmcgaW5fcXVlcnkgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5n
ZXRTdHJpbmcocGFyYW1ldGVycy5nZXQoKSwgInF1ZXJ5Il9zLCBudWxscHRyKTsKKyAgICBhdXRv
IGluX2RhdGFiYXNlSWQgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRJbnRlZ2VyKHByb3RvY29s
X3BhcmFtZXRlcnMuZ2V0KCksICJkYXRhYmFzZUlkIl9zLCB0cnVlKTsKKyAgICBhdXRvIGluX3F1
ZXJ5ID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3RyaW5nKHByb3RvY29sX3BhcmFtZXRlcnMu
Z2V0KCksICJxdWVyeSJfcywgdHJ1ZSk7CiAgICAgaWYgKG1fYmFja2VuZERpc3BhdGNoZXItPmhh
c1Byb3RvY29sRXJyb3JzKCkpIHsKICAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0
UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFtcywgIlNvbWUgYXJn
dW1lbnRzIG9mIG1ldGhvZCAnRGF0YWJhc2UuZXhlY3V0ZVNRTFN5bmMnIGNhbid0IGJlIHByb2Nl
c3NlZCJfcyk7CiAgICAgICAgIHJldHVybjsKQEAgLTM5OSw2NSArMzgxLDU2IEBAIHZvaWQgRGF0
YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTFN5bmMobG9uZyByZXF1ZXN0SWQsIFJl
ZlB0cjxKU09OOjpPYmplCiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRD
SEVSUykKICAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJu
YXRlRGlzcGF0Y2hlci0+ZXhlY3V0ZVNRTFN5bmMocmVxdWVzdElkLCBpbl9kYXRhYmFzZUlkLCBp
bl9xdWVyeSk7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+ZXhlY3V0ZVNRTFN5bmMo
cHJvdG9jb2xfY2FsbElkLCAqaW5fZGF0YWJhc2VJZCwgaW5fcXVlcnkpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENI
RVJTKQogCi0gICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4gcmVz
dWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBSZWZQdHI8SlNPTjo6QXJyYXlPZjxT
dHJpbmc+PiBvdXRfY29sdW1uTmFtZXM7Ci0gICAgU3RyaW5nIG91dF9ub3RlczsKLSAgICBkb3Vi
bGUgb3V0X3RpbWVzdGFtcDsKLSAgICBKU09OOjpPYmplY3Qgb3V0X3ZhbHVlczsKLSAgICBKU09O
OjpWYWx1ZSBvdXRfcGF5bG9hZDsKLSAgICBpbnQgb3V0X2RhdGFiYXNlSWQ7Ci0gICAgUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4gb3V0X3NxbEVycm9yOwotICAg
IFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiBvdXRfYWx0
ZXJuYXRlQ29sb3JzOwotICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5
Q29sb3JzIG91dF9zY3JlZW5Db2xvcjsKLSAgICBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFu
ZGxlcjo6UHJpbnRDb2xvciBvdXRfcHJpbnRDb2xvcjsKLSAgICBtX2FnZW50LT5leGVjdXRlU1FM
U3luYyhlcnJvciwgaW5fZGF0YWJhc2VJZCwgaW5fcXVlcnksIG91dF9jb2x1bW5OYW1lcywgJm91
dF9ub3RlcywgJm91dF90aW1lc3RhbXAsIG91dF92YWx1ZXMsICZvdXRfcGF5bG9hZCwgJm91dF9k
YXRhYmFzZUlkLCBvdXRfc3FsRXJyb3IsIG91dF9hbHRlcm5hdGVDb2xvcnMsICZvdXRfc2NyZWVu
Q29sb3IsICZvdXRfcHJpbnRDb2xvcik7Ci0KLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKSB7Ci0g
ICAgICAgIHJlc3VsdC0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCBvdXRfY29sdW1uTmFtZXMp
OwotICAgICAgICByZXN1bHQtPnNldFN0cmluZygibm90ZXMiX3MsIG91dF9ub3Rlcyk7Ci0gICAg
ICAgIHJlc3VsdC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsIG91dF90aW1lc3RhbXApOwotICAg
ICAgICByZXN1bHQtPnNldE9iamVjdCgidmFsdWVzIl9zLCBvdXRfdmFsdWVzKTsKLSAgICAgICAg
cmVzdWx0LT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgb3V0X3BheWxvYWQpOwotICAgICAgICByZXN1
bHQtPnNldEludGVnZXIoImRhdGFiYXNlSWQiX3MsIG91dF9kYXRhYmFzZUlkKTsKLSAgICAgICAg
cmVzdWx0LT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBvdXRfc3FsRXJyb3IpOwotICAgICAgICBy
ZXN1bHQtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIG91dF9hbHRlcm5hdGVDb2xvcnMp
OwotICAgICAgICByZXN1bHQtPnNldFN0cmluZygic2NyZWVuQ29sb3IiX3MsIEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShvdXRfc2NyZWVuQ29s
b3IpKTsKLSAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoInByaW50Q29sb3IiX3MsIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShvdXRfcHJpbnRD
b2xvcikpOworICAgIGF1dG8gcmVzdWx0ID0gbV9hZ2VudC0+ZXhlY3V0ZVNRTFN5bmMoKmluX2Rh
dGFiYXNlSWQsIGluX3F1ZXJ5KTsKKyAgICBpZiAoIXJlc3VsdCkgeworICAgICAgICBBU1NFUlQo
IXJlc3VsdC5lcnJvcigpLmlzRW1wdHkoKSk7CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXIt
PnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCByZXN1
bHQuZXJyb3IoKSk7CisgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKCFlcnJvci5sZW5n
dGgoKSkKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJ
ZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tlbmRE
aXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJF
cnJvciwgV1RGTW92ZShlcnJvcikpOworCisgICAgYXV0byBbb3V0X2NvbHVtbk5hbWVzLCBvdXRf
bm90ZXMsIG91dF90aW1lc3RhbXAsIG91dF92YWx1ZXMsIG91dF9wYXlsb2FkLCBvdXRfZGF0YWJh
c2VJZCwgb3V0X3NxbEVycm9yLCBvdXRfYWx0ZXJuYXRlQ29sb3JzLCBvdXRfc2NyZWVuQ29sb3Is
IG91dF9wcmludENvbG9yXSA9IFdURk1vdmUocmVzdWx0LnZhbHVlKCkpOworCisgICAgYXV0byBw
cm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgcHJvdG9j
b2xfanNvbk1lc3NhZ2UtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgV1RGTW92ZShvdXRfY29s
dW1uTmFtZXMpKTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJub3RlcyJf
cywgb3V0X25vdGVzKTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0RG91YmxlKCJ0aW1l
c3RhbXAiX3MsIG91dF90aW1lc3RhbXApOworICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRP
YmplY3QoInZhbHVlcyJfcywgV1RGTW92ZShvdXRfdmFsdWVzKSk7CisgICAgcHJvdG9jb2xfanNv
bk1lc3NhZ2UtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCBXVEZNb3ZlKG91dF9wYXlsb2FkKSk7Cisg
ICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldEludGVnZXIoImRhdGFiYXNlSWQiX3MsIG91dF9k
YXRhYmFzZUlkKTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJzcWxFcnJv
ciJfcywgV1RGTW92ZShvdXRfc3FsRXJyb3IpKTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+
c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywgV1RGTW92ZShvdXRfYWx0ZXJuYXRlQ29sb3Jz
KSk7CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygic2NyZWVuQ29sb3IiX3Ms
IFByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUob3V0X3NjcmVlbkNv
bG9yKSk7CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygicHJpbnRDb2xvciJf
cywgb3V0X3ByaW50Q29sb3IpOworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25z
ZShwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJvdG9jb2xfanNvbk1lc3NhZ2UpLCBmYWxzZSk7
CiB9CiAKIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmND
YWxsYmFjazo6RXhlY3V0ZVNRTEFzeW5jQ2FsbGJhY2soUmVmPEJhY2tlbmREaXNwYXRjaGVyPiYm
IGJhY2tlbmREaXNwYXRjaGVyLCBpbnQgaWQpIDogQmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNr
QmFzZShXVEZNb3ZlKGJhY2tlbmREaXNwYXRjaGVyKSwgaWQpIHsgfQogCi12b2lkIERhdGFiYXNl
QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNDYWxsYmFjazo6c2VuZFN1
Y2Nlc3MoUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4mJiBjb2x1bW5OYW1lcywgY29uc3Qg
U3RyaW5nJiBub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgSlNPTjo6T2JqZWN0IHZhbHVlcywgSlNP
Tjo6VmFsdWUgcGF5bG9hZCwgaW50IGRhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpEYXRhYmFzZTo6RXJyb3I+JiYgc3FsRXJyb3IsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRh
dGFiYXNlOjpQcmltYXJ5Q29sb3JzIHNjcmVlbkNvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4mJiBhbHRlcm5hdGVDb2xvcnMsIERhdGFiYXNlQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQcmludENvbG9yIHByaW50Q29sb3IpCit2b2lkIERhdGFi
YXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNDYWxsYmFjazo6c2Vu
ZFN1Y2Nlc3MoUmVmPEpTT046OkFycmF5T2Y8U3RyaW5nPj4mJiBjb2x1bW5OYW1lcywgY29uc3Qg
U3RyaW5nJiBub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgUmVmPEpTT046Ok9iamVjdD4mJiB2YWx1
ZXMsIFJlZjxKU09OOjpWYWx1ZT4mJiBwYXlsb2FkLCBpbnQgZGF0YWJhc2VJZCwgUmVmPFByb3Rv
Y29sOjpEYXRhYmFzZTo6RXJyb3I+JiYgc3FsRXJyb3IsIFByb3RvY29sOjpEYXRhYmFzZTo6UHJp
bWFyeUNvbG9ycyBzY3JlZW5Db2xvciwgUmVmPFByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0
PiYmIGFsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nJiBwcmludENvbG9yKQogewotICAgIFJl
ZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAg
ICBqc29uTWVzc2FnZS0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCBjb2x1bW5OYW1lcyk7Ci0g
ICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibm90ZXMiX3MsIG5vdGVzKTsKLSAgICBqc29uTWVz
c2FnZS0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsIHRpbWVzdGFtcCk7Ci0gICAganNvbk1lc3Nh
Z2UtPnNldE9iamVjdCgidmFsdWVzIl9zLCB2YWx1ZXMpOwotICAgIGpzb25NZXNzYWdlLT5zZXRW
YWx1ZSgicGF5bG9hZCJfcywgcGF5bG9hZCk7Ci0gICAganNvbk1lc3NhZ2UtPnNldEludGVnZXIo
ImRhdGFiYXNlSWQiX3MsIGRhdGFiYXNlSWQpOwotICAgIGpzb25NZXNzYWdlLT5zZXRPYmplY3Qo
InNxbEVycm9yIl9zLCBzcWxFcnJvcik7Ci0gICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygic2Ny
ZWVuQ29sb3IiX3MsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29u
c3RhbnRWYWx1ZShzY3JlZW5Db2xvcikpOwotICAgIGpzb25NZXNzYWdlLT5zZXRBcnJheSgiYWx0
ZXJuYXRlQ29sb3JzIl9zLCBhbHRlcm5hdGVDb2xvcnMpOwotICAgIGpzb25NZXNzYWdlLT5zZXRT
dHJpbmcoInByaW50Q29sb3IiX3MsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpn
ZXRFbnVtQ29uc3RhbnRWYWx1ZShwcmludENvbG9yKSk7Ci0gICAgQ2FsbGJhY2tCYXNlOjpzZW5k
U3VjY2VzcyhXVEZNb3ZlKGpzb25NZXNzYWdlKSk7CisgICAgYXV0byBwcm90b2NvbF9qc29uTWVz
c2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2Ut
PnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgV1RGTW92ZShjb2x1bW5OYW1lcykpOworICAgIHBy
b3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm5vdGVzIl9zLCBub3Rlcyk7CisgICAgcHJv
dG9jb2xfanNvbk1lc3NhZ2UtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCB0aW1lc3RhbXApOwor
ICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRPYmplY3QoInZhbHVlcyJfcywgV1RGTW92ZSh2
YWx1ZXMpKTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0VmFsdWUoInBheWxvYWQiX3Ms
IFdURk1vdmUocGF5bG9hZCkpOworICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRJbnRlZ2Vy
KCJkYXRhYmFzZUlkIl9zLCBkYXRhYmFzZUlkKTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+
c2V0T2JqZWN0KCJzcWxFcnJvciJfcywgV1RGTW92ZShzcWxFcnJvcikpOworICAgIHByb3RvY29s
X2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCBQcm90b2NvbDo6VGVzdEhl
bHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKHNjcmVlbkNvbG9yKSk7CisgICAgcHJvdG9jb2xf
anNvbk1lc3NhZ2UtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIFdURk1vdmUoYWx0ZXJu
YXRlQ29sb3JzKSk7CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygicHJpbnRD
b2xvciJfcywgcHJpbnRDb2xvcik7CisgICAgQ2FsbGJhY2tCYXNlOjpzZW5kU3VjY2VzcyhXVEZN
b3ZlKHByb3RvY29sX2pzb25NZXNzYWdlKSk7CiB9CiAKLXZvaWQgRGF0YWJhc2VCYWNrZW5kRGlz
cGF0Y2hlcjo6ZXhlY3V0ZVNRTEFzeW5jKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiYmIHBhcmFtZXRlcnMpCit2b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1
dGVTUUxBc3luYyhsb25nIHByb3RvY29sX2NhbGxJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBw
cm90b2NvbF9wYXJhbWV0ZXJzKQogewotICAgIGludCBpbl9kYXRhYmFzZUlkID0gbV9iYWNrZW5k
RGlzcGF0Y2hlci0+Z2V0SW50ZWdlcihwYXJhbWV0ZXJzLmdldCgpLCAiZGF0YWJhc2VJZCJfcywg
bnVsbHB0cik7Ci0gICAgU3RyaW5nIGluX3F1ZXJ5ID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0
U3RyaW5nKHBhcmFtZXRlcnMuZ2V0KCksICJxdWVyeSJfcywgbnVsbHB0cik7CisgICAgYXV0byBp
bl9kYXRhYmFzZUlkID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0SW50ZWdlcihwcm90b2NvbF9w
YXJhbWV0ZXJzLmdldCgpLCAiZGF0YWJhc2VJZCJfcywgdHJ1ZSk7CisgICAgYXV0byBpbl9xdWVy
eSA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFN0cmluZyhwcm90b2NvbF9wYXJhbWV0ZXJzLmdl
dCgpLCAicXVlcnkiX3MsIHRydWUpOwogICAgIGlmIChtX2JhY2tlbmREaXNwYXRjaGVyLT5oYXNQ
cm90b2NvbEVycm9ycygpKSB7CiAgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFBy
b3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OkludmFsaWRQYXJhbXMsICJTb21lIGFyZ3Vt
ZW50cyBvZiBtZXRob2QgJ0RhdGFiYXNlLmV4ZWN1dGVTUUxBc3luYycgY2FuJ3QgYmUgcHJvY2Vz
c2VkIl9zKTsKICAgICAgICAgcmV0dXJuOwpAQCAtNDY1LDE0ICs0MzgsMTIgQEAgdm9pZCBEYXRh
YmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FMQXN5bmMobG9uZyByZXF1ZXN0SWQsIFJl
ZlB0cjxKU09OOjpPYmoKIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENI
RVJTKQogICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5h
dGVEaXNwYXRjaGVyLT5leGVjdXRlU1FMQXN5bmMocmVxdWVzdElkLCBpbl9kYXRhYmFzZUlkLCBp
bl9xdWVyeSk7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+ZXhlY3V0ZVNRTEFzeW5j
KHByb3RvY29sX2NhbGxJZCwgKmluX2RhdGFiYXNlSWQsIGluX3F1ZXJ5KTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KICNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRD
SEVSUykKIAotICAgIFJlZjxEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0
ZVNRTEFzeW5jQ2FsbGJhY2s+IGNhbGxiYWNrID0gYWRvcHRSZWYoKm5ldyBEYXRhYmFzZUJhY2tl
bmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5jQ2FsbGJhY2sobV9iYWNrZW5kRGlz
cGF0Y2hlci5jb3B5UmVmKCksIHJlcXVlc3RJZCkpOwotICAgIG1fYWdlbnQtPmV4ZWN1dGVTUUxB
c3luYyhpbl9kYXRhYmFzZUlkLCBpbl9xdWVyeSwgY2FsbGJhY2suY29weVJlZigpKTsKLQorICAg
IG1fYWdlbnQtPmV4ZWN1dGVTUUxBc3luYygqaW5fZGF0YWJhc2VJZCwgaW5fcXVlcnksIGFkb3B0
UmVmKCpuZXcgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkV4ZWN1dGVTUUxBc3lu
Y0NhbGxiYWNrKG1fYmFja2VuZERpc3BhdGNoZXIuY29weVJlZigpLCBwcm90b2NvbF9jYWxsSWQp
KSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgpAQCAtNTEzLDYgKzQ4NCw3IEBAIHZv
aWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTEFzeW5jKGxvbmcgcmVxdWVz
dElkLCBSZWZQdHI8SlNPTjo6T2JqCiAKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgi
CiAjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4K
ICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7
CkBAIC01NTYsNyArNTI4LDYgQEAgY2xhc3MgRnJvbnRlbmRSb3V0ZXI7CiAjaW5jbHVkZSAiVGVz
dEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiBu
YW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtNTk3LDcgKzU2OCw5IEBAIG5hbWVzcGFjZSBJbnNw
ZWN0b3IgewogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JQcm90b2NvbFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRl
IDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtNjE5
LDcgKzU5Miw3IEBAIGVudW0gY2xhc3MgUHJpbWFyeUNvbG9yczsKIG5hbWVzcGFjZSBEYXRhYmFz
ZSB7CiAvKiBVbmlxdWUgaWRlbnRpZmllciBvZiBEYXRhYmFzZSBvYmplY3QuICovCiB1c2luZyBE
YXRhYmFzZUlkID0gaW50OwotdXNpbmcgQ29sb3JMaXN0ID0gSlNPTjo6QXJyYXlPZjxJbnNwZWN0
b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz47Cit1c2luZyBDb2xvckxpc3Qg
PSBKU09OOjpBcnJheU9mPFByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz47CiB9IC8v
IERhdGFiYXNlCiAvLyBFbmQgb2YgdHlwZWRlZnMuCiAKQEAgLTY0Myw3ICs2MTYsNyBAQCBlbnVt
IGNsYXNzIFByaW1hcnlDb2xvcnMgewogfTsgLy8gZW51bSBjbGFzcyBQcmltYXJ5Q29sb3JzCiAK
IC8qIERhdGFiYXNlIGVycm9yLiAqLwotY2xhc3MgRXJyb3IgOiBwdWJsaWMgSlNPTjo6T2JqZWN0
QmFzZSB7CitjbGFzcyBFcnJvciBmaW5hbCA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKIHB1
YmxpYzoKICAgICBlbnVtIHsKICAgICAgICAgTm9GaWVsZHNTZXQgPSAwLApAQCAtNjcwLDE3ICs2
NDMsMTcgQEAgcHVibGljOgogICAgICAgICBmcmllbmQgY2xhc3MgRXJyb3I7CiAgICAgcHVibGlj
OgogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBNZXNzYWdlU2V0PiYgc2V0TWVzc2FnZShjb25z
dCBTdHJpbmcmIHZhbHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTWVzc2FnZVNldD4mIHNl
dE1lc3NhZ2UoY29uc3QgU3RyaW5nJiBpbl9tZXNzYWdlKQogICAgICAgICB7CiAgICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTWVzc2FnZVNldCksIHByb3BlcnR5X21lc3NhZ2Vf
YWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibWVzc2FnZSJf
cywgdmFsdWUpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibWVzc2FnZSJfcywg
aW5fbWVzc2FnZSk7CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE1lc3NhZ2VTZXQ+KCk7
CiAgICAgICAgIH0KIAotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQ29kZVNldD4mIHNldENvZGUo
aW50IHZhbHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQ29kZVNldD4mIHNldENvZGUoaW50
IGluX2NvZGUpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUg
JiBDb2RlU2V0KSwgcHJvcGVydHlfY29kZV9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jl
c3VsdC0+c2V0SW50ZWdlcigiY29kZSJfcywgdmFsdWUpOworICAgICAgICAgICAgbV9yZXN1bHQt
PnNldEludGVnZXIoImNvZGUiX3MsIGluX2NvZGUpOwogICAgICAgICAgICAgcmV0dXJuIGNhc3RT
dGF0ZTxDb2RlU2V0PigpOwogICAgICAgICB9CiAKQEAgLTcxOSw3ICs2OTIsNyBAQCBPcHRpb25h
bDxQcm90b2NvbEVudW1UeXBlPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmcoY29uc3QgU3RyaW5n
Jik7CiAKIC8vIEVudW1zIGluIHRoZSAnRGF0YWJhc2UnIERvbWFpbgogdGVtcGxhdGU8PgotT3B0
aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+IHBhcnNl
RW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFy
eUNvbG9ycz4oY29uc3QgU3RyaW5nJik7CitPcHRpb25hbDxQcm90b2NvbDo6RGF0YWJhc2U6OlBy
aW1hcnlDb2xvcnM+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxQcm90b2NvbDo6RGF0YWJhc2U6
OlByaW1hcnlDb2xvcnM+KGNvbnN0IFN0cmluZyYpOwogCiB9IC8vIG5hbWVzcGFjZSBUZXN0SGVs
cGVycwogCkBAIC03NzEsOCArNzQ0LDcgQEAgc3RydWN0IERlZmF1bHRIYXNoPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPiA6IEludEhhc2g8SW5zcGUKICNpbmNs
dWRlICJjb25maWcuaCIKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAKLSNpbmNs
dWRlIDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5j
bHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKQEAgLTc5
NywxNiArNzY5LDE2IEBAIFN0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSkgewog
Ly8gRW51bXMgaW4gdGhlICdEYXRhYmFzZScgRG9tYWluCiAKIHRlbXBsYXRlPD4KLU9wdGlvbmFs
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPiBwYXJzZUVudW1W
YWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xv
cnM+KGNvbnN0IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcpCitPcHRpb25hbDxQcm90b2NvbDo6RGF0
YWJhc2U6OlByaW1hcnlDb2xvcnM+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxQcm90b2NvbDo6
RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+KGNvbnN0IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcpCiB7
CiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBjb25zdGFudFZhbHVlc1tdID0gewotICAgICAgICAo
c2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzOjpSZWQs
Ci0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlD
b2xvcnM6OkdyZWVuLAotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFi
YXNlOjpQcmltYXJ5Q29sb3JzOjpCbHVlLAorICAgICAgICAoc2l6ZV90KVByb3RvY29sOjpEYXRh
YmFzZTo6UHJpbWFyeUNvbG9yczo6UmVkLAorICAgICAgICAoc2l6ZV90KVByb3RvY29sOjpEYXRh
YmFzZTo6UHJpbWFyeUNvbG9yczo6R3JlZW4sCisgICAgICAgIChzaXplX3QpUHJvdG9jb2w6OkRh
dGFiYXNlOjpQcmltYXJ5Q29sb3JzOjpCbHVlLAogICAgIH07CiAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCAzOyArK2kpCiAgICAgICAgIGlmIChwcm90b2NvbFN0cmluZyA9PSBlbnVtX2NvbnN0
YW50X3ZhbHVlc1tjb25zdGFudFZhbHVlc1tpXV0pCi0gICAgICAgICAgICByZXR1cm4gKEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzKWNvbnN0YW50VmFsdWVzW2ld
OworICAgICAgICAgICAgcmV0dXJuIChQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMp
Y29uc3RhbnRWYWx1ZXNbaV07CiAKICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQpAQCAtODYz
LDEwICs4MzUsMTAgQEAgY2xhc3MgT2JqQ0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNo
ZXIgZmluYWwgOiBwdWJsaWMgQWx0ZXJuYXRlRGF0YWJhc2VCYWMKICAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlz
cGF0Y2hlcihpZDxUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkhhbmRsZXI+IGhhbmRsZXIpIHsg
bV9kZWxlZ2F0ZSA9IGhhbmRsZXI7IH0KLSAgICB2b2lkIGV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxS
ZXR1cm5WYWx1ZXMobG9uZyByZXF1ZXN0SWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJp
bmcmIGluX3F1ZXJ5KSBmaW5hbDsKLSAgICB2b2lkIGV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0
dXJuVmFsdWVzKGxvbmcgcmVxdWVzdElkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5n
JiBpbl9xdWVyeSkgZmluYWw7Ci0gICAgdm9pZCBleGVjdXRlU1FMU3luYyhsb25nIHJlcXVlc3RJ
ZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnkpIGZpbmFsOwotICAg
IHZvaWQgZXhlY3V0ZVNRTEFzeW5jKGxvbmcgcmVxdWVzdElkLCBpbnQgaW5fZGF0YWJhc2VJZCwg
Y29uc3QgU3RyaW5nJiBpbl9xdWVyeSkgZmluYWw7CisgICAgdm9pZCBleGVjdXRlU1FMU3luY09w
dGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBpbnQgZGF0YWJhc2VJZCwg
Y29uc3QgU3RyaW5nJiBxdWVyeSkgZmluYWw7CisgICAgdm9pZCBleGVjdXRlU1FMQXN5bmNPcHRp
b25hbFJldHVyblZhbHVlcyhsb25nIHByb3RvY29sX2NhbGxJZCwgaW50IGRhdGFiYXNlSWQsIGNv
bnN0IFN0cmluZyYgcXVlcnkpIGZpbmFsOworICAgIHZvaWQgZXhlY3V0ZVNRTFN5bmMobG9uZyBw
cm90b2NvbF9jYWxsSWQsIGludCBkYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIHF1ZXJ5KSBmaW5h
bDsKKyAgICB2b2lkIGV4ZWN1dGVTUUxBc3luYyhsb25nIHByb3RvY29sX2NhbGxJZCwgaW50IGRh
dGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgcXVlcnkpIGZpbmFsOwogcHJpdmF0ZToKICAgICBSZXRh
aW5QdHI8aWQ8VGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5IYW5kbGVyPj4gbV9kZWxlZ2F0ZTsK
IH07CkBAIC05MTQsMTgzICs4ODYsMTc5IEBAIHByaXZhdGU6CiAKIG5hbWVzcGFjZSBJbnNwZWN0
b3IgewogCi12b2lkIE9iakNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVj
dXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgcmVxdWVzdElkLCBpbnQgaW5fZGF0
YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSkKK3ZvaWQgT2JqQ0luc3BlY3RvckRhdGFi
YXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMo
bG9uZyBwcm90b2NvbF9jYWxsSWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGlu
X3F1ZXJ5KQogewogICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxl
Y3RvcihleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzV2l0aEVycm9yQ2FsbGJhY2s6
c3VjY2Vzc0NhbGxiYWNrOmRhdGFiYXNlSWQ6cXVlcnk6KV0pIHsKLSAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRj
aGVyOjpNZXRob2ROb3RGb3VuZCwgIidEYXRhYmFzZS5leGVjdXRlU1FMU3luY09wdGlvbmFsUmV0
dXJuVmFsdWVzJyB3YXMgbm90IGZvdW5kIl9zKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIo
KS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxsSWQsIEJhY2tlbmREaXNwYXRjaGVy
OjpNZXRob2ROb3RGb3VuZCwgIidEYXRhYmFzZS5leGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJu
VmFsdWVzJyB3YXMgbm90IGZvdW5kIl9zKTsKICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+
c2VuZFBlbmRpbmdFcnJvcnMoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlkIGVy
cm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgewotICAgICAgICBiYWNrZW5kRGlzcGF0
Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6
OlNlcnZlckVycm9yLCBlcnJvcik7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9y
dFByb3RvY29sRXJyb3IocHJvdG9jb2xfY2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVy
RXJyb3IsIGVycm9yKTsKICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdF
cnJvcnMoKTsKICAgICB9OwogCi0gICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXihOU0FycmF5Lyo8
TlNTdHJpbmc+Ki8gKipjb2x1bW5OYW1lcywgTlNTdHJpbmcgKipub3RlcywgZG91YmxlICp0aW1l
c3RhbXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2Jq
ZWN0ICoqcGF5bG9hZCwgaW50ICpkYXRhYmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9y
ICoqc3FsRXJyb3IsIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyAqc2NyZWVuQ29s
b3IsIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKmFsdGVybmF0ZUNvbG9ycywgVGVzdFByb3RvY29s
RGF0YWJhc2VFeGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvciAqcHJp
bnRDb2xvcikgewotICAgICAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHRPYmplY3QgPSBKU09O
OjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJ
T05BTF9QQVJBTUVURVIoY29sdW1uTmFtZXMsIEAiY29sdW1uTmFtZXMiKTsKLSAgICAgICAgVEhS
T1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKG5vdGVzLCBAIm5vdGVzIik7
Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUih2YWx1
ZXMsIEAidmFsdWVzIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFM
X1BBUkFNRVRFUihwYXlsb2FkLCBAInBheWxvYWQiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9O
X0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKHNxbEVycm9yLCBAInNxbEVycm9yIik7Ci0gICAg
ICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihhbHRlcm5hdGVD
b2xvcnMsIEAiYWx0ZXJuYXRlQ29sb3JzIik7Ci0gICAgICAgIGlmIChjb2x1bW5OYW1lcykKLSAg
ICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCB0b0pTT05T
dHJpbmdBcnJheSgqY29sdW1uTmFtZXMpKTsKLSAgICAgICAgaWYgKG5vdGVzKQotICAgICAgICAg
ICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCAqbm90ZXMpOwotICAgICAgICBp
ZiAodGltZXN0YW1wKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXREb3VibGUoInRpbWVz
dGFtcCJfcywgKnRpbWVzdGFtcCk7Ci0gICAgICAgIGlmICh2YWx1ZXMpCi0gICAgICAgICAgICBy
ZXN1bHRPYmplY3QtPnNldE9iamVjdCgidmFsdWVzIl9zLCBbKnZhbHVlcyB0b0pTT05PYmplY3Rd
KTsKLSAgICAgICAgaWYgKHBheWxvYWQpCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldFZh
bHVlKCJwYXlsb2FkIl9zLCBbKnBheWxvYWQgdG9KU09OT2JqZWN0XSk7Ci0gICAgICAgIGlmIChk
YXRhYmFzZUlkKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRJbnRlZ2VyKCJkYXRhYmFz
ZUlkIl9zLCAqZGF0YWJhc2VJZCk7Ci0gICAgICAgIGlmIChzcWxFcnJvcikKLSAgICAgICAgICAg
IHJlc3VsdE9iamVjdC0+c2V0T2JqZWN0KCJzcWxFcnJvciJfcywgWypzcWxFcnJvciB0b0pTT05P
YmplY3RdKTsKLSAgICAgICAgaWYgKHNjcmVlbkNvbG9yKQotICAgICAgICAgICAgcmVzdWx0T2Jq
ZWN0LT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCB0b1Byb3RvY29sU3RyaW5nKCpzY3JlZW5D
b2xvcikpOwotICAgICAgICBpZiAoYWx0ZXJuYXRlQ29sb3JzKQotICAgICAgICAgICAgcmVzdWx0
T2JqZWN0LT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCB0b0pTT05TdHJpbmdBcnJheSgq
YWx0ZXJuYXRlQ29sb3JzKSk7Ci0gICAgICAgIGlmIChwcmludENvbG9yKQotICAgICAgICAgICAg
cmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoInByaW50Q29sb3IiX3MsIHRvUHJvdG9jb2xTdHJpbmco
KnByaW50Q29sb3IpKTsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNl
KHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHRPYmplY3QpLCBmYWxzZSk7CisgICAgaWQgc3VjY2Vz
c0NhbGxiYWNrID0gXihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKipvdXRfb3B0X2NvbHVtbk5hbWVz
LCBOU1N0cmluZyAqKm91dF9vcHRfbm90ZXMsIGRvdWJsZSAqb3V0X29wdF90aW1lc3RhbXAsIFJX
SVByb3RvY29sSlNPTk9iamVjdCAqKm91dF9vcHRfdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmpl
Y3QgKipvdXRfb3B0X3BheWxvYWQsIGludCAqb3V0X29wdF9kYXRhYmFzZUlkLCBUZXN0UHJvdG9j
b2xEYXRhYmFzZUVycm9yICoqb3V0X29wdF9zcWxFcnJvciwgVGVzdFByb3RvY29sRGF0YWJhc2VQ
cmltYXJ5Q29sb3JzICpvdXRfb3B0X3NjcmVlbkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8g
KipvdXRfb3B0X2FsdGVybmF0ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0YWJhc2UoYW5vbnltb3Vz
KSAqb3V0X29wdF9wcmludENvbG9yKSB7CisgICAgICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3Nh
Z2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9S
X0JBRF9PUFRJT05BTF9QQVJBTUVURVIob3V0X29wdF9jb2x1bW5OYW1lcywgQCJjb2x1bW5OYW1l
cyIpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIo
b3V0X29wdF9ub3RlcywgQCJub3RlcyIpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JB
RF9PUFRJT05BTF9QQVJBTUVURVIob3V0X29wdF92YWx1ZXMsIEAidmFsdWVzIik7CisgICAgICAg
IFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihvdXRfb3B0X3BheWxv
YWQsIEAicGF5bG9hZCIpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05B
TF9QQVJBTUVURVIob3V0X29wdF9zcWxFcnJvciwgQCJzcWxFcnJvciIpOworICAgICAgICBUSFJP
V19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIob3V0X29wdF9hbHRlcm5hdGVD
b2xvcnMsIEAiYWx0ZXJuYXRlQ29sb3JzIik7CisgICAgICAgIGlmICghIW91dF9vcHRfY29sdW1u
TmFtZXMpCisgICAgICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0QXJyYXkoImNvbHVt
bk5hbWVzIl9zLCB0b0pTT05TdHJpbmdBcnJheSgqb3V0X29wdF9jb2x1bW5OYW1lcykpOworICAg
ICAgICBpZiAoISFvdXRfb3B0X25vdGVzKQorICAgICAgICAgICAgcHJvdG9jb2xfanNvbk1lc3Nh
Z2UtPnNldFN0cmluZygibm90ZXMiX3MsICpvdXRfb3B0X25vdGVzKTsKKyAgICAgICAgaWYgKCEh
b3V0X29wdF90aW1lc3RhbXApCisgICAgICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0
RG91YmxlKCJ0aW1lc3RhbXAiX3MsICpvdXRfb3B0X3RpbWVzdGFtcCk7CisgICAgICAgIGlmICgh
IW91dF9vcHRfdmFsdWVzKQorICAgICAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldE9i
amVjdCgidmFsdWVzIl9zLCBbKm91dF9vcHRfdmFsdWVzIHRvSlNPTk9iamVjdF0pOworICAgICAg
ICBpZiAoISFvdXRfb3B0X3BheWxvYWQpCisgICAgICAgICAgICBwcm90b2NvbF9qc29uTWVzc2Fn
ZS0+c2V0VmFsdWUoInBheWxvYWQiX3MsIFsqb3V0X29wdF9wYXlsb2FkIHRvSlNPTk9iamVjdF0p
OworICAgICAgICBpZiAoISFvdXRfb3B0X2RhdGFiYXNlSWQpCisgICAgICAgICAgICBwcm90b2Nv
bF9qc29uTWVzc2FnZS0+c2V0SW50ZWdlcigiZGF0YWJhc2VJZCJfcywgKm91dF9vcHRfZGF0YWJh
c2VJZCk7CisgICAgICAgIGlmICghIW91dF9vcHRfc3FsRXJyb3IpCisgICAgICAgICAgICBwcm90
b2NvbF9qc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJzcWxFcnJvciJfcywgWypvdXRfb3B0X3NxbEVy
cm9yIHRvSlNPTk9iamVjdF0pOworICAgICAgICBpZiAoISFvdXRfb3B0X3NjcmVlbkNvbG9yKQor
ICAgICAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygic2NyZWVuQ29sb3Ii
X3MsIHRvUHJvdG9jb2xTdHJpbmcoKm91dF9vcHRfc2NyZWVuQ29sb3IpKTsKKyAgICAgICAgaWYg
KCEhb3V0X29wdF9hbHRlcm5hdGVDb2xvcnMpCisgICAgICAgICAgICBwcm90b2NvbF9qc29uTWVz
c2FnZS0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywgdG9KU09OU3RyaW5nQXJyYXkoKm91
dF9vcHRfYWx0ZXJuYXRlQ29sb3JzKSk7CisgICAgICAgIGlmICghIW91dF9vcHRfcHJpbnRDb2xv
cikKKyAgICAgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoInByaW50Q29s
b3IiX3MsIHRvUHJvdG9jb2xTdHJpbmcoKm91dF9vcHRfcHJpbnRDb2xvcikpOworICAgICAgICBi
YWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocHJvdG9jb2xfY2FsbElkLCBXVEZNb3Zl
KHByb3RvY29sX2pzb25NZXNzYWdlKSwgZmFsc2UpOwogICAgIH07CiAKICAgICBpbnQgb19pbl9k
YXRhYmFzZUlkID0gaW5fZGF0YWJhc2VJZDsKICAgICBOU1N0cmluZyAqb19pbl9xdWVyeSA9IGlu
X3F1ZXJ5OwotCiAgICAgW21fZGVsZWdhdGUgZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZh
bHVlc1dpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nl
c3NDYWxsYmFjayBkYXRhYmFzZUlkOm9faW5fZGF0YWJhc2VJZCBxdWVyeTpvX2luX3F1ZXJ5XTsK
IH0KIAotdm9pZCBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0
ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyByZXF1ZXN0SWQsIGludCBpbl9kYXRh
YmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5KQordm9pZCBPYmpDSW5zcGVjdG9yRGF0YWJh
c2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMo
bG9uZyBwcm90b2NvbF9jYWxsSWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGlu
X3F1ZXJ5KQogewogICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxl
Y3RvcihleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1dpdGhFcnJvckNhbGxiYWNr
OnN1Y2Nlc3NDYWxsYmFjazpkYXRhYmFzZUlkOnF1ZXJ5OildKSB7Ci0gICAgICAgIGJhY2tlbmRE
aXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0
Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRGF0YWJhc2UuZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxS
ZXR1cm5WYWx1ZXMnIHdhcyBub3QgZm91bmQiX3MpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hl
cigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHByb3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNo
ZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RhdGFiYXNlLmV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0
dXJuVmFsdWVzJyB3YXMgbm90IGZvdW5kIl9zKTsKICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIo
KS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlk
IGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgewotICAgICAgICBiYWNrZW5kRGlz
cGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNo
ZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJl
cG9ydFByb3RvY29sRXJyb3IocHJvdG9jb2xfY2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2Vy
dmVyRXJyb3IsIGVycm9yKTsKICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRp
bmdFcnJvcnMoKTsKICAgICB9OwogCi0gICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXihOU0FycmF5
Lyo8TlNTdHJpbmc+Ki8gKipjb2x1bW5OYW1lcywgTlNTdHJpbmcgKipub3RlcywgZG91YmxlICp0
aW1lc3RhbXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqKnZhbHVlcywgUldJUHJvdG9jb2xKU09O
T2JqZWN0ICoqcGF5bG9hZCwgaW50ICpkYXRhYmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVy
cm9yICoqc3FsRXJyb3IsIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyAqc2NyZWVu
Q29sb3IsIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKmFsdGVybmF0ZUNvbG9ycywgVGVzdFByb3Rv
Y29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3Ig
KnByaW50Q29sb3IpIHsKLSAgICAgICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0T2JqZWN0ID0g
SlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURf
T1BUSU9OQUxfUEFSQU1FVEVSKGNvbHVtbk5hbWVzLCBAImNvbHVtbk5hbWVzIik7Ci0gICAgICAg
IFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihub3RlcywgQCJub3Rl
cyIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIo
dmFsdWVzLCBAInZhbHVlcyIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJ
T05BTF9QQVJBTUVURVIocGF5bG9hZCwgQCJwYXlsb2FkIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQ
VElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihzcWxFcnJvciwgQCJzcWxFcnJvciIpOwot
ICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIoYWx0ZXJu
YXRlQ29sb3JzLCBAImFsdGVybmF0ZUNvbG9ycyIpOwotICAgICAgICBpZiAoY29sdW1uTmFtZXMp
Ci0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgdG9K
U09OU3RyaW5nQXJyYXkoKmNvbHVtbk5hbWVzKSk7Ci0gICAgICAgIGlmIChub3RlcykKLSAgICAg
ICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKCJub3RlcyJfcywgKm5vdGVzKTsKLSAgICAg
ICAgaWYgKHRpbWVzdGFtcCkKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0RG91YmxlKCJ0
aW1lc3RhbXAiX3MsICp0aW1lc3RhbXApOwotICAgICAgICBpZiAodmFsdWVzKQotICAgICAgICAg
ICAgcmVzdWx0T2JqZWN0LT5zZXRPYmplY3QoInZhbHVlcyJfcywgWyp2YWx1ZXMgdG9KU09OT2Jq
ZWN0XSk7Ci0gICAgICAgIGlmIChwYXlsb2FkKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5z
ZXRWYWx1ZSgicGF5bG9hZCJfcywgWypwYXlsb2FkIHRvSlNPTk9iamVjdF0pOwotICAgICAgICBp
ZiAoZGF0YWJhc2VJZCkKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0SW50ZWdlcigiZGF0
YWJhc2VJZCJfcywgKmRhdGFiYXNlSWQpOwotICAgICAgICBpZiAoc3FsRXJyb3IpCi0gICAgICAg
ICAgICByZXN1bHRPYmplY3QtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIFsqc3FsRXJyb3IgdG9K
U09OT2JqZWN0XSk7Ci0gICAgICAgIGlmIChzY3JlZW5Db2xvcikKLSAgICAgICAgICAgIHJlc3Vs
dE9iamVjdC0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgdG9Qcm90b2NvbFN0cmluZygqc2Ny
ZWVuQ29sb3IpKTsKLSAgICAgICAgaWYgKGFsdGVybmF0ZUNvbG9ycykKLSAgICAgICAgICAgIHJl
c3VsdE9iamVjdC0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywgdG9KU09OU3RyaW5nQXJy
YXkoKmFsdGVybmF0ZUNvbG9ycykpOwotICAgICAgICBpZiAocHJpbnRDb2xvcikKLSAgICAgICAg
ICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCB0b1Byb3RvY29sU3Ry
aW5nKCpwcmludENvbG9yKSk7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNw
b25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0T2JqZWN0KSwgZmFsc2UpOworICAgIGlkIHN1
Y2Nlc3NDYWxsYmFjayA9IF4oTlNBcnJheS8qPE5TU3RyaW5nPiovICoqb3V0X29wdF9jb2x1bW5O
YW1lcywgTlNTdHJpbmcgKipvdXRfb3B0X25vdGVzLCBkb3VibGUgKm91dF9vcHRfdGltZXN0YW1w
LCBSV0lQcm90b2NvbEpTT05PYmplY3QgKipvdXRfb3B0X3ZhbHVlcywgUldJUHJvdG9jb2xKU09O
T2JqZWN0ICoqb3V0X29wdF9wYXlsb2FkLCBpbnQgKm91dF9vcHRfZGF0YWJhc2VJZCwgVGVzdFBy
b3RvY29sRGF0YWJhc2VFcnJvciAqKm91dF9vcHRfc3FsRXJyb3IsIFRlc3RQcm90b2NvbERhdGFi
YXNlUHJpbWFyeUNvbG9ycyAqb3V0X29wdF9zY3JlZW5Db2xvciwgTlNBcnJheS8qPE5TU3RyaW5n
PiovICoqb3V0X29wdF9hbHRlcm5hdGVDb2xvcnMsIFRlc3RQcm90b2NvbERhdGFiYXNlKGFub255
bW91cykgKm91dF9vcHRfcHJpbnRDb2xvcikgeworICAgICAgICBhdXRvIHByb3RvY29sX2pzb25N
ZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9O
X0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKG91dF9vcHRfY29sdW1uTmFtZXMsIEAiY29sdW1u
TmFtZXMiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1F
VEVSKG91dF9vcHRfbm90ZXMsIEAibm90ZXMiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZP
Ul9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKG91dF9vcHRfdmFsdWVzLCBAInZhbHVlcyIpOworICAg
ICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIob3V0X29wdF9w
YXlsb2FkLCBAInBheWxvYWQiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BU
SU9OQUxfUEFSQU1FVEVSKG91dF9vcHRfc3FsRXJyb3IsIEAic3FsRXJyb3IiKTsKKyAgICAgICAg
VEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKG91dF9vcHRfYWx0ZXJu
YXRlQ29sb3JzLCBAImFsdGVybmF0ZUNvbG9ycyIpOworICAgICAgICBpZiAoISFvdXRfb3B0X2Nv
bHVtbk5hbWVzKQorICAgICAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldEFycmF5KCJj
b2x1bW5OYW1lcyJfcywgdG9KU09OU3RyaW5nQXJyYXkoKm91dF9vcHRfY29sdW1uTmFtZXMpKTsK
KyAgICAgICAgaWYgKCEhb3V0X29wdF9ub3RlcykKKyAgICAgICAgICAgIHByb3RvY29sX2pzb25N
ZXNzYWdlLT5zZXRTdHJpbmcoIm5vdGVzIl9zLCAqb3V0X29wdF9ub3Rlcyk7CisgICAgICAgIGlm
ICghIW91dF9vcHRfdGltZXN0YW1wKQorICAgICAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2Ut
PnNldERvdWJsZSgidGltZXN0YW1wIl9zLCAqb3V0X29wdF90aW1lc3RhbXApOworICAgICAgICBp
ZiAoISFvdXRfb3B0X3ZhbHVlcykKKyAgICAgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5z
ZXRPYmplY3QoInZhbHVlcyJfcywgWypvdXRfb3B0X3ZhbHVlcyB0b0pTT05PYmplY3RdKTsKKyAg
ICAgICAgaWYgKCEhb3V0X29wdF9wYXlsb2FkKQorICAgICAgICAgICAgcHJvdG9jb2xfanNvbk1l
c3NhZ2UtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCBbKm91dF9vcHRfcGF5bG9hZCB0b0pTT05PYmpl
Y3RdKTsKKyAgICAgICAgaWYgKCEhb3V0X29wdF9kYXRhYmFzZUlkKQorICAgICAgICAgICAgcHJv
dG9jb2xfanNvbk1lc3NhZ2UtPnNldEludGVnZXIoImRhdGFiYXNlSWQiX3MsICpvdXRfb3B0X2Rh
dGFiYXNlSWQpOworICAgICAgICBpZiAoISFvdXRfb3B0X3NxbEVycm9yKQorICAgICAgICAgICAg
cHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIFsqb3V0X29wdF9z
cWxFcnJvciB0b0pTT05PYmplY3RdKTsKKyAgICAgICAgaWYgKCEhb3V0X29wdF9zY3JlZW5Db2xv
cikKKyAgICAgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoInNjcmVlbkNv
bG9yIl9zLCB0b1Byb3RvY29sU3RyaW5nKCpvdXRfb3B0X3NjcmVlbkNvbG9yKSk7CisgICAgICAg
IGlmICghIW91dF9vcHRfYWx0ZXJuYXRlQ29sb3JzKQorICAgICAgICAgICAgcHJvdG9jb2xfanNv
bk1lc3NhZ2UtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIHRvSlNPTlN0cmluZ0FycmF5
KCpvdXRfb3B0X2FsdGVybmF0ZUNvbG9ycykpOworICAgICAgICBpZiAoISFvdXRfb3B0X3ByaW50
Q29sb3IpCisgICAgICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJwcmlu
dENvbG9yIl9zLCB0b1Byb3RvY29sU3RyaW5nKCpvdXRfb3B0X3ByaW50Q29sb3IpKTsKKyAgICAg
ICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHByb3RvY29sX2NhbGxJZCwgV1RG
TW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSksIGZhbHNlKTsKICAgICB9OwogCiAgICAgaW50IG9f
aW5fZGF0YWJhc2VJZCA9IGluX2RhdGFiYXNlSWQ7CiAgICAgTlNTdHJpbmcgKm9faW5fcXVlcnkg
PSBpbl9xdWVyeTsKLQogICAgIFttX2RlbGVnYXRlIGV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0
dXJuVmFsdWVzV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6
c3VjY2Vzc0NhbGxiYWNrIGRhdGFiYXNlSWQ6b19pbl9kYXRhYmFzZUlkIHF1ZXJ5Om9faW5fcXVl
cnldOwogfQogCi12b2lkIE9iakNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpl
eGVjdXRlU1FMU3luYyhsb25nIHJlcXVlc3RJZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0
cmluZyYgaW5fcXVlcnkpCit2b2lkIE9iakNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRj
aGVyOjpleGVjdXRlU1FMU3luYyhsb25nIHByb3RvY29sX2NhbGxJZCwgaW50IGluX2RhdGFiYXNl
SWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnkpCiB7CiAgICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNw
b25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGV4ZWN1dGVTUUxTeW5jV2l0aEVycm9yQ2FsbGJhY2s6
c3VjY2Vzc0NhbGxiYWNrOmRhdGFiYXNlSWQ6cXVlcnk6KV0pIHsKLSAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRj
aGVyOjpNZXRob2ROb3RGb3VuZCwgIidEYXRhYmFzZS5leGVjdXRlU1FMU3luYycgd2FzIG5vdCBm
b3VuZCJfcyk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJy
b3IocHJvdG9jb2xfY2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICIn
RGF0YWJhc2UuZXhlY3V0ZVNRTFN5bmMnIHdhcyBub3QgZm91bmQiX3MpOwogICAgICAgICBiYWNr
ZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCiAgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7Ci0gICAg
ICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBC
YWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxsSWQsIEJhY2tlbmRE
aXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwogICAgICAgICBiYWNrZW5kRGlzcGF0Y2hl
cigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgIH07CiAKLSAgICBpZCBzdWNjZXNzQ2FsbGJh
Y2sgPSBeKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqY29sdW1uTmFtZXMsIE5TU3RyaW5nICpub3Rl
cywgZG91YmxlIHRpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0ICp2YWx1ZXMsIFJXSVBy
b3RvY29sSlNPTk9iamVjdCAqcGF5bG9hZCwgaW50IGRhdGFiYXNlSWQsIFRlc3RQcm90b2NvbERh
dGFiYXNlRXJyb3IgKnNxbEVycm9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmFsdGVybmF0ZUNv
bG9ycywgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzIHNjcmVlbkNvbG9yLCBUZXN0
UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jUHJpbnRDb2xvciBwcmludENvbG9yKSB7Ci0g
ICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdE9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3Jl
YXRlKCk7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKGNv
bHVtbk5hbWVzLCBAImNvbHVtbk5hbWVzIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1Jf
UkVRVUlSRURfUEFSQU1FVEVSKG5vdGVzLCBAIm5vdGVzIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQ
VElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKHZhbHVlcywgQCJ2YWx1ZXMiKTsKLSAgICAgICAg
VEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIocGF5bG9hZCwgQCJwYXlsb2Fk
Iik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKHNxbEVy
cm9yLCBAInNxbEVycm9yIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURf
UEFSQU1FVEVSKGFsdGVybmF0ZUNvbG9ycywgQCJhbHRlcm5hdGVDb2xvcnMiKTsKLSAgICAgICAg
cmVzdWx0T2JqZWN0LT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIHRvSlNPTlN0cmluZ0FycmF5
KGNvbHVtbk5hbWVzKSk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKCJub3RlcyJf
cywgbm90ZXMpOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldERvdWJsZSgidGltZXN0YW1wIl9z
LCB0aW1lc3RhbXApOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldE9iamVjdCgidmFsdWVzIl9z
LCBbdmFsdWVzIHRvSlNPTk9iamVjdF0pOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldFZhbHVl
KCJwYXlsb2FkIl9zLCBbcGF5bG9hZCB0b0pTT05PYmplY3RdKTsKLSAgICAgICAgcmVzdWx0T2Jq
ZWN0LT5zZXRJbnRlZ2VyKCJkYXRhYmFzZUlkIl9zLCBkYXRhYmFzZUlkKTsKLSAgICAgICAgcmVz
dWx0T2JqZWN0LT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBbc3FsRXJyb3IgdG9KU09OT2JqZWN0
XSk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywg
dG9KU09OU3RyaW5nQXJyYXkoYWx0ZXJuYXRlQ29sb3JzKSk7Ci0gICAgICAgIHJlc3VsdE9iamVj
dC0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgdG9Qcm90b2NvbFN0cmluZyhzY3JlZW5Db2xv
cikpOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZygicHJpbnRDb2xvciJfcywgdG9Q
cm90b2NvbFN0cmluZyhwcmludENvbG9yKSk7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCkt
PnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0T2JqZWN0KSwgZmFsc2UpOwor
ICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF4oTlNBcnJheS8qPE5TU3RyaW5nPiovICpvdXRfY29s
dW1uTmFtZXMsIE5TU3RyaW5nICpvdXRfbm90ZXMsIGRvdWJsZSBvdXRfdGltZXN0YW1wLCBSV0lQ
cm90b2NvbEpTT05PYmplY3QgKm91dF92YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqb3V0
X3BheWxvYWQsIGludCBvdXRfZGF0YWJhc2VJZCwgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAq
b3V0X3NxbEVycm9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKm91dF9hbHRlcm5hdGVDb2xvcnMs
IFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyBvdXRfc2NyZWVuQ29sb3IsIFRlc3RQ
cm90b2NvbERhdGFiYXNlKGFub255bW91cykgb3V0X3ByaW50Q29sb3IpIHsKKyAgICAgICAgYXV0
byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAg
IFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKG91dF9jb2x1bW5OYW1lcywg
QCJjb2x1bW5OYW1lcyIpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BB
UkFNRVRFUihvdXRfbm90ZXMsIEAibm90ZXMiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZP
Ul9SRVFVSVJFRF9QQVJBTUVURVIob3V0X3ZhbHVlcywgQCJ2YWx1ZXMiKTsKKyAgICAgICAgVEhS
T1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIob3V0X3BheWxvYWQsIEAicGF5bG9h
ZCIpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihvdXRf
c3FsRXJyb3IsIEAic3FsRXJyb3IiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFV
SVJFRF9QQVJBTUVURVIob3V0X2FsdGVybmF0ZUNvbG9ycywgQCJhbHRlcm5hdGVDb2xvcnMiKTsK
KyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywg
dG9KU09OU3RyaW5nQXJyYXkob3V0X2NvbHVtbk5hbWVzKSk7CisgICAgICAgIHByb3RvY29sX2pz
b25NZXNzYWdlLT5zZXRTdHJpbmcoIm5vdGVzIl9zLCBvdXRfbm90ZXMpOworICAgICAgICBwcm90
b2NvbF9qc29uTWVzc2FnZS0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsIG91dF90aW1lc3RhbXAp
OworICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIFtv
dXRfdmFsdWVzIHRvSlNPTk9iamVjdF0pOworICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+
c2V0VmFsdWUoInBheWxvYWQiX3MsIFtvdXRfcGF5bG9hZCB0b0pTT05PYmplY3RdKTsKKyAgICAg
ICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldEludGVnZXIoImRhdGFiYXNlSWQiX3MsIG91dF9k
YXRhYmFzZUlkKTsKKyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldE9iamVjdCgic3Fs
RXJyb3IiX3MsIFtvdXRfc3FsRXJyb3IgdG9KU09OT2JqZWN0XSk7CisgICAgICAgIHByb3RvY29s
X2pzb25NZXNzYWdlLT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCB0b0pTT05TdHJpbmdB
cnJheShvdXRfYWx0ZXJuYXRlQ29sb3JzKSk7CisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdl
LT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCB0b1Byb3RvY29sU3RyaW5nKG91dF9zY3JlZW5D
b2xvcikpOworICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJwcmludENv
bG9yIl9zLCB0b1Byb3RvY29sU3RyaW5nKG91dF9wcmludENvbG9yKSk7CisgICAgICAgIGJhY2tl
bmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJv
dG9jb2xfanNvbk1lc3NhZ2UpLCBmYWxzZSk7CiAgICAgfTsKIAogICAgIGludCBvX2luX2RhdGFi
YXNlSWQgPSBpbl9kYXRhYmFzZUlkOwogICAgIE5TU3RyaW5nICpvX2luX3F1ZXJ5ID0gaW5fcXVl
cnk7Ci0KICAgICBbbV9kZWxlZ2F0ZSBleGVjdXRlU1FMU3luY1dpdGhFcnJvckNhbGxiYWNrOmVy
cm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjayBkYXRhYmFzZUlkOm9f
aW5fZGF0YWJhc2VJZCBxdWVyeTpvX2luX3F1ZXJ5XTsKIH0KIAotdm9pZCBPYmpDSW5zcGVjdG9y
RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTEFzeW5jKGxvbmcgcmVxdWVzdElk
LCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSkKK3ZvaWQgT2JqQ0lu
c3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxBc3luYyhsb25nIHBy
b3RvY29sX2NhbGxJZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnkp
CiB7CiAgICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGV4
ZWN1dGVTUUxBc3luY1dpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazpkYXRhYmFzZUlk
OnF1ZXJ5OildKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29s
RXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRGF0
YWJhc2UuZXhlY3V0ZVNRTEFzeW5jJyB3YXMgbm90IGZvdW5kIl9zKTsKKyAgICAgICAgYmFja2Vu
ZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxsSWQsIEJhY2tl
bmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEYXRhYmFzZS5leGVjdXRlU1FMQXN5bmMn
IHdhcyBub3QgZm91bmQiX3MpOwogICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVu
ZGluZ0Vycm9ycygpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWQgZXJyb3JDYWxs
YmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCkt
PnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVy
RXJyb3IsIGVycm9yKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9j
b2xFcnJvcihwcm90b2NvbF9jYWxsSWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwg
ZXJyb3IpOwogICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygp
OwogICAgIH07CiAKLSAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeKE5TQXJyYXkvKjxOU1N0cmlu
Zz4qLyAqY29sdW1uTmFtZXMsIE5TU3RyaW5nICpub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgUldJ
UHJvdG9jb2xKU09OT2JqZWN0ICp2YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqcGF5bG9h
ZCwgaW50IGRhdGFiYXNlSWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKnNxbEVycm9yLCBU
ZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgc2NyZWVuQ29sb3IsIE5TQXJyYXkvKjxO
U1N0cmluZz4qLyAqYWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVT
UUxBc3luY1ByaW50Q29sb3IgcHJpbnRDb2xvcikgewotICAgICAgICBSZWY8SlNPTjo6T2JqZWN0
PiByZXN1bHRPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgICAgICBUSFJPV19F
WENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihjb2x1bW5OYW1lcywgQCJjb2x1bW5OYW1l
cyIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihub3Rl
cywgQCJub3RlcyIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFN
RVRFUih2YWx1ZXMsIEAidmFsdWVzIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVR
VUlSRURfUEFSQU1FVEVSKHBheWxvYWQsIEAicGF5bG9hZCIpOwotICAgICAgICBUSFJPV19FWENF
UFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihzcWxFcnJvciwgQCJzcWxFcnJvciIpOwotICAg
ICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihhbHRlcm5hdGVDb2xv
cnMsIEAiYWx0ZXJuYXRlQ29sb3JzIik7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0QXJyYXko
ImNvbHVtbk5hbWVzIl9zLCB0b0pTT05TdHJpbmdBcnJheShjb2x1bW5OYW1lcykpOwotICAgICAg
ICByZXN1bHRPYmplY3QtPnNldFN0cmluZygibm90ZXMiX3MsIG5vdGVzKTsKLSAgICAgICAgcmVz
dWx0T2JqZWN0LT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywgdGltZXN0YW1wKTsKLSAgICAgICAg
cmVzdWx0T2JqZWN0LT5zZXRPYmplY3QoInZhbHVlcyJfcywgW3ZhbHVlcyB0b0pTT05PYmplY3Rd
KTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgW3BheWxvYWQg
dG9KU09OT2JqZWN0XSk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0SW50ZWdlcigiZGF0YWJh
c2VJZCJfcywgZGF0YWJhc2VJZCk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0T2JqZWN0KCJz
cWxFcnJvciJfcywgW3NxbEVycm9yIHRvSlNPTk9iamVjdF0pOwotICAgICAgICByZXN1bHRPYmpl
Y3QtPnNldFN0cmluZygic2NyZWVuQ29sb3IiX3MsIHRvUHJvdG9jb2xTdHJpbmcoc2NyZWVuQ29s
b3IpKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9z
LCB0b0pTT05TdHJpbmdBcnJheShhbHRlcm5hdGVDb2xvcnMpKTsKLSAgICAgICAgcmVzdWx0T2Jq
ZWN0LT5zZXRTdHJpbmcoInByaW50Q29sb3IiX3MsIHRvUHJvdG9jb2xTdHJpbmcocHJpbnRDb2xv
cikpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElk
LCBXVEZNb3ZlKHJlc3VsdE9iamVjdCksIGZhbHNlKTsKKyAgICBpZCBzdWNjZXNzQ2FsbGJhY2sg
PSBeKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqb3V0X2NvbHVtbk5hbWVzLCBOU1N0cmluZyAqb3V0
X25vdGVzLCBkb3VibGUgb3V0X3RpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpvdXRf
dmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKm91dF9wYXlsb2FkLCBpbnQgb3V0X2RhdGFi
YXNlSWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKm91dF9zcWxFcnJvciwgVGVzdFByb3Rv
Y29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzIG91dF9zY3JlZW5Db2xvciwgTlNBcnJheS8qPE5TU3Ry
aW5nPiovICpvdXRfYWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZShhbm9ueW1v
dXMpIG91dF9wcmludENvbG9yKSB7CisgICAgICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2Ug
PSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JF
UVVJUkVEX1BBUkFNRVRFUihvdXRfY29sdW1uTmFtZXMsIEAiY29sdW1uTmFtZXMiKTsKKyAgICAg
ICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIob3V0X25vdGVzLCBAIm5v
dGVzIik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKG91
dF92YWx1ZXMsIEAidmFsdWVzIik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlS
RURfUEFSQU1FVEVSKG91dF9wYXlsb2FkLCBAInBheWxvYWQiKTsKKyAgICAgICAgVEhST1dfRVhD
RVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIob3V0X3NxbEVycm9yLCBAInNxbEVycm9yIik7
CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKG91dF9hbHRl
cm5hdGVDb2xvcnMsIEAiYWx0ZXJuYXRlQ29sb3JzIik7CisgICAgICAgIHByb3RvY29sX2pzb25N
ZXNzYWdlLT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KG91dF9j
b2x1bW5OYW1lcykpOworICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJu
b3RlcyJfcywgb3V0X25vdGVzKTsKKyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldERv
dWJsZSgidGltZXN0YW1wIl9zLCBvdXRfdGltZXN0YW1wKTsKKyAgICAgICAgcHJvdG9jb2xfanNv
bk1lc3NhZ2UtPnNldE9iamVjdCgidmFsdWVzIl9zLCBbb3V0X3ZhbHVlcyB0b0pTT05PYmplY3Rd
KTsKKyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCBb
b3V0X3BheWxvYWQgdG9KU09OT2JqZWN0XSk7CisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdl
LT5zZXRJbnRlZ2VyKCJkYXRhYmFzZUlkIl9zLCBvdXRfZGF0YWJhc2VJZCk7CisgICAgICAgIHBy
b3RvY29sX2pzb25NZXNzYWdlLT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBbb3V0X3NxbEVycm9y
IHRvSlNPTk9iamVjdF0pOworICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5n
KCJzY3JlZW5Db2xvciJfcywgdG9Qcm90b2NvbFN0cmluZyhvdXRfc2NyZWVuQ29sb3IpKTsKKyAg
ICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3Ms
IHRvSlNPTlN0cmluZ0FycmF5KG91dF9hbHRlcm5hdGVDb2xvcnMpKTsKKyAgICAgICAgcHJvdG9j
b2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygicHJpbnRDb2xvciJfcywgdG9Qcm90b2NvbFN0cmlu
ZyhvdXRfcHJpbnRDb2xvcikpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVz
cG9uc2UocHJvdG9jb2xfY2FsbElkLCBXVEZNb3ZlKHByb3RvY29sX2pzb25NZXNzYWdlKSwgZmFs
c2UpOwogICAgIH07CiAKICAgICBpbnQgb19pbl9kYXRhYmFzZUlkID0gaW5fZGF0YWJhc2VJZDsK
ICAgICBOU1N0cmluZyAqb19pbl9xdWVyeSA9IGluX3F1ZXJ5OwotCiAgICAgW21fZGVsZWdhdGUg
ZXhlY3V0ZVNRTEFzeW5jV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2Fs
bGJhY2s6c3VjY2Vzc0NhbGxiYWNrIGRhdGFiYXNlSWQ6b19pbl9kYXRhYmFzZUlkIHF1ZXJ5Om9f
aW5fcXVlcnldOwogfQogCkBAIC0xMzQ2LDEwICsxMzE0LDEwIEBAIF9fYXR0cmlidXRlX18oKHZp
c2liaWxpdHkgKCJkZWZhdWx0IikpKQogCiBAcHJvdG9jb2wgVGVzdFByb3RvY29sRGF0YWJhc2VE
b21haW5IYW5kbGVyIDxOU09iamVjdD4KIEBvcHRpb25hbAotLSAodm9pZClleGVjdXRlU1FMU3lu
Y09wdGlvbmFsUmV0dXJuVmFsdWVzV2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcg
KmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKShOU0FycmF5Lyo8
TlNTdHJpbmc+Ki8gKipjb2x1bW5OYW1lcywgTlNTdHJpbmcgKipub3RlcywgZG91YmxlICp0aW1l
c3RhbXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2Jq
ZWN0ICoqcGF5bG9hZCwgaW50ICpkYXRhYmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9y
ICoqc3FsRXJyb3IsIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyAqc2NyZWVuQ29s
b3IsIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKmFsdGVybmF0ZUNvbG9ycywgVGVzdFByb3RvY29s
RGF0YWJhc2VFeGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvciAqcHJp
bnRDb2xvcikpc3VjY2Vzc0NhbGxiYWNrIGRhdGFiYXNlSWQ6KGludClkYXRhYmFzZUlkIHF1ZXJ5
OihOU1N0cmluZyAqKXF1ZXJ5OwotLSAodm9pZClleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVy
blZhbHVlc1dpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JD
YWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikoTlNBcnJheS8qPE5TU3RyaW5nPiovICoq
Y29sdW1uTmFtZXMsIE5TU3RyaW5nICoqbm90ZXMsIGRvdWJsZSAqdGltZXN0YW1wLCBSV0lQcm90
b2NvbEpTT05PYmplY3QgKip2YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqKnBheWxvYWQs
IGludCAqZGF0YWJhc2VJZCwgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKnNxbEVycm9yLCBU
ZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgKnNjcmVlbkNvbG9yLCBOU0FycmF5Lyo8
TlNTdHJpbmc+Ki8gKiphbHRlcm5hdGVDb2xvcnMsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0
ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENvbG9yICpwcmludENvbG9yKSlzdWNj
ZXNzQ2FsbGJhY2sgZGF0YWJhc2VJZDooaW50KWRhdGFiYXNlSWQgcXVlcnk6KE5TU3RyaW5nICop
cXVlcnk7Ci0tICh2b2lkKWV4ZWN1dGVTUUxTeW5jV2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXiko
TlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKShO
U0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmNvbHVtbk5hbWVzLCBOU1N0cmluZyAqbm90ZXMsIGRvdWJs
ZSB0aW1lc3RhbXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqdmFsdWVzLCBSV0lQcm90b2NvbEpT
T05PYmplY3QgKnBheWxvYWQsIGludCBkYXRhYmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVy
cm9yICpzcWxFcnJvciwgTlNBcnJheS8qPE5TU3RyaW5nPiovICphbHRlcm5hdGVDb2xvcnMsIFRl
c3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyBzY3JlZW5Db2xvciwgVGVzdFByb3RvY29s
RGF0YWJhc2VFeGVjdXRlU1FMU3luY1ByaW50Q29sb3IgcHJpbnRDb2xvcikpc3VjY2Vzc0NhbGxi
YWNrIGRhdGFiYXNlSWQ6KGludClkYXRhYmFzZUlkIHF1ZXJ5OihOU1N0cmluZyAqKXF1ZXJ5Owot
LSAodm9pZClleGVjdXRlU1FMQXN5bmNXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmlu
ZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKE5TQXJyYXkv
KjxOU1N0cmluZz4qLyAqY29sdW1uTmFtZXMsIE5TU3RyaW5nICpub3RlcywgZG91YmxlIHRpbWVz
dGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0ICp2YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVj
dCAqcGF5bG9hZCwgaW50IGRhdGFiYXNlSWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKnNx
bEVycm9yLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgc2NyZWVuQ29sb3IsIE5T
QXJyYXkvKjxOU1N0cmluZz4qLyAqYWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFz
ZUV4ZWN1dGVTUUxBc3luY1ByaW50Q29sb3IgcHJpbnRDb2xvcikpc3VjY2Vzc0NhbGxiYWNrIGRh
dGFiYXNlSWQ6KGludClkYXRhYmFzZUlkIHF1ZXJ5OihOU1N0cmluZyAqKXF1ZXJ5OworLSAodm9p
ZClleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzV2l0aEVycm9yQ2FsbGJhY2s6KHZv
aWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9p
ZCheKShOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKipjb2x1bW5OYW1lcywgTlNTdHJpbmcgKipub3Rl
cywgZG91YmxlICp0aW1lc3RhbXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqKnZhbHVlcywgUldJ
UHJvdG9jb2xKU09OT2JqZWN0ICoqcGF5bG9hZCwgaW50ICpkYXRhYmFzZUlkLCBUZXN0UHJvdG9j
b2xEYXRhYmFzZUVycm9yICoqc3FsRXJyb3IsIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNv
bG9ycyAqc2NyZWVuQ29sb3IsIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKmFsdGVybmF0ZUNvbG9y
cywgVGVzdFByb3RvY29sRGF0YWJhc2UoYW5vbnltb3VzKSAqcHJpbnRDb2xvcikpc3VjY2Vzc0Nh
bGxiYWNrIGRhdGFiYXNlSWQ6KGludClkYXRhYmFzZUlkIHF1ZXJ5OihOU1N0cmluZyAqKXF1ZXJ5
OworLSAodm9pZClleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1dpdGhFcnJvckNh
bGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2Fs
bGJhY2s6KHZvaWQoXikoTlNBcnJheS8qPE5TU3RyaW5nPiovICoqY29sdW1uTmFtZXMsIE5TU3Ry
aW5nICoqbm90ZXMsIGRvdWJsZSAqdGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKip2
YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqKnBheWxvYWQsIGludCAqZGF0YWJhc2VJZCwg
VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKnNxbEVycm9yLCBUZXN0UHJvdG9jb2xEYXRhYmFz
ZVByaW1hcnlDb2xvcnMgKnNjcmVlbkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiphbHRl
cm5hdGVDb2xvcnMsIFRlc3RQcm90b2NvbERhdGFiYXNlKGFub255bW91cykgKnByaW50Q29sb3Ip
KXN1Y2Nlc3NDYWxsYmFjayBkYXRhYmFzZUlkOihpbnQpZGF0YWJhc2VJZCBxdWVyeTooTlNTdHJp
bmcgKilxdWVyeTsKKy0gKHZvaWQpZXhlY3V0ZVNRTFN5bmNXaXRoRXJyb3JDYWxsYmFjazoodm9p
ZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lk
KF4pKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqY29sdW1uTmFtZXMsIE5TU3RyaW5nICpub3Rlcywg
ZG91YmxlIHRpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0ICp2YWx1ZXMsIFJXSVByb3Rv
Y29sSlNPTk9iamVjdCAqcGF5bG9hZCwgaW50IGRhdGFiYXNlSWQsIFRlc3RQcm90b2NvbERhdGFi
YXNlRXJyb3IgKnNxbEVycm9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmFsdGVybmF0ZUNvbG9y
cywgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzIHNjcmVlbkNvbG9yLCBUZXN0UHJv
dG9jb2xEYXRhYmFzZShhbm9ueW1vdXMpIHByaW50Q29sb3IpKXN1Y2Nlc3NDYWxsYmFjayBkYXRh
YmFzZUlkOihpbnQpZGF0YWJhc2VJZCBxdWVyeTooTlNTdHJpbmcgKilxdWVyeTsKKy0gKHZvaWQp
ZXhlY3V0ZVNRTEFzeW5jV2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9y
KSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKShOU0FycmF5Lyo8TlNTdHJp
bmc+Ki8gKmNvbHVtbk5hbWVzLCBOU1N0cmluZyAqbm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIFJX
SVByb3RvY29sSlNPTk9iamVjdCAqdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKnBheWxv
YWQsIGludCBkYXRhYmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICpzcWxFcnJvciwg
VGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzIHNjcmVlbkNvbG9yLCBOU0FycmF5Lyo8
TlNTdHJpbmc+Ki8gKmFsdGVybmF0ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0YWJhc2UoYW5vbnlt
b3VzKSBwcmludENvbG9yKSlzdWNjZXNzQ2FsbGJhY2sgZGF0YWJhc2VJZDooaW50KWRhdGFiYXNl
SWQgcXVlcnk6KE5TU3RyaW5nICopcXVlcnk7CiBAZW5kCiAKIApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2NvbW1hbmRz
LXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uLXJlc3VsdCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9jb21tYW5k
cy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbi1yZXN1bHQKaW5kZXgg
MWYyZjQ1ZDc0YzM5MzkxMTEyMzZhODY3ZDdmZmZkMjQwZTZkOTljNS4uM2U0NDI3NDg5NGMyZWQw
NjRlZThkMTk5ZTFhMGU0YzExNDRhYmZjZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2NvbW1hbmRzLXdpdGgtb3B0aW9u
YWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uLXJlc3VsdAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1v
cHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0CkBAIC03MCw3ICs3MCw3
IEBAIEluc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIkRhdGFiYXNlIiwgbnVsbCk7CiAK
ICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIAotI2luY2x1ZGUg
IlRlc3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgog
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CiAj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KIApAQCAt
ODgsOCArODgsOCBAQCBwcml2YXRlOgogY2xhc3MgQWx0ZXJuYXRlRGF0YWJhc2VCYWNrZW5kRGlz
cGF0Y2hlciA6IHB1YmxpYyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7CiBwdWJsaWM6CiAg
ICAgdmlydHVhbCB+QWx0ZXJuYXRlRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcigpIHsgfQotICAg
IHZpcnR1YWwgdm9pZCBleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgY2FsbElkLCBj
b25zdCBKU09OOjpBcnJheSogaW5fY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyogaW5fbm90ZXMs
IGNvbnN0IGRvdWJsZSogaW5fdGltZXN0YW1wLCBjb25zdCBKU09OOjpPYmplY3QqIGluX3ZhbHVl
cywgY29uc3QgSlNPTjo6VmFsdWUqIGluX3BheWxvYWQsIGNvbnN0IGludCogaW5fZGF0YWJhc2VJ
ZCwgY29uc3QgSlNPTjo6T2JqZWN0KiBpbl9zcWxFcnJvciwgY29uc3QgU3RyaW5nKiBpbl9zY3Jl
ZW5Db2xvciwgY29uc3QgSlNPTjo6QXJyYXkqIGluX2FsdGVybmF0ZUNvbG9ycywgY29uc3QgU3Ry
aW5nKiBpbl9wcmludENvbG9yKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVOb09wdGlv
bmFsUGFyYW1ldGVycyhsb25nIGNhbGxJZCwgY29uc3QgSlNPTjo6QXJyYXkmIGluX2NvbHVtbk5h
bWVzLCBjb25zdCBTdHJpbmcmIGluX25vdGVzLCBkb3VibGUgaW5fdGltZXN0YW1wLCBjb25zdCBK
U09OOjpPYmplY3QmIGluX3ZhbHVlcywgSlNPTjo6VmFsdWUgaW5fcGF5bG9hZCwgaW50IGluX2Rh
dGFiYXNlSWQsIGNvbnN0IEpTT046Ok9iamVjdCYgaW5fc3FsRXJyb3IsIGNvbnN0IFN0cmluZyYg
aW5fc2NyZWVuQ29sb3IsIGNvbnN0IEpTT046OkFycmF5JiBpbl9hbHRlcm5hdGVDb2xvcnMsIGNv
bnN0IFN0cmluZyYgaW5fcHJpbnRDb2xvcikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBleGVjdXRl
QWxsT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBSZWZQdHI8SlNPTjo6
QXJyYXk+JiYgb3B0X2NvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIG9wdF9ub3RlcywgT3B0aW9u
YWw8ZG91YmxlPiYmIG9wdF90aW1lc3RhbXAsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgb3B0X3Zh
bHVlcywgUmVmUHRyPEpTT046OlZhbHVlPiYmIG9wdF9wYXlsb2FkLCBPcHRpb25hbDxpbnQ+JiYg
b3B0X2RhdGFiYXNlSWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgb3B0X3NxbEVycm9yLCBjb25z
dCBTdHJpbmcmIG9wdF9zY3JlZW5Db2xvciwgUmVmUHRyPEpTT046OkFycmF5PiYmIG9wdF9hbHRl
cm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyYgb3B0X3ByaW50Q29sb3IpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcHJvdG9jb2xfY2FsbElk
LCBSZWY8SlNPTjo6QXJyYXk+JiYgY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgbm90ZXMsIGRv
dWJsZSB0aW1lc3RhbXAsIFJlZjxKU09OOjpPYmplY3Q+JiYgdmFsdWVzLCBSZWY8SlNPTjo6VmFs
dWU+JiYgcGF5bG9hZCwgaW50IGRhdGFiYXNlSWQsIFJlZjxKU09OOjpPYmplY3Q+JiYgc3FsRXJy
b3IsIGNvbnN0IFN0cmluZyYgc2NyZWVuQ29sb3IsIFJlZjxKU09OOjpBcnJheT4mJiBhbHRlcm5h
dGVDb2xvcnMsIGNvbnN0IFN0cmluZyYgcHJpbnRDb2xvcikgPSAwOwogfTsKIAogfSAvLyBuYW1l
c3BhY2UgSW5zcGVjdG9yCkBAIC0xMzEsMTEgKzEzMSwxNCBAQCBwdWJsaWM6CiAKICNpbmNsdWRl
ICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx0dXBsZT4KKyNpbmNsdWRlIDx3dGYv
RXhwZWN0ZWQuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKLXR5cGVkZWYgU3RyaW5n
IEVycm9yU3RyaW5nOworCiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRD
SEVSUykKIGNsYXNzIEFsdGVybmF0ZURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI7CkBAIC0xNDMs
MTUgKzE0Niw4IEBAIGNsYXNzIEFsdGVybmF0ZURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI7CiAK
IGNsYXNzIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKIHB1YmxpYzoKLSAgICAv
LyBOYW1lZCBhZnRlciBwYXJhbWV0ZXIgJ3ByaW50Q29sb3InIHdoaWxlIGdlbmVyYXRpbmcgY29t
bWFuZC9ldmVudCBleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzLgotICAgIGVudW0gY2xhc3Mg
UHJpbnRDb2xvciB7Ci0gICAgICAgIEN5YW4gPSAzLAotICAgICAgICBNYWdlbnRhID0gNCwKLSAg
ICAgICAgWWVsbG93ID0gNSwKLSAgICAgICAgQmxhY2sgPSA2LAotICAgIH07IC8vIGVudW0gY2xh
c3MgUHJpbnRDb2xvcgotICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0
ZXJzKEVycm9yU3RyaW5nJiwgY29uc3QgSlNPTjo6QXJyYXkqIG9wdF9pbl9jb2x1bW5OYW1lcywg
Y29uc3QgU3RyaW5nKiBvcHRfaW5fbm90ZXMsIGNvbnN0IGRvdWJsZSogb3B0X2luX3RpbWVzdGFt
cCwgY29uc3QgSlNPTjo6T2JqZWN0KiBvcHRfaW5fdmFsdWVzLCBjb25zdCBKU09OOjpWYWx1ZSog
b3B0X2luX3BheWxvYWQsIGNvbnN0IGludCogb3B0X2luX2RhdGFiYXNlSWQsIGNvbnN0IEpTT046
Ok9iamVjdCogb3B0X2luX3NxbEVycm9yLCBjb25zdCBTdHJpbmcqIG9wdF9pbl9zY3JlZW5Db2xv
ciwgY29uc3QgSlNPTjo6QXJyYXkqIG9wdF9pbl9hbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmlu
Zyogb3B0X2luX3ByaW50Q29sb3IsIFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+JiBvcHRf
b3V0X2NvbHVtbk5hbWVzLCBPcHRpb25hbDxTdHJpbmc+JiBvcHRfb3V0X25vdGVzLCBPcHRpb25h
bDxkb3VibGU+JiBvcHRfb3V0X3RpbWVzdGFtcCwgT3B0aW9uYWw8SlNPTjo6T2JqZWN0PiYgb3B0
X291dF92YWx1ZXMsIE9wdGlvbmFsPEpTT046OlZhbHVlPiYgb3B0X291dF9wYXlsb2FkLCBPcHRp
b25hbDxpbnQ+JiBvcHRfb3V0X2RhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29s
OjpEYXRhYmFzZTo6RXJyb3I+JiBvcHRfb3V0X3NxbEVycm9yLCBJbnNwZWN0b3I6OlByb3RvY29s
OjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyogb3B0X291dF9zY3JlZW5Db2xvciwgUmVmUHRyPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+JiBvcHRfb3V0X2FsdGVybmF0
ZUNvbG9ycywgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3IqIG9w
dF9vdXRfcHJpbnRDb2xvcikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlTm9PcHRpb25h
bFBhcmFtZXRlcnMoRXJyb3JTdHJpbmcmLCBjb25zdCBKU09OOjpBcnJheSYgaW5fY29sdW1uTmFt
ZXMsIGNvbnN0IFN0cmluZyYgaW5fbm90ZXMsIGRvdWJsZSBpbl90aW1lc3RhbXAsIGNvbnN0IEpT
T046Ok9iamVjdCYgaW5fdmFsdWVzLCBKU09OOjpWYWx1ZSBpbl9wYXlsb2FkLCBpbnQgaW5fZGF0
YWJhc2VJZCwgY29uc3QgSlNPTjo6T2JqZWN0JiBpbl9zcWxFcnJvciwgY29uc3QgU3RyaW5nJiBp
bl9zY3JlZW5Db2xvciwgY29uc3QgSlNPTjo6QXJyYXkmIGluX2FsdGVybmF0ZUNvbG9ycywgY29u
c3QgU3RyaW5nJiBpbl9wcmludENvbG9yLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiYg
b3V0X2NvbHVtbk5hbWVzLCBTdHJpbmcqIG91dF9ub3RlcywgZG91YmxlKiBvdXRfdGltZXN0YW1w
LCBKU09OOjpPYmplY3QqIG91dF92YWx1ZXMsIEpTT046OlZhbHVlKiBvdXRfcGF5bG9hZCwgaW50
KiBvdXRfZGF0YWJhc2VJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpF
cnJvcj4mIG91dF9zcWxFcnJvciwgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1h
cnlDb2xvcnMqIG91dF9zY3JlZW5Db2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRh
dGFiYXNlOjpDb2xvckxpc3Q+JiBvdXRfYWx0ZXJuYXRlQ29sb3JzLCBEYXRhYmFzZUJhY2tlbmRE
aXNwYXRjaGVySGFuZGxlcjo6UHJpbnRDb2xvciogb3V0X3ByaW50Q29sb3IpID0gMDsKKyAgICB2
aXJ0dWFsIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHN0ZDo6dHVwbGU8UmVmUHRyPEpTT046OkFy
cmF5T2Y8U3RyaW5nPj4gLyogb3B0X2NvbHVtbk5hbWVzICovLCBTdHJpbmcgLyogb3B0X25vdGVz
ICovLCBPcHRpb25hbDxkb3VibGU+IC8qIG9wdF90aW1lc3RhbXAgKi8sIFJlZlB0cjxKU09OOjpP
YmplY3Q+IC8qIG9wdF92YWx1ZXMgKi8sIFJlZlB0cjxKU09OOjpWYWx1ZT4gLyogb3B0X3BheWxv
YWQgKi8sIE9wdGlvbmFsPGludD4gLyogb3B0X2RhdGFiYXNlSWQgKi8sIFJlZlB0cjxQcm90b2Nv
bDo6RGF0YWJhc2U6OkVycm9yPiAvKiBvcHRfc3FsRXJyb3IgKi8sIE9wdGlvbmFsPFByb3RvY29s
OjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4gLyogb3B0X3NjcmVlbkNvbG9yICovLCBSZWZQdHI8
UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+IC8qIG9wdF9hbHRlcm5hdGVDb2xvcnMgKi8s
IFN0cmluZyAvKiBvcHRfcHJpbnRDb2xvciAqLz4+IGV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRl
cnMoUmVmUHRyPEpTT046OkFycmF5PiYmIG9wdF9jb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBv
cHRfbm90ZXMsIE9wdGlvbmFsPGRvdWJsZT4mJiBvcHRfdGltZXN0YW1wLCBSZWZQdHI8SlNPTjo6
T2JqZWN0PiYmIG9wdF92YWx1ZXMsIFJlZlB0cjxKU09OOjpWYWx1ZT4mJiBvcHRfcGF5bG9hZCwg
T3B0aW9uYWw8aW50PiYmIG9wdF9kYXRhYmFzZUlkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIG9w
dF9zcWxFcnJvciwgT3B0aW9uYWw8UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPiYm
IG9wdF9zY3JlZW5Db2xvciwgUmVmUHRyPEpTT046OkFycmF5PiYmIG9wdF9hbHRlcm5hdGVDb2xv
cnMsIGNvbnN0IFN0cmluZyYgb3B0X3ByaW50Q29sb3IpID0gMDsKKyAgICB2aXJ0dWFsIFByb3Rv
Y29sOjpFcnJvclN0cmluZ09yPHN0ZDo6dHVwbGU8UmVmPEpTT046OkFycmF5T2Y8U3RyaW5nPj4g
LyogY29sdW1uTmFtZXMgKi8sIFN0cmluZyAvKiBub3RlcyAqLywgZG91YmxlIC8qIHRpbWVzdGFt
cCAqLywgUmVmPEpTT046Ok9iamVjdD4gLyogdmFsdWVzICovLCBSZWY8SlNPTjo6VmFsdWU+IC8q
IHBheWxvYWQgKi8sIGludCAvKiBkYXRhYmFzZUlkICovLCBSZWY8UHJvdG9jb2w6OkRhdGFiYXNl
OjpFcnJvcj4gLyogc3FsRXJyb3IgKi8sIFByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9y
cyAvKiBzY3JlZW5Db2xvciAqLywgUmVmPFByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiAv
KiBhbHRlcm5hdGVDb2xvcnMgKi8sIFN0cmluZyAvKiBwcmludENvbG9yICovPj4gZXhlY3V0ZU5v
T3B0aW9uYWxQYXJhbWV0ZXJzKFJlZjxKU09OOjpBcnJheT4mJiBjb2x1bW5OYW1lcywgY29uc3Qg
U3RyaW5nJiBub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgUmVmPEpTT046Ok9iamVjdD4mJiB2YWx1
ZXMsIFJlZjxKU09OOjpWYWx1ZT4mJiBwYXlsb2FkLCBpbnQgZGF0YWJhc2VJZCwgUmVmPEpTT046
Ok9iamVjdD4mJiBzcWxFcnJvciwgUHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzIHNj
cmVlbkNvbG9yLCBSZWY8SlNPTjo6QXJyYXk+JiYgYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJp
bmcmIHByaW50Q29sb3IpID0gMDsKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIH5EYXRhYmFzZUJh
Y2tlbmREaXNwYXRjaGVySGFuZGxlcigpOwogfTsKQEAgLTE1OSwxMCArMTU1LDEwIEBAIHByb3Rl
Y3RlZDoKIGNsYXNzIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgU3Vw
cGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIgewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8RGF0
YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiwgRGF0YWJh
c2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKLSAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcmVx
dWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdl
KSBmaW5hbDsKKyAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBjb25zdCBT
dHJpbmcmIHByb3RvY29sX21ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9tZXNz
YWdlKSBmaW5hbDsKIHByaXZhdGU6Ci0gICAgdm9pZCBleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0
ZXJzKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOwot
ICAgIHZvaWQgZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcmVxdWVzdElkLCBSZWZQ
dHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOworICAgIHZvaWQgZXhlY3V0ZUFsbE9wdGlv
bmFsUGFyYW1ldGVycyhsb25nIHByb3RvY2xfY2FsbElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYm
IHByb3RvY29sX3BhcmFtZXRlcnMpOworICAgIHZvaWQgZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0
ZXJzKGxvbmcgcHJvdG9jbF9jYWxsSWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xf
cGFyYW1ldGVycyk7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMp
CiBwdWJsaWM6CiAgICAgdm9pZCBzZXRBbHRlcm5hdGVEaXNwYXRjaGVyKEFsdGVybmF0ZURhdGFi
YXNlQmFja2VuZERpc3BhdGNoZXIqIGFsdGVybmF0ZURpc3BhdGNoZXIpIHsgbV9hbHRlcm5hdGVE
aXNwYXRjaGVyID0gYWx0ZXJuYXRlRGlzcGF0Y2hlcjsgfQpAQCAtMjExLDkgKzIwNyw3IEBAIHBy
aXZhdGU6CiAjaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgogCiAjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYv
SlNPTlZhbHVlcy5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUg
PHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJ
U1BBVENIRVJTKQogI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIK
QEAgLTIzNSw0NyArMjI5LDM2IEBAIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OkRhdGFiYXNl
QmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmRECiAgICAgbV9iYWNr
ZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRjaGVyRm9yRG9tYWluKCJEYXRhYmFzZSJfcywg
dGhpcyk7CiB9CiAKLXZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9u
ZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1l
c3NhZ2UpCit2b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcHJv
dG9jb2xfY2FsbElkLCBjb25zdCBTdHJpbmcmIHByb3RvY29sX21ldGhvZCwgUmVmPEpTT046Ok9i
amVjdD4mJiBwcm90b2NvbF9tZXNzYWdlKQogewogICAgIFJlZjxEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKIAotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFt
ZXRlcnM7Ci0gICAgbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3MsIHBhcmFtZXRlcnMpOwor
ICAgIGF1dG8gcHJvdG9jb2xfcGFyYW1ldGVycyA9IHByb3RvY29sX21lc3NhZ2UtPmdldE9iamVj
dCgicGFyYW1zIl9zKTsKIAotICAgIGlmIChtZXRob2QgPT0gImV4ZWN1dGVBbGxPcHRpb25hbFBh
cmFtZXRlcnMiKSB7Ci0gICAgICAgIGV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMocmVxdWVz
dElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKKyAgICBpZiAocHJvdG9jb2xfbWV0aG9kID09ICJl
eGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzIikgeworICAgICAgICBleGVjdXRlQWxsT3B0aW9u
YWxQYXJhbWV0ZXJzKHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9wYXJhbWV0ZXJz
KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKG1ldGhvZCA9PSAiZXhlY3V0ZU5v
T3B0aW9uYWxQYXJhbWV0ZXJzIikgewotICAgICAgICBleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRl
cnMocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKKyAgICBpZiAocHJvdG9jb2xfbWV0
aG9kID09ICJleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMiKSB7CisgICAgICAgIGV4ZWN1dGVO
b09wdGlvbmFsUGFyYW1ldGVycyhwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJvdG9jb2xfcGFy
YW1ldGVycykpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbV9iYWNrZW5kRGlzcGF0
Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91
bmQsICInRGF0YWJhc2UuIiArIG1ldGhvZCArICInIHdhcyBub3QgZm91bmQiKTsKKyAgICBtX2Jh
Y2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpN
ZXRob2ROb3RGb3VuZCwgIidEYXRhYmFzZS4iICsgcHJvdG9jb2xfbWV0aG9kICsgIicgd2FzIG5v
dCBmb3VuZCIpOwogfQogCi12b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVB
bGxPcHRpb25hbFBhcmFtZXRlcnMobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+
JiYgcGFyYW1ldGVycykKK3ZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZUFs
bE9wdGlvbmFsUGFyYW1ldGVycyhsb25nIHByb3RvY29sX2NhbGxJZCwgUmVmUHRyPEpTT046Ok9i
amVjdD4mJiBwcm90b2NvbF9wYXJhbWV0ZXJzKQogewotICAgIGJvb2wgb3B0X2luX2NvbHVtbk5h
bWVzX3ZhbHVlRm91bmQgPSBmYWxzZTsKLSAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IG9wdF9pbl9j
b2x1bW5OYW1lcyA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldEFycmF5KHBhcmFtZXRlcnMuZ2V0
KCksICJjb2x1bW5OYW1lcyJfcywgJm9wdF9pbl9jb2x1bW5OYW1lc192YWx1ZUZvdW5kKTsKLSAg
ICBib29sIG9wdF9pbl9ub3Rlc192YWx1ZUZvdW5kID0gZmFsc2U7Ci0gICAgU3RyaW5nIG9wdF9p
bl9ub3RlcyA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFN0cmluZyhwYXJhbWV0ZXJzLmdldCgp
LCAibm90ZXMiX3MsICZvcHRfaW5fbm90ZXNfdmFsdWVGb3VuZCk7Ci0gICAgYm9vbCBvcHRfaW5f
dGltZXN0YW1wX3ZhbHVlRm91bmQgPSBmYWxzZTsKLSAgICBkb3VibGUgb3B0X2luX3RpbWVzdGFt
cCA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldERvdWJsZShwYXJhbWV0ZXJzLmdldCgpLCAidGlt
ZXN0YW1wIl9zLCAmb3B0X2luX3RpbWVzdGFtcF92YWx1ZUZvdW5kKTsKLSAgICBib29sIG9wdF9p
bl92YWx1ZXNfdmFsdWVGb3VuZCA9IGZhbHNlOwotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG9w
dF9pbl92YWx1ZXMgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRPYmplY3QocGFyYW1ldGVycy5n
ZXQoKSwgInZhbHVlcyJfcywgJm9wdF9pbl92YWx1ZXNfdmFsdWVGb3VuZCk7Ci0gICAgYm9vbCBv
cHRfaW5fcGF5bG9hZF92YWx1ZUZvdW5kID0gZmFsc2U7Ci0gICAgUmVmUHRyPEpTT046OlZhbHVl
PiBvcHRfaW5fcGF5bG9hZCA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFZhbHVlKHBhcmFtZXRl
cnMuZ2V0KCksICJwYXlsb2FkIl9zLCAmb3B0X2luX3BheWxvYWRfdmFsdWVGb3VuZCk7Ci0gICAg
Ym9vbCBvcHRfaW5fZGF0YWJhc2VJZF92YWx1ZUZvdW5kID0gZmFsc2U7Ci0gICAgaW50IG9wdF9p
bl9kYXRhYmFzZUlkID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0SW50ZWdlcihwYXJhbWV0ZXJz
LmdldCgpLCAiZGF0YWJhc2VJZCJfcywgJm9wdF9pbl9kYXRhYmFzZUlkX3ZhbHVlRm91bmQpOwot
ICAgIGJvb2wgb3B0X2luX3NxbEVycm9yX3ZhbHVlRm91bmQgPSBmYWxzZTsKLSAgICBSZWZQdHI8
SlNPTjo6T2JqZWN0PiBvcHRfaW5fc3FsRXJyb3IgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRP
YmplY3QocGFyYW1ldGVycy5nZXQoKSwgInNxbEVycm9yIl9zLCAmb3B0X2luX3NxbEVycm9yX3Zh
bHVlRm91bmQpOwotICAgIGJvb2wgb3B0X2luX3NjcmVlbkNvbG9yX3ZhbHVlRm91bmQgPSBmYWxz
ZTsKLSAgICBTdHJpbmcgb3B0X2luX3NjcmVlbkNvbG9yID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+
Z2V0U3RyaW5nKHBhcmFtZXRlcnMuZ2V0KCksICJzY3JlZW5Db2xvciJfcywgJm9wdF9pbl9zY3Jl
ZW5Db2xvcl92YWx1ZUZvdW5kKTsKLSAgICBib29sIG9wdF9pbl9hbHRlcm5hdGVDb2xvcnNfdmFs
dWVGb3VuZCA9IGZhbHNlOwotICAgIFJlZlB0cjxKU09OOjpBcnJheT4gb3B0X2luX2FsdGVybmF0
ZUNvbG9ycyA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldEFycmF5KHBhcmFtZXRlcnMuZ2V0KCks
ICJhbHRlcm5hdGVDb2xvcnMiX3MsICZvcHRfaW5fYWx0ZXJuYXRlQ29sb3JzX3ZhbHVlRm91bmQp
OwotICAgIGJvb2wgb3B0X2luX3ByaW50Q29sb3JfdmFsdWVGb3VuZCA9IGZhbHNlOwotICAgIFN0
cmluZyBvcHRfaW5fcHJpbnRDb2xvciA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFN0cmluZyhw
YXJhbWV0ZXJzLmdldCgpLCAicHJpbnRDb2xvciJfcywgJm9wdF9pbl9wcmludENvbG9yX3ZhbHVl
Rm91bmQpOworICAgIGF1dG8gaW5fb3B0X2NvbHVtbk5hbWVzID0gbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+Z2V0QXJyYXkocHJvdG9jb2xfcGFyYW1ldGVycy5nZXQoKSwgImNvbHVtbk5hbWVzIl9zLCBm
YWxzZSk7CisgICAgYXV0byBpbl9vcHRfbm90ZXMgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRT
dHJpbmcocHJvdG9jb2xfcGFyYW1ldGVycy5nZXQoKSwgIm5vdGVzIl9zLCBmYWxzZSk7CisgICAg
YXV0byBpbl9vcHRfdGltZXN0YW1wID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0RG91YmxlKHBy
b3RvY29sX3BhcmFtZXRlcnMuZ2V0KCksICJ0aW1lc3RhbXAiX3MsIGZhbHNlKTsKKyAgICBhdXRv
IGluX29wdF92YWx1ZXMgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRPYmplY3QocHJvdG9jb2xf
cGFyYW1ldGVycy5nZXQoKSwgInZhbHVlcyJfcywgZmFsc2UpOworICAgIGF1dG8gaW5fb3B0X3Bh
eWxvYWQgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRWYWx1ZShwcm90b2NvbF9wYXJhbWV0ZXJz
LmdldCgpLCAicGF5bG9hZCJfcywgZmFsc2UpOworICAgIGF1dG8gaW5fb3B0X2RhdGFiYXNlSWQg
PSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRJbnRlZ2VyKHByb3RvY29sX3BhcmFtZXRlcnMuZ2V0
KCksICJkYXRhYmFzZUlkIl9zLCBmYWxzZSk7CisgICAgYXV0byBpbl9vcHRfc3FsRXJyb3IgPSBt
X2JhY2tlbmREaXNwYXRjaGVyLT5nZXRPYmplY3QocHJvdG9jb2xfcGFyYW1ldGVycy5nZXQoKSwg
InNxbEVycm9yIl9zLCBmYWxzZSk7CisgICAgYXV0byBpbl9vcHRfc2NyZWVuQ29sb3JfanNvbiA9
IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFN0cmluZyhwcm90b2NvbF9wYXJhbWV0ZXJzLmdldCgp
LCAic2NyZWVuQ29sb3IiX3MsIGZhbHNlKTsKKyAgICBhdXRvIGluX29wdF9hbHRlcm5hdGVDb2xv
cnMgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRBcnJheShwcm90b2NvbF9wYXJhbWV0ZXJzLmdl
dCgpLCAiYWx0ZXJuYXRlQ29sb3JzIl9zLCBmYWxzZSk7CisgICAgYXV0byBpbl9vcHRfcHJpbnRD
b2xvciA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFN0cmluZyhwcm90b2NvbF9wYXJhbWV0ZXJz
LmdldCgpLCAicHJpbnRDb2xvciJfcywgZmFsc2UpOwogICAgIGlmIChtX2JhY2tlbmREaXNwYXRj
aGVyLT5oYXNQcm90b2NvbEVycm9ycygpKSB7CiAgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXIt
PnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OkludmFsaWRQYXJhbXMsICJT
b21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJ0RhdGFiYXNlLmV4ZWN1dGVBbGxPcHRpb25hbFBhcmFt
ZXRlcnMnIGNhbid0IGJlIHByb2Nlc3NlZCJfcyk7CiAgICAgICAgIHJldHVybjsKQEAgLTI4Myw2
NSArMjY2LDU4IEBAIHZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZUFsbE9w
dGlvbmFsUGFyYW1ldGVycyhsb25nIHJlcXVlc3RJZCwgUmVmCiAKICNpZiBFTkFCTEUoSU5TUEVD
VE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKICAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVy
KSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+ZXhlY3V0ZUFsbE9wdGlvbmFsUGFy
YW1ldGVycyhyZXF1ZXN0SWQsIG9wdF9pbl9jb2x1bW5OYW1lc192YWx1ZUZvdW5kID8gb3B0X2lu
X2NvbHVtbk5hbWVzLmdldCgpIDogbnVsbHB0ciwgb3B0X2luX25vdGVzX3ZhbHVlRm91bmQgPyAm
b3B0X2luX25vdGVzIDogbnVsbHB0ciwgb3B0X2luX3RpbWVzdGFtcF92YWx1ZUZvdW5kID8gJm9w
dF9pbl90aW1lc3RhbXAgOiBudWxscHRyLCBvcHRfaW5fdmFsdWVzX3ZhbHVlRm91bmQgPyBvcHRf
aW5fdmFsdWVzLmdldCgpIDogbnVsbHB0ciwgb3B0X2luX3BheWxvYWRfdmFsdWVGb3VuZCA/IG9w
dF9pbl9wYXlsb2FkLmdldCgpIDogbnVsbHB0ciwgb3B0X2luX2RhdGFiYXNlSWRfdmFsdWVGb3Vu
ZCA/ICZvcHRfaW5fZGF0YWJhc2VJZCA6IG51bGxwdHIsIG9wdF9pbl9zcWxFcnJvcl92YWx1ZUZv
dW5kID8gb3B0X2luX3NxbEVycm9yLmdldCgpIDogbnVsbHB0ciwgb3B0X2luX3NjcmVlbkNvbG9y
X3ZhbHVlRm91bmQgPyAmb3B0X2luX3NjcmVlbkNvbG9yIDogbnVsbHB0ciwgb3B0X2luX2FsdGVy
bmF0ZUNvbG9yc192YWx1ZUZvdW5kID8gb3B0X2luX2FsdGVybmF0ZUNvbG9ycy5nZXQoKSA6IG51
bGxwdHIsIG9wdF9pbl9wcmludENvbG9yX3ZhbHVlRm91bmQgPyAmb3B0X2luX3ByaW50Q29sb3Ig
OiBudWxscHRyKTsKKyAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5leGVjdXRlQWxsT3B0
aW9uYWxQYXJhbWV0ZXJzKHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShpbl9vcHRfY29sdW1uTmFt
ZXMpLCBpbl9vcHRfbm90ZXMsIFdURk1vdmUoaW5fb3B0X3RpbWVzdGFtcCksIFdURk1vdmUoaW5f
b3B0X3ZhbHVlcyksIFdURk1vdmUoaW5fb3B0X3BheWxvYWQpLCBXVEZNb3ZlKGluX29wdF9kYXRh
YmFzZUlkKSwgV1RGTW92ZShpbl9vcHRfc3FsRXJyb3IpLCBpbl9vcHRfc2NyZWVuQ29sb3JfanNv
biwgV1RGTW92ZShpbl9vcHRfYWx0ZXJuYXRlQ29sb3JzKSwgaW5fb3B0X3ByaW50Q29sb3IpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJO
QVRFX0RJU1BBVENIRVJTKQogCi0gICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVmPEpTT046
Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBSZWZQdHI8SlNP
Tjo6QXJyYXlPZjxTdHJpbmc+PiBvdXRfY29sdW1uTmFtZXM7Ci0gICAgT3B0aW9uYWw8U3RyaW5n
PiBvdXRfbm90ZXM7Ci0gICAgT3B0aW9uYWw8ZG91YmxlPiBvdXRfdGltZXN0YW1wOwotICAgIE9w
dGlvbmFsPEpTT046Ok9iamVjdD4gb3V0X3ZhbHVlczsKLSAgICBPcHRpb25hbDxKU09OOjpWYWx1
ZT4gb3V0X3BheWxvYWQ7Ci0gICAgT3B0aW9uYWw8aW50PiBvdXRfZGF0YWJhc2VJZDsKLSAgICBS
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiBvdXRfc3FsRXJyb3I7
Ci0gICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMgb3V0X3Nj
cmVlbkNvbG9yOwotICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29s
b3JMaXN0PiBvdXRfYWx0ZXJuYXRlQ29sb3JzOwotICAgIERhdGFiYXNlQmFja2VuZERpc3BhdGNo
ZXJIYW5kbGVyOjpQcmludENvbG9yIG91dF9wcmludENvbG9yOwotICAgIG1fYWdlbnQtPmV4ZWN1
dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMoZXJyb3IsIG9wdF9pbl9jb2x1bW5OYW1lc192YWx1ZUZv
dW5kID8gb3B0X2luX2NvbHVtbk5hbWVzLmdldCgpIDogbnVsbHB0ciwgb3B0X2luX25vdGVzX3Zh
bHVlRm91bmQgPyAmb3B0X2luX25vdGVzIDogbnVsbHB0ciwgb3B0X2luX3RpbWVzdGFtcF92YWx1
ZUZvdW5kID8gJm9wdF9pbl90aW1lc3RhbXAgOiBudWxscHRyLCBvcHRfaW5fdmFsdWVzX3ZhbHVl
Rm91bmQgPyBvcHRfaW5fdmFsdWVzLmdldCgpIDogbnVsbHB0ciwgb3B0X2luX3BheWxvYWRfdmFs
dWVGb3VuZCA/IG9wdF9pbl9wYXlsb2FkLmdldCgpIDogbnVsbHB0ciwgb3B0X2luX2RhdGFiYXNl
SWRfdmFsdWVGb3VuZCA/ICZvcHRfaW5fZGF0YWJhc2VJZCA6IG51bGxwdHIsIG9wdF9pbl9zcWxF
cnJvcl92YWx1ZUZvdW5kID8gb3B0X2luX3NxbEVycm9yLmdldCgpIDogbnVsbHB0ciwgb3B0X2lu
X3NjcmVlbkNvbG9yX3ZhbHVlRm91bmQgPyAmb3B0X2luX3NjcmVlbkNvbG9yIDogbnVsbHB0ciwg
b3B0X2luX2FsdGVybmF0ZUNvbG9yc192YWx1ZUZvdW5kID8gb3B0X2luX2FsdGVybmF0ZUNvbG9y
cy5nZXQoKSA6IG51bGxwdHIsIG9wdF9pbl9wcmludENvbG9yX3ZhbHVlRm91bmQgPyAmb3B0X2lu
X3ByaW50Q29sb3IgOiBudWxscHRyLCBvdXRfY29sdW1uTmFtZXMsIG91dF9ub3Rlcywgb3V0X3Rp
bWVzdGFtcCwgb3V0X3ZhbHVlcywgb3V0X3BheWxvYWQsIG91dF9kYXRhYmFzZUlkLCBvdXRfc3Fs
RXJyb3IsIG91dF9zY3JlZW5Db2xvciwgb3V0X2FsdGVybmF0ZUNvbG9ycywgb3V0X3ByaW50Q29s
b3IpOworICAgIGF1dG8gaW5fb3B0X3NjcmVlbkNvbG9yID0gUHJvdG9jb2w6OlRlc3RIZWxwZXJz
OjpwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29s
b3JzPihpbl9vcHRfc2NyZWVuQ29sb3JfanNvbik7CiAKLSAgICBpZiAoIWVycm9yLmxlbmd0aCgp
KSB7Ci0gICAgICAgIGlmIChvdXRfY29sdW1uTmFtZXMpCi0gICAgICAgICAgICByZXN1bHQtPnNl
dEFycmF5KCJjb2x1bW5OYW1lcyJfcywgb3V0X2NvbHVtbk5hbWVzKTsKLSAgICAgICAgaWYgKG91
dF9ub3Rlcy5oYXNWYWx1ZSgpKQotICAgICAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoIm5vdGVz
Il9zLCAqb3V0X25vdGVzKTsKLSAgICAgICAgaWYgKG91dF90aW1lc3RhbXAuaGFzVmFsdWUoKSkK
LSAgICAgICAgICAgIHJlc3VsdC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsICpvdXRfdGltZXN0
YW1wKTsKLSAgICAgICAgaWYgKG91dF92YWx1ZXMuaGFzVmFsdWUoKSkKLSAgICAgICAgICAgIHJl
c3VsdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsICpvdXRfdmFsdWVzKTsKLSAgICAgICAgaWYgKG91
dF9wYXlsb2FkLmhhc1ZhbHVlKCkpCi0gICAgICAgICAgICByZXN1bHQtPnNldFZhbHVlKCJwYXls
b2FkIl9zLCAqb3V0X3BheWxvYWQpOwotICAgICAgICBpZiAob3V0X2RhdGFiYXNlSWQuaGFzVmFs
dWUoKSkKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0SW50ZWdlcigiZGF0YWJhc2VJZCJfcywgKm91
dF9kYXRhYmFzZUlkKTsKLSAgICAgICAgaWYgKG91dF9zcWxFcnJvcikKLSAgICAgICAgICAgIHJl
c3VsdC0+c2V0T2JqZWN0KCJzcWxFcnJvciJfcywgb3V0X3NxbEVycm9yKTsKLSAgICAgICAgaWYg
KG91dF9zY3JlZW5Db2xvci5oYXNWYWx1ZSgpKQotICAgICAgICAgICAgcmVzdWx0LT5zZXRTdHJp
bmcoInNjcmVlbkNvbG9yIl9zLCAqb3V0X3NjcmVlbkNvbG9yKTsKLSAgICAgICAgaWYgKG91dF9h
bHRlcm5hdGVDb2xvcnMpCi0gICAgICAgICAgICByZXN1bHQtPnNldEFycmF5KCJhbHRlcm5hdGVD
b2xvcnMiX3MsIG91dF9hbHRlcm5hdGVDb2xvcnMpOwotICAgICAgICBpZiAob3V0X3ByaW50Q29s
b3IuaGFzVmFsdWUoKSkKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJwcmludENvbG9y
Il9zLCAqb3V0X3ByaW50Q29sb3IpOworICAgIGF1dG8gcmVzdWx0ID0gbV9hZ2VudC0+ZXhlY3V0
ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhXVEZNb3ZlKGluX29wdF9jb2x1bW5OYW1lcyksIGluX29w
dF9ub3RlcywgV1RGTW92ZShpbl9vcHRfdGltZXN0YW1wKSwgV1RGTW92ZShpbl9vcHRfdmFsdWVz
KSwgV1RGTW92ZShpbl9vcHRfcGF5bG9hZCksIFdURk1vdmUoaW5fb3B0X2RhdGFiYXNlSWQpLCBX
VEZNb3ZlKGluX29wdF9zcWxFcnJvciksIFdURk1vdmUoaW5fb3B0X3NjcmVlbkNvbG9yKSwgV1RG
TW92ZShpbl9vcHRfYWx0ZXJuYXRlQ29sb3JzKSwgaW5fb3B0X3ByaW50Q29sb3IpOworICAgIGlm
ICghcmVzdWx0KSB7CisgICAgICAgIEFTU0VSVCghcmVzdWx0LmVycm9yKCkuaXNFbXB0eSgpKTsK
KyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5k
RGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIHJlc3VsdC5lcnJvcigpKTsKKyAgICAgICAgcmV0dXJu
OwogICAgIH0KLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQotICAgICAgICBtX2JhY2tlbmREaXNw
YXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsK
LSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJy
b3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7CisKKyAg
ICBhdXRvIFtvdXRfb3B0X2NvbHVtbk5hbWVzLCBvdXRfb3B0X25vdGVzLCBvdXRfb3B0X3RpbWVz
dGFtcCwgb3V0X29wdF92YWx1ZXMsIG91dF9vcHRfcGF5bG9hZCwgb3V0X29wdF9kYXRhYmFzZUlk
LCBvdXRfb3B0X3NxbEVycm9yLCBvdXRfb3B0X3NjcmVlbkNvbG9yLCBvdXRfb3B0X2FsdGVybmF0
ZUNvbG9ycywgb3V0X29wdF9wcmludENvbG9yXSA9IFdURk1vdmUocmVzdWx0LnZhbHVlKCkpOwor
CisgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7
CisgICAgaWYgKCEhb3V0X29wdF9jb2x1bW5OYW1lcykKKyAgICAgICAgcHJvdG9jb2xfanNvbk1l
c3NhZ2UtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgb3V0X29wdF9jb2x1bW5OYW1lcy5yZWxl
YXNlTm9uTnVsbCgpKTsKKyAgICBpZiAoISFvdXRfb3B0X25vdGVzKQorICAgICAgICBwcm90b2Nv
bF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJub3RlcyJfcywgb3V0X29wdF9ub3Rlcyk7CisgICAg
aWYgKCEhb3V0X29wdF90aW1lc3RhbXApCisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5z
ZXREb3VibGUoInRpbWVzdGFtcCJfcywgKm91dF9vcHRfdGltZXN0YW1wKTsKKyAgICBpZiAoISFv
dXRfb3B0X3ZhbHVlcykKKyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldE9iamVjdCgi
dmFsdWVzIl9zLCBvdXRfb3B0X3ZhbHVlcy5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICBpZiAoISFv
dXRfb3B0X3BheWxvYWQpCisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRWYWx1ZSgi
cGF5bG9hZCJfcywgb3V0X29wdF9wYXlsb2FkLnJlbGVhc2VOb25OdWxsKCkpOworICAgIGlmICgh
IW91dF9vcHRfZGF0YWJhc2VJZCkKKyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldElu
dGVnZXIoImRhdGFiYXNlSWQiX3MsICpvdXRfb3B0X2RhdGFiYXNlSWQpOworICAgIGlmICghIW91
dF9vcHRfc3FsRXJyb3IpCisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRPYmplY3Qo
InNxbEVycm9yIl9zLCBvdXRfb3B0X3NxbEVycm9yLnJlbGVhc2VOb25OdWxsKCkpOworICAgIGlm
ICghIW91dF9vcHRfc2NyZWVuQ29sb3IpCisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5z
ZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCBQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1D
b25zdGFudFZhbHVlKCpvdXRfb3B0X3NjcmVlbkNvbG9yKSk7CisgICAgaWYgKCEhb3V0X29wdF9h
bHRlcm5hdGVDb2xvcnMpCisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRBcnJheSgi
YWx0ZXJuYXRlQ29sb3JzIl9zLCBvdXRfb3B0X2FsdGVybmF0ZUNvbG9ycy5yZWxlYXNlTm9uTnVs
bCgpKTsKKyAgICBpZiAoISFvdXRfb3B0X3ByaW50Q29sb3IpCisgICAgICAgIHByb3RvY29sX2pz
b25NZXNzYWdlLT5zZXRTdHJpbmcoInByaW50Q29sb3IiX3MsIG91dF9vcHRfcHJpbnRDb2xvcik7
CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHByb3RvY29sX2NhbGxJZCwg
V1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSksIGZhbHNlKTsKIH0KIAotdm9pZCBEYXRhYmFz
ZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMobG9uZyByZXF1
ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycykKK3ZvaWQgRGF0YWJhc2VC
YWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcHJvdG9j
b2xfY2FsbElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX3BhcmFtZXRlcnMpCiB7
Ci0gICAgUmVmUHRyPEpTT046OkFycmF5PiBpbl9jb2x1bW5OYW1lcyA9IG1fYmFja2VuZERpc3Bh
dGNoZXItPmdldEFycmF5KHBhcmFtZXRlcnMuZ2V0KCksICJjb2x1bW5OYW1lcyJfcywgbnVsbHB0
cik7Ci0gICAgU3RyaW5nIGluX25vdGVzID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3RyaW5n
KHBhcmFtZXRlcnMuZ2V0KCksICJub3RlcyJfcywgbnVsbHB0cik7Ci0gICAgZG91YmxlIGluX3Rp
bWVzdGFtcCA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldERvdWJsZShwYXJhbWV0ZXJzLmdldCgp
LCAidGltZXN0YW1wIl9zLCBudWxscHRyKTsKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBpbl92
YWx1ZXMgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRPYmplY3QocGFyYW1ldGVycy5nZXQoKSwg
InZhbHVlcyJfcywgbnVsbHB0cik7Ci0gICAgUmVmUHRyPEpTT046OlZhbHVlPiBpbl9wYXlsb2Fk
ID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0VmFsdWUocGFyYW1ldGVycy5nZXQoKSwgInBheWxv
YWQiX3MsIG51bGxwdHIpOwotICAgIGludCBpbl9kYXRhYmFzZUlkID0gbV9iYWNrZW5kRGlzcGF0
Y2hlci0+Z2V0SW50ZWdlcihwYXJhbWV0ZXJzLmdldCgpLCAiZGF0YWJhc2VJZCJfcywgbnVsbHB0
cik7Ci0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gaW5fc3FsRXJyb3IgPSBtX2JhY2tlbmREaXNw
YXRjaGVyLT5nZXRPYmplY3QocGFyYW1ldGVycy5nZXQoKSwgInNxbEVycm9yIl9zLCBudWxscHRy
KTsKLSAgICBTdHJpbmcgaW5fc2NyZWVuQ29sb3IgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRT
dHJpbmcocGFyYW1ldGVycy5nZXQoKSwgInNjcmVlbkNvbG9yIl9zLCBudWxscHRyKTsKLSAgICBS
ZWZQdHI8SlNPTjo6QXJyYXk+IGluX2FsdGVybmF0ZUNvbG9ycyA9IG1fYmFja2VuZERpc3BhdGNo
ZXItPmdldEFycmF5KHBhcmFtZXRlcnMuZ2V0KCksICJhbHRlcm5hdGVDb2xvcnMiX3MsIG51bGxw
dHIpOwotICAgIFN0cmluZyBpbl9wcmludENvbG9yID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0
U3RyaW5nKHBhcmFtZXRlcnMuZ2V0KCksICJwcmludENvbG9yIl9zLCBudWxscHRyKTsKKyAgICBh
dXRvIGluX2NvbHVtbk5hbWVzID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0QXJyYXkocHJvdG9j
b2xfcGFyYW1ldGVycy5nZXQoKSwgImNvbHVtbk5hbWVzIl9zLCB0cnVlKTsKKyAgICBhdXRvIGlu
X25vdGVzID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3RyaW5nKHByb3RvY29sX3BhcmFtZXRl
cnMuZ2V0KCksICJub3RlcyJfcywgdHJ1ZSk7CisgICAgYXV0byBpbl90aW1lc3RhbXAgPSBtX2Jh
Y2tlbmREaXNwYXRjaGVyLT5nZXREb3VibGUocHJvdG9jb2xfcGFyYW1ldGVycy5nZXQoKSwgInRp
bWVzdGFtcCJfcywgdHJ1ZSk7CisgICAgYXV0byBpbl92YWx1ZXMgPSBtX2JhY2tlbmREaXNwYXRj
aGVyLT5nZXRPYmplY3QocHJvdG9jb2xfcGFyYW1ldGVycy5nZXQoKSwgInZhbHVlcyJfcywgdHJ1
ZSk7CisgICAgYXV0byBpbl9wYXlsb2FkID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0VmFsdWUo
cHJvdG9jb2xfcGFyYW1ldGVycy5nZXQoKSwgInBheWxvYWQiX3MsIHRydWUpOworICAgIGF1dG8g
aW5fZGF0YWJhc2VJZCA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldEludGVnZXIocHJvdG9jb2xf
cGFyYW1ldGVycy5nZXQoKSwgImRhdGFiYXNlSWQiX3MsIHRydWUpOworICAgIGF1dG8gaW5fc3Fs
RXJyb3IgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRPYmplY3QocHJvdG9jb2xfcGFyYW1ldGVy
cy5nZXQoKSwgInNxbEVycm9yIl9zLCB0cnVlKTsKKyAgICBhdXRvIGluX3NjcmVlbkNvbG9yX2pz
b24gPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRTdHJpbmcocHJvdG9jb2xfcGFyYW1ldGVycy5n
ZXQoKSwgInNjcmVlbkNvbG9yIl9zLCB0cnVlKTsKKyAgICBhdXRvIGluX2FsdGVybmF0ZUNvbG9y
cyA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldEFycmF5KHByb3RvY29sX3BhcmFtZXRlcnMuZ2V0
KCksICJhbHRlcm5hdGVDb2xvcnMiX3MsIHRydWUpOworICAgIGF1dG8gaW5fcHJpbnRDb2xvciA9
IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFN0cmluZyhwcm90b2NvbF9wYXJhbWV0ZXJzLmdldCgp
LCAicHJpbnRDb2xvciJfcywgdHJ1ZSk7CiAgICAgaWYgKG1fYmFja2VuZERpc3BhdGNoZXItPmhh
c1Byb3RvY29sRXJyb3JzKCkpIHsKICAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0
UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFtcywgIlNvbWUgYXJn
dW1lbnRzIG9mIG1ldGhvZCAnRGF0YWJhc2UuZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzJyBj
YW4ndCBiZSBwcm9jZXNzZWQiX3MpOwogICAgICAgICByZXR1cm47CkBAIC0zNDksNDEgKzMyNSwz
OCBAQCB2b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVOb09wdGlvbmFsUGFy
YW1ldGVycyhsb25nIHJlcXVlc3RJZCwgUmVmUAogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRF
Uk5BVEVfRElTUEFUQ0hFUlMpCiAgICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgewotICAg
ICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhy
ZXF1ZXN0SWQsICppbl9jb2x1bW5OYW1lcywgaW5fbm90ZXMsIGluX3RpbWVzdGFtcCwgKmluX3Zh
bHVlcywgKmluX3BheWxvYWQsIGluX2RhdGFiYXNlSWQsICppbl9zcWxFcnJvciwgaW5fc2NyZWVu
Q29sb3IsICppbl9hbHRlcm5hdGVDb2xvcnMsIGluX3ByaW50Q29sb3IpOworICAgICAgICBtX2Fs
dGVybmF0ZURpc3BhdGNoZXItPmV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhwcm90b2NvbF9j
YWxsSWQsIGluX2NvbHVtbk5hbWVzLnJlbGVhc2VOb25OdWxsKCksIGluX25vdGVzLCAqaW5fdGlt
ZXN0YW1wLCBpbl92YWx1ZXMucmVsZWFzZU5vbk51bGwoKSwgaW5fcGF5bG9hZC5yZWxlYXNlTm9u
TnVsbCgpLCAqaW5fZGF0YWJhc2VJZCwgaW5fc3FsRXJyb3IucmVsZWFzZU5vbk51bGwoKSwgaW5f
c2NyZWVuQ29sb3JfanNvbiwgaW5fYWx0ZXJuYXRlQ29sb3JzLnJlbGVhc2VOb25OdWxsKCksIGlu
X3ByaW50Q29sb3IpOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmIC8vIEVOQUJMRShJ
TlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogCi0gICAgRXJyb3JTdHJpbmcgZXJyb3I7
Ci0gICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsK
LSAgICBSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiBvdXRfY29sdW1uTmFtZXM7Ci0gICAg
U3RyaW5nIG91dF9ub3RlczsKLSAgICBkb3VibGUgb3V0X3RpbWVzdGFtcDsKLSAgICBKU09OOjpP
YmplY3Qgb3V0X3ZhbHVlczsKLSAgICBKU09OOjpWYWx1ZSBvdXRfcGF5bG9hZDsKLSAgICBpbnQg
b3V0X2RhdGFiYXNlSWQ7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNl
OjpFcnJvcj4gb3V0X3NxbEVycm9yOwotICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNl
OjpQcmltYXJ5Q29sb3JzIG91dF9zY3JlZW5Db2xvcjsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4gb3V0X2FsdGVybmF0ZUNvbG9yczsKLSAgICBE
YXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UHJpbnRDb2xvciBvdXRfcHJpbnRDb2xv
cjsKLSAgICBtX2FnZW50LT5leGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMoZXJyb3IsICppbl9j
b2x1bW5OYW1lcywgaW5fbm90ZXMsIGluX3RpbWVzdGFtcCwgKmluX3ZhbHVlcywgKmluX3BheWxv
YWQsIGluX2RhdGFiYXNlSWQsICppbl9zcWxFcnJvciwgaW5fc2NyZWVuQ29sb3IsICppbl9hbHRl
cm5hdGVDb2xvcnMsIGluX3ByaW50Q29sb3IsIG91dF9jb2x1bW5OYW1lcywgJm91dF9ub3Rlcywg
Jm91dF90aW1lc3RhbXAsIG91dF92YWx1ZXMsICZvdXRfcGF5bG9hZCwgJm91dF9kYXRhYmFzZUlk
LCBvdXRfc3FsRXJyb3IsICZvdXRfc2NyZWVuQ29sb3IsIG91dF9hbHRlcm5hdGVDb2xvcnMsICZv
dXRfcHJpbnRDb2xvcik7Ci0KLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKSB7Ci0gICAgICAgIHJl
c3VsdC0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCBvdXRfY29sdW1uTmFtZXMpOwotICAgICAg
ICByZXN1bHQtPnNldFN0cmluZygibm90ZXMiX3MsIG91dF9ub3Rlcyk7Ci0gICAgICAgIHJlc3Vs
dC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsIG91dF90aW1lc3RhbXApOwotICAgICAgICByZXN1
bHQtPnNldE9iamVjdCgidmFsdWVzIl9zLCBvdXRfdmFsdWVzKTsKLSAgICAgICAgcmVzdWx0LT5z
ZXRWYWx1ZSgicGF5bG9hZCJfcywgb3V0X3BheWxvYWQpOwotICAgICAgICByZXN1bHQtPnNldElu
dGVnZXIoImRhdGFiYXNlSWQiX3MsIG91dF9kYXRhYmFzZUlkKTsKLSAgICAgICAgcmVzdWx0LT5z
ZXRPYmplY3QoInNxbEVycm9yIl9zLCBvdXRfc3FsRXJyb3IpOwotICAgICAgICByZXN1bHQtPnNl
dFN0cmluZygic2NyZWVuQ29sb3IiX3MsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3RIZWxwZXJz
OjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShvdXRfc2NyZWVuQ29sb3IpKTsKLSAgICAgICAgcmVzdWx0
LT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCBvdXRfYWx0ZXJuYXRlQ29sb3JzKTsKLSAg
ICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoInByaW50Q29sb3IiX3MsIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShvdXRfcHJpbnRDb2xvcikpOwor
ICAgIGF1dG8gaW5fc2NyZWVuQ29sb3IgPSBQcm90b2NvbDo6VGVzdEhlbHBlcnM6OnBhcnNlRW51
bVZhbHVlRnJvbVN0cmluZzxQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+KGluX3Nj
cmVlbkNvbG9yX2pzb24pOworICAgIGlmICghaW5fc2NyZWVuQ29sb3IpIHsKKyAgICAgICAgbV9i
YWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6
U2VydmVyRXJyb3IsIG1ha2VTdHJpbmcoIlVua25vd24gc2NyZWVuQ29sb3I6ICJfcywgaW5fc2Ny
ZWVuQ29sb3JfanNvbikpOworICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmICghZXJyb3Iu
bGVuZ3RoKCkpCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1
ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2UpOwotICAgIGVsc2UKLSAgICAgICAgbV9iYWNr
ZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2Vy
dmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKKworICAgIGF1dG8gcmVzdWx0ID0gbV9hZ2VudC0+
ZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKGluX2NvbHVtbk5hbWVzLnJlbGVhc2VOb25OdWxs
KCksIGluX25vdGVzLCAqaW5fdGltZXN0YW1wLCBpbl92YWx1ZXMucmVsZWFzZU5vbk51bGwoKSwg
aW5fcGF5bG9hZC5yZWxlYXNlTm9uTnVsbCgpLCAqaW5fZGF0YWJhc2VJZCwgaW5fc3FsRXJyb3Iu
cmVsZWFzZU5vbk51bGwoKSwgKmluX3NjcmVlbkNvbG9yLCBpbl9hbHRlcm5hdGVDb2xvcnMucmVs
ZWFzZU5vbk51bGwoKSwgaW5fcHJpbnRDb2xvcik7CisgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAg
ICAgQVNTRVJUKCFyZXN1bHQuZXJyb3IoKS5pc0VtcHR5KCkpOworICAgICAgICBtX2JhY2tlbmRE
aXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJF
cnJvciwgcmVzdWx0LmVycm9yKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYXV0
byBbb3V0X2NvbHVtbk5hbWVzLCBvdXRfbm90ZXMsIG91dF90aW1lc3RhbXAsIG91dF92YWx1ZXMs
IG91dF9wYXlsb2FkLCBvdXRfZGF0YWJhc2VJZCwgb3V0X3NxbEVycm9yLCBvdXRfc2NyZWVuQ29s
b3IsIG91dF9hbHRlcm5hdGVDb2xvcnMsIG91dF9wcmludENvbG9yXSA9IFdURk1vdmUocmVzdWx0
LnZhbHVlKCkpOworCisgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVj
dDo6Y3JlYXRlKCk7CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldEFycmF5KCJjb2x1bW5O
YW1lcyJfcywgV1RGTW92ZShvdXRfY29sdW1uTmFtZXMpKTsKKyAgICBwcm90b2NvbF9qc29uTWVz
c2FnZS0+c2V0U3RyaW5nKCJub3RlcyJfcywgb3V0X25vdGVzKTsKKyAgICBwcm90b2NvbF9qc29u
TWVzc2FnZS0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsIG91dF90aW1lc3RhbXApOworICAgIHBy
b3RvY29sX2pzb25NZXNzYWdlLT5zZXRPYmplY3QoInZhbHVlcyJfcywgV1RGTW92ZShvdXRfdmFs
dWVzKSk7CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCBX
VEZNb3ZlKG91dF9wYXlsb2FkKSk7CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldEludGVn
ZXIoImRhdGFiYXNlSWQiX3MsIG91dF9kYXRhYmFzZUlkKTsKKyAgICBwcm90b2NvbF9qc29uTWVz
c2FnZS0+c2V0T2JqZWN0KCJzcWxFcnJvciJfcywgV1RGTW92ZShvdXRfc3FsRXJyb3IpKTsKKyAg
ICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgUHJvdG9j
b2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShvdXRfc2NyZWVuQ29sb3IpKTsK
KyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywg
V1RGTW92ZShvdXRfYWx0ZXJuYXRlQ29sb3JzKSk7CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2Ut
PnNldFN0cmluZygicHJpbnRDb2xvciJfcywgb3V0X3ByaW50Q29sb3IpOworICAgIG1fYmFja2Vu
ZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJvdG9j
b2xfanNvbk1lc3NhZ2UpLCBmYWxzZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgpA
QCAtNDI0LDYgKzM5Nyw3IEBAIHZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0
ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcmVxdWVzdElkLCBSZWZQCiAKICNpbmNsdWRlICJU
ZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNs
dWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAog
bmFtZXNwYWNlIEluc3BlY3RvciB7CkBAIC00NjcsNyArNDQxLDYgQEAgY2xhc3MgRnJvbnRlbmRS
b3V0ZXI7CiAjaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKIAogI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3Rm
L3RleHQvQ1N0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtNTA4LDcgKzQ4
MSw5IEBAIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL0Fz
c2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9P
cHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKIApAQCAtNTMwLDcgKzUwNSw3IEBAIGVudW0gY2xhc3MgUHJpbWFyeUNvbG9y
czsKIG5hbWVzcGFjZSBEYXRhYmFzZSB7CiAvKiBVbmlxdWUgaWRlbnRpZmllciBvZiBEYXRhYmFz
ZSBvYmplY3QuICovCiB1c2luZyBEYXRhYmFzZUlkID0gaW50OwotdXNpbmcgQ29sb3JMaXN0ID0g
SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9y
cz47Cit1c2luZyBDb2xvckxpc3QgPSBKU09OOjpBcnJheU9mPFByb3RvY29sOjpEYXRhYmFzZTo6
UHJpbWFyeUNvbG9ycz47CiB9IC8vIERhdGFiYXNlCiAvLyBFbmQgb2YgdHlwZWRlZnMuCiAKQEAg
LTU1NCw3ICs1MjksNyBAQCBlbnVtIGNsYXNzIFByaW1hcnlDb2xvcnMgewogfTsgLy8gZW51bSBj
bGFzcyBQcmltYXJ5Q29sb3JzCiAKIC8qIERhdGFiYXNlIGVycm9yLiAqLwotY2xhc3MgRXJyb3Ig
OiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7CitjbGFzcyBFcnJvciBmaW5hbCA6IHB1YmxpYyBK
U09OOjpPYmplY3RCYXNlIHsKIHB1YmxpYzoKICAgICBlbnVtIHsKICAgICAgICAgTm9GaWVsZHNT
ZXQgPSAwLApAQCAtNTgxLDE3ICs1NTYsMTcgQEAgcHVibGljOgogICAgICAgICBmcmllbmQgY2xh
c3MgRXJyb3I7CiAgICAgcHVibGljOgogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBNZXNzYWdl
U2V0PiYgc2V0TWVzc2FnZShjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgICAgICBCdWlsZGVyPFNU
QVRFIHwgTWVzc2FnZVNldD4mIHNldE1lc3NhZ2UoY29uc3QgU3RyaW5nJiBpbl9tZXNzYWdlKQog
ICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTWVzc2FnZVNl
dCksIHByb3BlcnR5X21lc3NhZ2VfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQt
PnNldFN0cmluZygibWVzc2FnZSJfcywgdmFsdWUpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNl
dFN0cmluZygibWVzc2FnZSJfcywgaW5fbWVzc2FnZSk7CiAgICAgICAgICAgICByZXR1cm4gY2Fz
dFN0YXRlPE1lc3NhZ2VTZXQ+KCk7CiAgICAgICAgIH0KIAotICAgICAgICBCdWlsZGVyPFNUQVRF
IHwgQ29kZVNldD4mIHNldENvZGUoaW50IHZhbHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRFIHwg
Q29kZVNldD4mIHNldENvZGUoaW50IGluX2NvZGUpCiAgICAgICAgIHsKICAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBDb2RlU2V0KSwgcHJvcGVydHlfY29kZV9hbHJlYWR5X3Nl
dCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0SW50ZWdlcigiY29kZSJfcywgdmFsdWUpOwor
ICAgICAgICAgICAgbV9yZXN1bHQtPnNldEludGVnZXIoImNvZGUiX3MsIGluX2NvZGUpOwogICAg
ICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxDb2RlU2V0PigpOwogICAgICAgICB9CiAKQEAgLTYz
MCw3ICs2MDUsNyBAQCBPcHRpb25hbDxQcm90b2NvbEVudW1UeXBlPiBwYXJzZUVudW1WYWx1ZUZy
b21TdHJpbmcoY29uc3QgU3RyaW5nJik7CiAKIC8vIEVudW1zIGluIHRoZSAnRGF0YWJhc2UnIERv
bWFpbgogdGVtcGxhdGU8PgotT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6
OlByaW1hcnlDb2xvcnM+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4oY29uc3QgU3RyaW5nJik7CitPcHRpb25hbDxQ
cm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmlu
ZzxQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+KGNvbnN0IFN0cmluZyYpOwogCiB9
IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycwogCkBAIC02ODIsOCArNjU3LDcgQEAgc3RydWN0IERl
ZmF1bHRIYXNoPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPiA6
IEludEhhc2g8SW5zcGUKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJUZXN0UHJvdG9j
b2xPYmplY3RzLmgiCiAKLSNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYv
dGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KIAogbmFtZXNwYWNl
IEluc3BlY3RvciB7CiAKQEAgLTcwOCwxNiArNjgyLDE2IEBAIFN0cmluZyBnZXRFbnVtQ29uc3Rh
bnRWYWx1ZShpbnQgY29kZSkgewogLy8gRW51bXMgaW4gdGhlICdEYXRhYmFzZScgRG9tYWluCiAK
IHRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmlt
YXJ5Q29sb3JzPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6
RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+KGNvbnN0IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcpCitP
cHRpb25hbDxQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+IHBhcnNlRW51bVZhbHVl
RnJvbVN0cmluZzxQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+KGNvbnN0IFN0cmlu
ZyYgcHJvdG9jb2xTdHJpbmcpCiB7CiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBjb25zdGFudFZh
bHVlc1tdID0gewotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNl
OjpQcmltYXJ5Q29sb3JzOjpSZWQsCi0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2Nv
bDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM6OkdyZWVuLAotICAgICAgICAoc2l6ZV90KUluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzOjpCbHVlLAorICAgICAgICAo
c2l6ZV90KVByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9yczo6UmVkLAorICAgICAgICAo
c2l6ZV90KVByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9yczo6R3JlZW4sCisgICAgICAg
IChzaXplX3QpUHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzOjpCbHVlLAogICAgIH07
CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAzOyArK2kpCiAgICAgICAgIGlmIChwcm90b2Nv
bFN0cmluZyA9PSBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb25zdGFudFZhbHVlc1tpXV0pCi0gICAg
ICAgICAgICByZXR1cm4gKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29s
b3JzKWNvbnN0YW50VmFsdWVzW2ldOworICAgICAgICAgICAgcmV0dXJuIChQcm90b2NvbDo6RGF0
YWJhc2U6OlByaW1hcnlDb2xvcnMpY29uc3RhbnRWYWx1ZXNbaV07CiAKICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwogfQpAQCAtNzc0LDggKzc0OCw4IEBAIGNsYXNzIE9iakNJbnNwZWN0b3JEYXRh
YmFzZUJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEFsdGVybmF0ZURhdGFiYXNlQmFj
CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgT2JqQ0luc3BlY3Rv
ckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIoaWQ8VGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5I
YW5kbGVyPiBoYW5kbGVyKSB7IG1fZGVsZWdhdGUgPSBoYW5kbGVyOyB9Ci0gICAgdm9pZCBleGVj
dXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcmVxdWVzdElkLCBjb25zdCBKU09OOjpBcnJh
eSogaW5fY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyogaW5fbm90ZXMsIGNvbnN0IGRvdWJsZSog
aW5fdGltZXN0YW1wLCBjb25zdCBKU09OOjpPYmplY3QqIGluX3ZhbHVlcywgY29uc3QgSlNPTjo6
VmFsdWUqIGluX3BheWxvYWQsIGNvbnN0IGludCogaW5fZGF0YWJhc2VJZCwgY29uc3QgSlNPTjo6
T2JqZWN0KiBpbl9zcWxFcnJvciwgY29uc3QgU3RyaW5nKiBpbl9zY3JlZW5Db2xvciwgY29uc3Qg
SlNPTjo6QXJyYXkqIGluX2FsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nKiBpbl9wcmludENv
bG9yKSBmaW5hbDsKLSAgICB2b2lkIGV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhsb25nIHJl
cXVlc3RJZCwgY29uc3QgSlNPTjo6QXJyYXkmIGluX2NvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcm
IGluX25vdGVzLCBkb3VibGUgaW5fdGltZXN0YW1wLCBjb25zdCBKU09OOjpPYmplY3QmIGluX3Zh
bHVlcywgSlNPTjo6VmFsdWUgaW5fcGF5bG9hZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IEpT
T046Ok9iamVjdCYgaW5fc3FsRXJyb3IsIGNvbnN0IFN0cmluZyYgaW5fc2NyZWVuQ29sb3IsIGNv
bnN0IEpTT046OkFycmF5JiBpbl9hbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyYgaW5fcHJp
bnRDb2xvcikgZmluYWw7CisgICAgdm9pZCBleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKGxv
bmcgcHJvdG9jb2xfY2FsbElkLCBSZWZQdHI8SlNPTjo6QXJyYXk+JiYgb3B0X2NvbHVtbk5hbWVz
LCBjb25zdCBTdHJpbmcmIG9wdF9ub3RlcywgT3B0aW9uYWw8ZG91YmxlPiYmIG9wdF90aW1lc3Rh
bXAsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgb3B0X3ZhbHVlcywgUmVmUHRyPEpTT046OlZhbHVl
PiYmIG9wdF9wYXlsb2FkLCBPcHRpb25hbDxpbnQ+JiYgb3B0X2RhdGFiYXNlSWQsIFJlZlB0cjxK
U09OOjpPYmplY3Q+JiYgb3B0X3NxbEVycm9yLCBjb25zdCBTdHJpbmcmIG9wdF9zY3JlZW5Db2xv
ciwgUmVmUHRyPEpTT046OkFycmF5PiYmIG9wdF9hbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmlu
ZyYgb3B0X3ByaW50Q29sb3IpIGZpbmFsOworICAgIHZvaWQgZXhlY3V0ZU5vT3B0aW9uYWxQYXJh
bWV0ZXJzKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBSZWY8SlNPTjo6QXJyYXk+JiYgY29sdW1uTmFt
ZXMsIGNvbnN0IFN0cmluZyYgbm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIFJlZjxKU09OOjpPYmpl
Y3Q+JiYgdmFsdWVzLCBSZWY8SlNPTjo6VmFsdWU+JiYgcGF5bG9hZCwgaW50IGRhdGFiYXNlSWQs
IFJlZjxKU09OOjpPYmplY3Q+JiYgc3FsRXJyb3IsIGNvbnN0IFN0cmluZyYgc2NyZWVuQ29sb3Is
IFJlZjxKU09OOjpBcnJheT4mJiBhbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyYgcHJpbnRD
b2xvcikgZmluYWw7CiBwcml2YXRlOgogICAgIFJldGFpblB0cjxpZDxUZXN0UHJvdG9jb2xEYXRh
YmFzZURvbWFpbkhhbmRsZXI+PiBtX2RlbGVnYXRlOwogfTsKQEAgLTgyMywxMzcgKzc5NywxMzUg
QEAgcHJpdmF0ZToKIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKLXZvaWQgT2JqQ0luc3BlY3Rv
ckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMo
bG9uZyByZXF1ZXN0SWQsIGNvbnN0IEpTT046OkFycmF5KiBpbl9jb2x1bW5OYW1lcywgY29uc3Qg
U3RyaW5nKiBpbl9ub3RlcywgY29uc3QgZG91YmxlKiBpbl90aW1lc3RhbXAsIGNvbnN0IEpTT046
Ok9iamVjdCogaW5fdmFsdWVzLCBjb25zdCBKU09OOjpWYWx1ZSogaW5fcGF5bG9hZCwgY29uc3Qg
aW50KiBpbl9kYXRhYmFzZUlkLCBjb25zdCBKU09OOjpPYmplY3QqIGluX3NxbEVycm9yLCBjb25z
dCBTdHJpbmcqIGluX3NjcmVlbkNvbG9yLCBjb25zdCBKU09OOjpBcnJheSogaW5fYWx0ZXJuYXRl
Q29sb3JzLCBjb25zdCBTdHJpbmcqIGluX3ByaW50Q29sb3IpCit2b2lkIE9iakNJbnNwZWN0b3JE
YXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKGxv
bmcgcHJvdG9jb2xfY2FsbElkLCBSZWZQdHI8SlNPTjo6QXJyYXk+JiYgaW5fb3B0X2NvbHVtbk5h
bWVzLCBjb25zdCBTdHJpbmcmIGluX29wdF9ub3RlcywgT3B0aW9uYWw8ZG91YmxlPiYmIGluX29w
dF90aW1lc3RhbXAsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgaW5fb3B0X3ZhbHVlcywgUmVmUHRy
PEpTT046OlZhbHVlPiYmIGluX29wdF9wYXlsb2FkLCBPcHRpb25hbDxpbnQ+JiYgaW5fb3B0X2Rh
dGFiYXNlSWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgaW5fb3B0X3NxbEVycm9yLCBjb25zdCBT
dHJpbmcmIGluX29wdF9zY3JlZW5Db2xvciwgUmVmUHRyPEpTT046OkFycmF5PiYmIGluX29wdF9h
bHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyYgaW5fb3B0X3ByaW50Q29sb3IpCiB7CiAgICAg
aWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGV4ZWN1dGVBbGxP
cHRpb25hbFBhcmFtZXRlcnNXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6Y29sdW1u
TmFtZXM6bm90ZXM6dGltZXN0YW1wOnZhbHVlczpwYXlsb2FkOmRhdGFiYXNlSWQ6c3FsRXJyb3I6
c2NyZWVuQ29sb3I6YWx0ZXJuYXRlQ29sb3JzOnByaW50Q29sb3I6KV0pIHsKLSAgICAgICAgYmFj
a2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmRE
aXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEYXRhYmFzZS5leGVjdXRlQWxsT3B0aW9uYWxQ
YXJhbWV0ZXJzJyB3YXMgbm90IGZvdW5kIl9zKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIo
KS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxsSWQsIEJhY2tlbmREaXNwYXRjaGVy
OjpNZXRob2ROb3RGb3VuZCwgIidEYXRhYmFzZS5leGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJz
JyB3YXMgbm90IGZvdW5kIl9zKTsKICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBl
bmRpbmdFcnJvcnMoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlkIGVycm9yQ2Fs
bGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigp
LT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZl
ckVycm9yLCBlcnJvcik7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3Rv
Y29sRXJyb3IocHJvdG9jb2xfY2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3Is
IGVycm9yKTsKICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMo
KTsKICAgICB9OwogCi0gICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXihOU0FycmF5Lyo8TlNTdHJp
bmc+Ki8gKipjb2x1bW5OYW1lcywgTlNTdHJpbmcgKipub3RlcywgZG91YmxlICp0aW1lc3RhbXAs
IFJXSVByb3RvY29sSlNPTk9iamVjdCAqKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICoq
cGF5bG9hZCwgaW50ICpkYXRhYmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoqc3Fs
RXJyb3IsIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyAqc2NyZWVuQ29sb3IsIE5T
QXJyYXkvKjxOU1N0cmluZz4qLyAqKmFsdGVybmF0ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0YWJh
c2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvciAqcHJpbnRDb2xvcikgewot
ICAgICAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHRPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNy
ZWF0ZSgpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVU
RVIoY29sdW1uTmFtZXMsIEAiY29sdW1uTmFtZXMiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9O
X0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKG5vdGVzLCBAIm5vdGVzIik7Ci0gICAgICAgIFRI
Uk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUih2YWx1ZXMsIEAidmFsdWVz
Iik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihw
YXlsb2FkLCBAInBheWxvYWQiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BU
SU9OQUxfUEFSQU1FVEVSKHNxbEVycm9yLCBAInNxbEVycm9yIik7Ci0gICAgICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihhbHRlcm5hdGVDb2xvcnMsIEAiYWx0
ZXJuYXRlQ29sb3JzIik7Ci0gICAgICAgIGlmIChjb2x1bW5OYW1lcykKLSAgICAgICAgICAgIHJl
c3VsdE9iamVjdC0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCB0b0pTT05TdHJpbmdBcnJheSgq
Y29sdW1uTmFtZXMpKTsKLSAgICAgICAgaWYgKG5vdGVzKQotICAgICAgICAgICAgcmVzdWx0T2Jq
ZWN0LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCAqbm90ZXMpOwotICAgICAgICBpZiAodGltZXN0YW1w
KQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywgKnRp
bWVzdGFtcCk7Ci0gICAgICAgIGlmICh2YWx1ZXMpCi0gICAgICAgICAgICByZXN1bHRPYmplY3Qt
PnNldE9iamVjdCgidmFsdWVzIl9zLCBbKnZhbHVlcyB0b0pTT05PYmplY3RdKTsKLSAgICAgICAg
aWYgKHBheWxvYWQpCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldFZhbHVlKCJwYXlsb2Fk
Il9zLCBbKnBheWxvYWQgdG9KU09OT2JqZWN0XSk7Ci0gICAgICAgIGlmIChkYXRhYmFzZUlkKQot
ICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRJbnRlZ2VyKCJkYXRhYmFzZUlkIl9zLCAqZGF0
YWJhc2VJZCk7Ci0gICAgICAgIGlmIChzcWxFcnJvcikKLSAgICAgICAgICAgIHJlc3VsdE9iamVj
dC0+c2V0T2JqZWN0KCJzcWxFcnJvciJfcywgWypzcWxFcnJvciB0b0pTT05PYmplY3RdKTsKLSAg
ICAgICAgaWYgKHNjcmVlbkNvbG9yKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJp
bmcoInNjcmVlbkNvbG9yIl9zLCB0b1Byb3RvY29sU3RyaW5nKCpzY3JlZW5Db2xvcikpOwotICAg
ICAgICBpZiAoYWx0ZXJuYXRlQ29sb3JzKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRB
cnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCB0b0pTT05TdHJpbmdBcnJheSgqYWx0ZXJuYXRlQ29s
b3JzKSk7Ci0gICAgICAgIGlmIChwcmludENvbG9yKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0
LT5zZXRTdHJpbmcoInByaW50Q29sb3IiX3MsIHRvUHJvdG9jb2xTdHJpbmcoKnByaW50Q29sb3Ip
KTsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwg
V1RGTW92ZShyZXN1bHRPYmplY3QpLCBmYWxzZSk7CisgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0g
XihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKipvdXRfb3B0X2NvbHVtbk5hbWVzLCBOU1N0cmluZyAq
Km91dF9vcHRfbm90ZXMsIGRvdWJsZSAqb3V0X29wdF90aW1lc3RhbXAsIFJXSVByb3RvY29sSlNP
Tk9iamVjdCAqKm91dF9vcHRfdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKipvdXRfb3B0
X3BheWxvYWQsIGludCAqb3V0X29wdF9kYXRhYmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVy
cm9yICoqb3V0X29wdF9zcWxFcnJvciwgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3Jz
ICpvdXRfb3B0X3NjcmVlbkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKipvdXRfb3B0X2Fs
dGVybmF0ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0YWJhc2UoYW5vbnltb3VzKSAqb3V0X29wdF9w
cmludENvbG9yKSB7CisgICAgICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpP
YmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05B
TF9QQVJBTUVURVIob3V0X29wdF9jb2x1bW5OYW1lcywgQCJjb2x1bW5OYW1lcyIpOworICAgICAg
ICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIob3V0X29wdF9ub3Rl
cywgQCJub3RlcyIpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9Q
QVJBTUVURVIob3V0X29wdF92YWx1ZXMsIEAidmFsdWVzIik7CisgICAgICAgIFRIUk9XX0VYQ0VQ
VElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihvdXRfb3B0X3BheWxvYWQsIEAicGF5bG9h
ZCIpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIo
b3V0X29wdF9zcWxFcnJvciwgQCJzcWxFcnJvciIpOworICAgICAgICBUSFJPV19FWENFUFRJT05f
Rk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIob3V0X29wdF9hbHRlcm5hdGVDb2xvcnMsIEAiYWx0
ZXJuYXRlQ29sb3JzIik7CisgICAgICAgIGlmICghIW91dF9vcHRfY29sdW1uTmFtZXMpCisgICAg
ICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCB0
b0pTT05TdHJpbmdBcnJheSgqb3V0X29wdF9jb2x1bW5OYW1lcykpOworICAgICAgICBpZiAoISFv
dXRfb3B0X25vdGVzKQorICAgICAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmlu
Zygibm90ZXMiX3MsICpvdXRfb3B0X25vdGVzKTsKKyAgICAgICAgaWYgKCEhb3V0X29wdF90aW1l
c3RhbXApCisgICAgICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0RG91YmxlKCJ0aW1l
c3RhbXAiX3MsICpvdXRfb3B0X3RpbWVzdGFtcCk7CisgICAgICAgIGlmICghIW91dF9vcHRfdmFs
dWVzKQorICAgICAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldE9iamVjdCgidmFsdWVz
Il9zLCBbKm91dF9vcHRfdmFsdWVzIHRvSlNPTk9iamVjdF0pOworICAgICAgICBpZiAoISFvdXRf
b3B0X3BheWxvYWQpCisgICAgICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0VmFsdWUo
InBheWxvYWQiX3MsIFsqb3V0X29wdF9wYXlsb2FkIHRvSlNPTk9iamVjdF0pOworICAgICAgICBp
ZiAoISFvdXRfb3B0X2RhdGFiYXNlSWQpCisgICAgICAgICAgICBwcm90b2NvbF9qc29uTWVzc2Fn
ZS0+c2V0SW50ZWdlcigiZGF0YWJhc2VJZCJfcywgKm91dF9vcHRfZGF0YWJhc2VJZCk7CisgICAg
ICAgIGlmICghIW91dF9vcHRfc3FsRXJyb3IpCisgICAgICAgICAgICBwcm90b2NvbF9qc29uTWVz
c2FnZS0+c2V0T2JqZWN0KCJzcWxFcnJvciJfcywgWypvdXRfb3B0X3NxbEVycm9yIHRvSlNPTk9i
amVjdF0pOworICAgICAgICBpZiAoISFvdXRfb3B0X3NjcmVlbkNvbG9yKQorICAgICAgICAgICAg
cHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygic2NyZWVuQ29sb3IiX3MsIHRvUHJvdG9j
b2xTdHJpbmcoKm91dF9vcHRfc2NyZWVuQ29sb3IpKTsKKyAgICAgICAgaWYgKCEhb3V0X29wdF9h
bHRlcm5hdGVDb2xvcnMpCisgICAgICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0QXJy
YXkoImFsdGVybmF0ZUNvbG9ycyJfcywgdG9KU09OU3RyaW5nQXJyYXkoKm91dF9vcHRfYWx0ZXJu
YXRlQ29sb3JzKSk7CisgICAgICAgIGlmICghIW91dF9vcHRfcHJpbnRDb2xvcikKKyAgICAgICAg
ICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoInByaW50Q29sb3IiX3MsIHRvUHJv
dG9jb2xTdHJpbmcoKm91dF9vcHRfcHJpbnRDb2xvcikpOworICAgICAgICBiYWNrZW5kRGlzcGF0
Y2hlcigpLT5zZW5kUmVzcG9uc2UocHJvdG9jb2xfY2FsbElkLCBXVEZNb3ZlKHByb3RvY29sX2pz
b25NZXNzYWdlKSwgZmFsc2UpOwogICAgIH07CiAKLSAgICBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8g
Km9faW5fY29sdW1uTmFtZXM7Ci0gICAgaWYgKGluX2NvbHVtbk5hbWVzKQotICAgICAgICBvX2lu
X2NvbHVtbk5hbWVzID0gdG9PYmpDU3RyaW5nQXJyYXkoaW5fY29sdW1uTmFtZXMpOwotICAgIE5T
U3RyaW5nICpvX2luX25vdGVzOwotICAgIGlmIChpbl9ub3RlcykKLSAgICAgICAgb19pbl9ub3Rl
cyA9ICppbl9ub3RlczsKLSAgICBkb3VibGUgb19pbl90aW1lc3RhbXA7Ci0gICAgaWYgKGluX3Rp
bWVzdGFtcCkKLSAgICAgICAgb19pbl90aW1lc3RhbXAgPSAqaW5fdGltZXN0YW1wOwotICAgIFJX
SVByb3RvY29sSlNPTk9iamVjdCAqb19pbl92YWx1ZXM7Ci0gICAgaWYgKGluX3ZhbHVlcykKLSAg
ICAgICAgb19pbl92YWx1ZXMgPSBbW1tSV0lQcm90b2NvbEpTT05PYmplY3QgYWxsb2NdIGluaXRX
aXRoSlNPTk9iamVjdDppbl92YWx1ZXNdIGF1dG9yZWxlYXNlXTsKLSAgICBSV0lQcm90b2NvbEpT
T05PYmplY3QgKm9faW5fcGF5bG9hZDsKLSAgICBpZiAoaW5fcGF5bG9hZCkKLSAgICAgICAgb19p
bl9wYXlsb2FkID0gW1tbUldJUHJvdG9jb2xKU09OT2JqZWN0IGFsbG9jXSBpbml0V2l0aEpTT05P
YmplY3Q6aW5fcGF5bG9hZF0gYXV0b3JlbGVhc2VdOwotICAgIGludCBvX2luX2RhdGFiYXNlSWQ7
Ci0gICAgaWYgKGluX2RhdGFiYXNlSWQpCi0gICAgICAgIG9faW5fZGF0YWJhc2VJZCA9ICppbl9k
YXRhYmFzZUlkOwotICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKm9faW5fc3FsRXJyb3I7
Ci0gICAgaWYgKGluX3NxbEVycm9yKQotICAgICAgICBvX2luX3NxbEVycm9yID0gW1tbVGVzdFBy
b3RvY29sRGF0YWJhc2VFcnJvciBhbGxvY10gaW5pdFdpdGhKU09OT2JqZWN0OmluX3NxbEVycm9y
XSBhdXRvcmVsZWFzZV07Ci0gICAgT3B0aW9uYWw8VGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5
Q29sb3JzPiBvX2luX3NjcmVlbkNvbG9yOwotICAgIGlmIChpbl9zY3JlZW5Db2xvcikKLSAgICAg
ICAgb19pbl9zY3JlZW5Db2xvciA9IGZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xEYXRh
YmFzZVByaW1hcnlDb2xvcnM+KCppbl9zY3JlZW5Db2xvcik7Ci0gICAgTlNBcnJheS8qPE5TU3Ry
aW5nPiovICpvX2luX2FsdGVybmF0ZUNvbG9yczsKLSAgICBpZiAoaW5fYWx0ZXJuYXRlQ29sb3Jz
KQotICAgICAgICBvX2luX2FsdGVybmF0ZUNvbG9ycyA9IHRvT2JqQ1N0cmluZ0FycmF5KGluX2Fs
dGVybmF0ZUNvbG9ycyk7Ci0gICAgT3B0aW9uYWw8VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRl
QWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvcj4gb19pbl9wcmludENvbG9yOwotICAgIGlm
IChpbl9wcmludENvbG9yKQotICAgICAgICBvX2luX3ByaW50Q29sb3IgPSBmcm9tUHJvdG9jb2xT
dHJpbmc8VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJp
bnRDb2xvcj4oKmluX3ByaW50Q29sb3IpOwotCi0gICAgW21fZGVsZWdhdGUgZXhlY3V0ZUFsbE9w
dGlvbmFsUGFyYW1ldGVyc1dpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0Nh
bGxiYWNrOnN1Y2Nlc3NDYWxsYmFjayBjb2x1bW5OYW1lczooaW5fY29sdW1uTmFtZXMgPyAmb19p
bl9jb2x1bW5OYW1lcyA6IG5pbCkgbm90ZXM6KGluX25vdGVzID8gJm9faW5fbm90ZXMgOiBuaWwp
IHRpbWVzdGFtcDooaW5fdGltZXN0YW1wID8gJm9faW5fdGltZXN0YW1wIDogbmlsKSB2YWx1ZXM6
KGluX3ZhbHVlcyA/ICZvX2luX3ZhbHVlcyA6IG5pbCkgcGF5bG9hZDooaW5fcGF5bG9hZCA/ICZv
X2luX3BheWxvYWQgOiBuaWwpIGRhdGFiYXNlSWQ6KGluX2RhdGFiYXNlSWQgPyAmb19pbl9kYXRh
YmFzZUlkIDogbmlsKSBzcWxFcnJvcjooaW5fc3FsRXJyb3IgPyAmb19pbl9zcWxFcnJvciA6IG5p
bCkgc2NyZWVuQ29sb3I6KGluX3NjcmVlbkNvbG9yID8gJm9faW5fc2NyZWVuQ29sb3IudmFsdWUo
KSA6IG5pbCkgYWx0ZXJuYXRlQ29sb3JzOihpbl9hbHRlcm5hdGVDb2xvcnMgPyAmb19pbl9hbHRl
cm5hdGVDb2xvcnMgOiBuaWwpIHByaW50Q29sb3I6KGluX3ByaW50Q29sb3IgPyAmb19pbl9wcmlu
dENvbG9yLnZhbHVlKCkgOiBuaWwpXTsKKyAgICBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKm9faW5f
b3B0X2NvbHVtbk5hbWVzOworICAgIGlmICghIWluX29wdF9jb2x1bW5OYW1lcykKKyAgICAgICAg
b19pbl9vcHRfY29sdW1uTmFtZXMgPSB0b09iakNTdHJpbmdBcnJheShpbl9vcHRfY29sdW1uTmFt
ZXMucmVsZWFzZU5vbk51bGwoKSk7CisgICAgTlNTdHJpbmcgKm9faW5fb3B0X25vdGVzOworICAg
IGlmICghIWluX29wdF9ub3RlcykKKyAgICAgICAgb19pbl9vcHRfbm90ZXMgPSBpbl9vcHRfbm90
ZXM7CisgICAgZG91YmxlIG9faW5fb3B0X3RpbWVzdGFtcDsKKyAgICBpZiAoISFpbl9vcHRfdGlt
ZXN0YW1wKQorICAgICAgICBvX2luX29wdF90aW1lc3RhbXAgPSAqaW5fb3B0X3RpbWVzdGFtcDsK
KyAgICBSV0lQcm90b2NvbEpTT05PYmplY3QgKm9faW5fb3B0X3ZhbHVlczsKKyAgICBpZiAoISFp
bl9vcHRfdmFsdWVzKQorICAgICAgICBvX2luX29wdF92YWx1ZXMgPSBbW1tSV0lQcm90b2NvbEpT
T05PYmplY3QgYWxsb2NdIGluaXRXaXRoSlNPTk9iamVjdDppbl9vcHRfdmFsdWVzLnJlbGVhc2VO
b25OdWxsKCldIGF1dG9yZWxlYXNlXTsKKyAgICBSV0lQcm90b2NvbEpTT05PYmplY3QgKm9faW5f
b3B0X3BheWxvYWQ7CisgICAgaWYgKCEhaW5fb3B0X3BheWxvYWQpCisgICAgICAgIG9faW5fb3B0
X3BheWxvYWQgPSBbW1tSV0lQcm90b2NvbEpTT05PYmplY3QgYWxsb2NdIGluaXRXaXRoSlNPTk9i
amVjdDppbl9vcHRfcGF5bG9hZC5yZWxlYXNlTm9uTnVsbCgpXSBhdXRvcmVsZWFzZV07CisgICAg
aW50IG9faW5fb3B0X2RhdGFiYXNlSWQ7CisgICAgaWYgKCEhaW5fb3B0X2RhdGFiYXNlSWQpCisg
ICAgICAgIG9faW5fb3B0X2RhdGFiYXNlSWQgPSAqaW5fb3B0X2RhdGFiYXNlSWQ7CisgICAgVGVz
dFByb3RvY29sRGF0YWJhc2VFcnJvciAqb19pbl9vcHRfc3FsRXJyb3I7CisgICAgaWYgKCEhaW5f
b3B0X3NxbEVycm9yKQorICAgICAgICBvX2luX29wdF9zcWxFcnJvciA9IFtbW1Rlc3RQcm90b2Nv
bERhdGFiYXNlRXJyb3IgYWxsb2NdIGluaXRXaXRoSlNPTk9iamVjdDppbl9vcHRfc3FsRXJyb3Iu
cmVsZWFzZU5vbk51bGwoKV0gYXV0b3JlbGVhc2VdOworICAgIE9wdGlvbmFsPFRlc3RQcm90b2Nv
bERhdGFiYXNlUHJpbWFyeUNvbG9ycz4gb19pbl9vcHRfc2NyZWVuQ29sb3I7CisgICAgaWYgKCEh
aW5fb3B0X3NjcmVlbkNvbG9yKQorICAgICAgICBvX2luX29wdF9zY3JlZW5Db2xvciA9IGZyb21Q
cm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnM+KGluX29wdF9z
Y3JlZW5Db2xvcik7CisgICAgTlNBcnJheS8qPE5TU3RyaW5nPiovICpvX2luX29wdF9hbHRlcm5h
dGVDb2xvcnM7CisgICAgaWYgKCEhaW5fb3B0X2FsdGVybmF0ZUNvbG9ycykKKyAgICAgICAgb19p
bl9vcHRfYWx0ZXJuYXRlQ29sb3JzID0gdG9PYmpDU3RyaW5nQXJyYXkoaW5fb3B0X2FsdGVybmF0
ZUNvbG9ycy5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICBPcHRpb25hbDxUZXN0UHJvdG9jb2xEYXRh
YmFzZShhbm9ueW1vdXMpPiBvX2luX29wdF9wcmludENvbG9yOworICAgIGlmICghIWluX29wdF9w
cmludENvbG9yKQorICAgICAgICBvX2luX29wdF9wcmludENvbG9yID0gZnJvbVByb3RvY29sU3Ry
aW5nPFRlc3RQcm90b2NvbERhdGFiYXNlKGFub255bW91cyk+KGluX29wdF9wcmludENvbG9yKTsK
KyAgICBbbV9kZWxlZ2F0ZSBleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzV2l0aEVycm9yQ2Fs
bGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrIGNvbHVt
bk5hbWVzOighIWluX29wdF9jb2x1bW5OYW1lcyA/ICZvX2luX29wdF9jb2x1bW5OYW1lcyA6IG5p
bCkgbm90ZXM6KCEhaW5fb3B0X25vdGVzID8gJm9faW5fb3B0X25vdGVzIDogbmlsKSB0aW1lc3Rh
bXA6KCEhaW5fb3B0X3RpbWVzdGFtcCA/ICZvX2luX29wdF90aW1lc3RhbXAgOiBuaWwpIHZhbHVl
czooISFpbl9vcHRfdmFsdWVzID8gJm9faW5fb3B0X3ZhbHVlcyA6IG5pbCkgcGF5bG9hZDooISFp
bl9vcHRfcGF5bG9hZCA/ICZvX2luX29wdF9wYXlsb2FkIDogbmlsKSBkYXRhYmFzZUlkOighIWlu
X29wdF9kYXRhYmFzZUlkID8gJm9faW5fb3B0X2RhdGFiYXNlSWQgOiBuaWwpIHNxbEVycm9yOigh
IWluX29wdF9zcWxFcnJvciA/ICZvX2luX29wdF9zcWxFcnJvciA6IG5pbCkgc2NyZWVuQ29sb3I6
KCEhaW5fb3B0X3NjcmVlbkNvbG9yID8gJm9faW5fb3B0X3NjcmVlbkNvbG9yLnZhbHVlKCkgOiBu
aWwpIGFsdGVybmF0ZUNvbG9yczooISFpbl9vcHRfYWx0ZXJuYXRlQ29sb3JzID8gJm9faW5fb3B0
X2FsdGVybmF0ZUNvbG9ycyA6IG5pbCkgcHJpbnRDb2xvcjooISFpbl9vcHRfcHJpbnRDb2xvciA/
ICZvX2luX29wdF9wcmludENvbG9yLnZhbHVlKCkgOiBuaWwpXTsKIH0KIAotdm9pZCBPYmpDSW5z
cGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0
ZXJzKGxvbmcgcmVxdWVzdElkLCBjb25zdCBKU09OOjpBcnJheSYgaW5fY29sdW1uTmFtZXMsIGNv
bnN0IFN0cmluZyYgaW5fbm90ZXMsIGRvdWJsZSBpbl90aW1lc3RhbXAsIGNvbnN0IEpTT046Ok9i
amVjdCYgaW5fdmFsdWVzLCBKU09OOjpWYWx1ZSBpbl9wYXlsb2FkLCBpbnQgaW5fZGF0YWJhc2VJ
ZCwgY29uc3QgSlNPTjo6T2JqZWN0JiBpbl9zcWxFcnJvciwgY29uc3QgU3RyaW5nJiBpbl9zY3Jl
ZW5Db2xvciwgY29uc3QgSlNPTjo6QXJyYXkmIGluX2FsdGVybmF0ZUNvbG9ycywgY29uc3QgU3Ry
aW5nJiBpbl9wcmludENvbG9yKQordm9pZCBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlz
cGF0Y2hlcjo6ZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcHJvdG9jb2xfY2FsbElk
LCBSZWY8SlNPTjo6QXJyYXk+JiYgaW5fY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgaW5fbm90
ZXMsIGRvdWJsZSBpbl90aW1lc3RhbXAsIFJlZjxKU09OOjpPYmplY3Q+JiYgaW5fdmFsdWVzLCBS
ZWY8SlNPTjo6VmFsdWU+JiYgaW5fcGF5bG9hZCwgaW50IGluX2RhdGFiYXNlSWQsIFJlZjxKU09O
OjpPYmplY3Q+JiYgaW5fc3FsRXJyb3IsIGNvbnN0IFN0cmluZyYgaW5fc2NyZWVuQ29sb3IsIFJl
ZjxKU09OOjpBcnJheT4mJiBpbl9hbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyYgaW5fcHJp
bnRDb2xvcikKIHsKICAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2Vs
ZWN0b3IoZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vz
c0NhbGxiYWNrOmNvbHVtbk5hbWVzOm5vdGVzOnRpbWVzdGFtcDp2YWx1ZXM6cGF5bG9hZDpkYXRh
YmFzZUlkOnNxbEVycm9yOnNjcmVlbkNvbG9yOmFsdGVybmF0ZUNvbG9yczpwcmludENvbG9yOild
KSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVx
dWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRGF0YWJhc2UuZXhl
Y3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzJyB3YXMgbm90IGZvdW5kIl9zKTsKKyAgICAgICAgYmFj
a2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxsSWQsIEJh
Y2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEYXRhYmFzZS5leGVjdXRlTm9PcHRp
b25hbFBhcmFtZXRlcnMnIHdhcyBub3QgZm91bmQiX3MpOwogICAgICAgICBiYWNrZW5kRGlzcGF0
Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAg
ICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7Ci0gICAgICAgIGJhY2tl
bmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlz
cGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIo
KS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxsSWQsIEJhY2tlbmREaXNwYXRjaGVy
OjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwogICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5k
UGVuZGluZ0Vycm9ycygpOwogICAgIH07CiAKLSAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeKE5T
QXJyYXkvKjxOU1N0cmluZz4qLyAqY29sdW1uTmFtZXMsIE5TU3RyaW5nICpub3RlcywgZG91Ymxl
IHRpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0ICp2YWx1ZXMsIFJXSVByb3RvY29sSlNP
Tk9iamVjdCAqcGF5bG9hZCwgaW50IGRhdGFiYXNlSWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJy
b3IgKnNxbEVycm9yLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgc2NyZWVuQ29s
b3IsIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqYWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xE
YXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3IgcHJpbnRDb2xvcikg
ewotICAgICAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHRPYmplY3QgPSBKU09OOjpPYmplY3Q6
OmNyZWF0ZSgpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRF
Uihjb2x1bW5OYW1lcywgQCJjb2x1bW5OYW1lcyIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05f
Rk9SX1JFUVVJUkVEX1BBUkFNRVRFUihub3RlcywgQCJub3RlcyIpOwotICAgICAgICBUSFJPV19F
WENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUih2YWx1ZXMsIEAidmFsdWVzIik7Ci0gICAg
ICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKHBheWxvYWQsIEAicGF5
bG9hZCIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihz
cWxFcnJvciwgQCJzcWxFcnJvciIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJ
UkVEX1BBUkFNRVRFUihhbHRlcm5hdGVDb2xvcnMsIEAiYWx0ZXJuYXRlQ29sb3JzIik7Ci0gICAg
ICAgIHJlc3VsdE9iamVjdC0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCB0b0pTT05TdHJpbmdB
cnJheShjb2x1bW5OYW1lcykpOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZygibm90
ZXMiX3MsIG5vdGVzKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXREb3VibGUoInRpbWVzdGFt
cCJfcywgdGltZXN0YW1wKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRPYmplY3QoInZhbHVl
cyJfcywgW3ZhbHVlcyB0b0pTT05PYmplY3RdKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRW
YWx1ZSgicGF5bG9hZCJfcywgW3BheWxvYWQgdG9KU09OT2JqZWN0XSk7Ci0gICAgICAgIHJlc3Vs
dE9iamVjdC0+c2V0SW50ZWdlcigiZGF0YWJhc2VJZCJfcywgZGF0YWJhc2VJZCk7Ci0gICAgICAg
IHJlc3VsdE9iamVjdC0+c2V0T2JqZWN0KCJzcWxFcnJvciJfcywgW3NxbEVycm9yIHRvSlNPTk9i
amVjdF0pOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZygic2NyZWVuQ29sb3IiX3Ms
IHRvUHJvdG9jb2xTdHJpbmcoc2NyZWVuQ29sb3IpKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5z
ZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCB0b0pTT05TdHJpbmdBcnJheShhbHRlcm5hdGVD
b2xvcnMpKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoInByaW50Q29sb3IiX3Ms
IHRvUHJvdG9jb2xTdHJpbmcocHJpbnRDb2xvcikpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hl
cigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdE9iamVjdCksIGZhbHNl
KTsKKyAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqb3V0
X2NvbHVtbk5hbWVzLCBOU1N0cmluZyAqb3V0X25vdGVzLCBkb3VibGUgb3V0X3RpbWVzdGFtcCwg
UldJUHJvdG9jb2xKU09OT2JqZWN0ICpvdXRfdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3Qg
Km91dF9wYXlsb2FkLCBpbnQgb3V0X2RhdGFiYXNlSWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJy
b3IgKm91dF9zcWxFcnJvciwgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzIG91dF9z
Y3JlZW5Db2xvciwgTlNBcnJheS8qPE5TU3RyaW5nPiovICpvdXRfYWx0ZXJuYXRlQ29sb3JzLCBU
ZXN0UHJvdG9jb2xEYXRhYmFzZShhbm9ueW1vdXMpIG91dF9wcmludENvbG9yKSB7CisgICAgICAg
IGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAg
ICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihvdXRfY29sdW1uTmFt
ZXMsIEAiY29sdW1uTmFtZXMiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJF
RF9QQVJBTUVURVIob3V0X25vdGVzLCBAIm5vdGVzIik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKG91dF92YWx1ZXMsIEAidmFsdWVzIik7CisgICAgICAg
IFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKG91dF9wYXlsb2FkLCBAInBh
eWxvYWQiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIo
b3V0X3NxbEVycm9yLCBAInNxbEVycm9yIik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1Jf
UkVRVUlSRURfUEFSQU1FVEVSKG91dF9hbHRlcm5hdGVDb2xvcnMsIEAiYWx0ZXJuYXRlQ29sb3Jz
Iik7CisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRBcnJheSgiY29sdW1uTmFtZXMi
X3MsIHRvSlNPTlN0cmluZ0FycmF5KG91dF9jb2x1bW5OYW1lcykpOworICAgICAgICBwcm90b2Nv
bF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJub3RlcyJfcywgb3V0X25vdGVzKTsKKyAgICAgICAg
cHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCBvdXRfdGltZXN0
YW1wKTsKKyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldE9iamVjdCgidmFsdWVzIl9z
LCBbb3V0X3ZhbHVlcyB0b0pTT05PYmplY3RdKTsKKyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3Nh
Z2UtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCBbb3V0X3BheWxvYWQgdG9KU09OT2JqZWN0XSk7Cisg
ICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRJbnRlZ2VyKCJkYXRhYmFzZUlkIl9zLCBv
dXRfZGF0YWJhc2VJZCk7CisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRPYmplY3Qo
InNxbEVycm9yIl9zLCBbb3V0X3NxbEVycm9yIHRvSlNPTk9iamVjdF0pOworICAgICAgICBwcm90
b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgdG9Qcm90b2NvbFN0
cmluZyhvdXRfc2NyZWVuQ29sb3IpKTsKKyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNl
dEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KG91dF9hbHRlcm5h
dGVDb2xvcnMpKTsKKyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygicHJp
bnRDb2xvciJfcywgdG9Qcm90b2NvbFN0cmluZyhvdXRfcHJpbnRDb2xvcikpOworICAgICAgICBi
YWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocHJvdG9jb2xfY2FsbElkLCBXVEZNb3Zl
KHByb3RvY29sX2pzb25NZXNzYWdlKSwgZmFsc2UpOwogICAgIH07CiAKLSAgICBOU0FycmF5Lyo8
TlNTdHJpbmc+Ki8gKm9faW5fY29sdW1uTmFtZXMgPSB0b09iakNTdHJpbmdBcnJheSgmaW5fY29s
dW1uTmFtZXMpOworICAgIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqb19pbl9jb2x1bW5OYW1lcyA9
IHRvT2JqQ1N0cmluZ0FycmF5KFdURk1vdmUoaW5fY29sdW1uTmFtZXMpKTsKICAgICBOU1N0cmlu
ZyAqb19pbl9ub3RlcyA9IGluX25vdGVzOwogICAgIGRvdWJsZSBvX2luX3RpbWVzdGFtcCA9IGlu
X3RpbWVzdGFtcDsKLSAgICBSV0lQcm90b2NvbEpTT05PYmplY3QgKm9faW5fdmFsdWVzID0gW1tb
UldJUHJvdG9jb2xKU09OT2JqZWN0IGFsbG9jXSBpbml0V2l0aEpTT05PYmplY3Q6JmluX3ZhbHVl
c10gYXV0b3JlbGVhc2VdOwotICAgIFJXSVByb3RvY29sSlNPTk9iamVjdCAqb19pbl9wYXlsb2Fk
ID0gW1tbUldJUHJvdG9jb2xKU09OT2JqZWN0IGFsbG9jXSBpbml0V2l0aEpTT05PYmplY3Q6Jmlu
X3BheWxvYWRdIGF1dG9yZWxlYXNlXTsKKyAgICBSV0lQcm90b2NvbEpTT05PYmplY3QgKm9faW5f
dmFsdWVzID0gW1tbUldJUHJvdG9jb2xKU09OT2JqZWN0IGFsbG9jXSBpbml0V2l0aEpTT05PYmpl
Y3Q6V1RGTW92ZShpbl92YWx1ZXMpXSBhdXRvcmVsZWFzZV07CisgICAgUldJUHJvdG9jb2xKU09O
T2JqZWN0ICpvX2luX3BheWxvYWQgPSBbW1tSV0lQcm90b2NvbEpTT05PYmplY3QgYWxsb2NdIGlu
aXRXaXRoSlNPTk9iamVjdDpXVEZNb3ZlKGluX3BheWxvYWQpXSBhdXRvcmVsZWFzZV07CiAgICAg
aW50IG9faW5fZGF0YWJhc2VJZCA9IGluX2RhdGFiYXNlSWQ7Ci0gICAgVGVzdFByb3RvY29sRGF0
YWJhc2VFcnJvciAqb19pbl9zcWxFcnJvciA9IFtbW1Rlc3RQcm90b2NvbERhdGFiYXNlRXJyb3Ig
YWxsb2NdIGluaXRXaXRoSlNPTk9iamVjdDomaW5fc3FsRXJyb3JdIGF1dG9yZWxlYXNlXTsKKyAg
ICBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICpvX2luX3NxbEVycm9yID0gW1tbVGVzdFByb3Rv
Y29sRGF0YWJhc2VFcnJvciBhbGxvY10gaW5pdFdpdGhKU09OT2JqZWN0OldURk1vdmUoaW5fc3Fs
RXJyb3IpXSBhdXRvcmVsZWFzZV07CiAgICAgT3B0aW9uYWw8VGVzdFByb3RvY29sRGF0YWJhc2VQ
cmltYXJ5Q29sb3JzPiBvX2luX3NjcmVlbkNvbG9yID0gZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQ
cm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycz4oaW5fc2NyZWVuQ29sb3IpOwogICAgIGlmICgh
b19pbl9zY3JlZW5Db2xvcikgewogICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQ
cm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCAiUGFyYW1ldGVy
ICdzY3JlZW5Db2xvcicgb2YgbWV0aG9kICdEYXRhYmFzZS5leGVjdXRlTm9PcHRpb25hbFBhcmFt
ZXRlcnMnIGNhbm5vdCBiZSBwcm9jZXNzZWQiX3MpOwogICAgICAgICByZXR1cm47CiAgICAgfQot
ICAgIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqb19pbl9hbHRlcm5hdGVDb2xvcnMgPSB0b09iakNT
dHJpbmdBcnJheSgmaW5fYWx0ZXJuYXRlQ29sb3JzKTsKLSAgICBPcHRpb25hbDxUZXN0UHJvdG9j
b2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3I+IG9faW5fcHJp
bnRDb2xvciA9IGZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVO
b09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3I+KGluX3ByaW50Q29sb3IpOworICAgIE5TQXJy
YXkvKjxOU1N0cmluZz4qLyAqb19pbl9hbHRlcm5hdGVDb2xvcnMgPSB0b09iakNTdHJpbmdBcnJh
eShXVEZNb3ZlKGluX2FsdGVybmF0ZUNvbG9ycykpOworICAgIE9wdGlvbmFsPFRlc3RQcm90b2Nv
bERhdGFiYXNlKGFub255bW91cyk+IG9faW5fcHJpbnRDb2xvciA9IGZyb21Qcm90b2NvbFN0cmlu
ZzxUZXN0UHJvdG9jb2xEYXRhYmFzZShhbm9ueW1vdXMpPihpbl9wcmludENvbG9yKTsKICAgICBp
ZiAoIW9faW5fcHJpbnRDb2xvcikgewogICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBv
cnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCAiUGFyYW1l
dGVyICdwcmludENvbG9yJyBvZiBtZXRob2QgJ0RhdGFiYXNlLmV4ZWN1dGVOb09wdGlvbmFsUGFy
YW1ldGVycycgY2Fubm90IGJlIHByb2Nlc3NlZCJfcyk7CiAgICAgICAgIHJldHVybjsKICAgICB9
Ci0KICAgICBbbV9kZWxlZ2F0ZSBleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNXaXRoRXJyb3JD
YWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2sgY29s
dW1uTmFtZXM6b19pbl9jb2x1bW5OYW1lcyBub3RlczpvX2luX25vdGVzIHRpbWVzdGFtcDpvX2lu
X3RpbWVzdGFtcCB2YWx1ZXM6b19pbl92YWx1ZXMgcGF5bG9hZDpvX2luX3BheWxvYWQgZGF0YWJh
c2VJZDpvX2luX2RhdGFiYXNlSWQgc3FsRXJyb3I6b19pbl9zcWxFcnJvciBzY3JlZW5Db2xvcjpv
X2luX3NjcmVlbkNvbG9yLnZhbHVlKCkgYWx0ZXJuYXRlQ29sb3JzOm9faW5fYWx0ZXJuYXRlQ29s
b3JzIHByaW50Q29sb3I6b19pbl9wcmludENvbG9yLnZhbHVlKCldOwogfQogCkBAIC0xMjEzLDgg
KzExODUsOCBAQCBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKIAogQHBy
b3RvY29sIFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluSGFuZGxlciA8TlNPYmplY3Q+CiBAb3B0
aW9uYWwKLS0gKHZvaWQpZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1dpdGhFcnJvckNhbGxi
YWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJh
Y2s6KHZvaWQoXikoTlNBcnJheS8qPE5TU3RyaW5nPiovICoqY29sdW1uTmFtZXMsIE5TU3RyaW5n
ICoqbm90ZXMsIGRvdWJsZSAqdGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKip2YWx1
ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqKnBheWxvYWQsIGludCAqZGF0YWJhc2VJZCwgVGVz
dFByb3RvY29sRGF0YWJhc2VFcnJvciAqKnNxbEVycm9yLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVBy
aW1hcnlDb2xvcnMgKnNjcmVlbkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiphbHRlcm5h
dGVDb2xvcnMsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVy
c1ByaW50Q29sb3IgKnByaW50Q29sb3IpKXN1Y2Nlc3NDYWxsYmFjayBjb2x1bW5OYW1lczooTlNB
cnJheS8qPE5TU3RyaW5nPiovICoqKWNvbHVtbk5hbWVzIG5vdGVzOihOU1N0cmluZyAqKilub3Rl
cyB0aW1lc3RhbXA6KGRvdWJsZSAqKXRpbWVzdGFtcCB2YWx1ZXM6KFJXSVByb3RvY29sSlNPTk9i
amVjdCAqKil2YWx1ZXMgcGF5bG9hZDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqKXBheWxvYWQg
ZGF0YWJhc2VJZDooaW50ICopZGF0YWJhc2VJZCBzcWxFcnJvcjooVGVzdFByb3RvY29sRGF0YWJh
c2VFcnJvciAqKilzcWxFcnJvciBzY3JlZW5Db2xvcjooVGVzdFByb3RvY29sRGF0YWJhc2VQcmlt
YXJ5Q29sb3JzICopc2NyZWVuQ29sb3IgYWx0ZXJuYXRlQ29sb3JzOihOU0FycmF5Lyo8TlNTdHJp
bmc+Ki8gKiopYWx0ZXJuYXRlQ29sb3JzIHByaW50Q29sb3I6KFRlc3RQcm90b2NvbERhdGFiYXNl
RXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3IgKilwcmludENvbG9yOwotLSAo
dm9pZClleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNXaXRoRXJyb3JDYWxsYmFjazoodm9pZChe
KShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4p
KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqY29sdW1uTmFtZXMsIE5TU3RyaW5nICpub3RlcywgZG91
YmxlIHRpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0ICp2YWx1ZXMsIFJXSVByb3RvY29s
SlNPTk9iamVjdCAqcGF5bG9hZCwgaW50IGRhdGFiYXNlSWQsIFRlc3RQcm90b2NvbERhdGFiYXNl
RXJyb3IgKnNxbEVycm9yLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgc2NyZWVu
Q29sb3IsIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqYWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9j
b2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3IgcHJpbnRDb2xv
cikpc3VjY2Vzc0NhbGxiYWNrIGNvbHVtbk5hbWVzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKilj
b2x1bW5OYW1lcyBub3RlczooTlNTdHJpbmcgKilub3RlcyB0aW1lc3RhbXA6KGRvdWJsZSl0aW1l
c3RhbXAgdmFsdWVzOihSV0lQcm90b2NvbEpTT05PYmplY3QgKil2YWx1ZXMgcGF5bG9hZDooUldJ
UHJvdG9jb2xKU09OT2JqZWN0ICopcGF5bG9hZCBkYXRhYmFzZUlkOihpbnQpZGF0YWJhc2VJZCBz
cWxFcnJvcjooVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKXNxbEVycm9yIHNjcmVlbkNvbG9y
OihUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMpc2NyZWVuQ29sb3IgYWx0ZXJuYXRl
Q29sb3JzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKilhbHRlcm5hdGVDb2xvcnMgcHJpbnRDb2xv
cjooVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENv
bG9yKXByaW50Q29sb3I7CistICh2b2lkKWV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNXaXRo
RXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3Vj
Y2Vzc0NhbGxiYWNrOih2b2lkKF4pKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKmNvbHVtbk5hbWVz
LCBOU1N0cmluZyAqKm5vdGVzLCBkb3VibGUgKnRpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2Jq
ZWN0ICoqdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKipwYXlsb2FkLCBpbnQgKmRhdGFi
YXNlSWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKipzcWxFcnJvciwgVGVzdFByb3RvY29s
RGF0YWJhc2VQcmltYXJ5Q29sb3JzICpzY3JlZW5Db2xvciwgTlNBcnJheS8qPE5TU3RyaW5nPiov
ICoqYWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZShhbm9ueW1vdXMpICpwcmlu
dENvbG9yKSlzdWNjZXNzQ2FsbGJhY2sgY29sdW1uTmFtZXM6KE5TQXJyYXkvKjxOU1N0cmluZz4q
LyAqKiljb2x1bW5OYW1lcyBub3RlczooTlNTdHJpbmcgKiopbm90ZXMgdGltZXN0YW1wOihkb3Vi
bGUgKil0aW1lc3RhbXAgdmFsdWVzOihSV0lQcm90b2NvbEpTT05PYmplY3QgKiopdmFsdWVzIHBh
eWxvYWQ6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKilwYXlsb2FkIGRhdGFiYXNlSWQ6KGludCAq
KWRhdGFiYXNlSWQgc3FsRXJyb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKiopc3FsRXJy
b3Igc2NyZWVuQ29sb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyAqKXNjcmVl
bkNvbG9yIGFsdGVybmF0ZUNvbG9yczooTlNBcnJheS8qPE5TU3RyaW5nPiovICoqKWFsdGVybmF0
ZUNvbG9ycyBwcmludENvbG9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZShhbm9ueW1vdXMpICopcHJp
bnRDb2xvcjsKKy0gKHZvaWQpZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzV2l0aEVycm9yQ2Fs
bGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxs
YmFjazoodm9pZCheKShOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmNvbHVtbk5hbWVzLCBOU1N0cmlu
ZyAqbm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqdmFsdWVz
LCBSV0lQcm90b2NvbEpTT05PYmplY3QgKnBheWxvYWQsIGludCBkYXRhYmFzZUlkLCBUZXN0UHJv
dG9jb2xEYXRhYmFzZUVycm9yICpzcWxFcnJvciwgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5
Q29sb3JzIHNjcmVlbkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmFsdGVybmF0ZUNvbG9y
cywgVGVzdFByb3RvY29sRGF0YWJhc2UoYW5vbnltb3VzKSBwcmludENvbG9yKSlzdWNjZXNzQ2Fs
bGJhY2sgY29sdW1uTmFtZXM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWNvbHVtbk5hbWVzIG5v
dGVzOihOU1N0cmluZyAqKW5vdGVzIHRpbWVzdGFtcDooZG91YmxlKXRpbWVzdGFtcCB2YWx1ZXM6
KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXZhbHVlcyBwYXlsb2FkOihSV0lQcm90b2NvbEpTT05P
YmplY3QgKilwYXlsb2FkIGRhdGFiYXNlSWQ6KGludClkYXRhYmFzZUlkIHNxbEVycm9yOihUZXN0
UHJvdG9jb2xEYXRhYmFzZUVycm9yICopc3FsRXJyb3Igc2NyZWVuQ29sb3I6KFRlc3RQcm90b2Nv
bERhdGFiYXNlUHJpbWFyeUNvbG9ycylzY3JlZW5Db2xvciBhbHRlcm5hdGVDb2xvcnM6KE5TQXJy
YXkvKjxOU1N0cmluZz4qLyAqKWFsdGVybmF0ZUNvbG9ycyBwcmludENvbG9yOihUZXN0UHJvdG9j
b2xEYXRhYmFzZShhbm9ueW1vdXMpKXByaW50Q29sb3I7CiBAZW5kCiAKIApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2Rl
ZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2RlZmluaXRpb25zLXdpdGgt
bWFjLXBsYXRmb3JtLmpzb24tcmVzdWx0CmluZGV4IGQwMmJlZDdiOGQ2ZTJmZTAyYTUyNDJlZDEy
MmY0YTI4NGY5MGM5YjkuLmIzMGRmMTcwYWFiYTU5N2IzNjE5NjI0YmFkNjc5MzUxNTMzZTQ0OGMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9leHBlY3RlZC9kZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uLXJlc3VsdAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQv
ZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbi1yZXN1bHQKQEAgLTc2LDcgKzc2LDcg
QEAgSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiTmV0d29yayIsIG51bGwpOwogCiAj
aWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAKLSNpbmNsdWRlICJU
ZXN0UHJvdG9jb2xUeXBlcy5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgogI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CiAKQEAgLTk2
LDcgKzk2LDcgQEAgY2xhc3MgQWx0ZXJuYXRlTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyIDogcHVi
bGljIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5B
bHRlcm5hdGVOZXR3b3JrQmFja2VuZERpc3BhdGNoZXIoKSB7IH0KICNpZiBDT01NQU5ELU1BQwot
ICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UobG9uZyBjYWxsSWQpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgbG9hZFJlc291cmNlKGxvbmcgcHJvdG9jb2xfY2FsbElkKSA9IDA7CiAjZW5kaWYg
Ly8gQ09NTUFORC1NQUMKIH07CiAjZW5kaWYgLy8gRE9NQUlOLU1BQwpAQCAtMTQwLDExICsxNDAs
MTQgQEAgcHVibGljOgogCiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVk
ZSA8dHVwbGU+CisjaW5jbHVkZSA8d3RmL0V4cGVjdGVkLmg+CisjaW5jbHVkZSA8d3RmL09wdGlv
bmFsLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNw
ZWN0b3IgewogCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKwogCiAjaWYgRU5BQkxFKElO
U1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAjaWYgRE9NQUlOLU1BQwpAQCAtMTU2LDcg
KzE1OSw3IEBAIGNsYXNzIEFsdGVybmF0ZU5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcjsKIGNsYXNz
IE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewogcHVibGljOgogI2lmIENPTU1BTkQt
TUFDCi0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZShFcnJvclN0cmluZyYpID0gMDsKKyAg
ICB2aXJ0dWFsIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGxvYWRSZXNvdXJjZSgpID0g
MDsKICNlbmRpZiAvLyBDT01NQU5ELU1BQwogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgfk5ldHdv
cmtCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKTsKQEAgLTE2NywxMCArMTcwLDEwIEBAIHByb3Rl
Y3RlZDoKIGNsYXNzIE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBTdXBw
bGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxOZXR3
b3JrQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYsIE5ldHdvcmtC
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKLSAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVz
dElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKSBm
aW5hbDsKKyAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBjb25zdCBTdHJp
bmcmIHByb3RvY29sX21ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9tZXNzYWdl
KSBmaW5hbDsKIHByaXZhdGU6CiAjaWYgQ09NTUFORC1NQUMKLSAgICB2b2lkIGxvYWRSZXNvdXJj
ZShsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKKyAg
ICB2b2lkIGxvYWRSZXNvdXJjZShsb25nIHByb3RvY2xfY2FsbElkLCBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiYmIHByb3RvY29sX3BhcmFtZXRlcnMpOwogI2VuZGlmIC8vIENPTU1BTkQtTUFDCiAjaWYg
RU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiBwdWJsaWM6CkBAIC0yMjEs
OSArMjI0LDcgQEAgcHJpdmF0ZToKICNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgi
CiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgot
I2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVk
Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiAjaWYgRU5BQkxFKElOU1BFQ1RP
Ul9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAjaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmRE
aXNwYXRjaGVycy5oIgpAQCAtMjQ4LDQxICsyNDksNDEgQEAgTmV0d29ya0JhY2tlbmREaXNwYXRj
aGVyOjpOZXR3b3JrQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmRE
aXMKICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4o
Ik5ldHdvcmsiX3MsIHRoaXMpOwogfQogCi12b2lkIE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcjo6
ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6
T2JqZWN0PiYmIG1lc3NhZ2UpCit2b2lkIE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0
Y2gobG9uZyBwcm90b2NvbF9jYWxsSWQsIGNvbnN0IFN0cmluZyYgcHJvdG9jb2xfbWV0aG9kLCBS
ZWY8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX21lc3NhZ2UpCiB7CiAgICAgUmVmPE5ldHdvcmtC
YWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7CiAKLSAgICBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiBwYXJhbWV0ZXJzOwotICAgIG1lc3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9zLCBwYXJh
bWV0ZXJzKTsKKyAgICBhdXRvIHByb3RvY29sX3BhcmFtZXRlcnMgPSBwcm90b2NvbF9tZXNzYWdl
LT5nZXRPYmplY3QoInBhcmFtcyJfcyk7CiAKICNpZiBDT01NQU5ELU1BQwotICAgIGlmIChtZXRo
b2QgPT0gImxvYWRSZXNvdXJjZSIpIHsKLSAgICAgICAgbG9hZFJlc291cmNlKHJlcXVlc3RJZCwg
V1RGTW92ZShwYXJhbWV0ZXJzKSk7CisgICAgaWYgKHByb3RvY29sX21ldGhvZCA9PSAibG9hZFJl
c291cmNlIikgeworICAgICAgICBsb2FkUmVzb3VyY2UocHJvdG9jb2xfY2FsbElkLCBXVEZNb3Zl
KHByb3RvY29sX3BhcmFtZXRlcnMpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZiAv
LyBDT01NQU5ELU1BQwogCi0gICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xF
cnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29yay4iICsgbWV0
aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9y
dFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdv
cmsuIiArIHByb3RvY29sX21ldGhvZCArICInIHdhcyBub3QgZm91bmQiKTsKIH0KIAogI2lmIENP
TU1BTkQtTUFDCi12b2lkIE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlKGxv
bmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQordm9pZCBOZXR3b3JrQmFja2Vu
ZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZShsb25nIHByb3RvY29sX2NhbGxJZCwgUmVmUHRyPEpT
T046Ok9iamVjdD4mJikKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRD
SEVSUykKICAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJu
YXRlRGlzcGF0Y2hlci0+bG9hZFJlc291cmNlKHJlcXVlc3RJZCk7CisgICAgICAgIG1fYWx0ZXJu
YXRlRGlzcGF0Y2hlci0+bG9hZFJlc291cmNlKHByb3RvY29sX2NhbGxJZCk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFU
Q0hFUlMpCiAKLSAgICBFcnJvclN0cmluZyBlcnJvcjsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBy
ZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJj
ZShlcnJvcik7CisgICAgYXV0byByZXN1bHQgPSBtX2FnZW50LT5sb2FkUmVzb3VyY2UoKTsKKyAg
ICBpZiAoIXJlc3VsdCkgeworICAgICAgICBBU1NFUlQoIXJlc3VsdC5lcnJvcigpLmlzRW1wdHko
KSk7CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFj
a2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCByZXN1bHQuZXJyb3IoKSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CiAKLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQotICAgICAgICBtX2JhY2tl
bmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZh
bHNlKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3Rv
Y29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7
CisgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7
CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHByb3RvY29sX2NhbGxJZCwg
V1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSksIGZhbHNlKTsKIH0KICNlbmRpZiAvLyBDT01N
QU5ELU1BQwogI2VuZGlmIC8vIERPTUFJTi1NQUMKQEAgLTMyNSw2ICszMjYsNyBAQCB2b2lkIE5l
dHdvcmtCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlKGxvbmcgcmVxdWVzdElkLCBSZWZQ
dHI8SlNPTjo6T2JqZWN0PgogCiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2lu
Y2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewpAQCAt
MzgxLDcgKzM4Myw2IEBAIHByaXZhdGU6CiAjaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hl
cnMuaCIKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVy
Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9y
IHsKIApAQCAtMzg5LDEwICszOTAsMTAgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiAjaWYgRVZF
TlQtTUFDCiB2b2lkIE5ldHdvcmtGcm9udGVuZERpc3BhdGNoZXI6OnJlc291cmNlTG9hZGVkKCkK
IHsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3Jl
YXRlKCk7Ci0gICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiTmV0d29yay5y
ZXNvdXJjZUxvYWRlZCJfcyk7CisgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046
Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygi
bWV0aG9kIl9zLCAiTmV0d29yay5yZXNvdXJjZUxvYWRlZCJfcyk7CiAKLSAgICBtX2Zyb250ZW5k
Um91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOworICAgIG1fZnJv
bnRlbmRSb3V0ZXIuc2VuZEV2ZW50KHByb3RvY29sX2pzb25NZXNzYWdlLT50b0pTT05TdHJpbmco
KSk7CiB9CiAjZW5kaWYgLy8gRVZFTlQtTUFDCiAjZW5kaWYgLy8gRE9NQUlOLU1BQwpAQCAtNDM0
LDcgKzQzNSw5IEBAIHZvaWQgTmV0d29ya0Zyb250ZW5kRGlzcGF0Y2hlcjo6cmVzb3VyY2VMb2Fk
ZWQoKQogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQ
cm90b2NvbFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3
dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtNDYxLDcg
KzQ2NCw3IEBAIGNsYXNzIE5ldHdvcmtFcnJvcjsKIG5hbWVzcGFjZSBOZXR3b3JrIHsKIAogI2lm
IFRZUEUtTUFDCi1jbGFzcyBOZXR3b3JrRXJyb3IgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7
CitjbGFzcyBOZXR3b3JrRXJyb3IgZmluYWwgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7CiBw
dWJsaWM6CiAgICAgZW51bSB7CiAgICAgICAgIE5vRmllbGRzU2V0ID0gMCwKQEAgLTQ4OCwxNyAr
NDkxLDE3IEBAIHB1YmxpYzoKICAgICAgICAgZnJpZW5kIGNsYXNzIE5ldHdvcmtFcnJvcjsKICAg
ICBwdWJsaWM6CiAKLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IE1lc3NhZ2VTZXQ+JiBzZXRNZXNz
YWdlKGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBNZXNzYWdl
U2V0PiYgc2V0TWVzc2FnZShjb25zdCBTdHJpbmcmIGluX21lc3NhZ2UpCiAgICAgICAgIHsKICAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBNZXNzYWdlU2V0KSwgcHJvcGVydHlf
bWVzc2FnZV9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJt
ZXNzYWdlIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJtZXNz
YWdlIl9zLCBpbl9tZXNzYWdlKTsKICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TWVzc2Fn
ZVNldD4oKTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDb2RlU2V0PiYg
c2V0Q29kZShpbnQgdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDb2RlU2V0PiYgc2V0
Q29kZShpbnQgaW5fY29kZSkKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
IShTVEFURSAmIENvZGVTZXQpLCBwcm9wZXJ0eV9jb2RlX2FscmVhZHlfc2V0KTsKLSAgICAgICAg
ICAgIG1fcmVzdWx0LT5zZXRJbnRlZ2VyKCJjb2RlIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICBt
X3Jlc3VsdC0+c2V0SW50ZWdlcigiY29kZSJfcywgaW5fY29kZSk7CiAgICAgICAgICAgICByZXR1
cm4gY2FzdFN0YXRlPENvZGVTZXQ+KCk7CiAgICAgICAgIH0KIApAQCAtNTcwLDggKzU3Myw3IEBA
IHB1YmxpYzoKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmpl
Y3RzLmgiCiAKLSNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9D
U3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KIAogbmFtZXNwYWNlIEluc3Bl
Y3RvciB7CiAKQEAgLTYzMSw3ICs2MzMsNyBAQCBjbGFzcyBPYmpDSW5zcGVjdG9yTmV0d29ya0Jh
Y2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEFsdGVybmF0ZU5ldHdvcmtCYWNrZQogcHVi
bGljOgogICAgIE9iakNJbnNwZWN0b3JOZXR3b3JrQmFja2VuZERpc3BhdGNoZXIoaWQ8VGVzdFBy
b3RvY29sTmV0d29ya0RvbWFpbkhhbmRsZXI+IGhhbmRsZXIpIHsgbV9kZWxlZ2F0ZSA9IGhhbmRs
ZXI7IH0KICNpZiBDT01NQU5ELU1BQwotICAgIHZvaWQgbG9hZFJlc291cmNlKGxvbmcgcmVxdWVz
dElkKSBmaW5hbDsKKyAgICB2b2lkIGxvYWRSZXNvdXJjZShsb25nIHByb3RvY29sX2NhbGxJZCkg
ZmluYWw7CiAjZW5kaWYgLy8gQ09NTUFORC1NQUMKIHByaXZhdGU6CiAgICAgUmV0YWluUHRyPGlk
PFRlc3RQcm90b2NvbE5ldHdvcmtEb21haW5IYW5kbGVyPj4gbV9kZWxlZ2F0ZTsKQEAgLTY4Mywy
MSArNjg1LDIyIEBAIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCiAjaWYgRE9NQUlOLU1BQwogI2lm
IENPTU1BTkQtTUFDCi12b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrQmFja2VuZERpc3BhdGNoZXI6
OmxvYWRSZXNvdXJjZShsb25nIHJlcXVlc3RJZCkKK3ZvaWQgT2JqQ0luc3BlY3Rvck5ldHdvcmtC
YWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlKGxvbmcgcHJvdG9jb2xfY2FsbElkKQogewog
ICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihsb2FkUmVz
b3VyY2VXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6KV0pIHsKLSAgICAgICAgYmFj
a2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmRE
aXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidOZXR3b3JrLmxvYWRSZXNvdXJjZScgd2FzIG5v
dCBmb3VuZCJfcyk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29s
RXJyb3IocHJvdG9jb2xfY2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQs
ICInTmV0d29yay5sb2FkUmVzb3VyY2UnIHdhcyBub3QgZm91bmQiX3MpOwogICAgICAgICBiYWNr
ZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCiAgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7Ci0gICAg
ICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBC
YWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxsSWQsIEJhY2tlbmRE
aXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwogICAgICAgICBiYWNrZW5kRGlzcGF0Y2hl
cigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgIH07CiAKICAgICBpZCBzdWNjZXNzQ2FsbGJh
Y2sgPSBeewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVz
dElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7CisgICAgICAgIGF1dG8gcHJvdG9j
b2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBiYWNrZW5k
RGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocHJvdG9jb2xfY2FsbElkLCBXVEZNb3ZlKHByb3Rv
Y29sX2pzb25NZXNzYWdlKSwgZmFsc2UpOwogICAgIH07CiAKICAgICBbbV9kZWxlZ2F0ZSBsb2Fk
UmVzb3VyY2VXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpz
dWNjZXNzQ2FsbGJhY2tdOwpAQCAtOTExLDkgKzkxNCw5IEBAIHVzaW5nIG5hbWVzcGFjZSBJbnNw
ZWN0b3I7CiB7CiAgICAgY29uc3QgRnJvbnRlbmRSb3V0ZXImIHJvdXRlciA9IF9jb250cm9sbGVy
LT5mcm9udGVuZFJvdXRlcigpOwogCi0gICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2Ug
PSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1l
dGhvZCJfcywgIk5ldHdvcmsucmVzb3VyY2VMb2FkZWQiX3MpOwotICAgIHJvdXRlci5zZW5kRXZl
bnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKKyAgICBhdXRvIHByb3RvY29sX2pzb25N
ZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2Fn
ZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJOZXR3b3JrLnJlc291cmNlTG9hZGVkIl9zKTsKKyAg
ICByb3V0ZXIuc2VuZEV2ZW50KHByb3RvY29sX2pzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7
CiB9CiAjZW5kaWYgLy8gRVZFTlQtTUFDCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9kb21haW4tZGVidWdnYWJsZVR5
cGVzLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2V4cGVjdGVkL2RvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMuanNvbi1yZXN1bHQKaW5kZXgg
YTQ4ZjZmOWI1YTE5Nzk4MmFkNjkxMDI5YWVhYWRjNjc1MmY4MTMyYS4uYzg3NTE0OGYzZGFmMDVl
ZDMxYWNlZDk3YzMyZWIzYmI3NTQ3ZjhhYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2RvbWFpbi1kZWJ1Z2dhYmxlVHlw
ZXMuanNvbi1yZXN1bHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2V4cGVjdGVkL2RvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMuanNvbi1yZXN1bHQKQEAg
LTcwLDcgKzcwLDcgQEAgSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiRG9tYWluIiwg
WyJ3ZWItcGFnZSJdKTsKIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENI
RVJTKQogCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKKyNpbmNsdWRlICJUZXN0UHJv
dG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXIuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVu
ZFJvdXRlci5oPgogCkBAIC04OCw3ICs4OCw3IEBAIHByaXZhdGU6CiBjbGFzcyBBbHRlcm5hdGVE
b21haW5CYWNrZW5kRGlzcGF0Y2hlciA6IHB1YmxpYyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hl
ciB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+QWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNo
ZXIoKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgQ29tbWFuZChsb25nIGNhbGxJZCkgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBDb21tYW5kKGxvbmcgcHJvdG9jb2xfY2FsbElkKSA9IDA7CiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKQEAgLTEzMCwxMSArMTMwLDE0IEBAIHB1YmxpYzoKIAog
I2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHR1cGxlPgorI2luY2x1
ZGUgPHd0Zi9FeHBlY3RlZC5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAotdHlwZWRl
ZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRF
X0RJU1BBVENIRVJTKQogY2xhc3MgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXI7CkBA
IC0xNDIsNyArMTQ1LDcgQEAgY2xhc3MgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXI7
CiAKIGNsYXNzIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7CiBwdWJsaWM6Ci0gICAg
dmlydHVhbCB2b2lkIENvbW1hbmQoRXJyb3JTdHJpbmcmKSA9IDA7CisgICAgdmlydHVhbCBQcm90
b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBDb21tYW5kKCkgPSAwOwogcHJvdGVjdGVkOgogICAg
IHZpcnR1YWwgfkRvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpOwogfTsKQEAgLTE1MCw5
ICsxNTMsOSBAQCBwcm90ZWN0ZWQ6CiBjbGFzcyBEb21haW5CYWNrZW5kRGlzcGF0Y2hlciBmaW5h
bCA6IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7CiBwdWJsaWM6CiAgICAg
c3RhdGljIFJlZjxEb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEJhY2tlbmREaXNwYXRj
aGVyJiwgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7Ci0gICAgdm9pZCBkaXNwYXRj
aChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+
JiYgbWVzc2FnZSkgZmluYWw7CisgICAgdm9pZCBkaXNwYXRjaChsb25nIHByb3RvY29sX2NhbGxJ
ZCwgY29uc3QgU3RyaW5nJiBwcm90b2NvbF9tZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgcHJv
dG9jb2xfbWVzc2FnZSkgZmluYWw7CiBwcml2YXRlOgotICAgIHZvaWQgQ29tbWFuZChsb25nIHJl
cXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKKyAgICB2b2lkIENv
bW1hbmQobG9uZyBwcm90b2NsX2NhbGxJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwcm90b2Nv
bF9wYXJhbWV0ZXJzKTsKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVS
UykKIHB1YmxpYzoKICAgICB2b2lkIHNldEFsdGVybmF0ZURpc3BhdGNoZXIoQWx0ZXJuYXRlRG9t
YWluQmFja2VuZERpc3BhdGNoZXIqIGFsdGVybmF0ZURpc3BhdGNoZXIpIHsgbV9hbHRlcm5hdGVE
aXNwYXRjaGVyID0gYWx0ZXJuYXRlRGlzcGF0Y2hlcjsgfQpAQCAtMjAxLDkgKzIwNCw3IEBAIHBy
aXZhdGU6CiAjaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgogCiAjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYv
SlNPTlZhbHVlcy5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUg
PHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJ
U1BBVENIRVJTKQogI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIK
QEAgLTIyNSwzOCArMjI2LDM4IEBAIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpEb21haW5CYWNr
ZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhCiAgICAgbV9iYWNr
ZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRjaGVyRm9yRG9tYWluKCJEb21haW4iX3MsIHRo
aXMpOwogfQogCi12b2lkIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHJl
cXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2Fn
ZSkKK3ZvaWQgRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcHJvdG9jb2xf
Y2FsbElkLCBjb25zdCBTdHJpbmcmIHByb3RvY29sX21ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4m
JiBwcm90b2NvbF9tZXNzYWdlKQogewogICAgIFJlZjxEb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4g
cHJvdGVjdCgqdGhpcyk7CiAKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzOwot
ICAgIG1lc3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9zLCBwYXJhbWV0ZXJzKTsKKyAgICBhdXRv
IHByb3RvY29sX3BhcmFtZXRlcnMgPSBwcm90b2NvbF9tZXNzYWdlLT5nZXRPYmplY3QoInBhcmFt
cyJfcyk7CiAKLSAgICBpZiAobWV0aG9kID09ICJDb21tYW5kIikgewotICAgICAgICBDb21tYW5k
KHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7CisgICAgaWYgKHByb3RvY29sX21ldGhv
ZCA9PSAiQ29tbWFuZCIpIHsKKyAgICAgICAgQ29tbWFuZChwcm90b2NvbF9jYWxsSWQsIFdURk1v
dmUocHJvdG9jb2xfcGFyYW1ldGVycykpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
bV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hl
cjo6TWV0aG9kTm90Rm91bmQsICInRG9tYWluLiIgKyBtZXRob2QgKyAiJyB3YXMgbm90IGZvdW5k
Iik7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5k
RGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRG9tYWluLiIgKyBwcm90b2NvbF9tZXRob2Qg
KyAiJyB3YXMgbm90IGZvdW5kIik7CiB9CiAKLXZvaWQgRG9tYWluQmFja2VuZERpc3BhdGNoZXI6
OkNvbW1hbmQobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCit2b2lkIERv
bWFpbkJhY2tlbmREaXNwYXRjaGVyOjpDb21tYW5kKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBSZWZQ
dHI8SlNPTjo6T2JqZWN0PiYmKQogewogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJ
U1BBVENIRVJTKQogICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAgbV9h
bHRlcm5hdGVEaXNwYXRjaGVyLT5Db21tYW5kKHJlcXVlc3RJZCk7CisgICAgICAgIG1fYWx0ZXJu
YXRlRGlzcGF0Y2hlci0+Q29tbWFuZChwcm90b2NvbF9jYWxsSWQpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJT
KQogCi0gICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0
ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBtX2FnZW50LT5Db21tYW5kKGVycm9yKTsK
KyAgICBhdXRvIHJlc3VsdCA9IG1fYWdlbnQtPkNvbW1hbmQoKTsKKyAgICBpZiAoIXJlc3VsdCkg
eworICAgICAgICBBU1NFUlQoIXJlc3VsdC5lcnJvcigpLmlzRW1wdHkoKSk7CisgICAgICAgIG1f
YmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6
OlNlcnZlckVycm9yLCByZXN1bHQuZXJyb3IoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAK
LSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5z
ZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKLSAgICBlbHNl
Ci0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2Vu
ZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7CisgICAgYXV0byBwcm90
b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgbV9iYWNrZW5k
RGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2Nv
bF9qc29uTWVzc2FnZSksIGZhbHNlKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCkBA
IC0yOTcsNiArMjk4LDcgQEAgdm9pZCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Q29tbWFuZChs
b25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikKIAogI2luY2x1ZGUgIlRlc3RQ
cm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUg
PHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1l
c3BhY2UgSW5zcGVjdG9yIHsKQEAgLTM0OSwxNiArMzUxLDE1IEBAIHByaXZhdGU6CiAjaW5jbHVk
ZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5o
PgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAogdm9pZCBEb21haW5Gcm9udGVuZERpc3BhdGNo
ZXI6OkV2ZW50KCkKIHsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046
Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9z
LCAiRG9tYWluLkV2ZW50Il9zKTsKKyAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNP
Tjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5n
KCJtZXRob2QiX3MsICJEb21haW4uRXZlbnQiX3MpOwogCi0gICAgbV9mcm9udGVuZFJvdXRlci5z
ZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKKyAgICBtX2Zyb250ZW5kUm91
dGVyLnNlbmRFdmVudChwcm90b2NvbF9qc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKQEAgLTM5OCw3ICszOTksOSBAQCB2b2lkIERvbWFp
bkZyb250ZW5kRGlzcGF0Y2hlcjo6RXZlbnQoKQogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL0Fz
c2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9P
cHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKIApAQCAtNDUyLDggKzQ1NSw3IEBAIG5hbWVzcGFjZSBQcm90b2NvbCB7CiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogCi0j
aW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgor
I2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBA
IC01MDksNyArNTExLDcgQEAgY2xhc3MgT2JqQ0luc3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRj
aGVyIGZpbmFsIDogcHVibGljIEFsdGVybmF0ZURvbWFpbkJhY2tlbmQKICAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERp
c3BhdGNoZXIoaWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4gaGFuZGxlcikgeyBt
X2RlbGVnYXRlID0gaGFuZGxlcjsgfQotICAgIHZvaWQgQ29tbWFuZChsb25nIHJlcXVlc3RJZCkg
ZmluYWw7CisgICAgdm9pZCBDb21tYW5kKGxvbmcgcHJvdG9jb2xfY2FsbElkKSBmaW5hbDsKIHBy
aXZhdGU6CiAgICAgUmV0YWluUHRyPGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+
PiBtX2RlbGVnYXRlOwogfTsKQEAgLTU1NywyMSArNTU5LDIyIEBAIHByaXZhdGU6CiAKIG5hbWVz
cGFjZSBJbnNwZWN0b3IgewogCi12b2lkIE9iakNJbnNwZWN0b3JEb21haW5CYWNrZW5kRGlzcGF0
Y2hlcjo6Q29tbWFuZChsb25nIHJlcXVlc3RJZCkKK3ZvaWQgT2JqQ0luc3BlY3RvckRvbWFpbkJh
Y2tlbmREaXNwYXRjaGVyOjpDb21tYW5kKGxvbmcgcHJvdG9jb2xfY2FsbElkKQogewogICAgIGlm
ICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihDb21tYW5kV2l0aEVy
cm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRj
aGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6
TWV0aG9kTm90Rm91bmQsICInRG9tYWluLkNvbW1hbmQnIHdhcyBub3QgZm91bmQiX3MpOworICAg
ICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHByb3RvY29sX2Nh
bGxJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RvbWFpbi5Db21tYW5k
JyB3YXMgbm90IGZvdW5kIl9zKTsKICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBl
bmRpbmdFcnJvcnMoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlkIGVycm9yQ2Fs
bGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigp
LT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZl
ckVycm9yLCBlcnJvcik7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3Rv
Y29sRXJyb3IocHJvdG9jb2xfY2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3Is
IGVycm9yKTsKICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMo
KTsKICAgICB9OwogCiAgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKLSAgICAgICAgYmFja2Vu
ZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgSlNPTjo6T2JqZWN0OjpjcmVh
dGUoKSwgZmFsc2UpOworICAgICAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6
T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3Bv
bnNlKHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSksIGZhbHNl
KTsKICAgICB9OwogCiAgICAgW21fZGVsZWdhdGUgQ29tbWFuZFdpdGhFcnJvckNhbGxiYWNrOmVy
cm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107CkBAIC03NzMsOSAr
Nzc2LDkgQEAgdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKIHsKICAgICBjb25zdCBGcm9udGVu
ZFJvdXRlciYgcm91dGVyID0gX2NvbnRyb2xsZXItPmZyb250ZW5kUm91dGVyKCk7CiAKLSAgICBS
ZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0g
ICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiRG9tYWluLkV2ZW50Il9zKTsK
LSAgICByb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7CisgICAg
YXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAg
cHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiRG9tYWluLkV2ZW50
Il9zKTsKKyAgICByb3V0ZXIuc2VuZEV2ZW50KHByb3RvY29sX2pzb25NZXNzYWdlLT50b0pTT05T
dHJpbmcoKSk7CiB9CiAKIEBlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9kb21haW4tdGFyZ2V0VHlwZS1tYXRjaGlu
Zy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZG9tYWluLXRhcmdldFR5cGUtbWF0
Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24tcmVzdWx0CmluZGV4IGE3N2ZlMzU4OTc4
ODUzNDc1MDU2MjIzZTAxOWExYjBmYjFkNDdlNjguLjk0MmRjY2E4ZjI2MDFlYzY5NzJiYmM2MDk4
NGJkYzc1NTc0MWMzZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9kb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21h
aW4tZGVidWdnYWJsZVR5cGUuanNvbi1yZXN1bHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2RvbWFpbi10YXJnZXRUeXBlLW1hdGNo
aW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uLXJlc3VsdApAQCAtNzAsNyArNzAsNyBAQCBJ
bnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJEb21haW4iLCBbInBhZ2UiXSk7CiAKICNp
ZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIAotI2luY2x1ZGUgIlRl
c3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CiAjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KIApAQCAtODgs
NyArODgsNyBAQCBwcml2YXRlOgogY2xhc3MgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNo
ZXIgOiBwdWJsaWMgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewogcHVibGljOgogICAgIHZp
cnR1YWwgfkFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyKCkgeyB9Ci0gICAgdmlydHVh
bCB2b2lkIENvbW1hbmQobG9uZyBjYWxsSWQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgQ29tbWFu
ZChsb25nIHByb3RvY29sX2NhbGxJZCkgPSAwOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSW5zcGVj
dG9yCkBAIC0xMzAsMTEgKzEzMCwxNCBAQCBwdWJsaWM6CiAKICNpbmNsdWRlICJUZXN0UHJvdG9j
b2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx0dXBsZT4KKyNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4K
KyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5n
OworCiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIGNsYXNz
IEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyOwpAQCAtMTQyLDcgKzE0NSw3IEBAIGNs
YXNzIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyOwogCiBjbGFzcyBEb21haW5CYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXIgewogcHVibGljOgotICAgIHZpcnR1YWwgdm9pZCBDb21tYW5k
KEVycm9yU3RyaW5nJikgPSAwOworICAgIHZpcnR1YWwgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8
dm9pZD4gQ29tbWFuZCgpID0gMDsKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIH5Eb21haW5CYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXIoKTsKIH07CkBAIC0xNTAsOSArMTUzLDkgQEAgcHJvdGVjdGVk
OgogY2xhc3MgRG9tYWluQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgU3VwcGxlbWVu
dGFsQmFja2VuZERpc3BhdGNoZXIgewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8RG9tYWluQmFj
a2VuZERpc3BhdGNoZXI+IGNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYsIERvbWFpbkJhY2tlbmRE
aXNwYXRjaGVySGFuZGxlciopOwotICAgIHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNv
bnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpIGZpbmFsOwor
ICAgIHZvaWQgZGlzcGF0Y2gobG9uZyBwcm90b2NvbF9jYWxsSWQsIGNvbnN0IFN0cmluZyYgcHJv
dG9jb2xfbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX21lc3NhZ2UpIGZpbmFs
OwogcHJpdmF0ZToKLSAgICB2b2lkIENvbW1hbmQobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09O
OjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7CisgICAgdm9pZCBDb21tYW5kKGxvbmcgcHJvdG9jbF9j
YWxsSWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfcGFyYW1ldGVycyk7CiAjaWYg
RU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiBwdWJsaWM6CiAgICAgdm9p
ZCBzZXRBbHRlcm5hdGVEaXNwYXRjaGVyKEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVy
KiBhbHRlcm5hdGVEaXNwYXRjaGVyKSB7IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IGFsdGVybmF0
ZURpc3BhdGNoZXI7IH0KQEAgLTIwMSw5ICsyMDQsNyBAQCBwcml2YXRlOgogI2luY2x1ZGUgIlRl
c3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KICNpbmNs
dWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+
CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKICNpbmNsdWRl
ICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCkBAIC0yMjUsMzggKzIyNiwzOCBA
QCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6RG9tYWluQmFja2VuZERpc3BhdGNoZXIoQmFja2Vu
ZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYQogICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lz
dGVyRGlzcGF0Y2hlckZvckRvbWFpbigiRG9tYWluIl9zLCB0aGlzKTsKIH0KIAotdm9pZCBEb21h
aW5CYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmlu
ZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpCit2b2lkIERvbWFpbkJhY2tl
bmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHByb3RvY29sX2NhbGxJZCwgY29uc3QgU3RyaW5n
JiBwcm90b2NvbF9tZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfbWVzc2FnZSkK
IHsKICAgICBSZWY8RG9tYWluQmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOwogCi0g
ICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVyczsKLSAgICBtZXNzYWdlLT5nZXRPYmpl
Y3QoInBhcmFtcyJfcywgcGFyYW1ldGVycyk7CisgICAgYXV0byBwcm90b2NvbF9wYXJhbWV0ZXJz
ID0gcHJvdG9jb2xfbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3MpOwogCi0gICAgaWYgKG1l
dGhvZCA9PSAiQ29tbWFuZCIpIHsKLSAgICAgICAgQ29tbWFuZChyZXF1ZXN0SWQsIFdURk1vdmUo
cGFyYW1ldGVycykpOworICAgIGlmIChwcm90b2NvbF9tZXRob2QgPT0gIkNvbW1hbmQiKSB7Cisg
ICAgICAgIENvbW1hbmQocHJvdG9jb2xfY2FsbElkLCBXVEZNb3ZlKHByb3RvY29sX3BhcmFtZXRl
cnMpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1fYmFja2VuZERpc3BhdGNoZXIt
PnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAi
J0RvbWFpbi4iICsgbWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOworICAgIG1fYmFja2VuZERp
c3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5v
dEZvdW5kLCAiJ0RvbWFpbi4iICsgcHJvdG9jb2xfbWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIp
OwogfQogCi12b2lkIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpDb21tYW5kKGxvbmcgcmVxdWVz
dElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQordm9pZCBEb21haW5CYWNrZW5kRGlzcGF0Y2hl
cjo6Q29tbWFuZChsb25nIHByb3RvY29sX2NhbGxJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikK
IHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKICAgICBpZiAo
bV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+
Q29tbWFuZChyZXF1ZXN0SWQpOworICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPkNvbW1h
bmQocHJvdG9jb2xfY2FsbElkKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZiAvLyBF
TkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIAotICAgIEVycm9yU3RyaW5n
IGVycm9yOwotICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3Jl
YXRlKCk7Ci0gICAgbV9hZ2VudC0+Q29tbWFuZChlcnJvcik7CisgICAgYXV0byByZXN1bHQgPSBt
X2FnZW50LT5Db21tYW5kKCk7CisgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAgICAgQVNTRVJUKCFy
ZXN1bHQuZXJyb3IoKS5pc0VtcHR5KCkpOworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5y
ZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgcmVzdWx0
LmVycm9yKCkpOworICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgaWYgKCFlcnJvci5sZW5n
dGgoKSkKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJ
ZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tlbmRE
aXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJF
cnJvciwgV1RGTW92ZShlcnJvcikpOworICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBK
U09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNw
b25zZShwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJvdG9jb2xfanNvbk1lc3NhZ2UpLCBmYWxz
ZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgpAQCAtMjk3LDYgKzI5OCw3IEBAIHZv
aWQgRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkNvbW1hbmQobG9uZyByZXF1ZXN0SWQsIFJlZlB0
cjxKU09OOjpPYmplY3Q+JiYpCiAKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAj
aW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CkBA
IC0zNDksMTYgKzM1MSwxNSBAQCBwcml2YXRlOgogI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3Bh
dGNoZXJzLmgiCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJv
dXRlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3Bl
Y3RvciB7CiAKIHZvaWQgRG9tYWluRnJvbnRlbmREaXNwYXRjaGVyOjpFdmVudCgpCiB7Ci0gICAg
UmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwot
ICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRvbWFpbi5FdmVudCJfcyk7
CisgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7
CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiRG9tYWlu
LkV2ZW50Il9zKTsKIAotICAgIG1fZnJvbnRlbmRSb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdl
LT50b0pTT05TdHJpbmcoKSk7CisgICAgbV9mcm9udGVuZFJvdXRlci5zZW5kRXZlbnQocHJvdG9j
b2xfanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCkBAIC0zOTgsNyArMzk5LDkgQEAgdm9pZCBEb21haW5Gcm9udGVuZERpc3BhdGNoZXI6
OkV2ZW50KCkKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yUHJvdG9jb2xUeXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVk
ZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKQEAgLTQ1
Miw4ICs0NTUsNyBAQCBuYW1lc3BhY2UgUHJvdG9jb2wgewogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKIAotI2luY2x1ZGUgPHd0Zi9PcHRpb25h
bC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0
aW9ucy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtNTA5LDcgKzUxMSw3IEBAIGNs
YXNzIE9iakNJbnNwZWN0b3JEb21haW5CYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBB
bHRlcm5hdGVEb21haW5CYWNrZW5kCiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJs
aWM6CiAgICAgT2JqQ0luc3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyKGlkPFRlc3RQcm90
b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+IGhhbmRsZXIpIHsgbV9kZWxlZ2F0ZSA9IGhhbmRsZXI7
IH0KLSAgICB2b2lkIENvbW1hbmQobG9uZyByZXF1ZXN0SWQpIGZpbmFsOworICAgIHZvaWQgQ29t
bWFuZChsb25nIHByb3RvY29sX2NhbGxJZCkgZmluYWw7CiBwcml2YXRlOgogICAgIFJldGFpblB0
cjxpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPj4gbV9kZWxlZ2F0ZTsKIH07CkBA
IC01NTcsMjEgKzU1OSwyMiBAQCBwcml2YXRlOgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAot
dm9pZCBPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkNvbW1hbmQobG9uZyBy
ZXF1ZXN0SWQpCit2b2lkIE9iakNJbnNwZWN0b3JEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Q29t
bWFuZChsb25nIHByb3RvY29sX2NhbGxJZCkKIHsKICAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3Bv
bmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoQ29tbWFuZFdpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3ND
YWxsYmFjazopXSkgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2Nv
bEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0Rv
bWFpbi5Db21tYW5kJyB3YXMgbm90IGZvdW5kIl9zKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNo
ZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxsSWQsIEJhY2tlbmREaXNwYXRj
aGVyOjpNZXRob2ROb3RGb3VuZCwgIidEb21haW4uQ29tbWFuZCcgd2FzIG5vdCBmb3VuZCJfcyk7
CiAgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAq
ZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJv
cihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAg
ICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHByb3RvY29sX2Nh
bGxJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CiAgICAgICAgIGJh
Y2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgfTsKIAogICAgIGlk
IHN1Y2Nlc3NDYWxsYmFjayA9IF57Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRS
ZXNwb25zZShyZXF1ZXN0SWQsIEpTT046Ok9iamVjdDo6Y3JlYXRlKCksIGZhbHNlKTsKKyAgICAg
ICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Cisg
ICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShwcm90b2NvbF9jYWxsSWQs
IFdURk1vdmUocHJvdG9jb2xfanNvbk1lc3NhZ2UpLCBmYWxzZSk7CiAgICAgfTsKIAogICAgIFtt
X2RlbGVnYXRlIENvbW1hbmRXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3ND
YWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOwpAQCAtNzczLDkgKzc3Niw5IEBAIHVzaW5nIG5hbWVz
cGFjZSBJbnNwZWN0b3I7CiB7CiAgICAgY29uc3QgRnJvbnRlbmRSb3V0ZXImIHJvdXRlciA9IF9j
b250cm9sbGVyLT5mcm9udGVuZFJvdXRlcigpOwogCi0gICAgUmVmPEpTT046Ok9iamVjdD4ganNv
bk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIGpzb25NZXNzYWdlLT5zZXRT
dHJpbmcoIm1ldGhvZCJfcywgIkRvbWFpbi5FdmVudCJfcyk7Ci0gICAgcm91dGVyLnNlbmRFdmVu
dChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOworICAgIGF1dG8gcHJvdG9jb2xfanNvbk1l
c3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIHByb3RvY29sX2pzb25NZXNzYWdl
LT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRvbWFpbi5FdmVudCJfcyk7CisgICAgcm91dGVyLnNl
bmRFdmVudChwcm90b2NvbF9qc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwogfQogCiBAZW5k
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZXhwZWN0ZWQvZG9tYWluLXRhcmdldFR5cGVzLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2RvbWFpbi10YXJnZXRU
eXBlcy5qc29uLXJlc3VsdAppbmRleCAwYWQ2ZDA0NDYwMWMyZWE0MDgzODhiY2YyNTRmYzY2NTQ1
ZjdjZDA0Li44NDlmM2I3MjljYWNkOGI5ZjExNGM4YjliZmIyMTcxOTFkMjcyOTFmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0
ZWQvZG9tYWluLXRhcmdldFR5cGVzLmpzb24tcmVzdWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9kb21haW4tdGFyZ2V0VHlwZXMu
anNvbi1yZXN1bHQKQEAgLTcwLDcgKzcwLDcgQEAgSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURv
bWFpbigiRG9tYWluIiwgbnVsbCk7CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9E
SVNQQVRDSEVSUykKIAotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVkZSAi
VGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
RnJvbnRlbmRSb3V0ZXIuaD4KIApAQCAtODgsNyArODgsNyBAQCBwcml2YXRlOgogY2xhc3MgQWx0
ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIgOiBwdWJsaWMgQWx0ZXJuYXRlQmFja2VuZERp
c3BhdGNoZXIgewogcHVibGljOgogICAgIHZpcnR1YWwgfkFsdGVybmF0ZURvbWFpbkJhY2tlbmRE
aXNwYXRjaGVyKCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIENvbW1hbmQobG9uZyBjYWxsSWQpID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgQ29tbWFuZChsb25nIHByb3RvY29sX2NhbGxJZCkgPSAwOwog
fTsKIAogfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCkBAIC0xMzAsMTEgKzEzMCwxNCBAQCBwdWJs
aWM6CiAKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx0dXBsZT4K
KyNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAK
LXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FM
VEVSTkFURV9ESVNQQVRDSEVSUykKIGNsYXNzIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRj
aGVyOwpAQCAtMTQyLDcgKzE0NSw3IEBAIGNsYXNzIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNw
YXRjaGVyOwogCiBjbGFzcyBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewogcHVibGlj
OgotICAgIHZpcnR1YWwgdm9pZCBDb21tYW5kKEVycm9yU3RyaW5nJikgPSAwOworICAgIHZpcnR1
YWwgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gQ29tbWFuZCgpID0gMDsKIHByb3RlY3Rl
ZDoKICAgICB2aXJ0dWFsIH5Eb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKTsKIH07CkBA
IC0xNTAsOSArMTUzLDkgQEAgcHJvdGVjdGVkOgogY2xhc3MgRG9tYWluQmFja2VuZERpc3BhdGNo
ZXIgZmluYWwgOiBwdWJsaWMgU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIgewogcHVibGlj
OgogICAgIHN0YXRpYyBSZWY8RG9tYWluQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShCYWNrZW5k
RGlzcGF0Y2hlciYsIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwotICAgIHZvaWQg
ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6
T2JqZWN0PiYmIG1lc3NhZ2UpIGZpbmFsOworICAgIHZvaWQgZGlzcGF0Y2gobG9uZyBwcm90b2Nv
bF9jYWxsSWQsIGNvbnN0IFN0cmluZyYgcHJvdG9jb2xfbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0
PiYmIHByb3RvY29sX21lc3NhZ2UpIGZpbmFsOwogcHJpdmF0ZToKLSAgICB2b2lkIENvbW1hbmQo
bG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7CisgICAg
dm9pZCBDb21tYW5kKGxvbmcgcHJvdG9jbF9jYWxsSWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYg
cHJvdG9jb2xfcGFyYW1ldGVycyk7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElT
UEFUQ0hFUlMpCiBwdWJsaWM6CiAgICAgdm9pZCBzZXRBbHRlcm5hdGVEaXNwYXRjaGVyKEFsdGVy
bmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyKiBhbHRlcm5hdGVEaXNwYXRjaGVyKSB7IG1fYWx0
ZXJuYXRlRGlzcGF0Y2hlciA9IGFsdGVybmF0ZURpc3BhdGNoZXI7IH0KQEAgLTIwMSw5ICsyMDQs
NyBAQCBwcml2YXRlOgogI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKIAogI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVk
ZSA8d3RmL0pTT05WYWx1ZXMuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVS
TkFURV9ESVNQQVRDSEVSUykKICNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNo
ZXJzLmgiCkBAIC0yMjUsMzggKzIyNiwzOCBAQCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6RG9t
YWluQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYQogICAg
IG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbigiRG9tYWlu
Il9zLCB0aGlzKTsKIH0KIAotdm9pZCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2go
bG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYm
IG1lc3NhZ2UpCit2b2lkIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHBy
b3RvY29sX2NhbGxJZCwgY29uc3QgU3RyaW5nJiBwcm90b2NvbF9tZXRob2QsIFJlZjxKU09OOjpP
YmplY3Q+JiYgcHJvdG9jb2xfbWVzc2FnZSkKIHsKICAgICBSZWY8RG9tYWluQmFja2VuZERpc3Bh
dGNoZXI+IHByb3RlY3QoKnRoaXMpOwogCi0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1l
dGVyczsKLSAgICBtZXNzYWdlLT5nZXRPYmplY3QoInBhcmFtcyJfcywgcGFyYW1ldGVycyk7Cisg
ICAgYXV0byBwcm90b2NvbF9wYXJhbWV0ZXJzID0gcHJvdG9jb2xfbWVzc2FnZS0+Z2V0T2JqZWN0
KCJwYXJhbXMiX3MpOwogCi0gICAgaWYgKG1ldGhvZCA9PSAiQ29tbWFuZCIpIHsKLSAgICAgICAg
Q29tbWFuZChyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykpOworICAgIGlmIChwcm90b2Nv
bF9tZXRob2QgPT0gIkNvbW1hbmQiKSB7CisgICAgICAgIENvbW1hbmQocHJvdG9jb2xfY2FsbElk
LCBXVEZNb3ZlKHByb3RvY29sX3BhcmFtZXRlcnMpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAotICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERp
c3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RvbWFpbi4iICsgbWV0aG9kICsgIicgd2FzIG5v
dCBmb3VuZCIpOworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3Io
QmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RvbWFpbi4iICsgcHJvdG9jb2xf
bWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOwogfQogCi12b2lkIERvbWFpbkJhY2tlbmREaXNw
YXRjaGVyOjpDb21tYW5kKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQor
dm9pZCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Q29tbWFuZChsb25nIHByb3RvY29sX2NhbGxJ
ZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVS
TkFURV9ESVNQQVRDSEVSUykKICAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAg
ICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+Q29tbWFuZChyZXF1ZXN0SWQpOworICAgICAgICBt
X2FsdGVybmF0ZURpc3BhdGNoZXItPkNvbW1hbmQocHJvdG9jb2xfY2FsbElkKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KICNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQ
QVRDSEVSUykKIAotICAgIEVycm9yU3RyaW5nIGVycm9yOwotICAgIFJlZjxKU09OOjpPYmplY3Q+
IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgbV9hZ2VudC0+Q29tbWFuZChl
cnJvcik7CisgICAgYXV0byByZXN1bHQgPSBtX2FnZW50LT5Db21tYW5kKCk7CisgICAgaWYgKCFy
ZXN1bHQpIHsKKyAgICAgICAgQVNTRVJUKCFyZXN1bHQuZXJyb3IoKS5pc0VtcHR5KCkpOworICAg
ICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNw
YXRjaGVyOjpTZXJ2ZXJFcnJvciwgcmVzdWx0LmVycm9yKCkpOworICAgICAgICByZXR1cm47Cisg
ICAgfQogCi0gICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0
Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7Ci0g
ICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9y
KEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOworICAgIGF1
dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIG1f
YmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUo
cHJvdG9jb2xfanNvbk1lc3NhZ2UpLCBmYWxzZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEluc3Bl
Y3RvcgpAQCAtMjk3LDYgKzI5OCw3IEBAIHZvaWQgRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkNv
bW1hbmQobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCiAKICNpbmNsdWRl
ICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNp
bmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
IAogbmFtZXNwYWNlIEluc3BlY3RvciB7CkBAIC0zNDksMTYgKzM1MSwxNSBAQCBwcml2YXRlOgog
I2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCiAKICNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKIHZvaWQgRG9tYWluRnJvbnRlbmRE
aXNwYXRjaGVyOjpFdmVudCgpCiB7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2Ug
PSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1l
dGhvZCJfcywgIkRvbWFpbi5FdmVudCJfcyk7CisgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2Fn
ZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNl
dFN0cmluZygibWV0aG9kIl9zLCAiRG9tYWluLkV2ZW50Il9zKTsKIAotICAgIG1fZnJvbnRlbmRS
b3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7CisgICAgbV9mcm9u
dGVuZFJvdXRlci5zZW5kRXZlbnQocHJvdG9jb2xfanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygp
KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCkBAIC0zOTgsNyArMzk5LDkgQEAgdm9p
ZCBEb21haW5Gcm9udGVuZERpc3BhdGNoZXI6OkV2ZW50KCkKICNwcmFnbWEgb25jZQogCiAjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgotI2luY2x1ZGUg
PHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRl
IDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFt
ZXNwYWNlIEluc3BlY3RvciB7CiAKQEAgLTQ1Miw4ICs0NTUsNyBAQCBuYW1lc3BhY2UgUHJvdG9j
b2wgewogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMu
aCIKIAotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJp
bmcuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9y
IHsKIApAQCAtNTA5LDcgKzUxMSw3IEBAIGNsYXNzIE9iakNJbnNwZWN0b3JEb21haW5CYWNrZW5k
RGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBBbHRlcm5hdGVEb21haW5CYWNrZW5kCiAgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgT2JqQ0luc3BlY3RvckRvbWFpbkJh
Y2tlbmREaXNwYXRjaGVyKGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+IGhhbmRs
ZXIpIHsgbV9kZWxlZ2F0ZSA9IGhhbmRsZXI7IH0KLSAgICB2b2lkIENvbW1hbmQobG9uZyByZXF1
ZXN0SWQpIGZpbmFsOworICAgIHZvaWQgQ29tbWFuZChsb25nIHByb3RvY29sX2NhbGxJZCkgZmlu
YWw7CiBwcml2YXRlOgogICAgIFJldGFpblB0cjxpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5I
YW5kbGVyPj4gbV9kZWxlZ2F0ZTsKIH07CkBAIC01NTcsMjEgKzU1OSwyMiBAQCBwcml2YXRlOgog
CiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAotdm9pZCBPYmpDSW5zcGVjdG9yRG9tYWluQmFja2Vu
ZERpc3BhdGNoZXI6OkNvbW1hbmQobG9uZyByZXF1ZXN0SWQpCit2b2lkIE9iakNJbnNwZWN0b3JE
b21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Q29tbWFuZChsb25nIHByb3RvY29sX2NhbGxJZCkKIHsK
ICAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoQ29tbWFu
ZFdpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazopXSkgewotICAgICAgICBiYWNrZW5k
RGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3Bh
dGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RvbWFpbi5Db21tYW5kJyB3YXMgbm90IGZvdW5kIl9z
KTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90
b2NvbF9jYWxsSWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEb21haW4u
Q29tbWFuZCcgd2FzIG5vdCBmb3VuZCJfcyk7CiAgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCkt
PnNlbmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZCBl
cnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERpc3Bh
dGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVy
OjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBv
cnRQcm90b2NvbEVycm9yKHByb3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZl
ckVycm9yLCBlcnJvcik7CiAgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5n
RXJyb3JzKCk7CiAgICAgfTsKIAogICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF57Ci0gICAgICAg
IGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIEpTT046Ok9iamVj
dDo6Y3JlYXRlKCksIGZhbHNlKTsKKyAgICAgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9
IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNl
bmRSZXNwb25zZShwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJvdG9jb2xfanNvbk1lc3NhZ2Up
LCBmYWxzZSk7CiAgICAgfTsKIAogICAgIFttX2RlbGVnYXRlIENvbW1hbmRXaXRoRXJyb3JDYWxs
YmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOwpAQCAt
NzczLDkgKzc3Niw5IEBAIHVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CiB7CiAgICAgY29uc3Qg
RnJvbnRlbmRSb3V0ZXImIHJvdXRlciA9IF9jb250cm9sbGVyLT5mcm9udGVuZFJvdXRlcigpOwog
Ci0gICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0
ZSgpOwotICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRvbWFpbi5FdmVu
dCJfcyk7Ci0gICAgcm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkp
OworICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgp
OworICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRvbWFp
bi5FdmVudCJfcyk7CisgICAgcm91dGVyLnNlbmRFdmVudChwcm90b2NvbF9qc29uTWVzc2FnZS0+
dG9KU09OU3RyaW5nKCkpOwogfQogCiBAZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZG9tYWlucy13aXRoLXZhcnlp
bmctY29tbWFuZC1zaXplcy5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9kb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5k
LXNpemVzLmpzb24tcmVzdWx0CmluZGV4IDQ3NWI4N2JkMGM4ZGE4NTJiNWY5OTBjYjIxY2IzYzJl
MDc2MDk5ODQuLjQxOWY5MmVkYTEzYWVjMjJkOGY0YWYyYWYxN2YwNWY3NWQyNDFhNzkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBl
Y3RlZC9kb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24tcmVzdWx0CisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9k
b21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24tcmVzdWx0CkBAIC03OSw3ICs3
OSw3IEBAIEluc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIk5ldHdvcmszIiwgbnVsbCk7
CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIAotI2luY2x1
ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5o
IgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+
CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KIApA
QCAtOTcsMTkgKzk3LDE5IEBAIHByaXZhdGU6CiBjbGFzcyBBbHRlcm5hdGVOZXR3b3JrMUJhY2tl
bmREaXNwYXRjaGVyIDogcHVibGljIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIH5BbHRlcm5hdGVOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyKCkgeyB9
Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTEobG9uZyBjYWxsSWQpID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlMShsb25nIHByb3RvY29sX2NhbGxJZCkgPSAwOwogfTsK
IAogY2xhc3MgQWx0ZXJuYXRlTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlciA6IHB1YmxpYyBBbHRl
cm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+QWx0ZXJuYXRl
TmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcigpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVz
b3VyY2UxKGxvbmcgY2FsbElkKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTIo
bG9uZyBjYWxsSWQpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlMyhsb25nIGNh
bGxJZCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2U0KGxvbmcgY2FsbElkKSA9
IDA7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTUobG9uZyBjYWxsSWQpID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlNihsb25nIGNhbGxJZCkgPSAwOwotICAgIHZpcnR1
YWwgdm9pZCBsb2FkUmVzb3VyY2U3KGxvbmcgY2FsbElkKSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IGxvYWRSZXNvdXJjZTEobG9uZyBwcm90b2NvbF9jYWxsSWQpID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgbG9hZFJlc291cmNlMihsb25nIHByb3RvY29sX2NhbGxJZCkgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBsb2FkUmVzb3VyY2UzKGxvbmcgcHJvdG9jb2xfY2FsbElkKSA9IDA7CisgICAgdmlydHVh
bCB2b2lkIGxvYWRSZXNvdXJjZTQobG9uZyBwcm90b2NvbF9jYWxsSWQpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgbG9hZFJlc291cmNlNShsb25nIHByb3RvY29sX2NhbGxJZCkgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBsb2FkUmVzb3VyY2U2KGxvbmcgcHJvdG9jb2xfY2FsbElkKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTcobG9uZyBwcm90b2NvbF9jYWxsSWQpID0gMDsKIH07
CiAKIH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgpAQCAtMTUxLDExICsxNTEsMTQgQEAgcHVibGlj
OgogCiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8dHVwbGU+Cisj
aW5jbHVkZSA8d3RmL0V4cGVjdGVkLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCi10
eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKwogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRF
Uk5BVEVfRElTUEFUQ0hFUlMpCiBjbGFzcyBBbHRlcm5hdGVOZXR3b3JrMUJhY2tlbmREaXNwYXRj
aGVyOwpAQCAtMTY0LDIwICsxNjcsMjAgQEAgY2xhc3MgQWx0ZXJuYXRlTmV0d29yazNCYWNrZW5k
RGlzcGF0Y2hlcjsKIAogY2xhc3MgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewog
cHVibGljOgotICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UxKEVycm9yU3RyaW5nJikgPSAw
OworICAgIHZpcnR1YWwgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gbG9hZFJlc291cmNl
MSgpID0gMDsKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIH5OZXR3b3JrMUJhY2tlbmREaXNwYXRj
aGVySGFuZGxlcigpOwogfTsKIAogY2xhc3MgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXIgewogcHVibGljOgotICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UxKEVycm9yU3RyaW5n
JikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UyKEVycm9yU3RyaW5nJikgPSAw
OwotICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UzKEVycm9yU3RyaW5nJikgPSAwOwotICAg
IHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2U0KEVycm9yU3RyaW5nJikgPSAwOwotICAgIHZpcnR1
YWwgdm9pZCBsb2FkUmVzb3VyY2U1KEVycm9yU3RyaW5nJikgPSAwOwotICAgIHZpcnR1YWwgdm9p
ZCBsb2FkUmVzb3VyY2U2KEVycm9yU3RyaW5nJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBsb2Fk
UmVzb3VyY2U3KEVycm9yU3RyaW5nJikgPSAwOworICAgIHZpcnR1YWwgUHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8dm9pZD4gbG9hZFJlc291cmNlMSgpID0gMDsKKyAgICB2aXJ0dWFsIFByb3RvY29s
OjpFcnJvclN0cmluZ09yPHZvaWQ+IGxvYWRSZXNvdXJjZTIoKSA9IDA7CisgICAgdmlydHVhbCBQ
cm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBsb2FkUmVzb3VyY2UzKCkgPSAwOworICAgIHZp
cnR1YWwgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gbG9hZFJlc291cmNlNCgpID0gMDsK
KyAgICB2aXJ0dWFsIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGxvYWRSZXNvdXJjZTUo
KSA9IDA7CisgICAgdmlydHVhbCBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBsb2FkUmVz
b3VyY2U2KCkgPSAwOworICAgIHZpcnR1YWwgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4g
bG9hZFJlc291cmNlNygpID0gMDsKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIH5OZXR3b3JrM0Jh
Y2tlbmREaXNwYXRjaGVySGFuZGxlcigpOwogfTsKQEAgLTE4NSw5ICsxODgsOSBAQCBwcm90ZWN0
ZWQ6CiBjbGFzcyBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIFN1cHBs
ZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPE5ldHdv
cmsxQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYsIE5ldHdvcmsx
QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7Ci0gICAgdm9pZCBkaXNwYXRjaChsb25nIHJlcXVl
c3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkg
ZmluYWw7CisgICAgdm9pZCBkaXNwYXRjaChsb25nIHByb3RvY29sX2NhbGxJZCwgY29uc3QgU3Ry
aW5nJiBwcm90b2NvbF9tZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfbWVzc2Fn
ZSkgZmluYWw7CiBwcml2YXRlOgotICAgIHZvaWQgbG9hZFJlc291cmNlMShsb25nIHJlcXVlc3RJ
ZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKKyAgICB2b2lkIGxvYWRSZXNv
dXJjZTEobG9uZyBwcm90b2NsX2NhbGxJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwcm90b2Nv
bF9wYXJhbWV0ZXJzKTsKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVS
UykKIHB1YmxpYzoKICAgICB2b2lkIHNldEFsdGVybmF0ZURpc3BhdGNoZXIoQWx0ZXJuYXRlTmV0
d29yazFCYWNrZW5kRGlzcGF0Y2hlciogYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeyBtX2FsdGVybmF0
ZURpc3BhdGNoZXIgPSBhbHRlcm5hdGVEaXNwYXRjaGVyOyB9CkBAIC0yMDIsMTUgKzIwNSwxNSBA
QCBwcml2YXRlOgogY2xhc3MgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1Ymxp
YyBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJl
ZjxOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImLCBO
ZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwotICAgIHZvaWQgZGlzcGF0Y2gobG9u
ZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1l
c3NhZ2UpIGZpbmFsOworICAgIHZvaWQgZGlzcGF0Y2gobG9uZyBwcm90b2NvbF9jYWxsSWQsIGNv
bnN0IFN0cmluZyYgcHJvdG9jb2xfbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29s
X21lc3NhZ2UpIGZpbmFsOwogcHJpdmF0ZToKLSAgICB2b2lkIGxvYWRSZXNvdXJjZTEobG9uZyBy
ZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7Ci0gICAgdm9pZCBs
b2FkUmVzb3VyY2UyKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFt
ZXRlcnMpOwotICAgIHZvaWQgbG9hZFJlc291cmNlMyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpT
T046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKLSAgICB2b2lkIGxvYWRSZXNvdXJjZTQobG9uZyBy
ZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7Ci0gICAgdm9pZCBs
b2FkUmVzb3VyY2U1KGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFt
ZXRlcnMpOwotICAgIHZvaWQgbG9hZFJlc291cmNlNihsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpT
T046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKLSAgICB2b2lkIGxvYWRSZXNvdXJjZTcobG9uZyBy
ZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7CisgICAgdm9pZCBs
b2FkUmVzb3VyY2UxKGxvbmcgcHJvdG9jbF9jYWxsSWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYg
cHJvdG9jb2xfcGFyYW1ldGVycyk7CisgICAgdm9pZCBsb2FkUmVzb3VyY2UyKGxvbmcgcHJvdG9j
bF9jYWxsSWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfcGFyYW1ldGVycyk7Cisg
ICAgdm9pZCBsb2FkUmVzb3VyY2UzKGxvbmcgcHJvdG9jbF9jYWxsSWQsIFJlZlB0cjxKU09OOjpP
YmplY3Q+JiYgcHJvdG9jb2xfcGFyYW1ldGVycyk7CisgICAgdm9pZCBsb2FkUmVzb3VyY2U0KGxv
bmcgcHJvdG9jbF9jYWxsSWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfcGFyYW1l
dGVycyk7CisgICAgdm9pZCBsb2FkUmVzb3VyY2U1KGxvbmcgcHJvdG9jbF9jYWxsSWQsIFJlZlB0
cjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfcGFyYW1ldGVycyk7CisgICAgdm9pZCBsb2FkUmVz
b3VyY2U2KGxvbmcgcHJvdG9jbF9jYWxsSWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcHJvdG9j
b2xfcGFyYW1ldGVycyk7CisgICAgdm9pZCBsb2FkUmVzb3VyY2U3KGxvbmcgcHJvdG9jbF9jYWxs
SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfcGFyYW1ldGVycyk7CiAjaWYgRU5B
QkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiBwdWJsaWM6CiAgICAgdm9pZCBz
ZXRBbHRlcm5hdGVEaXNwYXRjaGVyKEFsdGVybmF0ZU5ldHdvcmszQmFja2VuZERpc3BhdGNoZXIq
IGFsdGVybmF0ZURpc3BhdGNoZXIpIHsgbV9hbHRlcm5hdGVEaXNwYXRjaGVyID0gYWx0ZXJuYXRl
RGlzcGF0Y2hlcjsgfQpAQCAtMjU5LDkgKzI2Miw3IEBAIHByaXZhdGU6CiAjaW5jbHVkZSAiVGVz
dEJhY2tlbmREaXNwYXRjaGVycy5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgogI2luY2x1
ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
IAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogI2luY2x1ZGUg
IlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKQEAgLTI4NCwzOCArMjg1LDM4IEBA
IE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI6Ok5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIoQmFj
a2VuZERpc3BhdGNoZXImIGJhY2tlbmRECiAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0
ZXJEaXNwYXRjaGVyRm9yRG9tYWluKCJOZXR3b3JrMSJfcywgdGhpcyk7CiB9CiAKLXZvaWQgTmV0
d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0
cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpCit2b2lkIE5ldHdvcmsx
QmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBjb25zdCBT
dHJpbmcmIHByb3RvY29sX21ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9tZXNz
YWdlKQogewogICAgIFJlZjxOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlz
KTsKIAotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnM7Ci0gICAgbWVzc2FnZS0+
Z2V0T2JqZWN0KCJwYXJhbXMiX3MsIHBhcmFtZXRlcnMpOworICAgIGF1dG8gcHJvdG9jb2xfcGFy
YW1ldGVycyA9IHByb3RvY29sX21lc3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9zKTsKIAotICAg
IGlmIChtZXRob2QgPT0gImxvYWRSZXNvdXJjZTEiKSB7Ci0gICAgICAgIGxvYWRSZXNvdXJjZTEo
cmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKKyAgICBpZiAocHJvdG9jb2xfbWV0aG9k
ID09ICJsb2FkUmVzb3VyY2UxIikgeworICAgICAgICBsb2FkUmVzb3VyY2UxKHByb3RvY29sX2Nh
bGxJZCwgV1RGTW92ZShwcm90b2NvbF9wYXJhbWV0ZXJzKSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tl
bmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidOZXR3b3JrMS4iICsgbWV0aG9kICsgIicg
d2FzIG5vdCBmb3VuZCIpOworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29s
RXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdvcmsxLiIgKyBw
cm90b2NvbF9tZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7CiB9CiAKLXZvaWQgTmV0d29yazFC
YWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMShsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpT
T046Ok9iamVjdD4mJikKK3ZvaWQgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291
cmNlMShsb25nIHByb3RvY29sX2NhbGxJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikKIHsKICNp
ZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKICAgICBpZiAobV9hbHRl
cm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJl
c291cmNlMShyZXF1ZXN0SWQpOworICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmxvYWRS
ZXNvdXJjZTEocHJvdG9jb2xfY2FsbElkKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRp
ZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIAotICAgIEVycm9y
U3RyaW5nIGVycm9yOwotICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9iamVj
dDo6Y3JlYXRlKCk7Ci0gICAgbV9hZ2VudC0+bG9hZFJlc291cmNlMShlcnJvcik7CisgICAgYXV0
byByZXN1bHQgPSBtX2FnZW50LT5sb2FkUmVzb3VyY2UxKCk7CisgICAgaWYgKCFyZXN1bHQpIHsK
KyAgICAgICAgQVNTRVJUKCFyZXN1bHQuZXJyb3IoKS5pc0VtcHR5KCkpOworICAgICAgICBtX2Jh
Y2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpT
ZXJ2ZXJFcnJvciwgcmVzdWx0LmVycm9yKCkpOworICAgICAgICByZXR1cm47CisgICAgfQogCi0g
ICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2Vu
ZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7Ci0gICAgZWxzZQot
ICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmRE
aXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOworICAgIGF1dG8gcHJvdG9j
b2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIG1fYmFja2VuZERp
c3BhdGNoZXItPnNlbmRSZXNwb25zZShwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJvdG9jb2xf
anNvbk1lc3NhZ2UpLCBmYWxzZSk7CiB9CiAKIFJlZjxOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVy
PiBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImIGJh
Y2tlbmREaXNwYXRjaGVyLCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQp
CkBAIC0zMzAsMTQgKzMzMSwxMyBAQCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpOZXR3b3Jr
M0JhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRAogICAgIG1fYmFj
a2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbigiTmV0d29yazMiX3Ms
IHRoaXMpOwogfQogCi12b2lkIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxv
bmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBt
ZXNzYWdlKQordm9pZCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHBy
b3RvY29sX2NhbGxJZCwgY29uc3QgU3RyaW5nJiBwcm90b2NvbF9tZXRob2QsIFJlZjxKU09OOjpP
YmplY3Q+JiYgcHJvdG9jb2xfbWVzc2FnZSkKIHsKICAgICBSZWY8TmV0d29yazNCYWNrZW5kRGlz
cGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7CiAKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJh
bWV0ZXJzOwotICAgIG1lc3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9zLCBwYXJhbWV0ZXJzKTsK
KyAgICBhdXRvIHByb3RvY29sX3BhcmFtZXRlcnMgPSBwcm90b2NvbF9tZXNzYWdlLT5nZXRPYmpl
Y3QoInBhcmFtcyJfcyk7CiAKLSAgICB1c2luZyBDYWxsSGFuZGxlciA9IHZvaWQgKE5ldHdvcmsz
QmFja2VuZERpc3BhdGNoZXI6OiopKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0
PiYmIG1lc3NhZ2UpOworICAgIHVzaW5nIENhbGxIYW5kbGVyID0gdm9pZCAoTmV0d29yazNCYWNr
ZW5kRGlzcGF0Y2hlcjo6KikobG9uZyBwcm90b2NvbF9jYWxsSWQsIFJlZlB0cjxKU09OOjpPYmpl
Y3Q+JiYgcHJvdG9jb2xfbWVzc2FnZSk7CiAgICAgdXNpbmcgRGlzcGF0Y2hNYXAgPSBIYXNoTWFw
PFN0cmluZywgQ2FsbEhhbmRsZXI+OwogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxEaXNwYXRj
aE1hcD4gZGlzcGF0Y2hNYXA7CiAgICAgaWYgKGRpc3BhdGNoTWFwLmdldCgpLmlzRW1wdHkoKSkg
ewpAQCAtMzU4LDE0NiArMzU4LDE1MyBAQCB2b2lkIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6
OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUgogICAgICAg
ICAgICAgZGlzcGF0Y2hNYXAuZ2V0KCkuYWRkKGNvbW1hbmRzW2ldLm5hbWUsIGNvbW1hbmRzW2ld
LmhhbmRsZXIpOwogICAgIH0KIAotICAgIGF1dG8gZmluZFJlc3VsdCA9IGRpc3BhdGNoTWFwLmdl
dCgpLmZpbmQobWV0aG9kKTsKKyAgICBhdXRvIGZpbmRSZXN1bHQgPSBkaXNwYXRjaE1hcC5nZXQo
KS5maW5kKHByb3RvY29sX21ldGhvZCk7CiAgICAgaWYgKGZpbmRSZXN1bHQgPT0gZGlzcGF0Y2hN
YXAuZ2V0KCkuZW5kKCkpIHsKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJv
dG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29yazMu
IiArIG1ldGhvZCArICInIHdhcyBub3QgZm91bmQiKTsKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0
Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91
bmQsICInTmV0d29yazMuIiArIHByb3RvY29sX21ldGhvZCArICInIHdhcyBub3QgZm91bmQiKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgICgoKnRoaXMpLipmaW5kUmVzdWx0LT52YWx1
ZSkocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKKyAgICAoKCp0aGlzKS4qZmluZFJl
c3VsdC0+dmFsdWUpKHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9wYXJhbWV0ZXJz
KSk7CiB9CiAKLXZvaWQgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMShs
b25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikKK3ZvaWQgTmV0d29yazNCYWNr
ZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMShsb25nIHByb3RvY29sX2NhbGxJZCwgUmVmUHRy
PEpTT046Ok9iamVjdD4mJikKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQ
QVRDSEVSUykKICAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0
ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJlc291cmNlMShyZXF1ZXN0SWQpOworICAgICAgICBtX2Fs
dGVybmF0ZURpc3BhdGNoZXItPmxvYWRSZXNvdXJjZTEocHJvdG9jb2xfY2FsbElkKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KICNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9E
SVNQQVRDSEVSUykKIAotICAgIEVycm9yU3RyaW5nIGVycm9yOwotICAgIFJlZjxKU09OOjpPYmpl
Y3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgbV9hZ2VudC0+bG9hZFJl
c291cmNlMShlcnJvcik7CisgICAgYXV0byByZXN1bHQgPSBtX2FnZW50LT5sb2FkUmVzb3VyY2Ux
KCk7CisgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAgICAgQVNTRVJUKCFyZXN1bHQuZXJyb3IoKS5p
c0VtcHR5KCkpOworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVy
cm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgcmVzdWx0LmVycm9yKCkpOworICAg
ICAgICByZXR1cm47CisgICAgfQogCi0gICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKLSAgICAgICAg
bV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1
bHQpLCBmYWxzZSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBv
cnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShl
cnJvcikpOworICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNy
ZWF0ZSgpOworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShwcm90b2NvbF9j
YWxsSWQsIFdURk1vdmUocHJvdG9jb2xfanNvbk1lc3NhZ2UpLCBmYWxzZSk7CiB9CiAKLXZvaWQg
TmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMihsb25nIHJlcXVlc3RJZCwg
UmVmUHRyPEpTT046Ok9iamVjdD4mJikKK3ZvaWQgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6
bG9hZFJlc291cmNlMihsb25nIHByb3RvY29sX2NhbGxJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4m
JikKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKICAgICBp
ZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hl
ci0+bG9hZFJlc291cmNlMihyZXF1ZXN0SWQpOworICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNo
ZXItPmxvYWRSZXNvdXJjZTIocHJvdG9jb2xfY2FsbElkKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KICNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIAot
ICAgIEVycm9yU3RyaW5nIGVycm9yOwotICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpT
T046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgbV9hZ2VudC0+bG9hZFJlc291cmNlMihlcnJvcik7
CisgICAgYXV0byByZXN1bHQgPSBtX2FnZW50LT5sb2FkUmVzb3VyY2UyKCk7CisgICAgaWYgKCFy
ZXN1bHQpIHsKKyAgICAgICAgQVNTRVJUKCFyZXN1bHQuZXJyb3IoKS5pc0VtcHR5KCkpOworICAg
ICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNw
YXRjaGVyOjpTZXJ2ZXJFcnJvciwgcmVzdWx0LmVycm9yKCkpOworICAgICAgICByZXR1cm47Cisg
ICAgfQogCi0gICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0
Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7Ci0g
ICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9y
KEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOworICAgIGF1
dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIG1f
YmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUo
cHJvdG9jb2xfanNvbk1lc3NhZ2UpLCBmYWxzZSk7CiB9CiAKLXZvaWQgTmV0d29yazNCYWNrZW5k
RGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9i
amVjdD4mJikKK3ZvaWQgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMyhs
b25nIHByb3RvY29sX2NhbGxJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikKIHsKICNpZiBFTkFC
TEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKICAgICBpZiAobV9hbHRlcm5hdGVE
aXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJlc291cmNl
MyhyZXF1ZXN0SWQpOworICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmxvYWRSZXNvdXJj
ZTMocHJvdG9jb2xfY2FsbElkKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZiAvLyBF
TkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIAotICAgIEVycm9yU3RyaW5n
IGVycm9yOwotICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3Jl
YXRlKCk7Ci0gICAgbV9hZ2VudC0+bG9hZFJlc291cmNlMyhlcnJvcik7CisgICAgYXV0byByZXN1
bHQgPSBtX2FnZW50LT5sb2FkUmVzb3VyY2UzKCk7CisgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAg
ICAgQVNTRVJUKCFyZXN1bHQuZXJyb3IoKS5pc0VtcHR5KCkpOworICAgICAgICBtX2JhY2tlbmRE
aXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJF
cnJvciwgcmVzdWx0LmVycm9yKCkpOworICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgaWYg
KCFlcnJvci5sZW5ndGgoKSkKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3Bv
bnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7Ci0gICAgZWxzZQotICAgICAg
ICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRj
aGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOworICAgIGF1dG8gcHJvdG9jb2xfanNv
bk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIG1fYmFja2VuZERpc3BhdGNo
ZXItPnNlbmRSZXNwb25zZShwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJvdG9jb2xfanNvbk1l
c3NhZ2UpLCBmYWxzZSk7CiB9CiAKLXZvaWQgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9h
ZFJlc291cmNlNChsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikKK3ZvaWQg
TmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNChsb25nIHByb3RvY29sX2Nh
bGxJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FM
VEVSTkFURV9ESVNQQVRDSEVSUykKICAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0g
ICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJlc291cmNlNChyZXF1ZXN0SWQpOwor
ICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmxvYWRSZXNvdXJjZTQocHJvdG9jb2xfY2Fs
bElkKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9S
X0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIAotICAgIEVycm9yU3RyaW5nIGVycm9yOwotICAgIFJl
ZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgbV9h
Z2VudC0+bG9hZFJlc291cmNlNChlcnJvcik7CisgICAgYXV0byByZXN1bHQgPSBtX2FnZW50LT5s
b2FkUmVzb3VyY2U0KCk7CisgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAgICAgQVNTRVJUKCFyZXN1
bHQuZXJyb3IoKS5pc0VtcHR5KCkpOworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBv
cnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgcmVzdWx0LmVy
cm9yKCkpOworICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgaWYgKCFlcnJvci5sZW5ndGgo
KSkKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwg
V1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNw
YXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJv
ciwgV1RGTW92ZShlcnJvcikpOworICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09O
OjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25z
ZShwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJvdG9jb2xfanNvbk1lc3NhZ2UpLCBmYWxzZSk7
CiB9CiAKLXZvaWQgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNShsb25n
IHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikKK3ZvaWQgTmV0d29yazNCYWNrZW5k
RGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNShsb25nIHByb3RvY29sX2NhbGxJZCwgUmVmUHRyPEpT
T046Ok9iamVjdD4mJikKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRD
SEVSUykKICAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJu
YXRlRGlzcGF0Y2hlci0+bG9hZFJlc291cmNlNShyZXF1ZXN0SWQpOworICAgICAgICBtX2FsdGVy
bmF0ZURpc3BhdGNoZXItPmxvYWRSZXNvdXJjZTUocHJvdG9jb2xfY2FsbElkKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KICNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQ
QVRDSEVSUykKIAotICAgIEVycm9yU3RyaW5nIGVycm9yOwotICAgIFJlZjxKU09OOjpPYmplY3Q+
IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgbV9hZ2VudC0+bG9hZFJlc291
cmNlNShlcnJvcik7CisgICAgYXV0byByZXN1bHQgPSBtX2FnZW50LT5sb2FkUmVzb3VyY2U1KCk7
CisgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAgICAgQVNTRVJUKCFyZXN1bHQuZXJyb3IoKS5pc0Vt
cHR5KCkpOworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9y
KEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgcmVzdWx0LmVycm9yKCkpOworICAgICAg
ICByZXR1cm47CisgICAgfQogCi0gICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKLSAgICAgICAgbV9i
YWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQp
LCBmYWxzZSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQ
cm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJv
cikpOworICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0
ZSgpOworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShwcm90b2NvbF9jYWxs
SWQsIFdURk1vdmUocHJvdG9jb2xfanNvbk1lc3NhZ2UpLCBmYWxzZSk7CiB9CiAKLXZvaWQgTmV0
d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNihsb25nIHJlcXVlc3RJZCwgUmVm
UHRyPEpTT046Ok9iamVjdD4mJikKK3ZvaWQgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9h
ZFJlc291cmNlNihsb25nIHByb3RvY29sX2NhbGxJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikK
IHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKICAgICBpZiAo
bV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+
bG9hZFJlc291cmNlNihyZXF1ZXN0SWQpOworICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXIt
PmxvYWRSZXNvdXJjZTYocHJvdG9jb2xfY2FsbElkKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
ICNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIAotICAg
IEVycm9yU3RyaW5nIGVycm9yOwotICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046
Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgbV9hZ2VudC0+bG9hZFJlc291cmNlNihlcnJvcik7Cisg
ICAgYXV0byByZXN1bHQgPSBtX2FnZW50LT5sb2FkUmVzb3VyY2U2KCk7CisgICAgaWYgKCFyZXN1
bHQpIHsKKyAgICAgICAgQVNTRVJUKCFyZXN1bHQuZXJyb3IoKS5pc0VtcHR5KCkpOworICAgICAg
ICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRj
aGVyOjpTZXJ2ZXJFcnJvciwgcmVzdWx0LmVycm9yKCkpOworICAgICAgICByZXR1cm47CisgICAg
fQogCi0gICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7Ci0gICAg
ZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJh
Y2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOworICAgIGF1dG8g
cHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIG1fYmFj
a2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJv
dG9jb2xfanNvbk1lc3NhZ2UpLCBmYWxzZSk7CiB9CiAKLXZvaWQgTmV0d29yazNCYWNrZW5kRGlz
cGF0Y2hlcjo6bG9hZFJlc291cmNlNyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVj
dD4mJikKK3ZvaWQgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNyhsb25n
IHByb3RvY29sX2NhbGxJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikKIHsKICNpZiBFTkFCTEUo
SU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKICAgICBpZiAobV9hbHRlcm5hdGVEaXNw
YXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJlc291cmNlNyhy
ZXF1ZXN0SWQpOworICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmxvYWRSZXNvdXJjZTco
cHJvdG9jb2xfY2FsbElkKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZiAvLyBFTkFC
TEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIAotICAgIEVycm9yU3RyaW5nIGVy
cm9yOwotICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRl
KCk7Ci0gICAgbV9hZ2VudC0+bG9hZFJlc291cmNlNyhlcnJvcik7CisgICAgYXV0byByZXN1bHQg
PSBtX2FnZW50LT5sb2FkUmVzb3VyY2U3KCk7CisgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAgICAg
QVNTRVJUKCFyZXN1bHQuZXJyb3IoKS5pc0VtcHR5KCkpOworICAgICAgICBtX2JhY2tlbmREaXNw
YXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJv
ciwgcmVzdWx0LmVycm9yKCkpOworICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgaWYgKCFl
cnJvci5sZW5ndGgoKSkKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNl
KHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7Ci0gICAgZWxzZQotICAgICAgICBt
X2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVy
OjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOworICAgIGF1dG8gcHJvdG9jb2xfanNvbk1l
c3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIG1fYmFja2VuZERpc3BhdGNoZXIt
PnNlbmRSZXNwb25zZShwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJvdG9jb2xfanNvbk1lc3Nh
Z2UpLCBmYWxzZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgpAQCAtNTM4LDYgKzU0
NSw3IEBAIHZvaWQgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNyhsb25n
IHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjCiAKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xP
YmplY3RzLmgiCiAjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvT3B0
aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIElu
c3BlY3RvciB7CkBAIC01ODEsNyArNTg5LDYgQEAgY2xhc3MgRnJvbnRlbmRSb3V0ZXI7CiAjaW5j
bHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtNjIyLDcgKzYyOSw5IEBAIG5hbWVz
cGFjZSBJbnNwZWN0b3IgewogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4K
KyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsK
IApAQCAtNjgxLDggKzY5MCw3IEBAIHVzaW5nIExvYWRlcklkID0gU3RyaW5nOwogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKIAotI2luY2x1ZGUg
PHd0Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRl
IDx3dGYvQXNzZXJ0aW9ucy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtNzM5LDcg
Kzc0Nyw3IEBAIGNsYXNzIE9iakNJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyIGZp
bmFsIDogcHVibGljIEFsdGVybmF0ZU5ldHdvcmsxQmFjCiAgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CiBwdWJsaWM6CiAgICAgT2JqQ0luc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNo
ZXIoaWQ8VGVzdFByb3RvY29sTmV0d29yazFEb21haW5IYW5kbGVyPiBoYW5kbGVyKSB7IG1fZGVs
ZWdhdGUgPSBoYW5kbGVyOyB9Ci0gICAgdm9pZCBsb2FkUmVzb3VyY2UxKGxvbmcgcmVxdWVzdElk
KSBmaW5hbDsKKyAgICB2b2lkIGxvYWRSZXNvdXJjZTEobG9uZyBwcm90b2NvbF9jYWxsSWQpIGZp
bmFsOwogcHJpdmF0ZToKICAgICBSZXRhaW5QdHI8aWQ8VGVzdFByb3RvY29sTmV0d29yazFEb21h
aW5IYW5kbGVyPj4gbV9kZWxlZ2F0ZTsKIH07CkBAIC03NDgsMTMgKzc1NiwxMyBAQCBjbGFzcyBP
YmpDSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBBbHRl
cm5hdGVOZXR3b3JrM0JhYwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgog
ICAgIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyKGlkPFRlc3RQcm90b2Nv
bE5ldHdvcmszRG9tYWluSGFuZGxlcj4gaGFuZGxlcikgeyBtX2RlbGVnYXRlID0gaGFuZGxlcjsg
fQotICAgIHZvaWQgbG9hZFJlc291cmNlMShsb25nIHJlcXVlc3RJZCkgZmluYWw7Ci0gICAgdm9p
ZCBsb2FkUmVzb3VyY2UyKGxvbmcgcmVxdWVzdElkKSBmaW5hbDsKLSAgICB2b2lkIGxvYWRSZXNv
dXJjZTMobG9uZyByZXF1ZXN0SWQpIGZpbmFsOwotICAgIHZvaWQgbG9hZFJlc291cmNlNChsb25n
IHJlcXVlc3RJZCkgZmluYWw7Ci0gICAgdm9pZCBsb2FkUmVzb3VyY2U1KGxvbmcgcmVxdWVzdElk
KSBmaW5hbDsKLSAgICB2b2lkIGxvYWRSZXNvdXJjZTYobG9uZyByZXF1ZXN0SWQpIGZpbmFsOwot
ICAgIHZvaWQgbG9hZFJlc291cmNlNyhsb25nIHJlcXVlc3RJZCkgZmluYWw7CisgICAgdm9pZCBs
b2FkUmVzb3VyY2UxKGxvbmcgcHJvdG9jb2xfY2FsbElkKSBmaW5hbDsKKyAgICB2b2lkIGxvYWRS
ZXNvdXJjZTIobG9uZyBwcm90b2NvbF9jYWxsSWQpIGZpbmFsOworICAgIHZvaWQgbG9hZFJlc291
cmNlMyhsb25nIHByb3RvY29sX2NhbGxJZCkgZmluYWw7CisgICAgdm9pZCBsb2FkUmVzb3VyY2U0
KGxvbmcgcHJvdG9jb2xfY2FsbElkKSBmaW5hbDsKKyAgICB2b2lkIGxvYWRSZXNvdXJjZTUobG9u
ZyBwcm90b2NvbF9jYWxsSWQpIGZpbmFsOworICAgIHZvaWQgbG9hZFJlc291cmNlNihsb25nIHBy
b3RvY29sX2NhbGxJZCkgZmluYWw7CisgICAgdm9pZCBsb2FkUmVzb3VyY2U3KGxvbmcgcHJvdG9j
b2xfY2FsbElkKSBmaW5hbDsKIHByaXZhdGU6CiAgICAgUmV0YWluUHRyPGlkPFRlc3RQcm90b2Nv
bE5ldHdvcmszRG9tYWluSGFuZGxlcj4+IG1fZGVsZWdhdGU7CiB9OwpAQCAtODAyLDE2MSArODEw
LDE2OSBAQCBwcml2YXRlOgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAotdm9pZCBPYmpDSW5z
cGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMShsb25nIHJlcXVl
c3RJZCkKK3ZvaWQgT2JqQ0luc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI6OmxvYWRS
ZXNvdXJjZTEobG9uZyBwcm90b2NvbF9jYWxsSWQpCiB7CiAgICAgaWYgKCFbbV9kZWxlZ2F0ZSBy
ZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGxvYWRSZXNvdXJjZTFXaXRoRXJyb3JDYWxsYmFj
azpzdWNjZXNzQ2FsbGJhY2s6KV0pIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVw
b3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RG
b3VuZCwgIidOZXR3b3JrMS5sb2FkUmVzb3VyY2UxJyB3YXMgbm90IGZvdW5kIl9zKTsKKyAgICAg
ICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxs
SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidOZXR3b3JrMS5sb2FkUmVz
b3VyY2UxJyB3YXMgbm90IGZvdW5kIl9zKTsKICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+
c2VuZFBlbmRpbmdFcnJvcnMoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlkIGVy
cm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgewotICAgICAgICBiYWNrZW5kRGlzcGF0
Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6
OlNlcnZlckVycm9yLCBlcnJvcik7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9y
dFByb3RvY29sRXJyb3IocHJvdG9jb2xfY2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVy
RXJyb3IsIGVycm9yKTsKICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdF
cnJvcnMoKTsKICAgICB9OwogCiAgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKLSAgICAgICAg
YmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgSlNPTjo6T2JqZWN0
OjpjcmVhdGUoKSwgZmFsc2UpOworICAgICAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0g
SlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2Vu
ZFJlc3BvbnNlKHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSks
IGZhbHNlKTsKICAgICB9OwogCiAgICAgW21fZGVsZWdhdGUgbG9hZFJlc291cmNlMVdpdGhFcnJv
ckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107
CiB9CiAKLXZvaWQgT2JqQ0luc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRS
ZXNvdXJjZTEobG9uZyByZXF1ZXN0SWQpCit2b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tl
bmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UxKGxvbmcgcHJvdG9jb2xfY2FsbElkKQogewogICAg
IGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihsb2FkUmVzb3Vy
Y2UxV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7Ci0gICAgICAgIGJhY2tl
bmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlz
cGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29yazMubG9hZFJlc291cmNlMScgd2FzIG5v
dCBmb3VuZCJfcyk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29s
RXJyb3IocHJvdG9jb2xfY2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQs
ICInTmV0d29yazMubG9hZFJlc291cmNlMScgd2FzIG5vdCBmb3VuZCJfcyk7CiAgICAgICAgIGJh
Y2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKICAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAg
ICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQs
IEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgICAgICBiYWNrZW5k
RGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHByb3RvY29sX2NhbGxJZCwgQmFja2Vu
ZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CiAgICAgICAgIGJhY2tlbmREaXNwYXRj
aGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgfTsKIAogICAgIGlkIHN1Y2Nlc3NDYWxs
YmFjayA9IF57Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1
ZXN0SWQsIEpTT046Ok9iamVjdDo6Y3JlYXRlKCksIGZhbHNlKTsKKyAgICAgICAgYXV0byBwcm90
b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIGJhY2tl
bmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJv
dG9jb2xfanNvbk1lc3NhZ2UpLCBmYWxzZSk7CiAgICAgfTsKIAogICAgIFttX2RlbGVnYXRlIGxv
YWRSZXNvdXJjZTFXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFj
azpzdWNjZXNzQ2FsbGJhY2tdOwogfQogCi12b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tl
bmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UyKGxvbmcgcmVxdWVzdElkKQordm9pZCBPYmpDSW5z
cGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMihsb25nIHByb3Rv
Y29sX2NhbGxJZCkKIHsKICAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpA
c2VsZWN0b3IobG9hZFJlc291cmNlMldpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazop
XSkgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJl
cXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdvcmszLmxv
YWRSZXNvdXJjZTInIHdhcyBub3QgZm91bmQiX3MpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hl
cigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHByb3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNo
ZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdvcmszLmxvYWRSZXNvdXJjZTInIHdhcyBub3QgZm91
bmQiX3MpOwogICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNT
dHJpbmcgKmVycm9yKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3Rv
Y29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9y
KTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90
b2NvbF9jYWxsSWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwogICAg
ICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgIH07CiAK
ICAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigp
LT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7
CisgICAgICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0
ZSgpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocHJvdG9jb2xf
Y2FsbElkLCBXVEZNb3ZlKHByb3RvY29sX2pzb25NZXNzYWdlKSwgZmFsc2UpOwogICAgIH07CiAK
ICAgICBbbV9kZWxlZ2F0ZSBsb2FkUmVzb3VyY2UyV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxs
YmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsKIH0KIAotdm9pZCBPYmpDSW5z
cGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMyhsb25nIHJlcXVl
c3RJZCkKK3ZvaWQgT2JqQ0luc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRS
ZXNvdXJjZTMobG9uZyBwcm90b2NvbF9jYWxsSWQpCiB7CiAgICAgaWYgKCFbbV9kZWxlZ2F0ZSBy
ZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGxvYWRSZXNvdXJjZTNXaXRoRXJyb3JDYWxsYmFj
azpzdWNjZXNzQ2FsbGJhY2s6KV0pIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVw
b3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RG
b3VuZCwgIidOZXR3b3JrMy5sb2FkUmVzb3VyY2UzJyB3YXMgbm90IGZvdW5kIl9zKTsKKyAgICAg
ICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxs
SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidOZXR3b3JrMy5sb2FkUmVz
b3VyY2UzJyB3YXMgbm90IGZvdW5kIl9zKTsKICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+
c2VuZFBlbmRpbmdFcnJvcnMoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlkIGVy
cm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgewotICAgICAgICBiYWNrZW5kRGlzcGF0
Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6
OlNlcnZlckVycm9yLCBlcnJvcik7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9y
dFByb3RvY29sRXJyb3IocHJvdG9jb2xfY2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVy
RXJyb3IsIGVycm9yKTsKICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdF
cnJvcnMoKTsKICAgICB9OwogCiAgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKLSAgICAgICAg
YmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgSlNPTjo6T2JqZWN0
OjpjcmVhdGUoKSwgZmFsc2UpOworICAgICAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0g
SlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2Vu
ZFJlc3BvbnNlKHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSks
IGZhbHNlKTsKICAgICB9OwogCiAgICAgW21fZGVsZWdhdGUgbG9hZFJlc291cmNlM1dpdGhFcnJv
ckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107
CiB9CiAKLXZvaWQgT2JqQ0luc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRS
ZXNvdXJjZTQobG9uZyByZXF1ZXN0SWQpCit2b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tl
bmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U0KGxvbmcgcHJvdG9jb2xfY2FsbElkKQogewogICAg
IGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihsb2FkUmVzb3Vy
Y2U0V2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7Ci0gICAgICAgIGJhY2tl
bmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlz
cGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29yazMubG9hZFJlc291cmNlNCcgd2FzIG5v
dCBmb3VuZCJfcyk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29s
RXJyb3IocHJvdG9jb2xfY2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQs
ICInTmV0d29yazMubG9hZFJlc291cmNlNCcgd2FzIG5vdCBmb3VuZCJfcyk7CiAgICAgICAgIGJh
Y2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKICAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAg
ICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQs
IEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgICAgICBiYWNrZW5k
RGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHByb3RvY29sX2NhbGxJZCwgQmFja2Vu
ZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CiAgICAgICAgIGJhY2tlbmREaXNwYXRj
aGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgfTsKIAogICAgIGlkIHN1Y2Nlc3NDYWxs
YmFjayA9IF57Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1
ZXN0SWQsIEpTT046Ok9iamVjdDo6Y3JlYXRlKCksIGZhbHNlKTsKKyAgICAgICAgYXV0byBwcm90
b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIGJhY2tl
bmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJv
dG9jb2xfanNvbk1lc3NhZ2UpLCBmYWxzZSk7CiAgICAgfTsKIAogICAgIFttX2RlbGVnYXRlIGxv
YWRSZXNvdXJjZTRXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFj
azpzdWNjZXNzQ2FsbGJhY2tdOwogfQogCi12b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tl
bmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U1KGxvbmcgcmVxdWVzdElkKQordm9pZCBPYmpDSW5z
cGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNShsb25nIHByb3Rv
Y29sX2NhbGxJZCkKIHsKICAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpA
c2VsZWN0b3IobG9hZFJlc291cmNlNVdpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazop
XSkgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJl
cXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdvcmszLmxv
YWRSZXNvdXJjZTUnIHdhcyBub3QgZm91bmQiX3MpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hl
cigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHByb3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNo
ZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdvcmszLmxvYWRSZXNvdXJjZTUnIHdhcyBub3QgZm91
bmQiX3MpOwogICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNT
dHJpbmcgKmVycm9yKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3Rv
Y29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9y
KTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90
b2NvbF9jYWxsSWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwogICAg
ICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgIH07CiAK
ICAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigp
LT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7
CisgICAgICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0
ZSgpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocHJvdG9jb2xf
Y2FsbElkLCBXVEZNb3ZlKHByb3RvY29sX2pzb25NZXNzYWdlKSwgZmFsc2UpOwogICAgIH07CiAK
ICAgICBbbV9kZWxlZ2F0ZSBsb2FkUmVzb3VyY2U1V2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxs
YmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsKIH0KIAotdm9pZCBPYmpDSW5z
cGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNihsb25nIHJlcXVl
c3RJZCkKK3ZvaWQgT2JqQ0luc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRS
ZXNvdXJjZTYobG9uZyBwcm90b2NvbF9jYWxsSWQpCiB7CiAgICAgaWYgKCFbbV9kZWxlZ2F0ZSBy
ZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGxvYWRSZXNvdXJjZTZXaXRoRXJyb3JDYWxsYmFj
azpzdWNjZXNzQ2FsbGJhY2s6KV0pIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVw
b3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RG
b3VuZCwgIidOZXR3b3JrMy5sb2FkUmVzb3VyY2U2JyB3YXMgbm90IGZvdW5kIl9zKTsKKyAgICAg
ICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxs
SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidOZXR3b3JrMy5sb2FkUmVz
b3VyY2U2JyB3YXMgbm90IGZvdW5kIl9zKTsKICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+
c2VuZFBlbmRpbmdFcnJvcnMoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlkIGVy
cm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgewotICAgICAgICBiYWNrZW5kRGlzcGF0
Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6
OlNlcnZlckVycm9yLCBlcnJvcik7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9y
dFByb3RvY29sRXJyb3IocHJvdG9jb2xfY2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVy
RXJyb3IsIGVycm9yKTsKICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdF
cnJvcnMoKTsKICAgICB9OwogCiAgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKLSAgICAgICAg
YmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgSlNPTjo6T2JqZWN0
OjpjcmVhdGUoKSwgZmFsc2UpOworICAgICAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0g
SlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2Vu
ZFJlc3BvbnNlKHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSks
IGZhbHNlKTsKICAgICB9OwogCiAgICAgW21fZGVsZWdhdGUgbG9hZFJlc291cmNlNldpdGhFcnJv
ckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107
CiB9CiAKLXZvaWQgT2JqQ0luc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRS
ZXNvdXJjZTcobG9uZyByZXF1ZXN0SWQpCit2b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tl
bmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U3KGxvbmcgcHJvdG9jb2xfY2FsbElkKQogewogICAg
IGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihsb2FkUmVzb3Vy
Y2U3V2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7Ci0gICAgICAgIGJhY2tl
bmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlz
cGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29yazMubG9hZFJlc291cmNlNycgd2FzIG5v
dCBmb3VuZCJfcyk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29s
RXJyb3IocHJvdG9jb2xfY2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQs
ICInTmV0d29yazMubG9hZFJlc291cmNlNycgd2FzIG5vdCBmb3VuZCJfcyk7CiAgICAgICAgIGJh
Y2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKICAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAg
ICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQs
IEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgICAgICBiYWNrZW5k
RGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHByb3RvY29sX2NhbGxJZCwgQmFja2Vu
ZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CiAgICAgICAgIGJhY2tlbmREaXNwYXRj
aGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgfTsKIAogICAgIGlkIHN1Y2Nlc3NDYWxs
YmFjayA9IF57Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1
ZXN0SWQsIEpTT046Ok9iamVjdDo6Y3JlYXRlKCksIGZhbHNlKTsKKyAgICAgICAgYXV0byBwcm90
b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIGJhY2tl
bmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJv
dG9jb2xfanNvbk1lc3NhZ2UpLCBmYWxzZSk7CiAgICAgfTsKIAogICAgIFttX2RlbGVnYXRlIGxv
YWRSZXNvdXJjZTdXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFj
azpzdWNjZXNzQ2FsbGJhY2tdOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2VudW0tdmFsdWVzLmpzb24tcmVzdWx0IGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2Vu
dW0tdmFsdWVzLmpzb24tcmVzdWx0CmluZGV4IDc5NTNjYmYyMTgzODhmODQ3NzcyYmQ0MTNkMTgw
MjYyOWE3YjgwNWIuLjk5M2Y5YWEyOGM3MTM2NmRkZWU3YWRhMWYxYzYxMGM2NzFjMWZiMjUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9l
eHBlY3RlZC9lbnVtLXZhbHVlcy5qc29uLXJlc3VsdAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZW51bS12YWx1ZXMuanNvbi1yZXN1
bHQKQEAgLTMwLDE4ICszMCwxOSBAQAogCiAvLyBUeXBlRG9tYWluCiBJbnNwZWN0b3JCYWNrZW5k
LnJlZ2lzdGVyRG9tYWluKCJUeXBlRG9tYWluIiwgbnVsbCk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJl
Z2lzdGVyRW51bSgiVHlwZURvbWFpbi5UeXBlRG9tYWluRW51bSIsIHtTaGFyZWQ6ICJzaGFyZWQi
LCBSZWQ6ICJyZWQiLCBHcmVlbjogImdyZWVuIiwgQmx1ZTogImJsdWUifSk7CitJbnNwZWN0b3JC
YWNrZW5kLnJlZ2lzdGVyRW51bSgiVHlwZURvbWFpbi5FbnVtIiwge1NoYXJlZDogInNoYXJlZCIs
IDE6ICIxIiwgMjogIjIifSk7CiBJbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJUeXBl
RG9tYWluIiwgbnVsbCk7CiAKIC8vIENvbW1hbmREb21haW4KIEluc3BlY3RvckJhY2tlbmQucmVn
aXN0ZXJEb21haW4oIkNvbW1hbmREb21haW4iLCBudWxsKTsKLUluc3BlY3RvckJhY2tlbmQucmVn
aXN0ZXJDb21tYW5kKCJDb21tYW5kRG9tYWluLmNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlIiwg
bnVsbCwgW10sIFsicmV0dXJuVmFsdWUiXSk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29t
bWFuZCgiQ29tbWFuZERvbWFpbi5jb21tYW5kIiwgbnVsbCwgW3sibmFtZSI6ICJlbnVtUmVxdWly
ZWQiLCAidHlwZSI6ICJzdHJpbmcifSwgeyJuYW1lIjogImVudW1PcHRpb25hbCIsICJ0eXBlIjog
InN0cmluZyIsICJvcHRpb25hbCI6IHRydWV9LCB7Im5hbWUiOiAicGFyYW1ldGVyUmVxdWlyZWQi
LCAidHlwZSI6ICJzdHJpbmcifSwgeyJuYW1lIjogInBhcmFtZXRlck9wdGlvbmFsIiwgInR5cGUi
OiAic3RyaW5nIiwgIm9wdGlvbmFsIjogdHJ1ZX1dLCBbImVudW1SZXF1aXJlZCIsICJlbnVtT3B0
aW9uYWwiLCAicmV0dXJuUmVxdWlyZWQiLCAicmV0dXJuT3B0aW9uYWwiXSk7CiBJbnNwZWN0b3JC
YWNrZW5kLmFjdGl2YXRlRG9tYWluKCJDb21tYW5kRG9tYWluIiwgbnVsbCk7CiAKIC8vIEV2ZW50
RG9tYWluCiBJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluKCJFdmVudERvbWFpbiIsIG51
bGwpOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckVudW0oIkV2ZW50RG9tYWluLkV2ZW50V2l0
aEVudW1QYXJhbWV0ZXJQYXJhbWV0ZXIiLCB7U2hhcmVkOiAic2hhcmVkIiwgQmxhY2s6ICJibGFj
ayIsIFdoaXRlOiAid2hpdGUifSk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRXZlbnQoIkV2
ZW50RG9tYWluLmV2ZW50V2l0aEVudW1QYXJhbWV0ZXIiLCBudWxsLCBbInBhcmFtZXRlciJdKTsK
K0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFbnVtKCJFdmVudERvbWFpbi5FdmVudFBhcmFtZXRl
clJlcXVpcmVkIiwge1NoYXJlZDogInNoYXJlZCIsIFNoYXJlZFJlcXVpcmVkOiAic2hhcmVkUmVx
dWlyZWQiLCBHcmV5OiAiZ3JleSJ9KTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFbnVtKCJF
dmVudERvbWFpbi5FdmVudFBhcmFtZXRlck9wdGlvbmFsIiwge1NoYXJlZDogInNoYXJlZCIsIFNo
YXJlZE9wdGlvbmFsOiAic2hhcmVkT3B0aW9uYWwiLCBHcmVlbjogImdyZWVuIn0pOworSW5zcGVj
dG9yQmFja2VuZC5yZWdpc3RlckV2ZW50KCJFdmVudERvbWFpbi5ldmVudCIsIG51bGwsIFsiZW51
bVJlcXVpcmVkIiwgImVudW1PcHRpb25hbCIsICJwYXJhbWV0ZXJSZXF1aXJlZCIsICJwYXJhbWV0
ZXJPcHRpb25hbCJdKTsKIEluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFdmVudERvbWFpbkRpc3Bh
dGNoZXIgPSBJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRGlzcGF0Y2hlci5iaW5kKEluc3BlY3Rv
ckJhY2tlbmQsICJFdmVudERvbWFpbiIpOwogSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFp
bigiRXZlbnREb21haW4iLCBudWxsKTsKICMjIyBFbmQgRmlsZTogSW5zcGVjdG9yQmFja2VuZENv
bW1hbmRzLmpzLmluCkBAIC04MCw3ICs4MSw3IEBAIEluc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVE
b21haW4oIkV2ZW50RG9tYWluIiwgbnVsbCk7CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVS
TkFURV9ESVNQQVRDSEVSUykKIAotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCisjaW5j
bHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0lu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KIApAQCAtOTgsNyArOTksNyBAQCBwcml2YXRlOgogY2xh
c3MgQWx0ZXJuYXRlQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyIDogcHVibGljIEFsdGVy
bmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5BbHRlcm5hdGVD
b21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXIoKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgY29t
bWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUobG9uZyBjYWxsSWQpID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgY29tbWFuZChsb25nIHByb3RvY29sX2NhbGxJZCwgY29uc3QgU3RyaW5nJiBlbnVtUmVxdWly
ZWQsIGNvbnN0IFN0cmluZyYgb3B0X2VudW1PcHRpb25hbCwgY29uc3QgU3RyaW5nJiBwYXJhbWV0
ZXJSZXF1aXJlZCwgY29uc3QgU3RyaW5nJiBvcHRfcGFyYW1ldGVyT3B0aW9uYWwpID0gMDsKIH07
CiAKIH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgpAQCAtMTQwLDExICsxNDEsMTQgQEAgcHVibGlj
OgogCiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8dHVwbGU+Cisj
aW5jbHVkZSA8d3RmL0V4cGVjdGVkLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCi10
eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKwogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRF
Uk5BVEVfRElTUEFUQ0hFUlMpCiBjbGFzcyBBbHRlcm5hdGVDb21tYW5kRG9tYWluQmFja2VuZERp
c3BhdGNoZXI7CkBAIC0xNTIsMTQgKzE1Niw3IEBAIGNsYXNzIEFsdGVybmF0ZUNvbW1hbmREb21h
aW5CYWNrZW5kRGlzcGF0Y2hlcjsKIAogY2xhc3MgQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRj
aGVySGFuZGxlciB7CiBwdWJsaWM6Ci0gICAgLy8gTmFtZWQgYWZ0ZXIgcGFyYW1ldGVyICdyZXR1
cm5WYWx1ZScgd2hpbGUgZ2VuZXJhdGluZyBjb21tYW5kL2V2ZW50IGNvbW1hbmRXaXRoRW51bVJl
dHVyblZhbHVlLgotICAgIGVudW0gY2xhc3MgUmV0dXJuVmFsdWUgewotICAgICAgICBTaGFyZWQg
PSAwLAotICAgICAgICBDeWFuID0gNiwKLSAgICAgICAgTWFnZW50YSA9IDcsCi0gICAgICAgIFll
bGxvdyA9IDgsCi0gICAgfTsgLy8gZW51bSBjbGFzcyBSZXR1cm5WYWx1ZQotICAgIHZpcnR1YWwg
dm9pZCBjb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZShFcnJvclN0cmluZyYsIENvbW1hbmREb21h
aW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlJldHVyblZhbHVlKiBvdXRfcmV0dXJuVmFsdWUp
ID0gMDsKKyAgICB2aXJ0dWFsIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHN0ZDo6dHVwbGU8UHJv
dG9jb2w6OlR5cGVEb21haW46OkVudW0gLyogZW51bVJlcXVpcmVkICovLCBPcHRpb25hbDxQcm90
b2NvbDo6VHlwZURvbWFpbjo6RW51bT4gLyogb3B0X2VudW1PcHRpb25hbCAqLywgU3RyaW5nIC8q
IHJldHVyblJlcXVpcmVkICovLCBTdHJpbmcgLyogb3B0X3JldHVybk9wdGlvbmFsICovPj4gY29t
bWFuZChQcm90b2NvbDo6VHlwZURvbWFpbjo6RW51bSBlbnVtUmVxdWlyZWQsIE9wdGlvbmFsPFBy
b3RvY29sOjpUeXBlRG9tYWluOjpFbnVtPiYmIG9wdF9lbnVtT3B0aW9uYWwsIGNvbnN0IFN0cmlu
ZyYgcGFyYW1ldGVyUmVxdWlyZWQsIGNvbnN0IFN0cmluZyYgb3B0X3BhcmFtZXRlck9wdGlvbmFs
KSA9IDA7CiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB+Q29tbWFuZERvbWFpbkJhY2tlbmREaXNw
YXRjaGVySGFuZGxlcigpOwogfTsKQEAgLTE2Nyw5ICsxNjQsOSBAQCBwcm90ZWN0ZWQ6CiBjbGFz
cyBDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgU3VwcGxlbWVu
dGFsQmFja2VuZERpc3BhdGNoZXIgewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8Q29tbWFuZERv
bWFpbkJhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImLCBDb21tYW5k
RG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7Ci0gICAgdm9pZCBkaXNwYXRjaChsb25n
IHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVz
c2FnZSkgZmluYWw7CisgICAgdm9pZCBkaXNwYXRjaChsb25nIHByb3RvY29sX2NhbGxJZCwgY29u
c3QgU3RyaW5nJiBwcm90b2NvbF9tZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xf
bWVzc2FnZSkgZmluYWw7CiBwcml2YXRlOgotICAgIHZvaWQgY29tbWFuZFdpdGhFbnVtUmV0dXJu
VmFsdWUobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7
CisgICAgdm9pZCBjb21tYW5kKGxvbmcgcHJvdG9jbF9jYWxsSWQsIFJlZlB0cjxKU09OOjpPYmpl
Y3Q+JiYgcHJvdG9jb2xfcGFyYW1ldGVycyk7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5B
VEVfRElTUEFUQ0hFUlMpCiBwdWJsaWM6CiAgICAgdm9pZCBzZXRBbHRlcm5hdGVEaXNwYXRjaGVy
KEFsdGVybmF0ZUNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlciogYWx0ZXJuYXRlRGlzcGF0
Y2hlcikgeyBtX2FsdGVybmF0ZURpc3BhdGNoZXIgPSBhbHRlcm5hdGVEaXNwYXRjaGVyOyB9CkBA
IC0yMTgsOSArMjE1LDcgQEAgcHJpdmF0ZToKICNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNo
ZXJzLmgiCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRl
ci5oPgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVz
dHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiAjaWYgRU5BQkxFKElO
U1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAjaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJh
Y2tlbmREaXNwYXRjaGVycy5oIgpAQCAtMjQyLDQyICsyMzcsNjMgQEAgQ29tbWFuZERvbWFpbkJh
Y2tlbmREaXNwYXRjaGVyOjpDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERp
c3BhdGNoZXIKICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JE
b21haW4oIkNvbW1hbmREb21haW4iX3MsIHRoaXMpOwogfQogCi12b2lkIENvbW1hbmREb21haW5C
YWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYg
bWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpCit2b2lkIENvbW1hbmREb21haW5C
YWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyBwcm90b2NvbF9jYWxsSWQsIGNvbnN0IFN0
cmluZyYgcHJvdG9jb2xfbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX21lc3Nh
Z2UpCiB7CiAgICAgUmVmPENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgq
dGhpcyk7CiAKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzOwotICAgIG1lc3Nh
Z2UtPmdldE9iamVjdCgicGFyYW1zIl9zLCBwYXJhbWV0ZXJzKTsKKyAgICBhdXRvIHByb3RvY29s
X3BhcmFtZXRlcnMgPSBwcm90b2NvbF9tZXNzYWdlLT5nZXRPYmplY3QoInBhcmFtcyJfcyk7CiAK
LSAgICBpZiAobWV0aG9kID09ICJjb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZSIpIHsKLSAgICAg
ICAgY29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRl
cnMpKTsKKyAgICBpZiAocHJvdG9jb2xfbWV0aG9kID09ICJjb21tYW5kIikgeworICAgICAgICBj
b21tYW5kKHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9wYXJhbWV0ZXJzKSk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQ
cm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidDb21tYW5k
RG9tYWluLiIgKyBtZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7CisgICAgbV9iYWNrZW5kRGlz
cGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90
Rm91bmQsICInQ29tbWFuZERvbWFpbi4iICsgcHJvdG9jb2xfbWV0aG9kICsgIicgd2FzIG5vdCBm
b3VuZCIpOwogfQogCi12b2lkIENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Y29tbWFu
ZFdpdGhFbnVtUmV0dXJuVmFsdWUobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+
JiYpCit2b2lkIENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Y29tbWFuZChsb25nIHBy
b3RvY29sX2NhbGxJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9wYXJhbWV0ZXJz
KQogeworICAgIGF1dG8gaW5fZW51bVJlcXVpcmVkX2pzb24gPSBtX2JhY2tlbmREaXNwYXRjaGVy
LT5nZXRTdHJpbmcocHJvdG9jb2xfcGFyYW1ldGVycy5nZXQoKSwgImVudW1SZXF1aXJlZCJfcywg
dHJ1ZSk7CisgICAgYXV0byBpbl9vcHRfZW51bU9wdGlvbmFsX2pzb24gPSBtX2JhY2tlbmREaXNw
YXRjaGVyLT5nZXRTdHJpbmcocHJvdG9jb2xfcGFyYW1ldGVycy5nZXQoKSwgImVudW1PcHRpb25h
bCJfcywgZmFsc2UpOworICAgIGF1dG8gaW5fcGFyYW1ldGVyUmVxdWlyZWQgPSBtX2JhY2tlbmRE
aXNwYXRjaGVyLT5nZXRTdHJpbmcocHJvdG9jb2xfcGFyYW1ldGVycy5nZXQoKSwgInBhcmFtZXRl
clJlcXVpcmVkIl9zLCB0cnVlKTsKKyAgICBhdXRvIGluX29wdF9wYXJhbWV0ZXJPcHRpb25hbCA9
IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFN0cmluZyhwcm90b2NvbF9wYXJhbWV0ZXJzLmdldCgp
LCAicGFyYW1ldGVyT3B0aW9uYWwiX3MsIGZhbHNlKTsKKyAgICBpZiAobV9iYWNrZW5kRGlzcGF0
Y2hlci0+aGFzUHJvdG9jb2xFcnJvcnMoKSkgeworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVy
LT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCAi
U29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICdDb21tYW5kRG9tYWluLmNvbW1hbmQnIGNhbid0IGJl
IHByb2Nlc3NlZCJfcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICNpZiBFTkFCTEUoSU5T
UEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKICAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRj
aGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+Y29tbWFuZFdpdGhFbnVtUmV0
dXJuVmFsdWUocmVxdWVzdElkKTsKKyAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5jb21t
YW5kKHByb3RvY29sX2NhbGxJZCwgaW5fZW51bVJlcXVpcmVkX2pzb24sIGluX29wdF9lbnVtT3B0
aW9uYWxfanNvbiwgaW5fcGFyYW1ldGVyUmVxdWlyZWQsIGluX29wdF9wYXJhbWV0ZXJPcHRpb25h
bCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9B
TFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAKLSAgICBFcnJvclN0cmluZyBlcnJvcjsKLSAgICBSZWY8
SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIENvbW1h
bmREb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlJldHVyblZhbHVlIG91dF9yZXR1cm5W
YWx1ZTsKLSAgICBtX2FnZW50LT5jb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZShlcnJvciwgJm91
dF9yZXR1cm5WYWx1ZSk7CisgICAgYXV0byBpbl9lbnVtUmVxdWlyZWQgPSBQcm90b2NvbDo6VGVz
dEhlbHBlcnM6OnBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxQcm90b2NvbDo6VHlwZURvbWFpbjo6
RW51bT4oaW5fZW51bVJlcXVpcmVkX2pzb24pOworICAgIGlmICghaW5fZW51bVJlcXVpcmVkKSB7
CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2Vu
ZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBtYWtlU3RyaW5nKCJVbmtub3duIGVudW1SZXF1aXJl
ZDogIl9zLCBpbl9lbnVtUmVxdWlyZWRfanNvbikpOworICAgICAgICByZXR1cm47CisgICAgfQog
Ci0gICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKLSAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoInJl
dHVyblZhbHVlIl9zLCBJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNv
bnN0YW50VmFsdWUob3V0X3JldHVyblZhbHVlKSk7CisgICAgYXV0byBpbl9vcHRfZW51bU9wdGlv
bmFsID0gUHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8UHJv
dG9jb2w6OlR5cGVEb21haW46OkVudW0+KGluX29wdF9lbnVtT3B0aW9uYWxfanNvbik7CiAKLSAg
ICBpZiAoIWVycm9yLmxlbmd0aCgpKQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5k
UmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKLSAgICBlbHNlCi0g
ICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERp
c3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7CisgICAgYXV0byByZXN1bHQg
PSBtX2FnZW50LT5jb21tYW5kKCppbl9lbnVtUmVxdWlyZWQsIFdURk1vdmUoaW5fb3B0X2VudW1P
cHRpb25hbCksIGluX3BhcmFtZXRlclJlcXVpcmVkLCBpbl9vcHRfcGFyYW1ldGVyT3B0aW9uYWwp
OworICAgIGlmICghcmVzdWx0KSB7CisgICAgICAgIEFTU0VSVCghcmVzdWx0LmVycm9yKCkuaXNF
bXB0eSgpKTsKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJv
cihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIHJlc3VsdC5lcnJvcigpKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGF1dG8gW291dF9lbnVtUmVxdWlyZWQsIG91dF9vcHRf
ZW51bU9wdGlvbmFsLCBvdXRfcmV0dXJuUmVxdWlyZWQsIG91dF9vcHRfcmV0dXJuT3B0aW9uYWxd
ID0gV1RGTW92ZShyZXN1bHQudmFsdWUoKSk7CisKKyAgICBhdXRvIHByb3RvY29sX2pzb25NZXNz
YWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+
c2V0U3RyaW5nKCJlbnVtUmVxdWlyZWQiX3MsIFByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51
bUNvbnN0YW50VmFsdWUob3V0X2VudW1SZXF1aXJlZCkpOworICAgIGlmICghIW91dF9vcHRfZW51
bU9wdGlvbmFsKQorICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJlbnVt
T3B0aW9uYWwiX3MsIFByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUo
Km91dF9vcHRfZW51bU9wdGlvbmFsKSk7CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0
cmluZygicmV0dXJuUmVxdWlyZWQiX3MsIG91dF9yZXR1cm5SZXF1aXJlZCk7CisgICAgaWYgKCEh
b3V0X29wdF9yZXR1cm5PcHRpb25hbCkKKyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNl
dFN0cmluZygicmV0dXJuT3B0aW9uYWwiX3MsIG91dF9vcHRfcmV0dXJuT3B0aW9uYWwpOworICAg
IG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShwcm90b2NvbF9jYWxsSWQsIFdURk1v
dmUocHJvdG9jb2xfanNvbk1lc3NhZ2UpLCBmYWxzZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgpAQCAtMzE4LDYgKzMzNCw3IEBAIHZvaWQgQ29tbWFuZERvbWFpbkJhY2tlbmREaXNw
YXRjaGVyOjpjb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZShsb25nIHJlcXVlc3RJZCwKIAogI2lu
Y2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5o
PgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKQEAgLTMyOCwxMyArMzQ1LDE5IEBAIGNsYXNz
IEV2ZW50RG9tYWluRnJvbnRlbmREaXNwYXRjaGVyIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKIHB1YmxpYzoKICAgICBFdmVudERvbWFpbkZyb250ZW5kRGlzcGF0Y2hlcihGcm9udGVu
ZFJvdXRlciYgZnJvbnRlbmRSb3V0ZXIpIDogbV9mcm9udGVuZFJvdXRlcihmcm9udGVuZFJvdXRl
cikgeyB9Ci0gICAgICAgIC8vIE5hbWVkIGFmdGVyIHBhcmFtZXRlciAncGFyYW1ldGVyJyB3aGls
ZSBnZW5lcmF0aW5nIGNvbW1hbmQvZXZlbnQgZXZlbnRXaXRoRW51bVBhcmFtZXRlci4KLSAgICAg
ICAgZW51bSBjbGFzcyBQYXJhbWV0ZXIgeworICAgICAgICAvLyBOYW1lZCBhZnRlciBwYXJhbWV0
ZXIgJ3BhcmFtZXRlclJlcXVpcmVkJyB3aGlsZSBnZW5lcmF0aW5nIGNvbW1hbmQvZXZlbnQgZXZl
bnQuCisgICAgICAgIGVudW0gY2xhc3MgUGFyYW1ldGVyUmVxdWlyZWQgewogICAgICAgICAgICAg
U2hhcmVkID0gMCwKLSAgICAgICAgICAgIEJsYWNrID0gNCwKLSAgICAgICAgICAgIFdoaXRlID0g
NSwKLSAgICAgICAgfTsgLy8gZW51bSBjbGFzcyBQYXJhbWV0ZXIKLSAgICB2b2lkIGV2ZW50V2l0
aEVudW1QYXJhbWV0ZXIoUGFyYW1ldGVyIHBhcmFtZXRlcik7CisgICAgICAgICAgICBTaGFyZWRS
ZXF1aXJlZCA9IDMsCisgICAgICAgICAgICBHcmV5ID0gNCwKKyAgICAgICAgfTsgLy8gZW51bSBj
bGFzcyBQYXJhbWV0ZXJSZXF1aXJlZAorICAgICAgICAvLyBOYW1lZCBhZnRlciBwYXJhbWV0ZXIg
J3BhcmFtZXRlck9wdGlvbmFsJyB3aGlsZSBnZW5lcmF0aW5nIGNvbW1hbmQvZXZlbnQgZXZlbnQu
CisgICAgICAgIGVudW0gY2xhc3MgUGFyYW1ldGVyT3B0aW9uYWwgeworICAgICAgICAgICAgU2hh
cmVkID0gMCwKKyAgICAgICAgICAgIFNoYXJlZE9wdGlvbmFsID0gNSwKKyAgICAgICAgICAgIEdy
ZWVuID0gNiwKKyAgICAgICAgfTsgLy8gZW51bSBjbGFzcyBQYXJhbWV0ZXJPcHRpb25hbAorICAg
IHZvaWQgZXZlbnQoUHJvdG9jb2w6OlR5cGVEb21haW46OkVudW0gZW51bVJlcXVpcmVkLCBPcHRp
b25hbDxQcm90b2NvbDo6VHlwZURvbWFpbjo6RW51bT4mJiBvcHRfZW51bU9wdGlvbmFsLCBjb25z
dCBTdHJpbmcmIHBhcmFtZXRlclJlcXVpcmVkLCBjb25zdCBTdHJpbmcmIG9wdF9wYXJhbWV0ZXJP
cHRpb25hbCk7CiBwcml2YXRlOgogICAgIEZyb250ZW5kUm91dGVyJiBtX2Zyb250ZW5kUm91dGVy
OwogfTsKQEAgLTM3NiwxOSArMzk5LDIzIEBAIHByaXZhdGU6CiAjaW5jbHVkZSAiVGVzdEZyb250
ZW5kRGlzcGF0Y2hlcnMuaCIKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZy
b250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiBuYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKIAotdm9pZCBFdmVudERvbWFpbkZyb250ZW5kRGlzcGF0Y2hlcjo6ZXZl
bnRXaXRoRW51bVBhcmFtZXRlcihQYXJhbWV0ZXIgcGFyYW1ldGVyKQordm9pZCBFdmVudERvbWFp
bkZyb250ZW5kRGlzcGF0Y2hlcjo6ZXZlbnQoUHJvdG9jb2w6OlR5cGVEb21haW46OkVudW0gZW51
bVJlcXVpcmVkLCBPcHRpb25hbDxQcm90b2NvbDo6VHlwZURvbWFpbjo6RW51bT4mJiBvcHRfZW51
bU9wdGlvbmFsLCBjb25zdCBTdHJpbmcmIHBhcmFtZXRlclJlcXVpcmVkLCBjb25zdCBTdHJpbmcm
IG9wdF9wYXJhbWV0ZXJPcHRpb25hbCkKIHsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVz
c2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAganNvbk1lc3NhZ2UtPnNldFN0cmlu
ZygibWV0aG9kIl9zLCAiRXZlbnREb21haW4uZXZlbnRXaXRoRW51bVBhcmFtZXRlciJfcyk7Ci0g
ICAgUmVmPEpTT046Ok9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUo
KTsKLSAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygicGFyYW1ldGVyIl9zLCBJbnNwZWN0b3I6
OlByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUocGFyYW1ldGVyKSk7
Ci0gICAganNvbk1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIl9zLCBXVEZNb3ZlKHBhcmFtc09i
amVjdCkpOworICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNy
ZWF0ZSgpOworICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywg
IkV2ZW50RG9tYWluLmV2ZW50Il9zKTsKKyAgICBhdXRvIHByb3RvY29sX3BhcmFtc09iamVjdCA9
IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRT
dHJpbmcoImVudW1SZXF1aXJlZCJfcywgUHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29u
c3RhbnRWYWx1ZShlbnVtUmVxdWlyZWQpKTsKKyAgICBpZiAoISFvcHRfZW51bU9wdGlvbmFsKQor
ICAgICAgICBwcm90b2NvbF9wYXJhbXNPYmplY3QtPnNldFN0cmluZygiZW51bU9wdGlvbmFsIl9z
LCBQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKCpvcHRfZW51bU9w
dGlvbmFsKSk7CisgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInBhcmFtZXRl
clJlcXVpcmVkIl9zLCBwYXJhbWV0ZXJSZXF1aXJlZCk7CisgICAgaWYgKCEhb3B0X3BhcmFtZXRl
ck9wdGlvbmFsKQorICAgICAgICBwcm90b2NvbF9wYXJhbXNPYmplY3QtPnNldFN0cmluZygicGFy
YW1ldGVyT3B0aW9uYWwiX3MsIG9wdF9wYXJhbWV0ZXJPcHRpb25hbCk7CisgICAgcHJvdG9jb2xf
anNvbk1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIl9zLCBXVEZNb3ZlKHByb3RvY29sX3BhcmFt
c09iamVjdCkpOwogCi0gICAgbV9mcm9udGVuZFJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2Ut
PnRvSlNPTlN0cmluZygpKTsKKyAgICBtX2Zyb250ZW5kUm91dGVyLnNlbmRFdmVudChwcm90b2Nv
bF9qc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKQEAgLTQyOCw3ICs0NTUsOSBAQCB2b2lkIEV2ZW50RG9tYWluRnJvbnRlbmREaXNwYXRj
aGVyOjpldmVudFdpdGhFbnVtUGFyYW1ldGVyKFBhcmFtZXRlciBwYXJhbWV0ZXIpCiAjcHJhZ21h
IG9uY2UKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMu
aD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVz
Lmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC00NDAsNyArNDY5LDcgQEAgbmFt
ZXNwYWNlIFByb3RvY29sIHsKIAogLy8gRm9yd2FyZCBkZWNsYXJhdGlvbnMuCiBuYW1lc3BhY2Ug
VHlwZURvbWFpbiB7Ci1lbnVtIGNsYXNzIFR5cGVEb21haW5FbnVtOworZW51bSBjbGFzcyBFbnVt
OwogfSAvLyBUeXBlRG9tYWluCiAvLyBFbmQgb2YgZm9yd2FyZCBkZWNsYXJhdGlvbnMuCiAKQEAg
LTQ2MCwxMiArNDg5LDExIEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFN0cmluZyBnZXRFbnVtQ29u
c3RhbnRWYWx1ZShUIGVudW1WYWx1ZSkKIAogbmFtZXNwYWNlIFR5cGVEb21haW4gewogCi1lbnVt
IGNsYXNzIFR5cGVEb21haW5FbnVtIHsKK2VudW0gY2xhc3MgRW51bSB7CiAgICAgU2hhcmVkID0g
MCwKLSAgICBSZWQgPSAxLAotICAgIEdyZWVuID0gMiwKLSAgICBCbHVlID0gMywKLX07IC8vIGVu
dW0gY2xhc3MgVHlwZURvbWFpbkVudW0KKyAgICAxID0gMSwKKyAgICAyID0gMiwKK307IC8vIGVu
dW0gY2xhc3MgRW51bQogCiB9IC8vIFR5cGVEb21haW4KIApAQCAtNDc4LDcgKzUwNiw3IEBAIE9w
dGlvbmFsPFByb3RvY29sRW51bVR5cGU+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZyhjb25zdCBT
dHJpbmcmKTsKIAogLy8gRW51bXMgaW4gdGhlICdUeXBlRG9tYWluJyBEb21haW4KIHRlbXBsYXRl
PD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlR5cGVEb21haW46OlR5cGVEb21haW5F
bnVtPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6VHlwZURv
bWFpbjo6VHlwZURvbWFpbkVudW0+KGNvbnN0IFN0cmluZyYpOworT3B0aW9uYWw8UHJvdG9jb2w6
OlR5cGVEb21haW46OkVudW0+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxQcm90b2NvbDo6VHlw
ZURvbWFpbjo6RW51bT4oY29uc3QgU3RyaW5nJik7CiAKIH0gLy8gbmFtZXNwYWNlIFRlc3RIZWxw
ZXJzCiAKQEAgLTQ5Miw3ICs1MjAsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVm
YXVsdEhhc2g7CiAKIC8vIEhhc2ggZGVjbGFyYXRpb25zIGluIHRoZSAnVHlwZURvbWFpbicgRG9t
YWluCiB0ZW1wbGF0ZTw+Ci1zdHJ1Y3QgRGVmYXVsdEhhc2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6
VHlwZURvbWFpbjo6VHlwZURvbWFpbkVudW0+IDogSW50SGFzaDxJbnNwZWN0b3I6OlByb3RvY29s
OjpUeXBlRG9tYWluOjpUeXBlRG9tYWluRW51bT4geyB9Oworc3RydWN0IERlZmF1bHRIYXNoPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlR5cGVEb21haW46OkVudW0+IDogSW50SGFzaDxJbnNwZWN0b3I6
OlByb3RvY29sOjpUeXBlRG9tYWluOjpFbnVtPiB7IH07CiAKIH0gLy8gbmFtZXNwYWNlIFdURgog
IyMjIEVuZCBGaWxlOiBUZXN0UHJvdG9jb2xPYmplY3RzLmgKQEAgLTUzMCw4ICs1NTgsNyBAQCBz
dHJ1Y3QgRGVmYXVsdEhhc2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6VHlwZURvbWFpbjo6VHlwZURv
bWFpbkVudW0+IDogSW50SGFzaDxJbgogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlRl
c3RQcm90b2NvbE9iamVjdHMuaCIKIAotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogCiBu
YW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtNTQxLDE0ICs1NjgsMTYgQEAgbmFtZXNwYWNlIFRl
c3RIZWxwZXJzIHsKIAogc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGVudW1fY29uc3RhbnRfdmFs
dWVzW10gPSB7CiAgICAgInNoYXJlZCIsCi0gICAgInJlZCIsCisgICAgIjEiLAorICAgICIyIiwK
KyAgICAic2hhcmVkUmVxdWlyZWQiLAorICAgICJncmV5IiwKKyAgICAic2hhcmVkT3B0aW9uYWwi
LAogICAgICJncmVlbiIsCi0gICAgImJsdWUiLAogICAgICJibGFjayIsCisgICAgInJlZCIsCiAg
ICAgIndoaXRlIiwKLSAgICAiY3lhbiIsCi0gICAgIm1hZ2VudGEiLAotICAgICJ5ZWxsb3ciLAor
ICAgICJibHVlIiwKIH07CiAKIFN0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSkg
ewpAQCAtNTU4LDE3ICs1ODcsMTYgQEAgU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKGludCBj
b2RlKSB7CiAvLyBFbnVtcyBpbiB0aGUgJ1R5cGVEb21haW4nIERvbWFpbgogCiB0ZW1wbGF0ZTw+
Ci1PcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpUeXBlRG9tYWluOjpUeXBlRG9tYWluRW51
bT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlR5cGVEb21h
aW46OlR5cGVEb21haW5FbnVtPihjb25zdCBTdHJpbmcmIHByb3RvY29sU3RyaW5nKQorT3B0aW9u
YWw8UHJvdG9jb2w6OlR5cGVEb21haW46OkVudW0+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxQ
cm90b2NvbDo6VHlwZURvbWFpbjo6RW51bT4oY29uc3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykK
IHsKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNvbnN0YW50VmFsdWVzW10gPSB7Ci0gICAgICAg
IChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6VHlwZURvbWFpbjo6VHlwZURvbWFpbkVudW06
OlNoYXJlZCwKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpUeXBlRG9tYWlu
OjpUeXBlRG9tYWluRW51bTo6UmVkLAotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9j
b2w6OlR5cGVEb21haW46OlR5cGVEb21haW5FbnVtOjpHcmVlbiwKLSAgICAgICAgKHNpemVfdClJ
bnNwZWN0b3I6OlByb3RvY29sOjpUeXBlRG9tYWluOjpUeXBlRG9tYWluRW51bTo6Qmx1ZSwKKyAg
ICAgICAgKHNpemVfdClQcm90b2NvbDo6VHlwZURvbWFpbjo6RW51bTo6U2hhcmVkLAorICAgICAg
ICAoc2l6ZV90KVByb3RvY29sOjpUeXBlRG9tYWluOjpFbnVtOjoxLAorICAgICAgICAoc2l6ZV90
KVByb3RvY29sOjpUeXBlRG9tYWluOjpFbnVtOjoyLAogICAgIH07Ci0gICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCA0OyArK2kpCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAzOyArK2kpCiAg
ICAgICAgIGlmIChwcm90b2NvbFN0cmluZyA9PSBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb25zdGFu
dFZhbHVlc1tpXV0pCi0gICAgICAgICAgICByZXR1cm4gKEluc3BlY3Rvcjo6UHJvdG9jb2w6OlR5
cGVEb21haW46OlR5cGVEb21haW5FbnVtKWNvbnN0YW50VmFsdWVzW2ldOworICAgICAgICAgICAg
cmV0dXJuIChQcm90b2NvbDo6VHlwZURvbWFpbjo6RW51bSljb25zdGFudFZhbHVlc1tpXTsKIAog
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiB9CkBAIC02MjUsNyArNjUzLDcgQEAgY2xhc3MgT2Jq
Q0luc3BlY3RvckNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBB
bHRlcm5hdGVDb21tYW4KICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAg
ICBPYmpDSW5zcGVjdG9yQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyKGlkPFRlc3RQcm90
b2NvbENvbW1hbmREb21haW5Eb21haW5IYW5kbGVyPiBoYW5kbGVyKSB7IG1fZGVsZWdhdGUgPSBo
YW5kbGVyOyB9Ci0gICAgdm9pZCBjb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZShsb25nIHJlcXVl
c3RJZCkgZmluYWw7CisgICAgdm9pZCBjb21tYW5kKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBjb25z
dCBTdHJpbmcmIGVudW1SZXF1aXJlZCwgY29uc3QgU3RyaW5nJiBvcHRfZW51bU9wdGlvbmFsLCBj
b25zdCBTdHJpbmcmIHBhcmFtZXRlclJlcXVpcmVkLCBjb25zdCBTdHJpbmcmIG9wdF9wYXJhbWV0
ZXJPcHRpb25hbCkgZmluYWw7CiBwcml2YXRlOgogICAgIFJldGFpblB0cjxpZDxUZXN0UHJvdG9j
b2xDb21tYW5kRG9tYWluRG9tYWluSGFuZGxlcj4+IG1fZGVsZWdhdGU7CiB9OwpAQCAtNjczLDI2
ICs3MDEsNDcgQEAgcHJpdmF0ZToKIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKLXZvaWQgT2Jq
Q0luc3BlY3RvckNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Y29tbWFuZFdpdGhFbnVt
UmV0dXJuVmFsdWUobG9uZyByZXF1ZXN0SWQpCit2b2lkIE9iakNJbnNwZWN0b3JDb21tYW5kRG9t
YWluQmFja2VuZERpc3BhdGNoZXI6OmNvbW1hbmQobG9uZyBwcm90b2NvbF9jYWxsSWQsIGNvbnN0
IFN0cmluZyYgaW5fZW51bVJlcXVpcmVkLCBjb25zdCBTdHJpbmcmIGluX29wdF9lbnVtT3B0aW9u
YWwsIGNvbnN0IFN0cmluZyYgaW5fcGFyYW1ldGVyUmVxdWlyZWQsIGNvbnN0IFN0cmluZyYgaW5f
b3B0X3BhcmFtZXRlck9wdGlvbmFsKQogewotICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNU
b1NlbGVjdG9yOkBzZWxlY3Rvcihjb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZVdpdGhFcnJvckNh
bGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazopXSkgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigp
LT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhv
ZE5vdEZvdW5kLCAiJ0NvbW1hbmREb21haW4uY29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUnIHdh
cyBub3QgZm91bmQiX3MpOworICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9y
OkBzZWxlY3Rvcihjb21tYW5kV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOmVudW1S
ZXF1aXJlZDplbnVtT3B0aW9uYWw6cGFyYW1ldGVyUmVxdWlyZWQ6cGFyYW1ldGVyT3B0aW9uYWw6
KV0pIHsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihw
cm90b2NvbF9jYWxsSWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidDb21t
YW5kRG9tYWluLmNvbW1hbmQnIHdhcyBub3QgZm91bmQiX3MpOwogICAgICAgICBiYWNrZW5kRGlz
cGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
CiAgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7Ci0gICAgICAgIGJh
Y2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5k
RGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNo
ZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxsSWQsIEJhY2tlbmREaXNwYXRj
aGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwogICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5z
ZW5kUGVuZGluZ0Vycm9ycygpOwogICAgIH07CiAKLSAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBe
KFRlc3RQcm90b2NvbENvbW1hbmREb21haW5Db21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZVJldHVy
blZhbHVlIHJldHVyblZhbHVlKSB7Ci0gICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdE9i
amVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0
U3RyaW5nKCJyZXR1cm5WYWx1ZSJfcywgdG9Qcm90b2NvbFN0cmluZyhyZXR1cm5WYWx1ZSkpOwot
ICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZN
b3ZlKHJlc3VsdE9iamVjdCksIGZhbHNlKTsKKyAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeKFRl
c3RQcm90b2NvbFR5cGVEb21haW5FbnVtIG91dF9lbnVtUmVxdWlyZWQsIFRlc3RQcm90b2NvbFR5
cGVEb21haW5FbnVtICpvdXRfb3B0X2VudW1PcHRpb25hbCwgVGVzdFByb3RvY29sQ29tbWFuZERv
bWFpbihhbm9ueW1vdXMpIG91dF9yZXR1cm5SZXF1aXJlZCwgVGVzdFByb3RvY29sQ29tbWFuZERv
bWFpbihhbm9ueW1vdXMpICpvdXRfb3B0X3JldHVybk9wdGlvbmFsKSB7CisgICAgICAgIGF1dG8g
cHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBw
cm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJlbnVtUmVxdWlyZWQiX3MsIHRvUHJvdG9j
b2xTdHJpbmcob3V0X2VudW1SZXF1aXJlZCkpOworICAgICAgICBpZiAoISFvdXRfb3B0X2VudW1P
cHRpb25hbCkKKyAgICAgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoImVu
dW1PcHRpb25hbCJfcywgdG9Qcm90b2NvbFN0cmluZygqb3V0X29wdF9lbnVtT3B0aW9uYWwpKTsK
KyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygicmV0dXJuUmVxdWlyZWQi
X3MsIHRvUHJvdG9jb2xTdHJpbmcob3V0X3JldHVyblJlcXVpcmVkKSk7CisgICAgICAgIGlmICgh
IW91dF9vcHRfcmV0dXJuT3B0aW9uYWwpCisgICAgICAgICAgICBwcm90b2NvbF9qc29uTWVzc2Fn
ZS0+c2V0U3RyaW5nKCJyZXR1cm5PcHRpb25hbCJfcywgdG9Qcm90b2NvbFN0cmluZygqb3V0X29w
dF9yZXR1cm5PcHRpb25hbCkpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVz
cG9uc2UocHJvdG9jb2xfY2FsbElkLCBXVEZNb3ZlKHByb3RvY29sX2pzb25NZXNzYWdlKSwgZmFs
c2UpOwogICAgIH07CiAKLSAgICBbbV9kZWxlZ2F0ZSBjb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1
ZVdpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3ND
YWxsYmFja107CisgICAgT3B0aW9uYWw8VGVzdFByb3RvY29sVHlwZURvbWFpbkVudW0+IG9faW5f
ZW51bVJlcXVpcmVkID0gZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbFR5cGVEb21haW5F
bnVtPihpbl9lbnVtUmVxdWlyZWQpOworICAgIGlmICghb19pbl9lbnVtUmVxdWlyZWQpIHsKKyAg
ICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlz
cGF0Y2hlcjo6SW52YWxpZFBhcmFtcywgIlBhcmFtZXRlciAnZW51bVJlcXVpcmVkJyBvZiBtZXRo
b2QgJ0NvbW1hbmREb21haW4uY29tbWFuZCcgY2Fubm90IGJlIHByb2Nlc3NlZCJfcyk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgT3B0aW9uYWw8VGVzdFByb3RvY29sVHlwZURvbWFpbkVu
dW0+IG9faW5fb3B0X2VudW1PcHRpb25hbDsKKyAgICBpZiAoISFpbl9vcHRfZW51bU9wdGlvbmFs
KQorICAgICAgICBvX2luX29wdF9lbnVtT3B0aW9uYWwgPSBmcm9tUHJvdG9jb2xTdHJpbmc8VGVz
dFByb3RvY29sVHlwZURvbWFpbkVudW0+KGluX29wdF9lbnVtT3B0aW9uYWwpOworICAgIE9wdGlv
bmFsPFRlc3RQcm90b2NvbENvbW1hbmREb21haW4oYW5vbnltb3VzKT4gb19pbl9wYXJhbWV0ZXJS
ZXF1aXJlZCA9IGZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xDb21tYW5kRG9tYWluKGFu
b255bW91cyk+KGluX3BhcmFtZXRlclJlcXVpcmVkKTsKKyAgICBpZiAoIW9faW5fcGFyYW1ldGVy
UmVxdWlyZWQpIHsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xF
cnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFtcywgIlBhcmFtZXRlciAncGFyYW1l
dGVyUmVxdWlyZWQnIG9mIG1ldGhvZCAnQ29tbWFuZERvbWFpbi5jb21tYW5kJyBjYW5ub3QgYmUg
cHJvY2Vzc2VkIl9zKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBPcHRpb25hbDxUZXN0
UHJvdG9jb2xDb21tYW5kRG9tYWluKGFub255bW91cyk+IG9faW5fb3B0X3BhcmFtZXRlck9wdGlv
bmFsOworICAgIGlmICghIWluX29wdF9wYXJhbWV0ZXJPcHRpb25hbCkKKyAgICAgICAgb19pbl9v
cHRfcGFyYW1ldGVyT3B0aW9uYWwgPSBmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sQ29t
bWFuZERvbWFpbihhbm9ueW1vdXMpPihpbl9vcHRfcGFyYW1ldGVyT3B0aW9uYWwpOworICAgIFtt
X2RlbGVnYXRlIGNvbW1hbmRXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3ND
YWxsYmFjazpzdWNjZXNzQ2FsbGJhY2sgZW51bVJlcXVpcmVkOm9faW5fZW51bVJlcXVpcmVkLnZh
bHVlKCkgZW51bU9wdGlvbmFsOighIWluX29wdF9lbnVtT3B0aW9uYWwgPyAmb19pbl9vcHRfZW51
bU9wdGlvbmFsLnZhbHVlKCkgOiBuaWwpIHBhcmFtZXRlclJlcXVpcmVkOm9faW5fcGFyYW1ldGVy
UmVxdWlyZWQudmFsdWUoKSBwYXJhbWV0ZXJPcHRpb25hbDooISFpbl9vcHRfcGFyYW1ldGVyT3B0
aW9uYWwgPyAmb19pbl9vcHRfcGFyYW1ldGVyT3B0aW9uYWwudmFsdWUoKSA6IG5pbCldOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKQEAgLTg4NywxNiArOTM2LDIxIEBAIHVzaW5nIG5h
bWVzcGFjZSBJbnNwZWN0b3I7CiAgICAgcmV0dXJuIHNlbGY7CiB9CiAKLS0gKHZvaWQpZXZlbnRX
aXRoRW51bVBhcmFtZXRlcldpdGhQYXJhbWV0ZXI6KFRlc3RQcm90b2NvbEV2ZW50RG9tYWluRXZl
bnRXaXRoRW51bVBhcmFtZXRlclBhcmFtZXRlcilwYXJhbWV0ZXIKKy0gKHZvaWQpZXZlbnRXaXRo
RW51bVJlcXVpcmVkOihUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bSllbnVtUmVxdWlyZWQgZW51
bU9wdGlvbmFsOihUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bSAqKWVudW1PcHRpb25hbCBwYXJh
bWV0ZXJSZXF1aXJlZDooVGVzdFByb3RvY29sRXZlbnREb21haW4oYW5vbnltb3VzKSlwYXJhbWV0
ZXJSZXF1aXJlZCBwYXJhbWV0ZXJPcHRpb25hbDooVGVzdFByb3RvY29sRXZlbnREb21haW4oYW5v
bnltb3VzKSAqKXBhcmFtZXRlck9wdGlvbmFsCiB7CiAgICAgY29uc3QgRnJvbnRlbmRSb3V0ZXIm
IHJvdXRlciA9IF9jb250cm9sbGVyLT5mcm9udGVuZFJvdXRlcigpOwogCi0gICAgUmVmPEpTT046
Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIGpzb25N
ZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkV2ZW50RG9tYWluLmV2ZW50V2l0aEVudW1Q
YXJhbWV0ZXIiX3MpOwotICAgIFJlZjxKU09OOjpPYmplY3Q+IHBhcmFtc09iamVjdCA9IEpTT046
Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInBhcmFtZXRl
ciJfcywgdG9Qcm90b2NvbFN0cmluZyhwYXJhbWV0ZXIpKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0
T2JqZWN0KCJwYXJhbXMiX3MsIFdURk1vdmUocGFyYW1zT2JqZWN0KSk7Ci0gICAgcm91dGVyLnNl
bmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOworICAgIGF1dG8gcHJvdG9jb2xf
anNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIHByb3RvY29sX2pzb25N
ZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkV2ZW50RG9tYWluLmV2ZW50Il9zKTsKKyAg
ICBhdXRvIHByb3RvY29sX3BhcmFtc09iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Cisg
ICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoImVudW1SZXF1aXJlZCJfcywgdG9Q
cm90b2NvbFN0cmluZyhlbnVtUmVxdWlyZWQpKTsKKyAgICBpZiAoZW51bU9wdGlvbmFsKQorICAg
ICAgICBwcm90b2NvbF9wYXJhbXNPYmplY3QtPnNldFN0cmluZygiZW51bU9wdGlvbmFsIl9zLCB0
b1Byb3RvY29sU3RyaW5nKCgqZW51bU9wdGlvbmFsKSkpOworICAgIHByb3RvY29sX3BhcmFtc09i
amVjdC0+c2V0U3RyaW5nKCJwYXJhbWV0ZXJSZXF1aXJlZCJfcywgdG9Qcm90b2NvbFN0cmluZyhw
YXJhbWV0ZXJSZXF1aXJlZCkpOworICAgIGlmIChwYXJhbWV0ZXJPcHRpb25hbCkKKyAgICAgICAg
cHJvdG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInBhcmFtZXRlck9wdGlvbmFsIl9zLCB0
b1Byb3RvY29sU3RyaW5nKCgqcGFyYW1ldGVyT3B0aW9uYWwpKSk7CisgICAgcHJvdG9jb2xfanNv
bk1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIl9zLCBXVEZNb3ZlKHByb3RvY29sX3BhcmFtc09i
amVjdCkpOworICAgIHJvdXRlci5zZW5kRXZlbnQocHJvdG9jb2xfanNvbk1lc3NhZ2UtPnRvSlNP
TlN0cmluZygpKTsKIH0KIAogQGVuZApAQCAtOTQzLDIxICs5OTcsMjAgQEAgdXNpbmcgbmFtZXNw
YWNlIEluc3BlY3RvcjsKIAogdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29s
VHlwZURvbWFpbkVudW0pIHsKICAgICBUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bVNoYXJlZCwK
LSAgICBUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bVJlZCwKLSAgICBUZXN0UHJvdG9jb2xUeXBl
RG9tYWluRW51bUdyZWVuLAotICAgIFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtQmx1ZSwKKyAg
ICBUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bTEsCisgICAgVGVzdFByb3RvY29sVHlwZURvbWFp
bkVudW0yLAogfTsKIAogCiAKIEBwcm90b2NvbCBUZXN0UHJvdG9jb2xDb21tYW5kRG9tYWluRG9t
YWluSGFuZGxlciA8TlNPYmplY3Q+CiBAb3B0aW9uYWwKLS0gKHZvaWQpY29tbWFuZFdpdGhFbnVt
UmV0dXJuVmFsdWVXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVy
cm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKFRlc3RQcm90b2NvbENvbW1hbmRE
b21haW5Db21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZVJldHVyblZhbHVlIHJldHVyblZhbHVlKSlz
dWNjZXNzQ2FsbGJhY2s7CistICh2b2lkKWNvbW1hbmRXaXRoRXJyb3JDYWxsYmFjazoodm9pZChe
KShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4p
KFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtIGVudW1SZXF1aXJlZCwgVGVzdFByb3RvY29sVHlw
ZURvbWFpbkVudW0gKmVudW1PcHRpb25hbCwgVGVzdFByb3RvY29sQ29tbWFuZERvbWFpbihhbm9u
eW1vdXMpIHJldHVyblJlcXVpcmVkLCBUZXN0UHJvdG9jb2xDb21tYW5kRG9tYWluKGFub255bW91
cykgKnJldHVybk9wdGlvbmFsKSlzdWNjZXNzQ2FsbGJhY2sgZW51bVJlcXVpcmVkOihUZXN0UHJv
dG9jb2xUeXBlRG9tYWluRW51bSllbnVtUmVxdWlyZWQgZW51bU9wdGlvbmFsOihUZXN0UHJvdG9j
b2xUeXBlRG9tYWluRW51bSAqKWVudW1PcHRpb25hbCBwYXJhbWV0ZXJSZXF1aXJlZDooVGVzdFBy
b3RvY29sQ29tbWFuZERvbWFpbihhbm9ueW1vdXMpKXBhcmFtZXRlclJlcXVpcmVkIHBhcmFtZXRl
ck9wdGlvbmFsOihUZXN0UHJvdG9jb2xDb21tYW5kRG9tYWluKGFub255bW91cykgKilwYXJhbWV0
ZXJPcHRpb25hbDsKIEBlbmQKIAogX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQi
KSkpCiBAaW50ZXJmYWNlIFRlc3RQcm90b2NvbEV2ZW50RG9tYWluRG9tYWluRXZlbnREaXNwYXRj
aGVyIDogTlNPYmplY3QKLS0gKHZvaWQpZXZlbnRXaXRoRW51bVBhcmFtZXRlcldpdGhQYXJhbWV0
ZXI6KFRlc3RQcm90b2NvbEV2ZW50RG9tYWluRXZlbnRXaXRoRW51bVBhcmFtZXRlclBhcmFtZXRl
cilwYXJhbWV0ZXI7CistICh2b2lkKWV2ZW50V2l0aEVudW1SZXF1aXJlZDooVGVzdFByb3RvY29s
VHlwZURvbWFpbkVudW0pZW51bVJlcXVpcmVkIGVudW1PcHRpb25hbDooVGVzdFByb3RvY29sVHlw
ZURvbWFpbkVudW0gKillbnVtT3B0aW9uYWwgcGFyYW1ldGVyUmVxdWlyZWQ6KFRlc3RQcm90b2Nv
bEV2ZW50RG9tYWluKGFub255bW91cykpcGFyYW1ldGVyUmVxdWlyZWQgcGFyYW1ldGVyT3B0aW9u
YWw6KFRlc3RQcm90b2NvbEV2ZW50RG9tYWluKGFub255bW91cykgKilwYXJhbWV0ZXJPcHRpb25h
bDsKIEBlbmQKIAogCkBAIC0xMDUwLDEyICsxMTAzLDEwIEBAIGlubGluZSBTdHJpbmcgdG9Qcm90
b2NvbFN0cmluZyhUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bSB2YWx1ZSkKICAgICBzd2l0Y2go
dmFsdWUpIHsKICAgICBjYXNlIFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtU2hhcmVkOgogICAg
ICAgICByZXR1cm4gInNoYXJlZCJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFR5cGVEb21haW5F
bnVtUmVkOgotICAgICAgICByZXR1cm4gInJlZCJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFR5
cGVEb21haW5FbnVtR3JlZW46Ci0gICAgICAgIHJldHVybiAiZ3JlZW4iX3M7Ci0gICAgY2FzZSBU
ZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bUJsdWU6Ci0gICAgICAgIHJldHVybiAiYmx1ZSJfczsK
KyAgICBjYXNlIFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtMToKKyAgICAgICAgcmV0dXJuICIx
Il9zOworICAgIGNhc2UgVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW0yOgorICAgICAgICByZXR1
cm4gIjIiX3M7CiAgICAgfQogfQogCkBAIC0xMDY0LDEyICsxMTE1LDEwIEBAIGlubGluZSBPcHRp
b25hbDxUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0
IFN0cmluZyYgdmFsCiB7CiAgICAgaWYgKHZhbHVlID09ICJzaGFyZWQiKQogICAgICAgICByZXR1
cm4gVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW1TaGFyZWQ7Ci0gICAgaWYgKHZhbHVlID09ICJy
ZWQiKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW1SZWQ7Ci0gICAg
aWYgKHZhbHVlID09ICJncmVlbiIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xUeXBlRG9t
YWluRW51bUdyZWVuOwotICAgIGlmICh2YWx1ZSA9PSAiYmx1ZSIpCi0gICAgICAgIHJldHVybiBU
ZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bUJsdWU7CisgICAgaWYgKHZhbHVlID09ICIxIikKKyAg
ICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtMTsKKyAgICBpZiAodmFsdWUg
PT0gIjIiKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW0yOwogICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CiB9CiAKQEAgLTExMTcsMTcgKzExNjYsMTcgQEAgdXNpbmcg
bmFtZXNwYWNlIEluc3BlY3RvcjsKIAogQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUeXBlQ29udmVy
c2lvbnMgKFR5cGVEb21haW5Eb21haW4pCiAKLSsgKHZvaWQpX3BhcnNlVHlwZURvbWFpbkVudW06
KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOworKyAodm9pZClf
cGFyc2VFbnVtOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsK
IAogQGVuZAogCiBAaW1wbGVtZW50YXRpb24gVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChU
eXBlRG9tYWluRG9tYWluKQogCi0rICh2b2lkKV9wYXJzZVR5cGVEb21haW5FbnVtOihOU051bWJl
ciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAorKyAodm9pZClfcGFyc2VFbnVt
OihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAogewogICAgIFRI
Uk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEUocGF5bG9hZCwgW05TU3RyaW5nIGNsYXNzXSk7CiAg
ICAgT3B0aW9uYWw8VGVzdFByb3RvY29sVHlwZURvbWFpbkVudW0+IHJlc3VsdCA9IEluc3BlY3Rv
cjo6ZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtPihwYXlsb2Fk
KTsKLSAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9FTlVNX1ZBTFVFKHJlc3VsdCwgQCJUeXBl
RG9tYWluRW51bSIpOworICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX0VOVU1fVkFMVUUocmVz
dWx0LCBAIkVudW0iKTsKICAgICAqb3V0VmFsdWUgPSBAKHJlc3VsdC52YWx1ZSgpKTsKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2V4cGVjdGVkL2V2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBl
Lmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2V4cGVjdGVkL2V2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVU
eXBlLmpzb24tcmVzdWx0CmluZGV4IGUyZWQ5Zjg4OTRjZTc3NmIyNzJkNjExM2U1MzZjYWE3NDZl
YmNiODUuLmJlOTRiMzU5NDAwMzJiM2U5YTMzNmQ1NDEzNDQ3N2I5NjVjZDNhNTQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3Rl
ZC9ldmVudC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uLXJl
c3VsdAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
ZXhwZWN0ZWQvZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUu
anNvbi1yZXN1bHQKQEAgLTcwLDcgKzcwLDcgQEAgSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURv
bWFpbigiRG9tYWluIiwgWyJwYWdlIl0pOwogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5B
VEVfRElTUEFUQ0hFUlMpCiAKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgorI2luY2x1
ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckZyb250ZW5kUm91dGVyLmg+CiAKQEAgLTg4LDcgKzg4LDcgQEAgcHJpdmF0ZToKIGNsYXNz
IEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyIDogcHVibGljIEFsdGVybmF0ZUJhY2tl
bmREaXNwYXRjaGVyIHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5BbHRlcm5hdGVEb21haW5CYWNr
ZW5kRGlzcGF0Y2hlcigpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBDb21tYW5kKGxvbmcgY2FsbElk
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIENvbW1hbmQobG9uZyBwcm90b2NvbF9jYWxsSWQpID0g
MDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgpAQCAtMTMwLDExICsxMzAsMTQgQEAg
cHVibGljOgogCiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8dHVw
bGU+CisjaW5jbHVkZSA8d3RmL0V4cGVjdGVkLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+
CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3Ig
ewogCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKwogCiAjaWYgRU5BQkxFKElOU1BFQ1RP
Ul9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiBjbGFzcyBBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlz
cGF0Y2hlcjsKQEAgLTE0Miw3ICsxNDUsNyBAQCBjbGFzcyBBbHRlcm5hdGVEb21haW5CYWNrZW5k
RGlzcGF0Y2hlcjsKIAogY2xhc3MgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKIHB1
YmxpYzoKLSAgICB2aXJ0dWFsIHZvaWQgQ29tbWFuZChFcnJvclN0cmluZyYpID0gMDsKKyAgICB2
aXJ0dWFsIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IENvbW1hbmQoKSA9IDA7CiBwcm90
ZWN0ZWQ6CiAgICAgdmlydHVhbCB+RG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCk7CiB9
OwpAQCAtMTUwLDkgKzE1Myw5IEBAIHByb3RlY3RlZDoKIGNsYXNzIERvbWFpbkJhY2tlbmREaXNw
YXRjaGVyIGZpbmFsIDogcHVibGljIFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIHsKIHB1
YmxpYzoKICAgICBzdGF0aWMgUmVmPERvbWFpbkJhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUoQmFj
a2VuZERpc3BhdGNoZXImLCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKLSAgICB2
b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpT
T046Ok9iamVjdD4mJiBtZXNzYWdlKSBmaW5hbDsKKyAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcHJv
dG9jb2xfY2FsbElkLCBjb25zdCBTdHJpbmcmIHByb3RvY29sX21ldGhvZCwgUmVmPEpTT046Ok9i
amVjdD4mJiBwcm90b2NvbF9tZXNzYWdlKSBmaW5hbDsKIHByaXZhdGU6Ci0gICAgdm9pZCBDb21t
YW5kKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOwor
ICAgIHZvaWQgQ29tbWFuZChsb25nIHByb3RvY2xfY2FsbElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0
PiYmIHByb3RvY29sX3BhcmFtZXRlcnMpOwogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRF
X0RJU1BBVENIRVJTKQogcHVibGljOgogICAgIHZvaWQgc2V0QWx0ZXJuYXRlRGlzcGF0Y2hlcihB
bHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlciogYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeyBt
X2FsdGVybmF0ZURpc3BhdGNoZXIgPSBhbHRlcm5hdGVEaXNwYXRjaGVyOyB9CkBAIC0yMDEsOSAr
MjA0LDcgQEAgcHJpdmF0ZToKICNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCiAK
ICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2lu
Y2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+
Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9B
TFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAjaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNw
YXRjaGVycy5oIgpAQCAtMjI1LDM4ICsyMjYsMzggQEAgRG9tYWluQmFja2VuZERpc3BhdGNoZXI6
OkRvbWFpbkJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGEK
ICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4oIkRv
bWFpbiJfcywgdGhpcyk7CiB9CiAKLXZvaWQgRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OmRpc3Bh
dGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVj
dD4mJiBtZXNzYWdlKQordm9pZCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9u
ZyBwcm90b2NvbF9jYWxsSWQsIGNvbnN0IFN0cmluZyYgcHJvdG9jb2xfbWV0aG9kLCBSZWY8SlNP
Tjo6T2JqZWN0PiYmIHByb3RvY29sX21lc3NhZ2UpCiB7CiAgICAgUmVmPERvbWFpbkJhY2tlbmRE
aXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKIAotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBh
cmFtZXRlcnM7Ci0gICAgbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3MsIHBhcmFtZXRlcnMp
OworICAgIGF1dG8gcHJvdG9jb2xfcGFyYW1ldGVycyA9IHByb3RvY29sX21lc3NhZ2UtPmdldE9i
amVjdCgicGFyYW1zIl9zKTsKIAotICAgIGlmIChtZXRob2QgPT0gIkNvbW1hbmQiKSB7Ci0gICAg
ICAgIENvbW1hbmQocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKKyAgICBpZiAocHJv
dG9jb2xfbWV0aG9kID09ICJDb21tYW5kIikgeworICAgICAgICBDb21tYW5kKHByb3RvY29sX2Nh
bGxJZCwgV1RGTW92ZShwcm90b2NvbF9wYXJhbWV0ZXJzKSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tl
bmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEb21haW4uIiArIG1ldGhvZCArICInIHdh
cyBub3QgZm91bmQiKTsKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVy
cm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEb21haW4uIiArIHByb3Rv
Y29sX21ldGhvZCArICInIHdhcyBub3QgZm91bmQiKTsKIH0KIAotdm9pZCBEb21haW5CYWNrZW5k
RGlzcGF0Y2hlcjo6Q29tbWFuZChsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4m
JikKK3ZvaWQgRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkNvbW1hbmQobG9uZyBwcm90b2NvbF9j
YWxsSWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9B
TFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAgICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgewot
ICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPkNvbW1hbmQocmVxdWVzdElkKTsKKyAgICAg
ICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5Db21tYW5kKHByb3RvY29sX2NhbGxJZCk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVf
RElTUEFUQ0hFUlMpCiAKLSAgICBFcnJvclN0cmluZyBlcnJvcjsKLSAgICBSZWY8SlNPTjo6T2Jq
ZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIG1fYWdlbnQtPkNvbW1h
bmQoZXJyb3IpOworICAgIGF1dG8gcmVzdWx0ID0gbV9hZ2VudC0+Q29tbWFuZCgpOworICAgIGlm
ICghcmVzdWx0KSB7CisgICAgICAgIEFTU0VSVCghcmVzdWx0LmVycm9yKCkuaXNFbXB0eSgpKTsK
KyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5k
RGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIHJlc3VsdC5lcnJvcigpKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KIAotICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCi0gICAgICAgIG1fYmFja2VuZERp
c3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2Up
OwotICAgIGVsc2UKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xF
cnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKKyAg
ICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAg
ICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocHJvdG9jb2xfY2FsbElkLCBXVEZN
b3ZlKHByb3RvY29sX2pzb25NZXNzYWdlKSwgZmFsc2UpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBJ
bnNwZWN0b3IKQEAgLTI5Nyw2ICsyOTgsNyBAQCB2b2lkIERvbWFpbkJhY2tlbmREaXNwYXRjaGVy
OjpDb21tYW5kKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQogCiAjaW5j
bHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+
CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewpAQCAtMzQ5LDE2ICszNTEsMTUgQEAgcHJpdmF0
ZToKICNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgogCiAjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCiB2b2lkIERvbWFpbkZyb250
ZW5kRGlzcGF0Y2hlcjo6RXZlbnQoKQogewotICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNz
YWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5n
KCJtZXRob2QiX3MsICJEb21haW4uRXZlbnQiX3MpOworICAgIGF1dG8gcHJvdG9jb2xfanNvbk1l
c3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIHByb3RvY29sX2pzb25NZXNzYWdl
LT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRvbWFpbi5FdmVudCJfcyk7CiAKLSAgICBtX2Zyb250
ZW5kUm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOworICAgIG1f
ZnJvbnRlbmRSb3V0ZXIuc2VuZEV2ZW50KHByb3RvY29sX2pzb25NZXNzYWdlLT50b0pTT05TdHJp
bmcoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgpAQCAtMzk4LDcgKzM5OSw5IEBA
IHZvaWQgRG9tYWluRnJvbnRlbmREaXNwYXRjaGVyOjpFdmVudCgpCiAjcHJhZ21hIG9uY2UKIAog
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KLSNpbmNs
dWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5j
bHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAK
IG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC00NTIsOCArNDU1LDcgQEAgbmFtZXNwYWNlIFBy
b3RvY29sIHsKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmpl
Y3RzLmgiCiAKLSNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9D
U3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KIAogbmFtZXNwYWNlIEluc3Bl
Y3RvciB7CiAKQEAgLTUwOSw3ICs1MTEsNyBAQCBjbGFzcyBPYmpDSW5zcGVjdG9yRG9tYWluQmFj
a2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgQWx0ZXJuYXRlRG9tYWluQmFja2VuZAogICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIE9iakNJbnNwZWN0b3JEb21h
aW5CYWNrZW5kRGlzcGF0Y2hlcihpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPiBo
YW5kbGVyKSB7IG1fZGVsZWdhdGUgPSBoYW5kbGVyOyB9Ci0gICAgdm9pZCBDb21tYW5kKGxvbmcg
cmVxdWVzdElkKSBmaW5hbDsKKyAgICB2b2lkIENvbW1hbmQobG9uZyBwcm90b2NvbF9jYWxsSWQp
IGZpbmFsOwogcHJpdmF0ZToKICAgICBSZXRhaW5QdHI8aWQ8VGVzdFByb3RvY29sRG9tYWluRG9t
YWluSGFuZGxlcj4+IG1fZGVsZWdhdGU7CiB9OwpAQCAtNTU3LDIxICs1NTksMjIgQEAgcHJpdmF0
ZToKIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKLXZvaWQgT2JqQ0luc3BlY3RvckRvbWFpbkJh
Y2tlbmREaXNwYXRjaGVyOjpDb21tYW5kKGxvbmcgcmVxdWVzdElkKQordm9pZCBPYmpDSW5zcGVj
dG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkNvbW1hbmQobG9uZyBwcm90b2NvbF9jYWxsSWQp
CiB7CiAgICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKENv
bW1hbmRXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6KV0pIHsKLSAgICAgICAgYmFj
a2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmRE
aXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEb21haW4uQ29tbWFuZCcgd2FzIG5vdCBmb3Vu
ZCJfcyk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3Io
cHJvdG9jb2xfY2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRG9t
YWluLkNvbW1hbmQnIHdhcyBub3QgZm91bmQiX3MpOwogICAgICAgICBiYWNrZW5kRGlzcGF0Y2hl
cigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAg
aWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7Ci0gICAgICAgIGJhY2tlbmRE
aXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0
Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+
cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxsSWQsIEJhY2tlbmREaXNwYXRjaGVyOjpT
ZXJ2ZXJFcnJvciwgZXJyb3IpOwogICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVu
ZGluZ0Vycm9ycygpOwogICAgIH07CiAKICAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeewotICAg
ICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBKU09OOjpP
YmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7CisgICAgICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3Nh
Z2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigp
LT5zZW5kUmVzcG9uc2UocHJvdG9jb2xfY2FsbElkLCBXVEZNb3ZlKHByb3RvY29sX2pzb25NZXNz
YWdlKSwgZmFsc2UpOwogICAgIH07CiAKICAgICBbbV9kZWxlZ2F0ZSBDb21tYW5kV2l0aEVycm9y
Q2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsK
QEAgLTc3Myw5ICs3NzYsOSBAQCB1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwogewogICAgIGNv
bnN0IEZyb250ZW5kUm91dGVyJiByb3V0ZXIgPSBfY29udHJvbGxlci0+ZnJvbnRlbmRSb3V0ZXIo
KTsKIAotICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0Ojpj
cmVhdGUoKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJEb21haW4u
RXZlbnQiX3MpOwotICAgIHJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmlu
ZygpKTsKKyAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVh
dGUoKTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJE
b21haW4uRXZlbnQiX3MpOworICAgIHJvdXRlci5zZW5kRXZlbnQocHJvdG9jb2xfanNvbk1lc3Nh
Z2UtPnRvSlNPTlN0cmluZygpKTsKIH0KIAogQGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2V2ZW50cy13aXRoLW9w
dGlvbmFsLXBhcmFtZXRlcnMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1l
dGVycy5qc29uLXJlc3VsdAppbmRleCA5MGUxNGU4YzdiYjRmMDUxNTEzY2JkN2MzYzZkYzdiOTZm
Y2MxYTc0Li44NDdiNDkzZjcxYzU3ZTQyNzNkODQ5NjJiYWU5ZjZjOTIwZmRjOWRhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0
ZWQvZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uLXJlc3VsdAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZXZlbnRz
LXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uLXJlc3VsdApAQCAtNzAsNyArNzAsNyBAQCBJ
bnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJEYXRhYmFzZSIsIG51bGwpOwogCiAjaWYg
RU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAKLSNpbmNsdWRlICJUZXN0
UHJvdG9jb2xUeXBlcy5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgogI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CiAKQEAgLTEyNiwx
MSArMTI2LDE0IEBAIHByaXZhdGU6CiAKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgi
CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4K
KyNpbmNsdWRlIDx0dXBsZT4KKyNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4KKyNpbmNsdWRlIDx3
dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNw
YWNlIEluc3BlY3RvciB7CiAKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCiAKIAogCkBA
IC0xNzEsOSArMTc0LDcgQEAgdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiAjaW5jbHVkZSAi
VGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgogI2lu
Y2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcu
aD4KIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogI2luY2x1
ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKQEAgLTIyMSw2ICsyMjIsNyBA
QCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMu
aCIKICNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5o
PgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9y
IHsKQEAgLTIzMSw4ICsyMzMsOCBAQCBjbGFzcyBEYXRhYmFzZUZyb250ZW5kRGlzcGF0Y2hlciB7
CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgRGF0YWJhc2VGcm9u
dGVuZERpc3BhdGNoZXIoRnJvbnRlbmRSb3V0ZXImIGZyb250ZW5kUm91dGVyKSA6IG1fZnJvbnRl
bmRSb3V0ZXIoZnJvbnRlbmRSb3V0ZXIpIHsgfQotICAgIHZvaWQgZGlkRXhlY3V0ZU9wdGlvbmFs
UGFyYW1ldGVycyhSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiBjb2x1bW5OYW1lcywgY29u
c3QgU3RyaW5nKiBub3RlcywgY29uc3QgZG91YmxlKiB0aW1lc3RhbXAsIFJlZlB0cjxKU09OOjpP
YmplY3Q+IHZhbHVlcywgUmVmUHRyPEpTT046OlZhbHVlPiBwYXlsb2FkLCBSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiBzcWxFcnJvciwgY29uc3QgU3RyaW5nKiBz
Y3JlZW5Db2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxp
c3Q+IGFsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nKiBwcmludENvbG9yKTsKLSAgICB2b2lk
IGRpZEV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJp
bmc+PiBjb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBub3RlcywgZG91YmxlIHRpbWVzdGFtcCwg
UmVmUHRyPEpTT046Ok9iamVjdD4gdmFsdWVzLCBSZWZQdHI8SlNPTjo6VmFsdWU+IHBheWxvYWQs
IFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IHNxbEVycm9yLCBj
b25zdCBTdHJpbmcmIHNjcmVlbkNvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0
YWJhc2U6OkNvbG9yTGlzdD4gYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcmIHByaW50Q29s
b3IpOworICAgIHZvaWQgZGlkRXhlY3V0ZU9wdGlvbmFsUGFyYW1ldGVycyhSZWZQdHI8SlNPTjo6
QXJyYXlPZjxTdHJpbmc+PiYmIG9wdF9jb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBvcHRfbm90
ZXMsIE9wdGlvbmFsPGRvdWJsZT4mJiBvcHRfdGltZXN0YW1wLCBSZWZQdHI8SlNPTjo6T2JqZWN0
PiYmIG9wdF92YWx1ZXMsIFJlZlB0cjxKU09OOjpWYWx1ZT4mJiBvcHRfcGF5bG9hZCwgUmVmUHRy
PFByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+JiYgb3B0X3NxbEVycm9yLCBjb25zdCBTdHJpbmcm
IG9wdF9zY3JlZW5Db2xvciwgUmVmUHRyPFByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiYm
IG9wdF9hbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyYgb3B0X3ByaW50Q29sb3IpOworICAg
IHZvaWQgZGlkRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKFJlZjxKU09OOjpBcnJheU9mPFN0
cmluZz4+JiYgY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgbm90ZXMsIGRvdWJsZSB0aW1lc3Rh
bXAsIFJlZjxKU09OOjpPYmplY3Q+JiYgdmFsdWVzLCBSZWY8SlNPTjo6VmFsdWU+JiYgcGF5bG9h
ZCwgUmVmPFByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+JiYgc3FsRXJyb3IsIGNvbnN0IFN0cmlu
ZyYgc2NyZWVuQ29sb3IsIFJlZjxQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4mJiBhbHRl
cm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyYgcHJpbnRDb2xvcik7CiBwcml2YXRlOgogICAgIEZy
b250ZW5kUm91dGVyJiBtX2Zyb250ZW5kUm91dGVyOwogfTsKQEAgLTI3NCw1NSArMjc2LDU0IEBA
IHByaXZhdGU6CiAjaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKIAogI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8
d3RmL3RleHQvQ1N0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAotdm9pZCBEYXRh
YmFzZUZyb250ZW5kRGlzcGF0Y2hlcjo6ZGlkRXhlY3V0ZU9wdGlvbmFsUGFyYW1ldGVycyhSZWZQ
dHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiBjb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nKiBub3Rl
cywgY29uc3QgZG91YmxlKiB0aW1lc3RhbXAsIFJlZlB0cjxKU09OOjpPYmplY3Q+IHZhbHVlcywg
UmVmUHRyPEpTT046OlZhbHVlPiBwYXlsb2FkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
RGF0YWJhc2U6OkVycm9yPiBzcWxFcnJvciwgY29uc3QgU3RyaW5nKiBzY3JlZW5Db2xvciwgUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+IGFsdGVybmF0ZUNv
bG9ycywgY29uc3QgU3RyaW5nKiBwcmludENvbG9yKQordm9pZCBEYXRhYmFzZUZyb250ZW5kRGlz
cGF0Y2hlcjo6ZGlkRXhlY3V0ZU9wdGlvbmFsUGFyYW1ldGVycyhSZWZQdHI8SlNPTjo6QXJyYXlP
ZjxTdHJpbmc+PiYmIG9wdF9jb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBvcHRfbm90ZXMsIE9w
dGlvbmFsPGRvdWJsZT4mJiBvcHRfdGltZXN0YW1wLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIG9w
dF92YWx1ZXMsIFJlZlB0cjxKU09OOjpWYWx1ZT4mJiBvcHRfcGF5bG9hZCwgUmVmUHRyPFByb3Rv
Y29sOjpEYXRhYmFzZTo6RXJyb3I+JiYgb3B0X3NxbEVycm9yLCBjb25zdCBTdHJpbmcmIG9wdF9z
Y3JlZW5Db2xvciwgUmVmUHRyPFByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiYmIG9wdF9h
bHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyYgb3B0X3ByaW50Q29sb3IpCiB7Ci0gICAgUmVm
PEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAg
IGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRhdGFiYXNlLmRpZEV4ZWN1dGVP
cHRpb25hbFBhcmFtZXRlcnMiX3MpOwotICAgIFJlZjxKU09OOjpPYmplY3Q+IHBhcmFtc09iamVj
dCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgaWYgKGNvbHVtbk5hbWVzKQotICAgICAg
ICBwYXJhbXNPYmplY3QtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgY29sdW1uTmFtZXMpOwot
ICAgIGlmIChub3RlcykKLSAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoIm5vdGVzIl9z
LCAqbm90ZXMpOwotICAgIGlmICh0aW1lc3RhbXApCi0gICAgICAgIHBhcmFtc09iamVjdC0+c2V0
RG91YmxlKCJ0aW1lc3RhbXAiX3MsICp0aW1lc3RhbXApOwotICAgIGlmICh2YWx1ZXMpCi0gICAg
ICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIHZhbHVlcyk7Ci0gICAgaWYg
KHBheWxvYWQpCi0gICAgICAgIHBhcmFtc09iamVjdC0+c2V0VmFsdWUoInBheWxvYWQiX3MsICpw
YXlsb2FkKTsKLSAgICBpZiAoc3FsRXJyb3IpCi0gICAgICAgIHBhcmFtc09iamVjdC0+c2V0T2Jq
ZWN0KCJzcWxFcnJvciJfcywgc3FsRXJyb3IpOwotICAgIGlmIChzY3JlZW5Db2xvcikKLSAgICAg
ICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCAqc2NyZWVuQ29sb3Ip
OwotICAgIGlmIChhbHRlcm5hdGVDb2xvcnMpCi0gICAgICAgIHBhcmFtc09iamVjdC0+c2V0QXJy
YXkoImFsdGVybmF0ZUNvbG9ycyJfcywgYWx0ZXJuYXRlQ29sb3JzKTsKLSAgICBpZiAocHJpbnRD
b2xvcikKLSAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInByaW50Q29sb3IiX3MsICpw
cmludENvbG9yKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiX3MsIFdURk1v
dmUocGFyYW1zT2JqZWN0KSk7CisgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046
Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygi
bWV0aG9kIl9zLCAiRGF0YWJhc2UuZGlkRXhlY3V0ZU9wdGlvbmFsUGFyYW1ldGVycyJfcyk7Cisg
ICAgYXV0byBwcm90b2NvbF9wYXJhbXNPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwor
ICAgIGlmICghIW9wdF9jb2x1bW5OYW1lcykKKyAgICAgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0
LT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIG9wdF9jb2x1bW5OYW1lcy5yZWxlYXNlTm9uTnVs
bCgpKTsKKyAgICBpZiAoISFvcHRfbm90ZXMpCisgICAgICAgIHByb3RvY29sX3BhcmFtc09iamVj
dC0+c2V0U3RyaW5nKCJub3RlcyJfcywgb3B0X25vdGVzKTsKKyAgICBpZiAoISFvcHRfdGltZXN0
YW1wKQorICAgICAgICBwcm90b2NvbF9wYXJhbXNPYmplY3QtPnNldERvdWJsZSgidGltZXN0YW1w
Il9zLCAqb3B0X3RpbWVzdGFtcCk7CisgICAgaWYgKCEhb3B0X3ZhbHVlcykKKyAgICAgICAgcHJv
dG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRPYmplY3QoInZhbHVlcyJfcywgb3B0X3ZhbHVlcy5yZWxl
YXNlTm9uTnVsbCgpKTsKKyAgICBpZiAoISFvcHRfcGF5bG9hZCkKKyAgICAgICAgcHJvdG9jb2xf
cGFyYW1zT2JqZWN0LT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgb3B0X3BheWxvYWQucmVsZWFzZU5v
bk51bGwoKSk7CisgICAgaWYgKCEhb3B0X3NxbEVycm9yKQorICAgICAgICBwcm90b2NvbF9wYXJh
bXNPYmplY3QtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIG9wdF9zcWxFcnJvci5yZWxlYXNlTm9u
TnVsbCgpKTsKKyAgICBpZiAoISFvcHRfc2NyZWVuQ29sb3IpCisgICAgICAgIHByb3RvY29sX3Bh
cmFtc09iamVjdC0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgb3B0X3NjcmVlbkNvbG9yKTsK
KyAgICBpZiAoISFvcHRfYWx0ZXJuYXRlQ29sb3JzKQorICAgICAgICBwcm90b2NvbF9wYXJhbXNP
YmplY3QtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIG9wdF9hbHRlcm5hdGVDb2xvcnMu
cmVsZWFzZU5vbk51bGwoKSk7CisgICAgaWYgKCEhb3B0X3ByaW50Q29sb3IpCisgICAgICAgIHBy
b3RvY29sX3BhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCBvcHRfcHJpbnRD
b2xvcik7CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIl9zLCBX
VEZNb3ZlKHByb3RvY29sX3BhcmFtc09iamVjdCkpOwogCi0gICAgbV9mcm9udGVuZFJvdXRlci5z
ZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKKyAgICBtX2Zyb250ZW5kUm91
dGVyLnNlbmRFdmVudChwcm90b2NvbF9qc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwogfQog
Ci12b2lkIERhdGFiYXNlRnJvbnRlbmREaXNwYXRjaGVyOjpkaWRFeGVjdXRlTm9PcHRpb25hbFBh
cmFtZXRlcnMoUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4gY29sdW1uTmFtZXMsIGNvbnN0
IFN0cmluZyYgbm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIFJlZlB0cjxKU09OOjpPYmplY3Q+IHZh
bHVlcywgUmVmUHRyPEpTT046OlZhbHVlPiBwYXlsb2FkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6RGF0YWJhc2U6OkVycm9yPiBzcWxFcnJvciwgY29uc3QgU3RyaW5nJiBzY3JlZW5Db2xv
ciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+IGFsdGVy
bmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nJiBwcmludENvbG9yKQordm9pZCBEYXRhYmFzZUZyb250
ZW5kRGlzcGF0Y2hlcjo6ZGlkRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKFJlZjxKU09OOjpB
cnJheU9mPFN0cmluZz4+JiYgY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgbm90ZXMsIGRvdWJs
ZSB0aW1lc3RhbXAsIFJlZjxKU09OOjpPYmplY3Q+JiYgdmFsdWVzLCBSZWY8SlNPTjo6VmFsdWU+
JiYgcGF5bG9hZCwgUmVmPFByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+JiYgc3FsRXJyb3IsIGNv
bnN0IFN0cmluZyYgc2NyZWVuQ29sb3IsIFJlZjxQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlz
dD4mJiBhbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyYgcHJpbnRDb2xvcikKIHsKLSAgICBS
ZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0g
ICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiRGF0YWJhc2UuZGlkRXhlY3V0
ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzIl9zKTsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBwYXJhbXNP
YmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIHBhcmFtc09iamVjdC0+c2V0QXJy
YXkoImNvbHVtbk5hbWVzIl9zLCBjb2x1bW5OYW1lcyk7Ci0gICAgcGFyYW1zT2JqZWN0LT5zZXRT
dHJpbmcoIm5vdGVzIl9zLCBub3Rlcyk7Ci0gICAgcGFyYW1zT2JqZWN0LT5zZXREb3VibGUoInRp
bWVzdGFtcCJfcywgdGltZXN0YW1wKTsKLSAgICBwYXJhbXNPYmplY3QtPnNldE9iamVjdCgidmFs
dWVzIl9zLCB2YWx1ZXMpOwotICAgIHBhcmFtc09iamVjdC0+c2V0VmFsdWUoInBheWxvYWQiX3Ms
IHBheWxvYWQpOwotICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJzcWxFcnJvciJfcywgc3Fs
RXJyb3IpOwotICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgc2Ny
ZWVuQ29sb3IpOwotICAgIHBhcmFtc09iamVjdC0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJf
cywgYWx0ZXJuYXRlQ29sb3JzKTsKLSAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygicHJpbnRD
b2xvciJfcywgcHJpbnRDb2xvcik7Ci0gICAganNvbk1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1z
Il9zLCBXVEZNb3ZlKHBhcmFtc09iamVjdCkpOworICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3Nh
Z2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5z
ZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRhdGFiYXNlLmRpZEV4ZWN1dGVOb09wdGlvbmFsUGFyYW1l
dGVycyJfcyk7CisgICAgYXV0byBwcm90b2NvbF9wYXJhbXNPYmplY3QgPSBKU09OOjpPYmplY3Q6
OmNyZWF0ZSgpOworICAgIHByb3RvY29sX3BhcmFtc09iamVjdC0+c2V0QXJyYXkoImNvbHVtbk5h
bWVzIl9zLCBXVEZNb3ZlKGNvbHVtbk5hbWVzKSk7CisgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0
LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCBub3Rlcyk7CisgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0
LT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywgdGltZXN0YW1wKTsKKyAgICBwcm90b2NvbF9wYXJh
bXNPYmplY3QtPnNldE9iamVjdCgidmFsdWVzIl9zLCBXVEZNb3ZlKHZhbHVlcykpOworICAgIHBy
b3RvY29sX3BhcmFtc09iamVjdC0+c2V0VmFsdWUoInBheWxvYWQiX3MsIFdURk1vdmUocGF5bG9h
ZCkpOworICAgIHByb3RvY29sX3BhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJzcWxFcnJvciJfcywg
V1RGTW92ZShzcWxFcnJvcikpOworICAgIHByb3RvY29sX3BhcmFtc09iamVjdC0+c2V0U3RyaW5n
KCJzY3JlZW5Db2xvciJfcywgc2NyZWVuQ29sb3IpOworICAgIHByb3RvY29sX3BhcmFtc09iamVj
dC0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywgV1RGTW92ZShhbHRlcm5hdGVDb2xvcnMp
KTsKKyAgICBwcm90b2NvbF9wYXJhbXNPYmplY3QtPnNldFN0cmluZygicHJpbnRDb2xvciJfcywg
cHJpbnRDb2xvcik7CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1z
Il9zLCBXVEZNb3ZlKHByb3RvY29sX3BhcmFtc09iamVjdCkpOwogCi0gICAgbV9mcm9udGVuZFJv
dXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKKyAgICBtX2Zyb250
ZW5kUm91dGVyLnNlbmRFdmVudChwcm90b2NvbF9qc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkp
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKQEAgLTM2Miw3ICszNjMsOSBAQCB2b2lk
IERhdGFiYXNlRnJvbnRlbmREaXNwYXRjaGVyOjpkaWRFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRl
cnMoUmVmUHRyPEpTT046OkFycgogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMu
aD4KKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5o
PgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9y
IHsKIApAQCAtMzkxLDcgKzM5NCw3IEBAIHVzaW5nIENvbG9yTGlzdCA9IEpTT046OkFycmF5T2Y8
U3RyaW5nPjsKIG5hbWVzcGFjZSBEYXRhYmFzZSB7CiAKIC8qIERhdGFiYXNlIGVycm9yLiAqLwot
Y2xhc3MgRXJyb3IgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7CitjbGFzcyBFcnJvciBmaW5h
bCA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKIHB1YmxpYzoKICAgICBlbnVtIHsKICAgICAg
ICAgTm9GaWVsZHNTZXQgPSAwLApAQCAtNDE4LDE3ICs0MjEsMTcgQEAgcHVibGljOgogICAgICAg
ICBmcmllbmQgY2xhc3MgRXJyb3I7CiAgICAgcHVibGljOgogCi0gICAgICAgIEJ1aWxkZXI8U1RB
VEUgfCBNZXNzYWdlU2V0PiYgc2V0TWVzc2FnZShjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgICAg
ICBCdWlsZGVyPFNUQVRFIHwgTWVzc2FnZVNldD4mIHNldE1lc3NhZ2UoY29uc3QgU3RyaW5nJiBp
bl9tZXNzYWdlKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRF
ICYgTWVzc2FnZVNldCksIHByb3BlcnR5X21lc3NhZ2VfYWxyZWFkeV9zZXQpOwotICAgICAgICAg
ICAgbV9yZXN1bHQtPnNldFN0cmluZygibWVzc2FnZSJfcywgdmFsdWUpOworICAgICAgICAgICAg
bV9yZXN1bHQtPnNldFN0cmluZygibWVzc2FnZSJfcywgaW5fbWVzc2FnZSk7CiAgICAgICAgICAg
ICByZXR1cm4gY2FzdFN0YXRlPE1lc3NhZ2VTZXQ+KCk7CiAgICAgICAgIH0KIAotICAgICAgICBC
dWlsZGVyPFNUQVRFIHwgQ29kZVNldD4mIHNldENvZGUoaW50IHZhbHVlKQorICAgICAgICBCdWls
ZGVyPFNUQVRFIHwgQ29kZVNldD4mIHNldENvZGUoaW50IGluX2NvZGUpCiAgICAgICAgIHsKICAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBDb2RlU2V0KSwgcHJvcGVydHlfY29k
ZV9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0SW50ZWdlcigiY29kZSJf
cywgdmFsdWUpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldEludGVnZXIoImNvZGUiX3MsIGlu
X2NvZGUpOwogICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxDb2RlU2V0PigpOwogICAgICAg
ICB9CiAKQEAgLTQ5OCw4ICs1MDEsNyBAQCBwdWJsaWM6CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFs
Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRp
b25zLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC03NzgsMjkgKzc4MCwyOSBAQCB1
c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwogICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09Q
VElPTkFMX1BBUkFNRVRFUihhbHRlcm5hdGVDb2xvcnMsIEAiYWx0ZXJuYXRlQ29sb3JzIik7CiAg
ICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKHByaW50Q29sb3Is
IEAicHJpbnRDb2xvciIpOwogCi0gICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBK
U09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhv
ZCJfcywgIkRhdGFiYXNlLmRpZEV4ZWN1dGVPcHRpb25hbFBhcmFtZXRlcnMiX3MpOwotICAgIFJl
ZjxKU09OOjpPYmplY3Q+IHBhcmFtc09iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Cisg
ICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Cisg
ICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiRGF0YWJhc2Uu
ZGlkRXhlY3V0ZU9wdGlvbmFsUGFyYW1ldGVycyJfcyk7CisgICAgYXV0byBwcm90b2NvbF9wYXJh
bXNPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgIGlmIChjb2x1bW5OYW1lcykK
LSAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIHRvSlNPTlN0
cmluZ0FycmF5KCgqY29sdW1uTmFtZXMpKSk7CisgICAgICAgIHByb3RvY29sX3BhcmFtc09iamVj
dC0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCB0b0pTT05TdHJpbmdBcnJheSgoKmNvbHVtbk5h
bWVzKSkpOwogICAgIGlmIChub3RlcykKLSAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmco
Im5vdGVzIl9zLCAoKm5vdGVzKSk7CisgICAgICAgIHByb3RvY29sX3BhcmFtc09iamVjdC0+c2V0
U3RyaW5nKCJub3RlcyJfcywgKCpub3RlcykpOwogICAgIGlmICh0aW1lc3RhbXApCi0gICAgICAg
IHBhcmFtc09iamVjdC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsICgqdGltZXN0YW1wKSk7Cisg
ICAgICAgIHByb3RvY29sX3BhcmFtc09iamVjdC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsICgq
dGltZXN0YW1wKSk7CiAgICAgaWYgKHZhbHVlcykKLSAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRP
YmplY3QoInZhbHVlcyJfcywgWygqdmFsdWVzKSB0b0pTT05PYmplY3RdKTsKKyAgICAgICAgcHJv
dG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRPYmplY3QoInZhbHVlcyJfcywgWygqdmFsdWVzKSB0b0pT
T05PYmplY3RdKTsKICAgICBpZiAocGF5bG9hZCkKLSAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRW
YWx1ZSgicGF5bG9hZCJfcywgWygqcGF5bG9hZCkgdG9KU09OT2JqZWN0XSk7CisgICAgICAgIHBy
b3RvY29sX3BhcmFtc09iamVjdC0+c2V0VmFsdWUoInBheWxvYWQiX3MsIFsoKnBheWxvYWQpIHRv
SlNPTk9iamVjdF0pOwogICAgIGlmIChzcWxFcnJvcikKLSAgICAgICAgcGFyYW1zT2JqZWN0LT5z
ZXRPYmplY3QoInNxbEVycm9yIl9zLCBbKCpzcWxFcnJvcikgdG9KU09OT2JqZWN0XSk7CisgICAg
ICAgIHByb3RvY29sX3BhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJzcWxFcnJvciJfcywgWygqc3Fs
RXJyb3IpIHRvSlNPTk9iamVjdF0pOwogICAgIGlmIChzY3JlZW5Db2xvcikKLSAgICAgICAgcGFy
YW1zT2JqZWN0LT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCAoKnNjcmVlbkNvbG9yKSk7Cisg
ICAgICAgIHByb3RvY29sX3BhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywg
KCpzY3JlZW5Db2xvcikpOwogICAgIGlmIChhbHRlcm5hdGVDb2xvcnMpCi0gICAgICAgIHBhcmFt
c09iamVjdC0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywgdG9KU09OU3RyaW5nQXJyYXko
KCphbHRlcm5hdGVDb2xvcnMpKSk7CisgICAgICAgIHByb3RvY29sX3BhcmFtc09iamVjdC0+c2V0
QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywgdG9KU09OU3RyaW5nQXJyYXkoKCphbHRlcm5hdGVD
b2xvcnMpKSk7CiAgICAgaWYgKHByaW50Q29sb3IpCi0gICAgICAgIHBhcmFtc09iamVjdC0+c2V0
U3RyaW5nKCJwcmludENvbG9yIl9zLCAoKnByaW50Q29sb3IpKTsKLSAgICBqc29uTWVzc2FnZS0+
c2V0T2JqZWN0KCJwYXJhbXMiX3MsIFdURk1vdmUocGFyYW1zT2JqZWN0KSk7Ci0gICAgcm91dGVy
LnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOworICAgICAgICBwcm90b2Nv
bF9wYXJhbXNPYmplY3QtPnNldFN0cmluZygicHJpbnRDb2xvciJfcywgKCpwcmludENvbG9yKSk7
CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIl9zLCBXVEZNb3Zl
KHByb3RvY29sX3BhcmFtc09iamVjdCkpOworICAgIHJvdXRlci5zZW5kRXZlbnQocHJvdG9jb2xf
anNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKIH0KIAogLSAodm9pZClkaWRFeGVjdXRlTm9P
cHRpb25hbFBhcmFtZXRlcnNXaXRoQ29sdW1uTmFtZXM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAq
KWNvbHVtbk5hbWVzIG5vdGVzOihOU1N0cmluZyAqKW5vdGVzIHRpbWVzdGFtcDooZG91YmxlKXRp
bWVzdGFtcCB2YWx1ZXM6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXZhbHVlcyBwYXlsb2FkOihS
V0lQcm90b2NvbEpTT05PYmplY3QgKilwYXlsb2FkIHNxbEVycm9yOihUZXN0UHJvdG9jb2xEYXRh
YmFzZUVycm9yICopc3FsRXJyb3Igc2NyZWVuQ29sb3I6KE5TU3RyaW5nICopc2NyZWVuQ29sb3Ig
YWx0ZXJuYXRlQ29sb3JzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKilhbHRlcm5hdGVDb2xvcnMg
cHJpbnRDb2xvcjooTlNTdHJpbmcgKilwcmludENvbG9yCkBAIC04MTYsMjAgKzgxOCwyMCBAQCB1
c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwogICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlS
RURfUEFSQU1FVEVSKGFsdGVybmF0ZUNvbG9ycywgQCJhbHRlcm5hdGVDb2xvcnMiKTsKICAgICBU
SFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihwcmludENvbG9yLCBAInByaW50
Q29sb3IiKTsKIAotICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2Jq
ZWN0OjpjcmVhdGUoKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJE
YXRhYmFzZS5kaWRFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMiX3MpOwotICAgIFJlZjxKU09O
OjpPYmplY3Q+IHBhcmFtc09iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgcGFy
YW1zT2JqZWN0LT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KGNv
bHVtbk5hbWVzKSk7Ci0gICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCBub3Rl
cyk7Ci0gICAgcGFyYW1zT2JqZWN0LT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywgdGltZXN0YW1w
KTsKLSAgICBwYXJhbXNPYmplY3QtPnNldE9iamVjdCgidmFsdWVzIl9zLCBbdmFsdWVzIHRvSlNP
Tk9iamVjdF0pOwotICAgIHBhcmFtc09iamVjdC0+c2V0VmFsdWUoInBheWxvYWQiX3MsIFtwYXls
b2FkIHRvSlNPTk9iamVjdF0pOwotICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJzcWxFcnJv
ciJfcywgW3NxbEVycm9yIHRvSlNPTk9iamVjdF0pOwotICAgIHBhcmFtc09iamVjdC0+c2V0U3Ry
aW5nKCJzY3JlZW5Db2xvciJfcywgc2NyZWVuQ29sb3IpOwotICAgIHBhcmFtc09iamVjdC0+c2V0
QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywgdG9KU09OU3RyaW5nQXJyYXkoYWx0ZXJuYXRlQ29s
b3JzKSk7Ci0gICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInByaW50Q29sb3IiX3MsIHByaW50
Q29sb3IpOwotICAgIGpzb25NZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyJfcywgV1RGTW92ZShw
YXJhbXNPYmplY3QpKTsKLSAgICByb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05T
dHJpbmcoKSk7CisgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6
Y3JlYXRlKCk7CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9z
LCAiRGF0YWJhc2UuZGlkRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzIl9zKTsKKyAgICBhdXRv
IHByb3RvY29sX3BhcmFtc09iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgcHJv
dG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIHRvSlNPTlN0cmlu
Z0FycmF5KGNvbHVtbk5hbWVzKSk7CisgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRTdHJp
bmcoIm5vdGVzIl9zLCBub3Rlcyk7CisgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT5zZXREb3Vi
bGUoInRpbWVzdGFtcCJfcywgdGltZXN0YW1wKTsKKyAgICBwcm90b2NvbF9wYXJhbXNPYmplY3Qt
PnNldE9iamVjdCgidmFsdWVzIl9zLCBbdmFsdWVzIHRvSlNPTk9iamVjdF0pOworICAgIHByb3Rv
Y29sX3BhcmFtc09iamVjdC0+c2V0VmFsdWUoInBheWxvYWQiX3MsIFtwYXlsb2FkIHRvSlNPTk9i
amVjdF0pOworICAgIHByb3RvY29sX3BhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJzcWxFcnJvciJf
cywgW3NxbEVycm9yIHRvSlNPTk9iamVjdF0pOworICAgIHByb3RvY29sX3BhcmFtc09iamVjdC0+
c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgc2NyZWVuQ29sb3IpOworICAgIHByb3RvY29sX3Bh
cmFtc09iamVjdC0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywgdG9KU09OU3RyaW5nQXJy
YXkoYWx0ZXJuYXRlQ29sb3JzKSk7CisgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRTdHJp
bmcoInByaW50Q29sb3IiX3MsIHByaW50Q29sb3IpOworICAgIHByb3RvY29sX2pzb25NZXNzYWdl
LT5zZXRPYmplY3QoInBhcmFtcyJfcywgV1RGTW92ZShwcm90b2NvbF9wYXJhbXNPYmplY3QpKTsK
KyAgICByb3V0ZXIuc2VuZEV2ZW50KHByb3RvY29sX2pzb25NZXNzYWdlLT50b0pTT05TdHJpbmco
KSk7CiB9CiAKIEBlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9nZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1n
dWFyZHMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZXhwZWN0ZWQvZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpz
b24tcmVzdWx0CmluZGV4IDI5NGJhOTA4MTIxOGEzNTAyZDk2ZDQ1NWQ0ZDYzZDJiM2Y1YWFlOWEu
LjM5YzM2NjNhZmYyZjZmYjljMGVhN2I4NDljZjM5MGFmZGEzYmZiYWEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9nZW5l
cmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbi1yZXN1bHQKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2dlbmVyYXRl
LWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uLXJlc3VsdApAQCAtNzQsNyArNzQsNyBA
QCBJbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJOZXR3b3JrMyIsIG51bGwpOwogCiAj
aWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAKLSNpbmNsdWRlICJU
ZXN0UHJvdG9jb2xUeXBlcy5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgogI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CiAKQEAgLTky
LDcgKzkyLDcgQEAgcHJpdmF0ZToKIGNsYXNzIEFsdGVybmF0ZU5ldHdvcmsxQmFja2VuZERpc3Bh
dGNoZXIgOiBwdWJsaWMgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewogcHVibGljOgogICAg
IHZpcnR1YWwgfkFsdGVybmF0ZU5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIoKSB7IH0KLSAgICB2
aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlKGxvbmcgY2FsbElkKSA9IDA7CisgICAgdmlydHVhbCB2
b2lkIGxvYWRSZXNvdXJjZShsb25nIHByb3RvY29sX2NhbGxJZCkgPSAwOwogfTsKIAogfSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCkBAIC0xMzQsMTEgKzEzNCwxNCBAQCBwdWJsaWM6CiAKICNpbmNs
dWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx0dXBsZT4KKyNpbmNsdWRlIDx3
dGYvRXhwZWN0ZWQuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKLXR5cGVkZWYgU3Ry
aW5nIEVycm9yU3RyaW5nOworCiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQ
QVRDSEVSUykKIGNsYXNzIEFsdGVybmF0ZU5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI7CkBAIC0x
NDYsNyArMTQ5LDcgQEAgY2xhc3MgQWx0ZXJuYXRlTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjsK
IAogY2xhc3MgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewogcHVibGljOgotICAg
IHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UoRXJyb3JTdHJpbmcmKSA9IDA7CisgICAgdmlydHVh
bCBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBsb2FkUmVzb3VyY2UoKSA9IDA7CiBwcm90
ZWN0ZWQ6CiAgICAgdmlydHVhbCB+TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKTsK
IH07CkBAIC0xNTQsOSArMTU3LDkgQEAgcHJvdGVjdGVkOgogY2xhc3MgTmV0d29yazFCYWNrZW5k
RGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7
CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyPiBjcmVh
dGUoQmFja2VuZERpc3BhdGNoZXImLCBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciop
OwotICAgIHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9k
LCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpIGZpbmFsOworICAgIHZvaWQgZGlzcGF0Y2go
bG9uZyBwcm90b2NvbF9jYWxsSWQsIGNvbnN0IFN0cmluZyYgcHJvdG9jb2xfbWV0aG9kLCBSZWY8
SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX21lc3NhZ2UpIGZpbmFsOwogcHJpdmF0ZToKLSAgICB2
b2lkIGxvYWRSZXNvdXJjZShsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBw
YXJhbWV0ZXJzKTsKKyAgICB2b2lkIGxvYWRSZXNvdXJjZShsb25nIHByb3RvY2xfY2FsbElkLCBS
ZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX3BhcmFtZXRlcnMpOwogI2lmIEVOQUJMRShJ
TlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogcHVibGljOgogICAgIHZvaWQgc2V0QWx0
ZXJuYXRlRGlzcGF0Y2hlcihBbHRlcm5hdGVOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyKiBhbHRl
cm5hdGVEaXNwYXRjaGVyKSB7IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IGFsdGVybmF0ZURpc3Bh
dGNoZXI7IH0KQEAgLTIwNSw5ICsyMDgsNyBAQCBwcml2YXRlOgogI2luY2x1ZGUgIlRlc3RCYWNr
ZW5kRGlzcGF0Y2hlcnMuaCIKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZy
b250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KICNpbmNsdWRlIDx3
dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKICNp
ZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKICNpbmNsdWRlICJUZXN0
QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCkBAIC0yMjksMzggKzIzMCwzOCBAQCBOZXR3
b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmRE
aXNwYXRjaGVyJiBiYWNrZW5kRAogICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlz
cGF0Y2hlckZvckRvbWFpbigiTmV0d29yazEiX3MsIHRoaXMpOwogfQogCi12b2lkIE5ldHdvcmsx
QmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcm
IG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKQordm9pZCBOZXR3b3JrMUJhY2tl
bmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHByb3RvY29sX2NhbGxJZCwgY29uc3QgU3RyaW5n
JiBwcm90b2NvbF9tZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfbWVzc2FnZSkK
IHsKICAgICBSZWY8TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7CiAK
LSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzOwotICAgIG1lc3NhZ2UtPmdldE9i
amVjdCgicGFyYW1zIl9zLCBwYXJhbWV0ZXJzKTsKKyAgICBhdXRvIHByb3RvY29sX3BhcmFtZXRl
cnMgPSBwcm90b2NvbF9tZXNzYWdlLT5nZXRPYmplY3QoInBhcmFtcyJfcyk7CiAKLSAgICBpZiAo
bWV0aG9kID09ICJsb2FkUmVzb3VyY2UiKSB7Ci0gICAgICAgIGxvYWRSZXNvdXJjZShyZXF1ZXN0
SWQsIFdURk1vdmUocGFyYW1ldGVycykpOworICAgIGlmIChwcm90b2NvbF9tZXRob2QgPT0gImxv
YWRSZXNvdXJjZSIpIHsKKyAgICAgICAgbG9hZFJlc291cmNlKHByb3RvY29sX2NhbGxJZCwgV1RG
TW92ZShwcm90b2NvbF9wYXJhbWV0ZXJzKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAg
ICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRj
aGVyOjpNZXRob2ROb3RGb3VuZCwgIidOZXR3b3JrMS4iICsgbWV0aG9kICsgIicgd2FzIG5vdCBm
b3VuZCIpOworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFj
a2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdvcmsxLiIgKyBwcm90b2NvbF9t
ZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7CiB9CiAKLXZvaWQgTmV0d29yazFCYWNrZW5kRGlz
cGF0Y2hlcjo6bG9hZFJlc291cmNlKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0
PiYmKQordm9pZCBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UobG9uZyBw
cm90b2NvbF9jYWxsSWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCiB7CiAjaWYgRU5BQkxFKElO
U1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAgICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0
Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmxvYWRSZXNvdXJjZShyZXF1
ZXN0SWQpOworICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmxvYWRSZXNvdXJjZShwcm90
b2NvbF9jYWxsSWQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmIC8vIEVOQUJMRShJ
TlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogCi0gICAgRXJyb3JTdHJpbmcgZXJyb3I7
Ci0gICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsK
LSAgICBtX2FnZW50LT5sb2FkUmVzb3VyY2UoZXJyb3IpOworICAgIGF1dG8gcmVzdWx0ID0gbV9h
Z2VudC0+bG9hZFJlc291cmNlKCk7CisgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAgICAgQVNTRVJU
KCFyZXN1bHQuZXJyb3IoKS5pc0VtcHR5KCkpOworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVy
LT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgcmVz
dWx0LmVycm9yKCkpOworICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgaWYgKCFlcnJvci5s
ZW5ndGgoKSkKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVl
c3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tl
bmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2
ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOworICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2Ug
PSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRS
ZXNwb25zZShwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJvdG9jb2xfanNvbk1lc3NhZ2UpLCBm
YWxzZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgpAQCAtMzAxLDYgKzMwMiw3IEBA
IHZvaWQgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlKGxvbmcgcmVxdWVz
dElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0CiAKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3Rz
LmgiCiAjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwu
aD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3Rv
ciB7CkBAIC0zNTMsMTYgKzM1NSwxNSBAQCBwcml2YXRlOgogI2luY2x1ZGUgIlRlc3RGcm9udGVu
ZERpc3BhdGNoZXJzLmgiCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9u
dGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogbmFtZXNwYWNl
IEluc3BlY3RvciB7CiAKIHZvaWQgTmV0d29yazNGcm9udGVuZERpc3BhdGNoZXI6OnJlc291cmNl
TG9hZGVkKCkKIHsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9i
amVjdDo6Y3JlYXRlKCk7Ci0gICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAi
TmV0d29yazMucmVzb3VyY2VMb2FkZWQiX3MpOworICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3Nh
Z2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5z
ZXRTdHJpbmcoIm1ldGhvZCJfcywgIk5ldHdvcmszLnJlc291cmNlTG9hZGVkIl9zKTsKIAotICAg
IG1fZnJvbnRlbmRSb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7
CisgICAgbV9mcm9udGVuZFJvdXRlci5zZW5kRXZlbnQocHJvdG9jb2xfanNvbk1lc3NhZ2UtPnRv
SlNPTlN0cmluZygpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCkBAIC00MDIsNyAr
NDAzLDkgQEAgdm9pZCBOZXR3b3JrM0Zyb250ZW5kRGlzcGF0Y2hlcjo6cmVzb3VyY2VMb2FkZWQo
KQogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90
b2NvbFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYv
SlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtNDIzLDcgKzQy
Niw3IEBAIGNsYXNzIE5ldHdvcmtFcnJvcjsKIAogbmFtZXNwYWNlIE5ldHdvcmsyIHsKIAotY2xh
c3MgTmV0d29ya0Vycm9yIDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgeworY2xhc3MgTmV0d29y
a0Vycm9yIGZpbmFsIDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgewogcHVibGljOgogICAgIGVu
dW0gewogICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCkBAIC00NTAsMTcgKzQ1MywxNyBAQCBwdWJs
aWM6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBOZXR3b3JrRXJyb3I7CiAgICAgcHVibGljOgogCi0g
ICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBNZXNzYWdlU2V0PiYgc2V0TWVzc2FnZShjb25zdCBTdHJp
bmcmIHZhbHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTWVzc2FnZVNldD4mIHNldE1lc3Nh
Z2UoY29uc3QgU3RyaW5nJiBpbl9tZXNzYWdlKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVCghKFNUQVRFICYgTWVzc2FnZVNldCksIHByb3BlcnR5X21lc3NhZ2VfYWxyZWFk
eV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibWVzc2FnZSJfcywgdmFs
dWUpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibWVzc2FnZSJfcywgaW5fbWVz
c2FnZSk7CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE1lc3NhZ2VTZXQ+KCk7CiAgICAg
ICAgIH0KIAotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQ29kZVNldD4mIHNldENvZGUoaW50IHZh
bHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQ29kZVNldD4mIHNldENvZGUoaW50IGluX2Nv
ZGUpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBDb2Rl
U2V0KSwgcHJvcGVydHlfY29kZV9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+
c2V0SW50ZWdlcigiY29kZSJfcywgdmFsdWUpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldElu
dGVnZXIoImNvZGUiX3MsIGluX2NvZGUpOwogICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxD
b2RlU2V0PigpOwogICAgICAgICB9CiAKQEAgLTUzMCw4ICs1MzMsNyBAQCBwdWJsaWM6CiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogCi0jaW5j
bHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2lu
Y2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC01
ODcsNyArNTg5LDcgQEAgY2xhc3MgT2JqQ0luc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNo
ZXIgZmluYWwgOiBwdWJsaWMgQWx0ZXJuYXRlTmV0d29yazFCYWMKICAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBPYmpDSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlz
cGF0Y2hlcihpZDxUZXN0UHJvdG9jb2xOZXR3b3JrMURvbWFpbkhhbmRsZXI+IGhhbmRsZXIpIHsg
bV9kZWxlZ2F0ZSA9IGhhbmRsZXI7IH0KLSAgICB2b2lkIGxvYWRSZXNvdXJjZShsb25nIHJlcXVl
c3RJZCkgZmluYWw7CisgICAgdm9pZCBsb2FkUmVzb3VyY2UobG9uZyBwcm90b2NvbF9jYWxsSWQp
IGZpbmFsOwogcHJpdmF0ZToKICAgICBSZXRhaW5QdHI8aWQ8VGVzdFByb3RvY29sTmV0d29yazFE
b21haW5IYW5kbGVyPj4gbV9kZWxlZ2F0ZTsKIH07CkBAIC02MzUsMjEgKzYzNywyMiBAQCBwcml2
YXRlOgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAotdm9pZCBPYmpDSW5zcGVjdG9yTmV0d29y
azFCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlKGxvbmcgcmVxdWVzdElkKQordm9pZCBP
YmpDSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlKGxvbmcg
cHJvdG9jb2xfY2FsbElkKQogewogICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVj
dG9yOkBzZWxlY3Rvcihsb2FkUmVzb3VyY2VXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJh
Y2s6KV0pIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJv
cihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidOZXR3b3Jr
MS5sb2FkUmVzb3VyY2UnIHdhcyBub3QgZm91bmQiX3MpOworICAgICAgICBiYWNrZW5kRGlzcGF0
Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHByb3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3Bh
dGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdvcmsxLmxvYWRSZXNvdXJjZScgd2FzIG5vdCBm
b3VuZCJfcyk7CiAgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3Jz
KCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZCBlcnJvckNhbGxiYWNrID0gXihO
U1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJv
dG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJy
b3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHBy
b3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CiAg
ICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgfTsK
IAogICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF57Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVy
KCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIEpTT046Ok9iamVjdDo6Y3JlYXRlKCksIGZhbHNl
KTsKKyAgICAgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3Jl
YXRlKCk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShwcm90b2Nv
bF9jYWxsSWQsIFdURk1vdmUocHJvdG9jb2xfanNvbk1lc3NhZ2UpLCBmYWxzZSk7CiAgICAgfTsK
IAogICAgIFttX2RlbGVnYXRlIGxvYWRSZXNvdXJjZVdpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2Fs
bGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107CkBAIC04NTEsOSArODU0LDkg
QEAgdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKIHsKICAgICBjb25zdCBGcm9udGVuZFJvdXRl
ciYgcm91dGVyID0gX2NvbnRyb2xsZXItPmZyb250ZW5kUm91dGVyKCk7CiAKLSAgICBSZWY8SlNP
Tjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAganNv
bk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiTmV0d29yazMucmVzb3VyY2VMb2FkZWQi
X3MpOwotICAgIHJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsK
KyAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsK
KyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJOZXR3b3Jr
My5yZXNvdXJjZUxvYWRlZCJfcyk7CisgICAgcm91dGVyLnNlbmRFdmVudChwcm90b2NvbF9qc29u
TWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwogfQogCiBAZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvc2FtZS10eXBl
LWlkLWRpZmZlcmVudC1kb21haW4uanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvc2FtZS10eXBlLWlkLWRpZmZlcmVudC1k
b21haW4uanNvbi1yZXN1bHQKaW5kZXggNDUzZWY2ZTQ5NDhlYWIwMjVhYjU2MTM3OGQyYjhhYTk0
ZjU1Yzg4ZC4uNTZlZjYzNGRlOTgwNjg1ODZkYmRjZDA4ODFiOTFkODQ5ZTJmYmExNiAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVj
dGVkL3NhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24tcmVzdWx0CisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9zYW1lLXR5
cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uLXJlc3VsdApAQCAtNjMsNyArNjMsNyBAQAogCiAj
aWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAKLSNpbmNsdWRlICJU
ZXN0UHJvdG9jb2xUeXBlcy5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgogI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CiAKQEAgLTEx
OSwxMSArMTE5LDE0IEBAIHByaXZhdGU6CiAKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3Rz
LmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIu
aD4KKyNpbmNsdWRlIDx0dXBsZT4KKyNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4KKyNpbmNsdWRl
IDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFt
ZXNwYWNlIEluc3BlY3RvciB7CiAKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCiAKIAog
CkBAIC0xNjQsOSArMTY3LDcgQEAgdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiAjaW5jbHVk
ZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgog
I2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJp
bmcuaD4KIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogI2lu
Y2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKQEAgLTIxNCw2ICsyMTUs
NyBAQCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVj
dHMuaCIKICNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25h
bC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVj
dG9yIHsKQEAgLTI1Nyw3ICsyNTksNiBAQCBjbGFzcyBGcm9udGVuZFJvdXRlcjsKICNpbmNsdWRl
ICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+
CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC0yOTgsNyArMjk5LDkgQEAgbmFtZXNwYWNl
IEluc3BlY3RvciB7CiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0lu
c3BlY3RvclByb3RvY29sVHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2lu
Y2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBA
IC0zNjIsOCArMzY1LDcgQEAgdXNpbmcgUmVtb3RlT2JqZWN0SWQgPSBTdHJpbmc7CiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogCi0jaW5jbHVk
ZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1
ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0
ZWQvc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24tcmVzdWx0IGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3NoYWRvd2VkLW9w
dGlvbmFsLXR5cGUtc2V0dGVycy5qc29uLXJlc3VsdAppbmRleCA1ZjJjZDc5MzMwNDI0N2U3NjU1
ZjNlOTgxZWE3MDBmNTdjNzcwZmQ5Li44ZWNlY2M3MDEwMzQwNGRhN2RjMjc4Y2E5NzUxOWEyZGVi
ZmMwMDViIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZXhwZWN0ZWQvc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24tcmVz
dWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9l
eHBlY3RlZC9zaGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbi1yZXN1bHQKQEAgLTYz
LDcgKzYzLDcgQEAKIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJT
KQogCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9j
b2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXIuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJv
dXRlci5oPgogCkBAIC0xMTksMTEgKzExOSwxNCBAQCBwcml2YXRlOgogCiAjaW5jbHVkZSAiVGVz
dFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8dHVwbGU+CisjaW5jbHVkZSA8d3RmL0V4cGVj
dGVkLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCi10eXBlZGVmIFN0cmluZyBFcnJv
clN0cmluZzsKKwogCiAKIApAQCAtMTY0LDkgKzE2Nyw3IEBAIHR5cGVkZWYgU3RyaW5nIEVycm9y
U3RyaW5nOwogI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKIAogI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3Rm
L0pTT05WYWx1ZXMuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9E
SVNQQVRDSEVSUykKICNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgi
CkBAIC0yMTQsNiArMjE1LDcgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKICNpbmNsdWRlICJU
ZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNs
dWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAog
bmFtZXNwYWNlIEluc3BlY3RvciB7CkBAIC0yNTcsNyArMjU5LDYgQEAgY2xhc3MgRnJvbnRlbmRS
b3V0ZXI7CiAjaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKIAogI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3Rm
L3RleHQvQ1N0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtMjk4LDcgKzI5
OSw5IEBAIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL0Fz
c2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9P
cHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKIApAQCAtMzMxLDcgKzMzNCw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFN0
cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShUIGVudW1WYWx1ZSkKIG5hbWVzcGFjZSBSdW50aW1l
IHsKIAogLyogS2V5IHBhdGguICovCi1jbGFzcyBLZXlQYXRoIDogcHVibGljIEpTT046Ok9iamVj
dEJhc2UgeworY2xhc3MgS2V5UGF0aCBmaW5hbCA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsK
IHB1YmxpYzoKICAgICAvLyBOYW1lZCBhZnRlciBwcm9wZXJ0eSBuYW1lICd0eXBlJyB3aGlsZSBn
ZW5lcmF0aW5nIEtleVBhdGguCiAgICAgZW51bSBjbGFzcyBUeXBlIHsKQEAgLTMzOSw2ICszNDIs
NyBAQCBwdWJsaWM6CiAgICAgICAgIFN0cmluZyA9IDEsCiAgICAgICAgIEFycmF5ID0gMiwKICAg
ICB9OyAvLyBlbnVtIGNsYXNzIFR5cGUKKwogICAgIGVudW0gewogICAgICAgICBOb0ZpZWxkc1Nl
dCA9IDAsCiAgICAgICAgIFR5cGVTZXQgPSAxIDw8IDAsCkBAIC0zNjMsMTAgKzM2NywxMCBAQCBw
dWJsaWM6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBLZXlQYXRoOwogICAgIHB1YmxpYzoKIAotICAg
ICAgICBCdWlsZGVyPFNUQVRFIHwgVHlwZVNldD4mIHNldFR5cGUoVHlwZSB2YWx1ZSkKKyAgICAg
ICAgQnVpbGRlcjxTVEFURSB8IFR5cGVTZXQ+JiBzZXRUeXBlKFR5cGUgaW5fdHlwZSkKICAgICAg
ICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFR5cGVTZXQpLCBwcm9w
ZXJ0eV90eXBlX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmco
InR5cGUiX3MsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29uc3Rh
bnRWYWx1ZSh2YWx1ZSkpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygidHlwZSJf
cywgUHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbl90eXBlKSk7
CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFR5cGVTZXQ+KCk7CiAgICAgICAgIH0KIApA
QCAtMzkyLDE0ICszOTYsMTQgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0Zp
ZWxkc1NldD4oSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSk7CiAgICAgfQogCi0gICAgdm9pZCBzZXRT
dHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICB2b2lkIHNldFN0cmluZyhjb25zdCBTdHJp
bmcmIGluX29wdF9zdHJpbmcpCiAgICAgewotICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXRT
dHJpbmcoInN0cmluZyJfcywgdmFsdWUpOworICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXRT
dHJpbmcoInN0cmluZyJfcywgaW5fb3B0X3N0cmluZyk7CiAgICAgfQogCi0gICAgdm9pZCBzZXRB
cnJheShSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiB2YWx1ZSkKKyAgICB2b2lkIHNldEFy
cmF5KFJlZjxKU09OOjpBcnJheU9mPFN0cmluZz4+JiYgaW5fb3B0X2FycmF5KQogICAgIHsKLSAg
ICAgICAgSlNPTjo6T2JqZWN0QmFzZTo6c2V0QXJyYXkoImFycmF5Il9zLCBXVEZNb3ZlKHZhbHVl
KSk7CisgICAgICAgIEpTT046Ok9iamVjdEJhc2U6OnNldEFycmF5KCJhcnJheSJfcywgV1RGTW92
ZShpbl9vcHRfYXJyYXkpKTsKICAgICB9CiB9OwogCkBAIC00MTQsNyArNDE4LDcgQEAgT3B0aW9u
YWw8UHJvdG9jb2xFbnVtVHlwZT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nKGNvbnN0IFN0cmlu
ZyYpOwogCiAvLyBFbnVtcyBpbiB0aGUgJ1J1bnRpbWUnIERvbWFpbgogdGVtcGxhdGU8PgotT3B0
aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6S2V5UGF0aDo6VHlwZT4gcGFyc2VF
bnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OktleVBhdGg6
OlR5cGU+KGNvbnN0IFN0cmluZyYpOworT3B0aW9uYWw8UHJvdG9jb2w6OlJ1bnRpbWU6OktleVBh
dGg6OlR5cGU+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxQcm90b2NvbDo6UnVudGltZTo6S2V5
UGF0aDo6VHlwZT4oY29uc3QgU3RyaW5nJik7CiAKIH0gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJz
CiAKQEAgLTQ1Niw4ICs0NjAsNyBAQCBPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50
aW1lOjpLZXlQYXRoOjpUeXBlPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SQogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKIAotI2luY2x1ZGUg
PHd0Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRl
IDx3dGYvQXNzZXJ0aW9ucy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtNDc4LDE2
ICs0ODEsMTYgQEAgU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKSB7CiAvLyBF
bnVtcyBpbiB0aGUgJ1J1bnRpbWUnIERvbWFpbgogCiB0ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJbnNw
ZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpLZXlQYXRoOjpUeXBlPiBwYXJzZUVudW1WYWx1ZUZy
b21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6S2V5UGF0aDo6VHlwZT4oY29u
c3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKK09wdGlvbmFsPFByb3RvY29sOjpSdW50aW1lOjpL
ZXlQYXRoOjpUeXBlPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8UHJvdG9jb2w6OlJ1bnRpbWU6
OktleVBhdGg6OlR5cGU+KGNvbnN0IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcpCiB7CiAgICAgc3Rh
dGljIGNvbnN0IHNpemVfdCBjb25zdGFudFZhbHVlc1tdID0gewotICAgICAgICAoc2l6ZV90KUlu
c3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OktleVBhdGg6OlR5cGU6Ok51bGwsCi0gICAgICAg
IChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6S2V5UGF0aDo6VHlwZTo6U3Ry
aW5nLAotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OktleVBh
dGg6OlR5cGU6OkFycmF5LAorICAgICAgICAoc2l6ZV90KVByb3RvY29sOjpSdW50aW1lOjpLZXlQ
YXRoOjpUeXBlOjpOdWxsLAorICAgICAgICAoc2l6ZV90KVByb3RvY29sOjpSdW50aW1lOjpLZXlQ
YXRoOjpUeXBlOjpTdHJpbmcsCisgICAgICAgIChzaXplX3QpUHJvdG9jb2w6OlJ1bnRpbWU6Oktl
eVBhdGg6OlR5cGU6OkFycmF5LAogICAgIH07CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAz
OyArK2kpCiAgICAgICAgIGlmIChwcm90b2NvbFN0cmluZyA9PSBlbnVtX2NvbnN0YW50X3ZhbHVl
c1tjb25zdGFudFZhbHVlc1tpXV0pCi0gICAgICAgICAgICByZXR1cm4gKEluc3BlY3Rvcjo6UHJv
dG9jb2w6OlJ1bnRpbWU6OktleVBhdGg6OlR5cGUpY29uc3RhbnRWYWx1ZXNbaV07CisgICAgICAg
ICAgICByZXR1cm4gKFByb3RvY29sOjpSdW50aW1lOjpLZXlQYXRoOjpUeXBlKWNvbnN0YW50VmFs
dWVzW2ldOwogCiAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9zaG91bGQt
c3RyaXAtY29tbWVudHMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvc2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpzb24tcmVz
dWx0CmluZGV4IDM0OGFjZTkzYmFiMDk0N2RhZjg1YjQ1ZjU5YzlmY2FhNjcwMmRlMDAuLjAwYWEz
NmZhM2QwMjQ5MTNjNWI4ZDI3MzgxMWRhNWEwMTU0ODMxMjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9zaG91bGQtc3Ry
aXAtY29tbWVudHMuanNvbi1yZXN1bHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3Nob3VsZC1zdHJpcC1jb21tZW50cy5qc29uLXJl
c3VsdApAQCAtNjMsNyArNjMsNyBAQAogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVf
RElTUEFUQ0hFUlMpCiAKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgorI2luY2x1ZGUg
IlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3Rv
ckZyb250ZW5kUm91dGVyLmg+CiAKQEAgLTExOSwxMSArMTE5LDE0IEBAIHByaXZhdGU6CiAKICNp
bmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx0dXBsZT4KKyNpbmNsdWRl
IDx3dGYvRXhwZWN0ZWQuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKLXR5cGVkZWYg
U3RyaW5nIEVycm9yU3RyaW5nOworCiAKIAogCkBAIC0xNjQsOSArMTY3LDcgQEAgdHlwZWRlZiBT
dHJpbmcgRXJyb3JTdHJpbmc7CiAjaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgog
CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNp
bmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5o
PgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogI2lmIEVOQUJMRShJTlNQRUNUT1Jf
QUxURVJOQVRFX0RJU1BBVENIRVJTKQogI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlz
cGF0Y2hlcnMuaCIKQEAgLTIxNCw2ICsyMTUsNyBAQCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAog
I2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDx3dGYvSlNPTlZhbHVl
cy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKQEAgLTI1Nyw3ICsyNTksNiBAQCBjbGFz
cyBGcm9udGVuZFJvdXRlcjsKICNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgog
CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBA
IC0yOTgsNyArMjk5LDkgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiAjcHJhZ21hIG9uY2UKIAog
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KLSNpbmNs
dWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5j
bHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAK
IG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC0zNTIsOCArMzU1LDcgQEAgbmFtZXNwYWNlIFBy
b3RvY29sIHsKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmpl
Y3RzLmgiCiAKLSNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9D
U3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KIAogbmFtZXNwYWNlIEluc3Bl
Y3RvciB7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5
cGUuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpz
b24tcmVzdWx0CmluZGV4IDc5Y2I5ODU0NTlmODgyNDU2NzdjNWUzYzI2MDVmNzM0NGUxMTZiZmMu
LjM0YjFhY2JiY2FlYzgxMmQ4NGQxNjlmZTNiMmI4MjcyNTY3YWJkNDEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBl
LWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbi1yZXN1bHQKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUt
ZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uLXJlc3VsdApAQCAtNjMsNyAr
NjMsNyBAQAogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAK
LSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9i
amVjdHMuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlci5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVy
Lmg+CiAKQEAgLTExOSwxMSArMTE5LDE0IEBAIHByaXZhdGU6CiAKICNpbmNsdWRlICJUZXN0UHJv
dG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx0dXBsZT4KKyNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQu
aD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3Ry
aW5nOworCiAKIAogCkBAIC0xNjQsOSArMTY3LDcgQEAgdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJp
bmc7CiAjaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgogCiAjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSlNP
TlZhbHVlcy5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0
Zi90ZXh0L0NTdHJpbmcuaD4KIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BB
VENIRVJTKQogI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKQEAg
LTIxNCw2ICsyMTUsNyBAQCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAogI2luY2x1ZGUgIlRlc3RQ
cm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUg
PHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1l
c3BhY2UgSW5zcGVjdG9yIHsKQEAgLTI1Nyw3ICsyNTksNiBAQCBjbGFzcyBGcm9udGVuZFJvdXRl
cjsKICNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgogCiAjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC0yOTgsNyArMjk5LDkg
QEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0
aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL09wdGlv
bmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNw
ZWN0b3IgewogCkBAIC0zNTcsOCArMzYwLDcgQEAgdXNpbmcgUmVtb3RlT2JqZWN0SWQgPSBpbnQ7
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgog
Ci0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5o
PgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3Igewog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24tcmVzdWx0IGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUt
ZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uLXJlc3VsdAppbmRleCBkODg4MGM2M2UzMzc4YzVj
ZmUzMDhjYWZkZjg0Y2M5ODc0OTJiYmZjLi45NDBmMTU4MGJkYzFkOWJjYTQ0MDE0NzQxNTJhMjNi
YjI1NGIxOTBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24tcmVz
dWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9l
eHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbi1yZXN1bHQKQEAgLTY4LDcg
KzY4LDcgQEAgSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiRGVidWdnZXIiLCBudWxs
KTsKIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogCi0jaW5j
bHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3Rz
LmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIu
aD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgog
CkBAIC0xMjQsMTEgKzEyNCwxNCBAQCBwcml2YXRlOgogCiAjaW5jbHVkZSAiVGVzdFByb3RvY29s
T2JqZWN0cy5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyLmg+CisjaW5jbHVkZSA8dHVwbGU+CisjaW5jbHVkZSA8d3RmL0V4cGVjdGVkLmg+Cisj
aW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsK
KwogCiAKIApAQCAtMTY5LDkgKzE3Miw3IEBAIHR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwog
I2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKIAogI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0pTT05WYWx1
ZXMuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVS
UykKICNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCkBAIC0yMTks
NiArMjIwLDcgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKICNpbmNsdWRlICJUZXN0UHJvdG9j
b2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYv
T3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNl
IEluc3BlY3RvciB7CkBAIC0yNjIsNyArMjY0LDYgQEAgY2xhc3MgRnJvbnRlbmRSb3V0ZXI7CiAj
aW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKIAogI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtMzAzLDcgKzMwNCw5IEBAIG5h
bWVzcGFjZSBJbnNwZWN0b3IgewogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMu
aD4KKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5o
PgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9y
IHsKIApAQCAtMzMxLDcgKzMzNCw3IEBAIHVzaW5nIEx1Y2t5TnVtYmVycyA9IEpTT046OkFycmF5
T2Y8aW50PjsKIHVzaW5nIEJhYnlOYW1lcyA9IEpTT046OkFycmF5T2Y8U3RyaW5nPjsKIHVzaW5n
IE5ld09iamVjdHMgPSBKU09OOjpBcnJheU9mPGludD47CiB1c2luZyBPbGRPYmplY3RzID0gSlNP
Tjo6QXJyYXlPZjxpbnQ+OwotdXNpbmcgU3RvcFJlYXNvbnMgPSBKU09OOjpBcnJheU9mPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpSZWFzb24+OwordXNpbmcgU3RvcFJlYXNvbnMgPSBK
U09OOjpBcnJheU9mPFByb3RvY29sOjpEZWJ1Z2dlcjo6UmVhc29uPjsKIH0gLy8gUnVudGltZQog
Ly8gRW5kIG9mIHR5cGVkZWZzLgogCkBAIC0zNjUsNyArMzY4LDcgQEAgT3B0aW9uYWw8UHJvdG9j
b2xFbnVtVHlwZT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYpOwogCiAv
LyBFbnVtcyBpbiB0aGUgJ0RlYnVnZ2VyJyBEb21haW4KIHRlbXBsYXRlPD4KLU9wdGlvbmFsPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpSZWFzb24+IHBhcnNlRW51bVZhbHVlRnJvbVN0
cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6UmVhc29uPihjb25zdCBTdHJpbmcm
KTsKK09wdGlvbmFsPFByb3RvY29sOjpEZWJ1Z2dlcjo6UmVhc29uPiBwYXJzZUVudW1WYWx1ZUZy
b21TdHJpbmc8UHJvdG9jb2w6OkRlYnVnZ2VyOjpSZWFzb24+KGNvbnN0IFN0cmluZyYpOwogCiB9
IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycwogCkBAIC00MTcsOCArNDIwLDcgQEAgc3RydWN0IERl
ZmF1bHRIYXNoPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpSZWFzb24+IDogSW50SGFz
aDxJbnNwZWN0b3I6OlAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJUZXN0UHJvdG9j
b2xPYmplY3RzLmgiCiAKLSNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYv
dGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KIAogbmFtZXNwYWNl
IEluc3BlY3RvciB7CiAKQEAgLTQzOSwxNiArNDQxLDE2IEBAIFN0cmluZyBnZXRFbnVtQ29uc3Rh
bnRWYWx1ZShpbnQgY29kZSkgewogLy8gRW51bXMgaW4gdGhlICdEZWJ1Z2dlcicgRG9tYWluCiAK
IHRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpSZWFz
b24+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dl
cjo6UmVhc29uPihjb25zdCBTdHJpbmcmIHByb3RvY29sU3RyaW5nKQorT3B0aW9uYWw8UHJvdG9j
b2w6OkRlYnVnZ2VyOjpSZWFzb24+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxQcm90b2NvbDo6
RGVidWdnZXI6OlJlYXNvbj4oY29uc3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKIHsKICAgICBz
dGF0aWMgY29uc3Qgc2l6ZV90IGNvbnN0YW50VmFsdWVzW10gPSB7Ci0gICAgICAgIChzaXplX3Qp
SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OlJlYXNvbjo6RGllZCwKLSAgICAgICAgKHNp
emVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6UmVhc29uOjpGYWludGVkLAotICAg
ICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpSZWFzb246Okh1bmdy
eSwKKyAgICAgICAgKHNpemVfdClQcm90b2NvbDo6RGVidWdnZXI6OlJlYXNvbjo6RGllZCwKKyAg
ICAgICAgKHNpemVfdClQcm90b2NvbDo6RGVidWdnZXI6OlJlYXNvbjo6RmFpbnRlZCwKKyAgICAg
ICAgKHNpemVfdClQcm90b2NvbDo6RGVidWdnZXI6OlJlYXNvbjo6SHVuZ3J5LAogICAgIH07CiAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAzOyArK2kpCiAgICAgICAgIGlmIChwcm90b2NvbFN0
cmluZyA9PSBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb25zdGFudFZhbHVlc1tpXV0pCi0gICAgICAg
ICAgICByZXR1cm4gKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpSZWFzb24pY29uc3Rh
bnRWYWx1ZXNbaV07CisgICAgICAgICAgICByZXR1cm4gKFByb3RvY29sOjpEZWJ1Z2dlcjo6UmVh
c29uKWNvbnN0YW50VmFsdWVzW2ldOwogCiAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9l
eHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uLXJlc3VsdCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xh
cmF0aW9uLWVudW0tdHlwZS5qc29uLXJlc3VsdAppbmRleCAzYTJjMjA1MjgzMDQ0ZTAwMDZiMzMx
ZWUzMTViMDQzN2E0ZmE1YmY5Li45NTExNmJjNTBhYmYyNzk0MDY0NTkwNzEwZmNkM2UyNDZiZjBj
NThiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbi1yZXN1bHQKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVk
L3R5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24tcmVzdWx0CkBAIC02OSw3ICs2OSw3IEBA
IEluc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIlJ1bnRpbWUiLCBudWxsKTsKIAogI2lm
IEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogCi0jaW5jbHVkZSAiVGVz
dFByb3RvY29sVHlwZXMuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KICNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgogCkBAIC0xMjUs
MTEgKzEyNSwxNCBAQCBwcml2YXRlOgogCiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5o
IgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+
CisjaW5jbHVkZSA8dHVwbGU+CisjaW5jbHVkZSA8d3RmL0V4cGVjdGVkLmg+CisjaW5jbHVkZSA8
d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVz
cGFjZSBJbnNwZWN0b3IgewogCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKwogCiAKIApA
QCAtMTcwLDkgKzE3Myw3IEBAIHR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwogI2luY2x1ZGUg
IlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0lu
c3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KICNp
bmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5n
Lmg+CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKICNpbmNs
dWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCkBAIC0yMjAsNiArMjIxLDcg
QEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3Rz
LmgiCiAjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwu
aD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3Rv
ciB7CkBAIC0yNjMsNyArMjY1LDYgQEAgY2xhc3MgRnJvbnRlbmRSb3V0ZXI7CiAjaW5jbHVkZSAi
VGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0lu
c3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgog
CiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtMzA0LDcgKzMwNSw5IEBAIG5hbWVzcGFjZSBJ
bnNwZWN0b3IgewogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JQcm90b2NvbFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNs
dWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAt
MzYyLDkgKzM2NSw5IEBAIE9wdGlvbmFsPFByb3RvY29sRW51bVR5cGU+IHBhcnNlRW51bVZhbHVl
RnJvbVN0cmluZyhjb25zdCBTdHJpbmcmKTsKIAogLy8gRW51bXMgaW4gdGhlICdSdW50aW1lJyBE
b21haW4KIHRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6
OkZhcm1BbmltYWxzPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6UnVudGltZTo6RmFybUFuaW1hbHM+KGNvbnN0IFN0cmluZyYpOworT3B0aW9uYWw8UHJvdG9j
b2w6OlJ1bnRpbWU6OkZhcm1BbmltYWxzPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8UHJvdG9j
b2w6OlJ1bnRpbWU6OkZhcm1BbmltYWxzPihjb25zdCBTdHJpbmcmKTsKIHRlbXBsYXRlPD4KLU9w
dGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlR3b0xlZ2dlZEFuaW1hbHM+IHBh
cnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpUd29M
ZWdnZWRBbmltYWxzPihjb25zdCBTdHJpbmcmKTsKK09wdGlvbmFsPFByb3RvY29sOjpSdW50aW1l
OjpUd29MZWdnZWRBbmltYWxzPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8UHJvdG9jb2w6OlJ1
bnRpbWU6OlR3b0xlZ2dlZEFuaW1hbHM+KGNvbnN0IFN0cmluZyYpOwogCiB9IC8vIG5hbWVzcGFj
ZSBUZXN0SGVscGVycwogCkBAIC00MTgsOCArNDIxLDcgQEAgc3RydWN0IERlZmF1bHRIYXNoPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlR3b0xlZ2dlZEFuaW1hbHM+IDogSW50SGFzaDxJ
bnMKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgi
CiAKLSNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5n
Lmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7
CiAKQEAgLTQ0NCwzMyArNDQ2LDMzIEBAIFN0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQg
Y29kZSkgewogLy8gRW51bXMgaW4gdGhlICdSdW50aW1lJyBEb21haW4KIAogdGVtcGxhdGU8Pgot
T3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHM+IHBhcnNl
RW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpGYXJtQW5p
bWFscz4oY29uc3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKK09wdGlvbmFsPFByb3RvY29sOjpS
dW50aW1lOjpGYXJtQW5pbWFscz4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPFByb3RvY29sOjpS
dW50aW1lOjpGYXJtQW5pbWFscz4oY29uc3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKIHsKICAg
ICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNvbnN0YW50VmFsdWVzW10gPSB7Ci0gICAgICAgIChzaXpl
X3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHM6OlBpZ3MsCi0gICAg
ICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHM6OkNv
d3MsCi0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RmFybUFu
aW1hbHM6OkNhdHMsCi0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGlt
ZTo6RmFybUFuaW1hbHM6OkhlbnMsCisgICAgICAgIChzaXplX3QpUHJvdG9jb2w6OlJ1bnRpbWU6
OkZhcm1BbmltYWxzOjpQaWdzLAorICAgICAgICAoc2l6ZV90KVByb3RvY29sOjpSdW50aW1lOjpG
YXJtQW5pbWFsczo6Q293cywKKyAgICAgICAgKHNpemVfdClQcm90b2NvbDo6UnVudGltZTo6RmFy
bUFuaW1hbHM6OkNhdHMsCisgICAgICAgIChzaXplX3QpUHJvdG9jb2w6OlJ1bnRpbWU6OkZhcm1B
bmltYWxzOjpIZW5zLAogICAgIH07CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCA0OyArK2kp
CiAgICAgICAgIGlmIChwcm90b2NvbFN0cmluZyA9PSBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb25z
dGFudFZhbHVlc1tpXV0pCi0gICAgICAgICAgICByZXR1cm4gKEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlJ1bnRpbWU6OkZhcm1BbmltYWxzKWNvbnN0YW50VmFsdWVzW2ldOworICAgICAgICAgICAgcmV0
dXJuIChQcm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHMpY29uc3RhbnRWYWx1ZXNbaV07CiAK
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQogCiB0ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJbnNw
ZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpUd29MZWdnZWRBbmltYWxzPiBwYXJzZUVudW1WYWx1
ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFs
cz4oY29uc3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKK09wdGlvbmFsPFByb3RvY29sOjpSdW50
aW1lOjpUd29MZWdnZWRBbmltYWxzPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8UHJvdG9jb2w6
OlJ1bnRpbWU6OlR3b0xlZ2dlZEFuaW1hbHM+KGNvbnN0IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcp
CiB7CiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBjb25zdGFudFZhbHVlc1tdID0gewotICAgICAg
ICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlR3b0xlZ2dlZEFuaW1hbHM6
OkR1Y2tzLAotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlR3
b0xlZ2dlZEFuaW1hbHM6OkhlbnMsCi0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2Nv
bDo6UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFsczo6Q3Jvd3MsCi0gICAgICAgIChzaXplX3QpSW5z
cGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFsczo6RmxhbWluZ29zLAor
ICAgICAgICAoc2l6ZV90KVByb3RvY29sOjpSdW50aW1lOjpUd29MZWdnZWRBbmltYWxzOjpEdWNr
cywKKyAgICAgICAgKHNpemVfdClQcm90b2NvbDo6UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFsczo6
SGVucywKKyAgICAgICAgKHNpemVfdClQcm90b2NvbDo6UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFs
czo6Q3Jvd3MsCisgICAgICAgIChzaXplX3QpUHJvdG9jb2w6OlJ1bnRpbWU6OlR3b0xlZ2dlZEFu
aW1hbHM6OkZsYW1pbmdvcywKICAgICB9OwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgNDsg
KytpKQogICAgICAgICBpZiAocHJvdG9jb2xTdHJpbmcgPT0gZW51bV9jb25zdGFudF92YWx1ZXNb
Y29uc3RhbnRWYWx1ZXNbaV1dKQotICAgICAgICAgICAgcmV0dXJuIChJbnNwZWN0b3I6OlByb3Rv
Y29sOjpSdW50aW1lOjpUd29MZWdnZWRBbmltYWxzKWNvbnN0YW50VmFsdWVzW2ldOworICAgICAg
ICAgICAgcmV0dXJuIChQcm90b2NvbDo6UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFscyljb25zdGFu
dFZhbHVlc1tpXTsKIAogICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlw
ZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLW9i
amVjdC10eXBlLmpzb24tcmVzdWx0CmluZGV4IDMyOGZlZDIzZGM0Y2E3ZjE4ODU5MGI2MzQ0ZDVi
ZjdlNDczZGRjMDMuLmJhOWYxN2M2MjUwZGNlMDY4Y2Y5NDY1NTk0NzBkZDQ1YjYxNzc0MDUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9l
eHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24tcmVzdWx0CisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBl
LWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24tcmVzdWx0CkBAIC03MCw3ICs3MCw3IEBAIElu
c3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIkRhdGFiYXNlIiwgbnVsbCk7CiAKICNpZiBF
TkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIAotI2luY2x1ZGUgIlRlc3RQ
cm90b2NvbFR5cGVzLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CiAjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KIApAQCAtMTI2LDEx
ICsxMjYsMTQgQEAgcHJpdmF0ZToKIAogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIK
ICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgor
I2luY2x1ZGUgPHR1cGxlPgorI2luY2x1ZGUgPHd0Zi9FeHBlY3RlZC5oPgorI2luY2x1ZGUgPHd0
Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKIAotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKIAogCiAKQEAg
LTE3MSw5ICsxNzQsNyBAQCB0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKICNpbmNsdWRlICJU
ZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CiAjaW5j
bHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5o
PgogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAjaW5jbHVk
ZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgpAQCAtMjIxLDYgKzIyMiw3IEBA
IG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5o
IgogI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+
CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3Ig
ewpAQCAtMjY0LDcgKzI2Niw2IEBAIGNsYXNzIEZyb250ZW5kUm91dGVyOwogI2luY2x1ZGUgIlRl
c3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAog
bmFtZXNwYWNlIEluc3BlY3RvciB7CiAKQEAgLTMwNSw3ICszMDYsOSBAQCBuYW1lc3BhY2UgSW5z
cGVjdG9yIHsKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yUHJvdG9jb2xUeXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVk
ZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKQEAgLTMz
Myw3ICszMzYsNyBAQCBjbGFzcyBQYXJhbWV0ZXJCdW5kbGU7CiAKIC8vIFR5cGVkZWZzLgogbmFt
ZXNwYWNlIERhdGFiYXNlIHsKLXVzaW5nIEVycm9yTGlzdCA9IEpTT046OkFycmF5T2Y8SW5zcGVj
dG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPjsKK3VzaW5nIEVycm9yTGlzdCA9IEpTT046
OkFycmF5T2Y8UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj47CiB9IC8vIERhdGFiYXNlCiAvLyBF
bmQgb2YgdHlwZWRlZnMuCiAKQEAgLTM1MSw3ICszNTQsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBTdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoVCBlbnVtVmFsdWUpCiBuYW1lc3BhY2UgRGF0
YWJhc2UgewogCiAvKiBEYXRhYmFzZSBlcnJvci4gKi8KLWNsYXNzIEVycm9yIDogcHVibGljIEpT
T046Ok9iamVjdEJhc2UgeworY2xhc3MgRXJyb3IgZmluYWwgOiBwdWJsaWMgSlNPTjo6T2JqZWN0
QmFzZSB7CiBwdWJsaWM6CiAgICAgZW51bSB7CiAgICAgICAgIE5vRmllbGRzU2V0ID0gMCwKQEAg
LTM3OCwxNyArMzgxLDE3IEBAIHB1YmxpYzoKICAgICAgICAgZnJpZW5kIGNsYXNzIEVycm9yOwog
ICAgIHB1YmxpYzoKIAotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTWVzc2FnZVNldD4mIHNldE1l
c3NhZ2UoY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IE1lc3Nh
Z2VTZXQ+JiBzZXRNZXNzYWdlKGNvbnN0IFN0cmluZyYgaW5fbWVzc2FnZSkKICAgICAgICAgewog
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE1lc3NhZ2VTZXQpLCBwcm9wZXJ0
eV9tZXNzYWdlX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmco
Im1lc3NhZ2UiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm1l
c3NhZ2UiX3MsIGluX21lc3NhZ2UpOwogICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxNZXNz
YWdlU2V0PigpOwogICAgICAgICB9CiAKLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IENvZGVTZXQ+
JiBzZXRDb2RlKGludCB2YWx1ZSkKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IENvZGVTZXQ+JiBz
ZXRDb2RlKGludCBpbl9jb2RlKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VS
VCghKFNUQVRFICYgQ29kZVNldCksIHByb3BlcnR5X2NvZGVfYWxyZWFkeV9zZXQpOwotICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldEludGVnZXIoImNvZGUiX3MsIHZhbHVlKTsKKyAgICAgICAgICAg
IG1fcmVzdWx0LT5zZXRJbnRlZ2VyKCJjb2RlIl9zLCBpbl9jb2RlKTsKICAgICAgICAgICAgIHJl
dHVybiBjYXN0U3RhdGU8Q29kZVNldD4oKTsKICAgICAgICAgfQogCkBAIC00MjQsMTMgKzQyNywx
NCBAQCBlbnVtIGNsYXNzIE1vdXNlQnV0dG9uIHsKICAgICBSaWdodCA9IDMsCiB9OyAvLyBlbnVt
IGNsYXNzIE1vdXNlQnV0dG9uCiAKLWNsYXNzIE9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlIDogcHVi
bGljIEpTT046Ok9iamVjdEJhc2UgeworY2xhc3MgT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGUgZmlu
YWwgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7CiBwdWJsaWM6CiAgICAgLy8gTmFtZWQgYWZ0
ZXIgcHJvcGVydHkgbmFtZSAnZGlyZWN0aW9uYWxpdHknIHdoaWxlIGdlbmVyYXRpbmcgT3B0aW9u
YWxQYXJhbWV0ZXJCdW5kbGUuCiAgICAgZW51bSBjbGFzcyBEaXJlY3Rpb25hbGl0eSB7CiAgICAg
ICAgIExUUiA9IDQsCiAgICAgICAgIFJUTCA9IDUsCiAgICAgfTsgLy8gZW51bSBjbGFzcyBEaXJl
Y3Rpb25hbGl0eQorCiAgICAgZW51bSB7CiAgICAgICAgIE5vRmllbGRzU2V0ID0gMCwKICAgICAg
ICAgQWxsRmllbGRzU2V0ID0gMApAQCAtNDc1LDU5ICs0NzksNjAgQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSk7CiAg
ICAgfQogCi0gICAgdm9pZCBzZXRDb2x1bW5OYW1lcyhSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJp
bmc+PiB2YWx1ZSkKKyAgICB2b2lkIHNldENvbHVtbk5hbWVzKFJlZjxKU09OOjpBcnJheU9mPFN0
cmluZz4+JiYgaW5fb3B0X2NvbHVtbk5hbWVzKQogICAgIHsKLSAgICAgICAgSlNPTjo6T2JqZWN0
QmFzZTo6c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCBXVEZNb3ZlKHZhbHVlKSk7CisgICAgICAg
IEpTT046Ok9iamVjdEJhc2U6OnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgV1RGTW92ZShpbl9v
cHRfY29sdW1uTmFtZXMpKTsKICAgICB9CiAKLSAgICB2b2lkIHNldEJ1dHRvbnMoUmVmUHRyPEpT
T046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9uPj4g
dmFsdWUpCisgICAgdm9pZCBzZXRCdXR0b25zKFJlZjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpE
YXRhYmFzZTo6TW91c2VCdXR0b24+PiYmIGluX29wdF9idXR0b25zKQogICAgIHsKLSAgICAgICAg
SlNPTjo6T2JqZWN0QmFzZTo6c2V0QXJyYXkoImJ1dHRvbnMiX3MsIFdURk1vdmUodmFsdWUpKTsK
KyAgICAgICAgSlNPTjo6T2JqZWN0QmFzZTo6c2V0QXJyYXkoImJ1dHRvbnMiX3MsIFdURk1vdmUo
aW5fb3B0X2J1dHRvbnMpKTsKICAgICB9CiAKLSAgICB2b2lkIHNldERpcmVjdGlvbmFsaXR5KERp
cmVjdGlvbmFsaXR5IHZhbHVlKQorICAgIHZvaWQgc2V0RGlyZWN0aW9uYWxpdHkoRGlyZWN0aW9u
YWxpdHkgaW5fb3B0X2RpcmVjdGlvbmFsaXR5KQogICAgIHsKLSAgICAgICAgSlNPTjo6T2JqZWN0
QmFzZTo6c2V0U3RyaW5nKCJkaXJlY3Rpb25hbGl0eSJfcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6
VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKHZhbHVlKSk7CisgICAgICAgIEpTT046
Ok9iamVjdEJhc2U6OnNldFN0cmluZygiZGlyZWN0aW9uYWxpdHkiX3MsIFByb3RvY29sOjpUZXN0
SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUoaW5fb3B0X2RpcmVjdGlvbmFsaXR5KSk7CiAg
ICAgfQogCi0gICAgdm9pZCBzZXROb3Rlcyhjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgIHZvaWQg
c2V0Tm90ZXMoY29uc3QgU3RyaW5nJiBpbl9vcHRfbm90ZXMpCiAgICAgewotICAgICAgICBKU09O
OjpPYmplY3RCYXNlOjpzZXRTdHJpbmcoIm5vdGVzIl9zLCB2YWx1ZSk7CisgICAgICAgIEpTT046
Ok9iamVjdEJhc2U6OnNldFN0cmluZygibm90ZXMiX3MsIGluX29wdF9ub3Rlcyk7CiAgICAgfQog
Ci0gICAgdm9pZCBzZXRUaW1lc3RhbXAoZG91YmxlIHZhbHVlKQorICAgIHZvaWQgc2V0VGltZXN0
YW1wKGRvdWJsZSBpbl9vcHRfdGltZXN0YW1wKQogICAgIHsKLSAgICAgICAgSlNPTjo6T2JqZWN0
QmFzZTo6c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsIHZhbHVlKTsKKyAgICAgICAgSlNPTjo6T2Jq
ZWN0QmFzZTo6c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsIGluX29wdF90aW1lc3RhbXApOwogICAg
IH0KIAotICAgIHZvaWQgc2V0VmFsdWVzKFJlZlB0cjxKU09OOjpPYmplY3Q+IHZhbHVlKQorICAg
IHZvaWQgc2V0VmFsdWVzKFJlZjxKU09OOjpPYmplY3Q+JiYgaW5fb3B0X3ZhbHVlcykKICAgICB7
Ci0gICAgICAgIEpTT046Ok9iamVjdEJhc2U6OnNldE9iamVjdCgidmFsdWVzIl9zLCBXVEZNb3Zl
KHZhbHVlKSk7CisgICAgICAgIEpTT046Ok9iamVjdEJhc2U6OnNldE9iamVjdCgidmFsdWVzIl9z
LCBXVEZNb3ZlKGluX29wdF92YWx1ZXMpKTsKICAgICB9CiAKLSAgICB2b2lkIHNldFBheWxvYWQo
UmVmUHRyPEpTT046OlZhbHVlPiB2YWx1ZSkKKyAgICB2b2lkIHNldFBheWxvYWQoUmVmPEpTT046
OlZhbHVlPiYmIGluX29wdF9wYXlsb2FkKQogICAgIHsKLSAgICAgICAgSlNPTjo6T2JqZWN0QmFz
ZTo6c2V0VmFsdWUoInBheWxvYWQiX3MsIFdURk1vdmUodmFsdWUpKTsKKyAgICAgICAgSlNPTjo6
T2JqZWN0QmFzZTo6c2V0VmFsdWUoInBheWxvYWQiX3MsIFdURk1vdmUoaW5fb3B0X3BheWxvYWQp
KTsKICAgICB9CiAKLSAgICB2b2lkIHNldEVycm9yKFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29s
OjpEYXRhYmFzZTo6RXJyb3I+IHZhbHVlKQorICAgIHZvaWQgc2V0RXJyb3IoUmVmPFByb3RvY29s
OjpEYXRhYmFzZTo6RXJyb3I+JiYgaW5fb3B0X2Vycm9yKQogICAgIHsKLSAgICAgICAgSlNPTjo6
T2JqZWN0QmFzZTo6c2V0T2JqZWN0KCJlcnJvciJfcywgV1RGTW92ZSh2YWx1ZSkpOworICAgICAg
ICBKU09OOjpPYmplY3RCYXNlOjpzZXRPYmplY3QoImVycm9yIl9zLCBXVEZNb3ZlKGluX29wdF9l
cnJvcikpOwogICAgIH0KIAotICAgIHZvaWQgc2V0RXJyb3JMaXN0KFJlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3JMaXN0PiB2YWx1ZSkKKyAgICB2b2lkIHNldEVycm9y
TGlzdChSZWY8UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvckxpc3Q+JiYgaW5fb3B0X2Vycm9yTGlz
dCkKICAgICB7Ci0gICAgICAgIEpTT046Ok9iamVjdEJhc2U6OnNldEFycmF5KCJlcnJvckxpc3Qi
X3MsIFdURk1vdmUodmFsdWUpKTsKKyAgICAgICAgSlNPTjo6T2JqZWN0QmFzZTo6c2V0QXJyYXko
ImVycm9yTGlzdCJfcywgV1RGTW92ZShpbl9vcHRfZXJyb3JMaXN0KSk7CiAgICAgfQogfTsKIAot
Y2xhc3MgUGFyYW1ldGVyQnVuZGxlIDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgeworY2xhc3Mg
UGFyYW1ldGVyQnVuZGxlIGZpbmFsIDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgewogcHVibGlj
OgogICAgIC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5IG5hbWUgJ2RpcmVjdGlvbmFsaXR5JyB3aGls
ZSBnZW5lcmF0aW5nIFBhcmFtZXRlckJ1bmRsZS4KICAgICBlbnVtIGNsYXNzIERpcmVjdGlvbmFs
aXR5IHsKICAgICAgICAgTFRSID0gNCwKICAgICAgICAgUlRMID0gNSwKICAgICB9OyAvLyBlbnVt
IGNsYXNzIERpcmVjdGlvbmFsaXR5CisKICAgICBlbnVtIHsKICAgICAgICAgTm9GaWVsZHNTZXQg
PSAwLAogICAgICAgICBDb2x1bW5OYW1lc1NldCA9IDEgPDwgMCwKQEAgLTU2MCw2NiArNTY1LDY2
IEBAIHB1YmxpYzoKICAgICAgICAgZnJpZW5kIGNsYXNzIFBhcmFtZXRlckJ1bmRsZTsKICAgICBw
dWJsaWM6CiAKLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IENvbHVtbk5hbWVzU2V0PiYgc2V0Q29s
dW1uTmFtZXMoUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4gdmFsdWUpCisgICAgICAgIEJ1
aWxkZXI8U1RBVEUgfCBDb2x1bW5OYW1lc1NldD4mIHNldENvbHVtbk5hbWVzKFJlZjxKU09OOjpB
cnJheU9mPFN0cmluZz4+JiYgaW5fY29sdW1uTmFtZXMpCiAgICAgICAgIHsKICAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBDb2x1bW5OYW1lc1NldCksIHByb3BlcnR5X2NvbHVt
bk5hbWVzX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRBcnJheSgiY29s
dW1uTmFtZXMiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRBcnJheSgiY29s
dW1uTmFtZXMiX3MsIFdURk1vdmUoaW5fY29sdW1uTmFtZXMpKTsKICAgICAgICAgICAgIHJldHVy
biBjYXN0U3RhdGU8Q29sdW1uTmFtZXNTZXQ+KCk7CiAgICAgICAgIH0KIAotICAgICAgICBCdWls
ZGVyPFNUQVRFIHwgQnV0dG9uc1NldD4mIHNldEJ1dHRvbnMoUmVmUHRyPEpTT046OkFycmF5T2Y8
SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9uPj4gdmFsdWUpCisgICAg
ICAgIEJ1aWxkZXI8U1RBVEUgfCBCdXR0b25zU2V0PiYgc2V0QnV0dG9ucyhSZWY8SlNPTjo6QXJy
YXlPZjxQcm90b2NvbDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9uPj4mJiBpbl9idXR0b25zKQogICAg
ICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQnV0dG9uc1NldCks
IHByb3BlcnR5X2J1dHRvbnNfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNl
dEFycmF5KCJidXR0b25zIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0QXJy
YXkoImJ1dHRvbnMiX3MsIFdURk1vdmUoaW5fYnV0dG9ucykpOwogICAgICAgICAgICAgcmV0dXJu
IGNhc3RTdGF0ZTxCdXR0b25zU2V0PigpOwogICAgICAgICB9CiAKLSAgICAgICAgQnVpbGRlcjxT
VEFURSB8IERpcmVjdGlvbmFsaXR5U2V0PiYgc2V0RGlyZWN0aW9uYWxpdHkoRGlyZWN0aW9uYWxp
dHkgdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBEaXJlY3Rpb25hbGl0eVNldD4mIHNl
dERpcmVjdGlvbmFsaXR5KERpcmVjdGlvbmFsaXR5IGluX2RpcmVjdGlvbmFsaXR5KQogICAgICAg
ICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgRGlyZWN0aW9uYWxpdHlT
ZXQpLCBwcm9wZXJ0eV9kaXJlY3Rpb25hbGl0eV9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBt
X3Jlc3VsdC0+c2V0U3RyaW5nKCJkaXJlY3Rpb25hbGl0eSJfcywgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKHZhbHVlKSk7CisgICAgICAgICAg
ICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJkaXJlY3Rpb25hbGl0eSJfcywgUHJvdG9jb2w6OlRlc3RI
ZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbl9kaXJlY3Rpb25hbGl0eSkpOwogICAgICAg
ICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxEaXJlY3Rpb25hbGl0eVNldD4oKTsKICAgICAgICAgfQog
Ci0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBOb3Rlc1NldD4mIHNldE5vdGVzKGNvbnN0IFN0cmlu
ZyYgdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBOb3Rlc1NldD4mIHNldE5vdGVzKGNv
bnN0IFN0cmluZyYgaW5fbm90ZXMpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKCEoU1RBVEUgJiBOb3Rlc1NldCksIHByb3BlcnR5X25vdGVzX2FscmVhZHlfc2V0KTsKLSAg
ICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCB2YWx1ZSk7CisgICAgICAg
ICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJub3RlcyJfcywgaW5fbm90ZXMpOwogICAgICAgICAg
ICAgcmV0dXJuIGNhc3RTdGF0ZTxOb3Rlc1NldD4oKTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1
aWxkZXI8U1RBVEUgfCBUaW1lc3RhbXBTZXQ+JiBzZXRUaW1lc3RhbXAoZG91YmxlIHZhbHVlKQor
ICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVGltZXN0YW1wU2V0PiYgc2V0VGltZXN0YW1wKGRvdWJs
ZSBpbl90aW1lc3RhbXApCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEo
U1RBVEUgJiBUaW1lc3RhbXBTZXQpLCBwcm9wZXJ0eV90aW1lc3RhbXBfYWxyZWFkeV9zZXQpOwot
ICAgICAgICAgICAgbV9yZXN1bHQtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCB2YWx1ZSk7Cisg
ICAgICAgICAgICBtX3Jlc3VsdC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsIGluX3RpbWVzdGFt
cCk7CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFRpbWVzdGFtcFNldD4oKTsKICAgICAg
ICAgfQogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBWYWx1ZXNTZXQ+JiBzZXRWYWx1ZXMoUmVm
UHRyPEpTT046Ok9iamVjdD4gdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBWYWx1ZXNT
ZXQ+JiBzZXRWYWx1ZXMoUmVmPEpTT046Ok9iamVjdD4mJiBpbl92YWx1ZXMpCiAgICAgICAgIHsK
ICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBWYWx1ZXNTZXQpLCBwcm9wZXJ0
eV92YWx1ZXNfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldE9iamVjdCgi
dmFsdWVzIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0KCJ2YWx1
ZXMiX3MsIFdURk1vdmUoaW5fdmFsdWVzKSk7CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRl
PFZhbHVlc1NldD4oKTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBQYXls
b2FkU2V0PiYgc2V0UGF5bG9hZChSZWZQdHI8SlNPTjo6VmFsdWU+IHZhbHVlKQorICAgICAgICBC
dWlsZGVyPFNUQVRFIHwgUGF5bG9hZFNldD4mIHNldFBheWxvYWQoUmVmPEpTT046OlZhbHVlPiYm
IGluX3BheWxvYWQpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RB
VEUgJiBQYXlsb2FkU2V0KSwgcHJvcGVydHlfcGF5bG9hZF9hbHJlYWR5X3NldCk7Ci0gICAgICAg
ICAgICBtX3Jlc3VsdC0+c2V0VmFsdWUoInBheWxvYWQiX3MsIHZhbHVlKTsKKyAgICAgICAgICAg
IG1fcmVzdWx0LT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgV1RGTW92ZShpbl9wYXlsb2FkKSk7CiAg
ICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFBheWxvYWRTZXQ+KCk7CiAgICAgICAgIH0KIAot
ICAgICAgICBCdWlsZGVyPFNUQVRFIHwgRXJyb3JTZXQ+JiBzZXRFcnJvcihSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiB2YWx1ZSkKKyAgICAgICAgQnVpbGRlcjxT
VEFURSB8IEVycm9yU2V0PiYgc2V0RXJyb3IoUmVmPFByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+
JiYgaW5fZXJyb3IpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RB
VEUgJiBFcnJvclNldCksIHByb3BlcnR5X2Vycm9yX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAg
IG1fcmVzdWx0LT5zZXRPYmplY3QoImVycm9yIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICBtX3Jl
c3VsdC0+c2V0T2JqZWN0KCJlcnJvciJfcywgV1RGTW92ZShpbl9lcnJvcikpOwogICAgICAgICAg
ICAgcmV0dXJuIGNhc3RTdGF0ZTxFcnJvclNldD4oKTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1
aWxkZXI8U1RBVEUgfCBFcnJvckxpc3RTZXQ+JiBzZXRFcnJvckxpc3QoUmVmUHRyPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvckxpc3Q+IHZhbHVlKQorICAgICAgICBCdWlsZGVy
PFNUQVRFIHwgRXJyb3JMaXN0U2V0PiYgc2V0RXJyb3JMaXN0KFJlZjxQcm90b2NvbDo6RGF0YWJh
c2U6OkVycm9yTGlzdD4mJiBpbl9lcnJvckxpc3QpCiAgICAgICAgIHsKICAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBFcnJvckxpc3RTZXQpLCBwcm9wZXJ0eV9lcnJvckxpc3Rf
YWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldEFycmF5KCJlcnJvckxpc3Qi
X3MsIHZhbHVlKTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRBcnJheSgiZXJyb3JMaXN0Il9z
LCBXVEZNb3ZlKGluX2Vycm9yTGlzdCkpOwogICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxF
cnJvckxpc3RTZXQ+KCk7CiAgICAgICAgIH0KIApAQCAtNjU1LDcgKzY2MCw3IEBAIHB1YmxpYzoK
IH07CiAKIC8qIENvbmZsaWN0ZWQgbmFtZXMgbWF5IGNhdXNlIGdlbmVyYXRlZCBnZXR0ZXJzL3Nl
dHRlcnMgdG8gY2xhc2ggd2l0aCBidWlsdC1pbiBJbnNwZWN0b3JPYmplY3QgbWV0aG9kcy4gKi8K
LWNsYXNzIE9iamVjdFdpdGhQcm9wZXJ0eU5hbWVDb25mbGljdHMgOiBwdWJsaWMgSlNPTjo6T2Jq
ZWN0QmFzZSB7CitjbGFzcyBPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzIGZpbmFsIDog
cHVibGljIEpTT046Ok9iamVjdEJhc2UgewogcHVibGljOgogICAgIGVudW0gewogICAgICAgICBO
b0ZpZWxkc1NldCA9IDAsCkBAIC02ODUsMzggKzY5MCwzOCBAQCBwdWJsaWM6CiAgICAgICAgIGZy
aWVuZCBjbGFzcyBPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzOwogICAgIHB1YmxpYzoK
IAotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgSW50ZWdlclNldD4mIHNldEludGVnZXIoY29uc3Qg
U3RyaW5nJiB2YWx1ZSkKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IEludGVnZXJTZXQ+JiBzZXRJ
bnRlZ2VyKGNvbnN0IFN0cmluZyYgaW5faW50ZWdlcikKICAgICAgICAgewogICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoIShTVEFURSAmIEludGVnZXJTZXQpLCBwcm9wZXJ0eV9pbnRlZ2VyX2Fs
cmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoImludGVnZXIiX3Ms
IHZhbHVlKTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoImludGVnZXIiX3MsIGlu
X2ludGVnZXIpOwogICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxJbnRlZ2VyU2V0PigpOwog
ICAgICAgICB9CiAKLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IEFycmF5U2V0PiYgc2V0QXJyYXko
Y29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IEFycmF5U2V0PiYg
c2V0QXJyYXkoY29uc3QgU3RyaW5nJiBpbl9hcnJheSkKICAgICAgICAgewogICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoIShTVEFURSAmIEFycmF5U2V0KSwgcHJvcGVydHlfYXJyYXlfYWxyZWFk
eV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygiYXJyYXkiX3MsIHZhbHVl
KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoImFycmF5Il9zLCBpbl9hcnJheSk7
CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEFycmF5U2V0PigpOwogICAgICAgICB9CiAK
LSAgICAgICAgQnVpbGRlcjxTVEFURSB8IFN0cmluZ1NldD4mIHNldFN0cmluZyhjb25zdCBTdHJp
bmcmIHZhbHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRFIHwgU3RyaW5nU2V0PiYgc2V0U3RyaW5n
KGNvbnN0IFN0cmluZyYgaW5fc3RyaW5nKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxF
X0FTU0VSVCghKFNUQVRFICYgU3RyaW5nU2V0KSwgcHJvcGVydHlfc3RyaW5nX2FscmVhZHlfc2V0
KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInN0cmluZyJfcywgdmFsdWUpOwor
ICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygic3RyaW5nIl9zLCBpbl9zdHJpbmcpOwog
ICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxTdHJpbmdTZXQ+KCk7CiAgICAgICAgIH0KIAot
ICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVmFsdWVTZXQ+JiBzZXRWYWx1ZShjb25zdCBTdHJpbmcm
IHZhbHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVmFsdWVTZXQ+JiBzZXRWYWx1ZShjb25z
dCBTdHJpbmcmIGluX3ZhbHVlKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VS
VCghKFNUQVRFICYgVmFsdWVTZXQpLCBwcm9wZXJ0eV92YWx1ZV9hbHJlYWR5X3NldCk7Ci0gICAg
ICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ2YWx1ZSJfcywgdmFsdWUpOworICAgICAgICAg
ICAgbV9yZXN1bHQtPnNldFN0cmluZygidmFsdWUiX3MsIGluX3ZhbHVlKTsKICAgICAgICAgICAg
IHJldHVybiBjYXN0U3RhdGU8VmFsdWVTZXQ+KCk7CiAgICAgICAgIH0KIAotICAgICAgICBCdWls
ZGVyPFNUQVRFIHwgT2JqZWN0U2V0PiYgc2V0T2JqZWN0KGNvbnN0IFN0cmluZyYgdmFsdWUpCisg
ICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBPYmplY3RTZXQ+JiBzZXRPYmplY3QoY29uc3QgU3RyaW5n
JiBpbl9vYmplY3QpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RB
VEUgJiBPYmplY3RTZXQpLCBwcm9wZXJ0eV9vYmplY3RfYWxyZWFkeV9zZXQpOwotICAgICAgICAg
ICAgbV9yZXN1bHQtPnNldFN0cmluZygib2JqZWN0Il9zLCB2YWx1ZSk7CisgICAgICAgICAgICBt
X3Jlc3VsdC0+c2V0U3RyaW5nKCJvYmplY3QiX3MsIGluX29iamVjdCk7CiAgICAgICAgICAgICBy
ZXR1cm4gY2FzdFN0YXRlPE9iamVjdFNldD4oKTsKICAgICAgICAgfQogCkBAIC03NDcsMTcgKzc1
Miw2NiBAQCBwdWJsaWM6CiAgICAgfQogfTsKIAorLyogQW4gb3BlbiBvYmplY3QgdGhhdCBkb2Vz
bid0IGhhdmUgYW55IHByZWRlZmluZWQgZmllbGRzLiAqLworY2xhc3MgRHVtbXlPYmplY3QgZmlu
YWwgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7CitwdWJsaWM6CisgICAgZW51bSB7CisgICAg
ICAgIE5vRmllbGRzU2V0ID0gMCwKKyAgICAgICAgQWxsRmllbGRzU2V0ID0gMAorICAgIH07CisK
KyAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CisgICAgY2xhc3MgQnVpbGRlciB7CisgICAgcHJpdmF0
ZToKKyAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gbV9yZXN1bHQ7CisKKyAgICAgICAgdGVt
cGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUg
fCBTVEVQPio+KHRoaXMpOworICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcihSZWY8LypEdW1t
eU9iamVjdCovSlNPTjo6T2JqZWN0PiYmIG9iamVjdCkKKyAgICAgICAgICAgIDogbV9yZXN1bHQo
V1RGTW92ZShvYmplY3QpKQorICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChT
VEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsK
KyAgICAgICAgfQorICAgICAgICBmcmllbmQgY2xhc3MgRHVtbXlPYmplY3Q7CisgICAgcHVibGlj
OgorCisgICAgICAgIFJlZjxEdW1teU9iamVjdD4gcmVsZWFzZSgpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25v
dF9yZWFkeSk7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoRHVtbXlPYmplY3Qp
ID09IHNpemVvZihKU09OOjpPYmplY3QpLCBjYW5ub3RfY2FzdCk7CisKKyAgICAgICAgICAgIFJl
ZjxKU09OOjpPYmplY3Q+IGpzb25SZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOwor
ICAgICAgICAgICAgYXV0byByZXN1bHQgPSBXVEZNb3ZlKCpyZWludGVycHJldF9jYXN0PFJlZjxE
dW1teU9iamVjdD4qPigmanNvblJlc3VsdCkpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICAgICAgfQorICAgIH07CisKKyAgICAvKgorICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3Rv
cjoKKyAgICAgKiBSZWY8RHVtbXlPYmplY3Q+IHJlc3VsdCA9IER1bW15T2JqZWN0OjpjcmVhdGUo
KQorICAgICAqICAgICAucmVsZWFzZSgpOworICAgICAqLworICAgIHN0YXRpYyBCdWlsZGVyPE5v
RmllbGRzU2V0PiBjcmVhdGUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVs
ZHNTZXQ+KEpTT046Ok9iamVjdDo6Y3JlYXRlKCkpOworICAgIH0KK307CisKIH0gLy8gRGF0YWJh
c2UKIAogbmFtZXNwYWNlIFRlc3QgewogCi1jbGFzcyBQYXJhbWV0ZXJCdW5kbGUgOiBwdWJsaWMg
SlNPTjo6T2JqZWN0QmFzZSB7CitjbGFzcyBQYXJhbWV0ZXJCdW5kbGUgZmluYWwgOiBwdWJsaWMg
SlNPTjo6T2JqZWN0QmFzZSB7CiBwdWJsaWM6CiAgICAgLy8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkg
bmFtZSAnZGlyZWN0aW9uYWxpdHknIHdoaWxlIGdlbmVyYXRpbmcgUGFyYW1ldGVyQnVuZGxlLgog
ICAgIGVudW0gY2xhc3MgRGlyZWN0aW9uYWxpdHkgewogICAgICAgICBMVFIgPSA0LAogICAgICAg
ICBSVEwgPSA1LAogICAgIH07IC8vIGVudW0gY2xhc3MgRGlyZWN0aW9uYWxpdHkKKwogICAgIGVu
dW0gewogICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCiAgICAgICAgIERpcmVjdGlvbmFsaXR5U2V0
ID0gMSA8PCAwLApAQCAtNzg5LDU5ICs4NDMsNTkgQEAgcHVibGljOgogICAgICAgICBmcmllbmQg
Y2xhc3MgUGFyYW1ldGVyQnVuZGxlOwogICAgIHB1YmxpYzoKIAotICAgICAgICBCdWlsZGVyPFNU
QVRFIHwgRGlyZWN0aW9uYWxpdHlTZXQ+JiBzZXREaXJlY3Rpb25hbGl0eShEaXJlY3Rpb25hbGl0
eSB2YWx1ZSkKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IERpcmVjdGlvbmFsaXR5U2V0PiYgc2V0
RGlyZWN0aW9uYWxpdHkoRGlyZWN0aW9uYWxpdHkgaW5fZGlyZWN0aW9uYWxpdHkpCiAgICAgICAg
IHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBEaXJlY3Rpb25hbGl0eVNl
dCksIHByb3BlcnR5X2RpcmVjdGlvbmFsaXR5X2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1f
cmVzdWx0LT5zZXRTdHJpbmcoImRpcmVjdGlvbmFsaXR5Il9zLCBJbnNwZWN0b3I6OlByb3RvY29s
OjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUodmFsdWUpKTsKKyAgICAgICAgICAg
IG1fcmVzdWx0LT5zZXRTdHJpbmcoImRpcmVjdGlvbmFsaXR5Il9zLCBQcm90b2NvbDo6VGVzdEhl
bHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKGluX2RpcmVjdGlvbmFsaXR5KSk7CiAgICAgICAg
ICAgICByZXR1cm4gY2FzdFN0YXRlPERpcmVjdGlvbmFsaXR5U2V0PigpOwogICAgICAgICB9CiAK
LSAgICAgICAgQnVpbGRlcjxTVEFURSB8IEJ1dHRvbnNTZXQ+JiBzZXRCdXR0b25zKFJlZlB0cjxK
U09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbj4+
IHZhbHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQnV0dG9uc1NldD4mIHNldEJ1dHRvbnMo
UmVmPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbj4+JiYgaW5f
YnV0dG9ucykKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAm
IEJ1dHRvbnNTZXQpLCBwcm9wZXJ0eV9idXR0b25zX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAg
IG1fcmVzdWx0LT5zZXRBcnJheSgiYnV0dG9ucyJfcywgdmFsdWUpOworICAgICAgICAgICAgbV9y
ZXN1bHQtPnNldEFycmF5KCJidXR0b25zIl9zLCBXVEZNb3ZlKGluX2J1dHRvbnMpKTsKICAgICAg
ICAgICAgIHJldHVybiBjYXN0U3RhdGU8QnV0dG9uc1NldD4oKTsKICAgICAgICAgfQogCi0gICAg
ICAgIEJ1aWxkZXI8U1RBVEUgfCBDb2x1bW5OYW1lc1NldD4mIHNldENvbHVtbk5hbWVzKFJlZlB0
cjxKU09OOjpBcnJheU9mPFN0cmluZz4+IHZhbHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRFIHwg
Q29sdW1uTmFtZXNTZXQ+JiBzZXRDb2x1bW5OYW1lcyhSZWY8SlNPTjo6QXJyYXlPZjxTdHJpbmc+
PiYmIGluX2NvbHVtbk5hbWVzKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VS
VCghKFNUQVRFICYgQ29sdW1uTmFtZXNTZXQpLCBwcm9wZXJ0eV9jb2x1bW5OYW1lc19hbHJlYWR5
X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCB2
YWx1ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCBX
VEZNb3ZlKGluX2NvbHVtbk5hbWVzKSk7CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENv
bHVtbk5hbWVzU2V0PigpOwogICAgICAgICB9CiAKLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IE5v
dGVzU2V0PiYgc2V0Tm90ZXMoY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICAgICAgQnVpbGRlcjxT
VEFURSB8IE5vdGVzU2V0PiYgc2V0Tm90ZXMoY29uc3QgU3RyaW5nJiBpbl9ub3RlcykKICAgICAg
ICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE5vdGVzU2V0KSwgcHJv
cGVydHlfbm90ZXNfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmlu
Zygibm90ZXMiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm5v
dGVzIl9zLCBpbl9ub3Rlcyk7CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE5vdGVzU2V0
PigpOwogICAgICAgICB9CiAKLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IFRpbWVzdGFtcFNldD4m
IHNldFRpbWVzdGFtcChkb3VibGUgdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBUaW1l
c3RhbXBTZXQ+JiBzZXRUaW1lc3RhbXAoZG91YmxlIGluX3RpbWVzdGFtcCkKICAgICAgICAgewog
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFRpbWVzdGFtcFNldCksIHByb3Bl
cnR5X3RpbWVzdGFtcF9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0RG91
YmxlKCJ0aW1lc3RhbXAiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXREb3Vi
bGUoInRpbWVzdGFtcCJfcywgaW5fdGltZXN0YW1wKTsKICAgICAgICAgICAgIHJldHVybiBjYXN0
U3RhdGU8VGltZXN0YW1wU2V0PigpOwogICAgICAgICB9CiAKLSAgICAgICAgQnVpbGRlcjxTVEFU
RSB8IFZhbHVlc1NldD4mIHNldFZhbHVlcyhSZWZQdHI8SlNPTjo6T2JqZWN0PiB2YWx1ZSkKKyAg
ICAgICAgQnVpbGRlcjxTVEFURSB8IFZhbHVlc1NldD4mIHNldFZhbHVlcyhSZWY8SlNPTjo6T2Jq
ZWN0PiYmIGluX3ZhbHVlcykKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
IShTVEFURSAmIFZhbHVlc1NldCksIHByb3BlcnR5X3ZhbHVlc19hbHJlYWR5X3NldCk7Ci0gICAg
ICAgICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIHZhbHVlKTsKKyAgICAgICAg
ICAgIG1fcmVzdWx0LT5zZXRPYmplY3QoInZhbHVlcyJfcywgV1RGTW92ZShpbl92YWx1ZXMpKTsK
ICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VmFsdWVzU2V0PigpOwogICAgICAgICB9CiAK
LSAgICAgICAgQnVpbGRlcjxTVEFURSB8IFBheWxvYWRTZXQ+JiBzZXRQYXlsb2FkKFJlZlB0cjxK
U09OOjpWYWx1ZT4gdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBQYXlsb2FkU2V0PiYg
c2V0UGF5bG9hZChSZWY8SlNPTjo6VmFsdWU+JiYgaW5fcGF5bG9hZCkKICAgICAgICAgewogICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFBheWxvYWRTZXQpLCBwcm9wZXJ0eV9w
YXlsb2FkX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRWYWx1ZSgicGF5
bG9hZCJfcywgdmFsdWUpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldFZhbHVlKCJwYXlsb2Fk
Il9zLCBXVEZNb3ZlKGluX3BheWxvYWQpKTsKICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8
UGF5bG9hZFNldD4oKTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBFcnJv
clNldD4mIHNldEVycm9yKFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJy
b3I+IHZhbHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRFIHwgRXJyb3JTZXQ+JiBzZXRFcnJvcihS
ZWY8UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4mJiBpbl9lcnJvcikKICAgICAgICAgewogICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEVycm9yU2V0KSwgcHJvcGVydHlfZXJy
b3JfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldE9iamVjdCgiZXJyb3Ii
X3MsIHZhbHVlKTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRPYmplY3QoImVycm9yIl9zLCBX
VEZNb3ZlKGluX2Vycm9yKSk7CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEVycm9yU2V0
PigpOwogICAgICAgICB9CiAKQEAgLTg4NiwxNSArOTQwLDE1IEBAIE9wdGlvbmFsPFByb3RvY29s
RW51bVR5cGU+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZyhjb25zdCBTdHJpbmcmKTsKIAogLy8g
RW51bXMgaW4gdGhlICdEYXRhYmFzZScgRG9tYWluCiB0ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJbnNw
ZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6TW91c2VCdXR0b24+IHBhcnNlRW51bVZhbHVlRnJv
bVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6TW91c2VCdXR0b24+KGNvbnN0
IFN0cmluZyYpOworT3B0aW9uYWw8UHJvdG9jb2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbj4gcGFy
c2VFbnVtVmFsdWVGcm9tU3RyaW5nPFByb3RvY29sOjpEYXRhYmFzZTo6TW91c2VCdXR0b24+KGNv
bnN0IFN0cmluZyYpOwogdGVtcGxhdGU8PgotT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6
RGF0YWJhc2U6Ok9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eT4gcGFyc2VF
bnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpPcHRpb25h
bFBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk+KGNvbnN0IFN0cmluZyYpOworT3B0aW9u
YWw8UHJvdG9jb2w6OkRhdGFiYXNlOjpPcHRpb25hbFBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9u
YWxpdHk+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxQcm90b2NvbDo6RGF0YWJhc2U6Ok9wdGlv
bmFsUGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eT4oY29uc3QgU3RyaW5nJik7CiB0ZW1w
bGF0ZTw+Ci1PcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UGFyYW1ldGVy
QnVuZGxlOjpEaXJlY3Rpb25hbGl0eT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5Pihj
b25zdCBTdHJpbmcmKTsKK09wdGlvbmFsPFByb3RvY29sOjpEYXRhYmFzZTo6UGFyYW1ldGVyQnVu
ZGxlOjpEaXJlY3Rpb25hbGl0eT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPFByb3RvY29sOjpE
YXRhYmFzZTo6UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eT4oY29uc3QgU3RyaW5nJik7
CiAKIC8vIEVudW1zIGluIHRoZSAnVGVzdCcgRG9tYWluCiB0ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJ
bnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5
PiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UGFy
YW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eT4oY29uc3QgU3RyaW5nJik7CitPcHRpb25hbDxQ
cm90b2NvbDo6VGVzdDo6UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eT4gcGFyc2VFbnVt
VmFsdWVGcm9tU3RyaW5nPFByb3RvY29sOjpUZXN0OjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlv
bmFsaXR5Pihjb25zdCBTdHJpbmcmKTsKIAogfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKIApA
QCAtOTQ2LDggKzEwMDAsNyBAQCBzdHJ1Y3QgRGVmYXVsdEhhc2g8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9uPiA6IEludEhhc2g8SW5zcGVjdAogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKIAotI2luY2x1ZGUgPHd0
Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3
dGYvQXNzZXJ0aW9ucy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtOTcxLDQ1ICsx
MDI0LDQ1IEBAIFN0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSkgewogLy8gRW51
bXMgaW4gdGhlICdEYXRhYmFzZScgRG9tYWluCiAKIHRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbj4gcGFyc2VFbnVtVmFsdWVGcm9t
U3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbj4oY29uc3Qg
U3RyaW5nJiBwcm90b2NvbFN0cmluZykKK09wdGlvbmFsPFByb3RvY29sOjpEYXRhYmFzZTo6TW91
c2VCdXR0b24+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxQcm90b2NvbDo6RGF0YWJhc2U6Ok1v
dXNlQnV0dG9uPihjb25zdCBTdHJpbmcmIHByb3RvY29sU3RyaW5nKQogewogICAgIHN0YXRpYyBj
b25zdCBzaXplX3QgY29uc3RhbnRWYWx1ZXNbXSA9IHsKLSAgICAgICAgKHNpemVfdClJbnNwZWN0
b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6TW91c2VCdXR0b246Ok5vbmUsCi0gICAgICAgIChzaXpl
X3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9uOjpMZWZ0LAotICAg
ICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbjo6
TWlkZGxlLAotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpN
b3VzZUJ1dHRvbjo6UmlnaHQsCisgICAgICAgIChzaXplX3QpUHJvdG9jb2w6OkRhdGFiYXNlOjpN
b3VzZUJ1dHRvbjo6Tm9uZSwKKyAgICAgICAgKHNpemVfdClQcm90b2NvbDo6RGF0YWJhc2U6Ok1v
dXNlQnV0dG9uOjpMZWZ0LAorICAgICAgICAoc2l6ZV90KVByb3RvY29sOjpEYXRhYmFzZTo6TW91
c2VCdXR0b246Ok1pZGRsZSwKKyAgICAgICAgKHNpemVfdClQcm90b2NvbDo6RGF0YWJhc2U6Ok1v
dXNlQnV0dG9uOjpSaWdodCwKICAgICB9OwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgNDsg
KytpKQogICAgICAgICBpZiAocHJvdG9jb2xTdHJpbmcgPT0gZW51bV9jb25zdGFudF92YWx1ZXNb
Y29uc3RhbnRWYWx1ZXNbaV1dKQotICAgICAgICAgICAgcmV0dXJuIChJbnNwZWN0b3I6OlByb3Rv
Y29sOjpEYXRhYmFzZTo6TW91c2VCdXR0b24pY29uc3RhbnRWYWx1ZXNbaV07CisgICAgICAgICAg
ICByZXR1cm4gKFByb3RvY29sOjpEYXRhYmFzZTo6TW91c2VCdXR0b24pY29uc3RhbnRWYWx1ZXNb
aV07CiAKICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQogCiB0ZW1wbGF0ZTw+Ci1PcHRpb25h
bDxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6T3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU6
OkRpcmVjdGlvbmFsaXR5PiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90
b2NvbDo6RGF0YWJhc2U6Ok9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eT4o
Y29uc3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKK09wdGlvbmFsPFByb3RvY29sOjpEYXRhYmFz
ZTo6T3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5PiBwYXJzZUVudW1WYWx1
ZUZyb21TdHJpbmc8UHJvdG9jb2w6OkRhdGFiYXNlOjpPcHRpb25hbFBhcmFtZXRlckJ1bmRsZTo6
RGlyZWN0aW9uYWxpdHk+KGNvbnN0IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcpCiB7CiAgICAgc3Rh
dGljIGNvbnN0IHNpemVfdCBjb25zdGFudFZhbHVlc1tdID0gewotICAgICAgICAoc2l6ZV90KUlu
c3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpPcHRpb25hbFBhcmFtZXRlckJ1bmRsZTo6RGly
ZWN0aW9uYWxpdHk6OkxUUiwKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpE
YXRhYmFzZTo6T3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5OjpSVEwsCisg
ICAgICAgIChzaXplX3QpUHJvdG9jb2w6OkRhdGFiYXNlOjpPcHRpb25hbFBhcmFtZXRlckJ1bmRs
ZTo6RGlyZWN0aW9uYWxpdHk6OkxUUiwKKyAgICAgICAgKHNpemVfdClQcm90b2NvbDo6RGF0YWJh
c2U6Ok9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eTo6UlRMLAogICAgIH07
CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAyOyArK2kpCiAgICAgICAgIGlmIChwcm90b2Nv
bFN0cmluZyA9PSBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb25zdGFudFZhbHVlc1tpXV0pCi0gICAg
ICAgICAgICByZXR1cm4gKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpPcHRpb25hbFBh
cmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHkpY29uc3RhbnRWYWx1ZXNbaV07CisgICAgICAg
ICAgICByZXR1cm4gKFByb3RvY29sOjpEYXRhYmFzZTo6T3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU6
OkRpcmVjdGlvbmFsaXR5KWNvbnN0YW50VmFsdWVzW2ldOwogCiAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKIH0KIAogdGVtcGxhdGU8PgotT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0
YWJhc2U6OlBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk+IHBhcnNlRW51bVZhbHVlRnJv
bVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UGFyYW1ldGVyQnVuZGxlOjpE
aXJlY3Rpb25hbGl0eT4oY29uc3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKK09wdGlvbmFsPFBy
b3RvY29sOjpEYXRhYmFzZTo6UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eT4gcGFyc2VF
bnVtVmFsdWVGcm9tU3RyaW5nPFByb3RvY29sOjpEYXRhYmFzZTo6UGFyYW1ldGVyQnVuZGxlOjpE
aXJlY3Rpb25hbGl0eT4oY29uc3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKIHsKICAgICBzdGF0
aWMgY29uc3Qgc2l6ZV90IGNvbnN0YW50VmFsdWVzW10gPSB7Ci0gICAgICAgIChzaXplX3QpSW5z
cGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxp
dHk6OkxUUiwKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6
UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eTo6UlRMLAorICAgICAgICAoc2l6ZV90KVBy
b3RvY29sOjpEYXRhYmFzZTo6UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eTo6TFRSLAor
ICAgICAgICAoc2l6ZV90KVByb3RvY29sOjpEYXRhYmFzZTo6UGFyYW1ldGVyQnVuZGxlOjpEaXJl
Y3Rpb25hbGl0eTo6UlRMLAogICAgIH07CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAyOyAr
K2kpCiAgICAgICAgIGlmIChwcm90b2NvbFN0cmluZyA9PSBlbnVtX2NvbnN0YW50X3ZhbHVlc1tj
b25zdGFudFZhbHVlc1tpXV0pCi0gICAgICAgICAgICByZXR1cm4gKEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRhdGFiYXNlOjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5KWNvbnN0YW50VmFs
dWVzW2ldOworICAgICAgICAgICAgcmV0dXJuIChQcm90b2NvbDo6RGF0YWJhc2U6OlBhcmFtZXRl
ckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHkpY29uc3RhbnRWYWx1ZXNbaV07CiAKICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwogfQpAQCAtMTAxNywxNSArMTA3MCwxNSBAQCBPcHRpb25hbDxJbnNwZWN0
b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eT4g
cGFyc2VFbgogLy8gRW51bXMgaW4gdGhlICdUZXN0JyBEb21haW4KIAogdGVtcGxhdGU8PgotT3B0
aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rp
b25hbGl0eT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRl
c3Q6OlBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk+KGNvbnN0IFN0cmluZyYgcHJvdG9j
b2xTdHJpbmcpCitPcHRpb25hbDxQcm90b2NvbDo6VGVzdDo6UGFyYW1ldGVyQnVuZGxlOjpEaXJl
Y3Rpb25hbGl0eT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPFByb3RvY29sOjpUZXN0OjpQYXJh
bWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5Pihjb25zdCBTdHJpbmcmIHByb3RvY29sU3RyaW5n
KQogewogICAgIHN0YXRpYyBjb25zdCBzaXplX3QgY29uc3RhbnRWYWx1ZXNbXSA9IHsKLSAgICAg
ICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpQYXJhbWV0ZXJCdW5kbGU6OkRp
cmVjdGlvbmFsaXR5OjpMVFIsCi0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6
VGVzdDo6UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eTo6UlRMLAorICAgICAgICAoc2l6
ZV90KVByb3RvY29sOjpUZXN0OjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5OjpMVFIs
CisgICAgICAgIChzaXplX3QpUHJvdG9jb2w6OlRlc3Q6OlBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0
aW9uYWxpdHk6OlJUTCwKICAgICB9OwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgMjsgKytp
KQogICAgICAgICBpZiAocHJvdG9jb2xTdHJpbmcgPT0gZW51bV9jb25zdGFudF92YWx1ZXNbY29u
c3RhbnRWYWx1ZXNbaV1dKQotICAgICAgICAgICAgcmV0dXJuIChJbnNwZWN0b3I6OlByb3RvY29s
OjpUZXN0OjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5KWNvbnN0YW50VmFsdWVzW2ld
OworICAgICAgICAgICAgcmV0dXJuIChQcm90b2NvbDo6VGVzdDo6UGFyYW1ldGVyQnVuZGxlOjpE
aXJlY3Rpb25hbGl0eSljb25zdGFudFZhbHVlc1tpXTsKIAogICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uLXJlc3Vs
dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3Rl
ZC90eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24tcmVzdWx0CmluZGV4IDI2Yjc1MGM2
NmIyMDFiMGQ0ZWNiZjJmMzc0OGFiOWY0MDMwOWE5ZWMuLjRkZTA0YWI0YjZkOTFkYzk3ZjAwNjM1
OWE4ZDZjNzY4MGQ5MmYzN2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3Rz
Lmpzb24tcmVzdWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9leHBlY3RlZC90eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24tcmVzdWx0
CkBAIC02OSw3ICs2OSw3IEBAIEluc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIlRlc3Qi
LCBudWxsKTsKIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQog
Ci0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xP
YmplY3RzLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXIuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRl
ci5oPgogCkBAIC0xMjUsMTEgKzEyNSwxNCBAQCBwcml2YXRlOgogCiAjaW5jbHVkZSAiVGVzdFBy
b3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8dHVwbGU+CisjaW5jbHVkZSA8d3RmL0V4cGVjdGVk
Lmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCi10eXBlZGVmIFN0cmluZyBFcnJvclN0
cmluZzsKKwogCiAKIApAQCAtMTcwLDkgKzE3Myw3IEBAIHR5cGVkZWYgU3RyaW5nIEVycm9yU3Ry
aW5nOwogI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKIAogI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0pT
T05WYWx1ZXMuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3
dGYvdGV4dC9DU3RyaW5nLmg+CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQ
QVRDSEVSUykKICNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCkBA
IC0yMjAsNiArMjIxLDcgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKICNpbmNsdWRlICJUZXN0
UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRl
IDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFt
ZXNwYWNlIEluc3BlY3RvciB7CkBAIC0yNjMsNyArMjY1LDYgQEAgY2xhc3MgRnJvbnRlbmRSb3V0
ZXI7CiAjaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKIAogI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3Rl
eHQvQ1N0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtMzA0LDcgKzMwNSw5
IEBAIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2Vy
dGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRp
b25hbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5z
cGVjdG9yIHsKIApAQCAtMzQ2LDcgKzM0OSw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFN0cmlu
ZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShUIGVudW1WYWx1ZSkKIG5hbWVzcGFjZSBUZXN0IHsKIAog
LyogQSBkdW1teSB0eXBlIHRoYXQgcmVxdWlyZXMgcnVudGltZSBjYXN0cywgYW5kIGZvcmNlcyBu
b24tcHJpbWl0aXZlIHJlZmVyZW5jZWQgdHlwZXMgdG8gYWxzbyBlbWl0IHJ1bnRpbWUgY2FzdCBo
ZWxwZXJzLiAqLwotY2xhc3MgVHlwZU5lZWRpbmdDYXN0IDogcHVibGljIEpTT046Ok9iamVjdEJh
c2UgeworY2xhc3MgVHlwZU5lZWRpbmdDYXN0IGZpbmFsIDogcHVibGljIEpTT046Ok9iamVjdEJh
c2UgewogcHVibGljOgogICAgIGVudW0gewogICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCkBAIC0z
NzYsMzggKzM3OSwzOCBAQCBwdWJsaWM6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBUeXBlTmVlZGlu
Z0Nhc3Q7CiAgICAgcHVibGljOgogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBTdHJpbmdTZXQ+
JiBzZXRTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8
IFN0cmluZ1NldD4mIHNldFN0cmluZyhjb25zdCBTdHJpbmcmIGluX3N0cmluZykKICAgICAgICAg
ewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFN0cmluZ1NldCksIHByb3Bl
cnR5X3N0cmluZ19hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5n
KCJzdHJpbmciX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInN0
cmluZyJfcywgaW5fc3RyaW5nKTsKICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8U3RyaW5n
U2V0PigpOwogICAgICAgICB9CiAKLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IE51bWJlclNldD4m
IHNldE51bWJlcihpbnQgdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBOdW1iZXJTZXQ+
JiBzZXROdW1iZXIoaW50IGluX251bWJlcikKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoIShTVEFURSAmIE51bWJlclNldCksIHByb3BlcnR5X251bWJlcl9hbHJlYWR5X3Nl
dCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0SW50ZWdlcigibnVtYmVyIl9zLCB2YWx1ZSk7
CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0SW50ZWdlcigibnVtYmVyIl9zLCBpbl9udW1iZXIp
OwogICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxOdW1iZXJTZXQ+KCk7CiAgICAgICAgIH0K
IAotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQW5pbWFsc1NldD4mIHNldEFuaW1hbHMoSW5zcGVj
dG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFscyB2YWx1ZSkKKyAgICAgICAgQnVpbGRl
cjxTVEFURSB8IEFuaW1hbHNTZXQ+JiBzZXRBbmltYWxzKFByb3RvY29sOjpUZXN0OjpDYXN0ZWRB
bmltYWxzIGluX2FuaW1hbHMpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KCEoU1RBVEUgJiBBbmltYWxzU2V0KSwgcHJvcGVydHlfYW5pbWFsc19hbHJlYWR5X3NldCk7Ci0g
ICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJhbmltYWxzIl9zLCBJbnNwZWN0b3I6OlBy
b3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUodmFsdWUpKTsKKyAgICAg
ICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoImFuaW1hbHMiX3MsIFByb3RvY29sOjpUZXN0SGVs
cGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUoaW5fYW5pbWFscykpOwogICAgICAgICAgICAgcmV0
dXJuIGNhc3RTdGF0ZTxBbmltYWxzU2V0PigpOwogICAgICAgICB9CiAKLSAgICAgICAgQnVpbGRl
cjxTVEFURSB8IElkU2V0PiYgc2V0SWQoaW50IHZhbHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRF
IHwgSWRTZXQ+JiBzZXRJZChpbnQgaW5faWQpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKCEoU1RBVEUgJiBJZFNldCksIHByb3BlcnR5X2lkX2FscmVhZHlfc2V0KTsKLSAg
ICAgICAgICAgIG1fcmVzdWx0LT5zZXRJbnRlZ2VyKCJpZCJfcywgdmFsdWUpOworICAgICAgICAg
ICAgbV9yZXN1bHQtPnNldEludGVnZXIoImlkIl9zLCBpbl9pZCk7CiAgICAgICAgICAgICByZXR1
cm4gY2FzdFN0YXRlPElkU2V0PigpOwogICAgICAgICB9CiAKLSAgICAgICAgQnVpbGRlcjxTVEFU
RSB8IFRyZWVTZXQ+JiBzZXRUcmVlKFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpS
ZWN1cnNpdmVPYmplY3QxPiB2YWx1ZSkKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IFRyZWVTZXQ+
JiBzZXRUcmVlKFJlZjxQcm90b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0MT4mJiBpbl90cmVl
KQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVHJlZVNl
dCksIHByb3BlcnR5X3RyZWVfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNl
dE9iamVjdCgidHJlZSJfcywgdmFsdWUpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldE9iamVj
dCgidHJlZSJfcywgV1RGTW92ZShpbl90cmVlKSk7CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0
YXRlPFRyZWVTZXQ+KCk7CiAgICAgICAgIH0KIApAQCAtNDUyLDcgKzQ1NSw3IEBAIGVudW0gY2xh
c3MgQ2FzdGVkQW5pbWFscyB7CiAgICAgRmxhbWluZ29zID0gMywKIH07IC8vIGVudW0gY2xhc3Mg
Q2FzdGVkQW5pbWFscwogCi1jbGFzcyBSZWN1cnNpdmVPYmplY3QxIDogcHVibGljIEpTT046Ok9i
amVjdEJhc2UgeworY2xhc3MgUmVjdXJzaXZlT2JqZWN0MSBmaW5hbCA6IHB1YmxpYyBKU09OOjpP
YmplY3RCYXNlIHsKIHB1YmxpYzoKICAgICBlbnVtIHsKICAgICAgICAgTm9GaWVsZHNTZXQgPSAw
LApAQCAtNDk4LDEzICs1MDEsMTMgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gQnVpbGRlcjxO
b0ZpZWxkc1NldD4oSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSk7CiAgICAgfQogCi0gICAgdm9pZCBz
ZXRPYmooUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDI+
IHZhbHVlKQorICAgIHZvaWQgc2V0T2JqKFJlZjxQcm90b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2Jq
ZWN0Mj4mJiBpbl9vcHRfb2JqKQogICAgIHsKLSAgICAgICAgSlNPTjo6T2JqZWN0QmFzZTo6c2V0
T2JqZWN0KCJvYmoiX3MsIFdURk1vdmUodmFsdWUpKTsKKyAgICAgICAgSlNPTjo6T2JqZWN0QmFz
ZTo6c2V0T2JqZWN0KCJvYmoiX3MsIFdURk1vdmUoaW5fb3B0X29iaikpOwogICAgIH0KIH07CiAK
LWNsYXNzIFJlY3Vyc2l2ZU9iamVjdDIgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7CitjbGFz
cyBSZWN1cnNpdmVPYmplY3QyIGZpbmFsIDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgewogcHVi
bGljOgogICAgIGVudW0gewogICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCkBAIC01NTAsMjUgKzU1
MywyNSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihKU09O
OjpPYmplY3Q6OmNyZWF0ZSgpKTsKICAgICB9CiAKLSAgICB2b2lkIHNldE9iaihSZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0MT4gdmFsdWUpCisgICAgdm9p
ZCBzZXRPYmooUmVmPFByb3RvY29sOjpUZXN0OjpSZWN1cnNpdmVPYmplY3QxPiYmIGluX29wdF9v
YmopCiAgICAgewotICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXRPYmplY3QoIm9iaiJfcywg
V1RGTW92ZSh2YWx1ZSkpOworICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXRPYmplY3QoIm9i
aiJfcywgV1RGTW92ZShpbl9vcHRfb2JqKSk7CiAgICAgfQogfTsKIAogfSAvLyBUZXN0CiAKLXRl
bXBsYXRlPD4gc3RydWN0IEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6
Q2FzdGVkQW5pbWFscz4gewordGVtcGxhdGU8PiBzdHJ1Y3QgQmluZGluZ1RyYWl0czxQcm90b2Nv
bDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0PiB7CitzdGF0aWMgUmVmPFByb3RvY29sOjpUZXN0OjpU
eXBlTmVlZGluZ0Nhc3Q+IHJ1bnRpbWVDYXN0KFJlZjxKU09OOjpWYWx1ZT4mJiB2YWx1ZSk7CiBz
dGF0aWMgdm9pZCBhc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShKU09OOjpWYWx1ZSopOwogfTsK
LXRlbXBsYXRlPD4gc3RydWN0IEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVz
dDo6VHlwZU5lZWRpbmdDYXN0PiB7Ci1zdGF0aWMgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdD4gcnVudGltZUNhc3QoUmVmUHRyPEpTT046OlZhbHVlPiYm
IHZhbHVlKTsKK3RlbXBsYXRlPD4gc3RydWN0IEJpbmRpbmdUcmFpdHM8UHJvdG9jb2w6OlRlc3Q6
OkNhc3RlZEFuaW1hbHM+IHsKIHN0YXRpYyB2b2lkIGFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBl
KEpTT046OlZhbHVlKik7CiB9OwotdGVtcGxhdGU8PiBzdHJ1Y3QgQmluZGluZ1RyYWl0czxJbnNw
ZWN0b3I6OlByb3RvY29sOjpUZXN0OjpSZWN1cnNpdmVPYmplY3QxPiB7Cit0ZW1wbGF0ZTw+IHN0
cnVjdCBCaW5kaW5nVHJhaXRzPFByb3RvY29sOjpUZXN0OjpSZWN1cnNpdmVPYmplY3QxPiB7CiBz
dGF0aWMgdm9pZCBhc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShKU09OOjpWYWx1ZSopOwogfTsK
LXRlbXBsYXRlPD4gc3RydWN0IEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVz
dDo6UmVjdXJzaXZlT2JqZWN0Mj4gewordGVtcGxhdGU8PiBzdHJ1Y3QgQmluZGluZ1RyYWl0czxQ
cm90b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0Mj4gewogc3RhdGljIHZvaWQgYXNzZXJ0VmFs
dWVIYXNFeHBlY3RlZFR5cGUoSlNPTjo6VmFsdWUqKTsKIH07CiAKQEAgLTU3OSw5ICs1ODIsOSBA
QCBPcHRpb25hbDxQcm90b2NvbEVudW1UeXBlPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmcoY29u
c3QgU3RyaW5nJik7CiAKIC8vIEVudW1zIGluIHRoZSAnVGVzdCcgRG9tYWluCiB0ZW1wbGF0ZTw+
Ci1PcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpVbmNhc3RlZEFuaW1hbHM+IHBh
cnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpVbmNhc3Rl
ZEFuaW1hbHM+KGNvbnN0IFN0cmluZyYpOworT3B0aW9uYWw8UHJvdG9jb2w6OlRlc3Q6OlVuY2Fz
dGVkQW5pbWFscz4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPFByb3RvY29sOjpUZXN0OjpVbmNh
c3RlZEFuaW1hbHM+KGNvbnN0IFN0cmluZyYpOwogdGVtcGxhdGU8PgotT3B0aW9uYWw8SW5zcGVj
dG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFscz4gcGFyc2VFbnVtVmFsdWVGcm9tU3Ry
aW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM+KGNvbnN0IFN0cmlu
ZyYpOworT3B0aW9uYWw8UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM+IHBhcnNlRW51bVZh
bHVlRnJvbVN0cmluZzxQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFscz4oY29uc3QgU3RyaW5n
Jik7CiAKIH0gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCiAKQEAgLTYzNSw4ICs2MzgsNyBAQCBz
dHJ1Y3QgRGVmYXVsdEhhc2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFs
cz4gOiBJbnRIYXNoPEluc3BlY3RvcgogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlRl
c3RQcm90b2NvbE9iamVjdHMuaCIKIAotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogCiBu
YW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtNjYxLDMzICs2NjMsMzMgQEAgU3RyaW5nIGdldEVu
dW1Db25zdGFudFZhbHVlKGludCBjb2RlKSB7CiAvLyBFbnVtcyBpbiB0aGUgJ1Rlc3QnIERvbWFp
bgogCiB0ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpVbmNh
c3RlZEFuaW1hbHM+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29s
OjpUZXN0OjpVbmNhc3RlZEFuaW1hbHM+KGNvbnN0IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcpCitP
cHRpb25hbDxQcm90b2NvbDo6VGVzdDo6VW5jYXN0ZWRBbmltYWxzPiBwYXJzZUVudW1WYWx1ZUZy
b21TdHJpbmc8UHJvdG9jb2w6OlRlc3Q6OlVuY2FzdGVkQW5pbWFscz4oY29uc3QgU3RyaW5nJiBw
cm90b2NvbFN0cmluZykKIHsKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNvbnN0YW50VmFsdWVz
W10gPSB7Ci0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VW5jYXN0
ZWRBbmltYWxzOjpQaWdzLAotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlRl
c3Q6OlVuY2FzdGVkQW5pbWFsczo6Q293cywKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlBy
b3RvY29sOjpUZXN0OjpVbmNhc3RlZEFuaW1hbHM6OkNhdHMsCi0gICAgICAgIChzaXplX3QpSW5z
cGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VW5jYXN0ZWRBbmltYWxzOjpIZW5zLAorICAgICAgICAo
c2l6ZV90KVByb3RvY29sOjpUZXN0OjpVbmNhc3RlZEFuaW1hbHM6OlBpZ3MsCisgICAgICAgIChz
aXplX3QpUHJvdG9jb2w6OlRlc3Q6OlVuY2FzdGVkQW5pbWFsczo6Q293cywKKyAgICAgICAgKHNp
emVfdClQcm90b2NvbDo6VGVzdDo6VW5jYXN0ZWRBbmltYWxzOjpDYXRzLAorICAgICAgICAoc2l6
ZV90KVByb3RvY29sOjpUZXN0OjpVbmNhc3RlZEFuaW1hbHM6OkhlbnMsCiAgICAgfTsKICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IDQ7ICsraSkKICAgICAgICAgaWYgKHByb3RvY29sU3RyaW5n
ID09IGVudW1fY29uc3RhbnRfdmFsdWVzW2NvbnN0YW50VmFsdWVzW2ldXSkKLSAgICAgICAgICAg
IHJldHVybiAoSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VW5jYXN0ZWRBbmltYWxzKWNvbnN0
YW50VmFsdWVzW2ldOworICAgICAgICAgICAgcmV0dXJuIChQcm90b2NvbDo6VGVzdDo6VW5jYXN0
ZWRBbmltYWxzKWNvbnN0YW50VmFsdWVzW2ldOwogCiAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
IH0KIAogdGVtcGxhdGU8PgotT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2Fz
dGVkQW5pbWFscz4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlRlc3Q6OkNhc3RlZEFuaW1hbHM+KGNvbnN0IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcpCitPcHRp
b25hbDxQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFscz4gcGFyc2VFbnVtVmFsdWVGcm9tU3Ry
aW5nPFByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzPihjb25zdCBTdHJpbmcmIHByb3RvY29s
U3RyaW5nKQogewogICAgIHN0YXRpYyBjb25zdCBzaXplX3QgY29uc3RhbnRWYWx1ZXNbXSA9IHsK
LSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxz
OjpEdWNrcywKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0
ZWRBbmltYWxzOjpIZW5zLAotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlRl
c3Q6OkNhc3RlZEFuaW1hbHM6OkNyb3dzLAotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJv
dG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM6OkZsYW1pbmdvcywKKyAgICAgICAgKHNpemVfdClQ
cm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFsczo6RHVja3MsCisgICAgICAgIChzaXplX3QpUHJv
dG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM6OkhlbnMsCisgICAgICAgIChzaXplX3QpUHJvdG9j
b2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM6OkNyb3dzLAorICAgICAgICAoc2l6ZV90KVByb3RvY29s
OjpUZXN0OjpDYXN0ZWRBbmltYWxzOjpGbGFtaW5nb3MsCiAgICAgfTsKICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IDQ7ICsraSkKICAgICAgICAgaWYgKHByb3RvY29sU3RyaW5nID09IGVudW1f
Y29uc3RhbnRfdmFsdWVzW2NvbnN0YW50VmFsdWVzW2ldXSkKLSAgICAgICAgICAgIHJldHVybiAo
SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFscyljb25zdGFudFZhbHVlc1tp
XTsKKyAgICAgICAgICAgIHJldHVybiAoUHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHMpY29u
c3RhbnRWYWx1ZXNbaV07CiAKICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQpAQCAtNjk2LDEx
NSArNjk4LDEwMSBAQCBPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRB
bmltYWxzPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcAogCiAKIAotdm9pZCBCaW5kaW5n
VHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM+Ojphc3NlcnRW
YWx1ZUhhc0V4cGVjdGVkVHlwZShKU09OOjpWYWx1ZSogdmFsdWUpCit2b2lkIEJpbmRpbmdUcmFp
dHM8UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVk
VHlwZShKU09OOjpWYWx1ZSogdmFsdWUpCiB7CisgICAgQVNTRVJUX1VOVVNFRCh2YWx1ZSwgdmFs
dWUpOwogI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgQVNTRVJUX0FSRyh2YWx1ZSwgdmFsdWUpOwot
ICAgIFN0cmluZyByZXN1bHQ7Ci0gICAgYm9vbCBjYXN0U3VjY2VlZGVkID0gdmFsdWUtPmFzU3Ry
aW5nKHJlc3VsdCk7Ci0gICAgQVNTRVJUKGNhc3RTdWNjZWVkZWQpOworICAgIGF1dG8gcmVzdWx0
ID0gdmFsdWUtPmFzU3RyaW5nKCk7CisgICAgQVNTRVJUKHJlc3VsdCk7CiAgICAgQVNTRVJUKHJl
c3VsdCA9PSAiRHVja3MiIHx8IHJlc3VsdCA9PSAiSGVucyIgfHwgcmVzdWx0ID09ICJDcm93cyIg
fHwgcmVzdWx0ID09ICJGbGFtaW5nb3MiKTsKLSNlbHNlIC8vIEFTU0VSVF9FTkFCTEVECi0gICAg
VU5VU0VEX1BBUkFNKHZhbHVlKTsKLSNlbmRpZiAvLyBBU1NFUlRfRU5BQkxFRAorI2VuZGlmCiB9
CiAKLXZvaWQgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpUeXBlTmVl
ZGluZ0Nhc3Q+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShKU09OOjpWYWx1ZSogdmFsdWUp
Cit2b2lkIEJpbmRpbmdUcmFpdHM8UHJvdG9jb2w6OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdD46OmFz
c2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKEpTT046OlZhbHVlKiB2YWx1ZSkKIHsKKyAgICBBU1NF
UlRfVU5VU0VEKHZhbHVlLCB2YWx1ZSk7CiAjaWYgQVNTRVJUX0VOQUJMRUQKLSAgICBBU1NFUlRf
QVJHKHZhbHVlLCB2YWx1ZSk7Ci0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gb2JqZWN0OwotICAg
IGJvb2wgY2FzdFN1Y2NlZWRlZCA9IHZhbHVlLT5hc09iamVjdChvYmplY3QpOwotICAgIEFTU0VS
VF9VTlVTRUQoY2FzdFN1Y2NlZWRlZCwgY2FzdFN1Y2NlZWRlZCk7CisgICAgYXV0byBvYmplY3Qg
PSB2YWx1ZS0+YXNPYmplY3QoKTsKKyAgICBBU1NFUlQob2JqZWN0KTsKICAgICB7CiAgICAgICAg
IGF1dG8gc3RyaW5nUG9zID0gb2JqZWN0LT5maW5kKCJzdHJpbmciX3MpOwogICAgICAgICBBU1NF
UlQoc3RyaW5nUG9zICE9IG9iamVjdC0+ZW5kKCkpOwotICAgICAgICBCaW5kaW5nVHJhaXRzPFN0
cmluZz46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKHN0cmluZ1Bvcy0+dmFsdWUuZ2V0KCkp
OworICAgICAgICBCaW5kaW5nVHJhaXRzPFN0cmluZz46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRU
eXBlKHN0cmluZ1Bvcy0+dmFsdWUucHRyKCkpOwogICAgIH0KICAgICB7CiAgICAgICAgIGF1dG8g
bnVtYmVyUG9zID0gb2JqZWN0LT5maW5kKCJudW1iZXIiX3MpOwogICAgICAgICBBU1NFUlQobnVt
YmVyUG9zICE9IG9iamVjdC0+ZW5kKCkpOwotICAgICAgICBCaW5kaW5nVHJhaXRzPGludD46OmFz
c2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKG51bWJlclBvcy0+dmFsdWUuZ2V0KCkpOworICAgICAg
ICBCaW5kaW5nVHJhaXRzPGludD46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKG51bWJlclBv
cy0+dmFsdWUucHRyKCkpOwogICAgIH0KICAgICB7CiAgICAgICAgIGF1dG8gYW5pbWFsc1BvcyA9
IG9iamVjdC0+ZmluZCgiYW5pbWFscyJfcyk7CiAgICAgICAgIEFTU0VSVChhbmltYWxzUG9zICE9
IG9iamVjdC0+ZW5kKCkpOwotICAgICAgICBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShhbmlt
YWxzUG9zLT52YWx1ZS5nZXQoKSk7CisgICAgICAgIEJpbmRpbmdUcmFpdHM8UHJvdG9jb2w6OlRl
c3Q6OkNhc3RlZEFuaW1hbHM+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShhbmltYWxzUG9z
LT52YWx1ZS5wdHIoKSk7CiAgICAgfQogICAgIHsKICAgICAgICAgYXV0byBpZFBvcyA9IG9iamVj
dC0+ZmluZCgiaWQiX3MpOwogICAgICAgICBBU1NFUlQoaWRQb3MgIT0gb2JqZWN0LT5lbmQoKSk7
Ci0gICAgICAgIEJpbmRpbmdUcmFpdHM8aW50Pjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUo
aWRQb3MtPnZhbHVlLmdldCgpKTsKKyAgICAgICAgQmluZGluZ1RyYWl0czxpbnQ+Ojphc3NlcnRW
YWx1ZUhhc0V4cGVjdGVkVHlwZShpZFBvcy0+dmFsdWUucHRyKCkpOwogICAgIH0KICAgICB7CiAg
ICAgICAgIGF1dG8gdHJlZVBvcyA9IG9iamVjdC0+ZmluZCgidHJlZSJfcyk7CiAgICAgICAgIEFT
U0VSVCh0cmVlUG9zICE9IG9iamVjdC0+ZW5kKCkpOwotICAgICAgICBCaW5kaW5nVHJhaXRzPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDE+Ojphc3NlcnRWYWx1ZUhh
c0V4cGVjdGVkVHlwZSh0cmVlUG9zLT52YWx1ZS5nZXQoKSk7CisgICAgICAgIEJpbmRpbmdUcmFp
dHM8UHJvdG9jb2w6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDE+Ojphc3NlcnRWYWx1ZUhhc0V4cGVj
dGVkVHlwZSh0cmVlUG9zLT52YWx1ZS5wdHIoKSk7CiAgICAgfQogCi0gICAgaW50IGZvdW5kUHJv
cGVydGllc0NvdW50ID0gNTsKKyAgICBzaXplX3QgZm91bmRQcm9wZXJ0aWVzQ291bnQgPSA1Owog
ICAgIGlmIChmb3VuZFByb3BlcnRpZXNDb3VudCAhPSBvYmplY3QtPnNpemUoKSkKICAgICAgICAg
RkFUQUwoIlVuZXhwZWN0ZWQgcHJvcGVydGllcyBpbiBvYmplY3Q6ICVzXG4iLCBvYmplY3QtPnRv
SlNPTlN0cmluZygpLmFzY2lpKCkuZGF0YSgpKTsKLSNlbHNlIC8vIEFTU0VSVF9FTkFCTEVECi0g
ICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKLSNlbmRpZiAvLyBBU1NFUlRfRU5BQkxFRAorI2VuZGlm
CiB9CiAKLVJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3Q+
IEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0
Pjo6cnVudGltZUNhc3QoUmVmUHRyPEpTT046OlZhbHVlPiYmIHZhbHVlKQorUmVmPFByb3RvY29s
OjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3Q+IEJpbmRpbmdUcmFpdHM8UHJvdG9jb2w6OlRlc3Q6OlR5
cGVOZWVkaW5nQ2FzdD46OnJ1bnRpbWVDYXN0KFJlZjxKU09OOjpWYWx1ZT4mJiB2YWx1ZSkKIHsK
LSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiByZXN1bHQ7Ci0gICAgYm9vbCBjYXN0U3VjY2VlZGVk
ID0gdmFsdWUtPmFzT2JqZWN0KHJlc3VsdCk7Ci0gICAgQVNTRVJUX1VOVVNFRChjYXN0U3VjY2Vl
ZGVkLCBjYXN0U3VjY2VlZGVkKTsKLSAgICBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdD46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKHJl
c3VsdC5nZXQoKSk7Ci0gICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdCkgPT0gc2l6ZW9mKEpTT046Ok9iamVjdEJhc2UpLCB0
eXBlX2Nhc3RfcHJvYmxlbSk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PEluc3BlY3Rvcjo6UHJv
dG9jb2w6OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdCo+KHN0YXRpY19jYXN0PEpTT046Ok9iamVjdEJh
c2UqPihyZXN1bHQuZ2V0KCkpKTsKKyAgICBhdXRvIHJlc3VsdCA9IHZhbHVlLT5hc09iamVjdCgp
OworICAgIEJpbmRpbmdUcmFpdHM8UHJvdG9jb2w6OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdD46OmFz
c2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKHJlc3VsdC5nZXQoKSk7CisgICAgQ09NUElMRV9BU1NF
UlQoc2l6ZW9mKFByb3RvY29sOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3QpID09IHNpemVvZihKU09O
OjpPYmplY3RCYXNlKSwgdHlwZV9jYXN0X3Byb2JsZW0pOworICAgIHJldHVybiBzdGF0aWNfcmVm
ZXJlbmNlX2Nhc3Q8UHJvdG9jb2w6OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdD4oc3RhdGljX3JlZmVy
ZW5jZV9jYXN0PEpTT046Ok9iamVjdEJhc2U+KHJlc3VsdC5yZWxlYXNlTm9uTnVsbCgpKSk7CiB9
CiAKIAotdm9pZCBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlJlY3Vy
c2l2ZU9iamVjdDE+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShKU09OOjpWYWx1ZSogdmFs
dWUpCit2b2lkIEJpbmRpbmdUcmFpdHM8UHJvdG9jb2w6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDE+
Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShKU09OOjpWYWx1ZSogdmFsdWUpCiB7CisgICAg
QVNTRVJUX1VOVVNFRCh2YWx1ZSwgdmFsdWUpOwogI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgQVNT
RVJUX0FSRyh2YWx1ZSwgdmFsdWUpOwotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG9iamVjdDsK
LSAgICBib29sIGNhc3RTdWNjZWVkZWQgPSB2YWx1ZS0+YXNPYmplY3Qob2JqZWN0KTsKLSAgICBB
U1NFUlRfVU5VU0VEKGNhc3RTdWNjZWVkZWQsIGNhc3RTdWNjZWVkZWQpOworICAgIGF1dG8gb2Jq
ZWN0ID0gdmFsdWUtPmFzT2JqZWN0KCk7CisgICAgQVNTRVJUKG9iamVjdCk7CiAKLSAgICBpbnQg
Zm91bmRQcm9wZXJ0aWVzQ291bnQgPSAwOworICAgIHNpemVfdCBmb3VuZFByb3BlcnRpZXNDb3Vu
dCA9IDA7CiAgICAgewogICAgICAgICBhdXRvIG9ialBvcyA9IG9iamVjdC0+ZmluZCgib2JqIl9z
KTsKICAgICAgICAgaWYgKG9ialBvcyAhPSBvYmplY3QtPmVuZCgpKSB7Ci0gICAgICAgICAgICBC
aW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDI+
Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShvYmpQb3MtPnZhbHVlLmdldCgpKTsKKyAgICAg
ICAgICAgIEJpbmRpbmdUcmFpdHM8UHJvdG9jb2w6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDI+Ojph
c3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShvYmpQb3MtPnZhbHVlLnB0cigpKTsKICAgICAgICAg
ICAgICsrZm91bmRQcm9wZXJ0aWVzQ291bnQ7CiAgICAgICAgIH0KICAgICB9CiAgICAgaWYgKGZv
dW5kUHJvcGVydGllc0NvdW50ICE9IG9iamVjdC0+c2l6ZSgpKQogICAgICAgICBGQVRBTCgiVW5l
eHBlY3RlZCBwcm9wZXJ0aWVzIGluIG9iamVjdDogJXNcbiIsIG9iamVjdC0+dG9KU09OU3RyaW5n
KCkuYXNjaWkoKS5kYXRhKCkpOwotI2Vsc2UgLy8gQVNTRVJUX0VOQUJMRUQKLSAgICBVTlVTRURf
UEFSQU0odmFsdWUpOwotI2VuZGlmIC8vIEFTU0VSVF9FTkFCTEVECisjZW5kaWYKIH0KIAotdm9p
ZCBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVj
dDI+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShKU09OOjpWYWx1ZSogdmFsdWUpCit2b2lk
IEJpbmRpbmdUcmFpdHM8UHJvdG9jb2w6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDI+Ojphc3NlcnRW
YWx1ZUhhc0V4cGVjdGVkVHlwZShKU09OOjpWYWx1ZSogdmFsdWUpCiB7CisgICAgQVNTRVJUX1VO
VVNFRCh2YWx1ZSwgdmFsdWUpOwogI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgQVNTRVJUX0FSRyh2
YWx1ZSwgdmFsdWUpOwotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG9iamVjdDsKLSAgICBib29s
IGNhc3RTdWNjZWVkZWQgPSB2YWx1ZS0+YXNPYmplY3Qob2JqZWN0KTsKLSAgICBBU1NFUlRfVU5V
U0VEKGNhc3RTdWNjZWVkZWQsIGNhc3RTdWNjZWVkZWQpOworICAgIGF1dG8gb2JqZWN0ID0gdmFs
dWUtPmFzT2JqZWN0KCk7CisgICAgQVNTRVJUKG9iamVjdCk7CiAKLSAgICBpbnQgZm91bmRQcm9w
ZXJ0aWVzQ291bnQgPSAwOworICAgIHNpemVfdCBmb3VuZFByb3BlcnRpZXNDb3VudCA9IDA7CiAg
ICAgewogICAgICAgICBhdXRvIG9ialBvcyA9IG9iamVjdC0+ZmluZCgib2JqIl9zKTsKICAgICAg
ICAgaWYgKG9ialBvcyAhPSBvYmplY3QtPmVuZCgpKSB7Ci0gICAgICAgICAgICBCaW5kaW5nVHJh
aXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDE+Ojphc3NlcnRW
YWx1ZUhhc0V4cGVjdGVkVHlwZShvYmpQb3MtPnZhbHVlLmdldCgpKTsKKyAgICAgICAgICAgIEJp
bmRpbmdUcmFpdHM8UHJvdG9jb2w6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDE+Ojphc3NlcnRWYWx1
ZUhhc0V4cGVjdGVkVHlwZShvYmpQb3MtPnZhbHVlLnB0cigpKTsKICAgICAgICAgICAgICsrZm91
bmRQcm9wZXJ0aWVzQ291bnQ7CiAgICAgICAgIH0KICAgICB9CiAgICAgaWYgKGZvdW5kUHJvcGVy
dGllc0NvdW50ICE9IG9iamVjdC0+c2l6ZSgpKQogICAgICAgICBGQVRBTCgiVW5leHBlY3RlZCBw
cm9wZXJ0aWVzIGluIG9iamVjdDogJXNcbiIsIG9iamVjdC0+dG9KU09OU3RyaW5nKCkuYXNjaWko
KS5kYXRhKCkpOwotI2Vsc2UgLy8gQVNTRVJUX0VOQUJMRUQKLSAgICBVTlVTRURfUEFSQU0odmFs
dWUpOwotI2VuZGlmIC8vIEFTU0VSVF9FTkFCTEVECisjZW5kaWYKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgUHJvdG9jb2wKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24tcmVz
dWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVj
dGVkL3R5cGUtd2l0aC1vcGVuLXBhcmFtZXRlcnMuanNvbi1yZXN1bHQKaW5kZXggN2Q1Nzc2MmE4
ZmY4YmU0YTlhZTQ5ZGM5ZWY1NDdiOWQzMjEzZGM3Yi4uYjk4NGNiMDdjMmIzNzU1MWExZjc3YzIz
YjA5NDA2MjI5MTZlZTVlMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtd2l0aC1vcGVuLXBhcmFtZXRlcnMuanNv
bi1yZXN1bHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2V4cGVjdGVkL3R5cGUtd2l0aC1vcGVuLXBhcmFtZXRlcnMuanNvbi1yZXN1bHQKQEAgLTYz
LDcgKzYzLDcgQEAKIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJT
KQogCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9j
b2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXIuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJv
dXRlci5oPgogCkBAIC0xMTksMTEgKzExOSwxNCBAQCBwcml2YXRlOgogCiAjaW5jbHVkZSAiVGVz
dFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8dHVwbGU+CisjaW5jbHVkZSA8d3RmL0V4cGVj
dGVkLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCi10eXBlZGVmIFN0cmluZyBFcnJv
clN0cmluZzsKKwogCiAKIApAQCAtMTY0LDkgKzE2Nyw3IEBAIHR5cGVkZWYgU3RyaW5nIEVycm9y
U3RyaW5nOwogI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKIAogI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3Rm
L0pTT05WYWx1ZXMuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9E
SVNQQVRDSEVSUykKICNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgi
CkBAIC0yMTQsNiArMjE1LDcgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKICNpbmNsdWRlICJU
ZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNs
dWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAog
bmFtZXNwYWNlIEluc3BlY3RvciB7CkBAIC0yNTcsNyArMjU5LDYgQEAgY2xhc3MgRnJvbnRlbmRS
b3V0ZXI7CiAjaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKIAogI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3Rm
L3RleHQvQ1N0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtMjk4LDcgKzI5
OSw5IEBAIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL0Fz
c2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9P
cHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKIApAQCAtMzIwLDcgKzMyMyw3IEBAIGNsYXNzIE9wZW5QYXJhbWV0ZXJzOwog
CiBuYW1lc3BhY2UgVGVzdCB7CiAKLWNsYXNzIE5vT3BlblBhcmFtZXRlcnMgOiBwdWJsaWMgSlNP
Tjo6T2JqZWN0QmFzZSB7CitjbGFzcyBOb09wZW5QYXJhbWV0ZXJzIGZpbmFsIDogcHVibGljIEpT
T046Ok9iamVjdEJhc2UgewogcHVibGljOgogICAgIGVudW0gewogICAgICAgICBOb0ZpZWxkc1Nl
dCA9IDAsCkBAIC0zNDcsMTcgKzM1MCwxNyBAQCBwdWJsaWM6CiAgICAgICAgIGZyaWVuZCBjbGFz
cyBOb09wZW5QYXJhbWV0ZXJzOwogICAgIHB1YmxpYzoKIAotICAgICAgICBCdWlsZGVyPFNUQVRF
IHwgT25lU2V0PiYgc2V0T25lKGRvdWJsZSB2YWx1ZSkKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8
IE9uZVNldD4mIHNldE9uZShkb3VibGUgaW5fb25lKQogICAgICAgICB7CiAgICAgICAgICAgICBD
T01QSUxFX0FTU0VSVCghKFNUQVRFICYgT25lU2V0KSwgcHJvcGVydHlfb25lX2FscmVhZHlfc2V0
KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXREb3VibGUoIm9uZSJfcywgdmFsdWUpOworICAg
ICAgICAgICAgbV9yZXN1bHQtPnNldERvdWJsZSgib25lIl9zLCBpbl9vbmUpOwogICAgICAgICAg
ICAgcmV0dXJuIGNhc3RTdGF0ZTxPbmVTZXQ+KCk7CiAgICAgICAgIH0KIAotICAgICAgICBCdWls
ZGVyPFNUQVRFIHwgVHdvU2V0PiYgc2V0VHdvKGRvdWJsZSB2YWx1ZSkKKyAgICAgICAgQnVpbGRl
cjxTVEFURSB8IFR3b1NldD4mIHNldFR3byhkb3VibGUgaW5fdHdvKQogICAgICAgICB7CiAgICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVHdvU2V0KSwgcHJvcGVydHlfdHdvX2Fs
cmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXREb3VibGUoInR3byJfcywgdmFs
dWUpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldERvdWJsZSgidHdvIl9zLCBpbl90d28pOwog
ICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxUd29TZXQ+KCk7CiAgICAgICAgIH0KIApAQCAt
Mzg1LDcgKzM4OCw3IEBAIHB1YmxpYzoKICAgICB9CiB9OwogCi1jbGFzcyBPcGVuUGFyYW1ldGVy
cyA6IHB1YmxpYyBKU09OOjpPYmplY3QgeworY2xhc3MgT3BlblBhcmFtZXRlcnMgZmluYWwgOiBw
dWJsaWMgSlNPTjo6T2JqZWN0IHsKIHB1YmxpYzoKICAgICBlbnVtIHsKICAgICAgICAgTm9GaWVs
ZHNTZXQgPSAwLApAQCAtNDEyLDE3ICs0MTUsMTcgQEAgcHVibGljOgogICAgICAgICBmcmllbmQg
Y2xhc3MgT3BlblBhcmFtZXRlcnM7CiAgICAgcHVibGljOgogCi0gICAgICAgIEJ1aWxkZXI8U1RB
VEUgfCBBbHBoYVNldD4mIHNldEFscGhhKGRvdWJsZSB2YWx1ZSkKKyAgICAgICAgQnVpbGRlcjxT
VEFURSB8IEFscGhhU2V0PiYgc2V0QWxwaGEoZG91YmxlIGluX2FscGhhKQogICAgICAgICB7CiAg
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQWxwaGFTZXQpLCBwcm9wZXJ0eV9h
bHBoYV9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0RG91YmxlKCJhbHBo
YSJfcywgdmFsdWUpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldERvdWJsZSgiYWxwaGEiX3Ms
IGluX2FscGhhKTsKICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8QWxwaGFTZXQ+KCk7CiAg
ICAgICAgIH0KIAotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQmV0YVNldD4mIHNldEJldGEoZG91
YmxlIHZhbHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQmV0YVNldD4mIHNldEJldGEoZG91
YmxlIGluX2JldGEpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RB
VEUgJiBCZXRhU2V0KSwgcHJvcGVydHlfYmV0YV9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBt
X3Jlc3VsdC0+c2V0RG91YmxlKCJiZXRhIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICBtX3Jlc3Vs
dC0+c2V0RG91YmxlKCJiZXRhIl9zLCBpbl9iZXRhKTsKICAgICAgICAgICAgIHJldHVybiBjYXN0
U3RhdGU8QmV0YVNldD4oKTsKICAgICAgICAgfQogCkBAIC00NTAsNyArNDUzLDcgQEAgcHVibGlj
OgogICAgIH0KIAogICAgIC8vIFByb3BlcnR5IG5hbWVzIGZvciB0eXBlIGdlbmVyYXRlZCBhcyBv
cGVuLgotICAgIE5vbmUgc3RhdGljIGNvbnN0IGNoYXIqIEFscGhhOworICAgIE5vbmUgc3RhdGlj
IGNvbnN0IGNoYXIqIGFscGhhS2V5OwogfTsKIAogfSAvLyBUZXN0CkBAIC00OTUsMTQgKzQ5OCwx
MyBAQCBwdWJsaWM6CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGVzdFByb3RvY29s
T2JqZWN0cy5oIgogCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3Rl
eHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAKIG5hbWVzcGFjZSBJ
bnNwZWN0b3IgewogCiBuYW1lc3BhY2UgUHJvdG9jb2wgewogCi1jb25zdCBjaGFyKiBJbnNwZWN0
b3I6OlByb3RvY29sOjpUZXN0OjpPcGVuUGFyYW1ldGVyczo6QWxwaGEgPSAiYWxwaGEiOworY29u
c3QgY2hhciogUHJvdG9jb2w6OlRlc3Q6Ok9wZW5QYXJhbWV0ZXJzOjphbHBoYUtleSA9ICJhbHBo
YSI7CiAKIH0gLy8gbmFtZXNwYWNlIFByb3RvY29sCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC92ZXJzaW9uLmpzb24t
cmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4
cGVjdGVkL3ZlcnNpb24uanNvbi1yZXN1bHQKaW5kZXggZWY3NzhhMDZjN2YyNTExZjZjMjM0MTg2
NzI1NTA1NjgzN2ZiZmEzZi4uYzA0YWI1OTczZTc2NjEyMWU2YmU4Njk5OTg1NDFkNWE3MTI3MmU4
ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2V4cGVjdGVkL3ZlcnNpb24uanNvbi1yZXN1bHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3ZlcnNpb24uanNvbi1yZXN1bHQK
QEAgLTY4LDcgKzY4LDcgQEAgSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiVmVyc2lv
bkRvbWFpbiIsIG51bGwpOwogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFU
Q0hFUlMpCiAKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgorI2luY2x1ZGUgIlRlc3RQ
cm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlci5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250
ZW5kUm91dGVyLmg+CiAKQEAgLTEyNCwxMSArMTI0LDE0IEBAIHByaXZhdGU6CiAKICNpbmNsdWRl
ICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx0dXBsZT4KKyNpbmNsdWRlIDx3dGYv
RXhwZWN0ZWQuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKLXR5cGVkZWYgU3RyaW5n
IEVycm9yU3RyaW5nOworCiAKIAogCkBAIC0xNjksOSArMTcyLDcgQEAgdHlwZWRlZiBTdHJpbmcg
RXJyb3JTdHJpbmc7CiAjaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgogCiAjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRl
IDx3dGYvSlNPTlZhbHVlcy5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJO
QVRFX0RJU1BBVENIRVJTKQogI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hl
cnMuaCIKQEAgLTIxOSw2ICsyMjAsNyBAQCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAogI2luY2x1
ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgor
I2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKQEAgLTI2Miw3ICsyNjQsNiBAQCBjbGFzcyBGcm9u
dGVuZFJvdXRlcjsKICNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgogCiAjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC0zMDMs
NyArMzA0LDkgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiAjcHJhZ21hIG9uY2UKIAogI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KLSNpbmNsdWRlIDx3
dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8
d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVz
cGFjZSBJbnNwZWN0b3IgewogCkBAIC0zNjIsOCArMzY1LDcgQEAgc3RhdGljIGNvbnN0ZXhwciB1
bnNpZ25lZCBWRVJTSU9OID0gNDI7CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGVz
dFByb3RvY29sT2JqZWN0cy5oIgogCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVk
ZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAKIG5h
bWVzcGFjZSBJbnNwZWN0b3IgewogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9UeXBlU2V0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVT
ZXQuY3BwCmluZGV4IGQ5OWZmMzExZGI3NTU0YTJiMDEzMGQyNzIyNDljN2IwNGQwNWI4YTUuLjY1
ZWEzNTQ1OWM0NDk3ODQyYjU4YWEzYjRkMmMxNmFiY2M5ZmUxNTYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVTZXQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1R5cGVTZXQuY3BwCkBAIC01MDEsMTQgKzUwMSwxNCBAQCBSZWY8SW5z
cGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6U3RydWN0dXJlRGVzY3JpcHRpb24+IFN0cnVjdHVy
ZVNoYXBlOjppbnNwZWN0bwogICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGZpZWxkIDogY3VycmVu
dFNoYXBlLT5tX29wdGlvbmFsRmllbGRzKQogICAgICAgICAgICAgb3B0aW9uYWxGaWVsZHMtPmFk
ZEl0ZW0oZmllbGQuZ2V0KCkpOwogCi0gICAgICAgIGN1cnJlbnRPYmplY3QtPnNldEZpZWxkcygm
ZmllbGRzLmdldCgpKTsKLSAgICAgICAgY3VycmVudE9iamVjdC0+c2V0T3B0aW9uYWxGaWVsZHMo
Jm9wdGlvbmFsRmllbGRzLmdldCgpKTsKKyAgICAgICAgY3VycmVudE9iamVjdC0+c2V0RmllbGRz
KFdURk1vdmUoZmllbGRzKSk7CisgICAgICAgIGN1cnJlbnRPYmplY3QtPnNldE9wdGlvbmFsRmll
bGRzKFdURk1vdmUob3B0aW9uYWxGaWVsZHMpKTsKICAgICAgICAgY3VycmVudE9iamVjdC0+c2V0
Q29uc3RydWN0b3JOYW1lKGN1cnJlbnRTaGFwZS0+bV9jb25zdHJ1Y3Rvck5hbWUpOwogICAgICAg
ICBjdXJyZW50T2JqZWN0LT5zZXRJc0ltcHJlY2lzZShjdXJyZW50U2hhcGUtPm1faXNJbkRpY3Rp
b25hcnlNb2RlKTsKIAogICAgICAgICBpZiAoY3VycmVudFNoYXBlLT5tX3Byb3RvKSB7CiAgICAg
ICAgICAgICBhdXRvIG5leHRPYmplY3QgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpT
dHJ1Y3R1cmVEZXNjcmlwdGlvbjo6Y3JlYXRlKCkucmVsZWFzZSgpOwotICAgICAgICAgICAgY3Vy
cmVudE9iamVjdC0+c2V0UHJvdG90eXBlU3RydWN0dXJlKCZuZXh0T2JqZWN0LmdldCgpKTsKKyAg
ICAgICAgICAgIGN1cnJlbnRPYmplY3QtPnNldFByb3RvdHlwZVN0cnVjdHVyZShuZXh0T2JqZWN0
LmNvcHlSZWYoKSk7CiAgICAgICAgICAgICBjdXJyZW50T2JqZWN0ID0gV1RGTW92ZShuZXh0T2Jq
ZWN0KTsKICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9KU09OVmFsdWVz
LmNwcCBiL1NvdXJjZS9XVEYvd3RmL0pTT05WYWx1ZXMuY3BwCmluZGV4IDQwNTIwNzhmM2Y5N2My
ZTkwZmFjZDA1MWRjMTkyZWM2NTI2MTRjMzQuLjQ5YjNmMGNhMmZmMWY4ZTY5ZDBjNGY0M2FhYWNm
Y2M2YWJkYTZiNjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0pTT05WYWx1ZXMuY3BwCisr
KyBiL1NvdXJjZS9XVEYvd3RmL0pTT05WYWx1ZXMuY3BwCkBAIC01Nyw5ICs1Nyw5IEBAIGVudW0g
Y2xhc3MgVG9rZW4gewogICAgIEludmFsaWQsCiB9OwogCi1jb25zdCBjaGFyKiBjb25zdCBudWxs
U3RyaW5nID0gIm51bGwiOwotY29uc3QgY2hhciogY29uc3QgdHJ1ZVN0cmluZyA9ICJ0cnVlIjsK
LWNvbnN0IGNoYXIqIGNvbnN0IGZhbHNlU3RyaW5nID0gImZhbHNlIjsKK2NvbnN0IGNoYXIqIGNv
bnN0IG51bGxUb2tlbiA9ICJudWxsIjsKK2NvbnN0IGNoYXIqIGNvbnN0IHRydWVUb2tlbiA9ICJ0
cnVlIjsKK2NvbnN0IGNoYXIqIGNvbnN0IGZhbHNlVG9rZW4gPSAiZmFsc2UiOwogCiBib29sIHBh
cnNlQ29uc3RUb2tlbihjb25zdCBVQ2hhciogc3RhcnQsIGNvbnN0IFVDaGFyKiBlbmQsIGNvbnN0
IFVDaGFyKiogdG9rZW5FbmQsIGNvbnN0IGNoYXIqIHRva2VuKQogewpAQCAtMjA5LDE1ICsyMDks
MTUgQEAgVG9rZW4gcGFyc2VUb2tlbihjb25zdCBVQ2hhciogc3RhcnQsIGNvbnN0IFVDaGFyKiBl
bmQsIGNvbnN0IFVDaGFyKiogdG9rZW5TdGFydCwKIAogICAgIHN3aXRjaCAoKnN0YXJ0KSB7CiAg
ICAgY2FzZSAnbic6Ci0gICAgICAgIGlmIChwYXJzZUNvbnN0VG9rZW4oc3RhcnQsIGVuZCwgdG9r
ZW5FbmQsIG51bGxTdHJpbmcpKQorICAgICAgICBpZiAocGFyc2VDb25zdFRva2VuKHN0YXJ0LCBl
bmQsIHRva2VuRW5kLCBudWxsVG9rZW4pKQogICAgICAgICAgICAgcmV0dXJuIFRva2VuOjpOdWxs
OwogICAgICAgICBicmVhazsKICAgICBjYXNlICd0JzoKLSAgICAgICAgaWYgKHBhcnNlQ29uc3RU
b2tlbihzdGFydCwgZW5kLCB0b2tlbkVuZCwgdHJ1ZVN0cmluZykpCisgICAgICAgIGlmIChwYXJz
ZUNvbnN0VG9rZW4oc3RhcnQsIGVuZCwgdG9rZW5FbmQsIHRydWVUb2tlbikpCiAgICAgICAgICAg
ICByZXR1cm4gVG9rZW46OkJvb2xUcnVlOwogICAgICAgICBicmVhazsKICAgICBjYXNlICdmJzoK
LSAgICAgICAgaWYgKHBhcnNlQ29uc3RUb2tlbihzdGFydCwgZW5kLCB0b2tlbkVuZCwgZmFsc2VT
dHJpbmcpKQorICAgICAgICBpZiAocGFyc2VDb25zdFRva2VuKHN0YXJ0LCBlbmQsIHRva2VuRW5k
LCBmYWxzZVRva2VuKSkKICAgICAgICAgICAgIHJldHVybiBUb2tlbjo6Qm9vbEZhbHNlOwogICAg
ICAgICBicmVhazsKICAgICBjYXNlICdbJzoKQEAgLTM4MCw3ICszODAsNyBAQCBSZWZQdHI8SlNP
Tjo6VmFsdWU+IGJ1aWxkVmFsdWUoY29uc3QgVUNoYXIqIHN0YXJ0LCBjb25zdCBVQ2hhciogZW5k
LCBjb25zdCBVQ2hhcgogICAgICAgICAgICAgUmVmUHRyPEpTT046OlZhbHVlPiBhcnJheU5vZGUg
PSBidWlsZFZhbHVlKHN0YXJ0LCBlbmQsICZ0b2tlbkVuZCwgZGVwdGggKyAxKTsKICAgICAgICAg
ICAgIGlmICghYXJyYXlOb2RlKQogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAg
ICAgICAgICAgYXJyYXktPnB1c2hWYWx1ZShXVEZNb3ZlKGFycmF5Tm9kZSkpOworICAgICAgICAg
ICAgYXJyYXktPnB1c2hWYWx1ZShhcnJheU5vZGUucmVsZWFzZU5vbk51bGwoKSk7CiAKICAgICAg
ICAgICAgIC8vIEFmdGVyIGEgbGlzdCB2YWx1ZSwgd2UgZXhwZWN0IGEgY29tbWEgb3IgdGhlIGVu
ZCBvZiB0aGUgbGlzdC4KICAgICAgICAgICAgIHN0YXJ0ID0gdG9rZW5FbmQ7CkBAIC00MjAsNyAr
NDIwLDcgQEAgUmVmUHRyPEpTT046OlZhbHVlPiBidWlsZFZhbHVlKGNvbnN0IFVDaGFyKiBzdGFy
dCwgY29uc3QgVUNoYXIqIGVuZCwgY29uc3QgVUNoYXIKICAgICAgICAgICAgIFJlZlB0cjxKU09O
OjpWYWx1ZT4gdmFsdWUgPSBidWlsZFZhbHVlKHN0YXJ0LCBlbmQsICZ0b2tlbkVuZCwgZGVwdGgg
KyAxKTsKICAgICAgICAgICAgIGlmICghdmFsdWUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0gICAgICAgICAgICBvYmplY3QtPnNldFZhbHVlKGtleSwgV1RGTW92ZSh2YWx1ZSkp
OworICAgICAgICAgICAgb2JqZWN0LT5zZXRWYWx1ZShrZXksIHZhbHVlLnJlbGVhc2VOb25OdWxs
KCkpOwogICAgICAgICAgICAgc3RhcnQgPSB0b2tlbkVuZDsKIAogICAgICAgICAgICAgLy8gQWZ0
ZXIgYSBrZXkvdmFsdWUgcGFpciwgd2UgZXhwZWN0IGEgY29tbWEgb3IgdGhlIGVuZCBvZiB0aGUK
QEAgLTQ4OSw0MCArNDg5LDM4IEBAIFJlZjxWYWx1ZT4gVmFsdWU6OmNyZWF0ZShjb25zdCBjaGFy
KiB2YWx1ZSkKICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBWYWx1ZSh2YWx1ZSkpOwogfQogCi1i
b29sIFZhbHVlOjphc1ZhbHVlKFJlZlB0cjxWYWx1ZT4mIHZhbHVlKQorUmVmUHRyPFZhbHVlPiBW
YWx1ZTo6YXNWYWx1ZSgpCiB7Ci0gICAgdmFsdWUgPSB0aGlzOwotICAgIHJldHVybiB0cnVlOwor
ICAgIHJldHVybiB0aGlzOwogfQogCi1ib29sIFZhbHVlOjphc09iamVjdChSZWZQdHI8T2JqZWN0
PiYpCitSZWZQdHI8T2JqZWN0PiBWYWx1ZTo6YXNPYmplY3QoKQogewotICAgIHJldHVybiBmYWxz
ZTsKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotYm9vbCBWYWx1ZTo6YXNBcnJheShSZWZQdHI8
QXJyYXk+JikKK1JlZlB0cjxBcnJheT4gVmFsdWU6OmFzQXJyYXkoKQogewotICAgIHJldHVybiBm
YWxzZTsKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotYm9vbCBWYWx1ZTo6cGFyc2VKU09OKGNv
bnN0IFN0cmluZyYganNvbklucHV0LCBSZWZQdHI8VmFsdWU+JiBvdXRwdXQpCitSZWZQdHI8VmFs
dWU+IFZhbHVlOjpwYXJzZUpTT04oY29uc3QgU3RyaW5nJiBqc29uKQogewogICAgIC8vIEZJWE1F
OiBUaGlzIHdob2xlIGZpbGUgc2hvdWxkIGp1c3QgdXNlIFN0cmluZ1ZpZXcgaW5zdGVhZCBvZiBV
Q2hhci9sZW5ndGggYW5kIGF2b2lkIHVwY29udmVydGluZy4KLSAgICBhdXRvIGNoYXJhY3RlcnMg
PSBTdHJpbmdWaWV3KGpzb25JbnB1dCkudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7CisgICAgYXV0
byBjaGFyYWN0ZXJzID0gU3RyaW5nVmlldyhqc29uKS51cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsK
ICAgICBjb25zdCBVQ2hhciogc3RhcnQgPSBjaGFyYWN0ZXJzOwotICAgIGNvbnN0IFVDaGFyKiBl
bmQgPSBzdGFydCArIGpzb25JbnB1dC5sZW5ndGgoKTsKKyAgICBjb25zdCBVQ2hhciogZW5kID0g
c3RhcnQgKyBqc29uLmxlbmd0aCgpOwogICAgIGNvbnN0IFVDaGFyKiB0b2tlbkVuZDsKICAgICBh
dXRvIHJlc3VsdCA9IGJ1aWxkVmFsdWUoc3RhcnQsIGVuZCwgJnRva2VuRW5kLCAwKTsKICAgICBp
ZiAoIXJlc3VsdCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gbnVsbHB0
cjsKIAogICAgIGZvciAoY29uc3QgVUNoYXIqIHZhbHVlRW5kID0gdG9rZW5FbmQ7IHZhbHVlRW5k
IDwgZW5kOyArK3ZhbHVlRW5kKSB7CiAgICAgICAgIGlmICghaXNTcGFjZU9yTmV3bGluZSgqdmFs
dWVFbmQpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAgICAgfQogCi0gICAgb3V0cHV0ID0gV1RGTW92ZShyZXN1bHQpOwotICAgIHJldHVy
biB0cnVlOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIHZvaWQgVmFsdWU6OmVzY2FwZVN0cmlu
ZyhTdHJpbmdCdWlsZGVyJiBidWlsZGVyLCBTdHJpbmdWaWV3IHN0cmluZykKQEAgLTU3Myw5NCAr
NTcxLDMyIEBAIFN0cmluZyBWYWx1ZTo6dG9KU09OU3RyaW5nKCkgY29uc3QKICAgICByZXR1cm4g
cmVzdWx0LnRvU3RyaW5nKCk7CiB9CiAKLWJvb2wgVmFsdWU6OmFzQm9vbGVhbihib29sJiBvdXRw
dXQpIGNvbnN0CitPcHRpb25hbDxib29sPiBWYWx1ZTo6YXNCb29sZWFuKCkgY29uc3QKIHsKICAg
ICBpZiAodHlwZSgpICE9IFR5cGU6OkJvb2xlYW4pCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIG91dHB1dCA9IG1fdmFsdWUuYm9vbGVhbjsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICByZXR1cm4gbV92YWx1ZS5ib29sZWFuOwogfQogCi1i
b29sIFZhbHVlOjphc0RvdWJsZShkb3VibGUmIG91dHB1dCkgY29uc3QKK09wdGlvbmFsPGRvdWJs
ZT4gVmFsdWU6OmFzRG91YmxlKCkgY29uc3QKIHsKLSAgICBpZiAodHlwZSgpICE9IFR5cGU6OkRv
dWJsZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgb3V0cHV0ID0gbV92YWx1ZS5udW1i
ZXI7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgaWYgKHR5cGUoKSAhPSBUeXBlOjpEb3VibGUgJiYg
dHlwZSgpICE9IFR5cGU6OkludGVnZXIpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cisg
ICAgcmV0dXJuIG1fdmFsdWUubnVtYmVyOwogfQogCi1ib29sIFZhbHVlOjphc0RvdWJsZShmbG9h
dCYgb3V0cHV0KSBjb25zdAorT3B0aW9uYWw8aW50PiBWYWx1ZTo6YXNJbnRlZ2VyKCkgY29uc3QK
IHsKLSAgICBpZiAodHlwZSgpICE9IFR5cGU6OkRvdWJsZSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgb3V0cHV0ID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fdmFsdWUubnVtYmVyKTsKLSAg
ICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAodHlwZSgpICE9IFR5cGU6OkRvdWJsZSAmJiB0eXBlKCkg
IT0gVHlwZTo6SW50ZWdlcikKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8aW50PihtX3ZhbHVlLm51bWJlcik7CiB9CiAKLWJvb2wgVmFsdWU6OmFz
SW50ZWdlcihpbnQmIG91dHB1dCkgY29uc3QKLXsKLSAgICBpZiAodHlwZSgpICE9IFR5cGU6Oklu
dGVnZXIgJiYgdHlwZSgpICE9IFR5cGU6OkRvdWJsZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgb3V0cHV0ID0gc3RhdGljX2Nhc3Q8aW50PihtX3ZhbHVlLm51bWJlcik7Ci0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLWJvb2wgVmFsdWU6OmFzSW50ZWdlcih1bnNpZ25lZCYgb3V0cHV0KSBj
b25zdAotewotICAgIGlmICh0eXBlKCkgIT0gVHlwZTo6SW50ZWdlciAmJiB0eXBlKCkgIT0gVHlw
ZTo6RG91YmxlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBvdXRwdXQgPSBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4obV92YWx1ZS5udW1iZXIpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1i
b29sIFZhbHVlOjphc0ludGVnZXIobG9uZyYgb3V0cHV0KSBjb25zdAotewotICAgIGlmICh0eXBl
KCkgIT0gVHlwZTo6SW50ZWdlciAmJiB0eXBlKCkgIT0gVHlwZTo6RG91YmxlKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICBvdXRwdXQgPSBzdGF0aWNfY2FzdDxsb25nPihtX3ZhbHVlLm51
bWJlcik7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgVmFsdWU6OmFzSW50ZWdlcihsb25n
IGxvbmcmIG91dHB1dCkgY29uc3QKLXsKLSAgICBpZiAodHlwZSgpICE9IFR5cGU6OkludGVnZXIg
JiYgdHlwZSgpICE9IFR5cGU6OkRvdWJsZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
b3V0cHV0ID0gc3RhdGljX2Nhc3Q8bG9uZyBsb25nPihtX3ZhbHVlLm51bWJlcik7Ci0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLWJvb2wgVmFsdWU6OmFzSW50ZWdlcih1bnNpZ25lZCBsb25nJiBvdXRw
dXQpIGNvbnN0Ci17Ci0gICAgaWYgKHR5cGUoKSAhPSBUeXBlOjpJbnRlZ2VyICYmIHR5cGUoKSAh
PSBUeXBlOjpEb3VibGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIG91dHB1dCA9IHN0
YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KG1fdmFsdWUubnVtYmVyKTsKLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotYm9vbCBWYWx1ZTo6YXNJbnRlZ2VyKHVuc2lnbmVkIGxvbmcgbG9uZyYgb3V0cHV0
KSBjb25zdAotewotICAgIGlmICh0eXBlKCkgIT0gVHlwZTo6SW50ZWdlciAmJiB0eXBlKCkgIT0g
VHlwZTo6RG91YmxlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBvdXRwdXQgPSBzdGF0
aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KG1fdmFsdWUubnVtYmVyKTsKLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotYm9vbCBWYWx1ZTo6YXNTdHJpbmcoU3RyaW5nJiBvdXRwdXQpIGNvbnN0CitT
dHJpbmcgVmFsdWU6OmFzU3RyaW5nKCkgY29uc3QKIHsKICAgICBpZiAodHlwZSgpICE9IFR5cGU6
OlN0cmluZykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgb3V0cHV0ID0gbV92YWx1ZS5z
dHJpbmc7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiBudWxsU3RyaW5nKCk7Cisg
ICAgcmV0dXJuIG1fdmFsdWUuc3RyaW5nOwogfQogCiB2b2lkIFZhbHVlOjp3cml0ZUpTT04oU3Ry
aW5nQnVpbGRlciYgb3V0cHV0KSBjb25zdApAQCAtNzAzLDc2ICs2MzksNzQgQEAgT2JqZWN0QmFz
ZTo6fk9iamVjdEJhc2UoKQogewogfQogCi1ib29sIE9iamVjdEJhc2U6OmFzT2JqZWN0KFJlZlB0
cjxPYmplY3Q+JiBvdXRwdXQpCitSZWZQdHI8T2JqZWN0PiBPYmplY3RCYXNlOjphc09iamVjdCgp
CiB7CiAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKE9iamVjdCkgPT0gc2l6ZW9mKE9iamVjdEJh
c2UpLCBjYW5ub3RfY2FzdCk7Ci0KLSAgICBvdXRwdXQgPSBzdGF0aWNfY2FzdDxPYmplY3QqPih0
aGlzKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotT2JqZWN0KiBPYmplY3RCYXNlOjpvcGVuQWNj
ZXNzb3JzKCkKLXsKLSAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoT2JqZWN0KSA9PSBzaXplb2Yo
T2JqZWN0QmFzZSksIGNhbm5vdF9jYXN0KTsKLQogICAgIHJldHVybiBzdGF0aWNfY2FzdDxPYmpl
Y3QqPih0aGlzKTsKIH0KIAogc2l6ZV90IE9iamVjdEJhc2U6Om1lbW9yeUNvc3QoKSBjb25zdAog
ewogICAgIHNpemVfdCBtZW1vcnlDb3N0ID0gVmFsdWU6Om1lbW9yeUNvc3QoKTsKLSAgICBmb3Ig
KGNvbnN0IGF1dG8mIGVudHJ5IDogbV9tYXApIHsKLSAgICAgICAgbWVtb3J5Q29zdCArPSBlbnRy
eS5rZXkuc2l6ZUluQnl0ZXMoKTsKLSAgICAgICAgaWYgKGVudHJ5LnZhbHVlKQotICAgICAgICAg
ICAgbWVtb3J5Q29zdCArPSBlbnRyeS52YWx1ZS0+bWVtb3J5Q29zdCgpOwotICAgIH0KKyAgICBm
b3IgKGNvbnN0IGF1dG8mIGVudHJ5IDogbV9tYXApCisgICAgICAgIG1lbW9yeUNvc3QgKz0gZW50
cnkua2V5LnNpemVJbkJ5dGVzKCkgKyBlbnRyeS52YWx1ZS0+bWVtb3J5Q29zdCgpOwogICAgIHJl
dHVybiBtZW1vcnlDb3N0OwogfQogCi1ib29sIE9iamVjdEJhc2U6OmdldEJvb2xlYW4oY29uc3Qg
U3RyaW5nJiBuYW1lLCBib29sJiBvdXRwdXQpIGNvbnN0CitPcHRpb25hbDxib29sPiBPYmplY3RC
YXNlOjpnZXRCb29sZWFuKGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3QKIHsKLSAgICBSZWZQdHI8
VmFsdWU+IHZhbHVlOwotICAgIGlmICghZ2V0VmFsdWUobmFtZSwgdmFsdWUpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gdmFsdWUtPmFzQm9vbGVhbihvdXRwdXQpOworICAg
IGF1dG8gdmFsdWUgPSBnZXRWYWx1ZShuYW1lKTsKKyAgICBpZiAoIXZhbHVlKQorICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHJldHVybiB2YWx1ZS0+YXNCb29sZWFuKCk7CiB9CiAK
LWJvb2wgT2JqZWN0QmFzZTo6Z2V0U3RyaW5nKGNvbnN0IFN0cmluZyYgbmFtZSwgU3RyaW5nJiBv
dXRwdXQpIGNvbnN0CitPcHRpb25hbDxkb3VibGU+IE9iamVjdEJhc2U6OmdldERvdWJsZShjb25z
dCBTdHJpbmcmIG5hbWUpIGNvbnN0CiB7Ci0gICAgUmVmUHRyPFZhbHVlPiB2YWx1ZTsKLSAgICBp
ZiAoIWdldFZhbHVlKG5hbWUsIHZhbHVlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
cmV0dXJuIHZhbHVlLT5hc1N0cmluZyhvdXRwdXQpOworICAgIGF1dG8gdmFsdWUgPSBnZXRWYWx1
ZShuYW1lKTsKKyAgICBpZiAoIXZhbHVlKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owor
ICAgIHJldHVybiB2YWx1ZS0+YXNEb3VibGUoKTsKIH0KIAotYm9vbCBPYmplY3RCYXNlOjpnZXRP
YmplY3QoY29uc3QgU3RyaW5nJiBuYW1lLCBSZWZQdHI8T2JqZWN0PiYgb3V0cHV0KSBjb25zdAor
T3B0aW9uYWw8aW50PiBPYmplY3RCYXNlOjpnZXRJbnRlZ2VyKGNvbnN0IFN0cmluZyYgbmFtZSkg
Y29uc3QKIHsKLSAgICBSZWZQdHI8VmFsdWU+IHZhbHVlOwotICAgIGlmICghZ2V0VmFsdWUobmFt
ZSwgdmFsdWUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gdmFsdWUtPmFz
T2JqZWN0KG91dHB1dCk7CisgICAgYXV0byB2YWx1ZSA9IGdldFZhbHVlKG5hbWUpOworICAgIGlm
ICghdmFsdWUpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgcmV0dXJuIHZhbHVl
LT5hc0ludGVnZXIoKTsKIH0KIAotYm9vbCBPYmplY3RCYXNlOjpnZXRBcnJheShjb25zdCBTdHJp
bmcmIG5hbWUsIFJlZlB0cjxBcnJheT4mIG91dHB1dCkgY29uc3QKK1N0cmluZyBPYmplY3RCYXNl
OjpnZXRTdHJpbmcoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdAogewotICAgIFJlZlB0cjxWYWx1
ZT4gdmFsdWU7Ci0gICAgaWYgKCFnZXRWYWx1ZShuYW1lLCB2YWx1ZSkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIHJldHVybiB2YWx1ZS0+YXNBcnJheShvdXRwdXQpOworICAgIGF1dG8g
dmFsdWUgPSBnZXRWYWx1ZShuYW1lKTsKKyAgICBpZiAoIXZhbHVlKQorICAgICAgICByZXR1cm4g
bnVsbFN0cmluZygpOworICAgIHJldHVybiB2YWx1ZS0+YXNTdHJpbmcoKTsKIH0KIAotYm9vbCBP
YmplY3RCYXNlOjpnZXRWYWx1ZShjb25zdCBTdHJpbmcmIG5hbWUsIFJlZlB0cjxWYWx1ZT4mIG91
dHB1dCkgY29uc3QKK1JlZlB0cjxPYmplY3Q+IE9iamVjdEJhc2U6OmdldE9iamVjdChjb25zdCBT
dHJpbmcmIG5hbWUpIGNvbnN0CiB7Ci0gICAgRGljdGlvbmFyeTo6Y29uc3RfaXRlcmF0b3IgZmlu
ZFJlc3VsdCA9IG1fbWFwLmZpbmQobmFtZSk7CisgICAgYXV0byB2YWx1ZSA9IGdldFZhbHVlKG5h
bWUpOworICAgIGlmICghdmFsdWUpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVy
biB2YWx1ZS0+YXNPYmplY3QoKTsKK30KKworUmVmUHRyPEFycmF5PiBPYmplY3RCYXNlOjpnZXRB
cnJheShjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0Cit7CisgICAgYXV0byB2YWx1ZSA9IGdldFZh
bHVlKG5hbWUpOworICAgIGlmICghdmFsdWUpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAg
IHJldHVybiB2YWx1ZS0+YXNBcnJheSgpOworfQorCitSZWZQdHI8VmFsdWU+IE9iamVjdEJhc2U6
OmdldFZhbHVlKGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3QKK3sKKyAgICBhdXRvIGZpbmRSZXN1
bHQgPSBtX21hcC5maW5kKG5hbWUpOwogICAgIGlmIChmaW5kUmVzdWx0ID09IG1fbWFwLmVuZCgp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBvdXRwdXQgPSBmaW5kUmVzdWx0LT52YWx1
ZTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJu
IGZpbmRSZXN1bHQtPnZhbHVlLmNvcHlSZWYoKTsKIH0KIAogdm9pZCBPYmplY3RCYXNlOjpyZW1v
dmUoY29uc3QgU3RyaW5nJiBuYW1lKQpAQCAtNzk4LDggKzczMiw2IEBAIHZvaWQgT2JqZWN0QmFz
ZTo6d3JpdGVKU09OKFN0cmluZ0J1aWxkZXImIG91dHB1dCkgY29uc3QKIAogT2JqZWN0QmFzZTo6
T2JqZWN0QmFzZSgpCiAgICAgOiBWYWx1ZShUeXBlOjpPYmplY3QpCi0gICAgLCBtX21hcCgpCi0g
ICAgLCBtX29yZGVyKCkKIHsKIH0KIApAQCAtODA3LDE3ICs3MzksMTYgQEAgQXJyYXlCYXNlOjp+
QXJyYXlCYXNlKCkKIHsKIH0KIAotYm9vbCBBcnJheUJhc2U6OmFzQXJyYXkoUmVmUHRyPEFycmF5
PiYgb3V0cHV0KQorUmVmUHRyPEFycmF5PiBBcnJheUJhc2U6OmFzQXJyYXkoKQogewogICAgIENP
TVBJTEVfQVNTRVJUKHNpemVvZihBcnJheUJhc2UpID09IHNpemVvZihBcnJheSksIGNhbm5vdF9j
YXN0KTsKLSAgICBvdXRwdXQgPSBzdGF0aWNfY2FzdDxBcnJheSo+KHRoaXMpOwotICAgIHJldHVy
biB0cnVlOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxBcnJheSo+KHRoaXMpOwogfQogCiB2b2lk
IEFycmF5QmFzZTo6d3JpdGVKU09OKFN0cmluZ0J1aWxkZXImIG91dHB1dCkgY29uc3QKIHsKICAg
ICBvdXRwdXQuYXBwZW5kKCdbJyk7Ci0gICAgZm9yIChWZWN0b3I8UmVmUHRyPFZhbHVlPj46OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gbV9tYXAuYmVnaW4oKTsgaXQgIT0gbV9tYXAuZW5kKCk7ICsraXQp
IHsKKyAgICBmb3IgKGF1dG8gaXQgPSBtX21hcC5iZWdpbigpOyBpdCAhPSBtX21hcC5lbmQoKTsg
KytpdCkgewogICAgICAgICBpZiAoaXQgIT0gbV9tYXAuYmVnaW4oKSkKICAgICAgICAgICAgIG91
dHB1dC5hcHBlbmQoJywnKTsKICAgICAgICAgKCppdCktPndyaXRlSlNPTihvdXRwdXQpOwpAQCAt
ODI3LDExICs3NTgsMTAgQEAgdm9pZCBBcnJheUJhc2U6OndyaXRlSlNPTihTdHJpbmdCdWlsZGVy
JiBvdXRwdXQpIGNvbnN0CiAKIEFycmF5QmFzZTo6QXJyYXlCYXNlKCkKICAgICA6IFZhbHVlKFR5
cGU6OkFycmF5KQotICAgICwgbV9tYXAoKQogewogfQogCi1SZWZQdHI8VmFsdWU+IEFycmF5QmFz
ZTo6Z2V0KHNpemVfdCBpbmRleCkgY29uc3QKK1JlZjxWYWx1ZT4gQXJyYXlCYXNlOjpnZXQoc2l6
ZV90IGluZGV4KSBjb25zdAogewogICAgIFJFTEVBU0VfQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1Q
TElDQVRJT04oaW5kZXggPCBtX21hcC5zaXplKCkpOwogICAgIHJldHVybiBtX21hcFtpbmRleF07
CkBAIC04NTAsMTAgKzc4MCw4IEBAIFJlZjxBcnJheT4gQXJyYXk6OmNyZWF0ZSgpCiBzaXplX3Qg
QXJyYXlCYXNlOjptZW1vcnlDb3N0KCkgY29uc3QKIHsKICAgICBzaXplX3QgbWVtb3J5Q29zdCA9
IFZhbHVlOjptZW1vcnlDb3N0KCk7Ci0gICAgZm9yIChjb25zdCBhdXRvJiBpdGVtIDogbV9tYXAp
IHsKLSAgICAgICAgaWYgKGl0ZW0pCi0gICAgICAgICAgICBtZW1vcnlDb3N0ICs9IGl0ZW0tPm1l
bW9yeUNvc3QoKTsKLSAgICB9CisgICAgZm9yIChjb25zdCBhdXRvJiBpdGVtIDogbV9tYXApCisg
ICAgICAgIG1lbW9yeUNvc3QgKz0gaXRlbS0+bWVtb3J5Q29zdCgpOwogICAgIHJldHVybiBtZW1v
cnlDb3N0OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9KU09OVmFsdWVzLmggYi9T
b3VyY2UvV1RGL3d0Zi9KU09OVmFsdWVzLmgKaW5kZXggZWJhYmM0NDlmODgwYjM5ZDNmYWRlNzhj
ZDYxYjFjNGQ1ZTBlNjg2My4uNDMwNzQ1M2Q5Y2M4Zjg4Y2MxNjk5Y2Q4ODU3MjE2ODc3ZmRjOWIw
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvSlNPTlZhbHVlcy5oCisrKyBiL1NvdXJjZS9X
VEYvd3RmL0pTT05WYWx1ZXMuaApAQCAtOTIsMjIgKzkyLDE1IEBAIHB1YmxpYzoKICAgICBUeXBl
IHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KICAgICBib29sIGlzTnVsbCgpIGNvbnN0
IHsgcmV0dXJuIG1fdHlwZSA9PSBUeXBlOjpOdWxsOyB9CiAKLSAgICBib29sIGFzQm9vbGVhbihi
b29sJikgY29uc3Q7Ci0gICAgYm9vbCBhc0ludGVnZXIoaW50JikgY29uc3Q7Ci0gICAgYm9vbCBh
c0ludGVnZXIodW5zaWduZWQmKSBjb25zdDsKLSAgICBib29sIGFzSW50ZWdlcihsb25nJikgY29u
c3Q7Ci0gICAgYm9vbCBhc0ludGVnZXIobG9uZyBsb25nJikgY29uc3Q7Ci0gICAgYm9vbCBhc0lu
dGVnZXIodW5zaWduZWQgbG9uZyYpIGNvbnN0OwotICAgIGJvb2wgYXNJbnRlZ2VyKHVuc2lnbmVk
IGxvbmcgbG9uZyYpIGNvbnN0OwotICAgIGJvb2wgYXNEb3VibGUoZG91YmxlJikgY29uc3Q7Ci0g
ICAgYm9vbCBhc0RvdWJsZShmbG9hdCYpIGNvbnN0OwotICAgIGJvb2wgYXNTdHJpbmcoU3RyaW5n
JikgY29uc3Q7Ci0gICAgYm9vbCBhc1ZhbHVlKFJlZlB0cjxWYWx1ZT4mKTsKKyAgICBPcHRpb25h
bDxib29sPiBhc0Jvb2xlYW4oKSBjb25zdDsKKyAgICBPcHRpb25hbDxpbnQ+IGFzSW50ZWdlcigp
IGNvbnN0OworICAgIE9wdGlvbmFsPGRvdWJsZT4gYXNEb3VibGUoKSBjb25zdDsKKyAgICBTdHJp
bmcgYXNTdHJpbmcoKSBjb25zdDsKKyAgICBSZWZQdHI8VmFsdWU+IGFzVmFsdWUoKTsKKyAgICB2
aXJ0dWFsIFJlZlB0cjxPYmplY3Q+IGFzT2JqZWN0KCk7CisgICAgdmlydHVhbCBSZWZQdHI8QXJy
YXk+IGFzQXJyYXkoKTsKIAotICAgIHZpcnR1YWwgYm9vbCBhc09iamVjdChSZWZQdHI8T2JqZWN0
PiYpOwotICAgIHZpcnR1YWwgYm9vbCBhc0FycmF5KFJlZlB0cjxBcnJheT4mKTsKLQotICAgIHN0
YXRpYyBib29sIHBhcnNlSlNPTihjb25zdCBTdHJpbmcmIGpzb25JbnB1dCwgUmVmUHRyPFZhbHVl
PiYgb3V0cHV0KTsKKyAgICBzdGF0aWMgUmVmUHRyPFZhbHVlPiBwYXJzZUpTT04oY29uc3QgU3Ry
aW5nJik7CiAgICAgc3RhdGljIHZvaWQgZXNjYXBlU3RyaW5nKFN0cmluZ0J1aWxkZXImLCBTdHJp
bmdWaWV3KTsKIAogICAgIFN0cmluZyB0b0pTT05TdHJpbmcoKSBjb25zdDsKQEAgLTE3Miw5NSAr
MTY1LDYzIEBAIHByaXZhdGU6CiAKIGNsYXNzIFdURl9FWFBPUlRfUFJJVkFURSBPYmplY3RCYXNl
IDogcHVibGljIFZhbHVlIHsKIHByaXZhdGU6Ci0gICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywg
UmVmUHRyPFZhbHVlPj4gRGljdGlvbmFyeTsKKyAgICB1c2luZyBEYXRhU3RvcmFnZSA9IEhhc2hN
YXA8U3RyaW5nLCBSZWY8VmFsdWU+PjsKKyAgICB1c2luZyBPcmRlclN0b3JhZ2UgPSBWZWN0b3I8
U3RyaW5nPjsKIAogcHVibGljOgotICAgIHR5cGVkZWYgRGljdGlvbmFyeTo6aXRlcmF0b3IgaXRl
cmF0b3I7Ci0gICAgdHlwZWRlZiBEaWN0aW9uYXJ5Ojpjb25zdF9pdGVyYXRvciBjb25zdF9pdGVy
YXRvcjsKKyAgICB1c2luZyBpdGVyYXRvciA9IERhdGFTdG9yYWdlOjppdGVyYXRvcjsKKyAgICB1
c2luZyBjb25zdF9pdGVyYXRvciA9IERhdGFTdG9yYWdlOjpjb25zdF9pdGVyYXRvcjsKIAotICAg
IE9iamVjdCogb3BlbkFjY2Vzc29ycygpOworICAgIFJlZlB0cjxPYmplY3Q+IGFzT2JqZWN0KCkg
ZmluYWw7CiAKICAgICBzaXplX3QgbWVtb3J5Q29zdCgpIGNvbnN0IGZpbmFsOwogCiBwcm90ZWN0
ZWQ6CiAgICAgfk9iamVjdEJhc2UoKSBvdmVycmlkZTsKIAotICAgIGJvb2wgYXNPYmplY3QoUmVm
UHRyPE9iamVjdD4mIG91dHB1dCkgb3ZlcnJpZGU7Ci0KICAgICAvLyBGSVhNRTogdXNlIHRlbXBs
YXRlcyB0byByZWR1Y2UgdGhlIGFtb3VudCBvZiBkdXBsaWNhdGVkIHNldCooKSBtZXRob2RzLgog
ICAgIHZvaWQgc2V0Qm9vbGVhbihjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wpOwogICAgIHZvaWQg
c2V0SW50ZWdlcihjb25zdCBTdHJpbmcmIG5hbWUsIGludCk7CiAgICAgdm9pZCBzZXREb3VibGUo
Y29uc3QgU3RyaW5nJiBuYW1lLCBkb3VibGUpOwogICAgIHZvaWQgc2V0U3RyaW5nKGNvbnN0IFN0
cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJik7Ci0gICAgdm9pZCBzZXRWYWx1ZShjb25zdCBTdHJp
bmcmIG5hbWUsIFJlZlB0cjxWYWx1ZT4mJik7Ci0gICAgdm9pZCBzZXRPYmplY3QoY29uc3QgU3Ry
aW5nJiBuYW1lLCBSZWZQdHI8T2JqZWN0QmFzZT4mJik7Ci0gICAgdm9pZCBzZXRBcnJheShjb25z
dCBTdHJpbmcmIG5hbWUsIFJlZlB0cjxBcnJheUJhc2U+JiYpOworICAgIHZvaWQgc2V0VmFsdWUo
Y29uc3QgU3RyaW5nJiBuYW1lLCBSZWY8VmFsdWU+JiYpOworICAgIHZvaWQgc2V0T2JqZWN0KGNv
bnN0IFN0cmluZyYgbmFtZSwgUmVmPE9iamVjdEJhc2U+JiYpOworICAgIHZvaWQgc2V0QXJyYXko
Y29uc3QgU3RyaW5nJiBuYW1lLCBSZWY8QXJyYXlCYXNlPiYmKTsKIAogICAgIGl0ZXJhdG9yIGZp
bmQoY29uc3QgU3RyaW5nJiBuYW1lKTsKICAgICBjb25zdF9pdGVyYXRvciBmaW5kKGNvbnN0IFN0
cmluZyYgbmFtZSkgY29uc3Q7CiAKLSAgICAvLyBGSVhNRTogdXNlIHRlbXBsYXRlcyB0byByZWR1
Y2UgdGhlIGFtb3VudCBvZiBkdXBsaWNhdGVkIGdldCooKSBtZXRob2RzLgotICAgIGJvb2wgZ2V0
Qm9vbGVhbihjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wmIG91dHB1dCkgY29uc3Q7Ci0gICAgdGVt
cGxhdGU8Y2xhc3MgVD4gYm9vbCBnZXREb3VibGUoY29uc3QgU3RyaW5nJiBuYW1lLCBUJiBvdXRw
dXQpIGNvbnN0Ci0gICAgewotICAgICAgICBSZWZQdHI8VmFsdWU+IHZhbHVlOwotICAgICAgICBp
ZiAoIWdldFZhbHVlKG5hbWUsIHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgICAgICByZXR1cm4gdmFsdWUtPmFzRG91YmxlKG91dHB1dCk7Ci0gICAgfQotICAgIHRlbXBs
YXRlPGNsYXNzIFQ+IGJvb2wgZ2V0SW50ZWdlcihjb25zdCBTdHJpbmcmIG5hbWUsIFQmIG91dHB1
dCkgY29uc3QKLSAgICB7Ci0gICAgICAgIFJlZlB0cjxWYWx1ZT4gdmFsdWU7Ci0gICAgICAgIGlm
ICghZ2V0VmFsdWUobmFtZSwgdmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgICAgIHJldHVybiB2YWx1ZS0+YXNJbnRlZ2VyKG91dHB1dCk7Ci0gICAgfQotCi0gICAgdGVt
cGxhdGU8Y2xhc3MgVD4gT3B0aW9uYWw8VD4gZ2V0TnVtYmVyKGNvbnN0IFN0cmluZyYgbmFtZSkg
Y29uc3QKLSAgICB7Ci0gICAgICAgIFJlZlB0cjxWYWx1ZT4gdmFsdWU7Ci0gICAgICAgIGlmICgh
Z2V0VmFsdWUobmFtZSwgdmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
LQotICAgICAgICBUIHJlc3VsdDsKLSAgICAgICAgaWYgKCF2YWx1ZS0+YXNEb3VibGUocmVzdWx0
KSkKLSAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICAgICAgcmV0dXJuIHJl
c3VsdDsKLSAgICB9Ci0KLSAgICBib29sIGdldFN0cmluZyhjb25zdCBTdHJpbmcmIG5hbWUsIFN0
cmluZyYgb3V0cHV0KSBjb25zdDsKLSAgICBib29sIGdldE9iamVjdChjb25zdCBTdHJpbmcmIG5h
bWUsIFJlZlB0cjxPYmplY3Q+JikgY29uc3Q7Ci0gICAgYm9vbCBnZXRBcnJheShjb25zdCBTdHJp
bmcmIG5hbWUsIFJlZlB0cjxBcnJheT4mKSBjb25zdDsKLSAgICBib29sIGdldFZhbHVlKGNvbnN0
IFN0cmluZyYgbmFtZSwgUmVmUHRyPFZhbHVlPiYpIGNvbnN0OworICAgIE9wdGlvbmFsPGJvb2w+
IGdldEJvb2xlYW4oY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdDsKKyAgICBPcHRpb25hbDxkb3Vi
bGU+IGdldERvdWJsZShjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0OworICAgIE9wdGlvbmFsPGlu
dD4gZ2V0SW50ZWdlcihjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0OworICAgIFN0cmluZyBnZXRT
dHJpbmcoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdDsKKyAgICBSZWZQdHI8T2JqZWN0PiBnZXRP
YmplY3QoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdDsKKyAgICBSZWZQdHI8QXJyYXk+IGdldEFy
cmF5KGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3Q7CisgICAgUmVmUHRyPFZhbHVlPiBnZXRWYWx1
ZShjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0OwogCiAgICAgdm9pZCByZW1vdmUoY29uc3QgU3Ry
aW5nJiBuYW1lKTsKIAotICAgIHZvaWQgd3JpdGVKU09OKFN0cmluZ0J1aWxkZXImIG91dHB1dCkg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCB3cml0ZUpTT04oU3RyaW5nQnVpbGRlciYgb3V0cHV0
KSBjb25zdCBmaW5hbDsKIAogICAgIGl0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gbV9tYXAuYmVn
aW4oKTsgfQogICAgIGl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIG1fbWFwLmVuZCgpOyB9CiAgICAg
Y29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBtX21hcC5iZWdpbigpOyB9CiAg
ICAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gbV9tYXAuZW5kKCk7IH0KIAot
ICAgIGludCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9tYXAuc2l6ZSgpOyB9CisgICAgdW5zaWdu
ZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWFwLnNpemUoKTsgfQogCiBwcm90ZWN0ZWQ6CiAg
ICAgT2JqZWN0QmFzZSgpOwogCiBwcml2YXRlOgotICAgIERpY3Rpb25hcnkgbV9tYXA7Ci0gICAg
VmVjdG9yPFN0cmluZz4gbV9vcmRlcjsKKyAgICBEYXRhU3RvcmFnZSBtX21hcDsKKyAgICBPcmRl
clN0b3JhZ2UgbV9vcmRlcjsKIH07CiAKIGNsYXNzIE9iamVjdCA6IHB1YmxpYyBPYmplY3RCYXNl
IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgV1RGX0VYUE9SVF9QUklWQVRFIFJlZjxPYmplY3Q+IGNy
ZWF0ZSgpOwogCi0gICAgdXNpbmcgT2JqZWN0QmFzZTo6YXNPYmplY3Q7Ci0KICAgICAvLyBUaGlz
IGNsYXNzIGV4cGVjdGVkIG5vbi1jeWNsaWMgdmFsdWVzLCBhcyB3ZSBjYW5ub3Qgc2VyaWFsaXpl
IGN5Y2xlcyBpbiBKU09OLgogICAgIHVzaW5nIE9iamVjdEJhc2U6OnNldEJvb2xlYW47CiAgICAg
dXNpbmcgT2JqZWN0QmFzZTo6c2V0SW50ZWdlcjsKQEAgLTI3NCw3ICsyMzUsNiBAQCBwdWJsaWM6
CiAgICAgdXNpbmcgT2JqZWN0QmFzZTo6Z2V0Qm9vbGVhbjsKICAgICB1c2luZyBPYmplY3RCYXNl
OjpnZXRJbnRlZ2VyOwogICAgIHVzaW5nIE9iamVjdEJhc2U6OmdldERvdWJsZTsKLSAgICB1c2lu
ZyBPYmplY3RCYXNlOjpnZXROdW1iZXI7CiAgICAgdXNpbmcgT2JqZWN0QmFzZTo6Z2V0U3RyaW5n
OwogICAgIHVzaW5nIE9iamVjdEJhc2U6OmdldE9iamVjdDsKICAgICB1c2luZyBPYmplY3RCYXNl
OjpnZXRBcnJheTsKQEAgLTI5MCw0OSArMjUwLDQ5IEBAIHB1YmxpYzoKIAogCiBjbGFzcyBXVEZf
RVhQT1JUX1BSSVZBVEUgQXJyYXlCYXNlIDogcHVibGljIFZhbHVlIHsKK3ByaXZhdGU6CisgICAg
dXNpbmcgRGF0YVN0b3JhZ2UgPSBWZWN0b3I8UmVmPFZhbHVlPj47CisKIHB1YmxpYzoKLSAgICB0
eXBlZGVmIFZlY3RvcjxSZWZQdHI8VmFsdWU+Pjo6aXRlcmF0b3IgaXRlcmF0b3I7Ci0gICAgdHlw
ZWRlZiBWZWN0b3I8UmVmUHRyPFZhbHVlPj46OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9y
OworICAgIHVzaW5nIGl0ZXJhdG9yID0gRGF0YVN0b3JhZ2U6Oml0ZXJhdG9yOworICAgIHVzaW5n
IGNvbnN0X2l0ZXJhdG9yID0gRGF0YVN0b3JhZ2U6OmNvbnN0X2l0ZXJhdG9yOwogCi0gICAgdW5z
aWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fbWFw
LnNpemUoKSk7IH0KKyAgICBzaXplX3QgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9tYXAuc2l6
ZSgpOyB9CiAKLSAgICBSZWZQdHI8VmFsdWU+IGdldChzaXplX3QgaW5kZXgpIGNvbnN0OworICAg
IFJlZjxWYWx1ZT4gZ2V0KHNpemVfdCBpbmRleCkgY29uc3Q7CiAKICAgICBzaXplX3QgbWVtb3J5
Q29zdCgpIGNvbnN0IGZpbmFsOwogCisgICAgUmVmUHRyPEFycmF5PiBhc0FycmF5KCkgZmluYWw7
CisKIHByb3RlY3RlZDoKICAgICB+QXJyYXlCYXNlKCkgb3ZlcnJpZGU7CiAKLSAgICBib29sIGFz
QXJyYXkoUmVmUHRyPEFycmF5PiYpIG92ZXJyaWRlOwotCiAgICAgdm9pZCBwdXNoQm9vbGVhbihi
b29sKTsKICAgICB2b2lkIHB1c2hJbnRlZ2VyKGludCk7CiAgICAgdm9pZCBwdXNoRG91YmxlKGRv
dWJsZSk7CiAgICAgdm9pZCBwdXNoU3RyaW5nKGNvbnN0IFN0cmluZyYpOwotICAgIHZvaWQgcHVz
aFZhbHVlKFJlZlB0cjxWYWx1ZT4mJik7Ci0gICAgdm9pZCBwdXNoT2JqZWN0KFJlZlB0cjxPYmpl
Y3RCYXNlPiYmKTsKLSAgICB2b2lkIHB1c2hBcnJheShSZWZQdHI8QXJyYXlCYXNlPiYmKTsKLQot
ICAgIHZvaWQgd3JpdGVKU09OKFN0cmluZ0J1aWxkZXImIG91dHB1dCkgY29uc3Qgb3ZlcnJpZGU7
CisgICAgdm9pZCBwdXNoVmFsdWUoUmVmPFZhbHVlPiYmKTsKKyAgICB2b2lkIHB1c2hPYmplY3Qo
UmVmPE9iamVjdEJhc2U+JiYpOworICAgIHZvaWQgcHVzaEFycmF5KFJlZjxBcnJheUJhc2U+JiYp
OwogCiAgICAgaXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBtX21hcC5iZWdpbigpOyB9CiAgICAg
aXRlcmF0b3IgZW5kKCkgeyByZXR1cm4gbV9tYXAuZW5kKCk7IH0KICAgICBjb25zdF9pdGVyYXRv
ciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fbWFwLmJlZ2luKCk7IH0KICAgICBjb25zdF9pdGVy
YXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBtX21hcC5lbmQoKTsgfQorICAgIHZvaWQgd3JpdGVK
U09OKFN0cmluZ0J1aWxkZXImIG91dHB1dCkgY29uc3QgZmluYWw7CiAKIHByb3RlY3RlZDoKICAg
ICBBcnJheUJhc2UoKTsKIAogcHJpdmF0ZToKLSAgICBWZWN0b3I8UmVmUHRyPFZhbHVlPj4gbV9t
YXA7CisgICAgRGF0YVN0b3JhZ2UgbV9tYXA7CiB9OwogCi1jbGFzcyBBcnJheSA6IHB1YmxpYyBB
cnJheUJhc2UgeworY2xhc3MgQXJyYXkgZmluYWwgOiBwdWJsaWMgQXJyYXlCYXNlIHsKIHB1Ymxp
YzoKICAgICBzdGF0aWMgV1RGX0VYUE9SVF9QUklWQVRFIFJlZjxBcnJheT4gY3JlYXRlKCk7CiAK
LSAgICB1c2luZyBBcnJheUJhc2U6OmFzQXJyYXk7Ci0KICAgICAvLyBUaGlzIGNsYXNzIGV4cGVj
dGVkIG5vbi1jeWNsaWMgdmFsdWVzLCBhcyB3ZSBjYW5ub3Qgc2VyaWFsaXplIGN5Y2xlcyBpbiBK
U09OLgogICAgIHVzaW5nIEFycmF5QmFzZTo6cHVzaEJvb2xlYW47CiAgICAgdXNpbmcgQXJyYXlC
YXNlOjpwdXNoSW50ZWdlcjsKQEAgLTM0OCw3ICszMDgsNiBAQCBwdWJsaWM6CiAgICAgdXNpbmcg
QXJyYXlCYXNlOjplbmQ7CiB9OwogCi0KIGlubGluZSBPYmplY3RCYXNlOjppdGVyYXRvciBPYmpl
Y3RCYXNlOjpmaW5kKGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKICAgICByZXR1cm4gbV9tYXAuZmlu
ZChuYW1lKTsKQEAgLTM3OSwyMyArMzM4LDIwIEBAIGlubGluZSB2b2lkIE9iamVjdEJhc2U6OnNl
dFN0cmluZyhjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgc2V0
VmFsdWUobmFtZSwgVmFsdWU6OmNyZWF0ZSh2YWx1ZSkpOwogfQogCi1pbmxpbmUgdm9pZCBPYmpl
Y3RCYXNlOjpzZXRWYWx1ZShjb25zdCBTdHJpbmcmIG5hbWUsIFJlZlB0cjxWYWx1ZT4mJiB2YWx1
ZSkKK2lubGluZSB2b2lkIE9iamVjdEJhc2U6OnNldFZhbHVlKGNvbnN0IFN0cmluZyYgbmFtZSwg
UmVmPFZhbHVlPiYmIHZhbHVlKQogewotICAgIEFTU0VSVCh2YWx1ZSk7CiAgICAgaWYgKG1fbWFw
LnNldChuYW1lLCBXVEZNb3ZlKHZhbHVlKSkuaXNOZXdFbnRyeSkKICAgICAgICAgbV9vcmRlci5h
cHBlbmQobmFtZSk7CiB9CiAKLWlubGluZSB2b2lkIE9iamVjdEJhc2U6OnNldE9iamVjdChjb25z
dCBTdHJpbmcmIG5hbWUsIFJlZlB0cjxPYmplY3RCYXNlPiYmIHZhbHVlKQoraW5saW5lIHZvaWQg
T2JqZWN0QmFzZTo6c2V0T2JqZWN0KGNvbnN0IFN0cmluZyYgbmFtZSwgUmVmPE9iamVjdEJhc2U+
JiYgdmFsdWUpCiB7Ci0gICAgQVNTRVJUKHZhbHVlKTsKICAgICBpZiAobV9tYXAuc2V0KG5hbWUs
IFdURk1vdmUodmFsdWUpKS5pc05ld0VudHJ5KQogICAgICAgICBtX29yZGVyLmFwcGVuZChuYW1l
KTsKIH0KIAotaW5saW5lIHZvaWQgT2JqZWN0QmFzZTo6c2V0QXJyYXkoY29uc3QgU3RyaW5nJiBu
YW1lLCBSZWZQdHI8QXJyYXlCYXNlPiYmIHZhbHVlKQoraW5saW5lIHZvaWQgT2JqZWN0QmFzZTo6
c2V0QXJyYXkoY29uc3QgU3RyaW5nJiBuYW1lLCBSZWY8QXJyYXlCYXNlPiYmIHZhbHVlKQogewot
ICAgIEFTU0VSVCh2YWx1ZSk7CiAgICAgaWYgKG1fbWFwLnNldChuYW1lLCBXVEZNb3ZlKHZhbHVl
KSkuaXNOZXdFbnRyeSkKICAgICAgICAgbV9vcmRlci5hcHBlbmQobmFtZSk7CiB9CkBAIC00MjAs
MjYgKzM3NiwyMyBAQCBpbmxpbmUgdm9pZCBBcnJheUJhc2U6OnB1c2hTdHJpbmcoY29uc3QgU3Ry
aW5nJiB2YWx1ZSkKICAgICBtX21hcC5hcHBlbmQoVmFsdWU6OmNyZWF0ZSh2YWx1ZSkpOwogfQog
Ci1pbmxpbmUgdm9pZCBBcnJheUJhc2U6OnB1c2hWYWx1ZShSZWZQdHI8VmFsdWU+JiYgdmFsdWUp
CitpbmxpbmUgdm9pZCBBcnJheUJhc2U6OnB1c2hWYWx1ZShSZWY8VmFsdWU+JiYgdmFsdWUpCiB7
Ci0gICAgQVNTRVJUKHZhbHVlKTsKICAgICBtX21hcC5hcHBlbmQoV1RGTW92ZSh2YWx1ZSkpOwog
fQogCi1pbmxpbmUgdm9pZCBBcnJheUJhc2U6OnB1c2hPYmplY3QoUmVmUHRyPE9iamVjdEJhc2U+
JiYgdmFsdWUpCitpbmxpbmUgdm9pZCBBcnJheUJhc2U6OnB1c2hPYmplY3QoUmVmPE9iamVjdEJh
c2U+JiYgdmFsdWUpCiB7Ci0gICAgQVNTRVJUKHZhbHVlKTsKICAgICBtX21hcC5hcHBlbmQoV1RG
TW92ZSh2YWx1ZSkpOwogfQogCi1pbmxpbmUgdm9pZCBBcnJheUJhc2U6OnB1c2hBcnJheShSZWZQ
dHI8QXJyYXlCYXNlPiYmIHZhbHVlKQoraW5saW5lIHZvaWQgQXJyYXlCYXNlOjpwdXNoQXJyYXko
UmVmPEFycmF5QmFzZT4mJiB2YWx1ZSkKIHsKLSAgICBBU1NFUlQodmFsdWUpOwogICAgIG1fbWFw
LmFwcGVuZChXVEZNb3ZlKHZhbHVlKSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1jbGFz
cyBBcnJheU9mIDogcHVibGljIEFycmF5QmFzZSB7CitjbGFzcyBBcnJheU9mIGZpbmFsIDogcHVi
bGljIEFycmF5QmFzZSB7CiBwcml2YXRlOgogICAgIEFycmF5T2YoKSB7IH0KIApAQCAtNDUwLDcg
KzQwMyw3IEBAIHByaXZhdGU6CiAgICAgfQogCiBwdWJsaWM6Ci0gICAgdm9pZCBhZGRJdGVtKFJl
ZlB0cjxUPiYmIHZhbHVlKQorICAgIHZvaWQgYWRkSXRlbShSZWY8VD4mJiB2YWx1ZSkKICAgICB7
CiAgICAgICAgIGNhc3RlZEFycmF5KCkucHVzaFZhbHVlKFdURk1vdmUodmFsdWUpKTsKICAgICB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FwcGxpY2F0aW9ubWFuaWZlc3Qv
QXBwbGljYXRpb25NYW5pZmVzdFBhcnNlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2Fw
cGxpY2F0aW9ubWFuaWZlc3QvQXBwbGljYXRpb25NYW5pZmVzdFBhcnNlci5jcHAKaW5kZXggOGRj
NzZmYTJlNTllYTY3ZTAyMTczOGMzMTFhMzU3N2Y0ZDM2ZTY5MS4uZjg4Y2FkYTY2MGYzOWFkZWZh
MDA2ZDA5NWVjNTg3ZmIyOTM0NjIwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9hcHBsaWNhdGlvbm1hbmlmZXN0L0FwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXBwbGljYXRpb25tYW5pZmVzdC9BcHBsaWNhdGlvbk1h
bmlmZXN0UGFyc2VyLmNwcApAQCAtNTQsMTQgKzU0LDE0IEBAIEFwcGxpY2F0aW9uTWFuaWZlc3Qg
QXBwbGljYXRpb25NYW5pZmVzdFBhcnNlcjo6cGFyc2VNYW5pZmVzdChjb25zdCBTdHJpbmcmIHRl
eHQsCiB7CiAgICAgbV9tYW5pZmVzdFVSTCA9IG1hbmlmZXN0VVJMOwogCi0gICAgUmVmUHRyPEpT
T046OlZhbHVlPiBqc29uVmFsdWU7Ci0gICAgaWYgKCFKU09OOjpWYWx1ZTo6cGFyc2VKU09OKHRl
eHQsIGpzb25WYWx1ZSkpIHsKKyAgICBhdXRvIGpzb25WYWx1ZSA9IEpTT046OlZhbHVlOjpwYXJz
ZUpTT04odGV4dCk7CisgICAgaWYgKCFqc29uVmFsdWUpIHsKICAgICAgICAgbG9nRGV2ZWxvcGVy
V2FybmluZygiVGhlIG1hbmlmZXN0IGlzIG5vdCB2YWxpZCBKU09OIGRhdGEuIl9zKTsKICAgICAg
ICAganNvblZhbHVlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICB9CiAKLSAgICBSZWZQ
dHI8SlNPTjo6T2JqZWN0PiBtYW5pZmVzdDsKLSAgICBpZiAoIWpzb25WYWx1ZS0+YXNPYmplY3Qo
bWFuaWZlc3QpKSB7CisgICAgYXV0byBtYW5pZmVzdCA9IGpzb25WYWx1ZS0+YXNPYmplY3QoKTsK
KyAgICBpZiAoIW1hbmlmZXN0KSB7CiAgICAgICAgIGxvZ0RldmVsb3Blcldhcm5pbmcoIlRoZSBt
YW5pZmVzdCBpcyBub3QgYSBKU09OIHZhbHVlIG9mIHR5cGUgXCJvYmplY3RcIi4iX3MpOwogICAg
ICAgICBtYW5pZmVzdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgfQpAQCAtOTYsMTIg
Kzk2LDEyIEBAIHZvaWQgQXBwbGljYXRpb25NYW5pZmVzdFBhcnNlcjo6bG9nRGV2ZWxvcGVyV2Fy
bmluZyhjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCiAKIFVSTCBBcHBsaWNhdGlvbk1hbmlmZXN0UGFy
c2VyOjpwYXJzZVN0YXJ0VVJMKGNvbnN0IEpTT046Ok9iamVjdCYgbWFuaWZlc3QsIGNvbnN0IFVS
TCYgZG9jdW1lbnRVUkwpCiB7Ci0gICAgUmVmUHRyPEpTT046OlZhbHVlPiB2YWx1ZTsKLSAgICBp
ZiAoIW1hbmlmZXN0LmdldFZhbHVlKCJzdGFydF91cmwiLCB2YWx1ZSkpCisgICAgYXV0byB2YWx1
ZSA9IG1hbmlmZXN0LmdldFZhbHVlKCJzdGFydF91cmwiX3MpOworICAgIGlmICghdmFsdWUpCiAg
ICAgICAgIHJldHVybiBkb2N1bWVudFVSTDsKIAotICAgIFN0cmluZyBzdHJpbmdWYWx1ZTsKLSAg
ICBpZiAoIXZhbHVlLT5hc1N0cmluZyhzdHJpbmdWYWx1ZSkpIHsKKyAgICBhdXRvIHN0cmluZ1Zh
bHVlID0gdmFsdWUtPmFzU3RyaW5nKCk7CisgICAgaWYgKCFzdHJpbmdWYWx1ZSkgewogICAgICAg
ICBsb2dNYW5pZmVzdFByb3BlcnR5Tm90QVN0cmluZygic3RhcnRfdXJsIl9zKTsKICAgICAgICAg
cmV0dXJuIGRvY3VtZW50VVJMOwogICAgIH0KQEAgLTEyNywxMiArMTI3LDEyIEBAIFVSTCBBcHBs
aWNhdGlvbk1hbmlmZXN0UGFyc2VyOjpwYXJzZVN0YXJ0VVJMKGNvbnN0IEpTT046Ok9iamVjdCYg
bWFuaWZlc3QsIGNvbnN0CiAKIEFwcGxpY2F0aW9uTWFuaWZlc3Q6OkRpc3BsYXkgQXBwbGljYXRp
b25NYW5pZmVzdFBhcnNlcjo6cGFyc2VEaXNwbGF5KGNvbnN0IEpTT046Ok9iamVjdCYgbWFuaWZl
c3QpCiB7Ci0gICAgUmVmUHRyPEpTT046OlZhbHVlPiB2YWx1ZTsKLSAgICBpZiAoIW1hbmlmZXN0
LmdldFZhbHVlKCJkaXNwbGF5Il9zLCB2YWx1ZSkpCisgICAgYXV0byB2YWx1ZSA9IG1hbmlmZXN0
LmdldFZhbHVlKCJkaXNwbGF5Il9zKTsKKyAgICBpZiAoIXZhbHVlKQogICAgICAgICByZXR1cm4g
QXBwbGljYXRpb25NYW5pZmVzdDo6RGlzcGxheTo6QnJvd3NlcjsKIAotICAgIFN0cmluZyBzdHJp
bmdWYWx1ZTsKLSAgICBpZiAoIXZhbHVlLT5hc1N0cmluZyhzdHJpbmdWYWx1ZSkpIHsKKyAgICBh
dXRvIHN0cmluZ1ZhbHVlID0gdmFsdWUtPmFzU3RyaW5nKCk7CisgICAgaWYgKCFzdHJpbmdWYWx1
ZSkgewogICAgICAgICBsb2dNYW5pZmVzdFByb3BlcnR5Tm90QVN0cmluZygiZGlzcGxheSJfcyk7
CiAgICAgICAgIHJldHVybiBBcHBsaWNhdGlvbk1hbmlmZXN0OjpEaXNwbGF5OjpCcm93c2VyOwog
ICAgIH0KQEAgLTE5NSwxMiArMTk1LDEyIEBAIFVSTCBBcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2Vy
OjpwYXJzZVNjb3BlKGNvbnN0IEpTT046Ok9iamVjdCYgbWFuaWZlc3QsIGNvbnN0IFVSCiB7CiAg
ICAgVVJMIGRlZmF1bHRTY29wZSB7IHN0YXJ0VVJMLCAiLi8iIH07CiAKLSAgICBSZWZQdHI8SlNP
Tjo6VmFsdWU+IHZhbHVlOwotICAgIGlmICghbWFuaWZlc3QuZ2V0VmFsdWUoInNjb3BlIiwgdmFs
dWUpKQorICAgIGF1dG8gdmFsdWUgPSBtYW5pZmVzdC5nZXRWYWx1ZSgic2NvcGUiKTsKKyAgICBp
ZiAoIXZhbHVlKQogICAgICAgICByZXR1cm4gZGVmYXVsdFNjb3BlOwogCi0gICAgU3RyaW5nIHN0
cmluZ1ZhbHVlOwotICAgIGlmICghdmFsdWUtPmFzU3RyaW5nKHN0cmluZ1ZhbHVlKSkgeworICAg
IGF1dG8gc3RyaW5nVmFsdWUgPSB2YWx1ZS0+YXNTdHJpbmcoKTsKKyAgICBpZiAoIXN0cmluZ1Zh
bHVlKSB7CiAgICAgICAgIGxvZ01hbmlmZXN0UHJvcGVydHlOb3RBU3RyaW5nKCJzY29wZSJfcyk7
CiAgICAgICAgIHJldHVybiBkZWZhdWx0U2NvcGU7CiAgICAgfQpAQCAtMjMxLDEyICsyMzEsMTIg
QEAgVVJMIEFwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXI6OnBhcnNlU2NvcGUoY29uc3QgSlNPTjo6
T2JqZWN0JiBtYW5pZmVzdCwgY29uc3QgVVIKIAogU3RyaW5nIEFwcGxpY2F0aW9uTWFuaWZlc3RQ
YXJzZXI6OnBhcnNlR2VuZXJpY1N0cmluZyhjb25zdCBKU09OOjpPYmplY3QmIG1hbmlmZXN0LCBj
b25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSkKIHsKLSAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHZh
bHVlOwotICAgIGlmICghbWFuaWZlc3QuZ2V0VmFsdWUocHJvcGVydHlOYW1lLCB2YWx1ZSkpCisg
ICAgYXV0byB2YWx1ZSA9IG1hbmlmZXN0LmdldFZhbHVlKHByb3BlcnR5TmFtZSk7CisgICAgaWYg
KCF2YWx1ZSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIFN0cmluZyBzdHJpbmdWYWx1ZTsK
LSAgICBpZiAoIXZhbHVlLT5hc1N0cmluZyhzdHJpbmdWYWx1ZSkpIHsKKyAgICBhdXRvIHN0cmlu
Z1ZhbHVlID0gdmFsdWUtPmFzU3RyaW5nKCk7CisgICAgaWYgKCFzdHJpbmdWYWx1ZSkgewogICAg
ICAgICBsb2dNYW5pZmVzdFByb3BlcnR5Tm90QVN0cmluZyhwcm9wZXJ0eU5hbWUpOwogICAgICAg
ICByZXR1cm4geyB9OwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
ZW5jcnlwdGVkbWVkaWEvSW5pdERhdGFSZWdpc3RyeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2VuY3J5cHRlZG1lZGlhL0luaXREYXRhUmVnaXN0cnkuY3BwCmluZGV4IDNiMjVkMDZiMTIz
YTFhNTFhMGEyYWNmYjRmNjU2ZjhkOTRhZGIzZmMuLjZhYjJmODc4YTNmOGNhOThlODJiMGU0MmU1
ZjBiYWFhMjI4YjFjNWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW5jcnlw
dGVkbWVkaWEvSW5pdERhdGFSZWdpc3RyeS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9lbmNyeXB0ZWRtZWRpYS9Jbml0RGF0YVJlZ2lzdHJ5LmNwcApAQCAtNjIsMjIgKzYyLDIyIEBA
IHN0YXRpYyBPcHRpb25hbDxWZWN0b3I8UmVmPFNoYXJlZEJ1ZmZlcj4+PiBleHRyYWN0S2V5SURz
S2V5aWRzKGNvbnN0IFNoYXJlZEJ1ZmZlCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAg
ICAgU3RyaW5nIGpzb24geyBidWZmZXIuZGF0YSgpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oYnVm
ZmVyLnNpemUoKSkgfTsKIAotICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gdmFsdWU7Ci0gICAgaWYg
KCFKU09OOjpWYWx1ZTo6cGFyc2VKU09OKGpzb24sIHZhbHVlKSkKKyAgICBhdXRvIHZhbHVlID0g
SlNPTjo6VmFsdWU6OnBhcnNlSlNPTihqc29uKTsKKyAgICBpZiAoIXZhbHVlKQogICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gb2JqZWN0Owot
ICAgIGlmICghdmFsdWUtPmFzT2JqZWN0KG9iamVjdCkpCisgICAgYXV0byBvYmplY3QgPSB2YWx1
ZS0+YXNPYmplY3QoKTsKKyAgICBpZiAoIW9iamVjdCkKICAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKIAotICAgIFJlZlB0cjxKU09OOjpBcnJheT4ga2lkc0FycmF5OwotICAgIGlmICghb2Jq
ZWN0LT5nZXRBcnJheSgia2lkcyIsIGtpZHNBcnJheSkpCisgICAgYXV0byBraWRzQXJyYXkgPSBv
YmplY3QtPmdldEFycmF5KCJraWRzIl9zKTsKKyAgICBpZiAoIWtpZHNBcnJheSkKICAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIFZlY3RvcjxSZWY8U2hhcmVkQnVmZmVyPj4ga2V5
SURzOwogICAgIGZvciAoYXV0byYgdmFsdWUgOiAqa2lkc0FycmF5KSB7Ci0gICAgICAgIFN0cmlu
ZyBrZXlJRDsKLSAgICAgICAgaWYgKCF2YWx1ZS0+YXNTdHJpbmcoa2V5SUQpKQorICAgICAgICBh
dXRvIGtleUlEID0gdmFsdWUtPmFzU3RyaW5nKCk7CisgICAgICAgIGlmICgha2V5SUQpCiAgICAg
ICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBWZWN0b3I8Y2hhcj4ga2V5SUREYXRhOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvbW1hbmRMaW5lQVBJSG9zdC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29tbWFuZExpbmVBUElIb3N0LmNwcAppbmRleCBk
Y2UzNTllNzY4ZWY5YTEzYTZjNmRlMTZkMWY4ZDNjOGJiZmY3YTk3Li45NGQwM2Q4NWQ2ZGE5ZjRm
ODhmOGNkMTJlNGJmZmJkMzNiNGRjNTY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvQ29tbWFuZExpbmVBUElIb3N0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvQ29tbWFuZExpbmVBUElIb3N0LmNwcApAQCAtNzMsNyArNzMsNyBAQCB2b2lkIENvbW1hbmRM
aW5lQVBJSG9zdDo6ZGlzY29ubmVjdCgpCiAgICAgbV9pbnN0cnVtZW50aW5nQWdlbnRzID0gbnVs
bHB0cjsKIH0KIAotdm9pZCBDb21tYW5kTGluZUFQSUhvc3Q6Omluc3BlY3QoSlNDOjpKU0dsb2Jh
bE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHZhbHVlVG9JbnNwZWN0
LCBKU0M6OkpTVmFsdWUgaGludHNWYWx1ZSkKK3ZvaWQgQ29tbWFuZExpbmVBUElIb3N0OjppbnNw
ZWN0KEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1
ZSBvYmplY3QsIEpTQzo6SlNWYWx1ZSBoaW50cykKIHsKICAgICBpZiAoIW1faW5zdHJ1bWVudGlu
Z0FnZW50cykKICAgICAgICAgcmV0dXJuOwpAQCAtODIsMTIgKzgyLDIwIEBAIHZvaWQgQ29tbWFu
ZExpbmVBUElIb3N0OjppbnNwZWN0KEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxP
YmplY3QsIEpTQzo6CiAgICAgaWYgKCFpbnNwZWN0b3JBZ2VudCkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gaGludHNPYmplY3Q7Ci0gICAgaWYgKCFJbnNwZWN0
b3I6OnRvSW5zcGVjdG9yVmFsdWUoJmxleGljYWxHbG9iYWxPYmplY3QsIGhpbnRzVmFsdWUpLT5h
c09iamVjdChoaW50c09iamVjdCkpCisgICAgYXV0byBvYmplY3RWYWx1ZSA9IEluc3BlY3Rvcjo6
dG9JbnNwZWN0b3JWYWx1ZSgmbGV4aWNhbEdsb2JhbE9iamVjdCwgb2JqZWN0KTsKKyAgICBpZiAo
IW9iamVjdFZhbHVlKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIHJlbW90ZU9iamVjdCA9
IEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0
Pjo6cnVudGltZUNhc3QoSW5zcGVjdG9yOjp0b0luc3BlY3RvclZhbHVlKCZsZXhpY2FsR2xvYmFs
T2JqZWN0LCB2YWx1ZVRvSW5zcGVjdCkpOwotICAgIGluc3BlY3RvckFnZW50LT5pbnNwZWN0KFdU
Rk1vdmUocmVtb3RlT2JqZWN0KSwgV1RGTW92ZShoaW50c09iamVjdCkpOworICAgIGF1dG8gaGlu
dHNWYWx1ZSA9IEluc3BlY3Rvcjo6dG9JbnNwZWN0b3JWYWx1ZSgmbGV4aWNhbEdsb2JhbE9iamVj
dCwgaGludHMpOworICAgIGlmICghaGludHNWYWx1ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
YXV0byBoaW50c09iamVjdCA9IGhpbnRzVmFsdWUtPmFzT2JqZWN0KCk7CisgICAgaWYgKCFoaW50
c09iamVjdCkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byByZW1vdGVPYmplY3QgPSBQcm90
b2NvbDo6QmluZGluZ1RyYWl0czxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0Pjo6cnVu
dGltZUNhc3Qob2JqZWN0VmFsdWUucmVsZWFzZU5vbk51bGwoKSk7CisgICAgaW5zcGVjdG9yQWdl
bnQtPmluc3BlY3QoV1RGTW92ZShyZW1vdGVPYmplY3QpLCBoaW50c09iamVjdC5yZWxlYXNlTm9u
TnVsbCgpKTsKIH0KIAogQ29tbWFuZExpbmVBUElIb3N0OjpFdmVudExpc3RlbmVyc1JlY29yZCBD
b21tYW5kTGluZUFQSUhvc3Q6OmdldEV2ZW50TGlzdGVuZXJzKEpTR2xvYmFsT2JqZWN0JiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBFdmVudFRhcmdldCYgdGFyZ2V0KQpAQCAtMTM2LDggKzE0NCw3IEBA
IHZvaWQgQ29tbWFuZExpbmVBUElIb3N0OjpjbGVhckNvbnNvbGVNZXNzYWdlcygpCiAgICAgaWYg
KCFjb25zb2xlQWdlbnQpCiAgICAgICAgIHJldHVybjsKIAotICAgIEVycm9yU3RyaW5nIGlnbm9y
ZWQ7Ci0gICAgY29uc29sZUFnZW50LT5jbGVhck1lc3NhZ2VzKGlnbm9yZWQpOworICAgIGNvbnNv
bGVBZ2VudC0+Y2xlYXJNZXNzYWdlcygpOwogfQogCiB2b2lkIENvbW1hbmRMaW5lQVBJSG9zdDo6
Y29weVRleHQoY29uc3QgU3RyaW5nJiB0ZXh0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckF1ZGl0UmVzb3VyY2VzT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBdWRpdFJlc291cmNlc09iamVjdC5jcHAKaW5kZXggMDAx
NDhlMGZmNDk0NGFiZDA5MGI4MzZlYTkzMDVlY2Y3NDhjNmZhNC4uYjdmZjBlMTA0YTU1MDY5MTZj
Y2ZhOWQyMzBjOGIyYmJiMzYzZGYzYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckF1ZGl0UmVzb3VyY2VzT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yQXVkaXRSZXNvdXJjZXNPYmplY3QuY3BwCkBAIC0xMDUsNyAr
MTA1LDcgQEAgRXhjZXB0aW9uT3I8SW5zcGVjdG9yQXVkaXRSZXNvdXJjZXNPYmplY3Q6OlJlc291
cmNlQ29udGVudD4gSW5zcGVjdG9yQXVkaXRSZXNvdXIKICAgICBpZiAoIWNhY2hlZFJlc291cmNl
KQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgTm90Rm91bmRFcnJvciwgbWFrZVN0cmluZygi
VW5rbm93biBpZGVudGlmaWVyICJfcywgaWQpIH07CiAKLSAgICBFcnJvclN0cmluZyBlcnJvclN0
cmluZzsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CiAgICAgUmVzb3Vy
Y2VDb250ZW50IHJlc291cmNlQ29udGVudDsKICAgICBJbnNwZWN0b3JQYWdlQWdlbnQ6OnJlc291
cmNlQ29udGVudChlcnJvclN0cmluZywgZnJhbWUsIGNhY2hlZFJlc291cmNlLT51cmwoKSwgJnJl
c291cmNlQ29udGVudC5kYXRhLCAmcmVzb3VyY2VDb250ZW50LmJhc2U2NEVuY29kZWQpOwogICAg
IGlmICghZXJyb3JTdHJpbmcuaXNFbXB0eSgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckNhbnZhcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yQ2FudmFzLmNwcAppbmRleCA1YzU3YjYwNTc0ZWNhNTcyMmQxNTQ5OTJhZmRiZGM3
NTVlNjMxOTlmLi5hNjFiOGVlZGEwNDE2Y2Y3ZjE1NGFhMDExYzg2MGNlOGZiMGIzMjViIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzLmNwcApAQCAtMzU2LDEz
ICszNTYsMTMgQEAgdm9pZCBJbnNwZWN0b3JDYW52YXM6OnJlY29yZEFjdGlvbihjb25zdCBTdHJp
bmcmIG5hbWUsIHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxSZWMKICAgICB9CiAKICAgICBpZiAoIW1f
ZnJhbWVzKQotICAgICAgICBtX2ZyYW1lcyA9IEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90
b2NvbDo6UmVjb3JkaW5nOjpGcmFtZT46OmNyZWF0ZSgpOworICAgICAgICBtX2ZyYW1lcyA9IEpT
T046OkFycmF5T2Y8UHJvdG9jb2w6OlJlY29yZGluZzo6RnJhbWU+OjpjcmVhdGUoKTsKIAogICAg
IGlmICghbV9jdXJyZW50QWN0aW9ucykgewogICAgICAgICBtX2N1cnJlbnRBY3Rpb25zID0gSlNP
Tjo6QXJyYXlPZjxKU09OOjpWYWx1ZT46OmNyZWF0ZSgpOwogCi0gICAgICAgIGF1dG8gZnJhbWUg
PSBJbnNwZWN0b3I6OlByb3RvY29sOjpSZWNvcmRpbmc6OkZyYW1lOjpjcmVhdGUoKQotICAgICAg
ICAgICAgLnNldEFjdGlvbnMobV9jdXJyZW50QWN0aW9ucykKKyAgICAgICAgYXV0byBmcmFtZSA9
IFByb3RvY29sOjpSZWNvcmRpbmc6OkZyYW1lOjpjcmVhdGUoKQorICAgICAgICAgICAgLnNldEFj
dGlvbnMoKm1fY3VycmVudEFjdGlvbnMpCiAgICAgICAgICAgICAucmVsZWFzZSgpOwogCiAgICAg
ICAgIG1fZnJhbWVzLT5hZGRJdGVtKFdURk1vdmUoZnJhbWUpKTsKQEAgLTM3NSw3ICszNzUsNyBA
QCB2b2lkIEluc3BlY3RvckNhbnZhczo6cmVjb3JkQWN0aW9uKGNvbnN0IFN0cmluZyYgbmFtZSwg
c3RkOjppbml0aWFsaXplcl9saXN0PFJlYwogCiAgICAgbV9sYXN0UmVjb3JkZWRBY3Rpb24gPSBi
dWlsZEFjdGlvbihuYW1lLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKICAgICBtX2J1ZmZlclVzZWQg
Kz0gbV9sYXN0UmVjb3JkZWRBY3Rpb24tPm1lbW9yeUNvc3QoKTsKLSAgICBtX2N1cnJlbnRBY3Rp
b25zLT5hZGRJdGVtKG1fbGFzdFJlY29yZGVkQWN0aW9uLmdldCgpKTsKKyAgICBtX2N1cnJlbnRB
Y3Rpb25zLT5hZGRJdGVtKCptX2xhc3RSZWNvcmRlZEFjdGlvbik7CiAKICAgICBhdXRvKiBjb250
ZXh0ID0gY2FudmFzQ29udGV4dCgpOwogICAgIEFTU0VSVChjb250ZXh0KTsKQEAgLTM5OCw3ICsz
OTgsNyBAQCB2b2lkIEluc3BlY3RvckNhbnZhczo6ZmluYWxpemVGcmFtZSgpCiAgICAgYXBwZW5k
QWN0aW9uU25hcHNob3RJZk5lZWRlZCgpOwogCiAgICAgaWYgKG1fZnJhbWVzICYmIG1fZnJhbWVz
LT5sZW5ndGgoKSAmJiAhc3RkOjppc25hbihtX2N1cnJlbnRGcmFtZVN0YXJ0VGltZSkpIHsKLSAg
ICAgICAgYXV0byBjdXJyZW50RnJhbWUgPSBzdGF0aWNfY2FzdDxJbnNwZWN0b3I6OlByb3RvY29s
OjpSZWNvcmRpbmc6OkZyYW1lKj4obV9mcmFtZXMtPmdldChtX2ZyYW1lcy0+bGVuZ3RoKCkgLSAx
KS5nZXQoKSk7CisgICAgICAgIGF1dG8gY3VycmVudEZyYW1lID0gc3RhdGljX3JlZmVyZW5jZV9j
YXN0PFByb3RvY29sOjpSZWNvcmRpbmc6OkZyYW1lPihtX2ZyYW1lcy0+Z2V0KG1fZnJhbWVzLT5s
ZW5ndGgoKSAtIDEpKTsKICAgICAgICAgY3VycmVudEZyYW1lLT5zZXREdXJhdGlvbigoTW9ub3Rv
bmljVGltZTo6bm93KCkgLSBtX2N1cnJlbnRGcmFtZVN0YXJ0VGltZSkubWlsbGlzZWNvbmRzKCkp
OwogCiAgICAgICAgIG1fY3VycmVudEZyYW1lU3RhcnRUaW1lID0gTW9ub3RvbmljVGltZTo6bmFu
KCk7CkBAIC00MTIsNyArNDEyLDggQEAgdm9pZCBJbnNwZWN0b3JDYW52YXM6Om1hcmtDdXJyZW50
RnJhbWVJbmNvbXBsZXRlKCkKICAgICBpZiAoIW1fY3VycmVudEFjdGlvbnMgfHwgIW1fZnJhbWVz
IHx8ICFtX2ZyYW1lcy0+bGVuZ3RoKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIHN0YXRpY19j
YXN0PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlY29yZGluZzo6RnJhbWUqPihtX2ZyYW1lcy0+Z2V0
KG1fZnJhbWVzLT5sZW5ndGgoKSAtIDEpLmdldCgpKS0+c2V0SW5jb21wbGV0ZSh0cnVlKTsKKyAg
ICBhdXRvIGN1cnJlbnRGcmFtZSA9IHN0YXRpY19yZWZlcmVuY2VfY2FzdDxQcm90b2NvbDo6UmVj
b3JkaW5nOjpGcmFtZT4obV9mcmFtZXMtPmdldChtX2ZyYW1lcy0+bGVuZ3RoKCkgLSAxKSk7Cisg
ICAgY3VycmVudEZyYW1lLT5zZXRJbmNvbXBsZXRlKHRydWUpOwogfQogCiB2b2lkIEluc3BlY3Rv
ckNhbnZhczo6c2V0QnVmZmVyTGltaXQobG9uZyBtZW1vcnlMaW1pdCkKQEAgLTQzOCwyOSArNDM5
LDI5IEBAIGJvb2wgSW5zcGVjdG9yQ2FudmFzOjpvdmVyRnJhbWVDb3VudCgpIGNvbnN0CiAgICAg
cmV0dXJuIG1fZnJhbWVDb3VudCAmJiBtX2ZyYW1lc0NhcHR1cmVkID49IG1fZnJhbWVDb3VudC52
YWx1ZSgpOwogfQogCi1SZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q2FudmFzOjpDYW52YXM+IElu
c3BlY3RvckNhbnZhczo6YnVpbGRPYmplY3RGb3JDYW52YXMoYm9vbCBjYXB0dXJlQmFja3RyYWNl
KQorUmVmPFByb3RvY29sOjpDYW52YXM6OkNhbnZhcz4gSW5zcGVjdG9yQ2FudmFzOjpidWlsZE9i
amVjdEZvckNhbnZhcyhib29sIGNhcHR1cmVCYWNrdHJhY2UpCiB7Ci0gICAgdXNpbmcgQ29udGV4
dFR5cGVUeXBlID0gT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q2FudmFzOjpDb250ZXh0
VHlwZT47CisgICAgdXNpbmcgQ29udGV4dFR5cGVUeXBlID0gT3B0aW9uYWw8UHJvdG9jb2w6OkNh
bnZhczo6Q29udGV4dFR5cGU+OwogICAgIGF1dG8gY29udGV4dFR5cGUgPSBXVEY6OnN3aXRjaE9u
KG1fY29udGV4dCwKICAgICAgICAgW10gKHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8Q2FudmFzUmVu
ZGVyaW5nQ29udGV4dD4gY29udGV4dFdyYXBwZXIpIC0+IENvbnRleHRUeXBlVHlwZSB7CiAgICAg
ICAgICAgICBhdXRvJiBjb250ZXh0ID0gY29udGV4dFdyYXBwZXIuZ2V0KCk7CiAgICAgICAgICAg
ICBpZiAoaXM8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPihjb250ZXh0KSkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q2FudmFzOjpDb250ZXh0VHlwZTo6Q2Fu
dmFzMkQ7CisgICAgICAgICAgICAgICAgcmV0dXJuIFByb3RvY29sOjpDYW52YXM6OkNvbnRleHRU
eXBlOjpDYW52YXMyRDsKICAgICAgICAgICAgIGlmIChpczxJbWFnZUJpdG1hcFJlbmRlcmluZ0Nv
bnRleHQ+KGNvbnRleHQpKQotICAgICAgICAgICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpDYW52YXM6OkNvbnRleHRUeXBlOjpCaXRtYXBSZW5kZXJlcjsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gUHJvdG9jb2w6OkNhbnZhczo6Q29udGV4dFR5cGU6OkJpdG1hcFJlbmRlcmVyOwog
I2lmIEVOQUJMRShXRUJHTCkKICAgICAgICAgICAgIGlmIChpczxXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ+KGNvbnRleHQpKQotICAgICAgICAgICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29s
OjpDYW52YXM6OkNvbnRleHRUeXBlOjpXZWJHTDsKKyAgICAgICAgICAgICAgICByZXR1cm4gUHJv
dG9jb2w6OkNhbnZhczo6Q29udGV4dFR5cGU6OldlYkdMOwogI2VuZGlmCiAjaWYgRU5BQkxFKFdF
QkdMMikKICAgICAgICAgICAgIGlmIChpczxXZWJHTDJSZW5kZXJpbmdDb250ZXh0Pihjb250ZXh0
KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q2FudmFzOjpD
b250ZXh0VHlwZTo6V2ViR0wyOworICAgICAgICAgICAgICAgIHJldHVybiBQcm90b2NvbDo6Q2Fu
dmFzOjpDb250ZXh0VHlwZTo6V2ViR0wyOwogI2VuZGlmCiAgICAgICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwogICAgICAgICB9LAogI2lmIEVOQUJMRShXRUJHUFUpCiAgICAgICAgIFtdIChz
dGQ6OnJlZmVyZW5jZV93cmFwcGVyPFdlYkdQVURldmljZT4pIHsKLSAgICAgICAgICAgIHJldHVy
biBJbnNwZWN0b3I6OlByb3RvY29sOjpDYW52YXM6OkNvbnRleHRUeXBlOjpXZWJHUFU7CisgICAg
ICAgICAgICByZXR1cm4gUHJvdG9jb2w6OkNhbnZhczo6Q29udGV4dFR5cGU6OldlYkdQVTsKICAg
ICAgICAgfSwKICNlbmRpZgogICAgICAgICBbXSAoTW9ub3N0YXRlKSB7CkBAIC00NzAsMTAgKzQ3
MSwxMCBAQCBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q2FudmFzOjpDYW52YXM+IEluc3BlY3Rv
ckNhbnZhczo6YnVpbGRPYmplY3RGb3JDYW52YXMoYgogICAgICk7CiAgICAgaWYgKCFjb250ZXh0
VHlwZSkgewogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgY29udGV4dFR5
cGUgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpDYW52YXM6OkNvbnRleHRUeXBlOjpDYW52YXMyRDsK
KyAgICAgICAgY29udGV4dFR5cGUgPSBQcm90b2NvbDo6Q2FudmFzOjpDb250ZXh0VHlwZTo6Q2Fu
dmFzMkQ7CiAgICAgfQogCi0gICAgYXV0byBjYW52YXMgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpD
YW52YXM6OkNhbnZhczo6Y3JlYXRlKCkKKyAgICBhdXRvIGNhbnZhcyA9IFByb3RvY29sOjpDYW52
YXM6OkNhbnZhczo6Y3JlYXRlKCkKICAgICAgICAgLnNldENhbnZhc0lkKG1faWRlbnRpZmllcikK
ICAgICAgICAgLnNldENvbnRleHRUeXBlKGNvbnRleHRUeXBlLnZhbHVlKCkpCiAgICAgICAgIC5y
ZWxlYXNlKCk7CkBAIC00ODYsMTIgKzQ4NywxMiBAQCBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6
Q2FudmFzOjpDYW52YXM+IEluc3BlY3RvckNhbnZhczo6YnVpbGRPYmplY3RGb3JDYW52YXMoYgog
ICAgICAgICAvLyBGSVhNRTogPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzE3ODI4Mj4gV2ViIEluc3Bl
Y3Rvcjogc2VuZCBhIERPTSBub2RlIHdpdGggZWFjaCBDYW52YXMgcGF5bG9hZCBhbmQgZWxpbWlu
YXRlIENhbnZhcy5yZXF1ZXN0Tm9kZQogICAgIH0KIAotICAgIHVzaW5nIENvbnRleHRBdHRyaWJ1
dGVzVHlwZSA9IFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDYW52YXM6OkNvbnRleHRBdHRy
aWJ1dGVzPjsKKyAgICB1c2luZyBDb250ZXh0QXR0cmlidXRlc1R5cGUgPSBSZWZQdHI8UHJvdG9j
b2w6OkNhbnZhczo6Q29udGV4dEF0dHJpYnV0ZXM+OwogICAgIGF1dG8gY29udGV4dEF0dHJpYnV0
ZXMgPSBXVEY6OnN3aXRjaE9uKG1fY29udGV4dCwKICAgICAgICAgW10gKHN0ZDo6cmVmZXJlbmNl
X3dyYXBwZXI8Q2FudmFzUmVuZGVyaW5nQ29udGV4dD4gY29udGV4dFdyYXBwZXIpIC0+IENvbnRl
eHRBdHRyaWJ1dGVzVHlwZSB7CiAgICAgICAgICAgICBhdXRvJiBjb250ZXh0ID0gY29udGV4dFdy
YXBwZXIuZ2V0KCk7CiAgICAgICAgICAgICBpZiAoaXM8SW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250
ZXh0Pihjb250ZXh0KSkgewotICAgICAgICAgICAgICAgIGF1dG8gY29udGV4dEF0dHJpYnV0ZXNQ
YXlsb2FkID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q2FudmFzOjpDb250ZXh0QXR0cmlidXRlczo6
Y3JlYXRlKCkKKyAgICAgICAgICAgICAgICBhdXRvIGNvbnRleHRBdHRyaWJ1dGVzUGF5bG9hZCA9
IFByb3RvY29sOjpDYW52YXM6OkNvbnRleHRBdHRyaWJ1dGVzOjpjcmVhdGUoKQogICAgICAgICAg
ICAgICAgICAgICAucmVsZWFzZSgpOwogICAgICAgICAgICAgICAgIGNvbnRleHRBdHRyaWJ1dGVz
UGF5bG9hZC0+c2V0QWxwaGEoZG93bmNhc3Q8SW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0Pihj
b250ZXh0KS5oYXNBbHBoYSgpKTsKICAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dEF0dHJp
YnV0ZXNQYXlsb2FkOwpAQCAtNTAwLDcgKzUwMSw3IEBAIFJlZjxJbnNwZWN0b3I6OlByb3RvY29s
OjpDYW52YXM6OkNhbnZhcz4gSW5zcGVjdG9yQ2FudmFzOjpidWlsZE9iamVjdEZvckNhbnZhcyhi
CiAjaWYgRU5BQkxFKFdFQkdMKQogICAgICAgICAgICAgaWYgKGlzPFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U+KGNvbnRleHQpKSB7CiAgICAgICAgICAgICAgICAgaWYgKGNvbnN0IGF1dG8mIGF0
dHJpYnV0ZXMgPSBkb3duY2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlPihjb250ZXh0KS5n
ZXRDb250ZXh0QXR0cmlidXRlcygpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gY29udGV4
dEF0dHJpYnV0ZXNQYXlsb2FkID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q2FudmFzOjpDb250ZXh0
QXR0cmlidXRlczo6Y3JlYXRlKCkKKyAgICAgICAgICAgICAgICAgICAgYXV0byBjb250ZXh0QXR0
cmlidXRlc1BheWxvYWQgPSBQcm90b2NvbDo6Q2FudmFzOjpDb250ZXh0QXR0cmlidXRlczo6Y3Jl
YXRlKCkKICAgICAgICAgICAgICAgICAgICAgICAgIC5yZWxlYXNlKCk7CiAgICAgICAgICAgICAg
ICAgICAgIGNvbnRleHRBdHRyaWJ1dGVzUGF5bG9hZC0+c2V0QWxwaGEoYXR0cmlidXRlcy0+YWxw
aGEpOwogICAgICAgICAgICAgICAgICAgICBjb250ZXh0QXR0cmlidXRlc1BheWxvYWQtPnNldERl
cHRoKGF0dHJpYnV0ZXMtPmRlcHRoKTsKQEAgLTUzMCw3ICs1MzEsNyBAQCBSZWY8SW5zcGVjdG9y
OjpQcm90b2NvbDo6Q2FudmFzOjpDYW52YXM+IEluc3BlY3RvckNhbnZhczo6YnVpbGRPYmplY3RG
b3JDYW52YXMoYgogICAgICAgICBbXSAoc3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxXZWJHUFVEZXZp
Y2U+IGRldmljZVdyYXBwZXIpIC0+IENvbnRleHRBdHRyaWJ1dGVzVHlwZSB7CiAgICAgICAgICAg
ICBhdXRvJiBkZXZpY2UgPSBkZXZpY2VXcmFwcGVyLmdldCgpOwogICAgICAgICAgICAgaWYgKGNv
bnN0IGF1dG8mIG9wdGlvbnMgPSBkZXZpY2UuYWRhcHRlcigpLm9wdGlvbnMoKSkgewotICAgICAg
ICAgICAgICAgIGF1dG8gY29udGV4dEF0dHJpYnV0ZXNQYXlsb2FkID0gSW5zcGVjdG9yOjpQcm90
b2NvbDo6Q2FudmFzOjpDb250ZXh0QXR0cmlidXRlczo6Y3JlYXRlKCkKKyAgICAgICAgICAgICAg
ICBhdXRvIGNvbnRleHRBdHRyaWJ1dGVzUGF5bG9hZCA9IFByb3RvY29sOjpDYW52YXM6OkNvbnRl
eHRBdHRyaWJ1dGVzOjpjcmVhdGUoKQogICAgICAgICAgICAgICAgICAgICAucmVsZWFzZSgpOwog
ICAgICAgICAgICAgICAgIGlmIChjb25zdCBhdXRvJiBwb3dlclByZWZlcmVuY2UgPSBvcHRpb25z
LT5wb3dlclByZWZlcmVuY2UpIHsKICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChwb3dlclBy
ZWZlcmVuY2UudmFsdWUoKSkgewpAQCAtNTU0LDcgKzU1NSw3IEBAIFJlZjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpDYW52YXM6OkNhbnZhcz4gSW5zcGVjdG9yQ2FudmFzOjpidWlsZE9iamVjdEZvckNh
bnZhcyhiCiAgICAgICAgIH0KICAgICApOwogICAgIGlmIChjb250ZXh0QXR0cmlidXRlcykKLSAg
ICAgICAgY2FudmFzLT5zZXRDb250ZXh0QXR0cmlidXRlcyhXVEZNb3ZlKGNvbnRleHRBdHRyaWJ1
dGVzKSk7CisgICAgICAgIGNhbnZhcy0+c2V0Q29udGV4dEF0dHJpYnV0ZXMoY29udGV4dEF0dHJp
YnV0ZXMucmVsZWFzZU5vbk51bGwoKSk7CiAKICAgICAvLyBGSVhNRTogPGh0dHBzOi8vd2Via2l0
Lm9yZy9iLzE4MDgzMz4gV2ViIEluc3BlY3Rvcjogc3VwcG9ydCBPZmZzY3JlZW5DYW52YXMgZm9y
IENhbnZhcyByZWxhdGVkIG9wZXJhdGlvbnMKIApAQCAtNTcxLDcgKzU3Miw3IEBAIFJlZjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpDYW52YXM6OkNhbnZhcz4gSW5zcGVjdG9yQ2FudmFzOjpidWlsZE9i
amVjdEZvckNhbnZhcyhiCiAgICAgcmV0dXJuIGNhbnZhczsKIH0KIAotUmVmPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlJlY29yZGluZzo6UmVjb3JkaW5nPiBJbnNwZWN0b3JDYW52YXM6OnJlbGVhc2VP
YmplY3RGb3JSZWNvcmRpbmcoKQorUmVmPFByb3RvY29sOjpSZWNvcmRpbmc6OlJlY29yZGluZz4g
SW5zcGVjdG9yQ2FudmFzOjpyZWxlYXNlT2JqZWN0Rm9yUmVjb3JkaW5nKCkKIHsKICAgICBBU1NF
UlQoIW1fY3VycmVudEFjdGlvbnMpOwogICAgIEFTU0VSVCghbV9sYXN0UmVjb3JkZWRBY3Rpb24p
OwpAQCAtNTgxLDI2ICs1ODIsMjYgQEAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlY29yZGlu
Zzo6UmVjb3JkaW5nPiBJbnNwZWN0b3JDYW52YXM6OnJlbGVhc2VPYmplY3RGb3IKICAgICBBU1NF
UlQoY29udGV4dCk7CiAgICAgLy8gRklYTUU6IDxodHRwczovL3dlYmtpdC5vcmcvYi8yMDE2NTE+
IFdlYiBJbnNwZWN0b3I6IENhbnZhczogc3VwcG9ydCBjYW52YXMgcmVjb3JkaW5ncyBmb3IgV2Vi
R1BVRGV2aWNlCiAKLSAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpSZWNvcmRpbmc6OlR5cGUgdHlw
ZTsKKyAgICBQcm90b2NvbDo6UmVjb3JkaW5nOjpUeXBlIHR5cGU7CiAgICAgaWYgKGlzPENhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRD4oY29udGV4dCkpCi0gICAgICAgIHR5cGUgPSBJbnNwZWN0b3I6
OlByb3RvY29sOjpSZWNvcmRpbmc6OlR5cGU6OkNhbnZhczJEOworICAgICAgICB0eXBlID0gUHJv
dG9jb2w6OlJlY29yZGluZzo6VHlwZTo6Q2FudmFzMkQ7CiAgICAgZWxzZSBpZiAoaXM8SW1hZ2VC
aXRtYXBSZW5kZXJpbmdDb250ZXh0Pihjb250ZXh0KSkKLSAgICAgICAgdHlwZSA9IEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlJlY29yZGluZzo6VHlwZTo6Q2FudmFzQml0bWFwUmVuZGVyZXI7CisgICAg
ICAgIHR5cGUgPSBQcm90b2NvbDo6UmVjb3JkaW5nOjpUeXBlOjpDYW52YXNCaXRtYXBSZW5kZXJl
cjsKICNpZiBFTkFCTEUoV0VCR0wpCiAgICAgZWxzZSBpZiAoaXM8V2ViR0xSZW5kZXJpbmdDb250
ZXh0Pihjb250ZXh0KSkKLSAgICAgICAgdHlwZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlY29y
ZGluZzo6VHlwZTo6Q2FudmFzV2ViR0w7CisgICAgICAgIHR5cGUgPSBQcm90b2NvbDo6UmVjb3Jk
aW5nOjpUeXBlOjpDYW52YXNXZWJHTDsKICNlbmRpZgogI2lmIEVOQUJMRShXRUJHTDIpCiAgICAg
ZWxzZSBpZiAoaXM8V2ViR0wyUmVuZGVyaW5nQ29udGV4dD4oY29udGV4dCkpCi0gICAgICAgIHR5
cGUgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpSZWNvcmRpbmc6OlR5cGU6OkNhbnZhc1dlYkdMMjsK
KyAgICAgICAgdHlwZSA9IFByb3RvY29sOjpSZWNvcmRpbmc6OlR5cGU6OkNhbnZhc1dlYkdMMjsK
ICNlbmRpZgogICAgIGVsc2UgewogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAg
ICAgdHlwZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlY29yZGluZzo6VHlwZTo6Q2FudmFzMkQ7
CisgICAgICAgIHR5cGUgPSBQcm90b2NvbDo6UmVjb3JkaW5nOjpUeXBlOjpDYW52YXMyRDsKICAg
ICB9CiAKLSAgICBhdXRvIHJlY29yZGluZyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlY29yZGlu
Zzo6UmVjb3JkaW5nOjpjcmVhdGUoKQotICAgICAgICAuc2V0VmVyc2lvbihJbnNwZWN0b3I6OlBy
b3RvY29sOjpSZWNvcmRpbmc6OlZFUlNJT04pCisgICAgYXV0byByZWNvcmRpbmcgPSBQcm90b2Nv
bDo6UmVjb3JkaW5nOjpSZWNvcmRpbmc6OmNyZWF0ZSgpCisgICAgICAgIC5zZXRWZXJzaW9uKFBy
b3RvY29sOjpSZWNvcmRpbmc6OlZFUlNJT04pCiAgICAgICAgIC5zZXRUeXBlKHR5cGUpCiAgICAg
ICAgIC5zZXRJbml0aWFsU3RhdGUobV9pbml0aWFsU3RhdGUucmVsZWFzZU5vbk51bGwoKSkKICAg
ICAgICAgLnNldERhdGEobV9zZXJpYWxpemVkRHVwbGljYXRlRGF0YS5yZWxlYXNlTm9uTnVsbCgp
KQpAQCAtNjE0LDcgKzYxNSw3IEBAIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpSZWNvcmRpbmc6
OlJlY29yZGluZz4gSW5zcGVjdG9yQ2FudmFzOjpyZWxlYXNlT2JqZWN0Rm9yCiAgICAgcmV0dXJu
IHJlY29yZGluZzsKIH0KIAotU3RyaW5nIEluc3BlY3RvckNhbnZhczo6Z2V0Q2FudmFzQ29udGVu
dEFzRGF0YVVSTChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCitTdHJpbmcgSW5zcGVjdG9yQ2Fu
dmFzOjpnZXRDYW52YXNDb250ZW50QXNEYXRhVVJMKFByb3RvY29sOjpFcnJvclN0cmluZyYgZXJy
b3JTdHJpbmcpCiB7CiAgICAgYXV0byogbm9kZSA9IGNhbnZhc0VsZW1lbnQoKTsKICAgICBpZiAo
IW5vZGUpIHsKQEAgLTY1MSw3ICs2NTIsNyBAQCB2b2lkIEluc3BlY3RvckNhbnZhczo6YXBwZW5k
QWN0aW9uU25hcHNob3RJZk5lZWRlZCgpCiAgICAgaWYgKG1fY29udGVudENoYW5nZWQpIHsKICAg
ICAgICAgbV9idWZmZXJVc2VkIC09IG1fbGFzdFJlY29yZGVkQWN0aW9uLT5tZW1vcnlDb3N0KCk7
CiAKLSAgICAgICAgRXJyb3JTdHJpbmcgaWdub3JlZDsKKyAgICAgICAgUHJvdG9jb2w6OkVycm9y
U3RyaW5nIGlnbm9yZWQ7CiAgICAgICAgIG1fbGFzdFJlY29yZGVkQWN0aW9uLT5hZGRJdGVtKGlu
ZGV4Rm9yRGF0YShnZXRDYW52YXNDb250ZW50QXNEYXRhVVJMKGlnbm9yZWQpKSk7CiAKICAgICAg
ICAgbV9idWZmZXJVc2VkICs9IG1fbGFzdFJlY29yZGVkQWN0aW9uLT5tZW1vcnlDb3N0KCk7CkBA
IC03NzUsNyArNzc2LDcgQEAgaW50IEluc3BlY3RvckNhbnZhczo6aW5kZXhGb3JEYXRhKER1cGxp
Y2F0ZURhdGFWYXJpYW50IGRhdGEpCiAKICAgICBpZiAoaXRlbSkgewogICAgICAgICBtX2J1ZmZl
clVzZWQgKz0gaXRlbS0+bWVtb3J5Q29zdCgpOwotICAgICAgICBtX3NlcmlhbGl6ZWREdXBsaWNh
dGVEYXRhLT5hZGRJdGVtKFdURk1vdmUoaXRlbSkpOworICAgICAgICBtX3NlcmlhbGl6ZWREdXBs
aWNhdGVEYXRhLT5hZGRJdGVtKGl0ZW0ucmVsZWFzZU5vbk51bGwoKSk7CiAKICAgICAgICAgbV9p
bmRleGVkRHVwbGljYXRlRGF0YS5hcHBlbmQoZGF0YSk7CiAgICAgICAgIGluZGV4ID0gbV9pbmRl
eGVkRHVwbGljYXRlRGF0YS5zaXplKCkgLSAxOwpAQCAtODEwLDEzICs4MTEsMTMgQEAgdGVtcGxh
dGU8dHlwZW5hbWUgVD4gc3RhdGljIFJlZjxKU09OOjpBcnJheU9mPEpTT046OlZhbHVlPj4gYnVp
bGRBcnJheUZvclZlY3RvcigKICAgICByZXR1cm4gYXJyYXk7CiB9CiAKLVJlZjxJbnNwZWN0b3I6
OlByb3RvY29sOjpSZWNvcmRpbmc6OkluaXRpYWxTdGF0ZT4gSW5zcGVjdG9yQ2FudmFzOjpidWls
ZEluaXRpYWxTdGF0ZSgpCitSZWY8UHJvdG9jb2w6OlJlY29yZGluZzo6SW5pdGlhbFN0YXRlPiBJ
bnNwZWN0b3JDYW52YXM6OmJ1aWxkSW5pdGlhbFN0YXRlKCkKIHsKICAgICBhdXRvKiBjb250ZXh0
ID0gY2FudmFzQ29udGV4dCgpOwogICAgIEFTU0VSVChjb250ZXh0KTsKICAgICAvLyBGSVhNRTog
PGh0dHBzOi8vd2Via2l0Lm9yZy9iLzIwMTY1MT4gV2ViIEluc3BlY3RvcjogQ2FudmFzOiBzdXBw
b3J0IGNhbnZhcyByZWNvcmRpbmdzIGZvciBXZWJHUFVEZXZpY2UKIAotICAgIGF1dG8gaW5pdGlh
bFN0YXRlUGF5bG9hZCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlY29yZGluZzo6SW5pdGlhbFN0
YXRlOjpjcmVhdGUoKS5yZWxlYXNlKCk7CisgICAgYXV0byBpbml0aWFsU3RhdGVQYXlsb2FkID0g
UHJvdG9jb2w6OlJlY29yZGluZzo6SW5pdGlhbFN0YXRlOjpjcmVhdGUoKS5yZWxlYXNlKCk7CiAK
ICAgICBhdXRvIGF0dHJpYnV0ZXNQYXlsb2FkID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAg
ICBhdHRyaWJ1dGVzUGF5bG9hZC0+c2V0SW50ZWdlcigid2lkdGgiX3MsIGNvbnRleHQtPmNhbnZh
c0Jhc2UoKS53aWR0aCgpKTsKQEAgLTkwOCw3ICs5MDksNyBAQCBSZWY8SW5zcGVjdG9yOjpQcm90
b2NvbDo6UmVjb3JkaW5nOjpJbml0aWFsU3RhdGU+IEluc3BlY3RvckNhbnZhczo6YnVpbGRJbml0
aWFsUwogICAgIGlmIChwYXJhbWV0ZXJzUGF5bG9hZC0+bGVuZ3RoKCkpCiAgICAgICAgIGluaXRp
YWxTdGF0ZVBheWxvYWQtPnNldFBhcmFtZXRlcnMoV1RGTW92ZShwYXJhbWV0ZXJzUGF5bG9hZCkp
OwogCi0gICAgRXJyb3JTdHJpbmcgaWdub3JlZDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcg
aWdub3JlZDsKICAgICBpbml0aWFsU3RhdGVQYXlsb2FkLT5zZXRDb250ZW50KGdldENhbnZhc0Nv
bnRlbnRBc0RhdGFVUkwoaWdub3JlZCkpOwogCiAgICAgcmV0dXJuIGluaXRpYWxTdGF0ZVBheWxv
YWQ7CkBAIC05NDYsNyArOTQ3LDcgQEAgUmVmPEpTT046OkFycmF5T2Y8SlNPTjo6VmFsdWU+PiBJ
bnNwZWN0b3JDYW52YXM6OmJ1aWxkQWN0aW9uKGNvbnN0IFN0cmluZyYgbmFtZSwKICAgICAgICAg
ICAgICAgICBhcnJheS0+YWRkSXRlbSh2YWx1ZS5kLnZhbHVlT3IoMSkpOwogICAgICAgICAgICAg
ICAgIGFycmF5LT5hZGRJdGVtKHZhbHVlLmUudmFsdWVPcigwKSk7CiAgICAgICAgICAgICAgICAg
YXJyYXktPmFkZEl0ZW0odmFsdWUuZi52YWx1ZU9yKDApKTsKLSAgICAgICAgICAgICAgICBhZGRQ
YXJhbWV0ZXIoYXJyYXkucHRyKCksIFJlY29yZGluZ1N3aXp6bGVUeXBlczo6RE9NTWF0cml4KTsK
KyAgICAgICAgICAgICAgICBhZGRQYXJhbWV0ZXIoV1RGTW92ZShhcnJheSksIFJlY29yZGluZ1N3
aXp6bGVUeXBlczo6RE9NTWF0cml4KTsKICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICBbJl0g
KGNvbnN0IEVsZW1lbnQqIHZhbHVlKSB7CiAgICAgICAgICAgICAgICAgaWYgKHZhbHVlKSB7CkBA
IC0xMTA2LDE2ICsxMTA3LDE2IEBAIFJlZjxKU09OOjpBcnJheU9mPEpTT046OlZhbHVlPj4gSW5z
cGVjdG9yQ2FudmFzOjpidWlsZEFjdGlvbihjb25zdCBTdHJpbmcmIG5hbWUsCiAgICAgICAgICAg
ICAgICAgYXV0byBkZWR1cGxpY2F0ZWQgPSB2YWx1ZS5tYXAoWyZdIChjb25zdCBTdHJpbmcmIGl0
ZW0pIHsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4Rm9yRGF0YShpdGVtKTsKICAg
ICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICBhZGRQYXJhbWV0ZXIoYnVpbGRBcnJh
eUZvclZlY3RvcihkZWR1cGxpY2F0ZWQpLnB0cigpLCBSZWNvcmRpbmdTd2l6emxlVHlwZXM6OlN0
cmluZyk7CisgICAgICAgICAgICAgICAgYWRkUGFyYW1ldGVyKGJ1aWxkQXJyYXlGb3JWZWN0b3Io
ZGVkdXBsaWNhdGVkKSwgUmVjb3JkaW5nU3dpenpsZVR5cGVzOjpTdHJpbmcpOwogICAgICAgICAg
ICAgfSwKLSAgICAgICAgICAgIFsmXSAoY29uc3QgVmVjdG9yPGZsb2F0PiYgdmFsdWUpIHsgYWRk
UGFyYW1ldGVyKGJ1aWxkQXJyYXlGb3JWZWN0b3IodmFsdWUpLnB0cigpLCBSZWNvcmRpbmdTd2l6
emxlVHlwZXM6OkFycmF5KTsgfSwKKyAgICAgICAgICAgIFsmXSAoY29uc3QgVmVjdG9yPGZsb2F0
PiYgdmFsdWUpIHsgYWRkUGFyYW1ldGVyKGJ1aWxkQXJyYXlGb3JWZWN0b3IodmFsdWUpLCBSZWNv
cmRpbmdTd2l6emxlVHlwZXM6OkFycmF5KTsgfSwKICAgICAgICAgICAgIFsmXSAoY29uc3QgVmVj
dG9yPHVpbnQzMl90PiYgdmFsdWUpIHsKICAgICAgICAgICAgICAgICBhdXRvIG1hcHBlZCA9IHZh
bHVlLm1hcChbJl0gKHVpbnQzMl90IGl0ZW0pIHsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PGRvdWJsZT4oaXRlbSk7CiAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAg
ICAgICAgICAgYWRkUGFyYW1ldGVyKGJ1aWxkQXJyYXlGb3JWZWN0b3IobWFwcGVkKS5wdHIoKSwg
UmVjb3JkaW5nU3dpenpsZVR5cGVzOjpBcnJheSk7CisgICAgICAgICAgICAgICAgYWRkUGFyYW1l
dGVyKGJ1aWxkQXJyYXlGb3JWZWN0b3IobWFwcGVkKSwgUmVjb3JkaW5nU3dpenpsZVR5cGVzOjpB
cnJheSk7CiAgICAgICAgICAgICB9LAotICAgICAgICAgICAgWyZdIChjb25zdCBWZWN0b3I8aW50
MzJfdD4mIHZhbHVlKSB7IGFkZFBhcmFtZXRlcihidWlsZEFycmF5Rm9yVmVjdG9yKHZhbHVlKS5w
dHIoKSwgUmVjb3JkaW5nU3dpenpsZVR5cGVzOjpBcnJheSk7IH0sCisgICAgICAgICAgICBbJl0g
KGNvbnN0IFZlY3RvcjxpbnQzMl90PiYgdmFsdWUpIHsgYWRkUGFyYW1ldGVyKGJ1aWxkQXJyYXlG
b3JWZWN0b3IodmFsdWUpLCBSZWNvcmRpbmdTd2l6emxlVHlwZXM6OkFycmF5KTsgfSwKICNpZiBF
TkFCTEUoV0VCR0wpCiAgICAgICAgICAgICBbJl0gKGNvbnN0IFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OkZsb2F0MzJMaXN0OjpWYXJpYW50VHlwZSYgdmFsdWUpIHsKICAgICAgICAgICAgICAg
ICBXVEY6OnZpc2l0KHBhcnNlUGFyYW1ldGVyLCB2YWx1ZSk7CkBAIC0xMTU5LDcgKzExNjAsNyBA
QCBSZWY8SlNPTjo6QXJyYXlPZjxKU09OOjpWYWx1ZT4+IEluc3BlY3RvckNhbnZhczo6YnVpbGRB
Y3Rpb24oY29uc3QgU3RyaW5nJiBuYW1lLAogUmVmPEpTT046OkFycmF5T2Y8SlNPTjo6VmFsdWU+
PiBJbnNwZWN0b3JDYW52YXM6OmJ1aWxkQXJyYXlGb3JDYW52YXNHcmFkaWVudChjb25zdCBDYW52
YXNHcmFkaWVudCYgY2FudmFzR3JhZGllbnQpCiB7CiAgICAgQVNDSUlMaXRlcmFsIHR5cGUgPSAi
bGluZWFyLWdyYWRpZW50Il9zOwotICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTT046OkFycmF5T2Y8
ZmxvYXQ+OjpjcmVhdGUoKTsKKyAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU09OOjpBcnJheU9mPGRv
dWJsZT46OmNyZWF0ZSgpOwogICAgIFdURjo6c3dpdGNoT24oY2FudmFzR3JhZGllbnQuZ3JhZGll
bnQoKS5kYXRhKCksCiAgICAgICAgIFsmXSAoY29uc3QgR3JhZGllbnQ6OkxpbmVhckRhdGEmIGRh
dGEpIHsKICAgICAgICAgICAgIHBhcmFtZXRlcnMtPmFkZEl0ZW0oZGF0YS5wb2ludDAueCgpKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDYW52YXMuaCBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDYW52YXMuaAppbmRleCA3OGNiNmE4
YTNiOGFiNzgwZTk1ZmIzZmFlZDNhYmM1OTRkMTQ2NTk4Li5iMjdiYzhkNDkyMzkxMTdiZWU1MjVk
NWZlNmFjMjZlMmQ2MTZiNWM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yQ2FudmFzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckNhbnZhcy5oCkBAIC01OCw4ICs1OCw2IEBAIGNsYXNzIE9mZnNjcmVlbkNhbnZhczsKIGNsYXNz
IFR5cGVkT01DU1NJbWFnZVZhbHVlOwogI2VuZGlmCiAKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3Ry
aW5nOwotCiBjbGFzcyBJbnNwZWN0b3JDYW52YXMgZmluYWwgOiBwdWJsaWMgUmVmQ291bnRlZDxJ
bnNwZWN0b3JDYW52YXM+IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPEluc3BlY3RvckNhbnZh
cz4gY3JlYXRlKENhbnZhc1JlbmRlcmluZ0NvbnRleHQmKTsKQEAgLTEwNyw3ICsxMDUsNyBAQCBw
dWJsaWM6CiAgICAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6Q2FudmFzPiBidWls
ZE9iamVjdEZvckNhbnZhcyhib29sIGNhcHR1cmVCYWNrdHJhY2UpOwogICAgIFJlZjxJbnNwZWN0
b3I6OlByb3RvY29sOjpSZWNvcmRpbmc6OlJlY29yZGluZz4gcmVsZWFzZU9iamVjdEZvclJlY29y
ZGluZygpOwogCi0gICAgU3RyaW5nIGdldENhbnZhc0NvbnRlbnRBc0RhdGFVUkwoRXJyb3JTdHJp
bmcmKTsKKyAgICBTdHJpbmcgZ2V0Q2FudmFzQ29udGVudEFzRGF0YVVSTChJbnNwZWN0b3I6OlBy
b3RvY29sOjpFcnJvclN0cmluZyYpOwogCiBwcml2YXRlOgogICAgIEluc3BlY3RvckNhbnZhcyhD
YW52YXNSZW5kZXJpbmdDb250ZXh0Jik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yQ29udHJvbGxlci5jcHAKaW5kZXggMmU5MGMxMTk0OGE3ZTBlYjYxMDVhODNlMmMw
OGNiNGY4MmE4ZjJmZS4uNjMwZGY3MTc5MGM2M2I2ZTc1ODczNDUxYTE3NDBmODZmNjdlMDJkZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNw
cApAQCAtNDc4LDEwICs0NzgsOCBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmZyb250ZW5k
SW5pdGlhbGl6ZWQoKQogewogICAgIGlmIChtX3BhdXNlQWZ0ZXJJbml0aWFsaXphdGlvbikgewog
ICAgICAgICBtX3BhdXNlQWZ0ZXJJbml0aWFsaXphdGlvbiA9IGZhbHNlOwotICAgICAgICBpZiAo
YXV0byogZGVidWdnZXJBZ2VudCA9IG1faW5zdHJ1bWVudGluZ0FnZW50cy0+ZW5hYmxlZFBhZ2VE
ZWJ1Z2dlckFnZW50KCkpIHsKLSAgICAgICAgICAgIEVycm9yU3RyaW5nIGlnbm9yZWQ7Ci0gICAg
ICAgICAgICBkZWJ1Z2dlckFnZW50LT5wYXVzZShpZ25vcmVkKTsKLSAgICAgICAgfQorICAgICAg
ICBpZiAoYXV0byogZGVidWdnZXJBZ2VudCA9IG1faW5zdHJ1bWVudGluZ0FnZW50cy0+ZW5hYmxl
ZFBhZ2VEZWJ1Z2dlckFnZW50KCkpCisgICAgICAgICAgICBkZWJ1Z2dlckFnZW50LT5wYXVzZSgp
OwogICAgIH0KIAogI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNwcAppbmRleCA1MGUwYzgz
YmM5MjA2NjJlNzY4MDI1NTc3NTJiMzZmMjM3NWIwMzljLi5hNmJiODc3YTIyYTBhYTg2YmY4OTk4
MzlhNzVmNWFmZjZlZjhkZTMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNwcApAQCAtNjA3LDcgKzYwNyw3IEBAIGJvb2wgSW5zcGVj
dG9yRnJvbnRlbmRIb3N0OjpkaWFnbm9zdGljTG9nZ2luZ0F2YWlsYWJsZSgpCiAgICAgcmV0dXJu
IG1fY2xpZW50ICYmIG1fY2xpZW50LT5kaWFnbm9zdGljTG9nZ2luZ0F2YWlsYWJsZSgpOwogfQog
Ci1zdGF0aWMgT3B0aW9uYWw8RGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQ6OlZhbHVlUGF5bG9hZD4g
dmFsdWVQYXlsb2FkRnJvbUpTT05WYWx1ZShjb25zdCBSZWZQdHI8SlNPTjo6VmFsdWU+JiB2YWx1
ZSkKK3N0YXRpYyBPcHRpb25hbDxEaWFnbm9zdGljTG9nZ2luZ0NsaWVudDo6VmFsdWVQYXlsb2Fk
PiB2YWx1ZVBheWxvYWRGcm9tSlNPTlZhbHVlKFJlZjxKU09OOjpWYWx1ZT4mJiB2YWx1ZSkKIHsK
ICAgICBzd2l0Y2ggKHZhbHVlLT50eXBlKCkpIHsKICAgICBjYXNlIEpTT046OlZhbHVlOjpUeXBl
OjpBcnJheToKQEAgLTYxNywyNCArNjE3LDE2IEBAIHN0YXRpYyBPcHRpb25hbDxEaWFnbm9zdGlj
TG9nZ2luZ0NsaWVudDo6VmFsdWVQYXlsb2FkPiB2YWx1ZVBheWxvYWRGcm9tSlNPTlZhbHVlCiAg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICBjYXNlIEpTT046OlZhbHVlOjpUeXBl
OjpCb29sZWFuOgotICAgICAgICBib29sIGJvb2xWYWx1ZTsKLSAgICAgICAgdmFsdWUtPmFzQm9v
bGVhbihib29sVmFsdWUpOwotICAgICAgICByZXR1cm4gRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQ6
OlZhbHVlUGF5bG9hZChib29sVmFsdWUpOworICAgICAgICByZXR1cm4gRGlhZ25vc3RpY0xvZ2dp
bmdDbGllbnQ6OlZhbHVlUGF5bG9hZCh2YWx1ZS0+YXNCb29sZWFuKCkudmFsdWVPcihmYWxzZSkp
OwogCiAgICAgY2FzZSBKU09OOjpWYWx1ZTo6VHlwZTo6RG91YmxlOgotICAgICAgICBkb3VibGUg
ZG91YmxlVmFsdWU7Ci0gICAgICAgIHZhbHVlLT5hc0RvdWJsZShkb3VibGVWYWx1ZSk7Ci0gICAg
ICAgIHJldHVybiBEaWFnbm9zdGljTG9nZ2luZ0NsaWVudDo6VmFsdWVQYXlsb2FkKGRvdWJsZVZh
bHVlKTsKKyAgICAgICAgcmV0dXJuIERpYWdub3N0aWNMb2dnaW5nQ2xpZW50OjpWYWx1ZVBheWxv
YWQodmFsdWUtPmFzRG91YmxlKCkudmFsdWVPcigwKSk7CiAKICAgICBjYXNlIEpTT046OlZhbHVl
OjpUeXBlOjpJbnRlZ2VyOgotICAgICAgICBsb25nIGxvbmcgaW50VmFsdWU7Ci0gICAgICAgIHZh
bHVlLT5hc0ludGVnZXIoaW50VmFsdWUpOwotICAgICAgICByZXR1cm4gRGlhZ25vc3RpY0xvZ2dp
bmdDbGllbnQ6OlZhbHVlUGF5bG9hZChpbnRWYWx1ZSk7CisgICAgICAgIHJldHVybiBEaWFnbm9z
dGljTG9nZ2luZ0NsaWVudDo6VmFsdWVQYXlsb2FkKHN0YXRpY19jYXN0PGxvbmcgbG9uZz4odmFs
dWUtPmFzSW50ZWdlcigpLnZhbHVlT3IoMCkpKTsKIAogICAgIGNhc2UgSlNPTjo6VmFsdWU6OlR5
cGU6OlN0cmluZzoKLSAgICAgICAgU3RyaW5nIHN0cmluZ1ZhbHVlOwotICAgICAgICB2YWx1ZS0+
YXNTdHJpbmcoc3RyaW5nVmFsdWUpOwotICAgICAgICByZXR1cm4gRGlhZ25vc3RpY0xvZ2dpbmdD
bGllbnQ6OlZhbHVlUGF5bG9hZChzdHJpbmdWYWx1ZSk7CisgICAgICAgIHJldHVybiBEaWFnbm9z
dGljTG9nZ2luZ0NsaWVudDo6VmFsdWVQYXlsb2FkKHZhbHVlLT5hc1N0cmluZygpKTsKICAgICB9
CiAKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTY0NiwxNyArNjM4LDE3IEBAIHZvaWQg
SW5zcGVjdG9yRnJvbnRlbmRIb3N0Ojpsb2dEaWFnbm9zdGljRXZlbnQoY29uc3QgU3RyaW5nJiBl
dmVudE5hbWUsIGNvbnN0IFN0CiAgICAgaWYgKCFzdXBwb3J0c0RpYWdub3N0aWNMb2dnaW5nKCkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gcGF5bG9hZFZhbHVl
OwotICAgIGlmICghSlNPTjo6VmFsdWU6OnBhcnNlSlNPTihwYXlsb2FkU3RyaW5nLCBwYXlsb2Fk
VmFsdWUpKQorICAgIGF1dG8gcGF5bG9hZFZhbHVlID0gSlNPTjo6VmFsdWU6OnBhcnNlSlNPTihw
YXlsb2FkU3RyaW5nKTsKKyAgICBpZiAoIXBheWxvYWRWYWx1ZSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGF5bG9hZE9iamVjdDsKLSAgICBpZiAoIXBheWxv
YWRWYWx1ZS0+YXNPYmplY3QocGF5bG9hZE9iamVjdCkpCisgICAgYXV0byBwYXlsb2FkT2JqZWN0
ID0gcGF5bG9hZFZhbHVlLT5hc09iamVjdCgpOworICAgIGlmICghcGF5bG9hZE9iamVjdCkKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQ6OlZhbHVlRGljdGlv
bmFyeSBkaWN0aW9uYXJ5OwotICAgIGZvciAoY29uc3QgYXV0byYgW2tleSwgdmFsdWVdIDogKnBh
eWxvYWRPYmplY3QpIHsKLSAgICAgICAgaWYgKGF1dG8gdmFsdWVQYXlsb2FkID0gdmFsdWVQYXls
b2FkRnJvbUpTT05WYWx1ZSh2YWx1ZSkpCisgICAgZm9yIChhdXRvJiBba2V5LCB2YWx1ZV0gOiAq
cGF5bG9hZE9iamVjdCkgeworICAgICAgICBpZiAoYXV0byB2YWx1ZVBheWxvYWQgPSB2YWx1ZVBh
eWxvYWRGcm9tSlNPTlZhbHVlKFdURk1vdmUodmFsdWUpKSkKICAgICAgICAgICAgIGRpY3Rpb25h
cnkuc2V0KGtleSwgV1RGTW92ZSh2YWx1ZVBheWxvYWQudmFsdWUoKSkpOwogICAgIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwCmluZGV4
IGFlMGZlZjVkZmUzOWI5YTUxNmU1NTEwMzA3ZWFiY2I2NjBkMWFiY2IuLjk3NjY5ZWZiNjg3ZDMz
NTU0ZDUyYmM2OGUxOGM2ODQxYWViNGNmNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHAKQEAgLTM4MCw3ICszODAsNyBAQCB2b2lkIFN0
eWxlU2hlZXRIYW5kbGVyOjpvYnNlcnZlQ29tbWVudCh1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5z
aWduZWQgZW5kT2Zmc2V0KQogICAgIG1fY3VycmVudFJ1bGVEYXRhU3RhY2subGFzdCgpLT5zdHls
ZVNvdXJjZURhdGEtPnByb3BlcnR5RGF0YS5hcHBlbmQoQ1NTUHJvcGVydHlTb3VyY2VEYXRhKHBy
b3BlcnR5RGF0YS5uYW1lLCBwcm9wZXJ0eURhdGEudmFsdWUsIGZhbHNlLCB0cnVlLCB0cnVlLCBT
b3VyY2VSYW5nZShzdGFydE9mZnNldCAtIHRvcFJ1bGVCb2R5UmFuZ2Uuc3RhcnQsIGVuZE9mZnNl
dCAtIHRvcFJ1bGVCb2R5UmFuZ2Uuc3RhcnQpKSk7CiB9CiAKLXN0YXRpYyBSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6Q1NTOjpTb3VyY2VSYW5nZT4gYnVpbGRTb3VyY2VSYW5nZU9iamVjdChj
b25zdCBTb3VyY2VSYW5nZSYgcmFuZ2UsIGNvbnN0IFZlY3RvcjxzaXplX3Q+JiBsaW5lRW5kaW5n
cywgaW50KiBlbmRpbmdMaW5lID0gbnVsbHB0cikKK3N0YXRpYyBSZWZQdHI8UHJvdG9jb2w6OkNT
Uzo6U291cmNlUmFuZ2U+IGJ1aWxkU291cmNlUmFuZ2VPYmplY3QoY29uc3QgU291cmNlUmFuZ2Um
IHJhbmdlLCBjb25zdCBWZWN0b3I8c2l6ZV90PiYgbGluZUVuZGluZ3MsIGludCogZW5kaW5nTGlu
ZSA9IG51bGxwdHIpCiB7CiAgICAgaWYgKGxpbmVFbmRpbmdzLmlzRW1wdHkoKSkKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CkBAIC0zOTEsNyArMzkxLDcgQEAgc3RhdGljIFJlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpDU1M6OlNvdXJjZVJhbmdlPiBidWlsZFNvdXJjZVJhbmdlT2JqZWN0KGNv
bnMKICAgICBpZiAoZW5kaW5nTGluZSkKICAgICAgICAgKmVuZGluZ0xpbmUgPSBlbmQubV9saW5l
Lnplcm9CYXNlZEludCgpOwogCi0gICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6
U291cmNlUmFuZ2U6OmNyZWF0ZSgpCisgICAgcmV0dXJuIFByb3RvY29sOjpDU1M6OlNvdXJjZVJh
bmdlOjpjcmVhdGUoKQogICAgICAgICAuc2V0U3RhcnRMaW5lKHN0YXJ0Lm1fbGluZS56ZXJvQmFz
ZWRJbnQoKSkKICAgICAgICAgLnNldFN0YXJ0Q29sdW1uKHN0YXJ0Lm1fY29sdW1uLnplcm9CYXNl
ZEludCgpKQogICAgICAgICAuc2V0RW5kTGluZShlbmQubV9saW5lLnplcm9CYXNlZEludCgpKQpA
QCAtNDI4LDM0ICs0MjgsMzQgQEAgc3RhdGljIFJlZlB0cjxDU1NSdWxlTGlzdD4gYXNDU1NSdWxl
TGlzdChDU1NSdWxlKiBydWxlKQogICAgIHJldHVybiBudWxscHRyOwogfQogCi1zdGF0aWMgUmVm
PEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpHcm91cGluZz4+IGJ1aWxk
QXJyYXlGb3JHcm91cGluZ3MoQ1NTUnVsZSYgcnVsZSkKK3N0YXRpYyBSZWY8SlNPTjo6QXJyYXlP
ZjxQcm90b2NvbDo6Q1NTOjpHcm91cGluZz4+IGJ1aWxkQXJyYXlGb3JHcm91cGluZ3MoQ1NTUnVs
ZSYgcnVsZSkKIHsKLSAgICBhdXRvIGdyb3VwaW5nc1BheWxvYWQgPSBKU09OOjpBcnJheU9mPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6R3JvdXBpbmc+OjpjcmVhdGUoKTsKKyAgICBhdXRvIGdy
b3VwaW5nc1BheWxvYWQgPSBKU09OOjpBcnJheU9mPFByb3RvY29sOjpDU1M6Okdyb3VwaW5nPjo6
Y3JlYXRlKCk7CiAKICAgICBhdXRvKiBwYXJlbnRSdWxlID0gJnJ1bGU7CiAgICAgd2hpbGUgKHBh
cmVudFJ1bGUpIHsKLSAgICAgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6R3Jv
dXBpbmc+IHJ1bGVHcm91cGluZ1BheWxvYWQ7CisgICAgICAgIFJlZlB0cjxQcm90b2NvbDo6Q1NT
OjpHcm91cGluZz4gcnVsZUdyb3VwaW5nUGF5bG9hZDsKIAogICAgICAgICBpZiAoaXM8Q1NTTWVk
aWFSdWxlPihwYXJlbnRSdWxlKSkgewogICAgICAgICAgICAgYXV0byogbWVkaWEgPSBkb3duY2Fz
dDxDU1NNZWRpYVJ1bGU+KHBhcmVudFJ1bGUpLT5tZWRpYSgpOwogICAgICAgICAgICAgaWYgKG1l
ZGlhICYmIG1lZGlhLT5sZW5ndGgoKSAmJiBtZWRpYS0+bWVkaWFUZXh0KCkgIT0gImFsbCIpIHsK
LSAgICAgICAgICAgICAgICBydWxlR3JvdXBpbmdQYXlsb2FkID0gSW5zcGVjdG9yOjpQcm90b2Nv
bDo6Q1NTOjpHcm91cGluZzo6Y3JlYXRlKCkKKyAgICAgICAgICAgICAgICBydWxlR3JvdXBpbmdQ
YXlsb2FkID0gUHJvdG9jb2w6OkNTUzo6R3JvdXBpbmc6OmNyZWF0ZSgpCiAgICAgICAgICAgICAg
ICAgICAgIC5zZXRUZXh0KG1lZGlhLT5tZWRpYVRleHQoKSkKLSAgICAgICAgICAgICAgICAgICAg
LnNldFR5cGUoSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpHcm91cGluZzo6VHlwZTo6TWVkaWFS
dWxlKQorICAgICAgICAgICAgICAgICAgICAuc2V0VHlwZShQcm90b2NvbDo6Q1NTOjpHcm91cGlu
Zzo6VHlwZTo6TWVkaWFSdWxlKQogICAgICAgICAgICAgICAgICAgICAucmVsZWFzZSgpOwogICAg
ICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKGlzPENTU0ltcG9ydFJ1bGU+KHBhcmVudFJ1
bGUpKSB7CiAgICAgICAgICAgICBhdXRvJiBtZWRpYSA9IGRvd25jYXN0PENTU0ltcG9ydFJ1bGU+
KHBhcmVudFJ1bGUpLT5tZWRpYSgpOwogICAgICAgICAgICAgaWYgKG1lZGlhLmxlbmd0aCgpICYm
IG1lZGlhLm1lZGlhVGV4dCgpICE9ICJhbGwiKSB7Ci0gICAgICAgICAgICAgICAgcnVsZUdyb3Vw
aW5nUGF5bG9hZCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6R3JvdXBpbmc6OmNyZWF0ZSgp
CisgICAgICAgICAgICAgICAgcnVsZUdyb3VwaW5nUGF5bG9hZCA9IFByb3RvY29sOjpDU1M6Okdy
b3VwaW5nOjpjcmVhdGUoKQogICAgICAgICAgICAgICAgICAgICAuc2V0VGV4dChtZWRpYS5tZWRp
YVRleHQoKSkKLSAgICAgICAgICAgICAgICAgICAgLnNldFR5cGUoSW5zcGVjdG9yOjpQcm90b2Nv
bDo6Q1NTOjpHcm91cGluZzo6VHlwZTo6TWVkaWFJbXBvcnRSdWxlKQorICAgICAgICAgICAgICAg
ICAgICAuc2V0VHlwZShQcm90b2NvbDo6Q1NTOjpHcm91cGluZzo6VHlwZTo6TWVkaWFJbXBvcnRS
dWxlKQogICAgICAgICAgICAgICAgICAgICAucmVsZWFzZSgpOwogICAgICAgICAgICAgfQogICAg
ICAgICB9IGVsc2UgaWYgKGlzPENTU1N1cHBvcnRzUnVsZT4ocGFyZW50UnVsZSkpIHsKLSAgICAg
ICAgICAgIHJ1bGVHcm91cGluZ1BheWxvYWQgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6Okdy
b3VwaW5nOjpjcmVhdGUoKQorICAgICAgICAgICAgcnVsZUdyb3VwaW5nUGF5bG9hZCA9IFByb3Rv
Y29sOjpDU1M6Okdyb3VwaW5nOjpjcmVhdGUoKQogICAgICAgICAgICAgICAgIC5zZXRUZXh0KGRv
d25jYXN0PENTU1N1cHBvcnRzUnVsZT4ocGFyZW50UnVsZSktPmNvbmRpdGlvblRleHQoKSkKLSAg
ICAgICAgICAgICAgICAuc2V0VHlwZShJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6Okdyb3VwaW5n
OjpUeXBlOjpTdXBwb3J0c1J1bGUpCisgICAgICAgICAgICAgICAgLnNldFR5cGUoUHJvdG9jb2w6
OkNTUzo6R3JvdXBpbmc6OlR5cGU6OlN1cHBvcnRzUnVsZSkKICAgICAgICAgICAgICAgICAucmVs
ZWFzZSgpOwogICAgICAgICB9CiAKQEAgLTQ3MCw3ICs0NzAsNyBAQCBzdGF0aWMgUmVmPEpTT046
OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpHcm91cGluZz4+IGJ1aWxkQXJyYXlG
b3JHcm91cAogICAgICAgICAgICAgICAgICAgICBydWxlR3JvdXBpbmdQYXlsb2FkLT5zZXRTb3Vy
Y2VVUkwoc291cmNlVVJMKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgZ3JvdXBpbmdz
UGF5bG9hZC0+YWRkSXRlbShXVEZNb3ZlKHJ1bGVHcm91cGluZ1BheWxvYWQpKTsKKyAgICAgICAg
ICAgIGdyb3VwaW5nc1BheWxvYWQtPmFkZEl0ZW0ocnVsZUdyb3VwaW5nUGF5bG9hZC5yZWxlYXNl
Tm9uTnVsbCgpKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChwYXJlbnRSdWxlLT5wYXJlbnRS
dWxlKCkpIHsKQEAgLTQ4Miw5ICs0ODIsOSBAQCBzdGF0aWMgUmVmPEpTT046OkFycmF5T2Y8SW5z
cGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpHcm91cGluZz4+IGJ1aWxkQXJyYXlGb3JHcm91cAogICAg
ICAgICB3aGlsZSAoc3R5bGVTaGVldCkgewogICAgICAgICAgICAgYXV0byogbWVkaWEgPSBzdHls
ZVNoZWV0LT5tZWRpYSgpOwogICAgICAgICAgICAgaWYgKG1lZGlhICYmIG1lZGlhLT5sZW5ndGgo
KSAmJiBtZWRpYS0+bWVkaWFUZXh0KCkgIT0gImFsbCIpIHsKLSAgICAgICAgICAgICAgICBhdXRv
IHNoZWV0R3JvdXBpbmdQYXlsb2FkID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpHcm91cGlu
Zzo6Y3JlYXRlKCkKKyAgICAgICAgICAgICAgICBhdXRvIHNoZWV0R3JvdXBpbmdQYXlsb2FkID0g
UHJvdG9jb2w6OkNTUzo6R3JvdXBpbmc6OmNyZWF0ZSgpCiAgICAgICAgICAgICAgICAgICAgIC5z
ZXRUZXh0KG1lZGlhLT5tZWRpYVRleHQoKSkKLSAgICAgICAgICAgICAgICAgICAgLnNldFR5cGUo
aXM8SFRNTFN0eWxlRWxlbWVudD4oc3R5bGVTaGVldC0+b3duZXJOb2RlKCkpID8gSW5zcGVjdG9y
OjpQcm90b2NvbDo6Q1NTOjpHcm91cGluZzo6VHlwZTo6TWVkaWFTdHlsZU5vZGU6IEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkNTUzo6R3JvdXBpbmc6OlR5cGU6Ok1lZGlhTGlua05vZGUpCisgICAgICAg
ICAgICAgICAgICAgIC5zZXRUeXBlKGlzPEhUTUxTdHlsZUVsZW1lbnQ+KHN0eWxlU2hlZXQtPm93
bmVyTm9kZSgpKSA/IFByb3RvY29sOjpDU1M6Okdyb3VwaW5nOjpUeXBlOjpNZWRpYVN0eWxlTm9k
ZTogUHJvdG9jb2w6OkNTUzo6R3JvdXBpbmc6OlR5cGU6Ok1lZGlhTGlua05vZGUpCiAgICAgICAg
ICAgICAgICAgICAgIC5yZWxlYXNlKCk7CiAKICAgICAgICAgICAgICAgICBTdHJpbmcgc291cmNl
VVJMOwpAQCAtNTIzLDI4ICs1MjMsMzAgQEAgSW5zcGVjdG9yU3R5bGU6Okluc3BlY3RvclN0eWxl
KGNvbnN0IEluc3BlY3RvckNTU0lkJiBzdHlsZUlkLCBSZWY8Q1NTU3R5bGVEZWNsYXIKIAogSW5z
cGVjdG9yU3R5bGU6On5JbnNwZWN0b3JTdHlsZSgpID0gZGVmYXVsdDsKIAotUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+IEluc3BlY3RvclN0eWxlOjpidWlsZE9iamVj
dEZvclN0eWxlKCkgY29uc3QKK1JlZjxQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4gSW5zcGVjdG9y
U3R5bGU6OmJ1aWxkT2JqZWN0Rm9yU3R5bGUoKSBjb25zdAogewotICAgIFJlZjxJbnNwZWN0b3I6
OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlPiByZXN1bHQgPSBzdHlsZVdpdGhQcm9wZXJ0aWVzKCk7
Ci0gICAgaWYgKCFtX3N0eWxlSWQuaXNFbXB0eSgpKQotICAgICAgICByZXN1bHQtPnNldFN0eWxl
SWQobV9zdHlsZUlkLmFzUHJvdG9jb2xWYWx1ZTxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNT
U1N0eWxlSWQ+KCkpOworICAgIFJlZjxQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4gcmVzdWx0ID0g
c3R5bGVXaXRoUHJvcGVydGllcygpOworICAgIGlmIChhdXRvIHN0eWxlSWQgPSBtX3N0eWxlSWQu
YXNQcm90b2NvbFZhbHVlPFByb3RvY29sOjpDU1M6OkNTU1N0eWxlSWQ+KCkpCisgICAgICAgIHJl
c3VsdC0+c2V0U3R5bGVJZChzdHlsZUlkLnJlbGVhc2VOb25OdWxsKCkpOwogCiAgICAgcmVzdWx0
LT5zZXRXaWR0aChtX3N0eWxlLT5nZXRQcm9wZXJ0eVZhbHVlKCJ3aWR0aCIpKTsKICAgICByZXN1
bHQtPnNldEhlaWdodChtX3N0eWxlLT5nZXRQcm9wZXJ0eVZhbHVlKCJoZWlnaHQiKSk7CiAKICAg
ICBSZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+IHNvdXJjZURhdGEgPSBleHRyYWN0U291cmNlRGF0
YSgpOwotICAgIGlmIChzb3VyY2VEYXRhKQotICAgICAgICByZXN1bHQtPnNldFJhbmdlKGJ1aWxk
U291cmNlUmFuZ2VPYmplY3Qoc291cmNlRGF0YS0+cnVsZUJvZHlSYW5nZSwgbV9wYXJlbnRTdHls
ZVNoZWV0LT5saW5lRW5kaW5ncygpKSk7CisgICAgaWYgKHNvdXJjZURhdGEpIHsKKyAgICAgICAg
aWYgKGF1dG8gcmFuZ2UgPSBidWlsZFNvdXJjZVJhbmdlT2JqZWN0KHNvdXJjZURhdGEtPnJ1bGVC
b2R5UmFuZ2UsIG1fcGFyZW50U3R5bGVTaGVldC0+bGluZUVuZGluZ3MoKSkpCisgICAgICAgICAg
ICByZXN1bHQtPnNldFJhbmdlKHJhbmdlLnJlbGVhc2VOb25OdWxsKCkpOworICAgIH0KIAogICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKLVJlZjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkNTUzo6Q1NTQ29tcHV0ZWRTdHlsZVByb3BlcnR5Pj4gSW5zcGVjdG9yU3R5bGU6OmJ1aWxk
QXJyYXlGb3JDb21wdXRlZFN0eWxlKCkgY29uc3QKK1JlZjxKU09OOjpBcnJheU9mPFByb3RvY29s
OjpDU1M6OkNTU0NvbXB1dGVkU3R5bGVQcm9wZXJ0eT4+IEluc3BlY3RvclN0eWxlOjpidWlsZEFy
cmF5Rm9yQ29tcHV0ZWRTdHlsZSgpIGNvbnN0CiB7Ci0gICAgYXV0byByZXN1bHQgPSBKU09OOjpB
cnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTQ29tcHV0ZWRTdHlsZVByb3BlcnR5
Pjo6Y3JlYXRlKCk7CisgICAgYXV0byByZXN1bHQgPSBKU09OOjpBcnJheU9mPFByb3RvY29sOjpD
U1M6OkNTU0NvbXB1dGVkU3R5bGVQcm9wZXJ0eT46OmNyZWF0ZSgpOwogICAgIGZvciAoYXV0byYg
cHJvcGVydHkgOiBjb2xsZWN0UHJvcGVydGllcyh0cnVlKSkgewogICAgICAgICBjb25zdCBDU1NQ
cm9wZXJ0eVNvdXJjZURhdGEmIHByb3BlcnR5RW50cnkgPSBwcm9wZXJ0eS5zb3VyY2VEYXRhOwot
ICAgICAgICBhdXRvIGVudHJ5ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NDb21wdXRl
ZFN0eWxlUHJvcGVydHk6OmNyZWF0ZSgpCisgICAgICAgIGF1dG8gZW50cnkgPSBQcm90b2NvbDo6
Q1NTOjpDU1NDb21wdXRlZFN0eWxlUHJvcGVydHk6OmNyZWF0ZSgpCiAgICAgICAgICAgICAuc2V0
TmFtZShwcm9wZXJ0eUVudHJ5Lm5hbWUpCiAgICAgICAgICAgICAuc2V0VmFsdWUocHJvcGVydHlF
bnRyeS52YWx1ZSkKICAgICAgICAgICAgIC5yZWxlYXNlKCk7CkBAIC02MjMsMTMgKzYyNSwxMyBA
QCBWZWN0b3I8SW5zcGVjdG9yU3R5bGVQcm9wZXJ0eT4gSW5zcGVjdG9yU3R5bGU6OmNvbGxlY3RQ
cm9wZXJ0aWVzKGJvb2wgaW5jbHVkZUFsbAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLVJlZjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlPiBJbnNwZWN0b3JTdHlsZTo6c3R5bGVX
aXRoUHJvcGVydGllcygpIGNvbnN0CitSZWY8UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+IEluc3Bl
Y3RvclN0eWxlOjpzdHlsZVdpdGhQcm9wZXJ0aWVzKCkgY29uc3QKIHsKICAgICBhdXRvIHByb3Bl
cnRpZXMgPSBjb2xsZWN0UHJvcGVydGllcyhmYWxzZSk7CiAKLSAgICBhdXRvIHByb3BlcnRpZXNP
YmplY3QgPSBKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUHJvcGVy
dHk+OjpjcmVhdGUoKTsKLSAgICBhdXRvIHNob3J0aGFuZEVudHJpZXMgPSBBcnJheU9mPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkNTUzo6U2hvcnRoYW5kRW50cnk+OjpjcmVhdGUoKTsKLSAgICBIYXNo
TWFwPFN0cmluZywgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUHJvcGVydHk+
PiBwcm9wZXJ0eU5hbWVUb1ByZXZpb3VzQWN0aXZlUHJvcGVydHk7CisgICAgYXV0byBwcm9wZXJ0
aWVzT2JqZWN0ID0gSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0eT46OmNy
ZWF0ZSgpOworICAgIGF1dG8gc2hvcnRoYW5kRW50cmllcyA9IEFycmF5T2Y8UHJvdG9jb2w6OkNT
Uzo6U2hvcnRoYW5kRW50cnk+OjpjcmVhdGUoKTsKKyAgICBIYXNoTWFwPFN0cmluZywgUmVmUHRy
PFByb3RvY29sOjpDU1M6OkNTU1Byb3BlcnR5Pj4gcHJvcGVydHlOYW1lVG9QcmV2aW91c0FjdGl2
ZVByb3BlcnR5OwogICAgIEhhc2hTZXQ8U3RyaW5nPiBmb3VuZFNob3J0aGFuZHM7CiAgICAgU3Ry
aW5nIHByZXZpb3VzUHJpb3JpdHk7CiAgICAgU3RyaW5nIHByZXZpb3VzU3RhdHVzOwpAQCAtNjQx
LDkgKzY0Myw5IEBAIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlPiBJbnNw
ZWN0b3JTdHlsZTo6c3R5bGVXaXRoUHJvcGVydGllcygpIGNvCiAgICAgICAgIGNvbnN0IENTU1By
b3BlcnR5U291cmNlRGF0YSYgcHJvcGVydHlFbnRyeSA9IGl0LT5zb3VyY2VEYXRhOwogICAgICAg
ICBjb25zdCBTdHJpbmcmIG5hbWUgPSBwcm9wZXJ0eUVudHJ5Lm5hbWU7CiAKLSAgICAgICAgYXV0
byBzdGF0dXMgPSBpdC0+ZGlzYWJsZWQgPyBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1By
b3BlcnR5U3RhdHVzOjpEaXNhYmxlZCA6IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUHJv
cGVydHlTdGF0dXM6OkFjdGl2ZTsKKyAgICAgICAgYXV0byBzdGF0dXMgPSBpdC0+ZGlzYWJsZWQg
PyBQcm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0eVN0YXR1czo6RGlzYWJsZWQgOiBQcm90b2NvbDo6
Q1NTOjpDU1NQcm9wZXJ0eVN0YXR1czo6QWN0aXZlOwogCi0gICAgICAgIGF1dG8gcHJvcGVydHkg
PSBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1Byb3BlcnR5OjpjcmVhdGUoKQorICAgICAg
ICBhdXRvIHByb3BlcnR5ID0gUHJvdG9jb2w6OkNTUzo6Q1NTUHJvcGVydHk6OmNyZWF0ZSgpCiAg
ICAgICAgICAgICAuc2V0TmFtZShuYW1lLmNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlKCkpCiAgICAg
ICAgICAgICAuc2V0VmFsdWUocHJvcGVydHlFbnRyeS52YWx1ZSkKICAgICAgICAgICAgIC5yZWxl
YXNlKCk7CkBAIC02NjksNyArNjcxLDggQEAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6
Q1NTU3R5bGU+IEluc3BlY3RvclN0eWxlOjpzdHlsZVdpdGhQcm9wZXJ0aWVzKCkgY28KICAgICAg
ICAgICAgIFNvdXJjZVJhbmdlIGFic29sdXRlUHJvcGVydHlSYW5nZSA9IHByb3BlcnR5RW50cnku
cmFuZ2U7CiAgICAgICAgICAgICBhYnNvbHV0ZVByb3BlcnR5UmFuZ2Uuc3RhcnQgKz0gcnVsZUJv
ZHlSYW5nZVN0YXJ0OwogICAgICAgICAgICAgYWJzb2x1dGVQcm9wZXJ0eVJhbmdlLmVuZCArPSBy
dWxlQm9keVJhbmdlU3RhcnQ7Ci0gICAgICAgICAgICBwcm9wZXJ0eS0+c2V0UmFuZ2UoYnVpbGRT
b3VyY2VSYW5nZU9iamVjdChhYnNvbHV0ZVByb3BlcnR5UmFuZ2UsIGxpbmVFbmRpbmdzKSk7Cisg
ICAgICAgICAgICBpZiAoYXV0byByYW5nZSA9IGJ1aWxkU291cmNlUmFuZ2VPYmplY3QoYWJzb2x1
dGVQcm9wZXJ0eVJhbmdlLCBsaW5lRW5kaW5ncykpCisgICAgICAgICAgICAgICAgcHJvcGVydHkt
PnNldFJhbmdlKHJhbmdlLnJlbGVhc2VOb25OdWxsKCkpOwogICAgICAgICB9CiAKICAgICAgICAg
aWYgKCFpdC0+ZGlzYWJsZWQpIHsKQEAgLTY4MywzMCArNjg2LDM1IEBAIFJlZjxJbnNwZWN0b3I6
OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlPiBJbnNwZWN0b3JTdHlsZTo6c3R5bGVXaXRoUHJvcGVy
dGllcygpIGNvCiAKICAgICAgICAgICAgICAgICAvLyBDYW5vbmljYWxpemUgcHJvcGVydHkgbmFt
ZXMgdG8gdHJlYXQgbm9uLXByZWZpeGVkIGFuZCB2ZW5kb3ItcHJlZml4ZWQgcHJvcGVydHkgbmFt
ZXMgdGhlIHNhbWUgKG9wYWNpdHkgdnMuIC13ZWJraXQtb3BhY2l0eSkuCiAgICAgICAgICAgICAg
ICAgU3RyaW5nIGNhbm9uaWNhbFByb3BlcnR5TmFtZSA9IHByb3BlcnR5SWQgPyBnZXRQcm9wZXJ0
eU5hbWVTdHJpbmcocHJvcGVydHlJZCkgOiBuYW1lOwotICAgICAgICAgICAgICAgIEhhc2hNYXA8
U3RyaW5nLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0eT4+Ojpp
dGVyYXRvciBhY3RpdmVJdCA9IHByb3BlcnR5TmFtZVRvUHJldmlvdXNBY3RpdmVQcm9wZXJ0eS5m
aW5kKGNhbm9uaWNhbFByb3BlcnR5TmFtZSk7CisgICAgICAgICAgICAgICAgSGFzaE1hcDxTdHJp
bmcsIFJlZlB0cjxQcm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0eT4+OjppdGVyYXRvciBhY3RpdmVJ
dCA9IHByb3BlcnR5TmFtZVRvUHJldmlvdXNBY3RpdmVQcm9wZXJ0eS5maW5kKGNhbm9uaWNhbFBy
b3BlcnR5TmFtZSk7CiAgICAgICAgICAgICAgICAgaWYgKGFjdGl2ZUl0ICE9IHByb3BlcnR5TmFt
ZVRvUHJldmlvdXNBY3RpdmVQcm9wZXJ0eS5lbmQoKSkgewogICAgICAgICAgICAgICAgICAgICBp
ZiAocHJvcGVydHlFbnRyeS5wYXJzZWRPaykgewotICAgICAgICAgICAgICAgICAgICAgICAgYm9v
bCBzdWNjZXNzUHJpb3JpdHkgPSBhY3RpdmVJdC0+dmFsdWUtPmdldFN0cmluZyhJbnNwZWN0b3I6
OlByb3RvY29sOjpDU1M6OkNTU1Byb3BlcnR5OjpQcmlvcml0eSwgcHJldmlvdXNQcmlvcml0eSk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBib29sIHN1Y2Nlc3NTdGF0dXMgPSBhY3RpdmVJdC0+
dmFsdWUtPmdldFN0cmluZyhJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1Byb3BlcnR5OjpT
dGF0dXMsIHByZXZpb3VzU3RhdHVzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdWNj
ZXNzU3RhdHVzICYmIHByZXZpb3VzU3RhdHVzICE9ICJpbmFjdGl2ZSIpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAocHJvcGVydHlFbnRyeS5pbXBvcnRhbnQgfHwgIXN1Y2Nlc3NQ
cmlvcml0eSkgLy8gUHJpb3JpdHkgbm90IHNldCA9PSAibm90IGltcG9ydGFudCIuCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNob3VsZEluYWN0aXZhdGUgPSB0cnVlOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN0YXR1cyA9PSBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpDU1M6OkNTU1Byb3BlcnR5U3RhdHVzOjpBY3RpdmUpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gSW5hY3RpdmF0ZSBhIG5vbi1pbXBvcnRhbnQgcHJvcGVydHkgZm9s
bG93aW5nIHRoZSBzYW1lLW5hbWVkIGltcG9ydGFudCBwcm9wZXJ0eS4KLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RhdHVzID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NQ
cm9wZXJ0eVN0YXR1czo6SW5hY3RpdmU7CisgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIG5l
d1ByaW9yaXR5ID0gYWN0aXZlSXQtPnZhbHVlLT5nZXRTdHJpbmcoUHJvdG9jb2w6OkNTUzo6Q1NT
UHJvcGVydHk6OnByaW9yaXR5S2V5KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghIW5l
d1ByaW9yaXR5KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzUHJpb3JpdHkg
PSBuZXdQcmlvcml0eTsKKworICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBuZXdTdGF0dXMg
PSBhY3RpdmVJdC0+dmFsdWUtPmdldFN0cmluZyhQcm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0eTo6
c3RhdHVzS2V5KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghIW5ld1N0YXR1cykgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzU3RhdHVzID0gbmV3U3RhdHVzOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcmV2aW91c1N0YXR1cyAhPSBQcm90b2Nv
bDo6SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUoUHJvdG9jb2w6OkNTUzo6Q1NTUHJvcGVy
dHlTdGF0dXM6OkluYWN0aXZlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAocHJvcGVydHlFbnRyeS5pbXBvcnRhbnQgfHwgISFuZXdQcmlvcml0eSkgLy8gUHJpb3JpdHkg
bm90IHNldCA9PSAibm90IGltcG9ydGFudCIuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzaG91bGRJbmFjdGl2YXRlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZWxzZSBpZiAoc3RhdHVzID09IFByb3RvY29sOjpDU1M6OkNTU1Byb3BlcnR5U3Rh
dHVzOjpBY3RpdmUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElu
YWN0aXZhdGUgYSBub24taW1wb3J0YW50IHByb3BlcnR5IGZvbGxvd2luZyB0aGUgc2FtZS1uYW1l
ZCBpbXBvcnRhbnQgcHJvcGVydHkuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdGF0dXMgPSBQcm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0eVN0YXR1czo6SW5hY3RpdmU7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBib29sIHByZXZpb3VzUGFyc2VkT2s7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBib29sIHN1Y2Nlc3MgPSBhY3RpdmVJdC0+dmFsdWUtPmdl
dEJvb2xlYW4oSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0eTo6UGFyc2VkT2ss
IHByZXZpb3VzUGFyc2VkT2spOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Y2Nlc3Mg
JiYgIXByZXZpb3VzUGFyc2VkT2spCisgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIHByZXZp
b3VzUGFyc2VkT2sgPSBhY3RpdmVJdC0+dmFsdWUtPmdldEJvb2xlYW4oUHJvdG9jb2w6OkNTUzo6
Q1NTUHJvcGVydHk6OnBhcnNlZE9rS2V5KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChw
cmV2aW91c1BhcnNlZE9rICYmICFwcmV2aW91c1BhcnNlZE9rKQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNob3VsZEluYWN0aXZhdGUgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TmFt
ZVRvUHJldmlvdXNBY3RpdmVQcm9wZXJ0eS5zZXQoY2Fub25pY2FsUHJvcGVydHlOYW1lLCBwcm9w
ZXJ0eS5jb3B5UmVmKCkpOwogCiAgICAgICAgICAgICAgICAgaWYgKHNob3VsZEluYWN0aXZhdGUp
IHsKLSAgICAgICAgICAgICAgICAgICAgYWN0aXZlSXQtPnZhbHVlLT5zZXRTdGF0dXMoSW5zcGVj
dG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0eVN0YXR1czo6SW5hY3RpdmUpOworICAgICAg
ICAgICAgICAgICAgICBhY3RpdmVJdC0+dmFsdWUtPnNldFN0YXR1cyhQcm90b2NvbDo6Q1NTOjpD
U1NQcm9wZXJ0eVN0YXR1czo6SW5hY3RpdmUpOwogICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0
eU5hbWVUb1ByZXZpb3VzQWN0aXZlUHJvcGVydHkuc2V0KGNhbm9uaWNhbFByb3BlcnR5TmFtZSwg
cHJvcGVydHkuY29weVJlZigpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVs
c2UgewpAQCAtNzE0LDEzICs3MjIsMTMgQEAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6
Q1NTU3R5bGU+IEluc3BlY3RvclN0eWxlOjpzdHlsZVdpdGhQcm9wZXJ0aWVzKCkgY28KICAgICAg
ICAgICAgICAgICAvLyBEZWZhdWx0ICJpbXBsaWNpdCIgPT0gZmFsc2UuCiAgICAgICAgICAgICAg
ICAgaWYgKGltcGxpY2l0KQogICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eS0+c2V0SW1wbGlj
aXQodHJ1ZSk7Ci0gICAgICAgICAgICAgICAgc3RhdHVzID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6
Q1NTOjpDU1NQcm9wZXJ0eVN0YXR1czo6U3R5bGU7CisgICAgICAgICAgICAgICAgc3RhdHVzID0g
UHJvdG9jb2w6OkNTUzo6Q1NTUHJvcGVydHlTdGF0dXM6OlN0eWxlOwogCiAgICAgICAgICAgICAg
ICAgU3RyaW5nIHNob3J0aGFuZCA9IG1fc3R5bGUtPmdldFByb3BlcnR5U2hvcnRoYW5kKG5hbWUp
OwogICAgICAgICAgICAgICAgIGlmICghc2hvcnRoYW5kLmlzRW1wdHkoKSkgewogICAgICAgICAg
ICAgICAgICAgICBpZiAoIWZvdW5kU2hvcnRoYW5kcy5jb250YWlucyhzaG9ydGhhbmQpKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBmb3VuZFNob3J0aGFuZHMuYWRkKHNob3J0aGFuZCk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBhdXRvIGVudHJ5ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6
Q1NTOjpTaG9ydGhhbmRFbnRyeTo6Y3JlYXRlKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGF1
dG8gZW50cnkgPSBQcm90b2NvbDo6Q1NTOjpTaG9ydGhhbmRFbnRyeTo6Y3JlYXRlKCkKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAuc2V0TmFtZShzaG9ydGhhbmQpCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLnNldFZhbHVlKHNob3J0aGFuZFZhbHVlKHNob3J0aGFuZCkpCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLnJlbGVhc2UoKTsKQEAgLTczMSwxMSArNzM5LDExIEBA
IFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlPiBJbnNwZWN0b3JTdHlsZTo6
c3R5bGVXaXRoUHJvcGVydGllcygpIGNvCiAgICAgICAgIH0KIAogICAgICAgICAvLyBEZWZhdWx0
ICJzdGF0dXMiID09ICJzdHlsZSIuCi0gICAgICAgIGlmIChzdGF0dXMgIT0gSW5zcGVjdG9yOjpQ
cm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0eVN0YXR1czo6U3R5bGUpCisgICAgICAgIGlmIChzdGF0
dXMgIT0gUHJvdG9jb2w6OkNTUzo6Q1NTUHJvcGVydHlTdGF0dXM6OlN0eWxlKQogICAgICAgICAg
ICAgcHJvcGVydHktPnNldFN0YXR1cyhzdGF0dXMpOwogICAgIH0KIAotICAgIHJldHVybiBJbnNw
ZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlOjpjcmVhdGUoKQorICAgIHJldHVybiBQcm90
b2NvbDo6Q1NTOjpDU1NTdHlsZTo6Y3JlYXRlKCkKICAgICAgICAgLnNldENzc1Byb3BlcnRpZXMo
V1RGTW92ZShwcm9wZXJ0aWVzT2JqZWN0KSkKICAgICAgICAgLnNldFNob3J0aGFuZEVudHJpZXMo
V1RGTW92ZShzaG9ydGhhbmRFbnRyaWVzKSkKICAgICAgICAgLnJlbGVhc2UoKTsKQEAgLTgwNSw3
ICs4MTMsNyBAQCBWZWN0b3I8U3RyaW5nPiBJbnNwZWN0b3JTdHlsZTo6bG9uZ2hhbmRQcm9wZXJ0
aWVzKGNvbnN0IFN0cmluZyYgc2hvcnRoYW5kUHJvcGVydAogICAgIHJldHVybiBwcm9wZXJ0aWVz
OwogfQogCi1SZWY8SW5zcGVjdG9yU3R5bGVTaGVldD4gSW5zcGVjdG9yU3R5bGVTaGVldDo6Y3Jl
YXRlKEluc3BlY3RvclBhZ2VBZ2VudCogcGFnZUFnZW50LCBjb25zdCBTdHJpbmcmIGlkLCBSZWZQ
dHI8Q1NTU3R5bGVTaGVldD4mJiBwYWdlU3R5bGVTaGVldCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6
Q1NTOjpTdHlsZVNoZWV0T3JpZ2luIG9yaWdpbiwgY29uc3QgU3RyaW5nJiBkb2N1bWVudFVSTCwg
TGlzdGVuZXIqIGxpc3RlbmVyKQorUmVmPEluc3BlY3RvclN0eWxlU2hlZXQ+IEluc3BlY3RvclN0
eWxlU2hlZXQ6OmNyZWF0ZShJbnNwZWN0b3JQYWdlQWdlbnQqIHBhZ2VBZ2VudCwgY29uc3QgU3Ry
aW5nJiBpZCwgUmVmUHRyPENTU1N0eWxlU2hlZXQ+JiYgcGFnZVN0eWxlU2hlZXQsIFByb3RvY29s
OjpDU1M6OlN0eWxlU2hlZXRPcmlnaW4gb3JpZ2luLCBjb25zdCBTdHJpbmcmIGRvY3VtZW50VVJM
LCBMaXN0ZW5lciogbGlzdGVuZXIpCiB7CiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSW5zcGVj
dG9yU3R5bGVTaGVldChwYWdlQWdlbnQsIGlkLCBXVEZNb3ZlKHBhZ2VTdHlsZVNoZWV0KSwgb3Jp
Z2luLCBkb2N1bWVudFVSTCwgbGlzdGVuZXIpKTsKIH0KQEAgLTgxNyw3ICs4MjUsNyBAQCBTdHJp
bmcgSW5zcGVjdG9yU3R5bGVTaGVldDo6c3R5bGVTaGVldFVSTChDU1NTdHlsZVNoZWV0KiBwYWdl
U3R5bGVTaGVldCkKICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKIH0KIAotSW5zcGVjdG9yU3R5
bGVTaGVldDo6SW5zcGVjdG9yU3R5bGVTaGVldChJbnNwZWN0b3JQYWdlQWdlbnQqIHBhZ2VBZ2Vu
dCwgY29uc3QgU3RyaW5nJiBpZCwgUmVmUHRyPENTU1N0eWxlU2hlZXQ+JiYgcGFnZVN0eWxlU2hl
ZXQsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbiBvcmlnaW4sIGNv
bnN0IFN0cmluZyYgZG9jdW1lbnRVUkwsIExpc3RlbmVyKiBsaXN0ZW5lcikKK0luc3BlY3RvclN0
eWxlU2hlZXQ6Okluc3BlY3RvclN0eWxlU2hlZXQoSW5zcGVjdG9yUGFnZUFnZW50KiBwYWdlQWdl
bnQsIGNvbnN0IFN0cmluZyYgaWQsIFJlZlB0cjxDU1NTdHlsZVNoZWV0PiYmIHBhZ2VTdHlsZVNo
ZWV0LCBQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luIG9yaWdpbiwgY29uc3QgU3RyaW5n
JiBkb2N1bWVudFVSTCwgTGlzdGVuZXIqIGxpc3RlbmVyKQogICAgIDogbV9wYWdlQWdlbnQocGFn
ZUFnZW50KQogICAgICwgbV9pZChpZCkKICAgICAsIG1fcGFnZVN0eWxlU2hlZXQoV1RGTW92ZShw
YWdlU3R5bGVTaGVldCkpCkBAIC05NDcsNyArOTU1LDcgQEAgRXhjZXB0aW9uT3I8Q1NTU3R5bGVS
dWxlKj4gSW5zcGVjdG9yU3R5bGVTaGVldDo6YWRkUnVsZShjb25zdCBTdHJpbmcmIHNlbGVjdG9y
KQogICAgIHNldFRleHQoc3R5bGVTaGVldFRleHQudG9TdHJpbmcoKSk7CiAKICAgICAvLyBJbnNw
ZWN0b3IgU3R5bGUgU2hlZXRzIGFyZSBhbHdheXMgdHJlYXRlZCBhcyB0aG91Z2ggdGhlaXIgcGFy
c2VkIGRhdGEgaXMgcmVhZHkuCi0gICAgaWYgKG1fb3JpZ2luID09IEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6SW5zcGVjdG9yKQorICAgIGlmIChtX29yaWdpbiA9
PSBQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luOjpJbnNwZWN0b3IpCiAgICAgICAgIGZp
cmVTdHlsZVNoZWV0Q2hhbmdlZCgpOwogICAgIGVsc2UKICAgICAgICAgcmVwYXJzZVN0eWxlU2hl
ZXQoc3R5bGVTaGVldFRleHQudG9TdHJpbmcoKSk7CkBAIC0xMDA3LDcgKzEwMTUsNyBAQCBDU1NT
dHlsZVJ1bGUqIEluc3BlY3RvclN0eWxlU2hlZXQ6OnJ1bGVGb3JJZChjb25zdCBJbnNwZWN0b3JD
U1NJZCYgaWQpIGNvbnN0CiAgICAgcmV0dXJuIGlkLm9yZGluYWwoKSA+PSBtX2ZsYXRSdWxlcy5z
aXplKCkgPyBudWxscHRyIDogbV9mbGF0UnVsZXMuYXQoaWQub3JkaW5hbCgpKS5nZXQoKTsKIH0K
IAotUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGVTaGVldEJvZHk+IElu
c3BlY3RvclN0eWxlU2hlZXQ6OmJ1aWxkT2JqZWN0Rm9yU3R5bGVTaGVldCgpCitSZWZQdHI8UHJv
dG9jb2w6OkNTUzo6Q1NTU3R5bGVTaGVldEJvZHk+IEluc3BlY3RvclN0eWxlU2hlZXQ6OmJ1aWxk
T2JqZWN0Rm9yU3R5bGVTaGVldCgpCiB7CiAgICAgQ1NTU3R5bGVTaGVldCogc3R5bGVTaGVldCA9
IHBhZ2VTdHlsZVNoZWV0KCk7CiAgICAgaWYgKCFzdHlsZVNoZWV0KQpAQCAtMTAxNSw3ICsxMDIz
LDcgQEAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGVTaGVldEJvZHk+
IEluc3BlY3RvclN0eWxlU2hlZXQ6OmJ1aWxkT2IKIAogICAgIFJlZlB0cjxDU1NSdWxlTGlzdD4g
Y3NzUnVsZUxpc3QgPSBhc0NTU1J1bGVMaXN0KHN0eWxlU2hlZXQpOwogCi0gICAgYXV0byByZXN1
bHQgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlU2hlZXRCb2R5OjpjcmVhdGUo
KQorICAgIGF1dG8gcmVzdWx0ID0gUHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGVTaGVldEJvZHk6OmNy
ZWF0ZSgpCiAgICAgICAgIC5zZXRTdHlsZVNoZWV0SWQoaWQoKSkKICAgICAgICAgLnNldFJ1bGVz
KGJ1aWxkQXJyYXlGb3JSdWxlTGlzdChjc3NSdWxlTGlzdC5nZXQoKSkpCiAgICAgICAgIC5yZWxl
YXNlKCk7CkBAIC0xMDI3LDcgKzEwMzUsNyBAQCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
Q1NTOjpDU1NTdHlsZVNoZWV0Qm9keT4gSW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGRPYgogICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKLVJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNT
U1N0eWxlU2hlZXRIZWFkZXI+IEluc3BlY3RvclN0eWxlU2hlZXQ6OmJ1aWxkT2JqZWN0Rm9yU3R5
bGVTaGVldEluZm8oKQorUmVmUHRyPFByb3RvY29sOjpDU1M6OkNTU1N0eWxlU2hlZXRIZWFkZXI+
IEluc3BlY3RvclN0eWxlU2hlZXQ6OmJ1aWxkT2JqZWN0Rm9yU3R5bGVTaGVldEluZm8oKQogewog
ICAgIENTU1N0eWxlU2hlZXQqIHN0eWxlU2hlZXQgPSBwYWdlU3R5bGVTaGVldCgpOwogICAgIGlm
ICghc3R5bGVTaGVldCkKQEAgLTEwMzUsNyArMTA0Myw3IEBAIFJlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpDU1M6OkNTU1N0eWxlU2hlZXRIZWFkZXI+IEluc3BlY3RvclN0eWxlU2hlZXQ6OmJ1
aWxkCiAKICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBzdHlsZVNoZWV0LT5vd25lckRvY3VtZW50
KCk7CiAgICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQgPyBkb2N1bWVudC0+ZnJhbWUoKSA6IG51
bGxwdHI7Ci0gICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGVTaGVl
dEhlYWRlcjo6Y3JlYXRlKCkKKyAgICByZXR1cm4gUHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGVTaGVl
dEhlYWRlcjo6Y3JlYXRlKCkKICAgICAgICAgLnNldFN0eWxlU2hlZXRJZChpZCgpKQogICAgICAg
ICAuc2V0T3JpZ2luKG1fb3JpZ2luKQogICAgICAgICAuc2V0RGlzYWJsZWQoc3R5bGVTaGVldC0+
ZGlzYWJsZWQoKSkKQEAgLTEwNDgsOSArMTA1Niw5IEBAIFJlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpDU1M6OkNTU1N0eWxlU2hlZXRIZWFkZXI+IEluc3BlY3RvclN0eWxlU2hlZXQ6OmJ1aWxk
CiAgICAgICAgIC5yZWxlYXNlKCk7CiB9CiAKLXN0YXRpYyBSZWY8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6Q1NTOjpDU1NTZWxlY3Rvcj4gYnVpbGRPYmplY3RGb3JTZWxlY3RvckhlbHBlcihjb25zdCBT
dHJpbmcmIHNlbGVjdG9yVGV4dCwgY29uc3QgQ1NTU2VsZWN0b3ImIHNlbGVjdG9yKQorc3RhdGlj
IFJlZjxQcm90b2NvbDo6Q1NTOjpDU1NTZWxlY3Rvcj4gYnVpbGRPYmplY3RGb3JTZWxlY3Rvckhl
bHBlcihjb25zdCBTdHJpbmcmIHNlbGVjdG9yVGV4dCwgY29uc3QgQ1NTU2VsZWN0b3ImIHNlbGVj
dG9yKQogewotICAgIGF1dG8gaW5zcGVjdG9yU2VsZWN0b3IgPSBJbnNwZWN0b3I6OlByb3RvY29s
OjpDU1M6OkNTU1NlbGVjdG9yOjpjcmVhdGUoKQorICAgIGF1dG8gaW5zcGVjdG9yU2VsZWN0b3Ig
PSBQcm90b2NvbDo6Q1NTOjpDU1NTZWxlY3Rvcjo6Y3JlYXRlKCkKICAgICAgICAgLnNldFRleHQo
c2VsZWN0b3JUZXh0KQogICAgICAgICAucmVsZWFzZSgpOwogCkBAIC0xMDY1LDExICsxMDczLDEx
IEBAIHN0YXRpYyBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTZWxlY3Rvcj4gYnVp
bGRPYmplY3RGb3JTZWxlY3RvckhlbHBlcihjCiAgICAgcmV0dXJuIGluc3BlY3RvclNlbGVjdG9y
OwogfQogCi1zdGF0aWMgUmVmPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NT
OjpDU1NTZWxlY3Rvcj4+IHNlbGVjdG9yc0Zyb21Tb3VyY2UoY29uc3QgQ1NTUnVsZVNvdXJjZURh
dGEqIHNvdXJjZURhdGEsIGNvbnN0IFN0cmluZyYgc2hlZXRUZXh0LCBjb25zdCBDU1NTZWxlY3Rv
ckxpc3QmIHNlbGVjdG9yTGlzdCkKK3N0YXRpYyBSZWY8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6
Q1NTOjpDU1NTZWxlY3Rvcj4+IHNlbGVjdG9yc0Zyb21Tb3VyY2UoY29uc3QgQ1NTUnVsZVNvdXJj
ZURhdGEqIHNvdXJjZURhdGEsIGNvbnN0IFN0cmluZyYgc2hlZXRUZXh0LCBjb25zdCBDU1NTZWxl
Y3Rvckxpc3QmIHNlbGVjdG9yTGlzdCkKIHsKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SlND
OjpZYXJyOjpSZWd1bGFyRXhwcmVzc2lvbj4gY29tbWVudCgiL1xcKlteXSo/XFwqLyIsIEpTQzo6
WWFycjo6VGV4dENhc2VTZW5zaXRpdmUsIEpTQzo6WWFycjo6TXVsdGlsaW5lRW5hYmxlZCk7CiAK
LSAgICBhdXRvIHJlc3VsdCA9IEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NT
OjpDU1NTZWxlY3Rvcj46OmNyZWF0ZSgpOworICAgIGF1dG8gcmVzdWx0ID0gSlNPTjo6QXJyYXlP
ZjxQcm90b2NvbDo6Q1NTOjpDU1NTZWxlY3Rvcj46OmNyZWF0ZSgpOwogICAgIGNvbnN0IENTU1Nl
bGVjdG9yKiBzZWxlY3RvciA9IHNlbGVjdG9yTGlzdC5maXJzdCgpOwogICAgIGZvciAoYXV0byYg
cmFuZ2UgOiBzb3VyY2VEYXRhLT5zZWxlY3RvclJhbmdlcykgewogICAgICAgICAvLyBJZiB3ZSBk
b24ndCBoYXZlIGEgc2VsZWN0b3IsIHRoYXQgbWVhbnMgdGhlIFNvdXJjZURhdGEgZm9yIHRoaXMg
Q1NTU3R5bGVTaGVldApAQCAtMTA4OSwxNyArMTA5NywxNyBAQCBzdGF0aWMgUmVmPEpTT046OkFy
cmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTZWxlY3Rvcj4+IHNlbGVjdG9yc0Zy
b21TbwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLVJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpD
U1M6OkNTU1NlbGVjdG9yPiBJbnNwZWN0b3JTdHlsZVNoZWV0OjpidWlsZE9iamVjdEZvclNlbGVj
dG9yKGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvcikKK1JlZjxQcm90b2NvbDo6Q1NTOjpDU1NT
ZWxlY3Rvcj4gSW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGRPYmplY3RGb3JTZWxlY3Rvcihjb25z
dCBDU1NTZWxlY3Rvciogc2VsZWN0b3IpCiB7CiAgICAgcmV0dXJuIGJ1aWxkT2JqZWN0Rm9yU2Vs
ZWN0b3JIZWxwZXIoc2VsZWN0b3ItPnNlbGVjdG9yVGV4dCgpLCAqc2VsZWN0b3IpOwogfQogCi1S
ZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTZWxlY3Rvckxpc3Q+IEluc3BlY3RvclN0eWxl
U2hlZXQ6OmJ1aWxkT2JqZWN0Rm9yU2VsZWN0b3JMaXN0KENTU1N0eWxlUnVsZSogcnVsZSwgaW50
JiBlbmRpbmdMaW5lKQorUmVmPFByb3RvY29sOjpDU1M6OlNlbGVjdG9yTGlzdD4gSW5zcGVjdG9y
U3R5bGVTaGVldDo6YnVpbGRPYmplY3RGb3JTZWxlY3Rvckxpc3QoQ1NTU3R5bGVSdWxlKiBydWxl
LCBpbnQmIGVuZGluZ0xpbmUpCiB7CiAgICAgUmVmUHRyPENTU1J1bGVTb3VyY2VEYXRhPiBzb3Vy
Y2VEYXRhOwogICAgIGlmIChlbnN1cmVQYXJzZWREYXRhUmVhZHkoKSkKICAgICAgICAgc291cmNl
RGF0YSA9IHJ1bGVTb3VyY2VEYXRhRm9yKCZydWxlLT5zdHlsZSgpKTsKLSAgICBSZWZQdHI8SlNP
Tjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1NlbGVjdG9yPj4gc2VsZWN0
b3JzOworICAgIFJlZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpDU1M6OkNTU1NlbGVjdG9y
Pj4gc2VsZWN0b3JzOwogCiAgICAgLy8gVGhpcyBpbnRlbnRpb25hbGx5IGRvZXMgbm90IHJlbHkg
b24gdGhlIHNvdXJjZSBkYXRhIHRvIGF2b2lkIGNhdGNoaW5nIHRoZSB0cmFpbGluZyBjb21tZW50
cyAoYmVmb3JlIHRoZSBkZWNsYXJhdGlvbiBzdGFydGluZyAneycpLgogICAgIFN0cmluZyBzZWxl
Y3RvclRleHQgPSBydWxlLT5zZWxlY3RvclRleHQoKTsKQEAgLTExMDcsNDEgKzExMTUsNDIgQEAg
UmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U2VsZWN0b3JMaXN0PiBJbnNwZWN0b3JTdHls
ZVNoZWV0OjpidWlsZE9iamVjdEZvclMKICAgICBpZiAoc291cmNlRGF0YSkKICAgICAgICAgc2Vs
ZWN0b3JzID0gc2VsZWN0b3JzRnJvbVNvdXJjZShzb3VyY2VEYXRhLmdldCgpLCBtX3BhcnNlZFN0
eWxlU2hlZXQtPnRleHQoKSwgcnVsZS0+c3R5bGVSdWxlKCkuc2VsZWN0b3JMaXN0KCkpOwogICAg
IGVsc2UgewotICAgICAgICBzZWxlY3RvcnMgPSBKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkNTUzo6Q1NTU2VsZWN0b3I+OjpjcmVhdGUoKTsKKyAgICAgICAgc2VsZWN0b3JzID0g
SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6Q1NTOjpDU1NTZWxlY3Rvcj46OmNyZWF0ZSgpOwogICAg
ICAgICBjb25zdCBDU1NTZWxlY3Rvckxpc3QmIHNlbGVjdG9yTGlzdCA9IHJ1bGUtPnN0eWxlUnVs
ZSgpLnNlbGVjdG9yTGlzdCgpOwogICAgICAgICBmb3IgKGNvbnN0IENTU1NlbGVjdG9yKiBzZWxl
Y3RvciA9IHNlbGVjdG9yTGlzdC5maXJzdCgpOyBzZWxlY3Rvcjsgc2VsZWN0b3IgPSBDU1NTZWxl
Y3Rvckxpc3Q6Om5leHQoc2VsZWN0b3IpKQogICAgICAgICAgICAgc2VsZWN0b3JzLT5hZGRJdGVt
KGJ1aWxkT2JqZWN0Rm9yU2VsZWN0b3Ioc2VsZWN0b3IpKTsKICAgICB9Ci0gICAgYXV0byByZXN1
bHQgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlNlbGVjdG9yTGlzdDo6Y3JlYXRlKCkKLSAg
ICAgICAgLnNldFNlbGVjdG9ycyhXVEZNb3ZlKHNlbGVjdG9ycykpCisgICAgYXV0byByZXN1bHQg
PSBQcm90b2NvbDo6Q1NTOjpTZWxlY3Rvckxpc3Q6OmNyZWF0ZSgpCisgICAgICAgIC5zZXRTZWxl
Y3RvcnMoc2VsZWN0b3JzLnJlbGVhc2VOb25OdWxsKCkpCiAgICAgICAgIC5zZXRUZXh0KHNlbGVj
dG9yVGV4dCkKICAgICAgICAgLnJlbGVhc2UoKTsKLSAgICBpZiAoc291cmNlRGF0YSkKLSAgICAg
ICAgcmVzdWx0LT5zZXRSYW5nZShidWlsZFNvdXJjZVJhbmdlT2JqZWN0KHNvdXJjZURhdGEtPnJ1
bGVIZWFkZXJSYW5nZSwgbGluZUVuZGluZ3MoKSwgJmVuZGluZ0xpbmUpKTsKKyAgICBpZiAoc291
cmNlRGF0YSkgeworICAgICAgICBpZiAoYXV0byByYW5nZSA9IGJ1aWxkU291cmNlUmFuZ2VPYmpl
Y3Qoc291cmNlRGF0YS0+cnVsZUhlYWRlclJhbmdlLCBsaW5lRW5kaW5ncygpLCAmZW5kaW5nTGlu
ZSkpCisgICAgICAgICAgICByZXN1bHQtPnNldFJhbmdlKHJhbmdlLnJlbGVhc2VOb25OdWxsKCkp
OworICAgIH0KICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1SZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6Q1NTOjpDU1NSdWxlPiBJbnNwZWN0b3JTdHlsZVNoZWV0OjpidWlsZE9iamVjdEZvclJ1
bGUoQ1NTU3R5bGVSdWxlKiBydWxlKQorUmVmUHRyPFByb3RvY29sOjpDU1M6OkNTU1J1bGU+IElu
c3BlY3RvclN0eWxlU2hlZXQ6OmJ1aWxkT2JqZWN0Rm9yUnVsZShDU1NTdHlsZVJ1bGUqIHJ1bGUp
CiB7CiAgICAgQ1NTU3R5bGVTaGVldCogc3R5bGVTaGVldCA9IHBhZ2VTdHlsZVNoZWV0KCk7CiAg
ICAgaWYgKCFzdHlsZVNoZWV0KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIGludCBl
bmRpbmdMaW5lID0gMDsKLSAgICBhdXRvIHJlc3VsdCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNT
Uzo6Q1NTUnVsZTo6Y3JlYXRlKCkKKyAgICBhdXRvIHJlc3VsdCA9IFByb3RvY29sOjpDU1M6OkNT
U1J1bGU6OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRTZWxlY3Rvckxpc3QoYnVpbGRPYmplY3RGb3JT
ZWxlY3Rvckxpc3QocnVsZSwgZW5kaW5nTGluZSkpCiAgICAgICAgIC5zZXRTb3VyY2VMaW5lKGVu
ZGluZ0xpbmUpCiAgICAgICAgIC5zZXRPcmlnaW4obV9vcmlnaW4pCiAgICAgICAgIC5zZXRTdHls
ZShidWlsZE9iamVjdEZvclN0eWxlKCZydWxlLT5zdHlsZSgpKSkKICAgICAgICAgLnJlbGVhc2Uo
KTsKIAotICAgIGlmIChtX29yaWdpbiA9PSBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlN0eWxl
U2hlZXRPcmlnaW46OkF1dGhvciB8fCBtX29yaWdpbiA9PSBJbnNwZWN0b3I6OlByb3RvY29sOjpD
U1M6OlN0eWxlU2hlZXRPcmlnaW46OlVzZXIpCisgICAgaWYgKG1fb3JpZ2luID09IFByb3RvY29s
OjpDU1M6OlN0eWxlU2hlZXRPcmlnaW46OkF1dGhvciB8fCBtX29yaWdpbiA9PSBQcm90b2NvbDo6
Q1NTOjpTdHlsZVNoZWV0T3JpZ2luOjpVc2VyKQogICAgICAgICByZXN1bHQtPnNldFNvdXJjZVVS
TChmaW5hbFVSTCgpKTsKIAogICAgIGlmIChjYW5CaW5kKCkpIHsKLSAgICAgICAgSW5zcGVjdG9y
Q1NTSWQgaWQocnVsZUlkKHJ1bGUpKTsKLSAgICAgICAgaWYgKCFpZC5pc0VtcHR5KCkpCi0gICAg
ICAgICAgICByZXN1bHQtPnNldFJ1bGVJZChpZC5hc1Byb3RvY29sVmFsdWU8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6Q1NTOjpDU1NSdWxlSWQ+KCkpOworICAgICAgICBpZiAoYXV0byBydWxlSWQgPSB0
aGlzLT5ydWxlSWQocnVsZSkuYXNQcm90b2NvbFZhbHVlPFByb3RvY29sOjpDU1M6OkNTU1J1bGVJ
ZD4oKSkKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0UnVsZUlkKHJ1bGVJZC5yZWxlYXNlTm9uTnVs
bCgpKTsKICAgICB9CiAKICAgICBhdXRvIGdyb3VwaW5nc1BheWxvYWQgPSBidWlsZEFycmF5Rm9y
R3JvdXBpbmdzKCpydWxlKTsKQEAgLTExNTEsNyArMTE2MCw3IEBAIFJlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpDU1M6OkNTU1J1bGU+IEluc3BlY3RvclN0eWxlU2hlZXQ6OmJ1aWxkT2JqZWN0
Rm9yUnVsCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkNTUzo6Q1NTU3R5bGU+IEluc3BlY3RvclN0eWxlU2hlZXQ6OmJ1aWxkT2JqZWN0Rm9yU3R5
bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUpCitSZWY8UHJvdG9jb2w6OkNTUzo6Q1NTU3R5
bGU+IEluc3BlY3RvclN0eWxlU2hlZXQ6OmJ1aWxkT2JqZWN0Rm9yU3R5bGUoQ1NTU3R5bGVEZWNs
YXJhdGlvbiogc3R5bGUpCiB7CiAgICAgUmVmUHRyPENTU1J1bGVTb3VyY2VEYXRhPiBzb3VyY2VE
YXRhOwogICAgIGlmIChlbnN1cmVQYXJzZWREYXRhUmVhZHkoKSkKQEAgLTExNTksMTMgKzExNjgs
MTUgQEAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+IEluc3BlY3Rv
clN0eWxlU2hlZXQ6OmJ1aWxkT2JqZWN0Rm9yU3QKIAogICAgIEluc3BlY3RvckNTU0lkIGlkID0g
cnVsZU9yU3R5bGVJZChzdHlsZSk7CiAgICAgaWYgKGlkLmlzRW1wdHkoKSkgewotICAgICAgICBy
ZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZTo6Y3JlYXRlKCkKLSAgICAg
ICAgICAgIC5zZXRDc3NQcm9wZXJ0aWVzKEFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NT
OjpDU1NQcm9wZXJ0eT46OmNyZWF0ZSgpKQotICAgICAgICAgICAgLnNldFNob3J0aGFuZEVudHJp
ZXMoQXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlNob3J0aGFuZEVudHJ5Pjo6Y3Jl
YXRlKCkpCisgICAgICAgIHJldHVybiBQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZTo6Y3JlYXRlKCkK
KyAgICAgICAgICAgIC5zZXRDc3NQcm9wZXJ0aWVzKEFycmF5T2Y8UHJvdG9jb2w6OkNTUzo6Q1NT
UHJvcGVydHk+OjpjcmVhdGUoKSkKKyAgICAgICAgICAgIC5zZXRTaG9ydGhhbmRFbnRyaWVzKEFy
cmF5T2Y8UHJvdG9jb2w6OkNTUzo6U2hvcnRoYW5kRW50cnk+OjpjcmVhdGUoKSkKICAgICAgICAg
ICAgIC5yZWxlYXNlKCk7CiAgICAgfQorCiAgICAgUmVmUHRyPEluc3BlY3RvclN0eWxlPiBpbnNw
ZWN0b3JTdHlsZSA9IGluc3BlY3RvclN0eWxlRm9ySWQoaWQpOwotICAgIFJlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlPiByZXN1bHQgPSBpbnNwZWN0b3JTdHlsZS0+YnVp
bGRPYmplY3RGb3JTdHlsZSgpOworCisgICAgYXV0byByZXN1bHQgPSBpbnNwZWN0b3JTdHlsZS0+
YnVpbGRPYmplY3RGb3JTdHlsZSgpOwogCiAgICAgLy8gU3R5bGUgdGV4dCBjYW5ub3QgYmUgcmV0
cmlldmVkIHdpdGhvdXQgc3R5bGVzaGVldCwgc28gc2V0IGNzc1RleHQgaGVyZS4KICAgICBpZiAo
c291cmNlRGF0YSkgewpAQCAtMTI3NCw3ICsxMjg1LDcgQEAgYm9vbCBJbnNwZWN0b3JTdHlsZVNo
ZWV0OjpzdHlsZVNoZWV0TXV0YXRlZCgpIGNvbnN0CiAKIGJvb2wgSW5zcGVjdG9yU3R5bGVTaGVl
dDo6ZW5zdXJlUGFyc2VkRGF0YVJlYWR5KCkKIHsKLSAgICBib29sIGFsbG93UGFyc2VkRGF0YSA9
IG1fb3JpZ2luID09IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6
SW5zcGVjdG9yIHx8ICFzdHlsZVNoZWV0TXV0YXRlZCgpOworICAgIGJvb2wgYWxsb3dQYXJzZWRE
YXRhID0gbV9vcmlnaW4gPT0gUHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6SW5zcGVj
dG9yIHx8ICFzdHlsZVNoZWV0TXV0YXRlZCgpOwogICAgIHJldHVybiBhbGxvd1BhcnNlZERhdGEg
JiYgZW5zdXJlVGV4dCgpICYmIGVuc3VyZVNvdXJjZURhdGEoKTsKIH0KIApAQCAtMTM3MSw3ICsx
MzgyLDcgQEAgSW5zcGVjdG9yQ1NTSWQgSW5zcGVjdG9yU3R5bGVTaGVldDo6cnVsZUlkKENTU1N0
eWxlUnVsZSogcnVsZSkgY29uc3QKIAogYm9vbCBJbnNwZWN0b3JTdHlsZVNoZWV0OjpvcmlnaW5h
bFN0eWxlU2hlZXRUZXh0KFN0cmluZyogcmVzdWx0KSBjb25zdAogewotICAgIGlmICghbV9wYWdl
U3R5bGVTaGVldCB8fCBtX29yaWdpbiA9PSBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlN0eWxl
U2hlZXRPcmlnaW46OlVzZXJBZ2VudCkKKyAgICBpZiAoIW1fcGFnZVN0eWxlU2hlZXQgfHwgbV9v
cmlnaW4gPT0gUHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6VXNlckFnZW50KQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIGlubGluZVN0eWxlU2hlZXRUZXh0KHJlc3Vs
dCkgfHwgcmVzb3VyY2VTdHlsZVNoZWV0VGV4dChyZXN1bHQpIHx8IGV4dGVuc2lvblN0eWxlU2hl
ZXRUZXh0KHJlc3VsdCk7CiB9CkBAIC0xNDE0LDkgKzE0MjUsOSBAQCBib29sIEluc3BlY3RvclN0
eWxlU2hlZXQ6OmV4dGVuc2lvblN0eWxlU2hlZXRUZXh0KFN0cmluZyogcmVzdWx0KSBjb25zdAog
ICAgIHJldHVybiB0cnVlOwogfQogCi1SZWY8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpDU1M6OkNTU1J1bGU+PiBJbnNwZWN0b3JTdHlsZVNoZWV0OjpidWlsZEFycmF5Rm9yUnVs
ZUxpc3QoQ1NTUnVsZUxpc3QqIHJ1bGVMaXN0KQorUmVmPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6
OkNTUzo6Q1NTUnVsZT4+IEluc3BlY3RvclN0eWxlU2hlZXQ6OmJ1aWxkQXJyYXlGb3JSdWxlTGlz
dChDU1NSdWxlTGlzdCogcnVsZUxpc3QpCiB7Ci0gICAgYXV0byByZXN1bHQgPSBKU09OOjpBcnJh
eU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUnVsZT46OmNyZWF0ZSgpOworICAgIGF1
dG8gcmVzdWx0ID0gSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6Q1NTOjpDU1NSdWxlPjo6Y3JlYXRl
KCk7CiAgICAgaWYgKCFydWxlTGlzdCkKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKIApAQCAtMTQy
NCw4ICsxNDM1LDEwIEBAIFJlZjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNT
Uzo6Q1NTUnVsZT4+IEluc3BlY3RvclN0eWxlU2hlZXQ6OmJ1aWxkCiAgICAgQ1NTU3R5bGVSdWxl
VmVjdG9yIHJ1bGVzOwogICAgIGNvbGxlY3RGbGF0UnVsZXMoV1RGTW92ZShyZWZSdWxlTGlzdCks
ICZydWxlcyk7CiAKLSAgICBmb3IgKGF1dG8mIHJ1bGUgOiBydWxlcykKLSAgICAgICAgcmVzdWx0
LT5hZGRJdGVtKGJ1aWxkT2JqZWN0Rm9yUnVsZShydWxlLmdldCgpKSk7CisgICAgZm9yIChhdXRv
JiBydWxlIDogcnVsZXMpIHsKKyAgICAgICAgaWYgKGF1dG8gcnVsZU9iamVjdCA9IGJ1aWxkT2Jq
ZWN0Rm9yUnVsZShydWxlLmdldCgpKSkKKyAgICAgICAgICAgIHJlc3VsdC0+YWRkSXRlbShydWxl
T2JqZWN0LnJlbGVhc2VOb25OdWxsKCkpOworICAgIH0KIAogICAgIHJldHVybiByZXN1bHQ7CiB9
CkBAIC0xNDQ4LDEyICsxNDYxLDEyIEBAIHZvaWQgSW5zcGVjdG9yU3R5bGVTaGVldDo6Y29sbGVj
dEZsYXRSdWxlcyhSZWZQdHI8Q1NTUnVsZUxpc3Q+JiYgcnVsZUxpc3QsIENTU1N0CiAgICAgfQog
fQogCi1SZWY8SW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlPiBJbnNwZWN0b3JTdHls
ZVNoZWV0Rm9ySW5saW5lU3R5bGU6OmNyZWF0ZShJbnNwZWN0b3JQYWdlQWdlbnQqIHBhZ2VBZ2Vu
dCwgY29uc3QgU3RyaW5nJiBpZCwgUmVmPFN0eWxlZEVsZW1lbnQ+JiYgZWxlbWVudCwgSW5zcGVj
dG9yOjpQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luIG9yaWdpbiwgTGlzdGVuZXIqIGxp
c3RlbmVyKQorUmVmPEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZT4gSW5zcGVjdG9y
U3R5bGVTaGVldEZvcklubGluZVN0eWxlOjpjcmVhdGUoSW5zcGVjdG9yUGFnZUFnZW50KiBwYWdl
QWdlbnQsIGNvbnN0IFN0cmluZyYgaWQsIFJlZjxTdHlsZWRFbGVtZW50PiYmIGVsZW1lbnQsIFBy
b3RvY29sOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW4gb3JpZ2luLCBMaXN0ZW5lciogbGlzdGVuZXIp
CiB7CiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGlu
ZVN0eWxlKHBhZ2VBZ2VudCwgaWQsIFdURk1vdmUoZWxlbWVudCksIG9yaWdpbiwgbGlzdGVuZXIp
KTsKIH0KIAotSW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlOjpJbnNwZWN0b3JTdHls
ZVNoZWV0Rm9ySW5saW5lU3R5bGUoSW5zcGVjdG9yUGFnZUFnZW50KiBwYWdlQWdlbnQsIGNvbnN0
IFN0cmluZyYgaWQsIFJlZjxTdHlsZWRFbGVtZW50PiYmIGVsZW1lbnQsIEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbiBvcmlnaW4sIExpc3RlbmVyKiBsaXN0ZW5lcikK
K0luc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZTo6SW5zcGVjdG9yU3R5bGVTaGVldEZv
cklubGluZVN0eWxlKEluc3BlY3RvclBhZ2VBZ2VudCogcGFnZUFnZW50LCBjb25zdCBTdHJpbmcm
IGlkLCBSZWY8U3R5bGVkRWxlbWVudD4mJiBlbGVtZW50LCBQcm90b2NvbDo6Q1NTOjpTdHlsZVNo
ZWV0T3JpZ2luIG9yaWdpbiwgTGlzdGVuZXIqIGxpc3RlbmVyKQogICAgIDogSW5zcGVjdG9yU3R5
bGVTaGVldChwYWdlQWdlbnQsIGlkLCBudWxscHRyLCBvcmlnaW4sIFN0cmluZygpLCBsaXN0ZW5l
cikKICAgICAsIG1fZWxlbWVudChXVEZNb3ZlKGVsZW1lbnQpKQogICAgICwgbV9ydWxlU291cmNl
RGF0YShudWxscHRyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvclN0eWxlU2hlZXQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHls
ZVNoZWV0LmgKaW5kZXggNzNkMzYxOGU1YTQ4YTM3NDU3NjI2ZGQ1NDhkY2U3ZTM2YjFkZTEzNS4u
NzhmMTRkMjkxNmJhYTVjMzdlMDEwOTM5MmYyMWVmNjZhNjU1Zjc2YyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5oCkBAIC00NSwxOCArNDUsMTkg
QEAgY2xhc3MgRWxlbWVudDsKIGNsYXNzIEluc3BlY3RvclBhZ2VBZ2VudDsKIGNsYXNzIEluc3Bl
Y3RvclN0eWxlU2hlZXQ7CiAKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCiBjbGFzcyBJ
bnNwZWN0b3JDU1NJZCB7CiBwdWJsaWM6CiAgICAgSW5zcGVjdG9yQ1NTSWQoKSA9IGRlZmF1bHQ7
CiAKICAgICBleHBsaWNpdCBJbnNwZWN0b3JDU1NJZChjb25zdCBKU09OOjpPYmplY3QmIHZhbHVl
KQogICAgIHsKLSAgICAgICAgaWYgKCF2YWx1ZS5nZXRTdHJpbmcoInN0eWxlU2hlZXRJZCJfcywg
bV9zdHlsZVNoZWV0SWQpKQorICAgICAgICBtX3N0eWxlU2hlZXRJZCA9IHZhbHVlLmdldFN0cmlu
Zygic3R5bGVTaGVldElkIl9zKTsKKyAgICAgICAgaWYgKCFtX3N0eWxlU2hlZXRJZCkKICAgICAg
ICAgICAgIHJldHVybjsKIAotICAgICAgICBpZiAoIXZhbHVlLmdldEludGVnZXIoIm9yZGluYWwi
X3MsIG1fb3JkaW5hbCkpCisgICAgICAgIGlmIChhdXRvIG9yZGluYWwgPSB2YWx1ZS5nZXRJbnRl
Z2VyKCJvcmRpbmFsIl9zKSkKKyAgICAgICAgICAgIG1fb3JkaW5hbCA9ICpvcmRpbmFsOworICAg
ICAgICBlbHNlCiAgICAgICAgICAgICBtX3N0eWxlU2hlZXRJZCA9IFN0cmluZygpOwogICAgIH0K
IApAQCAtMTI2LDcgKzEyNyw3IEBAIHB1YmxpYzoKICAgICB+SW5zcGVjdG9yU3R5bGUoKTsKIAog
ICAgIENTU1N0eWxlRGVjbGFyYXRpb24mIGNzc1N0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdHls
ZS5nZXQoKTsgfQotICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxl
PiBidWlsZE9iamVjdEZvclN0eWxlKCkgY29uc3Q7CisgICAgUmVmPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkNTUzo6Q1NTU3R5bGU+IGJ1aWxkT2JqZWN0Rm9yU3R5bGUoKSBjb25zdDsKICAgICBSZWY8
SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU0NvbXB1dGVkU3R5bGVQ
cm9wZXJ0eT4+IGJ1aWxkQXJyYXlGb3JDb21wdXRlZFN0eWxlKCkgY29uc3Q7CiAKICAgICBFeGNl
cHRpb25PcjxTdHJpbmc+IHRleHQoKSBjb25zdDsKQEAgLTE3NSw3ICsxNzYsNyBAQCBwdWJsaWM6
CiAgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGVTaGVldEJvZHk+
IGJ1aWxkT2JqZWN0Rm9yU3R5bGVTaGVldCgpOwogICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpDU1M6OkNTU1N0eWxlU2hlZXRIZWFkZXI+IGJ1aWxkT2JqZWN0Rm9yU3R5bGVTaGVldElu
Zm8oKTsKICAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NSdWxlPiBidWls
ZE9iamVjdEZvclJ1bGUoQ1NTU3R5bGVSdWxlKik7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkNTUzo6Q1NTU3R5bGU+IGJ1aWxkT2JqZWN0Rm9yU3R5bGUoQ1NTU3R5bGVEZWNsYXJh
dGlvbiopOworICAgIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlPiBidWls
ZE9iamVjdEZvclN0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qKTsKICAgICBFeGNlcHRpb25Pcjx2
b2lkPiBzZXRTdHlsZVRleHQoY29uc3QgSW5zcGVjdG9yQ1NTSWQmLCBjb25zdCBTdHJpbmcmIHRl
eHQsIFN0cmluZyogb2xkVGV4dCk7CiAKICAgICB2aXJ0dWFsIEV4Y2VwdGlvbk9yPFN0cmluZz4g
dGV4dCgpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1RpbWVs
aW5lUmVjb3JkRmFjdG9yeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvVGltZWxpbmVS
ZWNvcmRGYWN0b3J5LmNwcAppbmRleCAzNjNkMTY4ZTgwNWVhM2Y4N2Q3YmM5ZDgyOWQ0NmRlNmNi
ZjUyYWFlLi5hMDcwMzM2Yjc1NjFkYTg1ZWNiNWZmZjRjMTRiNjFiZmYzOTYyMTM2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvVGltZWxpbmVSZWNvcmRGYWN0b3J5LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvVGltZWxpbmVSZWNvcmRGYWN0b3J5LmNwcApA
QCAtMTYxLDkgKzE2MSw5IEBAIFJlZjxKU09OOjpPYmplY3Q+IFRpbWVsaW5lUmVjb3JkRmFjdG9y
eTo6Y3JlYXRlUGFpbnREYXRhKGNvbnN0IEZsb2F0UXVhZCYgcXVhZCkKICAgICByZXR1cm4gZGF0
YTsKIH0KIAotdm9pZCBUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmFwcGVuZExheW91dFJvb3QoSlNP
Tjo6T2JqZWN0KiBkYXRhLCBjb25zdCBGbG9hdFF1YWQmIHF1YWQpCit2b2lkIFRpbWVsaW5lUmVj
b3JkRmFjdG9yeTo6YXBwZW5kTGF5b3V0Um9vdChKU09OOjpPYmplY3QmIGRhdGEsIGNvbnN0IEZs
b2F0UXVhZCYgcXVhZCkKIHsKLSAgICBkYXRhLT5zZXRBcnJheSgicm9vdCJfcywgY3JlYXRlUXVh
ZChxdWFkKSk7CisgICAgZGF0YS5zZXRBcnJheSgicm9vdCJfcywgY3JlYXRlUXVhZChxdWFkKSk7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9UaW1lbGluZVJlY29yZEZhY3RvcnkuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9UaW1lbGluZVJlY29yZEZhY3RvcnkuaAppbmRleCA0OGY0MzBlOWJlZDkzZDFhZmQyYmEz
NmU1OTU3ZTdlZjA2MThiM2FhLi5jYTVkYjQxMDg5OGRiOTNjZDBhMzVjMjYyNzkwOWMxZDQ5ZTFj
MjYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvVGltZWxpbmVSZWNvcmRG
YWN0b3J5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1RpbWVsaW5lUmVjb3JkRmFj
dG9yeS5oCkBAIC01OSw3ICs1OSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPEpTT046Ok9i
amVjdD4gY3JlYXRlT2JzZXJ2ZXJDYWxsYmFja0RhdGEoY29uc3QgU3RyaW5nJiBjYWxsYmFja1R5
cGUpOwogICAgIHN0YXRpYyBSZWY8SlNPTjo6T2JqZWN0PiBjcmVhdGVQYWludERhdGEoY29uc3Qg
RmxvYXRRdWFkJik7CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBlbmRMYXlvdXRSb290KEpTT046Ok9i
amVjdCogZGF0YSwgY29uc3QgRmxvYXRRdWFkJik7CisgICAgc3RhdGljIHZvaWQgYXBwZW5kTGF5
b3V0Um9vdChKU09OOjpPYmplY3QmIGRhdGEsIGNvbnN0IEZsb2F0UXVhZCYpOwogCiBwcml2YXRl
OgogICAgIFRpbWVsaW5lUmVjb3JkRmFjdG9yeSgpIHsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBbmltYXRpb25BZ2VudC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckFuaW1hdGlvbkFnZW50LmNwcApp
bmRleCA3MTMyNWY1MjJkM2ExMjNhNTM0ZmM3ZmYzYTU4NGI1OGJjOTRmOTM2Li4wMjU3MTJiMDk0
NjRlYzZiMTU0N2VjZjcwNjZlMjBiZGZhYmY0MWNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckFuaW1hdGlvbkFnZW50LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckFuaW1hdGlvbkFnZW50LmNwcApA
QCAtNzIsNDUgKzcyLDQ1IEBAIHN0YXRpYyBPcHRpb25hbDxkb3VibGU+IHByb3RvY29sVmFsdWVG
b3JTZWNvbmRzKGNvbnN0IFNlY29uZHMmIHNlY29uZHMpCiAgICAgcmV0dXJuIHNlY29uZHMubWls
bGlzZWNvbmRzKCk7CiB9CiAKLXN0YXRpYyBPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpB
bmltYXRpb246OlBsYXliYWNrRGlyZWN0aW9uPiBwcm90b2NvbFZhbHVlRm9yUGxheWJhY2tEaXJl
Y3Rpb24oUGxheWJhY2tEaXJlY3Rpb24gcGxheWJhY2tEaXJlY3Rpb24pCitzdGF0aWMgT3B0aW9u
YWw8UHJvdG9jb2w6OkFuaW1hdGlvbjo6UGxheWJhY2tEaXJlY3Rpb24+IHByb3RvY29sVmFsdWVG
b3JQbGF5YmFja0RpcmVjdGlvbihQbGF5YmFja0RpcmVjdGlvbiBwbGF5YmFja0RpcmVjdGlvbikK
IHsKICAgICBzd2l0Y2ggKHBsYXliYWNrRGlyZWN0aW9uKSB7CiAgICAgY2FzZSBQbGF5YmFja0Rp
cmVjdGlvbjo6Tm9ybWFsOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6QW5p
bWF0aW9uOjpQbGF5YmFja0RpcmVjdGlvbjo6Tm9ybWFsOworICAgICAgICByZXR1cm4gUHJvdG9j
b2w6OkFuaW1hdGlvbjo6UGxheWJhY2tEaXJlY3Rpb246Ok5vcm1hbDsKICAgICBjYXNlIFBsYXli
YWNrRGlyZWN0aW9uOjpSZXZlcnNlOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2Nv
bDo6QW5pbWF0aW9uOjpQbGF5YmFja0RpcmVjdGlvbjo6UmV2ZXJzZTsKKyAgICAgICAgcmV0dXJu
IFByb3RvY29sOjpBbmltYXRpb246OlBsYXliYWNrRGlyZWN0aW9uOjpSZXZlcnNlOwogICAgIGNh
c2UgUGxheWJhY2tEaXJlY3Rpb246OkFsdGVybmF0ZToKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkFuaW1hdGlvbjo6UGxheWJhY2tEaXJlY3Rpb246OkFsdGVybmF0ZTsKKyAg
ICAgICAgcmV0dXJuIFByb3RvY29sOjpBbmltYXRpb246OlBsYXliYWNrRGlyZWN0aW9uOjpBbHRl
cm5hdGU7CiAgICAgY2FzZSBQbGF5YmFja0RpcmVjdGlvbjo6QWx0ZXJuYXRlUmV2ZXJzZToKLSAg
ICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFuaW1hdGlvbjo6UGxheWJhY2tEaXJl
Y3Rpb246OkFsdGVybmF0ZVJldmVyc2U7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6QW5pbWF0
aW9uOjpQbGF5YmFja0RpcmVjdGlvbjo6QWx0ZXJuYXRlUmV2ZXJzZTsKICAgICB9CiAKICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQogCi1zdGF0
aWMgT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6QW5pbWF0aW9uOjpGaWxsTW9kZT4gcHJv
dG9jb2xWYWx1ZUZvckZpbGxNb2RlKEZpbGxNb2RlIGZpbGxNb2RlKQorc3RhdGljIE9wdGlvbmFs
PFByb3RvY29sOjpBbmltYXRpb246OkZpbGxNb2RlPiBwcm90b2NvbFZhbHVlRm9yRmlsbE1vZGUo
RmlsbE1vZGUgZmlsbE1vZGUpCiB7CiAgICAgc3dpdGNoIChmaWxsTW9kZSkgewogICAgIGNhc2Ug
RmlsbE1vZGU6Ok5vbmU6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpBbmlt
YXRpb246OkZpbGxNb2RlOjpOb25lOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OkFuaW1hdGlv
bjo6RmlsbE1vZGU6Ok5vbmU7CiAgICAgY2FzZSBGaWxsTW9kZTo6Rm9yd2FyZHM6Ci0gICAgICAg
IHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpBbmltYXRpb246OkZpbGxNb2RlOjpGb3J3YXJk
czsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpBbmltYXRpb246OkZpbGxNb2RlOjpGb3J3YXJk
czsKICAgICBjYXNlIEZpbGxNb2RlOjpCYWNrd2FyZHM6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0
b3I6OlByb3RvY29sOjpBbmltYXRpb246OkZpbGxNb2RlOjpCYWNrd2FyZHM7CisgICAgICAgIHJl
dHVybiBQcm90b2NvbDo6QW5pbWF0aW9uOjpGaWxsTW9kZTo6QmFja3dhcmRzOwogICAgIGNhc2Ug
RmlsbE1vZGU6OkJvdGg6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpBbmlt
YXRpb246OkZpbGxNb2RlOjpCb3RoOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OkFuaW1hdGlv
bjo6RmlsbE1vZGU6OkJvdGg7CiAgICAgY2FzZSBGaWxsTW9kZTo6QXV0bzoKLSAgICAgICAgcmV0
dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFuaW1hdGlvbjo6RmlsbE1vZGU6OkF1dG87CisgICAg
ICAgIHJldHVybiBQcm90b2NvbDo6QW5pbWF0aW9uOjpGaWxsTW9kZTo6QXV0bzsKICAgICB9CiAK
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQog
Ci1zdGF0aWMgUmVmPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6QW5pbWF0aW9u
OjpLZXlmcmFtZT4+IGJ1aWxkT2JqZWN0Rm9yS2V5ZnJhbWVzKEtleWZyYW1lRWZmZWN0JiBrZXlm
cmFtZUVmZmVjdCkKK3N0YXRpYyBSZWY8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6QW5pbWF0aW9u
OjpLZXlmcmFtZT4+IGJ1aWxkT2JqZWN0Rm9yS2V5ZnJhbWVzKEtleWZyYW1lRWZmZWN0JiBrZXlm
cmFtZUVmZmVjdCkKIHsKLSAgICBhdXRvIGtleWZyYW1lc1BheWxvYWQgPSBKU09OOjpBcnJheU9m
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFuaW1hdGlvbjo6S2V5ZnJhbWU+OjpjcmVhdGUoKTsKKyAg
ICBhdXRvIGtleWZyYW1lc1BheWxvYWQgPSBKU09OOjpBcnJheU9mPFByb3RvY29sOjpBbmltYXRp
b246OktleWZyYW1lPjo6Y3JlYXRlKCk7CiAKICAgICBjb25zdCBhdXRvJiBibGVuZGluZ0tleWZy
YW1lcyA9IGtleWZyYW1lRWZmZWN0LmJsZW5kaW5nS2V5ZnJhbWVzKCk7CiAgICAgY29uc3QgYXV0
byYgcGFyc2VkS2V5ZnJhbWVzID0ga2V5ZnJhbWVFZmZlY3QucGFyc2VkS2V5ZnJhbWVzKCk7CkBA
IC0xMzAsNyArMTMwLDcgQEAgc3RhdGljIFJlZjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkFuaW1hdGlvbjo6S2V5ZnJhbWU+PiBidWlsZE9iamVjdEYKICAgICAgICAgICAgIEFT
U0VSVChibGVuZGluZ0tleWZyYW1lLnN0eWxlKCkpOwogICAgICAgICAgICAgYXV0byYgc3R5bGUg
PSAqYmxlbmRpbmdLZXlmcmFtZS5zdHlsZSgpOwogCi0gICAgICAgICAgICBhdXRvIGtleWZyYW1l
UGF5bG9hZCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFuaW1hdGlvbjo6S2V5ZnJhbWU6OmNyZWF0
ZSgpCisgICAgICAgICAgICBhdXRvIGtleWZyYW1lUGF5bG9hZCA9IFByb3RvY29sOjpBbmltYXRp
b246OktleWZyYW1lOjpjcmVhdGUoKQogICAgICAgICAgICAgICAgIC5zZXRPZmZzZXQoYmxlbmRp
bmdLZXlmcmFtZS5rZXkoKSkKICAgICAgICAgICAgICAgICAucmVsZWFzZSgpOwogCkBAIC0xNjcs
NyArMTY3LDcgQEAgc3RhdGljIFJlZjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkFuaW1hdGlvbjo6S2V5ZnJhbWU+PiBidWlsZE9iamVjdEYKICAgICAgICAgfQogICAgIH0gZWxz
ZSB7CiAgICAgICAgIGZvciAoY29uc3QgYXV0byYgcGFyc2VkS2V5ZnJhbWUgOiBwYXJzZWRLZXlm
cmFtZXMpIHsKLSAgICAgICAgICAgIGF1dG8ga2V5ZnJhbWVQYXlsb2FkID0gSW5zcGVjdG9yOjpQ
cm90b2NvbDo6QW5pbWF0aW9uOjpLZXlmcmFtZTo6Y3JlYXRlKCkKKyAgICAgICAgICAgIGF1dG8g
a2V5ZnJhbWVQYXlsb2FkID0gUHJvdG9jb2w6OkFuaW1hdGlvbjo6S2V5ZnJhbWU6OmNyZWF0ZSgp
CiAgICAgICAgICAgICAgICAgLnNldE9mZnNldChwYXJzZWRLZXlmcmFtZS5jb21wdXRlZE9mZnNl
dCkKICAgICAgICAgICAgICAgICAucmVsZWFzZSgpOwogCkBAIC0xODYsOSArMTg2LDkgQEAgc3Rh
dGljIFJlZjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFuaW1hdGlvbjo6S2V5
ZnJhbWU+PiBidWlsZE9iamVjdEYKICAgICByZXR1cm4ga2V5ZnJhbWVzUGF5bG9hZDsKIH0KIAot
c3RhdGljIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpBbmltYXRpb246OkVmZmVjdD4gYnVpbGRP
YmplY3RGb3JFZmZlY3QoQW5pbWF0aW9uRWZmZWN0JiBlZmZlY3QpCitzdGF0aWMgUmVmPFByb3Rv
Y29sOjpBbmltYXRpb246OkVmZmVjdD4gYnVpbGRPYmplY3RGb3JFZmZlY3QoQW5pbWF0aW9uRWZm
ZWN0JiBlZmZlY3QpCiB7Ci0gICAgYXV0byBlZmZlY3RQYXlsb2FkID0gSW5zcGVjdG9yOjpQcm90
b2NvbDo6QW5pbWF0aW9uOjpFZmZlY3Q6OmNyZWF0ZSgpCisgICAgYXV0byBlZmZlY3RQYXlsb2Fk
ID0gUHJvdG9jb2w6OkFuaW1hdGlvbjo6RWZmZWN0OjpjcmVhdGUoKQogICAgICAgICAucmVsZWFz
ZSgpOwogCiAgICAgaWYgKGF1dG8gc3RhcnREZWxheSA9IHByb3RvY29sVmFsdWVGb3JTZWNvbmRz
KGVmZmVjdC5kZWxheSgpKSkKQEAgLTIzOCwyMCArMjM4LDE3IEBAIHZvaWQgSW5zcGVjdG9yQW5p
bWF0aW9uQWdlbnQ6OmRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChGcm9udGVuZFJvdXRlcios
IEJhY2tlCiAKIHZvaWQgSW5zcGVjdG9yQW5pbWF0aW9uQWdlbnQ6OndpbGxEZXN0cm95RnJvbnRl
bmRBbmRCYWNrZW5kKERpc2Nvbm5lY3RSZWFzb24pCiB7Ci0gICAgRXJyb3JTdHJpbmcgaWdub3Jl
ZDsKLSAgICBzdG9wVHJhY2tpbmcoaWdub3JlZCk7Ci0gICAgZGlzYWJsZShpZ25vcmVkKTsKKyAg
ICBzdG9wVHJhY2tpbmcoKTsKKyAgICBkaXNhYmxlKCk7CiAKICAgICBBU1NFUlQobV9pbnN0cnVt
ZW50aW5nQWdlbnRzLnBlcnNpc3RlbnRBbmltYXRpb25BZ2VudCgpID09IHRoaXMpOwogICAgIG1f
aW5zdHJ1bWVudGluZ0FnZW50cy5zZXRQZXJzaXN0ZW50QW5pbWF0aW9uQWdlbnQobnVsbHB0cik7
CiB9CiAKLXZvaWQgSW5zcGVjdG9yQW5pbWF0aW9uQWdlbnQ6OmVuYWJsZShFcnJvclN0cmluZyYg
ZXJyb3JTdHJpbmcpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JBbmlt
YXRpb25BZ2VudDo6ZW5hYmxlKCkKIHsKLSAgICBpZiAobV9pbnN0cnVtZW50aW5nQWdlbnRzLmVu
YWJsZWRBbmltYXRpb25BZ2VudCgpID09IHRoaXMpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAi
QW5pbWF0aW9uIGRvbWFpbiBhbHJlYWR5IGVuYWJsZWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9CisgICAgaWYgKG1faW5zdHJ1bWVudGluZ0FnZW50cy5lbmFibGVkQW5pbWF0aW9uQWdlbnQo
KSA9PSB0aGlzKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkFuaW1hdGlvbiBkb21h
aW4gYWxyZWFkeSBlbmFibGVkIl9zKTsKIAogICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy5zZXRF
bmFibGVkQW5pbWF0aW9uQWdlbnQodGhpcyk7CiAKQEAgLTI3MCw0OSArMjY3LDUxIEBAIHZvaWQg
SW5zcGVjdG9yQW5pbWF0aW9uQWdlbnQ6OmVuYWJsZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcp
CiAgICAgICAgICAgICAgICAgYmluZEFuaW1hdGlvbigqYW5pbWF0aW9uLCBmYWxzZSk7CiAgICAg
ICAgIH0KICAgICB9CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckFuaW1h
dGlvbkFnZW50OjpkaXNhYmxlKEVycm9yU3RyaW5nJikKK1Byb3RvY29sOjpFcnJvclN0cmluZ09y
PHZvaWQ+IEluc3BlY3RvckFuaW1hdGlvbkFnZW50OjpkaXNhYmxlKCkKIHsKICAgICBtX2luc3Ry
dW1lbnRpbmdBZ2VudHMuc2V0RW5hYmxlZEFuaW1hdGlvbkFnZW50KG51bGxwdHIpOwogCiAgICAg
cmVzZXQoKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yQW5pbWF0aW9u
QWdlbnQ6OnJlcXVlc3RFZmZlY3RUYXJnZXQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25z
dCBTdHJpbmcmIGFuaW1hdGlvbklkLCBpbnQqIG5vZGVJZCkKK1Byb3RvY29sOjpFcnJvclN0cmlu
Z09yPFByb3RvY29sOjpET006Ok5vZGVJZD4gSW5zcGVjdG9yQW5pbWF0aW9uQWdlbnQ6OnJlcXVl
c3RFZmZlY3RUYXJnZXQoY29uc3QgUHJvdG9jb2w6OkFuaW1hdGlvbjo6QW5pbWF0aW9uSWQmIGFu
aW1hdGlvbklkKQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwog
ICAgIGF1dG8qIGFuaW1hdGlvbiA9IGFzc2VydEFuaW1hdGlvbihlcnJvclN0cmluZywgYW5pbWF0
aW9uSWQpOwogICAgIGlmICghYW5pbWF0aW9uKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJl
dHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAgICBhdXRvKiBkb21BZ2VudCA9
IG1faW5zdHJ1bWVudGluZ0FnZW50cy5wZXJzaXN0ZW50RE9NQWdlbnQoKTsKLSAgICBpZiAoIWRv
bUFnZW50KSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIkRPTSBkb21haW4gbXVzdCBiZSBlbmFi
bGVkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghZG9tQWdlbnQpCisgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiRE9NIGRvbWFpbiBtdXN0IGJlIGVuYWJsZWQiX3Mp
OwogCiAgICAgYXV0byogZWZmZWN0ID0gYW5pbWF0aW9uLT5lZmZlY3QoKTsKLSAgICBpZiAoIWlz
PEtleWZyYW1lRWZmZWN0PihlZmZlY3QpKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIkFuaW1h
dGlvbiBmb3IgZ2l2ZW4gYW5pbWF0aW9uSWQgZG9lcyBub3QgaGF2ZSBhbiBlZmZlY3QiX3M7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKCFpczxLZXlmcmFtZUVmZmVjdD4oZWZmZWN0
KSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJBbmltYXRpb24gZm9yIGdpdmVuIGFu
aW1hdGlvbklkIGRvZXMgbm90IGhhdmUgYW4gZWZmZWN0Il9zKTsKIAogICAgIGF1dG8mIGtleWZy
YW1lRWZmZWN0ID0gZG93bmNhc3Q8S2V5ZnJhbWVFZmZlY3Q+KCplZmZlY3QpOwogCiAgICAgYXV0
byogdGFyZ2V0ID0ga2V5ZnJhbWVFZmZlY3QudGFyZ2V0RWxlbWVudE9yUHNldWRvRWxlbWVudCgp
OwotICAgIGlmICghdGFyZ2V0KSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIkFuaW1hdGlvbiBm
b3IgZ2l2ZW4gYW5pbWF0aW9uSWQgZG9lcyBub3QgaGF2ZSBhIHRhcmdldCJfczsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KKyAgICBpZiAoIXRhcmdldCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4
cGVjdGVkKCJBbmltYXRpb24gZm9yIGdpdmVuIGFuaW1hdGlvbklkIGRvZXMgbm90IGhhdmUgYSB0
YXJnZXQiX3MpOwogCi0gICAgKm5vZGVJZCA9IGRvbUFnZW50LT5wdXNoTm9kZVBhdGhUb0Zyb250
ZW5kKGVycm9yU3RyaW5nLCB0YXJnZXQpOworICAgIHJldHVybiBkb21BZ2VudC0+cHVzaE5vZGVQ
YXRoVG9Gcm9udGVuZChlcnJvclN0cmluZywgdGFyZ2V0KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JB
bmltYXRpb25BZ2VudDo6cmVzb2x2ZUFuaW1hdGlvbihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcs
IGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uSWQsIGNvbnN0IFN0cmluZyogb2JqZWN0R3JvdXAsIFJl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiByZXN1bHQp
CitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9i
amVjdD4+IEluc3BlY3RvckFuaW1hdGlvbkFnZW50OjpyZXNvbHZlQW5pbWF0aW9uKGNvbnN0IFBy
b3RvY29sOjpBbmltYXRpb246OkFuaW1hdGlvbklkJiBhbmltYXRpb25JZCwgY29uc3QgU3RyaW5n
JiBvYmplY3RHcm91cCkKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7
CisKICAgICBhdXRvKiBhbmltYXRpb24gPSBhc3NlcnRBbmltYXRpb24oZXJyb3JTdHJpbmcsIGFu
aW1hdGlvbklkKTsKICAgICBpZiAoIWFuaW1hdGlvbikKLSAgICAgICAgcmV0dXJuOworICAgICAg
ICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCiAgICAgYXV0byogc3RhdGUg
PSBhbmltYXRpb24tPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+ZXhlY1N0YXRlKCk7CiAgICAg
YXV0byBpbmplY3RlZFNjcmlwdCA9IG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmluamVjdGVkU2Ny
aXB0Rm9yKHN0YXRlKTsKQEAgLTMyOCwzOCArMzI3LDQyIEBAIHZvaWQgSW5zcGVjdG9yQW5pbWF0
aW9uQWdlbnQ6OnJlc29sdmVBbmltYXRpb24oRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25z
dCBTCiAKICAgICBpZiAoIXZhbHVlKSB7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
ICAgICAgICBlcnJvclN0cmluZyA9ICJJbnRlcm5hbCBlcnJvcjogdW5rbm93biBBbmltYXRpb24g
Zm9yIGdpdmVuIGFuaW1hdGlvbklkIl9zOwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVy
biBtYWtlVW5leHBlY3RlZCgiSW50ZXJuYWwgZXJyb3I6IHVua25vd24gQW5pbWF0aW9uIGZvciBn
aXZlbiBhbmltYXRpb25JZCJfcyk7CiAgICAgfQogCi0gICAgU3RyaW5nIG9iamVjdEdyb3VwTmFt
ZSA9IG9iamVjdEdyb3VwID8gKm9iamVjdEdyb3VwIDogU3RyaW5nKCk7Ci0gICAgcmVzdWx0ID0g
aW5qZWN0ZWRTY3JpcHQud3JhcE9iamVjdCh2YWx1ZSwgb2JqZWN0R3JvdXBOYW1lKTsKKyAgICBh
dXRvIG9iamVjdCA9IGluamVjdGVkU2NyaXB0LndyYXBPYmplY3QodmFsdWUsIG9iamVjdEdyb3Vw
KTsKKyAgICBpZiAoIW9iamVjdCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJJbnRl
cm5hbCBlcnJvcjogdW5hYmxlIHRvIGNhc3QgQW5pbWF0aW9uIik7CisKKyAgICByZXR1cm4gb2Jq
ZWN0LnJlbGVhc2VOb25OdWxsKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQW5pbWF0aW9uQWdlbnQ6
OnN0YXJ0VHJhY2tpbmcoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nKQorUHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yQW5pbWF0aW9uQWdlbnQ6OnN0YXJ0VHJhY2tpbmcoKQog
ewotICAgIGlmIChtX2luc3RydW1lbnRpbmdBZ2VudHMudHJhY2tpbmdBbmltYXRpb25BZ2VudCgp
ID09IHRoaXMpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiQW5pbWF0aW9uIGRvbWFpbiBhbHJl
YWR5IHRyYWNraW5nIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmIChtX2luc3Ry
dW1lbnRpbmdBZ2VudHMudHJhY2tpbmdBbmltYXRpb25BZ2VudCgpID09IHRoaXMpCisgICAgICAg
IHJldHVybiBtYWtlVW5leHBlY3RlZCgiQW5pbWF0aW9uIGRvbWFpbiBhbHJlYWR5IHRyYWNraW5n
Il9zKTsKIAogICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy5zZXRUcmFja2luZ0FuaW1hdGlvbkFn
ZW50KHRoaXMpOwogCiAgICAgQVNTRVJUKG1fdHJhY2tlZERlY2xhcmF0aXZlQW5pbWF0aW9uRGF0
YS5pc0VtcHR5KCkpOwogCiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPnRyYWNraW5nU3RhcnQo
bV9lbnZpcm9ubWVudC5leGVjdXRpb25TdG9wd2F0Y2goKS5lbGFwc2VkVGltZSgpLnNlY29uZHMo
KSk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckFuaW1hdGlvbkFnZW50
OjpzdG9wVHJhY2tpbmcoRXJyb3JTdHJpbmcmKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9p
ZD4gSW5zcGVjdG9yQW5pbWF0aW9uQWdlbnQ6OnN0b3BUcmFja2luZygpCiB7CiAgICAgaWYgKG1f
aW5zdHJ1bWVudGluZ0FnZW50cy50cmFja2luZ0FuaW1hdGlvbkFnZW50KCkgIT0gdGhpcykKLSAg
ICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4geyB9OwogCiAgICAgbV9pbnN0cnVtZW50aW5n
QWdlbnRzLnNldFRyYWNraW5nQW5pbWF0aW9uQWdlbnQobnVsbHB0cik7CiAKICAgICBtX3RyYWNr
ZWREZWNsYXJhdGl2ZUFuaW1hdGlvbkRhdGEuY2xlYXIoKTsKIAogICAgIG1fZnJvbnRlbmREaXNw
YXRjaGVyLT50cmFja2luZ0NvbXBsZXRlKG1fZW52aXJvbm1lbnQuZXhlY3V0aW9uU3RvcHdhdGNo
KCkuZWxhcHNlZFRpbWUoKS5zZWNvbmRzKCkpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAogc3Rh
dGljIGJvb2wgaXNEZWxheWVkKENvbXB1dGVkRWZmZWN0VGltaW5nJiBjb21wdXRlZFRpbWluZykK
QEAgLTM4MCwzMSArMzgzLDMxIEBAIHZvaWQgSW5zcGVjdG9yQW5pbWF0aW9uQWdlbnQ6OndpbGxB
cHBseUtleWZyYW1lRWZmZWN0KEVsZW1lbnQmIHRhcmdldCwgS2V5ZnJhbWVFCiAgICAgfSk7CiAg
ICAgYXV0byYgdHJhY2tpbmdEYXRhID0gZW5zdXJlUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKIAot
ICAgIE9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFuaW1hdGlvbjo6QW5pbWF0aW9uU3Rh
dGU+IGFuaW1hdGlvbkFuaW1hdGlvblN0YXRlOworICAgIE9wdGlvbmFsPFByb3RvY29sOjpBbmlt
YXRpb246OkFuaW1hdGlvblN0YXRlPiBhbmltYXRpb25BbmltYXRpb25TdGF0ZTsKIAogICAgIGlm
ICgoZW5zdXJlUmVzdWx0LmlzTmV3RW50cnkgfHwgIWlzRGVsYXllZCh0cmFja2luZ0RhdGEubGFz
dENvbXB1dGVkVGltaW5nKSkgJiYgaXNEZWxheWVkKGNvbXB1dGVkVGltaW5nKSkKLSAgICAgICAg
YW5pbWF0aW9uQW5pbWF0aW9uU3RhdGUgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBbmltYXRpb246
OkFuaW1hdGlvblN0YXRlOjpEZWxheWVkOworICAgICAgICBhbmltYXRpb25BbmltYXRpb25TdGF0
ZSA9IFByb3RvY29sOjpBbmltYXRpb246OkFuaW1hdGlvblN0YXRlOjpEZWxheWVkOwogICAgIGVs
c2UgaWYgKGVuc3VyZVJlc3VsdC5pc05ld0VudHJ5IHx8IHRyYWNraW5nRGF0YS5sYXN0Q29tcHV0
ZWRUaW1pbmcucGhhc2UgIT0gY29tcHV0ZWRUaW1pbmcucGhhc2UpIHsKICAgICAgICAgc3dpdGNo
IChjb21wdXRlZFRpbWluZy5waGFzZSkgewogICAgICAgICBjYXNlIEFuaW1hdGlvbkVmZmVjdFBo
YXNlOjpCZWZvcmU6Ci0gICAgICAgICAgICBhbmltYXRpb25BbmltYXRpb25TdGF0ZSA9IEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkFuaW1hdGlvbjo6QW5pbWF0aW9uU3RhdGU6OlJlYWR5OworICAgICAg
ICAgICAgYW5pbWF0aW9uQW5pbWF0aW9uU3RhdGUgPSBQcm90b2NvbDo6QW5pbWF0aW9uOjpBbmlt
YXRpb25TdGF0ZTo6UmVhZHk7CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIEFu
aW1hdGlvbkVmZmVjdFBoYXNlOjpBY3RpdmU6Ci0gICAgICAgICAgICBhbmltYXRpb25BbmltYXRp
b25TdGF0ZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFuaW1hdGlvbjo6QW5pbWF0aW9uU3RhdGU6
OkFjdGl2ZTsKKyAgICAgICAgICAgIGFuaW1hdGlvbkFuaW1hdGlvblN0YXRlID0gUHJvdG9jb2w6
OkFuaW1hdGlvbjo6QW5pbWF0aW9uU3RhdGU6OkFjdGl2ZTsKICAgICAgICAgICAgIGJyZWFrOwog
CiAgICAgICAgIGNhc2UgQW5pbWF0aW9uRWZmZWN0UGhhc2U6OkFmdGVyOgotICAgICAgICAgICAg
YW5pbWF0aW9uQW5pbWF0aW9uU3RhdGUgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBbmltYXRpb246
OkFuaW1hdGlvblN0YXRlOjpEb25lOworICAgICAgICAgICAgYW5pbWF0aW9uQW5pbWF0aW9uU3Rh
dGUgPSBQcm90b2NvbDo6QW5pbWF0aW9uOjpBbmltYXRpb25TdGF0ZTo6RG9uZTsKICAgICAgICAg
ICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgQW5pbWF0aW9uRWZmZWN0UGhhc2U6OklkbGU6Ci0g
ICAgICAgICAgICBhbmltYXRpb25BbmltYXRpb25TdGF0ZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkFuaW1hdGlvbjo6QW5pbWF0aW9uU3RhdGU6OkNhbmNlbGVkOworICAgICAgICAgICAgYW5pbWF0
aW9uQW5pbWF0aW9uU3RhdGUgPSBQcm90b2NvbDo6QW5pbWF0aW9uOjpBbmltYXRpb25TdGF0ZTo6
Q2FuY2VsZWQ7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAo
dHJhY2tpbmdEYXRhLmxhc3RDb21wdXRlZFRpbWluZy5jdXJyZW50SXRlcmF0aW9uICE9IGNvbXB1
dGVkVGltaW5nLmN1cnJlbnRJdGVyYXRpb24pIHsKICAgICAgICAgLy8gSXRlcmF0aW9ucyBhcmUg
cmVwcmVzZW50ZWQgYnkgc2VxdWVudGlhbCAiYWN0aXZlIiBzdGF0ZSBldmVudHMuCi0gICAgICAg
IGFuaW1hdGlvbkFuaW1hdGlvblN0YXRlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QW5pbWF0aW9u
OjpBbmltYXRpb25TdGF0ZTo6QWN0aXZlOworICAgICAgICBhbmltYXRpb25BbmltYXRpb25TdGF0
ZSA9IFByb3RvY29sOjpBbmltYXRpb246OkFuaW1hdGlvblN0YXRlOjpBY3RpdmU7CiAgICAgfQog
CiAgICAgdHJhY2tpbmdEYXRhLmxhc3RDb21wdXRlZFRpbWluZyA9IGNvbXB1dGVkVGltaW5nOwpA
QCAtNDEyLDcgKzQxNSw3IEBAIHZvaWQgSW5zcGVjdG9yQW5pbWF0aW9uQWdlbnQ6OndpbGxBcHBs
eUtleWZyYW1lRWZmZWN0KEVsZW1lbnQmIHRhcmdldCwgS2V5ZnJhbWVFCiAgICAgaWYgKCFhbmlt
YXRpb25BbmltYXRpb25TdGF0ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byBldmVudCA9
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFuaW1hdGlvbjo6VHJhY2tpbmdVcGRhdGU6OmNyZWF0ZSgp
CisgICAgYXV0byBldmVudCA9IFByb3RvY29sOjpBbmltYXRpb246OlRyYWNraW5nVXBkYXRlOjpj
cmVhdGUoKQogICAgICAgICAuc2V0VHJhY2tpbmdBbmltYXRpb25JZCh0cmFja2luZ0RhdGEudHJh
Y2tpbmdBbmltYXRpb25JZCkKICAgICAgICAgLnNldEFuaW1hdGlvblN0YXRlKGFuaW1hdGlvbkFu
aW1hdGlvblN0YXRlLnZhbHVlKCkpCiAgICAgICAgIC5yZWxlYXNlKCk7CkBAIC00NDEsOCArNDQ0
LDcgQEAgdm9pZCBJbnNwZWN0b3JBbmltYXRpb25BZ2VudDo6ZGlkQ2hhbmdlV2ViQW5pbWF0aW9u
TmFtZShXZWJBbmltYXRpb24mIGFuaW1hdGlvbikKICAgICBpZiAoYW5pbWF0aW9uSWQuaXNFbXB0
eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIG5hbWUgPSBhbmltYXRpb24uaWQoKTsK
LSAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+bmFtZUNoYW5nZWQoYW5pbWF0aW9uSWQsICFuYW1l
LmlzRW1wdHkoKSA/ICZuYW1lIDogbnVsbHB0cik7CisgICAgbV9mcm9udGVuZERpc3BhdGNoZXIt
Pm5hbWVDaGFuZ2VkKGFuaW1hdGlvbklkLCBhbmltYXRpb24uaWQoKSk7CiB9CiAKIHZvaWQgSW5z
cGVjdG9yQW5pbWF0aW9uQWdlbnQ6OmRpZFNldFdlYkFuaW1hdGlvbkVmZmVjdChXZWJBbmltYXRp
b24mIGFuaW1hdGlvbikKQEAgLTUyNSw3ICs1MjcsNyBAQCBTdHJpbmcgSW5zcGVjdG9yQW5pbWF0
aW9uQWdlbnQ6OmZpbmRBbmltYXRpb25JZChXZWJBbmltYXRpb24mIGFuaW1hdGlvbikKICAgICBy
ZXR1cm4gbnVsbFN0cmluZygpOwogfQogCi1XZWJBbmltYXRpb24qIEluc3BlY3RvckFuaW1hdGlv
bkFnZW50Ojphc3NlcnRBbmltYXRpb24oRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBT
dHJpbmcmIGFuaW1hdGlvbklkKQorV2ViQW5pbWF0aW9uKiBJbnNwZWN0b3JBbmltYXRpb25BZ2Vu
dDo6YXNzZXJ0QW5pbWF0aW9uKFByb3RvY29sOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNv
bnN0IFN0cmluZyYgYW5pbWF0aW9uSWQpCiB7CiAgICAgYXV0byogYW5pbWF0aW9uID0gbV9hbmlt
YXRpb25JZE1hcC5nZXQoYW5pbWF0aW9uSWQpOwogICAgIGlmICghYW5pbWF0aW9uKQpAQCAtNTM4
LDcgKzU0MCw3IEBAIHZvaWQgSW5zcGVjdG9yQW5pbWF0aW9uQWdlbnQ6OmJpbmRBbmltYXRpb24o
V2ViQW5pbWF0aW9uJiBhbmltYXRpb24sIGJvb2wgY2FwdHVyCiAgICAgYXV0byBhbmltYXRpb25J
ZCA9IG1ha2VTdHJpbmcoImFuaW1hdGlvbjoiICsgSWRlbnRpZmllcnNGYWN0b3J5OjpjcmVhdGVJ
ZGVudGlmaWVyKCkpOwogICAgIG1fYW5pbWF0aW9uSWRNYXAuc2V0KGFuaW1hdGlvbklkLCAmYW5p
bWF0aW9uKTsKIAotICAgIGF1dG8gYW5pbWF0aW9uUGF5bG9hZCA9IEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkFuaW1hdGlvbjo6QW5pbWF0aW9uOjpjcmVhdGUoKQorICAgIGF1dG8gYW5pbWF0aW9uUGF5
bG9hZCA9IFByb3RvY29sOjpBbmltYXRpb246OkFuaW1hdGlvbjo6Y3JlYXRlKCkKICAgICAgICAg
LnNldEFuaW1hdGlvbklkKGFuaW1hdGlvbklkKQogICAgICAgICAucmVsZWFzZSgpOwogCkBAIC02
MDMsOSArNjA1LDkgQEAgdm9pZCBJbnNwZWN0b3JBbmltYXRpb25BZ2VudDo6c3RvcFRyYWNraW5n
RGVjbGFyYXRpdmVBbmltYXRpb24oRGVjbGFyYXRpdmVBbmltYXQKICAgICAgICAgcmV0dXJuOwog
CiAgICAgaWYgKGl0LT52YWx1ZS5sYXN0Q29tcHV0ZWRUaW1pbmcucGhhc2UgIT0gQW5pbWF0aW9u
RWZmZWN0UGhhc2U6OkFmdGVyICYmIGl0LT52YWx1ZS5sYXN0Q29tcHV0ZWRUaW1pbmcucGhhc2Ug
IT0gQW5pbWF0aW9uRWZmZWN0UGhhc2U6OklkbGUpIHsKLSAgICAgICAgYXV0byBldmVudCA9IElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkFuaW1hdGlvbjo6VHJhY2tpbmdVcGRhdGU6OmNyZWF0ZSgpCisg
ICAgICAgIGF1dG8gZXZlbnQgPSBQcm90b2NvbDo6QW5pbWF0aW9uOjpUcmFja2luZ1VwZGF0ZTo6
Y3JlYXRlKCkKICAgICAgICAgICAgIC5zZXRUcmFja2luZ0FuaW1hdGlvbklkKGl0LT52YWx1ZS50
cmFja2luZ0FuaW1hdGlvbklkKQotICAgICAgICAgICAgLnNldEFuaW1hdGlvblN0YXRlKEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkFuaW1hdGlvbjo6QW5pbWF0aW9uU3RhdGU6OkNhbmNlbGVkKQorICAg
ICAgICAgICAgLnNldEFuaW1hdGlvblN0YXRlKFByb3RvY29sOjpBbmltYXRpb246OkFuaW1hdGlv
blN0YXRlOjpDYW5jZWxlZCkKICAgICAgICAgICAgIC5yZWxlYXNlKCk7CiAgICAgICAgIG1fZnJv
bnRlbmREaXNwYXRjaGVyLT50cmFja2luZ1VwZGF0ZShtX2Vudmlyb25tZW50LmV4ZWN1dGlvblN0
b3B3YXRjaCgpLmVsYXBzZWRUaW1lKCkuc2Vjb25kcygpLCBXVEZNb3ZlKGV2ZW50KSk7CiAgICAg
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JB
bmltYXRpb25BZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0
b3JBbmltYXRpb25BZ2VudC5oCmluZGV4IDhiNTExNjI4Yzk3YTIyMmE4ZjlhY2Q4ZDNlNWIyMDJh
OGRiYjZiZWMuLjA2NGFjNDA2M2MzMDlmZGI0MWM3MWJmY2Y2Y2JkOWVhNjRlZDkzMTYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQW5pbWF0aW9u
QWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckFu
aW1hdGlvbkFnZW50LmgKQEAgLTQ0LDI2ICs0NCwyNCBAQCBjbGFzcyBLZXlmcmFtZUVmZmVjdDsK
IGNsYXNzIFBhZ2U7CiBjbGFzcyBXZWJBbmltYXRpb247CiAKLXR5cGVkZWYgU3RyaW5nIEVycm9y
U3RyaW5nOwotCiBjbGFzcyBJbnNwZWN0b3JBbmltYXRpb25BZ2VudCBmaW5hbCA6IHB1YmxpYyBJ
bnNwZWN0b3JBZ2VudEJhc2UsIHB1YmxpYyBJbnNwZWN0b3I6OkFuaW1hdGlvbkJhY2tlbmREaXNw
YXRjaGVySGFuZGxlciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW5zcGVjdG9yQW5pbWF0
aW9uQWdlbnQpOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIElu
c3BlY3RvckFuaW1hdGlvbkFnZW50KFBhZ2VBZ2VudENvbnRleHQmKTsKLSAgICB+SW5zcGVjdG9y
QW5pbWF0aW9uQWdlbnQoKSBvdmVycmlkZTsKKyAgICB+SW5zcGVjdG9yQW5pbWF0aW9uQWdlbnQo
KTsKIAogICAgIC8vIEluc3BlY3RvckFnZW50QmFzZQotICAgIHZvaWQgZGlkQ3JlYXRlRnJvbnRl
bmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRSb3V0ZXIqLCBJbnNwZWN0b3I6OkJhY2tl
bmREaXNwYXRjaGVyKikgb3ZlcnJpZGU7Ci0gICAgdm9pZCB3aWxsRGVzdHJveUZyb250ZW5kQW5k
QmFja2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24pIG92ZXJyaWRlOworICAgIHZvaWQg
ZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRSb3V0ZXIqLCBJ
bnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyKik7CisgICAgdm9pZCB3aWxsRGVzdHJveUZyb250
ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24pOwogCiAgICAgLy8gQW5p
bWF0aW9uQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyCi0gICAgdm9pZCBlbmFibGUoRXJyb3JTdHJp
bmcmKSBvdmVycmlkZTsKLSAgICB2b2lkIGRpc2FibGUoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsK
LSAgICB2b2lkIHJlcXVlc3RFZmZlY3RUYXJnZXQoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcm
IGFuaW1hdGlvbklkLCBpbnQqIG5vZGVJZCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZXNvbHZlQW5p
bWF0aW9uKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBhbmltYXRpb25JZCwgY29uc3QgU3Ry
aW5nKiBvYmplY3RHcm91cCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJl
bW90ZU9iamVjdD4mKSBvdmVycmlkZTsKLSAgICB2b2lkIHN0YXJ0VHJhY2tpbmcoRXJyb3JTdHJp
bmcmKSBvdmVycmlkZTsKLSAgICB2b2lkIHN0b3BUcmFja2luZyhFcnJvclN0cmluZyYpIG92ZXJy
aWRlOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZW5hYmxl
KCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBkaXNhYmxl
KCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpET006Ok5vZGVJZD4gcmVxdWVzdEVmZmVjdFRhcmdldChjb25zdCBJbnNwZWN0b3I6
OlByb3RvY29sOjpBbmltYXRpb246OkFuaW1hdGlvbklkJik7CisgICAgSW5zcGVjdG9yOjpQcm90
b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6UmVt
b3RlT2JqZWN0Pj4gcmVzb2x2ZUFuaW1hdGlvbihjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpB
bmltYXRpb246OkFuaW1hdGlvbklkJiwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCk7CisgICAg
SW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzdGFydFRyYWNraW5nKCk7
CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzdG9wVHJhY2tp
bmcoKTsKIAogICAgIC8vIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbgogICAgIHZvaWQgd2lsbEFw
cGx5S2V5ZnJhbWVFZmZlY3QoRWxlbWVudCYsIEtleWZyYW1lRWZmZWN0JiwgQ29tcHV0ZWRFZmZl
Y3RUaW1pbmcpOwpAQCAtNzcsNyArNzUsNyBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgU3Ry
aW5nIGZpbmRBbmltYXRpb25JZChXZWJBbmltYXRpb24mKTsKLSAgICBXZWJBbmltYXRpb24qIGFz
c2VydEFuaW1hdGlvbihFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uSWQpOwor
ICAgIFdlYkFuaW1hdGlvbiogYXNzZXJ0QW5pbWF0aW9uKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVy
cm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBhbmltYXRpb25JZCk7CiAgICAgdm9pZCBiaW5kQW5p
bWF0aW9uKFdlYkFuaW1hdGlvbiYsIGJvb2wgY2FwdHVyZUJhY2t0cmFjZSk7CiAgICAgdm9pZCB1
bmJpbmRBbmltYXRpb24oY29uc3QgU3RyaW5nJiBhbmltYXRpb25JZCk7CiAgICAgdm9pZCBhbmlt
YXRpb25EZXN0cm95ZWRUaW1lckZpcmVkKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2Vu
dC5jcHAKaW5kZXggOTEyOTI2NDhkNjgyZDljMzgxZTUyNGZkMDk3MDA4YTQ3YzM2NTA0YS4uYWY2
NzM3OGE2ZGRjZDFhZTc3MjQ0ZTg5OTUzNjc3M2E3MDI3YjAzYyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQXBwbGlj
YXRpb25DYWNoZUFnZW50LmNwcApAQCAtNTcsMzEgKzU3LDMwIEBAIHZvaWQgSW5zcGVjdG9yQXBw
bGljYXRpb25DYWNoZUFnZW50OjpkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoRnJvbnRlbmRS
b3V0ZXIqCiAKIHZvaWQgSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50Ojp3aWxsRGVzdHJv
eUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24pCiB7Ci0gICAg
RXJyb3JTdHJpbmcgaWdub3JlZDsKLSAgICBkaXNhYmxlKGlnbm9yZWQpOworICAgIGRpc2FibGUo
KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQ6OmVuYWJsZShFcnJv
clN0cmluZyYgZXJyb3JTdHJpbmcpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNw
ZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQ6OmVuYWJsZSgpCiB7Ci0gICAgaWYgKG1faW5zdHJ1
bWVudGluZ0FnZW50cy5lbmFibGVkQXBwbGljYXRpb25DYWNoZUFnZW50KCkgPT0gdGhpcykgewot
ICAgICAgICBlcnJvclN0cmluZyA9ICJBcHBsaWNhdGlvbkNhY2hlIGRvbWFpbiBhbHJlYWR5IGVu
YWJsZWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKG1faW5zdHJ1bWVudGlu
Z0FnZW50cy5lbmFibGVkQXBwbGljYXRpb25DYWNoZUFnZW50KCkgPT0gdGhpcykKKyAgICAgICAg
cmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJBcHBsaWNhdGlvbkNhY2hlIGRvbWFpbiBhbHJlYWR5IGVu
YWJsZWQiX3MpOwogCiAgICAgbV9pbnN0cnVtZW50aW5nQWdlbnRzLnNldEVuYWJsZWRBcHBsaWNh
dGlvbkNhY2hlQWdlbnQodGhpcyk7CiAKICAgICAvLyBXZSBuZWVkIHRvIHBhc3MgaW5pdGlhbCBu
YXZpZ2F0b3Iub25PbmxpbmUuCiAgICAgbmV0d29ya1N0YXRlQ2hhbmdlZCgpOworCisgICAgcmV0
dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQ6OmRpc2Fi
bGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9p
ZD4gSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50OjpkaXNhYmxlKCkKIHsKLSAgICBpZiAo
bV9pbnN0cnVtZW50aW5nQWdlbnRzLmVuYWJsZWRBcHBsaWNhdGlvbkNhY2hlQWdlbnQoKSAhPSB0
aGlzKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIkFwcGxpY2F0aW9uQ2FjaGUgZG9tYWluIGFs
cmVhZHkgZGlzYWJsZWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKG1faW5z
dHJ1bWVudGluZ0FnZW50cy5lbmFibGVkQXBwbGljYXRpb25DYWNoZUFnZW50KCkgIT0gdGhpcykK
KyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJBcHBsaWNhdGlvbkNhY2hlIGRvbWFpbiBh
bHJlYWR5IGRpc2FibGVkIl9zKTsKIAogICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy5zZXRFbmFi
bGVkQXBwbGljYXRpb25DYWNoZUFnZW50KG51bGxwdHIpOworCisgICAgcmV0dXJuIHsgfTsKIH0K
IAogdm9pZCBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQ6OnVwZGF0ZUFwcGxpY2F0aW9u
Q2FjaGVTdGF0dXMoRnJhbWUqIGZyYW1lKQpAQCAtMTA5LDE2ICsxMDgsMTMgQEAgdm9pZCBJbnNw
ZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQ6Om5ldHdvcmtTdGF0ZUNoYW5nZWQoKQogICAgIG1f
ZnJvbnRlbmREaXNwYXRjaGVyLT5uZXR3b3JrU3RhdGVVcGRhdGVkKHBsYXRmb3JtU3RyYXRlZ2ll
cygpLT5sb2FkZXJTdHJhdGVneSgpLT5pc09uTGluZSgpKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JB
cHBsaWNhdGlvbkNhY2hlQWdlbnQ6OmdldEZyYW1lc1dpdGhNYW5pZmVzdHMoRXJyb3JTdHJpbmcm
IGVycm9yU3RyaW5nLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpB
cHBsaWNhdGlvbkNhY2hlOjpGcmFtZVdpdGhNYW5pZmVzdD4+JiByZXN1bHQpCitFeHBlY3RlZDxS
ZWY8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6QXBwbGljYXRpb25DYWNoZTo6RnJhbWVXaXRoTWFu
aWZlc3Q+PiwgUHJvdG9jb2w6OkVycm9yU3RyaW5nPiBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hl
QWdlbnQ6OmdldEZyYW1lc1dpdGhNYW5pZmVzdHMoKQogewogICAgIGF1dG8qIHBhZ2VBZ2VudCA9
IG1faW5zdHJ1bWVudGluZ0FnZW50cy5lbmFibGVkUGFnZUFnZW50KCk7Ci0gICAgaWYgKCFwYWdl
QWdlbnQpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiUGFnZSBkb21haW4gbXVzdCBiZSBlbmFi
bGVkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgcmVzdWx0ID0gSlNPTjo6QXJy
YXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcHBsaWNhdGlvbkNhY2hlOjpGcmFtZVdpdGhNYW5p
ZmVzdD46OmNyZWF0ZSgpOworICAgIGlmICghcGFnZUFnZW50KQorICAgICAgICByZXR1cm4gbWFr
ZVVuZXhwZWN0ZWQoIlBhZ2UgZG9tYWluIG11c3QgYmUgZW5hYmxlZCJfcyk7CiAKKyAgICBhdXRv
IHJlc3VsdCA9IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkZyYW1l
V2l0aE1hbmlmZXN0Pjo6Y3JlYXRlKCk7CiAgICAgZm9yIChGcmFtZSogZnJhbWUgPSAmbV9pbnNw
ZWN0ZWRQYWdlLm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZl
cnNlTmV4dCgpKSB7CiAgICAgICAgIGF1dG8qIGRvY3VtZW50TG9hZGVyID0gZnJhbWUtPmxvYWRl
cigpLmRvY3VtZW50TG9hZGVyKCk7CiAgICAgICAgIGlmICghZG9jdW1lbnRMb2FkZXIpCkBAIC0x
MjcsMTYgKzEyMywxNyBAQCB2b2lkIEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudDo6Z2V0
RnJhbWVzV2l0aE1hbmlmZXN0cyhFcnJvclN0cmluZyYgZXJyb3JTdAogICAgICAgICBhdXRvJiBo
b3N0ID0gZG9jdW1lbnRMb2FkZXItPmFwcGxpY2F0aW9uQ2FjaGVIb3N0KCk7CiAgICAgICAgIFN0
cmluZyBtYW5pZmVzdFVSTCA9IGhvc3QuYXBwbGljYXRpb25DYWNoZUluZm8oKS5tYW5pZmVzdC5z
dHJpbmcoKTsKICAgICAgICAgaWYgKCFtYW5pZmVzdFVSTC5pc0VtcHR5KCkpIHsKLSAgICAgICAg
ICAgIHJlc3VsdC0+YWRkSXRlbShJbnNwZWN0b3I6OlByb3RvY29sOjpBcHBsaWNhdGlvbkNhY2hl
OjpGcmFtZVdpdGhNYW5pZmVzdDo6Y3JlYXRlKCkKKyAgICAgICAgICAgIHJlc3VsdC0+YWRkSXRl
bShQcm90b2NvbDo6QXBwbGljYXRpb25DYWNoZTo6RnJhbWVXaXRoTWFuaWZlc3Q6OmNyZWF0ZSgp
CiAgICAgICAgICAgICAgICAgLnNldEZyYW1lSWQocGFnZUFnZW50LT5mcmFtZUlkKGZyYW1lKSkK
ICAgICAgICAgICAgICAgICAuc2V0TWFuaWZlc3RVUkwobWFuaWZlc3RVUkwpCiAgICAgICAgICAg
ICAgICAgLnNldFN0YXR1cyhzdGF0aWNfY2FzdDxpbnQ+KGhvc3Quc3RhdHVzKCkpKQogICAgICAg
ICAgICAgICAgIC5yZWxlYXNlKCkpOwogICAgICAgICB9CiAgICAgfQorICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKLURvY3VtZW50TG9hZGVyKiBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQ6
OmFzc2VydEZyYW1lV2l0aERvY3VtZW50TG9hZGVyKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywg
Y29uc3QgU3RyaW5nJiBmcmFtZUlkKQorRG9jdW1lbnRMb2FkZXIqIEluc3BlY3RvckFwcGxpY2F0
aW9uQ2FjaGVBZ2VudDo6YXNzZXJ0RnJhbWVXaXRoRG9jdW1lbnRMb2FkZXIoUHJvdG9jb2w6OkVy
cm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29y
azo6RnJhbWVJZCYgZnJhbWVJZCkKIHsKICAgICBhdXRvKiBwYWdlQWdlbnQgPSBtX2luc3RydW1l
bnRpbmdBZ2VudHMuZW5hYmxlZFBhZ2VBZ2VudCgpOwogICAgIGlmICghcGFnZUFnZW50KSB7CkBA
IC0xNTEsMjggKzE0OCwzMiBAQCBEb2N1bWVudExvYWRlciogSW5zcGVjdG9yQXBwbGljYXRpb25D
YWNoZUFnZW50Ojphc3NlcnRGcmFtZVdpdGhEb2N1bWVudExvYWRlcihFcgogICAgIHJldHVybiBJ
bnNwZWN0b3JQYWdlQWdlbnQ6OmFzc2VydERvY3VtZW50TG9hZGVyKGVycm9yU3RyaW5nLCBmcmFt
ZSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50OjpnZXRNYW5pZmVz
dEZvckZyYW1lKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBmcmFtZUlk
LCBTdHJpbmcqIG1hbmlmZXN0VVJMKQorRXhwZWN0ZWQ8U3RyaW5nLCBQcm90b2NvbDo6RXJyb3JT
dHJpbmc+IEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudDo6Z2V0TWFuaWZlc3RGb3JGcmFt
ZShjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpGcmFtZUlkJiBmcmFtZUlkKQog
eworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIERvY3VtZW50
TG9hZGVyKiBkb2N1bWVudExvYWRlciA9IGFzc2VydEZyYW1lV2l0aERvY3VtZW50TG9hZGVyKGVy
cm9yU3RyaW5nLCBmcmFtZUlkKTsKICAgICBpZiAoIWRvY3VtZW50TG9hZGVyKQotICAgICAgICBy
ZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKLSAg
ICAqbWFuaWZlc3RVUkwgPSBkb2N1bWVudExvYWRlci0+YXBwbGljYXRpb25DYWNoZUhvc3QoKS5h
cHBsaWNhdGlvbkNhY2hlSW5mbygpLm1hbmlmZXN0LnN0cmluZygpOworICAgIHJldHVybiBkb2N1
bWVudExvYWRlci0+YXBwbGljYXRpb25DYWNoZUhvc3QoKS5hcHBsaWNhdGlvbkNhY2hlSW5mbygp
Lm1hbmlmZXN0LnN0cmluZygpOwogfQogCi12b2lkIEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVB
Z2VudDo6Z2V0QXBwbGljYXRpb25DYWNoZUZvckZyYW1lKEVycm9yU3RyaW5nJiBlcnJvclN0cmlu
ZywgY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXBw
bGljYXRpb25DYWNoZTo6QXBwbGljYXRpb25DYWNoZT4mIGFwcGxpY2F0aW9uQ2FjaGUpCitFeHBl
Y3RlZDxSZWY8UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkFwcGxpY2F0aW9uQ2FjaGU+LCBQ
cm90b2NvbDo6RXJyb3JTdHJpbmc+IEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudDo6Z2V0
QXBwbGljYXRpb25DYWNoZUZvckZyYW1lKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdv
cms6OkZyYW1lSWQmIGZyYW1lSWQpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9y
U3RyaW5nOworCiAgICAgYXV0byogZG9jdW1lbnRMb2FkZXIgPSBhc3NlcnRGcmFtZVdpdGhEb2N1
bWVudExvYWRlcihlcnJvclN0cmluZywgZnJhbWVJZCk7CiAgICAgaWYgKCFkb2N1bWVudExvYWRl
cikKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JT
dHJpbmcpOwogCiAgICAgYXV0byYgaG9zdCA9IGRvY3VtZW50TG9hZGVyLT5hcHBsaWNhdGlvbkNh
Y2hlSG9zdCgpOwotICAgIGFwcGxpY2F0aW9uQ2FjaGUgPSBidWlsZE9iamVjdEZvckFwcGxpY2F0
aW9uQ2FjaGUoaG9zdC5yZXNvdXJjZUxpc3QoKSwgaG9zdC5hcHBsaWNhdGlvbkNhY2hlSW5mbygp
KTsKKyAgICByZXR1cm4gYnVpbGRPYmplY3RGb3JBcHBsaWNhdGlvbkNhY2hlKGhvc3QucmVzb3Vy
Y2VMaXN0KCksIGhvc3QuYXBwbGljYXRpb25DYWNoZUluZm8oKSk7CiB9CiAKLVJlZjxJbnNwZWN0
b3I6OlByb3RvY29sOjpBcHBsaWNhdGlvbkNhY2hlOjpBcHBsaWNhdGlvbkNhY2hlPiBJbnNwZWN0
b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yQXBwbGljYXRpb25DYWNoZShj
b25zdCBWZWN0b3I8QXBwbGljYXRpb25DYWNoZUhvc3Q6OlJlc291cmNlSW5mbz4mIGFwcGxpY2F0
aW9uQ2FjaGVSZXNvdXJjZXMsIGNvbnN0IEFwcGxpY2F0aW9uQ2FjaGVIb3N0OjpDYWNoZUluZm8m
IGFwcGxpY2F0aW9uQ2FjaGVJbmZvKQorUmVmPFByb3RvY29sOjpBcHBsaWNhdGlvbkNhY2hlOjpB
cHBsaWNhdGlvbkNhY2hlPiBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQ6OmJ1aWxkT2Jq
ZWN0Rm9yQXBwbGljYXRpb25DYWNoZShjb25zdCBWZWN0b3I8QXBwbGljYXRpb25DYWNoZUhvc3Q6
OlJlc291cmNlSW5mbz4mIGFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZXMsIGNvbnN0IEFwcGxpY2F0
aW9uQ2FjaGVIb3N0OjpDYWNoZUluZm8mIGFwcGxpY2F0aW9uQ2FjaGVJbmZvKQogewotICAgIHJl
dHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpBcHBsaWNhdGlvbkNhY2hlOjpBcHBsaWNhdGlvbkNh
Y2hlOjpjcmVhdGUoKQorICAgIHJldHVybiBQcm90b2NvbDo6QXBwbGljYXRpb25DYWNoZTo6QXBw
bGljYXRpb25DYWNoZTo6Y3JlYXRlKCkKICAgICAgICAgLnNldE1hbmlmZXN0VVJMKGFwcGxpY2F0
aW9uQ2FjaGVJbmZvLm1hbmlmZXN0LnN0cmluZygpKQogICAgICAgICAuc2V0U2l6ZShhcHBsaWNh
dGlvbkNhY2hlSW5mby5zaXplKQogICAgICAgICAuc2V0Q3JlYXRpb25UaW1lKGFwcGxpY2F0aW9u
Q2FjaGVJbmZvLmNyZWF0aW9uVGltZSkKQEAgLTE4MSwxNSArMTgyLDE1IEBAIFJlZjxJbnNwZWN0
b3I6OlByb3RvY29sOjpBcHBsaWNhdGlvbkNhY2hlOjpBcHBsaWNhdGlvbkNhY2hlPiBJbnNwZWN0
b3JBcHBsaWNhdGlvCiAgICAgICAgIC5yZWxlYXNlKCk7CiB9CiAKLVJlZjxKU09OOjpBcnJheU9m
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkFwcGxpY2F0aW9uQ2FjaGVS
ZXNvdXJjZT4+IEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudDo6YnVpbGRBcnJheUZvckFw
cGxpY2F0aW9uQ2FjaGVSZXNvdXJjZXMoY29uc3QgVmVjdG9yPEFwcGxpY2F0aW9uQ2FjaGVIb3N0
OjpSZXNvdXJjZUluZm8+JiBhcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2VzKQorUmVmPEpTT046OkFy
cmF5T2Y8UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJj
ZT4+IEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudDo6YnVpbGRBcnJheUZvckFwcGxpY2F0
aW9uQ2FjaGVSZXNvdXJjZXMoY29uc3QgVmVjdG9yPEFwcGxpY2F0aW9uQ2FjaGVIb3N0OjpSZXNv
dXJjZUluZm8+JiBhcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2VzKQogewotICAgIGF1dG8gcmVzdWx0
ID0gSlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcHBsaWNhdGlvbkNhY2hlOjpB
cHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U+OjpjcmVhdGUoKTsKKyAgICBhdXRvIHJlc3VsdCA9IEpT
T046OkFycmF5T2Y8UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkFwcGxpY2F0aW9uQ2FjaGVS
ZXNvdXJjZT46OmNyZWF0ZSgpOwogICAgIGZvciAoYXV0byYgaW5mbyA6IGFwcGxpY2F0aW9uQ2Fj
aGVSZXNvdXJjZXMpCiAgICAgICAgIHJlc3VsdC0+YWRkSXRlbShidWlsZE9iamVjdEZvckFwcGxp
Y2F0aW9uQ2FjaGVSZXNvdXJjZShpbmZvKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotUmVm
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkFwcGxpY2F0aW9uQ2FjaGVS
ZXNvdXJjZT4gSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50OjpidWlsZE9iamVjdEZvckFw
cGxpY2F0aW9uQ2FjaGVSZXNvdXJjZShjb25zdCBBcHBsaWNhdGlvbkNhY2hlSG9zdDo6UmVzb3Vy
Y2VJbmZvJiByZXNvdXJjZUluZm8pCitSZWY8UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkFw
cGxpY2F0aW9uQ2FjaGVSZXNvdXJjZT4gSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50Ojpi
dWlsZE9iamVjdEZvckFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZShjb25zdCBBcHBsaWNhdGlvbkNh
Y2hlSG9zdDo6UmVzb3VyY2VJbmZvJiByZXNvdXJjZUluZm8pCiB7CiAgICAgU3RyaW5nQnVpbGRl
ciB0eXBlczsKIApAQCAtMjA4LDcgKzIwOSw3IEBAIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpB
cHBsaWNhdGlvbkNhY2hlOjpBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U+IEluc3BlY3RvckFwCiAg
ICAgaWYgKHJlc291cmNlSW5mby5pc0V4cGxpY2l0KQogICAgICAgICB0eXBlcy5hcHBlbmRMaXRl
cmFsKCJFeHBsaWNpdCAiKTsKIAotICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpBcHBs
aWNhdGlvbkNhY2hlOjpBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U6OmNyZWF0ZSgpCisgICAgcmV0
dXJuIFByb3RvY29sOjpBcHBsaWNhdGlvbkNhY2hlOjpBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U6
OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRVcmwocmVzb3VyY2VJbmZvLnJlc291cmNlLnN0cmluZygp
KQogICAgICAgICAuc2V0U2l6ZShzdGF0aWNfY2FzdDxpbnQ+KHJlc291cmNlSW5mby5zaXplKSkK
ICAgICAgICAgLnNldFR5cGUodHlwZXMudG9TdHJpbmcoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckFwcGxpY2F0aW9uQ2Fj
aGVBZ2VudC5oCmluZGV4IDUxOTg4ZjYxN2RlMTFlZjExNzA4YTdiMzkyY2YwY2UxOTRiNDg2ZWEu
LjgwNzY3OTdjYWI2MDliOTIzNjc5M2UyMjgxYTU4OWM0Y2QxNDYyNTYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFn
ZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBcHBs
aWNhdGlvbkNhY2hlQWdlbnQuaApAQCAtMzksMjUgKzM5LDIzIEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIGNsYXNzIEZyYW1lOwogY2xhc3MgUGFnZTsKIAotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJp
bmc7Ci0KIGNsYXNzIEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudCBmaW5hbCA6IHB1Ymxp
YyBJbnNwZWN0b3JBZ2VudEJhc2UsIHB1YmxpYyBJbnNwZWN0b3I6OkFwcGxpY2F0aW9uQ2FjaGVC
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEluc3Bl
Y3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudCk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CiBwdWJsaWM6CiAgICAgSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50KFBhZ2VBZ2VudENv
bnRleHQmKTsKLSAgICB+SW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50KCkgb3ZlcnJpZGU7
CisgICAgfkluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudCgpOwogCiAgICAgLy8gSW5zcGVj
dG9yQWdlbnRCYXNlCi0gICAgdm9pZCBkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVj
dG9yOjpGcm9udGVuZFJvdXRlciosIEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXIqKSBvdmVy
cmlkZTsKLSAgICB2b2lkIHdpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6
RGlzY29ubmVjdFJlYXNvbikgb3ZlcnJpZGU7CisgICAgdm9pZCBkaWRDcmVhdGVGcm9udGVuZEFu
ZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9udGVuZFJvdXRlciosIEluc3BlY3Rvcjo6QmFja2VuZERp
c3BhdGNoZXIqKTsKKyAgICB2b2lkIHdpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3Bl
Y3Rvcjo6RGlzY29ubmVjdFJlYXNvbik7CiAKICAgICAvLyBBcHBsaWNhdGlvbkNhY2hlQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyCi0gICAgdm9pZCBlbmFibGUoRXJyb3JTdHJpbmcmKSBvdmVycmlk
ZTsKLSAgICB2b2lkIGRpc2FibGUoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2b2lkIGdl
dEZyYW1lc1dpdGhNYW5pZmVzdHMoRXJyb3JTdHJpbmcmLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpBcHBsaWNhdGlvbkNhY2hlOjpGcmFtZVdpdGhNYW5pZmVzdD4+
JiByZXN1bHQpIG92ZXJyaWRlOwotICAgIHZvaWQgZ2V0TWFuaWZlc3RGb3JGcmFtZShFcnJvclN0
cmluZyYsIGNvbnN0IFN0cmluZyYgZnJhbWVJZCwgU3RyaW5nKiBtYW5pZmVzdFVSTCkgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCBnZXRBcHBsaWNhdGlvbkNhY2hlRm9yRnJhbWUoRXJyb3JTdHJpbmcmLCBj
b25zdCBTdHJpbmcmIGZyYW1lSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcHBsaWNh
dGlvbkNhY2hlOjpBcHBsaWNhdGlvbkNhY2hlPiYpIG92ZXJyaWRlOworICAgIEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZW5hYmxlKCk7CisgICAgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBkaXNhYmxlKCk7CisgICAgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpBcHBsaWNhdGlvbkNhY2hlOjpGcmFtZVdpdGhNYW5pZmVzdD4+PiBnZXRGcmFtZXNXaXRo
TWFuaWZlc3RzKCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxTdHJp
bmc+IGdldE1hbmlmZXN0Rm9yRnJhbWUoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29y
azo6RnJhbWVJZCYpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVm
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkFwcGxpY2F0aW9uQ2FjaGU+
PiBnZXRBcHBsaWNhdGlvbkNhY2hlRm9yRnJhbWUoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6
TmV0d29yazo6RnJhbWVJZCYpOwogCiAgICAgLy8gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uCiAg
ICAgdm9pZCB1cGRhdGVBcHBsaWNhdGlvbkNhY2hlU3RhdHVzKEZyYW1lKik7CkBAIC02OCw3ICs2
Niw3IEBAIHByaXZhdGU6CiAgICAgUmVmPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6QXBwbGljYXRpb25DYWNoZTo6QXBwbGljYXRpb25DYWNoZVJlc291cmNlPj4gYnVpbGRBcnJh
eUZvckFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZXMoY29uc3QgVmVjdG9yPEFwcGxpY2F0aW9uQ2Fj
aGVIb3N0OjpSZXNvdXJjZUluZm8+Jik7CiAgICAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFw
cGxpY2F0aW9uQ2FjaGU6OkFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZT4gYnVpbGRPYmplY3RGb3JB
cHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UoY29uc3QgQXBwbGljYXRpb25DYWNoZUhvc3Q6OlJlc291
cmNlSW5mbyYpOwogCi0gICAgRG9jdW1lbnRMb2FkZXIqIGFzc2VydEZyYW1lV2l0aERvY3VtZW50
TG9hZGVyKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBmcmFtZUlkKTsKKyAgICBEb2N1bWVu
dExvYWRlciogYXNzZXJ0RnJhbWVXaXRoRG9jdW1lbnRMb2FkZXIoSW5zcGVjdG9yOjpQcm90b2Nv
bDo6RXJyb3JTdHJpbmcmLCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpGcmFt
ZUlkJik7CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW5zcGVjdG9yOjpBcHBsaWNhdGlvbkNhY2hl
RnJvbnRlbmREaXNwYXRjaGVyPiBtX2Zyb250ZW5kRGlzcGF0Y2hlcjsKICAgICBSZWZQdHI8SW5z
cGVjdG9yOjpBcHBsaWNhdGlvbkNhY2hlQmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3Bh
dGNoZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3Bl
Y3RvckNQVVByb2ZpbGVyQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50
cy9JbnNwZWN0b3JDUFVQcm9maWxlckFnZW50LmNwcAppbmRleCBhMGU2ZmM0NTMxNTE2ZDk4OTMy
MTE1YmI0YjljYTJiMmMyMzA1NjkzLi44MjgxMWJlNTFjZjQ2M2M0MTE4MGJkZTgwNDU4MjJkNDdm
ZTFlNTI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3Bl
Y3RvckNQVVByb2ZpbGVyQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9h
Z2VudHMvSW5zcGVjdG9yQ1BVUHJvZmlsZXJBZ2VudC5jcHAKQEAgLTUzLDE2ICs1MywxNSBAQCB2
b2lkIEluc3BlY3RvckNQVVByb2ZpbGVyQWdlbnQ6OmRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2Vu
ZChGcm9udGVuZFJvdXRlciosIEJhYwogCiB2b2lkIEluc3BlY3RvckNQVVByb2ZpbGVyQWdlbnQ6
OndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKERpc2Nvbm5lY3RSZWFzb24pCiB7Ci0gICAg
RXJyb3JTdHJpbmcgaWdub3JlZDsKLSAgICBzdG9wVHJhY2tpbmcoaWdub3JlZCk7CisgICAgc3Rv
cFRyYWNraW5nKCk7CiAKICAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMuc2V0UGVyc2lzdGVudENQ
VVByb2ZpbGVyQWdlbnQobnVsbHB0cik7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ1BVUHJvZmlsZXJB
Z2VudDo6c3RhcnRUcmFja2luZyhFcnJvclN0cmluZyYpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdP
cjx2b2lkPiBJbnNwZWN0b3JDUFVQcm9maWxlckFnZW50OjpzdGFydFRyYWNraW5nKCkKIHsKICAg
ICBpZiAobV90cmFja2luZykKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4geyB9Owog
CiAgICAgUmVzb3VyY2VVc2FnZVRocmVhZDo6YWRkT2JzZXJ2ZXIodGhpcywgQ1BVLCBbdGhpc10g
KGNvbnN0IFJlc291cmNlVXNhZ2VEYXRhJiBkYXRhKSB7CiAgICAgICAgIGNvbGxlY3RTYW1wbGUo
ZGF0YSk7CkBAIC03MSwxOCArNzAsMjIgQEAgdm9pZCBJbnNwZWN0b3JDUFVQcm9maWxlckFnZW50
OjpzdGFydFRyYWNraW5nKEVycm9yU3RyaW5nJikKICAgICBtX3RyYWNraW5nID0gdHJ1ZTsKIAog
ICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT50cmFja2luZ1N0YXJ0KG1fZW52aXJvbm1lbnQuZXhl
Y3V0aW9uU3RvcHdhdGNoKCkuZWxhcHNlZFRpbWUoKS5zZWNvbmRzKCkpOworCisgICAgcmV0dXJu
IHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDUFVQcm9maWxlckFnZW50OjpzdG9wVHJhY2tpbmco
RXJyb3JTdHJpbmcmKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yQ1BV
UHJvZmlsZXJBZ2VudDo6c3RvcFRyYWNraW5nKCkKIHsKICAgICBpZiAoIW1fdHJhY2tpbmcpCi0g
ICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIFJlc291cmNlVXNhZ2VU
aHJlYWQ6OnJlbW92ZU9ic2VydmVyKHRoaXMpOwogCiAgICAgbV90cmFja2luZyA9IGZhbHNlOwog
CiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPnRyYWNraW5nQ29tcGxldGUobV9lbnZpcm9ubWVu
dC5leGVjdXRpb25TdG9wd2F0Y2goKS5lbGFwc2VkVGltZSgpLnNlY29uZHMoKSk7CisKKyAgICBy
ZXR1cm4geyB9OwogfQogCiBzdGF0aWMgUmVmPFByb3RvY29sOjpDUFVQcm9maWxlcjo6VGhyZWFk
SW5mbz4gYnVpbGRUaHJlYWRJbmZvKGNvbnN0IFRocmVhZENQVUluZm8mIHRocmVhZCkKQEAgLTEx
Myw3ICsxMTYsNyBAQCB2b2lkIEluc3BlY3RvckNQVVByb2ZpbGVyQWdlbnQ6OmNvbGxlY3RTYW1w
bGUoY29uc3QgUmVzb3VyY2VVc2FnZURhdGEmIGRhdGEpCiAgICAgICAgIC5yZWxlYXNlKCk7CiAK
ICAgICBpZiAoIWRhdGEuY3B1VGhyZWFkcy5pc0VtcHR5KCkpIHsKLSAgICAgICAgUmVmUHRyPEpT
T046OkFycmF5T2Y8UHJvdG9jb2w6OkNQVVByb2ZpbGVyOjpUaHJlYWRJbmZvPj4gdGhyZWFkcyA9
IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkNQVVByb2ZpbGVyOjpUaHJlYWRJbmZvPjo6Y3JlYXRl
KCk7CisgICAgICAgIGF1dG8gdGhyZWFkcyA9IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkNQVVBy
b2ZpbGVyOjpUaHJlYWRJbmZvPjo6Y3JlYXRlKCk7CiAgICAgICAgIGZvciAoYXV0byYgdGhyZWFk
SW5mbyA6IGRhdGEuY3B1VGhyZWFkcykKICAgICAgICAgICAgIHRocmVhZHMtPmFkZEl0ZW0oYnVp
bGRUaHJlYWRJbmZvKHRocmVhZEluZm8pKTsKICAgICAgICAgZXZlbnQtPnNldFRocmVhZHMoV1RG
TW92ZSh0aHJlYWRzKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdl
bnRzL0luc3BlY3RvckNQVVByb2ZpbGVyQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9hZ2VudHMvSW5zcGVjdG9yQ1BVUHJvZmlsZXJBZ2VudC5oCmluZGV4IDRlZThlOTc4NTNkNzEy
ZDNkYTY0MzliOTg5N2U4NjVhODk2ZGJmZmYuLmZlNWUxODVhYmRiMWM0ZjJmMTNiNGQ4YTA3YTky
YmZkNzllNjlkMGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9yQ1BVUHJvZmlsZXJBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9hZ2VudHMvSW5zcGVjdG9yQ1BVUHJvZmlsZXJBZ2VudC5oCkBAIC0zNCwyMiArMzQsMjAgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQog
Y2xhc3MgSW5zcGVjdG9yQ1BVUHJvZmlsZXJBZ2VudCBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3JB
Z2VudEJhc2UsIHB1YmxpYyBJbnNwZWN0b3I6OkNQVVByb2ZpbGVyQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbnNwZWN0b3JDUFVQcm9maWxlckFn
ZW50KTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBJbnNwZWN0
b3JDUFVQcm9maWxlckFnZW50KFBhZ2VBZ2VudENvbnRleHQmKTsKLSAgICB+SW5zcGVjdG9yQ1BV
UHJvZmlsZXJBZ2VudCgpIG92ZXJyaWRlOworICAgIH5JbnNwZWN0b3JDUFVQcm9maWxlckFnZW50
KCk7CiAKICAgICAvLyBJbnNwZWN0b3JBZ2VudEJhc2UKLSAgICB2b2lkIGRpZENyZWF0ZUZyb250
ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kUm91dGVyKiwgSW5zcGVjdG9yOjpCYWNr
ZW5kRGlzcGF0Y2hlciopIG92ZXJyaWRlOwotICAgIHZvaWQgd2lsbERlc3Ryb3lGcm9udGVuZEFu
ZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKSBvdmVycmlkZTsKKyAgICB2b2lk
IGRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kUm91dGVyKiwg
SW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlciopOworICAgIHZvaWQgd2lsbERlc3Ryb3lGcm9u
dGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKTsKIAogICAgIC8vIENQ
VVByb2ZpbGVyQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyCi0gICAgdm9pZCBzdGFydFRyYWNraW5n
KEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzdG9wVHJhY2tpbmcoRXJyb3JTdHJp
bmcmKSBvdmVycmlkZTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZv
aWQ+IHN0YXJ0VHJhY2tpbmcoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmlu
Z09yPHZvaWQ+IHN0b3BUcmFja2luZygpOwogCiBwcml2YXRlOgogICAgIHZvaWQgY29sbGVjdFNh
bXBsZShjb25zdCBSZXNvdXJjZVVzYWdlRGF0YSYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDU1NBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNTU0FnZW50LmNwcAppbmRleCA1NjVlYmUwODJj
MDc4YmI2Njg3NzQwMzg5ZWIzNzJlZTExOWI3NDFiLi41OTRjODQ1YzE4YTMyNWQ1MGQ5ZTVlMDM4
MjEwOWY5MjJiM2JjZDIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdl
bnRzL0luc3BlY3RvckNTU0FnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
YWdlbnRzL0luc3BlY3RvckNTU0FnZW50LmNwcApAQCAtOTIsMTAgKzkyLDcgQEAgc3RhdGljIHVu
c2lnbmVkIGNvbXB1dGVQc2V1ZG9DbGFzc01hc2soY29uc3QgSlNPTjo6QXJyYXkmIHBzZXVkb0Ns
YXNzQXJyYXkpCiAKICAgICB1bnNpZ25lZCByZXN1bHQgPSBQc2V1ZG9DbGFzc05vbmU7CiAgICAg
Zm9yIChhdXRvJiBwc2V1ZG9DbGFzc1ZhbHVlIDogcHNldWRvQ2xhc3NBcnJheSkgewotICAgICAg
ICBTdHJpbmcgcHNldWRvQ2xhc3M7Ci0gICAgICAgIGJvb2wgc3VjY2VzcyA9IHBzZXVkb0NsYXNz
VmFsdWUtPmFzU3RyaW5nKHBzZXVkb0NsYXNzKTsKLSAgICAgICAgaWYgKCFzdWNjZXNzKQotICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgIGF1dG8gcHNldWRvQ2xhc3MgPSBwc2V1ZG9DbGFz
c1ZhbHVlLT5hc1N0cmluZygpOwogICAgICAgICBpZiAocHNldWRvQ2xhc3MgPT0gYWN0aXZlKQog
ICAgICAgICAgICAgcmVzdWx0IHw9IFBzZXVkb0NsYXNzQWN0aXZlOwogICAgICAgICBlbHNlIGlm
IChwc2V1ZG9DbGFzcyA9PSBob3ZlcikKQEAgLTMxMiw4ICszMDksNyBAQCB2b2lkIEluc3BlY3Rv
ckNTU0FnZW50OjpkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9udGVu
ZFJvdXRlciosCiAKIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OndpbGxEZXN0cm95RnJvbnRlbmRB
bmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlzY29ubmVjdFJlYXNvbikKIHsKLSAgICBTdHJpbmcgdW51
c2VkOwotICAgIGRpc2FibGUodW51c2VkKTsKKyAgICBkaXNhYmxlKCk7CiB9CiAKIHZvaWQgSW5z
cGVjdG9yQ1NTQWdlbnQ6OnJlc2V0KCkKQEAgLTMyNywxMCArMzIzLDEwIEBAIHZvaWQgSW5zcGVj
dG9yQ1NTQWdlbnQ6OnJlc2V0KCkKICAgICByZXNldFBzZXVkb1N0YXRlcygpOwogfQogCi12b2lk
IEluc3BlY3RvckNTU0FnZW50OjplbmFibGUoRXJyb3JTdHJpbmcmKQorUHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmVuYWJsZSgpCiB7CiAgICAgaWYgKG1f
aW5zdHJ1bWVudGluZ0FnZW50cy5lbmFibGVkQ1NTQWdlbnQoKSA9PSB0aGlzKQotICAgICAgICBy
ZXR1cm47CisgICAgICAgIHJldHVybiB7IH07CiAKICAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMu
c2V0RW5hYmxlZENTU0FnZW50KHRoaXMpOwogCkBAIC0zMzgsMTMgKzMzNCwxNyBAQCB2b2lkIElu
c3BlY3RvckNTU0FnZW50OjplbmFibGUoRXJyb3JTdHJpbmcmKQogICAgICAgICBmb3IgKGF1dG8q
IGRvY3VtZW50IDogZG9tQWdlbnQtPmRvY3VtZW50cygpKQogICAgICAgICAgICAgYWN0aXZlU3R5
bGVTaGVldHNVcGRhdGVkKCpkb2N1bWVudCk7CiAgICAgfQorCisgICAgcmV0dXJuIHsgfTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6ZGlzYWJsZShFcnJvclN0cmluZyYpCitQcm90b2Nv
bDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JDU1NBZ2VudDo6ZGlzYWJsZSgpCiB7CiAg
ICAgbV9pbnN0cnVtZW50aW5nQWdlbnRzLnNldEVuYWJsZWRDU1NBZ2VudChudWxscHRyKTsKIAog
ICAgIHJlc2V0KCk7CisKKyAgICByZXR1cm4geyB9OwogfQogCiB2b2lkIEluc3BlY3RvckNTU0Fn
ZW50Ojpkb2N1bWVudERldGFjaGVkKERvY3VtZW50JiBkb2N1bWVudCkKQEAgLTM4Nyw3ICszODcs
NyBAQCB2b2lkIEluc3BlY3RvckNTU0FnZW50OjpzZXRBY3RpdmVTdHlsZVNoZWV0c0ZvckRvY3Vt
ZW50KERvY3VtZW50JiBkb2N1bWVudCwgVmVjdAogICAgICAgICBwcmV2aW91c2x5S25vd25BY3Rp
dmVTdHlsZVNoZWV0cy5yZW1vdmUoY3NzU3R5bGVTaGVldCk7CiAgICAgICAgIFJlZlB0cjxJbnNw
ZWN0b3JTdHlsZVNoZWV0PiBpbnNwZWN0b3JTdHlsZVNoZWV0ID0gbV9jc3NTdHlsZVNoZWV0VG9J
bnNwZWN0b3JTdHlsZVNoZWV0LmdldChjc3NTdHlsZVNoZWV0KTsKICAgICAgICAgaWYgKG1faWRU
b0luc3BlY3RvclN0eWxlU2hlZXQuY29udGFpbnMoaW5zcGVjdG9yU3R5bGVTaGVldC0+aWQoKSkp
IHsKLSAgICAgICAgICAgIFN0cmluZyBpZCA9IHVuYmluZFN0eWxlU2hlZXQoaW5zcGVjdG9yU3R5
bGVTaGVldC5nZXQoKSk7CisgICAgICAgICAgICBhdXRvIGlkID0gdW5iaW5kU3R5bGVTaGVldChp
bnNwZWN0b3JTdHlsZVNoZWV0LmdldCgpKTsKICAgICAgICAgICAgIG1fZnJvbnRlbmREaXNwYXRj
aGVyLT5zdHlsZVNoZWV0UmVtb3ZlZChpZCk7CiAgICAgICAgIH0KICAgICB9CkBAIC0zOTYsNyAr
Mzk2LDggQEAgdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6c2V0QWN0aXZlU3R5bGVTaGVldHNGb3JE
b2N1bWVudChEb2N1bWVudCYgZG9jdW1lbnQsIFZlY3QKICAgICAgICAgcHJldmlvdXNseUtub3du
QWN0aXZlU3R5bGVTaGVldHMuYWRkKGNzc1N0eWxlU2hlZXQpOwogICAgICAgICBpZiAoIW1fY3Nz
U3R5bGVTaGVldFRvSW5zcGVjdG9yU3R5bGVTaGVldC5jb250YWlucyhjc3NTdHlsZVNoZWV0KSkg
ewogICAgICAgICAgICAgSW5zcGVjdG9yU3R5bGVTaGVldCogaW5zcGVjdG9yU3R5bGVTaGVldCA9
IGJpbmRTdHlsZVNoZWV0KGNzc1N0eWxlU2hlZXQpOwotICAgICAgICAgICAgbV9mcm9udGVuZERp
c3BhdGNoZXItPnN0eWxlU2hlZXRBZGRlZChpbnNwZWN0b3JTdHlsZVNoZWV0LT5idWlsZE9iamVj
dEZvclN0eWxlU2hlZXRJbmZvKCkpOworICAgICAgICAgICAgaWYgKGF1dG8gaGVhZGVyID0gaW5z
cGVjdG9yU3R5bGVTaGVldC0+YnVpbGRPYmplY3RGb3JTdHlsZVNoZWV0SW5mbygpKQorICAgICAg
ICAgICAgICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5zdHlsZVNoZWV0QWRkZWQoaGVhZGVyLnJl
bGVhc2VOb25OdWxsKCkpOwogICAgICAgICB9CiAgICAgfQogfQpAQCAtNDEwLDcgKzQxMSw3IEBA
IGJvb2wgSW5zcGVjdG9yQ1NTQWdlbnQ6OmZvcmNlUHNldWRvU3RhdGUoY29uc3QgRWxlbWVudCYg
ZWxlbWVudCwgQ1NTU2VsZWN0b3I6OlBzCiAgICAgaWYgKCFkb21BZ2VudCkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgaW50IG5vZGVJZCA9IGRvbUFnZW50LT5ib3VuZE5vZGVJZCgmZWxl
bWVudCk7CisgICAgYXV0byBub2RlSWQgPSBkb21BZ2VudC0+Ym91bmROb2RlSWQoJmVsZW1lbnQp
OwogICAgIGlmICghbm9kZUlkKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTQyOSwzNyAr
NDMwLDM3IEBAIGJvb2wgSW5zcGVjdG9yQ1NTQWdlbnQ6OmZvcmNlUHNldWRvU3RhdGUoY29uc3Qg
RWxlbWVudCYgZWxlbWVudCwgQ1NTU2VsZWN0b3I6OlBzCiAgICAgfQogfQogCi1zdGF0aWMgT3B0
aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpQc2V1ZG9JZD4gcHJvdG9jb2xWYWx1ZUZv
clBzZXVkb0lkKFBzZXVkb0lkIHBzZXVkb0lkKQorc3RhdGljIE9wdGlvbmFsPFByb3RvY29sOjpD
U1M6OlBzZXVkb0lkPiBwcm90b2NvbFZhbHVlRm9yUHNldWRvSWQoUHNldWRvSWQgcHNldWRvSWQp
CiB7CiAgICAgc3dpdGNoIChwc2V1ZG9JZCkgewogICAgIGNhc2UgUHNldWRvSWQ6OkZpcnN0TGlu
ZToKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6UHNldWRvSWQ6OkZp
cnN0TGluZTsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpDU1M6OlBzZXVkb0lkOjpGaXJzdExp
bmU7CiAgICAgY2FzZSBQc2V1ZG9JZDo6Rmlyc3RMZXR0ZXI6Ci0gICAgICAgIHJldHVybiBJbnNw
ZWN0b3I6OlByb3RvY29sOjpDU1M6OlBzZXVkb0lkOjpGaXJzdExldHRlcjsKKyAgICAgICAgcmV0
dXJuIFByb3RvY29sOjpDU1M6OlBzZXVkb0lkOjpGaXJzdExldHRlcjsKICAgICBjYXNlIFBzZXVk
b0lkOjpNYXJrZXI6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlBz
ZXVkb0lkOjpNYXJrZXI7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6Q1NTOjpQc2V1ZG9JZDo6
TWFya2VyOwogICAgIGNhc2UgUHNldWRvSWQ6OkJlZm9yZToKLSAgICAgICAgcmV0dXJuIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkNTUzo6UHNldWRvSWQ6OkJlZm9yZTsKKyAgICAgICAgcmV0dXJuIFBy
b3RvY29sOjpDU1M6OlBzZXVkb0lkOjpCZWZvcmU7CiAgICAgY2FzZSBQc2V1ZG9JZDo6QWZ0ZXI6
Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlBzZXVkb0lkOjpBZnRl
cjsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpDU1M6OlBzZXVkb0lkOjpBZnRlcjsKICAgICBj
YXNlIFBzZXVkb0lkOjpTZWxlY3Rpb246Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpDU1M6OlBzZXVkb0lkOjpTZWxlY3Rpb247CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6
Q1NTOjpQc2V1ZG9JZDo6U2VsZWN0aW9uOwogICAgIGNhc2UgUHNldWRvSWQ6OkhpZ2hsaWdodDoK
LSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6UHNldWRvSWQ6OkhpZ2hs
aWdodDsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpDU1M6OlBzZXVkb0lkOjpIaWdobGlnaHQ7
CiAgICAgY2FzZSBQc2V1ZG9JZDo6U2Nyb2xsYmFyOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9y
OjpQcm90b2NvbDo6Q1NTOjpQc2V1ZG9JZDo6U2Nyb2xsYmFyOworICAgICAgICByZXR1cm4gUHJv
dG9jb2w6OkNTUzo6UHNldWRvSWQ6OlNjcm9sbGJhcjsKICAgICBjYXNlIFBzZXVkb0lkOjpTY3Jv
bGxiYXJUaHVtYjoKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6UHNl
dWRvSWQ6OlNjcm9sbGJhclRodW1iOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OkNTUzo6UHNl
dWRvSWQ6OlNjcm9sbGJhclRodW1iOwogICAgIGNhc2UgUHNldWRvSWQ6OlNjcm9sbGJhckJ1dHRv
bjoKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6UHNldWRvSWQ6OlNj
cm9sbGJhckJ1dHRvbjsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpDU1M6OlBzZXVkb0lkOjpT
Y3JvbGxiYXJCdXR0b247CiAgICAgY2FzZSBQc2V1ZG9JZDo6U2Nyb2xsYmFyVHJhY2s6Ci0gICAg
ICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlBzZXVkb0lkOjpTY3JvbGxiYXJU
cmFjazsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpDU1M6OlBzZXVkb0lkOjpTY3JvbGxiYXJU
cmFjazsKICAgICBjYXNlIFBzZXVkb0lkOjpTY3JvbGxiYXJUcmFja1BpZWNlOgotICAgICAgICBy
ZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpQc2V1ZG9JZDo6U2Nyb2xsYmFyVHJhY2tQ
aWVjZTsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpDU1M6OlBzZXVkb0lkOjpTY3JvbGxiYXJU
cmFja1BpZWNlOwogICAgIGNhc2UgUHNldWRvSWQ6OlNjcm9sbGJhckNvcm5lcjoKLSAgICAgICAg
cmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6UHNldWRvSWQ6OlNjcm9sbGJhckNvcm5l
cjsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpDU1M6OlBzZXVkb0lkOjpTY3JvbGxiYXJDb3Ju
ZXI7CiAgICAgY2FzZSBQc2V1ZG9JZDo6UmVzaXplcjoKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkNTUzo6UHNldWRvSWQ6OlJlc2l6ZXI7CisgICAgICAgIHJldHVybiBQcm90
b2NvbDo6Q1NTOjpQc2V1ZG9JZDo6UmVzaXplcjsKIAogICAgIGRlZmF1bHQ6CiAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtNDY3LDM2ICs0NjgsMzcgQEAgc3RhdGljIE9wdGlvbmFs
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6UHNldWRvSWQ+IHByb3RvY29sVmFsdWVGb3JQc2V1
ZG9JZChQc2UKICAgICB9CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldE1hdGNoZWRT
dHlsZXNGb3JOb2RlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJZCwgY29uc3Qg
Ym9vbCogaW5jbHVkZVBzZXVkbywgY29uc3QgYm9vbCogaW5jbHVkZUluaGVyaXRlZCwgUmVmUHRy
PEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpSdWxlTWF0Y2g+PiYgbWF0
Y2hlZENTU1J1bGVzLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpD
U1M6OlBzZXVkb0lkTWF0Y2hlcz4+JiBwc2V1ZG9JZE1hdGNoZXMsIFJlZlB0cjxKU09OOjpBcnJh
eU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6SW5oZXJpdGVkU3R5bGVFbnRyeT4+JiBpbmhl
cml0ZWRFbnRyaWVzKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8c3RkOjp0dXBsZTxSZWZQdHI8
SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6Q1NTOjpSdWxlTWF0Y2g+PiwgUmVmUHRyPEpTT046OkFy
cmF5T2Y8UHJvdG9jb2w6OkNTUzo6UHNldWRvSWRNYXRjaGVzPj4sIFJlZlB0cjxKU09OOjpBcnJh
eU9mPFByb3RvY29sOjpDU1M6OkluaGVyaXRlZFN0eWxlRW50cnk+Pj4+IEluc3BlY3RvckNTU0Fn
ZW50OjpnZXRNYXRjaGVkU3R5bGVzRm9yTm9kZShQcm90b2NvbDo6RE9NOjpOb2RlSWQgbm9kZUlk
LCBPcHRpb25hbDxib29sPiYmIGluY2x1ZGVQc2V1ZG8sIE9wdGlvbmFsPGJvb2w+JiYgaW5jbHVk
ZUluaGVyaXRlZCkKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisK
ICAgICBFbGVtZW50KiBlbGVtZW50ID0gZWxlbWVudEZvcklkKGVycm9yU3RyaW5nLCBub2RlSWQp
OwogICAgIGlmICghZWxlbWVudCkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFr
ZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCiAgICAgRWxlbWVudCogb3JpZ2luYWxFbGVtZW50
ID0gZWxlbWVudDsKICAgICBQc2V1ZG9JZCBlbGVtZW50UHNldWRvSWQgPSBlbGVtZW50LT5wc2V1
ZG9JZCgpOwogICAgIGlmIChlbGVtZW50UHNldWRvSWQgIT0gUHNldWRvSWQ6Ok5vbmUpIHsKICAg
ICAgICAgZWxlbWVudCA9IGRvd25jYXN0PFBzZXVkb0VsZW1lbnQ+KCplbGVtZW50KS5ob3N0RWxl
bWVudCgpOwotICAgICAgICBpZiAoIWVsZW1lbnQpIHsKLSAgICAgICAgICAgIGVycm9yU3RyaW5n
ID0gIk1pc3NpbmcgcGFyZW50IG9mIHBzZXVkby1lbGVtZW50IG5vZGUgZm9yIGdpdmVuIG5vZGVJ
ZCJfczsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQorICAgICAgICBpZiAoIWVsZW1l
bnQpCisgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk1pc3NpbmcgcGFyZW50IG9m
IHBzZXVkby1lbGVtZW50IG5vZGUgZm9yIGdpdmVuIG5vZGVJZCJfcyk7CiAgICAgfQogCiAgICAg
Ly8gTWF0Y2hlZCBydWxlcy4KICAgICBhdXRvJiBzdHlsZVJlc29sdmVyID0gZWxlbWVudC0+c3R5
bGVSZXNvbHZlcigpOwogICAgIGF1dG8gbWF0Y2hlZFJ1bGVzID0gc3R5bGVSZXNvbHZlci5wc2V1
ZG9TdHlsZVJ1bGVzRm9yRWxlbWVudChlbGVtZW50LCBlbGVtZW50UHNldWRvSWQsIFN0eWxlOjpS
ZXNvbHZlcjo6QWxsQ1NTUnVsZXMpOwotICAgIG1hdGNoZWRDU1NSdWxlcyA9IGJ1aWxkQXJyYXlG
b3JNYXRjaGVkUnVsZUxpc3QobWF0Y2hlZFJ1bGVzLCBzdHlsZVJlc29sdmVyLCAqZWxlbWVudCwg
ZWxlbWVudFBzZXVkb0lkKTsKKyAgICBhdXRvIG1hdGNoZWRDU1NSdWxlcyA9IGJ1aWxkQXJyYXlG
b3JNYXRjaGVkUnVsZUxpc3QobWF0Y2hlZFJ1bGVzLCBzdHlsZVJlc29sdmVyLCAqZWxlbWVudCwg
ZWxlbWVudFBzZXVkb0lkKTsKKyAgICBSZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6Q1NT
OjpQc2V1ZG9JZE1hdGNoZXM+PiBwc2V1ZG9FbGVtZW50czsKKyAgICBSZWZQdHI8SlNPTjo6QXJy
YXlPZjxQcm90b2NvbDo6Q1NTOjpJbmhlcml0ZWRTdHlsZUVudHJ5Pj4gaW5oZXJpdGVkOwogCiAg
ICAgaWYgKCFvcmlnaW5hbEVsZW1lbnQtPmlzUHNldWRvRWxlbWVudCgpKSB7Ci0gICAgICAgIC8v
IFBzZXVkbyBlbGVtZW50cy4KICAgICAgICAgaWYgKCFpbmNsdWRlUHNldWRvIHx8ICppbmNsdWRl
UHNldWRvKSB7Ci0gICAgICAgICAgICBhdXRvIHBzZXVkb0VsZW1lbnRzID0gSlNPTjo6QXJyYXlP
ZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlBzZXVkb0lkTWF0Y2hlcz46OmNyZWF0ZSgpOwor
ICAgICAgICAgICAgcHNldWRvRWxlbWVudHMgPSBKU09OOjpBcnJheU9mPFByb3RvY29sOjpDU1M6
OlBzZXVkb0lkTWF0Y2hlcz46OmNyZWF0ZSgpOwogICAgICAgICAgICAgZm9yIChQc2V1ZG9JZCBw
c2V1ZG9JZCA9IFBzZXVkb0lkOjpGaXJzdFB1YmxpY1BzZXVkb0lkOyBwc2V1ZG9JZCA8IFBzZXVk
b0lkOjpBZnRlckxhc3RJbnRlcm5hbFBzZXVkb0lkOyBwc2V1ZG9JZCA9IHN0YXRpY19jYXN0PFBz
ZXVkb0lkPihzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocHNldWRvSWQpICsgMSkpIHsKICAgICAgICAg
ICAgICAgICBpZiAoYXV0byBwcm90b2NvbFBzZXVkb0lkID0gcHJvdG9jb2xWYWx1ZUZvclBzZXVk
b0lkKHBzZXVkb0lkKSkgewogICAgICAgICAgICAgICAgICAgICBhdXRvIG1hdGNoZWRSdWxlcyA9
IHN0eWxlUmVzb2x2ZXIucHNldWRvU3R5bGVSdWxlc0ZvckVsZW1lbnQoZWxlbWVudCwgcHNldWRv
SWQsIFN0eWxlOjpSZXNvbHZlcjo6QWxsQ1NTUnVsZXMpOwogICAgICAgICAgICAgICAgICAgICBp
ZiAoIW1hdGNoZWRSdWxlcy5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGF1
dG8gbWF0Y2hlcyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6UHNldWRvSWRNYXRjaGVzOjpj
cmVhdGUoKQorICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBtYXRjaGVzID0gUHJvdG9jb2w6
OkNTUzo6UHNldWRvSWRNYXRjaGVzOjpjcmVhdGUoKQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC5zZXRQc2V1ZG9JZChwcm90b2NvbFBzZXVkb0lkLnZhbHVlKCkpCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLnNldE1hdGNoZXMoYnVpbGRBcnJheUZvck1hdGNoZWRSdWxlTGlzdCht
YXRjaGVkUnVsZXMsIHN0eWxlUmVzb2x2ZXIsICplbGVtZW50LCBwc2V1ZG9JZCkpCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLnJlbGVhc2UoKTsKQEAgLTUwNCw2NiArNTA2LDY2IEBAIHZv
aWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldE1hdGNoZWRTdHlsZXNGb3JOb2RlKEVycm9yU3RyaW5n
JiBlcnJvclN0cmluZywgaW50IG5vCiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHBzZXVkb0lkTWF0Y2hlcyA9IFdU
Rk1vdmUocHNldWRvRWxlbWVudHMpOwogICAgICAgICB9CiAKLSAgICAgICAgLy8gSW5oZXJpdGVk
IHN0eWxlcy4KICAgICAgICAgaWYgKCFpbmNsdWRlSW5oZXJpdGVkIHx8ICppbmNsdWRlSW5oZXJp
dGVkKSB7Ci0gICAgICAgICAgICBhdXRvIGVudHJpZXMgPSBKU09OOjpBcnJheU9mPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkNTUzo6SW5oZXJpdGVkU3R5bGVFbnRyeT46OmNyZWF0ZSgpOworICAgICAg
ICAgICAgaW5oZXJpdGVkID0gSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6Q1NTOjpJbmhlcml0ZWRT
dHlsZUVudHJ5Pjo6Y3JlYXRlKCk7CiAgICAgICAgICAgICBmb3IgKGF1dG8mIGFuY2VzdG9yIDog
YW5jZXN0b3JzT2ZUeXBlPEVsZW1lbnQ+KCplbGVtZW50KSkgewogICAgICAgICAgICAgICAgIGF1
dG8mIHBhcmVudFN0eWxlUmVzb2x2ZXIgPSBhbmNlc3Rvci5zdHlsZVJlc29sdmVyKCk7CiAgICAg
ICAgICAgICAgICAgYXV0byBwYXJlbnRNYXRjaGVkUnVsZXMgPSBwYXJlbnRTdHlsZVJlc29sdmVy
LnN0eWxlUnVsZXNGb3JFbGVtZW50KCZhbmNlc3RvciwgU3R5bGU6OlJlc29sdmVyOjpBbGxDU1NS
dWxlcyk7Ci0gICAgICAgICAgICAgICAgYXV0byBlbnRyeSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkNTUzo6SW5oZXJpdGVkU3R5bGVFbnRyeTo6Y3JlYXRlKCkKKyAgICAgICAgICAgICAgICBhdXRv
IGVudHJ5ID0gUHJvdG9jb2w6OkNTUzo6SW5oZXJpdGVkU3R5bGVFbnRyeTo6Y3JlYXRlKCkKICAg
ICAgICAgICAgICAgICAgICAgLnNldE1hdGNoZWRDU1NSdWxlcyhidWlsZEFycmF5Rm9yTWF0Y2hl
ZFJ1bGVMaXN0KHBhcmVudE1hdGNoZWRSdWxlcywgc3R5bGVSZXNvbHZlciwgYW5jZXN0b3IsIFBz
ZXVkb0lkOjpOb25lKSkKICAgICAgICAgICAgICAgICAgICAgLnJlbGVhc2UoKTsKICAgICAgICAg
ICAgICAgICBpZiAoaXM8U3R5bGVkRWxlbWVudD4oYW5jZXN0b3IpICYmIGRvd25jYXN0PFN0eWxl
ZEVsZW1lbnQ+KGFuY2VzdG9yKS5jc3NvbVN0eWxlKCkubGVuZ3RoKCkpIHsKICAgICAgICAgICAg
ICAgICAgICAgYXV0byYgc3R5bGVTaGVldCA9IGFzSW5zcGVjdG9yU3R5bGVTaGVldChkb3duY2Fz
dDxTdHlsZWRFbGVtZW50PihhbmNlc3RvcikpOwogICAgICAgICAgICAgICAgICAgICBlbnRyeS0+
c2V0SW5saW5lU3R5bGUoc3R5bGVTaGVldC5idWlsZE9iamVjdEZvclN0eWxlKHN0eWxlU2hlZXQu
c3R5bGVGb3JJZChJbnNwZWN0b3JDU1NJZChzdHlsZVNoZWV0LmlkKCksIDApKSkpOwogICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGVudHJpZXMtPmFkZEl0ZW0oV1RGTW92ZShl
bnRyeSkpOworICAgICAgICAgICAgICAgIGluaGVyaXRlZC0+YWRkSXRlbShXVEZNb3ZlKGVudHJ5
KSk7CiAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGluaGVyaXRlZEVudHJpZXMgPSBXVEZN
b3ZlKGVudHJpZXMpOwogICAgICAgICB9CiAgICAgfQorCisgICAgcmV0dXJuIHsgeyBXVEZNb3Zl
KG1hdGNoZWRDU1NSdWxlcyksIFdURk1vdmUocHNldWRvRWxlbWVudHMpLCBXVEZNb3ZlKGluaGVy
aXRlZCkgfSB9OwogfQogCi12b2lkIEluc3BlY3RvckNTU0FnZW50OjpnZXRJbmxpbmVTdHlsZXNG
b3JOb2RlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJZCwgUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+JiBpbmxpbmVTdHlsZSwgUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+JiBhdHRyaWJ1dGVzU3R5bGUpCitQcm90b2Nv
bDo6RXJyb3JTdHJpbmdPcjxzdGQ6OnR1cGxlPFJlZlB0cjxQcm90b2NvbDo6Q1NTOjpDU1NTdHls
ZT4gLyogaW5saW5lU3R5bGUgKi8sIFJlZlB0cjxQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4gLyog
YXR0cmlidXRlc1N0eWxlICovPj4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldElubGluZVN0eWxlc0Zv
ck5vZGUoUHJvdG9jb2w6OkRPTTo6Tm9kZUlkIG5vZGVJZCkKIHsKKyAgICBQcm90b2NvbDo6RXJy
b3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBhdXRvKiBlbGVtZW50ID0gZWxlbWVudEZvcklk
KGVycm9yU3RyaW5nLCBub2RlSWQpOwogICAgIGlmICghaXM8U3R5bGVkRWxlbWVudD4oZWxlbWVu
dCkpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9y
U3RyaW5nKTsKIAogICAgIGF1dG8mIHN0eWxlZEVsZW1lbnQgPSBkb3duY2FzdDxTdHlsZWRFbGVt
ZW50PigqZWxlbWVudCk7CiAgICAgYXV0byYgc3R5bGVTaGVldCA9IGFzSW5zcGVjdG9yU3R5bGVT
aGVldChzdHlsZWRFbGVtZW50KTsKLSAgICBpbmxpbmVTdHlsZSA9IHN0eWxlU2hlZXQuYnVpbGRP
YmplY3RGb3JTdHlsZSgmc3R5bGVkRWxlbWVudC5jc3NvbVN0eWxlKCkpOwotICAgIGlmIChhdXRv
IGF0dHJpYnV0ZXMgPSBidWlsZE9iamVjdEZvckF0dHJpYnV0ZXNTdHlsZShzdHlsZWRFbGVtZW50
KSkKLSAgICAgICAgYXR0cmlidXRlc1N0eWxlID0gV1RGTW92ZShhdHRyaWJ1dGVzKTsKLSAgICBl
bHNlCi0gICAgICAgIGF0dHJpYnV0ZXNTdHlsZSA9IG51bGxwdHI7CisgICAgcmV0dXJuIHsgeyBz
dHlsZVNoZWV0LmJ1aWxkT2JqZWN0Rm9yU3R5bGUoJnN0eWxlZEVsZW1lbnQuY3Nzb21TdHlsZSgp
KSwgYnVpbGRPYmplY3RGb3JBdHRyaWJ1dGVzU3R5bGUoc3R5bGVkRWxlbWVudCkgfSB9OwogfQog
Ci12b2lkIEluc3BlY3RvckNTU0FnZW50OjpnZXRDb21wdXRlZFN0eWxlRm9yTm9kZShFcnJvclN0
cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQsIFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTQ29tcHV0ZWRTdHlsZVByb3BlcnR5Pj4mIHN0eWxlKQor
UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkNTUzo6
Q1NTQ29tcHV0ZWRTdHlsZVByb3BlcnR5Pj4+IEluc3BlY3RvckNTU0FnZW50OjpnZXRDb21wdXRl
ZFN0eWxlRm9yTm9kZShQcm90b2NvbDo6RE9NOjpOb2RlSWQgbm9kZUlkKQogeworICAgIFByb3Rv
Y29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIGF1dG8qIGVsZW1lbnQgPSBlbGVt
ZW50Rm9ySWQoZXJyb3JTdHJpbmcsIG5vZGVJZCk7CiAgICAgaWYgKCFlbGVtZW50KQotICAgICAg
ICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAK
ICAgICBhdXRvIGNvbXB1dGVkU3R5bGVJbmZvID0gQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9u
OjpjcmVhdGUoKmVsZW1lbnQsIHRydWUpOwogICAgIGF1dG8gaW5zcGVjdG9yU3R5bGUgPSBJbnNw
ZWN0b3JTdHlsZTo6Y3JlYXRlKEluc3BlY3RvckNTU0lkKCksIFdURk1vdmUoY29tcHV0ZWRTdHls
ZUluZm8pLCBudWxscHRyKTsKLSAgICBzdHlsZSA9IGluc3BlY3RvclN0eWxlLT5idWlsZEFycmF5
Rm9yQ29tcHV0ZWRTdHlsZSgpOworICAgIHJldHVybiBpbnNwZWN0b3JTdHlsZS0+YnVpbGRBcnJh
eUZvckNvbXB1dGVkU3R5bGUoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0QWxs
U3R5bGVTaGVldHMoRXJyb3JTdHJpbmcmLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6
OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlU2hlZXRIZWFkZXI+PiYgc3R5bGVJbmZvcykKK1Byb3Rv
Y29sOjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpDU1M6OkNTU1N0
eWxlU2hlZXRIZWFkZXI+Pj4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldEFsbFN0eWxlU2hlZXRzKCkK
IHsKLSAgICBzdHlsZUluZm9zID0gSlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpD
U1M6OkNTU1N0eWxlU2hlZXRIZWFkZXI+OjpjcmVhdGUoKTsKKyAgICBhdXRvIGhlYWRlcnMgPSBK
U09OOjpBcnJheU9mPFByb3RvY29sOjpDU1M6OkNTU1N0eWxlU2hlZXRIZWFkZXI+OjpjcmVhdGUo
KTsKIAogICAgIFZlY3RvcjxJbnNwZWN0b3JTdHlsZVNoZWV0Kj4gaW5zcGVjdG9yU3R5bGVTaGVl
dHM7CiAgICAgY29sbGVjdEFsbFN0eWxlU2hlZXRzKGluc3BlY3RvclN0eWxlU2hlZXRzKTsKLSAg
ICBmb3IgKGF1dG8qIGluc3BlY3RvclN0eWxlU2hlZXQgOiBpbnNwZWN0b3JTdHlsZVNoZWV0cykK
LSAgICAgICAgc3R5bGVJbmZvcy0+YWRkSXRlbShpbnNwZWN0b3JTdHlsZVNoZWV0LT5idWlsZE9i
amVjdEZvclN0eWxlU2hlZXRJbmZvKCkpOworICAgIGZvciAoYXV0byogaW5zcGVjdG9yU3R5bGVT
aGVldCA6IGluc3BlY3RvclN0eWxlU2hlZXRzKSB7CisgICAgICAgIGlmIChhdXRvIGhlYWRlciA9
IGluc3BlY3RvclN0eWxlU2hlZXQtPmJ1aWxkT2JqZWN0Rm9yU3R5bGVTaGVldEluZm8oKSkKKyAg
ICAgICAgICAgIGhlYWRlcnMtPmFkZEl0ZW0oaGVhZGVyLnJlbGVhc2VOb25OdWxsKCkpOworICAg
IH0KKworICAgIHJldHVybiBXVEZNb3ZlKGhlYWRlcnMpOwogfQogCiB2b2lkIEluc3BlY3RvckNT
U0FnZW50Ojpjb2xsZWN0QWxsU3R5bGVTaGVldHMoVmVjdG9yPEluc3BlY3RvclN0eWxlU2hlZXQq
PiYgcmVzdWx0KQpAQCAtNTk4LDExNiArNjAwLDEyNCBAQCB2b2lkIEluc3BlY3RvckNTU0FnZW50
Ojpjb2xsZWN0U3R5bGVTaGVldHMoQ1NTU3R5bGVTaGVldCogc3R5bGVTaGVldCwgVmVjdG9yPENT
UwogICAgIH0KIH0KIAotdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0U3R5bGVTaGVldChFcnJv
clN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgc3R5bGVTaGVldElkLCBSZWZQdHI8
SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZVNoZWV0Qm9keT4mIHN0eWxlU2hlZXRP
YmplY3QpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8UHJvdG9jb2w6OkNTUzo6Q1NTU3R5
bGVTaGVldEJvZHk+PiBJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0U3R5bGVTaGVldChjb25zdCBQcm90
b2NvbDo6Q1NTOjpTdHlsZVNoZWV0SWQmIHN0eWxlU2hlZXRJZCkKIHsKKyAgICBQcm90b2NvbDo6
RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBJbnNwZWN0b3JTdHlsZVNoZWV0KiBpbnNw
ZWN0b3JTdHlsZVNoZWV0ID0gYXNzZXJ0U3R5bGVTaGVldEZvcklkKGVycm9yU3RyaW5nLCBzdHls
ZVNoZWV0SWQpOwogICAgIGlmICghaW5zcGVjdG9yU3R5bGVTaGVldCkKLSAgICAgICAgcmV0dXJu
OworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCi0gICAgc3R5
bGVTaGVldE9iamVjdCA9IGluc3BlY3RvclN0eWxlU2hlZXQtPmJ1aWxkT2JqZWN0Rm9yU3R5bGVT
aGVldCgpOworICAgIGF1dG8gc3R5bGVTaGVldCA9IGluc3BlY3RvclN0eWxlU2hlZXQtPmJ1aWxk
T2JqZWN0Rm9yU3R5bGVTaGVldCgpOworICAgIGlmICghc3R5bGVTaGVldCkKKyAgICAgICAgcmV0
dXJuIG1ha2VVbmV4cGVjdGVkKCJJbnRlcm5hbCBlcnJvcjogbWlzc2luZyBzdHlsZSBzaGVldCIp
OworCisgICAgcmV0dXJuIHN0eWxlU2hlZXQucmVsZWFzZU5vbk51bGwoKTsKIH0KIAotdm9pZCBJ
bnNwZWN0b3JDU1NBZ2VudDo6Z2V0U3R5bGVTaGVldFRleHQoRXJyb3JTdHJpbmcmIGVycm9yU3Ry
aW5nLCBjb25zdCBTdHJpbmcmIHN0eWxlU2hlZXRJZCwgU3RyaW5nKiByZXN1bHQpCitQcm90b2Nv
bDo6RXJyb3JTdHJpbmdPcjxTdHJpbmc+IEluc3BlY3RvckNTU0FnZW50OjpnZXRTdHlsZVNoZWV0
VGV4dChjb25zdCBQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0SWQmIHN0eWxlU2hlZXRJZCkKIHsK
KyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBJbnNwZWN0b3JT
dHlsZVNoZWV0KiBpbnNwZWN0b3JTdHlsZVNoZWV0ID0gYXNzZXJ0U3R5bGVTaGVldEZvcklkKGVy
cm9yU3RyaW5nLCBzdHlsZVNoZWV0SWQpOwogICAgIGlmICghaW5zcGVjdG9yU3R5bGVTaGVldCkK
LSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJp
bmcpOwogCiAgICAgYXV0byB0ZXh0ID0gaW5zcGVjdG9yU3R5bGVTaGVldC0+dGV4dCgpOwotICAg
IGlmICghdGV4dC5oYXNFeGNlcHRpb24oKSkKLSAgICAgICAgKnJlc3VsdCA9IHRleHQucmVsZWFz
ZVJldHVyblZhbHVlKCk7CisgICAgaWYgKHRleHQuaGFzRXhjZXB0aW9uKCkpCisgICAgICAgIHJl
dHVybiBtYWtlVW5leHBlY3RlZChJbnNwZWN0b3JET01BZ2VudDo6dG9FcnJvclN0cmluZyh0ZXh0
LnJlbGVhc2VFeGNlcHRpb24oKSkpOworCisgICAgcmV0dXJuIHRleHQucmVsZWFzZVJldHVyblZh
bHVlKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OnNldFN0eWxlU2hlZXRUZXh0KEVy
cm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBzdHlsZVNoZWV0SWQsIGNvbnN0
IFN0cmluZyYgdGV4dCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckNT
U0FnZW50OjpzZXRTdHlsZVNoZWV0VGV4dChjb25zdCBQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0
SWQmIHN0eWxlU2hlZXRJZCwgY29uc3QgU3RyaW5nJiB0ZXh0KQogeworICAgIFByb3RvY29sOjpF
cnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIEluc3BlY3RvclN0eWxlU2hlZXQqIGluc3Bl
Y3RvclN0eWxlU2hlZXQgPSBhc3NlcnRTdHlsZVNoZWV0Rm9ySWQoZXJyb3JTdHJpbmcsIHN0eWxl
U2hlZXRJZCk7CiAgICAgaWYgKCFpbnNwZWN0b3JTdHlsZVNoZWV0KQotICAgICAgICByZXR1cm47
CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAgICBhdXRv
KiBkb21BZ2VudCA9IG1faW5zdHJ1bWVudGluZ0FnZW50cy5wZXJzaXN0ZW50RE9NQWdlbnQoKTsK
LSAgICBpZiAoIWRvbUFnZW50KSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIkRPTSBkb21haW4g
bXVzdCBiZSBlbmFibGVkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghZG9t
QWdlbnQpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiRE9NIGRvbWFpbiBtdXN0IGJl
IGVuYWJsZWQiX3MpOwogCiAgICAgYXV0byByZXN1bHQgPSBkb21BZ2VudC0+aGlzdG9yeSgpLT5w
ZXJmb3JtKG1ha2VVbmlxdWU8U2V0U3R5bGVTaGVldFRleHRBY3Rpb24+KGluc3BlY3RvclN0eWxl
U2hlZXQsIHRleHQpKTsKICAgICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKQotICAgICAgICBl
cnJvclN0cmluZyA9IEluc3BlY3RvckRPTUFnZW50Ojp0b0Vycm9yU3RyaW5nKHJlc3VsdC5yZWxl
YXNlRXhjZXB0aW9uKCkpOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoSW5zcGVjdG9y
RE9NQWdlbnQ6OnRvRXJyb3JTdHJpbmcocmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKSkpOworCisg
ICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6c2V0U3R5bGVUZXh0
KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgSlNPTjo6T2JqZWN0JiBmdWxsU3R5bGVJ
ZCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpD
U1NTdHlsZT4mIHJlc3VsdCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxQcm90b2NvbDo6
Q1NTOjpDU1NTdHlsZT4+IEluc3BlY3RvckNTU0FnZW50OjpzZXRTdHlsZVRleHQoUmVmPEpTT046
Ok9iamVjdD4mJiBzdHlsZUlkLCBjb25zdCBTdHJpbmcmIHRleHQpCiB7Ci0gICAgSW5zcGVjdG9y
Q1NTSWQgY29tcG91bmRJZChmdWxsU3R5bGVJZCk7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5n
IGVycm9yU3RyaW5nOworCisgICAgSW5zcGVjdG9yQ1NTSWQgY29tcG91bmRJZChzdHlsZUlkKTsK
ICAgICBBU1NFUlQoIWNvbXBvdW5kSWQuaXNFbXB0eSgpKTsKIAogICAgIEluc3BlY3RvclN0eWxl
U2hlZXQqIGluc3BlY3RvclN0eWxlU2hlZXQgPSBhc3NlcnRTdHlsZVNoZWV0Rm9ySWQoZXJyb3JT
dHJpbmcsIGNvbXBvdW5kSWQuc3R5bGVTaGVldElkKCkpOwogICAgIGlmICghaW5zcGVjdG9yU3R5
bGVTaGVldCkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQo
ZXJyb3JTdHJpbmcpOwogCiAgICAgYXV0byogZG9tQWdlbnQgPSBtX2luc3RydW1lbnRpbmdBZ2Vu
dHMucGVyc2lzdGVudERPTUFnZW50KCk7Ci0gICAgaWYgKCFkb21BZ2VudCkgewotICAgICAgICBl
cnJvclN0cmluZyA9ICJET00gZG9tYWluIG11c3QgYmUgZW5hYmxlZCJfczsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KKyAgICBpZiAoIWRvbUFnZW50KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoIkRPTSBkb21haW4gbXVzdCBiZSBlbmFibGVkIl9zKTsKIAogICAgIGF1dG8gcGVyZm9y
bVJlc3VsdCA9IGRvbUFnZW50LT5oaXN0b3J5KCktPnBlcmZvcm0obWFrZVVuaXF1ZTxTZXRTdHls
ZVRleHRBY3Rpb24+KGluc3BlY3RvclN0eWxlU2hlZXQsIGNvbXBvdW5kSWQsIHRleHQpKTsKLSAg
ICBpZiAocGVyZm9ybVJlc3VsdC5oYXNFeGNlcHRpb24oKSkgewotICAgICAgICBlcnJvclN0cmlu
ZyA9IEluc3BlY3RvckRPTUFnZW50Ojp0b0Vycm9yU3RyaW5nKHBlcmZvcm1SZXN1bHQucmVsZWFz
ZUV4Y2VwdGlvbigpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAocGVyZm9ybVJl
c3VsdC5oYXNFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEluc3Bl
Y3RvckRPTUFnZW50Ojp0b0Vycm9yU3RyaW5nKHBlcmZvcm1SZXN1bHQucmVsZWFzZUV4Y2VwdGlv
bigpKSk7CiAKLSAgICByZXN1bHQgPSBpbnNwZWN0b3JTdHlsZVNoZWV0LT5idWlsZE9iamVjdEZv
clN0eWxlKGluc3BlY3RvclN0eWxlU2hlZXQtPnN0eWxlRm9ySWQoY29tcG91bmRJZCkpOworICAg
IHJldHVybiBpbnNwZWN0b3JTdHlsZVNoZWV0LT5idWlsZE9iamVjdEZvclN0eWxlKGluc3BlY3Rv
clN0eWxlU2hlZXQtPnN0eWxlRm9ySWQoY29tcG91bmRJZCkpOwogfQogCi12b2lkIEluc3BlY3Rv
ckNTU0FnZW50OjpzZXRSdWxlU2VsZWN0b3IoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25z
dCBKU09OOjpPYmplY3QmIGZ1bGxSdWxlSWQsIGNvbnN0IFN0cmluZyYgc2VsZWN0b3IsIFJlZlB0
cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1J1bGU+JiByZXN1bHQpCitQcm90b2NvbDo6
RXJyb3JTdHJpbmdPcjxSZWY8UHJvdG9jb2w6OkNTUzo6Q1NTUnVsZT4+IEluc3BlY3RvckNTU0Fn
ZW50OjpzZXRSdWxlU2VsZWN0b3IoUmVmPEpTT046Ok9iamVjdD4mJiBydWxlSWQsIGNvbnN0IFN0
cmluZyYgc2VsZWN0b3IpCiB7Ci0gICAgSW5zcGVjdG9yQ1NTSWQgY29tcG91bmRJZChmdWxsUnVs
ZUlkKTsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKKyAgICBJbnNw
ZWN0b3JDU1NJZCBjb21wb3VuZElkKHJ1bGVJZCk7CiAgICAgQVNTRVJUKCFjb21wb3VuZElkLmlz
RW1wdHkoKSk7CiAKICAgICBJbnNwZWN0b3JTdHlsZVNoZWV0KiBpbnNwZWN0b3JTdHlsZVNoZWV0
ID0gYXNzZXJ0U3R5bGVTaGVldEZvcklkKGVycm9yU3RyaW5nLCBjb21wb3VuZElkLnN0eWxlU2hl
ZXRJZCgpKTsKICAgICBpZiAoIWluc3BlY3RvclN0eWxlU2hlZXQpCi0gICAgICAgIHJldHVybjsK
KyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgIGF1dG8q
IGRvbUFnZW50ID0gbV9pbnN0cnVtZW50aW5nQWdlbnRzLnBlcnNpc3RlbnRET01BZ2VudCgpOwot
ICAgIGlmICghZG9tQWdlbnQpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiRE9NIGRvbWFpbiBt
dXN0IGJlIGVuYWJsZWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKCFkb21B
Z2VudCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJET00gZG9tYWluIG11c3QgYmUg
ZW5hYmxlZCJfcyk7CiAKICAgICBhdXRvIHBlcmZvcm1SZXN1bHQgPSBkb21BZ2VudC0+aGlzdG9y
eSgpLT5wZXJmb3JtKG1ha2VVbmlxdWU8U2V0UnVsZVNlbGVjdG9yQWN0aW9uPihpbnNwZWN0b3JT
dHlsZVNoZWV0LCBjb21wb3VuZElkLCBzZWxlY3RvcikpOwotICAgIGlmIChwZXJmb3JtUmVzdWx0
Lmhhc0V4Y2VwdGlvbigpKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gSW5zcGVjdG9yRE9NQWdl
bnQ6OnRvRXJyb3JTdHJpbmcocGVyZm9ybVJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCkpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmIChwZXJmb3JtUmVzdWx0Lmhhc0V4Y2VwdGlvbigp
KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoSW5zcGVjdG9yRE9NQWdlbnQ6OnRvRXJy
b3JTdHJpbmcocGVyZm9ybVJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCkpKTsKIAotICAgIHJlc3Vs
dCA9IGluc3BlY3RvclN0eWxlU2hlZXQtPmJ1aWxkT2JqZWN0Rm9yUnVsZShpbnNwZWN0b3JTdHls
ZVNoZWV0LT5ydWxlRm9ySWQoY29tcG91bmRJZCkpOworICAgIGF1dG8gcnVsZSA9IGluc3BlY3Rv
clN0eWxlU2hlZXQtPmJ1aWxkT2JqZWN0Rm9yUnVsZShpbnNwZWN0b3JTdHlsZVNoZWV0LT5ydWxl
Rm9ySWQoY29tcG91bmRJZCkpOworICAgIGlmICghcnVsZSkKKyAgICAgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKCJJbnRlcm5hbCBlcnJvcjogbWlzc2luZyBzdHlsZSBzaGVldCIpOworCisgICAg
cmV0dXJuIHJ1bGUucmVsZWFzZU5vbk51bGwoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDU1NBZ2Vu
dDo6Y3JlYXRlU3R5bGVTaGVldChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmlu
ZyYgZnJhbWVJZCwgU3RyaW5nKiBzdHlsZVNoZWV0SWQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdP
cjxQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0SWQ+IEluc3BlY3RvckNTU0FnZW50OjpjcmVhdGVT
dHlsZVNoZWV0KGNvbnN0IFByb3RvY29sOjpOZXR3b3JrOjpGcmFtZUlkJiBmcmFtZUlkKQogewor
ICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIGF1dG8qIHBhZ2VB
Z2VudCA9IG1faW5zdHJ1bWVudGluZ0FnZW50cy5lbmFibGVkUGFnZUFnZW50KCk7Ci0gICAgaWYg
KCFwYWdlQWdlbnQpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiUGFnZSBkb21haW4gbXVzdCBi
ZSBlbmFibGVkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghcGFnZUFnZW50
KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIlBhZ2UgZG9tYWluIG11c3QgYmUgZW5h
YmxlZCJfcyk7CiAKICAgICBhdXRvKiBmcmFtZSA9IHBhZ2VBZ2VudC0+YXNzZXJ0RnJhbWUoZXJy
b3JTdHJpbmcsIGZyYW1lSWQpOwogICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybjsKKyAg
ICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgIERvY3VtZW50
KiBkb2N1bWVudCA9IGZyYW1lLT5kb2N1bWVudCgpOwotICAgIGlmICghZG9jdW1lbnQpIHsKLSAg
ICAgICAgZXJyb3JTdHJpbmcgPSAiTWlzc2luZyBkb2N1bWVudCBvZiBmcmFtZSBmb3IgZ2l2ZW4g
ZnJhbWVJZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoIWRvY3VtZW50KQor
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk1pc3NpbmcgZG9jdW1lbnQgb2YgZnJhbWUg
Zm9yIGdpdmVuIGZyYW1lSWQiX3MpOwogCiAgICAgSW5zcGVjdG9yU3R5bGVTaGVldCogaW5zcGVj
dG9yU3R5bGVTaGVldCA9IGNyZWF0ZUluc3BlY3RvclN0eWxlU2hlZXRGb3JEb2N1bWVudCgqZG9j
dW1lbnQpOwotICAgIGlmICghaW5zcGVjdG9yU3R5bGVTaGVldCkgewotICAgICAgICBlcnJvclN0
cmluZyA9ICJDb3VsZCBub3QgY3JlYXRlIHN0eWxlIHNoZWV0IGZvciBkb2N1bWVudCBvZiBmcmFt
ZSBmb3IgZ2l2ZW4gZnJhbWVJZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAo
IWluc3BlY3RvclN0eWxlU2hlZXQpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiQ291
bGQgbm90IGNyZWF0ZSBzdHlsZSBzaGVldCBmb3IgZG9jdW1lbnQgb2YgZnJhbWUgZm9yIGdpdmVu
IGZyYW1lSWQiX3MpOwogCi0gICAgKnN0eWxlU2hlZXRJZCA9IGluc3BlY3RvclN0eWxlU2hlZXQt
PmlkKCk7CisgICAgcmV0dXJuIGluc3BlY3RvclN0eWxlU2hlZXQtPmlkKCk7CiB9CiAKIEluc3Bl
Y3RvclN0eWxlU2hlZXQqIEluc3BlY3RvckNTU0FnZW50OjpjcmVhdGVJbnNwZWN0b3JTdHlsZVNo
ZWV0Rm9yRG9jdW1lbnQoRG9jdW1lbnQmIGRvY3VtZW50KQpAQCAtNzUxLDQxICs3NjEsNDIgQEAg
SW5zcGVjdG9yU3R5bGVTaGVldCogSW5zcGVjdG9yQ1NTQWdlbnQ6OmNyZWF0ZUluc3BlY3RvclN0
eWxlU2hlZXRGb3JEb2N1bWVudChEb2MKICAgICByZXR1cm4gaW5zcGVjdG9yU3R5bGVTaGVldHNG
b3JEb2N1bWVudC5sYXN0KCkuZ2V0KCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmFk
ZFJ1bGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHN0eWxlU2hlZXRJ
ZCwgY29uc3QgU3RyaW5nJiBzZWxlY3RvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNT
Uzo6Q1NTUnVsZT4mIHJlc3VsdCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxQcm90b2Nv
bDo6Q1NTOjpDU1NSdWxlPj4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmFkZFJ1bGUoY29uc3QgUHJvdG9j
b2w6OkNTUzo6U3R5bGVTaGVldElkJiBzdHlsZVNoZWV0SWQsIGNvbnN0IFN0cmluZyYgc2VsZWN0
b3IpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAgICAgSW5z
cGVjdG9yU3R5bGVTaGVldCogaW5zcGVjdG9yU3R5bGVTaGVldCA9IGFzc2VydFN0eWxlU2hlZXRG
b3JJZChlcnJvclN0cmluZywgc3R5bGVTaGVldElkKTsKICAgICBpZiAoIWluc3BlY3RvclN0eWxl
U2hlZXQpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVy
cm9yU3RyaW5nKTsKIAogICAgIGF1dG8qIGRvbUFnZW50ID0gbV9pbnN0cnVtZW50aW5nQWdlbnRz
LnBlcnNpc3RlbnRET01BZ2VudCgpOwotICAgIGlmICghZG9tQWdlbnQpIHsKLSAgICAgICAgZXJy
b3JTdHJpbmcgPSAiRE9NIGRvbWFpbiBtdXN0IGJlIGVuYWJsZWQiX3M7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9CisgICAgaWYgKCFkb21BZ2VudCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVj
dGVkKCJET00gZG9tYWluIG11c3QgYmUgZW5hYmxlZCJfcyk7CiAKICAgICBhdXRvIGFjdGlvbiA9
IG1ha2VVbmlxdWU8QWRkUnVsZUFjdGlvbj4oaW5zcGVjdG9yU3R5bGVTaGVldCwgc2VsZWN0b3Ip
OwogICAgIGF1dG8mIHJhd0FjdGlvbiA9ICphY3Rpb247CiAgICAgYXV0byBwZXJmb3JtUmVzdWx0
ID0gZG9tQWdlbnQtPmhpc3RvcnkoKS0+cGVyZm9ybShXVEZNb3ZlKGFjdGlvbikpOwotICAgIGlm
IChwZXJmb3JtUmVzdWx0Lmhhc0V4Y2VwdGlvbigpKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0g
SW5zcGVjdG9yRE9NQWdlbnQ6OnRvRXJyb3JTdHJpbmcocGVyZm9ybVJlc3VsdC5yZWxlYXNlRXhj
ZXB0aW9uKCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmIChwZXJmb3JtUmVzdWx0
Lmhhc0V4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoSW5zcGVjdG9y
RE9NQWdlbnQ6OnRvRXJyb3JTdHJpbmcocGVyZm9ybVJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCkp
KTsKIAotICAgIEluc3BlY3RvckNTU0lkIHJ1bGVJZCA9IHJhd0FjdGlvbi5uZXdSdWxlSWQoKTsK
LSAgICBDU1NTdHlsZVJ1bGUqIHJ1bGUgPSBpbnNwZWN0b3JTdHlsZVNoZWV0LT5ydWxlRm9ySWQo
cnVsZUlkKTsKLSAgICByZXN1bHQgPSBpbnNwZWN0b3JTdHlsZVNoZWV0LT5idWlsZE9iamVjdEZv
clJ1bGUocnVsZSk7CisgICAgYXV0byBydWxlID0gaW5zcGVjdG9yU3R5bGVTaGVldC0+YnVpbGRP
YmplY3RGb3JSdWxlKGluc3BlY3RvclN0eWxlU2hlZXQtPnJ1bGVGb3JJZChyYXdBY3Rpb24ubmV3
UnVsZUlkKCkpKTsKKyAgICBpZiAoIXJ1bGUpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3Rl
ZCgiSW50ZXJuYWwgZXJyb3I6IG1pc3Npbmcgc3R5bGUgc2hlZXQiKTsKKworICAgIHJldHVybiBy
dWxlLnJlbGVhc2VOb25OdWxsKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldFN1
cHBvcnRlZENTU1Byb3BlcnRpZXMoRXJyb3JTdHJpbmcmLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1Byb3BlcnR5SW5mbz4+JiBjc3NQcm9wZXJ0aWVz
KQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkNT
Uzo6Q1NTUHJvcGVydHlJbmZvPj4+IEluc3BlY3RvckNTU0FnZW50OjpnZXRTdXBwb3J0ZWRDU1NQ
cm9wZXJ0aWVzKCkKIHsKLSAgICBhdXRvIHByb3BlcnRpZXMgPSBKU09OOjpBcnJheU9mPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUHJvcGVydHlJbmZvPjo6Y3JlYXRlKCk7CisgICAgYXV0
byBjc3NQcm9wZXJ0aWVzID0gSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0
eUluZm8+OjpjcmVhdGUoKTsKKwogICAgIGZvciAoaW50IGkgPSBmaXJzdENTU1Byb3BlcnR5OyBp
IDw9IGxhc3RDU1NQcm9wZXJ0eTsgKytpKSB7CiAgICAgICAgIENTU1Byb3BlcnR5SUQgcHJvcGVy
dHlJRCA9IGNvbnZlcnRUb0NTU1Byb3BlcnR5SUQoaSk7CiAgICAgICAgIC8vIEZJWE1FOiBTaG91
bGQgdGFrZSBhY2NvdW50IGZvciBmbGFncyBpbiBzZXR0aW5ncygpLgogICAgICAgICBpZiAoaXNJ
bnRlcm5hbENTU1Byb3BlcnR5KHByb3BlcnR5SUQpIHx8ICFpc0VuYWJsZWRDU1NQcm9wZXJ0eShw
cm9wZXJ0eUlEKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIGF1dG8gcHJvcGVy
dHkgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1Byb3BlcnR5SW5mbzo6Y3JlYXRlKCkK
KyAgICAgICAgYXV0byBwcm9wZXJ0eSA9IFByb3RvY29sOjpDU1M6OkNTU1Byb3BlcnR5SW5mbzo6
Y3JlYXRlKCkKICAgICAgICAgICAgIC5zZXROYW1lKGdldFByb3BlcnR5TmFtZVN0cmluZyhwcm9w
ZXJ0eUlEKSkKICAgICAgICAgICAgIC5yZWxlYXNlKCk7CiAKQEAgLTgyMSw2MyArODMyLDY2IEBA
IHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldFN1cHBvcnRlZENTU1Byb3BlcnRpZXMoRXJyb3JT
dHJpbmcmLCBSZWZQdHI8SlNPTjo6QXJyCiAgICAgICAgIGlmIChDU1NQcm9wZXJ0eTo6aXNJbmhl
cml0ZWRQcm9wZXJ0eShwcm9wZXJ0eUlEKSkKICAgICAgICAgICAgIHByb3BlcnR5LT5zZXRJbmhl
cml0ZWQodHJ1ZSk7CiAKLSAgICAgICAgcHJvcGVydGllcy0+YWRkSXRlbShXVEZNb3ZlKHByb3Bl
cnR5KSk7CisgICAgICAgIGNzc1Byb3BlcnRpZXMtPmFkZEl0ZW0oV1RGTW92ZShwcm9wZXJ0eSkp
OwogICAgIH0KLSAgICBjc3NQcm9wZXJ0aWVzID0gV1RGTW92ZShwcm9wZXJ0aWVzKTsKKworICAg
IHJldHVybiBXVEZNb3ZlKGNzc1Byb3BlcnRpZXMpOwogfQogCi12b2lkIEluc3BlY3RvckNTU0Fn
ZW50OjpnZXRTdXBwb3J0ZWRTeXN0ZW1Gb250RmFtaWx5TmFtZXMoRXJyb3JTdHJpbmcmLCBSZWZQ
dHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiYgZm9udEZhbWlseU5hbWVzKQorUHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8UmVmPEpTT046OkFycmF5T2Y8U3RyaW5nPj4+IEluc3BlY3RvckNTU0FnZW50
OjpnZXRTdXBwb3J0ZWRTeXN0ZW1Gb250RmFtaWx5TmFtZXMoKQogewotICAgIGF1dG8gZmFtaWxp
ZXMgPSBKU09OOjpBcnJheU9mPFN0cmluZz46OmNyZWF0ZSgpOworICAgIGF1dG8gZm9udEZhbWls
eU5hbWVzID0gSlNPTjo6QXJyYXlPZjxTdHJpbmc+OjpjcmVhdGUoKTsKIAogICAgIFZlY3RvcjxT
dHJpbmc+IHN5c3RlbUZvbnRGYW1pbGllcyA9IEZvbnRDYWNoZTo6c2luZ2xldG9uKCkuc3lzdGVt
Rm9udEZhbWlsaWVzKCk7CiAgICAgZm9yIChjb25zdCBhdXRvJiBmYW1pbHlOYW1lIDogc3lzdGVt
Rm9udEZhbWlsaWVzKQotICAgICAgICBmYW1pbGllcy0+YWRkSXRlbShmYW1pbHlOYW1lKTsKKyAg
ICAgICAgZm9udEZhbWlseU5hbWVzLT5hZGRJdGVtKGZhbWlseU5hbWUpOwogCi0gICAgZm9udEZh
bWlseU5hbWVzID0gV1RGTW92ZShmYW1pbGllcyk7CisgICAgcmV0dXJuIFdURk1vdmUoZm9udEZh
bWlseU5hbWVzKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6Zm9yY2VQc2V1ZG9TdGF0
ZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQsIGNvbnN0IEpTT046OkFycmF5
JiBmb3JjZWRQc2V1ZG9DbGFzc2VzKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5z
cGVjdG9yQ1NTQWdlbnQ6OmZvcmNlUHNldWRvU3RhdGUoUHJvdG9jb2w6OkRPTTo6Tm9kZUlkIG5v
ZGVJZCwgUmVmPEpTT046OkFycmF5PiYmIGZvcmNlZFBzZXVkb0NsYXNzZXMpCiB7CisgICAgUHJv
dG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAgICAgYXV0byogZG9tQWdlbnQgPSBt
X2luc3RydW1lbnRpbmdBZ2VudHMucGVyc2lzdGVudERPTUFnZW50KCk7Ci0gICAgaWYgKCFkb21B
Z2VudCkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJET00gZG9tYWluIG11c3QgYmUgZW5hYmxl
ZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoIWRvbUFnZW50KQorICAgICAg
ICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkRPTSBkb21haW4gbXVzdCBiZSBlbmFibGVkIl9zKTsK
IAogICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBkb21BZ2VudC0+YXNzZXJ0RWxlbWVudChlcnJvclN0
cmluZywgbm9kZUlkKTsKICAgICBpZiAoIWVsZW1lbnQpCi0gICAgICAgIHJldHVybjsKKyAgICAg
ICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgIC8vIFJldHVybiBl
YXJseSBpZiB0aGUgZm9yY2VkIHBzZXVkbyBzdGF0ZSB3YXMgYWxyZWFkeSBzZXQgY29ycmVjdGx5
LgogICAgIHVuc2lnbmVkIGZvcmNlZFBzZXVkb1N0YXRlID0gY29tcHV0ZVBzZXVkb0NsYXNzTWFz
ayhmb3JjZWRQc2V1ZG9DbGFzc2VzKTsKICAgICBpZiAoZm9yY2VkUHNldWRvU3RhdGUpIHsKICAg
ICAgICAgYXV0byBpdGVyYXRvciA9IG1fbm9kZUlkVG9Gb3JjZWRQc2V1ZG9TdGF0ZS5hZGQobm9k
ZUlkLCAwKS5pdGVyYXRvcjsKICAgICAgICAgaWYgKGZvcmNlZFBzZXVkb1N0YXRlID09IGl0ZXJh
dG9yLT52YWx1ZSkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVybiB7IH07
CiAgICAgICAgIGl0ZXJhdG9yLT52YWx1ZSA9IGZvcmNlZFBzZXVkb1N0YXRlOwogICAgICAgICBt
X2RvY3VtZW50c1dpdGhGb3JjZWRQc2V1ZG9TdGF0ZXMuYWRkKCZlbGVtZW50LT5kb2N1bWVudCgp
KTsKICAgICB9IGVsc2UgewogICAgICAgICBpZiAoIW1fbm9kZUlkVG9Gb3JjZWRQc2V1ZG9TdGF0
ZS5yZW1vdmUobm9kZUlkKSkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVy
biB7IH07CiAgICAgICAgIGlmIChtX25vZGVJZFRvRm9yY2VkUHNldWRvU3RhdGUuaXNFbXB0eSgp
KQogICAgICAgICAgICAgbV9kb2N1bWVudHNXaXRoRm9yY2VkUHNldWRvU3RhdGVzLmNsZWFyKCk7
CiAgICAgfQogCiAgICAgZWxlbWVudC0+ZG9jdW1lbnQoKS5zdHlsZVNjb3BlKCkuZGlkQ2hhbmdl
U3R5bGVTaGVldEVudmlyb25tZW50KCk7CisKKyAgICByZXR1cm4geyB9OwogfQogCiBJbnNwZWN0
b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGUmIEluc3BlY3RvckNTU0FnZW50Ojphc0luc3BlY3Rv
clN0eWxlU2hlZXQoU3R5bGVkRWxlbWVudCYgZWxlbWVudCkKIHsKICAgICByZXR1cm4gbV9ub2Rl
VG9JbnNwZWN0b3JTdHlsZVNoZWV0LmVuc3VyZSgmZWxlbWVudCwgW3RoaXMsICZlbGVtZW50XSB7
CiAgICAgICAgIFN0cmluZyBuZXdTdHlsZVNoZWV0SWQgPSBTdHJpbmc6Om51bWJlcihtX2xhc3RT
dHlsZVNoZWV0SWQrKyk7Ci0gICAgICAgIGF1dG8gaW5zcGVjdG9yU3R5bGVTaGVldCA9IEluc3Bl
Y3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZTo6Y3JlYXRlKG1faW5zdHJ1bWVudGluZ0FnZW50
cy5lbmFibGVkUGFnZUFnZW50KCksIG5ld1N0eWxlU2hlZXRJZCwgZWxlbWVudCwgSW5zcGVjdG9y
OjpQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luOjpBdXRob3IsIHRoaXMpOworICAgICAg
ICBhdXRvIGluc3BlY3RvclN0eWxlU2hlZXQgPSBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5l
U3R5bGU6OmNyZWF0ZShtX2luc3RydW1lbnRpbmdBZ2VudHMuZW5hYmxlZFBhZ2VBZ2VudCgpLCBu
ZXdTdHlsZVNoZWV0SWQsIGVsZW1lbnQsIFByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW46
OkF1dGhvciwgdGhpcyk7CiAgICAgICAgIG1faWRUb0luc3BlY3RvclN0eWxlU2hlZXQuc2V0KG5l
d1N0eWxlU2hlZXRJZCwgaW5zcGVjdG9yU3R5bGVTaGVldC5jb3B5UmVmKCkpOwogICAgICAgICBy
ZXR1cm4gaW5zcGVjdG9yU3R5bGVTaGVldDsKICAgICB9KS5pdGVyYXRvci0+dmFsdWU7CiB9CiAK
LUVsZW1lbnQqIEluc3BlY3RvckNTU0FnZW50OjplbGVtZW50Rm9ySWQoRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBpbnQgbm9kZUlkKQorRWxlbWVudCogSW5zcGVjdG9yQ1NTQWdlbnQ6OmVsZW1l
bnRGb3JJZChQcm90b2NvbDo6RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBQcm90b2NvbDo6RE9N
OjpOb2RlSWQgbm9kZUlkKQogewogICAgIGF1dG8qIGRvbUFnZW50ID0gbV9pbnN0cnVtZW50aW5n
QWdlbnRzLnBlcnNpc3RlbnRET01BZ2VudCgpOwogICAgIGlmICghZG9tQWdlbnQpIHsKQEAgLTkx
NCw3ICs5MjgsNyBAQCBJbnNwZWN0b3JTdHlsZVNoZWV0KiBJbnNwZWN0b3JDU1NBZ2VudDo6Ymlu
ZFN0eWxlU2hlZXQoQ1NTU3R5bGVTaGVldCogc3R5bGVTaGVldAogICAgIHJldHVybiBpbnNwZWN0
b3JTdHlsZVNoZWV0LmdldCgpOwogfQogCi1JbnNwZWN0b3JTdHlsZVNoZWV0KiBJbnNwZWN0b3JD
U1NBZ2VudDo6YXNzZXJ0U3R5bGVTaGVldEZvcklkKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywg
Y29uc3QgU3RyaW5nJiBzdHlsZVNoZWV0SWQpCitJbnNwZWN0b3JTdHlsZVNoZWV0KiBJbnNwZWN0
b3JDU1NBZ2VudDo6YXNzZXJ0U3R5bGVTaGVldEZvcklkKFByb3RvY29sOjpFcnJvclN0cmluZyYg
ZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgc3R5bGVTaGVldElkKQogewogICAgIElkVG9JbnNw
ZWN0b3JTdHlsZVNoZWV0OjppdGVyYXRvciBpdCA9IG1faWRUb0luc3BlY3RvclN0eWxlU2hlZXQu
ZmluZChzdHlsZVNoZWV0SWQpOwogICAgIGlmIChpdCA9PSBtX2lkVG9JbnNwZWN0b3JTdHlsZVNo
ZWV0LmVuZCgpKSB7CkBAIC05MjQsMjkgKzkzOCwyOSBAQCBJbnNwZWN0b3JTdHlsZVNoZWV0KiBJ
bnNwZWN0b3JDU1NBZ2VudDo6YXNzZXJ0U3R5bGVTaGVldEZvcklkKEVycm9yU3RyaW5nJiBlcnJv
cgogICAgIHJldHVybiBpdC0+dmFsdWUuZ2V0KCk7CiB9CiAKLUluc3BlY3Rvcjo6UHJvdG9jb2w6
OkNTUzo6U3R5bGVTaGVldE9yaWdpbiBJbnNwZWN0b3JDU1NBZ2VudDo6ZGV0ZWN0T3JpZ2luKENT
U1N0eWxlU2hlZXQqIHBhZ2VTdHlsZVNoZWV0LCBEb2N1bWVudCogb3duZXJEb2N1bWVudCkKK1By
b3RvY29sOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmRldGVjdE9y
aWdpbihDU1NTdHlsZVNoZWV0KiBwYWdlU3R5bGVTaGVldCwgRG9jdW1lbnQqIG93bmVyRG9jdW1l
bnQpCiB7CiAgICAgaWYgKG1fY3JlYXRpbmdWaWFJbnNwZWN0b3JTdHlsZVNoZWV0KQotICAgICAg
ICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luOjpJbnNw
ZWN0b3I7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luOjpJ
bnNwZWN0b3I7CiAKICAgICBpZiAocGFnZVN0eWxlU2hlZXQgJiYgIXBhZ2VTdHlsZVNoZWV0LT5v
d25lck5vZGUoKSAmJiBwYWdlU3R5bGVTaGVldC0+aHJlZigpLmlzRW1wdHkoKSkKLSAgICAgICAg
cmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6VXNlckFn
ZW50OworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6VXNl
ckFnZW50OwogCiAgICAgaWYgKHBhZ2VTdHlsZVNoZWV0ICYmIHBhZ2VTdHlsZVNoZWV0LT5jb250
ZW50cygpLmlzVXNlclN0eWxlU2hlZXQoKSkKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6VXNlcjsKKyAgICAgICAgcmV0dXJuIFByb3Rv
Y29sOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW46OlVzZXI7CiAKICAgICBhdXRvIGl0ZXJhdG9yID0g
bV9kb2N1bWVudFRvSW5zcGVjdG9yU3R5bGVTaGVldC5maW5kKG93bmVyRG9jdW1lbnQpOwogICAg
IGlmIChpdGVyYXRvciAhPSBtX2RvY3VtZW50VG9JbnNwZWN0b3JTdHlsZVNoZWV0LmVuZCgpKSB7
CiAgICAgICAgIGZvciAoYXV0byYgaW5zcGVjdG9yU3R5bGVTaGVldCA6IGl0ZXJhdG9yLT52YWx1
ZSkgewogICAgICAgICAgICAgaWYgKHBhZ2VTdHlsZVNoZWV0ID09IGluc3BlY3RvclN0eWxlU2hl
ZXQtPnBhZ2VTdHlsZVNoZWV0KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6SW5zcGVjdG9yOworICAgICAgICAgICAg
ICAgIHJldHVybiBQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luOjpJbnNwZWN0b3I7CiAg
ICAgICAgIH0KICAgICB9CiAKLSAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpT
dHlsZVNoZWV0T3JpZ2luOjpBdXRob3I7CisgICAgcmV0dXJuIFByb3RvY29sOjpDU1M6OlN0eWxl
U2hlZXRPcmlnaW46OkF1dGhvcjsKIH0KIAotUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNT
Uzo6Q1NTUnVsZT4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yUnVsZShjb25zdCBT
dHlsZVJ1bGUqIHN0eWxlUnVsZSwgU3R5bGU6OlJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBFbGVt
ZW50JiBlbGVtZW50KQorUmVmUHRyPFByb3RvY29sOjpDU1M6OkNTU1J1bGU+IEluc3BlY3RvckNT
U0FnZW50OjpidWlsZE9iamVjdEZvclJ1bGUoY29uc3QgU3R5bGVSdWxlKiBzdHlsZVJ1bGUsIFN0
eWxlOjpSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgRWxlbWVudCYgZWxlbWVudCkKIHsKICAgICBp
ZiAoIXN0eWxlUnVsZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC05NjgsNyArOTgyLDcg
QEAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUnVsZT4gSW5zcGVjdG9yQ1NT
QWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yUnVsZSgKICAgICByZXR1cm4gaW5zcGVjdG9yU3R5bGVTaGVl
dCA/IGluc3BlY3RvclN0eWxlU2hlZXQtPmJ1aWxkT2JqZWN0Rm9yUnVsZShjc3NvbVdyYXBwZXIp
IDogbnVsbHB0cjsKIH0KIAotUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUnVs
ZT4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yUnVsZShDU1NTdHlsZVJ1bGUqIHJ1
bGUpCitSZWZQdHI8UHJvdG9jb2w6OkNTUzo6Q1NTUnVsZT4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmJ1
aWxkT2JqZWN0Rm9yUnVsZShDU1NTdHlsZVJ1bGUqIHJ1bGUpCiB7CiAgICAgaWYgKCFydWxlKQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTk3OCwxNiArOTkyLDE2IEBAIFJlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1J1bGU+IEluc3BlY3RvckNTU0FnZW50OjpidWlsZE9i
amVjdEZvclJ1bGUoCiAgICAgcmV0dXJuIGluc3BlY3RvclN0eWxlU2hlZXQgPyBpbnNwZWN0b3JT
dHlsZVNoZWV0LT5idWlsZE9iamVjdEZvclJ1bGUocnVsZSkgOiBudWxscHRyOwogfQogCi1SZWZQ
dHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlJ1bGVNYXRjaD4+IElu
c3BlY3RvckNTU0FnZW50OjpidWlsZEFycmF5Rm9yTWF0Y2hlZFJ1bGVMaXN0KGNvbnN0IFZlY3Rv
cjxSZWZQdHI8Y29uc3QgU3R5bGVSdWxlPj4mIG1hdGNoZWRSdWxlcywgU3R5bGU6OlJlc29sdmVy
JiBzdHlsZVJlc29sdmVyLCBFbGVtZW50JiBlbGVtZW50LCBQc2V1ZG9JZCBwc2V1ZG9JZCkKK1Jl
ZjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpDU1M6OlJ1bGVNYXRjaD4+IEluc3BlY3RvckNTU0Fn
ZW50OjpidWlsZEFycmF5Rm9yTWF0Y2hlZFJ1bGVMaXN0KGNvbnN0IFZlY3RvcjxSZWZQdHI8Y29u
c3QgU3R5bGVSdWxlPj4mIG1hdGNoZWRSdWxlcywgU3R5bGU6OlJlc29sdmVyJiBzdHlsZVJlc29s
dmVyLCBFbGVtZW50JiBlbGVtZW50LCBQc2V1ZG9JZCBwc2V1ZG9JZCkKIHsKLSAgICBhdXRvIHJl
c3VsdCA9IEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpSdWxlTWF0Y2g+
OjpjcmVhdGUoKTsKKyAgICBhdXRvIHJlc3VsdCA9IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkNT
Uzo6UnVsZU1hdGNoPjo6Y3JlYXRlKCk7CiAKICAgICBTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5n
Q29udGV4dCBjb250ZXh0KFNlbGVjdG9yQ2hlY2tlcjo6TW9kZTo6Q29sbGVjdGluZ1J1bGVzKTsK
ICAgICBjb250ZXh0LnBzZXVkb0lkID0gcHNldWRvSWQgIT0gUHNldWRvSWQ6Ok5vbmUgPyBwc2V1
ZG9JZCA6IGVsZW1lbnQucHNldWRvSWQoKTsKICAgICBTZWxlY3RvckNoZWNrZXIgc2VsZWN0b3JD
aGVja2VyKGVsZW1lbnQuZG9jdW1lbnQoKSk7CiAKICAgICBmb3IgKGF1dG8mIG1hdGNoZWRSdWxl
IDogbWF0Y2hlZFJ1bGVzKSB7Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpD
U1M6OkNTU1J1bGU+IHJ1bGVPYmplY3QgPSBidWlsZE9iamVjdEZvclJ1bGUobWF0Y2hlZFJ1bGUu
Z2V0KCksIHN0eWxlUmVzb2x2ZXIsIGVsZW1lbnQpOworICAgICAgICBSZWZQdHI8UHJvdG9jb2w6
OkNTUzo6Q1NTUnVsZT4gcnVsZU9iamVjdCA9IGJ1aWxkT2JqZWN0Rm9yUnVsZShtYXRjaGVkUnVs
ZS5nZXQoKSwgc3R5bGVSZXNvbHZlciwgZWxlbWVudCk7CiAgICAgICAgIGlmICghcnVsZU9iamVj
dCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCkBAIC0xMDAxLDggKzEwMTUsOCBAQCBSZWZQdHI8
SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlJ1bGVNYXRjaD4+IEluc3Bl
Y3RvckNTU0FnZW50OjpidQogICAgICAgICAgICAgKytpbmRleDsKICAgICAgICAgfQogCi0gICAg
ICAgIGF1dG8gbWF0Y2ggPSBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlJ1bGVNYXRjaDo6Y3Jl
YXRlKCkKLSAgICAgICAgICAgIC5zZXRSdWxlKFdURk1vdmUocnVsZU9iamVjdCkpCisgICAgICAg
IGF1dG8gbWF0Y2ggPSBQcm90b2NvbDo6Q1NTOjpSdWxlTWF0Y2g6OmNyZWF0ZSgpCisgICAgICAg
ICAgICAuc2V0UnVsZShydWxlT2JqZWN0LnJlbGVhc2VOb25OdWxsKCkpCiAgICAgICAgICAgICAu
c2V0TWF0Y2hpbmdTZWxlY3RvcnMoV1RGTW92ZShtYXRjaGluZ1NlbGVjdG9ycykpCiAgICAgICAg
ICAgICAucmVsZWFzZSgpOwogICAgICAgICByZXN1bHQtPmFkZEl0ZW0oV1RGTW92ZShtYXRjaCkp
OwpAQCAtMTAxMSw3ICsxMDI1LDcgQEAgUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6Q1NTOjpSdWxlTWF0Y2g+PiBJbnNwZWN0b3JDU1NBZ2VudDo6YnUKICAgICByZXR1
cm4gcmVzdWx0OwogfQogCi1SZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHls
ZT4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yQXR0cmlidXRlc1N0eWxlKFN0eWxl
ZEVsZW1lbnQmIGVsZW1lbnQpCitSZWZQdHI8UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+IEluc3Bl
Y3RvckNTU0FnZW50OjpidWlsZE9iamVjdEZvckF0dHJpYnV0ZXNTdHlsZShTdHlsZWRFbGVtZW50
JiBlbGVtZW50KQogewogICAgIC8vIEZJWE1FOiBVZ2xpbmVzcyBiZWxvdy4KICAgICBhdXRvKiBh
dHRyaWJ1dGVTdHlsZSA9IGNvbnN0X2Nhc3Q8U3R5bGVQcm9wZXJ0aWVzKj4oZWxlbWVudC5wcmVz
ZW50YXRpb25BdHRyaWJ1dGVTdHlsZSgpKTsKQEAgLTEwMjMsNyArMTAzNyw3IEBAIFJlZlB0cjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlPiBJbnNwZWN0b3JDU1NBZ2VudDo6YnVp
bGRPYmplY3RGb3JBdHRyCiAgICAgcmV0dXJuIGluc3BlY3RvclN0eWxlLT5idWlsZE9iamVjdEZv
clN0eWxlKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmRpZFJlbW92ZURPTU5vZGUo
Tm9kZSYgbm9kZSwgaW50IG5vZGVJZCkKK3ZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmRpZFJlbW92
ZURPTU5vZGUoTm9kZSYgbm9kZSwgUHJvdG9jb2w6OkRPTTo6Tm9kZUlkIG5vZGVJZCkKIHsKICAg
ICBtX25vZGVJZFRvRm9yY2VkUHNldWRvU3RhdGUucmVtb3ZlKG5vZGVJZCk7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ1NTQWdlbnQuaCBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ1NTQWdlbnQuaAppbmRl
eCBmYTFkNjcxZGQ4MzNiMDAzYTYxZGMyNzk2NTk2NjkyMTYxYWFkZjdmLi5kMmZjYTc5NWRjNjgw
Zjk4ZGU4NmNiY2MxZDZlOTBjOGNhN2M3MGIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNTU0FnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDU1NBZ2VudC5oCkBAIC02MSw3ICs2MSw3IEBAIGNs
YXNzIEluc3BlY3RvckNTU0FnZW50IGZpbmFsIDogcHVibGljIEluc3BlY3RvckFnZW50QmFzZSAs
IHB1YmxpYyBJbnNwZWN0b3I6OkNTCiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJs
aWM6CiAgICAgSW5zcGVjdG9yQ1NTQWdlbnQoV2ViQWdlbnRDb250ZXh0Jik7Ci0gICAgfkluc3Bl
Y3RvckNTU0FnZW50KCkgb3ZlcnJpZGU7CisgICAgfkluc3BlY3RvckNTU0FnZW50KCk7CiAKICAg
ICBjbGFzcyBJbmxpbmVTdHlsZU92ZXJyaWRlU2NvcGUgewogICAgIHB1YmxpYzoKQEAgLTgzLDI5
ICs4MywyOSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIENTU1N0eWxlUnVsZSogYXNDU1NTdHlsZVJ1
bGUoQ1NTUnVsZSYpOwogCiAgICAgLy8gSW5zcGVjdG9yQWdlbnRCYXNlCi0gICAgdm9pZCBkaWRD
cmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9udGVuZFJvdXRlciosIEluc3Bl
Y3Rvcjo6QmFja2VuZERpc3BhdGNoZXIqKSBvdmVycmlkZTsKLSAgICB2b2lkIHdpbGxEZXN0cm95
RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlzY29ubmVjdFJlYXNvbikgb3ZlcnJpZGU7
CisgICAgdm9pZCBkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9udGVu
ZFJvdXRlciosIEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXIqKTsKKyAgICB2b2lkIHdpbGxE
ZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlzY29ubmVjdFJlYXNvbik7CiAK
ICAgICAvLyBDU1NCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIKLSAgICB2b2lkIGVuYWJsZShFcnJv
clN0cmluZyYpIG92ZXJyaWRlOwotICAgIHZvaWQgZGlzYWJsZShFcnJvclN0cmluZyYpIG92ZXJy
aWRlOwotICAgIHZvaWQgZ2V0Q29tcHV0ZWRTdHlsZUZvck5vZGUoRXJyb3JTdHJpbmcmLCBpbnQg
bm9kZUlkLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNT
U0NvbXB1dGVkU3R5bGVQcm9wZXJ0eT4+Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBnZXRJbmxpbmVT
dHlsZXNGb3JOb2RlKEVycm9yU3RyaW5nJiwgaW50IG5vZGVJZCwgUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+JiBpbmxpbmVTdHlsZSwgUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+JiBhdHRyaWJ1dGVzKSBvdmVycmlkZTsKLSAgICB2b2lk
IGdldE1hdGNoZWRTdHlsZXNGb3JOb2RlKEVycm9yU3RyaW5nJiwgaW50IG5vZGVJZCwgY29uc3Qg
Ym9vbCogaW5jbHVkZVBzZXVkbywgY29uc3QgYm9vbCogaW5jbHVkZUluaGVyaXRlZCwgUmVmUHRy
PEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpSdWxlTWF0Y2g+PiYgbWF0
Y2hlZENTU1J1bGVzLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpD
U1M6OlBzZXVkb0lkTWF0Y2hlcz4+JiwgUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6Q1NTOjpJbmhlcml0ZWRTdHlsZUVudHJ5Pj4mIGluaGVyaXRlZEVudHJpZXMpIG92
ZXJyaWRlOwotICAgIHZvaWQgZ2V0QWxsU3R5bGVTaGVldHMoRXJyb3JTdHJpbmcmLCBSZWZQdHI8
SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlU2hlZXRIZWFk
ZXI+PiYgc3R5bGVTaGVldEluZm9zKSBvdmVycmlkZTsKLSAgICB2b2lkIGdldFN0eWxlU2hlZXQo
RXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHN0eWxlU2hlZXRJZCwgUmVmUHRyPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGVTaGVldEJvZHk+JiByZXN1bHQpIG92ZXJyaWRlOwot
ICAgIHZvaWQgZ2V0U3R5bGVTaGVldFRleHQoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHN0
eWxlU2hlZXRJZCwgU3RyaW5nKiByZXN1bHQpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0U3R5bGVT
aGVldFRleHQoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHN0eWxlU2hlZXRJZCwgY29uc3Qg
U3RyaW5nJiB0ZXh0KSBvdmVycmlkZTsKLSAgICB2b2lkIHNldFN0eWxlVGV4dChFcnJvclN0cmlu
ZyYsIGNvbnN0IEpTT046Ok9iamVjdCYgc3R5bGVJZCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBSZWZQ
dHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4mIHJlc3VsdCkgb3ZlcnJpZGU7
Ci0gICAgdm9pZCBzZXRSdWxlU2VsZWN0b3IoRXJyb3JTdHJpbmcmLCBjb25zdCBKU09OOjpPYmpl
Y3QmIHJ1bGVJZCwgY29uc3QgU3RyaW5nJiBzZWxlY3RvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkNTUzo6Q1NTUnVsZT4mIHJlc3VsdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjcmVhdGVT
dHlsZVNoZWV0KEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBTdHJpbmcqIHN0
eWxlU2hlZXRJZCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBhZGRSdWxlKEVycm9yU3RyaW5nJiwgY29u
c3QgU3RyaW5nJiBzdHlsZVNoZWV0SWQsIGNvbnN0IFN0cmluZyYgc2VsZWN0b3IsIFJlZlB0cjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1J1bGU+JiByZXN1bHQpIG92ZXJyaWRlOwotICAg
IHZvaWQgZ2V0U3VwcG9ydGVkQ1NTUHJvcGVydGllcyhFcnJvclN0cmluZyYsIFJlZlB0cjxKU09O
OjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUHJvcGVydHlJbmZvPj4mIHJl
c3VsdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBnZXRTdXBwb3J0ZWRTeXN0ZW1Gb250RmFtaWx5TmFt
ZXMoRXJyb3JTdHJpbmcmLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiYgcmVzdWx0KSBv
dmVycmlkZTsKLSAgICB2b2lkIGZvcmNlUHNldWRvU3RhdGUoRXJyb3JTdHJpbmcmLCBpbnQgbm9k
ZUlkLCBjb25zdCBKU09OOjpBcnJheSYgZm9yY2VkUHNldWRvQ2xhc3Nlcykgb3ZlcnJpZGU7Cisg
ICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBlbmFibGUoKTsKKyAg
ICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGRpc2FibGUoKTsKKyAg
ICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTQ29tcHV0ZWRTdHlsZVByb3BlcnR5Pj4+IGdldENv
bXB1dGVkU3R5bGVGb3JOb2RlKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkKTsKKyAg
ICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHN0ZDo6dHVwbGU8UmVmUHRyPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+IC8qIGlubGluZVN0eWxlICovLCBSZWZQ
dHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4gLyogYXR0cmlidXRlc1N0eWxl
ICovPj4gZ2V0SW5saW5lU3R5bGVzRm9yTm9kZShJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5v
ZGVJZCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxzdGQ6OnR1cGxl
PFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6UnVsZU1hdGNo
Pj4sIFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6UHNldWRv
SWRNYXRjaGVzPj4sIFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNT
Uzo6SW5oZXJpdGVkU3R5bGVFbnRyeT4+Pj4gZ2V0TWF0Y2hlZFN0eWxlc0Zvck5vZGUoSW5zcGVj
dG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQsIE9wdGlvbmFsPGJvb2w+JiYgaW5jbHVkZVBzZXVk
bywgT3B0aW9uYWw8Ym9vbD4mJiBpbmNsdWRlSW5oZXJpdGVkKTsKKyAgICBJbnNwZWN0b3I6OlBy
b3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkNTUzo6Q1NTU3R5bGVTaGVldEhlYWRlcj4+PiBnZXRBbGxTdHlsZVNoZWV0cygpOworICAg
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkNTUzo6Q1NTU3R5bGVTaGVldEJvZHk+PiBnZXRTdHlsZVNoZWV0KGNvbnN0IEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldElkJik7CisgICAgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6RXJyb3JTdHJpbmdPcjxTdHJpbmc+IGdldFN0eWxlU2hlZXRUZXh0KGNvbnN0IEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldElkJik7CisgICAgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzZXRTdHlsZVNoZWV0VGV4dChjb25zdCBJbnNwZWN0b3I6
OlByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRJZCYsIGNvbnN0IFN0cmluZyYgdGV4dCk7CisgICAg
SW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6Q1NTOjpDU1NTdHlsZT4+IHNldFN0eWxlVGV4dChSZWY8SlNPTjo6T2JqZWN0PiYmIHN0eWxl
SWQsIGNvbnN0IFN0cmluZyYgdGV4dCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JT
dHJpbmdPcjxSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NSdWxlPj4gc2V0UnVsZVNl
bGVjdG9yKFJlZjxKU09OOjpPYmplY3Q+JiYgcnVsZUlkLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9y
KTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkNTUzo6U3R5bGVTaGVldElkPiBjcmVhdGVTdHlsZVNoZWV0KGNvbnN0IEluc3BlY3Rv
cjo6UHJvdG9jb2w6Ok5ldHdvcms6OkZyYW1lSWQmKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29s
OjpFcnJvclN0cmluZ09yPFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1J1bGU+PiBh
ZGRSdWxlKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldElkJiwgY29u
c3QgU3RyaW5nJiBzZWxlY3Rvcik7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJp
bmdPcjxSZWY8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1Byb3Bl
cnR5SW5mbz4+PiBnZXRTdXBwb3J0ZWRDU1NQcm9wZXJ0aWVzKCk7CisgICAgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SlNPTjo6QXJyYXlPZjxTdHJpbmc+Pj4gZ2V0U3Vw
cG9ydGVkU3lzdGVtRm9udEZhbWlseU5hbWVzKCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6
RXJyb3JTdHJpbmdPcjx2b2lkPiBmb3JjZVBzZXVkb1N0YXRlKEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRPTTo6Tm9kZUlkLCBSZWY8SlNPTjo6QXJyYXk+JiYgZm9yY2VkUHNldWRvQ2xhc3Nlcyk7CiAK
ICAgICAvLyBJbnNwZWN0b3JTdHlsZVNoZWV0OjpMaXN0ZW5lcgotICAgIHZvaWQgc3R5bGVTaGVl
dENoYW5nZWQoSW5zcGVjdG9yU3R5bGVTaGVldCopIG92ZXJyaWRlOworICAgIHZvaWQgc3R5bGVT
aGVldENoYW5nZWQoSW5zcGVjdG9yU3R5bGVTaGVldCopOwogCiAgICAgLy8gSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uCiAgICAgdm9pZCBkb2N1bWVudERldGFjaGVkKERvY3VtZW50Jik7CkBAIC0x
MTQsNyArMTE0LDcgQEAgcHVibGljOgogICAgIGJvb2wgZm9yY2VQc2V1ZG9TdGF0ZShjb25zdCBF
bGVtZW50JiwgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzVHlwZSk7CiAKICAgICAvLyBJbnNwZWN0
b3JET01BZ2VudCBob29rcwotICAgIHZvaWQgZGlkUmVtb3ZlRE9NTm9kZShOb2RlJiwgaW50IG5v
ZGVJZCk7CisgICAgdm9pZCBkaWRSZW1vdmVET01Ob2RlKE5vZGUmLCBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpET006Ok5vZGVJZCk7CiAgICAgdm9pZCBkaWRNb2RpZnlET01BdHRyKEVsZW1lbnQmKTsK
IAogICAgIHZvaWQgcmVzZXQoKTsKQEAgLTEyNiwyOCArMTI2LDI4IEBAIHByaXZhdGU6CiAgICAg
Y2xhc3MgU2V0UnVsZVNlbGVjdG9yQWN0aW9uOwogICAgIGNsYXNzIEFkZFJ1bGVBY3Rpb247CiAK
LSAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8SW5zcGVjdG9yU3R5bGVTaGVldD4+
IElkVG9JbnNwZWN0b3JTdHlsZVNoZWV0OworICAgIHR5cGVkZWYgSGFzaE1hcDxJbnNwZWN0b3I6
OlByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRJZCwgUmVmUHRyPEluc3BlY3RvclN0eWxlU2hlZXQ+
PiBJZFRvSW5zcGVjdG9yU3R5bGVTaGVldDsKICAgICB0eXBlZGVmIEhhc2hNYXA8Q1NTU3R5bGVT
aGVldCosIFJlZlB0cjxJbnNwZWN0b3JTdHlsZVNoZWV0Pj4gQ1NTU3R5bGVTaGVldFRvSW5zcGVj
dG9yU3R5bGVTaGVldDsKICAgICB0eXBlZGVmIEhhc2hNYXA8UmVmUHRyPERvY3VtZW50PiwgVmVj
dG9yPFJlZlB0cjxJbnNwZWN0b3JTdHlsZVNoZWV0Pj4+IERvY3VtZW50VG9WaWFJbnNwZWN0b3JT
dHlsZVNoZWV0OyAvLyAidmlhIGluc3BlY3RvciIgc3R5bGVzaGVldHMKLSAgICB0eXBlZGVmIEhh
c2hNYXA8aW50LCB1bnNpZ25lZD4gTm9kZUlkVG9Gb3JjZWRQc2V1ZG9TdGF0ZTsKKyAgICB0eXBl
ZGVmIEhhc2hNYXA8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQsIHVuc2lnbmVkPiBO
b2RlSWRUb0ZvcmNlZFBzZXVkb1N0YXRlOwogCiAgICAgSW5zcGVjdG9yU3R5bGVTaGVldEZvcklu
bGluZVN0eWxlJiBhc0luc3BlY3RvclN0eWxlU2hlZXQoU3R5bGVkRWxlbWVudCYpOwotICAgIEVs
ZW1lbnQqIGVsZW1lbnRGb3JJZChFcnJvclN0cmluZyYsIGludCBub2RlSWQpOworICAgIEVsZW1l
bnQqIGVsZW1lbnRGb3JJZChJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZyYsIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkKTsKIAogICAgIHZvaWQgY29sbGVjdEFsbFN0eWxl
U2hlZXRzKFZlY3RvcjxJbnNwZWN0b3JTdHlsZVNoZWV0Kj4mKTsKICAgICB2b2lkIGNvbGxlY3RB
bGxEb2N1bWVudFN0eWxlU2hlZXRzKERvY3VtZW50JiwgVmVjdG9yPENTU1N0eWxlU2hlZXQqPiYp
OwogICAgIHZvaWQgY29sbGVjdFN0eWxlU2hlZXRzKENTU1N0eWxlU2hlZXQqLCBWZWN0b3I8Q1NT
U3R5bGVTaGVldCo+Jik7CiAgICAgdm9pZCBzZXRBY3RpdmVTdHlsZVNoZWV0c0ZvckRvY3VtZW50
KERvY3VtZW50JiwgVmVjdG9yPENTU1N0eWxlU2hlZXQqPiYgYWN0aXZlU3R5bGVTaGVldHMpOwog
Ci0gICAgU3RyaW5nIHVuYmluZFN0eWxlU2hlZXQoSW5zcGVjdG9yU3R5bGVTaGVldCopOworICAg
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldElkIHVuYmluZFN0eWxlU2hlZXQo
SW5zcGVjdG9yU3R5bGVTaGVldCopOwogICAgIEluc3BlY3RvclN0eWxlU2hlZXQqIGJpbmRTdHls
ZVNoZWV0KENTU1N0eWxlU2hlZXQqKTsKLSAgICBJbnNwZWN0b3JTdHlsZVNoZWV0KiBhc3NlcnRT
dHlsZVNoZWV0Rm9ySWQoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmKTsKKyAgICBJbnNwZWN0
b3JTdHlsZVNoZWV0KiBhc3NlcnRTdHlsZVNoZWV0Rm9ySWQoSW5zcGVjdG9yOjpQcm90b2NvbDo6
RXJyb3JTdHJpbmcmLCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRJ
ZCYpOwogICAgIEluc3BlY3RvclN0eWxlU2hlZXQqIGNyZWF0ZUluc3BlY3RvclN0eWxlU2hlZXRG
b3JEb2N1bWVudChEb2N1bWVudCYpOwogICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U3R5
bGVTaGVldE9yaWdpbiBkZXRlY3RPcmlnaW4oQ1NTU3R5bGVTaGVldCogcGFnZVN0eWxlU2hlZXQs
IERvY3VtZW50KiBvd25lckRvY3VtZW50KTsKIAogICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpDU1M6OkNTU1J1bGU+IGJ1aWxkT2JqZWN0Rm9yUnVsZShjb25zdCBTdHlsZVJ1bGUqLCBT
dHlsZTo6UmVzb2x2ZXImLCBFbGVtZW50Jik7CiAgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkNTUzo6Q1NTUnVsZT4gYnVpbGRPYmplY3RGb3JSdWxlKENTU1N0eWxlUnVsZSopOwotICAg
IFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6UnVsZU1hdGNo
Pj4gYnVpbGRBcnJheUZvck1hdGNoZWRSdWxlTGlzdChjb25zdCBWZWN0b3I8UmVmUHRyPGNvbnN0
IFN0eWxlUnVsZT4+JiwgU3R5bGU6OlJlc29sdmVyJiwgRWxlbWVudCYsIFBzZXVkb0lkKTsKKyAg
ICBSZWY8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlJ1bGVNYXRjaD4+
IGJ1aWxkQXJyYXlGb3JNYXRjaGVkUnVsZUxpc3QoY29uc3QgVmVjdG9yPFJlZlB0cjxjb25zdCBT
dHlsZVJ1bGU+PiYsIFN0eWxlOjpSZXNvbHZlciYsIEVsZW1lbnQmLCBQc2V1ZG9JZCk7CiAgICAg
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+IGJ1aWxkT2JqZWN0Rm9y
QXR0cmlidXRlc1N0eWxlKFN0eWxlZEVsZW1lbnQmKTsKIAogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNhbnZhc0FnZW50LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ2FudmFzQWdlbnQuY3BwCmluZGV4
IGQwOTE2ODI5NDAwZjk0NmYwODYwMDk1OGFhNDQzZTU3MDczZmU4YWEuLmE4NTAzOGY1YzA2Nzdl
N2Q5MjgxOTRkYjdkMDQwOWE5NDhiYzk2YjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ2FudmFzQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ2FudmFzQWdlbnQuY3BwCkBAIC0xMDIsOCAr
MTAyLDcgQEAgdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6ZGlkQ3JlYXRlRnJvbnRlbmRBbmRC
YWNrZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRSb3V0ZXIKIAogdm9pZCBJbnNwZWN0b3JDYW52YXNB
Z2VudDo6d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0
UmVhc29uKQogewotICAgIEVycm9yU3RyaW5nIGlnbm9yZWQ7Ci0gICAgZGlzYWJsZShpZ25vcmVk
KTsKKyAgICBkaXNhYmxlKCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmRpc2Nh
cmRBZ2VudCgpCkBAIC0xMTEsMTAgKzExMCwxMCBAQCB2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50
OjpkaXNjYXJkQWdlbnQoKQogICAgIHJlc2V0KCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ2FudmFz
QWdlbnQ6OmVuYWJsZShFcnJvclN0cmluZyYpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lk
PiBJbnNwZWN0b3JDYW52YXNBZ2VudDo6ZW5hYmxlKCkKIHsKICAgICBpZiAobV9pbnN0cnVtZW50
aW5nQWdlbnRzLmVuYWJsZWRDYW52YXNBZ2VudCgpID09IHRoaXMpCi0gICAgICAgIHJldHVybjsK
KyAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy5zZXRFbmFi
bGVkQ2FudmFzQWdlbnQodGhpcyk7CiAKQEAgLTE3MCw3MyArMTY5LDg0IEBAIHZvaWQgSW5zcGVj
dG9yQ2FudmFzQWdlbnQ6OmVuYWJsZShFcnJvclN0cmluZyYpCiAgICAgICAgIH0KICAgICB9CiAj
ZW5kaWYgLy8gRU5BQkxFKFdFQkdQVSkKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5z
cGVjdG9yQ2FudmFzQWdlbnQ6OmRpc2FibGUoRXJyb3JTdHJpbmcmKQorUHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmRpc2FibGUoKQogewogICAgIG1f
aW5zdHJ1bWVudGluZ0FnZW50cy5zZXRFbmFibGVkQ2FudmFzQWdlbnQobnVsbHB0cik7CiAKICAg
ICByZXNldCgpOwogCiAgICAgbV9yZWNvcmRpbmdBdXRvQ2FwdHVyZUZyYW1lQ291bnQgPSBXVEY6
Om51bGxvcHQ7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckNhbnZhc0Fn
ZW50OjpyZXF1ZXN0Tm9kZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYg
Y2FudmFzSWQsIGludCogbm9kZUlkKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UHJvdG9jb2w6
OkRPTTo6Tm9kZUlkPiBJbnNwZWN0b3JDYW52YXNBZ2VudDo6cmVxdWVzdE5vZGUoY29uc3QgUHJv
dG9jb2w6OkNhbnZhczo6Q2FudmFzSWQmIGNhbnZhc0lkKQogeworICAgIFByb3RvY29sOjpFcnJv
clN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIGF1dG8gaW5zcGVjdG9yQ2FudmFzID0gYXNzZXJ0
SW5zcGVjdG9yQ2FudmFzKGVycm9yU3RyaW5nLCBjYW52YXNJZCk7CiAgICAgaWYgKCFpbnNwZWN0
b3JDYW52YXMpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVk
KGVycm9yU3RyaW5nKTsKIAogICAgIGF1dG8qIG5vZGUgPSBpbnNwZWN0b3JDYW52YXMtPmNhbnZh
c0VsZW1lbnQoKTsKLSAgICBpZiAoIW5vZGUpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWlz
c2luZyBlbGVtZW50IG9mIGNhbnZhcyBmb3IgZ2l2ZW4gY2FudmFzSWQiX3M7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9CisgICAgaWYgKCFub2RlKQorICAgICAgICBtYWtlVW5leHBlY3RlZCgiTWlz
c2luZyBlbGVtZW50IG9mIGNhbnZhcyBmb3IgZ2l2ZW4gY2FudmFzSWQiX3MpOwogCiAgICAgLy8g
RklYTUU6IDxodHRwczovL3dlYmtpdC5vcmcvYi8yMTM0OTk+IFdlYiBJbnNwZWN0b3I6IGFsbG93
IERPTSBub2RlcyB0byBiZSBpbnN0cnVtZW50ZWQgYXQgYW55IHBvaW50LCByZWdhcmRsZXNzIG9m
IHdoZXRoZXIgdGhlIG1haW4gZG9jdW1lbnQgaGFzIGFsc28gYmVlbiBpbnN0cnVtZW50ZWQKICAg
ICBpbnQgZG9jdW1lbnROb2RlSWQgPSBtX2luc3RydW1lbnRpbmdBZ2VudHMucGVyc2lzdGVudERP
TUFnZW50KCktPmJvdW5kTm9kZUlkKCZub2RlLT5kb2N1bWVudCgpKTsKLSAgICBpZiAoIWRvY3Vt
ZW50Tm9kZUlkKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIkRvY3VtZW50IG11c3QgaGF2ZSBi
ZWVuIHJlcXVlc3RlZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoIWRvY3Vt
ZW50Tm9kZUlkKQorICAgICAgICBtYWtlVW5leHBlY3RlZCgiRG9jdW1lbnQgbXVzdCBoYXZlIGJl
ZW4gcmVxdWVzdGVkIl9zKTsKIAotICAgICpub2RlSWQgPSBtX2luc3RydW1lbnRpbmdBZ2VudHMu
cGVyc2lzdGVudERPTUFnZW50KCktPnB1c2hOb2RlVG9Gcm9udGVuZChlcnJvclN0cmluZywgZG9j
dW1lbnROb2RlSWQsIG5vZGUpOworICAgIHJldHVybiBtX2luc3RydW1lbnRpbmdBZ2VudHMucGVy
c2lzdGVudERPTUFnZW50KCktPnB1c2hOb2RlVG9Gcm9udGVuZChlcnJvclN0cmluZywgZG9jdW1l
bnROb2RlSWQsIG5vZGUpOwogfQogCi12b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjpyZXF1ZXN0
Q29udGVudChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgY2FudmFzSWQs
IFN0cmluZyogY29udGVudCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPFN0cmluZz4gSW5zcGVj
dG9yQ2FudmFzQWdlbnQ6OnJlcXVlc3RDb250ZW50KGNvbnN0IFByb3RvY29sOjpDYW52YXM6OkNh
bnZhc0lkJiBjYW52YXNJZCkKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJp
bmc7CisKICAgICBhdXRvIGluc3BlY3RvckNhbnZhcyA9IGFzc2VydEluc3BlY3RvckNhbnZhcyhl
cnJvclN0cmluZywgY2FudmFzSWQpOwogICAgIGlmICghaW5zcGVjdG9yQ2FudmFzKQotICAgICAg
ICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAK
LSAgICAqY29udGVudCA9IGluc3BlY3RvckNhbnZhcy0+Z2V0Q2FudmFzQ29udGVudEFzRGF0YVVS
TChlcnJvclN0cmluZyk7CisgICAgYXV0byByZXN1bHQgPSBpbnNwZWN0b3JDYW52YXMtPmdldENh
bnZhc0NvbnRlbnRBc0RhdGFVUkwoZXJyb3JTdHJpbmcpOworICAgIGlmICghcmVzdWx0KQorICAg
ICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOworCisgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIAotdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6cmVxdWVzdENsaWVudE5vZGVz
KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBjYW52YXNJZCwgUmVmUHRy
PEpTT046OkFycmF5T2Y8aW50Pj4mIGNsaWVudE5vZGVJZHMpCitQcm90b2NvbDo6RXJyb3JTdHJp
bmdPcjxSZWY8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6RE9NOjpOb2RlSWQ+Pj4gSW5zcGVjdG9y
Q2FudmFzQWdlbnQ6OnJlcXVlc3RDbGllbnROb2Rlcyhjb25zdCBQcm90b2NvbDo6Q2FudmFzOjpD
YW52YXNJZCYgY2FudmFzSWQpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3Ry
aW5nOworCiAgICAgYXV0byogZG9tQWdlbnQgPSBtX2luc3RydW1lbnRpbmdBZ2VudHMucGVyc2lz
dGVudERPTUFnZW50KCk7Ci0gICAgaWYgKCFkb21BZ2VudCkgewotICAgICAgICBlcnJvclN0cmlu
ZyA9ICJET00gZG9tYWluIG11c3QgYmUgZW5hYmxlZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KKyAgICBpZiAoIWRvbUFnZW50KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkRP
TSBkb21haW4gbXVzdCBiZSBlbmFibGVkIl9zKTsKIAogICAgIGF1dG8gaW5zcGVjdG9yQ2FudmFz
ID0gYXNzZXJ0SW5zcGVjdG9yQ2FudmFzKGVycm9yU3RyaW5nLCBjYW52YXNJZCk7CiAgICAgaWYg
KCFpbnNwZWN0b3JDYW52YXMpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAotICAgIGNsaWVudE5vZGVJZHMgPSBKU09OOjpBcnJh
eU9mPGludD46OmNyZWF0ZSgpOworICAgIGF1dG8gY2xpZW50Tm9kZUlkcyA9IEpTT046OkFycmF5
T2Y8UHJvdG9jb2w6OkRPTTo6Tm9kZUlkPjo6Y3JlYXRlKCk7CiAgICAgZm9yIChhdXRvJiBjbGll
bnROb2RlIDogaW5zcGVjdG9yQ2FudmFzLT5jbGllbnROb2RlcygpKSB7CiAgICAgICAgIC8vIEZJ
WE1FOiA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMjEzNDk5PiBXZWIgSW5zcGVjdG9yOiBhbGxvdyBE
T00gbm9kZXMgdG8gYmUgaW5zdHJ1bWVudGVkIGF0IGFueSBwb2ludCwgcmVnYXJkbGVzcyBvZiB3
aGV0aGVyIHRoZSBtYWluIGRvY3VtZW50IGhhcyBhbHNvIGJlZW4gaW5zdHJ1bWVudGVkCiAgICAg
ICAgIGlmIChhdXRvIGRvY3VtZW50Tm9kZUlkID0gZG9tQWdlbnQtPmJvdW5kTm9kZUlkKCZjbGll
bnROb2RlLT5kb2N1bWVudCgpKSkKICAgICAgICAgICAgIGNsaWVudE5vZGVJZHMtPmFkZEl0ZW0o
ZG9tQWdlbnQtPnB1c2hOb2RlVG9Gcm9udGVuZChlcnJvclN0cmluZywgZG9jdW1lbnROb2RlSWQs
IGNsaWVudE5vZGUpKTsKICAgICB9CisgICAgcmV0dXJuIFdURk1vdmUoY2xpZW50Tm9kZUlkcyk7
CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnJlc29sdmVDb250ZXh0KEVycm9yU3Ry
aW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBjYW52YXNJZCwgY29uc3QgU3RyaW5nKiBv
YmplY3RHcm91cCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9i
amVjdD4mIHJlc3VsdCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxQcm90b2NvbDo6UnVu
dGltZTo6UmVtb3RlT2JqZWN0Pj4gSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnJlc29sdmVDb250ZXh0
KGNvbnN0IFByb3RvY29sOjpDYW52YXM6OkNhbnZhc0lkJiBjYW52YXNJZCwgY29uc3QgU3RyaW5n
JiBvYmplY3RHcm91cCkKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7
CisKICAgICBhdXRvIGluc3BlY3RvckNhbnZhcyA9IGFzc2VydEluc3BlY3RvckNhbnZhcyhlcnJv
clN0cmluZywgY2FudmFzSWQpOwogICAgIGlmICghaW5zcGVjdG9yQ2FudmFzKQotICAgICAgICBy
ZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAg
ICBhdXRvKiBzdGF0ZSA9IGluc3BlY3RvckNhbnZhcy0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
LT5leGVjU3RhdGUoKTsKICAgICBhdXRvIGluamVjdGVkU2NyaXB0ID0gbV9pbmplY3RlZFNjcmlw
dE1hbmFnZXIuaW5qZWN0ZWRTY3JpcHRGb3Ioc3RhdGUpOwpAQCAtMjQ2LDEyMiArMjU2LDEyOSBA
QCB2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjpyZXNvbHZlQ29udGV4dChFcnJvclN0cmluZyYg
ZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZwogCiAgICAgaWYgKCF2YWx1ZSkgewogICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiSW50ZXJuYWwgZXJy
b3I6IHVua25vd24gY29udGV4dCBvZiBjYW52YXMgZm9yIGdpdmVuIGNhbnZhc0lkIl9zOwotICAg
ICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiSW50ZXJuYWwgZXJy
b3I6IHVua25vd24gY29udGV4dCBvZiBjYW52YXMgZm9yIGdpdmVuIGNhbnZhc0lkIl9zKTsKICAg
ICB9CiAKLSAgICBTdHJpbmcgb2JqZWN0R3JvdXBOYW1lID0gb2JqZWN0R3JvdXAgPyAqb2JqZWN0
R3JvdXAgOiBTdHJpbmcoKTsKLSAgICByZXN1bHQgPSBpbmplY3RlZFNjcmlwdC53cmFwT2JqZWN0
KHZhbHVlLCBvYmplY3RHcm91cE5hbWUpOworICAgIGF1dG8gcmVzdWx0ID0gaW5qZWN0ZWRTY3Jp
cHQud3JhcE9iamVjdCh2YWx1ZSwgb2JqZWN0R3JvdXApOworICAgIGlmICghcmVzdWx0KQorICAg
ICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkludGVybmFsIGVycm9yOiB1bmFibGUgdG8gY2Fz
dCBDb250ZXh0Iik7CisKKyAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7CiB9CiAK
LXZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnNldFJlY29yZGluZ0F1dG9DYXB0dXJlRnJhbWVD
b3VudChFcnJvclN0cmluZyYsIGludCBjb3VudCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZv
aWQ+IEluc3BlY3RvckNhbnZhc0FnZW50OjpzZXRSZWNvcmRpbmdBdXRvQ2FwdHVyZUZyYW1lQ291
bnQoaW50IGNvdW50KQogewogICAgIGlmIChjb3VudCA+IDApCiAgICAgICAgIG1fcmVjb3JkaW5n
QXV0b0NhcHR1cmVGcmFtZUNvdW50ID0gY291bnQ7CiAgICAgZWxzZQogICAgICAgICBtX3JlY29y
ZGluZ0F1dG9DYXB0dXJlRnJhbWVDb3VudCA9IFdURjo6bnVsbG9wdDsKKyAgICByZXR1cm4geyB9
OwogfQogCi12b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjpzdGFydFJlY29yZGluZyhFcnJvclN0
cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgY2FudmFzSWQsIGNvbnN0IGludCogZnJh
bWVDb3VudCwgY29uc3QgaW50KiBtZW1vcnlMaW1pdCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09y
PHZvaWQ+IEluc3BlY3RvckNhbnZhc0FnZW50OjpzdGFydFJlY29yZGluZyhjb25zdCBQcm90b2Nv
bDo6Q2FudmFzOjpDYW52YXNJZCYgY2FudmFzSWQsIE9wdGlvbmFsPGludD4mJiBmcmFtZUNvdW50
LCBPcHRpb25hbDxpbnQ+JiYgbWVtb3J5TGltaXQpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3Ry
aW5nIGVycm9yU3RyaW5nOworCiAgICAgYXV0byBpbnNwZWN0b3JDYW52YXMgPSBhc3NlcnRJbnNw
ZWN0b3JDYW52YXMoZXJyb3JTdHJpbmcsIGNhbnZhc0lkKTsKICAgICBpZiAoIWluc3BlY3RvckNh
bnZhcykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gRklYTUU6IDxodHRwczovL3dlYmtpdC5v
cmcvYi8yMDE2NTE+IFdlYiBJbnNwZWN0b3I6IENhbnZhczogc3VwcG9ydCBjYW52YXMgcmVjb3Jk
aW5ncyBmb3IgV2ViR1BVRGV2aWNlCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJv
clN0cmluZyk7CiAKICAgICBhdXRvKiBjb250ZXh0ID0gaW5zcGVjdG9yQ2FudmFzLT5jYW52YXND
b250ZXh0KCk7Ci0gICAgaWYgKCFjb250ZXh0KQotICAgICAgICByZXR1cm47CiAKLSAgICBpZiAo
Y29udGV4dC0+Y2FsbFRyYWNpbmdBY3RpdmUoKSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJB
bHJlYWR5IHJlY29yZGluZyBjYW52YXMiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAg
Ly8gRklYTUU6IDxodHRwczovL3dlYmtpdC5vcmcvYi8yMDE2NTE+IFdlYiBJbnNwZWN0b3I6IENh
bnZhczogc3VwcG9ydCBjYW52YXMgcmVjb3JkaW5ncyBmb3IgV2ViR1BVRGV2aWNlCisgICAgaWYg
KCFjb250ZXh0KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk5vdCBzdXBwb3J0ZWQi
X3MpOworCisgICAgaWYgKGNvbnRleHQtPmNhbGxUcmFjaW5nQWN0aXZlKCkpCisgICAgICAgIHJl
dHVybiBtYWtlVW5leHBlY3RlZCgiQWxyZWFkeSByZWNvcmRpbmcgY2FudmFzIl9zKTsKIAogICAg
IFJlY29yZGluZ09wdGlvbnMgcmVjb3JkaW5nT3B0aW9uczsKICAgICBpZiAoZnJhbWVDb3VudCkK
ICAgICAgICAgcmVjb3JkaW5nT3B0aW9ucy5mcmFtZUNvdW50ID0gKmZyYW1lQ291bnQ7CiAgICAg
aWYgKG1lbW9yeUxpbWl0KQogICAgICAgICByZWNvcmRpbmdPcHRpb25zLm1lbW9yeUxpbWl0ID0g
Km1lbW9yeUxpbWl0OwotICAgIHN0YXJ0UmVjb3JkaW5nKCppbnNwZWN0b3JDYW52YXMsIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlJlY29yZGluZzo6SW5pdGlhdG9yOjpGcm9udGVuZCwgV1RGTW92ZShy
ZWNvcmRpbmdPcHRpb25zKSk7CisgICAgc3RhcnRSZWNvcmRpbmcoKmluc3BlY3RvckNhbnZhcywg
UHJvdG9jb2w6OlJlY29yZGluZzo6SW5pdGlhdG9yOjpGcm9udGVuZCwgV1RGTW92ZShyZWNvcmRp
bmdPcHRpb25zKSk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckNhbnZh
c0FnZW50OjpzdG9wUmVjb3JkaW5nKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3Ry
aW5nJiBjYW52YXNJZCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckNh
bnZhc0FnZW50OjpzdG9wUmVjb3JkaW5nKGNvbnN0IFByb3RvY29sOjpDYW52YXM6OkNhbnZhc0lk
JiBjYW52YXNJZCkKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisK
ICAgICBhdXRvIGluc3BlY3RvckNhbnZhcyA9IGFzc2VydEluc3BlY3RvckNhbnZhcyhlcnJvclN0
cmluZywgY2FudmFzSWQpOwogICAgIGlmICghaW5zcGVjdG9yQ2FudmFzKQotICAgICAgICByZXR1
cm47Ci0KLSAgICAvLyBGSVhNRTogPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzIwMTY1MT4gV2ViIElu
c3BlY3RvcjogQ2FudmFzOiBzdXBwb3J0IGNhbnZhcyByZWNvcmRpbmdzIGZvciBXZWJHUFVEZXZp
Y2UKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgIGF1
dG8qIGNvbnRleHQgPSBpbnNwZWN0b3JDYW52YXMtPmNhbnZhc0NvbnRleHQoKTsKLSAgICBpZiAo
IWNvbnRleHQpCi0gICAgICAgIHJldHVybjsKIAotICAgIGlmICghY29udGV4dC0+Y2FsbFRyYWNp
bmdBY3RpdmUoKSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJOb3QgcmVjb3JkaW5nIGNhbnZh
cyJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICAvLyBGSVhNRTogPGh0dHBzOi8vd2Vi
a2l0Lm9yZy9iLzIwMTY1MT4gV2ViIEluc3BlY3RvcjogQ2FudmFzOiBzdXBwb3J0IGNhbnZhcyBy
ZWNvcmRpbmdzIGZvciBXZWJHUFVEZXZpY2UKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJl
dHVybiBtYWtlVW5leHBlY3RlZCgiTm90IHN1cHBvcnRlZCJfcyk7CisKKyAgICBpZiAoIWNvbnRl
eHQtPmNhbGxUcmFjaW5nQWN0aXZlKCkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgi
Tm90IHJlY29yZGluZyBjYW52YXMiX3MpOwogCiAgICAgZGlkRmluaXNoUmVjb3JkaW5nQ2FudmFz
RnJhbWUoKmNvbnRleHQsIHRydWUpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAogI2lmIEVOQUJM
RShXRUJHTCkgfHwgRU5BQkxFKFdFQkdQVSkKLXZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnJl
cXVlc3RTaGFkZXJTb3VyY2UoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcm
IHByb2dyYW1JZCwgY29uc3QgU3RyaW5nJiBzaGFkZXJUeXBlU3RyaW5nLCBTdHJpbmcqIG91dFNv
dXJjZSkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPFN0cmluZz4gSW5zcGVjdG9yQ2FudmFzQWdl
bnQ6OnJlcXVlc3RTaGFkZXJTb3VyY2UoY29uc3QgUHJvdG9jb2w6OkNhbnZhczo6UHJvZ3JhbUlk
JiBwcm9ncmFtSWQsIFByb3RvY29sOjpDYW52YXM6OlNoYWRlclR5cGUgc2hhZGVyVHlwZSkKIHsK
KyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBhdXRvIGluc3Bl
Y3RvclByb2dyYW0gPSBhc3NlcnRJbnNwZWN0b3JQcm9ncmFtKGVycm9yU3RyaW5nLCBwcm9ncmFt
SWQpOwogICAgIGlmICghaW5zcGVjdG9yUHJvZ3JhbSkKLSAgICAgICAgcmV0dXJuOworICAgICAg
ICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCi0gICAgYXV0byBzaGFkZXJU
eXBlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6SW5zcGVjdG9ySGVscGVyczo6cGFyc2VFbnVtVmFs
dWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6U2hhZGVyVHlwZT4oc2hh
ZGVyVHlwZVN0cmluZyk7Ci0gICAgaWYgKCFzaGFkZXJUeXBlKSB7Ci0gICAgICAgIGVycm9yU3Ry
aW5nID0gbWFrZVN0cmluZygiVW5rbm93biBzaGFkZXJUeXBlOiAiX3MsIHNoYWRlclR5cGVTdHJp
bmcpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGF1dG8gc291cmNlID0gaW5zcGVjdG9y
UHJvZ3JhbS0+cmVxdWVzdFNoYWRlclNvdXJjZShzaGFkZXJUeXBlKTsKKyAgICBpZiAoIXNvdXJj
ZSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJNaXNzaW5nIHNoYWRlciBvZiBnaXZl
biBzaGFkZXJUeXBlIGZvciBnaXZlbiBwcm9ncmFtSWQiX3MpOwogCi0gICAgYXV0byBzb3VyY2Ug
PSBpbnNwZWN0b3JQcm9ncmFtLT5yZXF1ZXN0U2hhZGVyU291cmNlKHNoYWRlclR5cGUudmFsdWUo
KSk7Ci0gICAgaWYgKCFzb3VyY2UpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWlzc2luZyBz
aGFkZXIgb2YgZ2l2ZW4gc2hhZGVyVHlwZSBmb3IgZ2l2ZW4gcHJvZ3JhbUlkIl9zOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgKm91dFNvdXJjZSA9IHNvdXJjZTsKKyAgICByZXR1cm4g
c291cmNlOwogfQogCi12b2lkIEluc3BlY3RvckNhbnZhc0FnZW50Ojp1cGRhdGVTaGFkZXIoRXJy
b3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHByb2dyYW1JZCwgY29uc3QgU3Ry
aW5nJiBzaGFkZXJUeXBlU3RyaW5nLCBjb25zdCBTdHJpbmcmIHNvdXJjZSkKK1Byb3RvY29sOjpF
cnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckNhbnZhc0FnZW50Ojp1cGRhdGVTaGFkZXIoY29u
c3QgUHJvdG9jb2w6OkNhbnZhczo6UHJvZ3JhbUlkJiBwcm9ncmFtSWQsIFByb3RvY29sOjpDYW52
YXM6OlNoYWRlclR5cGUgc2hhZGVyVHlwZSwgY29uc3QgU3RyaW5nJiBzb3VyY2UpCiB7CisgICAg
UHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAgICAgYXV0byBpbnNwZWN0b3JQ
cm9ncmFtID0gYXNzZXJ0SW5zcGVjdG9yUHJvZ3JhbShlcnJvclN0cmluZywgcHJvZ3JhbUlkKTsK
ICAgICBpZiAoIWluc3BlY3RvclByb2dyYW0pCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0
dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAotICAgIGF1dG8gc2hhZGVyVHlwZSA9
IEluc3BlY3Rvcjo6UHJvdG9jb2w6Okluc3BlY3RvckhlbHBlcnM6OnBhcnNlRW51bVZhbHVlRnJv
bVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpDYW52YXM6OlNoYWRlclR5cGU+KHNoYWRlclR5
cGVTdHJpbmcpOwotICAgIGlmICghc2hhZGVyVHlwZSkgewotICAgICAgICBlcnJvclN0cmluZyA9
IG1ha2VTdHJpbmcoIlVua25vd24gc2hhZGVyVHlwZTogIl9zLCBzaGFkZXJUeXBlU3RyaW5nKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoIWluc3BlY3RvclByb2dyYW0tPnVwZGF0
ZVNoYWRlcihzaGFkZXJUeXBlLCBzb3VyY2UpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0
ZWQoIkZhaWxlZCB0byB1cGRhdGUgc2hhZGVyIG9mIGdpdmVuIHNoYWRlclR5cGUgZm9yIGdpdmVu
IHByb2dyYW1JZCJfcyk7CiAKLSAgICBpZiAoIWluc3BlY3RvclByb2dyYW0tPnVwZGF0ZVNoYWRl
cihzaGFkZXJUeXBlLnZhbHVlKCksIHNvdXJjZSkpCi0gICAgICAgIGVycm9yU3RyaW5nID0gIkZh
aWxlZCB0byB1cGRhdGUgc2hhZGVyIG9mIGdpdmVuIHNoYWRlclR5cGUgZm9yIGdpdmVuIHByb2dy
YW1JZCJfczsKKyAgICByZXR1cm4geyB9OwogfQogCiAjaWYgRU5BQkxFKFdFQkdMKQotdm9pZCBJ
bnNwZWN0b3JDYW52YXNBZ2VudDo6c2V0U2hhZGVyUHJvZ3JhbURpc2FibGVkKEVycm9yU3RyaW5n
JiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBwcm9ncmFtSWQsIGJvb2wgZGlzYWJsZWQpCitQ
cm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JDYW52YXNBZ2VudDo6c2V0U2hh
ZGVyUHJvZ3JhbURpc2FibGVkKGNvbnN0IFByb3RvY29sOjpDYW52YXM6OlByb2dyYW1JZCYgcHJv
Z3JhbUlkLCBib29sIGRpc2FibGVkKQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJv
clN0cmluZzsKKwogICAgIGF1dG8gaW5zcGVjdG9yUHJvZ3JhbSA9IGFzc2VydEluc3BlY3RvclBy
b2dyYW0oZXJyb3JTdHJpbmcsIHByb2dyYW1JZCk7CiAgICAgaWYgKCFpbnNwZWN0b3JQcm9ncmFt
KQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0
cmluZyk7CiAKICAgICBpbnNwZWN0b3JQcm9ncmFtLT5zZXREaXNhYmxlZChkaXNhYmxlZCk7CisK
KyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjpzZXRTaGFk
ZXJQcm9ncmFtSGlnaGxpZ2h0ZWQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJp
bmcmIHByb2dyYW1JZCwgYm9vbCBoaWdobGlnaHRlZCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09y
PHZvaWQ+IEluc3BlY3RvckNhbnZhc0FnZW50OjpzZXRTaGFkZXJQcm9ncmFtSGlnaGxpZ2h0ZWQo
Y29uc3QgUHJvdG9jb2w6OkNhbnZhczo6UHJvZ3JhbUlkJiBwcm9ncmFtSWQsIGJvb2wgaGlnaGxp
Z2h0ZWQpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAgICAg
YXV0byBpbnNwZWN0b3JQcm9ncmFtID0gYXNzZXJ0SW5zcGVjdG9yUHJvZ3JhbShlcnJvclN0cmlu
ZywgcHJvZ3JhbUlkKTsKICAgICBpZiAoIWluc3BlY3RvclByb2dyYW0pCi0gICAgICAgIHJldHVy
bjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgIGlu
c3BlY3RvclByb2dyYW0tPnNldEhpZ2hsaWdodGVkKGhpZ2hsaWdodGVkKTsKKworICAgIHJldHVy
biB7IH07CiB9CiAjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKQogI2VuZGlmIC8vIEVOQUJMRShXRUJH
TCkgfHwgRU5BQkxFKFdFQkdQVSkKQEAgLTQxMyw3ICs0MzAsNyBAQCB2b2lkIEluc3BlY3RvckNh
bnZhc0FnZW50OjpkaWRDcmVhdGVDYW52YXNSZW5kZXJpbmdDb250ZXh0KENhbnZhc1JlbmRlcmlu
Z0NvbnRleAogICAgIGlmIChtX3JlY29yZGluZ0F1dG9DYXB0dXJlRnJhbWVDb3VudCkgewogICAg
ICAgICBSZWNvcmRpbmdPcHRpb25zIHJlY29yZGluZ09wdGlvbnM7CiAgICAgICAgIHJlY29yZGlu
Z09wdGlvbnMuZnJhbWVDb3VudCA9IG1fcmVjb3JkaW5nQXV0b0NhcHR1cmVGcmFtZUNvdW50LnZh
bHVlKCk7Ci0gICAgICAgIHN0YXJ0UmVjb3JkaW5nKGluc3BlY3RvckNhbnZhcywgSW5zcGVjdG9y
OjpQcm90b2NvbDo6UmVjb3JkaW5nOjpJbml0aWF0b3I6OkF1dG9DYXB0dXJlLCBXVEZNb3ZlKHJl
Y29yZGluZ09wdGlvbnMpKTsKKyAgICAgICAgc3RhcnRSZWNvcmRpbmcoaW5zcGVjdG9yQ2FudmFz
LCBQcm90b2NvbDo6UmVjb3JkaW5nOjpJbml0aWF0b3I6OkF1dG9DYXB0dXJlLCBXVEZNb3ZlKHJl
Y29yZGluZ09wdGlvbnMpKTsKICAgICB9CiB9CiAKQEAgLTU3Myw3ICs1OTAsNyBAQCB2b2lkIElu
c3BlY3RvckNhbnZhc0FnZW50Ojpjb25zb2xlU3RhcnRSZWNvcmRpbmdDYW52YXMoQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dCYgYwogICAgICAgICBpZiAoSlNDOjpKU1ZhbHVlIG9wdGlvbk5hbWUgPSBv
cHRpb25zLT5nZXQoJmV4ZWMsIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIm5hbWUi
KSkpCiAgICAgICAgICAgICByZWNvcmRpbmdPcHRpb25zLm5hbWUgPSBvcHRpb25OYW1lLnRvV1RG
U3RyaW5nKCZleGVjKTsKICAgICB9Ci0gICAgc3RhcnRSZWNvcmRpbmcoKmluc3BlY3RvckNhbnZh
cywgSW5zcGVjdG9yOjpQcm90b2NvbDo6UmVjb3JkaW5nOjpJbml0aWF0b3I6OkNvbnNvbGUsIFdU
Rk1vdmUocmVjb3JkaW5nT3B0aW9ucykpOworICAgIHN0YXJ0UmVjb3JkaW5nKCppbnNwZWN0b3JD
YW52YXMsIFByb3RvY29sOjpSZWNvcmRpbmc6OkluaXRpYXRvcjo6Q29uc29sZSwgV1RGTW92ZShy
ZWNvcmRpbmdPcHRpb25zKSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmNvbnNv
bGVTdG9wUmVjb3JkaW5nQ2FudmFzKENhbnZhc1JlbmRlcmluZ0NvbnRleHQmIGNvbnRleHQpCkBA
IC02OTgsNyArNzE1LDcgQEAgdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6d2lsbERlc3Ryb3lX
ZWJHUFVQaXBlbGluZShXZWJHUFVQaXBlbGluZSYgcGlwZWxpbmUpCiB9CiAjZW5kaWYgLy8gRU5B
QkxFKFdFQkdQVSkKIAotdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6c3RhcnRSZWNvcmRpbmco
SW5zcGVjdG9yQ2FudmFzJiBpbnNwZWN0b3JDYW52YXMsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJl
Y29yZGluZzo6SW5pdGlhdG9yIGluaXRpYXRvciwgUmVjb3JkaW5nT3B0aW9ucyYmIHJlY29yZGlu
Z09wdGlvbnMpCit2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjpzdGFydFJlY29yZGluZyhJbnNw
ZWN0b3JDYW52YXMmIGluc3BlY3RvckNhbnZhcywgUHJvdG9jb2w6OlJlY29yZGluZzo6SW5pdGlh
dG9yIGluaXRpYXRvciwgUmVjb3JkaW5nT3B0aW9ucyYmIHJlY29yZGluZ09wdGlvbnMpCiB7CiAg
ICAgYXV0byogY29udGV4dCA9IGluc3BlY3RvckNhbnZhcy5jYW52YXNDb250ZXh0KCk7CiAgICAg
QVNTRVJUKGNvbnRleHQpOwpAQCAtODQwLDcgKzg1Nyw3IEBAIHZvaWQgSW5zcGVjdG9yQ2FudmFz
QWdlbnQ6OnVuYmluZENhbnZhcyhJbnNwZWN0b3JDYW52YXMmIGluc3BlY3RvckNhbnZhcykKICAg
ICAgICAgbV9jYW52YXNEZXN0cm95ZWRUaW1lci5zdGFydE9uZVNob3QoMF9zKTsKIH0KIAotUmVm
UHRyPEluc3BlY3RvckNhbnZhcz4gSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmFzc2VydEluc3BlY3Rv
ckNhbnZhcyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgY2FudmFzSWQp
CitSZWZQdHI8SW5zcGVjdG9yQ2FudmFzPiBJbnNwZWN0b3JDYW52YXNBZ2VudDo6YXNzZXJ0SW5z
cGVjdG9yQ2FudmFzKFByb3RvY29sOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0
cmluZyYgY2FudmFzSWQpCiB7CiAgICAgYXV0byBpbnNwZWN0b3JDYW52YXMgPSBtX2lkZW50aWZp
ZXJUb0luc3BlY3RvckNhbnZhcy5nZXQoY2FudmFzSWQpOwogICAgIGlmICghaW5zcGVjdG9yQ2Fu
dmFzKSB7CkBAIC04ODUsNyArOTAyLDcgQEAgdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6dW5i
aW5kUHJvZ3JhbShJbnNwZWN0b3JTaGFkZXJQcm9ncmFtJiBpbnNwZWN0b3JQcm9ncmEKICAgICAg
ICAgbV9wcm9ncmFtRGVzdHJveWVkVGltZXIuc3RhcnRPbmVTaG90KDBfcyk7CiB9CiAKLVJlZlB0
cjxJbnNwZWN0b3JTaGFkZXJQcm9ncmFtPiBJbnNwZWN0b3JDYW52YXNBZ2VudDo6YXNzZXJ0SW5z
cGVjdG9yUHJvZ3JhbShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgcHJv
Z3JhbUlkKQorUmVmUHRyPEluc3BlY3RvclNoYWRlclByb2dyYW0+IEluc3BlY3RvckNhbnZhc0Fn
ZW50Ojphc3NlcnRJbnNwZWN0b3JQcm9ncmFtKFByb3RvY29sOjpFcnJvclN0cmluZyYgZXJyb3JT
dHJpbmcsIGNvbnN0IFN0cmluZyYgcHJvZ3JhbUlkKQogewogICAgIGF1dG8gaW5zcGVjdG9yUHJv
Z3JhbSA9IG1faWRlbnRpZmllclRvSW5zcGVjdG9yUHJvZ3JhbS5nZXQocHJvZ3JhbUlkKTsKICAg
ICBpZiAoIWluc3BlY3RvclByb2dyYW0pIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ2FudmFzQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ2FudmFzQWdlbnQuaAppbmRleCAwZWYxYWVmYjY0N2Vh
ZDk5YjdkMGViMjQzZmQwYjQwOGNlNDViNjBmLi44NmJkYjUxMjU2OWEzMTFmN2EyNTA4OTVlOGZm
YmM5ZGQ5ZWJjZGMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRz
L0luc3BlY3RvckNhbnZhc0FnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Fn
ZW50cy9JbnNwZWN0b3JDYW52YXNBZ2VudC5oCkBAIC01Nyw0MyArNTcsNDEgQEAgY2xhc3MgV2Vi
R1BVU3dhcENoYWluOwogI2VuZGlmIC8vIEVOQUJMRShXRUJHUFUpCiAjZW5kaWYgLy8gRU5BQkxF
KFdFQkdMKSB8fCBFTkFCTEUoV0VCR1BVKQogCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsK
LQogY2xhc3MgSW5zcGVjdG9yQ2FudmFzQWdlbnQgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yQWdl
bnRCYXNlLCBwdWJsaWMgSW5zcGVjdG9yOjpDYW52YXNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIs
IHB1YmxpYyBDYW52YXNPYnNlcnZlciwgcHVibGljIENhbk1ha2VXZWFrUHRyPEluc3BlY3RvckNh
bnZhc0FnZW50PiB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW5zcGVjdG9yQ2FudmFzQWdl
bnQpOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIEluc3BlY3Rv
ckNhbnZhc0FnZW50KFBhZ2VBZ2VudENvbnRleHQmKTsKLSAgICB+SW5zcGVjdG9yQ2FudmFzQWdl
bnQoKSBvdmVycmlkZTsKKyAgICB+SW5zcGVjdG9yQ2FudmFzQWdlbnQoKTsKIAogICAgIC8vIElu
c3BlY3RvckFnZW50QmFzZQotICAgIHZvaWQgZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKElu
c3BlY3Rvcjo6RnJvbnRlbmRSb3V0ZXIqLCBJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyKikg
b3ZlcnJpZGU7Ci0gICAgdm9pZCB3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0
b3I6OkRpc2Nvbm5lY3RSZWFzb24pIG92ZXJyaWRlOwotICAgIHZvaWQgZGlzY2FyZEFnZW50KCkg
b3ZlcnJpZGU7CisgICAgdm9pZCBkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9y
OjpGcm9udGVuZFJvdXRlciosIEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXIqKTsKKyAgICB2
b2lkIHdpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlzY29ubmVjdFJl
YXNvbik7CisgICAgdm9pZCBkaXNjYXJkQWdlbnQoKTsKIAogICAgIC8vIENhbnZhc0JhY2tlbmRE
aXNwYXRjaGVySGFuZGxlcgotICAgIHZvaWQgZW5hYmxlKEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7
Ci0gICAgdm9pZCBkaXNhYmxlKEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZXF1
ZXN0Tm9kZShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgY2FudmFzSWQsIGludCogbm9kZUlk
KSBvdmVycmlkZTsKLSAgICB2b2lkIHJlcXVlc3RDb250ZW50KEVycm9yU3RyaW5nJiwgY29uc3Qg
U3RyaW5nJiBjYW52YXNJZCwgU3RyaW5nKiBjb250ZW50KSBvdmVycmlkZTsKLSAgICB2b2lkIHJl
cXVlc3RDbGllbnROb2RlcyhFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgY2FudmFzSWQsIFJl
ZlB0cjxKU09OOjpBcnJheU9mPGludD4+Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZXNvbHZlQ29u
dGV4dChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgY2FudmFzSWQsIGNvbnN0IFN0cmluZyog
b2JqZWN0R3JvdXAsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVP
YmplY3Q+Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRSZWNvcmRpbmdBdXRvQ2FwdHVyZUZyYW1l
Q291bnQoRXJyb3JTdHJpbmcmLCBpbnQgY291bnQpIG92ZXJyaWRlOwotICAgIHZvaWQgc3RhcnRS
ZWNvcmRpbmcoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGNhbnZhc0lkLCBjb25zdCBpbnQq
IGZyYW1lQ291bnQsIGNvbnN0IGludCogbWVtb3J5TGltaXQpIG92ZXJyaWRlOwotICAgIHZvaWQg
c3RvcFJlY29yZGluZyhFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgY2FudmFzSWQpIG92ZXJy
aWRlOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZW5hYmxl
KCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBkaXNhYmxl
KCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpET006Ok5vZGVJZD4gcmVxdWVzdE5vZGUoY29uc3QgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6Q2FudmFzOjpDYW52YXNJZCYpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3Ry
aW5nT3I8U3RyaW5nPiByZXF1ZXN0Q29udGVudChjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpD
YW52YXM6OkNhbnZhc0lkJik7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdP
cjxSZWY8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZD4+PiBy
ZXF1ZXN0Q2xpZW50Tm9kZXMoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6Q2FudmFzOjpDYW52
YXNJZCYpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4+IHJlc29sdmVDb250ZXh0KGNv
bnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6Q2FudmFzSWQmLCBjb25zdCBTdHJpbmcm
IG9iamVjdEdyb3VwKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZv
aWQ+IHNldFJlY29yZGluZ0F1dG9DYXB0dXJlRnJhbWVDb3VudChpbnQpOworICAgIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc3RhcnRSZWNvcmRpbmcoY29uc3QgSW5z
cGVjdG9yOjpQcm90b2NvbDo6Q2FudmFzOjpDYW52YXNJZCYsIE9wdGlvbmFsPGludD4mJiBmcmFt
ZUNvdW50LCBPcHRpb25hbDxpbnQ+JiYgbWVtb3J5TGltaXQpOworICAgIEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc3RvcFJlY29yZGluZyhjb25zdCBJbnNwZWN0b3I6
OlByb3RvY29sOjpDYW52YXM6OkNhbnZhc0lkJik7CiAjaWYgRU5BQkxFKFdFQkdMKSB8fCBFTkFC
TEUoV0VCR1BVKQotICAgIHZvaWQgcmVxdWVzdFNoYWRlclNvdXJjZShFcnJvclN0cmluZyYsIGNv
bnN0IFN0cmluZyYgcHJvZ3JhbUlkLCBjb25zdCBTdHJpbmcmIHNoYWRlclR5cGUsIFN0cmluZyog
c291cmNlKSBvdmVycmlkZTsKLSAgICB2b2lkIHVwZGF0ZVNoYWRlcihFcnJvclN0cmluZyYsIGNv
bnN0IFN0cmluZyYgcHJvZ3JhbUlkLCBjb25zdCBTdHJpbmcmIHNoYWRlclR5cGUsIGNvbnN0IFN0
cmluZyYgc291cmNlKSBvdmVycmlkZTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0
cmluZ09yPFN0cmluZz4gcmVxdWVzdFNoYWRlclNvdXJjZShjb25zdCBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpDYW52YXM6OlByb2dyYW1JZCYsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6U2hh
ZGVyVHlwZSk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiB1
cGRhdGVTaGFkZXIoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6Q2FudmFzOjpQcm9ncmFtSWQm
LCBJbnNwZWN0b3I6OlByb3RvY29sOjpDYW52YXM6OlNoYWRlclR5cGUsIGNvbnN0IFN0cmluZyYg
c291cmNlKTsKICNpZiBFTkFCTEUoV0VCR0wpCi0gICAgdm9pZCBzZXRTaGFkZXJQcm9ncmFtRGlz
YWJsZWQoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHByb2dyYW1JZCwgYm9vbCBkaXNhYmxl
ZCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRTaGFkZXJQcm9ncmFtSGlnaGxpZ2h0ZWQoRXJyb3JT
dHJpbmcmLCBjb25zdCBTdHJpbmcmIHByb2dyYW1JZCwgYm9vbCBoaWdobGlnaHRlZCkgb3ZlcnJp
ZGU7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzZXRTaGFk
ZXJQcm9ncmFtRGlzYWJsZWQoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6Q2FudmFzOjpQcm9n
cmFtSWQmLCBib29sIGRpc2FibGVkKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0
cmluZ09yPHZvaWQ+IHNldFNoYWRlclByb2dyYW1IaWdobGlnaHRlZChjb25zdCBJbnNwZWN0b3I6
OlByb3RvY29sOjpDYW52YXM6OlByb2dyYW1JZCYsIGJvb2wgaGlnaGxpZ2h0ZWQpOwogI2VuZGlm
IC8vIEVOQUJMRShXRUJHTCkKICNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpIHx8IEVOQUJMRShXRUJH
UFUpCiAKICAgICAvLyBDYW52YXNPYnNlcnZlcgotICAgIHZvaWQgY2FudmFzQ2hhbmdlZChDYW52
YXNCYXNlJiwgY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjYW52YXNSZXNp
emVkKENhbnZhc0Jhc2UmKSBvdmVycmlkZSB7IH0KLSAgICB2b2lkIGNhbnZhc0Rlc3Ryb3llZChD
YW52YXNCYXNlJikgb3ZlcnJpZGU7CisgICAgdm9pZCBjYW52YXNDaGFuZ2VkKENhbnZhc0Jhc2Um
LCBjb25zdCBGbG9hdFJlY3QmKTsKKyAgICB2b2lkIGNhbnZhc1Jlc2l6ZWQoQ2FudmFzQmFzZSYp
IHsgfQorICAgIHZvaWQgY2FudmFzRGVzdHJveWVkKENhbnZhc0Jhc2UmKTsKIAogICAgIC8vIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbgogICAgIHZvaWQgZnJhbWVOYXZpZ2F0ZWQoRnJhbWUmKTsK
QEAgLTEzOCw3ICsxMzYsNyBAQCBwcml2YXRlOgogICAgIEluc3BlY3RvckNhbnZhcyYgYmluZENh
bnZhcyhXZWJHUFVEZXZpY2UmLCBib29sIGNhcHR1cmVCYWNrdHJhY2UpOwogI2VuZGlmIC8vIEVO
QUJMRShXRUJHUFUpCiAgICAgdm9pZCB1bmJpbmRDYW52YXMoSW5zcGVjdG9yQ2FudmFzJik7Ci0g
ICAgUmVmUHRyPEluc3BlY3RvckNhbnZhcz4gYXNzZXJ0SW5zcGVjdG9yQ2FudmFzKEVycm9yU3Ry
aW5nJiwgY29uc3QgU3RyaW5nJiBjYW52YXNJZCk7CisgICAgUmVmUHRyPEluc3BlY3RvckNhbnZh
cz4gYXNzZXJ0SW5zcGVjdG9yQ2FudmFzKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5n
JiwgY29uc3QgU3RyaW5nJiBjYW52YXNJZCk7CiAgICAgUmVmUHRyPEluc3BlY3RvckNhbnZhcz4g
ZmluZEluc3BlY3RvckNhbnZhcyhDYW52YXNSZW5kZXJpbmdDb250ZXh0Jik7CiAjaWYgRU5BQkxF
KFdFQkdQVSkKICAgICBSZWZQdHI8SW5zcGVjdG9yQ2FudmFzPiBmaW5kSW5zcGVjdG9yQ2FudmFz
KFdlYkdQVURldmljZSYpOwpAQCAtMTQ2LDcgKzE0NCw3IEBAIHByaXZhdGU6CiAKICNpZiBFTkFC
TEUoV0VCR0wpIHx8IEVOQUJMRShXRUJHUFUpCiAgICAgdm9pZCB1bmJpbmRQcm9ncmFtKEluc3Bl
Y3RvclNoYWRlclByb2dyYW0mKTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yU2hhZGVyUHJvZ3JhbT4g
YXNzZXJ0SW5zcGVjdG9yUHJvZ3JhbShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgcHJvZ3Jh
bUlkKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yU2hhZGVyUHJvZ3JhbT4gYXNzZXJ0SW5zcGVjdG9y
UHJvZ3JhbShJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYg
cHJvZ3JhbUlkKTsKICNpZiBFTkFCTEUoV0VCR0wpCiAgICAgUmVmUHRyPEluc3BlY3RvclNoYWRl
clByb2dyYW0+IGZpbmRJbnNwZWN0b3JQcm9ncmFtKFdlYkdMUHJvZ3JhbSYpOwogI2VuZGlmIC8v
IEVOQUJMRShXRUJHTCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2Vu
dHMvSW5zcGVjdG9yRE9NQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50
cy9JbnNwZWN0b3JET01BZ2VudC5jcHAKaW5kZXggODM5YTU4YjU0ODg1NGRlNzU3NzBkMjYzM2Q4
ZDU5YWY1OWYyNDExMi4uZGJkYjg1MThjOWExZGJlMWFhZjc3YjAyMmY2MGE5YzE2ZDQ0MDM4OCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01B
Z2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JE
T01BZ2VudC5jcHAKQEAgLTEyOSw0MCArMTI5LDM5IEBAIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFt
ZXM7CiBzdGF0aWMgY29uc3Qgc2l6ZV90IG1heFRleHRTaXplID0gMTAwMDA7CiBzdGF0aWMgY29u
c3QgVUNoYXIgZWxsaXBzaXNVQ2hhcltdID0geyAweDIwMjYsIDAgfTsKIAotc3RhdGljIENvbG9y
IHBhcnNlQ29sb3IoY29uc3QgSlNPTjo6T2JqZWN0KiBjb2xvck9iamVjdCkKK3N0YXRpYyBDb2xv
ciBwYXJzZUNvbG9yKFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgY29sb3JPYmplY3QpCiB7CiAgICAg
aWYgKCFjb2xvck9iamVjdCkKICAgICAgICAgcmV0dXJuIENvbG9yOjp0cmFuc3BhcmVudEJsYWNr
OwogCi0gICAgaW50IHIgPSAwOwotICAgIGludCBnID0gMDsKLSAgICBpbnQgYiA9IDA7Ci0gICAg
aWYgKCFjb2xvck9iamVjdC0+Z2V0SW50ZWdlcigiciIsIHIpIHx8ICFjb2xvck9iamVjdC0+Z2V0
SW50ZWdlcigiZyIsIGcpIHx8ICFjb2xvck9iamVjdC0+Z2V0SW50ZWdlcigiYiIsIGIpKQorICAg
IGF1dG8gciA9IGNvbG9yT2JqZWN0LT5nZXRJbnRlZ2VyKFByb3RvY29sOjpET006OlJHQkFDb2xv
cjo6cktleSk7CisgICAgYXV0byBnID0gY29sb3JPYmplY3QtPmdldEludGVnZXIoUHJvdG9jb2w6
OkRPTTo6UkdCQUNvbG9yOjpnS2V5KTsKKyAgICBhdXRvIGIgPSBjb2xvck9iamVjdC0+Z2V0SW50
ZWdlcihQcm90b2NvbDo6RE9NOjpSR0JBQ29sb3I6OmJLZXkpOworICAgIGlmICghciB8fCAhZyB8
fCAhYikKICAgICAgICAgcmV0dXJuIENvbG9yOjp0cmFuc3BhcmVudEJsYWNrOwogCi0gICAgZG91
YmxlIGEgPSAxLjA7Ci0gICAgaWYgKCFjb2xvck9iamVjdC0+Z2V0RG91YmxlKCJhIiwgYSkpCi0g
ICAgICAgIHJldHVybiBjbGFtcFRvQ29tcG9uZW50Qnl0ZXM8U1JHQkE+KHIsIGcsIGIpOwotICAg
IHJldHVybiBjbGFtcFRvQ29tcG9uZW50Qnl0ZXM8U1JHQkE+KHIsIGcsIGIsIGNvbnZlcnRUb0Nv
bXBvbmVudEJ5dGUoYSkpOworICAgIGF1dG8gYSA9IGNvbG9yT2JqZWN0LT5nZXREb3VibGUoUHJv
dG9jb2w6OkRPTTo6UkdCQUNvbG9yOjphS2V5KTsKKyAgICBpZiAoIWEpCisgICAgICAgIHJldHVy
biBjbGFtcFRvQ29tcG9uZW50Qnl0ZXM8U1JHQkE+KCpyLCAqZywgKmIpOworICAgIHJldHVybiBj
bGFtcFRvQ29tcG9uZW50Qnl0ZXM8U1JHQkE+KCpyLCAqZywgKmIsIGNvbnZlcnRUb0NvbXBvbmVu
dEJ5dGUoKmEpKTsKIH0KIAotc3RhdGljIENvbG9yIHBhcnNlQ29uZmlnQ29sb3IoY29uc3QgU3Ry
aW5nJiBmaWVsZE5hbWUsIGNvbnN0IEpTT046Ok9iamVjdCogY29uZmlnT2JqZWN0KQorc3RhdGlj
IENvbG9yIHBhcnNlQ29uZmlnQ29sb3IoY29uc3QgU3RyaW5nJiBmaWVsZE5hbWUsIEpTT046Ok9i
amVjdCYgY29uZmlnT2JqZWN0KQogewotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IGNvbG9yT2Jq
ZWN0OwotICAgIGNvbmZpZ09iamVjdC0+Z2V0T2JqZWN0KGZpZWxkTmFtZSwgY29sb3JPYmplY3Qp
OwotCi0gICAgcmV0dXJuIHBhcnNlQ29sb3IoY29sb3JPYmplY3QuZ2V0KCkpOworICAgIHJldHVy
biBwYXJzZUNvbG9yKGNvbmZpZ09iamVjdC5nZXRPYmplY3QoZmllbGROYW1lKSk7CiB9CiAKLXN0
YXRpYyBib29sIHBhcnNlUXVhZChjb25zdCBKU09OOjpBcnJheSYgcXVhZEFycmF5LCBGbG9hdFF1
YWQqIHF1YWQpCitzdGF0aWMgYm9vbCBwYXJzZVF1YWQoUmVmPEpTT046OkFycmF5PiYmIHF1YWRB
cnJheSwgRmxvYXRRdWFkKiBxdWFkKQogewogICAgIGNvbnN0IHNpemVfdCBjb29yZGluYXRlc0lu
UXVhZCA9IDg7CiAgICAgZG91YmxlIGNvb3JkaW5hdGVzW2Nvb3JkaW5hdGVzSW5RdWFkXTsKLSAg
ICBpZiAocXVhZEFycmF5Lmxlbmd0aCgpICE9IGNvb3JkaW5hdGVzSW5RdWFkKQorICAgIGlmIChx
dWFkQXJyYXktPmxlbmd0aCgpICE9IGNvb3JkaW5hdGVzSW5RdWFkKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb29yZGluYXRlc0luUXVhZDsgKytp
KSB7Ci0gICAgICAgIGlmICghcXVhZEFycmF5LmdldChpKS0+YXNEb3VibGUoKihjb29yZGluYXRl
cyArIGkpKSkKKyAgICAgICAgYXV0byBjb29yZGluYXRlID0gcXVhZEFycmF5LT5nZXQoaSktPmFz
RG91YmxlKCk7CisgICAgICAgIGlmICghY29vcmRpbmF0ZSkKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgY29vcmRpbmF0ZXNbaV0gPSAqY29vcmRpbmF0ZTsKICAgICB9CiAgICAg
cXVhZC0+c2V0UDEoRmxvYXRQb2ludChjb29yZGluYXRlc1swXSwgY29vcmRpbmF0ZXNbMV0pKTsK
ICAgICBxdWFkLT5zZXRQMihGbG9hdFBvaW50KGNvb3JkaW5hdGVzWzJdLCBjb29yZGluYXRlc1sz
XSkpOwpAQCAtMjQzLDcgKzI0Miw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybjsKIAog
ICAgICAgICBhdXRvKiBub2RlID0gZG93bmNhc3Q8Tm9kZT4oZXZlbnQudGFyZ2V0KCkpOwotICAg
ICAgICBpbnQgbm9kZUlkID0gbV9kb21BZ2VudC5wdXNoTm9kZVBhdGhUb0Zyb250ZW5kKG5vZGUp
OworICAgICAgICBhdXRvIG5vZGVJZCA9IG1fZG9tQWdlbnQucHVzaE5vZGVQYXRoVG9Gcm9udGVu
ZChub2RlKTsKICAgICAgICAgaWYgKCFub2RlSWQpCiAgICAgICAgICAgICByZXR1cm47CiAKQEAg
LTMyMCw5ICszMTksOSBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50Ojp3aWxsRGVzdHJveUZyb250
ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzbwogICAgIG1fbW91c2VkT3Zl
ck5vZGUgPSBudWxscHRyOwogICAgIG1faW5zcGVjdGVkTm9kZSA9IG51bGxwdHI7CiAKLSAgICBF
cnJvclN0cmluZyBpZ25vcmVkOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBpZ25vcmVkOwog
ICAgIHNldFNlYXJjaGluZ0Zvck5vZGUoaWdub3JlZCwgZmFsc2UsIG51bGxwdHIsIGZhbHNlKTsK
LSAgICBoaWRlSGlnaGxpZ2h0KGlnbm9yZWQpOworICAgIGhpZGVIaWdobGlnaHQoKTsKIAogICAg
IG1faW5zdHJ1bWVudGluZ0FnZW50cy5zZXRQZXJzaXN0ZW50RE9NQWdlbnQobnVsbHB0cik7CiAg
ICAgbV9kb2N1bWVudFJlcXVlc3RlZCA9IGZhbHNlOwpAQCAtMzc0LDkgKzM3Myw5IEBAIHZvaWQg
SW5zcGVjdG9yRE9NQWdlbnQ6OnJlbGVhc2VEYW5nbGluZ05vZGVzKCkKICAgICBtX2RhbmdsaW5n
Tm9kZVRvSWRNYXBzLmNsZWFyKCk7CiB9CiAKLWludCBJbnNwZWN0b3JET01BZ2VudDo6YmluZChO
b2RlKiBub2RlLCBOb2RlVG9JZE1hcCogbm9kZXNNYXApCitQcm90b2NvbDo6RE9NOjpOb2RlSWQg
SW5zcGVjdG9yRE9NQWdlbnQ6OmJpbmQoTm9kZSogbm9kZSwgTm9kZVRvSWRNYXAqIG5vZGVzTWFw
KQogewotICAgIGludCBpZCA9IG5vZGVzTWFwLT5nZXQobm9kZSk7CisgICAgYXV0byBpZCA9IG5v
ZGVzTWFwLT5nZXQobm9kZSk7CiAgICAgaWYgKGlkKQogICAgICAgICByZXR1cm4gaWQ7CiAgICAg
aWQgPSBtX2xhc3ROb2RlSWQrKzsKQEAgLTM4OCw3ICszODcsNyBAQCBpbnQgSW5zcGVjdG9yRE9N
QWdlbnQ6OmJpbmQoTm9kZSogbm9kZSwgTm9kZVRvSWRNYXAqIG5vZGVzTWFwKQogCiB2b2lkIElu
c3BlY3RvckRPTUFnZW50Ojp1bmJpbmQoTm9kZSogbm9kZSwgTm9kZVRvSWRNYXAqIG5vZGVzTWFw
KQogewotICAgIGludCBpZCA9IG5vZGVzTWFwLT5nZXQobm9kZSk7CisgICAgYXV0byBpZCA9IG5v
ZGVzTWFwLT5nZXQobm9kZSk7CiAgICAgaWYgKCFpZCkKICAgICAgICAgcmV0dXJuOwogCkBAIC00
MjIsNyArNDIxLDcgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6dW5iaW5kKE5vZGUqIG5vZGUs
IE5vZGVUb0lkTWFwKiBub2Rlc01hcCkKICAgICB9CiB9CiAKLU5vZGUqIEluc3BlY3RvckRPTUFn
ZW50Ojphc3NlcnROb2RlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJZCkKK05v
ZGUqIEluc3BlY3RvckRPTUFnZW50Ojphc3NlcnROb2RlKFByb3RvY29sOjpFcnJvclN0cmluZyYg
ZXJyb3JTdHJpbmcsIFByb3RvY29sOjpET006Ok5vZGVJZCBub2RlSWQpCiB7CiAgICAgTm9kZSog
bm9kZSA9IG5vZGVGb3JJZChub2RlSWQpOwogICAgIGlmICghbm9kZSkgewpAQCAtNDMyLDcgKzQz
MSw3IEBAIE5vZGUqIEluc3BlY3RvckRPTUFnZW50Ojphc3NlcnROb2RlKEVycm9yU3RyaW5nJiBl
cnJvclN0cmluZywgaW50IG5vZGVJZCkKICAgICByZXR1cm4gbm9kZTsKIH0KIAotRG9jdW1lbnQq
IEluc3BlY3RvckRPTUFnZW50Ojphc3NlcnREb2N1bWVudChFcnJvclN0cmluZyYgZXJyb3JTdHJp
bmcsIGludCBub2RlSWQpCitEb2N1bWVudCogSW5zcGVjdG9yRE9NQWdlbnQ6OmFzc2VydERvY3Vt
ZW50KFByb3RvY29sOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIFByb3RvY29sOjpET006Ok5v
ZGVJZCBub2RlSWQpCiB7CiAgICAgTm9kZSogbm9kZSA9IGFzc2VydE5vZGUoZXJyb3JTdHJpbmcs
IG5vZGVJZCk7CiAgICAgaWYgKCFub2RlKQpAQCAtNDQ0LDcgKzQ0Myw3IEBAIERvY3VtZW50KiBJ
bnNwZWN0b3JET01BZ2VudDo6YXNzZXJ0RG9jdW1lbnQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5n
LCBpbnQgbm9kZUlkCiAgICAgcmV0dXJuIGRvd25jYXN0PERvY3VtZW50Pihub2RlKTsKIH0KIAot
RWxlbWVudCogSW5zcGVjdG9yRE9NQWdlbnQ6OmFzc2VydEVsZW1lbnQoRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBpbnQgbm9kZUlkKQorRWxlbWVudCogSW5zcGVjdG9yRE9NQWdlbnQ6OmFzc2Vy
dEVsZW1lbnQoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgUHJvdG9jb2w6OkRP
TTo6Tm9kZUlkIG5vZGVJZCkKIHsKICAgICBOb2RlKiBub2RlID0gYXNzZXJ0Tm9kZShlcnJvclN0
cmluZywgbm9kZUlkKTsKICAgICBpZiAoIW5vZGUpCkBAIC00NTYsNyArNDU1LDcgQEAgRWxlbWVu
dCogSW5zcGVjdG9yRE9NQWdlbnQ6OmFzc2VydEVsZW1lbnQoRXJyb3JTdHJpbmcmIGVycm9yU3Ry
aW5nLCBpbnQgbm9kZUlkKQogICAgIHJldHVybiBkb3duY2FzdDxFbGVtZW50Pihub2RlKTsKIH0K
IAotTm9kZSogSW5zcGVjdG9yRE9NQWdlbnQ6OmFzc2VydEVkaXRhYmxlTm9kZShFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQpCitOb2RlKiBJbnNwZWN0b3JET01BZ2VudDo6YXNz
ZXJ0RWRpdGFibGVOb2RlKFByb3RvY29sOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIFByb3Rv
Y29sOjpET006Ok5vZGVJZCBub2RlSWQpCiB7CiAgICAgTm9kZSogbm9kZSA9IGFzc2VydE5vZGUo
ZXJyb3JTdHJpbmcsIG5vZGVJZCk7CiAgICAgaWYgKCFub2RlKQpAQCAtNDcyLDcgKzQ3MSw3IEBA
IE5vZGUqIEluc3BlY3RvckRPTUFnZW50Ojphc3NlcnRFZGl0YWJsZU5vZGUoRXJyb3JTdHJpbmcm
IGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkCiAgICAgcmV0dXJuIG5vZGU7CiB9CiAKLUVsZW1lbnQq
IEluc3BlY3RvckRPTUFnZW50Ojphc3NlcnRFZGl0YWJsZUVsZW1lbnQoRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBpbnQgbm9kZUlkKQorRWxlbWVudCogSW5zcGVjdG9yRE9NQWdlbnQ6OmFzc2Vy
dEVkaXRhYmxlRWxlbWVudChQcm90b2NvbDo6RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBQcm90
b2NvbDo6RE9NOjpOb2RlSWQgbm9kZUlkKQogewogICAgIE5vZGUqIG5vZGUgPSBhc3NlcnRFZGl0
YWJsZU5vZGUoZXJyb3JTdHJpbmcsIG5vZGVJZCk7CiAgICAgaWYgKCFub2RlKQpAQCAtNDg0LDI3
ICs0ODMsMjcgQEAgRWxlbWVudCogSW5zcGVjdG9yRE9NQWdlbnQ6OmFzc2VydEVkaXRhYmxlRWxl
bWVudChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludAogICAgIHJldHVybiBkb3duY2FzdDxF
bGVtZW50Pihub2RlKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Z2V0RG9jdW1lbnQo
RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9N
OjpOb2RlPiYgcm9vdCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxQcm90b2NvbDo6RE9N
OjpOb2RlPj4gSW5zcGVjdG9yRE9NQWdlbnQ6OmdldERvY3VtZW50KCkKIHsKICAgICBtX2RvY3Vt
ZW50UmVxdWVzdGVkID0gdHJ1ZTsKIAotICAgIGlmICghbV9kb2N1bWVudCkgewotICAgICAgICBl
cnJvclN0cmluZyA9ICJJbnRlcm5hbCBlcnJvcjogbWlzc2luZyBkb2N1bWVudCJfczsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoIW1fZG9jdW1lbnQpCisgICAgICAgIHJldHVybiBt
YWtlVW5leHBlY3RlZCgiSW50ZXJuYWwgZXJyb3I6IG1pc3NpbmcgZG9jdW1lbnQiX3MpOwogCiAg
ICAgLy8gUmVzZXQgYmFja2VuZCBzdGF0ZS4KICAgICBSZWZQdHI8RG9jdW1lbnQ+IGRvY3VtZW50
ID0gbV9kb2N1bWVudDsKICAgICByZXNldCgpOwogICAgIG1fZG9jdW1lbnQgPSBkb2N1bWVudDsK
IAotICAgIHJvb3QgPSBidWlsZE9iamVjdEZvck5vZGUobV9kb2N1bWVudC5nZXQoKSwgMiwgJm1f
ZG9jdW1lbnROb2RlVG9JZE1hcCk7CisgICAgYXV0byByb290ID0gYnVpbGRPYmplY3RGb3JOb2Rl
KG1fZG9jdW1lbnQuZ2V0KCksIDIsICZtX2RvY3VtZW50Tm9kZVRvSWRNYXApOwogCiAgICAgaWYg
KG1fbm9kZVRvRm9jdXMpCiAgICAgICAgIGZvY3VzTm9kZSgpOworCisgICAgcmV0dXJuIFdURk1v
dmUocm9vdCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnB1c2hDaGlsZE5vZGVzVG9G
cm9udGVuZChpbnQgbm9kZUlkLCBpbnQgZGVwdGgpCit2b2lkIEluc3BlY3RvckRPTUFnZW50Ojpw
dXNoQ2hpbGROb2Rlc1RvRnJvbnRlbmQoUHJvdG9jb2w6OkRPTTo6Tm9kZUlkIG5vZGVJZCwgaW50
IGRlcHRoKQogewogICAgIE5vZGUqIG5vZGUgPSBub2RlRm9ySWQobm9kZUlkKTsKICAgICBpZiAo
IW5vZGUgfHwgKG5vZGUtPm5vZGVUeXBlKCkgIT0gTm9kZTo6RUxFTUVOVF9OT0RFICYmIG5vZGUt
Pm5vZGVUeXBlKCkgIT0gTm9kZTo6RE9DVU1FTlRfTk9ERSAmJiBub2RlLT5ub2RlVHlwZSgpICE9
IE5vZGU6OkRPQ1VNRU5UX0ZSQUdNRU5UX05PREUpKQpAQCAtNTE5LDcgKzUxOCw3IEBAIHZvaWQg
SW5zcGVjdG9yRE9NQWdlbnQ6OnB1c2hDaGlsZE5vZGVzVG9Gcm9udGVuZChpbnQgbm9kZUlkLCBp
bnQgZGVwdGgpCiAgICAgICAgIGRlcHRoLS07CiAKICAgICAgICAgZm9yIChub2RlID0gaW5uZXJG
aXJzdENoaWxkKG5vZGUpOyBub2RlOyBub2RlID0gaW5uZXJOZXh0U2libGluZyhub2RlKSkgewot
ICAgICAgICAgICAgaW50IGNoaWxkTm9kZUlkID0gbm9kZU1hcC0+Z2V0KG5vZGUpOworICAgICAg
ICAgICAgYXV0byBjaGlsZE5vZGVJZCA9IG5vZGVNYXAtPmdldChub2RlKTsKICAgICAgICAgICAg
IEFTU0VSVChjaGlsZE5vZGVJZCk7CiAgICAgICAgICAgICBwdXNoQ2hpbGROb2Rlc1RvRnJvbnRl
bmQoY2hpbGROb2RlSWQsIGRlcHRoKTsKICAgICAgICAgfQpAQCAtNTQxLDE4ICs1NDAsMTggQEAg
dm9pZCBJbnNwZWN0b3JET01BZ2VudDo6ZGlzY2FyZEJpbmRpbmdzKCkKICAgICBtX2NoaWxkcmVu
UmVxdWVzdGVkLmNsZWFyKCk7CiB9CiAKLWludCBJbnNwZWN0b3JET01BZ2VudDo6cHVzaE5vZGVU
b0Zyb250ZW5kKE5vZGUqIG5vZGVUb1B1c2gpCitQcm90b2NvbDo6RE9NOjpOb2RlSWQgSW5zcGVj
dG9yRE9NQWdlbnQ6OnB1c2hOb2RlVG9Gcm9udGVuZChOb2RlKiBub2RlVG9QdXNoKQogewogICAg
IGlmICghbm9kZVRvUHVzaCkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICAvLyBGSVhNRTogPGh0
dHBzOi8vd2Via2l0Lm9yZy9iLzIxMzQ5OT4gV2ViIEluc3BlY3RvcjogYWxsb3cgRE9NIG5vZGVz
IHRvIGJlIGluc3RydW1lbnRlZCBhdCBhbnkgcG9pbnQsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0
aGUgbWFpbiBkb2N1bWVudCBoYXMgYWxzbyBiZWVuIGluc3RydW1lbnRlZAogCi0gICAgRXJyb3JT
dHJpbmcgaWdub3JlZDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgaWdub3JlZDsKICAgICBy
ZXR1cm4gcHVzaE5vZGVUb0Zyb250ZW5kKGlnbm9yZWQsIGJvdW5kTm9kZUlkKCZub2RlVG9QdXNo
LT5kb2N1bWVudCgpKSwgbm9kZVRvUHVzaCk7CiB9CiAKLWludCBJbnNwZWN0b3JET01BZ2VudDo6
cHVzaE5vZGVUb0Zyb250ZW5kKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IGRvY3VtZW50
Tm9kZUlkLCBOb2RlKiBub2RlVG9QdXNoKQorUHJvdG9jb2w6OkRPTTo6Tm9kZUlkIEluc3BlY3Rv
ckRPTUFnZW50OjpwdXNoTm9kZVRvRnJvbnRlbmQoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJv
clN0cmluZywgUHJvdG9jb2w6OkRPTTo6Tm9kZUlkIGRvY3VtZW50Tm9kZUlkLCBOb2RlKiBub2Rl
VG9QdXNoKQogewogICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGFzc2VydERvY3VtZW50KGVycm9y
U3RyaW5nLCBkb2N1bWVudE5vZGVJZCk7CiAgICAgaWYgKCFkb2N1bWVudCkKQEAgLTU2NSw3ICs1
NjQsNyBAQCBpbnQgSW5zcGVjdG9yRE9NQWdlbnQ6OnB1c2hOb2RlVG9Gcm9udGVuZChFcnJvclN0
cmluZyYgZXJyb3JTdHJpbmcsIGludCBkb2N1bWVudAogICAgIHJldHVybiBwdXNoTm9kZVBhdGhU
b0Zyb250ZW5kKGVycm9yU3RyaW5nLCBub2RlVG9QdXNoKTsKIH0KIAotTm9kZSogSW5zcGVjdG9y
RE9NQWdlbnQ6Om5vZGVGb3JJZChpbnQgaWQpCitOb2RlKiBJbnNwZWN0b3JET01BZ2VudDo6bm9k
ZUZvcklkKFByb3RvY29sOjpET006Ok5vZGVJZCBpZCkKIHsKICAgICBpZiAoIW1faWRUb05vZGUu
aXNWYWxpZEtleShpZCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtNTczLDcgKzU3Miw3
IEBAIE5vZGUqIEluc3BlY3RvckRPTUFnZW50Ojpub2RlRm9ySWQoaW50IGlkKQogICAgIHJldHVy
biBtX2lkVG9Ob2RlLmdldChpZCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnJlcXVl
c3RDaGlsZE5vZGVzKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJZCwgY29uc3Qg
aW50KiBkZXB0aCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRPTUFn
ZW50OjpyZXF1ZXN0Q2hpbGROb2RlcyhQcm90b2NvbDo6RE9NOjpOb2RlSWQgbm9kZUlkLCBPcHRp
b25hbDxpbnQ+JiYgZGVwdGgpCiB7CiAgICAgaW50IHNhbml0aXplZERlcHRoOwogCkBAIC01ODMs
NjQgKzU4Miw2NCBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpyZXF1ZXN0Q2hpbGROb2RlcyhF
cnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQsCiAgICAgICAgIHNhbml0aXplZERl
cHRoID0gSU5UX01BWDsKICAgICBlbHNlIGlmICgqZGVwdGggPiAwKQogICAgICAgICBzYW5pdGl6
ZWREZXB0aCA9ICpkZXB0aDsKLSAgICBlbHNlIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiVW5l
eHBlY3RlZCB2YWx1ZSBiZWxvdyAtMSBmb3IgZ2l2ZW4gZGVwdGgiX3M7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9CisgICAgZWxzZQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIlVuZXhw
ZWN0ZWQgdmFsdWUgYmVsb3cgLTEgZm9yIGdpdmVuIGRlcHRoIl9zKTsKIAogICAgIHB1c2hDaGls
ZE5vZGVzVG9Gcm9udGVuZChub2RlSWQsIHNhbml0aXplZERlcHRoKTsKKworICAgIHJldHVybiB7
IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnF1ZXJ5U2VsZWN0b3IoRXJyb3JTdHJp
bmcmIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9ycywgaW50
KiBlbGVtZW50SWQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxQcm90b2NvbDo6RE9NOjpOb2Rl
SWQ+IEluc3BlY3RvckRPTUFnZW50OjpxdWVyeVNlbGVjdG9yKFByb3RvY29sOjpET006Ok5vZGVJ
ZCBub2RlSWQsIGNvbnN0IFN0cmluZyYgc2VsZWN0b3IpCiB7Ci0gICAgKmVsZW1lbnRJZCA9IDA7
CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAgICAgTm9kZSogbm9k
ZSA9IGFzc2VydE5vZGUoZXJyb3JTdHJpbmcsIG5vZGVJZCk7CiAgICAgaWYgKCFub2RlKQotICAg
ICAgICByZXR1cm47Ci0gICAgaWYgKCFpczxDb250YWluZXJOb2RlPigqbm9kZSkpIHsKLSAgICAg
ICAgYXNzZXJ0RWxlbWVudChlcnJvclN0cmluZywgbm9kZUlkKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKKyAgICBp
ZiAoIWlzPENvbnRhaW5lck5vZGU+KCpub2RlKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVj
dGVkKCJOb2RlIGZvciBnaXZlbiBub2RlSWQgaXMgbm90IGEgY29udGFpbmVyIG5vZGUiX3MpOwog
Ci0gICAgYXV0byBxdWVyeVJlc3VsdCA9IGRvd25jYXN0PENvbnRhaW5lck5vZGU+KCpub2RlKS5x
dWVyeVNlbGVjdG9yKHNlbGVjdG9ycyk7Ci0gICAgaWYgKHF1ZXJ5UmVzdWx0Lmhhc0V4Y2VwdGlv
bigpKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIkRPTSBFcnJvciB3aGlsZSBxdWVyeWluZyB3
aXRoIGdpdmVuIHNlbGVjdG9ycyJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBhdXRv
IHF1ZXJ5UmVzdWx0ID0gZG93bmNhc3Q8Q29udGFpbmVyTm9kZT4oKm5vZGUpLnF1ZXJ5U2VsZWN0
b3Ioc2VsZWN0b3IpOworICAgIGlmIChxdWVyeVJlc3VsdC5oYXNFeGNlcHRpb24oKSkKKyAgICAg
ICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEluc3BlY3RvckRPTUFnZW50Ojp0b0Vycm9yU3RyaW5n
KHF1ZXJ5UmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKSkpOwogCi0gICAgaWYgKGF1dG8qIGVsZW1l
bnQgPSBxdWVyeVJlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUoKSkKLSAgICAgICAgKmVsZW1lbnRJ
ZCA9IHB1c2hOb2RlUGF0aFRvRnJvbnRlbmQoZXJyb3JTdHJpbmcsIGVsZW1lbnQpOworICAgIGF1
dG8gcmVzdWx0Tm9kZUlkID0gcHVzaE5vZGVQYXRoVG9Gcm9udGVuZChlcnJvclN0cmluZywgcXVl
cnlSZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCkpOworICAgIGlmICghcmVzdWx0Tm9kZUlkKQor
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOworCisgICAgcmV0dXJu
IHJlc3VsdE5vZGVJZDsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6cXVlcnlTZWxlY3Rv
ckFsbChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQsIGNvbnN0IFN0cmluZyYg
c2VsZWN0b3JzLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxpbnQ+PiYgcmVzdWx0KQorUHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8UmVmPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkRPTTo6Tm9kZUlkPj4+
IEluc3BlY3RvckRPTUFnZW50OjpxdWVyeVNlbGVjdG9yQWxsKFByb3RvY29sOjpET006Ok5vZGVJ
ZCBub2RlSWQsIGNvbnN0IFN0cmluZyYgc2VsZWN0b3IpCiB7CisgICAgUHJvdG9jb2w6OkVycm9y
U3RyaW5nIGVycm9yU3RyaW5nOworCiAgICAgTm9kZSogbm9kZSA9IGFzc2VydE5vZGUoZXJyb3JT
dHJpbmcsIG5vZGVJZCk7CiAgICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm47Ci0gICAgaWYg
KCFpczxDb250YWluZXJOb2RlPigqbm9kZSkpIHsKLSAgICAgICAgYXNzZXJ0RWxlbWVudChlcnJv
clN0cmluZywgbm9kZUlkKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICAgICAgcmV0dXJu
IG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKKyAgICBpZiAoIWlzPENvbnRhaW5lck5vZGU+
KCpub2RlKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJOb2RlIGZvciBnaXZlbiBu
b2RlSWQgaXMgbm90IGEgY29udGFpbmVyIG5vZGUiX3MpOwogCi0gICAgYXV0byBxdWVyeVJlc3Vs
dCA9IGRvd25jYXN0PENvbnRhaW5lck5vZGU+KCpub2RlKS5xdWVyeVNlbGVjdG9yQWxsKHNlbGVj
dG9ycyk7Ci0gICAgaWYgKHF1ZXJ5UmVzdWx0Lmhhc0V4Y2VwdGlvbigpKSB7Ci0gICAgICAgIGVy
cm9yU3RyaW5nID0gIkRPTSBFcnJvciB3aGlsZSBxdWVyeWluZyB3aXRoIGdpdmVuIHNlbGVjdG9y
cyJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBhdXRvIHF1ZXJ5UmVzdWx0ID0gZG93
bmNhc3Q8Q29udGFpbmVyTm9kZT4oKm5vZGUpLnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpOwor
ICAgIGlmIChxdWVyeVJlc3VsdC5oYXNFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKEluc3BlY3RvckRPTUFnZW50Ojp0b0Vycm9yU3RyaW5nKHF1ZXJ5UmVzdWx0LnJl
bGVhc2VFeGNlcHRpb24oKSkpOwogCiAgICAgYXV0byBub2RlcyA9IHF1ZXJ5UmVzdWx0LnJlbGVh
c2VSZXR1cm5WYWx1ZSgpOwotICAgIHJlc3VsdCA9IEpTT046OkFycmF5T2Y8aW50Pjo6Y3JlYXRl
KCk7CisKKyAgICBhdXRvIG5vZGVJZHMgPSBKU09OOjpBcnJheU9mPFByb3RvY29sOjpET006Ok5v
ZGVJZD46OmNyZWF0ZSgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBub2Rlcy0+bGVu
Z3RoKCk7ICsraSkKLSAgICAgICAgcmVzdWx0LT5hZGRJdGVtKHB1c2hOb2RlUGF0aFRvRnJvbnRl
bmQobm9kZXMtPml0ZW0oaSkpKTsKKyAgICAgICAgbm9kZUlkcy0+YWRkSXRlbShwdXNoTm9kZVBh
dGhUb0Zyb250ZW5kKG5vZGVzLT5pdGVtKGkpKSk7CisgICAgcmV0dXJuIFdURk1vdmUobm9kZUlk
cyk7CiB9CiAKLWludCBJbnNwZWN0b3JET01BZ2VudDo6cHVzaE5vZGVQYXRoVG9Gcm9udGVuZChO
b2RlKiBub2RlVG9QdXNoKQorUHJvdG9jb2w6OkRPTTo6Tm9kZUlkIEluc3BlY3RvckRPTUFnZW50
OjpwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKE5vZGUqIG5vZGVUb1B1c2gpCiB7Ci0gICAgRXJyb3JT
dHJpbmcgaWdub3JlZDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgaWdub3JlZDsKICAgICBy
ZXR1cm4gcHVzaE5vZGVQYXRoVG9Gcm9udGVuZChpZ25vcmVkLCBub2RlVG9QdXNoKTsKIH0KIAot
aW50IEluc3BlY3RvckRPTUFnZW50OjpwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKEVycm9yU3RyaW5n
IGVycm9yU3RyaW5nLCBOb2RlKiBub2RlVG9QdXNoKQorUHJvdG9jb2w6OkRPTTo6Tm9kZUlkIElu
c3BlY3RvckRPTUFnZW50OjpwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKFByb3RvY29sOjpFcnJvclN0
cmluZyBlcnJvclN0cmluZywgTm9kZSogbm9kZVRvUHVzaCkKIHsKICAgICBBU1NFUlQobm9kZVRv
UHVzaCk7ICAvLyBJbnZhbGlkIGlucHV0CiAKQEAgLTY1Niw4ICs2NTUsNyBAQCBpbnQgSW5zcGVj
dG9yRE9NQWdlbnQ6OnB1c2hOb2RlUGF0aFRvRnJvbnRlbmQoRXJyb3JTdHJpbmcgZXJyb3JTdHJp
bmcsIE5vZGUqIG5vZAogICAgIH0KIAogICAgIC8vIFJldHVybiBpZCBpbiBjYXNlIHRoZSBub2Rl
IGlzIGtub3duLgotICAgIGludCByZXN1bHQgPSBtX2RvY3VtZW50Tm9kZVRvSWRNYXAuZ2V0KG5v
ZGVUb1B1c2gpOwotICAgIGlmIChyZXN1bHQpCisgICAgaWYgKGF1dG8gcmVzdWx0ID0gbV9kb2N1
bWVudE5vZGVUb0lkTWFwLmdldChub2RlVG9QdXNoKSkKICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
IAogICAgIE5vZGUqIG5vZGUgPSBub2RlVG9QdXNoOwpAQCAtNjcxLDcgKzY2OSw3IEBAIGludCBJ
bnNwZWN0b3JET01BZ2VudDo6cHVzaE5vZGVQYXRoVG9Gcm9udGVuZChFcnJvclN0cmluZyBlcnJv
clN0cmluZywgTm9kZSogbm9kCiAgICAgICAgICAgICBhdXRvIG5ld01hcCA9IG1ha2VVbmlxdWU8
Tm9kZVRvSWRNYXA+KCk7CiAgICAgICAgICAgICBkYW5nbGluZ01hcCA9IG5ld01hcC5nZXQoKTsK
ICAgICAgICAgICAgIG1fZGFuZ2xpbmdOb2RlVG9JZE1hcHMuYXBwZW5kKG5ld01hcC5yZWxlYXNl
KCkpOwotICAgICAgICAgICAgYXV0byBjaGlsZHJlbiA9IEpTT046OkFycmF5T2Y8SW5zcGVjdG9y
OjpQcm90b2NvbDo6RE9NOjpOb2RlPjo6Y3JlYXRlKCk7CisgICAgICAgICAgICBhdXRvIGNoaWxk
cmVuID0gSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6RE9NOjpOb2RlPjo6Y3JlYXRlKCk7CiAgICAg
ICAgICAgICBjaGlsZHJlbi0+YWRkSXRlbShidWlsZE9iamVjdEZvck5vZGUobm9kZSwgMCwgZGFu
Z2xpbmdNYXApKTsKICAgICAgICAgICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5zZXRDaGlsZE5v
ZGVzKDAsIFdURk1vdmUoY2hpbGRyZW4pKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtNjg2LDIy
MSArNjg0LDI1MiBAQCBpbnQgSW5zcGVjdG9yRE9NQWdlbnQ6OnB1c2hOb2RlUGF0aFRvRnJvbnRl
bmQoRXJyb3JTdHJpbmcgZXJyb3JTdHJpbmcsIE5vZGUqIG5vZAogCiAgICAgTm9kZVRvSWRNYXAq
IG1hcCA9IGRhbmdsaW5nTWFwID8gZGFuZ2xpbmdNYXAgOiAmbV9kb2N1bWVudE5vZGVUb0lkTWFw
OwogICAgIGZvciAoaW50IGkgPSBwYXRoLnNpemUoKSAtIDE7IGkgPj0gMDsgLS1pKSB7Ci0gICAg
ICAgIGludCBub2RlSWQgPSBtYXAtPmdldChwYXRoLmF0KGkpKTsKKyAgICAgICAgYXV0byBub2Rl
SWQgPSBtYXAtPmdldChwYXRoLmF0KGkpKTsKICAgICAgICAgQVNTRVJUKG5vZGVJZCk7CiAgICAg
ICAgIHB1c2hDaGlsZE5vZGVzVG9Gcm9udGVuZChub2RlSWQpOwogICAgIH0KICAgICByZXR1cm4g
bWFwLT5nZXQobm9kZVRvUHVzaCk7CiB9CiAKLWludCBJbnNwZWN0b3JET01BZ2VudDo6Ym91bmRO
b2RlSWQoY29uc3QgTm9kZSogbm9kZSkKK1Byb3RvY29sOjpET006Ok5vZGVJZCBJbnNwZWN0b3JE
T01BZ2VudDo6Ym91bmROb2RlSWQoY29uc3QgTm9kZSogbm9kZSkKIHsKICAgICByZXR1cm4gbV9k
b2N1bWVudE5vZGVUb0lkTWFwLmdldChjb25zdF9jYXN0PE5vZGUqPihub2RlKSk7CiB9CiAKLXZv
aWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNldEF0dHJpYnV0ZVZhbHVlKEVycm9yU3RyaW5nJiBlcnJv
clN0cmluZywgaW50IGVsZW1lbnRJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcm
IHZhbHVlKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yRE9NQWdlbnQ6
OnNldEF0dHJpYnV0ZVZhbHVlKFByb3RvY29sOjpET006Ok5vZGVJZCBub2RlSWQsIGNvbnN0IFN0
cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKLSAgICBFbGVtZW50KiBlbGVtZW50
ID0gYXNzZXJ0RWRpdGFibGVFbGVtZW50KGVycm9yU3RyaW5nLCBlbGVtZW50SWQpOwotICAgIGlm
ICghZWxlbWVudCkKLSAgICAgICAgcmV0dXJuOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBl
cnJvclN0cmluZzsKIAotICAgIG1fZG9tRWRpdG9yLT5zZXRBdHRyaWJ1dGUoKmVsZW1lbnQsIG5h
bWUsIHZhbHVlLCBlcnJvclN0cmluZyk7CisgICAgRWxlbWVudCogZWxlbWVudCA9IGFzc2VydEVk
aXRhYmxlRWxlbWVudChlcnJvclN0cmluZywgbm9kZUlkKTsKKyAgICBpZiAoIWVsZW1lbnQpCisg
ICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CisKKyAgICBpZiAoIW1f
ZG9tRWRpdG9yLT5zZXRBdHRyaWJ1dGUoKmVsZW1lbnQsIG5hbWUsIHZhbHVlLCBlcnJvclN0cmlu
ZykpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CisKKyAgICBy
ZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpzZXRBdHRyaWJ1dGVzQXNU
ZXh0KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IGVsZW1lbnRJZCwgY29uc3QgU3RyaW5n
JiB0ZXh0LCBjb25zdCBTdHJpbmcqIG5hbWUpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lk
PiBJbnNwZWN0b3JET01BZ2VudDo6c2V0QXR0cmlidXRlc0FzVGV4dChQcm90b2NvbDo6RE9NOjpO
b2RlSWQgbm9kZUlkLCBjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFN0cmluZyYgbmFtZSkKIHsK
LSAgICBFbGVtZW50KiBlbGVtZW50ID0gYXNzZXJ0RWRpdGFibGVFbGVtZW50KGVycm9yU3RyaW5n
LCBlbGVtZW50SWQpOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwor
ICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBhc3NlcnRFZGl0YWJsZUVsZW1lbnQoZXJyb3JTdHJpbmcs
IG5vZGVJZCk7CiAgICAgaWYgKCFlbGVtZW50KQotICAgICAgICByZXR1cm47CisgICAgICAgIHJl
dHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAgICBhdXRvIHBhcnNlZEVsZW1l
bnQgPSBjcmVhdGVIVE1MRWxlbWVudChlbGVtZW50LT5kb2N1bWVudCgpLCBzcGFuVGFnKTsKICAg
ICBhdXRvIHJlc3VsdCA9IHBhcnNlZEVsZW1lbnQuZ2V0KCkuc2V0SW5uZXJIVE1MKCI8c3BhbiAi
ICsgdGV4dCArICI+PC9zcGFuPiIpOwotICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpIHsK
LSAgICAgICAgZXJyb3JTdHJpbmcgPSB0b0Vycm9yU3RyaW5nKHJlc3VsdC5yZWxlYXNlRXhjZXB0
aW9uKCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0
aW9uKCkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChJbnNwZWN0b3JET01BZ2VudDo6
dG9FcnJvclN0cmluZyhyZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpKSk7CiAKICAgICBOb2RlKiBj
aGlsZCA9IHBhcnNlZEVsZW1lbnQtPmZpcnN0Q2hpbGQoKTsKLSAgICBpZiAoIWNoaWxkKSB7Ci0g
ICAgICAgIGVycm9yU3RyaW5nID0gIkNvdWxkIG5vdCBwYXJzZSBnaXZlbiB0ZXh0Il9zOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghY2hpbGQpCisgICAgICAgIHJldHVybiBtYWtl
VW5leHBlY3RlZCgiQ291bGQgbm90IHBhcnNlIGdpdmVuIHRleHQiX3MpOwogCiAgICAgRWxlbWVu
dCogY2hpbGRFbGVtZW50ID0gZG93bmNhc3Q8RWxlbWVudD4oY2hpbGQpOwotICAgIGlmICghY2hp
bGRFbGVtZW50LT5oYXNBdHRyaWJ1dGVzKCkgJiYgbmFtZSkgewotICAgICAgICBtX2RvbUVkaXRv
ci0+cmVtb3ZlQXR0cmlidXRlKCplbGVtZW50LCAqbmFtZSwgZXJyb3JTdHJpbmcpOwotICAgICAg
ICByZXR1cm47CisgICAgaWYgKCFjaGlsZEVsZW1lbnQtPmhhc0F0dHJpYnV0ZXMoKSAmJiAhIW5h
bWUpIHsKKyAgICAgICAgaWYgKCFtX2RvbUVkaXRvci0+cmVtb3ZlQXR0cmlidXRlKCplbGVtZW50
LCBuYW1lLCBlcnJvclN0cmluZykpCisgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQo
ZXJyb3JTdHJpbmcpOworICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAogICAgIGJvb2wgZm91
bmRPcmlnaW5hbEF0dHJpYnV0ZSA9IGZhbHNlOwogICAgIGZvciAoY29uc3QgQXR0cmlidXRlJiBh
dHRyaWJ1dGUgOiBjaGlsZEVsZW1lbnQtPmF0dHJpYnV0ZXNJdGVyYXRvcigpKSB7CiAgICAgICAg
IC8vIEFkZCBhdHRyaWJ1dGUgcGFpcgotICAgICAgICBmb3VuZE9yaWdpbmFsQXR0cmlidXRlID0g
Zm91bmRPcmlnaW5hbEF0dHJpYnV0ZSB8fCAobmFtZSAmJiBhdHRyaWJ1dGUubmFtZSgpLnRvU3Ry
aW5nKCkgPT0gKm5hbWUpOworICAgICAgICBmb3VuZE9yaWdpbmFsQXR0cmlidXRlID0gZm91bmRP
cmlnaW5hbEF0dHJpYnV0ZSB8fCBhdHRyaWJ1dGUubmFtZSgpLnRvU3RyaW5nKCkgPT0gbmFtZTsK
ICAgICAgICAgaWYgKCFtX2RvbUVkaXRvci0+c2V0QXR0cmlidXRlKCplbGVtZW50LCBhdHRyaWJ1
dGUubmFtZSgpLnRvU3RyaW5nKCksIGF0dHJpYnV0ZS52YWx1ZSgpLCBlcnJvclN0cmluZykpCi0g
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJy
b3JTdHJpbmcpOwogICAgIH0KIAotICAgIGlmICghZm91bmRPcmlnaW5hbEF0dHJpYnV0ZSAmJiBu
YW1lICYmICFuYW1lLT5zdHJpcFdoaXRlU3BhY2UoKS5pc0VtcHR5KCkpCi0gICAgICAgIG1fZG9t
RWRpdG9yLT5yZW1vdmVBdHRyaWJ1dGUoKmVsZW1lbnQsICpuYW1lLCBlcnJvclN0cmluZyk7Cisg
ICAgaWYgKCFmb3VuZE9yaWdpbmFsQXR0cmlidXRlICYmICFuYW1lLnN0cmlwV2hpdGVTcGFjZSgp
LmlzRW1wdHkoKSkgeworICAgICAgICBpZiAoIW1fZG9tRWRpdG9yLT5yZW1vdmVBdHRyaWJ1dGUo
KmVsZW1lbnQsIG5hbWUsIGVycm9yU3RyaW5nKSkKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5l
eHBlY3RlZChlcnJvclN0cmluZyk7CisgICAgfQorCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9p
ZCBJbnNwZWN0b3JET01BZ2VudDo6cmVtb3ZlQXR0cmlidXRlKEVycm9yU3RyaW5nJiBlcnJvclN0
cmluZywgaW50IGVsZW1lbnRJZCwgY29uc3QgU3RyaW5nJiBuYW1lKQorUHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yRE9NQWdlbnQ6OnJlbW92ZUF0dHJpYnV0ZShQcm90b2Nv
bDo6RE9NOjpOb2RlSWQgbm9kZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUpCiB7Ci0gICAgRWxlbWVu
dCogZWxlbWVudCA9IGFzc2VydEVkaXRhYmxlRWxlbWVudChlcnJvclN0cmluZywgZWxlbWVudElk
KTsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKKyAgICBFbGVtZW50
KiBlbGVtZW50ID0gYXNzZXJ0RWRpdGFibGVFbGVtZW50KGVycm9yU3RyaW5nLCBub2RlSWQpOwog
ICAgIGlmICghZWxlbWVudCkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVu
ZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCi0gICAgbV9kb21FZGl0b3ItPnJlbW92ZUF0dHJpYnV0
ZSgqZWxlbWVudCwgbmFtZSwgZXJyb3JTdHJpbmcpOworICAgIGlmICghbV9kb21FZGl0b3ItPnJl
bW92ZUF0dHJpYnV0ZSgqZWxlbWVudCwgbmFtZSwgZXJyb3JTdHJpbmcpKQorICAgICAgICByZXR1
cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAot
dm9pZCBJbnNwZWN0b3JET01BZ2VudDo6cmVtb3ZlTm9kZShFcnJvclN0cmluZyYgZXJyb3JTdHJp
bmcsIGludCBub2RlSWQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JE
T01BZ2VudDo6cmVtb3ZlTm9kZShQcm90b2NvbDo6RE9NOjpOb2RlSWQgbm9kZUlkKQogeworICAg
IFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIE5vZGUqIG5vZGUgPSBh
c3NlcnRFZGl0YWJsZU5vZGUoZXJyb3JTdHJpbmcsIG5vZGVJZCk7CiAgICAgaWYgKCFub2RlKQot
ICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmlu
Zyk7CiAKICAgICBDb250YWluZXJOb2RlKiBwYXJlbnROb2RlID0gbm9kZS0+cGFyZW50Tm9kZSgp
OwotICAgIGlmICghcGFyZW50Tm9kZSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJDYW5ub3Qg
cmVtb3ZlIGRldGFjaGVkIG5vZGUiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYg
KCFwYXJlbnROb2RlKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkNhbm5vdCByZW1v
dmUgZGV0YWNoZWQgbm9kZSJfcyk7CiAKLSAgICBtX2RvbUVkaXRvci0+cmVtb3ZlQ2hpbGQoKnBh
cmVudE5vZGUsICpub2RlLCBlcnJvclN0cmluZyk7CisgICAgaWYgKCFtX2RvbUVkaXRvci0+cmVt
b3ZlQ2hpbGQoKnBhcmVudE5vZGUsICpub2RlLCBlcnJvclN0cmluZykpCisgICAgICAgIHJldHVy
biBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12
b2lkIEluc3BlY3RvckRPTUFnZW50OjpzZXROb2RlTmFtZShFcnJvclN0cmluZyYgZXJyb3JTdHJp
bmcsIGludCBub2RlSWQsIGNvbnN0IFN0cmluZyYgdGFnTmFtZSwgaW50KiBuZXdJZCkKK1Byb3Rv
Y29sOjpFcnJvclN0cmluZ09yPFByb3RvY29sOjpET006Ok5vZGVJZD4gSW5zcGVjdG9yRE9NQWdl
bnQ6OnNldE5vZGVOYW1lKFByb3RvY29sOjpET006Ok5vZGVJZCBub2RlSWQsIGNvbnN0IFN0cmlu
ZyYgdGFnTmFtZSkKIHsKLSAgICAqbmV3SWQgPSAwOworICAgIFByb3RvY29sOjpFcnJvclN0cmlu
ZyBlcnJvclN0cmluZzsKIAotICAgIFJlZlB0cjxOb2RlPiBvbGROb2RlID0gbm9kZUZvcklkKG5v
ZGVJZCk7Ci0gICAgaWYgKCFpczxFbGVtZW50PihvbGROb2RlKSkKLSAgICAgICAgcmV0dXJuOwor
ICAgIGF1dG8gb2xkTm9kZSA9IGFzc2VydEVsZW1lbnQoZXJyb3JTdHJpbmcsIG5vZGVJZCk7Cisg
ICAgaWYgKCFvbGROb2RlKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJp
bmcpOwogCiAgICAgYXV0byBjcmVhdGVFbGVtZW50UmVzdWx0ID0gb2xkTm9kZS0+ZG9jdW1lbnQo
KS5jcmVhdGVFbGVtZW50Rm9yQmluZGluZ3ModGFnTmFtZSk7CiAgICAgaWYgKGNyZWF0ZUVsZW1l
bnRSZXN1bHQuaGFzRXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJu
IG1ha2VVbmV4cGVjdGVkKEluc3BlY3RvckRPTUFnZW50Ojp0b0Vycm9yU3RyaW5nKGNyZWF0ZUVs
ZW1lbnRSZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpKSk7CisKICAgICBhdXRvIG5ld0VsZW1lbnQg
PSBjcmVhdGVFbGVtZW50UmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpOwogCiAgICAgLy8gQ29w
eSBvdmVyIHRoZSBvcmlnaW5hbCBub2RlJ3MgYXR0cmlidXRlcy4KLSAgICBuZXdFbGVtZW50LT5j
bG9uZUF0dHJpYnV0ZXNGcm9tRWxlbWVudChkb3duY2FzdDxFbGVtZW50Pigqb2xkTm9kZSkpOwor
ICAgIG5ld0VsZW1lbnQtPmNsb25lQXR0cmlidXRlc0Zyb21FbGVtZW50KCpvbGROb2RlKTsKIAog
ICAgIC8vIENvcHkgb3ZlciB0aGUgb3JpZ2luYWwgbm9kZSdzIGNoaWxkcmVuLgogICAgIFJlZlB0
cjxOb2RlPiBjaGlsZDsKICAgICB3aGlsZSAoKGNoaWxkID0gb2xkTm9kZS0+Zmlyc3RDaGlsZCgp
KSkgewogICAgICAgICBpZiAoIW1fZG9tRWRpdG9yLT5pbnNlcnRCZWZvcmUobmV3RWxlbWVudCwg
KmNoaWxkLCAwLCBlcnJvclN0cmluZykpCi0gICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogICAgIH0KIAogICAgIC8vIFJl
cGxhY2UgdGhlIG9sZCBub2RlIHdpdGggdGhlIG5ldyBub2RlCiAgICAgUmVmUHRyPENvbnRhaW5l
ck5vZGU+IHBhcmVudCA9IG9sZE5vZGUtPnBhcmVudE5vZGUoKTsKICAgICBpZiAoIW1fZG9tRWRp
dG9yLT5pbnNlcnRCZWZvcmUoKnBhcmVudCwgbmV3RWxlbWVudC5jb3B5UmVmKCksIG9sZE5vZGUt
Pm5leHRTaWJsaW5nKCksIGVycm9yU3RyaW5nKSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICBy
ZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogICAgIGlmICghbV9kb21FZGl0b3It
PnJlbW92ZUNoaWxkKCpwYXJlbnQsICpvbGROb2RlLCBlcnJvclN0cmluZykpCi0gICAgICAgIHJl
dHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAotICAg
ICpuZXdJZCA9IHB1c2hOb2RlUGF0aFRvRnJvbnRlbmQoZXJyb3JTdHJpbmcsIG5ld0VsZW1lbnQu
cHRyKCkpOworICAgIGF1dG8gcmVzdWx0Tm9kZUlkID0gcHVzaE5vZGVQYXRoVG9Gcm9udGVuZChl
cnJvclN0cmluZywgbmV3RWxlbWVudC5wdHIoKSk7CiAgICAgaWYgKG1fY2hpbGRyZW5SZXF1ZXN0
ZWQuY29udGFpbnMobm9kZUlkKSkKLSAgICAgICAgcHVzaENoaWxkTm9kZXNUb0Zyb250ZW5kKCpu
ZXdJZCk7CisgICAgICAgIHB1c2hDaGlsZE5vZGVzVG9Gcm9udGVuZChyZXN1bHROb2RlSWQpOwor
CisgICAgcmV0dXJuIHJlc3VsdE5vZGVJZDsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6
Z2V0T3V0ZXJIVE1MKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJZCwgV1RGOjpT
dHJpbmcqIG91dGVySFRNTCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPFN0cmluZz4gSW5zcGVj
dG9yRE9NQWdlbnQ6OmdldE91dGVySFRNTChQcm90b2NvbDo6RE9NOjpOb2RlSWQgbm9kZUlkKQog
eworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIE5vZGUqIG5v
ZGUgPSBhc3NlcnROb2RlKGVycm9yU3RyaW5nLCBub2RlSWQpOwogICAgIGlmICghbm9kZSkKLSAg
ICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcp
OwogCi0gICAgKm91dGVySFRNTCA9IHNlcmlhbGl6ZUZyYWdtZW50KCpub2RlLCBTZXJpYWxpemVk
Tm9kZXM6OlN1YnRyZWVJbmNsdWRpbmdOb2RlKTsKKyAgICByZXR1cm4gc2VyaWFsaXplRnJhZ21l
bnQoKm5vZGUsIFNlcmlhbGl6ZWROb2Rlczo6U3VidHJlZUluY2x1ZGluZ05vZGUpOwogfQogCi12
b2lkIEluc3BlY3RvckRPTUFnZW50OjpzZXRPdXRlckhUTUwoRXJyb3JTdHJpbmcmIGVycm9yU3Ry
aW5nLCBpbnQgbm9kZUlkLCBjb25zdCBTdHJpbmcmIG91dGVySFRNTCkKK1Byb3RvY29sOjpFcnJv
clN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRPTUFnZW50OjpzZXRPdXRlckhUTUwoUHJvdG9jb2w6
OkRPTTo6Tm9kZUlkIG5vZGVJZCwgY29uc3QgU3RyaW5nJiBvdXRlckhUTUwpCiB7CisgICAgUHJv
dG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAgICAgaWYgKCFub2RlSWQpIHsKICAg
ICAgICAgRE9NUGF0Y2hTdXBwb3J0IHsgKm1fZG9tRWRpdG9yLCAqbV9kb2N1bWVudCB9LnBhdGNo
RG9jdW1lbnQob3V0ZXJIVE1MKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4geyB9
OwogICAgIH0KIAogICAgIE5vZGUqIG5vZGUgPSBhc3NlcnRFZGl0YWJsZU5vZGUoZXJyb3JTdHJp
bmcsIG5vZGVJZCk7CiAgICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJl
dHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAgICBEb2N1bWVudCYgZG9jdW1l
bnQgPSBub2RlLT5kb2N1bWVudCgpOwotICAgIGlmICghZG9jdW1lbnQuaXNIVE1MRG9jdW1lbnQo
KSAmJiAhZG9jdW1lbnQuaXNYTUxEb2N1bWVudCgpKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0g
IkRvY3VtZW50IG9mIG5vZGUgZm9yIGdpdmVuIG5vZGVJZCBpcyBub3QgSFRNTC9YTUwiX3M7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKCFkb2N1bWVudC5pc0hUTUxEb2N1bWVudCgp
ICYmICFkb2N1bWVudC5pc1hNTERvY3VtZW50KCkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBl
Y3RlZCgiRG9jdW1lbnQgb2Ygbm9kZSBmb3IgZ2l2ZW4gbm9kZUlkIGlzIG5vdCBIVE1ML1hNTCJf
cyk7CiAKICAgICBOb2RlKiBuZXdOb2RlID0gbnVsbHB0cjsKICAgICBpZiAoIW1fZG9tRWRpdG9y
LT5zZXRPdXRlckhUTUwoKm5vZGUsIG91dGVySFRNTCwgbmV3Tm9kZSwgZXJyb3JTdHJpbmcpKQot
ICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmlu
Zyk7CiAKICAgICBpZiAoIW5ld05vZGUpIHsKICAgICAgICAgLy8gVGhlIG9ubHkgY2hpbGQgbm9k
ZSBoYXMgYmVlbiBkZWxldGVkLgotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB7IH07
CiAgICAgfQogCi0gICAgaW50IG5ld0lkID0gcHVzaE5vZGVQYXRoVG9Gcm9udGVuZChlcnJvclN0
cmluZywgbmV3Tm9kZSk7CisgICAgYXV0byBuZXdJZCA9IHB1c2hOb2RlUGF0aFRvRnJvbnRlbmQo
ZXJyb3JTdHJpbmcsIG5ld05vZGUpOwogCiAgICAgYm9vbCBjaGlsZHJlblJlcXVlc3RlZCA9IG1f
Y2hpbGRyZW5SZXF1ZXN0ZWQuY29udGFpbnMobm9kZUlkKTsKICAgICBpZiAoY2hpbGRyZW5SZXF1
ZXN0ZWQpCiAgICAgICAgIHB1c2hDaGlsZE5vZGVzVG9Gcm9udGVuZChuZXdJZCk7CisKKyAgICBy
ZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjppbnNlcnRBZGphY2VudEhU
TUwoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkLCBjb25zdCBTdHJpbmcmIHBv
c2l0aW9uLCBjb25zdCBTdHJpbmcmIGh0bWwpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lk
PiBJbnNwZWN0b3JET01BZ2VudDo6aW5zZXJ0QWRqYWNlbnRIVE1MKFByb3RvY29sOjpET006Ok5v
ZGVJZCBub2RlSWQsIGNvbnN0IFN0cmluZyYgcG9zaXRpb24sIGNvbnN0IFN0cmluZyYgaHRtbCkK
IHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBOb2RlKiBu
b2RlID0gYXNzZXJ0RWRpdGFibGVOb2RlKGVycm9yU3RyaW5nLCBub2RlSWQpOwogICAgIGlmICgh
bm9kZSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJy
b3JTdHJpbmcpOwogCi0gICAgaWYgKCFpczxFbGVtZW50Pihub2RlKSkgewotICAgICAgICBlcnJv
clN0cmluZyA9ICJOb2RlIGZvciBnaXZlbiBub2RlSWQgaXMgbm90IGFuIGVsZW1lbnQiX3M7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKCFpczxFbGVtZW50Pihub2RlKSkKKyAgICAg
ICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJOb2RlIGZvciBnaXZlbiBub2RlSWQgaXMgbm90IGFu
IGVsZW1lbnQiX3MpOwogCi0gICAgbV9kb21FZGl0b3ItPmluc2VydEFkamFjZW50SFRNTChkb3du
Y2FzdDxFbGVtZW50Pigqbm9kZSksIHBvc2l0aW9uLCBodG1sLCBlcnJvclN0cmluZyk7CisgICAg
aWYgKCFtX2RvbUVkaXRvci0+aW5zZXJ0QWRqYWNlbnRIVE1MKGRvd25jYXN0PEVsZW1lbnQ+KCpu
b2RlKSwgcG9zaXRpb24sIGh0bWwsIGVycm9yU3RyaW5nKSkKKyAgICAgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5z
cGVjdG9yRE9NQWdlbnQ6OnNldE5vZGVWYWx1ZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGlu
dCBub2RlSWQsIGNvbnN0IFN0cmluZyYgdmFsdWUpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2
b2lkPiBJbnNwZWN0b3JET01BZ2VudDo6c2V0Tm9kZVZhbHVlKFByb3RvY29sOjpET006Ok5vZGVJ
ZCBub2RlSWQsIGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3Ry
aW5nIGVycm9yU3RyaW5nOworCiAgICAgTm9kZSogbm9kZSA9IGFzc2VydEVkaXRhYmxlTm9kZShl
cnJvclN0cmluZywgbm9kZUlkKTsKICAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJldHVybjsKKyAg
ICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAotICAgIGlmICghaXM8
VGV4dD4oKm5vZGUpKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIk5vZGUgZm9yIGdpdmVuIG5v
ZGVJZCBpcyBub3QgdGV4dCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoIWlz
PFRleHQ+KCpub2RlKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJOb2RlIGZvciBn
aXZlbiBub2RlSWQgaXMgbm90IHRleHQiX3MpOwogCi0gICAgbV9kb21FZGl0b3ItPnJlcGxhY2VX
aG9sZVRleHQoZG93bmNhc3Q8VGV4dD4oKm5vZGUpLCB2YWx1ZSwgZXJyb3JTdHJpbmcpOworICAg
IGlmICghbV9kb21FZGl0b3ItPnJlcGxhY2VXaG9sZVRleHQoZG93bmNhc3Q8VGV4dD4oKm5vZGUp
LCB2YWx1ZSwgZXJyb3JTdHJpbmcpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJy
b3JTdHJpbmcpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2Vu
dDo6Z2V0U3VwcG9ydGVkRXZlbnROYW1lcyhFcnJvclN0cmluZyYsIFJlZlB0cjxKU09OOjpBcnJh
eU9mPFN0cmluZz4+JiBldmVudE5hbWVzKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEpT
T046OkFycmF5T2Y8U3RyaW5nPj4+IEluc3BlY3RvckRPTUFnZW50OjpnZXRTdXBwb3J0ZWRFdmVu
dE5hbWVzKCkKIHsKLSAgICBldmVudE5hbWVzID0gSlNPTjo6QXJyYXlPZjxTdHJpbmc+OjpjcmVh
dGUoKTsKKyAgICBhdXRvIGV2ZW50TmFtZXMgPSBKU09OOjpBcnJheU9mPFN0cmluZz46OmNyZWF0
ZSgpOwogCiAjZGVmaW5lIERPTV9FVkVOVF9OQU1FU19BREQobmFtZSkgZXZlbnROYW1lcy0+YWRk
SXRlbSgjbmFtZSk7CiAgICAgRE9NX0VWRU5UX05BTUVTX0ZPUl9FQUNIKERPTV9FVkVOVF9OQU1F
U19BREQpCiAjdW5kZWYgRE9NX0VWRU5UX05BTUVTX0FERAorCisgICAgcmV0dXJuIFdURk1vdmUo
ZXZlbnROYW1lcyk7CiB9CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRD
SEVSUykKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmdldERhdGFCaW5kaW5nc0Zvck5vZGUoRXJy
b3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgLyogbm9kZUlkICovLCBSZWZQdHI8SlNPTjo6QXJy
YXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkRhdGFCaW5kaW5nPj4mIC8qIGRhdGFCaW5k
aW5ncyAqLykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPFByb3Rv
Y29sOjpET006OkRhdGFCaW5kaW5nPj4+IEluc3BlY3RvckRPTUFnZW50OjpnZXREYXRhQmluZGlu
Z3NGb3JOb2RlKFByb3RvY29sOjpET006Ok5vZGVJZCkKIHsKLSAgICBlcnJvclN0cmluZyA9ICJO
b3Qgc3VwcG9ydGVkIl9zOworICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTm90IHN1cHBvcnRl
ZCJfcyk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmdldEFzc29jaWF0ZWREYXRhRm9y
Tm9kZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCAvKiBub2RlSWQgKi8sIE9wdGlvbmFs
PFN0cmluZz4mIC8qIGFzc29jaWF0ZWREYXRhICovKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8
U3RyaW5nPiBJbnNwZWN0b3JET01BZ2VudDo6Z2V0QXNzb2NpYXRlZERhdGFGb3JOb2RlKFByb3Rv
Y29sOjpET006Ok5vZGVJZCkKIHsKLSAgICBlcnJvclN0cmluZyA9ICJOb3Qgc3VwcG9ydGVkIl9z
OworICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTm90IHN1cHBvcnRlZCJfcyk7CiB9CiAjZW5k
aWYKIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Z2V0RXZlbnRMaXN0ZW5lcnNGb3JOb2RlKEVy
cm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJZCwgUmVmUHRyPEpTT046OkFycmF5T2Y8
SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpFdmVudExpc3RlbmVyPj4mIGxpc3RlbmVyc0FycmF5
KQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkRP
TTo6RXZlbnRMaXN0ZW5lcj4+PiBJbnNwZWN0b3JET01BZ2VudDo6Z2V0RXZlbnRMaXN0ZW5lcnNG
b3JOb2RlKFByb3RvY29sOjpET006Ok5vZGVJZCBub2RlSWQpCiB7Ci0gICAgbGlzdGVuZXJzQXJy
YXkgPSBKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6RXZlbnRMaXN0ZW5l
cj46OmNyZWF0ZSgpOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKIAog
ICAgIGF1dG8qIG5vZGUgPSBhc3NlcnROb2RlKGVycm9yU3RyaW5nLCBub2RlSWQpOwogICAgIGlm
ICghbm9kZSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQo
ZXJyb3JTdHJpbmcpOwogCiAgICAgVmVjdG9yPFJlZlB0cjxFdmVudFRhcmdldD4+IGFuY2VzdG9y
czsKICAgICBhbmNlc3RvcnMuYXBwZW5kKG5vZGUpOwpAQCAtOTI5LDggKzk1OCwxMCBAQCB2b2lk
IEluc3BlY3RvckRPTUFnZW50OjpnZXRFdmVudExpc3RlbmVyc0Zvck5vZGUoRXJyb3JTdHJpbmcm
IGVycm9yU3RyaW5nLCBpbnQgbgogICAgICAgICB9CiAgICAgfQogCisgICAgYXV0byBsaXN0ZW5l
cnMgPSBKU09OOjpBcnJheU9mPFByb3RvY29sOjpET006OkV2ZW50TGlzdGVuZXI+OjpjcmVhdGUo
KTsKKwogICAgIGF1dG8gYWRkTGlzdGVuZXIgPSBbJl0gKFJlZ2lzdGVyZWRFdmVudExpc3RlbmVy
JiBsaXN0ZW5lciwgY29uc3QgRXZlbnRMaXN0ZW5lckluZm8mIGluZm8pIHsKLSAgICAgICAgaW50
IGlkZW50aWZpZXIgPSAwOworICAgICAgICBQcm90b2NvbDo6RE9NOjpFdmVudExpc3RlbmVySWQg
aWRlbnRpZmllciA9IDA7CiAgICAgICAgIGJvb2wgZGlzYWJsZWQgPSBmYWxzZTsKICAgICAgICAg
UmVmUHRyPEpTQzo6QnJlYWtwb2ludD4gYnJlYWtwb2ludDsKIApAQCAtOTUzLDcgKzk4NCw3IEBA
IHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmdldEV2ZW50TGlzdGVuZXJzRm9yTm9kZShFcnJvclN0
cmluZyYgZXJyb3JTdHJpbmcsIGludCBuCiAgICAgICAgICAgICBtX2V2ZW50TGlzdGVuZXJFbnRy
aWVzLmFkZChpZGVudGlmaWVyLCBpbnNwZWN0b3JFdmVudExpc3RlbmVyKTsKICAgICAgICAgfQog
Ci0gICAgICAgIGxpc3RlbmVyc0FycmF5LT5hZGRJdGVtKGJ1aWxkT2JqZWN0Rm9yRXZlbnRMaXN0
ZW5lcihsaXN0ZW5lciwgaWRlbnRpZmllciwgKmluZm8uZXZlbnRUYXJnZXQsIGluZm8uZXZlbnRU
eXBlLCBkaXNhYmxlZCwgYnJlYWtwb2ludCkpOworICAgICAgICBsaXN0ZW5lcnMtPmFkZEl0ZW0o
YnVpbGRPYmplY3RGb3JFdmVudExpc3RlbmVyKGxpc3RlbmVyLCBpZGVudGlmaWVyLCAqaW5mby5l
dmVudFRhcmdldCwgaW5mby5ldmVudFR5cGUsIGRpc2FibGVkLCBicmVha3BvaW50KSk7CiAgICAg
fTsKIAogICAgIC8vIEdldCBDYXB0dXJpbmcgTGlzdGVuZXJzIChpbiB0aGlzIG9yZGVyKQpAQCAt
OTc2LDgwICsxMDA3LDgxIEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmdldEV2ZW50TGlzdGVu
ZXJzRm9yTm9kZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBuCiAKICAgICBpZiAobV9p
bnNwZWN0ZWROb2RlID09IG5vZGUpCiAgICAgICAgIG1fc3VwcHJlc3NFdmVudExpc3RlbmVyQ2hh
bmdlZEV2ZW50ID0gZmFsc2U7CisKKyAgICByZXR1cm4gV1RGTW92ZShsaXN0ZW5lcnMpOwogfQog
Ci12b2lkIEluc3BlY3RvckRPTUFnZW50OjpzZXRFdmVudExpc3RlbmVyRGlzYWJsZWQoRXJyb3JT
dHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgZXZlbnRMaXN0ZW5lcklkLCBib29sIGRpc2FibGVkKQor
UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yRE9NQWdlbnQ6OnNldEV2ZW50
TGlzdGVuZXJEaXNhYmxlZChQcm90b2NvbDo6RE9NOjpFdmVudExpc3RlbmVySWQgZXZlbnRMaXN0
ZW5lcklkLCBib29sIGRpc2FibGVkKQogewogICAgIGF1dG8gaXQgPSBtX2V2ZW50TGlzdGVuZXJF
bnRyaWVzLmZpbmQoZXZlbnRMaXN0ZW5lcklkKTsKLSAgICBpZiAoaXQgPT0gbV9ldmVudExpc3Rl
bmVyRW50cmllcy5lbmQoKSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIGV2ZW50
IGxpc3RlbmVyIGZvciBnaXZlbiBldmVudExpc3RlbmVySWQiX3M7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9CisgICAgaWYgKGl0ID09IG1fZXZlbnRMaXN0ZW5lckVudHJpZXMuZW5kKCkpCisgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTWlzc2luZyBldmVudCBsaXN0ZW5lciBmb3IgZ2l2
ZW4gZXZlbnRMaXN0ZW5lcklkIl9zKTsKIAogICAgIGl0LT52YWx1ZS5kaXNhYmxlZCA9IGRpc2Fi
bGVkOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c2V0
QnJlYWtwb2ludEZvckV2ZW50TGlzdGVuZXIoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQg
ZXZlbnRMaXN0ZW5lcklkLCBjb25zdCBKU09OOjpPYmplY3QqIG9wdGlvbnNQYXlsb2FkKQorUHJv
dG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yRE9NQWdlbnQ6OnNldEJyZWFrcG9p
bnRGb3JFdmVudExpc3RlbmVyKFByb3RvY29sOjpET006OkV2ZW50TGlzdGVuZXJJZCBldmVudExp
c3RlbmVySWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgb3B0aW9ucykKIHsKKyAgICBQcm90b2Nv
bDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBhdXRvIGl0ID0gbV9ldmVudExpc3Rl
bmVyRW50cmllcy5maW5kKGV2ZW50TGlzdGVuZXJJZCk7Ci0gICAgaWYgKGl0ID09IG1fZXZlbnRM
aXN0ZW5lckVudHJpZXMuZW5kKCkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWlzc2luZyBl
dmVudCBsaXN0ZW5lciBmb3IgZ2l2ZW4gZXZlbnRMaXN0ZW5lcklkIl9zOwotICAgICAgICByZXR1
cm47Ci0gICAgfQorICAgIGlmIChpdCA9PSBtX2V2ZW50TGlzdGVuZXJFbnRyaWVzLmVuZCgpKQor
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk1pc3NpbmcgZXZlbnQgbGlzdGVuZXIgZm9y
IGdpdmVuIGV2ZW50TGlzdGVuZXJJZCJfcyk7CiAKLSAgICBpZiAoaXQtPnZhbHVlLmJyZWFrcG9p
bnQpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiQnJlYWtwb2ludCBmb3IgZ2l2ZW4gZXZlbnRM
aXN0ZW5lcklkIGFscmVhZHkgZXhpc3RzIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAg
IGlmIChpdC0+dmFsdWUuYnJlYWtwb2ludCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVk
KCJCcmVha3BvaW50IGZvciBnaXZlbiBldmVudExpc3RlbmVySWQgYWxyZWFkeSBleGlzdHMiX3Mp
OwogCi0gICAgaXQtPnZhbHVlLmJyZWFrcG9pbnQgPSBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojpk
ZWJ1Z2dlckJyZWFrcG9pbnRGcm9tUGF5bG9hZChlcnJvclN0cmluZywgb3B0aW9uc1BheWxvYWQp
OworICAgIGl0LT52YWx1ZS5icmVha3BvaW50ID0gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGVi
dWdnZXJCcmVha3BvaW50RnJvbVBheWxvYWQoZXJyb3JTdHJpbmcsIFdURk1vdmUob3B0aW9ucykp
OworICAgIGlmICghaXQtPnZhbHVlLmJyZWFrcG9pbnQpCisgICAgICAgIHJldHVybiBtYWtlVW5l
eHBlY3RlZChlcnJvclN0cmluZyk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3Bl
Y3RvckRPTUFnZW50OjpyZW1vdmVCcmVha3BvaW50Rm9yRXZlbnRMaXN0ZW5lcihFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcsIGludCBldmVudExpc3RlbmVySWQpCitQcm90b2NvbDo6RXJyb3JTdHJp
bmdPcjx2b2lkPiBJbnNwZWN0b3JET01BZ2VudDo6cmVtb3ZlQnJlYWtwb2ludEZvckV2ZW50TGlz
dGVuZXIoUHJvdG9jb2w6OkRPTTo6RXZlbnRMaXN0ZW5lcklkIGV2ZW50TGlzdGVuZXJJZCkKIHsK
ICAgICBhdXRvIGl0ID0gbV9ldmVudExpc3RlbmVyRW50cmllcy5maW5kKGV2ZW50TGlzdGVuZXJJ
ZCk7Ci0gICAgaWYgKGl0ID09IG1fZXZlbnRMaXN0ZW5lckVudHJpZXMuZW5kKCkpIHsKLSAgICAg
ICAgZXJyb3JTdHJpbmcgPSAiTWlzc2luZyBldmVudCBsaXN0ZW5lciBmb3IgZ2l2ZW4gZXZlbnRM
aXN0ZW5lcklkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmIChpdCA9PSBtX2V2
ZW50TGlzdGVuZXJFbnRyaWVzLmVuZCgpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQo
Ik1pc3NpbmcgZXZlbnQgbGlzdGVuZXIgZm9yIGdpdmVuIGV2ZW50TGlzdGVuZXJJZCJfcyk7CiAK
ICAgICBpZiAoIWl0LT52YWx1ZS5icmVha3BvaW50KQotICAgICAgICBlcnJvclN0cmluZyA9ICJC
cmVha3BvaW50IGZvciBnaXZlbiBldmVudExpc3RlbmVySWQgbWlzc2luZyJfczsKKyAgICAgICAg
cmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJCcmVha3BvaW50IGZvciBnaXZlbiBldmVudExpc3RlbmVy
SWQgbWlzc2luZyJfcyk7CiAKICAgICBpdC0+dmFsdWUuYnJlYWtwb2ludCA9IG51bGxwdHI7CisK
KyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpnZXRBY2Nlc3Np
YmlsaXR5UHJvcGVydGllc0Zvck5vZGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgbm9k
ZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVy
dGllcz4mIGF4UHJvcGVydGllcykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxQcm90b2Nv
bDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllcz4+IEluc3BlY3RvckRPTUFnZW50OjpnZXRB
Y2Nlc3NpYmlsaXR5UHJvcGVydGllc0Zvck5vZGUoUHJvdG9jb2w6OkRPTTo6Tm9kZUlkIG5vZGVJ
ZCkKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBOb2Rl
KiBub2RlID0gYXNzZXJ0Tm9kZShlcnJvclN0cmluZywgbm9kZUlkKTsKICAgICBpZiAoIW5vZGUp
Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3Ry
aW5nKTsKIAotICAgIGF4UHJvcGVydGllcyA9IGJ1aWxkT2JqZWN0Rm9yQWNjZXNzaWJpbGl0eVBy
b3BlcnRpZXMobm9kZSk7CisgICAgcmV0dXJuIGJ1aWxkT2JqZWN0Rm9yQWNjZXNzaWJpbGl0eVBy
b3BlcnRpZXMoKm5vZGUpOwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpwZXJmb3JtU2Vh
cmNoKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBxdWVyeSwgY29uc3Qg
SlNPTjo6QXJyYXkqIG5vZGVJZHMsIGNvbnN0IGJvb2wqIGNhc2VTZW5zaXRpdmUsIFN0cmluZyog
c2VhcmNoSWQsIGludCogcmVzdWx0Q291bnQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxzdGQ6
OnR1cGxlPFN0cmluZyAvKiBzZWFyY2hJZCAqLywgaW50IC8qIHJlc3VsdENvdW50ICovPj4gSW5z
cGVjdG9yRE9NQWdlbnQ6OnBlcmZvcm1TZWFyY2goY29uc3QgU3RyaW5nJiBxdWVyeSwgUmVmUHRy
PEpTT046OkFycmF5PiYmIG5vZGVJZHMsIE9wdGlvbmFsPGJvb2w+JiYgY2FzZVNlbnNpdGl2ZSkK
IHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICAvLyBGSVhN
RTogU2VhcmNoIHdvcmtzIHdpdGggbm9kZSBncmFudWxhcml0eSAtIG51bWJlciBvZiBtYXRjaGVz
IHdpdGhpbiBub2RlIGlzIG5vdCBjYWxjdWxhdGVkLgogICAgIEluc3BlY3Rvck5vZGVGaW5kZXIg
ZmluZGVyKHF1ZXJ5LCBjYXNlU2Vuc2l0aXZlICYmICpjYXNlU2Vuc2l0aXZlKTsKIAogICAgIGlm
IChub2RlSWRzKSB7CiAgICAgICAgIGZvciAoYXV0byYgbm9kZVZhbHVlIDogKm5vZGVJZHMpIHsK
LSAgICAgICAgICAgIGlmICghbm9kZVZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgZXJyb3JTdHJp
bmcgPSAiVW5leHBlY3RlZCBub24taW50ZWdlciBpdGVtIGluIGdpdmVuIG5vZGVJZHMiX3M7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaW50IG5v
ZGVJZCA9IDA7Ci0gICAgICAgICAgICBpZiAoIW5vZGVWYWx1ZS0+YXNJbnRlZ2VyKG5vZGVJZCkp
IHsKLSAgICAgICAgICAgICAgICBlcnJvclN0cmluZyA9ICJVbmV4cGVjdGVkIG5vbi1pbnRlZ2Vy
IGl0ZW0gaW4gZ2l2ZW4gbm9kZUlkcyJfczsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBOb2RlKiBub2RlID0gYXNzZXJ0Tm9kZShlcnJvclN0cmlu
Zywgbm9kZUlkKTsKLSAgICAgICAgICAgIGlmICghbm9kZSkgewotICAgICAgICAgICAgICAgIC8v
IGFzc2VydE5vZGUgc2hvdWxkIGhhdmUgZmlsbGVkIHRoZSBlcnJvclN0cmluZyBmb3IgdXMuCi0g
ICAgICAgICAgICAgICAgQVNTRVJUKGVycm9yU3RyaW5nLmxlbmd0aCgpKTsKLSAgICAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBhdXRvIG5vZGVJZCA9IG5v
ZGVWYWx1ZS0+YXNJbnRlZ2VyKCk7CisgICAgICAgICAgICBpZiAoIW5vZGVJZCkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIlVuZXhwZWN0ZWQgbm9uLWludGVnZXIgaXRl
bSBpbiBnaXZlbiBub2RlSWRzIl9zKTsKKworICAgICAgICAgICAgTm9kZSogbm9kZSA9IGFzc2Vy
dE5vZGUoZXJyb3JTdHJpbmcsICpub2RlSWQpOworICAgICAgICAgICAgaWYgKCFub2RlKQorICAg
ICAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CisKICAgICAg
ICAgICAgIGZpbmRlci5wZXJmb3JtU2VhcmNoKG5vZGUpOwogICAgICAgICB9CiAgICAgfSBlbHNl
IHsKQEAgLTEwNTgsMzcgKzEwOTAsMzYgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6cGVyZm9y
bVNlYXJjaChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgcXUKICAgICAg
ICAgZmluZGVyLnBlcmZvcm1TZWFyY2gobV9kb2N1bWVudC5nZXQoKSk7CiAgICAgfQogCi0gICAg
KnNlYXJjaElkID0gSWRlbnRpZmllcnNGYWN0b3J5OjpjcmVhdGVJZGVudGlmaWVyKCk7CisgICAg
YXV0byBzZWFyY2hJZCA9IElkZW50aWZpZXJzRmFjdG9yeTo6Y3JlYXRlSWRlbnRpZmllcigpOwog
Ci0gICAgYXV0byYgcmVzdWx0c1ZlY3RvciA9IG1fc2VhcmNoUmVzdWx0cy5hZGQoKnNlYXJjaElk
LCBWZWN0b3I8UmVmUHRyPE5vZGU+PigpKS5pdGVyYXRvci0+dmFsdWU7CisgICAgYXV0byYgcmVz
dWx0c1ZlY3RvciA9IG1fc2VhcmNoUmVzdWx0cy5hZGQoc2VhcmNoSWQsIFZlY3RvcjxSZWZQdHI8
Tm9kZT4+KCkpLml0ZXJhdG9yLT52YWx1ZTsKICAgICBmb3IgKGF1dG8mIHJlc3VsdCA6IGZpbmRl
ci5yZXN1bHRzKCkpCiAgICAgICAgIHJlc3VsdHNWZWN0b3IuYXBwZW5kKHJlc3VsdCk7CiAKLSAg
ICAqcmVzdWx0Q291bnQgPSByZXN1bHRzVmVjdG9yLnNpemUoKTsKKyAgICByZXR1cm4geyB7IHNl
YXJjaElkLCByZXN1bHRzVmVjdG9yLnNpemUoKSB9IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9N
QWdlbnQ6OmdldFNlYXJjaFJlc3VsdHMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBT
dHJpbmcmIHNlYXJjaElkLCBpbnQgZnJvbUluZGV4LCBpbnQgdG9JbmRleCwgUmVmUHRyPEpTT046
OkFycmF5T2Y8aW50Pj4mIG5vZGVJZHMpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SlNP
Tjo6QXJyYXlPZjxQcm90b2NvbDo6RE9NOjpOb2RlSWQ+Pj4gSW5zcGVjdG9yRE9NQWdlbnQ6Omdl
dFNlYXJjaFJlc3VsdHMoY29uc3QgU3RyaW5nJiBzZWFyY2hJZCwgaW50IGZyb21JbmRleCwgaW50
IHRvSW5kZXgpCiB7CiAgICAgU2VhcmNoUmVzdWx0czo6aXRlcmF0b3IgaXQgPSBtX3NlYXJjaFJl
c3VsdHMuZmluZChzZWFyY2hJZCk7Ci0gICAgaWYgKGl0ID09IG1fc2VhcmNoUmVzdWx0cy5lbmQo
KSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIHNlYXJjaCByZXN1bHQgZm9yIGdp
dmVuIHNlYXJjaElkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmIChpdCA9PSBt
X3NlYXJjaFJlc3VsdHMuZW5kKCkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTWlz
c2luZyBzZWFyY2ggcmVzdWx0IGZvciBnaXZlbiBzZWFyY2hJZCJfcyk7CiAKICAgICBpbnQgc2l6
ZSA9IGl0LT52YWx1ZS5zaXplKCk7Ci0gICAgaWYgKGZyb21JbmRleCA8IDAgfHwgdG9JbmRleCA+
IHNpemUgfHwgZnJvbUluZGV4ID49IHRvSW5kZXgpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAi
SW52YWxpZCBzZWFyY2ggcmVzdWx0IHJhbmdlIGZvciBnaXZlbiBmcm9tSW5kZXggYW5kIHRvSW5k
ZXgiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKGZyb21JbmRleCA8IDAgfHwg
dG9JbmRleCA+IHNpemUgfHwgZnJvbUluZGV4ID49IHRvSW5kZXgpCisgICAgICAgIHJldHVybiBt
YWtlVW5leHBlY3RlZCgiSW52YWxpZCBzZWFyY2ggcmVzdWx0IHJhbmdlIGZvciBnaXZlbiBmcm9t
SW5kZXggYW5kIHRvSW5kZXgiX3MpOwogCi0gICAgbm9kZUlkcyA9IEpTT046OkFycmF5T2Y8aW50
Pjo6Y3JlYXRlKCk7CisgICAgYXV0byBub2RlSWRzID0gSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6
RE9NOjpOb2RlSWQ+OjpjcmVhdGUoKTsKICAgICBmb3IgKGludCBpID0gZnJvbUluZGV4OyBpIDwg
dG9JbmRleDsgKytpKQogICAgICAgICBub2RlSWRzLT5hZGRJdGVtKHB1c2hOb2RlUGF0aFRvRnJv
bnRlbmQoKGl0LT52YWx1ZSlbaV0uZ2V0KCkpKTsKKyAgICByZXR1cm4gV1RGTW92ZShub2RlSWRz
KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6ZGlzY2FyZFNlYXJjaFJlc3VsdHMoRXJy
b3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHNlYXJjaElkKQorUHJvdG9jb2w6OkVycm9yU3RyaW5n
T3I8dm9pZD4gSW5zcGVjdG9yRE9NQWdlbnQ6OmRpc2NhcmRTZWFyY2hSZXN1bHRzKGNvbnN0IFN0
cmluZyYgc2VhcmNoSWQpCiB7CiAgICAgbV9zZWFyY2hSZXN1bHRzLnJlbW92ZShzZWFyY2hJZCk7
CisKKyAgICByZXR1cm4geyB9OwogfQogCiBib29sIEluc3BlY3RvckRPTUFnZW50OjpoYW5kbGVN
b3VzZVByZXNzKCkKQEAgLTExMTcsNyArMTE0OCw3IEBAIGJvb2wgSW5zcGVjdG9yRE9NQWdlbnQ6
OmhhbmRsZVRvdWNoRXZlbnQoTm9kZSYgbm9kZSkKIAogdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6
aW5zcGVjdChOb2RlKiBpbnNwZWN0ZWROb2RlKQogewotICAgIEVycm9yU3RyaW5nIGlnbm9yZWQ7
CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGlnbm9yZWQ7CiAgICAgUmVmUHRyPE5vZGU+IG5v
ZGUgPSBpbnNwZWN0ZWROb2RlOwogICAgIHNldFNlYXJjaGluZ0Zvck5vZGUoaWdub3JlZCwgZmFs
c2UsIG51bGxwdHIsIGZhbHNlKTsKIApAQCAtMTE3Myw3ICsxMjA0LDcgQEAgdm9pZCBJbnNwZWN0
b3JET01BZ2VudDo6aGlnaGxpZ2h0TW91c2VkT3Zlck5vZGUoKQogICAgICAgICBtX292ZXJsYXkt
PmhpZ2hsaWdodE5vZGUobm9kZSwgKm1faW5zcGVjdE1vZGVIaWdobGlnaHRDb25maWcpOwogfQog
Ci12b2lkIEluc3BlY3RvckRPTUFnZW50OjpzZXRTZWFyY2hpbmdGb3JOb2RlKEVycm9yU3RyaW5n
JiBlcnJvclN0cmluZywgYm9vbCBlbmFibGVkLCBjb25zdCBKU09OOjpPYmplY3QqIGhpZ2hsaWdo
dEluc3BlY3Rvck9iamVjdCwgYm9vbCBzaG93UnVsZXJzKQordm9pZCBJbnNwZWN0b3JET01BZ2Vu
dDo6c2V0U2VhcmNoaW5nRm9yTm9kZShQcm90b2NvbDo6RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5n
LCBib29sIGVuYWJsZWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgaGlnaGxpZ2h0SW5zcGVjdG9y
T2JqZWN0LCBib29sIHNob3dSdWxlcnMpCiB7CiAgICAgaWYgKG1fc2VhcmNoaW5nRm9yTm9kZSA9
PSBlbmFibGVkKQogICAgICAgICByZXR1cm47CkBAIC0xMTgzLDEyICsxMjE0LDEyIEBAIHZvaWQg
SW5zcGVjdG9yRE9NQWdlbnQ6OnNldFNlYXJjaGluZ0Zvck5vZGUoRXJyb3JTdHJpbmcmIGVycm9y
U3RyaW5nLCBib29sIGVuYWJsCiAgICAgbV9vdmVybGF5LT5zZXRTaG93UnVsZXJzRHVyaW5nRWxl
bWVudFNlbGVjdGlvbihtX3NlYXJjaGluZ0Zvck5vZGUgJiYgc2hvd1J1bGVycyk7CiAKICAgICBp
ZiAobV9zZWFyY2hpbmdGb3JOb2RlKSB7Ci0gICAgICAgIG1faW5zcGVjdE1vZGVIaWdobGlnaHRD
b25maWcgPSBoaWdobGlnaHRDb25maWdGcm9tSW5zcGVjdG9yT2JqZWN0KGVycm9yU3RyaW5nLCBo
aWdobGlnaHRJbnNwZWN0b3JPYmplY3QpOworICAgICAgICBtX2luc3BlY3RNb2RlSGlnaGxpZ2h0
Q29uZmlnID0gaGlnaGxpZ2h0Q29uZmlnRnJvbUluc3BlY3Rvck9iamVjdChlcnJvclN0cmluZywg
V1RGTW92ZShoaWdobGlnaHRJbnNwZWN0b3JPYmplY3QpKTsKICAgICAgICAgaWYgKCFtX2luc3Bl
Y3RNb2RlSGlnaGxpZ2h0Q29uZmlnKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBoaWdo
bGlnaHRNb3VzZWRPdmVyTm9kZSgpOwogICAgIH0gZWxzZQotICAgICAgICBoaWRlSGlnaGxpZ2h0
KGVycm9yU3RyaW5nKTsKKyAgICAgICAgaGlkZUhpZ2hsaWdodCgpOwogCiAgICAgbV9vdmVybGF5
LT5kaWRTZXRTZWFyY2hpbmdGb3JOb2RlKG1fc2VhcmNoaW5nRm9yTm9kZSk7CiAKQEAgLTExOTYs
NyArMTIyNyw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNldFNlYXJjaGluZ0Zvck5vZGUo
RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBib29sIGVuYWJsCiAgICAgICAgIGNsaWVudC0+ZWxl
bWVudFNlbGVjdGlvbkNoYW5nZWQobV9zZWFyY2hpbmdGb3JOb2RlKTsKIH0KIAotc3RkOjp1bmlx
dWVfcHRyPEhpZ2hsaWdodENvbmZpZz4gSW5zcGVjdG9yRE9NQWdlbnQ6OmhpZ2hsaWdodENvbmZp
Z0Zyb21JbnNwZWN0b3JPYmplY3QoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBKU09O
OjpPYmplY3QqIGhpZ2hsaWdodEluc3BlY3Rvck9iamVjdCkKK3N0ZDo6dW5pcXVlX3B0cjxIaWdo
bGlnaHRDb25maWc+IEluc3BlY3RvckRPTUFnZW50OjpoaWdobGlnaHRDb25maWdGcm9tSW5zcGVj
dG9yT2JqZWN0KFByb3RvY29sOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIFJlZlB0cjxKU09O
OjpPYmplY3Q+JiYgaGlnaGxpZ2h0SW5zcGVjdG9yT2JqZWN0KQogewogICAgIGlmICghaGlnaGxp
Z2h0SW5zcGVjdG9yT2JqZWN0KSB7CiAgICAgICAgIGVycm9yU3RyaW5nID0gIkludGVybmFsIGVy
cm9yOiBoaWdobGlnaHQgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIgaXMgbWlzc2luZyJfczsKQEAg
LTEyMDQsODEgKzEyMzUsOTMgQEAgc3RkOjp1bmlxdWVfcHRyPEhpZ2hsaWdodENvbmZpZz4gSW5z
cGVjdG9yRE9NQWdlbnQ6OmhpZ2hsaWdodENvbmZpZ0Zyb21JbnNwZWN0b3IKICAgICB9CiAKICAg
ICBhdXRvIGhpZ2hsaWdodENvbmZpZyA9IG1ha2VVbmlxdWU8SGlnaGxpZ2h0Q29uZmlnPigpOwot
ICAgIGJvb2wgc2hvd0luZm8gPSBmYWxzZTsgLy8gRGVmYXVsdDogZmFsc2UgKGRvIG5vdCBzaG93
IGEgdG9vbHRpcCkuCi0gICAgaGlnaGxpZ2h0SW5zcGVjdG9yT2JqZWN0LT5nZXRCb29sZWFuKCJz
aG93SW5mbyIsIHNob3dJbmZvKTsKLSAgICBoaWdobGlnaHRDb25maWctPnNob3dJbmZvID0gc2hv
d0luZm87Ci0gICAgaGlnaGxpZ2h0Q29uZmlnLT5jb250ZW50ID0gcGFyc2VDb25maWdDb2xvcigi
Y29udGVudENvbG9yIiwgaGlnaGxpZ2h0SW5zcGVjdG9yT2JqZWN0KTsKLSAgICBoaWdobGlnaHRD
b25maWctPmNvbnRlbnRPdXRsaW5lID0gcGFyc2VDb25maWdDb2xvcigiY29udGVudE91dGxpbmVD
b2xvciIsIGhpZ2hsaWdodEluc3BlY3Rvck9iamVjdCk7Ci0gICAgaGlnaGxpZ2h0Q29uZmlnLT5w
YWRkaW5nID0gcGFyc2VDb25maWdDb2xvcigicGFkZGluZ0NvbG9yIiwgaGlnaGxpZ2h0SW5zcGVj
dG9yT2JqZWN0KTsKLSAgICBoaWdobGlnaHRDb25maWctPmJvcmRlciA9IHBhcnNlQ29uZmlnQ29s
b3IoImJvcmRlckNvbG9yIiwgaGlnaGxpZ2h0SW5zcGVjdG9yT2JqZWN0KTsKLSAgICBoaWdobGln
aHRDb25maWctPm1hcmdpbiA9IHBhcnNlQ29uZmlnQ29sb3IoIm1hcmdpbkNvbG9yIiwgaGlnaGxp
Z2h0SW5zcGVjdG9yT2JqZWN0KTsKKyAgICBoaWdobGlnaHRDb25maWctPnNob3dJbmZvID0gaGln
aGxpZ2h0SW5zcGVjdG9yT2JqZWN0LT5nZXRCb29sZWFuKFByb3RvY29sOjpET006OkhpZ2hsaWdo
dENvbmZpZzo6c2hvd0luZm9LZXkpLnZhbHVlT3IoZmFsc2UpOworICAgIGhpZ2hsaWdodENvbmZp
Zy0+Y29udGVudCA9IHBhcnNlQ29uZmlnQ29sb3IoUHJvdG9jb2w6OkRPTTo6SGlnaGxpZ2h0Q29u
ZmlnOjpjb250ZW50Q29sb3JLZXksICpoaWdobGlnaHRJbnNwZWN0b3JPYmplY3QpOworICAgIGhp
Z2hsaWdodENvbmZpZy0+cGFkZGluZyA9IHBhcnNlQ29uZmlnQ29sb3IoUHJvdG9jb2w6OkRPTTo6
SGlnaGxpZ2h0Q29uZmlnOjpwYWRkaW5nQ29sb3JLZXksICpoaWdobGlnaHRJbnNwZWN0b3JPYmpl
Y3QpOworICAgIGhpZ2hsaWdodENvbmZpZy0+Ym9yZGVyID0gcGFyc2VDb25maWdDb2xvcihQcm90
b2NvbDo6RE9NOjpIaWdobGlnaHRDb25maWc6OmJvcmRlckNvbG9yS2V5LCAqaGlnaGxpZ2h0SW5z
cGVjdG9yT2JqZWN0KTsKKyAgICBoaWdobGlnaHRDb25maWctPm1hcmdpbiA9IHBhcnNlQ29uZmln
Q29sb3IoUHJvdG9jb2w6OkRPTTo6SGlnaGxpZ2h0Q29uZmlnOjptYXJnaW5Db2xvcktleSwgKmhp
Z2hsaWdodEluc3BlY3Rvck9iamVjdCk7CiAgICAgcmV0dXJuIGhpZ2hsaWdodENvbmZpZzsKIH0K
IAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpzZXRJ
bnNwZWN0TW9kZUVuYWJsZWQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBib29sIGVuYWJsZWQs
IGNvbnN0IEpTT046Ok9iamVjdCogaGlnaGxpZ2h0Q29uZmlnKQorUHJvdG9jb2w6OkVycm9yU3Ry
aW5nT3I8dm9pZD4gSW5zcGVjdG9yRE9NQWdlbnQ6OnNldEluc3BlY3RNb2RlRW5hYmxlZChib29s
IGVuYWJsZWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgaGlnaGxpZ2h0Q29uZmlnKQogewotICAg
IHNldFNlYXJjaGluZ0Zvck5vZGUoZXJyb3JTdHJpbmcsIGVuYWJsZWQsIGhpZ2hsaWdodENvbmZp
ZyA/IGhpZ2hsaWdodENvbmZpZyA6IG51bGxwdHIsIGZhbHNlKTsKKyAgICBQcm90b2NvbDo6RXJy
b3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKKyAgICBzZXRTZWFyY2hpbmdGb3JOb2RlKGVycm9yU3Ry
aW5nLCBlbmFibGVkLCBXVEZNb3ZlKGhpZ2hsaWdodENvbmZpZyksIGZhbHNlKTsKKworICAgIGlm
ICghIWVycm9yU3RyaW5nKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJp
bmcpOworCisgICAgcmV0dXJuIHsgfTsKIH0KICNlbHNlCi12b2lkIEluc3BlY3RvckRPTUFnZW50
OjpzZXRJbnNwZWN0TW9kZUVuYWJsZWQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBib29sIGVu
YWJsZWQsIGNvbnN0IEpTT046Ok9iamVjdCogaGlnaGxpZ2h0Q29uZmlnLCBjb25zdCBib29sKiBz
aG93UnVsZXJzKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yRE9NQWdl
bnQ6OnNldEluc3BlY3RNb2RlRW5hYmxlZChib29sIGVuYWJsZWQsIFJlZlB0cjxKU09OOjpPYmpl
Y3Q+JiYgaGlnaGxpZ2h0Q29uZmlnLCBPcHRpb25hbDxib29sPiYmIHNob3dSdWxlcnMpCiB7Ci0g
ICAgc2V0U2VhcmNoaW5nRm9yTm9kZShlcnJvclN0cmluZywgZW5hYmxlZCwgaGlnaGxpZ2h0Q29u
ZmlnID8gaGlnaGxpZ2h0Q29uZmlnIDogbnVsbHB0ciwgc2hvd1J1bGVycyAmJiAqc2hvd1J1bGVy
cyk7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCisgICAgc2V0U2Vh
cmNoaW5nRm9yTm9kZShlcnJvclN0cmluZywgZW5hYmxlZCwgV1RGTW92ZShoaWdobGlnaHRDb25m
aWcpLCBzaG93UnVsZXJzICYmICpzaG93UnVsZXJzKTsKKworICAgIGlmICghIWVycm9yU3RyaW5n
KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOworCisgICAgcmV0
dXJuIHsgfTsKIH0KICNlbmRpZgogCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpoaWdobGlnaHRS
ZWN0KEVycm9yU3RyaW5nJiwgaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGNv
bnN0IEpTT046Ok9iamVjdCogY29sb3IsIGNvbnN0IEpTT046Ok9iamVjdCogb3V0bGluZUNvbG9y
LCBjb25zdCBib29sKiB1c2VQYWdlQ29vcmRpbmF0ZXMpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdP
cjx2b2lkPiBJbnNwZWN0b3JET01BZ2VudDo6aGlnaGxpZ2h0UmVjdChpbnQgeCwgaW50IHksIGlu
dCB3aWR0aCwgaW50IGhlaWdodCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBjb2xvciwgUmVmUHRy
PEpTT046Ok9iamVjdD4mJiBvdXRsaW5lQ29sb3IsIE9wdGlvbmFsPGJvb2w+JiYgdXNlUGFnZUNv
b3JkaW5hdGVzKQogewogICAgIGF1dG8gcXVhZCA9IG1ha2VVbmlxdWU8RmxvYXRRdWFkPihGbG9h
dFJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCkpOwotICAgIGlubmVySGlnaGxpZ2h0UXVhZChXVEZN
b3ZlKHF1YWQpLCBjb2xvciwgb3V0bGluZUNvbG9yLCB1c2VQYWdlQ29vcmRpbmF0ZXMpOworICAg
IGlubmVySGlnaGxpZ2h0UXVhZChXVEZNb3ZlKHF1YWQpLCBXVEZNb3ZlKGNvbG9yKSwgV1RGTW92
ZShvdXRsaW5lQ29sb3IpLCBXVEZNb3ZlKHVzZVBhZ2VDb29yZGluYXRlcykpOworCisgICAgcmV0
dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6aGlnaGxpZ2h0UXVhZChFcnJv
clN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IEpTT046OkFycmF5JiBxdWFkQXJyYXksIGNvbnN0
IEpTT046Ok9iamVjdCogY29sb3IsIGNvbnN0IEpTT046Ok9iamVjdCogb3V0bGluZUNvbG9yLCBj
b25zdCBib29sKiB1c2VQYWdlQ29vcmRpbmF0ZXMpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2
b2lkPiBJbnNwZWN0b3JET01BZ2VudDo6aGlnaGxpZ2h0UXVhZChSZWY8SlNPTjo6QXJyYXk+JiYg
cXVhZE9iamVjdCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBjb2xvciwgUmVmUHRyPEpTT046Ok9i
amVjdD4mJiBvdXRsaW5lQ29sb3IsIE9wdGlvbmFsPGJvb2w+JiYgdXNlUGFnZUNvb3JkaW5hdGVz
KQogewogICAgIGF1dG8gcXVhZCA9IG1ha2VVbmlxdWU8RmxvYXRRdWFkPigpOwotICAgIGlmICgh
cGFyc2VRdWFkKHF1YWRBcnJheSwgcXVhZC5nZXQoKSkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcg
PSAiVW5leHBlY3RlZCBpbnZhbGlkIHF1YWRBcnJheSJfczsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLSAgICBpbm5lckhpZ2hsaWdodFF1YWQoV1RGTW92ZShxdWFkKSwgY29sb3IsIG91dGxpbmVD
b2xvciwgdXNlUGFnZUNvb3JkaW5hdGVzKTsKKyAgICBpZiAoIXBhcnNlUXVhZChXVEZNb3ZlKHF1
YWRPYmplY3QpLCBxdWFkLmdldCgpKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJV
bmV4cGVjdGVkIGludmFsaWQgcXVhZCJfcyk7CisKKyAgICBpbm5lckhpZ2hsaWdodFF1YWQoV1RG
TW92ZShxdWFkKSwgV1RGTW92ZShjb2xvciksIFdURk1vdmUob3V0bGluZUNvbG9yKSwgV1RGTW92
ZSh1c2VQYWdlQ29vcmRpbmF0ZXMpKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5z
cGVjdG9yRE9NQWdlbnQ6OmlubmVySGlnaGxpZ2h0UXVhZChzdGQ6OnVuaXF1ZV9wdHI8RmxvYXRR
dWFkPiBxdWFkLCBjb25zdCBKU09OOjpPYmplY3QqIGNvbG9yLCBjb25zdCBKU09OOjpPYmplY3Qq
IG91dGxpbmVDb2xvciwgY29uc3QgYm9vbCogdXNlUGFnZUNvb3JkaW5hdGVzKQordm9pZCBJbnNw
ZWN0b3JET01BZ2VudDo6aW5uZXJIaWdobGlnaHRRdWFkKHN0ZDo6dW5pcXVlX3B0cjxGbG9hdFF1
YWQ+IHF1YWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgY29sb3IsIFJlZlB0cjxKU09OOjpPYmpl
Y3Q+JiYgb3V0bGluZUNvbG9yLCBPcHRpb25hbDxib29sPiYmIHVzZVBhZ2VDb29yZGluYXRlcykK
IHsKICAgICBhdXRvIGhpZ2hsaWdodENvbmZpZyA9IG1ha2VVbmlxdWU8SGlnaGxpZ2h0Q29uZmln
PigpOwotICAgIGhpZ2hsaWdodENvbmZpZy0+Y29udGVudCA9IHBhcnNlQ29sb3IoY29sb3IpOwot
ICAgIGhpZ2hsaWdodENvbmZpZy0+Y29udGVudE91dGxpbmUgPSBwYXJzZUNvbG9yKG91dGxpbmVD
b2xvcik7CisgICAgaGlnaGxpZ2h0Q29uZmlnLT5jb250ZW50ID0gcGFyc2VDb2xvcihXVEZNb3Zl
KGNvbG9yKSk7CisgICAgaGlnaGxpZ2h0Q29uZmlnLT5jb250ZW50T3V0bGluZSA9IHBhcnNlQ29s
b3IoV1RGTW92ZShvdXRsaW5lQ29sb3IpKTsKICAgICBoaWdobGlnaHRDb25maWctPnVzZVBhZ2VD
b29yZGluYXRlcyA9IHVzZVBhZ2VDb29yZGluYXRlcyA/ICp1c2VQYWdlQ29vcmRpbmF0ZXMgOiBm
YWxzZTsKICAgICBtX292ZXJsYXktPmhpZ2hsaWdodFF1YWQoV1RGTW92ZShxdWFkKSwgKmhpZ2hs
aWdodENvbmZpZyk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmhpZ2hsaWdodFNlbGVj
dG9yKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgSlNPTjo6T2JqZWN0JiBoaWdobGln
aHRJbnNwZWN0b3JPYmplY3QsIGNvbnN0IFN0cmluZyYgc2VsZWN0b3JTdHJpbmcsIGNvbnN0IFN0
cmluZyogZnJhbWVJZCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRP
TUFnZW50OjpoaWdobGlnaHRTZWxlY3RvcihSZWY8SlNPTjo6T2JqZWN0PiYmIGhpZ2hsaWdodElu
c3BlY3Rvck9iamVjdCwgY29uc3QgU3RyaW5nJiBzZWxlY3RvclN0cmluZywgY29uc3QgUHJvdG9j
b2w6Ok5ldHdvcms6OkZyYW1lSWQmIGZyYW1lSWQpCiB7Ci0gICAgYXV0byBoaWdobGlnaHRDb25m
aWcgPSBoaWdobGlnaHRDb25maWdGcm9tSW5zcGVjdG9yT2JqZWN0KGVycm9yU3RyaW5nLCAmaGln
aGxpZ2h0SW5zcGVjdG9yT2JqZWN0KTsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JT
dHJpbmc7CisKKyAgICBhdXRvIGhpZ2hsaWdodENvbmZpZyA9IGhpZ2hsaWdodENvbmZpZ0Zyb21J
bnNwZWN0b3JPYmplY3QoZXJyb3JTdHJpbmcsIFdURk1vdmUoaGlnaGxpZ2h0SW5zcGVjdG9yT2Jq
ZWN0KSk7CiAgICAgaWYgKCFoaWdobGlnaHRDb25maWcpCi0gICAgICAgIHJldHVybjsKKyAgICAg
ICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgIFJlZlB0cjxEb2N1
bWVudD4gZG9jdW1lbnQ7CiAKLSAgICBpZiAoZnJhbWVJZCkgeworICAgIGlmICghIWZyYW1lSWQp
IHsKICAgICAgICAgYXV0byogcGFnZUFnZW50ID0gbV9pbnN0cnVtZW50aW5nQWdlbnRzLmVuYWJs
ZWRQYWdlQWdlbnQoKTsKLSAgICAgICAgaWYgKCFwYWdlQWdlbnQpIHsKLSAgICAgICAgICAgIGVy
cm9yU3RyaW5nID0gIlBhZ2UgZG9tYWluIG11c3QgYmUgZW5hYmxlZCJfczsKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfQorICAgICAgICBpZiAoIXBhZ2VBZ2VudCkKKyAgICAgICAgICAg
IHJldHVybiBtYWtlVW5leHBlY3RlZCgiUGFnZSBkb21haW4gbXVzdCBiZSBlbmFibGVkIl9zKTsK
IAotICAgICAgICBhdXRvKiBmcmFtZSA9IHBhZ2VBZ2VudC0+YXNzZXJ0RnJhbWUoZXJyb3JTdHJp
bmcsICpmcmFtZUlkKTsKKyAgICAgICAgYXV0byogZnJhbWUgPSBwYWdlQWdlbnQtPmFzc2VydEZy
YW1lKGVycm9yU3RyaW5nLCBmcmFtZUlkKTsKICAgICAgICAgaWYgKCFmcmFtZSkKLSAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmlu
Zyk7CiAKICAgICAgICAgZG9jdW1lbnQgPSBmcmFtZS0+ZG9jdW1lbnQoKTsKICAgICB9IGVsc2UK
ICAgICAgICAgZG9jdW1lbnQgPSBtX2RvY3VtZW50OwogCi0gICAgaWYgKCFkb2N1bWVudCkgewot
ICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIGRvY3VtZW50IG9mIGZyYW1lIGZvciBnaXZl
biBmcmFtZUlkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghZG9jdW1lbnQp
CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTWlzc2luZyBkb2N1bWVudCBvZiBmcmFt
ZSBmb3IgZ2l2ZW4gZnJhbWVJZCJfcyk7CiAKICAgICBDU1NQYXJzZXIgcGFyc2VyKCpkb2N1bWVu
dCk7CiAgICAgQ1NTU2VsZWN0b3JMaXN0IHNlbGVjdG9yTGlzdDsKQEAgLTEzMzksMTU4ICsxMzgy
LDE3MyBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpoaWdobGlnaHRTZWxlY3RvcihFcnJvclN0
cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IEpTT046OgogICAgIH0KIAogICAgIG1fb3ZlcmxheS0+
aGlnaGxpZ2h0Tm9kZUxpc3QoU3RhdGljTm9kZUxpc3Q6OmNyZWF0ZShXVEZNb3ZlKG5vZGVMaXN0
KSksICpoaWdobGlnaHRDb25maWcpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNw
ZWN0b3JET01BZ2VudDo6aGlnaGxpZ2h0Tm9kZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNv
bnN0IEpTT046Ok9iamVjdCYgaGlnaGxpZ2h0SW5zcGVjdG9yT2JqZWN0LCBjb25zdCBpbnQqIG5v
ZGVJZCwgY29uc3QgU3RyaW5nKiBvYmplY3RJZCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZv
aWQ+IEluc3BlY3RvckRPTUFnZW50OjpoaWdobGlnaHROb2RlKFJlZjxKU09OOjpPYmplY3Q+JiYg
aGlnaGxpZ2h0SW5zcGVjdG9yT2JqZWN0LCBPcHRpb25hbDxQcm90b2NvbDo6RE9NOjpOb2RlSWQ+
JiYgbm9kZUlkLCBjb25zdCBQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0SWQmIG9iamVj
dElkKQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIE5v
ZGUqIG5vZGUgPSBudWxscHRyOwogICAgIGlmIChub2RlSWQpCiAgICAgICAgIG5vZGUgPSBhc3Nl
cnROb2RlKGVycm9yU3RyaW5nLCAqbm9kZUlkKTsKLSAgICBlbHNlIGlmIChvYmplY3RJZCkgewot
ICAgICAgICBub2RlID0gbm9kZUZvck9iamVjdElkKCpvYmplY3RJZCk7Ci0gICAgICAgIGlmICgh
bm9kZSkKLSAgICAgICAgICAgIGVycm9yU3RyaW5nID0gIk1pc3Npbmcgbm9kZSBmb3IgZ2l2ZW4g
b2JqZWN0SWQiX3M7CisgICAgZWxzZSBpZiAoISFvYmplY3RJZCkgeworICAgICAgICBub2RlID0g
bm9kZUZvck9iamVjdElkKG9iamVjdElkKTsKKyAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWlzc2lu
ZyBub2RlIGZvciBnaXZlbiBvYmplY3RJZCJfczsKICAgICB9IGVsc2UKICAgICAgICAgZXJyb3JT
dHJpbmcgPSAiRWl0aGVyIG5vZGVJZCBvciBvYmplY3RJZCBtdXN0IGJlIHNwZWNpZmllZCJfczsK
IAogICAgIGlmICghbm9kZSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVu
ZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCi0gICAgc3RkOjp1bmlxdWVfcHRyPEhpZ2hsaWdodENv
bmZpZz4gaGlnaGxpZ2h0Q29uZmlnID0gaGlnaGxpZ2h0Q29uZmlnRnJvbUluc3BlY3Rvck9iamVj
dChlcnJvclN0cmluZywgJmhpZ2hsaWdodEluc3BlY3Rvck9iamVjdCk7CisgICAgc3RkOjp1bmlx
dWVfcHRyPEhpZ2hsaWdodENvbmZpZz4gaGlnaGxpZ2h0Q29uZmlnID0gaGlnaGxpZ2h0Q29uZmln
RnJvbUluc3BlY3Rvck9iamVjdChlcnJvclN0cmluZywgV1RGTW92ZShoaWdobGlnaHRJbnNwZWN0
b3JPYmplY3QpKTsKICAgICBpZiAoIWhpZ2hsaWdodENvbmZpZykKLSAgICAgICAgcmV0dXJuOwor
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCiAgICAgbV9vdmVy
bGF5LT5oaWdobGlnaHROb2RlKG5vZGUsICpoaWdobGlnaHRDb25maWcpOworCisgICAgcmV0dXJu
IHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6aGlnaGxpZ2h0Tm9kZUxpc3QoRXJy
b3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBKU09OOjpBcnJheSYgbm9kZUlkcywgY29uc3Qg
SlNPTjo6T2JqZWN0JiBoaWdobGlnaHRJbnNwZWN0b3JPYmplY3QpCitQcm90b2NvbDo6RXJyb3JT
dHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JET01BZ2VudDo6aGlnaGxpZ2h0Tm9kZUxpc3QoUmVmPEpT
T046OkFycmF5PiYmIG5vZGVJZHMsIFJlZjxKU09OOjpPYmplY3Q+JiYgaGlnaGxpZ2h0SW5zcGVj
dG9yT2JqZWN0KQogewotICAgIFZlY3RvcjxSZWY8Tm9kZT4+IG5vZGVzOwotICAgIGZvciAoYXV0
byYgbm9kZVZhbHVlIDogbm9kZUlkcykgewotICAgICAgICBpZiAoIW5vZGVWYWx1ZSkgewotICAg
ICAgICAgICAgZXJyb3JTdHJpbmcgPSAiVW5leHBlY3RlZCBub24taW50ZWdlciBpdGVtIGluIGdp
dmVuIG5vZGVJZHMiX3M7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KKyAgICBQcm90
b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CiAKLSAgICAgICAgaW50IG5vZGVJZCA9IDA7
Ci0gICAgICAgIGlmICghbm9kZVZhbHVlLT5hc0ludGVnZXIobm9kZUlkKSkgewotICAgICAgICAg
ICAgZXJyb3JTdHJpbmcgPSAiVW5leHBlY3RlZCBub24taW50ZWdlciBpdGVtIGluIGdpdmVuIG5v
ZGVJZHMiX3M7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KKyAgICBWZWN0b3I8UmVm
PE5vZGU+PiBub2RlczsKKyAgICBmb3IgKGF1dG8mIG5vZGVJZFZhbHVlIDogbm9kZUlkcy5nZXQo
KSkgeworICAgICAgICBhdXRvIG5vZGVJZCA9IG5vZGVJZFZhbHVlLT5hc0ludGVnZXIoKTsKKyAg
ICAgICAgaWYgKCFub2RlSWQpCisgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIlVu
ZXhwZWN0ZWQgbm9uLWludGVnZXIgaXRlbSBpbiBnaXZlbiBub2RlSWRzIl9zKTsKIAogICAgICAg
ICAvLyBJbiB0aGUgY2FzZSB0aGF0IGEgbm9kZSBpcyByZW1vdmVkIGluIHRoZSB0aW1lIGJldHdl
ZW4gd2hlbiBoaWdobGlnaHROb2RlTGlzdCBpcyBpbnZva2VkCiAgICAgICAgIC8vIGJ5IHRoZSBm
cm9udGVuZCBhbmQgaXQgaXMgZXhlY3V0ZWQgYnkgdGhlIGJhY2tlbmQsIHdlIHNob3VsZCBzdGls
bCBhdHRlbXB0IHRvIGhpZ2hsaWdodAogICAgICAgICAvLyBhcyBtYW55IG5vZGVzIGFzIHBvc3Np
YmxlLiBBcyBzdWNoLCB3ZSBzaG91bGQgaWdub3JlIGFueSBlcnJvcnMgZ2VuZXJhdGVkIHdoZW4g
YXR0ZW1wdGluZwogICAgICAgICAvLyB0byBnZXQgYSBOb2RlIGZyb20gYSBnaXZlbiBub2RlSWQu
IAotICAgICAgICBFcnJvclN0cmluZyBpZ25vcmVkOwotICAgICAgICBOb2RlKiBub2RlID0gYXNz
ZXJ0Tm9kZShpZ25vcmVkLCBub2RlSWQpOworICAgICAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcg
aWdub3JlZDsKKyAgICAgICAgTm9kZSogbm9kZSA9IGFzc2VydE5vZGUoaWdub3JlZCwgKm5vZGVJ
ZCk7CiAgICAgICAgIGlmICghbm9kZSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAg
IG5vZGVzLmFwcGVuZCgqbm9kZSk7CiAgICAgfQogCi0gICAgc3RkOjp1bmlxdWVfcHRyPEhpZ2hs
aWdodENvbmZpZz4gaGlnaGxpZ2h0Q29uZmlnID0gaGlnaGxpZ2h0Q29uZmlnRnJvbUluc3BlY3Rv
ck9iamVjdChlcnJvclN0cmluZywgJmhpZ2hsaWdodEluc3BlY3Rvck9iamVjdCk7CisgICAgc3Rk
Ojp1bmlxdWVfcHRyPEhpZ2hsaWdodENvbmZpZz4gaGlnaGxpZ2h0Q29uZmlnID0gaGlnaGxpZ2h0
Q29uZmlnRnJvbUluc3BlY3Rvck9iamVjdChlcnJvclN0cmluZywgV1RGTW92ZShoaWdobGlnaHRJ
bnNwZWN0b3JPYmplY3QpKTsKICAgICBpZiAoIWhpZ2hsaWdodENvbmZpZykKLSAgICAgICAgcmV0
dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCiAgICAg
bV9vdmVybGF5LT5oaWdobGlnaHROb2RlTGlzdChTdGF0aWNOb2RlTGlzdDo6Y3JlYXRlKFdURk1v
dmUobm9kZXMpKSwgKmhpZ2hsaWdodENvbmZpZyk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12
b2lkIEluc3BlY3RvckRPTUFnZW50OjpoaWdobGlnaHRGcmFtZShFcnJvclN0cmluZyYgZXJyb3JT
dHJpbmcsIGNvbnN0IFN0cmluZyYgZnJhbWVJZCwgY29uc3QgSlNPTjo6T2JqZWN0KiBjb2xvciwg
Y29uc3QgSlNPTjo6T2JqZWN0KiBvdXRsaW5lQ29sb3IpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdP
cjx2b2lkPiBJbnNwZWN0b3JET01BZ2VudDo6aGlnaGxpZ2h0RnJhbWUoY29uc3QgUHJvdG9jb2w6
Ok5ldHdvcms6OkZyYW1lSWQmIGZyYW1lSWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgY29sb3Is
IFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgb3V0bGluZUNvbG9yKQogeworICAgIFByb3RvY29sOjpF
cnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIGF1dG8qIHBhZ2VBZ2VudCA9IG1faW5zdHJ1
bWVudGluZ0FnZW50cy5lbmFibGVkUGFnZUFnZW50KCk7Ci0gICAgaWYgKCFwYWdlQWdlbnQpIHsK
LSAgICAgICAgZXJyb3JTdHJpbmcgPSAiUGFnZSBkb21haW4gbXVzdCBiZSBlbmFibGVkIl9zOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghcGFnZUFnZW50KQorICAgICAgICByZXR1
cm4gbWFrZVVuZXhwZWN0ZWQoIlBhZ2UgZG9tYWluIG11c3QgYmUgZW5hYmxlZCJfcyk7CiAKICAg
ICBhdXRvKiBmcmFtZSA9IHBhZ2VBZ2VudC0+YXNzZXJ0RnJhbWUoZXJyb3JTdHJpbmcsIGZyYW1l
SWQpOwogICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1h
a2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgIGlmIChmcmFtZS0+b3duZXJFbGVtZW50
KCkpIHsKICAgICAgICAgYXV0byBoaWdobGlnaHRDb25maWcgPSBtYWtlVW5pcXVlPEhpZ2hsaWdo
dENvbmZpZz4oKTsKICAgICAgICAgaGlnaGxpZ2h0Q29uZmlnLT5zaG93SW5mbyA9IHRydWU7IC8v
IEFsd2F5cyBzaG93IHRvb2x0aXBzIGZvciBmcmFtZXMuCi0gICAgICAgIGhpZ2hsaWdodENvbmZp
Zy0+Y29udGVudCA9IHBhcnNlQ29sb3IoY29sb3IpOwotICAgICAgICBoaWdobGlnaHRDb25maWct
PmNvbnRlbnRPdXRsaW5lID0gcGFyc2VDb2xvcihvdXRsaW5lQ29sb3IpOworICAgICAgICBoaWdo
bGlnaHRDb25maWctPmNvbnRlbnQgPSBwYXJzZUNvbG9yKFdURk1vdmUoY29sb3IpKTsKKyAgICAg
ICAgaGlnaGxpZ2h0Q29uZmlnLT5jb250ZW50T3V0bGluZSA9IHBhcnNlQ29sb3IoV1RGTW92ZShv
dXRsaW5lQ29sb3IpKTsKICAgICAgICAgbV9vdmVybGF5LT5oaWdobGlnaHROb2RlKGZyYW1lLT5v
d25lckVsZW1lbnQoKSwgKmhpZ2hsaWdodENvbmZpZyk7CiAgICAgfQorCisgICAgcmV0dXJuIHsg
fTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6aGlkZUhpZ2hsaWdodChFcnJvclN0cmlu
ZyYpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JET01BZ2VudDo6aGlk
ZUhpZ2hsaWdodCgpCiB7CiAgICAgbV9vdmVybGF5LT5oaWRlSGlnaGxpZ2h0KCk7CisKKyAgICBy
ZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50Ojptb3ZlVG8oRXJyb3JTdHJp
bmcmIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkLCBpbnQgdGFyZ2V0RWxlbWVudElkLCBjb25zdCBp
bnQqIGFuY2hvck5vZGVJZCwgaW50KiBuZXdOb2RlSWQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdP
cjxQcm90b2NvbDo6RE9NOjpOb2RlSWQ+IEluc3BlY3RvckRPTUFnZW50Ojptb3ZlVG8oUHJvdG9j
b2w6OkRPTTo6Tm9kZUlkIG5vZGVJZCwgUHJvdG9jb2w6OkRPTTo6Tm9kZUlkIHRhcmdldE5vZGVJ
ZCwgT3B0aW9uYWw8UHJvdG9jb2w6OkRPTTo6Tm9kZUlkPiYmIGluc2VydEJlZm9yZU5vZGVJZCkK
IHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBOb2RlKiBu
b2RlID0gYXNzZXJ0RWRpdGFibGVOb2RlKGVycm9yU3RyaW5nLCBub2RlSWQpOwogICAgIGlmICgh
bm9kZSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJy
b3JTdHJpbmcpOwogCi0gICAgRWxlbWVudCogdGFyZ2V0RWxlbWVudCA9IGFzc2VydEVkaXRhYmxl
RWxlbWVudChlcnJvclN0cmluZywgdGFyZ2V0RWxlbWVudElkKTsKKyAgICBFbGVtZW50KiB0YXJn
ZXRFbGVtZW50ID0gYXNzZXJ0RWRpdGFibGVFbGVtZW50KGVycm9yU3RyaW5nLCB0YXJnZXROb2Rl
SWQpOwogICAgIGlmICghdGFyZ2V0RWxlbWVudCkKLSAgICAgICAgcmV0dXJuOworICAgICAgICBy
ZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCi0gICAgTm9kZSogYW5jaG9yTm9k
ZSA9IDA7Ci0gICAgaWYgKGFuY2hvck5vZGVJZCAmJiAqYW5jaG9yTm9kZUlkKSB7Ci0gICAgICAg
IGFuY2hvck5vZGUgPSBhc3NlcnRFZGl0YWJsZU5vZGUoZXJyb3JTdHJpbmcsICphbmNob3JOb2Rl
SWQpOworICAgIE5vZGUqIGFuY2hvck5vZGUgPSBudWxscHRyOworICAgIGlmIChpbnNlcnRCZWZv
cmVOb2RlSWQgJiYgKmluc2VydEJlZm9yZU5vZGVJZCkgeworICAgICAgICBhbmNob3JOb2RlID0g
YXNzZXJ0RWRpdGFibGVOb2RlKGVycm9yU3RyaW5nLCAqaW5zZXJ0QmVmb3JlTm9kZUlkKTsKICAg
ICAgICAgaWYgKCFhbmNob3JOb2RlKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAo
YW5jaG9yTm9kZS0+cGFyZW50Tm9kZSgpICE9IHRhcmdldEVsZW1lbnQpIHsKLSAgICAgICAgICAg
IGVycm9yU3RyaW5nID0gIkdpdmVuIGFuY2hvck5vZGVJZCBtdXN0IGJlIGEgY2hpbGQgb2YgZ2l2
ZW4gdGFyZ2V0RWxlbWVudElkIl9zOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Cisg
ICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOworICAgICAgICBp
ZiAoYW5jaG9yTm9kZS0+cGFyZW50Tm9kZSgpICE9IHRhcmdldEVsZW1lbnQpCisgICAgICAgICAg
ICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkdpdmVuIGluc2VydEJlZm9yZU5vZGVJZCBtdXN0IGJl
IGEgY2hpbGQgb2YgZ2l2ZW4gdGFyZ2V0Tm9kZUlkIl9zKTsKICAgICB9CiAKICAgICBpZiAoIW1f
ZG9tRWRpdG9yLT5pbnNlcnRCZWZvcmUoKnRhcmdldEVsZW1lbnQsICpub2RlLCBhbmNob3JOb2Rl
LCBlcnJvclN0cmluZykpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4
cGVjdGVkKGVycm9yU3RyaW5nKTsKIAotICAgICpuZXdOb2RlSWQgPSBwdXNoTm9kZVBhdGhUb0Zy
b250ZW5kKGVycm9yU3RyaW5nLCBub2RlKTsKKyAgICByZXR1cm4gcHVzaE5vZGVQYXRoVG9Gcm9u
dGVuZChlcnJvclN0cmluZywgbm9kZSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnVu
ZG8oRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9p
ZD4gSW5zcGVjdG9yRE9NQWdlbnQ6OnVuZG8oKQogewogICAgIGF1dG8gcmVzdWx0ID0gbV9oaXN0
b3J5LT51bmRvKCk7CiAgICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkKLSAgICAgICAgZXJy
b3JTdHJpbmcgPSB0b0Vycm9yU3RyaW5nKHJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCkpOworICAg
ICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoSW5zcGVjdG9yRE9NQWdlbnQ6OnRvRXJyb3JTdHJp
bmcocmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKSkpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAot
dm9pZCBJbnNwZWN0b3JET01BZ2VudDo6cmVkbyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCitQ
cm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JET01BZ2VudDo6cmVkbygpCiB7
CiAgICAgYXV0byByZXN1bHQgPSBtX2hpc3RvcnktPnJlZG8oKTsKICAgICBpZiAocmVzdWx0Lmhh
c0V4Y2VwdGlvbigpKQotICAgICAgICBlcnJvclN0cmluZyA9IHRvRXJyb3JTdHJpbmcocmVzdWx0
LnJlbGVhc2VFeGNlcHRpb24oKSk7CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChJbnNw
ZWN0b3JET01BZ2VudDo6dG9FcnJvclN0cmluZyhyZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpKSk7
CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjptYXJrVW5k
b2FibGVTdGF0ZShFcnJvclN0cmluZyYpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJ
bnNwZWN0b3JET01BZ2VudDo6bWFya1VuZG9hYmxlU3RhdGUoKQogewogICAgIG1faGlzdG9yeS0+
bWFya1VuZG9hYmxlU3RhdGUoKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVj
dG9yRE9NQWdlbnQ6OmZvY3VzKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJZCkK
K1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRPTUFnZW50Ojpmb2N1cyhQ
cm90b2NvbDo6RE9NOjpOb2RlSWQgbm9kZUlkKQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmlu
ZyBlcnJvclN0cmluZzsKKwogICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBhc3NlcnRFbGVtZW50KGVy
cm9yU3RyaW5nLCBub2RlSWQpOwogICAgIGlmICghZWxlbWVudCkKLSAgICAgICAgcmV0dXJuOwot
ICAgIGlmICghZWxlbWVudC0+aXNGb2N1c2FibGUoKSkgewotICAgICAgICBlcnJvclN0cmluZyA9
ICJFbGVtZW50IGZvciBnaXZlbiBub2RlSWQgaXMgbm90IGZvY3VzYWJsZSJfczsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5n
KTsKKyAgICBpZiAoIWVsZW1lbnQtPmlzRm9jdXNhYmxlKCkpCisgICAgICAgIHJldHVybiBtYWtl
VW5leHBlY3RlZCgiRWxlbWVudCBmb3IgZ2l2ZW4gbm9kZUlkIGlzIG5vdCBmb2N1c2FibGUiX3Mp
OworCiAgICAgZWxlbWVudC0+Zm9jdXMoKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQg
SW5zcGVjdG9yRE9NQWdlbnQ6OnNldEluc3BlY3RlZE5vZGUoRXJyb3JTdHJpbmcmIGVycm9yU3Ry
aW5nLCBpbnQgbm9kZUlkKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9y
RE9NQWdlbnQ6OnNldEluc3BlY3RlZE5vZGUoUHJvdG9jb2w6OkRPTTo6Tm9kZUlkIG5vZGVJZCkK
IHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBOb2RlKiBu
b2RlID0gYXNzZXJ0Tm9kZShlcnJvclN0cmluZywgbm9kZUlkKTsKICAgICBpZiAoIW5vZGUpCi0g
ICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5n
KTsKIAotICAgIGlmIChub2RlLT5pc0luVXNlckFnZW50U2hhZG93VHJlZSgpICYmICFtX2FsbG93
RWRpdGluZ1VzZXJBZ2VudFNoYWRvd1RyZWVzKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIk5v
ZGUgZm9yIGdpdmVuIG5vZGVJZCBpcyBpbiBhIHNoYWRvdyB0cmVlIl9zOwotICAgICAgICByZXR1
cm47Ci0gICAgfQorICAgIGlmIChub2RlLT5pc0luVXNlckFnZW50U2hhZG93VHJlZSgpICYmICFt
X2FsbG93RWRpdGluZ1VzZXJBZ2VudFNoYWRvd1RyZWVzKQorICAgICAgICByZXR1cm4gbWFrZVVu
ZXhwZWN0ZWQoIk5vZGUgZm9yIGdpdmVuIG5vZGVJZCBpcyBpbiBhIHNoYWRvdyB0cmVlIl9zKTsK
IAogICAgIG1faW5zcGVjdGVkTm9kZSA9IG5vZGU7CiAKQEAgLTE0OTgsMzggKzE1NTYsNDkgQEAg
dm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c2V0SW5zcGVjdGVkTm9kZShFcnJvclN0cmluZyYgZXJy
b3JTdHJpbmcsIGludCBub2RlSWQpCiAgICAgICAgIGNvbW1hbmRMaW5lQVBJSG9zdC0+YWRkSW5z
cGVjdGVkT2JqZWN0KG1ha2VVbmlxdWU8SW5zcGVjdGFibGVOb2RlPihub2RlKSk7CiAKICAgICBt
X3N1cHByZXNzRXZlbnRMaXN0ZW5lckNoYW5nZWRFdmVudCA9IGZhbHNlOworCisgICAgcmV0dXJu
IHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6cmVzb2x2ZU5vZGUoRXJyb3JTdHJp
bmcmIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkLCBjb25zdCBTdHJpbmcqIG9iamVjdEdyb3VwLCBS
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0
KQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVP
YmplY3Q+PiBJbnNwZWN0b3JET01BZ2VudDo6cmVzb2x2ZU5vZGUoUHJvdG9jb2w6OkRPTTo6Tm9k
ZUlkIG5vZGVJZCwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCkKIHsKLSAgICBTdHJpbmcgb2Jq
ZWN0R3JvdXBOYW1lID0gb2JqZWN0R3JvdXAgPyAqb2JqZWN0R3JvdXAgOiBlbXB0eVN0cmluZygp
OworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIE5vZGUqIG5v
ZGUgPSBhc3NlcnROb2RlKGVycm9yU3RyaW5nLCBub2RlSWQpOwogICAgIGlmICghbm9kZSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpS
ZW1vdGVPYmplY3Q+IG9iamVjdCA9IHJlc29sdmVOb2RlKG5vZGUsIG9iamVjdEdyb3VwTmFtZSk7
Ci0gICAgaWYgKCFvYmplY3QpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWlzc2luZyBpbmpl
Y3RlZCBzY3JpcHQgZm9yIGdpdmVuIG5vZGVJZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LSAgICByZXN1bHQgPSBvYmplY3Q7CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJv
clN0cmluZyk7CisKKyAgICBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4g
b2JqZWN0ID0gcmVzb2x2ZU5vZGUobm9kZSwgb2JqZWN0R3JvdXApOworICAgIGlmICghb2JqZWN0
KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk1pc3NpbmcgaW5qZWN0ZWQgc2NyaXB0
IGZvciBnaXZlbiBub2RlSWQiX3MpOworCisgICAgcmV0dXJuIG9iamVjdC5yZWxlYXNlTm9uTnVs
bCgpOwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpnZXRBdHRyaWJ1dGVzKEVycm9yU3Ry
aW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJZCwgUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5n
Pj4mIHJlc3VsdCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPFN0
cmluZz4+PiBJbnNwZWN0b3JET01BZ2VudDo6Z2V0QXR0cmlidXRlcyhQcm90b2NvbDo6RE9NOjpO
b2RlSWQgbm9kZUlkKQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsK
KwogICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBhc3NlcnRFbGVtZW50KGVycm9yU3RyaW5nLCBub2Rl
SWQpOwogICAgIGlmICghZWxlbWVudCkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4g
bWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCi0gICAgcmVzdWx0ID0gYnVpbGRBcnJheUZv
ckVsZW1lbnRBdHRyaWJ1dGVzKGVsZW1lbnQpOworICAgIHJldHVybiBidWlsZEFycmF5Rm9yRWxl
bWVudEF0dHJpYnV0ZXMoZWxlbWVudCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnJl
cXVlc3ROb2RlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBvYmplY3RJ
ZCwgaW50KiBub2RlSWQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxQcm90b2NvbDo6RE9NOjpO
b2RlSWQ+IEluc3BlY3RvckRPTUFnZW50OjpyZXF1ZXN0Tm9kZShjb25zdCBQcm90b2NvbDo6UnVu
dGltZTo6UmVtb3RlT2JqZWN0SWQmIG9iamVjdElkKQogeworICAgIFByb3RvY29sOjpFcnJvclN0
cmluZyBlcnJvclN0cmluZzsKKwogICAgIE5vZGUqIG5vZGUgPSBub2RlRm9yT2JqZWN0SWQob2Jq
ZWN0SWQpOwotICAgIGlmIChub2RlKQotICAgICAgICAqbm9kZUlkID0gcHVzaE5vZGVQYXRoVG9G
cm9udGVuZChlcnJvclN0cmluZywgbm9kZSk7Ci0gICAgZWxzZQotICAgICAgICAqbm9kZUlkID0g
MDsKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTWlzc2lu
ZyBub2RlIGZvciBnaXZlbiBvYmplY3RJZCJfcyk7CisKKyAgICBhdXRvIG5vZGVJZCA9IHB1c2hO
b2RlUGF0aFRvRnJvbnRlbmQoZXJyb3JTdHJpbmcsIG5vZGUpOworICAgIGlmICghbm9kZUlkKQor
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOworCisgICAgcmV0dXJu
IG5vZGVJZDsKIH0KIAogU3RyaW5nIEluc3BlY3RvckRPTUFnZW50Ojpkb2N1bWVudFVSTFN0cmlu
ZyhEb2N1bWVudCogZG9jdW1lbnQpCkBAIC0xNTQ0LDQ0ICsxNjEzLDQ0IEBAIHN0YXRpYyBTdHJp
bmcgZG9jdW1lbnRCYXNlVVJMU3RyaW5nKERvY3VtZW50KiBkb2N1bWVudCkKICAgICByZXR1cm4g
ZG9jdW1lbnQtPmNvbXBsZXRlVVJMKGVtcHR5U3RyaW5nKCkpLnN0cmluZygpOwogfQogCi1zdGF0
aWMgYm9vbCBwc2V1ZG9FbGVtZW50VHlwZShQc2V1ZG9JZCBwc2V1ZG9JZCwgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6RE9NOjpQc2V1ZG9UeXBlKiB0eXBlKQorc3RhdGljIGJvb2wgcHNldWRvRWxlbWVu
dFR5cGUoUHNldWRvSWQgcHNldWRvSWQsIFByb3RvY29sOjpET006OlBzZXVkb1R5cGUqIHR5cGUp
CiB7CiAgICAgc3dpdGNoIChwc2V1ZG9JZCkgewogICAgIGNhc2UgUHNldWRvSWQ6OkJlZm9yZToK
LSAgICAgICAgKnR5cGUgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpET006OlBzZXVkb1R5cGU6OkJl
Zm9yZTsKKyAgICAgICAgKnR5cGUgPSBQcm90b2NvbDo6RE9NOjpQc2V1ZG9UeXBlOjpCZWZvcmU7
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIGNhc2UgUHNldWRvSWQ6OkFmdGVyOgotICAgICAg
ICAqdHlwZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6UHNldWRvVHlwZTo6QWZ0ZXI7Cisg
ICAgICAgICp0eXBlID0gUHJvdG9jb2w6OkRPTTo6UHNldWRvVHlwZTo6QWZ0ZXI7CiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9
CiB9CiAKLXN0YXRpYyBJbnNwZWN0b3I6OlByb3RvY29sOjpET006OlNoYWRvd1Jvb3RUeXBlIHNo
YWRvd1Jvb3RUeXBlKFNoYWRvd1Jvb3RNb2RlIG1vZGUpCitzdGF0aWMgUHJvdG9jb2w6OkRPTTo6
U2hhZG93Um9vdFR5cGUgc2hhZG93Um9vdFR5cGUoU2hhZG93Um9vdE1vZGUgbW9kZSkKIHsKICAg
ICBzd2l0Y2ggKG1vZGUpIHsKICAgICBjYXNlIFNoYWRvd1Jvb3RNb2RlOjpVc2VyQWdlbnQ6Ci0g
ICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpET006OlNoYWRvd1Jvb3RUeXBlOjpV
c2VyQWdlbnQ7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6RE9NOjpTaGFkb3dSb290VHlwZTo6
VXNlckFnZW50OwogICAgIGNhc2UgU2hhZG93Um9vdE1vZGU6OkNsb3NlZDoKLSAgICAgICAgcmV0
dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6U2hhZG93Um9vdFR5cGU6OkNsb3NlZDsKKyAg
ICAgICAgcmV0dXJuIFByb3RvY29sOjpET006OlNoYWRvd1Jvb3RUeXBlOjpDbG9zZWQ7CiAgICAg
Y2FzZSBTaGFkb3dSb290TW9kZTo6T3BlbjoKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRPTTo6U2hhZG93Um9vdFR5cGU6Ok9wZW47CisgICAgICAgIHJldHVybiBQcm90b2Nv
bDo6RE9NOjpTaGFkb3dSb290VHlwZTo6T3BlbjsKICAgICB9CiAKICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpTaGFkb3dSb290
VHlwZTo6VXNlckFnZW50OworICAgIHJldHVybiBQcm90b2NvbDo6RE9NOjpTaGFkb3dSb290VHlw
ZTo6VXNlckFnZW50OwogfQogCi1zdGF0aWMgSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpDdXN0
b21FbGVtZW50U3RhdGUgY3VzdG9tRWxlbWVudFN0YXRlKGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQp
CitzdGF0aWMgUHJvdG9jb2w6OkRPTTo6Q3VzdG9tRWxlbWVudFN0YXRlIGN1c3RvbUVsZW1lbnRT
dGF0ZShjb25zdCBFbGVtZW50JiBlbGVtZW50KQogewogICAgIGlmIChlbGVtZW50LmlzRGVmaW5l
ZEN1c3RvbUVsZW1lbnQoKSkKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRP
TTo6Q3VzdG9tRWxlbWVudFN0YXRlOjpDdXN0b207CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6
RE9NOjpDdXN0b21FbGVtZW50U3RhdGU6OkN1c3RvbTsKICAgICBpZiAoZWxlbWVudC5pc0ZhaWxl
ZEN1c3RvbUVsZW1lbnQoKSkKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRP
TTo6Q3VzdG9tRWxlbWVudFN0YXRlOjpGYWlsZWQ7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6
RE9NOjpDdXN0b21FbGVtZW50U3RhdGU6OkZhaWxlZDsKICAgICBpZiAoZWxlbWVudC5pc1VuZGVm
aW5lZEN1c3RvbUVsZW1lbnQoKSB8fCBlbGVtZW50LmlzQ3VzdG9tRWxlbWVudFVwZ3JhZGVDYW5k
aWRhdGUoKSkKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Q3VzdG9t
RWxlbWVudFN0YXRlOjpXYWl0aW5nOwotICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpE
T006OkN1c3RvbUVsZW1lbnRTdGF0ZTo6QnVpbHRpbjsKKyAgICAgICAgcmV0dXJuIFByb3RvY29s
OjpET006OkN1c3RvbUVsZW1lbnRTdGF0ZTo6V2FpdGluZzsKKyAgICByZXR1cm4gUHJvdG9jb2w6
OkRPTTo6Q3VzdG9tRWxlbWVudFN0YXRlOjpCdWlsdGluOwogfQogCiBzdGF0aWMgU3RyaW5nIGNv
bXB1dGVDb250ZW50U2VjdXJpdHlQb2xpY3lTSEEyNTZIYXNoKGNvbnN0IEVsZW1lbnQmIGVsZW1l
bnQpCkBAIC0xNTk3LDkgKzE2NjYsOSBAQCBzdGF0aWMgU3RyaW5nIGNvbXB1dGVDb250ZW50U2Vj
dXJpdHlQb2xpY3lTSEEyNTZIYXNoKGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQpCiAgICAgcmV0dXJu
IG1ha2VTdHJpbmcoInNoYTI1Ni0iLCBiYXNlNjRFbmNvZGUoZGlnZXN0LmRhdGEoKSwgZGlnZXN0
LnNpemUoKSkpOwogfQogCi1SZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlPiBJbnNw
ZWN0b3JET01BZ2VudDo6YnVpbGRPYmplY3RGb3JOb2RlKE5vZGUqIG5vZGUsIGludCBkZXB0aCwg
Tm9kZVRvSWRNYXAqIG5vZGVzTWFwKQorUmVmPFByb3RvY29sOjpET006Ok5vZGU+IEluc3BlY3Rv
ckRPTUFnZW50OjpidWlsZE9iamVjdEZvck5vZGUoTm9kZSogbm9kZSwgaW50IGRlcHRoLCBOb2Rl
VG9JZE1hcCogbm9kZXNNYXApCiB7Ci0gICAgaW50IGlkID0gYmluZChub2RlLCBub2Rlc01hcCk7
CisgICAgYXV0byBpZCA9IGJpbmQobm9kZSwgbm9kZXNNYXApOwogICAgIFN0cmluZyBub2RlTmFt
ZTsKICAgICBTdHJpbmcgbG9jYWxOYW1lOwogICAgIFN0cmluZyBub2RlVmFsdWU7CkBAIC0xNjMw
LDcgKzE2OTksNyBAQCBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlPiBJbnNwZWN0
b3JET01BZ2VudDo6YnVpbGRPYmplY3RGb3JOb2RlKE5vZGUqCiAgICAgICAgIGJyZWFrOwogICAg
IH0KIAotICAgIGF1dG8gdmFsdWUgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU6OmNy
ZWF0ZSgpCisgICAgYXV0byB2YWx1ZSA9IFByb3RvY29sOjpET006Ok5vZGU6OmNyZWF0ZSgpCiAg
ICAgICAgIC5zZXROb2RlSWQoaWQpCiAgICAgICAgIC5zZXROb2RlVHlwZShzdGF0aWNfY2FzdDxp
bnQ+KG5vZGUtPm5vZGVUeXBlKCkpKQogICAgICAgICAuc2V0Tm9kZU5hbWUobm9kZU5hbWUpCkBA
IC0xNjQxLDcgKzE3MTAsNyBAQCBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlPiBJ
bnNwZWN0b3JET01BZ2VudDo6YnVpbGRPYmplY3RGb3JOb2RlKE5vZGUqCiAgICAgaWYgKG5vZGUt
PmlzQ29udGFpbmVyTm9kZSgpKSB7CiAgICAgICAgIGludCBub2RlQ291bnQgPSBpbm5lckNoaWxk
Tm9kZUNvdW50KG5vZGUpOwogICAgICAgICB2YWx1ZS0+c2V0Q2hpbGROb2RlQ291bnQobm9kZUNv
dW50KTsKLSAgICAgICAgUmVmPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9N
OjpOb2RlPj4gY2hpbGRyZW4gPSBidWlsZEFycmF5Rm9yQ29udGFpbmVyQ2hpbGRyZW4obm9kZSwg
ZGVwdGgsIG5vZGVzTWFwKTsKKyAgICAgICAgUmVmPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkRP
TTo6Tm9kZT4+IGNoaWxkcmVuID0gYnVpbGRBcnJheUZvckNvbnRhaW5lckNoaWxkcmVuKG5vZGUs
IGRlcHRoLCBub2Rlc01hcCk7CiAgICAgICAgIGlmIChjaGlsZHJlbi0+bGVuZ3RoKCkgPiAwKQog
ICAgICAgICAgICAgdmFsdWUtPnNldENoaWxkcmVuKFdURk1vdmUoY2hpbGRyZW4pKTsKICAgICB9
CkBAIC0xNjYxLDcgKzE3MzAsNyBAQCBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2Rl
PiBJbnNwZWN0b3JET01BZ2VudDo6YnVpbGRPYmplY3RGb3JOb2RlKE5vZGUqCiAgICAgICAgIH0K
IAogICAgICAgICBpZiAoU2hhZG93Um9vdCogcm9vdCA9IGVsZW1lbnQuc2hhZG93Um9vdCgpKSB7
Ci0gICAgICAgICAgICBhdXRvIHNoYWRvd1Jvb3RzID0gSlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6
OlByb3RvY29sOjpET006Ok5vZGU+OjpjcmVhdGUoKTsKKyAgICAgICAgICAgIGF1dG8gc2hhZG93
Um9vdHMgPSBKU09OOjpBcnJheU9mPFByb3RvY29sOjpET006Ok5vZGU+OjpjcmVhdGUoKTsKICAg
ICAgICAgICAgIHNoYWRvd1Jvb3RzLT5hZGRJdGVtKGJ1aWxkT2JqZWN0Rm9yTm9kZShyb290LCAw
LCBub2Rlc01hcCkpOwogICAgICAgICAgICAgdmFsdWUtPnNldFNoYWRvd1Jvb3RzKFdURk1vdmUo
c2hhZG93Um9vdHMpKTsKICAgICAgICAgfQpAQCAtMTY3MywxNiArMTc0MiwxNiBAQCBSZWY8SW5z
cGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlPiBJbnNwZWN0b3JET01BZ2VudDo6YnVpbGRPYmpl
Y3RGb3JOb2RlKE5vZGUqCiAgICAgICAgICAgICB2YWx1ZS0+c2V0Q29udGVudFNlY3VyaXR5UG9s
aWN5SGFzaChjb21wdXRlQ29udGVudFNlY3VyaXR5UG9saWN5U0hBMjU2SGFzaChlbGVtZW50KSk7
CiAKICAgICAgICAgYXV0byBzdGF0ZSA9IGN1c3RvbUVsZW1lbnRTdGF0ZShlbGVtZW50KTsKLSAg
ICAgICAgaWYgKHN0YXRlICE9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Q3VzdG9tRWxlbWVu
dFN0YXRlOjpCdWlsdGluKQorICAgICAgICBpZiAoc3RhdGUgIT0gUHJvdG9jb2w6OkRPTTo6Q3Vz
dG9tRWxlbWVudFN0YXRlOjpCdWlsdGluKQogICAgICAgICAgICAgdmFsdWUtPnNldEN1c3RvbUVs
ZW1lbnRTdGF0ZShzdGF0ZSk7CiAKICAgICAgICAgaWYgKGVsZW1lbnQucHNldWRvSWQoKSAhPSBQ
c2V1ZG9JZDo6Tm9uZSkgewotICAgICAgICAgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpQ
c2V1ZG9UeXBlIHBzZXVkb1R5cGU7CisgICAgICAgICAgICBQcm90b2NvbDo6RE9NOjpQc2V1ZG9U
eXBlIHBzZXVkb1R5cGU7CiAgICAgICAgICAgICBpZiAocHNldWRvRWxlbWVudFR5cGUoZWxlbWVu
dC5wc2V1ZG9JZCgpLCAmcHNldWRvVHlwZSkpCiAgICAgICAgICAgICAgICAgdmFsdWUtPnNldFBz
ZXVkb1R5cGUocHNldWRvVHlwZSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpZiAo
YXV0byBwc2V1ZG9FbGVtZW50cyA9IGJ1aWxkQXJyYXlGb3JQc2V1ZG9FbGVtZW50cyhlbGVtZW50
LCBub2Rlc01hcCkpCi0gICAgICAgICAgICAgICAgdmFsdWUtPnNldFBzZXVkb0VsZW1lbnRzKFdU
Rk1vdmUocHNldWRvRWxlbWVudHMpKTsKKyAgICAgICAgICAgICAgICB2YWx1ZS0+c2V0UHNldWRv
RWxlbWVudHMocHNldWRvRWxlbWVudHMucmVsZWFzZU5vbk51bGwoKSk7CiAgICAgICAgIH0KICAg
ICB9IGVsc2UgaWYgKGlzPERvY3VtZW50Pigqbm9kZSkpIHsKICAgICAgICAgRG9jdW1lbnQmIGRv
Y3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpub2RlKTsKQEAgLTE3MjEsOSArMTc5MCw5IEBA
IFJlZjxKU09OOjpBcnJheU9mPFN0cmluZz4+IEluc3BlY3RvckRPTUFnZW50OjpidWlsZEFycmF5
Rm9yRWxlbWVudEF0dHJpYnV0ZXMoRWxlCiAgICAgcmV0dXJuIGF0dHJpYnV0ZXNWYWx1ZTsKIH0K
IAotUmVmPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlPj4gSW5z
cGVjdG9yRE9NQWdlbnQ6OmJ1aWxkQXJyYXlGb3JDb250YWluZXJDaGlsZHJlbihOb2RlKiBjb250
YWluZXIsIGludCBkZXB0aCwgTm9kZVRvSWRNYXAqIG5vZGVzTWFwKQorUmVmPEpTT046OkFycmF5
T2Y8UHJvdG9jb2w6OkRPTTo6Tm9kZT4+IEluc3BlY3RvckRPTUFnZW50OjpidWlsZEFycmF5Rm9y
Q29udGFpbmVyQ2hpbGRyZW4oTm9kZSogY29udGFpbmVyLCBpbnQgZGVwdGgsIE5vZGVUb0lkTWFw
KiBub2Rlc01hcCkKIHsKLSAgICBhdXRvIGNoaWxkcmVuID0gSlNPTjo6QXJyYXlPZjxJbnNwZWN0
b3I6OlByb3RvY29sOjpET006Ok5vZGU+OjpjcmVhdGUoKTsKKyAgICBhdXRvIGNoaWxkcmVuID0g
SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6RE9NOjpOb2RlPjo6Y3JlYXRlKCk7CiAgICAgaWYgKGRl
cHRoID09IDApIHsKICAgICAgICAgLy8gU3BlY2lhbC1jYXNlIHRoZSBvbmx5IHRleHQgY2hpbGQg
LSBwcmV0ZW5kIHRoYXQgY29udGFpbmVyJ3MgY2hpbGRyZW4gaGF2ZSBiZWVuIHJlcXVlc3RlZC4K
ICAgICAgICAgTm9kZSogZmlyc3RDaGlsZCA9IGNvbnRhaW5lci0+Zmlyc3RDaGlsZCgpOwpAQCAt
MTc0NSwxNCArMTgxNCwxNCBAQCBSZWY8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29s
OjpET006Ok5vZGU+PiBJbnNwZWN0b3JET01BZ2VudDo6YnVpbGRBcnJheQogICAgIHJldHVybiBj
aGlsZHJlbjsKIH0KIAotUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6
RE9NOjpOb2RlPj4gSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkQXJyYXlGb3JQc2V1ZG9FbGVtZW50
cyhjb25zdCBFbGVtZW50JiBlbGVtZW50LCBOb2RlVG9JZE1hcCogbm9kZXNNYXApCitSZWZQdHI8
SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6RE9NOjpOb2RlPj4gSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1
aWxkQXJyYXlGb3JQc2V1ZG9FbGVtZW50cyhjb25zdCBFbGVtZW50JiBlbGVtZW50LCBOb2RlVG9J
ZE1hcCogbm9kZXNNYXApCiB7CiAgICAgUHNldWRvRWxlbWVudCogYmVmb3JlRWxlbWVudCA9IGVs
ZW1lbnQuYmVmb3JlUHNldWRvRWxlbWVudCgpOwogICAgIFBzZXVkb0VsZW1lbnQqIGFmdGVyRWxl
bWVudCA9IGVsZW1lbnQuYWZ0ZXJQc2V1ZG9FbGVtZW50KCk7CiAgICAgaWYgKCFiZWZvcmVFbGVt
ZW50ICYmICFhZnRlckVsZW1lbnQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgYXV0
byBwc2V1ZG9FbGVtZW50cyA9IEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9N
OjpOb2RlPjo6Y3JlYXRlKCk7CisgICAgYXV0byBwc2V1ZG9FbGVtZW50cyA9IEpTT046OkFycmF5
T2Y8UHJvdG9jb2w6OkRPTTo6Tm9kZT46OmNyZWF0ZSgpOwogICAgIGlmIChiZWZvcmVFbGVtZW50
KQogICAgICAgICBwc2V1ZG9FbGVtZW50cy0+YWRkSXRlbShidWlsZE9iamVjdEZvck5vZGUoYmVm
b3JlRWxlbWVudCwgMCwgbm9kZXNNYXApKTsKICAgICBpZiAoYWZ0ZXJFbGVtZW50KQpAQCAtMTc2
MCw3ICsxODI5LDcgQEAgUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6
RE9NOjpOb2RlPj4gSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkQXIKICAgICByZXR1cm4gcHNldWRv
RWxlbWVudHM7CiB9CiAKLVJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkV2ZW50TGlzdGVu
ZXI+IEluc3BlY3RvckRPTUFnZW50OjpidWlsZE9iamVjdEZvckV2ZW50TGlzdGVuZXIoY29uc3Qg
UmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXImIHJlZ2lzdGVyZWRFdmVudExpc3RlbmVyLCBpbnQgaWRl
bnRpZmllciwgRXZlbnRUYXJnZXQmIGV2ZW50VGFyZ2V0LCBjb25zdCBBdG9tU3RyaW5nJiBldmVu
dFR5cGUsIGJvb2wgZGlzYWJsZWQsIGNvbnN0IFJlZlB0cjxKU0M6OkJyZWFrcG9pbnQ+JiBicmVh
a3BvaW50KQorUmVmPFByb3RvY29sOjpET006OkV2ZW50TGlzdGVuZXI+IEluc3BlY3RvckRPTUFn
ZW50OjpidWlsZE9iamVjdEZvckV2ZW50TGlzdGVuZXIoY29uc3QgUmVnaXN0ZXJlZEV2ZW50TGlz
dGVuZXImIHJlZ2lzdGVyZWRFdmVudExpc3RlbmVyLCBQcm90b2NvbDo6RE9NOjpFdmVudExpc3Rl
bmVySWQgaWRlbnRpZmllciwgRXZlbnRUYXJnZXQmIGV2ZW50VGFyZ2V0LCBjb25zdCBBdG9tU3Ry
aW5nJiBldmVudFR5cGUsIGJvb2wgZGlzYWJsZWQsIGNvbnN0IFJlZlB0cjxKU0M6OkJyZWFrcG9p
bnQ+JiBicmVha3BvaW50KQogewogICAgIFJlZjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVy
ID0gcmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIuY2FsbGJhY2soKTsKIApAQCAtMTgyMiw3ICsxODkx
LDcgQEAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6RXZlbnRMaXN0ZW5lcj4gSW5zcGVj
dG9yRE9NQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yRXYKICAgICAgICAgfQogICAgIH0KIAotICAgIGF1
dG8gdmFsdWUgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkV2ZW50TGlzdGVuZXI6OmNyZWF0
ZSgpCisgICAgYXV0byB2YWx1ZSA9IFByb3RvY29sOjpET006OkV2ZW50TGlzdGVuZXI6OmNyZWF0
ZSgpCiAgICAgICAgIC5zZXRFdmVudExpc3RlbmVySWQoaWRlbnRpZmllcikKICAgICAgICAgLnNl
dFR5cGUoZXZlbnRUeXBlKQogICAgICAgICAuc2V0VXNlQ2FwdHVyZShyZWdpc3RlcmVkRXZlbnRM
aXN0ZW5lci51c2VDYXB0dXJlKCkpCkBAIC0xODMzLDcgKzE5MDIsNyBAQCBSZWY8SW5zcGVjdG9y
OjpQcm90b2NvbDo6RE9NOjpFdmVudExpc3RlbmVyPiBJbnNwZWN0b3JET01BZ2VudDo6YnVpbGRP
YmplY3RGb3JFdgogICAgIGVsc2UgaWYgKGlzPERPTVdpbmRvdz4oZXZlbnRUYXJnZXQpKQogICAg
ICAgICB2YWx1ZS0+c2V0T25XaW5kb3codHJ1ZSk7CiAgICAgaWYgKCFzY3JpcHRJRC5pc051bGwo
KSkgewotICAgICAgICBhdXRvIGxvY2F0aW9uID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdn
ZXI6OkxvY2F0aW9uOjpjcmVhdGUoKQorICAgICAgICBhdXRvIGxvY2F0aW9uID0gUHJvdG9jb2w6
OkRlYnVnZ2VyOjpMb2NhdGlvbjo6Y3JlYXRlKCkKICAgICAgICAgICAgIC5zZXRTY3JpcHRJZChz
Y3JpcHRJRCkKICAgICAgICAgICAgIC5zZXRMaW5lTnVtYmVyKGxpbmVOdW1iZXIpCiAgICAgICAg
ICAgICAucmVsZWFzZSgpOwpAQCAtMTg1Myw3ICsxOTIyLDcgQEAgUmVmPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRPTTo6RXZlbnRMaXN0ZW5lcj4gSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkT2JqZWN0
Rm9yRXYKICAgICByZXR1cm4gdmFsdWU7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnBy
b2Nlc3NBY2Nlc3NpYmlsaXR5Q2hpbGRyZW4oQVhDb3JlT2JqZWN0JiBheE9iamVjdCwgSlNPTjo6
QXJyYXlPZjxpbnQ+JiBjaGlsZE5vZGVJZHMpCit2b2lkIEluc3BlY3RvckRPTUFnZW50Ojpwcm9j
ZXNzQWNjZXNzaWJpbGl0eUNoaWxkcmVuKEFYQ29yZU9iamVjdCYgYXhPYmplY3QsIEpTT046OkFy
cmF5T2Y8UHJvdG9jb2w6OkRPTTo6Tm9kZUlkPiYgY2hpbGROb2RlSWRzKQogewogICAgIGNvbnN0
IGF1dG8mIGNoaWxkcmVuID0gYXhPYmplY3QuY2hpbGRyZW4oKTsKICAgICBpZiAoIWNoaWxkcmVu
LnNpemUoKSkKQEAgLTE4NjcsNDMgKzE5MzYsMzkgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6
cHJvY2Vzc0FjY2Vzc2liaWxpdHlDaGlsZHJlbihBWENvcmVPYmplY3QmIGF4T2JqZWN0LCBKU08K
ICAgICB9CiB9CiAgICAgCi1SZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3Np
YmlsaXR5UHJvcGVydGllcz4gSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yQWNjZXNz
aWJpbGl0eVByb3BlcnRpZXMoTm9kZSogbm9kZSkKK1JlZjxQcm90b2NvbDo6RE9NOjpBY2Nlc3Np
YmlsaXR5UHJvcGVydGllcz4gSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yQWNjZXNz
aWJpbGl0eVByb3BlcnRpZXMoTm9kZSYgbm9kZSkKIHsKLSAgICBBU1NFUlQobm9kZSk7Ci0gICAg
aWYgKCFub2RlKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQogICAgIGlmICghV2ViQ29yZTo6
QVhPYmplY3RDYWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSkKICAgICAgICAgV2ViQ29yZTo6
QVhPYmplY3RDYWNoZTo6ZW5hYmxlQWNjZXNzaWJpbGl0eSgpOwogCiAgICAgTm9kZSogYWN0aXZl
RGVzY2VuZGFudE5vZGUgPSBudWxscHRyOwogICAgIGJvb2wgYnVzeSA9IGZhbHNlOwotICAgIGF1
dG8gY2hlY2tlZCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3Bl
cnRpZXM6OkNoZWNrZWQ6OkZhbHNlOwotICAgIFJlZlB0cjxKU09OOjpBcnJheU9mPGludD4+IGNo
aWxkTm9kZUlkczsKLSAgICBSZWZQdHI8SlNPTjo6QXJyYXlPZjxpbnQ+PiBjb250cm9sbGVkTm9k
ZUlkczsKLSAgICBhdXRvIGN1cnJlbnRTdGF0ZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6
QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6OkN1cnJlbnQ6OkZhbHNlOworICAgIGF1dG8gY2hlY2tl
ZCA9IFByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpDaGVja2VkOjpGYWxz
ZTsKKyAgICBSZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6RE9NOjpOb2RlSWQ+PiBjaGls
ZE5vZGVJZHM7CisgICAgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkRPTTo6Tm9kZUlk
Pj4gY29udHJvbGxlZE5vZGVJZHM7CisgICAgYXV0byBjdXJyZW50U3RhdGUgPSBQcm90b2NvbDo6
RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6Q3VycmVudDo6RmFsc2U7CiAgICAgYm9vbCBl
eGlzdHMgPSBmYWxzZTsKICAgICBib29sIGV4cGFuZGVkID0gZmFsc2U7CiAgICAgYm9vbCBkaXNh
YmxlZCA9IGZhbHNlOwotICAgIFJlZlB0cjxKU09OOjpBcnJheU9mPGludD4+IGZsb3dlZE5vZGVJ
ZHM7CisgICAgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkRPTTo6Tm9kZUlkPj4gZmxv
d2VkTm9kZUlkczsKICAgICBib29sIGZvY3VzZWQgPSBmYWxzZTsKICAgICBib29sIGlnbm9yZWQg
PSB0cnVlOwogICAgIGJvb2wgaWdub3JlZEJ5RGVmYXVsdCA9IGZhbHNlOwotICAgIGF1dG8gaW52
YWxpZCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6
OkludmFsaWQ6OkZhbHNlOworICAgIGF1dG8gaW52YWxpZCA9IFByb3RvY29sOjpET006OkFjY2Vz
c2liaWxpdHlQcm9wZXJ0aWVzOjpJbnZhbGlkOjpGYWxzZTsKICAgICBib29sIGhpZGRlbiA9IGZh
bHNlOwogICAgIFN0cmluZyBsYWJlbDsKICAgICBib29sIGxpdmVSZWdpb25BdG9taWMgPSBmYWxz
ZTsKICAgICBSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiBsaXZlUmVnaW9uUmVsZXZhbnQ7
Ci0gICAgYXV0byBsaXZlUmVnaW9uU3RhdHVzID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpB
Y2Nlc3NpYmlsaXR5UHJvcGVydGllczo6TGl2ZVJlZ2lvblN0YXR1czo6T2ZmOworICAgIGF1dG8g
bGl2ZVJlZ2lvblN0YXR1cyA9IFByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVz
OjpMaXZlUmVnaW9uU3RhdHVzOjpPZmY7CiAgICAgTm9kZSogbW91c2VFdmVudE5vZGUgPSBudWxs
cHRyOwotICAgIFJlZlB0cjxKU09OOjpBcnJheU9mPGludD4+IG93bmVkTm9kZUlkczsKKyAgICBS
ZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6RE9NOjpOb2RlSWQ+PiBvd25lZE5vZGVJZHM7
CiAgICAgTm9kZSogcGFyZW50Tm9kZSA9IG51bGxwdHI7CiAgICAgYm9vbCBwcmVzc2VkID0gZmFs
c2U7CiAgICAgYm9vbCByZWFkb25seSA9IGZhbHNlOwogICAgIGJvb2wgcmVxdWlyZWQgPSBmYWxz
ZTsKICAgICBTdHJpbmcgcm9sZTsKICAgICBib29sIHNlbGVjdGVkID0gZmFsc2U7Ci0gICAgUmVm
UHRyPEpTT046OkFycmF5T2Y8aW50Pj4gc2VsZWN0ZWRDaGlsZE5vZGVJZHM7CisgICAgUmVmUHRy
PEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkRPTTo6Tm9kZUlkPj4gc2VsZWN0ZWRDaGlsZE5vZGVJ
ZHM7CiAgICAgYm9vbCBzdXBwb3J0c0NoZWNrZWQgPSBmYWxzZTsKICAgICBib29sIHN1cHBvcnRz
RXhwYW5kZWQgPSBmYWxzZTsKICAgICBib29sIHN1cHBvcnRzTGl2ZVJlZ2lvbiA9IGZhbHNlOwpA
QCAtMTkxNSw4ICsxOTgwLDggQEAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6QWNj
ZXNzaWJpbGl0eVByb3BlcnRpZXM+IEluc3BlY3RvckRPTUFnZW50OjpidWkKICAgICB1bnNpZ25l
ZCBoaWVyYXJjaGljYWxMZXZlbCA9IDA7CiAgICAgdW5zaWduZWQgbGV2ZWwgPSAwOwogCi0gICAg
aWYgKEFYT2JqZWN0Q2FjaGUqIGF4T2JqZWN0Q2FjaGUgPSBub2RlLT5kb2N1bWVudCgpLmF4T2Jq
ZWN0Q2FjaGUoKSkgewotICAgICAgICBpZiAoQVhDb3JlT2JqZWN0KiBheE9iamVjdCA9IGF4T2Jq
ZWN0Q2FjaGUtPmdldE9yQ3JlYXRlKG5vZGUpKSB7CisgICAgaWYgKEFYT2JqZWN0Q2FjaGUqIGF4
T2JqZWN0Q2FjaGUgPSBub2RlLmRvY3VtZW50KCkuYXhPYmplY3RDYWNoZSgpKSB7CisgICAgICAg
IGlmIChBWENvcmVPYmplY3QqIGF4T2JqZWN0ID0gYXhPYmplY3RDYWNoZS0+Z2V0T3JDcmVhdGUo
Jm5vZGUpKSB7CiAKICAgICAgICAgICAgIGlmIChBWENvcmVPYmplY3QqIGFjdGl2ZURlc2NlbmRh
bnQgPSBheE9iamVjdC0+YWN0aXZlRGVzY2VuZGFudCgpKQogICAgICAgICAgICAgICAgIGFjdGl2
ZURlc2NlbmRhbnROb2RlID0gYWN0aXZlRGVzY2VuZGFudC0+bm9kZSgpOwpAQCAtMTkzMiw0NyAr
MTk5Nyw0OSBAQCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5
UHJvcGVydGllcz4gSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aQogICAgICAgICAgICAgaWYgKHN1cHBv
cnRzQ2hlY2tlZCkgewogICAgICAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlCdXR0b25TdGF0ZSBj
aGVja1ZhbHVlID0gYXhPYmplY3QtPmNoZWNrYm94T3JSYWRpb1ZhbHVlKCk7IC8vIEVsZW1lbnQg
dXNpbmcgYXJpYS1jaGVja2VkLgogICAgICAgICAgICAgICAgIGlmIChjaGVja1ZhbHVlID09IEFj
Y2Vzc2liaWxpdHlCdXR0b25TdGF0ZTo6T24pCi0gICAgICAgICAgICAgICAgICAgIGNoZWNrZWQg
PSBJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpDaGVj
a2VkOjpUcnVlOworICAgICAgICAgICAgICAgICAgICBjaGVja2VkID0gUHJvdG9jb2w6OkRPTTo6
QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6OkNoZWNrZWQ6OlRydWU7CiAgICAgICAgICAgICAgICAg
ZWxzZSBpZiAoY2hlY2tWYWx1ZSA9PSBBY2Nlc3NpYmlsaXR5QnV0dG9uU3RhdGU6Ok1peGVkKQot
ICAgICAgICAgICAgICAgICAgICBjaGVja2VkID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpB
Y2Nlc3NpYmlsaXR5UHJvcGVydGllczo6Q2hlY2tlZDo6TWl4ZWQ7CisgICAgICAgICAgICAgICAg
ICAgIGNoZWNrZWQgPSBQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6Q2hl
Y2tlZDo6TWl4ZWQ7CiAgICAgICAgICAgICAgICAgZWxzZSBpZiAoYXhPYmplY3QtPmlzQ2hlY2tl
ZCgpKSAvLyBOYXRpdmUgY2hlY2tib3guCi0gICAgICAgICAgICAgICAgICAgIGNoZWNrZWQgPSBJ
bnNwZWN0b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpDaGVja2Vk
OjpUcnVlOworICAgICAgICAgICAgICAgICAgICBjaGVja2VkID0gUHJvdG9jb2w6OkRPTTo6QWNj
ZXNzaWJpbGl0eVByb3BlcnRpZXM6OkNoZWNrZWQ6OlRydWU7CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAKICAgICAgICAgICAgIGlmICghYXhPYmplY3QtPmNoaWxkcmVuKCkuaXNFbXB0eSgp
KSB7Ci0gICAgICAgICAgICAgICAgY2hpbGROb2RlSWRzID0gSlNPTjo6QXJyYXlPZjxpbnQ+Ojpj
cmVhdGUoKTsKKyAgICAgICAgICAgICAgICBjaGlsZE5vZGVJZHMgPSBKU09OOjpBcnJheU9mPFBy
b3RvY29sOjpET006Ok5vZGVJZD46OmNyZWF0ZSgpOwogICAgICAgICAgICAgICAgIHByb2Nlc3NB
Y2Nlc3NpYmlsaXR5Q2hpbGRyZW4oKmF4T2JqZWN0LCAqY2hpbGROb2RlSWRzKTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgVmVjdG9yPEVsZW1lbnQqPiBjb250cm9s
bGVkRWxlbWVudHM7CiAgICAgICAgICAgICBheE9iamVjdC0+ZWxlbWVudHNGcm9tQXR0cmlidXRl
KGNvbnRyb2xsZWRFbGVtZW50cywgYXJpYV9jb250cm9sc0F0dHIpOwogICAgICAgICAgICAgaWYg
KGNvbnRyb2xsZWRFbGVtZW50cy5zaXplKCkpIHsKLSAgICAgICAgICAgICAgICBjb250cm9sbGVk
Tm9kZUlkcyA9IEpTT046OkFycmF5T2Y8aW50Pjo6Y3JlYXRlKCk7Ci0gICAgICAgICAgICAgICAg
Zm9yIChFbGVtZW50KiBjb250cm9sbGVkRWxlbWVudCA6IGNvbnRyb2xsZWRFbGVtZW50cykKLSAg
ICAgICAgICAgICAgICAgICAgY29udHJvbGxlZE5vZGVJZHMtPmFkZEl0ZW0ocHVzaE5vZGVQYXRo
VG9Gcm9udGVuZChjb250cm9sbGVkRWxlbWVudCkpOworICAgICAgICAgICAgICAgIGNvbnRyb2xs
ZWROb2RlSWRzID0gSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6RE9NOjpOb2RlSWQ+OjpjcmVhdGUo
KTsKKyAgICAgICAgICAgICAgICBmb3IgKEVsZW1lbnQqIGNvbnRyb2xsZWRFbGVtZW50IDogY29u
dHJvbGxlZEVsZW1lbnRzKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChhdXRvIGNvbnRyb2xs
ZWRFbGVtZW50SWQgPSBwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKGNvbnRyb2xsZWRFbGVtZW50KSkK
KyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZWROb2RlSWRzLT5hZGRJdGVtKGNvbnRy
b2xsZWRFbGVtZW50SWQpOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIAogICAgICAgICAgICAgc3dpdGNoIChheE9iamVjdC0+Y3VycmVudFN0YXRlKCkpIHsK
ICAgICAgICAgICAgIGNhc2UgQWNjZXNzaWJpbGl0eUN1cnJlbnRTdGF0ZTo6RmFsc2U6Ci0gICAg
ICAgICAgICAgICAgY3VycmVudFN0YXRlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nl
c3NpYmlsaXR5UHJvcGVydGllczo6Q3VycmVudDo6RmFsc2U7CisgICAgICAgICAgICAgICAgY3Vy
cmVudFN0YXRlID0gUHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6OkN1cnJl
bnQ6OkZhbHNlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBBY2Nl
c3NpYmlsaXR5Q3VycmVudFN0YXRlOjpQYWdlOgotICAgICAgICAgICAgICAgIGN1cnJlbnRTdGF0
ZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6OkN1
cnJlbnQ6OlBhZ2U7CisgICAgICAgICAgICAgICAgY3VycmVudFN0YXRlID0gUHJvdG9jb2w6OkRP
TTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6OkN1cnJlbnQ6OlBhZ2U7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIEFjY2Vzc2liaWxpdHlDdXJyZW50U3RhdGU6OlN0
ZXA6Ci0gICAgICAgICAgICAgICAgY3VycmVudFN0YXRlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6
RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6Q3VycmVudDo6U3RlcDsKKyAgICAgICAgICAg
ICAgICBjdXJyZW50U3RhdGUgPSBQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGll
czo6Q3VycmVudDo6U3RlcDsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNh
c2UgQWNjZXNzaWJpbGl0eUN1cnJlbnRTdGF0ZTo6TG9jYXRpb246Ci0gICAgICAgICAgICAgICAg
Y3VycmVudFN0YXRlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJv
cGVydGllczo6Q3VycmVudDo6TG9jYXRpb247CisgICAgICAgICAgICAgICAgY3VycmVudFN0YXRl
ID0gUHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6OkN1cnJlbnQ6OkxvY2F0
aW9uOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBBY2Nlc3NpYmls
aXR5Q3VycmVudFN0YXRlOjpEYXRlOgotICAgICAgICAgICAgICAgIGN1cnJlbnRTdGF0ZSA9IElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6OkN1cnJlbnQ6
OkRhdGU7CisgICAgICAgICAgICAgICAgY3VycmVudFN0YXRlID0gUHJvdG9jb2w6OkRPTTo6QWNj
ZXNzaWJpbGl0eVByb3BlcnRpZXM6OkN1cnJlbnQ6OkRhdGU7CiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICBjYXNlIEFjY2Vzc2liaWxpdHlDdXJyZW50U3RhdGU6OlRpbWU6Ci0g
ICAgICAgICAgICAgICAgY3VycmVudFN0YXRlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpB
Y2Nlc3NpYmlsaXR5UHJvcGVydGllczo6Q3VycmVudDo6VGltZTsKKyAgICAgICAgICAgICAgICBj
dXJyZW50U3RhdGUgPSBQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6Q3Vy
cmVudDo6VGltZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgQWNj
ZXNzaWJpbGl0eUN1cnJlbnRTdGF0ZTo6VHJ1ZToKLSAgICAgICAgICAgICAgICBjdXJyZW50U3Rh
dGUgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpD
dXJyZW50OjpUcnVlOworICAgICAgICAgICAgICAgIGN1cnJlbnRTdGF0ZSA9IFByb3RvY29sOjpE
T006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpDdXJyZW50OjpUcnVlOwogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgfQogCkBAIC0xOTg2LDEyICsyMDUzLDE0IEBAIFJlZlB0
cjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzPiBJbnNw
ZWN0b3JET01BZ2VudDo6YnVpCiAgICAgICAgICAgICBWZWN0b3I8RWxlbWVudCo+IGZsb3dlZEVs
ZW1lbnRzOwogICAgICAgICAgICAgYXhPYmplY3QtPmVsZW1lbnRzRnJvbUF0dHJpYnV0ZShmbG93
ZWRFbGVtZW50cywgYXJpYV9mbG93dG9BdHRyKTsKICAgICAgICAgICAgIGlmIChmbG93ZWRFbGVt
ZW50cy5zaXplKCkpIHsKLSAgICAgICAgICAgICAgICBmbG93ZWROb2RlSWRzID0gSlNPTjo6QXJy
YXlPZjxpbnQ+OjpjcmVhdGUoKTsKLSAgICAgICAgICAgICAgICBmb3IgKEVsZW1lbnQqIGZsb3dl
ZEVsZW1lbnQgOiBmbG93ZWRFbGVtZW50cykKLSAgICAgICAgICAgICAgICAgICAgZmxvd2VkTm9k
ZUlkcy0+YWRkSXRlbShwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKGZsb3dlZEVsZW1lbnQpKTsKKyAg
ICAgICAgICAgICAgICBmbG93ZWROb2RlSWRzID0gSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6RE9N
OjpOb2RlSWQ+OjpjcmVhdGUoKTsKKyAgICAgICAgICAgICAgICBmb3IgKEVsZW1lbnQqIGZsb3dl
ZEVsZW1lbnQgOiBmbG93ZWRFbGVtZW50cykgeworICAgICAgICAgICAgICAgICAgICBpZiAoYXV0
byBmbG93ZWRFbGVtZW50SWQgPSBwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKGZsb3dlZEVsZW1lbnQp
KQorICAgICAgICAgICAgICAgICAgICAgICAgZmxvd2VkTm9kZUlkcy0+YWRkSXRlbShmbG93ZWRF
bGVtZW50SWQpOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IAotICAgICAgICAgICAgaWYgKGlzPEVsZW1lbnQ+KCpub2RlKSkgeworICAgICAgICAgICAgaWYg
KGlzPEVsZW1lbnQ+KG5vZGUpKSB7CiAgICAgICAgICAgICAgICAgc3VwcG9ydHNGb2N1c2VkID0g
YXhPYmplY3QtPmNhblNldEZvY3VzQXR0cmlidXRlKCk7CiAgICAgICAgICAgICAgICAgaWYgKHN1
cHBvcnRzRm9jdXNlZCkKICAgICAgICAgICAgICAgICAgICAgZm9jdXNlZCA9IGF4T2JqZWN0LT5p
c0ZvY3VzZWQoKTsKQEAgLTIwMDIsMTMgKzIwNzEsMTMgQEAgUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM+IEluc3BlY3RvckRPTUFnZW50Ojpi
dWkKICAgICAgICAgICAgIAogICAgICAgICAgICAgU3RyaW5nIGludmFsaWRWYWx1ZSA9IGF4T2Jq
ZWN0LT5pbnZhbGlkU3RhdHVzKCk7CiAgICAgICAgICAgICBpZiAoaW52YWxpZFZhbHVlID09ICJm
YWxzZSIpCi0gICAgICAgICAgICAgICAgaW52YWxpZCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRP
TTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6OkludmFsaWQ6OkZhbHNlOworICAgICAgICAgICAg
ICAgIGludmFsaWQgPSBQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6SW52
YWxpZDo6RmFsc2U7CiAgICAgICAgICAgICBlbHNlIGlmIChpbnZhbGlkVmFsdWUgPT0gImdyYW1t
YXIiKQotICAgICAgICAgICAgICAgIGludmFsaWQgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpET006
OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpJbnZhbGlkOjpHcmFtbWFyOworICAgICAgICAgICAg
ICAgIGludmFsaWQgPSBQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6SW52
YWxpZDo6R3JhbW1hcjsKICAgICAgICAgICAgIGVsc2UgaWYgKGludmFsaWRWYWx1ZSA9PSAic3Bl
bGxpbmciKQotICAgICAgICAgICAgICAgIGludmFsaWQgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpE
T006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpJbnZhbGlkOjpTcGVsbGluZzsKKyAgICAgICAg
ICAgICAgICBpbnZhbGlkID0gUHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6
OkludmFsaWQ6OlNwZWxsaW5nOwogICAgICAgICAgICAgZWxzZSAvLyBGdXR1cmUgdmVyc2lvbnMg
b2YgQVJJQSBtYXkgYWxsb3cgYWRkaXRpb25hbCB0cnV0aHkgdmFsdWVzLiBFeC4gZm9ybWF0LCBv
cmRlciwgb3Igc2l6ZS4KLSAgICAgICAgICAgICAgICBpbnZhbGlkID0gSW5zcGVjdG9yOjpQcm90
b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6SW52YWxpZDo6VHJ1ZTsKKyAgICAg
ICAgICAgICAgICBpbnZhbGlkID0gUHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRp
ZXM6OkludmFsaWQ6OlRydWU7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChheE9iamVj
dC0+aXNBWEhpZGRlbigpIHx8IGF4T2JqZWN0LT5pc0RPTUhpZGRlbigpKQogICAgICAgICAgICAg
ICAgIGhpZGRlbiA9IHRydWU7CkBAIC0yMDIyLDkgKzIwOTEsOSBAQCBSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllcz4gSW5zcGVjdG9yRE9NQWdl
bnQ6OmJ1aQogICAgICAgICAgICAgICAgIFN0cmluZyBhcmlhUmVsZXZhbnRBdHRyVmFsdWUgPSBh
eE9iamVjdC0+bGl2ZVJlZ2lvblJlbGV2YW50KCk7CiAgICAgICAgICAgICAgICAgaWYgKCFhcmlh
UmVsZXZhbnRBdHRyVmFsdWUuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIEZJ
WE1FOiBQYXNzIGVudW0gdmFsdWVzIHJhdGhlciB0aGFuIHN0cmluZ3Mgb25jZSB1bmJsb2NrZWQu
IGh0dHA6Ly93ZWJraXQub3JnL2IvMTMzNzExCi0gICAgICAgICAgICAgICAgICAgIFN0cmluZyBh
cmlhUmVsZXZhbnRBZGRpdGlvbnMgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpJbnNwZWN0b3JIZWxw
ZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkxpdmVS
ZWdpb25SZWxldmFudDo6QWRkaXRpb25zKTsKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGFy
aWFSZWxldmFudFJlbW92YWxzID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6SW5zcGVjdG9ySGVscGVy
czo6Z2V0RW51bUNvbnN0YW50VmFsdWUoSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpMaXZlUmVn
aW9uUmVsZXZhbnQ6OlJlbW92YWxzKTsKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGFyaWFS
ZWxldmFudFRleHQgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpJbnNwZWN0b3JIZWxwZXJzOjpnZXRF
bnVtQ29uc3RhbnRWYWx1ZShJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkxpdmVSZWdpb25SZWxl
dmFudDo6VGV4dCk7CisgICAgICAgICAgICAgICAgICAgIFN0cmluZyBhcmlhUmVsZXZhbnRBZGRp
dGlvbnMgPSBQcm90b2NvbDo6SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUoUHJvdG9jb2w6
OkRPTTo6TGl2ZVJlZ2lvblJlbGV2YW50OjpBZGRpdGlvbnMpOworICAgICAgICAgICAgICAgICAg
ICBTdHJpbmcgYXJpYVJlbGV2YW50UmVtb3ZhbHMgPSBQcm90b2NvbDo6SGVscGVyczo6Z2V0RW51
bUNvbnN0YW50VmFsdWUoUHJvdG9jb2w6OkRPTTo6TGl2ZVJlZ2lvblJlbGV2YW50OjpSZW1vdmFs
cyk7CisgICAgICAgICAgICAgICAgICAgIFN0cmluZyBhcmlhUmVsZXZhbnRUZXh0ID0gUHJvdG9j
b2w6OkhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKFByb3RvY29sOjpET006OkxpdmVSZWdp
b25SZWxldmFudDo6VGV4dCk7CiAgICAgICAgICAgICAgICAgICAgIGxpdmVSZWdpb25SZWxldmFu
dCA9IEpTT046OkFycmF5T2Y8U3RyaW5nPjo6Y3JlYXRlKCk7CiAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFNwYWNlU3BsaXRTdHJpbmcmIHZhbHVlcyA9IFNwYWNlU3BsaXRTdHJpbmcoYXJpYVJl
bGV2YW50QXR0clZhbHVlLCB0cnVlKTsKICAgICAgICAgICAgICAgICAgICAgLy8gQGFyaWEtcmVs
ZXZhbnQ9ImFsbCIgaXMgZXhwb3NlZCBhcyBbImFkZGl0aW9ucyIsInJlbW92YWxzIiwidGV4dCJd
LCBpbiBvcmRlci4KQEAgLTIwNDUsOSArMjExNCw5IEBAIFJlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzPiBJbnNwZWN0b3JET01BZ2VudDo6YnVp
CiAKICAgICAgICAgICAgICAgICBTdHJpbmcgYXJpYUxpdmUgPSBheE9iamVjdC0+bGl2ZVJlZ2lv
blN0YXR1cygpOwogICAgICAgICAgICAgICAgIGlmIChhcmlhTGl2ZSA9PSAiYXNzZXJ0aXZlIikK
LSAgICAgICAgICAgICAgICAgICAgbGl2ZVJlZ2lvblN0YXR1cyA9IEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6OkxpdmVSZWdpb25TdGF0dXM6OkFzc2Vy
dGl2ZTsKKyAgICAgICAgICAgICAgICAgICAgbGl2ZVJlZ2lvblN0YXR1cyA9IFByb3RvY29sOjpE
T006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpMaXZlUmVnaW9uU3RhdHVzOjpBc3NlcnRpdmU7
CiAgICAgICAgICAgICAgICAgZWxzZSBpZiAoYXJpYUxpdmUgPT0gInBvbGl0ZSIpCi0gICAgICAg
ICAgICAgICAgICAgIGxpdmVSZWdpb25TdGF0dXMgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpET006
OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpMaXZlUmVnaW9uU3RhdHVzOjpQb2xpdGU7CisgICAg
ICAgICAgICAgICAgICAgIGxpdmVSZWdpb25TdGF0dXMgPSBQcm90b2NvbDo6RE9NOjpBY2Nlc3Np
YmlsaXR5UHJvcGVydGllczo6TGl2ZVJlZ2lvblN0YXR1czo6UG9saXRlOwogICAgICAgICAgICAg
fQogCiAgICAgICAgICAgICBpZiAoaXM8QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q+KCpheE9iamVj
dCkpCkBAIC0yMDU3LDkgKzIxMjYsMTEgQEAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRP
TTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM+IEluc3BlY3RvckRPTUFnZW50OjpidWkKICAgICAg
ICAgICAgICAgICBWZWN0b3I8RWxlbWVudCo+IG93bmVkRWxlbWVudHM7CiAgICAgICAgICAgICAg
ICAgYXhPYmplY3QtPmVsZW1lbnRzRnJvbUF0dHJpYnV0ZShvd25lZEVsZW1lbnRzLCBhcmlhX293
bnNBdHRyKTsKICAgICAgICAgICAgICAgICBpZiAob3duZWRFbGVtZW50cy5zaXplKCkpIHsKLSAg
ICAgICAgICAgICAgICAgICAgb3duZWROb2RlSWRzID0gSlNPTjo6QXJyYXlPZjxpbnQ+OjpjcmVh
dGUoKTsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChFbGVtZW50KiBvd25lZEVsZW1lbnQgOiBv
d25lZEVsZW1lbnRzKQotICAgICAgICAgICAgICAgICAgICAgICAgb3duZWROb2RlSWRzLT5hZGRJ
dGVtKHB1c2hOb2RlUGF0aFRvRnJvbnRlbmQob3duZWRFbGVtZW50KSk7CisgICAgICAgICAgICAg
ICAgICAgIG93bmVkTm9kZUlkcyA9IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkRPTTo6Tm9kZUlk
Pjo6Y3JlYXRlKCk7CisgICAgICAgICAgICAgICAgICAgIGZvciAoRWxlbWVudCogb3duZWRFbGVt
ZW50IDogb3duZWRFbGVtZW50cykgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGF1dG8g
b3duZWRFbGVtZW50SWQgPSBwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKG93bmVkRWxlbWVudCkpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgb3duZWROb2RlSWRzLT5hZGRJdGVtKG93bmVkRWxl
bWVudElkKTsKKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIH0KIApAQCAtMjA4MywxMCArMjE1NCwxMiBAQCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllcz4gSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1
aQogICAgICAgICAgICAgQVhDb3JlT2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3Ig
c2VsZWN0ZWRDaGlsZHJlbjsKICAgICAgICAgICAgIGF4T2JqZWN0LT5zZWxlY3RlZENoaWxkcmVu
KHNlbGVjdGVkQ2hpbGRyZW4pOwogICAgICAgICAgICAgaWYgKHNlbGVjdGVkQ2hpbGRyZW4uc2l6
ZSgpKSB7Ci0gICAgICAgICAgICAgICAgc2VsZWN0ZWRDaGlsZE5vZGVJZHMgPSBKU09OOjpBcnJh
eU9mPGludD46OmNyZWF0ZSgpOworICAgICAgICAgICAgICAgIHNlbGVjdGVkQ2hpbGROb2RlSWRz
ID0gSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6RE9NOjpOb2RlSWQ+OjpjcmVhdGUoKTsKICAgICAg
ICAgICAgICAgICBmb3IgKGF1dG8mIHNlbGVjdGVkQ2hpbGRPYmplY3QgOiBzZWxlY3RlZENoaWxk
cmVuKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChOb2RlKiBzZWxlY3RlZENoaWxkTm9kZSA9
IHNlbGVjdGVkQ2hpbGRPYmplY3QtPm5vZGUoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHNl
bGVjdGVkQ2hpbGROb2RlSWRzLT5hZGRJdGVtKHB1c2hOb2RlUGF0aFRvRnJvbnRlbmQoc2VsZWN0
ZWRDaGlsZE5vZGUpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKE5vZGUqIHNlbGVjdGVkQ2hp
bGROb2RlID0gc2VsZWN0ZWRDaGlsZE9iamVjdC0+bm9kZSgpKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoYXV0byBzZWxlY3RlZENoaWxkTm9kZUlkID0gcHVzaE5vZGVQYXRoVG9Gcm9u
dGVuZChzZWxlY3RlZENoaWxkTm9kZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vs
ZWN0ZWRDaGlsZE5vZGVJZHMtPmFkZEl0ZW0oc2VsZWN0ZWRDaGlsZE5vZGVJZCk7CisgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAKQEAgLTIwOTgsNTQgKzIxNzEsNjAgQEAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM+IEluc3BlY3RvckRPTUFnZW50OjpidWkKICAg
ICAgICAgfQogICAgIH0KICAgICAKLSAgICBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpB
Y2Nlc3NpYmlsaXR5UHJvcGVydGllcz4gdmFsdWUgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpET006
OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpjcmVhdGUoKQorICAgIFJlZjxQcm90b2NvbDo6RE9N
OjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllcz4gdmFsdWUgPSBQcm90b2NvbDo6RE9NOjpBY2Nlc3Np
YmlsaXR5UHJvcGVydGllczo6Y3JlYXRlKCkKICAgICAgICAgLnNldEV4aXN0cyhleGlzdHMpCiAg
ICAgICAgIC5zZXRMYWJlbChsYWJlbCkKICAgICAgICAgLnNldFJvbGUocm9sZSkKLSAgICAgICAg
LnNldE5vZGVJZChwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKG5vZGUpKQorICAgICAgICAuc2V0Tm9k
ZUlkKHB1c2hOb2RlUGF0aFRvRnJvbnRlbmQoJm5vZGUpKQogICAgICAgICAucmVsZWFzZSgpOwog
CiAgICAgaWYgKGV4aXN0cykgewotICAgICAgICBpZiAoYWN0aXZlRGVzY2VuZGFudE5vZGUpCi0g
ICAgICAgICAgICB2YWx1ZS0+c2V0QWN0aXZlRGVzY2VuZGFudE5vZGVJZChwdXNoTm9kZVBhdGhU
b0Zyb250ZW5kKGFjdGl2ZURlc2NlbmRhbnROb2RlKSk7CisgICAgICAgIGlmIChhY3RpdmVEZXNj
ZW5kYW50Tm9kZSkgeworICAgICAgICAgICAgaWYgKGF1dG8gYWN0aXZlRGVzY2VuZGFudE5vZGVJ
ZCA9IHB1c2hOb2RlUGF0aFRvRnJvbnRlbmQoYWN0aXZlRGVzY2VuZGFudE5vZGUpKQorICAgICAg
ICAgICAgICAgIHZhbHVlLT5zZXRBY3RpdmVEZXNjZW5kYW50Tm9kZUlkKGFjdGl2ZURlc2NlbmRh
bnROb2RlSWQpOworICAgICAgICB9CiAgICAgICAgIGlmIChidXN5KQogICAgICAgICAgICAgdmFs
dWUtPnNldEJ1c3koYnVzeSk7CiAgICAgICAgIGlmIChzdXBwb3J0c0NoZWNrZWQpCiAgICAgICAg
ICAgICB2YWx1ZS0+c2V0Q2hlY2tlZChjaGVja2VkKTsKICAgICAgICAgaWYgKGNoaWxkTm9kZUlk
cykKLSAgICAgICAgICAgIHZhbHVlLT5zZXRDaGlsZE5vZGVJZHMoY2hpbGROb2RlSWRzKTsKKyAg
ICAgICAgICAgIHZhbHVlLT5zZXRDaGlsZE5vZGVJZHMoY2hpbGROb2RlSWRzLnJlbGVhc2VOb25O
dWxsKCkpOwogICAgICAgICBpZiAoY29udHJvbGxlZE5vZGVJZHMpCi0gICAgICAgICAgICB2YWx1
ZS0+c2V0Q29udHJvbGxlZE5vZGVJZHMoY29udHJvbGxlZE5vZGVJZHMpOwotICAgICAgICBpZiAo
Y3VycmVudFN0YXRlICE9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVBy
b3BlcnRpZXM6OkN1cnJlbnQ6OkZhbHNlKQorICAgICAgICAgICAgdmFsdWUtPnNldENvbnRyb2xs
ZWROb2RlSWRzKGNvbnRyb2xsZWROb2RlSWRzLnJlbGVhc2VOb25OdWxsKCkpOworICAgICAgICBp
ZiAoY3VycmVudFN0YXRlICE9IFByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVz
OjpDdXJyZW50OjpGYWxzZSkKICAgICAgICAgICAgIHZhbHVlLT5zZXRDdXJyZW50KGN1cnJlbnRT
dGF0ZSk7CiAgICAgICAgIGlmIChkaXNhYmxlZCkKICAgICAgICAgICAgIHZhbHVlLT5zZXREaXNh
YmxlZChkaXNhYmxlZCk7CiAgICAgICAgIGlmIChzdXBwb3J0c0V4cGFuZGVkKQogICAgICAgICAg
ICAgdmFsdWUtPnNldEV4cGFuZGVkKGV4cGFuZGVkKTsKICAgICAgICAgaWYgKGZsb3dlZE5vZGVJ
ZHMpCi0gICAgICAgICAgICB2YWx1ZS0+c2V0Rmxvd2VkTm9kZUlkcyhmbG93ZWROb2RlSWRzKTsK
KyAgICAgICAgICAgIHZhbHVlLT5zZXRGbG93ZWROb2RlSWRzKGZsb3dlZE5vZGVJZHMucmVsZWFz
ZU5vbk51bGwoKSk7CiAgICAgICAgIGlmIChzdXBwb3J0c0ZvY3VzZWQpCiAgICAgICAgICAgICB2
YWx1ZS0+c2V0Rm9jdXNlZChmb2N1c2VkKTsKICAgICAgICAgaWYgKGlnbm9yZWQpCiAgICAgICAg
ICAgICB2YWx1ZS0+c2V0SWdub3JlZChpZ25vcmVkKTsKICAgICAgICAgaWYgKGlnbm9yZWRCeURl
ZmF1bHQpCiAgICAgICAgICAgICB2YWx1ZS0+c2V0SWdub3JlZEJ5RGVmYXVsdChpZ25vcmVkQnlE
ZWZhdWx0KTsKLSAgICAgICAgaWYgKGludmFsaWQgIT0gSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9N
OjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6SW52YWxpZDo6RmFsc2UpCisgICAgICAgIGlmIChp
bnZhbGlkICE9IFByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpJbnZhbGlk
OjpGYWxzZSkKICAgICAgICAgICAgIHZhbHVlLT5zZXRJbnZhbGlkKGludmFsaWQpOwogICAgICAg
ICBpZiAoaGlkZGVuKQogICAgICAgICAgICAgdmFsdWUtPnNldEhpZGRlbihoaWRkZW4pOwogICAg
ICAgICBpZiAoc3VwcG9ydHNMaXZlUmVnaW9uKSB7CiAgICAgICAgICAgICB2YWx1ZS0+c2V0TGl2
ZVJlZ2lvbkF0b21pYyhsaXZlUmVnaW9uQXRvbWljKTsKICAgICAgICAgICAgIGlmIChsaXZlUmVn
aW9uUmVsZXZhbnQtPmxlbmd0aCgpKQotICAgICAgICAgICAgICAgIHZhbHVlLT5zZXRMaXZlUmVn
aW9uUmVsZXZhbnQobGl2ZVJlZ2lvblJlbGV2YW50KTsKKyAgICAgICAgICAgICAgICB2YWx1ZS0+
c2V0TGl2ZVJlZ2lvblJlbGV2YW50KGxpdmVSZWdpb25SZWxldmFudC5yZWxlYXNlTm9uTnVsbCgp
KTsKICAgICAgICAgICAgIHZhbHVlLT5zZXRMaXZlUmVnaW9uU3RhdHVzKGxpdmVSZWdpb25TdGF0
dXMpOwogICAgICAgICB9Ci0gICAgICAgIGlmIChtb3VzZUV2ZW50Tm9kZSkKLSAgICAgICAgICAg
IHZhbHVlLT5zZXRNb3VzZUV2ZW50Tm9kZUlkKHB1c2hOb2RlUGF0aFRvRnJvbnRlbmQobW91c2VF
dmVudE5vZGUpKTsKKyAgICAgICAgaWYgKG1vdXNlRXZlbnROb2RlKSB7CisgICAgICAgICAgICBp
ZiAoYXV0byBtb3VzZUV2ZW50Tm9kZUlkID0gcHVzaE5vZGVQYXRoVG9Gcm9udGVuZChtb3VzZUV2
ZW50Tm9kZSkpCisgICAgICAgICAgICAgICAgdmFsdWUtPnNldE1vdXNlRXZlbnROb2RlSWQobW91
c2VFdmVudE5vZGVJZCk7CisgICAgICAgIH0KICAgICAgICAgaWYgKG93bmVkTm9kZUlkcykKLSAg
ICAgICAgICAgIHZhbHVlLT5zZXRPd25lZE5vZGVJZHMob3duZWROb2RlSWRzKTsKLSAgICAgICAg
aWYgKHBhcmVudE5vZGUpCi0gICAgICAgICAgICB2YWx1ZS0+c2V0UGFyZW50Tm9kZUlkKHB1c2hO
b2RlUGF0aFRvRnJvbnRlbmQocGFyZW50Tm9kZSkpOworICAgICAgICAgICAgdmFsdWUtPnNldE93
bmVkTm9kZUlkcyhvd25lZE5vZGVJZHMucmVsZWFzZU5vbk51bGwoKSk7CisgICAgICAgIGlmIChw
YXJlbnROb2RlKSB7CisgICAgICAgICAgICBpZiAoYXV0byBwYXJlbnROb2RlSWQgPSBwdXNoTm9k
ZVBhdGhUb0Zyb250ZW5kKHBhcmVudE5vZGUpKQorICAgICAgICAgICAgICAgIHZhbHVlLT5zZXRQ
YXJlbnROb2RlSWQocGFyZW50Tm9kZUlkKTsKKyAgICAgICAgfQogICAgICAgICBpZiAoc3VwcG9y
dHNQcmVzc2VkKQogICAgICAgICAgICAgdmFsdWUtPnNldFByZXNzZWQocHJlc3NlZCk7CiAgICAg
ICAgIGlmIChyZWFkb25seSkKQEAgLTIxNTUsNyArMjIzNCw3IEBAIFJlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzPiBJbnNwZWN0b3JET01BZ2Vu
dDo6YnVpCiAgICAgICAgIGlmIChzZWxlY3RlZCkKICAgICAgICAgICAgIHZhbHVlLT5zZXRTZWxl
Y3RlZChzZWxlY3RlZCk7CiAgICAgICAgIGlmIChzZWxlY3RlZENoaWxkTm9kZUlkcykKLSAgICAg
ICAgICAgIHZhbHVlLT5zZXRTZWxlY3RlZENoaWxkTm9kZUlkcyhzZWxlY3RlZENoaWxkTm9kZUlk
cyk7CisgICAgICAgICAgICB2YWx1ZS0+c2V0U2VsZWN0ZWRDaGlsZE5vZGVJZHMoc2VsZWN0ZWRD
aGlsZE5vZGVJZHMucmVsZWFzZU5vbk51bGwoKSk7CiAgICAgICAgIAogICAgICAgICAvLyBIMSAt
LSBINiBhbHdheXMgaGF2ZSBhIGhlYWRpbmdMZXZlbCBwcm9wZXJ0eSB0aGF0IGNhbiBiZSBjb21w
bGltZW50ZWQgYnkgYSBoaWVyYXJjaGljYWxMZXZlbAogICAgICAgICAvLyBwcm9wZXJ0eSB3aGVu
IGFyaWEtbGV2ZWwgaXMgc2V0IG9uIHRoZSBlbGVtZW50LCBpbiB3aGljaCBjYXNlIHdlIHdhbnQg
dG8gcmVtYWluIGNhbGxpbmcKQEAgLTIyMzUsMjIgKzIzMTQsMjIgQEAgdm9pZCBJbnNwZWN0b3JE
T01BZ2VudDo6ZGlkQ29tbWl0TG9hZChEb2N1bWVudCogZG9jdW1lbnQpCiAgICAgaWYgKCFmcmFt
ZU93bmVyKQogICAgICAgICByZXR1cm47CiAKLSAgICBpbnQgZnJhbWVPd25lcklkID0gbV9kb2N1
bWVudE5vZGVUb0lkTWFwLmdldChmcmFtZU93bmVyKTsKKyAgICBhdXRvIGZyYW1lT3duZXJJZCA9
IG1fZG9jdW1lbnROb2RlVG9JZE1hcC5nZXQoZnJhbWVPd25lcik7CiAgICAgaWYgKCFmcmFtZU93
bmVySWQpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIFJlLWFkZCBmcmFtZSBvd25lciBlbGVt
ZW50IHRvZ2V0aGVyIHdpdGggaXRzIG5ldyBjaGlsZHJlbi4KLSAgICBpbnQgcGFyZW50SWQgPSBt
X2RvY3VtZW50Tm9kZVRvSWRNYXAuZ2V0KGlubmVyUGFyZW50Tm9kZShmcmFtZU93bmVyLmdldCgp
KSk7CisgICAgYXV0byBwYXJlbnRJZCA9IG1fZG9jdW1lbnROb2RlVG9JZE1hcC5nZXQoaW5uZXJQ
YXJlbnROb2RlKGZyYW1lT3duZXIuZ2V0KCkpKTsKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+
Y2hpbGROb2RlUmVtb3ZlZChwYXJlbnRJZCwgZnJhbWVPd25lcklkKTsKICAgICB1bmJpbmQoZnJh
bWVPd25lci5nZXQoKSwgJm1fZG9jdW1lbnROb2RlVG9JZE1hcCk7CiAKLSAgICBSZWY8SW5zcGVj
dG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlPiB2YWx1ZSA9IGJ1aWxkT2JqZWN0Rm9yTm9kZShmcmFt
ZU93bmVyLmdldCgpLCAwLCAmbV9kb2N1bWVudE5vZGVUb0lkTWFwKTsKKyAgICBSZWY8UHJvdG9j
b2w6OkRPTTo6Tm9kZT4gdmFsdWUgPSBidWlsZE9iamVjdEZvck5vZGUoZnJhbWVPd25lci5nZXQo
KSwgMCwgJm1fZG9jdW1lbnROb2RlVG9JZE1hcCk7CiAgICAgTm9kZSogcHJldmlvdXNTaWJsaW5n
ID0gaW5uZXJQcmV2aW91c1NpYmxpbmcoZnJhbWVPd25lci5nZXQoKSk7Ci0gICAgaW50IHByZXZJ
ZCA9IHByZXZpb3VzU2libGluZyA/IG1fZG9jdW1lbnROb2RlVG9JZE1hcC5nZXQocHJldmlvdXNT
aWJsaW5nKSA6IDA7CisgICAgYXV0byBwcmV2SWQgPSBwcmV2aW91c1NpYmxpbmcgPyBtX2RvY3Vt
ZW50Tm9kZVRvSWRNYXAuZ2V0KHByZXZpb3VzU2libGluZykgOiAwOwogICAgIG1fZnJvbnRlbmRE
aXNwYXRjaGVyLT5jaGlsZE5vZGVJbnNlcnRlZChwYXJlbnRJZCwgcHJldklkLCBXVEZNb3ZlKHZh
bHVlKSk7CiB9CiAKLWludCBJbnNwZWN0b3JET01BZ2VudDo6aWRlbnRpZmllckZvck5vZGUoTm9k
ZSYgbm9kZSkKK1Byb3RvY29sOjpET006Ok5vZGVJZCBJbnNwZWN0b3JET01BZ2VudDo6aWRlbnRp
ZmllckZvck5vZGUoTm9kZSYgbm9kZSkKIHsKICAgICByZXR1cm4gcHVzaE5vZGVQYXRoVG9Gcm9u
dGVuZCgmbm9kZSk7CiB9CkBAIC0yMzA3LDcgKzIzODYsNyBAQCB2b2lkIEluc3BlY3RvckRPTUFn
ZW50OjpkaWRJbnNlcnRET01Ob2RlKE5vZGUmIG5vZGUpCiAgICAgaWYgKCFwYXJlbnQpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIGludCBwYXJlbnRJZCA9IG1fZG9jdW1lbnROb2RlVG9JZE1hcC5n
ZXQocGFyZW50KTsKKyAgICBhdXRvIHBhcmVudElkID0gbV9kb2N1bWVudE5vZGVUb0lkTWFwLmdl
dChwYXJlbnQpOwogICAgIC8vIFJldHVybiBpZiBwYXJlbnQgaXMgbm90IG1hcHBlZCB5ZXQuCiAg
ICAgaWYgKCFwYXJlbnRJZCkKICAgICAgICAgcmV0dXJuOwpAQCAtMjMxOCw4ICsyMzk3LDggQEAg
dm9pZCBJbnNwZWN0b3JET01BZ2VudDo6ZGlkSW5zZXJ0RE9NTm9kZShOb2RlJiBub2RlKQogICAg
IH0gZWxzZSB7CiAgICAgICAgIC8vIENoaWxkcmVuIGhhdmUgYmVlbiByZXF1ZXN0ZWQgLT4gcmV0
dXJuIHZhbHVlIG9mIGEgbmV3IGNoaWxkLgogICAgICAgICBOb2RlKiBwcmV2U2libGluZyA9IGlu
bmVyUHJldmlvdXNTaWJsaW5nKCZub2RlKTsKLSAgICAgICAgaW50IHByZXZJZCA9IHByZXZTaWJs
aW5nID8gbV9kb2N1bWVudE5vZGVUb0lkTWFwLmdldChwcmV2U2libGluZykgOiAwOwotICAgICAg
ICBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlPiB2YWx1ZSA9IGJ1aWxkT2JqZWN0
Rm9yTm9kZSgmbm9kZSwgMCwgJm1fZG9jdW1lbnROb2RlVG9JZE1hcCk7CisgICAgICAgIGF1dG8g
cHJldklkID0gcHJldlNpYmxpbmcgPyBtX2RvY3VtZW50Tm9kZVRvSWRNYXAuZ2V0KHByZXZTaWJs
aW5nKSA6IDA7CisgICAgICAgIFJlZjxQcm90b2NvbDo6RE9NOjpOb2RlPiB2YWx1ZSA9IGJ1aWxk
T2JqZWN0Rm9yTm9kZSgmbm9kZSwgMCwgJm1fZG9jdW1lbnROb2RlVG9JZE1hcCk7CiAgICAgICAg
IG1fZnJvbnRlbmREaXNwYXRjaGVyLT5jaGlsZE5vZGVJbnNlcnRlZChwYXJlbnRJZCwgcHJldklk
LCBXVEZNb3ZlKHZhbHVlKSk7CiAgICAgfQogfQpAQCAtMjMzNSw3ICsyNDE0LDcgQEAgdm9pZCBJ
bnNwZWN0b3JET01BZ2VudDo6ZGlkUmVtb3ZlRE9NTm9kZShOb2RlJiBub2RlKQogICAgIGlmICgh
bV9kb2N1bWVudE5vZGVUb0lkTWFwLmNvbnRhaW5zKHBhcmVudCkpCiAgICAgICAgIHJldHVybjsK
IAotICAgIGludCBwYXJlbnRJZCA9IG1fZG9jdW1lbnROb2RlVG9JZE1hcC5nZXQocGFyZW50KTsK
KyAgICBhdXRvIHBhcmVudElkID0gbV9kb2N1bWVudE5vZGVUb0lkTWFwLmdldChwYXJlbnQpOwog
CiAgICAgaWYgKCFtX2NoaWxkcmVuUmVxdWVzdGVkLmNvbnRhaW5zKHBhcmVudElkKSkgewogICAg
ICAgICAvLyBObyBjaGlsZHJlbiBhcmUgbWFwcGVkIHlldCAtPiBvbmx5IG5vdGlmeSBvbiBjaGFu
Z2VzIG9mIGhhc0NoaWxkcmVuLgpAQCAtMjM1OCw3ICsyNDM3LDcgQEAgdm9pZCBJbnNwZWN0b3JE
T01BZ2VudDo6ZGlkTW9kaWZ5RE9NQXR0cihFbGVtZW50JiBlbGVtZW50LCBjb25zdCBBdG9tU3Ry
aW5nJiBuYW0KICAgICBpZiAoc2hvdWxkU3VwcHJlc3NFdmVudCkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgaW50IGlkID0gYm91bmROb2RlSWQoJmVsZW1lbnQpOworICAgIGF1dG8gaWQgPSBib3Vu
ZE5vZGVJZCgmZWxlbWVudCk7CiAgICAgaWYgKCFpZCkKICAgICAgICAgcmV0dXJuOwogCkBAIC0y
MzcwLDcgKzI0NDksNyBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpkaWRNb2RpZnlET01BdHRy
KEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IEF0b21TdHJpbmcmIG5hbQogCiB2b2lkIEluc3BlY3Rv
ckRPTUFnZW50OjpkaWRSZW1vdmVET01BdHRyKEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IEF0b21T
dHJpbmcmIG5hbWUpCiB7Ci0gICAgaW50IGlkID0gYm91bmROb2RlSWQoJmVsZW1lbnQpOworICAg
IGF1dG8gaWQgPSBib3VuZE5vZGVJZCgmZWxlbWVudCk7CiAgICAgaWYgKCFpZCkKICAgICAgICAg
cmV0dXJuOwogCkBAIC0yMzgyLDkgKzI0NjEsOSBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50Ojpk
aWRSZW1vdmVET01BdHRyKEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IEF0b21TdHJpbmcmIG5hbQog
CiB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpzdHlsZUF0dHJpYnV0ZUludmFsaWRhdGVkKGNvbnN0
IFZlY3RvcjxFbGVtZW50Kj4mIGVsZW1lbnRzKQogewotICAgIGF1dG8gbm9kZUlkcyA9IEpTT046
OkFycmF5T2Y8aW50Pjo6Y3JlYXRlKCk7CisgICAgYXV0byBub2RlSWRzID0gSlNPTjo6QXJyYXlP
ZjxQcm90b2NvbDo6RE9NOjpOb2RlSWQ+OjpjcmVhdGUoKTsKICAgICBmb3IgKGF1dG8mIGVsZW1l
bnQgOiBlbGVtZW50cykgewotICAgICAgICBpbnQgaWQgPSBib3VuZE5vZGVJZChlbGVtZW50KTsK
KyAgICAgICAgYXV0byBpZCA9IGJvdW5kTm9kZUlkKGVsZW1lbnQpOwogICAgICAgICBpZiAoIWlk
KQogICAgICAgICAgICAgY29udGludWU7CiAKQEAgLTIzOTgsNyArMjQ3Nyw3IEBAIHZvaWQgSW5z
cGVjdG9yRE9NQWdlbnQ6OnN0eWxlQXR0cmlidXRlSW52YWxpZGF0ZWQoY29uc3QgVmVjdG9yPEVs
ZW1lbnQqPiYgZWxlbWVuCiAKIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmNoYXJhY3RlckRhdGFN
b2RpZmllZChDaGFyYWN0ZXJEYXRhJiBjaGFyYWN0ZXJEYXRhKQogewotICAgIGludCBpZCA9IG1f
ZG9jdW1lbnROb2RlVG9JZE1hcC5nZXQoJmNoYXJhY3RlckRhdGEpOworICAgIGF1dG8gaWQgPSBt
X2RvY3VtZW50Tm9kZVRvSWRNYXAuZ2V0KCZjaGFyYWN0ZXJEYXRhKTsKICAgICBpZiAoIWlkKSB7
CiAgICAgICAgIC8vIFB1c2ggdGV4dCBub2RlIGlmIGl0IGlzIGJlaW5nIGNyZWF0ZWQuCiAgICAg
ICAgIGRpZEluc2VydERPTU5vZGUoY2hhcmFjdGVyRGF0YSk7CkBAIC0yNDA5LDcgKzI0ODgsNyBA
QCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpjaGFyYWN0ZXJEYXRhTW9kaWZpZWQoQ2hhcmFjdGVy
RGF0YSYgY2hhcmFjdGVyRGF0YSkKIAogdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6ZGlkSW52YWxp
ZGF0ZVN0eWxlQXR0cihFbGVtZW50JiBlbGVtZW50KQogewotICAgIGludCBpZCA9IG1fZG9jdW1l
bnROb2RlVG9JZE1hcC5nZXQoJmVsZW1lbnQpOworICAgIGF1dG8gaWQgPSBtX2RvY3VtZW50Tm9k
ZVRvSWRNYXAuZ2V0KCZlbGVtZW50KTsKICAgICBpZiAoIWlkKQogICAgICAgICByZXR1cm47CiAK
QEAgLTI0MjAsMjIgKzI0OTksMjIgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6ZGlkSW52YWxp
ZGF0ZVN0eWxlQXR0cihFbGVtZW50JiBlbGVtZW50KQogCiB2b2lkIEluc3BlY3RvckRPTUFnZW50
OjpkaWRQdXNoU2hhZG93Um9vdChFbGVtZW50JiBob3N0LCBTaGFkb3dSb290JiByb290KQogewot
ICAgIGludCBob3N0SWQgPSBtX2RvY3VtZW50Tm9kZVRvSWRNYXAuZ2V0KCZob3N0KTsKKyAgICBh
dXRvIGhvc3RJZCA9IG1fZG9jdW1lbnROb2RlVG9JZE1hcC5nZXQoJmhvc3QpOwogICAgIGlmICho
b3N0SWQpCiAgICAgICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5zaGFkb3dSb290UHVzaGVkKGhv
c3RJZCwgYnVpbGRPYmplY3RGb3JOb2RlKCZyb290LCAwLCAmbV9kb2N1bWVudE5vZGVUb0lkTWFw
KSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OndpbGxQb3BTaGFkb3dSb290KEVsZW1l
bnQmIGhvc3QsIFNoYWRvd1Jvb3QmIHJvb3QpCiB7Ci0gICAgaW50IGhvc3RJZCA9IG1fZG9jdW1l
bnROb2RlVG9JZE1hcC5nZXQoJmhvc3QpOwotICAgIGludCByb290SWQgPSBtX2RvY3VtZW50Tm9k
ZVRvSWRNYXAuZ2V0KCZyb290KTsKKyAgICBhdXRvIGhvc3RJZCA9IG1fZG9jdW1lbnROb2RlVG9J
ZE1hcC5nZXQoJmhvc3QpOworICAgIGF1dG8gcm9vdElkID0gbV9kb2N1bWVudE5vZGVUb0lkTWFw
LmdldCgmcm9vdCk7CiAgICAgaWYgKGhvc3RJZCAmJiByb290SWQpCiAgICAgICAgIG1fZnJvbnRl
bmREaXNwYXRjaGVyLT5zaGFkb3dSb290UG9wcGVkKGhvc3RJZCwgcm9vdElkKTsKIH0KIAogdm9p
ZCBJbnNwZWN0b3JET01BZ2VudDo6ZGlkQ2hhbmdlQ3VzdG9tRWxlbWVudFN0YXRlKEVsZW1lbnQm
IGVsZW1lbnQpCiB7Ci0gICAgaW50IGVsZW1lbnRJZCA9IG1fZG9jdW1lbnROb2RlVG9JZE1hcC5n
ZXQoJmVsZW1lbnQpOworICAgIGF1dG8gZWxlbWVudElkID0gbV9kb2N1bWVudE5vZGVUb0lkTWFw
LmdldCgmZWxlbWVudCk7CiAgICAgaWYgKCFlbGVtZW50SWQpCiAgICAgICAgIHJldHVybjsKIApA
QCAtMjQ2Miw3ICsyNTQxLDcgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6cHNldWRvRWxlbWVu
dENyZWF0ZWQoUHNldWRvRWxlbWVudCYgcHNldWRvRWxlbWVudCkKICAgICBpZiAoIXBhcmVudCkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgaW50IHBhcmVudElkID0gbV9kb2N1bWVudE5vZGVUb0lk
TWFwLmdldChwYXJlbnQpOworICAgIGF1dG8gcGFyZW50SWQgPSBtX2RvY3VtZW50Tm9kZVRvSWRN
YXAuZ2V0KHBhcmVudCk7CiAgICAgaWYgKCFwYXJlbnRJZCkKICAgICAgICAgcmV0dXJuOwogCkBA
IC0yNDcyLDE0ICsyNTUxLDE0IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnBzZXVkb0VsZW1l
bnRDcmVhdGVkKFBzZXVkb0VsZW1lbnQmIHBzZXVkb0VsZW1lbnQpCiAKIHZvaWQgSW5zcGVjdG9y
RE9NQWdlbnQ6OnBzZXVkb0VsZW1lbnREZXN0cm95ZWQoUHNldWRvRWxlbWVudCYgcHNldWRvRWxl
bWVudCkKIHsKLSAgICBpbnQgcHNldWRvRWxlbWVudElkID0gbV9kb2N1bWVudE5vZGVUb0lkTWFw
LmdldCgmcHNldWRvRWxlbWVudCk7CisgICAgYXV0byBwc2V1ZG9FbGVtZW50SWQgPSBtX2RvY3Vt
ZW50Tm9kZVRvSWRNYXAuZ2V0KCZwc2V1ZG9FbGVtZW50KTsKICAgICBpZiAoIXBzZXVkb0VsZW1l
bnRJZCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gSWYgYSBQc2V1ZG9FbGVtZW50IGlzIGJv
dW5kLCBpdHMgcGFyZW50IGVsZW1lbnQgbXVzdCBoYXZlIGJlZW4gYm91bmQuCiAgICAgRWxlbWVu
dCogcGFyZW50ID0gcHNldWRvRWxlbWVudC5ob3N0RWxlbWVudCgpOwogICAgIEFTU0VSVChwYXJl
bnQpOwotICAgIGludCBwYXJlbnRJZCA9IG1fZG9jdW1lbnROb2RlVG9JZE1hcC5nZXQocGFyZW50
KTsKKyAgICBhdXRvIHBhcmVudElkID0gbV9kb2N1bWVudE5vZGVUb0lkTWFwLmdldChwYXJlbnQp
OwogICAgIEFTU0VSVChwYXJlbnRJZCk7CiAKICAgICB1bmJpbmQoJnBzZXVkb0VsZW1lbnQsICZt
X2RvY3VtZW50Tm9kZVRvSWRNYXApOwpAQCAtMjQ5NSw3ICsyNTc0LDcgQEAgdm9pZCBJbnNwZWN0
b3JET01BZ2VudDo6ZGlkQWRkRXZlbnRMaXN0ZW5lcihFdmVudFRhcmdldCYgdGFyZ2V0KQogICAg
IGlmICghbm9kZS5jb250YWlucyhtX2luc3BlY3RlZE5vZGUuZ2V0KCkpKQogICAgICAgICByZXR1
cm47CiAKLSAgICBpbnQgbm9kZUlkID0gYm91bmROb2RlSWQoJm5vZGUpOworICAgIGF1dG8gbm9k
ZUlkID0gYm91bmROb2RlSWQoJm5vZGUpOwogICAgIGlmICghbm9kZUlkKQogICAgICAgICByZXR1
cm47CiAKQEAgLTI1MTYsNyArMjU5NSw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OndpbGxS
ZW1vdmVFdmVudExpc3RlbmVyKEV2ZW50VGFyZ2V0JiB0YXJnZXQsIGNvbnN0IEF0b21TCiAgICAg
aWYgKCFub2RlLmNvbnRhaW5zKG1faW5zcGVjdGVkTm9kZS5nZXQoKSkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIGludCBub2RlSWQgPSBib3VuZE5vZGVJZCgmbm9kZSk7CisgICAgYXV0byBub2Rl
SWQgPSBib3VuZE5vZGVJZCgmbm9kZSk7CiAgICAgaWYgKCFub2RlSWQpCiAgICAgICAgIHJldHVy
bjsKIApAQCAtMjU2Niw3ICsyNjQ1LDcgQEAgUmVmUHRyPEpTQzo6QnJlYWtwb2ludD4gSW5zcGVj
dG9yRE9NQWdlbnQ6OmJyZWFrcG9pbnRGb3JFdmVudExpc3RlbmVyKEV2ZW50VGFyZ2UKICAgICBy
ZXR1cm4gbnVsbHB0cjsKIH0KIAotaW50IEluc3BlY3RvckRPTUFnZW50OjppZEZvckV2ZW50TGlz
dGVuZXIoRXZlbnRUYXJnZXQmIHRhcmdldCwgY29uc3QgQXRvbVN0cmluZyYgZXZlbnRUeXBlLCBF
dmVudExpc3RlbmVyJiBsaXN0ZW5lciwgYm9vbCBjYXB0dXJlKQorUHJvdG9jb2w6OkRPTTo6RXZl
bnRMaXN0ZW5lcklkIEluc3BlY3RvckRPTUFnZW50OjppZEZvckV2ZW50TGlzdGVuZXIoRXZlbnRU
YXJnZXQmIHRhcmdldCwgY29uc3QgQXRvbVN0cmluZyYgZXZlbnRUeXBlLCBFdmVudExpc3RlbmVy
JiBsaXN0ZW5lciwgYm9vbCBjYXB0dXJlKQogewogICAgIGZvciAoYXV0byYgaW5zcGVjdG9yRXZl
bnRMaXN0ZW5lciA6IG1fZXZlbnRMaXN0ZW5lckVudHJpZXMudmFsdWVzKCkpIHsKICAgICAgICAg
aWYgKGluc3BlY3RvckV2ZW50TGlzdGVuZXIubWF0Y2hlcyh0YXJnZXQsIGV2ZW50VHlwZSwgbGlz
dGVuZXIsIGNhcHR1cmUpKQpAQCAtMjYwNCw4ICsyNjgzLDcgQEAgdm9pZCBJbnNwZWN0b3JET01B
Z2VudDo6bWVkaWFNZXRyaWNzVGltZXJGaXJlZCgpCiAgICAgICAgIGlmIChpdGVyYXRvci0+dmFs
dWUuaXNQb3dlckVmZmljaWVudCAhPSBpc1Bvd2VyRWZmaWNpZW50KSB7CiAgICAgICAgICAgICBp
dGVyYXRvci0+dmFsdWUuaXNQb3dlckVmZmljaWVudCA9IGlzUG93ZXJFZmZpY2llbnQ7CiAKLSAg
ICAgICAgICAgIGludCBub2RlSWQgPSBwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKG1lZGlhRWxlbWVu
dCk7Ci0gICAgICAgICAgICBpZiAobm9kZUlkKSB7CisgICAgICAgICAgICBpZiAoYXV0byBub2Rl
SWQgPSBwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKG1lZGlhRWxlbWVudCkpIHsKICAgICAgICAgICAg
ICAgICBhdXRvIHRpbWVzdGFtcCA9IG1fZW52aXJvbm1lbnQuZXhlY3V0aW9uU3RvcHdhdGNoKCku
ZWxhcHNlZFRpbWUoKS5zZWNvbmRzKCk7CiAgICAgICAgICAgICAgICAgbV9mcm9udGVuZERpc3Bh
dGNoZXItPnBvd2VyRWZmaWNpZW50UGxheWJhY2tTdGF0ZUNoYW5nZWQobm9kZUlkLCB0aW1lc3Rh
bXAsIGl0ZXJhdG9yLT52YWx1ZS5pc1Bvd2VyRWZmaWNpZW50KTsKICAgICAgICAgICAgIH0KQEAg
LTI2NTksNyArMjczNyw3IEBAIE5vZGUqIEluc3BlY3RvckRPTUFnZW50Ojpub2RlRm9yUGF0aChj
b25zdCBTdHJpbmcmIHBhdGgpCiAgICAgcmV0dXJuIG5vZGU7CiB9CiAKLU5vZGUqIEluc3BlY3Rv
ckRPTUFnZW50Ojpub2RlRm9yT2JqZWN0SWQoY29uc3QgU3RyaW5nJiBvYmplY3RJZCkKK05vZGUq
IEluc3BlY3RvckRPTUFnZW50Ojpub2RlRm9yT2JqZWN0SWQoY29uc3QgUHJvdG9jb2w6OlJ1bnRp
bWU6OlJlbW90ZU9iamVjdElkJiBvYmplY3RJZCkKIHsKICAgICBJbmplY3RlZFNjcmlwdCBpbmpl
Y3RlZFNjcmlwdCA9IG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmluamVjdGVkU2NyaXB0Rm9yT2Jq
ZWN0SWQob2JqZWN0SWQpOwogICAgIGlmIChpbmplY3RlZFNjcmlwdC5oYXNOb1ZhbHVlKCkpCkBA
IC0yNjY4LDE1ICsyNzQ2LDIwIEBAIE5vZGUqIEluc3BlY3RvckRPTUFnZW50Ojpub2RlRm9yT2Jq
ZWN0SWQoY29uc3QgU3RyaW5nJiBvYmplY3RJZCkKICAgICByZXR1cm4gc2NyaXB0VmFsdWVBc05v
ZGUoaW5qZWN0ZWRTY3JpcHQuZmluZE9iamVjdEJ5SWQob2JqZWN0SWQpKTsKIH0KIAotdm9pZCBJ
bnNwZWN0b3JET01BZ2VudDo6cHVzaE5vZGVCeVBhdGhUb0Zyb250ZW5kKEVycm9yU3RyaW5nJiBl
cnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBwYXRoLCBpbnQqIG5vZGVJZCkKK1Byb3RvY29sOjpF
cnJvclN0cmluZ09yPFByb3RvY29sOjpET006Ok5vZGVJZD4gSW5zcGVjdG9yRE9NQWdlbnQ6OnB1
c2hOb2RlQnlQYXRoVG9Gcm9udGVuZChjb25zdCBTdHJpbmcmIHBhdGgpCiB7Ci0gICAgaWYgKE5v
ZGUqIG5vZGUgPSBub2RlRm9yUGF0aChwYXRoKSkKLSAgICAgICAgKm5vZGVJZCA9IHB1c2hOb2Rl
UGF0aFRvRnJvbnRlbmQoZXJyb3JTdHJpbmcsIG5vZGUpOwotICAgIGVsc2UKLSAgICAgICAgZXJy
b3JTdHJpbmcgPSAiTWlzc2luZyBub2RlIGZvciBnaXZlbiBwYXRoIl9zOworICAgIFByb3RvY29s
OjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKworICAgIGlmIChOb2RlKiBub2RlID0gbm9kZUZv
clBhdGgocGF0aCkpIHsKKyAgICAgICAgaWYgKGF1dG8gbm9kZUlkID0gcHVzaE5vZGVQYXRoVG9G
cm9udGVuZChlcnJvclN0cmluZywgbm9kZSkpCisgICAgICAgICAgICByZXR1cm4gbm9kZUlkOwor
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOworICAgIH0KKworICAg
IHJldHVybiBtYWtlVW5leHBlY3RlZCgiTWlzc2luZyBub2RlIGZvciBnaXZlbiBwYXRoIl9zKTsK
IH0KIAotUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4g
SW5zcGVjdG9yRE9NQWdlbnQ6OnJlc29sdmVOb2RlKE5vZGUqIG5vZGUsIGNvbnN0IFN0cmluZyYg
b2JqZWN0R3JvdXApCitSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4gSW5z
cGVjdG9yRE9NQWdlbnQ6OnJlc29sdmVOb2RlKE5vZGUqIG5vZGUsIGNvbnN0IFN0cmluZyYgb2Jq
ZWN0R3JvdXApCiB7CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gJm5vZGUtPmRvY3VtZW50KCk7
CiAgICAgaWYgKGF1dG8qIHRlbXBsYXRlSG9zdCA9IGRvY3VtZW50LT50ZW1wbGF0ZURvY3VtZW50
SG9zdCgpKQpAQCAtMjcwNiw5ICsyNzg5LDExIEBAIEpTQzo6SlNWYWx1ZSBJbnNwZWN0b3JET01B
Z2VudDo6bm9kZUFzU2NyaXB0VmFsdWUoSlNDOjpKU0dsb2JhbE9iamVjdCYgc3RhdGUsIE5vCiAg
ICAgcmV0dXJuIHRvSlMoJnN0YXRlLCBkZXByZWNhdGVkR2xvYmFsT2JqZWN0Rm9yUHJvdG90eXBl
KCZzdGF0ZSksIEJpbmRpbmdTZWN1cml0eTo6Y2hlY2tTZWN1cml0eUZvck5vZGUoc3RhdGUsIG5v
ZGUpKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c2V0QWxsb3dFZGl0aW5nVXNlckFn
ZW50U2hhZG93VHJlZXMoRXJyb3JTdHJpbmcmLCBib29sIGFsbG93KQorUHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yRE9NQWdlbnQ6OnNldEFsbG93RWRpdGluZ1VzZXJBZ2Vu
dFNoYWRvd1RyZWVzKGJvb2wgYWxsb3cpCiB7CiAgICAgbV9hbGxvd0VkaXRpbmdVc2VyQWdlbnRT
aGFkb3dUcmVlcyA9IGFsbG93OworCisgICAgcmV0dXJuIHsgfTsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9J
bnNwZWN0b3JET01BZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNw
ZWN0b3JET01BZ2VudC5oCmluZGV4IDNlMzc3MDdhZmVjZjc4ZjQyMThhYTgzMDFlMWVhMmQ0MWM3
MjUxNzIuLjdmMjg3MmRmNDllMGQ0MGFiMDIwY2Q5ODg0ZGVkMDAzMDhmMWEyYTYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NQWdlbnQuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmgK
QEAgLTc2LDE0ICs3NiwxMiBAQCBjbGFzcyBTaGFkb3dSb290OwogCiBzdHJ1Y3QgSGlnaGxpZ2h0
Q29uZmlnOwogCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQogY2xhc3MgSW5zcGVjdG9y
RE9NQWdlbnQgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yQWdlbnRCYXNlLCBwdWJsaWMgSW5zcGVj
dG9yOjpET01CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewogICAgIFdURl9NQUtFX05PTkNPUFlB
QkxFKEluc3BlY3RvckRPTUFnZW50KTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1
YmxpYzoKICAgICBJbnNwZWN0b3JET01BZ2VudChQYWdlQWdlbnRDb250ZXh0JiwgSW5zcGVjdG9y
T3ZlcmxheSopOwotICAgIH5JbnNwZWN0b3JET01BZ2VudCgpIG92ZXJyaWRlOworICAgIH5JbnNw
ZWN0b3JET01BZ2VudCgpOwogCiAgICAgc3RhdGljIFN0cmluZyB0b0Vycm9yU3RyaW5nKEV4Y2Vw
dGlvbkNvZGUpOwogICAgIHN0YXRpYyBTdHJpbmcgdG9FcnJvclN0cmluZyhFeGNlcHRpb24mJik7
CkBAIC0xMDIsNjIgKzEwMCw2MiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBu
b2RlQXNTY3JpcHRWYWx1ZShKU0M6OkpTR2xvYmFsT2JqZWN0JiwgTm9kZSopOwogCiAgICAgLy8g
SW5zcGVjdG9yQWdlbnRCYXNlCi0gICAgdm9pZCBkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQo
SW5zcGVjdG9yOjpGcm9udGVuZFJvdXRlciosIEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXIq
KSBvdmVycmlkZTsKLSAgICB2b2lkIHdpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3Bl
Y3Rvcjo6RGlzY29ubmVjdFJlYXNvbikgb3ZlcnJpZGU7CisgICAgdm9pZCBkaWRDcmVhdGVGcm9u
dGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9udGVuZFJvdXRlciosIEluc3BlY3Rvcjo6QmFj
a2VuZERpc3BhdGNoZXIqKTsKKyAgICB2b2lkIHdpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5k
KEluc3BlY3Rvcjo6RGlzY29ubmVjdFJlYXNvbik7CiAKICAgICAvLyBET01CYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXIKLSAgICB2b2lkIHF1ZXJ5U2VsZWN0b3IoRXJyb3JTdHJpbmcmLCBpbnQgbm9k
ZUlkLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9ycywgaW50KiBlbGVtZW50SWQpIG92ZXJyaWRlOwot
ICAgIHZvaWQgcXVlcnlTZWxlY3RvckFsbChFcnJvclN0cmluZyYsIGludCBub2RlSWQsIGNvbnN0
IFN0cmluZyYgc2VsZWN0b3JzLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxpbnQ+PiYgcmVzdWx0KSBv
dmVycmlkZTsKLSAgICB2b2lkIGdldERvY3VtZW50KEVycm9yU3RyaW5nJiwgUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZT4mIHJvb3QpIG92ZXJyaWRlOwotICAgIHZvaWQgcmVx
dWVzdENoaWxkTm9kZXMoRXJyb3JTdHJpbmcmLCBpbnQgbm9kZUlkLCBjb25zdCBpbnQqIGRlcHRo
KSBvdmVycmlkZTsKLSAgICB2b2lkIHNldEF0dHJpYnV0ZVZhbHVlKEVycm9yU3RyaW5nJiwgaW50
IGVsZW1lbnRJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKSBvdmVy
cmlkZTsKLSAgICB2b2lkIHNldEF0dHJpYnV0ZXNBc1RleHQoRXJyb3JTdHJpbmcmLCBpbnQgZWxl
bWVudElkLCBjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFN0cmluZyogbmFtZSkgb3ZlcnJpZGU7
Ci0gICAgdm9pZCByZW1vdmVBdHRyaWJ1dGUoRXJyb3JTdHJpbmcmLCBpbnQgZWxlbWVudElkLCBj
b25zdCBTdHJpbmcmIG5hbWUpIG92ZXJyaWRlOwotICAgIHZvaWQgcmVtb3ZlTm9kZShFcnJvclN0
cmluZyYsIGludCBub2RlSWQpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0Tm9kZU5hbWUoRXJyb3JT
dHJpbmcmLCBpbnQgbm9kZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGludCogbmV3SWQpIG92ZXJy
aWRlOwotICAgIHZvaWQgZ2V0T3V0ZXJIVE1MKEVycm9yU3RyaW5nJiwgaW50IG5vZGVJZCwgV1RG
OjpTdHJpbmcqIG91dGVySFRNTCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRPdXRlckhUTUwoRXJy
b3JTdHJpbmcmLCBpbnQgbm9kZUlkLCBjb25zdCBTdHJpbmcmIG91dGVySFRNTCkgb3ZlcnJpZGU7
Ci0gICAgdm9pZCBpbnNlcnRBZGphY2VudEhUTUwoRXJyb3JTdHJpbmcmLCBpbnQgbm9kZUlkLCBj
b25zdCBTdHJpbmcmIHBvc2l0aW9uLCBjb25zdCBTdHJpbmcmIGh0bWwpIG92ZXJyaWRlOwotICAg
IHZvaWQgc2V0Tm9kZVZhbHVlKEVycm9yU3RyaW5nJiwgaW50IG5vZGVJZCwgY29uc3QgU3RyaW5n
JiB2YWx1ZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBnZXRTdXBwb3J0ZWRFdmVudE5hbWVzKEVycm9y
U3RyaW5nJiwgUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4mIGV2ZW50TmFtZXMpIG92ZXJy
aWRlOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6RE9NOjpOb2RlSWQ+IHF1ZXJ5U2VsZWN0b3IoSW5zcGVjdG9yOjpQcm90b2NvbDo6
RE9NOjpOb2RlSWQsIGNvbnN0IFN0cmluZyYgc2VsZWN0b3IpOworICAgIEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6RE9NOjpOb2RlSWQ+Pj4gcXVlcnlTZWxlY3RvckFsbChJbnNwZWN0b3I6OlByb3RvY29sOjpE
T006Ok5vZGVJZCwgY29uc3QgU3RyaW5nJiBzZWxlY3Rvcik7CisgICAgSW5zcGVjdG9yOjpQcm90
b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlPj4g
Z2V0RG9jdW1lbnQoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZv
aWQ+IHJlcXVlc3RDaGlsZE5vZGVzKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkLCBP
cHRpb25hbDxpbnQ+JiYgZGVwdGgpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3Ry
aW5nT3I8dm9pZD4gc2V0QXR0cmlidXRlVmFsdWUoSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpO
b2RlSWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7CisgICAgSW5z
cGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzZXRBdHRyaWJ1dGVzQXNUZXh0
KEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkLCBjb25zdCBTdHJpbmcmIHRleHQsIGNv
bnN0IFN0cmluZyYgbmFtZSk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdP
cjx2b2lkPiByZW1vdmVBdHRyaWJ1dGUoSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQs
IGNvbnN0IFN0cmluZyYgbmFtZSk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJp
bmdPcjx2b2lkPiByZW1vdmVOb2RlKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkKTsK
KyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRPTTo6Tm9kZUlkPiBzZXROb2RlTmFtZShJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5v
ZGVJZCwgY29uc3QgU3RyaW5nJik7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJp
bmdPcjxTdHJpbmc+IGdldE91dGVySFRNTChJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJ
ZCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzZXRPdXRl
ckhUTUwoSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQsIGNvbnN0IFN0cmluZyYpOwor
ICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gaW5zZXJ0QWRqYWNl
bnRIVE1MKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkLCBjb25zdCBTdHJpbmcmIHBv
c2l0aW9uLCBjb25zdCBTdHJpbmcmIGh0bWwpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8dm9pZD4gc2V0Tm9kZVZhbHVlKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6
Tm9kZUlkLCBjb25zdCBTdHJpbmcmKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0
cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPFN0cmluZz4+PiBnZXRTdXBwb3J0ZWRFdmVudE5hbWVz
KCk7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0gICAgdm9p
ZCBnZXREYXRhQmluZGluZ3NGb3JOb2RlKEVycm9yU3RyaW5nJiwgaW50IG5vZGVJZCwgUmVmUHRy
PEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpEYXRhQmluZGluZz4+JiBk
YXRhQXJyYXkpIG92ZXJyaWRlOwotICAgIHZvaWQgZ2V0QXNzb2NpYXRlZERhdGFGb3JOb2RlKEVy
cm9yU3RyaW5nJiwgaW50IG5vZGVJZCwgT3B0aW9uYWw8U3RyaW5nPiYgYXNzb2NpYXRlZERhdGEp
IG92ZXJyaWRlOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEpT
T046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpEYXRhQmluZGluZz4+PiBnZXRE
YXRhQmluZGluZ3NGb3JOb2RlKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkKTsKKyAg
ICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFN0cmluZz4gZ2V0QXNzb2NpYXRl
ZERhdGFGb3JOb2RlKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkKTsKICNlbmRpZgot
ICAgIHZvaWQgZ2V0RXZlbnRMaXN0ZW5lcnNGb3JOb2RlKEVycm9yU3RyaW5nJiwgaW50IG5vZGVJ
ZCwgUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpFdmVudExp
c3RlbmVyPj4mIGxpc3RlbmVyc0FycmF5KSBvdmVycmlkZTsKLSAgICB2b2lkIHNldEV2ZW50TGlz
dGVuZXJEaXNhYmxlZChFcnJvclN0cmluZyYsIGludCBldmVudExpc3RlbmVySWQsIGJvb2wgZGlz
YWJsZWQpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0QnJlYWtwb2ludEZvckV2ZW50TGlzdGVuZXIo
RXJyb3JTdHJpbmcmLCBpbnQgZXZlbnRMaXN0ZW5lcklkLCBjb25zdCBKU09OOjpPYmplY3QqIG9w
dGlvbnMpIGZpbmFsOwotICAgIHZvaWQgcmVtb3ZlQnJlYWtwb2ludEZvckV2ZW50TGlzdGVuZXIo
RXJyb3JTdHJpbmcmLCBpbnQgZXZlbnRMaXN0ZW5lcklkKSBvdmVycmlkZTsKLSAgICB2b2lkIGdl
dEFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzRm9yTm9kZShFcnJvclN0cmluZyYsIGludCBub2RlSWQs
IFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVz
PiYgYXhQcm9wZXJ0aWVzKSBvdmVycmlkZTsKLSAgICB2b2lkIHBlcmZvcm1TZWFyY2goRXJyb3JT
dHJpbmcmLCBjb25zdCBTdHJpbmcmIHF1ZXJ5LCBjb25zdCBKU09OOjpBcnJheSogbm9kZUlkcywg
Y29uc3QgYm9vbCogY2FzZVNlbnNpdGl2ZSwgU3RyaW5nKiBzZWFyY2hJZCwgaW50KiByZXN1bHRD
b3VudCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBnZXRTZWFyY2hSZXN1bHRzKEVycm9yU3RyaW5nJiwg
Y29uc3QgU3RyaW5nJiBzZWFyY2hJZCwgaW50IGZyb21JbmRleCwgaW50IHRvSW5kZXgsIFJlZlB0
cjxKU09OOjpBcnJheU9mPGludD4+Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkaXNjYXJkU2VhcmNo
UmVzdWx0cyhFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgc2VhcmNoSWQpIG92ZXJyaWRlOwot
ICAgIHZvaWQgcmVzb2x2ZU5vZGUoRXJyb3JTdHJpbmcmLCBpbnQgbm9kZUlkLCBjb25zdCBTdHJp
bmcqIG9iamVjdEdyb3VwLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6UmVt
b3RlT2JqZWN0PiYgcmVzdWx0KSBvdmVycmlkZTsKLSAgICB2b2lkIGdldEF0dHJpYnV0ZXMoRXJy
b3JTdHJpbmcmLCBpbnQgbm9kZUlkLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiYgcmVz
dWx0KSBvdmVycmlkZTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFJl
ZjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6RXZlbnRMaXN0ZW5lcj4+
PiBnZXRFdmVudExpc3RlbmVyc0Zvck5vZGUoSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2Rl
SWQpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc2V0RXZl
bnRMaXN0ZW5lckRpc2FibGVkKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6RXZlbnRMaXN0ZW5l
cklkLCBib29sKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+
IHNldEJyZWFrcG9pbnRGb3JFdmVudExpc3RlbmVyKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6
RXZlbnRMaXN0ZW5lcklkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIG9wdGlvbnMpOworICAgIElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gcmVtb3ZlQnJlYWtwb2ludEZv
ckV2ZW50TGlzdGVuZXIoSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpFdmVudExpc3RlbmVySWQp
OworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM+PiBnZXRBY2Nlc3NpYmlsaXR5
UHJvcGVydGllc0Zvck5vZGUoSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQpOworICAg
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8c3RkOjp0dXBsZTxTdHJpbmcgLyog
c2VhcmNoSWQgKi8sIGludCAvKiByZXN1bHRDb3VudCAqLz4+IHBlcmZvcm1TZWFyY2goY29uc3Qg
U3RyaW5nJiBxdWVyeSwgUmVmUHRyPEpTT046OkFycmF5PiYmIG5vZGVJZHMsIE9wdGlvbmFsPGJv
b2w+JiYgY2FzZVNlbnNpdGl2ZSk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJp
bmdPcjxSZWY8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZD4+
PiBnZXRTZWFyY2hSZXN1bHRzKGNvbnN0IFN0cmluZyYgc2VhcmNoSWQsIGludCBmcm9tSW5kZXgs
IGludCB0b0luZGV4KTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZv
aWQ+IGRpc2NhcmRTZWFyY2hSZXN1bHRzKGNvbnN0IFN0cmluZyYgc2VhcmNoSWQpOworICAgIElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4+IHJlc29sdmVOb2RlKEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRPTTo6Tm9kZUlkLCBjb25zdCBTdHJpbmcmIG9iamVjdEdyb3VwKTsKKyAgICBJbnNwZWN0b3I6
OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPFN0cmluZz4+PiBnZXRB
dHRyaWJ1dGVzKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkKTsKICNpZiBQTEFURk9S
TShJT1NfRkFNSUxZKQotICAgIHZvaWQgc2V0SW5zcGVjdE1vZGVFbmFibGVkKEVycm9yU3RyaW5n
JiwgYm9vbCBlbmFibGVkLCBjb25zdCBKU09OOjpPYmplY3QqIGhpZ2hsaWdodENvbmZpZykgb3Zl
cnJpZGU7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzZXRJ
bnNwZWN0TW9kZUVuYWJsZWQoYm9vbCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBoaWdobGlnaHRD
b25maWcpOwogI2Vsc2UKLSAgICB2b2lkIHNldEluc3BlY3RNb2RlRW5hYmxlZChFcnJvclN0cmlu
ZyYsIGJvb2wgZW5hYmxlZCwgY29uc3QgSlNPTjo6T2JqZWN0KiBoaWdobGlnaHRDb25maWcsIGNv
bnN0IGJvb2wqIHNob3dSdWxlcnMpIG92ZXJyaWRlOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8dm9pZD4gc2V0SW5zcGVjdE1vZGVFbmFibGVkKGJvb2wsIFJlZlB0cjxK
U09OOjpPYmplY3Q+JiYgaGlnaGxpZ2h0Q29uZmlnLCBPcHRpb25hbDxib29sPiYmIHNob3dSdWxl
cnMpOwogI2VuZGlmCi0gICAgdm9pZCByZXF1ZXN0Tm9kZShFcnJvclN0cmluZyYsIGNvbnN0IFN0
cmluZyYgb2JqZWN0SWQsIGludCogbm9kZUlkKSBvdmVycmlkZTsKLSAgICB2b2lkIHB1c2hOb2Rl
QnlQYXRoVG9Gcm9udGVuZChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgcGF0aCwgaW50KiBu
b2RlSWQpIG92ZXJyaWRlOwotICAgIHZvaWQgaGlkZUhpZ2hsaWdodChFcnJvclN0cmluZyYpIG92
ZXJyaWRlOwotICAgIHZvaWQgaGlnaGxpZ2h0UmVjdChFcnJvclN0cmluZyYsIGludCB4LCBpbnQg
eSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBjb25zdCBKU09OOjpPYmplY3QqIGNvbG9yLCBjb25z
dCBKU09OOjpPYmplY3QqIG91dGxpbmVDb2xvciwgY29uc3QgYm9vbCogdXNlUGFnZUNvb3JkaW5h
dGVzKSBvdmVycmlkZTsKLSAgICB2b2lkIGhpZ2hsaWdodFF1YWQoRXJyb3JTdHJpbmcmLCBjb25z
dCBKU09OOjpBcnJheSYgcXVhZCwgY29uc3QgSlNPTjo6T2JqZWN0KiBjb2xvciwgY29uc3QgSlNP
Tjo6T2JqZWN0KiBvdXRsaW5lQ29sb3IsIGNvbnN0IGJvb2wqIHVzZVBhZ2VDb29yZGluYXRlcykg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBoaWdobGlnaHRTZWxlY3RvcihFcnJvclN0cmluZyYsIGNvbnN0
IEpTT046Ok9iamVjdCYgaGlnaGxpZ2h0Q29uZmlnLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yU3Ry
aW5nLCBjb25zdCBTdHJpbmcqIGZyYW1lSWQpIG92ZXJyaWRlOwotICAgIHZvaWQgaGlnaGxpZ2h0
Tm9kZShFcnJvclN0cmluZyYsIGNvbnN0IEpTT046Ok9iamVjdCYgaGlnaGxpZ2h0Q29uZmlnLCBj
b25zdCBpbnQqIG5vZGVJZCwgY29uc3QgU3RyaW5nKiBvYmplY3RJZCkgb3ZlcnJpZGU7Ci0gICAg
dm9pZCBoaWdobGlnaHROb2RlTGlzdChFcnJvclN0cmluZyYsIGNvbnN0IEpTT046OkFycmF5JiBu
b2RlSWRzLCBjb25zdCBKU09OOjpPYmplY3QmIGhpZ2hsaWdodENvbmZpZykgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCBoaWdobGlnaHRGcmFtZShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgZnJhbWVJ
ZCwgY29uc3QgSlNPTjo6T2JqZWN0KiBjb2xvciwgY29uc3QgSlNPTjo6T2JqZWN0KiBvdXRsaW5l
Q29sb3IpIG92ZXJyaWRlOwotICAgIHZvaWQgbW92ZVRvKEVycm9yU3RyaW5nJiwgaW50IG5vZGVJ
ZCwgaW50IHRhcmdldE5vZGVJZCwgY29uc3QgaW50KiBhbmNob3JOb2RlSWQsIGludCogbmV3Tm9k
ZUlkKSBvdmVycmlkZTsKLSAgICB2b2lkIHVuZG8oRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKLSAg
ICB2b2lkIHJlZG8oRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2b2lkIG1hcmtVbmRvYWJs
ZVN0YXRlKEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBmb2N1cyhFcnJvclN0cmlu
ZyYsIGludCBub2RlSWQpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0SW5zcGVjdGVkTm9kZShFcnJv
clN0cmluZyYsIGludCBub2RlSWQpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0QWxsb3dFZGl0aW5n
VXNlckFnZW50U2hhZG93VHJlZXMoRXJyb3JTdHJpbmcmLCBib29sIGFsbG93KSBmaW5hbDsKKyAg
ICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRPTTo6Tm9kZUlkPiByZXF1ZXN0Tm9kZShjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50
aW1lOjpSZW1vdGVPYmplY3RJZCYpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3Ry
aW5nT3I8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQ+IHB1c2hOb2RlQnlQYXRoVG9G
cm9udGVuZChjb25zdCBTdHJpbmcmIHBhdGgpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8dm9pZD4gaGlkZUhpZ2hsaWdodCgpOworICAgIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gaGlnaGxpZ2h0UmVjdChpbnQgeCwgaW50IHksIGludCB3
aWR0aCwgaW50IGhlaWdodCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBjb2xvciwgUmVmUHRyPEpT
T046Ok9iamVjdD4mJiBvdXRsaW5lQ29sb3IsIE9wdGlvbmFsPGJvb2w+JiYgdXNlUGFnZUNvb3Jk
aW5hdGVzKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGhp
Z2hsaWdodFF1YWQoUmVmPEpTT046OkFycmF5PiYmIHF1YWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+
JiYgY29sb3IsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgb3V0bGluZUNvbG9yLCBPcHRpb25hbDxi
b29sPiYmIHVzZVBhZ2VDb29yZGluYXRlcyk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJy
b3JTdHJpbmdPcjx2b2lkPiBoaWdobGlnaHRTZWxlY3RvcihSZWY8SlNPTjo6T2JqZWN0PiYmIGhp
Z2hsaWdodENvbmZpZywgY29uc3QgU3RyaW5nJiBzZWxlY3RvclN0cmluZywgY29uc3QgSW5zcGVj
dG9yOjpQcm90b2NvbDo6TmV0d29yazo6RnJhbWVJZCYpOworICAgIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gaGlnaGxpZ2h0Tm9kZShSZWY8SlNPTjo6T2JqZWN0PiYm
IGhpZ2hsaWdodENvbmZpZywgT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2Rl
SWQ+JiYsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdElk
Jik7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBoaWdobGln
aHROb2RlTGlzdChSZWY8SlNPTjo6QXJyYXk+JiYgbm9kZUlkcywgUmVmPEpTT046Ok9iamVjdD4m
JiBoaWdobGlnaHRDb25maWcpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5n
T3I8dm9pZD4gaGlnaGxpZ2h0RnJhbWUoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29y
azo6RnJhbWVJZCYsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgY29sb3IsIFJlZlB0cjxKU09OOjpP
YmplY3Q+JiYgb3V0bGluZUNvbG9yKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0
cmluZ09yPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkPiBtb3ZlVG8oSW5zcGVjdG9y
OjpQcm90b2NvbDo6RE9NOjpOb2RlSWQgbm9kZUlkLCBJbnNwZWN0b3I6OlByb3RvY29sOjpET006
Ok5vZGVJZCB0YXJnZXROb2RlSWQsIE9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6
Tm9kZUlkPiYmIGluc2VydEJlZm9yZU5vZGVJZCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6
RXJyb3JTdHJpbmdPcjx2b2lkPiB1bmRvKCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJy
b3JTdHJpbmdPcjx2b2lkPiByZWRvKCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JT
dHJpbmdPcjx2b2lkPiBtYXJrVW5kb2FibGVTdGF0ZSgpOworICAgIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZm9jdXMoSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpO
b2RlSWQpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc2V0
SW5zcGVjdGVkTm9kZShJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZCk7CisgICAgSW5z
cGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzZXRBbGxvd0VkaXRpbmdVc2Vy
QWdlbnRTaGFkb3dUcmVlcyhib29sKTsKIAogICAgIC8vIEluc3BlY3Rvckluc3RydW1lbnRhdGlv
bgotICAgIGludCBpZGVudGlmaWVyRm9yTm9kZShOb2RlJik7CisgICAgSW5zcGVjdG9yOjpQcm90
b2NvbDo6RE9NOjpOb2RlSWQgaWRlbnRpZmllckZvck5vZGUoTm9kZSYpOwogICAgIHZvaWQgYWRk
RXZlbnRMaXN0ZW5lcnNUb05vZGUoTm9kZSYpOwogICAgIHZvaWQgZGlkSW5zZXJ0RE9NTm9kZShO
b2RlJik7CiAgICAgdm9pZCBkaWRSZW1vdmVET01Ob2RlKE5vZGUmKTsKQEAgLTE4NSwxMiArMTgz
LDEyIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc3R5bGVBdHRyaWJ1dGVJbnZhbGlkYXRlZChjb25z
dCBWZWN0b3I8RWxlbWVudCo+JiBlbGVtZW50cyk7CiAKLSAgICBpbnQgcHVzaE5vZGVUb0Zyb250
ZW5kKE5vZGUqKTsKLSAgICBpbnQgcHVzaE5vZGVUb0Zyb250ZW5kKEVycm9yU3RyaW5nJiwgaW50
IGRvY3VtZW50Tm9kZUlkLCBOb2RlKik7Ci0gICAgaW50IHB1c2hOb2RlUGF0aFRvRnJvbnRlbmQo
Tm9kZSopOwotICAgIGludCBwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKEVycm9yU3RyaW5nLCBOb2Rl
Kik7Ci0gICAgTm9kZSogbm9kZUZvcklkKGludCBub2RlSWQpOwotICAgIGludCBib3VuZE5vZGVJ
ZChjb25zdCBOb2RlKik7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQgcHVz
aE5vZGVUb0Zyb250ZW5kKE5vZGUqKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5v
ZGVJZCBwdXNoTm9kZVRvRnJvbnRlbmQoSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmcm
LCBJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZCBkb2N1bWVudE5vZGVJZCwgTm9kZSop
OworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkIHB1c2hOb2RlUGF0aFRvRnJv
bnRlbmQoTm9kZSopOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkIHB1c2hO
b2RlUGF0aFRvRnJvbnRlbmQoSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmcsIE5vZGUq
KTsKKyAgICBOb2RlKiBub2RlRm9ySWQoSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQp
OworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkIGJvdW5kTm9kZUlkKGNvbnN0
IE5vZGUqKTsKIAogICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpSZW1v
dGVPYmplY3Q+IHJlc29sdmVOb2RlKE5vZGUqLCBjb25zdCBTdHJpbmcmIG9iamVjdEdyb3VwKTsK
ICAgICBib29sIGhhbmRsZU1vdXNlUHJlc3MoKTsKQEAgLTIwMiwxMiArMjAwLDEyIEBAIHB1Ymxp
YzoKICAgICBWZWN0b3I8RG9jdW1lbnQqPiBkb2N1bWVudHMoKTsKICAgICB2b2lkIHJlc2V0KCk7
CiAKLSAgICBOb2RlKiBhc3NlcnROb2RlKEVycm9yU3RyaW5nJiwgaW50IG5vZGVJZCk7Ci0gICAg
RWxlbWVudCogYXNzZXJ0RWxlbWVudChFcnJvclN0cmluZyYsIGludCBub2RlSWQpOwotICAgIERv
Y3VtZW50KiBhc3NlcnREb2N1bWVudChFcnJvclN0cmluZyYsIGludCBub2RlSWQpOworICAgIE5v
ZGUqIGFzc2VydE5vZGUoSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBJbnNwZWN0
b3I6OlByb3RvY29sOjpET006Ok5vZGVJZCk7CisgICAgRWxlbWVudCogYXNzZXJ0RWxlbWVudChJ
bnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZyYsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRP
TTo6Tm9kZUlkKTsKKyAgICBEb2N1bWVudCogYXNzZXJ0RG9jdW1lbnQoSW5zcGVjdG9yOjpQcm90
b2NvbDo6RXJyb3JTdHJpbmcmLCBJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZCk7CiAK
ICAgICBSZWZQdHI8SlNDOjpCcmVha3BvaW50PiBicmVha3BvaW50Rm9yRXZlbnRMaXN0ZW5lcihF
dmVudFRhcmdldCYsIGNvbnN0IEF0b21TdHJpbmcmIGV2ZW50VHlwZSwgRXZlbnRMaXN0ZW5lciYs
IGJvb2wgY2FwdHVyZSk7Ci0gICAgaW50IGlkRm9yRXZlbnRMaXN0ZW5lcihFdmVudFRhcmdldCYs
IGNvbnN0IEF0b21TdHJpbmcmIGV2ZW50VHlwZSwgRXZlbnRMaXN0ZW5lciYsIGJvb2wgY2FwdHVy
ZSk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpFdmVudExpc3RlbmVySWQgaWRGb3JF
dmVudExpc3RlbmVyKEV2ZW50VGFyZ2V0JiwgY29uc3QgQXRvbVN0cmluZyYgZXZlbnRUeXBlLCBF
dmVudExpc3RlbmVyJiwgYm9vbCBjYXB0dXJlKTsKIAogcHJpdmF0ZToKICNpZiBFTkFCTEUoVklE
RU8pCkBAIC0yMTUsMzMgKzIxMywzMyBAQCBwcml2YXRlOgogI2VuZGlmCiAKICAgICB2b2lkIGhp
Z2hsaWdodE1vdXNlZE92ZXJOb2RlKCk7Ci0gICAgdm9pZCBzZXRTZWFyY2hpbmdGb3JOb2RlKEVy
cm9yU3RyaW5nJiwgYm9vbCBlbmFibGVkLCBjb25zdCBKU09OOjpPYmplY3QqIGhpZ2hsaWdodENv
bmZpZywgYm9vbCBzaG93UnVsZXJzKTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SGlnaGxpZ2h0Q29u
ZmlnPiBoaWdobGlnaHRDb25maWdGcm9tSW5zcGVjdG9yT2JqZWN0KEVycm9yU3RyaW5nJiwgY29u
c3QgSlNPTjo6T2JqZWN0KiBoaWdobGlnaHRJbnNwZWN0b3JPYmplY3QpOworICAgIHZvaWQgc2V0
U2VhcmNoaW5nRm9yTm9kZShJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZyYsIGJvb2wg
ZW5hYmxlZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBoaWdobGlnaHRDb25maWcsIGJvb2wgc2hv
d1J1bGVycyk7CisgICAgc3RkOjp1bmlxdWVfcHRyPEhpZ2hsaWdodENvbmZpZz4gaGlnaGxpZ2h0
Q29uZmlnRnJvbUluc3BlY3Rvck9iamVjdChJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmlu
ZyYsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgaGlnaGxpZ2h0SW5zcGVjdG9yT2JqZWN0KTsKIAog
ICAgIC8vIE5vZGUtcmVsYXRlZCBtZXRob2RzLgotICAgIHR5cGVkZWYgSGFzaE1hcDxSZWZQdHI8
Tm9kZT4sIGludD4gTm9kZVRvSWRNYXA7Ci0gICAgaW50IGJpbmQoTm9kZSosIE5vZGVUb0lkTWFw
Kik7CisgICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxOb2RlPiwgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6RE9NOjpOb2RlSWQ+IE5vZGVUb0lkTWFwOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRP
TTo6Tm9kZUlkIGJpbmQoTm9kZSosIE5vZGVUb0lkTWFwKik7CiAgICAgdm9pZCB1bmJpbmQoTm9k
ZSosIE5vZGVUb0lkTWFwKik7CiAKLSAgICBOb2RlKiBhc3NlcnRFZGl0YWJsZU5vZGUoRXJyb3JT
dHJpbmcmLCBpbnQgbm9kZUlkKTsKLSAgICBFbGVtZW50KiBhc3NlcnRFZGl0YWJsZUVsZW1lbnQo
RXJyb3JTdHJpbmcmLCBpbnQgbm9kZUlkKTsKKyAgICBOb2RlKiBhc3NlcnRFZGl0YWJsZU5vZGUo
SW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBJbnNwZWN0b3I6OlByb3RvY29sOjpE
T006Ok5vZGVJZCk7CisgICAgRWxlbWVudCogYXNzZXJ0RWRpdGFibGVFbGVtZW50KEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nJiwgSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2Rl
SWQpOwogCi0gICAgdm9pZCBwdXNoQ2hpbGROb2Rlc1RvRnJvbnRlbmQoaW50IG5vZGVJZCwgaW50
IGRlcHRoID0gMSk7CisgICAgdm9pZCBwdXNoQ2hpbGROb2Rlc1RvRnJvbnRlbmQoSW5zcGVjdG9y
OjpQcm90b2NvbDo6RE9NOjpOb2RlSWQsIGludCBkZXB0aCA9IDEpOwogCiAgICAgUmVmPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZT4gYnVpbGRPYmplY3RGb3JOb2RlKE5vZGUqLCBpbnQg
ZGVwdGgsIE5vZGVUb0lkTWFwKik7CiAgICAgUmVmPEpTT046OkFycmF5T2Y8U3RyaW5nPj4gYnVp
bGRBcnJheUZvckVsZW1lbnRBdHRyaWJ1dGVzKEVsZW1lbnQqKTsKICAgICBSZWY8SlNPTjo6QXJy
YXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+PiBidWlsZEFycmF5Rm9yQ29udGFp
bmVyQ2hpbGRyZW4oTm9kZSogY29udGFpbmVyLCBpbnQgZGVwdGgsIE5vZGVUb0lkTWFwKiBub2Rl
c01hcCk7CiAgICAgUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9N
OjpOb2RlPj4gYnVpbGRBcnJheUZvclBzZXVkb0VsZW1lbnRzKGNvbnN0IEVsZW1lbnQmLCBOb2Rl
VG9JZE1hcCogbm9kZXNNYXApOwotICAgIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkV2
ZW50TGlzdGVuZXI+IGJ1aWxkT2JqZWN0Rm9yRXZlbnRMaXN0ZW5lcihjb25zdCBSZWdpc3RlcmVk
RXZlbnRMaXN0ZW5lciYsIGludCBpZGVudGlmaWVyLCBFdmVudFRhcmdldCYsIGNvbnN0IEF0b21T
dHJpbmcmIGV2ZW50VHlwZSwgYm9vbCBkaXNhYmxlZCwgY29uc3QgUmVmUHRyPEpTQzo6QnJlYWtw
b2ludD4mKTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmls
aXR5UHJvcGVydGllcz4gYnVpbGRPYmplY3RGb3JBY2Nlc3NpYmlsaXR5UHJvcGVydGllcyhOb2Rl
Kik7Ci0gICAgdm9pZCBwcm9jZXNzQWNjZXNzaWJpbGl0eUNoaWxkcmVuKEFYQ29yZU9iamVjdCYs
IEpTT046OkFycmF5T2Y8aW50PiYpOworICAgIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006
OkV2ZW50TGlzdGVuZXI+IGJ1aWxkT2JqZWN0Rm9yRXZlbnRMaXN0ZW5lcihjb25zdCBSZWdpc3Rl
cmVkRXZlbnRMaXN0ZW5lciYsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6RXZlbnRMaXN0ZW5l
cklkIGlkZW50aWZpZXIsIEV2ZW50VGFyZ2V0JiwgY29uc3QgQXRvbVN0cmluZyYgZXZlbnRUeXBl
LCBib29sIGRpc2FibGVkLCBjb25zdCBSZWZQdHI8SlNDOjpCcmVha3BvaW50PiYpOworICAgIFJl
ZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzPiBidWls
ZE9iamVjdEZvckFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzKE5vZGUmKTsKKyAgICB2b2lkIHByb2Nl
c3NBY2Nlc3NpYmlsaXR5Q2hpbGRyZW4oQVhDb3JlT2JqZWN0JiwgSlNPTjo6QXJyYXlPZjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZD4mKTsKICAgICAKICAgICBOb2RlKiBub2RlRm9y
UGF0aChjb25zdCBTdHJpbmcmIHBhdGgpOwotICAgIE5vZGUqIG5vZGVGb3JPYmplY3RJZChjb25z
dCBTdHJpbmcmIG9iamVjdElkKTsKKyAgICBOb2RlKiBub2RlRm9yT2JqZWN0SWQoY29uc3QgSW5z
cGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0SWQmKTsKIAogICAgIHZvaWQg
ZGlzY2FyZEJpbmRpbmdzKCk7CiAKLSAgICB2b2lkIGlubmVySGlnaGxpZ2h0UXVhZChzdGQ6OnVu
aXF1ZV9wdHI8RmxvYXRRdWFkPiwgY29uc3QgSlNPTjo6T2JqZWN0KiBjb2xvciwgY29uc3QgSlNP
Tjo6T2JqZWN0KiBvdXRsaW5lQ29sb3IsIGNvbnN0IGJvb2wqIHVzZVBhZ2VDb29yZGluYXRlcyk7
CisgICAgdm9pZCBpbm5lckhpZ2hsaWdodFF1YWQoc3RkOjp1bmlxdWVfcHRyPEZsb2F0UXVhZD4s
IFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgY29sb3IsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgb3V0
bGluZUNvbG9yLCBPcHRpb25hbDxib29sPiYmIHVzZVBhZ2VDb29yZGluYXRlcyk7CiAKICAgICBJ
bnNwZWN0b3I6OkluamVjdGVkU2NyaXB0TWFuYWdlciYgbV9pbmplY3RlZFNjcmlwdE1hbmFnZXI7
CiAgICAgc3RkOjp1bmlxdWVfcHRyPEluc3BlY3Rvcjo6RE9NRnJvbnRlbmREaXNwYXRjaGVyPiBt
X2Zyb250ZW5kRGlzcGF0Y2hlcjsKQEAgLTI1MSwxMCArMjQ5LDEwIEBAIHByaXZhdGU6CiAgICAg
Tm9kZVRvSWRNYXAgbV9kb2N1bWVudE5vZGVUb0lkTWFwOwogICAgIC8vIE93bnMgbm9kZSBtYXBw
aW5ncyBmb3IgZGFuZ2xpbmcgbm9kZXMuCiAgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxOb2Rl
VG9JZE1hcD4+IG1fZGFuZ2xpbmdOb2RlVG9JZE1hcHM7Ci0gICAgSGFzaE1hcDxpbnQsIE5vZGUq
PiBtX2lkVG9Ob2RlOwotICAgIEhhc2hNYXA8aW50LCBOb2RlVG9JZE1hcCo+IG1faWRUb05vZGVz
TWFwOwotICAgIEhhc2hTZXQ8aW50PiBtX2NoaWxkcmVuUmVxdWVzdGVkOwotICAgIGludCBtX2xh
c3ROb2RlSWQgeyAxIH07CisgICAgSGFzaE1hcDxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5v
ZGVJZCwgTm9kZSo+IG1faWRUb05vZGU7CisgICAgSGFzaE1hcDxJbnNwZWN0b3I6OlByb3RvY29s
OjpET006Ok5vZGVJZCwgTm9kZVRvSWRNYXAqPiBtX2lkVG9Ob2Rlc01hcDsKKyAgICBIYXNoU2V0
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkPiBtX2NoaWxkcmVuUmVxdWVzdGVkOwor
ICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkIG1fbGFzdE5vZGVJZCB7IDEgfTsK
ICAgICBSZWZQdHI8RG9jdW1lbnQ+IG1fZG9jdW1lbnQ7CiAgICAgdHlwZWRlZiBIYXNoTWFwPFN0
cmluZywgVmVjdG9yPFJlZlB0cjxOb2RlPj4+IFNlYXJjaFJlc3VsdHM7CiAgICAgU2VhcmNoUmVz
dWx0cyBtX3NlYXJjaFJlc3VsdHM7CkBAIC0yODUsNyArMjgzLDcgQEAgcHJpdmF0ZToKICNlbmRp
ZgogCiAgICAgc3RydWN0IEluc3BlY3RvckV2ZW50TGlzdGVuZXIgewotICAgICAgICBpbnQgaWRl
bnRpZmllciB7IDEgfTsKKyAgICAgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpFdmVudExp
c3RlbmVySWQgaWRlbnRpZmllciB7IDEgfTsKICAgICAgICAgUmVmUHRyPEV2ZW50VGFyZ2V0PiBl
dmVudFRhcmdldDsKICAgICAgICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXI7
CiAgICAgICAgIEF0b21TdHJpbmcgZXZlbnRUeXBlOwpAQCAtMjk1LDcgKzI5Myw3IEBAIHByaXZh
dGU6CiAKICAgICAgICAgSW5zcGVjdG9yRXZlbnRMaXN0ZW5lcigpIHsgfQogCi0gICAgICAgIElu
c3BlY3RvckV2ZW50TGlzdGVuZXIoaW50IGlkZW50aWZpZXIsIEV2ZW50VGFyZ2V0JiB0YXJnZXQs
IGNvbnN0IEF0b21TdHJpbmcmIHR5cGUsIEV2ZW50TGlzdGVuZXImIGxpc3RlbmVyLCBib29sIGNh
cHR1cmUpCisgICAgICAgIEluc3BlY3RvckV2ZW50TGlzdGVuZXIoSW5zcGVjdG9yOjpQcm90b2Nv
bDo6RE9NOjpFdmVudExpc3RlbmVySWQgaWRlbnRpZmllciwgRXZlbnRUYXJnZXQmIHRhcmdldCwg
Y29uc3QgQXRvbVN0cmluZyYgdHlwZSwgRXZlbnRMaXN0ZW5lciYgbGlzdGVuZXIsIGJvb2wgY2Fw
dHVyZSkKICAgICAgICAgICAgIDogaWRlbnRpZmllcihpZGVudGlmaWVyKQogICAgICAgICAgICAg
LCBldmVudFRhcmdldCgmdGFyZ2V0KQogICAgICAgICAgICAgLCBldmVudExpc3RlbmVyKCZsaXN0
ZW5lcikKQEAgLTMyMSw4ICszMTksOCBAQCBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBFdmVu
dEZpcmVkQ2FsbGJhY2s7CiAKICAgICBIYXNoU2V0PGNvbnN0IEV2ZW50Kj4gbV9kaXNwYXRjaGVk
RXZlbnRzOwotICAgIEhhc2hNYXA8aW50LCBJbnNwZWN0b3JFdmVudExpc3RlbmVyPiBtX2V2ZW50
TGlzdGVuZXJFbnRyaWVzOwotICAgIGludCBtX2xhc3RFdmVudExpc3RlbmVySWQgeyAxIH07Cisg
ICAgSGFzaE1hcDxJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkV2ZW50TGlzdGVuZXJJZCwgSW5z
cGVjdG9yRXZlbnRMaXN0ZW5lcj4gbV9ldmVudExpc3RlbmVyRW50cmllczsKKyAgICBJbnNwZWN0
b3I6OlByb3RvY29sOjpET006OkV2ZW50TGlzdGVuZXJJZCBtX2xhc3RFdmVudExpc3RlbmVySWQg
eyAxIH07CiAKICAgICBib29sIG1fc2VhcmNoaW5nRm9yTm9kZSB7IGZhbHNlIH07CiAgICAgYm9v
bCBtX3N1cHByZXNzQXR0cmlidXRlTW9kaWZpZWRFdmVudCB7IGZhbHNlIH07CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTURlYnVnZ2VyQWdl
bnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01EZWJ1
Z2dlckFnZW50LmNwcAppbmRleCAwNzlhMTE2ODZlNDk4Yjg0Nzk5NTU5Y2YzY2Q4YWYyZjdjMDkx
ODE3Li5jMzJlNWEzOTE0ZTc5ZjMwYmMxNGU2OGRkNmNmYmQzMWIwMDU0OWRkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTURlYnVnZ2VyQWdl
bnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9N
RGVidWdnZXJBZ2VudC5jcHAKQEAgLTEyOCwxMDkgKzEyOCw5NCBAQCB2b2lkIEluc3BlY3RvckRP
TURlYnVnZ2VyQWdlbnQ6Om1haW5GcmFtZU5hdmlnYXRlZCgpCiAgICAgICAgIG1fcGF1c2VPbkFs
bFRpbWVvdXRzQnJlYWtwb2ludC0+cmVzZXRIaXRDb3VudCgpOwogfQogCi12b2lkIEluc3BlY3Rv
ckRPTURlYnVnZ2VyQWdlbnQ6OnNldEV2ZW50QnJlYWtwb2ludChFcnJvclN0cmluZyYgZXJyb3JT
dHJpbmcsIGNvbnN0IFN0cmluZyYgYnJlYWtwb2ludFR5cGVTdHJpbmcsIGNvbnN0IFN0cmluZyog
ZXZlbnROYW1lLCBjb25zdCBKU09OOjpPYmplY3QqIG9wdGlvbnNQYXlsb2FkKQorUHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudDo6c2V0RXZlbnRC
cmVha3BvaW50KFByb3RvY29sOjpET01EZWJ1Z2dlcjo6RXZlbnRCcmVha3BvaW50VHlwZSBicmVh
a3BvaW50VHlwZSwgY29uc3QgU3RyaW5nJiBldmVudE5hbWUsIFJlZlB0cjxKU09OOjpPYmplY3Q+
JiYgb3B0aW9ucykKIHsKLSAgICBpZiAoYnJlYWtwb2ludFR5cGVTdHJpbmcuaXNFbXB0eSgpKSB7
Ci0gICAgICAgIGVycm9yU3RyaW5nID0gImJyZWFrcG9pbnRUeXBlIGlzIGVtcHR5Il9zOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQorICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmlu
ZzsKIAotICAgIGF1dG8gYnJlYWtwb2ludFR5cGUgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpJbnNw
ZWN0b3JIZWxwZXJzOjpwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6RE9NRGVidWdnZXI6OkV2ZW50QnJlYWtwb2ludFR5cGU+KGJyZWFrcG9pbnRUeXBlU3RyaW5n
KTsKLSAgICBpZiAoIWJyZWFrcG9pbnRUeXBlKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gbWFr
ZVN0cmluZygiVW5rbm93biBicmVha3BvaW50VHlwZTogIl9zLCBicmVha3BvaW50VHlwZVN0cmlu
Zyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBhdXRvIGJyZWFrcG9pbnQgPSBJbnNw
ZWN0b3JEZWJ1Z2dlckFnZW50OjpkZWJ1Z2dlckJyZWFrcG9pbnRGcm9tUGF5bG9hZChlcnJvclN0
cmluZywgb3B0aW9uc1BheWxvYWQpOworICAgIGF1dG8gYnJlYWtwb2ludCA9IEluc3BlY3RvckRl
YnVnZ2VyQWdlbnQ6OmRlYnVnZ2VyQnJlYWtwb2ludEZyb21QYXlsb2FkKGVycm9yU3RyaW5nLCBX
VEZNb3ZlKG9wdGlvbnMpKTsKICAgICBpZiAoIWJyZWFrcG9pbnQpCi0gICAgICAgIHJldHVybjsK
KyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAotICAgIGlmIChl
dmVudE5hbWUgJiYgIWV2ZW50TmFtZS0+aXNFbXB0eSgpKSB7Ci0gICAgICAgIGlmIChicmVha3Bv
aW50VHlwZS52YWx1ZSgpID09IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpFdmVu
dEJyZWFrcG9pbnRUeXBlOjpMaXN0ZW5lcikgewotICAgICAgICAgICAgaWYgKCFtX2xpc3RlbmVy
QnJlYWtwb2ludHMuYWRkKCpldmVudE5hbWUsIGJyZWFrcG9pbnQucmVsZWFzZU5vbk51bGwoKSkp
Ci0gICAgICAgICAgICAgICAgZXJyb3JTdHJpbmcgPSAiQnJlYWtwb2ludCB3aXRoIGV2ZW50TmFt
ZSBhbHJlYWR5IGV4aXN0cyJfczsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICBpZiAoIWV2ZW50
TmFtZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgaWYgKGJyZWFrcG9pbnRUeXBlID09IFByb3RvY29s
OjpET01EZWJ1Z2dlcjo6RXZlbnRCcmVha3BvaW50VHlwZTo6TGlzdGVuZXIpIHsKKyAgICAgICAg
ICAgIGlmICghbV9saXN0ZW5lckJyZWFrcG9pbnRzLmFkZChldmVudE5hbWUsIGJyZWFrcG9pbnQu
cmVsZWFzZU5vbk51bGwoKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVk
KCJCcmVha3BvaW50IHdpdGggZXZlbnROYW1lIGFscmVhZHkgZXhpc3RzIl9zKTsKKyAgICAgICAg
ICAgIHJldHVybiB7IH07CiAgICAgICAgIH0KIAotICAgICAgICBlcnJvclN0cmluZyA9ICJVbmV4
cGVjdGVkIGV2ZW50TmFtZSJfczsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFr
ZVVuZXhwZWN0ZWQoIlVuZXhwZWN0ZWQgZXZlbnROYW1lIl9zKTsKICAgICB9CiAKLSAgICBzd2l0
Y2ggKGJyZWFrcG9pbnRUeXBlLnZhbHVlKCkpIHsKLSAgICBjYXNlIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRPTURlYnVnZ2VyOjpFdmVudEJyZWFrcG9pbnRUeXBlOjpBbmltYXRpb25GcmFtZToKLSAg
ICAgICAgc2V0QW5pbWF0aW9uRnJhbWVCcmVha3BvaW50KGVycm9yU3RyaW5nLCBXVEZNb3ZlKGJy
ZWFrcG9pbnQpKTsKLSAgICAgICAgYnJlYWs7CisgICAgc3dpdGNoIChicmVha3BvaW50VHlwZSkg
eworICAgIGNhc2UgUHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpFdmVudEJyZWFrcG9pbnRUeXBlOjpB
bmltYXRpb25GcmFtZToKKyAgICAgICAgaWYgKCFzZXRBbmltYXRpb25GcmFtZUJyZWFrcG9pbnQo
ZXJyb3JTdHJpbmcsIFdURk1vdmUoYnJlYWtwb2ludCkpKQorICAgICAgICAgICAgcmV0dXJuIG1h
a2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGNh
c2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NRGVidWdnZXI6OkV2ZW50QnJlYWtwb2ludFR5cGU6
OkludGVydmFsOgotICAgICAgICBpZiAoIW1fcGF1c2VPbkFsbEludGVydmFsc0JyZWFrcG9pbnQp
Ci0gICAgICAgICAgICBtX3BhdXNlT25BbGxJbnRlcnZhbHNCcmVha3BvaW50ID0gV1RGTW92ZShi
cmVha3BvaW50KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZXJyb3JTdHJpbmcgPSAiQnJl
YWtwb2ludCBmb3IgSW50ZXJ2YWwgYWxyZWFkeSBleGlzdHMiX3M7Ci0gICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgUHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpFdmVudEJyZWFrcG9pbnRUeXBlOjpJbnRl
cnZhbDoKKyAgICAgICAgaWYgKG1fcGF1c2VPbkFsbEludGVydmFsc0JyZWFrcG9pbnQpCisgICAg
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkJyZWFrcG9pbnQgZm9yIEludGVydmFsIGFs
cmVhZHkgZXhpc3RzIl9zKTsKKyAgICAgICAgbV9wYXVzZU9uQWxsSW50ZXJ2YWxzQnJlYWtwb2lu
dCA9IFdURk1vdmUoYnJlYWtwb2ludCk7CisgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBjYXNl
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpFdmVudEJyZWFrcG9pbnRUeXBlOjpM
aXN0ZW5lcjoKLSAgICAgICAgaWYgKCFtX3BhdXNlT25BbGxMaXN0ZW5lcnNCcmVha3BvaW50KQot
ICAgICAgICAgICAgbV9wYXVzZU9uQWxsTGlzdGVuZXJzQnJlYWtwb2ludCA9IFdURk1vdmUoYnJl
YWtwb2ludCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGVycm9yU3RyaW5nID0gIkJyZWFr
cG9pbnQgZm9yIExpc3RlbmVyIGFscmVhZHkgZXhpc3RzIl9zOwotICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFByb3RvY29sOjpET01EZWJ1Z2dlcjo6RXZlbnRCcmVha3BvaW50VHlwZTo6TGlzdGVu
ZXI6CisgICAgICAgIGlmIChtX3BhdXNlT25BbGxMaXN0ZW5lcnNCcmVha3BvaW50KQorICAgICAg
ICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJCcmVha3BvaW50IGZvciBMaXN0ZW5lciBhbHJl
YWR5IGV4aXN0cyJfcyk7CisgICAgICAgIG1fcGF1c2VPbkFsbExpc3RlbmVyc0JyZWFrcG9pbnQg
PSBXVEZNb3ZlKGJyZWFrcG9pbnQpOworICAgICAgICByZXR1cm4geyB9OwogCi0gICAgY2FzZSBJ
bnNwZWN0b3I6OlByb3RvY29sOjpET01EZWJ1Z2dlcjo6RXZlbnRCcmVha3BvaW50VHlwZTo6VGlt
ZW91dDoKLSAgICAgICAgaWYgKCFtX3BhdXNlT25BbGxUaW1lb3V0c0JyZWFrcG9pbnQpCi0gICAg
ICAgICAgICBtX3BhdXNlT25BbGxUaW1lb3V0c0JyZWFrcG9pbnQgPSBXVEZNb3ZlKGJyZWFrcG9p
bnQpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBlcnJvclN0cmluZyA9ICJCcmVha3BvaW50
IGZvciBUaW1lb3V0IGFscmVhZHkgZXhpc3RzIl9zOwotICAgICAgICBicmVhazsKKyAgICBjYXNl
IFByb3RvY29sOjpET01EZWJ1Z2dlcjo6RXZlbnRCcmVha3BvaW50VHlwZTo6VGltZW91dDoKKyAg
ICAgICAgaWYgKG1fcGF1c2VPbkFsbFRpbWVvdXRzQnJlYWtwb2ludCkKKyAgICAgICAgICAgIHJl
dHVybiBtYWtlVW5leHBlY3RlZCgiQnJlYWtwb2ludCBmb3IgVGltZW91dCBhbHJlYWR5IGV4aXN0
cyJfcyk7CisgICAgICAgIG1fcGF1c2VPbkFsbFRpbWVvdXRzQnJlYWtwb2ludCA9IFdURk1vdmUo
YnJlYWtwb2ludCk7CisgICAgICAgIHJldHVybiB7IH07CiAgICAgfQorCisgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJOb3Qgc3VwcG9ydGVkIik7
CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudDo6cmVtb3ZlRXZlbnRCcmVha3Bv
aW50KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBicmVha3BvaW50VHlw
ZVN0cmluZywgY29uc3QgU3RyaW5nKiBldmVudE5hbWUpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdP
cjx2b2lkPiBJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50OjpyZW1vdmVFdmVudEJyZWFrcG9pbnQo
UHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpFdmVudEJyZWFrcG9pbnRUeXBlIGJyZWFrcG9pbnRUeXBl
LCBjb25zdCBTdHJpbmcmIGV2ZW50TmFtZSkKIHsKLSAgICBpZiAoYnJlYWtwb2ludFR5cGVTdHJp
bmcuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gImJyZWFrcG9pbnRUeXBlIGlz
IGVtcHR5Il9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIFByb3RvY29sOjpFcnJvclN0
cmluZyBlcnJvclN0cmluZzsKIAotICAgIGF1dG8gYnJlYWtwb2ludFR5cGUgPSBJbnNwZWN0b3I6
OlByb3RvY29sOjpJbnNwZWN0b3JIZWxwZXJzOjpwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5z
cGVjdG9yOjpQcm90b2NvbDo6RE9NRGVidWdnZXI6OkV2ZW50QnJlYWtwb2ludFR5cGU+KGJyZWFr
cG9pbnRUeXBlU3RyaW5nKTsKLSAgICBpZiAoIWJyZWFrcG9pbnRUeXBlKSB7Ci0gICAgICAgIGVy
cm9yU3RyaW5nID0gbWFrZVN0cmluZygiVW5rbm93biBicmVha3BvaW50VHlwZTogIl9zLCBicmVh
a3BvaW50VHlwZVN0cmluZyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoZXZl
bnROYW1lICYmICFldmVudE5hbWUtPmlzRW1wdHkoKSkgewotICAgICAgICBpZiAoYnJlYWtwb2lu
dFR5cGUudmFsdWUoKSA9PSBJbnNwZWN0b3I6OlByb3RvY29sOjpET01EZWJ1Z2dlcjo6RXZlbnRC
cmVha3BvaW50VHlwZTo6TGlzdGVuZXIpIHsKLSAgICAgICAgICAgIGlmICghbV9saXN0ZW5lckJy
ZWFrcG9pbnRzLnJlbW92ZSgqZXZlbnROYW1lKSkKLSAgICAgICAgICAgICAgICBlcnJvclN0cmlu
ZyA9ICJCcmVha3BvaW50IGZvciBnaXZlbiBldmVudE5hbWUgbWlzc2luZyJfczsKLSAgICAgICAg
ICAgIHJldHVybjsKKyAgICBpZiAoIWV2ZW50TmFtZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgaWYg
KGJyZWFrcG9pbnRUeXBlID09IFByb3RvY29sOjpET01EZWJ1Z2dlcjo6RXZlbnRCcmVha3BvaW50
VHlwZTo6TGlzdGVuZXIpIHsKKyAgICAgICAgICAgIGlmICghbV9saXN0ZW5lckJyZWFrcG9pbnRz
LnJlbW92ZShldmVudE5hbWUpKQorICAgICAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3Rl
ZCgiQnJlYWtwb2ludCBmb3IgZ2l2ZW4gZXZlbnROYW1lIG1pc3NpbmciX3MpOworICAgICAgICAg
ICAgcmV0dXJuIHsgfTsKICAgICAgICAgfQogCi0gICAgICAgIGVycm9yU3RyaW5nID0gIlVuZXhw
ZWN0ZWQgZXZlbnROYW1lIl9zOwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtl
VW5leHBlY3RlZCgiVW5leHBlY3RlZCBldmVudE5hbWUiX3MpOwogICAgIH0KIAotICAgIHN3aXRj
aCAoYnJlYWtwb2ludFR5cGUudmFsdWUoKSkgewotICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6RE9NRGVidWdnZXI6OkV2ZW50QnJlYWtwb2ludFR5cGU6OkFuaW1hdGlvbkZyYW1lOgotICAg
ICAgICBzZXRBbmltYXRpb25GcmFtZUJyZWFrcG9pbnQoZXJyb3JTdHJpbmcsIG51bGxwdHIpOwot
ICAgICAgICBicmVhazsKKyAgICBzd2l0Y2ggKGJyZWFrcG9pbnRUeXBlKSB7CisgICAgY2FzZSBQ
cm90b2NvbDo6RE9NRGVidWdnZXI6OkV2ZW50QnJlYWtwb2ludFR5cGU6OkFuaW1hdGlvbkZyYW1l
OgorICAgICAgICBpZiAoIXNldEFuaW1hdGlvbkZyYW1lQnJlYWtwb2ludChlcnJvclN0cmluZywg
bnVsbHB0cikpCisgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcp
OworICAgICAgICByZXR1cm4geyB9OwogCi0gICAgY2FzZSBJbnNwZWN0b3I6OlByb3RvY29sOjpE
T01EZWJ1Z2dlcjo6RXZlbnRCcmVha3BvaW50VHlwZTo6SW50ZXJ2YWw6CisgICAgY2FzZSBQcm90
b2NvbDo6RE9NRGVidWdnZXI6OkV2ZW50QnJlYWtwb2ludFR5cGU6OkludGVydmFsOgogICAgICAg
ICBpZiAoIW1fcGF1c2VPbkFsbEludGVydmFsc0JyZWFrcG9pbnQpCi0gICAgICAgICAgICBlcnJv
clN0cmluZyA9ICJCcmVha3BvaW50IGZvciBJbnRlcnZhbHMgbWlzc2luZyJfczsKKyAgICAgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiQnJlYWtwb2ludCBmb3IgSW50ZXJ2YWxzIG1pc3Np
bmciX3MpOwogICAgICAgICBtX3BhdXNlT25BbGxJbnRlcnZhbHNCcmVha3BvaW50ID0gbnVsbHB0
cjsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBjYXNlIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpFdmVudEJyZWFrcG9pbnRUeXBlOjpMaXN0ZW5l
cjoKKyAgICBjYXNlIFByb3RvY29sOjpET01EZWJ1Z2dlcjo6RXZlbnRCcmVha3BvaW50VHlwZTo6
TGlzdGVuZXI6CiAgICAgICAgIGlmICghbV9wYXVzZU9uQWxsTGlzdGVuZXJzQnJlYWtwb2ludCkK
LSAgICAgICAgICAgIGVycm9yU3RyaW5nID0gIkJyZWFrcG9pbnQgZm9yIExpc3RlbmVycyBtaXNz
aW5nIl9zOworICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJCcmVha3BvaW50IGZv
ciBMaXN0ZW5lcnMgbWlzc2luZyJfcyk7CiAgICAgICAgIG1fcGF1c2VPbkFsbExpc3RlbmVyc0Jy
ZWFrcG9pbnQgPSBudWxscHRyOwotICAgICAgICBicmVhazsKKyAgICAgICAgcmV0dXJuIHsgfTsK
IAotICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NRGVidWdnZXI6OkV2ZW50QnJlYWtw
b2ludFR5cGU6OlRpbWVvdXQ6CisgICAgY2FzZSBQcm90b2NvbDo6RE9NRGVidWdnZXI6OkV2ZW50
QnJlYWtwb2ludFR5cGU6OlRpbWVvdXQ6CiAgICAgICAgIGlmICghbV9wYXVzZU9uQWxsVGltZW91
dHNCcmVha3BvaW50KQotICAgICAgICAgICAgZXJyb3JTdHJpbmcgPSAiQnJlYWtwb2ludCBmb3Ig
VGltZW91dHMgbWlzc2luZyJfczsKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgi
QnJlYWtwb2ludCBmb3IgVGltZW91dHMgbWlzc2luZyJfcyk7CiAgICAgICAgIG1fcGF1c2VPbkFs
bFRpbWVvdXRzQnJlYWtwb2ludCA9IG51bGxwdHI7Ci0gICAgICAgIGJyZWFrOworICAgICAgICBy
ZXR1cm4geyB9OwogICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVy
biBtYWtlVW5leHBlY3RlZCgiTm90IHN1cHBvcnRlZCIpOwogfQogCiB2b2lkIEluc3BlY3RvckRP
TURlYnVnZ2VyQWdlbnQ6OndpbGxIYW5kbGVFdmVudChFdmVudCYgZXZlbnQsIGNvbnN0IFJlZ2lz
dGVyZWRFdmVudExpc3RlbmVyJiByZWdpc3RlcmVkRXZlbnRMaXN0ZW5lcikKQEAgLTMyOSw0NSAr
MzE0LDUwIEBAIHZvaWQgSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudDo6ZGlkRmlyZVRpbWVyKGJv
b2wgb25lU2hvdCkKICAgICBtX2RlYnVnZ2VyQWdlbnQtPmNhbmNlbFBhdXNlRm9yU3BlY2lhbEJy
ZWFrcG9pbnQoKmJyZWFrcG9pbnQpOwogfQogCi12b2lkIEluc3BlY3RvckRPTURlYnVnZ2VyQWdl
bnQ6OnNldFVSTEJyZWFrcG9pbnQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJp
bmcmIHVybCwgY29uc3QgYm9vbCogb3B0aW9uYWxJc1JlZ2V4LCBjb25zdCBKU09OOjpPYmplY3Qq
IG9wdGlvbnNQYXlsb2FkKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9y
RE9NRGVidWdnZXJBZ2VudDo6c2V0VVJMQnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHVybCwgT3B0
aW9uYWw8Ym9vbD4mJiBpc1JlZ2V4LCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIG9wdGlvbnMpCiB7
Ci0gICAgYXV0byBicmVha3BvaW50ID0gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGVidWdnZXJC
cmVha3BvaW50RnJvbVBheWxvYWQoZXJyb3JTdHJpbmcsIG9wdGlvbnNQYXlsb2FkKTsKKyAgICBQ
cm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKKyAgICBhdXRvIGJyZWFrcG9pbnQg
PSBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkZWJ1Z2dlckJyZWFrcG9pbnRGcm9tUGF5bG9hZChl
cnJvclN0cmluZywgV1RGTW92ZShvcHRpb25zKSk7CiAgICAgaWYgKCFicmVha3BvaW50KQotICAg
ICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7
CiAKICAgICBpZiAodXJsLmlzRW1wdHkoKSkgewotICAgICAgICBpZiAoIW1fcGF1c2VPbkFsbFVS
THNCcmVha3BvaW50KQotICAgICAgICAgICAgbV9wYXVzZU9uQWxsVVJMc0JyZWFrcG9pbnQgPSBX
VEZNb3ZlKGJyZWFrcG9pbnQpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBlcnJvclN0cmlu
ZyA9ICJCcmVha3BvaW50IGZvciBhbGwgVVJMcyBhbHJlYWR5IGV4aXN0cyJfczsKLSAgICAgICAg
cmV0dXJuOworICAgICAgICBpZiAobV9wYXVzZU9uQWxsVVJMc0JyZWFrcG9pbnQpCisgICAgICAg
ICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkJyZWFrcG9pbnQgZm9yIGFsbCBVUkxzIGFscmVh
ZHkgZXhpc3RzIl9zKTsKKyAgICAgICAgbV9wYXVzZU9uQWxsVVJMc0JyZWFrcG9pbnQgPSBXVEZN
b3ZlKGJyZWFrcG9pbnQpOworICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAotICAgIGlmIChv
cHRpb25hbElzUmVnZXggJiYgKm9wdGlvbmFsSXNSZWdleCkgeworICAgIGlmIChpc1JlZ2V4ICYm
ICppc1JlZ2V4KSB7CiAgICAgICAgIGlmICghbV91cmxSZWdleEJyZWFrcG9pbnRzLmFkZCh1cmws
IGJyZWFrcG9pbnQucmVsZWFzZU5vbk51bGwoKSkpCi0gICAgICAgICAgICBlcnJvclN0cmluZyA9
ICJCcmVha3BvaW50IGZvciBnaXZlbiByZWdleCBhbHJlYWR5IGV4aXN0cyJfczsKKyAgICAgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiQnJlYWtwb2ludCBmb3IgZ2l2ZW4gcmVnZXggYWxy
ZWFkeSBleGlzdHMiX3MpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmICghbV91cmxUZXh0QnJl
YWtwb2ludHMuYWRkKHVybCwgYnJlYWtwb2ludC5yZWxlYXNlTm9uTnVsbCgpKSkKLSAgICAgICAg
ICAgIGVycm9yU3RyaW5nID0gIkJyZWFrcG9pbnQgZm9yIGdpdmVuIFVSTCBhbHJlYWR5IGV4aXN0
cyJfczsKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiQnJlYWtwb2ludCBmb3Ig
Z2l2ZW4gVVJMIGFscmVhZHkgZXhpc3RzIl9zKTsKICAgICB9CisKKyAgICByZXR1cm4geyB9Owog
fQogCi12b2lkIEluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQ6OnJlbW92ZVVSTEJyZWFrcG9pbnQo
RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgYm9vbCog
b3B0aW9uYWxJc1JlZ2V4KQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9y
RE9NRGVidWdnZXJBZ2VudDo6cmVtb3ZlVVJMQnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHVybCwg
T3B0aW9uYWw8Ym9vbD4mJiBpc1JlZ2V4KQogewogICAgIGlmICh1cmwuaXNFbXB0eSgpKSB7CiAg
ICAgICAgIGlmICghbV9wYXVzZU9uQWxsVVJMc0JyZWFrcG9pbnQpCi0gICAgICAgICAgICBlcnJv
clN0cmluZyA9ICJCcmVha3BvaW50IGZvciBhbGwgVVJMcyBtaXNzaW5nIl9zOworICAgICAgICAg
ICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJCcmVha3BvaW50IGZvciBhbGwgVVJMcyBtaXNzaW5n
Il9zKTsKICAgICAgICAgbV9wYXVzZU9uQWxsVVJMc0JyZWFrcG9pbnQgPSBudWxscHRyOwotICAg
ICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCi0gICAgaWYgKG9wdGlv
bmFsSXNSZWdleCAmJiAqb3B0aW9uYWxJc1JlZ2V4KSB7CisgICAgaWYgKGlzUmVnZXggJiYgKmlz
UmVnZXgpIHsKICAgICAgICAgaWYgKCFtX3VybFJlZ2V4QnJlYWtwb2ludHMucmVtb3ZlKHVybCkp
Ci0gICAgICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIGJyZWFrcG9pbnQgZm9yIGdpdmVu
IHJlZ2V4Il9zOworICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJNaXNzaW5nIGJy
ZWFrcG9pbnQgZm9yIGdpdmVuIHJlZ2V4Il9zKTsKICAgICB9IGVsc2UgewogICAgICAgICBpZiAo
IW1fdXJsVGV4dEJyZWFrcG9pbnRzLnJlbW92ZSh1cmwpKQotICAgICAgICAgICAgZXJyb3JTdHJp
bmcgPSAiTWlzc2luZyBicmVha3BvaW50IGZvciBnaXZlbiBVUkwiX3M7CisgICAgICAgICAgICBy
ZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk1pc3NpbmcgYnJlYWtwb2ludCBmb3IgZ2l2ZW4gVVJMIl9z
KTsKICAgICB9CisKKyAgICByZXR1cm4geyB9OwogfQogCiB2b2lkIEluc3BlY3RvckRPTURlYnVn
Z2VyQWdlbnQ6OmJyZWFrT25VUkxJZk5lZWRlZChjb25zdCBTdHJpbmcmIHVybCwgVVJMQnJlYWtw
b2ludFNvdXJjZSBzb3VyY2UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
YWdlbnRzL0luc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudC5oCmluZGV4IDRlYzBmMDhjOWI1
YTFjMjdkZDQzZWE4NTQwNGVjZTYyYzkzNmYxZmEuLjg5NjA5ZWNmYzBkODc5Njc0MWQ0NTVhMDNl
N2RhYzA5MWU4ZGNjOGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2Vu
dHMvSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudC5oCkBAIC01MCw4ICs1MCw2IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEV2ZW50OwogY2xhc3MgUmVnaXN0ZXJlZEV2ZW50
TGlzdGVuZXI7CiAKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCiBjbGFzcyBJbnNwZWN0
b3JET01EZWJ1Z2dlckFnZW50IDogcHVibGljIEluc3BlY3RvckFnZW50QmFzZSwgcHVibGljIElu
c3BlY3Rvcjo6RE9NRGVidWdnZXJCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIsIHB1YmxpYyBJbnNw
ZWN0b3I6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6Okxpc3RlbmVyIHsKICAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50KTsKICAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKQEAgLTY1LDEwICs2MywxMCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29s
IGVuYWJsZWQoKSBjb25zdDsKIAogICAgIC8vIERPTURlYnVnZ2VyQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyCi0gICAgdm9pZCBzZXRVUkxCcmVha3BvaW50KEVycm9yU3RyaW5nJiwgY29uc3QgU3Ry
aW5nJiB1cmwsIGNvbnN0IGJvb2wqIGlzUmVnZXgsIGNvbnN0IEpTT046Ok9iamVjdCogb3B0aW9u
cykgZmluYWw7Ci0gICAgdm9pZCByZW1vdmVVUkxCcmVha3BvaW50KEVycm9yU3RyaW5nJiwgY29u
c3QgU3RyaW5nJiB1cmwsIGNvbnN0IGJvb2wqIGlzUmVnZXgpIGZpbmFsOwotICAgIHZvaWQgc2V0
RXZlbnRCcmVha3BvaW50KEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBicmVha3BvaW50VHlw
ZSwgY29uc3QgU3RyaW5nKiBldmVudE5hbWUsIGNvbnN0IEpTT046Ok9iamVjdCogb3B0aW9ucykg
ZmluYWw7Ci0gICAgdm9pZCByZW1vdmVFdmVudEJyZWFrcG9pbnQoRXJyb3JTdHJpbmcmLCBjb25z
dCBTdHJpbmcmIGJyZWFrcG9pbnRUeXBlLCBjb25zdCBTdHJpbmcqIGV2ZW50TmFtZSkgZmluYWw7
CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzZXRVUkxCcmVh
a3BvaW50KGNvbnN0IFN0cmluZyYgdXJsLCBPcHRpb25hbDxib29sPiYmIGlzUmVnZXgsIFJlZlB0
cjxKU09OOjpPYmplY3Q+JiYgb3B0aW9ucykgZmluYWw7CisgICAgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6RXJyb3JTdHJpbmdPcjx2b2lkPiByZW1vdmVVUkxCcmVha3BvaW50KGNvbnN0IFN0cmluZyYg
dXJsLCBPcHRpb25hbDxib29sPiYmIGlzUmVnZXgpIGZpbmFsOworICAgIEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc2V0RXZlbnRCcmVha3BvaW50KEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpFdmVudEJyZWFrcG9pbnRUeXBlLCBjb25zdCBTdHJpbmcm
IGV2ZW50TmFtZSwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBvcHRpb25zKSBmaW5hbDsKKyAgICBJ
bnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHJlbW92ZUV2ZW50QnJlYWtw
b2ludChJbnNwZWN0b3I6OlByb3RvY29sOjpET01EZWJ1Z2dlcjo6RXZlbnRCcmVha3BvaW50VHlw
ZSwgY29uc3QgU3RyaW5nJiBldmVudE5hbWUpIGZpbmFsOwogCiAgICAgLy8gSW5zcGVjdG9yRGVi
dWdnZXJBZ2VudDo6TGlzdGVuZXIKICAgICB2b2lkIGRlYnVnZ2VyV2FzRW5hYmxlZCgpIG92ZXJy
aWRlOwpAQCAtODgsNyArODYsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIGVuYWJs
ZSgpOwogICAgIHZpcnR1YWwgdm9pZCBkaXNhYmxlKCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgc2V0
QW5pbWF0aW9uRnJhbWVCcmVha3BvaW50KEVycm9yU3RyaW5nJiwgUmVmUHRyPEpTQzo6QnJlYWtw
b2ludD4mJikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBzZXRBbmltYXRpb25GcmFtZUJyZWFrcG9p
bnQoSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBSZWZQdHI8SlNDOjpCcmVha3Bv
aW50PiYmKSA9IDA7CiAKICAgICBJbnNwZWN0b3I6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQqIG1f
ZGVidWdnZXJBZ2VudCB7IG51bGxwdHIgfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01TdG9yYWdlQWdlbnQuY3BwIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01TdG9yYWdlQWdlbnQuY3BwCmluZGV4
IGU1OTFlOTE2OWRmMzA0NTQ1NjIwYjU0MDMyYjYyZmEyYmFkZWNiNmUuLjAzYTdmZDA4ZDIwNTdj
MjJjYWNkY2Y4NTA1OGYxZTRkZjA0ZGQ3ZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTVN0b3JhZ2VBZ2VudC5jcHAKQEAg
LTcwLDQxICs3MCwzOSBAQCB2b2lkIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6ZGlkQ3JlYXRl
RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRSbwogCiB2b2lkIEluc3BlY3Rv
ckRPTVN0b3JhZ2VBZ2VudDo6d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9y
OjpEaXNjb25uZWN0UmVhc29uKQogewotICAgIEVycm9yU3RyaW5nIGlnbm9yZWQ7Ci0gICAgZGlz
YWJsZShpZ25vcmVkKTsKKyAgICBkaXNhYmxlKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NU3Rv
cmFnZUFnZW50OjplbmFibGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nKQorUHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjplbmFibGUoKQogewot
ICAgIGlmIChtX2luc3RydW1lbnRpbmdBZ2VudHMuZW5hYmxlZERPTVN0b3JhZ2VBZ2VudCgpID09
IHRoaXMpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiRE9NU3RvcmFnZSBkb21haW4gYWxyZWFk
eSBlbmFibGVkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmIChtX2luc3RydW1l
bnRpbmdBZ2VudHMuZW5hYmxlZERPTVN0b3JhZ2VBZ2VudCgpID09IHRoaXMpCisgICAgICAgIHJl
dHVybiBtYWtlVW5leHBlY3RlZCgiRE9NU3RvcmFnZSBkb21haW4gYWxyZWFkeSBlbmFibGVkIl9z
KTsKIAogICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy5zZXRFbmFibGVkRE9NU3RvcmFnZUFnZW50
KHRoaXMpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01TdG9yYWdl
QWdlbnQ6OmRpc2FibGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nKQorUHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjpkaXNhYmxlKCkKIHsKLSAg
ICBpZiAobV9pbnN0cnVtZW50aW5nQWdlbnRzLmVuYWJsZWRET01TdG9yYWdlQWdlbnQoKSAhPSB0
aGlzKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIkRPTVN0b3JhZ2UgZG9tYWluIGFscmVhZHkg
ZGlzYWJsZWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKG1faW5zdHJ1bWVu
dGluZ0FnZW50cy5lbmFibGVkRE9NU3RvcmFnZUFnZW50KCkgIT0gdGhpcykKKyAgICAgICAgcmV0
dXJuIG1ha2VVbmV4cGVjdGVkKCJET01TdG9yYWdlIGRvbWFpbiBhbHJlYWR5IGRpc2FibGVkIl9z
KTsKIAogICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy5zZXRFbmFibGVkRE9NU3RvcmFnZUFnZW50
KG51bGxwdHIpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01TdG9y
YWdlQWdlbnQ6OmdldERPTVN0b3JhZ2VJdGVtcyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNv
bnN0IEpTT046Ok9iamVjdCYgc3RvcmFnZUlkLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxKU09OOjpB
cnJheU9mPFN0cmluZz4+PiYgaXRlbXMpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SlNP
Tjo6QXJyYXlPZjxQcm90b2NvbDo6RE9NU3RvcmFnZTo6SXRlbT4+PiBJbnNwZWN0b3JET01TdG9y
YWdlQWdlbnQ6OmdldERPTVN0b3JhZ2VJdGVtcyhSZWY8SlNPTjo6T2JqZWN0PiYmIHN0b3JhZ2VJ
ZCkKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBGcmFt
ZSogZnJhbWU7Ci0gICAgUmVmUHRyPFN0b3JhZ2VBcmVhPiBzdG9yYWdlQXJlYSA9IGZpbmRTdG9y
YWdlQXJlYShlcnJvclN0cmluZywgc3RvcmFnZUlkLCBmcmFtZSk7Ci0gICAgaWYgKCFzdG9yYWdl
QXJlYSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIHN0b3JhZ2UgZm9yIGdpdmVu
IHN0b3JhZ2VJZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBSZWZQdHI8U3RvcmFn
ZUFyZWE+IHN0b3JhZ2VBcmVhID0gZmluZFN0b3JhZ2VBcmVhKGVycm9yU3RyaW5nLCBXVEZNb3Zl
KHN0b3JhZ2VJZCksIGZyYW1lKTsKKyAgICBpZiAoIXN0b3JhZ2VBcmVhKQorICAgICAgICByZXR1
cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCiAgICAgYXV0byBzdG9yYWdlSXRlbXMg
PSBKU09OOjpBcnJheU9mPEpTT046OkFycmF5T2Y8U3RyaW5nPj46OmNyZWF0ZSgpOwotCiAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0b3JhZ2VBcmVhLT5sZW5ndGgoKTsgKytpKSB7CiAg
ICAgICAgIFN0cmluZyBrZXkgPSBzdG9yYWdlQXJlYS0+a2V5KGkpOwogICAgICAgICBTdHJpbmcg
dmFsdWUgPSBzdG9yYWdlQXJlYS0+aXRlbShrZXkpOwpAQCAtMTE0LDQ3ICsxMTIsNTIgQEAgdm9p
ZCBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OmdldERPTVN0b3JhZ2VJdGVtcyhFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcsIGNvbnMKICAgICAgICAgZW50cnktPmFkZEl0ZW0odmFsdWUpOwogICAg
ICAgICBzdG9yYWdlSXRlbXMtPmFkZEl0ZW0oV1RGTW92ZShlbnRyeSkpOwogICAgIH0KLQotICAg
IGl0ZW1zID0gV1RGTW92ZShzdG9yYWdlSXRlbXMpOworICAgIHJldHVybiBXVEZNb3ZlKHN0b3Jh
Z2VJdGVtcyk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjpzZXRET01TdG9y
YWdlSXRlbShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IEpTT046Ok9iamVjdCYgc3Rv
cmFnZUlkLCBjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKK1Byb3RvY29s
OjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6c2V0RE9NU3Rv
cmFnZUl0ZW0oUmVmPEpTT046Ok9iamVjdD4mJiBzdG9yYWdlSWQsIGNvbnN0IFN0cmluZyYga2V5
LCBjb25zdCBTdHJpbmcmIHZhbHVlKQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJv
clN0cmluZzsKKwogICAgIEZyYW1lKiBmcmFtZTsKLSAgICBSZWZQdHI8U3RvcmFnZUFyZWE+IHN0
b3JhZ2VBcmVhID0gZmluZFN0b3JhZ2VBcmVhKGVycm9yU3RyaW5nLCBzdG9yYWdlSWQsIGZyYW1l
KTsKLSAgICBpZiAoIXN0b3JhZ2VBcmVhKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIk1pc3Np
bmcgc3RvcmFnZSBmb3IgZ2l2ZW4gc3RvcmFnZUlkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAg
fQorICAgIFJlZlB0cjxTdG9yYWdlQXJlYT4gc3RvcmFnZUFyZWEgPSBmaW5kU3RvcmFnZUFyZWEo
ZXJyb3JTdHJpbmcsIFdURk1vdmUoc3RvcmFnZUlkKSwgZnJhbWUpOworICAgIGlmICghc3RvcmFn
ZUFyZWEpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAg
ICBib29sIHF1b3RhRXhjZXB0aW9uID0gZmFsc2U7CiAgICAgc3RvcmFnZUFyZWEtPnNldEl0ZW0o
ZnJhbWUsIGtleSwgdmFsdWUsIHF1b3RhRXhjZXB0aW9uKTsKICAgICBpZiAocXVvdGFFeGNlcHRp
b24pCi0gICAgICAgIGVycm9yU3RyaW5nID0gRE9NRXhjZXB0aW9uOjpuYW1lKFF1b3RhRXhjZWVk
ZWRFcnJvcik7CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChET01FeGNlcHRpb246Om5h
bWUoUXVvdGFFeGNlZWRlZEVycm9yKSk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIElu
c3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6cmVtb3ZlRE9NU3RvcmFnZUl0ZW0oRXJyb3JTdHJpbmcm
IGVycm9yU3RyaW5nLCBjb25zdCBKU09OOjpPYmplY3QmIHN0b3JhZ2VJZCwgY29uc3QgU3RyaW5n
JiBrZXkpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JET01TdG9yYWdl
QWdlbnQ6OnJlbW92ZURPTVN0b3JhZ2VJdGVtKFJlZjxKU09OOjpPYmplY3Q+JiYgc3RvcmFnZUlk
LCBjb25zdCBTdHJpbmcmIGtleSkKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JT
dHJpbmc7CisKICAgICBGcmFtZSogZnJhbWU7Ci0gICAgUmVmUHRyPFN0b3JhZ2VBcmVhPiBzdG9y
YWdlQXJlYSA9IGZpbmRTdG9yYWdlQXJlYShlcnJvclN0cmluZywgc3RvcmFnZUlkLCBmcmFtZSk7
Ci0gICAgaWYgKCFzdG9yYWdlQXJlYSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5n
IHN0b3JhZ2UgZm9yIGdpdmVuIHN0b3JhZ2VJZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
KyAgICBSZWZQdHI8U3RvcmFnZUFyZWE+IHN0b3JhZ2VBcmVhID0gZmluZFN0b3JhZ2VBcmVhKGVy
cm9yU3RyaW5nLCBXVEZNb3ZlKHN0b3JhZ2VJZCksIGZyYW1lKTsKKyAgICBpZiAoIXN0b3JhZ2VB
cmVhKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCiAgICAg
c3RvcmFnZUFyZWEtPnJlbW92ZUl0ZW0oZnJhbWUsIGtleSk7CisKKyAgICByZXR1cm4geyB9Owog
fQogCi12b2lkIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6Y2xlYXJET01TdG9yYWdlSXRlbXMo
RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBKU09OOjpPYmplY3QmIHN0b3JhZ2VJZCkK
K1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6
Y2xlYXJET01TdG9yYWdlSXRlbXMoUmVmPEpTT046Ok9iamVjdD4mJiBzdG9yYWdlSWQpCiB7Cisg
ICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAgICAgRnJhbWUqIGZyYW1l
OwotICAgIGF1dG8gc3RvcmFnZUFyZWEgPSBmaW5kU3RvcmFnZUFyZWEoZXJyb3JTdHJpbmcsIHN0
b3JhZ2VJZCwgZnJhbWUpOwotICAgIGlmICghc3RvcmFnZUFyZWEpIHsKLSAgICAgICAgZXJyb3JT
dHJpbmcgPSAiTWlzc2luZyBzdG9yYWdlIGZvciBnaXZlbiBzdG9yYWdlSWQiX3M7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9CisgICAgYXV0byBzdG9yYWdlQXJlYSA9IGZpbmRTdG9yYWdlQXJlYShl
cnJvclN0cmluZywgV1RGTW92ZShzdG9yYWdlSWQpLCBmcmFtZSk7CisgICAgaWYgKCFzdG9yYWdl
QXJlYSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAg
IHN0b3JhZ2VBcmVhLT5jbGVhcihmcmFtZSk7CisKKyAgICByZXR1cm4geyB9OwogfQogCiBTdHJp
bmcgSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjpzdG9yYWdlSWQoU3RvcmFnZSYgc3RvcmFnZSkK
QEAgLTE2OCw5ICsxNzEsOSBAQCBTdHJpbmcgSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjpzdG9y
YWdlSWQoU3RvcmFnZSYgc3RvcmFnZSkKICAgICByZXR1cm4gSW5zcGVjdG9yRE9NU3RvcmFnZUFn
ZW50OjpzdG9yYWdlSWQoc2VjdXJpdHlPcmlnaW4ucHRyKCksIGlzTG9jYWxTdG9yYWdlKS0+dG9K
U09OU3RyaW5nKCk7CiB9CiAKLVJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpET01TdG9yYWdl
OjpTdG9yYWdlSWQ+IEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6c3RvcmFnZUlkKFNlY3VyaXR5
T3JpZ2luKiBzZWN1cml0eU9yaWdpbiwgYm9vbCBpc0xvY2FsU3RvcmFnZSkKK1JlZjxQcm90b2Nv
bDo6RE9NU3RvcmFnZTo6U3RvcmFnZUlkPiBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OnN0b3Jh
Z2VJZChTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlPcmlnaW4sIGJvb2wgaXNMb2NhbFN0b3JhZ2Up
CiB7Ci0gICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTVN0b3JhZ2U6OlN0b3JhZ2VJ
ZDo6Y3JlYXRlKCkKKyAgICByZXR1cm4gUHJvdG9jb2w6OkRPTVN0b3JhZ2U6OlN0b3JhZ2VJZDo6
Y3JlYXRlKCkKICAgICAgICAgLnNldFNlY3VyaXR5T3JpZ2luKHNlY3VyaXR5T3JpZ2luLT50b1Jh
d1N0cmluZygpKQogICAgICAgICAuc2V0SXNMb2NhbFN0b3JhZ2UoaXNMb2NhbFN0b3JhZ2UpCiAg
ICAgICAgIC5yZWxlYXNlKCk7CkBAIC0xNzgsMjggKzE4MSwyOCBAQCBSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6RE9NU3RvcmFnZTo6U3RvcmFnZUlkPiBJbnNwZWN0b3JET01TdG9yYWdlQWdl
bnQ6OnN0bwogCiB2b2lkIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6ZGlkRGlzcGF0Y2hET01T
dG9yYWdlRXZlbnQoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgb2xkVmFsdWUsIGNv
bnN0IFN0cmluZyYgbmV3VmFsdWUsIFN0b3JhZ2VUeXBlIHN0b3JhZ2VUeXBlLCBTZWN1cml0eU9y
aWdpbiogc2VjdXJpdHlPcmlnaW4pCiB7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRPTVN0b3JhZ2U6OlN0b3JhZ2VJZD4gaWQgPSBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OnN0
b3JhZ2VJZChzZWN1cml0eU9yaWdpbiwgc3RvcmFnZVR5cGUgPT0gU3RvcmFnZVR5cGU6OkxvY2Fs
KTsKKyAgICBhdXRvIGlkID0gSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjpzdG9yYWdlSWQoc2Vj
dXJpdHlPcmlnaW4sIHN0b3JhZ2VUeXBlID09IFN0b3JhZ2VUeXBlOjpMb2NhbCk7CiAKICAgICBp
ZiAoa2V5LmlzTnVsbCgpKQotICAgICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+ZG9tU3RvcmFn
ZUl0ZW1zQ2xlYXJlZChpZCk7CisgICAgICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5kb21TdG9y
YWdlSXRlbXNDbGVhcmVkKFdURk1vdmUoaWQpKTsKICAgICBlbHNlIGlmIChuZXdWYWx1ZS5pc051
bGwoKSkKLSAgICAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPmRvbVN0b3JhZ2VJdGVtUmVtb3Zl
ZChpZCwga2V5KTsKKyAgICAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPmRvbVN0b3JhZ2VJdGVt
UmVtb3ZlZChXVEZNb3ZlKGlkKSwga2V5KTsKICAgICBlbHNlIGlmIChvbGRWYWx1ZS5pc051bGwo
KSkKLSAgICAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPmRvbVN0b3JhZ2VJdGVtQWRkZWQoaWQs
IGtleSwgbmV3VmFsdWUpOworICAgICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+ZG9tU3RvcmFn
ZUl0ZW1BZGRlZChXVEZNb3ZlKGlkKSwga2V5LCBuZXdWYWx1ZSk7CiAgICAgZWxzZQotICAgICAg
ICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+ZG9tU3RvcmFnZUl0ZW1VcGRhdGVkKGlkLCBrZXksIG9s
ZFZhbHVlLCBuZXdWYWx1ZSk7CisgICAgICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5kb21TdG9y
YWdlSXRlbVVwZGF0ZWQoV1RGTW92ZShpZCksIGtleSwgb2xkVmFsdWUsIG5ld1ZhbHVlKTsKIH0K
IAotUmVmUHRyPFN0b3JhZ2VBcmVhPiBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OmZpbmRTdG9y
YWdlQXJlYShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IEpTT046Ok9iamVjdCYgc3Rv
cmFnZUlkLCBGcmFtZSomIHRhcmdldEZyYW1lKQorUmVmUHRyPFN0b3JhZ2VBcmVhPiBJbnNwZWN0
b3JET01TdG9yYWdlQWdlbnQ6OmZpbmRTdG9yYWdlQXJlYShQcm90b2NvbDo6RXJyb3JTdHJpbmcm
IGVycm9yU3RyaW5nLCBSZWY8SlNPTjo6T2JqZWN0PiYmIHN0b3JhZ2VJZCwgRnJhbWUqJiB0YXJn
ZXRGcmFtZSkKIHsKLSAgICBTdHJpbmcgc2VjdXJpdHlPcmlnaW47Ci0gICAgaWYgKCFzdG9yYWdl
SWQuZ2V0U3RyaW5nKCJzZWN1cml0eU9yaWdpbiJfcywgc2VjdXJpdHlPcmlnaW4pKSB7CisgICAg
YXV0byBzZWN1cml0eU9yaWdpbiA9IHN0b3JhZ2VJZC0+Z2V0U3RyaW5nKFByb3RvY29sOjpET01T
dG9yYWdlOjpTdG9yYWdlSWQ6OnNlY3VyaXR5T3JpZ2luS2V5KTsKKyAgICBpZiAoIXNlY3VyaXR5
T3JpZ2luKSB7CiAgICAgICAgIGVycm9yU3RyaW5nID0gIk1pc3Npbmcgc2VjdXJpdHlPcmlnaW4g
aW4gZ2l2ZW4gc3RvcmFnZUlkIjsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCi0g
ICAgYm9vbCBpc0xvY2FsU3RvcmFnZSA9IGZhbHNlOwotICAgIGlmICghc3RvcmFnZUlkLmdldEJv
b2xlYW4oImlzTG9jYWxTdG9yYWdlIl9zLCBpc0xvY2FsU3RvcmFnZSkpIHsKKyAgICBhdXRvIGlz
TG9jYWxTdG9yYWdlID0gc3RvcmFnZUlkLT5nZXRCb29sZWFuKFByb3RvY29sOjpET01TdG9yYWdl
OjpTdG9yYWdlSWQ6OmlzTG9jYWxTdG9yYWdlS2V5KTsKKyAgICBpZiAoIWlzTG9jYWxTdG9yYWdl
KSB7CiAgICAgICAgIGVycm9yU3RyaW5nID0gIk1pc3NpbmcgaXNMb2NhbFN0b3JhZ2UgaW4gZ2l2
ZW4gc3RvcmFnZUlkIjsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQpAQCAtMjEwLDcg
KzIxMyw3IEBAIFJlZlB0cjxTdG9yYWdlQXJlYT4gSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50Ojpm
aW5kU3RvcmFnZUFyZWEoRXJyb3JTdHJpbmcmIGVycm9yCiAgICAgICAgIHJldHVybiBudWxscHRy
OwogICAgIH0KIAotICAgIGlmICghaXNMb2NhbFN0b3JhZ2UpCisgICAgaWYgKCEqaXNMb2NhbFN0
b3JhZ2UpCiAgICAgICAgIHJldHVybiBtX2luc3BlY3RlZFBhZ2Uuc2Vzc2lvblN0b3JhZ2UoKS0+
c3RvcmFnZUFyZWEodGFyZ2V0RnJhbWUtPmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCkuZGF0
YSgpKTsKICAgICByZXR1cm4gbV9pbnNwZWN0ZWRQYWdlLnN0b3JhZ2VOYW1lc3BhY2VQcm92aWRl
cigpLmxvY2FsU3RvcmFnZUFyZWEoKnRhcmdldEZyYW1lLT5kb2N1bWVudCgpKTsKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NU3RvcmFn
ZUFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTVN0
b3JhZ2VBZ2VudC5oCmluZGV4IGRkYmI1ZDUzNDdmM2JlYWJlM2NmYWIyMDFkNjgzOGM4OTZkMjFl
MzkuLjMzODZjYjg3OWYxMTc4YzFiOTYzNTc3NWM5YTBlODY0ZjViOTRjNTIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01TdG9y
YWdlQWdlbnQuaApAQCAtNDUsMzYgKzQ1LDM0IEBAIGNsYXNzIFBhZ2U7CiBjbGFzcyBTZWN1cml0
eU9yaWdpbjsKIGNsYXNzIFN0b3JhZ2U7CiAKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwot
CiBjbGFzcyBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9y
QWdlbnRCYXNlLCBwdWJsaWMgSW5zcGVjdG9yOjpET01TdG9yYWdlQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbnNwZWN0b3JET01TdG9yYWdlQWdl
bnQpOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIEluc3BlY3Rv
ckRPTVN0b3JhZ2VBZ2VudChQYWdlQWdlbnRDb250ZXh0Jik7Ci0gICAgfkluc3BlY3RvckRPTVN0
b3JhZ2VBZ2VudCgpIG92ZXJyaWRlOworICAgIH5JbnNwZWN0b3JET01TdG9yYWdlQWdlbnQoKTsK
IAogICAgIC8vIEluc3BlY3RvckFnZW50QmFzZQotICAgIHZvaWQgZGlkQ3JlYXRlRnJvbnRlbmRB
bmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRSb3V0ZXIqLCBJbnNwZWN0b3I6OkJhY2tlbmRE
aXNwYXRjaGVyKikgb3ZlcnJpZGU7Ci0gICAgdm9pZCB3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFj
a2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24pIG92ZXJyaWRlOworICAgIHZvaWQgZGlk
Q3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRSb3V0ZXIqLCBJbnNw
ZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyKik7CisgICAgdm9pZCB3aWxsRGVzdHJveUZyb250ZW5k
QW5kQmFja2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24pOwogCiAgICAgLy8gRE9NU3Rv
cmFnZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcgotICAgIHZvaWQgZW5hYmxlKEVycm9yU3RyaW5n
Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkaXNhYmxlKEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCBnZXRET01TdG9yYWdlSXRlbXMoRXJyb3JTdHJpbmcmLCBjb25zdCBKU09OOjpPYmpl
Y3QmIHN0b3JhZ2VJZCwgUmVmUHRyPEpTT046OkFycmF5T2Y8SlNPTjo6QXJyYXlPZjxTdHJpbmc+
Pj4mIGl0ZW1zKSBvdmVycmlkZTsKLSAgICB2b2lkIHNldERPTVN0b3JhZ2VJdGVtKEVycm9yU3Ry
aW5nJiwgY29uc3QgSlNPTjo6T2JqZWN0JiBzdG9yYWdlSWQsIGNvbnN0IFN0cmluZyYga2V5LCBj
b25zdCBTdHJpbmcmIHZhbHVlKSBvdmVycmlkZTsKLSAgICB2b2lkIHJlbW92ZURPTVN0b3JhZ2VJ
dGVtKEVycm9yU3RyaW5nJiwgY29uc3QgSlNPTjo6T2JqZWN0JiBzdG9yYWdlSWQsIGNvbnN0IFN0
cmluZyYga2V5KSBvdmVycmlkZTsKLSAgICB2b2lkIGNsZWFyRE9NU3RvcmFnZUl0ZW1zKEVycm9y
U3RyaW5nJiwgY29uc3QgSlNPTjo6T2JqZWN0JiBzdG9yYWdlSWQpIG92ZXJyaWRlOworICAgIElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZW5hYmxlKCk7CisgICAgSW5z
cGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBkaXNhYmxlKCk7CisgICAgSW5z
cGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SlNPTjo6QXJyYXlPZjxJbnNwZWN0
b3I6OlByb3RvY29sOjpET01TdG9yYWdlOjpJdGVtPj4+IGdldERPTVN0b3JhZ2VJdGVtcyhSZWY8
SlNPTjo6T2JqZWN0PiYmIHN0b3JhZ2VJZCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJy
b3JTdHJpbmdPcjx2b2lkPiBzZXRET01TdG9yYWdlSXRlbShSZWY8SlNPTjo6T2JqZWN0PiYmIHN0
b3JhZ2VJZCwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUpOworICAgIElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gcmVtb3ZlRE9NU3RvcmFnZUl0
ZW0oUmVmPEpTT046Ok9iamVjdD4mJiBzdG9yYWdlSWQsIGNvbnN0IFN0cmluZyYga2V5KTsKKyAg
ICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGNsZWFyRE9NU3RvcmFn
ZUl0ZW1zKFJlZjxKU09OOjpPYmplY3Q+JiYgc3RvcmFnZUlkKTsKIAogICAgIC8vIEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbgogICAgIHZvaWQgZGlkRGlzcGF0Y2hET01TdG9yYWdlRXZlbnQoY29u
c3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgb2xkVmFsdWUsIGNvbnN0IFN0cmluZyYgbmV3
VmFsdWUsIFN0b3JhZ2VUeXBlLCBTZWN1cml0eU9yaWdpbiopOwogCiAgICAgLy8gQ29tbWFuZExp
bmVBUEkKICAgICBzdGF0aWMgU3RyaW5nIHN0b3JhZ2VJZChTdG9yYWdlJik7Ci0gICAgc3RhdGlj
IFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpET01TdG9yYWdlOjpTdG9yYWdlSWQ+IHN0b3Jh
Z2VJZChTZWN1cml0eU9yaWdpbiosIGJvb2wgaXNMb2NhbFN0b3JhZ2UpOworICAgIHN0YXRpYyBS
ZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NU3RvcmFnZTo6U3RvcmFnZUlkPiBzdG9yYWdlSWQo
U2VjdXJpdHlPcmlnaW4qLCBib29sIGlzTG9jYWxTdG9yYWdlKTsKIAogcHJpdmF0ZToKLSAgICBS
ZWZQdHI8U3RvcmFnZUFyZWE+IGZpbmRTdG9yYWdlQXJlYShFcnJvclN0cmluZyYsIGNvbnN0IEpT
T046Ok9iamVjdCYsIEZyYW1lKiYpOworICAgIFJlZlB0cjxTdG9yYWdlQXJlYT4gZmluZFN0b3Jh
Z2VBcmVhKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nJiwgUmVmPEpTT046Ok9iamVj
dD4mJiBzdG9yYWdlSWQsIEZyYW1lKiYpOwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPEluc3BlY3Rv
cjo6RE9NU3RvcmFnZUZyb250ZW5kRGlzcGF0Y2hlcj4gbV9mcm9udGVuZERpc3BhdGNoZXI7CiAg
ICAgUmVmUHRyPEluc3BlY3Rvcjo6RE9NU3RvcmFnZUJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tl
bmREaXNwYXRjaGVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50
cy9JbnNwZWN0b3JEYXRhYmFzZUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9h
Z2VudHMvSW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5jcHAKaW5kZXggNGI5YTU1ZGU1NTdiZTk0Njcx
NmY1ZTAyMTExNDQzNzExODJkNmQ1Mi4uMjljMTE0ZjI2NzY4M2QyNTA2NTI3YWQ3Y2Y5ZDU3ZmJi
MWU5MmYzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNw
ZWN0b3JEYXRhYmFzZUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdl
bnRzL0luc3BlY3RvckRhdGFiYXNlQWdlbnQuY3BwCkBAIC01OSw3ICs1OSw3IEBAIG5hbWVzcGFj
ZSB7CiAKIHZvaWQgcmVwb3J0VHJhbnNhY3Rpb25GYWlsZWQoRXhlY3V0ZVNRTENhbGxiYWNrJiBy
ZXF1ZXN0Q2FsbGJhY2ssIFNRTEVycm9yJiBlcnJvcikKIHsKLSAgICBhdXRvIGVycm9yT2JqZWN0
ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yOjpjcmVhdGUoKQorICAgIGF1
dG8gZXJyb3JPYmplY3QgPSBQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yOjpjcmVhdGUoKQogICAg
ICAgICAuc2V0TWVzc2FnZShlcnJvci5tZXNzYWdlSXNvbGF0ZWRDb3B5KCkpCiAgICAgICAgIC5z
ZXRDb2RlKGVycm9yLmNvZGUoKSkKICAgICAgICAgLnJlbGVhc2UoKTsKQEAgLTIzMCw1MSArMjMw
LDQ4IEBAIHZvaWQgSW5zcGVjdG9yRGF0YWJhc2VBZ2VudDo6ZGlkQ3JlYXRlRnJvbnRlbmRBbmRC
YWNrZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRSb3V0CiAKIHZvaWQgSW5zcGVjdG9yRGF0YWJhc2VB
Z2VudDo6d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0
UmVhc29uKQogewotICAgIEVycm9yU3RyaW5nIGlnbm9yZWQ7Ci0gICAgZGlzYWJsZShpZ25vcmVk
KTsKKyAgICBkaXNhYmxlKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGF0YWJhc2VBZ2VudDo6ZW5h
YmxlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZv
aWQ+IEluc3BlY3RvckRhdGFiYXNlQWdlbnQ6OmVuYWJsZSgpCiB7Ci0gICAgaWYgKG1faW5zdHJ1
bWVudGluZ0FnZW50cy5lbmFibGVkRGF0YWJhc2VBZ2VudCgpID09IHRoaXMpIHsKLSAgICAgICAg
ZXJyb3JTdHJpbmcgPSAiRGF0YWJhc2UgZG9tYWluIGFscmVhZHkgZW5hYmxlZCJfczsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAobV9pbnN0cnVtZW50aW5nQWdlbnRzLmVuYWJsZWRE
YXRhYmFzZUFnZW50KCkgPT0gdGhpcykKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJE
YXRhYmFzZSBkb21haW4gYWxyZWFkeSBlbmFibGVkIl9zKTsKIAogICAgIG1faW5zdHJ1bWVudGlu
Z0FnZW50cy5zZXRFbmFibGVkRGF0YWJhc2VBZ2VudCh0aGlzKTsKIAogICAgIGZvciAoYXV0byYg
ZGF0YWJhc2UgOiBEYXRhYmFzZVRyYWNrZXI6OnNpbmdsZXRvbigpLm9wZW5EYXRhYmFzZXMoKSkK
ICAgICAgICAgZGlkT3BlbkRhdGFiYXNlKGRhdGFiYXNlLmdldCgpKTsKKworICAgIHJldHVybiB7
IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGF0YWJhc2VBZ2VudDo6ZGlzYWJsZShFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JE
YXRhYmFzZUFnZW50OjpkaXNhYmxlKCkKIHsKLSAgICBpZiAobV9pbnN0cnVtZW50aW5nQWdlbnRz
LmVuYWJsZWREYXRhYmFzZUFnZW50KCkgIT0gdGhpcykgewotICAgICAgICBlcnJvclN0cmluZyA9
ICJEYXRhYmFzZSBkb21haW4gYWxyZWFkeSBkaXNhYmxlZCJfczsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KKyAgICBpZiAobV9pbnN0cnVtZW50aW5nQWdlbnRzLmVuYWJsZWREYXRhYmFzZUFnZW50
KCkgIT0gdGhpcykKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJEYXRhYmFzZSBkb21h
aW4gYWxyZWFkeSBkaXNhYmxlZCJfcyk7CiAKICAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMuc2V0
RW5hYmxlZERhdGFiYXNlQWdlbnQobnVsbHB0cik7CiAKICAgICBtX3Jlc291cmNlcy5jbGVhcigp
OworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JEYXRhYmFzZUFnZW50Ojpn
ZXREYXRhYmFzZVRhYmxlTmFtZXMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJp
bmcmIGRhdGFiYXNlSWQsIFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+JiBuYW1lcykKK1By
b3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPFN0cmluZz4+PiBJbnNwZWN0
b3JEYXRhYmFzZUFnZW50OjpnZXREYXRhYmFzZVRhYmxlTmFtZXMoY29uc3QgUHJvdG9jb2w6OkRh
dGFiYXNlOjpEYXRhYmFzZUlkJiBkYXRhYmFzZUlkKQogewotICAgIGlmIChtX2luc3RydW1lbnRp
bmdBZ2VudHMuZW5hYmxlZERhdGFiYXNlQWdlbnQoKSAhPSB0aGlzKSB7Ci0gICAgICAgIGVycm9y
U3RyaW5nID0gIkRhdGFiYXNlIGRvbWFpbiBtdXN0IGJlIGVuYWJsZWQiX3M7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBuYW1lcyA9IEpTT046OkFycmF5T2Y8U3RyaW5nPjo6Y3JlYXRl
KCk7CisgICAgaWYgKG1faW5zdHJ1bWVudGluZ0FnZW50cy5lbmFibGVkRGF0YWJhc2VBZ2VudCgp
ICE9IHRoaXMpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiRGF0YWJhc2UgZG9tYWlu
IG11c3QgYmUgZW5hYmxlZCJfcyk7CiAKKyAgICBhdXRvIG5hbWVzID0gSlNPTjo6QXJyYXlPZjxT
dHJpbmc+OjpjcmVhdGUoKTsKICAgICBpZiAoYXV0byogZGF0YWJhc2UgPSBkYXRhYmFzZUZvcklk
KGRhdGFiYXNlSWQpKSB7CiAgICAgICAgIGZvciAoYXV0byYgdGFibGVOYW1lIDogZGF0YWJhc2Ut
PnRhYmxlTmFtZXMoKSkKICAgICAgICAgICAgIG5hbWVzLT5hZGRJdGVtKHRhYmxlTmFtZSk7CiAg
ICAgfQorICAgIHJldHVybiBXVEZNb3ZlKG5hbWVzKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JEYXRh
YmFzZUFnZW50OjpleGVjdXRlU1FMKGNvbnN0IFN0cmluZyYgZGF0YWJhc2VJZCwgY29uc3QgU3Ry
aW5nJiBxdWVyeSwgUmVmPEV4ZWN1dGVTUUxDYWxsYmFjaz4mJiByZXF1ZXN0Q2FsbGJhY2spCit2
b2lkIEluc3BlY3RvckRhdGFiYXNlQWdlbnQ6OmV4ZWN1dGVTUUwoY29uc3QgUHJvdG9jb2w6OkRh
dGFiYXNlOjpEYXRhYmFzZUlkJiBkYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIHF1ZXJ5LCBSZWY8
RXhlY3V0ZVNRTENhbGxiYWNrPiYmIHJlcXVlc3RDYWxsYmFjaykKIHsKICAgICBpZiAobV9pbnN0
cnVtZW50aW5nQWdlbnRzLmVuYWJsZWREYXRhYmFzZUFnZW50KCkgIT0gdGhpcykgewogICAgICAg
ICByZXF1ZXN0Q2FsbGJhY2stPnNlbmRGYWlsdXJlKCJEYXRhYmFzZSBkb21haW4gbXVzdCBiZSBl
bmFibGVkIl9zKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50
cy9JbnNwZWN0b3JEYXRhYmFzZUFnZW50LmgKaW5kZXggNDMwNTAzMTkxY2RjYjk4NzlmZGI2NTUx
MzljMTRiYjc3YTczNzQyZi4uMDFjZWY0MzliNGFjNmRhZDJlNDEyNmI1NDM0MTZjNTM5NDMyY2Jj
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JE
YXRhYmFzZUFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNw
ZWN0b3JEYXRhYmFzZUFnZW50LmgKQEAgLTQxLDI0ICs0MSwyMiBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiBjbGFzcyBEYXRhYmFzZTsKIGNsYXNzIEluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2U7CiAK
LXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCiBjbGFzcyBJbnNwZWN0b3JEYXRhYmFzZUFn
ZW50IGZpbmFsIDogcHVibGljIEluc3BlY3RvckFnZW50QmFzZSwgcHVibGljIEluc3BlY3Rvcjo6
RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewogICAgIFdURl9NQUtFX05PTkNPUFlB
QkxFKEluc3BlY3RvckRhdGFiYXNlQWdlbnQpOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OwogcHVibGljOgogICAgIEluc3BlY3RvckRhdGFiYXNlQWdlbnQoV2ViQWdlbnRDb250ZXh0Jik7
Ci0gICAgfkluc3BlY3RvckRhdGFiYXNlQWdlbnQoKSBvdmVycmlkZTsKKyAgICB+SW5zcGVjdG9y
RGF0YWJhc2VBZ2VudCgpOwogCiAgICAgLy8gSW5zcGVjdG9yQWdlbnRCYXNlCi0gICAgdm9pZCBk
aWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9udGVuZFJvdXRlciosIElu
c3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXIqKSBvdmVycmlkZTsKLSAgICB2b2lkIHdpbGxEZXN0
cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlzY29ubmVjdFJlYXNvbikgb3ZlcnJp
ZGU7CisgICAgdm9pZCBkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9u
dGVuZFJvdXRlciosIEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXIqKTsKKyAgICB2b2lkIHdp
bGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlzY29ubmVjdFJlYXNvbik7
CiAKICAgICAvLyBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcgotICAgIHZvaWQgZW5h
YmxlKEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkaXNhYmxlKEVycm9yU3RyaW5n
Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBnZXREYXRhYmFzZVRhYmxlTmFtZXMoRXJyb3JTdHJpbmcm
LCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlSWQsIFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+
JiBuYW1lcykgb3ZlcnJpZGU7Ci0gICAgdm9pZCBleGVjdXRlU1FMKGNvbnN0IFN0cmluZyYgZGF0
YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBxdWVyeSwgUmVmPEV4ZWN1dGVTUUxDYWxsYmFjaz4mJikg
b3ZlcnJpZGU7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBl
bmFibGUoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGRp
c2FibGUoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxKU09O
OjpBcnJheU9mPFN0cmluZz4+PiBnZXREYXRhYmFzZVRhYmxlTmFtZXMoY29uc3QgSW5zcGVjdG9y
OjpQcm90b2NvbDo6RGF0YWJhc2U6OkRhdGFiYXNlSWQmKTsKKyAgICB2b2lkIGV4ZWN1dGVTUUwo
Y29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkRhdGFiYXNlSWQmLCBjb25zdCBT
dHJpbmcmIHF1ZXJ5LCBSZWY8RXhlY3V0ZVNRTENhbGxiYWNrPiYmKTsKIAogICAgIC8vIEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbgogICAgIHZvaWQgZGlkQ29tbWl0TG9hZCgpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JJbmRleGVkREJBZ2Vu
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckluZGV4ZWRE
QkFnZW50LmNwcAppbmRleCBmZjhmMzBmNDAzZjg1YzdkZGJlMzFiMTBlMDNjZWY1ZmNkZjdmMDA2
Li5hMTQ1ZTA0ZWIyMThkZThhNDJmZjg5ODI5OGI4YmVhNjgyYzRlZGUxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckluZGV4ZWREQkFnZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckluZGV4ZWRE
QkFnZW50LmNwcApAQCAtNzAsMjYgKzcwLDYgQEAKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAj
aW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGVOdW1iZXJzLmg+CiAKLXVzaW5nIEpT
T046OkFycmF5T2Y7Ci11c2luZyBJbnNwZWN0b3I6OlByb3RvY29sOjpJbmRleGVkREI6OkRhdGFi
YXNlV2l0aE9iamVjdFN0b3JlczsKLXVzaW5nIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkluZGV4ZWRE
Qjo6RGF0YUVudHJ5OwotdXNpbmcgSW5zcGVjdG9yOjpQcm90b2NvbDo6SW5kZXhlZERCOjpLZXk7
Ci11c2luZyBJbnNwZWN0b3I6OlByb3RvY29sOjpJbmRleGVkREI6OktleVBhdGg7Ci11c2luZyBJ
bnNwZWN0b3I6OlByb3RvY29sOjpJbmRleGVkREI6OktleVJhbmdlOwotdXNpbmcgSW5zcGVjdG9y
OjpQcm90b2NvbDo6SW5kZXhlZERCOjpPYmplY3RTdG9yZTsKLXVzaW5nIEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkluZGV4ZWREQjo6T2JqZWN0U3RvcmVJbmRleDsKLQotdHlwZWRlZiBJbnNwZWN0b3I6
OkJhY2tlbmREaXNwYXRjaGVyOjpDYWxsYmFja0Jhc2UgUmVxdWVzdENhbGxiYWNrOwotdHlwZWRl
ZiBJbnNwZWN0b3I6OkluZGV4ZWREQkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UmVxdWVzdERh
dGFiYXNlTmFtZXNDYWxsYmFjayBSZXF1ZXN0RGF0YWJhc2VOYW1lc0NhbGxiYWNrOwotdHlwZWRl
ZiBJbnNwZWN0b3I6OkluZGV4ZWREQkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UmVxdWVzdERh
dGFiYXNlQ2FsbGJhY2sgUmVxdWVzdERhdGFiYXNlQ2FsbGJhY2s7Ci10eXBlZGVmIEluc3BlY3Rv
cjo6SW5kZXhlZERCQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpSZXF1ZXN0RGF0YUNhbGxiYWNr
IFJlcXVlc3REYXRhQ2FsbGJhY2s7Ci10eXBlZGVmIEluc3BlY3Rvcjo6SW5kZXhlZERCQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyOjpDbGVhck9iamVjdFN0b3JlQ2FsbGJhY2sgQ2xlYXJPYmplY3RT
dG9yZUNhbGxiYWNrOwotCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQotdGVtcGxhdGUg
PHR5cGVuYW1lIFQ+Ci11c2luZyBFcnJvclN0cmluZ09yID0gRXhwZWN0ZWQ8VCwgRXJyb3JTdHJp
bmc+OwotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7
CkBAIC0xMDMsNyArODMsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+RXhlY3V0YWJsZVdpdGhE
YXRhYmFzZSgpID0gZGVmYXVsdDsKICAgICB2b2lkIHN0YXJ0KElEQkZhY3RvcnkqLCBTZWN1cml0
eU9yaWdpbiosIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VOYW1lKTsKICAgICB2aXJ0dWFsIHZvaWQg
ZXhlY3V0ZShJREJEYXRhYmFzZSYpID0gMDsKLSAgICB2aXJ0dWFsIFJlcXVlc3RDYWxsYmFjayYg
cmVxdWVzdENhbGxiYWNrKCkgPSAwOworICAgIHZpcnR1YWwgQmFja2VuZERpc3BhdGNoZXI6OkNh
bGxiYWNrQmFzZSYgcmVxdWVzdENhbGxiYWNrKCkgPSAwOwogICAgIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIGNvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX2NvbnRleHQ7IH0KIHByaXZhdGU6CiAg
ICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogbV9jb250ZXh0OwpAQCAtMTcxLDIwICsxNTEsMjAg
QEAgdm9pZCBFeGVjdXRhYmxlV2l0aERhdGFiYXNlOjpzdGFydChJREJGYWN0b3J5KiBpZGJGYWN0
b3J5LCBTZWN1cml0eU9yaWdpbiosIGNvbnMKIH0KIAogCi1zdGF0aWMgUmVmUHRyPEtleVBhdGg+
IGtleVBhdGhGcm9tSURCS2V5UGF0aChjb25zdCBPcHRpb25hbDxJREJLZXlQYXRoPiYgaWRiS2V5
UGF0aCkKK3N0YXRpYyBSZWY8UHJvdG9jb2w6OkluZGV4ZWREQjo6S2V5UGF0aD4ga2V5UGF0aEZy
b21JREJLZXlQYXRoKGNvbnN0IE9wdGlvbmFsPElEQktleVBhdGg+JiBpZGJLZXlQYXRoKQogewog
ICAgIGlmICghaWRiS2V5UGF0aCkKLSAgICAgICAgcmV0dXJuIEtleVBhdGg6OmNyZWF0ZSgpLnNl
dFR5cGUoS2V5UGF0aDo6VHlwZTo6TnVsbCkucmVsZWFzZSgpOworICAgICAgICByZXR1cm4gUHJv
dG9jb2w6OkluZGV4ZWREQjo6S2V5UGF0aDo6Y3JlYXRlKCkuc2V0VHlwZShQcm90b2NvbDo6SW5k
ZXhlZERCOjpLZXlQYXRoOjpUeXBlOjpOdWxsKS5yZWxlYXNlKCk7CiAKICAgICBhdXRvIHZpc2l0
b3IgPSBXVEY6Om1ha2VWaXNpdG9yKFtdKGNvbnN0IFN0cmluZyYgc3RyaW5nKSB7Ci0gICAgICAg
IGF1dG8ga2V5UGF0aCA9IEtleVBhdGg6OmNyZWF0ZSgpLnNldFR5cGUoS2V5UGF0aDo6VHlwZTo6
U3RyaW5nKS5yZWxlYXNlKCk7CisgICAgICAgIGF1dG8ga2V5UGF0aCA9IFByb3RvY29sOjpJbmRl
eGVkREI6OktleVBhdGg6OmNyZWF0ZSgpLnNldFR5cGUoUHJvdG9jb2w6OkluZGV4ZWREQjo6S2V5
UGF0aDo6VHlwZTo6U3RyaW5nKS5yZWxlYXNlKCk7CiAgICAgICAgIGtleVBhdGgtPnNldFN0cmlu
ZyhzdHJpbmcpOwogICAgICAgICByZXR1cm4ga2V5UGF0aDsKICAgICB9LCBbXShjb25zdCBWZWN0
b3I8U3RyaW5nPiYgdmVjdG9yKSB7CiAgICAgICAgIGF1dG8gYXJyYXkgPSBKU09OOjpBcnJheU9m
PFN0cmluZz46OmNyZWF0ZSgpOwogICAgICAgICBmb3IgKGF1dG8mIHN0cmluZyA6IHZlY3RvcikK
ICAgICAgICAgICAgIGFycmF5LT5hZGRJdGVtKHN0cmluZyk7Ci0gICAgICAgIGF1dG8ga2V5UGF0
aCA9IEtleVBhdGg6OmNyZWF0ZSgpLnNldFR5cGUoS2V5UGF0aDo6VHlwZTo6QXJyYXkpLnJlbGVh
c2UoKTsKKyAgICAgICAgYXV0byBrZXlQYXRoID0gUHJvdG9jb2w6OkluZGV4ZWREQjo6S2V5UGF0
aDo6Y3JlYXRlKCkuc2V0VHlwZShQcm90b2NvbDo6SW5kZXhlZERCOjpLZXlQYXRoOjpUeXBlOjpB
cnJheSkucmVsZWFzZSgpOwogICAgICAgICBrZXlQYXRoLT5zZXRBcnJheShXVEZNb3ZlKGFycmF5
KSk7CiAgICAgICAgIHJldHVybiBrZXlQYXRoOwogICAgIH0pOwpAQCAtMjE3LDcgKzE5Nyw3IEBA
IHN0YXRpYyBSZWZQdHI8SURCSW5kZXg+IGluZGV4Rm9yT2JqZWN0U3RvcmUoSURCT2JqZWN0U3Rv
cmUqIGlkYk9iamVjdFN0b3JlLCBjb25zCiAKIGNsYXNzIERhdGFiYXNlTG9hZGVyIGZpbmFsIDog
cHVibGljIEV4ZWN1dGFibGVXaXRoRGF0YWJhc2UgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8
RGF0YWJhc2VMb2FkZXI+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBS
ZWY8UmVxdWVzdERhdGFiYXNlQ2FsbGJhY2s+JiYgcmVxdWVzdENhbGxiYWNrKQorICAgIHN0YXRp
YyBSZWY8RGF0YWJhc2VMb2FkZXI+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250
ZXh0LCBSZWY8SW5kZXhlZERCQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpSZXF1ZXN0RGF0YWJh
c2VDYWxsYmFjaz4mJiByZXF1ZXN0Q2FsbGJhY2spCiAgICAgewogICAgICAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBEYXRhYmFzZUxvYWRlcihjb250ZXh0LCBXVEZNb3ZlKHJlcXVlc3RDYWxsYmFj
aykpKTsKICAgICB9CkBAIC0yMzAsMTcgKzIxMCwxNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgCiAgICAgICAgIGF1dG8mIGRhdGFiYXNlSW5mbyA9IGRhdGFiYXNlLmluZm8o
KTsKLSAgICAgICAgYXV0byBvYmplY3RTdG9yZXMgPSBKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkluZGV4ZWREQjo6T2JqZWN0U3RvcmU+OjpjcmVhdGUoKTsKKyAgICAgICAgYXV0
byBvYmplY3RTdG9yZXMgPSBKU09OOjpBcnJheU9mPFByb3RvY29sOjpJbmRleGVkREI6Ok9iamVj
dFN0b3JlPjo6Y3JlYXRlKCk7CiAgICAgICAgIGF1dG8gb2JqZWN0U3RvcmVOYW1lcyA9IGRhdGFi
YXNlSW5mby5vYmplY3RTdG9yZU5hbWVzKCk7CiAgICAgICAgIGZvciAoYXV0byYgbmFtZSA6IG9i
amVjdFN0b3JlTmFtZXMpIHsKICAgICAgICAgICAgIGF1dG8qIG9iamVjdFN0b3JlSW5mbyA9IGRh
dGFiYXNlSW5mby5pbmZvRm9yRXhpc3RpbmdPYmplY3RTdG9yZShuYW1lKTsKICAgICAgICAgICAg
IGlmICghb2JqZWN0U3RvcmVJbmZvKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAg
ICAgICAgICBhdXRvIGluZGV4ZXMgPSBKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkluZGV4ZWREQjo6T2JqZWN0U3RvcmVJbmRleD46OmNyZWF0ZSgpOworICAgICAgICAgICAgYXV0
byBpbmRleGVzID0gSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6SW5kZXhlZERCOjpPYmplY3RTdG9y
ZUluZGV4Pjo6Y3JlYXRlKCk7CiAgICAgCiAgICAgICAgICAgICBmb3IgKGF1dG8mIGluZGV4SW5m
byA6IG9iamVjdFN0b3JlSW5mby0+aW5kZXhNYXAoKS52YWx1ZXMoKSkgewotICAgICAgICAgICAg
ICAgIGF1dG8gb2JqZWN0U3RvcmVJbmRleCA9IE9iamVjdFN0b3JlSW5kZXg6OmNyZWF0ZSgpCisg
ICAgICAgICAgICAgICAgYXV0byBvYmplY3RTdG9yZUluZGV4ID0gUHJvdG9jb2w6OkluZGV4ZWRE
Qjo6T2JqZWN0U3RvcmVJbmRleDo6Y3JlYXRlKCkKICAgICAgICAgICAgICAgICAgICAgLnNldE5h
bWUoaW5kZXhJbmZvLm5hbWUoKSkKICAgICAgICAgICAgICAgICAgICAgLnNldEtleVBhdGgoa2V5
UGF0aEZyb21JREJLZXlQYXRoKGluZGV4SW5mby5rZXlQYXRoKCkpKQogICAgICAgICAgICAgICAg
ICAgICAuc2V0VW5pcXVlKGluZGV4SW5mby51bmlxdWUoKSkKQEAgLTI0OSw3ICsyMjksNyBAQCBw
dWJsaWM6CiAgICAgICAgICAgICAgICAgaW5kZXhlcy0+YWRkSXRlbShXVEZNb3ZlKG9iamVjdFN0
b3JlSW5kZXgpKTsKICAgICAgICAgICAgIH0KICAgICAKLSAgICAgICAgICAgIGF1dG8gb2JqZWN0
U3RvcmUgPSBPYmplY3RTdG9yZTo6Y3JlYXRlKCkKKyAgICAgICAgICAgIGF1dG8gb2JqZWN0U3Rv
cmUgPSBQcm90b2NvbDo6SW5kZXhlZERCOjpPYmplY3RTdG9yZTo6Y3JlYXRlKCkKICAgICAgICAg
ICAgICAgICAuc2V0TmFtZShvYmplY3RTdG9yZUluZm8tPm5hbWUoKSkKICAgICAgICAgICAgICAg
ICAuc2V0S2V5UGF0aChrZXlQYXRoRnJvbUlEQktleVBhdGgob2JqZWN0U3RvcmVJbmZvLT5rZXlQ
YXRoKCkpKQogICAgICAgICAgICAgICAgIC5zZXRBdXRvSW5jcmVtZW50KG9iamVjdFN0b3JlSW5m
by0+YXV0b0luY3JlbWVudCgpKQpAQCAtMjU4LDcgKzIzOCw3IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgIG9iamVjdFN0b3Jlcy0+YWRkSXRlbShXVEZNb3ZlKG9iamVjdFN0b3JlKSk7CiAgICAgICAg
IH0KICAgICAKLSAgICAgICAgYXV0byByZXN1bHQgPSBEYXRhYmFzZVdpdGhPYmplY3RTdG9yZXM6
OmNyZWF0ZSgpCisgICAgICAgIGF1dG8gcmVzdWx0ID0gUHJvdG9jb2w6OkluZGV4ZWREQjo6RGF0
YWJhc2VXaXRoT2JqZWN0U3RvcmVzOjpjcmVhdGUoKQogICAgICAgICAgICAgLnNldE5hbWUoZGF0
YWJhc2VJbmZvLm5hbWUoKSkKICAgICAgICAgICAgIC5zZXRWZXJzaW9uKGRhdGFiYXNlSW5mby52
ZXJzaW9uKCkpCiAgICAgICAgICAgICAuc2V0T2JqZWN0U3RvcmVzKFdURk1vdmUob2JqZWN0U3Rv
cmVzKSkKQEAgLTI2Niw5MiArMjQ2LDk2IEBAIHB1YmxpYzoKICAgICAgICAgbV9yZXF1ZXN0Q2Fs
bGJhY2stPnNlbmRTdWNjZXNzKFdURk1vdmUocmVzdWx0KSk7CiAgICAgfQogCi0gICAgUmVxdWVz
dENhbGxiYWNrJiByZXF1ZXN0Q2FsbGJhY2soKSBvdmVycmlkZSB7IHJldHVybiBtX3JlcXVlc3RD
YWxsYmFjay5nZXQoKTsgfQorICAgIEJhY2tlbmREaXNwYXRjaGVyOjpDYWxsYmFja0Jhc2UmIHJl
cXVlc3RDYWxsYmFjaygpIG92ZXJyaWRlIHsgcmV0dXJuIG1fcmVxdWVzdENhbGxiYWNrLmdldCgp
OyB9CiBwcml2YXRlOgotICAgIERhdGFiYXNlTG9hZGVyKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IGNvbnRleHQsIFJlZjxSZXF1ZXN0RGF0YWJhc2VDYWxsYmFjaz4mJiByZXF1ZXN0Q2FsbGJhY2sp
CisgICAgRGF0YWJhc2VMb2FkZXIoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUmVm
PEluZGV4ZWREQkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UmVxdWVzdERhdGFiYXNlQ2FsbGJh
Y2s+JiYgcmVxdWVzdENhbGxiYWNrKQogICAgICAgICA6IEV4ZWN1dGFibGVXaXRoRGF0YWJhc2Uo
Y29udGV4dCkKICAgICAgICAgLCBtX3JlcXVlc3RDYWxsYmFjayhXVEZNb3ZlKHJlcXVlc3RDYWxs
YmFjaykpIHsgfQotICAgIFJlZjxSZXF1ZXN0RGF0YWJhc2VDYWxsYmFjaz4gbV9yZXF1ZXN0Q2Fs
bGJhY2s7CisgICAgUmVmPEluZGV4ZWREQkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UmVxdWVz
dERhdGFiYXNlQ2FsbGJhY2s+IG1fcmVxdWVzdENhbGxiYWNrOwogfTsKIAotc3RhdGljIFJlZlB0
cjxJREJLZXk+IGlkYktleUZyb21JbnNwZWN0b3JPYmplY3QoSlNPTjo6T2JqZWN0KiBrZXkpCitz
dGF0aWMgUmVmUHRyPElEQktleT4gaWRiS2V5RnJvbUluc3BlY3Rvck9iamVjdChSZWY8SlNPTjo6
T2JqZWN0PiYmIGtleSkKIHsKLSAgICBTdHJpbmcgdHlwZTsKLSAgICBpZiAoIWtleS0+Z2V0U3Ry
aW5nKCJ0eXBlIiwgdHlwZSkpCisgICAgYXV0byB0eXBlU3RyaW5nID0ga2V5LT5nZXRTdHJpbmco
UHJvdG9jb2w6OkluZGV4ZWREQjo6S2V5Ojp0eXBlS2V5KTsKKyAgICBpZiAoIXR5cGVTdHJpbmcp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPGNv
bnN0IFN0cmluZz4gbnVtYmVyVHlwZShNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgibnVtYmVyIikp
OwotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IHN0cmluZ1R5cGUoTUFL
RV9TVEFUSUNfU1RSSU5HX0lNUEwoInN0cmluZyIpKTsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8Y29uc3QgU3RyaW5nPiBkYXRlVHlwZShNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgiZGF0ZSIp
KTsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiBhcnJheVR5cGUoTUFL
RV9TVEFUSUNfU1RSSU5HX0lNUEwoImFycmF5IikpOworICAgIGF1dG8gdHlwZSA9IFByb3RvY29s
OjpIZWxwZXJzOjpwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8UHJvdG9jb2w6OkluZGV4ZWREQjo6
S2V5OjpUeXBlPih0eXBlU3RyaW5nKTsKKyAgICBpZiAoIXR5cGUpCisgICAgICAgIHJldHVybiBu
dWxscHRyOwogCi0gICAgUmVmUHRyPElEQktleT4gaWRiS2V5OwotICAgIGlmICh0eXBlID09IG51
bWJlclR5cGUpIHsKLSAgICAgICAgZG91YmxlIG51bWJlcjsKLSAgICAgICAgaWYgKCFrZXktPmdl
dERvdWJsZSgibnVtYmVyIiwgbnVtYmVyKSkKKyAgICBzd2l0Y2ggKCp0eXBlKSB7CisgICAgY2Fz
ZSBQcm90b2NvbDo6SW5kZXhlZERCOjpLZXk6OlR5cGU6Ok51bWJlcjogeworICAgICAgICBhdXRv
IG51bWJlciA9IGtleS0+Z2V0RG91YmxlKFByb3RvY29sOjpJbmRleGVkREI6OktleTo6bnVtYmVy
S2V5KTsKKyAgICAgICAgaWYgKCFudW1iZXIpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICAgICAgaWRiS2V5ID0gSURCS2V5OjpjcmVhdGVOdW1iZXIobnVtYmVyKTsKLSAgICB9IGVs
c2UgaWYgKHR5cGUgPT0gc3RyaW5nVHlwZSkgewotICAgICAgICBTdHJpbmcgc3RyaW5nOwotICAg
ICAgICBpZiAoIWtleS0+Z2V0U3RyaW5nKCJzdHJpbmciLCBzdHJpbmcpKQorICAgICAgICByZXR1
cm4gSURCS2V5OjpjcmVhdGVOdW1iZXIoKm51bWJlcik7CisgICAgfQorCisgICAgY2FzZSBQcm90
b2NvbDo6SW5kZXhlZERCOjpLZXk6OlR5cGU6OlN0cmluZzogeworICAgICAgICBhdXRvIHN0cmlu
ZyA9IGtleS0+Z2V0U3RyaW5nKFByb3RvY29sOjpJbmRleGVkREI6OktleTo6c3RyaW5nS2V5KTsK
KyAgICAgICAgaWYgKCFzdHJpbmcpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAg
ICAgaWRiS2V5ID0gSURCS2V5OjpjcmVhdGVTdHJpbmcoc3RyaW5nKTsKLSAgICB9IGVsc2UgaWYg
KHR5cGUgPT0gZGF0ZVR5cGUpIHsKLSAgICAgICAgZG91YmxlIGRhdGU7Ci0gICAgICAgIGlmICgh
a2V5LT5nZXREb3VibGUoImRhdGUiLCBkYXRlKSkKKyAgICAgICAgcmV0dXJuIElEQktleTo6Y3Jl
YXRlU3RyaW5nKHN0cmluZyk7CisgICAgfQorCisgICAgY2FzZSBQcm90b2NvbDo6SW5kZXhlZERC
OjpLZXk6OlR5cGU6OkRhdGU6IHsKKyAgICAgICAgYXV0byBkYXRlID0ga2V5LT5nZXREb3VibGUo
UHJvdG9jb2w6OkluZGV4ZWREQjo6S2V5OjpkYXRlS2V5KTsKKyAgICAgICAgaWYgKCFkYXRlKQog
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIGlkYktleSA9IElEQktleTo6Y3Jl
YXRlRGF0ZShkYXRlKTsKLSAgICB9IGVsc2UgaWYgKHR5cGUgPT0gYXJyYXlUeXBlKSB7CisgICAg
ICAgIHJldHVybiBJREJLZXk6OmNyZWF0ZURhdGUoKmRhdGUpOworICAgIH0KKworICAgIGNhc2Ug
UHJvdG9jb2w6OkluZGV4ZWREQjo6S2V5OjpUeXBlOjpBcnJheTogeworICAgICAgICBhdXRvIGFy
cmF5ID0ga2V5LT5nZXRBcnJheShQcm90b2NvbDo6SW5kZXhlZERCOjpLZXk6OmFycmF5S2V5KTsK
KyAgICAgICAgaWYgKCFhcnJheSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCiAgICAg
ICAgIFZlY3RvcjxSZWZQdHI8SURCS2V5Pj4ga2V5QXJyYXk7Ci0gICAgICAgIFJlZlB0cjxKU09O
OjpBcnJheT4gYXJyYXk7Ci0gICAgICAgIGlmICgha2V5LT5nZXRBcnJheSgiYXJyYXkiLCBhcnJh
eSkpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBhcnJheS0+bGVuZ3RoKCk7ICsraSkgewotICAgICAgICAgICAgUmVmUHRyPEpTT046
OlZhbHVlPiB2YWx1ZSA9IGFycmF5LT5nZXQoaSk7Ci0gICAgICAgICAgICBSZWZQdHI8SlNPTjo6
T2JqZWN0PiBvYmplY3Q7Ci0gICAgICAgICAgICBpZiAoIXZhbHVlLT5hc09iamVjdChvYmplY3Qp
KQorICAgICAgICAgICAgYXV0byBvYmplY3QgPSBhcnJheS0+Z2V0KGkpLT5hc09iamVjdCgpOwor
ICAgICAgICAgICAgaWYgKCFvYmplY3QpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0gICAgICAgICAgICBrZXlBcnJheS5hcHBlbmQoaWRiS2V5RnJvbUluc3BlY3Rvck9iamVjdChv
YmplY3QuZ2V0KCkpKTsKKyAgICAgICAgICAgIGtleUFycmF5LmFwcGVuZChpZGJLZXlGcm9tSW5z
cGVjdG9yT2JqZWN0KG9iamVjdC5yZWxlYXNlTm9uTnVsbCgpKSk7CiAgICAgICAgIH0KLSAgICAg
ICAgaWRiS2V5ID0gSURCS2V5OjpjcmVhdGVBcnJheShrZXlBcnJheSk7Ci0gICAgfSBlbHNlCi0g
ICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gSURCS2V5OjpjcmVhdGVBcnJh
eShrZXlBcnJheSk7CisgICAgfQorICAgIH0KIAotICAgIHJldHVybiBpZGJLZXk7CisgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLXN0YXRpYyBSZWZQ
dHI8SURCS2V5UmFuZ2U+IGlkYktleVJhbmdlRnJvbUtleVJhbmdlKGNvbnN0IEpTT046Ok9iamVj
dCoga2V5UmFuZ2UpCitzdGF0aWMgUmVmUHRyPElEQktleVJhbmdlPiBpZGJLZXlSYW5nZUZyb21L
ZXlSYW5nZShKU09OOjpPYmplY3QmIGtleVJhbmdlKQogewogICAgIFJlZlB0cjxJREJLZXk+IGlk
Ykxvd2VyOwotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IGxvd2VyOwotICAgIGlmIChrZXlSYW5n
ZS0+Z2V0T2JqZWN0KCJsb3dlciJfcywgbG93ZXIpKSB7Ci0gICAgICAgIGlkYkxvd2VyID0gaWRi
S2V5RnJvbUluc3BlY3Rvck9iamVjdChsb3dlci5nZXQoKSk7CisgICAgaWYgKGF1dG8gbG93ZXIg
PSBrZXlSYW5nZS5nZXRPYmplY3QoUHJvdG9jb2w6OkluZGV4ZWREQjo6S2V5UmFuZ2U6Omxvd2Vy
S2V5KSkgeworICAgICAgICBpZGJMb3dlciA9IGlkYktleUZyb21JbnNwZWN0b3JPYmplY3QobG93
ZXIucmVsZWFzZU5vbk51bGwoKSk7CiAgICAgICAgIGlmICghaWRiTG93ZXIpCiAgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKICAgICBSZWZQdHI8SURCS2V5PiBpZGJVcHBlcjsK
LSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiB1cHBlcjsKLSAgICBpZiAoa2V5UmFuZ2UtPmdldE9i
amVjdCgidXBwZXIiX3MsIHVwcGVyKSkgewotICAgICAgICBpZGJVcHBlciA9IGlkYktleUZyb21J
bnNwZWN0b3JPYmplY3QodXBwZXIuZ2V0KCkpOworICAgIGlmIChhdXRvIHVwcGVyID0ga2V5UmFu
Z2UuZ2V0T2JqZWN0KFByb3RvY29sOjpJbmRleGVkREI6OktleVJhbmdlOjp1cHBlcktleSkpIHsK
KyAgICAgICAgaWRiVXBwZXIgPSBpZGJLZXlGcm9tSW5zcGVjdG9yT2JqZWN0KHVwcGVyLnJlbGVh
c2VOb25OdWxsKCkpOwogICAgICAgICBpZiAoIWlkYlVwcGVyKQogICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgfQogCi0gICAgYm9vbCBsb3dlck9wZW47Ci0gICAgaWYgKCFrZXlSYW5n
ZS0+Z2V0Qm9vbGVhbigibG93ZXJPcGVuIl9zLCBsb3dlck9wZW4pKQorICAgIGF1dG8gbG93ZXJP
cGVuID0ga2V5UmFuZ2UuZ2V0Qm9vbGVhbihQcm90b2NvbDo6SW5kZXhlZERCOjpLZXlSYW5nZTo6
bG93ZXJPcGVuS2V5KTsKKyAgICBpZiAoIWxvd2VyT3BlbikKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAKLSAgICBib29sIHVwcGVyT3BlbjsKLSAgICBpZiAoIWtleVJhbmdlLT5nZXRCb29sZWFu
KCJ1cHBlck9wZW4iX3MsIHVwcGVyT3BlbikpCisgICAgYXV0byB1cHBlck9wZW4gPSBrZXlSYW5n
ZS5nZXRCb29sZWFuKFByb3RvY29sOjpJbmRleGVkREI6OktleVJhbmdlOjp1cHBlck9wZW5LZXkp
OworICAgIGlmICghdXBwZXJPcGVuKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJl
dHVybiBJREJLZXlSYW5nZTo6Y3JlYXRlKFdURk1vdmUoaWRiTG93ZXIpLCBXVEZNb3ZlKGlkYlVw
cGVyKSwgbG93ZXJPcGVuLCB1cHBlck9wZW4pOworICAgIHJldHVybiBJREJLZXlSYW5nZTo6Y3Jl
YXRlKFdURk1vdmUoaWRiTG93ZXIpLCBXVEZNb3ZlKGlkYlVwcGVyKSwgKmxvd2VyT3BlbiwgKnVw
cGVyT3Blbik7CiB9CiAKIGNsYXNzIE9wZW5DdXJzb3JDYWxsYmFjayBmaW5hbCA6IHB1YmxpYyBF
dmVudExpc3RlbmVyIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPE9wZW5DdXJzb3JDYWxsYmFj
az4gY3JlYXRlKEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0LCBSZWY8UmVxdWVzdERhdGFD
YWxsYmFjaz4mJiByZXF1ZXN0Q2FsbGJhY2ssIGludCBza2lwQ291bnQsIHVuc2lnbmVkIHBhZ2VT
aXplKQorICAgIHN0YXRpYyBSZWY8T3BlbkN1cnNvckNhbGxiYWNrPiBjcmVhdGUoSW5qZWN0ZWRT
Y3JpcHQgaW5qZWN0ZWRTY3JpcHQsIFJlZjxJbmRleGVkREJCYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXI6OlJlcXVlc3REYXRhQ2FsbGJhY2s+JiYgcmVxdWVzdENhbGxiYWNrLCBpbnQgc2tpcENvdW50
LCB1bnNpZ25lZCBwYWdlU2l6ZSkKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IE9wZW5DdXJzb3JDYWxsYmFjayhpbmplY3RlZFNjcmlwdCwgV1RGTW92ZShyZXF1ZXN0Q2FsbGJh
Y2spLCBza2lwQ291bnQsIHBhZ2VTaXplKSk7CiAgICAgfQpAQCAtNDA1LDEzICszODksMjMgQEAg
cHVibGljOgogICAgICAgICB9CiAKICAgICAgICAgYXV0byogbGV4aWNhbEdsb2JhbE9iamVjdCA9
IGNvbnRleHQuZXhlY1N0YXRlKCk7Ci0gICAgICAgIGF1dG8ga2V5ID0gIHRvSlMoKmxleGljYWxH
bG9iYWxPYmplY3QsICpsZXhpY2FsR2xvYmFsT2JqZWN0LCBjdXJzb3ItPmtleSgpKTsKLSAgICAg
ICAgYXV0byBwcmltYXJ5S2V5ID0gdG9KUygqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmxleGljYWxH
bG9iYWxPYmplY3QsIGN1cnNvci0+cHJpbWFyeUtleSgpKTsKLSAgICAgICAgYXV0byB2YWx1ZSA9
IGRlc2VyaWFsaXplSURCVmFsdWVUb0pTVmFsdWUoKmxleGljYWxHbG9iYWxPYmplY3QsIGN1cnNv
ci0+dmFsdWUoKSk7Ci0gICAgICAgIGF1dG8gZGF0YUVudHJ5ID0gRGF0YUVudHJ5OjpjcmVhdGUo
KQotICAgICAgICAgICAgLnNldEtleShtX2luamVjdGVkU2NyaXB0LndyYXBPYmplY3Qoa2V5LCBT
dHJpbmcoKSwgdHJ1ZSkpCi0gICAgICAgICAgICAuc2V0UHJpbWFyeUtleShtX2luamVjdGVkU2Ny
aXB0LndyYXBPYmplY3QocHJpbWFyeUtleSwgU3RyaW5nKCksIHRydWUpKQotICAgICAgICAgICAg
LnNldFZhbHVlKG1faW5qZWN0ZWRTY3JpcHQud3JhcE9iamVjdCh2YWx1ZSwgU3RyaW5nKCksIHRy
dWUpKQorCisgICAgICAgIGF1dG8ga2V5ID0gbV9pbmplY3RlZFNjcmlwdC53cmFwT2JqZWN0KHRv
SlMoKmxleGljYWxHbG9iYWxPYmplY3QsICpsZXhpY2FsR2xvYmFsT2JqZWN0LCBjdXJzb3ItPmtl
eSgpKSwgU3RyaW5nKCksIHRydWUpOworICAgICAgICBpZiAoIWtleSkKKyAgICAgICAgICAgIHJl
dHVybjsKKworICAgICAgICBhdXRvIHByaW1hcnlLZXkgPSBtX2luamVjdGVkU2NyaXB0LndyYXBP
YmplY3QodG9KUygqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmxleGljYWxHbG9iYWxPYmplY3QsIGN1
cnNvci0+cHJpbWFyeUtleSgpKSwgU3RyaW5nKCksIHRydWUpOworICAgICAgICBpZiAoIXByaW1h
cnlLZXkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgYXV0byB2YWx1ZSA9IG1faW5q
ZWN0ZWRTY3JpcHQud3JhcE9iamVjdChkZXNlcmlhbGl6ZUlEQlZhbHVlVG9KU1ZhbHVlKCpsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBjdXJzb3ItPnZhbHVlKCkpLCBTdHJpbmcoKSwgdHJ1ZSk7CisgICAg
ICAgIGlmICghdmFsdWUpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgYXV0byBkYXRh
RW50cnkgPSBQcm90b2NvbDo6SW5kZXhlZERCOjpEYXRhRW50cnk6OmNyZWF0ZSgpCisgICAgICAg
ICAgICAuc2V0S2V5KGtleS5yZWxlYXNlTm9uTnVsbCgpKQorICAgICAgICAgICAgLnNldFByaW1h
cnlLZXkocHJpbWFyeUtleS5yZWxlYXNlTm9uTnVsbCgpKQorICAgICAgICAgICAgLnNldFZhbHVl
KHZhbHVlLnJlbGVhc2VOb25OdWxsKCkpCiAgICAgICAgICAgICAucmVsZWFzZSgpOwogICAgICAg
ICBtX3Jlc3VsdC0+YWRkSXRlbShXVEZNb3ZlKGRhdGFFbnRyeSkpOwogICAgIH0KQEAgLTQyNCwy
NSArNDE4LDI1IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgT3BlbkN1cnNvckNh
bGxiYWNrKEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0LCBSZWY8UmVxdWVzdERhdGFDYWxs
YmFjaz4mJiByZXF1ZXN0Q2FsbGJhY2ssIGludCBza2lwQ291bnQsIHVuc2lnbmVkIHBhZ2VTaXpl
KQorICAgIE9wZW5DdXJzb3JDYWxsYmFjayhJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdCwg
UmVmPEluZGV4ZWREQkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UmVxdWVzdERhdGFDYWxsYmFj
az4mJiByZXF1ZXN0Q2FsbGJhY2ssIGludCBza2lwQ291bnQsIHVuc2lnbmVkIHBhZ2VTaXplKQog
ICAgICAgICA6IEV2ZW50TGlzdGVuZXIoRXZlbnRMaXN0ZW5lcjo6Q1BQRXZlbnRMaXN0ZW5lclR5
cGUpCiAgICAgICAgICwgbV9pbmplY3RlZFNjcmlwdChpbmplY3RlZFNjcmlwdCkKICAgICAgICAg
LCBtX3JlcXVlc3RDYWxsYmFjayhXVEZNb3ZlKHJlcXVlc3RDYWxsYmFjaykpCi0gICAgICAgICwg
bV9yZXN1bHQoSlNPTjo6QXJyYXlPZjxEYXRhRW50cnk+OjpjcmVhdGUoKSkKKyAgICAgICAgLCBt
X3Jlc3VsdChKU09OOjpBcnJheU9mPFByb3RvY29sOjpJbmRleGVkREI6OkRhdGFFbnRyeT46OmNy
ZWF0ZSgpKQogICAgICAgICAsIG1fc2tpcENvdW50KHNraXBDb3VudCkKICAgICAgICAgLCBtX3Bh
Z2VTaXplKHBhZ2VTaXplKQogICAgIHsKICAgICB9CiAgICAgSW5qZWN0ZWRTY3JpcHQgbV9pbmpl
Y3RlZFNjcmlwdDsKLSAgICBSZWY8UmVxdWVzdERhdGFDYWxsYmFjaz4gbV9yZXF1ZXN0Q2FsbGJh
Y2s7Ci0gICAgUmVmPEpTT046OkFycmF5T2Y8RGF0YUVudHJ5Pj4gbV9yZXN1bHQ7CisgICAgUmVm
PEluZGV4ZWREQkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UmVxdWVzdERhdGFDYWxsYmFjaz4g
bV9yZXF1ZXN0Q2FsbGJhY2s7CisgICAgUmVmPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkluZGV4
ZWREQjo6RGF0YUVudHJ5Pj4gbV9yZXN1bHQ7CiAgICAgaW50IG1fc2tpcENvdW50OwogICAgIHVu
c2lnbmVkIG1fcGFnZVNpemU7CiB9OwogCiBjbGFzcyBEYXRhTG9hZGVyIGZpbmFsIDogcHVibGlj
IEV4ZWN1dGFibGVXaXRoRGF0YWJhc2UgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RGF0YUxv
YWRlcj4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFJlZjxSZXF1ZXN0
RGF0YUNhbGxiYWNrPiYmIHJlcXVlc3RDYWxsYmFjaywgY29uc3QgSW5qZWN0ZWRTY3JpcHQmIGlu
amVjdGVkU2NyaXB0LCBjb25zdCBTdHJpbmcmIG9iamVjdFN0b3JlTmFtZSwgY29uc3QgU3RyaW5n
JiBpbmRleE5hbWUsIFJlZlB0cjxJREJLZXlSYW5nZT4mJiBpZGJLZXlSYW5nZSwgaW50IHNraXBD
b3VudCwgdW5zaWduZWQgcGFnZVNpemUpCisgICAgc3RhdGljIFJlZjxEYXRhTG9hZGVyPiBjcmVh
dGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUmVmPEluZGV4ZWREQkJhY2tlbmRE
aXNwYXRjaGVySGFuZGxlcjo6UmVxdWVzdERhdGFDYWxsYmFjaz4mJiByZXF1ZXN0Q2FsbGJhY2ss
IGNvbnN0IEluamVjdGVkU2NyaXB0JiBpbmplY3RlZFNjcmlwdCwgY29uc3QgU3RyaW5nJiBvYmpl
Y3RTdG9yZU5hbWUsIGNvbnN0IFN0cmluZyYgaW5kZXhOYW1lLCBSZWZQdHI8SURCS2V5UmFuZ2U+
JiYgaWRiS2V5UmFuZ2UsIGludCBza2lwQ291bnQsIHVuc2lnbmVkIHBhZ2VTaXplKQogICAgIHsK
ICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRGF0YUxvYWRlcihjb250ZXh0LCBXVEZNb3Zl
KHJlcXVlc3RDYWxsYmFjayksIGluamVjdGVkU2NyaXB0LCBvYmplY3RTdG9yZU5hbWUsIGluZGV4
TmFtZSwgV1RGTW92ZShpZGJLZXlSYW5nZSksIHNraXBDb3VudCwgcGFnZVNpemUpKTsKICAgICB9
CkBAIC00OTgsOCArNDkyLDggQEAgcHVibGljOgogICAgICAgICBpZGJSZXF1ZXN0LT5hZGRFdmVu
dExpc3RlbmVyKGV2ZW50TmFtZXMoKS5zdWNjZXNzRXZlbnQsIFdURk1vdmUob3BlbkN1cnNvckNh
bGxiYWNrKSwgZmFsc2UpOwogICAgIH0KIAotICAgIFJlcXVlc3RDYWxsYmFjayYgcmVxdWVzdENh
bGxiYWNrKCkgb3ZlcnJpZGUgeyByZXR1cm4gbV9yZXF1ZXN0Q2FsbGJhY2suZ2V0KCk7IH0KLSAg
ICBEYXRhTG9hZGVyKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQsIFJlZjxSZXF1ZXN0RGF0YUNhbGxiYWNrPiYmIHJlcXVlc3RDYWxsYmFjaywgY29uc3QgSW5q
ZWN0ZWRTY3JpcHQmIGluamVjdGVkU2NyaXB0LCBjb25zdCBTdHJpbmcmIG9iamVjdFN0b3JlTmFt
ZSwgY29uc3QgU3RyaW5nJiBpbmRleE5hbWUsIFJlZlB0cjxJREJLZXlSYW5nZT4gaWRiS2V5UmFu
Z2UsIGludCBza2lwQ291bnQsIHVuc2lnbmVkIHBhZ2VTaXplKQorICAgIEJhY2tlbmREaXNwYXRj
aGVyOjpDYWxsYmFja0Jhc2UmIHJlcXVlc3RDYWxsYmFjaygpIG92ZXJyaWRlIHsgcmV0dXJuIG1f
cmVxdWVzdENhbGxiYWNrLmdldCgpOyB9CisgICAgRGF0YUxvYWRlcihTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBSZWY8SW5kZXhlZERCQmFja2VuZERpc3Bh
dGNoZXJIYW5kbGVyOjpSZXF1ZXN0RGF0YUNhbGxiYWNrPiYmIHJlcXVlc3RDYWxsYmFjaywgY29u
c3QgSW5qZWN0ZWRTY3JpcHQmIGluamVjdGVkU2NyaXB0LCBjb25zdCBTdHJpbmcmIG9iamVjdFN0
b3JlTmFtZSwgY29uc3QgU3RyaW5nJiBpbmRleE5hbWUsIFJlZlB0cjxJREJLZXlSYW5nZT4gaWRi
S2V5UmFuZ2UsIGludCBza2lwQ291bnQsIHVuc2lnbmVkIHBhZ2VTaXplKQogICAgICAgICA6IEV4
ZWN1dGFibGVXaXRoRGF0YWJhc2Uoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkKICAgICAgICAgLCBt
X3JlcXVlc3RDYWxsYmFjayhXVEZNb3ZlKHJlcXVlc3RDYWxsYmFjaykpCiAgICAgICAgICwgbV9p
bmplY3RlZFNjcmlwdChpbmplY3RlZFNjcmlwdCkKQEAgLTUwOCw3ICs1MDIsNyBAQCBwdWJsaWM6
CiAgICAgICAgICwgbV9pZGJLZXlSYW5nZShXVEZNb3ZlKGlkYktleVJhbmdlKSkKICAgICAgICAg
LCBtX3NraXBDb3VudChza2lwQ291bnQpCiAgICAgICAgICwgbV9wYWdlU2l6ZShwYWdlU2l6ZSkg
eyB9Ci0gICAgUmVmPFJlcXVlc3REYXRhQ2FsbGJhY2s+IG1fcmVxdWVzdENhbGxiYWNrOworICAg
IFJlZjxJbmRleGVkREJCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlJlcXVlc3REYXRhQ2FsbGJh
Y2s+IG1fcmVxdWVzdENhbGxiYWNrOwogICAgIEluamVjdGVkU2NyaXB0IG1faW5qZWN0ZWRTY3Jp
cHQ7CiAgICAgU3RyaW5nIG1fb2JqZWN0U3RvcmVOYW1lOwogICAgIFN0cmluZyBtX2luZGV4TmFt
ZTsKQEAgLTUzNSwxOSArNTI5LDIwIEBAIHZvaWQgSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQ6OmRp
ZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kUm91CiAKIHZvaWQg
SW5zcGVjdG9ySW5kZXhlZERCQWdlbnQ6OndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKElu
c3BlY3Rvcjo6RGlzY29ubmVjdFJlYXNvbikKIHsKLSAgICBFcnJvclN0cmluZyBpZ25vcmVkOwot
ICAgIGRpc2FibGUoaWdub3JlZCk7CisgICAgZGlzYWJsZSgpOwogfQogCi12b2lkIEluc3BlY3Rv
ckluZGV4ZWREQkFnZW50OjplbmFibGUoRXJyb3JTdHJpbmcmKQorUHJvdG9jb2w6OkVycm9yU3Ry
aW5nT3I8dm9pZD4gSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQ6OmVuYWJsZSgpCiB7CisgICAgcmV0
dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JJbmRleGVkREJBZ2VudDo6ZGlzYWJsZShFcnJv
clN0cmluZyYpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JJbmRleGVk
REJBZ2VudDo6ZGlzYWJsZSgpCiB7CisgICAgcmV0dXJuIHsgfTsKIH0KIAotc3RhdGljIEVycm9y
U3RyaW5nT3I8RG9jdW1lbnQqPiBkb2N1bWVudEZyb21GcmFtZShGcmFtZSogZnJhbWUpCitzdGF0
aWMgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8RG9jdW1lbnQqPiBkb2N1bWVudEZyb21GcmFtZShG
cmFtZSogZnJhbWUpCiB7CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gZnJhbWUgPyBmcmFtZS0+
ZG9jdW1lbnQoKSA6IG51bGxwdHI7CiAgICAgaWYgKCFkb2N1bWVudCkKQEAgLTU1Niw3ICs1NTEs
NyBAQCBzdGF0aWMgRXJyb3JTdHJpbmdPcjxEb2N1bWVudCo+IGRvY3VtZW50RnJvbUZyYW1lKEZy
YW1lKiBmcmFtZSkKICAgICByZXR1cm4gZG9jdW1lbnQ7CiB9CiAKLXN0YXRpYyBFcnJvclN0cmlu
Z09yPElEQkZhY3RvcnkqPiBJREJGYWN0b3J5RnJvbURvY3VtZW50KERvY3VtZW50KiBkb2N1bWVu
dCkKK3N0YXRpYyBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxJREJGYWN0b3J5Kj4gSURCRmFjdG9y
eUZyb21Eb2N1bWVudChEb2N1bWVudCogZG9jdW1lbnQpCiB7CiAgICAgRE9NV2luZG93KiBkb21X
aW5kb3cgPSBkb2N1bWVudC0+ZG9tV2luZG93KCk7CiAgICAgaWYgKCFkb21XaW5kb3cpCkBAIC01
NzEsMTMgKzU2NiwxMyBAQCBzdGF0aWMgRXJyb3JTdHJpbmdPcjxJREJGYWN0b3J5Kj4gSURCRmFj
dG9yeUZyb21Eb2N1bWVudChEb2N1bWVudCogZG9jdW1lbnQpCiAKIHN0YXRpYyBib29sIGdldERv
Y3VtZW50QW5kSURCRmFjdG9yeUZyb21GcmFtZU9yU2VuZEZhaWx1cmUoRnJhbWUqIGZyYW1lLCBE
b2N1bWVudComIG91dF9kb2N1bWVudCwgSURCRmFjdG9yeSomIG91dF9pZGJGYWN0b3J5LCBCYWNr
ZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlJiBjYWxsYmFjaykKIHsKLSAgICBFcnJvclN0cmlu
Z09yPERvY3VtZW50Kj4gZG9jdW1lbnQgPSBkb2N1bWVudEZyb21GcmFtZShmcmFtZSk7CisgICAg
UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8RG9jdW1lbnQqPiBkb2N1bWVudCA9IGRvY3VtZW50RnJv
bUZyYW1lKGZyYW1lKTsKICAgICBpZiAoIWRvY3VtZW50Lmhhc192YWx1ZSgpKSB7CiAgICAgICAg
IGNhbGxiYWNrLnNlbmRGYWlsdXJlKGRvY3VtZW50LmVycm9yKCkpOwogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQogCi0gICAgRXJyb3JTdHJpbmdPcjxJREJGYWN0b3J5Kj4gaWRiRmFjdG9y
eSA9IElEQkZhY3RvcnlGcm9tRG9jdW1lbnQoZG9jdW1lbnQudmFsdWUoKSk7CisgICAgUHJvdG9j
b2w6OkVycm9yU3RyaW5nT3I8SURCRmFjdG9yeSo+IGlkYkZhY3RvcnkgPSBJREJGYWN0b3J5RnJv
bURvY3VtZW50KGRvY3VtZW50LnZhbHVlKCkpOwogICAgIGlmICghaWRiRmFjdG9yeS5oYXNfdmFs
dWUoKSkgewogICAgICAgICBjYWxsYmFjay5zZW5kRmFpbHVyZShpZGJGYWN0b3J5LmVycm9yKCkp
OwogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC02MjAsNyArNjE1LDcgQEAgdm9pZCBJbnNwZWN0
b3JJbmRleGVkREJBZ2VudDo6cmVxdWVzdERhdGFiYXNlKGNvbnN0IFN0cmluZyYgc2VjdXJpdHlP
cmlnaW4sIGNvbnMKICAgICBkYXRhYmFzZUxvYWRlci0+c3RhcnQoaWRiRmFjdG9yeSwgJmRvY3Vt
ZW50LT5zZWN1cml0eU9yaWdpbigpLCBkYXRhYmFzZU5hbWUpOwogfQogCi12b2lkIEluc3BlY3Rv
ckluZGV4ZWREQkFnZW50OjpyZXF1ZXN0RGF0YShjb25zdCBTdHJpbmcmIHNlY3VyaXR5T3JpZ2lu
LCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlTmFtZSwgY29uc3QgU3RyaW5nJiBvYmplY3RTdG9yZU5h
bWUsIGNvbnN0IFN0cmluZyYgaW5kZXhOYW1lLCBpbnQgc2tpcENvdW50LCBpbnQgcGFnZVNpemUs
IGNvbnN0IEpTT046Ok9iamVjdCoga2V5UmFuZ2UsIFJlZjxSZXF1ZXN0RGF0YUNhbGxiYWNrPiYm
IGNhbGxiYWNrKQordm9pZCBJbnNwZWN0b3JJbmRleGVkREJBZ2VudDo6cmVxdWVzdERhdGEoY29u
c3QgU3RyaW5nJiBzZWN1cml0eU9yaWdpbiwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZU5hbWUsIGNv
bnN0IFN0cmluZyYgb2JqZWN0U3RvcmVOYW1lLCBjb25zdCBTdHJpbmcmIGluZGV4TmFtZSwgaW50
IHNraXBDb3VudCwgaW50IHBhZ2VTaXplLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIGtleVJhbmdl
LCBSZWY8UmVxdWVzdERhdGFDYWxsYmFjaz4mJiBjYWxsYmFjaykKIHsKICAgICBhdXRvKiBmcmFt
ZSA9IEluc3BlY3RvclBhZ2VBZ2VudDo6ZmluZEZyYW1lV2l0aFNlY3VyaXR5T3JpZ2luKG1faW5z
cGVjdGVkUGFnZSwgc2VjdXJpdHlPcmlnaW4pOwogICAgIERvY3VtZW50KiBkb2N1bWVudDsKQEAg
LTYyOSw3ICs2MjQsNyBAQCB2b2lkIEluc3BlY3RvckluZGV4ZWREQkFnZW50OjpyZXF1ZXN0RGF0
YShjb25zdCBTdHJpbmcmIHNlY3VyaXR5T3JpZ2luLCBjb25zdCBTdAogICAgICAgICByZXR1cm47
CiAKICAgICBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdCA9IG1faW5qZWN0ZWRTY3JpcHRN
YW5hZ2VyLmluamVjdGVkU2NyaXB0Rm9yKG1haW5Xb3JsZEV4ZWNTdGF0ZShmcmFtZSkpOwotICAg
IFJlZlB0cjxJREJLZXlSYW5nZT4gaWRiS2V5UmFuZ2UgPSBrZXlSYW5nZSA/IGlkYktleVJhbmdl
RnJvbUtleVJhbmdlKGtleVJhbmdlKSA6IG51bGxwdHI7CisgICAgUmVmUHRyPElEQktleVJhbmdl
PiBpZGJLZXlSYW5nZSA9IGtleVJhbmdlID8gaWRiS2V5UmFuZ2VGcm9tS2V5UmFuZ2UoKmtleVJh
bmdlKSA6IG51bGxwdHI7CiAgICAgaWYgKGtleVJhbmdlICYmICFpZGJLZXlSYW5nZSkgewogICAg
ICAgICBjYWxsYmFjay0+c2VuZEZhaWx1cmUoIkNvdWxkIG5vdCBwYXJzZSBrZXkgcmFuZ2UuIl9z
KTsKICAgICAgICAgcmV0dXJuOwpAQCAtNjQ0LDcgKzYzOSw3IEBAIG5hbWVzcGFjZSB7CiBjbGFz
cyBDbGVhck9iamVjdFN0b3JlTGlzdGVuZXIgZmluYWwgOiBwdWJsaWMgRXZlbnRMaXN0ZW5lciB7
CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ2xlYXJPYmplY3RTdG9yZUxpc3RlbmVyKTsKIHB1
YmxpYzoKLSAgICBzdGF0aWMgUmVmPENsZWFyT2JqZWN0U3RvcmVMaXN0ZW5lcj4gY3JlYXRlKFJl
ZjxDbGVhck9iamVjdFN0b3JlQ2FsbGJhY2s+IHJlcXVlc3RDYWxsYmFjaykKKyAgICBzdGF0aWMg
UmVmPENsZWFyT2JqZWN0U3RvcmVMaXN0ZW5lcj4gY3JlYXRlKFJlZjxJbmRleGVkREJCYWNrZW5k
RGlzcGF0Y2hlckhhbmRsZXI6OkNsZWFyT2JqZWN0U3RvcmVDYWxsYmFjaz4gcmVxdWVzdENhbGxi
YWNrKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ2xlYXJPYmplY3RTdG9y
ZUxpc3RlbmVyKFdURk1vdmUocmVxdWVzdENhbGxiYWNrKSkpOwogICAgIH0KQEAgLTY2OCwyMyAr
NjYzLDIzIEBAIHB1YmxpYzoKICAgICAgICAgbV9yZXF1ZXN0Q2FsbGJhY2stPnNlbmRTdWNjZXNz
KCk7CiAgICAgfQogcHJpdmF0ZToKLSAgICBDbGVhck9iamVjdFN0b3JlTGlzdGVuZXIoUmVmPENs
ZWFyT2JqZWN0U3RvcmVDYWxsYmFjaz4mJiByZXF1ZXN0Q2FsbGJhY2spCisgICAgQ2xlYXJPYmpl
Y3RTdG9yZUxpc3RlbmVyKFJlZjxJbmRleGVkREJCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkNs
ZWFyT2JqZWN0U3RvcmVDYWxsYmFjaz4mJiByZXF1ZXN0Q2FsbGJhY2spCiAgICAgICAgIDogRXZl
bnRMaXN0ZW5lcihFdmVudExpc3RlbmVyOjpDUFBFdmVudExpc3RlbmVyVHlwZSkKICAgICAgICAg
LCBtX3JlcXVlc3RDYWxsYmFjayhXVEZNb3ZlKHJlcXVlc3RDYWxsYmFjaykpCiAgICAgewogICAg
IH0KIAotICAgIFJlZjxDbGVhck9iamVjdFN0b3JlQ2FsbGJhY2s+IG1fcmVxdWVzdENhbGxiYWNr
OworICAgIFJlZjxJbmRleGVkREJCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkNsZWFyT2JqZWN0
U3RvcmVDYWxsYmFjaz4gbV9yZXF1ZXN0Q2FsbGJhY2s7CiB9OwogCiBjbGFzcyBDbGVhck9iamVj
dFN0b3JlIGZpbmFsIDogcHVibGljIEV4ZWN1dGFibGVXaXRoRGF0YWJhc2UgewogcHVibGljOgot
ICAgIHN0YXRpYyBSZWY8Q2xlYXJPYmplY3RTdG9yZT4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgb2JqZWN0U3RvcmVOYW1lLCBSZWY8Q2xlYXJP
YmplY3RTdG9yZUNhbGxiYWNrPiYmIHJlcXVlc3RDYWxsYmFjaykKKyAgICBzdGF0aWMgUmVmPENs
ZWFyT2JqZWN0U3RvcmU+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBj
b25zdCBTdHJpbmcmIG9iamVjdFN0b3JlTmFtZSwgUmVmPEluZGV4ZWREQkJhY2tlbmREaXNwYXRj
aGVySGFuZGxlcjo6Q2xlYXJPYmplY3RTdG9yZUNhbGxiYWNrPiYmIHJlcXVlc3RDYWxsYmFjaykK
ICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENsZWFyT2JqZWN0U3RvcmUoY29u
dGV4dCwgb2JqZWN0U3RvcmVOYW1lLCBXVEZNb3ZlKHJlcXVlc3RDYWxsYmFjaykpKTsKICAgICB9
CiAKLSAgICBDbGVhck9iamVjdFN0b3JlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQs
IGNvbnN0IFN0cmluZyYgb2JqZWN0U3RvcmVOYW1lLCBSZWY8Q2xlYXJPYmplY3RTdG9yZUNhbGxi
YWNrPiYmIHJlcXVlc3RDYWxsYmFjaykKKyAgICBDbGVhck9iamVjdFN0b3JlKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgb2JqZWN0U3RvcmVOYW1lLCBSZWY8
SW5kZXhlZERCQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpDbGVhck9iamVjdFN0b3JlQ2FsbGJh
Y2s+JiYgcmVxdWVzdENhbGxiYWNrKQogICAgICAgICA6IEV4ZWN1dGFibGVXaXRoRGF0YWJhc2Uo
Y29udGV4dCkKICAgICAgICAgLCBtX29iamVjdFN0b3JlTmFtZShvYmplY3RTdG9yZU5hbWUpCiAg
ICAgICAgICwgbV9yZXF1ZXN0Q2FsbGJhY2soV1RGTW92ZShyZXF1ZXN0Q2FsbGJhY2spKQpAQCAt
NzIzLDEwICs3MTgsMTAgQEAgcHVibGljOgogICAgICAgICBpZGJUcmFuc2FjdGlvbi0+YWRkRXZl
bnRMaXN0ZW5lcihldmVudE5hbWVzKCkuY29tcGxldGVFdmVudCwgQ2xlYXJPYmplY3RTdG9yZUxp
c3RlbmVyOjpjcmVhdGUobV9yZXF1ZXN0Q2FsbGJhY2suY29weVJlZigpKSwgZmFsc2UpOwogICAg
IH0KIAotICAgIFJlcXVlc3RDYWxsYmFjayYgcmVxdWVzdENhbGxiYWNrKCkgb3ZlcnJpZGUgeyBy
ZXR1cm4gbV9yZXF1ZXN0Q2FsbGJhY2suZ2V0KCk7IH0KKyAgICBCYWNrZW5kRGlzcGF0Y2hlcjo6
Q2FsbGJhY2tCYXNlJiByZXF1ZXN0Q2FsbGJhY2soKSBvdmVycmlkZSB7IHJldHVybiBtX3JlcXVl
c3RDYWxsYmFjay5nZXQoKTsgfQogcHJpdmF0ZToKICAgICBjb25zdCBTdHJpbmcgbV9vYmplY3RT
dG9yZU5hbWU7Ci0gICAgUmVmPENsZWFyT2JqZWN0U3RvcmVDYWxsYmFjaz4gbV9yZXF1ZXN0Q2Fs
bGJhY2s7CisgICAgUmVmPEluZGV4ZWREQkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6Q2xlYXJP
YmplY3RTdG9yZUNhbGxiYWNrPiBtX3JlcXVlc3RDYWxsYmFjazsKIH07CiAKIH0gLy8gYW5vbnlt
b3VzIG5hbWVzcGFjZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50
cy9JbnNwZWN0b3JJbmRleGVkREJBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Fn
ZW50cy9JbnNwZWN0b3JJbmRleGVkREJBZ2VudC5oCmluZGV4IGRiMjk3YmQ5Y2RhOGRhNmMwNDdh
YjgyZmYzNTBhMmY0ZjU3NDhmZTkuLmU1NDRmOWM2ZjI1MzljNDExNzJkNWM2OTJlNGQyODBlNTQz
MDIzOTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVj
dG9ySW5kZXhlZERCQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRz
L0luc3BlY3RvckluZGV4ZWREQkFnZW50LmgKQEAgLTQ1LDI2ICs0NSwyNCBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIGNsYXNzIFBhZ2U7CiAKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwot
CiBjbGFzcyBJbnNwZWN0b3JJbmRleGVkREJBZ2VudCBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3JB
Z2VudEJhc2UsIHB1YmxpYyBJbnNwZWN0b3I6OkluZGV4ZWREQkJhY2tlbmREaXNwYXRjaGVySGFu
ZGxlciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQp
OwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIEluc3BlY3Rvcklu
ZGV4ZWREQkFnZW50KFBhZ2VBZ2VudENvbnRleHQmKTsKLSAgICB+SW5zcGVjdG9ySW5kZXhlZERC
QWdlbnQoKSBvdmVycmlkZTsKKyAgICB+SW5zcGVjdG9ySW5kZXhlZERCQWdlbnQoKTsKIAogICAg
IC8vIEluc3BlY3RvckFnZW50QmFzZQotICAgIHZvaWQgZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNr
ZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRSb3V0ZXIqLCBJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRj
aGVyKikgb3ZlcnJpZGU7Ci0gICAgdm9pZCB3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJ
bnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24pIG92ZXJyaWRlOworICAgIHZvaWQgZGlkQ3JlYXRl
RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRSb3V0ZXIqLCBJbnNwZWN0b3I6
OkJhY2tlbmREaXNwYXRjaGVyKik7CisgICAgdm9pZCB3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFj
a2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24pOwogCiAgICAgLy8gSW5kZXhlZERCQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyCi0gICAgdm9pZCBlbmFibGUoRXJyb3JTdHJpbmcmKSBvdmVy
cmlkZTsKLSAgICB2b2lkIGRpc2FibGUoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2b2lk
IHJlcXVlc3REYXRhYmFzZU5hbWVzKGNvbnN0IFN0cmluZyYgc2VjdXJpdHlPcmlnaW4sIFJlZjxS
ZXF1ZXN0RGF0YWJhc2VOYW1lc0NhbGxiYWNrPiYmKSBvdmVycmlkZTsKLSAgICB2b2lkIHJlcXVl
c3REYXRhYmFzZShjb25zdCBTdHJpbmcmIHNlY3VyaXR5T3JpZ2luLCBjb25zdCBTdHJpbmcmIGRh
dGFiYXNlTmFtZSwgUmVmPFJlcXVlc3REYXRhYmFzZUNhbGxiYWNrPiYmKSBvdmVycmlkZTsKLSAg
ICB2b2lkIHJlcXVlc3REYXRhKGNvbnN0IFN0cmluZyYgc2VjdXJpdHlPcmlnaW4sIGNvbnN0IFN0
cmluZyYgZGF0YWJhc2VOYW1lLCBjb25zdCBTdHJpbmcmIG9iamVjdFN0b3JlTmFtZSwgY29uc3Qg
U3RyaW5nJiBpbmRleE5hbWUsIGludCBza2lwQ291bnQsIGludCBwYWdlU2l6ZSwgY29uc3QgSlNP
Tjo6T2JqZWN0KiBrZXlSYW5nZSwgUmVmPFJlcXVlc3REYXRhQ2FsbGJhY2s+JiYpIG92ZXJyaWRl
OwotICAgIHZvaWQgY2xlYXJPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIHNlY3VyaXR5T3JpZ2lu
LCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlTmFtZSwgY29uc3QgU3RyaW5nJiBvYmplY3RTdG9yZU5h
bWUsIFJlZjxDbGVhck9iamVjdFN0b3JlQ2FsbGJhY2s+JiYpIG92ZXJyaWRlOworICAgIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZW5hYmxlKCk7CisgICAgSW5zcGVj
dG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBkaXNhYmxlKCk7CisgICAgdm9pZCBy
ZXF1ZXN0RGF0YWJhc2VOYW1lcyhjb25zdCBTdHJpbmcmIHNlY3VyaXR5T3JpZ2luLCBSZWY8UmVx
dWVzdERhdGFiYXNlTmFtZXNDYWxsYmFjaz4mJik7CisgICAgdm9pZCByZXF1ZXN0RGF0YWJhc2Uo
Y29uc3QgU3RyaW5nJiBzZWN1cml0eU9yaWdpbiwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZU5hbWUs
IFJlZjxSZXF1ZXN0RGF0YWJhc2VDYWxsYmFjaz4mJik7CisgICAgdm9pZCByZXF1ZXN0RGF0YShj
b25zdCBTdHJpbmcmIHNlY3VyaXR5T3JpZ2luLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlTmFtZSwg
Y29uc3QgU3RyaW5nJiBvYmplY3RTdG9yZU5hbWUsIGNvbnN0IFN0cmluZyYgaW5kZXhOYW1lLCBp
bnQgc2tpcENvdW50LCBpbnQgcGFnZVNpemUsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYga2V5UmFu
Z2UsIFJlZjxSZXF1ZXN0RGF0YUNhbGxiYWNrPiYmKTsKKyAgICB2b2lkIGNsZWFyT2JqZWN0U3Rv
cmUoY29uc3QgU3RyaW5nJiBzZWN1cml0eU9yaWdpbiwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZU5h
bWUsIGNvbnN0IFN0cmluZyYgb2JqZWN0U3RvcmVOYW1lLCBSZWY8Q2xlYXJPYmplY3RTdG9yZUNh
bGxiYWNrPiYmKTsKIAogcHJpdmF0ZToKICAgICBJbnNwZWN0b3I6OkluamVjdGVkU2NyaXB0TWFu
YWdlciYgbV9pbmplY3RlZFNjcmlwdE1hbmFnZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckxheWVyVHJlZUFnZW50LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQuY3BwCmluZGV4
IGJiOTk0YmY5OWZjMjUxNjY5ZjhkNzNhNGRmMGI1NWVjMGY1NmM2MTMuLjUyZDNmZDcwZjZhMjk5
ZDlhZjA0NjkyNGY0YmFlM2RkNWQ2MGIxMWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQuY3BwCkBAIC02
MSw4ICs2MSw3IEBAIHZvaWQgSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OmRpZENyZWF0ZUZyb250
ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kUm91CiAKIHZvaWQgSW5zcGVjdG9yTGF5
ZXJUcmVlQWdlbnQ6OndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlz
Y29ubmVjdFJlYXNvbikKIHsKLSAgICBFcnJvclN0cmluZyBpZ25vcmVkOwotICAgIGRpc2FibGUo
aWdub3JlZCk7CisgICAgZGlzYWJsZSgpOwogfQogCiB2b2lkIEluc3BlY3RvckxheWVyVHJlZUFn
ZW50OjpyZXNldCgpCkBAIC03NCwxNiArNzMsMjAgQEAgdm9pZCBJbnNwZWN0b3JMYXllclRyZWVB
Z2VudDo6cmVzZXQoKQogICAgIG1fc3VwcHJlc3NMYXllckNoYW5nZUV2ZW50cyA9IGZhbHNlOwog
fQogCi12b2lkIEluc3BlY3RvckxheWVyVHJlZUFnZW50OjplbmFibGUoRXJyb3JTdHJpbmcmKQor
UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OmVu
YWJsZSgpCiB7CiAgICAgbV9pbnN0cnVtZW50aW5nQWdlbnRzLnNldEVuYWJsZWRMYXllclRyZWVB
Z2VudCh0aGlzKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yTGF5ZXJU
cmVlQWdlbnQ6OmRpc2FibGUoRXJyb3JTdHJpbmcmKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8
dm9pZD4gSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OmRpc2FibGUoKQogewogICAgIG1faW5zdHJ1
bWVudGluZ0FnZW50cy5zZXRFbmFibGVkTGF5ZXJUcmVlQWdlbnQobnVsbHB0cik7CiAKICAgICBy
ZXNldCgpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAogdm9pZCBJbnNwZWN0b3JMYXllclRyZWVB
Z2VudDo6bGF5ZXJUcmVlRGlkQ2hhbmdlKCkKQEAgLTEwNiw1MSArMTA5LDQ5IEBAIHZvaWQgSW5z
cGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OnBzZXVkb0VsZW1lbnREZXN0cm95ZWQoUHNldWRvRWxlbWVu
dCYgcHNldWRvRWxlbWVuCiAgICAgdW5iaW5kUHNldWRvRWxlbWVudCgmcHNldWRvRWxlbWVudCk7
CiB9CiAKLXZvaWQgSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OmxheWVyc0Zvck5vZGUoRXJyb3JT
dHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpMYXllclRyZWU6OkxheWVyPj4mIGxheWVycykKK1Byb3RvY29sOjpF
cnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpMYXllclRyZWU6OkxheWVy
Pj4+IEluc3BlY3RvckxheWVyVHJlZUFnZW50OjpsYXllcnNGb3JOb2RlKFByb3RvY29sOjpET006
Ok5vZGVJZCBub2RlSWQpCiB7Ci0gICAgbGF5ZXJzID0gSlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6
OlByb3RvY29sOjpMYXllclRyZWU6OkxheWVyPjo6Y3JlYXRlKCk7Ci0KICAgICBhdXRvKiBub2Rl
ID0gbV9pbnN0cnVtZW50aW5nQWdlbnRzLnBlcnNpc3RlbnRET01BZ2VudCgpLT5ub2RlRm9ySWQo
bm9kZUlkKTsKLSAgICBpZiAoIW5vZGUpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWlzc2lu
ZyBub2RlIGZvciBnaXZlbiBub2RlSWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAg
aWYgKCFub2RlKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk1pc3Npbmcgbm9kZSBm
b3IgZ2l2ZW4gbm9kZUlkIl9zKTsKIAogICAgIGF1dG8qIHJlbmRlcmVyID0gbm9kZS0+cmVuZGVy
ZXIoKTsKLSAgICBpZiAoIXJlbmRlcmVyKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIk1pc3Np
bmcgcmVuZGVyZXIgb2Ygbm9kZSBmb3IgZ2l2ZW4gbm9kZUlkIl9zOwotICAgICAgICByZXR1cm47
Ci0gICAgfQorICAgIGlmICghcmVuZGVyZXIpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3Rl
ZCgiTWlzc2luZyByZW5kZXJlciBvZiBub2RlIGZvciBnaXZlbiBub2RlSWQiX3MpOwogCiAgICAg
aWYgKCFpczxSZW5kZXJFbGVtZW50PigqcmVuZGVyZXIpKQotICAgICAgICByZXR1cm47CisgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTWlzc2luZyByZW5kZXJlciBvZiBlbGVtZW50IGZv
ciBnaXZlbiBub2RlSWQiX3MpOwogCi0gICAgZ2F0aGVyTGF5ZXJzVXNpbmdSZW5kZXJPYmplY3RI
aWVyYXJjaHkoZXJyb3JTdHJpbmcsIGRvd25jYXN0PFJlbmRlckVsZW1lbnQ+KCpyZW5kZXJlciks
IGxheWVycyk7CisgICAgYXV0byBsYXllcnMgPSBKU09OOjpBcnJheU9mPFByb3RvY29sOjpMYXll
clRyZWU6OkxheWVyPjo6Y3JlYXRlKCk7CisKKyAgICBnYXRoZXJMYXllcnNVc2luZ1JlbmRlck9i
amVjdEhpZXJhcmNoeShkb3duY2FzdDxSZW5kZXJFbGVtZW50PigqcmVuZGVyZXIpLCBsYXllcnMp
OwogCiAgICAgbV9zdXBwcmVzc0xheWVyQ2hhbmdlRXZlbnRzID0gZmFsc2U7CisKKyAgICByZXR1
cm4gV1RGTW92ZShsYXllcnMpOwogfQogCi12b2lkIEluc3BlY3RvckxheWVyVHJlZUFnZW50Ojpn
YXRoZXJMYXllcnNVc2luZ1JlbmRlck9iamVjdEhpZXJhcmNoeShFcnJvclN0cmluZyYgZXJyb3JT
dHJpbmcsIFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpMYXllclRyZWU6OkxheWVyPj4mIGxheWVycykKK3ZvaWQgSW5zcGVj
dG9yTGF5ZXJUcmVlQWdlbnQ6OmdhdGhlckxheWVyc1VzaW5nUmVuZGVyT2JqZWN0SGllcmFyY2h5
KFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBKU09OOjpBcnJheU9mPFByb3RvY29sOjpMYXllclRy
ZWU6OkxheWVyPiYgbGF5ZXJzKQogewogICAgIGlmIChyZW5kZXJlci5oYXNMYXllcigpKSB7Ci0g
ICAgICAgIGdhdGhlckxheWVyc1VzaW5nUmVuZGVyTGF5ZXJIaWVyYXJjaHkoZXJyb3JTdHJpbmcs
IGRvd25jYXN0PFJlbmRlckxheWVyTW9kZWxPYmplY3Q+KHJlbmRlcmVyKS5sYXllcigpLCBsYXll
cnMpOworICAgICAgICBnYXRoZXJMYXllcnNVc2luZ1JlbmRlckxheWVySGllcmFyY2h5KGRvd25j
YXN0PFJlbmRlckxheWVyTW9kZWxPYmplY3Q+KHJlbmRlcmVyKS5sYXllcigpLCBsYXllcnMpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgZm9yIChhdXRvJiBjaGlsZCA6IGNoaWxkcmVu
T2ZUeXBlPFJlbmRlckVsZW1lbnQ+KHJlbmRlcmVyKSkKLSAgICAgICAgZ2F0aGVyTGF5ZXJzVXNp
bmdSZW5kZXJPYmplY3RIaWVyYXJjaHkoZXJyb3JTdHJpbmcsIGNoaWxkLCBsYXllcnMpOworICAg
ICAgICBnYXRoZXJMYXllcnNVc2luZ1JlbmRlck9iamVjdEhpZXJhcmNoeShjaGlsZCwgbGF5ZXJz
KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JMYXllclRyZWVBZ2VudDo6Z2F0aGVyTGF5ZXJzVXNpbmdS
ZW5kZXJMYXllckhpZXJhcmNoeShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIFJlbmRlckxheWVy
KiByZW5kZXJMYXllciwgUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6
TGF5ZXJUcmVlOjpMYXllcj4+JiBsYXllcnMpCit2b2lkIEluc3BlY3RvckxheWVyVHJlZUFnZW50
OjpnYXRoZXJMYXllcnNVc2luZ1JlbmRlckxheWVySGllcmFyY2h5KFJlbmRlckxheWVyKiByZW5k
ZXJMYXllciwgSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6TGF5ZXJUcmVlOjpMYXllcj4mIGxheWVy
cykKIHsKICAgICBpZiAocmVuZGVyTGF5ZXItPmlzQ29tcG9zaXRlZCgpKQotICAgICAgICBsYXll
cnMtPmFkZEl0ZW0oYnVpbGRPYmplY3RGb3JMYXllcihlcnJvclN0cmluZywgcmVuZGVyTGF5ZXIp
KTsKKyAgICAgICAgbGF5ZXJzLmFkZEl0ZW0oYnVpbGRPYmplY3RGb3JMYXllcihyZW5kZXJMYXll
cikpOwogCiAgICAgZm9yIChyZW5kZXJMYXllciA9IHJlbmRlckxheWVyLT5maXJzdENoaWxkKCk7
IHJlbmRlckxheWVyOyByZW5kZXJMYXllciA9IHJlbmRlckxheWVyLT5uZXh0U2libGluZygpKQot
ICAgICAgICBnYXRoZXJMYXllcnNVc2luZ1JlbmRlckxheWVySGllcmFyY2h5KGVycm9yU3RyaW5n
LCByZW5kZXJMYXllciwgbGF5ZXJzKTsKKyAgICAgICAgZ2F0aGVyTGF5ZXJzVXNpbmdSZW5kZXJM
YXllckhpZXJhcmNoeShyZW5kZXJMYXllciwgbGF5ZXJzKTsKIH0KIAotUmVmPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkxheWVyVHJlZTo6TGF5ZXI+IEluc3BlY3RvckxheWVyVHJlZUFnZW50OjpidWls
ZE9iamVjdEZvckxheWVyKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgUmVuZGVyTGF5ZXIqIHJl
bmRlckxheWVyKQorUmVmPFByb3RvY29sOjpMYXllclRyZWU6OkxheWVyPiBJbnNwZWN0b3JMYXll
clRyZWVBZ2VudDo6YnVpbGRPYmplY3RGb3JMYXllcihSZW5kZXJMYXllciogcmVuZGVyTGF5ZXIp
CiB7CiAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9ICZyZW5kZXJMYXllci0+cmVuZGVyZXIo
KTsKICAgICBSZW5kZXJMYXllckJhY2tpbmcqIGJhY2tpbmcgPSByZW5kZXJMYXllci0+YmFja2lu
ZygpOwpAQCAtMTcwLDkgKzE3MSw5IEBAIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpMYXllclRy
ZWU6OkxheWVyPiBJbnNwZWN0b3JMYXllclRyZWVBZ2VudDo6YnVpbGRPYmplY3RGCiAgICAgICAg
IG5vZGUgPSByZW5kZXJlci0+cGFyZW50KCktPmVsZW1lbnQoKTsKIAogICAgIC8vIEJhc2ljIHNl
dCBvZiBwcm9wZXJ0aWVzLgotICAgIGF1dG8gbGF5ZXJPYmplY3QgPSBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpMYXllclRyZWU6OkxheWVyOjpjcmVhdGUoKQorICAgIGF1dG8gbGF5ZXJPYmplY3QgPSBQ
cm90b2NvbDo6TGF5ZXJUcmVlOjpMYXllcjo6Y3JlYXRlKCkKICAgICAgICAgLnNldExheWVySWQo
YmluZChyZW5kZXJMYXllcikpCi0gICAgICAgIC5zZXROb2RlSWQoaWRGb3JOb2RlKGVycm9yU3Ry
aW5nLCBub2RlKSkKKyAgICAgICAgLnNldE5vZGVJZChpZEZvck5vZGUobm9kZSkpCiAgICAgICAg
IC5zZXRCb3VuZHMoYnVpbGRPYmplY3RGb3JJbnRSZWN0KHJlbmRlcmVyLT5hYnNvbHV0ZUJvdW5k
aW5nQm94UmVjdCgpKSkKICAgICAgICAgLnNldE1lbW9yeShiYWNraW5nLT5iYWNraW5nU3RvcmVN
ZW1vcnlFc3RpbWF0ZSgpKQogICAgICAgICAuc2V0Q29tcG9zaXRlZEJvdW5kcyhidWlsZE9iamVj
dEZvckludFJlY3QoZW5jbG9zaW5nSW50UmVjdChiYWNraW5nLT5jb21wb3NpdGVkQm91bmRzKCkp
KSkKQEAgLTIwOSwyNSArMjEwLDI1IEBAIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpMYXllclRy
ZWU6OkxheWVyPiBJbnNwZWN0b3JMYXllclRyZWVBZ2VudDo6YnVpbGRPYmplY3RGCiAgICAgcmV0
dXJuIGxheWVyT2JqZWN0OwogfQogCi1pbnQgSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OmlkRm9y
Tm9kZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIE5vZGUqIG5vZGUpCitQcm90b2NvbDo6RE9N
OjpOb2RlSWQgSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OmlkRm9yTm9kZShOb2RlKiBub2RlKQog
ewogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBJbnNwZWN0b3JET01B
Z2VudCogZG9tQWdlbnQgPSBtX2luc3RydW1lbnRpbmdBZ2VudHMucGVyc2lzdGVudERPTUFnZW50
KCk7CiAgICAgCi0gICAgaW50IG5vZGVJZCA9IGRvbUFnZW50LT5ib3VuZE5vZGVJZChub2RlKTsK
KyAgICBhdXRvIG5vZGVJZCA9IGRvbUFnZW50LT5ib3VuZE5vZGVJZChub2RlKTsKICAgICBpZiAo
IW5vZGVJZCkgewogICAgICAgICAvLyBGSVhNRTogPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzIxMzQ5
OT4gV2ViIEluc3BlY3RvcjogYWxsb3cgRE9NIG5vZGVzIHRvIGJlIGluc3RydW1lbnRlZCBhdCBh
bnkgcG9pbnQsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGUgbWFpbiBkb2N1bWVudCBoYXMgYWxz
byBiZWVuIGluc3RydW1lbnRlZAotICAgICAgICBub2RlSWQgPSBkb21BZ2VudC0+cHVzaE5vZGVU
b0Zyb250ZW5kKGVycm9yU3RyaW5nLCBkb21BZ2VudC0+Ym91bmROb2RlSWQoJm5vZGUtPmRvY3Vt
ZW50KCkpLCBub2RlKTsKKyAgICAgICAgbm9kZUlkID0gZG9tQWdlbnQtPnB1c2hOb2RlVG9Gcm9u
dGVuZChub2RlKTsKICAgICB9CiAKICAgICByZXR1cm4gbm9kZUlkOwogfQogCi1SZWY8SW5zcGVj
dG9yOjpQcm90b2NvbDo6TGF5ZXJUcmVlOjpJbnRSZWN0PiBJbnNwZWN0b3JMYXllclRyZWVBZ2Vu
dDo6YnVpbGRPYmplY3RGb3JJbnRSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCitSZWY8UHJvdG9j
b2w6OkxheWVyVHJlZTo6SW50UmVjdD4gSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OmJ1aWxkT2Jq
ZWN0Rm9ySW50UmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQogewotICAgIHJldHVybiBJbnNwZWN0
b3I6OlByb3RvY29sOjpMYXllclRyZWU6OkludFJlY3Q6OmNyZWF0ZSgpCisgICAgcmV0dXJuIFBy
b3RvY29sOjpMYXllclRyZWU6OkludFJlY3Q6OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRYKHJlY3Qu
eCgpKQogICAgICAgICAuc2V0WShyZWN0LnkoKSkKICAgICAgICAgLnNldFdpZHRoKHJlY3Qud2lk
dGgoKSkKQEAgLTIzNSwxNyArMjM2LDE1IEBAIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpMYXll
clRyZWU6OkludFJlY3Q+IEluc3BlY3RvckxheWVyVHJlZUFnZW50OjpidWlsZE9iamVjCiAgICAg
ICAgIC5yZWxlYXNlKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OnJlYXNv
bnNGb3JDb21wb3NpdGluZ0xheWVyKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3Ry
aW5nJiBsYXllcklkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6TGF5ZXJUcmVlOjpDb21w
b3NpdGluZ1JlYXNvbnM+JiBjb21wb3NpdGluZ1JlYXNvbnNSZXN1bHQpCitQcm90b2NvbDo6RXJy
b3JTdHJpbmdPcjxSZWY8UHJvdG9jb2w6OkxheWVyVHJlZTo6Q29tcG9zaXRpbmdSZWFzb25zPj4g
SW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OnJlYXNvbnNGb3JDb21wb3NpdGluZ0xheWVyKGNvbnN0
IFByb3RvY29sOjpMYXllclRyZWU6OkxheWVySWQmIGxheWVySWQpCiB7CiAgICAgY29uc3QgUmVu
ZGVyTGF5ZXIqIHJlbmRlckxheWVyID0gbV9pZFRvTGF5ZXIuZ2V0KGxheWVySWQpOwogCi0gICAg
aWYgKCFyZW5kZXJMYXllcikgewotICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIHJlbmRl
ciBsYXllciBmb3IgZ2l2ZW4gbGF5ZXJJZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAg
ICBpZiAoIXJlbmRlckxheWVyKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk1pc3Np
bmcgcmVuZGVyIGxheWVyIGZvciBnaXZlbiBsYXllcklkIl9zKTsKIAogICAgIE9wdGlvblNldDxD
b21wb3NpdGluZ1JlYXNvbj4gcmVhc29ucyA9IHJlbmRlckxheWVyLT5jb21wb3NpdG9yKCkucmVh
c29uc0ZvckNvbXBvc2l0aW5nKCpyZW5kZXJMYXllcik7Ci0gICAgYXV0byBjb21wb3NpdGluZ1Jl
YXNvbnMgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpMYXllclRyZWU6OkNvbXBvc2l0aW5nUmVhc29u
czo6Y3JlYXRlKCkucmVsZWFzZSgpOworICAgIGF1dG8gY29tcG9zaXRpbmdSZWFzb25zID0gUHJv
dG9jb2w6OkxheWVyVHJlZTo6Q29tcG9zaXRpbmdSZWFzb25zOjpjcmVhdGUoKS5yZWxlYXNlKCk7
CiAKICAgICBpZiAocmVhc29ucy5jb250YWlucyhDb21wb3NpdGluZ1JlYXNvbjo6VHJhbnNmb3Jt
M0QpKQogICAgICAgICBjb21wb3NpdGluZ1JlYXNvbnMtPnNldFRyYW5zZm9ybTNEKHRydWUpOwpA
QCAtMzI0LDcgKzMyMyw3IEBAIHZvaWQgSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OnJlYXNvbnNG
b3JDb21wb3NpdGluZ0xheWVyKEVycm9yU3RyaW5nJiBlcnJvclN0cmluCiAgICAgaWYgKHJlYXNv
bnMuY29udGFpbnMoQ29tcG9zaXRpbmdSZWFzb246OlJvb3QpKQogICAgICAgICBjb21wb3NpdGlu
Z1JlYXNvbnMtPnNldFJvb3QodHJ1ZSk7CiAKLSAgICBjb21wb3NpdGluZ1JlYXNvbnNSZXN1bHQg
PSBXVEZNb3ZlKGNvbXBvc2l0aW5nUmVhc29ucyk7CisgICAgcmV0dXJuIFdURk1vdmUoY29tcG9z
aXRpbmdSZWFzb25zKTsKIH0KIAogU3RyaW5nIEluc3BlY3RvckxheWVyVHJlZUFnZW50OjpiaW5k
KGNvbnN0IFJlbmRlckxheWVyKiBsYXllcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQuaAppbmRleCA4NzIzNTgw
YzY1MzAxMGUxZWVhNjBkNDBlOWNkOWQ3MzIzNThkOWZiLi41ZjExNTMxY2M2NDQ0MjlmNDhkMWQ2
ZDgxNTUxZGQ4NGI5Zjk0Y2NjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
YWdlbnRzL0luc3BlY3RvckxheWVyVHJlZUFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2FnZW50cy9JbnNwZWN0b3JMYXllclRyZWVBZ2VudC5oCkBAIC00MiwyNCArNDIsMjIg
QEAgY2xhc3MgUHNldWRvRWxlbWVudDsKIGNsYXNzIFJlbmRlckVsZW1lbnQ7CiBjbGFzcyBSZW5k
ZXJMYXllcjsKIAotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7Ci0KIGNsYXNzIEluc3BlY3Rv
ckxheWVyVHJlZUFnZW50IGZpbmFsIDogcHVibGljIEluc3BlY3RvckFnZW50QmFzZSwgcHVibGlj
IEluc3BlY3Rvcjo6TGF5ZXJUcmVlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKICAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShJbnNwZWN0b3JMYXllclRyZWVBZ2VudCk7CiAgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQoV2Vi
QWdlbnRDb250ZXh0Jik7Ci0gICAgfkluc3BlY3RvckxheWVyVHJlZUFnZW50KCkgb3ZlcnJpZGU7
CisgICAgfkluc3BlY3RvckxheWVyVHJlZUFnZW50KCk7CiAKICAgICAvLyBJbnNwZWN0b3JBZ2Vu
dEJhc2UKLSAgICB2b2lkIGRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkZy
b250ZW5kUm91dGVyKiwgSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlciopIG92ZXJyaWRlOwot
ICAgIHZvaWQgd2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25u
ZWN0UmVhc29uKSBvdmVycmlkZTsKKyAgICB2b2lkIGRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2Vu
ZChJbnNwZWN0b3I6OkZyb250ZW5kUm91dGVyKiwgSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hl
ciopOworICAgIHZvaWQgd2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpE
aXNjb25uZWN0UmVhc29uKTsKIAogICAgIC8vIExheWVyVHJlZUJhY2tlbmREaXNwYXRjaGVySGFu
ZGxlcgotICAgIHZvaWQgZW5hYmxlKEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBk
aXNhYmxlKEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBsYXllcnNGb3JOb2RlKEVy
cm9yU3RyaW5nJiwgaW50IG5vZGVJZCwgUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6TGF5ZXJUcmVlOjpMYXllcj4+Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZWFzb25z
Rm9yQ29tcG9zaXRpbmdMYXllcihFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgbGF5ZXJJZCwg
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkxheWVyVHJlZTo6Q29tcG9zaXRpbmdSZWFzb25z
PiYpIG92ZXJyaWRlOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9p
ZD4gZW5hYmxlKCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lk
PiBkaXNhYmxlKCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8
SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpMYXllclRyZWU6OkxheWVyPj4+IGxh
eWVyc0Zvck5vZGUoSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQpOworICAgIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6Okxh
eWVyVHJlZTo6Q29tcG9zaXRpbmdSZWFzb25zPj4gcmVhc29uc0ZvckNvbXBvc2l0aW5nTGF5ZXIo
Y29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6TGF5ZXJUcmVlOjpMYXllcklkJik7CiAKICAgICAv
LyBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24KICAgICB2b2lkIGxheWVyVHJlZURpZENoYW5nZSgp
OwpAQCAtNzIsMTMgKzcwLDEzIEBAIHByaXZhdGU6CiAgICAgU3RyaW5nIGJpbmQoY29uc3QgUmVu
ZGVyTGF5ZXIqKTsKICAgICB2b2lkIHVuYmluZChjb25zdCBSZW5kZXJMYXllciopOwogCi0gICAg
dm9pZCBnYXRoZXJMYXllcnNVc2luZ1JlbmRlck9iamVjdEhpZXJhcmNoeShFcnJvclN0cmluZyYs
IFJlbmRlckVsZW1lbnQmLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29s
OjpMYXllclRyZWU6OkxheWVyPj4mKTsKLSAgICB2b2lkIGdhdGhlckxheWVyc1VzaW5nUmVuZGVy
TGF5ZXJIaWVyYXJjaHkoRXJyb3JTdHJpbmcmLCBSZW5kZXJMYXllciosIFJlZlB0cjxKU09OOjpB
cnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkxheWVyVHJlZTo6TGF5ZXI+PiYpOworICAgIHZv
aWQgZ2F0aGVyTGF5ZXJzVXNpbmdSZW5kZXJPYmplY3RIaWVyYXJjaHkoUmVuZGVyRWxlbWVudCYs
IEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6TGF5ZXJUcmVlOjpMYXllcj4mKTsK
KyAgICB2b2lkIGdhdGhlckxheWVyc1VzaW5nUmVuZGVyTGF5ZXJIaWVyYXJjaHkoUmVuZGVyTGF5
ZXIqLCBKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkxheWVyVHJlZTo6TGF5ZXI+
Jik7CiAKLSAgICBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6TGF5ZXJUcmVlOjpMYXllcj4gYnVp
bGRPYmplY3RGb3JMYXllcihFcnJvclN0cmluZyYsIFJlbmRlckxheWVyKik7CisgICAgUmVmPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkxheWVyVHJlZTo6TGF5ZXI+IGJ1aWxkT2JqZWN0Rm9yTGF5ZXIo
UmVuZGVyTGF5ZXIqKTsKICAgICBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6TGF5ZXJUcmVlOjpJ
bnRSZWN0PiBidWlsZE9iamVjdEZvckludFJlY3QoY29uc3QgSW50UmVjdCYpOwogCi0gICAgaW50
IGlkRm9yTm9kZShFcnJvclN0cmluZyYsIE5vZGUqKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29s
OjpET006Ok5vZGVJZCBpZEZvck5vZGUoTm9kZSopOwogCiAgICAgU3RyaW5nIGJpbmRQc2V1ZG9F
bGVtZW50KFBzZXVkb0VsZW1lbnQqKTsKICAgICB2b2lkIHVuYmluZFBzZXVkb0VsZW1lbnQoUHNl
dWRvRWxlbWVudCopOwpAQCAtODYsMTEgKzg0LDExIEBAIHByaXZhdGU6CiAgICAgc3RkOjp1bmlx
dWVfcHRyPEluc3BlY3Rvcjo6TGF5ZXJUcmVlRnJvbnRlbmREaXNwYXRjaGVyPiBtX2Zyb250ZW5k
RGlzcGF0Y2hlcjsKICAgICBSZWZQdHI8SW5zcGVjdG9yOjpMYXllclRyZWVCYWNrZW5kRGlzcGF0
Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKIAotICAgIEhhc2hNYXA8Y29uc3QgUmVuZGVyTGF5
ZXIqLCBTdHJpbmc+IG1fZG9jdW1lbnRMYXllclRvSWRNYXA7Ci0gICAgSGFzaE1hcDxTdHJpbmcs
IGNvbnN0IFJlbmRlckxheWVyKj4gbV9pZFRvTGF5ZXI7CisgICAgSGFzaE1hcDxjb25zdCBSZW5k
ZXJMYXllciosIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkxheWVyVHJlZTo6TGF5ZXJJZD4gbV9kb2N1
bWVudExheWVyVG9JZE1hcDsKKyAgICBIYXNoTWFwPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkxheWVy
VHJlZTo6TGF5ZXJJZCwgY29uc3QgUmVuZGVyTGF5ZXIqPiBtX2lkVG9MYXllcjsKIAotICAgIEhh
c2hNYXA8UHNldWRvRWxlbWVudCosIFN0cmluZz4gbV9wc2V1ZG9FbGVtZW50VG9JZE1hcDsKLSAg
ICBIYXNoTWFwPFN0cmluZywgUHNldWRvRWxlbWVudCo+IG1faWRUb1BzZXVkb0VsZW1lbnQ7Cisg
ICAgSGFzaE1hcDxQc2V1ZG9FbGVtZW50KiwgSW5zcGVjdG9yOjpQcm90b2NvbDo6TGF5ZXJUcmVl
OjpQc2V1ZG9FbGVtZW50SWQ+IG1fcHNldWRvRWxlbWVudFRvSWRNYXA7CisgICAgSGFzaE1hcDxJ
bnNwZWN0b3I6OlByb3RvY29sOjpMYXllclRyZWU6OlBzZXVkb0VsZW1lbnRJZCwgUHNldWRvRWxl
bWVudCo+IG1faWRUb1BzZXVkb0VsZW1lbnQ7CiAKICAgICBib29sIG1fc3VwcHJlc3NMYXllckNo
YW5nZUV2ZW50cyB7IGZhbHNlIH07CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2FnZW50cy9JbnNwZWN0b3JNZW1vcnlBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rvck1lbW9yeUFnZW50LmNwcAppbmRleCBkMGU4YWE2ODgz
MzY1OWU2NGFmZTU1MzQ3Y2I1NmY3NzNlYjdkN2E1Li4xNGNlNjcwOTZhMjQyNDQ5NGM1OTI0NjYw
ODZhMWQxZTI4Nzc0MTA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdl
bnRzL0luc3BlY3Rvck1lbW9yeUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvYWdlbnRzL0luc3BlY3Rvck1lbW9yeUFnZW50LmNwcApAQCAtNTQsNDAgKzU0LDM5IEBAIHZv
aWQgSW5zcGVjdG9yTWVtb3J5QWdlbnQ6OmRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChGcm9u
dGVuZFJvdXRlciosIEJhY2tlbmRECiAKIHZvaWQgSW5zcGVjdG9yTWVtb3J5QWdlbnQ6OndpbGxE
ZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKERpc2Nvbm5lY3RSZWFzb24pCiB7Ci0gICAgRXJyb3JT
dHJpbmcgaWdub3JlZDsKLSAgICBkaXNhYmxlKGlnbm9yZWQpOworICAgIGRpc2FibGUoKTsKIAog
ICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy5zZXRQZXJzaXN0ZW50TWVtb3J5QWdlbnQobnVsbHB0
cik7CiB9CiAKLXZvaWQgSW5zcGVjdG9yTWVtb3J5QWdlbnQ6OmVuYWJsZShFcnJvclN0cmluZyYg
ZXJyb3JTdHJpbmcpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JNZW1v
cnlBZ2VudDo6ZW5hYmxlKCkKIHsKLSAgICBpZiAobV9pbnN0cnVtZW50aW5nQWdlbnRzLmVuYWJs
ZWRNZW1vcnlBZ2VudCgpID09IHRoaXMpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWVtb3J5
IGRvbWFpbiBhbHJlYWR5IGVuYWJsZWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAg
aWYgKG1faW5zdHJ1bWVudGluZ0FnZW50cy5lbmFibGVkTWVtb3J5QWdlbnQoKSA9PSB0aGlzKQor
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk1lbW9yeSBkb21haW4gYWxyZWFkeSBlbmFi
bGVkIl9zKTsKIAogICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy5zZXRFbmFibGVkTWVtb3J5QWdl
bnQodGhpcyk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3Rvck1lbW9yeUFn
ZW50OjpkaXNhYmxlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZykKK1Byb3RvY29sOjpFcnJvclN0
cmluZ09yPHZvaWQ+IEluc3BlY3Rvck1lbW9yeUFnZW50OjpkaXNhYmxlKCkKIHsKLSAgICBpZiAo
bV9pbnN0cnVtZW50aW5nQWdlbnRzLmVuYWJsZWRNZW1vcnlBZ2VudCgpICE9IHRoaXMpIHsKLSAg
ICAgICAgZXJyb3JTdHJpbmcgPSAiTWVtb3J5IGRvbWFpbiBhbHJlYWR5IGRpc2FibGVkIl9zOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmIChtX2luc3RydW1lbnRpbmdBZ2VudHMuZW5h
YmxlZE1lbW9yeUFnZW50KCkgIT0gdGhpcykKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVk
KCJNZW1vcnkgZG9tYWluIGFscmVhZHkgZGlzYWJsZWQiX3MpOwogCiAgICAgbV9pbnN0cnVtZW50
aW5nQWdlbnRzLnNldEVuYWJsZWRNZW1vcnlBZ2VudChudWxscHRyKTsKIAogICAgIG1fdHJhY2tp
bmcgPSBmYWxzZTsKIAogICAgIFJlc291cmNlVXNhZ2VUaHJlYWQ6OnJlbW92ZU9ic2VydmVyKHRo
aXMpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JNZW1vcnlBZ2VudDo6
c3RhcnRUcmFja2luZyhFcnJvclN0cmluZyYpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lk
PiBJbnNwZWN0b3JNZW1vcnlBZ2VudDo6c3RhcnRUcmFja2luZygpCiB7CiAgICAgaWYgKG1fdHJh
Y2tpbmcpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIFJlc291
cmNlVXNhZ2VUaHJlYWQ6OmFkZE9ic2VydmVyKHRoaXMsIE1lbW9yeSwgW3RoaXNdIChjb25zdCBS
ZXNvdXJjZVVzYWdlRGF0YSYgZGF0YSkgewogICAgICAgICBjb2xsZWN0U2FtcGxlKGRhdGEpOwpA
QCAtOTYsMjQgKzk1LDI4IEBAIHZvaWQgSW5zcGVjdG9yTWVtb3J5QWdlbnQ6OnN0YXJ0VHJhY2tp
bmcoRXJyb3JTdHJpbmcmKQogICAgIG1fdHJhY2tpbmcgPSB0cnVlOwogCiAgICAgbV9mcm9udGVu
ZERpc3BhdGNoZXItPnRyYWNraW5nU3RhcnQobV9lbnZpcm9ubWVudC5leGVjdXRpb25TdG9wd2F0
Y2goKS5lbGFwc2VkVGltZSgpLnNlY29uZHMoKSk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12
b2lkIEluc3BlY3Rvck1lbW9yeUFnZW50OjpzdG9wVHJhY2tpbmcoRXJyb3JTdHJpbmcmKQorUHJv
dG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yTWVtb3J5QWdlbnQ6OnN0b3BUcmFj
a2luZygpCiB7CiAgICAgaWYgKCFtX3RyYWNraW5nKQotICAgICAgICByZXR1cm47CisgICAgICAg
IHJldHVybiB7IH07CiAKICAgICBSZXNvdXJjZVVzYWdlVGhyZWFkOjpyZW1vdmVPYnNlcnZlcih0
aGlzKTsKIAogICAgIG1fdHJhY2tpbmcgPSBmYWxzZTsKIAogICAgIG1fZnJvbnRlbmREaXNwYXRj
aGVyLT50cmFja2luZ0NvbXBsZXRlKG1fZW52aXJvbm1lbnQuZXhlY3V0aW9uU3RvcHdhdGNoKCku
ZWxhcHNlZFRpbWUoKS5zZWNvbmRzKCkpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAogdm9pZCBJ
bnNwZWN0b3JNZW1vcnlBZ2VudDo6ZGlkSGFuZGxlTWVtb3J5UHJlc3N1cmUoQ3JpdGljYWwgY3Jp
dGljYWwpCiB7CiAgICAgTWVtb3J5RnJvbnRlbmREaXNwYXRjaGVyOjpTZXZlcml0eSBzZXZlcml0
eSA9IGNyaXRpY2FsID09IENyaXRpY2FsOjpZZXMgPyBNZW1vcnlGcm9udGVuZERpc3BhdGNoZXI6
OlNldmVyaXR5OjpDcml0aWNhbCA6IE1lbW9yeUZyb250ZW5kRGlzcGF0Y2hlcjo6U2V2ZXJpdHk6
Ok5vbkNyaXRpY2FsOwotICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5tZW1vcnlQcmVzc3VyZSht
X2Vudmlyb25tZW50LmV4ZWN1dGlvblN0b3B3YXRjaCgpLmVsYXBzZWRUaW1lKCkuc2Vjb25kcygp
LCBzZXZlcml0eSk7CisgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPm1lbW9yeVByZXNzdXJlKG1f
ZW52aXJvbm1lbnQuZXhlY3V0aW9uU3RvcHdhdGNoKCkuZWxhcHNlZFRpbWUoKS5zZWNvbmRzKCks
IFByb3RvY29sOjpIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShzZXZlcml0eSkpOwogfQog
CiB2b2lkIEluc3BlY3Rvck1lbW9yeUFnZW50Ojpjb2xsZWN0U2FtcGxlKGNvbnN0IFJlc291cmNl
VXNhZ2VEYXRhJiBkYXRhKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Fn
ZW50cy9JbnNwZWN0b3JNZW1vcnlBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Fn
ZW50cy9JbnNwZWN0b3JNZW1vcnlBZ2VudC5oCmluZGV4IGM0NDc3MmRiZWFiZjkxMTRjZmE0NDdm
ZTk2ZTg0ZTNkMmI1MjYyOGUuLjFhNzY0MDhlZjkzYzk2MWI1YTAwYWFjMWY5MjVhODkzNjQzMjk0
NzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9y
TWVtb3J5QWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3Bl
Y3Rvck1lbW9yeUFnZW50LmgKQEAgLTM1LDI0ICszNSwyMiBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCiBjbGFzcyBJbnNwZWN0b3JNZW1v
cnlBZ2VudCBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3JBZ2VudEJhc2UsIHB1YmxpYyBJbnNwZWN0
b3I6Ok1lbW9yeUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7CiAgICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoSW5zcGVjdG9yTWVtb3J5QWdlbnQpOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OwogcHVibGljOgogICAgIEluc3BlY3Rvck1lbW9yeUFnZW50KFBhZ2VBZ2VudENvbnRleHQmKTsK
LSAgICB+SW5zcGVjdG9yTWVtb3J5QWdlbnQoKSBvdmVycmlkZTsKKyAgICB+SW5zcGVjdG9yTWVt
b3J5QWdlbnQoKTsKIAogICAgIC8vIEluc3BlY3RvckFnZW50QmFzZQotICAgIHZvaWQgZGlkQ3Jl
YXRlRnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRSb3V0ZXIqLCBJbnNwZWN0
b3I6OkJhY2tlbmREaXNwYXRjaGVyKikgb3ZlcnJpZGU7Ci0gICAgdm9pZCB3aWxsRGVzdHJveUZy
b250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24pIG92ZXJyaWRlOwor
ICAgIHZvaWQgZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRS
b3V0ZXIqLCBJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyKik7CisgICAgdm9pZCB3aWxsRGVz
dHJveUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24pOwogCiAg
ICAgLy8gTWVtb3J5QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyCi0gICAgdm9pZCBlbmFibGUoRXJy
b3JTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2b2lkIGRpc2FibGUoRXJyb3JTdHJpbmcmKSBvdmVy
cmlkZTsKLSAgICB2b2lkIHN0YXJ0VHJhY2tpbmcoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKLSAg
ICB2b2lkIHN0b3BUcmFja2luZyhFcnJvclN0cmluZyYpIG92ZXJyaWRlOworICAgIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZW5hYmxlKCk7CisgICAgSW5zcGVjdG9y
OjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBkaXNhYmxlKCk7CisgICAgSW5zcGVjdG9y
OjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzdGFydFRyYWNraW5nKCk7CisgICAgSW5z
cGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzdG9wVHJhY2tpbmcoKTsKIAog
ICAgIC8vIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbgogICAgIHZvaWQgZGlkSGFuZGxlTWVtb3J5
UHJlc3N1cmUoQ3JpdGljYWwpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2FnZW50cy9JbnNwZWN0b3JOZXR3b3JrQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2FnZW50cy9JbnNwZWN0b3JOZXR3b3JrQWdlbnQuY3BwCmluZGV4IDA5ZjI3N2YxOTVkMzU2
Y2Y2ZDMxNGZiZjcyY2ZjYmVhZDY2N2UxNWMuLjA5ZTZjNmQ0Yzk2ZDY0NDE4MjNkZDA1MTBiZjlk
YzkyNjg0OTcwMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9yTmV0d29ya0FnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
YWdlbnRzL0luc3BlY3Rvck5ldHdvcmtBZ2VudC5jcHAKQEAgLTE3Miw5ICsxNzIsOSBAQCBwcml2
YXRlOgogICAgIGludCBtX3N0YXR1c0NvZGU7CiB9OwogCi1SZWY8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6TmV0d29yazo6V2ViU29ja2V0RnJhbWU+IGJ1aWxkV2ViU29ja2V0TWVzc2FnZShjb25zdCBX
ZWJTb2NrZXRGcmFtZSYgZnJhbWUpCitSZWY8UHJvdG9jb2w6Ok5ldHdvcms6OldlYlNvY2tldEZy
YW1lPiBidWlsZFdlYlNvY2tldE1lc3NhZ2UoY29uc3QgV2ViU29ja2V0RnJhbWUmIGZyYW1lKQog
ewotICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpXZWJTb2NrZXRGcmFt
ZTo6Y3JlYXRlKCkKKyAgICByZXR1cm4gUHJvdG9jb2w6Ok5ldHdvcms6OldlYlNvY2tldEZyYW1l
OjpjcmVhdGUoKQogICAgICAgICAuc2V0T3Bjb2RlKGZyYW1lLm9wQ29kZSkKICAgICAgICAgLnNl
dE1hc2soZnJhbWUubWFza2VkKQogICAgICAgICAuc2V0UGF5bG9hZERhdGEoZnJhbWUub3BDb2Rl
ID09IDEgPyBTdHJpbmc6OmZyb21VVEY4V2l0aExhdGluMUZhbGxiYWNrKGZyYW1lLnBheWxvYWQs
IGZyYW1lLnBheWxvYWRMZW5ndGgpIDogYmFzZTY0RW5jb2RlKGZyYW1lLnBheWxvYWQsIGZyYW1l
LnBheWxvYWRMZW5ndGgpKQpAQCAtMjAxLDIwICsyMDEsMjEgQEAgdm9pZCBJbnNwZWN0b3JOZXR3
b3JrQWdlbnQ6OmRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5k
Um91dGUKIAogdm9pZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OndpbGxEZXN0cm95RnJvbnRlbmRB
bmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlzY29ubmVjdFJlYXNvbikKIHsKLSAgICBFcnJvclN0cmlu
ZyBpZ25vcmVkOwotICAgIGRpc2FibGUoaWdub3JlZCk7CisgICAgZGlzYWJsZSgpOwogfQogCi1z
dGF0aWMgUmVmPEpTT046Ok9iamVjdD4gYnVpbGRPYmplY3RGb3JIZWFkZXJzKGNvbnN0IEhUVFBI
ZWFkZXJNYXAmIGhlYWRlcnMpCitzdGF0aWMgUmVmPFByb3RvY29sOjpOZXR3b3JrOjpIZWFkZXJz
PiBidWlsZE9iamVjdEZvckhlYWRlcnMoY29uc3QgSFRUUEhlYWRlck1hcCYgaGVhZGVycykKIHsK
LSAgICBSZWY8SlNPTjo6T2JqZWN0PiBoZWFkZXJzT2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVh
dGUoKTsKKyAgICBhdXRvIGhlYWRlcnNWYWx1ZSA9IFByb3RvY29sOjpOZXR3b3JrOjpIZWFkZXJz
OjpjcmVhdGUoKS5yZWxlYXNlKCk7CiAKKyAgICBhdXRvIGhlYWRlcnNPYmplY3QgPSBoZWFkZXJz
VmFsdWUtPmFzT2JqZWN0KCk7CiAgICAgZm9yIChjb25zdCBhdXRvJiBoZWFkZXIgOiBoZWFkZXJz
KQogICAgICAgICBoZWFkZXJzT2JqZWN0LT5zZXRTdHJpbmcoaGVhZGVyLmtleSwgaGVhZGVyLnZh
bHVlKTsKLSAgICByZXR1cm4gaGVhZGVyc09iamVjdDsKKworICAgIHJldHVybiBoZWFkZXJzVmFs
dWU7CiB9CiAKLVJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpSZXNvdXJjZVRpbWlu
Zz4gSW5zcGVjdG9yTmV0d29ya0FnZW50OjpidWlsZE9iamVjdEZvclRpbWluZyhjb25zdCBOZXR3
b3JrTG9hZE1ldHJpY3MqIHRpbWluZywgUmVzb3VyY2VMb2FkZXImIHJlc291cmNlTG9hZGVyKQor
UmVmPFByb3RvY29sOjpOZXR3b3JrOjpSZXNvdXJjZVRpbWluZz4gSW5zcGVjdG9yTmV0d29ya0Fn
ZW50OjpidWlsZE9iamVjdEZvclRpbWluZyhjb25zdCBOZXR3b3JrTG9hZE1ldHJpY3MqIHRpbWlu
ZywgUmVzb3VyY2VMb2FkZXImIHJlc291cmNlTG9hZGVyKQogewogICAgIGF1dG8mIGxvYWRUaW1p
bmcgPSByZXNvdXJjZUxvYWRlci5sb2FkVGltaW5nKCk7CiAKQEAgLTIyNyw3ICsyMjgsNyBAQCBS
ZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6UmVzb3VyY2VUaW1pbmc+IEluc3BlY3Rv
ck5ldHdvcmtBZ2VudDo6YnVpbGRPYgogICAgICAgICB0aW1pbmcgPSAmZW1wdHkudmFsdWUoKTsK
ICAgICB9CiAKLSAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6UmVzb3Vy
Y2VUaW1pbmc6OmNyZWF0ZSgpCisgICAgcmV0dXJuIFByb3RvY29sOjpOZXR3b3JrOjpSZXNvdXJj
ZVRpbWluZzo6Y3JlYXRlKCkKICAgICAgICAgLnNldFN0YXJ0VGltZShlbGFwc2VkVGltZVNpbmNl
KGxvYWRUaW1pbmcuc3RhcnRUaW1lKCkpKQogICAgICAgICAuc2V0UmVkaXJlY3RTdGFydChlbGFw
c2VkVGltZVNpbmNlKGxvYWRUaW1pbmcucmVkaXJlY3RTdGFydCgpKSkKICAgICAgICAgLnNldFJl
ZGlyZWN0RW5kKGVsYXBzZWRUaW1lU2luY2UobG9hZFRpbWluZy5yZWRpcmVjdEVuZCgpKSkKQEAg
LTI0MywyNiArMjQ0LDI2IEBAIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpSZXNv
dXJjZVRpbWluZz4gSW5zcGVjdG9yTmV0d29ya0FnZW50OjpidWlsZE9iCiAgICAgICAgIC5yZWxl
YXNlKCk7CiB9CiAKLXN0YXRpYyBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpNZXRyaWNz
OjpQcmlvcml0eSB0b1Byb3RvY29sKE5ldHdvcmtMb2FkUHJpb3JpdHkgcHJpb3JpdHkpCitzdGF0
aWMgUHJvdG9jb2w6Ok5ldHdvcms6Ok1ldHJpY3M6OlByaW9yaXR5IHRvUHJvdG9jb2woTmV0d29y
a0xvYWRQcmlvcml0eSBwcmlvcml0eSkKIHsKICAgICBzd2l0Y2ggKHByaW9yaXR5KSB7CiAgICAg
Y2FzZSBOZXR3b3JrTG9hZFByaW9yaXR5OjpMb3c6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6
OlByb3RvY29sOjpOZXR3b3JrOjpNZXRyaWNzOjpQcmlvcml0eTo6TG93OworICAgICAgICByZXR1
cm4gUHJvdG9jb2w6Ok5ldHdvcms6Ok1ldHJpY3M6OlByaW9yaXR5OjpMb3c7CiAgICAgY2FzZSBO
ZXR3b3JrTG9hZFByaW9yaXR5OjpNZWRpdW06Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlBy
b3RvY29sOjpOZXR3b3JrOjpNZXRyaWNzOjpQcmlvcml0eTo6TWVkaXVtOworICAgICAgICByZXR1
cm4gUHJvdG9jb2w6Ok5ldHdvcms6Ok1ldHJpY3M6OlByaW9yaXR5OjpNZWRpdW07CiAgICAgY2Fz
ZSBOZXR3b3JrTG9hZFByaW9yaXR5OjpIaWdoOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQ
cm90b2NvbDo6TmV0d29yazo6TWV0cmljczo6UHJpb3JpdHk6OkhpZ2g7CisgICAgICAgIHJldHVy
biBQcm90b2NvbDo6TmV0d29yazo6TWV0cmljczo6UHJpb3JpdHk6OkhpZ2g7CiAgICAgY2FzZSBO
ZXR3b3JrTG9hZFByaW9yaXR5OjpVbmtub3duOgogICAgICAgICBicmVhazsKICAgICB9CiAKICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6
TmV0d29yazo6TWV0cmljczo6UHJpb3JpdHk6Ok1lZGl1bTsKKyAgICByZXR1cm4gUHJvdG9jb2w6
Ok5ldHdvcms6Ok1ldHJpY3M6OlByaW9yaXR5OjpNZWRpdW07CiB9CiAKLVJlZjxJbnNwZWN0b3I6
OlByb3RvY29sOjpOZXR3b3JrOjpNZXRyaWNzPiBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmJ1aWxk
T2JqZWN0Rm9yTWV0cmljcyhjb25zdCBOZXR3b3JrTG9hZE1ldHJpY3MmIG5ldHdvcmtMb2FkTWV0
cmljcykKK1JlZjxQcm90b2NvbDo6TmV0d29yazo6TWV0cmljcz4gSW5zcGVjdG9yTmV0d29ya0Fn
ZW50OjpidWlsZE9iamVjdEZvck1ldHJpY3MoY29uc3QgTmV0d29ya0xvYWRNZXRyaWNzJiBuZXR3
b3JrTG9hZE1ldHJpY3MpCiB7Ci0gICAgYXV0byBtZXRyaWNzID0gSW5zcGVjdG9yOjpQcm90b2Nv
bDo6TmV0d29yazo6TWV0cmljczo6Y3JlYXRlKCkucmVsZWFzZSgpOworICAgIGF1dG8gbWV0cmlj
cyA9IFByb3RvY29sOjpOZXR3b3JrOjpNZXRyaWNzOjpjcmVhdGUoKS5yZWxlYXNlKCk7CiAKICAg
ICBpZiAoIW5ldHdvcmtMb2FkTWV0cmljcy5wcm90b2NvbC5pc051bGwoKSkKICAgICAgICAgbWV0
cmljcy0+c2V0UHJvdG9jb2wobmV0d29ya0xvYWRNZXRyaWNzLnByb3RvY29sKTsKQEAgLTI4Niw3
ICsyODcsNyBAQCBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6TWV0cmljcz4gSW5z
cGVjdG9yTmV0d29ya0FnZW50OjpidWlsZE9iamVjdEZvcgogICAgIGlmIChuZXR3b3JrTG9hZE1l
dHJpY3MucmVzcG9uc2VCb2R5RGVjb2RlZFNpemUgIT0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50
NjRfdD46Om1heCgpKQogICAgICAgICBtZXRyaWNzLT5zZXRSZXNwb25zZUJvZHlEZWNvZGVkU2l6
ZShuZXR3b3JrTG9hZE1ldHJpY3MucmVzcG9uc2VCb2R5RGVjb2RlZFNpemUpOwogCi0gICAgYXV0
byBjb25uZWN0aW9uUGF5bG9hZCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlNlY3VyaXR5OjpDb25u
ZWN0aW9uOjpjcmVhdGUoKQorICAgIGF1dG8gY29ubmVjdGlvblBheWxvYWQgPSBQcm90b2NvbDo6
U2VjdXJpdHk6OkNvbm5lY3Rpb246OmNyZWF0ZSgpCiAgICAgICAgIC5yZWxlYXNlKCk7CiAKICAg
ICBpZiAoIW5ldHdvcmtMb2FkTWV0cmljcy50bHNQcm90b2NvbC5pc0VtcHR5KCkpCkBAIC0zMDAs
OSArMzAxLDkgQEAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6Ok1ldHJpY3M+IElu
c3BlY3Rvck5ldHdvcmtBZ2VudDo6YnVpbGRPYmplY3RGb3IKICAgICByZXR1cm4gbWV0cmljczsK
IH0KIAotc3RhdGljIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpSZXF1ZXN0PiBi
dWlsZE9iamVjdEZvclJlc291cmNlUmVxdWVzdChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVl
c3QpCitzdGF0aWMgUmVmPFByb3RvY29sOjpOZXR3b3JrOjpSZXF1ZXN0PiBidWlsZE9iamVjdEZv
clJlc291cmNlUmVxdWVzdChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCiB7Ci0gICAg
YXV0byByZXF1ZXN0T2JqZWN0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6UmVxdWVz
dDo6Y3JlYXRlKCkKKyAgICBhdXRvIHJlcXVlc3RPYmplY3QgPSBQcm90b2NvbDo6TmV0d29yazo6
UmVxdWVzdDo6Y3JlYXRlKCkKICAgICAgICAgLnNldFVybChyZXF1ZXN0LnVybCgpLnN0cmluZygp
KQogICAgICAgICAuc2V0TWV0aG9kKHJlcXVlc3QuaHR0cE1ldGhvZCgpKQogICAgICAgICAuc2V0
SGVhZGVycyhidWlsZE9iamVjdEZvckhlYWRlcnMocmVxdWVzdC5odHRwSGVhZGVyRmllbGRzKCkp
KQpAQCAtMzE0LDQ0ICszMTUsNDIgQEAgc3RhdGljIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpO
ZXR3b3JrOjpSZXF1ZXN0PiBidWlsZE9iamVjdEZvclJlc291cmNlUmVxdWVzdCgKICAgICByZXR1
cm4gcmVxdWVzdE9iamVjdDsKIH0KIAotc3RhdGljIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdv
cms6OlJlc3BvbnNlOjpTb3VyY2UgcmVzcG9uc2VTb3VyY2UoUmVzb3VyY2VSZXNwb25zZTo6U291
cmNlIHNvdXJjZSkKK3N0YXRpYyBQcm90b2NvbDo6TmV0d29yazo6UmVzcG9uc2U6OlNvdXJjZSBy
ZXNwb25zZVNvdXJjZShSZXNvdXJjZVJlc3BvbnNlOjpTb3VyY2Ugc291cmNlKQogewogICAgIHN3
aXRjaCAoc291cmNlKSB7CiAgICAgY2FzZSBSZXNvdXJjZVJlc3BvbnNlOjpTb3VyY2U6OkRPTUNh
Y2hlOgogICAgIGNhc2UgUmVzb3VyY2VSZXNwb25zZTo6U291cmNlOjpBcHBsaWNhdGlvbkNhY2hl
OgogICAgICAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yIEFwcGxpY2F0aW9uQ2FjaGUgaW4g
aW5zcGVjdG9yLgogICAgIGNhc2UgUmVzb3VyY2VSZXNwb25zZTo6U291cmNlOjpVbmtub3duOgot
ICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6UmVzcG9uc2U6OlNv
dXJjZTo6VW5rbm93bjsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpOZXR3b3JrOjpSZXNwb25z
ZTo6U291cmNlOjpVbmtub3duOwogICAgIGNhc2UgUmVzb3VyY2VSZXNwb25zZTo6U291cmNlOjpO
ZXR3b3JrOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6UmVz
cG9uc2U6OlNvdXJjZTo6TmV0d29yazsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpOZXR3b3Jr
OjpSZXNwb25zZTo6U291cmNlOjpOZXR3b3JrOwogICAgIGNhc2UgUmVzb3VyY2VSZXNwb25zZTo6
U291cmNlOjpNZW1vcnlDYWNoZToKICAgICBjYXNlIFJlc291cmNlUmVzcG9uc2U6OlNvdXJjZTo6
TWVtb3J5Q2FjaGVBZnRlclZhbGlkYXRpb246Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlBy
b3RvY29sOjpOZXR3b3JrOjpSZXNwb25zZTo6U291cmNlOjpNZW1vcnlDYWNoZTsKKyAgICAgICAg
cmV0dXJuIFByb3RvY29sOjpOZXR3b3JrOjpSZXNwb25zZTo6U291cmNlOjpNZW1vcnlDYWNoZTsK
ICAgICBjYXNlIFJlc291cmNlUmVzcG9uc2U6OlNvdXJjZTo6RGlza0NhY2hlOgogICAgIGNhc2Ug
UmVzb3VyY2VSZXNwb25zZTo6U291cmNlOjpEaXNrQ2FjaGVBZnRlclZhbGlkYXRpb246Ci0gICAg
ICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpSZXNwb25zZTo6U291cmNl
OjpEaXNrQ2FjaGU7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6TmV0d29yazo6UmVzcG9uc2U6
OlNvdXJjZTo6RGlza0NhY2hlOwogICAgIGNhc2UgUmVzb3VyY2VSZXNwb25zZTo6U291cmNlOjpT
ZXJ2aWNlV29ya2VyOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29y
azo6UmVzcG9uc2U6OlNvdXJjZTo6U2VydmljZVdvcmtlcjsKKyAgICAgICAgcmV0dXJuIFByb3Rv
Y29sOjpOZXR3b3JrOjpSZXNwb25zZTo6U291cmNlOjpTZXJ2aWNlV29ya2VyOwogICAgIGNhc2Ug
UmVzb3VyY2VSZXNwb25zZTo6U291cmNlOjpJbnNwZWN0b3JPdmVycmlkZToKLSAgICAgICAgcmV0
dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OlJlc3BvbnNlOjpTb3VyY2U6Okluc3Bl
Y3Rvck92ZXJyaWRlOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6Ok5ldHdvcms6OlJlc3BvbnNl
OjpTb3VyY2U6Okluc3BlY3Rvck92ZXJyaWRlOwogICAgIH0KIAogICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpSZXNwb25z
ZTo6U291cmNlOjpVbmtub3duOworICAgIHJldHVybiBQcm90b2NvbDo6TmV0d29yazo6UmVzcG9u
c2U6OlNvdXJjZTo6VW5rbm93bjsKIH0KIAotUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5l
dHdvcms6OlJlc3BvbnNlPiBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yUmVz
b3VyY2VSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgUmVzb3VyY2VM
b2FkZXIqIHJlc291cmNlTG9hZGVyKQorUmVmUHRyPFByb3RvY29sOjpOZXR3b3JrOjpSZXNwb25z
ZT4gSW5zcGVjdG9yTmV0d29ya0FnZW50OjpidWlsZE9iamVjdEZvclJlc291cmNlUmVzcG9uc2Uo
Y29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIFJlc291cmNlTG9hZGVyKiByZXNvdXJj
ZUxvYWRlcikKIHsKICAgICBpZiAocmVzcG9uc2UuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBu
dWxscHRyOwogCi0gICAgUmVmPEpTT046Ok9iamVjdD4gaGVhZGVycyA9IGJ1aWxkT2JqZWN0Rm9y
SGVhZGVycyhyZXNwb25zZS5odHRwSGVhZGVyRmllbGRzKCkpOwotCi0gICAgYXV0byByZXNwb25z
ZU9iamVjdCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OlJlc3BvbnNlOjpjcmVhdGUo
KQorICAgIGF1dG8gcmVzcG9uc2VPYmplY3QgPSBQcm90b2NvbDo6TmV0d29yazo6UmVzcG9uc2U6
OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRVcmwocmVzcG9uc2UudXJsKCkuc3RyaW5nKCkpCiAgICAg
ICAgIC5zZXRTdGF0dXMocmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKSkKICAgICAgICAgLnNldFN0
YXR1c1RleHQocmVzcG9uc2UuaHR0cFN0YXR1c1RleHQoKSkKLSAgICAgICAgLnNldEhlYWRlcnMo
V1RGTW92ZShoZWFkZXJzKSkKKyAgICAgICAgLnNldEhlYWRlcnMoYnVpbGRPYmplY3RGb3JIZWFk
ZXJzKHJlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZHMoKSkpCiAgICAgICAgIC5zZXRNaW1lVHlwZShy
ZXNwb25zZS5taW1lVHlwZSgpKQogICAgICAgICAuc2V0U291cmNlKHJlc3BvbnNlU291cmNlKHJl
c3BvbnNlLnNvdXJjZSgpKSkKICAgICAgICAgLnJlbGVhc2UoKTsKQEAgLTM2MCwxMSArMzU5LDEx
IEBAIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpSZXNwb25zZT4gSW5zcGVj
dG9yTmV0d29ya0FnZW50OjpidWlsZE9iamVjCiAgICAgICAgIHJlc3BvbnNlT2JqZWN0LT5zZXRU
aW1pbmcoYnVpbGRPYmplY3RGb3JUaW1pbmcocmVzcG9uc2UuZGVwcmVjYXRlZE5ldHdvcmtMb2Fk
TWV0cmljc09yTnVsbCgpLCAqcmVzb3VyY2VMb2FkZXIpKTsKIAogICAgIGlmIChhdXRvJiBjZXJ0
aWZpY2F0ZUluZm8gPSByZXNwb25zZS5jZXJ0aWZpY2F0ZUluZm8oKSkgewotICAgICAgICBhdXRv
IHNlY3VyaXR5UGF5bG9hZCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlNlY3VyaXR5OjpTZWN1cml0
eTo6Y3JlYXRlKCkKKyAgICAgICAgYXV0byBzZWN1cml0eVBheWxvYWQgPSBQcm90b2NvbDo6U2Vj
dXJpdHk6OlNlY3VyaXR5OjpjcmVhdGUoKQogICAgICAgICAgICAgLnJlbGVhc2UoKTsKIAogICAg
ICAgICBpZiAoYXV0byBjZXJ0aWZpY2F0ZVN1bW1hcnlJbmZvID0gY2VydGlmaWNhdGVJbmZvLnZh
bHVlKCkuc3VtbWFyeSgpKSB7Ci0gICAgICAgICAgICBhdXRvIGNlcnRpZmljYXRlUGF5bG9hZCA9
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlNlY3VyaXR5OjpDZXJ0aWZpY2F0ZTo6Y3JlYXRlKCkKKyAg
ICAgICAgICAgIGF1dG8gY2VydGlmaWNhdGVQYXlsb2FkID0gUHJvdG9jb2w6OlNlY3VyaXR5OjpD
ZXJ0aWZpY2F0ZTo6Y3JlYXRlKCkKICAgICAgICAgICAgICAgICAucmVsZWFzZSgpOwogCiAgICAg
ICAgICAgICBjZXJ0aWZpY2F0ZVBheWxvYWQtPnNldFN1YmplY3QoY2VydGlmaWNhdGVTdW1tYXJ5
SW5mby52YWx1ZSgpLnN1YmplY3QpOwpAQCAtMzk2LDE2ICszOTUsMTYgQEAgUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OlJlc3BvbnNlPiBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6
OmJ1aWxkT2JqZWMKICAgICByZXR1cm4gcmVzcG9uc2VPYmplY3Q7CiB9CiAKLVJlZjxJbnNwZWN0
b3I6OlByb3RvY29sOjpOZXR3b3JrOjpDYWNoZWRSZXNvdXJjZT4gSW5zcGVjdG9yTmV0d29ya0Fn
ZW50OjpidWlsZE9iamVjdEZvckNhY2hlZFJlc291cmNlKENhY2hlZFJlc291cmNlKiBjYWNoZWRS
ZXNvdXJjZSkKK1JlZjxQcm90b2NvbDo6TmV0d29yazo6Q2FjaGVkUmVzb3VyY2U+IEluc3BlY3Rv
ck5ldHdvcmtBZ2VudDo6YnVpbGRPYmplY3RGb3JDYWNoZWRSZXNvdXJjZShDYWNoZWRSZXNvdXJj
ZSogY2FjaGVkUmVzb3VyY2UpCiB7Ci0gICAgYXV0byByZXNvdXJjZU9iamVjdCA9IEluc3BlY3Rv
cjo6UHJvdG9jb2w6Ok5ldHdvcms6OkNhY2hlZFJlc291cmNlOjpjcmVhdGUoKQorICAgIGF1dG8g
cmVzb3VyY2VPYmplY3QgPSBQcm90b2NvbDo6TmV0d29yazo6Q2FjaGVkUmVzb3VyY2U6OmNyZWF0
ZSgpCiAgICAgICAgIC5zZXRVcmwoY2FjaGVkUmVzb3VyY2UtPnVybCgpLnN0cmluZygpKQogICAg
ICAgICAuc2V0VHlwZShJbnNwZWN0b3JQYWdlQWdlbnQ6OmNhY2hlZFJlc291cmNlVHlwZUpTT04o
KmNhY2hlZFJlc291cmNlKSkKICAgICAgICAgLnNldEJvZHlTaXplKGNhY2hlZFJlc291cmNlLT5l
bmNvZGVkU2l6ZSgpKQogICAgICAgICAucmVsZWFzZSgpOwogCi0gICAgYXV0byByZXNvdXJjZVJl
c3BvbnNlID0gYnVpbGRPYmplY3RGb3JSZXNvdXJjZVJlc3BvbnNlKGNhY2hlZFJlc291cmNlLT5y
ZXNwb25zZSgpLCBjYWNoZWRSZXNvdXJjZS0+bG9hZGVyKCkpOwotICAgIHJlc291cmNlT2JqZWN0
LT5zZXRSZXNwb25zZShXVEZNb3ZlKHJlc291cmNlUmVzcG9uc2UpKTsKKyAgICBpZiAoYXV0byBy
ZXNvdXJjZVJlc3BvbnNlID0gYnVpbGRPYmplY3RGb3JSZXNvdXJjZVJlc3BvbnNlKGNhY2hlZFJl
c291cmNlLT5yZXNwb25zZSgpLCBjYWNoZWRSZXNvdXJjZS0+bG9hZGVyKCkpKQorICAgICAgICBy
ZXNvdXJjZU9iamVjdC0+c2V0UmVzcG9uc2UocmVzb3VyY2VSZXNwb25zZS5yZWxlYXNlTm9uTnVs
bCgpKTsKIAogICAgIFN0cmluZyBzb3VyY2VNYXBwaW5nVVJMID0gSW5zcGVjdG9yUGFnZUFnZW50
Ojpzb3VyY2VNYXBVUkxGb3JSZXNvdXJjZShjYWNoZWRSZXNvdXJjZSk7CiAgICAgaWYgKCFzb3Vy
Y2VNYXBwaW5nVVJMLmlzRW1wdHkoKSkKQEAgLTQyOSw5ICs0MjgsOSBAQCB2b2lkIEluc3BlY3Rv
ck5ldHdvcmtBZ2VudDo6d2lsbFNlbmRSZXF1ZXN0KHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwg
RG9jdW1lbnRMbwogICAgIGRvdWJsZSBzZW5kVGltZXN0YW1wID0gdGltZXN0YW1wKCk7CiAgICAg
V2FsbFRpbWUgd2FsbHRpbWUgPSBXYWxsVGltZTo6bm93KCk7CiAKLSAgICBTdHJpbmcgcmVxdWVz
dElkID0gSWRlbnRpZmllcnNGYWN0b3J5OjpyZXF1ZXN0SWQoaWRlbnRpZmllcik7Ci0gICAgU3Ry
aW5nIGZyYW1lSWQgPSBmcmFtZUlkZW50aWZpZXIobG9hZGVyKTsKLSAgICBTdHJpbmcgbG9hZGVy
SWQgPSBsb2FkZXJJZGVudGlmaWVyKGxvYWRlcik7CisgICAgYXV0byByZXF1ZXN0SWQgPSBJZGVu
dGlmaWVyc0ZhY3Rvcnk6OnJlcXVlc3RJZChpZGVudGlmaWVyKTsKKyAgICBhdXRvIGZyYW1lSWQg
PSBmcmFtZUlkZW50aWZpZXIobG9hZGVyKTsKKyAgICBhdXRvIGxvYWRlcklkID0gbG9hZGVySWRl
bnRpZmllcihsb2FkZXIpOwogICAgIFN0cmluZyB0YXJnZXRJZCA9IHJlcXVlc3QuaW5pdGlhdG9y
SWRlbnRpZmllcigpOwogCiAgICAgaWYgKHR5cGUgPT0gSW5zcGVjdG9yUGFnZUFnZW50OjpPdGhl
clJlc291cmNlKSB7CkBAIC00NjIsNyArNDYxLDEwIEBAIHZvaWQgSW5zcGVjdG9yTmV0d29ya0Fn
ZW50Ojp3aWxsU2VuZFJlcXVlc3QodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBEb2N1bWVudExv
CiAgICAgYXV0byBpbml0aWF0b3JPYmplY3QgPSBidWlsZEluaXRpYXRvck9iamVjdChkb2N1bWVu
dCwgJnJlcXVlc3QpOwogCiAgICAgU3RyaW5nIHVybCA9IGxvYWRlciA/IGxvYWRlci0+dXJsKCku
c3RyaW5nKCkgOiByZXF1ZXN0LnVybCgpLnN0cmluZygpOwotICAgIG1fZnJvbnRlbmREaXNwYXRj
aGVyLT5yZXF1ZXN0V2lsbEJlU2VudChyZXF1ZXN0SWQsIGZyYW1lSWQsIGxvYWRlcklkLCB1cmws
IGJ1aWxkT2JqZWN0Rm9yUmVzb3VyY2VSZXF1ZXN0KHJlcXVlc3QpLCBzZW5kVGltZXN0YW1wLCB3
YWxsdGltZS5zZWNvbmRzU2luY2VFcG9jaCgpLnNlY29uZHMoKSwgaW5pdGlhdG9yT2JqZWN0LCBi
dWlsZE9iamVjdEZvclJlc291cmNlUmVzcG9uc2UocmVkaXJlY3RSZXNwb25zZSwgbnVsbHB0ciks
IHR5cGUgIT0gSW5zcGVjdG9yUGFnZUFnZW50OjpPdGhlclJlc291cmNlID8gJnByb3RvY29sUmVz
b3VyY2VUeXBlIDogbnVsbHB0ciwgdGFyZ2V0SWQuaXNFbXB0eSgpID8gbnVsbHB0ciA6ICZ0YXJn
ZXRJZCk7CisgICAgT3B0aW9uYWw8UHJvdG9jb2w6OlBhZ2U6OlJlc291cmNlVHlwZT4gdHlwZVBh
eWxvYWQ7CisgICAgaWYgKHR5cGUgIT0gSW5zcGVjdG9yUGFnZUFnZW50OjpPdGhlclJlc291cmNl
KQorICAgICAgICB0eXBlUGF5bG9hZCA9IHByb3RvY29sUmVzb3VyY2VUeXBlOworICAgIG1fZnJv
bnRlbmREaXNwYXRjaGVyLT5yZXF1ZXN0V2lsbEJlU2VudChyZXF1ZXN0SWQsIGZyYW1lSWQsIGxv
YWRlcklkLCB1cmwsIGJ1aWxkT2JqZWN0Rm9yUmVzb3VyY2VSZXF1ZXN0KHJlcXVlc3QpLCBzZW5k
VGltZXN0YW1wLCB3YWxsdGltZS5zZWNvbmRzU2luY2VFcG9jaCgpLnNlY29uZHMoKSwgV1RGTW92
ZShpbml0aWF0b3JPYmplY3QpLCBidWlsZE9iamVjdEZvclJlc291cmNlUmVzcG9uc2UocmVkaXJl
Y3RSZXNwb25zZSwgbnVsbHB0ciksIFdURk1vdmUodHlwZVBheWxvYWQpLCB0YXJnZXRJZCk7CiB9
CiAKIHN0YXRpYyBJbnNwZWN0b3JQYWdlQWdlbnQ6OlJlc291cmNlVHlwZSByZXNvdXJjZVR5cGVG
b3JDYWNoZWRSZXNvdXJjZShDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UpCkBAIC01MTQsNyArNTE2
LDggQEAgdm9pZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmRpZFJlY2VpdmVSZXNwb25zZSh1bnNp
Z25lZCBsb25nIGlkZW50aWZpZXIsIERvY3VtZW4KICAgICAgICAgfSk7CiAgICAgfQogCi0gICAg
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OlJlc3BvbnNlPiByZXNvdXJjZVJl
c3BvbnNlID0gYnVpbGRPYmplY3RGb3JSZXNvdXJjZVJlc3BvbnNlKHJlYWxSZXNwb25zZSA/ICpy
ZWFsUmVzcG9uc2UgOiByZXNwb25zZSwgcmVzb3VyY2VMb2FkZXIpOworICAgIFJlZlB0cjxQcm90
b2NvbDo6TmV0d29yazo6UmVzcG9uc2U+IHJlc291cmNlUmVzcG9uc2UgPSBidWlsZE9iamVjdEZv
clJlc291cmNlUmVzcG9uc2UocmVhbFJlc3BvbnNlID8gKnJlYWxSZXNwb25zZSA6IHJlc3BvbnNl
LCByZXNvdXJjZUxvYWRlcik7CisgICAgQVNTRVJUKHJlc291cmNlUmVzcG9uc2UpOwogCiAgICAg
Ym9vbCBpc05vdE1vZGlmaWVkID0gcmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKSA9PSAzMDQ7CiAK
QEAgLTUyNyw3ICs1MzAsNyBAQCB2b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6ZGlkUmVjZWl2
ZVJlc3BvbnNlKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgRG9jdW1lbgogICAgIGlmIChjYWNo
ZWRSZXNvdXJjZSkgewogICAgICAgICAvLyBVc2UgbWltZSB0eXBlIGZyb20gY2FjaGVkIHJlc291
cmNlIGluIGNhc2UgdGhlIG9uZSBpbiByZXNwb25zZSBpcyBlbXB0eS4KICAgICAgICAgaWYgKHJl
c291cmNlUmVzcG9uc2UgJiYgcmVzcG9uc2UubWltZVR5cGUoKS5pc0VtcHR5KCkpCi0gICAgICAg
ICAgICByZXNvdXJjZVJlc3BvbnNlLT5zZXRTdHJpbmcoSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0
d29yazo6UmVzcG9uc2U6Ok1pbWVUeXBlLCBjYWNoZWRSZXNvdXJjZS0+cmVzcG9uc2UoKS5taW1l
VHlwZSgpKTsKKyAgICAgICAgICAgIHJlc291cmNlUmVzcG9uc2UtPnNldFN0cmluZyhQcm90b2Nv
bDo6TmV0d29yazo6UmVzcG9uc2U6Om1pbWVUeXBlS2V5LCBjYWNoZWRSZXNvdXJjZS0+cmVzcG9u
c2UoKS5taW1lVHlwZSgpKTsKICAgICAgICAgbV9yZXNvdXJjZXNEYXRhLT5hZGRDYWNoZWRSZXNv
dXJjZShyZXF1ZXN0SWQsIGNhY2hlZFJlc291cmNlKTsKICAgICB9CiAKQEAgLTU0OSwyMSArNTUy
LDIxIEBAIHZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50OjpkaWRSZWNlaXZlUmVzcG9uc2UodW5z
aWduZWQgbG9uZyBpZGVudGlmaWVyLCBEb2N1bWVuCiAgICAgICAgICAgICAgICAgbV9yZXNvdXJj
ZXNEYXRhLT5tYXliZUFkZFJlc291cmNlRGF0YShyZXF1ZXN0SWQsIHByZXZpb3VzQnVmZmVyLT5k
YXRhKCksIHByZXZpb3VzQnVmZmVyLT5zaXplKCkpOwogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgCi0gICAgICAgICAgICByZXNvdXJjZVJlc3BvbnNlLT5zZXRTdHJpbmcoIm1pbWVUeXBlIl9z
LCBwcmV2aW91c1Jlc291cmNlRGF0YS0+bWltZVR5cGUoKSk7CisgICAgICAgICAgICByZXNvdXJj
ZVJlc3BvbnNlLT5zZXRTdHJpbmcoUHJvdG9jb2w6Ok5ldHdvcms6OlJlc3BvbnNlOjptaW1lVHlw
ZUtleSwgcHJldmlvdXNSZXNvdXJjZURhdGEtPm1pbWVUeXBlKCkpOwogICAgICAgICAgICAgCi0g
ICAgICAgICAgICByZXNvdXJjZVJlc3BvbnNlLT5zZXRJbnRlZ2VyKCJzdGF0dXMiX3MsIHByZXZp
b3VzUmVzb3VyY2VEYXRhLT5odHRwU3RhdHVzQ29kZSgpKTsKLSAgICAgICAgICAgIHJlc291cmNl
UmVzcG9uc2UtPnNldFN0cmluZygic3RhdHVzVGV4dCJfcywgcHJldmlvdXNSZXNvdXJjZURhdGEt
Pmh0dHBTdGF0dXNUZXh0KCkpOworICAgICAgICAgICAgcmVzb3VyY2VSZXNwb25zZS0+c2V0SW50
ZWdlcihQcm90b2NvbDo6TmV0d29yazo6UmVzcG9uc2U6OnN0YXR1c0tleSwgcHJldmlvdXNSZXNv
dXJjZURhdGEtPmh0dHBTdGF0dXNDb2RlKCkpOworICAgICAgICAgICAgcmVzb3VyY2VSZXNwb25z
ZS0+c2V0U3RyaW5nKFByb3RvY29sOjpOZXR3b3JrOjpSZXNwb25zZTo6c3RhdHVzVGV4dEtleSwg
cHJldmlvdXNSZXNvdXJjZURhdGEtPmh0dHBTdGF0dXNUZXh0KCkpOwogICAgICAgICAgICAgCi0g
ICAgICAgICAgICByZXNvdXJjZVJlc3BvbnNlLT5zZXRTdHJpbmcoInNvdXJjZSJfcywgSW5zcGVj
dG9yOjpQcm90b2NvbDo6SW5zcGVjdG9ySGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUoSW5z
cGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6UmVzcG9uc2U6OlNvdXJjZTo6RGlza0NhY2hlKSk7
CisgICAgICAgICAgICByZXNvdXJjZVJlc3BvbnNlLT5zZXRTdHJpbmcoUHJvdG9jb2w6Ok5ldHdv
cms6OlJlc3BvbnNlOjpzb3VyY2VLZXksIFByb3RvY29sOjpIZWxwZXJzOjpnZXRFbnVtQ29uc3Rh
bnRWYWx1ZShQcm90b2NvbDo6TmV0d29yazo6UmVzcG9uc2U6OlNvdXJjZTo6RGlza0NhY2hlKSk7
CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBTdHJpbmcgZnJhbWVJZCA9IGZyYW1lSWRlbnRpZmll
cihsb2FkZXIpOwotICAgIFN0cmluZyBsb2FkZXJJZCA9IGxvYWRlcklkZW50aWZpZXIobG9hZGVy
KTsKKyAgICBQcm90b2NvbDo6TmV0d29yazo6RnJhbWVJZCBmcmFtZUlkID0gZnJhbWVJZGVudGlm
aWVyKGxvYWRlcik7CisgICAgUHJvdG9jb2w6Ok5ldHdvcms6OkxvYWRlcklkIGxvYWRlcklkID0g
bG9hZGVySWRlbnRpZmllcihsb2FkZXIpOwogCiAgICAgbV9yZXNvdXJjZXNEYXRhLT5yZXNwb25z
ZVJlY2VpdmVkKHJlcXVlc3RJZCwgZnJhbWVJZCwgcmVzcG9uc2UsIHR5cGUsIHNob3VsZEZvcmNl
QnVmZmVyaW5nTmV0d29ya1Jlc291cmNlRGF0YSgpKTsKIAotICAgIG1fZnJvbnRlbmREaXNwYXRj
aGVyLT5yZXNwb25zZVJlY2VpdmVkKHJlcXVlc3RJZCwgZnJhbWVJZCwgbG9hZGVySWQsIHRpbWVz
dGFtcCgpLCBJbnNwZWN0b3JQYWdlQWdlbnQ6OnJlc291cmNlVHlwZUpTT04odHlwZSksIHJlc291
cmNlUmVzcG9uc2UpOworICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5yZXNwb25zZVJlY2VpdmVk
KHJlcXVlc3RJZCwgZnJhbWVJZCwgbG9hZGVySWQsIHRpbWVzdGFtcCgpLCBJbnNwZWN0b3JQYWdl
QWdlbnQ6OnJlc291cmNlVHlwZUpTT04odHlwZSksIHJlc291cmNlUmVzcG9uc2UucmVsZWFzZU5v
bk51bGwoKSk7CiAKICAgICAvLyBJZiB3ZSByZXZhbGlkYXRlZCB0aGUgcmVzb3VyY2UgYW5kIGdv
dCBOb3QgbW9kaWZpZWQsIHNlbmQgY29udGVudCBsZW5ndGggZm9sbG93aW5nIGRpZFJlY2VpdmVS
ZXNwb25zZQogICAgIC8vIGFzIHRoZXJlIHdpbGwgYmUgbm8gY2FsbHMgdG8gZGlkUmVjZWl2ZURh
dGEgZnJvbSB0aGUgbmV0d29yayBzdGFjay4KQEAgLTYyMSw5ICs2MjQsOSBAQCB2b2lkIEluc3Bl
Y3Rvck5ldHdvcmtBZ2VudDo6ZGlkRmluaXNoTG9hZGluZyh1bnNpZ25lZCBsb25nIGlkZW50aWZp
ZXIsIERvY3VtZW50TAogICAgICAgICAgICAgcmVhbE1ldHJpY3MgPSBwbGF0Zm9ybVN0cmF0ZWdp
ZXMoKS0+bG9hZGVyU3RyYXRlZ3koKS0+bmV0d29ya01ldHJpY3NGcm9tUmVzb3VyY2VMb2FkSWRl
bnRpZmllcihpZGVudGlmaWVyKS5pc29sYXRlZENvcHkoKTsKICAgICAgICAgfSk7CiAgICAgfQot
ICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpNZXRyaWNzPiBtZXRyaWNz
ID0gYnVpbGRPYmplY3RGb3JNZXRyaWNzKHJlYWxNZXRyaWNzID8gKnJlYWxNZXRyaWNzIDogbmV0
d29ya0xvYWRNZXRyaWNzKTsKKyAgICBSZWZQdHI8UHJvdG9jb2w6Ok5ldHdvcms6Ok1ldHJpY3M+
IG1ldHJpY3MgPSBidWlsZE9iamVjdEZvck1ldHJpY3MocmVhbE1ldHJpY3MgPyAqcmVhbE1ldHJp
Y3MgOiBuZXR3b3JrTG9hZE1ldHJpY3MpOwogCi0gICAgbV9mcm9udGVuZERpc3BhdGNoZXItPmxv
YWRpbmdGaW5pc2hlZChyZXF1ZXN0SWQsIGVsYXBzZWRGaW5pc2hUaW1lLCAhc291cmNlTWFwcGlu
Z1VSTC5pc0VtcHR5KCkgPyAmc291cmNlTWFwcGluZ1VSTCA6IG51bGxwdHIsIG1ldHJpY3MpOwor
ICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5sb2FkaW5nRmluaXNoZWQocmVxdWVzdElkLCBlbGFw
c2VkRmluaXNoVGltZSwgc291cmNlTWFwcGluZ1VSTCwgV1RGTW92ZShtZXRyaWNzKSk7CiB9CiAK
IHZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50OjpkaWRGYWlsTG9hZGluZyh1bnNpZ25lZCBsb25n
IGlkZW50aWZpZXIsIERvY3VtZW50TG9hZGVyKiBsb2FkZXIsIGNvbnN0IFJlc291cmNlRXJyb3Im
IGVycm9yKQpAQCAtNjQyLDggKzY0NSw3IEBAIHZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50Ojpk
aWRGYWlsTG9hZGluZyh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIERvY3VtZW50TG9hCiAgICAg
ICAgIH0KICAgICB9CiAKLSAgICBib29sIGNhbmNlbGVkID0gZXJyb3IuaXNDYW5jZWxsYXRpb24o
KTsKLSAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+bG9hZGluZ0ZhaWxlZChyZXF1ZXN0SWQsIHRp
bWVzdGFtcCgpLCBlcnJvci5sb2NhbGl6ZWREZXNjcmlwdGlvbigpLCBjYW5jZWxlZCA/ICZjYW5j
ZWxlZCA6IG51bGxwdHIpOworICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5sb2FkaW5nRmFpbGVk
KHJlcXVlc3RJZCwgdGltZXN0YW1wKCksIGVycm9yLmxvY2FsaXplZERlc2NyaXB0aW9uKCksIGVy
cm9yLmlzQ2FuY2VsbGF0aW9uKCkpOwogfQogCiB2b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6
ZGlkTG9hZFJlc291cmNlRnJvbU1lbW9yeUNhY2hlKERvY3VtZW50TG9hZGVyKiBsb2FkZXIsIENh
Y2hlZFJlc291cmNlJiByZXNvdXJjZSkKQEAgLTY1NCw4ICs2NTYsOCBAQCB2b2lkIEluc3BlY3Rv
ck5ldHdvcmtBZ2VudDo6ZGlkTG9hZFJlc291cmNlRnJvbU1lbW9yeUNhY2hlKERvY3VtZW50TG9h
ZGVyKiBsb2FkZQogCiAgICAgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyID0gbG9hZGVyLT5mcmFt
ZSgpLT5wYWdlKCktPnByb2dyZXNzKCkuY3JlYXRlVW5pcXVlSWRlbnRpZmllcigpOwogICAgIFN0
cmluZyByZXF1ZXN0SWQgPSBJZGVudGlmaWVyc0ZhY3Rvcnk6OnJlcXVlc3RJZChpZGVudGlmaWVy
KTsKLSAgICBTdHJpbmcgbG9hZGVySWQgPSBsb2FkZXJJZGVudGlmaWVyKGxvYWRlcik7Ci0gICAg
U3RyaW5nIGZyYW1lSWQgPSBmcmFtZUlkZW50aWZpZXIobG9hZGVyKTsKKyAgICBQcm90b2NvbDo6
TmV0d29yazo6TG9hZGVySWQgbG9hZGVySWQgPSBsb2FkZXJJZGVudGlmaWVyKGxvYWRlcik7Cisg
ICAgUHJvdG9jb2w6Ok5ldHdvcms6OkZyYW1lSWQgZnJhbWVJZCA9IGZyYW1lSWRlbnRpZmllcihs
b2FkZXIpOwogCiAgICAgbV9yZXNvdXJjZXNEYXRhLT5yZXNvdXJjZUNyZWF0ZWQocmVxdWVzdElk
LCBsb2FkZXJJZCwgcmVzb3VyY2UpOwogCkBAIC02NjUsNyArNjY3LDcgQEAgdm9pZCBJbnNwZWN0
b3JOZXR3b3JrQWdlbnQ6OmRpZExvYWRSZXNvdXJjZUZyb21NZW1vcnlDYWNoZShEb2N1bWVudExv
YWRlciogbG9hZGUKICAgICAvLyBpbnN0ZWFkIG9mIHdoYXRldmVyIFJlc291cmNlUmVzcG9uc2U6
OlNvdXJjZSB0aGUgQ2FjaGVkUmVzb3VyY2VzJ3MgcmVzcG9uc2UgaGFzLgogICAgIC8vIFRoZSBm
cm9udGVuZCBhbHJlYWR5IGtub3dzIGZvciBjZXJ0YWluIHRoYXQgdGhpcyB3YXMgc2VydmVkIGZy
b20gdGhlIG1lbW9yeSBjYWNoZS4KIAotICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5yZXF1ZXN0
U2VydmVkRnJvbU1lbW9yeUNhY2hlKHJlcXVlc3RJZCwgZnJhbWVJZCwgbG9hZGVySWQsIGxvYWRl
ci0+dXJsKCkuc3RyaW5nKCksIHRpbWVzdGFtcCgpLCBpbml0aWF0b3JPYmplY3QsIGJ1aWxkT2Jq
ZWN0Rm9yQ2FjaGVkUmVzb3VyY2UoJnJlc291cmNlKSk7CisgICAgbV9mcm9udGVuZERpc3BhdGNo
ZXItPnJlcXVlc3RTZXJ2ZWRGcm9tTWVtb3J5Q2FjaGUocmVxdWVzdElkLCBmcmFtZUlkLCBsb2Fk
ZXJJZCwgbG9hZGVyLT51cmwoKS5zdHJpbmcoKSwgdGltZXN0YW1wKCksIFdURk1vdmUoaW5pdGlh
dG9yT2JqZWN0KSwgYnVpbGRPYmplY3RGb3JDYWNoZWRSZXNvdXJjZSgmcmVzb3VyY2UpKTsKIH0K
IAogdm9pZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OnNldEluaXRpYWxTY3JpcHRDb250ZW50KHVu
c2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBzb3VyY2VTdHJpbmcpCkBAIC03
MjksMjYgKzczMSwyNiBAQCB2b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6ZGlkU2NoZWR1bGVT
dHlsZVJlY2FsY3VsYXRpb24oRG9jdW1lbnQmIGRvY3VtZW50KQogICAgICAgICBtX3N0eWxlUmVj
YWxjdWxhdGlvbkluaXRpYXRvciA9IGJ1aWxkSW5pdGlhdG9yT2JqZWN0KCZkb2N1bWVudCk7CiB9
CiAKLVJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpJbml0aWF0b3I+IEluc3Bl
Y3Rvck5ldHdvcmtBZ2VudDo6YnVpbGRJbml0aWF0b3JPYmplY3QoRG9jdW1lbnQqIGRvY3VtZW50
LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QqIHJlc291cmNlUmVxdWVzdCkKK1JlZjxQcm90b2NvbDo6
TmV0d29yazo6SW5pdGlhdG9yPiBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmJ1aWxkSW5pdGlhdG9y
T2JqZWN0KERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0KiByZXNvdXJj
ZVJlcXVlc3QpCiB7CiAgICAgLy8gRklYTUU6IFdvcmtlciBzdXBwb3J0LgogICAgIGlmICghaXNN
YWluVGhyZWFkKCkpIHsKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdv
cms6OkluaXRpYXRvcjo6Y3JlYXRlKCkKLSAgICAgICAgICAgIC5zZXRUeXBlKEluc3BlY3Rvcjo6
UHJvdG9jb2w6Ok5ldHdvcms6OkluaXRpYXRvcjo6VHlwZTo6T3RoZXIpCisgICAgICAgIHJldHVy
biBQcm90b2NvbDo6TmV0d29yazo6SW5pdGlhdG9yOjpjcmVhdGUoKQorICAgICAgICAgICAgLnNl
dFR5cGUoUHJvdG9jb2w6Ok5ldHdvcms6OkluaXRpYXRvcjo6VHlwZTo6T3RoZXIpCiAgICAgICAg
ICAgICAucmVsZWFzZSgpOwogICAgIH0KIAotICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29s
OjpOZXR3b3JrOjpJbml0aWF0b3I+IGluaXRpYXRvck9iamVjdDsKKyAgICBSZWZQdHI8UHJvdG9j
b2w6Ok5ldHdvcms6OkluaXRpYXRvcj4gaW5pdGlhdG9yT2JqZWN0OwogCiAgICAgUmVmPFNjcmlw
dENhbGxTdGFjaz4gc3RhY2tUcmFjZSA9IGNyZWF0ZVNjcmlwdENhbGxTdGFjayhKU0V4ZWNTdGF0
ZTo6Y3VycmVudFN0YXRlKCkpOwogICAgIGlmIChzdGFja1RyYWNlLT5zaXplKCkgPiAwKSB7Ci0g
ICAgICAgIGluaXRpYXRvck9iamVjdCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6Oklu
aXRpYXRvcjo6Y3JlYXRlKCkKLSAgICAgICAgICAgIC5zZXRUeXBlKEluc3BlY3Rvcjo6UHJvdG9j
b2w6Ok5ldHdvcms6OkluaXRpYXRvcjo6VHlwZTo6U2NyaXB0KQorICAgICAgICBpbml0aWF0b3JP
YmplY3QgPSBQcm90b2NvbDo6TmV0d29yazo6SW5pdGlhdG9yOjpjcmVhdGUoKQorICAgICAgICAg
ICAgLnNldFR5cGUoUHJvdG9jb2w6Ok5ldHdvcms6OkluaXRpYXRvcjo6VHlwZTo6U2NyaXB0KQog
ICAgICAgICAgICAgLnJlbGVhc2UoKTsKICAgICAgICAgaW5pdGlhdG9yT2JqZWN0LT5zZXRTdGFj
a1RyYWNlKHN0YWNrVHJhY2UtPmJ1aWxkSW5zcGVjdG9yQXJyYXkoKSk7CiAgICAgfSBlbHNlIGlm
IChkb2N1bWVudCAmJiBkb2N1bWVudC0+c2NyaXB0YWJsZURvY3VtZW50UGFyc2VyKCkpIHsKLSAg
ICAgICAgaW5pdGlhdG9yT2JqZWN0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6SW5p
dGlhdG9yOjpjcmVhdGUoKQotICAgICAgICAgICAgLnNldFR5cGUoSW5zcGVjdG9yOjpQcm90b2Nv
bDo6TmV0d29yazo6SW5pdGlhdG9yOjpUeXBlOjpQYXJzZXIpCisgICAgICAgIGluaXRpYXRvck9i
amVjdCA9IFByb3RvY29sOjpOZXR3b3JrOjpJbml0aWF0b3I6OmNyZWF0ZSgpCisgICAgICAgICAg
ICAuc2V0VHlwZShQcm90b2NvbDo6TmV0d29yazo6SW5pdGlhdG9yOjpUeXBlOjpQYXJzZXIpCiAg
ICAgICAgICAgICAucmVsZWFzZSgpOwogICAgICAgICBpbml0aWF0b3JPYmplY3QtPnNldFVybChk
b2N1bWVudC0+dXJsKCkuc3RyaW5nKCkpOwogICAgICAgICBpbml0aWF0b3JPYmplY3QtPnNldExp
bmVOdW1iZXIoZG9jdW1lbnQtPnNjcmlwdGFibGVEb2N1bWVudFBhcnNlcigpLT50ZXh0UG9zaXRp
b24oKS5tX2xpbmUub25lQmFzZWRJbnQoKSk7CkBAIC03NTgsOCArNzYwLDggQEAgUmVmUHRyPElu
c3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OkluaXRpYXRvcj4gSW5zcGVjdG9yTmV0d29ya0Fn
ZW50OjpidWlsZEluaXQKICAgICBpZiAoZG9tQWdlbnQgJiYgcmVzb3VyY2VSZXF1ZXN0KSB7CiAg
ICAgICAgIGlmIChhdXRvIGluc3BlY3RvckluaXRpYXRvck5vZGVJZGVudGlmaWVyID0gcmVzb3Vy
Y2VSZXF1ZXN0LT5pbnNwZWN0b3JJbml0aWF0b3JOb2RlSWRlbnRpZmllcigpKSB7CiAgICAgICAg
ICAgICBpZiAoIWluaXRpYXRvck9iamVjdCkgewotICAgICAgICAgICAgICAgIGluaXRpYXRvck9i
amVjdCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OkluaXRpYXRvcjo6Y3JlYXRlKCkK
LSAgICAgICAgICAgICAgICAgICAgLnNldFR5cGUoSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29y
azo6SW5pdGlhdG9yOjpUeXBlOjpPdGhlcikKKyAgICAgICAgICAgICAgICBpbml0aWF0b3JPYmpl
Y3QgPSBQcm90b2NvbDo6TmV0d29yazo6SW5pdGlhdG9yOjpjcmVhdGUoKQorICAgICAgICAgICAg
ICAgICAgICAuc2V0VHlwZShQcm90b2NvbDo6TmV0d29yazo6SW5pdGlhdG9yOjpUeXBlOjpPdGhl
cikKICAgICAgICAgICAgICAgICAgICAgLnJlbGVhc2UoKTsKICAgICAgICAgICAgIH0KIApAQCAt
NzY4LDEzICs3NzAsMTMgQEAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6Oklu
aXRpYXRvcj4gSW5zcGVjdG9yTmV0d29ya0FnZW50OjpidWlsZEluaXQKICAgICB9CiAKICAgICBp
ZiAoaW5pdGlhdG9yT2JqZWN0KQotICAgICAgICByZXR1cm4gaW5pdGlhdG9yT2JqZWN0OworICAg
ICAgICByZXR1cm4gaW5pdGlhdG9yT2JqZWN0LnJlbGVhc2VOb25OdWxsKCk7CiAKICAgICBpZiAo
bV9pc1JlY2FsY3VsYXRpbmdTdHlsZSAmJiBtX3N0eWxlUmVjYWxjdWxhdGlvbkluaXRpYXRvcikK
LSAgICAgICAgcmV0dXJuIG1fc3R5bGVSZWNhbGN1bGF0aW9uSW5pdGlhdG9yOworICAgICAgICBy
ZXR1cm4gKm1fc3R5bGVSZWNhbGN1bGF0aW9uSW5pdGlhdG9yOwogCi0gICAgcmV0dXJuIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OkluaXRpYXRvcjo6Y3JlYXRlKCkKLSAgICAgICAgLnNl
dFR5cGUoSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6SW5pdGlhdG9yOjpUeXBlOjpPdGhl
cikKKyAgICByZXR1cm4gUHJvdG9jb2w6Ok5ldHdvcms6OkluaXRpYXRvcjo6Y3JlYXRlKCkKKyAg
ICAgICAgLnNldFR5cGUoUHJvdG9jb2w6Ok5ldHdvcms6OkluaXRpYXRvcjo6VHlwZTo6T3RoZXIp
CiAgICAgICAgIC5yZWxlYXNlKCk7CiB9CiAKQEAgLTc4NSw3ICs3ODcsNyBAQCB2b2lkIEluc3Bl
Y3Rvck5ldHdvcmtBZ2VudDo6ZGlkQ3JlYXRlV2ViU29ja2V0KHVuc2lnbmVkIGxvbmcgaWRlbnRp
ZmllciwgY29uc3QgVQogCiB2b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6d2lsbFNlbmRXZWJT
b2NrZXRIYW5kc2hha2VSZXF1ZXN0KHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgUmVz
b3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQogewotICAgIGF1dG8gcmVxdWVzdE9iamVjdCA9IEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OldlYlNvY2tldFJlcXVlc3Q6OmNyZWF0ZSgpCisgICAg
YXV0byByZXF1ZXN0T2JqZWN0ID0gUHJvdG9jb2w6Ok5ldHdvcms6OldlYlNvY2tldFJlcXVlc3Q6
OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRIZWFkZXJzKGJ1aWxkT2JqZWN0Rm9ySGVhZGVycyhyZXF1
ZXN0Lmh0dHBIZWFkZXJGaWVsZHMoKSkpCiAgICAgICAgIC5yZWxlYXNlKCk7CiAgICAgbV9mcm9u
dGVuZERpc3BhdGNoZXItPndlYlNvY2tldFdpbGxTZW5kSGFuZHNoYWtlUmVxdWVzdChJZGVudGlm
aWVyc0ZhY3Rvcnk6OnJlcXVlc3RJZChpZGVudGlmaWVyKSwgdGltZXN0YW1wKCksIFdhbGxUaW1l
Ojpub3coKS5zZWNvbmRzU2luY2VFcG9jaCgpLnNlY29uZHMoKSwgV1RGTW92ZShyZXF1ZXN0T2Jq
ZWN0KSk7CkBAIC03OTMsNyArNzk1LDcgQEAgdm9pZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6Ondp
bGxTZW5kV2ViU29ja2V0SGFuZHNoYWtlUmVxdWVzdCh1bnNpZ25lZCBsb25nIGlkZW4KIAogdm9p
ZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmRpZFJlY2VpdmVXZWJTb2NrZXRIYW5kc2hha2VSZXNw
b25zZSh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJl
c3BvbnNlKQogewotICAgIGF1dG8gcmVzcG9uc2VPYmplY3QgPSBJbnNwZWN0b3I6OlByb3RvY29s
OjpOZXR3b3JrOjpXZWJTb2NrZXRSZXNwb25zZTo6Y3JlYXRlKCkKKyAgICBhdXRvIHJlc3BvbnNl
T2JqZWN0ID0gUHJvdG9jb2w6Ok5ldHdvcms6OldlYlNvY2tldFJlc3BvbnNlOjpjcmVhdGUoKQog
ICAgICAgICAuc2V0U3RhdHVzKHJlc3BvbnNlLmh0dHBTdGF0dXNDb2RlKCkpCiAgICAgICAgIC5z
ZXRTdGF0dXNUZXh0KHJlc3BvbnNlLmh0dHBTdGF0dXNUZXh0KCkpCiAgICAgICAgIC5zZXRIZWFk
ZXJzKGJ1aWxkT2JqZWN0Rm9ySGVhZGVycyhyZXNwb25zZS5odHRwSGVhZGVyRmllbGRzKCkpKQpA
QCAtODIwLDEyICs4MjIsNyBAQCB2b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6ZGlkUmVjZWl2
ZVdlYlNvY2tldEZyYW1lRXJyb3IodW5zaWduZWQgbG9uZyBpZGVudGlmaQogICAgIG1fZnJvbnRl
bmREaXNwYXRjaGVyLT53ZWJTb2NrZXRGcmFtZUVycm9yKElkZW50aWZpZXJzRmFjdG9yeTo6cmVx
dWVzdElkKGlkZW50aWZpZXIpLCB0aW1lc3RhbXAoKSwgZXJyb3JNZXNzYWdlKTsKIH0KIAotdm9p
ZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmVuYWJsZShFcnJvclN0cmluZyYpCi17Ci0gICAgZW5h
YmxlKCk7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50OjplbmFibGUoKQorUHJvdG9j
b2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yTmV0d29ya0FnZW50OjplbmFibGUoKQog
ewogICAgIG1fZW5hYmxlZCA9IHRydWU7CiAgICAgbV9pbnN0cnVtZW50aW5nQWdlbnRzLnNldEVu
YWJsZWROZXR3b3JrQWdlbnQodGhpcyk7CkBAIC04NTcsOSArODU0LDExIEBAIHZvaWQgSW5zcGVj
dG9yTmV0d29ya0FnZW50OjplbmFibGUoKQogICAgICAgICAgICAgICAgIGRpZENsb3NlV2ViU29j
a2V0KGlkZW50aWZpZXIpOwogICAgICAgICB9CiAgICAgfQorCisgICAgcmV0dXJuIHsgfTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmRpc2FibGUoRXJyb3JTdHJpbmcmKQorUHJv
dG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yTmV0d29ya0FnZW50OjpkaXNhYmxl
KCkKIHsKICAgICBtX2VuYWJsZWQgPSBmYWxzZTsKICAgICBtX2ludGVyY2VwdGlvbkVuYWJsZWQg
PSBmYWxzZTsKQEAgLTg3Miw5ICs4NzEsMTEgQEAgdm9pZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6
OmRpc2FibGUoRXJyb3JTdHJpbmcmKQogICAgIGNvbnRpbnVlUGVuZGluZ1Jlc3BvbnNlcygpOwog
CiAgICAgc2V0UmVzb3VyY2VDYWNoaW5nRGlzYWJsZWQoZmFsc2UpOworCisgICAgcmV0dXJuIHsg
fTsKIH0KIAotYm9vbCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OnNob3VsZEludGVyY2VwdChVUkwg
dXJsLCBOZXR3b3JrU3RhZ2UgbmV0d29ya1N0YWdlKQorYm9vbCBJbnNwZWN0b3JOZXR3b3JrQWdl
bnQ6OnNob3VsZEludGVyY2VwdChVUkwgdXJsLCBQcm90b2NvbDo6TmV0d29yazo6TmV0d29ya1N0
YWdlIG5ldHdvcmtTdGFnZSkKIHsKICAgICB1cmwucmVtb3ZlRnJhZ21lbnRJZGVudGlmaWVyKCk7
CiAKQEAgLTkxMSw1NiArOTEyLDU1IEBAIHZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50Ojpjb250
aW51ZVBlbmRpbmdSZXNwb25zZXMoKQogICAgIG1fcGVuZGluZ0ludGVyY2VwdFJlc3BvbnNlcy5j
bGVhcigpOwogfQogCi12b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6c2V0RXh0cmFIVFRQSGVh
ZGVycyhFcnJvclN0cmluZyYsIGNvbnN0IEpTT046Ok9iamVjdCYgaGVhZGVycykKK1Byb3RvY29s
OjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6c2V0RXh0cmFIVFRQ
SGVhZGVycyhSZWY8SlNPTjo6T2JqZWN0PiYmIGhlYWRlcnMpCiB7Ci0gICAgZm9yIChhdXRvJiBl
bnRyeSA6IGhlYWRlcnMpIHsKLSAgICAgICAgU3RyaW5nIHN0cmluZ1ZhbHVlOwotICAgICAgICBp
ZiAoZW50cnkudmFsdWUtPmFzU3RyaW5nKHN0cmluZ1ZhbHVlKSkKKyAgICBmb3IgKGF1dG8mIGVu
dHJ5IDogaGVhZGVycy5nZXQoKSkgeworICAgICAgICBhdXRvIHN0cmluZ1ZhbHVlID0gZW50cnku
dmFsdWUtPmFzU3RyaW5nKCk7CisgICAgICAgIGlmICghIXN0cmluZ1ZhbHVlKQogICAgICAgICAg
ICAgbV9leHRyYVJlcXVlc3RIZWFkZXJzLnNldChlbnRyeS5rZXksIHN0cmluZ1ZhbHVlKTsKICAg
ICB9CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6
Z2V0UmVzcG9uc2VCb2R5KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBy
ZXF1ZXN0SWQsIFN0cmluZyogY29udGVudCwgYm9vbCogYmFzZTY0RW5jb2RlZCkKK1Byb3RvY29s
OjpFcnJvclN0cmluZ09yPHN0ZDo6dHVwbGU8U3RyaW5nLCBib29sIC8qIGJhc2U2NEVuY29kZWQg
Ki8+PiBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmdldFJlc3BvbnNlQm9keShjb25zdCBQcm90b2Nv
bDo6TmV0d29yazo6UmVxdWVzdElkJiByZXF1ZXN0SWQpCiB7CiAgICAgTmV0d29ya1Jlc291cmNl
c0RhdGE6OlJlc291cmNlRGF0YSBjb25zdCogcmVzb3VyY2VEYXRhID0gbV9yZXNvdXJjZXNEYXRh
LT5kYXRhKHJlcXVlc3RJZCk7Ci0gICAgaWYgKCFyZXNvdXJjZURhdGEpIHsKLSAgICAgICAgZXJy
b3JTdHJpbmcgPSAiTWlzc2luZyByZXNvdXJjZSBmb3IgZ2l2ZW4gcmVxdWVzdElkIl9zOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghcmVzb3VyY2VEYXRhKQorICAgICAgICByZXR1
cm4gbWFrZVVuZXhwZWN0ZWQoIk1pc3NpbmcgcmVzb3VyY2UgZm9yIGdpdmVuIHJlcXVlc3RJZCJf
cyk7CiAKLSAgICBpZiAocmVzb3VyY2VEYXRhLT5oYXNDb250ZW50KCkpIHsKLSAgICAgICAgKmJh
c2U2NEVuY29kZWQgPSByZXNvdXJjZURhdGEtPmJhc2U2NEVuY29kZWQoKTsKLSAgICAgICAgKmNv
bnRlbnQgPSByZXNvdXJjZURhdGEtPmNvbnRlbnQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
KyAgICBpZiAocmVzb3VyY2VEYXRhLT5oYXNDb250ZW50KCkpCisgICAgICAgIHJldHVybiB7IHsg
cmVzb3VyY2VEYXRhLT5jb250ZW50KCksIHJlc291cmNlRGF0YS0+YmFzZTY0RW5jb2RlZCgpIH0g
fTsKIAotICAgIGlmIChyZXNvdXJjZURhdGEtPmlzQ29udGVudEV2aWN0ZWQoKSkgewotICAgICAg
ICBlcnJvclN0cmluZyA9ICJSZXNvdXJjZSBjb250ZW50IHdhcyBldmljdGVkIGZyb20gaW5zcGVj
dG9yIGNhY2hlIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmIChyZXNvdXJjZURh
dGEtPmlzQ29udGVudEV2aWN0ZWQoKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJS
ZXNvdXJjZSBjb250ZW50IHdhcyBldmljdGVkIGZyb20gaW5zcGVjdG9yIGNhY2hlIl9zKTsKIAog
ICAgIGlmIChyZXNvdXJjZURhdGEtPmJ1ZmZlcigpICYmICFyZXNvdXJjZURhdGEtPnRleHRFbmNv
ZGluZ05hbWUoKS5pc051bGwoKSkgewotICAgICAgICAqYmFzZTY0RW5jb2RlZCA9IGZhbHNlOwot
ICAgICAgICBpZiAoSW5zcGVjdG9yUGFnZUFnZW50OjpzaGFyZWRCdWZmZXJDb250ZW50KHJlc291
cmNlRGF0YS0+YnVmZmVyKCksIHJlc291cmNlRGF0YS0+dGV4dEVuY29kaW5nTmFtZSgpLCAqYmFz
ZTY0RW5jb2RlZCwgY29udGVudCkpCi0gICAgICAgICAgICByZXR1cm47CisgICAgICAgIFN0cmlu
ZyBib2R5OworICAgICAgICBpZiAoSW5zcGVjdG9yUGFnZUFnZW50OjpzaGFyZWRCdWZmZXJDb250
ZW50KHJlc291cmNlRGF0YS0+YnVmZmVyKCksIHJlc291cmNlRGF0YS0+dGV4dEVuY29kaW5nTmFt
ZSgpLCBmYWxzZSwgJmJvZHkpKQorICAgICAgICAgICAgcmV0dXJuIHsgeyBib2R5LCBmYWxzZSB9
IH07CiAgICAgfQogCiAgICAgaWYgKHJlc291cmNlRGF0YS0+Y2FjaGVkUmVzb3VyY2UoKSkgewot
ICAgICAgICBpZiAoSW5zcGVjdG9yTmV0d29ya0FnZW50OjpjYWNoZWRSZXNvdXJjZUNvbnRlbnQo
KnJlc291cmNlRGF0YS0+Y2FjaGVkUmVzb3VyY2UoKSwgY29udGVudCwgYmFzZTY0RW5jb2RlZCkp
Ci0gICAgICAgICAgICByZXR1cm47CisgICAgICAgIFN0cmluZyBib2R5OworICAgICAgICBib29s
IGJhc2U2NEVuY29kZWQ7CisgICAgICAgIGlmIChJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmNhY2hl
ZFJlc291cmNlQ29udGVudCgqcmVzb3VyY2VEYXRhLT5jYWNoZWRSZXNvdXJjZSgpLCAmYm9keSwg
JmJhc2U2NEVuY29kZWQpKQorICAgICAgICAgICAgcmV0dXJuIHsgeyBib2R5LCBiYXNlNjRFbmNv
ZGVkIH0gfTsKICAgICB9CiAKLSAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIGNvbnRlbnQgb2Yg
cmVzb3VyY2UgZm9yIGdpdmVuIHJlcXVlc3RJZCJfczsKKyAgICByZXR1cm4gbWFrZVVuZXhwZWN0
ZWQoIk1pc3NpbmcgY29udGVudCBvZiByZXNvdXJjZSBmb3IgZ2l2ZW4gcmVxdWVzdElkIl9zKTsK
IH0KIAotdm9pZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OnNldFJlc291cmNlQ2FjaGluZ0Rpc2Fi
bGVkKEVycm9yU3RyaW5nJiwgYm9vbCBkaXNhYmxlZCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09y
PHZvaWQ+IEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6c2V0UmVzb3VyY2VDYWNoaW5nRGlzYWJsZWQo
Ym9vbCBkaXNhYmxlZCkKIHsKLSAgICBzZXRSZXNvdXJjZUNhY2hpbmdEaXNhYmxlZChkaXNhYmxl
ZCk7CisgICAgc2V0UmVzb3VyY2VDYWNoaW5nRGlzYWJsZWRJbnRlcmFsKGRpc2FibGVkKTsKKwor
ICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50Ojpsb2FkUmVz
b3VyY2UoY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBjb25zdCBTdHJpbmcmIHVybFN0cmluZywgUmVm
PExvYWRSZXNvdXJjZUNhbGxiYWNrPiYmIGNhbGxiYWNrKQordm9pZCBJbnNwZWN0b3JOZXR3b3Jr
QWdlbnQ6OmxvYWRSZXNvdXJjZShjb25zdCBQcm90b2NvbDo6TmV0d29yazo6RnJhbWVJZCYgZnJh
bWVJZCwgY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcsIFJlZjxMb2FkUmVzb3VyY2VDYWxsYmFjaz4m
JiBjYWxsYmFjaykKIHsKLSAgICBFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKyAgICBQcm90b2Nv
bDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CiAgICAgYXV0byogY29udGV4dCA9IHNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoZXJyb3JTdHJpbmcsIGZyYW1lSWQpOwogICAgIGlmICghY29udGV4dCkg
ewogICAgICAgICBjYWxsYmFjay0+c2VuZEZhaWx1cmUoZXJyb3JTdHJpbmcpOwpAQCAtOTk0LDI2
ICs5OTQsMjIgQEAgdm9pZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmxvYWRSZXNvdXJjZShjb25z
dCBTdHJpbmcmIGZyYW1lSWQsIGNvbnN0IFN0cmluZyYgdXIKICAgICBpbnNwZWN0b3JUaHJlYWRh
YmxlTG9hZGVyQ2xpZW50LT5zZXRMb2FkZXIoV1RGTW92ZShsb2FkZXIpKTsKIH0KIAotdm9pZCBJ
bnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmdldFNlcmlhbGl6ZWRDZXJ0aWZpY2F0ZShFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBTdHJpbmcqIHNlcmlhbGl6
ZWRDZXJ0aWZpY2F0ZSkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPFN0cmluZz4gSW5zcGVjdG9y
TmV0d29ya0FnZW50OjpnZXRTZXJpYWxpemVkQ2VydGlmaWNhdGUoY29uc3QgUHJvdG9jb2w6Ok5l
dHdvcms6OlJlcXVlc3RJZCYgcmVxdWVzdElkKQogewogICAgIGF1dG8qIHJlc291cmNlRGF0YSA9
IG1fcmVzb3VyY2VzRGF0YS0+ZGF0YShyZXF1ZXN0SWQpOwotICAgIGlmICghcmVzb3VyY2VEYXRh
KSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIk1pc3NpbmcgcmVzb3VyY2UgZm9yIGdpdmVuIHJl
cXVlc3RJZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoIXJlc291cmNlRGF0
YSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJNaXNzaW5nIHJlc291cmNlIGZvciBn
aXZlbiByZXF1ZXN0SWQiX3MpOwogCiAgICAgYXV0byYgY2VydGlmaWNhdGUgPSByZXNvdXJjZURh
dGEtPmNlcnRpZmljYXRlSW5mbygpOwotICAgIGlmICghY2VydGlmaWNhdGUgfHwgY2VydGlmaWNh
dGUudmFsdWUoKS5pc0VtcHR5KCkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWlzc2luZyBj
ZXJ0aWZpY2F0ZSBvZiByZXNvdXJjZSBmb3IgZ2l2ZW4gcmVxdWVzdElkIl9zOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQorICAgIGlmICghY2VydGlmaWNhdGUgfHwgY2VydGlmaWNhdGUudmFsdWUo
KS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTWlzc2luZyBjZXJ0
aWZpY2F0ZSBvZiByZXNvdXJjZSBmb3IgZ2l2ZW4gcmVxdWVzdElkIl9zKTsKIAogICAgIFdURjo6
UGVyc2lzdGVuY2U6OkVuY29kZXIgZW5jb2RlcjsKICAgICBXVEY6OlBlcnNpc3RlbmNlOjpDb2Rl
cjxXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8+OjplbmNvZGUoZW5jb2RlciwgY2VydGlmaWNhdGUu
dmFsdWUoKSk7Ci0gICAgKnNlcmlhbGl6ZWRDZXJ0aWZpY2F0ZSA9IGJhc2U2NEVuY29kZShlbmNv
ZGVyLmJ1ZmZlcigpLCBlbmNvZGVyLmJ1ZmZlclNpemUoKSk7CisgICAgcmV0dXJuIGJhc2U2NEVu
Y29kZShlbmNvZGVyLmJ1ZmZlcigpLCBlbmNvZGVyLmJ1ZmZlclNpemUoKSk7CiB9CiAKLVdlYlNv
Y2tldCogSW5zcGVjdG9yTmV0d29ya0FnZW50Ojp3ZWJTb2NrZXRGb3JSZXF1ZXN0SWQoY29uc3Qg
U3RyaW5nJiByZXF1ZXN0SWQpCitXZWJTb2NrZXQqIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6d2Vi
U29ja2V0Rm9yUmVxdWVzdElkKGNvbnN0IFByb3RvY29sOjpOZXR3b3JrOjpSZXF1ZXN0SWQmIHJl
cXVlc3RJZCkKIHsKICAgICBMb2NrSG9sZGVyIGxvY2soV2ViU29ja2V0OjphbGxBY3RpdmVXZWJT
b2NrZXRzTXV0ZXgoKSk7CiAKQEAgLTEwMzEsMzkgKzEwMjcsMzYgQEAgc3RhdGljIEpTQzo6SlNW
YWx1ZSB3ZWJTb2NrZXRBc1NjcmlwdFZhbHVlKEpTQzo6SlNHbG9iYWxPYmplY3QmIHN0YXRlLCBX
ZWJTb2NrZXQKICAgICByZXR1cm4gdG9KUygmc3RhdGUsIGRlcHJlY2F0ZWRHbG9iYWxPYmplY3RG
b3JQcm90b3R5cGUoJnN0YXRlKSwgd2ViU29ja2V0KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JOZXR3
b3JrQWdlbnQ6OnJlc29sdmVXZWJTb2NrZXQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25z
dCBTdHJpbmcmIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nKiBvYmplY3RHcm91cCwgUmVmUHRyPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3VsdCkKK1Byb3Rv
Y29sOjpFcnJvclN0cmluZ09yPFJlZjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0Pj4g
SW5zcGVjdG9yTmV0d29ya0FnZW50OjpyZXNvbHZlV2ViU29ja2V0KGNvbnN0IFByb3RvY29sOjpO
ZXR3b3JrOjpSZXF1ZXN0SWQmIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCkK
IHsKICAgICBXZWJTb2NrZXQqIHdlYlNvY2tldCA9IHdlYlNvY2tldEZvclJlcXVlc3RJZChyZXF1
ZXN0SWQpOwotICAgIGlmICghd2ViU29ja2V0KSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIk1p
c3Npbmcgd2ViIHNvY2tldCBmb3IgZ2l2ZW4gcmVxdWVzdElkIl9zOwotICAgICAgICByZXR1cm47
Ci0gICAgfQorICAgIGlmICghd2ViU29ja2V0KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0
ZWQoIk1pc3Npbmcgd2ViIHNvY2tldCBmb3IgZ2l2ZW4gcmVxdWVzdElkIl9zKTsKIAogICAgIC8v
IEZJWE1FOiA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMTY4NDc1PiBXZWIgSW5zcGVjdG9yOiBDb3Jy
ZWN0bHkgZGlzcGxheSBpZnJhbWUncyBhbmQgd29ya2VyJ3MgV2ViU29ja2V0cwogICAgIGlmICgh
aXM8RG9jdW1lbnQ+KHdlYlNvY2tldC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKSkKLSAgICAg
ICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk5vdCBzdXBwb3J0ZWQi
KTsKIAogICAgIGF1dG8qIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KHdlYlNvY2tldC0+
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKICAgICBhdXRvKiBmcmFtZSA9IGRvY3VtZW50LT5m
cmFtZSgpOwotICAgIGlmICghZnJhbWUpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWlzc2lu
ZyBmcmFtZSBvZiB3ZWIgc29ja2V0IGZvciBnaXZlbiByZXF1ZXN0SWQiX3M7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVj
dGVkKCJNaXNzaW5nIGZyYW1lIG9mIHdlYiBzb2NrZXQgZm9yIGdpdmVuIHJlcXVlc3RJZCJfcyk7
CiAKICAgICBhdXRvJiBzdGF0ZSA9ICptYWluV29ybGRFeGVjU3RhdGUoZnJhbWUpOwogICAgIGF1
dG8gaW5qZWN0ZWRTY3JpcHQgPSBtX2luamVjdGVkU2NyaXB0TWFuYWdlci5pbmplY3RlZFNjcmlw
dEZvcigmc3RhdGUpOwogICAgIEFTU0VSVCghaW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKTsK
IAotICAgIFN0cmluZyBvYmplY3RHcm91cE5hbWUgPSBvYmplY3RHcm91cCA/ICpvYmplY3RHcm91
cCA6IFN0cmluZygpOwotICAgIHJlc3VsdCA9IGluamVjdGVkU2NyaXB0LndyYXBPYmplY3Qod2Vi
U29ja2V0QXNTY3JpcHRWYWx1ZShzdGF0ZSwgd2ViU29ja2V0KSwgb2JqZWN0R3JvdXBOYW1lKTsK
KyAgICBhdXRvIG9iamVjdCA9IGluamVjdGVkU2NyaXB0LndyYXBPYmplY3Qod2ViU29ja2V0QXNT
Y3JpcHRWYWx1ZShzdGF0ZSwgd2ViU29ja2V0KSwgb2JqZWN0R3JvdXApOworICAgIGlmICghb2Jq
ZWN0KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkludGVybmFsIGVycm9yOiB1bmFi
bGUgdG8gY2FzdCBXZWJTb2NrZXQiKTsKKworICAgIHJldHVybiBvYmplY3QucmVsZWFzZU5vbk51
bGwoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OnNldEludGVyY2VwdGlvbkVu
YWJsZWQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBib29sIGVuYWJsZWQpCitQcm90b2NvbDo6
RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OnNldEludGVyY2VwdGlv
bkVuYWJsZWQoYm9vbCBlbmFibGVkKQogewotICAgIGlmIChtX2ludGVyY2VwdGlvbkVuYWJsZWQg
PT0gZW5hYmxlZCkgewotICAgICAgICBlcnJvclN0cmluZyA9IG1faW50ZXJjZXB0aW9uRW5hYmxl
ZCA/ICJJbnRlcmNlcHRpb24gYWxyZWFkeSBlbmFibGVkIl9zIDogIkludGVyY2VwdGlvbiBhbHJl
YWR5IGRpc2FibGVkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmIChtX2ludGVy
Y2VwdGlvbkVuYWJsZWQgPT0gZW5hYmxlZCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVk
KG1faW50ZXJjZXB0aW9uRW5hYmxlZCA/ICJJbnRlcmNlcHRpb24gYWxyZWFkeSBlbmFibGVkIl9z
IDogIkludGVyY2VwdGlvbiBhbHJlYWR5IGRpc2FibGVkIl9zKTsKIAogICAgIG1faW50ZXJjZXB0
aW9uRW5hYmxlZCA9IGVuYWJsZWQ7CiAKQEAgLTEwNzEsNDYgKzEwNjQsNDAgQEAgdm9pZCBJbnNw
ZWN0b3JOZXR3b3JrQWdlbnQ6OnNldEludGVyY2VwdGlvbkVuYWJsZWQoRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBib28KICAgICAgICAgY29udGludWVQZW5kaW5nUmVxdWVzdHMoKTsKICAgICAg
ICAgY29udGludWVQZW5kaW5nUmVzcG9uc2VzKCk7CiAgICAgfQorCisgICAgcmV0dXJuIHsgfTsK
IH0KIAotdm9pZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmFkZEludGVyY2VwdGlvbihFcnJvclN0
cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIG5ldHdv
cmtTdGFnZVN0cmluZywgY29uc3QgYm9vbCogb3B0aW9uYWxDYXNlU2Vuc2l0aXZlLCBjb25zdCBi
b29sKiBvcHRpb25hbElzUmVnZXgpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNw
ZWN0b3JOZXR3b3JrQWdlbnQ6OmFkZEludGVyY2VwdGlvbihjb25zdCBTdHJpbmcmIHVybCwgUHJv
dG9jb2w6Ok5ldHdvcms6Ok5ldHdvcmtTdGFnZSBuZXR3b3JrU3RhZ2UsIE9wdGlvbmFsPGJvb2w+
JiYgY2FzZVNlbnNpdGl2ZSwgT3B0aW9uYWw8Ym9vbD4mJiBpc1JlZ2V4KQogewotICAgIGF1dG8g
bmV0d29ya1N0YWdlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6SW5zcGVjdG9ySGVscGVyczo6cGFy
c2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6Ok5ldHdv
cmtTdGFnZT4obmV0d29ya1N0YWdlU3RyaW5nKTsKLSAgICBpZiAoIW5ldHdvcmtTdGFnZSkgewot
ICAgICAgICBlcnJvclN0cmluZyA9IG1ha2VTdHJpbmcoIlVua25vd24gbmV0d29ya1N0YWdlOiAi
X3MsIG5ldHdvcmtTdGFnZVN0cmluZyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBJ
bnRlcmNlcHQgaW50ZXJjZXB0OwogICAgIGludGVyY2VwdC51cmwgPSB1cmw7Ci0gICAgaWYgKG9w
dGlvbmFsQ2FzZVNlbnNpdGl2ZSkKLSAgICAgICAgaW50ZXJjZXB0LmNhc2VTZW5zaXRpdmUgPSAq
b3B0aW9uYWxDYXNlU2Vuc2l0aXZlOwotICAgIGlmIChvcHRpb25hbElzUmVnZXgpCi0gICAgICAg
IGludGVyY2VwdC5pc1JlZ2V4ID0gKm9wdGlvbmFsSXNSZWdleDsKLSAgICBpbnRlcmNlcHQubmV0
d29ya1N0YWdlID0gbmV0d29ya1N0YWdlLnZhbHVlKCk7CisgICAgaWYgKGNhc2VTZW5zaXRpdmUp
CisgICAgICAgIGludGVyY2VwdC5jYXNlU2Vuc2l0aXZlID0gKmNhc2VTZW5zaXRpdmU7CisgICAg
aWYgKGlzUmVnZXgpCisgICAgICAgIGludGVyY2VwdC5pc1JlZ2V4ID0gKmlzUmVnZXg7CisgICAg
aW50ZXJjZXB0Lm5ldHdvcmtTdGFnZSA9IG5ldHdvcmtTdGFnZTsKIAogICAgIGlmICghbV9pbnRl
cmNlcHRzLmFwcGVuZElmTm90Q29udGFpbnMoaW50ZXJjZXB0KSkKLSAgICAgICAgZXJyb3JTdHJp
bmcgPSAiSW50ZXJjZXB0IGZvciBnaXZlbiB1cmwsIGdpdmVuIGlzUmVnZXgsIGFuZCBnaXZlbiBz
dGFnZSBhbHJlYWR5IGV4aXN0cyJfczsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJJ
bnRlcmNlcHQgZm9yIGdpdmVuIHVybCwgZ2l2ZW4gaXNSZWdleCwgYW5kIGdpdmVuIHN0YWdlIGFs
cmVhZHkgZXhpc3RzIl9zKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9y
TmV0d29ya0FnZW50OjpyZW1vdmVJbnRlcmNlcHRpb24oRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5n
LCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBuZXR3b3JrU3RhZ2VTdHJpbmcsIGNv
bnN0IGJvb2wqIG9wdGlvbmFsQ2FzZVNlbnNpdGl2ZSwgY29uc3QgYm9vbCogb3B0aW9uYWxJc1Jl
Z2V4KQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yTmV0d29ya0FnZW50
OjpyZW1vdmVJbnRlcmNlcHRpb24oY29uc3QgU3RyaW5nJiB1cmwsIFByb3RvY29sOjpOZXR3b3Jr
OjpOZXR3b3JrU3RhZ2UgbmV0d29ya1N0YWdlLCBPcHRpb25hbDxib29sPiYmIGNhc2VTZW5zaXRp
dmUsIE9wdGlvbmFsPGJvb2w+JiYgaXNSZWdleCkKIHsKLSAgICBhdXRvIG5ldHdvcmtTdGFnZSA9
IEluc3BlY3Rvcjo6UHJvdG9jb2w6Okluc3BlY3RvckhlbHBlcnM6OnBhcnNlRW51bVZhbHVlRnJv
bVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpOZXR3b3JrU3RhZ2U+KG5ldHdv
cmtTdGFnZVN0cmluZyk7Ci0gICAgaWYgKCFuZXR3b3JrU3RhZ2UpIHsKLSAgICAgICAgZXJyb3JT
dHJpbmcgPSBtYWtlU3RyaW5nKCJVbmtub3duIG5ldHdvcmtTdGFnZTogIl9zLCBuZXR3b3JrU3Rh
Z2VTdHJpbmcpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgSW50ZXJjZXB0IGludGVy
Y2VwdDsKICAgICBpbnRlcmNlcHQudXJsID0gdXJsOwotICAgIGlmIChvcHRpb25hbENhc2VTZW5z
aXRpdmUpCi0gICAgICAgIGludGVyY2VwdC5jYXNlU2Vuc2l0aXZlID0gKm9wdGlvbmFsQ2FzZVNl
bnNpdGl2ZTsKLSAgICBpZiAob3B0aW9uYWxJc1JlZ2V4KQotICAgICAgICBpbnRlcmNlcHQuaXNS
ZWdleCA9ICpvcHRpb25hbElzUmVnZXg7Ci0gICAgaW50ZXJjZXB0Lm5ldHdvcmtTdGFnZSA9IG5l
dHdvcmtTdGFnZS52YWx1ZSgpOworICAgIGlmIChjYXNlU2Vuc2l0aXZlKQorICAgICAgICBpbnRl
cmNlcHQuY2FzZVNlbnNpdGl2ZSA9ICpjYXNlU2Vuc2l0aXZlOworICAgIGlmIChpc1JlZ2V4KQor
ICAgICAgICBpbnRlcmNlcHQuaXNSZWdleCA9ICppc1JlZ2V4OworICAgIGludGVyY2VwdC5uZXR3
b3JrU3RhZ2UgPSBuZXR3b3JrU3RhZ2U7CiAKICAgICBpZiAoIW1faW50ZXJjZXB0cy5yZW1vdmVB
bGwoaW50ZXJjZXB0KSkKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWlzc2luZyBpbnRlcmNlcHQg
Zm9yIGdpdmVuIHVybCwgZ2l2ZW4gaXNSZWdleCwgYW5kIGdpdmVuIHN0YWdlIl9zOworICAgICAg
ICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk1pc3NpbmcgaW50ZXJjZXB0IGZvciBnaXZlbiB1cmws
IGdpdmVuIGlzUmVnZXgsIGFuZCBnaXZlbiBzdGFnZSJfcyk7CisKKyAgICByZXR1cm4geyB9Owog
fQogCiBib29sIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6d2lsbEludGVyY2VwdChjb25zdCBSZXNv
dXJjZVJlcXVlc3QmIHJlcXVlc3QpCkBAIC0xMTE4LDggKzExMDUsOCBAQCBib29sIEluc3BlY3Rv
ck5ldHdvcmtBZ2VudDo6d2lsbEludGVyY2VwdChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVl
c3QpCiAgICAgaWYgKCFtX2ludGVyY2VwdGlvbkVuYWJsZWQpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgIHJldHVybiBzaG91bGRJbnRlcmNlcHQocmVxdWVzdC51cmwoKSwgTmV0d29ya1N0
YWdlOjpSZXF1ZXN0KQotICAgICAgICB8fCBzaG91bGRJbnRlcmNlcHQocmVxdWVzdC51cmwoKSwg
TmV0d29ya1N0YWdlOjpSZXNwb25zZSk7CisgICAgcmV0dXJuIHNob3VsZEludGVyY2VwdChyZXF1
ZXN0LnVybCgpLCBQcm90b2NvbDo6TmV0d29yazo6TmV0d29ya1N0YWdlOjpSZXF1ZXN0KQorICAg
ICAgICB8fCBzaG91bGRJbnRlcmNlcHQocmVxdWVzdC51cmwoKSwgUHJvdG9jb2w6Ok5ldHdvcms6
Ok5ldHdvcmtTdGFnZTo6UmVzcG9uc2UpOwogfQogCiBib29sIEluc3BlY3Rvck5ldHdvcmtBZ2Vu
dDo6c2hvdWxkSW50ZXJjZXB0UmVxdWVzdChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3Qp
CkBAIC0xMTI3LDcgKzExMTQsNyBAQCBib29sIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6c2hvdWxk
SW50ZXJjZXB0UmVxdWVzdChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlcwogICAgIGlmICgh
bV9pbnRlcmNlcHRpb25FbmFibGVkKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1
cm4gc2hvdWxkSW50ZXJjZXB0KHJlcXVlc3QudXJsKCksIE5ldHdvcmtTdGFnZTo6UmVxdWVzdCk7
CisgICAgcmV0dXJuIHNob3VsZEludGVyY2VwdChyZXF1ZXN0LnVybCgpLCBQcm90b2NvbDo6TmV0
d29yazo6TmV0d29ya1N0YWdlOjpSZXF1ZXN0KTsKIH0KIAogYm9vbCBJbnNwZWN0b3JOZXR3b3Jr
QWdlbnQ6OnNob3VsZEludGVyY2VwdFJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJl
c3BvbnNlKQpAQCAtMTEzNSw3ICsxMTIyLDcgQEAgYm9vbCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6
OnNob3VsZEludGVyY2VwdFJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3AKICAg
ICBpZiAoIW1faW50ZXJjZXB0aW9uRW5hYmxlZCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgcmV0dXJuIHNob3VsZEludGVyY2VwdChyZXNwb25zZS51cmwoKSwgTmV0d29ya1N0YWdlOjpS
ZXNwb25zZSk7CisgICAgcmV0dXJuIHNob3VsZEludGVyY2VwdChyZXNwb25zZS51cmwoKSwgUHJv
dG9jb2w6Ok5ldHdvcms6Ok5ldHdvcmtTdGFnZTo6UmVzcG9uc2UpOwogfQogCiB2b2lkIEluc3Bl
Y3Rvck5ldHdvcmtBZ2VudDo6aW50ZXJjZXB0UmVxdWVzdChSZXNvdXJjZUxvYWRlciYgbG9hZGVy
LCBGdW5jdGlvbjx2b2lkKGNvbnN0IFJlc291cmNlUmVxdWVzdCYpPiYmIGhhbmRsZXIpCkBAIC0x
MTY2LDkyICsxMTUzLDg5IEBAIHZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50OjppbnRlcmNlcHRS
ZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwKIAogICAgIG1fcGVuZGlu
Z0ludGVyY2VwdFJlc3BvbnNlcy5zZXQocmVxdWVzdElkLCBtYWtlVW5pcXVlPFBlbmRpbmdJbnRl
cmNlcHRSZXNwb25zZT4ocmVzcG9uc2UsIFdURk1vdmUoaGFuZGxlcikpKTsKIAotICAgIG1fZnJv
bnRlbmREaXNwYXRjaGVyLT5yZXNwb25zZUludGVyY2VwdGVkKHJlcXVlc3RJZCwgYnVpbGRPYmpl
Y3RGb3JSZXNvdXJjZVJlc3BvbnNlKHJlc3BvbnNlLCBudWxscHRyKSk7CisgICAgYXV0byByZXNv
dXJjZVJlc3BvbnNlID0gYnVpbGRPYmplY3RGb3JSZXNvdXJjZVJlc3BvbnNlKHJlc3BvbnNlLCBu
dWxscHRyKTsKKyAgICBpZiAoIXJlc291cmNlUmVzcG9uc2UpCisgICAgICAgIHJldHVybjsKKwor
ICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5yZXNwb25zZUludGVyY2VwdGVkKHJlcXVlc3RJZCwg
cmVzb3VyY2VSZXNwb25zZS5yZWxlYXNlTm9uTnVsbCgpKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JO
ZXR3b3JrQWdlbnQ6OmludGVyY2VwdENvbnRpbnVlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywg
Y29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbmV0d29ya1N0YWdlU3RyaW5n
KQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yTmV0d29ya0FnZW50Ojpp
bnRlcmNlcHRDb250aW51ZShjb25zdCBQcm90b2NvbDo6TmV0d29yazo6UmVxdWVzdElkJiByZXF1
ZXN0SWQsIFByb3RvY29sOjpOZXR3b3JrOjpOZXR3b3JrU3RhZ2UgbmV0d29ya1N0YWdlKQogewot
ICAgIGF1dG8gbmV0d29ya1N0YWdlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6SW5zcGVjdG9ySGVs
cGVyczo6cGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdv
cms6Ok5ldHdvcmtTdGFnZT4obmV0d29ya1N0YWdlU3RyaW5nKTsKLSAgICBpZiAoIW5ldHdvcmtT
dGFnZSkgewotICAgICAgICBlcnJvclN0cmluZyA9IG1ha2VTdHJpbmcoIlVua25vd24gbmV0d29y
a1N0YWdlOiAiX3MsIG5ldHdvcmtTdGFnZVN0cmluZyk7Ci0gICAgICAgIHJldHVybjsKKyAgICBz
d2l0Y2ggKG5ldHdvcmtTdGFnZSkgeworICAgIGNhc2UgUHJvdG9jb2w6Ok5ldHdvcms6Ok5ldHdv
cmtTdGFnZTo6UmVxdWVzdDoKKyAgICAgICAgaWYgKGF1dG8gcGVuZGluZ0ludGVyY2VwdFJlcXVl
c3QgPSBtX3BlbmRpbmdJbnRlcmNlcHRSZXF1ZXN0cy50YWtlKHJlcXVlc3RJZCkpIHsKKyAgICAg
ICAgICAgIHBlbmRpbmdJbnRlcmNlcHRSZXF1ZXN0LT5jb250aW51ZVdpdGhPcmlnaW5hbFJlcXVl
c3QoKTsKKyAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IG1ha2VVbmV4cGVjdGVkKCJNaXNzaW5nIHBlbmRpbmcgaW50ZXJjZXB0IHJlcXVlc3QgZm9yIGdp
dmVuIHJlcXVlc3RJZCJfcyk7CisKKyAgICBjYXNlIFByb3RvY29sOjpOZXR3b3JrOjpOZXR3b3Jr
U3RhZ2U6OlJlc3BvbnNlOgorICAgICAgICBpZiAoYXV0byBwZW5kaW5nSW50ZXJjZXB0UmVzcG9u
c2UgPSBtX3BlbmRpbmdJbnRlcmNlcHRSZXNwb25zZXMudGFrZShyZXF1ZXN0SWQpKSB7CisgICAg
ICAgICAgICBwZW5kaW5nSW50ZXJjZXB0UmVzcG9uc2UtPnJlc3BvbmRXaXRoT3JpZ2luYWxSZXNw
b25zZSgpOworICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gbWFrZVVuZXhwZWN0ZWQoIk1pc3NpbmcgcGVuZGluZyBpbnRlcmNlcHQgcmVzcG9uc2UgZm9y
IGdpdmVuIHJlcXVlc3RJZCJfcyk7CiAgICAgfQogCi0gICAgc3dpdGNoIChuZXR3b3JrU3RhZ2Uu
dmFsdWUoKSkgewotICAgIGNhc2UgTmV0d29ya1N0YWdlOjpSZXF1ZXN0OgotICAgICAgICBpZiAo
YXV0byBwZW5kaW5nSW50ZXJjZXB0UmVxdWVzdCA9IG1fcGVuZGluZ0ludGVyY2VwdFJlcXVlc3Rz
LnRha2UocmVxdWVzdElkKSkKLSAgICAgICAgICAgIHBlbmRpbmdJbnRlcmNlcHRSZXF1ZXN0LT5j
b250aW51ZVdpdGhPcmlnaW5hbFJlcXVlc3QoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
ZXJyb3JTdHJpbmcgPSAiTWlzc2luZyBwZW5kaW5nIGludGVyY2VwdCByZXF1ZXN0IGZvciBnaXZl
biByZXF1ZXN0SWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIE5ldHdvcmtTdGFnZTo6
UmVzcG9uc2U6Ci0gICAgICAgIGlmIChhdXRvIHBlbmRpbmdJbnRlcmNlcHRSZXNwb25zZSA9IG1f
cGVuZGluZ0ludGVyY2VwdFJlc3BvbnNlcy50YWtlKHJlcXVlc3RJZCkpCi0gICAgICAgICAgICBw
ZW5kaW5nSW50ZXJjZXB0UmVzcG9uc2UtPnJlc3BvbmRXaXRoT3JpZ2luYWxSZXNwb25zZSgpOwot
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIHBlbmRpbmcg
aW50ZXJjZXB0IHJlc3BvbnNlIGZvciBnaXZlbiByZXF1ZXN0SWQiX3M7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIHsgfTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmludGVyY2VwdFdpdGhSZXF1ZXN0KEVycm9y
U3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIGNvbnN0IFN0cmlu
ZyogdXJsLCBjb25zdCBTdHJpbmcqIG1ldGhvZCwgY29uc3QgSlNPTjo6T2JqZWN0KiBoZWFkZXJz
LCBjb25zdCBTdHJpbmcqIHBvc3REYXRhKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4g
SW5zcGVjdG9yTmV0d29ya0FnZW50OjppbnRlcmNlcHRXaXRoUmVxdWVzdChjb25zdCBQcm90b2Nv
bDo6TmV0d29yazo6UmVxdWVzdElkJiByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgdXJsLCBjb25z
dCBTdHJpbmcmIG1ldGhvZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBoZWFkZXJzLCBjb25zdCBT
dHJpbmcmIHBvc3REYXRhKQogewogICAgIGF1dG8gcGVuZGluZ1JlcXVlc3QgPSBtX3BlbmRpbmdJ
bnRlcmNlcHRSZXF1ZXN0cy50YWtlKHJlcXVlc3RJZCk7Ci0gICAgaWYgKCFwZW5kaW5nUmVxdWVz
dCkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIHBlbmRpbmcgaW50ZXJjZXB0IHJl
cXVlc3QgZm9yIGdpdmVuIHJlcXVlc3RJZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAg
ICBpZiAoIXBlbmRpbmdSZXF1ZXN0KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk1p
c3NpbmcgcGVuZGluZyBpbnRlcmNlcHQgcmVxdWVzdCBmb3IgZ2l2ZW4gcmVxdWVzdElkIl9zKTsK
IAogICAgIGF1dG8mIGxvYWRlciA9ICpwZW5kaW5nUmVxdWVzdC0+bV9sb2FkZXI7CiAgICAgUmVz
b3VyY2VSZXF1ZXN0IHJlcXVlc3QgPSBsb2FkZXIucmVxdWVzdCgpOwotICAgIGlmICh1cmwpCi0g
ICAgICAgIHJlcXVlc3Quc2V0VVJMKFVSTCh7IH0sICp1cmwpKTsKLSAgICBpZiAobWV0aG9kKQot
ICAgICAgICByZXF1ZXN0LnNldEhUVFBNZXRob2QoKm1ldGhvZCk7CisgICAgaWYgKCEhdXJsKQor
ICAgICAgICByZXF1ZXN0LnNldFVSTChVUkwoeyB9LCB1cmwpKTsKKyAgICBpZiAoISFtZXRob2Qp
CisgICAgICAgIHJlcXVlc3Quc2V0SFRUUE1ldGhvZChtZXRob2QpOwogICAgIGlmIChoZWFkZXJz
KSB7CiAgICAgICAgIEhUVFBIZWFkZXJNYXAgZXhwbGljaXRIZWFkZXJzOwogICAgICAgICBmb3Ig
KGF1dG8mIGhlYWRlciA6ICpoZWFkZXJzKSB7Ci0gICAgICAgICAgICBTdHJpbmcgaGVhZGVyVmFs
dWU7Ci0gICAgICAgICAgICBpZiAoaGVhZGVyLnZhbHVlLT5hc1N0cmluZyhoZWFkZXJWYWx1ZSkp
CisgICAgICAgICAgICBhdXRvIGhlYWRlclZhbHVlID0gaGVhZGVyLnZhbHVlLT5hc1N0cmluZygp
OworICAgICAgICAgICAgaWYgKCEhaGVhZGVyVmFsdWUpCiAgICAgICAgICAgICAgICAgZXhwbGlj
aXRIZWFkZXJzLmFkZChoZWFkZXIua2V5LCBoZWFkZXJWYWx1ZSk7CiAgICAgICAgIH0KICAgICAg
ICAgcmVxdWVzdC5zZXRIVFRQSGVhZGVyRmllbGRzKFdURk1vdmUoZXhwbGljaXRIZWFkZXJzKSk7
CiAgICAgfQotICAgIGlmIChwb3N0RGF0YSkgeworICAgIGlmICghIXBvc3REYXRhKSB7CiAgICAg
ICAgIFZlY3Rvcjx1aW50OF90PiBidWZmZXI7Ci0gICAgICAgIGlmICghYmFzZTY0RGVjb2RlKCpw
b3N0RGF0YSwgYnVmZmVyKSkgewotICAgICAgICAgICAgZXJyb3JTdHJpbmcgPSAiVW5hYmxlIHRv
IGRlY29kZSBnaXZlbiBwb3N0RGF0YSJfczsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
fQorICAgICAgICBpZiAoIWJhc2U2NERlY29kZShwb3N0RGF0YSwgYnVmZmVyKSkKKyAgICAgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiVW5hYmxlIHRvIGRlY29kZSBnaXZlbiBwb3N0RGF0
YSJfcyk7CiAKICAgICAgICAgcmVxdWVzdC5zZXRIVFRQQm9keShGb3JtRGF0YTo6Y3JlYXRlKGJ1
ZmZlcikpOwogICAgIH0KICAgICAvLyBGSVhNRTogZmlndXJlIG91dCBob3cgdG8gaWRlbnRpZnkg
d2hlbiBhIHJlcXVlc3QgaGFzIGJlZW4gb3ZlcnJpZGRlbiB3aGVuIHdlIGFkZCB0aGlzIHRvIHRo
ZSBmcm9udGVuZC4KICAgICBwZW5kaW5nUmVxdWVzdC0+Y29udGludWVXaXRoUmVxdWVzdChyZXF1
ZXN0KTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50
OjppbnRlcmNlcHRXaXRoUmVzcG9uc2UoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBT
dHJpbmcmIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBjb250ZW50LCBib29sIGJhc2U2NEVuY29k
ZWQsIGNvbnN0IFN0cmluZyogbWltZVR5cGUsIGNvbnN0IGludCogc3RhdHVzLCBjb25zdCBTdHJp
bmcqIHN0YXR1c1RleHQsIGNvbnN0IEpTT046Ok9iamVjdCogaGVhZGVycykKK1Byb3RvY29sOjpF
cnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6aW50ZXJjZXB0V2l0aFJl
c3BvbnNlKGNvbnN0IFByb3RvY29sOjpOZXR3b3JrOjpSZXF1ZXN0SWQmIHJlcXVlc3RJZCwgY29u
c3QgU3RyaW5nJiBjb250ZW50LCBib29sIGJhc2U2NEVuY29kZWQsIGNvbnN0IFN0cmluZyYgbWlt
ZVR5cGUsIE9wdGlvbmFsPGludD4mJiBzdGF0dXMsIGNvbnN0IFN0cmluZyYgc3RhdHVzVGV4dCwg
UmVmUHRyPEpTT046Ok9iamVjdD4mJiBoZWFkZXJzKQogewogICAgIGF1dG8gcGVuZGluZ0ludGVy
Y2VwdFJlc3BvbnNlID0gbV9wZW5kaW5nSW50ZXJjZXB0UmVzcG9uc2VzLnRha2UocmVxdWVzdElk
KTsKLSAgICBpZiAoIXBlbmRpbmdJbnRlcmNlcHRSZXNwb25zZSkgewotICAgICAgICBlcnJvclN0
cmluZyA9ICJNaXNzaW5nIHBlbmRpbmcgaW50ZXJjZXB0IHJlc3BvbnNlIGZvciBnaXZlbiByZXF1
ZXN0SWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKCFwZW5kaW5nSW50ZXJj
ZXB0UmVzcG9uc2UpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTWlzc2luZyBwZW5k
aW5nIGludGVyY2VwdCByZXNwb25zZSBmb3IgZ2l2ZW4gcmVxdWVzdElkIl9zKTsKIAogICAgIFJl
c291cmNlUmVzcG9uc2Ugb3ZlcnJpZGVSZXNwb25zZShwZW5kaW5nSW50ZXJjZXB0UmVzcG9uc2Ut
Pm9yaWdpbmFsUmVzcG9uc2UoKSk7CiAgICAgb3ZlcnJpZGVSZXNwb25zZS5zZXRTb3VyY2UoUmVz
b3VyY2VSZXNwb25zZTo6U291cmNlOjpJbnNwZWN0b3JPdmVycmlkZSk7CiAKICAgICBpZiAoc3Rh
dHVzKQogICAgICAgICBvdmVycmlkZVJlc3BvbnNlLnNldEhUVFBTdGF0dXNDb2RlKCpzdGF0dXMp
OwotICAgIGlmIChzdGF0dXNUZXh0KQotICAgICAgICBvdmVycmlkZVJlc3BvbnNlLnNldEhUVFBT
dGF0dXNUZXh0KCpzdGF0dXNUZXh0KTsKLSAgICBpZiAobWltZVR5cGUpCi0gICAgICAgIG92ZXJy
aWRlUmVzcG9uc2Uuc2V0TWltZVR5cGUoKm1pbWVUeXBlKTsKKyAgICBpZiAoISFzdGF0dXNUZXh0
KQorICAgICAgICBvdmVycmlkZVJlc3BvbnNlLnNldEhUVFBTdGF0dXNUZXh0KHN0YXR1c1RleHQp
OworICAgIGlmICghIW1pbWVUeXBlKQorICAgICAgICBvdmVycmlkZVJlc3BvbnNlLnNldE1pbWVU
eXBlKG1pbWVUeXBlKTsKICAgICBpZiAoaGVhZGVycykgewogICAgICAgICBIVFRQSGVhZGVyTWFw
IGV4cGxpY2l0SGVhZGVyczsKICAgICAgICAgZm9yIChhdXRvJiBoZWFkZXIgOiAqaGVhZGVycykg
ewotICAgICAgICAgICAgU3RyaW5nIGhlYWRlclZhbHVlOwotICAgICAgICAgICAgaWYgKGhlYWRl
ci52YWx1ZS0+YXNTdHJpbmcoaGVhZGVyVmFsdWUpKQorICAgICAgICAgICAgYXV0byBoZWFkZXJW
YWx1ZSA9IGhlYWRlci52YWx1ZS0+YXNTdHJpbmcoKTsKKyAgICAgICAgICAgIGlmICghIWhlYWRl
clZhbHVlKQogICAgICAgICAgICAgICAgIGV4cGxpY2l0SGVhZGVycy5hZGQoaGVhZGVyLmtleSwg
aGVhZGVyVmFsdWUpOwogICAgICAgICB9CiAgICAgICAgIG92ZXJyaWRlUmVzcG9uc2Uuc2V0SFRU
UEhlYWRlckZpZWxkcyhXVEZNb3ZlKGV4cGxpY2l0SGVhZGVycykpOwpAQCAtMTI2MSw0MSArMTI0
NSwzNCBAQCB2b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6aW50ZXJjZXB0V2l0aFJlc3BvbnNl
KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29ucwogICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+
IG92ZXJyaWRlRGF0YTsKICAgICBpZiAoYmFzZTY0RW5jb2RlZCkgewogICAgICAgICBWZWN0b3I8
dWludDhfdD4gYnVmZmVyOwotICAgICAgICBpZiAoIWJhc2U2NERlY29kZShjb250ZW50LCBidWZm
ZXIpKSB7Ci0gICAgICAgICAgICBlcnJvclN0cmluZyA9ICJVbmFibGUgdG8gZGVjb2RlIGdpdmVu
IGNvbnRlbnQiX3M7Ci0gICAgICAgICAgICBwZW5kaW5nSW50ZXJjZXB0UmVzcG9uc2UtPnJlc3Bv
bmRXaXRoT3JpZ2luYWxSZXNwb25zZSgpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
CisgICAgICAgIGlmICghYmFzZTY0RGVjb2RlKGNvbnRlbnQsIGJ1ZmZlcikpCisgICAgICAgICAg
ICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIlVuYWJsZSB0byBkZWNvZGUgZ2l2ZW4gY29udGVudCJf
cyk7CiAKICAgICAgICAgb3ZlcnJpZGVEYXRhID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUoV1RGTW92
ZShidWZmZXIpKTsKICAgICB9IGVsc2UKICAgICAgICAgb3ZlcnJpZGVEYXRhID0gU2hhcmVkQnVm
ZmVyOjpjcmVhdGUoY29udGVudC51dGY4KCkuZGF0YSgpLCBjb250ZW50LnV0ZjgoKS5sZW5ndGgo
KSk7CiAKICAgICBwZW5kaW5nSW50ZXJjZXB0UmVzcG9uc2UtPnJlc3BvbmQob3ZlcnJpZGVSZXNw
b25zZSwgb3ZlcnJpZGVEYXRhKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVj
dG9yTmV0d29ya0FnZW50OjppbnRlcmNlcHRSZXF1ZXN0V2l0aFJlc3BvbnNlKEVycm9yU3RyaW5n
JiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgY29u
dGVudCwgYm9vbCBiYXNlNjRFbmNvZGVkLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBpbnQgc3Rh
dHVzLCBjb25zdCBTdHJpbmcmIHN0YXR1c1RleHQsIGNvbnN0IEpTT046Ok9iamVjdCYgaGVhZGVy
cykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6
aW50ZXJjZXB0UmVxdWVzdFdpdGhSZXNwb25zZShjb25zdCBQcm90b2NvbDo6TmV0d29yazo6UmVx
dWVzdElkJiByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgY29udGVudCwgYm9vbCBiYXNlNjRFbmNv
ZGVkLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBpbnQgc3RhdHVzLCBjb25zdCBTdHJpbmcmIHN0
YXR1c1RleHQsIFJlZjxKU09OOjpPYmplY3Q+JiYgaGVhZGVycykKIHsKICAgICBhdXRvIHBlbmRp
bmdSZXF1ZXN0ID0gbV9wZW5kaW5nSW50ZXJjZXB0UmVxdWVzdHMudGFrZShyZXF1ZXN0SWQpOwot
ICAgIGlmICghcGVuZGluZ1JlcXVlc3QpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWlzc2lu
ZyBwZW5kaW5nIGludGVyY2VwdCByZXF1ZXN0IGZvciBnaXZlbiByZXF1ZXN0SWQiX3M7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKCFwZW5kaW5nUmVxdWVzdCkKKyAgICAgICAgcmV0
dXJuIG1ha2VVbmV4cGVjdGVkKCJNaXNzaW5nIHBlbmRpbmcgaW50ZXJjZXB0IHJlcXVlc3QgZm9y
IGdpdmVuIHJlcXVlc3RJZCJfcyk7CiAKICAgICAvLyBMb2FkZXIgd2lsbCBiZSByZXRhaW5lZCBp
biB0aGUgZGlkUmVjZWl2ZVJlc3BvbnNlIGxhbWJkYSBiZWxvdy4KICAgICBSZWZQdHI8UmVzb3Vy
Y2VMb2FkZXI+IGxvYWRlciA9IHBlbmRpbmdSZXF1ZXN0LT5tX2xvYWRlci5nZXQoKTsKLSAgICBp
ZiAobG9hZGVyLT5yZWFjaGVkVGVybWluYWxTdGF0ZSgpKSB7Ci0gICAgICAgIGVycm9yU3RyaW5n
ID0gIlVuYWJsZSB0byBmdWxmaWxsIHJlcXVlc3QsIGl0IGhhcyBhbHJlYWR5IGJlZW4gcHJvY2Vz
c2VkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmIChsb2FkZXItPnJlYWNoZWRU
ZXJtaW5hbFN0YXRlKCkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiVW5hYmxlIHRv
IGZ1bGZpbGwgcmVxdWVzdCwgaXQgaGFzIGFscmVhZHkgYmVlbiBwcm9jZXNzZWQiX3MpOwogCiAg
ICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YTsKICAgICBpZiAoYmFzZTY0RW5jb2RlZCkgewog
ICAgICAgICBWZWN0b3I8dWludDhfdD4gYnVmZmVyOwotICAgICAgICBpZiAoIWJhc2U2NERlY29k
ZShjb250ZW50LCBidWZmZXIpKSB7Ci0gICAgICAgICAgICBlcnJvclN0cmluZyA9ICJVbmFibGUg
dG8gZGVjb2RlIGdpdmVuIGNvbnRlbnQiX3M7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KKyAgICAgICAgaWYgKCFiYXNlNjREZWNvZGUoY29udGVudCwgYnVmZmVyKSkKKyAgICAgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiVW5hYmxlIHRvIGRlY29kZSBnaXZlbiBjb250ZW50
Il9zKTsKIAogICAgICAgICBkYXRhID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUoV1RGTW92ZShidWZm
ZXIpKTsKICAgICB9IGVsc2UKQEAgLTEzMDcsOSArMTI4NCw5IEBAIHZvaWQgSW5zcGVjdG9yTmV0
d29ya0FnZW50OjppbnRlcmNlcHRSZXF1ZXN0V2l0aFJlc3BvbnNlKEVycm9yU3RyaW5nJiBlcnJv
clN0cmluCiAgICAgcmVzcG9uc2Uuc2V0SFRUUFN0YXR1c0NvZGUoc3RhdHVzKTsKICAgICByZXNw
b25zZS5zZXRIVFRQU3RhdHVzVGV4dChzdGF0dXNUZXh0KTsKICAgICBIVFRQSGVhZGVyTWFwIGV4
cGxpY2l0SGVhZGVyczsKLSAgICBmb3IgKGF1dG8mIGhlYWRlciA6IGhlYWRlcnMpIHsKLSAgICAg
ICAgU3RyaW5nIGhlYWRlclZhbHVlOwotICAgICAgICBpZiAoaGVhZGVyLnZhbHVlLT5hc1N0cmlu
ZyhoZWFkZXJWYWx1ZSkpCisgICAgZm9yIChhdXRvJiBoZWFkZXIgOiBoZWFkZXJzLmdldCgpKSB7
CisgICAgICAgIGF1dG8gaGVhZGVyVmFsdWUgPSBoZWFkZXIudmFsdWUtPmFzU3RyaW5nKCk7Cisg
ICAgICAgIGlmICghIWhlYWRlclZhbHVlKQogICAgICAgICAgICAgZXhwbGljaXRIZWFkZXJzLmFk
ZChoZWFkZXIua2V5LCBoZWFkZXJWYWx1ZSk7CiAgICAgfQogICAgIHJlc3BvbnNlLnNldEhUVFBI
ZWFkZXJGaWVsZHMoV1RGTW92ZShleHBsaWNpdEhlYWRlcnMpKTsKQEAgLTEzMTksNDQgKzEyOTYs
NDAgQEAgdm9pZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmludGVyY2VwdFJlcXVlc3RXaXRoUmVz
cG9uc2UoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW4KICAgICAgICAgICAgIGxvYWRlci0+ZGlkUmVj
ZWl2ZUJ1ZmZlcihXVEZNb3ZlKGJ1ZmZlciksIGJ1ZmZlci0+c2l6ZSgpLCBEYXRhUGF5bG9hZFdo
b2xlUmVzb3VyY2UpOwogICAgICAgICBsb2FkZXItPmRpZEZpbmlzaExvYWRpbmcoTmV0d29ya0xv
YWRNZXRyaWNzKCkpOwogICAgIH0pOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNw
ZWN0b3JOZXR3b3JrQWdlbnQ6OmludGVyY2VwdFJlcXVlc3RXaXRoRXJyb3IoRXJyb3JTdHJpbmcm
IGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBlcnJv
clR5cGVTdHJpbmcpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JOZXR3
b3JrQWdlbnQ6OmludGVyY2VwdFJlcXVlc3RXaXRoRXJyb3IoY29uc3QgUHJvdG9jb2w6Ok5ldHdv
cms6OlJlcXVlc3RJZCYgcmVxdWVzdElkLCBQcm90b2NvbDo6TmV0d29yazo6UmVzb3VyY2VFcnJv
clR5cGUgZXJyb3JUeXBlKQogewogICAgIGF1dG8gcGVuZGluZ1JlcXVlc3QgPSBtX3BlbmRpbmdJ
bnRlcmNlcHRSZXF1ZXN0cy50YWtlKHJlcXVlc3RJZCk7Ci0gICAgaWYgKCFwZW5kaW5nUmVxdWVz
dCkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIHBlbmRpbmcgaW50ZXJjZXB0IHJl
cXVlc3QgZm9yIGdpdmVuIHJlcXVlc3RJZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAg
ICBpZiAoIXBlbmRpbmdSZXF1ZXN0KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk1p
c3NpbmcgcGVuZGluZyBpbnRlcmNlcHQgcmVxdWVzdCBmb3IgZ2l2ZW4gcmVxdWVzdElkIl9zKTsK
IAogICAgIGF1dG8mIGxvYWRlciA9ICpwZW5kaW5nUmVxdWVzdC0+bV9sb2FkZXI7Ci0gICAgaWYg
KGxvYWRlci5yZWFjaGVkVGVybWluYWxTdGF0ZSgpKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0g
IlVuYWJsZSB0byBhYm9ydCByZXF1ZXN0LCBpdCBoYXMgYWxyZWFkeSBiZWVuIHByb2Nlc3NlZCJf
czsKLSAgICAgICAgcmV0dXJuOworICAgIGlmIChsb2FkZXIucmVhY2hlZFRlcm1pbmFsU3RhdGUo
KSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJVbmFibGUgdG8gYWJvcnQgcmVxdWVz
dCwgaXQgaGFzIGFscmVhZHkgYmVlbiBwcm9jZXNzZWQiX3MpOworCisgICAgc3dpdGNoIChlcnJv
clR5cGUpIHsKKyAgICBjYXNlIFByb3RvY29sOjpOZXR3b3JrOjpSZXNvdXJjZUVycm9yVHlwZTo6
R2VuZXJhbDoKKyAgICAgICAgbG9hZGVyLmRpZEZhaWwoUmVzb3VyY2VFcnJvcihlcnJvckRvbWFp
bldlYktpdEludGVybmFsLCAwLCBsb2FkZXIudXJsKCksICJSZXF1ZXN0IGludGVyY2VwdGVkIl9z
LCBSZXNvdXJjZUVycm9yOjpUeXBlOjpHZW5lcmFsKSk7CisgICAgICAgIHJldHVybiB7IH07CisK
KyAgICBjYXNlIFByb3RvY29sOjpOZXR3b3JrOjpSZXNvdXJjZUVycm9yVHlwZTo6QWNjZXNzQ29u
dHJvbDoKKyAgICAgICAgbG9hZGVyLmRpZEZhaWwoUmVzb3VyY2VFcnJvcihlcnJvckRvbWFpbldl
YktpdEludGVybmFsLCAwLCBsb2FkZXIudXJsKCksICJBY2Nlc3MgZGVuaWVkIl9zLCBSZXNvdXJj
ZUVycm9yOjpUeXBlOjpBY2Nlc3NDb250cm9sKSk7CisgICAgICAgIHJldHVybiB7IH07CisKKyAg
ICBjYXNlIFByb3RvY29sOjpOZXR3b3JrOjpSZXNvdXJjZUVycm9yVHlwZTo6Q2FuY2VsbGF0aW9u
OgorICAgICAgICBsb2FkZXIuZGlkRmFpbChSZXNvdXJjZUVycm9yKGVycm9yRG9tYWluV2ViS2l0
SW50ZXJuYWwsIDAsIGxvYWRlci51cmwoKSwgIlJlcXVlc3QgY2FuY2VsZWQiX3MsIFJlc291cmNl
RXJyb3I6OlR5cGU6OkNhbmNlbGxhdGlvbikpOworICAgICAgICByZXR1cm4geyB9OworCisgICAg
Y2FzZSBQcm90b2NvbDo6TmV0d29yazo6UmVzb3VyY2VFcnJvclR5cGU6OlRpbWVvdXQ6CisgICAg
ICAgIGxvYWRlci5kaWRGYWlsKFJlc291cmNlRXJyb3IoZXJyb3JEb21haW5XZWJLaXRJbnRlcm5h
bCwgMCwgbG9hZGVyLnVybCgpLCAiUmVxdWVzdCB0aW1lZCBvdXQiX3MsIFJlc291cmNlRXJyb3I6
OlR5cGU6OlRpbWVvdXQpKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKLSAgICBhdXRv
IGVycm9yVHlwZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6Okluc3BlY3RvckhlbHBlcnM6OnBhcnNl
RW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpSZXNvdXJj
ZUVycm9yVHlwZT4oZXJyb3JUeXBlU3RyaW5nKTsKLSAgICBpZiAoIWVycm9yVHlwZSkgewotICAg
ICAgICBlcnJvclN0cmluZyA9IG1ha2VTdHJpbmcoIlVua25vd24gZXJyb3JUeXBlOiAiX3MsIGVy
cm9yVHlwZVN0cmluZyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBSZXNvdXJjZUVy
cm9yIGVycm9yOwotICAgIHN3aXRjaCAoZXJyb3JUeXBlLnZhbHVlKCkpIHsKLSAgICBjYXNlIElu
c3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OlJlc291cmNlRXJyb3JUeXBlOjpHZW5lcmFsOgot
ICAgICAgICBlcnJvciA9IFJlc291cmNlRXJyb3IoZXJyb3JEb21haW5XZWJLaXRJbnRlcm5hbCwg
MCwgbG9hZGVyLnVybCgpLCAiUmVxdWVzdCBpbnRlcmNlcHRlZCJfcywgUmVzb3VyY2VFcnJvcjo6
VHlwZTo6R2VuZXJhbCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90
b2NvbDo6TmV0d29yazo6UmVzb3VyY2VFcnJvclR5cGU6OkFjY2Vzc0NvbnRyb2w6Ci0gICAgICAg
IGVycm9yID0gUmVzb3VyY2VFcnJvcihlcnJvckRvbWFpbldlYktpdEludGVybmFsLCAwLCBsb2Fk
ZXIudXJsKCksICJBY2Nlc3MgZGVuaWVkIl9zLCBSZXNvdXJjZUVycm9yOjpUeXBlOjpBY2Nlc3ND
b250cm9sKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJbnNwZWN0b3I6OlByb3RvY29sOjpO
ZXR3b3JrOjpSZXNvdXJjZUVycm9yVHlwZTo6Q2FuY2VsbGF0aW9uOgotICAgICAgICBlcnJvciA9
IFJlc291cmNlRXJyb3IoZXJyb3JEb21haW5XZWJLaXRJbnRlcm5hbCwgMCwgbG9hZGVyLnVybCgp
LCAiUmVxdWVzdCBjYW5jZWxlZCJfcywgUmVzb3VyY2VFcnJvcjo6VHlwZTo6Q2FuY2VsbGF0aW9u
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3Jr
OjpSZXNvdXJjZUVycm9yVHlwZTo6VGltZW91dDoKLSAgICAgICAgZXJyb3IgPSBSZXNvdXJjZUVy
cm9yKGVycm9yRG9tYWluV2ViS2l0SW50ZXJuYWwsIDAsIGxvYWRlci51cmwoKSwgIlJlcXVlc3Qg
dGltZWQgb3V0Il9zLCBSZXNvdXJjZUVycm9yOjpUeXBlOjpUaW1lb3V0KTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgfQotICAgIGxvYWRlci5kaWRGYWlsKGVycm9yKTsKKyAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICByZXR1cm4geyB9OwogfQogCiBib29sIEluc3BlY3Rvck5ldHdvcmtBZ2Vu
dDo6c2hvdWxkVHJlYXRBc1RleHQoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKQEAgLTE0MzksOSAr
MTQxMiw5IEBAIGJvb2wgSW5zcGVjdG9yTmV0d29ya0FnZW50OjpjYWNoZWRSZXNvdXJjZUNvbnRl
bnQoQ2FjaGVkUmVzb3VyY2UmIHJlc291cmNlLCBTdHJpCiAgICAgfQogfQogCi1zdGF0aWMgUmVm
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OlNlYXJjaFJlc3VsdD4gYnVpbGRPYmplY3RGb3JT
ZWFyY2hSZXN1bHQoY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgZnJhbWVJ
ZCwgY29uc3QgU3RyaW5nJiB1cmwsIGludCBtYXRjaGVzQ291bnQpCitzdGF0aWMgUmVmPFByb3Rv
Y29sOjpQYWdlOjpTZWFyY2hSZXN1bHQ+IGJ1aWxkT2JqZWN0Rm9yU2VhcmNoUmVzdWx0KGNvbnN0
IFByb3RvY29sOjpOZXR3b3JrOjpSZXF1ZXN0SWQmIHJlcXVlc3RJZCwgY29uc3QgUHJvdG9jb2w6
Ok5ldHdvcms6OkZyYW1lSWQmIGZyYW1lSWQsIGNvbnN0IFN0cmluZyYgdXJsLCBpbnQgbWF0Y2hl
c0NvdW50KQogewotICAgIGF1dG8gc2VhcmNoUmVzdWx0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6
UGFnZTo6U2VhcmNoUmVzdWx0OjpjcmVhdGUoKQorICAgIGF1dG8gc2VhcmNoUmVzdWx0ID0gUHJv
dG9jb2w6OlBhZ2U6OlNlYXJjaFJlc3VsdDo6Y3JlYXRlKCkKICAgICAgICAgLnNldFVybCh1cmwp
CiAgICAgICAgIC5zZXRGcmFtZUlkKGZyYW1lSWQpCiAgICAgICAgIC5zZXRNYXRjaGVzQ291bnQo
bWF0Y2hlc0NvdW50KQpAQCAtMTQ2MSw3ICsxNDM0LDcgQEAgc3RhdGljIE9wdGlvbmFsPFN0cmlu
Zz4gdGV4dENvbnRlbnRGb3JSZXNvdXJjZURhdGEoY29uc3QgTmV0d29ya1Jlc291cmNlc0RhdGE6
OlIKICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQogCi12b2lkIEluc3BlY3Rvck5ldHdvcmtB
Z2VudDo6c2VhcmNoT3RoZXJSZXF1ZXN0cyhjb25zdCBKU0M6OllhcnI6OlJlZ3VsYXJFeHByZXNz
aW9uJiByZWdleCwgUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFn
ZTo6U2VhcmNoUmVzdWx0Pj4mIHJlc3VsdCkKK3ZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50Ojpz
ZWFyY2hPdGhlclJlcXVlc3RzKGNvbnN0IEpTQzo6WWFycjo6UmVndWxhckV4cHJlc3Npb24mIHJl
Z2V4LCBSZWY8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UGFnZTo6U2VhcmNoUmVzdWx0Pj4mIHJl
c3VsdCkKIHsKICAgICBWZWN0b3I8TmV0d29ya1Jlc291cmNlc0RhdGE6OlJlc291cmNlRGF0YSo+
IHJlc291cmNlcyA9IG1fcmVzb3VyY2VzRGF0YS0+cmVzb3VyY2VzKCk7CiAgICAgZm9yIChhdXRv
KiByZXNvdXJjZURhdGEgOiByZXNvdXJjZXMpIHsKQEAgLTE0NzMsNyArMTQ0Niw3IEBAIHZvaWQg
SW5zcGVjdG9yTmV0d29ya0FnZW50OjpzZWFyY2hPdGhlclJlcXVlc3RzKGNvbnN0IEpTQzo6WWFy
cjo6UmVndWxhckV4cHJlc3NpCiAgICAgfQogfQogCi12b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2Vu
dDo6c2VhcmNoSW5SZXF1ZXN0KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5n
JiByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgcXVlcnksIGJvb2wgY2FzZVNlbnNpdGl2ZSwgYm9v
bCBpc1JlZ2V4LCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpHZW5l
cmljVHlwZXM6OlNlYXJjaE1hdGNoPj4mIHJlc3VsdHMpCit2b2lkIEluc3BlY3Rvck5ldHdvcmtB
Z2VudDo6c2VhcmNoSW5SZXF1ZXN0KFByb3RvY29sOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcs
IGNvbnN0IFByb3RvY29sOjpOZXR3b3JrOjpSZXF1ZXN0SWQmIHJlcXVlc3RJZCwgY29uc3QgU3Ry
aW5nJiBxdWVyeSwgYm9vbCBjYXNlU2Vuc2l0aXZlLCBib29sIGlzUmVnZXgsIFJlZlB0cjxKU09O
OjpBcnJheU9mPFByb3RvY29sOjpHZW5lcmljVHlwZXM6OlNlYXJjaE1hdGNoPj4mIHJlc3VsdHMp
CiB7CiAgICAgTmV0d29ya1Jlc291cmNlc0RhdGE6OlJlc291cmNlRGF0YSBjb25zdCogcmVzb3Vy
Y2VEYXRhID0gbV9yZXNvdXJjZXNEYXRhLT5kYXRhKHJlcXVlc3RJZCk7CiAgICAgaWYgKCFyZXNv
dXJjZURhdGEpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9yTmV0d29ya0FnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRz
L0luc3BlY3Rvck5ldHdvcmtBZ2VudC5oCmluZGV4IDM0NDBlNzFhNWVkNWVmMzg0NjIwYTlmNjI4
MDM3NTFlOTgzZGI1YjEuLjQwZTIzYzQzYTcwZTc5YjBjMmMwYjFkNmExNTNlZGUzOTU4MDJhYTcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yTmV0
d29ya0FnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0
b3JOZXR3b3JrQWdlbnQuaApAQCAtNjEsOCArNjEsNiBAQCBjbGFzcyBXZWJTb2NrZXQ7CiAKIHN0
cnVjdCBXZWJTb2NrZXRGcmFtZTsKIAotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7Ci0KIGNs
YXNzIEluc3BlY3Rvck5ldHdvcmtBZ2VudCA6IHB1YmxpYyBJbnNwZWN0b3JBZ2VudEJhc2UsIHB1
YmxpYyBJbnNwZWN0b3I6Ok5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewogICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKEluc3BlY3Rvck5ldHdvcmtBZ2VudCk7CiAgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CkBAIC03OSwyMiArNzcsMjIgQEAgcHVibGljOgogICAgIHZvaWQgd2ls
bERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKSBm
aW5hbDsKIAogICAgIC8vIE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIKLSAgICB2b2lk
IGVuYWJsZShFcnJvclN0cmluZyYpIGZpbmFsOwotICAgIHZvaWQgZGlzYWJsZShFcnJvclN0cmlu
ZyYpIGZpbmFsOwotICAgIHZvaWQgc2V0RXh0cmFIVFRQSGVhZGVycyhFcnJvclN0cmluZyYsIGNv
bnN0IEpTT046Ok9iamVjdCYgaGVhZGVycykgZmluYWw7Ci0gICAgdm9pZCBnZXRSZXNwb25zZUJv
ZHkoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgU3RyaW5nKiBjb250ZW50
LCBib29sKiBiYXNlNjRFbmNvZGVkKSBmaW5hbDsKLSAgICB2b2lkIHNldFJlc291cmNlQ2FjaGlu
Z0Rpc2FibGVkKEVycm9yU3RyaW5nJiwgYm9vbCBkaXNhYmxlZCkgZmluYWw7Ci0gICAgdm9pZCBs
b2FkUmVzb3VyY2UoY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBjb25zdCBTdHJpbmcmIHVybCwgUmVm
PExvYWRSZXNvdXJjZUNhbGxiYWNrPiYmKSBmaW5hbDsKLSAgICB2b2lkIGdldFNlcmlhbGl6ZWRD
ZXJ0aWZpY2F0ZShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBTdHJpbmcq
IHNlcmlhbGl6ZWRDZXJ0aWZpY2F0ZSkgZmluYWw7Ci0gICAgdm9pZCByZXNvbHZlV2ViU29ja2V0
KEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyogb2Jq
ZWN0R3JvdXAsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmpl
Y3Q+JikgZmluYWw7Ci0gICAgdm9pZCBzZXRJbnRlcmNlcHRpb25FbmFibGVkKEVycm9yU3RyaW5n
JiwgYm9vbCBlbmFibGVkKSBmaW5hbDsKLSAgICB2b2lkIGFkZEludGVyY2VwdGlvbihFcnJvclN0
cmluZyYsIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIG5ldHdvcmtTdGFnZVN0cmlu
ZywgY29uc3QgYm9vbCogY2FzZVNlbnNpdGl2ZSwgY29uc3QgYm9vbCogaXNSZWdleCkgZmluYWw7
Ci0gICAgdm9pZCByZW1vdmVJbnRlcmNlcHRpb24oRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcm
IHVybCwgY29uc3QgU3RyaW5nJiBuZXR3b3JrU3RhZ2VTdHJpbmcsIGNvbnN0IGJvb2wqIGNhc2VT
ZW5zaXRpdmUsIGNvbnN0IGJvb2wqIGlzUmVnZXgpIGZpbmFsOwotICAgIHZvaWQgaW50ZXJjZXB0
Q29udGludWUoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgY29uc3QgU3Ry
aW5nJiBuZXR3b3JrU3RhZ2VTdHJpbmcpIGZpbmFsOwotICAgIHZvaWQgaW50ZXJjZXB0V2l0aFJl
cXVlc3QoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5n
KiB1cmwsIGNvbnN0IFN0cmluZyogbWV0aG9kLCBjb25zdCBKU09OOjpPYmplY3QqIGhlYWRlcnMs
IGNvbnN0IFN0cmluZyogcG9zdERhdGEpIGZpbmFsOwotICAgIHZvaWQgaW50ZXJjZXB0V2l0aFJl
c3BvbnNlKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIGNvbnN0IFN0cmlu
ZyYgY29udGVudCwgYm9vbCBiYXNlNjRFbmNvZGVkLCBjb25zdCBTdHJpbmcqIG1pbWVUeXBlLCBj
b25zdCBpbnQqIHN0YXR1cywgY29uc3QgU3RyaW5nKiBzdGF0dXNUZXh0LCBjb25zdCBKU09OOjpP
YmplY3QqIGhlYWRlcnMpIGZpbmFsOwotICAgIHZvaWQgaW50ZXJjZXB0UmVxdWVzdFdpdGhSZXNw
b25zZShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcm
IGNvbnRlbnQsIGJvb2wgYmFzZTY0RW5jb2RlZCwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgaW50
IHN0YXR1cywgY29uc3QgU3RyaW5nJiBzdGF0dXNUZXh0LCBjb25zdCBKU09OOjpPYmplY3QmIGhl
YWRlcnMpIGZpbmFsOwotICAgIHZvaWQgaW50ZXJjZXB0UmVxdWVzdFdpdGhFcnJvcihFcnJvclN0
cmluZyYsIGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIGVycm9yVHlwZSkg
ZmluYWw7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBlbmFi
bGUoKSBmaW5hbDsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+
IGRpc2FibGUoKSBmaW5hbDsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09y
PHZvaWQ+IHNldEV4dHJhSFRUUEhlYWRlcnMoUmVmPEpTT046Ok9iamVjdD4mJikgZmluYWw7Cisg
ICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxzdGQ6OnR1cGxlPFN0cmluZywg
Ym9vbCAvKiBiYXNlNjRFbmNvZGVkICovPj4gZ2V0UmVzcG9uc2VCb2R5KGNvbnN0IEluc3BlY3Rv
cjo6UHJvdG9jb2w6Ok5ldHdvcms6OlJlcXVlc3RJZCYpIGZpbmFsOworICAgIEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc2V0UmVzb3VyY2VDYWNoaW5nRGlzYWJsZWQo
Ym9vbCkgZmluYWw7CisgICAgdm9pZCBsb2FkUmVzb3VyY2UoY29uc3QgSW5zcGVjdG9yOjpQcm90
b2NvbDo6TmV0d29yazo6RnJhbWVJZCYsIGNvbnN0IFN0cmluZyYgdXJsLCBSZWY8TG9hZFJlc291
cmNlQ2FsbGJhY2s+JiYpIGZpbmFsOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3Ry
aW5nT3I8U3RyaW5nPiBnZXRTZXJpYWxpemVkQ2VydGlmaWNhdGUoY29uc3QgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6TmV0d29yazo6UmVxdWVzdElkJikgZmluYWw7CisgICAgSW5zcGVjdG9yOjpQcm90
b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6UmVt
b3RlT2JqZWN0Pj4gcmVzb2x2ZVdlYlNvY2tldChjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpO
ZXR3b3JrOjpSZXF1ZXN0SWQmLCBjb25zdCBTdHJpbmcmIG9iamVjdEdyb3VwKSBmaW5hbDsKKyAg
ICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHNldEludGVyY2VwdGlv
bkVuYWJsZWQoYm9vbCkgZmluYWw7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJp
bmdPcjx2b2lkPiBhZGRJbnRlcmNlcHRpb24oY29uc3QgU3RyaW5nJiB1cmwsIEluc3BlY3Rvcjo6
UHJvdG9jb2w6Ok5ldHdvcms6Ok5ldHdvcmtTdGFnZSwgT3B0aW9uYWw8Ym9vbD4mJiBjYXNlU2Vu
c2l0aXZlLCBPcHRpb25hbDxib29sPiYmIGlzUmVnZXgpIGZpbmFsOworICAgIEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gcmVtb3ZlSW50ZXJjZXB0aW9uKGNvbnN0IFN0
cmluZyYgdXJsLCBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpOZXR3b3JrU3RhZ2UsIE9w
dGlvbmFsPGJvb2w+JiYgY2FzZVNlbnNpdGl2ZSwgT3B0aW9uYWw8Ym9vbD4mJiBpc1JlZ2V4KSBm
aW5hbDsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGludGVy
Y2VwdENvbnRpbnVlKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OlJlcXVlc3RJ
ZCYsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6Ok5ldHdvcmtTdGFnZSkgZmluYWw7Cisg
ICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBpbnRlcmNlcHRXaXRo
UmVxdWVzdChjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpSZXF1ZXN0SWQmLCBj
b25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZlB0cjxKU09OOjpPYmpl
Y3Q+JiYgaGVhZGVycywgY29uc3QgU3RyaW5nJiBwb3N0RGF0YSkgZmluYWw7CisgICAgSW5zcGVj
dG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBpbnRlcmNlcHRXaXRoUmVzcG9uc2Uo
Y29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6UmVxdWVzdElkJiwgY29uc3QgU3Ry
aW5nJiBjb250ZW50LCBib29sIGJhc2U2NEVuY29kZWQsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUs
IE9wdGlvbmFsPGludD4mJiBzdGF0dXMsIGNvbnN0IFN0cmluZyYgc3RhdHVzVGV4dCwgUmVmUHRy
PEpTT046Ok9iamVjdD4mJiBoZWFkZXJzKSBmaW5hbDsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29s
OjpFcnJvclN0cmluZ09yPHZvaWQ+IGludGVyY2VwdFJlcXVlc3RXaXRoUmVzcG9uc2UoY29uc3Qg
SW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6UmVxdWVzdElkJiwgY29uc3QgU3RyaW5nJiBj
b250ZW50LCBib29sIGJhc2U2NEVuY29kZWQsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGludCBz
dGF0dXMsIGNvbnN0IFN0cmluZyYgc3RhdHVzVGV4dCwgUmVmPEpTT046Ok9iamVjdD4mJiBoZWFk
ZXJzKSBmaW5hbDsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+
IGludGVyY2VwdFJlcXVlc3RXaXRoRXJyb3IoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0
d29yazo6UmVxdWVzdElkJiwgSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6UmVzb3VyY2VF
cnJvclR5cGUpIGZpbmFsOwogCiAgICAgLy8gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uCiAgICAg
dm9pZCB3aWxsUmVjYWxjdWxhdGVTdHlsZSgpOwpAQCAtMTI3LDMyICsxMjUsMjkgQEAgcHVibGlj
OgogICAgIHZvaWQgaW50ZXJjZXB0UmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYsIHVu
c2lnbmVkIGxvbmcgaWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBSZXNv
dXJjZVJlc3BvbnNlJiwgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4pPiYmKTsKICAgICB2b2lkIGludGVy
Y2VwdFJlcXVlc3QoUmVzb3VyY2VMb2FkZXImLCBGdW5jdGlvbjx2b2lkKGNvbnN0IFJlc291cmNl
UmVxdWVzdCYpPiYmKTsKIAotICAgIHZvaWQgc2VhcmNoT3RoZXJSZXF1ZXN0cyhjb25zdCBKU0M6
OllhcnI6OlJlZ3VsYXJFeHByZXNzaW9uJiwgUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9y
OjpQcm90b2NvbDo6UGFnZTo6U2VhcmNoUmVzdWx0Pj4mKTsKLSAgICB2b2lkIHNlYXJjaEluUmVx
dWVzdChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcm
IHF1ZXJ5LCBib29sIGNhc2VTZW5zaXRpdmUsIGJvb2wgaXNSZWdleCwgUmVmUHRyPEpTT046OkFy
cmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6R2VuZXJpY1R5cGVzOjpTZWFyY2hNYXRjaD4+Jik7
CisgICAgdm9pZCBzZWFyY2hPdGhlclJlcXVlc3RzKGNvbnN0IEpTQzo6WWFycjo6UmVndWxhckV4
cHJlc3Npb24mLCBSZWY8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpT
ZWFyY2hSZXN1bHQ+PiYpOworICAgIHZvaWQgc2VhcmNoSW5SZXF1ZXN0KEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkVycm9yU3RyaW5nJiwgY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6
UmVxdWVzdElkJiwgY29uc3QgU3RyaW5nJiBxdWVyeSwgYm9vbCBjYXNlU2Vuc2l0aXZlLCBib29s
IGlzUmVnZXgsIFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkdlbmVy
aWNUeXBlczo6U2VhcmNoTWF0Y2g+PiYpOwogCiBwcm90ZWN0ZWQ6CiAgICAgSW5zcGVjdG9yTmV0
d29ya0FnZW50KFdlYkFnZW50Q29udGV4dCYpOwogCi0gICAgdmlydHVhbCBTdHJpbmcgbG9hZGVy
SWRlbnRpZmllcihEb2N1bWVudExvYWRlciopID0gMDsKLSAgICB2aXJ0dWFsIFN0cmluZyBmcmFt
ZUlkZW50aWZpZXIoRG9jdW1lbnRMb2FkZXIqKSA9IDA7CisgICAgdmlydHVhbCBJbnNwZWN0b3I6
OlByb3RvY29sOjpOZXR3b3JrOjpMb2FkZXJJZCBsb2FkZXJJZGVudGlmaWVyKERvY3VtZW50TG9h
ZGVyKikgPSAwOworICAgIHZpcnR1YWwgSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6RnJh
bWVJZCBmcmFtZUlkZW50aWZpZXIoRG9jdW1lbnRMb2FkZXIqKSA9IDA7CiAgICAgdmlydHVhbCBW
ZWN0b3I8V2ViU29ja2V0Kj4gYWN0aXZlV2ViU29ja2V0cyhjb25zdCBMb2NrSG9sZGVyJikgPSAw
OwotICAgIHZpcnR1YWwgdm9pZCBzZXRSZXNvdXJjZUNhY2hpbmdEaXNhYmxlZChib29sKSA9IDA7
Ci0gICAgdmlydHVhbCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250
ZXh0KEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBmcmFtZUlkKSA9IDA7CisgICAgdmlydHVh
bCB2b2lkIHNldFJlc291cmNlQ2FjaGluZ0Rpc2FibGVkSW50ZXJhbChib29sKSA9IDA7CisgICAg
dmlydHVhbCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nJiwgY29uc3QgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6TmV0d29yazo6RnJhbWVJZCYpID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkRm9yY2VC
dWZmZXJpbmdOZXR3b3JrUmVzb3VyY2VEYXRhKCkgY29uc3QgPSAwOwogCiBwcml2YXRlOgotICAg
IHZvaWQgZW5hYmxlKCk7Ci0KICAgICB2b2lkIHdpbGxTZW5kUmVxdWVzdCh1bnNpZ25lZCBsb25n
IGlkZW50aWZpZXIsIERvY3VtZW50TG9hZGVyKiwgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgUmVz
b3VyY2VSZXNwb25zZSYgcmVkaXJlY3RSZXNwb25zZSwgSW5zcGVjdG9yUGFnZUFnZW50OjpSZXNv
dXJjZVR5cGUpOwogCi0gICAgdXNpbmcgTmV0d29ya1N0YWdlID0gSW5zcGVjdG9yOjpQcm90b2Nv
bDo6TmV0d29yazo6TmV0d29ya1N0YWdlOwotICAgIGJvb2wgc2hvdWxkSW50ZXJjZXB0KFVSTCwg
TmV0d29ya1N0YWdlKTsKKyAgICBib29sIHNob3VsZEludGVyY2VwdChVUkwsIEluc3BlY3Rvcjo6
UHJvdG9jb2w6Ok5ldHdvcms6Ok5ldHdvcmtTdGFnZSk7CiAgICAgdm9pZCBjb250aW51ZVBlbmRp
bmdSZXF1ZXN0cygpOwogICAgIHZvaWQgY29udGludWVQZW5kaW5nUmVzcG9uc2VzKCk7CiAKLSAg
ICBXZWJTb2NrZXQqIHdlYlNvY2tldEZvclJlcXVlc3RJZChjb25zdCBTdHJpbmcmIHJlcXVlc3RJ
ZCk7CisgICAgV2ViU29ja2V0KiB3ZWJTb2NrZXRGb3JSZXF1ZXN0SWQoY29uc3QgSW5zcGVjdG9y
OjpQcm90b2NvbDo6TmV0d29yazo6UmVxdWVzdElkJik7CiAKLSAgICBSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6TmV0d29yazo6SW5pdGlhdG9yPiBidWlsZEluaXRpYXRvck9iamVjdChEb2N1
bWVudCosIGNvbnN0IFJlc291cmNlUmVxdWVzdCogPSBudWxscHRyKTsKKyAgICBSZWY8SW5zcGVj
dG9yOjpQcm90b2NvbDo6TmV0d29yazo6SW5pdGlhdG9yPiBidWlsZEluaXRpYXRvck9iamVjdChE
b2N1bWVudCosIGNvbnN0IFJlc291cmNlUmVxdWVzdCogPSBudWxscHRyKTsKICAgICBSZWY8SW5z
cGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6UmVzb3VyY2VUaW1pbmc+IGJ1aWxkT2JqZWN0Rm9y
VGltaW5nKGNvbnN0IE5ldHdvcmtMb2FkTWV0cmljcyosIFJlc291cmNlTG9hZGVyJik7CiAgICAg
UmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6Ok1ldHJpY3M+IGJ1aWxkT2JqZWN0Rm9y
TWV0cmljcyhjb25zdCBOZXR3b3JrTG9hZE1ldHJpY3MmKTsKICAgICBSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6TmV0d29yazo6UmVzcG9uc2U+IGJ1aWxkT2JqZWN0Rm9yUmVzb3VyY2VSZXNw
b25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiwgUmVzb3VyY2VMb2FkZXIqKTsKQEAgLTIzNiw3
ICsyMzEsNyBAQCBwcml2YXRlOgogICAgICAgICBTdHJpbmcgdXJsOwogICAgICAgICBib29sIGNh
c2VTZW5zaXRpdmUgeyB0cnVlIH07CiAgICAgICAgIGJvb2wgaXNSZWdleCB7IGZhbHNlIH07Ci0g
ICAgICAgIE5ldHdvcmtTdGFnZSBuZXR3b3JrU3RhZ2UgeyBOZXR3b3JrU3RhZ2U6OlJlc3BvbnNl
IH07CisgICAgICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6Ok5ldHdvcmtTdGFnZSBu
ZXR3b3JrU3RhZ2UgeyBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpOZXR3b3JrU3RhZ2U6
OlJlc3BvbnNlIH07CiAKICAgICAgICAgaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBJbnRl
cmNlcHQmIG90aGVyKSBjb25zdAogICAgICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAKaW5kZXggNTM5ZTgxMDVi
NjZlN2IyYTZhMDU1NzFhMWUxYzhjZDZiZGYyN2M5MC4uOGJmN2FlMWUwZDA1YTI2NDljMTNhYmIw
ZDE0ZDIwODQzNzc1ODA5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Fn
ZW50cy9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9hZ2VudHMvSW5zcGVjdG9yUGFnZUFnZW50LmNwcApAQCAtMTUxLDcgKzE1MSw3IEBAIFZlY3Rv
cjxDYWNoZWRSZXNvdXJjZSo+IEluc3BlY3RvclBhZ2VBZ2VudDo6Y2FjaGVkUmVzb3VyY2VzRm9y
RnJhbWUoRnJhbWUqIGZyYW1lCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBJbnNwZWN0
b3JQYWdlQWdlbnQ6OnJlc291cmNlQ29udGVudChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIEZy
YW1lKiBmcmFtZSwgY29uc3QgVVJMJiB1cmwsIFN0cmluZyogcmVzdWx0LCBib29sKiBiYXNlNjRF
bmNvZGVkKQordm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OnJlc291cmNlQ29udGVudChQcm90b2Nv
bDo6RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBGcmFtZSogZnJhbWUsIGNvbnN0IFVSTCYgdXJs
LCBTdHJpbmcqIHJlc3VsdCwgYm9vbCogYmFzZTY0RW5jb2RlZCkKIHsKICAgICBEb2N1bWVudExv
YWRlciogbG9hZGVyID0gYXNzZXJ0RG9jdW1lbnRMb2FkZXIoZXJyb3JTdHJpbmcsIGZyYW1lKTsK
ICAgICBpZiAoIWxvYWRlcikKQEAgLTIxMywzNyArMjEzLDM3IEBAIENhY2hlZFJlc291cmNlKiBJ
bnNwZWN0b3JQYWdlQWdlbnQ6OmNhY2hlZFJlc291cmNlKEZyYW1lKiBmcmFtZSwgY29uc3QgVVJM
JiB1cmwpCiAgICAgcmV0dXJuIGNhY2hlZFJlc291cmNlOwogfQogCi1JbnNwZWN0b3I6OlByb3Rv
Y29sOjpQYWdlOjpSZXNvdXJjZVR5cGUgSW5zcGVjdG9yUGFnZUFnZW50OjpyZXNvdXJjZVR5cGVK
U09OKEluc3BlY3RvclBhZ2VBZ2VudDo6UmVzb3VyY2VUeXBlIHJlc291cmNlVHlwZSkKK1Byb3Rv
Y29sOjpQYWdlOjpSZXNvdXJjZVR5cGUgSW5zcGVjdG9yUGFnZUFnZW50OjpyZXNvdXJjZVR5cGVK
U09OKEluc3BlY3RvclBhZ2VBZ2VudDo6UmVzb3VyY2VUeXBlIHJlc291cmNlVHlwZSkKIHsKICAg
ICBzd2l0Y2ggKHJlc291cmNlVHlwZSkgewogICAgIGNhc2UgRG9jdW1lbnRSZXNvdXJjZToKLSAg
ICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OlJlc291cmNlVHlwZTo6RG9j
dW1lbnQ7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6UGFnZTo6UmVzb3VyY2VUeXBlOjpEb2N1
bWVudDsKICAgICBjYXNlIEltYWdlUmVzb3VyY2U6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6
OlByb3RvY29sOjpQYWdlOjpSZXNvdXJjZVR5cGU6OkltYWdlOworICAgICAgICByZXR1cm4gUHJv
dG9jb2w6OlBhZ2U6OlJlc291cmNlVHlwZTo6SW1hZ2U7CiAgICAgY2FzZSBGb250UmVzb3VyY2U6
Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpSZXNvdXJjZVR5cGU6
OkZvbnQ7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6UGFnZTo6UmVzb3VyY2VUeXBlOjpGb250
OwogICAgIGNhc2UgU3R5bGVTaGVldFJlc291cmNlOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9y
OjpQcm90b2NvbDo6UGFnZTo6UmVzb3VyY2VUeXBlOjpTdHlsZVNoZWV0OworICAgICAgICByZXR1
cm4gUHJvdG9jb2w6OlBhZ2U6OlJlc291cmNlVHlwZTo6U3R5bGVTaGVldDsKICAgICBjYXNlIFNj
cmlwdFJlc291cmNlOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6
UmVzb3VyY2VUeXBlOjpTY3JpcHQ7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6UGFnZTo6UmVz
b3VyY2VUeXBlOjpTY3JpcHQ7CiAgICAgY2FzZSBYSFJSZXNvdXJjZToKLSAgICAgICAgcmV0dXJu
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OlJlc291cmNlVHlwZTo6WEhSOworICAgICAgICBy
ZXR1cm4gUHJvdG9jb2w6OlBhZ2U6OlJlc291cmNlVHlwZTo6WEhSOwogICAgIGNhc2UgRmV0Y2hS
ZXNvdXJjZToKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OlJlc291
cmNlVHlwZTo6RmV0Y2g7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6UGFnZTo6UmVzb3VyY2VU
eXBlOjpGZXRjaDsKICAgICBjYXNlIFBpbmdSZXNvdXJjZToKLSAgICAgICAgcmV0dXJuIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OlJlc291cmNlVHlwZTo6UGluZzsKKyAgICAgICAgcmV0dXJu
IFByb3RvY29sOjpQYWdlOjpSZXNvdXJjZVR5cGU6OlBpbmc7CiAgICAgY2FzZSBCZWFjb25SZXNv
dXJjZToKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OlJlc291cmNl
VHlwZTo6QmVhY29uOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OlBhZ2U6OlJlc291cmNlVHlw
ZTo6QmVhY29uOwogICAgIGNhc2UgV2ViU29ja2V0UmVzb3VyY2U6Ci0gICAgICAgIHJldHVybiBJ
bnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpSZXNvdXJjZVR5cGU6OldlYlNvY2tldDsKKyAgICAg
ICAgcmV0dXJuIFByb3RvY29sOjpQYWdlOjpSZXNvdXJjZVR5cGU6OldlYlNvY2tldDsKICAgICBj
YXNlIE90aGVyUmVzb3VyY2U6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpQ
YWdlOjpSZXNvdXJjZVR5cGU6Ok90aGVyOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OlBhZ2U6
OlJlc291cmNlVHlwZTo6T3RoZXI7CiAjaWYgRU5BQkxFKEFQUExJQ0FUSU9OX01BTklGRVNUKQog
ICAgIGNhc2UgQXBwbGljYXRpb25NYW5pZmVzdFJlc291cmNlOgogICAgICAgICBicmVhazsKICNl
bmRpZgogICAgIH0KLSAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6UmVzb3Vy
Y2VUeXBlOjpPdGhlcjsKKyAgICByZXR1cm4gUHJvdG9jb2w6OlBhZ2U6OlJlc291cmNlVHlwZTo6
T3RoZXI7CiB9CiAKIEluc3BlY3RvclBhZ2VBZ2VudDo6UmVzb3VyY2VUeXBlIEluc3BlY3RvclBh
Z2VBZ2VudDo6aW5zcGVjdG9yUmVzb3VyY2VUeXBlKENhY2hlZFJlc291cmNlOjpUeXBlIHR5cGUp
CkBAIC0yOTcsNyArMjk3LDcgQEAgSW5zcGVjdG9yUGFnZUFnZW50OjpSZXNvdXJjZVR5cGUgSW5z
cGVjdG9yUGFnZUFnZW50OjppbnNwZWN0b3JSZXNvdXJjZVR5cGUoY29uc3QKICAgICByZXR1cm4g
aW5zcGVjdG9yUmVzb3VyY2VUeXBlKGNhY2hlZFJlc291cmNlLnR5cGUoKSk7CiB9CiAKLUluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OlJlc291cmNlVHlwZSBJbnNwZWN0b3JQYWdlQWdlbnQ6OmNh
Y2hlZFJlc291cmNlVHlwZUpTT04oY29uc3QgQ2FjaGVkUmVzb3VyY2UmIGNhY2hlZFJlc291cmNl
KQorUHJvdG9jb2w6OlBhZ2U6OlJlc291cmNlVHlwZSBJbnNwZWN0b3JQYWdlQWdlbnQ6OmNhY2hl
ZFJlc291cmNlVHlwZUpTT04oY29uc3QgQ2FjaGVkUmVzb3VyY2UmIGNhY2hlZFJlc291cmNlKQog
ewogICAgIHJldHVybiByZXNvdXJjZVR5cGVKU09OKGluc3BlY3RvclJlc291cmNlVHlwZShjYWNo
ZWRSZXNvdXJjZSkpOwogfQpAQCAtMzExLDcgKzMxMSw3IEBAIEZyYW1lKiBJbnNwZWN0b3JQYWdl
QWdlbnQ6OmZpbmRGcmFtZVdpdGhTZWN1cml0eU9yaWdpbihQYWdlJiBwYWdlLCBjb25zdCBTdHJp
bmcmCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLURvY3VtZW50TG9hZGVyKiBJbnNwZWN0b3JQ
YWdlQWdlbnQ6OmFzc2VydERvY3VtZW50TG9hZGVyKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywg
RnJhbWUqIGZyYW1lKQorRG9jdW1lbnRMb2FkZXIqIEluc3BlY3RvclBhZ2VBZ2VudDo6YXNzZXJ0
RG9jdW1lbnRMb2FkZXIoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgRnJhbWUq
IGZyYW1lKQogewogICAgIEZyYW1lTG9hZGVyJiBmcmFtZUxvYWRlciA9IGZyYW1lLT5sb2FkZXIo
KTsKICAgICBEb2N1bWVudExvYWRlciogZG9jdW1lbnRMb2FkZXIgPSBmcmFtZUxvYWRlci5kb2N1
bWVudExvYWRlcigpOwpAQCAtMzM4LDE2ICszMzgsMTMgQEAgdm9pZCBJbnNwZWN0b3JQYWdlQWdl
bnQ6OmRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kUm91dGVy
KiwKIAogdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNr
ZW5kKEluc3BlY3Rvcjo6RGlzY29ubmVjdFJlYXNvbikKIHsKLSAgICBFcnJvclN0cmluZyB1bnVz
ZWQ7Ci0gICAgZGlzYWJsZSh1bnVzZWQpOworICAgIGRpc2FibGUoKTsKIH0KIAotdm9pZCBJbnNw
ZWN0b3JQYWdlQWdlbnQ6OmVuYWJsZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCitQcm90b2Nv
bDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JQYWdlQWdlbnQ6OmVuYWJsZSgpCiB7Ci0g
ICAgaWYgKG1faW5zdHJ1bWVudGluZ0FnZW50cy5lbmFibGVkUGFnZUFnZW50KCkgPT0gdGhpcykg
ewotICAgICAgICBlcnJvclN0cmluZyA9ICJQYWdlIGRvbWFpbiBhbHJlYWR5IGVuYWJsZWQiX3M7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKG1faW5zdHJ1bWVudGluZ0FnZW50cy5l
bmFibGVkUGFnZUFnZW50KCkgPT0gdGhpcykKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVk
KCJQYWdlIGRvbWFpbiBhbHJlYWR5IGVuYWJsZWQiX3MpOwogCiAgICAgbV9pbnN0cnVtZW50aW5n
QWdlbnRzLnNldEVuYWJsZWRQYWdlQWdlbnQodGhpcyk7CiAKQEAgLTM1OCwyMSArMzU1LDIyIEBA
IHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjplbmFibGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5n
KQogI2lmIEVOQUJMRShEQVJLX01PREVfQ1NTKSB8fCBIQVZFKE9TX0RBUktfTU9ERV9TVVBQT1JU
KQogICAgIGRlZmF1bHRBcHBlYXJhbmNlRGlkQ2hhbmdlKG1faW5zcGVjdGVkUGFnZS5kZWZhdWx0
VXNlRGFya0FwcGVhcmFuY2UoKSk7CiAjZW5kaWYKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZv
aWQgSW5zcGVjdG9yUGFnZUFnZW50OjpkaXNhYmxlKEVycm9yU3RyaW5nJikKK1Byb3RvY29sOjpF
cnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvclBhZ2VBZ2VudDo6ZGlzYWJsZSgpCiB7CiAgICAg
bV9pbnN0cnVtZW50aW5nQWdlbnRzLnNldEVuYWJsZWRQYWdlQWdlbnQobnVsbHB0cik7CiAKLSAg
ICBFcnJvclN0cmluZyB1bnVzZWQ7Ci0gICAgc2V0U2hvd1BhaW50UmVjdHModW51c2VkLCBmYWxz
ZSk7CisgICAgc2V0U2hvd1BhaW50UmVjdHMoZmFsc2UpOwogI2lmICFQTEFURk9STShJT1NfRkFN
SUxZKQotICAgIHNldFNob3dSdWxlcnModW51c2VkLCBmYWxzZSk7CisgICAgc2V0U2hvd1J1bGVy
cyhmYWxzZSk7CiAjZW5kaWYKLSAgICBvdmVycmlkZVVzZXJBZ2VudCh1bnVzZWQsIG51bGxwdHIp
OwotICAgIHNldEVtdWxhdGVkTWVkaWEodW51c2VkLCBlbXB0eVN0cmluZygpKTsKKyAgICBvdmVy
cmlkZVVzZXJBZ2VudChudWxsU3RyaW5nKCkpOworICAgIHNldEVtdWxhdGVkTWVkaWEoZW1wdHlT
dHJpbmcoKSk7CiAjaWYgRU5BQkxFKERBUktfTU9ERV9DU1MpIHx8IEhBVkUoT1NfREFSS19NT0RF
X1NVUFBPUlQpCi0gICAgc2V0Rm9yY2VkQXBwZWFyYW5jZSh1bnVzZWQsIGVtcHR5U3RyaW5nKCkp
OworICAgIHNldEZvcmNlZEFwcGVhcmFuY2UoV1RGOjpudWxsb3B0KTsKICNlbmRpZgogCiAgICAg
YXV0byYgaW5zcGVjdGVkUGFnZVNldHRpbmdzID0gbV9pbnNwZWN0ZWRQYWdlLnNldHRpbmdzKCk7
CkBAIC0zOTEsNiArMzg5LDggQEAgdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmRpc2FibGUoRXJy
b3JTdHJpbmcmKQogICAgIG1fY2xpZW50LT5zZXREZXZlbG9wZXJQcmVmZXJlbmNlT3ZlcnJpZGUo
SW5zcGVjdG9yQ2xpZW50OjpEZXZlbG9wZXJQcmVmZXJlbmNlOjpBZENsaWNrQXR0cmlidXRpb25E
ZWJ1Z01vZGVFbmFibGVkLCBXVEY6Om51bGxvcHQpOwogICAgIG1fY2xpZW50LT5zZXREZXZlbG9w
ZXJQcmVmZXJlbmNlT3ZlcnJpZGUoSW5zcGVjdG9yQ2xpZW50OjpEZXZlbG9wZXJQcmVmZXJlbmNl
OjpJVFBEZWJ1Z01vZGVFbmFibGVkLCBXVEY6Om51bGxvcHQpOwogICAgIG1fY2xpZW50LT5zZXRE
ZXZlbG9wZXJQcmVmZXJlbmNlT3ZlcnJpZGUoSW5zcGVjdG9yQ2xpZW50OjpEZXZlbG9wZXJQcmVm
ZXJlbmNlOjpNb2NrQ2FwdHVyZURldmljZXNFbmFibGVkLCBXVEY6Om51bGxvcHQpOworCisgICAg
cmV0dXJuIHsgfTsKIH0KIAogZG91YmxlIEluc3BlY3RvclBhZ2VBZ2VudDo6dGltZXN0YW1wKCkK
QEAgLTM5OCwyMSArMzk4LDE5IEBAIGRvdWJsZSBJbnNwZWN0b3JQYWdlQWdlbnQ6OnRpbWVzdGFt
cCgpCiAgICAgcmV0dXJuIG1fZW52aXJvbm1lbnQuZXhlY3V0aW9uU3RvcHdhdGNoKCkuZWxhcHNl
ZFRpbWUoKS5zZWNvbmRzKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpyZWxvYWQo
RXJyb3JTdHJpbmcmLCBjb25zdCBib29sKiBvcHRpb25hbFJlbG9hZEZyb21PcmlnaW4sIGNvbnN0
IGJvb2wqIG9wdGlvbmFsUmV2YWxpZGF0ZUFsbFJlc291cmNlcykKK1Byb3RvY29sOjpFcnJvclN0
cmluZ09yPHZvaWQ+IEluc3BlY3RvclBhZ2VBZ2VudDo6cmVsb2FkKE9wdGlvbmFsPGJvb2w+JiYg
aWdub3JlQ2FjaGUsIE9wdGlvbmFsPGJvb2w+JiYgcmV2YWxpZGF0ZUFsbFJlc291cmNlcykKIHsK
LSAgICBib29sIHJlbG9hZEZyb21PcmlnaW4gPSBvcHRpb25hbFJlbG9hZEZyb21PcmlnaW4gJiYg
Km9wdGlvbmFsUmVsb2FkRnJvbU9yaWdpbjsKLSAgICBib29sIHJldmFsaWRhdGVBbGxSZXNvdXJj
ZXMgPSBvcHRpb25hbFJldmFsaWRhdGVBbGxSZXNvdXJjZXMgJiYgKm9wdGlvbmFsUmV2YWxpZGF0
ZUFsbFJlc291cmNlczsKLQogICAgIE9wdGlvblNldDxSZWxvYWRPcHRpb24+IHJlbG9hZE9wdGlv
bnM7Ci0gICAgaWYgKHJlbG9hZEZyb21PcmlnaW4pCisgICAgaWYgKGlnbm9yZUNhY2hlICYmICpp
Z25vcmVDYWNoZSkKICAgICAgICAgcmVsb2FkT3B0aW9ucy5hZGQoUmVsb2FkT3B0aW9uOjpGcm9t
T3JpZ2luKTsKLSAgICBpZiAoIXJldmFsaWRhdGVBbGxSZXNvdXJjZXMpCisgICAgaWYgKCFyZXZh
bGlkYXRlQWxsUmVzb3VyY2VzIHx8ICEqcmV2YWxpZGF0ZUFsbFJlc291cmNlcykKICAgICAgICAg
cmVsb2FkT3B0aW9ucy5hZGQoUmVsb2FkT3B0aW9uOjpFeHBpcmVkT25seSk7Ci0KICAgICBtX2lu
c3BlY3RlZFBhZ2UubWFpbkZyYW1lKCkubG9hZGVyKCkucmVsb2FkKHJlbG9hZE9wdGlvbnMpOwor
CisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6Om5hdmlnYXRl
KEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiB1cmwpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdP
cjx2b2lkPiBJbnNwZWN0b3JQYWdlQWdlbnQ6Om5hdmlnYXRlKGNvbnN0IFN0cmluZyYgdXJsKQog
ewogICAgIFVzZXJHZXN0dXJlSW5kaWNhdG9yIGluZGljYXRvciB7IFByb2Nlc3NpbmdVc2VyR2Vz
dHVyZSB9OwogICAgIEZyYW1lJiBmcmFtZSA9IG1faW5zcGVjdGVkUGFnZS5tYWluRnJhbWUoKTsK
QEAgLTQyMSwxMTEgKzQxOSw5NyBAQCB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6bmF2aWdhdGUo
RXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHVybCkKICAgICBGcmFtZUxvYWRSZXF1ZXN0IGZy
YW1lTG9hZFJlcXVlc3QgeyAqZnJhbWUuZG9jdW1lbnQoKSwgZnJhbWUuZG9jdW1lbnQoKS0+c2Vj
dXJpdHlPcmlnaW4oKSwgV1RGTW92ZShyZXNvdXJjZVJlcXVlc3QpLCAiX3NlbGYiX3MsIEluaXRp
YXRlZEJ5TWFpbkZyYW1lOjpVbmtub3duIH07CiAgICAgZnJhbWVMb2FkUmVxdWVzdC5kaXNhYmxl
TmF2aWdhdGlvblRvSW52YWxpZFVSTCgpOwogICAgIGZyYW1lLmxvYWRlcigpLmNoYW5nZUxvY2F0
aW9uKFdURk1vdmUoZnJhbWVMb2FkUmVxdWVzdCkpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAot
dm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6Om92ZXJyaWRlVXNlckFnZW50KEVycm9yU3RyaW5nJiwg
Y29uc3QgU3RyaW5nKiB2YWx1ZSkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3Bl
Y3RvclBhZ2VBZ2VudDo6b3ZlcnJpZGVVc2VyQWdlbnQoY29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsK
LSAgICBtX3VzZXJBZ2VudE92ZXJyaWRlID0gdmFsdWUgPyAqdmFsdWUgOiBTdHJpbmcoKTsKKyAg
ICBtX3VzZXJBZ2VudE92ZXJyaWRlID0gdmFsdWU7CisKKyAgICByZXR1cm4geyB9OwogfQogCi1z
dGF0aWMgaW5saW5lIE9wdGlvbmFsPGJvb2w+IGFzT3B0aW9uYWxCb29sKGNvbnN0IGJvb2wqIHZh
bHVlKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yUGFnZUFnZW50Ojpv
dmVycmlkZVNldHRpbmcoUHJvdG9jb2w6OlBhZ2U6OlNldHRpbmcgc2V0dGluZywgT3B0aW9uYWw8
Ym9vbD4mJiB2YWx1ZSkKIHsKLSAgICBpZiAoIXZhbHVlKQotICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwotICAgIHJldHVybiAqdmFsdWU7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yUGFnZUFnZW50
OjpvdmVycmlkZVNldHRpbmcoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcm
IHNldHRpbmdTdHJpbmcsIGNvbnN0IGJvb2wqIHZhbHVlKQotewotICAgIGlmIChzZXR0aW5nU3Ry
aW5nLmlzRW1wdHkoKSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJzZXR0aW5nU3RyaW5nIGlz
IGVtcHR5Il9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgYXV0byBzZXR0aW5nID0g
SW5zcGVjdG9yOjpQcm90b2NvbDo6SW5zcGVjdG9ySGVscGVyczo6cGFyc2VFbnVtVmFsdWVGcm9t
U3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OlNldHRpbmc+KHNldHRpbmdTdHJpbmcp
OwotICAgIGlmICghc2V0dGluZykgewotICAgICAgICBlcnJvclN0cmluZyA9IG1ha2VTdHJpbmco
IlVua25vd24gc2V0dGluZ1N0cmluZzogIl9zLCBzZXR0aW5nU3RyaW5nKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQogICAgIGF1dG8mIGluc3BlY3RlZFBhZ2VTZXR0aW5ncyA9IG1faW5zcGVj
dGVkUGFnZS5zZXR0aW5ncygpOwogCi0gICAgYXV0byBvdmVycmlkZVZhbHVlID0gYXNPcHRpb25h
bEJvb2wodmFsdWUpOwotICAgIHN3aXRjaCAoc2V0dGluZy52YWx1ZSgpKSB7Ci0gICAgY2FzZSBJ
bnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpTZXR0aW5nOjpBZENsaWNrQXR0cmlidXRpb25EZWJ1
Z01vZGVFbmFibGVkOgotICAgICAgICBtX2NsaWVudC0+c2V0RGV2ZWxvcGVyUHJlZmVyZW5jZU92
ZXJyaWRlKEluc3BlY3RvckNsaWVudDo6RGV2ZWxvcGVyUHJlZmVyZW5jZTo6QWRDbGlja0F0dHJp
YnV0aW9uRGVidWdNb2RlRW5hYmxlZCwgb3ZlcnJpZGVWYWx1ZSk7Ci0gICAgICAgIHJldHVybjsK
KyAgICBzd2l0Y2ggKHNldHRpbmcpIHsKKyAgICBjYXNlIFByb3RvY29sOjpQYWdlOjpTZXR0aW5n
OjpBZENsaWNrQXR0cmlidXRpb25EZWJ1Z01vZGVFbmFibGVkOgorICAgICAgICBtX2NsaWVudC0+
c2V0RGV2ZWxvcGVyUHJlZmVyZW5jZU92ZXJyaWRlKEluc3BlY3RvckNsaWVudDo6RGV2ZWxvcGVy
UHJlZmVyZW5jZTo6QWRDbGlja0F0dHJpYnV0aW9uRGVidWdNb2RlRW5hYmxlZCwgdmFsdWUpOwor
ICAgICAgICByZXR1cm4geyB9OwogCi0gICAgY2FzZSBJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdl
OjpTZXR0aW5nOjpBdXRob3JBbmRVc2VyU3R5bGVzRW5hYmxlZDoKLSAgICAgICAgaW5zcGVjdGVk
UGFnZVNldHRpbmdzLnNldEF1dGhvckFuZFVzZXJTdHlsZXNFbmFibGVkSW5zcGVjdG9yT3ZlcnJp
ZGUob3ZlcnJpZGVWYWx1ZSk7Ci0gICAgICAgIHJldHVybjsKKyAgICBjYXNlIFByb3RvY29sOjpQ
YWdlOjpTZXR0aW5nOjpBdXRob3JBbmRVc2VyU3R5bGVzRW5hYmxlZDoKKyAgICAgICAgaW5zcGVj
dGVkUGFnZVNldHRpbmdzLnNldEF1dGhvckFuZFVzZXJTdHlsZXNFbmFibGVkSW5zcGVjdG9yT3Zl
cnJpZGUodmFsdWUpOworICAgICAgICByZXR1cm4geyB9OwogCi0gICAgY2FzZSBJbnNwZWN0b3I6
OlByb3RvY29sOjpQYWdlOjpTZXR0aW5nOjpJQ0VDYW5kaWRhdGVGaWx0ZXJpbmdFbmFibGVkOgot
ICAgICAgICBpbnNwZWN0ZWRQYWdlU2V0dGluZ3Muc2V0SUNFQ2FuZGlkYXRlRmlsdGVyaW5nRW5h
YmxlZEluc3BlY3Rvck92ZXJyaWRlKG92ZXJyaWRlVmFsdWUpOwotICAgICAgICByZXR1cm47Cisg
ICAgY2FzZSBQcm90b2NvbDo6UGFnZTo6U2V0dGluZzo6SUNFQ2FuZGlkYXRlRmlsdGVyaW5nRW5h
YmxlZDoKKyAgICAgICAgaW5zcGVjdGVkUGFnZVNldHRpbmdzLnNldElDRUNhbmRpZGF0ZUZpbHRl
cmluZ0VuYWJsZWRJbnNwZWN0b3JPdmVycmlkZSh2YWx1ZSk7CisgICAgICAgIHJldHVybiB7IH07
CiAKLSAgICBjYXNlIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OlNldHRpbmc6OklUUERlYnVn
TW9kZUVuYWJsZWQ6Ci0gICAgICAgIG1fY2xpZW50LT5zZXREZXZlbG9wZXJQcmVmZXJlbmNlT3Zl
cnJpZGUoSW5zcGVjdG9yQ2xpZW50OjpEZXZlbG9wZXJQcmVmZXJlbmNlOjpJVFBEZWJ1Z01vZGVF
bmFibGVkLCBvdmVycmlkZVZhbHVlKTsKLSAgICAgICAgcmV0dXJuOworICAgIGNhc2UgUHJvdG9j
b2w6OlBhZ2U6OlNldHRpbmc6OklUUERlYnVnTW9kZUVuYWJsZWQ6CisgICAgICAgIG1fY2xpZW50
LT5zZXREZXZlbG9wZXJQcmVmZXJlbmNlT3ZlcnJpZGUoSW5zcGVjdG9yQ2xpZW50OjpEZXZlbG9w
ZXJQcmVmZXJlbmNlOjpJVFBEZWJ1Z01vZGVFbmFibGVkLCB2YWx1ZSk7CisgICAgICAgIHJldHVy
biB7IH07CiAKLSAgICBjYXNlIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OlNldHRpbmc6Oklt
YWdlc0VuYWJsZWQ6Ci0gICAgICAgIGluc3BlY3RlZFBhZ2VTZXR0aW5ncy5zZXRJbWFnZXNFbmFi
bGVkSW5zcGVjdG9yT3ZlcnJpZGUob3ZlcnJpZGVWYWx1ZSk7Ci0gICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIFByb3RvY29sOjpQYWdlOjpTZXR0aW5nOjpJbWFnZXNFbmFibGVkOgorICAgICAgICBp
bnNwZWN0ZWRQYWdlU2V0dGluZ3Muc2V0SW1hZ2VzRW5hYmxlZEluc3BlY3Rvck92ZXJyaWRlKHZh
bHVlKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6UGFnZTo6U2V0dGluZzo6TWVkaWFDYXB0dXJlUmVxdWlyZXNTZWN1cmVDb25uZWN0aW9uOgot
ICAgICAgICBpbnNwZWN0ZWRQYWdlU2V0dGluZ3Muc2V0TWVkaWFDYXB0dXJlUmVxdWlyZXNTZWN1
cmVDb25uZWN0aW9uSW5zcGVjdG9yT3ZlcnJpZGUob3ZlcnJpZGVWYWx1ZSk7Ci0gICAgICAgIHJl
dHVybjsKKyAgICBjYXNlIFByb3RvY29sOjpQYWdlOjpTZXR0aW5nOjpNZWRpYUNhcHR1cmVSZXF1
aXJlc1NlY3VyZUNvbm5lY3Rpb246CisgICAgICAgIGluc3BlY3RlZFBhZ2VTZXR0aW5ncy5zZXRN
ZWRpYUNhcHR1cmVSZXF1aXJlc1NlY3VyZUNvbm5lY3Rpb25JbnNwZWN0b3JPdmVycmlkZSh2YWx1
ZSk7CisgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBjYXNlIEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlBhZ2U6OlNldHRpbmc6Ok1vY2tDYXB0dXJlRGV2aWNlc0VuYWJsZWQ6Ci0gICAgICAgIGluc3Bl
Y3RlZFBhZ2VTZXR0aW5ncy5zZXRNb2NrQ2FwdHVyZURldmljZXNFbmFibGVkSW5zcGVjdG9yT3Zl
cnJpZGUob3ZlcnJpZGVWYWx1ZSk7Ci0gICAgICAgIG1fY2xpZW50LT5zZXREZXZlbG9wZXJQcmVm
ZXJlbmNlT3ZlcnJpZGUoSW5zcGVjdG9yQ2xpZW50OjpEZXZlbG9wZXJQcmVmZXJlbmNlOjpNb2Nr
Q2FwdHVyZURldmljZXNFbmFibGVkLCBvdmVycmlkZVZhbHVlKTsKLSAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgUHJvdG9jb2w6OlBhZ2U6OlNldHRpbmc6Ok1vY2tDYXB0dXJlRGV2aWNlc0VuYWJs
ZWQ6CisgICAgICAgIGluc3BlY3RlZFBhZ2VTZXR0aW5ncy5zZXRNb2NrQ2FwdHVyZURldmljZXNF
bmFibGVkSW5zcGVjdG9yT3ZlcnJpZGUodmFsdWUpOworICAgICAgICBtX2NsaWVudC0+c2V0RGV2
ZWxvcGVyUHJlZmVyZW5jZU92ZXJyaWRlKEluc3BlY3RvckNsaWVudDo6RGV2ZWxvcGVyUHJlZmVy
ZW5jZTo6TW9ja0NhcHR1cmVEZXZpY2VzRW5hYmxlZCwgdmFsdWUpOworICAgICAgICByZXR1cm4g
eyB9OwogCi0gICAgY2FzZSBJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpTZXR0aW5nOjpOZWVk
c1NpdGVTcGVjaWZpY1F1aXJrczoKLSAgICAgICAgaW5zcGVjdGVkUGFnZVNldHRpbmdzLnNldE5l
ZWRzU2l0ZVNwZWNpZmljUXVpcmtzSW5zcGVjdG9yT3ZlcnJpZGUob3ZlcnJpZGVWYWx1ZSk7Ci0g
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIFByb3RvY29sOjpQYWdlOjpTZXR0aW5nOjpOZWVkc1Np
dGVTcGVjaWZpY1F1aXJrczoKKyAgICAgICAgaW5zcGVjdGVkUGFnZVNldHRpbmdzLnNldE5lZWRz
U2l0ZVNwZWNpZmljUXVpcmtzSW5zcGVjdG9yT3ZlcnJpZGUodmFsdWUpOworICAgICAgICByZXR1
cm4geyB9OwogCi0gICAgY2FzZSBJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpTZXR0aW5nOjpT
Y3JpcHRFbmFibGVkOgotICAgICAgICBpbnNwZWN0ZWRQYWdlU2V0dGluZ3Muc2V0U2NyaXB0RW5h
YmxlZEluc3BlY3Rvck92ZXJyaWRlKG92ZXJyaWRlVmFsdWUpOwotICAgICAgICByZXR1cm47Cisg
ICAgY2FzZSBQcm90b2NvbDo6UGFnZTo6U2V0dGluZzo6U2NyaXB0RW5hYmxlZDoKKyAgICAgICAg
aW5zcGVjdGVkUGFnZVNldHRpbmdzLnNldFNjcmlwdEVuYWJsZWRJbnNwZWN0b3JPdmVycmlkZSh2
YWx1ZSk7CisgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBjYXNlIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlBhZ2U6OlNldHRpbmc6OlNob3dEZWJ1Z0JvcmRlcnM6Ci0gICAgICAgIGluc3BlY3RlZFBh
Z2VTZXR0aW5ncy5zZXRTaG93RGVidWdCb3JkZXJzSW5zcGVjdG9yT3ZlcnJpZGUob3ZlcnJpZGVW
YWx1ZSk7Ci0gICAgICAgIHJldHVybjsKKyAgICBjYXNlIFByb3RvY29sOjpQYWdlOjpTZXR0aW5n
OjpTaG93RGVidWdCb3JkZXJzOgorICAgICAgICBpbnNwZWN0ZWRQYWdlU2V0dGluZ3Muc2V0U2hv
d0RlYnVnQm9yZGVyc0luc3BlY3Rvck92ZXJyaWRlKHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHsg
fTsKIAotICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6U2V0dGluZzo6U2hvd1Jl
cGFpbnRDb3VudGVyOgotICAgICAgICBpbnNwZWN0ZWRQYWdlU2V0dGluZ3Muc2V0U2hvd1JlcGFp
bnRDb3VudGVySW5zcGVjdG9yT3ZlcnJpZGUob3ZlcnJpZGVWYWx1ZSk7Ci0gICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIFByb3RvY29sOjpQYWdlOjpTZXR0aW5nOjpTaG93UmVwYWludENvdW50ZXI6
CisgICAgICAgIGluc3BlY3RlZFBhZ2VTZXR0aW5ncy5zZXRTaG93UmVwYWludENvdW50ZXJJbnNw
ZWN0b3JPdmVycmlkZSh2YWx1ZSk7CisgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBjYXNlIElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OlNldHRpbmc6OldlYlJUQ0VuY3J5cHRpb25FbmFibGVk
OgotICAgICAgICBpbnNwZWN0ZWRQYWdlU2V0dGluZ3Muc2V0V2ViUlRDRW5jcnlwdGlvbkVuYWJs
ZWRJbnNwZWN0b3JPdmVycmlkZShvdmVycmlkZVZhbHVlKTsKLSAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgUHJvdG9jb2w6OlBhZ2U6OlNldHRpbmc6OldlYlJUQ0VuY3J5cHRpb25FbmFibGVkOgor
ICAgICAgICBpbnNwZWN0ZWRQYWdlU2V0dGluZ3Muc2V0V2ViUlRDRW5jcnlwdGlvbkVuYWJsZWRJ
bnNwZWN0b3JPdmVycmlkZSh2YWx1ZSk7CisgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBjYXNl
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OlNldHRpbmc6OldlYlNlY3VyaXR5RW5hYmxlZDoK
LSAgICAgICAgaW5zcGVjdGVkUGFnZVNldHRpbmdzLnNldFdlYlNlY3VyaXR5RW5hYmxlZEluc3Bl
Y3Rvck92ZXJyaWRlKG92ZXJyaWRlVmFsdWUpOwotICAgICAgICByZXR1cm47CisgICAgY2FzZSBQ
cm90b2NvbDo6UGFnZTo6U2V0dGluZzo6V2ViU2VjdXJpdHlFbmFibGVkOgorICAgICAgICBpbnNw
ZWN0ZWRQYWdlU2V0dGluZ3Muc2V0V2ViU2VjdXJpdHlFbmFibGVkSW5zcGVjdG9yT3ZlcnJpZGUo
dmFsdWUpOworICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAogICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgIHJldHVybiB7IH07CiB9CiAKLXN0YXRpYyBJbnNwZWN0b3I6OlByb3RvY29s
OjpQYWdlOjpDb29raWVTYW1lU2l0ZVBvbGljeSBjb29raWVTYW1lU2l0ZVBvbGljeUpTT04oQ29v
a2llOjpTYW1lU2l0ZVBvbGljeSBwb2xpY3kpCitzdGF0aWMgUHJvdG9jb2w6OlBhZ2U6OkNvb2tp
ZVNhbWVTaXRlUG9saWN5IGNvb2tpZVNhbWVTaXRlUG9saWN5SlNPTihDb29raWU6OlNhbWVTaXRl
UG9saWN5IHBvbGljeSkKIHsKICAgICBzd2l0Y2ggKHBvbGljeSkgewogICAgIGNhc2UgQ29va2ll
OjpTYW1lU2l0ZVBvbGljeTo6Tm9uZToKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlBhZ2U6OkNvb2tpZVNhbWVTaXRlUG9saWN5OjpOb25lOworICAgICAgICByZXR1cm4gUHJv
dG9jb2w6OlBhZ2U6OkNvb2tpZVNhbWVTaXRlUG9saWN5OjpOb25lOwogICAgIGNhc2UgQ29va2ll
OjpTYW1lU2l0ZVBvbGljeTo6TGF4OgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2Nv
bDo6UGFnZTo6Q29va2llU2FtZVNpdGVQb2xpY3k6OkxheDsKKyAgICAgICAgcmV0dXJuIFByb3Rv
Y29sOjpQYWdlOjpDb29raWVTYW1lU2l0ZVBvbGljeTo6TGF4OwogICAgIGNhc2UgQ29va2llOjpT
YW1lU2l0ZVBvbGljeTo6U3RyaWN0OgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2Nv
bDo6UGFnZTo6Q29va2llU2FtZVNpdGVQb2xpY3k6OlN0cmljdDsKKyAgICAgICAgcmV0dXJuIFBy
b3RvY29sOjpQYWdlOjpDb29raWVTYW1lU2l0ZVBvbGljeTo6U3RyaWN0OwogICAgIH0KICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6UGFn
ZTo6Q29va2llU2FtZVNpdGVQb2xpY3k6Ok5vbmU7CisgICAgcmV0dXJuIFByb3RvY29sOjpQYWdl
OjpDb29raWVTYW1lU2l0ZVBvbGljeTo6Tm9uZTsKIH0KIAotc3RhdGljIFJlZjxJbnNwZWN0b3I6
OlByb3RvY29sOjpQYWdlOjpDb29raWU+IGJ1aWxkT2JqZWN0Rm9yQ29va2llKGNvbnN0IENvb2tp
ZSYgY29va2llKQorc3RhdGljIFJlZjxQcm90b2NvbDo6UGFnZTo6Q29va2llPiBidWlsZE9iamVj
dEZvckNvb2tpZShjb25zdCBDb29raWUmIGNvb2tpZSkKIHsKLSAgICByZXR1cm4gSW5zcGVjdG9y
OjpQcm90b2NvbDo6UGFnZTo6Q29va2llOjpjcmVhdGUoKQorICAgIHJldHVybiBQcm90b2NvbDo6
UGFnZTo6Q29va2llOjpjcmVhdGUoKQogICAgICAgICAuc2V0TmFtZShjb29raWUubmFtZSkKICAg
ICAgICAgLnNldFZhbHVlKGNvb2tpZS52YWx1ZSkKICAgICAgICAgLnNldERvbWFpbihjb29raWUu
ZG9tYWluKQpAQCAtNTM4LDkgKzUyMiw5IEBAIHN0YXRpYyBSZWY8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6UGFnZTo6Q29va2llPiBidWlsZE9iamVjdEZvckNvb2tpZShjb25zdCBDb29raWUmCiAgICAg
ICAgIC5yZWxlYXNlKCk7CiB9CiAKLXN0YXRpYyBSZWY8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6
OlByb3RvY29sOjpQYWdlOjpDb29raWU+PiBidWlsZEFycmF5Rm9yQ29va2llcyhMaXN0SGFzaFNl
dDxDb29raWU+JiBjb29raWVzTGlzdCkKK3N0YXRpYyBSZWY8SlNPTjo6QXJyYXlPZjxQcm90b2Nv
bDo6UGFnZTo6Q29va2llPj4gYnVpbGRBcnJheUZvckNvb2tpZXMoTGlzdEhhc2hTZXQ8Q29va2ll
PiYgY29va2llc0xpc3QpCiB7Ci0gICAgYXV0byBjb29raWVzID0gSlNPTjo6QXJyYXlPZjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpQYWdlOjpDb29raWU+OjpjcmVhdGUoKTsKKyAgICBhdXRvIGNvb2tp
ZXMgPSBKU09OOjpBcnJheU9mPFByb3RvY29sOjpQYWdlOjpDb29raWU+OjpjcmVhdGUoKTsKIAog
ICAgIGZvciAoY29uc3QgYXV0byYgY29va2llIDogY29va2llc0xpc3QpCiAgICAgICAgIGNvb2tp
ZXMtPmFkZEl0ZW0oYnVpbGRPYmplY3RGb3JDb29raWUoY29va2llKSk7CkBAIC01NjAsNyArNTQ0
LDcgQEAgc3RhdGljIFZlY3RvcjxVUkw+IGFsbFJlc291cmNlc1VSTHNGb3JGcmFtZShGcmFtZSog
ZnJhbWUpCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6
OmdldENvb2tpZXMoRXJyb3JTdHJpbmcmLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6
OlByb3RvY29sOjpQYWdlOjpDb29raWU+PiYgY29va2llcykKK1Byb3RvY29sOjpFcnJvclN0cmlu
Z09yPFJlZjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpQYWdlOjpDb29raWU+Pj4gSW5zcGVjdG9y
UGFnZUFnZW50OjpnZXRDb29raWVzKCkKIHsKICAgICBMaXN0SGFzaFNldDxDb29raWU+IGFsbFJh
d0Nvb2tpZXM7CiAKQEAgLTU3OSw3MiArNTYzLDg0IEBAIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50
OjpnZXRDb29raWVzKEVycm9yU3RyaW5nJiwgUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9y
CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBjb29raWVzID0gYnVpbGRBcnJheUZvckNvb2tpZXMo
YWxsUmF3Q29va2llcyk7CisgICAgcmV0dXJuIGJ1aWxkQXJyYXlGb3JDb29raWVzKGFsbFJhd0Nv
b2tpZXMpOwogfQogCi1zdGF0aWMgT3B0aW9uYWw8Q29va2llPiBwYXJzZUNvb2tpZU9iamVjdChF
cnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IEpTT046Ok9iamVjdCYgY29va2llT2JqZWN0
KQorc3RhdGljIE9wdGlvbmFsPENvb2tpZT4gcGFyc2VDb29raWVPYmplY3QoUHJvdG9jb2w6OkVy
cm9yU3RyaW5nJiBlcnJvclN0cmluZywgUmVmPEpTT046Ok9iamVjdD4mJiBjb29raWVPYmplY3Qp
CiB7CiAgICAgQ29va2llIGNvb2tpZTsKIAotICAgIGlmICghY29va2llT2JqZWN0LmdldFN0cmlu
ZygibmFtZSJfcywgY29va2llLm5hbWUpKSB7CisgICAgY29va2llLm5hbWUgPSBjb29raWVPYmpl
Y3QtPmdldFN0cmluZyhQcm90b2NvbDo6UGFnZTo6Q29va2llOjpuYW1lS2V5KTsKKyAgICBpZiAo
IWNvb2tpZS5uYW1lKSB7CiAgICAgICAgIGVycm9yU3RyaW5nID0gIkludmFsaWQgdmFsdWUgZm9y
IGtleSBuYW1lIGluIGdpdmVuIGNvb2tpZSI7CiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CiAgICAgfQogCi0gICAgaWYgKCFjb29raWVPYmplY3QuZ2V0U3RyaW5nKCJ2YWx1ZSJfcywgY29v
a2llLnZhbHVlKSkgeworICAgIGNvb2tpZS52YWx1ZSA9IGNvb2tpZU9iamVjdC0+Z2V0U3RyaW5n
KFByb3RvY29sOjpQYWdlOjpDb29raWU6OnZhbHVlS2V5KTsKKyAgICBpZiAoIWNvb2tpZS52YWx1
ZSkgewogICAgICAgICBlcnJvclN0cmluZyA9ICJJbnZhbGlkIHZhbHVlIGZvciBrZXkgdmFsdWUg
aW4gZ2l2ZW4gY29va2llIjsKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICB9CiAK
LSAgICBpZiAoIWNvb2tpZU9iamVjdC5nZXRTdHJpbmcoImRvbWFpbiJfcywgY29va2llLmRvbWFp
bikpIHsKKyAgICBjb29raWUuZG9tYWluID0gY29va2llT2JqZWN0LT5nZXRTdHJpbmcoUHJvdG9j
b2w6OlBhZ2U6OkNvb2tpZTo6ZG9tYWluS2V5KTsKKyAgICBpZiAoIWNvb2tpZS5kb21haW4pIHsK
ICAgICAgICAgZXJyb3JTdHJpbmcgPSAiSW52YWxpZCB2YWx1ZSBmb3Iga2V5IGRvbWFpbiBpbiBn
aXZlbiBjb29raWUiOwogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIH0KIAotICAg
IGlmICghY29va2llT2JqZWN0LmdldFN0cmluZygicGF0aCJfcywgY29va2llLnBhdGgpKSB7Cisg
ICAgY29va2llLnBhdGggPSBjb29raWVPYmplY3QtPmdldFN0cmluZyhQcm90b2NvbDo6UGFnZTo6
Q29va2llOjpwYXRoS2V5KTsKKyAgICBpZiAoIWNvb2tpZS5wYXRoKSB7CiAgICAgICAgIGVycm9y
U3RyaW5nID0gIkludmFsaWQgdmFsdWUgZm9yIGtleSBwYXRoIGluIGdpdmVuIGNvb2tpZSI7CiAg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgfQogCi0gICAgaWYgKCFjb29raWVPYmpl
Y3QuZ2V0Qm9vbGVhbigiaHR0cE9ubHkiX3MsIGNvb2tpZS5odHRwT25seSkpIHsKKyAgICBhdXRv
IGh0dHBPbmx5ID0gY29va2llT2JqZWN0LT5nZXRCb29sZWFuKFByb3RvY29sOjpQYWdlOjpDb29r
aWU6Omh0dHBPbmx5S2V5KTsKKyAgICBpZiAoIWh0dHBPbmx5KSB7CiAgICAgICAgIGVycm9yU3Ry
aW5nID0gIkludmFsaWQgdmFsdWUgZm9yIGtleSBodHRwT25seSBpbiBnaXZlbiBjb29raWUiOwog
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIH0KIAotICAgIGlmICghY29va2llT2Jq
ZWN0LmdldEJvb2xlYW4oInNlY3VyZSJfcywgY29va2llLnNlY3VyZSkpIHsKKyAgICBjb29raWUu
aHR0cE9ubHkgPSAqaHR0cE9ubHk7CisKKyAgICBhdXRvIHNlY3VyZSA9IGNvb2tpZU9iamVjdC0+
Z2V0Qm9vbGVhbihQcm90b2NvbDo6UGFnZTo6Q29va2llOjpzZWN1cmVLZXkpOworICAgIGlmICgh
c2VjdXJlKSB7CiAgICAgICAgIGVycm9yU3RyaW5nID0gIkludmFsaWQgdmFsdWUgZm9yIGtleSBz
ZWN1cmUgaW4gZ2l2ZW4gY29va2llIjsKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAg
ICB9CiAKLSAgICBib29sIHZhbGlkU2Vzc2lvbiA9IGNvb2tpZU9iamVjdC5nZXRCb29sZWFuKCJz
ZXNzaW9uIl9zLCBjb29raWUuc2Vzc2lvbik7Ci0gICAgY29va2llLmV4cGlyZXMgPSBjb29raWVP
YmplY3QuZ2V0TnVtYmVyPGRvdWJsZT4oImV4cGlyZXMiX3MpOwotICAgIGlmICghdmFsaWRTZXNz
aW9uICYmICFjb29raWUuZXhwaXJlcykgeworICAgIGNvb2tpZS5zZWN1cmUgPSAqc2VjdXJlOwor
CisgICAgYXV0byBzZXNzaW9uID0gY29va2llT2JqZWN0LT5nZXRCb29sZWFuKFByb3RvY29sOjpQ
YWdlOjpDb29raWU6OnNlc3Npb25LZXkpOworICAgIGNvb2tpZS5leHBpcmVzID0gY29va2llT2Jq
ZWN0LT5nZXREb3VibGUoUHJvdG9jb2w6OlBhZ2U6OkNvb2tpZTo6ZXhwaXJlc0tleSk7CisgICAg
aWYgKCFzZXNzaW9uICYmICFjb29raWUuZXhwaXJlcykgewogICAgICAgICBlcnJvclN0cmluZyA9
ICJJbnZhbGlkIHZhbHVlIGZvciBrZXkgZXhwaXJlcyBpbiBnaXZlbiBjb29raWUiOwogICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIH0KIAotICAgIFN0cmluZyBzYW1lU2l0ZVN0cmlu
ZzsKLSAgICBpZiAoIWNvb2tpZU9iamVjdC5nZXRTdHJpbmcoInNhbWVTaXRlIl9zLCBzYW1lU2l0
ZVN0cmluZykpIHsKKyAgICBjb29raWUuc2Vzc2lvbiA9ICpzZXNzaW9uOworCisgICAgYXV0byBz
YW1lU2l0ZVN0cmluZyA9IGNvb2tpZU9iamVjdC0+Z2V0U3RyaW5nKFByb3RvY29sOjpQYWdlOjpD
b29raWU6OnNhbWVTaXRlS2V5KTsKKyAgICBpZiAoIXNhbWVTaXRlU3RyaW5nKSB7CiAgICAgICAg
IGVycm9yU3RyaW5nID0gIkludmFsaWQgdmFsdWUgZm9yIGtleSBzYW1lU2l0ZSBpbiBnaXZlbiBj
b29raWUiOwogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIH0KIAotICAgIGF1dG8g
c2FtZVNpdGUgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpJbnNwZWN0b3JIZWxwZXJzOjpwYXJzZUVu
dW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6Q29va2llU2FtZVNp
dGVQb2xpY3k+KHNhbWVTaXRlU3RyaW5nKTsKKyAgICBhdXRvIHNhbWVTaXRlID0gUHJvdG9jb2w6
OkhlbHBlcnM6OnBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxQcm90b2NvbDo6UGFnZTo6Q29va2ll
U2FtZVNpdGVQb2xpY3k+KHNhbWVTaXRlU3RyaW5nKTsKICAgICBpZiAoIXNhbWVTaXRlKSB7CiAg
ICAgICAgIGVycm9yU3RyaW5nID0gIkludmFsaWQgdmFsdWUgZm9yIGtleSBzYW1lU2l0ZSBpbiBn
aXZlbiBjb29raWUiOwogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIH0KIAogICAg
IHN3aXRjaCAoc2FtZVNpdGUudmFsdWUoKSkgewotICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6UGFnZTo6Q29va2llU2FtZVNpdGVQb2xpY3k6Ok5vbmU6CisgICAgY2FzZSBQcm90b2NvbDo6
UGFnZTo6Q29va2llU2FtZVNpdGVQb2xpY3k6Ok5vbmU6CiAgICAgICAgIGNvb2tpZS5zYW1lU2l0
ZSA9IENvb2tpZTo6U2FtZVNpdGVQb2xpY3k6Ok5vbmU7Ci0KICAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpDb29raWVTYW1lU2l0ZVBvbGljeTo6TGF4
OgorCisgICAgY2FzZSBQcm90b2NvbDo6UGFnZTo6Q29va2llU2FtZVNpdGVQb2xpY3k6OkxheDoK
ICAgICAgICAgY29va2llLnNhbWVTaXRlID0gQ29va2llOjpTYW1lU2l0ZVBvbGljeTo6TGF4Owot
CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6Q29v
a2llU2FtZVNpdGVQb2xpY3k6OlN0cmljdDoKKworICAgIGNhc2UgUHJvdG9jb2w6OlBhZ2U6OkNv
b2tpZVNhbWVTaXRlUG9saWN5OjpTdHJpY3Q6CiAgICAgICAgIGNvb2tpZS5zYW1lU2l0ZSA9IENv
b2tpZTo6U2FtZVNpdGVQb2xpY3k6OlN0cmljdDsKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAt
NjUyLDExICs2NDgsMTMgQEAgc3RhdGljIE9wdGlvbmFsPENvb2tpZT4gcGFyc2VDb29raWVPYmpl
Y3QoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBKU09OOjoKICAgICByZXR1cm4gY29v
a2llOwogfQogCi12b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6c2V0Q29va2llKEVycm9yU3RyaW5n
JiBlcnJvclN0cmluZywgY29uc3QgSlNPTjo6T2JqZWN0JiBjb29raWVPYmplY3QpCitQcm90b2Nv
bDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JQYWdlQWdlbnQ6OnNldENvb2tpZShSZWY8
SlNPTjo6T2JqZWN0PiYmIGNvb2tpZU9iamVjdCkKIHsKLSAgICBhdXRvIGNvb2tpZSA9IHBhcnNl
Q29va2llT2JqZWN0KGVycm9yU3RyaW5nLCBjb29raWVPYmplY3QpOworICAgIFByb3RvY29sOjpF
cnJvclN0cmluZyBlcnJvclN0cmluZzsKKworICAgIGF1dG8gY29va2llID0gcGFyc2VDb29raWVP
YmplY3QoZXJyb3JTdHJpbmcsIFdURk1vdmUoY29va2llT2JqZWN0KSk7CiAgICAgaWYgKCFjb29r
aWUpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9y
U3RyaW5nKTsKIAogICAgIGZvciAoYXV0byogZnJhbWUgPSAmbV9pbnNwZWN0ZWRQYWdlLm1haW5G
cmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKSB7CiAg
ICAgICAgIGlmIChhdXRvKiBkb2N1bWVudCA9IGZyYW1lLT5kb2N1bWVudCgpKSB7CkBAIC02NjQs
OSArNjYyLDExIEBAIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpzZXRDb29raWUoRXJyb3JTdHJp
bmcmIGVycm9yU3RyaW5nLCBjb25zdCBKU09OOjpPYmplY3QmCiAgICAgICAgICAgICAgICAgcGFn
ZS0+Y29va2llSmFyKCkuc2V0UmF3Q29va2llKCpkb2N1bWVudCwgY29va2llLnZhbHVlKCkpOwog
ICAgICAgICB9CiAgICAgfQorCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JQ
YWdlQWdlbnQ6OmRlbGV0ZUNvb2tpZShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgY29va2ll
TmFtZSwgY29uc3QgU3RyaW5nJiB1cmwpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJ
bnNwZWN0b3JQYWdlQWdlbnQ6OmRlbGV0ZUNvb2tpZShjb25zdCBTdHJpbmcmIGNvb2tpZU5hbWUs
IGNvbnN0IFN0cmluZyYgdXJsKQogewogICAgIFVSTCBwYXJzZWRVUkwoeyB9LCB1cmwpOwogICAg
IGZvciAoRnJhbWUqIGZyYW1lID0gJm1faW5zcGVjdGVkUGFnZS5tYWluRnJhbWUoKTsgZnJhbWU7
IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoKSkgewpAQCAtNjc1LDQ4ICs2NzUs
NTkgQEAgdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmRlbGV0ZUNvb2tpZShFcnJvclN0cmluZyYs
IGNvbnN0IFN0cmluZyYgY29va2llTmFtZSwgY28KICAgICAgICAgICAgICAgICBwYWdlLT5jb29r
aWVKYXIoKS5kZWxldGVDb29raWUoKmRvY3VtZW50LCBwYXJzZWRVUkwsIGNvb2tpZU5hbWUpOwog
ICAgICAgICB9CiAgICAgfQorCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JQ
YWdlQWdlbnQ6OmdldFJlc291cmNlVHJlZShFcnJvclN0cmluZyYsIFJlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpQYWdlOjpGcmFtZVJlc291cmNlVHJlZT4mIG9iamVjdCkKK1Byb3RvY29sOjpF
cnJvclN0cmluZ09yPFJlZjxQcm90b2NvbDo6UGFnZTo6RnJhbWVSZXNvdXJjZVRyZWU+PiBJbnNw
ZWN0b3JQYWdlQWdlbnQ6OmdldFJlc291cmNlVHJlZSgpCiB7Ci0gICAgb2JqZWN0ID0gYnVpbGRP
YmplY3RGb3JGcmFtZVRyZWUoJm1faW5zcGVjdGVkUGFnZS5tYWluRnJhbWUoKSk7CisgICAgcmV0
dXJuIGJ1aWxkT2JqZWN0Rm9yRnJhbWVUcmVlKCZtX2luc3BlY3RlZFBhZ2UubWFpbkZyYW1lKCkp
OwogfQogCi12b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6Z2V0UmVzb3VyY2VDb250ZW50KEVycm9y
U3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBjb25zdCBTdHJpbmcm
IHVybCwgU3RyaW5nKiBjb250ZW50LCBib29sKiBiYXNlNjRFbmNvZGVkKQorUHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8c3RkOjp0dXBsZTxTdHJpbmcsIGJvb2wgLyogYmFzZTY0RW5jb2RlZCAqLz4+
IEluc3BlY3RvclBhZ2VBZ2VudDo6Z2V0UmVzb3VyY2VDb250ZW50KGNvbnN0IFByb3RvY29sOjpO
ZXR3b3JrOjpGcmFtZUlkJiBmcmFtZUlkLCBjb25zdCBTdHJpbmcmIHVybCkKIHsKKyAgICBQcm90
b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBGcmFtZSogZnJhbWUgPSBhc3Nl
cnRGcmFtZShlcnJvclN0cmluZywgZnJhbWVJZCk7CiAgICAgaWYgKCFmcmFtZSkKLSAgICAgICAg
cmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCi0g
ICAgcmVzb3VyY2VDb250ZW50KGVycm9yU3RyaW5nLCBmcmFtZSwgVVJMKHsgfSwgdXJsKSwgY29u
dGVudCwgYmFzZTY0RW5jb2RlZCk7CisgICAgU3RyaW5nIGNvbnRlbnQ7CisgICAgYm9vbCBiYXNl
NjRFbmNvZGVkOworCisgICAgcmVzb3VyY2VDb250ZW50KGVycm9yU3RyaW5nLCBmcmFtZSwgVVJM
KHsgfSwgdXJsKSwgJmNvbnRlbnQsICZiYXNlNjRFbmNvZGVkKTsKKworICAgIHJldHVybiB7IHsg
Y29udGVudCwgYmFzZTY0RW5jb2RlZCB9IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yUGFnZUFnZW50
OjpzZXRCb290c3RyYXBTY3JpcHQoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFs
U291cmNlKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yUGFnZUFnZW50
OjpzZXRCb290c3RyYXBTY3JpcHQoY29uc3QgU3RyaW5nJiBzb3VyY2UpCiB7Ci0gICAgbV9ib290
c3RyYXBTY3JpcHQgPSBvcHRpb25hbFNvdXJjZSA/ICpvcHRpb25hbFNvdXJjZSA6IG51bGxTdHJp
bmcoKTsKKyAgICBtX2Jvb3RzdHJhcFNjcmlwdCA9IHNvdXJjZTsKKworICAgIHJldHVybiB7IH07
CiB9CiAKLXZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpzZWFyY2hJblJlc291cmNlKEVycm9yU3Ry
aW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBjb25zdCBTdHJpbmcmIHVy
bCwgY29uc3QgU3RyaW5nJiBxdWVyeSwgY29uc3QgYm9vbCogb3B0aW9uYWxDYXNlU2Vuc2l0aXZl
LCBjb25zdCBib29sKiBvcHRpb25hbElzUmVnZXgsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxSZXF1
ZXN0SWQsIFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkdlbmVyaWNU
eXBlczo6U2VhcmNoTWF0Y2g+PiYgcmVzdWx0cykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPFJl
ZjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpHZW5lcmljVHlwZXM6OlNlYXJjaE1hdGNoPj4+IElu
c3BlY3RvclBhZ2VBZ2VudDo6c2VhcmNoSW5SZXNvdXJjZShjb25zdCBQcm90b2NvbDo6TmV0d29y
azo6RnJhbWVJZCYgZnJhbWVJZCwgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgcXVl
cnksIE9wdGlvbmFsPGJvb2w+JiYgY2FzZVNlbnNpdGl2ZSwgT3B0aW9uYWw8Ym9vbD4mJiBpc1Jl
Z2V4LCBjb25zdCBQcm90b2NvbDo6TmV0d29yazo6UmVxdWVzdElkJiByZXF1ZXN0SWQpCiB7Ci0g
ICAgcmVzdWx0cyA9IEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6R2VuZXJpY1R5
cGVzOjpTZWFyY2hNYXRjaD46OmNyZWF0ZSgpOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBl
cnJvclN0cmluZzsKIAotICAgIGJvb2wgaXNSZWdleCA9IG9wdGlvbmFsSXNSZWdleCA/ICpvcHRp
b25hbElzUmVnZXggOiBmYWxzZTsKLSAgICBib29sIGNhc2VTZW5zaXRpdmUgPSBvcHRpb25hbENh
c2VTZW5zaXRpdmUgPyAqb3B0aW9uYWxDYXNlU2Vuc2l0aXZlIDogZmFsc2U7Ci0KLSAgICBpZiAo
b3B0aW9uYWxSZXF1ZXN0SWQpIHsKKyAgICBpZiAoISFyZXF1ZXN0SWQpIHsKICAgICAgICAgaWYg
KGF1dG8qIG5ldHdvcmtBZ2VudCA9IG1faW5zdHJ1bWVudGluZ0FnZW50cy5lbmFibGVkTmV0d29y
a0FnZW50KCkpIHsKLSAgICAgICAgICAgIG5ldHdvcmtBZ2VudC0+c2VhcmNoSW5SZXF1ZXN0KGVy
cm9yU3RyaW5nLCAqb3B0aW9uYWxSZXF1ZXN0SWQsIHF1ZXJ5LCBjYXNlU2Vuc2l0aXZlLCBpc1Jl
Z2V4LCByZXN1bHRzKTsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIFJlZlB0cjxK
U09OOjpBcnJheU9mPFByb3RvY29sOjpHZW5lcmljVHlwZXM6OlNlYXJjaE1hdGNoPj4gcmVzdWx0
OworICAgICAgICAgICAgbmV0d29ya0FnZW50LT5zZWFyY2hJblJlcXVlc3QoZXJyb3JTdHJpbmcs
IHJlcXVlc3RJZCwgcXVlcnksIGNhc2VTZW5zaXRpdmUgJiYgKmNhc2VTZW5zaXRpdmUsIGlzUmVn
ZXggJiYgKmlzUmVnZXgsIHJlc3VsdCk7CisgICAgICAgICAgICBpZiAoIXJlc3VsdCkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOworICAgICAgICAg
ICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOwogICAgICAgICB9CiAgICAgfQogCiAg
ICAgRnJhbWUqIGZyYW1lID0gYXNzZXJ0RnJhbWUoZXJyb3JTdHJpbmcsIGZyYW1lSWQpOwogICAg
IGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVj
dGVkKGVycm9yU3RyaW5nKTsKIAogICAgIERvY3VtZW50TG9hZGVyKiBsb2FkZXIgPSBhc3NlcnRE
b2N1bWVudExvYWRlcihlcnJvclN0cmluZywgZnJhbWUpOwogICAgIGlmICghbG9hZGVyKQotICAg
ICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7
CiAKICAgICBVUkwga3VybCh7IH0sIHVybCk7CiAKQEAgLTczNSwyOSArNzQ2LDI2IEBAIHZvaWQg
SW5zcGVjdG9yUGFnZUFnZW50OjpzZWFyY2hJblJlc291cmNlKEVycm9yU3RyaW5nJiBlcnJvclN0
cmluZywgY29uc3QgU3RyaW5nCiAgICAgfQogCiAgICAgaWYgKCFzdWNjZXNzKQotICAgICAgICBy
ZXR1cm47CisgICAgICAgIHJldHVybiBKU09OOjpBcnJheU9mPFByb3RvY29sOjpHZW5lcmljVHlw
ZXM6OlNlYXJjaE1hdGNoPjo6Y3JlYXRlKCk7CiAKLSAgICByZXN1bHRzID0gQ29udGVudFNlYXJj
aFV0aWxpdGllczo6c2VhcmNoSW5UZXh0QnlMaW5lcyhjb250ZW50LCBxdWVyeSwgY2FzZVNlbnNp
dGl2ZSwgaXNSZWdleCk7CisgICAgcmV0dXJuIENvbnRlbnRTZWFyY2hVdGlsaXRpZXM6OnNlYXJj
aEluVGV4dEJ5TGluZXMoY29udGVudCwgcXVlcnksIGNhc2VTZW5zaXRpdmUgJiYgKmNhc2VTZW5z
aXRpdmUsIGlzUmVnZXggJiYgKmlzUmVnZXgpOwogfQogCi1zdGF0aWMgUmVmPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlBhZ2U6OlNlYXJjaFJlc3VsdD4gYnVpbGRPYmplY3RGb3JTZWFyY2hSZXN1bHQo
Y29uc3QgU3RyaW5nJiBmcmFtZUlkLCBjb25zdCBTdHJpbmcmIHVybCwgaW50IG1hdGNoZXNDb3Vu
dCkKK3N0YXRpYyBSZWY8UHJvdG9jb2w6OlBhZ2U6OlNlYXJjaFJlc3VsdD4gYnVpbGRPYmplY3RG
b3JTZWFyY2hSZXN1bHQoY29uc3QgUHJvdG9jb2w6Ok5ldHdvcms6OkZyYW1lSWQmIGZyYW1lSWQs
IGNvbnN0IFN0cmluZyYgdXJsLCBpbnQgbWF0Y2hlc0NvdW50KQogewotICAgIHJldHVybiBJbnNw
ZWN0b3I6OlByb3RvY29sOjpQYWdlOjpTZWFyY2hSZXN1bHQ6OmNyZWF0ZSgpCisgICAgcmV0dXJu
IFByb3RvY29sOjpQYWdlOjpTZWFyY2hSZXN1bHQ6OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRVcmwo
dXJsKQogICAgICAgICAuc2V0RnJhbWVJZChmcmFtZUlkKQogICAgICAgICAuc2V0TWF0Y2hlc0Nv
dW50KG1hdGNoZXNDb3VudCkKICAgICAgICAgLnJlbGVhc2UoKTsKIH0KIAotdm9pZCBJbnNwZWN0
b3JQYWdlQWdlbnQ6OnNlYXJjaEluUmVzb3VyY2VzKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5n
JiB0ZXh0LCBjb25zdCBib29sKiBvcHRpb25hbENhc2VTZW5zaXRpdmUsIGNvbnN0IGJvb2wqIG9w
dGlvbmFsSXNSZWdleCwgUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6
UGFnZTo6U2VhcmNoUmVzdWx0Pj4mIHJlc3VsdCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPFJl
ZjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpQYWdlOjpTZWFyY2hSZXN1bHQ+Pj4gSW5zcGVjdG9y
UGFnZUFnZW50OjpzZWFyY2hJblJlc291cmNlcyhjb25zdCBTdHJpbmcmIHRleHQsIE9wdGlvbmFs
PGJvb2w+JiYgY2FzZVNlbnNpdGl2ZSwgT3B0aW9uYWw8Ym9vbD4mJiBpc1JlZ2V4KQogewotICAg
IHJlc3VsdCA9IEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6U2VhcmNo
UmVzdWx0Pjo6Y3JlYXRlKCk7CisgICAgYXV0byByZXN1bHQgPSBKU09OOjpBcnJheU9mPFByb3Rv
Y29sOjpQYWdlOjpTZWFyY2hSZXN1bHQ+OjpjcmVhdGUoKTsKIAotICAgIGJvb2wgY2FzZVNlbnNp
dGl2ZSA9IG9wdGlvbmFsQ2FzZVNlbnNpdGl2ZSA/ICpvcHRpb25hbENhc2VTZW5zaXRpdmUgOiBm
YWxzZTsKLSAgICBib29sIGlzUmVnZXggPSBvcHRpb25hbElzUmVnZXggPyAqb3B0aW9uYWxJc1Jl
Z2V4IDogZmFsc2U7Ci0KLSAgICBhdXRvIHNlYXJjaFN0cmluZ1R5cGUgPSBpc1JlZ2V4ID8gQ29u
dGVudFNlYXJjaFV0aWxpdGllczo6U2VhcmNoU3RyaW5nVHlwZTo6UmVnZXggOiBDb250ZW50U2Vh
cmNoVXRpbGl0aWVzOjpTZWFyY2hTdHJpbmdUeXBlOjpDb250YWluc1N0cmluZzsKLSAgICBhdXRv
IHJlZ2V4ID0gQ29udGVudFNlYXJjaFV0aWxpdGllczo6Y3JlYXRlUmVndWxhckV4cHJlc3Npb25G
b3JTZWFyY2hTdHJpbmcodGV4dCwgY2FzZVNlbnNpdGl2ZSwgc2VhcmNoU3RyaW5nVHlwZSk7Cisg
ICAgYXV0byBzZWFyY2hTdHJpbmdUeXBlID0gKGlzUmVnZXggJiYgKmlzUmVnZXgpID8gQ29udGVu
dFNlYXJjaFV0aWxpdGllczo6U2VhcmNoU3RyaW5nVHlwZTo6UmVnZXggOiBDb250ZW50U2VhcmNo
VXRpbGl0aWVzOjpTZWFyY2hTdHJpbmdUeXBlOjpDb250YWluc1N0cmluZzsKKyAgICBhdXRvIHJl
Z2V4ID0gQ29udGVudFNlYXJjaFV0aWxpdGllczo6Y3JlYXRlUmVndWxhckV4cHJlc3Npb25Gb3JT
ZWFyY2hTdHJpbmcodGV4dCwgY2FzZVNlbnNpdGl2ZSAmJiAqY2FzZVNlbnNpdGl2ZSwgc2VhcmNo
U3RyaW5nVHlwZSk7CiAKICAgICBmb3IgKEZyYW1lKiBmcmFtZSA9ICZtX2luc3BlY3RlZFBhZ2Uu
bWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkp
IHsKICAgICAgICAgZm9yIChhdXRvKiBjYWNoZWRSZXNvdXJjZSA6IGNhY2hlZFJlc291cmNlc0Zv
ckZyYW1lKGZyYW1lKSkgewpAQCAtNzcxLDI0ICs3NzksMzAgQEAgdm9pZCBJbnNwZWN0b3JQYWdl
QWdlbnQ6OnNlYXJjaEluUmVzb3VyY2VzKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiB0ZXh0
LCBjb24KIAogICAgIGlmIChhdXRvKiBuZXR3b3JrQWdlbnQgPSBtX2luc3RydW1lbnRpbmdBZ2Vu
dHMuZW5hYmxlZE5ldHdvcmtBZ2VudCgpKQogICAgICAgICBuZXR3b3JrQWdlbnQtPnNlYXJjaE90
aGVyUmVxdWVzdHMocmVnZXgsIHJlc3VsdCk7CisKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAj
aWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCi12b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6c2V0U2hv
d1J1bGVycyhFcnJvclN0cmluZyYsIGJvb2wgc2hvd1J1bGVycykKK1Byb3RvY29sOjpFcnJvclN0
cmluZ09yPHZvaWQ+IEluc3BlY3RvclBhZ2VBZ2VudDo6c2V0U2hvd1J1bGVycyhib29sIHNob3dS
dWxlcnMpCiB7CiAgICAgbV9vdmVybGF5LT5zZXRTaG93UnVsZXJzKHNob3dSdWxlcnMpOworCisg
ICAgcmV0dXJuIHsgfTsKIH0KICNlbmRpZgogCi12b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6c2V0
U2hvd1BhaW50UmVjdHMoRXJyb3JTdHJpbmcmLCBib29sIHNob3cpCitQcm90b2NvbDo6RXJyb3JT
dHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JQYWdlQWdlbnQ6OnNldFNob3dQYWludFJlY3RzKGJvb2wg
c2hvdykKIHsKICAgICBtX3Nob3dQYWludFJlY3RzID0gc2hvdzsKICAgICBtX2NsaWVudC0+c2V0
U2hvd1BhaW50UmVjdHMoc2hvdyk7CiAKICAgICBpZiAobV9jbGllbnQtPm92ZXJyaWRlc1Nob3dQ
YWludFJlY3RzKCkpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAogICAg
IG1fb3ZlcmxheS0+c2V0U2hvd1BhaW50UmVjdHMoc2hvdyk7CisKKyAgICByZXR1cm4geyB9Owog
fQogCiB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6ZG9tQ29udGVudEV2ZW50RmlyZWQoKQpAQCAt
ODE2LDcgKzgzMCw3IEBAIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpmcmFtZURldGFjaGVkKEZy
YW1lJiBmcmFtZSkKICAgICBtX2lkZW50aWZpZXJUb0ZyYW1lLnJlbW92ZShpZGVudGlmaWVyKTsK
IH0KIAotRnJhbWUqIEluc3BlY3RvclBhZ2VBZ2VudDo6ZnJhbWVGb3JJZChjb25zdCBTdHJpbmcm
IGZyYW1lSWQpCitGcmFtZSogSW5zcGVjdG9yUGFnZUFnZW50OjpmcmFtZUZvcklkKGNvbnN0IFBy
b3RvY29sOjpOZXR3b3JrOjpGcmFtZUlkJiBmcmFtZUlkKQogewogICAgIHJldHVybiBmcmFtZUlk
LmlzRW1wdHkoKSA/IG51bGxwdHIgOiBtX2lkZW50aWZpZXJUb0ZyYW1lLmdldChmcmFtZUlkKTsK
IH0KQEAgLTg0MSw3ICs4NTUsNyBAQCBTdHJpbmcgSW5zcGVjdG9yUGFnZUFnZW50Ojpsb2FkZXJJ
ZChEb2N1bWVudExvYWRlciogbG9hZGVyKQogICAgIH0pLml0ZXJhdG9yLT52YWx1ZTsKIH0KIAot
RnJhbWUqIEluc3BlY3RvclBhZ2VBZ2VudDo6YXNzZXJ0RnJhbWUoRXJyb3JTdHJpbmcmIGVycm9y
U3RyaW5nLCBjb25zdCBTdHJpbmcmIGZyYW1lSWQpCitGcmFtZSogSW5zcGVjdG9yUGFnZUFnZW50
Ojphc3NlcnRGcmFtZShQcm90b2NvbDo6RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBQ
cm90b2NvbDo6TmV0d29yazo6RnJhbWVJZCYgZnJhbWVJZCkKIHsKICAgICBGcmFtZSogZnJhbWUg
PSBmcmFtZUZvcklkKGZyYW1lSWQpOwogICAgIGlmICghZnJhbWUpCkBAIC04NzcsNyArODkxLDcg
QEAgdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmZyYW1lQ2xlYXJlZFNjaGVkdWxlZE5hdmlnYXRp
b24oRnJhbWUmIGZyYW1lKQogI2lmIEVOQUJMRShEQVJLX01PREVfQ1NTKSB8fCBIQVZFKE9TX0RB
UktfTU9ERV9TVVBQT1JUKQogdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmRlZmF1bHRBcHBlYXJh
bmNlRGlkQ2hhbmdlKGJvb2wgdXNlRGFya0FwcGVhcmFuY2UpCiB7Ci0gICAgbV9mcm9udGVuZERp
c3BhdGNoZXItPmRlZmF1bHRBcHBlYXJhbmNlRGlkQ2hhbmdlKHVzZURhcmtBcHBlYXJhbmNlID8g
SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6QXBwZWFyYW5jZTo6RGFyayA6IEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlBhZ2U6OkFwcGVhcmFuY2U6OkxpZ2h0KTsKKyAgICBtX2Zyb250ZW5kRGlzcGF0
Y2hlci0+ZGVmYXVsdEFwcGVhcmFuY2VEaWRDaGFuZ2UodXNlRGFya0FwcGVhcmFuY2UgPyBQcm90
b2NvbDo6UGFnZTo6QXBwZWFyYW5jZTo6RGFyayA6IFByb3RvY29sOjpQYWdlOjpBcHBlYXJhbmNl
OjpMaWdodCk7CiB9CiAjZW5kaWYKIApAQCAtOTMzLDExICs5NDcsMTEgQEAgdm9pZCBJbnNwZWN0
b3JQYWdlQWdlbnQ6OmRpZFJlY2FsY3VsYXRlU3R5bGUoKQogICAgIG1fb3ZlcmxheS0+dXBkYXRl
KCk7CiB9CiAKLVJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpGcmFtZT4gSW5zcGVjdG9y
UGFnZUFnZW50OjpidWlsZE9iamVjdEZvckZyYW1lKEZyYW1lKiBmcmFtZSkKK1JlZjxQcm90b2Nv
bDo6UGFnZTo6RnJhbWU+IEluc3BlY3RvclBhZ2VBZ2VudDo6YnVpbGRPYmplY3RGb3JGcmFtZShG
cmFtZSogZnJhbWUpCiB7CiAgICAgQVNTRVJUX0FSRyhmcmFtZSwgZnJhbWUpOwogCi0gICAgYXV0
byBmcmFtZU9iamVjdCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkZyYW1lOjpjcmVhdGUo
KQorICAgIGF1dG8gZnJhbWVPYmplY3QgPSBQcm90b2NvbDo6UGFnZTo6RnJhbWU6OmNyZWF0ZSgp
CiAgICAgICAgIC5zZXRJZChmcmFtZUlkKGZyYW1lKSkKICAgICAgICAgLnNldExvYWRlcklkKGxv
YWRlcklkKGZyYW1lLT5sb2FkZXIoKS5kb2N1bWVudExvYWRlcigpKSkKICAgICAgICAgLnNldFVy
bChmcmFtZS0+ZG9jdW1lbnQoKS0+dXJsKCkuc3RyaW5nKCkpCkBAIC05NTYsMTkgKzk3MCwxOSBA
QCBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6RnJhbWU+IEluc3BlY3RvclBhZ2VBZ2Vu
dDo6YnVpbGRPYmplY3RGb3JGcmFtZShGcgogICAgIHJldHVybiBmcmFtZU9iamVjdDsKIH0KIAot
UmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkZyYW1lUmVzb3VyY2VUcmVlPiBJbnNwZWN0
b3JQYWdlQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yRnJhbWVUcmVlKEZyYW1lKiBmcmFtZSkKK1JlZjxQ
cm90b2NvbDo6UGFnZTo6RnJhbWVSZXNvdXJjZVRyZWU+IEluc3BlY3RvclBhZ2VBZ2VudDo6YnVp
bGRPYmplY3RGb3JGcmFtZVRyZWUoRnJhbWUqIGZyYW1lKQogewogICAgIEFTU0VSVF9BUkcoZnJh
bWUsIGZyYW1lKTsKIAotICAgIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpGcmFtZT4g
ZnJhbWVPYmplY3QgPSBidWlsZE9iamVjdEZvckZyYW1lKGZyYW1lKTsKLSAgICBhdXRvIHN1YnJl
c291cmNlcyA9IEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6RnJhbWVS
ZXNvdXJjZT46OmNyZWF0ZSgpOwotICAgIGF1dG8gcmVzdWx0ID0gSW5zcGVjdG9yOjpQcm90b2Nv
bDo6UGFnZTo6RnJhbWVSZXNvdXJjZVRyZWU6OmNyZWF0ZSgpCisgICAgUmVmPFByb3RvY29sOjpQ
YWdlOjpGcmFtZT4gZnJhbWVPYmplY3QgPSBidWlsZE9iamVjdEZvckZyYW1lKGZyYW1lKTsKKyAg
ICBhdXRvIHN1YnJlc291cmNlcyA9IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlBhZ2U6OkZyYW1l
UmVzb3VyY2U+OjpjcmVhdGUoKTsKKyAgICBhdXRvIHJlc3VsdCA9IFByb3RvY29sOjpQYWdlOjpG
cmFtZVJlc291cmNlVHJlZTo6Y3JlYXRlKCkKICAgICAgICAgLnNldEZyYW1lKFdURk1vdmUoZnJh
bWVPYmplY3QpKQogICAgICAgICAuc2V0UmVzb3VyY2VzKHN1YnJlc291cmNlcy5jb3B5UmVmKCkp
CiAgICAgICAgIC5yZWxlYXNlKCk7CiAKICAgICBmb3IgKGF1dG8qIGNhY2hlZFJlc291cmNlIDog
Y2FjaGVkUmVzb3VyY2VzRm9yRnJhbWUoZnJhbWUpKSB7Ci0gICAgICAgIGF1dG8gcmVzb3VyY2VP
YmplY3QgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpGcmFtZVJlc291cmNlOjpjcmVhdGUo
KQorICAgICAgICBhdXRvIHJlc291cmNlT2JqZWN0ID0gUHJvdG9jb2w6OlBhZ2U6OkZyYW1lUmVz
b3VyY2U6OmNyZWF0ZSgpCiAgICAgICAgICAgICAuc2V0VXJsKGNhY2hlZFJlc291cmNlLT51cmwo
KS5zdHJpbmcoKSkKICAgICAgICAgICAgIC5zZXRUeXBlKGNhY2hlZFJlc291cmNlVHlwZUpTT04o
KmNhY2hlZFJlc291cmNlKSkKICAgICAgICAgICAgIC5zZXRNaW1lVHlwZShjYWNoZWRSZXNvdXJj
ZS0+cmVzcG9uc2UoKS5taW1lVHlwZSgpKQpAQCAtOTg2LDIxICsxMDAwLDIxIEBAIFJlZjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpQYWdlOjpGcmFtZVJlc291cmNlVHJlZT4gSW5zcGVjdG9yUGFnZUFn
ZW50OjpidWlsZE9iamVjCiAgICAgICAgIHN1YnJlc291cmNlcy0+YWRkSXRlbShXVEZNb3ZlKHJl
c291cmNlT2JqZWN0KSk7CiAgICAgfQogCi0gICAgUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVj
dG9yOjpQcm90b2NvbDo6UGFnZTo6RnJhbWVSZXNvdXJjZVRyZWU+PiBjaGlsZHJlbkFycmF5Owor
ICAgIFJlZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpQYWdlOjpGcmFtZVJlc291cmNlVHJl
ZT4+IGNoaWxkcmVuQXJyYXk7CiAgICAgZm9yIChGcmFtZSogY2hpbGQgPSBmcmFtZS0+dHJlZSgp
LmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPnRyZWUoKS5uZXh0U2libGluZygp
KSB7CiAgICAgICAgIGlmICghY2hpbGRyZW5BcnJheSkgewotICAgICAgICAgICAgY2hpbGRyZW5B
cnJheSA9IEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6RnJhbWVSZXNv
dXJjZVRyZWU+OjpjcmVhdGUoKTsKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0Q2hpbGRGcmFtZXMo
Y2hpbGRyZW5BcnJheSk7CisgICAgICAgICAgICBjaGlsZHJlbkFycmF5ID0gSlNPTjo6QXJyYXlP
ZjxQcm90b2NvbDo6UGFnZTo6RnJhbWVSZXNvdXJjZVRyZWU+OjpjcmVhdGUoKTsKKyAgICAgICAg
ICAgIHJlc3VsdC0+c2V0Q2hpbGRGcmFtZXMoKmNoaWxkcmVuQXJyYXkpOwogICAgICAgICB9CiAg
ICAgICAgIGNoaWxkcmVuQXJyYXktPmFkZEl0ZW0oYnVpbGRPYmplY3RGb3JGcmFtZVRyZWUoY2hp
bGQpKTsKICAgICB9CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBJbnNwZWN0b3JQYWdl
QWdlbnQ6OnNldEVtdWxhdGVkTWVkaWEoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIG1lZGlh
KQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yUGFnZUFnZW50OjpzZXRF
bXVsYXRlZE1lZGlhKGNvbnN0IFN0cmluZyYgbWVkaWEpCiB7CiAgICAgaWYgKG1lZGlhID09IG1f
ZW11bGF0ZWRNZWRpYSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4geyB9OwogCiAg
ICAgbV9lbXVsYXRlZE1lZGlhID0gbWVkaWE7CiAKQEAgLTEwMDksMjEgKzEwMjMsMzQgQEAgdm9p
ZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OnNldEVtdWxhdGVkTWVkaWEoRXJyb3JTdHJpbmcmLCBjb25z
dCBTdHJpbmcmIG1lZGlhKQogCiAgICAgYXV0byBkb2N1bWVudCA9IG1ha2VSZWZQdHIobV9pbnNw
ZWN0ZWRQYWdlLm1haW5GcmFtZSgpLmRvY3VtZW50KCkpOwogICAgIGlmICghZG9jdW1lbnQpCi0g
ICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIGRvY3VtZW50LT51cGRh
dGVMYXlvdXQoKTsKICAgICBkb2N1bWVudC0+ZXZhbHVhdGVNZWRpYVF1ZXJpZXNBbmRSZXBvcnRD
aGFuZ2VzKCk7CisKKyAgICByZXR1cm4geyB9OwogfQogCiAjaWYgRU5BQkxFKERBUktfTU9ERV9D
U1MpIHx8IEhBVkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCi12b2lkIEluc3BlY3RvclBhZ2VBZ2Vu
dDo6c2V0Rm9yY2VkQXBwZWFyYW5jZShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgYXBwZWFy
YW5jZSkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvclBhZ2VBZ2VudDo6
c2V0Rm9yY2VkQXBwZWFyYW5jZShPcHRpb25hbDxQcm90b2NvbDo6UGFnZTo6QXBwZWFyYW5jZT4m
JiBhcHBlYXJhbmNlKQogewotICAgIGlmIChhcHBlYXJhbmNlID09ICJMaWdodCJfcykKLSAgICAg
ICAgbV9pbnNwZWN0ZWRQYWdlLnNldFVzZURhcmtBcHBlYXJhbmNlT3ZlcnJpZGUoZmFsc2UpOwot
ICAgIGVsc2UgaWYgKGFwcGVhcmFuY2UgPT0gIkRhcmsiX3MpCi0gICAgICAgIG1faW5zcGVjdGVk
UGFnZS5zZXRVc2VEYXJrQXBwZWFyYW5jZU92ZXJyaWRlKHRydWUpOwotICAgIGVsc2UKKyAgICBp
ZiAoIWFwcGVhcmFuY2UpIHsKICAgICAgICAgbV9pbnNwZWN0ZWRQYWdlLnNldFVzZURhcmtBcHBl
YXJhbmNlT3ZlcnJpZGUoV1RGOjpudWxsb3B0KTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9
CisKKyAgICBzd2l0Y2ggKCphcHBlYXJhbmNlKSB7CisgICAgY2FzZSBQcm90b2NvbDo6UGFnZTo6
QXBwZWFyYW5jZTo6TGlnaHQ6CisgICAgICAgIG1faW5zcGVjdGVkUGFnZS5zZXRVc2VEYXJrQXBw
ZWFyYW5jZU92ZXJyaWRlKGZhbHNlKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIGNhc2Ug
UHJvdG9jb2w6OlBhZ2U6OkFwcGVhcmFuY2U6OkRhcms6CisgICAgICAgIG1faW5zcGVjdGVkUGFn
ZS5zZXRVc2VEYXJrQXBwZWFyYW5jZU92ZXJyaWRlKHRydWUpOworICAgICAgICByZXR1cm4geyB9
OworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiB7IH07CiB9
CiAjZW5kaWYKIApAQCAtMTAzOSw1MSArMTA2Niw0NyBAQCB2b2lkIEluc3BlY3RvclBhZ2VBZ2Vu
dDo6YXBwbHlFbXVsYXRlZE1lZGlhKFN0cmluZyYgbWVkaWEpCiAgICAgICAgIG1lZGlhID0gbV9l
bXVsYXRlZE1lZGlhOwogfQogCi12b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6c25hcHNob3ROb2Rl
KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJZCwgU3RyaW5nKiBvdXREYXRhVVJM
KQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8U3RyaW5nPiBJbnNwZWN0b3JQYWdlQWdlbnQ6OnNu
YXBzaG90Tm9kZShQcm90b2NvbDo6RE9NOjpOb2RlSWQgbm9kZUlkKQogeworICAgIFByb3RvY29s
OjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIEluc3BlY3RvckRPTUFnZW50KiBkb21B
Z2VudCA9IG1faW5zdHJ1bWVudGluZ0FnZW50cy5wZXJzaXN0ZW50RE9NQWdlbnQoKTsKICAgICBB
U1NFUlQoZG9tQWdlbnQpOwogICAgIE5vZGUqIG5vZGUgPSBkb21BZ2VudC0+YXNzZXJ0Tm9kZShl
cnJvclN0cmluZywgbm9kZUlkKTsKICAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJldHVybjsKKyAg
ICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgIHN0ZDo6dW5p
cXVlX3B0cjxJbWFnZUJ1ZmZlcj4gc25hcHNob3QgPSBXZWJDb3JlOjpzbmFwc2hvdE5vZGUobV9p
bnNwZWN0ZWRQYWdlLm1haW5GcmFtZSgpLCAqbm9kZSk7Ci0gICAgaWYgKCFzbmFwc2hvdCkgewot
ICAgICAgICBlcnJvclN0cmluZyA9ICJDb3VsZCBub3QgY2FwdHVyZSBzbmFwc2hvdCJfczsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoIXNuYXBzaG90KQorICAgICAgICByZXR1cm4g
bWFrZVVuZXhwZWN0ZWQoIkNvdWxkIG5vdCBjYXB0dXJlIHNuYXBzaG90Il9zKTsKIAotICAgICpv
dXREYXRhVVJMID0gc25hcHNob3QtPnRvRGF0YVVSTCgiaW1hZ2UvcG5nIl9zLCBXVEY6Om51bGxv
cHQsIFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKTsKKyAgICByZXR1cm4gc25hcHNob3QtPnRvRGF0
YVVSTCgiaW1hZ2UvcG5nIl9zLCBXVEY6Om51bGxvcHQsIFByZXNlcnZlUmVzb2x1dGlvbjo6WWVz
KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OnNuYXBzaG90UmVjdChFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcsIGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBjb25z
dCBTdHJpbmcmIGNvb3JkaW5hdGVTeXN0ZW0sIFN0cmluZyogb3V0RGF0YVVSTCkKK1Byb3RvY29s
OjpFcnJvclN0cmluZ09yPFN0cmluZz4gSW5zcGVjdG9yUGFnZUFnZW50OjpzbmFwc2hvdFJlY3Qo
aW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIFByb3RvY29sOjpQYWdlOjpDb29y
ZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0pCiB7CiAgICAgU25hcHNob3RPcHRpb25zIG9w
dGlvbnMgPSBTbmFwc2hvdE9wdGlvbnNOb25lOwotICAgIGlmIChjb29yZGluYXRlU3lzdGVtID09
ICJWaWV3cG9ydCIpCisgICAgaWYgKGNvb3JkaW5hdGVTeXN0ZW0gPT0gUHJvdG9jb2w6OlBhZ2U6
OkNvb3JkaW5hdGVTeXN0ZW06OlZpZXdwb3J0KQogICAgICAgICBvcHRpb25zIHw9IFNuYXBzaG90
T3B0aW9uc0luVmlld0Nvb3JkaW5hdGVzOwogCiAgICAgSW50UmVjdCByZWN0YW5nbGUoeCwgeSwg
d2lkdGgsIGhlaWdodCk7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBzbmFwc2hv
dCA9IHNuYXBzaG90RnJhbWVSZWN0KG1faW5zcGVjdGVkUGFnZS5tYWluRnJhbWUoKSwgcmVjdGFu
Z2xlLCBvcHRpb25zKTsKIAotICAgIGlmICghc25hcHNob3QpIHsKLSAgICAgICAgZXJyb3JTdHJp
bmcgPSAiQ291bGQgbm90IGNhcHR1cmUgc25hcHNob3QiX3M7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9CisgICAgaWYgKCFzbmFwc2hvdCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJD
b3VsZCBub3QgY2FwdHVyZSBzbmFwc2hvdCJfcyk7CiAKLSAgICAqb3V0RGF0YVVSTCA9IHNuYXBz
aG90LT50b0RhdGFVUkwoImltYWdlL3BuZyJfcywgV1RGOjpudWxsb3B0LCBQcmVzZXJ2ZVJlc29s
dXRpb246Olllcyk7CisgICAgcmV0dXJuIHNuYXBzaG90LT50b0RhdGFVUkwoImltYWdlL3BuZyJf
cywgV1RGOjpudWxsb3B0LCBQcmVzZXJ2ZVJlc29sdXRpb246Olllcyk7CiB9CiAKICNpZiBFTkFC
TEUoV0VCX0FSQ0hJVkUpICYmIFVTRShDRikKLXZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjphcmNo
aXZlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgU3RyaW5nKiBkYXRhKQorUHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8U3RyaW5nPiBJbnNwZWN0b3JQYWdlQWdlbnQ6OmFyY2hpdmUoKQogewogICAg
IGF1dG8gYXJjaGl2ZSA9IExlZ2FjeVdlYkFyY2hpdmU6OmNyZWF0ZShtX2luc3BlY3RlZFBhZ2Uu
bWFpbkZyYW1lKCkpOwotICAgIGlmICghYXJjaGl2ZSkgewotICAgICAgICBlcnJvclN0cmluZyA9
ICJDb3VsZCBub3QgY3JlYXRlIHdlYiBhcmNoaXZlIGZvciBtYWluIGZyYW1lIl9zOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQorICAgIGlmICghYXJjaGl2ZSkKKyAgICAgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKCJDb3VsZCBub3QgY3JlYXRlIHdlYiBhcmNoaXZlIGZvciBtYWluIGZyYW1lIl9z
KTsKIAogICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IGJ1ZmZlciA9IGFyY2hpdmUtPnJhd0RhdGFS
ZXByZXNlbnRhdGlvbigpOwotICAgICpkYXRhID0gYmFzZTY0RW5jb2RlKENGRGF0YUdldEJ5dGVQ
dHIoYnVmZmVyLmdldCgpKSwgQ0ZEYXRhR2V0TGVuZ3RoKGJ1ZmZlci5nZXQoKSkpOworICAgIHJl
dHVybiBiYXNlNjRFbmNvZGUoQ0ZEYXRhR2V0Qnl0ZVB0cihidWZmZXIuZ2V0KCkpLCBDRkRhdGFH
ZXRMZW5ndGgoYnVmZmVyLmdldCgpKSk7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JQYWdlQWdlbnQuaCBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUGFnZUFnZW50LmgKaW5kZXggM2JjZDA0
ODdjZmM4NzY2YmFhMDFjNzgwNDE3M2ExNTc0N2I0N2IyZC4uZDJiMDY1ZTEzNjUxZmFmZTc0NzMy
NWYwMmU3NzAxZmJmMWU4ZTQ1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2FnZW50cy9JbnNwZWN0b3JQYWdlQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvYWdlbnRzL0luc3BlY3RvclBhZ2VBZ2VudC5oCkBAIC01MSwxNCArNTEsMTIgQEAgY2xhc3Mg
UGFnZTsKIGNsYXNzIFJlbmRlck9iamVjdDsKIGNsYXNzIFNoYXJlZEJ1ZmZlcjsKIAotdHlwZWRl
ZiBTdHJpbmcgRXJyb3JTdHJpbmc7Ci0KIGNsYXNzIEluc3BlY3RvclBhZ2VBZ2VudCBmaW5hbCA6
IHB1YmxpYyBJbnNwZWN0b3JBZ2VudEJhc2UsIHB1YmxpYyBJbnNwZWN0b3I6OlBhZ2VCYWNrZW5k
RGlzcGF0Y2hlckhhbmRsZXIgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEluc3BlY3RvclBh
Z2VBZ2VudCk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgSW5z
cGVjdG9yUGFnZUFnZW50KFBhZ2VBZ2VudENvbnRleHQmLCBJbnNwZWN0b3JDbGllbnQqLCBJbnNw
ZWN0b3JPdmVybGF5Kik7Ci0gICAgfkluc3BlY3RvclBhZ2VBZ2VudCgpIG92ZXJyaWRlOworICAg
IH5JbnNwZWN0b3JQYWdlQWdlbnQoKTsKIAogICAgIGVudW0gUmVzb3VyY2VUeXBlIHsKICAgICAg
ICAgRG9jdW1lbnRSZXNvdXJjZSwKQEAgLTc5LDcgKzc3LDcgQEAgcHVibGljOgogCiAgICAgc3Rh
dGljIGJvb2wgc2hhcmVkQnVmZmVyQ29udGVudChSZWZQdHI8U2hhcmVkQnVmZmVyPiYmLCBjb25z
dCBTdHJpbmcmIHRleHRFbmNvZGluZ05hbWUsIGJvb2wgd2l0aEJhc2U2NEVuY29kZSwgU3RyaW5n
KiByZXN1bHQpOwogICAgIHN0YXRpYyBWZWN0b3I8Q2FjaGVkUmVzb3VyY2UqPiBjYWNoZWRSZXNv
dXJjZXNGb3JGcmFtZShGcmFtZSopOwotICAgIHN0YXRpYyB2b2lkIHJlc291cmNlQ29udGVudChF
cnJvclN0cmluZyYsIEZyYW1lKiwgY29uc3QgVVJMJiwgU3RyaW5nKiByZXN1bHQsIGJvb2wqIGJh
c2U2NEVuY29kZWQpOworICAgIHN0YXRpYyB2b2lkIHJlc291cmNlQ29udGVudChJbnNwZWN0b3I6
OlByb3RvY29sOjpFcnJvclN0cmluZyYsIEZyYW1lKiwgY29uc3QgVVJMJiwgU3RyaW5nKiByZXN1
bHQsIGJvb2wqIGJhc2U2NEVuY29kZWQpOwogICAgIHN0YXRpYyBTdHJpbmcgc291cmNlTWFwVVJM
Rm9yUmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2UqKTsKICAgICBzdGF0aWMgQ2FjaGVkUmVzb3VyY2Uq
IGNhY2hlZFJlc291cmNlKEZyYW1lKiwgY29uc3QgVVJMJik7CiAgICAgc3RhdGljIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlBhZ2U6OlJlc291cmNlVHlwZSByZXNvdXJjZVR5cGVKU09OKFJlc291cmNl
VHlwZSk7CkBAIC04NywzOSArODUsMzkgQEAgcHVibGljOgogICAgIHN0YXRpYyBSZXNvdXJjZVR5
cGUgaW5zcGVjdG9yUmVzb3VyY2VUeXBlKGNvbnN0IENhY2hlZFJlc291cmNlJik7CiAgICAgc3Rh
dGljIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OlJlc291cmNlVHlwZSBjYWNoZWRSZXNvdXJj
ZVR5cGVKU09OKGNvbnN0IENhY2hlZFJlc291cmNlJik7CiAgICAgc3RhdGljIEZyYW1lKiBmaW5k
RnJhbWVXaXRoU2VjdXJpdHlPcmlnaW4oUGFnZSYsIGNvbnN0IFN0cmluZyYgb3JpZ2luUmF3U3Ry
aW5nKTsKLSAgICBzdGF0aWMgRG9jdW1lbnRMb2FkZXIqIGFzc2VydERvY3VtZW50TG9hZGVyKEVy
cm9yU3RyaW5nJiwgRnJhbWUqKTsKKyAgICBzdGF0aWMgRG9jdW1lbnRMb2FkZXIqIGFzc2VydERv
Y3VtZW50TG9hZGVyKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nJiwgRnJhbWUqKTsK
IAogICAgIC8vIEluc3BlY3RvckFnZW50QmFzZQotICAgIHZvaWQgZGlkQ3JlYXRlRnJvbnRlbmRB
bmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRSb3V0ZXIqLCBJbnNwZWN0b3I6OkJhY2tlbmRE
aXNwYXRjaGVyKikgb3ZlcnJpZGU7Ci0gICAgdm9pZCB3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFj
a2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24pIG92ZXJyaWRlOworICAgIHZvaWQgZGlk
Q3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRSb3V0ZXIqLCBJbnNw
ZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyKik7CisgICAgdm9pZCB3aWxsRGVzdHJveUZyb250ZW5k
QW5kQmFja2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24pOwogCiAgICAgLy8gUGFnZUJh
Y2tlbmREaXNwYXRjaGVySGFuZGxlcgotICAgIHZvaWQgZW5hYmxlKEVycm9yU3RyaW5nJikgb3Zl
cnJpZGU7Ci0gICAgdm9pZCBkaXNhYmxlKEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCByZWxvYWQoRXJyb3JTdHJpbmcmLCBjb25zdCBib29sKiBvcHRpb25hbFJlbG9hZEZyb21Pcmln
aW4sIGNvbnN0IGJvb2wqIG9wdGlvbmFsUmV2YWxpZGF0ZUFsbFJlc291cmNlcykgb3ZlcnJpZGU7
Ci0gICAgdm9pZCBuYXZpZ2F0ZShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgdXJsKSBvdmVy
cmlkZTsKLSAgICB2b2lkIG92ZXJyaWRlVXNlckFnZW50KEVycm9yU3RyaW5nJiwgY29uc3QgU3Ry
aW5nKiB2YWx1ZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBvdmVycmlkZVNldHRpbmcoRXJyb3JTdHJp
bmcmLCBjb25zdCBTdHJpbmcmIHNldHRpbmcsIGNvbnN0IGJvb2wqIHZhbHVlKSBvdmVycmlkZTsK
LSAgICB2b2lkIGdldENvb2tpZXMoRXJyb3JTdHJpbmcmLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpDb29raWU+PiYgY29va2llcykgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCBzZXRDb29raWUoRXJyb3JTdHJpbmcmLCBjb25zdCBKU09OOjpPYmplY3QmIGNvb2tp
ZU9iamVjdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkZWxldGVDb29raWUoRXJyb3JTdHJpbmcmLCBj
b25zdCBTdHJpbmcmIGNvb2tpZU5hbWUsIGNvbnN0IFN0cmluZyYgdXJsKSBvdmVycmlkZTsKLSAg
ICB2b2lkIGdldFJlc291cmNlVHJlZShFcnJvclN0cmluZyYsIFJlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpQYWdlOjpGcmFtZVJlc291cmNlVHJlZT4mKSBvdmVycmlkZTsKLSAgICB2b2lkIGdl
dFJlc291cmNlQ29udGVudChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgZnJhbWVJZCwgY29u
c3QgU3RyaW5nJiB1cmwsIFN0cmluZyogY29udGVudCwgYm9vbCogYmFzZTY0RW5jb2RlZCkgb3Zl
cnJpZGU7Ci0gICAgdm9pZCBzZXRCb290c3RyYXBTY3JpcHQoRXJyb3JTdHJpbmcmLCBjb25zdCBT
dHJpbmcqIG9wdGlvbmFsU291cmNlKSBmaW5hbDsKLSAgICB2b2lkIHNlYXJjaEluUmVzb3VyY2Uo
RXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGZyYW1lSWQsIGNvbnN0IFN0cmluZyYgdXJsLCBj
b25zdCBTdHJpbmcmIHF1ZXJ5LCBjb25zdCBib29sKiBvcHRpb25hbENhc2VTZW5zaXRpdmUsIGNv
bnN0IGJvb2wqIG9wdGlvbmFsSXNSZWdleCwgY29uc3QgU3RyaW5nKiBvcHRpb25hbFJlcXVlc3RJ
ZCwgUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6R2VuZXJpY1R5cGVz
OjpTZWFyY2hNYXRjaD4+Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZWFyY2hJblJlc291cmNlcyhF
cnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYsIGNvbnN0IGJvb2wqIGNhc2VTZW5zaXRpdmUsIGNv
bnN0IGJvb2wqIGlzUmVnZXgsIFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlBhZ2U6OlNlYXJjaFJlc3VsdD4+Jikgb3ZlcnJpZGU7CisgICAgSW5zcGVjdG9yOjpQcm90
b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBlbmFibGUoKTsKKyAgICBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGRpc2FibGUoKTsKKyAgICBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHJlbG9hZChPcHRpb25hbDxib29sPiYmIGlnbm9yZUNh
Y2hlLCBPcHRpb25hbDxib29sPiYmIHJldmFsaWRhdGVBbGxSZXNvdXJjZXMpOworICAgIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gbmF2aWdhdGUoY29uc3QgU3RyaW5n
JiB1cmwpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gb3Zl
cnJpZGVVc2VyQWdlbnQoY29uc3QgU3RyaW5nJik7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6
RXJyb3JTdHJpbmdPcjx2b2lkPiBvdmVycmlkZVNldHRpbmcoSW5zcGVjdG9yOjpQcm90b2NvbDo6
UGFnZTo6U2V0dGluZywgT3B0aW9uYWw8Ym9vbD4mJiB2YWx1ZSk7CisgICAgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpQYWdlOjpDb29raWU+Pj4gZ2V0Q29va2llcygpOworICAgIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc2V0Q29va2llKFJlZjxKU09OOjpPYmplY3Q+JiYpOwor
ICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZGVsZXRlQ29va2ll
KGNvbnN0IFN0cmluZyYgY29va2llTmFtZSwgY29uc3QgU3RyaW5nJiB1cmwpOworICAgIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBh
Z2U6OkZyYW1lUmVzb3VyY2VUcmVlPj4gZ2V0UmVzb3VyY2VUcmVlKCk7CisgICAgSW5zcGVjdG9y
OjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxzdGQ6OnR1cGxlPFN0cmluZywgYm9vbCAvKiBiYXNl
NjRFbmNvZGVkICovPj4gZ2V0UmVzb3VyY2VDb250ZW50KGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9j
b2w6Ok5ldHdvcms6OkZyYW1lSWQmLCBjb25zdCBTdHJpbmcmIHVybCk7CisgICAgSW5zcGVjdG9y
OjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzZXRCb290c3RyYXBTY3JpcHQoY29uc3Qg
U3RyaW5nJiBzb3VyY2UpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8
UmVmPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6R2VuZXJpY1R5cGVzOjpTZWFy
Y2hNYXRjaD4+PiBzZWFyY2hJblJlc291cmNlKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5l
dHdvcms6OkZyYW1lSWQmLCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBxdWVyeSwg
T3B0aW9uYWw8Ym9vbD4mJiBjYXNlU2Vuc2l0aXZlLCBPcHRpb25hbDxib29sPiYmIGlzUmVnZXgs
IGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OlJlcXVlc3RJZCYpOworICAgIElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEpTT046OkFycmF5T2Y8SW5zcGVj
dG9yOjpQcm90b2NvbDo6UGFnZTo6U2VhcmNoUmVzdWx0Pj4+IHNlYXJjaEluUmVzb3VyY2VzKGNv
bnN0IFN0cmluZyYsIE9wdGlvbmFsPGJvb2w+JiYgY2FzZVNlbnNpdGl2ZSwgT3B0aW9uYWw8Ym9v
bD4mJiBpc1JlZ2V4KTsKICNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICB2b2lkIHNldFNo
b3dSdWxlcnMoRXJyb3JTdHJpbmcmLCBib29sKSBvdmVycmlkZTsKKyAgICBJbnNwZWN0b3I6OlBy
b3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHNldFNob3dSdWxlcnMoYm9vbCk7CiAjZW5kaWYK
LSAgICB2b2lkIHNldFNob3dQYWludFJlY3RzKEVycm9yU3RyaW5nJiwgYm9vbCBzaG93KSBvdmVy
cmlkZTsKLSAgICB2b2lkIHNldEVtdWxhdGVkTWVkaWEoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJp
bmcmKSBvdmVycmlkZTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZv
aWQ+IHNldFNob3dQYWludFJlY3RzKGJvb2wpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8dm9pZD4gc2V0RW11bGF0ZWRNZWRpYShjb25zdCBTdHJpbmcmKTsKICNpZiBF
TkFCTEUoREFSS19NT0RFX0NTUykgfHwgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKLSAgICB2
b2lkIHNldEZvcmNlZEFwcGVhcmFuY2UoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmKSBvdmVy
cmlkZTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHNldEZv
cmNlZEFwcGVhcmFuY2UoT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6QXBwZWFy
YW5jZT4mJik7CiAjZW5kaWYKLSAgICB2b2lkIHNuYXBzaG90Tm9kZShFcnJvclN0cmluZyYsIGlu
dCBub2RlSWQsIFN0cmluZyogb3V0RGF0YVVSTCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzbmFwc2hv
dFJlY3QoRXJyb3JTdHJpbmcmLCBpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCwg
Y29uc3QgU3RyaW5nJiBjb29yZGluYXRlU3lzdGVtLCBTdHJpbmcqIG91dERhdGFVUkwpIG92ZXJy
aWRlOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8U3RyaW5nPiBzbmFw
c2hvdE5vZGUoSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQpOworICAgIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8U3RyaW5nPiBzbmFwc2hvdFJlY3QoaW50IHgsIGlu
dCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkNv
b3JkaW5hdGVTeXN0ZW0pOwogI2lmIEVOQUJMRShXRUJfQVJDSElWRSkgJiYgVVNFKENGKQotICAg
IHZvaWQgYXJjaGl2ZShFcnJvclN0cmluZyYsIFN0cmluZyogZGF0YSkgb3ZlcnJpZGU7CisgICAg
SW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxTdHJpbmc+IGFyY2hpdmUoKTsKICNl
bmRpZgogCiAgICAgLy8gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uCkBAIC0xNDMsMTAgKzE0MSwx
MCBAQCBwdWJsaWM6CiAgICAgdm9pZCBkaWRTY3JvbGwoKTsKICAgICB2b2lkIGRpZFJlY2FsY3Vs
YXRlU3R5bGUoKTsKIAotICAgIEZyYW1lKiBmcmFtZUZvcklkKGNvbnN0IFN0cmluZyYgZnJhbWVJ
ZCk7CisgICAgRnJhbWUqIGZyYW1lRm9ySWQoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0
d29yazo6RnJhbWVJZCYpOwogICAgIFdFQkNPUkVfRVhQT1JUIFN0cmluZyBmcmFtZUlkKEZyYW1l
Kik7CiAgICAgU3RyaW5nIGxvYWRlcklkKERvY3VtZW50TG9hZGVyKik7Ci0gICAgRnJhbWUqIGFz
c2VydEZyYW1lKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBmcmFtZUlkKTsKKyAgICBGcmFt
ZSogYXNzZXJ0RnJhbWUoSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBjb25zdCBJ
bnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpGcmFtZUlkJik7CiAKIHByaXZhdGU6CiAgICAg
ZG91YmxlIHRpbWVzdGFtcCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2FnZW50cy9JbnNwZWN0b3JUaW1lbGluZUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9hZ2VudHMvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5jcHAKaW5kZXggMGI0NjYwNjhkOTBm
ZTE0OTVhODQyOWI3NjM5ZjMxMzViZDQzM2Y0OC4uMGRmOTUwNTcwM2QwYjM4MTgxMTI1ZTUzMDFl
MjA0MTEyN2ZjM2I1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50
cy9JbnNwZWN0b3JUaW1lbGluZUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvYWdlbnRzL0luc3BlY3RvclRpbWVsaW5lQWdlbnQuY3BwCkBAIC0xMDIsODAgKzEwMiw4MiBA
QCB2b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OmRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2Vu
ZChJbnNwZWN0b3I6OkZyb250ZW5kUm91dAogCiB2b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6
OndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlzY29ubmVjdFJlYXNv
bikKIHsKLSAgICBFcnJvclN0cmluZyBpZ25vcmVkOwotICAgIGRpc2FibGUoaWdub3JlZCk7Cisg
ICAgZGlzYWJsZSgpOwogfQogCi12b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OmVuYWJsZShF
cnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJ
bnNwZWN0b3JUaW1lbGluZUFnZW50OjplbmFibGUoKQogewotICAgIGlmIChtX2luc3RydW1lbnRp
bmdBZ2VudHMuZW5hYmxlZFRpbWVsaW5lQWdlbnQoKSA9PSB0aGlzKSB7Ci0gICAgICAgIGVycm9y
U3RyaW5nID0gIlRpbWVsaW5lIGRvbWFpbiBhbHJlYWR5IGVuYWJsZWQiX3M7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9CisgICAgaWYgKG1faW5zdHJ1bWVudGluZ0FnZW50cy5lbmFibGVkVGltZWxp
bmVBZ2VudCgpID09IHRoaXMpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiVGltZWxp
bmUgZG9tYWluIGFscmVhZHkgZW5hYmxlZCJfcyk7CiAKICAgICBtX2luc3RydW1lbnRpbmdBZ2Vu
dHMuc2V0RW5hYmxlZFRpbWVsaW5lQWdlbnQodGhpcyk7CisKKyAgICByZXR1cm4geyB9OwogfQog
Ci12b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OmRpc2FibGUoRXJyb3JTdHJpbmcmIGVycm9y
U3RyaW5nKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yVGltZWxpbmVB
Z2VudDo6ZGlzYWJsZSgpCiB7Ci0gICAgaWYgKG1faW5zdHJ1bWVudGluZ0FnZW50cy5lbmFibGVk
VGltZWxpbmVBZ2VudCgpICE9IHRoaXMpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiVGltZWxp
bmUgZG9tYWluIGFscmVhZHkgZGlzYWJsZWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Cisg
ICAgaWYgKG1faW5zdHJ1bWVudGluZ0FnZW50cy5lbmFibGVkVGltZWxpbmVBZ2VudCgpICE9IHRo
aXMpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiVGltZWxpbmUgZG9tYWluIGFscmVh
ZHkgZGlzYWJsZWQiX3MpOwogCiAgICAgbV9pbnN0cnVtZW50aW5nQWdlbnRzLnNldEVuYWJsZWRU
aW1lbGluZUFnZW50KG51bGxwdHIpOwogCi0gICAgRXJyb3JTdHJpbmcgaWdub3JlZDsKLSAgICBz
dG9wKGlnbm9yZWQpOworICAgIHN0b3AoKTsKIAogICAgIG1fYXV0b0NhcHR1cmVFbmFibGVkID0g
ZmFsc2U7CiAgICAgbV9pbnN0cnVtZW50cy5jbGVhcigpOworCisgICAgcmV0dXJuIHsgfTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpzdGFydChFcnJvclN0cmluZyYsIGNvbnN0
IGludCogbWF4Q2FsbFN0YWNrRGVwdGgpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJ
bnNwZWN0b3JUaW1lbGluZUFnZW50OjpzdGFydChPcHRpb25hbDxpbnQ+JiYgbWF4Q2FsbFN0YWNr
RGVwdGgpCiB7CiAgICAgbV90cmFja2luZ0Zyb21Gcm9udGVuZCA9IHRydWU7CiAKLSAgICBpbnRl
cm5hbFN0YXJ0KG1heENhbGxTdGFja0RlcHRoKTsKKyAgICBpbnRlcm5hbFN0YXJ0KFdURk1vdmUo
bWF4Q2FsbFN0YWNrRGVwdGgpKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVj
dG9yVGltZWxpbmVBZ2VudDo6c3RvcChFcnJvclN0cmluZyYpCitQcm90b2NvbDo6RXJyb3JTdHJp
bmdPcjx2b2lkPiBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpzdG9wKCkKIHsKICAgICBpbnRlcm5h
bFN0b3AoKTsKIAogICAgIG1fdHJhY2tpbmdGcm9tRnJvbnRlbmQgPSBmYWxzZTsKKworICAgIHJl
dHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6c2V0QXV0b0NhcHR1
cmVFbmFibGVkKEVycm9yU3RyaW5nJiwgYm9vbCBlbmFibGVkKQorUHJvdG9jb2w6OkVycm9yU3Ry
aW5nT3I8dm9pZD4gSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6c2V0QXV0b0NhcHR1cmVFbmFibGVk
KGJvb2wgZW5hYmxlZCkKIHsKICAgICBtX2F1dG9DYXB0dXJlRW5hYmxlZCA9IGVuYWJsZWQ7CisK
KyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OnNldElu
c3RydW1lbnRzKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgSlNPTjo6QXJyYXkmIGlu
c3RydW1lbnRzKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yVGltZWxp
bmVBZ2VudDo6c2V0SW5zdHJ1bWVudHMoUmVmPEpTT046OkFycmF5PiYmIGluc3RydW1lbnRzKQog
ewogICAgIFZlY3RvcjxQcm90b2NvbDo6VGltZWxpbmU6Okluc3RydW1lbnQ+IG5ld0luc3RydW1l
bnRzOwotICAgIG5ld0luc3RydW1lbnRzLnJlc2VydmVDYXBhY2l0eShpbnN0cnVtZW50cy5sZW5n
dGgoKSk7CisgICAgbmV3SW5zdHJ1bWVudHMucmVzZXJ2ZUNhcGFjaXR5KGluc3RydW1lbnRzLT5s
ZW5ndGgoKSk7CiAKLSAgICBmb3IgKGNvbnN0IGF1dG8mIGluc3RydW1lbnRWYWx1ZSA6IGluc3Ry
dW1lbnRzKSB7Ci0gICAgICAgIFN0cmluZyBlbnVtVmFsdWVTdHJpbmc7Ci0gICAgICAgIGlmICgh
aW5zdHJ1bWVudFZhbHVlLT5hc1N0cmluZyhlbnVtVmFsdWVTdHJpbmcpKSB7Ci0gICAgICAgICAg
ICBlcnJvclN0cmluZyA9ICJVbmV4cGVjdGVkIG5vbi1zdHJpbmcgdmFsdWUgaW4gZ2l2ZW4gaW5z
dHJ1bWVudHMiX3M7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KKyAgICBmb3IgKGNv
bnN0IGF1dG8mIGluc3RydW1lbnRWYWx1ZSA6IGluc3RydW1lbnRzLmdldCgpKSB7CisgICAgICAg
IGF1dG8gaW5zdHJ1bWVudFN0cmluZyA9IGluc3RydW1lbnRWYWx1ZS0+YXNTdHJpbmcoKTsKKyAg
ICAgICAgaWYgKCFpbnN0cnVtZW50U3RyaW5nKQorICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4
cGVjdGVkKCJVbmV4cGVjdGVkIG5vbi1zdHJpbmcgdmFsdWUgaW4gZ2l2ZW4gaW5zdHJ1bWVudHMi
X3MpOwogCi0gICAgICAgIE9wdGlvbmFsPFByb3RvY29sOjpUaW1lbGluZTo6SW5zdHJ1bWVudD4g
aW5zdHJ1bWVudFR5cGUgPSBQcm90b2NvbDo6SW5zcGVjdG9ySGVscGVyczo6cGFyc2VFbnVtVmFs
dWVGcm9tU3RyaW5nPFByb3RvY29sOjpUaW1lbGluZTo6SW5zdHJ1bWVudD4oZW51bVZhbHVlU3Ry
aW5nKTsKLSAgICAgICAgaWYgKCFpbnN0cnVtZW50VHlwZSkgewotICAgICAgICAgICAgZXJyb3JT
dHJpbmcgPSBtYWtlU3RyaW5nKCJVbmtub3duIGl0ZW0gaW4gZ2l2ZW4gaW5zdHJ1bWVudHM6ICIs
IGVudW1WYWx1ZVN0cmluZyk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KKyAgICAg
ICAgYXV0byBpbnN0cnVtZW50ID0gUHJvdG9jb2w6OkhlbHBlcnM6OnBhcnNlRW51bVZhbHVlRnJv
bVN0cmluZzxQcm90b2NvbDo6VGltZWxpbmU6Okluc3RydW1lbnQ+KGluc3RydW1lbnRTdHJpbmcp
OworICAgICAgICBpZiAoIWluc3RydW1lbnQpCisgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQobWFrZVN0cmluZygiVW5rbm93biBpbnN0cnVtZW50OiAiLCBpbnN0cnVtZW50U3RyaW5n
KSk7CiAKLSAgICAgICAgbmV3SW5zdHJ1bWVudHMudW5jaGVja2VkQXBwZW5kKCppbnN0cnVtZW50
VHlwZSk7CisgICAgICAgIG5ld0luc3RydW1lbnRzLnVuY2hlY2tlZEFwcGVuZCgqaW5zdHJ1bWVu
dCk7CiAgICAgfQogCiAgICAgbV9pbnN0cnVtZW50cy5zd2FwKG5ld0luc3RydW1lbnRzKTsKKwor
ICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6aW50ZXJu
YWxTdGFydChjb25zdCBpbnQqIG1heENhbGxTdGFja0RlcHRoKQordm9pZCBJbnNwZWN0b3JUaW1l
bGluZUFnZW50OjppbnRlcm5hbFN0YXJ0KE9wdGlvbmFsPGludD4mJiBtYXhDYWxsU3RhY2tEZXB0
aCkKIHsKICAgICBpZiAobV90cmFja2luZykKICAgICAgICAgcmV0dXJuOwpAQCAtMjkyLDggKzI5
NCw3IEBAIHZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6c3RhcnRGcm9tQ29uc29sZShKU0M6
OkpTR2xvYmFsT2JqZWN0KiBleGVjLCBjb25zdCBTCiAgICAgLy8gQWxsb3cgZHVwbGljYXRlIHVu
bmFtZWQgcHJvZmlsZXMuIERpc2FsbG93IGR1cGxpY2F0ZSBuYW1lZCBwcm9maWxlcy4KICAgICBp
ZiAoIXRpdGxlLmlzRW1wdHkoKSkgewogICAgICAgICBmb3IgKGNvbnN0IFRpbWVsaW5lUmVjb3Jk
RW50cnkmIHJlY29yZCA6IG1fcGVuZGluZ0NvbnNvbGVQcm9maWxlUmVjb3JkcykgewotICAgICAg
ICAgICAgU3RyaW5nIHJlY29yZFRpdGxlOwotICAgICAgICAgICAgcmVjb3JkLmRhdGEtPmdldFN0
cmluZygidGl0bGUiX3MsIHJlY29yZFRpdGxlKTsKKyAgICAgICAgICAgIGF1dG8gcmVjb3JkVGl0
bGUgPSByZWNvcmQuZGF0YS0+Z2V0U3RyaW5nKCJ0aXRsZSJfcyk7CiAgICAgICAgICAgICBpZiAo
cmVjb3JkVGl0bGUgPT0gdGl0bGUpIHsKICAgICAgICAgICAgICAgICBpZiAoYXV0byogY29uc29s
ZUFnZW50ID0gbV9pbnN0cnVtZW50aW5nQWdlbnRzLndlYkNvbnNvbGVBZ2VudCgpKSB7CiAgICAg
ICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBTZW5kIGFuIGVudW0gdG8gdGhlIGZyb250ZW5kIGZv
ciBsb2NhbGl6YXRpb24/CkBAIC0zMTgsOCArMzE5LDcgQEAgdm9pZCBJbnNwZWN0b3JUaW1lbGlu
ZUFnZW50OjpzdG9wRnJvbUNvbnNvbGUoSlNDOjpKU0dsb2JhbE9iamVjdCosIGNvbnN0IFN0cmlu
ZyYKICAgICBmb3IgKGludCBpID0gbV9wZW5kaW5nQ29uc29sZVByb2ZpbGVSZWNvcmRzLnNpemUo
KSAtIDE7IGkgPj0gMDsgLS1pKSB7CiAgICAgICAgIGNvbnN0IFRpbWVsaW5lUmVjb3JkRW50cnkm
IHJlY29yZCA9IG1fcGVuZGluZ0NvbnNvbGVQcm9maWxlUmVjb3Jkc1tpXTsKIAotICAgICAgICBT
dHJpbmcgcmVjb3JkVGl0bGU7Ci0gICAgICAgIHJlY29yZC5kYXRhLT5nZXRTdHJpbmcoInRpdGxl
Il9zLCByZWNvcmRUaXRsZSk7CisgICAgICAgIGF1dG8gcmVjb3JkVGl0bGUgPSByZWNvcmQuZGF0
YS0+Z2V0U3RyaW5nKCJ0aXRsZSJfcyk7CiAgICAgICAgIGlmICh0aXRsZS5pc0VtcHR5KCkgfHwg
cmVjb3JkVGl0bGUgPT0gdGl0bGUpIHsKICAgICAgICAgICAgIGRpZENvbXBsZXRlUmVjb3JkRW50
cnkocmVjb3JkKTsKICAgICAgICAgICAgIG1fcGVuZGluZ0NvbnNvbGVQcm9maWxlUmVjb3Jkcy5y
ZW1vdmUoaSk7CkBAIC00OTYsMTAgKzQ5Niw4IEBAIHZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2Vu
dDo6bWFpbkZyYW1lU3RhcnRlZExvYWRpbmcoKQogICAgIG1fYXV0b0NhcHR1cmVQaGFzZSA9IEF1
dG9DYXB0dXJlUGhhc2U6OkJlZm9yZUxvYWQ7CiAKICAgICAvLyBQcmUtZW1wdGl2ZWx5IGRpc2Fi
bGUgYnJlYWtwb2ludHMuIFRoZSBmcm9udGVuZCBtdXN0IHJlLWVuYWJsZSB0aGVtLgotICAgIGlm
IChhdXRvKiB3ZWJEZWJ1Z2dlckFnZW50ID0gbV9pbnN0cnVtZW50aW5nQWdlbnRzLmVuYWJsZWRX
ZWJEZWJ1Z2dlckFnZW50KCkpIHsKLSAgICAgICAgRXJyb3JTdHJpbmcgaWdub3JlZDsKLSAgICAg
ICAgd2ViRGVidWdnZXJBZ2VudC0+c2V0QnJlYWtwb2ludHNBY3RpdmUoaWdub3JlZCwgZmFsc2Up
OwotICAgIH0KKyAgICBpZiAoYXV0byogd2ViRGVidWdnZXJBZ2VudCA9IG1faW5zdHJ1bWVudGlu
Z0FnZW50cy5lbmFibGVkV2ViRGVidWdnZXJBZ2VudCgpKQorICAgICAgICB3ZWJEZWJ1Z2dlckFn
ZW50LT5zZXRCcmVha3BvaW50c0FjdGl2ZShmYWxzZSk7CiAKICAgICAvLyBJbmZvcm0gdGhlIGZy
b250ZW5kIHdlIHN0YXJ0ZWQgYW4gYXV0byBjYXB0dXJlLiBUaGUgZnJvbnRlbmQgbXVzdCBzdG9w
IGNhcHR1cmUuCiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPmF1dG9DYXB0dXJlU3RhcnRlZCgp
OwpAQCAtNTIzLDEwICs1MjEsOCBAQCB2b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OnN0YXJ0
UHJvZ3JhbW1hdGljQ2FwdHVyZSgpCiAgICAgLy8gRGlzYWJsZSBicmVha3BvaW50cyBkdXJpbmcg
cHJvZ3JhbW1hdGljIGNhcHR1cmUuCiAgICAgaWYgKGF1dG8qIHdlYkRlYnVnZ2VyQWdlbnQgPSBt
X2luc3RydW1lbnRpbmdBZ2VudHMuZW5hYmxlZFdlYkRlYnVnZ2VyQWdlbnQoKSkgewogICAgICAg
ICBtX3Byb2dyYW1tYXRpY0NhcHR1cmVSZXN0b3JlQnJlYWtwb2ludEFjdGl2ZVZhbHVlID0gd2Vi
RGVidWdnZXJBZ2VudC0+YnJlYWtwb2ludHNBY3RpdmUoKTsKLSAgICAgICAgaWYgKG1fcHJvZ3Jh
bW1hdGljQ2FwdHVyZVJlc3RvcmVCcmVha3BvaW50QWN0aXZlVmFsdWUpIHsKLSAgICAgICAgICAg
IEVycm9yU3RyaW5nIGlnbm9yZWQ7Ci0gICAgICAgICAgICB3ZWJEZWJ1Z2dlckFnZW50LT5zZXRC
cmVha3BvaW50c0FjdGl2ZShpZ25vcmVkLCBmYWxzZSk7Ci0gICAgICAgIH0KKyAgICAgICAgaWYg
KG1fcHJvZ3JhbW1hdGljQ2FwdHVyZVJlc3RvcmVCcmVha3BvaW50QWN0aXZlVmFsdWUpCisgICAg
ICAgICAgICB3ZWJEZWJ1Z2dlckFnZW50LT5zZXRCcmVha3BvaW50c0FjdGl2ZShmYWxzZSk7CiAg
ICAgfSBlbHNlCiAgICAgICAgIG1fcHJvZ3JhbW1hdGljQ2FwdHVyZVJlc3RvcmVCcmVha3BvaW50
QWN0aXZlVmFsdWUgPSBmYWxzZTsKIApAQCAtNTQ2LDEwICs1NDIsOCBAQCB2b2lkIEluc3BlY3Rv
clRpbWVsaW5lQWdlbnQ6OnN0b3BQcm9ncmFtbWF0aWNDYXB0dXJlKCkKIAogICAgIC8vIFJlLWVu
YWJsZSBicmVha3BvaW50cyBpZiB0aGV5IHdlcmUgZW5hYmxlZC4KICAgICBpZiAobV9wcm9ncmFt
bWF0aWNDYXB0dXJlUmVzdG9yZUJyZWFrcG9pbnRBY3RpdmVWYWx1ZSkgewotICAgICAgICBpZiAo
YXV0byogd2ViRGVidWdnZXJBZ2VudCA9IG1faW5zdHJ1bWVudGluZ0FnZW50cy5lbmFibGVkV2Vi
RGVidWdnZXJBZ2VudCgpKSB7Ci0gICAgICAgICAgICBFcnJvclN0cmluZyBpZ25vcmVkOwotICAg
ICAgICAgICAgd2ViRGVidWdnZXJBZ2VudC0+c2V0QnJlYWtwb2ludHNBY3RpdmUoaWdub3JlZCwg
dHJ1ZSk7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKGF1dG8qIHdlYkRlYnVnZ2VyQWdlbnQgPSBt
X2luc3RydW1lbnRpbmdBZ2VudHMuZW5hYmxlZFdlYkRlYnVnZ2VyQWdlbnQoKSkKKyAgICAgICAg
ICAgIHdlYkRlYnVnZ2VyQWdlbnQtPnNldEJyZWFrcG9pbnRzQWN0aXZlKHRydWUpOwogICAgIH0K
IH0KIApAQCAtNTU3LDI2ICs1NTEsMjYgQEAgdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50Ojp0
b2dnbGVJbnN0cnVtZW50cyhJbnN0cnVtZW50U3RhdGUgc3RhdGUpCiB7CiAgICAgZm9yIChhdXRv
IGluc3RydW1lbnRUeXBlIDogbV9pbnN0cnVtZW50cykgewogICAgICAgICBzd2l0Y2ggKGluc3Ry
dW1lbnRUeXBlKSB7Ci0gICAgICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6VGltZWxpbmU6
Okluc3RydW1lbnQ6OlNjcmlwdFByb2ZpbGVyOiB7CisgICAgICAgIGNhc2UgUHJvdG9jb2w6OlRp
bWVsaW5lOjpJbnN0cnVtZW50OjpTY3JpcHRQcm9maWxlcjogewogICAgICAgICAgICAgdG9nZ2xl
U2NyaXB0UHJvZmlsZXJJbnN0cnVtZW50KHN0YXRlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9Ci0gICAgICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6VGltZWxpbmU6Okluc3Ry
dW1lbnQ6OkhlYXA6IHsKKyAgICAgICAgY2FzZSBQcm90b2NvbDo6VGltZWxpbmU6Okluc3RydW1l
bnQ6OkhlYXA6IHsKICAgICAgICAgICAgIHRvZ2dsZUhlYXBJbnN0cnVtZW50KHN0YXRlKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90
b2NvbDo6VGltZWxpbmU6Okluc3RydW1lbnQ6OkNQVTogeworICAgICAgICBjYXNlIFByb3RvY29s
OjpUaW1lbGluZTo6SW5zdHJ1bWVudDo6Q1BVOiB7CiAgICAgICAgICAgICB0b2dnbGVDUFVJbnN0
cnVtZW50KHN0YXRlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGNh
c2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6VGltZWxpbmU6Okluc3RydW1lbnQ6Ok1lbW9yeTogewor
ICAgICAgICBjYXNlIFByb3RvY29sOjpUaW1lbGluZTo6SW5zdHJ1bWVudDo6TWVtb3J5OiB7CiAg
ICAgICAgICAgICB0b2dnbGVNZW1vcnlJbnN0cnVtZW50KHN0YXRlKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9Ci0gICAgICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6VGltZWxp
bmU6Okluc3RydW1lbnQ6OlRpbWVsaW5lOgorICAgICAgICBjYXNlIFByb3RvY29sOjpUaW1lbGlu
ZTo6SW5zdHJ1bWVudDo6VGltZWxpbmU6CiAgICAgICAgICAgICB0b2dnbGVUaW1lbGluZUluc3Ry
dW1lbnQoc3RhdGUpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW5zcGVjdG9y
OjpQcm90b2NvbDo6VGltZWxpbmU6Okluc3RydW1lbnQ6OkFuaW1hdGlvbjoKKyAgICAgICAgY2Fz
ZSBQcm90b2NvbDo6VGltZWxpbmU6Okluc3RydW1lbnQ6OkFuaW1hdGlvbjoKICAgICAgICAgICAg
IHRvZ2dsZUFuaW1hdGlvbkluc3RydW1lbnQoc3RhdGUpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KQEAgLTU4NiwyNCArNTgwLDIxIEBAIHZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2Vu
dDo6dG9nZ2xlSW5zdHJ1bWVudHMoSW5zdHJ1bWVudFN0YXRlIHN0YXRlKQogdm9pZCBJbnNwZWN0
b3JUaW1lbGluZUFnZW50Ojp0b2dnbGVTY3JpcHRQcm9maWxlckluc3RydW1lbnQoSW5zdHJ1bWVu
dFN0YXRlIHN0YXRlKQogewogICAgIGlmIChhdXRvKiBzY3JpcHRQcm9maWxlckFnZW50ID0gbV9p
bnN0cnVtZW50aW5nQWdlbnRzLnBlcnNpc3RlbnRTY3JpcHRQcm9maWxlckFnZW50KCkpIHsKLSAg
ICAgICAgRXJyb3JTdHJpbmcgaWdub3JlZDsKLSAgICAgICAgaWYgKHN0YXRlID09IEluc3RydW1l
bnRTdGF0ZTo6U3RhcnQpIHsKLSAgICAgICAgICAgIGNvbnN0IGJvb2wgaW5jbHVkZVNhbXBsZXMg
PSB0cnVlOwotICAgICAgICAgICAgc2NyaXB0UHJvZmlsZXJBZ2VudC0+c3RhcnRUcmFja2luZyhp
Z25vcmVkLCAmaW5jbHVkZVNhbXBsZXMpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHNj
cmlwdFByb2ZpbGVyQWdlbnQtPnN0b3BUcmFja2luZyhpZ25vcmVkKTsKKyAgICAgICAgaWYgKHN0
YXRlID09IEluc3RydW1lbnRTdGF0ZTo6U3RhcnQpCisgICAgICAgICAgICBzY3JpcHRQcm9maWxl
ckFnZW50LT5zdGFydFRyYWNraW5nKHRydWUpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBz
Y3JpcHRQcm9maWxlckFnZW50LT5zdG9wVHJhY2tpbmcoKTsKICAgICB9CiB9CiAKIHZvaWQgSW5z
cGVjdG9yVGltZWxpbmVBZ2VudDo6dG9nZ2xlSGVhcEluc3RydW1lbnQoSW5zdHJ1bWVudFN0YXRl
IHN0YXRlKQogewogICAgIGlmIChhdXRvKiBoZWFwQWdlbnQgPSBtX2luc3RydW1lbnRpbmdBZ2Vu
dHMuZW5hYmxlZFBhZ2VIZWFwQWdlbnQoKSkgewotICAgICAgICBFcnJvclN0cmluZyBpZ25vcmVk
OwogICAgICAgICBpZiAoc3RhdGUgPT0gSW5zdHJ1bWVudFN0YXRlOjpTdGFydCkgewogICAgICAg
ICAgICAgaWYgKG1fYXV0b0NhcHR1cmVQaGFzZSA9PSBBdXRvQ2FwdHVyZVBoYXNlOjpOb25lIHx8
IG1fYXV0b0NhcHR1cmVQaGFzZSA9PSBBdXRvQ2FwdHVyZVBoYXNlOjpGaXJzdE5hdmlnYXRpb24p
Ci0gICAgICAgICAgICAgICAgaGVhcEFnZW50LT5zdGFydFRyYWNraW5nKGlnbm9yZWQpOworICAg
ICAgICAgICAgICAgIGhlYXBBZ2VudC0+c3RhcnRUcmFja2luZygpOwogICAgICAgICB9IGVsc2UK
LSAgICAgICAgICAgIGhlYXBBZ2VudC0+c3RvcFRyYWNraW5nKGlnbm9yZWQpOworICAgICAgICAg
ICAgaGVhcEFnZW50LT5zdG9wVHJhY2tpbmcoKTsKICAgICB9CiB9CiAKQEAgLTYxMSwxMSArNjAy
LDEwIEBAIHZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6dG9nZ2xlQ1BVSW5zdHJ1bWVudChJ
bnN0cnVtZW50U3RhdGUgc3RhdGUpCiB7CiAjaWYgRU5BQkxFKFJFU09VUkNFX1VTQUdFKQogICAg
IGlmIChhdXRvKiBjcHVQcm9maWxlckFnZW50ID0gbV9pbnN0cnVtZW50aW5nQWdlbnRzLnBlcnNp
c3RlbnRDUFVQcm9maWxlckFnZW50KCkpIHsKLSAgICAgICAgRXJyb3JTdHJpbmcgaWdub3JlZDsK
ICAgICAgICAgaWYgKHN0YXRlID09IEluc3RydW1lbnRTdGF0ZTo6U3RhcnQpCi0gICAgICAgICAg
ICBjcHVQcm9maWxlckFnZW50LT5zdGFydFRyYWNraW5nKGlnbm9yZWQpOworICAgICAgICAgICAg
Y3B1UHJvZmlsZXJBZ2VudC0+c3RhcnRUcmFja2luZygpOwogICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBjcHVQcm9maWxlckFnZW50LT5zdG9wVHJhY2tpbmcoaWdub3JlZCk7CisgICAgICAgICAg
ICBjcHVQcm9maWxlckFnZW50LT5zdG9wVHJhY2tpbmcoKTsKICAgICB9CiAjZWxzZQogICAgIFVO
VVNFRF9QQVJBTShzdGF0ZSk7CkBAIC02MjYsMTEgKzYxNiwxMCBAQCB2b2lkIEluc3BlY3RvclRp
bWVsaW5lQWdlbnQ6OnRvZ2dsZU1lbW9yeUluc3RydW1lbnQoSW5zdHJ1bWVudFN0YXRlIHN0YXRl
KQogewogI2lmIEVOQUJMRShSRVNPVVJDRV9VU0FHRSkKICAgICBpZiAoYXV0byogbWVtb3J5QWdl
bnQgPSBtX2luc3RydW1lbnRpbmdBZ2VudHMucGVyc2lzdGVudE1lbW9yeUFnZW50KCkpIHsKLSAg
ICAgICAgRXJyb3JTdHJpbmcgaWdub3JlZDsKICAgICAgICAgaWYgKHN0YXRlID09IEluc3RydW1l
bnRTdGF0ZTo6U3RhcnQpCi0gICAgICAgICAgICBtZW1vcnlBZ2VudC0+c3RhcnRUcmFja2luZyhp
Z25vcmVkKTsKKyAgICAgICAgICAgIG1lbW9yeUFnZW50LT5zdGFydFRyYWNraW5nKCk7CiAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIG1lbW9yeUFnZW50LT5zdG9wVHJhY2tpbmcoaWdub3JlZCk7
CisgICAgICAgICAgICBtZW1vcnlBZ2VudC0+c3RvcFRyYWNraW5nKCk7CiAgICAgfQogI2Vsc2UK
ICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtNjQwLDcgKzYyOSw3IEBAIHZvaWQgSW5zcGVj
dG9yVGltZWxpbmVBZ2VudDo6dG9nZ2xlTWVtb3J5SW5zdHJ1bWVudChJbnN0cnVtZW50U3RhdGUg
c3RhdGUpCiB2b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OnRvZ2dsZVRpbWVsaW5lSW5zdHJ1
bWVudChJbnN0cnVtZW50U3RhdGUgc3RhdGUpCiB7CiAgICAgaWYgKHN0YXRlID09IEluc3RydW1l
bnRTdGF0ZTo6U3RhcnQpCi0gICAgICAgIGludGVybmFsU3RhcnQoKTsKKyAgICAgICAgaW50ZXJu
YWxTdGFydChXVEY6Om51bGxvcHQpOwogICAgIGVsc2UKICAgICAgICAgaW50ZXJuYWxTdG9wKCk7
CiB9CkBAIC02NDgsMTEgKzYzNywxMCBAQCB2b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OnRv
Z2dsZVRpbWVsaW5lSW5zdHJ1bWVudChJbnN0cnVtZW50U3RhdGUgc3RhdGUpCiB2b2lkIEluc3Bl
Y3RvclRpbWVsaW5lQWdlbnQ6OnRvZ2dsZUFuaW1hdGlvbkluc3RydW1lbnQoSW5zdHJ1bWVudFN0
YXRlIHN0YXRlKQogewogICAgIGlmIChhdXRvKiBhbmltYXRpb25BZ2VudCA9IG1faW5zdHJ1bWVu
dGluZ0FnZW50cy5wZXJzaXN0ZW50QW5pbWF0aW9uQWdlbnQoKSkgewotICAgICAgICBFcnJvclN0
cmluZyBpZ25vcmVkOwogICAgICAgICBpZiAoc3RhdGUgPT0gSW5zdHJ1bWVudFN0YXRlOjpTdGFy
dCkKLSAgICAgICAgICAgIGFuaW1hdGlvbkFnZW50LT5zdGFydFRyYWNraW5nKGlnbm9yZWQpOwor
ICAgICAgICAgICAgYW5pbWF0aW9uQWdlbnQtPnN0YXJ0VHJhY2tpbmcoKTsKICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgYW5pbWF0aW9uQWdlbnQtPnN0b3BUcmFja2luZyhpZ25vcmVkKTsKKyAg
ICAgICAgICAgIGFuaW1hdGlvbkFnZW50LT5zdG9wVHJhY2tpbmcoKTsKICAgICB9CiB9CiAKQEAg
LTY5MSw3MSArNjc5LDcxIEBAIHZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6YnJlYWtwb2lu
dEFjdGlvblByb2JlKEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHCiAgICAgYXBwZW5kUmVj
b3JkKFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlUHJvYmVTYW1wbGVEYXRhKGFjdGlvbklE
LCBzYW1wbGVJZCksIFRpbWVsaW5lUmVjb3JkVHlwZTo6UHJvYmVTYW1wbGUsIGZhbHNlLCBmcmFt
ZUZyb21FeGVjU3RhdGUobGV4aWNhbEdsb2JhbE9iamVjdCkpOwogfQogCi1zdGF0aWMgSW5zcGVj
dG9yOjpQcm90b2NvbDo6VGltZWxpbmU6OkV2ZW50VHlwZSB0b1Byb3RvY29sKFRpbWVsaW5lUmVj
b3JkVHlwZSB0eXBlKQorc3RhdGljIFByb3RvY29sOjpUaW1lbGluZTo6RXZlbnRUeXBlIHRvUHJv
dG9jb2woVGltZWxpbmVSZWNvcmRUeXBlIHR5cGUpCiB7CiAgICAgc3dpdGNoICh0eXBlKSB7CiAg
ICAgY2FzZSBUaW1lbGluZVJlY29yZFR5cGU6OkV2ZW50RGlzcGF0Y2g6Ci0gICAgICAgIHJldHVy
biBJbnNwZWN0b3I6OlByb3RvY29sOjpUaW1lbGluZTo6RXZlbnRUeXBlOjpFdmVudERpc3BhdGNo
OworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OlRpbWVsaW5lOjpFdmVudFR5cGU6OkV2ZW50RGlz
cGF0Y2g7CiAgICAgY2FzZSBUaW1lbGluZVJlY29yZFR5cGU6OlNjaGVkdWxlU3R5bGVSZWNhbGN1
bGF0aW9uOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6VGltZWxpbmU6OkV2
ZW50VHlwZTo6U2NoZWR1bGVTdHlsZVJlY2FsY3VsYXRpb247CisgICAgICAgIHJldHVybiBQcm90
b2NvbDo6VGltZWxpbmU6OkV2ZW50VHlwZTo6U2NoZWR1bGVTdHlsZVJlY2FsY3VsYXRpb247CiAg
ICAgY2FzZSBUaW1lbGluZVJlY29yZFR5cGU6OlJlY2FsY3VsYXRlU3R5bGVzOgotICAgICAgICBy
ZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6VGltZWxpbmU6OkV2ZW50VHlwZTo6UmVjYWxjdWxh
dGVTdHlsZXM7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6VGltZWxpbmU6OkV2ZW50VHlwZTo6
UmVjYWxjdWxhdGVTdHlsZXM7CiAgICAgY2FzZSBUaW1lbGluZVJlY29yZFR5cGU6OkludmFsaWRh
dGVMYXlvdXQ6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpUaW1lbGluZTo6
RXZlbnRUeXBlOjpJbnZhbGlkYXRlTGF5b3V0OworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OlRp
bWVsaW5lOjpFdmVudFR5cGU6OkludmFsaWRhdGVMYXlvdXQ7CiAgICAgY2FzZSBUaW1lbGluZVJl
Y29yZFR5cGU6OkxheW91dDoKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRp
bWVsaW5lOjpFdmVudFR5cGU6OkxheW91dDsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpUaW1l
bGluZTo6RXZlbnRUeXBlOjpMYXlvdXQ7CiAgICAgY2FzZSBUaW1lbGluZVJlY29yZFR5cGU6OlBh
aW50OgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6VGltZWxpbmU6OkV2ZW50
VHlwZTo6UGFpbnQ7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6VGltZWxpbmU6OkV2ZW50VHlw
ZTo6UGFpbnQ7CiAgICAgY2FzZSBUaW1lbGluZVJlY29yZFR5cGU6OkNvbXBvc2l0ZToKLSAgICAg
ICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRpbWVsaW5lOjpFdmVudFR5cGU6OkNvbXBv
c2l0ZTsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpUaW1lbGluZTo6RXZlbnRUeXBlOjpDb21w
b3NpdGU7CiAgICAgY2FzZSBUaW1lbGluZVJlY29yZFR5cGU6OlJlbmRlcmluZ0ZyYW1lOgotICAg
ICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6VGltZWxpbmU6OkV2ZW50VHlwZTo6UmVu
ZGVyaW5nRnJhbWU7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6VGltZWxpbmU6OkV2ZW50VHlw
ZTo6UmVuZGVyaW5nRnJhbWU7CiAKICAgICBjYXNlIFRpbWVsaW5lUmVjb3JkVHlwZTo6VGltZXJJ
bnN0YWxsOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6VGltZWxpbmU6OkV2
ZW50VHlwZTo6VGltZXJJbnN0YWxsOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OlRpbWVsaW5l
OjpFdmVudFR5cGU6OlRpbWVySW5zdGFsbDsKICAgICBjYXNlIFRpbWVsaW5lUmVjb3JkVHlwZTo6
VGltZXJSZW1vdmU6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpUaW1lbGlu
ZTo6RXZlbnRUeXBlOjpUaW1lclJlbW92ZTsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpUaW1l
bGluZTo6RXZlbnRUeXBlOjpUaW1lclJlbW92ZTsKICAgICBjYXNlIFRpbWVsaW5lUmVjb3JkVHlw
ZTo6VGltZXJGaXJlOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6VGltZWxp
bmU6OkV2ZW50VHlwZTo6VGltZXJGaXJlOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OlRpbWVs
aW5lOjpFdmVudFR5cGU6OlRpbWVyRmlyZTsKIAogICAgIGNhc2UgVGltZWxpbmVSZWNvcmRUeXBl
OjpFdmFsdWF0ZVNjcmlwdDoKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRp
bWVsaW5lOjpFdmVudFR5cGU6OkV2YWx1YXRlU2NyaXB0OworICAgICAgICByZXR1cm4gUHJvdG9j
b2w6OlRpbWVsaW5lOjpFdmVudFR5cGU6OkV2YWx1YXRlU2NyaXB0OwogCiAgICAgY2FzZSBUaW1l
bGluZVJlY29yZFR5cGU6OlRpbWVTdGFtcDoKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJv
dG9jb2w6OlRpbWVsaW5lOjpFdmVudFR5cGU6OlRpbWVTdGFtcDsKKyAgICAgICAgcmV0dXJuIFBy
b3RvY29sOjpUaW1lbGluZTo6RXZlbnRUeXBlOjpUaW1lU3RhbXA7CiAgICAgY2FzZSBUaW1lbGlu
ZVJlY29yZFR5cGU6OlRpbWU6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpU
aW1lbGluZTo6RXZlbnRUeXBlOjpUaW1lOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OlRpbWVs
aW5lOjpFdmVudFR5cGU6OlRpbWU7CiAgICAgY2FzZSBUaW1lbGluZVJlY29yZFR5cGU6OlRpbWVF
bmQ6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpUaW1lbGluZTo6RXZlbnRU
eXBlOjpUaW1lRW5kOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OlRpbWVsaW5lOjpFdmVudFR5
cGU6OlRpbWVFbmQ7CiAKICAgICBjYXNlIFRpbWVsaW5lUmVjb3JkVHlwZTo6RnVuY3Rpb25DYWxs
OgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6VGltZWxpbmU6OkV2ZW50VHlw
ZTo6RnVuY3Rpb25DYWxsOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OlRpbWVsaW5lOjpFdmVu
dFR5cGU6OkZ1bmN0aW9uQ2FsbDsKICAgICBjYXNlIFRpbWVsaW5lUmVjb3JkVHlwZTo6UHJvYmVT
YW1wbGU6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpUaW1lbGluZTo6RXZl
bnRUeXBlOjpQcm9iZVNhbXBsZTsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpUaW1lbGluZTo6
RXZlbnRUeXBlOjpQcm9iZVNhbXBsZTsKICAgICBjYXNlIFRpbWVsaW5lUmVjb3JkVHlwZTo6Q29u
c29sZVByb2ZpbGU6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpUaW1lbGlu
ZTo6RXZlbnRUeXBlOjpDb25zb2xlUHJvZmlsZTsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpU
aW1lbGluZTo6RXZlbnRUeXBlOjpDb25zb2xlUHJvZmlsZTsKIAogICAgIGNhc2UgVGltZWxpbmVS
ZWNvcmRUeXBlOjpSZXF1ZXN0QW5pbWF0aW9uRnJhbWU6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0
b3I6OlByb3RvY29sOjpUaW1lbGluZTo6RXZlbnRUeXBlOjpSZXF1ZXN0QW5pbWF0aW9uRnJhbWU7
CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6VGltZWxpbmU6OkV2ZW50VHlwZTo6UmVxdWVzdEFu
aW1hdGlvbkZyYW1lOwogICAgIGNhc2UgVGltZWxpbmVSZWNvcmRUeXBlOjpDYW5jZWxBbmltYXRp
b25GcmFtZToKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRpbWVsaW5lOjpF
dmVudFR5cGU6OkNhbmNlbEFuaW1hdGlvbkZyYW1lOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6
OlRpbWVsaW5lOjpFdmVudFR5cGU6OkNhbmNlbEFuaW1hdGlvbkZyYW1lOwogICAgIGNhc2UgVGlt
ZWxpbmVSZWNvcmRUeXBlOjpGaXJlQW5pbWF0aW9uRnJhbWU6Ci0gICAgICAgIHJldHVybiBJbnNw
ZWN0b3I6OlByb3RvY29sOjpUaW1lbGluZTo6RXZlbnRUeXBlOjpGaXJlQW5pbWF0aW9uRnJhbWU7
CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6VGltZWxpbmU6OkV2ZW50VHlwZTo6RmlyZUFuaW1h
dGlvbkZyYW1lOwogCiAgICAgY2FzZSBUaW1lbGluZVJlY29yZFR5cGU6Ok9ic2VydmVyQ2FsbGJh
Y2s6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpUaW1lbGluZTo6RXZlbnRU
eXBlOjpPYnNlcnZlckNhbGxiYWNrOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OlRpbWVsaW5l
OjpFdmVudFR5cGU6Ok9ic2VydmVyQ2FsbGJhY2s7CiAgICAgfQogCi0gICAgcmV0dXJuIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlRpbWVsaW5lOjpFdmVudFR5cGU6OlRpbWVTdGFtcDsKKyAgICByZXR1
cm4gUHJvdG9jb2w6OlRpbWVsaW5lOjpFdmVudFR5cGU6OlRpbWVTdGFtcDsKIH0KIAotdm9pZCBJ
bnNwZWN0b3JUaW1lbGluZUFnZW50OjphZGRSZWNvcmRUb1RpbWVsaW5lKFJlZlB0cjxKU09OOjpP
YmplY3Q+JiYgcmVjb3JkLCBUaW1lbGluZVJlY29yZFR5cGUgdHlwZSkKK3ZvaWQgSW5zcGVjdG9y
VGltZWxpbmVBZ2VudDo6YWRkUmVjb3JkVG9UaW1lbGluZShSZWY8SlNPTjo6T2JqZWN0PiYmIHJl
Y29yZCwgVGltZWxpbmVSZWNvcmRUeXBlIHR5cGUpCiB7Ci0gICAgQVNTRVJUX0FSRyhyZWNvcmQs
IHJlY29yZCk7Ci0gICAgcmVjb3JkLT5zZXRTdHJpbmcoInR5cGUiLCBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpJbnNwZWN0b3JIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZSh0b1Byb3RvY29sKHR5
cGUpKSk7CisgICAgcmVjb3JkLT5zZXRTdHJpbmcoUHJvdG9jb2w6OlRpbWVsaW5lOjpUaW1lbGlu
ZUV2ZW50Ojp0eXBlS2V5LCBQcm90b2NvbDo6SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUo
dG9Qcm90b2NvbCh0eXBlKSkpOwogCiAgICAgaWYgKG1fcmVjb3JkU3RhY2suaXNFbXB0eSgpKSB7
Ci0gICAgICAgIGF1dG8gcmVjb3JkT2JqZWN0ID0gQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlBy
b3RvY29sOjpUaW1lbGluZTo6VGltZWxpbmVFdmVudD46OnJ1bnRpbWVDYXN0KFdURk1vdmUocmVj
b3JkKSk7CisgICAgICAgIC8vIEZJWE1FOiBydW50aW1lQ2FzdCBpcyBhIGhhY2suIFdlIGRvIGl0
IGJlY2F1c2Ugd2UgY2FuJ3QgYnVpbGQgVGltZWxpbmVFdmVudCBkaXJlY3RseSBub3cuCisgICAg
ICAgIGF1dG8gcmVjb3JkT2JqZWN0ID0gUHJvdG9jb2w6OkJpbmRpbmdUcmFpdHM8UHJvdG9jb2w6
OlRpbWVsaW5lOjpUaW1lbGluZUV2ZW50Pjo6cnVudGltZUNhc3QoV1RGTW92ZShyZWNvcmQpKTsK
ICAgICAgICAgc2VuZEV2ZW50KFdURk1vdmUocmVjb3JkT2JqZWN0KSk7CiAgICAgfSBlbHNlIHsK
ICAgICAgICAgY29uc3QgVGltZWxpbmVSZWNvcmRFbnRyeSYgcGFyZW50ID0gbV9yZWNvcmRTdGFj
ay5sYXN0KCk7CkBAIC03ODEsOCArNzY5LDkgQEAgdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50
OjpzZXRGcmFtZUlkZW50aWZpZXIoSlNPTjo6T2JqZWN0KiByZWNvcmQsIEZyYW1lKiBmcmEKIAog
dm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpkaWRDb21wbGV0ZVJlY29yZEVudHJ5KGNvbnN0
IFRpbWVsaW5lUmVjb3JkRW50cnkmIGVudHJ5KQogewotICAgIGVudHJ5LnJlY29yZC0+c2V0T2Jq
ZWN0KCJkYXRhIl9zLCBlbnRyeS5kYXRhKTsKLSAgICBlbnRyeS5yZWNvcmQtPnNldEFycmF5KCJj
aGlsZHJlbiJfcywgZW50cnkuY2hpbGRyZW4pOworICAgIGVudHJ5LnJlY29yZC0+c2V0T2JqZWN0
KFByb3RvY29sOjpUaW1lbGluZTo6VGltZWxpbmVFdmVudDo6ZGF0YUtleSwgZW50cnkuZGF0YS5j
b3B5UmVmKCkpOworICAgIGlmIChlbnRyeS5jaGlsZHJlbikKKyAgICAgICAgZW50cnkucmVjb3Jk
LT5zZXRBcnJheShQcm90b2NvbDo6VGltZWxpbmU6OlRpbWVsaW5lRXZlbnQ6OmNoaWxkcmVuS2V5
LCAqZW50cnkuY2hpbGRyZW4pOwogICAgIGVudHJ5LnJlY29yZC0+c2V0RG91YmxlKCJlbmRUaW1l
Il9zLCB0aW1lc3RhbXAoKSk7CiAgICAgYWRkUmVjb3JkVG9UaW1lbGluZShlbnRyeS5yZWNvcmQu
Y29weVJlZigpLCBlbnRyeS50eXBlKTsKIH0KQEAgLTgwNCwyOSArNzkzLDI5IEBAIHZvaWQgSW5z
cGVjdG9yVGltZWxpbmVBZ2VudDo6ZGlkQ29tcGxldGVDdXJyZW50UmVjb3JkKFRpbWVsaW5lUmVj
b3JkVHlwZSB0eXBlKQogICAgIH0KIH0KIAotdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50Ojph
cHBlbmRSZWNvcmQoUmVmUHRyPEpTT046Ok9iamVjdD4mJiBkYXRhLCBUaW1lbGluZVJlY29yZFR5
cGUgdHlwZSwgYm9vbCBjYXB0dXJlQ2FsbFN0YWNrLCBGcmFtZSogZnJhbWUpCit2b2lkIEluc3Bl
Y3RvclRpbWVsaW5lQWdlbnQ6OmFwcGVuZFJlY29yZChSZWY8SlNPTjo6T2JqZWN0PiYmIGRhdGEs
IFRpbWVsaW5lUmVjb3JkVHlwZSB0eXBlLCBib29sIGNhcHR1cmVDYWxsU3RhY2ssIEZyYW1lKiBm
cmFtZSkKIHsKICAgICBSZWY8SlNPTjo6T2JqZWN0PiByZWNvcmQgPSBUaW1lbGluZVJlY29yZEZh
Y3Rvcnk6OmNyZWF0ZUdlbmVyaWNSZWNvcmQodGltZXN0YW1wKCksIGNhcHR1cmVDYWxsU3RhY2sg
PyBtX21heENhbGxTdGFja0RlcHRoIDogMCk7Ci0gICAgcmVjb3JkLT5zZXRPYmplY3QoImRhdGEi
LCBXVEZNb3ZlKGRhdGEpKTsKKyAgICByZWNvcmQtPnNldE9iamVjdChQcm90b2NvbDo6VGltZWxp
bmU6OlRpbWVsaW5lRXZlbnQ6OmRhdGFLZXksIFdURk1vdmUoZGF0YSkpOwogICAgIHNldEZyYW1l
SWRlbnRpZmllcigmcmVjb3JkLmdldCgpLCBmcmFtZSk7CiAgICAgYWRkUmVjb3JkVG9UaW1lbGlu
ZShXVEZNb3ZlKHJlY29yZCksIHR5cGUpOwogfQogCi12b2lkIEluc3BlY3RvclRpbWVsaW5lQWdl
bnQ6OnNlbmRFdmVudChSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIGV2ZW50KQordm9pZCBJbnNwZWN0
b3JUaW1lbGluZUFnZW50OjpzZW5kRXZlbnQoUmVmPEpTT046Ok9iamVjdD4mJiBldmVudCkKIHsK
ICAgICAvLyBGSVhNRTogcnVudGltZUNhc3QgaXMgYSBoYWNrLiBXZSBkbyBpdCBiZWNhdXNlIHdl
IGNhbid0IGJ1aWxkIFRpbWVsaW5lRXZlbnQgZGlyZWN0bHkgbm93LgotICAgIGF1dG8gcmVjb3Jk
Q2hlY2tlZCA9IEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGltZWxpbmU6OlRp
bWVsaW5lRXZlbnQ+OjpydW50aW1lQ2FzdChXVEZNb3ZlKGV2ZW50KSk7CisgICAgYXV0byByZWNv
cmRDaGVja2VkID0gUHJvdG9jb2w6OkJpbmRpbmdUcmFpdHM8UHJvdG9jb2w6OlRpbWVsaW5lOjpU
aW1lbGluZUV2ZW50Pjo6cnVudGltZUNhc3QoV1RGTW92ZShldmVudCkpOwogICAgIG1fZnJvbnRl
bmREaXNwYXRjaGVyLT5ldmVudFJlY29yZGVkKFdURk1vdmUocmVjb3JkQ2hlY2tlZCkpOwogfQog
Ci1JbnNwZWN0b3JUaW1lbGluZUFnZW50OjpUaW1lbGluZVJlY29yZEVudHJ5IEluc3BlY3RvclRp
bWVsaW5lQWdlbnQ6OmNyZWF0ZVJlY29yZEVudHJ5KFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgZGF0
YSwgVGltZWxpbmVSZWNvcmRUeXBlIHR5cGUsIGJvb2wgY2FwdHVyZUNhbGxTdGFjaywgRnJhbWUq
IGZyYW1lKQorSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6VGltZWxpbmVSZWNvcmRFbnRyeSBJbnNw
ZWN0b3JUaW1lbGluZUFnZW50OjpjcmVhdGVSZWNvcmRFbnRyeShSZWY8SlNPTjo6T2JqZWN0PiYm
IGRhdGEsIFRpbWVsaW5lUmVjb3JkVHlwZSB0eXBlLCBib29sIGNhcHR1cmVDYWxsU3RhY2ssIEZy
YW1lKiBmcmFtZSkKIHsKICAgICBSZWY8SlNPTjo6T2JqZWN0PiByZWNvcmQgPSBUaW1lbGluZVJl
Y29yZEZhY3Rvcnk6OmNyZWF0ZUdlbmVyaWNSZWNvcmQodGltZXN0YW1wKCksIGNhcHR1cmVDYWxs
U3RhY2sgPyBtX21heENhbGxTdGFja0RlcHRoIDogMCk7CiAgICAgc2V0RnJhbWVJZGVudGlmaWVy
KCZyZWNvcmQuZ2V0KCksIGZyYW1lKTsKICAgICByZXR1cm4gVGltZWxpbmVSZWNvcmRFbnRyeShX
VEZNb3ZlKHJlY29yZCksIFdURk1vdmUoZGF0YSksIEpTT046OkFycmF5OjpjcmVhdGUoKSwgdHlw
ZSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6cHVzaEN1cnJlbnRSZWNvcmQo
UmVmUHRyPEpTT046Ok9iamVjdD4mJiBkYXRhLCBUaW1lbGluZVJlY29yZFR5cGUgdHlwZSwgYm9v
bCBjYXB0dXJlQ2FsbFN0YWNrLCBGcmFtZSogZnJhbWUpCit2b2lkIEluc3BlY3RvclRpbWVsaW5l
QWdlbnQ6OnB1c2hDdXJyZW50UmVjb3JkKFJlZjxKU09OOjpPYmplY3Q+JiYgZGF0YSwgVGltZWxp
bmVSZWNvcmRUeXBlIHR5cGUsIGJvb2wgY2FwdHVyZUNhbGxTdGFjaywgRnJhbWUqIGZyYW1lKQog
ewogICAgIHB1c2hDdXJyZW50UmVjb3JkKGNyZWF0ZVJlY29yZEVudHJ5KFdURk1vdmUoZGF0YSks
IHR5cGUsIGNhcHR1cmVDYWxsU3RhY2ssIGZyYW1lKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclRpbWVsaW5lQWdlbnQuaCBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5oCmluZGV4
IGFlNzU3OWExNWYwNTcyYjUyZjlhYWUxYWZiZWUwOTJmYjgyNGM4MTkuLmZlNzVlNDBiNDM0Zjg1
ZDk3M2FlZGJiNDI5N2E5NGJhZTE4ZmJiMmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5oCkBAIC01MCw4ICs1
MCw2IEBAIGNsYXNzIEZyYW1lOwogY2xhc3MgUmVuZGVyT2JqZWN0OwogY2xhc3MgUnVuTG9vcE9i
c2VydmVyOwogCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQogZW51bSBjbGFzcyBUaW1l
bGluZVJlY29yZFR5cGUgewogICAgIEV2ZW50RGlzcGF0Y2gsCiAgICAgU2NoZWR1bGVTdHlsZVJl
Y2FsY3VsYXRpb24sCkBAIC04OCwyMiArODYsMjIgQEAgY2xhc3MgSW5zcGVjdG9yVGltZWxpbmVB
Z2VudCBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3JBZ2VudEJhc2UgLCBwdWJsaWMgSW5zcGVjdG8K
ICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBJbnNwZWN0b3JUaW1l
bGluZUFnZW50KFBhZ2VBZ2VudENvbnRleHQmKTsKLSAgICB+SW5zcGVjdG9yVGltZWxpbmVBZ2Vu
dCgpIG92ZXJyaWRlOworICAgIH5JbnNwZWN0b3JUaW1lbGluZUFnZW50KCk7CiAKICAgICAvLyBJ
bnNwZWN0b3JBZ2VudEJhc2UKLSAgICB2b2lkIGRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJ
bnNwZWN0b3I6OkZyb250ZW5kUm91dGVyKiwgSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlciop
IG92ZXJyaWRlOwotICAgIHZvaWQgd2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVj
dG9yOjpEaXNjb25uZWN0UmVhc29uKSBvdmVycmlkZTsKKyAgICB2b2lkIGRpZENyZWF0ZUZyb250
ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kUm91dGVyKiwgSW5zcGVjdG9yOjpCYWNr
ZW5kRGlzcGF0Y2hlciopOworICAgIHZvaWQgd2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQo
SW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKTsKIAogICAgIC8vIFRpbWVsaW5lQmFja2VuZERp
c3BhdGNoZXJIYW5kbGVyCi0gICAgdm9pZCBlbmFibGUoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsK
LSAgICB2b2lkIGRpc2FibGUoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2b2lkIHN0YXJ0
KEVycm9yU3RyaW5nJiwgY29uc3QgaW50KiBtYXhDYWxsU3RhY2tEZXB0aCA9IG51bGxwdHIpIG92
ZXJyaWRlOwotICAgIHZvaWQgc3RvcChFcnJvclN0cmluZyYpIG92ZXJyaWRlOwotICAgIHZvaWQg
c2V0QXV0b0NhcHR1cmVFbmFibGVkKEVycm9yU3RyaW5nJiwgYm9vbCkgb3ZlcnJpZGU7Ci0gICAg
dm9pZCBzZXRJbnN0cnVtZW50cyhFcnJvclN0cmluZyYsIGNvbnN0IEpTT046OkFycmF5Jikgb3Zl
cnJpZGU7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBlbmFi
bGUoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGRpc2Fi
bGUoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHN0YXJ0
KE9wdGlvbmFsPGludD4mJiBtYXhDYWxsU3RhY2tEZXB0aCk7CisgICAgSW5zcGVjdG9yOjpQcm90
b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzdG9wKCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzZXRBdXRvQ2FwdHVyZUVuYWJsZWQoYm9vbCk7CisgICAg
SW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzZXRJbnN0cnVtZW50cyhS
ZWY8SlNPTjo6QXJyYXk+JiYpOwogCiAgICAgLy8gSlNDOjpEZWJ1Z2dlcjo6T2JzZXJ2ZXIKLSAg
ICB2b2lkIGJyZWFrcG9pbnRBY3Rpb25Qcm9iZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpC
cmVha3BvaW50QWN0aW9uSUQsIHVuc2lnbmVkIGJhdGNoSWQsIHVuc2lnbmVkIHNhbXBsZUlkLCBK
U0M6OkpTVmFsdWUgcmVzdWx0KSBmaW5hbDsKKyAgICB2b2lkIGJyZWFrcG9pbnRBY3Rpb25Qcm9i
ZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpCcmVha3BvaW50QWN0aW9uSUQsIHVuc2lnbmVk
IGJhdGNoSWQsIHVuc2lnbmVkIHNhbXBsZUlkLCBKU0M6OkpTVmFsdWUgcmVzdWx0KTsKIAogICAg
IC8vIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbgogICAgIHZvaWQgZGlkSW5zdGFsbFRpbWVyKGlu
dCB0aW1lcklkLCBTZWNvbmRzIHRpbWVvdXQsIGJvb2wgc2luZ2xlU2hvdCwgRnJhbWUqKTsKQEAg
LTE2MCw5ICsxNTgsNyBAQCBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBUaW1lbGluZVJlY29y
ZFN0YWNrOwogCiAgICAgc3RydWN0IFRpbWVsaW5lUmVjb3JkRW50cnkgewotICAgICAgICBUaW1l
bGluZVJlY29yZEVudHJ5KCkKLSAgICAgICAgICAgIDogdHlwZShUaW1lbGluZVJlY29yZFR5cGU6
OkV2ZW50RGlzcGF0Y2gpIHsgfQotICAgICAgICBUaW1lbGluZVJlY29yZEVudHJ5KFJlZlB0cjxK
U09OOjpPYmplY3Q+JiYgcmVjb3JkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIGRhdGEsIFJlZlB0
cjxKU09OOjpBcnJheT4mJiBjaGlsZHJlbiwgVGltZWxpbmVSZWNvcmRUeXBlIHR5cGUpCisgICAg
ICAgIFRpbWVsaW5lUmVjb3JkRW50cnkoUmVmPEpTT046Ok9iamVjdD4mJiByZWNvcmQsIFJlZjxK
U09OOjpPYmplY3Q+JiYgZGF0YSwgUmVmUHRyPEpTT046OkFycmF5PiYmIGNoaWxkcmVuLCBUaW1l
bGluZVJlY29yZFR5cGUgdHlwZSkKICAgICAgICAgICAgIDogcmVjb3JkKFdURk1vdmUocmVjb3Jk
KSkKICAgICAgICAgICAgICwgZGF0YShXVEZNb3ZlKGRhdGEpKQogICAgICAgICAgICAgLCBjaGls
ZHJlbihXVEZNb3ZlKGNoaWxkcmVuKSkKQEAgLTE3MCwyOSArMTY2LDI5IEBAIHByaXZhdGU6CiAg
ICAgICAgIHsKICAgICAgICAgfQogCi0gICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHJlY29y
ZDsKLSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gZGF0YTsKKyAgICAgICAgUmVmPEpTT046
Ok9iamVjdD4gcmVjb3JkOworICAgICAgICBSZWY8SlNPTjo6T2JqZWN0PiBkYXRhOwogICAgICAg
ICBSZWZQdHI8SlNPTjo6QXJyYXk+IGNoaWxkcmVuOwogICAgICAgICBUaW1lbGluZVJlY29yZFR5
cGUgdHlwZTsKICAgICB9OwogCi0gICAgdm9pZCBpbnRlcm5hbFN0YXJ0KGNvbnN0IGludCogbWF4
Q2FsbFN0YWNrRGVwdGggPSBudWxscHRyKTsKKyAgICB2b2lkIGludGVybmFsU3RhcnQoT3B0aW9u
YWw8aW50PiYmIG1heENhbGxTdGFja0RlcHRoKTsKICAgICB2b2lkIGludGVybmFsU3RvcCgpOwog
ICAgIGRvdWJsZSB0aW1lc3RhbXAoKTsKIAotICAgIHZvaWQgc2VuZEV2ZW50KFJlZlB0cjxKU09O
OjpPYmplY3Q+JiYpOwotICAgIHZvaWQgYXBwZW5kUmVjb3JkKFJlZlB0cjxKU09OOjpPYmplY3Q+
JiYgZGF0YSwgVGltZWxpbmVSZWNvcmRUeXBlLCBib29sIGNhcHR1cmVDYWxsU3RhY2ssIEZyYW1l
Kik7Ci0gICAgdm9pZCBwdXNoQ3VycmVudFJlY29yZChSZWZQdHI8SlNPTjo6T2JqZWN0PiYmLCBU
aW1lbGluZVJlY29yZFR5cGUsIGJvb2wgY2FwdHVyZUNhbGxTdGFjaywgRnJhbWUqKTsKKyAgICB2
b2lkIHNlbmRFdmVudChSZWY8SlNPTjo6T2JqZWN0PiYmKTsKKyAgICB2b2lkIGFwcGVuZFJlY29y
ZChSZWY8SlNPTjo6T2JqZWN0PiYmIGRhdGEsIFRpbWVsaW5lUmVjb3JkVHlwZSwgYm9vbCBjYXB0
dXJlQ2FsbFN0YWNrLCBGcmFtZSopOworICAgIHZvaWQgcHVzaEN1cnJlbnRSZWNvcmQoUmVmPEpT
T046Ok9iamVjdD4mJiwgVGltZWxpbmVSZWNvcmRUeXBlLCBib29sIGNhcHR1cmVDYWxsU3RhY2ss
IEZyYW1lKik7CiAgICAgdm9pZCBwdXNoQ3VycmVudFJlY29yZChjb25zdCBUaW1lbGluZVJlY29y
ZEVudHJ5JiByZWNvcmQpIHsgbV9yZWNvcmRTdGFjay5hcHBlbmQocmVjb3JkKTsgfQogCi0gICAg
VGltZWxpbmVSZWNvcmRFbnRyeSBjcmVhdGVSZWNvcmRFbnRyeShSZWZQdHI8SlNPTjo6T2JqZWN0
PiYmIGRhdGEsIFRpbWVsaW5lUmVjb3JkVHlwZSwgYm9vbCBjYXB0dXJlQ2FsbFN0YWNrLCBGcmFt
ZSopOworICAgIFRpbWVsaW5lUmVjb3JkRW50cnkgY3JlYXRlUmVjb3JkRW50cnkoUmVmPEpTT046
Ok9iamVjdD4mJiBkYXRhLCBUaW1lbGluZVJlY29yZFR5cGUsIGJvb2wgY2FwdHVyZUNhbGxTdGFj
aywgRnJhbWUqKTsKIAogICAgIHZvaWQgc2V0RnJhbWVJZGVudGlmaWVyKEpTT046Ok9iamVjdCog
cmVjb3JkLCBGcmFtZSopOwogCiAgICAgdm9pZCBkaWRDb21wbGV0ZVJlY29yZEVudHJ5KGNvbnN0
IFRpbWVsaW5lUmVjb3JkRW50cnkmKTsKICAgICB2b2lkIGRpZENvbXBsZXRlQ3VycmVudFJlY29y
ZChUaW1lbGluZVJlY29yZFR5cGUpOwogCi0gICAgdm9pZCBhZGRSZWNvcmRUb1RpbWVsaW5lKFJl
ZlB0cjxKU09OOjpPYmplY3Q+JiYsIFRpbWVsaW5lUmVjb3JkVHlwZSk7CisgICAgdm9pZCBhZGRS
ZWNvcmRUb1RpbWVsaW5lKFJlZjxKU09OOjpPYmplY3Q+JiYsIFRpbWVsaW5lUmVjb3JkVHlwZSk7
CiAKICAgICB2b2lkIGxvY2FsVG9QYWdlUXVhZChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBM
YXlvdXRSZWN0JiwgRmxvYXRRdWFkKik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yV29ya2VyQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JXb3JrZXJBZ2VudC5jcHAKaW5kZXggOTA5YzQ2NmY4
N2U5YmZhOGM0YzE3MjhjNDZhZDZlN2U1OTA3YjQ2ZS4uMzNjYWEwYWEyMDc5YWQ0MDgxY2MyOTYw
NWE1MzUzN2MyNGQ2NmJlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Fn
ZW50cy9JbnNwZWN0b3JXb3JrZXJBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2FnZW50cy9JbnNwZWN0b3JXb3JrZXJBZ2VudC5jcHAKQEAgLTUzLDU1ICs1Myw1NiBAQCB2
b2lkIEluc3BlY3RvcldvcmtlckFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChE
aXNjb25uZWN0UmVhc29uKQogewogICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy5zZXRQZXJzaXN0
ZW50V29ya2VyQWdlbnQobnVsbHB0cik7CiAKLSAgICBFcnJvclN0cmluZyBpZ25vcmVkOwotICAg
IGRpc2FibGUoaWdub3JlZCk7CisgICAgZGlzYWJsZSgpOwogfQogCi12b2lkIEluc3BlY3Rvcldv
cmtlckFnZW50OjplbmFibGUoRXJyb3JTdHJpbmcmKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8
dm9pZD4gSW5zcGVjdG9yV29ya2VyQWdlbnQ6OmVuYWJsZSgpCiB7CiAgICAgaWYgKG1fZW5hYmxl
ZCkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4geyB9OwogCiAgICAgbV9lbmFibGVk
ID0gdHJ1ZTsKIAogICAgIGNvbm5lY3RUb0FsbFdvcmtlckluc3BlY3RvclByb3hpZXNGb3JQYWdl
KCk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvcldvcmtlckFnZW50Ojpk
aXNhYmxlKEVycm9yU3RyaW5nJikKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3Bl
Y3RvcldvcmtlckFnZW50OjpkaXNhYmxlKCkKIHsKICAgICBpZiAoIW1fZW5hYmxlZCkKLSAgICAg
ICAgcmV0dXJuOworICAgICAgICByZXR1cm4geyB9OwogCiAgICAgbV9lbmFibGVkID0gZmFsc2U7
CiAKICAgICBkaXNjb25uZWN0RnJvbUFsbFdvcmtlckluc3BlY3RvclByb3hpZXMoKTsKKworICAg
IHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yV29ya2VyQWdlbnQ6OmluaXRpYWxpemVk
KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiB3b3JrZXJJZCkKK1Byb3Rv
Y29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvcldvcmtlckFnZW50Ojppbml0aWFsaXpl
ZChjb25zdCBTdHJpbmcmIHdvcmtlcklkKQogewogICAgIFdvcmtlckluc3BlY3RvclByb3h5KiBw
cm94eSA9IG1fY29ubmVjdGVkUHJveGllcy5nZXQod29ya2VySWQpOwotICAgIGlmICghcHJveHkp
IHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWlzc2luZyB3b3JrZXIgZm9yIGdpdmVuIHdvcmtl
cklkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghcHJveHkpCisgICAgICAg
IHJldHVybiBtYWtlVW5leHBlY3RlZCgiTWlzc2luZyB3b3JrZXIgZm9yIGdpdmVuIHdvcmtlcklk
Il9zKTsKIAogICAgIHByb3h5LT5yZXN1bWVXb3JrZXJJZlBhdXNlZCgpOworCisgICAgcmV0dXJu
IHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JXb3JrZXJBZ2VudDo6c2VuZE1lc3NhZ2VUb1dvcmtl
cihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgd29ya2VySWQsIGNvbnN0
IFN0cmluZyYgbWVzc2FnZSkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3Rv
cldvcmtlckFnZW50OjpzZW5kTWVzc2FnZVRvV29ya2VyKGNvbnN0IFN0cmluZyYgd29ya2VySWQs
IGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKIHsKLSAgICBpZiAoIW1fZW5hYmxlZCkgewotICAgICAg
ICBlcnJvclN0cmluZyA9ICJXb3JrZXIgZG9tYWluIG11c3QgYmUgZW5hYmxlZCJfczsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoIW1fZW5hYmxlZCkKKyAgICAgICAgcmV0dXJuIG1h
a2VVbmV4cGVjdGVkKCJXb3JrZXIgZG9tYWluIG11c3QgYmUgZW5hYmxlZCJfcyk7CiAKICAgICBX
b3JrZXJJbnNwZWN0b3JQcm94eSogcHJveHkgPSBtX2Nvbm5lY3RlZFByb3hpZXMuZ2V0KHdvcmtl
cklkKTsKLSAgICBpZiAoIXByb3h5KSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIk1pc3Npbmcg
d29ya2VyIGZvciBnaXZlbiB3b3JrZXJJZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAg
ICBpZiAoIXByb3h5KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk1pc3Npbmcgd29y
a2VyIGZvciBnaXZlbiB3b3JrZXJJZCJfcyk7CiAKICAgICBwcm94eS0+c2VuZE1lc3NhZ2VUb1dv
cmtlckluc3BlY3RvckNvbnRyb2xsZXIobWVzc2FnZSk7CisKKyAgICByZXR1cm4geyB9OwogfQog
CiB2b2lkIEluc3BlY3RvcldvcmtlckFnZW50OjpzZW5kTWVzc2FnZUZyb21Xb3JrZXJUb0Zyb250
ZW5kKFdvcmtlckluc3BlY3RvclByb3h5JiBwcm94eSwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JXb3Jr
ZXJBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JXb3Jr
ZXJBZ2VudC5oCmluZGV4IDE3ZDFiZWFlOTAxMGYzMjAwMWFjNjRkZDlkODkyYTkzZjEwYTdkNTYu
LjYzNmJjODFkZDVhNTBhZWUwNTNjMmUwNGU2ODY5OWQzZmE2YjY0ZWYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yV29ya2VyQWdlbnQuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvcldvcmtlckFnZW50LmgK
QEAgLTM1LDI3ICszNSwyNSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFBhZ2U7CiAK
LXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCiBjbGFzcyBJbnNwZWN0b3JXb3JrZXJBZ2Vu
dCBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3JBZ2VudEJhc2UsIHB1YmxpYyBJbnNwZWN0b3I6Oldv
cmtlckJhY2tlbmREaXNwYXRjaGVySGFuZGxlciwgcHVibGljIFdvcmtlckluc3BlY3RvclByb3h5
OjpQYWdlQ2hhbm5lbCB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW5zcGVjdG9yV29ya2Vy
QWdlbnQpOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIEluc3Bl
Y3RvcldvcmtlckFnZW50KFBhZ2VBZ2VudENvbnRleHQmKTsKLSAgICB+SW5zcGVjdG9yV29ya2Vy
QWdlbnQoKSBvdmVycmlkZTsKKyAgICB+SW5zcGVjdG9yV29ya2VyQWdlbnQoKTsKIAogICAgIC8v
IEluc3BlY3RvckFnZW50QmFzZQotICAgIHZvaWQgZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5k
KEluc3BlY3Rvcjo6RnJvbnRlbmRSb3V0ZXIqLCBJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVy
Kikgb3ZlcnJpZGU7Ci0gICAgdm9pZCB3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJbnNw
ZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24pIG92ZXJyaWRlOworICAgIHZvaWQgZGlkQ3JlYXRlRnJv
bnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRSb3V0ZXIqLCBJbnNwZWN0b3I6OkJh
Y2tlbmREaXNwYXRjaGVyKik7CisgICAgdm9pZCB3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2Vu
ZChJbnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24pOwogCiAgICAgLy8gV29ya2VyQmFja2VuZERp
c3BhdGNoZXJIYW5kbGVyCi0gICAgdm9pZCBlbmFibGUoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsK
LSAgICB2b2lkIGRpc2FibGUoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2b2lkIGluaXRp
YWxpemVkKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiB3b3JrZXJJZCkgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCBzZW5kTWVzc2FnZVRvV29ya2VyKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiB3
b3JrZXJJZCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKSBvdmVycmlkZTsKKyAgICBJbnNwZWN0b3I6
OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGVuYWJsZSgpOworICAgIEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZGlzYWJsZSgpOworICAgIEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gaW5pdGlhbGl6ZWQoY29uc3QgU3RyaW5nJiB3
b3JrZXJJZCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBz
ZW5kTWVzc2FnZVRvV29ya2VyKGNvbnN0IFN0cmluZyYgd29ya2VySWQsIGNvbnN0IFN0cmluZyYg
bWVzc2FnZSk7CiAKICAgICAvLyBXb3JrZXJJbnNwZWN0b3JQcm94eTo6UGFnZUNoYW5uZWwKLSAg
ICB2b2lkIHNlbmRNZXNzYWdlRnJvbVdvcmtlclRvRnJvbnRlbmQoV29ya2VySW5zcGVjdG9yUHJv
eHkmLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpIG92ZXJyaWRlOworICAgIHZvaWQgc2VuZE1lc3Nh
Z2VGcm9tV29ya2VyVG9Gcm9udGVuZChXb3JrZXJJbnNwZWN0b3JQcm94eSYsIGNvbnN0IFN0cmlu
ZyYgbWVzc2FnZSk7CiAKICAgICAvLyBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24KICAgICBib29s
IHNob3VsZFdhaXRGb3JEZWJ1Z2dlck9uU3RhcnQoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvV2ViQ29uc29sZUFnZW50LmggYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvYWdlbnRzL1dlYkNvbnNvbGVBZ2VudC5oCmluZGV4IGY3ZDgyNzgwNzBm
ZTQ3MDI5OWYyZGQ2YmFiNjY0NjJkNTg1ODg5MDUuLjBiOGYyMGVhYzM0M2I2NjgxN2FjOWYwZjBj
NmM4Y2IyMGM5YmFjN2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2Vu
dHMvV2ViQ29uc29sZUFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50
cy9XZWJDb25zb2xlQWdlbnQuaApAQCAtMzMsNyArMzMsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiBjbGFzcyBET01XaW5kb3c7CiBjbGFzcyBSZXNvdXJjZUVycm9yOwogY2xhc3MgUmVzb3VyY2VS
ZXNwb25zZTsKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwogCiBjbGFzcyBXZWJDb25zb2xl
QWdlbnQgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JDb25zb2xlQWdlbnQgewogICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKFdlYkNvbnNvbGVBZ2VudCk7CkBAIC00Niw4ICs0NSw2IEBAIHB1
YmxpYzoKICAgICB2b2lkIGZyYW1lV2luZG93RGlzY2FyZGVkKERPTVdpbmRvdyopOwogICAgIHZv
aWQgZGlkUmVjZWl2ZVJlc3BvbnNlKHVuc2lnbmVkIGxvbmcgcmVxdWVzdElkZW50aWZpZXIsIGNv
bnN0IFJlc291cmNlUmVzcG9uc2UmKTsKICAgICB2b2lkIGRpZEZhaWxMb2FkaW5nKHVuc2lnbmVk
IGxvbmcgcmVxdWVzdElkZW50aWZpZXIsIGNvbnN0IFJlc291cmNlRXJyb3ImKTsKLQotcHJvdGVj
dGVkOgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2FnZW50cy9XZWJEZWJ1Z2dlckFnZW50LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9hZ2VudHMvV2ViRGVidWdnZXJBZ2VudC5jcHAKaW5kZXggYjkzYTgxZmJm
NGY1MDY0NjZhZGIzZTEzYmJlODhjYzUzOTIzNWI3ZS4uMWM2MTM1N2FmZGNlMzUwYWUyM2FiYzIw
N2YyMjcwNGM5NGViZjRmMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Fn
ZW50cy9XZWJEZWJ1Z2dlckFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
YWdlbnRzL1dlYkRlYnVnZ2VyQWdlbnQuY3BwCkBAIC00OSwxOCArNDksMTggQEAgYm9vbCBXZWJE
ZWJ1Z2dlckFnZW50OjplbmFibGVkKCkgY29uc3QKICAgICByZXR1cm4gbV9pbnN0cnVtZW50aW5n
QWdlbnRzLmVuYWJsZWRXZWJEZWJ1Z2dlckFnZW50KCkgPT0gdGhpcyAmJiBJbnNwZWN0b3JEZWJ1
Z2dlckFnZW50OjplbmFibGVkKCk7CiB9CiAKLXZvaWQgV2ViRGVidWdnZXJBZ2VudDo6ZW5hYmxl
KCkKK3ZvaWQgV2ViRGVidWdnZXJBZ2VudDo6aW50ZXJuYWxFbmFibGUoKQogewogICAgIG1faW5z
dHJ1bWVudGluZ0FnZW50cy5zZXRFbmFibGVkV2ViRGVidWdnZXJBZ2VudCh0aGlzKTsKIAotICAg
IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmVuYWJsZSgpOworICAgIEluc3BlY3RvckRlYnVnZ2Vy
QWdlbnQ6OmludGVybmFsRW5hYmxlKCk7CiB9CiAKLXZvaWQgV2ViRGVidWdnZXJBZ2VudDo6ZGlz
YWJsZShib29sIGlzQmVpbmdEZXN0cm95ZWQpCit2b2lkIFdlYkRlYnVnZ2VyQWdlbnQ6OmludGVy
bmFsRGlzYWJsZShib29sIGlzQmVpbmdEZXN0cm95ZWQpCiB7CiAgICAgbV9pbnN0cnVtZW50aW5n
QWdlbnRzLnNldEVuYWJsZWRXZWJEZWJ1Z2dlckFnZW50KG51bGxwdHIpOwogCi0gICAgSW5zcGVj
dG9yRGVidWdnZXJBZ2VudDo6ZGlzYWJsZShpc0JlaW5nRGVzdHJveWVkKTsKKyAgICBJbnNwZWN0
b3JEZWJ1Z2dlckFnZW50OjppbnRlcm5hbERpc2FibGUoaXNCZWluZ0Rlc3Ryb3llZCk7CiB9CiAK
IHZvaWQgV2ViRGVidWdnZXJBZ2VudDo6ZGlkQWRkRXZlbnRMaXN0ZW5lcihFdmVudFRhcmdldCYg
dGFyZ2V0LCBjb25zdCBBdG9tU3RyaW5nJiBldmVudFR5cGUsIEV2ZW50TGlzdGVuZXImIGxpc3Rl
bmVyLCBib29sIGNhcHR1cmUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
YWdlbnRzL1dlYkRlYnVnZ2VyQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2Vu
dHMvV2ViRGVidWdnZXJBZ2VudC5oCmluZGV4IDEwYjk2NDg4ODFhYTAxNTY0ZmNiZTcyZTc0ZmZi
YWM3OTY4NDU3NjIuLmE5MjM3MWRhNWQyM2FhMDVlZGI2ODk4NzU5ZWE0MTFlZTc1YTY5OGIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvV2ViRGVidWdnZXJBZ2Vu
dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvV2ViRGVidWdnZXJBZ2Vu
dC5oCkBAIC0zNSw3ICszNSw2IEBAIGNsYXNzIEV2ZW50VGFyZ2V0OwogY2xhc3MgSW5zdHJ1bWVu
dGluZ0FnZW50czsKIGNsYXNzIFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyOwogY2xhc3MgVGltZXJC
YXNlOwotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiAKIGNsYXNzIFdlYkRlYnVnZ2VyQWdl
bnQgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50IHsKICAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShXZWJEZWJ1Z2dlckFnZW50KTsKQEAgLTU2LDggKzU1LDggQEAgcHVi
bGljOgogCiBwcm90ZWN0ZWQ6CiAgICAgV2ViRGVidWdnZXJBZ2VudChXZWJBZ2VudENvbnRleHQm
KTsKLSAgICB2b2lkIGVuYWJsZSgpIG92ZXJyaWRlOwotICAgIHZvaWQgZGlzYWJsZShib29sIGlz
QmVpbmdEZXN0cm95ZWQpIG92ZXJyaWRlOworICAgIHZvaWQgaW50ZXJuYWxFbmFibGUoKSBvdmVy
cmlkZTsKKyAgICB2b2lkIGludGVybmFsRGlzYWJsZShib29sIGlzQmVpbmdEZXN0cm95ZWQpIG92
ZXJyaWRlOwogCiAgICAgdm9pZCBkaWRDbGVhckFzeW5jU3RhY2tUcmFjZURhdGEoKSBmaW5hbDsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9XZWJIZWFwQWdl
bnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9XZWJIZWFwQWdlbnQuY3Bw
CmluZGV4IDVhYTc0NTNkMDk1NjA3NjI3OGViMDMwZjgwOGRkZjAxNGRhYmZiODUuLjkyNzVlOGY3
OWQwMGZlMWExMTgyMWVkOGE4NjljMGUxN2I0MDgwMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9hZ2VudHMvV2ViSGVhcEFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvYWdlbnRzL1dlYkhlYXBBZ2VudC5jcHAKQEAgLTM1LDcgKzM1LDcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKIAogc3RydWN0IEdh
cmJhZ2VDb2xsZWN0aW9uRGF0YSB7Ci0gICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6SGVhcDo6R2Fy
YmFnZUNvbGxlY3Rpb246OlR5cGUgdHlwZTsKKyAgICBQcm90b2NvbDo6SGVhcDo6R2FyYmFnZUNv
bGxlY3Rpb246OlR5cGUgdHlwZTsKICAgICBTZWNvbmRzIHN0YXJ0VGltZTsKICAgICBTZWNvbmRz
IGVuZFRpbWU7CiB9OwpAQCAtMTAzLDI1ICsxMDMsMjcgQEAgV2ViSGVhcEFnZW50OjpXZWJIZWFw
QWdlbnQoV2ViQWdlbnRDb250ZXh0JiBjb250ZXh0KQogCiBXZWJIZWFwQWdlbnQ6On5XZWJIZWFw
QWdlbnQoKSA9IGRlZmF1bHQ7CiAKLXZvaWQgV2ViSGVhcEFnZW50OjplbmFibGUoRXJyb3JTdHJp
bmcmIGVycm9yU3RyaW5nKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gV2ViSGVhcEFn
ZW50OjplbmFibGUoKQogewotICAgIEluc3BlY3RvckhlYXBBZ2VudDo6ZW5hYmxlKGVycm9yU3Ry
aW5nKTsKKyAgICBhdXRvIHJlc3VsdCA9IEluc3BlY3RvckhlYXBBZ2VudDo6ZW5hYmxlKCk7CiAK
ICAgICBpZiAoYXV0byogY29uc29sZUFnZW50ID0gbV9pbnN0cnVtZW50aW5nQWdlbnRzLndlYkNv
bnNvbGVBZ2VudCgpKQogICAgICAgICBjb25zb2xlQWdlbnQtPnNldEhlYXBBZ2VudCh0aGlzKTsK
KworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgV2ViSGVhcEFnZW50OjpkaXNhYmxlKEVy
cm9yU3RyaW5nJiBlcnJvclN0cmluZykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IFdl
YkhlYXBBZ2VudDo6ZGlzYWJsZSgpCiB7CiAgICAgbV9zZW5kR2FyYmFnZUNvbGxlY3Rpb25FdmVu
dHNUYXNrLT5yZXNldCgpOwogCiAgICAgaWYgKGF1dG8qIGNvbnNvbGVBZ2VudCA9IG1faW5zdHJ1
bWVudGluZ0FnZW50cy53ZWJDb25zb2xlQWdlbnQoKSkKICAgICAgICAgY29uc29sZUFnZW50LT5z
ZXRIZWFwQWdlbnQobnVsbHB0cik7CiAKLSAgICBJbnNwZWN0b3JIZWFwQWdlbnQ6OmRpc2FibGUo
ZXJyb3JTdHJpbmcpOworICAgIHJldHVybiBJbnNwZWN0b3JIZWFwQWdlbnQ6OmRpc2FibGUoKTsK
IH0KIAotdm9pZCBXZWJIZWFwQWdlbnQ6OmRpc3BhdGNoR2FyYmFnZUNvbGxlY3RlZEV2ZW50KElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkhlYXA6OkdhcmJhZ2VDb2xsZWN0aW9uOjpUeXBlIHR5cGUsIFNl
Y29uZHMgc3RhcnRUaW1lLCBTZWNvbmRzIGVuZFRpbWUpCit2b2lkIFdlYkhlYXBBZ2VudDo6ZGlz
cGF0Y2hHYXJiYWdlQ29sbGVjdGVkRXZlbnQoUHJvdG9jb2w6OkhlYXA6OkdhcmJhZ2VDb2xsZWN0
aW9uOjpUeXBlIHR5cGUsIFNlY29uZHMgc3RhcnRUaW1lLCBTZWNvbmRzIGVuZFRpbWUpCiB7CiAg
ICAgLy8gRGlzcGF0Y2ggdGhlIGV2ZW50IGFzeW5jaHJvbm91c2x5IGJlY2F1c2UgdGhpcyBtZXRo
b2QgbWF5IGJlCiAgICAgLy8gY2FsbGVkIGJldHdlZW4gY29sbGVjdGlvbiBhbmQgc3dlZXBpbmcg
YW5kIHdlIGRvbid0IHdhbnQgdG8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9hZ2VudHMvV2ViSGVhcEFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRz
L1dlYkhlYXBBZ2VudC5oCmluZGV4IDBiYzhlNjRhZjVhODZhNzJkNWY4MDQ0MGZkYjExNjNmZTE3
ZTE1NzMuLmEzNWU1N2NjN2E3MWY4YWY0MTM4NjM3ODdjZWYzNmJlZTQxNmY2YmMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvV2ViSGVhcEFnZW50LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9XZWJIZWFwQWdlbnQuaApAQCAtMzMsNyAr
MzMsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFNlbmRHYXJiYWdlQ29sbGVjdGlv
bkV2ZW50c1Rhc2s7CiBzdHJ1Y3QgR2FyYmFnZUNvbGxlY3Rpb25EYXRhOwotdHlwZWRlZiBTdHJp
bmcgRXJyb3JTdHJpbmc7CiAKIGNsYXNzIFdlYkhlYXBBZ2VudCA6IHB1YmxpYyBJbnNwZWN0b3I6
Okluc3BlY3RvckhlYXBBZ2VudCB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoV2ViSGVhcEFn
ZW50KTsKQEAgLTQ0LDggKzQzLDggQEAgcHVibGljOgogICAgIH5XZWJIZWFwQWdlbnQoKSBvdmVy
cmlkZTsKIAogICAgIC8vIEhlYXBCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIKLSAgICB2b2lkIGVu
YWJsZShFcnJvclN0cmluZyYpIG92ZXJyaWRlOwotICAgIHZvaWQgZGlzYWJsZShFcnJvclN0cmlu
ZyYpIG92ZXJyaWRlOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9p
ZD4gZW5hYmxlKCkgb3ZlcnJpZGU7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJp
bmdPcjx2b2lkPiBkaXNhYmxlKCkgb3ZlcnJpZGU7CiAKIHByb3RlY3RlZDoKICAgICB2b2lkIGRp
c3BhdGNoR2FyYmFnZUNvbGxlY3RlZEV2ZW50KEluc3BlY3Rvcjo6UHJvdG9jb2w6OkhlYXA6Okdh
cmJhZ2VDb2xsZWN0aW9uOjpUeXBlLCBTZWNvbmRzIHN0YXJ0VGltZSwgU2Vjb25kcyBlbmRUaW1l
KSBmaW5hbDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFn
ZS9QYWdlQXVkaXRBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3Bh
Z2UvUGFnZUF1ZGl0QWdlbnQuY3BwCmluZGV4IGRkZDUzYmE1ZGZiY2E1NTM3YmJiNmI3YmUwNjUw
NTdkNzJmYmFiZDguLjlhY2ZlNGRkNGIxNjBlZTliMzg5MTBjYzljNzVhMjQxMjRjZWZlZGYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlQXVkaXRB
Z2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VB
dWRpdEFnZW50LmNwcApAQCAtNTYsNyArNTYsNyBAQCBQYWdlQXVkaXRBZ2VudDo6UGFnZUF1ZGl0
QWdlbnQoUGFnZUFnZW50Q29udGV4dCYgY29udGV4dCkKIAogUGFnZUF1ZGl0QWdlbnQ6On5QYWdl
QXVkaXRBZ2VudCgpID0gZGVmYXVsdDsKIAotSW5qZWN0ZWRTY3JpcHQgUGFnZUF1ZGl0QWdlbnQ6
OmluamVjdGVkU2NyaXB0Rm9yRXZhbChjb25zdCBpbnQqIGV4ZWN1dGlvbkNvbnRleHRJZCkKK0lu
amVjdGVkU2NyaXB0IFBhZ2VBdWRpdEFnZW50OjppbmplY3RlZFNjcmlwdEZvckV2YWwoT3B0aW9u
YWw8UHJvdG9jb2w6OlJ1bnRpbWU6OkV4ZWN1dGlvbkNvbnRleHRJZD4mJiBleGVjdXRpb25Db250
ZXh0SWQpCiB7CiAgICAgaWYgKGV4ZWN1dGlvbkNvbnRleHRJZCkKICAgICAgICAgcmV0dXJuIGlu
amVjdGVkU2NyaXB0TWFuYWdlcigpLmluamVjdGVkU2NyaXB0Rm9ySWQoKmV4ZWN1dGlvbkNvbnRl
eHRJZCk7CkBAIC02NSw5ICs2NSw5IEBAIEluamVjdGVkU2NyaXB0IFBhZ2VBdWRpdEFnZW50Ojpp
bmplY3RlZFNjcmlwdEZvckV2YWwoY29uc3QgaW50KiBleGVjdXRpb25Db250ZXh0CiAgICAgcmV0
dXJuIGluamVjdGVkU2NyaXB0TWFuYWdlcigpLmluamVjdGVkU2NyaXB0Rm9yKHNjcmlwdFN0YXRl
KTsKIH0KIAotSW5qZWN0ZWRTY3JpcHQgUGFnZUF1ZGl0QWdlbnQ6OmluamVjdGVkU2NyaXB0Rm9y
RXZhbChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IGludCogZXhlY3V0aW9uQ29udGV4
dElkKQorSW5qZWN0ZWRTY3JpcHQgUGFnZUF1ZGl0QWdlbnQ6OmluamVjdGVkU2NyaXB0Rm9yRXZh
bChQcm90b2NvbDo6RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBPcHRpb25hbDxQcm90b2NvbDo6
UnVudGltZTo6RXhlY3V0aW9uQ29udGV4dElkPiYmIGV4ZWN1dGlvbkNvbnRleHRJZCkKIHsKLSAg
ICBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdCA9IGluamVjdGVkU2NyaXB0Rm9yRXZhbChl
eGVjdXRpb25Db250ZXh0SWQpOworICAgIEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0ID0g
aW5qZWN0ZWRTY3JpcHRGb3JFdmFsKFdURk1vdmUoZXhlY3V0aW9uQ29udGV4dElkKSk7CiAgICAg
aWYgKGluamVjdGVkU2NyaXB0Lmhhc05vVmFsdWUoKSkgewogICAgICAgICBpZiAoZXhlY3V0aW9u
Q29udGV4dElkKQogICAgICAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWlzc2luZyBpbmplY3RlZCBz
Y3JpcHQgZm9yIGdpdmVuIGV4ZWN1dGlvbkNvbnRleHRJZCJfczsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlQXVkaXRBZ2VudC5oIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VBdWRpdEFnZW50LmgKaW5kZXggZGRl
YzQ2NTE3ZTFhMDVjYmY1YmY4ZmZkN2QxYWM4ODhhMDg5NGY3OS4uNjkzZmFjMzI3NDY5YTkwNDRk
ODcwMTc2ZmFhMmExZDQ5ZmJhMWIzOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2FnZW50cy9wYWdlL1BhZ2VBdWRpdEFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VBdWRpdEFnZW50LmgKQEAgLTM3LDE2ICszNywxNiBAQCBj
bGFzcyBQYWdlQXVkaXRBZ2VudCBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3BlY3RvckF1
ZGl0QWdlbnQgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIFBh
Z2VBdWRpdEFnZW50KFBhZ2VBZ2VudENvbnRleHQmKTsKLSAgICB+UGFnZUF1ZGl0QWdlbnQoKSBv
dmVycmlkZTsKKyAgICB+UGFnZUF1ZGl0QWdlbnQoKTsKIAogcHJpdmF0ZToKLSAgICBJbnNwZWN0
b3I6OkluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0Rm9yRXZhbChjb25zdCBpbnQqIGV4ZWN1
dGlvbkNvbnRleHRJZCk7Ci0gICAgSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNj
cmlwdEZvckV2YWwoSW5zcGVjdG9yOjpFcnJvclN0cmluZyYsIGNvbnN0IGludCogZXhlY3V0aW9u
Q29udGV4dElkKSBvdmVycmlkZTsKKyAgICBJbnNwZWN0b3I6OkluamVjdGVkU2NyaXB0IGluamVj
dGVkU2NyaXB0Rm9yRXZhbChPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpF
eGVjdXRpb25Db250ZXh0SWQ+JiYpOworICAgIEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHQgaW5q
ZWN0ZWRTY3JpcHRGb3JFdmFsKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nJiwgT3B0
aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RXhlY3V0aW9uQ29udGV4dElkPiYm
KTsKIAotICAgIHZvaWQgcG9wdWxhdGVBdWRpdE9iamVjdChKU0M6OkpTR2xvYmFsT2JqZWN0Kiwg
SlNDOjpTdHJvbmc8SlNDOjpKU09iamVjdD4mIGF1ZGl0T2JqZWN0KSBvdmVycmlkZTsKKyAgICB2
b2lkIHBvcHVsYXRlQXVkaXRPYmplY3QoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6U3Ryb25n
PEpTQzo6SlNPYmplY3Q+JiBhdWRpdE9iamVjdCk7CiAKLSAgICB2b2lkIG11dGVDb25zb2xlKCkg
b3ZlcnJpZGU7Ci0gICAgdm9pZCB1bm11dGVDb25zb2xlKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBt
dXRlQ29uc29sZSgpOworICAgIHZvaWQgdW5tdXRlQ29uc29sZSgpOwogCiAgICAgUGFnZSYgbV9p
bnNwZWN0ZWRQYWdlOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9h
Z2VudHMvcGFnZS9QYWdlQ29uc29sZUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9hZ2VudHMvcGFnZS9QYWdlQ29uc29sZUFnZW50LmNwcAppbmRleCAxM2ZkMWQ3ZGFiYWE5OWQw
YmIwYzQ5ZmY3YmI1ZTUyZjU0YzY2M2QzLi4xMjEyYjg2NmQ5ZTI4OTk2NzdhOTNmZDcxNmMxZTg2
OGQzYzFmZmZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3Bh
Z2UvUGFnZUNvbnNvbGVBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Fn
ZW50cy9wYWdlL1BhZ2VDb25zb2xlQWdlbnQuY3BwCkBAIC01NCw3OSArNTQsODMgQEAgUGFnZUNv
bnNvbGVBZ2VudDo6UGFnZUNvbnNvbGVBZ2VudChQYWdlQWdlbnRDb250ZXh0JiBjb250ZXh0KQog
CiBQYWdlQ29uc29sZUFnZW50Ojp+UGFnZUNvbnNvbGVBZ2VudCgpID0gZGVmYXVsdDsKIAotdm9p
ZCBQYWdlQ29uc29sZUFnZW50OjpjbGVhck1lc3NhZ2VzKEVycm9yU3RyaW5nJiBlcnJvclN0cmlu
ZykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IFBhZ2VDb25zb2xlQWdlbnQ6OmNsZWFy
TWVzc2FnZXMoKQogewogICAgIGlmIChhdXRvKiBkb21BZ2VudCA9IG1faW5zdHJ1bWVudGluZ0Fn
ZW50cy5wZXJzaXN0ZW50RE9NQWdlbnQoKSkKICAgICAgICAgZG9tQWdlbnQtPnJlbGVhc2VEYW5n
bGluZ05vZGVzKCk7CiAKLSAgICBXZWJDb25zb2xlQWdlbnQ6OmNsZWFyTWVzc2FnZXMoZXJyb3JT
dHJpbmcpOworICAgIHJldHVybiBXZWJDb25zb2xlQWdlbnQ6OmNsZWFyTWVzc2FnZXMoKTsKIH0K
IAotdm9pZCBQYWdlQ29uc29sZUFnZW50OjpnZXRMb2dnaW5nQ2hhbm5lbHMoRXJyb3JTdHJpbmcm
LCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDb25zb2xlOjpDaGFu
bmVsPj4mIGNoYW5uZWxzKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEpTT046OkFycmF5
T2Y8UHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWw+Pj4gUGFnZUNvbnNvbGVBZ2VudDo6Z2V0TG9n
Z2luZ0NoYW5uZWxzKCkKIHsKLSAgICBzdGF0aWMgY29uc3Qgc3RydWN0IENoYW5uZWxUYWJsZSB7
Ci0gICAgICAgIE5ldmVyRGVzdHJveWVkPFN0cmluZz4gbmFtZTsKLSAgICAgICAgSW5zcGVjdG9y
OjpQcm90b2NvbDo6Q29uc29sZTo6Q2hhbm5lbFNvdXJjZSBzb3VyY2U7Ci0gICAgfSBjaGFubmVs
VGFibGVbXSA9IHsKLSAgICAgICAgeyBNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgiV2ViUlRDIiks
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWxTb3VyY2U6OldlYlJUQyB9LAot
ICAgICAgICB7IE1BS0VfU1RBVElDX1NUUklOR19JTVBMKCJNZWRpYSIpLCBJbnNwZWN0b3I6OlBy
b3RvY29sOjpDb25zb2xlOjpDaGFubmVsU291cmNlOjpNZWRpYSB9LAotICAgICAgICB7IE1BS0Vf
U1RBVElDX1NUUklOR19JTVBMKCJNZWRpYVNvdXJjZSIpLCBJbnNwZWN0b3I6OlByb3RvY29sOjpD
b25zb2xlOjpDaGFubmVsU291cmNlOjpNZWRpYVNvdXJjZSB9LAotICAgIH07CisgICAgYXV0byBj
aGFubmVscyA9IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWw+OjpjcmVh
dGUoKTsKIAotICAgIGNoYW5uZWxzID0gSlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29s
OjpDb25zb2xlOjpDaGFubmVsPjo6Y3JlYXRlKCk7Ci0KLSAgICBzaXplX3QgbGVuZ3RoID0gV1RG
X0FSUkFZX0xFTkdUSChjaGFubmVsVGFibGUpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bGVuZ3RoOyArK2kpIHsKLSAgICAgICAgYXV0byogbG9nQ2hhbm5lbCA9IGdldExvZ0NoYW5uZWwo
Y2hhbm5lbFRhYmxlW2ldLm5hbWUpOworICAgIGF1dG8gYWRkTG9nQ2hhbm5lbCA9IFsmXSAoUHJv
dG9jb2w6OkNvbnNvbGU6OkNoYW5uZWxTb3VyY2Ugc291cmNlKSB7CisgICAgICAgIGF1dG8qIGxv
Z0NoYW5uZWwgPSBnZXRMb2dDaGFubmVsKFByb3RvY29sOjpIZWxwZXJzOjpnZXRFbnVtQ29uc3Rh
bnRWYWx1ZShzb3VyY2UpKTsKICAgICAgICAgaWYgKCFsb2dDaGFubmVsKQogICAgICAgICAgICAg
cmV0dXJuOwogCi0gICAgICAgIGF1dG8gbGV2ZWwgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpDb25z
b2xlOjpDaGFubmVsTGV2ZWw6Ok9mZjsKKyAgICAgICAgYXV0byBsZXZlbCA9IFByb3RvY29sOjpD
b25zb2xlOjpDaGFubmVsTGV2ZWw6Ok9mZjsKICAgICAgICAgaWYgKGxvZ0NoYW5uZWwtPnN0YXRl
ICE9IFdURkxvZ0NoYW5uZWxTdGF0ZTo6T2ZmKSB7CiAgICAgICAgICAgICBzd2l0Y2ggKGxvZ0No
YW5uZWwtPmxldmVsKSB7CiAgICAgICAgICAgICBjYXNlIFdURkxvZ0xldmVsOjpBbHdheXM6CiAg
ICAgICAgICAgICBjYXNlIFdURkxvZ0xldmVsOjpFcnJvcjoKICAgICAgICAgICAgIGNhc2UgV1RG
TG9nTGV2ZWw6Oldhcm5pbmc6CiAgICAgICAgICAgICBjYXNlIFdURkxvZ0xldmVsOjpJbmZvOgot
ICAgICAgICAgICAgICAgIGxldmVsID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q29uc29sZTo6Q2hh
bm5lbExldmVsOjpCYXNpYzsKKyAgICAgICAgICAgICAgICBsZXZlbCA9IFByb3RvY29sOjpDb25z
b2xlOjpDaGFubmVsTGV2ZWw6OkJhc2ljOwogICAgICAgICAgICAgICAgIGJyZWFrOworCiAgICAg
ICAgICAgICBjYXNlIFdURkxvZ0xldmVsOjpEZWJ1ZzoKLSAgICAgICAgICAgICAgICBsZXZlbCA9
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWxMZXZlbDo6VmVyYm9zZTsKKyAg
ICAgICAgICAgICAgICBsZXZlbCA9IFByb3RvY29sOjpDb25zb2xlOjpDaGFubmVsTGV2ZWw6OlZl
cmJvc2U7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
IAotICAgICAgICBhdXRvIGNoYW5uZWwgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpDb25zb2xlOjpD
aGFubmVsOjpjcmVhdGUoKQotICAgICAgICAgICAgLnNldFNvdXJjZShjaGFubmVsVGFibGVbaV0u
c291cmNlKQorICAgICAgICBhdXRvIGNoYW5uZWwgPSBQcm90b2NvbDo6Q29uc29sZTo6Q2hhbm5l
bDo6Y3JlYXRlKCkKKyAgICAgICAgICAgIC5zZXRTb3VyY2Uoc291cmNlKQogICAgICAgICAgICAg
LnNldExldmVsKGxldmVsKQogICAgICAgICAgICAgLnJlbGVhc2UoKTsKICAgICAgICAgY2hhbm5l
bHMtPmFkZEl0ZW0oV1RGTW92ZShjaGFubmVsKSk7Ci0gICAgfQorICAgIH07CisgICAgYWRkTG9n
Q2hhbm5lbChQcm90b2NvbDo6Q29uc29sZTo6Q2hhbm5lbFNvdXJjZTo6WE1MKTsKKyAgICBhZGRM
b2dDaGFubmVsKFByb3RvY29sOjpDb25zb2xlOjpDaGFubmVsU291cmNlOjpKYXZhU2NyaXB0KTsK
KyAgICBhZGRMb2dDaGFubmVsKFByb3RvY29sOjpDb25zb2xlOjpDaGFubmVsU291cmNlOjpOZXR3
b3JrKTsKKyAgICBhZGRMb2dDaGFubmVsKFByb3RvY29sOjpDb25zb2xlOjpDaGFubmVsU291cmNl
OjpDb25zb2xlQVBJKTsKKyAgICBhZGRMb2dDaGFubmVsKFByb3RvY29sOjpDb25zb2xlOjpDaGFu
bmVsU291cmNlOjpTdG9yYWdlKTsKKyAgICBhZGRMb2dDaGFubmVsKFByb3RvY29sOjpDb25zb2xl
OjpDaGFubmVsU291cmNlOjpBcHBjYWNoZSk7CisgICAgYWRkTG9nQ2hhbm5lbChQcm90b2NvbDo6
Q29uc29sZTo6Q2hhbm5lbFNvdXJjZTo6UmVuZGVyaW5nKTsKKyAgICBhZGRMb2dDaGFubmVsKFBy
b3RvY29sOjpDb25zb2xlOjpDaGFubmVsU291cmNlOjpDU1MpOworICAgIGFkZExvZ0NoYW5uZWwo
UHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWxTb3VyY2U6OlNlY3VyaXR5KTsKKyAgICBhZGRMb2dD
aGFubmVsKFByb3RvY29sOjpDb25zb2xlOjpDaGFubmVsU291cmNlOjpDb250ZW50QmxvY2tlcik7
CisgICAgYWRkTG9nQ2hhbm5lbChQcm90b2NvbDo6Q29uc29sZTo6Q2hhbm5lbFNvdXJjZTo6TWVk
aWEpOworICAgIGFkZExvZ0NoYW5uZWwoUHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWxTb3VyY2U6
Ok1lZGlhU291cmNlKTsKKyAgICBhZGRMb2dDaGFubmVsKFByb3RvY29sOjpDb25zb2xlOjpDaGFu
bmVsU291cmNlOjpXZWJSVEMpOworICAgIGFkZExvZ0NoYW5uZWwoUHJvdG9jb2w6OkNvbnNvbGU6
OkNoYW5uZWxTb3VyY2U6OklUUERlYnVnKTsKKyAgICBhZGRMb2dDaGFubmVsKFByb3RvY29sOjpD
b25zb2xlOjpDaGFubmVsU291cmNlOjpBZENsaWNrQXR0cmlidXRpb24pOworICAgIGFkZExvZ0No
YW5uZWwoUHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWxTb3VyY2U6Ok90aGVyKTsKKworICAgIHJl
dHVybiBXVEZNb3ZlKGNoYW5uZWxzKTsKIH0KIAotc3RhdGljIE9wdGlvbmFsPHN0ZDo6cGFpcjxX
VEZMb2dDaGFubmVsU3RhdGUsIFdURkxvZ0xldmVsPj4gY2hhbm5lbENvbmZpZ3VyYXRpb25Gb3JT
dHJpbmcoY29uc3QgU3RyaW5nJiBsZXZlbFN0cmluZykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09y
PHZvaWQ+IFBhZ2VDb25zb2xlQWdlbnQ6OnNldExvZ2dpbmdDaGFubmVsTGV2ZWwoUHJvdG9jb2w6
OkNvbnNvbGU6OkNoYW5uZWxTb3VyY2Ugc291cmNlLCBQcm90b2NvbDo6Q29uc29sZTo6Q2hhbm5l
bExldmVsIGxldmVsKQogewotICAgIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGxldmVsU3Ry
aW5nLCAib2ZmIikpCi0gICAgICAgIHJldHVybiB7IHsgV1RGTG9nQ2hhbm5lbFN0YXRlOjpPZmYs
IFdURkxvZ0xldmVsOjpFcnJvciB9IH07CisgICAgc3dpdGNoIChsZXZlbCkgeworICAgIGNhc2Ug
UHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWxMZXZlbDo6T2ZmOgorICAgICAgICBtX2luc3BlY3Rl
ZFBhZ2UuY29uZmlndXJlTG9nZ2luZ0NoYW5uZWwoUHJvdG9jb2w6OkhlbHBlcnM6OmdldEVudW1D
b25zdGFudFZhbHVlKHNvdXJjZSksIFdURkxvZ0NoYW5uZWxTdGF0ZTo6T2ZmLCBXVEZMb2dMZXZl
bDo6RXJyb3IpOworICAgICAgICByZXR1cm4geyB9OwogCi0gICAgaWYgKGVxdWFsSWdub3JpbmdB
U0NJSUNhc2UobGV2ZWxTdHJpbmcsICJiYXNpYyIpKQotICAgICAgICByZXR1cm4geyB7IFdURkxv
Z0NoYW5uZWxTdGF0ZTo6T24sIFdURkxvZ0xldmVsOjpJbmZvIH0gfTsKKyAgICBjYXNlIFByb3Rv
Y29sOjpDb25zb2xlOjpDaGFubmVsTGV2ZWw6OkJhc2ljOgorICAgICAgICBtX2luc3BlY3RlZFBh
Z2UuY29uZmlndXJlTG9nZ2luZ0NoYW5uZWwoUHJvdG9jb2w6OkhlbHBlcnM6OmdldEVudW1Db25z
dGFudFZhbHVlKHNvdXJjZSksIFdURkxvZ0NoYW5uZWxTdGF0ZTo6T24sIFdURkxvZ0xldmVsOjpJ
bmZvKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGlmIChlcXVhbElnbm9yaW5nQVNDSUlD
YXNlKGxldmVsU3RyaW5nLCAidmVyYm9zZSIpKQotICAgICAgICByZXR1cm4geyB7IFdURkxvZ0No
YW5uZWxTdGF0ZTo6T24sIFdURkxvZ0xldmVsOjpEZWJ1ZyB9IH07Ci0KLSAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwotfQotCi12b2lkIFBhZ2VDb25zb2xlQWdlbnQ6OnNldExvZ2dpbmdDaGFubmVs
TGV2ZWwoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGNoYW5uZWxOYW1l
LCBjb25zdCBTdHJpbmcmIGNoYW5uZWxMZXZlbCkKLXsKLSAgICBhdXRvIGNvbmZpZ3VyYXRpb24g
PSBjaGFubmVsQ29uZmlndXJhdGlvbkZvclN0cmluZyhjaGFubmVsTGV2ZWwpOwotICAgIGlmICgh
Y29uZmlndXJhdGlvbikgewotICAgICAgICBlcnJvclN0cmluZyA9IG1ha2VTdHJpbmcoIlVua25v
d24gY2hhbm5lbExldmVsOiAiX3MsIGNoYW5uZWxMZXZlbCk7Ci0gICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIFByb3RvY29sOjpDb25zb2xlOjpDaGFubmVsTGV2ZWw6OlZlcmJvc2U6CisgICAgICAg
IG1faW5zcGVjdGVkUGFnZS5jb25maWd1cmVMb2dnaW5nQ2hhbm5lbChQcm90b2NvbDo6SGVscGVy
czo6Z2V0RW51bUNvbnN0YW50VmFsdWUoc291cmNlKSwgV1RGTG9nQ2hhbm5lbFN0YXRlOjpPbiwg
V1RGTG9nTGV2ZWw6OkRlYnVnKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKLSAgICBt
X2luc3BlY3RlZFBhZ2UuY29uZmlndXJlTG9nZ2luZ0NoYW5uZWwoY2hhbm5lbE5hbWUsIGNvbmZp
Z3VyYXRpb24udmFsdWUoKS5maXJzdCwgY29uZmlndXJhdGlvbi52YWx1ZSgpLnNlY29uZCk7Cisg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIHsgfTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50
cy9wYWdlL1BhZ2VDb25zb2xlQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2Vu
dHMvcGFnZS9QYWdlQ29uc29sZUFnZW50LmgKaW5kZXggNGM0NWYyZGFkMGY3YzFiNDA0NTM5ZmU0
ZjU3ZTVhODZkYjIwNjMxOC4uNDFmZTc2ZDAzMjA3MGUwZDQxMDNlNDBhMmMxNDRjZTM3OTgxYzgz
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VD
b25zb2xlQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2Uv
UGFnZUNvbnNvbGVBZ2VudC5oCkBAIC00MSwxMiArNDEsMTIgQEAgY2xhc3MgUGFnZUNvbnNvbGVB
Z2VudCBmaW5hbCA6IHB1YmxpYyBXZWJDb25zb2xlQWdlbnQgewogICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOwogcHVibGljOgogICAgIFBhZ2VDb25zb2xlQWdlbnQoUGFnZUFnZW50Q29udGV4
dCYpOwotICAgIH5QYWdlQ29uc29sZUFnZW50KCkgb3ZlcnJpZGU7CisgICAgflBhZ2VDb25zb2xl
QWdlbnQoKTsKIAogICAgIC8vIENvbnNvbGVCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIKLSAgICB2
b2lkIGNsZWFyTWVzc2FnZXMoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2b2lkIGdldExv
Z2dpbmdDaGFubmVscyhFcnJvclN0cmluZyYsIFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWw+PiYpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0
TG9nZ2luZ0NoYW5uZWxMZXZlbChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgY2hhbm5lbCwg
Y29uc3QgU3RyaW5nJiBsZXZlbCkgb3ZlcnJpZGU7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6
RXJyb3JTdHJpbmdPcjx2b2lkPiBjbGVhck1lc3NhZ2VzKCk7CisgICAgSW5zcGVjdG9yOjpQcm90
b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29s
OjpDb25zb2xlOjpDaGFubmVsPj4+IGdldExvZ2dpbmdDaGFubmVscygpOworICAgIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc2V0TG9nZ2luZ0NoYW5uZWxMZXZlbChJ
bnNwZWN0b3I6OlByb3RvY29sOjpDb25zb2xlOjpDaGFubmVsU291cmNlLCBJbnNwZWN0b3I6OlBy
b3RvY29sOjpDb25zb2xlOjpDaGFubmVsTGV2ZWwpOwogCiBwcml2YXRlOgogICAgIEluc3RydW1l
bnRpbmdBZ2VudHMmIG1faW5zdHJ1bWVudGluZ0FnZW50czsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlRE9NRGVidWdnZXJBZ2VudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZURPTURlYnVnZ2VyQWdlbnQu
Y3BwCmluZGV4IDdjNWZmYTRlMzgzZjUyY2FiNWUyYTI3ZmQ5MTU5MDlmYmNlZjUxNGMuLmM4OGJi
ZGMwM2QyNTQxMGZiNjk1OGIwZjA5YWZjNWJmMTg4ZGIyNTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlRE9NRGVidWdnZXJBZ2VudC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VET01EZWJ1Z2dlckFn
ZW50LmNwcApAQCAtNjksODQgKzY5LDc0IEBAIHZvaWQgUGFnZURPTURlYnVnZ2VyQWdlbnQ6OmRp
c2FibGUoKQogICAgIEluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQ6OmRpc2FibGUoKTsKIH0KIAot
dm9pZCBQYWdlRE9NRGVidWdnZXJBZ2VudDo6c2V0RE9NQnJlYWtwb2ludChFcnJvclN0cmluZyYg
ZXJyb3JTdHJpbmcsIGludCBub2RlSWQsIGNvbnN0IFN0cmluZyYgdHlwZVN0cmluZywgY29uc3Qg
SlNPTjo6T2JqZWN0KiBvcHRpb25zUGF5bG9hZCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZv
aWQ+IFBhZ2VET01EZWJ1Z2dlckFnZW50OjpzZXRET01CcmVha3BvaW50KFByb3RvY29sOjpET006
Ok5vZGVJZCBub2RlSWQsIFByb3RvY29sOjpET01EZWJ1Z2dlcjo6RE9NQnJlYWtwb2ludFR5cGUg
dHlwZSwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBvcHRpb25zKQogeworICAgIFByb3RvY29sOjpF
cnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIGF1dG8qIGRvbUFnZW50ID0gbV9pbnN0cnVt
ZW50aW5nQWdlbnRzLnBlcnNpc3RlbnRET01BZ2VudCgpOwotICAgIGlmICghZG9tQWdlbnQpIHsK
LSAgICAgICAgZXJyb3JTdHJpbmcgPSAiRE9NIGRvbWFpbiBtdXN0IGJlIGVuYWJsZWQiX3M7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKCFkb21BZ2VudCkKKyAgICAgICAgcmV0dXJu
IG1ha2VVbmV4cGVjdGVkKCJET00gZG9tYWluIG11c3QgYmUgZW5hYmxlZCJfcyk7CiAKICAgICBO
b2RlKiBub2RlID0gZG9tQWdlbnQtPmFzc2VydE5vZGUoZXJyb3JTdHJpbmcsIG5vZGVJZCk7CiAg
ICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBl
Y3RlZChlcnJvclN0cmluZyk7CiAKLSAgICBhdXRvIHR5cGUgPSBJbnNwZWN0b3I6OlByb3RvY29s
OjpJbnNwZWN0b3JIZWxwZXJzOjpwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6RE9NRGVidWdnZXI6OkRPTUJyZWFrcG9pbnRUeXBlPih0eXBlU3RyaW5nKTsKLSAg
ICBpZiAoIXR5cGUpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSBtYWtlU3RyaW5nKCJVbmtub3du
IHR5cGU6ICJfcywgdHlwZVN0cmluZyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBh
dXRvIGJyZWFrcG9pbnQgPSBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkZWJ1Z2dlckJyZWFrcG9p
bnRGcm9tUGF5bG9hZChlcnJvclN0cmluZywgb3B0aW9uc1BheWxvYWQpOworICAgIGF1dG8gYnJl
YWtwb2ludCA9IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRlYnVnZ2VyQnJlYWtwb2ludEZyb21Q
YXlsb2FkKGVycm9yU3RyaW5nLCBXVEZNb3ZlKG9wdGlvbnMpKTsKICAgICBpZiAoIWJyZWFrcG9p
bnQpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9y
U3RyaW5nKTsKIAotICAgIHN3aXRjaCAoKnR5cGUpIHsKLSAgICBjYXNlIEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRPTURlYnVnZ2VyOjpET01CcmVha3BvaW50VHlwZTo6U3VidHJlZU1vZGlmaWVkOgor
ICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgUHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpET01C
cmVha3BvaW50VHlwZTo6U3VidHJlZU1vZGlmaWVkOgogICAgICAgICBpZiAoIW1fZG9tU3VidHJl
ZU1vZGlmaWVkQnJlYWtwb2ludHMuYWRkKG5vZGUsIGJyZWFrcG9pbnQucmVsZWFzZU5vbk51bGwo
KSkpCi0gICAgICAgICAgICBlcnJvclN0cmluZyA9ICJCcmVha3BvaW50IGZvciBnaXZlbiBub2Rl
IGFuZCBnaXZlbiB0eXBlIGFscmVhZHkgZXhpc3RzIl9zOwotICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkJyZWFrcG9pbnQgZm9yIGdpdmVuIG5vZGUg
YW5kIGdpdmVuIHR5cGUgYWxyZWFkeSBleGlzdHMiX3MpOworICAgICAgICByZXR1cm4geyB9Owog
Ci0gICAgY2FzZSBJbnNwZWN0b3I6OlByb3RvY29sOjpET01EZWJ1Z2dlcjo6RE9NQnJlYWtwb2lu
dFR5cGU6OkF0dHJpYnV0ZU1vZGlmaWVkOgorICAgIGNhc2UgUHJvdG9jb2w6OkRPTURlYnVnZ2Vy
OjpET01CcmVha3BvaW50VHlwZTo6QXR0cmlidXRlTW9kaWZpZWQ6CiAgICAgICAgIGlmICghbV9k
b21BdHRyaWJ1dGVNb2RpZmllZEJyZWFrcG9pbnRzLmFkZChub2RlLCBicmVha3BvaW50LnJlbGVh
c2VOb25OdWxsKCkpKQotICAgICAgICAgICAgZXJyb3JTdHJpbmcgPSAiQnJlYWtwb2ludCBmb3Ig
Z2l2ZW4gbm9kZSBhbmQgZ2l2ZW4gdHlwZSBhbHJlYWR5IGV4aXN0cyJfczsKLSAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJCcmVha3BvaW50IGZvciBn
aXZlbiBub2RlIGFuZCBnaXZlbiB0eXBlIGFscmVhZHkgZXhpc3RzIl9zKTsKKyAgICAgICAgcmV0
dXJuIHsgfTsKIAotICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NRGVidWdnZXI6OkRP
TUJyZWFrcG9pbnRUeXBlOjpOb2RlUmVtb3ZlZDoKKyAgICBjYXNlIFByb3RvY29sOjpET01EZWJ1
Z2dlcjo6RE9NQnJlYWtwb2ludFR5cGU6Ok5vZGVSZW1vdmVkOgogICAgICAgICBpZiAoIW1fZG9t
Tm9kZVJlbW92ZWRCcmVha3BvaW50cy5hZGQobm9kZSwgYnJlYWtwb2ludC5yZWxlYXNlTm9uTnVs
bCgpKSkKLSAgICAgICAgICAgIGVycm9yU3RyaW5nID0gIkJyZWFrcG9pbnQgZm9yIGdpdmVuIG5v
ZGUgYW5kIGdpdmVuIHR5cGUgYWxyZWFkeSBleGlzdHMiX3M7Ci0gICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiQnJlYWtwb2ludCBmb3IgZ2l2ZW4gbm9k
ZSBhbmQgZ2l2ZW4gdHlwZSBhbHJlYWR5IGV4aXN0cyJfcyk7CisgICAgICAgIHJldHVybiB7IH07
CiAgICAgfQogCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIG1ha2VVbmV4
cGVjdGVkKCJOb3Qgc3VwcG9ydGVkIik7CiB9CiAKLXZvaWQgUGFnZURPTURlYnVnZ2VyQWdlbnQ6
OnJlbW92ZURPTUJyZWFrcG9pbnQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlk
LCBjb25zdCBTdHJpbmcmIHR5cGVTdHJpbmcpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lk
PiBQYWdlRE9NRGVidWdnZXJBZ2VudDo6cmVtb3ZlRE9NQnJlYWtwb2ludChQcm90b2NvbDo6RE9N
OjpOb2RlSWQgbm9kZUlkLCBQcm90b2NvbDo6RE9NRGVidWdnZXI6OkRPTUJyZWFrcG9pbnRUeXBl
IHR5cGUpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAgICAg
YXV0byogZG9tQWdlbnQgPSBtX2luc3RydW1lbnRpbmdBZ2VudHMucGVyc2lzdGVudERPTUFnZW50
KCk7Ci0gICAgaWYgKCFkb21BZ2VudCkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJET00gZG9t
YWluIG11c3QgYmUgZW5hYmxlZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAo
IWRvbUFnZW50KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkRPTSBkb21haW4gbXVz
dCBiZSBlbmFibGVkIl9zKTsKIAogICAgIE5vZGUqIG5vZGUgPSBkb21BZ2VudC0+YXNzZXJ0Tm9k
ZShlcnJvclN0cmluZywgbm9kZUlkKTsKICAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJldHVybjsK
KyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAotICAgIGF1dG8g
dHlwZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6Okluc3BlY3RvckhlbHBlcnM6OnBhcnNlRW51bVZh
bHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpET01EZWJ1Z2dlcjo6RE9NQnJlYWtw
b2ludFR5cGU+KHR5cGVTdHJpbmcpOwotICAgIGlmICghdHlwZSkgewotICAgICAgICBlcnJvclN0
cmluZyA9IG1ha2VTdHJpbmcoIlVua25vd24gdHlwZTogIl9zLCB0eXBlU3RyaW5nKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIHN3aXRjaCAoKnR5cGUpIHsKLSAgICBjYXNlIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpET01CcmVha3BvaW50VHlwZTo6U3VidHJlZU1v
ZGlmaWVkOgorICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgUHJvdG9jb2w6OkRPTURlYnVn
Z2VyOjpET01CcmVha3BvaW50VHlwZTo6U3VidHJlZU1vZGlmaWVkOgogICAgICAgICBpZiAoIW1f
ZG9tU3VidHJlZU1vZGlmaWVkQnJlYWtwb2ludHMucmVtb3ZlKG5vZGUpKQotICAgICAgICAgICAg
ZXJyb3JTdHJpbmcgPSAiQnJlYWtwb2ludCBmb3IgZ2l2ZW4gbm9kZSBhbmQgZ2l2ZW4gdHlwZSBt
aXNzaW5nIl9zOwotICAgICAgICByZXR1cm47CisgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoIkJyZWFrcG9pbnQgZm9yIGdpdmVuIG5vZGUgYW5kIGdpdmVuIHR5cGUgbWlzc2luZyJf
cyk7CisgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBjYXNlIEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRPTURlYnVnZ2VyOjpET01CcmVha3BvaW50VHlwZTo6QXR0cmlidXRlTW9kaWZpZWQ6CisgICAg
Y2FzZSBQcm90b2NvbDo6RE9NRGVidWdnZXI6OkRPTUJyZWFrcG9pbnRUeXBlOjpBdHRyaWJ1dGVN
b2RpZmllZDoKICAgICAgICAgaWYgKCFtX2RvbUF0dHJpYnV0ZU1vZGlmaWVkQnJlYWtwb2ludHMu
cmVtb3ZlKG5vZGUpKQotICAgICAgICAgICAgZXJyb3JTdHJpbmcgPSAiQnJlYWtwb2ludCBmb3Ig
Z2l2ZW4gbm9kZSBhbmQgZ2l2ZW4gdHlwZSBtaXNzaW5nIl9zOwotICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkJyZWFrcG9pbnQgZm9yIGdpdmVuIG5v
ZGUgYW5kIGdpdmVuIHR5cGUgbWlzc2luZyJfcyk7CisgICAgICAgIHJldHVybiB7IH07CiAKLSAg
ICBjYXNlIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpET01CcmVha3BvaW50VHlw
ZTo6Tm9kZVJlbW92ZWQ6CisgICAgY2FzZSBQcm90b2NvbDo6RE9NRGVidWdnZXI6OkRPTUJyZWFr
cG9pbnRUeXBlOjpOb2RlUmVtb3ZlZDoKICAgICAgICAgaWYgKCFtX2RvbU5vZGVSZW1vdmVkQnJl
YWtwb2ludHMucmVtb3ZlKG5vZGUpKQotICAgICAgICAgICAgZXJyb3JTdHJpbmcgPSAiQnJlYWtw
b2ludCBmb3IgZ2l2ZW4gbm9kZSBhbmQgZ2l2ZW4gdHlwZSBtaXNzaW5nIl9zOwotICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkJyZWFrcG9pbnQgZm9y
IGdpdmVuIG5vZGUgYW5kIGdpdmVuIHR5cGUgbWlzc2luZyJfcyk7CisgICAgICAgIHJldHVybiB7
IH07CiAgICAgfQogCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKCJOb3Qgc3VwcG9ydGVkIik7CiB9CiAKIHZvaWQgUGFnZURPTURlYnVnZ2VyQWdl
bnQ6Om1haW5GcmFtZU5hdmlnYXRlZCgpCkBAIC0yMTMsNyArMjAzLDcgQEAgdm9pZCBQYWdlRE9N
RGVidWdnZXJBZ2VudDo6d2lsbEluc2VydERPTU5vZGUoTm9kZSYgcGFyZW50KQogCiAgICAgQVNT
RVJUKGNsb3Nlc3RCcmVha3BvaW50T3duZXIpOwogCi0gICAgYXV0byBwYXVzZURhdGEgPSBidWls
ZFBhdXNlRGF0YUZvckRPTUJyZWFrcG9pbnQoSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NRGVidWdn
ZXI6OkRPTUJyZWFrcG9pbnRUeXBlOjpTdWJ0cmVlTW9kaWZpZWQsICpjbG9zZXN0QnJlYWtwb2lu
dE93bmVyKTsKKyAgICBhdXRvIHBhdXNlRGF0YSA9IGJ1aWxkUGF1c2VEYXRhRm9yRE9NQnJlYWtw
b2ludChQcm90b2NvbDo6RE9NRGVidWdnZXI6OkRPTUJyZWFrcG9pbnRUeXBlOjpTdWJ0cmVlTW9k
aWZpZWQsICpjbG9zZXN0QnJlYWtwb2ludE93bmVyKTsKICAgICBwYXVzZURhdGEtPnNldEJvb2xl
YW4oImluc2VydGlvbiIsIHRydWUpOwogICAgIC8vIEZJWE1FOiA8aHR0cHM6Ly93ZWJraXQub3Jn
L2IvMjEzNDk5PiBXZWIgSW5zcGVjdG9yOiBhbGxvdyBET00gbm9kZXMgdG8gYmUgaW5zdHJ1bWVu
dGVkIGF0IGFueSBwb2ludCwgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZSBtYWluIGRvY3VtZW50
IGhhcyBhbHNvIGJlZW4gaW5zdHJ1bWVudGVkCiAgICAgLy8gSW5jbHVkZSB0aGUgbmV3IGNoaWxk
IG5vZGUgSUQgc28gdGhlIGZyb250ZW5kIGNhbiBzaG93IHRoZSBub2RlIHRoYXQncyBhYm91dCB0
byBiZSBpbnNlcnRlZC4KQEAgLTIzMCw3ICsyMjAsNyBAQCB2b2lkIFBhZ2VET01EZWJ1Z2dlckFn
ZW50Ojp3aWxsUmVtb3ZlRE9NTm9kZShOb2RlJiBub2RlKQogCiAgICAgT3B0aW9uYWw8c2l6ZV90
PiBjbG9zZXN0RGlzdGFuY2U7CiAgICAgUmVmUHRyPEpTQzo6QnJlYWtwb2ludD4gY2xvc2VzdEJy
ZWFrcG9pbnQ7Ci0gICAgT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NRGVidWdnZXI6
OkRPTUJyZWFrcG9pbnRUeXBlPiBjbG9zZXN0QnJlYWtwb2ludFR5cGU7CisgICAgT3B0aW9uYWw8
UHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpET01CcmVha3BvaW50VHlwZT4gY2xvc2VzdEJyZWFrcG9p
bnRUeXBlOwogICAgIE5vZGUqIGNsb3Nlc3RCcmVha3BvaW50T3duZXIgPSBudWxscHRyOwogCiAg
ICAgZm9yIChhdXRvIFticmVha3BvaW50T3duZXIsIGJyZWFrcG9pbnRdIDogbV9kb21Ob2RlUmVt
b3ZlZEJyZWFrcG9pbnRzKSB7CkBAIC0yNDEsNyArMjMxLDcgQEAgdm9pZCBQYWdlRE9NRGVidWdn
ZXJBZ2VudDo6d2lsbFJlbW92ZURPTU5vZGUoTm9kZSYgbm9kZSkKICAgICAgICAgaWYgKCFjbG9z
ZXN0RGlzdGFuY2UgfHwgZGlzdGFuY2UgPCBjbG9zZXN0RGlzdGFuY2UpIHsKICAgICAgICAgICAg
IGNsb3Nlc3REaXN0YW5jZSA9IGRpc3RhbmNlOwogICAgICAgICAgICAgY2xvc2VzdEJyZWFrcG9p
bnQgPSBicmVha3BvaW50LmNvcHlSZWYoKTsKLSAgICAgICAgICAgIGNsb3Nlc3RCcmVha3BvaW50
VHlwZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpET01CcmVha3BvaW50VHlw
ZTo6Tm9kZVJlbW92ZWQ7CisgICAgICAgICAgICBjbG9zZXN0QnJlYWtwb2ludFR5cGUgPSBQcm90
b2NvbDo6RE9NRGVidWdnZXI6OkRPTUJyZWFrcG9pbnRUeXBlOjpOb2RlUmVtb3ZlZDsKICAgICAg
ICAgICAgIGNsb3Nlc3RCcmVha3BvaW50T3duZXIgPSBicmVha3BvaW50T3duZXI7CiAgICAgICAg
IH0KICAgICB9CkBAIC0yNTUsNyArMjQ1LDcgQEAgdm9pZCBQYWdlRE9NRGVidWdnZXJBZ2VudDo6
d2lsbFJlbW92ZURPTU5vZGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIGlmICghY2xvc2VzdERp
c3RhbmNlIHx8IGRpc3RhbmNlIDwgY2xvc2VzdERpc3RhbmNlKSB7CiAgICAgICAgICAgICAgICAg
Y2xvc2VzdERpc3RhbmNlID0gZGlzdGFuY2U7CiAgICAgICAgICAgICAgICAgY2xvc2VzdEJyZWFr
cG9pbnQgPSBicmVha3BvaW50LmNvcHlSZWYoKTsKLSAgICAgICAgICAgICAgICBjbG9zZXN0QnJl
YWtwb2ludFR5cGUgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpET01EZWJ1Z2dlcjo6RE9NQnJlYWtw
b2ludFR5cGU6OlN1YnRyZWVNb2RpZmllZDsKKyAgICAgICAgICAgICAgICBjbG9zZXN0QnJlYWtw
b2ludFR5cGUgPSBQcm90b2NvbDo6RE9NRGVidWdnZXI6OkRPTUJyZWFrcG9pbnRUeXBlOjpTdWJ0
cmVlTW9kaWZpZWQ7CiAgICAgICAgICAgICAgICAgY2xvc2VzdEJyZWFrcG9pbnRPd25lciA9IGJy
ZWFrcG9pbnRPd25lcjsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMjk2LDcgKzI4Niw3
IEBAIHZvaWQgUGFnZURPTURlYnVnZ2VyQWdlbnQ6OndpbGxNb2RpZnlET01BdHRyKEVsZW1lbnQm
IGVsZW1lbnQpCiAgICAgaWYgKGl0ID09IG1fZG9tQXR0cmlidXRlTW9kaWZpZWRCcmVha3BvaW50
cy5lbmQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byBwYXVzZURhdGEgPSBidWlsZFBh
dXNlRGF0YUZvckRPTUJyZWFrcG9pbnQoSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NRGVidWdnZXI6
OkRPTUJyZWFrcG9pbnRUeXBlOjpBdHRyaWJ1dGVNb2RpZmllZCwgZWxlbWVudCk7CisgICAgYXV0
byBwYXVzZURhdGEgPSBidWlsZFBhdXNlRGF0YUZvckRPTUJyZWFrcG9pbnQoUHJvdG9jb2w6OkRP
TURlYnVnZ2VyOjpET01CcmVha3BvaW50VHlwZTo6QXR0cmlidXRlTW9kaWZpZWQsIGVsZW1lbnQp
OwogICAgIG1fZGVidWdnZXJBZ2VudC0+YnJlYWtQcm9ncmFtKEluc3BlY3Rvcjo6RGVidWdnZXJG
cm9udGVuZERpc3BhdGNoZXI6OlJlYXNvbjo6RE9NLCBXVEZNb3ZlKHBhdXNlRGF0YSksIGl0LT52
YWx1ZS5jb3B5UmVmKCkpOwogfQogCkBAIC0zMzMsMjcgKzMyMywyOCBAQCB2b2lkIFBhZ2VET01E
ZWJ1Z2dlckFnZW50Ojp3aWxsSW52YWxpZGF0ZVN0eWxlQXR0cihFbGVtZW50JiBlbGVtZW50KQog
ICAgIGlmIChpdCA9PSBtX2RvbUF0dHJpYnV0ZU1vZGlmaWVkQnJlYWtwb2ludHMuZW5kKCkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gcGF1c2VEYXRhID0gYnVpbGRQYXVzZURhdGFGb3JE
T01CcmVha3BvaW50KEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpET01CcmVha3Bv
aW50VHlwZTo6QXR0cmlidXRlTW9kaWZpZWQsIGVsZW1lbnQpOworICAgIGF1dG8gcGF1c2VEYXRh
ID0gYnVpbGRQYXVzZURhdGFGb3JET01CcmVha3BvaW50KFByb3RvY29sOjpET01EZWJ1Z2dlcjo6
RE9NQnJlYWtwb2ludFR5cGU6OkF0dHJpYnV0ZU1vZGlmaWVkLCBlbGVtZW50KTsKICAgICBtX2Rl
YnVnZ2VyQWdlbnQtPmJyZWFrUHJvZ3JhbShJbnNwZWN0b3I6OkRlYnVnZ2VyRnJvbnRlbmREaXNw
YXRjaGVyOjpSZWFzb246OkRPTSwgV1RGTW92ZShwYXVzZURhdGEpLCBpdC0+dmFsdWUuY29weVJl
ZigpKTsKIH0KIAotdm9pZCBQYWdlRE9NRGVidWdnZXJBZ2VudDo6c2V0QW5pbWF0aW9uRnJhbWVC
cmVha3BvaW50KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgUmVmUHRyPEpTQzo6QnJlYWtwb2lu
dD4mJiBicmVha3BvaW50KQorYm9vbCBQYWdlRE9NRGVidWdnZXJBZ2VudDo6c2V0QW5pbWF0aW9u
RnJhbWVCcmVha3BvaW50KFByb3RvY29sOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIFJlZlB0
cjxKU0M6OkJyZWFrcG9pbnQ+JiYgYnJlYWtwb2ludCkKIHsKICAgICBpZiAoIW1fcGF1c2VPbkFs
bEFuaW1hdGlvbkZyYW1lc0JyZWFrcG9pbnQgPT0gIWJyZWFrcG9pbnQpIHsKICAgICAgICAgZXJy
b3JTdHJpbmcgPSBtX3BhdXNlT25BbGxBbmltYXRpb25GcmFtZXNCcmVha3BvaW50ID8gIkJyZWFr
cG9pbnQgZm9yIEFuaW1hdGlvbkZyYW1lIGFscmVhZHkgZXhpc3RzIl9zIDogIkJyZWFrcG9pbnQg
Zm9yIEFuaW1hdGlvbkZyYW1lIG1pc3NpbmciX3M7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIG1fcGF1c2VPbkFsbEFuaW1hdGlvbkZyYW1lc0Jy
ZWFrcG9pbnQgPSBXVEZNb3ZlKGJyZWFrcG9pbnQpOworICAgIHJldHVybiB0cnVlOwogfQogCi1S
ZWY8SlNPTjo6T2JqZWN0PiBQYWdlRE9NRGVidWdnZXJBZ2VudDo6YnVpbGRQYXVzZURhdGFGb3JE
T01CcmVha3BvaW50KEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpET01CcmVha3Bv
aW50VHlwZSBicmVha3BvaW50VHlwZSwgTm9kZSYgYnJlYWtwb2ludE93bmVyKQorUmVmPEpTT046
Ok9iamVjdD4gUGFnZURPTURlYnVnZ2VyQWdlbnQ6OmJ1aWxkUGF1c2VEYXRhRm9yRE9NQnJlYWtw
b2ludChQcm90b2NvbDo6RE9NRGVidWdnZXI6OkRPTUJyZWFrcG9pbnRUeXBlIGJyZWFrcG9pbnRU
eXBlLCBOb2RlJiBicmVha3BvaW50T3duZXIpCiB7CiAgICAgQVNTRVJUKG1fZGVidWdnZXJBZ2Vu
dC0+YnJlYWtwb2ludHNBY3RpdmUoKSk7CiAgICAgQVNTRVJUKG1fZG9tU3VidHJlZU1vZGlmaWVk
QnJlYWtwb2ludHMuY29udGFpbnMoJmJyZWFrcG9pbnRPd25lcikgfHwgbV9kb21BdHRyaWJ1dGVN
b2RpZmllZEJyZWFrcG9pbnRzLmNvbnRhaW5zKCZicmVha3BvaW50T3duZXIpIHx8IG1fZG9tTm9k
ZVJlbW92ZWRCcmVha3BvaW50cy5jb250YWlucygmYnJlYWtwb2ludE93bmVyKSk7CiAKICAgICBh
dXRvIHBhdXNlRGF0YSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgcGF1c2VEYXRhLT5z
ZXRTdHJpbmcoInR5cGUiLCBJbnNwZWN0b3I6OlByb3RvY29sOjpJbnNwZWN0b3JIZWxwZXJzOjpn
ZXRFbnVtQ29uc3RhbnRWYWx1ZShicmVha3BvaW50VHlwZSkpOworICAgIHBhdXNlRGF0YS0+c2V0
U3RyaW5nKCJ0eXBlIiwgUHJvdG9jb2w6OkhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKGJy
ZWFrcG9pbnRUeXBlKSk7CiAgICAgaWYgKGF1dG8qIGRvbUFnZW50ID0gbV9pbnN0cnVtZW50aW5n
QWdlbnRzLnBlcnNpc3RlbnRET01BZ2VudCgpKSB7CiAgICAgICAgIGlmIChhdXRvIGJyZWFrcG9p
bnRPd25lck5vZGVJZCA9IGRvbUFnZW50LT5wdXNoTm9kZVRvRnJvbnRlbmQoJmJyZWFrcG9pbnRP
d25lcikpCiAgICAgICAgICAgICBwYXVzZURhdGEtPnNldEludGVnZXIoIm5vZGVJZCIsIGJyZWFr
cG9pbnRPd25lck5vZGVJZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
YWdlbnRzL3BhZ2UvUGFnZURPTURlYnVnZ2VyQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9hZ2VudHMvcGFnZS9QYWdlRE9NRGVidWdnZXJBZ2VudC5oCmluZGV4IGFkMDFjNjc3ZTVk
MjIyNWEwNjVjZjAxMDQ1MTU2OWIxNzk0ZDY5YTkuLmQ4NzI4MjkyNWVjNjkzMTBlMGJjMGU3ODgz
Y2RjYTUwOGQxMDM1MjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2Vu
dHMvcGFnZS9QYWdlRE9NRGVidWdnZXJBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9hZ2VudHMvcGFnZS9QYWdlRE9NRGVidWdnZXJBZ2VudC5oCkBAIC0zNiwyMSArMzYsMTkg
QEAgY2xhc3MgRWxlbWVudDsKIGNsYXNzIEZyYW1lOwogY2xhc3MgTm9kZTsKIAotdHlwZWRlZiBT
dHJpbmcgRXJyb3JTdHJpbmc7Ci0KIGNsYXNzIFBhZ2VET01EZWJ1Z2dlckFnZW50IGZpbmFsIDog
cHVibGljIEluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQgewogcHVibGljOgogICAgIFBhZ2VET01E
ZWJ1Z2dlckFnZW50KFBhZ2VBZ2VudENvbnRleHQmLCBJbnNwZWN0b3I6Okluc3BlY3RvckRlYnVn
Z2VyQWdlbnQqKTsKLSAgICB+UGFnZURPTURlYnVnZ2VyQWdlbnQoKSBvdmVycmlkZTsKKyAgICB+
UGFnZURPTURlYnVnZ2VyQWdlbnQoKTsKIAotICAgIGJvb2wgZW5hYmxlZCgpIGNvbnN0IG92ZXJy
aWRlOworICAgIGJvb2wgZW5hYmxlZCgpIGNvbnN0OwogCiAgICAgLy8gRE9NRGVidWdnZXJCYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXIKLSAgICB2b2lkIHNldERPTUJyZWFrcG9pbnQoRXJyb3JTdHJp
bmcmLCBpbnQgbm9kZUlkLCBjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IEpTT046Ok9iamVjdCog
b3B0aW9ucykgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZW1vdmVET01CcmVha3BvaW50KEVycm9yU3Ry
aW5nJiwgaW50IG5vZGVJZCwgY29uc3QgU3RyaW5nJiB0eXBlKSBvdmVycmlkZTsKKyAgICBJbnNw
ZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHNldERPTUJyZWFrcG9pbnQoSW5z
cGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTURl
YnVnZ2VyOjpET01CcmVha3BvaW50VHlwZSwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBvcHRpb25z
KTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHJlbW92ZURP
TUJyZWFrcG9pbnQoSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQsIEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpET01CcmVha3BvaW50VHlwZSk7CiAKICAgICAvLyBJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb24KLSAgICB2b2lkIG1haW5GcmFtZU5hdmlnYXRlZCgpIGZpbmFs
OworICAgIHZvaWQgbWFpbkZyYW1lTmF2aWdhdGVkKCk7CiAgICAgdm9pZCBmcmFtZURvY3VtZW50
VXBkYXRlZChGcmFtZSYpOwogICAgIHZvaWQgd2lsbEluc2VydERPTU5vZGUoTm9kZSYgcGFyZW50
KTsKICAgICB2b2lkIHdpbGxSZW1vdmVET01Ob2RlKE5vZGUmKTsKQEAgLTYxLDEwICs1OSwxMCBA
QCBwdWJsaWM6CiAgICAgdm9pZCBkaWRGaXJlQW5pbWF0aW9uRnJhbWUoKTsKIAogcHJpdmF0ZToK
LSAgICB2b2lkIGVuYWJsZSgpIG92ZXJyaWRlOwotICAgIHZvaWQgZGlzYWJsZSgpIG92ZXJyaWRl
OworICAgIHZvaWQgZW5hYmxlKCk7CisgICAgdm9pZCBkaXNhYmxlKCk7CiAKLSAgICB2b2lkIHNl
dEFuaW1hdGlvbkZyYW1lQnJlYWtwb2ludChFcnJvclN0cmluZyYsIFJlZlB0cjxKU0M6OkJyZWFr
cG9pbnQ+JiYpIG92ZXJyaWRlOworICAgIGJvb2wgc2V0QW5pbWF0aW9uRnJhbWVCcmVha3BvaW50
KEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nJiwgUmVmUHRyPEpTQzo6QnJlYWtwb2lu
dD4mJik7CiAKICAgICBSZWY8SlNPTjo6T2JqZWN0PiBidWlsZFBhdXNlRGF0YUZvckRPTUJyZWFr
cG9pbnQoSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NRGVidWdnZXI6OkRPTUJyZWFrcG9pbnRUeXBl
LCBOb2RlJiBicmVha3BvaW50T3duZXIpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZURlYnVnZ2VyQWdlbnQuY3BwIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VEZWJ1Z2dlckFnZW50LmNwcAppbmRleCAwYzIw
Mzk4MjczM2I0ZWU4YmFiZDA1NThmYTMzYjJhMWRjNGY4ZjI1Li42MTg3MjY4YmQyNzUxODFlOThm
NDVlZTBmYTdlMTZhNzUwOWJjMTYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvYWdlbnRzL3BhZ2UvUGFnZURlYnVnZ2VyQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlRGVidWdnZXJBZ2VudC5jcHAKQEAgLTY4LDI2ICs2
OCwyNSBAQCBib29sIFBhZ2VEZWJ1Z2dlckFnZW50OjplbmFibGVkKCkgY29uc3QKICAgICByZXR1
cm4gbV9pbnN0cnVtZW50aW5nQWdlbnRzLmVuYWJsZWRQYWdlRGVidWdnZXJBZ2VudCgpID09IHRo
aXMgJiYgV2ViRGVidWdnZXJBZ2VudDo6ZW5hYmxlZCgpOwogfQogCi12b2lkIFBhZ2VEZWJ1Z2dl
ckFnZW50OjpldmFsdWF0ZU9uQ2FsbEZyYW1lKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29u
c3QgU3RyaW5nJiBjYWxsRnJhbWVJZCwgY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBjb25zdCBT
dHJpbmcqIG9iamVjdEdyb3VwLCBjb25zdCBib29sKiBpbmNsdWRlQ29tbWFuZExpbmVBUEksIGNv
bnN0IGJvb2wqIGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29sZSwgY29uc3QgYm9v
bCogcmV0dXJuQnlWYWx1ZSwgY29uc3QgYm9vbCogZ2VuZXJhdGVQcmV2aWV3LCBjb25zdCBib29s
KiBzYXZlUmVzdWx0LCBjb25zdCBib29sKiBlbXVsYXRlVXNlckdlc3R1cmUsIFJlZlB0cjxQcm90
b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0LCBPcHRpb25hbDxib29sPiYgd2Fz
VGhyb3duLCBPcHRpb25hbDxpbnQ+JiBzYXZlZFJlc3VsdEluZGV4KQorUHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8c3RkOjp0dXBsZTxSZWY8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4s
IE9wdGlvbmFsPGJvb2w+IC8qIHdhc1Rocm93biAqLywgT3B0aW9uYWw8aW50PiAvKiBzYXZlZFJl
c3VsdEluZGV4ICovPj4gUGFnZURlYnVnZ2VyQWdlbnQ6OmV2YWx1YXRlT25DYWxsRnJhbWUoY29u
c3QgUHJvdG9jb2w6OkRlYnVnZ2VyOjpDYWxsRnJhbWVJZCYgY2FsbEZyYW1lSWQsIGNvbnN0IFN0
cmluZyYgZXhwcmVzc2lvbiwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCwgT3B0aW9uYWw8Ym9v
bD4mJiBpbmNsdWRlQ29tbWFuZExpbmVBUEksIE9wdGlvbmFsPGJvb2w+JiYgZG9Ob3RQYXVzZU9u
RXhjZXB0aW9uc0FuZE11dGVDb25zb2xlLCBPcHRpb25hbDxib29sPiYmIHJldHVybkJ5VmFsdWUs
IE9wdGlvbmFsPGJvb2w+JiYgZ2VuZXJhdGVQcmV2aWV3LCBPcHRpb25hbDxib29sPiYmIHNhdmVS
ZXN1bHQsIE9wdGlvbmFsPGJvb2w+JiYgZW11bGF0ZVVzZXJHZXN0dXJlKQogewotICAgIGF1dG8g
c2hvdWxkRW11bGF0ZVVzZXJHZXN0dXJlID0gZW11bGF0ZVVzZXJHZXN0dXJlICYmICplbXVsYXRl
VXNlckdlc3R1cmU7Ci0gICAgVXNlckdlc3R1cmVFbXVsYXRpb25TY29wZSB1c2VyR2VzdHVyZVNj
b3BlKG1faW5zcGVjdGVkUGFnZSwgc2hvdWxkRW11bGF0ZVVzZXJHZXN0dXJlKTsKKyAgICBVc2Vy
R2VzdHVyZUVtdWxhdGlvblNjb3BlIHVzZXJHZXN0dXJlU2NvcGUobV9pbnNwZWN0ZWRQYWdlLCBl
bXVsYXRlVXNlckdlc3R1cmUgJiYgKmVtdWxhdGVVc2VyR2VzdHVyZSk7CiAKLSAgICBXZWJEZWJ1
Z2dlckFnZW50OjpldmFsdWF0ZU9uQ2FsbEZyYW1lKGVycm9yU3RyaW5nLCBjYWxsRnJhbWVJZCwg
ZXhwcmVzc2lvbiwgb2JqZWN0R3JvdXAsIGluY2x1ZGVDb21tYW5kTGluZUFQSSwgZG9Ob3RQYXVz
ZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xlLCByZXR1cm5CeVZhbHVlLCBnZW5lcmF0ZVByZXZp
ZXcsIHNhdmVSZXN1bHQsIGVtdWxhdGVVc2VyR2VzdHVyZSwgcmVzdWx0LCB3YXNUaHJvd24sIHNh
dmVkUmVzdWx0SW5kZXgpOworICAgIHJldHVybiBXZWJEZWJ1Z2dlckFnZW50OjpldmFsdWF0ZU9u
Q2FsbEZyYW1lKGNhbGxGcmFtZUlkLCBleHByZXNzaW9uLCBvYmplY3RHcm91cCwgV1RGTW92ZShp
bmNsdWRlQ29tbWFuZExpbmVBUEkpLCBXVEZNb3ZlKGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRN
dXRlQ29uc29sZSksIFdURk1vdmUocmV0dXJuQnlWYWx1ZSksIFdURk1vdmUoZ2VuZXJhdGVQcmV2
aWV3KSwgV1RGTW92ZShzYXZlUmVzdWx0KSwgV1RGTW92ZShlbXVsYXRlVXNlckdlc3R1cmUpKTsK
IH0KIAotdm9pZCBQYWdlRGVidWdnZXJBZ2VudDo6ZW5hYmxlKCkKK3ZvaWQgUGFnZURlYnVnZ2Vy
QWdlbnQ6OmludGVybmFsRW5hYmxlKCkKIHsKICAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMuc2V0
RW5hYmxlZFBhZ2VEZWJ1Z2dlckFnZW50KHRoaXMpOwogCi0gICAgV2ViRGVidWdnZXJBZ2VudDo6
ZW5hYmxlKCk7CisgICAgV2ViRGVidWdnZXJBZ2VudDo6aW50ZXJuYWxFbmFibGUoKTsKIH0KIAot
dm9pZCBQYWdlRGVidWdnZXJBZ2VudDo6ZGlzYWJsZShib29sIGlzQmVpbmdEZXN0cm95ZWQpCit2
b2lkIFBhZ2VEZWJ1Z2dlckFnZW50OjppbnRlcm5hbERpc2FibGUoYm9vbCBpc0JlaW5nRGVzdHJv
eWVkKQogewogICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy5zZXRFbmFibGVkUGFnZURlYnVnZ2Vy
QWdlbnQobnVsbHB0cik7CiAKLSAgICBXZWJEZWJ1Z2dlckFnZW50OjpkaXNhYmxlKGlzQmVpbmdE
ZXN0cm95ZWQpOworICAgIFdlYkRlYnVnZ2VyQWdlbnQ6OmludGVybmFsRGlzYWJsZShpc0JlaW5n
RGVzdHJveWVkKTsKIH0KIAogU3RyaW5nIFBhZ2VEZWJ1Z2dlckFnZW50Ojpzb3VyY2VNYXBVUkxG
b3JTY3JpcHQoY29uc3QgSlNDOjpEZWJ1Z2dlcjo6U2NyaXB0JiBzY3JpcHQpCkBAIC0xMjYsNyAr
MTI1LDcgQEAgdm9pZCBQYWdlRGVidWdnZXJBZ2VudDo6YnJlYWtwb2ludEFjdGlvbkxvZyhKU0M6
OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFsT2IKICAgICBtX2luc3BlY3RlZFBhZ2UuY29u
c29sZSgpLmFkZE1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6SlMsIE1lc3NhZ2VMZXZlbDo6TG9nLCBt
ZXNzYWdlLCBjcmVhdGVTY3JpcHRDYWxsU3RhY2sobGV4aWNhbEdsb2JhbE9iamVjdCkpOwogfQog
Ci1JbmplY3RlZFNjcmlwdCBQYWdlRGVidWdnZXJBZ2VudDo6aW5qZWN0ZWRTY3JpcHRGb3JFdmFs
KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgaW50KiBleGVjdXRpb25Db250ZXh0SWQp
CitJbmplY3RlZFNjcmlwdCBQYWdlRGVidWdnZXJBZ2VudDo6aW5qZWN0ZWRTY3JpcHRGb3JFdmFs
KFByb3RvY29sOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIE9wdGlvbmFsPFByb3RvY29sOjpS
dW50aW1lOjpFeGVjdXRpb25Db250ZXh0SWQ+JiYgZXhlY3V0aW9uQ29udGV4dElkKQogewogICAg
IGlmICghZXhlY3V0aW9uQ29udGV4dElkKSB7CiAgICAgICAgIEpTQzo6SlNHbG9iYWxPYmplY3Qq
IHNjcmlwdFN0YXRlID0gbWFpbldvcmxkRXhlY1N0YXRlKCZtX2luc3BlY3RlZFBhZ2UubWFpbkZy
YW1lKCkpOwpAQCAtMTUzLDggKzE1Miw3IEBAIHZvaWQgUGFnZURlYnVnZ2VyQWdlbnQ6Om1haW5G
cmFtZVN0YXJ0ZWRMb2FkaW5nKCkKICAgICBpZiAoaXNQYXVzZWQoKSkgewogICAgICAgICBzZXRT
dXBwcmVzc0FsbFBhdXNlcyh0cnVlKTsKIAotICAgICAgICBFcnJvclN0cmluZyBpZ25vcmVkOwot
ICAgICAgICByZXN1bWUoaWdub3JlZCk7CisgICAgICAgIHJlc3VtZSgpOwogICAgIH0KIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VEZWJ1
Z2dlckFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZURl
YnVnZ2VyQWdlbnQuaAppbmRleCA0YzI3ZGQxYzc0YjEyZTg1N2I2Y2Y2NTEwZjg5OTc2MDdhMTY2
MjA3Li5iZmViZTkzNjJjNDkzNWUxMDFlMWExZjEzYzdhMDJiZTE1M2M5ZWI1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZURlYnVnZ2VyQWdlbnQu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZURlYnVnZ2Vy
QWdlbnQuaApAQCAtNDUsMTQgKzQ1LDE0IEBAIGNsYXNzIFBhZ2VEZWJ1Z2dlckFnZW50IGZpbmFs
IDogcHVibGljIFdlYkRlYnVnZ2VyQWdlbnQgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OwogcHVibGljOgogICAgIFBhZ2VEZWJ1Z2dlckFnZW50KFBhZ2VBZ2VudENvbnRleHQmKTsKLSAg
ICB+UGFnZURlYnVnZ2VyQWdlbnQoKSBvdmVycmlkZTsKLSAgICBib29sIGVuYWJsZWQoKSBjb25z
dCBmaW5hbDsKKyAgICB+UGFnZURlYnVnZ2VyQWdlbnQoKTsKKyAgICBib29sIGVuYWJsZWQoKSBj
b25zdDsKIAogICAgIC8vIERlYnVnZ2VyQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyCi0gICAgdm9p
ZCBldmFsdWF0ZU9uQ2FsbEZyYW1lKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBjYWxsRnJh
bWVJZCwgY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBjb25zdCBTdHJpbmcqIG9iamVjdEdyb3Vw
LCBjb25zdCBib29sKiBpbmNsdWRlQ29tbWFuZExpbmVBUEksIGNvbnN0IGJvb2wqIGRvTm90UGF1
c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29sZSwgY29uc3QgYm9vbCogcmV0dXJuQnlWYWx1ZSwg
Y29uc3QgYm9vbCogZ2VuZXJhdGVQcmV2aWV3LCBjb25zdCBib29sKiBzYXZlUmVzdWx0LCBjb25z
dCBib29sKiBlbXVsYXRlVXNlckdlc3R1cmUsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpS
dW50aW1lOjpSZW1vdGVPYmplY3Q+JiByZXN1bHQsIE9wdGlvbmFsPGJvb2w+JiB3YXNUaHJvd24s
IE9wdGlvbmFsPGludD4mIHNhdmVkUmVzdWx0SW5kZXgpIG92ZXJyaWRlOworICAgIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8c3RkOjp0dXBsZTxSZWY8SW5zcGVjdG9yOjpQcm90
b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiwgT3B0aW9uYWw8Ym9vbD4gLyogd2FzVGhyb3du
ICovLCBPcHRpb25hbDxpbnQ+IC8qIHNhdmVkUmVzdWx0SW5kZXggKi8+PiBldmFsdWF0ZU9uQ2Fs
bEZyYW1lKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpDYWxsRnJhbWVJZCYs
IGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCwgT3B0
aW9uYWw8Ym9vbD4mJiBpbmNsdWRlQ29tbWFuZExpbmVBUEksIE9wdGlvbmFsPGJvb2w+JiYgZG9O
b3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xlLCBPcHRpb25hbDxib29sPiYmIHJldHVy
bkJ5VmFsdWUsIE9wdGlvbmFsPGJvb2w+JiYgZ2VuZXJhdGVQcmV2aWV3LCBPcHRpb25hbDxib29s
PiYmIHNhdmVSZXN1bHQsIE9wdGlvbmFsPGJvb2w+JiYgZW11bGF0ZVVzZXJHZXN0dXJlKTsKIAog
ICAgIC8vIEpTQzo6RGVidWdnZXI6Ok9ic2VydmVyCi0gICAgdm9pZCBicmVha3BvaW50QWN0aW9u
TG9nKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBjb25zdCBTdHJpbmcmIGRhdGEpIGZpbmFsOworICAg
IHZvaWQgYnJlYWtwb2ludEFjdGlvbkxvZyhKU0M6OkpTR2xvYmFsT2JqZWN0KiwgY29uc3QgU3Ry
aW5nJiBkYXRhKTsKIAogICAgIC8vIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbgogICAgIHZvaWQg
ZGlkQ2xlYXJXaW5kb3dPYmplY3RJbldvcmxkKEZyYW1lJiwgRE9NV3JhcHBlcldvcmxkJik7CkBA
IC02NCwxNSArNjQsMTUgQEAgcHVibGljOgogICAgIHZvaWQgZGlkQ2FuY2VsQW5pbWF0aW9uRnJh
bWUoaW50IGNhbGxiYWNrSWQpOwogCiBwcml2YXRlOgotICAgIHZvaWQgZW5hYmxlKCkgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCBkaXNhYmxlKGJvb2wgaXNCZWluZ0Rlc3Ryb3llZCkgb3ZlcnJpZGU7Cisg
ICAgdm9pZCBpbnRlcm5hbEVuYWJsZSgpOworICAgIHZvaWQgaW50ZXJuYWxEaXNhYmxlKGJvb2wg
aXNCZWluZ0Rlc3Ryb3llZCk7CiAKLSAgICBTdHJpbmcgc291cmNlTWFwVVJMRm9yU2NyaXB0KGNv
bnN0IEpTQzo6RGVidWdnZXI6OlNjcmlwdCYpIG92ZXJyaWRlOworICAgIFN0cmluZyBzb3VyY2VN
YXBVUkxGb3JTY3JpcHQoY29uc3QgSlNDOjpEZWJ1Z2dlcjo6U2NyaXB0Jik7CiAKLSAgICB2b2lk
IG11dGVDb25zb2xlKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCB1bm11dGVDb25zb2xlKCkgb3ZlcnJp
ZGU7CisgICAgdm9pZCBtdXRlQ29uc29sZSgpOworICAgIHZvaWQgdW5tdXRlQ29uc29sZSgpOwog
Ci0gICAgSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdEZvckV2YWwoRXJy
b3JTdHJpbmcmLCBjb25zdCBpbnQqIGV4ZWN1dGlvbkNvbnRleHRJZCkgb3ZlcnJpZGU7CisgICAg
SW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdEZvckV2YWwoSW5zcGVjdG9y
OjpQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpS
dW50aW1lOjpFeGVjdXRpb25Db250ZXh0SWQ+JiYpOwogCiAgICAgUGFnZSYgbV9pbnNwZWN0ZWRQ
YWdlOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFn
ZS9QYWdlSGVhcEFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFn
ZS9QYWdlSGVhcEFnZW50LmNwcAppbmRleCA0OTIxOGVmMTI4M2ViZDRkZDc1NDIxMTM2OWIzNDlh
NDgyNTIyZDk4Li40MDM2YTIzYzY4NTA3ZTU5NGFiMmU5NzRmNWI2MmRiODY3Yzc4NzYwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZUhlYXBBZ2Vu
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VIZWFw
QWdlbnQuY3BwCkBAIC0zOSwxNiArMzksMjAgQEAgUGFnZUhlYXBBZ2VudDo6UGFnZUhlYXBBZ2Vu
dChQYWdlQWdlbnRDb250ZXh0JiBjb250ZXh0KQogCiBQYWdlSGVhcEFnZW50Ojp+UGFnZUhlYXBB
Z2VudCgpID0gZGVmYXVsdDsKIAotdm9pZCBQYWdlSGVhcEFnZW50OjplbmFibGUoRXJyb3JTdHJp
bmcmIGVycm9yU3RyaW5nKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gUGFnZUhlYXBB
Z2VudDo6ZW5hYmxlKCkKIHsKLSAgICBXZWJIZWFwQWdlbnQ6OmVuYWJsZShlcnJvclN0cmluZyk7
CisgICAgYXV0byByZXN1bHQgPSBXZWJIZWFwQWdlbnQ6OmVuYWJsZSgpOworCiAgICAgbV9pbnN0
cnVtZW50aW5nQWdlbnRzLnNldEVuYWJsZWRQYWdlSGVhcEFnZW50KHRoaXMpOworCisgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBQYWdlSGVhcEFnZW50OjpkaXNhYmxlKEVycm9yU3RyaW5n
JiBlcnJvclN0cmluZykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IFBhZ2VIZWFwQWdl
bnQ6OmRpc2FibGUoKQogewogICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy5zZXRFbmFibGVkUGFn
ZUhlYXBBZ2VudChudWxscHRyKTsKLSAgICBXZWJIZWFwQWdlbnQ6OmRpc2FibGUoZXJyb3JTdHJp
bmcpOworCisgICAgcmV0dXJuIFdlYkhlYXBBZ2VudDo6ZGlzYWJsZSgpOwogfQogCiB2b2lkIFBh
Z2VIZWFwQWdlbnQ6Om1haW5GcmFtZU5hdmlnYXRlZCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZUhlYXBBZ2VudC5oIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VIZWFwQWdlbnQuaAppbmRleCAxYmQ2Y2EwZmM5
ZWYxNWExZDdhMjUyODQyOTVhOGUxOWU4NWYxMGRlLi5mMjZmZjg0YjM4Yjk0Yzk3MmQ5ZjQ2Y2M5
YzRhNzRlYWZmNzRjN2FiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdl
bnRzL3BhZ2UvUGFnZUhlYXBBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9h
Z2VudHMvcGFnZS9QYWdlSGVhcEFnZW50LmgKQEAgLTMxLDE4ICszMSwxNiBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCiBjbGFzcyBQYWdl
SGVhcEFnZW50IGZpbmFsIDogcHVibGljIFdlYkhlYXBBZ2VudCB7CiAgICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoUGFnZUhlYXBBZ2VudCk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBw
dWJsaWM6CiAgICAgUGFnZUhlYXBBZ2VudChQYWdlQWdlbnRDb250ZXh0Jik7Ci0gICAgflBhZ2VI
ZWFwQWdlbnQoKSBvdmVycmlkZTsKKyAgICB+UGFnZUhlYXBBZ2VudCgpOwogCiAgICAgLy8gSGVh
cEJhY2tlbmREaXNwYXRjaGVySGFuZGxlcgotICAgIHZvaWQgZW5hYmxlKEVycm9yU3RyaW5nJikg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBkaXNhYmxlKEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7CisgICAg
SW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBlbmFibGUoKTsKKyAgICBJ
bnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGRpc2FibGUoKTsKIAogICAg
IC8vIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbgogICAgIHZvaWQgbWFpbkZyYW1lTmF2aWdhdGVk
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFn
ZU5ldHdvcmtBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2Uv
UGFnZU5ldHdvcmtBZ2VudC5jcHAKaW5kZXggMmM2NWI4MTA0OTRiYmViNzNkNTM0ZTY2MmFjMzEx
OTNmNDBjM2M2OC4uOWZlMTM5OWMzYjcyNjIzNTUyYjQyM2IwMDMzZTMzZjk4MWMzYjNkNCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VOZXR3b3Jr
QWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdl
TmV0d29ya0FnZW50LmNwcApAQCAtNDcsNyArNDcsNyBAQCBQYWdlTmV0d29ya0FnZW50OjpQYWdl
TmV0d29ya0FnZW50KFBhZ2VBZ2VudENvbnRleHQmIGNvbnRleHQpCiAKIFBhZ2VOZXR3b3JrQWdl
bnQ6On5QYWdlTmV0d29ya0FnZW50KCkgPSBkZWZhdWx0OwogCi1TdHJpbmcgUGFnZU5ldHdvcmtB
Z2VudDo6bG9hZGVySWRlbnRpZmllcihEb2N1bWVudExvYWRlciogbG9hZGVyKQorUHJvdG9jb2w6
Ok5ldHdvcms6OkxvYWRlcklkIFBhZ2VOZXR3b3JrQWdlbnQ6OmxvYWRlcklkZW50aWZpZXIoRG9j
dW1lbnRMb2FkZXIqIGxvYWRlcikKIHsKICAgICBpZiAobG9hZGVyKSB7CiAgICAgICAgIGlmIChh
dXRvKiBwYWdlQWdlbnQgPSBtX2luc3RydW1lbnRpbmdBZ2VudHMuZW5hYmxlZFBhZ2VBZ2VudCgp
KQpAQCAtNTYsNyArNTYsNyBAQCBTdHJpbmcgUGFnZU5ldHdvcmtBZ2VudDo6bG9hZGVySWRlbnRp
ZmllcihEb2N1bWVudExvYWRlciogbG9hZGVyKQogICAgIHJldHVybiB7IH07CiB9CiAKLVN0cmlu
ZyBQYWdlTmV0d29ya0FnZW50OjpmcmFtZUlkZW50aWZpZXIoRG9jdW1lbnRMb2FkZXIqIGxvYWRl
cikKK1Byb3RvY29sOjpOZXR3b3JrOjpGcmFtZUlkIFBhZ2VOZXR3b3JrQWdlbnQ6OmZyYW1lSWRl
bnRpZmllcihEb2N1bWVudExvYWRlciogbG9hZGVyKQogewogICAgIGlmIChsb2FkZXIpIHsKICAg
ICAgICAgaWYgKGF1dG8qIHBhZ2VBZ2VudCA9IG1faW5zdHJ1bWVudGluZ0FnZW50cy5lbmFibGVk
UGFnZUFnZW50KCkpCkBAIC05MSwxMiArOTEsMTIgQEAgVmVjdG9yPFdlYlNvY2tldCo+IFBhZ2VO
ZXR3b3JrQWdlbnQ6OmFjdGl2ZVdlYlNvY2tldHMoY29uc3QgTG9ja0hvbGRlciYgbG9jaykKICAg
ICByZXR1cm4gd2ViU29ja2V0czsKIH0KIAotdm9pZCBQYWdlTmV0d29ya0FnZW50OjpzZXRSZXNv
dXJjZUNhY2hpbmdEaXNhYmxlZChib29sIGRpc2FibGVkKQordm9pZCBQYWdlTmV0d29ya0FnZW50
OjpzZXRSZXNvdXJjZUNhY2hpbmdEaXNhYmxlZEludGVyYWwoYm9vbCBkaXNhYmxlZCkKIHsKICAg
ICBtX2luc3BlY3RlZFBhZ2Uuc2V0UmVzb3VyY2VDYWNoaW5nRGlzYWJsZWRCeVdlYkluc3BlY3Rv
cihkaXNhYmxlZCk7CiB9CiAKLVNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIFBhZ2VOZXR3b3JrQWdl
bnQ6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25z
dCBTdHJpbmcmIGZyYW1lSWQpCitTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBQYWdlTmV0d29ya0Fn
ZW50OjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KFByb3RvY29sOjpFcnJvclN0cmluZyYgZXJyb3JT
dHJpbmcsIGNvbnN0IFByb3RvY29sOjpOZXR3b3JrOjpGcmFtZUlkJiBmcmFtZUlkKQogewogICAg
IGF1dG8qIHBhZ2VBZ2VudCA9IG1faW5zdHJ1bWVudGluZ0FnZW50cy5lbmFibGVkUGFnZUFnZW50
KCk7CiAgICAgaWYgKCFwYWdlQWdlbnQpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlTmV0d29ya0FnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZU5ldHdvcmtBZ2VudC5oCmluZGV4IGJlZGNlM2U4ZGJi
N2M5ZDIyYjJlMWI5NzJkMjJiMmE1YmNlNDBhY2EuLjAyZDRiZWIyMWM1MmZjMWIzNDY3MmRjZWFh
Mzc1MDQ1MWJlNTI0MWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2Vu
dHMvcGFnZS9QYWdlTmV0d29ya0FnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2FnZW50cy9wYWdlL1BhZ2VOZXR3b3JrQWdlbnQuaApAQCAtMzYsMTUgKzM2LDE1IEBAIGNsYXNz
IFBhZ2VOZXR3b3JrQWdlbnQgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yTmV0d29ya0FnZW50IHsK
ICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBQYWdlTmV0d29ya0Fn
ZW50KFBhZ2VBZ2VudENvbnRleHQmKTsKLSAgICB+UGFnZU5ldHdvcmtBZ2VudCgpIG92ZXJyaWRl
OworICAgIH5QYWdlTmV0d29ya0FnZW50KCk7CiAKIHByaXZhdGU6Ci0gICAgU3RyaW5nIGxvYWRl
cklkZW50aWZpZXIoRG9jdW1lbnRMb2FkZXIqKSBvdmVycmlkZTsKLSAgICBTdHJpbmcgZnJhbWVJ
ZGVudGlmaWVyKERvY3VtZW50TG9hZGVyKikgb3ZlcnJpZGU7Ci0gICAgVmVjdG9yPFdlYlNvY2tl
dCo+IGFjdGl2ZVdlYlNvY2tldHMoY29uc3QgTG9ja0hvbGRlciYpIG92ZXJyaWRlOwotICAgIHZv
aWQgc2V0UmVzb3VyY2VDYWNoaW5nRGlzYWJsZWQoYm9vbCkgb3ZlcnJpZGU7Ci0gICAgU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dChFcnJvclN0cmluZyYsIGNv
bnN0IFN0cmluZyYgZnJhbWVJZCkgb3ZlcnJpZGU7Ci0gICAgYm9vbCBzaG91bGRGb3JjZUJ1ZmZl
cmluZ05ldHdvcmtSZXNvdXJjZURhdGEoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsg
fQorICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OkxvYWRlcklkIGxvYWRlcklkZW50
aWZpZXIoRG9jdW1lbnRMb2FkZXIqKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3Jr
OjpGcmFtZUlkIGZyYW1lSWRlbnRpZmllcihEb2N1bWVudExvYWRlciopOworICAgIFZlY3RvcjxX
ZWJTb2NrZXQqPiBhY3RpdmVXZWJTb2NrZXRzKGNvbnN0IExvY2tIb2xkZXImKTsKKyAgICB2b2lk
IHNldFJlc291cmNlQ2FjaGluZ0Rpc2FibGVkSW50ZXJhbChib29sKTsKKyAgICBTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkVycm9yU3RyaW5nJiwgY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6RnJhbWVJ
ZCYpOworICAgIGJvb2wgc2hvdWxkRm9yY2VCdWZmZXJpbmdOZXR3b3JrUmVzb3VyY2VEYXRhKCkg
Y29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAogICAgIFBhZ2UmIG1faW5zcGVjdGVkUGFnZTsKIH07
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZVJ1
bnRpbWVBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFn
ZVJ1bnRpbWVBZ2VudC5jcHAKaW5kZXggZThhYjVmNGM4OWFkZTRmYzg1YzA0MmI0MzQzM2I3MjY1
NjNhYmRkMi4uMDBlNjlmMWFhMmUzZjhlYTJmNDQ1ZThkZDQ0NmRkMTZlYTYzNjNkZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VSdW50aW1lQWdl
bnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlUnVu
dGltZUFnZW50LmNwcApAQCAtNTIsMTEgKzUyLDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1
c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwogCi1zdGF0aWMgYm9vbCBhc0Jvb2woY29uc3QgYm9v
bCogYikKLXsKLSAgICByZXR1cm4gYiAmJiAqYjsKLX0KLQogUGFnZVJ1bnRpbWVBZ2VudDo6UGFn
ZVJ1bnRpbWVBZ2VudChQYWdlQWdlbnRDb250ZXh0JiBjb250ZXh0KQogICAgIDogSW5zcGVjdG9y
UnVudGltZUFnZW50KGNvbnRleHQpCiAgICAgLCBtX2Zyb250ZW5kRGlzcGF0Y2hlcihtYWtlVW5p
cXVlPEluc3BlY3Rvcjo6UnVudGltZUZyb250ZW5kRGlzcGF0Y2hlcj4oY29udGV4dC5mcm9udGVu
ZFJvdXRlcikpCkBAIC02OCwyNyArNjMsMjkgQEAgUGFnZVJ1bnRpbWVBZ2VudDo6UGFnZVJ1bnRp
bWVBZ2VudChQYWdlQWdlbnRDb250ZXh0JiBjb250ZXh0KQogCiBQYWdlUnVudGltZUFnZW50Ojp+
UGFnZVJ1bnRpbWVBZ2VudCgpID0gZGVmYXVsdDsKIAotdm9pZCBQYWdlUnVudGltZUFnZW50Ojpl
bmFibGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8
dm9pZD4gUGFnZVJ1bnRpbWVBZ2VudDo6ZW5hYmxlKCkKIHsKICAgICBpZiAobV9pbnN0cnVtZW50
aW5nQWdlbnRzLmVuYWJsZWRQYWdlUnVudGltZUFnZW50KCkgPT0gdGhpcykKLSAgICAgICAgcmV0
dXJuOworICAgICAgICByZXR1cm4geyB9OwogCi0gICAgSW5zcGVjdG9yUnVudGltZUFnZW50Ojpl
bmFibGUoZXJyb3JTdHJpbmcpOwotICAgIGlmICghZXJyb3JTdHJpbmcuaXNFbXB0eSgpKQotICAg
ICAgICByZXR1cm47CisgICAgYXV0byByZXN1bHQgPSBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmVu
YWJsZSgpOworICAgIGlmICghcmVzdWx0KQorICAgICAgICByZXR1cm4gcmVzdWx0OwogCiAgICAg
Ly8gUmVwb3J0IGluaXRpYWwgY29udGV4dHMgYmVmb3JlIGVuYWJsaW5nIGluc3RydW1lbnRhdGlv
biBhcyB0aGUgcmVwb3J0aW5nCiAgICAgLy8gY2FuIGZvcmNlIGNyZWF0aW9uIG9mIHNjcmlwdCBz
dGF0ZSB3aGljaCBjb3VsZCByZXN1bHQgaW4gZHVwbGljYXRlIG5vdGlmaWNhdGlvbnMuCiAgICAg
cmVwb3J0RXhlY3V0aW9uQ29udGV4dENyZWF0aW9uKCk7CiAKICAgICBtX2luc3RydW1lbnRpbmdB
Z2VudHMuc2V0RW5hYmxlZFBhZ2VSdW50aW1lQWdlbnQodGhpcyk7CisKKyAgICByZXR1cm4gcmVz
dWx0OwogfQogCi12b2lkIFBhZ2VSdW50aW1lQWdlbnQ6OmRpc2FibGUoRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gUGFnZVJ1bnRpbWVBZ2Vu
dDo6ZGlzYWJsZSgpCiB7CiAgICAgbV9pbnN0cnVtZW50aW5nQWdlbnRzLnNldEVuYWJsZWRQYWdl
UnVudGltZUFnZW50KG51bGxwdHIpOwogCi0gICAgSW5zcGVjdG9yUnVudGltZUFnZW50OjpkaXNh
YmxlKGVycm9yU3RyaW5nKTsKKyAgICByZXR1cm4gSW5zcGVjdG9yUnVudGltZUFnZW50OjpkaXNh
YmxlKCk7CiB9CiAKIHZvaWQgUGFnZVJ1bnRpbWVBZ2VudDo6ZnJhbWVOYXZpZ2F0ZWQoRnJhbWUm
IGZyYW1lKQpAQCAtMTA2LDcgKzEwMyw3IEBAIHZvaWQgUGFnZVJ1bnRpbWVBZ2VudDo6ZGlkQ2xl
YXJXaW5kb3dPYmplY3RJbldvcmxkKEZyYW1lJiBmcmFtZSwgRE9NV3JhcHBlcldvcmxkCiAgICAg
bm90aWZ5Q29udGV4dENyZWF0ZWQocGFnZUFnZW50LT5mcmFtZUlkKCZmcmFtZSksIGZyYW1lLnNj
cmlwdCgpLmdsb2JhbE9iamVjdCh3b3JsZCksIHdvcmxkKTsKIH0KIAotSW5qZWN0ZWRTY3JpcHQg
UGFnZVJ1bnRpbWVBZ2VudDo6aW5qZWN0ZWRTY3JpcHRGb3JFdmFsKEVycm9yU3RyaW5nJiBlcnJv
clN0cmluZywgY29uc3QgaW50KiBleGVjdXRpb25Db250ZXh0SWQpCitJbmplY3RlZFNjcmlwdCBQ
YWdlUnVudGltZUFnZW50OjppbmplY3RlZFNjcmlwdEZvckV2YWwoUHJvdG9jb2w6OkVycm9yU3Ry
aW5nJiBlcnJvclN0cmluZywgT3B0aW9uYWw8UHJvdG9jb2w6OlJ1bnRpbWU6OkV4ZWN1dGlvbkNv
bnRleHRJZD4mJiBleGVjdXRpb25Db250ZXh0SWQpCiB7CiAgICAgaWYgKCFleGVjdXRpb25Db250
ZXh0SWQpIHsKICAgICAgICAgSlNDOjpKU0dsb2JhbE9iamVjdCogc2NyaXB0U3RhdGUgPSBtYWlu
V29ybGRFeGVjU3RhdGUoJm1faW5zcGVjdGVkUGFnZS5tYWluRnJhbWUoKSk7CkBAIC0xNTksMjIg
KzE1NiwyMiBAQCB2b2lkIFBhZ2VSdW50aW1lQWdlbnQ6OnJlcG9ydEV4ZWN1dGlvbkNvbnRleHRD
cmVhdGlvbigpCiAgICAgfQogfQogCi1zdGF0aWMgSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGlt
ZTo6RXhlY3V0aW9uQ29udGV4dFR5cGUgdG9Qcm90b2NvbChET01XcmFwcGVyV29ybGQ6OlR5cGUg
dHlwZSkKK3N0YXRpYyBQcm90b2NvbDo6UnVudGltZTo6RXhlY3V0aW9uQ29udGV4dFR5cGUgdG9Q
cm90b2NvbChET01XcmFwcGVyV29ybGQ6OlR5cGUgdHlwZSkKIHsKICAgICBzd2l0Y2ggKHR5cGUp
IHsKICAgICBjYXNlIERPTVdyYXBwZXJXb3JsZDo6VHlwZTo6Tm9ybWFsOgotICAgICAgICByZXR1
cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RXhlY3V0aW9uQ29udGV4dFR5cGU6Ok5v
cm1hbDsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0
VHlwZTo6Tm9ybWFsOwogICAgIGNhc2UgRE9NV3JhcHBlcldvcmxkOjpUeXBlOjpVc2VyOgotICAg
ICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RXhlY3V0aW9uQ29udGV4
dFR5cGU6OlVzZXI7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6UnVudGltZTo6RXhlY3V0aW9u
Q29udGV4dFR5cGU6OlVzZXI7CiAgICAgY2FzZSBET01XcmFwcGVyV29ybGQ6OlR5cGU6OkludGVy
bmFsOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RXhlY3V0
aW9uQ29udGV4dFR5cGU6OkludGVybmFsOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OlJ1bnRp
bWU6OkV4ZWN1dGlvbkNvbnRleHRUeXBlOjpJbnRlcm5hbDsKICAgICB9CiAKICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6
RXhlY3V0aW9uQ29udGV4dFR5cGU6OkludGVybmFsOworICAgIHJldHVybiBQcm90b2NvbDo6UnVu
dGltZTo6RXhlY3V0aW9uQ29udGV4dFR5cGU6OkludGVybmFsOwogfQogCi12b2lkIFBhZ2VSdW50
aW1lQWdlbnQ6Om5vdGlmeUNvbnRleHRDcmVhdGVkKGNvbnN0IFN0cmluZyYgZnJhbWVJZCwgSlND
OjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBET01XcmFwcGVyV29ybGQmIHdv
cmxkLCBTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlPcmlnaW4pCit2b2lkIFBhZ2VSdW50aW1lQWdl
bnQ6Om5vdGlmeUNvbnRleHRDcmVhdGVkKGNvbnN0IFByb3RvY29sOjpOZXR3b3JrOjpGcmFtZUlk
JiBmcmFtZUlkLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IERPTVdy
YXBwZXJXb3JsZCYgd29ybGQsIFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbikKIHsKICAg
ICBhdXRvIGluamVjdGVkU2NyaXB0ID0gaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKCkuaW5qZWN0ZWRT
Y3JpcHRGb3IoZ2xvYmFsT2JqZWN0KTsKICAgICBpZiAoaW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1
ZSgpKQpAQCAtMTg0LDcgKzE4MSw3IEBAIHZvaWQgUGFnZVJ1bnRpbWVBZ2VudDo6bm90aWZ5Q29u
dGV4dENyZWF0ZWQoY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBKU0M6OkpTR2xvYmFsCiAgICAgaWYg
KG5hbWUuaXNFbXB0eSgpICYmIHNlY3VyaXR5T3JpZ2luKQogICAgICAgICBuYW1lID0gc2VjdXJp
dHlPcmlnaW4tPnRvUmF3U3RyaW5nKCk7CiAKLSAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+ZXhl
Y3V0aW9uQ29udGV4dENyZWF0ZWQoSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RXhlY3V0
aW9uQ29udGV4dERlc2NyaXB0aW9uOjpjcmVhdGUoKQorICAgIG1fZnJvbnRlbmREaXNwYXRjaGVy
LT5leGVjdXRpb25Db250ZXh0Q3JlYXRlZChQcm90b2NvbDo6UnVudGltZTo6RXhlY3V0aW9uQ29u
dGV4dERlc2NyaXB0aW9uOjpjcmVhdGUoKQogICAgICAgICAuc2V0SWQoaW5qZWN0ZWRTY3JpcHRN
YW5hZ2VyKCkuaW5qZWN0ZWRTY3JpcHRJZEZvcihnbG9iYWxPYmplY3QpKQogICAgICAgICAuc2V0
VHlwZSh0b1Byb3RvY29sKHdvcmxkLnR5cGUoKSkpCiAgICAgICAgIC5zZXROYW1lKG5hbWUpCkBA
IC0xOTIsMTYgKzE4OSwxNiBAQCB2b2lkIFBhZ2VSdW50aW1lQWdlbnQ6Om5vdGlmeUNvbnRleHRD
cmVhdGVkKGNvbnN0IFN0cmluZyYgZnJhbWVJZCwgSlNDOjpKU0dsb2JhbAogICAgICAgICAucmVs
ZWFzZSgpKTsKIH0KIAotdm9pZCBQYWdlUnVudGltZUFnZW50OjpldmFsdWF0ZShFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgY29uc3QgU3RyaW5nKiBv
YmplY3RHcm91cCwgY29uc3QgYm9vbCogaW5jbHVkZUNvbW1hbmRMaW5lQVBJLCBjb25zdCBib29s
KiBkb05vdFBhdXNlT25FeGNlcHRpb25zQW5kTXV0ZUNvbnNvbGUsIGNvbnN0IGludCogZXhlY3V0
aW9uQ29udGV4dElkLCBjb25zdCBib29sKiByZXR1cm5CeVZhbHVlLCBjb25zdCBib29sKiBnZW5l
cmF0ZVByZXZpZXcsIGNvbnN0IGJvb2wqIHNhdmVSZXN1bHQsIGNvbnN0IGJvb2wqIGVtdWxhdGVV
c2VyR2VzdHVyZSwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9i
amVjdD4mIHJlc3VsdCwgT3B0aW9uYWw8Ym9vbD4mIHdhc1Rocm93biwgT3B0aW9uYWw8aW50PiYg
c2F2ZWRSZXN1bHRJbmRleCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHN0ZDo6dHVwbGU8UmVm
PFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+LCBPcHRpb25hbDxib29sPiAvKiB3YXNU
aHJvd24gKi8sIE9wdGlvbmFsPGludD4gLyogc2F2ZWRSZXN1bHRJbmRleCAqLz4+IFBhZ2VSdW50
aW1lQWdlbnQ6OmV2YWx1YXRlKGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgY29uc3QgU3RyaW5n
JiBvYmplY3RHcm91cCwgT3B0aW9uYWw8Ym9vbD4mJiBpbmNsdWRlQ29tbWFuZExpbmVBUEksIE9w
dGlvbmFsPGJvb2w+JiYgZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xlLCBPcHRp
b25hbDxQcm90b2NvbDo6UnVudGltZTo6RXhlY3V0aW9uQ29udGV4dElkPiYmIGV4ZWN1dGlvbkNv
bnRleHRJZCwgT3B0aW9uYWw8Ym9vbD4mJiByZXR1cm5CeVZhbHVlLCBPcHRpb25hbDxib29sPiYm
IGdlbmVyYXRlUHJldmlldywgT3B0aW9uYWw8Ym9vbD4mJiBzYXZlUmVzdWx0LCBPcHRpb25hbDxi
b29sPiYmIGVtdWxhdGVVc2VyR2VzdHVyZSkKIHsKLSAgICBVc2VyR2VzdHVyZUVtdWxhdGlvblNj
b3BlIHVzZXJHZXN0dXJlU2NvcGUobV9pbnNwZWN0ZWRQYWdlLCBhc0Jvb2woZW11bGF0ZVVzZXJH
ZXN0dXJlKSk7Ci0gICAgSW5zcGVjdG9yUnVudGltZUFnZW50OjpldmFsdWF0ZShlcnJvclN0cmlu
ZywgZXhwcmVzc2lvbiwgb2JqZWN0R3JvdXAsIGluY2x1ZGVDb21tYW5kTGluZUFQSSwgZG9Ob3RQ
YXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xlLCBleGVjdXRpb25Db250ZXh0SWQsIHJldHVy
bkJ5VmFsdWUsIGdlbmVyYXRlUHJldmlldywgc2F2ZVJlc3VsdCwgZW11bGF0ZVVzZXJHZXN0dXJl
LCByZXN1bHQsIHdhc1Rocm93biwgc2F2ZWRSZXN1bHRJbmRleCk7CisgICAgVXNlckdlc3R1cmVF
bXVsYXRpb25TY29wZSB1c2VyR2VzdHVyZVNjb3BlKG1faW5zcGVjdGVkUGFnZSwgZW11bGF0ZVVz
ZXJHZXN0dXJlICYmICplbXVsYXRlVXNlckdlc3R1cmUpOworICAgIHJldHVybiBJbnNwZWN0b3JS
dW50aW1lQWdlbnQ6OmV2YWx1YXRlKGV4cHJlc3Npb24sIG9iamVjdEdyb3VwLCBXVEZNb3ZlKGlu
Y2x1ZGVDb21tYW5kTGluZUFQSSksIFdURk1vdmUoZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11
dGVDb25zb2xlKSwgV1RGTW92ZShleGVjdXRpb25Db250ZXh0SWQpLCBXVEZNb3ZlKHJldHVybkJ5
VmFsdWUpLCBXVEZNb3ZlKGdlbmVyYXRlUHJldmlldyksIFdURk1vdmUoc2F2ZVJlc3VsdCksIFdU
Rk1vdmUoZW11bGF0ZVVzZXJHZXN0dXJlKSk7CiB9CiAKLXZvaWQgUGFnZVJ1bnRpbWVBZ2VudDo6
Y2FsbEZ1bmN0aW9uT24oRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIG9i
amVjdElkLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIGNvbnN0IEpTT046OkFycmF5KiBvcHRp
b25hbEFyZ3VtZW50cywgY29uc3QgYm9vbCogZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVD
b25zb2xlLCBjb25zdCBib29sKiByZXR1cm5CeVZhbHVlLCBjb25zdCBib29sKiBnZW5lcmF0ZVBy
ZXZpZXcsIGNvbnN0IGJvb2wqIGVtdWxhdGVVc2VyR2VzdHVyZSwgUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3VsdCwgT3B0aW9uYWw8Ym9vbD4m
IHdhc1Rocm93bikKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHN0ZDo6dHVwbGU8UmVmPFByb3Rv
Y29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+LCBPcHRpb25hbDxib29sPiAvKiB3YXNUaHJvd24g
Ki8+PiBQYWdlUnVudGltZUFnZW50OjpjYWxsRnVuY3Rpb25Pbihjb25zdCBQcm90b2NvbDo6UnVu
dGltZTo6UmVtb3RlT2JqZWN0SWQmIG9iamVjdElkLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24s
IFJlZlB0cjxKU09OOjpBcnJheT4mJiBvcHRpb25hbEFyZ3VtZW50cywgT3B0aW9uYWw8Ym9vbD4m
JiBkb05vdFBhdXNlT25FeGNlcHRpb25zQW5kTXV0ZUNvbnNvbGUsIE9wdGlvbmFsPGJvb2w+JiYg
cmV0dXJuQnlWYWx1ZSwgT3B0aW9uYWw8Ym9vbD4mJiBnZW5lcmF0ZVByZXZpZXcsIE9wdGlvbmFs
PGJvb2w+JiYgZW11bGF0ZVVzZXJHZXN0dXJlKQogewotICAgIFVzZXJHZXN0dXJlRW11bGF0aW9u
U2NvcGUgdXNlckdlc3R1cmVTY29wZShtX2luc3BlY3RlZFBhZ2UsIGFzQm9vbChlbXVsYXRlVXNl
ckdlc3R1cmUpKTsKLSAgICBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmNhbGxGdW5jdGlvbk9uKGVy
cm9yU3RyaW5nLCBvYmplY3RJZCwgZXhwcmVzc2lvbiwgb3B0aW9uYWxBcmd1bWVudHMsIGRvTm90
UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29sZSwgcmV0dXJuQnlWYWx1ZSwgZ2VuZXJhdGVQ
cmV2aWV3LCBlbXVsYXRlVXNlckdlc3R1cmUsIHJlc3VsdCwgd2FzVGhyb3duKTsKKyAgICBVc2Vy
R2VzdHVyZUVtdWxhdGlvblNjb3BlIHVzZXJHZXN0dXJlU2NvcGUobV9pbnNwZWN0ZWRQYWdlLCBl
bXVsYXRlVXNlckdlc3R1cmUgJiYgKmVtdWxhdGVVc2VyR2VzdHVyZSk7CisgICAgcmV0dXJuIElu
c3BlY3RvclJ1bnRpbWVBZ2VudDo6Y2FsbEZ1bmN0aW9uT24ob2JqZWN0SWQsIGV4cHJlc3Npb24s
IFdURk1vdmUob3B0aW9uYWxBcmd1bWVudHMpLCBXVEZNb3ZlKGRvTm90UGF1c2VPbkV4Y2VwdGlv
bnNBbmRNdXRlQ29uc29sZSksIFdURk1vdmUocmV0dXJuQnlWYWx1ZSksIFdURk1vdmUoZ2VuZXJh
dGVQcmV2aWV3KSwgV1RGTW92ZShlbXVsYXRlVXNlckdlc3R1cmUpKTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50
cy9wYWdlL1BhZ2VSdW50aW1lQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2Vu
dHMvcGFnZS9QYWdlUnVudGltZUFnZW50LmgKaW5kZXggMmFmMzczOWI3ZmU3YzE2ZmFhN2Q4ZDI3
OTdjZTZkMDEwMjE1Mzk4ZC4uMjk4NDY1YzUyYjQyNDY0YzI3MzM2NTllMDdmM2Y3NjAxNzRhOTVl
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VS
dW50aW1lQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2Uv
UGFnZVJ1bnRpbWVBZ2VudC5oCkBAIC00NSwzMSArNDUsMzAgQEAgY2xhc3MgRE9NV3JhcHBlcldv
cmxkOwogY2xhc3MgRnJhbWU7CiBjbGFzcyBQYWdlOwogY2xhc3MgU2VjdXJpdHlPcmlnaW47Ci10
eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKIAogY2xhc3MgUGFnZVJ1bnRpbWVBZ2VudCBmaW5h
bCA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3BlY3RvclJ1bnRpbWVBZ2VudCB7CiAgICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoUGFnZVJ1bnRpbWVBZ2VudCk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CiBwdWJsaWM6CiAgICAgUGFnZVJ1bnRpbWVBZ2VudChQYWdlQWdlbnRDb250ZXh0Jik7
Ci0gICAgflBhZ2VSdW50aW1lQWdlbnQoKSBvdmVycmlkZTsKKyAgICB+UGFnZVJ1bnRpbWVBZ2Vu
dCgpOwogCiAgICAgLy8gUnVudGltZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcgotICAgIHZvaWQg
ZW5hYmxlKEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkaXNhYmxlKEVycm9yU3Ry
aW5nJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBldmFsdWF0ZShFcnJvclN0cmluZyYsIGNvbnN0IFN0
cmluZyYgZXhwcmVzc2lvbiwgY29uc3QgU3RyaW5nKiBvYmplY3RHcm91cCwgY29uc3QgYm9vbCog
aW5jbHVkZUNvbW1hbmRMaW5lQVBJLCBjb25zdCBib29sKiBkb05vdFBhdXNlT25FeGNlcHRpb25z
QW5kTXV0ZUNvbnNvbGUsIGNvbnN0IGludCogZXhlY3V0aW9uQ29udGV4dElkLCBjb25zdCBib29s
KiByZXR1cm5CeVZhbHVlLCBjb25zdCBib29sKiBnZW5lcmF0ZVByZXZpZXcsIGNvbnN0IGJvb2wq
IHNhdmVSZXN1bHQsIGNvbnN0IGJvb2wqIGVtdWxhdGVVc2VyR2VzdHVyZSwgUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3VsdCwgT3B0aW9uYWw8
Ym9vbD4mIHdhc1Rocm93biwgT3B0aW9uYWw8aW50PiYgc2F2ZWRSZXN1bHRJbmRleCkgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCBjYWxsRnVuY3Rpb25PbihFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYg
b2JqZWN0SWQsIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgY29uc3QgSlNPTjo6QXJyYXkqIG9w
dGlvbmFsQXJndW1lbnRzLCBjb25zdCBib29sKiBkb05vdFBhdXNlT25FeGNlcHRpb25zQW5kTXV0
ZUNvbnNvbGUsIGNvbnN0IGJvb2wqIHJldHVybkJ5VmFsdWUsIGNvbnN0IGJvb2wqIGdlbmVyYXRl
UHJldmlldywgY29uc3QgYm9vbCogZW11bGF0ZVVzZXJHZXN0dXJlLCBSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0LCBPcHRpb25hbDxib29s
PiYgd2FzVGhyb3duKSBvdmVycmlkZTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0
cmluZ09yPHZvaWQ+IGVuYWJsZSgpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3Ry
aW5nT3I8dm9pZD4gZGlzYWJsZSgpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3Ry
aW5nT3I8c3RkOjp0dXBsZTxSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6UmVtb3Rl
T2JqZWN0PiwgT3B0aW9uYWw8Ym9vbD4gLyogd2FzVGhyb3duICovLCBPcHRpb25hbDxpbnQ+IC8q
IHNhdmVkUmVzdWx0SW5kZXggKi8+PiBldmFsdWF0ZShjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24s
IGNvbnN0IFN0cmluZyYgb2JqZWN0R3JvdXAsIE9wdGlvbmFsPGJvb2w+JiYgaW5jbHVkZUNvbW1h
bmRMaW5lQVBJLCBPcHRpb25hbDxib29sPiYmIGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRl
Q29uc29sZSwgT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RXhlY3V0aW9u
Q29udGV4dElkPiYmLCBPcHRpb25hbDxib29sPiYmIHJldHVybkJ5VmFsdWUsIE9wdGlvbmFsPGJv
b2w+JiYgZ2VuZXJhdGVQcmV2aWV3LCBPcHRpb25hbDxib29sPiYmIHNhdmVSZXN1bHQsIE9wdGlv
bmFsPGJvb2w+JiYgZW11bGF0ZVVzZXJHZXN0dXJlKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29s
OjpFcnJvclN0cmluZ09yPHN0ZDo6dHVwbGU8UmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRp
bWU6OlJlbW90ZU9iamVjdD4sIE9wdGlvbmFsPGJvb2w+IC8qIHdhc1Rocm93biAqLz4+IGNhbGxG
dW5jdGlvbk9uKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVj
dElkJiwgY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBSZWZQdHI8SlNPTjo6QXJyYXk+JiYgYXJn
dW1lbnRzLCBPcHRpb25hbDxib29sPiYmIGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29u
c29sZSwgT3B0aW9uYWw8Ym9vbD4mJiByZXR1cm5CeVZhbHVlLCBPcHRpb25hbDxib29sPiYmIGdl
bmVyYXRlUHJldmlldywgT3B0aW9uYWw8Ym9vbD4mJiBlbXVsYXRlVXNlckdlc3R1cmUpOwogCiAg
ICAgLy8gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uCiAgICAgdm9pZCBmcmFtZU5hdmlnYXRlZChG
cmFtZSYpOwogICAgIHZvaWQgZGlkQ2xlYXJXaW5kb3dPYmplY3RJbldvcmxkKEZyYW1lJiwgRE9N
V3JhcHBlcldvcmxkJik7CiAKIHByaXZhdGU6Ci0gICAgSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlw
dCBpbmplY3RlZFNjcmlwdEZvckV2YWwoRXJyb3JTdHJpbmcmLCBjb25zdCBpbnQqIGV4ZWN1dGlv
bkNvbnRleHRJZCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBtdXRlQ29uc29sZSgpIG92ZXJyaWRlOwot
ICAgIHZvaWQgdW5tdXRlQ29uc29sZSgpIG92ZXJyaWRlOworICAgIEluc3BlY3Rvcjo6SW5qZWN0
ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHRGb3JFdmFsKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9y
U3RyaW5nJiwgT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RXhlY3V0aW9u
Q29udGV4dElkPiYmKTsKKyAgICB2b2lkIG11dGVDb25zb2xlKCk7CisgICAgdm9pZCB1bm11dGVD
b25zb2xlKCk7CiAgICAgdm9pZCByZXBvcnRFeGVjdXRpb25Db250ZXh0Q3JlYXRpb24oKTsKLSAg
ICB2b2lkIG5vdGlmeUNvbnRleHRDcmVhdGVkKGNvbnN0IFN0cmluZyYgZnJhbWVJZCwgSlNDOjpK
U0dsb2JhbE9iamVjdCosIGNvbnN0IERPTVdyYXBwZXJXb3JsZCYsIFNlY3VyaXR5T3JpZ2luKiA9
IG51bGxwdHIpOworICAgIHZvaWQgbm90aWZ5Q29udGV4dENyZWF0ZWQoY29uc3QgSW5zcGVjdG9y
OjpQcm90b2NvbDo6TmV0d29yazo6RnJhbWVJZCYsIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBjb25z
dCBET01XcmFwcGVyV29ybGQmLCBTZWN1cml0eU9yaWdpbiogPSBudWxscHRyKTsKIAogICAgIHN0
ZDo6dW5pcXVlX3B0cjxJbnNwZWN0b3I6OlJ1bnRpbWVGcm9udGVuZERpc3BhdGNoZXI+IG1fZnJv
bnRlbmREaXNwYXRjaGVyOwogICAgIFJlZlB0cjxJbnNwZWN0b3I6OlJ1bnRpbWVCYWNrZW5kRGlz
cGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1NlcnZpY2VXb3JrZXJBZ2VudC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9TZXJ2aWNlV29ya2VyQWdlbnQuY3BwCmlu
ZGV4IDE4YTYwYzNjMWNiMmZhMTEzM2U4OTQxOTEyNjM5ZjkzNzJlZmYyYTYuLmJiZTJjYzAzZDY0
NWZjMTI5MDg0ZGJlZTlkZDgwNDIyYmJkNjNmZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1NlcnZpY2VXb3JrZXJBZ2VudC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvU2VydmljZVdvcmtlckFnZW50LmNw
cApAQCAtNTQsOSArNTQsOSBAQCB2b2lkIFNlcnZpY2VXb3JrZXJBZ2VudDo6d2lsbERlc3Ryb3lG
cm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhcwogewogfQogCi12b2lk
IFNlcnZpY2VXb3JrZXJBZ2VudDo6Z2V0SW5pdGlhbGl6YXRpb25JbmZvKEVycm9yU3RyaW5nJiwg
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlNlcnZpY2VXb3JrZXI6OkNvbmZpZ3VyYXRpb24+
JiBpbmZvKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPFByb3RvY29sOjpTZXJ2aWNlV29y
a2VyOjpDb25maWd1cmF0aW9uPj4gU2VydmljZVdvcmtlckFnZW50OjpnZXRJbml0aWFsaXphdGlv
bkluZm8oKQogewotICAgIGluZm8gPSBJbnNwZWN0b3I6OlByb3RvY29sOjpTZXJ2aWNlV29ya2Vy
OjpDb25maWd1cmF0aW9uOjpjcmVhdGUoKQorICAgIHJldHVybiBQcm90b2NvbDo6U2VydmljZVdv
cmtlcjo6Q29uZmlndXJhdGlvbjo6Y3JlYXRlKCkKICAgICAgICAgLnNldFRhcmdldElkKG1fc2Vy
dmljZVdvcmtlckdsb2JhbFNjb3BlLmlkZW50aWZpZXIoKSkKICAgICAgICAgLnNldFNlY3VyaXR5
T3JpZ2luKG1fc2VydmljZVdvcmtlckdsb2JhbFNjb3BlLnNlY3VyaXR5T3JpZ2luKCktPnRvUmF3
U3RyaW5nKCkpCiAgICAgICAgIC5zZXRVcmwobV9zZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGUudGhy
ZWFkKCkuY29udGV4dERhdGEoKS5zY3JpcHRVUkwuc3RyaW5nKCkpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9TZXJ2aWNlV29ya2VyQWdlbnQuaCBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1NlcnZpY2VXb3JrZXJBZ2Vu
dC5oCmluZGV4IDgxNDlmZjNkYWMzNTc4ZmMwNDhiNjU4ZTYzMTdkZTMyYjE5N2Q0MDAuLjBiYTVj
YzVjYzdmMzNkNjExYjQ1YTA0OTg3NDUwNTViOGYyOWZmYzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1NlcnZpY2VXb3JrZXJBZ2VudC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1NlcnZpY2VXb3JrZXJBZ2Vu
dC5oCkBAIC0zNCwyMSArMzQsMTkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBTZXJ2
aWNlV29ya2VyR2xvYmFsU2NvcGU7CiAKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCiBj
bGFzcyBTZXJ2aWNlV29ya2VyQWdlbnQgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yQWdlbnRCYXNl
LCBwdWJsaWMgSW5zcGVjdG9yOjpTZXJ2aWNlV29ya2VyQmFja2VuZERpc3BhdGNoZXJIYW5kbGVy
IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTZXJ2aWNlV29ya2VyQWdlbnQpOwogICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIFNlcnZpY2VXb3JrZXJBZ2VudChX
b3JrZXJBZ2VudENvbnRleHQmKTsKLSAgICB+U2VydmljZVdvcmtlckFnZW50KCkgb3ZlcnJpZGU7
CisgICAgflNlcnZpY2VXb3JrZXJBZ2VudCgpOwogCiAgICAgLy8gSW5zcGVjdG9yQWdlbnRCYXNl
Ci0gICAgdm9pZCBkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9udGVu
ZFJvdXRlciosIEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXIqKSBvdmVycmlkZTsKLSAgICB2
b2lkIHdpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlzY29ubmVjdFJl
YXNvbikgb3ZlcnJpZGU7CisgICAgdm9pZCBkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5z
cGVjdG9yOjpGcm9udGVuZFJvdXRlciosIEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXIqKTsK
KyAgICB2b2lkIHdpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlzY29u
bmVjdFJlYXNvbik7CiAKICAgICAvLyBTZXJ2aWNlV29ya2VyQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyCi0gICAgdm9pZCBnZXRJbml0aWFsaXphdGlvbkluZm8oRXJyb3JTdHJpbmcmLCBSZWZQdHI8
SW5zcGVjdG9yOjpQcm90b2NvbDo6U2VydmljZVdvcmtlcjo6Q29uZmlndXJhdGlvbj4mKSBvdmVy
cmlkZTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxJbnNwZWN0
b3I6OlByb3RvY29sOjpTZXJ2aWNlV29ya2VyOjpDb25maWd1cmF0aW9uPj4gZ2V0SW5pdGlhbGl6
YXRpb25JbmZvKCk7CiAKIHByaXZhdGU6CiAgICAgU2VydmljZVdvcmtlckdsb2JhbFNjb3BlJiBt
X3NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlckF1ZGl0QWdlbnQuY3BwIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2VyQXVkaXRBZ2VudC5jcHAKaW5kZXggYzEy
YjVhYTQxMzJmODlhYzU4MmRlYjlmNzJmMTg1MWE5ZWVmOTUzZi4uODkyNDE5MGVlNjIwZjE1NTE0
YTI1MGQ3NjJlMmJlNGExOTMzMDYzZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2FnZW50cy93b3JrZXIvV29ya2VyQXVkaXRBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2VyQXVkaXRBZ2VudC5jcHAKQEAgLTQ4LDcg
KzQ4LDcgQEAgV29ya2VyQXVkaXRBZ2VudDo6V29ya2VyQXVkaXRBZ2VudChXb3JrZXJBZ2VudENv
bnRleHQmIGNvbnRleHQpCiAKIFdvcmtlckF1ZGl0QWdlbnQ6On5Xb3JrZXJBdWRpdEFnZW50KCkg
PSBkZWZhdWx0OwogCi1JbmplY3RlZFNjcmlwdCBXb3JrZXJBdWRpdEFnZW50OjppbmplY3RlZFNj
cmlwdEZvckV2YWwoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBpbnQqIGV4ZWN1dGlv
bkNvbnRleHRJZCkKK0luamVjdGVkU2NyaXB0IFdvcmtlckF1ZGl0QWdlbnQ6OmluamVjdGVkU2Ny
aXB0Rm9yRXZhbChQcm90b2NvbDo6RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBPcHRpb25hbDxQ
cm90b2NvbDo6UnVudGltZTo6RXhlY3V0aW9uQ29udGV4dElkPiYmIGV4ZWN1dGlvbkNvbnRleHRJ
ZCkKIHsKICAgICBpZiAoZXhlY3V0aW9uQ29udGV4dElkKSB7CiAgICAgICAgIGVycm9yU3RyaW5n
ID0gImV4ZWN1dGlvbkNvbnRleHRJZCBpcyBub3Qgc3VwcG9ydGVkIGZvciB3b3JrZXJzIGFzIHRo
ZXJlIGlzIG9ubHkgb25lIGV4ZWN1dGlvbiBjb250ZXh0Il9zOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2VyQXVkaXRBZ2VudC5oIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2VyQXVkaXRBZ2VudC5oCmlu
ZGV4IGQ2YWNkYzBlYTNlODlmMGZhZDMxY2NiMmQ3NjhlMGUxNDZiZDMyMzUuLmQyNTljNmE3NmMy
ZWNiMGVlYjhlZGQ3MzM5ZWMwNDU5YmQzNzJiM2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlckF1ZGl0QWdlbnQuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJBdWRpdEFnZW50LmgKQEAgLTM3
LDEwICszNywxMCBAQCBjbGFzcyBXb3JrZXJBdWRpdEFnZW50IGZpbmFsIDogcHVibGljIEluc3Bl
Y3Rvcjo6SW5zcGVjdG9yQXVkaXRBZ2VudCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CiBwdWJsaWM6CiAgICAgV29ya2VyQXVkaXRBZ2VudChXb3JrZXJBZ2VudENvbnRleHQmKTsKLSAg
ICB+V29ya2VyQXVkaXRBZ2VudCgpIG92ZXJyaWRlOworICAgIH5Xb3JrZXJBdWRpdEFnZW50KCk7
CiAKIHByaXZhdGU6Ci0gICAgSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlw
dEZvckV2YWwoSW5zcGVjdG9yOjpFcnJvclN0cmluZyYsIGNvbnN0IGludCogZXhlY3V0aW9uQ29u
dGV4dElkKSBvdmVycmlkZTsKKyAgICBJbnNwZWN0b3I6OkluamVjdGVkU2NyaXB0IGluamVjdGVk
U2NyaXB0Rm9yRXZhbChJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZyYsIE9wdGlvbmFs
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkV4ZWN1dGlvbkNvbnRleHRJZD4mJik7CiAK
ICAgICBXb3JrZXJHbG9iYWxTY29wZSYgbV93b3JrZXJHbG9iYWxTY29wZTsKIH07CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJDb25zb2xl
QWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlckNv
bnNvbGVBZ2VudC5oCmluZGV4IGI3YjU1ZDAwNjU5MGVmYjA4M2ZlYmI5NGU0M2I0MTJkNjNjZWFm
ZDAuLjU3MTU5OTEyNDdjYWZiOWQ2N2VmMzMxNzFhZGZkMWM5NmM3ZTQ4MjYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlckNvbnNvbGVBZ2Vu
dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlckNv
bnNvbGVBZ2VudC5oCkBAIC0zNSw3ICszNSw3IEBAIGNsYXNzIFdvcmtlckNvbnNvbGVBZ2VudCBm
aW5hbCA6IHB1YmxpYyBXZWJDb25zb2xlQWdlbnQgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOwogcHVibGljOgogICAgIFdvcmtlckNvbnNvbGVBZ2VudChXb3JrZXJBZ2VudENvbnRleHQm
KTsKLSAgICB+V29ya2VyQ29uc29sZUFnZW50KCkgb3ZlcnJpZGU7CisgICAgfldvcmtlckNvbnNv
bGVBZ2VudCgpOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2VyRE9NRGVidWdnZXJBZ2Vu
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJET01E
ZWJ1Z2dlckFnZW50LmNwcAppbmRleCBiZDVkOGE4MzRlYWU4NjMzMGZjYjk3MmM1OTJkNWY3MGE3
ZTczMDRjLi45MjI3NDM1MGM2MzcxNDYwNTFkNzQ5OWM5YmZiNzQ2MDcwMzIyMTExIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJET01EZWJ1
Z2dlckFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtl
ci9Xb3JrZXJET01EZWJ1Z2dlckFnZW50LmNwcApAQCAtMzcsMTkgKzM3LDIwIEBAIFdvcmtlckRP
TURlYnVnZ2VyQWdlbnQ6OldvcmtlckRPTURlYnVnZ2VyQWdlbnQoV29ya2VyQWdlbnRDb250ZXh0
JiBjb250ZXh0LCBJbnNwCiAKIFdvcmtlckRPTURlYnVnZ2VyQWdlbnQ6On5Xb3JrZXJET01EZWJ1
Z2dlckFnZW50KCkgPSBkZWZhdWx0OwogCi12b2lkIFdvcmtlckRPTURlYnVnZ2VyQWdlbnQ6OnNl
dERPTUJyZWFrcG9pbnQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgLyogbm9kZUlkICov
LCBjb25zdCBTdHJpbmcmIC8qIHR5cGVTdHJpbmcgKi8sIGNvbnN0IEpTT046Ok9iamVjdCogLyog
b3B0aW9uc1BheWxvYWQgKi8pCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBXb3JrZXJE
T01EZWJ1Z2dlckFnZW50OjpzZXRET01CcmVha3BvaW50KFByb3RvY29sOjpET006Ok5vZGVJZCwg
UHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpET01CcmVha3BvaW50VHlwZSwgUmVmUHRyPEpTT046Ok9i
amVjdD4mJiAvKiBvcHRpb25zICovKQogewotICAgIGVycm9yU3RyaW5nID0gIk5vdCBzdXBwb3J0
ZWQiX3M7CisgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJOb3Qgc3VwcG9ydGVkIl9zKTsKIH0K
IAotdm9pZCBXb3JrZXJET01EZWJ1Z2dlckFnZW50OjpyZW1vdmVET01CcmVha3BvaW50KEVycm9y
U3RyaW5nJiBlcnJvclN0cmluZywgaW50IC8qIG5vZGVJZCAqLywgY29uc3QgU3RyaW5nJiAvKiB0
eXBlU3RyaW5nICovKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gV29ya2VyRE9NRGVi
dWdnZXJBZ2VudDo6cmVtb3ZlRE9NQnJlYWtwb2ludChQcm90b2NvbDo6RE9NOjpOb2RlSWQsIFBy
b3RvY29sOjpET01EZWJ1Z2dlcjo6RE9NQnJlYWtwb2ludFR5cGUpCiB7Ci0gICAgZXJyb3JTdHJp
bmcgPSAiTm90IHN1cHBvcnRlZCJfczsKKyAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk5vdCBz
dXBwb3J0ZWQiX3MpOwogfQogCi12b2lkIFdvcmtlckRPTURlYnVnZ2VyQWdlbnQ6OnNldEFuaW1h
dGlvbkZyYW1lQnJlYWtwb2ludChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIFJlZlB0cjxKU0M6
OkJyZWFrcG9pbnQ+JiYpCitib29sIFdvcmtlckRPTURlYnVnZ2VyQWdlbnQ6OnNldEFuaW1hdGlv
bkZyYW1lQnJlYWtwb2ludChQcm90b2NvbDo6RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBSZWZQ
dHI8SlNDOjpCcmVha3BvaW50PiYmKQogewogICAgIGVycm9yU3RyaW5nID0gIk5vdCBzdXBwb3J0
ZWQiX3M7CisgICAgcmV0dXJuIGZhbHNlOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJE
T01EZWJ1Z2dlckFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtl
ci9Xb3JrZXJET01EZWJ1Z2dlckFnZW50LmgKaW5kZXggODZlYjkzZjVlMTk3NTUxYmJkMjA5Njk2
NTc5YzcwODk0ZDU4YzIxYy4uNTZmNWEwOTBhMzMwODYwMWRiZGJhOWM0ZjJiNGQzZjdjMTEzM2Qx
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29y
a2VyRE9NRGVidWdnZXJBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2Vu
dHMvd29ya2VyL1dvcmtlckRPTURlYnVnZ2VyQWdlbnQuaApAQCAtMzEsMTkgKzMxLDE3IEBACiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7Ci0KIGNs
YXNzIFdvcmtlckRPTURlYnVnZ2VyQWdlbnQgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yRE9NRGVi
dWdnZXJBZ2VudCB7CiBwdWJsaWM6CiAgICAgV29ya2VyRE9NRGVidWdnZXJBZ2VudChXb3JrZXJB
Z2VudENvbnRleHQmLCBJbnNwZWN0b3I6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQqKTsKLSAgICB+
V29ya2VyRE9NRGVidWdnZXJBZ2VudCgpIG92ZXJyaWRlOworICAgIH5Xb3JrZXJET01EZWJ1Z2dl
ckFnZW50KCk7CiAKICAgICAvLyBET01EZWJ1Z2dlckJhY2tlbmREaXNwYXRjaGVySGFuZGxlcgot
ICAgIHZvaWQgc2V0RE9NQnJlYWtwb2ludChFcnJvclN0cmluZyYsIGludCBub2RlSWQsIGNvbnN0
IFN0cmluZyYgdHlwZSwgY29uc3QgSlNPTjo6T2JqZWN0KiBvcHRpb25zKSBvdmVycmlkZTsKLSAg
ICB2b2lkIHJlbW92ZURPTUJyZWFrcG9pbnQoRXJyb3JTdHJpbmcmLCBpbnQgbm9kZUlkLCBjb25z
dCBTdHJpbmcmIHR5cGUpIG92ZXJyaWRlOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8dm9pZD4gc2V0RE9NQnJlYWtwb2ludChJbnNwZWN0b3I6OlByb3RvY29sOjpET006
Ok5vZGVJZCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NRGVidWdnZXI6OkRPTUJyZWFrcG9pbnRU
eXBlLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIG9wdGlvbnMpOworICAgIEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gcmVtb3ZlRE9NQnJlYWtwb2ludChJbnNwZWN0b3I6
OlByb3RvY29sOjpET006Ok5vZGVJZCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NRGVidWdnZXI6
OkRPTUJyZWFrcG9pbnRUeXBlKTsKIAogcHJpdmF0ZToKLSAgICB2b2lkIHNldEFuaW1hdGlvbkZy
YW1lQnJlYWtwb2ludChFcnJvclN0cmluZyYsIFJlZlB0cjxKU0M6OkJyZWFrcG9pbnQ+JiYpIG92
ZXJyaWRlOworICAgIGJvb2wgc2V0QW5pbWF0aW9uRnJhbWVCcmVha3BvaW50KEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkVycm9yU3RyaW5nJiwgUmVmUHRyPEpTQzo6QnJlYWtwb2ludD4mJik7CiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJEZWJ1Z2dlckFnZW50LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlckRlYnVnZ2VyQWdlbnQuY3BwCmluZGV4
IGNiYzYyMDUyMjE5NGYyOWE5NDE4N2E4YTI3YWMxMmI0MTlkMzU5ZTAuLjdhYTcyYjZhNGM2NGNh
OWY2NzgxNTBkMDZhMzJkMDI5NGM1MDg4MjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlckRlYnVnZ2VyQWdlbnQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlckRlYnVnZ2VyQWdlbnQuY3Bw
CkBAIC01Myw3ICs1Myw3IEBAIHZvaWQgV29ya2VyRGVidWdnZXJBZ2VudDo6YnJlYWtwb2ludEFj
dGlvbkxvZyhKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iamVjCiAgICAgbV93b3JrZXJH
bG9iYWxTY29wZS5hZGRDb25zb2xlTWVzc2FnZShtYWtlVW5pcXVlPENvbnNvbGVNZXNzYWdlPihN
ZXNzYWdlU291cmNlOjpKUywgTWVzc2FnZVR5cGU6OkxvZywgTWVzc2FnZUxldmVsOjpMb2csIG1l
c3NhZ2UsIGNyZWF0ZVNjcmlwdENhbGxTdGFjayhsZXhpY2FsR2xvYmFsT2JqZWN0KSkpOwogfQog
Ci1JbmplY3RlZFNjcmlwdCBXb3JrZXJEZWJ1Z2dlckFnZW50OjppbmplY3RlZFNjcmlwdEZvckV2
YWwoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBpbnQqIGV4ZWN1dGlvbkNvbnRleHRJ
ZCkKK0luamVjdGVkU2NyaXB0IFdvcmtlckRlYnVnZ2VyQWdlbnQ6OmluamVjdGVkU2NyaXB0Rm9y
RXZhbChQcm90b2NvbDo6RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBPcHRpb25hbDxQcm90b2Nv
bDo6UnVudGltZTo6RXhlY3V0aW9uQ29udGV4dElkPiYmIGV4ZWN1dGlvbkNvbnRleHRJZCkKIHsK
ICAgICBpZiAoZXhlY3V0aW9uQ29udGV4dElkKSB7CiAgICAgICAgIGVycm9yU3RyaW5nID0gImV4
ZWN1dGlvbkNvbnRleHRJZCBpcyBub3Qgc3VwcG9ydGVkIGZvciB3b3JrZXJzIGFzIHRoZXJlIGlz
IG9ubHkgb25lIGV4ZWN1dGlvbiBjb250ZXh0Il9zOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2VyRGVidWdnZXJBZ2VudC5oIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2VyRGVidWdnZXJBZ2VudC5oCmlu
ZGV4IDRhYzA3ZDZjYzM3YzIyODAzMzM4ZWI4MGQzNDIxOTUyMWI5NmYzZGUuLjdjYTY0ZTQwMTNh
NTRiNDE4ZDUzZTQ3NDgwMmU3MzJiZjE5MDhjOTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlckRlYnVnZ2VyQWdlbnQuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJEZWJ1Z2dlckFnZW50LmgK
QEAgLTM2LDE3ICszNiwxNyBAQCBjbGFzcyBXb3JrZXJEZWJ1Z2dlckFnZW50IGZpbmFsIDogcHVi
bGljIFdlYkRlYnVnZ2VyQWdlbnQgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVi
bGljOgogICAgIFdvcmtlckRlYnVnZ2VyQWdlbnQoV29ya2VyQWdlbnRDb250ZXh0Jik7Ci0gICAg
fldvcmtlckRlYnVnZ2VyQWdlbnQoKSBvdmVycmlkZTsKKyAgICB+V29ya2VyRGVidWdnZXJBZ2Vu
dCgpOwogCiAgICAgLy8gSlNDOjpEZWJ1Z2dlcjo6T2JzZXJ2ZXIKLSAgICB2b2lkIGJyZWFrcG9p
bnRBY3Rpb25Mb2coSlNDOjpKU0dsb2JhbE9iamVjdCosIGNvbnN0IFN0cmluZyYgZGF0YSkgZmlu
YWw7CisgICAgdm9pZCBicmVha3BvaW50QWN0aW9uTG9nKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBj
b25zdCBTdHJpbmcmIGRhdGEpOwogCiBwcml2YXRlOgogICAgIC8vIFdlIGRvbid0IG5lZWQgdG8g
bXV0ZSBjb25zb2xlIGZvciB3b3JrZXJzLgotICAgIHZvaWQgbXV0ZUNvbnNvbGUoKSBvdmVycmlk
ZSB7IH0KLSAgICB2b2lkIHVubXV0ZUNvbnNvbGUoKSBvdmVycmlkZSB7IH0KKyAgICB2b2lkIG11
dGVDb25zb2xlKCkgeyB9CisgICAgdm9pZCB1bm11dGVDb25zb2xlKCkgeyB9CiAKLSAgICBJbnNw
ZWN0b3I6OkluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0Rm9yRXZhbChFcnJvclN0cmluZyYs
IGNvbnN0IGludCogZXhlY3V0aW9uQ29udGV4dElkKSBvdmVycmlkZTsKKyAgICBJbnNwZWN0b3I6
OkluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0Rm9yRXZhbChJbnNwZWN0b3I6OlByb3RvY29s
OjpFcnJvclN0cmluZyYsIE9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkV4
ZWN1dGlvbkNvbnRleHRJZD4mJik7CiAKICAgICBXb3JrZXJHbG9iYWxTY29wZSYgbV93b3JrZXJH
bG9iYWxTY29wZTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdl
bnRzL3dvcmtlci9Xb3JrZXJOZXR3b3JrQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2FnZW50cy93b3JrZXIvV29ya2VyTmV0d29ya0FnZW50LmNwcAppbmRleCA1M2ZhODgzYWQ5
NzE4ODY4NGNiOTRjMDkwZTc5NjE2OTA4MWI2YjRkLi4yYjE2OGU2ZDNhN2ExYmUxNDY4MzY5YzMw
Y2MyZWI2YzliMzlkMjc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdl
bnRzL3dvcmtlci9Xb3JrZXJOZXR3b3JrQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlck5ldHdvcmtBZ2VudC5jcHAKQEAgLTQzLDEyICs0
MywxMiBAQCBXb3JrZXJOZXR3b3JrQWdlbnQ6Oldvcmtlck5ldHdvcmtBZ2VudChXb3JrZXJBZ2Vu
dENvbnRleHQmIGNvbnRleHQpCiAKIFdvcmtlck5ldHdvcmtBZ2VudDo6fldvcmtlck5ldHdvcmtB
Z2VudCgpID0gZGVmYXVsdDsKIAotU3RyaW5nIFdvcmtlck5ldHdvcmtBZ2VudDo6bG9hZGVySWRl
bnRpZmllcihEb2N1bWVudExvYWRlciopCitQcm90b2NvbDo6TmV0d29yazo6TG9hZGVySWQgV29y
a2VyTmV0d29ya0FnZW50Ojpsb2FkZXJJZGVudGlmaWVyKERvY3VtZW50TG9hZGVyKikKIHsKICAg
ICByZXR1cm4geyB9OwogfQogCi1TdHJpbmcgV29ya2VyTmV0d29ya0FnZW50OjpmcmFtZUlkZW50
aWZpZXIoRG9jdW1lbnRMb2FkZXIqKQorUHJvdG9jb2w6Ok5ldHdvcms6OkZyYW1lSWQgV29ya2Vy
TmV0d29ya0FnZW50OjpmcmFtZUlkZW50aWZpZXIoRG9jdW1lbnRMb2FkZXIqKQogewogICAgIHJl
dHVybiB7IH07CiB9CkBAIC01OSwxMiArNTksMTIgQEAgVmVjdG9yPFdlYlNvY2tldCo+IFdvcmtl
ck5ldHdvcmtBZ2VudDo6YWN0aXZlV2ViU29ja2V0cyhjb25zdCBMb2NrSG9sZGVyJikKICAgICBy
ZXR1cm4geyB9OwogfQogCi12b2lkIFdvcmtlck5ldHdvcmtBZ2VudDo6c2V0UmVzb3VyY2VDYWNo
aW5nRGlzYWJsZWQoYm9vbCBkaXNhYmxlZCkKK3ZvaWQgV29ya2VyTmV0d29ya0FnZW50OjpzZXRS
ZXNvdXJjZUNhY2hpbmdEaXNhYmxlZEludGVyYWwoYm9vbCBkaXNhYmxlZCkKIHsKICAgICBtX3dv
cmtlckdsb2JhbFNjb3BlLnRocmVhZCgpLndvcmtlckRlYnVnZ2VyUHJveHkoKS5zZXRSZXNvdXJj
ZUNhY2hpbmdEaXNhYmxlZEJ5V2ViSW5zcGVjdG9yKGRpc2FibGVkKTsKIH0KIAotU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogV29ya2VyTmV0d29ya0FnZW50OjpzY3JpcHRFeGVjdXRpb25Db250ZXh0
KEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJikKK1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIFdv
cmtlck5ldHdvcmtBZ2VudDo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dChQcm90b2NvbDo6RXJyb3JT
dHJpbmcmLCBjb25zdCBQcm90b2NvbDo6TmV0d29yazo6RnJhbWVJZCYpCiB7CiAgICAgcmV0dXJu
ICZtX3dvcmtlckdsb2JhbFNjb3BlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2VyTmV0d29ya0FnZW50LmggYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJOZXR3b3JrQWdlbnQuaAppbmRleCA4OTlm
MGE1NmZkMWI3ZGE5NDNhNDU1M2I4Yzk0Y2YzYzdiZmIwYjk0Li45MWIwNWI5YzIzMGVjN2NkMzVh
NDZjZTU3YzU2NjM5MjcyMjJkZmYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJOZXR3b3JrQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJOZXR3b3JrQWdlbnQuaApAQCAtMzQsMTUg
KzM0LDE1IEBAIGNsYXNzIFdvcmtlck5ldHdvcmtBZ2VudCBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0
b3JOZXR3b3JrQWdlbnQgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgog
ICAgIFdvcmtlck5ldHdvcmtBZ2VudChXb3JrZXJBZ2VudENvbnRleHQmKTsKLSAgICB+V29ya2Vy
TmV0d29ya0FnZW50KCkgb3ZlcnJpZGU7CisgICAgfldvcmtlck5ldHdvcmtBZ2VudCgpOwogCiBw
cml2YXRlOgotICAgIFN0cmluZyBsb2FkZXJJZGVudGlmaWVyKERvY3VtZW50TG9hZGVyKikgb3Zl
cnJpZGU7Ci0gICAgU3RyaW5nIGZyYW1lSWRlbnRpZmllcihEb2N1bWVudExvYWRlciopIG92ZXJy
aWRlOwotICAgIFZlY3RvcjxXZWJTb2NrZXQqPiBhY3RpdmVXZWJTb2NrZXRzKGNvbnN0IExvY2tI
b2xkZXImKSBvdmVycmlkZTsKLSAgICB2b2lkIHNldFJlc291cmNlQ2FjaGluZ0Rpc2FibGVkKGJv
b2wpIG92ZXJyaWRlOwotICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGZyYW1lSWQpIG92ZXJyaWRlOwot
ICAgIGJvb2wgc2hvdWxkRm9yY2VCdWZmZXJpbmdOZXR3b3JrUmVzb3VyY2VEYXRhKCkgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQorICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdv
cms6OkxvYWRlcklkIGxvYWRlcklkZW50aWZpZXIoRG9jdW1lbnRMb2FkZXIqKTsKKyAgICBJbnNw
ZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpGcmFtZUlkIGZyYW1lSWRlbnRpZmllcihEb2N1bWVu
dExvYWRlciopOworICAgIFZlY3RvcjxXZWJTb2NrZXQqPiBhY3RpdmVXZWJTb2NrZXRzKGNvbnN0
IExvY2tIb2xkZXImKTsKKyAgICB2b2lkIHNldFJlc291cmNlQ2FjaGluZ0Rpc2FibGVkSW50ZXJh
bChib29sKTsKKyAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250
ZXh0KEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nJiwgY29uc3QgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6TmV0d29yazo6RnJhbWVJZCYpOworICAgIGJvb2wgc2hvdWxkRm9yY2VCdWZmZXJp
bmdOZXR3b3JrUmVzb3VyY2VEYXRhKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgV29y
a2VyR2xvYmFsU2NvcGUmIG1fd29ya2VyR2xvYmFsU2NvcGU7CiB9OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2VyUnVudGltZUFnZW50LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlclJ1bnRpbWVB
Z2VudC5jcHAKaW5kZXggZDkyMzA4MWM1MWUzYmQyNzUyMWFhMjQxYzdjYWM4ZmI0MGQzZTI4My4u
ZmZmZDNjZWEyMTUzNTlmZTZmMGVkMWVkZDc3MmQxNmI3MDk1MWRlYiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2VyUnVudGltZUFnZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJSdW50
aW1lQWdlbnQuY3BwCkBAIC01MSw3ICs1MSw3IEBAIFdvcmtlclJ1bnRpbWVBZ2VudDo6V29ya2Vy
UnVudGltZUFnZW50KFdvcmtlckFnZW50Q29udGV4dCYgY29udGV4dCkKIAogV29ya2VyUnVudGlt
ZUFnZW50Ojp+V29ya2VyUnVudGltZUFnZW50KCkgPSBkZWZhdWx0OwogCi1JbmplY3RlZFNjcmlw
dCBXb3JrZXJSdW50aW1lQWdlbnQ6OmluamVjdGVkU2NyaXB0Rm9yRXZhbChFcnJvclN0cmluZyYg
ZXJyb3JTdHJpbmcsIGNvbnN0IGludCogZXhlY3V0aW9uQ29udGV4dElkKQorSW5qZWN0ZWRTY3Jp
cHQgV29ya2VyUnVudGltZUFnZW50OjppbmplY3RlZFNjcmlwdEZvckV2YWwoUHJvdG9jb2w6OkVy
cm9yU3RyaW5nJiBlcnJvclN0cmluZywgT3B0aW9uYWw8UHJvdG9jb2w6OlJ1bnRpbWU6OkV4ZWN1
dGlvbkNvbnRleHRJZD4mJiBleGVjdXRpb25Db250ZXh0SWQpCiB7CiAgICAgaWYgKGV4ZWN1dGlv
bkNvbnRleHRJZCkgewogICAgICAgICBlcnJvclN0cmluZyA9ICJleGVjdXRpb25Db250ZXh0SWQg
aXMgbm90IHN1cHBvcnRlZCBmb3Igd29ya2VycyBhcyB0aGVyZSBpcyBvbmx5IG9uZSBleGVjdXRp
b24gY29udGV4dCJfczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2Vu
dHMvd29ya2VyL1dvcmtlclJ1bnRpbWVBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2FnZW50cy93b3JrZXIvV29ya2VyUnVudGltZUFnZW50LmgKaW5kZXggNTMwOGViNDM4OGQ0ZDEw
NTJlYzc0NTg1MDQ3YTFlODhlN2Q0M2I0Yi4uNmI5OThmNGQxNzMxODUxZjk5YjY3ZWUxNWE1ZDIw
MDE1ODdmNGQwNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93
b3JrZXIvV29ya2VyUnVudGltZUFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2FnZW50cy93b3JrZXIvV29ya2VyUnVudGltZUFnZW50LmgKQEAgLTM3LDIxICszNywyMCBAQAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBXb3JrZXJHbG9iYWxTY29wZTsKLXR5cGVkZWYg
U3RyaW5nIEVycm9yU3RyaW5nOwogCiBjbGFzcyBXb3JrZXJSdW50aW1lQWdlbnQgZmluYWwgOiBw
dWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JSdW50aW1lQWdlbnQgewogICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKFdvcmtlclJ1bnRpbWVBZ2VudCk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CiBwdWJsaWM6CiAgICAgV29ya2VyUnVudGltZUFnZW50KFdvcmtlckFnZW50Q29udGV4dCYp
OwotICAgIH5Xb3JrZXJSdW50aW1lQWdlbnQoKSBvdmVycmlkZTsKKyAgICB+V29ya2VyUnVudGlt
ZUFnZW50KCk7CiAKIHByaXZhdGU6Ci0gICAgSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdCBpbmpl
Y3RlZFNjcmlwdEZvckV2YWwoRXJyb3JTdHJpbmcmLCBjb25zdCBpbnQqIGV4ZWN1dGlvbkNvbnRl
eHRJZCkgb3ZlcnJpZGU7CisgICAgSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNj
cmlwdEZvckV2YWwoSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBPcHRpb25hbDxJ
bnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0SWQ+JiYpOwogCiAg
ICAgLy8gV2UgZG9uJ3QgbmVlZCB0byBtdXRlIGNvbnNvbGUgZm9yIHdvcmtlcnMuCi0gICAgdm9p
ZCBtdXRlQ29uc29sZSgpIG92ZXJyaWRlIHsgfQotICAgIHZvaWQgdW5tdXRlQ29uc29sZSgpIG92
ZXJyaWRlIHsgfQorICAgIHZvaWQgbXV0ZUNvbnNvbGUoKSB7IH0KKyAgICB2b2lkIHVubXV0ZUNv
bnNvbGUoKSB7IH0KIAogICAgIFJlZlB0cjxJbnNwZWN0b3I6OlJ1bnRpbWVCYWNrZW5kRGlzcGF0
Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKICAgICBXb3JrZXJHbG9iYWxTY29wZSYgbV93b3Jr
ZXJHbG9iYWxTY29wZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5
cHRlZG1lZGlhL0NETVV0aWxpdGllcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNy
eXB0ZWRtZWRpYS9DRE1VdGlsaXRpZXMuY3BwCmluZGV4IDVlODg1YWQ2ZTU4NjkwOWMwZWQyMTVi
ZWU1YmU4ZThlZjdjMjdhZjguLjViZWJjYjQ5YWE4ZWI5YTJiYjA3MTFlYWUwODBmMzc3ZTIyYjk4
MzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NE
TVV0aWxpdGllcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVk
aWEvQ0RNVXRpbGl0aWVzLmNwcApAQCAtNDcsMTIgKzQ3LDEyIEBAIFJlZlB0cjxKU09OOjpPYmpl
Y3Q+IHBhcnNlSlNPTk9iamVjdChjb25zdCBTaGFyZWRCdWZmZXImIGJ1ZmZlcikKIAogICAgIC8v
IFBhcnNlIHRoZSBidWZmZXIgY29udGVudHMgYXMgSlNPTiwgcmV0dXJuaW5nIHRoZSByb290IG9i
amVjdCAoaWYgYW55KS4KICAgICBTdHJpbmcganNvbiB7IGJ1ZmZlci5kYXRhKCksIHN0YXRpY19j
YXN0PHVuc2lnbmVkPihzaXplKSB9OwotICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gdmFsdWU7Ci0g
ICAgUmVmUHRyPEpTT046Ok9iamVjdD4gb2JqZWN0OwotICAgIGlmICghSlNPTjo6VmFsdWU6OnBh
cnNlSlNPTihqc29uLCB2YWx1ZSkgfHwgIXZhbHVlLT5hc09iamVjdChvYmplY3QpKQorCisgICAg
YXV0byB2YWx1ZSA9IEpTT046OlZhbHVlOjpwYXJzZUpTT04oanNvbik7CisgICAgaWYgKCF2YWx1
ZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gb2JqZWN0OworICAgIHJl
dHVybiB2YWx1ZS0+YXNPYmplY3QoKTsKIH0KIAogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL2NsZWFya2V5L0NETUNsZWFyS2V5LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL2NsZWFya2V5L0NETUNsZWFyS2V5
LmNwcAppbmRleCBlNmNjMjJkOTBjN2FjMzliNTZmZDgyYTE2YjA3NjVlYzFlMWNmYTg3Li41YTE4
MmZkZjQ1MjY0MmFhOGVmNDYwYjc3NGFjOWU3YjQwYzJlYzUyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9jbGVhcmtleS9DRE1DbGVhcktleS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkvQ0RN
Q2xlYXJLZXkuY3BwCkBAIC01NSwyMyArNTUsMjcgQEAgc3RhdGljIE9wdGlvbmFsPFZlY3RvcjxS
ZWZQdHI8S2V5SGFuZGxlPj4+IHBhcnNlTGljZW5zZUZvcm1hdChjb25zdCBKU09OOjpPYmplY3QK
ICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIC8vIFJldHJpZXZlIHRoZSBrZXlz
IGFycmF5LgotICAgIFJlZlB0cjxKU09OOjpBcnJheT4ga2V5c0FycmF5OwotICAgIGlmICghaXQt
PnZhbHVlLT5hc0FycmF5KGtleXNBcnJheSkpCisgICAgYXV0byBrZXlzQXJyYXkgPSBpdC0+dmFs
dWUtPmFzQXJyYXkoKTsKKyAgICBpZiAoIWtleXNBcnJheSkKICAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKIAogICAgIFZlY3RvcjxSZWZQdHI8S2V5SGFuZGxlPj4gZGVjb2RlZEtleXM7CiAg
ICAgYm9vbCB2YWxpZEZvcm1hdCA9IHN0ZDo6YWxsX29mKGtleXNBcnJheS0+YmVnaW4oKSwga2V5
c0FycmF5LT5lbmQoKSwKICAgICAgICAgWyZkZWNvZGVkS2V5c10gKGNvbnN0IGF1dG8mIHZhbHVl
KSB7Ci0gICAgICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBrZXlPYmplY3Q7Ci0gICAgICAg
ICAgICBpZiAoIXZhbHVlLT5hc09iamVjdChrZXlPYmplY3QpKQorICAgICAgICAgICAgYXV0byBr
ZXlPYmplY3QgPSB2YWx1ZS0+YXNPYmplY3QoKTsKKyAgICAgICAgICAgIGlmICgha2V5T2JqZWN0
KQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICAgICAgU3RyaW5nIGtl
eVR5cGU7Ci0gICAgICAgICAgICBpZiAoIWtleU9iamVjdC0+Z2V0U3RyaW5nKCJrdHkiLCBrZXlU
eXBlKSB8fCAhZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uoa2V5VHlwZSwgIm9jdCIpKQor
ICAgICAgICAgICAgYXV0byBrZXlUeXBlID0ga2V5T2JqZWN0LT5nZXRTdHJpbmcoImt0eSIpOwor
ICAgICAgICAgICAgaWYgKCFrZXlUeXBlIHx8ICFlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2Fz
ZShrZXlUeXBlLCAib2N0IikpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
ICAgICAgICBTdHJpbmcga2V5SUQsIGtleVZhbHVlOwotICAgICAgICAgICAgaWYgKCFrZXlPYmpl
Y3QtPmdldFN0cmluZygia2lkIiwga2V5SUQpIHx8ICFrZXlPYmplY3QtPmdldFN0cmluZygiayIs
IGtleVZhbHVlKSkKKyAgICAgICAgICAgIGF1dG8ga2V5SUQgPSBrZXlPYmplY3QtPmdldFN0cmlu
Zygia2lkIik7CisgICAgICAgICAgICBpZiAoIWtleUlEKQorICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgICAgICAgICAgYXV0byBrZXlWYWx1ZSA9IGtleU9iamVjdC0+Z2V0U3Ry
aW5nKCJrIik7CisgICAgICAgICAgICBpZiAoIWtleVZhbHVlKQogICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAogICAgICAgICAgICAgS2V5SURUeXBlIGtleUlERGF0YTsKQEAgLTk2LDgg
KzEwMCw4IEBAIHN0YXRpYyBib29sIHBhcnNlTGljZW5zZVJlbGVhc2VBY2tub3dsZWRnZW1lbnRG
b3JtYXQoY29uc3QgSlNPTjo6T2JqZWN0JiByb290KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
ICAgICAvLyBSZXRyaWV2ZSB0aGUga2lkcyBhcnJheS4KLSAgICBSZWZQdHI8SlNPTjo6QXJyYXk+
IGtpZHNBcnJheTsKLSAgICBpZiAoIWl0LT52YWx1ZS0+YXNBcnJheShraWRzQXJyYXkpKQorICAg
IGF1dG8ga2lkc0FycmF5ID0gaXQtPnZhbHVlLT5hc0FycmF5KCk7CisgICAgaWYgKCFraWRzQXJy
YXkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIEZJWE1FOiBSZXR1cm4gdGhlIGtl
eSBJRHMgYW5kIHZhbGlkYXRlIHRoZW0uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vQ0RNRmFpclBsYXlTdHJlYW1pbmcuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0NETUZhaXJQbGF5U3Ry
ZWFtaW5nLmNwcAppbmRleCA4YWM0OGVjNWRjNjliMzE0OTU3YmE0MzNmOTcxMDFlYTI3NzY5NjQ0
Li40ZjQyYzQ5M2NjMzU3MGRkYzZhZjA4ZGUzOTA1ZDBjYzg0OWQ5YTcwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vQ0RNRmFpclBsYXlT
dHJlYW1pbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91
bmRhdGlvbi9DRE1GYWlyUGxheVN0cmVhbWluZy5jcHAKQEAgLTkyLDI0ICs5MiwyNCBAQCBzdGF0
aWMgVmVjdG9yPFJlZjxTaGFyZWRCdWZmZXI+PiBleHRyYWN0U2luZkRhdGEoY29uc3QgU2hhcmVk
QnVmZmVyJiBidWZmZXIpCiAgICAgICAgIHJldHVybiB7IH07CiAgICAgU3RyaW5nIGpzb24geyBi
dWZmZXIuZGF0YSgpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oYnVmZmVyLnNpemUoKSkgfTsKIAot
ICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gdmFsdWU7Ci0gICAgaWYgKCFKU09OOjpWYWx1ZTo6cGFy
c2VKU09OKGpzb24sIHZhbHVlKSkKKyAgICBhdXRvIHZhbHVlID0gSlNPTjo6VmFsdWU6OnBhcnNl
SlNPTihqc29uKTsKKyAgICBpZiAoIXZhbHVlKQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAg
UmVmUHRyPEpTT046Ok9iamVjdD4gb2JqZWN0OwotICAgIGlmICghdmFsdWUtPmFzT2JqZWN0KG9i
amVjdCkpCisgICAgYXV0byBvYmplY3QgPSB2YWx1ZS0+YXNPYmplY3QoKTsKKyAgICBpZiAoIW9i
amVjdCkKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIFJlZlB0cjxKU09OOjpBcnJheT4gc2lu
ZkFycmF5OwotICAgIGlmICghb2JqZWN0LT5nZXRBcnJheShDRE1Qcml2YXRlRmFpclBsYXlTdHJl
YW1pbmc6OnNpbmZOYW1lKCksIHNpbmZBcnJheSkpCisgICAgYXV0byBzaW5mQXJyYXkgPSBvYmpl
Y3QtPmdldEFycmF5KENETVByaXZhdGVGYWlyUGxheVN0cmVhbWluZzo6c2luZk5hbWUoKSk7Cisg
ICAgaWYgKCFzaW5mQXJyYXkpCiAgICAgICAgIHJldHVybiB7IH07CiAKICAgICBWZWN0b3I8UmVm
PFNoYXJlZEJ1ZmZlcj4+IHNpbmZzOwogICAgIHNpbmZzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHko
c2luZkFycmF5LT5sZW5ndGgoKSk7CiAKICAgICBmb3IgKGF1dG8mIHZhbHVlIDogKnNpbmZBcnJh
eSkgewotICAgICAgICBTdHJpbmcga2V5SUQ7Ci0gICAgICAgIGlmICghdmFsdWUtPmFzU3RyaW5n
KGtleUlEKSkKKyAgICAgICAgYXV0byBrZXlJRCA9IHZhbHVlLT5hc1N0cmluZygpOworICAgICAg
ICBpZiAoIWtleUlEKQogICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgVmVjdG9yPGNo
YXI+IHNpbmZEYXRhOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvYXZmb3VuZGF0aW9uL29iamMvQ0RNSW5zdGFuY2VGYWlyUGxheVN0cmVhbWluZ0FWRk9iakMu
bW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9D
RE1JbnN0YW5jZUZhaXJQbGF5U3RyZWFtaW5nQVZGT2JqQy5tbQppbmRleCBjMDUxOWE4YzIyMTkz
MGY1YzYxYTBhODBlOWVjM2ExZTk5YzhmMWQ0Li4xYzQ5Zjg4NzUzYTk0YzkwN2JkZjZkYjAxOWYy
MTk1Yjg0N2I0ODNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9hdmZvdW5kYXRpb24vb2JqYy9DRE1JbnN0YW5jZUZhaXJQbGF5U3RyZWFtaW5nQVZGT2JqQy5t
bQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2Jq
Yy9DRE1JbnN0YW5jZUZhaXJQbGF5U3RyZWFtaW5nQVZGT2JqQy5tbQpAQCAtMzEyLDExICszMTIs
OCBAQCBzdGF0aWMgUmVmUHRyPEpTT046OlZhbHVlPiBwYXJzZUpTT05WYWx1ZShjb25zdCBTaGFy
ZWRCdWZmZXImIGJ1ZmZlcikKIAogICAgIC8vIFBhcnNlIHRoZSBidWZmZXIgY29udGVudHMgYXMg
SlNPTiwgcmV0dXJuaW5nIHRoZSByb290IG9iamVjdCAoaWYgYW55KS4KICAgICBTdHJpbmcganNv
biB7IGJ1ZmZlci5kYXRhKCksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihzaXplKSB9OwotICAgIFJl
ZlB0cjxKU09OOjpWYWx1ZT4gdmFsdWU7Ci0gICAgaWYgKCFKU09OOjpWYWx1ZTo6cGFyc2VKU09O
KGpzb24sIHZhbHVlKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gdmFs
dWU7CisgICAgcmV0dXJuIEpTT046OlZhbHVlOjpwYXJzZUpTT04oanNvbik7CiB9CiAKIGJvb2wg
Q0RNSW5zdGFuY2VGYWlyUGxheVN0cmVhbWluZ0FWRk9iakM6OnN1cHBvcnRzUGVyc2lzdGFibGVT
dGF0ZSgpCkBAIC04MDQsMTkgKzgwMSwyNCBAQCB2b2lkIENETUluc3RhbmNlU2Vzc2lvbkZhaXJQ
bGF5U3RyZWFtaW5nQVZGT2JqQzo6dXBkYXRlTGljZW5zZShjb25zdCBTdHJpbmcmLCBMaQogICAg
ICAgICB9KTsKIAogICAgICAgICBhdXRvIHJvb3QgPSBwYXJzZUpTT05WYWx1ZShyZXNwb25zZURh
dGEpOwotICAgICAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IGFycmF5OwotICAgICAgICBpZiAoIXJv
b3QgfHwgIXJvb3QtPmFzQXJyYXkoYXJyYXkpKSB7CisgICAgICAgIGlmICghcm9vdCkgewogICAg
ICAgICAgICAgY2FsbGJhY2soZmFsc2UsIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0LCBXVEY6
Om51bGxvcHQsIEZhaWxlZCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAg
ICAgICBhdXRvIHBhcnNlUmVzcG9uc2UgPSBbJl0oUmVmUHRyPEpTT046OlZhbHVlPiYgdmFsdWUp
IC0+IGJvb2wgewotICAgICAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gb2JqZWN0OwotICAg
ICAgICAgICAgaWYgKCF2YWx1ZS0+YXNPYmplY3Qob2JqZWN0KSkKKyAgICAgICAgYXV0byBhcnJh
eSA9IHJvb3QtPmFzQXJyYXkoKTsKKyAgICAgICAgaWYgKCFhcnJheSkgeworICAgICAgICAgICAg
Y2FsbGJhY2soZmFsc2UsIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQs
IEZhaWxlZCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBhdXRv
IHBhcnNlUmVzcG9uc2UgPSBbJl0oUmVmPEpTT046OlZhbHVlPiYmIHZhbHVlKSAtPiBib29sIHsK
KyAgICAgICAgICAgIGF1dG8gb2JqZWN0ID0gdmFsdWUtPmFzT2JqZWN0KCk7CisgICAgICAgICAg
ICBpZiAoIW9iamVjdCkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAg
ICAgIFN0cmluZyBrZXlJRFN0cmluZzsKLSAgICAgICAgICAgIGlmICghb2JqZWN0LT5nZXRTdHJp
bmcoImtleUlEIiwga2V5SURTdHJpbmcpKQorICAgICAgICAgICAgYXV0byBrZXlJRFN0cmluZyA9
IG9iamVjdC0+Z2V0U3RyaW5nKCJrZXlJRCIpOworICAgICAgICAgICAgaWYgKCFrZXlJRFN0cmlu
ZykKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgICAgIFZlY3Rvcjx1
aW50OF90PiBrZXlJRFZlY3RvcjsKQEAgLTg0MywxNCArODQ1LDE0IEBAIHZvaWQgQ0RNSW5zdGFu
Y2VTZXNzaW9uRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDOjp1cGRhdGVMaWNlbnNlKGNvbnN0IFN0
cmluZyYsIExpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgICAgICBp
ZiAoaGFzRXJyb3IpIHsKLSAgICAgICAgICAgICAgICBOU0ludGVnZXIgZXJyb3JDb2RlOwotICAg
ICAgICAgICAgICAgIGlmICghZXJyb3JGaW5kUmVzdWx0cy0+dmFsdWUtPmFzSW50ZWdlcihlcnJv
ckNvZGUpKQorICAgICAgICAgICAgICAgIGF1dG8gZXJyb3JDb2RlID0gZXJyb3JGaW5kUmVzdWx0
cy0+dmFsdWUtPmFzSW50ZWdlcigpOworICAgICAgICAgICAgICAgIGlmICghZXJyb3JDb2RlKQog
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgYXV0byBl
cnJvciA9IGFkb3B0TlMoW1tOU0Vycm9yIGFsbG9jXSBpbml0V2l0aERvbWFpbjpAIm9yZy53ZWJr
aXQuZW1lIiBjb2RlOmVycm9yQ29kZSB1c2VySW5mbzpuaWxdKTsKKyAgICAgICAgICAgICAgICBh
dXRvIGVycm9yID0gYWRvcHROUyhbW05TRXJyb3IgYWxsb2NdIGluaXRXaXRoRG9tYWluOkAib3Jn
LndlYmtpdC5lbWUiIGNvZGU6KmVycm9yQ29kZSB1c2VySW5mbzpuaWxdKTsKICAgICAgICAgICAg
ICAgICBbcmVxdWVzdCBwcm9jZXNzQ29udGVudEtleVJlc3BvbnNlRXJyb3I6ZXJyb3IuZ2V0KCld
OwogICAgICAgICAgICAgfSBlbHNlIGlmIChoYXNQYXlsb2FkKSB7Ci0gICAgICAgICAgICAgICAg
U3RyaW5nIHBheWxvYWRTdHJpbmc7Ci0gICAgICAgICAgICAgICAgaWYgKCFwYXlsb2FkRmluZFJl
c3VsdHMtPnZhbHVlLT5hc1N0cmluZyhwYXlsb2FkU3RyaW5nKSkKKyAgICAgICAgICAgICAgICBh
dXRvIHBheWxvYWRTdHJpbmcgPSBwYXlsb2FkRmluZFJlc3VsdHMtPnZhbHVlLT5hc1N0cmluZygp
OworICAgICAgICAgICAgICAgIGlmICghcGF5bG9hZFN0cmluZykKICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgIFZlY3Rvcjx1aW50OF90PiBwYXlsb2Fk
VmVjdG9yOwogICAgICAgICAgICAgICAgIGlmICghYmFzZTY0RGVjb2RlKHBheWxvYWRTdHJpbmcs
IHBheWxvYWRWZWN0b3IpKQpAQCAtODYxLDcgKzg2Myw3IEBAIHZvaWQgQ0RNSW5zdGFuY2VTZXNz
aW9uRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDOjp1cGRhdGVMaWNlbnNlKGNvbnN0IFN0cmluZyYs
IExpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfTsKICAgICAgICAgZm9yIChh
dXRvIHZhbHVlIDogKmFycmF5KSB7Ci0gICAgICAgICAgICBpZiAoIXBhcnNlUmVzcG9uc2UodmFs
dWUpKSB7CisgICAgICAgICAgICBpZiAoIXBhcnNlUmVzcG9uc2UoV1RGTW92ZSh2YWx1ZSkpKSB7
CiAgICAgICAgICAgICAgICAgREVCVUdfTE9HX0lGX1BPU1NJQkxFKExPR0lERU5USUZJRVIsICIn
Y2VuYycgaW5pdERhdGEsIEZhaWxlZCwgY291bGQgbm90IHBhcnNlIHJlc3BvbnNlIik7CiAgICAg
ICAgICAgICAgICAgY2FsbGJhY2soZmFsc2UsIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0LCBX
VEY6Om51bGxvcHQsIEZhaWxlZCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkRyaXZlci9TZXNzaW9uLmNwcCBiL1NvdXJjZS9XZWJEcml2ZXIvU2Vzc2lv
bi5jcHAKaW5kZXggYTU1ZmE0OTM4MGM0OTUxMzBmZTMxYTk2Yzg0ZTA4OWI3NmQxY2FjOC4uNjZl
MmI2ZDQ2OTkyNGY1NDMxYmI1MmVkMDNjNzZkZTA0ZTRhZTI4MCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkRyaXZlci9TZXNzaW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViRHJpdmVyL1Nlc3Npb24uY3Bw
CkBAIC04NSw5ICs4NSw4IEBAIHN0YXRpYyBPcHRpb25hbDxTdHJpbmc+IGZpcnN0V2luZG93SGFu
ZGxlSW5SZXN1bHQoSlNPTjo6VmFsdWUmIHJlc3VsdCkKIHsKICAgICBSZWZQdHI8SlNPTjo6QXJy
YXk+IGhhbmRsZXM7CiAgICAgaWYgKHJlc3VsdC5hc0FycmF5KGhhbmRsZXMpICYmIGhhbmRsZXMt
Pmxlbmd0aCgpKSB7Ci0gICAgICAgIGF1dG8gaGFuZGxlVmFsdWUgPSBoYW5kbGVzLT5nZXQoMCk7
Ci0gICAgICAgIFN0cmluZyBoYW5kbGU7Ci0gICAgICAgIGlmIChoYW5kbGVWYWx1ZS0+YXNTdHJp
bmcoaGFuZGxlKSkKKyAgICAgICAgYXV0byBoYW5kbGUgPSBoYW5kbGVzLT5nZXQoMCktPmFzU3Ry
aW5nKCk7CisgICAgICAgIGlmICghIWhhbmRsZSkKICAgICAgICAgICAgIHJldHVybiBoYW5kbGU7
CiAgICAgfQogICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CkBAIC0xODcsMTEgKzE4NiwxMyBAQCB2
b2lkIFNlc3Npb246OmNyZWF0ZVRvcExldmVsQnJvd3NpbmdDb250ZXh0KEZ1bmN0aW9uPHZvaWQg
KENvbW1hbmRSZXN1bHQmJik+JiYgYwogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29t
bWFuZFJlc3VsdDo6ZmFpbChXVEZNb3ZlKHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0KSkpOwogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIFN0cmluZyBoYW5kbGU7Ci0gICAg
ICAgIGlmICghcmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdldFN0cmluZygiaGFuZGxlIl9zLCBo
YW5kbGUpKSB7CisKKyAgICAgICAgYXV0byBoYW5kbGUgPSByZXNwb25zZS5yZXNwb25zZU9iamVj
dC0+Z2V0U3RyaW5nKCJoYW5kbGUiX3MpOworICAgICAgICBpZiAoIWhhbmRsZSkgewogICAgICAg
ICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0
OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CisKICAgICAgICAgc3dpdGNoVG9Ub3BMZXZlbEJyb3dzaW5nQ29udGV4dChoYW5kbGUpOwog
ICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpzdWNjZXNzKCkpOwogICAg
IH0pOwpAQCAtMjA2LDggKzIwNyw5IEBAIHZvaWQgU2Vzc2lvbjo6aGFuZGxlVXNlclByb21wdHMo
RnVuY3Rpb248dm9pZCAoQ29tbWFuZFJlc3VsdCYmKT4mJiBjb21wbGV0aW9uSGFuCiAgICAgICAg
ICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKFdURk1vdmUocmVzcG9u
c2UucmVzcG9uc2VPYmplY3QpKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAg
ICAgICAgYm9vbCBpc1Nob3dpbmdKYXZhU2NyaXB0RGlhbG9nOwotICAgICAgICBpZiAoIXJlc3Bv
bnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRCb29sZWFuKCJyZXN1bHQiLCBpc1Nob3dpbmdKYXZhU2Ny
aXB0RGlhbG9nKSkgeworCisgICAgICAgIGF1dG8gaXNTaG93aW5nSmF2YVNjcmlwdERpYWxvZyA9
IHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRCb29sZWFuKCJyZXN1bHQiKTsKKyAgICAgICAg
aWYgKCFpc1Nob3dpbmdKYXZhU2NyaXB0RGlhbG9nKSB7CiAgICAgICAgICAgICBjb21wbGV0aW9u
SGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5r
bm93bkVycm9yKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTI3Myw4ICsy
NzUsOCBAQCB2b2lkIFNlc3Npb246OnJlcG9ydFVuZXhwZWN0ZWRBbGVydE9wZW4oRnVuY3Rpb248
dm9pZCAoQ29tbWFuZFJlc3VsdCYmKT4mJiBjb21wbAogICAgIGdldEFsZXJ0VGV4dChbY29tcGxl
dGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oQ29tbWFuZFJlc3VsdCYm
IHJlc3VsdCkgewogICAgICAgICBPcHRpb25hbDxTdHJpbmc+IGFsZXJ0VGV4dDsKICAgICAgICAg
aWYgKCFyZXN1bHQuaXNFcnJvcigpKSB7Ci0gICAgICAgICAgICBTdHJpbmcgdmFsdWVTdHJpbmc7
Ci0gICAgICAgICAgICBpZiAocmVzdWx0LnJlc3VsdCgpLT5hc1N0cmluZyh2YWx1ZVN0cmluZykp
CisgICAgICAgICAgICBhdXRvIHZhbHVlU3RyaW5nID0gcmVzdWx0LnJlc3VsdCgpLT5hc1N0cmlu
ZygpOworICAgICAgICAgICAgaWYgKCEhdmFsdWVTdHJpbmcpCiAgICAgICAgICAgICAgICAgYWxl
cnRUZXh0ID0gdmFsdWVTdHJpbmc7CiAgICAgICAgIH0KICAgICAgICAgYXV0byBlcnJvclJlc3Vs
dCA9IENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmV4cGVj
dGVkQWxlcnRPcGVuKTsKQEAgLTMzNywxNiArMzM5LDE5IEBAIHZvaWQgU2Vzc2lvbjo6Z2V0Q3Vy
cmVudFVSTChGdW5jdGlvbjx2b2lkIChDb21tYW5kUmVzdWx0JiYpPiYmIGNvbXBsZXRpb25IYW5k
bGVyCiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFp
bChXVEZNb3ZlKHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0KSkpOwogICAgICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IGJy
b3dzaW5nQ29udGV4dDsKLSAgICAgICAgICAgIGlmICghcmVzcG9uc2UucmVzcG9uc2VPYmplY3Qt
PmdldE9iamVjdCgiY29udGV4dCIsIGJyb3dzaW5nQ29udGV4dCkpIHsKKworICAgICAgICAgICAg
YXV0byBicm93c2luZ0NvbnRleHQgPSByZXNwb25zZS5yZXNwb25zZU9iamVjdC0+Z2V0T2JqZWN0
KCJjb250ZXh0Iik7CisgICAgICAgICAgICBpZiAoIWJyb3dzaW5nQ29udGV4dCkgewogICAgICAg
ICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJl
c3VsdDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKICAgICAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBTdHJpbmcgdXJsOwotICAgICAgICAgICAgaWYg
KCFicm93c2luZ0NvbnRleHQtPmdldFN0cmluZygidXJsIiwgdXJsKSkgeworCisgICAgICAgICAg
ICBhdXRvIHVybCA9IGJyb3dzaW5nQ29udGV4dC0+Z2V0U3RyaW5nKCJ1cmwiKTsKKyAgICAgICAg
ICAgIGlmICghdXJsKSB7CiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFu
ZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikpOwog
ICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgY29t
cGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6c3VjY2VzcyhKU09OOjpWYWx1ZTo6Y3JlYXRl
KHVybCkpKTsKICAgICAgICAgfSk7CiAgICAgfSk7CkBAIC00NTcsMTYgKzQ2MiwxOSBAQCB2b2lk
IFNlc3Npb246OmdldFRpdGxlKEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSZXN1bHQmJik+JiYgY29t
cGxldGlvbkhhbmRsZXIpCiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFu
ZFJlc3VsdDo6ZmFpbChXVEZNb3ZlKHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0KSkpOwogICAgICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFN0cmluZyB2YWx1
ZVN0cmluZzsKLSAgICAgICAgICAgIGlmICghcmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdldFN0
cmluZygicmVzdWx0Il9zLCB2YWx1ZVN0cmluZykpIHsKKworICAgICAgICAgICAgYXV0byB2YWx1
ZVN0cmluZyA9IHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRTdHJpbmcoInJlc3VsdCJfcyk7
CisgICAgICAgICAgICBpZiAoIXZhbHVlU3RyaW5nKSB7CiAgICAgICAgICAgICAgICAgY29tcGxl
dGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6
OlVua25vd25FcnJvcikpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gcmVzdWx0VmFsdWU7Ci0gICAgICAgICAg
ICBpZiAoIUpTT046OlZhbHVlOjpwYXJzZUpTT04odmFsdWVTdHJpbmcsIHJlc3VsdFZhbHVlKSkg
eworCisgICAgICAgICAgICBhdXRvIHJlc3VsdFZhbHVlID0gSlNPTjo6VmFsdWU6OnBhcnNlSlNP
Tih2YWx1ZVN0cmluZyk7CisgICAgICAgICAgICBpZiAoIXJlc3VsdFZhbHVlKSB7CiAgICAgICAg
ICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVz
dWx0OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikpOwogICAgICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJl
c3VsdDo6c3VjY2VzcyhXVEZNb3ZlKHJlc3VsdFZhbHVlKSkpOwogICAgICAgICB9KTsKICAgICB9
KTsKQEAgLTQ4NiwxNiArNDk0LDE5IEBAIHZvaWQgU2Vzc2lvbjo6Z2V0V2luZG93SGFuZGxlKEZ1
bmN0aW9uPHZvaWQgKENvbW1hbmRSZXN1bHQmJik+JiYgY29tcGxldGlvbkhhbmRsCiAgICAgICAg
ICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKFdURk1vdmUocmVzcG9u
c2UucmVzcG9uc2VPYmplY3QpKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAg
ICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gYnJvd3NpbmdDb250ZXh0OwotICAgICAgICBpZiAo
IXJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRPYmplY3QoImNvbnRleHQiX3MsIGJyb3dzaW5n
Q29udGV4dCkpIHsKKworICAgICAgICBhdXRvIGJyb3dzaW5nQ29udGV4dCA9IHJlc3BvbnNlLnJl
c3BvbnNlT2JqZWN0LT5nZXRPYmplY3QoImNvbnRleHQiX3MpOworICAgICAgICBpZiAoIWJyb3dz
aW5nQ29udGV4dCkgewogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3Vs
dDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikpOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIFN0cmluZyBoYW5kbGU7Ci0gICAgICAg
IGlmICghYnJvd3NpbmdDb250ZXh0LT5nZXRTdHJpbmcoImhhbmRsZSJfcywgaGFuZGxlKSkgewor
CisgICAgICAgIGF1dG8gaGFuZGxlID0gYnJvd3NpbmdDb250ZXh0LT5nZXRTdHJpbmcoImhhbmRs
ZSJfcyk7CisgICAgICAgIGlmICghaGFuZGxlKSB7CiAgICAgICAgICAgICBjb21wbGV0aW9uSGFu
ZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93
bkVycm9yKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KKwogICAgICAgICBjb21w
bGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpzdWNjZXNzKEpTT046OlZhbHVlOjpjcmVhdGUo
aGFuZGxlKSkpOwogICAgIH0pOwogfQpAQCAtNTY0LDIyICs1NzUsMjMgQEAgdm9pZCBTZXNzaW9u
OjpnZXRXaW5kb3dIYW5kbGVzKEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSZXN1bHQmJik+JiYgY29t
cGxldGlvbkhhbmQKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6
OmZhaWwoV1RGTW92ZShyZXNwb25zZS5yZXNwb25zZU9iamVjdCkpKTsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQotICAgICAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IGJyb3dzaW5nQ29u
dGV4dEFycmF5OwotICAgICAgICBpZiAoIXJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRBcnJh
eSgiY29udGV4dHMiX3MsIGJyb3dzaW5nQ29udGV4dEFycmF5KSkgeworCisgICAgICAgIGF1dG8g
YnJvd3NpbmdDb250ZXh0QXJyYXkgPSByZXNwb25zZS5yZXNwb25zZU9iamVjdC0+Z2V0QXJyYXko
ImNvbnRleHRzIl9zKTsKKyAgICAgICAgaWYgKCFicm93c2luZ0NvbnRleHRBcnJheSkgewogICAg
ICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVz
dWx0OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikpOwogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9CisKICAgICAgICAgUmVmUHRyPEpTT046OkFycmF5PiB3aW5kb3dIYW5kbGVzID0gSlNP
Tjo6QXJyYXk6OmNyZWF0ZSgpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYnJv
d3NpbmdDb250ZXh0QXJyYXktPmxlbmd0aCgpOyArK2kpIHsKLSAgICAgICAgICAgIFJlZlB0cjxK
U09OOjpWYWx1ZT4gYnJvd3NpbmdDb250ZXh0VmFsdWUgPSBicm93c2luZ0NvbnRleHRBcnJheS0+
Z2V0KGkpOwotICAgICAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gYnJvd3NpbmdDb250ZXh0
OwotICAgICAgICAgICAgaWYgKCFicm93c2luZ0NvbnRleHRWYWx1ZS0+YXNPYmplY3QoYnJvd3Np
bmdDb250ZXh0KSkgeworICAgICAgICAgICAgYXV0byBicm93c2luZ0NvbnRleHQgPSBicm93c2lu
Z0NvbnRleHRBcnJheS0+Z2V0KGkpLT5hc09iamVjdCgpOworICAgICAgICAgICAgaWYgKCFicm93
c2luZ0NvbnRleHQpIHsKICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5k
UmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVycm9yKSk7CiAg
ICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBTdHJp
bmcgaGFuZGxlOwotICAgICAgICAgICAgaWYgKCFicm93c2luZ0NvbnRleHQtPmdldFN0cmluZygi
aGFuZGxlIl9zLCBoYW5kbGUpKSB7CisgICAgICAgICAgICBhdXRvIGhhbmRsZSA9IGJyb3dzaW5n
Q29udGV4dC0+Z2V0U3RyaW5nKCJoYW5kbGUiX3MpOworICAgICAgICAgICAgaWYgKCFoYW5kbGUp
IHsKICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWls
KENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVycm9yKSk7CiAgICAgICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAgICAgfQpAQCAtNjEzLDE2ICs2MjUsMTkgQEAgdm9pZCBTZXNz
aW9uOjpuZXdXaW5kb3coT3B0aW9uYWw8U3RyaW5nPiB0eXBlSGludCwgRnVuY3Rpb248dm9pZCAo
Q29tbWFuZFJlc3VsdCYKICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5k
UmVzdWx0OjpmYWlsKFdURk1vdmUocmVzcG9uc2UucmVzcG9uc2VPYmplY3QpKSk7CiAgICAgICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgU3RyaW5nIGhhbmRs
ZTsKLSAgICAgICAgICAgIGlmICghcmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdldFN0cmluZygi
aGFuZGxlIl9zLCBoYW5kbGUpKSB7CisKKyAgICAgICAgICAgIGF1dG8gaGFuZGxlID0gcmVzcG9u
c2UucmVzcG9uc2VPYmplY3QtPmdldFN0cmluZygiaGFuZGxlIl9zKTsKKyAgICAgICAgICAgIGlm
ICghaGFuZGxlKSB7CiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJl
c3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikpOwogICAg
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFN0cmluZyBw
cmVzZW50YXRpb247Ci0gICAgICAgICAgICBpZiAoIXJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5n
ZXRTdHJpbmcoInByZXNlbnRhdGlvbiJfcywgcHJlc2VudGF0aW9uKSkgeworCisgICAgICAgICAg
ICBhdXRvIHByZXNlbnRhdGlvbiA9IHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRTdHJpbmco
InByZXNlbnRhdGlvbiJfcyk7CisgICAgICAgICAgICBpZiAoIXByZXNlbnRhdGlvbikgewogICAg
ICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFu
ZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKICAgICAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgICAgICB9CisKICAgICAgICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHJl
c3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgICAgICByZXN1bHQtPnNldFN0
cmluZygiaGFuZGxlIl9zLCBoYW5kbGUpOwogICAgICAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmco
InR5cGUiX3MsIHByZXNlbnRhdGlvbiA9PSAiV2luZG93Il9zID8gIndpbmRvdyJfcyA6ICJ0YWIi
X3MpOwpAQCAtNjU0LDEwICs2NjksOSBAQCB2b2lkIFNlc3Npb246OnN3aXRjaFRvRnJhbWUoUmVm
UHRyPEpTT046OlZhbHVlPiYmIGZyYW1lSUQsIEZ1bmN0aW9uPHZvaWQgKENvbW1hbgogICAgICAg
ICBpZiAobV9jdXJyZW50QnJvd3NpbmdDb250ZXh0KQogICAgICAgICAgICAgcGFyYW1ldGVycy0+
c2V0U3RyaW5nKCJmcmFtZUhhbmRsZSJfcywgbV9jdXJyZW50QnJvd3NpbmdDb250ZXh0LnZhbHVl
KCkpOwogCi0gICAgICAgIGludCBmcmFtZUluZGV4OwotICAgICAgICBpZiAoZnJhbWVJRC0+YXNJ
bnRlZ2VyKGZyYW1lSW5kZXgpKSB7CisgICAgICAgIGlmIChhdXRvIGZyYW1lSW5kZXggPSBmcmFt
ZUlELT5hc0ludGVnZXIoKSkgewogICAgICAgICAgICAgQVNTRVJUKGZyYW1lSW5kZXggPj0gMCAm
JiBmcmFtZUluZGV4IDwgc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZCBzaG9ydD46Om1heCgp
KTsKLSAgICAgICAgICAgIHBhcmFtZXRlcnMtPnNldEludGVnZXIoIm9yZGluYWwiX3MsIGZyYW1l
SW5kZXgpOworICAgICAgICAgICAgcGFyYW1ldGVycy0+c2V0SW50ZWdlcigib3JkaW5hbCJfcywg
KmZyYW1lSW5kZXgpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgU3RyaW5nIGZyYW1l
RWxlbWVudElEID0gZXh0cmFjdEVsZW1lbnRJRCgqZnJhbWVJRCk7CiAgICAgICAgICAgICBBU1NF
UlQoIWZyYW1lRWxlbWVudElELmlzRW1wdHkoKSk7CkBAIC02NjksMTEgKzY4MywxMyBAQCB2b2lk
IFNlc3Npb246OnN3aXRjaFRvRnJhbWUoUmVmUHRyPEpTT046OlZhbHVlPiYmIGZyYW1lSUQsIEZ1
bmN0aW9uPHZvaWQgKENvbW1hbgogICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENv
bW1hbmRSZXN1bHQ6OmZhaWwoV1RGTW92ZShyZXNwb25zZS5yZXNwb25zZU9iamVjdCkpKTsKICAg
ICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBTdHJpbmcg
ZnJhbWVIYW5kbGU7Ci0gICAgICAgICAgICBpZiAoIXJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5n
ZXRTdHJpbmcoInJlc3VsdCJfcywgZnJhbWVIYW5kbGUpKSB7CisKKyAgICAgICAgICAgIGF1dG8g
ZnJhbWVIYW5kbGUgPSByZXNwb25zZS5yZXNwb25zZU9iamVjdC0+Z2V0U3RyaW5nKCJyZXN1bHQi
X3MpOworICAgICAgICAgICAgaWYgKCFmcmFtZUhhbmRsZSkgewogICAgICAgICAgICAgICAgIGNv
bXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JD
b2RlOjpVbmtub3duRXJyb3IpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAg
ICB9CisKICAgICAgICAgICAgIHN3aXRjaFRvQnJvd3NpbmdDb250ZXh0KGZyYW1lSGFuZGxlKTsK
ICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OnN1Y2Nlc3MoKSk7
CiAgICAgICAgIH0pOwpAQCAtNzA1LDExICs3MjEsMTMgQEAgdm9pZCBTZXNzaW9uOjpzd2l0Y2hU
b1BhcmVudEZyYW1lKEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSZXN1bHQmJik+JiYgY29tcGxldGlv
bkgKICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWls
KFdURk1vdmUocmVzcG9uc2UucmVzcG9uc2VPYmplY3QpKSk7CiAgICAgICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgU3RyaW5nIGZyYW1lSGFuZGxlOwotICAg
ICAgICAgICAgaWYgKCFyZXNwb25zZS5yZXNwb25zZU9iamVjdC0+Z2V0U3RyaW5nKCJyZXN1bHQi
X3MsIGZyYW1lSGFuZGxlKSkgeworCisgICAgICAgICAgICBhdXRvIGZyYW1lSGFuZGxlID0gcmVz
cG9uc2UucmVzcG9uc2VPYmplY3QtPmdldFN0cmluZygicmVzdWx0Il9zKTsKKyAgICAgICAgICAg
IGlmICghZnJhbWVIYW5kbGUpIHsKICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihD
b21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVycm9y
KSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQorCiAgICAgICAgICAg
ICBzd2l0Y2hUb0Jyb3dzaW5nQ29udGV4dChmcmFtZUhhbmRsZSk7CiAgICAgICAgICAgICBjb21w
bGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpzdWNjZXNzKCkpOwogICAgICAgICB9KTsKQEAg
LTcyNSwzMiArNzQzLDU0IEBAIHZvaWQgU2Vzc2lvbjo6Z2V0VG9wbGV2ZWxCcm93c2luZ0NvbnRl
eHRSZWN0KEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSZXN1bHQmJik+JiYKICAgICAgICAgICAgIGNv
bXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoV1RGTW92ZShyZXNwb25zZS5yZXNw
b25zZU9iamVjdCkpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBS
ZWZQdHI8SlNPTjo6T2JqZWN0PiBicm93c2luZ0NvbnRleHQ7Ci0gICAgICAgIGlmICghcmVzcG9u
c2UucmVzcG9uc2VPYmplY3QtPmdldE9iamVjdCgiY29udGV4dCJfcywgYnJvd3NpbmdDb250ZXh0
KSkgeworCisgICAgICAgIGF1dG8gYnJvd3NpbmdDb250ZXh0ID0gcmVzcG9uc2UucmVzcG9uc2VP
YmplY3QtPmdldE9iamVjdCgiY29udGV4dCJfcyk7CisgICAgICAgIGlmICghYnJvd3NpbmdDb250
ZXh0KSB7CiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWls
KENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVycm9yKSk7CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gd2luZG93T3Jp
Z2luOwotICAgICAgICBkb3VibGUgeCA9IDAsIHkgPSAwOwotICAgICAgICBpZiAoIWJyb3dzaW5n
Q29udGV4dC0+Z2V0T2JqZWN0KCJ3aW5kb3dPcmlnaW4iX3MsIHdpbmRvd09yaWdpbikKLSAgICAg
ICAgICAgIHx8ICF3aW5kb3dPcmlnaW4tPmdldERvdWJsZSgieCJfcywgeCkKLSAgICAgICAgICAg
IHx8ICF3aW5kb3dPcmlnaW4tPmdldERvdWJsZSgieSJfcywgeSkpIHsKKworICAgICAgICBhdXRv
IHdpbmRvd09yaWdpbiA9IGJyb3dzaW5nQ29udGV4dC0+Z2V0T2JqZWN0KCJ3aW5kb3dPcmlnaW4i
X3MpOworICAgICAgICBpZiAoIXdpbmRvd09yaWdpbikgewogICAgICAgICAgICAgY29tcGxldGlv
bkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OlVu
a25vd25FcnJvcikpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIFJl
ZlB0cjxKU09OOjpPYmplY3Q+IHdpbmRvd1NpemU7Ci0gICAgICAgIGRvdWJsZSB3aWR0aCA9IDAs
IGhlaWdodCA9IDA7Ci0gICAgICAgIGlmICghYnJvd3NpbmdDb250ZXh0LT5nZXRPYmplY3QoIndp
bmRvd1NpemUiX3MsIHdpbmRvd1NpemUpCi0gICAgICAgICAgICB8fCAhd2luZG93U2l6ZS0+Z2V0
RG91YmxlKCJ3aWR0aCJfcywgd2lkdGgpCi0gICAgICAgICAgICB8fCAhd2luZG93U2l6ZS0+Z2V0
RG91YmxlKCJoZWlnaHQiX3MsIGhlaWdodCkpIHsKKworICAgICAgICBhdXRvIHggPSB3aW5kb3dP
cmlnaW4tPmdldERvdWJsZSgieCJfcyk7CisgICAgICAgIGlmICgheCkgewogICAgICAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJv
ckNvZGU6OlVua25vd25FcnJvcikpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CisK
KyAgICAgICAgYXV0byB5ID0gd2luZG93T3JpZ2luLT5nZXREb3VibGUoInkiX3MpOworICAgICAg
ICBpZiAoIXkpIHsKKyAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6
OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGF1dG8gd2luZG93U2l6ZSA9IGJyb3dz
aW5nQ29udGV4dC0+Z2V0T2JqZWN0KCJ3aW5kb3dTaXplIl9zKTsKKyAgICAgICAgaWYgKCF3aW5k
b3dTaXplKSB7CisgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0Ojpm
YWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVycm9yKSk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBhdXRvIHdpZHRoID0gd2luZG93U2l6ZS0+
Z2V0RG91YmxlKCJ3aWR0aCJfcyk7CisgICAgICAgIGlmICghd2lkdGgpIHsKKyAgICAgICAgICAg
IGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJy
b3JDb2RlOjpVbmtub3duRXJyb3IpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
CisgICAgICAgIGF1dG8gaGVpZ2h0ID0gd2luZG93U2l6ZS0+Z2V0RG91YmxlKCJoZWlnaHQiX3Mp
OworICAgICAgICBpZiAoIWhlaWdodCkgeworICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIo
Q29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OlVua25vd25FcnJv
cikpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKICAgICAgICAgYXV0byB3aW5k
b3dSZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICAgICAgd2luZG93UmVjdC0+c2V0
RG91YmxlKCJ4Il9zLCB4KTsKLSAgICAgICAgd2luZG93UmVjdC0+c2V0RG91YmxlKCJ5Il9zLCB5
KTsKLSAgICAgICAgd2luZG93UmVjdC0+c2V0RG91YmxlKCJ3aWR0aCJfcywgd2lkdGgpOwotICAg
ICAgICB3aW5kb3dSZWN0LT5zZXREb3VibGUoImhlaWdodCJfcywgaGVpZ2h0KTsKKyAgICAgICAg
d2luZG93UmVjdC0+c2V0RG91YmxlKCJ4Il9zLCB4LnJlbGVhc2VOb25OdWxsKCkpOworICAgICAg
ICB3aW5kb3dSZWN0LT5zZXREb3VibGUoInkiX3MsIHkucmVsZWFzZU5vbk51bGwoKSk7CisgICAg
ICAgIHdpbmRvd1JlY3QtPnNldERvdWJsZSgid2lkdGgiX3MsIHdpZHRoLnJlbGVhc2VOb25OdWxs
KCkpOworICAgICAgICB3aW5kb3dSZWN0LT5zZXREb3VibGUoImhlaWdodCJfcywgaGVpZ2h0LnJl
bGVhc2VOb25OdWxsKCkpOwogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0
OjpzdWNjZXNzKFdURk1vdmUod2luZG93UmVjdCkpKTsKICAgICB9KTsKIH0KQEAgLTg4MiwxMyAr
OTIyLDE0IEBAIHZvaWQgU2Vzc2lvbjo6ZnVsbHNjcmVlbldpbmRvdyhGdW5jdGlvbjx2b2lkIChD
b21tYW5kUmVzdWx0JiYpPiYmIGNvbXBsZXRpb25IYW5kCiAgICAgICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBTdHJpbmcgdmFsdWVTdHJpbmc7Ci0gICAg
ICAgICAgICBpZiAoIXJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRTdHJpbmcoInJlc3VsdCJf
cywgdmFsdWVTdHJpbmcpKSB7CisgICAgICAgICAgICBhdXRvIHZhbHVlU3RyaW5nID0gcmVzcG9u
c2UucmVzcG9uc2VPYmplY3QtPmdldFN0cmluZygicmVzdWx0Il9zKTsKKyAgICAgICAgICAgIGlm
ICghdmFsdWVTdHJpbmcpIHsKICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21t
YW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVycm9yKSk7
CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgUmVm
UHRyPEpTT046OlZhbHVlPiByZXN1bHRWYWx1ZTsKLSAgICAgICAgICAgIGlmICghSlNPTjo6VmFs
dWU6OnBhcnNlSlNPTih2YWx1ZVN0cmluZywgcmVzdWx0VmFsdWUpKSB7CisKKyAgICAgICAgICAg
IGF1dG8gcmVzdWx0VmFsdWUgPSBKU09OOjpWYWx1ZTo6cGFyc2VKU09OKHZhbHVlU3RyaW5nKTsK
KyAgICAgICAgICAgIGlmICghcmVzdWx0VmFsdWUpIHsKICAgICAgICAgICAgICAgICBjb21wbGV0
aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6
VW5rbm93bkVycm9yKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQpA
QCAtOTAwLDEyICs5NDEsMTIgQEAgdm9pZCBTZXNzaW9uOjpmdWxsc2NyZWVuV2luZG93KEZ1bmN0
aW9uPHZvaWQgKENvbW1hbmRSZXN1bHQmJik+JiYgY29tcGxldGlvbkhhbmQKIAogUmVmUHRyPEpT
T046Ok9iamVjdD4gU2Vzc2lvbjo6Y3JlYXRlRWxlbWVudChSZWZQdHI8SlNPTjo6VmFsdWU+JiYg
dmFsdWUpCiB7Ci0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gdmFsdWVPYmplY3Q7Ci0gICAgaWYg
KCF2YWx1ZS0+YXNPYmplY3QodmFsdWVPYmplY3QpKQorICAgIGF1dG8gdmFsdWVPYmplY3QgPSB2
YWx1ZS0+YXNPYmplY3QoKTsKKyAgICBpZiAoIXZhbHVlT2JqZWN0KQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKIAotICAgIFN0cmluZyBlbGVtZW50SUQ7Ci0gICAgaWYgKCF2YWx1ZU9iamVjdC0+
Z2V0U3RyaW5nKCJzZXNzaW9uLW5vZGUtIiArIGlkKCksIGVsZW1lbnRJRCkpCisgICAgYXV0byBl
bGVtZW50SUQgPSB2YWx1ZU9iamVjdC0+Z2V0U3RyaW5nKCJzZXNzaW9uLW5vZGUtIiArIGlkKCkp
OworICAgIGlmICghZWxlbWVudElEKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIFJl
ZlB0cjxKU09OOjpPYmplY3Q+IGVsZW1lbnRPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgp
OwpAQCAtOTMyLDggKzk3Myw4IEBAIFN0cmluZyBTZXNzaW9uOjpleHRyYWN0RWxlbWVudElEKEpT
T046OlZhbHVlJiB2YWx1ZSkKICAgICBpZiAoIXZhbHVlLmFzT2JqZWN0KHZhbHVlT2JqZWN0KSkK
ICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CiAKLSAgICBTdHJpbmcgZWxlbWVudElEOwot
ICAgIGlmICghdmFsdWVPYmplY3QtPmdldFN0cmluZyh3ZWJFbGVtZW50SWRlbnRpZmllcigpLCBl
bGVtZW50SUQpKQorICAgIGF1dG8gZWxlbWVudElEID0gdmFsdWVPYmplY3QtPmdldFN0cmluZyh3
ZWJFbGVtZW50SWRlbnRpZmllcigpKTsKKyAgICBpZiAoIWVsZW1lbnRJRCkKICAgICAgICAgcmV0
dXJuIGVtcHR5U3RyaW5nKCk7CiAKICAgICByZXR1cm4gZWxlbWVudElEOwpAQCAtOTU0LDU3ICs5
OTUsNTggQEAgdm9pZCBTZXNzaW9uOjpjb21wdXRlRWxlbWVudExheW91dChjb25zdCBTdHJpbmcm
IGVsZW1lbnRJRCwgT3B0aW9uU2V0PEVsZW1lbnRMYXkKICAgICAgICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0LCBmYWxzZSwgV1RGTW92ZShyZXNwb25z
ZS5yZXNwb25zZU9iamVjdCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAg
ICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHJlY3RPYmplY3Q7Ci0gICAgICAgIGlmICghcmVzcG9u
c2UucmVzcG9uc2VPYmplY3QtPmdldE9iamVjdCgicmVjdCJfcywgcmVjdE9iamVjdCkpIHsKKwor
ICAgICAgICBhdXRvIHJlY3RPYmplY3QgPSByZXNwb25zZS5yZXNwb25zZU9iamVjdC0+Z2V0T2Jq
ZWN0KCJyZWN0Il9zKTsKKyAgICAgICAgaWYgKCFyZWN0T2JqZWN0KSB7CiAgICAgICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcihXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCwgZmFsc2UsIG51bGxw
dHIpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CisKICAgICAgICAgT3B0aW9uYWw8
aW50PiBlbGVtZW50WDsKICAgICAgICAgT3B0aW9uYWw8aW50PiBlbGVtZW50WTsKLSAgICAgICAg
UmVmUHRyPEpTT046Ok9iamVjdD4gZWxlbWVudFBvc2l0aW9uOwotICAgICAgICBpZiAocmVjdE9i
amVjdC0+Z2V0T2JqZWN0KCJvcmlnaW4iX3MsIGVsZW1lbnRQb3NpdGlvbikpIHsKLSAgICAgICAg
ICAgIGludCB4LCB5OwotICAgICAgICAgICAgaWYgKGVsZW1lbnRQb3NpdGlvbi0+Z2V0SW50ZWdl
cigieCJfcywgeCkgJiYgZWxlbWVudFBvc2l0aW9uLT5nZXRJbnRlZ2VyKCJ5Il9zLCB5KSkgewot
ICAgICAgICAgICAgICAgIGVsZW1lbnRYID0geDsKLSAgICAgICAgICAgICAgICBlbGVtZW50WSA9
IHk7Ci0gICAgICAgICAgICB9CisgICAgICAgIGF1dG8gZWxlbWVudFBvc2l0aW9uID0gcmVjdE9i
amVjdC0+Z2V0T2JqZWN0KCJvcmlnaW4iX3MpOworICAgICAgICBpZiAoZWxlbWVudFBvc2l0aW9u
KSB7CisgICAgICAgICAgICBlbGVtZW50WCA9IGVsZW1lbnRQb3NpdGlvbi0+Z2V0SW50ZWdlcigi
eCJfcyk7CisgICAgICAgICAgICBlbGVtZW50WSA9IGVsZW1lbnRQb3NpdGlvbi0+Z2V0SW50ZWdl
cigieSJfcyk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKCFlbGVtZW50WCB8fCAhZWxlbWVudFkp
IHsKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURjo6bnVsbG9wdCwgV1RGOjpudWxs
b3B0LCBmYWxzZSwgbnVsbHB0cik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KKwog
ICAgICAgICBPcHRpb25hbDxpbnQ+IGVsZW1lbnRXaWR0aDsKICAgICAgICAgT3B0aW9uYWw8aW50
PiBlbGVtZW50SGVpZ2h0OwotICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBlbGVtZW50U2l6
ZTsKLSAgICAgICAgaWYgKHJlY3RPYmplY3QtPmdldE9iamVjdCgic2l6ZSJfcywgZWxlbWVudFNp
emUpKSB7Ci0gICAgICAgICAgICBpbnQgd2lkdGgsIGhlaWdodDsKLSAgICAgICAgICAgIGlmIChl
bGVtZW50U2l6ZS0+Z2V0SW50ZWdlcigid2lkdGgiX3MsIHdpZHRoKSAmJiBlbGVtZW50U2l6ZS0+
Z2V0SW50ZWdlcigiaGVpZ2h0Il9zLCBoZWlnaHQpKSB7Ci0gICAgICAgICAgICAgICAgZWxlbWVu
dFdpZHRoID0gd2lkdGg7Ci0gICAgICAgICAgICAgICAgZWxlbWVudEhlaWdodCA9IGhlaWdodDsK
LSAgICAgICAgICAgIH0KKyAgICAgICAgYXV0byBlbGVtZW50U2l6ZSA9IHJlY3RPYmplY3QtPmdl
dE9iamVjdCgic2l6ZSJfcyk7CisgICAgICAgIGlmIChlbGVtZW50U2l6ZSkgeworICAgICAgICAg
ICAgZWxlbWVudFdpZHRoID0gZWxlbWVudFNpemUtPmdldEludGVnZXIoIndpZHRoIl9zKTsKKyAg
ICAgICAgICAgIGVsZW1lbnRIZWlnaHQgPSBlbGVtZW50U2l6ZS0+Z2V0SW50ZWdlcigiaGVpZ2h0
Il9zKTsKICAgICAgICAgfQogICAgICAgICBpZiAoIWVsZW1lbnRXaWR0aCB8fCAhZWxlbWVudEhl
aWdodCkgewogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGOjpudWxsb3B0LCBXVEY6
Om51bGxvcHQsIGZhbHNlLCBudWxscHRyKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQorCiAgICAgICAgIFJlY3QgcmVjdCA9IHsgeyBlbGVtZW50WC52YWx1ZSgpLCBlbGVtZW50WS52
YWx1ZSgpIH0sIHsgZWxlbWVudFdpZHRoLnZhbHVlKCksIGVsZW1lbnRIZWlnaHQudmFsdWUoKSB9
IH07CiAKLSAgICAgICAgYm9vbCBpc09ic2N1cmVkOwotICAgICAgICBpZiAoIXJlc3BvbnNlLnJl
c3BvbnNlT2JqZWN0LT5nZXRCb29sZWFuKCJpc09ic2N1cmVkIl9zLCBpc09ic2N1cmVkKSkgewor
ICAgICAgICBhdXRvIGlzT2JzY3VyZWQgPSByZXNwb25zZS5yZXNwb25zZU9iamVjdC0+Z2V0Qm9v
bGVhbigiaXNPYnNjdXJlZCJfcyk7CisgICAgICAgIGlmICghaXNPYnNjdXJlZCkgewogICAgICAg
ICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQsIGZhbHNl
LCBudWxscHRyKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBSZWZQ
dHI8SlNPTjo6T2JqZWN0PiBpblZpZXdDZW50ZXJQb2ludE9iamVjdDsKLSAgICAgICAgaWYgKCFy
ZXNwb25zZS5yZXNwb25zZU9iamVjdC0+Z2V0T2JqZWN0KCJpblZpZXdDZW50ZXJQb2ludCJfcywg
aW5WaWV3Q2VudGVyUG9pbnRPYmplY3QpKSB7CisKKyAgICAgICAgYXV0byBpblZpZXdDZW50ZXJQ
b2ludE9iamVjdCA9IHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRPYmplY3QoImluVmlld0Nl
bnRlclBvaW50Il9zKTsKKyAgICAgICAgaWYgKCFpblZpZXdDZW50ZXJQb2ludE9iamVjdCkgewog
ICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIocmVjdCwgV1RGOjpudWxsb3B0LCBpc09ic2N1
cmVkLCBudWxscHRyKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBp
bnQgaW5WaWV3Q2VudGVyUG9pbnRYID0gMCwgaW5WaWV3Q2VudGVyUG9pbnRZID0gMDsKLSAgICAg
ICAgaWYgKCFpblZpZXdDZW50ZXJQb2ludE9iamVjdC0+Z2V0SW50ZWdlcigieCJfcywgaW5WaWV3
Q2VudGVyUG9pbnRYKQotICAgICAgICAgICAgfHwgIWluVmlld0NlbnRlclBvaW50T2JqZWN0LT5n
ZXRJbnRlZ2VyKCJ5Il9zLCBpblZpZXdDZW50ZXJQb2ludFkpKSB7CisKKyAgICAgICAgYXV0byBp
blZpZXdDZW50ZXJQb2ludFggPSBpblZpZXdDZW50ZXJQb2ludE9iamVjdC0+Z2V0SW50ZWdlcigi
eCJfcyk7CisgICAgICAgIGF1dG8gaW5WaWV3Q2VudGVyUG9pbnRZID0gaW5WaWV3Q2VudGVyUG9p
bnRPYmplY3QtPmdldEludGVnZXIoInkiX3MpOworICAgICAgICBpZiAoIWluVmlld0NlbnRlclBv
aW50WCB8fCAhaW5WaWV3Q2VudGVyUG9pbnRZKSB7CiAgICAgICAgICAgICBjb21wbGV0aW9uSGFu
ZGxlcihXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCwgaXNPYnNjdXJlZCwgbnVsbHB0cik7CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KKwogICAgICAgICBQb2ludCBpblZpZXdDZW50
ZXJQb2ludCA9IHsgaW5WaWV3Q2VudGVyUG9pbnRYLCBpblZpZXdDZW50ZXJQb2ludFkgfTsKICAg
ICAgICAgY29tcGxldGlvbkhhbmRsZXIocmVjdCwgaW5WaWV3Q2VudGVyUG9pbnQsIGlzT2JzY3Vy
ZWQsIG51bGxwdHIpOwogICAgIH0pOwpAQCAtMTA0OCwxNyArMTA5MCwyMCBAQCB2b2lkIFNlc3Np
b246OmZpbmRFbGVtZW50cyhjb25zdCBTdHJpbmcmIHN0cmF0ZWd5LCBjb25zdCBTdHJpbmcmIHNl
bGVjdG9yLCBGaW5kRQogICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRS
ZXN1bHQ6OmZhaWwoV1RGTW92ZShyZXNwb25zZS5yZXNwb25zZU9iamVjdCkpKTsKICAgICAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBTdHJpbmcgdmFsdWVT
dHJpbmc7Ci0gICAgICAgICAgICBpZiAoIXJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRTdHJp
bmcoInJlc3VsdCJfcywgdmFsdWVTdHJpbmcpKSB7CisKKyAgICAgICAgICAgIGF1dG8gdmFsdWVT
dHJpbmcgPSByZXNwb25zZS5yZXNwb25zZU9iamVjdC0+Z2V0U3RyaW5nKCJyZXN1bHQiX3MpOwor
ICAgICAgICAgICAgaWYgKCF2YWx1ZVN0cmluZykgewogICAgICAgICAgICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpV
bmtub3duRXJyb3IpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHJlc3VsdFZhbHVlOwotICAgICAgICAgICAg
aWYgKCFKU09OOjpWYWx1ZTo6cGFyc2VKU09OKHZhbHVlU3RyaW5nLCByZXN1bHRWYWx1ZSkpIHsK
KworICAgICAgICAgICAgYXV0byByZXN1bHRWYWx1ZSA9IEpTT046OlZhbHVlOjpwYXJzZUpTT04o
dmFsdWVTdHJpbmcpOworICAgICAgICAgICAgaWYgKCFyZXN1bHRWYWx1ZSkgewogICAgICAgICAg
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3Vs
dDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgICAgICB9CiAKKwogICAgICAgICAgICAgc3dpdGNoIChtb2RlKSB7CiAgICAgICAgICAg
ICBjYXNlIEZpbmRFbGVtZW50c01vZGU6OlNpbmdsZTogewogICAgICAgICAgICAgICAgIFJlZlB0
cjxKU09OOjpPYmplY3Q+IGVsZW1lbnRPYmplY3QgPSBjcmVhdGVFbGVtZW50KFdURk1vdmUocmVz
dWx0VmFsdWUpKTsKQEAgLTEwNzAsMTEgKzExMTUsMTIgQEAgdm9pZCBTZXNzaW9uOjpmaW5kRWxl
bWVudHMoY29uc3QgU3RyaW5nJiBzdHJhdGVneSwgY29uc3QgU3RyaW5nJiBzZWxlY3RvciwgRmlu
ZEUKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNh
c2UgRmluZEVsZW1lbnRzTW9kZTo6TXVsdGlwbGU6IHsKLSAgICAgICAgICAgICAgICBSZWZQdHI8
SlNPTjo6QXJyYXk+IGVsZW1lbnRzQXJyYXk7Ci0gICAgICAgICAgICAgICAgaWYgKCFyZXN1bHRW
YWx1ZS0+YXNBcnJheShlbGVtZW50c0FycmF5KSkgeworICAgICAgICAgICAgICAgIGF1dG8gZWxl
bWVudHNBcnJheSA9IHJlc3VsdFZhbHVlLT5hc0FycmF5KCk7CisgICAgICAgICAgICAgICAgaWYg
KCFlbGVtZW50c0FycmF5KSB7CiAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVy
KENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpOb1N1Y2hFbGVt
ZW50KSk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9CisK
ICAgICAgICAgICAgICAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IGVsZW1lbnRPYmplY3RzQXJyYXkg
PSBKU09OOjpBcnJheTo6Y3JlYXRlKCk7CiAgICAgICAgICAgICAgICAgdW5zaWduZWQgZWxlbWVu
dHNBcnJheUxlbmd0aCA9IGVsZW1lbnRzQXJyYXktPmxlbmd0aCgpOwogICAgICAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBlbGVtZW50c0FycmF5TGVuZ3RoOyArK2kpIHsKQEAg
LTExMTAsMTYgKzExNTYsMTkgQEAgdm9pZCBTZXNzaW9uOjpnZXRBY3RpdmVFbGVtZW50KEZ1bmN0
aW9uPHZvaWQgKENvbW1hbmRSZXN1bHQmJik+JiYgY29tcGxldGlvbkhhbmQKICAgICAgICAgICAg
ICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKFdURk1vdmUocmVzcG9u
c2UucmVzcG9uc2VPYmplY3QpKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAg
ICAgfQotICAgICAgICAgICAgU3RyaW5nIHZhbHVlU3RyaW5nOwotICAgICAgICAgICAgaWYgKCFy
ZXNwb25zZS5yZXNwb25zZU9iamVjdC0+Z2V0U3RyaW5nKCJyZXN1bHQiX3MsIHZhbHVlU3RyaW5n
KSkgeworCisgICAgICAgICAgICBhdXRvIHZhbHVlU3RyaW5nID0gcmVzcG9uc2UucmVzcG9uc2VP
YmplY3QtPmdldFN0cmluZygicmVzdWx0Il9zKTsKKyAgICAgICAgICAgIGlmICghdmFsdWVTdHJp
bmcpIHsKICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0Ojpm
YWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVycm9yKSk7CiAgICAgICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgUmVmUHRyPEpTT046OlZh
bHVlPiByZXN1bHRWYWx1ZTsKLSAgICAgICAgICAgIGlmICghSlNPTjo6VmFsdWU6OnBhcnNlSlNP
Tih2YWx1ZVN0cmluZywgcmVzdWx0VmFsdWUpKSB7CisKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0
VmFsdWUgPSBKU09OOjpWYWx1ZTo6cGFyc2VKU09OKHZhbHVlU3RyaW5nKTsKKyAgICAgICAgICAg
IGlmICghcmVzdWx0VmFsdWUpIHsKICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihD
b21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVycm9y
KSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQorCiAgICAgICAgICAg
ICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBlbGVtZW50T2JqZWN0ID0gY3JlYXRlRWxlbWVudChXVEZN
b3ZlKHJlc3VsdFZhbHVlKSk7CiAgICAgICAgICAgICBpZiAoIWVsZW1lbnRPYmplY3QpIHsKICAg
ICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1h
bmRSZXN1bHQ6OkVycm9yQ29kZTo6Tm9TdWNoRWxlbWVudCkpOwpAQCAtMTE1NywyNSArMTIwNiwz
MCBAQCB2b2lkIFNlc3Npb246OmlzRWxlbWVudFNlbGVjdGVkKGNvbnN0IFN0cmluZyYgZWxlbWVu
dElELCBGdW5jdGlvbjx2b2lkIChDb21tYW5kUgogICAgICAgICAgICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoV1RGTW92ZShyZXNwb25zZS5yZXNwb25zZU9iamVj
dCkpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBTdHJpbmcgdmFsdWVTdHJpbmc7Ci0gICAgICAgICAgICBpZiAoIXJlc3BvbnNlLnJlc3BvbnNl
T2JqZWN0LT5nZXRTdHJpbmcoInJlc3VsdCJfcywgdmFsdWVTdHJpbmcpKSB7CisKKyAgICAgICAg
ICAgIGF1dG8gdmFsdWVTdHJpbmcgPSByZXNwb25zZS5yZXNwb25zZU9iamVjdC0+Z2V0U3RyaW5n
KCJyZXN1bHQiX3MpOworICAgICAgICAgICAgaWYgKCF2YWx1ZVN0cmluZykgewogICAgICAgICAg
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3Vs
dDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHJlc3VsdFZhbHVl
OwotICAgICAgICAgICAgaWYgKCFKU09OOjpWYWx1ZTo6cGFyc2VKU09OKHZhbHVlU3RyaW5nLCBy
ZXN1bHRWYWx1ZSkpIHsKKworICAgICAgICAgICAgYXV0byByZXN1bHRWYWx1ZSA9IEpTT046OlZh
bHVlOjpwYXJzZUpTT04odmFsdWVTdHJpbmcpOworICAgICAgICAgICAgaWYgKCFyZXN1bHRWYWx1
ZSkgewogICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZh
aWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKICAgICAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgICAgICB9CisKICAgICAgICAgICAgIGlmIChyZXN1bHRWYWx1
ZS0+aXNOdWxsKCkpIHsKICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5k
UmVzdWx0OjpzdWNjZXNzKEpTT046OlZhbHVlOjpjcmVhdGUoZmFsc2UpKSk7CiAgICAgICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgU3RyaW5nIGJvb2xlYW5S
ZXN1bHQ7Ci0gICAgICAgICAgICBpZiAoIXJlc3VsdFZhbHVlLT5hc1N0cmluZyhib29sZWFuUmVz
dWx0KSB8fCBib29sZWFuUmVzdWx0ICE9ICJ0cnVlIikgeworCisgICAgICAgICAgICBhdXRvIGJv
b2xlYW5SZXN1bHQgPSByZXN1bHRWYWx1ZS0+YXNTdHJpbmcoKTsKKyAgICAgICAgICAgIGlmICgh
Ym9vbGVhblJlc3VsdCB8fCBib29sZWFuUmVzdWx0ICE9ICJ0cnVlIikgewogICAgICAgICAgICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6
RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgICAgICB9CisKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6
OnN1Y2Nlc3MoSlNPTjo6VmFsdWU6OmNyZWF0ZSh0cnVlKSkpOwogICAgICAgICB9KTsKICAgICB9
KTsKQEAgLTEyMDgsMTYgKzEyNjIsMTkgQEAgdm9pZCBTZXNzaW9uOjpnZXRFbGVtZW50VGV4dChj
b25zdCBTdHJpbmcmIGVsZW1lbnRJRCwgRnVuY3Rpb248dm9pZCAoQ29tbWFuZFJlc3UKICAgICAg
ICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKFdURk1vdmUo
cmVzcG9uc2UucmVzcG9uc2VPYmplY3QpKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAgICAgfQotICAgICAgICAgICAgU3RyaW5nIHZhbHVlU3RyaW5nOwotICAgICAgICAgICAg
aWYgKCFyZXNwb25zZS5yZXNwb25zZU9iamVjdC0+Z2V0U3RyaW5nKCJyZXN1bHQiX3MsIHZhbHVl
U3RyaW5nKSkgeworCisgICAgICAgICAgICBhdXRvIHZhbHVlU3RyaW5nID0gcmVzcG9uc2UucmVz
cG9uc2VPYmplY3QtPmdldFN0cmluZygicmVzdWx0Il9zKTsKKyAgICAgICAgICAgIGlmICghdmFs
dWVTdHJpbmcpIHsKICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVz
dWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVycm9yKSk7CiAgICAg
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgUmVmUHRyPEpT
T046OlZhbHVlPiByZXN1bHRWYWx1ZTsKLSAgICAgICAgICAgIGlmICghSlNPTjo6VmFsdWU6OnBh
cnNlSlNPTih2YWx1ZVN0cmluZywgcmVzdWx0VmFsdWUpKSB7CisKKyAgICAgICAgICAgIGF1dG8g
cmVzdWx0VmFsdWUgPSBKU09OOjpWYWx1ZTo6cGFyc2VKU09OKHZhbHVlU3RyaW5nKTsKKyAgICAg
ICAgICAgIGlmICghcmVzdWx0VmFsdWUpIHsKICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFu
ZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93
bkVycm9yKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQorCiAgICAg
ICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpzdWNjZXNzKFdURk1vdmUo
cmVzdWx0VmFsdWUpKSk7CiAgICAgICAgIH0pOwogICAgIH0pOwpAQCAtMTI0OSwxNiArMTMwNiwx
OSBAQCB2b2lkIFNlc3Npb246OmdldEVsZW1lbnRUYWdOYW1lKGNvbnN0IFN0cmluZyYgZWxlbWVu
dElELCBGdW5jdGlvbjx2b2lkIChDb21tYW5kUgogICAgICAgICAgICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoV1RGTW92ZShyZXNwb25zZS5yZXNwb25zZU9iamVj
dCkpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBTdHJpbmcgdmFsdWVTdHJpbmc7Ci0gICAgICAgICAgICBpZiAoIXJlc3BvbnNlLnJlc3BvbnNl
T2JqZWN0LT5nZXRTdHJpbmcoInJlc3VsdCJfcywgdmFsdWVTdHJpbmcpKSB7CisKKyAgICAgICAg
ICAgIGF1dG8gdmFsdWVTdHJpbmcgPSByZXNwb25zZS5yZXNwb25zZU9iamVjdC0+Z2V0U3RyaW5n
KCJyZXN1bHQiX3MpOworICAgICAgICAgICAgaWYgKCF2YWx1ZVN0cmluZykgewogICAgICAgICAg
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3Vs
dDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHJlc3VsdFZhbHVl
OwotICAgICAgICAgICAgaWYgKCFKU09OOjpWYWx1ZTo6cGFyc2VKU09OKHZhbHVlU3RyaW5nLCBy
ZXN1bHRWYWx1ZSkpIHsKKworICAgICAgICAgICAgYXV0byByZXN1bHRWYWx1ZSA9IEpTT046OlZh
bHVlOjpwYXJzZUpTT04odmFsdWVTdHJpbmcpOworICAgICAgICAgICAgaWYgKCFyZXN1bHRWYWx1
ZSkgewogICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZh
aWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKICAgICAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgICAgICB9CisKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5k
bGVyKENvbW1hbmRSZXN1bHQ6OnN1Y2Nlc3MoV1RGTW92ZShyZXN1bHRWYWx1ZSkpKTsKICAgICAg
ICAgfSk7CiAgICAgfSk7CkBAIC0xMzE3LDE2ICsxMzc3LDE5IEBAIHZvaWQgU2Vzc2lvbjo6aXNF
bGVtZW50RW5hYmxlZChjb25zdCBTdHJpbmcmIGVsZW1lbnRJRCwgRnVuY3Rpb248dm9pZCAoQ29t
bWFuZFJlCiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6
ZmFpbChXVEZNb3ZlKHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0KSkpOwogICAgICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFN0cmluZyB2YWx1ZVN0cmluZzsK
LSAgICAgICAgICAgIGlmICghcmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdldFN0cmluZygicmVz
dWx0Il9zLCB2YWx1ZVN0cmluZykpIHsKKworICAgICAgICAgICAgYXV0byB2YWx1ZVN0cmluZyA9
IHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRTdHJpbmcoInJlc3VsdCJfcyk7CisgICAgICAg
ICAgICBpZiAoIXZhbHVlU3RyaW5nKSB7CiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OlVua25vd25F
cnJvcikpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gcmVzdWx0VmFsdWU7Ci0gICAgICAgICAgICBpZiAoIUpT
T046OlZhbHVlOjpwYXJzZUpTT04odmFsdWVTdHJpbmcsIHJlc3VsdFZhbHVlKSkgeworCisgICAg
ICAgICAgICBhdXRvIHJlc3VsdFZhbHVlID0gSlNPTjo6VmFsdWU6OnBhcnNlSlNPTih2YWx1ZVN0
cmluZyk7CisgICAgICAgICAgICBpZiAoIXJlc3VsdFZhbHVlKSB7CiAgICAgICAgICAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJv
ckNvZGU6OlVua25vd25FcnJvcikpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
ICAgIH0KKwogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6c3Vj
Y2VzcyhXVEZNb3ZlKHJlc3VsdFZhbHVlKSkpOwogICAgICAgICB9KTsKICAgICB9KTsKQEAgLTEz
NTgsMTYgKzE0MjEsMTkgQEAgdm9pZCBTZXNzaW9uOjppc0VsZW1lbnREaXNwbGF5ZWQoY29uc3Qg
U3RyaW5nJiBlbGVtZW50SUQsIEZ1bmN0aW9uPHZvaWQgKENvbW1hbmQKICAgICAgICAgICAgICAg
ICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKFdURk1vdmUocmVzcG9uc2Uu
cmVzcG9uc2VPYmplY3QpKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAg
fQotICAgICAgICAgICAgU3RyaW5nIHZhbHVlU3RyaW5nOwotICAgICAgICAgICAgaWYgKCFyZXNw
b25zZS5yZXNwb25zZU9iamVjdC0+Z2V0U3RyaW5nKCJyZXN1bHQiX3MsIHZhbHVlU3RyaW5nKSkg
eworCisgICAgICAgICAgICBhdXRvIHZhbHVlU3RyaW5nID0gcmVzcG9uc2UucmVzcG9uc2VPYmpl
Y3QtPmdldFN0cmluZygicmVzdWx0Il9zKTsKKyAgICAgICAgICAgIGlmICghdmFsdWVTdHJpbmcp
IHsKICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWls
KENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVycm9yKSk7CiAgICAgICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgUmVmUHRyPEpTT046OlZhbHVl
PiByZXN1bHRWYWx1ZTsKLSAgICAgICAgICAgIGlmICghSlNPTjo6VmFsdWU6OnBhcnNlSlNPTih2
YWx1ZVN0cmluZywgcmVzdWx0VmFsdWUpKSB7CisKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0VmFs
dWUgPSBKU09OOjpWYWx1ZTo6cGFyc2VKU09OKHZhbHVlU3RyaW5nKTsKKyAgICAgICAgICAgIGlm
ICghcmVzdWx0VmFsdWUpIHsKICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21t
YW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVycm9yKSk7
CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpzdWNjZXNzKFdURk1vdmUocmVzdWx0VmFs
dWUpKSk7CiAgICAgICAgIH0pOwogICAgIH0pOwpAQCAtMTQwMCwxNiArMTQ2NiwxOSBAQCB2b2lk
IFNlc3Npb246OmdldEVsZW1lbnRBdHRyaWJ1dGUoY29uc3QgU3RyaW5nJiBlbGVtZW50SUQsIGNv
bnN0IFN0cmluZyYgYXR0cmlidQogICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENv
bW1hbmRSZXN1bHQ6OmZhaWwoV1RGTW92ZShyZXNwb25zZS5yZXNwb25zZU9iamVjdCkpKTsKICAg
ICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBTdHJpbmcg
dmFsdWVTdHJpbmc7Ci0gICAgICAgICAgICBpZiAoIXJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5n
ZXRTdHJpbmcoInJlc3VsdCJfcywgdmFsdWVTdHJpbmcpKSB7CisKKyAgICAgICAgICAgIGF1dG8g
dmFsdWVTdHJpbmcgPSByZXNwb25zZS5yZXNwb25zZU9iamVjdC0+Z2V0U3RyaW5nKCJyZXN1bHQi
X3MpOworICAgICAgICAgICAgaWYgKCF2YWx1ZVN0cmluZykgewogICAgICAgICAgICAgICAgIGNv
bXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JD
b2RlOjpVbmtub3duRXJyb3IpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHJlc3VsdFZhbHVlOwotICAgICAg
ICAgICAgaWYgKCFKU09OOjpWYWx1ZTo6cGFyc2VKU09OKHZhbHVlU3RyaW5nLCByZXN1bHRWYWx1
ZSkpIHsKKworICAgICAgICAgICAgYXV0byByZXN1bHRWYWx1ZSA9IEpTT046OlZhbHVlOjpwYXJz
ZUpTT04odmFsdWVTdHJpbmcpOworICAgICAgICAgICAgaWYgKCFyZXN1bHRWYWx1ZSkgewogICAg
ICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFu
ZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKICAgICAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgICAgICB9CisKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1h
bmRSZXN1bHQ6OnN1Y2Nlc3MoV1RGTW92ZShyZXN1bHRWYWx1ZSkpKTsKICAgICAgICAgfSk7CiAg
ICAgfSk7CkBAIC0xNDQxLDE2ICsxNTEwLDE5IEBAIHZvaWQgU2Vzc2lvbjo6Z2V0RWxlbWVudFBy
b3BlcnR5KGNvbnN0IFN0cmluZyYgZWxlbWVudElELCBjb25zdCBTdHJpbmcmIHByb3BlcnR5CiAg
ICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChXVEZN
b3ZlKHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0KSkpOwogICAgICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFN0cmluZyB2YWx1ZVN0cmluZzsKLSAgICAgICAg
ICAgIGlmICghcmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdldFN0cmluZygicmVzdWx0Il9zLCB2
YWx1ZVN0cmluZykpIHsKKworICAgICAgICAgICAgYXV0byB2YWx1ZVN0cmluZyA9IHJlc3BvbnNl
LnJlc3BvbnNlT2JqZWN0LT5nZXRTdHJpbmcoInJlc3VsdCJfcyk7CisgICAgICAgICAgICBpZiAo
IXZhbHVlU3RyaW5nKSB7CiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFu
ZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikpOwog
ICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFJlZlB0
cjxKU09OOjpWYWx1ZT4gcmVzdWx0VmFsdWU7Ci0gICAgICAgICAgICBpZiAoIUpTT046OlZhbHVl
OjpwYXJzZUpTT04odmFsdWVTdHJpbmcsIHJlc3VsdFZhbHVlKSkgeworCisgICAgICAgICAgICBh
dXRvIHJlc3VsdFZhbHVlID0gSlNPTjo6VmFsdWU6OnBhcnNlSlNPTih2YWx1ZVN0cmluZyk7Cisg
ICAgICAgICAgICBpZiAoIXJlc3VsdFZhbHVlKSB7CiAgICAgICAgICAgICAgICAgY29tcGxldGlv
bkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OlVu
a25vd25FcnJvcikpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KKwog
ICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6c3VjY2VzcyhXVEZN
b3ZlKHJlc3VsdFZhbHVlKSkpOwogICAgICAgICB9KTsKICAgICB9KTsKQEAgLTE0ODIsMTYgKzE1
NTQsMTkgQEAgdm9pZCBTZXNzaW9uOjpnZXRFbGVtZW50Q1NTVmFsdWUoY29uc3QgU3RyaW5nJiBl
bGVtZW50SUQsIGNvbnN0IFN0cmluZyYgY3NzUHJvcGUKICAgICAgICAgICAgICAgICBjb21wbGV0
aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKFdURk1vdmUocmVzcG9uc2UucmVzcG9uc2VP
YmplY3QpKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQotICAgICAg
ICAgICAgU3RyaW5nIHZhbHVlU3RyaW5nOwotICAgICAgICAgICAgaWYgKCFyZXNwb25zZS5yZXNw
b25zZU9iamVjdC0+Z2V0U3RyaW5nKCJyZXN1bHQiX3MsIHZhbHVlU3RyaW5nKSkgeworCisgICAg
ICAgICAgICBhdXRvIHZhbHVlU3RyaW5nID0gcmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdldFN0
cmluZygicmVzdWx0Il9zKTsKKyAgICAgICAgICAgIGlmICghdmFsdWVTdHJpbmcpIHsKICAgICAg
ICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRS
ZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVycm9yKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICAgICAgfQotICAgICAgICAgICAgUmVmUHRyPEpTT046OlZhbHVlPiByZXN1bHRW
YWx1ZTsKLSAgICAgICAgICAgIGlmICghSlNPTjo6VmFsdWU6OnBhcnNlSlNPTih2YWx1ZVN0cmlu
ZywgcmVzdWx0VmFsdWUpKSB7CisKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0VmFsdWUgPSBKU09O
OjpWYWx1ZTo6cGFyc2VKU09OKHZhbHVlU3RyaW5nKTsKKyAgICAgICAgICAgIGlmICghcmVzdWx0
VmFsdWUpIHsKICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0
OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVycm9yKSk7CiAgICAgICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBjb21wbGV0aW9u
SGFuZGxlcihDb21tYW5kUmVzdWx0OjpzdWNjZXNzKFdURk1vdmUocmVzdWx0VmFsdWUpKSk7CiAg
ICAgICAgIH0pOwogICAgIH0pOwpAQCAtMTU1NSwzMiArMTYzMCwzNSBAQCB2b2lkIFNlc3Npb246
OmVsZW1lbnRJc0ZpbGVVcGxvYWQoY29uc3QgU3RyaW5nJiBlbGVtZW50SUQsIEZ1bmN0aW9uPHZv
aWQgKENvbW1hbgogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6
ZmFpbChXVEZNb3ZlKHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0KSkpOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9Ci0gICAgICAgIFN0cmluZyB2YWx1ZVN0cmluZzsKLSAgICAgICAgaWYg
KCFyZXNwb25zZS5yZXNwb25zZU9iamVjdC0+Z2V0U3RyaW5nKCJyZXN1bHQiX3MsIHZhbHVlU3Ry
aW5nKSkgeworCisgICAgICAgIGF1dG8gdmFsdWVTdHJpbmcgPSByZXNwb25zZS5yZXNwb25zZU9i
amVjdC0+Z2V0U3RyaW5nKCJyZXN1bHQiX3MpOworICAgICAgICBpZiAoIXZhbHVlU3RyaW5nKSB7
CiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1h
bmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVycm9yKSk7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KLSAgICAgICAgUmVmUHRyPEpTT046OlZhbHVlPiByZXN1bHRWYWx1ZTsKLSAg
ICAgICAgaWYgKCFKU09OOjpWYWx1ZTo6cGFyc2VKU09OKHZhbHVlU3RyaW5nLCByZXN1bHRWYWx1
ZSkpIHsKKworICAgICAgICBhdXRvIHJlc3VsdFZhbHVlID0gSlNPTjo6VmFsdWU6OnBhcnNlSlNP
Tih2YWx1ZVN0cmluZyk7CisgICAgICAgIGlmICghcmVzdWx0VmFsdWUpIHsKICAgICAgICAgICAg
IGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJy
b3JDb2RlOjpVbmtub3duRXJyb3IpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQor
CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OnN1Y2Nlc3MoV1RGTW92
ZShyZXN1bHRWYWx1ZSkpKTsKICAgICB9KTsKIH0KIAogT3B0aW9uYWw8U2Vzc2lvbjo6RmlsZVVw
bG9hZFR5cGU+IFNlc3Npb246OnBhcnNlRWxlbWVudElzRmlsZVVwbG9hZFJlc3VsdChjb25zdCBS
ZWZQdHI8SlNPTjo6VmFsdWU+JiByZXN1bHRWYWx1ZSkKIHsKLSAgICBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiByZXN1bHQ7Ci0gICAgaWYgKCFyZXN1bHRWYWx1ZS0+YXNPYmplY3QocmVzdWx0KSkKKyAg
ICBhdXRvIHJlc3VsdCA9IHJlc3VsdFZhbHVlLT5hc09iamVjdCgpOworICAgIGlmICghcmVzdWx0
KQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgYm9vbCBpc0ZpbGVVcGxvYWQ7
Ci0gICAgaWYgKCFyZXN1bHQtPmdldEJvb2xlYW4oImZpbGVVcGxvYWQiX3MsIGlzRmlsZVVwbG9h
ZCkgfHwgIWlzRmlsZVVwbG9hZCkKKyAgICBhdXRvIGlzRmlsZVVwbG9hZCA9IHJlc3VsdC0+Z2V0
Qm9vbGVhbigiZmlsZVVwbG9hZCJfKTsKKyAgICBpZiAoIWlzRmlsZVVwbG9hZCB8fCAhKmlzRmls
ZVVwbG9hZCkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIGJvb2wgbXVsdGlw
bGU7Ci0gICAgaWYgKCFyZXN1bHQtPmdldEJvb2xlYW4oIm11bHRpcGxlIl9zLCBtdWx0aXBsZSkg
fHwgIW11bHRpcGxlKQorICAgIGF1dG8gbXVsdGlwbGUgPSByZXN1bHQtPmdldEJvb2xlYW4oIm11
bHRpcGxlIl8pOworICAgIGlmICghbXVsdGlwbGUgfHwgISptdWx0aXBsZSkKICAgICAgICAgcmV0
dXJuIEZpbGVVcGxvYWRUeXBlOjpTaW5nbGU7CiAKICAgICByZXR1cm4gRmlsZVVwbG9hZFR5cGU6
Ok11bHRpcGxlOwpAQCAtMTY0MSw4ICsxNzE5LDggQEAgdm9pZCBTZXNzaW9uOjplbGVtZW50Q2xp
Y2soY29uc3QgU3RyaW5nJiBlbGVtZW50SUQsIEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSZXN1bHQK
ICAgICAgICAgICAgICAgICBnZXRFbGVtZW50VGFnTmFtZShlbGVtZW50SUQsIFt0aGlzLCBlbGVt
ZW50SUQsIGluVmlld0NlbnRlciA9IFdURk1vdmUoaW5WaWV3Q2VudGVyKSwgY29tcGxldGlvbkhh
bmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oQ29tbWFuZFJlc3VsdCYmIHJlc3Vs
dCkgbXV0YWJsZSB7CiAgICAgICAgICAgICAgICAgICAgIGJvb2wgaXNPcHRpb25FbGVtZW50ID0g
ZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgIGlmICghcmVzdWx0LmlzRXJyb3IoKSkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHRhZ05hbWU7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBpZiAocmVzdWx0LnJlc3VsdCgpLT5hc1N0cmluZyh0YWdOYW1lKSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGF1dG8gdGFnTmFtZSA9IHJlc3VsdC5yZXN1bHQoKS0+YXNTdHJpbmcoKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghIXRhZ05hbWUpCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaXNPcHRpb25FbGVtZW50ID0gdGFnTmFtZSA9PSAib3B0aW9uIjsKICAgICAg
ICAgICAgICAgICAgICAgfQogCkBAIC0xNjk3LDE2ICsxNzc1LDE5IEBAIHZvaWQgU2Vzc2lvbjo6
ZWxlbWVudElzRWRpdGFibGUoY29uc3QgU3RyaW5nJiBlbGVtZW50SUQsIEZ1bmN0aW9uPHZvaWQg
KENvbW1hbmRSCiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0Ojpm
YWlsKFdURk1vdmUocmVzcG9uc2UucmVzcG9uc2VPYmplY3QpKSk7CiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KLSAgICAgICAgU3RyaW5nIHZhbHVlU3RyaW5nOwotICAgICAgICBpZiAo
IXJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRTdHJpbmcoInJlc3VsdCJfcywgdmFsdWVTdHJp
bmcpKSB7CisKKyAgICAgICAgYXV0byB2YWx1ZVN0cmluZyA9IHJlc3BvbnNlLnJlc3BvbnNlT2Jq
ZWN0LT5nZXRTdHJpbmcoInJlc3VsdCJfcyk7CisgICAgICAgIGlmICghdmFsdWVTdHJpbmcpIHsK
ICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFu
ZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQotICAgICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHJlc3VsdFZhbHVlOwotICAg
ICAgICBpZiAoIUpTT046OlZhbHVlOjpwYXJzZUpTT04odmFsdWVTdHJpbmcsIHJlc3VsdFZhbHVl
KSkgeworCisgICAgICAgIGF1dG8gcmVzdWx0VmFsdWUgPSBKU09OOjpWYWx1ZTo6cGFyc2VKU09O
KHZhbHVlU3RyaW5nKTsKKyAgICAgICAgaWYgKCFyZXN1bHRWYWx1ZSkgewogICAgICAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJv
ckNvZGU6OlVua25vd25FcnJvcikpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CisK
ICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6c3VjY2VzcyhXVEZNb3Zl
KHJlc3VsdFZhbHVlKSkpOwogICAgIH0pOwogfQpAQCAtMTczMCw4ICsxODExLDggQEAgdm9pZCBT
ZXNzaW9uOjplbGVtZW50Q2xlYXIoY29uc3QgU3RyaW5nJiBlbGVtZW50SUQsIEZ1bmN0aW9uPHZv
aWQgKENvbW1hbmRSZXN1bHQKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9
CiAKLSAgICAgICAgICAgIGJvb2wgaXNFZGl0YWJsZTsKLSAgICAgICAgICAgIGlmICghcmVzdWx0
LnJlc3VsdCgpLT5hc0Jvb2xlYW4oaXNFZGl0YWJsZSkgfHwgIWlzRWRpdGFibGUpIHsKKyAgICAg
ICAgICAgIGF1dG8gaXNFZGl0YWJsZSA9IHJlc3VsdC5yZXN1bHQoKS0+YXNCb29sZWFuKCk7Cisg
ICAgICAgICAgICBpZiAoIWlzRWRpdGFibGUgfHwgISppc0VkaXRhYmxlKSB7CiAgICAgICAgICAg
ICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0
OjpFcnJvckNvZGU6OkludmFsaWRFbGVtZW50U3RhdGUpKTsKICAgICAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgICAgICB9CkBAIC0yMDY1LDE2ICsyMTQ2LDE5IEBAIHZvaWQgU2Vzc2lvbjo6
Z2V0UGFnZVNvdXJjZShGdW5jdGlvbjx2b2lkIChDb21tYW5kUmVzdWx0JiYpPiYmIGNvbXBsZXRp
b25IYW5kbGVyCiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3Vs
dDo6ZmFpbChXVEZNb3ZlKHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0KSkpOwogICAgICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFN0cmluZyB2YWx1ZVN0cmlu
ZzsKLSAgICAgICAgICAgIGlmICghcmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdldFN0cmluZygi
cmVzdWx0Il9zLCB2YWx1ZVN0cmluZykpIHsKKworICAgICAgICAgICAgYXV0byB2YWx1ZVN0cmlu
ZyA9IHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRTdHJpbmcoInJlc3VsdCJfcyk7CisgICAg
ICAgICAgICBpZiAoIXZhbHVlU3RyaW5nKSB7CiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhh
bmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OlVua25v
d25FcnJvcikpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gcmVzdWx0VmFsdWU7Ci0gICAgICAgICAgICBpZiAo
IUpTT046OlZhbHVlOjpwYXJzZUpTT04odmFsdWVTdHJpbmcsIHJlc3VsdFZhbHVlKSkgeworCisg
ICAgICAgICAgICBhdXRvIHJlc3VsdFZhbHVlID0gSlNPTjo6VmFsdWU6OnBhcnNlSlNPTih2YWx1
ZVN0cmluZyk7CisgICAgICAgICAgICBpZiAoIXJlc3VsdFZhbHVlKSB7CiAgICAgICAgICAgICAg
ICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpF
cnJvckNvZGU6OlVua25vd25FcnJvcikpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgICAgIH0KKwogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6
c3VjY2VzcyhXVEZNb3ZlKHJlc3VsdFZhbHVlKSkpOwogICAgICAgICB9KTsKICAgICB9KTsKQEAg
LTIwODIsOCArMjE2Niw3IEBAIHZvaWQgU2Vzc2lvbjo6Z2V0UGFnZVNvdXJjZShGdW5jdGlvbjx2
b2lkIChDb21tYW5kUmVzdWx0JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyCiAKIFJlZlB0cjxKU09O
OjpWYWx1ZT4gU2Vzc2lvbjo6aGFuZGxlU2NyaXB0UmVzdWx0KFJlZlB0cjxKU09OOjpWYWx1ZT4m
JiByZXN1bHRWYWx1ZSkKIHsKLSAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IHJlc3VsdEFycmF5Owot
ICAgIGlmIChyZXN1bHRWYWx1ZS0+YXNBcnJheShyZXN1bHRBcnJheSkpIHsKKyAgICBpZiAoYXV0
byByZXN1bHRBcnJheSA9IHJlc3VsdFZhbHVlLT5hc0FycmF5KCkpIHsKICAgICAgICAgUmVmUHRy
PEpTT046OkFycmF5PiByZXR1cm5WYWx1ZUFycmF5ID0gSlNPTjo6QXJyYXk6OmNyZWF0ZSgpOwog
ICAgICAgICB1bnNpZ25lZCByZXN1bHRBcnJheUxlbmd0aCA9IHJlc3VsdEFycmF5LT5sZW5ndGgo
KTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlc3VsdEFycmF5TGVuZ3RoOyAr
K2kpCkBAIC0yMDk0LDggKzIxNzcsNyBAQCBSZWZQdHI8SlNPTjo6VmFsdWU+IFNlc3Npb246Omhh
bmRsZVNjcmlwdFJlc3VsdChSZWZQdHI8SlNPTjo6VmFsdWU+JiYgcmVzdWx0VmFsdQogICAgIGlm
IChhdXRvIGVsZW1lbnQgPSBjcmVhdGVFbGVtZW50KFJlZlB0cjxKU09OOjpWYWx1ZT4ocmVzdWx0
VmFsdWUpKSkKICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CiAKLSAgICBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiByZXN1bHRPYmplY3Q7Ci0gICAgaWYgKHJlc3VsdFZhbHVlLT5hc09iamVjdChyZXN1bHRP
YmplY3QpKSB7CisgICAgaWYgKGF1dG8gcmVzdWx0T2JqZWN0ID0gcmVzdWx0VmFsdWUtPmFzT2Jq
ZWN0KCkpIHsKICAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcmV0dXJuVmFsdWVPYmplY3Qg
PSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICBhdXRvIGVuZCA9IHJlc3VsdE9iamVj
dC0+ZW5kKCk7CiAgICAgICAgIGZvciAoYXV0byBpdCA9IHJlc3VsdE9iamVjdC0+YmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KQpAQCAtMjE0OCwxNiArMjIzMCwxOSBAQCB2b2lkIFNlc3Npb246OmV4
ZWN1dGVTY3JpcHQoY29uc3QgU3RyaW5nJiBzY3JpcHQsIFJlZlB0cjxKU09OOjpBcnJheT4mJiBh
cmd1bWVudAogICAgICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKHJl
c3VsdCkpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIFN0cmluZyB2YWx1ZVN0cmluZzsKLSAgICAgICAgICAgIGlmICghcmVzcG9uc2UucmVzcG9u
c2VPYmplY3QtPmdldFN0cmluZygicmVzdWx0Il9zLCB2YWx1ZVN0cmluZykpIHsKKworICAgICAg
ICAgICAgYXV0byB2YWx1ZVN0cmluZyA9IHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRTdHJp
bmcoInJlc3VsdCJfcyk7CisgICAgICAgICAgICBpZiAoIXZhbHVlU3RyaW5nKSB7CiAgICAgICAg
ICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVz
dWx0OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikpOwogICAgICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gcmVzdWx0VmFs
dWU7Ci0gICAgICAgICAgICBpZiAoIUpTT046OlZhbHVlOjpwYXJzZUpTT04odmFsdWVTdHJpbmcs
IHJlc3VsdFZhbHVlKSkgeworCisgICAgICAgICAgICBhdXRvIHJlc3VsdFZhbHVlID0gSlNPTjo6
VmFsdWU6OnBhcnNlSlNPTih2YWx1ZVN0cmluZyk7CisgICAgICAgICAgICBpZiAoIXJlc3VsdFZh
bHVlKSB7CiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6
ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikpOwogICAgICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgY29tcGxldGlvbkhh
bmRsZXIoQ29tbWFuZFJlc3VsdDo6c3VjY2VzcyhoYW5kbGVTY3JpcHRSZXN1bHQoV1RGTW92ZShy
ZXN1bHRWYWx1ZSkpKSk7CiAgICAgICAgIH0pOwogICAgIH0pOwpAQCAtMjMzMiwxNiArMjQxNywx
NyBAQCB2b2lkIFNlc3Npb246OmdldEFsbENvb2tpZXMoRnVuY3Rpb248dm9pZCAoQ29tbWFuZFJl
c3VsdCYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcgogICAgICAgICAgICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoV1RGTW92ZShyZXNwb25zZS5yZXNwb25zZU9iamVj
dCkpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBSZWZQdHI8SlNPTjo6QXJyYXk+IGNvb2tpZXNBcnJheTsKLSAgICAgICAgICAgIGlmICghcmVz
cG9uc2UucmVzcG9uc2VPYmplY3QtPmdldEFycmF5KCJjb29raWVzIl9zLCBjb29raWVzQXJyYXkp
KSB7CisKKyAgICAgICAgICAgIGF1dG8gY29va2llc0FycmF5ID0gcmVzcG9uc2UucmVzcG9uc2VP
YmplY3QtPmdldEFycmF5KCJjb29raWVzIl9zKTsKKyAgICAgICAgICAgIGlmICghY29va2llc0Fy
cmF5KSB7CiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6
ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikpOwogICAgICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgUmVmUHRyPEpTT046
OkFycmF5PiBjb29raWVzID0gSlNPTjo6QXJyYXk6OmNyZWF0ZSgpOwogICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvb2tpZXNBcnJheS0+bGVuZ3RoKCk7ICsraSkgewotICAg
ICAgICAgICAgICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gY29va2llVmFsdWUgPSBjb29raWVzQXJy
YXktPmdldChpKTsKLSAgICAgICAgICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBjb29raWVP
YmplY3Q7Ci0gICAgICAgICAgICAgICAgaWYgKCFjb29raWVWYWx1ZS0+YXNPYmplY3QoY29va2ll
T2JqZWN0KSkgeworICAgICAgICAgICAgICAgIGF1dG8gY29va2llT2JqZWN0ID0gY29va2llc0Fy
cmF5LT5nZXQoaSktPmFzT2JqZWN0KCk7CisgICAgICAgICAgICAgICAgaWYgKCFjb29raWVPYmpl
Y3QpIHsKICAgICAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3Vs
dDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikpOwogICAgICAg
ICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQpAQCAtMjM2NSwxNCArMjQ1
MSwxMSBAQCB2b2lkIFNlc3Npb246OmdldE5hbWVkQ29va2llKGNvbnN0IFN0cmluZyYgbmFtZSwg
RnVuY3Rpb248dm9pZCAoQ29tbWFuZFJlc3VsdCYmKQogICAgICAgICAgICAgY29tcGxldGlvbkhh
bmRsZXIoV1RGTW92ZShyZXN1bHQpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQot
ICAgICAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IGNvb2tpZXNBcnJheTsKLSAgICAgICAgcmVzdWx0
LnJlc3VsdCgpLT5hc0FycmF5KGNvb2tpZXNBcnJheSk7CisKKyAgICAgICAgYXV0byBjb29raWVz
QXJyYXkgPSByZXN1bHQucmVzdWx0KCktPmFzQXJyYXkoKTsKICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGNvb2tpZXNBcnJheS0+bGVuZ3RoKCk7ICsraSkgewotICAgICAgICAgICAg
UmVmUHRyPEpTT046OlZhbHVlPiBjb29raWVWYWx1ZSA9IGNvb2tpZXNBcnJheS0+Z2V0KGkpOwot
ICAgICAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gY29va2llT2JqZWN0OwotICAgICAgICAg
ICAgY29va2llVmFsdWUtPmFzT2JqZWN0KGNvb2tpZU9iamVjdCk7Ci0gICAgICAgICAgICBTdHJp
bmcgY29va2llTmFtZTsKLSAgICAgICAgICAgIGNvb2tpZU9iamVjdC0+Z2V0U3RyaW5nKCJuYW1l
Il9zLCBjb29raWVOYW1lKTsKKyAgICAgICAgICAgIGF1dG8gY29va2llT2JqZWN0ID0gY29va2ll
c0FycmF5LT5nZXQoaSktPmFzT2JqZWN0KCk7CisgICAgICAgICAgICBhdXRvIGNvb2tpZU5hbWUg
PSBjb29raWVPYmplY3QtPmdldFN0cmluZygibmFtZSJfcyk7CiAgICAgICAgICAgICBpZiAoY29v
a2llTmFtZSA9PSBuYW1lKSB7CiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29t
bWFuZFJlc3VsdDo6c3VjY2VzcyhXVEZNb3ZlKGNvb2tpZU9iamVjdCkpKTsKICAgICAgICAgICAg
ICAgICByZXR1cm47CkBAIC0yNzA0LDExICsyNzg3LDEzIEBAIHZvaWQgU2Vzc2lvbjo6Z2V0QWxl
cnRUZXh0KEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSZXN1bHQmJik+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKFdU
Rk1vdmUocmVzcG9uc2UucmVzcG9uc2VPYmplY3QpKSk7CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KLSAgICAgICAgU3RyaW5nIHZhbHVlU3RyaW5nOwotICAgICAgICBpZiAoIXJlc3Bv
bnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRTdHJpbmcoIm1lc3NhZ2UiX3MsIHZhbHVlU3RyaW5nKSkg
eworCisgICAgICAgIGF1dG8gdmFsdWVTdHJpbmcgPSByZXNwb25zZS5yZXNwb25zZU9iamVjdC0+
Z2V0U3RyaW5nKCJtZXNzYWdlIl9zKTsKKyAgICAgICAgaWYgKCF2YWx1ZVN0cmluZykgewogICAg
ICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVz
dWx0OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikpOwogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9CisKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6c3VjY2Vz
cyhKU09OOjpWYWx1ZTo6Y3JlYXRlKHZhbHVlU3RyaW5nKSkpOwogICAgIH0pOwogfQpAQCAtMjc1
OCwxMSArMjg0MywxMyBAQCB2b2lkIFNlc3Npb246OnRha2VTY3JlZW5zaG90KE9wdGlvbmFsPFN0
cmluZz4gZWxlbWVudElELCBPcHRpb25hbDxib29sPiBzY3JvbGxJbgogICAgICAgICAgICAgICAg
IGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoV1RGTW92ZShyZXNwb25zZS5y
ZXNwb25zZU9iamVjdCkpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICBTdHJpbmcgZGF0YTsKLSAgICAgICAgICAgIGlmICghcmVzcG9uc2UucmVz
cG9uc2VPYmplY3QtPmdldFN0cmluZygiZGF0YSJfcywgZGF0YSkpIHsKKworICAgICAgICAgICAg
YXV0byBkYXRhID0gcmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdldFN0cmluZygiZGF0YSJfcyk7
CisgICAgICAgICAgICBpZiAoIWRhdGEpIHsKICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFu
ZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93
bkVycm9yKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQorCiAgICAg
ICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpzdWNjZXNzKEpTT046OlZh
bHVlOjpjcmVhdGUoZGF0YSkpKTsKICAgICAgICAgfSk7CiAgICAgfSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViRHJpdmVyL1Nlc3Npb25Ib3N0LmNwcCBiL1NvdXJjZS9XZWJEcml2ZXIvU2Vzc2lv
bkhvc3QuY3BwCmluZGV4IGQxNjliOTVjNGI2Y2VlNDI4OWQ4Yzg4OWU1NTNkZjc2Mzk1NWFhYmMu
LjQ3MmViZGZhZjRhNjJiNmIyMDBiNGQxZWM3YjIxYmU1OTExODVlMDEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJEcml2ZXIvU2Vzc2lvbkhvc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJEcml2ZXIvU2Vz
c2lvbkhvc3QuY3BwCkBAIC02MiwzMSArNjIsMjcgQEAgbG9uZyBTZXNzaW9uSG9zdDo6c2VuZENv
bW1hbmRUb0JhY2tlbmQoY29uc3QgU3RyaW5nJiBjb21tYW5kLCBSZWZQdHI8SlNPTjo6T2JqZWMK
IAogdm9pZCBTZXNzaW9uSG9zdDo6ZGlzcGF0Y2hNZXNzYWdlKGNvbnN0IFN0cmluZyYgbWVzc2Fn
ZSkKIHsKLSAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IG1lc3NhZ2VWYWx1ZTsKLSAgICBpZiAoIUpT
T046OlZhbHVlOjpwYXJzZUpTT04obWVzc2FnZSwgbWVzc2FnZVZhbHVlKSkKKyAgICBhdXRvIG1l
c3NhZ2VWYWx1ZSA9IEpTT046OlZhbHVlOjpwYXJzZUpTT04obWVzc2FnZSk7CisgICAgaWYgKCFt
ZXNzYWdlVmFsdWUpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+
IG1lc3NhZ2VPYmplY3Q7Ci0gICAgaWYgKCFtZXNzYWdlVmFsdWUtPmFzT2JqZWN0KG1lc3NhZ2VP
YmplY3QpKQorICAgIGF1dG8gbWVzc2FnZU9iamVjdCA9IG1lc3NhZ2VWYWx1ZS0+YXNPYmplY3Qo
KTsKKyAgICBpZiAoIW1lc3NhZ2VPYmplY3QpCiAgICAgICAgIHJldHVybjsKIAotICAgIGxvbmcg
c2VxdWVuY2VJRDsKLSAgICBpZiAoIW1lc3NhZ2VPYmplY3QtPmdldEludGVnZXIoImlkIl9zLCBz
ZXF1ZW5jZUlEKSkKKyAgICBhdXRvIHNlcXVlbmNlSUQgPSBtZXNzYWdlT2JqZWN0LT5nZXRJbnRl
Z2VyKCJpZCJfcyk7CisgICAgaWYgKCFzZXF1ZW5jZUlEKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBhdXRvIHJlc3BvbnNlSGFuZGxlciA9IG1fY29tbWFuZFJlcXVlc3RzLnRha2Uoc2VxdWVuY2VJ
RCk7CisgICAgYXV0byByZXNwb25zZUhhbmRsZXIgPSBtX2NvbW1hbmRSZXF1ZXN0cy50YWtlKCpz
ZXF1ZW5jZUlEKTsKICAgICBBU1NFUlQocmVzcG9uc2VIYW5kbGVyKTsKIAogICAgIENvbW1hbmRS
ZXNwb25zZSByZXNwb25zZTsKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBlcnJvck9iamVjdDsK
LSAgICBpZiAobWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJlcnJvciJfcywgZXJyb3JPYmplY3Qp
KSB7CisgICAgaWYgKGF1dG8gZXJyb3JPYmplY3QgPSBtZXNzYWdlT2JqZWN0LT5nZXRPYmplY3Qo
ImVycm9yIl9zKSkgewogICAgICAgICByZXNwb25zZS5yZXNwb25zZU9iamVjdCA9IFdURk1vdmUo
ZXJyb3JPYmplY3QpOwogICAgICAgICByZXNwb25zZS5pc0Vycm9yID0gdHJ1ZTsKLSAgICB9IGVs
c2UgewotICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiByZXN1bHRPYmplY3Q7Ci0gICAgICAg
IGlmIChtZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInJlc3VsdCJfcywgcmVzdWx0T2JqZWN0KSAm
JiByZXN1bHRPYmplY3QtPnNpemUoKSkKLSAgICAgICAgICAgIHJlc3BvbnNlLnJlc3BvbnNlT2Jq
ZWN0ID0gV1RGTW92ZShyZXN1bHRPYmplY3QpOwotICAgIH0KKyAgICB9IGVsc2UgaWYgKGF1dG8g
cmVzdWx0T2JqZWN0ID0gbWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJyZXN1bHQiX3MpKQorICAg
ICAgICByZXNwb25zZS5yZXNwb25zZU9iamVjdCA9IFdURk1vdmUocmVzdWx0T2JqZWN0KTsKIAog
ICAgIHJlc3BvbnNlSGFuZGxlcihXVEZNb3ZlKHJlc3BvbnNlKSk7CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViRHJpdmVyL1dlYkRyaXZlclNlcnZpY2UuY3BwIGIvU291cmNlL1dlYkRyaXZlci9X
ZWJEcml2ZXJTZXJ2aWNlLmNwcAppbmRleCA5YmI5NzZkOWYwYzVlM2I0ODliMjA5ZjNkYjg1MGRj
MzIxYjYwZjRlLi43N2FhODlkYjM1YmMyNjIwMDFhNTdjODY2ZWI2NDdkOTRlZDMxYTA4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViRHJpdmVyL1dlYkRyaXZlclNlcnZpY2UuY3BwCisrKyBiL1NvdXJj
ZS9XZWJEcml2ZXIvV2ViRHJpdmVyU2VydmljZS5jcHAKQEAgLTIzOSwxMyArMjM5LDE0IEBAIHZv
aWQgV2ViRHJpdmVyU2VydmljZTo6aGFuZGxlUmVxdWVzdChIVFRQUmVxdWVzdEhhbmRsZXI6OlJl
cXVlc3QmJiByZXF1ZXN0LCBGdW5jCiAKICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0
ZXJzT2JqZWN0OwogICAgIGlmIChtZXRob2QudmFsdWUoKSA9PSBIVFRQTWV0aG9kOjpQb3N0KSB7
Ci0gICAgICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gbWVzc2FnZVZhbHVlOwotICAgICAgICBpZiAo
IUpTT046OlZhbHVlOjpwYXJzZUpTT04oU3RyaW5nOjpmcm9tVVRGOChyZXF1ZXN0LmRhdGEsIHJl
cXVlc3QuZGF0YUxlbmd0aCksIG1lc3NhZ2VWYWx1ZSkpIHsKKyAgICAgICAgYXV0byBtZXNzYWdl
VmFsdWUgPSBKU09OOjpWYWx1ZTo6cGFyc2VKU09OKFN0cmluZzo6ZnJvbVVURjgocmVxdWVzdC5k
YXRhLCByZXF1ZXN0LmRhdGFMZW5ndGgpKTsKKyAgICAgICAgaWYgKCFtZXNzYWdlVmFsdWUpIHsK
ICAgICAgICAgICAgIHNlbmRSZXNwb25zZShXVEZNb3ZlKHJlcGx5SGFuZGxlciksIENvbW1hbmRS
ZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpJbnZhbGlkQXJndW1lbnQpKTsK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIGlmICghbWVzc2FnZVZh
bHVlLT5hc09iamVjdChwYXJhbWV0ZXJzT2JqZWN0KSkgeworICAgICAgICBwYXJhbWV0ZXJzT2Jq
ZWN0ID0gbWVzc2FnZVZhbHVlLT5hc09iamVjdCgpOworICAgICAgICBpZiAoIXBhcmFtZXRlcnNP
YmplY3QpIHsKICAgICAgICAgICAgIHNlbmRSZXNwb25zZShXVEZNb3ZlKHJlcGx5SGFuZGxlciks
IENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpJbnZhbGlkQXJn
dW1lbnQpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvQ1NTTWFuYWdlci5q
cyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0NTU01h
bmFnZXIuanMKaW5kZXggNjhhZWFhOTc4NzAyOGVlOGQxODU4YTFkMjcwNzUwMzM2MGJkNGU5Mi4u
MTViNjIzMWFmMzNiNGNmN2VlYjhkMjkwOTg3M2I0ZGE0YTViYTdhNCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvQ1NTTWFuYWdlci5q
cworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9D
U1NNYW5hZ2VyLmpzCkBAIC0yMDMsMzIgKzIwMywzNCBAQCBXSS5DU1NNYW5hZ2VyID0gY2xhc3Mg
Q1NTTWFuYWdlciBleHRlbmRzIFdJLk9iamVjdAogICAgICAgICBpZiAoIXRoaXMuY2FuRm9yY2VB
cHBlYXJhbmNlKCkpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgbGV0IHByb3RvY29s
TmFtZSA9ICIiOworICAgICAgICBsZXQgY29tbWFuZEFyZ3VtZW50cyA9IHt9OwogCiAgICAgICAg
IHN3aXRjaCAobmFtZSkgewogICAgICAgICBjYXNlIFdJLkNTU01hbmFnZXIuQXBwZWFyYW5jZS5M
aWdodDoKLSAgICAgICAgICAgIHByb3RvY29sTmFtZSA9IEluc3BlY3RvckJhY2tlbmQuRW51bS5Q
YWdlLkFwcGVhcmFuY2UuTGlnaHQ7CisgICAgICAgICAgICBjb21tYW5kQXJndW1lbnRzLmFwcGVh
cmFuY2UgPSBJbnNwZWN0b3JCYWNrZW5kLkVudW0uUGFnZS5BcHBlYXJhbmNlLkxpZ2h0OwogICAg
ICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBXSS5DU1NNYW5hZ2VyLkFwcGVhcmFuY2Uu
RGFyazoKLSAgICAgICAgICAgIHByb3RvY29sTmFtZSA9IEluc3BlY3RvckJhY2tlbmQuRW51bS5Q
YWdlLkFwcGVhcmFuY2UuRGFyazsKKyAgICAgICAgICAgIGNvbW1hbmRBcmd1bWVudHMuYXBwZWFy
YW5jZSA9IEluc3BlY3RvckJhY2tlbmQuRW51bS5QYWdlLkFwcGVhcmFuY2UuRGFyazsKICAgICAg
ICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgbnVsbDoKLSAgICAgICAgY2FzZSB1bmRlZmlu
ZWQ6Ci0gICAgICAgIGNhc2UgIiI6Ci0gICAgICAgICAgICBwcm90b2NvbE5hbWUgPSAiIjsKKyAg
ICAgICAgICAgIC8vIENPTVBBVElCSUxJVFkgKGlPUyAxNCk6IHRoZSBgYXBwZWFyYW5jZWBgIHBh
cmFtZXRlciBvZiBgUGFnZS5zZXRGb3JjZWRBcHBlYXJhbmNlYCB3YXMgbm90IG9wdGlvbmFsLgor
ICAgICAgICAgICAgLy8gU2luY2Ugc3VwcG9ydCBjYW4ndCBiZSB0ZXN0ZWQgZGlyZWN0bHksIGNo
ZWNrIGZvciB0aGUgYG9wdGlvbnNgYCBwYXJhbWV0ZXIgb2YgYERPTURlYnVnZ2VyLnNldERPTUJy
ZWFrcG9pbnRgIChpT1MgMTQuMCspLgorICAgICAgICAgICAgLy8gRklYTUU6IFVzZSBleHBsaWNp
dCB2ZXJzaW9uIGNoZWNraW5nIG9uY2UgaHR0cHM6Ly93ZWJraXQub3JnL2IvMTQ4NjgwIGlzIGZp
eGVkLgorICAgICAgICAgICAgaWYgKCFJbnNwZWN0b3JCYWNrZW5kLmhhc0NvbW1hbmQoIkRPTURl
YnVnZ2VyLnNldERPTUJyZWFrcG9pbnQiLCAib3B0aW9ucyIpKQorICAgICAgICAgICAgICAgIGNv
bW1hbmRBcmd1bWVudHMuYXBwZWFyYW5jZSA9ICIiOwogICAgICAgICAgICAgYnJlYWs7CiAKICAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIC8vIEFib3J0IGZvciB1bmtub3duIHZhbHVlcy4K
KyAgICAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KGZhbHNlLCAiVW5rbm93biBhcHBlYXJhbmNlIiwg
bmFtZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAogICAgICAgICB0aGlzLl9m
b3JjZWRBcHBlYXJhbmNlID0gbmFtZSB8fCBudWxsOwogCiAgICAgICAgIGxldCB0YXJnZXQgPSBX
SS5hc3N1bWluZ01haW5UYXJnZXQoKTsKLSAgICAgICAgdGFyZ2V0LlBhZ2VBZ2VudC5zZXRGb3Jj
ZWRBcHBlYXJhbmNlKHByb3RvY29sTmFtZSkudGhlbigoKSA9PiB7CisgICAgICAgIHRhcmdldC5Q
YWdlQWdlbnQuc2V0Rm9yY2VkQXBwZWFyYW5jZS5pbnZva2UoY29tbWFuZEFyZ3VtZW50cykudGhl
bigoKSA9PiB7CiAgICAgICAgICAgICB0aGlzLm1lZGlhUXVlcnlSZXN1bHRDaGFuZ2VkKCk7CiAg
ICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXSS5DU1NNYW5hZ2VyLkV2
ZW50LkZvcmNlZEFwcGVhcmFuY2VEaWRDaGFuZ2UsIHthcHBlYXJhbmNlOiB0aGlzLl9mb3JjZWRB
cHBlYXJhbmNlfSk7CiAgICAgICAgIH0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3Rv
clVJL1VzZXJJbnRlcmZhY2UvVmlld3MvU2V0dGluZ3NUYWJDb250ZW50Vmlldy5qcyBiL1NvdXJj
ZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1NldHRpbmdzVGFiQ29udGVudFZp
ZXcuanMKaW5kZXggNDgyZTE0MmFlMTFkNjNjMDAxNWY5NmM3NGJjYjJkZWEyZmU1MDY5ZC4uOTE4
MzZlY2M3Njk3NzU2YTk2NmVmZWE3MTAzYzkyZDM0MDhlNDQ2MSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvU2V0dGluZ3NUYWJDb250ZW50Vmll
dy5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9TZXR0
aW5nc1RhYkNvbnRlbnRWaWV3LmpzCkBAIC0zNDYsMTQgKzM0NiwxOCBAQCBXSS5TZXR0aW5nc1Rh
YkNvbnRlbnRWaWV3ID0gY2xhc3MgU2V0dGluZ3NUYWJDb250ZW50VmlldyBleHRlbmRzIFdJLlRh
YkNvbnRlbnRWaQogICAgICAgICAgICAgICAgIFtXSS5Mb2dnaW5nQ2hhbm5lbC5MZXZlbC5WZXJi
b3NlLCBXSS5VSVN0cmluZygiVmVyYm9zZSIpXSwKICAgICAgICAgICAgIF07CiAgICAgICAgICAg
ICBjb25zdCBlZGl0b3JMYWJlbHMgPSB7Ci0gICAgICAgICAgICAgICAgbWVkaWE6IFdJLlVJU3Ry
aW5nKCJNZWRpYSBMb2dnaW5nOiIpLAotICAgICAgICAgICAgICAgIG1lZGlhc291cmNlOiBXSS5V
SVN0cmluZygiTVNFIExvZ2dpbmc6IiksCi0gICAgICAgICAgICAgICAgd2VicnRjOiBXSS5VSVN0
cmluZygiV2ViUlRDIExvZ2dpbmc6IiksCisgICAgICAgICAgICAgICAgW1dJLkNvbnNvbGVNZXNz
YWdlLk1lc3NhZ2VTb3VyY2UuTWVkaWFdOiBXSS5VSVN0cmluZygiTWVkaWEgTG9nZ2luZzoiKSwK
KyAgICAgICAgICAgICAgICBbV0kuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZVNvdXJjZS5NZWRpYVNv
dXJjZV06IFdJLlVJU3RyaW5nKCJNU0UgTG9nZ2luZzoiKSwKKyAgICAgICAgICAgICAgICBbV0ku
Q29uc29sZU1lc3NhZ2UuTWVzc2FnZVNvdXJjZS5XZWJSVENdOiBXSS5VSVN0cmluZygiV2ViUlRD
IExvZ2dpbmc6IiksCiAgICAgICAgICAgICB9OwogCiAgICAgICAgICAgICBsZXQgY2hhbm5lbHMg
PSBXSS5jb25zb2xlTWFuYWdlci5jdXN0b21Mb2dnaW5nQ2hhbm5lbHM7CiAgICAgICAgICAgICBm
b3IgKGxldCBjaGFubmVsIG9mIGNoYW5uZWxzKSB7Ci0gICAgICAgICAgICAgICAgbGV0IGxvZ0Vk
aXRvciA9IGNvbnNvbGVTZXR0aW5nc1ZpZXcuYWRkR3JvdXBXaXRoQ3VzdG9tU2V0dGluZyhlZGl0
b3JMYWJlbHNbY2hhbm5lbC5zb3VyY2VdLCBXSS5TZXR0aW5nRWRpdG9yLlR5cGUuU2VsZWN0LCB7
dmFsdWVzOiBsb2dMZXZlbHN9KTsKKyAgICAgICAgICAgICAgICBsZXQgbGFiZWwgPSBlZGl0b3JM
YWJlbHNbY2hhbm5lbC5zb3VyY2VdOworICAgICAgICAgICAgICAgIGlmICghbGFiZWwpCisgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAgICAgbGV0IGxvZ0VkaXRv
ciA9IGNvbnNvbGVTZXR0aW5nc1ZpZXcuYWRkR3JvdXBXaXRoQ3VzdG9tU2V0dGluZyhsYWJlbCwg
V0kuU2V0dGluZ0VkaXRvci5UeXBlLlNlbGVjdCwge3ZhbHVlczogbG9nTGV2ZWxzfSk7CiAgICAg
ICAgICAgICAgICAgbG9nRWRpdG9yLnZhbHVlID0gY2hhbm5lbC5sZXZlbDsKICAgICAgICAgICAg
ICAgICBsb2dFZGl0b3IuYWRkRXZlbnRMaXN0ZW5lcihXSS5TZXR0aW5nRWRpdG9yLkV2ZW50LlZh
bHVlRGlkQ2hhbmdlLCAoKSA9PiB7CiAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IHRhcmdl
dCBvZiBXSS50YXJnZXRzKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0
b21hdGlvbi9BdXRvbWF0aW9uLmpzb24gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0
aW9uL0F1dG9tYXRpb24uanNvbgppbmRleCAzZGNiMjE0MWViMGQyNzk0NzA3ZGUyODRjODcwNzEw
ZTg3NzIxYzM5Li5lYjNjZGI1Zjg2NmM1ZjkzYTg4MjI5ODNhNDlkOTE2ZjNlNmVhZmU1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL0F1dG9tYXRpb24uanNv
bgorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL0F1dG9tYXRpb24uanNv
bgpAQCAtMzIsNyArMzIsOCBAQAogICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlRoZSBjb29y
ZGluYXRlIHN5c3RlbSBpbiB3aGljaCByZWN0cywgcG9pbnRzLCBhbmQgc2l6ZXMgYXJlIHRvIGJl
IGludGVycHJldGVkLiIsCiAgICAgICAgICAgICAiZW51bSI6IFsKICAgICAgICAgICAgICAgICAi
UGFnZSIsCi0gICAgICAgICAgICAgICAgIlZpZXdwb3J0IgorICAgICAgICAgICAgICAgICJWaWV3
cG9ydCIsCisgICAgICAgICAgICAgICAgIkxheW91dFZpZXdwb3J0IgogICAgICAgICAgICAgXQog
ICAgICAgICB9LAogICAgICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwCmluZGV4IGQ4N2E0ZGZl
Yzc5NGYzMWRjYjY0ZTVlOWVmNGJjZTRiMThjMTkyYTIuLjNmN2U0MGU1OGQ0YWQ4MWFmNzQyMDhi
Y2E2MTBiYTlmOGY1MTc3ODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1
dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwCkBAIC0zMDUsNyArMzA1
LDcgQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6Z2V0QnJvd3NpbmdDb250ZXh0cyhSZWY8
R2V0QnJvd3NpbmdDb250ZXh0c0NhbGxiYWNrPiYKICAgICBnZXROZXh0Q29udGV4dChtYWtlUmVm
KCp0aGlzKSwgV1RGTW92ZShwYWdlcyksIEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0Pjo6Y3JlYXRlKCksIFdURk1vdmUoY2FsbGJh
Y2spKTsKIH0KIAotdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6Z2V0QnJvd3NpbmdDb250ZXh0
KGNvbnN0IFN0cmluZyYgaGFuZGxlLCBSZWY8R2V0QnJvd3NpbmdDb250ZXh0Q2FsbGJhY2s+JiYg
Y2FsbGJhY2spCit2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpnZXRCcm93c2luZ0NvbnRleHQo
Y29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFu
ZGxlJiBoYW5kbGUsIFJlZjxHZXRCcm93c2luZ0NvbnRleHRDYWxsYmFjaz4mJiBjYWxsYmFjaykK
IHsKICAgICBXZWJQYWdlUHJveHkqIHBhZ2UgPSB3ZWJQYWdlUHJveHlGb3JIYW5kbGUoaGFuZGxl
KTsKICAgICBpZiAoIXBhZ2UpCkBAIC0zMjgsNyArMzI4LDcgQEAgc3RhdGljIEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dFByZXNlbnRhdGlvbiB0b1Byb3Rv
Y29sKEEKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi12b2lkIFdlYkF1
dG9tYXRpb25TZXNzaW9uOjpjcmVhdGVCcm93c2luZ0NvbnRleHQoY29uc3QgU3RyaW5nKiBvcHRp
b25hbFByZXNlbnRhdGlvbkhpbnQsIFJlZjxDcmVhdGVCcm93c2luZ0NvbnRleHRDYWxsYmFjaz4m
JiBjYWxsYmFjaykKK3ZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OmNyZWF0ZUJyb3dzaW5nQ29u
dGV4dChPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0Nv
bnRleHRQcmVzZW50YXRpb24+JiYgcHJlc2VudGF0aW9uSGludCwgUmVmPENyZWF0ZUJyb3dzaW5n
Q29udGV4dENhbGxiYWNrPiYmIGNhbGxiYWNrKQogewogICAgIEFTU0VSVChtX2NsaWVudCk7CiAg
ICAgaWYgKCFtX2NsaWVudCkKQEAgLTMzNiwxMSArMzM2LDggQEAgdm9pZCBXZWJBdXRvbWF0aW9u
U2Vzc2lvbjo6Y3JlYXRlQnJvd3NpbmdDb250ZXh0KGNvbnN0IFN0cmluZyogb3B0aW9uYWxQcmVz
ZW50YXQKIAogICAgIHVpbnQxNl90IG9wdGlvbnMgPSAwOwogCi0gICAgaWYgKG9wdGlvbmFsUHJl
c2VudGF0aW9uSGludCkgewotICAgICAgICBhdXRvIHBhcnNlZFByZXNlbnRhdGlvbkhpbnQgPSBJ
bnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uSGVscGVyczo6cGFyc2VFbnVtVmFsdWVGcm9t
U3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dFBy
ZXNlbnRhdGlvbj4oKm9wdGlvbmFsUHJlc2VudGF0aW9uSGludCk7Ci0gICAgICAgIGlmIChwYXJz
ZWRQcmVzZW50YXRpb25IaW50Lmhhc1ZhbHVlKCkgJiYgcGFyc2VkUHJlc2VudGF0aW9uSGludC52
YWx1ZSgpID09IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4
dFByZXNlbnRhdGlvbjo6VGFiKQotICAgICAgICAgICAgb3B0aW9ucyB8PSBBUEk6OkF1dG9tYXRp
b25TZXNzaW9uQnJvd3NpbmdDb250ZXh0T3B0aW9uc1ByZWZlck5ld1RhYjsKLSAgICB9CisgICAg
aWYgKHByZXNlbnRhdGlvbkhpbnQgPT0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6
QnJvd3NpbmdDb250ZXh0UHJlc2VudGF0aW9uOjpUYWIpCisgICAgICAgIG9wdGlvbnMgfD0gQVBJ
OjpBdXRvbWF0aW9uU2Vzc2lvbkJyb3dzaW5nQ29udGV4dE9wdGlvbnNQcmVmZXJOZXdUYWI7CiAK
ICAgICBtX2NsaWVudC0+cmVxdWVzdE5ld1BhZ2VXaXRoT3B0aW9ucygqdGhpcywgc3RhdGljX2Nh
c3Q8QVBJOjpBdXRvbWF0aW9uU2Vzc2lvbkJyb3dzaW5nQ29udGV4dE9wdGlvbnM+KG9wdGlvbnMp
LCBbcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjYWxsYmFjayA9IFdURk1vdmUoY2Fs
bGJhY2spXShXZWJQYWdlUHJveHkqIHBhZ2UpIHsKICAgICAgICAgaWYgKCFwYWdlKQpAQCAtMzUy
LDIzICszNDksMjUgQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6Y3JlYXRlQnJvd3NpbmdD
b250ZXh0KGNvbnN0IFN0cmluZyogb3B0aW9uYWxQcmVzZW50YXQKICAgICB9KTsKIH0KIAotdm9p
ZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6Y2xvc2VCcm93c2luZ0NvbnRleHQoSW5zcGVjdG9yOjpF
cnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgaGFuZGxlKQorSW5zcGVjdG9y
OjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6Y2xv
c2VCcm93c2luZ0NvbnRleHQoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6
QnJvd3NpbmdDb250ZXh0SGFuZGxlJiBoYW5kbGUpCiB7CiAgICAgV2ViUGFnZVByb3h5KiBwYWdl
ID0gd2ViUGFnZVByb3h5Rm9ySGFuZGxlKGhhbmRsZSk7CiAgICAgaWYgKCFwYWdlKQogICAgICAg
ICBTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SKFdpbmRvd05vdEZvdW5kKTsKIAogICAg
IHBhZ2UtPmNsb3NlUGFnZSgpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBXZWJBdXRv
bWF0aW9uU2Vzc2lvbjo6c3dpdGNoVG9Ccm93c2luZ0NvbnRleHQoY29uc3QgU3RyaW5nJiBicm93
c2luZ0NvbnRleHRIYW5kbGUsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxGcmFtZUhhbmRsZSwgUmVm
PFN3aXRjaFRvQnJvd3NpbmdDb250ZXh0Q2FsbGJhY2s+JiYgY2FsbGJhY2spCit2b2lkIFdlYkF1
dG9tYXRpb25TZXNzaW9uOjpzd2l0Y2hUb0Jyb3dzaW5nQ29udGV4dChjb25zdCBJbnNwZWN0b3I6
OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRIYW5kbGUmIGJyb3dzaW5nQ29u
dGV4dEhhbmRsZSwgY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6RnJhbWVI
YW5kbGUmIGZyYW1lSGFuZGxlLCBSZWY8U3dpdGNoVG9Ccm93c2luZ0NvbnRleHRDYWxsYmFjaz4m
JiBjYWxsYmFjaykKIHsKICAgICBXZWJQYWdlUHJveHkqIHBhZ2UgPSB3ZWJQYWdlUHJveHlGb3JI
YW5kbGUoYnJvd3NpbmdDb250ZXh0SGFuZGxlKTsKICAgICBpZiAoIXBhZ2UpCiAgICAgICAgIEFT
WU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SKFdpbmRvd05vdEZvdW5kKTsKIAogICAgIGJv
b2wgZnJhbWVOb3RGb3VuZCA9IGZhbHNlOwotICAgIGF1dG8gZnJhbWVJRCA9IHdlYkZyYW1lSURG
b3JIYW5kbGUob3B0aW9uYWxGcmFtZUhhbmRsZSA/ICpvcHRpb25hbEZyYW1lSGFuZGxlIDogZW1w
dHlTdHJpbmcoKSwgZnJhbWVOb3RGb3VuZCk7CisgICAgYXV0byBmcmFtZUlEID0gd2ViRnJhbWVJ
REZvckhhbmRsZShmcmFtZUhhbmRsZSwgZnJhbWVOb3RGb3VuZCk7CiAgICAgaWYgKGZyYW1lTm90
Rm91bmQpCiAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SKEZyYW1lTm90
Rm91bmQpOwogCkBAIC0zODEsMjUgKzM4MCwyNSBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9u
Ojpzd2l0Y2hUb0Jyb3dzaW5nQ29udGV4dChjb25zdCBTdHJpbmcmIGJyb3dzaW5nQ29udGV4dAog
ICAgIH0pOwogfQogCi12b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpzZXRXaW5kb3dGcmFtZU9m
QnJvd3NpbmdDb250ZXh0KGNvbnN0IFN0cmluZyYgaGFuZGxlLCBjb25zdCBKU09OOjpPYmplY3Qq
IG9wdGlvbmFsT3JpZ2luT2JqZWN0LCBjb25zdCBKU09OOjpPYmplY3QqIG9wdGlvbmFsU2l6ZU9i
amVjdCwgUmVmPFNldFdpbmRvd0ZyYW1lT2ZCcm93c2luZ0NvbnRleHRDYWxsYmFjaz4mJiBjYWxs
YmFjaykKK3ZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OnNldFdpbmRvd0ZyYW1lT2ZCcm93c2lu
Z0NvbnRleHQoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdD
b250ZXh0SGFuZGxlJiBoYW5kbGUsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgb3JpZ2luLCBSZWZQ
dHI8SlNPTjo6T2JqZWN0PiYmIHNpemUsIFJlZjxTZXRXaW5kb3dGcmFtZU9mQnJvd3NpbmdDb250
ZXh0Q2FsbGJhY2s+JiYgY2FsbGJhY2spCiB7Ci0gICAgT3B0aW9uYWw8ZmxvYXQ+IHg7Ci0gICAg
T3B0aW9uYWw8ZmxvYXQ+IHk7Ci0gICAgaWYgKG9wdGlvbmFsT3JpZ2luT2JqZWN0KSB7Ci0gICAg
ICAgIGlmICghKHggPSBvcHRpb25hbE9yaWdpbk9iamVjdC0+Z2V0TnVtYmVyPGZsb2F0PigieCJf
cykpKQorICAgIE9wdGlvbmFsPGRvdWJsZT4geDsKKyAgICBPcHRpb25hbDxkb3VibGU+IHk7Cisg
ICAgaWYgKG9yaWdpbikgeworICAgICAgICBpZiAoISh4ID0gb3JpZ2luLT5nZXREb3VibGUoIngi
X3MpKSkKICAgICAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9E
RVRBSUxTKE1pc3NpbmdQYXJhbWV0ZXIsICJUaGUgJ3gnIHBhcmFtZXRlciB3YXMgbm90IGZvdW5k
IG9yIGludmFsaWQuIik7CiAKLSAgICAgICAgaWYgKCEoeSA9IG9wdGlvbmFsT3JpZ2luT2JqZWN0
LT5nZXROdW1iZXI8ZmxvYXQ+KCJ5Il9zKSkpCisgICAgICAgIGlmICghKHkgPSBvcmlnaW4tPmdl
dERvdWJsZSgieSJfcykpKQogICAgICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURf
RVJST1JfQU5EX0RFVEFJTFMoTWlzc2luZ1BhcmFtZXRlciwgIlRoZSAneScgcGFyYW1ldGVyIHdh
cyBub3QgZm91bmQgb3IgaW52YWxpZC4iKTsKICAgICB9CiAKLSAgICBPcHRpb25hbDxmbG9hdD4g
d2lkdGg7Ci0gICAgT3B0aW9uYWw8ZmxvYXQ+IGhlaWdodDsKLSAgICBpZiAob3B0aW9uYWxTaXpl
T2JqZWN0KSB7Ci0gICAgICAgIGlmICghKHdpZHRoID0gb3B0aW9uYWxTaXplT2JqZWN0LT5nZXRO
dW1iZXI8ZmxvYXQ+KCJ3aWR0aCJfcykpKQorICAgIE9wdGlvbmFsPGRvdWJsZT4gd2lkdGg7Cisg
ICAgT3B0aW9uYWw8ZG91YmxlPiBoZWlnaHQ7CisgICAgaWYgKHNpemUpIHsKKyAgICAgICAgaWYg
KCEod2lkdGggPSBzaXplLT5nZXREb3VibGUoIndpZHRoIl9zKSkpCiAgICAgICAgICAgICBBU1lO
Q19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhNaXNzaW5nUGFyYW1ldGVy
LCAiVGhlICd3aWR0aCcgcGFyYW1ldGVyIHdhcyBub3QgZm91bmQgb3IgaW52YWxpZC4iKTsKIAot
ICAgICAgICBpZiAoIShoZWlnaHQgPSBvcHRpb25hbFNpemVPYmplY3QtPmdldE51bWJlcjxmbG9h
dD4oImhlaWdodCJfcykpKQorICAgICAgICBpZiAoIShoZWlnaHQgPSBzaXplLT5nZXREb3VibGUo
ImhlaWdodCJfcykpKQogICAgICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJS
T1JfQU5EX0RFVEFJTFMoTWlzc2luZ1BhcmFtZXRlciwgIlRoZSAnaGVpZ2h0JyBwYXJhbWV0ZXIg
d2FzIG5vdCBmb3VuZCBvciBpbnZhbGlkLiIpOwogCiAgICAgICAgIGlmICh3aWR0aC52YWx1ZSgp
IDwgMCkKQEAgLTQyOCwyNiArNDI3LDE4IEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OnNl
dFdpbmRvd0ZyYW1lT2ZCcm93c2luZ0NvbnRleHQoY29uc3QgU3RyaW5nJiBoYW5kbGUsCiAgICAg
fSk7CiB9CiAKLXN0YXRpYyBPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9u
OjpQYWdlTG9hZFN0cmF0ZWd5PiBwYWdlTG9hZFN0cmF0ZWd5RnJvbVN0cmluZ1BhcmFtZXRlcihj
b25zdCBTdHJpbmcqIG9wdGlvbmFsUGFnZUxvYWRTdHJhdGVneVN0cmluZykKK3N0YXRpYyBJbnNw
ZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpQYWdlTG9hZFN0cmF0ZWd5IHBhZ2VMb2FkU3Ry
YXRlZ3lGcm9tUGFyYW1ldGVyKE9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRp
b246OlBhZ2VMb2FkU3RyYXRlZ3k+JiYgb3B0aW9uYWxQYWdlTG9hZFN0cmF0ZWd5KQogewotICAg
IGlmICghb3B0aW9uYWxQYWdlTG9hZFN0cmF0ZWd5U3RyaW5nKQotICAgICAgICByZXR1cm4gZGVm
YXVsdFBhZ2VMb2FkU3RyYXRlZ3k7Ci0KLSAgICBhdXRvIHBhcnNlZFBhZ2VMb2FkU3RyYXRlZ3kg
PSBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uSGVscGVyczo6cGFyc2VFbnVtVmFsdWVG
cm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OlBhZ2VMb2FkU3RyYXRl
Z3k+KCpvcHRpb25hbFBhZ2VMb2FkU3RyYXRlZ3lTdHJpbmcpOwotICAgIGlmICghcGFyc2VkUGFn
ZUxvYWRTdHJhdGVneSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICByZXR1cm4g
cGFyc2VkUGFnZUxvYWRTdHJhdGVneTsKKyAgICByZXR1cm4gb3B0aW9uYWxQYWdlTG9hZFN0cmF0
ZWd5LnZhbHVlT3IoZGVmYXVsdFBhZ2VMb2FkU3RyYXRlZ3kpOwogfQogCi12b2lkIFdlYkF1dG9t
YXRpb25TZXNzaW9uOjp3YWl0Rm9yTmF2aWdhdGlvblRvQ29tcGxldGUoY29uc3QgU3RyaW5nJiBi
cm93c2luZ0NvbnRleHRIYW5kbGUsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxGcmFtZUhhbmRsZSwg
Y29uc3QgU3RyaW5nKiBvcHRpb25hbFBhZ2VMb2FkU3RyYXRlZ3lTdHJpbmcsIGNvbnN0IGRvdWJs
ZSogb3B0aW9uYWxQYWdlTG9hZFRpbWVvdXQsIFJlZjxXYWl0Rm9yTmF2aWdhdGlvblRvQ29tcGxl
dGVDYWxsYmFjaz4mJiBjYWxsYmFjaykKK3ZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OndhaXRG
b3JOYXZpZ2F0aW9uVG9Db21wbGV0ZShjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0
aW9uOjpCcm93c2luZ0NvbnRleHRIYW5kbGUmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSwgY29uc3Qg
SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6RnJhbWVIYW5kbGUmIG9wdGlvbmFsRnJh
bWVIYW5kbGUsIE9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OlBhZ2VM
b2FkU3RyYXRlZ3k+JiYgb3B0aW9uYWxQYWdlTG9hZFN0cmF0ZWd5LCBPcHRpb25hbDxkb3VibGU+
JiYgb3B0aW9uYWxQYWdlTG9hZFRpbWVvdXQsIFJlZjxXYWl0Rm9yTmF2aWdhdGlvblRvQ29tcGxl
dGVDYWxsYmFjaz4mJiBjYWxsYmFjaykKIHsKICAgICBXZWJQYWdlUHJveHkqIHBhZ2UgPSB3ZWJQ
YWdlUHJveHlGb3JIYW5kbGUoYnJvd3NpbmdDb250ZXh0SGFuZGxlKTsKICAgICBpZiAoIXBhZ2Up
CiAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SKFdpbmRvd05vdEZvdW5k
KTsKIAotICAgIGF1dG8gcGFnZUxvYWRTdHJhdGVneSA9IHBhZ2VMb2FkU3RyYXRlZ3lGcm9tU3Ry
aW5nUGFyYW1ldGVyKG9wdGlvbmFsUGFnZUxvYWRTdHJhdGVneVN0cmluZyk7Ci0gICAgaWYgKCFw
YWdlTG9hZFN0cmF0ZWd5KQotICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJP
Ul9BTkRfREVUQUlMUyhJbnZhbGlkUGFyYW1ldGVyLCAiVGhlIHBhcmFtZXRlciAncGFnZUxvYWRT
dHJhdGVneScgaXMgaW52YWxpZC4iKTsKKyAgICBhdXRvIHBhZ2VMb2FkU3RyYXRlZ3kgPSBwYWdl
TG9hZFN0cmF0ZWd5RnJvbVBhcmFtZXRlcihXVEZNb3ZlKG9wdGlvbmFsUGFnZUxvYWRTdHJhdGVn
eSkpOwogICAgIGF1dG8gcGFnZUxvYWRUaW1lb3V0ID0gb3B0aW9uYWxQYWdlTG9hZFRpbWVvdXQg
PyBTZWNvbmRzOjpmcm9tTWlsbGlzZWNvbmRzKCpvcHRpb25hbFBhZ2VMb2FkVGltZW91dCkgOiBk
ZWZhdWx0UGFnZUxvYWRUaW1lb3V0OwogCiAgICAgLy8gSWYgcGFnZSBpcyBsb2FkaW5nIGFuZCB0
aGVyZSdzIGFuIGFjdGl2ZSBKYXZhU2NyaXB0IGRpYWxvZyBpcyBwcm9iYWJseSBiZWNhdXNlIHRo
ZQpAQCAtNDU1LDIyICs0NDYsMjIgQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6d2FpdEZv
ck5hdmlnYXRpb25Ub0NvbXBsZXRlKGNvbnN0IFN0cmluZyYgYnJvd3NpbmdDb24KICAgICAvLyBs
b2FkIHdpbGwgbm90IGZpbmlzaCB1bnRpbCB0aGUgZGlhbG9nIGlzIGRpc21pc3NlZC4gSW5zdGVh
ZCBvZiB3YWl0aW5nIGZvciB0aGUgdGltZW91dCwKICAgICAvLyB3ZSByZXR1cm4gd2l0aG91dCB3
YWl0aW5nIHNpbmNlIHdlIGtub3cgaXQgd2lsbCB0aW1lb3V0IGZvciBzdXJlLiBXZSB3YW50IHRv
IGNoZWNrCiAgICAgLy8gYXJndW1lbnRzIGZpcnN0LCB0aG91Z2guCi0gICAgYm9vbCBzaG91bGRU
aW1lb3V0RHVlVG9VbmV4cGVjdGVkQWxlcnQgPSBwYWdlTG9hZFN0cmF0ZWd5LnZhbHVlKCkgPT0g
SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6UGFnZUxvYWRTdHJhdGVneTo6Tm9ybWFs
CisgICAgYm9vbCBzaG91bGRUaW1lb3V0RHVlVG9VbmV4cGVjdGVkQWxlcnQgPSBwYWdlTG9hZFN0
cmF0ZWd5ID09IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OlBhZ2VMb2FkU3RyYXRl
Z3k6Ok5vcm1hbAogICAgICAgICAmJiBwYWdlLT5wYWdlTG9hZFN0YXRlKCkuaXNMb2FkaW5nKCkg
JiYgbV9jbGllbnQtPmlzU2hvd2luZ0phdmFTY3JpcHREaWFsb2dPblBhZ2UoKnRoaXMsICpwYWdl
KTsKIAotICAgIGlmIChvcHRpb25hbEZyYW1lSGFuZGxlICYmICFvcHRpb25hbEZyYW1lSGFuZGxl
LT5pc0VtcHR5KCkpIHsKKyAgICBpZiAoIW9wdGlvbmFsRnJhbWVIYW5kbGUuaXNFbXB0eSgpKSB7
CiAgICAgICAgIGJvb2wgZnJhbWVOb3RGb3VuZCA9IGZhbHNlOwotICAgICAgICBhdXRvIGZyYW1l
SUQgPSB3ZWJGcmFtZUlERm9ySGFuZGxlKCpvcHRpb25hbEZyYW1lSGFuZGxlLCBmcmFtZU5vdEZv
dW5kKTsKKyAgICAgICAgYXV0byBmcmFtZUlEID0gd2ViRnJhbWVJREZvckhhbmRsZShvcHRpb25h
bEZyYW1lSGFuZGxlLCBmcmFtZU5vdEZvdW5kKTsKICAgICAgICAgaWYgKGZyYW1lTm90Rm91bmQp
CiAgICAgICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUihGcmFtZU5vdEZv
dW5kKTsKICAgICAgICAgV2ViRnJhbWVQcm94eSogZnJhbWUgPSBwYWdlLT5wcm9jZXNzKCkud2Vi
RnJhbWUoZnJhbWVJRC52YWx1ZSgpKTsKICAgICAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgICAg
IEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SKEZyYW1lTm90Rm91bmQpOwogICAgICAg
ICBpZiAoIXNob3VsZFRpbWVvdXREdWVUb1VuZXhwZWN0ZWRBbGVydCkKLSAgICAgICAgICAgIHdh
aXRGb3JOYXZpZ2F0aW9uVG9Db21wbGV0ZU9uRnJhbWUoKmZyYW1lLCBwYWdlTG9hZFN0cmF0ZWd5
LnZhbHVlKCksIHBhZ2VMb2FkVGltZW91dCwgV1RGTW92ZShjYWxsYmFjaykpOworICAgICAgICAg
ICAgd2FpdEZvck5hdmlnYXRpb25Ub0NvbXBsZXRlT25GcmFtZSgqZnJhbWUsIHBhZ2VMb2FkU3Ry
YXRlZ3ksIHBhZ2VMb2FkVGltZW91dCwgV1RGTW92ZShjYWxsYmFjaykpOwogICAgIH0gZWxzZSB7
CiAgICAgICAgIGlmICghc2hvdWxkVGltZW91dER1ZVRvVW5leHBlY3RlZEFsZXJ0KQotICAgICAg
ICAgICAgd2FpdEZvck5hdmlnYXRpb25Ub0NvbXBsZXRlT25QYWdlKCpwYWdlLCBwYWdlTG9hZFN0
cmF0ZWd5LnZhbHVlKCksIHBhZ2VMb2FkVGltZW91dCwgV1RGTW92ZShjYWxsYmFjaykpOworICAg
ICAgICAgICAgd2FpdEZvck5hdmlnYXRpb25Ub0NvbXBsZXRlT25QYWdlKCpwYWdlLCBwYWdlTG9h
ZFN0cmF0ZWd5LCBwYWdlTG9hZFRpbWVvdXQsIFdURk1vdmUoY2FsbGJhY2spKTsKICAgICB9CiAK
ICAgICBpZiAoc2hvdWxkVGltZW91dER1ZVRvVW5leHBlY3RlZEFsZXJ0KSB7CkBAIC01MjcsNyAr
NTE4LDcgQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6d2FpdEZvck5hdmlnYXRpb25Ub0Nv
bXBsZXRlT25GcmFtZShXZWJGcmFtZVByb3h5JiBmcmEKIAogdm9pZCBXZWJBdXRvbWF0aW9uU2Vz
c2lvbjo6cmVzcG9uZFRvUGVuZGluZ1BhZ2VOYXZpZ2F0aW9uQ2FsbGJhY2tzV2l0aFRpbWVvdXQo
SGFzaE1hcDxXZWJQYWdlUHJveHlJZGVudGlmaWVyLCBSZWZQdHI8SW5zcGVjdG9yOjpCYWNrZW5k
RGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlPj4mIG1hcCkKIHsKLSAgICBJbnNwZWN0b3I6OkVycm9y
U3RyaW5nIHRpbWVvdXRFcnJvciA9IFNUUklOR19GT1JfUFJFREVGSU5FRF9FUlJPUl9OQU1FKFRp
bWVvdXQpOworICAgIGF1dG8gdGltZW91dEVycm9yID0gU1RSSU5HX0ZPUl9QUkVERUZJTkVEX0VS
Uk9SX05BTUUoVGltZW91dCk7CiAgICAgZm9yIChhdXRvIGlkIDogY29weVRvVmVjdG9yKG1hcC5r
ZXlzKCkpKSB7CiAgICAgICAgIGF1dG8gcGFnZSA9IFdlYlByb2Nlc3NQcm94eTo6d2ViUGFnZShp
ZCk7CiAgICAgICAgIGF1dG8gY2FsbGJhY2sgPSBtYXAudGFrZShpZCk7CkBAIC01NDksNyArNTQw
LDcgQEAgc3RhdGljIFdlYlBhZ2VQcm94eSogZmluZFBhZ2VGb3JGcmFtZUlEKGNvbnN0IFdlYlBy
b2Nlc3NQb29sJiBwcm9jZXNzUG9vbCwgRnJhbWUKIAogdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lv
bjo6cmVzcG9uZFRvUGVuZGluZ0ZyYW1lTmF2aWdhdGlvbkNhbGxiYWNrc1dpdGhUaW1lb3V0KEhh
c2hNYXA8RnJhbWVJZGVudGlmaWVyLCBSZWZQdHI8SW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hl
cjo6Q2FsbGJhY2tCYXNlPj4mIG1hcCkKIHsKLSAgICBJbnNwZWN0b3I6OkVycm9yU3RyaW5nIHRp
bWVvdXRFcnJvciA9IFNUUklOR19GT1JfUFJFREVGSU5FRF9FUlJPUl9OQU1FKFRpbWVvdXQpOwor
ICAgIGF1dG8gdGltZW91dEVycm9yID0gU1RSSU5HX0ZPUl9QUkVERUZJTkVEX0VSUk9SX05BTUUo
VGltZW91dCk7CiAgICAgZm9yIChhdXRvIGlkIDogY29weVRvVmVjdG9yKG1hcC5rZXlzKCkpKSB7
CiAgICAgICAgIGF1dG8qIHBhZ2UgPSBmaW5kUGFnZUZvckZyYW1lSUQoKm1fcHJvY2Vzc1Bvb2ws
IGlkKTsKICAgICAgICAgYXV0byBjYWxsYmFjayA9IG1hcC50YWtlKGlkKTsKQEAgLTU2OCw3ICs1
NTksNyBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpsb2FkVGltZXJGaXJlZCgpCiAgICAg
cmVzcG9uZFRvUGVuZGluZ1BhZ2VOYXZpZ2F0aW9uQ2FsbGJhY2tzV2l0aFRpbWVvdXQobV9wZW5k
aW5nRWFnZXJOYXZpZ2F0aW9uSW5Ccm93c2luZ0NvbnRleHRDYWxsYmFja3NQZXJQYWdlKTsKIH0K
IAotdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6bWF4aW1pemVXaW5kb3dPZkJyb3dzaW5nQ29u
dGV4dChjb25zdCBTdHJpbmcmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSwgUmVmPE1heGltaXplV2lu
ZG93T2ZCcm93c2luZ0NvbnRleHRDYWxsYmFjaz4mJiBjYWxsYmFjaykKK3ZvaWQgV2ViQXV0b21h
dGlvblNlc3Npb246Om1heGltaXplV2luZG93T2ZCcm93c2luZ0NvbnRleHQoY29uc3QgSW5zcGVj
dG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJiBicm93c2lu
Z0NvbnRleHRIYW5kbGUsIFJlZjxNYXhpbWl6ZVdpbmRvd09mQnJvd3NpbmdDb250ZXh0Q2FsbGJh
Y2s+JiYgY2FsbGJhY2spCiB7CiAgICAgYXV0byogcGFnZSA9IHdlYlBhZ2VQcm94eUZvckhhbmRs
ZShicm93c2luZ0NvbnRleHRIYW5kbGUpOwogICAgIGlmICghcGFnZSkKQEAgLTU4NCw3ICs1NzUs
NyBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjptYXhpbWl6ZVdpbmRvd09mQnJvd3NpbmdD
b250ZXh0KGNvbnN0IFN0cmluZyYgYnJvd3NpbgogICAgIH0pOwogfQogCi12b2lkIFdlYkF1dG9t
YXRpb25TZXNzaW9uOjpoaWRlV2luZG93T2ZCcm93c2luZ0NvbnRleHQoY29uc3QgU3RyaW5nJiBi
cm93c2luZ0NvbnRleHRIYW5kbGUsIFJlZjxIaWRlV2luZG93T2ZCcm93c2luZ0NvbnRleHRDYWxs
YmFjaz4mJiBjYWxsYmFjaykKK3ZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OmhpZGVXaW5kb3dP
ZkJyb3dzaW5nQ29udGV4dChjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpC
cm93c2luZ0NvbnRleHRIYW5kbGUmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSwgUmVmPEhpZGVXaW5k
b3dPZkJyb3dzaW5nQ29udGV4dENhbGxiYWNrPiYmIGNhbGxiYWNrKQogewogICAgIFdlYlBhZ2VQ
cm94eSogcGFnZSA9IHdlYlBhZ2VQcm94eUZvckhhbmRsZShicm93c2luZ0NvbnRleHRIYW5kbGUp
OwogICAgIGlmICghcGFnZSkKQEAgLTY5Myw2NCArNjg0LDU2IEBAIHZvaWQgV2ViQXV0b21hdGlv
blNlc3Npb246OmRpZEV4aXRGdWxsU2NyZWVuRm9yUGFnZShjb25zdCBXZWJQYWdlUHJveHkmKQog
ICAgICAgICBtX3dpbmRvd1N0YXRlVHJhbnNpdGlvbkNhbGxiYWNrKFdpbmRvd1RyYW5zaXRpb25l
ZFRvU3RhdGU6OlVuZnVsbHNjcmVlbik7CiB9CiAKLXZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246
Om5hdmlnYXRlQnJvd3NpbmdDb250ZXh0KGNvbnN0IFN0cmluZyYgaGFuZGxlLCBjb25zdCBTdHJp
bmcmIHVybCwgY29uc3QgU3RyaW5nKiBvcHRpb25hbFBhZ2VMb2FkU3RyYXRlZ3lTdHJpbmcsIGNv
bnN0IGRvdWJsZSogb3B0aW9uYWxQYWdlTG9hZFRpbWVvdXQsIFJlZjxOYXZpZ2F0ZUJyb3dzaW5n
Q29udGV4dENhbGxiYWNrPiYmIGNhbGxiYWNrKQordm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6
bmF2aWdhdGVCcm93c2luZ0NvbnRleHQoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21h
dGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJiBoYW5kbGUsIGNvbnN0IFN0cmluZyYgdXJsLCBP
cHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpQYWdlTG9hZFN0cmF0ZWd5
PiYmIG9wdGlvbmFsUGFnZUxvYWRTdHJhdGVneSwgT3B0aW9uYWw8ZG91YmxlPiYmIG9wdGlvbmFs
UGFnZUxvYWRUaW1lb3V0LCBSZWY8TmF2aWdhdGVCcm93c2luZ0NvbnRleHRDYWxsYmFjaz4mJiBj
YWxsYmFjaykKIHsKICAgICBXZWJQYWdlUHJveHkqIHBhZ2UgPSB3ZWJQYWdlUHJveHlGb3JIYW5k
bGUoaGFuZGxlKTsKICAgICBpZiAoIXBhZ2UpCiAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVE
RUZJTkVEX0VSUk9SKFdpbmRvd05vdEZvdW5kKTsKIAotICAgIGF1dG8gcGFnZUxvYWRTdHJhdGVn
eSA9IHBhZ2VMb2FkU3RyYXRlZ3lGcm9tU3RyaW5nUGFyYW1ldGVyKG9wdGlvbmFsUGFnZUxvYWRT
dHJhdGVneVN0cmluZyk7Ci0gICAgaWYgKCFwYWdlTG9hZFN0cmF0ZWd5KQotICAgICAgICBBU1lO
Q19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhJbnZhbGlkUGFyYW1ldGVy
LCAiVGhlIHBhcmFtZXRlciAncGFnZUxvYWRTdHJhdGVneScgaXMgaW52YWxpZC4iKTsKKyAgICBh
dXRvIHBhZ2VMb2FkU3RyYXRlZ3kgPSBwYWdlTG9hZFN0cmF0ZWd5RnJvbVBhcmFtZXRlcihXVEZN
b3ZlKG9wdGlvbmFsUGFnZUxvYWRTdHJhdGVneSkpOwogICAgIGF1dG8gcGFnZUxvYWRUaW1lb3V0
ID0gb3B0aW9uYWxQYWdlTG9hZFRpbWVvdXQgPyBTZWNvbmRzOjpmcm9tTWlsbGlzZWNvbmRzKCpv
cHRpb25hbFBhZ2VMb2FkVGltZW91dCkgOiBkZWZhdWx0UGFnZUxvYWRUaW1lb3V0OwogCiAgICAg
cGFnZS0+bG9hZFJlcXVlc3QoVVJMKFVSTCgpLCB1cmwpKTsKLSAgICB3YWl0Rm9yTmF2aWdhdGlv
blRvQ29tcGxldGVPblBhZ2UoKnBhZ2UsIHBhZ2VMb2FkU3RyYXRlZ3kudmFsdWUoKSwgcGFnZUxv
YWRUaW1lb3V0LCBXVEZNb3ZlKGNhbGxiYWNrKSk7CisgICAgd2FpdEZvck5hdmlnYXRpb25Ub0Nv
bXBsZXRlT25QYWdlKCpwYWdlLCBwYWdlTG9hZFN0cmF0ZWd5LCBwYWdlTG9hZFRpbWVvdXQsIFdU
Rk1vdmUoY2FsbGJhY2spKTsKIH0KIAotdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6Z29CYWNr
SW5Ccm93c2luZ0NvbnRleHQoY29uc3QgU3RyaW5nJiBoYW5kbGUsIGNvbnN0IFN0cmluZyogb3B0
aW9uYWxQYWdlTG9hZFN0cmF0ZWd5U3RyaW5nLCBjb25zdCBkb3VibGUqIG9wdGlvbmFsUGFnZUxv
YWRUaW1lb3V0LCBSZWY8R29CYWNrSW5Ccm93c2luZ0NvbnRleHRDYWxsYmFjaz4mJiBjYWxsYmFj
aykKK3ZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OmdvQmFja0luQnJvd3NpbmdDb250ZXh0KGNv
bnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRs
ZSYgaGFuZGxlLCBPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpQYWdl
TG9hZFN0cmF0ZWd5PiYmIG9wdGlvbmFsUGFnZUxvYWRTdHJhdGVneSwgT3B0aW9uYWw8ZG91Ymxl
PiYmIG9wdGlvbmFsUGFnZUxvYWRUaW1lb3V0LCBSZWY8R29CYWNrSW5Ccm93c2luZ0NvbnRleHRD
YWxsYmFjaz4mJiBjYWxsYmFjaykKIHsKICAgICBXZWJQYWdlUHJveHkqIHBhZ2UgPSB3ZWJQYWdl
UHJveHlGb3JIYW5kbGUoaGFuZGxlKTsKICAgICBpZiAoIXBhZ2UpCiAgICAgICAgIEFTWU5DX0ZB
SUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SKFdpbmRvd05vdEZvdW5kKTsKIAotICAgIGF1dG8gcGFn
ZUxvYWRTdHJhdGVneSA9IHBhZ2VMb2FkU3RyYXRlZ3lGcm9tU3RyaW5nUGFyYW1ldGVyKG9wdGlv
bmFsUGFnZUxvYWRTdHJhdGVneVN0cmluZyk7Ci0gICAgaWYgKCFwYWdlTG9hZFN0cmF0ZWd5KQot
ICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhJbnZh
bGlkUGFyYW1ldGVyLCAiVGhlIHBhcmFtZXRlciAncGFnZUxvYWRTdHJhdGVneScgaXMgaW52YWxp
ZC4iKTsKKyAgICBhdXRvIHBhZ2VMb2FkU3RyYXRlZ3kgPSBwYWdlTG9hZFN0cmF0ZWd5RnJvbVBh
cmFtZXRlcihXVEZNb3ZlKG9wdGlvbmFsUGFnZUxvYWRTdHJhdGVneSkpOwogICAgIGF1dG8gcGFn
ZUxvYWRUaW1lb3V0ID0gb3B0aW9uYWxQYWdlTG9hZFRpbWVvdXQgPyBTZWNvbmRzOjpmcm9tTWls
bGlzZWNvbmRzKCpvcHRpb25hbFBhZ2VMb2FkVGltZW91dCkgOiBkZWZhdWx0UGFnZUxvYWRUaW1l
b3V0OwogCiAgICAgcGFnZS0+Z29CYWNrKCk7Ci0gICAgd2FpdEZvck5hdmlnYXRpb25Ub0NvbXBs
ZXRlT25QYWdlKCpwYWdlLCBwYWdlTG9hZFN0cmF0ZWd5LnZhbHVlKCksIHBhZ2VMb2FkVGltZW91
dCwgV1RGTW92ZShjYWxsYmFjaykpOworICAgIHdhaXRGb3JOYXZpZ2F0aW9uVG9Db21wbGV0ZU9u
UGFnZSgqcGFnZSwgcGFnZUxvYWRTdHJhdGVneSwgcGFnZUxvYWRUaW1lb3V0LCBXVEZNb3ZlKGNh
bGxiYWNrKSk7CiB9CiAKLXZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OmdvRm9yd2FyZEluQnJv
d3NpbmdDb250ZXh0KGNvbnN0IFN0cmluZyYgaGFuZGxlLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFs
UGFnZUxvYWRTdHJhdGVneVN0cmluZywgY29uc3QgZG91YmxlKiBvcHRpb25hbFBhZ2VMb2FkVGlt
ZW91dCwgUmVmPEdvRm9yd2FyZEluQnJvd3NpbmdDb250ZXh0Q2FsbGJhY2s+JiYgY2FsbGJhY2sp
Cit2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpnb0ZvcndhcmRJbkJyb3dzaW5nQ29udGV4dChj
b25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRIYW5k
bGUmIGhhbmRsZSwgT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6UGFn
ZUxvYWRTdHJhdGVneT4mJiBvcHRpb25hbFBhZ2VMb2FkU3RyYXRlZ3ksIE9wdGlvbmFsPGRvdWJs
ZT4mJiBvcHRpb25hbFBhZ2VMb2FkVGltZW91dCwgUmVmPEdvRm9yd2FyZEluQnJvd3NpbmdDb250
ZXh0Q2FsbGJhY2s+JiYgY2FsbGJhY2spCiB7CiAgICAgV2ViUGFnZVByb3h5KiBwYWdlID0gd2Vi
UGFnZVByb3h5Rm9ySGFuZGxlKGhhbmRsZSk7CiAgICAgaWYgKCFwYWdlKQogICAgICAgICBBU1lO
Q19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUihXaW5kb3dOb3RGb3VuZCk7CiAKLSAgICBhdXRv
IHBhZ2VMb2FkU3RyYXRlZ3kgPSBwYWdlTG9hZFN0cmF0ZWd5RnJvbVN0cmluZ1BhcmFtZXRlcihv
cHRpb25hbFBhZ2VMb2FkU3RyYXRlZ3lTdHJpbmcpOwotICAgIGlmICghcGFnZUxvYWRTdHJhdGVn
eSkKLSAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMo
SW52YWxpZFBhcmFtZXRlciwgIlRoZSBwYXJhbWV0ZXIgJ3BhZ2VMb2FkU3RyYXRlZ3knIGlzIGlu
dmFsaWQuIik7CisgICAgYXV0byBwYWdlTG9hZFN0cmF0ZWd5ID0gcGFnZUxvYWRTdHJhdGVneUZy
b21QYXJhbWV0ZXIoV1RGTW92ZShvcHRpb25hbFBhZ2VMb2FkU3RyYXRlZ3kpKTsKICAgICBhdXRv
IHBhZ2VMb2FkVGltZW91dCA9IG9wdGlvbmFsUGFnZUxvYWRUaW1lb3V0ID8gU2Vjb25kczo6ZnJv
bU1pbGxpc2Vjb25kcygqb3B0aW9uYWxQYWdlTG9hZFRpbWVvdXQpIDogZGVmYXVsdFBhZ2VMb2Fk
VGltZW91dDsKIAogICAgIHBhZ2UtPmdvRm9yd2FyZCgpOwotICAgIHdhaXRGb3JOYXZpZ2F0aW9u
VG9Db21wbGV0ZU9uUGFnZSgqcGFnZSwgcGFnZUxvYWRTdHJhdGVneS52YWx1ZSgpLCBwYWdlTG9h
ZFRpbWVvdXQsIFdURk1vdmUoY2FsbGJhY2spKTsKKyAgICB3YWl0Rm9yTmF2aWdhdGlvblRvQ29t
cGxldGVPblBhZ2UoKnBhZ2UsIHBhZ2VMb2FkU3RyYXRlZ3ksIHBhZ2VMb2FkVGltZW91dCwgV1RG
TW92ZShjYWxsYmFjaykpOwogfQogCi12b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpyZWxvYWRC
cm93c2luZ0NvbnRleHQoY29uc3QgU3RyaW5nJiBoYW5kbGUsIGNvbnN0IFN0cmluZyogb3B0aW9u
YWxQYWdlTG9hZFN0cmF0ZWd5U3RyaW5nLCBjb25zdCBkb3VibGUqIG9wdGlvbmFsUGFnZUxvYWRU
aW1lb3V0LCBSZWY8UmVsb2FkQnJvd3NpbmdDb250ZXh0Q2FsbGJhY2s+JiYgY2FsbGJhY2spCit2
b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpyZWxvYWRCcm93c2luZ0NvbnRleHQoY29uc3QgSW5z
cGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJiBoYW5k
bGUsIE9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OlBhZ2VMb2FkU3Ry
YXRlZ3k+JiYgb3B0aW9uYWxQYWdlTG9hZFN0cmF0ZWd5LCBPcHRpb25hbDxkb3VibGU+JiYgb3B0
aW9uYWxQYWdlTG9hZFRpbWVvdXQsIFJlZjxSZWxvYWRCcm93c2luZ0NvbnRleHRDYWxsYmFjaz4m
JiBjYWxsYmFjaykKIHsKICAgICBXZWJQYWdlUHJveHkqIHBhZ2UgPSB3ZWJQYWdlUHJveHlGb3JI
YW5kbGUoaGFuZGxlKTsKICAgICBpZiAoIXBhZ2UpCiAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9Q
UkVERUZJTkVEX0VSUk9SKFdpbmRvd05vdEZvdW5kKTsKIAotICAgIGF1dG8gcGFnZUxvYWRTdHJh
dGVneSA9IHBhZ2VMb2FkU3RyYXRlZ3lGcm9tU3RyaW5nUGFyYW1ldGVyKG9wdGlvbmFsUGFnZUxv
YWRTdHJhdGVneVN0cmluZyk7Ci0gICAgaWYgKCFwYWdlTG9hZFN0cmF0ZWd5KQotICAgICAgICBB
U1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhJbnZhbGlkUGFyYW1l
dGVyLCAiVGhlIHBhcmFtZXRlciAncGFnZUxvYWRTdHJhdGVneScgaXMgaW52YWxpZC4iKTsKKyAg
ICBhdXRvIHBhZ2VMb2FkU3RyYXRlZ3kgPSBwYWdlTG9hZFN0cmF0ZWd5RnJvbVBhcmFtZXRlcihX
VEZNb3ZlKG9wdGlvbmFsUGFnZUxvYWRTdHJhdGVneSkpOwogICAgIGF1dG8gcGFnZUxvYWRUaW1l
b3V0ID0gb3B0aW9uYWxQYWdlTG9hZFRpbWVvdXQgPyBTZWNvbmRzOjpmcm9tTWlsbGlzZWNvbmRz
KCpvcHRpb25hbFBhZ2VMb2FkVGltZW91dCkgOiBkZWZhdWx0UGFnZUxvYWRUaW1lb3V0OwogCiAg
ICAgcGFnZS0+cmVsb2FkKHsgfSk7Ci0gICAgd2FpdEZvck5hdmlnYXRpb25Ub0NvbXBsZXRlT25Q
YWdlKCpwYWdlLCBwYWdlTG9hZFN0cmF0ZWd5LnZhbHVlKCksIHBhZ2VMb2FkVGltZW91dCwgV1RG
TW92ZShjYWxsYmFjaykpOworICAgIHdhaXRGb3JOYXZpZ2F0aW9uVG9Db21wbGV0ZU9uUGFnZSgq
cGFnZSwgcGFnZUxvYWRTdHJhdGVneSwgcGFnZUxvYWRUaW1lb3V0LCBXVEZNb3ZlKGNhbGxiYWNr
KSk7CiB9CiAKIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246Om5hdmlnYXRpb25PY2N1cnJlZEZv
ckZyYW1lKGNvbnN0IFdlYkZyYW1lUHJveHkmIGZyYW1lKQpAQCAtOTIyLDM1ICs5MDUsMjcgQEAg
dm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6aGFuZGxlUnVuT3BlblBhbmVsKGNvbnN0IFdlYlBh
Z2VQcm94eSYgcGFnZSwgY29uc3QgV2UKICAgICBtX2RvbWFpbk5vdGlmaWVyLT5maWxlQ2hvb3Nl
ckRpc21pc3NlZChicm93c2luZ0NvbnRleHRIYW5kbGUsIGZhbHNlKTsKIH0KIAotdm9pZCBXZWJB
dXRvbWF0aW9uU2Vzc2lvbjo6ZXZhbHVhdGVKYXZhU2NyaXB0RnVuY3Rpb24oY29uc3QgU3RyaW5n
JiBicm93c2luZ0NvbnRleHRIYW5kbGUsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxGcmFtZUhhbmRs
ZSwgY29uc3QgU3RyaW5nJiBmdW5jdGlvbiwgY29uc3QgSlNPTjo6QXJyYXkmIGFyZ3VtZW50cywg
Y29uc3QgYm9vbCogb3B0aW9uYWxFeHBlY3RzSW1wbGljaXRDYWxsYmFja0FyZ3VtZW50LCBjb25z
dCBkb3VibGUqIG9wdGlvbmFsQ2FsbGJhY2tUaW1lb3V0LCBSZWY8RXZhbHVhdGVKYXZhU2NyaXB0
RnVuY3Rpb25DYWxsYmFjaz4mJiBjYWxsYmFjaykKK3ZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246
OmV2YWx1YXRlSmF2YVNjcmlwdEZ1bmN0aW9uKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1
dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYgYnJvd3NpbmdDb250ZXh0SGFuZGxlLCBj
b25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpGcmFtZUhhbmRsZSYgZnJhbWVI
YW5kbGUsIGNvbnN0IFN0cmluZyYgZnVuY3Rpb24sIFJlZjxKU09OOjpBcnJheT4mJiBhcmd1bWVu
dHMsIE9wdGlvbmFsPGJvb2w+JiYgZXhwZWN0c0ltcGxpY2l0Q2FsbGJhY2tBcmd1bWVudCwgT3B0
aW9uYWw8ZG91YmxlPiYmIGNhbGxiYWNrVGltZW91dCwgUmVmPEV2YWx1YXRlSmF2YVNjcmlwdEZ1
bmN0aW9uQ2FsbGJhY2s+JiYgY2FsbGJhY2spCiB7CiAgICAgV2ViUGFnZVByb3h5KiBwYWdlID0g
d2ViUGFnZVByb3h5Rm9ySGFuZGxlKGJyb3dzaW5nQ29udGV4dEhhbmRsZSk7CiAgICAgaWYgKCFw
YWdlKQogICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUihXaW5kb3dOb3RG
b3VuZCk7CiAKICAgICBib29sIGZyYW1lTm90Rm91bmQgPSBmYWxzZTsKLSAgICBhdXRvIGZyYW1l
SUQgPSB3ZWJGcmFtZUlERm9ySGFuZGxlKG9wdGlvbmFsRnJhbWVIYW5kbGUgPyAqb3B0aW9uYWxG
cmFtZUhhbmRsZSA6IGVtcHR5U3RyaW5nKCksIGZyYW1lTm90Rm91bmQpOworICAgIGF1dG8gZnJh
bWVJRCA9IHdlYkZyYW1lSURGb3JIYW5kbGUoZnJhbWVIYW5kbGUsIGZyYW1lTm90Rm91bmQpOwog
ICAgIGlmIChmcmFtZU5vdEZvdW5kKQogICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5F
RF9FUlJPUihGcmFtZU5vdEZvdW5kKTsKIAogICAgIFZlY3RvcjxTdHJpbmc+IGFyZ3VtZW50c1Zl
Y3RvcjsKLSAgICBhcmd1bWVudHNWZWN0b3IucmVzZXJ2ZUNhcGFjaXR5KGFyZ3VtZW50cy5sZW5n
dGgoKSk7CisgICAgYXJndW1lbnRzVmVjdG9yLnJlc2VydmVDYXBhY2l0eShhcmd1bWVudHMtPmxl
bmd0aCgpKTsKIAotICAgIGZvciAoYXV0byYgYXJndW1lbnQgOiBhcmd1bWVudHMpIHsKLSAgICAg
ICAgU3RyaW5nIGFyZ3VtZW50U3RyaW5nOwotICAgICAgICBhcmd1bWVudC0+YXNTdHJpbmcoYXJn
dW1lbnRTdHJpbmcpOwotICAgICAgICBhcmd1bWVudHNWZWN0b3IudW5jaGVja2VkQXBwZW5kKGFy
Z3VtZW50U3RyaW5nKTsKLSAgICB9Ci0KLSAgICBib29sIGV4cGVjdHNJbXBsaWNpdENhbGxiYWNr
QXJndW1lbnQgPSBvcHRpb25hbEV4cGVjdHNJbXBsaWNpdENhbGxiYWNrQXJndW1lbnQgPyAqb3B0
aW9uYWxFeHBlY3RzSW1wbGljaXRDYWxsYmFja0FyZ3VtZW50IDogZmFsc2U7Ci0gICAgT3B0aW9u
YWw8ZG91YmxlPiBjYWxsYmFja1RpbWVvdXQ7Ci0gICAgaWYgKG9wdGlvbmFsQ2FsbGJhY2tUaW1l
b3V0KQotICAgICAgICBjYWxsYmFja1RpbWVvdXQgPSAqb3B0aW9uYWxDYWxsYmFja1RpbWVvdXQ7
CisgICAgZm9yIChjb25zdCBhdXRvJiBhcmd1bWVudCA6IGFyZ3VtZW50cy5nZXQoKSkKKyAgICAg
ICAgYXJndW1lbnRzVmVjdG9yLnVuY2hlY2tlZEFwcGVuZChhcmd1bWVudC0+YXNTdHJpbmcoKSk7
CiAKICAgICB1aW50NjRfdCBjYWxsYmFja0lEID0gbV9uZXh0RXZhbHVhdGVKYXZhU2NyaXB0Q2Fs
bGJhY2tJRCsrOwogICAgIG1fZXZhbHVhdGVKYXZhU2NyaXB0RnVuY3Rpb25DYWxsYmFja3Muc2V0
KGNhbGxiYWNrSUQsIFdURk1vdmUoY2FsbGJhY2spKTsKIAotICAgIHBhZ2UtPnByb2Nlc3MoKS5z
ZW5kKE1lc3NhZ2VzOjpXZWJBdXRvbWF0aW9uU2Vzc2lvblByb3h5OjpFdmFsdWF0ZUphdmFTY3Jp
cHRGdW5jdGlvbihwYWdlLT53ZWJQYWdlSUQoKSwgZnJhbWVJRCwgZnVuY3Rpb24sIGFyZ3VtZW50
c1ZlY3RvciwgZXhwZWN0c0ltcGxpY2l0Q2FsbGJhY2tBcmd1bWVudCwgY2FsbGJhY2tUaW1lb3V0
LCBjYWxsYmFja0lEKSwgMCk7CisgICAgcGFnZS0+cHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Oldl
YkF1dG9tYXRpb25TZXNzaW9uUHJveHk6OkV2YWx1YXRlSmF2YVNjcmlwdEZ1bmN0aW9uKHBhZ2Ut
PndlYlBhZ2VJRCgpLCBmcmFtZUlELCBmdW5jdGlvbiwgYXJndW1lbnRzVmVjdG9yLCBleHBlY3Rz
SW1wbGljaXRDYWxsYmFja0FyZ3VtZW50LnZhbHVlT3IoZmFsc2UpLCBXVEZNb3ZlKGNhbGxiYWNr
VGltZW91dCksIGNhbGxiYWNrSUQpLCAwKTsKIH0KIAogdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lv
bjo6ZGlkRXZhbHVhdGVKYXZhU2NyaXB0RnVuY3Rpb24odWludDY0X3QgY2FsbGJhY2tJRCwgY29u
c3QgU3RyaW5nJiByZXN1bHQsIGNvbnN0IFN0cmluZyYgZXJyb3JUeXBlKQpAQCAtOTY1LDcgKzk0
MCw3IEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OmRpZEV2YWx1YXRlSmF2YVNjcmlwdEZ1
bmN0aW9uKHVpbnQ2NF90IGNhbGxiYWNrSUQsIGNvCiAgICAgICAgIGNhbGxiYWNrLT5zZW5kU3Vj
Y2VzcyhyZXN1bHQpOwogfQogCi12b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpyZXNvbHZlQ2hp
bGRGcmFtZUhhbmRsZShjb25zdCBTdHJpbmcmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSwgY29uc3Qg
U3RyaW5nKiBvcHRpb25hbEZyYW1lSGFuZGxlLCBjb25zdCBpbnQqIG9wdGlvbmFsT3JkaW5hbCwg
Y29uc3QgU3RyaW5nKiBvcHRpb25hbE5hbWUsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxOb2RlSGFu
ZGxlLCBSZWY8UmVzb2x2ZUNoaWxkRnJhbWVIYW5kbGVDYWxsYmFjaz4mJiBjYWxsYmFjaykKK3Zv
aWQgV2ViQXV0b21hdGlvblNlc3Npb246OnJlc29sdmVDaGlsZEZyYW1lSGFuZGxlKGNvbnN0IElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYgYnJv
d3NpbmdDb250ZXh0SGFuZGxlLCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9u
OjpGcmFtZUhhbmRsZSYgZnJhbWVIYW5kbGUsIE9wdGlvbmFsPGludD4mJiBvcHRpb25hbE9yZGlu
YWwsIGNvbnN0IFN0cmluZyYgb3B0aW9uYWxOYW1lLCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29s
OjpBdXRvbWF0aW9uOjpOb2RlSGFuZGxlJiBvcHRpb25hbE5vZGVIYW5kbGUsIFJlZjxSZXNvbHZl
Q2hpbGRGcmFtZUhhbmRsZUNhbGxiYWNrPiYmIGNhbGxiYWNrKQogewogICAgIGlmICghb3B0aW9u
YWxPcmRpbmFsICYmICFvcHRpb25hbE5hbWUgJiYgIW9wdGlvbmFsTm9kZUhhbmRsZSkKICAgICAg
ICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoTWlzc2luZ1Bh
cmFtZXRlciwgIkNvbW1hbmQgbXVzdCBzcGVjaWZ5IGEgY2hpbGQgZnJhbWUgYnkgb3JkaW5hbCwg
bmFtZSwgb3IgZWxlbWVudCBoYW5kbGUuIik7CkBAIC05NzUsNyArOTUwLDcgQEAgdm9pZCBXZWJB
dXRvbWF0aW9uU2Vzc2lvbjo6cmVzb2x2ZUNoaWxkRnJhbWVIYW5kbGUoY29uc3QgU3RyaW5nJiBi
cm93c2luZ0NvbnRleHQKICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1Io
V2luZG93Tm90Rm91bmQpOwogCiAgICAgYm9vbCBmcmFtZU5vdEZvdW5kID0gZmFsc2U7Ci0gICAg
YXV0byBmcmFtZUlEID0gd2ViRnJhbWVJREZvckhhbmRsZShvcHRpb25hbEZyYW1lSGFuZGxlID8g
Km9wdGlvbmFsRnJhbWVIYW5kbGUgOiBlbXB0eVN0cmluZygpLCBmcmFtZU5vdEZvdW5kKTsKKyAg
ICBhdXRvIGZyYW1lSUQgPSB3ZWJGcmFtZUlERm9ySGFuZGxlKGZyYW1lSGFuZGxlLCBmcmFtZU5v
dEZvdW5kKTsKICAgICBpZiAoZnJhbWVOb3RGb3VuZCkKICAgICAgICAgQVNZTkNfRkFJTF9XSVRI
X1BSRURFRklORURfRVJST1IoRnJhbWVOb3RGb3VuZCk7CiAKQEAgLTk4OCwxMyArOTYzLDEzIEBA
IHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OnJlc29sdmVDaGlsZEZyYW1lSGFuZGxlKGNvbnN0
IFN0cmluZyYgYnJvd3NpbmdDb250ZXh0CiAgICAgICAgIGNhbGxiYWNrLT5zZW5kU3VjY2Vzcyho
YW5kbGVGb3JXZWJGcmFtZUlEKGZyYW1lSUQpKTsKICAgICB9OwogCi0gICAgaWYgKG9wdGlvbmFs
Tm9kZUhhbmRsZSkgewotICAgICAgICBwYWdlLT5wcm9jZXNzKCkuc2VuZFdpdGhBc3luY1JlcGx5
KE1lc3NhZ2VzOjpXZWJBdXRvbWF0aW9uU2Vzc2lvblByb3h5OjpSZXNvbHZlQ2hpbGRGcmFtZVdp
dGhOb2RlSGFuZGxlKHBhZ2UtPndlYlBhZ2VJRCgpLCBmcmFtZUlELCAqb3B0aW9uYWxOb2RlSGFu
ZGxlKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAgIGlmICghIW9wdGlvbmFsTm9k
ZUhhbmRsZSkgeworICAgICAgICBwYWdlLT5wcm9jZXNzKCkuc2VuZFdpdGhBc3luY1JlcGx5KE1l
c3NhZ2VzOjpXZWJBdXRvbWF0aW9uU2Vzc2lvblByb3h5OjpSZXNvbHZlQ2hpbGRGcmFtZVdpdGhO
b2RlSGFuZGxlKHBhZ2UtPndlYlBhZ2VJRCgpLCBmcmFtZUlELCBvcHRpb25hbE5vZGVIYW5kbGUp
LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBpZiAob3B0aW9uYWxOYW1lKSB7Ci0gICAgICAgIHBhZ2UtPnByb2Nlc3MoKS5zZW5kV2l0
aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkF1dG9tYXRpb25TZXNzaW9uUHJveHk6OlJlc29sdmVD
aGlsZEZyYW1lV2l0aE5hbWUocGFnZS0+d2ViUGFnZUlEKCksIGZyYW1lSUQsICpvcHRpb25hbE5h
bWUpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisgICAgaWYgKCEhb3B0aW9uYWxOYW1l
KSB7CisgICAgICAgIHBhZ2UtPnByb2Nlc3MoKS5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6
OldlYkF1dG9tYXRpb25TZXNzaW9uUHJveHk6OlJlc29sdmVDaGlsZEZyYW1lV2l0aE5hbWUocGFn
ZS0+d2ViUGFnZUlEKCksIGZyYW1lSUQsIG9wdGlvbmFsTmFtZSksIFdURk1vdmUoY29tcGxldGlv
bkhhbmRsZXIpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTAwNiw3ICs5ODEsNyBA
QCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpyZXNvbHZlQ2hpbGRGcmFtZUhhbmRsZShjb25z
dCBTdHJpbmcmIGJyb3dzaW5nQ29udGV4dAogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQog
Ci12b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpyZXNvbHZlUGFyZW50RnJhbWVIYW5kbGUoY29u
c3QgU3RyaW5nJiBicm93c2luZ0NvbnRleHRIYW5kbGUsIGNvbnN0IFN0cmluZyYgZnJhbWVIYW5k
bGUsIFJlZjxSZXNvbHZlUGFyZW50RnJhbWVIYW5kbGVDYWxsYmFjaz4mJiBjYWxsYmFjaykKK3Zv
aWQgV2ViQXV0b21hdGlvblNlc3Npb246OnJlc29sdmVQYXJlbnRGcmFtZUhhbmRsZShjb25zdCBJ
bnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRIYW5kbGUmIGJy
b3dzaW5nQ29udGV4dEhhbmRsZSwgY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlv
bjo6RnJhbWVIYW5kbGUmIGZyYW1lSGFuZGxlLCBSZWY8UmVzb2x2ZVBhcmVudEZyYW1lSGFuZGxl
Q2FsbGJhY2s+JiYgY2FsbGJhY2spCiB7CiAgICAgV2ViUGFnZVByb3h5KiBwYWdlID0gd2ViUGFn
ZVByb3h5Rm9ySGFuZGxlKGJyb3dzaW5nQ29udGV4dEhhbmRsZSk7CiAgICAgaWYgKCFwYWdlKQpA
QCAtMTAyOSwxNiArMTAwNCwyMiBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpyZXNvbHZl
UGFyZW50RnJhbWVIYW5kbGUoY29uc3QgU3RyaW5nJiBicm93c2luZ0NvbnRleAogICAgIHBhZ2Ut
PnByb2Nlc3MoKS5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkF1dG9tYXRpb25TZXNz
aW9uUHJveHk6OlJlc29sdmVQYXJlbnRGcmFtZShwYWdlLT53ZWJQYWdlSUQoKSwgZnJhbWVJRCks
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAotc3RhdGljIE9wdGlvbmFsPENvb3Jk
aW5hdGVTeXN0ZW0+IHByb3RvY29sU3RyaW5nVG9Db29yZGluYXRlU3lzdGVtKGNvbnN0IFN0cmlu
ZyYgY29vcmRpbmF0ZVN5c3RlbVN0cmluZykKK3N0YXRpYyBPcHRpb25hbDxDb29yZGluYXRlU3lz
dGVtPiBwcm90b2NvbFN0cmluZ1RvQ29vcmRpbmF0ZVN5c3RlbShJbnNwZWN0b3I6OlByb3RvY29s
OjpBdXRvbWF0aW9uOjpDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0pCiB7Ci0gICAg
aWYgKGNvb3JkaW5hdGVTeXN0ZW1TdHJpbmcgPT0gIlBhZ2UiKQorICAgIHN3aXRjaCAoY29vcmRp
bmF0ZVN5c3RlbSkgeworICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6
Q29vcmRpbmF0ZVN5c3RlbTo6UGFnZToKICAgICAgICAgcmV0dXJuIENvb3JkaW5hdGVTeXN0ZW06
OlBhZ2U7Ci0gICAgaWYgKGNvb3JkaW5hdGVTeXN0ZW1TdHJpbmcgPT0gIkxheW91dFZpZXdwb3J0
IikKKworICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6Q29vcmRpbmF0
ZVN5c3RlbTo6Vmlld3BvcnQ6CisgICAgY2FzZSBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0
aW9uOjpDb29yZGluYXRlU3lzdGVtOjpMYXlvdXRWaWV3cG9ydDoKICAgICAgICAgcmV0dXJuIENv
b3JkaW5hdGVTeXN0ZW06OkxheW91dFZpZXdwb3J0OworICAgIH0KKworICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiB9CiAKLXZvaWQgV2ViQXV0b21h
dGlvblNlc3Npb246OmNvbXB1dGVFbGVtZW50TGF5b3V0KGNvbnN0IFN0cmluZyYgYnJvd3NpbmdD
b250ZXh0SGFuZGxlLCBjb25zdCBTdHJpbmcmIGZyYW1lSGFuZGxlLCBjb25zdCBTdHJpbmcmIG5v
ZGVIYW5kbGUsIGNvbnN0IGJvb2wqIG9wdGlvbmFsU2Nyb2xsSW50b1ZpZXdJZk5lZWRlZCwgY29u
c3QgU3RyaW5nJiBjb29yZGluYXRlU3lzdGVtU3RyaW5nLCBSZWY8Q29tcHV0ZUVsZW1lbnRMYXlv
dXRDYWxsYmFjaz4mJiBjYWxsYmFjaykKK3ZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OmNvbXB1
dGVFbGVtZW50TGF5b3V0KGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJy
b3dzaW5nQ29udGV4dEhhbmRsZSYgYnJvd3NpbmdDb250ZXh0SGFuZGxlLCBjb25zdCBJbnNwZWN0
b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpGcmFtZUhhbmRsZSYgZnJhbWVIYW5kbGUsIGNvbnN0
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246Ok5vZGVIYW5kbGUmIG5vZGVIYW5kbGUs
IE9wdGlvbmFsPGJvb2w+JiYgb3B0aW9uYWxTY3JvbGxJbnRvVmlld0lmTmVlZGVkLCBJbnNwZWN0
b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0
ZW1WYWx1ZSwgUmVmPENvbXB1dGVFbGVtZW50TGF5b3V0Q2FsbGJhY2s+JiYgY2FsbGJhY2spCiB7
CiAgICAgV2ViUGFnZVByb3h5KiBwYWdlID0gd2ViUGFnZVByb3h5Rm9ySGFuZGxlKGJyb3dzaW5n
Q29udGV4dEhhbmRsZSk7CiAgICAgaWYgKCFwYWdlKQpAQCAtMTA0OSw3ICsxMDMwLDcgQEAgdm9p
ZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6Y29tcHV0ZUVsZW1lbnRMYXlvdXQoY29uc3QgU3RyaW5n
JiBicm93c2luZ0NvbnRleHRIYW4KICAgICBpZiAoZnJhbWVOb3RGb3VuZCkKICAgICAgICAgQVNZ
TkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1IoRnJhbWVOb3RGb3VuZCk7CiAKLSAgICBPcHRp
b25hbDxDb29yZGluYXRlU3lzdGVtPiBjb29yZGluYXRlU3lzdGVtID0gcHJvdG9jb2xTdHJpbmdU
b0Nvb3JkaW5hdGVTeXN0ZW0oY29vcmRpbmF0ZVN5c3RlbVN0cmluZyk7CisgICAgT3B0aW9uYWw8
Q29vcmRpbmF0ZVN5c3RlbT4gY29vcmRpbmF0ZVN5c3RlbSA9IHByb3RvY29sU3RyaW5nVG9Db29y
ZGluYXRlU3lzdGVtKGNvb3JkaW5hdGVTeXN0ZW1WYWx1ZSk7CiAgICAgaWYgKCFjb29yZGluYXRl
U3lzdGVtKQogICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUl9BTkRfREVU
QUlMUyhJbnZhbGlkUGFyYW1ldGVyLCAiVGhlIHBhcmFtZXRlciAnY29vcmRpbmF0ZVN5c3RlbScg
aXMgaW52YWxpZC4iKTsKIApAQCAtMTA5MSw3ICsxMDcyLDcgQEAgdm9pZCBXZWJBdXRvbWF0aW9u
U2Vzc2lvbjo6Y29tcHV0ZUVsZW1lbnRMYXlvdXQoY29uc3QgU3RyaW5nJiBicm93c2luZ0NvbnRl
eHRIYW4KICAgICBwYWdlLT5wcm9jZXNzKCkuc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpX
ZWJBdXRvbWF0aW9uU2Vzc2lvblByb3h5OjpDb21wdXRlRWxlbWVudExheW91dChwYWdlLT53ZWJQ
YWdlSUQoKSwgZnJhbWVJRCwgbm9kZUhhbmRsZSwgc2Nyb2xsSW50b1ZpZXdJZk5lZWRlZCwgY29v
cmRpbmF0ZVN5c3RlbS52YWx1ZSgpKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQog
Ci12b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpzZWxlY3RPcHRpb25FbGVtZW50KGNvbnN0IFN0
cmluZyYgYnJvd3NpbmdDb250ZXh0SGFuZGxlLCBjb25zdCBTdHJpbmcmIGZyYW1lSGFuZGxlLCBj
b25zdCBTdHJpbmcmIG5vZGVIYW5kbGUsIFJlZjxTZWxlY3RPcHRpb25FbGVtZW50Q2FsbGJhY2s+
JiYgY2FsbGJhY2spCit2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpzZWxlY3RPcHRpb25FbGVt
ZW50KGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4
dEhhbmRsZSYgYnJvd3NpbmdDb250ZXh0SGFuZGxlLCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29s
OjpBdXRvbWF0aW9uOjpGcmFtZUhhbmRsZSYgZnJhbWVIYW5kbGUsIGNvbnN0IEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkF1dG9tYXRpb246Ok5vZGVIYW5kbGUmIG5vZGVIYW5kbGUsIFJlZjxTZWxlY3RP
cHRpb25FbGVtZW50Q2FsbGJhY2s+JiYgY2FsbGJhY2spCiB7CiAgICAgV2ViUGFnZVByb3h5KiBw
YWdlID0gd2ViUGFnZVByb3h5Rm9ySGFuZGxlKGJyb3dzaW5nQ29udGV4dEhhbmRsZSk7CiAgICAg
aWYgKCFwYWdlKQpAQCAtMTExNCw3ICsxMDk1LDcgQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lv
bjo6c2VsZWN0T3B0aW9uRWxlbWVudChjb25zdCBTdHJpbmcmIGJyb3dzaW5nQ29udGV4dEhhbmQK
ICAgICBwYWdlLT5wcm9jZXNzKCkuc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJBdXRv
bWF0aW9uU2Vzc2lvblByb3h5OjpTZWxlY3RPcHRpb25FbGVtZW50KHBhZ2UtPndlYlBhZ2VJRCgp
LCBmcmFtZUlELCBub2RlSGFuZGxlKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQog
Ci12b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjppc1Nob3dpbmdKYXZhU2NyaXB0RGlhbG9nKElu
c3BlY3Rvcjo6RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGJyb3dzaW5n
Q29udGV4dEhhbmRsZSwgYm9vbCogcmVzdWx0KQorSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JT
dHJpbmdPcjxib29sPiBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6aXNTaG93aW5nSmF2YVNjcmlwdERp
YWxvZyhjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRl
eHRIYW5kbGUmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSkKIHsKICAgICBBU1NFUlQobV9jbGllbnQp
OwogICAgIGlmICghbV9jbGllbnQpCkBAIC0xMTI0LDEwICsxMTA1LDEwIEBAIHZvaWQgV2ViQXV0
b21hdGlvblNlc3Npb246OmlzU2hvd2luZ0phdmFTY3JpcHREaWFsb2coSW5zcGVjdG9yOjpFcnJv
clN0cmluZyYgZXJyCiAgICAgaWYgKCFwYWdlKQogICAgICAgICBTWU5DX0ZBSUxfV0lUSF9QUkVE
RUZJTkVEX0VSUk9SKFdpbmRvd05vdEZvdW5kKTsKIAotICAgICpyZXN1bHQgPSBtX2NsaWVudC0+
aXNTaG93aW5nSmF2YVNjcmlwdERpYWxvZ09uUGFnZSgqdGhpcywgKnBhZ2UpOworICAgIHJldHVy
biBtX2NsaWVudC0+aXNTaG93aW5nSmF2YVNjcmlwdERpYWxvZ09uUGFnZSgqdGhpcywgKnBhZ2Up
OwogfQogCi12b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpkaXNtaXNzQ3VycmVudEphdmFTY3Jp
cHREaWFsb2coSW5zcGVjdG9yOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmlu
ZyYgYnJvd3NpbmdDb250ZXh0SGFuZGxlKQorSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJp
bmdPcjx2b2lkPiBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6ZGlzbWlzc0N1cnJlbnRKYXZhU2NyaXB0
RGlhbG9nKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29u
dGV4dEhhbmRsZSYgYnJvd3NpbmdDb250ZXh0SGFuZGxlKQogewogICAgIEFTU0VSVChtX2NsaWVu
dCk7CiAgICAgaWYgKCFtX2NsaWVudCkKQEAgLTExNDEsOSArMTEyMiwxMSBAQCB2b2lkIFdlYkF1
dG9tYXRpb25TZXNzaW9uOjpkaXNtaXNzQ3VycmVudEphdmFTY3JpcHREaWFsb2coSW5zcGVjdG9y
OjpFcnJvclN0cmluZwogICAgICAgICBTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SKE5v
SmF2YVNjcmlwdERpYWxvZyk7CiAKICAgICBtX2NsaWVudC0+ZGlzbWlzc0N1cnJlbnRKYXZhU2Ny
aXB0RGlhbG9nT25QYWdlKCp0aGlzLCAqcGFnZSk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12
b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjphY2NlcHRDdXJyZW50SmF2YVNjcmlwdERpYWxvZyhJ
bnNwZWN0b3I6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBicm93c2lu
Z0NvbnRleHRIYW5kbGUpCitJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+
IFdlYkF1dG9tYXRpb25TZXNzaW9uOjphY2NlcHRDdXJyZW50SmF2YVNjcmlwdERpYWxvZyhjb25z
dCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRIYW5kbGUm
IGJyb3dzaW5nQ29udGV4dEhhbmRsZSkKIHsKICAgICBBU1NFUlQobV9jbGllbnQpOwogICAgIGlm
ICghbV9jbGllbnQpCkBAIC0xMTU3LDkgKzExNDAsMTEgQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vz
c2lvbjo6YWNjZXB0Q3VycmVudEphdmFTY3JpcHREaWFsb2coSW5zcGVjdG9yOjpFcnJvclN0cmlu
ZyYKICAgICAgICAgU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUihOb0phdmFTY3JpcHRE
aWFsb2cpOwogCiAgICAgbV9jbGllbnQtPmFjY2VwdEN1cnJlbnRKYXZhU2NyaXB0RGlhbG9nT25Q
YWdlKCp0aGlzLCAqcGFnZSk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIFdlYkF1dG9t
YXRpb25TZXNzaW9uOjptZXNzYWdlT2ZDdXJyZW50SmF2YVNjcmlwdERpYWxvZyhJbnNwZWN0b3I6
OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBicm93c2luZ0NvbnRleHRI
YW5kbGUsIFN0cmluZyogdGV4dCkKK0luc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8
U3RyaW5nPiBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6bWVzc2FnZU9mQ3VycmVudEphdmFTY3JpcHRE
aWFsb2coY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250
ZXh0SGFuZGxlJiBicm93c2luZ0NvbnRleHRIYW5kbGUpCiB7CiAgICAgQVNTRVJUKG1fY2xpZW50
KTsKICAgICBpZiAoIW1fY2xpZW50KQpAQCAtMTE3MiwxMCArMTE1NywxMCBAQCB2b2lkIFdlYkF1
dG9tYXRpb25TZXNzaW9uOjptZXNzYWdlT2ZDdXJyZW50SmF2YVNjcmlwdERpYWxvZyhJbnNwZWN0
b3I6OkVycm9yU3RyaQogICAgIGlmICghbV9jbGllbnQtPmlzU2hvd2luZ0phdmFTY3JpcHREaWFs
b2dPblBhZ2UoKnRoaXMsICpwYWdlKSkKICAgICAgICAgU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5F
RF9FUlJPUihOb0phdmFTY3JpcHREaWFsb2cpOwogCi0gICAgKnRleHQgPSBtX2NsaWVudC0+bWVz
c2FnZU9mQ3VycmVudEphdmFTY3JpcHREaWFsb2dPblBhZ2UoKnRoaXMsICpwYWdlKTsKKyAgICBy
ZXR1cm4gbV9jbGllbnQtPm1lc3NhZ2VPZkN1cnJlbnRKYXZhU2NyaXB0RGlhbG9nT25QYWdlKCp0
aGlzLCAqcGFnZSk7CiB9CiAKLXZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OnNldFVzZXJJbnB1
dEZvckN1cnJlbnRKYXZhU2NyaXB0UHJvbXB0KEluc3BlY3Rvcjo6RXJyb3JTdHJpbmcmIGVycm9y
U3RyaW5nLCBjb25zdCBTdHJpbmcmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSwgY29uc3QgU3RyaW5n
JiBwcm9tcHRWYWx1ZSkKK0luc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4g
V2ViQXV0b21hdGlvblNlc3Npb246OnNldFVzZXJJbnB1dEZvckN1cnJlbnRKYXZhU2NyaXB0UHJv
bXB0KGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4
dEhhbmRsZSYgYnJvd3NpbmdDb250ZXh0SGFuZGxlLCBjb25zdCBTdHJpbmcmIHByb21wdFZhbHVl
KQogewogICAgIEFTU0VSVChtX2NsaWVudCk7CiAgICAgaWYgKCFtX2NsaWVudCkKQEAgLTEyMDcs
MTkgKzExOTIsMjEgQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6c2V0VXNlcklucHV0Rm9y
Q3VycmVudEphdmFTY3JpcHRQcm9tcHQoSW5zcGVjdG9yOjpFcnIKICAgICB9CiAKICAgICBtX2Ns
aWVudC0+c2V0VXNlcklucHV0Rm9yQ3VycmVudEphdmFTY3JpcHRQcm9tcHRPblBhZ2UoKnRoaXMs
ICpwYWdlLCBwcm9tcHRWYWx1ZSk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIFdlYkF1
dG9tYXRpb25TZXNzaW9uOjpzZXRGaWxlc1RvU2VsZWN0Rm9yRmlsZVVwbG9hZChFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgYnJvd3NpbmdDb250ZXh0SGFuZGxlLCBjb25z
dCBKU09OOjpBcnJheSYgZmlsZW5hbWVzLCBjb25zdCBKU09OOjpBcnJheSogZmlsZUNvbnRlbnRz
KQorSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBXZWJBdXRvbWF0aW9u
U2Vzc2lvbjo6c2V0RmlsZXNUb1NlbGVjdEZvckZpbGVVcGxvYWQoY29uc3QgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJiBicm93c2luZ0NvbnRl
eHRIYW5kbGUsIFJlZjxKU09OOjpBcnJheT4mJiBmaWxlbmFtZXMsIFJlZlB0cjxKU09OOjpBcnJh
eT4mJiBmaWxlQ29udGVudHMpCiB7CiAgICAgVmVjdG9yPFN0cmluZz4gbmV3RmlsZUxpc3Q7Ci0g
ICAgbmV3RmlsZUxpc3QucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShmaWxlbmFtZXMubGVuZ3RoKCkp
OworICAgIG5ld0ZpbGVMaXN0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoZmlsZW5hbWVzLT5sZW5n
dGgoKSk7CiAKLSAgICBpZiAoZmlsZUNvbnRlbnRzICYmIGZpbGVDb250ZW50cy0+bGVuZ3RoKCkg
IT0gZmlsZW5hbWVzLmxlbmd0aCgpKQorICAgIGlmIChmaWxlQ29udGVudHMgJiYgZmlsZUNvbnRl
bnRzLT5sZW5ndGgoKSAhPSBmaWxlbmFtZXMtPmxlbmd0aCgpKQogICAgICAgICBTWU5DX0ZBSUxf
V0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxTKEludGVybmFsRXJyb3IsICJUaGUgcGFy
YW1ldGVycyAnZmlsZW5hbWVzJyBhbmQgJ2ZpbGVDb250ZW50cycgbXVzdCBoYXZlIGVxdWFsIGxl
bmd0aC4iKTsKIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZmlsZW5hbWVzLmxlbmd0aCgp
OyArK2kpIHsKLSAgICAgICAgU3RyaW5nIGZpbGVuYW1lOwotICAgICAgICBpZiAoIWZpbGVuYW1l
cy5nZXQoaSktPmFzU3RyaW5nKGZpbGVuYW1lKSkKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGZpbGVuYW1lcy0+bGVuZ3RoKCk7ICsraSkgeworICAgICAgICBhdXRvIGZpbGVuYW1lID0gZmls
ZW5hbWVzLT5nZXQoaSktPmFzU3RyaW5nKCk7CisgICAgICAgIGlmICghZmlsZW5hbWUpCiAgICAg
ICAgICAgICBTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxTKEludGVy
bmFsRXJyb3IsICJUaGUgcGFyYW1ldGVyICdmaWxlbmFtZXMnIGNvbnRhaW5zIGEgbm9uLXN0cmlu
ZyB2YWx1ZS4iKTsKIAogICAgICAgICBpZiAoIWZpbGVDb250ZW50cykgewpAQCAtMTIyNyw4ICsx
MjE0LDggQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6c2V0RmlsZXNUb1NlbGVjdEZvckZp
bGVVcGxvYWQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW4KICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICB9CiAKLSAgICAgICAgU3RyaW5nIGZpbGVEYXRhOwotICAgICAgICBpZiAoIWZpbGVD
b250ZW50cy0+Z2V0KGkpLT5hc1N0cmluZyhmaWxlRGF0YSkpCisgICAgICAgIGF1dG8gZmlsZURh
dGEgPSBmaWxlQ29udGVudHMtPmdldChpKS0+YXNTdHJpbmcoKTsKKyAgICAgICAgaWYgKCFmaWxl
RGF0YSkKICAgICAgICAgICAgIFNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RF
VEFJTFMoSW50ZXJuYWxFcnJvciwgIlRoZSBwYXJhbWV0ZXIgJ2ZpbGVDb250ZW50cycgY29udGFp
bnMgYSBub24tc3RyaW5nIHZhbHVlLiIpOwogCiAgICAgICAgIE9wdGlvbmFsPFN0cmluZz4gbG9j
YWxGaWxlUGF0aCA9IHBsYXRmb3JtR2VuZXJhdGVMb2NhbEZpbGVQYXRoRm9yUmVtb3RlRmlsZShm
aWxlbmFtZSwgZmlsZURhdGEpOwpAQCAtMTIzOSw5ICsxMjI2LDExIEBAIHZvaWQgV2ViQXV0b21h
dGlvblNlc3Npb246OnNldEZpbGVzVG9TZWxlY3RGb3JGaWxlVXBsb2FkKEVycm9yU3RyaW5nJiBl
cnJvclN0cmluCiAgICAgfQogCiAgICAgbV9maWxlc1RvU2VsZWN0Rm9yRmlsZVVwbG9hZC5zd2Fw
KG5ld0ZpbGVMaXN0KTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgV2ViQXV0b21hdGlv
blNlc3Npb246OnNldEZpbGVzRm9ySW5wdXRGaWxlVXBsb2FkKGNvbnN0IFN0cmluZyYgYnJvd3Np
bmdDb250ZXh0SGFuZGxlLCBjb25zdCBTdHJpbmcmIGZyYW1lSGFuZGxlLCBjb25zdCBTdHJpbmcm
IG5vZGVIYW5kbGUsIGNvbnN0IEpTT046OkFycmF5JiBmaWxlbmFtZXMsIFJlZjxTZXRGaWxlc0Zv
cklucHV0RmlsZVVwbG9hZENhbGxiYWNrPiYmIGNhbGxiYWNrKQordm9pZCBXZWJBdXRvbWF0aW9u
U2Vzc2lvbjo6c2V0RmlsZXNGb3JJbnB1dEZpbGVVcGxvYWQoY29uc3QgSW5zcGVjdG9yOjpQcm90
b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJiBicm93c2luZ0NvbnRleHRI
YW5kbGUsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkZyYW1lSGFuZGxl
JiBmcmFtZUhhbmRsZSwgY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6Tm9k
ZUhhbmRsZSYgbm9kZUhhbmRsZSwgUmVmPEpTT046OkFycmF5PiYmIGZpbGVuYW1lcywgUmVmPFNl
dEZpbGVzRm9ySW5wdXRGaWxlVXBsb2FkQ2FsbGJhY2s+JiYgY2FsbGJhY2spCiB7CiAgICAgV2Vi
UGFnZVByb3h5KiBwYWdlID0gd2ViUGFnZVByb3h5Rm9ySGFuZGxlKGJyb3dzaW5nQ29udGV4dEhh
bmRsZSk7CiAgICAgaWYgKCFwYWdlKQpAQCAtMTI1MywxMCArMTI0MiwxMCBAQCB2b2lkIFdlYkF1
dG9tYXRpb25TZXNzaW9uOjpzZXRGaWxlc0ZvcklucHV0RmlsZVVwbG9hZChjb25zdCBTdHJpbmcm
IGJyb3dzaW5nQ29udAogICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUihG
cmFtZU5vdEZvdW5kKTsKIAogICAgIFZlY3RvcjxTdHJpbmc+IG5ld0ZpbGVMaXN0OwotICAgIG5l
d0ZpbGVMaXN0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoZmlsZW5hbWVzLmxlbmd0aCgpKTsKLSAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZpbGVuYW1lcy5sZW5ndGgoKTsgKytpKSB7Ci0gICAg
ICAgIFN0cmluZyBmaWxlbmFtZTsKLSAgICAgICAgaWYgKCFmaWxlbmFtZXMuZ2V0KGkpLT5hc1N0
cmluZyhmaWxlbmFtZSkpCisgICAgbmV3RmlsZUxpc3QucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShm
aWxlbmFtZXMtPmxlbmd0aCgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZpbGVuYW1l
cy0+bGVuZ3RoKCk7ICsraSkgeworICAgICAgICBhdXRvIGZpbGVuYW1lID0gZmlsZW5hbWVzLT5n
ZXQoaSktPmFzU3RyaW5nKCk7CisgICAgICAgIGlmICghZmlsZW5hbWUpCiAgICAgICAgICAgICBB
U1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhJbnRlcm5hbEVycm9y
LCAiVGhlIHBhcmFtZXRlciAnZmlsZW5hbWVzJyBjb250YWlucyBhIG5vbi1zdHJpbmcgdmFsdWUu
Iik7CiAKICAgICAgICAgbmV3RmlsZUxpc3QuYXBwZW5kKGZpbGVuYW1lKTsKQEAgLTEyOTksNyAr
MTI4OCw3IEBAIHN0YXRpYyBSZWY8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpB
dXRvbWF0aW9uOjpDb29raWU+PiBidWlsZEFycmF5Rm9yCiAgICAgcmV0dXJuIGNvb2tpZXM7CiB9
CiAKLXZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OmdldEFsbENvb2tpZXMoY29uc3QgU3RyaW5n
JiBicm93c2luZ0NvbnRleHRIYW5kbGUsIFJlZjxHZXRBbGxDb29raWVzQ2FsbGJhY2s+JiYgY2Fs
bGJhY2spCit2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpnZXRBbGxDb29raWVzKGNvbnN0IElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYgYnJv
d3NpbmdDb250ZXh0SGFuZGxlLCBSZWY8R2V0QWxsQ29va2llc0NhbGxiYWNrPiYmIGNhbGxiYWNr
KQogewogICAgIFdlYlBhZ2VQcm94eSogcGFnZSA9IHdlYlBhZ2VQcm94eUZvckhhbmRsZShicm93
c2luZ0NvbnRleHRIYW5kbGUpOwogICAgIGlmICghcGFnZSkKQEAgLTEzMTcsNyArMTMwNiw3IEBA
IHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OmdldEFsbENvb2tpZXMoY29uc3QgU3RyaW5nJiBi
cm93c2luZ0NvbnRleHRIYW5kbGUsIFJlCiAgICAgcGFnZS0+cHJvY2VzcygpLnNlbmRXaXRoQXN5
bmNSZXBseShNZXNzYWdlczo6V2ViQXV0b21hdGlvblNlc3Npb25Qcm94eTo6R2V0Q29va2llc0Zv
ckZyYW1lKHBhZ2UtPndlYlBhZ2VJRCgpLCBXVEY6Om51bGxvcHQpLCBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7CiB9CiAKLXZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OmRlbGV0ZVNpbmds
ZUNvb2tpZShjb25zdCBTdHJpbmcmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSwgY29uc3QgU3RyaW5n
JiBjb29raWVOYW1lLCBSZWY8RGVsZXRlU2luZ2xlQ29va2llQ2FsbGJhY2s+JiYgY2FsbGJhY2sp
Cit2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpkZWxldGVTaW5nbGVDb29raWUoY29uc3QgSW5z
cGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJiBicm93
c2luZ0NvbnRleHRIYW5kbGUsIGNvbnN0IFN0cmluZyYgY29va2llTmFtZSwgUmVmPERlbGV0ZVNp
bmdsZUNvb2tpZUNhbGxiYWNrPiYmIGNhbGxiYWNrKQogewogICAgIFdlYlBhZ2VQcm94eSogcGFn
ZSA9IHdlYlBhZ2VQcm94eUZvckhhbmRsZShicm93c2luZ0NvbnRleHRIYW5kbGUpOwogICAgIGlm
ICghcGFnZSkKQEAgLTEzNDcsNyArMTMzNiw3IEBAIHN0YXRpYyBTdHJpbmcgZG9tYWluQnlBZGRp
bmdEb3RQcmVmaXhJZk5lZWRlZChTdHJpbmcgZG9tYWluKQogICAgIHJldHVybiBkb21haW47CiB9
CiAgICAgCi12b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjphZGRTaW5nbGVDb29raWUoY29uc3Qg
U3RyaW5nJiBicm93c2luZ0NvbnRleHRIYW5kbGUsIGNvbnN0IEpTT046Ok9iamVjdCYgY29va2ll
T2JqZWN0LCBSZWY8QWRkU2luZ2xlQ29va2llQ2FsbGJhY2s+JiYgY2FsbGJhY2spCit2b2lkIFdl
YkF1dG9tYXRpb25TZXNzaW9uOjphZGRTaW5nbGVDb29raWUoY29uc3QgSW5zcGVjdG9yOjpQcm90
b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJiBicm93c2luZ0NvbnRleHRI
YW5kbGUsIFJlZjxKU09OOjpPYmplY3Q+JiYgY29va2llT2JqZWN0LCBSZWY8QWRkU2luZ2xlQ29v
a2llQ2FsbGJhY2s+JiYgY2FsbGJhY2spCiB7CiAgICAgV2ViUGFnZVByb3h5KiBwYWdlID0gd2Vi
UGFnZVByb3h5Rm9ySGFuZGxlKGJyb3dzaW5nQ29udGV4dEhhbmRsZSk7CiAgICAgaWYgKCFwYWdl
KQpAQCAtMTM1OCwxNCArMTM0NywxNiBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjphZGRT
aW5nbGVDb29raWUoY29uc3QgU3RyaW5nJiBicm93c2luZ0NvbnRleHRIYW5kbGUsCiAKICAgICBX
ZWJDb3JlOjpDb29raWUgY29va2llOwogCi0gICAgaWYgKCFjb29raWVPYmplY3QuZ2V0U3RyaW5n
KCJuYW1lIl9zLCBjb29raWUubmFtZSkpCisgICAgY29va2llLm5hbWUgPSBjb29raWVPYmplY3Qt
PmdldFN0cmluZygibmFtZSJfcyk7CisgICAgaWYgKCFjb29raWUubmFtZSkKICAgICAgICAgQVNZ
TkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoTWlzc2luZ1BhcmFtZXRl
ciwgIlRoZSBwYXJhbWV0ZXIgJ25hbWUnIHdhcyBub3QgZm91bmQuIik7CiAKLSAgICBpZiAoIWNv
b2tpZU9iamVjdC5nZXRTdHJpbmcoInZhbHVlIl9zLCBjb29raWUudmFsdWUpKQorICAgIGNvb2tp
ZS52YWx1ZSA9IGNvb2tpZU9iamVjdC0+Z2V0U3RyaW5nKCJ2YWx1ZSJfcyk7CisgICAgaWYgKCFj
b29raWUudmFsdWUpCiAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FO
RF9ERVRBSUxTKE1pc3NpbmdQYXJhbWV0ZXIsICJUaGUgcGFyYW1ldGVyICd2YWx1ZScgd2FzIG5v
dCBmb3VuZC4iKTsKIAotICAgIFN0cmluZyBkb21haW47Ci0gICAgaWYgKCFjb29raWVPYmplY3Qu
Z2V0U3RyaW5nKCJkb21haW4iX3MsIGRvbWFpbikpCisgICAgYXV0byBkb21haW4gPSBjb29raWVP
YmplY3QtPmdldFN0cmluZygiZG9tYWluIl9zKTsKKyAgICBpZiAoIWRvbWFpbikKICAgICAgICAg
QVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoTWlzc2luZ1BhcmFt
ZXRlciwgIlRoZSBwYXJhbWV0ZXIgJ2RvbWFpbicgd2FzIG5vdCBmb3VuZC4iKTsKIAogICAgIC8v
IEluaGVyaXQgdGhlIGRvbWFpbi9ob3N0IGZyb20gdGhlIG1haW4gZnJhbWUncyBVUkwgaWYgaXQg
aXMgbm90IGV4cGxpY2l0bHkgc2V0LgpAQCAtMTM3NCwzMSArMTM2NSw0MSBAQCB2b2lkIFdlYkF1
dG9tYXRpb25TZXNzaW9uOjphZGRTaW5nbGVDb29raWUoY29uc3QgU3RyaW5nJiBicm93c2luZ0Nv
bnRleHRIYW5kbGUsCiAgICAgZWxzZQogICAgICAgICBjb29raWUuZG9tYWluID0gZG9tYWluQnlB
ZGRpbmdEb3RQcmVmaXhJZk5lZWRlZChkb21haW4pOwogCi0gICAgaWYgKCFjb29raWVPYmplY3Qu
Z2V0U3RyaW5nKCJwYXRoIl9zLCBjb29raWUucGF0aCkpCisgICAgY29va2llLnBhdGggPSBjb29r
aWVPYmplY3QtPmdldFN0cmluZygicGF0aCJfcyk7CisgICAgaWYgKCFjb29raWUucGF0aCkKICAg
ICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoTWlzc2lu
Z1BhcmFtZXRlciwgIlRoZSBwYXJhbWV0ZXIgJ3BhdGgnIHdhcyBub3QgZm91bmQuIik7CiAKLSAg
ICBkb3VibGUgZXhwaXJlczsKLSAgICBpZiAoIWNvb2tpZU9iamVjdC5nZXREb3VibGUoImV4cGly
ZXMiX3MsIGV4cGlyZXMpKQorICAgIGF1dG8gZXhwaXJlcyA9IGNvb2tpZU9iamVjdC0+Z2V0RG91
YmxlKCJleHBpcmVzIl9zKTsKKyAgICBpZiAoIWV4cGlyZXMpCiAgICAgICAgIEFTWU5DX0ZBSUxf
V0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxTKE1pc3NpbmdQYXJhbWV0ZXIsICJUaGUg
cGFyYW1ldGVyICdleHBpcmVzJyB3YXMgbm90IGZvdW5kLiIpOwogCi0gICAgY29va2llLmV4cGly
ZXMgPSBleHBpcmVzICogMTAwMC4wOworICAgIGNvb2tpZS5leHBpcmVzID0gKmV4cGlyZXMgKiAx
MDAwLjA7CiAKLSAgICBpZiAoIWNvb2tpZU9iamVjdC5nZXRCb29sZWFuKCJzZWN1cmUiX3MsIGNv
b2tpZS5zZWN1cmUpKQorICAgIGF1dG8gc2VjdXJlID0gY29va2llT2JqZWN0LT5nZXRCb29sZWFu
KCJzZWN1cmUiX3MpOworICAgIGlmICghc2VjdXJlKQogICAgICAgICBBU1lOQ19GQUlMX1dJVEhf
UFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhNaXNzaW5nUGFyYW1ldGVyLCAiVGhlIHBhcmFt
ZXRlciAnc2VjdXJlJyB3YXMgbm90IGZvdW5kLiIpOwogCi0gICAgaWYgKCFjb29raWVPYmplY3Qu
Z2V0Qm9vbGVhbigic2Vzc2lvbiJfcywgY29va2llLnNlc3Npb24pKQorICAgIGNvb2tpZS5zZWN1
cmUgPSAqc2VjdXJlOworCisgICAgYXV0byBzZXNzaW9uID0gY29va2llT2JqZWN0LT5nZXRCb29s
ZWFuKCJzZXNzaW9uIl9zKTsKKyAgICBpZiAoIXNlc3Npb24pCiAgICAgICAgIEFTWU5DX0ZBSUxf
V0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxTKE1pc3NpbmdQYXJhbWV0ZXIsICJUaGUg
cGFyYW1ldGVyICdzZXNzaW9uJyB3YXMgbm90IGZvdW5kLiIpOwogCi0gICAgaWYgKCFjb29raWVP
YmplY3QuZ2V0Qm9vbGVhbigiaHR0cE9ubHkiX3MsIGNvb2tpZS5odHRwT25seSkpCisgICAgY29v
a2llLnNlc3Npb24gPSAqc2Vzc2lvbjsKKworICAgIGF1dG8gaHR0cE9ubHkgPSBjb29raWVPYmpl
Y3QtPmdldEJvb2xlYW4oImh0dHBPbmx5Il9zKTsKKyAgICBpZiAoIWh0dHBPbmx5KQogICAgICAg
ICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhNaXNzaW5nUGFy
YW1ldGVyLCAiVGhlIHBhcmFtZXRlciAnaHR0cE9ubHknIHdhcyBub3QgZm91bmQuIik7CiAKKyAg
ICBjb29raWUuaHR0cE9ubHkgPSAqaHR0cE9ubHk7CisKICAgICBXZWJDb29raWVNYW5hZ2VyUHJv
eHkqIGNvb2tpZU1hbmFnZXIgPSBtX3Byb2Nlc3NQb29sLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1h
bmFnZXJQcm94eT4oKTsKICAgICBjb29raWVNYW5hZ2VyLT5zZXRDb29raWVzKHBhZ2UtPndlYnNp
dGVEYXRhU3RvcmUoKS5zZXNzaW9uSUQoKSwgeyBjb29raWUgfSwgW2NhbGxiYWNrXSgpIHsKICAg
ICAgICAgY2FsbGJhY2stPnNlbmRTdWNjZXNzKCk7CiAgICAgfSk7CiB9CiAKLXZvaWQgV2ViQXV0
b21hdGlvblNlc3Npb246OmRlbGV0ZUFsbENvb2tpZXMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5n
LCBjb25zdCBTdHJpbmcmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSkKK0luc3BlY3Rvcjo6UHJvdG9j
b2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gV2ViQXV0b21hdGlvblNlc3Npb246OmRlbGV0ZUFsbENv
b2tpZXMoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250
ZXh0SGFuZGxlJiBicm93c2luZ0NvbnRleHRIYW5kbGUpCiB7CiAgICAgV2ViUGFnZVByb3h5KiBw
YWdlID0gd2ViUGFnZVByb3h5Rm9ySGFuZGxlKGJyb3dzaW5nQ29udGV4dEhhbmRsZSk7CiAgICAg
aWYgKCFwYWdlKQpAQCAtMTQxMSw5ICsxNDEyLDExIEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Np
b246OmRlbGV0ZUFsbENvb2tpZXMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJp
CiAKICAgICBXZWJDb29raWVNYW5hZ2VyUHJveHkqIGNvb2tpZU1hbmFnZXIgPSBtX3Byb2Nlc3NQ
b29sLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKICAgICBjb29raWVNYW5h
Z2VyLT5kZWxldGVDb29raWVzRm9ySG9zdG5hbWVzKHBhZ2UtPndlYnNpdGVEYXRhU3RvcmUoKS5z
ZXNzaW9uSUQoKSwgeyBob3N0LCBkb21haW5CeUFkZGluZ0RvdFByZWZpeElmTmVlZGVkKGhvc3Qp
IH0pOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6
Z2V0U2Vzc2lvblBlcm1pc3Npb25zKEVycm9yU3RyaW5nJiwgUmVmUHRyPEpTT046OkFycmF5T2Y8
SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6U2Vzc2lvblBlcm1pc3Npb25EYXRhPj4m
IG91dF9wZXJtaXNzaW9ucykKK0luc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVm
PEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6U2Vzc2lvblBl
cm1pc3Npb25EYXRhPj4+IFdlYkF1dG9tYXRpb25TZXNzaW9uOjpnZXRTZXNzaW9uUGVybWlzc2lv
bnMoKQogewogICAgIGF1dG8gcGVybWlzc2lvbnNPYmplY3RBcnJheSA9IEpTT046OkFycmF5T2Y8
SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6U2Vzc2lvblBlcm1pc3Npb25EYXRhPjo6
Y3JlYXRlKCk7CiAgICAgYXV0byBnZXRVc2VyTWVkaWFQZXJtaXNzaW9uT2JqZWN0ID0gSW5zcGVj
dG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6U2Vzc2lvblBlcm1pc3Npb25EYXRhOjpjcmVhdGUo
KQpAQCAtMTQyMiwzNCArMTQyNSwzNiBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpnZXRT
ZXNzaW9uUGVybWlzc2lvbnMoRXJyb3JTdHJpbmcmLCBSZWZQdHI8SlNPTjo6QXJyYQogICAgICAg
ICAucmVsZWFzZSgpOwogCiAgICAgcGVybWlzc2lvbnNPYmplY3RBcnJheS0+YWRkSXRlbShXVEZN
b3ZlKGdldFVzZXJNZWRpYVBlcm1pc3Npb25PYmplY3QpKTsKLSAgICBvdXRfcGVybWlzc2lvbnMg
PSBXVEZNb3ZlKHBlcm1pc3Npb25zT2JqZWN0QXJyYXkpOworICAgIHJldHVybiBXVEZNb3ZlKHBl
cm1pc3Npb25zT2JqZWN0QXJyYXkpOwogfQogCi12b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpz
ZXRTZXNzaW9uUGVybWlzc2lvbnMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBKU09O
OjpBcnJheSYgcGVybWlzc2lvbnMpCitJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09y
PHZvaWQ+IFdlYkF1dG9tYXRpb25TZXNzaW9uOjpzZXRTZXNzaW9uUGVybWlzc2lvbnMoUmVmPEpT
T046OkFycmF5PiYmIHBlcm1pc3Npb25zKQogewotICAgIGZvciAoYXV0byBpdCA9IHBlcm1pc3Np
b25zLmJlZ2luKCk7IGl0ICE9IHBlcm1pc3Npb25zLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIFJl
ZlB0cjxKU09OOjpPYmplY3Q+IHBlcm1pc3Npb247Ci0gICAgICAgIGlmICghaXQtPmdldCgpLT5h
c09iamVjdChwZXJtaXNzaW9uKSkKKyAgICBmb3IgKGF1dG8gaXQgPSBwZXJtaXNzaW9ucy0+YmVn
aW4oKTsgaXQgIT0gcGVybWlzc2lvbnMtPmVuZCgpOyArK2l0KSB7CisgICAgICAgIGF1dG8gcGVy
bWlzc2lvbiA9IGl0LT5nZXQoKS5hc09iamVjdCgpOworICAgICAgICBpZiAoIXBlcm1pc3Npb24p
CiAgICAgICAgICAgICBTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxT
KEludmFsaWRQYXJhbWV0ZXIsICJUaGUgcGFyYW1ldGVyICdwZXJtaXNzaW9ucycgaXMgaW52YWxp
ZC4iKTsKIAotICAgICAgICBTdHJpbmcgcGVybWlzc2lvbk5hbWU7Ci0gICAgICAgIGlmICghcGVy
bWlzc2lvbi0+Z2V0U3RyaW5nKCJwZXJtaXNzaW9uIl9zLCBwZXJtaXNzaW9uTmFtZSkpCisgICAg
ICAgIGF1dG8gcGVybWlzc2lvbk5hbWUgPSBwZXJtaXNzaW9uLT5nZXRTdHJpbmcoInBlcm1pc3Np
b24iX3MpOworICAgICAgICBpZiAoIXBlcm1pc3Npb25OYW1lKQogICAgICAgICAgICAgU1lOQ19G
QUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhJbnZhbGlkUGFyYW1ldGVyLCAi
VGhlIHBhcmFtZXRlciAncGVybWlzc2lvbicgaXMgbWlzc2luZyBvciBpbnZhbGlkLiIpOwogCiAg
ICAgICAgIGF1dG8gcGFyc2VkUGVybWlzc2lvbk5hbWUgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpB
dXRvbWF0aW9uSGVscGVyczo6cGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkF1dG9tYXRpb246OlNlc3Npb25QZXJtaXNzaW9uPihwZXJtaXNzaW9uTmFtZSk7CiAg
ICAgICAgIGlmICghcGFyc2VkUGVybWlzc2lvbk5hbWUpCiAgICAgICAgICAgICBTWU5DX0ZBSUxf
V0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxTKEludmFsaWRQYXJhbWV0ZXIsICJUaGUg
cGFyYW1ldGVyICdwZXJtaXNzaW9uJyBoYXMgYW4gdW5rbm93biB2YWx1ZS4iKTsKIAotICAgICAg
ICBib29sIHBlcm1pc3Npb25WYWx1ZTsKLSAgICAgICAgaWYgKCFwZXJtaXNzaW9uLT5nZXRCb29s
ZWFuKCJ2YWx1ZSJfcywgcGVybWlzc2lvblZhbHVlKSkKKyAgICAgICAgYXV0byBwZXJtaXNzaW9u
VmFsdWUgPSBwZXJtaXNzaW9uLT5nZXRCb29sZWFuKCJ2YWx1ZSJfcyk7CisgICAgICAgIGlmICgh
cGVybWlzc2lvblZhbHVlKQogICAgICAgICAgICAgU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9F
UlJPUl9BTkRfREVUQUlMUyhJbnZhbGlkUGFyYW1ldGVyLCAiVGhlIHBhcmFtZXRlciAndmFsdWUn
IGlzIG1pc3Npbmcgb3IgaW52YWxpZC4iKTsKIAogICAgICAgICBzd2l0Y2ggKHBhcnNlZFBlcm1p
c3Npb25OYW1lLnZhbHVlKCkpIHsKICAgICAgICAgY2FzZSBJbnNwZWN0b3I6OlByb3RvY29sOjpB
dXRvbWF0aW9uOjpTZXNzaW9uUGVybWlzc2lvbjo6R2V0VXNlck1lZGlhOgotICAgICAgICAgICAg
bV9wZXJtaXNzaW9uRm9yR2V0VXNlck1lZGlhID0gcGVybWlzc2lvblZhbHVlOworICAgICAgICAg
ICAgbV9wZXJtaXNzaW9uRm9yR2V0VXNlck1lZGlhID0gKnBlcm1pc3Npb25WYWx1ZTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQorCisgICAgcmV0dXJuIHsgfTsKIH0KIAog
Ym9vbCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6c2hvdWxkQWxsb3dHZXRVc2VyTWVkaWFGb3JQYWdl
KGNvbnN0IFdlYlBhZ2VQcm94eSYpIGNvbnN0CkBAIC0xNDk0LDcgKzE0OTksNyBAQCBTaW11bGF0
ZWRJbnB1dFNvdXJjZSogV2ViQXV0b21hdGlvblNlc3Npb246OmlucHV0U291cmNlRm9yVHlwZShT
aW11bGF0ZWRJbnB1dFNvdQogfQogCiAvLyBNQVJLOiBTaW11bGF0ZWRJbnB1dERpc3BhdGNoZXI6
OkNsaWVudCBBUEkKLXZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OnZpZXdwb3J0SW5WaWV3Q2Vu
dGVyUG9pbnRPZkVsZW1lbnQoV2ViUGFnZVByb3h5JiBwYWdlLCBPcHRpb25hbDxGcmFtZUlkZW50
aWZpZXI+IGZyYW1lSUQsIGNvbnN0IFN0cmluZyYgbm9kZUhhbmRsZSwgRnVuY3Rpb248dm9pZCAo
T3B0aW9uYWw8V2ViQ29yZTo6SW50UG9pbnQ+LCBPcHRpb25hbDxBdXRvbWF0aW9uQ29tbWFuZEVy
cm9yPik+JiYgY29tcGxldGlvbkhhbmRsZXIpCit2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjp2
aWV3cG9ydEluVmlld0NlbnRlclBvaW50T2ZFbGVtZW50KFdlYlBhZ2VQcm94eSYgcGFnZSwgT3B0
aW9uYWw8RnJhbWVJZGVudGlmaWVyPiBmcmFtZUlELCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29s
OjpBdXRvbWF0aW9uOjpOb2RlSGFuZGxlJiBub2RlSGFuZGxlLCBGdW5jdGlvbjx2b2lkKE9wdGlv
bmFsPFdlYkNvcmU6OkludFBvaW50PiwgT3B0aW9uYWw8QXV0b21hdGlvbkNvbW1hbmRFcnJvcj4p
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIFdURjo6Q29tcGxldGlvbkhhbmRsZXI8dm9p
ZChPcHRpb25hbDxTdHJpbmc+LCBXZWJDb3JlOjpJbnRSZWN0LCBPcHRpb25hbDxXZWJDb3JlOjpJ
bnRQb2ludD4sIGJvb2wpPiBkaWRDb21wdXRlRWxlbWVudExheW91dEhhbmRsZXIgPSBbY29tcGxl
dGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oT3B0aW9uYWw8U3RyaW5n
PiBlcnJvclR5cGUsIFdlYkNvcmU6OkludFJlY3QsIE9wdGlvbmFsPFdlYkNvcmU6OkludFBvaW50
PiBpblZpZXdDZW50ZXJQb2ludCwgYm9vbCkgbXV0YWJsZSB7CiAgICAgICAgIGlmIChlcnJvclR5
cGUpIHsKQEAgLTE2MzUsNyArMTY0MCw3IEBAIHN0YXRpYyBXZWJFdmVudDo6TW9kaWZpZXIgcHJv
dG9jb2xNb2RpZmllclRvV2ViRXZlbnRNb2RpZmllcihJbnNwZWN0b3I6OlByb3RvY29sCiB9CiAj
ZW5kaWYgLy8gRU5BQkxFKFdFQkRSSVZFUl9NT1VTRV9JTlRFUkFDVElPTlMpCiAKLXZvaWQgV2Vi
QXV0b21hdGlvblNlc3Npb246OnBlcmZvcm1Nb3VzZUludGVyYWN0aW9uKGNvbnN0IFN0cmluZyYg
aGFuZGxlLCBjb25zdCBKU09OOjpPYmplY3QmIHJlcXVlc3RlZFBvc2l0aW9uT2JqZWN0LCBjb25z
dCBTdHJpbmcmIG1vdXNlQnV0dG9uU3RyaW5nLCBjb25zdCBTdHJpbmcmIG1vdXNlSW50ZXJhY3Rp
b25TdHJpbmcsIGNvbnN0IEpTT046OkFycmF5JiBrZXlNb2RpZmllclN0cmluZ3MsIFJlZjxQZXJm
b3JtTW91c2VJbnRlcmFjdGlvbkNhbGxiYWNrPiYmIGNhbGxiYWNrKQordm9pZCBXZWJBdXRvbWF0
aW9uU2Vzc2lvbjo6cGVyZm9ybU1vdXNlSW50ZXJhY3Rpb24oY29uc3QgSW5zcGVjdG9yOjpQcm90
b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJiBoYW5kbGUsIFJlZjxKU09O
OjpPYmplY3Q+JiYgcmVxdWVzdGVkUG9zaXRpb24sIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9t
YXRpb246Ok1vdXNlQnV0dG9uIG1vdXNlQnV0dG9uLCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRv
bWF0aW9uOjpNb3VzZUludGVyYWN0aW9uIG1vdXNlSW50ZXJhY3Rpb24sIFJlZjxKU09OOjpBcnJh
eT4mJiBrZXlNb2RpZmllclN0cmluZ3MsIFJlZjxQZXJmb3JtTW91c2VJbnRlcmFjdGlvbkNhbGxi
YWNrPiYmIGNhbGxiYWNrKQogewogI2lmICFFTkFCTEUoV0VCRFJJVkVSX01PVVNFX0lOVEVSQUNU
SU9OUykKICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUihOb3RJbXBsZW1lbnRl
ZCk7CkBAIC0xNjQ0LDQ4ICsxNjQ5LDQ0IEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OnBl
cmZvcm1Nb3VzZUludGVyYWN0aW9uKGNvbnN0IFN0cmluZyYgaGFuZGxlLCBjb25zdCBKCiAgICAg
aWYgKCFwYWdlKQogICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUihXaW5k
b3dOb3RGb3VuZCk7CiAKLSAgICBmbG9hdCB4OwotICAgIGlmICghcmVxdWVzdGVkUG9zaXRpb25P
YmplY3QuZ2V0RG91YmxlKCJ4Il9zLCB4KSkKKyAgICBhdXRvIHggPSByZXF1ZXN0ZWRQb3NpdGlv
bi0+Z2V0RG91YmxlKCJ4Il9zKTsKKyAgICBpZiAoIXgpCiAgICAgICAgIEFTWU5DX0ZBSUxfV0lU
SF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxTKE1pc3NpbmdQYXJhbWV0ZXIsICJUaGUgcGFy
YW1ldGVyICd4JyB3YXMgbm90IGZvdW5kLiIpOwogCi0gICAgZmxvYXQgeTsKLSAgICBpZiAoIXJl
cXVlc3RlZFBvc2l0aW9uT2JqZWN0LmdldERvdWJsZSgieSJfcywgeSkpCisgICAgYXV0byBmbG9h
dFggPSBzdGF0aWNfY2FzdDxmbG9hdD4oKngpOworCisgICAgYXV0byB5ID0gcmVxdWVzdGVkUG9z
aXRpb24tPmdldERvdWJsZSgieSJfcyk7CisgICAgaWYgKCF5KQogICAgICAgICBBU1lOQ19GQUlM
X1dJVEhfUFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhNaXNzaW5nUGFyYW1ldGVyLCAiVGhl
IHBhcmFtZXRlciAneScgd2FzIG5vdCBmb3VuZC4iKTsKIAorICAgIGF1dG8gZmxvYXRZID0gc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KCp5KTsKKwogICAgIE9wdGlvblNldDxXZWJFdmVudDo6TW9kaWZpZXI+
IGtleU1vZGlmaWVyczsKLSAgICBmb3IgKGF1dG8gaXQgPSBrZXlNb2RpZmllclN0cmluZ3MuYmVn
aW4oKTsgaXQgIT0ga2V5TW9kaWZpZXJTdHJpbmdzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIFN0
cmluZyBtb2RpZmllclN0cmluZzsKLSAgICAgICAgaWYgKCFpdC0+Z2V0KCktPmFzU3RyaW5nKG1v
ZGlmaWVyU3RyaW5nKSkKKyAgICBmb3IgKGF1dG8gaXQgPSBrZXlNb2RpZmllclN0cmluZ3MtPmJl
Z2luKCk7IGl0ICE9IGtleU1vZGlmaWVyU3RyaW5ncy0+ZW5kKCk7ICsraXQpIHsKKyAgICAgICAg
YXV0byBtb2RpZmllclN0cmluZyA9IGl0LT5nZXQoKS5hc1N0cmluZygpOworICAgICAgICBpZiAo
IW1vZGlmaWVyU3RyaW5nKQogICAgICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURf
RVJST1JfQU5EX0RFVEFJTFMoSW52YWxpZFBhcmFtZXRlciwgIlRoZSBwYXJhbWV0ZXIgJ21vZGlm
aWVycycgaXMgaW52YWxpZC4iKTsKIAogICAgICAgICBhdXRvIHBhcnNlZE1vZGlmaWVyID0gSW5z
cGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbkhlbHBlcnM6OnBhcnNlRW51bVZhbHVlRnJvbVN0
cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpLZXlNb2RpZmllcj4obW9kaWZp
ZXJTdHJpbmcpOwogICAgICAgICBpZiAoIXBhcnNlZE1vZGlmaWVyKQogICAgICAgICAgICAgQVNZ
TkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoSW52YWxpZFBhcmFtZXRl
ciwgIkEgbW9kaWZpZXIgaW4gdGhlICdtb2RpZmllcnMnIGFycmF5IGlzIGludmFsaWQuIik7CisK
ICAgICAgICAga2V5TW9kaWZpZXJzLmFkZChwcm90b2NvbE1vZGlmaWVyVG9XZWJFdmVudE1vZGlm
aWVyKHBhcnNlZE1vZGlmaWVyLnZhbHVlKCkpKTsKICAgICB9CiAKLSAgICBwYWdlLT5nZXRXaW5k
b3dGcmFtZVdpdGhDYWxsYmFjayhbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMp
LCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBwYWdlID0gbWFrZVJlZigqcGFnZSksIHgs
IHksIG1vdXNlSW50ZXJhY3Rpb25TdHJpbmcsIG1vdXNlQnV0dG9uU3RyaW5nLCBrZXlNb2RpZmll
cnNdKFdlYkNvcmU6OkZsb2F0UmVjdCB3aW5kb3dGcmFtZSkgbXV0YWJsZSB7CisgICAgcGFnZS0+
Z2V0V2luZG93RnJhbWVXaXRoQ2FsbGJhY2soW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVm
KCp0aGlzKSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgcGFnZSA9IG1ha2VSZWYoKnBh
Z2UpLCBmbG9hdFgsIGZsb2F0WSwgbW91c2VJbnRlcmFjdGlvbiwgbW91c2VCdXR0b24sIGtleU1v
ZGlmaWVyc10oV2ViQ29yZTo6RmxvYXRSZWN0IHdpbmRvd0ZyYW1lKSBtdXRhYmxlIHsKKyAgICAg
ICAgZmxvYXRYID0gc3RkOjptaW4oc3RkOjptYXgoMC4wZiwgZmxvYXRYKSwgd2luZG93RnJhbWUu
c2l6ZSgpLndpZHRoKCkpOworICAgICAgICBmbG9hdFkgPSBzdGQ6Om1pbihzdGQ6Om1heCgwLjBm
LCBmbG9hdFkpLCB3aW5kb3dGcmFtZS5zaXplKCkuaGVpZ2h0KCkpOwogCi0gICAgICAgIHggPSBz
dGQ6Om1pbihzdGQ6Om1heCgwLjBmLCB4KSwgd2luZG93RnJhbWUuc2l6ZSgpLndpZHRoKCkpOwot
ICAgICAgICB5ID0gc3RkOjptaW4oc3RkOjptYXgoMC4wZiwgeSksIHdpbmRvd0ZyYW1lLnNpemUo
KS5oZWlnaHQoKSk7CisgICAgICAgIFdlYkNvcmU6OkludFBvaW50IGxvY2F0aW9uSW5WaWV3cG9y
dCA9IFdlYkNvcmU6OkludFBvaW50KHN0YXRpY19jYXN0PGludD4oZmxvYXRYKSwgc3RhdGljX2Nh
c3Q8aW50PihmbG9hdFkpKTsKIAotICAgICAgICBXZWJDb3JlOjpJbnRQb2ludCBsb2NhdGlvbklu
Vmlld3BvcnQgPSBXZWJDb3JlOjpJbnRQb2ludChzdGF0aWNfY2FzdDxpbnQ+KHgpLCBzdGF0aWNf
Y2FzdDxpbnQ+KHkpKTsKLQotICAgICAgICBhdXRvIHBhcnNlZEludGVyYWN0aW9uID0gSW5zcGVj
dG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbkhlbHBlcnM6OnBhcnNlRW51bVZhbHVlRnJvbVN0cmlu
ZzxJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpNb3VzZUludGVyYWN0aW9uPihtb3Vz
ZUludGVyYWN0aW9uU3RyaW5nKTsKLSAgICAgICAgaWYgKCFwYXJzZWRJbnRlcmFjdGlvbikKLSAg
ICAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxTKElu
dmFsaWRQYXJhbWV0ZXIsICJUaGUgcGFyYW1ldGVyICdpbnRlcmFjdGlvbicgaXMgaW52YWxpZC4i
KTsKLQotICAgICAgICBhdXRvIHBhcnNlZEJ1dHRvbiA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1
dG9tYXRpb25IZWxwZXJzOjpwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90
b2NvbDo6QXV0b21hdGlvbjo6TW91c2VCdXR0b24+KG1vdXNlQnV0dG9uU3RyaW5nKTsKLSAgICAg
ICAgaWYgKCFwYXJzZWRCdXR0b24pCi0gICAgICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVG
SU5FRF9FUlJPUl9BTkRfREVUQUlMUyhJbnZhbGlkUGFyYW1ldGVyLCAiVGhlIHBhcmFtZXRlciAn
YnV0dG9uJyBpcyBpbnZhbGlkLiIpOwotCi0gICAgICAgIGF1dG8gbW91c2VFdmVudHNGbHVzaGVk
Q2FsbGJhY2sgPSBbcHJvdGVjdGVkVGhpcyA9IFdURk1vdmUocHJvdGVjdGVkVGhpcyksIGNhbGxi
YWNrID0gV1RGTW92ZShjYWxsYmFjayksIHBhZ2UsIHgsIHldKE9wdGlvbmFsPEF1dG9tYXRpb25D
b21tYW5kRXJyb3I+IGVycm9yKSB7CisgICAgICAgIGF1dG8gbW91c2VFdmVudHNGbHVzaGVkQ2Fs
bGJhY2sgPSBbcHJvdGVjdGVkVGhpcyA9IFdURk1vdmUocHJvdGVjdGVkVGhpcyksIGNhbGxiYWNr
ID0gV1RGTW92ZShjYWxsYmFjayksIHBhZ2UsIGZsb2F0WCwgZmxvYXRZXShPcHRpb25hbDxBdXRv
bWF0aW9uQ29tbWFuZEVycm9yPiBlcnJvcikgewogICAgICAgICAgICAgaWYgKGVycm9yKQogICAg
ICAgICAgICAgICAgIGNhbGxiYWNrLT5zZW5kRmFpbHVyZShlcnJvci52YWx1ZSgpLnRvUHJvdG9j
b2xTdHJpbmcoKSk7CiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICBjYWxsYmFj
ay0+c2VuZFN1Y2Nlc3MoSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6UG9pbnQ6OmNy
ZWF0ZSgpCi0gICAgICAgICAgICAgICAgICAgIC5zZXRYKHgpCi0gICAgICAgICAgICAgICAgICAg
IC5zZXRZKHkgLSBwYWdlLT50b3BDb250ZW50SW5zZXQoKSkKKyAgICAgICAgICAgICAgICAgICAg
LnNldFgoZmxvYXRYKQorICAgICAgICAgICAgICAgICAgICAuc2V0WShmbG9hdFkgLSBwYWdlLT50
b3BDb250ZW50SW5zZXQoKSkKICAgICAgICAgICAgICAgICAgICAgLnJlbGVhc2UoKSk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH07CkBAIC0xNjk1LDcgKzE2OTYsNyBAQCB2b2lkIFdlYkF1dG9t
YXRpb25TZXNzaW9uOjpwZXJmb3JtTW91c2VJbnRlcmFjdGlvbihjb25zdCBTdHJpbmcmIGhhbmRs
ZSwgY29uc3QgSgogICAgICAgICAgICAgY2FsbGJhY2tJbk1hcChBVVRPTUFUSU9OX0NPTU1BTkRf
RVJST1JfV0lUSF9OQU1FKFRpbWVvdXQpKTsKICAgICAgICAgY2FsbGJhY2tJbk1hcCA9IFdURk1v
dmUobW91c2VFdmVudHNGbHVzaGVkQ2FsbGJhY2spOwogCi0gICAgICAgIHBsYXRmb3JtU2ltdWxh
dGVNb3VzZUludGVyYWN0aW9uKHBhZ2UsIHBhcnNlZEludGVyYWN0aW9uLnZhbHVlKCksIHBhcnNl
ZEJ1dHRvbi52YWx1ZSgpLCBsb2NhdGlvbkluVmlld3BvcnQsIGtleU1vZGlmaWVycyk7CisgICAg
ICAgIHBsYXRmb3JtU2ltdWxhdGVNb3VzZUludGVyYWN0aW9uKHBhZ2UsIG1vdXNlSW50ZXJhY3Rp
b24sIG1vdXNlQnV0dG9uLCBsb2NhdGlvbkluVmlld3BvcnQsIGtleU1vZGlmaWVycyk7CiAKICAg
ICAgICAgLy8gSWYgdGhlIGV2ZW50IGxvY2F0aW9uIHdhcyBwcmV2aW91c2x5IGNsaXBwZWQgYW5k
IGRvZXMgbm90IGhpdCB0ZXN0IGFueXRoaW5nIGluIHRoZSB3aW5kb3csIHRoZW4gaXQgd2lsbCBu
b3QgYmUgcHJvY2Vzc2VkLgogICAgICAgICAvLyBGb3IgY29tcGF0aWJpbGl0eSB3aXRoIHByZS1X
M0MgZHJpdmVyIGltcGxlbWVudGF0aW9ucywgZG9uJ3QgbWFrZSB0aGlzIGEgaGFyZCBlcnJvcjsg
anVzdCBkbyBub3RoaW5nIHNpbGVudGx5LgpAQCAtMTcwOCw3ICsxNzA5LDcgQEAgdm9pZCBXZWJB
dXRvbWF0aW9uU2Vzc2lvbjo6cGVyZm9ybU1vdXNlSW50ZXJhY3Rpb24oY29uc3QgU3RyaW5nJiBo
YW5kbGUsIGNvbnN0IEoKICNlbmRpZiAvLyBFTkFCTEUoV0VCRFJJVkVSX01PVVNFX0lOVEVSQUNU
SU9OUykKIH0KIAotdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6cGVyZm9ybUtleWJvYXJkSW50
ZXJhY3Rpb25zKGNvbnN0IFN0cmluZyYgaGFuZGxlLCBjb25zdCBKU09OOjpBcnJheSYgaW50ZXJh
Y3Rpb25zLCBSZWY8UGVyZm9ybUtleWJvYXJkSW50ZXJhY3Rpb25zQ2FsbGJhY2s+JiYgY2FsbGJh
Y2spCit2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpwZXJmb3JtS2V5Ym9hcmRJbnRlcmFjdGlv
bnMoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0
SGFuZGxlJiBoYW5kbGUsIFJlZjxKU09OOjpBcnJheT4mJiBpbnRlcmFjdGlvbnMsIFJlZjxQZXJm
b3JtS2V5Ym9hcmRJbnRlcmFjdGlvbnNDYWxsYmFjaz4mJiBjYWxsYmFjaykKIHsKICNpZiAhRU5B
QkxFKFdFQkRSSVZFUl9LRVlCT0FSRF9JTlRFUkFDVElPTlMpCiAgICAgQVNZTkNfRkFJTF9XSVRI
X1BSRURFRklORURfRVJST1IoTm90SW1wbGVtZW50ZWQpOwpAQCAtMTcxNywyOCArMTcxOCwyNyBA
QCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpwZXJmb3JtS2V5Ym9hcmRJbnRlcmFjdGlvbnMo
Y29uc3QgU3RyaW5nJiBoYW5kbGUsIGNvbgogICAgIGlmICghcGFnZSkKICAgICAgICAgQVNZTkNf
RkFJTF9XSVRIX1BSRURFRklORURfRVJST1IoV2luZG93Tm90Rm91bmQpOwogCi0gICAgaWYgKCFp
bnRlcmFjdGlvbnMubGVuZ3RoKCkpCisgICAgaWYgKCFpbnRlcmFjdGlvbnMtPmxlbmd0aCgpKQog
ICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhJbnZh
bGlkUGFyYW1ldGVyLCAiVGhlIHBhcmFtZXRlciAnaW50ZXJhY3Rpb25zJyB3YXMgbm90IGZvdW5k
IG9yIGVtcHR5LiIpOwogCiAgICAgLy8gVmFsaWRhdGUgYWxsIG9mIHRoZSBwYXJhbWV0ZXJzIGJl
Zm9yZSBwZXJmb3JtaW5nIGFueSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgYnJvd3NpbmcgY29udGV4
dCB1bmRlciB0ZXN0LgogICAgIFZlY3RvcjxXVEY6OkZ1bmN0aW9uPHZvaWQoKT4+IGFjdGlvbnNU
b1BlcmZvcm07Ci0gICAgYWN0aW9uc1RvUGVyZm9ybS5yZXNlcnZlQ2FwYWNpdHkoaW50ZXJhY3Rp
b25zLmxlbmd0aCgpKTsKKyAgICBhY3Rpb25zVG9QZXJmb3JtLnJlc2VydmVDYXBhY2l0eShpbnRl
cmFjdGlvbnMtPmxlbmd0aCgpKTsKIAotICAgIGZvciAoY29uc3QgYXV0byYgaW50ZXJhY3Rpb24g
OiBpbnRlcmFjdGlvbnMpIHsKLSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gaW50ZXJhY3Rp
b25PYmplY3Q7Ci0gICAgICAgIGlmICghaW50ZXJhY3Rpb24tPmFzT2JqZWN0KGludGVyYWN0aW9u
T2JqZWN0KSkKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGludGVyYWN0aW9uVmFsdWUgOiBpbnRlcmFj
dGlvbnMuZ2V0KCkpIHsKKyAgICAgICAgYXV0byBpbnRlcmFjdGlvbk9iamVjdCA9IGludGVyYWN0
aW9uVmFsdWUtPmFzT2JqZWN0KCk7CisgICAgICAgIGlmICghaW50ZXJhY3Rpb25PYmplY3QpCiAg
ICAgICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhJ
bnZhbGlkUGFyYW1ldGVyLCAiQW4gaW50ZXJhY3Rpb24gaW4gdGhlICdpbnRlcmFjdGlvbnMnIHBh
cmFtZXRlciB3YXMgaW52YWxpZC4iKTsKIAotICAgICAgICBTdHJpbmcgaW50ZXJhY3Rpb25UeXBl
U3RyaW5nOwotICAgICAgICBpZiAoIWludGVyYWN0aW9uT2JqZWN0LT5nZXRTdHJpbmcoInR5cGUi
X3MsIGludGVyYWN0aW9uVHlwZVN0cmluZykpCisgICAgICAgIGF1dG8gaW50ZXJhY3Rpb25UeXBl
U3RyaW5nID0gaW50ZXJhY3Rpb25PYmplY3QtPmdldFN0cmluZygidHlwZSJfcyk7CisgICAgICAg
IGlmICghaW50ZXJhY3Rpb25UeXBlU3RyaW5nKQogICAgICAgICAgICAgQVNZTkNfRkFJTF9XSVRI
X1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoSW52YWxpZFBhcmFtZXRlciwgIkFuIGludGVy
YWN0aW9uIGluIHRoZSAnaW50ZXJhY3Rpb25zJyBwYXJhbWV0ZXIgaXMgbWlzc2luZyB0aGUgJ3R5
cGUnIGtleS4iKTsKICAgICAgICAgYXV0byBpbnRlcmFjdGlvblR5cGUgPSBJbnNwZWN0b3I6OlBy
b3RvY29sOjpBdXRvbWF0aW9uSGVscGVyczo6cGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OktleWJvYXJkSW50ZXJhY3Rpb25UeXBlPihpbnRl
cmFjdGlvblR5cGVTdHJpbmcpOwogICAgICAgICBpZiAoIWludGVyYWN0aW9uVHlwZSkKICAgICAg
ICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxTKEludmFs
aWRQYXJhbWV0ZXIsICJBbiBpbnRlcmFjdGlvbiBpbiB0aGUgJ2ludGVyYWN0aW9ucycgcGFyYW1l
dGVyIGhhcyBhbiBpbnZhbGlkICd0eXBlJyBrZXkuIik7CiAKLSAgICAgICAgU3RyaW5nIHZpcnR1
YWxLZXlTdHJpbmc7Ci0gICAgICAgIGJvb2wgZm91bmRWaXJ0dWFsS2V5ID0gaW50ZXJhY3Rpb25P
YmplY3QtPmdldFN0cmluZygia2V5Il9zLCB2aXJ0dWFsS2V5U3RyaW5nKTsKLSAgICAgICAgaWYg
KGZvdW5kVmlydHVhbEtleSkgeworICAgICAgICBhdXRvIHZpcnR1YWxLZXlTdHJpbmcgPSBpbnRl
cmFjdGlvbk9iamVjdC0+Z2V0U3RyaW5nKCJrZXkiX3MpOworICAgICAgICBpZiAoISF2aXJ0dWFs
S2V5U3RyaW5nKSB7CiAgICAgICAgICAgICBPcHRpb25hbDxWaXJ0dWFsS2V5PiB2aXJ0dWFsS2V5
ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbkhlbHBlcnM6OnBhcnNlRW51bVZhbHVl
RnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpWaXJ0dWFsS2V5Pih2
aXJ0dWFsS2V5U3RyaW5nKTsKICAgICAgICAgICAgIGlmICghdmlydHVhbEtleSkKICAgICAgICAg
ICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhJbnZh
bGlkUGFyYW1ldGVyLCAiQW4gaW50ZXJhY3Rpb24gaW4gdGhlICdpbnRlcmFjdGlvbnMnIHBhcmFt
ZXRlciBoYXMgYW4gaW52YWxpZCAna2V5JyB2YWx1ZS4iKTsKQEAgLTE3NDgsOSArMTc0OCw4IEBA
IHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OnBlcmZvcm1LZXlib2FyZEludGVyYWN0aW9ucyhj
b25zdCBTdHJpbmcmIGhhbmRsZSwgY29uCiAgICAgICAgICAgICB9KTsKICAgICAgICAgfQogCi0g
ICAgICAgIFN0cmluZyBrZXlTZXF1ZW5jZTsKLSAgICAgICAgYm9vbCBmb3VuZEtleVNlcXVlbmNl
ID0gaW50ZXJhY3Rpb25PYmplY3QtPmdldFN0cmluZygidGV4dCJfcywga2V5U2VxdWVuY2UpOwot
ICAgICAgICBpZiAoZm91bmRLZXlTZXF1ZW5jZSkgeworICAgICAgICBhdXRvIGtleVNlcXVlbmNl
ID0gaW50ZXJhY3Rpb25PYmplY3QtPmdldFN0cmluZygidGV4dCJfcyk7CisgICAgICAgIGlmICgh
IWtleVNlcXVlbmNlKSB7CiAgICAgICAgICAgICBzd2l0Y2ggKGludGVyYWN0aW9uVHlwZS52YWx1
ZSgpKSB7CiAgICAgICAgICAgICBjYXNlIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246
OktleWJvYXJkSW50ZXJhY3Rpb25UeXBlOjpLZXlQcmVzczoKICAgICAgICAgICAgIGNhc2UgSW5z
cGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6S2V5Ym9hcmRJbnRlcmFjdGlvblR5cGU6Oktl
eVJlbGVhc2U6CkBAIC0xNzY1LDcgKzE3NjQsNyBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9u
OjpwZXJmb3JtS2V5Ym9hcmRJbnRlcmFjdGlvbnMoY29uc3QgU3RyaW5nJiBoYW5kbGUsIGNvbgog
ICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgaWYgKCFmb3VuZFZpcnR1YWxLZXkg
JiYgIWZvdW5kS2V5U2VxdWVuY2UpCisgICAgICAgIGlmICghdmlydHVhbEtleVN0cmluZyAmJiAh
a2V5U2VxdWVuY2UpCiAgICAgICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJP
Ul9BTkRfREVUQUlMUyhNaXNzaW5nUGFyYW1ldGVyLCAiQW4gaW50ZXJhY3Rpb24gaW4gdGhlICdp
bnRlcmFjdGlvbnMnIHBhcmFtZXRlciBpcyBtaXNzaW5nIGJvdGggJ2tleScgYW5kICd0ZXh0Jy4g
T25lIG11c3QgYmUgcHJvdmlkZWQuIik7CiAgICAgfQogCkBAIC0xODA4LDcgKzE4MDcsNyBAQCBz
dGF0aWMgU2ltdWxhdGVkSW5wdXRTb3VyY2VUeXBlIHNpbXVsYXRlZElucHV0U291cmNlVHlwZUZy
b21Qcm90b2NvbFNvdXJjZVR5cGUoSQogfQogI2VuZGlmIC8vIEVOQUJMRShXRUJEUklWRVJfQUNU
SU9OU19BUEkpCiAKLXZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OnBlcmZvcm1JbnRlcmFjdGlv
blNlcXVlbmNlKGNvbnN0IFN0cmluZyYgaGFuZGxlLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsRnJh
bWVIYW5kbGUsIGNvbnN0IEpTT046OkFycmF5JiBpbnB1dFNvdXJjZXMsIGNvbnN0IEpTT046OkFy
cmF5JiBzdGVwcywgUmVmPFdlYkF1dG9tYXRpb25TZXNzaW9uOjpQZXJmb3JtSW50ZXJhY3Rpb25T
ZXF1ZW5jZUNhbGxiYWNrPiYmIGNhbGxiYWNrKQordm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6
cGVyZm9ybUludGVyYWN0aW9uU2VxdWVuY2UoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0
b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJiBoYW5kbGUsIGNvbnN0IEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkF1dG9tYXRpb246OkZyYW1lSGFuZGxlJiBmcmFtZUhhbmRsZSwgUmVmPEpTT046
OkFycmF5PiYmIGlucHV0U291cmNlcywgUmVmPEpTT046OkFycmF5PiYmIHN0ZXBzLCBSZWY8V2Vi
QXV0b21hdGlvblNlc3Npb246OlBlcmZvcm1JbnRlcmFjdGlvblNlcXVlbmNlQ2FsbGJhY2s+JiYg
Y2FsbGJhY2spCiB7CiAgICAgLy8gVGhpcyBjb21tYW5kIGltcGxlbWVudHMgV2ViS2l0IHN1cHBv
cnQgZm9yIMKnMTcuNSBQZXJmb3JtIEFjdGlvbnMuCiAKQEAgLTE4MjAsNyArMTgxOSw3IEBAIHZv
aWQgV2ViQXV0b21hdGlvblNlc3Npb246OnBlcmZvcm1JbnRlcmFjdGlvblNlcXVlbmNlKGNvbnN0
IFN0cmluZyYgaGFuZGxlLCBjb25zCiAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVE
X0VSUk9SKFdpbmRvd05vdEZvdW5kKTsKIAogICAgIGJvb2wgZnJhbWVOb3RGb3VuZCA9IGZhbHNl
OwotICAgIGF1dG8gZnJhbWVJRCA9IHdlYkZyYW1lSURGb3JIYW5kbGUob3B0aW9uYWxGcmFtZUhh
bmRsZSA/ICpvcHRpb25hbEZyYW1lSGFuZGxlIDogZW1wdHlTdHJpbmcoKSwgZnJhbWVOb3RGb3Vu
ZCk7CisgICAgYXV0byBmcmFtZUlEID0gd2ViRnJhbWVJREZvckhhbmRsZShmcmFtZUhhbmRsZSwg
ZnJhbWVOb3RGb3VuZCk7CiAgICAgaWYgKGZyYW1lTm90Rm91bmQpCiAgICAgICAgIEFTWU5DX0ZB
SUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SKEZyYW1lTm90Rm91bmQpOwogCkBAIC0xODI5LDIwICsx
ODI4LDIwIEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OnBlcmZvcm1JbnRlcmFjdGlvblNl
cXVlbmNlKGNvbnN0IFN0cmluZyYgaGFuZGxlLCBjb25zCiAKICAgICAvLyBQYXJzZSBhbmQgdmFs
aWRhdGUgQXV0b21hdGlvbiBwcm90b2NvbCBhcmd1bWVudHMuIEJ5IHRoaXMgcG9pbnQsIHRoZSBk
cml2ZXIgaGFzCiAgICAgLy8gYWxyZWFkeSBwZXJmb3JtZWQgdGhlIHN0ZXBzIGluIMKnMTcuMyBQ
cm9jZXNzaW5nIEFjdGlvbnMgUmVxdWVzdHMuCi0gICAgaWYgKCFpbnB1dFNvdXJjZXMubGVuZ3Ro
KCkpCisgICAgaWYgKCFpbnB1dFNvdXJjZXMtPmxlbmd0aCgpKQogICAgICAgICBBU1lOQ19GQUlM
X1dJVEhfUFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhJbnZhbGlkUGFyYW1ldGVyLCAiVGhl
IHBhcmFtZXRlciAnaW5wdXRTb3VyY2VzJyB3YXMgbm90IGZvdW5kIG9yIGVtcHR5LiIpOwogCi0g
ICAgZm9yIChjb25zdCBhdXRvJiBpbnB1dFNvdXJjZSA6IGlucHV0U291cmNlcykgewotICAgICAg
ICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBpbnB1dFNvdXJjZU9iamVjdDsKLSAgICAgICAgaWYgKCFp
bnB1dFNvdXJjZS0+YXNPYmplY3QoaW5wdXRTb3VyY2VPYmplY3QpKQorICAgIGZvciAoY29uc3Qg
YXV0byYgaW5wdXRTb3VyY2VWYWx1ZSA6IGlucHV0U291cmNlcy5nZXQoKSkgeworICAgICAgICBh
dXRvIGlucHV0U291cmNlT2JqZWN0ID0gaW5wdXRTb3VyY2VWYWx1ZS0+YXNPYmplY3QoKTsKKyAg
ICAgICAgaWYgKCFpbnB1dFNvdXJjZU9iamVjdCkKICAgICAgICAgICAgIEFTWU5DX0ZBSUxfV0lU
SF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxTKEludmFsaWRQYXJhbWV0ZXIsICJBbiBpbnB1
dCBzb3VyY2UgaW4gdGhlICdpbnB1dFNvdXJjZXMnIHBhcmFtZXRlciB3YXMgaW52YWxpZC4iKTsK
LSAgICAgICAgCi0gICAgICAgIFN0cmluZyBzb3VyY2VJZDsKLSAgICAgICAgaWYgKCFpbnB1dFNv
dXJjZU9iamVjdC0+Z2V0U3RyaW5nKCJzb3VyY2VJZCJfcywgc291cmNlSWQpKQorCisgICAgICAg
IGF1dG8gc291cmNlSWQgPSBpbnB1dFNvdXJjZU9iamVjdC0+Z2V0U3RyaW5nKCJzb3VyY2VJZCJf
cyk7CisgICAgICAgIGlmICghc291cmNlSWQpCiAgICAgICAgICAgICBBU1lOQ19GQUlMX1dJVEhf
UFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhJbnZhbGlkUGFyYW1ldGVyLCAiQW4gaW5wdXQg
c291cmNlIGluIHRoZSAnaW5wdXRTb3VyY2VzJyBwYXJhbWV0ZXIgaXMgbWlzc2luZyBhICdzb3Vy
Y2VJZCcuIik7CiAKLSAgICAgICAgU3RyaW5nIHNvdXJjZVR5cGU7Ci0gICAgICAgIGlmICghaW5w
dXRTb3VyY2VPYmplY3QtPmdldFN0cmluZygic291cmNlVHlwZSJfcywgc291cmNlVHlwZSkpCisg
ICAgICAgIGF1dG8gc291cmNlVHlwZSA9IGlucHV0U291cmNlT2JqZWN0LT5nZXRTdHJpbmcoInNv
dXJjZVR5cGUiX3MpOworICAgICAgICBpZiAoIXNvdXJjZVR5cGUpCiAgICAgICAgICAgICBBU1lO
Q19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhJbnZhbGlkUGFyYW1ldGVy
LCAiQW4gaW5wdXQgc291cmNlIGluIHRoZSAnaW5wdXRTb3VyY2VzJyBwYXJhbWV0ZXIgaXMgbWlz
c2luZyBhICdzb3VyY2VUeXBlJy4iKTsKIAogICAgICAgICBhdXRvIHBhcnNlZElucHV0U291cmNl
VHlwZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb25IZWxwZXJzOjpwYXJzZUVudW1W
YWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6SW5wdXRTb3Vy
Y2VUeXBlPihzb3VyY2VUeXBlKTsKQEAgLTE4ODEsMjggKzE4ODAsMjggQEAgdm9pZCBXZWJBdXRv
bWF0aW9uU2Vzc2lvbjo6cGVyZm9ybUludGVyYWN0aW9uU2VxdWVuY2UoY29uc3QgU3RyaW5nJiBo
YW5kbGUsIGNvbnMKIAogICAgIFZlY3RvcjxTaW11bGF0ZWRJbnB1dEtleUZyYW1lPiBrZXlGcmFt
ZXM7CiAKLSAgICBpZiAoIXN0ZXBzLmxlbmd0aCgpKQorICAgIGlmICghc3RlcHMtPmxlbmd0aCgp
KQogICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhJ
bnZhbGlkUGFyYW1ldGVyLCAiVGhlIHBhcmFtZXRlciAnc3RlcHMnIHdhcyBub3QgZm91bmQgb3Ig
ZW1wdHkuIik7CiAKLSAgICBmb3IgKGNvbnN0IGF1dG8mIHN0ZXAgOiBzdGVwcykgewotICAgICAg
ICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBzdGVwT2JqZWN0OwotICAgICAgICBpZiAoIXN0ZXAtPmFz
T2JqZWN0KHN0ZXBPYmplY3QpKQorICAgIGZvciAoY29uc3QgYXV0byYgc3RlcFZhbHVlIDogc3Rl
cHMuZ2V0KCkpIHsKKyAgICAgICAgYXV0byBzdGVwT2JqZWN0ID0gc3RlcFZhbHVlLT5hc09iamVj
dCgpOworICAgICAgICBpZiAoIXN0ZXBPYmplY3QpCiAgICAgICAgICAgICBBU1lOQ19GQUlMX1dJ
VEhfUFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhJbnZhbGlkUGFyYW1ldGVyLCAiQSBzdGVw
IGluIHRoZSAnc3RlcHMnIHBhcmFtZXRlciB3YXMgbm90IGFuIG9iamVjdC4iKTsKIAotICAgICAg
ICBSZWZQdHI8SlNPTjo6QXJyYXk+IHN0ZXBTdGF0ZXM7Ci0gICAgICAgIGlmICghc3RlcE9iamVj
dC0+Z2V0QXJyYXkoInN0YXRlcyJfcywgc3RlcFN0YXRlcykpCisgICAgICAgIGF1dG8gc3RlcFN0
YXRlcyA9IHN0ZXBPYmplY3QtPmdldEFycmF5KCJzdGF0ZXMiX3MpOworICAgICAgICBpZiAoIXN0
ZXBTdGF0ZXMpCiAgICAgICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUl9B
TkRfREVUQUlMUyhJbnZhbGlkUGFyYW1ldGVyLCAiQSBzdGVwIGlzIG1pc3NpbmcgdGhlICdzdGF0
ZXMnIHByb3BlcnR5LiIpOwogCiAgICAgICAgIFZlY3RvcjxTaW11bGF0ZWRJbnB1dEtleUZyYW1l
OjpTdGF0ZUVudHJ5PiBlbnRyaWVzOwogICAgICAgICBlbnRyaWVzLnJlc2VydmVDYXBhY2l0eShz
dGVwU3RhdGVzLT5sZW5ndGgoKSk7CiAKLSAgICAgICAgZm9yIChjb25zdCBhdXRvJiBzdGF0ZSA6
ICpzdGVwU3RhdGVzKSB7Ci0gICAgICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBzdGF0ZU9i
amVjdDsKLSAgICAgICAgICAgIGlmICghc3RhdGUtPmFzT2JqZWN0KHN0YXRlT2JqZWN0KSkKKyAg
ICAgICAgZm9yIChjb25zdCBhdXRvJiBzdGF0ZVZhbHVlIDogKnN0ZXBTdGF0ZXMpIHsKKyAgICAg
ICAgICAgIGF1dG8gc3RhdGVPYmplY3QgPSBzdGF0ZVZhbHVlLT5hc09iamVjdCgpOworICAgICAg
ICAgICAgaWYgKCFzdGF0ZU9iamVjdCkKICAgICAgICAgICAgICAgICBBU1lOQ19GQUlMX1dJVEhf
UFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhJbnZhbGlkUGFyYW1ldGVyLCAiRW5jb3VudGVy
ZWQgYSBub24tb2JqZWN0IHN0ZXAgc3RhdGUuIik7CiAKLSAgICAgICAgICAgIFN0cmluZyBzb3Vy
Y2VJZDsKLSAgICAgICAgICAgIGlmICghc3RhdGVPYmplY3QtPmdldFN0cmluZygic291cmNlSWQi
X3MsIHNvdXJjZUlkKSkKKyAgICAgICAgICAgIGF1dG8gc291cmNlSWQgPSBzdGF0ZU9iamVjdC0+
Z2V0U3RyaW5nKCJzb3VyY2VJZCJfcyk7CisgICAgICAgICAgICBpZiAoIXNvdXJjZUlkKQogICAg
ICAgICAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxT
KEludmFsaWRQYXJhbWV0ZXIsICJTdGVwIHN0YXRlIGxhY2tzIHJlcXVpcmVkICdzb3VyY2VJZCcg
cHJvcGVydHkuIik7CiAKICAgICAgICAgICAgIGlmICghc291cmNlSWRUb0lucHV0U291cmNlTWFw
LmNvbnRhaW5zKHNvdXJjZUlkKSkKQEAgLTE5MTEsMTcgKzE5MTAsMTYgQEAgdm9pZCBXZWJBdXRv
bWF0aW9uU2Vzc2lvbjo6cGVyZm9ybUludGVyYWN0aW9uU2VxdWVuY2UoY29uc3QgU3RyaW5nJiBo
YW5kbGUsIGNvbnMKICAgICAgICAgICAgIFNpbXVsYXRlZElucHV0U291cmNlJiBpbnB1dFNvdXJj
ZSA9ICpzb3VyY2VJZFRvSW5wdXRTb3VyY2VNYXAuZ2V0KHNvdXJjZUlkKTsKICAgICAgICAgICAg
IFNpbXVsYXRlZElucHV0U291cmNlU3RhdGUgc291cmNlU3RhdGUgeyB9OwogCi0gICAgICAgICAg
ICBTdHJpbmcgcHJlc3NlZENoYXJLZXlTdHJpbmc7Ci0gICAgICAgICAgICBpZiAoc3RhdGVPYmpl
Y3QtPmdldFN0cmluZygicHJlc3NlZENoYXJLZXkiX3MsIHByZXNzZWRDaGFyS2V5U3RyaW5nKSkK
KyAgICAgICAgICAgIGF1dG8gcHJlc3NlZENoYXJLZXlTdHJpbmcgPSBzdGF0ZU9iamVjdC0+Z2V0
U3RyaW5nKCJwcmVzc2VkQ2hhcktleSJfcyk7CisgICAgICAgICAgICBpZiAoISFwcmVzc2VkQ2hh
cktleVN0cmluZykKICAgICAgICAgICAgICAgICBzb3VyY2VTdGF0ZS5wcmVzc2VkQ2hhcktleSA9
IHByZXNzZWRDaGFyS2V5U3RyaW5nLmNoYXJhY3RlckF0KDApOwogCi0gICAgICAgICAgICBSZWZQ
dHI8SlNPTjo6QXJyYXk+IHByZXNzZWRWaXJ0dWFsS2V5c0FycmF5OwotICAgICAgICAgICAgaWYg
KHN0YXRlT2JqZWN0LT5nZXRBcnJheSgicHJlc3NlZFZpcnR1YWxLZXlzIl9zLCBwcmVzc2VkVmly
dHVhbEtleXNBcnJheSkpIHsKKyAgICAgICAgICAgIGlmIChhdXRvIHByZXNzZWRWaXJ0dWFsS2V5
c0FycmF5ID0gc3RhdGVPYmplY3QtPmdldEFycmF5KCJwcmVzc2VkVmlydHVhbEtleXMiX3MpKSB7
CiAgICAgICAgICAgICAgICAgVmlydHVhbEtleVNldCBwcmVzc2VkVmlydHVhbEtleXMgeyB9Owog
CiAgICAgICAgICAgICAgICAgZm9yIChhdXRvIGl0ID0gcHJlc3NlZFZpcnR1YWxLZXlzQXJyYXkt
PmJlZ2luKCk7IGl0ICE9IHByZXNzZWRWaXJ0dWFsS2V5c0FycmF5LT5lbmQoKTsgKytpdCkgewot
ICAgICAgICAgICAgICAgICAgICBTdHJpbmcgcHJlc3NlZFZpcnR1YWxLZXlTdHJpbmc7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmICghKCppdCktPmFzU3RyaW5nKHByZXNzZWRWaXJ0dWFsS2V5U3Ry
aW5nKSkKKyAgICAgICAgICAgICAgICAgICAgYXV0byBwcmVzc2VkVmlydHVhbEtleVN0cmluZyA9
ICgqaXQpLT5hc1N0cmluZygpOworICAgICAgICAgICAgICAgICAgICBpZiAoIXByZXNzZWRWaXJ0
dWFsS2V5U3RyaW5nKQogICAgICAgICAgICAgICAgICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BS
RURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoSW52YWxpZFBhcmFtZXRlciwgIkVuY291bnRlcmVk
IGEgbm9uLXN0cmluZyB2aXJ0dWFsIGtleSB2YWx1ZS4iKTsKIAogICAgICAgICAgICAgICAgICAg
ICBPcHRpb25hbDxWaXJ0dWFsS2V5PiBwYXJzZWRWaXJ0dWFsS2V5ID0gSW5zcGVjdG9yOjpQcm90
b2NvbDo6QXV0b21hdGlvbkhlbHBlcnM6OnBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0
b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpWaXJ0dWFsS2V5PihwcmVzc2VkVmlydHVhbEtleVN0
cmluZyk7CkBAIC0xOTM0LDMzICsxOTMyLDMyIEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246
OnBlcmZvcm1JbnRlcmFjdGlvblNlcXVlbmNlKGNvbnN0IFN0cmluZyYgaGFuZGxlLCBjb25zCiAg
ICAgICAgICAgICAgICAgc291cmNlU3RhdGUucHJlc3NlZFZpcnR1YWxLZXlzID0gcHJlc3NlZFZp
cnR1YWxLZXlzOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBTdHJpbmcgcHJlc3NlZEJ1
dHRvblN0cmluZzsKLSAgICAgICAgICAgIGlmIChzdGF0ZU9iamVjdC0+Z2V0U3RyaW5nKCJwcmVz
c2VkQnV0dG9uIl9zLCBwcmVzc2VkQnV0dG9uU3RyaW5nKSkgeworICAgICAgICAgICAgYXV0byBw
cmVzc2VkQnV0dG9uU3RyaW5nID0gc3RhdGVPYmplY3QtPmdldFN0cmluZygicHJlc3NlZEJ1dHRv
biJfcyk7CisgICAgICAgICAgICBpZiAoISFwcmVzc2VkQnV0dG9uU3RyaW5nKSB7CiAgICAgICAg
ICAgICAgICAgYXV0byBwcm90b2NvbEJ1dHRvbiA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9t
YXRpb25IZWxwZXJzOjpwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6QXV0b21hdGlvbjo6TW91c2VCdXR0b24+KHByZXNzZWRCdXR0b25TdHJpbmcpOwogICAgICAg
ICAgICAgICAgIHNvdXJjZVN0YXRlLnByZXNzZWRNb3VzZUJ1dHRvbiA9IHByb3RvY29sQnV0dG9u
LnZhbHVlT3IoTW91c2VCdXR0b246Ok5vbmUpOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAg
ICBTdHJpbmcgb3JpZ2luU3RyaW5nOwotICAgICAgICAgICAgaWYgKHN0YXRlT2JqZWN0LT5nZXRT
dHJpbmcoIm9yaWdpbiJfcywgb3JpZ2luU3RyaW5nKSkKKyAgICAgICAgICAgIGF1dG8gb3JpZ2lu
U3RyaW5nID0gc3RhdGVPYmplY3QtPmdldFN0cmluZygib3JpZ2luIl9zKTsKKyAgICAgICAgICAg
IGlmICghIW9yaWdpblN0cmluZykKICAgICAgICAgICAgICAgICBzb3VyY2VTdGF0ZS5vcmlnaW4g
PSBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uSGVscGVyczo6cGFyc2VFbnVtVmFsdWVG
cm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246Ok1vdXNlTW92ZU9yaWdp
bj4ob3JpZ2luU3RyaW5nKTsKIAogICAgICAgICAgICAgaWYgKHNvdXJjZVN0YXRlLm9yaWdpbiAm
JiBzb3VyY2VTdGF0ZS5vcmlnaW4udmFsdWUoKSA9PSBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRv
bWF0aW9uOjpNb3VzZU1vdmVPcmlnaW46OkVsZW1lbnQpIHsKLSAgICAgICAgICAgICAgICBTdHJp
bmcgbm9kZUhhbmRsZVN0cmluZzsKLSAgICAgICAgICAgICAgICBpZiAoIXN0YXRlT2JqZWN0LT5n
ZXRTdHJpbmcoIm5vZGVIYW5kbGUiX3MsIG5vZGVIYW5kbGVTdHJpbmcpKQorICAgICAgICAgICAg
ICAgIGF1dG8gbm9kZUhhbmRsZVN0cmluZyA9IHN0YXRlT2JqZWN0LT5nZXRTdHJpbmcoIm5vZGVI
YW5kbGUiX3MpOworICAgICAgICAgICAgICAgIGlmICghbm9kZUhhbmRsZVN0cmluZykKICAgICAg
ICAgICAgICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJ
TFMoSW52YWxpZFBhcmFtZXRlciwgIk5vZGUgaGFuZGxlIG5vdCBwcm92aWRlZCBmb3IgJ0VsZW1l
bnQnIG9yaWdpbiIpOwogICAgICAgICAgICAgICAgIHNvdXJjZVN0YXRlLm5vZGVIYW5kbGUgPSBu
b2RlSGFuZGxlU3RyaW5nOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBSZWZQdHI8SlNP
Tjo6T2JqZWN0PiBsb2NhdGlvbk9iamVjdDsKLSAgICAgICAgICAgIGlmIChzdGF0ZU9iamVjdC0+
Z2V0T2JqZWN0KCJsb2NhdGlvbiJfcywgbG9jYXRpb25PYmplY3QpKSB7Ci0gICAgICAgICAgICAg
ICAgaW50IHggPSAwLCB5ID0gMDsKLSAgICAgICAgICAgICAgICBpZiAobG9jYXRpb25PYmplY3Qt
PmdldEludGVnZXIoIngiX3MsIHgpICYmIGxvY2F0aW9uT2JqZWN0LT5nZXRJbnRlZ2VyKCJ5Il9z
LCB5KSkKLSAgICAgICAgICAgICAgICAgICAgc291cmNlU3RhdGUubG9jYXRpb24gPSBXZWJDb3Jl
OjpJbnRQb2ludCh4LCB5KTsKKyAgICAgICAgICAgIGlmIChhdXRvIGxvY2F0aW9uT2JqZWN0ID0g
c3RhdGVPYmplY3QtPmdldE9iamVjdCgibG9jYXRpb24iX3MpKSB7CisgICAgICAgICAgICAgICAg
YXV0byB4ID0gbG9jYXRpb25PYmplY3QtPmdldEludGVnZXIoIngiX3MpOworICAgICAgICAgICAg
ICAgIGF1dG8geSA9IGxvY2F0aW9uT2JqZWN0LT5nZXRJbnRlZ2VyKCJ5Il9zKTsKKyAgICAgICAg
ICAgICAgICBpZiAoeCAmJiB5KQorICAgICAgICAgICAgICAgICAgICBzb3VyY2VTdGF0ZS5sb2Nh
dGlvbiA9IFdlYkNvcmU6OkludFBvaW50KCp4LCAqeSk7CiAgICAgICAgICAgICB9CiAKLSAgICAg
ICAgICAgIGludCBwYXJzZWREdXJhdGlvbjsKLSAgICAgICAgICAgIGlmIChzdGF0ZU9iamVjdC0+
Z2V0SW50ZWdlcigiZHVyYXRpb24iX3MsIHBhcnNlZER1cmF0aW9uKSkKLSAgICAgICAgICAgICAg
ICBzb3VyY2VTdGF0ZS5kdXJhdGlvbiA9IFNlY29uZHM6OmZyb21NaWxsaXNlY29uZHMocGFyc2Vk
RHVyYXRpb24pOworICAgICAgICAgICAgaWYgKGF1dG8gZHVyYXRpb24gPSBzdGF0ZU9iamVjdC0+
Z2V0SW50ZWdlcigiZHVyYXRpb24iX3MpKQorICAgICAgICAgICAgICAgIHNvdXJjZVN0YXRlLmR1
cmF0aW9uID0gU2Vjb25kczo6ZnJvbU1pbGxpc2Vjb25kcygqZHVyYXRpb24pOwogCiAgICAgICAg
ICAgICBlbnRyaWVzLnVuY2hlY2tlZEFwcGVuZChzdGQ6OnBhaXI8U2ltdWxhdGVkSW5wdXRTb3Vy
Y2UmLCBTaW11bGF0ZWRJbnB1dFNvdXJjZVN0YXRlPiB7IGlucHV0U291cmNlLCBzb3VyY2VTdGF0
ZSB9KTsKICAgICAgICAgfQpAQCAtMTk4NCw3ICsxOTgxLDcgQEAgdm9pZCBXZWJBdXRvbWF0aW9u
U2Vzc2lvbjo6cGVyZm9ybUludGVyYWN0aW9uU2VxdWVuY2UoY29uc3QgU3RyaW5nJiBoYW5kbGUs
IGNvbnMKICNlbmRpZiAvLyBFTkFCTEUoV0VCRFJJVkVSX0FDVElPTlNfQVBJKQogfQogCi12b2lk
IFdlYkF1dG9tYXRpb25TZXNzaW9uOjpjYW5jZWxJbnRlcmFjdGlvblNlcXVlbmNlKGNvbnN0IFN0
cmluZyYgaGFuZGxlLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsRnJhbWVIYW5kbGUsIFJlZjxDYW5j
ZWxJbnRlcmFjdGlvblNlcXVlbmNlQ2FsbGJhY2s+JiYgY2FsbGJhY2spCit2b2lkIFdlYkF1dG9t
YXRpb25TZXNzaW9uOjpjYW5jZWxJbnRlcmFjdGlvblNlcXVlbmNlKGNvbnN0IEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYgaGFuZGxlLCBjb25z
dCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpGcmFtZUhhbmRsZSYgZnJhbWVIYW5k
bGUsIFJlZjxDYW5jZWxJbnRlcmFjdGlvblNlcXVlbmNlQ2FsbGJhY2s+JiYgY2FsbGJhY2spCiB7
CiAgICAgLy8gVGhpcyBjb21tYW5kIGltcGxlbWVudHMgV2ViS2l0IHN1cHBvcnQgZm9yIMKnMTcu
NiBSZWxlYXNlIEFjdGlvbnMuCiAKQEAgLTE5OTYsNyArMTk5Myw3IEBAIHZvaWQgV2ViQXV0b21h
dGlvblNlc3Npb246OmNhbmNlbEludGVyYWN0aW9uU2VxdWVuY2UoY29uc3QgU3RyaW5nJiBoYW5k
bGUsIGNvbnN0CiAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SKFdpbmRv
d05vdEZvdW5kKTsKIAogICAgIGJvb2wgZnJhbWVOb3RGb3VuZCA9IGZhbHNlOwotICAgIGF1dG8g
ZnJhbWVJRCA9IHdlYkZyYW1lSURGb3JIYW5kbGUob3B0aW9uYWxGcmFtZUhhbmRsZSA/ICpvcHRp
b25hbEZyYW1lSGFuZGxlIDogZW1wdHlTdHJpbmcoKSwgZnJhbWVOb3RGb3VuZCk7CisgICAgYXV0
byBmcmFtZUlEID0gd2ViRnJhbWVJREZvckhhbmRsZShmcmFtZUhhbmRsZSwgZnJhbWVOb3RGb3Vu
ZCk7CiAgICAgaWYgKGZyYW1lTm90Rm91bmQpCiAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVE
RUZJTkVEX0VSUk9SKEZyYW1lTm90Rm91bmQpOwogCkBAIC0yMDEzLDE5ICsyMDEwLDE4IEBAIHZv
aWQgV2ViQXV0b21hdGlvblNlc3Npb246OmNhbmNlbEludGVyYWN0aW9uU2VxdWVuY2UoY29uc3Qg
U3RyaW5nJiBoYW5kbGUsIGNvbnN0CiAjZW5kaWYgLy8gRU5BQkxFKFdFQkRSSVZFUl9BQ1RJT05T
X0FQSSkKIH0KIAotdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6dGFrZVNjcmVlbnNob3QoY29u
c3QgU3RyaW5nJiBoYW5kbGUsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxGcmFtZUhhbmRsZSwgY29u
c3QgU3RyaW5nKiBvcHRpb25hbE5vZGVIYW5kbGUsIGNvbnN0IGJvb2wqIG9wdGlvbmFsU2Nyb2xs
SW50b1ZpZXdJZk5lZWRlZCwgY29uc3QgYm9vbCogb3B0aW9uYWxDbGlwVG9WaWV3cG9ydCwgUmVm
PFRha2VTY3JlZW5zaG90Q2FsbGJhY2s+JiYgY2FsbGJhY2spCit2b2lkIFdlYkF1dG9tYXRpb25T
ZXNzaW9uOjp0YWtlU2NyZWVuc2hvdChjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0
aW9uOjpCcm93c2luZ0NvbnRleHRIYW5kbGUmIGhhbmRsZSwgY29uc3QgSW5zcGVjdG9yOjpQcm90
b2NvbDo6QXV0b21hdGlvbjo6RnJhbWVIYW5kbGUmIGZyYW1lSGFuZGxlLCBjb25zdCBJbnNwZWN0
b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpOb2RlSGFuZGxlJiBub2RlSGFuZGxlLCBPcHRpb25h
bDxib29sPiYmIG9wdGlvbmFsU2Nyb2xsSW50b1ZpZXdJZk5lZWRlZCwgT3B0aW9uYWw8Ym9vbD4m
JiBvcHRpb25hbENsaXBUb1ZpZXdwb3J0LCBSZWY8VGFrZVNjcmVlbnNob3RDYWxsYmFjaz4mJiBj
YWxsYmFjaykKIHsKICAgICBXZWJQYWdlUHJveHkqIHBhZ2UgPSB3ZWJQYWdlUHJveHlGb3JIYW5k
bGUoaGFuZGxlKTsKICAgICBpZiAoIXBhZ2UpCiAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVE
RUZJTkVEX0VSUk9SKFdpbmRvd05vdEZvdW5kKTsKIAogICAgIGJvb2wgZnJhbWVOb3RGb3VuZCA9
IGZhbHNlOwotICAgIGF1dG8gZnJhbWVJRCA9IHdlYkZyYW1lSURGb3JIYW5kbGUob3B0aW9uYWxG
cmFtZUhhbmRsZSA/ICpvcHRpb25hbEZyYW1lSGFuZGxlIDogZW1wdHlTdHJpbmcoKSwgZnJhbWVO
b3RGb3VuZCk7CisgICAgYXV0byBmcmFtZUlEID0gd2ViRnJhbWVJREZvckhhbmRsZShmcmFtZUhh
bmRsZSwgZnJhbWVOb3RGb3VuZCk7CiAgICAgaWYgKGZyYW1lTm90Rm91bmQpCiAgICAgICAgIEFT
WU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SKEZyYW1lTm90Rm91bmQpOwogCiAgICAgYm9v
bCBzY3JvbGxJbnRvVmlld0lmTmVlZGVkID0gb3B0aW9uYWxTY3JvbGxJbnRvVmlld0lmTmVlZGVk
ID8gKm9wdGlvbmFsU2Nyb2xsSW50b1ZpZXdJZk5lZWRlZCA6IGZhbHNlOwotICAgIFN0cmluZyBu
b2RlSGFuZGxlID0gb3B0aW9uYWxOb2RlSGFuZGxlID8gKm9wdGlvbmFsTm9kZUhhbmRsZSA6IGVt
cHR5U3RyaW5nKCk7CiAgICAgYm9vbCBjbGlwVG9WaWV3cG9ydCA9IG9wdGlvbmFsQ2xpcFRvVmll
d3BvcnQgPyAqb3B0aW9uYWxDbGlwVG9WaWV3cG9ydCA6IGZhbHNlOwogCiAjaWYgUExBVEZPUk0o
R1RLKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9XZWJB
dXRvbWF0aW9uU2Vzc2lvbi5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9X
ZWJBdXRvbWF0aW9uU2Vzc2lvbi5oCmluZGV4IDM2Mjc2NjAzOTVjYjVmNDRlNzdhOWY4NjFkNDJl
OTcxZGJhMWJiZmMuLjhkOTA4OTJhNGIxMzQyNjRhNGU4NWJlNGY2NWRmYTIwZmMwMTNhMmUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlv
blNlc3Npb24uaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1
dG9tYXRpb25TZXNzaW9uLmgKQEAgLTEzNSwxMCArMTM1LDEwIEBAIHB1YmxpYzoKIAogI2lmIEVO
QUJMRShSRU1PVEVfSU5TUEVDVE9SKQogICAgIC8vIEluc3BlY3Rvcjo6UmVtb3RlQXV0b21hdGlv
blRhcmdldCBBUEkKLSAgICBTdHJpbmcgbmFtZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1f
c2Vzc2lvbklkZW50aWZpZXI7IH0KLSAgICB2b2lkIGRpc3BhdGNoTWVzc2FnZUZyb21SZW1vdGUo
Y29uc3QgU3RyaW5nJiBtZXNzYWdlKSBvdmVycmlkZTsKLSAgICB2b2lkIGNvbm5lY3QoSW5zcGVj
dG9yOjpGcm9udGVuZENoYW5uZWwmLCBib29sIGlzQXV0b21hdGljQ29ubmVjdGlvbiA9IGZhbHNl
LCBib29sIGltbWVkaWF0ZWx5UGF1c2UgPSBmYWxzZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkaXNj
b25uZWN0KEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsJikgb3ZlcnJpZGU7CisgICAgU3RyaW5n
IG5hbWUoKSBjb25zdCB7IHJldHVybiBtX3Nlc3Npb25JZGVudGlmaWVyOyB9CisgICAgdm9pZCBk
aXNwYXRjaE1lc3NhZ2VGcm9tUmVtb3RlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7CisgICAgdm9p
ZCBjb25uZWN0KEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsJiwgYm9vbCBpc0F1dG9tYXRpY0Nv
bm5lY3Rpb24gPSBmYWxzZSwgYm9vbCBpbW1lZGlhdGVseVBhdXNlID0gZmFsc2UpOworICAgIHZv
aWQgZGlzY29ubmVjdChJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbCYpOwogI2VuZGlmCiAgICAg
dm9pZCB0ZXJtaW5hdGUoKTsKIApAQCAtMTQ2LDE1ICsxNDYsMTUgQEAgcHVibGljOgogCiAgICAg
Ly8gU2ltdWxhdGVkSW5wdXREaXNwYXRjaGVyOjpDbGllbnQgQVBJCiAjaWYgRU5BQkxFKFdFQkRS
SVZFUl9NT1VTRV9JTlRFUkFDVElPTlMpCi0gICAgdm9pZCBzaW11bGF0ZU1vdXNlSW50ZXJhY3Rp
b24oV2ViUGFnZVByb3h5JiwgTW91c2VJbnRlcmFjdGlvbiwgTW91c2VCdXR0b24sIGNvbnN0IFdl
YkNvcmU6OkludFBvaW50JiBsb2NhdGlvbkluVmlldywgQXV0b21hdGlvbkNvbXBsZXRpb25IYW5k
bGVyJiYpIGZpbmFsOworICAgIHZvaWQgc2ltdWxhdGVNb3VzZUludGVyYWN0aW9uKFdlYlBhZ2VQ
cm94eSYsIE1vdXNlSW50ZXJhY3Rpb24sIE1vdXNlQnV0dG9uLCBjb25zdCBXZWJDb3JlOjpJbnRQ
b2ludCYgbG9jYXRpb25JblZpZXcsIEF1dG9tYXRpb25Db21wbGV0aW9uSGFuZGxlciYmKTsKICNl
bmRpZgogI2lmIEVOQUJMRShXRUJEUklWRVJfVE9VQ0hfSU5URVJBQ1RJT05TKQotICAgIHZvaWQg
c2ltdWxhdGVUb3VjaEludGVyYWN0aW9uKFdlYlBhZ2VQcm94eSYsIFRvdWNoSW50ZXJhY3Rpb24s
IGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBsb2NhdGlvbkluVmlldywgT3B0aW9uYWw8U2Vjb25k
cz4gZHVyYXRpb24sIEF1dG9tYXRpb25Db21wbGV0aW9uSGFuZGxlciYmKSBmaW5hbDsKKyAgICB2
b2lkIHNpbXVsYXRlVG91Y2hJbnRlcmFjdGlvbihXZWJQYWdlUHJveHkmLCBUb3VjaEludGVyYWN0
aW9uLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgbG9jYXRpb25JblZpZXcsIE9wdGlvbmFsPFNl
Y29uZHM+IGR1cmF0aW9uLCBBdXRvbWF0aW9uQ29tcGxldGlvbkhhbmRsZXImJik7CiAjZW5kaWYK
ICNpZiBFTkFCTEUoV0VCRFJJVkVSX0tFWUJPQVJEX0lOVEVSQUNUSU9OUykKLSAgICB2b2lkIHNp
bXVsYXRlS2V5Ym9hcmRJbnRlcmFjdGlvbihXZWJQYWdlUHJveHkmLCBLZXlib2FyZEludGVyYWN0
aW9uLCBXVEY6OlZhcmlhbnQ8VmlydHVhbEtleSwgQ2hhcktleT4mJiwgQXV0b21hdGlvbkNvbXBs
ZXRpb25IYW5kbGVyJiYpIGZpbmFsOworICAgIHZvaWQgc2ltdWxhdGVLZXlib2FyZEludGVyYWN0
aW9uKFdlYlBhZ2VQcm94eSYsIEtleWJvYXJkSW50ZXJhY3Rpb24sIFdURjo6VmFyaWFudDxWaXJ0
dWFsS2V5LCBDaGFyS2V5PiYmLCBBdXRvbWF0aW9uQ29tcGxldGlvbkhhbmRsZXImJik7CiAjZW5k
aWYKLSAgICB2b2lkIHZpZXdwb3J0SW5WaWV3Q2VudGVyUG9pbnRPZkVsZW1lbnQoV2ViUGFnZVBy
b3h5JiwgT3B0aW9uYWw8V2ViQ29yZTo6RnJhbWVJZGVudGlmaWVyPiwgY29uc3QgU3RyaW5nJiBu
b2RlSGFuZGxlLCBGdW5jdGlvbjx2b2lkIChPcHRpb25hbDxXZWJDb3JlOjpJbnRQb2ludD4sIE9w
dGlvbmFsPEF1dG9tYXRpb25Db21tYW5kRXJyb3I+KT4mJikgZmluYWw7CisgICAgdm9pZCB2aWV3
cG9ydEluVmlld0NlbnRlclBvaW50T2ZFbGVtZW50KFdlYlBhZ2VQcm94eSYsIE9wdGlvbmFsPFdl
YkNvcmU6OkZyYW1lSWRlbnRpZmllcj4sIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9t
YXRpb246Ok5vZGVIYW5kbGUmLCBGdW5jdGlvbjx2b2lkKE9wdGlvbmFsPFdlYkNvcmU6OkludFBv
aW50PiwgT3B0aW9uYWw8QXV0b21hdGlvbkNvbW1hbmRFcnJvcj4pPiYmKTsKIAogI2VuZGlmIC8v
IEVOQUJMRShXRUJEUklWRVJfQUNUSU9OU19BUEkpCiAKQEAgLTE2Myw0NSArMTYzLDQ1IEBAIHB1
YmxpYzoKICAgICAvLyBhbmQgdGhlIC0tcGxhdGZvcm0gYXJndW1lbnQgcGFzc2VkIHRvIHRoZSBw
cm90b2NvbCBiaW5kaW5ncyBnZW5lcmF0b3IuCiAKICAgICAvLyBQbGF0Zm9ybTogR2VuZXJpYwot
ICAgIHZvaWQgZ2V0QnJvd3NpbmdDb250ZXh0cyhSZWY8R2V0QnJvd3NpbmdDb250ZXh0c0NhbGxi
YWNrPiYmKSBmaW5hbDsKLSAgICB2b2lkIGdldEJyb3dzaW5nQ29udGV4dChjb25zdCBTdHJpbmcm
LCBSZWY8R2V0QnJvd3NpbmdDb250ZXh0Q2FsbGJhY2s+JiYpIGZpbmFsOwotICAgIHZvaWQgY3Jl
YXRlQnJvd3NpbmdDb250ZXh0KGNvbnN0IFN0cmluZyogb3B0aW9uYWxQcmVzZW50YXRpb25IaW50
LCBSZWY8Q3JlYXRlQnJvd3NpbmdDb250ZXh0Q2FsbGJhY2s+JiYpIGZpbmFsOwotICAgIHZvaWQg
Y2xvc2VCcm93c2luZ0NvbnRleHQoSW5zcGVjdG9yOjpFcnJvclN0cmluZyYsIGNvbnN0IFN0cmlu
ZyYpIGZpbmFsOwotICAgIHZvaWQgc3dpdGNoVG9Ccm93c2luZ0NvbnRleHQoY29uc3QgU3RyaW5n
JiBicm93c2luZ0NvbnRleHRIYW5kbGUsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxGcmFtZUhhbmRs
ZSwgUmVmPFN3aXRjaFRvQnJvd3NpbmdDb250ZXh0Q2FsbGJhY2s+JiYpIGZpbmFsOwotICAgIHZv
aWQgc2V0V2luZG93RnJhbWVPZkJyb3dzaW5nQ29udGV4dChjb25zdCBTdHJpbmcmIGhhbmRsZSwg
Y29uc3QgSlNPTjo6T2JqZWN0KiBvcmlnaW4sIGNvbnN0IEpTT046Ok9iamVjdCogc2l6ZSwgUmVm
PFNldFdpbmRvd0ZyYW1lT2ZCcm93c2luZ0NvbnRleHRDYWxsYmFjaz4mJikgZmluYWw7Ci0gICAg
dm9pZCBtYXhpbWl6ZVdpbmRvd09mQnJvd3NpbmdDb250ZXh0KGNvbnN0IFN0cmluZyYgaGFuZGxl
LCBSZWY8TWF4aW1pemVXaW5kb3dPZkJyb3dzaW5nQ29udGV4dENhbGxiYWNrPiYmKSBmaW5hbDsK
LSAgICB2b2lkIGhpZGVXaW5kb3dPZkJyb3dzaW5nQ29udGV4dChjb25zdCBTdHJpbmcmIGhhbmRs
ZSwgUmVmPEhpZGVXaW5kb3dPZkJyb3dzaW5nQ29udGV4dENhbGxiYWNrPiYmKSBmaW5hbDsKLSAg
ICB2b2lkIG5hdmlnYXRlQnJvd3NpbmdDb250ZXh0KGNvbnN0IFN0cmluZyYgaGFuZGxlLCBjb25z
dCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nKiBvcHRpb25hbFBhZ2VMb2FkU3RyYXRlZ3lTdHJp
bmcsIGNvbnN0IGRvdWJsZSogb3B0aW9uYWxQYWdlTG9hZFRpbWVvdXQsIFJlZjxOYXZpZ2F0ZUJy
b3dzaW5nQ29udGV4dENhbGxiYWNrPiYmKSBvdmVycmlkZTsKLSAgICB2b2lkIGdvQmFja0luQnJv
d3NpbmdDb250ZXh0KGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxQYWdlTG9h
ZFN0cmF0ZWd5U3RyaW5nLCBjb25zdCBkb3VibGUqIG9wdGlvbmFsUGFnZUxvYWRUaW1lb3V0LCBS
ZWY8R29CYWNrSW5Ccm93c2luZ0NvbnRleHRDYWxsYmFjaz4mJikgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBnb0ZvcndhcmRJbkJyb3dzaW5nQ29udGV4dChjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcq
IG9wdGlvbmFsUGFnZUxvYWRTdHJhdGVneVN0cmluZywgY29uc3QgZG91YmxlKiBvcHRpb25hbFBh
Z2VMb2FkVGltZW91dCwgUmVmPEdvRm9yd2FyZEluQnJvd3NpbmdDb250ZXh0Q2FsbGJhY2s+JiYp
IG92ZXJyaWRlOwotICAgIHZvaWQgcmVsb2FkQnJvd3NpbmdDb250ZXh0KGNvbnN0IFN0cmluZyYs
IGNvbnN0IFN0cmluZyogb3B0aW9uYWxQYWdlTG9hZFN0cmF0ZWd5U3RyaW5nLCBjb25zdCBkb3Vi
bGUqIG9wdGlvbmFsUGFnZUxvYWRUaW1lb3V0LCBSZWY8UmVsb2FkQnJvd3NpbmdDb250ZXh0Q2Fs
bGJhY2s+JiYpIG92ZXJyaWRlOwotICAgIHZvaWQgd2FpdEZvck5hdmlnYXRpb25Ub0NvbXBsZXRl
KGNvbnN0IFN0cmluZyYgYnJvd3NpbmdDb250ZXh0SGFuZGxlLCBjb25zdCBTdHJpbmcqIG9wdGlv
bmFsRnJhbWVIYW5kbGUsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxQYWdlTG9hZFN0cmF0ZWd5U3Ry
aW5nLCBjb25zdCBkb3VibGUqIG9wdGlvbmFsUGFnZUxvYWRUaW1lb3V0LCBSZWY8V2FpdEZvck5h
dmlnYXRpb25Ub0NvbXBsZXRlQ2FsbGJhY2s+JiYpIG92ZXJyaWRlOwotICAgIHZvaWQgZXZhbHVh
dGVKYXZhU2NyaXB0RnVuY3Rpb24oY29uc3QgU3RyaW5nJiBicm93c2luZ0NvbnRleHRIYW5kbGUs
IGNvbnN0IFN0cmluZyogb3B0aW9uYWxGcmFtZUhhbmRsZSwgY29uc3QgU3RyaW5nJiBmdW5jdGlv
biwgY29uc3QgSlNPTjo6QXJyYXkmIGFyZ3VtZW50cywgY29uc3QgYm9vbCogb3B0aW9uYWxFeHBl
Y3RzSW1wbGljaXRDYWxsYmFja0FyZ3VtZW50LCBjb25zdCBkb3VibGUqIG9wdGlvbmFsQ2FsbGJh
Y2tUaW1lb3V0LCBSZWY8SW5zcGVjdG9yOjpBdXRvbWF0aW9uQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyOjpFdmFsdWF0ZUphdmFTY3JpcHRGdW5jdGlvbkNhbGxiYWNrPiYmKSBvdmVycmlkZTsKLSAg
ICB2b2lkIHBlcmZvcm1Nb3VzZUludGVyYWN0aW9uKGNvbnN0IFN0cmluZyYgaGFuZGxlLCBjb25z
dCBKU09OOjpPYmplY3QmIHJlcXVlc3RlZFBvc2l0aW9uLCBjb25zdCBTdHJpbmcmIG1vdXNlQnV0
dG9uLCBjb25zdCBTdHJpbmcmIG1vdXNlSW50ZXJhY3Rpb24sIGNvbnN0IEpTT046OkFycmF5JiBr
ZXlNb2RpZmllcnMsIFJlZjxQZXJmb3JtTW91c2VJbnRlcmFjdGlvbkNhbGxiYWNrPiYmKSBmaW5h
bDsKLSAgICB2b2lkIHBlcmZvcm1LZXlib2FyZEludGVyYWN0aW9ucyhjb25zdCBTdHJpbmcmIGhh
bmRsZSwgY29uc3QgSlNPTjo6QXJyYXkmIGludGVyYWN0aW9ucywgUmVmPFBlcmZvcm1LZXlib2Fy
ZEludGVyYWN0aW9uc0NhbGxiYWNrPiYmKSBvdmVycmlkZTsKLSAgICB2b2lkIHBlcmZvcm1JbnRl
cmFjdGlvblNlcXVlbmNlKGNvbnN0IFN0cmluZyYgaGFuZGxlLCBjb25zdCBTdHJpbmcqIG9wdGlv
bmFsRnJhbWVIYW5kbGUsIGNvbnN0IEpTT046OkFycmF5JiBzb3VyY2VzLCBjb25zdCBKU09OOjpB
cnJheSYgc3RlcHMsIFJlZjxQZXJmb3JtSW50ZXJhY3Rpb25TZXF1ZW5jZUNhbGxiYWNrPiYmKSBv
dmVycmlkZTsKLSAgICB2b2lkIGNhbmNlbEludGVyYWN0aW9uU2VxdWVuY2UoY29uc3QgU3RyaW5n
JiBoYW5kbGUsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxGcmFtZUhhbmRsZSwgUmVmPENhbmNlbElu
dGVyYWN0aW9uU2VxdWVuY2VDYWxsYmFjaz4mJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCB0YWtlU2Ny
ZWVuc2hvdChjb25zdCBTdHJpbmcmIGhhbmRsZSwgY29uc3QgU3RyaW5nKiBvcHRpb25hbEZyYW1l
SGFuZGxlLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsTm9kZUhhbmRsZSwgY29uc3QgYm9vbCogb3B0
aW9uYWxTY3JvbGxJbnRvVmlld0lmTmVlZGVkLCBjb25zdCBib29sKiBvcHRpb25hbENsaXBUb1Zp
ZXdwb3J0LCBSZWY8VGFrZVNjcmVlbnNob3RDYWxsYmFjaz4mJikgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCByZXNvbHZlQ2hpbGRGcmFtZUhhbmRsZShjb25zdCBTdHJpbmcmIGJyb3dzaW5nQ29udGV4dEhh
bmRsZSwgY29uc3QgU3RyaW5nKiBvcHRpb25hbEZyYW1lSGFuZGxlLCBjb25zdCBpbnQqIG9wdGlv
bmFsT3JkaW5hbCwgY29uc3QgU3RyaW5nKiBvcHRpb25hbE5hbWUsIGNvbnN0IFN0cmluZyogb3B0
aW9uYWxOb2RlSGFuZGxlLCBSZWY8UmVzb2x2ZUNoaWxkRnJhbWVIYW5kbGVDYWxsYmFjaz4mJikg
b3ZlcnJpZGU7Ci0gICAgdm9pZCByZXNvbHZlUGFyZW50RnJhbWVIYW5kbGUoY29uc3QgU3RyaW5n
JiBicm93c2luZ0NvbnRleHRIYW5kbGUsIGNvbnN0IFN0cmluZyYgZnJhbWVIYW5kbGUsIFJlZjxS
ZXNvbHZlUGFyZW50RnJhbWVIYW5kbGVDYWxsYmFjaz4mJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBj
b21wdXRlRWxlbWVudExheW91dChjb25zdCBTdHJpbmcmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSwg
Y29uc3QgU3RyaW5nJiBmcmFtZUhhbmRsZSwgY29uc3QgU3RyaW5nJiBub2RlSGFuZGxlLCBjb25z
dCBib29sKiBvcHRpb25hbFNjcm9sbEludG9WaWV3SWZOZWVkZWQsIGNvbnN0IFN0cmluZyYgY29v
cmRpbmF0ZVN5c3RlbSwgUmVmPEluc3BlY3Rvcjo6QXV0b21hdGlvbkJhY2tlbmREaXNwYXRjaGVy
SGFuZGxlcjo6Q29tcHV0ZUVsZW1lbnRMYXlvdXRDYWxsYmFjaz4mJikgb3ZlcnJpZGU7Ci0gICAg
dm9pZCBzZWxlY3RPcHRpb25FbGVtZW50KGNvbnN0IFN0cmluZyYgYnJvd3NpbmdDb250ZXh0SGFu
ZGxlLCBjb25zdCBTdHJpbmcmIGZyYW1lSGFuZGxlLCBjb25zdCBTdHJpbmcmIG5vZGVIYW5kbGUs
IFJlZjxJbnNwZWN0b3I6OkF1dG9tYXRpb25CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlNlbGVj
dE9wdGlvbkVsZW1lbnRDYWxsYmFjaz4mJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBpc1Nob3dpbmdK
YXZhU2NyaXB0RGlhbG9nKEluc3BlY3Rvcjo6RXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGJy
b3dzaW5nQ29udGV4dEhhbmRsZSwgYm9vbCogcmVzdWx0KSBvdmVycmlkZTsKLSAgICB2b2lkIGRp
c21pc3NDdXJyZW50SmF2YVNjcmlwdERpYWxvZyhJbnNwZWN0b3I6OkVycm9yU3RyaW5nJiwgY29u
c3QgU3RyaW5nJiBicm93c2luZ0NvbnRleHRIYW5kbGUpIG92ZXJyaWRlOwotICAgIHZvaWQgYWNj
ZXB0Q3VycmVudEphdmFTY3JpcHREaWFsb2coSW5zcGVjdG9yOjpFcnJvclN0cmluZyYsIGNvbnN0
IFN0cmluZyYgYnJvd3NpbmdDb250ZXh0SGFuZGxlKSBvdmVycmlkZTsKLSAgICB2b2lkIG1lc3Nh
Z2VPZkN1cnJlbnRKYXZhU2NyaXB0RGlhbG9nKEluc3BlY3Rvcjo6RXJyb3JTdHJpbmcmLCBjb25z
dCBTdHJpbmcmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSwgU3RyaW5nKiB0ZXh0KSBvdmVycmlkZTsK
LSAgICB2b2lkIHNldFVzZXJJbnB1dEZvckN1cnJlbnRKYXZhU2NyaXB0UHJvbXB0KEluc3BlY3Rv
cjo6RXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSwgY29u
c3QgU3RyaW5nJiB0ZXh0KSBvdmVycmlkZTsKLSAgICB2b2lkIHNldEZpbGVzVG9TZWxlY3RGb3JG
aWxlVXBsb2FkKEluc3BlY3Rvcjo6RXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGJyb3dzaW5n
Q29udGV4dEhhbmRsZSwgY29uc3QgSlNPTjo6QXJyYXkmIGZpbGVuYW1lcywgY29uc3QgSlNPTjo6
QXJyYXkqIG9wdGlvbmFsRmlsZUNvbnRlbnRzKSBvdmVycmlkZTsKLSAgICB2b2lkIHNldEZpbGVz
Rm9ySW5wdXRGaWxlVXBsb2FkKGNvbnN0IFN0cmluZyYgYnJvd3NpbmdDb250ZXh0SGFuZGxlLCBj
b25zdCBTdHJpbmcmIGZyYW1lSGFuZGxlLCBjb25zdCBTdHJpbmcmIG5vZGVIYW5kbGUsIGNvbnN0
IEpTT046OkFycmF5JiBmaWxlbmFtZXMsIFJlZjxTZXRGaWxlc0ZvcklucHV0RmlsZVVwbG9hZENh
bGxiYWNrPiYmKSBvdmVycmlkZTsKLSAgICB2b2lkIGdldEFsbENvb2tpZXMoY29uc3QgU3RyaW5n
JiBicm93c2luZ0NvbnRleHRIYW5kbGUsIFJlZjxHZXRBbGxDb29raWVzQ2FsbGJhY2s+JiYpIG92
ZXJyaWRlOwotICAgIHZvaWQgZGVsZXRlU2luZ2xlQ29va2llKGNvbnN0IFN0cmluZyYgYnJvd3Np
bmdDb250ZXh0SGFuZGxlLCBjb25zdCBTdHJpbmcmIGNvb2tpZU5hbWUsIFJlZjxEZWxldGVTaW5n
bGVDb29raWVDYWxsYmFjaz4mJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBhZGRTaW5nbGVDb29raWUo
Y29uc3QgU3RyaW5nJiBicm93c2luZ0NvbnRleHRIYW5kbGUsIGNvbnN0IEpTT046Ok9iamVjdCYg
Y29va2llLCBSZWY8QWRkU2luZ2xlQ29va2llQ2FsbGJhY2s+JiYpIG92ZXJyaWRlOwotICAgIHZv
aWQgZGVsZXRlQWxsQ29va2llcyhJbnNwZWN0b3I6OkVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5n
JiBicm93c2luZ0NvbnRleHRIYW5kbGUpIG92ZXJyaWRlOwotICAgIHZvaWQgZ2V0U2Vzc2lvblBl
cm1pc3Npb25zKEluc3BlY3Rvcjo6RXJyb3JTdHJpbmcmLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpTZXNzaW9uUGVybWlzc2lvbkRhdGE+PiYg
b3V0X3Blcm1pc3Npb25zKSBvdmVycmlkZTsKLSAgICB2b2lkIHNldFNlc3Npb25QZXJtaXNzaW9u
cyhJbnNwZWN0b3I6OkVycm9yU3RyaW5nJiwgY29uc3QgSlNPTjo6QXJyYXkmIGluX3Blcm1pc3Np
b25zKSBvdmVycmlkZTsKKyAgICB2b2lkIGdldEJyb3dzaW5nQ29udGV4dHMoUmVmPEdldEJyb3dz
aW5nQ29udGV4dHNDYWxsYmFjaz4mJik7CisgICAgdm9pZCBnZXRCcm93c2luZ0NvbnRleHQoY29u
c3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxl
JiwgUmVmPEdldEJyb3dzaW5nQ29udGV4dENhbGxiYWNrPiYmKTsKKyAgICB2b2lkIGNyZWF0ZUJy
b3dzaW5nQ29udGV4dChPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpC
cm93c2luZ0NvbnRleHRQcmVzZW50YXRpb24+JiYsIFJlZjxDcmVhdGVCcm93c2luZ0NvbnRleHRD
YWxsYmFjaz4mJik7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lk
PiBjbG9zZUJyb3dzaW5nQ29udGV4dChjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0
aW9uOjpCcm93c2luZ0NvbnRleHRIYW5kbGUmKTsKKyAgICB2b2lkIHN3aXRjaFRvQnJvd3NpbmdD
b250ZXh0KGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29u
dGV4dEhhbmRsZSYsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkZyYW1l
SGFuZGxlJiwgUmVmPFN3aXRjaFRvQnJvd3NpbmdDb250ZXh0Q2FsbGJhY2s+JiYpOworICAgIHZv
aWQgc2V0V2luZG93RnJhbWVPZkJyb3dzaW5nQ29udGV4dChjb25zdCBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRIYW5kbGUmLCBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiYmIG9yaWdpbiwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBzaXplLCBSZWY8U2V0V2luZG93
RnJhbWVPZkJyb3dzaW5nQ29udGV4dENhbGxiYWNrPiYmKTsKKyAgICB2b2lkIG1heGltaXplV2lu
ZG93T2ZCcm93c2luZ0NvbnRleHQoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlv
bjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJiwgUmVmPE1heGltaXplV2luZG93T2ZCcm93c2luZ0Nv
bnRleHRDYWxsYmFjaz4mJik7CisgICAgdm9pZCBoaWRlV2luZG93T2ZCcm93c2luZ0NvbnRleHQo
Y29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFu
ZGxlJiwgUmVmPEhpZGVXaW5kb3dPZkJyb3dzaW5nQ29udGV4dENhbGxiYWNrPiYmKTsKKyAgICB2
b2lkIG5hdmlnYXRlQnJvd3NpbmdDb250ZXh0KGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1
dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYsIGNvbnN0IFN0cmluZyYgdXJsLCBPcHRp
b25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpQYWdlTG9hZFN0cmF0ZWd5PiYm
LCBPcHRpb25hbDxkb3VibGU+JiYgcGFnZUxvYWRUaW1lb3V0LCBSZWY8TmF2aWdhdGVCcm93c2lu
Z0NvbnRleHRDYWxsYmFjaz4mJik7CisgICAgdm9pZCBnb0JhY2tJbkJyb3dzaW5nQ29udGV4dChj
b25zdCBTdHJpbmcmLCBPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpQ
YWdlTG9hZFN0cmF0ZWd5PiYmLCBPcHRpb25hbDxkb3VibGU+JiYgcGFnZUxvYWRUaW1lb3V0LCBS
ZWY8R29CYWNrSW5Ccm93c2luZ0NvbnRleHRDYWxsYmFjaz4mJik7CisgICAgdm9pZCBnb0Zvcndh
cmRJbkJyb3dzaW5nQ29udGV4dChjb25zdCBTdHJpbmcmLCBPcHRpb25hbDxJbnNwZWN0b3I6OlBy
b3RvY29sOjpBdXRvbWF0aW9uOjpQYWdlTG9hZFN0cmF0ZWd5PiYmLCBPcHRpb25hbDxkb3VibGU+
JiYgcGFnZUxvYWRUaW1lb3V0LCBSZWY8R29Gb3J3YXJkSW5Ccm93c2luZ0NvbnRleHRDYWxsYmFj
az4mJik7CisgICAgdm9pZCByZWxvYWRCcm93c2luZ0NvbnRleHQoY29uc3QgU3RyaW5nJiwgT3B0
aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6UGFnZUxvYWRTdHJhdGVneT4m
JiwgT3B0aW9uYWw8ZG91YmxlPiYmIHBhZ2VMb2FkVGltZW91dCwgUmVmPFJlbG9hZEJyb3dzaW5n
Q29udGV4dENhbGxiYWNrPiYmKTsKKyAgICB2b2lkIHdhaXRGb3JOYXZpZ2F0aW9uVG9Db21wbGV0
ZShjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRI
YW5kbGUmLCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpGcmFtZUhhbmRs
ZSYsIE9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OlBhZ2VMb2FkU3Ry
YXRlZ3k+JiYsIE9wdGlvbmFsPGRvdWJsZT4mJiBwYWdlTG9hZFRpbWVvdXQsIFJlZjxXYWl0Rm9y
TmF2aWdhdGlvblRvQ29tcGxldGVDYWxsYmFjaz4mJik7CisgICAgdm9pZCBldmFsdWF0ZUphdmFT
Y3JpcHRGdW5jdGlvbihjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93
c2luZ0NvbnRleHRIYW5kbGUmLCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9u
OjpGcmFtZUhhbmRsZSYsIGNvbnN0IFN0cmluZyYgZnVuY3Rpb24sIFJlZjxKU09OOjpBcnJheT4m
JiBhcmd1bWVudHMsIE9wdGlvbmFsPGJvb2w+JiYgZXhwZWN0c0ltcGxpY2l0Q2FsbGJhY2tBcmd1
bWVudCwgT3B0aW9uYWw8ZG91YmxlPiYmIGNhbGxiYWNrVGltZW91dCwgUmVmPEV2YWx1YXRlSmF2
YVNjcmlwdEZ1bmN0aW9uQ2FsbGJhY2s+JiYpOworICAgIHZvaWQgcGVyZm9ybU1vdXNlSW50ZXJh
Y3Rpb24oY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250
ZXh0SGFuZGxlJiwgUmVmPEpTT046Ok9iamVjdD4mJiByZXF1ZXN0ZWRQb3NpdGlvbiwgSW5zcGVj
dG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6TW91c2VCdXR0b24sIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkF1dG9tYXRpb246Ok1vdXNlSW50ZXJhY3Rpb24sIFJlZjxKU09OOjpBcnJheT4mJiBrZXlN
b2RpZmllcnMsIFJlZjxQZXJmb3JtTW91c2VJbnRlcmFjdGlvbkNhbGxiYWNrPiYmKTsKKyAgICB2
b2lkIHBlcmZvcm1LZXlib2FyZEludGVyYWN0aW9ucyhjb25zdCBJbnNwZWN0b3I6OlByb3RvY29s
OjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRIYW5kbGUmLCBSZWY8SlNPTjo6QXJyYXk+JiYg
aW50ZXJhY3Rpb25zLCBSZWY8UGVyZm9ybUtleWJvYXJkSW50ZXJhY3Rpb25zQ2FsbGJhY2s+JiYp
OworICAgIHZvaWQgcGVyZm9ybUludGVyYWN0aW9uU2VxdWVuY2UoY29uc3QgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJiwgY29uc3QgSW5zcGVj
dG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6RnJhbWVIYW5kbGUmLCBSZWY8SlNPTjo6QXJyYXk+
JiYgc291cmNlcywgUmVmPEpTT046OkFycmF5PiYmIHN0ZXBzLCBSZWY8UGVyZm9ybUludGVyYWN0
aW9uU2VxdWVuY2VDYWxsYmFjaz4mJik7CisgICAgdm9pZCBjYW5jZWxJbnRlcmFjdGlvblNlcXVl
bmNlKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4
dEhhbmRsZSYsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkZyYW1lSGFu
ZGxlJiwgUmVmPENhbmNlbEludGVyYWN0aW9uU2VxdWVuY2VDYWxsYmFjaz4mJik7CisgICAgdm9p
ZCB0YWtlU2NyZWVuc2hvdChjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpC
cm93c2luZ0NvbnRleHRIYW5kbGUmLCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0
aW9uOjpGcmFtZUhhbmRsZSYsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246
Ok5vZGVIYW5kbGUmLCBPcHRpb25hbDxib29sPiYmIHNjcm9sbEludG9WaWV3SWZOZWVkZWQsIE9w
dGlvbmFsPGJvb2w+JiYgY2xpcFRvVmlld3BvcnQsIFJlZjxUYWtlU2NyZWVuc2hvdENhbGxiYWNr
PiYmKTsKKyAgICB2b2lkIHJlc29sdmVDaGlsZEZyYW1lSGFuZGxlKGNvbnN0IEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYsIGNvbnN0IEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkZyYW1lSGFuZGxlJiwgT3B0aW9uYWw8aW50PiYm
IG9yZGluYWwsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6
QXV0b21hdGlvbjo6Tm9kZUhhbmRsZSYsIFJlZjxSZXNvbHZlQ2hpbGRGcmFtZUhhbmRsZUNhbGxi
YWNrPiYmKTsKKyAgICB2b2lkIHJlc29sdmVQYXJlbnRGcmFtZUhhbmRsZShjb25zdCBJbnNwZWN0
b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRIYW5kbGUmLCBjb25zdCBJ
bnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpGcmFtZUhhbmRsZSYsIFJlZjxSZXNvbHZl
UGFyZW50RnJhbWVIYW5kbGVDYWxsYmFjaz4mJik7CisgICAgdm9pZCBjb21wdXRlRWxlbWVudExh
eW91dChjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRl
eHRIYW5kbGUmLCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpGcmFtZUhh
bmRsZSYsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246Ok5vZGVIYW5kbGUm
LCBPcHRpb25hbDxib29sPiYmIHNjcm9sbEludG9WaWV3SWZOZWVkZWQsIEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkF1dG9tYXRpb246OkNvb3JkaW5hdGVTeXN0ZW0sIFJlZjxDb21wdXRlRWxlbWVudExh
eW91dENhbGxiYWNrPiYmKTsKKyAgICB2b2lkIHNlbGVjdE9wdGlvbkVsZW1lbnQoY29uc3QgSW5z
cGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJiwgY29u
c3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6RnJhbWVIYW5kbGUmLCBjb25zdCBJ
bnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpOb2RlSGFuZGxlJiwgUmVmPFNlbGVjdE9w
dGlvbkVsZW1lbnRDYWxsYmFjaz4mJik7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JT
dHJpbmdPcjxib29sPiBpc1Nob3dpbmdKYXZhU2NyaXB0RGlhbG9nKGNvbnN0IEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYpOworICAgIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZGlzbWlzc0N1cnJlbnRKYXZhU2Ny
aXB0RGlhbG9nKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5n
Q29udGV4dEhhbmRsZSYpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8
dm9pZD4gYWNjZXB0Q3VycmVudEphdmFTY3JpcHREaWFsb2coY29uc3QgSW5zcGVjdG9yOjpQcm90
b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJik7CisgICAgSW5zcGVjdG9y
OjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxTdHJpbmc+IG1lc3NhZ2VPZkN1cnJlbnRKYXZhU2Ny
aXB0RGlhbG9nKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5n
Q29udGV4dEhhbmRsZSYpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8
dm9pZD4gc2V0VXNlcklucHV0Rm9yQ3VycmVudEphdmFTY3JpcHRQcm9tcHQoY29uc3QgSW5zcGVj
dG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJiwgY29uc3Qg
U3RyaW5nJiB0ZXh0KTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZv
aWQ+IHNldEZpbGVzVG9TZWxlY3RGb3JGaWxlVXBsb2FkKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYsIFJlZjxKU09OOjpBcnJheT4m
JiBmaWxlbmFtZXMsIFJlZlB0cjxKU09OOjpBcnJheT4mJiBmaWxlQ29udGVudHMpOworICAgIHZv
aWQgc2V0RmlsZXNGb3JJbnB1dEZpbGVVcGxvYWQoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6
QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJiwgY29uc3QgSW5zcGVjdG9yOjpQcm90
b2NvbDo6QXV0b21hdGlvbjo6RnJhbWVIYW5kbGUmLCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29s
OjpBdXRvbWF0aW9uOjpOb2RlSGFuZGxlJiwgUmVmPEpTT046OkFycmF5PiYmIGZpbGVuYW1lcywg
UmVmPFNldEZpbGVzRm9ySW5wdXRGaWxlVXBsb2FkQ2FsbGJhY2s+JiYpOworICAgIHZvaWQgZ2V0
QWxsQ29va2llcyhjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2lu
Z0NvbnRleHRIYW5kbGUmLCBSZWY8R2V0QWxsQ29va2llc0NhbGxiYWNrPiYmKTsKKyAgICB2b2lk
IGRlbGV0ZVNpbmdsZUNvb2tpZShjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9u
OjpCcm93c2luZ0NvbnRleHRIYW5kbGUmLCBjb25zdCBTdHJpbmcmIGNvb2tpZU5hbWUsIFJlZjxE
ZWxldGVTaW5nbGVDb29raWVDYWxsYmFjaz4mJik7CisgICAgdm9pZCBhZGRTaW5nbGVDb29raWUo
Y29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFu
ZGxlJiwgUmVmPEpTT046Ok9iamVjdD4mJiBjb29raWUsIFJlZjxBZGRTaW5nbGVDb29raWVDYWxs
YmFjaz4mJik7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBk
ZWxldGVBbGxDb29raWVzKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJy
b3dzaW5nQ29udGV4dEhhbmRsZSYpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3Ry
aW5nT3I8UmVmPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6
U2Vzc2lvblBlcm1pc3Npb25EYXRhPj4+IGdldFNlc3Npb25QZXJtaXNzaW9ucygpOworICAgIElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc2V0U2Vzc2lvblBlcm1pc3Np
b25zKFJlZjxKU09OOjpBcnJheT4mJik7CiAKICNpZiBQTEFURk9STShNQUMpCi0gICAgdm9pZCBp
bnNwZWN0QnJvd3NpbmdDb250ZXh0KGNvbnN0IFN0cmluZyYsIGNvbnN0IGJvb2wqIG9wdGlvbmFs
RW5hYmxlQXV0b0NhcHR1cmluZywgUmVmPEluc3BlY3RCcm93c2luZ0NvbnRleHRDYWxsYmFjaz4m
Jikgb3ZlcnJpZGU7CisgICAgdm9pZCBpbnNwZWN0QnJvd3NpbmdDb250ZXh0KGNvbnN0IEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYsIE9wdGlv
bmFsPGJvb2w+JiYgZW5hYmxlQXV0b0NhcHR1cmluZywgUmVmPEluc3BlY3RCcm93c2luZ0NvbnRl
eHRDYWxsYmFjaz4mJik7CiAjZW5kaWYKIAogICAgIC8vIEV2ZW50IFNpbXVsYXRpb24gU3VwcG9y
dC4KQEAgLTIzOCw3ICsyMzgsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgaGlkZVdpbmRvd0ZvclBh
Z2UoV2ViUGFnZVByb3h5JiwgV1RGOjpDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogCiAg
ICAgLy8gSVBDOjpNZXNzYWdlUmVjZWl2ZXIgKEltcGxlbWVudGVkIGJ5IGdlbmVyYXRlZCBjb2Rl
IGluIFdlYkF1dG9tYXRpb25TZXNzaW9uTWVzc2FnZVJlY2VpdmVyLmNwcCkuCi0gICAgdm9pZCBk
aWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKSBvdmVycmlk
ZTsKKyAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVj
b2RlciYpOwogCiAgICAgLy8gQ2FsbGVkIGJ5IFdlYkF1dG9tYXRpb25TZXNzaW9uIG1lc3NhZ2Vz
LgogICAgIHZvaWQgZGlkRXZhbHVhdGVKYXZhU2NyaXB0RnVuY3Rpb24odWludDY0X3QgY2FsbGJh
Y2tJRCwgY29uc3QgU3RyaW5nJiByZXN1bHQsIGNvbnN0IFN0cmluZyYgZXJyb3JUeXBlKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlv
blNlc3Npb25NYWNyb3MuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vV2Vi
QXV0b21hdGlvblNlc3Npb25NYWNyb3MuaAppbmRleCA5M2FmNWFiYzcwOGJkNTk4ZjBmNDBiY2My
OTQ4NTJhMzcwNTI5N2FlLi40ZDM2ZDY0ZmQ0MGY0M2YzZTc4MWQ1ZTU5NWEzYmU4NGNjZWVkNjUz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9t
YXRpb25TZXNzaW9uTWFjcm9zLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21h
dGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbk1hY3Jvcy5oCkBAIC00NCwxNCArNDQsMTIgQEAKIC8v
IENvbnZlbmllbmNlIG1hY3JvcyBmb3IgZmlsbGluZyBpbiB0aGUgZXJyb3Igc3RyaW5nIG9mIHN5
bmNocm9ub3VzIGNvbW1hbmRzIGluIGJhaWxvdXQgYnJhbmNoZXMuCiAjZGVmaW5lIFNZTkNfRkFJ
TF9XSVRIX1BSRURFRklORURfRVJST1IoZXJyb3JOYW1lKSBcCiBkbyB7IFwKLSAgICBlcnJvclN0
cmluZyA9IFNUUklOR19GT1JfUFJFREVGSU5FRF9FUlJPUl9OQU1FKGVycm9yTmFtZSk7IFwKLSAg
ICByZXR1cm47IFwKKyAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoU1RSSU5HX0ZPUl9QUkVERUZJ
TkVEX0VSUk9SX05BTUUoZXJyb3JOYW1lKSk7IFwKIH0gd2hpbGUgKGZhbHNlKQogCiAjZGVmaW5l
IFNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoZXJyb3JOYW1lLCBk
ZXRhaWxzU3RyaW5nKSBcCiBkbyB7IFwKLSAgICBlcnJvclN0cmluZyA9IFNUUklOR19GT1JfUFJF
REVGSU5FRF9FUlJPUl9OQU1FX0FORF9ERVRBSUxTKGVycm9yTmFtZSwgZGV0YWlsc1N0cmluZyk7
IFwKLSAgICByZXR1cm47IFwKKyAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoU1RSSU5HX0ZPUl9Q
UkVERUZJTkVEX0VSUk9SX05BTUVfQU5EX0RFVEFJTFMoZXJyb3JOYW1lLCBkZXRhaWxzU3RyaW5n
KSk7IFwKIH0gd2hpbGUgKGZhbHNlKQogCiAjZGVmaW5lIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJ
TkVEX0VSUk9SKGVycm9yTmFtZSkgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQXV0b21hdGlvbi9tYWMvV2ViQXV0b21hdGlvblNlc3Npb25NYWMubW0gYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL21hYy9XZWJBdXRvbWF0aW9uU2Vzc2lvbk1hYy5tbQpp
bmRleCAzY2FlY2MzMzdkMDk5Nzk1MzRlN2ZjYmY1ZTFlMTBiZDgzNWY3NmNkLi45ZGJmMmUwNzg3
YWE5OTcwNmM2ZjI5MDc1NGE5MTM5MGFiZjFmNzBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL21hYy9XZWJBdXRvbWF0aW9uU2Vzc2lvbk1hYy5tbQorKysg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL21hYy9XZWJBdXRvbWF0aW9uU2Vz
c2lvbk1hYy5tbQpAQCAtNDQsNyArNDQsNyBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAog
I3ByYWdtYSBtYXJrIENvbW1hbmRzIGZvciAnUExBVEZPUk0oTUFDKScKIAotdm9pZCBXZWJBdXRv
bWF0aW9uU2Vzc2lvbjo6aW5zcGVjdEJyb3dzaW5nQ29udGV4dChjb25zdCBTdHJpbmcmIGhhbmRs
ZSwgY29uc3QgYm9vbCogb3B0aW9uYWxFbmFibGVBdXRvQ2FwdHVyaW5nLCBSZWY8SW5zcGVjdEJy
b3dzaW5nQ29udGV4dENhbGxiYWNrPiYmIGNhbGxiYWNrKQordm9pZCBXZWJBdXRvbWF0aW9uU2Vz
c2lvbjo6aW5zcGVjdEJyb3dzaW5nQ29udGV4dChjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpB
dXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRIYW5kbGUmIGhhbmRsZSwgT3B0aW9uYWw8Ym9vbD4m
JiBlbmFibGVBdXRvQ2FwdHVyaW5nLCBSZWY8SW5zcGVjdEJyb3dzaW5nQ29udGV4dENhbGxiYWNr
PiYmIGNhbGxiYWNrKQogewogICAgIFdlYlBhZ2VQcm94eSogcGFnZSA9IHdlYlBhZ2VQcm94eUZv
ckhhbmRsZShoYW5kbGUpOwogICAgIGlmICghcGFnZSkKQEAgLTYwLDcgKzYwLDcgQEAgdm9pZCBX
ZWJBdXRvbWF0aW9uU2Vzc2lvbjo6aW5zcGVjdEJyb3dzaW5nQ29udGV4dChjb25zdCBTdHJpbmcm
IGhhbmRsZSwgY29uc3QgYm8KICAgICAgICAgcGFnZS0+aW5zcGVjdG9yKCktPnNob3coKTsKIAog
ICAgICAgICAvLyBTdGFydCBjb2xsZWN0aW5nIHByb2ZpbGUgaW5mb3JtYXRpb24gaW1tZWRpYXRl
bHkgc28gdGhlIGVudGlyZSBzZXNzaW9uIGlzIGNhcHR1cmVkLgotICAgICAgICBpZiAob3B0aW9u
YWxFbmFibGVBdXRvQ2FwdHVyaW5nICYmICpvcHRpb25hbEVuYWJsZUF1dG9DYXB0dXJpbmcpCisg
ICAgICAgIGlmIChlbmFibGVBdXRvQ2FwdHVyaW5nICYmICplbmFibGVBdXRvQ2FwdHVyaW5nKQog
ICAgICAgICAgICAgcGFnZS0+aW5zcGVjdG9yKCktPnRvZ2dsZVBhZ2VQcm9maWxpbmcoKTsKICAg
ICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvQWdl
bnRzL0luc3BlY3RvckJyb3dzZXJBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9J
bnNwZWN0b3IvQWdlbnRzL0luc3BlY3RvckJyb3dzZXJBZ2VudC5jcHAKaW5kZXggYzFmZmE2Y2Y2
MTQ2NjZlNGM4YjVlYzViNDNjYzY0ZjgwNzBlNjU5OS4uZGY0YTEwYTQwZjhiMDJmYzVkNzUwOWU5
NmM1OTRlYmJjNWFjOWYxNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5z
cGVjdG9yL0FnZW50cy9JbnNwZWN0b3JCcm93c2VyQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0luc3BlY3Rvci9BZ2VudHMvSW5zcGVjdG9yQnJvd3NlckFnZW50LmNwcApA
QCAtNjAsMzUgKzYwLDM0IEBAIHZvaWQgSW5zcGVjdG9yQnJvd3NlckFnZW50OjpkaWRDcmVhdGVG
cm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9udGVuZFJvdXRlCiAKIHZvaWQgSW5zcGVj
dG9yQnJvd3NlckFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6
OkRpc2Nvbm5lY3RSZWFzb24pCiB7Ci0gICAgRXJyb3JTdHJpbmcgaWdub3JlZDsKLSAgICBkaXNh
YmxlKGlnbm9yZWQpOworICAgIGRpc2FibGUoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JCcm93c2Vy
QWdlbnQ6OmVuYWJsZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCitJbnNwZWN0b3I6OlByb3Rv
Y29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckJyb3dzZXJBZ2VudDo6ZW5hYmxlKCkK
IHsKLSAgICBpZiAoZW5hYmxlZCgpKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIkJyb3dzZXIg
ZG9tYWluIGFscmVhZHkgZW5hYmxlZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBp
ZiAoZW5hYmxlZCgpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkJyb3dzZXIgZG9t
YWluIGFscmVhZHkgZW5hYmxlZCJfcyk7CiAKICAgICBtX2luc3BlY3RlZFBhZ2UuaW5zcGVjdG9y
Q29udHJvbGxlcigpLnNldEVuYWJsZWRCcm93c2VyQWdlbnQodGhpcyk7CiAKICAgICBhdXRvKiBp
bnNwZWN0b3IgPSBtX2luc3BlY3RlZFBhZ2UuaW5zcGVjdG9yKCk7CiAgICAgQVNTRVJUKGluc3Bl
Y3Rvcik7CiAgICAgbV9pbnNwZWN0ZWRQYWdlLmluc3BlY3RvckNsaWVudCgpLmJyb3dzZXJEb21h
aW5FbmFibGVkKG1faW5zcGVjdGVkUGFnZSwgKmluc3BlY3Rvcik7CisKKyAgICByZXR1cm4geyB9
OwogfQogCi12b2lkIEluc3BlY3RvckJyb3dzZXJBZ2VudDo6ZGlzYWJsZShFcnJvclN0cmluZyYg
ZXJyb3JTdHJpbmcpCitJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IElu
c3BlY3RvckJyb3dzZXJBZ2VudDo6ZGlzYWJsZSgpCiB7Ci0gICAgaWYgKCFlbmFibGVkKCkpIHsK
LSAgICAgICAgZXJyb3JTdHJpbmcgPSAiQnJvd3NlciBkb21haW4gYWxyZWFkeSBkaXNhYmxlZCJf
czsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoIWVuYWJsZWQoKSkKKyAgICAgICAg
cmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJCcm93c2VyIGRvbWFpbiBhbHJlYWR5IGRpc2FibGVkIl9z
KTsKIAogICAgIG1faW5zcGVjdGVkUGFnZS5pbnNwZWN0b3JDb250cm9sbGVyKCkuc2V0RW5hYmxl
ZEJyb3dzZXJBZ2VudChudWxscHRyKTsKIAogICAgIGlmIChhdXRvKiBpbnNwZWN0b3IgPSBtX2lu
c3BlY3RlZFBhZ2UuaW5zcGVjdG9yKCkpCiAgICAgICAgIG1faW5zcGVjdGVkUGFnZS5pbnNwZWN0
b3JDbGllbnQoKS5icm93c2VyRG9tYWluRGlzYWJsZWQobV9pbnNwZWN0ZWRQYWdlLCAqaW5zcGVj
dG9yKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKIHZvaWQgSW5zcGVjdG9yQnJvd3NlckFnZW50
OjpleHRlbnNpb25zRW5hYmxlZChIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYmIGV4dGVuc2lvbklE
VG9OYW1lKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL0Fn
ZW50cy9JbnNwZWN0b3JCcm93c2VyQWdlbnQuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0lu
c3BlY3Rvci9BZ2VudHMvSW5zcGVjdG9yQnJvd3NlckFnZW50LmgKaW5kZXggYTEzOTU4M2NkOGQ4
NDIzMjlmNGIzZjM1MjFiMzYyNDBlYWI1MzkxMS4uMzMxYmZhYmI1NTc0NGVlOThhN2ZmMGY3ZGE3
Njk1MzFhYzRjNzI3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVj
dG9yL0FnZW50cy9JbnNwZWN0b3JCcm93c2VyQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9JbnNwZWN0b3IvQWdlbnRzL0luc3BlY3RvckJyb3dzZXJBZ2VudC5oCkBAIC0zMywy
MyArMzMsMjIgQEAKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBjbGFzcyBXZWJQYWdlUHJveHk7Ci10
eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKIAogY2xhc3MgSW5zcGVjdG9yQnJvd3NlckFnZW50
IGZpbmFsIDogcHVibGljIEluc3BlY3RvckFnZW50QmFzZSwgcHVibGljIEluc3BlY3Rvcjo6QnJv
d3NlckJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
SW5zcGVjdG9yQnJvd3NlckFnZW50KTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1
YmxpYzoKICAgICBJbnNwZWN0b3JCcm93c2VyQWdlbnQoV2ViUGFnZUFnZW50Q29udGV4dCYpOwot
ICAgIH5JbnNwZWN0b3JCcm93c2VyQWdlbnQoKSBvdmVycmlkZTsKKyAgICB+SW5zcGVjdG9yQnJv
d3NlckFnZW50KCk7CiAgICAgYm9vbCBlbmFibGVkKCkgY29uc3Q7CiAKICAgICAvLyBJbnNwZWN0
b3JBZ2VudEJhc2UKLSAgICB2b2lkIGRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0
b3I6OkZyb250ZW5kUm91dGVyKiwgSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlciopIG92ZXJy
aWRlOwotICAgIHZvaWQgd2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpE
aXNjb25uZWN0UmVhc29uKSBvdmVycmlkZTsKKyAgICB2b2lkIGRpZENyZWF0ZUZyb250ZW5kQW5k
QmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kUm91dGVyKiwgSW5zcGVjdG9yOjpCYWNrZW5kRGlz
cGF0Y2hlciopOworICAgIHZvaWQgd2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVj
dG9yOjpEaXNjb25uZWN0UmVhc29uKTsKIAogICAgIC8vIEJyb3dzZXJCYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXIKLSAgICB2b2lkIGVuYWJsZShFcnJvclN0cmluZyYpIG92ZXJyaWRlOwotICAgIHZv
aWQgZGlzYWJsZShFcnJvclN0cmluZyYpIG92ZXJyaWRlOworICAgIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZW5hYmxlKCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBkaXNhYmxlKCk7CiAKICAgICB2b2lkIGV4dGVuc2lvbnNF
bmFibGVkKEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+JiYpOwogICAgIHZvaWQgZXh0ZW5zaW9uc0Rp
c2FibGVkKEhhc2hTZXQ8U3RyaW5nPiYmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0luc3BlY3Rvci9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmNwcCBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yQ2xpZW50
LmNwcAppbmRleCBmYmVlNWNkZmYzOGIzYzc3OWEyNjI3MzhjNDE5NTE1YjQ0NThiOWRkLi41ZjUx
N2YxMGE0ODc3MGQ5Y2I4OWNmODhmOWQ2MDM3OGJiZDUyYWQ0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3Ivc29ja2V0L1JlbW90ZUluc3BlY3RvckNsaWVudC5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL3NvY2tldC9SZW1vdGVJ
bnNwZWN0b3JDbGllbnQuY3BwCkBAIC0yMDYsMjUgKzIwNiwzOCBAQCB2b2lkIFJlbW90ZUluc3Bl
Y3RvckNsaWVudDo6c2V0VGFyZ2V0TGlzdChjb25zdCBFdmVudCYgZXZlbnQpCiAgICAgaWYgKCFl
dmVudC5jb25uZWN0aW9uSUQgfHwgIWV2ZW50Lm1lc3NhZ2UpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gbWVzc2FnZVZhbHVlOwotICAgIGlmICghSlNPTjo6VmFs
dWU6OnBhcnNlSlNPTihldmVudC5tZXNzYWdlLnZhbHVlKCksIG1lc3NhZ2VWYWx1ZSkpCisgICAg
YXV0byBtZXNzYWdlVmFsdWUgPSBKU09OOjpWYWx1ZTo6cGFyc2VKU09OKGV2ZW50Lm1lc3NhZ2Uu
dmFsdWUoKSk7CisgICAgaWYgKCFtZXNzYWdlVmFsdWUpCiAgICAgICAgIHJldHVybjsKIAotICAg
IFJlZlB0cjxKU09OOjpBcnJheT4gbWVzc2FnZUFycmF5OwotICAgIGlmICghbWVzc2FnZVZhbHVl
LT5hc0FycmF5KG1lc3NhZ2VBcnJheSkpCisgICAgYXV0byBtZXNzYWdlQXJyYXkgPSBtZXNzYWdl
VmFsdWUtPmFzQXJyYXkoKTsKKyAgICBpZiAoIW1lc3NhZ2VBcnJheSkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgVmVjdG9yPFRhcmdldD4gdGFyZ2V0TGlzdDsKICAgICBmb3IgKGF1dG8mIGl0ZW1W
YWx1ZSA6ICptZXNzYWdlQXJyYXkpIHsKLSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gaXRl
bU9iamVjdDsKLSAgICAgICAgaWYgKCFpdGVtVmFsdWUtPmFzT2JqZWN0KGl0ZW1PYmplY3QpKQor
ICAgICAgICBhdXRvIGl0ZW1PYmplY3QgPSBpdGVtVmFsdWUtPmFzT2JqZWN0KCk7CisgICAgICAg
IGlmICghaXRlbU9iamVjdCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIFRhcmdl
dCB0YXJnZXQ7Ci0gICAgICAgIGlmICghaXRlbU9iamVjdC0+Z2V0SW50ZWdlcigidGFyZ2V0SUQi
X3MsIHRhcmdldC5pZCkKLSAgICAgICAgICAgIHx8ICFpdGVtT2JqZWN0LT5nZXRTdHJpbmcoIm5h
bWUiX3MsIHRhcmdldC5uYW1lKQotICAgICAgICAgICAgfHwgIWl0ZW1PYmplY3QtPmdldFN0cmlu
ZygidXJsIl9zLCB0YXJnZXQudXJsKQotICAgICAgICAgICAgfHwgIWl0ZW1PYmplY3QtPmdldFN0
cmluZygidHlwZSJfcywgdGFyZ2V0LnR5cGUpKQorCisgICAgICAgIGF1dG8gdGFyZ2V0SUQgPSBp
dGVtT2JqZWN0LT5nZXRJbnRlZ2VyKCJ0YXJnZXRJRCJfcyk7CisgICAgICAgIGlmICghdGFyZ2V0
SUQpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICB0YXJnZXQudGFyZ2V0SUQgPSAq
dGFyZ2V0SUQ7CisKKyAgICAgICAgdGFyZ2V0Lm5hbWUgPSBpdGVtT2JqZWN0LT5nZXRTdHJpbmco
Im5hbWUiX3MpOworICAgICAgICBpZiAoIXRhcmdldC5uYW1lKQorICAgICAgICAgICAgY29udGlu
dWU7CisKKyAgICAgICAgdGFyZ2V0LnVybCA9IGl0ZW1PYmplY3QtPmdldFN0cmluZygidXJsIl9z
KTsKKyAgICAgICAgaWYgKCF0YXJnZXQudXJsKQorICAgICAgICAgICAgY29udGludWU7CisKKyAg
ICAgICAgdGFyZ2V0LnR5cGUgPSBpdGVtT2JqZWN0LT5nZXRTdHJpbmcoInR5cGUiX3MpOworICAg
ICAgICBpZiAoIXRhcmdldC50eXBlKQogICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAg
dGFyZ2V0TGlzdC5hcHBlbmQoV1RGTW92ZSh0YXJnZXQpKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0No
YW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBlODhiOTgxYzg3YzliYTJhMWI4ODQyZDg2
OTMyYTdiNmUzZWE1MmUyLi5hY2NjY2RlYzZjOTMzM2VkY2ExYmQyMDM4NGEzYzNhZTJhZGZmNGZj
IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTIgQEAKKzIwMjAtMDktMDggIERldmluIFJvdXNzbyAgPGRyb3Vzc29AYXBwbGUuY29t
PgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IG1vZGVybml6ZSBnZW5lcmF0ZWQgYmFja2VuZCBw
cm90b2NvbCBjb2RlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMTYzMDIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0pTT05WYWx1ZS5jcHA6CisKIDIwMjAtMDkt
MDQgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAg
ICBNb3ZlIFBERiBoZWFkcy11cCBkaXNwbGF5IHRvIFVJIHByb2Nlc3Mgb24gbWFjT1MKZGlmZiAt
LWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0pTT05WYWx1ZS5jcHAgYi9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9KU09OVmFsdWUuY3BwCmluZGV4IDkxZWM0MWMzYjdk
NDE2MmQyM2VjNDVlNGRiMzYzN2E5M2NkY2JiNDUuLmMzODA2Mjc2NDRkZjY5MTY2NDAxNmZkYzZj
MTE0OTA4ZmE4ZjgyMTUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RG
L0pTT05WYWx1ZS5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvSlNPTlZh
bHVlLmNwcApAQCAtNDIsODIgKzQyLDY4IEBAIFRFU1QoSlNPTlZhbHVlLCBDb25zdHJ1Y3QpCiAg
ICAgewogICAgICAgICBSZWY8SlNPTjo6VmFsdWU+IHZhbHVlID0gSlNPTjo6VmFsdWU6OmNyZWF0
ZSh0cnVlKTsKICAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUtPnR5cGUoKSA9PSBKU09OOjpWYWx1
ZTo6VHlwZTo6Qm9vbGVhbik7Ci0gICAgICAgIGJvb2wgYm9vbGVhblZhbHVlOwotICAgICAgICBF
WFBFQ1RfVFJVRSh2YWx1ZS0+YXNCb29sZWFuKGJvb2xlYW5WYWx1ZSkpOwotICAgICAgICBFWFBF
Q1RfRVEoYm9vbGVhblZhbHVlLCB0cnVlKTsKKyAgICAgICAgYXV0byBib29sZWFuVmFsdWUgPSB2
YWx1ZS0+YXNCb29sZWFuKCk7CisgICAgICAgIEVYUEVDVF9UUlVFKGJvb2xlYW5WYWx1ZSk7Cisg
ICAgICAgIEVYUEVDVF9FUSgqYm9vbGVhblZhbHVlLCB0cnVlKTsKIAogICAgICAgICB2YWx1ZSA9
IEpTT046OlZhbHVlOjpjcmVhdGUoZmFsc2UpOwogICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+
dHlwZSgpID09IEpTT046OlZhbHVlOjpUeXBlOjpCb29sZWFuKTsKLSAgICAgICAgRVhQRUNUX1RS
VUUodmFsdWUtPmFzQm9vbGVhbihib29sZWFuVmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX0VRKGJv
b2xlYW5WYWx1ZSwgZmFsc2UpOworICAgICAgICBib29sZWFuVmFsdWUgPSB2YWx1ZS0+YXNCb29s
ZWFuKCk7CisgICAgICAgIEVYUEVDVF9UUlVFKGJvb2xlYW5WYWx1ZSk7CisgICAgICAgIEVYUEVD
VF9FUSgqYm9vbGVhblZhbHVlLCBmYWxzZSk7CiAgICAgfQogCiAgICAgewogICAgICAgICBSZWY8
SlNPTjo6VmFsdWU+IHZhbHVlID0gSlNPTjo6VmFsdWU6OmNyZWF0ZSgxKTsKICAgICAgICAgRVhQ
RUNUX1RSVUUodmFsdWUtPnR5cGUoKSA9PSBKU09OOjpWYWx1ZTo6VHlwZTo6SW50ZWdlcik7Ci0g
ICAgICAgIGludCBpbnRlZ2VyVmFsdWU7Ci0gICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlLT5hc0lu
dGVnZXIoaW50ZWdlclZhbHVlKSk7Ci0gICAgICAgIEVYUEVDVF9FUShpbnRlZ2VyVmFsdWUsIDEp
OworICAgICAgICBhdXRvIGludGVnZXJWYWx1ZSA9IHZhbHVlLT5hc0ludGVnZXIoKTsKKyAgICAg
ICAgRVhQRUNUX1RSVUUoaW50ZWdlclZhbHVlKTsKKyAgICAgICAgRVhQRUNUX0VRKCppbnRlZ2Vy
VmFsdWUsIDEpOwogCi0gICAgICAgIC8vIERvdWJsZXMgY2FuIGJlIGdldCBhcyBpbnRlZ2Vycywg
YnV0IG5vdCB0aGUgb3RoZXIgd2F5IGFyb3VuZC4KLSAgICAgICAgZmxvYXQgZmxvYXRWYWx1ZTsK
LSAgICAgICAgRVhQRUNUX0ZBTFNFKHZhbHVlLT5hc0RvdWJsZShmbG9hdFZhbHVlKSk7CisgICAg
ICAgIC8vIEludGVnZXJzIGNhbiBiZSBnZXQgYXMgZG91Ymxlcy4KKyAgICAgICAgYXV0byBkb3Vi
bGVWYWx1ZSA9IHZhbHVlLT5hc0RvdWJsZSgpOworICAgICAgICBFWFBFQ1RfVFJVRShkb3VibGVW
YWx1ZSk7CisgICAgICAgIEVYUEVDVF9FUSgqZG91YmxlVmFsdWUsIDEpOwogCiAgICAgICAgIHZh
bHVlID0gSlNPTjo6VmFsdWU6OmNyZWF0ZShzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgp
KTsKLSAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUtPmFzSW50ZWdlcihpbnRlZ2VyVmFsdWUpKTsK
LSAgICAgICAgRVhQRUNUX0VRKGludGVnZXJWYWx1ZSwgc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+
OjptYXgoKSk7Ci0gICAgICAgIHVuc2lnbmVkIHVuc2lnbmVkVmFsdWU7Ci0gICAgICAgIEVYUEVD
VF9UUlVFKHZhbHVlLT5hc0ludGVnZXIodW5zaWduZWRWYWx1ZSkpOwotICAgICAgICBsb25nIGxv
bmdWYWx1ZTsKLSAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUtPmFzSW50ZWdlcihsb25nVmFsdWUp
KTsKLSAgICAgICAgbG9uZyBsb25nIGxvbmdMb25nVmFsdWU7Ci0gICAgICAgIEVYUEVDVF9UUlVF
KHZhbHVlLT5hc0ludGVnZXIobG9uZ0xvbmdWYWx1ZSkpOwotICAgICAgICB1bnNpZ25lZCBsb25n
IHVuc2lnbmVkTG9uZ1ZhbHVlOwotICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+YXNJbnRlZ2Vy
KHVuc2lnbmVkTG9uZ1ZhbHVlKSk7Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyB1bnNpZ25l
ZExvbmdMb25nVmFsdWU7Ci0gICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlLT5hc0ludGVnZXIodW5z
aWduZWRMb25nTG9uZ1ZhbHVlKSk7CisgICAgICAgIGludGVnZXJWYWx1ZSA9IHZhbHVlLT5hc0lu
dGVnZXIoKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoaW50ZWdlclZhbHVlKTsKKyAgICAgICAgRVhQ
RUNUX0VRKCppbnRlZ2VyVmFsdWUsIHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpOwog
ICAgIH0KIAogICAgIHsKICAgICAgICAgUmVmPEpTT046OlZhbHVlPiB2YWx1ZSA9IEpTT046OlZh
bHVlOjpjcmVhdGUoMS41KTsKICAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUtPnR5cGUoKSA9PSBK
U09OOjpWYWx1ZTo6VHlwZTo6RG91YmxlKTsKLSAgICAgICAgZG91YmxlIGRvdWJsZVZhbHVlOwot
ICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+YXNEb3VibGUoZG91YmxlVmFsdWUpKTsKLSAgICAg
ICAgRVhQRUNUX0VRKGRvdWJsZVZhbHVlLCAxLjUpOwogCi0gICAgICAgIGZsb2F0IGZsb2F0VmFs
dWU7Ci0gICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlLT5hc0RvdWJsZShmbG9hdFZhbHVlKSk7Cisg
ICAgICAgIGF1dG8gZG91YmxlVmFsdWUgPSB2YWx1ZS0+YXNEb3VibGUoKTsKKyAgICAgICAgRVhQ
RUNUX1RSVUUoZG91YmxlVmFsdWUpOworICAgICAgICBFWFBFQ1RfRVEoKmRvdWJsZVZhbHVlLCAx
LjUpOwogCi0gICAgICAgIGludCBpbnRlZ2VyVmFsdWU7Ci0gICAgICAgIEVYUEVDVF9UUlVFKHZh
bHVlLT5hc0ludGVnZXIoaW50ZWdlclZhbHVlKSk7Ci0gICAgICAgIEVYUEVDVF9FUShpbnRlZ2Vy
VmFsdWUsIHN0YXRpY19jYXN0PGludD4oMS41KSk7Ci0KLSAgICAgICAgdW5zaWduZWQgdW5zaWdu
ZWRWYWx1ZTsKLSAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUtPmFzSW50ZWdlcih1bnNpZ25lZFZh
bHVlKSk7Ci0gICAgICAgIGxvbmcgbG9uZ1ZhbHVlOwotICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1
ZS0+YXNJbnRlZ2VyKGxvbmdWYWx1ZSkpOwotICAgICAgICBsb25nIGxvbmcgbG9uZ0xvbmdWYWx1
ZTsKLSAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUtPmFzSW50ZWdlcihsb25nTG9uZ1ZhbHVlKSk7
Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcgdW5zaWduZWRMb25nVmFsdWU7Ci0gICAgICAgIEVYUEVD
VF9UUlVFKHZhbHVlLT5hc0ludGVnZXIodW5zaWduZWRMb25nVmFsdWUpKTsKLSAgICAgICAgdW5z
aWduZWQgbG9uZyBsb25nIHVuc2lnbmVkTG9uZ0xvbmdWYWx1ZTsKLSAgICAgICAgRVhQRUNUX1RS
VUUodmFsdWUtPmFzSW50ZWdlcih1bnNpZ25lZExvbmdMb25nVmFsdWUpKTsKKyAgICAgICAgLy8g
RG91YmxlcyBjYW4gYmUgZ2V0IGFzIGludGVnZXJzLgorICAgICAgICBhdXRvIGludGVnZXJWYWx1
ZSA9IHZhbHVlLT5hc0ludGVnZXIoKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoaW50ZWdlclZhbHVl
KTsKKyAgICAgICAgRVhQRUNUX0VRKCppbnRlZ2VyVmFsdWUsIHN0YXRpY19jYXN0PGludD4oMS41
KSk7CiAgICAgfQogCiAgICAgewogICAgICAgICBSZWY8SlNPTjo6VmFsdWU+IHZhbHVlID0gSlNP
Tjo6VmFsdWU6OmNyZWF0ZSgid2Via2l0Iik7CiAgICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlLT50
eXBlKCkgPT0gSlNPTjo6VmFsdWU6OlR5cGU6OlN0cmluZyk7Ci0gICAgICAgIFN0cmluZyBzdHJp
bmdWYWx1ZTsKLSAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUtPmFzU3RyaW5nKHN0cmluZ1ZhbHVl
KSk7CisgICAgICAgIGF1dG8gc3RyaW5nVmFsdWUgPSB2YWx1ZS0+YXNTdHJpbmcoKTsKKyAgICAg
ICAgRVhQRUNUX1RSVUUoISFzdHJpbmdWYWx1ZSk7CiAgICAgICAgIEVYUEVDVF9FUShzdHJpbmdW
YWx1ZSwgIndlYmtpdCIpOwogCiAgICAgICAgIFN0cmluZyBudWxsU3RyaW5nOwogICAgICAgICB2
YWx1ZSA9IEpTT046OlZhbHVlOjpjcmVhdGUobnVsbFN0cmluZyk7Ci0gICAgICAgIEVYUEVDVF9U
UlVFKHZhbHVlLT5hc1N0cmluZyhzdHJpbmdWYWx1ZSkpOworICAgICAgICBFWFBFQ1RfVFJVRSh2
YWx1ZS0+dHlwZSgpID09IEpTT046OlZhbHVlOjpUeXBlOjpTdHJpbmcpOworICAgICAgICBzdHJp
bmdWYWx1ZSA9IHZhbHVlLT5hc1N0cmluZygpOworICAgICAgICBFWFBFQ1RfRkFMU0UoISFzdHJp
bmdWYWx1ZSk7CiAgICAgICAgIEVYUEVDVF9UUlVFKHN0cmluZ1ZhbHVlLmlzTnVsbCgpKTsKKyAg
ICAgICAgRVhQRUNUX1RSVUUoc3RyaW5nVmFsdWUuaXNFbXB0eSgpKTsKIAogICAgICAgICB2YWx1
ZSA9IEpTT046OlZhbHVlOjpjcmVhdGUoZW1wdHlTdHJpbmcoKSk7Ci0gICAgICAgIEVYUEVDVF9U
UlVFKHZhbHVlLT5hc1N0cmluZyhzdHJpbmdWYWx1ZSkpOworICAgICAgICBFWFBFQ1RfVFJVRSh2
YWx1ZS0+dHlwZSgpID09IEpTT046OlZhbHVlOjpUeXBlOjpTdHJpbmcpOworICAgICAgICBzdHJp
bmdWYWx1ZSA9IHZhbHVlLT5hc1N0cmluZygpOworICAgICAgICBFWFBFQ1RfVFJVRSghIXN0cmlu
Z1ZhbHVlKTsKICAgICAgICAgRVhQRUNUX0ZBTFNFKHN0cmluZ1ZhbHVlLmlzTnVsbCgpKTsKICAg
ICAgICAgRVhQRUNUX1RSVUUoc3RyaW5nVmFsdWUuaXNFbXB0eSgpKTsKICAgICB9CkBAIC0xMzEs
NyArMTE3LDcgQEAgVEVTVChKU09OVmFsdWUsIENvbnN0cnVjdCkKICAgICB7CiAgICAgICAgIFJl
ZjxKU09OOjpPYmplY3Q+IG9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAg
IEVYUEVDVF9UUlVFKG9iamVjdC0+dHlwZSgpID09IEpTT046OlZhbHVlOjpUeXBlOjpPYmplY3Qp
OwotICAgICAgICBFWFBFQ1RfRVEob2JqZWN0LT5zaXplKCksIDApOworICAgICAgICBFWFBFQ1Rf
RVEob2JqZWN0LT5zaXplKCksIDBVKTsKICAgICB9CiAKICAgICB7CkBAIC0xNTQsNDggKzE0MCw0
OCBAQCBURVNUKEpTT05BcnJheSwgQmFzaWMpCiAgICAgRVhQRUNUX0VRKGFycmF5LT5sZW5ndGgo
KSwgMlUpOwogICAgIHZhbHVlID0gYXJyYXktPmdldCgxKTsKICAgICBFWFBFQ1RfVFJVRSh2YWx1
ZS0+dHlwZSgpID09IEpTT046OlZhbHVlOjpUeXBlOjpCb29sZWFuKTsKLSAgICBib29sIGJvb2xl
YW5WYWx1ZTsKLSAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+YXNCb29sZWFuKGJvb2xlYW5WYWx1ZSkp
OwotICAgIEVYUEVDVF9FUShib29sZWFuVmFsdWUsIHRydWUpOworICAgIGF1dG8gYm9vbGVhblZh
bHVlID0gdmFsdWUtPmFzQm9vbGVhbigpOworICAgIEVYUEVDVF9UUlVFKGJvb2xlYW5WYWx1ZSk7
CisgICAgRVhQRUNUX0VRKCpib29sZWFuVmFsdWUsIHRydWUpOwogCiAgICAgYXJyYXktPnB1c2hJ
bnRlZ2VyKDEpOwogICAgIEVYUEVDVF9FUShhcnJheS0+bGVuZ3RoKCksIDNVKTsKICAgICB2YWx1
ZSA9IGFycmF5LT5nZXQoMik7CiAgICAgRVhQRUNUX1RSVUUodmFsdWUtPnR5cGUoKSA9PSBKU09O
OjpWYWx1ZTo6VHlwZTo6SW50ZWdlcik7Ci0gICAgaW50IGludGVnZXJWYWx1ZTsKLSAgICBFWFBF
Q1RfVFJVRSh2YWx1ZS0+YXNJbnRlZ2VyKGludGVnZXJWYWx1ZSkpOwotICAgIEVYUEVDVF9FUShp
bnRlZ2VyVmFsdWUsIDEpOworICAgIGF1dG8gaW50ZWdlclZhbHVlID0gdmFsdWUtPmFzSW50ZWdl
cigpOworICAgIEVYUEVDVF9UUlVFKGludGVnZXJWYWx1ZSk7CisgICAgRVhQRUNUX0VRKCppbnRl
Z2VyVmFsdWUsIDEpOwogCiAgICAgYXJyYXktPnB1c2hEb3VibGUoMS41KTsKICAgICBFWFBFQ1Rf
RVEoYXJyYXktPmxlbmd0aCgpLCA0VSk7CiAgICAgdmFsdWUgPSBhcnJheS0+Z2V0KDMpOwogICAg
IEVYUEVDVF9UUlVFKHZhbHVlLT50eXBlKCkgPT0gSlNPTjo6VmFsdWU6OlR5cGU6OkRvdWJsZSk7
Ci0gICAgZG91YmxlIGRvdWJsZVZhbHVlOwotICAgIEVYUEVDVF9UUlVFKHZhbHVlLT5hc0RvdWJs
ZShkb3VibGVWYWx1ZSkpOwotICAgIEVYUEVDVF9FUShkb3VibGVWYWx1ZSwgMS41KTsKKyAgICBh
dXRvIGRvdWJsZVZhbHVlID0gdmFsdWUtPmFzRG91YmxlKCk7CisgICAgRVhQRUNUX1RSVUUoZG91
YmxlVmFsdWUpOworICAgIEVYUEVDVF9FUSgqZG91YmxlVmFsdWUsIDEuNSk7CiAKICAgICBhcnJh
eS0+cHVzaFN0cmluZygid2Via2l0Iik7CiAgICAgRVhQRUNUX0VRKGFycmF5LT5sZW5ndGgoKSwg
NVUpOwogICAgIHZhbHVlID0gYXJyYXktPmdldCg0KTsKICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+
dHlwZSgpID09IEpTT046OlZhbHVlOjpUeXBlOjpTdHJpbmcpOwotICAgIFN0cmluZyBzdHJpbmdW
YWx1ZTsKLSAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+YXNTdHJpbmcoc3RyaW5nVmFsdWUpKTsKKyAg
ICBhdXRvIHN0cmluZ1ZhbHVlID0gdmFsdWUtPmFzU3RyaW5nKCk7CisgICAgRVhQRUNUX1RSVUUo
ISFzdHJpbmdWYWx1ZSk7CiAgICAgRVhQRUNUX0VRKHN0cmluZ1ZhbHVlLCAid2Via2l0Iik7CiAK
ICAgICBhcnJheS0+cHVzaE9iamVjdChKU09OOjpPYmplY3Q6OmNyZWF0ZSgpKTsKICAgICBFWFBF
Q1RfRVEoYXJyYXktPmxlbmd0aCgpLCA2VSk7CiAgICAgdmFsdWUgPSBhcnJheS0+Z2V0KDUpOwog
ICAgIEVYUEVDVF9UUlVFKHZhbHVlLT50eXBlKCkgPT0gSlNPTjo6VmFsdWU6OlR5cGU6Ok9iamVj
dCk7Ci0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gb2JqZWN0VmFsdWU7Ci0gICAgRVhQRUNUX1RS
VUUodmFsdWUtPmFzT2JqZWN0KG9iamVjdFZhbHVlKSk7Ci0gICAgRVhQRUNUX0VRKG9iamVjdFZh
bHVlLT5zaXplKCksIDApOworICAgIGF1dG8gb2JqZWN0VmFsdWUgPSB2YWx1ZS0+YXNPYmplY3Qo
KTsKKyAgICBFWFBFQ1RfVFJVRShvYmplY3RWYWx1ZSk7CisgICAgRVhQRUNUX0VRKG9iamVjdFZh
bHVlLT5zaXplKCksIDBVKTsKIAogICAgIGFycmF5LT5wdXNoQXJyYXkoSlNPTjo6QXJyYXk6OmNy
ZWF0ZSgpKTsKICAgICBFWFBFQ1RfRVEoYXJyYXktPmxlbmd0aCgpLCA3VSk7CiAgICAgdmFsdWUg
PSBhcnJheS0+Z2V0KDYpOwogICAgIEVYUEVDVF9UUlVFKHZhbHVlLT50eXBlKCkgPT0gSlNPTjo6
VmFsdWU6OlR5cGU6OkFycmF5KTsKLSAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IGFycmF5VmFsdWU7
Ci0gICAgRVhQRUNUX1RSVUUodmFsdWUtPmFzQXJyYXkoYXJyYXlWYWx1ZSkpOworICAgIGF1dG8g
YXJyYXlWYWx1ZSA9IHZhbHVlLT5hc0FycmF5KCk7CisgICAgRVhQRUNUX1RSVUUoYXJyYXlWYWx1
ZSk7CiAgICAgRVhQRUNUX0VRKGFycmF5VmFsdWUtPmxlbmd0aCgpLCAwVSk7CiAKICAgICBhdXRv
IGl0ID0gYXJyYXktPmJlZ2luKCk7CkBAIC0yNTEsNDAgKzIzNyw0MCBAQCBURVNUKEpTT05BcnJh
eU9mLCBCYXNpYykKICAgICBFWFBFQ1RfRVEoYXJyYXktPmxlbmd0aCgpLCAyVSk7CiAgICAgdmFs
dWUgPSBhcnJheS0+Z2V0KDEpOwogICAgIEVYUEVDVF9UUlVFKHZhbHVlLT50eXBlKCkgPT0gSlNP
Tjo6VmFsdWU6OlR5cGU6OkludGVnZXIpOwotICAgIGludCBpbnRlZ2VyVmFsdWU7Ci0gICAgRVhQ
RUNUX1RSVUUodmFsdWUtPmFzSW50ZWdlcihpbnRlZ2VyVmFsdWUpKTsKLSAgICBFWFBFQ1RfRVEo
aW50ZWdlclZhbHVlLCAxKTsKKyAgICBhdXRvIGludGVnZXJWYWx1ZSA9IHZhbHVlLT5hc0ludGVn
ZXIoKTsKKyAgICBFWFBFQ1RfVFJVRShpbnRlZ2VyVmFsdWUpOworICAgIEVYUEVDVF9FUSgqaW50
ZWdlclZhbHVlLCAxKTsKIAogICAgIGFycmF5LT5hZGRJdGVtKDEuNSk7CiAgICAgRVhQRUNUX0VR
KGFycmF5LT5sZW5ndGgoKSwgM1UpOwogICAgIHZhbHVlID0gYXJyYXktPmdldCgyKTsKICAgICBF
WFBFQ1RfVFJVRSh2YWx1ZS0+dHlwZSgpID09IEpTT046OlZhbHVlOjpUeXBlOjpEb3VibGUpOwot
ICAgIGRvdWJsZSBkb3VibGVWYWx1ZTsKLSAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+YXNEb3VibGUo
ZG91YmxlVmFsdWUpKTsKLSAgICBFWFBFQ1RfRVEoZG91YmxlVmFsdWUsIDEuNSk7CisgICAgYXV0
byBkb3VibGVWYWx1ZSA9IHZhbHVlLT5hc0RvdWJsZSgpOworICAgIEVYUEVDVF9UUlVFKGRvdWJs
ZVZhbHVlKTsKKyAgICBFWFBFQ1RfRVEoKmRvdWJsZVZhbHVlLCAxLjUpOwogCiAgICAgYXJyYXkt
PmFkZEl0ZW0oIndlYmtpdCIpOwogICAgIEVYUEVDVF9FUShhcnJheS0+bGVuZ3RoKCksIDRVKTsK
ICAgICB2YWx1ZSA9IGFycmF5LT5nZXQoMyk7CiAgICAgRVhQRUNUX1RSVUUodmFsdWUtPnR5cGUo
KSA9PSBKU09OOjpWYWx1ZTo6VHlwZTo6U3RyaW5nKTsKLSAgICBTdHJpbmcgc3RyaW5nVmFsdWU7
Ci0gICAgRVhQRUNUX1RSVUUodmFsdWUtPmFzU3RyaW5nKHN0cmluZ1ZhbHVlKSk7CisgICAgYXV0
byBzdHJpbmdWYWx1ZSA9IHZhbHVlLT5hc1N0cmluZygpOworICAgIEVYUEVDVF9UUlVFKCEhc3Ry
aW5nVmFsdWUpOwogICAgIEVYUEVDVF9FUShzdHJpbmdWYWx1ZSwgIndlYmtpdCIpOwogCiAgICAg
YXJyYXktPmFkZEl0ZW0oSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSk7CiAgICAgRVhQRUNUX0VRKGFy
cmF5LT5sZW5ndGgoKSwgNVUpOwogICAgIHZhbHVlID0gYXJyYXktPmdldCg0KTsKICAgICBFWFBF
Q1RfVFJVRSh2YWx1ZS0+dHlwZSgpID09IEpTT046OlZhbHVlOjpUeXBlOjpPYmplY3QpOwotICAg
IFJlZlB0cjxKU09OOjpPYmplY3Q+IG9iamVjdFZhbHVlOwotICAgIEVYUEVDVF9UUlVFKHZhbHVl
LT5hc09iamVjdChvYmplY3RWYWx1ZSkpOwotICAgIEVYUEVDVF9FUShvYmplY3RWYWx1ZS0+c2l6
ZSgpLCAwKTsKKyAgICBhdXRvIG9iamVjdFZhbHVlID0gdmFsdWUtPmFzT2JqZWN0KCk7CisgICAg
RVhQRUNUX1RSVUUob2JqZWN0VmFsdWUpOworICAgIEVYUEVDVF9FUShvYmplY3RWYWx1ZS0+c2l6
ZSgpLCAwVSk7CiAKICAgICBhcnJheS0+YWRkSXRlbShKU09OOjpBcnJheTo6Y3JlYXRlKCkpOwog
ICAgIEVYUEVDVF9FUShhcnJheS0+bGVuZ3RoKCksIDZVKTsKICAgICB2YWx1ZSA9IGFycmF5LT5n
ZXQoNSk7CiAgICAgRVhQRUNUX1RSVUUodmFsdWUtPnR5cGUoKSA9PSBKU09OOjpWYWx1ZTo6VHlw
ZTo6QXJyYXkpOwotICAgIFJlZlB0cjxKU09OOjpBcnJheT4gYXJyYXlWYWx1ZTsKLSAgICBFWFBF
Q1RfVFJVRSh2YWx1ZS0+YXNBcnJheShhcnJheVZhbHVlKSk7CisgICAgYXV0byBhcnJheVZhbHVl
ID0gdmFsdWUtPmFzQXJyYXkoKTsKKyAgICBFWFBFQ1RfVFJVRShhcnJheVZhbHVlKTsKICAgICBF
WFBFQ1RfRVEoYXJyYXlWYWx1ZS0+bGVuZ3RoKCksIDBVKTsKIAogICAgIGF1dG8gaXQgPSBhcnJh
eS0+YmVnaW4oKTsKQEAgLTMyNCw0NSArMzEwLDQ1IEBAIFRFU1QoSlNPTk9iamVjdCwgQmFzaWMp
CiAgICAgUmVmPEpTT046Ok9iamVjdD4gb2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsK
IAogICAgIG9iamVjdC0+c2V0VmFsdWUoIm51bGwiLCBKU09OOjpWYWx1ZTo6bnVsbCgpKTsKLSAg
ICBFWFBFQ1RfRVEob2JqZWN0LT5zaXplKCksIDEpOwotICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4g
dmFsdWU7Ci0gICAgRVhQRUNUX1RSVUUob2JqZWN0LT5nZXRWYWx1ZSgibnVsbCIsIHZhbHVlKSk7
CisgICAgRVhQRUNUX0VRKG9iamVjdC0+c2l6ZSgpLCAxVSk7CisgICAgYXV0byB2YWx1ZSA9IG9i
amVjdC0+Z2V0VmFsdWUoIm51bGwiKTsKKyAgICBFWFBFQ1RfVFJVRSh2YWx1ZSk7CiAgICAgRVhQ
RUNUX1RSVUUodmFsdWUtPmlzTnVsbCgpKTsKIAogICAgIG9iamVjdC0+c2V0Qm9vbGVhbigiYm9v
bGVhbiIsIHRydWUpOwotICAgIEVYUEVDVF9FUShvYmplY3QtPnNpemUoKSwgMik7Ci0gICAgYm9v
bCBib29sZWFuVmFsdWU7Ci0gICAgRVhQRUNUX1RSVUUob2JqZWN0LT5nZXRCb29sZWFuKCJib29s
ZWFuIiwgYm9vbGVhblZhbHVlKSk7Ci0gICAgRVhQRUNUX0VRKGJvb2xlYW5WYWx1ZSwgdHJ1ZSk7
CisgICAgRVhQRUNUX0VRKG9iamVjdC0+c2l6ZSgpLCAyVSk7CisgICAgYXV0byBib29sZWFuVmFs
dWUgPSBvYmplY3QtPmdldEJvb2xlYW4oImJvb2xlYW4iKTsKKyAgICBFWFBFQ1RfVFJVRShib29s
ZWFuVmFsdWUpOworICAgIEVYUEVDVF9FUSgqYm9vbGVhblZhbHVlLCB0cnVlKTsKIAogICAgIG9i
amVjdC0+c2V0SW50ZWdlcigiaW50ZWdlciIsIDEpOwotICAgIEVYUEVDVF9FUShvYmplY3QtPnNp
emUoKSwgMyk7Ci0gICAgaW50IGludGVnZXJWYWx1ZTsKLSAgICBFWFBFQ1RfVFJVRShvYmplY3Qt
PmdldEludGVnZXIoImludGVnZXIiLCBpbnRlZ2VyVmFsdWUpKTsKLSAgICBFWFBFQ1RfRVEoaW50
ZWdlclZhbHVlLCAxKTsKKyAgICBFWFBFQ1RfRVEob2JqZWN0LT5zaXplKCksIDNVKTsKKyAgICBh
dXRvIGludGVnZXJWYWx1ZSA9IG9iamVjdC0+Z2V0SW50ZWdlcigiaW50ZWdlciIpOworICAgIEVY
UEVDVF9UUlVFKGludGVnZXJWYWx1ZSk7CisgICAgRVhQRUNUX0VRKCppbnRlZ2VyVmFsdWUsIDEp
OwogCiAgICAgb2JqZWN0LT5zZXREb3VibGUoImRvdWJsZSIsIDEuNSk7Ci0gICAgRVhQRUNUX0VR
KG9iamVjdC0+c2l6ZSgpLCA0KTsKLSAgICBkb3VibGUgZG91YmxlVmFsdWU7Ci0gICAgRVhQRUNU
X1RSVUUob2JqZWN0LT5nZXREb3VibGUoImRvdWJsZSIsIGRvdWJsZVZhbHVlKSk7Ci0gICAgRVhQ
RUNUX0VRKGRvdWJsZVZhbHVlLCAxLjUpOworICAgIEVYUEVDVF9FUShvYmplY3QtPnNpemUoKSwg
NFUpOworICAgIGF1dG8gZG91YmxlVmFsdWUgPSBvYmplY3QtPmdldERvdWJsZSgiZG91YmxlIik7
CisgICAgRVhQRUNUX1RSVUUoZG91YmxlVmFsdWUpOworICAgIEVYUEVDVF9FUSgqZG91YmxlVmFs
dWUsIDEuNSk7CiAKICAgICBvYmplY3QtPnNldFN0cmluZygic3RyaW5nIiwgIndlYmtpdCIpOwot
ICAgIEVYUEVDVF9FUShvYmplY3QtPnNpemUoKSwgNSk7Ci0gICAgU3RyaW5nIHN0cmluZ1ZhbHVl
OwotICAgIEVYUEVDVF9UUlVFKG9iamVjdC0+Z2V0U3RyaW5nKCJzdHJpbmciLCBzdHJpbmdWYWx1
ZSkpOworICAgIEVYUEVDVF9FUShvYmplY3QtPnNpemUoKSwgNVUpOworICAgIGF1dG8gc3RyaW5n
VmFsdWUgPSBvYmplY3QtPmdldFN0cmluZygic3RyaW5nIik7CisgICAgRVhQRUNUX1RSVUUoISFz
dHJpbmdWYWx1ZSk7CiAgICAgRVhQRUNUX0VRKHN0cmluZ1ZhbHVlLCAid2Via2l0Iik7CiAKICAg
ICBvYmplY3QtPnNldE9iamVjdCgib2JqZWN0IiwgSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSk7Ci0g
ICAgRVhQRUNUX0VRKG9iamVjdC0+c2l6ZSgpLCA2KTsKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0
PiBvYmplY3RWYWx1ZTsKLSAgICBFWFBFQ1RfVFJVRShvYmplY3QtPmdldE9iamVjdCgib2JqZWN0
Iiwgb2JqZWN0VmFsdWUpKTsKLSAgICBFWFBFQ1RfRVEob2JqZWN0VmFsdWUtPnNpemUoKSwgMCk7
CisgICAgRVhQRUNUX0VRKG9iamVjdC0+c2l6ZSgpLCA2VSk7CisgICAgYXV0byBvYmplY3RWYWx1
ZSA9IG9iamVjdC0+Z2V0T2JqZWN0KCJvYmplY3QiKTsKKyAgICBFWFBFQ1RfVFJVRShvYmplY3RW
YWx1ZSk7CisgICAgRVhQRUNUX0VRKG9iamVjdFZhbHVlLT5zaXplKCksIDBVKTsKIAogICAgIG9i
amVjdC0+c2V0QXJyYXkoImFycmF5IiwgSlNPTjo6QXJyYXk6OmNyZWF0ZSgpKTsKLSAgICBFWFBF
Q1RfRVEob2JqZWN0LT5zaXplKCksIDcpOwotICAgIFJlZlB0cjxKU09OOjpBcnJheT4gYXJyYXlW
YWx1ZTsKLSAgICBFWFBFQ1RfVFJVRShvYmplY3QtPmdldEFycmF5KCJhcnJheSIsIGFycmF5VmFs
dWUpKTsKKyAgICBFWFBFQ1RfRVEob2JqZWN0LT5zaXplKCksIDdVKTsKKyAgICBhdXRvIGFycmF5
VmFsdWUgPSBvYmplY3QtPmdldEFycmF5KCJhcnJheSIpOworICAgIEVYUEVDVF9UUlVFKGFycmF5
VmFsdWUpOwogICAgIEVYUEVDVF9FUShhcnJheVZhbHVlLT5sZW5ndGgoKSwgMFUpOwogCiAgICAg
VmVjdG9yPGNvbnN0IGNoYXIqPiBrZXlzID0geyAibnVsbCIsICJib29sZWFuIiwgImludGVnZXIi
LCAiZG91YmxlIiwgInN0cmluZyIsICJvYmplY3QiLCAiYXJyYXkiIH07CkBAIC0zNzYsMzEgKzM2
MiwzMSBAQCBURVNUKEpTT05PYmplY3QsIEJhc2ljKQogICAgIEVYUEVDVF9UUlVFKGtleXMuaXNF
bXB0eSgpKTsKIAogICAgIG9iamVjdC0+cmVtb3ZlKCJudWxsIik7Ci0gICAgRVhQRUNUX0VRKG9i
amVjdC0+c2l6ZSgpLCA2KTsKKyAgICBFWFBFQ1RfRVEob2JqZWN0LT5zaXplKCksIDZVKTsKICAg
ICBFWFBFQ1RfVFJVRShvYmplY3QtPmZpbmQoIm51bGwiKSA9PSBvYmplY3QtPmVuZCgpKTsKIAog
ICAgIG9iamVjdC0+cmVtb3ZlKCJib29sZWFuIik7Ci0gICAgRVhQRUNUX0VRKG9iamVjdC0+c2l6
ZSgpLCA1KTsKKyAgICBFWFBFQ1RfRVEob2JqZWN0LT5zaXplKCksIDVVKTsKICAgICBFWFBFQ1Rf
VFJVRShvYmplY3QtPmZpbmQoImJvb2xlYW4iKSA9PSBvYmplY3QtPmVuZCgpKTsKIAogICAgIG9i
amVjdC0+cmVtb3ZlKCJpbnRlZ2VyIik7Ci0gICAgRVhQRUNUX0VRKG9iamVjdC0+c2l6ZSgpLCA0
KTsKKyAgICBFWFBFQ1RfRVEob2JqZWN0LT5zaXplKCksIDRVKTsKICAgICBFWFBFQ1RfVFJVRShv
YmplY3QtPmZpbmQoImludGVnZXIiKSA9PSBvYmplY3QtPmVuZCgpKTsKIAogICAgIG9iamVjdC0+
cmVtb3ZlKCJkb3VibGUiKTsKLSAgICBFWFBFQ1RfRVEob2JqZWN0LT5zaXplKCksIDMpOworICAg
IEVYUEVDVF9FUShvYmplY3QtPnNpemUoKSwgM1UpOwogICAgIEVYUEVDVF9UUlVFKG9iamVjdC0+
ZmluZCgiZG91YmxlIikgPT0gb2JqZWN0LT5lbmQoKSk7CiAKICAgICBvYmplY3QtPnJlbW92ZSgi
c3RyaW5nIik7Ci0gICAgRVhQRUNUX0VRKG9iamVjdC0+c2l6ZSgpLCAyKTsKKyAgICBFWFBFQ1Rf
RVEob2JqZWN0LT5zaXplKCksIDJVKTsKICAgICBFWFBFQ1RfVFJVRShvYmplY3QtPmZpbmQoInN0
cmluZyIpID09IG9iamVjdC0+ZW5kKCkpOwogCiAgICAgb2JqZWN0LT5yZW1vdmUoIm9iamVjdCIp
OwotICAgIEVYUEVDVF9FUShvYmplY3QtPnNpemUoKSwgMSk7CisgICAgRVhQRUNUX0VRKG9iamVj
dC0+c2l6ZSgpLCAxVSk7CiAgICAgRVhQRUNUX1RSVUUob2JqZWN0LT5maW5kKCJvYmplY3QiKSA9
PSBvYmplY3QtPmVuZCgpKTsKIAogICAgIG9iamVjdC0+cmVtb3ZlKCJhcnJheSIpOwotICAgIEVY
UEVDVF9FUShvYmplY3QtPnNpemUoKSwgMCk7CisgICAgRVhQRUNUX0VRKG9iamVjdC0+c2l6ZSgp
LCAwVSk7CiAgICAgRVhQRUNUX1RSVUUob2JqZWN0LT5maW5kKCJhcnJheSIpID09IG9iamVjdC0+
ZW5kKCkpOwogfQogCkBAIC00NzksMjAxICs0NjUsMjA0IEBAIFRFU1QoSlNPTlZhbHVlLCBUb0pT
T05TdHJpbmcpCiBURVNUKEpTT05WYWx1ZSwgUGFyc2VKU09OKQogewogICAgIHsKLSAgICAgICAg
UmVmUHRyPEpTT046OlZhbHVlPiB2YWx1ZTsKLSAgICAgICAgRVhQRUNUX1RSVUUoSlNPTjo6VmFs
dWU6OnBhcnNlSlNPTigibnVsbCIsIHZhbHVlKSk7CisgICAgICAgIGF1dG8gdmFsdWUgPSBKU09O
OjpWYWx1ZTo6cGFyc2VKU09OKCJudWxsIik7CisgICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlKTsK
ICAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUtPmlzTnVsbCgpKTsKICAgICB9CiAKICAgICB7Ci0g
ICAgICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gdmFsdWU7Ci0gICAgICAgIEVYUEVDVF9UUlVFKEpT
T046OlZhbHVlOjpwYXJzZUpTT04oInRydWUiLCB2YWx1ZSkpOworICAgICAgICBhdXRvIHZhbHVl
ID0gSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigidHJ1ZSIpOworICAgICAgICBFWFBFQ1RfVFJVRSh2
YWx1ZSk7CiAgICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlLT50eXBlKCkgPT0gSlNPTjo6VmFsdWU6
OlR5cGU6OkJvb2xlYW4pOwotICAgICAgICBib29sIGJvb2xlYW5WYWx1ZTsKLSAgICAgICAgRVhQ
RUNUX1RSVUUodmFsdWUtPmFzQm9vbGVhbihib29sZWFuVmFsdWUpKTsKLSAgICAgICAgRVhQRUNU
X0VRKGJvb2xlYW5WYWx1ZSwgdHJ1ZSk7CisgICAgICAgIGF1dG8gYm9vbGVhblZhbHVlID0gdmFs
dWUtPmFzQm9vbGVhbigpOworICAgICAgICBFWFBFQ1RfVFJVRShib29sZWFuVmFsdWUpOworICAg
ICAgICBFWFBFQ1RfRVEoKmJvb2xlYW5WYWx1ZSwgdHJ1ZSk7CiAKLSAgICAgICAgRVhQRUNUX1RS
VUUoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiZmFsc2UiLCB2YWx1ZSkpOworICAgICAgICB2YWx1
ZSA9IEpTT046OlZhbHVlOjpwYXJzZUpTT04oImZhbHNlIik7CisgICAgICAgIEVYUEVDVF9UUlVF
KHZhbHVlKTsKICAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUtPnR5cGUoKSA9PSBKU09OOjpWYWx1
ZTo6VHlwZTo6Qm9vbGVhbik7Ci0gICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlLT5hc0Jvb2xlYW4o
Ym9vbGVhblZhbHVlKSk7Ci0gICAgICAgIEVYUEVDVF9FUShib29sZWFuVmFsdWUsIGZhbHNlKTsK
KyAgICAgICAgYm9vbGVhblZhbHVlID0gdmFsdWUtPmFzQm9vbGVhbigpOworICAgICAgICBFWFBF
Q1RfVFJVRShib29sZWFuVmFsdWUpOworICAgICAgICBFWFBFQ1RfRVEoKmJvb2xlYW5WYWx1ZSwg
ZmFsc2UpOwogICAgIH0KIAogICAgIHsKLSAgICAgICAgUmVmUHRyPEpTT046OlZhbHVlPiB2YWx1
ZTsKLSAgICAgICAgRVhQRUNUX1RSVUUoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiMSIsIHZhbHVl
KSk7CisgICAgICAgIGF1dG8gdmFsdWUgPSBKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCIxIik7Cisg
ICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlKTsKICAgICAgICAgLy8gTnVtYmVycyBhcmUgYWx3YXlz
IHBhcnNlZCBhcyBkb3VibGUuCiAgICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlLT50eXBlKCkgPT0g
SlNPTjo6VmFsdWU6OlR5cGU6OkRvdWJsZSk7Ci0gICAgICAgIGRvdWJsZSBkb3VibGVWYWx1ZTsK
LSAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUtPmFzRG91YmxlKGRvdWJsZVZhbHVlKSk7Ci0gICAg
ICAgIEVYUEVDVF9FUShkb3VibGVWYWx1ZSwgMS4wKTsKKyAgICAgICAgYXV0byBkb3VibGVWYWx1
ZSA9IHZhbHVlLT5hc0RvdWJsZSgpOworICAgICAgICBFWFBFQ1RfVFJVRShkb3VibGVWYWx1ZSk7
CisgICAgICAgIEVYUEVDVF9FUSgqZG91YmxlVmFsdWUsIDEuMCk7CiAKLSAgICAgICAgRVhQRUNU
X1RSVUUoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiMS41IiwgdmFsdWUpKTsKKyAgICAgICAgdmFs
dWUgPSBKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCIxLjUiKTsKKyAgICAgICAgRVhQRUNUX1RSVUUo
dmFsdWUpOwogICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+dHlwZSgpID09IEpTT046OlZhbHVl
OjpUeXBlOjpEb3VibGUpOwotICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+YXNEb3VibGUoZG91
YmxlVmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX0VRKGRvdWJsZVZhbHVlLCAxLjUpOworICAgICAg
ICBkb3VibGVWYWx1ZSA9IHZhbHVlLT5hc0RvdWJsZSgpOworICAgICAgICBFWFBFQ1RfVFJVRShk
b3VibGVWYWx1ZSk7CisgICAgICAgIEVYUEVDVF9FUSgqZG91YmxlVmFsdWUsIDEuNSk7CiAgICAg
fQogCiAgICAgewotICAgICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHZhbHVlOwotICAgICAgICBF
WFBFQ1RfVFJVRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJcInN0cmluZ1wiIiwgdmFsdWUpKTsK
KyAgICAgICAgYXV0byB2YWx1ZSA9IEpTT046OlZhbHVlOjpwYXJzZUpTT04oIlwic3RyaW5nXCIi
KTsKKyAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUpOwogICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1
ZS0+dHlwZSgpID09IEpTT046OlZhbHVlOjpUeXBlOjpTdHJpbmcpOwotICAgICAgICBTdHJpbmcg
c3RyaW5nVmFsdWU7Ci0gICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlLT5hc1N0cmluZyhzdHJpbmdW
YWx1ZSkpOworICAgICAgICBhdXRvIHN0cmluZ1ZhbHVlID0gdmFsdWUtPmFzU3RyaW5nKCk7Cisg
ICAgICAgIEVYUEVDVF9UUlVFKCEhc3RyaW5nVmFsdWUpOwogICAgICAgICBFWFBFQ1RfRVEoc3Ry
aW5nVmFsdWUsICJzdHJpbmciKTsKICAgICB9CiAKICAgICB7Ci0gICAgICAgIFJlZlB0cjxKU09O
OjpWYWx1ZT4gdmFsdWU7Ci0gICAgICAgIEVYUEVDVF9UUlVFKEpTT046OlZhbHVlOjpwYXJzZUpT
T04oIltdIiwgdmFsdWUpKTsKKyAgICAgICAgYXV0byB2YWx1ZSA9IEpTT046OlZhbHVlOjpwYXJz
ZUpTT04oIltdIik7CisgICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlKTsKICAgICAgICAgRVhQRUNU
X1RSVUUodmFsdWUtPnR5cGUoKSA9PSBKU09OOjpWYWx1ZTo6VHlwZTo6QXJyYXkpOwotICAgICAg
ICBSZWZQdHI8SlNPTjo6QXJyYXk+IGFycmF5VmFsdWU7Ci0gICAgICAgIEVYUEVDVF9UUlVFKHZh
bHVlLT5hc0FycmF5KGFycmF5VmFsdWUpKTsKKyAgICAgICAgYXV0byBhcnJheVZhbHVlID0gdmFs
dWUtPmFzQXJyYXkoKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoYXJyYXlWYWx1ZSk7CiAgICAgICAg
IEVYUEVDVF9FUShhcnJheVZhbHVlLT5sZW5ndGgoKSwgMFUpOwogCi0gICAgICAgIEVYUEVDVF9U
UlVFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIltudWxsLCAxICwyLjUsW3tcImZvb1wiOlwiYmFy
XCJ9LHtcImJhelwiOmZhbHNlfV0sXCJ3ZWJraXRcIl0iLCB2YWx1ZSkpOworICAgICAgICB2YWx1
ZSA9IEpTT046OlZhbHVlOjpwYXJzZUpTT04oIltudWxsLCAxICwyLjUsW3tcImZvb1wiOlwiYmFy
XCJ9LHtcImJhelwiOmZhbHNlfV0sXCJ3ZWJraXRcIl0iKTsKKyAgICAgICAgRVhQRUNUX1RSVUUo
dmFsdWUpOwogICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+dHlwZSgpID09IEpTT046OlZhbHVl
OjpUeXBlOjpBcnJheSk7Ci0gICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlLT5hc0FycmF5KGFycmF5
VmFsdWUpKTsKKyAgICAgICAgYXJyYXlWYWx1ZSA9IHZhbHVlLT5hc0FycmF5KCk7CisgICAgICAg
IEVYUEVDVF9UUlVFKGFycmF5VmFsdWUpOwogICAgICAgICBFWFBFQ1RfRVEoYXJyYXlWYWx1ZS0+
bGVuZ3RoKCksIDVVKTsKICAgICAgICAgYXV0byBpdCA9IGFycmF5VmFsdWUtPmJlZ2luKCk7Ci0g
ICAgICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gaXRlbVZhbHVlID0gaXQtPmdldCgpOwotICAgICAg
ICBFWFBFQ1RfVFJVRShpdGVtVmFsdWUtPnR5cGUoKSA9PSBKU09OOjpWYWx1ZTo6VHlwZTo6TnVs
bCk7CisgICAgICAgIEVYUEVDVF9UUlVFKCgqaXQpLT50eXBlKCkgPT0gSlNPTjo6VmFsdWU6OlR5
cGU6Ok51bGwpOwogICAgICAgICArK2l0OwogICAgICAgICBFWFBFQ1RfRkFMU0UoaXQgPT0gYXJy
YXlWYWx1ZS0+ZW5kKCkpOwogCi0gICAgICAgIGl0ZW1WYWx1ZSA9IGl0LT5nZXQoKTsKLSAgICAg
ICAgRVhQRUNUX1RSVUUoaXRlbVZhbHVlLT50eXBlKCkgPT0gSlNPTjo6VmFsdWU6OlR5cGU6OkRv
dWJsZSk7Ci0gICAgICAgIGludCBpbnRlZ2VyVmFsdWU7Ci0gICAgICAgIEVYUEVDVF9UUlVFKGl0
ZW1WYWx1ZS0+YXNJbnRlZ2VyKGludGVnZXJWYWx1ZSkpOwotICAgICAgICBFWFBFQ1RfRVEoaW50
ZWdlclZhbHVlLCAxKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoKCppdCktPnR5cGUoKSA9PSBKU09O
OjpWYWx1ZTo6VHlwZTo6RG91YmxlKTsKKyAgICAgICAgYXV0byBpbnRlZ2VyVmFsdWUgPSAoKml0
KS0+YXNJbnRlZ2VyKCk7CisgICAgICAgIEVYUEVDVF9UUlVFKGludGVnZXJWYWx1ZSk7CisgICAg
ICAgIEVYUEVDVF9FUSgqaW50ZWdlclZhbHVlLCAxKTsKICAgICAgICAgKytpdDsKICAgICAgICAg
RVhQRUNUX0ZBTFNFKGl0ID09IGFycmF5VmFsdWUtPmVuZCgpKTsKIAotICAgICAgICBpdGVtVmFs
dWUgPSBpdC0+Z2V0KCk7Ci0gICAgICAgIEVYUEVDVF9UUlVFKGl0ZW1WYWx1ZS0+dHlwZSgpID09
IEpTT046OlZhbHVlOjpUeXBlOjpEb3VibGUpOwotICAgICAgICBkb3VibGUgZG91YmxlVmFsdWU7
Ci0gICAgICAgIEVYUEVDVF9UUlVFKGl0ZW1WYWx1ZS0+YXNEb3VibGUoZG91YmxlVmFsdWUpKTsK
LSAgICAgICAgRVhQRUNUX0VRKGRvdWJsZVZhbHVlLCAyLjUpOworICAgICAgICBFWFBFQ1RfVFJV
RSgoKml0KS0+dHlwZSgpID09IEpTT046OlZhbHVlOjpUeXBlOjpEb3VibGUpOworICAgICAgICBh
dXRvIGRvdWJsZVZhbHVlID0gKCppdCktPmFzRG91YmxlKCk7CisgICAgICAgIEVYUEVDVF9UUlVF
KGRvdWJsZVZhbHVlKTsKKyAgICAgICAgRVhQRUNUX0VRKCpkb3VibGVWYWx1ZSwgMi41KTsKICAg
ICAgICAgKytpdDsKICAgICAgICAgRVhQRUNUX0ZBTFNFKGl0ID09IGFycmF5VmFsdWUtPmVuZCgp
KTsKIAotICAgICAgICBpdGVtVmFsdWUgPSBpdC0+Z2V0KCk7Ci0gICAgICAgIEVYUEVDVF9UUlVF
KGl0ZW1WYWx1ZS0+dHlwZSgpID09IEpTT046OlZhbHVlOjpUeXBlOjpBcnJheSk7Ci0gICAgICAg
IFJlZlB0cjxKU09OOjpBcnJheT4gc3ViQXJyYXlWYWx1ZTsKLSAgICAgICAgRVhQRUNUX1RSVUUo
aXRlbVZhbHVlLT5hc0FycmF5KHN1YkFycmF5VmFsdWUpKTsKKyAgICAgICAgRVhQRUNUX1RSVUUo
KCppdCktPnR5cGUoKSA9PSBKU09OOjpWYWx1ZTo6VHlwZTo6QXJyYXkpOworICAgICAgICBhdXRv
IHN1YkFycmF5VmFsdWUgPSAoKml0KS0+YXNBcnJheSgpOworICAgICAgICBFWFBFQ1RfVFJVRShz
dWJBcnJheVZhbHVlKTsKICAgICAgICAgRVhQRUNUX0VRKHN1YkFycmF5VmFsdWUtPmxlbmd0aCgp
LCAyVSk7Ci0gICAgICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gb2JqZWN0VmFsdWUgPSBzdWJBcnJh
eVZhbHVlLT5nZXQoMCk7CisgICAgICAgIGF1dG8gb2JqZWN0VmFsdWUgPSBzdWJBcnJheVZhbHVl
LT5nZXQoMCk7CiAgICAgICAgIEVYUEVDVF9UUlVFKG9iamVjdFZhbHVlLT50eXBlKCkgPT0gSlNP
Tjo6VmFsdWU6OlR5cGU6Ok9iamVjdCk7Ci0gICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG9i
amVjdDsKLSAgICAgICAgRVhQRUNUX1RSVUUob2JqZWN0VmFsdWUtPmFzT2JqZWN0KG9iamVjdCkp
OwotICAgICAgICBFWFBFQ1RfRVEob2JqZWN0LT5zaXplKCksIDEpOwotICAgICAgICBTdHJpbmcg
c3RyaW5nVmFsdWU7Ci0gICAgICAgIEVYUEVDVF9UUlVFKG9iamVjdC0+Z2V0U3RyaW5nKCJmb28i
LCBzdHJpbmdWYWx1ZSkpOworICAgICAgICBhdXRvIG9iamVjdCA9IG9iamVjdFZhbHVlLT5hc09i
amVjdCgpOworICAgICAgICBFWFBFQ1RfVFJVRShvYmplY3QpOworICAgICAgICBFWFBFQ1RfRVEo
b2JqZWN0LT5zaXplKCksIDFVKTsKKyAgICAgICAgYXV0byBzdHJpbmdWYWx1ZSA9IG9iamVjdC0+
Z2V0U3RyaW5nKCJmb28iKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoISFzdHJpbmdWYWx1ZSk7CiAg
ICAgICAgIEVYUEVDVF9FUShzdHJpbmdWYWx1ZSwgImJhciIpOwogICAgICAgICBvYmplY3RWYWx1
ZSA9IHN1YkFycmF5VmFsdWUtPmdldCgxKTsKICAgICAgICAgRVhQRUNUX1RSVUUob2JqZWN0VmFs
dWUtPnR5cGUoKSA9PSBKU09OOjpWYWx1ZTo6VHlwZTo6T2JqZWN0KTsKLSAgICAgICAgRVhQRUNU
X1RSVUUob2JqZWN0VmFsdWUtPmFzT2JqZWN0KG9iamVjdCkpOwotICAgICAgICBFWFBFQ1RfRVEo
b2JqZWN0LT5zaXplKCksIDEpOwotICAgICAgICBib29sIGJvb2xlYW5WYWx1ZTsKLSAgICAgICAg
RVhQRUNUX1RSVUUob2JqZWN0LT5nZXRCb29sZWFuKCJiYXoiLCBib29sZWFuVmFsdWUpKTsKLSAg
ICAgICAgRVhQRUNUX0VRKGJvb2xlYW5WYWx1ZSwgZmFsc2UpOworICAgICAgICBvYmplY3QgPW9i
amVjdFZhbHVlLT5hc09iamVjdCgpOworICAgICAgICBFWFBFQ1RfVFJVRShvYmplY3QpOworICAg
ICAgICBFWFBFQ1RfRVEob2JqZWN0LT5zaXplKCksIDFVKTsKKyAgICAgICAgYXV0byBib29sZWFu
VmFsdWUgPSBvYmplY3QtPmdldEJvb2xlYW4oImJheiIpOworICAgICAgICBFWFBFQ1RfVFJVRShi
b29sZWFuVmFsdWUpOworICAgICAgICBFWFBFQ1RfRVEoKmJvb2xlYW5WYWx1ZSwgZmFsc2UpOwog
ICAgICAgICArK2l0OwogICAgICAgICBFWFBFQ1RfRkFMU0UoaXQgPT0gYXJyYXlWYWx1ZS0+ZW5k
KCkpOwogCi0gICAgICAgIGl0ZW1WYWx1ZSA9IGl0LT5nZXQoKTsKLSAgICAgICAgRVhQRUNUX1RS
VUUoaXRlbVZhbHVlLT50eXBlKCkgPT0gSlNPTjo6VmFsdWU6OlR5cGU6OlN0cmluZyk7Ci0gICAg
ICAgIEVYUEVDVF9UUlVFKGl0ZW1WYWx1ZS0+YXNTdHJpbmcoc3RyaW5nVmFsdWUpKTsKKyAgICAg
ICAgRVhQRUNUX1RSVUUoKCppdCktPnR5cGUoKSA9PSBKU09OOjpWYWx1ZTo6VHlwZTo6U3RyaW5n
KTsKKyAgICAgICAgc3RyaW5nVmFsdWUgPSAoKml0KS0+YXNTdHJpbmcoKTsKKyAgICAgICAgRVhQ
RUNUX1RSVUUoISFzdHJpbmdWYWx1ZSk7CiAgICAgICAgIEVYUEVDVF9FUShzdHJpbmdWYWx1ZSwg
IndlYmtpdCIpOwogICAgICAgICArK2l0OwogICAgICAgICBFWFBFQ1RfVFJVRShpdCA9PSBhcnJh
eVZhbHVlLT5lbmQoKSk7CiAgICAgfQogCiAgICAgewotICAgICAgICBSZWZQdHI8SlNPTjo6VmFs
dWU+IHZhbHVlOwotICAgICAgICBFWFBFQ1RfVFJVRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJ7
fSIsIHZhbHVlKSk7CisgICAgICAgIGF1dG8gdmFsdWUgPSBKU09OOjpWYWx1ZTo6cGFyc2VKU09O
KCJ7fSIpOworICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1ZSk7CiAgICAgICAgIEVYUEVDVF9UUlVF
KHZhbHVlLT50eXBlKCkgPT0gSlNPTjo6VmFsdWU6OlR5cGU6Ok9iamVjdCk7Ci0gICAgICAgIFJl
ZlB0cjxKU09OOjpPYmplY3Q+IG9iamVjdFZhbHVlOwotICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1
ZS0+YXNPYmplY3Qob2JqZWN0VmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX0VRKG9iamVjdFZhbHVl
LT5zaXplKCksIDApOworICAgICAgICBhdXRvIG9iamVjdFZhbHVlID0gdmFsdWUtPmFzT2JqZWN0
KCk7CisgICAgICAgIEVYUEVDVF9UUlVFKG9iamVjdFZhbHVlKTsKKyAgICAgICAgRVhQRUNUX0VR
KG9iamVjdFZhbHVlLT5zaXplKCksIDBVKTsKIAotICAgICAgICBFWFBFQ1RfVFJVRShKU09OOjpW
YWx1ZTo6cGFyc2VKU09OKCJ7XCJmb29cIjogXCJiYXJcIiwgXCJiYXpcIjoge1wic3ViXCI6W251
bGwsZmFsc2VdfX0iLCB2YWx1ZSkpOworICAgICAgICB2YWx1ZSA9IEpTT046OlZhbHVlOjpwYXJz
ZUpTT04oIntcImZvb1wiOiBcImJhclwiLCBcImJhelwiOiB7XCJzdWJcIjpbbnVsbCxmYWxzZV19
fSIpOworICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1ZSk7CiAgICAgICAgIEVYUEVDVF9UUlVFKHZh
bHVlLT50eXBlKCkgPT0gSlNPTjo6VmFsdWU6OlR5cGU6Ok9iamVjdCk7Ci0gICAgICAgIEVYUEVD
VF9UUlVFKHZhbHVlLT5hc09iamVjdChvYmplY3RWYWx1ZSkpOwotICAgICAgICBFWFBFQ1RfRVEo
b2JqZWN0VmFsdWUtPnNpemUoKSwgMik7CisgICAgICAgIG9iamVjdFZhbHVlID0gdmFsdWUtPmFz
T2JqZWN0KCk7CisgICAgICAgIEVYUEVDVF9UUlVFKG9iamVjdFZhbHVlKTsKKyAgICAgICAgRVhQ
RUNUX0VRKG9iamVjdFZhbHVlLT5zaXplKCksIDJVKTsKIAotICAgICAgICBTdHJpbmcgc3RyaW5n
VmFsdWU7Ci0gICAgICAgIEVYUEVDVF9UUlVFKG9iamVjdFZhbHVlLT5nZXRTdHJpbmcoImZvbyIs
IHN0cmluZ1ZhbHVlKSk7CisgICAgICAgIGF1dG8gc3RyaW5nVmFsdWUgPSBvYmplY3RWYWx1ZS0+
Z2V0U3RyaW5nKCJmb28iKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoISFzdHJpbmdWYWx1ZSk7CiAg
ICAgICAgIEVYUEVDVF9FUShzdHJpbmdWYWx1ZSwgImJhciIpOwogCi0gICAgICAgIFJlZlB0cjxK
U09OOjpPYmplY3Q+IG9iamVjdDsKLSAgICAgICAgRVhQRUNUX1RSVUUob2JqZWN0VmFsdWUtPmdl
dE9iamVjdCgiYmF6Iiwgb2JqZWN0KSk7Ci0gICAgICAgIEVYUEVDVF9FUShvYmplY3QtPnNpemUo
KSwgMSk7Ci0gICAgICAgIFJlZlB0cjxKU09OOjpBcnJheT4gYXJyYXk7Ci0gICAgICAgIEVYUEVD
VF9UUlVFKG9iamVjdC0+Z2V0QXJyYXkoInN1YiIsIGFycmF5KSk7CisgICAgICAgIGF1dG8gb2Jq
ZWN0ID0gb2JqZWN0VmFsdWUtPmdldE9iamVjdCgiYmF6Iik7CisgICAgICAgIEVYUEVDVF9UUlVF
KG9iamVjdCk7CisgICAgICAgIEVYUEVDVF9FUShvYmplY3QtPnNpemUoKSwgMVUpOworICAgICAg
ICBhdXRvIGFycmF5ID0gb2JqZWN0LT5nZXRBcnJheSgic3ViIik7CisgICAgICAgIEVYUEVDVF9U
UlVFKGFycmF5KTsKICAgICAgICAgRVhQRUNUX0VRKGFycmF5LT5sZW5ndGgoKSwgMlUpOwogICAg
IH0KIAogICAgIHsKLSAgICAgICAgUmVmUHRyPEpTT046OlZhbHVlPiB2YWx1ZTsKLSAgICAgICAg
RVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIiwiLCB2YWx1ZSkpOwotICAgICAg
ICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiXCJmb28iLCB2YWx1ZSkpOwot
ICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiZm9vXCIiLCB2YWx1
ZSkpOwotICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiVHJVZSIs
IHZhbHVlKSk7Ci0gICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJG
YWxzZSIsIHZhbHVlKSk7Ci0gICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VK
U09OKCIxLmQiLCB2YWx1ZSkpOwotICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBh
cnNlSlNPTigiWzEsXSIsIHZhbHVlKSk7Ci0gICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1
ZTo6cGFyc2VKU09OKCIxLDJdIiwgdmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046
OlZhbHVlOjpwYXJzZUpTT04oIlsxLDIiLCB2YWx1ZSkpOwotICAgICAgICBFWFBFQ1RfRkFMU0Uo
SlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiWzEgMl0iLCB2YWx1ZSkpOwotICAgICAgICBFWFBFQ1Rf
RkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiWzEsMl1dIiwgdmFsdWUpKTsKLSAgICAgICAg
RVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIlsxLDJdLCIsIHZhbHVlKSk7Ci0g
ICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJ7Zm9vOlwiYmFyXCJ9
IiwgdmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04o
IntcImZvb1wiOmJhcn0iLCB2YWx1ZSkpOwotICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFs
dWU6OnBhcnNlSlNPTigie1wiZm9vOlwiYmFyXCJ9IiwgdmFsdWUpKTsKLSAgICAgICAgRVhQRUNU
X0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIntmb29cIjpcImJhclwifSIsIHZhbHVlKSk7
Ci0gICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJ7e1wiZm9vXCI6
XCJiYXJcIn19IiwgdmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpw
YXJzZUpTT04oIntcImZvb1wiOlwiYmFyXCJ9LCIsIHZhbHVlKSk7Ci0gICAgICAgIEVYUEVDVF9G
QUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJbe1wiZm9vXCI6XCJiYXJcIn0se1wiYmF6XCI6
ZmFsc2V9LF0iLCB2YWx1ZSkpOwotICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBh
cnNlSlNPTigiW3tcImZvb1wiOntcImJhelwiOmZhbHNlfV0iLCB2YWx1ZSkpOworICAgICAgICBF
WFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiLCIpKTsKKyAgICAgICAgRVhQRUNU
X0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIlwiZm9vIikpOworICAgICAgICBFWFBFQ1Rf
RkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiZm9vXCIiKSk7CisgICAgICAgIEVYUEVDVF9G
QUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJUclVlIikpOworICAgICAgICBFWFBFQ1RfRkFM
U0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiRmFsc2UiKSk7CisgICAgICAgIEVYUEVDVF9GQUxT
RShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCIxLmQiKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShK
U09OOjpWYWx1ZTo6cGFyc2VKU09OKCJbMSxdIikpOworICAgICAgICBFWFBFQ1RfRkFMU0UoSlNP
Tjo6VmFsdWU6OnBhcnNlSlNPTigiMSwyXSIpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046
OlZhbHVlOjpwYXJzZUpTT04oIlsxLDIiKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpW
YWx1ZTo6cGFyc2VKU09OKCJbMSAyXSIpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZh
bHVlOjpwYXJzZUpTT04oIlsxLDJdXSIpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZh
bHVlOjpwYXJzZUpTT04oIlsxLDJdLCIpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZh
bHVlOjpwYXJzZUpTT04oIntmb286XCJiYXJcIn0iKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShK
U09OOjpWYWx1ZTo6cGFyc2VKU09OKCJ7XCJmb29cIjpiYXJ9IikpOworICAgICAgICBFWFBFQ1Rf
RkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigie1wiZm9vOlwiYmFyXCJ9IikpOworICAgICAg
ICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigie2Zvb1wiOlwiYmFyXCJ9Iikp
OworICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigie3tcImZvb1wi
OlwiYmFyXCJ9fSIpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpT
T04oIntcImZvb1wiOlwiYmFyXCJ9LCIpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZh
bHVlOjpwYXJzZUpTT04oIlt7XCJmb29cIjpcImJhclwifSx7XCJiYXpcIjpmYWxzZX0sXSIpKTsK
KyAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIlt7XCJmb29cIjp7
XCJiYXpcIjpmYWxzZX1dIikpOwogICAgIH0KIAogICAgIHsKLSAgICAgICAgUmVmUHRyPEpTT046
OlZhbHVlPiB2YWx1ZTsKLSAgICAgICAgRVhQRUNUX1RSVUUoSlNPTjo6VmFsdWU6OnBhcnNlSlNP
TigiIFwiZm9vXCIgXG4iLCB2YWx1ZSkpOwotICAgICAgICBTdHJpbmcgc3RyaW5nVmFsdWU7Ci0g
ICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlLT5hc1N0cmluZyhzdHJpbmdWYWx1ZSkpOworICAgICAg
ICBhdXRvIHZhbHVlID0gSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiIFwiZm9vXCIgXG4iKTsKKyAg
ICAgICAgRVhQRUNUX1RSVUUodmFsdWUpOworICAgICAgICBhdXRvIHN0cmluZ1ZhbHVlID0gdmFs
dWUtPmFzU3RyaW5nKCk7CisgICAgICAgIEVYUEVDVF9UUlVFKCEhc3RyaW5nVmFsdWUpOwogICAg
ICAgICBFWFBFQ1RfRVEoImZvbyIsIHN0cmluZ1ZhbHVlKTsKICAgICB9CiAKICAgICB7Ci0gICAg
ICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gdmFsdWU7Ci0gICAgICAgIEVYUEVDVF9UUlVFKEpTT046
OlZhbHVlOjpwYXJzZUpTT04oIiAxIiwgdmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX1RSVUUoSlNP
Tjo6VmFsdWU6OnBhcnNlSlNPTigiXHQxIiwgdmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX1RSVUUo
SlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiXG4xIiwgdmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX1RS
VUUoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiMSAiLCB2YWx1ZSkpOwotICAgICAgICBFWFBFQ1Rf
VFJVRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCIxXHQiLCB2YWx1ZSkpOwotICAgICAgICBFWFBF
Q1RfVFJVRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCIxXG4iLCB2YWx1ZSkpOwotICAgICAgICBF
WFBFQ1RfVFJVRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCIgMSAiLCB2YWx1ZSkpOwotICAgICAg
ICBFWFBFQ1RfVFJVRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCIge30gIiwgdmFsdWUpKTsKLSAg
ICAgICAgRVhQRUNUX1RSVUUoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiIFtdICIsIHZhbHVlKSk7
Ci0gICAgICAgIEVYUEVDVF9UUlVFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIlwiXFx4RkZcIiIs
IHZhbHVlKSk7Ci0gICAgICAgIEVYUEVDVF9UUlVFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIlwi
XFx1MTIzNFwiIiwgdmFsdWUpKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoSlNPTjo6VmFsdWU6OnBh
cnNlSlNPTigiIDEiKSk7CisgICAgICAgIEVYUEVDVF9UUlVFKEpTT046OlZhbHVlOjpwYXJzZUpT
T04oIlx0MSIpKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigi
XG4xIikpOworICAgICAgICBFWFBFQ1RfVFJVRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCIxICIp
KTsKKyAgICAgICAgRVhQRUNUX1RSVUUoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiMVx0IikpOwor
ICAgICAgICBFWFBFQ1RfVFJVRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCIxXG4iKSk7CisgICAg
ICAgIEVYUEVDVF9UUlVFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIiAxICIpKTsKKyAgICAgICAg
RVhQRUNUX1RSVUUoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiIHt9ICIpKTsKKyAgICAgICAgRVhQ
RUNUX1RSVUUoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiIFtdICIpKTsKKyAgICAgICAgRVhQRUNU
X1RSVUUoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiXCJcXHhGRlwiIikpOworICAgICAgICBFWFBF
Q1RfVFJVRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJcIlxcdTEyMzRcIiIpKTsKIAotICAgICAg
ICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiMSAxIiwgdmFsdWUpKTsKLSAg
ICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oInt9IHt9IiwgdmFsdWUp
KTsKLSAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIltdIFtdIiwg
dmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIlwi
XFwiLCB2YWx1ZSkpOwotICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNP
TigiXCJcXHhGIiwgdmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpw
YXJzZUpTT04oIlwiXFx4RlwiIiwgdmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046
OlZhbHVlOjpwYXJzZUpTT04oIlwiXFx4RiBcIiIsIHZhbHVlKSk7Ci0gICAgICAgIEVYUEVDVF9G
QUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJcIlxcdTEiLCB2YWx1ZSkpOwotICAgICAgICBF
WFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiXCJcXHUxXCIiLCB2YWx1ZSkpOwot
ICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiXCJcXHUxICAgXCIi
LCB2YWx1ZSkpOwotICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigi
XCJcXHUxMiIsIHZhbHVlKSk7Ci0gICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFy
c2VKU09OKCJcIlxcdTEyXCIiLCB2YWx1ZSkpOwotICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6
VmFsdWU6OnBhcnNlSlNPTigiXCJcXHUxMiAgXCIiLCB2YWx1ZSkpOwotICAgICAgICBFWFBFQ1Rf
RkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiXCJcXHUxMjMiLCB2YWx1ZSkpOwotICAgICAg
ICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiXCJcXHUxMjNcIiIsIHZhbHVl
KSk7Ci0gICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJcIlxcdTEy
MyBcIiIsIHZhbHVlKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VK
U09OKCIxIDEiKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09O
KCJ7fSB7fSIpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04o
IltdIFtdIikpOworICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigi
XCJcXCIpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIlwi
XFx4RiIpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIlwi
XFx4RlwiIikpOworICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigi
XCJcXHhGIFwiIikpOworICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNP
TigiXCJcXHUxIikpOworICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNP
TigiXCJcXHUxXCIiKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VK
U09OKCJcIlxcdTEgICBcIiIpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpw
YXJzZUpTT04oIlwiXFx1MTIiKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6
cGFyc2VKU09OKCJcIlxcdTEyXCIiKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1
ZTo6cGFyc2VKU09OKCJcIlxcdTEyICBcIiIpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046
OlZhbHVlOjpwYXJzZUpTT04oIlwiXFx1MTIzIikpOworICAgICAgICBFWFBFQ1RfRkFMU0UoSlNP
Tjo6VmFsdWU6OnBhcnNlSlNPTigiXCJcXHUxMjNcIiIpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNF
KEpTT046OlZhbHVlOjpwYXJzZUpTT04oIlwiXFx1MTIzIFwiIikpOwogICAgIH0KIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>408310</attachid>
            <date>2020-09-08 21:31:37 -0700</date>
            <delta_ts>2020-09-08 23:36:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216302-20200908213136.patch</filename>
            <type>text/plain</type>
            <size>1491227</size>
            <attacher name="Devin Rousso">hi</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDdhMGViNGY4YTlhMTBhMTkyZjg2MGNjMTc1MjI4
ZDNkMWRhMzQ0NDEuLjM1Y2IwMThmMTA5ZDk4MTRiODk3MmE2MDcwM2M4ZTliYTY3YmU4ODYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyOCBAQAorMjAyMC0wOS0wOCAgRGV2
aW4gUm91c3NvICA8ZHJvdXNzb0BhcHBsZS5jb20+CisKKyAgICAgICAgV2ViIEluc3BlY3Rvcjog
bW9kZXJuaXplIGdlbmVyYXRlZCBiYWNrZW5kIHByb3RvY29sIGNvZGUKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNjMwMgorICAgICAgICA8cmRhcjov
L3Byb2JsZW0vNjg1NDc2NDk+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgUHJldmlvdXNseSwgdGhlIGluc3BlY3RvciBwcm90b2NvbCB3YXMgZXhwcmVz
c2VkIGluIGNvZGUgaW4gYSBzb21ld2hhdCBjb25mdXNpbmcgd2F5OgorICAgICAgICAgLSB0aGUg
ZXJyb3Igc3RyaW5nIHdhcyB0aGUgZmlyc3QgYXJndW1lbnQKKyAgICAgICAgIC0gcmVxdWlyZWQg
cGFyYW1ldGVycyB3ZXJlIGBUYCBvciBgY29uc3QgVCZgCisgICAgICAgICAtIG9wdGlvbmFsIHBh
cmFtZXRlcnMgd2VyZSBgY29uc3QgVCpgCisgICAgICAgICAtIGVudW0gcGFyYW1ldGVycyB3ZXJl
IHRoZSB1bmRlcmx5aW5nIHR5cGUgcmVxdWlyaW5nIHRoZSBiYWNrZW5kIGRpc3BhdGNoZXIgaGFu
ZGxlciB0bworICAgICAgICAgICBwcm9jZXNzIGl0IGluc3RlYWQgb2YgaXQgYmVpbmcgcHJlcHJv
Y2Vzc2VkCisgICAgICAgICAtIHJlcXVpcmVkIHJldHVybnMgd2VyZSBgVCZgCisgICAgICAgICAt
IG9wdGlvbmFsIHJldHVybnMgd2VyZSBgVCpgCisgICAgICAgIFRoaXMgZG9lc24ndCByZWFsbHkg
bWFrZSBmb3IgZWFzeS9vYnZpb3VzIHJlYWRpbmcgb2YgY29kZSBzaW5jZSB0aGUgb3JkZXIgb2Yg
YXJndW1lbnRzIGlzCisgICAgICAgIG5vdCB3ZWlyZCAoZS5nLiBlcnJvciBzdHJpbmcgZmlyc3Qp
LCBhbmQgdGhhdCB0aGVyZSBhcmUgcmVmZXJlbmNlcy9wb2ludGVycyB0byBwcmltaXRpdmUKKyAg
ICAgICAgdHlwZXMuCisKKyAgICAgICAgVGhpcyBwYXRjaCBjbGVhbnMgdXAgdGhlIGdlbmVyYXRl
ZCBpbnNwZWN0b3IgcHJvdG9jb2wgY29kZSB0byBiZToKKyAgICAgICAgIC0gcmVxdWlyZWQgcGFy
YW1ldGVycyBhcmUgYFRgIG9yIGBSZWY8VD4mJmAKKyAgICAgICAgIC0gb3B0aW9uYWwgcGFyYW1l
dGVycyBhcmUgYE9wdGlvbmFsPFQ+JiZgIG9yIGBSZWZQdHI8VD4mJmAKKyAgICAgICAgIC0gZW51
bSBwYXJhbWV0ZXJzIGFyZSBwcmVwcm9jZXNzZWQgYW5kIHBhc3NlZCB0byB0aGUgYmFja2VuZCBk
aXNwYXRjaGVyIGhhbmRsZXIgaWYgdmFsaWQKKyAgICAgICAgIC0gc3luY2hyb25vdXMgY29tbWFu
ZHMgcmV0dXJuIGBFeHBlY3RlZDxYLCBFcnJvclN0cmluZz5gIHVzaW5nIHRoZSBzYW1lIHR5cGVz
L3J1bGVzIGFib3ZlCisgICAgICAgICAgIHdoZXJlIGBYYCBpcyBlaXRoZXIgYSBzaW5nbGUgcmV0
dXJuIG9yIGEgYHN0ZDo6dHVwbGVgIG9mIG11bHRpcGxlIHJldHVybnMKKworICAgICAgICBUaGUg
b25lIGV4Y2VwdGlvbiB0byB0aGUgYWJvdmUgaXMgYFN0cmluZ2AsIHdoaWNoIGlzIGFscmVhZHkg
YSB0cmktc3RhdGUgb2YgYG51bGxTdHJpbmcoKWAsCisgICAgICAgIGBlbXB0eVN0cmluZygpYCwg
YW5kIHNvbWV0aGluZyBzZXQsIHNvIHRoZXJlJ3Mgbm8gbmVlZCB0byB1c2UgYE9wdGlvbmFsPFN0
cmluZz5gLgorCisgICAgICAgIEFsc28gdXNlIGBQcm90b2NvbGAgb2JqZWN0cy9gdHlwZWRlZnNg
IHdoZXJldmVyIHBvc3NpYmxlIHRvIGZ1cnRoZXIgcmVsYXRlIHRoZSBwcm90b2NvbAorICAgICAg
ICBKU09OIGFuZCB0aGUgYWN0dWFsIGJhY2tlbmQgZGlzcGF0Y2hlciBoYW5kbGVyIGltcGxlbWVu
dGF0aW9uLgorCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0b3Iu
cHk6CisgICAgICAgIChHZW5lcmF0b3IuZ2VuZXJhdGVfaW5jbHVkZXNfZnJvbV9lbnRyaWVzKToK
KyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2NwcF9nZW5lcmF0b3JfdGVtcGxh
dGVzLnB5OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vY3BwX2dlbmVyYXRv
ci5weToKKyAgICAgICAgKENwcEdlbmVyYXRvci5oZWxwZXJzX25hbWVzcGFjZSk6CisgICAgICAg
IChDcHBHZW5lcmF0b3IuY3BwX2dldHRlcl9tZXRob2RfZm9yX3R5cGUpOgorICAgICAgICAoQ3Bw
R2VuZXJhdG9yLmNwcF9zZXR0ZXJfbWV0aG9kX2Zvcl90eXBlKToKKyAgICAgICAgKENwcEdlbmVy
YXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZSk6CisgICAgICAgIChDcHBHZW5lcmF0b3Iu
Y3BwX3R5cGVfZm9yX3R5cGVfbWVtYmVyX2FyZ3VtZW50KTogQWRkZWQuCisgICAgICAgIChDcHBH
ZW5lcmF0b3IuY3BwX3R5cGVfZm9yX2NvbW1hbmRfcGFyYW1ldGVyKTogQWRkZWQuCisgICAgICAg
IChDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX2NvbW1hbmRfcmV0dXJuX2RlY2xhcmF0aW9uKTog
QWRkZWQuCisgICAgICAgIChDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX2NvbW1hbmRfcmV0dXJu
X2FyZ3VtZW50KTogQWRkZWQuCisgICAgICAgIChDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX2V2
ZW50X3BhcmFtZXRlcik6IEFkZGVkLgorICAgICAgICAoQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zv
cl9lbnVtKTogQWRkZWQuCisgICAgICAgIChDcHBHZW5lcmF0b3Iuc2hvdWxkX21vdmVfYXJndW1l
bnQpOiBBZGRlZC4KKyAgICAgICAgKENwcEdlbmVyYXRvci5zaG91bGRfcmVsZWFzZV9hcmd1bWVu
dCk6IEFkZGVkLgorICAgICAgICAoQ3BwR2VuZXJhdG9yLnNob3VsZF9kZXJlZmVyZW5jZV9hcmd1
bWVudCk6IEFkZGVkLgorICAgICAgICAoQ3BwR2VuZXJhdG9yLmNwcF9wcm90b2NvbF90eXBlX2Zv
cl90eXBlX21lbWJlcik6IERlbGV0ZWQuCisgICAgICAgIChDcHBHZW5lcmF0b3IuY3BwX3R5cGVf
Zm9yX3VuY2hlY2tlZF9mb3JtYWxfaW5fcGFyYW1ldGVyKTogRGVsZXRlZC4KKyAgICAgICAgKENw
cEdlbmVyYXRvci5jcHBfdHlwZV9mb3JfY2hlY2tlZF9mb3JtYWxfZXZlbnRfcGFyYW1ldGVyKTog
RGVsZXRlZC4KKyAgICAgICAgKENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3JfdHlwZV9tZW1iZXIp
OiBEZWxldGVkLgorICAgICAgICAoQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl90eXBlX3dpdGhf
bmFtZSk6IERlbGV0ZWQuCisgICAgICAgIChDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX2Zvcm1h
bF9vdXRfcGFyYW1ldGVyKTogRGVsZXRlZC4KKyAgICAgICAgKENwcEdlbmVyYXRvci5jcHBfdHlw
ZV9mb3JfZm9ybWFsX2FzeW5jX3BhcmFtZXRlcik6IERlbGV0ZWQuCisgICAgICAgIChDcHBHZW5l
cmF0b3IuY3BwX3R5cGVfZm9yX3N0YWNrX2luX3BhcmFtZXRlcik6IERlbGV0ZWQuCisgICAgICAg
IChDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX3N0YWNrX291dF9wYXJhbWV0ZXIpOiBEZWxldGVk
LgorICAgICAgICAoQ3BwR2VuZXJhdG9yLmNwcF9hc3NlcnRpb25fbWV0aG9kX2Zvcl90eXBlX21l
bWJlcik6IERlbGV0ZWQuCisgICAgICAgIChDcHBHZW5lcmF0b3IuY3BwX2Fzc2VydGlvbl9tZXRo
b2RfZm9yX3R5cGVfbWVtYmVyLmFzc2VydGlvbl9tZXRob2RfZm9yX3R5cGUpOiBEZWxldGVkLgor
ICAgICAgICAoQ3BwR2VuZXJhdG9yLnNob3VsZF91c2Vfd3JhcHBlcl9mb3JfcmV0dXJuX3R5cGUp
OiBEZWxldGVkLgorICAgICAgICAoQ3BwR2VuZXJhdG9yLnNob3VsZF91c2VfcmVmZXJlbmNlc19m
b3JfdHlwZSk6IERlbGV0ZWQuCisgICAgICAgIChDcHBHZW5lcmF0b3Iuc2hvdWxkX3Bhc3NfYnlf
Y29weV9mb3JfcmV0dXJuX3R5cGUpOiBEZWxldGVkLgorICAgICAgICAqIGluc3BlY3Rvci9zY3Jp
cHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2FsdGVybmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVh
ZGVyLnB5OgorICAgICAgICAoQ3BwQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5l
cmF0b3IuX2dlbmVyYXRlX3NlY29uZGFyeV9oZWFkZXJfaW5jbHVkZXMpOgorICAgICAgICAoQ3Bw
QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRlX2hhbmRs
ZXJfZGVjbGFyYXRpb25fZm9yX2NvbW1hbmQpOgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRz
L2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHk6CisgICAg
ICAgIChDcHBCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvci5nZW5lcmF0ZV9vdXRwdXQp
OgorICAgICAgICAoQ3BwQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRl
X3NlY29uZGFyeV9oZWFkZXJfaW5jbHVkZXMpOgorICAgICAgICAoQ3BwQmFja2VuZERpc3BhdGNo
ZXJIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRlX2hhbmRsZXJfZGVjbGFyYXRpb25zX2Zvcl9kb21h
aW4pOgorICAgICAgICAoQ3BwQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IuX2dlbmVy
YXRlX2hhbmRsZXJfZGVjbGFyYXRpb25fZm9yX2NvbW1hbmQpOgorICAgICAgICAoQ3BwQmFja2Vu
ZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRlX2FzeW5jX2hhbmRsZXJfZGVjbGFy
YXRpb25fZm9yX2NvbW1hbmQpOgorICAgICAgICAoQ3BwQmFja2VuZERpc3BhdGNoZXJIZWFkZXJH
ZW5lcmF0b3IuX2dlbmVyYXRlX2Rpc3BhdGNoZXJfZGVjbGFyYXRpb25fZm9yX2NvbW1hbmQpOgor
ICAgICAgICAoQ3BwQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRlX2Fu
b255bW91c19lbnVtX2Zvcl9wYXJhbWV0ZXIpOiBEZWxldGVkLgorICAgICAgICAqIGluc3BlY3Rv
ci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1l
bnRhdGlvbi5weToKKyAgICAgICAgKENwcEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25H
ZW5lcmF0b3IuX2dlbmVyYXRlX3NlY29uZGFyeV9oZWFkZXJfaW5jbHVkZXMpOgorICAgICAgICAo
Q3BwQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfc21h
bGxfZGlzcGF0Y2hlcl9zd2l0Y2hfaW1wbGVtZW50YXRpb25fZm9yX2RvbWFpbik6CisgICAgICAg
IChDcHBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9h
c3luY19kaXNwYXRjaGVyX2NsYXNzX2Zvcl9kb21haW4pOgorICAgICAgICAoQ3BwQmFja2VuZERp
c3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfZGlzcGF0Y2hlcl9pbXBs
ZW1lbnRhdGlvbl9mb3JfY29tbWFuZCk6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29k
ZWdlbi9nZW5lcmF0ZV9jcHBfZnJvbnRlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHk6CisgICAgICAg
IChDcHBGcm9udGVuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRlX3NlY29uZGFy
eV9oZWFkZXJfaW5jbHVkZXMpOgorICAgICAgICAoQ3BwRnJvbnRlbmREaXNwYXRjaGVySGVhZGVy
R2VuZXJhdG9yLl9nZW5lcmF0ZV9kaXNwYXRjaGVyX2RlY2xhcmF0aW9uX2Zvcl9ldmVudCk6Cisg
ICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfZnJvbnRlbmRf
ZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weToKKyAgICAgICAgKENwcEZyb250ZW5kRGlzcGF0
Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9zZWNvbmRhcnlfaGVhZGVyX2lu
Y2x1ZGVzKToKKyAgICAgICAgKENwcEZyb250ZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2Vu
ZXJhdG9yLl9nZW5lcmF0ZV9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uX2Zvcl9ldmVudCk6Cisg
ICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfcHJvdG9jb2xf
dHlwZXNfaGVhZGVyLnB5OgorICAgICAgICAoQ3BwUHJvdG9jb2xUeXBlc0hlYWRlckdlbmVyYXRv
ci5fZ2VuZXJhdGVfc2Vjb25kYXJ5X2hlYWRlcl9pbmNsdWRlcyk6CisgICAgICAgICogaW5zcGVj
dG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfcHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50
YXRpb24ucHk6CisgICAgICAgIChDcHBQcm90b2NvbFR5cGVzSW1wbGVtZW50YXRpb25HZW5lcmF0
b3IuX2dlbmVyYXRlX3NlY29uZGFyeV9oZWFkZXJfaW5jbHVkZXMpOgorICAgICAgICAoQ3BwUHJv
dG9jb2xUeXBlc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9lbnVtX2NvbnZlcnNp
b25fbWV0aG9kc19mb3JfZG9tYWluKToKKyAgICAgICAgKENwcFByb3RvY29sVHlwZXNJbXBsZW1l
bnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfb3Blbl9maWVsZF9uYW1lcyk6CisgICAgICAgIChD
cHBQcm90b2NvbFR5cGVzSW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX2Fzc2VydGlv
bl9mb3JfZW51bSk6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0
ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHk6CisgICAgICAgIChPYmpDQmFja2Vu
ZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRlX29iamNfaGFuZGxlcl9kZWNsYXJh
dGlvbl9mb3JfY29tbWFuZCk6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9n
ZW5lcmF0ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weToKKyAgICAg
ICAgKE9iakNCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0
ZV9oYW5kbGVyX2ltcGxlbWVudGF0aW9uX2Zvcl9jb21tYW5kKToKKyAgICAgICAgKE9iakNCYWNr
ZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9zdWNjZXNzX2Js
b2NrX2Zvcl9jb21tYW5kKToKKyAgICAgICAgKE9iakNCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVu
dGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9zdWNjZXNzX2Jsb2NrX2Zvcl9jb21tYW5kLmFuZCk6
CisgICAgICAgIChPYmpDQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5f
Z2VuZXJhdGVfY29udmVyc2lvbnNfZm9yX2NvbW1hbmQuaW5fcGFyYW1fZXhwcmVzc2lvbik6Cisg
ICAgICAgIChPYmpDQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2Vu
ZXJhdGVfY29udmVyc2lvbnNfZm9yX2NvbW1hbmQpOgorICAgICAgICAoT2JqQ0JhY2tlbmREaXNw
YXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX2ludm9jYXRpb25fZm9yX2Nv
bW1hbmQpOgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2Jq
Y19mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5OgorICAgICAgICAoT2JqQ0Zy
b250ZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9ldmVudCk6
CisgICAgICAgIChPYmpDRnJvbnRlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3Iu
X2dlbmVyYXRlX2V2ZW50X291dF9wYXJhbWV0ZXJzKToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2Ny
aXB0cy9jb2RlZ2VuL29iamNfZ2VuZXJhdG9yX3RlbXBsYXRlcy5weToKKyAgICAgICAgKiBpbnNw
ZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL29iamNfZ2VuZXJhdG9yLnB5OgorICAgICAgICAoT2JqQ0dl
bmVyYXRvci5wcm90b2NvbF90eXBlX2Zvcl90eXBlKToKKyAgICAgICAgKE9iakNHZW5lcmF0b3Iu
b2JqY190eXBlX2Zvcl9wYXJhbV9pbnRlcm5hbCk6CisgICAgICAgIChPYmpDR2VuZXJhdG9yLm9i
amNfcHJvdG9jb2xfaW1wb3J0X2V4cHJlc3Npb25fZm9yX3BhcmFtZXRlcik6CisKKyAgICAgICAg
KiBpbnNwZWN0b3IvcHJvdG9jb2wvUGFnZS5qc29uOgorICAgICAgICBOb3cgdGhhdCBlbnVtcyBh
cmUgcHJvY2Vzc2VkIGJlZm9yZSBiZWluZyBwYXNzZWQgdG8gYmFja2VuZCBkaXNwYWNoZXIgaGFu
ZGxlcnMsIHRoZQorICAgICAgICBgYXBwZWFyYW5jZWAgcGFyYW1ldGVyIG9mIGBQYWdlLnNldEZv
cmNlZEFwcGVhcmFuY2VgIG11c3QgYmUgbWFya2VkIGBvcHRpb25hbGAgYXMKKyAgICAgICAgdGhl
cmUncyBubyB3YXkgZm9yIGl0IHRvIGFjY2VwdCBhbiBlbXB0eSBzdHJpbmcsIGFzIHRoYXQncyBu
b3QgcG9zc2libGUgZm9yIGFuIGVudW0uCisKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0lu
c3BlY3RvckFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBZ2Vu
dC5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBdWRpdEFnZW50Lmg6
CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBdWRpdEFnZW50LmNwcDoKKyAg
ICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNvbnNvbGVBZ2VudC5oOgorICAgICAg
ICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ29uc29sZUFnZW50LmNwcDoKKyAgICAgICAg
KiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuaDoKKyAgICAgICAgKiBp
bnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwOgorICAgICAgICAqIGlu
c3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9ySGVhcEFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9y
L2FnZW50cy9JbnNwZWN0b3JIZWFwQWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2Vu
dHMvSW5zcGVjdG9yUnVudGltZUFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9J
bnNwZWN0b3JSdW50aW1lQWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5z
cGVjdG9yU2NyaXB0UHJvZmlsZXJBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9yU2NyaXB0UHJvZmlsZXJBZ2VudC5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL2Fn
ZW50cy9JbnNwZWN0b3JUYXJnZXRBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9yVGFyZ2V0QWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSlNH
bG9iYWxPYmplY3RBdWRpdEFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9KU0ds
b2JhbE9iamVjdEF1ZGl0QWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSlNH
bG9iYWxPYmplY3REZWJ1Z2dlckFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9K
U0dsb2JhbE9iamVjdERlYnVnZ2VyQWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2Vu
dHMvSlNHbG9iYWxPYmplY3RSdW50aW1lQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdl
bnRzL0pTR2xvYmFsT2JqZWN0UnVudGltZUFnZW50LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3Iv
SlNHbG9iYWxPYmplY3RDb25zb2xlQ2xpZW50LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSlNH
bG9iYWxPYmplY3RJbnNwZWN0b3JDb250cm9sbGVyLmNwcDoKKyAgICAgICAgRWxpZGVkIGJhY2tl
bmQgZGlzcGF0Y2hlciBoYW5kbGVyIGNoYW5nZXMgZGVzY3JpYmUgYWJvdmUuCisKKyAgICAgICAg
KiBiaW5kaW5ncy9TY3JpcHRWYWx1ZS5jcHA6CisgICAgICAgIChJbnNwZWN0b3I6OmpzVG9JbnNw
ZWN0b3JWYWx1ZSk6CisgICAgICAgICogaW5zcGVjdG9yL0FzeW5jU3RhY2tUcmFjZS5oOgorICAg
ICAgICAqIGluc3BlY3Rvci9Bc3luY1N0YWNrVHJhY2UuY3BwOgorICAgICAgICAoSW5zcGVjdG9y
OjpBc3luY1N0YWNrVHJhY2U6OmJ1aWxkSW5zcGVjdG9yT2JqZWN0IGNvbnN0KToKKyAgICAgICAg
KiBpbnNwZWN0b3IvQ29uc29sZU1lc3NhZ2UuY3BwOgorICAgICAgICAoSW5zcGVjdG9yOjpDb25z
b2xlTWVzc2FnZTo6YWRkVG9Gcm9udGVuZCk6CisgICAgICAgICogaW5zcGVjdG9yL0luamVjdGVk
U2NyaXB0QmFzZS5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbmplY3RlZFNjcmlwdEJhc2UuY3Bw
OgorICAgICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdEJhc2U6Om1ha2VFdmFsQ2FsbCk6
CisgICAgICAgIChJbnNwZWN0b3I6OkluamVjdGVkU2NyaXB0QmFzZTo6Y2hlY2tDYWxsUmVzdWx0
KToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHRCYXNlOjpjaGVja0FzeW5jQ2Fs
bFJlc3VsdCk6CisgICAgICAgICogaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0Lmg6CisgICAgICAg
ICogaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0LmNwcDoKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5q
ZWN0ZWRTY3JpcHQ6OmV4ZWN1dGUpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlw
dDo6ZXZhbHVhdGUpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdDo6Y2FsbEZ1
bmN0aW9uT24pOgorICAgICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdDo6ZXZhbHVhdGVP
bkNhbGxGcmFtZSk6CisgICAgICAgIChJbnNwZWN0b3I6OkluamVjdGVkU2NyaXB0OjpnZXRGdW5j
dGlvbkRldGFpbHMpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdDo6ZnVuY3Rp
b25EZXRhaWxzKToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHQ6OmdldFByZXZp
ZXcpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdDo6Z2V0UHJvcGVydGllcyk6
CisgICAgICAgIChJbnNwZWN0b3I6OkluamVjdGVkU2NyaXB0OjpnZXREaXNwbGF5YWJsZVByb3Bl
cnRpZXMpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdDo6Z2V0SW50ZXJuYWxQ
cm9wZXJ0aWVzKToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHQ6OmdldENvbGxl
Y3Rpb25FbnRyaWVzKToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHQ6OnNhdmVS
ZXN1bHQpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdDo6d3JhcENhbGxGcmFt
ZXMgY29uc3QpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdDo6d3JhcE9iamVj
dCBjb25zdCk6CisgICAgICAgIChJbnNwZWN0b3I6OkluamVjdGVkU2NyaXB0Ojp3cmFwSlNPTlN0
cmluZyBjb25zdCk6CisgICAgICAgIChJbnNwZWN0b3I6OkluamVjdGVkU2NyaXB0Ojp3cmFwVGFi
bGUgY29uc3QpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdDo6cHJldmlld1Zh
bHVlIGNvbnN0KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmNw
cDoKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOjppbmplY3RlZFNj
cmlwdEZvck9iamVjdElkKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXIuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXIuY3BwOgorICAgICAgICAoSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tC
YXNlOjpzZW5kU3VjY2Vzcyk6CisgICAgICAgIChJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVy
OjpkaXNwYXRjaCk6CisgICAgICAgIChJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyOjpzZW5k
UmVzcG9uc2UpOgorICAgICAgICAoSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0UHJv
cGVydHlWYWx1ZSk6CisgICAgICAgIChJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyOjpnZXRC
b29sZWFuKToKKyAgICAgICAgKEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXI6OmdldEludGVn
ZXIpOgorICAgICAgICAoSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0RG91YmxlKToK
KyAgICAgICAgKEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXI6OmdldFN0cmluZyk6CisgICAg
ICAgIChJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyOjpnZXRWYWx1ZSk6CisgICAgICAgIChJ
bnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyOjpnZXRPYmplY3QpOgorICAgICAgICAoSW5zcGVj
dG9yOjpCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0QXJyYXkpOgorICAgICAgICAoSW5zcGVjdG9yOjpj
YXN0VG9JbnRlZ2VyKTogRGVsZXRlZC4KKyAgICAgICAgKEluc3BlY3Rvcjo6Y2FzdFRvTnVtYmVy
KTogRGVsZXRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5o
OgorICAgICAgICAoSW5zcGVjdG9yOjpQcm90b2NvbDo6QmluZGluZ1RyYWl0czxKU09OOjpBcnJh
eU9mPFQ+Pjo6cnVudGltZUNhc3QpOgorICAgICAgICAoSW5zcGVjdG9yOjpQcm90b2NvbDo6Qmlu
ZGluZ1RyYWl0czxKU09OOjpBcnJheU9mPFQ+Pjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUp
OgorICAgICAgICAqIGluc3BlY3Rvci9yZW1vdGUvc29ja2V0L1JlbW90ZUluc3BlY3RvckNvbm5l
Y3Rpb25DbGllbnQuY3BwOgorICAgICAgICAoSW5zcGVjdG9yOjpSZW1vdGVJbnNwZWN0b3JDb25u
ZWN0aW9uQ2xpZW50OjpleHRyYWN0RXZlbnQpOgorICAgICAgICAqIHJ1bnRpbWUvVHlwZVNldC5j
cHA6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVNoYXBlOjppbnNwZWN0b3JSZXByZXNlbnRhdGlv
bik6CisgICAgICAgIGBKU09OYCBjbGFzc2VzIG5vdyB1c2UgYFJlZiYmYCB3aGVyZXZlciBwb3Nz
aWJsZSBhbmQgYE9wdGlvbmFsYCBpbnN0ZWFkIG9mIGFuIG91dCBwYXJhbWV0ZXIKKyAgICAgICAg
Zm9yIGBnZXQqYC9gYXMqYCBzbyB0aGF0IHZhbHVlcyBjYW4gYmUgbW9yZSBlYXNpbHkgbWFuaXB1
bGF0ZWQgYW5kIGNhbiBiZSBjb25maWRlbnRseSBrbm93bgorICAgICAgICB0byBleGlzdC4KKwor
ICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2VudW0tdmFsdWVzLmpzb246CisgICAg
ICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvY29tbWFuZC10YXJnZXRUeXBl
LW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uLXJlc3VsdDoKKyAgICAgICAgKiBp
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9jb21tYW5kcy13aXRoLWFzeW5jLWF0dHJp
YnV0ZS5qc29uLXJlc3VsdDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBl
Y3RlZC9jb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbi1y
ZXN1bHQ6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZGVmaW5p
dGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbi1yZXN1bHQ6CisgICAgICAgICogaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5qc29uLXJlc3Vs
dDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9kb21haW4tdGFy
Z2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbi1yZXN1bHQ6CisgICAg
ICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZG9tYWluLXRhcmdldFR5cGVz
Lmpzb24tcmVzdWx0OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVk
L2RvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbi1yZXN1bHQ6CisgICAgICAg
ICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZW51bS12YWx1ZXMuanNvbi1yZXN1
bHQ6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZXZlbnQtdGFy
Z2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbi1yZXN1bHQ6CisgICAg
ICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZXZlbnRzLXdpdGgtb3B0aW9u
YWwtcGFyYW1ldGVycy5qc29uLXJlc3VsdDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9leHBlY3RlZC9nZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbi1y
ZXN1bHQ6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvc2FtZS10
eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbi1yZXN1bHQ6CisgICAgICAgICogaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpz
b24tcmVzdWx0OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3No
b3VsZC1zdHJpcC1jb21tZW50cy5qc29uLXJlc3VsdDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5
cGUuanNvbi1yZXN1bHQ6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0
ZWQvdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24tcmVzdWx0OgorICAgICAgICAqIGlu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tZW51bS10eXBl
Lmpzb24tcmVzdWx0OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVk
L3R5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbi1yZXN1bHQ6CisgICAgICAgICogaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0
cy5qc29uLXJlc3VsdDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3Rl
ZC90eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0OgorICAgICAgICAqIGluc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3ZlcnNpb24uanNvbi1yZXN1bHQ6CisKIDIwMjAt
MDktMDUgIERldmluIFJvdXNzbyAgPGRyb3Vzc29AYXBwbGUuY29tPgogCiAgICAgICAgIFdlYiBJ
bnNwZWN0b3I6IGFsbG93IERPTSBicmVha3BvaW50cyB0byBiZSBjb25maWd1cmVkCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGQw
YjUxZWRiODA2MDg2MGI3YmIxM2MwNjJhNTAzMTFmYTQyNGYxZGEuLjIwMzZiZDMyOWQzMTAxMzk3
Yjg5YmFkNjQyYjhiOTYwNTkwNDZlNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTIgQEAKKzIwMjAtMDktMDgg
IERldmluIFJvdXNzbyAgPGRyb3Vzc29AYXBwbGUuY29tPgorCisgICAgICAgIFdlYiBJbnNwZWN0
b3I6IG1vZGVybml6ZSBnZW5lcmF0ZWQgYmFja2VuZCBwcm90b2NvbCBjb2RlCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTYzMDIKKyAgICAgICAgPHJk
YXI6Ly9wcm9ibGVtLzY4NTQ3NjQ5PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogd3RmL0pTT05WYWx1ZXMuaDoKKyAgICAgICAgKFdURjo6SlNPTklt
cGw6Ok9iamVjdEJhc2U6OnNldFZhbHVlKToKKyAgICAgICAgKFdURjo6SlNPTkltcGw6Ok9iamVj
dEJhc2U6OnNldE9iamVjdCk6CisgICAgICAgIChXVEY6OkpTT05JbXBsOjpPYmplY3RCYXNlOjpz
ZXRBcnJheSk6CisgICAgICAgIChXVEY6OkpTT05JbXBsOjpBcnJheUJhc2U6OnB1c2hWYWx1ZSk6
CisgICAgICAgIChXVEY6OkpTT05JbXBsOjpBcnJheUJhc2U6OnB1c2hPYmplY3QpOgorICAgICAg
ICAoV1RGOjpKU09OSW1wbDo6QXJyYXlCYXNlOjpwdXNoQXJyYXkpOgorICAgICAgICAoV1RGOjpK
U09OSW1wbDo6QXJyYXlPZjo6QXJyYXlPZik6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OkpTT05J
bXBsOjpBcnJheU9mOjpjYXN0ZWRBcnJheSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OkpTT05J
bXBsOjpBcnJheU9mOjphZGRJdGVtKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6SlNPTkltcGw6
OkFycmF5T2Y6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgICogd3RmL0pTT05WYWx1ZXMuY3Bw
OgorICAgICAgICAoV1RGOjpKU09OSW1wbDo6VmFsdWU6OmFzVmFsdWUpOgorICAgICAgICAoV1RG
OjpKU09OSW1wbDo6VmFsdWU6OmFzT2JqZWN0KToKKyAgICAgICAgKFdURjo6SlNPTkltcGw6OlZh
bHVlOjphc0FycmF5KToKKyAgICAgICAgKFdURjo6SlNPTkltcGw6OlZhbHVlOjpwYXJzZUpTT04p
OgorICAgICAgICAoV1RGOjpKU09OSW1wbDo6VmFsdWU6OmFzQm9vbGVhbiBjb25zdCk6CisgICAg
ICAgIChXVEY6OkpTT05JbXBsOjpWYWx1ZTo6YXNEb3VibGUgY29uc3QpOgorICAgICAgICAoV1RG
OjpKU09OSW1wbDo6VmFsdWU6OmFzSW50ZWdlciBjb25zdCk6CisgICAgICAgIChXVEY6OkpTT05J
bXBsOjpWYWx1ZTo6YXNTdHJpbmcgY29uc3QpOgorICAgICAgICAoV1RGOjpKU09OSW1wbDo6T2Jq
ZWN0QmFzZTo6YXNPYmplY3QpOgorICAgICAgICAoV1RGOjpKU09OSW1wbDo6T2JqZWN0QmFzZTo6
bWVtb3J5Q29zdCBjb25zdCk6CisgICAgICAgIChXVEY6OkpTT05JbXBsOjpPYmplY3RCYXNlOjpn
ZXRCb29sZWFuIGNvbnN0KToKKyAgICAgICAgKFdURjo6SlNPTkltcGw6Ok9iamVjdEJhc2U6Omdl
dERvdWJsZSBjb25zdCk6CisgICAgICAgIChXVEY6OkpTT05JbXBsOjpPYmplY3RCYXNlOjpnZXRJ
bnRlZ2VyIGNvbnN0KToKKyAgICAgICAgKFdURjo6SlNPTkltcGw6Ok9iamVjdEJhc2U6OmdldFN0
cmluZyBjb25zdCk6CisgICAgICAgIChXVEY6OkpTT05JbXBsOjpPYmplY3RCYXNlOjpnZXRPYmpl
Y3QgY29uc3QpOgorICAgICAgICAoV1RGOjpKU09OSW1wbDo6T2JqZWN0QmFzZTo6Z2V0QXJyYXkg
Y29uc3QpOgorICAgICAgICAoV1RGOjpKU09OSW1wbDo6T2JqZWN0QmFzZTo6Z2V0VmFsdWUgY29u
c3QpOgorICAgICAgICAoV1RGOjpKU09OSW1wbDo6T2JqZWN0QmFzZTo6T2JqZWN0QmFzZSk6Cisg
ICAgICAgIChXVEY6OkpTT05JbXBsOjpBcnJheUJhc2U6OmFzQXJyYXkpOgorICAgICAgICAoV1RG
OjpKU09OSW1wbDo6QXJyYXlCYXNlOjp3cml0ZUpTT04gY29uc3QpOgorICAgICAgICAoV1RGOjpK
U09OSW1wbDo6QXJyYXlCYXNlOjpBcnJheUJhc2UpOgorICAgICAgICAoV1RGOjpKU09OSW1wbDo6
QXJyYXlCYXNlOjpnZXQgY29uc3QpOgorICAgICAgICAoV1RGOjpKU09OSW1wbDo6QXJyYXlCYXNl
OjptZW1vcnlDb3N0IGNvbnN0KToKKyAgICAgICAgKFdURjo6SlNPTkltcGw6Ok9iamVjdEJhc2U6
Om9wZW5BY2Nlc3NvcnMpOiBEZWxldGVkLgorICAgICAgICBVc2UgYFJlZiYmYCB3aGVyZXZlciBw
b3NzaWJsZSBhbmQgYE9wdGlvbmFsYCBpbnN0ZWFkIG9mIGFuIG91dCBwYXJhbWV0ZXIgZm9yIGBn
ZXQqYC9gYXMqYAorICAgICAgICBzbyB0aGF0IHZhbHVlcyBjYW4gYmUgbW9yZSBlYXNpbHkgbWFu
aXB1bGF0ZWQgYW5kIGNhbiBiZSBjb25maWRlbnRseSBhc3N1bWVkIHRvIGV4aXN0LgorICAgICAg
ICBSZW1vdmUgdW51c2VkIG92ZXJsb2FkcyBhbmQgYWxsb3cgc3ViY2xhc3NlcyB0byBjYWxsIGBh
cypgIGluc3RlYWQgb2YgYG9wZW5BY2Nlc3NvcnNgIGFzCisgICAgICAgIHRoZXkncmUgZWZmZWN0
aXZlbHkgdGhlIHNhbWUgdGhpbmcuCisKIDIwMjAtMDktMDUgIE15bGVzIEMuIE1heGZpZWxkICA8
bW1heGZpZWxkQGFwcGxlLmNvbT4KIAogICAgICAgICBbQ29jb2FdIENURm9udElzU3lzdGVtVUlG
b250KCkgaXMgZmFzdGVyIHRoYW4gQ1RGb250RGVzY3JpcHRvcklzU3lzdGVtVUlGb250KCkvQ1RG
b250Q29weUZvbnREZXNjcmlwdG9yKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAwN2E1MzVkNGQ4NGMzZTlhYmY4
YjI1ZjBlYWE2ZDI4YmVlMzIzYjlkLi40NGUwOWNiMmU5Y2MxMjE0NGEzZWEyYzdjNzFjYzU1NTBh
YTc0MzgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTM5IEBACisyMDIwLTA5LTA4ICBEZXZpbiBS
b3Vzc28gIDxkcm91c3NvQGFwcGxlLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBtb2Rl
cm5pemUgZ2VuZXJhdGVkIGJhY2tlbmQgcHJvdG9jb2wgY29kZQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE2MzAyCisgICAgICAgIDxyZGFyOi8vcHJv
YmxlbS82ODU0NzY0OT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBQcmV2aW91c2x5LCB0aGUgaW5zcGVjdG9yIHByb3RvY29sIHdhcyBleHByZXNzZWQg
aW4gY29kZSBpbiBhIHNvbWV3aGF0IGNvbmZ1c2luZyB3YXk6CisgICAgICAgICAtIHRoZSBlcnJv
ciBzdHJpbmcgd2FzIHRoZSBmaXJzdCBhcmd1bWVudAorICAgICAgICAgLSByZXF1aXJlZCBwYXJh
bWV0ZXJzIHdlcmUgYFRgIG9yIGBjb25zdCBUJmAKKyAgICAgICAgIC0gb3B0aW9uYWwgcGFyYW1l
dGVycyB3ZXJlIGBjb25zdCBUKmAKKyAgICAgICAgIC0gZW51bSBwYXJhbWV0ZXJzIHdlcmUgdGhl
IHVuZGVybHlpbmcgdHlwZSByZXF1aXJpbmcgdGhlIGJhY2tlbmQgZGlzcGF0Y2hlciBoYW5kbGVy
IHRvCisgICAgICAgICAgIHByb2Nlc3MgaXQgaW5zdGVhZCBvZiBpdCBiZWluZyBwcmVwcm9jZXNz
ZWQKKyAgICAgICAgIC0gcmVxdWlyZWQgcmV0dXJucyB3ZXJlIGBUJmAKKyAgICAgICAgIC0gb3B0
aW9uYWwgcmV0dXJucyB3ZXJlIGBUKmAKKyAgICAgICAgVGhpcyBkb2Vzbid0IHJlYWxseSBtYWtl
IGZvciBlYXN5L29idmlvdXMgcmVhZGluZyBvZiBjb2RlIHNpbmNlIHRoZSBvcmRlciBvZiBhcmd1
bWVudHMgaXMKKyAgICAgICAgbm90IHdlaXJkIChlLmcuIGVycm9yIHN0cmluZyBmaXJzdCksIGFu
ZCB0aGF0IHRoZXJlIGFyZSByZWZlcmVuY2VzL3BvaW50ZXJzIHRvIHByaW1pdGl2ZQorICAgICAg
ICB0eXBlcy4KKworICAgICAgICBUaGlzIHBhdGNoIGNsZWFucyB1cCB0aGUgZ2VuZXJhdGVkIGlu
c3BlY3RvciBwcm90b2NvbCBjb2RlIHRvIGJlOgorICAgICAgICAgLSByZXF1aXJlZCBwYXJhbWV0
ZXJzIGFyZSBgVGAgb3IgYFJlZjxUPiYmYAorICAgICAgICAgLSBvcHRpb25hbCBwYXJhbWV0ZXJz
IGFyZSBgT3B0aW9uYWw8VD4mJmAgb3IgYFJlZlB0cjxUPiYmYAorICAgICAgICAgLSBlbnVtIHBh
cmFtZXRlcnMgYXJlIHByZXByb2Nlc3NlZCBhbmQgcGFzc2VkIHRvIHRoZSBiYWNrZW5kIGRpc3Bh
dGNoZXIgaGFuZGxlciBpZiB2YWxpZAorICAgICAgICAgLSBzeW5jaHJvbm91cyBjb21tYW5kcyBy
ZXR1cm4gYEV4cGVjdGVkPFgsIEVycm9yU3RyaW5nPmAgdXNpbmcgdGhlIHNhbWUgdHlwZXMvcnVs
ZXMgYWJvdmUKKyAgICAgICAgICAgd2hlcmUgYFhgIGlzIGVpdGhlciBhIHNpbmdsZSByZXR1cm4g
b3IgYSBgc3RkOjp0dXBsZWAgb2YgbXVsdGlwbGUgcmV0dXJucworCisgICAgICAgIFRoZSBvbmUg
ZXhjZXB0aW9uIHRvIHRoZSBhYm92ZSBpcyBgU3RyaW5nYCwgd2hpY2ggaXMgYWxyZWFkeSBhIHRy
aS1zdGF0ZSBvZiBgbnVsbFN0cmluZygpYCwKKyAgICAgICAgYGVtcHR5U3RyaW5nKClgLCBhbmQg
c29tZXRoaW5nIHNldCwgc28gdGhlcmUncyBubyBuZWVkIHRvIHVzZSBgT3B0aW9uYWw8U3RyaW5n
PmAuCisKKyAgICAgICAgQWxzbyB1c2UgYFByb3RvY29sYCBvYmplY3RzL2B0eXBlZGVmc2Agd2hl
cmV2ZXIgcG9zc2libGUgdG8gZnVydGhlciByZWxhdGUgdGhlIHByb3RvY29sCisgICAgICAgIEpT
T04gYW5kIHRoZSBhY3R1YWwgYmFja2VuZCBkaXNwYXRjaGVyIGhhbmRsZXIgaW1wbGVtZW50YXRp
b24uCisKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQXVkaXRSZXNvdXJjZXNPYmplY3Qu
Y3BwOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDYW52YXMuaDoKKyAgICAgICAgKiBp
bnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzLmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVj
dG9yQ29udHJvbGxlci5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hl
ZXQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHA6CisgICAg
ICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBbmltYXRpb25BZ2VudC5oOgorICAgICAg
ICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQW5pbWF0aW9uQWdlbnQuY3BwOgorICAgICAg
ICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50Lmg6Cisg
ICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQu
Y3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ1BVUHJvZmlsZXJBZ2Vu
dC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ1BVUHJvZmlsZXJBZ2Vu
dC5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDU1NBZ2VudC5oOgor
ICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwOgorICAgICAg
ICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ2FudmFzQWdlbnQuaDoKKyAgICAgICAgKiBp
bnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNhbnZhc0FnZW50LmNwcDoKKyAgICAgICAgKiBpbnNw
ZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2Fn
ZW50cy9JbnNwZWN0b3JET01BZ2VudC5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9J
bnNwZWN0b3JET01EZWJ1Z2dlckFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9J
bnNwZWN0b3JET01EZWJ1Z2dlckFnZW50LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRz
L0luc3BlY3RvckRPTVN0b3JhZ2VBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRz
L0luc3BlY3RvckRhdGFiYXNlQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0lu
c3BlY3RvckRhdGFiYXNlQWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5z
cGVjdG9ySW5kZXhlZERCQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3Bl
Y3RvckluZGV4ZWREQkFnZW50LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3Bl
Y3RvckxheWVyVHJlZUFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0
b3JMYXllclRyZWVBZ2VudC5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0
b3JNZW1vcnlBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yTWVt
b3J5QWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yTmV0d29y
a0FnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JOZXR3b3JrQWdl
bnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUGFnZUFnZW50Lmg6
CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwOgorICAg
ICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5oOgorICAgICAg
ICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5jcHA6CisgICAgICAg
ICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JXb3JrZXJBZ2VudC5oOgorICAgICAgICAqIGlu
c3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yV29ya2VyQWdlbnQuY3BwOgorICAgICAgICAqIGluc3Bl
Y3Rvci9hZ2VudHMvV2ViQ29uc29sZUFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50
cy9XZWJEZWJ1Z2dlckFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9XZWJEZWJ1
Z2dlckFnZW50LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL1dlYkhlYXBBZ2VudC5o
OgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvV2ViSGVhcEFnZW50LmNwcDoKKyAgICAgICAg
KiBpbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZUF1ZGl0QWdlbnQuaDoKKyAgICAgICAgKiBpbnNw
ZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZUF1ZGl0QWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rv
ci9hZ2VudHMvcGFnZS9QYWdlQ29uc29sZUFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2Fn
ZW50cy9wYWdlL1BhZ2VDb25zb2xlQWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2Vu
dHMvcGFnZS9QYWdlRE9NRGVidWdnZXJBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2Vu
dHMvcGFnZS9QYWdlRE9NRGVidWdnZXJBZ2VudC5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL2Fn
ZW50cy9wYWdlL1BhZ2VEZWJ1Z2dlckFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50
cy9wYWdlL1BhZ2VEZWJ1Z2dlckFnZW50LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRz
L3BhZ2UvUGFnZUhlYXBBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvcGFnZS9Q
YWdlSGVhcEFnZW50LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZU5l
dHdvcmtBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlTmV0d29y
a0FnZW50LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZVJ1bnRpbWVB
Z2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlUnVudGltZUFnZW50
LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9TZXJ2aWNlV29ya2VyQWdl
bnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9TZXJ2aWNlV29ya2VyQWdl
bnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlckF1ZGl0QWdl
bnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJDb25zb2xlQWdl
bnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJBdWRpdEFnZW50
LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJET01EZWJ1Z2dl
ckFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2VyRE9NRGVi
dWdnZXJBZ2VudC5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2Vy
RGVidWdnZXJBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtl
ckRlYnVnZ2VyQWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dv
cmtlck5ldHdvcmtBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dv
cmtlck5ldHdvcmtBZ2VudC5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy93b3JrZXIv
V29ya2VyUnVudGltZUFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy93b3JrZXIv
V29ya2VyUnVudGltZUFnZW50LmNwcDoKKyAgICAgICAgRWxpZGVkIGJhY2tlbmQgZGlzcGF0Y2hl
ciBoYW5kbGVyIGNoYW5nZXMgZGVzY3JpYmUgYWJvdmUuCisKKyAgICAgICAgKiBpbnNwZWN0b3Iv
Q29tbWFuZExpbmVBUElIb3N0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbW1hbmRMaW5lQVBJ
SG9zdDo6aW5zcGVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDb21tYW5kTGluZUFQSUhvc3Q6OmNs
ZWFyQ29uc29sZU1lc3NhZ2VzKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRl
bmRIb3N0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnZhbHVlUGF5bG9hZEZyb21KU09OVmFsdWUp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRIb3N0Ojpsb2dEaWFnbm9zdGlj
RXZlbnQpOgorICAgICAgICAqIGluc3BlY3Rvci9UaW1lbGluZVJlY29yZEZhY3RvcnkuaDoKKyAg
ICAgICAgKiBpbnNwZWN0b3IvVGltZWxpbmVSZWNvcmRGYWN0b3J5LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6YXBwZW5kTGF5b3V0Um9vdCk6CisgICAgICAg
ICogTW9kdWxlcy9hcHBsaWNhdGlvbm1hbmlmZXN0L0FwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25NYW5pZmVzdFBhcnNlcjo6cGFyc2VN
YW5pZmVzdCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyOjpw
YXJzZVN0YXJ0VVJMKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uTWFuaWZlc3RQYXJz
ZXI6OnBhcnNlRGlzcGxheSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbk1hbmlmZXN0
UGFyc2VyOjpwYXJzZVNjb3BlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uTWFuaWZl
c3RQYXJzZXI6OnBhcnNlR2VuZXJpY1N0cmluZyk6CisgICAgICAgICogTW9kdWxlcy9lbmNyeXB0
ZWRtZWRpYS9Jbml0RGF0YVJlZ2lzdHJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmV4dHJhY3RL
ZXlJRHNLZXlpZHMpOgorICAgICAgICAqIHBsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NETVV0aWxp
dGllcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDRE1VdGlsaXRpZXM6OnBhcnNlSlNPTk9iamVj
dCk6CisgICAgICAgICogcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJL
ZXkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VMaWNlbnNlRm9ybWF0KToKKyAgICAgICAg
KFdlYkNvcmU6OnBhcnNlTGljZW5zZVJlbGVhc2VBY2tub3dsZWRnZW1lbnRGb3JtYXQpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9DRE1GYWlyUGxheVN0cmVhbWlu
Zy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpleHRyYWN0U2luZkRhdGEpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NETUluc3RhbmNlRmFpclBsYXlTdHJl
YW1pbmdBVkZPYmpDLm1tOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VKU09OVmFsdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VTZXNzaW9uRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpD
Ojp1cGRhdGVMaWNlbnNlKToKKyAgICAgICAgYEpTT05gIGNsYXNzZXMgbm93IHVzZSBgUmVmJiZg
IHdoZXJldmVyIHBvc3NpYmxlIGFuZCBgT3B0aW9uYWxgIGluc3RlYWQgb2YgYW4gb3V0IHBhcmFt
ZXRlcgorICAgICAgICBmb3IgYGdldCpgL2BhcypgIHNvIHRoYXQgdmFsdWVzIGNhbiBiZSBtb3Jl
IGVhc2lseSBtYW5pcHVsYXRlZCBhbmQgY2FuIGJlIGNvbmZpZGVudGx5IGtub3duCisgICAgICAg
IHRvIGV4aXN0LgorCiAyMDIwLTA5LTA1ICBEZXZpbiBSb3Vzc28gIDxkcm91c3NvQGFwcGxlLmNv
bT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBhbGxvdyBET00gYnJlYWtwb2ludHMgdG8gYmUg
Y29uZmlndXJlZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkRyaXZlci9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViRHJpdmVyL0NoYW5nZUxvZwppbmRleCBkYTNiNjRjYWQ1ZWUxNDk1NjY0YzdmOGNiMGY3
ODQ4OTlmNTc4ODk0Li4yNjc1YTk3NzMyYzc1ZTUxOWUzNWE4MTEwOTg5ZmZjOWNjZDI3ODAyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViRHJpdmVyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViRHJp
dmVyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExMSBAQAorMjAyMC0wOS0wOCAgRGV2aW4gUm91c3Nv
ICA8ZHJvdXNzb0BhcHBsZS5jb20+CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogbW9kZXJuaXpl
IGdlbmVyYXRlZCBiYWNrZW5kIHByb3RvY29sIGNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNjMwMgorICAgICAgICA8cmRhcjovL3Byb2JsZW0v
Njg1NDc2NDk+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBDb21tYW5kUmVzdWx0LmNwcDoKKyAgICAgICAgKFdlYkRyaXZlcjo6Q29tbWFuZFJlc3Vs
dDo6Q29tbWFuZFJlc3VsdCk6CisgICAgICAgICogU2Vzc2lvbi5jcHA6CisgICAgICAgIChXZWJE
cml2ZXI6OmZpcnN0V2luZG93SGFuZGxlSW5SZXN1bHQpOgorICAgICAgICAoV2ViRHJpdmVyOjpT
ZXNzaW9uOjpnZXRUaW1lb3V0cyk6CisgICAgICAgIChXZWJEcml2ZXI6OlNlc3Npb246OmNyZWF0
ZVRvcExldmVsQnJvd3NpbmdDb250ZXh0KToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6
aGFuZGxlVXNlclByb21wdHMpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjpyZXBvcnRV
bmV4cGVjdGVkQWxlcnRPcGVuKToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6Z28pOgor
ICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjpnZXRDdXJyZW50VVJMKToKKyAgICAgICAgKFdl
YkRyaXZlcjo6U2Vzc2lvbjo6YmFjayk6CisgICAgICAgIChXZWJEcml2ZXI6OlNlc3Npb246OmZv
cndhcmQpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjpyZWZyZXNoKToKKyAgICAgICAg
KFdlYkRyaXZlcjo6U2Vzc2lvbjo6Z2V0VGl0bGUpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNz
aW9uOjpnZXRXaW5kb3dIYW5kbGUpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjpjbG9z
ZVRvcExldmVsQnJvd3NpbmdDb250ZXh0KToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6
c3dpdGNoVG9XaW5kb3cpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjpnZXRXaW5kb3dI
YW5kbGVzKToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6bmV3V2luZG93KToKKyAgICAg
ICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6c3dpdGNoVG9GcmFtZSk6CisgICAgICAgIChXZWJEcml2
ZXI6OlNlc3Npb246OnN3aXRjaFRvUGFyZW50RnJhbWUpOgorICAgICAgICAoV2ViRHJpdmVyOjpT
ZXNzaW9uOjpnZXRUb3BsZXZlbEJyb3dzaW5nQ29udGV4dFJlY3QpOgorICAgICAgICAoV2ViRHJp
dmVyOjpTZXNzaW9uOjpzZXRXaW5kb3dSZWN0KToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lv
bjo6bWF4aW1pemVXaW5kb3cpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjptaW5pbWl6
ZVdpbmRvdyk6CisgICAgICAgIChXZWJEcml2ZXI6OlNlc3Npb246OmZ1bGxzY3JlZW5XaW5kb3cp
OgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjpjcmVhdGVFbGVtZW50KToKKyAgICAgICAg
KFdlYkRyaXZlcjo6U2Vzc2lvbjo6ZXh0cmFjdEVsZW1lbnRJRCk6CisgICAgICAgIChXZWJEcml2
ZXI6OlNlc3Npb246OmNvbXB1dGVFbGVtZW50TGF5b3V0KToKKyAgICAgICAgKFdlYkRyaXZlcjo6
U2Vzc2lvbjo6ZmluZEVsZW1lbnRzKToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6Z2V0
QWN0aXZlRWxlbWVudCk6CisgICAgICAgIChXZWJEcml2ZXI6OlNlc3Npb246OmlzRWxlbWVudFNl
bGVjdGVkKToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6Z2V0RWxlbWVudFRleHQpOgor
ICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjpnZXRFbGVtZW50VGFnTmFtZSk6CisgICAgICAg
IChXZWJEcml2ZXI6OlNlc3Npb246OmdldEVsZW1lbnRSZWN0KToKKyAgICAgICAgKFdlYkRyaXZl
cjo6U2Vzc2lvbjo6aXNFbGVtZW50RW5hYmxlZCk6CisgICAgICAgIChXZWJEcml2ZXI6OlNlc3Np
b246OmlzRWxlbWVudERpc3BsYXllZCk6CisgICAgICAgIChXZWJEcml2ZXI6OlNlc3Npb246Omdl
dEVsZW1lbnRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjpnZXRFbGVt
ZW50UHJvcGVydHkpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjpnZXRFbGVtZW50Q1NT
VmFsdWUpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjp3YWl0Rm9yTmF2aWdhdGlvblRv
Q29tcGxldGUpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjplbGVtZW50SXNGaWxlVXBs
b2FkKToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6cGFyc2VFbGVtZW50SXNGaWxlVXBs
b2FkUmVzdWx0KToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6c2VsZWN0T3B0aW9uRWxl
bWVudCk6CisgICAgICAgIChXZWJEcml2ZXI6OlNlc3Npb246OmVsZW1lbnRDbGljayk6CisgICAg
ICAgIChXZWJEcml2ZXI6OlNlc3Npb246OmVsZW1lbnRJc0VkaXRhYmxlKToKKyAgICAgICAgKFdl
YkRyaXZlcjo6U2Vzc2lvbjo6ZWxlbWVudENsZWFyKToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vz
c2lvbjo6c2V0SW5wdXRGaWxlVXBsb2FkRmlsZXMpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNz
aW9uOjplbGVtZW50U2VuZEtleXMpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjpnZXRQ
YWdlU291cmNlKToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6aGFuZGxlU2NyaXB0UmVz
dWx0KToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6ZXhlY3V0ZVNjcmlwdCk6CisgICAg
ICAgIChXZWJEcml2ZXI6OlNlc3Npb246OnBlcmZvcm1Nb3VzZUludGVyYWN0aW9uKToKKyAgICAg
ICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6cGVyZm9ybUtleWJvYXJkSW50ZXJhY3Rpb25zKToKKyAg
ICAgICAgKFdlYkRyaXZlcjo6YnVpbHRBdXRvbWF0aW9uQ29va2llKToKKyAgICAgICAgKFdlYkRy
aXZlcjo6c2VyaWFsaXplQ29va2llKToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6Z2V0
QWxsQ29va2llcyk6CisgICAgICAgIChXZWJEcml2ZXI6OlNlc3Npb246OmdldE5hbWVkQ29va2ll
KToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6YWRkQ29va2llKToKKyAgICAgICAgKFdl
YkRyaXZlcjo6U2Vzc2lvbjo6ZGVsZXRlQ29va2llKToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vz
c2lvbjo6ZGVsZXRlQWxsQ29va2llcyk6CisgICAgICAgIChXZWJEcml2ZXI6OlNlc3Npb246OnBl
cmZvcm1BY3Rpb25zKToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6cmVsZWFzZUFjdGlv
bnMpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjpkaXNtaXNzQWxlcnQpOgorICAgICAg
ICAoV2ViRHJpdmVyOjpTZXNzaW9uOjphY2NlcHRBbGVydCk6CisgICAgICAgIChXZWJEcml2ZXI6
OlNlc3Npb246OmdldEFsZXJ0VGV4dCk6CisgICAgICAgIChXZWJEcml2ZXI6OlNlc3Npb246OnNl
bmRBbGVydFRleHQpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjp0YWtlU2NyZWVuc2hv
dCk6CisgICAgICAgICogU2Vzc2lvbkhvc3QuY3BwOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNz
aW9uSG9zdDo6ZGlzcGF0Y2hNZXNzYWdlKToKKyAgICAgICAgKiBXZWJEcml2ZXJTZXJ2aWNlLmNw
cDoKKyAgICAgICAgKFdlYkRyaXZlcjo6V2ViRHJpdmVyU2VydmljZTo6aGFuZGxlUmVxdWVzdCk6
CisgICAgICAgIChXZWJEcml2ZXI6OldlYkRyaXZlclNlcnZpY2U6OnNlbmRSZXNwb25zZSBjb25z
dCk6CisgICAgICAgIChXZWJEcml2ZXI6OnZhbHVlQXNOdW1iZXJJblJhbmdlKToKKyAgICAgICAg
KFdlYkRyaXZlcjo6ZGVzZXJpYWxpemVUaW1lb3V0cyk6CisgICAgICAgIChXZWJEcml2ZXI6OmRl
c2VyaWFsaXplUHJveHkpOgorICAgICAgICAoV2ViRHJpdmVyOjpXZWJEcml2ZXJTZXJ2aWNlOjpw
YXJzZUNhcGFiaWxpdGllcyBjb25zdCk6CisgICAgICAgIChXZWJEcml2ZXI6OldlYkRyaXZlclNl
cnZpY2U6OmZpbmRTZXNzaW9uT3JDb21wbGV0ZVdpdGhFcnJvcik6CisgICAgICAgIChXZWJEcml2
ZXI6OldlYkRyaXZlclNlcnZpY2U6OnZhbGlkYXRlZENhcGFiaWxpdGllcyBjb25zdCk6CisgICAg
ICAgIChXZWJEcml2ZXI6OldlYkRyaXZlclNlcnZpY2U6Om1lcmdlQ2FwYWJpbGl0aWVzIGNvbnN0
KToKKyAgICAgICAgKFdlYkRyaXZlcjo6V2ViRHJpdmVyU2VydmljZTo6bWF0Y2hDYXBhYmlsaXRp
ZXMgY29uc3QpOgorICAgICAgICAoV2ViRHJpdmVyOjpXZWJEcml2ZXJTZXJ2aWNlOjpwcm9jZXNz
Q2FwYWJpbGl0aWVzIGNvbnN0KToKKyAgICAgICAgKFdlYkRyaXZlcjo6V2ViRHJpdmVyU2Vydmlj
ZTo6Y3JlYXRlU2Vzc2lvbik6CisgICAgICAgIChXZWJEcml2ZXI6OldlYkRyaXZlclNlcnZpY2U6
OmNsb3NlV2luZG93KToKKyAgICAgICAgKFdlYkRyaXZlcjo6V2ViRHJpdmVyU2VydmljZTo6bmV3
V2luZG93KToKKyAgICAgICAgKFdlYkRyaXZlcjo6V2ViRHJpdmVyU2VydmljZTo6c3dpdGNoVG9G
cmFtZSk6CisgICAgICAgIChXZWJEcml2ZXI6OmZpbmRFbGVtZW50T3JDb21wbGV0ZVdpdGhFcnJv
cik6CisgICAgICAgIChXZWJEcml2ZXI6OmZpbmRTdHJhdGVneUFuZFNlbGVjdG9yT3JDb21wbGV0
ZVdpdGhFcnJvcik6CisgICAgICAgIChXZWJEcml2ZXI6OmZpbmRTY3JpcHRBbmRBcmd1bWVudHNP
ckNvbXBsZXRlV2l0aEVycm9yKToKKyAgICAgICAgKFdlYkRyaXZlcjo6ZGVzZXJpYWxpemVDb29r
aWUpOgorICAgICAgICAoV2ViRHJpdmVyOjpwcm9jZXNzUGF1c2VBY3Rpb24pOgorICAgICAgICAo
V2ViRHJpdmVyOjpwcm9jZXNzTnVsbEFjdGlvbik6CisgICAgICAgIChXZWJEcml2ZXI6OnByb2Nl
c3NLZXlBY3Rpb24pOgorICAgICAgICAoV2ViRHJpdmVyOjpwcm9jZXNzUG9pbnRlckFjdGlvbik6
CisgICAgICAgIChXZWJEcml2ZXI6OnByb2Nlc3NQb2ludGVyUGFyYW1ldGVycyk6CisgICAgICAg
IChXZWJEcml2ZXI6OnByb2Nlc3NJbnB1dEFjdGlvblNlcXVlbmNlKToKKyAgICAgICAgYEpTT05g
IGNsYXNzZXMgbm93IHVzZSBgUmVmJiZgIHdoZXJldmVyIHBvc3NpYmxlIGFuZCBgT3B0aW9uYWxg
IGluc3RlYWQgb2YgYW4gb3V0IHBhcmFtZXRlcgorICAgICAgICBmb3IgYGdldCpgL2BhcypgIHNv
IHRoYXQgdmFsdWVzIGNhbiBiZSBtb3JlIGVhc2lseSBtYW5pcHVsYXRlZCBhbmQgY2FuIGJlIGNv
bmZpZGVudGx5IGtub3duCisgICAgICAgIHRvIGV4aXN0LgorCiAyMDIwLTA3LTE1ICBGdWppaSBI
aXJvbm9yaSAgPEhpcm9ub3JpLkZ1amlpQHNvbnkuY29tPgogCiAgICAgICAgIFtDTWFrZV1bV2Vi
RHJpdmVyXSBHZW5lcmF0aW5nIFdlYkRyaXZlckF0b21zLmNwcCBpcyByYXJlbHkgZmFpbGluZyBh
cyAiSW1wb3J0RXJyb3I6IE5vIG1vZHVsZSBuYW1lZCBqc21pbiIKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvQ2hhbmdl
TG9nCmluZGV4IDk5Y2MxYzcwMWIxM2ViOGViZmY0YjgyNDY5OWU1NDgwODBlMDk2Y2QuLjRjZTg5
NDkyODU4NmMzMTgyOGVjMmE2NTAxNTIxOWZhN2VlYmNmMDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDIwLTA5LTA4ICBEZXZpbiBSb3Vzc28gIDxkcm91c3Nv
QGFwcGxlLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBtb2Rlcm5pemUgZ2VuZXJhdGVk
IGJhY2tlbmQgcHJvdG9jb2wgY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjE2MzAyCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS82ODU0NzY0OT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFVzZXJJ
bnRlcmZhY2UvQ29udHJvbGxlcnMvQ1NTTWFuYWdlci5qczoKKyAgICAgICAgKFdJLkNTU01hbmFn
ZXIucHJvdG90eXBlLnNldCBmb3JjZWRBcHBlYXJhbmNlKToKKyAgICAgICAgTm93IHRoYXQgZW51
bXMgYXJlIHByb2Nlc3NlZCBiZWZvcmUgYmVpbmcgcGFzc2VkIHRvIGJhY2tlbmQgZGlzcGFjaGVy
IGhhbmRsZXJzLCB0aGUKKyAgICAgICAgYGFwcGVhcmFuY2VgIHBhcmFtZXRlciBvZiBgUGFnZS5z
ZXRGb3JjZWRBcHBlYXJhbmNlYCBtdXN0IGJlIG1hcmtlZCBgb3B0aW9uYWxgIGFzCisgICAgICAg
IHRoZXJlJ3Mgbm8gd2F5IGZvciBpdCB0byBhY2NlcHQgYW4gZW1wdHkgc3RyaW5nLCBhcyB0aGF0
J3Mgbm90IHBvc3NpYmxlIGZvciBhbiBlbnVtLgorICAgICAgICBBcyBzdWNoLCByZXdvcmsgdGhl
IGZyb250ZW5kIGxvZ2ljIGZvciBpbnZva2luZyBgUGFnZS5zZXRGb3JjZWRBcHBlYXJhbmNlYCB0
byBpbnN0ZWFkCisgICAgICAgIG5vdCBwcm92aWRlIGFuIGBhcHBlYXJhbmNlYCBwYXJhbWV0ZXIg
YXQgYWxsIHdoZW4gd2FudGluZyB0byAidW5zZXQiIGl0LgorCisgICAgICAgICogVXNlckludGVy
ZmFjZS9WaWV3cy9TZXR0aW5nc1RhYkNvbnRlbnRWaWV3LmpzOgorICAgICAgICAoV0kuU2V0dGlu
Z3NUYWJDb250ZW50Vmlldy5wcm90b3R5cGUuX2NyZWF0ZUNvbnNvbGVTZXR0aW5nc1ZpZXcpOgor
ICAgICAgICBOb3cgdGhhdCBhbGwgbG9nZ2luZyBjaGFubmVscyBtYXRjaGluZyBhIGBDb25zb2xl
LkNoYW5uZWxTb3VyY2VgIGFyZSByZXR1cm5lZCBpbnN0ZWFkIG9mCisgICAgICAgIGp1c3QgdGhl
IGhhcmRjb2RlZCBsaXN0LCBjaGVjayBmb3IgYSBtYXRjaGluZyBgV0kuVUlTdHJpbmdgIGJlZm9y
ZSBzaG93aW5nIGEgYDxzZWxlY3Q+YC4KKwogMjAyMC0wOS0wNSAgRGV2aW4gUm91c3NvICA8ZHJv
dXNzb0BhcHBsZS5jb20+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogYWxsb3cgRE9NIGJyZWFr
cG9pbnRzIHRvIGJlIGNvbmZpZ3VyZWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdl
TG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggMWM4NzgwNzgzNDNhMzIzN2NkYzdi
ODE0MmQ5NGMyNTk3MmRiOWQ3Ny4uMmQzOTVlOWQ5ZGIyZDQ5M2Q3ODI5MTNmMzUxNzg4NjI4MTM4
MDhiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
YktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1NSBAQAorMjAyMC0wOS0wOCAgRGV2aW4gUm91c3Nv
ICA8ZHJvdXNzb0BhcHBsZS5jb20+CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogbW9kZXJuaXpl
IGdlbmVyYXRlZCBiYWNrZW5kIHByb3RvY29sIGNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNjMwMgorICAgICAgICA8cmRhcjovL3Byb2JsZW0v
Njg1NDc2NDk+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgUHJldmlvdXNseSwgdGhlIGluc3BlY3RvciBwcm90b2NvbCB3YXMgZXhwcmVzc2VkIGluIGNv
ZGUgaW4gYSBzb21ld2hhdCBjb25mdXNpbmcgd2F5OgorICAgICAgICAgLSB0aGUgZXJyb3Igc3Ry
aW5nIHdhcyB0aGUgZmlyc3QgYXJndW1lbnQKKyAgICAgICAgIC0gcmVxdWlyZWQgcGFyYW1ldGVy
cyB3ZXJlIGBUYCBvciBgY29uc3QgVCZgCisgICAgICAgICAtIG9wdGlvbmFsIHBhcmFtZXRlcnMg
d2VyZSBgY29uc3QgVCpgCisgICAgICAgICAtIGVudW0gcGFyYW1ldGVycyB3ZXJlIHRoZSB1bmRl
cmx5aW5nIHR5cGUgcmVxdWlyaW5nIHRoZSBiYWNrZW5kIGRpc3BhdGNoZXIgaGFuZGxlciB0bwor
ICAgICAgICAgICBwcm9jZXNzIGl0IGluc3RlYWQgb2YgaXQgYmVpbmcgcHJlcHJvY2Vzc2VkCisg
ICAgICAgICAtIHJlcXVpcmVkIHJldHVybnMgd2VyZSBgVCZgCisgICAgICAgICAtIG9wdGlvbmFs
IHJldHVybnMgd2VyZSBgVCpgCisgICAgICAgIFRoaXMgZG9lc24ndCByZWFsbHkgbWFrZSBmb3Ig
ZWFzeS9vYnZpb3VzIHJlYWRpbmcgb2YgY29kZSBzaW5jZSB0aGUgb3JkZXIgb2YgYXJndW1lbnRz
IGlzCisgICAgICAgIG5vdCB3ZWlyZCAoZS5nLiBlcnJvciBzdHJpbmcgZmlyc3QpLCBhbmQgdGhh
dCB0aGVyZSBhcmUgcmVmZXJlbmNlcy9wb2ludGVycyB0byBwcmltaXRpdmUKKyAgICAgICAgdHlw
ZXMuCisKKyAgICAgICAgVGhpcyBwYXRjaCBjbGVhbnMgdXAgdGhlIGdlbmVyYXRlZCBpbnNwZWN0
b3IgcHJvdG9jb2wgY29kZSB0byBiZToKKyAgICAgICAgIC0gcmVxdWlyZWQgcGFyYW1ldGVycyBh
cmUgYFRgIG9yIGBSZWY8VD4mJmAKKyAgICAgICAgIC0gb3B0aW9uYWwgcGFyYW1ldGVycyBhcmUg
YE9wdGlvbmFsPFQ+JiZgIG9yIGBSZWZQdHI8VD4mJmAKKyAgICAgICAgIC0gZW51bSBwYXJhbWV0
ZXJzIGFyZSBwcmVwcm9jZXNzZWQgYW5kIHBhc3NlZCB0byB0aGUgYmFja2VuZCBkaXNwYXRjaGVy
IGhhbmRsZXIgaWYgdmFsaWQKKyAgICAgICAgIC0gc3luY2hyb25vdXMgY29tbWFuZHMgcmV0dXJu
IGBFeHBlY3RlZDxYLCBFcnJvclN0cmluZz5gIHVzaW5nIHRoZSBzYW1lIHR5cGVzL3J1bGVzIGFi
b3ZlCisgICAgICAgICAgIHdoZXJlIGBYYCBpcyBlaXRoZXIgYSBzaW5nbGUgcmV0dXJuIG9yIGEg
YHN0ZDo6dHVwbGVgIG9mIG11bHRpcGxlIHJldHVybnMKKworICAgICAgICBUaGUgb25lIGV4Y2Vw
dGlvbiB0byB0aGUgYWJvdmUgaXMgYFN0cmluZ2AsIHdoaWNoIGlzIGFscmVhZHkgYSB0cmktc3Rh
dGUgb2YgYG51bGxTdHJpbmcoKWAsCisgICAgICAgIGBlbXB0eVN0cmluZygpYCwgYW5kIHNvbWV0
aGluZyBzZXQsIHNvIHRoZXJlJ3Mgbm8gbmVlZCB0byB1c2UgYE9wdGlvbmFsPFN0cmluZz5gLgor
CisgICAgICAgIEFsc28gdXNlIGBQcm90b2NvbGAgb2JqZWN0cy9gdHlwZWRlZnNgIHdoZXJldmVy
IHBvc3NpYmxlIHRvIGZ1cnRoZXIgcmVsYXRlIHRoZSBwcm90b2NvbAorICAgICAgICBKU09OIGFu
ZCB0aGUgYWN0dWFsIGJhY2tlbmQgZGlzcGF0Y2hlciBoYW5kbGVyIGltcGxlbWVudGF0aW9uLgor
CisgICAgICAgICogVUlQcm9jZXNzL0F1dG9tYXRpb24vQXV0b21hdGlvbi5qc29uOgorICAgICAg
ICBgQ29vcmRpbmF0ZVN5c3RlbWAgaGFzIGBQYWdlYCBhbmQgYFZpZXdwb3J0YCBlbnVtIHZhbHVl
cywgYnV0IGBXZWJBdXRvbWF0aW9uU2Vzc2lvbmAgY2hlY2tzCisgICAgICAgIGZvciBgIlBhZ2Ui
YCBhbmQgYCJMYXlvdXRWaWV3cG9ydCJgLiBBZGQgYSBgTGF5b3V0Vmlld3BvcnRgIGVudW0gdmFs
dWUgbm93IHRoYXQgZW51bXMgYXJlCisgICAgICAgIHByb2Nlc3NlZCBiZWZvcmUgYmVpbmcgcGFz
c2VkIHRvIGJhY2tlbmQgZGlzcGFjaGVyIGhhbmRsZXJzIHRvIHByZXNlcnZlIGZ1bmN0aW9uYWxp
dHkuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yL0FnZW50cy9JbnNwZWN0b3JCcm93
c2VyQWdlbnQuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yL0FnZW50cy9JbnNwZWN0
b3JCcm93c2VyQWdlbnQuY3BwOgorICAgICAgICAqIFVJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1
dG9tYXRpb25TZXNzaW9uTWFjcm9zLmg6CisgICAgICAgICogVUlQcm9jZXNzL0F1dG9tYXRpb24v
V2ViQXV0b21hdGlvblNlc3Npb24uaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQXV0b21hdGlvbi9X
ZWJBdXRvbWF0aW9uU2Vzc2lvbi5jcHA6CisgICAgICAgICogVUlQcm9jZXNzL0F1dG9tYXRpb24v
bWFjL1dlYkF1dG9tYXRpb25TZXNzaW9uTWFjLm1tOgorICAgICAgICBFbGlkZWQgYmFja2VuZCBk
aXNwYXRjaGVyIGhhbmRsZXIgY2hhbmdlcyBkZXNjcmliZSBhYm92ZS4KKworICAgICAgICAqIFVJ
UHJvY2Vzcy9JbnNwZWN0b3Ivc29ja2V0L1JlbW90ZUluc3BlY3RvckNsaWVudC5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OlJlbW90ZUluc3BlY3RvckNsaWVudDo6c2V0VGFyZ2V0TGlzdCk6CisgICAg
ICAgIGBKU09OYCBjbGFzc2VzIG5vdyB1c2UgYFJlZiYmYCB3aGVyZXZlciBwb3NzaWJsZSBhbmQg
YE9wdGlvbmFsYCBpbnN0ZWFkIG9mIGFuIG91dCBwYXJhbWV0ZXIKKyAgICAgICAgZm9yIGBnZXQq
YC9gYXMqYCBzbyB0aGF0IHZhbHVlcyBjYW4gYmUgbW9yZSBlYXNpbHkgbWFuaXB1bGF0ZWQgYW5k
IGNhbiBiZSBjb25maWRlbnRseSBrbm93bgorICAgICAgICB0byBleGlzdC4KKwogMjAyMC0wOS0w
NSAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CiAKICAgICAgICAgW1dlYklETF0gUmVh
bGlnbiBvdXIgSURMIGV4dGVuZGVkIGF0dHJpYnV0ZSBuYW1lcyB3aXRoIHRob3NlIHNwZWNpZmll
ZCBpbiBXZWJJREwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9T
Y3JpcHRWYWx1ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvU2NyaXB0VmFs
dWUuY3BwCmluZGV4IDZiODUzYzkzMWYxZGNlOTI1M2JiYWMwNmE5NWU2YWFjNTI3Y2YyNWEuLjc5
NjhiOTBhNzNiMjgyZGY1OTgyMjU2YTZlZGNiMmQ2ZTU3NDM5NmUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9TY3JpcHRWYWx1ZS5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2JpbmRpbmdzL1NjcmlwdFZhbHVlLmNwcApAQCAtNjksNyArNjksNyBAQCBz
dGF0aWMgUmVmUHRyPEpTT046OlZhbHVlPiBqc1RvSW5zcGVjdG9yVmFsdWUoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNWYQogICAgICAgICAgICAgICAgIGF1dG8gZWxlbWVudFZhbHVl
ID0ganNUb0luc3BlY3RvclZhbHVlKGdsb2JhbE9iamVjdCwgYXJyYXkuZ2V0SW5kZXgoZ2xvYmFs
T2JqZWN0LCBpKSwgbWF4RGVwdGgpOwogICAgICAgICAgICAgICAgIGlmICghZWxlbWVudFZhbHVl
KQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgICAgICAgICBp
bnNwZWN0b3JBcnJheS0+cHVzaFZhbHVlKFdURk1vdmUoZWxlbWVudFZhbHVlKSk7CisgICAgICAg
ICAgICAgICAgaW5zcGVjdG9yQXJyYXktPnB1c2hWYWx1ZShlbGVtZW50VmFsdWUucmVsZWFzZU5v
bk51bGwoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gaW5zcGVjdG9yQXJy
YXk7CiAgICAgICAgIH0KQEAgLTgyLDcgKzgyLDcgQEAgc3RhdGljIFJlZlB0cjxKU09OOjpWYWx1
ZT4ganNUb0luc3BlY3RvclZhbHVlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmEK
ICAgICAgICAgICAgIGF1dG8gaW5zcGVjdG9yVmFsdWUgPSBqc1RvSW5zcGVjdG9yVmFsdWUoZ2xv
YmFsT2JqZWN0LCBvYmplY3QuZ2V0KGdsb2JhbE9iamVjdCwgbmFtZSksIG1heERlcHRoKTsKICAg
ICAgICAgICAgIGlmICghaW5zcGVjdG9yVmFsdWUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0gICAgICAgICAgICBpbnNwZWN0b3JPYmplY3QtPnNldFZhbHVlKG5hbWUuc3RyaW5n
KCksIFdURk1vdmUoaW5zcGVjdG9yVmFsdWUpKTsKKyAgICAgICAgICAgIGluc3BlY3Rvck9iamVj
dC0+c2V0VmFsdWUobmFtZS5zdHJpbmcoKSwgaW5zcGVjdG9yVmFsdWUucmVsZWFzZU5vbk51bGwo
KSk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGluc3BlY3Rvck9iamVjdDsKICAgICB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0FzeW5jU3RhY2tUcmFj
ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0FzeW5jU3RhY2tUcmFjZS5j
cHAKaW5kZXggNTQ1MGUyZjNjMDA5YzYwMThjZjljNTMwYTAzNmMzZGI3YTYzNDUwZS4uYTU5NjM5
NWNiZWE3OTFlNzBiZTNlMjM2MmZlNTdmNDM4MzRhNTk0YSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9Bc3luY1N0YWNrVHJhY2UuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvQXN5bmNTdGFja1RyYWNlLmNwcApAQCAtOTcsNyArOTcs
NyBAQCB2b2lkIEFzeW5jU3RhY2tUcmFjZTo6ZGlkQ2FuY2VsQXN5bmNDYWxsKCkKICAgICBtX3N0
YXRlID0gU3RhdGU6OkNhbmNlbGVkOwogfQogCi1SZWZQdHI8UHJvdG9jb2w6OkNvbnNvbGU6OlN0
YWNrVHJhY2U+IEFzeW5jU3RhY2tUcmFjZTo6YnVpbGRJbnNwZWN0b3JPYmplY3QoKSBjb25zdAor
UmVmPFByb3RvY29sOjpDb25zb2xlOjpTdGFja1RyYWNlPiBBc3luY1N0YWNrVHJhY2U6OmJ1aWxk
SW5zcGVjdG9yT2JqZWN0KCkgY29uc3QKIHsKICAgICBSZWZQdHI8UHJvdG9jb2w6OkNvbnNvbGU6
OlN0YWNrVHJhY2U+IHRvcFN0YWNrVHJhY2U7CiAgICAgUmVmUHRyPFByb3RvY29sOjpDb25zb2xl
OjpTdGFja1RyYWNlPiBwcmV2aW91c1N0YWNrVHJhY2U7CkBAIC0xMjAsMTMgKzEyMCwxMyBAQCBS
ZWZQdHI8UHJvdG9jb2w6OkNvbnNvbGU6OlN0YWNrVHJhY2U+IEFzeW5jU3RhY2tUcmFjZTo6YnVp
bGRJbnNwZWN0b3JPYmplY3QoKSBjbwogICAgICAgICAgICAgdG9wU3RhY2tUcmFjZSA9IHByb3Rv
Y29sT2JqZWN0LnB0cigpOwogCiAgICAgICAgIGlmIChwcmV2aW91c1N0YWNrVHJhY2UpCi0gICAg
ICAgICAgICBwcmV2aW91c1N0YWNrVHJhY2UtPnNldFBhcmVudFN0YWNrVHJhY2UocHJvdG9jb2xP
YmplY3QucHRyKCkpOworICAgICAgICAgICAgcHJldmlvdXNTdGFja1RyYWNlLT5zZXRQYXJlbnRT
dGFja1RyYWNlKHByb3RvY29sT2JqZWN0LmNvcHlSZWYoKSk7CiAKICAgICAgICAgcHJldmlvdXNT
dGFja1RyYWNlID0gV1RGTW92ZShwcm90b2NvbE9iamVjdCk7CiAgICAgICAgIHN0YWNrVHJhY2Ug
PSBzdGFja1RyYWNlLT5tX3BhcmVudC5nZXQoKTsKICAgICB9CiAKLSAgICByZXR1cm4gdG9wU3Rh
Y2tUcmFjZTsKKyAgICByZXR1cm4gdG9wU3RhY2tUcmFjZS5yZWxlYXNlTm9uTnVsbCgpOwogfQog
CiB2b2lkIEFzeW5jU3RhY2tUcmFjZTo6dHJ1bmNhdGUoc2l6ZV90IG1heERlcHRoKQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9Bc3luY1N0YWNrVHJhY2UuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvQXN5bmNTdGFja1RyYWNlLmgKaW5kZXgg
NmVkZTZjNDI1YWJjYWEyZDYxZTViYjdiMWJhMTllMzJlNTcyM2I2Yy4uNDk5YTFlMDVmZDU5NDNm
OWZhZWRjMzBlMGJkM2QyMGUwYzVkZGJlYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9Bc3luY1N0YWNrVHJhY2UuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL0FzeW5jU3RhY2tUcmFjZS5oCkBAIC01MSw3ICs1MSw3IEBAIHB1YmxpYzoK
ICAgICB2b2lkIGRpZERpc3BhdGNoQXN5bmNDYWxsKCk7CiAgICAgdm9pZCBkaWRDYW5jZWxBc3lu
Y0NhbGwoKTsKIAotICAgIFJlZlB0cjxQcm90b2NvbDo6Q29uc29sZTo6U3RhY2tUcmFjZT4gYnVp
bGRJbnNwZWN0b3JPYmplY3QoKSBjb25zdDsKKyAgICBSZWY8UHJvdG9jb2w6OkNvbnNvbGU6OlN0
YWNrVHJhY2U+IGJ1aWxkSW5zcGVjdG9yT2JqZWN0KCkgY29uc3Q7CiAKICAgICB+QXN5bmNTdGFj
a1RyYWNlKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
Q29uc29sZU1lc3NhZ2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9Db25z
b2xlTWVzc2FnZS5jcHAKaW5kZXggNTQyYzdjN2IzN2VmYjJlNGE3NmEzMmEwMDhkMDYzZGJjODA1
Y2RkMC4uOTBhMWRkOTYwNDcwYTU0ZWQzYjE0NjZjZWNmZGVmYTgzNDk0NTgwZiAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9Db25zb2xlTWVzc2FnZS5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9Db25zb2xlTWVzc2FnZS5jcHAKQEAg
LTI2MSw5ICsyNjEsMTEgQEAgdm9pZCBDb25zb2xlTWVzc2FnZTo6YWRkVG9Gcm9udGVuZChDb25z
b2xlRnJvbnRlbmREaXNwYXRjaGVyJiBjb25zb2xlRnJvbnRlbmREaXMKICAgICAgICAgICAgICAg
ICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGFyZ3Vt
ZW50c09iamVjdC0+YWRkSXRlbShXVEZNb3ZlKGluc3BlY3RvclZhbHVlKSk7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmIChtX2FyZ3VtZW50cy0+YXJndW1lbnRDb3VudCgpID4gMSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGFyZ3VtZW50c09iamVjdC0+YWRkSXRlbShpbmplY3RlZFNjcmlwdC53
cmFwT2JqZWN0KGNvbHVtbnMsICJjb25zb2xlIl9zLCB0cnVlKSk7CisgICAgICAgICAgICAgICAg
ICAgIGFyZ3VtZW50c09iamVjdC0+YWRkSXRlbShpbnNwZWN0b3JWYWx1ZS5yZWxlYXNlTm9uTnVs
bCgpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fYXJndW1lbnRzLT5hcmd1bWVudENvdW50
KCkgPiAxKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXV0byBpbnNwZWN0b3JPYmpl
Y3QgPSBpbmplY3RlZFNjcmlwdC53cmFwT2JqZWN0KGNvbHVtbnMsICJjb25zb2xlIl9zLCB0cnVl
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmd1bWVudHNPYmplY3QtPmFkZEl0ZW0o
aW5zcGVjdG9yT2JqZWN0LnJlbGVhc2VOb25OdWxsKCkpOworICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IG1fYXJndW1lbnRzLT5hcmd1bWVudENvdW50KCk7ICsraSkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgYXV0byBpbnNwZWN0b3JWYWx1ZSA9IGluamVjdGVkU2NyaXB0
LndyYXBPYmplY3QobV9hcmd1bWVudHMtPmFyZ3VtZW50QXQoaSksICJjb25zb2xlIl9zLCBnZW5l
cmF0ZVByZXZpZXcpOwpAQCAtMjcxLDcgKzI3Myw3IEBAIHZvaWQgQ29uc29sZU1lc3NhZ2U6OmFk
ZFRvRnJvbnRlbmQoQ29uc29sZUZyb250ZW5kRGlzcGF0Y2hlciYgY29uc29sZUZyb250ZW5kRGlz
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRzT2JqZWN0LT5hZGRJdGVtKFdURk1v
dmUoaW5zcGVjdG9yVmFsdWUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50c09i
amVjdC0+YWRkSXRlbShpbnNwZWN0b3JWYWx1ZS5yZWxlYXNlTm9uTnVsbCgpKTsKICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTI4NCw3
ICsyODYsNyBAQCB2b2lkIENvbnNvbGVNZXNzYWdlOjphZGRUb0Zyb250ZW5kKENvbnNvbGVGcm9u
dGVuZERpc3BhdGNoZXImIGNvbnNvbGVGcm9udGVuZERpcwogICAgICAgICAgICAgICAgICAgICBp
ZiAoIWluc3BlY3RvclZhbHVlKQogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAK
LSAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRzT2JqZWN0LT5hZGRJdGVtKFdURk1vdmUoaW5z
cGVjdG9yVmFsdWUpKTsKKyAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRzT2JqZWN0LT5hZGRJ
dGVtKGluc3BlY3RvclZhbHVlLnJlbGVhc2VOb25OdWxsKCkpOwogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9JbmplY3RlZFNjcmlwdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L0luamVjdGVkU2NyaXB0LmNwcAppbmRleCBjYzg0OWYwNTFmYTQwNTE4YTlkMWEwMzQyOWJjMmI0
ZGJjZmIzMTAyLi42OTA5YTMzOWVhMmUzZGU2MDBmNTVmZDZmZTQ2ODM2NDYxNzFlMGE3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0LmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0LmNw
cApAQCAtNTYsNyArNTYsNyBAQCBJbmplY3RlZFNjcmlwdDo6fkluamVjdGVkU2NyaXB0KCkKIHsK
IH0KIAotdm9pZCBJbmplY3RlZFNjcmlwdDo6ZXhlY3V0ZShFcnJvclN0cmluZyYgZXJyb3JTdHJp
bmcsIGNvbnN0IFN0cmluZyYgZnVuY3Rpb25TdHJpbmcsIEV4ZWN1dGVPcHRpb25zJiYgb3B0aW9u
cywgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiByZXN1bHQsIE9wdGlv
bmFsPGJvb2w+JiB3YXNUaHJvd24sIE9wdGlvbmFsPGludD4mIHNhdmVkUmVzdWx0SW5kZXgpCit2
b2lkIEluamVjdGVkU2NyaXB0OjpleGVjdXRlKFByb3RvY29sOjpFcnJvclN0cmluZyYgZXJyb3JT
dHJpbmcsIGNvbnN0IFN0cmluZyYgZnVuY3Rpb25TdHJpbmcsIEV4ZWN1dGVPcHRpb25zJiYgb3B0
aW9ucywgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiByZXN1bHQsIE9w
dGlvbmFsPGJvb2w+JiB3YXNUaHJvd24sIE9wdGlvbmFsPGludD4mIHNhdmVkUmVzdWx0SW5kZXgp
CiB7CiAgICAgRGVwcmVjYXRlZDo6U2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKGluamVjdGVk
U2NyaXB0T2JqZWN0KCksICJleGVjdXRlIl9zLCBpbnNwZWN0b3JFbnZpcm9ubWVudCgpLT5mdW5j
dGlvbkNhbGxIYW5kbGVyKCkpOwogICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KGZ1bmN0aW9u
U3RyaW5nKTsKQEAgLTY5LDcgKzY5LDcgQEAgdm9pZCBJbmplY3RlZFNjcmlwdDo6ZXhlY3V0ZShF
cnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgZnVuY3Rpb25TdHIKICAgICBt
YWtlRXZhbENhbGwoZXJyb3JTdHJpbmcsIGZ1bmN0aW9uLCByZXN1bHQsIHdhc1Rocm93biwgc2F2
ZWRSZXN1bHRJbmRleCk7CiB9CiAKLXZvaWQgSW5qZWN0ZWRTY3JpcHQ6OmV2YWx1YXRlKEVycm9y
U3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBjb25zdCBTdHJp
bmcmIG9iamVjdEdyb3VwLCBib29sIGluY2x1ZGVDb21tYW5kTGluZUFQSSwgYm9vbCByZXR1cm5C
eVZhbHVlLCBib29sIGdlbmVyYXRlUHJldmlldywgYm9vbCBzYXZlUmVzdWx0LCBSZWZQdHI8UHJv
dG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3VsdCwgT3B0aW9uYWw8Ym9vbD4mIHdh
c1Rocm93biwgT3B0aW9uYWw8aW50PiYgc2F2ZWRSZXN1bHRJbmRleCkKK3ZvaWQgSW5qZWN0ZWRT
Y3JpcHQ6OmV2YWx1YXRlKFByb3RvY29sOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0
IFN0cmluZyYgZXhwcmVzc2lvbiwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCwgYm9vbCBpbmNs
dWRlQ29tbWFuZExpbmVBUEksIGJvb2wgcmV0dXJuQnlWYWx1ZSwgYm9vbCBnZW5lcmF0ZVByZXZp
ZXcsIGJvb2wgc2F2ZVJlc3VsdCwgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmpl
Y3Q+JiByZXN1bHQsIE9wdGlvbmFsPGJvb2w+JiB3YXNUaHJvd24sIE9wdGlvbmFsPGludD4mIHNh
dmVkUmVzdWx0SW5kZXgpCiB7CiAgICAgRGVwcmVjYXRlZDo6U2NyaXB0RnVuY3Rpb25DYWxsIGZ1
bmN0aW9uKGluamVjdGVkU2NyaXB0T2JqZWN0KCksICJldmFsdWF0ZSJfcywgaW5zcGVjdG9yRW52
aXJvbm1lbnQoKS0+ZnVuY3Rpb25DYWxsSGFuZGxlcigpKTsKICAgICBmdW5jdGlvbi5hcHBlbmRB
cmd1bWVudChleHByZXNzaW9uKTsKQEAgLTkxLDcgKzkxLDcgQEAgdm9pZCBJbmplY3RlZFNjcmlw
dDo6YXdhaXRQcm9taXNlKGNvbnN0IFN0cmluZyYgcHJvbWlzZU9iamVjdElkLCBib29sIHJldHVy
bkJ5VmEKICAgICBtYWtlQXN5bmNDYWxsKGZ1bmN0aW9uLCBXVEZNb3ZlKGNhbGxiYWNrKSk7CiB9
CiAKLXZvaWQgSW5qZWN0ZWRTY3JpcHQ6OmNhbGxGdW5jdGlvbk9uKEVycm9yU3RyaW5nJiBlcnJv
clN0cmluZywgY29uc3QgU3RyaW5nJiBvYmplY3RJZCwgY29uc3QgU3RyaW5nJiBleHByZXNzaW9u
LCBjb25zdCBTdHJpbmcmIGFyZ3VtZW50cywgYm9vbCByZXR1cm5CeVZhbHVlLCBib29sIGdlbmVy
YXRlUHJldmlldywgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiByZXN1
bHQsIE9wdGlvbmFsPGJvb2w+JiB3YXNUaHJvd24pCit2b2lkIEluamVjdGVkU2NyaXB0OjpjYWxs
RnVuY3Rpb25PbihQcm90b2NvbDo6RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJp
bmcmIG9iamVjdElkLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIGNvbnN0IFN0cmluZyYgYXJn
dW1lbnRzLCBib29sIHJldHVybkJ5VmFsdWUsIGJvb2wgZ2VuZXJhdGVQcmV2aWV3LCBSZWZQdHI8
UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3VsdCwgT3B0aW9uYWw8Ym9vbD4m
IHdhc1Rocm93bikKIHsKICAgICBEZXByZWNhdGVkOjpTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rp
b24oaW5qZWN0ZWRTY3JpcHRPYmplY3QoKSwgImNhbGxGdW5jdGlvbk9uIl9zLCBpbnNwZWN0b3JF
bnZpcm9ubWVudCgpLT5mdW5jdGlvbkNhbGxIYW5kbGVyKCkpOwogICAgIGZ1bmN0aW9uLmFwcGVu
ZEFyZ3VtZW50KG9iamVjdElkKTsKQEAgLTEwNSw3ICsxMDUsNyBAQCB2b2lkIEluamVjdGVkU2Ny
aXB0OjpjYWxsRnVuY3Rpb25PbihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmlu
ZyYgb2JqZQogICAgIEFTU0VSVCghc2F2ZWRSZXN1bHRJbmRleCk7CiB9CiAKLXZvaWQgSW5qZWN0
ZWRTY3JpcHQ6OmV2YWx1YXRlT25DYWxsRnJhbWUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBK
U0M6OkpTVmFsdWUgY2FsbEZyYW1lcywgY29uc3QgU3RyaW5nJiBjYWxsRnJhbWVJZCwgY29uc3Qg
U3RyaW5nJiBleHByZXNzaW9uLCBjb25zdCBTdHJpbmcmIG9iamVjdEdyb3VwLCBib29sIGluY2x1
ZGVDb21tYW5kTGluZUFQSSwgYm9vbCByZXR1cm5CeVZhbHVlLCBib29sIGdlbmVyYXRlUHJldmll
dywgYm9vbCBzYXZlUmVzdWx0LCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVj
dD4mIHJlc3VsdCwgT3B0aW9uYWw8Ym9vbD4mIHdhc1Rocm93biwgT3B0aW9uYWw8aW50PiYgc2F2
ZWRSZXN1bHRJbmRleCkKK3ZvaWQgSW5qZWN0ZWRTY3JpcHQ6OmV2YWx1YXRlT25DYWxsRnJhbWUo
UHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgSlNDOjpKU1ZhbHVlIGNhbGxGcmFt
ZXMsIGNvbnN0IFN0cmluZyYgY2FsbEZyYW1lSWQsIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwg
Y29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCwgYm9vbCBpbmNsdWRlQ29tbWFuZExpbmVBUEksIGJv
b2wgcmV0dXJuQnlWYWx1ZSwgYm9vbCBnZW5lcmF0ZVByZXZpZXcsIGJvb2wgc2F2ZVJlc3VsdCwg
UmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiByZXN1bHQsIE9wdGlvbmFs
PGJvb2w+JiB3YXNUaHJvd24sIE9wdGlvbmFsPGludD4mIHNhdmVkUmVzdWx0SW5kZXgpCiB7CiAg
ICAgRGVwcmVjYXRlZDo6U2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKGluamVjdGVkU2NyaXB0
T2JqZWN0KCksICJldmFsdWF0ZU9uQ2FsbEZyYW1lIl9zLCBpbnNwZWN0b3JFbnZpcm9ubWVudCgp
LT5mdW5jdGlvbkNhbGxIYW5kbGVyKCkpOwogICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KGNh
bGxGcmFtZXMpOwpAQCAtMTE5LDUyICsxMTksNTUgQEAgdm9pZCBJbmplY3RlZFNjcmlwdDo6ZXZh
bHVhdGVPbkNhbGxGcmFtZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIEpTQzo6SlNWYWx1ZQog
ICAgIG1ha2VFdmFsQ2FsbChlcnJvclN0cmluZywgZnVuY3Rpb24sIHJlc3VsdCwgd2FzVGhyb3du
LCBzYXZlZFJlc3VsdEluZGV4KTsKIH0KIAotdm9pZCBJbmplY3RlZFNjcmlwdDo6Z2V0RnVuY3Rp
b25EZXRhaWxzKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBmdW5jdGlv
bklkLCBSZWZQdHI8UHJvdG9jb2w6OkRlYnVnZ2VyOjpGdW5jdGlvbkRldGFpbHM+JiByZXN1bHQp
Cit2b2lkIEluamVjdGVkU2NyaXB0OjpnZXRGdW5jdGlvbkRldGFpbHMoUHJvdG9jb2w6OkVycm9y
U3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBmdW5jdGlvbklkLCBSZWZQdHI8UHJv
dG9jb2w6OkRlYnVnZ2VyOjpGdW5jdGlvbkRldGFpbHM+JiByZXN1bHQpCiB7CiAgICAgRGVwcmVj
YXRlZDo6U2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKGluamVjdGVkU2NyaXB0T2JqZWN0KCks
ICJnZXRGdW5jdGlvbkRldGFpbHMiX3MsIGluc3BlY3RvckVudmlyb25tZW50KCktPmZ1bmN0aW9u
Q2FsbEhhbmRsZXIoKSk7CiAgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoZnVuY3Rpb25JZCk7
CiAKICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHJlc3VsdFZhbHVlID0gbWFrZUNhbGwoZnVuY3Rp
b24pOwogICAgIGlmICghcmVzdWx0VmFsdWUgfHwgcmVzdWx0VmFsdWUtPnR5cGUoKSAhPSBKU09O
OjpWYWx1ZTo6VHlwZTo6T2JqZWN0KSB7Ci0gICAgICAgIGlmICghcmVzdWx0VmFsdWUtPmFzU3Ry
aW5nKGVycm9yU3RyaW5nKSkKKyAgICAgICAgZXJyb3JTdHJpbmcgPSByZXN1bHRWYWx1ZS0+YXNT
dHJpbmcoKTsKKyAgICAgICAgaWYgKCFlcnJvclN0cmluZykKICAgICAgICAgICAgIGVycm9yU3Ry
aW5nID0gIkludGVybmFsIGVycm9yIl9zOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
cmVzdWx0ID0gQmluZGluZ1RyYWl0czxQcm90b2NvbDo6RGVidWdnZXI6OkZ1bmN0aW9uRGV0YWls
cz46OnJ1bnRpbWVDYXN0KFdURk1vdmUocmVzdWx0VmFsdWUpKTsKKyAgICByZXN1bHQgPSBQcm90
b2NvbDo6QmluZGluZ1RyYWl0czxQcm90b2NvbDo6RGVidWdnZXI6OkZ1bmN0aW9uRGV0YWlscz46
OnJ1bnRpbWVDYXN0KHJlc3VsdFZhbHVlLnJlbGVhc2VOb25OdWxsKCkpOwogfQogCi12b2lkIElu
amVjdGVkU2NyaXB0OjpmdW5jdGlvbkRldGFpbHMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBK
U0M6OkpTVmFsdWUgdmFsdWUsIFJlZlB0cjxQcm90b2NvbDo6RGVidWdnZXI6OkZ1bmN0aW9uRGV0
YWlscz4mIHJlc3VsdCkKK3ZvaWQgSW5qZWN0ZWRTY3JpcHQ6OmZ1bmN0aW9uRGV0YWlscyhQcm90
b2NvbDo6RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBKU0M6OkpTVmFsdWUgdmFsdWUsIFJlZlB0
cjxQcm90b2NvbDo6RGVidWdnZXI6OkZ1bmN0aW9uRGV0YWlscz4mIHJlc3VsdCkKIHsKICAgICBE
ZXByZWNhdGVkOjpTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24oaW5qZWN0ZWRTY3JpcHRPYmpl
Y3QoKSwgImZ1bmN0aW9uRGV0YWlscyJfcywgaW5zcGVjdG9yRW52aXJvbm1lbnQoKS0+ZnVuY3Rp
b25DYWxsSGFuZGxlcigpKTsKICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudCh2YWx1ZSk7CiAK
ICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHJlc3VsdFZhbHVlID0gbWFrZUNhbGwoZnVuY3Rpb24p
OwogICAgIGlmICghcmVzdWx0VmFsdWUgfHwgcmVzdWx0VmFsdWUtPnR5cGUoKSAhPSBKU09OOjpW
YWx1ZTo6VHlwZTo6T2JqZWN0KSB7Ci0gICAgICAgIGlmICghcmVzdWx0VmFsdWUtPmFzU3RyaW5n
KGVycm9yU3RyaW5nKSkKKyAgICAgICAgZXJyb3JTdHJpbmcgPSByZXN1bHRWYWx1ZS0+YXNTdHJp
bmcoKTsKKyAgICAgICAgaWYgKCFlcnJvclN0cmluZykKICAgICAgICAgICAgIGVycm9yU3RyaW5n
ID0gIkludGVybmFsIGVycm9yIl9zOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgcmVz
dWx0ID0gQmluZGluZ1RyYWl0czxQcm90b2NvbDo6RGVidWdnZXI6OkZ1bmN0aW9uRGV0YWlscz46
OnJ1bnRpbWVDYXN0KFdURk1vdmUocmVzdWx0VmFsdWUpKTsKKyAgICByZXN1bHQgPSBQcm90b2Nv
bDo6QmluZGluZ1RyYWl0czxQcm90b2NvbDo6RGVidWdnZXI6OkZ1bmN0aW9uRGV0YWlscz46OnJ1
bnRpbWVDYXN0KHJlc3VsdFZhbHVlLnJlbGVhc2VOb25OdWxsKCkpOwogfQogCi12b2lkIEluamVj
dGVkU2NyaXB0OjpnZXRQcmV2aWV3KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3Ry
aW5nJiBvYmplY3RJZCwgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpPYmplY3RQcmV2aWV3PiYg
cmVzdWx0KQordm9pZCBJbmplY3RlZFNjcmlwdDo6Z2V0UHJldmlldyhQcm90b2NvbDo6RXJyb3JT
dHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBSZWZQdHI8UHJvdG9j
b2w6OlJ1bnRpbWU6Ok9iamVjdFByZXZpZXc+JiByZXN1bHQpCiB7CiAgICAgRGVwcmVjYXRlZDo6
U2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKGluamVjdGVkU2NyaXB0T2JqZWN0KCksICJnZXRQ
cmV2aWV3Il9zLCBpbnNwZWN0b3JFbnZpcm9ubWVudCgpLT5mdW5jdGlvbkNhbGxIYW5kbGVyKCkp
OwogICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KG9iamVjdElkKTsKIAogICAgIFJlZlB0cjxK
U09OOjpWYWx1ZT4gcmVzdWx0VmFsdWUgPSBtYWtlQ2FsbChmdW5jdGlvbik7CiAgICAgaWYgKCFy
ZXN1bHRWYWx1ZSB8fCByZXN1bHRWYWx1ZS0+dHlwZSgpICE9IEpTT046OlZhbHVlOjpUeXBlOjpP
YmplY3QpIHsKLSAgICAgICAgaWYgKCFyZXN1bHRWYWx1ZS0+YXNTdHJpbmcoZXJyb3JTdHJpbmcp
KQorICAgICAgICBlcnJvclN0cmluZyA9IHJlc3VsdFZhbHVlLT5hc1N0cmluZygpOworICAgICAg
ICBpZiAoIWVycm9yU3RyaW5nKQogICAgICAgICAgICAgZXJyb3JTdHJpbmcgPSAiSW50ZXJuYWwg
ZXJyb3IiX3M7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICByZXN1bHQgPSBCaW5kaW5n
VHJhaXRzPFByb3RvY29sOjpSdW50aW1lOjpPYmplY3RQcmV2aWV3Pjo6cnVudGltZUNhc3QoV1RG
TW92ZShyZXN1bHRWYWx1ZSkpOworICAgIHJlc3VsdCA9IFByb3RvY29sOjpCaW5kaW5nVHJhaXRz
PFByb3RvY29sOjpSdW50aW1lOjpPYmplY3RQcmV2aWV3Pjo6cnVudGltZUNhc3QocmVzdWx0VmFs
dWUucmVsZWFzZU5vbk51bGwoKSk7CiB9CiAKLXZvaWQgSW5qZWN0ZWRTY3JpcHQ6OmdldFByb3Bl
cnRpZXMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBi
b29sIG93blByb3BlcnRpZXMsIGludCBmZXRjaFN0YXJ0LCBpbnQgZmV0Y2hDb3VudCwgYm9vbCBn
ZW5lcmF0ZVByZXZpZXcsIFJlZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpQ
cm9wZXJ0eURlc2NyaXB0b3I+PiYgcHJvcGVydGllcykKK3ZvaWQgSW5qZWN0ZWRTY3JpcHQ6Omdl
dFByb3BlcnRpZXMoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3Ry
aW5nJiBvYmplY3RJZCwgYm9vbCBvd25Qcm9wZXJ0aWVzLCBpbnQgZmV0Y2hTdGFydCwgaW50IGZl
dGNoQ291bnQsIGJvb2wgZ2VuZXJhdGVQcmV2aWV3LCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90
b2NvbDo6UnVudGltZTo6UHJvcGVydHlEZXNjcmlwdG9yPj4mIHByb3BlcnRpZXMpCiB7CiAgICAg
QVNTRVJUKGZldGNoU3RhcnQgPj0gMCk7CiAgICAgQVNTRVJUKGZldGNoQ291bnQgPj0gMCk7CkBA
IC0xODIsMTAgKzE4NSwxMCBAQCB2b2lkIEluamVjdGVkU2NyaXB0OjpnZXRQcm9wZXJ0aWVzKEVy
cm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBvYmplYwogICAgICAgICByZXR1
cm47CiAgICAgfQogCi0gICAgcHJvcGVydGllcyA9IEJpbmRpbmdUcmFpdHM8SlNPTjo6QXJyYXlP
ZjxQcm90b2NvbDo6UnVudGltZTo6UHJvcGVydHlEZXNjcmlwdG9yPj46OnJ1bnRpbWVDYXN0KFdU
Rk1vdmUocmVzdWx0KSk7CisgICAgcHJvcGVydGllcyA9IFByb3RvY29sOjpCaW5kaW5nVHJhaXRz
PEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OlByb3BlcnR5RGVzY3JpcHRvcj4+Ojpy
dW50aW1lQ2FzdChyZXN1bHQucmVsZWFzZU5vbk51bGwoKSk7CiB9CiAKLXZvaWQgSW5qZWN0ZWRT
Y3JpcHQ6OmdldERpc3BsYXlhYmxlUHJvcGVydGllcyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcs
IGNvbnN0IFN0cmluZyYgb2JqZWN0SWQsIGludCBmZXRjaFN0YXJ0LCBpbnQgZmV0Y2hDb3VudCwg
Ym9vbCBnZW5lcmF0ZVByZXZpZXcsIFJlZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50
aW1lOjpQcm9wZXJ0eURlc2NyaXB0b3I+PiYgcHJvcGVydGllcykKK3ZvaWQgSW5qZWN0ZWRTY3Jp
cHQ6OmdldERpc3BsYXlhYmxlUHJvcGVydGllcyhQcm90b2NvbDo6RXJyb3JTdHJpbmcmIGVycm9y
U3RyaW5nLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBpbnQgZmV0Y2hTdGFydCwgaW50IGZldGNo
Q291bnQsIGJvb2wgZ2VuZXJhdGVQcmV2aWV3LCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90b2Nv
bDo6UnVudGltZTo6UHJvcGVydHlEZXNjcmlwdG9yPj4mIHByb3BlcnRpZXMpCiB7CiAgICAgQVNT
RVJUKGZldGNoU3RhcnQgPj0gMCk7CiAgICAgQVNTRVJUKGZldGNoQ291bnQgPj0gMCk7CkBAIC0y
MDIsMTAgKzIwNSwxMCBAQCB2b2lkIEluamVjdGVkU2NyaXB0OjpnZXREaXNwbGF5YWJsZVByb3Bl
cnRpZXMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdAogICAgICAgICByZXR1cm47
CiAgICAgfQogCi0gICAgcHJvcGVydGllcyA9IEJpbmRpbmdUcmFpdHM8SlNPTjo6QXJyYXlPZjxQ
cm90b2NvbDo6UnVudGltZTo6UHJvcGVydHlEZXNjcmlwdG9yPj46OnJ1bnRpbWVDYXN0KFdURk1v
dmUocmVzdWx0KSk7CisgICAgcHJvcGVydGllcyA9IFByb3RvY29sOjpCaW5kaW5nVHJhaXRzPEpT
T046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OlByb3BlcnR5RGVzY3JpcHRvcj4+OjpydW50
aW1lQ2FzdChyZXN1bHQucmVsZWFzZU5vbk51bGwoKSk7CiB9CiAKLXZvaWQgSW5qZWN0ZWRTY3Jp
cHQ6OmdldEludGVybmFsUHJvcGVydGllcyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0
IFN0cmluZyYgb2JqZWN0SWQsIGJvb2wgZ2VuZXJhdGVQcmV2aWV3LCBSZWZQdHI8SlNPTjo6QXJy
YXlPZjxQcm90b2NvbDo6UnVudGltZTo6SW50ZXJuYWxQcm9wZXJ0eURlc2NyaXB0b3I+PiYgcHJv
cGVydGllcykKK3ZvaWQgSW5qZWN0ZWRTY3JpcHQ6OmdldEludGVybmFsUHJvcGVydGllcyhQcm90
b2NvbDo6RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBi
b29sIGdlbmVyYXRlUHJldmlldywgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRp
bWU6OkludGVybmFsUHJvcGVydHlEZXNjcmlwdG9yPj4mIHByb3BlcnRpZXMpCiB7CiAgICAgRGVw
cmVjYXRlZDo6U2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKGluamVjdGVkU2NyaXB0T2JqZWN0
KCksICJnZXRJbnRlcm5hbFByb3BlcnRpZXMiX3MsIGluc3BlY3RvckVudmlyb25tZW50KCktPmZ1
bmN0aW9uQ2FsbEhhbmRsZXIoKSk7CiAgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQob2JqZWN0
SWQpOwpAQCAtMjE3LDExICsyMjAsMTIgQEAgdm9pZCBJbmplY3RlZFNjcmlwdDo6Z2V0SW50ZXJu
YWxQcm9wZXJ0aWVzKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW4KICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIGF1dG8gYXJyYXkgPSBCaW5kaW5nVHJhaXRzPEpTT046
OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OkludGVybmFsUHJvcGVydHlEZXNjcmlwdG9yPj46
OnJ1bnRpbWVDYXN0KFdURk1vdmUocmVzdWx0KSk7Ci0gICAgcHJvcGVydGllcyA9IGFycmF5LT5s
ZW5ndGgoKSA+IDAgPyBhcnJheSA6IG51bGxwdHI7CisgICAgYXV0byBhcnJheSA9IFByb3RvY29s
OjpCaW5kaW5nVHJhaXRzPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OkludGVybmFs
UHJvcGVydHlEZXNjcmlwdG9yPj46OnJ1bnRpbWVDYXN0KHJlc3VsdC5yZWxlYXNlTm9uTnVsbCgp
KTsKKyAgICBpZiAoYXJyYXktPmxlbmd0aCgpKQorICAgICAgICBwcm9wZXJ0aWVzID0gV1RGTW92
ZShhcnJheSk7CiB9CiAKLXZvaWQgSW5qZWN0ZWRTY3JpcHQ6OmdldENvbGxlY3Rpb25FbnRyaWVz
KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBvYmplY3RJZCwgY29uc3Qg
U3RyaW5nJiBvYmplY3RHcm91cCwgaW50IGZldGNoU3RhcnQsIGludCBmZXRjaENvdW50LCBSZWZQ
dHI8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UnVudGltZTo6Q29sbGVjdGlvbkVudHJ5Pj4mIGVu
dHJpZXMpCit2b2lkIEluamVjdGVkU2NyaXB0OjpnZXRDb2xsZWN0aW9uRW50cmllcyhQcm90b2Nv
bDo6RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBjb25z
dCBTdHJpbmcmIG9iamVjdEdyb3VwLCBpbnQgZmV0Y2hTdGFydCwgaW50IGZldGNoQ291bnQsIFJl
ZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpDb2xsZWN0aW9uRW50cnk+PiYg
ZW50cmllcykKIHsKICAgICBBU1NFUlQoZmV0Y2hTdGFydCA+PSAwKTsKICAgICBBU1NFUlQoZmV0
Y2hDb3VudCA+PSAwKTsKQEAgLTIzOCwxMCArMjQyLDEwIEBAIHZvaWQgSW5qZWN0ZWRTY3JpcHQ6
OmdldENvbGxlY3Rpb25FbnRyaWVzKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3Ry
aW5nCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBlbnRyaWVzID0gQmluZGluZ1RyYWl0
czxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpDb2xsZWN0aW9uRW50cnk+Pjo6cnVu
dGltZUNhc3QoV1RGTW92ZShyZXN1bHQpKTsKKyAgICBlbnRyaWVzID0gUHJvdG9jb2w6OkJpbmRp
bmdUcmFpdHM8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UnVudGltZTo6Q29sbGVjdGlvbkVudHJ5
Pj46OnJ1bnRpbWVDYXN0KHJlc3VsdC5yZWxlYXNlTm9uTnVsbCgpKTsKIH0KIAotdm9pZCBJbmpl
Y3RlZFNjcmlwdDo6c2F2ZVJlc3VsdChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0
cmluZyYgY2FsbEFyZ3VtZW50SlNPTiwgT3B0aW9uYWw8aW50PiYgc2F2ZWRSZXN1bHRJbmRleCkK
K3ZvaWQgSW5qZWN0ZWRTY3JpcHQ6OnNhdmVSZXN1bHQoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBl
cnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBjYWxsQXJndW1lbnRKU09OLCBPcHRpb25hbDxpbnQ+
JiBzYXZlZFJlc3VsdEluZGV4KQogewogICAgIERlcHJlY2F0ZWQ6OlNjcmlwdEZ1bmN0aW9uQ2Fs
bCBmdW5jdGlvbihpbmplY3RlZFNjcmlwdE9iamVjdCgpLCAic2F2ZVJlc3VsdCJfcywgaW5zcGVj
dG9yRW52aXJvbm1lbnQoKS0+ZnVuY3Rpb25DYWxsSGFuZGxlcigpKTsKICAgICBmdW5jdGlvbi5h
cHBlbmRBcmd1bWVudChjYWxsQXJndW1lbnRKU09OKTsKQEAgLTI1Miw5ICsyNTYsNyBAQCB2b2lk
IEluamVjdGVkU2NyaXB0OjpzYXZlUmVzdWx0KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29u
c3QgU3RyaW5nJiBjYWxsQXJndQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaW50IHJl
c3VsdEluZGV4ID0gMDsKLSAgICBpZiAocmVzdWx0LT5hc0ludGVnZXIocmVzdWx0SW5kZXgpICYm
IHJlc3VsdEluZGV4ID4gMCkKLSAgICAgICAgc2F2ZWRSZXN1bHRJbmRleCA9IHJlc3VsdEluZGV4
OworICAgIHNhdmVkUmVzdWx0SW5kZXggPSByZXN1bHQtPmFzSW50ZWdlcigpOwogfQogCiBSZWY8
SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6RGVidWdnZXI6OkNhbGxGcmFtZT4+IEluamVjdGVkU2Ny
aXB0Ojp3cmFwQ2FsbEZyYW1lcyhKU0M6OkpTVmFsdWUgY2FsbEZyYW1lcykgY29uc3QKQEAgLTI2
OSw4ICsyNzEsOCBAQCBSZWY8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6RGVidWdnZXI6OkNhbGxG
cmFtZT4+IEluamVjdGVkU2NyaXB0Ojp3cmFwQ2FsbEZyYW1lcwogICAgICAgICByZXR1cm4gSlNP
Tjo6QXJyYXlPZjxQcm90b2NvbDo6RGVidWdnZXI6OkNhbGxGcmFtZT46OmNyZWF0ZSgpOwogCiAg
ICAgUmVmUHRyPEpTT046OlZhbHVlPiByZXN1bHQgPSB0b0luc3BlY3RvclZhbHVlKGdsb2JhbE9i
amVjdCgpLCBjYWxsUmVzdWx0LnZhbHVlKCkpOwotICAgIGlmIChyZXN1bHQtPnR5cGUoKSA9PSBK
U09OOjpWYWx1ZTo6VHlwZTo6QXJyYXkpCi0gICAgICAgIHJldHVybiBCaW5kaW5nVHJhaXRzPEpT
T046OkFycmF5T2Y8UHJvdG9jb2w6OkRlYnVnZ2VyOjpDYWxsRnJhbWU+Pjo6cnVudGltZUNhc3Qo
V1RGTW92ZShyZXN1bHQpKS5yZWxlYXNlTm9uTnVsbCgpOworICAgIGlmIChyZXN1bHQgJiYgcmVz
dWx0LT50eXBlKCkgPT0gSlNPTjo6VmFsdWU6OlR5cGU6OkFycmF5KQorICAgICAgICByZXR1cm4g
UHJvdG9jb2w6OkJpbmRpbmdUcmFpdHM8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6RGVidWdnZXI6
OkNhbGxGcmFtZT4+OjpydW50aW1lQ2FzdChyZXN1bHQucmVsZWFzZU5vbk51bGwoKSk7CiAKICAg
ICByZXR1cm4gSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6RGVidWdnZXI6OkNhbGxGcmFtZT46OmNy
ZWF0ZSgpOwogfQpAQCAtMjg4LDExICsyOTAsMTUgQEAgUmVmUHRyPFByb3RvY29sOjpSdW50aW1l
OjpSZW1vdGVPYmplY3Q+IEluamVjdGVkU2NyaXB0Ojp3cmFwT2JqZWN0KEpTQzo6SlNWYWx1ZQog
ICAgIGlmICghY2FsbFJlc3VsdCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBSZWZQ
dHI8SlNPTjo6T2JqZWN0PiByZXN1bHRPYmplY3Q7Ci0gICAgYm9vbCBjYXN0U3VjY2VlZGVkID0g
dG9JbnNwZWN0b3JWYWx1ZShnbG9iYWxPYmplY3QoKSwgY2FsbFJlc3VsdC52YWx1ZSgpKS0+YXNP
YmplY3QocmVzdWx0T2JqZWN0KTsKLSAgICBBU1NFUlRfVU5VU0VEKGNhc3RTdWNjZWVkZWQsIGNh
c3RTdWNjZWVkZWQpOworICAgIGF1dG8gcmVzdWx0VmFsdWUgPSB0b0luc3BlY3RvclZhbHVlKGds
b2JhbE9iamVjdCgpLCBjYWxsUmVzdWx0LnZhbHVlKCkpOworICAgIGlmICghcmVzdWx0VmFsdWUp
CisgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJuIEJpbmRpbmdUcmFpdHM8UHJv
dG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD46OnJ1bnRpbWVDYXN0KHJlc3VsdE9iamVjdCk7
CisgICAgYXV0byByZXN1bHRPYmplY3QgPSByZXN1bHRWYWx1ZS0+YXNPYmplY3QoKTsKKyAgICBp
ZiAoIXJlc3VsdE9iamVjdCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4g
UHJvdG9jb2w6OkJpbmRpbmdUcmFpdHM8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD46
OnJ1bnRpbWVDYXN0KHJlc3VsdE9iamVjdC5yZWxlYXNlTm9uTnVsbCgpKTsKIH0KIAogUmVmUHRy
PFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+IEluamVjdGVkU2NyaXB0Ojp3cmFwSlNP
TlN0cmluZyhjb25zdCBTdHJpbmcmIGpzb24sIGNvbnN0IFN0cmluZyYgZ3JvdXBOYW1lLCBib29s
IGdlbmVyYXRlUHJldmlldykgY29uc3QKQEAgLTMxMCwxMSArMzE2LDE1IEBAIFJlZlB0cjxQcm90
b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiBJbmplY3RlZFNjcmlwdDo6d3JhcEpTT05TdHJp
bmcoY29uc3QgU3RyCiAgICAgaWYgKGNhbGxSZXN1bHQudmFsdWUoKS5pc051bGwoKSkKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiByZXN1bHRPYmpl
Y3Q7Ci0gICAgYm9vbCBjYXN0U3VjY2VlZGVkID0gdG9JbnNwZWN0b3JWYWx1ZShnbG9iYWxPYmpl
Y3QoKSwgY2FsbFJlc3VsdC52YWx1ZSgpKS0+YXNPYmplY3QocmVzdWx0T2JqZWN0KTsKLSAgICBB
U1NFUlRfVU5VU0VEKGNhc3RTdWNjZWVkZWQsIGNhc3RTdWNjZWVkZWQpOworICAgIGF1dG8gcmVz
dWx0VmFsdWUgPSB0b0luc3BlY3RvclZhbHVlKGdsb2JhbE9iamVjdCgpLCBjYWxsUmVzdWx0LnZh
bHVlKCkpOworICAgIGlmICghcmVzdWx0VmFsdWUpCisgICAgICAgIHJldHVybiBudWxscHRyOwog
Ci0gICAgcmV0dXJuIEJpbmRpbmdUcmFpdHM8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVj
dD46OnJ1bnRpbWVDYXN0KHJlc3VsdE9iamVjdCk7CisgICAgYXV0byByZXN1bHRPYmplY3QgPSBy
ZXN1bHRWYWx1ZS0+YXNPYmplY3QoKTsKKyAgICBpZiAoIXJlc3VsdE9iamVjdCkKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gUHJvdG9jb2w6OkJpbmRpbmdUcmFpdHM8UHJv
dG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD46OnJ1bnRpbWVDYXN0KHJlc3VsdE9iamVjdC5y
ZWxlYXNlTm9uTnVsbCgpKTsKIH0KIAogUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVP
YmplY3Q+IEluamVjdGVkU2NyaXB0Ojp3cmFwVGFibGUoSlNDOjpKU1ZhbHVlIHRhYmxlLCBKU0M6
OkpTVmFsdWUgY29sdW1ucykgY29uc3QKQEAgLTMzMiwxMSArMzQyLDE1IEBAIFJlZlB0cjxQcm90
b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiBJbmplY3RlZFNjcmlwdDo6d3JhcFRhYmxlKEpT
Qzo6SlNWYWx1ZSB0CiAgICAgaWYgKCFjYWxsUmVzdWx0KQogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKIAotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHJlc3VsdE9iamVjdDsKLSAgICBib29sIGNh
c3RTdWNjZWVkZWQgPSB0b0luc3BlY3RvclZhbHVlKGdsb2JhbE9iamVjdCgpLCBjYWxsUmVzdWx0
LnZhbHVlKCkpLT5hc09iamVjdChyZXN1bHRPYmplY3QpOwotICAgIEFTU0VSVF9VTlVTRUQoY2Fz
dFN1Y2NlZWRlZCwgY2FzdFN1Y2NlZWRlZCk7CisgICAgYXV0byByZXN1bHRWYWx1ZSA9IHRvSW5z
cGVjdG9yVmFsdWUoZ2xvYmFsT2JqZWN0KCksIGNhbGxSZXN1bHQudmFsdWUoKSk7CisgICAgaWYg
KCFyZXN1bHRWYWx1ZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gQmlu
ZGluZ1RyYWl0czxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0Pjo6cnVudGltZUNhc3Qo
cmVzdWx0T2JqZWN0KTsKKyAgICBhdXRvIHJlc3VsdE9iamVjdCA9IHJlc3VsdFZhbHVlLT5hc09i
amVjdCgpOworICAgIGlmICghcmVzdWx0T2JqZWN0KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KworICAgIHJldHVybiBQcm90b2NvbDo6QmluZGluZ1RyYWl0czxQcm90b2NvbDo6UnVudGltZTo6
UmVtb3RlT2JqZWN0Pjo6cnVudGltZUNhc3QocmVzdWx0T2JqZWN0LnJlbGVhc2VOb25OdWxsKCkp
OwogfQogCiBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6Ok9iamVjdFByZXZpZXc+IEluamVjdGVk
U2NyaXB0OjpwcmV2aWV3VmFsdWUoSlNDOjpKU1ZhbHVlIHZhbHVlKSBjb25zdApAQCAtMzQ5LDEx
ICszNjMsMTUgQEAgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpPYmplY3RQcmV2aWV3PiBJbmpl
Y3RlZFNjcmlwdDo6cHJldmlld1ZhbHVlKEpTQzo6SlNWYWwKICAgICBpZiAoIWNhbGxSZXN1bHQp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcmVz
dWx0T2JqZWN0OwotICAgIGJvb2wgY2FzdFN1Y2NlZWRlZCA9IHRvSW5zcGVjdG9yVmFsdWUoZ2xv
YmFsT2JqZWN0KCksIGNhbGxSZXN1bHQudmFsdWUoKSktPmFzT2JqZWN0KHJlc3VsdE9iamVjdCk7
Ci0gICAgQVNTRVJUX1VOVVNFRChjYXN0U3VjY2VlZGVkLCBjYXN0U3VjY2VlZGVkKTsKKyAgICBh
dXRvIHJlc3VsdFZhbHVlID0gdG9JbnNwZWN0b3JWYWx1ZShnbG9iYWxPYmplY3QoKSwgY2FsbFJl
c3VsdC52YWx1ZSgpKTsKKyAgICBpZiAoIXJlc3VsdFZhbHVlKQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKIAotICAgIHJldHVybiBCaW5kaW5nVHJhaXRzPFByb3RvY29sOjpSdW50aW1lOjpPYmpl
Y3RQcmV2aWV3Pjo6cnVudGltZUNhc3QocmVzdWx0T2JqZWN0KTsKKyAgICBhdXRvIHJlc3VsdE9i
amVjdCA9IHJlc3VsdFZhbHVlLT5hc09iamVjdCgpOworICAgIGlmICghcmVzdWx0T2JqZWN0KQor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBQcm90b2NvbDo6QmluZGluZ1Ry
YWl0czxQcm90b2NvbDo6UnVudGltZTo6T2JqZWN0UHJldmlldz46OnJ1bnRpbWVDYXN0KHJlc3Vs
dE9iamVjdC5yZWxlYXNlTm9uTnVsbCgpKTsKIH0KIAogdm9pZCBJbmplY3RlZFNjcmlwdDo6c2V0
RXZlbnRWYWx1ZShKU0M6OkpTVmFsdWUgdmFsdWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0LmgKaW5kZXggY2RlZTQ1ZjJkNmIzMzc3ZjFlMDUy
M2NmZTQwMWFlMjhiY2YyZGY2Zi4uZDYzYWVmMDI1OTk2NDg4NDZjNjgzNjE1Y2I1NmM2NDNjMzg5
YjFhNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3Rl
ZFNjcmlwdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRT
Y3JpcHQuaApAQCAtNTksMjAgKzU5LDIwIEBAIHB1YmxpYzoKICAgICAgICAgYm9vbCBzYXZlUmVz
dWx0IHsgZmFsc2UgfTsKICAgICAgICAgVmVjdG9yPEpTQzo6SlNWYWx1ZT4gYXJnczsKICAgICB9
OwotICAgIHZvaWQgZXhlY3V0ZShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgZnVuY3Rpb25T
dHJpbmcsIEV4ZWN1dGVPcHRpb25zJiYsIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3Rl
T2JqZWN0PiYgcmVzdWx0LCBPcHRpb25hbDxib29sPiYgd2FzVGhyb3duLCBPcHRpb25hbDxpbnQ+
JiBzYXZlZFJlc3VsdEluZGV4KTsKKyAgICB2b2lkIGV4ZWN1dGUoUHJvdG9jb2w6OkVycm9yU3Ry
aW5nJiwgY29uc3QgU3RyaW5nJiBmdW5jdGlvblN0cmluZywgRXhlY3V0ZU9wdGlvbnMmJiwgUmVm
UHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiByZXN1bHQsIE9wdGlvbmFsPGJv
b2w+JiB3YXNUaHJvd24sIE9wdGlvbmFsPGludD4mIHNhdmVkUmVzdWx0SW5kZXgpOwogCi0gICAg
dm9pZCBldmFsdWF0ZShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgY29u
c3QgU3RyaW5nJiBvYmplY3RHcm91cCwgYm9vbCBpbmNsdWRlQ29tbWFuZExpbmVBUEksIGJvb2wg
cmV0dXJuQnlWYWx1ZSwgYm9vbCBnZW5lcmF0ZVByZXZpZXcsIGJvb2wgc2F2ZVJlc3VsdCwgUmVm
UHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiByZXN1bHQsIE9wdGlvbmFsPGJv
b2w+JiB3YXNUaHJvd24sIE9wdGlvbmFsPGludD4mIHNhdmVkUmVzdWx0SW5kZXgpOworICAgIHZv
aWQgZXZhbHVhdGUoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBleHByZXNz
aW9uLCBjb25zdCBTdHJpbmcmIG9iamVjdEdyb3VwLCBib29sIGluY2x1ZGVDb21tYW5kTGluZUFQ
SSwgYm9vbCByZXR1cm5CeVZhbHVlLCBib29sIGdlbmVyYXRlUHJldmlldywgYm9vbCBzYXZlUmVz
dWx0LCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3VsdCwgT3B0
aW9uYWw8Ym9vbD4mIHdhc1Rocm93biwgT3B0aW9uYWw8aW50PiYgc2F2ZWRSZXN1bHRJbmRleCk7
CiAgICAgdm9pZCBhd2FpdFByb21pc2UoY29uc3QgU3RyaW5nJiBwcm9taXNlT2JqZWN0SWQsIGJv
b2wgcmV0dXJuQnlWYWx1ZSwgYm9vbCBnZW5lcmF0ZVByZXZpZXcsIGJvb2wgc2F2ZVJlc3VsdCwg
QXN5bmNDYWxsQ2FsbGJhY2smJik7Ci0gICAgdm9pZCBldmFsdWF0ZU9uQ2FsbEZyYW1lKEVycm9y
U3RyaW5nJiwgSlNDOjpKU1ZhbHVlIGNhbGxGcmFtZXMsIGNvbnN0IFN0cmluZyYgY2FsbEZyYW1l
SWQsIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCwg
Ym9vbCBpbmNsdWRlQ29tbWFuZExpbmVBUEksIGJvb2wgcmV0dXJuQnlWYWx1ZSwgYm9vbCBnZW5l
cmF0ZVByZXZpZXcsIGJvb2wgc2F2ZVJlc3VsdCwgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpS
ZW1vdGVPYmplY3Q+JiByZXN1bHQsIE9wdGlvbmFsPGJvb2w+JiB3YXNUaHJvd24sIE9wdGlvbmFs
PGludD4mIHNhdmVkUmVzdWx0SW5kZXgpOwotICAgIHZvaWQgY2FsbEZ1bmN0aW9uT24oRXJyb3JT
dHJpbmcmLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24s
IGNvbnN0IFN0cmluZyYgYXJndW1lbnRzLCBib29sIHJldHVybkJ5VmFsdWUsIGJvb2wgZ2VuZXJh
dGVQcmV2aWV3LCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3Vs
dCwgT3B0aW9uYWw8Ym9vbD4mIHdhc1Rocm93bik7Ci0gICAgdm9pZCBnZXRGdW5jdGlvbkRldGFp
bHMoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGZ1bmN0aW9uSWQsIFJlZlB0cjxQcm90b2Nv
bDo6RGVidWdnZXI6OkZ1bmN0aW9uRGV0YWlscz4mIHJlc3VsdCk7Ci0gICAgdm9pZCBmdW5jdGlv
bkRldGFpbHMoRXJyb3JTdHJpbmcmLCBKU0M6OkpTVmFsdWUsIFJlZlB0cjxQcm90b2NvbDo6RGVi
dWdnZXI6OkZ1bmN0aW9uRGV0YWlscz4mIHJlc3VsdCk7Ci0gICAgdm9pZCBnZXRQcmV2aWV3KEVy
cm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBvYmplY3RJZCwgUmVmUHRyPFByb3RvY29sOjpSdW50
aW1lOjpPYmplY3RQcmV2aWV3PiYgcmVzdWx0KTsKLSAgICB2b2lkIGdldFByb3BlcnRpZXMoRXJy
b3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBib29sIG93blByb3BlcnRpZXMsIGlu
dCBmZXRjaFN0YXJ0LCBpbnQgZmV0Y2hDb3VudCwgYm9vbCBnZW5lcmF0ZVByZXZpZXcsIFJlZlB0
cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpQcm9wZXJ0eURlc2NyaXB0b3I+PiYg
cmVzdWx0KTsKLSAgICB2b2lkIGdldERpc3BsYXlhYmxlUHJvcGVydGllcyhFcnJvclN0cmluZyYs
IGNvbnN0IFN0cmluZyYgb2JqZWN0SWQsIGludCBmZXRjaFN0YXJ0LCBpbnQgZmV0Y2hDb3VudCwg
Ym9vbCBnZW5lcmF0ZVByZXZpZXcsIFJlZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50
aW1lOjpQcm9wZXJ0eURlc2NyaXB0b3I+PiYgcmVzdWx0KTsKLSAgICB2b2lkIGdldEludGVybmFs
UHJvcGVydGllcyhFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgb2JqZWN0SWQsIGJvb2wgZ2Vu
ZXJhdGVQcmV2aWV3LCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UnVudGltZTo6SW50
ZXJuYWxQcm9wZXJ0eURlc2NyaXB0b3I+PiYgcmVzdWx0KTsKLSAgICB2b2lkIGdldENvbGxlY3Rp
b25FbnRyaWVzKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBvYmplY3RJZCwgY29uc3QgU3Ry
aW5nJiBvYmplY3RHcm91cCwgaW50IGZldGNoU3RhcnQsIGludCBmZXRjaENvdW50LCBSZWZQdHI8
SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UnVudGltZTo6Q29sbGVjdGlvbkVudHJ5Pj4mIGVudHJp
ZXMpOwotICAgIHZvaWQgc2F2ZVJlc3VsdChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgY2Fs
bEFyZ3VtZW50SlNPTiwgT3B0aW9uYWw8aW50PiYgc2F2ZWRSZXN1bHRJbmRleCk7CisgICAgdm9p
ZCBldmFsdWF0ZU9uQ2FsbEZyYW1lKFByb3RvY29sOjpFcnJvclN0cmluZyYsIEpTQzo6SlNWYWx1
ZSBjYWxsRnJhbWVzLCBjb25zdCBTdHJpbmcmIGNhbGxGcmFtZUlkLCBjb25zdCBTdHJpbmcmIGV4
cHJlc3Npb24sIGNvbnN0IFN0cmluZyYgb2JqZWN0R3JvdXAsIGJvb2wgaW5jbHVkZUNvbW1hbmRM
aW5lQVBJLCBib29sIHJldHVybkJ5VmFsdWUsIGJvb2wgZ2VuZXJhdGVQcmV2aWV3LCBib29sIHNh
dmVSZXN1bHQsIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0
LCBPcHRpb25hbDxib29sPiYgd2FzVGhyb3duLCBPcHRpb25hbDxpbnQ+JiBzYXZlZFJlc3VsdElu
ZGV4KTsKKyAgICB2b2lkIGNhbGxGdW5jdGlvbk9uKFByb3RvY29sOjpFcnJvclN0cmluZyYsIGNv
bnN0IFN0cmluZyYgb2JqZWN0SWQsIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgY29uc3QgU3Ry
aW5nJiBhcmd1bWVudHMsIGJvb2wgcmV0dXJuQnlWYWx1ZSwgYm9vbCBnZW5lcmF0ZVByZXZpZXcs
IFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0LCBPcHRpb25h
bDxib29sPiYgd2FzVGhyb3duKTsKKyAgICB2b2lkIGdldEZ1bmN0aW9uRGV0YWlscyhQcm90b2Nv
bDo6RXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGZ1bmN0aW9uSWQsIFJlZlB0cjxQcm90b2Nv
bDo6RGVidWdnZXI6OkZ1bmN0aW9uRGV0YWlscz4mIHJlc3VsdCk7CisgICAgdm9pZCBmdW5jdGlv
bkRldGFpbHMoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiwgSlNDOjpKU1ZhbHVlLCBSZWZQdHI8UHJv
dG9jb2w6OkRlYnVnZ2VyOjpGdW5jdGlvbkRldGFpbHM+JiByZXN1bHQpOworICAgIHZvaWQgZ2V0
UHJldmlldyhQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBS
ZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6Ok9iamVjdFByZXZpZXc+JiByZXN1bHQpOworICAgIHZv
aWQgZ2V0UHJvcGVydGllcyhQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIG9i
amVjdElkLCBib29sIG93blByb3BlcnRpZXMsIGludCBmZXRjaFN0YXJ0LCBpbnQgZmV0Y2hDb3Vu
dCwgYm9vbCBnZW5lcmF0ZVByZXZpZXcsIFJlZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpS
dW50aW1lOjpQcm9wZXJ0eURlc2NyaXB0b3I+PiYgcmVzdWx0KTsKKyAgICB2b2lkIGdldERpc3Bs
YXlhYmxlUHJvcGVydGllcyhQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIG9i
amVjdElkLCBpbnQgZmV0Y2hTdGFydCwgaW50IGZldGNoQ291bnQsIGJvb2wgZ2VuZXJhdGVQcmV2
aWV3LCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UnVudGltZTo6UHJvcGVydHlEZXNj
cmlwdG9yPj4mIHJlc3VsdCk7CisgICAgdm9pZCBnZXRJbnRlcm5hbFByb3BlcnRpZXMoUHJvdG9j
b2w6OkVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBvYmplY3RJZCwgYm9vbCBnZW5lcmF0ZVBy
ZXZpZXcsIFJlZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpJbnRlcm5hbFBy
b3BlcnR5RGVzY3JpcHRvcj4+JiByZXN1bHQpOworICAgIHZvaWQgZ2V0Q29sbGVjdGlvbkVudHJp
ZXMoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBvYmplY3RJZCwgY29uc3Qg
U3RyaW5nJiBvYmplY3RHcm91cCwgaW50IGZldGNoU3RhcnQsIGludCBmZXRjaENvdW50LCBSZWZQ
dHI8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UnVudGltZTo6Q29sbGVjdGlvbkVudHJ5Pj4mIGVu
dHJpZXMpOworICAgIHZvaWQgc2F2ZVJlc3VsdChQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBjb25z
dCBTdHJpbmcmIGNhbGxBcmd1bWVudEpTT04sIE9wdGlvbmFsPGludD4mIHNhdmVkUmVzdWx0SW5k
ZXgpOwogCiAgICAgUmVmPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkRlYnVnZ2VyOjpDYWxsRnJh
bWU+PiB3cmFwQ2FsbEZyYW1lcyhKU0M6OkpTVmFsdWUpIGNvbnN0OwogICAgIFJlZlB0cjxQcm90
b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiB3cmFwT2JqZWN0KEpTQzo6SlNWYWx1ZSwgY29u
c3QgU3RyaW5nJiBncm91cE5hbWUsIGJvb2wgZ2VuZXJhdGVQcmV2aWV3ID0gZmFsc2UpIGNvbnN0
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNj
cmlwdEJhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNj
cmlwdEJhc2UuY3BwCmluZGV4IDc1NjlmNWI1ZDk3NTgwODgyNGY2NGViMmVmMGE0MDZiNjRhNGQ5
MzkuLjA5MDE2NmE5MWZjNjZhZDFjZGU3MTgxOTUzY2Y0NzczZmY2NmYwOGYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRCYXNlLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0QmFzZS5j
cHAKQEAgLTEwMCw3ICsxMDAsNyBAQCBSZWY8SlNPTjo6VmFsdWU+IEluamVjdGVkU2NyaXB0QmFz
ZTo6bWFrZUNhbGwoRGVwcmVjYXRlZDo6U2NyaXB0RnVuY3Rpb25DYWxsJiBmdQogICAgIHJldHVy
biByZXN1bHRKU09OVmFsdWUucmVsZWFzZU5vbk51bGwoKTsKIH0KIAotdm9pZCBJbmplY3RlZFNj
cmlwdEJhc2U6Om1ha2VFdmFsQ2FsbChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIERlcHJlY2F0
ZWQ6OlNjcmlwdEZ1bmN0aW9uQ2FsbCYgZnVuY3Rpb24sIFJlZlB0cjxQcm90b2NvbDo6UnVudGlt
ZTo6UmVtb3RlT2JqZWN0PiYgb3V0X3Jlc3VsdE9iamVjdCwgT3B0aW9uYWw8Ym9vbD4mIG91dF93
YXNUaHJvd24sIE9wdGlvbmFsPGludD4mIG91dF9zYXZlZFJlc3VsdEluZGV4KQordm9pZCBJbmpl
Y3RlZFNjcmlwdEJhc2U6Om1ha2VFdmFsQ2FsbChQcm90b2NvbDo6RXJyb3JTdHJpbmcmIGVycm9y
U3RyaW5nLCBEZXByZWNhdGVkOjpTY3JpcHRGdW5jdGlvbkNhbGwmIGZ1bmN0aW9uLCBSZWZQdHI8
UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIG91dF9yZXN1bHRPYmplY3QsIE9wdGlv
bmFsPGJvb2w+JiBvdXRfd2FzVGhyb3duLCBPcHRpb25hbDxpbnQ+JiBvdXRfc2F2ZWRSZXN1bHRJ
bmRleCkKIHsKICAgICBjaGVja0NhbGxSZXN1bHQoZXJyb3JTdHJpbmcsIG1ha2VDYWxsKGZ1bmN0
aW9uKSwgb3V0X3Jlc3VsdE9iamVjdCwgb3V0X3dhc1Rocm93biwgb3V0X3NhdmVkUmVzdWx0SW5k
ZXgpOwogfQpAQCAtMTQzLDcgKzE0Myw3IEBAIHZvaWQgSW5qZWN0ZWRTY3JpcHRCYXNlOjptYWtl
QXN5bmNDYWxsKERlcHJlY2F0ZWQ6OlNjcmlwdEZ1bmN0aW9uQ2FsbCYgZnVuY3Rpb24sCiAgICAg
fQogfQogCi12b2lkIEluamVjdGVkU2NyaXB0QmFzZTo6Y2hlY2tDYWxsUmVzdWx0KEVycm9yU3Ry
aW5nJiBlcnJvclN0cmluZywgUmVmUHRyPEpTT046OlZhbHVlPiByZXN1bHQsIFJlZlB0cjxQcm90
b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYgb3V0X3Jlc3VsdE9iamVjdCwgT3B0aW9uYWw8
Ym9vbD4mIG91dF93YXNUaHJvd24sIE9wdGlvbmFsPGludD4mIG91dF9zYXZlZFJlc3VsdEluZGV4
KQordm9pZCBJbmplY3RlZFNjcmlwdEJhc2U6OmNoZWNrQ2FsbFJlc3VsdChQcm90b2NvbDo6RXJy
b3JTdHJpbmcmIGVycm9yU3RyaW5nLCBSZWZQdHI8SlNPTjo6VmFsdWU+IHJlc3VsdCwgUmVmUHRy
PFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiBvdXRfcmVzdWx0T2JqZWN0LCBPcHRp
b25hbDxib29sPiYgb3V0X3dhc1Rocm93biwgT3B0aW9uYWw8aW50PiYgb3V0X3NhdmVkUmVzdWx0
SW5kZXgpCiB7CiAgICAgaWYgKCFyZXN1bHQpIHsKICAgICAgICAgZXJyb3JTdHJpbmcgPSAiSW50
ZXJuYWwgZXJyb3I6IHJlc3VsdCB2YWx1ZSBpcyBlbXB0eSJfczsKQEAgLTE1MSw0OSArMTUxLDQy
IEBAIHZvaWQgSW5qZWN0ZWRTY3JpcHRCYXNlOjpjaGVja0NhbGxSZXN1bHQoRXJyb3JTdHJpbmcm
IGVycm9yU3RyaW5nLCBSZWZQdHI8SlNPTjo6CiAgICAgfQogCiAgICAgaWYgKHJlc3VsdC0+dHlw
ZSgpID09IEpTT046OlZhbHVlOjpUeXBlOjpTdHJpbmcpIHsKLSAgICAgICAgcmVzdWx0LT5hc1N0
cmluZyhlcnJvclN0cmluZyk7Ci0gICAgICAgIEFTU0VSVChlcnJvclN0cmluZy5sZW5ndGgoKSk7
CisgICAgICAgIGVycm9yU3RyaW5nID0gcmVzdWx0LT5hc1N0cmluZygpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCi0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcmVzdWx0VHVwbGU7Ci0gICAg
aWYgKCFyZXN1bHQtPmFzT2JqZWN0KHJlc3VsdFR1cGxlKSkgeworICAgIGF1dG8gcmVzdWx0VHVw
bGUgPSByZXN1bHQtPmFzT2JqZWN0KCk7CisgICAgaWYgKCFyZXN1bHRUdXBsZSkgewogICAgICAg
ICBlcnJvclN0cmluZyA9ICJJbnRlcm5hbCBlcnJvcjogcmVzdWx0IGlzIG5vdCBhbiBPYmplY3Qi
X3M7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBy
ZXN1bHRPYmplY3Q7Ci0gICAgaWYgKCFyZXN1bHRUdXBsZS0+Z2V0T2JqZWN0KCJyZXN1bHQiX3Ms
IHJlc3VsdE9iamVjdCkpIHsKKyAgICBhdXRvIHJlc3VsdE9iamVjdCA9IHJlc3VsdFR1cGxlLT5n
ZXRPYmplY3QoInJlc3VsdCJfcyk7CisgICAgaWYgKCFyZXN1bHRPYmplY3QpIHsKICAgICAgICAg
ZXJyb3JTdHJpbmcgPSAiSW50ZXJuYWwgZXJyb3I6IHJlc3VsdCBpcyBub3QgYSBwYWlyIG9mIHZh
bHVlIGFuZCB3YXNUaHJvd24gZmxhZyJfczsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IGJvb2wgd2FzVGhyb3duID0gZmFsc2U7Ci0gICAgaWYgKCFyZXN1bHRUdXBsZS0+Z2V0Qm9vbGVh
bigid2FzVGhyb3duIl9zLCB3YXNUaHJvd24pKSB7CisgICAgb3V0X3dhc1Rocm93biA9IHJlc3Vs
dFR1cGxlLT5nZXRCb29sZWFuKCJ3YXNUaHJvd24iX3MpOworICAgIGlmICghb3V0X3dhc1Rocm93
bikgewogICAgICAgICBlcnJvclN0cmluZyA9ICJJbnRlcm5hbCBlcnJvcjogcmVzdWx0IGlzIG5v
dCBhIHBhaXIgb2YgdmFsdWUgYW5kIHdhc1Rocm93biBmbGFnIl9zOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCi0gICAgb3V0X3Jlc3VsdE9iamVjdCA9IEJpbmRpbmdUcmFpdHM8UHJvdG9jb2w6
OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD46OnJ1bnRpbWVDYXN0KHJlc3VsdE9iamVjdCk7Ci0KLSAg
ICBpZiAod2FzVGhyb3duKQotICAgICAgICBvdXRfd2FzVGhyb3duID0gd2FzVGhyb3duOwotCi0g
ICAgaW50IHNhdmVkUmVzdWx0SW5kZXg7Ci0gICAgaWYgKHJlc3VsdFR1cGxlLT5nZXRJbnRlZ2Vy
KCJzYXZlZFJlc3VsdEluZGV4Il9zLCBzYXZlZFJlc3VsdEluZGV4KSkKLSAgICAgICAgb3V0X3Nh
dmVkUmVzdWx0SW5kZXggPSBzYXZlZFJlc3VsdEluZGV4OworICAgIG91dF9yZXN1bHRPYmplY3Qg
PSBQcm90b2NvbDo6QmluZGluZ1RyYWl0czxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0
Pjo6cnVudGltZUNhc3QocmVzdWx0T2JqZWN0LnJlbGVhc2VOb25OdWxsKCkpOworICAgIG91dF9z
YXZlZFJlc3VsdEluZGV4ID0gcmVzdWx0VHVwbGUtPmdldEludGVnZXIoInNhdmVkUmVzdWx0SW5k
ZXgiX3MpOwogfQogCiB2b2lkIEluamVjdGVkU2NyaXB0QmFzZTo6Y2hlY2tBc3luY0NhbGxSZXN1
bHQoUmVmUHRyPEpTT046OlZhbHVlPiByZXN1bHQsIGNvbnN0IEFzeW5jQ2FsbENhbGxiYWNrJiBj
YWxsYmFjaykKIHsKLSAgICBFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKyAgICBQcm90b2NvbDo6
RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CiAgICAgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpS
ZW1vdGVPYmplY3Q+IHJlc3VsdE9iamVjdDsKICAgICBPcHRpb25hbDxib29sPiB3YXNUaHJvd247
CiAgICAgT3B0aW9uYWw8aW50PiBzYXZlZFJlc3VsdEluZGV4OwogCiAgICAgY2hlY2tDYWxsUmVz
dWx0KGVycm9yU3RyaW5nLCByZXN1bHQsIHJlc3VsdE9iamVjdCwgd2FzVGhyb3duLCBzYXZlZFJl
c3VsdEluZGV4KTsKIAotICAgIGNhbGxiYWNrKGVycm9yU3RyaW5nLCBXVEZNb3ZlKHJlc3VsdE9i
amVjdCksIHdhc1Rocm93biwgc2F2ZWRSZXN1bHRJbmRleCk7CisgICAgY2FsbGJhY2soZXJyb3JT
dHJpbmcsIFdURk1vdmUocmVzdWx0T2JqZWN0KSwgV1RGTW92ZSh3YXNUaHJvd24pLCBXVEZNb3Zl
KHNhdmVkUmVzdWx0SW5kZXgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0QmFz
ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdEJhc2Uu
aAppbmRleCA4MTIzZjFkNjZlOWIxM2FkNGFkMGVjYjFhM2NhZDMzZjU5NzZkNWQ3Li5mNGU2YTBm
ZWVhNDExY2QwNTg1OTg0YmQ3NGFjYzRiMjRhYThlZDBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0QmFzZS5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRCYXNlLmgKQEAgLTQ3LDggKzQ3
LDcgQEAgY2xhc3MgU2NyaXB0RnVuY3Rpb25DYWxsOwogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsK
IAotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7Ci10eXBlZGVmIFdURjo6RnVuY3Rpb248dm9p
ZChFcnJvclN0cmluZyYsIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYm
LCBPcHRpb25hbDxib29sPiYsIE9wdGlvbmFsPGludD4mKT4gQXN5bmNDYWxsQ2FsbGJhY2s7Cit1
c2luZyBBc3luY0NhbGxDYWxsYmFjayA9IFdURjo6RnVuY3Rpb248dm9pZChQcm90b2NvbDo6RXJy
b3JTdHJpbmcmLCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mJiwgT3B0
aW9uYWw8Ym9vbD4mJiwgT3B0aW9uYWw8aW50PiYmKT47CiAKIGNsYXNzIEpTX0VYUE9SVF9QUklW
QVRFIEluamVjdGVkU2NyaXB0QmFzZSB7CiBwdWJsaWM6CkBAIC02OSwxMSArNjgsMTEgQEAgcHJv
dGVjdGVkOgogICAgIGNvbnN0IERlcHJlY2F0ZWQ6OlNjcmlwdE9iamVjdCYgaW5qZWN0ZWRTY3Jp
cHRPYmplY3QoKSBjb25zdDsKICAgICBFeHBlY3RlZDxKU0M6OkpTVmFsdWUsIE5ha2VkUHRyPEpT
Qzo6RXhjZXB0aW9uPj4gY2FsbEZ1bmN0aW9uV2l0aEV2YWxFbmFibGVkKERlcHJlY2F0ZWQ6OlNj
cmlwdEZ1bmN0aW9uQ2FsbCYpIGNvbnN0OwogICAgIFJlZjxKU09OOjpWYWx1ZT4gbWFrZUNhbGwo
RGVwcmVjYXRlZDo6U2NyaXB0RnVuY3Rpb25DYWxsJik7Ci0gICAgdm9pZCBtYWtlRXZhbENhbGwo
RXJyb3JTdHJpbmcmLCBEZXByZWNhdGVkOjpTY3JpcHRGdW5jdGlvbkNhbGwmLCBSZWZQdHI8UHJv
dG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3VsdE9iamVjdCwgT3B0aW9uYWw8Ym9v
bD4mIHdhc1Rocm93biwgT3B0aW9uYWw8aW50PiYgc2F2ZWRSZXN1bHRJbmRleCk7CisgICAgdm9p
ZCBtYWtlRXZhbENhbGwoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiwgRGVwcmVjYXRlZDo6U2NyaXB0
RnVuY3Rpb25DYWxsJiwgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiBy
ZXN1bHRPYmplY3QsIE9wdGlvbmFsPGJvb2w+JiB3YXNUaHJvd24sIE9wdGlvbmFsPGludD4mIHNh
dmVkUmVzdWx0SW5kZXgpOwogICAgIHZvaWQgbWFrZUFzeW5jQ2FsbChEZXByZWNhdGVkOjpTY3Jp
cHRGdW5jdGlvbkNhbGwmLCBBc3luY0NhbGxDYWxsYmFjayYmKTsKIAogcHJpdmF0ZToKLSAgICB2
b2lkIGNoZWNrQ2FsbFJlc3VsdChFcnJvclN0cmluZyYsIFJlZlB0cjxKU09OOjpWYWx1ZT4gcmVz
dWx0LCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3VsdE9iamVj
dCwgT3B0aW9uYWw8Ym9vbD4mIHdhc1Rocm93biwgT3B0aW9uYWw8aW50PiYgc2F2ZWRSZXN1bHRJ
bmRleCk7CisgICAgdm9pZCBjaGVja0NhbGxSZXN1bHQoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiwg
UmVmUHRyPEpTT046OlZhbHVlPiByZXN1bHQsIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVt
b3RlT2JqZWN0PiYgcmVzdWx0T2JqZWN0LCBPcHRpb25hbDxib29sPiYgd2FzVGhyb3duLCBPcHRp
b25hbDxpbnQ+JiBzYXZlZFJlc3VsdEluZGV4KTsKICAgICB2b2lkIGNoZWNrQXN5bmNDYWxsUmVz
dWx0KFJlZlB0cjxKU09OOjpWYWx1ZT4gcmVzdWx0LCBjb25zdCBBc3luY0NhbGxDYWxsYmFjayYp
OwogCiAgICAgU3RyaW5nIG1fbmFtZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmNwcAppbmRleCA5MGFmN2E4ZjNh
MzMwNTYxNmI0OTVlNWIzY2FkZjA1MzMxMWUyMzUwLi5mY2NjOGVmMTk4NmQ4ODZkNzU2MDBmNzM2
MTAwYTdlYjM5NmI1MDA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL0luamVjdGVkU2NyaXB0TWFuYWdlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdE1hbmFnZXIuY3BwCkBAIC0xMDIsMTkgKzEwMiwxOSBA
QCBpbnQgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOjppbmplY3RlZFNjcmlwdElkRm9yKEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QpCiAKIEluamVjdGVkU2NyaXB0IEluamVjdGVkU2NyaXB0TWFu
YWdlcjo6aW5qZWN0ZWRTY3JpcHRGb3JPYmplY3RJZChjb25zdCBTdHJpbmcmIG9iamVjdElkKQog
ewotICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gcGFyc2VkT2JqZWN0SWQ7Ci0gICAgaWYgKCFKU09O
OjpWYWx1ZTo6cGFyc2VKU09OKG9iamVjdElkLCBwYXJzZWRPYmplY3RJZCkpCisgICAgYXV0byBw
YXJzZWRPYmplY3RJZCA9IEpTT046OlZhbHVlOjpwYXJzZUpTT04ob2JqZWN0SWQpOworICAgIGlm
ICghcGFyc2VkT2JqZWN0SWQpCiAgICAgICAgIHJldHVybiBJbmplY3RlZFNjcmlwdCgpOwogCi0g
ICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcmVzdWx0T2JqZWN0OwotICAgIGlmICghcGFyc2VkT2Jq
ZWN0SWQtPmFzT2JqZWN0KHJlc3VsdE9iamVjdCkpCisgICAgYXV0byByZXN1bHRPYmplY3QgPSBw
YXJzZWRPYmplY3RJZC0+YXNPYmplY3QoKTsKKyAgICBpZiAoIXJlc3VsdE9iamVjdCkKICAgICAg
ICAgcmV0dXJuIEluamVjdGVkU2NyaXB0KCk7CiAKLSAgICBsb25nIGluamVjdGVkU2NyaXB0SWQg
PSAwOwotICAgIGlmICghcmVzdWx0T2JqZWN0LT5nZXRJbnRlZ2VyKCJpbmplY3RlZFNjcmlwdElk
Il9zLCBpbmplY3RlZFNjcmlwdElkKSkKKyAgICBhdXRvIGluamVjdGVkU2NyaXB0SWQgPSByZXN1
bHRPYmplY3QtPmdldEludGVnZXIoImluamVjdGVkU2NyaXB0SWQiX3MpOworICAgIGlmICghaW5q
ZWN0ZWRTY3JpcHRJZCkKICAgICAgICAgcmV0dXJuIEluamVjdGVkU2NyaXB0KCk7CiAKLSAgICBy
ZXR1cm4gbV9pZFRvSW5qZWN0ZWRTY3JpcHQuZ2V0KGluamVjdGVkU2NyaXB0SWQpOworICAgIHJl
dHVybiBtX2lkVG9JbmplY3RlZFNjcmlwdC5nZXQoKmluamVjdGVkU2NyaXB0SWQpOwogfQogCiB2
b2lkIEluamVjdGVkU2NyaXB0TWFuYWdlcjo6cmVsZWFzZU9iamVjdEdyb3VwKGNvbnN0IFN0cmlu
ZyYgb2JqZWN0R3JvdXApCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuY3BwCmluZGV4IDY5M2U4YjI1
YzczNzc4MzQwZTgzOTQwNDY3ODZkOTMxOGE4YTA5MjQuLmRiYTE3ZDRhNjVhNzBkMzU4NTFjOGM1
MTlhZDFlY2JkNTcxNzUyZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuY3BwCkBAIC02OCw3
ICs2OCw3IEBAIHZvaWQgQmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZTo6c2VuZEZhaWx1
cmUoY29uc3QgRXJyb3JTdHJpbmcmIGVycm9yKQogICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNl
bmRQZW5kaW5nRXJyb3JzKCk7CiB9CiAKLXZvaWQgQmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNr
QmFzZTo6c2VuZFN1Y2Nlc3MoUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJ0aWFsTWVzc2FnZSkK
K3ZvaWQgQmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZTo6c2VuZFN1Y2Nlc3MoUmVmPEpT
T046Ok9iamVjdD4mJiBwYXJ0aWFsTWVzc2FnZSkKIHsKICAgICBpZiAobV9hbHJlYWR5U2VudCkK
ICAgICAgICAgcmV0dXJuOwpAQCAtMTA3LDcgKzEwNyw3IEBAIHZvaWQgQmFja2VuZERpc3BhdGNo
ZXI6OmRpc3BhdGNoKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKIAogICAgIEFTU0VSVCghbV9wcm90
b2NvbEVycm9ycy5zaXplKCkpOwogCi0gICAgbG9uZyByZXF1ZXN0SWQgPSAwOworICAgIGludCBy
ZXF1ZXN0SWQgPSAwOwogICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG1lc3NhZ2VPYmplY3Q7CiAK
ICAgICB7CkBAIC0xMTUsNDYgKzExNSw1MCBAQCB2b2lkIEJhY2tlbmREaXNwYXRjaGVyOjpkaXNw
YXRjaChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCiAgICAgICAgIC8vIHRoZSBvdXRlciByZXF1ZXN0
J3MgaWQganVzdCBiZWNhdXNlIHRoZSBpbm5lciByZXF1ZXN0IGlzIGJvZ3VzLgogICAgICAgICBT
ZXRGb3JTY29wZTxPcHRpb25hbDxsb25nPj4gc2NvcGVkUmVxdWVzdElkKG1fY3VycmVudFJlcXVl
c3RJZCwgV1RGOjpudWxsb3B0KTsKIAotICAgICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHBhcnNl
ZE1lc3NhZ2U7Ci0gICAgICAgIGlmICghSlNPTjo6VmFsdWU6OnBhcnNlSlNPTihtZXNzYWdlLCBw
YXJzZWRNZXNzYWdlKSkgeworICAgICAgICBhdXRvIHBhcnNlZE1lc3NhZ2UgPSBKU09OOjpWYWx1
ZTo6cGFyc2VKU09OKG1lc3NhZ2UpOworICAgICAgICBpZiAoIXBhcnNlZE1lc3NhZ2UpIHsKICAg
ICAgICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoUGFyc2VFcnJvciwgIk1lc3NhZ2UgbXVzdCBi
ZSBpbiBKU09OIGZvcm1hdCJfcyk7CiAgICAgICAgICAgICBzZW5kUGVuZGluZ0Vycm9ycygpOwog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKCFwYXJzZWRNZXNz
YWdlLT5hc09iamVjdChtZXNzYWdlT2JqZWN0KSkgeworICAgICAgICBtZXNzYWdlT2JqZWN0ID0g
cGFyc2VkTWVzc2FnZS0+YXNPYmplY3QoKTsKKyAgICAgICAgaWYgKCFtZXNzYWdlT2JqZWN0KSB7
CiAgICAgICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKEludmFsaWRSZXF1ZXN0LCAiTWVzc2Fn
ZSBtdXN0IGJlIGEgSlNPTmlmaWVkIG9iamVjdCJfcyk7CiAgICAgICAgICAgICBzZW5kUGVuZGlu
Z0Vycm9ycygpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgUmVm
UHRyPEpTT046OlZhbHVlPiByZXF1ZXN0SWRWYWx1ZTsKLSAgICAgICAgaWYgKCFtZXNzYWdlT2Jq
ZWN0LT5nZXRWYWx1ZSgiaWQiX3MsIHJlcXVlc3RJZFZhbHVlKSkgeworICAgICAgICBhdXRvIHJl
cXVlc3RJZFZhbHVlID0gbWVzc2FnZU9iamVjdC0+Z2V0VmFsdWUoImlkIl9zKTsKKyAgICAgICAg
aWYgKCFyZXF1ZXN0SWRWYWx1ZSkgewogICAgICAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihJ
bnZhbGlkUmVxdWVzdCwgIidpZCcgcHJvcGVydHkgd2FzIG5vdCBmb3VuZCJfcyk7CiAgICAgICAg
ICAgICBzZW5kUGVuZGluZ0Vycm9ycygpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CiAKLSAgICAgICAgaWYgKCFyZXF1ZXN0SWRWYWx1ZS0+YXNJbnRlZ2VyKHJlcXVlc3RJZCkpIHsK
KyAgICAgICAgYXV0byByZXF1ZXN0SWRJbnQgPSByZXF1ZXN0SWRWYWx1ZS0+YXNJbnRlZ2VyKCk7
CisgICAgICAgIGlmICghcmVxdWVzdElkSW50KSB7CiAgICAgICAgICAgICByZXBvcnRQcm90b2Nv
bEVycm9yKEludmFsaWRSZXF1ZXN0LCAiVGhlIHR5cGUgb2YgJ2lkJyBwcm9wZXJ0eSBtdXN0IGJl
IGludGVnZXIiX3MpOwogICAgICAgICAgICAgc2VuZFBlbmRpbmdFcnJvcnMoKTsKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQorCisgICAgICAgIHJlcXVlc3RJZCA9ICpyZXF1ZXN0SWRJ
bnQ7CiAgICAgfQogCiAgICAgewogICAgICAgICAvLyBXZSBjb3VsZCBiZSBjYWxsZWQgcmUtZW50
cmFudGx5IGZyb20gYSBuZXN0ZWQgcnVuIGxvb3AsIHNvIHJlc3RvcmUgdGhlIHByZXZpb3VzIGlk
LgogICAgICAgICBTZXRGb3JTY29wZTxPcHRpb25hbDxsb25nPj4gc2NvcGVkUmVxdWVzdElkKG1f
Y3VycmVudFJlcXVlc3RJZCwgcmVxdWVzdElkKTsKIAotICAgICAgICBSZWZQdHI8SlNPTjo6VmFs
dWU+IG1ldGhvZFZhbHVlOwotICAgICAgICBpZiAoIW1lc3NhZ2VPYmplY3QtPmdldFZhbHVlKCJt
ZXRob2QiX3MsIG1ldGhvZFZhbHVlKSkgeworICAgICAgICBhdXRvIG1ldGhvZFZhbHVlID0gbWVz
c2FnZU9iamVjdC0+Z2V0VmFsdWUoIm1ldGhvZCJfcyk7CisgICAgICAgIGlmICghbWV0aG9kVmFs
dWUpIHsKICAgICAgICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoSW52YWxpZFJlcXVlc3QsICIn
bWV0aG9kJyBwcm9wZXJ0eSB3YXNuJ3QgZm91bmQiX3MpOwogICAgICAgICAgICAgc2VuZFBlbmRp
bmdFcnJvcnMoKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIFN0
cmluZyBtZXRob2RTdHJpbmc7Ci0gICAgICAgIGlmICghbWV0aG9kVmFsdWUtPmFzU3RyaW5nKG1l
dGhvZFN0cmluZykpIHsKKyAgICAgICAgYXV0byBtZXRob2RTdHJpbmcgPSBtZXRob2RWYWx1ZS0+
YXNTdHJpbmcoKTsKKyAgICAgICAgaWYgKCFtZXRob2RTdHJpbmcpIHsKICAgICAgICAgICAgIHJl
cG9ydFByb3RvY29sRXJyb3IoSW52YWxpZFJlcXVlc3QsICJUaGUgdHlwZSBvZiAnbWV0aG9kJyBw
cm9wZXJ0eSBtdXN0IGJlIHN0cmluZyJfcyk7CiAgICAgICAgICAgICBzZW5kUGVuZGluZ0Vycm9y
cygpOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTg0LDEyICsxODgsMTIgQEAgdm9pZCBCYWNr
ZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2goY29uc3QgU3RyaW5nJiBtZXNzYWdlKQogfQogCiAvLyBG
SVhNRTogcmVtb3ZlIHRoaXMgZnVuY3Rpb24gd2hlbiBsZWdhY3kgSW5zcGVjdG9yT2JqZWN0IHN5
bWJvbHMgYXJlIG5vIGxvbmdlciBuZWVkZWQgPGh0dHA6Ly93ZWJraXQub3JnL2IvMTc5ODQ3Pi4K
LXZvaWQgQmFja2VuZERpc3BhdGNoZXI6OnNlbmRSZXNwb25zZShsb25nIHJlcXVlc3RJZCwgUmVm
UHRyPEpTT046Ok9iamVjdD4mJiByZXN1bHQpCit2b2lkIEJhY2tlbmREaXNwYXRjaGVyOjpzZW5k
UmVzcG9uc2UobG9uZyByZXF1ZXN0SWQsIFJlZjxKU09OOjpPYmplY3Q+JiYgcmVzdWx0KQogewog
ICAgIHNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2UpOwogfQog
Ci12b2lkIEJhY2tlbmREaXNwYXRjaGVyOjpzZW5kUmVzcG9uc2UobG9uZyByZXF1ZXN0SWQsIFJl
ZlB0cjxKU09OOjpPYmplY3Q+JiYgcmVzdWx0LCBib29sKQordm9pZCBCYWNrZW5kRGlzcGF0Y2hl
cjo6c2VuZFJlc3BvbnNlKGxvbmcgcmVxdWVzdElkLCBSZWY8SlNPTjo6T2JqZWN0PiYmIHJlc3Vs
dCwgYm9vbCkKIHsKICAgICBBU1NFUlQoIW1fcHJvdG9jb2xFcnJvcnMuc2l6ZSgpKTsKIApAQCAt
MjcwLDc0ICsyNzQsNjQgQEAgdm9pZCBCYWNrZW5kRGlzcGF0Y2hlcjo6cmVwb3J0UHJvdG9jb2xF
cnJvcihPcHRpb25hbDxsb25nPiByZWxhdGVkUmVxdWVzdElkLCBDb20KIH0KIAogdGVtcGxhdGU8
dHlwZW5hbWUgVD4KLVQgQmFja2VuZERpc3BhdGNoZXI6OmdldFByb3BlcnR5VmFsdWUoSlNPTjo6
T2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogb3V0X29wdGlvbmFsVmFs
dWVGb3VuZCwgVCBkZWZhdWx0VmFsdWUsIHN0ZDo6ZnVuY3Rpb248Ym9vbChKU09OOjpWYWx1ZSYs
IFQmKT4gYXNNZXRob2QsIGNvbnN0IGNoYXIqIHR5cGVOYW1lKQorVCBCYWNrZW5kRGlzcGF0Y2hl
cjo6Z2V0UHJvcGVydHlWYWx1ZShKU09OOjpPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBu
YW1lLCBib29sIHJlcXVpcmVkLCBzdGQ6OmZ1bmN0aW9uPFQoSlNPTjo6VmFsdWUmKT4gY29udmVy
dGVyLCBjb25zdCBjaGFyKiB0eXBlTmFtZSkKIHsKLSAgICBUIHJlc3VsdChkZWZhdWx0VmFsdWUp
OwotICAgIC8vIG91dF9vcHRpb25hbFZhbHVlRm91bmQgc2lnbmFscyB0byB0aGUgY2FsbGVyIHdo
ZXRoZXIgYW4gb3B0aW9uYWwgcHJvcGVydHkgd2FzIGZvdW5kLgotICAgIC8vIGlmIG91dF9vcHRp
b25hbFZhbHVlRm91bmQgPT0gbnVsbHB0ciwgdGhlbiB0aGlzIGlzIGEgcmVxdWlyZWQgcHJvcGVy
dHkuCi0gICAgaWYgKG91dF9vcHRpb25hbFZhbHVlRm91bmQpCi0gICAgICAgICpvdXRfb3B0aW9u
YWxWYWx1ZUZvdW5kID0gZmFsc2U7CisgICAgVCByZXN1bHQ7CiAKICAgICBpZiAoIW9iamVjdCkg
ewotICAgICAgICBpZiAoIW91dF9vcHRpb25hbFZhbHVlRm91bmQpCisgICAgICAgIGlmIChyZXF1
aXJlZCkKICAgICAgICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6
OkludmFsaWRQYXJhbXMsIG1ha2VTdHJpbmcoIidwYXJhbXMnIG9iamVjdCBtdXN0IGNvbnRhaW4g
cmVxdWlyZWQgcGFyYW1ldGVyICciLCBuYW1lLCAiJyB3aXRoIHR5cGUgJyIsIHR5cGVOYW1lLCAi
Jy4iKSk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCiAgICAgYXV0byBmaW5kUmVz
dWx0ID0gb2JqZWN0LT5maW5kKG5hbWUpOwogICAgIGlmIChmaW5kUmVzdWx0ID09IG9iamVjdC0+
ZW5kKCkpIHsKLSAgICAgICAgaWYgKCFvdXRfb3B0aW9uYWxWYWx1ZUZvdW5kKQorICAgICAgICBp
ZiAocmVxdWlyZWQpCiAgICAgICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNw
YXRjaGVyOjpJbnZhbGlkUGFyYW1zLCBtYWtlU3RyaW5nKCJQYXJhbWV0ZXIgJyIsIG5hbWUsICIn
IHdpdGggdHlwZSAnIiwgdHlwZU5hbWUsICInIHdhcyBub3QgZm91bmQuIikpOwogICAgICAgICBy
ZXR1cm4gcmVzdWx0OwogICAgIH0KIAotICAgIGlmICghYXNNZXRob2QoKmZpbmRSZXN1bHQtPnZh
bHVlLCByZXN1bHQpKSB7Ci0gICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3Bh
dGNoZXI6OkludmFsaWRQYXJhbXMsIG1ha2VTdHJpbmcoIlBhcmFtZXRlciAnIiwgbmFtZSwgIicg
aGFzIHdyb25nIHR5cGUuIEl0IG11c3QgYmUgJyIsIHR5cGVOYW1lLCAiJy4iKSk7Ci0gICAgICAg
IHJldHVybiByZXN1bHQ7Ci0gICAgfQorICAgIHJlc3VsdCA9IGNvbnZlcnRlcihmaW5kUmVzdWx0
LT52YWx1ZSk7CiAKLSAgICBpZiAob3V0X29wdGlvbmFsVmFsdWVGb3VuZCkKLSAgICAgICAgKm91
dF9vcHRpb25hbFZhbHVlRm91bmQgPSB0cnVlOworICAgIGlmICghcmVzdWx0KQorICAgICAgICBy
ZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCBtYWtl
U3RyaW5nKCJQYXJhbWV0ZXIgJyIsIG5hbWUsICInIGhhcyB3cm9uZyB0eXBlLiBJdCBtdXN0IGJl
ICciLCB0eXBlTmFtZSwgIicuIikpOwogCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGlj
IGJvb2wgY2FzdFRvSW50ZWdlcihKU09OOjpWYWx1ZSYgdmFsdWUsIGludCYgcmVzdWx0KSB7IHJl
dHVybiB2YWx1ZS5hc0ludGVnZXIocmVzdWx0KTsgfQotc3RhdGljIGJvb2wgY2FzdFRvTnVtYmVy
KEpTT046OlZhbHVlJiB2YWx1ZSwgZG91YmxlJiByZXN1bHQpIHsgcmV0dXJuIHZhbHVlLmFzRG91
YmxlKHJlc3VsdCk7IH0KLQotaW50IEJhY2tlbmREaXNwYXRjaGVyOjpnZXRJbnRlZ2VyKEpTT046
Ok9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQpCitP
cHRpb25hbDxib29sPiBCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0Qm9vbGVhbihKU09OOjpPYmplY3Qq
IG9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sIHJlcXVpcmVkKQogewotICAgIHJldHVy
biBnZXRQcm9wZXJ0eVZhbHVlPGludD4ob2JqZWN0LCBuYW1lLCB2YWx1ZUZvdW5kLCAwLCAmY2Fz
dFRvSW50ZWdlciwgIkludGVnZXIiKTsKKyAgICByZXR1cm4gZ2V0UHJvcGVydHlWYWx1ZTxPcHRp
b25hbDxib29sPj4ob2JqZWN0LCBuYW1lLCByZXF1aXJlZCwgJkpTT046OlZhbHVlOjphc0Jvb2xl
YW4sICJCb29sZWFuIik7CiB9CiAKLWRvdWJsZSBCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0RG91Ymxl
KEpTT046Ok9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91
bmQpCitPcHRpb25hbDxpbnQ+IEJhY2tlbmREaXNwYXRjaGVyOjpnZXRJbnRlZ2VyKEpTT046Ok9i
amVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wgcmVxdWlyZWQpCiB7Ci0gICAg
cmV0dXJuIGdldFByb3BlcnR5VmFsdWU8ZG91YmxlPihvYmplY3QsIG5hbWUsIHZhbHVlRm91bmQs
IDAsICZjYXN0VG9OdW1iZXIsICJOdW1iZXIiKTsKKyAgICByZXR1cm4gZ2V0UHJvcGVydHlWYWx1
ZTxPcHRpb25hbDxpbnQ+PihvYmplY3QsIG5hbWUsIHJlcXVpcmVkLCAmSlNPTjo6VmFsdWU6OmFz
SW50ZWdlciwgIkludGVnZXIiKTsKIH0KIAotU3RyaW5nIEJhY2tlbmREaXNwYXRjaGVyOjpnZXRT
dHJpbmcoSlNPTjo6T2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFs
dWVGb3VuZCkKK09wdGlvbmFsPGRvdWJsZT4gQmFja2VuZERpc3BhdGNoZXI6OmdldERvdWJsZShK
U09OOjpPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sIHJlcXVpcmVkKQog
ewotICAgIHJldHVybiBnZXRQcm9wZXJ0eVZhbHVlPFN0cmluZz4ob2JqZWN0LCBuYW1lLCB2YWx1
ZUZvdW5kLCAiIiwgJkpTT046OlZhbHVlOjphc1N0cmluZywgIlN0cmluZyIpOworICAgIHJldHVy
biBnZXRQcm9wZXJ0eVZhbHVlPE9wdGlvbmFsPGRvdWJsZT4+KG9iamVjdCwgbmFtZSwgcmVxdWly
ZWQsICZKU09OOjpWYWx1ZTo6YXNEb3VibGUsICJOdW1iZXIiKTsKIH0KIAotYm9vbCBCYWNrZW5k
RGlzcGF0Y2hlcjo6Z2V0Qm9vbGVhbihKU09OOjpPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5n
JiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kKQorU3RyaW5nIEJhY2tlbmREaXNwYXRjaGVyOjpnZXRT
dHJpbmcoSlNPTjo6T2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCByZXF1
aXJlZCkKIHsKLSAgICByZXR1cm4gZ2V0UHJvcGVydHlWYWx1ZTxib29sPihvYmplY3QsIG5hbWUs
IHZhbHVlRm91bmQsIGZhbHNlLCAmSlNPTjo6VmFsdWU6OmFzQm9vbGVhbiwgIkJvb2xlYW4iKTsK
KyAgICByZXR1cm4gZ2V0UHJvcGVydHlWYWx1ZTxTdHJpbmc+KG9iamVjdCwgbmFtZSwgcmVxdWly
ZWQsICZKU09OOjpWYWx1ZTo6YXNTdHJpbmcsICJTdHJpbmciKTsKIH0KIAotUmVmUHRyPEpTT046
Ok9iamVjdD4gQmFja2VuZERpc3BhdGNoZXI6OmdldE9iamVjdChKU09OOjpPYmplY3QqIG9iamVj
dCwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kKQorUmVmUHRyPEpTT046OlZh
bHVlPiBCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0VmFsdWUoSlNPTjo6T2JqZWN0KiBvYmplY3QsIGNv
bnN0IFN0cmluZyYgbmFtZSwgYm9vbCByZXF1aXJlZCkKIHsKLSAgICByZXR1cm4gZ2V0UHJvcGVy
dHlWYWx1ZTxSZWZQdHI8SlNPTjo6T2JqZWN0Pj4ob2JqZWN0LCBuYW1lLCB2YWx1ZUZvdW5kLCBu
dWxscHRyLCAmSlNPTjo6VmFsdWU6OmFzT2JqZWN0LCAiT2JqZWN0Iik7CisgICAgcmV0dXJuIGdl
dFByb3BlcnR5VmFsdWU8UmVmUHRyPEpTT046OlZhbHVlPj4ob2JqZWN0LCBuYW1lLCByZXF1aXJl
ZCwgJkpTT046OlZhbHVlOjphc1ZhbHVlLCAiVmFsdWUiKTsKIH0KIAotUmVmUHRyPEpTT046OkFy
cmF5PiBCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0QXJyYXkoSlNPTjo6T2JqZWN0KiBvYmplY3QsIGNv
bnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCkKK1JlZlB0cjxKU09OOjpPYmplY3Q+
IEJhY2tlbmREaXNwYXRjaGVyOjpnZXRPYmplY3QoSlNPTjo6T2JqZWN0KiBvYmplY3QsIGNvbnN0
IFN0cmluZyYgbmFtZSwgYm9vbCByZXF1aXJlZCkKIHsKLSAgICByZXR1cm4gZ2V0UHJvcGVydHlW
YWx1ZTxSZWZQdHI8SlNPTjo6QXJyYXk+PihvYmplY3QsIG5hbWUsIHZhbHVlRm91bmQsIG51bGxw
dHIsICZKU09OOjpWYWx1ZTo6YXNBcnJheSwgIkFycmF5Iik7CisgICAgcmV0dXJuIGdldFByb3Bl
cnR5VmFsdWU8UmVmUHRyPEpTT046Ok9iamVjdD4+KG9iamVjdCwgbmFtZSwgcmVxdWlyZWQsICZK
U09OOjpWYWx1ZTo6YXNPYmplY3QsICJPYmplY3QiKTsKIH0KIAotUmVmUHRyPEpTT046OlZhbHVl
PiBCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0VmFsdWUoSlNPTjo6T2JqZWN0KiBvYmplY3QsIGNvbnN0
IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCkKK1JlZlB0cjxKU09OOjpBcnJheT4gQmFj
a2VuZERpc3BhdGNoZXI6OmdldEFycmF5KEpTT046Ok9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJp
bmcmIG5hbWUsIGJvb2wgcmVxdWlyZWQpCiB7Ci0gICAgcmV0dXJuIGdldFByb3BlcnR5VmFsdWU8
UmVmUHRyPEpTT046OlZhbHVlPj4ob2JqZWN0LCBuYW1lLCB2YWx1ZUZvdW5kLCBudWxscHRyLCAm
SlNPTjo6VmFsdWU6OmFzVmFsdWUsICJWYWx1ZSIpOworICAgIHJldHVybiBnZXRQcm9wZXJ0eVZh
bHVlPFJlZlB0cjxKU09OOjpBcnJheT4+KG9iamVjdCwgbmFtZSwgcmVxdWlyZWQsICZKU09OOjpW
YWx1ZTo6YXNBcnJheSwgIkFycmF5Iik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEluc3BlY3Rvcgpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlci5oCmluZGV4IDk1ZDlkODExODhlNzM1ZThmMWI3MGNjMGRlZWUy
NjgyY2I2NzE0ZjAuLjAyYzk2ZDcyNjM4YzIyMmYwMzBkMTQ5MWNjOWI5MjYyYjA4YmVjYmEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyLmgKQEAgLTI5LDggKzI5LDEwIEBACiAjaW5jbHVkZSAiSW5z
cGVjdG9yRnJvbnRlbmRSb3V0ZXIuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JQcm90b2NvbFR5cGVz
LmgiCiAjaW5jbHVkZSA8ZnVuY3Rpb25hbD4KKyNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KICNp
bmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2lu
Y2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAog
bmFtZXNwYWNlIEluc3BlY3RvciB7CkBAIC01OSw3ICs2MSw3IEBAIHB1YmxpYzoKICAgICAgICAg
Ym9vbCBpc0FjdGl2ZSgpIGNvbnN0OwogICAgICAgICB2b2lkIGRpc2FibGUoKSB7IG1fYWxyZWFk
eVNlbnQgPSB0cnVlOyB9CiAKLSAgICAgICAgdm9pZCBzZW5kU3VjY2VzcyhSZWZQdHI8SlNPTjo6
T2JqZWN0PiYmKTsKKyAgICAgICAgdm9pZCBzZW5kU3VjY2VzcyhSZWY8SlNPTjo6T2JqZWN0PiYm
KTsKICAgICAgICAgdm9pZCBzZW5kRmFpbHVyZShjb25zdCBFcnJvclN0cmluZyYpOwogCiAgICAg
cHJpdmF0ZToKQEAgLTg3LDI4ICs4OSwyNyBAQCBwdWJsaWM6CiAgICAgLy8gTm90ZSB0aGF0ICd1
bnVzZWQnIGlzIGEgd29ya2Fyb3VuZCBzbyB0aGUgY29tcGlsZXIgY2FuIHBpY2sgdGhlIHJpZ2h0
IHNlbmRSZXNwb25zZSBiYXNlZCBvbiBhcml0eS4KICAgICAvLyBXaGVuIDxodHRwOi8vd2Via2l0
Lm9yZy9iLzE3OTg0Nz4gaXMgZml4ZWQgb3IgdGhpcyBjbGFzcyBpcyByZW5hbWVkIGZvciB0aGUg
SlNPTjo6T2JqZWN0IGNhc2UsCiAgICAgLy8gdGhlbiB0aGlzIGFsdGVybmF0ZSBtZXRob2Qgd2l0
aCBhIGR1bW15IHBhcmFtZXRlciBjYW4gYmUgcmVtb3ZlZCBpbiBmYXZvciBvZiB0aGUgb25lIHdp
dGhvdXQgaXQuCi0gICAgdm9pZCBzZW5kUmVzcG9uc2UobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxK
U09OOjpPYmplY3Q+JiYgcmVzdWx0LCBib29sIHVudXNlZCk7Ci0gICAgdm9pZCBzZW5kUmVzcG9u
c2UobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcmVzdWx0KTsKKyAgICB2
b2lkIHNlbmRSZXNwb25zZShsb25nIHJlcXVlc3RJZCwgUmVmPEpTT046Ok9iamVjdD4mJiByZXN1
bHQsIGJvb2wgdW51c2VkKTsKKyAgICB2b2lkIHNlbmRSZXNwb25zZShsb25nIHJlcXVlc3RJZCwg
UmVmPEpTT046Ok9iamVjdD4mJiByZXN1bHQpOwogICAgIHZvaWQgc2VuZFBlbmRpbmdFcnJvcnMo
KTsKIAogICAgIHZvaWQgcmVwb3J0UHJvdG9jb2xFcnJvcihDb21tb25FcnJvckNvZGUsIGNvbnN0
IFN0cmluZyYgZXJyb3JNZXNzYWdlKTsKICAgICB2b2lkIHJlcG9ydFByb3RvY29sRXJyb3IoT3B0
aW9uYWw8bG9uZz4gcmVsYXRlZFJlcXVlc3RJZCwgQ29tbW9uRXJyb3JDb2RlLCBjb25zdCBTdHJp
bmcmIGVycm9yTWVzc2FnZSk7CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIFdURl9J
TlRFUk5BTAotICAgIFQgZ2V0UHJvcGVydHlWYWx1ZShKU09OOjpPYmplY3QqLCBjb25zdCBTdHJp
bmcmIG5hbWUsIGJvb2wqIG91dF9vcHRpb25hbFZhbHVlRm91bmQsIFQgZGVmYXVsdFZhbHVlLCBz
dGQ6OmZ1bmN0aW9uPGJvb2woSlNPTjo6VmFsdWUmLCBUJik+LCBjb25zdCBjaGFyKiB0eXBlTmFt
ZSk7Ci0KLSAgICBpbnQgZ2V0SW50ZWdlcihKU09OOjpPYmplY3QqLCBjb25zdCBTdHJpbmcmIG5h
bWUsIGJvb2wqIHZhbHVlRm91bmQpOwotICAgIGRvdWJsZSBnZXREb3VibGUoSlNPTjo6T2JqZWN0
KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kKTsKLSAgICBTdHJpbmcgZ2V0
U3RyaW5nKEpTT046Ok9iamVjdCosIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3Vu
ZCk7Ci0gICAgYm9vbCBnZXRCb29sZWFuKEpTT046Ok9iamVjdCosIGNvbnN0IFN0cmluZyYgbmFt
ZSwgYm9vbCogdmFsdWVGb3VuZCk7Ci0gICAgUmVmUHRyPEpTT046OlZhbHVlPiBnZXRWYWx1ZShK
U09OOjpPYmplY3QqLCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQpOwotICAg
IFJlZlB0cjxKU09OOjpPYmplY3Q+IGdldE9iamVjdChKU09OOjpPYmplY3QqLCBjb25zdCBTdHJp
bmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQpOwotICAgIFJlZlB0cjxKU09OOjpBcnJheT4gZ2V0
QXJyYXkoSlNPTjo6T2JqZWN0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5k
KTsKKyAgICBPcHRpb25hbDxib29sPiBnZXRCb29sZWFuKEpTT046Ok9iamVjdCosIGNvbnN0IFN0
cmluZyYgbmFtZSwgYm9vbCByZXF1aXJlZCk7CisgICAgT3B0aW9uYWw8aW50PiBnZXRJbnRlZ2Vy
KEpTT046Ok9iamVjdCosIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCByZXF1aXJlZCk7CisgICAg
T3B0aW9uYWw8ZG91YmxlPiBnZXREb3VibGUoSlNPTjo6T2JqZWN0KiwgY29uc3QgU3RyaW5nJiBu
YW1lLCBib29sIHJlcXVpcmVkKTsKKyAgICBTdHJpbmcgZ2V0U3RyaW5nKEpTT046Ok9iamVjdCos
IGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCByZXF1aXJlZCk7CisgICAgUmVmUHRyPEpTT046OlZh
bHVlPiBnZXRWYWx1ZShKU09OOjpPYmplY3QqLCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wgcmVx
dWlyZWQpOworICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IGdldE9iamVjdChKU09OOjpPYmplY3Qq
LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wgcmVxdWlyZWQpOworICAgIFJlZlB0cjxKU09OOjpB
cnJheT4gZ2V0QXJyYXkoSlNPTjo6T2JqZWN0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sIHJl
cXVpcmVkKTsKIAogcHJpdmF0ZToKICAgICBCYWNrZW5kRGlzcGF0Y2hlcihSZWY8RnJvbnRlbmRS
b3V0ZXI+JiYpOwogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBUIGdldFByb3BlcnR5
VmFsdWUoSlNPTjo6T2JqZWN0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sIHJlcXVpcmVkLCBz
dGQ6OmZ1bmN0aW9uPFQoSlNPTjo6VmFsdWUmKT4gY29udmVydGVyLCBjb25zdCBjaGFyKiB0eXBl
TmFtZSk7CisKICAgICBSZWY8RnJvbnRlbmRSb3V0ZXI+IG1fZnJvbnRlbmRSb3V0ZXI7CiAgICAg
SGFzaE1hcDxTdHJpbmcsIFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyKj4gbV9kaXNwYXRj
aGVyczsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JQcm90b2NvbFR5cGVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvclByb3RvY29sVHlwZXMuaAppbmRleCBkNzAxMGE1YzYyZTg2MzNhNGRkMDFiMmMwMDYw
NWJhYWNjOWM4Yzc5Li41ODc3ZTBkNzQxMDgyZjcxMWE1ZmZlZDQzNWNlZmMwZjIxMzEzMzVlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvclByb3Rv
Y29sVHlwZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
clByb3RvY29sVHlwZXMuaApAQCAtMjcsMTIgKzI3LDE5IEBACiAjcHJhZ21hIG9uY2UKIAogI2lu
Y2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL0V4cGVjdGVkLmg+CiAjaW5j
bHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
IAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKIG5hbWVzcGFjZSBQcm90b2NvbCB7CiAKK3VzaW5n
IEVycm9yU3RyaW5nID0gU3RyaW5nOworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3VzaW5nIEVy
cm9yU3RyaW5nT3IgPSBFeHBlY3RlZDxULCBFcnJvclN0cmluZz47CisKIHRlbXBsYXRlPHR5cGVu
YW1lPiBzdHJ1Y3QgQmluZGluZ1RyYWl0czsKIAogdGVtcGxhdGU8SlNPTjo6VmFsdWU6OlR5cGUg
dHlwZT4gc3RydWN0IFByaW1pdGl2ZUJpbmRpbmdUcmFpdHMgewpAQCAtNDQsMjkgKzUxLDIzIEBA
IHRlbXBsYXRlPEpTT046OlZhbHVlOjpUeXBlIHR5cGU+IHN0cnVjdCBQcmltaXRpdmVCaW5kaW5n
VHJhaXRzIHsKIH07CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBCaW5kaW5nVHJhaXRz
PEpTT046OkFycmF5T2Y8VD4+IHsKLSAgICBzdGF0aWMgUmVmUHRyPEpTT046OkFycmF5T2Y8VD4+
IHJ1bnRpbWVDYXN0KFJlZlB0cjxKU09OOjpWYWx1ZT4mJiB2YWx1ZSkKKyAgICBzdGF0aWMgUmVm
PEpTT046OkFycmF5T2Y8VD4+IHJ1bnRpbWVDYXN0KFJlZjxKU09OOjpWYWx1ZT4mJiB2YWx1ZSkK
ICAgICB7Ci0gICAgICAgIEFTU0VSVF9BUkcodmFsdWUsIHZhbHVlKTsKLSAgICAgICAgUmVmUHRy
PEpTT046OkFycmF5PiBhcnJheTsKLSAgICAgICAgYm9vbCBjYXN0U3VjY2VlZGVkID0gdmFsdWUt
PmFzQXJyYXkoYXJyYXkpOwotICAgICAgICBBU1NFUlRfVU5VU0VEKGNhc3RTdWNjZWVkZWQsIGNh
c3RTdWNjZWVkZWQpOwotICAgICAgICBhc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShhcnJheS5n
ZXQoKSk7CisgICAgICAgIGF1dG8gYXJyYXkgPSB2YWx1ZS0+YXNBcnJheSgpOworICAgICAgICBC
aW5kaW5nVHJhaXRzPEpTT046OkFycmF5T2Y8VD4+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlw
ZShhcnJheS5nZXQoKSk7CiAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihKU09OOjpBcnJh
eU9mPFQ+KSA9PSBzaXplb2YoSlNPTjo6QXJyYXkpLCB0eXBlX2Nhc3RfcHJvYmxlbSk7Ci0gICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxKU09OOjpBcnJheU9mPFQ+Kj4oc3RhdGljX2Nhc3Q8SlNP
Tjo6QXJyYXlCYXNlKj4oYXJyYXkuZ2V0KCkpKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19yZWZl
cmVuY2VfY2FzdDxKU09OOjpBcnJheU9mPFQ+PihzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SlNPTjo6
QXJyYXlCYXNlPihhcnJheS5yZWxlYXNlTm9uTnVsbCgpKSk7CiAgICAgfQogCiAgICAgc3RhdGlj
IHZvaWQgYXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoSlNPTjo6VmFsdWUqIHZhbHVlKQogICAg
IHsKKyAgICAgICAgQVNTRVJUX1VOVVNFRCh2YWx1ZSwgdmFsdWUpOwogI2lmIEFTU0VSVF9FTkFC
TEVECi0gICAgICAgIEFTU0VSVF9BUkcodmFsdWUsIHZhbHVlKTsKLSAgICAgICAgUmVmUHRyPEpT
T046OkFycmF5PiBhcnJheTsKLSAgICAgICAgYm9vbCBjYXN0U3VjY2VlZGVkID0gdmFsdWUtPmFz
QXJyYXkoYXJyYXkpOwotICAgICAgICBBU1NFUlRfVU5VU0VEKGNhc3RTdWNjZWVkZWQsIGNhc3RT
dWNjZWVkZWQpOworICAgICAgICBhdXRvIGFycmF5ID0gdmFsdWUtPmFzQXJyYXkoKTsKKyAgICAg
ICAgQVNTRVJUKGFycmF5KTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFycmF5
LT5sZW5ndGgoKTsgaSsrKQotICAgICAgICAgICAgQmluZGluZ1RyYWl0czxUPjo6YXNzZXJ0VmFs
dWVIYXNFeHBlY3RlZFR5cGUoYXJyYXktPmdldChpKS5nZXQoKSk7Ci0jZWxzZQotICAgICAgICBV
TlVTRURfUEFSQU0odmFsdWUpOwotI2VuZGlmIC8vIEFTU0VSVF9FTkFCTEVECisgICAgICAgICAg
ICBCaW5kaW5nVHJhaXRzPFQ+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShhcnJheS0+Z2V0
KGkpLnB0cigpKTsKKyNlbmRpZgogICAgIH0KIH07CiAKQEAgLTg1LDYgKzg2LDQgQEAgdGVtcGxh
dGU8PiBzdHJ1Y3QgQmluZGluZ1RyYWl0czxpbnQ+IDogUHJpbWl0aXZlQmluZGluZ1RyYWl0czxK
U09OOjpWYWx1ZTo6VHlwZToKIAogfQogCi11c2luZyBQcm90b2NvbDo6QmluZGluZ1RyYWl0czsK
LQogfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL0pTR2xvYmFsT2JqZWN0Q29uc29sZUNsaWVudC5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTR2xvYmFsT2JqZWN0Q29uc29sZUNsaWVudC5jcHAK
aW5kZXggNDZkMGI2OTQzMjhlZTA0MTc2NjUwM2ZlNTZmOWQ2YzIyOTk3NTdjNi4uYmM2MzY5YTBj
MzlkOWJiNjQwOTVmNWQ4NzA0NGQ2MDc1M2NkNDg3ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9KU0dsb2JhbE9iamVjdENvbnNvbGVDbGllbnQuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNHbG9iYWxPYmplY3RDb25zb2xlQ2xp
ZW50LmNwcApAQCAtMTM2LDI4ICsxMzYsMjIgQEAgdm9pZCBKU0dsb2JhbE9iamVjdENvbnNvbGVD
bGllbnQ6OnByb2ZpbGVFbmQoSlNDOjpKU0dsb2JhbE9iamVjdCosIGNvbnN0IFN0cmluZyYKIAog
dm9pZCBKU0dsb2JhbE9iamVjdENvbnNvbGVDbGllbnQ6OnN0YXJ0Q29uc29sZVByb2ZpbGUoKQog
ewotICAgIEVycm9yU3RyaW5nIGlnbm9yZWQ7Ci0KICAgICBpZiAobV9kZWJ1Z2dlckFnZW50KSB7
CiAgICAgICAgIG1fcHJvZmlsZVJlc3RvcmVCcmVha3BvaW50QWN0aXZlVmFsdWUgPSBtX2RlYnVn
Z2VyQWdlbnQtPmJyZWFrcG9pbnRzQWN0aXZlKCk7Ci0gICAgICAgIG1fZGVidWdnZXJBZ2VudC0+
c2V0QnJlYWtwb2ludHNBY3RpdmUoaWdub3JlZCwgZmFsc2UpOworICAgICAgICBtX2RlYnVnZ2Vy
QWdlbnQtPnNldEJyZWFrcG9pbnRzQWN0aXZlKGZhbHNlKTsKICAgICB9CiAKLSAgICBpZiAobV9z
Y3JpcHRQcm9maWxlckFnZW50KSB7Ci0gICAgICAgIGNvbnN0IGJvb2wgaW5jbHVkZVNhbXBsZXMg
PSB0cnVlOwotICAgICAgICBtX3NjcmlwdFByb2ZpbGVyQWdlbnQtPnN0YXJ0VHJhY2tpbmcoaWdu
b3JlZCwgJmluY2x1ZGVTYW1wbGVzKTsKLSAgICB9CisgICAgaWYgKG1fc2NyaXB0UHJvZmlsZXJB
Z2VudCkKKyAgICAgICAgbV9zY3JpcHRQcm9maWxlckFnZW50LT5zdGFydFRyYWNraW5nKHRydWUp
OwogfQogCiB2b2lkIEpTR2xvYmFsT2JqZWN0Q29uc29sZUNsaWVudDo6c3RvcENvbnNvbGVQcm9m
aWxlKCkKIHsKLSAgICBFcnJvclN0cmluZyBpZ25vcmVkOwotCiAgICAgaWYgKG1fc2NyaXB0UHJv
ZmlsZXJBZ2VudCkKLSAgICAgICAgbV9zY3JpcHRQcm9maWxlckFnZW50LT5zdG9wVHJhY2tpbmco
aWdub3JlZCk7CisgICAgICAgIG1fc2NyaXB0UHJvZmlsZXJBZ2VudC0+c3RvcFRyYWNraW5nKCk7
CiAKICAgICBpZiAobV9kZWJ1Z2dlckFnZW50KQotICAgICAgICBtX2RlYnVnZ2VyQWdlbnQtPnNl
dEJyZWFrcG9pbnRzQWN0aXZlKGlnbm9yZWQsIG1fcHJvZmlsZVJlc3RvcmVCcmVha3BvaW50QWN0
aXZlVmFsdWUpOworICAgICAgICBtX2RlYnVnZ2VyQWdlbnQtPnNldEJyZWFrcG9pbnRzQWN0aXZl
KG1fcHJvZmlsZVJlc3RvcmVCcmVha3BvaW50QWN0aXZlVmFsdWUpOwogfQogCiB2b2lkIEpTR2xv
YmFsT2JqZWN0Q29uc29sZUNsaWVudDo6dGFrZUhlYXBTbmFwc2hvdChKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiwgY29uc3QgU3RyaW5nJiB0aXRsZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3IvSlNHbG9iYWxPYmplY3RJbnNwZWN0b3JDb250cm9sbGVyLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNHbG9iYWxPYmplY3RJbnNwZWN0b3JDb250
cm9sbGVyLmNwcAppbmRleCBkNGRiNTYzZWJkNzY1MzI2NjA0ZjUxMmMzMWU5ZGIyODZkMTA4M2Y0
Li5hNjBmMjVkNDM3ZmJlOWZkZmNlNmJhNThkM2U4MmMyNmRkNTZkNjNlIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTR2xvYmFsT2JqZWN0SW5zcGVjdG9yQ29u
dHJvbGxlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0dsb2Jh
bE9iamVjdEluc3BlY3RvckNvbnRyb2xsZXIuY3BwCkBAIC0yMzEsOSArMjMxLDggQEAgdm9pZCBK
U0dsb2JhbE9iamVjdEluc3BlY3RvckNvbnRyb2xsZXI6OmZyb250ZW5kSW5pdGlhbGl6ZWQoKQog
ICAgIGlmIChtX3BhdXNlQWZ0ZXJJbml0aWFsaXphdGlvbikgewogICAgICAgICBtX3BhdXNlQWZ0
ZXJJbml0aWFsaXphdGlvbiA9IGZhbHNlOwogCi0gICAgICAgIEVycm9yU3RyaW5nIGlnbm9yZWQ7
Ci0gICAgICAgIGVuc3VyZURlYnVnZ2VyQWdlbnQoKS5lbmFibGUoaWdub3JlZCk7Ci0gICAgICAg
IGVuc3VyZURlYnVnZ2VyQWdlbnQoKS5wYXVzZShpZ25vcmVkKTsKKyAgICAgICAgZW5zdXJlRGVi
dWdnZXJBZ2VudCgpLmVuYWJsZSgpOworICAgICAgICBlbnN1cmVEZWJ1Z2dlckFnZW50KCkucGF1
c2UoKTsKICAgICB9CiAKICNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckFnZW50LmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckFnZW50
LmNwcAppbmRleCA1YjlhNzE1NDA4NTA4NjQxY2EwNjFhZWNmOGYwMTE4NDZmNzEwNDQ4Li44Njg2
ZDY5NDFiNzg0Nzk5NWIyZGZmZGQ2NzhiNjZkM2I0ODFkZGI1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBZ2VudC5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQWdlbnQuY3Bw
CkBAIC01NCw0NCArNTQsNDkgQEAgdm9pZCBJbnNwZWN0b3JBZ2VudDo6d2lsbERlc3Ryb3lGcm9u
dGVuZEFuZEJhY2tlbmQoRGlzY29ubmVjdFJlYXNvbikKIHsKICAgICBtX3BlbmRpbmdFdmFsdWF0
ZVRlc3RDb21tYW5kcy5jbGVhcigpOwogCi0gICAgRXJyb3JTdHJpbmcgaWdub3JlZDsKLSAgICBk
aXNhYmxlKGlnbm9yZWQpOworICAgIGRpc2FibGUoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JBZ2Vu
dDo6ZW5hYmxlKEVycm9yU3RyaW5nJikKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IElu
c3BlY3RvckFnZW50OjplbmFibGUoKQogewogICAgIG1fZW5hYmxlZCA9IHRydWU7CiAKICAgICBp
ZiAobV9wZW5kaW5nSW5zcGVjdERhdGEuZmlyc3QpCi0gICAgICAgIGluc3BlY3QobV9wZW5kaW5n
SW5zcGVjdERhdGEuZmlyc3QuY29weVJlZigpLCBtX3BlbmRpbmdJbnNwZWN0RGF0YS5zZWNvbmQu
Y29weVJlZigpKTsKKyAgICAgICAgaW5zcGVjdChtX3BlbmRpbmdJbnNwZWN0RGF0YS5maXJzdC5y
ZWxlYXNlTm9uTnVsbCgpLCBtX3BlbmRpbmdJbnNwZWN0RGF0YS5zZWNvbmQucmVsZWFzZU5vbk51
bGwoKSk7CiAKICAgICBmb3IgKGF1dG8mIHRlc3RDb21tYW5kIDogbV9wZW5kaW5nRXZhbHVhdGVU
ZXN0Q29tbWFuZHMpCiAgICAgICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5ldmFsdWF0ZUZvclRl
c3RJbkZyb250ZW5kKHRlc3RDb21tYW5kKTsKIAogICAgIG1fcGVuZGluZ0V2YWx1YXRlVGVzdENv
bW1hbmRzLmNsZWFyKCk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckFn
ZW50OjpkaXNhYmxlKEVycm9yU3RyaW5nJikKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+
IEluc3BlY3RvckFnZW50OjpkaXNhYmxlKCkKIHsKICAgICBtX2VuYWJsZWQgPSBmYWxzZTsKKwor
ICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yQWdlbnQ6OmluaXRpYWxpemVkKEVy
cm9yU3RyaW5nJikKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckFnZW50
Ojppbml0aWFsaXplZCgpCiB7CiAgICAgbV9lbnZpcm9ubWVudC5mcm9udGVuZEluaXRpYWxpemVk
KCk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckFnZW50OjppbnNwZWN0
KFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYmIG9iamVjdFRvSW5zcGVj
dCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBoaW50cykKK3ZvaWQgSW5zcGVjdG9yQWdlbnQ6Omlu
c3BlY3QoUmVmPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiYgb2JqZWN0LCBSZWY8
SlNPTjo6T2JqZWN0PiYmIGhpbnRzKQogewogICAgIGlmIChtX2VuYWJsZWQpIHsKLSAgICAgICAg
bV9mcm9udGVuZERpc3BhdGNoZXItPmluc3BlY3Qob2JqZWN0VG9JbnNwZWN0LCBoaW50cyk7Cisg
ICAgICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5pbnNwZWN0KFdURk1vdmUob2JqZWN0KSwgV1RG
TW92ZShoaW50cykpOwogICAgICAgICBtX3BlbmRpbmdJbnNwZWN0RGF0YS5maXJzdCA9IG51bGxw
dHI7CiAgICAgICAgIG1fcGVuZGluZ0luc3BlY3REYXRhLnNlY29uZCA9IG51bGxwdHI7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKLSAgICBtX3BlbmRpbmdJbnNwZWN0RGF0YS5maXJzdCA9IG9i
amVjdFRvSW5zcGVjdDsKLSAgICBtX3BlbmRpbmdJbnNwZWN0RGF0YS5zZWNvbmQgPSBoaW50czsK
KyAgICBtX3BlbmRpbmdJbnNwZWN0RGF0YS5maXJzdCA9IFdURk1vdmUob2JqZWN0KTsKKyAgICBt
X3BlbmRpbmdJbnNwZWN0RGF0YS5zZWNvbmQgPSBXVEZNb3ZlKGhpbnRzKTsKIH0KIAogdm9pZCBJ
bnNwZWN0b3JBZ2VudDo6ZXZhbHVhdGVGb3JUZXN0SW5Gcm9udGVuZChjb25zdCBTdHJpbmcmIHNj
cmlwdCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRz
L0luc3BlY3RvckFnZW50LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50
cy9JbnNwZWN0b3JBZ2VudC5oCmluZGV4IDg1OGM2OWFjMmViODZkYzE4MjhhMmYzZTEyNjcxNTgw
OWU4OWYzNWEuLjU5NGNlZTcxNzQwNjA1OTljODk5MzZkMGMyNzM2YTE1M2FhMjczZDQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckFn
ZW50LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVj
dG9yQWdlbnQuaApAQCAtNDAsMjYgKzQwLDI0IEBAIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogY2xh
c3MgQmFja2VuZERpc3BhdGNoZXI7CiBjbGFzcyBJbnNwZWN0b3JFbnZpcm9ubWVudDsKIAotdHlw
ZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7Ci0KIGNsYXNzIEpTX0VYUE9SVF9QUklWQVRFIEluc3Bl
Y3RvckFnZW50IGZpbmFsIDogcHVibGljIEluc3BlY3RvckFnZW50QmFzZSwgcHVibGljIEluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
SW5zcGVjdG9yQWdlbnQpOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgog
ICAgIEluc3BlY3RvckFnZW50KEFnZW50Q29udGV4dCYpOwotICAgIH5JbnNwZWN0b3JBZ2VudCgp
IGZpbmFsOworICAgIH5JbnNwZWN0b3JBZ2VudCgpOwogCiAgICAgLy8gSW5zcGVjdG9yQWdlbnRC
YXNlCi0gICAgdm9pZCBkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoRnJvbnRlbmRSb3V0ZXIq
LCBCYWNrZW5kRGlzcGF0Y2hlciopIGZpbmFsOwotICAgIHZvaWQgd2lsbERlc3Ryb3lGcm9udGVu
ZEFuZEJhY2tlbmQoRGlzY29ubmVjdFJlYXNvbikgZmluYWw7CisgICAgdm9pZCBkaWRDcmVhdGVG
cm9udGVuZEFuZEJhY2tlbmQoRnJvbnRlbmRSb3V0ZXIqLCBCYWNrZW5kRGlzcGF0Y2hlciopOwor
ICAgIHZvaWQgd2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoRGlzY29ubmVjdFJlYXNvbik7
CiAKICAgICAvLyBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIKLSAgICB2b2lkIGVu
YWJsZShFcnJvclN0cmluZyYpIGZpbmFsOwotICAgIHZvaWQgZGlzYWJsZShFcnJvclN0cmluZyYp
IGZpbmFsOwotICAgIHZvaWQgaW5pdGlhbGl6ZWQoRXJyb3JTdHJpbmcmKSBmaW5hbDsKKyAgICBQ
cm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBlbmFibGUoKTsKKyAgICBQcm90b2NvbDo6RXJy
b3JTdHJpbmdPcjx2b2lkPiBkaXNhYmxlKCk7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8
dm9pZD4gaW5pdGlhbGl6ZWQoKTsKIAogICAgIC8vIENvbW1hbmRMaW5lQVBJCi0gICAgdm9pZCBp
bnNwZWN0KFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYmIG9iamVjdFRv
SW5zcGVjdCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBoaW50cyk7CisgICAgdm9pZCBpbnNwZWN0
KFJlZjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYmLCBSZWY8SlNPTjo6T2JqZWN0
PiYmIGhpbnRzKTsKIAogICAgIHZvaWQgZXZhbHVhdGVGb3JUZXN0SW5Gcm9udGVuZChjb25zdCBT
dHJpbmcmIHNjcmlwdCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3IvYWdlbnRzL0luc3BlY3RvckF1ZGl0QWdlbnQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQXVkaXRBZ2VudC5jcHAKaW5kZXggMDBiMWVj
YzFhZjQ4MDcwZWZlZGM3NjZhM2JhNmZmNWI2ZjRiYTcwMC4uMmY5ZjhmMDU5Y2IxMzkxM2FmYTMw
ZjY0OTc3ZTAzM2I1MzRjOTQ5MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQXVkaXRBZ2VudC5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQXVkaXRBZ2VudC5jcHAKQEAgLTU3
LDQxICs1Nyw0MSBAQCB2b2lkIEluc3BlY3RvckF1ZGl0QWdlbnQ6OndpbGxEZXN0cm95RnJvbnRl
bmRBbmRCYWNrZW5kKERpc2Nvbm5lY3RSZWFzb24pCiB7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQXVk
aXRBZ2VudDo6c2V0dXAoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBpbnQqIGV4ZWN1
dGlvbkNvbnRleHRJZCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckF1
ZGl0QWdlbnQ6OnNldHVwKE9wdGlvbmFsPFByb3RvY29sOjpSdW50aW1lOjpFeGVjdXRpb25Db250
ZXh0SWQ+JiYgZXhlY3V0aW9uQ29udGV4dElkKQogewotICAgIGlmIChoYXNBY3RpdmVBdWRpdCgp
KSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIk11c3QgY2FsbCB0ZWFyZG93biBiZWZvcmUgY2Fs
bGluZyBzZXR1cCBhZ2FpbiJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBQcm90b2Nv
bDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CiAKLSAgICBJbmplY3RlZFNjcmlwdCBpbmplY3Rl
ZFNjcmlwdCA9IGluamVjdGVkU2NyaXB0Rm9yRXZhbChlcnJvclN0cmluZywgZXhlY3V0aW9uQ29u
dGV4dElkKTsKKyAgICBpZiAoaGFzQWN0aXZlQXVkaXQoKSkKKyAgICAgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKCJNdXN0IGNhbGwgdGVhcmRvd24gYmVmb3JlIGNhbGxpbmcgc2V0dXAgYWdhaW4i
X3MpOworCisgICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHQgPSBpbmplY3RlZFNjcmlw
dEZvckV2YWwoZXJyb3JTdHJpbmcsIFdURk1vdmUoZXhlY3V0aW9uQ29udGV4dElkKSk7CiAgICAg
aWYgKGluamVjdGVkU2NyaXB0Lmhhc05vVmFsdWUoKSkKLSAgICAgICAgcmV0dXJuOworICAgICAg
ICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCiAgICAgSlNDOjpKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gaW5qZWN0ZWRTY3JpcHQuZ2xvYmFsT2JqZWN0KCk7Ci0g
ICAgaWYgKCFnbG9iYWxPYmplY3QpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWlzc2luZyBl
eGVjdXRpb24gc3RhdGUgb2YgaW5qZWN0ZWQgc2NyaXB0IGZvciBnaXZlbiBleGVjdXRpb25Db250
ZXh0SWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKCFnbG9iYWxPYmplY3Qp
CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTWlzc2luZyBleGVjdXRpb24gc3RhdGUg
b2YgaW5qZWN0ZWQgc2NyaXB0IGZvciBnaXZlbiBleGVjdXRpb25Db250ZXh0SWQiX3MpOwogCiAg
ICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogCiAgICAgSlNDOjpKU0xvY2tIb2xkZXIg
bG9jayhnbG9iYWxPYmplY3QpOwogCiAgICAgbV9pbmplY3RlZFdlYkluc3BlY3RvckF1ZGl0VmFs
dWUuc2V0KHZtLCBjb25zdHJ1Y3RFbXB0eU9iamVjdChnbG9iYWxPYmplY3QpKTsKLSAgICBpZiAo
IW1faW5qZWN0ZWRXZWJJbnNwZWN0b3JBdWRpdFZhbHVlKSB7Ci0gICAgICAgIGVycm9yU3RyaW5n
ID0gIlVuYWJsZSB0byBjb25zdHJ1Y3QgaW5qZWN0ZWQgV2ViSW5zcGVjdG9yQXVkaXQgb2JqZWN0
LiJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoIW1faW5qZWN0ZWRXZWJJbnNw
ZWN0b3JBdWRpdFZhbHVlKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIlVuYWJsZSB0
byBjb25zdHJ1Y3QgaW5qZWN0ZWQgV2ViSW5zcGVjdG9yQXVkaXQgb2JqZWN0LiJfcyk7CiAKICAg
ICBwb3B1bGF0ZUF1ZGl0T2JqZWN0KGdsb2JhbE9iamVjdCwgbV9pbmplY3RlZFdlYkluc3BlY3Rv
ckF1ZGl0VmFsdWUpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JBdWRp
dEFnZW50OjpydW4oRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHRlc3Qs
IGNvbnN0IGludCogZXhlY3V0aW9uQ29udGV4dElkLCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6
OlJlbW90ZU9iamVjdD4mIHJlc3VsdCwgT3B0aW9uYWw8Ym9vbD4mIHdhc1Rocm93bikKK1Byb3Rv
Y29sOjpFcnJvclN0cmluZ09yPHN0ZDo6dHVwbGU8UmVmPFByb3RvY29sOjpSdW50aW1lOjpSZW1v
dGVPYmplY3Q+LCBPcHRpb25hbDxib29sPiAvKiB3YXNUaHJvd24gKi8+PiBJbnNwZWN0b3JBdWRp
dEFnZW50OjpydW4oY29uc3QgU3RyaW5nJiB0ZXN0LCBPcHRpb25hbDxQcm90b2NvbDo6UnVudGlt
ZTo6RXhlY3V0aW9uQ29udGV4dElkPiYmIGV4ZWN1dGlvbkNvbnRleHRJZCkKIHsKLSAgICBJbmpl
Y3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdCA9IGluamVjdGVkU2NyaXB0Rm9yRXZhbChlcnJvclN0
cmluZywgZXhlY3V0aW9uQ29udGV4dElkKTsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJy
b3JTdHJpbmc7CisKKyAgICBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdCA9IGluamVjdGVk
U2NyaXB0Rm9yRXZhbChlcnJvclN0cmluZywgV1RGTW92ZShleGVjdXRpb25Db250ZXh0SWQpKTsK
ICAgICBpZiAoaW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKQotICAgICAgICByZXR1cm47Cisg
ICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAgICBTdHJpbmdC
dWlsZGVyIGZ1bmN0aW9uU3RyaW5nOwogICAgIGZ1bmN0aW9uU3RyaW5nLmFwcGVuZExpdGVyYWwo
IihmdW5jdGlvbihXZWJJbnNwZWN0b3JBdWRpdCkgeyBcInVzZSBzdHJpY3RcIjsgcmV0dXJuIGV2
YWwoYCgiKTsKQEAgLTEwMyw2ICsxMDMsOCBAQCB2b2lkIEluc3BlY3RvckF1ZGl0QWdlbnQ6OnJ1
bihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgdGVzdCwgY29ucwogICAg
IGlmIChtX2luamVjdGVkV2ViSW5zcGVjdG9yQXVkaXRWYWx1ZSkKICAgICAgICAgb3B0aW9ucy5h
cmdzID0geyBtX2luamVjdGVkV2ViSW5zcGVjdG9yQXVkaXRWYWx1ZS5nZXQoKSB9OwogCisgICAg
UmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+IHJlc3VsdDsKKyAgICBPcHRp
b25hbDxib29sPiB3YXNUaHJvd247CiAgICAgT3B0aW9uYWw8aW50PiBzYXZlZFJlc3VsdEluZGV4
OwogCiAgICAgSlNDOjpEZWJ1Z2dlcjo6VGVtcG9yYXJpbHlEaXNhYmxlRXhjZXB0aW9uQnJlYWtw
b2ludHMgdGVtcG9yYXJpbHlEaXNhYmxlRXhjZXB0aW9uQnJlYWtwb2ludHMobV9kZWJ1Z2dlcik7
CkBAIC0xMTMsMTYgKzExNSwyMSBAQCB2b2lkIEluc3BlY3RvckF1ZGl0QWdlbnQ6OnJ1bihFcnJv
clN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgdGVzdCwgY29ucwogICAgIGluamVj
dGVkU2NyaXB0LmV4ZWN1dGUoZXJyb3JTdHJpbmcsIGZ1bmN0aW9uU3RyaW5nLnRvU3RyaW5nKCks
IFdURk1vdmUob3B0aW9ucyksIHJlc3VsdCwgd2FzVGhyb3duLCBzYXZlZFJlc3VsdEluZGV4KTsK
IAogICAgIHVubXV0ZUNvbnNvbGUoKTsKKworICAgIGlmICghcmVzdWx0KQorICAgICAgICByZXR1
cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOworCisgICAgcmV0dXJuIHsgeyByZXN1bHQu
cmVsZWFzZU5vbk51bGwoKSwgV1RGTW92ZSh3YXNUaHJvd24pIH0gfTsKIH0KIAotdm9pZCBJbnNw
ZWN0b3JBdWRpdEFnZW50Ojp0ZWFyZG93bihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCitQcm90
b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JBdWRpdEFnZW50Ojp0ZWFyZG93bigp
CiB7Ci0gICAgaWYgKCFoYXNBY3RpdmVBdWRpdCgpKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0g
Ik11c3QgY2FsbCBzZXR1cCBiZWZvcmUgY2FsbGluZyB0ZWFyZG93biJfczsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KKyAgICBpZiAoIWhhc0FjdGl2ZUF1ZGl0KCkpCisgICAgICAgIHJldHVybiBt
YWtlVW5leHBlY3RlZCgiTXVzdCBjYWxsIHNldHVwIGJlZm9yZSBjYWxsaW5nIHRlYXJkb3duIl9z
KTsKIAogICAgIG1faW5qZWN0ZWRXZWJJbnNwZWN0b3JBdWRpdFZhbHVlLmNsZWFyKCk7CisKKyAg
ICByZXR1cm4geyB9OwogfQogCiBib29sIEluc3BlY3RvckF1ZGl0QWdlbnQ6Omhhc0FjdGl2ZUF1
ZGl0KCkgY29uc3QKQEAgLTEzOSw3ICsxNDYsNyBAQCB2b2lkIEluc3BlY3RvckF1ZGl0QWdlbnQ6
OnBvcHVsYXRlQXVkaXRPYmplY3QoSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LAog
ICAgIEpTQzo6Vk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIEpTQzo6SlNMb2NrSG9s
ZGVyIGxvY2sodm0pOwogCi0gICAgYXVkaXRPYmplY3QtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAiVmVyc2lvbiIpLCBKU0M6OkpTVmFsdWUoSW5zcGVjdG9y
OjpQcm90b2NvbDo6QXVkaXQ6OlZFUlNJT04pKTsKKyAgICBhdWRpdE9iamVjdC0+cHV0RGlyZWN0
KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJWZXJzaW9uIiksIEpTQzo6SlNW
YWx1ZShQcm90b2NvbDo6QXVkaXQ6OlZFUlNJT04pKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50
cy9JbnNwZWN0b3JBdWRpdEFnZW50LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L2FnZW50cy9JbnNwZWN0b3JBdWRpdEFnZW50LmgKaW5kZXggNWI2ZDhhYWI3MjI2M2YxOGFhNjQx
MDc4NWMwMWM5YmE4YzRkMzBmOC4uYmY1MDZjMzZkMmRmZjNmNmZjYTU5OWY2N2U1ODU0YTI2OGE3
YjFkNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9yQXVkaXRBZ2VudC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3IvYWdlbnRzL0luc3BlY3RvckF1ZGl0QWdlbnQuaApAQCAtNDAsNyArNDAsNiBAQCBuYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKIAogY2xhc3MgSW5qZWN0ZWRTY3JpcHQ7CiBjbGFzcyBJbmplY3RlZFNj
cmlwdE1hbmFnZXI7Ci10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKIAogY2xhc3MgSlNfRVhQ
T1JUX1BSSVZBVEUgSW5zcGVjdG9yQXVkaXRBZ2VudCA6IHB1YmxpYyBJbnNwZWN0b3JBZ2VudEJh
c2UsIHB1YmxpYyBBdWRpdEJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7CiAgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoSW5zcGVjdG9yQXVkaXRBZ2VudCk7CkBAIC01Myw5ICs1Miw5IEBAIHB1Ymxp
YzoKICAgICB2b2lkIHdpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKERpc2Nvbm5lY3RSZWFz
b24pIGZpbmFsOwogCiAgICAgLy8gQXVkaXRCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIKLSAgICB2
b2lkIHNldHVwKEVycm9yU3RyaW5nJiwgY29uc3QgaW50KiBleGVjdXRpb25Db250ZXh0SWQpIGZp
bmFsOwotICAgIHZvaWQgcnVuKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiB0ZXN0LCBjb25z
dCBpbnQqIGV4ZWN1dGlvbkNvbnRleHRJZCwgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1v
dGVPYmplY3Q+JiByZXN1bHQsIE9wdGlvbmFsPGJvb2w+JiB3YXNUaHJvd24pIGZpbmFsOwotICAg
IHZvaWQgdGVhcmRvd24oRXJyb3JTdHJpbmcmKSBmaW5hbDsKKyAgICBQcm90b2NvbDo6RXJyb3JT
dHJpbmdPcjx2b2lkPiBzZXR1cChPcHRpb25hbDxQcm90b2NvbDo6UnVudGltZTo6RXhlY3V0aW9u
Q29udGV4dElkPiYmKSBmaW5hbDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxzdGQ6OnR1
cGxlPFJlZjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiwgT3B0aW9uYWw8Ym9vbD4g
Lyogd2FzVGhyb3duICovPj4gcnVuKGNvbnN0IFN0cmluZyYgdGVzdCwgT3B0aW9uYWw8UHJvdG9j
b2w6OlJ1bnRpbWU6OkV4ZWN1dGlvbkNvbnRleHRJZD4mJikgZmluYWw7CisgICAgUHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8dm9pZD4gdGVhcmRvd24oKSBmaW5hbDsKIAogICAgIGJvb2wgaGFzQWN0
aXZlQXVkaXQoKSBjb25zdDsKIApAQCAtNjQsNyArNjMsNyBAQCBwcm90ZWN0ZWQ6CiAKICAgICBJ
bmplY3RlZFNjcmlwdE1hbmFnZXImIGluamVjdGVkU2NyaXB0TWFuYWdlcigpIHsgcmV0dXJuIG1f
aW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOyB9CiAKLSAgICB2aXJ0dWFsIEluamVjdGVkU2NyaXB0IGlu
amVjdGVkU2NyaXB0Rm9yRXZhbChFcnJvclN0cmluZyYsIGNvbnN0IGludCogZXhlY3V0aW9uQ29u
dGV4dElkKSA9IDA7CisgICAgdmlydHVhbCBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdEZv
ckV2YWwoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiwgT3B0aW9uYWw8UHJvdG9jb2w6OlJ1bnRpbWU6
OkV4ZWN1dGlvbkNvbnRleHRJZD4mJikgPSAwOwogCiAgICAgdmlydHVhbCB2b2lkIHBvcHVsYXRl
QXVkaXRPYmplY3QoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6U3Ryb25nPEpTQzo6SlNPYmpl
Y3Q+JiBhdWRpdE9iamVjdCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNvbnNvbGVBZ2VudC5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDb25zb2xlQWdlbnQuY3BwCmluZGV4
IDEwNWZlNmZjNmMyMjA4ZWY3NjM3MWVhZWRkYmZhNDczMWZiZmI2NTQuLjEzYjYyMzRkMWY1MzI4
NTBlMzAwNTI3OTczYzIxNWI3MmUzNmFlMTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNvbnNvbGVBZ2VudC5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ29uc29sZUFnZW50
LmNwcApAQCAtNTMsOCArNTMsNyBAQCB2b2lkIEluc3BlY3RvckNvbnNvbGVBZ2VudDo6ZGlkQ3Jl
YXRlRnJvbnRlbmRBbmRCYWNrZW5kKEZyb250ZW5kUm91dGVyKiwgQmFja2VuZAogCiB2b2lkIElu
c3BlY3RvckNvbnNvbGVBZ2VudDo6d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoRGlzY29u
bmVjdFJlYXNvbikKIHsKLSAgICBTdHJpbmcgZXJyb3JTdHJpbmc7Ci0gICAgZGlzYWJsZShlcnJv
clN0cmluZyk7CisgICAgZGlzYWJsZSgpOwogfQogCiB2b2lkIEluc3BlY3RvckNvbnNvbGVBZ2Vu
dDo6ZGlzY2FyZFZhbHVlcygpCkBAIC02MywxMCArNjIsMTAgQEAgdm9pZCBJbnNwZWN0b3JDb25z
b2xlQWdlbnQ6OmRpc2NhcmRWYWx1ZXMoKQogICAgIG1fZXhwaXJlZENvbnNvbGVNZXNzYWdlQ291
bnQgPSAwOwogfQogCi12b2lkIEluc3BlY3RvckNvbnNvbGVBZ2VudDo6ZW5hYmxlKEVycm9yU3Ry
aW5nJikKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckNvbnNvbGVBZ2Vu
dDo6ZW5hYmxlKCkKIHsKICAgICBpZiAobV9lbmFibGVkKQotICAgICAgICByZXR1cm47CisgICAg
ICAgIHJldHVybiB7IH07CiAKICAgICBtX2VuYWJsZWQgPSB0cnVlOwogCkBAIC04MCwxNyArNzks
MjEgQEAgdm9pZCBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OmVuYWJsZShFcnJvclN0cmluZyYpCiAK
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1lc3NhZ2VzLnNpemUoKTsgKytpKQogICAgICAg
ICBtZXNzYWdlc1tpXS0+YWRkVG9Gcm9udGVuZCgqbV9mcm9udGVuZERpc3BhdGNoZXIsIG1faW5q
ZWN0ZWRTY3JpcHRNYW5hZ2VyLCBmYWxzZSk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lk
IEluc3BlY3RvckNvbnNvbGVBZ2VudDo6ZGlzYWJsZShFcnJvclN0cmluZyYpCitQcm90b2NvbDo6
RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OmRpc2FibGUoKQogewog
ICAgIGlmICghbV9lbmFibGVkKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB7IH07
CiAKICAgICBtX2VuYWJsZWQgPSBmYWxzZTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQg
SW5zcGVjdG9yQ29uc29sZUFnZW50OjpjbGVhck1lc3NhZ2VzKEVycm9yU3RyaW5nJikKK1Byb3Rv
Y29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckNvbnNvbGVBZ2VudDo6Y2xlYXJNZXNz
YWdlcygpCiB7CiAgICAgbV9jb25zb2xlTWVzc2FnZXMuY2xlYXIoKTsKICAgICBtX2V4cGlyZWRD
b25zb2xlTWVzc2FnZUNvdW50ID0gMDsKQEAgLTk5LDYgKzEwMiw4IEBAIHZvaWQgSW5zcGVjdG9y
Q29uc29sZUFnZW50OjpjbGVhck1lc3NhZ2VzKEVycm9yU3RyaW5nJikKIAogICAgIGlmIChtX2Vu
YWJsZWQpCiAgICAgICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5tZXNzYWdlc0NsZWFyZWQoKTsK
KworICAgIHJldHVybiB7IH07CiB9CiAKIGJvb2wgSW5zcGVjdG9yQ29uc29sZUFnZW50OjpkZXZl
bG9wZXJFeHRyYXNFbmFibGVkKCkgY29uc3QKQEAgLTEwOCw4ICsxMTMsNyBAQCBib29sIEluc3Bl
Y3RvckNvbnNvbGVBZ2VudDo6ZGV2ZWxvcGVyRXh0cmFzRW5hYmxlZCgpIGNvbnN0CiAKIHZvaWQg
SW5zcGVjdG9yQ29uc29sZUFnZW50OjpyZXNldCgpCiB7Ci0gICAgRXJyb3JTdHJpbmcgaWdub3Jl
ZDsKLSAgICBjbGVhck1lc3NhZ2VzKGlnbm9yZWQpOworICAgIGNsZWFyTWVzc2FnZXMoKTsKIAog
ICAgIG1fdGltZXMuY2xlYXIoKTsKICAgICBtX2NvdW50cy5jbGVhcigpOwpAQCAtMTE3LDEwICsx
MjEsOCBAQCB2b2lkIEluc3BlY3RvckNvbnNvbGVBZ2VudDo6cmVzZXQoKQogCiB2b2lkIEluc3Bl
Y3RvckNvbnNvbGVBZ2VudDo6YWRkTWVzc2FnZVRvQ29uc29sZShzdGQ6OnVuaXF1ZV9wdHI8Q29u
c29sZU1lc3NhZ2U+IG1lc3NhZ2UpCiB7Ci0gICAgaWYgKG1lc3NhZ2UtPnR5cGUoKSA9PSBNZXNz
YWdlVHlwZTo6Q2xlYXIpIHsKLSAgICAgICAgRXJyb3JTdHJpbmcgaWdub3JlZDsKLSAgICAgICAg
Y2xlYXJNZXNzYWdlcyhpZ25vcmVkKTsKLSAgICB9CisgICAgaWYgKG1lc3NhZ2UtPnR5cGUoKSA9
PSBNZXNzYWdlVHlwZTo6Q2xlYXIpCisgICAgICAgIGNsZWFyTWVzc2FnZXMoKTsKIAogICAgIGFk
ZENvbnNvbGVNZXNzYWdlKFdURk1vdmUobWVzc2FnZSkpOwogfQpAQCAtMTkxLDEyICsxOTMsMTIg
QEAgdm9pZCBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OnRha2VIZWFwU25hcHNob3QoY29uc3QgU3Ry
aW5nJiB0aXRsZSkKICAgICBpZiAoIW1faGVhcEFnZW50KQogICAgICAgICByZXR1cm47CiAKLSAg
ICBFcnJvclN0cmluZyBpZ25vcmVkOwotICAgIGRvdWJsZSB0aW1lc3RhbXA7Ci0gICAgU3RyaW5n
IHNuYXBzaG90RGF0YTsKLSAgICBtX2hlYXBBZ2VudC0+c25hcHNob3QoaWdub3JlZCwgJnRpbWVz
dGFtcCwgJnNuYXBzaG90RGF0YSk7CisgICAgYXV0byByZXN1bHQgPSBtX2hlYXBBZ2VudC0+c25h
cHNob3QoKTsKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgcmV0dXJuOwogCi0gICAgbV9mcm9u
dGVuZERpc3BhdGNoZXItPmhlYXBTbmFwc2hvdCh0aW1lc3RhbXAsIHNuYXBzaG90RGF0YSwgdGl0
bGUuaXNFbXB0eSgpID8gbnVsbHB0ciA6ICZ0aXRsZSk7CisgICAgYXV0byBbdGltZXN0YW1wLCBz
bmFwc2hvdERhdGFdID0gV1RGTW92ZShyZXN1bHQudmFsdWUoKSk7CisgICAgbV9mcm9udGVuZERp
c3BhdGNoZXItPmhlYXBTbmFwc2hvdCh0aW1lc3RhbXAsIHNuYXBzaG90RGF0YSwgdGl0bGUpOwog
fQogCiB2b2lkIEluc3BlY3RvckNvbnNvbGVBZ2VudDo6Y291bnQoSlNDOjpKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBjb25zdCBTdHJpbmcmIGxhYmVsKQpAQCAtMjU2LDE1ICsyNTgsMTUg
QEAgdm9pZCBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OmFkZENvbnNvbGVNZXNzYWdlKHN0ZDo6dW5p
cXVlX3B0cjxDb25zb2xlTWVzc2FnZT4gY28KICAgICB9CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ29u
c29sZUFnZW50OjpnZXRMb2dnaW5nQ2hhbm5lbHMoRXJyb3JTdHJpbmcmLCBSZWZQdHI8SlNPTjo6
QXJyYXlPZjxQcm90b2NvbDo6Q29uc29sZTo6Q2hhbm5lbD4+JiBjaGFubmVscykKK1Byb3RvY29s
OjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpDb25zb2xlOjpDaGFu
bmVsPj4+IEluc3BlY3RvckNvbnNvbGVBZ2VudDo6Z2V0TG9nZ2luZ0NoYW5uZWxzKCkKIHsKICAg
ICAvLyBEZWZhdWx0IGltcGxlbWVudGF0aW9uIGhhcyBubyBsb2dnaW5nIGNoYW5uZWxzLgotICAg
IGNoYW5uZWxzID0gSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6Q29uc29sZTo6Q2hhbm5lbD46OmNy
ZWF0ZSgpOworICAgIHJldHVybiBKU09OOjpBcnJheU9mPFByb3RvY29sOjpDb25zb2xlOjpDaGFu
bmVsPjo6Y3JlYXRlKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ29uc29sZUFnZW50OjpzZXRMb2dn
aW5nQ2hhbm5lbExldmVsKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiwg
Y29uc3QgU3RyaW5nJikKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckNv
bnNvbGVBZ2VudDo6c2V0TG9nZ2luZ0NoYW5uZWxMZXZlbChQcm90b2NvbDo6Q29uc29sZTo6Q2hh
bm5lbFNvdXJjZSwgUHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWxMZXZlbCkKIHsKLSAgICBlcnJv
clN0cmluZyA9ICJOb3Qgc3VwcG9ydGVkIl9zOworICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgi
Tm90IHN1cHBvcnRlZCJfcyk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ29u
c29sZUFnZW50LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNw
ZWN0b3JDb25zb2xlQWdlbnQuaAppbmRleCA3OGNhZjFhZDA4YWU1N2IxZTA3ODVjOWFkZDUxNjc1
MzZhZmJmMjk2Li5lZDhlMWY2OTlhNWQwYzkxY2QwNTY2OTFhN2RiMjE5ODBmMjM1ZDIyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JD
b25zb2xlQWdlbnQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50
cy9JbnNwZWN0b3JDb25zb2xlQWdlbnQuaApAQCAtNDYsNyArNDYsNiBAQCBjbGFzcyBJbmplY3Rl
ZFNjcmlwdE1hbmFnZXI7CiBjbGFzcyBJbnNwZWN0b3JIZWFwQWdlbnQ7CiBjbGFzcyBTY3JpcHRB
cmd1bWVudHM7CiBjbGFzcyBTY3JpcHRDYWxsU3RhY2s7Ci10eXBlZGVmIFN0cmluZyBFcnJvclN0
cmluZzsKIAogY2xhc3MgSlNfRVhQT1JUX1BSSVZBVEUgSW5zcGVjdG9yQ29uc29sZUFnZW50IDog
cHVibGljIEluc3BlY3RvckFnZW50QmFzZSwgcHVibGljIENvbnNvbGVCYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXIgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEluc3BlY3RvckNvbnNvbGVBZ2Vu
dCk7CkBAIC02MSwxMSArNjAsMTEgQEAgcHVibGljOgogICAgIHZvaWQgZGlzY2FyZFZhbHVlcygp
IGZpbmFsOwogCiAgICAgLy8gQ29uc29sZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcgotICAgIHZv
aWQgZW5hYmxlKEVycm9yU3RyaW5nJikgZmluYWw7Ci0gICAgdm9pZCBkaXNhYmxlKEVycm9yU3Ry
aW5nJikgZmluYWw7Ci0gICAgdm9pZCBjbGVhck1lc3NhZ2VzKEVycm9yU3RyaW5nJikgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCBnZXRMb2dnaW5nQ2hhbm5lbHMoRXJyb3JTdHJpbmcmLCBSZWZQdHI8SlNP
Tjo6QXJyYXlPZjxQcm90b2NvbDo6Q29uc29sZTo6Q2hhbm5lbD4+Jikgb3ZlcnJpZGU7Ci0gICAg
dm9pZCBzZXRMb2dnaW5nQ2hhbm5lbExldmVsKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBj
aGFubmVsLCBjb25zdCBTdHJpbmcmIGxldmVsKSBvdmVycmlkZTsKKyAgICBQcm90b2NvbDo6RXJy
b3JTdHJpbmdPcjx2b2lkPiBlbmFibGUoKSBmaW5hbDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJp
bmdPcjx2b2lkPiBkaXNhYmxlKCkgZmluYWw7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8
dm9pZD4gY2xlYXJNZXNzYWdlcygpIG92ZXJyaWRlOworICAgIFByb3RvY29sOjpFcnJvclN0cmlu
Z09yPFJlZjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpDb25zb2xlOjpDaGFubmVsPj4+IGdldExv
Z2dpbmdDaGFubmVscygpIG92ZXJyaWRlOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZv
aWQ+IHNldExvZ2dpbmdDaGFubmVsTGV2ZWwoUHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWxTb3Vy
Y2UsIFByb3RvY29sOjpDb25zb2xlOjpDaGFubmVsTGV2ZWwpIG92ZXJyaWRlOwogCiAgICAgdm9p
ZCBzZXRIZWFwQWdlbnQoSW5zcGVjdG9ySGVhcEFnZW50KiBhZ2VudCkgeyBtX2hlYXBBZ2VudCA9
IGFnZW50OyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
YWdlbnRzL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHAKaW5kZXggMTNmYzJj
NTNiNWFjNDY1ZTZlM2Q2NmFiZTA1NWMwZWU2ZDRkYzA3MC4uNDFmNGJhNDI3ZWE0Zjc5ZGMxNDQ3
ZmVhNTk2NGFkODA2M2NiZGY3MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHAK
QEAgLTY0LDI1ICs2NCwyNSBAQCBzdGF0aWMgYm9vbCBpc1dlYktpdEluamVjdGVkU2NyaXB0KGNv
bnN0IFN0cmluZyYgc291cmNlVVJMKQogICAgIHJldHVybiBzb3VyY2VVUkwuc3RhcnRzV2l0aCgi
X19JbmplY3RlZFNjcmlwdF8iKSAmJiBzb3VyY2VVUkwuZW5kc1dpdGgoIi5qcyIpOwogfQogCi1z
dGF0aWMgT3B0aW9uYWw8SlNDOjpCcmVha3BvaW50OjpBY3Rpb246OlR5cGU+IGJyZWFrcG9pbnRB
Y3Rpb25UeXBlRm9yU3RyaW5nKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5n
JiB0eXBlU3RyaW5nKQorc3RhdGljIE9wdGlvbmFsPEpTQzo6QnJlYWtwb2ludDo6QWN0aW9uOjpU
eXBlPiBicmVha3BvaW50QWN0aW9uVHlwZUZvclN0cmluZyhQcm90b2NvbDo6RXJyb3JTdHJpbmcm
IGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHR5cGVTdHJpbmcpCiB7Ci0gICAgYXV0byB0eXBl
ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6SW5zcGVjdG9ySGVscGVyczo6cGFyc2VFbnVtVmFsdWVG
cm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpCcmVha3BvaW50QWN0aW9u
OjpUeXBlPih0eXBlU3RyaW5nKTsKKyAgICBhdXRvIHR5cGUgPSBQcm90b2NvbDo6SGVscGVyczo6
cGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPFByb3RvY29sOjpEZWJ1Z2dlcjo6QnJlYWtwb2ludEFj
dGlvbjo6VHlwZT4odHlwZVN0cmluZyk7CiAgICAgaWYgKCF0eXBlKSB7CiAgICAgICAgIGVycm9y
U3RyaW5nID0gbWFrZVN0cmluZygiVW5rbm93biBicmVha3BvaW50IGFjdGlvbiB0eXBlOiAiX3Ms
IHR5cGVTdHJpbmcpOwogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIH0KIAogICAg
IHN3aXRjaCAoKnR5cGUpIHsKLSAgICBjYXNlIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2Vy
OjpCcmVha3BvaW50QWN0aW9uOjpUeXBlOjpMb2c6CisgICAgY2FzZSBQcm90b2NvbDo6RGVidWdn
ZXI6OkJyZWFrcG9pbnRBY3Rpb246OlR5cGU6OkxvZzoKICAgICAgICAgcmV0dXJuIEpTQzo6QnJl
YWtwb2ludDo6QWN0aW9uOjpUeXBlOjpMb2c7CiAKLSAgICBjYXNlIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRlYnVnZ2VyOjpCcmVha3BvaW50QWN0aW9uOjpUeXBlOjpFdmFsdWF0ZToKKyAgICBjYXNl
IFByb3RvY29sOjpEZWJ1Z2dlcjo6QnJlYWtwb2ludEFjdGlvbjo6VHlwZTo6RXZhbHVhdGU6CiAg
ICAgICAgIHJldHVybiBKU0M6OkJyZWFrcG9pbnQ6OkFjdGlvbjo6VHlwZTo6RXZhbHVhdGU7CiAK
LSAgICBjYXNlIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpCcmVha3BvaW50QWN0aW9u
OjpUeXBlOjpTb3VuZDoKKyAgICBjYXNlIFByb3RvY29sOjpEZWJ1Z2dlcjo6QnJlYWtwb2ludEFj
dGlvbjo6VHlwZTo6U291bmQ6CiAgICAgICAgIHJldHVybiBKU0M6OkJyZWFrcG9pbnQ6OkFjdGlv
bjo6VHlwZTo6U291bmQ7CiAKLSAgICBjYXNlIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2Vy
OjpCcmVha3BvaW50QWN0aW9uOjpUeXBlOjpQcm9iZToKKyAgICBjYXNlIFByb3RvY29sOjpEZWJ1
Z2dlcjo6QnJlYWtwb2ludEFjdGlvbjo6VHlwZTo6UHJvYmU6CiAgICAgICAgIHJldHVybiBKU0M6
OkJyZWFrcG9pbnQ6OkFjdGlvbjo6VHlwZTo6UHJvYmU7CiAgICAgfQogCkBAIC05MSwzMCArOTEs
MjkgQEAgc3RhdGljIE9wdGlvbmFsPEpTQzo6QnJlYWtwb2ludDo6QWN0aW9uOjpUeXBlPiBicmVh
a3BvaW50QWN0aW9uVHlwZUZvclN0cmluZyhFcnIKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIFQ+
Ci1zdGF0aWMgVCBwYXJzZUJyZWFrcG9pbnRPcHRpb25zKEVycm9yU3RyaW5nJiBlcnJvclN0cmlu
ZywgY29uc3QgSlNPTjo6T2JqZWN0KiBvcHRpb25zUGF5bG9hZCwgRnVuY3Rpb248VChjb25zdCBT
dHJpbmcmLCBKU0M6OkJyZWFrcG9pbnQ6OkFjdGlvbnNWZWN0b3ImJiwgYm9vbCwgc2l6ZV90KT4g
Y2FsbGJhY2spCitzdGF0aWMgVCBwYXJzZUJyZWFrcG9pbnRPcHRpb25zKFByb3RvY29sOjpFcnJv
clN0cmluZyYgZXJyb3JTdHJpbmcsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgb3B0aW9ucywgRnVu
Y3Rpb248VChjb25zdCBTdHJpbmcmLCBKU0M6OkJyZWFrcG9pbnQ6OkFjdGlvbnNWZWN0b3ImJiwg
Ym9vbCwgc2l6ZV90KT4gY2FsbGJhY2spCiB7CiAgICAgU3RyaW5nIGNvbmRpdGlvbjsKICAgICBK
U0M6OkJyZWFrcG9pbnQ6OkFjdGlvbnNWZWN0b3IgYWN0aW9uczsKICAgICBib29sIGF1dG9Db250
aW51ZSA9IGZhbHNlOwogICAgIHNpemVfdCBpZ25vcmVDb3VudCA9IDA7CiAKLSAgICBpZiAob3B0
aW9uc1BheWxvYWQpIHsKLSAgICAgICAgb3B0aW9uc1BheWxvYWQtPmdldFN0cmluZygiY29uZGl0
aW9uIl9zLCBjb25kaXRpb24pOworICAgIGlmIChvcHRpb25zKSB7CisgICAgICAgIGNvbmRpdGlv
biA9IG9wdGlvbnMtPmdldFN0cmluZyhQcm90b2NvbDo6RGVidWdnZXI6OkJyZWFrcG9pbnRPcHRp
b25zOjpjb25kaXRpb25LZXkpOwogCi0gICAgICAgIFJlZlB0cjxKU09OOjpBcnJheT4gYWN0aW9u
c1BheWxvYWQ7Ci0gICAgICAgIG9wdGlvbnNQYXlsb2FkLT5nZXRBcnJheSgiYWN0aW9ucyJfcywg
YWN0aW9uc1BheWxvYWQpOworICAgICAgICBhdXRvIGFjdGlvbnNQYXlsb2FkID0gb3B0aW9ucy0+
Z2V0QXJyYXkoUHJvdG9jb2w6OkRlYnVnZ2VyOjpCcmVha3BvaW50T3B0aW9uczo6YWN0aW9uc0tl
eSk7CiAgICAgICAgIGlmIChhdXRvIGNvdW50ID0gYWN0aW9uc1BheWxvYWQgPyBhY3Rpb25zUGF5
bG9hZC0+bGVuZ3RoKCkgOiAwKSB7CiAgICAgICAgICAgICBhY3Rpb25zLnJlc2VydmVDYXBhY2l0
eShjb3VudCk7CiAKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb3VudDsg
KytpKSB7Ci0gICAgICAgICAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gYWN0aW9uT2JqZWN0
OwotICAgICAgICAgICAgICAgIGlmICghYWN0aW9uc1BheWxvYWQtPmdldChpKS0+YXNPYmplY3Qo
YWN0aW9uT2JqZWN0KSkgeworICAgICAgICAgICAgICAgIGF1dG8gYWN0aW9uT2JqZWN0ID0gYWN0
aW9uc1BheWxvYWQtPmdldChpKS0+YXNPYmplY3QoKTsKKyAgICAgICAgICAgICAgICBpZiAoIWFj
dGlvbk9iamVjdCkgewogICAgICAgICAgICAgICAgICAgICBlcnJvclN0cmluZyA9ICJVbmV4cGVj
dGVkIG5vbi1vYmplY3QgaXRlbSBpbiBnaXZlbiBhY3Rpb25zIl9zOwogICAgICAgICAgICAgICAg
ICAgICByZXR1cm4geyB9OwogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIFN0
cmluZyBhY3Rpb25UeXBlU3RyaW5nOwotICAgICAgICAgICAgICAgIGlmICghYWN0aW9uT2JqZWN0
LT5nZXRTdHJpbmcoInR5cGUiX3MsIGFjdGlvblR5cGVTdHJpbmcpKSB7CisgICAgICAgICAgICAg
ICAgYXV0byBhY3Rpb25UeXBlU3RyaW5nID0gYWN0aW9uT2JqZWN0LT5nZXRTdHJpbmcoUHJvdG9j
b2w6OkRlYnVnZ2VyOjpCcmVha3BvaW50QWN0aW9uOjp0eXBlS2V5KTsKKyAgICAgICAgICAgICAg
ICBpZiAoIWFjdGlvblR5cGVTdHJpbmcpIHsKICAgICAgICAgICAgICAgICAgICAgZXJyb3JTdHJp
bmcgPSAiTWlzc2luZyB0eXBlIGZvciBpdGVtIGluIGdpdmVuIGFjdGlvbnMiX3M7CiAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiB7IH07CiAgICAgICAgICAgICAgICAgfQpAQCAtMTI1LDMzICsx
MjQsMzMgQEAgc3RhdGljIFQgcGFyc2VCcmVha3BvaW50T3B0aW9ucyhFcnJvclN0cmluZyYgZXJy
b3JTdHJpbmcsIGNvbnN0IEpTT046Ok9iamVjdCogb3AKIAogICAgICAgICAgICAgICAgIEpTQzo6
QnJlYWtwb2ludDo6QWN0aW9uIGFjdGlvbigqYWN0aW9uVHlwZSk7CiAKLSAgICAgICAgICAgICAg
ICBhY3Rpb25PYmplY3QtPmdldFN0cmluZygiZGF0YSJfcywgYWN0aW9uLmRhdGEpOworICAgICAg
ICAgICAgICAgIGFjdGlvbi5kYXRhID0gYWN0aW9uT2JqZWN0LT5nZXRTdHJpbmcoUHJvdG9jb2w6
OkRlYnVnZ2VyOjpCcmVha3BvaW50QWN0aW9uOjpkYXRhS2V5KTsKIAogICAgICAgICAgICAgICAg
IC8vIFNwZWNpZnlpbmcgYW4gaWRlbnRpZmllciBpcyBvcHRpb25hbC4gVGhleSBhcmUgdXNlZCB0
byBjb3JyZWxhdGUgcHJvYmUgc2FtcGxlcwogICAgICAgICAgICAgICAgIC8vIGluIHRoZSBmcm9u
dGVuZCBhY3Jvc3MgbXVsdGlwbGUgYmFja2VuZCBwcm9iZSBhY3Rpb25zIGFuZCBzZWdyZWdhdGUg
b2JqZWN0IGdyb3Vwcy4KLSAgICAgICAgICAgICAgICBhY3Rpb25PYmplY3QtPmdldEludGVnZXIo
ImlkIl9zLCBhY3Rpb24uaWQpOworICAgICAgICAgICAgICAgIGFjdGlvbi5pZCA9IGFjdGlvbk9i
amVjdC0+Z2V0SW50ZWdlcihQcm90b2NvbDo6RGVidWdnZXI6OkJyZWFrcG9pbnRBY3Rpb246Omlk
S2V5KS52YWx1ZU9yKEpTQzo6bm9CcmVha3BvaW50QWN0aW9uSUQpOwogCiAgICAgICAgICAgICAg
ICAgYWN0aW9ucy5hcHBlbmQoV1RGTW92ZShhY3Rpb24pKTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQogCi0gICAgICAgIG9wdGlvbnNQYXlsb2FkLT5nZXRCb29sZWFuKCJhdXRvQ29udGludWUi
X3MsIGF1dG9Db250aW51ZSk7Ci0gICAgICAgIG9wdGlvbnNQYXlsb2FkLT5nZXRJbnRlZ2VyKCJp
Z25vcmVDb3VudCJfcywgaWdub3JlQ291bnQpOworICAgICAgICBhdXRvQ29udGludWUgPSBvcHRp
b25zLT5nZXRCb29sZWFuKFByb3RvY29sOjpEZWJ1Z2dlcjo6QnJlYWtwb2ludE9wdGlvbnM6OmF1
dG9Db250aW51ZUtleSkudmFsdWVPcihmYWxzZSk7CisgICAgICAgIGlnbm9yZUNvdW50ID0gb3B0
aW9ucy0+Z2V0SW50ZWdlcihQcm90b2NvbDo6RGVidWdnZXI6OkJyZWFrcG9pbnRPcHRpb25zOjpp
Z25vcmVDb3VudEtleSkudmFsdWVPcigwKTsKICAgICB9CiAKICAgICByZXR1cm4gY2FsbGJhY2so
Y29uZGl0aW9uLCBXVEZNb3ZlKGFjdGlvbnMpLCBhdXRvQ29udGludWUsIGlnbm9yZUNvdW50KTsK
IH0KIAotT3B0aW9uYWw8SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6UHJvdG9jb2xCcmVha3BvaW50
PiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpQcm90b2NvbEJyZWFrcG9pbnQ6OmZyb21QYXlsb2Fk
KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgSlNDOjpTb3VyY2VJRCBzb3VyY2VJRCwgdW5zaWdu
ZWQgbGluZU51bWJlciwgdW5zaWduZWQgY29sdW1uTnVtYmVyLCBjb25zdCBKU09OOjpPYmplY3Qq
IG9wdGlvbnNQYXlsb2FkKQorT3B0aW9uYWw8SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6UHJvdG9j
b2xCcmVha3BvaW50PiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpQcm90b2NvbEJyZWFrcG9pbnQ6
OmZyb21QYXlsb2FkKFByb3RvY29sOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIEpTQzo6U291
cmNlSUQgc291cmNlSUQsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIHVuc2lnbmVkIGNvbHVtbk51bWJl
ciwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBvcHRpb25zKQogewotICAgIHJldHVybiBwYXJzZUJy
ZWFrcG9pbnRPcHRpb25zPE9wdGlvbmFsPFByb3RvY29sQnJlYWtwb2ludD4+KGVycm9yU3RyaW5n
LCBvcHRpb25zUGF5bG9hZCwgWyZdIChjb25zdCBTdHJpbmcmIGNvbmRpdGlvbiwgSlNDOjpCcmVh
a3BvaW50OjpBY3Rpb25zVmVjdG9yJiYgYWN0aW9ucywgYm9vbCBhdXRvQ29udGludWUsIHNpemVf
dCBpZ25vcmVDb3VudCkgLT4gT3B0aW9uYWw8UHJvdG9jb2xCcmVha3BvaW50PiB7CisgICAgcmV0
dXJuIHBhcnNlQnJlYWtwb2ludE9wdGlvbnM8T3B0aW9uYWw8UHJvdG9jb2xCcmVha3BvaW50Pj4o
ZXJyb3JTdHJpbmcsIFdURk1vdmUob3B0aW9ucyksIFsmXSAoY29uc3QgU3RyaW5nJiBjb25kaXRp
b24sIEpTQzo6QnJlYWtwb2ludDo6QWN0aW9uc1ZlY3RvciYmIGFjdGlvbnMsIGJvb2wgYXV0b0Nv
bnRpbnVlLCBzaXplX3QgaWdub3JlQ291bnQpIC0+IE9wdGlvbmFsPFByb3RvY29sQnJlYWtwb2lu
dD4gewogICAgICAgICByZXR1cm4gUHJvdG9jb2xCcmVha3BvaW50KHNvdXJjZUlELCBsaW5lTnVt
YmVyLCBjb2x1bW5OdW1iZXIsIGNvbmRpdGlvbiwgV1RGTW92ZShhY3Rpb25zKSwgYXV0b0NvbnRp
bnVlLCBpZ25vcmVDb3VudCk7CiAgICAgfSk7CiB9CiAKLU9wdGlvbmFsPEluc3BlY3RvckRlYnVn
Z2VyQWdlbnQ6OlByb3RvY29sQnJlYWtwb2ludD4gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6UHJv
dG9jb2xCcmVha3BvaW50Ojpmcm9tUGF5bG9hZChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNv
bnN0IFN0cmluZyYgdXJsLCBib29sIGlzUmVnZXgsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIHVuc2ln
bmVkIGNvbHVtbk51bWJlciwgY29uc3QgSlNPTjo6T2JqZWN0KiBvcHRpb25zUGF5bG9hZCkKK09w
dGlvbmFsPEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OlByb3RvY29sQnJlYWtwb2ludD4gSW5zcGVj
dG9yRGVidWdnZXJBZ2VudDo6UHJvdG9jb2xCcmVha3BvaW50Ojpmcm9tUGF5bG9hZChQcm90b2Nv
bDo6RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHVybCwgYm9vbCBpc1Jl
Z2V4LCB1bnNpZ25lZCBsaW5lTnVtYmVyLCB1bnNpZ25lZCBjb2x1bW5OdW1iZXIsIFJlZlB0cjxK
U09OOjpPYmplY3Q+JiYgb3B0aW9ucykKIHsKLSAgICByZXR1cm4gcGFyc2VCcmVha3BvaW50T3B0
aW9uczxPcHRpb25hbDxQcm90b2NvbEJyZWFrcG9pbnQ+PihlcnJvclN0cmluZywgb3B0aW9uc1Bh
eWxvYWQsIFsmXSAoY29uc3QgU3RyaW5nJiBjb25kaXRpb24sIEpTQzo6QnJlYWtwb2ludDo6QWN0
aW9uc1ZlY3RvciYmIGFjdGlvbnMsIGJvb2wgYXV0b0NvbnRpbnVlLCBzaXplX3QgaWdub3JlQ291
bnQpIC0+IE9wdGlvbmFsPFByb3RvY29sQnJlYWtwb2ludD4geworICAgIHJldHVybiBwYXJzZUJy
ZWFrcG9pbnRPcHRpb25zPE9wdGlvbmFsPFByb3RvY29sQnJlYWtwb2ludD4+KGVycm9yU3RyaW5n
LCBXVEZNb3ZlKG9wdGlvbnMpLCBbJl0gKGNvbnN0IFN0cmluZyYgY29uZGl0aW9uLCBKU0M6OkJy
ZWFrcG9pbnQ6OkFjdGlvbnNWZWN0b3ImJiBhY3Rpb25zLCBib29sIGF1dG9Db250aW51ZSwgc2l6
ZV90IGlnbm9yZUNvdW50KSAtPiBPcHRpb25hbDxQcm90b2NvbEJyZWFrcG9pbnQ+IHsKICAgICAg
ICAgcmV0dXJuIFByb3RvY29sQnJlYWtwb2ludCh1cmwsIGlzUmVnZXgsIGxpbmVOdW1iZXIsIGNv
bHVtbk51bWJlciwgY29uZGl0aW9uLCBXVEZNb3ZlKGFjdGlvbnMpLCBhdXRvQ29udGludWUsIGln
bm9yZUNvdW50KTsKICAgICB9KTsKIH0KQEAgLTIwNyw5ICsyMDYsOSBAQCBib29sIEluc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQ6OlByb3RvY29sQnJlYWtwb2ludDo6bWF0Y2hlc1NjcmlwdFVSTChjb25z
dCBTdHJpbmcmCiAgICAgcmV0dXJuIG1fdXJsID09IHNjcmlwdFVSTDsKIH0KIAotUmVmUHRyPEpT
Qzo6QnJlYWtwb2ludD4gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGVidWdnZXJCcmVha3BvaW50
RnJvbVBheWxvYWQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBKU09OOjpPYmplY3Qq
IG9wdGlvbnNQYXlsb2FkKQorUmVmUHRyPEpTQzo6QnJlYWtwb2ludD4gSW5zcGVjdG9yRGVidWdn
ZXJBZ2VudDo6ZGVidWdnZXJCcmVha3BvaW50RnJvbVBheWxvYWQoUHJvdG9jb2w6OkVycm9yU3Ry
aW5nJiBlcnJvclN0cmluZywgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBvcHRpb25zKQogewotICAg
IHJldHVybiBwYXJzZUJyZWFrcG9pbnRPcHRpb25zPFJlZlB0cjxKU0M6OkJyZWFrcG9pbnQ+Pihl
cnJvclN0cmluZywgb3B0aW9uc1BheWxvYWQsIFtdIChjb25zdCBTdHJpbmcmIGNvbmRpdGlvbiwg
SlNDOjpCcmVha3BvaW50OjpBY3Rpb25zVmVjdG9yJiYgYWN0aW9ucywgYm9vbCBhdXRvQ29udGlu
dWUsIHNpemVfdCBpZ25vcmVDb3VudCkgeworICAgIHJldHVybiBwYXJzZUJyZWFrcG9pbnRPcHRp
b25zPFJlZlB0cjxKU0M6OkJyZWFrcG9pbnQ+PihlcnJvclN0cmluZywgV1RGTW92ZShvcHRpb25z
KSwgW10gKGNvbnN0IFN0cmluZyYgY29uZGl0aW9uLCBKU0M6OkJyZWFrcG9pbnQ6OkFjdGlvbnNW
ZWN0b3ImJiBhY3Rpb25zLCBib29sIGF1dG9Db250aW51ZSwgc2l6ZV90IGlnbm9yZUNvdW50KSB7
CiAgICAgICAgIHJldHVybiBKU0M6OkJyZWFrcG9pbnQ6OmNyZWF0ZShKU0M6Om5vQnJlYWtwb2lu
dElELCBjb25kaXRpb24sIFdURk1vdmUoYWN0aW9ucyksIGF1dG9Db250aW51ZSwgaWdub3JlQ291
bnQpOwogICAgIH0pOwogfQpAQCAtMjM0LDEwICsyMzMsMTAgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1
Z2dlckFnZW50OjpkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoRnJvbnRlbmRSb3V0ZXIqLCBC
YWNrZW4KIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6d2lsbERlc3Ryb3lGcm9udGVuZEFu
ZEJhY2tlbmQoRGlzY29ubmVjdFJlYXNvbiByZWFzb24pCiB7CiAgICAgaWYgKGVuYWJsZWQoKSkK
LSAgICAgICAgZGlzYWJsZShyZWFzb24gPT0gRGlzY29ubmVjdFJlYXNvbjo6SW5zcGVjdGVkVGFy
Z2V0RGVzdHJveWVkKTsKKyAgICAgICAgaW50ZXJuYWxEaXNhYmxlKHJlYXNvbiA9PSBEaXNjb25u
ZWN0UmVhc29uOjpJbnNwZWN0ZWRUYXJnZXREZXN0cm95ZWQpOwogfQogCi12b2lkIEluc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQ6OmVuYWJsZSgpCit2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6Omlu
dGVybmFsRW5hYmxlKCkKIHsKICAgICBtX2VuYWJsZWQgPSB0cnVlOwogCkBAIC0yNTcsNyArMjU2
LDcgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjplbmFibGUoKQogICAgIH0KIH0KIAot
dm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkaXNhYmxlKGJvb2wgaXNCZWluZ0Rlc3Ryb3ll
ZCkKK3ZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6aW50ZXJuYWxEaXNhYmxlKGJvb2wgaXNC
ZWluZ0Rlc3Ryb3llZCkKIHsKICAgICBmb3IgKGF1dG8qIGxpc3RlbmVyIDogY29weVRvVmVjdG9y
KG1fbGlzdGVuZXJzKSkKICAgICAgICAgbGlzdGVuZXItPmRlYnVnZ2VyV2FzRGlzYWJsZWQoKTsK
QEAgLTI3NywxOSArMjc2LDIxIEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlzYWJs
ZShib29sIGlzQmVpbmdEZXN0cm95ZWQpCiAgICAgbV9lbmFibGVkID0gZmFsc2U7CiB9CiAKLXZv
aWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZW5hYmxlKEVycm9yU3RyaW5nJiBlcnJvclN0cmlu
ZykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6
OmVuYWJsZSgpCiB7Ci0gICAgaWYgKGVuYWJsZWQoKSkgewotICAgICAgICBlcnJvclN0cmluZyA9
ICJEZWJ1Z2dlciBkb21haW4gYWxyZWFkeSBlbmFibGVkIl9zOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQorICAgIGlmIChlbmFibGVkKCkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgi
RGVidWdnZXIgZG9tYWluIGFscmVhZHkgZW5hYmxlZCJfcyk7CiAKLSAgICBlbmFibGUoKTsKKyAg
ICBpbnRlcm5hbEVuYWJsZSgpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0
b3JEZWJ1Z2dlckFnZW50OjpkaXNhYmxlKEVycm9yU3RyaW5nJikKK1Byb3RvY29sOjpFcnJvclN0
cmluZ09yPHZvaWQ+IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpc2FibGUoKQogewotICAgIGRp
c2FibGUoZmFsc2UpOworICAgIGludGVybmFsRGlzYWJsZShmYWxzZSk7CisKKyAgICByZXR1cm4g
eyB9OwogfQogCiBib29sIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmJyZWFrcG9pbnRzQWN0aXZl
KCkgY29uc3QKQEAgLTI5NywyOCArMjk4LDMwIEBAIGJvb2wgSW5zcGVjdG9yRGVidWdnZXJBZ2Vu
dDo6YnJlYWtwb2ludHNBY3RpdmUoKSBjb25zdAogICAgIHJldHVybiBtX2RlYnVnZ2VyLmJyZWFr
cG9pbnRzQWN0aXZlKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0QXN5
bmNTdGFja1RyYWNlRGVwdGgoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgZGVwdGgpCitQ
cm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZXRB
c3luY1N0YWNrVHJhY2VEZXB0aChpbnQgZGVwdGgpCiB7CiAgICAgaWYgKG1fYXN5bmNTdGFja1Ry
YWNlRGVwdGggPT0gZGVwdGgpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHsgfTsK
IAotICAgIGlmIChkZXB0aCA8IDApIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiVW5leHBlY3Rl
ZCBuZWdhdGl2ZSBkZXB0aCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoZGVw
dGggPCAwKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIlVuZXhwZWN0ZWQgbmVnYXRp
dmUgZGVwdGgiX3MpOwogCiAgICAgbV9hc3luY1N0YWNrVHJhY2VEZXB0aCA9IGRlcHRoOwogCiAg
ICAgaWYgKCFtX2FzeW5jU3RhY2tUcmFjZURlcHRoKQogICAgICAgICBjbGVhckFzeW5jU3RhY2tU
cmFjZURhdGEoKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdn
ZXJBZ2VudDo6c2V0QnJlYWtwb2ludHNBY3RpdmUoRXJyb3JTdHJpbmcmLCBib29sIGFjdGl2ZSkK
K1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNl
dEJyZWFrcG9pbnRzQWN0aXZlKGJvb2wgYWN0aXZlKQogewogICAgIGlmIChhY3RpdmUpCiAgICAg
ICAgIG1fZGVidWdnZXIuYWN0aXZhdGVCcmVha3BvaW50cygpOwogICAgIGVsc2UKICAgICAgICAg
bV9kZWJ1Z2dlci5kZWFjdGl2YXRlQnJlYWtwb2ludHMoKTsKKworICAgIHJldHVybiB7IH07CiB9
CiAKIGJvb2wgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6aXNQYXVzZWQoKSBjb25zdApAQCAtMzQy
LDIwICszNDUsMjAgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojp1cGRhdGVQYXVzZVJl
YXNvbkFuZERhdGEoRGVidWdnZXJGcm9udGVuZERpc3BhdGNoZXIKICAgICBtX3BhdXNlRGF0YSA9
IFdURk1vdmUoZGF0YSk7CiB9CiAKLXN0YXRpYyBSZWZQdHI8SlNPTjo6T2JqZWN0PiBidWlsZEFz
c2VydFBhdXNlUmVhc29uKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3N0YXRpYyBSZWY8SlNPTjo6
T2JqZWN0PiBidWlsZEFzc2VydFBhdXNlUmVhc29uKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKIHsK
ICAgICBhdXRvIHJlYXNvbiA9IFByb3RvY29sOjpEZWJ1Z2dlcjo6QXNzZXJ0UGF1c2VSZWFzb246
OmNyZWF0ZSgpLnJlbGVhc2UoKTsKICAgICBpZiAoIW1lc3NhZ2UuaXNOdWxsKCkpCiAgICAgICAg
IHJlYXNvbi0+c2V0TWVzc2FnZShtZXNzYWdlKTsKLSAgICByZXR1cm4gcmVhc29uLT5vcGVuQWNj
ZXNzb3JzKCk7CisgICAgcmV0dXJuICpyZWFzb24tPmFzT2JqZWN0KCk7CiB9CiAKLXN0YXRpYyBS
ZWZQdHI8SlNPTjo6T2JqZWN0PiBidWlsZENTUFZpb2xhdGlvblBhdXNlUmVhc29uKGNvbnN0IFN0
cmluZyYgZGlyZWN0aXZlVGV4dCkKK3N0YXRpYyBSZWY8SlNPTjo6T2JqZWN0PiBidWlsZENTUFZp
b2xhdGlvblBhdXNlUmVhc29uKGNvbnN0IFN0cmluZyYgZGlyZWN0aXZlVGV4dCkKIHsKICAgICBh
dXRvIHJlYXNvbiA9IFByb3RvY29sOjpEZWJ1Z2dlcjo6Q1NQVmlvbGF0aW9uUGF1c2VSZWFzb246
OmNyZWF0ZSgpCiAgICAgICAgIC5zZXREaXJlY3RpdmUoZGlyZWN0aXZlVGV4dCkKICAgICAgICAg
LnJlbGVhc2UoKTsKLSAgICByZXR1cm4gcmVhc29uLT5vcGVuQWNjZXNzb3JzKCk7CisgICAgcmV0
dXJuICpyZWFzb24tPmFzT2JqZWN0KCk7CiB9CiAKIFJlZlB0cjxKU09OOjpPYmplY3Q+IEluc3Bl
Y3RvckRlYnVnZ2VyQWdlbnQ6OmJ1aWxkQnJlYWtwb2ludFBhdXNlUmVhc29uKEpTQzo6QnJlYWtw
b2ludElEIGRlYnVnZ2VyQnJlYWtwb2ludElEKQpAQCAtMzY4LDcgKzM3MSw3IEBAIFJlZlB0cjxK
U09OOjpPYmplY3Q+IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmJ1aWxkQnJlYWtwb2ludFBhdXNl
UmVhc29uKEpTQzo6QnJlCiAgICAgICAgICAgICAgICAgYXV0byByZWFzb24gPSBQcm90b2NvbDo6
RGVidWdnZXI6OkJyZWFrcG9pbnRQYXVzZVJlYXNvbjo6Y3JlYXRlKCkKICAgICAgICAgICAgICAg
ICAgICAgLnNldEJyZWFrcG9pbnRJZChwcm90b2NvbEJyZWFrcG9pbnRJRCkKICAgICAgICAgICAg
ICAgICAgICAgLnJlbGVhc2UoKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gcmVhc29uLT5vcGVu
QWNjZXNzb3JzKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlYXNvbi0+YXNPYmplY3QoKTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTM4Niw3ICszODksMTEgQEAgUmVm
UHRyPEpTT046Ok9iamVjdD4gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6YnVpbGRFeGNlcHRpb25Q
YXVzZVJlYXNvbihKU0M6OkpTVmEKICAgICBpZiAoaW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgp
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiBpbmplY3RlZFNjcmlwdC53
cmFwT2JqZWN0KGV4Y2VwdGlvbiwgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6YmFja3RyYWNlT2Jq
ZWN0R3JvdXApLT5vcGVuQWNjZXNzb3JzKCk7CisgICAgYXV0byBleGNlcHRpb25WYWx1ZSA9IGlu
amVjdGVkU2NyaXB0LndyYXBPYmplY3QoZXhjZXB0aW9uLCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50
OjpiYWNrdHJhY2VPYmplY3RHcm91cCk7CisgICAgaWYgKCFleGNlcHRpb25WYWx1ZSkKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gZXhjZXB0aW9uVmFsdWUtPmFzT2JqZWN0
KCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6aGFuZGxlQ29uc29sZUFzc2Vy
dChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCkBAIC00OTIsNyArNDk5LDcgQEAgdm9pZCBJbnNwZWN0
b3JEZWJ1Z2dlckFnZW50OjpkaWREaXNwYXRjaEFzeW5jQ2FsbCgpCiAgICAgICAgIG1fcGVuZGlu
Z0FzeW5jQ2FsbHMucmVtb3ZlKGlkZW50aWZpZXIpOwogfQogCi1zdGF0aWMgUmVmUHRyPFByb3Rv
Y29sOjpEZWJ1Z2dlcjo6TG9jYXRpb24+IGJ1aWxkRGVidWdnZXJMb2NhdGlvbihjb25zdCBKU0M6
OkJyZWFrcG9pbnQmIGRlYnVnZ2VyQnJlYWtwb2ludCkKK3N0YXRpYyBSZWY8UHJvdG9jb2w6OkRl
YnVnZ2VyOjpMb2NhdGlvbj4gYnVpbGREZWJ1Z2dlckxvY2F0aW9uKGNvbnN0IEpTQzo6QnJlYWtw
b2ludCYgZGVidWdnZXJCcmVha3BvaW50KQogewogICAgIEFTU0VSVChkZWJ1Z2dlckJyZWFrcG9p
bnQuaXNSZXNvbHZlZCgpKTsKIApAQCAtNTAxLDUwICs1MDgsNDkgQEAgc3RhdGljIFJlZlB0cjxQ
cm90b2NvbDo6RGVidWdnZXI6OkxvY2F0aW9uPiBidWlsZERlYnVnZ2VyTG9jYXRpb24oY29uc3Qg
SlNDOjpCcmUKICAgICAgICAgLnNldExpbmVOdW1iZXIoZGVidWdnZXJCcmVha3BvaW50LmxpbmVO
dW1iZXIoKSkKICAgICAgICAgLnJlbGVhc2UoKTsKICAgICBsb2NhdGlvbi0+c2V0Q29sdW1uTnVt
YmVyKGRlYnVnZ2VyQnJlYWtwb2ludC5jb2x1bW5OdW1iZXIoKSk7Ci0KICAgICByZXR1cm4gbG9j
YXRpb247CiB9CiAKLXN0YXRpYyBib29sIHBhcnNlTG9jYXRpb24oRXJyb3JTdHJpbmcmIGVycm9y
U3RyaW5nLCBjb25zdCBKU09OOjpPYmplY3QmIGxvY2F0aW9uLCBKU0M6OlNvdXJjZUlEJiBzb3Vy
Y2VJRCwgdW5zaWduZWQmIGxpbmVOdW1iZXIsIHVuc2lnbmVkJiBjb2x1bW5OdW1iZXIpCitzdGF0
aWMgYm9vbCBwYXJzZUxvY2F0aW9uKFByb3RvY29sOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcs
IGNvbnN0IEpTT046Ok9iamVjdCYgbG9jYXRpb24sIEpTQzo6U291cmNlSUQmIHNvdXJjZUlELCB1
bnNpZ25lZCYgbGluZU51bWJlciwgdW5zaWduZWQmIGNvbHVtbk51bWJlcikKIHsKLSAgICBpZiAo
IWxvY2F0aW9uLmdldEludGVnZXIoImxpbmVOdW1iZXIiX3MsIGxpbmVOdW1iZXIpKSB7CisgICAg
YXV0byBsaW5lTnVtYmVyVmFsdWUgPSBsb2NhdGlvbi5nZXRJbnRlZ2VyKFByb3RvY29sOjpEZWJ1
Z2dlcjo6TG9jYXRpb246OmxpbmVOdW1iZXJLZXkpOworICAgIGlmICghbGluZU51bWJlclZhbHVl
KSB7CiAgICAgICAgIGVycm9yU3RyaW5nID0gIlVuZXhwZWN0ZWQgbm9uLWludGVnZXIgbGluZU51
bWJlciBpbiBnaXZlbiBsb2NhdGlvbiJfczsKICAgICAgICAgc291cmNlSUQgPSBKU0M6Om5vU291
cmNlSUQ7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBTdHJpbmcgc2NyaXB0
SURTdHI7Ci0gICAgaWYgKCFsb2NhdGlvbi5nZXRTdHJpbmcoInNjcmlwdElkIl9zLCBzY3JpcHRJ
RFN0cikpIHsKKyAgICBsaW5lTnVtYmVyID0gKmxpbmVOdW1iZXJWYWx1ZTsKKworICAgIGF1dG8g
c2NyaXB0SURTdHIgPSBsb2NhdGlvbi5nZXRTdHJpbmcoUHJvdG9jb2w6OkRlYnVnZ2VyOjpMb2Nh
dGlvbjo6c2NyaXB0SWRLZXkpOworICAgIGlmICghc2NyaXB0SURTdHIpIHsKICAgICAgICAgc291
cmNlSUQgPSBKU0M6Om5vU291cmNlSUQ7CiAgICAgICAgIGVycm9yU3RyaW5nID0gIlVuZXhlcGN0
ZWQgbm9uLXN0cmluZyBzY3JpcHRJZCBpbiBnaXZlbiBsb2NhdGlvbiJfczsKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIH0KIAogICAgIHNvdXJjZUlEID0gc2NyaXB0SURTdHIudG9JbnRQdHIo
KTsKLSAgICBjb2x1bW5OdW1iZXIgPSAwOwotICAgIGxvY2F0aW9uLmdldEludGVnZXIoImNvbHVt
bk51bWJlciJfcywgY29sdW1uTnVtYmVyKTsKKyAgICBjb2x1bW5OdW1iZXIgPSBsb2NhdGlvbi5n
ZXRJbnRlZ2VyKFByb3RvY29sOjpEZWJ1Z2dlcjo6TG9jYXRpb246OmNvbHVtbk51bWJlcktleSku
dmFsdWVPcigwKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dl
ckFnZW50OjpzZXRCcmVha3BvaW50QnlVcmwoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQg
bGluZU51bWJlciwgY29uc3QgU3RyaW5nKiBvcHRpb25hbFVSTCwgY29uc3QgU3RyaW5nKiBvcHRp
b25hbFVSTFJlZ2V4LCBjb25zdCBpbnQqIG9wdGlvbmFsQ29sdW1uTnVtYmVyLCBjb25zdCBKU09O
OjpPYmplY3QqIG9wdGlvbnNQYXlsb2FkLCBQcm90b2NvbDo6RGVidWdnZXI6OkJyZWFrcG9pbnRJ
ZCogb3V0QnJlYWtwb2ludElkLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6RGVidWdn
ZXI6OkxvY2F0aW9uPj4mIG91dExvY2F0aW9ucykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHN0
ZDo6dHVwbGU8UHJvdG9jb2w6OkRlYnVnZ2VyOjpCcmVha3BvaW50SWQsIFJlZjxKU09OOjpBcnJh
eU9mPFByb3RvY29sOjpEZWJ1Z2dlcjo6TG9jYXRpb24+Pj4+IEluc3BlY3RvckRlYnVnZ2VyQWdl
bnQ6OnNldEJyZWFrcG9pbnRCeVVybChpbnQgbGluZU51bWJlciwgY29uc3QgU3RyaW5nJiB1cmws
IGNvbnN0IFN0cmluZyYgdXJsUmVnZXgsIE9wdGlvbmFsPGludD4mJiBjb2x1bW5OdW1iZXIsIFJl
ZlB0cjxKU09OOjpPYmplY3Q+JiYgb3B0aW9ucykKIHsKLSAgICBpZiAoIW9wdGlvbmFsVVJMID09
ICFvcHRpb25hbFVSTFJlZ2V4KSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIkVpdGhlciB1cmwg
b3IgdXJsUmVnZXggbXVzdCBiZSBzcGVjaWZpZWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
CisgICAgaWYgKCF1cmwgPT0gIXVybFJlZ2V4KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0
ZWQoIkVpdGhlciB1cmwgb3IgdXJsUmVnZXggbXVzdCBiZSBzcGVjaWZpZWQiX3MpOwogCi0gICAg
YXV0byBwcm90b2NvbEJyZWFrcG9pbnQgPSBQcm90b2NvbEJyZWFrcG9pbnQ6OmZyb21QYXlsb2Fk
KGVycm9yU3RyaW5nLCBvcHRpb25hbFVSTCA/ICpvcHRpb25hbFVSTCA6ICpvcHRpb25hbFVSTFJl
Z2V4LCAhIW9wdGlvbmFsVVJMUmVnZXgsIGxpbmVOdW1iZXIsIG9wdGlvbmFsQ29sdW1uTnVtYmVy
ID8gKm9wdGlvbmFsQ29sdW1uTnVtYmVyIDogMCwgb3B0aW9uc1BheWxvYWQpOworICAgIFByb3Rv
Y29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKworICAgIGF1dG8gcHJvdG9jb2xCcmVha3Bv
aW50ID0gUHJvdG9jb2xCcmVha3BvaW50Ojpmcm9tUGF5bG9hZChlcnJvclN0cmluZywgISF1cmwg
PyB1cmwgOiB1cmxSZWdleCwgISF1cmxSZWdleCwgbGluZU51bWJlciwgY29sdW1uTnVtYmVyLnZh
bHVlT3IoMCksIFdURk1vdmUob3B0aW9ucykpOwogICAgIGlmICghcHJvdG9jb2xCcmVha3BvaW50
KQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0
cmluZyk7CiAKLSAgICBpZiAobV9wcm90b2NvbEJyZWFrcG9pbnRGb3JQcm90b2NvbEJyZWFrcG9p
bnRJRC5jb250YWlucyhwcm90b2NvbEJyZWFrcG9pbnQtPmlkKCkpKSB7Ci0gICAgICAgIGVycm9y
U3RyaW5nID0gIkJyZWFrcG9pbnQgZm9yIGdpdmVuIGxvY2F0aW9uIGFscmVhZHkgZXhpc3RzLiJf
czsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAobV9wcm90b2NvbEJyZWFrcG9pbnRG
b3JQcm90b2NvbEJyZWFrcG9pbnRJRC5jb250YWlucyhwcm90b2NvbEJyZWFrcG9pbnQtPmlkKCkp
KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkJyZWFrcG9pbnQgZm9yIGdpdmVuIGxv
Y2F0aW9uIGFscmVhZHkgZXhpc3RzLiJfcyk7CiAKICAgICBtX3Byb3RvY29sQnJlYWtwb2ludEZv
clByb3RvY29sQnJlYWtwb2ludElELnNldChwcm90b2NvbEJyZWFrcG9pbnQtPmlkKCksICpwcm90
b2NvbEJyZWFrcG9pbnQpOwogCi0gICAgb3V0TG9jYXRpb25zID0gSlNPTjo6QXJyYXlPZjxQcm90
b2NvbDo6RGVidWdnZXI6OkxvY2F0aW9uPjo6Y3JlYXRlKCk7CisgICAgYXV0byBsb2NhdGlvbnMg
PSBKU09OOjpBcnJheU9mPFByb3RvY29sOjpEZWJ1Z2dlcjo6TG9jYXRpb24+OjpjcmVhdGUoKTsK
IAogICAgIGZvciAoYXV0byYgW3NvdXJjZUlELCBzY3JpcHRdIDogbV9zY3JpcHRzKSB7CiAgICAg
ICAgIFN0cmluZyBzY3JpcHRVUkxGb3JCcmVha3BvaW50cyA9ICFzY3JpcHQuc291cmNlVVJMLmlz
RW1wdHkoKSA/IHNjcmlwdC5zb3VyY2VVUkwgOiBzY3JpcHQudXJsOwpAQCAtNTYxLDI5ICs1Njcs
MjkgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZXRCcmVha3BvaW50QnlVcmwoRXJy
b3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgbGkKIAogICAgICAgICBkaWRTZXRCcmVha3BvaW50
KCpwcm90b2NvbEJyZWFrcG9pbnQsIGRlYnVnZ2VyQnJlYWtwb2ludCk7CiAKLSAgICAgICAgb3V0
TG9jYXRpb25zLT5hZGRJdGVtKGJ1aWxkRGVidWdnZXJMb2NhdGlvbihkZWJ1Z2dlckJyZWFrcG9p
bnQpKTsKKyAgICAgICAgbG9jYXRpb25zLT5hZGRJdGVtKGJ1aWxkRGVidWdnZXJMb2NhdGlvbihk
ZWJ1Z2dlckJyZWFrcG9pbnQpKTsKICAgICB9CiAKLSAgICAqb3V0QnJlYWtwb2ludElkID0gcHJv
dG9jb2xCcmVha3BvaW50LT5pZCgpOworICAgIHJldHVybiB7IHsgcHJvdG9jb2xCcmVha3BvaW50
LT5pZCgpLCBXVEZNb3ZlKGxvY2F0aW9ucykgfSB9OwogfQogCi12b2lkIEluc3BlY3RvckRlYnVn
Z2VyQWdlbnQ6OnNldEJyZWFrcG9pbnQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBK
U09OOjpPYmplY3QmIGxvY2F0aW9uLCBjb25zdCBKU09OOjpPYmplY3QqIG9wdGlvbnNQYXlsb2Fk
LCBQcm90b2NvbDo6RGVidWdnZXI6OkJyZWFrcG9pbnRJZCogb3V0QnJlYWtwb2ludElkLCBSZWZQ
dHI8UHJvdG9jb2w6OkRlYnVnZ2VyOjpMb2NhdGlvbj4mIG91dEFjdHVhbExvY2F0aW9uKQorUHJv
dG9jb2w6OkVycm9yU3RyaW5nT3I8c3RkOjp0dXBsZTxQcm90b2NvbDo6RGVidWdnZXI6OkJyZWFr
cG9pbnRJZCwgUmVmPFByb3RvY29sOjpEZWJ1Z2dlcjo6TG9jYXRpb24+Pj4gSW5zcGVjdG9yRGVi
dWdnZXJBZ2VudDo6c2V0QnJlYWtwb2ludChSZWY8SlNPTjo6T2JqZWN0PiYmIGxvY2F0aW9uLCBS
ZWZQdHI8SlNPTjo6T2JqZWN0PiYmIG9wdGlvbnMpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3Ry
aW5nIGVycm9yU3RyaW5nOworCiAgICAgSlNDOjpTb3VyY2VJRCBzb3VyY2VJRDsKICAgICB1bnNp
Z25lZCBsaW5lTnVtYmVyOwogICAgIHVuc2lnbmVkIGNvbHVtbk51bWJlcjsKICAgICBpZiAoIXBh
cnNlTG9jYXRpb24oZXJyb3JTdHJpbmcsIGxvY2F0aW9uLCBzb3VyY2VJRCwgbGluZU51bWJlciwg
Y29sdW1uTnVtYmVyKSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoZXJyb3JTdHJpbmcpOwogCiAgICAgYXV0byBzY3JpcHRJdGVyYXRvciA9IG1fc2NyaXB0
cy5maW5kKHNvdXJjZUlEKTsKLSAgICBpZiAoc2NyaXB0SXRlcmF0b3IgPT0gbV9zY3JpcHRzLmVu
ZCgpKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIk1pc3Npbmcgc2NyaXB0IGZvciBzY3JpcHRJ
ZCBpbiBnaXZlbiBsb2NhdGlvbiJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAo
c2NyaXB0SXRlcmF0b3IgPT0gbV9zY3JpcHRzLmVuZCgpKQorICAgICAgICByZXR1cm4gbWFrZVVu
ZXhwZWN0ZWQoIk1pc3Npbmcgc2NyaXB0IGZvciBzY3JpcHRJZCBpbiBnaXZlbiBsb2NhdGlvbiJf
cyk7CiAKLSAgICBhdXRvIHByb3RvY29sQnJlYWtwb2ludCA9IFByb3RvY29sQnJlYWtwb2ludDo6
ZnJvbVBheWxvYWQoZXJyb3JTdHJpbmcsIHNvdXJjZUlELCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1i
ZXIsIG9wdGlvbnNQYXlsb2FkKTsKKyAgICBhdXRvIHByb3RvY29sQnJlYWtwb2ludCA9IFByb3Rv
Y29sQnJlYWtwb2ludDo6ZnJvbVBheWxvYWQoZXJyb3JTdHJpbmcsIHNvdXJjZUlELCBsaW5lTnVt
YmVyLCBjb2x1bW5OdW1iZXIsIFdURk1vdmUob3B0aW9ucykpOwogICAgIGlmICghcHJvdG9jb2xC
cmVha3BvaW50KQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3Rl
ZChlcnJvclN0cmluZyk7CiAKICAgICAvLyBEb24ndCBzYXZlIGBwcm90b2NvbEJyZWFrcG9pbnRg
IGluIGBtX3Byb3RvY29sQnJlYWtwb2ludEZvclByb3RvY29sQnJlYWtwb2ludElEYCBiZWNhdXNl
IGl0CiAgICAgLy8gd2FzIHNldCBzcGVjaWZpY2FsbHkgZm9yIHRoZSBnaXZlbiBgc291cmNlSURg
LCB3aGljaCBpcyB1bmlxdWUsIG1lYW5pbmcgdGhhdCBpdCB3aWxsIG5ldmVyCkBAIC01OTEsMjAg
KzU5NywxNSBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldEJyZWFrcG9pbnQoRXJy
b3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBKU09OOgogCiAgICAgYXV0byBkZWJ1Z2dlckJy
ZWFrcG9pbnQgPSBwcm90b2NvbEJyZWFrcG9pbnQtPmNyZWF0ZURlYnVnZ2VyQnJlYWtwb2ludCht
X25leHREZWJ1Z2dlckJyZWFrcG9pbnRJRCsrLCBzb3VyY2VJRCk7CiAKLSAgICBpZiAoIXJlc29s
dmVCcmVha3BvaW50KHNjcmlwdEl0ZXJhdG9yLT52YWx1ZSwgZGVidWdnZXJCcmVha3BvaW50KSkg
ewotICAgICAgICBlcnJvclN0cmluZyA9ICJDb3VsZCBub3QgcmVzb2x2ZSBicmVha3BvaW50Il9z
OwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghcmVzb2x2ZUJyZWFrcG9pbnQoc2Ny
aXB0SXRlcmF0b3ItPnZhbHVlLCBkZWJ1Z2dlckJyZWFrcG9pbnQpKQorICAgICAgICByZXR1cm4g
bWFrZVVuZXhwZWN0ZWQoIkNvdWxkIG5vdCByZXNvbHZlIGJyZWFrcG9pbnQiX3MpOwogCi0gICAg
aWYgKCFzZXRCcmVha3BvaW50KGRlYnVnZ2VyQnJlYWtwb2ludCkpIHsKLSAgICAgICAgZXJyb3JT
dHJpbmcgPSAiQnJlYWtwb2ludCBmb3IgZ2l2ZW4gbG9jYXRpb24gYWxyZWFkeSBleGlzdHMiX3M7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKCFzZXRCcmVha3BvaW50KGRlYnVnZ2Vy
QnJlYWtwb2ludCkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiQnJlYWtwb2ludCBm
b3IgZ2l2ZW4gbG9jYXRpb24gYWxyZWFkeSBleGlzdHMiX3MpOwogCiAgICAgZGlkU2V0QnJlYWtw
b2ludCgqcHJvdG9jb2xCcmVha3BvaW50LCBkZWJ1Z2dlckJyZWFrcG9pbnQpOwogCi0gICAgb3V0
QWN0dWFsTG9jYXRpb24gPSBidWlsZERlYnVnZ2VyTG9jYXRpb24oZGVidWdnZXJCcmVha3BvaW50
KTsKLSAgICAqb3V0QnJlYWtwb2ludElkID0gcHJvdG9jb2xCcmVha3BvaW50LT5pZCgpOworICAg
IHJldHVybiB7IHsgcHJvdG9jb2xCcmVha3BvaW50LT5pZCgpLCBidWlsZERlYnVnZ2VyTG9jYXRp
b24oZGVidWdnZXJCcmVha3BvaW50KSB9IH07CiB9CiAKIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJB
Z2VudDo6ZGlkU2V0QnJlYWtwb2ludChQcm90b2NvbEJyZWFrcG9pbnQmIHByb3RvY29sQnJlYWtw
b2ludCwgSlNDOjpCcmVha3BvaW50JiBkZWJ1Z2dlckJyZWFrcG9pbnQpCkBAIC02MzAsNyArNjMx
LDcgQEAgYm9vbCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZXRCcmVha3BvaW50KEpTQzo6QnJl
YWtwb2ludCYgZGVidWdnZXJCcmVha3BvaW50KQogICAgIHJldHVybiBtX2RlYnVnZ2VyLnNldEJy
ZWFrcG9pbnQoZGVidWdnZXJCcmVha3BvaW50KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dl
ckFnZW50OjpyZW1vdmVCcmVha3BvaW50KEVycm9yU3RyaW5nJiwgY29uc3QgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6RGVidWdnZXI6OkJyZWFrcG9pbnRJZCYgcHJvdG9jb2xCcmVha3BvaW50SUQpCitQ
cm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpyZW1v
dmVCcmVha3BvaW50KGNvbnN0IFByb3RvY29sOjpEZWJ1Z2dlcjo6QnJlYWtwb2ludElkJiBwcm90
b2NvbEJyZWFrcG9pbnRJRCkKIHsKICAgICBtX3Byb3RvY29sQnJlYWtwb2ludEZvclByb3RvY29s
QnJlYWtwb2ludElELnJlbW92ZShwcm90b2NvbEJyZWFrcG9pbnRJRCk7CiAKQEAgLTY0MSwyNCAr
NjQyLDM0IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6cmVtb3ZlQnJlYWtwb2ludChF
cnJvclN0cmluZyYsIGNvbnN0IEluc3BlY3Rvcjo6UHJvCiAgICAgICAgIEpTQzo6SlNMb2NrSG9s
ZGVyIGxvY2tlcihtX2RlYnVnZ2VyLnZtKCkpOwogICAgICAgICBtX2RlYnVnZ2VyLnJlbW92ZUJy
ZWFrcG9pbnQoZGVidWdnZXJCcmVha3BvaW50KTsKICAgICB9CisKKyAgICByZXR1cm4geyB9Owog
fQogCi12b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmNvbnRpbnVlVW50aWxOZXh0UnVuTG9v
cChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lk
PiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojpjb250aW51ZVVudGlsTmV4dFJ1bkxvb3AoKQogewot
ICAgIGlmICghYXNzZXJ0UGF1c2VkKGVycm9yU3RyaW5nKSkKLSAgICAgICAgcmV0dXJuOworICAg
IFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKIAotICAgIHJlc3VtZShlcnJvclN0
cmluZyk7CisgICAgaWYgKCFhc3NlcnRQYXVzZWQoZXJyb3JTdHJpbmcpKQorICAgICAgICByZXR1
cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOworCisgICAgYXV0byByZXN1bWVSZXN1bHQg
PSByZXN1bWUoKTsKKyAgICBpZiAoIXJlc3VtZVJlc3VsdCkKKyAgICAgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKHJlc3VtZVJlc3VsdC5lcnJvcigpKTsKIAogICAgIG1fZW5hYmxlUGF1c2VXaGVu
SWRsZSA9IHRydWU7CiAKICAgICByZWdpc3RlcklkbGVIYW5kbGVyKCk7CisKKyAgICByZXR1cm4g
eyB9OwogfQogCi12b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmNvbnRpbnVlVG9Mb2NhdGlv
bihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IEpTT046Ok9iamVjdCYgbG9jYXRpb24p
CitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojpj
b250aW51ZVRvTG9jYXRpb24oUmVmPEpTT046Ok9iamVjdD4mJiBsb2NhdGlvbikKIHsKKyAgICBQ
cm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBpZiAoIWFzc2VydFBhdXNl
ZChlcnJvclN0cmluZykpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4
cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgIGlmIChtX2NvbnRpbnVlVG9Mb2NhdGlvbkRlYnVn
Z2VyQnJlYWtwb2ludCkgewogICAgICAgICBtX2RlYnVnZ2VyLnJlbW92ZUJyZWFrcG9pbnQoKm1f
Y29udGludWVUb0xvY2F0aW9uRGVidWdnZXJCcmVha3BvaW50KTsKQEAgLTY2OSwxOSArNjgwLDE4
IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6Y29udGludWVUb0xvY2F0aW9uKEVycm9y
U3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QKICAgICB1bnNpZ25lZCBsaW5lTnVtYmVyOwogICAg
IHVuc2lnbmVkIGNvbHVtbk51bWJlcjsKICAgICBpZiAoIXBhcnNlTG9jYXRpb24oZXJyb3JTdHJp
bmcsIGxvY2F0aW9uLCBzb3VyY2VJRCwgbGluZU51bWJlciwgY29sdW1uTnVtYmVyKSkKLSAgICAg
ICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwog
CiAgICAgYXV0byBzY3JpcHRJdGVyYXRvciA9IG1fc2NyaXB0cy5maW5kKHNvdXJjZUlEKTsKICAg
ICBpZiAoc2NyaXB0SXRlcmF0b3IgPT0gbV9zY3JpcHRzLmVuZCgpKSB7CiAgICAgICAgIG1fZGVi
dWdnZXIuY29udGludWVQcm9ncmFtKCk7CiAgICAgICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5y
ZXN1bWVkKCk7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIk1pc3Npbmcgc2NyaXB0IGZvciBzY3Jp
cHRJZCBpbiBnaXZlbiBsb2NhdGlvbiJfczsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1
cm4gbWFrZVVuZXhwZWN0ZWQoIk1pc3Npbmcgc2NyaXB0IGZvciBzY3JpcHRJZCBpbiBnaXZlbiBs
b2NhdGlvbiJfcyk7CiAgICAgfQogCiAgICAgYXV0byBwcm90b2NvbEJyZWFrcG9pbnQgPSBQcm90
b2NvbEJyZWFrcG9pbnQ6OmZyb21QYXlsb2FkKGVycm9yU3RyaW5nLCBzb3VyY2VJRCwgbGluZU51
bWJlciwgY29sdW1uTnVtYmVyKTsKICAgICBpZiAoIXByb3RvY29sQnJlYWtwb2ludCkKLSAgICAg
ICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwog
CiAgICAgLy8gRG9uJ3Qgc2F2ZSBgcHJvdG9jb2xCcmVha3BvaW50YCBpbiBgbV9wcm90b2NvbEJy
ZWFrcG9pbnRGb3JQcm90b2NvbEJyZWFrcG9pbnRJRGAgYmVjYXVzZSBpdAogICAgIC8vIGlzIGEg
dGVtcG9yYXJ5IGJyZWFrcG9pbnQgdGhhdCB3aWxsIGJlIHJlbW92ZWQgYXMgc29vbiBhcyBgbG9j
YXRpb25gIGlzIHJlYWNoZWQuCkBAIC02OTEsOCArNzAxLDcgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1
Z2dlckFnZW50Ojpjb250aW51ZVRvTG9jYXRpb24oRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBj
b25zdAogICAgIGlmICghcmVzb2x2ZUJyZWFrcG9pbnQoc2NyaXB0SXRlcmF0b3ItPnZhbHVlLCBk
ZWJ1Z2dlckJyZWFrcG9pbnQpKSB7CiAgICAgICAgIG1fZGVidWdnZXIuY29udGludWVQcm9ncmFt
KCk7CiAgICAgICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5yZXN1bWVkKCk7Ci0gICAgICAgIGVy
cm9yU3RyaW5nID0gIkNvdWxkIG5vdCByZXNvbHZlIGJyZWFrcG9pbnQiX3M7Ci0gICAgICAgIHJl
dHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJDb3VsZCBub3QgcmVzb2x2ZSBi
cmVha3BvaW50Il9zKTsKICAgICB9CiAKICAgICBpZiAoIXNldEJyZWFrcG9pbnQoZGVidWdnZXJC
cmVha3BvaW50KSkgewpAQCAtNzAxLDcgKzcxMCw3IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJB
Z2VudDo6Y29udGludWVUb0xvY2F0aW9uKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QK
ICAgICAgICAgLy8gaGl0IHRoaXMgbmV3IGJyZWFrcG9pbnQgb3Igbm90LgogICAgICAgICBtX2Rl
YnVnZ2VyLmNvbnRpbnVlUHJvZ3JhbSgpOwogICAgICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+
cmVzdW1lZCgpOwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB7IH07CiAgICAgfQog
CiAgICAgbV9jb250aW51ZVRvTG9jYXRpb25EZWJ1Z2dlckJyZWFrcG9pbnQgPSBXVEZNb3ZlKGRl
YnVnZ2VyQnJlYWtwb2ludCk7CkBAIC03MTAsNDEgKzcxOSw0MiBAQCB2b2lkIEluc3BlY3RvckRl
YnVnZ2VyQWdlbnQ6OmNvbnRpbnVlVG9Mb2NhdGlvbihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcs
IGNvbnN0CiAgICAgLy8gU28gZG9uJ3QgaXNzdWUgYSByZXN1bWVkIGV2ZW50IHVubGVzcyB3ZSBl
eGl0IHRoZSBWTSB3aXRob3V0IHBhdXNpbmcuCiAgICAgd2lsbFN0ZXBBbmRNYXlCZWNvbWVJZGxl
KCk7CiAgICAgbV9kZWJ1Z2dlci5jb250aW51ZVByb2dyYW0oKTsKKworICAgIHJldHVybiB7IH07
CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2VhcmNoSW5Db250ZW50KEVycm9y
U3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBzY3JpcHRJRFN0ciwgY29uc3QgU3Ry
aW5nJiBxdWVyeSwgY29uc3QgYm9vbCogb3B0aW9uYWxDYXNlU2Vuc2l0aXZlLCBjb25zdCBib29s
KiBvcHRpb25hbElzUmVnZXgsIFJlZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpHZW5lcmlj
VHlwZXM6OlNlYXJjaE1hdGNoPj4mIHJlc3VsdHMpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxS
ZWY8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6R2VuZXJpY1R5cGVzOjpTZWFyY2hNYXRjaD4+PiBJ
bnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZWFyY2hJbkNvbnRlbnQoY29uc3QgUHJvdG9jb2w6OkRl
YnVnZ2VyOjpTY3JpcHRJZCYgc2NyaXB0SWQsIGNvbnN0IFN0cmluZyYgcXVlcnksIE9wdGlvbmFs
PGJvb2w+JiYgY2FzZVNlbnNpdGl2ZSwgT3B0aW9uYWw8Ym9vbD4mJiBpc1JlZ2V4KQogewotICAg
IEpTQzo6U291cmNlSUQgc291cmNlSUQgPSBzY3JpcHRJRFN0ci50b0ludFB0cigpOwotICAgIGF1
dG8gaXQgPSBtX3NjcmlwdHMuZmluZChzb3VyY2VJRCk7Ci0gICAgaWYgKGl0ID09IG1fc2NyaXB0
cy5lbmQoKSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIHNjcmlwdCBmb3IgZ2l2
ZW4gc2NyaXB0SWQiOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGF1dG8gaXQgPSBtX3Nj
cmlwdHMuZmluZChzY3JpcHRJZC50b0ludFB0cigpKTsKKyAgICBpZiAoaXQgPT0gbV9zY3JpcHRz
LmVuZCgpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk1pc3Npbmcgc2NyaXB0IGZv
ciBnaXZlbiBzY3JpcHRJZCJfcyk7CiAKLSAgICBib29sIGlzUmVnZXggPSBvcHRpb25hbElzUmVn
ZXggPyAqb3B0aW9uYWxJc1JlZ2V4IDogZmFsc2U7Ci0gICAgYm9vbCBjYXNlU2Vuc2l0aXZlID0g
b3B0aW9uYWxDYXNlU2Vuc2l0aXZlID8gKm9wdGlvbmFsQ2FzZVNlbnNpdGl2ZSA6IGZhbHNlOwot
ICAgIHJlc3VsdHMgPSBDb250ZW50U2VhcmNoVXRpbGl0aWVzOjpzZWFyY2hJblRleHRCeUxpbmVz
KGl0LT52YWx1ZS5zb3VyY2UsIHF1ZXJ5LCBjYXNlU2Vuc2l0aXZlLCBpc1JlZ2V4KTsKKyAgICBy
ZXR1cm4gQ29udGVudFNlYXJjaFV0aWxpdGllczo6c2VhcmNoSW5UZXh0QnlMaW5lcyhpdC0+dmFs
dWUuc291cmNlLCBxdWVyeSwgY2FzZVNlbnNpdGl2ZS52YWx1ZU9yKGZhbHNlKSwgaXNSZWdleC52
YWx1ZU9yKGZhbHNlKSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6Z2V0U2Ny
aXB0U291cmNlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBzY3JpcHRJ
RFN0ciwgU3RyaW5nKiBzY3JpcHRTb3VyY2UpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxTdHJp
bmc+IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmdldFNjcmlwdFNvdXJjZShjb25zdCBQcm90b2Nv
bDo6RGVidWdnZXI6OlNjcmlwdElkJiBzY3JpcHRJZCkKIHsKLSAgICBKU0M6OlNvdXJjZUlEIHNv
dXJjZUlEID0gc2NyaXB0SURTdHIudG9JbnRQdHIoKTsKLSAgICBhdXRvIGl0ID0gbV9zY3JpcHRz
LmZpbmQoc291cmNlSUQpOwotICAgIGlmIChpdCAhPSBtX3NjcmlwdHMuZW5kKCkpCi0gICAgICAg
ICpzY3JpcHRTb3VyY2UgPSBpdC0+dmFsdWUuc291cmNlOwotICAgIGVsc2UKLSAgICAgICAgZXJy
b3JTdHJpbmcgPSAiTWlzc2luZyBzY3JpcHQgZm9yIGdpdmVuIHNjcmlwdElkIjsKKyAgICBhdXRv
IGl0ID0gbV9zY3JpcHRzLmZpbmQoc2NyaXB0SWQudG9JbnRQdHIoKSk7CisgICAgaWYgKGl0ID09
IG1fc2NyaXB0cy5lbmQoKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJNaXNzaW5n
IHNjcmlwdCBmb3IgZ2l2ZW4gc2NyaXB0SWQiKTsKKworICAgIHJldHVybiBpdC0+dmFsdWUuc291
cmNlOwogfQogCi12b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmdldEZ1bmN0aW9uRGV0YWls
cyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgZnVuY3Rpb25JZCwgUmVm
UHRyPFByb3RvY29sOjpEZWJ1Z2dlcjo6RnVuY3Rpb25EZXRhaWxzPiYgZGV0YWlscykKK1Byb3Rv
Y29sOjpFcnJvclN0cmluZ09yPFJlZjxQcm90b2NvbDo6RGVidWdnZXI6OkZ1bmN0aW9uRGV0YWls
cz4+IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmdldEZ1bmN0aW9uRGV0YWlscyhjb25zdCBTdHJp
bmcmIGZ1bmN0aW9uSWQpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5n
OworCiAgICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHQgPSBtX2luamVjdGVkU2NyaXB0
TWFuYWdlci5pbmplY3RlZFNjcmlwdEZvck9iamVjdElkKGZ1bmN0aW9uSWQpOwotICAgIGlmIChp
bmplY3RlZFNjcmlwdC5oYXNOb1ZhbHVlKCkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWlz
c2luZyBpbmplY3RlZCBzY3JpcHQgZm9yIGdpdmVuIGZ1bmN0aW9uSWQiX3M7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9CisgICAgaWYgKGluamVjdGVkU2NyaXB0Lmhhc05vVmFsdWUoKSkKKyAgICAg
ICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJNaXNzaW5nIGluamVjdGVkIHNjcmlwdCBmb3IgZ2l2
ZW4gZnVuY3Rpb25JZCJfcyk7CiAKKyAgICBSZWZQdHI8UHJvdG9jb2w6OkRlYnVnZ2VyOjpGdW5j
dGlvbkRldGFpbHM+IGRldGFpbHM7CiAgICAgaW5qZWN0ZWRTY3JpcHQuZ2V0RnVuY3Rpb25EZXRh
aWxzKGVycm9yU3RyaW5nLCBmdW5jdGlvbklkLCBkZXRhaWxzKTsKKyAgICBpZiAoIWRldGFpbHMp
CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CisKKyAgICByZXR1
cm4gZGV0YWlscy5yZWxlYXNlTm9uTnVsbCgpOwogfQogCiB2b2lkIEluc3BlY3RvckRlYnVnZ2Vy
QWdlbnQ6OnNjaGVkdWxlUGF1c2VBdE5leHRPcHBvcnR1bml0eShEZWJ1Z2dlckZyb250ZW5kRGlz
cGF0Y2hlcjo6UmVhc29uIHJlYXNvbiwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBkYXRhKQpAQCAt
NzkyLDU3ICs4MDIsNzUgQEAgYm9vbCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpjYW5jZWxQYXVz
ZUZvclNwZWNpYWxCcmVha3BvaW50KEpTQzo6QnJlYWtwb2ludCYgYnIKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpwYXVzZShFcnJvclN0cmluZyYp
CitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojpw
YXVzZSgpCiB7CiAgICAgc2NoZWR1bGVQYXVzZUF0TmV4dE9wcG9ydHVuaXR5KERlYnVnZ2VyRnJv
bnRlbmREaXNwYXRjaGVyOjpSZWFzb246OlBhdXNlT25OZXh0U3RhdGVtZW50KTsKKworICAgIHJl
dHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6cmVzdW1lKEVycm9y
U3RyaW5nJiBlcnJvclN0cmluZykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3Bl
Y3RvckRlYnVnZ2VyQWdlbnQ6OnJlc3VtZSgpCiB7Ci0gICAgaWYgKCFtX3BhdXNlZEdsb2JhbE9i
amVjdCAmJiAhbV9qYXZhU2NyaXB0UGF1c2VTY2hlZHVsZWQpIHsKLSAgICAgICAgZXJyb3JTdHJp
bmcgPSAiTXVzdCBiZSBwYXVzZWQgb3Igd2FpdGluZyB0byBwYXVzZSJfczsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KKyAgICBpZiAoIW1fcGF1c2VkR2xvYmFsT2JqZWN0ICYmICFtX2phdmFTY3Jp
cHRQYXVzZVNjaGVkdWxlZCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJNdXN0IGJl
IHBhdXNlZCBvciB3YWl0aW5nIHRvIHBhdXNlIl9zKTsKIAogICAgIGNhbmNlbFBhdXNlQXROZXh0
T3Bwb3J0dW5pdHkoKTsKICAgICBtX2RlYnVnZ2VyLmNvbnRpbnVlUHJvZ3JhbSgpOwogICAgIG1f
Y29uZGl0aW9uVG9EaXNwYXRjaFJlc3VtZWQgPSBTaG91bGREaXNwYXRjaFJlc3VtZWQ6OldoZW5D
b250aW51ZWQ7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckRlYnVnZ2Vy
QWdlbnQ6OnN0ZXBOZXh0KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZykKK1Byb3RvY29sOjpFcnJv
clN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnN0ZXBOZXh0KCkKIHsKKyAg
ICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBpZiAoIWFzc2VydFBh
dXNlZChlcnJvclN0cmluZykpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgIHdpbGxTdGVwQW5kTWF5QmVjb21lSWRsZSgp
OwogICAgIG1fZGVidWdnZXIuc3RlcE5leHRFeHByZXNzaW9uKCk7CisKKyAgICByZXR1cm4geyB9
OwogfQogCi12b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnN0ZXBPdmVyKEVycm9yU3RyaW5n
JiBlcnJvclN0cmluZykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRl
YnVnZ2VyQWdlbnQ6OnN0ZXBPdmVyKCkKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJy
b3JTdHJpbmc7CisKICAgICBpZiAoIWFzc2VydFBhdXNlZChlcnJvclN0cmluZykpCi0gICAgICAg
IHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAog
ICAgIHdpbGxTdGVwQW5kTWF5QmVjb21lSWRsZSgpOwogICAgIG1fZGVidWdnZXIuc3RlcE92ZXJT
dGF0ZW1lbnQoKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdn
ZXJBZ2VudDo6c3RlcEludG8oRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nKQorUHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c3RlcEludG8oKQogewor
ICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIGlmICghYXNzZXJ0
UGF1c2VkKGVycm9yU3RyaW5nKSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFr
ZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCiAgICAgd2lsbFN0ZXBBbmRNYXlCZWNvbWVJZGxl
KCk7CiAgICAgbV9kZWJ1Z2dlci5zdGVwSW50b1N0YXRlbWVudCgpOworCisgICAgcmV0dXJuIHsg
fTsKIH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzdGVwT3V0KEVycm9yU3RyaW5n
JiBlcnJvclN0cmluZykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRl
YnVnZ2VyQWdlbnQ6OnN0ZXBPdXQoKQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJv
clN0cmluZzsKKwogICAgIGlmICghYXNzZXJ0UGF1c2VkKGVycm9yU3RyaW5nKSkKLSAgICAgICAg
cmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCiAg
ICAgd2lsbFN0ZXBBbmRNYXlCZWNvbWVJZGxlKCk7CiAgICAgbV9kZWJ1Z2dlci5zdGVwT3V0T2ZG
dW5jdGlvbigpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAogdm9pZCBJbnNwZWN0b3JEZWJ1Z2dl
ckFnZW50OjpyZWdpc3RlcklkbGVIYW5kbGVyKCkKQEAgLTg3Nyw4NiArOTA1LDk4IEBAIHZvaWQg
SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlkQmVjb21lSWRsZSgpCiAKICAgICBtX2NvbmRpdGlv
blRvRGlzcGF0Y2hSZXN1bWVkID0gU2hvdWxkRGlzcGF0Y2hSZXN1bWVkOjpObzsKIAotICAgIGlm
IChtX2VuYWJsZVBhdXNlV2hlbklkbGUpIHsKLSAgICAgICAgRXJyb3JTdHJpbmcgaWdub3JlZDsK
LSAgICAgICAgcGF1c2UoaWdub3JlZCk7Ci0gICAgfQorICAgIGlmIChtX2VuYWJsZVBhdXNlV2hl
bklkbGUpCisgICAgICAgIHBhdXNlKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2Vu
dDo6c2V0UGF1c2VPbkRlYnVnZ2VyU3RhdGVtZW50cyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcs
IGJvb2wgZW5hYmxlZCwgY29uc3QgSlNPTjo6T2JqZWN0KiBvcHRpb25zUGF5bG9hZCkKK1Byb3Rv
Y29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldFBhdXNl
T25EZWJ1Z2dlclN0YXRlbWVudHMoYm9vbCBlbmFibGVkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYm
IG9wdGlvbnMpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAg
ICAgaWYgKCFlbmFibGVkKSB7CiAgICAgICAgIG1fZGVidWdnZXIuc2V0UGF1c2VPbkRlYnVnZ2Vy
U3RhdGVtZW50c0JyZWFrcG9pbnQobnVsbHB0cik7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAg
cmV0dXJuIHsgfTsKICAgICB9CiAKLSAgICBhdXRvIGJyZWFrcG9pbnQgPSBkZWJ1Z2dlckJyZWFr
cG9pbnRGcm9tUGF5bG9hZChlcnJvclN0cmluZywgb3B0aW9uc1BheWxvYWQpOworICAgIGF1dG8g
YnJlYWtwb2ludCA9IGRlYnVnZ2VyQnJlYWtwb2ludEZyb21QYXlsb2FkKGVycm9yU3RyaW5nLCBX
VEZNb3ZlKG9wdGlvbnMpKTsKICAgICBpZiAoIWJyZWFrcG9pbnQpCi0gICAgICAgIHJldHVybjsK
KyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgIG1fZGVi
dWdnZXIuc2V0UGF1c2VPbkRlYnVnZ2VyU3RhdGVtZW50c0JyZWFrcG9pbnQoV1RGTW92ZShicmVh
a3BvaW50KSk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckRlYnVnZ2Vy
QWdlbnQ6OnNldFBhdXNlT25FeGNlcHRpb25zKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29u
c3QgU3RyaW5nJiBzdGF0ZVN0cmluZywgY29uc3QgSlNPTjo6T2JqZWN0KiBvcHRpb25zUGF5bG9h
ZCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6
OnNldFBhdXNlT25FeGNlcHRpb25zKGNvbnN0IFN0cmluZyYgc3RhdGVTdHJpbmcsIFJlZlB0cjxK
U09OOjpPYmplY3Q+JiYgb3B0aW9ucykKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJy
b3JTdHJpbmc7CisKICAgICBSZWZQdHI8SlNDOjpCcmVha3BvaW50PiBhbGxFeGNlcHRpb25zQnJl
YWtwb2ludDsKICAgICBSZWZQdHI8SlNDOjpCcmVha3BvaW50PiB1bmNhdWdodEV4Y2VwdGlvbnNC
cmVha3BvaW50OwogCiAgICAgaWYgKHN0YXRlU3RyaW5nID09ICJhbGwiKSB7Ci0gICAgICAgIGFs
bEV4Y2VwdGlvbnNCcmVha3BvaW50ID0gZGVidWdnZXJCcmVha3BvaW50RnJvbVBheWxvYWQoZXJy
b3JTdHJpbmcsIG9wdGlvbnNQYXlsb2FkKTsKKyAgICAgICAgYWxsRXhjZXB0aW9uc0JyZWFrcG9p
bnQgPSBkZWJ1Z2dlckJyZWFrcG9pbnRGcm9tUGF5bG9hZChlcnJvclN0cmluZywgV1RGTW92ZShv
cHRpb25zKSk7CiAgICAgICAgIGlmICghYWxsRXhjZXB0aW9uc0JyZWFrcG9pbnQpCi0gICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJp
bmcpOwogICAgIH0gZWxzZSBpZiAoc3RhdGVTdHJpbmcgPT0gInVuY2F1Z2h0IikgewotICAgICAg
ICB1bmNhdWdodEV4Y2VwdGlvbnNCcmVha3BvaW50ID0gZGVidWdnZXJCcmVha3BvaW50RnJvbVBh
eWxvYWQoZXJyb3JTdHJpbmcsIG9wdGlvbnNQYXlsb2FkKTsKKyAgICAgICAgdW5jYXVnaHRFeGNl
cHRpb25zQnJlYWtwb2ludCA9IGRlYnVnZ2VyQnJlYWtwb2ludEZyb21QYXlsb2FkKGVycm9yU3Ry
aW5nLCBXVEZNb3ZlKG9wdGlvbnMpKTsKICAgICAgICAgaWYgKCF1bmNhdWdodEV4Y2VwdGlvbnNC
cmVha3BvaW50KQotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0gZWxzZSBpZiAoc3RhdGVTdHJp
bmcgIT0gIm5vbmUiKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gbWFrZVN0cmluZygiVW5rbm93
biBzdGF0ZTogIl9zLCBzdGF0ZVN0cmluZyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAg
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOworICAgIH0gZWxzZSBp
ZiAoc3RhdGVTdHJpbmcgIT0gIm5vbmUiKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQo
bWFrZVN0cmluZygiVW5rbm93biBzdGF0ZTogIl9zLCBzdGF0ZVN0cmluZykpOwogCiAgICAgbV9k
ZWJ1Z2dlci5zZXRQYXVzZU9uQWxsRXhjZXB0aW9uc0JyZWFrcG9pbnQoV1RGTW92ZShhbGxFeGNl
cHRpb25zQnJlYWtwb2ludCkpOwogICAgIG1fZGVidWdnZXIuc2V0UGF1c2VPblVuY2F1Z2h0RXhj
ZXB0aW9uc0JyZWFrcG9pbnQoV1RGTW92ZSh1bmNhdWdodEV4Y2VwdGlvbnNCcmVha3BvaW50KSk7
CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNl
dFBhdXNlT25Bc3NlcnRpb25zKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgYm9vbCBlbmFibGVk
LCBjb25zdCBKU09OOjpPYmplY3QqIG9wdGlvbnNQYXlsb2FkKQorUHJvdG9jb2w6OkVycm9yU3Ry
aW5nT3I8dm9pZD4gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0UGF1c2VPbkFzc2VydGlvbnMo
Ym9vbCBlbmFibGVkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIG9wdGlvbnMpCiB7CisgICAgUHJv
dG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAgICAgaWYgKCFlbmFibGVkKSB7CiAg
ICAgICAgIG1fcGF1c2VPbkFzc2VydGlvbnNCcmVha3BvaW50ID0gbnVsbHB0cjsKLSAgICAgICAg
cmV0dXJuOworICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAotICAgIGF1dG8gYnJlYWtwb2lu
dCA9IGRlYnVnZ2VyQnJlYWtwb2ludEZyb21QYXlsb2FkKGVycm9yU3RyaW5nLCBvcHRpb25zUGF5
bG9hZCk7CisgICAgYXV0byBicmVha3BvaW50ID0gZGVidWdnZXJCcmVha3BvaW50RnJvbVBheWxv
YWQoZXJyb3JTdHJpbmcsIFdURk1vdmUob3B0aW9ucykpOwogICAgIGlmICghYnJlYWtwb2ludCkK
LSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJp
bmcpOwogCiAgICAgbV9wYXVzZU9uQXNzZXJ0aW9uc0JyZWFrcG9pbnQgPSBXVEZNb3ZlKGJyZWFr
cG9pbnQpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFn
ZW50OjpzZXRQYXVzZU9uTWljcm90YXNrcyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGJvb2wg
ZW5hYmxlZCwgY29uc3QgSlNPTjo6T2JqZWN0KiBvcHRpb25zUGF5bG9hZCkKK1Byb3RvY29sOjpF
cnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldFBhdXNlT25NaWNy
b3Rhc2tzKGJvb2wgZW5hYmxlZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBvcHRpb25zKQogewor
ICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIGlmICghZW5hYmxl
ZCkgewogICAgICAgICBtX3BhdXNlT25NaWNyb3Rhc2tzQnJlYWtwb2ludCA9IG51bGxwdHI7Ci0g
ICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKLSAgICBhdXRvIGJy
ZWFrcG9pbnQgPSBkZWJ1Z2dlckJyZWFrcG9pbnRGcm9tUGF5bG9hZChlcnJvclN0cmluZywgb3B0
aW9uc1BheWxvYWQpOworICAgIGF1dG8gYnJlYWtwb2ludCA9IGRlYnVnZ2VyQnJlYWtwb2ludEZy
b21QYXlsb2FkKGVycm9yU3RyaW5nLCBXVEZNb3ZlKG9wdGlvbnMpKTsKICAgICBpZiAoIWJyZWFr
cG9pbnQpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVy
cm9yU3RyaW5nKTsKIAogICAgIG1fcGF1c2VPbk1pY3JvdGFza3NCcmVha3BvaW50ID0gV1RGTW92
ZShicmVha3BvaW50KTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVi
dWdnZXJBZ2VudDo6ZXZhbHVhdGVPbkNhbGxGcmFtZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcs
IGNvbnN0IFN0cmluZyYgY2FsbEZyYW1lSWQsIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgY29u
c3QgU3RyaW5nKiBvYmplY3RHcm91cCwgY29uc3QgYm9vbCogaW5jbHVkZUNvbW1hbmRMaW5lQVBJ
LCBjb25zdCBib29sKiBkb05vdFBhdXNlT25FeGNlcHRpb25zQW5kTXV0ZUNvbnNvbGUsIGNvbnN0
IGJvb2wqIHJldHVybkJ5VmFsdWUsIGNvbnN0IGJvb2wqIGdlbmVyYXRlUHJldmlldywgY29uc3Qg
Ym9vbCogc2F2ZVJlc3VsdCwgY29uc3QgYm9vbCogLyogZW11bGF0ZVVzZXJHZXN0dXJlICovLCBS
ZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3VsdCwgT3B0aW9uYWw8
Ym9vbD4mIHdhc1Rocm93biwgT3B0aW9uYWw8aW50PiYgc2F2ZWRSZXN1bHRJbmRleCkKK1Byb3Rv
Y29sOjpFcnJvclN0cmluZ09yPHN0ZDo6dHVwbGU8UmVmPFByb3RvY29sOjpSdW50aW1lOjpSZW1v
dGVPYmplY3Q+LCBPcHRpb25hbDxib29sPiAvKiB3YXNUaHJvd24gKi8sIE9wdGlvbmFsPGludD4g
Lyogc2F2ZWRSZXN1bHRJbmRleCAqLz4+IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmV2YWx1YXRl
T25DYWxsRnJhbWUoY29uc3QgUHJvdG9jb2w6OkRlYnVnZ2VyOjpDYWxsRnJhbWVJZCYgY2FsbEZy
YW1lSWQsIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91
cCwgT3B0aW9uYWw8Ym9vbD4mJiBpbmNsdWRlQ29tbWFuZExpbmVBUEksIE9wdGlvbmFsPGJvb2w+
JiYgZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xlLCBPcHRpb25hbDxib29sPiYm
IHJldHVybkJ5VmFsdWUsIE9wdGlvbmFsPGJvb2w+JiYgZ2VuZXJhdGVQcmV2aWV3LCBPcHRpb25h
bDxib29sPiYmIHNhdmVSZXN1bHQsIE9wdGlvbmFsPGJvb2w+JiYgIC8qIGVtdWxhdGVVc2VyR2Vz
dHVyZSAqLykKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAg
ICBpZiAoIWFzc2VydFBhdXNlZChlcnJvclN0cmluZykpCi0gICAgICAgIHJldHVybjsKKyAgICAg
ICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgIEluamVjdGVkU2Ny
aXB0IGluamVjdGVkU2NyaXB0ID0gbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIuaW5qZWN0ZWRTY3Jp
cHRGb3JPYmplY3RJZChjYWxsRnJhbWVJZCk7Ci0gICAgaWYgKGluamVjdGVkU2NyaXB0Lmhhc05v
VmFsdWUoKSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIGluamVjdGVkIHNjcmlw
dCBmb3IgZ2l2ZW4gY2FsbEZyYW1lSWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAg
aWYgKGluamVjdGVkU2NyaXB0Lmhhc05vVmFsdWUoKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4
cGVjdGVkKCJNaXNzaW5nIGluamVjdGVkIHNjcmlwdCBmb3IgZ2l2ZW4gY2FsbEZyYW1lSWQiX3Mp
OwogCiAgICAgSlNDOjpEZWJ1Z2dlcjo6VGVtcG9yYXJpbHlEaXNhYmxlRXhjZXB0aW9uQnJlYWtw
b2ludHMgdGVtcG9yYXJpbHlEaXNhYmxlRXhjZXB0aW9uQnJlYWtwb2ludHMobV9kZWJ1Z2dlcik7
CiAKQEAgLTk2NiwyOCArMTAwNiwzMSBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmV2
YWx1YXRlT25DYWxsRnJhbWUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdAogICAgICAg
ICBtdXRlQ29uc29sZSgpOwogICAgIH0KIAotICAgIGluamVjdGVkU2NyaXB0LmV2YWx1YXRlT25D
YWxsRnJhbWUoZXJyb3JTdHJpbmcsIG1fY3VycmVudENhbGxTdGFjay5nZXQoKSwgY2FsbEZyYW1l
SWQsIGV4cHJlc3Npb24sCi0gICAgICAgIG9iamVjdEdyb3VwID8gKm9iamVjdEdyb3VwIDogZW1w
dHlTdHJpbmcoKSwgaW5jbHVkZUNvbW1hbmRMaW5lQVBJICYmICppbmNsdWRlQ29tbWFuZExpbmVB
UEksIHJldHVybkJ5VmFsdWUgJiYgKnJldHVybkJ5VmFsdWUsIGdlbmVyYXRlUHJldmlldyAmJiAq
Z2VuZXJhdGVQcmV2aWV3LCBzYXZlUmVzdWx0ICYmICpzYXZlUmVzdWx0LAotICAgICAgICByZXN1
bHQsIHdhc1Rocm93biwgc2F2ZWRSZXN1bHRJbmRleCk7CisgICAgUmVmUHRyPFByb3RvY29sOjpS
dW50aW1lOjpSZW1vdGVPYmplY3Q+IHJlc3VsdDsKKyAgICBPcHRpb25hbDxib29sPiB3YXNUaHJv
d247CisgICAgT3B0aW9uYWw8aW50PiBzYXZlZFJlc3VsdEluZGV4OworCisgICAgaW5qZWN0ZWRT
Y3JpcHQuZXZhbHVhdGVPbkNhbGxGcmFtZShlcnJvclN0cmluZywgbV9jdXJyZW50Q2FsbFN0YWNr
LmdldCgpLCBjYWxsRnJhbWVJZCwgZXhwcmVzc2lvbiwgb2JqZWN0R3JvdXAsIGluY2x1ZGVDb21t
YW5kTGluZUFQSS52YWx1ZU9yKGZhbHNlKSwgcmV0dXJuQnlWYWx1ZS52YWx1ZU9yKGZhbHNlKSwg
Z2VuZXJhdGVQcmV2aWV3LnZhbHVlT3IoZmFsc2UpLCBzYXZlUmVzdWx0LnZhbHVlT3IoZmFsc2Up
LCByZXN1bHQsIHdhc1Rocm93biwgc2F2ZWRSZXN1bHRJbmRleCk7CiAKICAgICBpZiAocGF1c2VB
bmRNdXRlKQogICAgICAgICB1bm11dGVDb25zb2xlKCk7CisKKyAgICBpZiAoIXJlc3VsdCkKKyAg
ICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKKworICAgIHJldHVybiB7
IHsgcmVzdWx0LnJlbGVhc2VOb25OdWxsKCksIFdURk1vdmUod2FzVGhyb3duKSwgV1RGTW92ZShz
YXZlZFJlc3VsdEluZGV4KSB9IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6
c2V0U2hvdWxkQmxhY2tib3hVUkwoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJp
bmcmIHVybCwgYm9vbCBzaG91bGRCbGFja2JveCwgY29uc3QgYm9vbCogb3B0aW9uYWxDYXNlU2Vu
c2l0aXZlLCBjb25zdCBib29sKiBvcHRpb25hbElzUmVnZXgpCitQcm90b2NvbDo6RXJyb3JTdHJp
bmdPcjx2b2lkPiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZXRTaG91bGRCbGFja2JveFVSTChj
b25zdCBTdHJpbmcmIHVybCwgYm9vbCBzaG91bGRCbGFja2JveCwgT3B0aW9uYWw8Ym9vbD4mJiBv
cHRpb25hbENhc2VTZW5zaXRpdmUsIE9wdGlvbmFsPGJvb2w+JiYgb3B0aW9uYWxJc1JlZ2V4KQog
ewotICAgIGlmICh1cmwuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIlVSTCBt
dXN0IG5vdCBiZSBlbXB0eSJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAodXJs
LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJVUkwgbXVzdCBub3Qg
YmUgZW1wdHkiX3MpOwogCi0gICAgYm9vbCBjYXNlU2Vuc2l0aXZlID0gb3B0aW9uYWxDYXNlU2Vu
c2l0aXZlICYmICpvcHRpb25hbENhc2VTZW5zaXRpdmU7Ci0gICAgYm9vbCBpc1JlZ2V4ID0gb3B0
aW9uYWxJc1JlZ2V4ICYmICpvcHRpb25hbElzUmVnZXg7CisgICAgYm9vbCBjYXNlU2Vuc2l0aXZl
ID0gb3B0aW9uYWxDYXNlU2Vuc2l0aXZlLnZhbHVlT3IoZmFsc2UpOworICAgIGJvb2wgaXNSZWdl
eCA9IG9wdGlvbmFsSXNSZWdleC52YWx1ZU9yKGZhbHNlKTsKIAotICAgIGlmICghY2FzZVNlbnNp
dGl2ZSAmJiAhaXNSZWdleCAmJiBpc1dlYktpdEluamVjdGVkU2NyaXB0KHVybCkpIHsKLSAgICAg
ICAgZXJyb3JTdHJpbmcgPSAiQmxhY2tib3hpbmcgb2YgaW50ZXJuYWwgc2NyaXB0cyBpcyBjb250
cm9sbGVkIGJ5ICdEZWJ1Z2dlci5zZXRQYXVzZUZvckludGVybmFsU2NyaXB0cyciX3M7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKCFjYXNlU2Vuc2l0aXZlICYmICFpc1JlZ2V4ICYm
IGlzV2ViS2l0SW5qZWN0ZWRTY3JpcHQodXJsKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVj
dGVkKCJCbGFja2JveGluZyBvZiBpbnRlcm5hbCBzY3JpcHRzIGlzIGNvbnRyb2xsZWQgYnkgJ0Rl
YnVnZ2VyLnNldFBhdXNlRm9ySW50ZXJuYWxTY3JpcHRzJyJfcyk7CiAKICAgICBCbGFja2JveENv
bmZpZyBjb25maWcgeyB1cmwsIGNhc2VTZW5zaXRpdmUsIGlzUmVnZXggfTsKICAgICBpZiAoc2hv
dWxkQmxhY2tib3gpCkBAIC0xMDA0LDYgKzEwNDcsOCBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2Vy
QWdlbnQ6OnNldFNob3VsZEJsYWNrYm94VVJMKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29u
cwogICAgICAgICAgICAgYmxhY2tib3hUeXBlID0gSlNDOjpEZWJ1Z2dlcjo6QmxhY2tib3hUeXBl
OjpEZWZlcnJlZDsKICAgICAgICAgbV9kZWJ1Z2dlci5zZXRCbGFja2JveFR5cGUoc291cmNlSUQs
IGJsYWNrYm94VHlwZSk7CiAgICAgfQorCisgICAgcmV0dXJuIHsgfTsKIH0KIAogYm9vbCBJbnNw
ZWN0b3JEZWJ1Z2dlckFnZW50OjpzaG91bGRCbGFja2JveFVSTChjb25zdCBTdHJpbmcmIHVybCkg
Y29uc3QKQEAgLTEwMzksMTAgKzEwODQsMTAgQEAgU3RyaW5nIEluc3BlY3RvckRlYnVnZ2VyQWdl
bnQ6OnNvdXJjZU1hcFVSTEZvclNjcmlwdChjb25zdCBKU0M6OkRlYnVnZ2VyOjpTY3JpcHQKICAg
ICByZXR1cm4gc2NyaXB0LnNvdXJjZU1hcHBpbmdVUkw7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVi
dWdnZXJBZ2VudDo6c2V0UGF1c2VGb3JJbnRlcm5hbFNjcmlwdHMoRXJyb3JTdHJpbmcmLCBib29s
IHNob3VsZFBhdXNlKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yRGVi
dWdnZXJBZ2VudDo6c2V0UGF1c2VGb3JJbnRlcm5hbFNjcmlwdHMoYm9vbCBzaG91bGRQYXVzZSkK
IHsKICAgICBpZiAoc2hvdWxkUGF1c2UgPT0gbV9wYXVzZUZvckludGVybmFsU2NyaXB0cykKLSAg
ICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4geyB9OwogCiAgICAgbV9wYXVzZUZvckludGVy
bmFsU2NyaXB0cyA9IHNob3VsZFBhdXNlOwogCkBAIC0xMDUyLDYgKzEwOTcsOCBAQCB2b2lkIElu
c3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldFBhdXNlRm9ySW50ZXJuYWxTY3JpcHRzKEVycm9yU3Ry
aW5nJiwgYm9vbCBzaG91bAogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIG1fZGVidWdn
ZXIuc2V0QmxhY2tib3hUeXBlKHNvdXJjZUlELCBibGFja2JveFR5cGUpOwogICAgIH0KKworICAg
IHJldHVybiB7IH07CiB9CiAKIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlkUGFyc2VT
b3VyY2UoSlNDOjpTb3VyY2VJRCBzb3VyY2VJRCwgY29uc3QgSlNDOjpEZWJ1Z2dlcjo6U2NyaXB0
JiBzY3JpcHQpCkBAIC0xMDYxLDEyICsxMTA4LDcgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFn
ZW50OjpkaWRQYXJzZVNvdXJjZShKU0M6OlNvdXJjZUlEIHNvdXJjZUlELCBjb25zdCBKU0M6OkQK
ICAgICBTdHJpbmcgc291cmNlVVJMID0gc2NyaXB0LnNvdXJjZVVSTDsKICAgICBTdHJpbmcgc291
cmNlTWFwcGluZ1VSTCA9IHNvdXJjZU1hcFVSTEZvclNjcmlwdChzY3JpcHQpOwogCi0gICAgY29u
c3QgYm9vbCBpc01vZHVsZSA9IHNjcmlwdC5zb3VyY2VQcm92aWRlci0+c291cmNlVHlwZSgpID09
IEpTQzo6U291cmNlUHJvdmlkZXJTb3VyY2VUeXBlOjpNb2R1bGU7Ci0gICAgY29uc3QgYm9vbCog
aXNDb250ZW50U2NyaXB0ID0gc2NyaXB0LmlzQ29udGVudFNjcmlwdCA/ICZzY3JpcHQuaXNDb250
ZW50U2NyaXB0IDogbnVsbHB0cjsKLSAgICBTdHJpbmcqIHNvdXJjZVVSTFBhcmFtID0gaGFzU291
cmNlVVJMID8gJnNvdXJjZVVSTCA6IG51bGxwdHI7Ci0gICAgU3RyaW5nKiBzb3VyY2VNYXBVUkxQ
YXJhbSA9IHNvdXJjZU1hcHBpbmdVUkwuaXNFbXB0eSgpID8gbnVsbHB0ciA6ICZzb3VyY2VNYXBw
aW5nVVJMOwotCi0gICAgbV9mcm9udGVuZERpc3BhdGNoZXItPnNjcmlwdFBhcnNlZChzY3JpcHRJ
RFN0ciwgc2NyaXB0LnVybCwgc2NyaXB0LnN0YXJ0TGluZSwgc2NyaXB0LnN0YXJ0Q29sdW1uLCBz
Y3JpcHQuZW5kTGluZSwgc2NyaXB0LmVuZENvbHVtbiwgaXNDb250ZW50U2NyaXB0LCBzb3VyY2VV
UkxQYXJhbSwgc291cmNlTWFwVVJMUGFyYW0sIGlzTW9kdWxlID8gJmlzTW9kdWxlIDogbnVsbHB0
cik7CisgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPnNjcmlwdFBhcnNlZChzY3JpcHRJRFN0ciwg
c2NyaXB0LnVybCwgc2NyaXB0LnN0YXJ0TGluZSwgc2NyaXB0LnN0YXJ0Q29sdW1uLCBzY3JpcHQu
ZW5kTGluZSwgc2NyaXB0LmVuZENvbHVtbiwgc2NyaXB0LmlzQ29udGVudFNjcmlwdCwgc291cmNl
VVJMLCBzb3VyY2VNYXBwaW5nVVJMLCBzY3JpcHQuc291cmNlUHJvdmlkZXItPnNvdXJjZVR5cGUo
KSA9PSBKU0M6OlNvdXJjZVByb3ZpZGVyU291cmNlVHlwZTo6TW9kdWxlKTsKIAogICAgIG1fc2Ny
aXB0cy5zZXQoc291cmNlSUQsIHNjcmlwdCk7CiAKQEAgLTExODAsMTIgKzEyMjIsMTMgQEAgdm9p
ZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkaWRQYXVzZShKU0M6OkpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTQzo6RGUKICAgICAgICAgaWYgKGF1dG8gZGVidWdnZXJCcmVha3BvaW50
SWQgPSBtX2RlYnVnZ2VyLnBhdXNpbmdCcmVha3BvaW50SUQoKSkgewogICAgICAgICAgICAgQVNT
RVJUKCFtX2NvbnRpbnVlVG9Mb2NhdGlvbkRlYnVnZ2VyQnJlYWtwb2ludCB8fCBkZWJ1Z2dlckJy
ZWFrcG9pbnRJZCAhPSBtX2NvbnRpbnVlVG9Mb2NhdGlvbkRlYnVnZ2VyQnJlYWtwb2ludC0+aWQo
KSk7CiAgICAgICAgICAgICBkYXRhID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICAgICAg
ICAgIGRhdGEtPnNldFN0cmluZygib3JpZ2luYWxSZWFzb24iX3MsIFByb3RvY29sOjpJbnNwZWN0
b3JIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShEZWJ1Z2dlckZyb250ZW5kRGlzcGF0Y2hl
cjo6UmVhc29uOjpCcmVha3BvaW50KSk7Ci0gICAgICAgICAgICBkYXRhLT5zZXRWYWx1ZSgib3Jp
Z2luYWxEYXRhIl9zLCBidWlsZEJyZWFrcG9pbnRQYXVzZVJlYXNvbihkZWJ1Z2dlckJyZWFrcG9p
bnRJZCkpOworICAgICAgICAgICAgZGF0YS0+c2V0U3RyaW5nKCJvcmlnaW5hbFJlYXNvbiJfcywg
UHJvdG9jb2w6OkhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKERlYnVnZ2VyRnJvbnRlbmRE
aXNwYXRjaGVyOjpSZWFzb246OkJyZWFrcG9pbnQpKTsKKyAgICAgICAgICAgIGlmIChhdXRvIHBh
dXNlUmVhc29uID0gYnVpbGRCcmVha3BvaW50UGF1c2VSZWFzb24oZGVidWdnZXJCcmVha3BvaW50
SWQpKQorICAgICAgICAgICAgICAgIGRhdGEtPnNldFZhbHVlKCJvcmlnaW5hbERhdGEiX3MsIHBh
dXNlUmVhc29uLnJlbGVhc2VOb25OdWxsKCkpOwogICAgICAgICB9IGVsc2UgaWYgKG1fcHJlQmxh
Y2tib3hQYXVzZURhdGEpIHsKICAgICAgICAgICAgIGRhdGEgPSBKU09OOjpPYmplY3Q6OmNyZWF0
ZSgpOwotICAgICAgICAgICAgZGF0YS0+c2V0U3RyaW5nKCJvcmlnaW5hbFJlYXNvbiJfcywgUHJv
dG9jb2w6Okluc3BlY3RvckhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKG1fcHJlQmxhY2ti
b3hQYXVzZVJlYXNvbikpOwotICAgICAgICAgICAgZGF0YS0+c2V0VmFsdWUoIm9yaWdpbmFsRGF0
YSJfcywgbV9wcmVCbGFja2JveFBhdXNlRGF0YSk7CisgICAgICAgICAgICBkYXRhLT5zZXRTdHJp
bmcoIm9yaWdpbmFsUmVhc29uIl9zLCBQcm90b2NvbDo6SGVscGVyczo6Z2V0RW51bUNvbnN0YW50
VmFsdWUobV9wcmVCbGFja2JveFBhdXNlUmVhc29uKSk7CisgICAgICAgICAgICBkYXRhLT5zZXRW
YWx1ZSgib3JpZ2luYWxEYXRhIl9zLCBtX3ByZUJsYWNrYm94UGF1c2VEYXRhLnJlbGVhc2VOb25O
dWxsKCkpOwogICAgICAgICB9CiAgICAgICAgIHVwZGF0ZVBhdXNlUmVhc29uQW5kRGF0YShEZWJ1
Z2dlckZyb250ZW5kRGlzcGF0Y2hlcjo6UmVhc29uOjpCbGFja2JveGVkU2NyaXB0LCBXVEZNb3Zl
KGRhdGEpKTsKICAgICB9CkBAIC0xMjA2LDcgKzEyNDksNyBAQCB2b2lkIEluc3BlY3RvckRlYnVn
Z2VyQWdlbnQ6OmRpZFBhdXNlKEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlND
OjpEZQogICAgICAgICAgICAgYXN5bmNTdGFja1RyYWNlID0gaXQtPnZhbHVlLT5idWlsZEluc3Bl
Y3Rvck9iamVjdCgpOwogICAgIH0KIAotICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5wYXVzZWQo
Y3VycmVudENhbGxGcmFtZXMoaW5qZWN0ZWRTY3JpcHQpLCBtX3BhdXNlUmVhc29uLCBtX3BhdXNl
RGF0YSwgYXN5bmNTdGFja1RyYWNlKTsKKyAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+cGF1c2Vk
KGN1cnJlbnRDYWxsRnJhbWVzKGluamVjdGVkU2NyaXB0KSwgUHJvdG9jb2w6OkhlbHBlcnM6Omdl
dEVudW1Db25zdGFudFZhbHVlKG1fcGF1c2VSZWFzb24pLCBtX3BhdXNlRGF0YS5jb3B5UmVmKCks
IFdURk1vdmUoYXN5bmNTdGFja1RyYWNlKSk7CiAKICAgICBtX2phdmFTY3JpcHRQYXVzZVNjaGVk
dWxlZCA9IGZhbHNlOwogCkBAIC0xMjMxLDEyICsxMjc0LDE1IEBAIHZvaWQgSW5zcGVjdG9yRGVi
dWdnZXJBZ2VudDo6YnJlYWtwb2ludEFjdGlvblByb2JlKEpTQzo6SlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iCiB7CiAgICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHQgPSBtX2luamVjdGVk
U2NyaXB0TWFuYWdlci5pbmplY3RlZFNjcmlwdEZvcihnbG9iYWxPYmplY3QpOwogICAgIGF1dG8g
cGF5bG9hZCA9IGluamVjdGVkU2NyaXB0LndyYXBPYmplY3Qoc2FtcGxlLCBvYmplY3RHcm91cEZv
ckJyZWFrcG9pbnRBY3Rpb24oYWN0aW9uSUQpLCB0cnVlKTsKKyAgICBpZiAoIXBheWxvYWQpCisg
ICAgICAgIHJldHVybjsKKwogICAgIGF1dG8gcmVzdWx0ID0gUHJvdG9jb2w6OkRlYnVnZ2VyOjpQ
cm9iZVNhbXBsZTo6Y3JlYXRlKCkKICAgICAgICAgLnNldFByb2JlSWQoYWN0aW9uSUQpCiAgICAg
ICAgIC5zZXRCYXRjaElkKGJhdGNoSWQpCiAgICAgICAgIC5zZXRTYW1wbGVJZChzYW1wbGVJZCkK
ICAgICAgICAgLnNldFRpbWVzdGFtcChtX2luamVjdGVkU2NyaXB0TWFuYWdlci5pbnNwZWN0b3JF
bnZpcm9ubWVudCgpLmV4ZWN1dGlvblN0b3B3YXRjaCgpLmVsYXBzZWRUaW1lKCkuc2Vjb25kcygp
KQotICAgICAgICAuc2V0UGF5bG9hZChXVEZNb3ZlKHBheWxvYWQpKQorICAgICAgICAuc2V0UGF5
bG9hZChwYXlsb2FkLnJlbGVhc2VOb25OdWxsKCkpCiAgICAgICAgIC5yZWxlYXNlKCk7CiAgICAg
bV9mcm9udGVuZERpc3BhdGNoZXItPmRpZFNhbXBsZVByb2JlKFdURk1vdmUocmVzdWx0KSk7CiB9
CkBAIC0xMjY3LDkgKzEzMTMsOCBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmJyZWFr
UHJvZ3JhbShEZWJ1Z2dlckZyb250ZW5kRGlzcGF0Y2hlcjo6UmVhc29uIHJlYQogCiB2b2lkIElu
c3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmNsZWFySW5zcGVjdG9yQnJlYWtwb2ludFN0YXRlKCkKIHsK
LSAgICBFcnJvclN0cmluZyBpZ25vcmVkOwogICAgIGZvciAoYXV0byYgcHJvdG9jb2xCcmVha3Bv
aW50SUQgOiBjb3B5VG9WZWN0b3IobV9kZWJ1Z2dlckJyZWFrcG9pbnRzRm9yUHJvdG9jb2xCcmVh
a3BvaW50SUQua2V5cygpKSkKLSAgICAgICAgcmVtb3ZlQnJlYWtwb2ludChpZ25vcmVkLCBwcm90
b2NvbEJyZWFrcG9pbnRJRCk7CisgICAgICAgIHJlbW92ZUJyZWFrcG9pbnQocHJvdG9jb2xCcmVh
a3BvaW50SUQpOwogCiAgICAgbV9wcm90b2NvbEJyZWFrcG9pbnRGb3JQcm90b2NvbEJyZWFrcG9p
bnRJRC5jbGVhcigpOwogCkBAIC0xMzE3LDcgKzEzNjIsNyBAQCB2b2lkIEluc3BlY3RvckRlYnVn
Z2VyQWdlbnQ6OmRpZENsZWFyR2xvYmFsT2JqZWN0KCkKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hl
ci0+Z2xvYmFsT2JqZWN0Q2xlYXJlZCgpOwogfQogCi1ib29sIEluc3BlY3RvckRlYnVnZ2VyQWdl
bnQ6OmFzc2VydFBhdXNlZChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCitib29sIEluc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQ6OmFzc2VydFBhdXNlZChQcm90b2NvbDo6RXJyb3JTdHJpbmcmIGVycm9y
U3RyaW5nKQogewogICAgIGlmICghbV9wYXVzZWRHbG9iYWxPYmplY3QpIHsKICAgICAgICAgZXJy
b3JTdHJpbmcgPSAiTXVzdCBiZSBwYXVzZWQiX3M7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50
LmgKaW5kZXggMzBmZjlmM2MyNmQxYWUwNDY2YTcxYTViZjYzNjYxODI5NTRmYTJkOC4uNGZjM2Y4
NGE2ZTIxMmI4ODViNmEyZjMyOGY4MWVkZjc1ZjkwYTQ2YyAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRlYnVn
Z2VyQWdlbnQuaApAQCAtNDgsNyArNDgsNiBAQCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIGNsYXNz
IEFzeW5jU3RhY2tUcmFjZTsKIGNsYXNzIEluamVjdGVkU2NyaXB0OwogY2xhc3MgSW5qZWN0ZWRT
Y3JpcHRNYW5hZ2VyOwotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiAKIGNsYXNzIEpTX0VY
UE9SVF9QUklWQVRFIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQgOiBwdWJsaWMgSW5zcGVjdG9yQWdl
bnRCYXNlLCBwdWJsaWMgRGVidWdnZXJCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIsIHB1YmxpYyBK
U0M6OkRlYnVnZ2VyOjpPYnNlcnZlciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW5zcGVj
dG9yRGVidWdnZXJBZ2VudCk7CkBAIC01Niw3ICs1NSw3IEBAIGNsYXNzIEpTX0VYUE9SVF9QUklW
QVRFIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQgOiBwdWJsaWMgSW5zcGVjdG9yQWdlbnRCYXNlLCBw
dWJsCiBwdWJsaWM6CiAgICAgfkluc3BlY3RvckRlYnVnZ2VyQWdlbnQoKSBvdmVycmlkZTsKIAot
ICAgIHN0YXRpYyBSZWZQdHI8SlNDOjpCcmVha3BvaW50PiBkZWJ1Z2dlckJyZWFrcG9pbnRGcm9t
UGF5bG9hZChFcnJvclN0cmluZyYsIGNvbnN0IEpTT046Ok9iamVjdCogb3B0aW9uc1BheWxvYWQp
OworICAgIHN0YXRpYyBSZWZQdHI8SlNDOjpCcmVha3BvaW50PiBkZWJ1Z2dlckJyZWFrcG9pbnRG
cm9tUGF5bG9hZChQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYm
IG9wdGlvbnMpOwogCiAgICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGJhY2t0cmFjZU9iamVj
dEdyb3VwOwogCkBAIC02NiwzMSArNjUsMzEgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBl
bmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9lbmFibGVkOyB9CiAKICAgICAvLyBEZWJ1Z2dlckJh
Y2tlbmREaXNwYXRjaGVySGFuZGxlcgotICAgIHZvaWQgZW5hYmxlKEVycm9yU3RyaW5nJikgZmlu
YWw7Ci0gICAgdm9pZCBkaXNhYmxlKEVycm9yU3RyaW5nJikgZmluYWw7Ci0gICAgdm9pZCBzZXRB
c3luY1N0YWNrVHJhY2VEZXB0aChFcnJvclN0cmluZyYsIGludCBkZXB0aCkgZmluYWw7Ci0gICAg
dm9pZCBzZXRCcmVha3BvaW50c0FjdGl2ZShFcnJvclN0cmluZyYsIGJvb2wgYWN0aXZlKSBmaW5h
bDsKLSAgICB2b2lkIHNldEJyZWFrcG9pbnRCeVVybChFcnJvclN0cmluZyYsIGludCBsaW5lTnVt
YmVyLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsVVJMLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsVVJM
UmVnZXgsIGNvbnN0IGludCogb3B0aW9uYWxDb2x1bW5OdW1iZXIsIGNvbnN0IEpTT046Ok9iamVj
dCogb3B0aW9ucywgUHJvdG9jb2w6OkRlYnVnZ2VyOjpCcmVha3BvaW50SWQqLCBSZWZQdHI8SlNP
Tjo6QXJyYXlPZjxQcm90b2NvbDo6RGVidWdnZXI6OkxvY2F0aW9uPj4mIGxvY2F0aW9ucykgZmlu
YWw7Ci0gICAgdm9pZCBzZXRCcmVha3BvaW50KEVycm9yU3RyaW5nJiwgY29uc3QgSlNPTjo6T2Jq
ZWN0JiBsb2NhdGlvbiwgY29uc3QgSlNPTjo6T2JqZWN0KiBvcHRpb25zLCBQcm90b2NvbDo6RGVi
dWdnZXI6OkJyZWFrcG9pbnRJZCogb3V0QnJlYWtwb2ludElkLCBSZWZQdHI8UHJvdG9jb2w6OkRl
YnVnZ2VyOjpMb2NhdGlvbj4mIG91dEFjdHVhbExvY2F0aW9uKSBmaW5hbDsKLSAgICB2b2lkIHJl
bW92ZUJyZWFrcG9pbnQoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGJyZWFrcG9pbnRJZGVu
dGlmaWVyKSBmaW5hbDsKLSAgICB2b2lkIGNvbnRpbnVlVW50aWxOZXh0UnVuTG9vcChFcnJvclN0
cmluZyYpIGZpbmFsOwotICAgIHZvaWQgY29udGludWVUb0xvY2F0aW9uKEVycm9yU3RyaW5nJiwg
Y29uc3QgSlNPTjo6T2JqZWN0JiBsb2NhdGlvbikgZmluYWw7Ci0gICAgdm9pZCBzdGVwTmV4dChF
cnJvclN0cmluZyYpIGZpbmFsOwotICAgIHZvaWQgc3RlcE92ZXIoRXJyb3JTdHJpbmcmKSBmaW5h
bDsKLSAgICB2b2lkIHN0ZXBJbnRvKEVycm9yU3RyaW5nJikgZmluYWw7Ci0gICAgdm9pZCBzdGVw
T3V0KEVycm9yU3RyaW5nJikgZmluYWw7Ci0gICAgdm9pZCBwYXVzZShFcnJvclN0cmluZyYpIGZp
bmFsOwotICAgIHZvaWQgcmVzdW1lKEVycm9yU3RyaW5nJikgZmluYWw7Ci0gICAgdm9pZCBzZWFy
Y2hJbkNvbnRlbnQoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHNjcmlwdElELCBjb25zdCBT
dHJpbmcmIHF1ZXJ5LCBjb25zdCBib29sKiBvcHRpb25hbENhc2VTZW5zaXRpdmUsIGNvbnN0IGJv
b2wqIG9wdGlvbmFsSXNSZWdleCwgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkdlbmVy
aWNUeXBlczo6U2VhcmNoTWF0Y2g+PiYpIGZpbmFsOwotICAgIHZvaWQgZ2V0U2NyaXB0U291cmNl
KEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBzY3JpcHRJRCwgU3RyaW5nKiBzY3JpcHRTb3Vy
Y2UpIGZpbmFsOwotICAgIHZvaWQgZ2V0RnVuY3Rpb25EZXRhaWxzKEVycm9yU3RyaW5nJiwgY29u
c3QgU3RyaW5nJiBmdW5jdGlvbklkLCBSZWZQdHI8UHJvdG9jb2w6OkRlYnVnZ2VyOjpGdW5jdGlv
bkRldGFpbHM+JikgZmluYWw7Ci0gICAgdm9pZCBzZXRQYXVzZU9uRGVidWdnZXJTdGF0ZW1lbnRz
KEVycm9yU3RyaW5nJiwgYm9vbCBlbmFibGVkLCBjb25zdCBKU09OOjpPYmplY3QqIG9wdGlvbnMp
IGZpbmFsOwotICAgIHZvaWQgc2V0UGF1c2VPbkV4Y2VwdGlvbnMoRXJyb3JTdHJpbmcmLCBjb25z
dCBTdHJpbmcmIHBhdXNlU3RhdGUsIGNvbnN0IEpTT046Ok9iamVjdCogb3B0aW9ucykgZmluYWw7
Ci0gICAgdm9pZCBzZXRQYXVzZU9uQXNzZXJ0aW9ucyhFcnJvclN0cmluZyYsIGJvb2wgZW5hYmxl
ZCwgY29uc3QgSlNPTjo6T2JqZWN0KiBvcHRpb25zKSBmaW5hbDsKLSAgICB2b2lkIHNldFBhdXNl
T25NaWNyb3Rhc2tzKEVycm9yU3RyaW5nJiwgYm9vbCBlbmFibGVkLCBjb25zdCBKU09OOjpPYmpl
Y3QqIG9wdGlvbnMpIGZpbmFsOwotICAgIHZvaWQgc2V0UGF1c2VGb3JJbnRlcm5hbFNjcmlwdHMo
RXJyb3JTdHJpbmcmLCBib29sIHNob3VsZFBhdXNlKSBmaW5hbDsKLSAgICB2b2lkIGV2YWx1YXRl
T25DYWxsRnJhbWUoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGNhbGxGcmFtZUlkLCBjb25z
dCBTdHJpbmcmIGV4cHJlc3Npb24sIGNvbnN0IFN0cmluZyogb2JqZWN0R3JvdXAsIGNvbnN0IGJv
b2wqIGluY2x1ZGVDb21tYW5kTGluZUFQSSwgY29uc3QgYm9vbCogZG9Ob3RQYXVzZU9uRXhjZXB0
aW9uc0FuZE11dGVDb25zb2xlLCBjb25zdCBib29sKiByZXR1cm5CeVZhbHVlLCBjb25zdCBib29s
KiBnZW5lcmF0ZVByZXZpZXcsIGNvbnN0IGJvb2wqIHNhdmVSZXN1bHQsIGNvbnN0IGJvb2wqIGVt
dWxhdGVVc2VyR2VzdHVyZSwgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+
JiByZXN1bHQsIE9wdGlvbmFsPGJvb2w+JiB3YXNUaHJvd24sIE9wdGlvbmFsPGludD4mIHNhdmVk
UmVzdWx0SW5kZXgpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0U2hvdWxkQmxhY2tib3hVUkwoRXJy
b3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHVybCwgYm9vbCBzaG91bGRCbGFja2JveCwgY29uc3Qg
Ym9vbCogY2FzZVNlbnNpdGl2ZSwgY29uc3QgYm9vbCogaXNSZWdleCkgZmluYWw7CisgICAgUHJv
dG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZW5hYmxlKCkgZmluYWw7CisgICAgUHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8dm9pZD4gZGlzYWJsZSgpIGZpbmFsOworICAgIFByb3RvY29sOjpFcnJv
clN0cmluZ09yPHZvaWQ+IHNldEFzeW5jU3RhY2tUcmFjZURlcHRoKGludCkgZmluYWw7CisgICAg
UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc2V0QnJlYWtwb2ludHNBY3RpdmUoYm9vbCkg
ZmluYWw7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8c3RkOjp0dXBsZTxQcm90b2NvbDo6
RGVidWdnZXI6OkJyZWFrcG9pbnRJZCwgUmVmPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkRlYnVn
Z2VyOjpMb2NhdGlvbj4+Pj4gc2V0QnJlYWtwb2ludEJ5VXJsKGludCBsaW5lTnVtYmVyLCBjb25z
dCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiB1cmxSZWdleCwgT3B0aW9uYWw8aW50PiYmIGNv
bHVtbk51bWJlciwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBvcHRpb25zKSBmaW5hbDsKKyAgICBQ
cm90b2NvbDo6RXJyb3JTdHJpbmdPcjxzdGQ6OnR1cGxlPFByb3RvY29sOjpEZWJ1Z2dlcjo6QnJl
YWtwb2ludElkLCBSZWY8UHJvdG9jb2w6OkRlYnVnZ2VyOjpMb2NhdGlvbj4+PiBzZXRCcmVha3Bv
aW50KFJlZjxKU09OOjpPYmplY3Q+JiYgbG9jYXRpb24sIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYg
b3B0aW9ucykgZmluYWw7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gcmVtb3Zl
QnJlYWtwb2ludChjb25zdCBQcm90b2NvbDo6RGVidWdnZXI6OkJyZWFrcG9pbnRJZCYpIGZpbmFs
OworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGNvbnRpbnVlVW50aWxOZXh0UnVu
TG9vcCgpIGZpbmFsOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGNvbnRpbnVl
VG9Mb2NhdGlvbihSZWY8SlNPTjo6T2JqZWN0PiYmIGxvY2F0aW9uKSBmaW5hbDsKKyAgICBQcm90
b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzdGVwTmV4dCgpIGZpbmFsOworICAgIFByb3RvY29s
OjpFcnJvclN0cmluZ09yPHZvaWQ+IHN0ZXBPdmVyKCkgZmluYWw7CisgICAgUHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8dm9pZD4gc3RlcEludG8oKSBmaW5hbDsKKyAgICBQcm90b2NvbDo6RXJyb3JT
dHJpbmdPcjx2b2lkPiBzdGVwT3V0KCkgZmluYWw7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5n
T3I8dm9pZD4gcGF1c2UoKSBmaW5hbDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lk
PiByZXN1bWUoKSBmaW5hbDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SlNPTjo6
QXJyYXlPZjxQcm90b2NvbDo6R2VuZXJpY1R5cGVzOjpTZWFyY2hNYXRjaD4+PiBzZWFyY2hJbkNv
bnRlbnQoY29uc3QgUHJvdG9jb2w6OkRlYnVnZ2VyOjpTY3JpcHRJZCYsIGNvbnN0IFN0cmluZyYg
cXVlcnksIE9wdGlvbmFsPGJvb2w+JiYgY2FzZVNlbnNpdGl2ZSwgT3B0aW9uYWw8Ym9vbD4mJiBp
c1JlZ2V4KSBmaW5hbDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxTdHJpbmc+IGdldFNj
cmlwdFNvdXJjZShjb25zdCBQcm90b2NvbDo6RGVidWdnZXI6OlNjcmlwdElkJikgZmluYWw7Cisg
ICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPFByb3RvY29sOjpEZWJ1Z2dlcjo6RnVuY3Rp
b25EZXRhaWxzPj4gZ2V0RnVuY3Rpb25EZXRhaWxzKGNvbnN0IFN0cmluZyYgZnVuY3Rpb25JZCkg
ZmluYWw7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc2V0UGF1c2VPbkRlYnVn
Z2VyU3RhdGVtZW50cyhib29sIGVuYWJsZWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgb3B0aW9u
cykgZmluYWw7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc2V0UGF1c2VPbkV4
Y2VwdGlvbnMoY29uc3QgU3RyaW5nJiBzdGF0ZSwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBvcHRp
b25zKSBmaW5hbDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzZXRQYXVzZU9u
QXNzZXJ0aW9ucyhib29sIGVuYWJsZWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgb3B0aW9ucykg
ZmluYWw7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc2V0UGF1c2VPbk1pY3Jv
dGFza3MoYm9vbCBlbmFibGVkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIG9wdGlvbnMpIGZpbmFs
OworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHNldFBhdXNlRm9ySW50ZXJuYWxT
Y3JpcHRzKGJvb2wgc2hvdWxkUGF1c2UpIGZpbmFsOworICAgIFByb3RvY29sOjpFcnJvclN0cmlu
Z09yPHN0ZDo6dHVwbGU8UmVmPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+LCBPcHRp
b25hbDxib29sPiAvKiB3YXNUaHJvd24gKi8sIE9wdGlvbmFsPGludD4gLyogc2F2ZWRSZXN1bHRJ
bmRleCAqLz4+IGV2YWx1YXRlT25DYWxsRnJhbWUoY29uc3QgUHJvdG9jb2w6OkRlYnVnZ2VyOjpD
YWxsRnJhbWVJZCYsIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgY29uc3QgU3RyaW5nJiBvYmpl
Y3RHcm91cCwgT3B0aW9uYWw8Ym9vbD4mJiBpbmNsdWRlQ29tbWFuZExpbmVBUEksIE9wdGlvbmFs
PGJvb2w+JiYgZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xlLCBPcHRpb25hbDxi
b29sPiYmIHJldHVybkJ5VmFsdWUsIE9wdGlvbmFsPGJvb2w+JiYgZ2VuZXJhdGVQcmV2aWV3LCBP
cHRpb25hbDxib29sPiYmIHNhdmVSZXN1bHQsIE9wdGlvbmFsPGJvb2w+JiYgZW11bGF0ZVVzZXJH
ZXN0dXJlKSBvdmVycmlkZTsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzZXRT
aG91bGRCbGFja2JveFVSTChjb25zdCBTdHJpbmcmIHVybCwgYm9vbCBzaG91bGRCbGFja2JveCwg
T3B0aW9uYWw8Ym9vbD4mJiBjYXNlU2Vuc2l0aXZlLCBPcHRpb25hbDxib29sPiYmIGlzUmVnZXgp
IGZpbmFsOwogCiAgICAgLy8gSlNDOjpEZWJ1Z2dlcjo6T2JzZXJ2ZXIKICAgICB2b2lkIGRpZFBh
cnNlU291cmNlKEpTQzo6U291cmNlSUQsIGNvbnN0IEpTQzo6RGVidWdnZXI6OlNjcmlwdCYpIGZp
bmFsOwpAQCAtMTQyLDExICsxNDEsMTEgQEAgcHVibGljOgogCiBwcm90ZWN0ZWQ6CiAgICAgSW5z
cGVjdG9yRGVidWdnZXJBZ2VudChBZ2VudENvbnRleHQmKTsKLSAgICB2aXJ0dWFsIHZvaWQgZW5h
YmxlKCk7Ci0gICAgdmlydHVhbCB2b2lkIGRpc2FibGUoYm9vbCBpc0JlaW5nRGVzdHJveWVkKTsK
KyAgICB2aXJ0dWFsIHZvaWQgaW50ZXJuYWxFbmFibGUoKTsKKyAgICB2aXJ0dWFsIHZvaWQgaW50
ZXJuYWxEaXNhYmxlKGJvb2wgaXNCZWluZ0Rlc3Ryb3llZCk7CiAKICAgICBJbmplY3RlZFNjcmlw
dE1hbmFnZXImIGluamVjdGVkU2NyaXB0TWFuYWdlcigpIGNvbnN0IHsgcmV0dXJuIG1faW5qZWN0
ZWRTY3JpcHRNYW5hZ2VyOyB9Ci0gICAgdmlydHVhbCBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNj
cmlwdEZvckV2YWwoRXJyb3JTdHJpbmcmLCBjb25zdCBpbnQqIGV4ZWN1dGlvbkNvbnRleHRJZCkg
PSAwOworICAgIHZpcnR1YWwgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHRGb3JFdmFsKFBy
b3RvY29sOjpFcnJvclN0cmluZyYsIE9wdGlvbmFsPFByb3RvY29sOjpSdW50aW1lOjpFeGVjdXRp
b25Db250ZXh0SWQ+JiYpID0gMDsKIAogICAgIEpTQzo6RGVidWdnZXImIGRlYnVnZ2VyKCkgeyBy
ZXR1cm4gbV9kZWJ1Z2dlcjsgfQogCkBAIC0xNjYsOCArMTY1LDggQEAgcHJpdmF0ZToKICAgICBj
bGFzcyBQcm90b2NvbEJyZWFrcG9pbnQgewogICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKICAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBPcHRpb25hbDxQcm90b2NvbEJyZWFrcG9p
bnQ+IGZyb21QYXlsb2FkKEVycm9yU3RyaW5nJiwgSlNDOjpTb3VyY2VJRCwgdW5zaWduZWQgbGlu
ZU51bWJlciwgdW5zaWduZWQgY29sdW1uTnVtYmVyLCBjb25zdCBKU09OOjpPYmplY3QqIG9wdGlv
bnNQYXlsb2FkID0gbnVsbHB0cik7Ci0gICAgICAgIHN0YXRpYyBPcHRpb25hbDxQcm90b2NvbEJy
ZWFrcG9pbnQ+IGZyb21QYXlsb2FkKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiB1cmwsIGJv
b2wgaXNSZWdleCwgdW5zaWduZWQgbGluZU51bWJlciwgdW5zaWduZWQgY29sdW1uTnVtYmVyLCBj
b25zdCBKU09OOjpPYmplY3QqIG9wdGlvbnNQYXlsb2FkID0gbnVsbHB0cik7CisgICAgICAgIHN0
YXRpYyBPcHRpb25hbDxQcm90b2NvbEJyZWFrcG9pbnQ+IGZyb21QYXlsb2FkKFByb3RvY29sOjpF
cnJvclN0cmluZyYsIEpTQzo6U291cmNlSUQsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIHVuc2lnbmVk
IGNvbHVtbk51bWJlciwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBvcHRpb25zID0gbnVsbHB0cik7
CisgICAgICAgIHN0YXRpYyBPcHRpb25hbDxQcm90b2NvbEJyZWFrcG9pbnQ+IGZyb21QYXlsb2Fk
KFByb3RvY29sOjpFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgdXJsLCBib29sIGlzUmVnZXgs
IHVuc2lnbmVkIGxpbmVOdW1iZXIsIHVuc2lnbmVkIGNvbHVtbk51bWJlciwgUmVmUHRyPEpTT046
Ok9iamVjdD4mJiBvcHRpb25zID0gbnVsbHB0cik7CiAKICAgICAgICAgUHJvdG9jb2xCcmVha3Bv
aW50KCk7CiAgICAgICAgIFByb3RvY29sQnJlYWtwb2ludChKU0M6OlNvdXJjZUlELCB1bnNpZ25l
ZCBsaW5lTnVtYmVyLCB1bnNpZ25lZCBjb2x1bW5OdW1iZXIsIGNvbnN0IFN0cmluZyYgY29uZGl0
aW9uID0gbnVsbFN0cmluZygpLCBKU0M6OkJyZWFrcG9pbnQ6OkFjdGlvbnNWZWN0b3ImJiBhY3Rp
b25zID0geyB9LCBib29sIGF1dG9Db250aW51ZSA9IGZhbHNlLCBzaXplX3QgaWdub3JlQ291bnQg
PSAwKTsKQEAgLTE3NSwxMiArMTc0LDEyIEBAIHByaXZhdGU6CiAKICAgICAgICAgUmVmPEpTQzo6
QnJlYWtwb2ludD4gY3JlYXRlRGVidWdnZXJCcmVha3BvaW50KEpTQzo6QnJlYWtwb2ludElELCBK
U0M6OlNvdXJjZUlEKSBjb25zdDsKIAotICAgICAgICBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29s
OjpEZWJ1Z2dlcjo6QnJlYWtwb2ludElkJiBpZCgpIGNvbnN0IHsgcmV0dXJuIG1faWQ7IH0KKyAg
ICAgICAgY29uc3QgUHJvdG9jb2w6OkRlYnVnZ2VyOjpCcmVha3BvaW50SWQmIGlkKCkgY29uc3Qg
eyByZXR1cm4gbV9pZDsgfQogCiAgICAgICAgIGJvb2wgbWF0Y2hlc1NjcmlwdFVSTChjb25zdCBT
dHJpbmcmKSBjb25zdDsKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRlYnVnZ2VyOjpCcmVha3BvaW50SWQgbV9pZDsKKyAgICAgICAgUHJvdG9jb2w6OkRlYnVn
Z2VyOjpCcmVha3BvaW50SWQgbV9pZDsKIAogI2lmIEFTU0VSVF9FTkFCTEVECiAgICAgICAgIEpT
Qzo6U291cmNlSUQgbV9zb3VyY2VJRCB7IEpTQzo6bm9Tb3VyY2VJRCB9OwpAQCAtMjAyLDcgKzIw
MSw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBzZXRCcmVha3BvaW50KEpTQzo6QnJlYWtwb2ludCYp
OwogICAgIHZvaWQgZGlkU2V0QnJlYWtwb2ludChQcm90b2NvbEJyZWFrcG9pbnQmLCBKU0M6OkJy
ZWFrcG9pbnQmKTsKIAotICAgIGJvb2wgYXNzZXJ0UGF1c2VkKEVycm9yU3RyaW5nJik7CisgICAg
Ym9vbCBhc3NlcnRQYXVzZWQoUHJvdG9jb2w6OkVycm9yU3RyaW5nJik7CiAgICAgdm9pZCBjbGVh
ckRlYnVnZ2VyQnJlYWtwb2ludFN0YXRlKCk7CiAgICAgdm9pZCBjbGVhckluc3BlY3RvckJyZWFr
cG9pbnRTdGF0ZSgpOwogICAgIHZvaWQgY2xlYXJQYXVzZURldGFpbHMoKTsKQEAgLTI0OCw4ICsy
NDcsOCBAQCBwcml2YXRlOgogICAgIEpTQzo6SlNHbG9iYWxPYmplY3QqIG1fcGF1c2VkR2xvYmFs
T2JqZWN0IHsgbnVsbHB0ciB9OwogICAgIEpTQzo6U3Ryb25nPEpTQzo6VW5rbm93bj4gbV9jdXJy
ZW50Q2FsbFN0YWNrOwogCi0gICAgSGFzaE1hcDxJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dl
cjo6QnJlYWtwb2ludElkLCBQcm90b2NvbEJyZWFrcG9pbnQ+IG1fcHJvdG9jb2xCcmVha3BvaW50
Rm9yUHJvdG9jb2xCcmVha3BvaW50SUQ7Ci0gICAgSGFzaE1hcDxJbnNwZWN0b3I6OlByb3RvY29s
OjpEZWJ1Z2dlcjo6QnJlYWtwb2ludElkLCBKU0M6OkJyZWFrcG9pbnRzVmVjdG9yPiBtX2RlYnVn
Z2VyQnJlYWtwb2ludHNGb3JQcm90b2NvbEJyZWFrcG9pbnRJRDsKKyAgICBIYXNoTWFwPFByb3Rv
Y29sOjpEZWJ1Z2dlcjo6QnJlYWtwb2ludElkLCBQcm90b2NvbEJyZWFrcG9pbnQ+IG1fcHJvdG9j
b2xCcmVha3BvaW50Rm9yUHJvdG9jb2xCcmVha3BvaW50SUQ7CisgICAgSGFzaE1hcDxQcm90b2Nv
bDo6RGVidWdnZXI6OkJyZWFrcG9pbnRJZCwgSlNDOjpCcmVha3BvaW50c1ZlY3Rvcj4gbV9kZWJ1
Z2dlckJyZWFrcG9pbnRzRm9yUHJvdG9jb2xCcmVha3BvaW50SUQ7CiAgICAgSlNDOjpCcmVha3Bv
aW50SUQgbV9uZXh0RGVidWdnZXJCcmVha3BvaW50SUQgeyBKU0M6Om5vQnJlYWtwb2ludElEICsg
MSB9OwogCiAgICAgUmVmUHRyPEpTQzo6QnJlYWtwb2ludD4gbV9jb250aW51ZVRvTG9jYXRpb25E
ZWJ1Z2dlckJyZWFrcG9pbnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL2FnZW50cy9JbnNwZWN0b3JIZWFwQWdlbnQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9ySGVhcEFnZW50LmNwcAppbmRleCA4YzYyMWFk
NDFjNGRhNTAwNDNkMzAyMjAwYTQ2ZmFlOWVmYzk3MThjLi44NWNlZDlmM2RmNjIyMzAxYjk1ZTMz
ZTQ5MzVjYmJmMTYyYjdlMzMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL2FnZW50cy9JbnNwZWN0b3JIZWFwQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckhlYXBBZ2VudC5jcHAKQEAgLTU2LDI4
ICs1NiwyNSBAQCB2b2lkIEluc3BlY3RvckhlYXBBZ2VudDo6ZGlkQ3JlYXRlRnJvbnRlbmRBbmRC
YWNrZW5kKEZyb250ZW5kUm91dGVyKiwgQmFja2VuZERpcwogCiB2b2lkIEluc3BlY3RvckhlYXBB
Z2VudDo6d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoRGlzY29ubmVjdFJlYXNvbikKIHsK
LSAgICBFcnJvclN0cmluZyBpZ25vcmVkOwotICAgIGRpc2FibGUoaWdub3JlZCk7CisgICAgZGlz
YWJsZSgpOwogfQogCi12b2lkIEluc3BlY3RvckhlYXBBZ2VudDo6ZW5hYmxlKEVycm9yU3RyaW5n
JiBlcnJvclN0cmluZykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3Rvckhl
YXBBZ2VudDo6ZW5hYmxlKCkKIHsKLSAgICBpZiAobV9lbmFibGVkKSB7Ci0gICAgICAgIGVycm9y
U3RyaW5nID0gIkhlYXAgZG9tYWluIGFscmVhZHkgZW5hYmxlZCJfczsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KKyAgICBpZiAobV9lbmFibGVkKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0
ZWQoIkhlYXAgZG9tYWluIGFscmVhZHkgZW5hYmxlZCJfcyk7CiAKICAgICBtX2VuYWJsZWQgPSB0
cnVlOwogCiAgICAgbV9lbnZpcm9ubWVudC52bSgpLmhlYXAuYWRkT2JzZXJ2ZXIodGhpcyk7CisK
KyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckhlYXBBZ2VudDo6ZGlzYWJsZShF
cnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJ
bnNwZWN0b3JIZWFwQWdlbnQ6OmRpc2FibGUoKQogewotICAgIGlmICghbV9lbmFibGVkKSB7Ci0g
ICAgICAgIGVycm9yU3RyaW5nID0gIkhlYXAgZG9tYWluIGFscmVhZHkgZGlzYWJsZWQiX3M7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKCFtX2VuYWJsZWQpCisgICAgICAgIHJldHVy
biBtYWtlVW5leHBlY3RlZCgiSGVhcCBkb21haW4gYWxyZWFkeSBkaXNhYmxlZCJfcyk7CiAKICAg
ICBtX2VuYWJsZWQgPSBmYWxzZTsKICAgICBtX3RyYWNraW5nID0gZmFsc2U7CkBAIC04NSwxNyAr
ODIsMjEgQEAgdm9pZCBJbnNwZWN0b3JIZWFwQWdlbnQ6OmRpc2FibGUoRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nKQogICAgIG1fZW52aXJvbm1lbnQudm0oKS5oZWFwLnJlbW92ZU9ic2VydmVyKHRo
aXMpOwogCiAgICAgY2xlYXJIZWFwU25hcHNob3RzKCk7CisKKyAgICByZXR1cm4geyB9OwogfQog
Ci12b2lkIEluc3BlY3RvckhlYXBBZ2VudDo6Z2MoRXJyb3JTdHJpbmcmKQorUHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9ySGVhcEFnZW50OjpnYygpCiB7CiAgICAgVk0mIHZt
ID0gbV9lbnZpcm9ubWVudC52bSgpOwogICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKICAgICBz
YW5pdGl6ZVN0YWNrRm9yVk0odm0pOwogICAgIHZtLmhlYXAuY29sbGVjdE5vdyhTeW5jLCBDb2xs
ZWN0aW9uU2NvcGU6OkZ1bGwpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0
b3JIZWFwQWdlbnQ6OnNuYXBzaG90KEVycm9yU3RyaW5nJiwgZG91YmxlKiB0aW1lc3RhbXAsIFN0
cmluZyogc25hcHNob3REYXRhKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8c3RkOjp0dXBsZTxk
b3VibGUsIFByb3RvY29sOjpIZWFwOjpIZWFwU25hcHNob3REYXRhPj4gSW5zcGVjdG9ySGVhcEFn
ZW50OjpzbmFwc2hvdCgpCiB7CiAgICAgVk0mIHZtID0gbV9lbnZpcm9ubWVudC52bSgpOwogICAg
IEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKQEAgLTEwMyw4ICsxMDQsOCBAQCB2b2lkIEluc3BlY3Rv
ckhlYXBBZ2VudDo6c25hcHNob3QoRXJyb3JTdHJpbmcmLCBkb3VibGUqIHRpbWVzdGFtcCwgU3Ry
aW5nKiBzbmFwcwogICAgIEhlYXBTbmFwc2hvdEJ1aWxkZXIgc25hcHNob3RCdWlsZGVyKHZtLmVu
c3VyZUhlYXBQcm9maWxlcigpKTsKICAgICBzbmFwc2hvdEJ1aWxkZXIuYnVpbGRTbmFwc2hvdCgp
OwogCi0gICAgKnRpbWVzdGFtcCA9IG1fZW52aXJvbm1lbnQuZXhlY3V0aW9uU3RvcHdhdGNoKCku
ZWxhcHNlZFRpbWUoKS5zZWNvbmRzKCk7Ci0gICAgKnNuYXBzaG90RGF0YSA9IHNuYXBzaG90QnVp
bGRlci5qc29uKFsmXSAoY29uc3QgSGVhcFNuYXBzaG90Tm9kZSYgbm9kZSkgeworICAgIGF1dG8g
dGltZXN0YW1wID0gbV9lbnZpcm9ubWVudC5leGVjdXRpb25TdG9wd2F0Y2goKS5lbGFwc2VkVGlt
ZSgpLnNlY29uZHMoKTsKKyAgICBhdXRvIHNuYXBzaG90RGF0YSA9IHNuYXBzaG90QnVpbGRlci5q
c29uKFsmXSAoY29uc3QgSGVhcFNuYXBzaG90Tm9kZSYgbm9kZSkgewogICAgICAgICBpZiAoU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgPSBub2RlLmNlbGwtPnN0cnVjdHVyZSh2bSkpIHsKICAgICAgICAg
ICAgIGlmIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gc3RydWN0dXJlLT5nbG9iYWxP
YmplY3QoKSkgewogICAgICAgICAgICAgICAgIGlmICghbV9lbnZpcm9ubWVudC5jYW5BY2Nlc3NJ
bnNwZWN0ZWRTY3JpcHRTdGF0ZShnbG9iYWxPYmplY3QpKQpAQCAtMTEzLDM3ICsxMTQsNDUgQEAg
dm9pZCBJbnNwZWN0b3JIZWFwQWdlbnQ6OnNuYXBzaG90KEVycm9yU3RyaW5nJiwgZG91YmxlKiB0
aW1lc3RhbXAsIFN0cmluZyogc25hcHMKICAgICAgICAgfQogICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICB9KTsKKworICAgIHJldHVybiB7IHsgdGltZXN0YW1wLCBzbmFwc2hvdERhdGEgfSB9Owog
fQogCi12b2lkIEluc3BlY3RvckhlYXBBZ2VudDo6c3RhcnRUcmFja2luZyhFcnJvclN0cmluZyYg
ZXJyb3JTdHJpbmcpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JIZWFw
QWdlbnQ6OnN0YXJ0VHJhY2tpbmcoKQogewogICAgIGlmIChtX3RyYWNraW5nKQotICAgICAgICBy
ZXR1cm47CisgICAgICAgIHJldHVybiB7IH07CiAKICAgICBtX3RyYWNraW5nID0gdHJ1ZTsKIAot
ICAgIGRvdWJsZSB0aW1lc3RhbXA7Ci0gICAgU3RyaW5nIHNuYXBzaG90RGF0YTsKLSAgICBzbmFw
c2hvdChlcnJvclN0cmluZywgJnRpbWVzdGFtcCwgJnNuYXBzaG90RGF0YSk7CisgICAgYXV0byBy
ZXN1bHQgPSBzbmFwc2hvdCgpOworICAgIGlmICghcmVzdWx0KQorICAgICAgICByZXR1cm4gbWFr
ZVVuZXhwZWN0ZWQoV1RGTW92ZShyZXN1bHQuZXJyb3IoKSkpOwogCisgICAgYXV0byBbdGltZXN0
YW1wLCBzbmFwc2hvdERhdGFdID0gV1RGTW92ZShyZXN1bHQudmFsdWUoKSk7CiAgICAgbV9mcm9u
dGVuZERpc3BhdGNoZXItPnRyYWNraW5nU3RhcnQodGltZXN0YW1wLCBzbmFwc2hvdERhdGEpOwor
CisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JIZWFwQWdlbnQ6OnN0b3BUcmFj
a2luZyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2
b2lkPiBJbnNwZWN0b3JIZWFwQWdlbnQ6OnN0b3BUcmFja2luZygpCiB7CiAgICAgaWYgKCFtX3Ry
YWNraW5nKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB7IH07CiAKICAgICBtX3Ry
YWNraW5nID0gZmFsc2U7CiAKLSAgICBkb3VibGUgdGltZXN0YW1wOwotICAgIFN0cmluZyBzbmFw
c2hvdERhdGE7Ci0gICAgc25hcHNob3QoZXJyb3JTdHJpbmcsICZ0aW1lc3RhbXAsICZzbmFwc2hv
dERhdGEpOworICAgIGF1dG8gcmVzdWx0ID0gc25hcHNob3QoKTsKKyAgICBpZiAoIXJlc3VsdCkK
KyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKFdURk1vdmUocmVzdWx0LmVycm9yKCkpKTsK
IAorICAgIGF1dG8gW3RpbWVzdGFtcCwgc25hcHNob3REYXRhXSA9IFdURk1vdmUocmVzdWx0LnZh
bHVlKCkpOwogICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT50cmFja2luZ0NvbXBsZXRlKHRpbWVz
dGFtcCwgc25hcHNob3REYXRhKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLU9wdGlvbmFsPEhl
YXBTbmFwc2hvdE5vZGU+IEluc3BlY3RvckhlYXBBZ2VudDo6bm9kZUZvckhlYXBPYmplY3RJZGVu
dGlmaWVyKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgdW5zaWduZWQgaGVhcE9iamVjdElkZW50
aWZpZXIpCitPcHRpb25hbDxIZWFwU25hcHNob3ROb2RlPiBJbnNwZWN0b3JIZWFwQWdlbnQ6Om5v
ZGVGb3JIZWFwT2JqZWN0SWRlbnRpZmllcihQcm90b2NvbDo6RXJyb3JTdHJpbmcmIGVycm9yU3Ry
aW5nLCB1bnNpZ25lZCBoZWFwT2JqZWN0SWRlbnRpZmllcikKIHsKICAgICBIZWFwUHJvZmlsZXIq
IGhlYXBQcm9maWxlciA9IG1fZW52aXJvbm1lbnQudm0oKS5oZWFwUHJvZmlsZXIoKTsKICAgICBp
ZiAoIWhlYXBQcm9maWxlcikgewpAQCAtMTY2LDggKzE3NSwxMCBAQCBPcHRpb25hbDxIZWFwU25h
cHNob3ROb2RlPiBJbnNwZWN0b3JIZWFwQWdlbnQ6Om5vZGVGb3JIZWFwT2JqZWN0SWRlbnRpZmll
cihFcnJvcgogICAgIHJldHVybiBvcHRpb25hbE5vZGU7CiB9CiAKLXZvaWQgSW5zcGVjdG9ySGVh
cEFnZW50OjpnZXRQcmV2aWV3KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IGhlYXBPYmpl
Y3RJZCwgT3B0aW9uYWw8U3RyaW5nPiYgcmVzdWx0U3RyaW5nLCBSZWZQdHI8UHJvdG9jb2w6OkRl
YnVnZ2VyOjpGdW5jdGlvbkRldGFpbHM+JiBmdW5jdGlvbkRldGFpbHMsIFJlZlB0cjxQcm90b2Nv
bDo6UnVudGltZTo6T2JqZWN0UHJldmlldz4mIG9iamVjdFByZXZpZXcpCitQcm90b2NvbDo6RXJy
b3JTdHJpbmdPcjxzdGQ6OnR1cGxlPFN0cmluZywgUmVmUHRyPFByb3RvY29sOjpEZWJ1Z2dlcjo6
RnVuY3Rpb25EZXRhaWxzPiwgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpPYmplY3RQcmV2aWV3
Pj4+IEluc3BlY3RvckhlYXBBZ2VudDo6Z2V0UHJldmlldyhpbnQgaGVhcE9iamVjdElkKQogewor
ICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIC8vIFByZXZlbnQg
dGhlIGNlbGwgZnJvbSBnZXR0aW5nIGNvbGxlY3RlZCBhcyB3ZSBsb29rIGl0IHVwLgogICAgIFZN
JiB2bSA9IG1fZW52aXJvbm1lbnQudm0oKTsKICAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CkBA
IC0xNzYsNTMgKzE4Nyw0OCBAQCB2b2lkIEluc3BlY3RvckhlYXBBZ2VudDo6Z2V0UHJldmlldyhF
cnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBoZWFwT2JqZWN0SWQsCiAgICAgdW5zaWduZWQg
aGVhcE9iamVjdElkZW50aWZpZXIgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaGVhcE9iamVjdElk
KTsKICAgICBjb25zdCBPcHRpb25hbDxIZWFwU25hcHNob3ROb2RlPiBvcHRpb25hbE5vZGUgPSBu
b2RlRm9ySGVhcE9iamVjdElkZW50aWZpZXIoZXJyb3JTdHJpbmcsIGhlYXBPYmplY3RJZGVudGlm
aWVyKTsKICAgICBpZiAoIW9wdGlvbmFsTm9kZSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICBy
ZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCiAgICAgLy8gU3RyaW5nIHByZXZp
ZXcuCiAgICAgSlNDZWxsKiBjZWxsID0gb3B0aW9uYWxOb2RlLT5jZWxsOwotICAgIGlmIChjZWxs
LT5pc1N0cmluZygpKSB7Ci0gICAgICAgIHJlc3VsdFN0cmluZyA9IGFzU3RyaW5nKGNlbGwpLT50
cnlHZXRWYWx1ZSgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmIChjZWxsLT5pc1N0
cmluZygpKQorICAgICAgICByZXR1cm4geyB7IGFzU3RyaW5nKGNlbGwpLT50cnlHZXRWYWx1ZSgp
LCBudWxscHRyLCBudWxscHRyIH0gfTsKIAogICAgIC8vIEJpZ0ludCBwcmV2aWV3LgotICAgIGlm
IChjZWxsLT5pc0hlYXBCaWdJbnQoKSkgewotICAgICAgICByZXN1bHRTdHJpbmcgPSBKU0JpZ0lu
dDo6dHJ5R2V0U3RyaW5nKHZtLCBhc0hlYXBCaWdJbnQoY2VsbCksIDEwKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KKyAgICBpZiAoY2VsbC0+aXNIZWFwQmlnSW50KCkpCisgICAgICAgIHJldHVy
biB7IHsgSlNCaWdJbnQ6OnRyeUdldFN0cmluZyh2bSwgYXNIZWFwQmlnSW50KGNlbGwpLCAxMCks
IG51bGxwdHIsIG51bGxwdHIgfSB9OwogCiAgICAgLy8gRklYTUU6IFByb3ZpZGUgcHJldmlldyBp
bmZvcm1hdGlvbiBmb3IgSW50ZXJuYWwgT2JqZWN0cz8gQ29kZUJsb2NrLCBFeGVjdXRhYmxlLCBl
dGMuCiAKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGNlbGwtPnN0cnVjdHVyZSh2bSk7Ci0g
ICAgaWYgKCFzdHJ1Y3R1cmUpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiVW5hYmxlIHRvIGdl
dCBvYmplY3QgZGV0YWlscyAtIFN0cnVjdHVyZSJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
KyAgICBpZiAoIXN0cnVjdHVyZSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJVbmFi
bGUgdG8gZ2V0IG9iamVjdCBkZXRhaWxzIC0gU3RydWN0dXJlIl9zKTsKIAogICAgIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QgPSBzdHJ1Y3R1cmUtPmdsb2JhbE9iamVjdCgpOwotICAgIGlm
ICghZ2xvYmFsT2JqZWN0KSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIlVuYWJsZSB0byBnZXQg
b2JqZWN0IGRldGFpbHMgLSBHbG9iYWxPYmplY3QiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
CisgICAgaWYgKCFnbG9iYWxPYmplY3QpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgi
VW5hYmxlIHRvIGdldCBvYmplY3QgZGV0YWlscyAtIEdsb2JhbE9iamVjdCJfcyk7CiAKICAgICBJ
bmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdCA9IG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmlu
amVjdGVkU2NyaXB0Rm9yKGdsb2JhbE9iamVjdCk7Ci0gICAgaWYgKGluamVjdGVkU2NyaXB0Lmhh
c05vVmFsdWUoKSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJVbmFibGUgdG8gZ2V0IG9iamVj
dCBkZXRhaWxzIC0gSW5qZWN0ZWRTY3JpcHQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Cisg
ICAgaWYgKGluamVjdGVkU2NyaXB0Lmhhc05vVmFsdWUoKSkKKyAgICAgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKCJVbmFibGUgdG8gZ2V0IG9iamVjdCBkZXRhaWxzIC0gSW5qZWN0ZWRTY3JpcHQi
X3MpOwogCiAgICAgLy8gRnVuY3Rpb24gcHJldmlldy4KICAgICBpZiAoY2VsbC0+aW5oZXJpdHM8
SlNGdW5jdGlvbj4odm0pKSB7CisgICAgICAgIFJlZlB0cjxQcm90b2NvbDo6RGVidWdnZXI6OkZ1
bmN0aW9uRGV0YWlscz4gZnVuY3Rpb25EZXRhaWxzOwogICAgICAgICBpbmplY3RlZFNjcmlwdC5m
dW5jdGlvbkRldGFpbHMoZXJyb3JTdHJpbmcsIGNlbGwsIGZ1bmN0aW9uRGV0YWlscyk7Ci0gICAg
ICAgIHJldHVybjsKKyAgICAgICAgaWYgKCFmdW5jdGlvbkRldGFpbHMpCisgICAgICAgICAgICBy
ZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOworICAgICAgICByZXR1cm4geyB7IG51
bGxTdHJpbmcoKSwgZnVuY3Rpb25EZXRhaWxzLCBudWxscHRyIH0gfTsKICAgICB9CiAKICAgICAv
LyBPYmplY3QgcHJldmlldy4KLSAgICBvYmplY3RQcmV2aWV3ID0gaW5qZWN0ZWRTY3JpcHQucHJl
dmlld1ZhbHVlKGNlbGwpOworICAgIHJldHVybiB7IHsgbnVsbFN0cmluZygpLCBudWxscHRyLCBp
bmplY3RlZFNjcmlwdC5wcmV2aWV3VmFsdWUoY2VsbCkgfSB9OwogfQogCi12b2lkIEluc3BlY3Rv
ckhlYXBBZ2VudDo6Z2V0UmVtb3RlT2JqZWN0KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50
IGhlYXBPYmplY3RJZCwgY29uc3QgU3RyaW5nKiBvcHRpb25hbE9iamVjdEdyb3VwLCBSZWZQdHI8
UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3VsdCkKK1Byb3RvY29sOjpFcnJv
clN0cmluZ09yPFJlZjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0Pj4gSW5zcGVjdG9y
SGVhcEFnZW50OjpnZXRSZW1vdGVPYmplY3QoaW50IGhlYXBPYmplY3RJZCwgY29uc3QgU3RyaW5n
JiBvYmplY3RHcm91cCkKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7
CisKICAgICAvLyBQcmV2ZW50IHRoZSBjZWxsIGZyb20gZ2V0dGluZyBjb2xsZWN0ZWQgYXMgd2Ug
bG9vayBpdCB1cC4KICAgICBWTSYgdm0gPSBtX2Vudmlyb25tZW50LnZtKCk7CiAgICAgSlNMb2Nr
SG9sZGVyIGxvY2sodm0pOwpAQCAtMjMxLDI5ICsyMzcsMjYgQEAgdm9pZCBJbnNwZWN0b3JIZWFw
QWdlbnQ6OmdldFJlbW90ZU9iamVjdChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBoZWFw
T2JqZWMKICAgICB1bnNpZ25lZCBoZWFwT2JqZWN0SWRlbnRpZmllciA9IHN0YXRpY19jYXN0PHVu
c2lnbmVkPihoZWFwT2JqZWN0SWQpOwogICAgIGNvbnN0IE9wdGlvbmFsPEhlYXBTbmFwc2hvdE5v
ZGU+IG9wdGlvbmFsTm9kZSA9IG5vZGVGb3JIZWFwT2JqZWN0SWRlbnRpZmllcihlcnJvclN0cmlu
ZywgaGVhcE9iamVjdElkZW50aWZpZXIpOwogICAgIGlmICghb3B0aW9uYWxOb2RlKQotICAgICAg
ICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAK
ICAgICBKU0NlbGwqIGNlbGwgPSBvcHRpb25hbE5vZGUtPmNlbGw7CiAgICAgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPSBjZWxsLT5zdHJ1Y3R1cmUodm0pOwotICAgIGlmICghc3RydWN0dXJlKSB7Ci0g
ICAgICAgIGVycm9yU3RyaW5nID0gIlVuYWJsZSB0byBnZXQgb2JqZWN0IGRldGFpbHMgLSBTdHJ1
Y3R1cmUiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKCFzdHJ1Y3R1cmUpCisg
ICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiVW5hYmxlIHRvIGdldCBvYmplY3QgZGV0YWls
cyAtIFN0cnVjdHVyZSJfcyk7CiAKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0g
c3RydWN0dXJlLT5nbG9iYWxPYmplY3QoKTsKLSAgICBpZiAoIWdsb2JhbE9iamVjdCkgewotICAg
ICAgICBlcnJvclN0cmluZyA9ICJVbmFibGUgdG8gZ2V0IG9iamVjdCBkZXRhaWxzIC0gR2xvYmFs
T2JqZWN0Il9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghZ2xvYmFsT2JqZWN0
KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIlVuYWJsZSB0byBnZXQgb2JqZWN0IGRl
dGFpbHMgLSBHbG9iYWxPYmplY3QiX3MpOwogCiAgICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRT
Y3JpcHQgPSBtX2luamVjdGVkU2NyaXB0TWFuYWdlci5pbmplY3RlZFNjcmlwdEZvcihnbG9iYWxP
YmplY3QpOwotICAgIGlmIChpbmplY3RlZFNjcmlwdC5oYXNOb1ZhbHVlKCkpIHsKLSAgICAgICAg
ZXJyb3JTdHJpbmcgPSAiVW5hYmxlIHRvIGdldCBvYmplY3QgZGV0YWlscyAtIEluamVjdGVkU2Ny
aXB0Il9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmIChpbmplY3RlZFNjcmlwdC5o
YXNOb1ZhbHVlKCkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiVW5hYmxlIHRvIGdl
dCBvYmplY3QgZGV0YWlscyAtIEluamVjdGVkU2NyaXB0Il9zKTsKIAotICAgIFN0cmluZyBvYmpl
Y3RHcm91cCA9IG9wdGlvbmFsT2JqZWN0R3JvdXAgPyAqb3B0aW9uYWxPYmplY3RHcm91cCA6IFN0
cmluZygpOwotICAgIHJlc3VsdCA9IGluamVjdGVkU2NyaXB0LndyYXBPYmplY3QoY2VsbCwgb2Jq
ZWN0R3JvdXAsIHRydWUpOworICAgIGF1dG8gb2JqZWN0ID0gaW5qZWN0ZWRTY3JpcHQud3JhcE9i
amVjdChjZWxsLCBvYmplY3RHcm91cCwgdHJ1ZSk7CisgICAgaWYgKCFvYmplY3QpCisgICAgICAg
IHJldHVybiBtYWtlVW5leHBlY3RlZCgiSW50ZXJuYWwgZXJyb3I6IHVuYWJsZSB0byBjYXN0IE9i
amVjdCIpOworCisgICAgcmV0dXJuIG9iamVjdC5yZWxlYXNlTm9uTnVsbCgpOwogfQogCiBzdGF0
aWMgUHJvdG9jb2w6OkhlYXA6OkdhcmJhZ2VDb2xsZWN0aW9uOjpUeXBlIHByb3RvY29sVHlwZUZv
ckhlYXBPcGVyYXRpb24oQ29sbGVjdGlvblNjb3BlIHNjb3BlKQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9ySGVhcEFnZW50LmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JIZWFwQWdlbnQu
aAppbmRleCBkZWY2YWNkZTk0NjBlNzEyODAwNDFkYWE2NWZjY2Q2ODVlMGY3YzBmLi5jYWE1MTJk
MGFiMmUxMGE4OGUwZWU2MGMyZTMyZDc0Mzk0MjIyN2FkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JIZWFwQWdlbnQuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JIZWFwQWdlbnQu
aApAQCAtNDAsNyArNDAsNiBAQCBzdHJ1Y3QgSGVhcFNuYXBzaG90Tm9kZTsKIG5hbWVzcGFjZSBJ
bnNwZWN0b3IgewogCiBjbGFzcyBJbmplY3RlZFNjcmlwdE1hbmFnZXI7Ci10eXBlZGVmIFN0cmlu
ZyBFcnJvclN0cmluZzsKIAogY2xhc3MgSlNfRVhQT1JUX1BSSVZBVEUgSW5zcGVjdG9ySGVhcEFn
ZW50IDogcHVibGljIEluc3BlY3RvckFnZW50QmFzZSwgcHVibGljIEhlYXBCYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXIsIHB1YmxpYyBKU0M6OkhlYXBPYnNlcnZlciB7CiAgICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoSW5zcGVjdG9ySGVhcEFnZW50KTsKQEAgLTU0LDE0ICs1MywxNCBAQCBwdWJsaWM6
CiAgICAgdm9pZCB3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChEaXNjb25uZWN0UmVhc29u
KSBmaW5hbDsKIAogICAgIC8vIEhlYXBCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIKLSAgICB2b2lk
IGVuYWJsZShFcnJvclN0cmluZyYpIG92ZXJyaWRlOwotICAgIHZvaWQgZGlzYWJsZShFcnJvclN0
cmluZyYpIG92ZXJyaWRlOwotICAgIHZvaWQgZ2MoRXJyb3JTdHJpbmcmKSBmaW5hbDsKLSAgICB2
b2lkIHNuYXBzaG90KEVycm9yU3RyaW5nJiwgZG91YmxlKiB0aW1lc3RhbXAsIFN0cmluZyogc25h
cHNob3REYXRhKSBmaW5hbDsKLSAgICB2b2lkIHN0YXJ0VHJhY2tpbmcoRXJyb3JTdHJpbmcmKSBm
aW5hbDsKLSAgICB2b2lkIHN0b3BUcmFja2luZyhFcnJvclN0cmluZyYpIGZpbmFsOwotICAgIHZv
aWQgZ2V0UHJldmlldyhFcnJvclN0cmluZyYsIGludCBoZWFwT2JqZWN0SWQsIE9wdGlvbmFsPFN0
cmluZz4mIHJlc3VsdFN0cmluZywgUmVmUHRyPFByb3RvY29sOjpEZWJ1Z2dlcjo6RnVuY3Rpb25E
ZXRhaWxzPiYsIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6T2JqZWN0UHJldmlldz4mKSBmaW5h
bDsKLSAgICB2b2lkIGdldFJlbW90ZU9iamVjdChFcnJvclN0cmluZyYsIGludCBoZWFwT2JqZWN0
SWQsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxPYmplY3RHcm91cCwgUmVmUHRyPFByb3RvY29sOjpS
dW50aW1lOjpSZW1vdGVPYmplY3Q+JiByZXN1bHQpIGZpbmFsOworICAgIFByb3RvY29sOjpFcnJv
clN0cmluZ09yPHZvaWQ+IGVuYWJsZSgpIG92ZXJyaWRlOworICAgIFByb3RvY29sOjpFcnJvclN0
cmluZ09yPHZvaWQ+IGRpc2FibGUoKSBvdmVycmlkZTsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJp
bmdPcjx2b2lkPiBnYygpIGZpbmFsOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHN0ZDo6
dHVwbGU8ZG91YmxlLCBQcm90b2NvbDo6SGVhcDo6SGVhcFNuYXBzaG90RGF0YT4+IHNuYXBzaG90
KCkgZmluYWw7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc3RhcnRUcmFja2lu
ZygpIGZpbmFsOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHN0b3BUcmFja2lu
ZygpIGZpbmFsOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHN0ZDo6dHVwbGU8U3RyaW5n
LCBSZWZQdHI8UHJvdG9jb2w6OkRlYnVnZ2VyOjpGdW5jdGlvbkRldGFpbHM+LCBSZWZQdHI8UHJv
dG9jb2w6OlJ1bnRpbWU6Ok9iamVjdFByZXZpZXc+Pj4gZ2V0UHJldmlldyhpbnQgaGVhcE9iamVj
dElkKSBmaW5hbDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8UHJvdG9jb2w6OlJ1
bnRpbWU6OlJlbW90ZU9iamVjdD4+IGdldFJlbW90ZU9iamVjdChpbnQgaGVhcE9iamVjdElkLCBj
b25zdCBTdHJpbmcmIG9iamVjdEdyb3VwKSBmaW5hbDsKIAogICAgIC8vIEpTQzo6SGVhcE9ic2Vy
dmVyCiAgICAgdm9pZCB3aWxsR2FyYmFnZUNvbGxlY3QoKSBmaW5hbDsKQEAgLTczLDcgKzcyLDcg
QEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaEdhcmJhZ2VDb2xsZWN0ZWRF
dmVudChQcm90b2NvbDo6SGVhcDo6R2FyYmFnZUNvbGxlY3Rpb246OlR5cGUsIFNlY29uZHMgc3Rh
cnRUaW1lLCBTZWNvbmRzIGVuZFRpbWUpOwogCiBwcml2YXRlOgotICAgIE9wdGlvbmFsPEpTQzo6
SGVhcFNuYXBzaG90Tm9kZT4gbm9kZUZvckhlYXBPYmplY3RJZGVudGlmaWVyKEVycm9yU3RyaW5n
JiwgdW5zaWduZWQgaGVhcE9iamVjdElkZW50aWZpZXIpOworICAgIE9wdGlvbmFsPEpTQzo6SGVh
cFNuYXBzaG90Tm9kZT4gbm9kZUZvckhlYXBPYmplY3RJZGVudGlmaWVyKFByb3RvY29sOjpFcnJv
clN0cmluZyYsIHVuc2lnbmVkIGhlYXBPYmplY3RJZGVudGlmaWVyKTsKIAogICAgIEluamVjdGVk
U2NyaXB0TWFuYWdlciYgbV9pbmplY3RlZFNjcmlwdE1hbmFnZXI7CiAgICAgc3RkOjp1bmlxdWVf
cHRyPEhlYXBGcm9udGVuZERpc3BhdGNoZXI+IG1fZnJvbnRlbmREaXNwYXRjaGVyOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUnVu
dGltZUFnZW50LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0lu
c3BlY3RvclJ1bnRpbWVBZ2VudC5jcHAKaW5kZXggOWFiMWFmNzRkNDMzNjM3MWY2NDkyOWJmNjA2
NWE0MmNlMWI5OWY4NC4uMDUxYzlmMzM2ODI4YmRlMjk5NDAyZDNjYTY5MjFlNmU5MjI5MzgwYiAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVj
dG9yUnVudGltZUFnZW50LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L2FnZW50cy9JbnNwZWN0b3JSdW50aW1lQWdlbnQuY3BwCkBAIC00OSwxOCArNDksNiBAQCBuYW1l
c3BhY2UgSW5zcGVjdG9yIHsKIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAotc3RhdGljIGJvb2wg
YXNCb29sKGNvbnN0IGJvb2wqIGIpCi17Ci0gICAgcmV0dXJuIGIgJiYgKmI7Ci19Ci0KLXN0YXRp
YyBpbnQgYXNJbnQoY29uc3QgaW50KiBpKQotewotICAgIGlmIChpKQotICAgICAgICByZXR1cm4g
Kmk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6SW5zcGVjdG9y
UnVudGltZUFnZW50KEFnZW50Q29udGV4dCYgY29udGV4dCkKICAgICA6IEluc3BlY3RvckFnZW50
QmFzZSgiUnVudGltZSJfcykKICAgICAsIG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKGNvbnRleHQu
aW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKQpAQCAtODEsMjUgKzY5LDQ2IEBAIHN0YXRpYyBSZWY8UHJv
dG9jb2w6OlJ1bnRpbWU6OkVycm9yUmFuZ2U+IGJ1aWxkRXJyb3JSYW5nZU9iamVjdChjb25zdCBK
U1Rva2VuTG9jCiAgICAgICAgIC5yZWxlYXNlKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yUnVudGlt
ZUFnZW50OjpwYXJzZShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgUHJv
dG9jb2w6OlJ1bnRpbWU6OlN5bnRheEVycm9yVHlwZSogcmVzdWx0LCBPcHRpb25hbDxTdHJpbmc+
JiBtZXNzYWdlLCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OkVycm9yUmFuZ2U+JiByYW5nZSkK
K1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6ZW5h
YmxlKCkKK3sKKyAgICBtX2VuYWJsZWQgPSB0cnVlOworCisgICAgcmV0dXJuIHsgfTsKK30KKwor
UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yUnVudGltZUFnZW50OjpkaXNh
YmxlKCkKK3sKKyAgICBtX2VuYWJsZWQgPSBmYWxzZTsKKworICAgIHJldHVybiB7IH07Cit9CisK
K1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHN0ZDo6dHVwbGU8UHJvdG9jb2w6OlJ1bnRpbWU6OlN5
bnRheEVycm9yVHlwZSwgU3RyaW5nIC8qIG1lc3NhZ2UgKi8sIFJlZlB0cjxQcm90b2NvbDo6UnVu
dGltZTo6RXJyb3JSYW5nZT4+PiBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OnBhcnNlKGNvbnN0IFN0
cmluZyYgZXhwcmVzc2lvbikKIHsKICAgICBKU0xvY2tIb2xkZXIgbG9jayhtX3ZtKTsKIAogICAg
IFBhcnNlckVycm9yIGVycm9yOwogICAgIGNoZWNrU3ludGF4KG1fdm0sIEpTQzo6bWFrZVNvdXJj
ZShleHByZXNzaW9uLCB7IH0pLCBlcnJvcik7CiAKKyAgICBPcHRpb25hbDxQcm90b2NvbDo6UnVu
dGltZTo6U3ludGF4RXJyb3JUeXBlPiByZXN1bHQ7CisgICAgU3RyaW5nIG1lc3NhZ2U7CisgICAg
UmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpFcnJvclJhbmdlPiByYW5nZTsKKwogICAgIHN3aXRj
aCAoZXJyb3Iuc3ludGF4RXJyb3JUeXBlKCkpIHsKICAgICBjYXNlIFBhcnNlckVycm9yOjpTeW50
YXhFcnJvck5vbmU6Ci0gICAgICAgICpyZXN1bHQgPSBQcm90b2NvbDo6UnVudGltZTo6U3ludGF4
RXJyb3JUeXBlOjpOb25lOworICAgICAgICByZXN1bHQgPSBQcm90b2NvbDo6UnVudGltZTo6U3lu
dGF4RXJyb3JUeXBlOjpOb25lOwogICAgICAgICBicmVhazsKKwogICAgIGNhc2UgUGFyc2VyRXJy
b3I6OlN5bnRheEVycm9ySXJyZWNvdmVyYWJsZToKLSAgICAgICAgKnJlc3VsdCA9IFByb3RvY29s
OjpSdW50aW1lOjpTeW50YXhFcnJvclR5cGU6OklycmVjb3ZlcmFibGU7CisgICAgICAgIHJlc3Vs
dCA9IFByb3RvY29sOjpSdW50aW1lOjpTeW50YXhFcnJvclR5cGU6OklycmVjb3ZlcmFibGU7CiAg
ICAgICAgIGJyZWFrOworCiAgICAgY2FzZSBQYXJzZXJFcnJvcjo6U3ludGF4RXJyb3JVbnRlcm1p
bmF0ZWRMaXRlcmFsOgotICAgICAgICAqcmVzdWx0ID0gUHJvdG9jb2w6OlJ1bnRpbWU6OlN5bnRh
eEVycm9yVHlwZTo6VW50ZXJtaW5hdGVkTGl0ZXJhbDsKKyAgICAgICAgcmVzdWx0ID0gUHJvdG9j
b2w6OlJ1bnRpbWU6OlN5bnRheEVycm9yVHlwZTo6VW50ZXJtaW5hdGVkTGl0ZXJhbDsKICAgICAg
ICAgYnJlYWs7CisKICAgICBjYXNlIFBhcnNlckVycm9yOjpTeW50YXhFcnJvclJlY292ZXJhYmxl
OgotICAgICAgICAqcmVzdWx0ID0gUHJvdG9jb2w6OlJ1bnRpbWU6OlN5bnRheEVycm9yVHlwZTo6
UmVjb3ZlcmFibGU7CisgICAgICAgIHJlc3VsdCA9IFByb3RvY29sOjpSdW50aW1lOjpTeW50YXhF
cnJvclR5cGU6OlJlY292ZXJhYmxlOwogICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTEwNywy
OSArMTE2LDQyIEBAIHZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50OjpwYXJzZShFcnJvclN0cmlu
ZyYsIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgUHJvdG9jCiAgICAgICAgIG1lc3NhZ2UgPSBl
cnJvci5tZXNzYWdlKCk7CiAgICAgICAgIHJhbmdlID0gYnVpbGRFcnJvclJhbmdlT2JqZWN0KGVy
cm9yLnRva2VuKCkubV9sb2NhdGlvbik7CiAgICAgfQorCisgICAgcmV0dXJuIHsgeyAqcmVzdWx0
LCBtZXNzYWdlLCBXVEZNb3ZlKHJhbmdlKSB9IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yUnVudGlt
ZUFnZW50OjpldmFsdWF0ZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYg
ZXhwcmVzc2lvbiwgY29uc3QgU3RyaW5nKiBvYmplY3RHcm91cCwgY29uc3QgYm9vbCogaW5jbHVk
ZUNvbW1hbmRMaW5lQVBJLCBjb25zdCBib29sKiBkb05vdFBhdXNlT25FeGNlcHRpb25zQW5kTXV0
ZUNvbnNvbGUsIGNvbnN0IGludCogZXhlY3V0aW9uQ29udGV4dElkLCBjb25zdCBib29sKiByZXR1
cm5CeVZhbHVlLCBjb25zdCBib29sKiBnZW5lcmF0ZVByZXZpZXcsIGNvbnN0IGJvb2wqIHNhdmVS
ZXN1bHQsIGNvbnN0IGJvb2wqIC8qIGVtdWxhdGVVc2VyR2VzdHVyZSAqLywgUmVmUHRyPFByb3Rv
Y29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiByZXN1bHQsIE9wdGlvbmFsPGJvb2w+JiB3YXNU
aHJvd24sIE9wdGlvbmFsPGludD4mIHNhdmVkUmVzdWx0SW5kZXgpCitQcm90b2NvbDo6RXJyb3JT
dHJpbmdPcjxzdGQ6OnR1cGxlPFJlZjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0Piwg
T3B0aW9uYWw8Ym9vbD4gLyogd2FzVGhyb3duICovLCBPcHRpb25hbDxpbnQ+IC8qIHNhdmVkUmVz
dWx0SW5kZXggKi8+PiBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmV2YWx1YXRlKGNvbnN0IFN0cmlu
ZyYgZXhwcmVzc2lvbiwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCwgT3B0aW9uYWw8Ym9vbD4m
JiBpbmNsdWRlQ29tbWFuZExpbmVBUEksIE9wdGlvbmFsPGJvb2w+JiYgZG9Ob3RQYXVzZU9uRXhj
ZXB0aW9uc0FuZE11dGVDb25zb2xlLCBPcHRpb25hbDxQcm90b2NvbDo6UnVudGltZTo6RXhlY3V0
aW9uQ29udGV4dElkPiYmIGV4ZWN1dGlvbkNvbnRleHRJZCwgT3B0aW9uYWw8Ym9vbD4mJiByZXR1
cm5CeVZhbHVlLCBPcHRpb25hbDxib29sPiYmIGdlbmVyYXRlUHJldmlldywgT3B0aW9uYWw8Ym9v
bD4mJiBzYXZlUmVzdWx0LCBPcHRpb25hbDxib29sPiYmIC8qIGVtdWxhdGVVc2VyR2VzdHVyZSAq
LykKIHsKLSAgICBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdCA9IGluamVjdGVkU2NyaXB0
Rm9yRXZhbChlcnJvclN0cmluZywgZXhlY3V0aW9uQ29udGV4dElkKTsKKyAgICBQcm90b2NvbDo6
RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKKyAgICBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNj
cmlwdCA9IGluamVjdGVkU2NyaXB0Rm9yRXZhbChlcnJvclN0cmluZywgV1RGTW92ZShleGVjdXRp
b25Db250ZXh0SWQpKTsKICAgICBpZiAoaW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKQotICAg
ICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7
CisKKyAgICBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4gcmVzdWx0Owor
ICAgIE9wdGlvbmFsPGJvb2w+IHdhc1Rocm93bjsKKyAgICBPcHRpb25hbDxpbnQ+IHNhdmVkUmVz
dWx0SW5kZXg7CiAKICAgICBKU0M6OkRlYnVnZ2VyOjpUZW1wb3JhcmlseURpc2FibGVFeGNlcHRp
b25CcmVha3BvaW50cyB0ZW1wb3JhcmlseURpc2FibGVFeGNlcHRpb25CcmVha3BvaW50cyhtX2Rl
YnVnZ2VyKTsKIAotICAgIGJvb2wgcGF1c2VBbmRNdXRlID0gYXNCb29sKGRvTm90UGF1c2VPbkV4
Y2VwdGlvbnNBbmRNdXRlQ29uc29sZSk7CisgICAgYm9vbCBwYXVzZUFuZE11dGUgPSBkb05vdFBh
dXNlT25FeGNlcHRpb25zQW5kTXV0ZUNvbnNvbGUudmFsdWVPcihmYWxzZSk7CiAgICAgaWYgKHBh
dXNlQW5kTXV0ZSkgewogICAgICAgICB0ZW1wb3JhcmlseURpc2FibGVFeGNlcHRpb25CcmVha3Bv
aW50cy5yZXBsYWNlKCk7CiAgICAgICAgIG11dGVDb25zb2xlKCk7CiAgICAgfQogCi0gICAgaW5q
ZWN0ZWRTY3JpcHQuZXZhbHVhdGUoZXJyb3JTdHJpbmcsIGV4cHJlc3Npb24sIG9iamVjdEdyb3Vw
ID8gKm9iamVjdEdyb3VwIDogU3RyaW5nKCksIGFzQm9vbChpbmNsdWRlQ29tbWFuZExpbmVBUEkp
LCBhc0Jvb2wocmV0dXJuQnlWYWx1ZSksIGFzQm9vbChnZW5lcmF0ZVByZXZpZXcpLCBhc0Jvb2wo
c2F2ZVJlc3VsdCksIHJlc3VsdCwgd2FzVGhyb3duLCBzYXZlZFJlc3VsdEluZGV4KTsKKyAgICBp
bmplY3RlZFNjcmlwdC5ldmFsdWF0ZShlcnJvclN0cmluZywgZXhwcmVzc2lvbiwgb2JqZWN0R3Jv
dXAsIGluY2x1ZGVDb21tYW5kTGluZUFQSS52YWx1ZU9yKGZhbHNlKSwgcmV0dXJuQnlWYWx1ZS52
YWx1ZU9yKGZhbHNlKSwgZ2VuZXJhdGVQcmV2aWV3LnZhbHVlT3IoZmFsc2UpLCBzYXZlUmVzdWx0
LnZhbHVlT3IoZmFsc2UpLCByZXN1bHQsIHdhc1Rocm93biwgc2F2ZWRSZXN1bHRJbmRleCk7CiAK
ICAgICBpZiAocGF1c2VBbmRNdXRlKQogICAgICAgICB1bm11dGVDb25zb2xlKCk7CisKKyAgICBp
ZiAoIXJlc3VsdCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsK
KworICAgIHJldHVybiB7IHtyZXN1bHQucmVsZWFzZU5vbk51bGwoKSwgV1RGTW92ZSh3YXNUaHJv
d24pLCBXVEZNb3ZlKHNhdmVkUmVzdWx0SW5kZXgpIH0gfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JS
dW50aW1lQWdlbnQ6OmF3YWl0UHJvbWlzZShjb25zdCBTdHJpbmcmIHByb21pc2VPYmplY3RJZCwg
Y29uc3QgYm9vbCogcmV0dXJuQnlWYWx1ZSwgY29uc3QgYm9vbCogZ2VuZXJhdGVQcmV2aWV3LCBj
b25zdCBib29sKiBzYXZlUmVzdWx0LCBSZWY8QXdhaXRQcm9taXNlQ2FsbGJhY2s+JiYgY2FsbGJh
Y2spCit2b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6YXdhaXRQcm9taXNlKGNvbnN0IFByb3Rv
Y29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3RJZCYgcHJvbWlzZU9iamVjdElkLCBPcHRpb25hbDxi
b29sPiYmIHJldHVybkJ5VmFsdWUsIE9wdGlvbmFsPGJvb2w+JiYgZ2VuZXJhdGVQcmV2aWV3LCBP
cHRpb25hbDxib29sPiYmIHNhdmVSZXN1bHQsIFJlZjxBd2FpdFByb21pc2VDYWxsYmFjaz4mJiBj
YWxsYmFjaykKIHsKICAgICBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdCA9IG1faW5qZWN0
ZWRTY3JpcHRNYW5hZ2VyLmluamVjdGVkU2NyaXB0Rm9yT2JqZWN0SWQocHJvbWlzZU9iamVjdElk
KTsKICAgICBpZiAoaW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKSB7CkBAIC0xMzcsMjE5ICsx
NTksMjQ0IEBAIHZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50Ojphd2FpdFByb21pc2UoY29uc3Qg
U3RyaW5nJiBwcm9taXNlT2JqZWN0SWQsIGNvbnN0IGJvCiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBpbmplY3RlZFNjcmlwdC5hd2FpdFByb21pc2UocHJvbWlzZU9iamVjdElkLCBhc0Jv
b2wocmV0dXJuQnlWYWx1ZSksIGFzQm9vbChnZW5lcmF0ZVByZXZpZXcpLCBhc0Jvb2woc2F2ZVJl
c3VsdCksIFtjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXSAoRXJyb3JTdHJpbmcmIGVycm9y
U3RyaW5nLCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mJiByZXN1bHQs
IE9wdGlvbmFsPGJvb2w+JiB3YXNUaHJvd24sIE9wdGlvbmFsPGludD4mIHNhdmVkUmVzdWx0SW5k
ZXgpIHsKLSAgICAgICAgaWYgKCFlcnJvclN0cmluZy5pc0VtcHR5KCkpCisgICAgaW5qZWN0ZWRT
Y3JpcHQuYXdhaXRQcm9taXNlKHByb21pc2VPYmplY3RJZCwgcmV0dXJuQnlWYWx1ZS52YWx1ZU9y
KGZhbHNlKSwgZ2VuZXJhdGVQcmV2aWV3LnZhbHVlT3IoZmFsc2UpLCBzYXZlUmVzdWx0LnZhbHVl
T3IoZmFsc2UpLCBbY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0gKFByb3RvY29sOjpFcnJv
clN0cmluZyYgZXJyb3JTdHJpbmcsIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2Jq
ZWN0PiYmIHJlc3VsdCwgT3B0aW9uYWw8Ym9vbD4mJiB3YXNUaHJvd24sIE9wdGlvbmFsPGludD4m
JiBzYXZlZFJlc3VsdEluZGV4KSB7CisgICAgICAgIGlmICghcmVzdWx0KQogICAgICAgICAgICAg
Y2FsbGJhY2stPnNlbmRGYWlsdXJlKGVycm9yU3RyaW5nKTsKICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgY2FsbGJhY2stPnNlbmRTdWNjZXNzKFdURk1vdmUocmVzdWx0KSwgd2FzVGhyb3duLCBz
YXZlZFJlc3VsdEluZGV4KTsKKyAgICAgICAgICAgIGNhbGxiYWNrLT5zZW5kU3VjY2VzcyhyZXN1
bHQucmVsZWFzZU5vbk51bGwoKSwgV1RGTW92ZSh3YXNUaHJvd24pLCBXVEZNb3ZlKHNhdmVkUmVz
dWx0SW5kZXgpKTsKICAgICB9KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmNh
bGxGdW5jdGlvbk9uKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBvYmpl
Y3RJZCwgY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBjb25zdCBKU09OOjpBcnJheSogb3B0aW9u
YWxBcmd1bWVudHMsIGNvbnN0IGJvb2wqIGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29u
c29sZSwgY29uc3QgYm9vbCogcmV0dXJuQnlWYWx1ZSwgY29uc3QgYm9vbCogZ2VuZXJhdGVQcmV2
aWV3LCBjb25zdCBib29sKiAvKiBlbXVsYXRlVXNlckdlc3R1cmUgKi8sIFJlZlB0cjxQcm90b2Nv
bDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0LCBPcHRpb25hbDxib29sPiYgd2FzVGhy
b3duKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8c3RkOjp0dXBsZTxSZWY8UHJvdG9jb2w6OlJ1
bnRpbWU6OlJlbW90ZU9iamVjdD4sIE9wdGlvbmFsPGJvb2w+IC8qIHdhc1Rocm93biAqLz4+IElu
c3BlY3RvclJ1bnRpbWVBZ2VudDo6Y2FsbEZ1bmN0aW9uT24oY29uc3QgUHJvdG9jb2w6OlJ1bnRp
bWU6OlJlbW90ZU9iamVjdElkJiBvYmplY3RJZCwgY29uc3QgU3RyaW5nJiBmdW5jdGlvbkRlY2xh
cmF0aW9uLCBSZWZQdHI8SlNPTjo6QXJyYXk+JiYgYXJndW1lbnRzLCBPcHRpb25hbDxib29sPiYm
IGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29sZSwgT3B0aW9uYWw8Ym9vbD4mJiBy
ZXR1cm5CeVZhbHVlLCBPcHRpb25hbDxib29sPiYmIGdlbmVyYXRlUHJldmlldywgT3B0aW9uYWw8
Ym9vbD4mJiAvKiBlbXVsYXRlVXNlckdlc3R1cmUgKi8pCiB7Ci0gICAgSW5qZWN0ZWRTY3JpcHQg
aW5qZWN0ZWRTY3JpcHQgPSBtX2luamVjdGVkU2NyaXB0TWFuYWdlci5pbmplY3RlZFNjcmlwdEZv
ck9iamVjdElkKG9iamVjdElkKTsKLSAgICBpZiAoaW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgp
KSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIk1pc3NpbmcgaW5qZWN0ZWQgc2NyaXB0IGZvciBn
aXZlbiBvYmplY3RJZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBQcm90b2NvbDo6
RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CiAKLSAgICBTdHJpbmcgYXJndW1lbnRzOwotICAgIGlm
IChvcHRpb25hbEFyZ3VtZW50cykKLSAgICAgICAgYXJndW1lbnRzID0gb3B0aW9uYWxBcmd1bWVu
dHMtPnRvSlNPTlN0cmluZygpOworICAgIEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0ID0g
bV9pbmplY3RlZFNjcmlwdE1hbmFnZXIuaW5qZWN0ZWRTY3JpcHRGb3JPYmplY3RJZChvYmplY3RJ
ZCk7CisgICAgaWYgKGluamVjdGVkU2NyaXB0Lmhhc05vVmFsdWUoKSkKKyAgICAgICAgcmV0dXJu
IG1ha2VVbmV4cGVjdGVkKCJNaXNzaW5nIGluamVjdGVkIHNjcmlwdCBmb3IgZ2l2ZW4gb2JqZWN0
SWQiX3MpOworCisgICAgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+IHJl
c3VsdDsKKyAgICBPcHRpb25hbDxib29sPiB3YXNUaHJvd247CiAKICAgICBKU0M6OkRlYnVnZ2Vy
OjpUZW1wb3JhcmlseURpc2FibGVFeGNlcHRpb25CcmVha3BvaW50cyB0ZW1wb3JhcmlseURpc2Fi
bGVFeGNlcHRpb25CcmVha3BvaW50cyhtX2RlYnVnZ2VyKTsKIAotICAgIGJvb2wgcGF1c2VBbmRN
dXRlID0gYXNCb29sKGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29sZSk7CisgICAg
Ym9vbCBwYXVzZUFuZE11dGUgPSBkb05vdFBhdXNlT25FeGNlcHRpb25zQW5kTXV0ZUNvbnNvbGUu
dmFsdWVPcihmYWxzZSk7CiAgICAgaWYgKHBhdXNlQW5kTXV0ZSkgewogICAgICAgICB0ZW1wb3Jh
cmlseURpc2FibGVFeGNlcHRpb25CcmVha3BvaW50cy5yZXBsYWNlKCk7CiAgICAgICAgIG11dGVD
b25zb2xlKCk7CiAgICAgfQogCi0gICAgaW5qZWN0ZWRTY3JpcHQuY2FsbEZ1bmN0aW9uT24oZXJy
b3JTdHJpbmcsIG9iamVjdElkLCBleHByZXNzaW9uLCBhcmd1bWVudHMsIGFzQm9vbChyZXR1cm5C
eVZhbHVlKSwgYXNCb29sKGdlbmVyYXRlUHJldmlldyksIHJlc3VsdCwgd2FzVGhyb3duKTsKKyAg
ICBpbmplY3RlZFNjcmlwdC5jYWxsRnVuY3Rpb25PbihlcnJvclN0cmluZywgb2JqZWN0SWQsIGZ1
bmN0aW9uRGVjbGFyYXRpb24sIGFyZ3VtZW50cyA/IGFyZ3VtZW50cy0+dG9KU09OU3RyaW5nKCkg
OiBudWxsU3RyaW5nKCksIHJldHVybkJ5VmFsdWUudmFsdWVPcihmYWxzZSksIGdlbmVyYXRlUHJl
dmlldy52YWx1ZU9yKGZhbHNlKSwgcmVzdWx0LCB3YXNUaHJvd24pOwogCiAgICAgaWYgKHBhdXNl
QW5kTXV0ZSkKICAgICAgICAgdW5tdXRlQ29uc29sZSgpOworCisgICAgaWYgKCFyZXN1bHQpCisg
ICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CisKKyAgICByZXR1cm4g
eyB7IHJlc3VsdC5yZWxlYXNlTm9uTnVsbCgpLCBXVEZNb3ZlKHdhc1Rocm93bikgfSB9OwogfQog
Ci12b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6Z2V0UHJldmlldyhFcnJvclN0cmluZyYgZXJy
b3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgb2JqZWN0SWQsIFJlZlB0cjxQcm90b2NvbDo6UnVudGlt
ZTo6T2JqZWN0UHJldmlldz4mIHByZXZpZXcpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8
UHJvdG9jb2w6OlJ1bnRpbWU6Ok9iamVjdFByZXZpZXc+PiBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6
OmdldFByZXZpZXcoY29uc3QgUHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdElkJiBvYmpl
Y3RJZCkKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBJ
bmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdCA9IG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmlu
amVjdGVkU2NyaXB0Rm9yT2JqZWN0SWQob2JqZWN0SWQpOwotICAgIGlmIChpbmplY3RlZFNjcmlw
dC5oYXNOb1ZhbHVlKCkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWlzc2luZyBpbmplY3Rl
ZCBzY3JpcHQgZm9yIGdpdmVuIG9iamVjdElkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQor
ICAgIGlmIChpbmplY3RlZFNjcmlwdC5oYXNOb1ZhbHVlKCkpCisgICAgICAgIHJldHVybiBtYWtl
VW5leHBlY3RlZCgiTWlzc2luZyBpbmplY3RlZCBzY3JpcHQgZm9yIGdpdmVuIG9iamVjdElkIl9z
KTsKIAogICAgIEpTQzo6RGVidWdnZXI6OlRlbXBvcmFyaWx5RGlzYWJsZUV4Y2VwdGlvbkJyZWFr
cG9pbnRzIHRlbXBvcmFyaWx5RGlzYWJsZUV4Y2VwdGlvbkJyZWFrcG9pbnRzKG1fZGVidWdnZXIp
OwogICAgIHRlbXBvcmFyaWx5RGlzYWJsZUV4Y2VwdGlvbkJyZWFrcG9pbnRzLnJlcGxhY2UoKTsK
IAorICAgIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6T2JqZWN0UHJldmlldz4gcHJldmlldzsK
KwogICAgIG11dGVDb25zb2xlKCk7CiAKICAgICBpbmplY3RlZFNjcmlwdC5nZXRQcmV2aWV3KGVy
cm9yU3RyaW5nLCBvYmplY3RJZCwgcHJldmlldyk7CiAKICAgICB1bm11dGVDb25zb2xlKCk7CisK
KyAgICBpZiAoIXByZXZpZXcpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0
cmluZyk7CisKKyAgICByZXR1cm4gcHJldmlldy5yZWxlYXNlTm9uTnVsbCgpOwogfQogCi12b2lk
IEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6Z2V0UHJvcGVydGllcyhFcnJvclN0cmluZyYgZXJyb3JT
dHJpbmcsIGNvbnN0IFN0cmluZyYgb2JqZWN0SWQsIGNvbnN0IGJvb2wqIG93blByb3BlcnRpZXMs
IGNvbnN0IGludCogZmV0Y2hTdGFydCwgY29uc3QgaW50KiBmZXRjaENvdW50LCBjb25zdCBib29s
KiBnZW5lcmF0ZVByZXZpZXcsIFJlZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1l
OjpQcm9wZXJ0eURlc2NyaXB0b3I+PiYgcHJvcGVydGllcywgUmVmUHRyPEpTT046OkFycmF5T2Y8
UHJvdG9jb2w6OlJ1bnRpbWU6OkludGVybmFsUHJvcGVydHlEZXNjcmlwdG9yPj4mIGludGVybmFs
UHJvcGVydGllcykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHN0ZDo6dHVwbGU8UmVmPEpTT046
OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OlByb3BlcnR5RGVzY3JpcHRvcj4+LCBSZWZQdHI8
SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UnVudGltZTo6SW50ZXJuYWxQcm9wZXJ0eURlc2NyaXB0
b3I+Pj4+IEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6Z2V0UHJvcGVydGllcyhjb25zdCBQcm90b2Nv
bDo6UnVudGltZTo6UmVtb3RlT2JqZWN0SWQmIG9iamVjdElkLCBPcHRpb25hbDxib29sPiYmIG93
blByb3BlcnRpZXMsIE9wdGlvbmFsPGludD4mJiBmZXRjaFN0YXJ0LCBPcHRpb25hbDxpbnQ+JiYg
ZmV0Y2hDb3VudCwgT3B0aW9uYWw8Ym9vbD4mJiBnZW5lcmF0ZVByZXZpZXcpCiB7CisgICAgUHJv
dG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAgICAgSW5qZWN0ZWRTY3JpcHQgaW5q
ZWN0ZWRTY3JpcHQgPSBtX2luamVjdGVkU2NyaXB0TWFuYWdlci5pbmplY3RlZFNjcmlwdEZvck9i
amVjdElkKG9iamVjdElkKTsKLSAgICBpZiAoaW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKSB7
Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIk1pc3NpbmcgaW5qZWN0ZWQgc2NyaXB0IGZvciBnaXZl
biBvYmplY3RJZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoaW5qZWN0ZWRT
Y3JpcHQuaGFzTm9WYWx1ZSgpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk1pc3Np
bmcgaW5qZWN0ZWQgc2NyaXB0IGZvciBnaXZlbiBvYmplY3RJZCJfcyk7CiAKLSAgICBpbnQgc3Rh
cnQgPSBhc0ludChmZXRjaFN0YXJ0KTsKLSAgICBpZiAoc3RhcnQgPCAwKSB7Ci0gICAgICAgIGVy
cm9yU3RyaW5nID0gImZldGNoU3RhcnQgY2Fubm90IGJlIG5lZ2F0aXZlIl9zOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQorICAgIGludCBzdGFydCA9IGZldGNoU3RhcnQudmFsdWVPcigwKTsKKyAg
ICBpZiAoc3RhcnQgPCAwKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoImZldGNoU3Rh
cnQgY2Fubm90IGJlIG5lZ2F0aXZlIl9zKTsKIAotICAgIGludCBjb3VudCA9IGFzSW50KGZldGNo
Q291bnQpOwotICAgIGlmIChjb3VudCA8IDApIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiZmV0
Y2hDb3VudCBjYW5ub3QgYmUgbmVnYXRpdmUiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Cisg
ICAgaW50IGNvdW50ID0gZmV0Y2hDb3VudC52YWx1ZU9yKDApOworICAgIGlmIChjb3VudCA8IDAp
CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiZmV0Y2hDb3VudCBjYW5ub3QgYmUgbmVn
YXRpdmUiX3MpOworCisgICAgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6
OlByb3BlcnR5RGVzY3JpcHRvcj4+IHByb3BlcnRpZXM7CisgICAgUmVmUHRyPEpTT046OkFycmF5
T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OkludGVybmFsUHJvcGVydHlEZXNjcmlwdG9yPj4gaW50ZXJu
YWxQcm9wZXJ0aWVzOwogCiAgICAgSlNDOjpEZWJ1Z2dlcjo6VGVtcG9yYXJpbHlEaXNhYmxlRXhj
ZXB0aW9uQnJlYWtwb2ludHMgdGVtcG9yYXJpbHlEaXNhYmxlRXhjZXB0aW9uQnJlYWtwb2ludHMo
bV9kZWJ1Z2dlcik7CiAgICAgdGVtcG9yYXJpbHlEaXNhYmxlRXhjZXB0aW9uQnJlYWtwb2ludHMu
cmVwbGFjZSgpOwogCiAgICAgbXV0ZUNvbnNvbGUoKTsKIAotICAgIGluamVjdGVkU2NyaXB0Lmdl
dFByb3BlcnRpZXMoZXJyb3JTdHJpbmcsIG9iamVjdElkLCBhc0Jvb2wob3duUHJvcGVydGllcyks
IHN0YXJ0LCBjb3VudCwgYXNCb29sKGdlbmVyYXRlUHJldmlldyksIHByb3BlcnRpZXMpOworICAg
IGluamVjdGVkU2NyaXB0LmdldFByb3BlcnRpZXMoZXJyb3JTdHJpbmcsIG9iamVjdElkLCBvd25Q
cm9wZXJ0aWVzLnZhbHVlT3IoZmFsc2UpLCBzdGFydCwgY291bnQsIGdlbmVyYXRlUHJldmlldy52
YWx1ZU9yKGZhbHNlKSwgcHJvcGVydGllcyk7CiAKICAgICAvLyBPbmx5IGluY2x1ZGUgaW50ZXJu
YWwgcHJvcGVydGllcyBmb3IgdGhlIGZpcnN0IGZldGNoLgogICAgIGlmICghc3RhcnQpCi0gICAg
ICAgIGluamVjdGVkU2NyaXB0LmdldEludGVybmFsUHJvcGVydGllcyhlcnJvclN0cmluZywgb2Jq
ZWN0SWQsIGFzQm9vbChnZW5lcmF0ZVByZXZpZXcpLCBpbnRlcm5hbFByb3BlcnRpZXMpOworICAg
ICAgICBpbmplY3RlZFNjcmlwdC5nZXRJbnRlcm5hbFByb3BlcnRpZXMoZXJyb3JTdHJpbmcsIG9i
amVjdElkLCBnZW5lcmF0ZVByZXZpZXcudmFsdWVPcihmYWxzZSksIGludGVybmFsUHJvcGVydGll
cyk7CiAKICAgICB1bm11dGVDb25zb2xlKCk7CisKKyAgICBpZiAoIXByb3BlcnRpZXMpCisgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CisKKyAgICByZXR1cm4geyB7
IHByb3BlcnRpZXMucmVsZWFzZU5vbk51bGwoKSwgV1RGTW92ZShpbnRlcm5hbFByb3BlcnRpZXMp
IH0gfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmdldERpc3BsYXlhYmxlUHJv
cGVydGllcyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgb2JqZWN0SWQs
IGNvbnN0IGludCogZmV0Y2hTdGFydCwgY29uc3QgaW50KiBmZXRjaENvdW50LCBjb25zdCBib29s
KiBnZW5lcmF0ZVByZXZpZXcsIFJlZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1l
OjpQcm9wZXJ0eURlc2NyaXB0b3I+PiYgcHJvcGVydGllcywgUmVmUHRyPEpTT046OkFycmF5T2Y8
UHJvdG9jb2w6OlJ1bnRpbWU6OkludGVybmFsUHJvcGVydHlEZXNjcmlwdG9yPj4mIGludGVybmFs
UHJvcGVydGllcykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHN0ZDo6dHVwbGU8UmVmPEpTT046
OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OlByb3BlcnR5RGVzY3JpcHRvcj4+LCBSZWZQdHI8
SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UnVudGltZTo6SW50ZXJuYWxQcm9wZXJ0eURlc2NyaXB0
b3I+Pj4+IEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6Z2V0RGlzcGxheWFibGVQcm9wZXJ0aWVzKGNv
bnN0IFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3RJZCYgb2JqZWN0SWQsIE9wdGlvbmFs
PGludD4mJiBmZXRjaFN0YXJ0LCBPcHRpb25hbDxpbnQ+JiYgZmV0Y2hDb3VudCwgT3B0aW9uYWw8
Ym9vbD4mJiBnZW5lcmF0ZVByZXZpZXcpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVy
cm9yU3RyaW5nOworCiAgICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHQgPSBtX2luamVj
dGVkU2NyaXB0TWFuYWdlci5pbmplY3RlZFNjcmlwdEZvck9iamVjdElkKG9iamVjdElkKTsKLSAg
ICBpZiAoaW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKSB7Ci0gICAgICAgIGVycm9yU3RyaW5n
ID0gIk1pc3NpbmcgaW5qZWN0ZWQgc2NyaXB0IGZvciBnaXZlbiBvYmplY3RJZCJfczsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoaW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKQor
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk1pc3NpbmcgaW5qZWN0ZWQgc2NyaXB0IGZv
ciBnaXZlbiBvYmplY3RJZCJfcyk7CiAKLSAgICBpbnQgc3RhcnQgPSBhc0ludChmZXRjaFN0YXJ0
KTsKLSAgICBpZiAoc3RhcnQgPCAwKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gImZldGNoU3Rh
cnQgY2Fubm90IGJlIG5lZ2F0aXZlIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlu
dCBzdGFydCA9IGZldGNoU3RhcnQudmFsdWVPcigwKTsKKyAgICBpZiAoc3RhcnQgPCAwKQorICAg
ICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoImZldGNoU3RhcnQgY2Fubm90IGJlIG5lZ2F0aXZl
Il9zKTsKIAotICAgIGludCBjb3VudCA9IGFzSW50KGZldGNoQ291bnQpOwotICAgIGlmIChjb3Vu
dCA8IDApIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiZmV0Y2hDb3VudCBjYW5ub3QgYmUgbmVn
YXRpdmUiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaW50IGNvdW50ID0gZmV0Y2hD
b3VudC52YWx1ZU9yKDApOworICAgIGlmIChjb3VudCA8IDApCisgICAgICAgIHJldHVybiBtYWtl
VW5leHBlY3RlZCgiZmV0Y2hDb3VudCBjYW5ub3QgYmUgbmVnYXRpdmUiX3MpOworCisgICAgUmVm
UHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OlByb3BlcnR5RGVzY3JpcHRvcj4+
IHByb3BlcnRpZXM7CisgICAgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6
OkludGVybmFsUHJvcGVydHlEZXNjcmlwdG9yPj4gaW50ZXJuYWxQcm9wZXJ0aWVzOwogCiAgICAg
SlNDOjpEZWJ1Z2dlcjo6VGVtcG9yYXJpbHlEaXNhYmxlRXhjZXB0aW9uQnJlYWtwb2ludHMgdGVt
cG9yYXJpbHlEaXNhYmxlRXhjZXB0aW9uQnJlYWtwb2ludHMobV9kZWJ1Z2dlcik7CiAgICAgdGVt
cG9yYXJpbHlEaXNhYmxlRXhjZXB0aW9uQnJlYWtwb2ludHMucmVwbGFjZSgpOwogCiAgICAgbXV0
ZUNvbnNvbGUoKTsKIAotICAgIGluamVjdGVkU2NyaXB0LmdldERpc3BsYXlhYmxlUHJvcGVydGll
cyhlcnJvclN0cmluZywgb2JqZWN0SWQsIHN0YXJ0LCBjb3VudCwgYXNCb29sKGdlbmVyYXRlUHJl
dmlldyksIHByb3BlcnRpZXMpOworICAgIGluamVjdGVkU2NyaXB0LmdldERpc3BsYXlhYmxlUHJv
cGVydGllcyhlcnJvclN0cmluZywgb2JqZWN0SWQsIHN0YXJ0LCBjb3VudCwgZ2VuZXJhdGVQcmV2
aWV3LnZhbHVlT3IoZmFsc2UpLCBwcm9wZXJ0aWVzKTsKIAogICAgIC8vIE9ubHkgaW5jbHVkZSBp
bnRlcm5hbCBwcm9wZXJ0aWVzIGZvciB0aGUgZmlyc3QgZmV0Y2guCiAgICAgaWYgKCFzdGFydCkK
LSAgICAgICAgaW5qZWN0ZWRTY3JpcHQuZ2V0SW50ZXJuYWxQcm9wZXJ0aWVzKGVycm9yU3RyaW5n
LCBvYmplY3RJZCwgYXNCb29sKGdlbmVyYXRlUHJldmlldyksIGludGVybmFsUHJvcGVydGllcyk7
CisgICAgICAgIGluamVjdGVkU2NyaXB0LmdldEludGVybmFsUHJvcGVydGllcyhlcnJvclN0cmlu
Zywgb2JqZWN0SWQsIGdlbmVyYXRlUHJldmlldy52YWx1ZU9yKGZhbHNlKSwgaW50ZXJuYWxQcm9w
ZXJ0aWVzKTsKIAogICAgIHVubXV0ZUNvbnNvbGUoKTsKKworICAgIGlmICghcHJvcGVydGllcykK
KyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKKworICAgIHJldHVy
biB7IHsgcHJvcGVydGllcy5yZWxlYXNlTm9uTnVsbCgpLCBXVEZNb3ZlKGludGVybmFsUHJvcGVy
dGllcykgfSB9OwogfQogCi12b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6Z2V0Q29sbGVjdGlv
bkVudHJpZXMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIG9iamVjdElk
LCBjb25zdCBTdHJpbmcqIG9iamVjdEdyb3VwLCBjb25zdCBpbnQqIGZldGNoU3RhcnQsIGNvbnN0
IGludCogZmV0Y2hDb3VudCwgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6
OkNvbGxlY3Rpb25FbnRyeT4+JiBlbnRyaWVzKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVm
PEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OkNvbGxlY3Rpb25FbnRyeT4+PiBJbnNw
ZWN0b3JSdW50aW1lQWdlbnQ6OmdldENvbGxlY3Rpb25FbnRyaWVzKGNvbnN0IFByb3RvY29sOjpS
dW50aW1lOjpSZW1vdGVPYmplY3RJZCYgb2JqZWN0SWQsIGNvbnN0IFN0cmluZyYgb2JqZWN0R3Jv
dXAsIE9wdGlvbmFsPGludD4mJiBmZXRjaFN0YXJ0LCBPcHRpb25hbDxpbnQ+JiYgZmV0Y2hDb3Vu
dCkKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBJbmpl
Y3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdCA9IG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmluamVj
dGVkU2NyaXB0Rm9yT2JqZWN0SWQob2JqZWN0SWQpOwotICAgIGlmIChpbmplY3RlZFNjcmlwdC5o
YXNOb1ZhbHVlKCkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWlzc2luZyBpbmplY3RlZCBz
Y3JpcHQgZm9yIGdpdmVuIG9iamVjdElkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAg
IGlmIChpbmplY3RlZFNjcmlwdC5oYXNOb1ZhbHVlKCkpCisgICAgICAgIHJldHVybiBtYWtlVW5l
eHBlY3RlZCgiTWlzc2luZyBpbmplY3RlZCBzY3JpcHQgZm9yIGdpdmVuIG9iamVjdElkIl9zKTsK
IAotICAgIGludCBzdGFydCA9IGFzSW50KGZldGNoU3RhcnQpOwotICAgIGlmIChzdGFydCA8IDAp
IHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiZmV0Y2hTdGFydCBjYW5ub3QgYmUgbmVnYXRpdmUi
X3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaW50IHN0YXJ0ID0gZmV0Y2hTdGFydC52
YWx1ZU9yKDApOworICAgIGlmIChzdGFydCA8IDApCisgICAgICAgIHJldHVybiBtYWtlVW5leHBl
Y3RlZCgiZmV0Y2hTdGFydCBjYW5ub3QgYmUgbmVnYXRpdmUiX3MpOwogCi0gICAgaW50IGNvdW50
ID0gYXNJbnQoZmV0Y2hDb3VudCk7Ci0gICAgaWYgKGNvdW50IDwgMCkgewotICAgICAgICBlcnJv
clN0cmluZyA9ICJmZXRjaENvdW50IGNhbm5vdCBiZSBuZWdhdGl2ZSJfczsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KKyAgICBpbnQgY291bnQgPSBmZXRjaENvdW50LnZhbHVlT3IoMCk7CisgICAg
aWYgKGNvdW50IDwgMCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJmZXRjaENvdW50
IGNhbm5vdCBiZSBuZWdhdGl2ZSJfcyk7CiAKLSAgICBpbmplY3RlZFNjcmlwdC5nZXRDb2xsZWN0
aW9uRW50cmllcyhlcnJvclN0cmluZywgb2JqZWN0SWQsIG9iamVjdEdyb3VwID8gKm9iamVjdEdy
b3VwIDogU3RyaW5nKCksIHN0YXJ0LCBjb3VudCwgZW50cmllcyk7CisgICAgUmVmUHRyPEpTT046
OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OkNvbGxlY3Rpb25FbnRyeT4+IGVudHJpZXM7CisK
KyAgICBpbmplY3RlZFNjcmlwdC5nZXRDb2xsZWN0aW9uRW50cmllcyhlcnJvclN0cmluZywgb2Jq
ZWN0SWQsIG9iamVjdEdyb3VwLCBzdGFydCwgY291bnQsIGVudHJpZXMpOworCisgICAgaWYgKCFl
bnRyaWVzKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOworCisg
ICAgcmV0dXJuIGVudHJpZXMucmVsZWFzZU5vbk51bGwoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JS
dW50aW1lQWdlbnQ6OnNhdmVSZXN1bHQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBK
U09OOjpPYmplY3QmIGNhbGxBcmd1bWVudCwgY29uc3QgaW50KiBleGVjdXRpb25Db250ZXh0SWQs
IE9wdGlvbmFsPGludD4mIHNhdmVkUmVzdWx0SW5kZXgpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdP
cjxPcHRpb25hbDxpbnQ+IC8qIHNhdmVSZXN1bHRJbmRleCAqLz4gSW5zcGVjdG9yUnVudGltZUFn
ZW50OjpzYXZlUmVzdWx0KFJlZjxKU09OOjpPYmplY3Q+JiYgY2FsbEFyZ3VtZW50LCBPcHRpb25h
bDxQcm90b2NvbDo6UnVudGltZTo6RXhlY3V0aW9uQ29udGV4dElkPiYmIGV4ZWN1dGlvbkNvbnRl
eHRJZCkKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBJ
bmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdDsKIAotICAgIFN0cmluZyBvYmplY3RJZDsKLSAg
ICBpZiAoY2FsbEFyZ3VtZW50LmdldFN0cmluZygib2JqZWN0SWQiX3MsIG9iamVjdElkKSkgewot
ICAgICAgICBpbmplY3RlZFNjcmlwdCA9IG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmluamVjdGVk
U2NyaXB0Rm9yT2JqZWN0SWQob2JqZWN0SWQpOwotICAgICAgICBpZiAoaW5qZWN0ZWRTY3JpcHQu
aGFzTm9WYWx1ZSgpKSB7Ci0gICAgICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIGluamVj
dGVkIHNjcmlwdCBmb3IgZ2l2ZW4gb2JqZWN0SWQiX3M7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBpbmplY3RlZFNjcmlwdCA9IGluamVjdGVk
U2NyaXB0Rm9yRXZhbChlcnJvclN0cmluZywgZXhlY3V0aW9uQ29udGV4dElkKTsKKyAgICBhdXRv
IG9iamVjdElkID0gY2FsbEFyZ3VtZW50LT5nZXRTdHJpbmcoUHJvdG9jb2w6OlJ1bnRpbWU6OkNh
bGxBcmd1bWVudDo6b2JqZWN0SWRLZXkpOworICAgIGlmICghb2JqZWN0SWQpIHsKKyAgICAgICAg
aW5qZWN0ZWRTY3JpcHQgPSBpbmplY3RlZFNjcmlwdEZvckV2YWwoZXJyb3JTdHJpbmcsIFdURk1v
dmUoZXhlY3V0aW9uQ29udGV4dElkKSk7CiAgICAgICAgIGlmIChpbmplY3RlZFNjcmlwdC5oYXNO
b1ZhbHVlKCkpCi0gICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICByZXR1cm4gbWFrZVVu
ZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOworICAgIH0gZWxzZSB7CisgICAgICAgIGluamVjdGVkU2Ny
aXB0ID0gbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIuaW5qZWN0ZWRTY3JpcHRGb3JPYmplY3RJZChv
YmplY3RJZCk7CisgICAgICAgIGlmIChpbmplY3RlZFNjcmlwdC5oYXNOb1ZhbHVlKCkpCisgICAg
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk1pc3NpbmcgaW5qZWN0ZWQgc2NyaXB0IGZv
ciBnaXZlbiBvYmplY3RJZCJfcyk7CiAgICAgfQotICAgIAotICAgIGluamVjdGVkU2NyaXB0LnNh
dmVSZXN1bHQoZXJyb3JTdHJpbmcsIGNhbGxBcmd1bWVudC50b0pTT05TdHJpbmcoKSwgc2F2ZWRS
ZXN1bHRJbmRleCk7CisKKyAgICBPcHRpb25hbDxpbnQ+IHNhdmVkUmVzdWx0SW5kZXg7CisKKyAg
ICBpbmplY3RlZFNjcmlwdC5zYXZlUmVzdWx0KGVycm9yU3RyaW5nLCBjYWxsQXJndW1lbnQtPnRv
SlNPTlN0cmluZygpLCBzYXZlZFJlc3VsdEluZGV4KTsKKworICAgIGlmICghc2F2ZWRSZXN1bHRJ
bmRleCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKKworICAg
IHJldHVybiBXVEZNb3ZlKHNhdmVkUmVzdWx0SW5kZXgpOwogfQogCi12b2lkIEluc3BlY3RvclJ1
bnRpbWVBZ2VudDo6c2V0U2F2ZWRSZXN1bHRBbGlhcyhFcnJvclN0cmluZyYsIGNvbnN0IFN0cmlu
ZyogYWxpYXMpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JSdW50aW1l
QWdlbnQ6OnNldFNhdmVkUmVzdWx0QWxpYXMoY29uc3QgU3RyaW5nJiBzYXZlZFJlc3VsdEFsaWFz
KQogewotICAgIE9wdGlvbmFsPFN0cmluZz4gc2F2ZWRSZXN1bHRBbGlhczsKLSAgICBpZiAoYWxp
YXMgJiYgIWFsaWFzLT5pc0VtcHR5KCkpCi0gICAgICAgIHNhdmVkUmVzdWx0QWxpYXMgPSAqYWxp
YXM7CiAgICAgbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIuaW5qZWN0ZWRTY3JpcHRIb3N0KCkuc2V0
U2F2ZWRSZXN1bHRBbGlhcyhzYXZlZFJlc3VsdEFsaWFzKTsKKworICAgIHJldHVybiB7IH07CiB9
CiAKLXZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50OjpyZWxlYXNlT2JqZWN0KEVycm9yU3RyaW5n
JiwgY29uc3QgU3RyaW5nJiBvYmplY3RJZCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+
IEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6cmVsZWFzZU9iamVjdChjb25zdCBQcm90b2NvbDo6UnVu
dGltZTo6UmVtb3RlT2JqZWN0SWQmIG9iamVjdElkKQogewogICAgIEluamVjdGVkU2NyaXB0IGlu
amVjdGVkU2NyaXB0ID0gbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIuaW5qZWN0ZWRTY3JpcHRGb3JP
YmplY3RJZChvYmplY3RJZCk7CiAgICAgaWYgKCFpbmplY3RlZFNjcmlwdC5oYXNOb1ZhbHVlKCkp
CiAgICAgICAgIGluamVjdGVkU2NyaXB0LnJlbGVhc2VPYmplY3Qob2JqZWN0SWQpOworCisgICAg
cmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OnJlbGVhc2VPYmpl
Y3RHcm91cChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgb2JqZWN0R3JvdXApCitQcm90b2Nv
bDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OnJlbGVhc2VPYmpl
Y3RHcm91cChjb25zdCBTdHJpbmcmIG9iamVjdEdyb3VwKQogewogICAgIG1faW5qZWN0ZWRTY3Jp
cHRNYW5hZ2VyLnJlbGVhc2VPYmplY3RHcm91cChvYmplY3RHcm91cCk7CisKKyAgICByZXR1cm4g
eyB9OwogfQogCi12b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6Z2V0UnVudGltZVR5cGVzRm9y
VmFyaWFibGVzQXRPZmZzZXRzKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgSlNPTjo6
QXJyYXkmIGxvY2F0aW9ucywgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6
OlR5cGVEZXNjcmlwdGlvbj4+JiB0eXBlRGVzY3JpcHRpb25zKQorUHJvdG9jb2w6OkVycm9yU3Ry
aW5nT3I8UmVmPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OlR5cGVEZXNjcmlwdGlv
bj4+PiBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmdldFJ1bnRpbWVUeXBlc0ZvclZhcmlhYmxlc0F0
T2Zmc2V0cyhSZWY8SlNPTjo6QXJyYXk+JiYgbG9jYXRpb25zKQogewogICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCB2ZXJib3NlID0gZmFsc2U7CiAKLSAgICB0eXBlRGVzY3JpcHRpb25zID0gSlNP
Tjo6QXJyYXlPZjxQcm90b2NvbDo6UnVudGltZTo6VHlwZURlc2NyaXB0aW9uPjo6Y3JlYXRlKCk7
Ci0gICAgaWYgKCFtX3ZtLnR5cGVQcm9maWxlcigpKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0g
IlZNIGhhcyBubyB0eXBlIGluZm9ybWF0aW9uIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQor
ICAgIGlmICghbV92bS50eXBlUHJvZmlsZXIoKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVj
dGVkKCJWTSBoYXMgbm8gdHlwZSBpbmZvcm1hdGlvbiJfcyk7CisKKyAgICBhdXRvIHR5cGVzID0g
SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UnVudGltZTo6VHlwZURlc2NyaXB0aW9uPjo6Y3JlYXRl
KCk7CiAKICAgICBNb25vdG9uaWNUaW1lIHN0YXJ0ID0gTW9ub3RvbmljVGltZTo6bm93KCk7CiAg
ICAgbV92bS50eXBlUHJvZmlsZXJMb2coKS0+cHJvY2Vzc0xvZ0VudHJpZXMobV92bSwgIlVzZXIg
UXVlcnkiX3MpOwogCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsb2NhdGlvbnMubGVuZ3Ro
KCk7IGkrKykgewotICAgICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHZhbHVlID0gbG9jYXRpb25z
LmdldChpKTsKLSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gbG9jYXRpb247Ci0gICAgICAg
IGlmICghdmFsdWUtPmFzT2JqZWN0KGxvY2F0aW9uKSkgewotICAgICAgICAgICAgZXJyb3JTdHJp
bmcgPSAiVW5leHBlY3RlZCBub24tb2JqZWN0IGl0ZW0gaW4gbG9jYXRpb25zIl9zOwotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsb2Nh
dGlvbnMtPmxlbmd0aCgpOyBpKyspIHsKKyAgICAgICAgYXV0byBsb2NhdGlvbiA9IGxvY2F0aW9u
cy0+Z2V0KGkpLT5hc09iamVjdCgpOworICAgICAgICBpZiAoIWxvY2F0aW9uKQorICAgICAgICAg
ICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJVbmV4cGVjdGVkIG5vbi1vYmplY3QgaXRlbSBpbiBs
b2NhdGlvbnMiX3MpOwogCi0gICAgICAgIGludCBkZXNjcmlwdG9yOwotICAgICAgICBTdHJpbmcg
c291cmNlSURBc1N0cmluZzsKLSAgICAgICAgaW50IGRpdm90OwotICAgICAgICBsb2NhdGlvbi0+
Z2V0SW50ZWdlcigidHlwZUluZm9ybWF0aW9uRGVzY3JpcHRvciJfcywgZGVzY3JpcHRvcik7Ci0g
ICAgICAgIGxvY2F0aW9uLT5nZXRTdHJpbmcoInNvdXJjZUlEIl9zLCBzb3VyY2VJREFzU3RyaW5n
KTsKLSAgICAgICAgbG9jYXRpb24tPmdldEludGVnZXIoImRpdm90Il9zLCBkaXZvdCk7CisgICAg
ICAgIGF1dG8gZGVzY3JpcHRvciA9IGxvY2F0aW9uLT5nZXRJbnRlZ2VyKFByb3RvY29sOjpSdW50
aW1lOjpUeXBlTG9jYXRpb246OnR5cGVJbmZvcm1hdGlvbkRlc2NyaXB0b3JLZXkpLnZhbHVlT3Io
VHlwZVByb2ZpbGVyU2VhcmNoRGVzY3JpcHRvck5vcm1hbCk7CisgICAgICAgIGF1dG8gc291cmNl
SURTdHJpbmcgPSBsb2NhdGlvbi0+Z2V0U3RyaW5nKFByb3RvY29sOjpSdW50aW1lOjpUeXBlTG9j
YXRpb246OnNvdXJjZUlES2V5KTsKKyAgICAgICAgYXV0byBkaXZvdCA9IGxvY2F0aW9uLT5nZXRJ
bnRlZ2VyKFByb3RvY29sOjpSdW50aW1lOjpUeXBlTG9jYXRpb246OmRpdm90S2V5KS52YWx1ZU9y
KDApOwogCiAgICAgICAgIGJvb2wgb2theTsKLSAgICAgICAgVHlwZUxvY2F0aW9uKiB0eXBlTG9j
YXRpb24gPSBtX3ZtLnR5cGVQcm9maWxlcigpLT5maW5kTG9jYXRpb24oZGl2b3QsIHNvdXJjZUlE
QXNTdHJpbmcudG9JbnRQdHJTdHJpY3QoJm9rYXkpLCBzdGF0aWNfY2FzdDxUeXBlUHJvZmlsZXJT
ZWFyY2hEZXNjcmlwdG9yPihkZXNjcmlwdG9yKSwgbV92bSk7CisgICAgICAgIFR5cGVMb2NhdGlv
biogdHlwZUxvY2F0aW9uID0gbV92bS50eXBlUHJvZmlsZXIoKS0+ZmluZExvY2F0aW9uKGRpdm90
LCBzb3VyY2VJRFN0cmluZy50b0ludFB0clN0cmljdCgmb2theSksIHN0YXRpY19jYXN0PFR5cGVQ
cm9maWxlclNlYXJjaERlc2NyaXB0b3I+KGRlc2NyaXB0b3IpLCBtX3ZtKTsKICAgICAgICAgQVNT
RVJUKG9rYXkpOwogCiAgICAgICAgIFJlZlB0cjxUeXBlU2V0PiB0eXBlU2V0OwpAQCAtMzcyLDEy
ICs0MTksMTQgQEAgdm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmdldFJ1bnRpbWVUeXBlc0Zv
clZhcmlhYmxlc0F0T2Zmc2V0cyhFcnJvclN0cmluZyYgZXIKICAgICAgICAgICAgIGRlc2NyaXB0
aW9uLT5zZXRJc1RydW5jYXRlZCh0eXBlU2V0LT5pc092ZXJmbG93bigpKTsKICAgICAgICAgfQog
Ci0gICAgICAgIHR5cGVEZXNjcmlwdGlvbnMtPmFkZEl0ZW0oV1RGTW92ZShkZXNjcmlwdGlvbikp
OworICAgICAgICB0eXBlcy0+YWRkSXRlbShXVEZNb3ZlKGRlc2NyaXB0aW9uKSk7CiAgICAgfQog
CiAgICAgTW9ub3RvbmljVGltZSBlbmQgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKICAgICBpZiAo
dmVyYm9zZSkKICAgICAgICAgZGF0YUxvZ0YoIkluc3BlY3Rvcjo6Z2V0UnVudGltZVR5cGVzRm9y
VmFyaWFibGVzQXRPZmZzZXRzIHRvb2sgJWxmbXNcbiIsIChlbmQgLSBzdGFydCkubWlsbGlzZWNv
bmRzKCkpOworCisgICAgcmV0dXJuIFdURk1vdmUodHlwZXMpOwogfQogCiB2b2lkIEluc3BlY3Rv
clJ1bnRpbWVBZ2VudDo6ZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJv
bnRlbmRSb3V0ZXIqLCBJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyKikKQEAgLTM4OSwyOCAr
NDM4LDM1IEBAIHZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5k
QW5kQmFja2VuZChEaXNjb25uZWN0UmVhc29uIHJlYXNvCiAgICAgaWYgKHJlYXNvbiAhPSBEaXNj
b25uZWN0UmVhc29uOjpJbnNwZWN0ZWRUYXJnZXREZXN0cm95ZWQgJiYgbV9pc1R5cGVQcm9maWxp
bmdFbmFibGVkKQogICAgICAgICBzZXRUeXBlUHJvZmlsZXJFbmFibGVkU3RhdGUoZmFsc2UpOwog
Ci0gICAgU3RyaW5nIHVudXNlZDsKLSAgICBkaXNhYmxlKHVudXNlZCk7CisgICAgZGlzYWJsZSgp
OwogfQogCi12b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6ZW5hYmxlVHlwZVByb2ZpbGVyKEVy
cm9yU3RyaW5nJikKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvclJ1bnRp
bWVBZ2VudDo6ZW5hYmxlVHlwZVByb2ZpbGVyKCkKIHsKICAgICBzZXRUeXBlUHJvZmlsZXJFbmFi
bGVkU3RhdGUodHJ1ZSk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvclJ1
bnRpbWVBZ2VudDo6ZGlzYWJsZVR5cGVQcm9maWxlcihFcnJvclN0cmluZyYpCitQcm90b2NvbDo6
RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmRpc2FibGVUeXBlUHJv
ZmlsZXIoKQogewogICAgIHNldFR5cGVQcm9maWxlckVuYWJsZWRTdGF0ZShmYWxzZSk7CisKKyAg
ICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6ZW5hYmxlQ29u
dHJvbEZsb3dQcm9maWxlcihFcnJvclN0cmluZyYpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2
b2lkPiBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmVuYWJsZUNvbnRyb2xGbG93UHJvZmlsZXIoKQog
ewogICAgIHNldENvbnRyb2xGbG93UHJvZmlsZXJFbmFibGVkU3RhdGUodHJ1ZSk7CisKKyAgICBy
ZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6ZGlzYWJsZUNvbnRy
b2xGbG93UHJvZmlsZXIoRXJyb3JTdHJpbmcmKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9p
ZD4gSW5zcGVjdG9yUnVudGltZUFnZW50OjpkaXNhYmxlQ29udHJvbEZsb3dQcm9maWxlcigpCiB7
CiAgICAgc2V0Q29udHJvbEZsb3dQcm9maWxlckVuYWJsZWRTdGF0ZShmYWxzZSk7CisKKyAgICBy
ZXR1cm4geyB9OwogfQogCiB2b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6c2V0VHlwZVByb2Zp
bGVyRW5hYmxlZFN0YXRlKGJvb2wgaXNUeXBlUHJvZmlsaW5nRW5hYmxlZCkKQEAgLTQ0MiwxOSAr
NDk4LDEzIEBAIHZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50OjpzZXRDb250cm9sRmxvd1Byb2Zp
bGVyRW5hYmxlZFN0YXRlKGJvb2wgaXNDb250cm9sRmxvCiAgICAgfSk7CiB9CiAKLXZvaWQgSW5z
cGVjdG9yUnVudGltZUFnZW50OjpnZXRCYXNpY0Jsb2NrcyhFcnJvclN0cmluZyYgZXJyb3JTdHJp
bmcsIGNvbnN0IFN0cmluZyYgc291cmNlSURBc1N0cmluZywgUmVmUHRyPEpTT046OkFycmF5T2Y8
UHJvdG9jb2w6OlJ1bnRpbWU6OkJhc2ljQmxvY2s+PiYgYmFzaWNCbG9ja3MpCitQcm90b2NvbDo6
RXJyb3JTdHJpbmdPcjxSZWY8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UnVudGltZTo6QmFzaWNC
bG9jaz4+PiBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmdldEJhc2ljQmxvY2tzKGNvbnN0IFN0cmlu
ZyYgc291cmNlSUQpCiB7Ci0gICAgaWYgKCFtX3ZtLmNvbnRyb2xGbG93UHJvZmlsZXIoKSkgewot
ICAgICAgICBlcnJvclN0cmluZyA9ICJWTSBoYXMgbm8gY29udHJvbCBmbG93IGluZm9ybWF0aW9u
Il9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghbV92bS5jb250cm9sRmxvd1By
b2ZpbGVyKCkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiVk0gaGFzIG5vIGNvbnRy
b2wgZmxvdyBpbmZvcm1hdGlvbiJfcyk7CiAKLSAgICBib29sIG9rYXk7Ci0gICAgaW50cHRyX3Qg
c291cmNlSUQgPSBzb3VyY2VJREFzU3RyaW5nLnRvSW50UHRyU3RyaWN0KCZva2F5KTsKLSAgICBB
U1NFUlQob2theSk7Ci0gICAgY29uc3QgVmVjdG9yPEJhc2ljQmxvY2tSYW5nZT4mIGJhc2ljQmxv
Y2tSYW5nZXMgPSBtX3ZtLmNvbnRyb2xGbG93UHJvZmlsZXIoKS0+Z2V0QmFzaWNCbG9ja3NGb3JT
b3VyY2VJRChzb3VyY2VJRCwgbV92bSk7Ci0gICAgYmFzaWNCbG9ja3MgPSBKU09OOjpBcnJheU9m
PFByb3RvY29sOjpSdW50aW1lOjpCYXNpY0Jsb2NrPjo6Y3JlYXRlKCk7Ci0gICAgZm9yIChjb25z
dCBCYXNpY0Jsb2NrUmFuZ2UmIGJsb2NrIDogYmFzaWNCbG9ja1JhbmdlcykgeworICAgIGF1dG8g
YmFzaWNCbG9ja3MgPSBKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpCYXNpY0Jsb2Nr
Pjo6Y3JlYXRlKCk7CisgICAgZm9yIChjb25zdCBhdXRvJiBibG9jayA6IG1fdm0uY29udHJvbEZs
b3dQcm9maWxlcigpLT5nZXRCYXNpY0Jsb2Nrc0ZvclNvdXJjZUlEKHNvdXJjZUlELnRvSW50UHRy
KCksIG1fdm0pKSB7CiAgICAgICAgIGF1dG8gbG9jYXRpb24gPSBQcm90b2NvbDo6UnVudGltZTo6
QmFzaWNCbG9jazo6Y3JlYXRlKCkKICAgICAgICAgICAgIC5zZXRTdGFydE9mZnNldChibG9jay5t
X3N0YXJ0T2Zmc2V0KQogICAgICAgICAgICAgLnNldEVuZE9mZnNldChibG9jay5tX2VuZE9mZnNl
dCkKQEAgLTQ2Myw2ICs1MTMsNyBAQCB2b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6Z2V0QmFz
aWNCbG9ja3MoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbgogICAgICAgICAg
ICAgLnJlbGVhc2UoKTsKICAgICAgICAgYmFzaWNCbG9ja3MtPmFkZEl0ZW0oV1RGTW92ZShsb2Nh
dGlvbikpOwogICAgIH0KKyAgICByZXR1cm4gV1RGTW92ZShiYXNpY0Jsb2Nrcyk7CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIEluc3BlY3RvcgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUnVudGltZUFnZW50LmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JSdW50aW1lQWdlbnQuaAppbmRleCAx
NzU2MTUxMWFmOTc5YjNiMmI3OTFjNzRkZDcyN2Q0YWUzMTI0ZWNlLi5mNDAyOTQ2ZmY2ZGFhODhj
NDg1ZDA5N2FhYzYxYzFkOWViZmMwOWFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JSdW50aW1lQWdlbnQuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JSdW50aW1lQWdlbnQuaApA
QCAtNDUsNyArNDUsNiBAQCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAogY2xhc3MgSW5qZWN0ZWRT
Y3JpcHQ7CiBjbGFzcyBJbmplY3RlZFNjcmlwdE1hbmFnZXI7Ci10eXBlZGVmIFN0cmluZyBFcnJv
clN0cmluZzsKIAogY2xhc3MgSlNfRVhQT1JUX1BSSVZBVEUgSW5zcGVjdG9yUnVudGltZUFnZW50
IDogcHVibGljIEluc3BlY3RvckFnZW50QmFzZSwgcHVibGljIFJ1bnRpbWVCYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXIgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEluc3BlY3RvclJ1bnRpbWVB
Z2VudCk7CkBAIC01OCwzMyArNTcsMzMgQEAgcHVibGljOgogICAgIHZvaWQgd2lsbERlc3Ryb3lG
cm9udGVuZEFuZEJhY2tlbmQoRGlzY29ubmVjdFJlYXNvbikgZmluYWw7CiAKICAgICAvLyBSdW50
aW1lQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyCi0gICAgdm9pZCBlbmFibGUoRXJyb3JTdHJpbmcm
KSBvdmVycmlkZSB7IG1fZW5hYmxlZCA9IHRydWU7IH0KLSAgICB2b2lkIGRpc2FibGUoRXJyb3JT
dHJpbmcmKSBvdmVycmlkZSB7IG1fZW5hYmxlZCA9IGZhbHNlOyB9Ci0gICAgdm9pZCBwYXJzZShF
cnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgUHJvdG9jb2w6OlJ1bnRpbWU6
OlN5bnRheEVycm9yVHlwZSogcmVzdWx0LCBPcHRpb25hbDxTdHJpbmc+JiBtZXNzYWdlLCBSZWZQ
dHI8UHJvdG9jb2w6OlJ1bnRpbWU6OkVycm9yUmFuZ2U+JikgZmluYWw7Ci0gICAgdm9pZCBldmFs
dWF0ZShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgY29uc3QgU3RyaW5n
KiBvYmplY3RHcm91cCwgY29uc3QgYm9vbCogaW5jbHVkZUNvbW1hbmRMaW5lQVBJLCBjb25zdCBi
b29sKiBkb05vdFBhdXNlT25FeGNlcHRpb25zQW5kTXV0ZUNvbnNvbGUsIGNvbnN0IGludCogZXhl
Y3V0aW9uQ29udGV4dElkLCBjb25zdCBib29sKiByZXR1cm5CeVZhbHVlLCBjb25zdCBib29sKiBn
ZW5lcmF0ZVByZXZpZXcsIGNvbnN0IGJvb2wqIHNhdmVSZXN1bHQsIGNvbnN0IGJvb2wqIGVtdWxh
dGVVc2VyR2VzdHVyZSwgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiBy
ZXN1bHQsIE9wdGlvbmFsPGJvb2w+JiB3YXNUaHJvd24sIE9wdGlvbmFsPGludD4mIHNhdmVkUmVz
dWx0SW5kZXgpIG92ZXJyaWRlOwotICAgIHZvaWQgYXdhaXRQcm9taXNlKGNvbnN0IFN0cmluZyYg
cHJvbWlzZU9iamVjdElkLCBjb25zdCBib29sKiByZXR1cm5CeVZhbHVlLCBjb25zdCBib29sKiBn
ZW5lcmF0ZVByZXZpZXcsIGNvbnN0IGJvb2wqIHNhdmVSZXN1bHQsIFJlZjxBd2FpdFByb21pc2VD
YWxsYmFjaz4mJikgZmluYWw7Ci0gICAgdm9pZCBjYWxsRnVuY3Rpb25PbihFcnJvclN0cmluZyYs
IGNvbnN0IFN0cmluZyYgb2JqZWN0SWQsIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgY29uc3Qg
SlNPTjo6QXJyYXkqIG9wdGlvbmFsQXJndW1lbnRzLCBjb25zdCBib29sKiBkb05vdFBhdXNlT25F
eGNlcHRpb25zQW5kTXV0ZUNvbnNvbGUsIGNvbnN0IGJvb2wqIHJldHVybkJ5VmFsdWUsIGNvbnN0
IGJvb2wqIGdlbmVyYXRlUHJldmlldywgY29uc3QgYm9vbCogZW11bGF0ZVVzZXJHZXN0dXJlLCBS
ZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3VsdCwgT3B0aW9uYWw8
Ym9vbD4mIHdhc1Rocm93bikgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZWxlYXNlT2JqZWN0KEVycm9y
U3RyaW5nJiwgY29uc3QgRXJyb3JTdHJpbmcmIG9iamVjdElkKSBmaW5hbDsKLSAgICB2b2lkIGdl
dFByZXZpZXcoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBSZWZQdHI8UHJv
dG9jb2w6OlJ1bnRpbWU6Ok9iamVjdFByZXZpZXc+JikgZmluYWw7Ci0gICAgdm9pZCBnZXRQcm9w
ZXJ0aWVzKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBvYmplY3RJZCwgY29uc3QgYm9vbCog
b3duUHJvcGVydGllcywgY29uc3QgaW50KiBmZXRjaFN0YXJ0LCBjb25zdCBpbnQqIGZldGNoQ291
bnQsIGNvbnN0IGJvb2wqIGdlbmVyYXRlUHJldmlldywgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJv
dG9jb2w6OlJ1bnRpbWU6OlByb3BlcnR5RGVzY3JpcHRvcj4+JiBwcm9wZXJ0aWVzLCBSZWZQdHI8
SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UnVudGltZTo6SW50ZXJuYWxQcm9wZXJ0eURlc2NyaXB0
b3I+PiYgaW50ZXJuYWxQcm9wZXJ0aWVzKSBmaW5hbDsKLSAgICB2b2lkIGdldERpc3BsYXlhYmxl
UHJvcGVydGllcyhFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgb2JqZWN0SWQsIGNvbnN0IGlu
dCogZmV0Y2hTdGFydCwgY29uc3QgaW50KiBmZXRjaENvdW50LCBjb25zdCBib29sKiBnZW5lcmF0
ZVByZXZpZXcsIFJlZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpQcm9wZXJ0
eURlc2NyaXB0b3I+PiYgcHJvcGVydGllcywgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6
OlJ1bnRpbWU6OkludGVybmFsUHJvcGVydHlEZXNjcmlwdG9yPj4mIGludGVybmFsUHJvcGVydGll
cykgZmluYWw7Ci0gICAgdm9pZCBnZXRDb2xsZWN0aW9uRW50cmllcyhFcnJvclN0cmluZyYsIGNv
bnN0IFN0cmluZyYgb2JqZWN0SWQsIGNvbnN0IFN0cmluZyogb2JqZWN0R3JvdXAsIGNvbnN0IGlu
dCogZmV0Y2hTdGFydCwgY29uc3QgaW50KiBmZXRjaENvdW50LCBSZWZQdHI8SlNPTjo6QXJyYXlP
ZjxQcm90b2NvbDo6UnVudGltZTo6Q29sbGVjdGlvbkVudHJ5Pj4mIGVudHJpZXMpIGZpbmFsOwot
ICAgIHZvaWQgc2F2ZVJlc3VsdChFcnJvclN0cmluZyYsIGNvbnN0IEpTT046Ok9iamVjdCYgY2Fs
bEFyZ3VtZW50LCBjb25zdCBpbnQqIGV4ZWN1dGlvbkNvbnRleHRJZCwgT3B0aW9uYWw8aW50PiYg
c2F2ZWRSZXN1bHRJbmRleCkgZmluYWw7Ci0gICAgdm9pZCBzZXRTYXZlZFJlc3VsdEFsaWFzKEVy
cm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nKiBhbGlhcykgZmluYWw7Ci0gICAgdm9pZCByZWxlYXNl
T2JqZWN0R3JvdXAoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIG9iamVjdEdyb3VwKSBmaW5h
bDsKLSAgICB2b2lkIGdldFJ1bnRpbWVUeXBlc0ZvclZhcmlhYmxlc0F0T2Zmc2V0cyhFcnJvclN0
cmluZyYsIGNvbnN0IEpTT046OkFycmF5JiBsb2NhdGlvbnMsIFJlZlB0cjxKU09OOjpBcnJheU9m
PFByb3RvY29sOjpSdW50aW1lOjpUeXBlRGVzY3JpcHRpb24+PiYpIGZpbmFsOwotICAgIHZvaWQg
ZW5hYmxlVHlwZVByb2ZpbGVyKEVycm9yU3RyaW5nJikgZmluYWw7Ci0gICAgdm9pZCBkaXNhYmxl
VHlwZVByb2ZpbGVyKEVycm9yU3RyaW5nJikgZmluYWw7Ci0gICAgdm9pZCBlbmFibGVDb250cm9s
Rmxvd1Byb2ZpbGVyKEVycm9yU3RyaW5nJikgZmluYWw7Ci0gICAgdm9pZCBkaXNhYmxlQ29udHJv
bEZsb3dQcm9maWxlcihFcnJvclN0cmluZyYpIGZpbmFsOwotICAgIHZvaWQgZ2V0QmFzaWNCbG9j
a3MoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGluX3NvdXJjZUlELCBSZWZQdHI8SlNPTjo6
QXJyYXlPZjxQcm90b2NvbDo6UnVudGltZTo6QmFzaWNCbG9jaz4+JiBvdXRfYmFzaWNCbG9ja3Mp
IGZpbmFsOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGVuYWJsZSgpIG92ZXJy
aWRlOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGRpc2FibGUoKSBvdmVycmlk
ZTsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxzdGQ6OnR1cGxlPFByb3RvY29sOjpSdW50
aW1lOjpTeW50YXhFcnJvclR5cGUsIFN0cmluZyAvKiBtZXNzYWdlICovLCBSZWZQdHI8UHJvdG9j
b2w6OlJ1bnRpbWU6OkVycm9yUmFuZ2U+Pj4gcGFyc2UoY29uc3QgU3RyaW5nJiBleHByZXNzaW9u
KSBmaW5hbDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxzdGQ6OnR1cGxlPFJlZjxQcm90
b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiwgT3B0aW9uYWw8Ym9vbD4gLyogd2FzVGhyb3du
ICovLCBPcHRpb25hbDxpbnQ+IC8qIHNhdmVkUmVzdWx0SW5kZXggKi8+PiBldmFsdWF0ZShjb25z
dCBTdHJpbmcmIGV4cHJlc3Npb24sIGNvbnN0IFN0cmluZyYgb2JqZWN0R3JvdXAsIE9wdGlvbmFs
PGJvb2w+JiYgaW5jbHVkZUNvbW1hbmRMaW5lQVBJLCBPcHRpb25hbDxib29sPiYmIGRvTm90UGF1
c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29sZSwgT3B0aW9uYWw8UHJvdG9jb2w6OlJ1bnRpbWU6
OkV4ZWN1dGlvbkNvbnRleHRJZD4mJiwgT3B0aW9uYWw8Ym9vbD4mJiByZXR1cm5CeVZhbHVlLCBP
cHRpb25hbDxib29sPiYmIGdlbmVyYXRlUHJldmlldywgT3B0aW9uYWw8Ym9vbD4mJiBzYXZlUmVz
dWx0LCBPcHRpb25hbDxib29sPiYmIGVtdWxhdGVVc2VyR2VzdHVyZSkgb3ZlcnJpZGU7CisgICAg
dm9pZCBhd2FpdFByb21pc2UoY29uc3QgUHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdElk
JiwgT3B0aW9uYWw8Ym9vbD4mJiByZXR1cm5CeVZhbHVlLCBPcHRpb25hbDxib29sPiYmIGdlbmVy
YXRlUHJldmlldywgT3B0aW9uYWw8Ym9vbD4mJiBzYXZlUmVzdWx0LCBSZWY8QXdhaXRQcm9taXNl
Q2FsbGJhY2s+JiYpIGZpbmFsOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHN0ZDo6dHVw
bGU8UmVmPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+LCBPcHRpb25hbDxib29sPiAv
KiB3YXNUaHJvd24gKi8+PiBjYWxsRnVuY3Rpb25Pbihjb25zdCBQcm90b2NvbDo6UnVudGltZTo6
UmVtb3RlT2JqZWN0SWQmLCBjb25zdCBTdHJpbmcmIGZ1bmN0aW9uRGVjbGFyYXRpb24sIFJlZlB0
cjxKU09OOjpBcnJheT4mJiBhcmd1bWVudHMsIE9wdGlvbmFsPGJvb2w+JiYgZG9Ob3RQYXVzZU9u
RXhjZXB0aW9uc0FuZE11dGVDb25zb2xlLCBPcHRpb25hbDxib29sPiYmIHJldHVybkJ5VmFsdWUs
IE9wdGlvbmFsPGJvb2w+JiYgZ2VuZXJhdGVQcmV2aWV3LCBPcHRpb25hbDxib29sPiYmIGVtdWxh
dGVVc2VyR2VzdHVyZSkgb3ZlcnJpZGU7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9p
ZD4gcmVsZWFzZU9iamVjdChjb25zdCBQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0SWQm
KSBmaW5hbDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8UHJvdG9jb2w6OlJ1bnRp
bWU6Ok9iamVjdFByZXZpZXc+PiBnZXRQcmV2aWV3KGNvbnN0IFByb3RvY29sOjpSdW50aW1lOjpS
ZW1vdGVPYmplY3RJZCYpIGZpbmFsOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHN0ZDo6
dHVwbGU8UmVmPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OlByb3BlcnR5RGVzY3Jp
cHRvcj4+LCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UnVudGltZTo6SW50ZXJuYWxQ
cm9wZXJ0eURlc2NyaXB0b3I+Pj4+IGdldFByb3BlcnRpZXMoY29uc3QgUHJvdG9jb2w6OlJ1bnRp
bWU6OlJlbW90ZU9iamVjdElkJiwgT3B0aW9uYWw8Ym9vbD4mJiBvd25Qcm9wZXJ0aWVzLCBPcHRp
b25hbDxpbnQ+JiYgZmV0Y2hTdGFydCwgT3B0aW9uYWw8aW50PiYmIGZldGNoQ291bnQsIE9wdGlv
bmFsPGJvb2w+JiYgZ2VuZXJhdGVQcmV2aWV3KSBmaW5hbDsKKyAgICBQcm90b2NvbDo6RXJyb3JT
dHJpbmdPcjxzdGQ6OnR1cGxlPFJlZjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpQ
cm9wZXJ0eURlc2NyaXB0b3I+PiwgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRp
bWU6OkludGVybmFsUHJvcGVydHlEZXNjcmlwdG9yPj4+PiBnZXREaXNwbGF5YWJsZVByb3BlcnRp
ZXMoY29uc3QgUHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdElkJiwgT3B0aW9uYWw8aW50
PiYmIGZldGNoU3RhcnQsIE9wdGlvbmFsPGludD4mJiBmZXRjaENvdW50LCBPcHRpb25hbDxib29s
PiYmIGdlbmVyYXRlUHJldmlldykgZmluYWw7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8
UmVmPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OkNvbGxlY3Rpb25FbnRyeT4+PiBn
ZXRDb2xsZWN0aW9uRW50cmllcyhjb25zdCBQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0
SWQmLCBjb25zdCBTdHJpbmcmIG9iamVjdEdyb3VwLCBPcHRpb25hbDxpbnQ+JiYgZmV0Y2hTdGFy
dCwgT3B0aW9uYWw8aW50PiYmIGZldGNoQ291bnQpIGZpbmFsOworICAgIFByb3RvY29sOjpFcnJv
clN0cmluZ09yPE9wdGlvbmFsPGludD4gLyogc2F2ZVJlc3VsdEluZGV4ICovPiBzYXZlUmVzdWx0
KFJlZjxKU09OOjpPYmplY3Q+JiYgY2FsbEFyZ3VtZW50LCBPcHRpb25hbDxQcm90b2NvbDo6UnVu
dGltZTo6RXhlY3V0aW9uQ29udGV4dElkPiYmKSBmaW5hbDsKKyAgICBQcm90b2NvbDo6RXJyb3JT
dHJpbmdPcjx2b2lkPiBzZXRTYXZlZFJlc3VsdEFsaWFzKGNvbnN0IFN0cmluZyYpIGZpbmFsOwor
ICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHJlbGVhc2VPYmplY3RHcm91cChjb25z
dCBTdHJpbmcmKSBmaW5hbDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SlNPTjo6
QXJyYXlPZjxQcm90b2NvbDo6UnVudGltZTo6VHlwZURlc2NyaXB0aW9uPj4+IGdldFJ1bnRpbWVU
eXBlc0ZvclZhcmlhYmxlc0F0T2Zmc2V0cyhSZWY8SlNPTjo6QXJyYXk+JiYgbG9jYXRpb25zKSBm
aW5hbDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBlbmFibGVUeXBlUHJvZmls
ZXIoKSBmaW5hbDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBkaXNhYmxlVHlw
ZVByb2ZpbGVyKCkgZmluYWw7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZW5h
YmxlQ29udHJvbEZsb3dQcm9maWxlcigpIGZpbmFsOworICAgIFByb3RvY29sOjpFcnJvclN0cmlu
Z09yPHZvaWQ+IGRpc2FibGVDb250cm9sRmxvd1Byb2ZpbGVyKCkgZmluYWw7CisgICAgUHJvdG9j
b2w6OkVycm9yU3RyaW5nT3I8UmVmPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OkJh
c2ljQmxvY2s+Pj4gZ2V0QmFzaWNCbG9ja3MoY29uc3QgU3RyaW5nJiBzb3VyY2VJRCkgZmluYWw7
CiAKIHByb3RlY3RlZDoKICAgICBJbnNwZWN0b3JSdW50aW1lQWdlbnQoQWdlbnRDb250ZXh0Jik7
CiAKICAgICBJbmplY3RlZFNjcmlwdE1hbmFnZXImIGluamVjdGVkU2NyaXB0TWFuYWdlcigpIHsg
cmV0dXJuIG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOyB9CiAKLSAgICB2aXJ0dWFsIEluamVjdGVk
U2NyaXB0IGluamVjdGVkU2NyaXB0Rm9yRXZhbChFcnJvclN0cmluZyYsIGNvbnN0IGludCogZXhl
Y3V0aW9uQ29udGV4dElkKSA9IDA7CisgICAgdmlydHVhbCBJbmplY3RlZFNjcmlwdCBpbmplY3Rl
ZFNjcmlwdEZvckV2YWwoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiwgT3B0aW9uYWw8UHJvdG9jb2w6
OlJ1bnRpbWU6OkV4ZWN1dGlvbkNvbnRleHRJZD4mJikgPSAwOwogCiAgICAgdmlydHVhbCB2b2lk
IG11dGVDb25zb2xlKCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCB1bm11dGVDb25zb2xlKCkgPSAw
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5z
cGVjdG9yU2NyaXB0UHJvZmlsZXJBZ2VudC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL2FnZW50cy9JbnNwZWN0b3JTY3JpcHRQcm9maWxlckFnZW50LmNwcAppbmRleCA2ODEz
ZTA3NWE5NGIzNjMxZmI1MmVhZGQ5Y2U3OTliOWM3ZGNkOGRlLi43ZWI1MWFmMzBmZGE4MDJjYTgx
YThiMTBlY2Q3ZTZlYmVlMjIxMTdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JTY3JpcHRQcm9maWxlckFnZW50LmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JTY3JpcHRQcm9m
aWxlckFnZW50LmNwcApAQCAtNjQsMTAgKzY0LDEwIEBAIHZvaWQgSW5zcGVjdG9yU2NyaXB0UHJv
ZmlsZXJBZ2VudDo6d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoRGlzY29ubmVjdFJlYXNv
CiAgICAgfQogfQogCi12b2lkIEluc3BlY3RvclNjcmlwdFByb2ZpbGVyQWdlbnQ6OnN0YXJ0VHJh
Y2tpbmcoRXJyb3JTdHJpbmcmLCBjb25zdCBib29sKiBpbmNsdWRlU2FtcGxlcykKK1Byb3RvY29s
OjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvclNjcmlwdFByb2ZpbGVyQWdlbnQ6OnN0YXJ0
VHJhY2tpbmcoT3B0aW9uYWw8Ym9vbD4mJiBpbmNsdWRlU2FtcGxlcykKIHsKICAgICBpZiAobV90
cmFja2luZykKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4geyB9OwogCiAgICAgbV90
cmFja2luZyA9IHRydWU7CiAKQEAgLTkxLDEyICs5MSwxNCBAQCB2b2lkIEluc3BlY3RvclNjcmlw
dFByb2ZpbGVyQWdlbnQ6OnN0YXJ0VHJhY2tpbmcoRXJyb3JTdHJpbmcmLCBjb25zdCBib29sKiBp
bmNsdQogICAgIG1fZW52aXJvbm1lbnQuZGVidWdnZXIoKS5zZXRQcm9maWxpbmdDbGllbnQodGhp
cyk7CiAKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+dHJhY2tpbmdTdGFydChzdG9wd2F0Y2gu
ZWxhcHNlZFRpbWUoKS5zZWNvbmRzKCkpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJ
bnNwZWN0b3JTY3JpcHRQcm9maWxlckFnZW50OjpzdG9wVHJhY2tpbmcoRXJyb3JTdHJpbmcmKQor
UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yU2NyaXB0UHJvZmlsZXJBZ2Vu
dDo6c3RvcFRyYWNraW5nKCkKIHsKICAgICBpZiAoIW1fdHJhY2tpbmcpCi0gICAgICAgIHJldHVy
bjsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIG1fdHJhY2tpbmcgPSBmYWxzZTsKICAgICBt
X2FjdGl2ZUV2YWx1YXRlU2NyaXB0ID0gZmFsc2U7CkBAIC0xMDQsNiArMTA2LDggQEAgdm9pZCBJ
bnNwZWN0b3JTY3JpcHRQcm9maWxlckFnZW50OjpzdG9wVHJhY2tpbmcoRXJyb3JTdHJpbmcmKQog
ICAgIG1fZW52aXJvbm1lbnQuZGVidWdnZXIoKS5zZXRQcm9maWxpbmdDbGllbnQobnVsbHB0cik7
CiAKICAgICB0cmFja2luZ0NvbXBsZXRlKCk7CisKKyAgICByZXR1cm4geyB9OwogfQogCiBib29s
IEluc3BlY3RvclNjcmlwdFByb2ZpbGVyQWdlbnQ6OmlzQWxyZWFkeVByb2ZpbGluZygpIGNvbnN0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNw
ZWN0b3JTY3JpcHRQcm9maWxlckFnZW50LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL2FnZW50cy9JbnNwZWN0b3JTY3JpcHRQcm9maWxlckFnZW50LmgKaW5kZXggN2U3Y2RjOWY5
NzUwNjc3NjYyOTc0MGFhZGNiNTRmYjRkYTAwZDA4Zi4uMjhmNTQ4OGQwYWZjMDYzYjI5ZGQwZmY3
Y2RkNTBlNWQ1MGE2NDc4NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9hZ2VudHMvSW5zcGVjdG9yU2NyaXB0UHJvZmlsZXJBZ2VudC5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclNjcmlwdFByb2ZpbGVyQWdl
bnQuaApAQCAtMzcsMjcgKzM3LDI1IEBAIGNsYXNzIFByb2ZpbGU7CiAKIG5hbWVzcGFjZSBJbnNw
ZWN0b3IgewogCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQogY2xhc3MgSlNfRVhQT1JU
X1BSSVZBVEUgSW5zcGVjdG9yU2NyaXB0UHJvZmlsZXJBZ2VudCBmaW5hbCA6IHB1YmxpYyBJbnNw
ZWN0b3JBZ2VudEJhc2UsIHB1YmxpYyBTY3JpcHRQcm9maWxlckJhY2tlbmREaXNwYXRjaGVySGFu
ZGxlciwgcHVibGljIEpTQzo6RGVidWdnZXI6OlByb2ZpbGluZ0NsaWVudCB7CiAgICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoSW5zcGVjdG9yU2NyaXB0UHJvZmlsZXJBZ2VudCk7CiAgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgSW5zcGVjdG9yU2NyaXB0UHJvZmlsZXJB
Z2VudChBZ2VudENvbnRleHQmKTsKLSAgICB+SW5zcGVjdG9yU2NyaXB0UHJvZmlsZXJBZ2VudCgp
IGZpbmFsOworICAgIH5JbnNwZWN0b3JTY3JpcHRQcm9maWxlckFnZW50KCk7CiAKICAgICAvLyBJ
bnNwZWN0b3JBZ2VudEJhc2UKLSAgICB2b2lkIGRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChG
cm9udGVuZFJvdXRlciosIEJhY2tlbmREaXNwYXRjaGVyKikgZmluYWw7Ci0gICAgdm9pZCB3aWxs
RGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChEaXNjb25uZWN0UmVhc29uKSBmaW5hbDsKKyAgICB2
b2lkIGRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChGcm9udGVuZFJvdXRlciosIEJhY2tlbmRE
aXNwYXRjaGVyKik7CisgICAgdm9pZCB3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChEaXNj
b25uZWN0UmVhc29uKTsKIAogICAgIC8vIFNjcmlwdFByb2ZpbGVyQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyCi0gICAgdm9pZCBzdGFydFRyYWNraW5nKEVycm9yU3RyaW5nJiwgY29uc3QgYm9vbCog
aW5jbHVkZVNhbXBsZXMpIGZpbmFsOwotICAgIHZvaWQgc3RvcFRyYWNraW5nKEVycm9yU3RyaW5n
JikgZmluYWw7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc3RhcnRUcmFja2lu
ZyhPcHRpb25hbDxib29sPiYmIGluY2x1ZGVTYW1wbGVzKTsKKyAgICBQcm90b2NvbDo6RXJyb3JT
dHJpbmdPcjx2b2lkPiBzdG9wVHJhY2tpbmcoKTsKIAogICAgIC8vIEpTQzo6RGVidWdnZXI6OlBy
b2ZpbGluZ0NsaWVudAotICAgIGJvb2wgaXNBbHJlYWR5UHJvZmlsaW5nKCkgY29uc3QgZmluYWw7
Ci0gICAgU2Vjb25kcyB3aWxsRXZhbHVhdGVTY3JpcHQoKSBmaW5hbDsKLSAgICB2b2lkIGRpZEV2
YWx1YXRlU2NyaXB0KFNlY29uZHMsIEpTQzo6UHJvZmlsaW5nUmVhc29uKSBmaW5hbDsKKyAgICBi
b29sIGlzQWxyZWFkeVByb2ZpbGluZygpIGNvbnN0OworICAgIFNlY29uZHMgd2lsbEV2YWx1YXRl
U2NyaXB0KCk7CisgICAgdm9pZCBkaWRFdmFsdWF0ZVNjcmlwdChTZWNvbmRzLCBKU0M6OlByb2Zp
bGluZ1JlYXNvbik7CiAKIHByaXZhdGU6CiAgICAgdm9pZCBhZGRFdmVudChTZWNvbmRzIHN0YXJ0
VGltZSwgU2Vjb25kcyBlbmRUaW1lLCBKU0M6OlByb2ZpbGluZ1JlYXNvbik7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JUYXJnZXRB
Z2VudC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0
b3JUYXJnZXRBZ2VudC5jcHAKaW5kZXggOGZjYjVhMWU1NTc1MGQzMjVhODQ4MjRkODZjNDljZmU2
ZmIwNDI2OC4uNTA4ZWIwMmVjOTVjNTI0MDgzODRhMWUyYjc3NjQ4YWZkNDI2ZGQ5ZCAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yVGFy
Z2V0QWdlbnQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRz
L0luc3BlY3RvclRhcmdldEFnZW50LmNwcApAQCAtNTUsMzYgKzU1LDM2IEBAIHZvaWQgSW5zcGVj
dG9yVGFyZ2V0QWdlbnQ6OndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKERpc2Nvbm5lY3RS
ZWFzb24pCiAgICAgbV9zaG91bGRQYXVzZU9uU3RhcnQgPSBmYWxzZTsKIH0KIAotdm9pZCBJbnNw
ZWN0b3JUYXJnZXRBZ2VudDo6c2V0UGF1c2VPblN0YXJ0KEVycm9yU3RyaW5nJiwgYm9vbCBwYXVz
ZU9uU3RhcnQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JUYXJnZXRB
Z2VudDo6c2V0UGF1c2VPblN0YXJ0KGJvb2wgcGF1c2VPblN0YXJ0KQogewogICAgIG1fc2hvdWxk
UGF1c2VPblN0YXJ0ID0gcGF1c2VPblN0YXJ0OworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9p
ZCBJbnNwZWN0b3JUYXJnZXRBZ2VudDo6cmVzdW1lKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywg
Y29uc3QgU3RyaW5nJiB0YXJnZXRJZCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IElu
c3BlY3RvclRhcmdldEFnZW50OjpyZXN1bWUoY29uc3QgU3RyaW5nJiB0YXJnZXRJZCkKIHsKICAg
ICBhdXRvKiB0YXJnZXQgPSBtX3RhcmdldHMuZ2V0KHRhcmdldElkKTsKLSAgICBpZiAoIXRhcmdl
dCkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIHRhcmdldCBmb3IgZ2l2ZW4gdGFy
Z2V0SWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKCF0YXJnZXQpCisgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTWlzc2luZyB0YXJnZXQgZm9yIGdpdmVuIHRhcmdl
dElkIl9zKTsKIAotICAgIGlmICghdGFyZ2V0LT5pc1BhdXNlZCgpKSB7Ci0gICAgICAgIGVycm9y
U3RyaW5nID0gIlRhcmdldCBmb3IgZ2l2ZW4gdGFyZ2V0SWQgaXMgbm90IHBhdXNlZCJfczsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoIXRhcmdldC0+aXNQYXVzZWQoKSkKKyAgICAg
ICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJUYXJnZXQgZm9yIGdpdmVuIHRhcmdldElkIGlzIG5v
dCBwYXVzZWQiX3MpOwogCiAgICAgdGFyZ2V0LT5yZXN1bWUoKTsKKworICAgIHJldHVybiB7IH07
CiB9CiAKLXZvaWQgSW5zcGVjdG9yVGFyZ2V0QWdlbnQ6OnNlbmRNZXNzYWdlVG9UYXJnZXQoRXJy
b3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHRhcmdldElkLCBjb25zdCBTdHJp
bmcmIG1lc3NhZ2UpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JUYXJn
ZXRBZ2VudDo6c2VuZE1lc3NhZ2VUb1RhcmdldChjb25zdCBTdHJpbmcmIHRhcmdldElkLCBjb25z
dCBTdHJpbmcmIG1lc3NhZ2UpCiB7CiAgICAgSW5zcGVjdG9yVGFyZ2V0KiB0YXJnZXQgPSBtX3Rh
cmdldHMuZ2V0KHRhcmdldElkKTsKLSAgICBpZiAoIXRhcmdldCkgewotICAgICAgICBlcnJvclN0
cmluZyA9ICJNaXNzaW5nIHRhcmdldCBmb3IgZ2l2ZW4gdGFyZ2V0SWQiX3M7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9CisgICAgaWYgKCF0YXJnZXQpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBl
Y3RlZCgiTWlzc2luZyB0YXJnZXQgZm9yIGdpdmVuIHRhcmdldElkIl9zKTsKIAogICAgIHRhcmdl
dC0+c2VuZE1lc3NhZ2VUb1RhcmdldEJhY2tlbmQobWVzc2FnZSk7CisKKyAgICByZXR1cm4geyB9
OwogfQogCiB2b2lkIEluc3BlY3RvclRhcmdldEFnZW50OjpzZW5kTWVzc2FnZUZyb21UYXJnZXRU
b0Zyb250ZW5kKGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3Bl
Y3RvclRhcmdldEFnZW50LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50
cy9JbnNwZWN0b3JUYXJnZXRBZ2VudC5oCmluZGV4IGI5MjlkZGZmZTI5YzNmYjA4OGFiNjcxNDA4
N2M5OTMwMmMyNzUyMTQuLmVkY2Q0ODliNzZlMDgwODI3ZTA3NDFmMTRiYWIwOWY5ZWE5MzAzZDQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3Bl
Y3RvclRhcmdldEFnZW50LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9h
Z2VudHMvSW5zcGVjdG9yVGFyZ2V0QWdlbnQuaApAQCAtMzUsMjMgKzM1LDIxIEBAIG5hbWVzcGFj
ZSBJbnNwZWN0b3IgewogCiBjbGFzcyBJbnNwZWN0b3JUYXJnZXQ7CiAKLXR5cGVkZWYgU3RyaW5n
IEVycm9yU3RyaW5nOwotCiBjbGFzcyBKU19FWFBPUlRfUFJJVkFURSBJbnNwZWN0b3JUYXJnZXRB
Z2VudCBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3JBZ2VudEJhc2UsIHB1YmxpYyBUYXJnZXRCYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXIgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEluc3BlY3Rv
clRhcmdldEFnZW50KTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAg
ICBJbnNwZWN0b3JUYXJnZXRBZ2VudChGcm9udGVuZFJvdXRlciYsIEJhY2tlbmREaXNwYXRjaGVy
Jik7Ci0gICAgfkluc3BlY3RvclRhcmdldEFnZW50KCkgZmluYWw7CisgICAgfkluc3BlY3RvclRh
cmdldEFnZW50KCk7CiAKICAgICAvLyBJbnNwZWN0b3JBZ2VudEJhc2UKLSAgICB2b2lkIGRpZENy
ZWF0ZUZyb250ZW5kQW5kQmFja2VuZChGcm9udGVuZFJvdXRlciosIEJhY2tlbmREaXNwYXRjaGVy
KikgZmluYWw7Ci0gICAgdm9pZCB3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChEaXNjb25u
ZWN0UmVhc29uKSBmaW5hbDsKKyAgICB2b2lkIGRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChG
cm9udGVuZFJvdXRlciosIEJhY2tlbmREaXNwYXRjaGVyKik7CisgICAgdm9pZCB3aWxsRGVzdHJv
eUZyb250ZW5kQW5kQmFja2VuZChEaXNjb25uZWN0UmVhc29uKTsKIAogICAgIC8vIFRhcmdldEJh
Y2tlbmREaXNwYXRjaGVySGFuZGxlcgotICAgIHZvaWQgc2V0UGF1c2VPblN0YXJ0KEVycm9yU3Ry
aW5nJiwgYm9vbCBwYXVzZU9uU3RhcnQpIGZpbmFsOwotICAgIHZvaWQgcmVzdW1lKEVycm9yU3Ry
aW5nJiwgY29uc3QgU3RyaW5nJiB0YXJnZXRJZCkgZmluYWw7Ci0gICAgdm9pZCBzZW5kTWVzc2Fn
ZVRvVGFyZ2V0KEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiB0YXJnZXRJZCwgY29uc3QgU3Ry
aW5nJiBtZXNzYWdlKSBmaW5hbDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBz
ZXRQYXVzZU9uU3RhcnQoYm9vbCk7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4g
cmVzdW1lKGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQpOworICAgIFByb3RvY29sOjpFcnJvclN0cmlu
Z09yPHZvaWQ+IHNlbmRNZXNzYWdlVG9UYXJnZXQoY29uc3QgU3RyaW5nJiB0YXJnZXRJZCwgY29u
c3QgU3RyaW5nJiBtZXNzYWdlKTsKIAogICAgIC8vIFRhcmdldCBsaWZlY3ljbGUuCiAgICAgdm9p
ZCB0YXJnZXRDcmVhdGVkKEluc3BlY3RvclRhcmdldCYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSlNHbG9iYWxPYmplY3RBdWRpdEFnZW50LmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0pTR2xvYmFsT2JqZWN0
QXVkaXRBZ2VudC5jcHAKaW5kZXggNGJmYTlmNWFhN2ZkZTE1NGI1MzNjOGYyM2NkN2JhZTY3NzU4
YWIwMC4uMjlmY2VjOTdiYjhlN2Y0NzcyZDRkN2NjOGZhZDZjOTIzMTcxZjg5NyAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSlNHbG9iYWxPYmplY3RB
dWRpdEFnZW50LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50
cy9KU0dsb2JhbE9iamVjdEF1ZGl0QWdlbnQuY3BwCkBAIC00MSw3ICs0MSw3IEBAIEpTR2xvYmFs
T2JqZWN0QXVkaXRBZ2VudDo6SlNHbG9iYWxPYmplY3RBdWRpdEFnZW50KEpTQWdlbnRDb250ZXh0
JiBjb250ZXh0KQogCiBKU0dsb2JhbE9iamVjdEF1ZGl0QWdlbnQ6On5KU0dsb2JhbE9iamVjdEF1
ZGl0QWdlbnQoKSA9IGRlZmF1bHQ7CiAKLUluamVjdGVkU2NyaXB0IEpTR2xvYmFsT2JqZWN0QXVk
aXRBZ2VudDo6aW5qZWN0ZWRTY3JpcHRGb3JFdmFsKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywg
Y29uc3QgaW50KiBleGVjdXRpb25Db250ZXh0SWQpCitJbmplY3RlZFNjcmlwdCBKU0dsb2JhbE9i
amVjdEF1ZGl0QWdlbnQ6OmluamVjdGVkU2NyaXB0Rm9yRXZhbChQcm90b2NvbDo6RXJyb3JTdHJp
bmcmIGVycm9yU3RyaW5nLCBPcHRpb25hbDxQcm90b2NvbDo6UnVudGltZTo6RXhlY3V0aW9uQ29u
dGV4dElkPiYmIGV4ZWN1dGlvbkNvbnRleHRJZCkKIHsKICAgICBpZiAoZXhlY3V0aW9uQ29udGV4
dElkKSB7CiAgICAgICAgIGVycm9yU3RyaW5nID0gImV4ZWN1dGlvbkNvbnRleHRJZCBpcyBub3Qg
c3VwcG9ydGVkIGZvciBKU0NvbnRleHRzIGFzIHRoZXJlIGlzIG9ubHkgb25lIGV4ZWN1dGlvbiBj
b250ZXh0Il9zOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9h
Z2VudHMvSlNHbG9iYWxPYmplY3RBdWRpdEFnZW50LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL2FnZW50cy9KU0dsb2JhbE9iamVjdEF1ZGl0QWdlbnQuaAppbmRleCA3ZDQ2NzBk
MDRkYzdmZDMzMDgzYTE1MDYxZDM3NzY1YjFhNmMzZWU2Li41ODRkMDUwMjY0NTg5YjQ4MDVjNjFi
NGM0ZGJhMzgxOTlhNmZlZGUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL2FnZW50cy9KU0dsb2JhbE9iamVjdEF1ZGl0QWdlbnQuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9KU0dsb2JhbE9iamVjdEF1ZGl0QWdlbnQuaApA
QCAtMzgsMTAgKzM4LDEwIEBAIGNsYXNzIEpTR2xvYmFsT2JqZWN0QXVkaXRBZ2VudCBmaW5hbCA6
IHB1YmxpYyBJbnNwZWN0b3JBdWRpdEFnZW50IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKIHB1YmxpYzoKICAgICBKU0dsb2JhbE9iamVjdEF1ZGl0QWdlbnQoSlNBZ2VudENvbnRleHQm
KTsKLSAgICB+SlNHbG9iYWxPYmplY3RBdWRpdEFnZW50KCkgZmluYWw7CisgICAgfkpTR2xvYmFs
T2JqZWN0QXVkaXRBZ2VudCgpOwogCiBwcml2YXRlOgotICAgIEluamVjdGVkU2NyaXB0IGluamVj
dGVkU2NyaXB0Rm9yRXZhbChFcnJvclN0cmluZyYsIGNvbnN0IGludCogZXhlY3V0aW9uQ29udGV4
dElkKSBmaW5hbDsKKyAgICBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdEZvckV2YWwoUHJv
dG9jb2w6OkVycm9yU3RyaW5nJiwgT3B0aW9uYWw8UHJvdG9jb2w6OlJ1bnRpbWU6OkV4ZWN1dGlv
bkNvbnRleHRJZD4mJik7CiAKICAgICBKU0M6OkpTR2xvYmFsT2JqZWN0JiBtX2dsb2JhbE9iamVj
dDsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50
cy9KU0dsb2JhbE9iamVjdERlYnVnZ2VyQWdlbnQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9hZ2VudHMvSlNHbG9iYWxPYmplY3REZWJ1Z2dlckFnZW50LmNwcAppbmRleCAy
NTUxZTdhNDIzOTM5OTVkNmEzZWVhOWNlNDkxNzQ5YTM4Nzg5MTg5Li4zYjcwMjg3OGExY2E1MTYy
NDQwOTk5ZjRlNjRiNTNmYzM0Zjk1MzJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL2FnZW50cy9KU0dsb2JhbE9iamVjdERlYnVnZ2VyQWdlbnQuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0pTR2xvYmFsT2JqZWN0RGVi
dWdnZXJBZ2VudC5jcHAKQEAgLTQ0LDcgKzQ0LDcgQEAgSlNHbG9iYWxPYmplY3REZWJ1Z2dlckFn
ZW50OjpKU0dsb2JhbE9iamVjdERlYnVnZ2VyQWdlbnQoSlNBZ2VudENvbnRleHQmIGNvbnRleHQK
IAogSlNHbG9iYWxPYmplY3REZWJ1Z2dlckFnZW50Ojp+SlNHbG9iYWxPYmplY3REZWJ1Z2dlckFn
ZW50KCkgPSBkZWZhdWx0OwogCi1JbmplY3RlZFNjcmlwdCBKU0dsb2JhbE9iamVjdERlYnVnZ2Vy
QWdlbnQ6OmluamVjdGVkU2NyaXB0Rm9yRXZhbChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNv
bnN0IGludCogZXhlY3V0aW9uQ29udGV4dElkKQorSW5qZWN0ZWRTY3JpcHQgSlNHbG9iYWxPYmpl
Y3REZWJ1Z2dlckFnZW50OjppbmplY3RlZFNjcmlwdEZvckV2YWwoUHJvdG9jb2w6OkVycm9yU3Ry
aW5nJiBlcnJvclN0cmluZywgT3B0aW9uYWw8UHJvdG9jb2w6OlJ1bnRpbWU6OkV4ZWN1dGlvbkNv
bnRleHRJZD4mJiBleGVjdXRpb25Db250ZXh0SWQpCiB7CiAgICAgaWYgKGV4ZWN1dGlvbkNvbnRl
eHRJZCkgewogICAgICAgICBlcnJvclN0cmluZyA9ICJleGVjdXRpb25Db250ZXh0SWQgaXMgbm90
IHN1cHBvcnRlZCBmb3IgSlNDb250ZXh0cyBhcyB0aGVyZSBpcyBvbmx5IG9uZSBleGVjdXRpb24g
Y29udGV4dCJfczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
YWdlbnRzL0pTR2xvYmFsT2JqZWN0RGVidWdnZXJBZ2VudC5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9hZ2VudHMvSlNHbG9iYWxPYmplY3REZWJ1Z2dlckFnZW50LmgKaW5kZXgg
NmY3OTI3OGQ1MzMxNzFlMWZkZDBhZWZlOWRkMjliMzNiZmQxZmU5NS4uMTAwZmIyM2UzMTVkZjA0
N2Y5Zjg1NmNjYzlhNWE2ZjgwZTgzZDc3NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9hZ2VudHMvSlNHbG9iYWxPYmplY3REZWJ1Z2dlckFnZW50LmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSlNHbG9iYWxPYmplY3REZWJ1
Z2dlckFnZW50LmgKQEAgLTM2LDE4ICszNiwxOCBAQCBjbGFzcyBKU0dsb2JhbE9iamVjdERlYnVn
Z2VyQWdlbnQgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yRGVidWdnZXJBZ2VudCB7CiAgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgSlNHbG9iYWxPYmplY3REZWJ1Z2dl
ckFnZW50KEpTQWdlbnRDb250ZXh0JiwgSW5zcGVjdG9yQ29uc29sZUFnZW50Kik7Ci0gICAgfkpT
R2xvYmFsT2JqZWN0RGVidWdnZXJBZ2VudCgpIGZpbmFsOworICAgIH5KU0dsb2JhbE9iamVjdERl
YnVnZ2VyQWdlbnQoKTsKIAogICAgIC8vIEpTQzo6RGVidWdnZXI6Ok9ic2VydmVyCi0gICAgdm9p
ZCBicmVha3BvaW50QWN0aW9uTG9nKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBjb25zdCBTdHJpbmcm
IGRhdGEpIGZpbmFsOworICAgIHZvaWQgYnJlYWtwb2ludEFjdGlvbkxvZyhKU0M6OkpTR2xvYmFs
T2JqZWN0KiwgY29uc3QgU3RyaW5nJiBkYXRhKTsKIAogcHJpdmF0ZToKLSAgICBJbmplY3RlZFNj
cmlwdCBpbmplY3RlZFNjcmlwdEZvckV2YWwoRXJyb3JTdHJpbmcmLCBjb25zdCBpbnQqIGV4ZWN1
dGlvbkNvbnRleHRJZCkgZmluYWw7CisgICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHRG
b3JFdmFsKFByb3RvY29sOjpFcnJvclN0cmluZyYsIE9wdGlvbmFsPFByb3RvY29sOjpSdW50aW1l
OjpFeGVjdXRpb25Db250ZXh0SWQ+JiYpOwogCiAgICAgLy8gTk9URTogSmF2YVNjcmlwdCBpbnNw
ZWN0b3IgZG9lcyBub3QgeWV0IG5lZWQgdG8gbXV0ZSBhIGNvbnNvbGUgYmVjYXVzZSBubyBtZXNz
YWdlcwogICAgIC8vIGFyZSBzZW50IHRvIHRoZSBjb25zb2xlIG91dHNpZGUgb2YgdGhlIEFQSSBi
b3VuZGFyeSBvciBjb25zb2xlIG9iamVjdC4KLSAgICB2b2lkIG11dGVDb25zb2xlKCkgZmluYWwg
eyB9Ci0gICAgdm9pZCB1bm11dGVDb25zb2xlKCkgZmluYWwgeyB9CisgICAgdm9pZCBtdXRlQ29u
c29sZSgpIHsgfQorICAgIHZvaWQgdW5tdXRlQ29uc29sZSgpIHsgfQogCiAgICAgSW5zcGVjdG9y
Q29uc29sZUFnZW50KiBtX2NvbnNvbGVBZ2VudCB7IG51bGxwdHIgfTsKIH07CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9KU0dsb2JhbE9iamVjdFJ1
bnRpbWVBZ2VudC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9K
U0dsb2JhbE9iamVjdFJ1bnRpbWVBZ2VudC5jcHAKaW5kZXggYzg2NjllZTBhYTViOGNhODRlNWQy
OTQzN2YzNDQ0NzFjMWY5YTA2MC4uZTI1NDQ4NzQ4ZjE0ZTUwYTJmYzVjZGU3NmIwNjg5MDJiMDM4
M2IxZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMv
SlNHbG9iYWxPYmplY3RSdW50aW1lQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3IvYWdlbnRzL0pTR2xvYmFsT2JqZWN0UnVudGltZUFnZW50LmNwcApAQCAtNDMs
OSArNDMsMTIgQEAgSlNHbG9iYWxPYmplY3RSdW50aW1lQWdlbnQ6OkpTR2xvYmFsT2JqZWN0UnVu
dGltZUFnZW50KEpTQWdlbnRDb250ZXh0JiBjb250ZXh0KQogCiBKU0dsb2JhbE9iamVjdFJ1bnRp
bWVBZ2VudDo6fkpTR2xvYmFsT2JqZWN0UnVudGltZUFnZW50KCkgPSBkZWZhdWx0OwogCi1Jbmpl
Y3RlZFNjcmlwdCBKU0dsb2JhbE9iamVjdFJ1bnRpbWVBZ2VudDo6aW5qZWN0ZWRTY3JpcHRGb3JF
dmFsKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgaW50KiBleGVjdXRpb25Db250ZXh0
SWQpCitJbmplY3RlZFNjcmlwdCBKU0dsb2JhbE9iamVjdFJ1bnRpbWVBZ2VudDo6aW5qZWN0ZWRT
Y3JpcHRGb3JFdmFsKFByb3RvY29sOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIE9wdGlvbmFs
PFByb3RvY29sOjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0SWQ+JiYgZXhlY3V0aW9uQ29udGV4
dElkKQogewotICAgIEFTU0VSVF9VTlVTRUQoZXhlY3V0aW9uQ29udGV4dElkLCAhZXhlY3V0aW9u
Q29udGV4dElkKTsKKyAgICBpZiAoZXhlY3V0aW9uQ29udGV4dElkKSB7CisgICAgICAgIGVycm9y
U3RyaW5nID0gImV4ZWN1dGlvbkNvbnRleHRJZCBpcyBub3Qgc3VwcG9ydGVkIGZvciBKU0NvbnRl
eHRzIGFzIHRoZXJlIGlzIG9ubHkgb25lIGV4ZWN1dGlvbiBjb250ZXh0Il9zOworICAgICAgICBy
ZXR1cm4gSW5qZWN0ZWRTY3JpcHQoKTsKKyAgICB9CiAKICAgICBJbmplY3RlZFNjcmlwdCBpbmpl
Y3RlZFNjcmlwdCA9IGluamVjdGVkU2NyaXB0TWFuYWdlcigpLmluamVjdGVkU2NyaXB0Rm9yKCZt
X2dsb2JhbE9iamVjdCk7CiAgICAgaWYgKGluamVjdGVkU2NyaXB0Lmhhc05vVmFsdWUoKSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0pTR2xvYmFs
T2JqZWN0UnVudGltZUFnZW50LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2Fn
ZW50cy9KU0dsb2JhbE9iamVjdFJ1bnRpbWVBZ2VudC5oCmluZGV4IDZmMGNlOTA1OWQ3MjMzODM3
OGIxZDQ3YTcxYTcyNWMzOTJjZDI3N2EuLmJmZWJkYTkyYTA4YTkxZDM4Y2UyYzUxNzU2Nzk2NzMx
ZDU5YTJjOWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdl
bnRzL0pTR2xvYmFsT2JqZWN0UnVudGltZUFnZW50LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9hZ2VudHMvSlNHbG9iYWxPYmplY3RSdW50aW1lQWdlbnQuaApAQCAtMzks
MTUgKzM5LDE1IEBAIGNsYXNzIEpTR2xvYmFsT2JqZWN0UnVudGltZUFnZW50IGZpbmFsIDogcHVi
bGljIEluc3BlY3RvclJ1bnRpbWVBZ2VudCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CiBwdWJsaWM6CiAgICAgSlNHbG9iYWxPYmplY3RSdW50aW1lQWdlbnQoSlNBZ2VudENvbnRleHQm
KTsKLSAgICB+SlNHbG9iYWxPYmplY3RSdW50aW1lQWdlbnQoKSBmaW5hbDsKKyAgICB+SlNHbG9i
YWxPYmplY3RSdW50aW1lQWdlbnQoKTsKIAogcHJpdmF0ZToKLSAgICBJbmplY3RlZFNjcmlwdCBp
bmplY3RlZFNjcmlwdEZvckV2YWwoRXJyb3JTdHJpbmcmLCBjb25zdCBpbnQqIGV4ZWN1dGlvbkNv
bnRleHRJZCkgZmluYWw7CisgICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHRGb3JFdmFs
KFByb3RvY29sOjpFcnJvclN0cmluZyYsIE9wdGlvbmFsPFByb3RvY29sOjpSdW50aW1lOjpFeGVj
dXRpb25Db250ZXh0SWQ+JiYpOwogCiAgICAgLy8gTk9URTogSmF2YVNjcmlwdCBpbnNwZWN0b3Ig
ZG9lcyBub3QgeWV0IG5lZWQgdG8gbXV0ZSBhIGNvbnNvbGUgYmVjYXVzZSBubyBtZXNzYWdlcwog
ICAgIC8vIGFyZSBzZW50IHRvIHRoZSBjb25zb2xlIG91dHNpZGUgb2YgdGhlIEFQSSBib3VuZGFy
eSBvciBjb25zb2xlIG9iamVjdC4KLSAgICB2b2lkIG11dGVDb25zb2xlKCkgZmluYWwgeyB9Ci0g
ICAgdm9pZCB1bm11dGVDb25zb2xlKCkgZmluYWwgeyB9CisgICAgdm9pZCBtdXRlQ29uc29sZSgp
IHsgfQorICAgIHZvaWQgdW5tdXRlQ29uc29sZSgpIHsgfQogCiAgICAgc3RkOjp1bmlxdWVfcHRy
PFJ1bnRpbWVGcm9udGVuZERpc3BhdGNoZXI+IG1fZnJvbnRlbmREaXNwYXRjaGVyOwogICAgIFJl
ZlB0cjxSdW50aW1lQmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Byb3RvY29sL1BhZ2UuanNv
biBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvUGFnZS5qc29uCmlu
ZGV4IDNiOGZhMThiZDdlOGQ5NWQ3ZThmOTViNDQyYWZjNjNlNTUwY2U2M2EuLmZkZTRmNjk2NGQ0
MGU4YTU2NTExNmJlMmJjNjkyYTQ1MWMyZGExMDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvUGFnZS5qc29uCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvUGFnZS5qc29uCkBAIC0yNjcsNyArMjY3LDcgQEAK
ICAgICAgICAgICAgICJjb25kaXRpb24iOiAiKGRlZmluZWQoRU5BQkxFX0RBUktfTU9ERV9DU1Mp
ICYmIEVOQUJMRV9EQVJLX01PREVfQ1NTKSB8fCAoZGVmaW5lZChIQVZFX09TX0RBUktfTU9ERV9T
VVBQT1JUKSAmJiBIQVZFX09TX0RBUktfTU9ERV9TVVBQT1JUKSIsCiAgICAgICAgICAgICAidGFy
Z2V0VHlwZXMiOiBbInBhZ2UiXSwKICAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWwotICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAiYXBwZWFyYW5jZSIsICIkcmVmIjogIkFwcGVhcmFuY2UiLCAi
ZGVzY3JpcHRpb24iOiAiQXBwZWFyYW5jZSBuYW1lIHRvIGZvcmNlLiBFbXB0eSBzdHJpbmcgZGlz
YWJsZXMgdGhlIG92ZXJyaWRlLiIgfQorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiYXBwZWFy
YW5jZSIsICIkcmVmIjogIkFwcGVhcmFuY2UiLCAib3B0aW9uYWwiOiB0cnVlIH0KICAgICAgICAg
ICAgIF0KICAgICAgICAgfSwKICAgICAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9yZW1vdGUvc29ja2V0L1JlbW90ZUluc3BlY3RvckNvbm5lY3Rpb25D
bGllbnQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9yZW1vdGUvc29ja2V0
L1JlbW90ZUluc3BlY3RvckNvbm5lY3Rpb25DbGllbnQuY3BwCmluZGV4IDA2NTJlMTI3MDhiZjg2
MjMwYmU0NjI5ZmU2NTcyNWJiYmMzNWI2NzAuLjExMDAwMDQ3M2RjZmNjNDM2NDc2ODQ4MTdkOTUz
OGM3MTVjNzI4NTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
cmVtb3RlL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JDb25uZWN0aW9uQ2xpZW50LmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3JlbW90ZS9zb2NrZXQvUmVtb3RlSW5zcGVj
dG9yQ29ubmVjdGlvbkNsaWVudC5jcHAKQEAgLTkyLDMyICs5MiwyNCBAQCBPcHRpb25hbDxSZW1v
dGVJbnNwZWN0b3JDb25uZWN0aW9uQ2xpZW50OjpFdmVudD4gUmVtb3RlSW5zcGVjdG9yQ29ubmVj
dGlvbkNsaWVudAogCiAgICAgU3RyaW5nIGpzb25EYXRhID0gU3RyaW5nOjpmcm9tVVRGOChkYXRh
KTsKIAotICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gbWVzc2FnZVZhbHVlOwotICAgIGlmICghSlNP
Tjo6VmFsdWU6OnBhcnNlSlNPTihqc29uRGF0YSwgbWVzc2FnZVZhbHVlKSkKKyAgICBhdXRvIG1l
c3NhZ2VWYWx1ZSA9IEpTT046OlZhbHVlOjpwYXJzZUpTT04oanNvbkRhdGEpOworICAgIGlmICgh
bWVzc2FnZVZhbHVlKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgUmVmUHRy
PEpTT046Ok9iamVjdD4gbWVzc2FnZU9iamVjdDsKLSAgICBpZiAoIW1lc3NhZ2VWYWx1ZS0+YXNP
YmplY3QobWVzc2FnZU9iamVjdCkpCisgICAgYXV0byBtZXNzYWdlT2JqZWN0ID0gbWVzc2FnZVZh
bHVlLT5hc09iamVjdCgpOworICAgIGlmICghbWVzc2FnZU9iamVjdCkKICAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKIAogICAgIEV2ZW50IGV2ZW50OwotICAgIGlmICghbWVzc2FnZU9iamVj
dC0+Z2V0U3RyaW5nKCJldmVudCJfcywgZXZlbnQubWV0aG9kTmFtZSkpCisKKyAgICBldmVudC5t
ZXRob2ROYW1lID0gbWVzc2FnZU9iamVjdC0+Z2V0U3RyaW5nKCJldmVudCJfcyk7CisgICAgaWYg
KCFldmVudC5tZXRob2ROYW1lKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAg
ZXZlbnQuY2xpZW50SUQgPSBjbGllbnRJRDsKLQotICAgIENvbm5lY3Rpb25JRCBjb25uZWN0aW9u
SUQ7Ci0gICAgaWYgKG1lc3NhZ2VPYmplY3QtPmdldEludGVnZXIoImNvbm5lY3Rpb25JRCJfcywg
Y29ubmVjdGlvbklEKSkKLSAgICAgICAgZXZlbnQuY29ubmVjdGlvbklEID0gY29ubmVjdGlvbklE
OwotCi0gICAgVGFyZ2V0SUQgdGFyZ2V0SUQ7Ci0gICAgaWYgKG1lc3NhZ2VPYmplY3QtPmdldElu
dGVnZXIoInRhcmdldElEIl9zLCB0YXJnZXRJRCkpCi0gICAgICAgIGV2ZW50LnRhcmdldElEID0g
dGFyZ2V0SUQ7Ci0KLSAgICBTdHJpbmcgbWVzc2FnZTsKLSAgICBpZiAobWVzc2FnZU9iamVjdC0+
Z2V0U3RyaW5nKCJtZXNzYWdlIl9zLCBtZXNzYWdlKSkKLSAgICAgICAgZXZlbnQubWVzc2FnZSA9
IG1lc3NhZ2U7Ci0KKyAgICBldmVudC5jb25uZWN0aW9uSUQgPSBtZXNzYWdlT2JqZWN0LT5nZXRJ
bnRlZ2VyKCJjb25uZWN0aW9uSUQiX3MpOworICAgIGV2ZW50LnRhcmdldElEID0gbWVzc2FnZU9i
amVjdC0+Z2V0SW50ZWdlcigidGFyZ2V0SUQiX3MpOworICAgIGV2ZW50Lm1lc3NhZ2UgPSBtZXNz
YWdlT2JqZWN0LT5nZXRTdHJpbmcoIm1lc3NhZ2UiX3MpOwogICAgIHJldHVybiBldmVudDsKIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2Nv
ZGVnZW4vY3BwX2dlbmVyYXRvci5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9jb2RlZ2VuL2NwcF9nZW5lcmF0b3IucHkKaW5kZXggZjczMzhmNmRkM2YxODFlODk1
ZTE5ZWVjNjZjYTIxZDU5Y2JiZGFmYS4uNDZiOTA2NTdjMzllNGQyNTAzYjdjNzFkMmM0Y2RkMzc5
Nzg1YzdjYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2NvZGVnZW4vY3BwX2dlbmVyYXRvci5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9jcHBfZ2VuZXJhdG9yLnB5CkBAIC01NSwyNzkgKzU1
LDMyOSBAQCBjbGFzcyBDcHBHZW5lcmF0b3IoR2VuZXJhdG9yKToKICAgICAgICAgcmV0dXJuIHNl
bGYubW9kZWwoKS5mcmFtZXdvcmsuc2V0dGluZygnY3BwX3Byb3RvY29sX2dyb3VwJywgJycpCiAK
ICAgICBkZWYgaGVscGVyc19uYW1lc3BhY2Uoc2VsZik6Ci0gICAgICAgIHJldHVybiAnJXNIZWxw
ZXJzJyAlIHNlbGYucHJvdG9jb2xfbmFtZSgpCisgICAgICAgIG5hbWVzcGFjZSA9ICdIZWxwZXJz
JworICAgICAgICBpZiBzZWxmLnByb3RvY29sX25hbWUoKSAhPSAnSW5zcGVjdG9yJzoKKyAgICAg
ICAgICAgIG5hbWVzcGFjZSA9IHNlbGYucHJvdG9jb2xfbmFtZSgpICsgbmFtZXNwYWNlCisgICAg
ICAgIHJldHVybiBuYW1lc3BhY2UKIAogICAgICMgTWlzY2VsbGFuZW91cyB0ZXh0IG1hbmlwdWxh
dGlvbiByb3V0aW5lcy4KICAgICBAc3RhdGljbWV0aG9kCiAgICAgZGVmIGNwcF9nZXR0ZXJfbWV0
aG9kX2Zvcl90eXBlKF90eXBlKToKLSAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgT2JqZWN0
VHlwZSk6Ci0gICAgICAgICAgICByZXR1cm4gJ2dldE9iamVjdCcKLSAgICAgICAgaWYgaXNpbnN0
YW5jZShfdHlwZSwgQXJyYXlUeXBlKToKLSAgICAgICAgICAgIHJldHVybiAnZ2V0QXJyYXknCi0g
ICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIFByaW1pdGl2ZVR5cGUpOgotICAgICAgICAgICAg
aWYgX3R5cGUucmF3X25hbWUoKSA9PSAnaW50ZWdlcic6Ci0gICAgICAgICAgICAgICAgcmV0dXJu
ICdnZXRJbnRlZ2VyJwotICAgICAgICAgICAgZWxpZiBfdHlwZS5yYXdfbmFtZSgpID09ICdudW1i
ZXInOgotICAgICAgICAgICAgICAgIHJldHVybiAnZ2V0RG91YmxlJwotICAgICAgICAgICAgZWxp
ZiBfdHlwZS5yYXdfbmFtZSgpID09ICdhbnknOgotICAgICAgICAgICAgICAgIHJldHVybiAnZ2V0
VmFsdWUnCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJldHVybiAnZ2V0JyAr
IHVjZmlyc3QoX3R5cGUucmF3X25hbWUoKSkKICAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwg
QWxpYXNlZFR5cGUpOgotICAgICAgICAgICAgcmV0dXJuIENwcEdlbmVyYXRvci5jcHBfZ2V0dGVy
X21ldGhvZF9mb3JfdHlwZShfdHlwZS5hbGlhc2VkX3R5cGUpCisgICAgICAgICAgICBfdHlwZSA9
IF90eXBlLmFsaWFzZWRfdHlwZQorICAgICAgICAgICAgIyBmYWxsdGhyb3VnaAorCiAgICAgICAg
IGlmIGlzaW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKToKLSAgICAgICAgICAgIHJldHVybiBDcHBH
ZW5lcmF0b3IuY3BwX2dldHRlcl9tZXRob2RfZm9yX3R5cGUoX3R5cGUucHJpbWl0aXZlX3R5cGUp
CisgICAgICAgICAgICBfdHlwZSA9IF90eXBlLnByaW1pdGl2ZV90eXBlCisgICAgICAgICAgICAj
IGZhbGx0aHJvdWdoCisKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgT2JqZWN0VHlwZSkg
b3IgX3R5cGUucXVhbGlmaWVkX25hbWUoKSBpbiBbJ29iamVjdCddOgorICAgICAgICAgICAgcmV0
dXJuICdnZXRPYmplY3QnCisKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgQXJyYXlUeXBl
KSBvciBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpIGluIFsnYXJyYXknXToKKyAgICAgICAgICAgIHJl
dHVybiAnZ2V0QXJyYXknCisKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgUHJpbWl0aXZl
VHlwZSk6CisgICAgICAgICAgICBpZiBfdHlwZS5yYXdfbmFtZSgpID09ICdudW1iZXInOgorICAg
ICAgICAgICAgICAgIHJldHVybiAnZ2V0RG91YmxlJworICAgICAgICAgICAgaWYgX3R5cGUucmF3
X25hbWUoKSA9PSAnYW55JzoKKyAgICAgICAgICAgICAgICByZXR1cm4gJ2dldFZhbHVlJworICAg
ICAgICAgICAgcmV0dXJuICdnZXQnICsgdWNmaXJzdChfdHlwZS5yYXdfbmFtZSgpKQorCisgICAg
ICAgIHJhaXNlIFZhbHVlRXJyb3IoInVua25vd24gdHlwZSIpCiAKICAgICBAc3RhdGljbWV0aG9k
CiAgICAgZGVmIGNwcF9zZXR0ZXJfbWV0aG9kX2Zvcl90eXBlKF90eXBlKToKLSAgICAgICAgaWYg
aXNpbnN0YW5jZShfdHlwZSwgT2JqZWN0VHlwZSk6Ci0gICAgICAgICAgICByZXR1cm4gJ3NldE9i
amVjdCcKLSAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgQXJyYXlUeXBlKToKLSAgICAgICAg
ICAgIHJldHVybiAnc2V0QXJyYXknCi0gICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIFByaW1p
dGl2ZVR5cGUpOgotICAgICAgICAgICAgaWYgX3R5cGUucmF3X25hbWUoKSA9PSAnaW50ZWdlcic6
Ci0gICAgICAgICAgICAgICAgcmV0dXJuICdzZXRJbnRlZ2VyJwotICAgICAgICAgICAgZWxpZiBf
dHlwZS5yYXdfbmFtZSgpID09ICdudW1iZXInOgotICAgICAgICAgICAgICAgIHJldHVybiAnc2V0
RG91YmxlJwotICAgICAgICAgICAgZWxpZiBfdHlwZS5yYXdfbmFtZSgpID09ICdhbnknOgotICAg
ICAgICAgICAgICAgIHJldHVybiAnc2V0VmFsdWUnCi0gICAgICAgICAgICBlbHNlOgotICAgICAg
ICAgICAgICAgIHJldHVybiAnc2V0JyArIHVjZmlyc3QoX3R5cGUucmF3X25hbWUoKSkKICAgICAg
ICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgQWxpYXNlZFR5cGUpOgotICAgICAgICAgICAgcmV0dXJu
IENwcEdlbmVyYXRvci5jcHBfc2V0dGVyX21ldGhvZF9mb3JfdHlwZShfdHlwZS5hbGlhc2VkX3R5
cGUpCisgICAgICAgICAgICBfdHlwZSA9IF90eXBlLmFsaWFzZWRfdHlwZQorICAgICAgICAgICAg
IyBmYWxsdGhyb3VnaAorCiAgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKToK
LSAgICAgICAgICAgIHJldHVybiBDcHBHZW5lcmF0b3IuY3BwX3NldHRlcl9tZXRob2RfZm9yX3R5
cGUoX3R5cGUucHJpbWl0aXZlX3R5cGUpCisgICAgICAgICAgICBfdHlwZSA9IF90eXBlLnByaW1p
dGl2ZV90eXBlCisgICAgICAgICAgICAjIGZhbGx0aHJvdWdoCisKKyAgICAgICAgaWYgaXNpbnN0
YW5jZShfdHlwZSwgT2JqZWN0VHlwZSkgb3IgX3R5cGUucXVhbGlmaWVkX25hbWUoKSBpbiBbJ29i
amVjdCddOgorICAgICAgICAgICAgcmV0dXJuICdzZXRPYmplY3QnCisKKyAgICAgICAgaWYgaXNp
bnN0YW5jZShfdHlwZSwgQXJyYXlUeXBlKSBvciBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpIGluIFsn
YXJyYXknXToKKyAgICAgICAgICAgIHJldHVybiAnc2V0QXJyYXknCisKKyAgICAgICAgaWYgaXNp
bnN0YW5jZShfdHlwZSwgUHJpbWl0aXZlVHlwZSk6CisgICAgICAgICAgICBpZiBfdHlwZS5yYXdf
bmFtZSgpID09ICdudW1iZXInOgorICAgICAgICAgICAgICAgIHJldHVybiAnc2V0RG91YmxlJwor
ICAgICAgICAgICAgaWYgX3R5cGUucmF3X25hbWUoKSA9PSAnYW55JzoKKyAgICAgICAgICAgICAg
ICByZXR1cm4gJ3NldFZhbHVlJworICAgICAgICAgICAgcmV0dXJuICdzZXQnICsgdWNmaXJzdChf
dHlwZS5yYXdfbmFtZSgpKQorCisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInVua25vd24gdHlw
ZSIpCiAKICAgICAjIEdlbmVyYXRlIHR5cGUgcmVwcmVzZW50YXRpb25zIGZvciB2YXJpb3VzIHNp
dHVhdGlvbnMuCiAgICAgQHN0YXRpY21ldGhvZAogICAgIGRlZiBjcHBfcHJvdG9jb2xfdHlwZV9m
b3JfdHlwZShfdHlwZSk6CiAgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEFsaWFzZWRUeXBl
KToKLSAgICAgICAgICAgIF90eXBlID0gX3R5cGUuYWxpYXNlZF90eXBlICAjIEZhbGwgdGhyb3Vn
aCB0byBlbnVtIG9yIHByaW1pdGl2ZS4KKyAgICAgICAgICAgIF90eXBlID0gX3R5cGUuYWxpYXNl
ZF90eXBlCisgICAgICAgICAgICAjIGZhbGx0aHJvdWdoCiAKLSAgICAgICAgaWYgaXNpbnN0YW5j
ZShfdHlwZSwgT2JqZWN0VHlwZSkgYW5kIGxlbihfdHlwZS5tZW1iZXJzKSA9PSAwOgotICAgICAg
ICAgICAgcmV0dXJuICdKU09OOjpPYmplY3QnCiAgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUs
IEFycmF5VHlwZSk6Ci0gICAgICAgICAgICBpZiBfdHlwZS5yYXdfbmFtZSgpIGlzIE5vbmU6ICAj
IE90aGVyd2lzZSwgZmFsbCB0aHJvdWdoIGFuZCB1c2UgdHlwZWRlZidkIG5hbWUuCisgICAgICAg
ICAgICBpZiBfdHlwZS5yYXdfbmFtZSgpIGlzIE5vbmU6CiAgICAgICAgICAgICAgICAgcmV0dXJu
ICdKU09OOjpBcnJheU9mPCVzPicgJSBDcHBHZW5lcmF0b3IuY3BwX3Byb3RvY29sX3R5cGVfZm9y
X3R5cGUoX3R5cGUuZWxlbWVudF90eXBlKQorICAgICAgICAgICAgIyBmYWxsdGhyb3VnaAorCiAg
ICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIChPYmplY3RUeXBlLCBFbnVtVHlwZSwgQXJyYXlU
eXBlKSk6Ci0gICAgICAgICAgICByZXR1cm4gJ0luc3BlY3Rvcjo6UHJvdG9jb2w6OiVzOjolcycg
JSAoX3R5cGUudHlwZV9kb21haW4oKS5kb21haW5fbmFtZSwgX3R5cGUucmF3X25hbWUoKSkKKyAg
ICAgICAgICAgIHJldHVybiAnUHJvdG9jb2w6OiVzOjolcycgJSAoX3R5cGUudHlwZV9kb21haW4o
KS5kb21haW5fbmFtZSwgX3R5cGUucmF3X25hbWUoKSkKKwogICAgICAgICBpZiBpc2luc3RhbmNl
KF90eXBlLCBQcmltaXRpdmVUeXBlKToKICAgICAgICAgICAgIHJldHVybiBDcHBHZW5lcmF0b3Iu
Y3BwX25hbWVfZm9yX3ByaW1pdGl2ZV90eXBlKF90eXBlKQogCi0gICAgQHN0YXRpY21ldGhvZAot
ICAgIGRlZiBjcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZV9tZW1iZXIodHlwZV9tZW1iZXIsIG9i
amVjdF9kZWNsYXJhdGlvbik6Ci0gICAgICAgIGlmIGlzaW5zdGFuY2UodHlwZV9tZW1iZXIudHlw
ZSwgRW51bVR5cGUpIGFuZCB0eXBlX21lbWJlci50eXBlLmlzX2Fub255bW91czoKLSAgICAgICAg
ICAgIHJldHVybiAnOjonLmpvaW4oW0NwcEdlbmVyYXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3Jf
dHlwZShvYmplY3RfZGVjbGFyYXRpb24udHlwZSksIHVjZmlyc3QodHlwZV9tZW1iZXIubWVtYmVy
X25hbWUpXSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJldHVybiBDcHBHZW5lcmF0b3Iu
Y3BwX3Byb3RvY29sX3R5cGVfZm9yX3R5cGUodHlwZV9tZW1iZXIudHlwZSkKKyAgICAgICAgcmFp
c2UgVmFsdWVFcnJvcigidW5rbm93biB0eXBlIikKIAogICAgIEBzdGF0aWNtZXRob2QKLSAgICBk
ZWYgY3BwX3R5cGVfZm9yX3VuY2hlY2tlZF9mb3JtYWxfaW5fcGFyYW1ldGVyKHBhcmFtZXRlcik6
Ci0gICAgICAgIF90eXBlID0gcGFyYW1ldGVyLnR5cGUKKyAgICBkZWYgY3BwX3R5cGVfZm9yX3R5
cGVfbWVtYmVyX2FyZ3VtZW50KF90eXBlLCBuYW1lKToKICAgICAgICAgaWYgaXNpbnN0YW5jZShf
dHlwZSwgQWxpYXNlZFR5cGUpOgotICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5hbGlhc2VkX3R5
cGUgICMgRmFsbCB0aHJvdWdoIHRvIGVudW0gb3IgcHJpbWl0aXZlLgorICAgICAgICAgICAgX3R5
cGUgPSBfdHlwZS5hbGlhc2VkX3R5cGUKKyAgICAgICAgICAgICMgZmFsbHRocm91Z2gKIAotICAg
ICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBFbnVtVHlwZSk6Ci0gICAgICAgICAgICBfdHlwZSA9
IF90eXBlLnByaW1pdGl2ZV90eXBlICAjIEZhbGwgdGhyb3VnaCB0byBwcmltaXRpdmUuCi0KLSAg
ICAgICAgIyBUaGlzIGhhbmRsZXMgdGhlICdhbnknIHR5cGUgYW5kIG9iamVjdHMgd2l0aCBkZWZp
bmVkIHByb3BlcnRpZXMuCi0gICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIE9iamVjdFR5cGUp
IG9yIF90eXBlLnF1YWxpZmllZF9uYW1lKCkgPT0gJ29iamVjdCc6Ci0gICAgICAgICAgICBjcHBf
bmFtZSA9ICdKU09OOjpPYmplY3QnCi0gICAgICAgICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9u
YWw6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICdjb25zdCAlcyonICUgY3BwX25hbWUKLSAgICAg
ICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICdjb25zdCAlcyYnICUgY3BwX25h
bWUKLSAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgQXJyYXlUeXBlKToKLSAgICAgICAgICAg
IGNwcF9uYW1lID0gJ0pTT046OkFycmF5JwotICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29w
dGlvbmFsOgotICAgICAgICAgICAgICAgIHJldHVybiAnY29uc3QgJXMqJyAlIGNwcF9uYW1lCi0g
ICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJldHVybiAnY29uc3QgJXMmJyAlIGNw
cF9uYW1lCi0gICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIFByaW1pdGl2ZVR5cGUpOgotICAg
ICAgICAgICAgY3BwX25hbWUgPSBDcHBHZW5lcmF0b3IuY3BwX25hbWVfZm9yX3ByaW1pdGl2ZV90
eXBlKF90eXBlKQotICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgotICAgICAg
ICAgICAgICAgIHJldHVybiAnY29uc3QgJXMqJyAlIGNwcF9uYW1lCi0gICAgICAgICAgICBlbGlm
IF90eXBlLnJhd19uYW1lKCkgaW4gWydzdHJpbmcnXToKLSAgICAgICAgICAgICAgICByZXR1cm4g
J2NvbnN0ICVzJicgJSBjcHBfbmFtZQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAg
ICByZXR1cm4gY3BwX25hbWUKLQotICAgICAgICByZXR1cm4gInVua25vd25fdW5jaGVja2VkX2Zv
cm1hbF9pbl9wYXJhbWV0ZXJfdHlwZSIKLQotICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgY3Bw
X3R5cGVfZm9yX2NoZWNrZWRfZm9ybWFsX2V2ZW50X3BhcmFtZXRlcihwYXJhbWV0ZXIpOgotICAg
ICAgICByZXR1cm4gQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl90eXBlX3dpdGhfbmFtZShwYXJh
bWV0ZXIudHlwZSwgcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lLCBwYXJhbWV0ZXIuaXNfb3B0aW9u
YWwpCi0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIGNwcF90eXBlX2Zvcl90eXBlX21lbWJl
cihtZW1iZXIpOgotICAgICAgICByZXR1cm4gQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl90eXBl
X3dpdGhfbmFtZShtZW1iZXIudHlwZSwgbWVtYmVyLm1lbWJlcl9uYW1lLCBGYWxzZSkKLQotICAg
IEBzdGF0aWNtZXRob2QKLSAgICBkZWYgY3BwX3R5cGVfZm9yX3R5cGVfd2l0aF9uYW1lKF90eXBl
LCB0eXBlX25hbWUsIGlzX29wdGlvbmFsKToKICAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwg
KEFycmF5VHlwZSwgT2JqZWN0VHlwZSkpOgotICAgICAgICAgICAgcmV0dXJuICdSZWZQdHI8JXM+
JyAlIENwcEdlbmVyYXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZShfdHlwZSkKLSAgICAg
ICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgQWxpYXNlZFR5cGUpOgotICAgICAgICAgICAgYnVpbGRl
cl90eXBlID0gQ3BwR2VuZXJhdG9yLmNwcF9wcm90b2NvbF90eXBlX2Zvcl90eXBlKF90eXBlKQot
ICAgICAgICAgICAgaWYgaXNfb3B0aW9uYWw6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICdjb25z
dCAlcyonICUgYnVpbGRlcl90eXBlCi0gICAgICAgICAgICBlbGlmIF90eXBlLmFsaWFzZWRfdHlw
ZS5xdWFsaWZpZWRfbmFtZSgpIGluIFsnaW50ZWdlcicsICdudW1iZXInXToKLSAgICAgICAgICAg
ICAgICByZXR1cm4gQ3BwR2VuZXJhdG9yLmNwcF9uYW1lX2Zvcl9wcmltaXRpdmVfdHlwZShfdHlw
ZS5hbGlhc2VkX3R5cGUpCi0gICAgICAgICAgICBlbGlmIF90eXBlLmFsaWFzZWRfdHlwZS5xdWFs
aWZpZWRfbmFtZSgpIGluIFsnc3RyaW5nJ106Ci0gICAgICAgICAgICAgICAgcmV0dXJuICdjb25z
dCAlcyYnICUgYnVpbGRlcl90eXBlCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAg
IHJldHVybiBidWlsZGVyX3R5cGUKLSAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgUHJpbWl0
aXZlVHlwZSk6Ci0gICAgICAgICAgICBjcHBfbmFtZSA9IENwcEdlbmVyYXRvci5jcHBfbmFtZV9m
b3JfcHJpbWl0aXZlX3R5cGUoX3R5cGUpCi0gICAgICAgICAgICBpZiBfdHlwZS5xdWFsaWZpZWRf
bmFtZSgpIGluIFsnb2JqZWN0J106Ci0gICAgICAgICAgICAgICAgcmV0dXJuICdSZWZQdHI8SlNP
Tjo6T2JqZWN0PicKLSAgICAgICAgICAgIGVsaWYgX3R5cGUucXVhbGlmaWVkX25hbWUoKSBpbiBb
J2FueSddOgotICAgICAgICAgICAgICAgIHJldHVybiAnUmVmUHRyPEpTT046OlZhbHVlPicKLSAg
ICAgICAgICAgIGVsaWYgaXNfb3B0aW9uYWw6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICdjb25z
dCAlcyonICUgY3BwX25hbWUKLSAgICAgICAgICAgIGVsaWYgX3R5cGUucXVhbGlmaWVkX25hbWUo
KSBpbiBbJ3N0cmluZyddOgotICAgICAgICAgICAgICAgIHJldHVybiAnY29uc3QgJXMmJyAlIGNw
cF9uYW1lCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJldHVybiBjcHBfbmFt
ZQorICAgICAgICAgICAgcmV0dXJuICdSZWY8JXM+JiYnICUgQ3BwR2VuZXJhdG9yLmNwcF9wcm90
b2NvbF90eXBlX2Zvcl90eXBlKF90eXBlKQorCisgICAgICAgIGlmIF90eXBlLnF1YWxpZmllZF9u
YW1lKCkgPT0gJ29iamVjdCc6CisgICAgICAgICAgICByZXR1cm4gJ1JlZjxKU09OOjpPYmplY3Q+
JiYnCisKKyAgICAgICAgaWYgX3R5cGUucXVhbGlmaWVkX25hbWUoKSA9PSAnYXJyYXknOgorICAg
ICAgICAgICAgcmV0dXJuICdSZWY8SlNPTjo6QXJyYXk+JiYnCisKKyAgICAgICAgaWYgX3R5cGUu
cXVhbGlmaWVkX25hbWUoKSA9PSAnYW55JzoKKyAgICAgICAgICAgIHJldHVybiAnUmVmPEpTT046
OlZhbHVlPiYmJworCisgICAgICAgIGlmIF90eXBlLnF1YWxpZmllZF9uYW1lKCkgPT0gJ3N0cmlu
Zyc6CisgICAgICAgICAgICByZXR1cm4gJ2NvbnN0ICVzJicgJSBDcHBHZW5lcmF0b3IuY3BwX25h
bWVfZm9yX3ByaW1pdGl2ZV90eXBlKF90eXBlKQorCiAgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5
cGUsIEVudW1UeXBlKToKICAgICAgICAgICAgIGlmIF90eXBlLmlzX2Fub255bW91czoKLSAgICAg
ICAgICAgICAgICBlbnVtX3R5cGVfbmFtZSA9IHVjZmlyc3QodHlwZV9uYW1lKQotICAgICAgICAg
ICAgZWxzZToKLSAgICAgICAgICAgICAgICBlbnVtX3R5cGVfbmFtZSA9ICdJbnNwZWN0b3I6OlBy
b3RvY29sOjolczo6JXMnICUgKF90eXBlLnR5cGVfZG9tYWluKCkuZG9tYWluX25hbWUsIF90eXBl
LnJhd19uYW1lKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHVjZmlyc3QobmFtZSkKKyAgICAg
ICAgICAgIHJldHVybiAnUHJvdG9jb2w6OiVzOjolcycgJSAoX3R5cGUudHlwZV9kb21haW4oKS5k
b21haW5fbmFtZSwgX3R5cGUucmF3X25hbWUoKSkKIAotICAgICAgICAgICAgaWYgaXNfb3B0aW9u
YWw6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICclcyonICUgZW51bV90eXBlX25hbWUKLSAgICAg
ICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICclcycgJSBlbnVtX3R5cGVfbmFt
ZQotCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBjcHBfdHlwZV9mb3JfZm9ybWFsX291dF9w
YXJhbWV0ZXIocGFyYW1ldGVyKToKLSAgICAgICAgX3R5cGUgPSBwYXJhbWV0ZXIudHlwZQotCi0g
ICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEFsaWFzZWRUeXBlKToKLSAgICAgICAgICAgIF90
eXBlID0gX3R5cGUuYWxpYXNlZF90eXBlICAjIEZhbGwgdGhyb3VnaC4KLQotICAgICAgICBpZiBp
c2luc3RhbmNlKF90eXBlLCAoT2JqZWN0VHlwZSwgQXJyYXlUeXBlKSk6Ci0gICAgICAgICAgICBy
ZXR1cm4gJ1JlZlB0cjwlcz4mJyAlIENwcEdlbmVyYXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3Jf
dHlwZShfdHlwZSkKICAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgUHJpbWl0aXZlVHlwZSk6
Ci0gICAgICAgICAgICBjcHBfbmFtZSA9IENwcEdlbmVyYXRvci5jcHBfbmFtZV9mb3JfcHJpbWl0
aXZlX3R5cGUoX3R5cGUpCi0gICAgICAgICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuICJPcHRpb25hbDwlcz4mIiAlIGNwcF9uYW1lCi0gICAgICAg
ICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJldHVybiAnJXMqJyAlIGNwcF9uYW1lCi0gICAg
ICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKToKLSAgICAgICAgICAgIGlmIF90eXBl
LmlzX2Fub255bW91czoKLSAgICAgICAgICAgICAgICByZXR1cm4gJyVzQmFja2VuZERpc3BhdGNo
ZXJIYW5kbGVyOjolcyonICUgKF90eXBlLnR5cGVfZG9tYWluKCkuZG9tYWluX25hbWUsIHVjZmly
c3QocGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKSkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuICdJbnNwZWN0b3I6OlByb3RvY29sOjolczo6JXMqJyAlIChfdHlwZS50
eXBlX2RvbWFpbigpLmRvbWFpbl9uYW1lLCBfdHlwZS5yYXdfbmFtZSgpKQorICAgICAgICAgICAg
cmV0dXJuIENwcEdlbmVyYXRvci5jcHBfbmFtZV9mb3JfcHJpbWl0aXZlX3R5cGUoX3R5cGUpCiAK
LSAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigidW5rbm93biBmb3JtYWwgb3V0IHBhcmFtZXRlciB0
eXBlLiIpCi0KLSAgICAjIEZJWE1FOiB0aGlzIGlzIG9ubHkgc2xpZ2h0bHkgZGlmZmVyZW50IGZy
b20gb3V0IHBhcmFtZXRlcnM7IHRoZXkgY291bGQgYmUgdW5pZmllZC4KLSAgICBAc3RhdGljbWV0
aG9kCi0gICAgZGVmIGNwcF90eXBlX2Zvcl9mb3JtYWxfYXN5bmNfcGFyYW1ldGVyKHBhcmFtZXRl
cik6Ci0gICAgICAgIF90eXBlID0gcGFyYW1ldGVyLnR5cGUKLSAgICAgICAgaWYgaXNpbnN0YW5j
ZShfdHlwZSwgQWxpYXNlZFR5cGUpOgotICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5hbGlhc2Vk
X3R5cGUgICMgRmFsbCB0aHJvdWdoLgotCi0gICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIChP
YmplY3RUeXBlLCBBcnJheVR5cGUpKToKLSAgICAgICAgICAgIHJldHVybiAnUmVmUHRyPCVzPiYm
JyAlIENwcEdlbmVyYXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZShfdHlwZSkKLSAgICAg
ICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgUHJpbWl0aXZlVHlwZSk6Ci0gICAgICAgICAgICBjcHBf
bmFtZSA9IENwcEdlbmVyYXRvci5jcHBfbmFtZV9mb3JfcHJpbWl0aXZlX3R5cGUoX3R5cGUpCi0g
ICAgICAgICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6Ci0gICAgICAgICAgICAgICAgcmV0
dXJuICJPcHRpb25hbDwlcz4mIiAlIGNwcF9uYW1lCi0gICAgICAgICAgICBlbGlmIF90eXBlLnF1
YWxpZmllZF9uYW1lKCkgaW4gWydpbnRlZ2VyJywgJ251bWJlciddOgotICAgICAgICAgICAgICAg
IHJldHVybiBDcHBHZW5lcmF0b3IuY3BwX25hbWVfZm9yX3ByaW1pdGl2ZV90eXBlKF90eXBlKQot
ICAgICAgICAgICAgZWxpZiBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpIGluIFsnc3RyaW5nJ106Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuICdjb25zdCAlcyYnICUgY3BwX25hbWUKLSAgICAgICAgICAg
IGVsc2U6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGNwcF9uYW1lCi0gICAgICAgIGlmIGlzaW5z
dGFuY2UoX3R5cGUsIEVudW1UeXBlKToKLSAgICAgICAgICAgIGlmIF90eXBlLmlzX2Fub255bW91
czoKLSAgICAgICAgICAgICAgICBjcHBfbmFtZSA9ICclc0JhY2tlbmREaXNwYXRjaGVySGFuZGxl
cjo6JXMnICUgKF90eXBlLnR5cGVfZG9tYWluKCkuZG9tYWluX25hbWUsIHVjZmlyc3QocGFyYW1l
dGVyLnBhcmFtZXRlcl9uYW1lKSkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAg
Y3BwX25hbWUgPSAnSW5zcGVjdG9yOjpQcm90b2NvbDo6JXM6OiVzJyAlIChfdHlwZS50eXBlX2Rv
bWFpbigpLmRvbWFpbl9uYW1lLCBfdHlwZS5yYXdfbmFtZSgpKQotCi0gICAgICAgICAgICBpZiBw
YXJhbWV0ZXIuaXNfb3B0aW9uYWw6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICJPcHRpb25hbDwl
cz4iICUgY3BwX25hbWUKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IGNwcF9uYW1lCi0KLSAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiVW5rbm93biBmb3JtYWwgYXN5
bmMgcGFyYW1ldGVyIHR5cGUuIikKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigidW5rbm93biB0
eXBlIikKIAogICAgICMgSW4tcGFyYW1ldGVycyBkb24ndCB1c2UgYnVpbGRlciB0eXBlcywgYmVj
YXVzZSB0aGV5IGNvdWxkIGJlIHBhc3NlZAogICAgICMgIm9wZW4gdHlwZXMiIHRoYXQgYXJlIG1h
bnVhbGx5IGNvbnN0cnVjdGVkIG91dCBvZiBJbnNwZWN0b3JPYmplY3RzLgotCi0gICAgIyBGSVhN
RTogT25seSBwYXJhbWV0ZXJzIHRoYXQgYXJlIGFjdHVhbGx5IG9wZW4gdHlwZXMgc2hvdWxkIG5l
ZWQgbm9uLWJ1aWxkZXIgcGFyYW1ldGVyIHR5cGVzLgogICAgIEBzdGF0aWNtZXRob2QKLSAgICBk
ZWYgY3BwX3R5cGVfZm9yX3N0YWNrX2luX3BhcmFtZXRlcihwYXJhbWV0ZXIpOgotICAgICAgICBf
dHlwZSA9IHBhcmFtZXRlci50eXBlCisgICAgZGVmIGNwcF90eXBlX2Zvcl9jb21tYW5kX3BhcmFt
ZXRlcihfdHlwZSwgaXNfb3B0aW9uYWwpOgogICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBB
bGlhc2VkVHlwZSk6Ci0gICAgICAgICAgICBfdHlwZSA9IF90eXBlLmFsaWFzZWRfdHlwZSAgIyBG
YWxsIHRocm91Z2guCisgICAgICAgICAgICBfdHlwZSA9IF90eXBlLmFsaWFzZWRfdHlwZQorICAg
ICAgICAgICAgIyBmYWxsdGhyb3VnaAorCisgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEVu
dW1UeXBlKSBhbmQgX3R5cGUuaXNfYW5vbnltb3VzOgorICAgICAgICAgICAgX3R5cGUgPSBfdHlw
ZS5wcmltaXRpdmVfdHlwZQorICAgICAgICAgICAgIyBmYWxsdGhyb3VnaAorCisgICAgICAgIGlm
IGlzaW5zdGFuY2UoX3R5cGUsIE9iamVjdFR5cGUpIG9yIF90eXBlLnF1YWxpZmllZF9uYW1lKCkg
PT0gJ29iamVjdCc6CisgICAgICAgICAgICBpZiBpc19vcHRpb25hbDoKKyAgICAgICAgICAgICAg
ICByZXR1cm4gJ1JlZlB0cjxKU09OOjpPYmplY3Q+JiYnCisgICAgICAgICAgICByZXR1cm4gJ1Jl
ZjxKU09OOjpPYmplY3Q+JiYnCisKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgQXJyYXlU
eXBlKSBvciBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpID09ICdhcnJheSc6CisgICAgICAgICAgICBp
ZiBpc19vcHRpb25hbDoKKyAgICAgICAgICAgICAgICByZXR1cm4gJ1JlZlB0cjxKU09OOjpBcnJh
eT4mJicKKyAgICAgICAgICAgIHJldHVybiAnUmVmPEpTT046OkFycmF5PiYmJworCisgICAgICAg
IGlmIF90eXBlLnF1YWxpZmllZF9uYW1lKCkgPT0gJ2FueSc6CisgICAgICAgICAgICBpZiBpc19v
cHRpb25hbDoKKyAgICAgICAgICAgICAgICByZXR1cm4gJ1JlZlB0cjxKU09OOjpWYWx1ZT4mJicK
KyAgICAgICAgICAgIHJldHVybiAnUmVmPEpTT046OlZhbHVlPiYmJworCisgICAgICAgIGlmIF90
eXBlLnF1YWxpZmllZF9uYW1lKCkgPT0gJ3N0cmluZyc6CisgICAgICAgICAgICByZXR1cm4gJ2Nv
bnN0ICVzJicgJSBDcHBHZW5lcmF0b3IuY3BwX25hbWVfZm9yX3ByaW1pdGl2ZV90eXBlKF90eXBl
KQogCiAgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKToKLSAgICAgICAgICAg
IF90eXBlID0gX3R5cGUucHJpbWl0aXZlX3R5cGUgICMgRmFsbCB0aHJvdWdoLgotCi0gICAgICAg
IGlmIGlzaW5zdGFuY2UoX3R5cGUsIE9iamVjdFR5cGUpOgotICAgICAgICAgICAgcmV0dXJuICJS
ZWZQdHI8SlNPTjo6T2JqZWN0PiIKLSAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgQXJyYXlU
eXBlKToKLSAgICAgICAgICAgIHJldHVybiAiUmVmUHRyPEpTT046OkFycmF5PiIKLSAgICAgICAg
aWYgaXNpbnN0YW5jZShfdHlwZSwgUHJpbWl0aXZlVHlwZSk6CisgICAgICAgICAgICBjcHBfbmFt
ZSA9ICdQcm90b2NvbDo6JXM6OiVzJyAlIChfdHlwZS50eXBlX2RvbWFpbigpLmRvbWFpbl9uYW1l
LCBfdHlwZS5yYXdfbmFtZSgpKQorICAgICAgICBlbGlmIGlzaW5zdGFuY2UoX3R5cGUsIFByaW1p
dGl2ZVR5cGUpOgogICAgICAgICAgICAgY3BwX25hbWUgPSBDcHBHZW5lcmF0b3IuY3BwX25hbWVf
Zm9yX3ByaW1pdGl2ZV90eXBlKF90eXBlKQotICAgICAgICAgICAgaWYgX3R5cGUucXVhbGlmaWVk
X25hbWUoKSBpbiBbJ2FueScsICdvYmplY3QnXToKLSAgICAgICAgICAgICAgICByZXR1cm4gIlJl
ZlB0cjwlcz4iICUgQ3BwR2VuZXJhdG9yLmNwcF9uYW1lX2Zvcl9wcmltaXRpdmVfdHlwZShfdHlw
ZSkKLSAgICAgICAgICAgIGVsaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsIGFuZCBfdHlwZS5xdWFs
aWZpZWRfbmFtZSgpIG5vdCBpbiBbJ2Jvb2xlYW4nLCAnc3RyaW5nJywgJ2ludGVnZXInLCAnbnVt
YmVyJ106Ci0gICAgICAgICAgICAgICAgcmV0dXJuICJPcHRpb25hbDwlcz4iICUgY3BwX25hbWUK
LSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGNwcF9uYW1lCisgICAg
ICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJ1bmtub3duIHR5cGUiKQor
CisgICAgICAgIGlmIGlzX29wdGlvbmFsOgorICAgICAgICAgICAgY3BwX25hbWUgPSAnT3B0aW9u
YWw8JXM+JiYnICUgY3BwX25hbWUKKyAgICAgICAgcmV0dXJuIGNwcF9uYW1lCiAKICAgICBAc3Rh
dGljbWV0aG9kCi0gICAgZGVmIGNwcF90eXBlX2Zvcl9zdGFja19vdXRfcGFyYW1ldGVyKHBhcmFt
ZXRlcik6Ci0gICAgICAgIF90eXBlID0gcGFyYW1ldGVyLnR5cGUKKyAgICBkZWYgY3BwX3R5cGVf
Zm9yX2NvbW1hbmRfcmV0dXJuX2RlY2xhcmF0aW9uKF90eXBlLCBpc19vcHRpb25hbCk6CisgICAg
ICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEFsaWFzZWRUeXBlKToKKyAgICAgICAgICAgIF90eXBl
ID0gX3R5cGUuYWxpYXNlZF90eXBlCisgICAgICAgICAgICAjIGZhbGx0aHJvdWdoCisKKyAgICAg
ICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgRW51bVR5cGUpIGFuZCBfdHlwZS5pc19hbm9ueW1vdXM6
CisgICAgICAgICAgICBfdHlwZSA9IF90eXBlLnByaW1pdGl2ZV90eXBlCisgICAgICAgICAgICAj
IGZhbGx0aHJvdWdoCisKICAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgKEFycmF5VHlwZSwg
T2JqZWN0VHlwZSkpOgotICAgICAgICAgICAgcmV0dXJuICdSZWZQdHI8JXM+JyAlIENwcEdlbmVy
YXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZShfdHlwZSkKLSAgICAgICAgaWYgaXNpbnN0
YW5jZShfdHlwZSwgQWxpYXNlZFR5cGUpOgotICAgICAgICAgICAgYnVpbGRlcl90eXBlID0gQ3Bw
R2VuZXJhdG9yLmNwcF9wcm90b2NvbF90eXBlX2Zvcl90eXBlKF90eXBlKQotICAgICAgICAgICAg
aWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgotICAgICAgICAgICAgICAgIHJldHVybiAiT3B0aW9u
YWw8JXM+IiAlIGJ1aWxkZXJfdHlwZQotICAgICAgICAgICAgcmV0dXJuICclcycgJSBidWlsZGVy
X3R5cGUKLSAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgUHJpbWl0aXZlVHlwZSk6Ci0gICAg
ICAgICAgICBjcHBfbmFtZSA9IENwcEdlbmVyYXRvci5jcHBfbmFtZV9mb3JfcHJpbWl0aXZlX3R5
cGUoX3R5cGUpCi0gICAgICAgICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuICJPcHRpb25hbDwlcz4iICUgY3BwX25hbWUKLSAgICAgICAgICAgIGVs
c2U6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGNwcF9uYW1lCisgICAgICAgICAgICBpZiBpc19v
cHRpb25hbDoKKyAgICAgICAgICAgICAgICByZXR1cm4gJ1JlZlB0cjwlcz4nICUgQ3BwR2VuZXJh
dG9yLmNwcF9wcm90b2NvbF90eXBlX2Zvcl90eXBlKF90eXBlKQorICAgICAgICAgICAgcmV0dXJu
ICdSZWY8JXM+JyAlIENwcEdlbmVyYXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZShfdHlw
ZSkKKworICAgICAgICBpZiBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpID09ICdvYmplY3QnOgorICAg
ICAgICAgICAgaWYgaXNfb3B0aW9uYWw6CisgICAgICAgICAgICAgICAgcmV0dXJuICdSZWZQdHI8
SlNPTjo6T2JqZWN0PicKKyAgICAgICAgICAgIHJldHVybiAnUmVmPEpTT046Ok9iamVjdD4nCisK
KyAgICAgICAgaWYgX3R5cGUucXVhbGlmaWVkX25hbWUoKSA9PSAnYXJyYXknOgorICAgICAgICAg
ICAgaWYgaXNfb3B0aW9uYWw6CisgICAgICAgICAgICAgICAgcmV0dXJuICdSZWZQdHI8SlNPTjo6
QXJyYXk+JworICAgICAgICAgICAgcmV0dXJuICdSZWY8SlNPTjo6QXJyYXk+JworCisgICAgICAg
IGlmIF90eXBlLnF1YWxpZmllZF9uYW1lKCkgPT0gJ2FueSc6CisgICAgICAgICAgICBpZiBpc19v
cHRpb25hbDoKKyAgICAgICAgICAgICAgICByZXR1cm4gJ1JlZlB0cjxKU09OOjpWYWx1ZT4nCisg
ICAgICAgICAgICByZXR1cm4gJ1JlZjxKU09OOjpWYWx1ZT4nCisKKyAgICAgICAgaWYgX3R5cGUu
cXVhbGlmaWVkX25hbWUoKSA9PSAnc3RyaW5nJzoKKyAgICAgICAgICAgIHJldHVybiBDcHBHZW5l
cmF0b3IuY3BwX25hbWVfZm9yX3ByaW1pdGl2ZV90eXBlKF90eXBlKQorCiAgICAgICAgIGlmIGlz
aW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKToKLSAgICAgICAgICAgIGlmIF90eXBlLmlzX2Fub255
bW91czoKLSAgICAgICAgICAgICAgICByZXR1cm4gJyVzQmFja2VuZERpc3BhdGNoZXJIYW5kbGVy
OjolcycgJSAoX3R5cGUudHlwZV9kb21haW4oKS5kb21haW5fbmFtZSwgdWNmaXJzdChwYXJhbWV0
ZXIucGFyYW1ldGVyX25hbWUpKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gJ0luc3BlY3Rvcjo6UHJvdG9jb2w6OiVzOjolcycgJSAoX3R5cGUudHlwZV9kb21haW4o
KS5kb21haW5fbmFtZSwgX3R5cGUucmF3X25hbWUoKSkKKyAgICAgICAgICAgIGNwcF9uYW1lID0g
J1Byb3RvY29sOjolczo6JXMnICUgKF90eXBlLnR5cGVfZG9tYWluKCkuZG9tYWluX25hbWUsIF90
eXBlLnJhd19uYW1lKCkpCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShfdHlwZSwgUHJpbWl0aXZl
VHlwZSk6CisgICAgICAgICAgICBjcHBfbmFtZSA9IENwcEdlbmVyYXRvci5jcHBfbmFtZV9mb3Jf
cHJpbWl0aXZlX3R5cGUoX3R5cGUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBW
YWx1ZUVycm9yKCJ1bmtub3duIHR5cGUiKQorCisgICAgICAgIGlmIGlzX29wdGlvbmFsOgorICAg
ICAgICAgICAgY3BwX25hbWUgPSAnT3B0aW9uYWw8JXM+JyAlIGNwcF9uYW1lCisgICAgICAgIHJl
dHVybiBjcHBfbmFtZQogCiAgICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBjcHBfYXNzZXJ0aW9u
X21ldGhvZF9mb3JfdHlwZV9tZW1iZXIodHlwZV9tZW1iZXIsIG9iamVjdF9kZWNsYXJhdGlvbik6
CisgICAgZGVmIGNwcF90eXBlX2Zvcl9jb21tYW5kX3JldHVybl9hcmd1bWVudChfdHlwZSwgaXNf
b3B0aW9uYWwpOgorICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBBbGlhc2VkVHlwZSk6Cisg
ICAgICAgICAgICBfdHlwZSA9IF90eXBlLmFsaWFzZWRfdHlwZQorICAgICAgICAgICAgIyBmYWxs
dGhyb3VnCiAKLSAgICAgICAgZGVmIGFzc2VydGlvbl9tZXRob2RfZm9yX3R5cGUoX3R5cGUpOgot
ICAgICAgICAgICAgcmV0dXJuICdCaW5kaW5nVHJhaXRzPCVzPjo6YXNzZXJ0VmFsdWVIYXNFeHBl
Y3RlZFR5cGUnICUgQ3BwR2VuZXJhdG9yLmNwcF9wcm90b2NvbF90eXBlX2Zvcl90eXBlKF90eXBl
KQorICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBFbnVtVHlwZSkgYW5kIF90eXBlLmlzX2Fu
b255bW91czoKKyAgICAgICAgICAgIF90eXBlID0gX3R5cGUucHJpbWl0aXZlX3R5cGUKKyAgICAg
ICAgICAgICMgZmFsbHRocm91Z2gKIAotICAgICAgICBpZiBpc2luc3RhbmNlKHR5cGVfbWVtYmVy
LnR5cGUsIEFsaWFzZWRUeXBlKToKLSAgICAgICAgICAgIHJldHVybiBhc3NlcnRpb25fbWV0aG9k
X2Zvcl90eXBlKHR5cGVfbWVtYmVyLnR5cGUuYWxpYXNlZF90eXBlKQotICAgICAgICBpZiBpc2lu
c3RhbmNlKHR5cGVfbWVtYmVyLnR5cGUsIEVudW1UeXBlKSBhbmQgdHlwZV9tZW1iZXIudHlwZS5p
c19hbm9ueW1vdXM6Ci0gICAgICAgICAgICByZXR1cm4gJ0JpbmRpbmdUcmFpdHM8JXM+Ojphc3Nl
cnRWYWx1ZUhhc0V4cGVjdGVkVHlwZScgJSBDcHBHZW5lcmF0b3IuY3BwX3Byb3RvY29sX3R5cGVf
Zm9yX3R5cGVfbWVtYmVyKHR5cGVfbWVtYmVyLCBvYmplY3RfZGVjbGFyYXRpb24pCisgICAgICAg
IGlmIGlzaW5zdGFuY2UoX3R5cGUsIChBcnJheVR5cGUsIE9iamVjdFR5cGUpKToKKyAgICAgICAg
ICAgIGlmIGlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAgIHJldHVybiAnUmVmUHRyPCVzPiYm
JyAlIENwcEdlbmVyYXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZShfdHlwZSkKKyAgICAg
ICAgICAgIHJldHVybiAnUmVmPCVzPiYmJyAlIENwcEdlbmVyYXRvci5jcHBfcHJvdG9jb2xfdHlw
ZV9mb3JfdHlwZShfdHlwZSkKIAotICAgICAgICByZXR1cm4gYXNzZXJ0aW9uX21ldGhvZF9mb3Jf
dHlwZSh0eXBlX21lbWJlci50eXBlKQorICAgICAgICBpZiBfdHlwZS5xdWFsaWZpZWRfbmFtZSgp
ID09ICdvYmplY3QnOgorICAgICAgICAgICAgaWYgaXNfb3B0aW9uYWw6CisgICAgICAgICAgICAg
ICAgcmV0dXJuICdSZWZQdHI8SlNPTjo6T2JqZWN0PiYmJworICAgICAgICAgICAgcmV0dXJuICdS
ZWY8SlNPTjo6T2JqZWN0PiYmJworCisgICAgICAgIGlmIF90eXBlLnF1YWxpZmllZF9uYW1lKCkg
PT0gJ2FycmF5JzoKKyAgICAgICAgICAgIGlmIGlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAg
IHJldHVybiAnUmVmUHRyPEpTT046OkFycmF5PiYmJworICAgICAgICAgICAgcmV0dXJuICdSZWY8
SlNPTjo6QXJyYXk+JiYnCisKKyAgICAgICAgaWYgX3R5cGUucXVhbGlmaWVkX25hbWUoKSA9PSAn
YW55JzoKKyAgICAgICAgICAgIGlmIGlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAgIHJldHVy
biAnUmVmUHRyPEpTT046OlZhbHVlPiYmJworICAgICAgICAgICAgcmV0dXJuICdSZWY8SlNPTjo6
VmFsdWU+JiYnCisKKyAgICAgICAgaWYgX3R5cGUucXVhbGlmaWVkX25hbWUoKSA9PSAnc3RyaW5n
JzoKKyAgICAgICAgICAgIHJldHVybiAnY29uc3QgJXMmJyAlIENwcEdlbmVyYXRvci5jcHBfbmFt
ZV9mb3JfcHJpbWl0aXZlX3R5cGUoX3R5cGUpCisKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlw
ZSwgRW51bVR5cGUpOgorICAgICAgICAgICAgY3BwX25hbWUgPSAnUHJvdG9jb2w6OiVzOjolcycg
JSAoX3R5cGUudHlwZV9kb21haW4oKS5kb21haW5fbmFtZSwgX3R5cGUucmF3X25hbWUoKSkKKyAg
ICAgICAgZWxpZiBpc2luc3RhbmNlKF90eXBlLCBQcmltaXRpdmVUeXBlKToKKyAgICAgICAgICAg
IGNwcF9uYW1lID0gQ3BwR2VuZXJhdG9yLmNwcF9uYW1lX2Zvcl9wcmltaXRpdmVfdHlwZShfdHlw
ZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInVua25vd24g
dHlwZSIpCisKKyAgICAgICAgaWYgaXNfb3B0aW9uYWw6CisgICAgICAgICAgICBjcHBfbmFtZSA9
ICdPcHRpb25hbDwlcz4mJicgJSBjcHBfbmFtZQorICAgICAgICByZXR1cm4gY3BwX25hbWUKKwor
ICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgY3BwX3R5cGVfZm9yX2V2ZW50X3BhcmFtZXRlcihf
dHlwZSwgaXNfb3B0aW9uYWwpOgorICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBBbGlhc2Vk
VHlwZSk6CisgICAgICAgICAgICBfdHlwZSA9IF90eXBlLmFsaWFzZWRfdHlwZQorICAgICAgICAg
ICAgIyBmYWxsdGhyb3VnaAorCisgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEVudW1UeXBl
KSBhbmQgX3R5cGUuaXNfYW5vbnltb3VzOgorICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5wcmlt
aXRpdmVfdHlwZQorICAgICAgICAgICAgIyBmYWxsdGhyb3VnaAorCisgICAgICAgIGlmIGlzaW5z
dGFuY2UoX3R5cGUsIChBcnJheVR5cGUsIE9iamVjdFR5cGUpKToKKyAgICAgICAgICAgIGlmIGlz
X29wdGlvbmFsOgorICAgICAgICAgICAgICAgIHJldHVybiAnUmVmUHRyPCVzPiYmJyAlIENwcEdl
bmVyYXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZShfdHlwZSkKKyAgICAgICAgICAgIHJl
dHVybiAnUmVmPCVzPiYmJyAlIENwcEdlbmVyYXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlw
ZShfdHlwZSkKKworICAgICAgICBpZiBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpID09ICdvYmplY3Qn
OgorICAgICAgICAgICAgaWYgaXNfb3B0aW9uYWw6CisgICAgICAgICAgICAgICAgcmV0dXJuICdS
ZWZQdHI8SlNPTjo6T2JqZWN0PiYmJworICAgICAgICAgICAgcmV0dXJuICdSZWY8SlNPTjo6T2Jq
ZWN0PiYmJworCisgICAgICAgIGlmIF90eXBlLnF1YWxpZmllZF9uYW1lKCkgPT0gJ2FycmF5JzoK
KyAgICAgICAgICAgIGlmIGlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAgIHJldHVybiAnUmVm
UHRyPEpTT046OkFycmF5PiYmJworICAgICAgICAgICAgcmV0dXJuICdSZWY8SlNPTjo6QXJyYXk+
JiYnCisKKyAgICAgICAgaWYgX3R5cGUucXVhbGlmaWVkX25hbWUoKSA9PSAnYW55JzoKKyAgICAg
ICAgICAgIGlmIGlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAgIHJldHVybiAnUmVmUHRyPEpT
T046OlZhbHVlPiYmJworICAgICAgICAgICAgcmV0dXJuICdSZWY8SlNPTjo6VmFsdWU+JiYnCisK
KyAgICAgICAgaWYgX3R5cGUucXVhbGlmaWVkX25hbWUoKSA9PSAnc3RyaW5nJzoKKyAgICAgICAg
ICAgIHJldHVybiAnY29uc3QgJXMmJyAlIENwcEdlbmVyYXRvci5jcHBfbmFtZV9mb3JfcHJpbWl0
aXZlX3R5cGUoX3R5cGUpCisKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgRW51bVR5cGUp
OgorICAgICAgICAgICAgY3BwX25hbWUgPSAnUHJvdG9jb2w6OiVzOjolcycgJSAoX3R5cGUudHlw
ZV9kb21haW4oKS5kb21haW5fbmFtZSwgX3R5cGUucmF3X25hbWUoKSkKKyAgICAgICAgZWxpZiBp
c2luc3RhbmNlKF90eXBlLCBQcmltaXRpdmVUeXBlKToKKyAgICAgICAgICAgIGNwcF9uYW1lID0g
Q3BwR2VuZXJhdG9yLmNwcF9uYW1lX2Zvcl9wcmltaXRpdmVfdHlwZShfdHlwZSkKKyAgICAgICAg
ZWxzZToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInVua25vd24gdHlwZSIpCisKKyAg
ICAgICAgaWYgaXNfb3B0aW9uYWw6CisgICAgICAgICAgICBjcHBfbmFtZSA9ICdPcHRpb25hbDwl
cz4mJicgJSBjcHBfbmFtZQorICAgICAgICByZXR1cm4gY3BwX25hbWUKKworICAgIEBzdGF0aWNt
ZXRob2QKKyAgICBkZWYgY3BwX3R5cGVfZm9yX2VudW0oZW51bV90eXBlLCBuYW1lKToKKyAgICAg
ICAgaWYgZW51bV90eXBlLmlzX2Fub255bW91czoKKyAgICAgICAgICAgIHJldHVybiAnUHJvdG9j
b2w6OiVzOjolcycgJSAoZW51bV90eXBlLnR5cGVfZG9tYWluKCkuZG9tYWluX25hbWUsIHVjZmly
c3QobmFtZSkpCisgICAgICAgIHJldHVybiAnUHJvdG9jb2w6OiVzOjolcycgJSAoZW51bV90eXBl
LnR5cGVfZG9tYWluKCkuZG9tYWluX25hbWUsIGVudW1fdHlwZS5yYXdfbmFtZSgpKQogCiAgICAg
QHN0YXRpY21ldGhvZAogICAgIGRlZiBjcHBfbmFtZV9mb3JfcHJpbWl0aXZlX3R5cGUoX3R5cGUp
OgogICAgICAgICByZXR1cm4gX1BSSU1JVElWRV9UT19DUFBfTkFNRV9NQVAuZ2V0KF90eXBlLnJh
d19uYW1lKCkpCiAKLSAgICAjIERlY2lkZSB3aGV0aGVyIGNlcnRhaW4gaGVscGVycyBhcmUgbmVj
ZXNzYXJ5IGluIGEgc2l0dWF0aW9uLgogICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgc2hvdWxk
X3VzZV93cmFwcGVyX2Zvcl9yZXR1cm5fdHlwZShfdHlwZSk6Ci0gICAgICAgIHJldHVybiBub3Qg
aXNpbnN0YW5jZShfdHlwZSwgKEFycmF5VHlwZSwgT2JqZWN0VHlwZSkpCisgICAgZGVmIHNob3Vs
ZF9tb3ZlX2FyZ3VtZW50KF90eXBlLCBpc19vcHRpb25hbCk6CisgICAgICAgIGlmIGlzaW5zdGFu
Y2UoX3R5cGUsIEFsaWFzZWRUeXBlKToKKyAgICAgICAgICAgIF90eXBlID0gX3R5cGUuYWxpYXNl
ZF90eXBlCisgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKToKKyAgICAgICAg
ICAgIF90eXBlID0gX3R5cGUucHJpbWl0aXZlX3R5cGUKKworICAgICAgICBpZiBfdHlwZS5yYXdf
bmFtZSgpID09ICdzdHJpbmcnOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHJl
dHVybiBpc19vcHRpb25hbCA9PSAoX3R5cGUucmF3X25hbWUoKSBpbiBbJ2Jvb2xlYW4nLCAnaW50
ZWdlcicsICdudW1iZXInXSkKIAogICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgc2hvdWxkX3Vz
ZV9yZWZlcmVuY2VzX2Zvcl90eXBlKF90eXBlKToKLSAgICAgICAgcmV0dXJuIGlzaW5zdGFuY2Uo
X3R5cGUsIChBcnJheVR5cGUsIE9iamVjdFR5cGUpKSBvciAoaXNpbnN0YW5jZShfdHlwZSwgKFBy
aW1pdGl2ZVR5cGUpKSBhbmQgX3R5cGUucXVhbGlmaWVkX25hbWUoKSBpbiBbImFueSIsICJvYmpl
Y3QiXSkKKyAgICBkZWYgc2hvdWxkX3JlbGVhc2VfYXJndW1lbnQoX3R5cGUsIGlzX29wdGlvbmFs
KToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgQWxpYXNlZFR5cGUpOgorICAgICAgICAg
ICAgX3R5cGUgPSBfdHlwZS5hbGlhc2VkX3R5cGUKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlw
ZSwgRW51bVR5cGUpOgorICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5wcmltaXRpdmVfdHlwZQor
CisgICAgICAgIGlmIF90eXBlLnJhd19uYW1lKCkgPT0gJ3N0cmluZyc6CisgICAgICAgICAgICBy
ZXR1cm4gRmFsc2UKKyAgICAgICAgaWYgX3R5cGUucmF3X25hbWUoKSBpbiBbJ2Jvb2xlYW4nLCAn
aW50ZWdlcicsICdudW1iZXInXToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBy
ZXR1cm4gaXNfb3B0aW9uYWwKIAogICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgc2hvdWxkX3Bh
c3NfYnlfY29weV9mb3JfcmV0dXJuX3R5cGUoX3R5cGUpOgotICAgICAgICByZXR1cm4gaXNpbnN0
YW5jZShfdHlwZSwgKEFycmF5VHlwZSwgT2JqZWN0VHlwZSkpIG9yIChpc2luc3RhbmNlKF90eXBl
LCAoUHJpbWl0aXZlVHlwZSkpIGFuZCBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpID09ICJvYmplY3Qi
KQorICAgIGRlZiBzaG91bGRfZGVyZWZlcmVuY2VfYXJndW1lbnQoX3R5cGUsIGlzX29wdGlvbmFs
KToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgQWxpYXNlZFR5cGUpOgorICAgICAgICAg
ICAgX3R5cGUgPSBfdHlwZS5hbGlhc2VkX3R5cGUKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlw
ZSwgRW51bVR5cGUpOgorICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5wcmltaXRpdmVfdHlwZQor
CisgICAgICAgIGlmIF90eXBlLnJhd19uYW1lKCkgPT0gJ3N0cmluZyc6CisgICAgICAgICAgICBy
ZXR1cm4gRmFsc2UKKyAgICAgICAgaWYgX3R5cGUucmF3X25hbWUoKSBub3QgaW4gWydib29sZWFu
JywgJ2ludGVnZXInLCAnbnVtYmVyJ106CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAg
ICAgcmV0dXJuIGlzX29wdGlvbmFsCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9jcHBfZ2VuZXJhdG9yX3RlbXBsYXRlcy5weSBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2NwcF9nZW5lcmF0
b3JfdGVtcGxhdGVzLnB5CmluZGV4IDA4MmJlMzNmMTVkZTI1YmU4ODk1N2NiMTQyMjkzNTIwMzZl
ZTIyY2YuLjdjODQ4NTc4NmU5Y2RjZjE0MmU5Mzk2MmFlMmNmNGQxMDcxZTFkODcgMTAwNzU1Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2NwcF9n
ZW5lcmF0b3JfdGVtcGxhdGVzLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9jb2RlZ2VuL2NwcF9nZW5lcmF0b3JfdGVtcGxhdGVzLnB5CkBAIC05NSw3ICs5
NSw3IEBAIHByb3RlY3RlZDoKICAgICAiIiIke2NsYXNzQW5kRXhwb3J0TWFjcm99ICR7ZG9tYWlu
TmFtZX1CYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5k
RGlzcGF0Y2hlciB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjwke2RvbWFpbk5hbWV9QmFja2Vu
ZERpc3BhdGNoZXI+IGNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYsICR7ZG9tYWluTmFtZX1CYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKLSAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVzdElk
LCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKSBmaW5h
bDsKKyAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBjb25zdCBTdHJpbmcm
IHByb3RvY29sX21ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9tZXNzYWdlKSBm
aW5hbDsKICR7Y29tbWFuZERlY2xhcmF0aW9uc30KIHByaXZhdGU6CiAgICAgJHtkb21haW5OYW1l
fUJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiwgJHtkb21haW5OYW1lfUJhY2tl
bmREaXNwYXRjaGVySGFuZGxlciopOwpAQCAtMTE0LDMyICsxMTQsMzAgQEAgcHJpdmF0ZToKICAg
ICAiIiIgICAgJHtjbGFzc0FuZEV4cG9ydE1hY3JvfSAke2NhbGxiYWNrTmFtZX0gOiBwdWJsaWMg
QmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZSB7CiAgICAgcHVibGljOgogICAgICAgICAk
e2NhbGxiYWNrTmFtZX0oUmVmPEJhY2tlbmREaXNwYXRjaGVyPiYmLCBpbnQgaWQpOwotICAgICAg
ICB2b2lkIHNlbmRTdWNjZXNzKCR7b3V0UGFyYW1ldGVyc30pOworICAgICAgICB2b2lkIHNlbmRT
dWNjZXNzKCR7cmV0dXJuc30pOwogICAgIH07Ci0gICAgdmlydHVhbCB2b2lkICR7Y29tbWFuZE5h
bWV9KCR7aW5QYXJhbWV0ZXJzfSkgPSAwOyIiIikKKyAgICB2aXJ0dWFsIHZvaWQgJHtjb21tYW5k
TmFtZX0oJHtwYXJhbWV0ZXJzfSkgPSAwOyIiIikKIAogICAgIEJhY2tlbmREaXNwYXRjaGVySW1w
bGVtZW50YXRpb25TbWFsbFN3aXRjaCA9ICgKLSAgICAiIiJ2b2lkICR7ZG9tYWluTmFtZX1CYWNr
ZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0
aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpCisgICAgIiIidm9pZCAke2RvbWFpbk5h
bWV9QmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBjb25z
dCBTdHJpbmcmIHByb3RvY29sX21ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9t
ZXNzYWdlKQogewogICAgIFJlZjwke2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXI+IHByb3Rl
Y3QoKnRoaXMpOwogCi0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVyczsKLSAgICBt
ZXNzYWdlLT5nZXRPYmplY3QoInBhcmFtcyJfcywgcGFyYW1ldGVycyk7CisgICAgYXV0byBwcm90
b2NvbF9wYXJhbWV0ZXJzID0gcHJvdG9jb2xfbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3Mp
OwogCiAke2Rpc3BhdGNoQ2FzZXN9CiAKLSAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQ
cm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIicke2RvbWFp
bk5hbWV9LiIgKyBtZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7CisgICAgbV9iYWNrZW5kRGlz
cGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90
Rm91bmQsICInJHtkb21haW5OYW1lfS4iICsgcHJvdG9jb2xfbWV0aG9kICsgIicgd2FzIG5vdCBm
b3VuZCIpOwogfSIiIikKIAogICAgIEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25MYXJn
ZVN3aXRjaCA9ICgKLSIiInZvaWQgJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyOjpkaXNw
YXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmpl
Y3Q+JiYgbWVzc2FnZSkKKyIiInZvaWQgJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyOjpk
aXNwYXRjaChsb25nIHByb3RvY29sX2NhbGxJZCwgY29uc3QgU3RyaW5nJiBwcm90b2NvbF9tZXRo
b2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfbWVzc2FnZSkKIHsKICAgICBSZWY8JHtk
b21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKIAotICAgIFJlZlB0
cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnM7Ci0gICAgbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJh
bXMiX3MsIHBhcmFtZXRlcnMpOworICAgIGF1dG8gcHJvdG9jb2xfcGFyYW1ldGVycyA9IHByb3Rv
Y29sX21lc3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9zKTsKIAotICAgIHVzaW5nIENhbGxIYW5k
bGVyID0gdm9pZCAoJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyOjoqKShsb25nIHJlcXVl
c3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKTsKKyAgICB1c2luZyBDYWxsSGFu
ZGxlciA9IHZvaWQgKCR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcjo6KikobG9uZyBwcm90
b2NvbF9jYWxsSWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfbWVzc2FnZSk7CiAg
ICAgdXNpbmcgRGlzcGF0Y2hNYXAgPSBIYXNoTWFwPFN0cmluZywgQ2FsbEhhbmRsZXI+OwogICAg
IHN0YXRpYyBOZXZlckRlc3Ryb3llZDxEaXNwYXRjaE1hcD4gZGlzcGF0Y2hNYXA7CiAgICAgaWYg
KGRpc3BhdGNoTWFwLmdldCgpLmlzRW1wdHkoKSkgewpAQCAtMTU0LDEzICsxNTIsMTMgQEAgJHtk
aXNwYXRjaENhc2VzfQogICAgICAgICAgICAgZGlzcGF0Y2hNYXAuZ2V0KCkuYWRkKGNvbW1hbmRz
W2ldLm5hbWUsIGNvbW1hbmRzW2ldLmhhbmRsZXIpOwogICAgIH0KIAotICAgIGF1dG8gZmluZFJl
c3VsdCA9IGRpc3BhdGNoTWFwLmdldCgpLmZpbmQobWV0aG9kKTsKKyAgICBhdXRvIGZpbmRSZXN1
bHQgPSBkaXNwYXRjaE1hcC5nZXQoKS5maW5kKHByb3RvY29sX21ldGhvZCk7CiAgICAgaWYgKGZp
bmRSZXN1bHQgPT0gZGlzcGF0Y2hNYXAuZ2V0KCkuZW5kKCkpIHsKLSAgICAgICAgbV9iYWNrZW5k
RGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9k
Tm90Rm91bmQsICInJHtkb21haW5OYW1lfS4iICsgbWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIp
OworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tl
bmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIicke2RvbWFpbk5hbWV9LiIgKyBwcm90b2Nv
bF9tZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICAoKCp0aGlzKS4qZmluZFJlc3VsdC0+dmFsdWUpKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJh
bWV0ZXJzKSk7CisgICAgKCgqdGhpcykuKmZpbmRSZXN1bHQtPnZhbHVlKShwcm90b2NvbF9jYWxs
SWQsIFdURk1vdmUocHJvdG9jb2xfcGFyYW1ldGVycykpOwogfSIiIikKIAogICAgIEJhY2tlbmRE
aXNwYXRjaGVySW1wbGVtZW50YXRpb25Eb21haW5Db25zdHJ1Y3RvciA9ICgKQEAgLTE3Nyw3ICsx
NzUsNyBAQCAke2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXI6OiR7ZG9tYWluTmFtZX1CYWNr
ZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlcgogfSIiIikKIAogICAgIEJhY2tlbmREaXNw
YXRjaGVySW1wbGVtZW50YXRpb25QcmVwYXJlQ29tbWFuZEFyZ3VtZW50cyA9ICgKLSIiIiR7aW5Q
YXJhbWV0ZXJEZWNsYXJhdGlvbnN9CisiIiIke3BhcmFtZXRlckRlY2xhcmF0aW9uc30KICAgICBp
ZiAobV9iYWNrZW5kRGlzcGF0Y2hlci0+aGFzUHJvdG9jb2xFcnJvcnMoKSkgewogICAgICAgICBt
X2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVy
OjpJbnZhbGlkUGFyYW1zLCAiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kIFwnJHtkb21haW5OYW1l
fS4ke2NvbW1hbmROYW1lfVwnIGNhbid0IGJlIHByb2Nlc3NlZCJfcyk7CiAgICAgICAgIHJldHVy
bjsKQEAgLTE4NywxMSArMTg1LDExIEBAICR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcjo6
JHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyCiAgICAgQmFj
a2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkFzeW5jQ29tbWFuZCA9ICgKICIiIiR7ZG9tYWlu
TmFtZX1CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OiR7Y2FsbGJhY2tOYW1lfTo6JHtjYWxsYmFj
a05hbWV9KFJlZjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBiYWNrZW5kRGlzcGF0Y2hlciwgaW50IGlk
KSA6IEJhY2tlbmREaXNwYXRjaGVyOjpDYWxsYmFja0Jhc2UoV1RGTW92ZShiYWNrZW5kRGlzcGF0
Y2hlciksIGlkKSB7IH0KIAotdm9pZCAke2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyOjoke2NhbGxiYWNrTmFtZX06OnNlbmRTdWNjZXNzKCR7Zm9ybWFsUGFyYW1ldGVyc30pCit2
b2lkICR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OiR7Y2FsbGJhY2tOYW1l
fTo6c2VuZFN1Y2Nlc3MoJHtjYWxsYmFja1BhcmFtZXRlcnN9KQogewotICAgIFJlZjxKU09OOjpP
YmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSR7b3V0UGFyYW1l
dGVyQXNzaWdubWVudHN9Ci0gICAgQ2FsbGJhY2tCYXNlOjpzZW5kU3VjY2VzcyhXVEZNb3ZlKGpz
b25NZXNzYWdlKSk7CisgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVj
dDo6Y3JlYXRlKCk7Ciske3JldHVybkFzc2lnbm1lbnRzfQorICAgIENhbGxiYWNrQmFzZTo6c2Vu
ZFN1Y2Nlc3MoV1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSkpOwogfSIiIikKIAogICAgIEZy
b250ZW5kRGlzcGF0Y2hlckRvbWFpbkRpc3BhdGNoZXJEZWNsYXJhdGlvbiA9ICgKQEAgLTI0Niwx
MyArMjQ0LDExIEBAICR7Y29uc3RydWN0b3JFeGFtcGxlfQogICAgIH0iIiIpCiAKICAgICBQcm90
b2NvbE9iamVjdFJ1bnRpbWVDYXN0ID0gKAotIiIiUmVmUHRyPCR7b2JqZWN0VHlwZX0+IEJpbmRp
bmdUcmFpdHM8JHtvYmplY3RUeXBlfT46OnJ1bnRpbWVDYXN0KFJlZlB0cjxKU09OOjpWYWx1ZT4m
JiB2YWx1ZSkKKyIiIlJlZjwke29iamVjdFR5cGV9PiBCaW5kaW5nVHJhaXRzPCR7b2JqZWN0VHlw
ZX0+OjpydW50aW1lQ2FzdChSZWY8SlNPTjo6VmFsdWU+JiYgdmFsdWUpCiB7Ci0gICAgUmVmUHRy
PEpTT046Ok9iamVjdD4gcmVzdWx0OwotICAgIGJvb2wgY2FzdFN1Y2NlZWRlZCA9IHZhbHVlLT5h
c09iamVjdChyZXN1bHQpOwotICAgIEFTU0VSVF9VTlVTRUQoY2FzdFN1Y2NlZWRlZCwgY2FzdFN1
Y2NlZWRlZCk7CisgICAgYXV0byByZXN1bHQgPSB2YWx1ZS0+YXNPYmplY3QoKTsKICAgICBCaW5k
aW5nVHJhaXRzPCR7b2JqZWN0VHlwZX0+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShyZXN1
bHQuZ2V0KCkpOwogICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZigke29iamVjdFR5cGV9KSA9PSBz
aXplb2YoSlNPTjo6T2JqZWN0QmFzZSksIHR5cGVfY2FzdF9wcm9ibGVtKTsKLSAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8JHtvYmplY3RUeXBlfSo+KHN0YXRpY19jYXN0PEpTT046Ok9iamVjdEJhc2Uq
PihyZXN1bHQuZ2V0KCkpKTsKKyAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PCR7b2Jq
ZWN0VHlwZX0+KHN0YXRpY19yZWZlcmVuY2VfY2FzdDxKU09OOjpPYmplY3RCYXNlPihyZXN1bHQu
cmVsZWFzZU5vbk51bGwoKSkpOwogfQogIiIiKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2FsdGVybmF0ZV9i
YWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2FsdGVybmF0ZV9iYWNrZW5kX2Rpc3Bh
dGNoZXJfaGVhZGVyLnB5CmluZGV4IGUxYTY2MWJhMzc5Y2RlYTQwNjRjNmY3N2M0ZWZjYjExNjJh
Y2VmYzAuLmI5YzY2MTc0OTIyNDRkMDBlMGE3NDVkNzk0YmFiNjcxMDJlNzQ0YzUgMTAwNzU1Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVy
YXRlX2NwcF9hbHRlcm5hdGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weQorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBf
YWx0ZXJuYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkKQEAgLTMzLDkgKzMzLDExIEBA
IGZyb20gc3RyaW5nIGltcG9ydCBUZW1wbGF0ZQogdHJ5OgogICAgIGZyb20gLmNwcF9nZW5lcmF0
b3IgaW1wb3J0IENwcEdlbmVyYXRvcgogICAgIGZyb20gLmNwcF9nZW5lcmF0b3JfdGVtcGxhdGVz
IGltcG9ydCBDcHBHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgQ3BwVGVtcGxhdGVzCisgICAgZnJvbSAu
bW9kZWxzIGltcG9ydCBFbnVtVHlwZSwgQWxpYXNlZFR5cGUKIGV4Y2VwdCBWYWx1ZUVycm9yOgog
ICAgIGZyb20gY3BwX2dlbmVyYXRvciBpbXBvcnQgQ3BwR2VuZXJhdG9yCiAgICAgZnJvbSBjcHBf
Z2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgQ3BwR2VuZXJhdG9yVGVtcGxhdGVzIGFzIENwcFRl
bXBsYXRlcworICAgIGZyb20gbW9kZWxzIGltcG9ydCBFbnVtVHlwZSwgQWxpYXNlZFR5cGUKIAog
bG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2JhbCcpCiAKQEAgLTY1LDcgKzY3LDcgQEAgY2xh
c3MgQ3BwQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IoQ3BwR2VuZXJh
dG9yKToKICAgICBkZWYgX2dlbmVyYXRlX3NlY29uZGFyeV9oZWFkZXJfaW5jbHVkZXMoc2VsZik6
CiAgICAgICAgIHRhcmdldF9mcmFtZXdvcmtfbmFtZSA9IHNlbGYubW9kZWwoKS5mcmFtZXdvcmsu
bmFtZQogICAgICAgICBoZWFkZXJfaW5jbHVkZXMgPSBbCi0gICAgICAgICAgICAoW3RhcmdldF9m
cmFtZXdvcmtfbmFtZV0sICh0YXJnZXRfZnJhbWV3b3JrX25hbWUsICIlc1Byb3RvY29sVHlwZXMu
aCIgJSBzZWxmLnByb3RvY29sX25hbWUoKSkpLAorICAgICAgICAgICAgKFt0YXJnZXRfZnJhbWV3
b3JrX25hbWVdLCAodGFyZ2V0X2ZyYW1ld29ya19uYW1lLCAiJXNQcm90b2NvbE9iamVjdHMuaCIg
JSBzZWxmLnByb3RvY29sX25hbWUoKSkpLAogICAgICAgICAgICAgKFsiSmF2YVNjcmlwdENvcmUi
XSwgKCJKYXZhU2NyaXB0Q29yZSIsICJpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIu
aCIpKSwKICAgICAgICAgICAgIChbIkphdmFTY3JpcHRDb3JlIl0sICgiSmF2YVNjcmlwdENvcmUi
LCAiaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmgiKSksCiAgICAgICAgIF0K
QEAgLTkxLDkgKzkzLDE5IEBAIGNsYXNzIENwcEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVySGVh
ZGVyR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAKICAgICBkZWYgX2dlbmVyYXRlX2hhbmRsZXJf
ZGVjbGFyYXRpb25fZm9yX2NvbW1hbmQoc2VsZiwgY29tbWFuZCk6CiAgICAgICAgIGxpbmVzID0g
W10KLSAgICAgICAgcGFyYW1ldGVycyA9IFsnbG9uZyBjYWxsSWQnXQotICAgICAgICBmb3IgX3Bh
cmFtZXRlciBpbiBjb21tYW5kLmNhbGxfcGFyYW1ldGVyczoKLSAgICAgICAgICAgIHBhcmFtZXRl
cnMuYXBwZW5kKCclcyBpbl8lcycgJSAoQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl91bmNoZWNr
ZWRfZm9ybWFsX2luX3BhcmFtZXRlcihfcGFyYW1ldGVyKSwgX3BhcmFtZXRlci5wYXJhbWV0ZXJf
bmFtZSkpCisgICAgICAgIHBhcmFtZXRlcnMgPSBbJ2xvbmcgcHJvdG9jb2xfY2FsbElkJ10KKyAg
ICAgICAgZm9yIHBhcmFtZXRlciBpbiBjb21tYW5kLmNhbGxfcGFyYW1ldGVyczoKKyAgICAgICAg
ICAgIHBhcmFtZXRlcl90eXBlID0gcGFyYW1ldGVyLnR5cGUKKyAgICAgICAgICAgIGlmIGlzaW5z
dGFuY2UocGFyYW1ldGVyX3R5cGUsIEFsaWFzZWRUeXBlKToKKyAgICAgICAgICAgICAgICBwYXJh
bWV0ZXJfdHlwZSA9IHBhcmFtZXRlcl90eXBlLmFsaWFzZWRfdHlwZQorICAgICAgICAgICAgaWYg
aXNpbnN0YW5jZShwYXJhbWV0ZXJfdHlwZSwgRW51bVR5cGUpOgorICAgICAgICAgICAgICAgIHBh
cmFtZXRlcl90eXBlID0gcGFyYW1ldGVyX3R5cGUucHJpbWl0aXZlX3R5cGUKKworICAgICAgICAg
ICAgcGFyYW1ldGVyX25hbWUgPSBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUKKyAgICAgICAgICAg
IGlmIHBhcmFtZXRlci5pc19vcHRpb25hbDoKKyAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfbmFt
ZSA9ICdvcHRfJyArIHBhcmFtZXRlcl9uYW1lCisKKyAgICAgICAgICAgIHBhcmFtZXRlcnMuYXBw
ZW5kKCclcyAlcycgJSAoQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl9jb21tYW5kX3BhcmFtZXRl
cihwYXJhbWV0ZXJfdHlwZSwgcGFyYW1ldGVyLmlzX29wdGlvbmFsKSwgcGFyYW1ldGVyX25hbWUp
KQogCiAgICAgICAgIGNvbW1hbmRfYXJncyA9IHsKICAgICAgICAgICAgICdjb21tYW5kTmFtZSc6
IGNvbW1hbmQuY29tbWFuZF9uYW1lLApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hl
cl9oZWFkZXIucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29k
ZWdlbi9nZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weQppbmRleCAxMGQ4
ZjE0YmQ1ZmViZWI4YTFiMDZiMDE3Njc1YTE0M2E4ZDRmNzM4Li42ZDlkZDJhNDhkYzM0NjkyMDcx
YzFkYmMxYjhiM2I0ZTdjNzNhOTE1IDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRjaGVy
X2hlYWRlci5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Y29kZWdlbi9nZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weQpAQCAtNTUs
MTAgKzU1LDkgQEAgY2xhc3MgQ3BwQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IoQ3Bw
R2VuZXJhdG9yKToKICAgICAgICAgcmV0dXJuIFtkb21haW4gZm9yIGRvbWFpbiBpbiBHZW5lcmF0
b3IuZG9tYWluc190b19nZW5lcmF0ZShzZWxmKSBpZiBsZW4oc2VsZi5jb21tYW5kc19mb3JfZG9t
YWluKGRvbWFpbikpID4gMF0KIAogICAgIGRlZiBnZW5lcmF0ZV9vdXRwdXQoc2VsZik6Ci0gICAg
ICAgIHR5cGVkZWZzID0gWygnU3RyaW5nJywgJ0Vycm9yU3RyaW5nJyldCiAgICAgICAgIGhlYWRl
cl9hcmdzID0gewogICAgICAgICAgICAgJ2luY2x1ZGVzJzogc2VsZi5fZ2VuZXJhdGVfc2Vjb25k
YXJ5X2hlYWRlcl9pbmNsdWRlcygpLAotICAgICAgICAgICAgJ3R5cGVkZWZzJzogJ1xuJy5qb2lu
KFsndHlwZWRlZiAlcyAlczsnICUgdHlwZWRlZiBmb3IgdHlwZWRlZiBpbiB0eXBlZGVmc10pLAor
ICAgICAgICAgICAgJ3R5cGVkZWZzJzogJycsCiAgICAgICAgIH0KIAogICAgICAgICBkb21haW5z
ID0gc2VsZi5kb21haW5zX3RvX2dlbmVyYXRlKCkKQEAgLTc5LDkgKzc4LDExIEBAIGNsYXNzIENw
cEJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAg
IGhlYWRlcl9pbmNsdWRlcyA9IFsKICAgICAgICAgICAgIChbIkphdmFTY3JpcHRDb3JlIiwgIldl
YktpdCJdLCAoc2VsZi5tb2RlbCgpLmZyYW1ld29yay5uYW1lLCAiJXNQcm90b2NvbE9iamVjdHMu
aCIgJSBzZWxmLnByb3RvY29sX25hbWUoKSkpLAogICAgICAgICAgICAgKFsiSmF2YVNjcmlwdENv
cmUiLCAiV2ViS2l0Il0sICgiSmF2YVNjcmlwdENvcmUiLCAiaW5zcGVjdG9yL0luc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyLmgiKSksCi0gICAgICAgICAgICAoWyJKYXZhU2NyaXB0Q29yZSIsICJX
ZWJLaXQiXSwgKCJXVEYiLCAid3RmL3RleHQvV1RGU3RyaW5nLmgiKSkKKyAgICAgICAgICAgIChb
IkphdmFTY3JpcHRDb3JlIiwgIldlYktpdCJdLCAoIldURiIsICJ3dGYvRXhwZWN0ZWQuaCIpKSwK
KyAgICAgICAgICAgIChbIkphdmFTY3JpcHRDb3JlIiwgIldlYktpdCJdLCAoIldURiIsICJ3dGYv
T3B0aW9uYWwuaCIpKSwKKyAgICAgICAgICAgIChbIkphdmFTY3JpcHRDb3JlIiwgIldlYktpdCJd
LCAoIldURiIsICJ3dGYvdGV4dC9XVEZTdHJpbmcuaCIpKSwKKyAgICAgICAgICAgIChbIkphdmFT
Y3JpcHRDb3JlIiwgIldlYktpdCJdLCAoInN0ZCIsICJ0dXBsZSIpKSwKICAgICAgICAgXQotCiAg
ICAgICAgIHJldHVybiAnXG4nLmpvaW4oc2VsZi5nZW5lcmF0ZV9pbmNsdWRlc19mcm9tX2VudHJp
ZXMoaGVhZGVyX2luY2x1ZGVzKSkKIAogICAgIGRlZiBfZ2VuZXJhdGVfYWx0ZXJuYXRlX2hhbmRs
ZXJfZm9yd2FyZF9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbnMoc2VsZiwgZG9tYWlucyk6CkBAIC0x
MDEsMTEgKzEwMiw5IEBAIGNsYXNzIENwcEJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9y
KENwcEdlbmVyYXRvcik6CiAgICAgICAgIGlmIGV4cG9ydE1hY3JvIGlzIG5vdCBOb25lOgogICAg
ICAgICAgICAgY2xhc3NDb21wb25lbnRzLmFwcGVuZChleHBvcnRNYWNybykKIAotICAgICAgICB1
c2VkX2VudW1fbmFtZXMgPSBzZXQoKQotCiAgICAgICAgIGNvbW1hbmRfZGVjbGFyYXRpb25zID0g
W10KICAgICAgICAgZm9yIGNvbW1hbmQgaW4gc2VsZi5jb21tYW5kc19mb3JfZG9tYWluKGRvbWFp
bik6Ci0gICAgICAgICAgICBjb21tYW5kX2RlY2xhcmF0aW9ucy5hcHBlbmQoc2VsZi5fZ2VuZXJh
dGVfaGFuZGxlcl9kZWNsYXJhdGlvbl9mb3JfY29tbWFuZChjb21tYW5kLCB1c2VkX2VudW1fbmFt
ZXMpKQorICAgICAgICAgICAgY29tbWFuZF9kZWNsYXJhdGlvbnMuYXBwZW5kKHNlbGYuX2dlbmVy
YXRlX2hhbmRsZXJfZGVjbGFyYXRpb25fZm9yX2NvbW1hbmQoY29tbWFuZCkpCiAKICAgICAgICAg
aGFuZGxlcl9hcmdzID0gewogICAgICAgICAgICAgJ2NsYXNzQW5kRXhwb3J0TWFjcm8nOiAiICIu
am9pbihjbGFzc0NvbXBvbmVudHMpLApAQCAtMTE1LDY5ICsxMTQsNTYgQEAgY2xhc3MgQ3BwQmFj
a2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKIAogICAgICAgICBy
ZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihkb21haW4uY29uZGl0aW9u
LCBUZW1wbGF0ZShDcHBUZW1wbGF0ZXMuQmFja2VuZERpc3BhdGNoZXJIZWFkZXJEb21haW5IYW5k
bGVyRGVjbGFyYXRpb24pLnN1YnN0aXR1dGUoTm9uZSwgKipoYW5kbGVyX2FyZ3MpKQogCi0gICAg
ZGVmIF9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9mb3JfcGFyYW1ldGVyKHNlbGYsIHBhcmFtZXRl
ciwgY29tbWFuZCk6Ci0gICAgICAgIGVudW1fYXJncyA9IHsKLSAgICAgICAgICAgICdwYXJhbWV0
ZXJOYW1lJzogcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lLAotICAgICAgICAgICAgJ2NvbW1hbmRO
YW1lJzogY29tbWFuZC5jb21tYW5kX25hbWUKLSAgICAgICAgfQotCi0gICAgICAgIGxpbmVzID0g
W10KLSAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgLy8gTmFtZWQgYWZ0ZXIgcGFyYW1ldGVyIFwn
JShwYXJhbWV0ZXJOYW1lKXNcJyB3aGlsZSBnZW5lcmF0aW5nIGNvbW1hbmQvZXZlbnQgJShjb21t
YW5kTmFtZSlzLicgJSBlbnVtX2FyZ3MpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGVudW0g
Y2xhc3MgJXMgeycgJSB1Y2ZpcnN0KHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkpCi0gICAgICAg
IGZvciBlbnVtX3ZhbHVlIGluIHBhcmFtZXRlci50eXBlLmVudW1fdmFsdWVzKCk6Ci0gICAgICAg
ICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgJXMgPSAlZCwnICUgKEdlbmVyYXRvci5zdHlsaXpl
ZF9uYW1lX2Zvcl9lbnVtX3ZhbHVlKGVudW1fdmFsdWUpLCBzZWxmLmVuY29kaW5nX2Zvcl9lbnVt
X3ZhbHVlKGVudW1fdmFsdWUpKSkKLSAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgfTsgLy8gZW51
bSBjbGFzcyAlcycgJSB1Y2ZpcnN0KHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkpCi0gICAgICAg
IHJldHVybiAnXG4nLmpvaW4obGluZXMpCi0KLSAgICBkZWYgX2dlbmVyYXRlX2hhbmRsZXJfZGVj
bGFyYXRpb25fZm9yX2NvbW1hbmQoc2VsZiwgY29tbWFuZCwgdXNlZF9lbnVtX25hbWVzKToKKyAg
ICBkZWYgX2dlbmVyYXRlX2hhbmRsZXJfZGVjbGFyYXRpb25fZm9yX2NvbW1hbmQoc2VsZiwgY29t
bWFuZCk6CiAgICAgICAgIGlmIGNvbW1hbmQuaXNfYXN5bmM6CiAgICAgICAgICAgICByZXR1cm4g
c2VsZi5fZ2VuZXJhdGVfYXN5bmNfaGFuZGxlcl9kZWNsYXJhdGlvbl9mb3JfY29tbWFuZChjb21t
YW5kKQogCiAgICAgICAgIGxpbmVzID0gW10KLSAgICAgICAgcGFyYW1ldGVycyA9IFsnRXJyb3JT
dHJpbmcmJ10KLSAgICAgICAgZm9yIF9wYXJhbWV0ZXIgaW4gY29tbWFuZC5jYWxsX3BhcmFtZXRl
cnM6Ci0gICAgICAgICAgICBwYXJhbWV0ZXJfbmFtZSA9ICdpbl8nICsgX3BhcmFtZXRlci5wYXJh
bWV0ZXJfbmFtZQotICAgICAgICAgICAgaWYgX3BhcmFtZXRlci5pc19vcHRpb25hbDoKKworICAg
ICAgICBwYXJhbWV0ZXJzID0gW10KKyAgICAgICAgZm9yIHBhcmFtZXRlciBpbiBjb21tYW5kLmNh
bGxfcGFyYW1ldGVyczoKKyAgICAgICAgICAgIHBhcmFtZXRlcl9uYW1lID0gcGFyYW1ldGVyLnBh
cmFtZXRlcl9uYW1lCisgICAgICAgICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6CiAgICAg
ICAgICAgICAgICAgcGFyYW1ldGVyX25hbWUgPSAnb3B0XycgKyBwYXJhbWV0ZXJfbmFtZQorICAg
ICAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoIiVzICVzIiAlIChDcHBHZW5lcmF0b3IuY3BwX3R5
cGVfZm9yX2NvbW1hbmRfcGFyYW1ldGVyKHBhcmFtZXRlci50eXBlLCBwYXJhbWV0ZXIuaXNfb3B0
aW9uYWwpLCBwYXJhbWV0ZXJfbmFtZSkpCiAKLSAgICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5k
KCIlcyAlcyIgJSAoQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl91bmNoZWNrZWRfZm9ybWFsX2lu
X3BhcmFtZXRlcihfcGFyYW1ldGVyKSwgcGFyYW1ldGVyX25hbWUpKQotCi0gICAgICAgICAgICBp
ZiBpc2luc3RhbmNlKF9wYXJhbWV0ZXIudHlwZSwgRW51bVR5cGUpIGFuZCBfcGFyYW1ldGVyLnR5
cGUuaXNfYW5vbnltb3VzIGFuZCBfcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lIG5vdCBpbiB1c2Vk
X2VudW1fbmFtZXM6Ci0gICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRl
X2Fub255bW91c19lbnVtX2Zvcl9wYXJhbWV0ZXIoX3BhcmFtZXRlciwgY29tbWFuZCkpCi0gICAg
ICAgICAgICAgICAgdXNlZF9lbnVtX25hbWVzLmFkZChfcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1l
KQotCi0gICAgICAgIGZvciBfcGFyYW1ldGVyIGluIGNvbW1hbmQucmV0dXJuX3BhcmFtZXRlcnM6
Ci0gICAgICAgICAgICBwYXJhbWV0ZXJfbmFtZSA9ICdvdXRfJyArIF9wYXJhbWV0ZXIucGFyYW1l
dGVyX25hbWUKLSAgICAgICAgICAgIGlmIF9wYXJhbWV0ZXIuaXNfb3B0aW9uYWw6CisgICAgICAg
IHJldHVybnMgPSBbXQorICAgICAgICBmb3IgcGFyYW1ldGVyIGluIGNvbW1hbmQucmV0dXJuX3Bh
cmFtZXRlcnM6CisgICAgICAgICAgICBwYXJhbWV0ZXJfbmFtZSA9IHBhcmFtZXRlci5wYXJhbWV0
ZXJfbmFtZQorICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgogICAgICAgICAg
ICAgICAgIHBhcmFtZXRlcl9uYW1lID0gJ29wdF8nICsgcGFyYW1ldGVyX25hbWUKLSAgICAgICAg
ICAgIHBhcmFtZXRlcnMuYXBwZW5kKCIlcyAlcyIgJSAoQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zv
cl9mb3JtYWxfb3V0X3BhcmFtZXRlcihfcGFyYW1ldGVyKSwgcGFyYW1ldGVyX25hbWUpKQotCi0g
ICAgICAgICAgICBpZiBpc2luc3RhbmNlKF9wYXJhbWV0ZXIudHlwZSwgRW51bVR5cGUpIGFuZCBf
cGFyYW1ldGVyLnR5cGUuaXNfYW5vbnltb3VzIGFuZCBfcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1l
IG5vdCBpbiB1c2VkX2VudW1fbmFtZXM6Ci0gICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNl
bGYuX2dlbmVyYXRlX2Fub255bW91c19lbnVtX2Zvcl9wYXJhbWV0ZXIoX3BhcmFtZXRlciwgY29t
bWFuZCkpCi0gICAgICAgICAgICAgICAgdXNlZF9lbnVtX25hbWVzLmFkZChfcGFyYW1ldGVyLnBh
cmFtZXRlcl9uYW1lKQorICAgICAgICAgICAgcmV0dXJucy5hcHBlbmQoJyVzIC8qICVzICovJyAl
IChDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX2NvbW1hbmRfcmV0dXJuX2RlY2xhcmF0aW9uKHBh
cmFtZXRlci50eXBlLCBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwpLCBwYXJhbWV0ZXJfbmFtZSkpCiAK
ICAgICAgICAgY29tbWFuZF9hcmdzID0gewogICAgICAgICAgICAgJ2NvbW1hbmROYW1lJzogY29t
bWFuZC5jb21tYW5kX25hbWUsCi0gICAgICAgICAgICAncGFyYW1ldGVycyc6ICIsICIuam9pbihw
YXJhbWV0ZXJzKQorICAgICAgICAgICAgJ3BhcmFtZXRlcnMnOiAiLCAiLmpvaW4ocGFyYW1ldGVy
cyksCisgICAgICAgICAgICAncmV0dXJucyc6ICIsICIuam9pbihyZXR1cm5zKSwKICAgICAgICAg
fQotICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICB2aXJ0dWFsIHZvaWQgJShjb21tYW5kTmFtZSlz
KCUocGFyYW1ldGVycylzKSA9IDA7JyAlIGNvbW1hbmRfYXJncykKKyAgICAgICAgaWYgbGVuKHJl
dHVybnMpID09IDE6CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICB2aXJ0dWFsIFByb3Rv
Y29sOjpFcnJvclN0cmluZ09yPCUocmV0dXJucylzPiAlKGNvbW1hbmROYW1lKXMoJShwYXJhbWV0
ZXJzKXMpID0gMDsnICUgY29tbWFuZF9hcmdzKQorICAgICAgICBlbGlmIGxlbihyZXR1cm5zKSA+
IDE6CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICB2aXJ0dWFsIFByb3RvY29sOjpFcnJv
clN0cmluZ09yPHN0ZDo6dHVwbGU8JShyZXR1cm5zKXM+PiAlKGNvbW1hbmROYW1lKXMoJShwYXJh
bWV0ZXJzKXMpID0gMDsnICUgY29tbWFuZF9hcmdzKQorICAgICAgICBlbHNlOgorICAgICAgICAg
ICAgbGluZXMuYXBwZW5kKCcgICAgdmlydHVhbCBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lk
PiAlKGNvbW1hbmROYW1lKXMoJShwYXJhbWV0ZXJzKXMpID0gMDsnICUgY29tbWFuZF9hcmdzKQog
ICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihjb21tYW5k
LmNvbmRpdGlvbiwgJ1xuJy5qb2luKGxpbmVzKSkKIAogICAgIGRlZiBfZ2VuZXJhdGVfYXN5bmNf
aGFuZGxlcl9kZWNsYXJhdGlvbl9mb3JfY29tbWFuZChzZWxmLCBjb21tYW5kKToKICAgICAgICAg
Y2FsbGJhY2tOYW1lID0gIiVzQ2FsbGJhY2siICUgdWNmaXJzdChjb21tYW5kLmNvbW1hbmRfbmFt
ZSkKIAotICAgICAgICBpbl9wYXJhbWV0ZXJzID0gW10KLSAgICAgICAgZm9yIF9wYXJhbWV0ZXIg
aW4gY29tbWFuZC5jYWxsX3BhcmFtZXRlcnM6Ci0gICAgICAgICAgICBwYXJhbWV0ZXJfbmFtZSA9
ICdpbl8nICsgX3BhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZQotICAgICAgICAgICAgaWYgX3BhcmFt
ZXRlci5pc19vcHRpb25hbDoKKyAgICAgICAgcGFyYW1ldGVycyA9IFtdCisgICAgICAgIGZvciBw
YXJhbWV0ZXIgaW4gY29tbWFuZC5jYWxsX3BhcmFtZXRlcnM6CisgICAgICAgICAgICBwYXJhbWV0
ZXJfbmFtZSA9IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZQorICAgICAgICAgICAgaWYgcGFyYW1l
dGVyLmlzX29wdGlvbmFsOgogICAgICAgICAgICAgICAgIHBhcmFtZXRlcl9uYW1lID0gJ29wdF8n
ICsgcGFyYW1ldGVyX25hbWUKKyAgICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKCIlcyAlcyIg
JSAoQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl9jb21tYW5kX3BhcmFtZXRlcihwYXJhbWV0ZXIu
dHlwZSwgcGFyYW1ldGVyLmlzX29wdGlvbmFsKSwgcGFyYW1ldGVyX25hbWUpKQorICAgICAgICBw
YXJhbWV0ZXJzLmFwcGVuZCgiUmVmPCVzPiYmIiAlIGNhbGxiYWNrTmFtZSkKIAotICAgICAgICAg
ICAgaW5fcGFyYW1ldGVycy5hcHBlbmQoIiVzICVzIiAlIChDcHBHZW5lcmF0b3IuY3BwX3R5cGVf
Zm9yX3VuY2hlY2tlZF9mb3JtYWxfaW5fcGFyYW1ldGVyKF9wYXJhbWV0ZXIpLCBwYXJhbWV0ZXJf
bmFtZSkpCi0gICAgICAgIGluX3BhcmFtZXRlcnMuYXBwZW5kKCJSZWY8JXM+JiYgY2FsbGJhY2si
ICUgY2FsbGJhY2tOYW1lKQotCi0gICAgICAgIG91dF9wYXJhbWV0ZXJzID0gW10KLSAgICAgICAg
Zm9yIF9wYXJhbWV0ZXIgaW4gY29tbWFuZC5yZXR1cm5fcGFyYW1ldGVyczoKLSAgICAgICAgICAg
IG91dF9wYXJhbWV0ZXJzLmFwcGVuZCgiJXMgJXMiICUgKENwcEdlbmVyYXRvci5jcHBfdHlwZV9m
b3JfZm9ybWFsX2FzeW5jX3BhcmFtZXRlcihfcGFyYW1ldGVyKSwgX3BhcmFtZXRlci5wYXJhbWV0
ZXJfbmFtZSkpCisgICAgICAgIHJldHVybnMgPSBbXQorICAgICAgICBmb3IgcGFyYW1ldGVyIGlu
IGNvbW1hbmQucmV0dXJuX3BhcmFtZXRlcnM6CisgICAgICAgICAgICBwYXJhbWV0ZXJfbmFtZSA9
IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZQorICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29w
dGlvbmFsOgorICAgICAgICAgICAgICAgIHBhcmFtZXRlcl9uYW1lID0gJ29wdF8nICsgcGFyYW1l
dGVyX25hbWUKKyAgICAgICAgICAgIHJldHVybnMuYXBwZW5kKCIlcyAlcyIgJSAoQ3BwR2VuZXJh
dG9yLmNwcF90eXBlX2Zvcl9jb21tYW5kX3JldHVybl9hcmd1bWVudChwYXJhbWV0ZXIudHlwZSwg
cGFyYW1ldGVyLmlzX29wdGlvbmFsKSwgcGFyYW1ldGVyX25hbWUpKQogCiAgICAgICAgIGNsYXNz
X2NvbXBvbmVudHMgPSBbJ2NsYXNzJ10KICAgICAgICAgZXhwb3J0X21hY3JvID0gc2VsZi5tb2Rl
bCgpLmZyYW1ld29yay5zZXR0aW5nKCdleHBvcnRfbWFjcm8nLCBOb25lKQpAQCAtMTg4LDggKzE3
NCw4IEBAIGNsYXNzIENwcEJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yKENwcEdlbmVy
YXRvcik6CiAgICAgICAgICAgICAnY2xhc3NBbmRFeHBvcnRNYWNybyc6ICcgJy5qb2luKGNsYXNz
X2NvbXBvbmVudHMpLAogICAgICAgICAgICAgJ2NhbGxiYWNrTmFtZSc6IGNhbGxiYWNrTmFtZSwK
ICAgICAgICAgICAgICdjb21tYW5kTmFtZSc6IGNvbW1hbmQuY29tbWFuZF9uYW1lLAotICAgICAg
ICAgICAgJ2luUGFyYW1ldGVycyc6ICIsICIuam9pbihpbl9wYXJhbWV0ZXJzKSwKLSAgICAgICAg
ICAgICdvdXRQYXJhbWV0ZXJzJzogIiwgIi5qb2luKG91dF9wYXJhbWV0ZXJzKSwKKyAgICAgICAg
ICAgICdwYXJhbWV0ZXJzJzogIiwgIi5qb2luKHBhcmFtZXRlcnMpLAorICAgICAgICAgICAgJ3Jl
dHVybnMnOiAiLCAiLmpvaW4ocmV0dXJucyksCiAgICAgICAgIH0KIAogICAgICAgICByZXR1cm4g
c2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihjb21tYW5kLmNvbmRpdGlvbiwgVGVt
cGxhdGUoQ3BwVGVtcGxhdGVzLkJhY2tlbmREaXNwYXRjaGVySGVhZGVyQXN5bmNDb21tYW5kRGVj
bGFyYXRpb24pLnN1YnN0aXR1dGUoTm9uZSwgKipjb21tYW5kX2FyZ3MpKQpAQCAtMjIzLDQgKzIw
OSw0IEBAIGNsYXNzIENwcEJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yKENwcEdlbmVy
YXRvcik6CiAgICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9u
KGRvbWFpbi5jb25kaXRpb24sIFRlbXBsYXRlKENwcFRlbXBsYXRlcy5CYWNrZW5kRGlzcGF0Y2hl
ckhlYWRlckRvbWFpbkRpc3BhdGNoZXJEZWNsYXJhdGlvbikuc3Vic3RpdHV0ZShOb25lLCAqKmhh
bmRsZXJfYXJncykpCiAKICAgICBkZWYgX2dlbmVyYXRlX2Rpc3BhdGNoZXJfZGVjbGFyYXRpb25f
Zm9yX2NvbW1hbmQoc2VsZiwgY29tbWFuZCk6Ci0gICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0
aF9ndWFyZF9mb3JfY29uZGl0aW9uKGNvbW1hbmQuY29uZGl0aW9uLCAiICAgIHZvaWQgJXMobG9u
ZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7IiAlIGNvbW1h
bmQuY29tbWFuZF9uYW1lKQorICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9y
X2NvbmRpdGlvbihjb21tYW5kLmNvbmRpdGlvbiwgIiAgICB2b2lkICVzKGxvbmcgcHJvdG9jbF9j
YWxsSWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfcGFyYW1ldGVycyk7IiAlIGNv
bW1hbmQuY29tbWFuZF9uYW1lKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9p
bXBsZW1lbnRhdGlvbi5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24u
cHkKaW5kZXggZGFmMTljOTUwZmIwN2FhYTJkOGIzMWEyZjQ5YzdjYWI1MDcwMmM2MC4uOGRmYjI5
NGFiOWQyNmU0ZTg1NWY1ZTEyOWRiODMxZTdmOTAxYWJkZSAxMDA3NTUKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2JhY2tl
bmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRj
aGVyX2ltcGxlbWVudGF0aW9uLnB5CkBAIC0zMywxMiArMzMsMTIgQEAgdHJ5OgogICAgIGZyb20g
LmNwcF9nZW5lcmF0b3IgaW1wb3J0IENwcEdlbmVyYXRvcgogICAgIGZyb20gLmNwcF9nZW5lcmF0
b3JfdGVtcGxhdGVzIGltcG9ydCBDcHBHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgQ3BwVGVtcGxhdGVz
CiAgICAgZnJvbSAuZ2VuZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IsIHVjZmlyc3QKLSAgICBmcm9t
IC5tb2RlbHMgaW1wb3J0IE9iamVjdFR5cGUsIEFycmF5VHlwZQorICAgIGZyb20gLm1vZGVscyBp
bXBvcnQgT2JqZWN0VHlwZSwgQXJyYXlUeXBlLCBBbGlhc2VkVHlwZSwgRW51bVR5cGUKIGV4Y2Vw
dCBWYWx1ZUVycm9yOgogICAgIGZyb20gY3BwX2dlbmVyYXRvciBpbXBvcnQgQ3BwR2VuZXJhdG9y
CiAgICAgZnJvbSBjcHBfZ2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgQ3BwR2VuZXJhdG9yVGVt
cGxhdGVzIGFzIENwcFRlbXBsYXRlcwogICAgIGZyb20gZ2VuZXJhdG9yIGltcG9ydCBHZW5lcmF0
b3IsIHVjZmlyc3QKLSAgICBmcm9tIG1vZGVscyBpbXBvcnQgT2JqZWN0VHlwZSwgQXJyYXlUeXBl
CisgICAgZnJvbSBtb2RlbHMgaW1wb3J0IE9iamVjdFR5cGUsIEFycmF5VHlwZSwgQWxpYXNlZFR5
cGUsIEVudW1UeXBlCiAKIGxvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQogCkBAIC04
MCwxMSArODAsOCBAQCBjbGFzcyBDcHBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2Vu
ZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgZGVmIF9nZW5lcmF0ZV9zZWNvbmRhcnlfaGVhZGVy
X2luY2x1ZGVzKHNlbGYpOgogICAgICAgICBoZWFkZXJfaW5jbHVkZXMgPSBbCiAgICAgICAgICAg
ICAoWyJKYXZhU2NyaXB0Q29yZSIsICJXZWJLaXQiXSwgKCJKYXZhU2NyaXB0Q29yZSIsICJpbnNw
ZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaCIpKSwKLSAgICAgICAgICAgIChbIkphdmFT
Y3JpcHRDb3JlIiwgIldlYktpdCJdLCAoIldURiIsICJ3dGYvSlNPTlZhbHVlcy5oIikpLAogICAg
ICAgICAgICAgKFsiSmF2YVNjcmlwdENvcmUiLCAiV2ViS2l0Il0sICgiV1RGIiwgInd0Zi9OZXZl
ckRlc3Ryb3llZC5oIikpLAotICAgICAgICAgICAgKFsiSmF2YVNjcmlwdENvcmUiLCAiV2ViS2l0
Il0sICgiV1RGIiwgInd0Zi90ZXh0L0NTdHJpbmcuaCIpKQogICAgICAgICBdCi0KICAgICAgICAg
cmV0dXJuIHNlbGYuZ2VuZXJhdGVfaW5jbHVkZXNfZnJvbV9lbnRyaWVzKGhlYWRlcl9pbmNsdWRl
cykKIAogCkBAIC0xMjMsOCArMTIwLDggQEAgY2xhc3MgQ3BwQmFja2VuZERpc3BhdGNoZXJJbXBs
ZW1lbnRhdGlvbkdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAgICBjYXNlcyA9IFtdCiAK
ICAgICAgICAgZmlyc3RfY29tbWFuZF9zdHJpbmcgPSAiXG4iLmpvaW4oWwotICAgICAgICAgICAg
JyAgICBpZiAobWV0aG9kID09ICIlcyIpIHsnICUgY29tbWFuZHNbMF0uY29tbWFuZF9uYW1lLAot
ICAgICAgICAgICAgJyAgICAgICAgJXMocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsn
ICUgY29tbWFuZHNbMF0uY29tbWFuZF9uYW1lLAorICAgICAgICAgICAgJyAgICBpZiAocHJvdG9j
b2xfbWV0aG9kID09ICIlcyIpIHsnICUgY29tbWFuZHNbMF0uY29tbWFuZF9uYW1lLAorICAgICAg
ICAgICAgJyAgICAgICAgJXMocHJvdG9jb2xfY2FsbElkLCBXVEZNb3ZlKHByb3RvY29sX3BhcmFt
ZXRlcnMpKTsnICUgY29tbWFuZHNbMF0uY29tbWFuZF9uYW1lLAogICAgICAgICAgICAgJyAgICAg
ICAgcmV0dXJuOycsCiAgICAgICAgICAgICAnICAgIH0nLAogICAgICAgICBdKQpAQCAtMTMyLDgg
KzEyOSw4IEBAIGNsYXNzIENwcEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0
b3IoQ3BwR2VuZXJhdG9yKToKIAogICAgICAgICBmb3IgY29tbWFuZCBpbiBjb21tYW5kc1sxOl06
CiAgICAgICAgICAgICBhZGRpdGlvbmFsX2NvbW1hbmRfc3RyaW5nID0gIlxuIi5qb2luKFsKLSAg
ICAgICAgICAgICAgICAnICAgIGlmIChtZXRob2QgPT0gIiVzIikgeycgJSBjb21tYW5kLmNvbW1h
bmRfbmFtZSwKLSAgICAgICAgICAgICAgICAnICAgICAgICAlcyhyZXF1ZXN0SWQsIFdURk1vdmUo
cGFyYW1ldGVycykpOycgJSBjb21tYW5kLmNvbW1hbmRfbmFtZSwKKyAgICAgICAgICAgICAgICAn
ICAgIGlmIChwcm90b2NvbF9tZXRob2QgPT0gIiVzIikgeycgJSBjb21tYW5kLmNvbW1hbmRfbmFt
ZSwKKyAgICAgICAgICAgICAgICAnICAgICAgICAlcyhwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUo
cHJvdG9jb2xfcGFyYW1ldGVycykpOycgJSBjb21tYW5kLmNvbW1hbmRfbmFtZSwKICAgICAgICAg
ICAgICAgICAnICAgICAgICByZXR1cm47JywKICAgICAgICAgICAgICAgICAnICAgIH0nLAogICAg
ICAgICAgICAgXSkKQEAgLTE2NSwxNDYgKzE2MiwxMzYgQEAgY2xhc3MgQ3BwQmFja2VuZERpc3Bh
dGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAgICByZXR1
cm4gVGVtcGxhdGUoQ3BwVGVtcGxhdGVzLkJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25M
YXJnZVN3aXRjaCkuc3Vic3RpdHV0ZShOb25lLCAqKnN3aXRjaF9hcmdzKQogCiAgICAgZGVmIF9n
ZW5lcmF0ZV9hc3luY19kaXNwYXRjaGVyX2NsYXNzX2Zvcl9kb21haW4oc2VsZiwgY29tbWFuZCwg
ZG9tYWluKToKLSAgICAgICAgb3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cyA9IFtdCi0gICAgICAg
IGZvcm1hbF9wYXJhbWV0ZXJzID0gW10KKyAgICAgICAgcmV0dXJuX2Fzc2lnbm1lbnRzID0gW10K
KyAgICAgICAgY2FsbGJhY2tfcGFyYW1ldGVycyA9IFtdCiAKICAgICAgICAgZm9yIHBhcmFtZXRl
ciBpbiBjb21tYW5kLnJldHVybl9wYXJhbWV0ZXJzOgorICAgICAgICAgICAgcGFyYW1ldGVyX25h
bWUgPSBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUKKyAgICAgICAgICAgIGlmIHBhcmFtZXRlci5p
c19vcHRpb25hbDoKKyAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfbmFtZSA9ICdvcHRfJyArIHBh
cmFtZXRlcl9uYW1lCisKKyAgICAgICAgICAgIHBhcmFtZXRlcl92YWx1ZSA9IHBhcmFtZXRlcl9u
YW1lCisKKyAgICAgICAgICAgIF90eXBlID0gcGFyYW1ldGVyLnR5cGUKKyAgICAgICAgICAgIGlm
IGlzaW5zdGFuY2UoX3R5cGUsIEFsaWFzZWRUeXBlKToKKyAgICAgICAgICAgICAgICBfdHlwZSA9
IF90eXBlLmFsaWFzZWRfdHlwZQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgRW51
bVR5cGUpIGFuZCBfdHlwZS5pc19hbm9ueW1vdXM6CisgICAgICAgICAgICAgICAgX3R5cGUgPSBf
dHlwZS5wcmltaXRpdmVfdHlwZQorCisgICAgICAgICAgICBpZiBfdHlwZS5pc19lbnVtKCk6Cisg
ICAgICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAg
ICAgICBwYXJhbWV0ZXJfdmFsdWUgPSAnKicgKyBwYXJhbWV0ZXJfdmFsdWUKKyAgICAgICAgICAg
ICAgICBwYXJhbWV0ZXJfdmFsdWUgPSAnUHJvdG9jb2w6OiVzOjpnZXRFbnVtQ29uc3RhbnRWYWx1
ZSglcyknICUgKHNlbGYuaGVscGVyc19uYW1lc3BhY2UoKSwgcGFyYW1ldGVyX3ZhbHVlKQorICAg
ICAgICAgICAgZWxpZiBDcHBHZW5lcmF0b3Iuc2hvdWxkX3JlbGVhc2VfYXJndW1lbnQoX3R5cGUs
IHBhcmFtZXRlci5pc19vcHRpb25hbCk6CisgICAgICAgICAgICAgICAgcGFyYW1ldGVyX3ZhbHVl
ID0gcGFyYW1ldGVyX3ZhbHVlICsgJy5yZWxlYXNlTm9uTnVsbCgpJworICAgICAgICAgICAgZWxp
ZiBDcHBHZW5lcmF0b3Iuc2hvdWxkX2RlcmVmZXJlbmNlX2FyZ3VtZW50KF90eXBlLCBwYXJhbWV0
ZXIuaXNfb3B0aW9uYWwpOgorICAgICAgICAgICAgICAgIHBhcmFtZXRlcl92YWx1ZSA9ICcqJyAr
IHBhcmFtZXRlcl92YWx1ZQorICAgICAgICAgICAgZWxpZiBDcHBHZW5lcmF0b3Iuc2hvdWxkX21v
dmVfYXJndW1lbnQoX3R5cGUsIHBhcmFtZXRlci5pc19vcHRpb25hbCk6CisgICAgICAgICAgICAg
ICAgcGFyYW1ldGVyX3ZhbHVlID0gJ1dURk1vdmUoJXMpJyAlIHBhcmFtZXRlcl92YWx1ZQorCiAg
ICAgICAgICAgICBwYXJhbV9hcmdzID0gewotICAgICAgICAgICAgICAgICdrZXllZFNldE1ldGhv
ZCc6IENwcEdlbmVyYXRvci5jcHBfc2V0dGVyX21ldGhvZF9mb3JfdHlwZShwYXJhbWV0ZXIudHlw
ZSksCisgICAgICAgICAgICAgICAgJ2tleWVkU2V0TWV0aG9kJzogQ3BwR2VuZXJhdG9yLmNwcF9z
ZXR0ZXJfbWV0aG9kX2Zvcl90eXBlKF90eXBlKSwKICAgICAgICAgICAgICAgICAncGFyYW1ldGVy
S2V5JzogcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lLAotICAgICAgICAgICAgICAgICdwYXJhbWV0
ZXJOYW1lJzogcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lLAotICAgICAgICAgICAgICAgICdwYXJh
bWV0ZXJUeXBlJzogQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl9zdGFja19pbl9wYXJhbWV0ZXIo
cGFyYW1ldGVyKSwKLSAgICAgICAgICAgICAgICAnaGVscGVyc05hbWVzcGFjZSc6IHNlbGYuaGVs
cGVyc19uYW1lc3BhY2UoKSwKKyAgICAgICAgICAgICAgICAncGFyYW1ldGVyTmFtZSc6IHBhcmFt
ZXRlcl9uYW1lLAorICAgICAgICAgICAgICAgICdwYXJhbWV0ZXJWYWx1ZSc6IHBhcmFtZXRlcl92
YWx1ZSwKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgZm9ybWFsX3BhcmFtZXRlcnMuYXBw
ZW5kKCclcyAlcycgJSAoQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl9mb3JtYWxfYXN5bmNfcGFy
YW1ldGVyKHBhcmFtZXRlciksIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkpCisgICAgICAgICAg
ICBjYWxsYmFja19wYXJhbWV0ZXJzLmFwcGVuZCgnJXMgJXMnICUgKENwcEdlbmVyYXRvci5jcHBf
dHlwZV9mb3JfY29tbWFuZF9yZXR1cm5fYXJndW1lbnQoX3R5cGUsIHBhcmFtZXRlci5pc19vcHRp
b25hbCksIHBhcmFtZXRlcl9uYW1lKSkKIAogICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29w
dGlvbmFsOgotICAgICAgICAgICAgICAgIGlmIENwcEdlbmVyYXRvci5zaG91bGRfdXNlX3dyYXBw
ZXJfZm9yX3JldHVybl90eXBlKHBhcmFtZXRlci50eXBlKToKLSAgICAgICAgICAgICAgICAgICAg
b3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICBpZiAoJShwYXJhbWV0ZXJOYW1l
KXMuaGFzVmFsdWUoKSknICUgcGFyYW1fYXJncykKLSAgICAgICAgICAgICAgICAgICAgb3V0X3Bh
cmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICAgICAganNvbk1lc3NhZ2UtPiUoa2V5ZWRT
ZXRNZXRob2QpcygiJShwYXJhbWV0ZXJLZXkpcyJfcywgKiUocGFyYW1ldGVyTmFtZSlzKTsnICUg
cGFyYW1fYXJncykKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBv
dXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAgIGlmICglKHBhcmFtZXRlck5hbWUp
cyknICUgcGFyYW1fYXJncykKLSAgICAgICAgICAgICAgICAgICAgb3V0X3BhcmFtZXRlcl9hc3Np
Z25tZW50cy5hcHBlbmQoJyAgICAgICAganNvbk1lc3NhZ2UtPiUoa2V5ZWRTZXRNZXRob2Qpcygi
JShwYXJhbWV0ZXJLZXkpcyJfcywgJShwYXJhbWV0ZXJOYW1lKXMpOycgJSBwYXJhbV9hcmdzKQot
ICAgICAgICAgICAgZWxpZiBwYXJhbWV0ZXIudHlwZS5pc19lbnVtKCk6Ci0gICAgICAgICAgICAg
ICAgb3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICBqc29uTWVzc2FnZS0+JShr
ZXllZFNldE1ldGhvZClzKCIlKHBhcmFtZXRlcktleSlzIl9zLCBJbnNwZWN0b3I6OlByb3RvY29s
OjolKGhlbHBlcnNOYW1lc3BhY2Upczo6Z2V0RW51bUNvbnN0YW50VmFsdWUoJShwYXJhbWV0ZXJO
YW1lKXMpKTsnICUgcGFyYW1fYXJncykKKyAgICAgICAgICAgICAgICByZXR1cm5fYXNzaWdubWVu
dHMuYXBwZW5kKCcgICAgaWYgKCEhJShwYXJhbWV0ZXJOYW1lKXMpJyAlIHBhcmFtX2FyZ3MpCisg
ICAgICAgICAgICAgICAgcmV0dXJuX2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAgICAgICBwcm90b2Nv
bF9qc29uTWVzc2FnZS0+JShrZXllZFNldE1ldGhvZClzKCIlKHBhcmFtZXRlcktleSlzIl9zLCAl
KHBhcmFtZXRlclZhbHVlKXMpOycgJSBwYXJhbV9hcmdzKQogICAgICAgICAgICAgZWxzZToKLSAg
ICAgICAgICAgICAgICBvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAgIGpzb25N
ZXNzYWdlLT4lKGtleWVkU2V0TWV0aG9kKXMoIiUocGFyYW1ldGVyS2V5KXMiX3MsICUocGFyYW1l
dGVyTmFtZSlzKTsnICUgcGFyYW1fYXJncykKKyAgICAgICAgICAgICAgICByZXR1cm5fYXNzaWdu
bWVudHMuYXBwZW5kKCcgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPiUoa2V5ZWRTZXRNZXRob2Qp
cygiJShwYXJhbWV0ZXJLZXkpcyJfcywgJShwYXJhbWV0ZXJWYWx1ZSlzKTsnICUgcGFyYW1fYXJn
cykKIAogICAgICAgICBhc3luY19hcmdzID0gewogICAgICAgICAgICAgJ2RvbWFpbk5hbWUnOiBk
b21haW4uZG9tYWluX25hbWUsCiAgICAgICAgICAgICAnY2FsbGJhY2tOYW1lJzogdWNmaXJzdChj
b21tYW5kLmNvbW1hbmRfbmFtZSkgKyAnQ2FsbGJhY2snLAotICAgICAgICAgICAgJ2Zvcm1hbFBh
cmFtZXRlcnMnOiAiLCAiLmpvaW4oZm9ybWFsX3BhcmFtZXRlcnMpLAotICAgICAgICAgICAgJ291
dFBhcmFtZXRlckFzc2lnbm1lbnRzJzogIlxuIi5qb2luKG91dF9wYXJhbWV0ZXJfYXNzaWdubWVu
dHMpCisgICAgICAgICAgICAnY2FsbGJhY2tQYXJhbWV0ZXJzJzogIiwgIi5qb2luKGNhbGxiYWNr
X3BhcmFtZXRlcnMpLAorICAgICAgICAgICAgJ3JldHVybkFzc2lnbm1lbnRzJzogIlxuIi5qb2lu
KHJldHVybl9hc3NpZ25tZW50cykKICAgICAgICAgfQogICAgICAgICByZXR1cm4gc2VsZi53cmFw
X3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihjb21tYW5kLmNvbmRpdGlvbiwgVGVtcGxhdGUoQ3Bw
VGVtcGxhdGVzLkJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25Bc3luY0NvbW1hbmQpLnN1
YnN0aXR1dGUoTm9uZSwgKiphc3luY19hcmdzKSkKIAogICAgIGRlZiBfZ2VuZXJhdGVfZGlzcGF0
Y2hlcl9pbXBsZW1lbnRhdGlvbl9mb3JfY29tbWFuZChzZWxmLCBjb21tYW5kLCBkb21haW4pOgot
ICAgICAgICBpbl9wYXJhbWV0ZXJfZGVjbGFyYXRpb25zID0gW10KLSAgICAgICAgb3V0X3BhcmFt
ZXRlcl9kZWNsYXJhdGlvbnMgPSBbXQotICAgICAgICBvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRz
ID0gW10KLSAgICAgICAgYWx0ZXJuYXRlX2Rpc3BhdGNoZXJfbWV0aG9kX3BhcmFtZXRlcnMgPSBb
J3JlcXVlc3RJZCddCisgICAgICAgIHBhcmFtZXRlcl9kZWNsYXJhdGlvbnMgPSBbXQorICAgICAg
ICBwYXJhbWV0ZXJfZW51bV9yZXNvbHV0aW9ucyA9IFtdCisgICAgICAgIGFsdGVybmF0ZV9kaXNw
YXRjaGVyX21ldGhvZF9wYXJhbWV0ZXJzID0gWydwcm90b2NvbF9jYWxsSWQnXQogICAgICAgICBt
ZXRob2RfcGFyYW1ldGVycyA9IFtdCi0gICAgICAgIGlmIG5vdCBjb21tYW5kLmlzX2FzeW5jOgot
ICAgICAgICAgICAgbWV0aG9kX3BhcmFtZXRlcnMuYXBwZW5kKCdlcnJvcicpCiAKICAgICAgICAg
Zm9yIHBhcmFtZXRlciBpbiBjb21tYW5kLmNhbGxfcGFyYW1ldGVyczoKLSAgICAgICAgICAgIHBh
cmFtZXRlcl9uYW1lID0gJ2luXycgKyBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUKKyAgICAgICAg
ICAgIHBhcmFtZXRlcl9uYW1lID0gcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lCiAgICAgICAgICAg
ICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6CiAgICAgICAgICAgICAgICAgcGFyYW1ldGVyX25h
bWUgPSAnb3B0XycgKyBwYXJhbWV0ZXJfbmFtZQorICAgICAgICAgICAgcGFyYW1ldGVyX25hbWUg
PSAnaW5fJyArIHBhcmFtZXRlcl9uYW1lCiAKLSAgICAgICAgICAgIG91dF9zdWNjZXNzX2FyZ3Vt
ZW50ID0gJ251bGxwdHInCi0gICAgICAgICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6Ci0g
ICAgICAgICAgICAgICAgb3V0X3N1Y2Nlc3NfYXJndW1lbnQgPSAnJiVzX3ZhbHVlRm91bmQnICUg
cGFyYW1ldGVyX25hbWUKLSAgICAgICAgICAgICAgICBpbl9wYXJhbWV0ZXJfZGVjbGFyYXRpb25z
LmFwcGVuZCgnICAgIGJvb2wgJXNfdmFsdWVGb3VuZCA9IGZhbHNlOycgJSBwYXJhbWV0ZXJfbmFt
ZSkKKyAgICAgICAgICAgIHZhcmlhYmxlX25hbWUgPSBwYXJhbWV0ZXJfbmFtZQogCi0gICAgICAg
ICAgICAjIE5vdyBhZGQgYXBwcm9wcmlhdGUgb3BlcmF0b3JzLgotICAgICAgICAgICAgcGFyYW1l
dGVyX2V4cHJlc3Npb24gPSBwYXJhbWV0ZXJfbmFtZQorICAgICAgICAgICAgX3R5cGUgPSBwYXJh
bWV0ZXIudHlwZQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgQWxpYXNlZFR5cGUp
OgorICAgICAgICAgICAgICAgIF90eXBlID0gX3R5cGUuYWxpYXNlZF90eXBlCisgICAgICAgICAg
ICBpZiBpc2luc3RhbmNlKF90eXBlLCBFbnVtVHlwZSkgYW5kIF90eXBlLmlzX2Fub255bW91czoK
KyAgICAgICAgICAgICAgICBfdHlwZSA9IF90eXBlLnByaW1pdGl2ZV90eXBlCiAKLSAgICAgICAg
ICAgIGlmIENwcEdlbmVyYXRvci5zaG91bGRfdXNlX3JlZmVyZW5jZXNfZm9yX3R5cGUocGFyYW1l
dGVyLnR5cGUpOgotICAgICAgICAgICAgICAgIGlmIHBhcmFtZXRlci5pc19vcHRpb25hbDoKLSAg
ICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyX2V4cHJlc3Npb24gPSAnJXMuZ2V0KCknICUgcGFy
YW1ldGVyX2V4cHJlc3Npb24KLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAg
ICAgICAjIFRoaXMgYXNzdW1lcyB0aGF0IHdlIGhhdmUgYWxyZWFkeSBwcm92ZWQgdGhlIG9iamVj
dCBpcyBub24tbnVsbC4KLSAgICAgICAgICAgICAgICAgICAgIyBJZiBhIHJlcXVpcmVkIHByb3Bl
cnR5IGlzIG1pc3NpbmcsIEluc3BlY3RvckJhY2tlbmQ6OmdldE9iamVjdCB3aWxsCi0gICAgICAg
ICAgICAgICAgICAgICMgYXBwZW5kIGEgcHJvdG9jb2wgZXJyb3IsIGFuZCB0aGUgbWV0aG9kIGRp
c3BhdGNoZXIgd2lsbCByZXR1cm4gd2l0aG91dAotICAgICAgICAgICAgICAgICAgICAjIGludm9r
aW5nIHRoZSBiYWNrZW5kIG1ldGhvZCAoYW5kIGRlcmVmZXJlbmNpbmcgdGhlIG9iamVjdCkuCi0g
ICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcl9leHByZXNzaW9uID0gJyolcycgJSBwYXJhbWV0
ZXJfZXhwcmVzc2lvbgotICAgICAgICAgICAgZWxpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6Ci0g
ICAgICAgICAgICAgICAgcGFyYW1ldGVyX2V4cHJlc3Npb24gPSAnJiVzJyAlIHBhcmFtZXRlcl9l
eHByZXNzaW9uCisgICAgICAgICAgICBpZiBfdHlwZS5pc19lbnVtKCk6CisgICAgICAgICAgICAg
ICAgcGFyYW1ldGVyX25hbWUgPSBwYXJhbWV0ZXJfbmFtZSArICdfanNvbicKIAotICAgICAgICAg
ICAgcGFyYW1fYXJncyA9IHsKLSAgICAgICAgICAgICAgICAncGFyYW1ldGVyVHlwZSc6IENwcEdl
bmVyYXRvci5jcHBfdHlwZV9mb3Jfc3RhY2tfaW5fcGFyYW1ldGVyKHBhcmFtZXRlciksCi0gICAg
ICAgICAgICAgICAgJ3BhcmFtZXRlcktleSc6IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwKLSAg
ICAgICAgICAgICAgICAncGFyYW1ldGVyTmFtZSc6IHBhcmFtZXRlcl9uYW1lLAotICAgICAgICAg
ICAgICAgICdwYXJhbWV0ZXJFeHByZXNzaW9uJzogcGFyYW1ldGVyX2V4cHJlc3Npb24sCi0gICAg
ICAgICAgICAgICAgJ2tleWVkR2V0TWV0aG9kJzogQ3BwR2VuZXJhdG9yLmNwcF9nZXR0ZXJfbWV0
aG9kX2Zvcl90eXBlKHBhcmFtZXRlci50eXBlKSwKLSAgICAgICAgICAgICAgICAnc3VjY2Vzc091
dFBhcmFtJzogb3V0X3N1Y2Nlc3NfYXJndW1lbnQKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBhbHRlcm5hdGVfZGlzcGF0Y2hlcl9tZXRob2RfcGFyYW1ldGVycy5hcHBlbmQocGFyYW1l
dGVyX25hbWUpCiAKLSAgICAgICAgICAgIGluX3BhcmFtZXRlcl9kZWNsYXJhdGlvbnMuYXBwZW5k
KCcgICAgJShwYXJhbWV0ZXJUeXBlKXMgJShwYXJhbWV0ZXJOYW1lKXMgPSBtX2JhY2tlbmREaXNw
YXRjaGVyLT4lKGtleWVkR2V0TWV0aG9kKXMocGFyYW1ldGVycy5nZXQoKSwgIiUocGFyYW1ldGVy
S2V5KXMiX3MsICUoc3VjY2Vzc091dFBhcmFtKXMpOycgJSBwYXJhbV9hcmdzKQotCi0gICAgICAg
ICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6Ci0gICAgICAgICAgICAgICAgb3B0aW9uYWxf
aW5fcGFyYW1ldGVyX3N0cmluZyA9ICclKHBhcmFtZXRlck5hbWUpc192YWx1ZUZvdW5kID8gJShw
YXJhbWV0ZXJFeHByZXNzaW9uKXMgOiBudWxscHRyJyAlIHBhcmFtX2FyZ3MKLSAgICAgICAgICAg
ICAgICBhbHRlcm5hdGVfZGlzcGF0Y2hlcl9tZXRob2RfcGFyYW1ldGVycy5hcHBlbmQob3B0aW9u
YWxfaW5fcGFyYW1ldGVyX3N0cmluZykKLSAgICAgICAgICAgICAgICBtZXRob2RfcGFyYW1ldGVy
cy5hcHBlbmQob3B0aW9uYWxfaW5fcGFyYW1ldGVyX3N0cmluZykKLSAgICAgICAgICAgIGVsc2U6
Ci0gICAgICAgICAgICAgICAgYWx0ZXJuYXRlX2Rpc3BhdGNoZXJfbWV0aG9kX3BhcmFtZXRlcnMu
YXBwZW5kKHBhcmFtZXRlcl9leHByZXNzaW9uKQotICAgICAgICAgICAgICAgIG1ldGhvZF9wYXJh
bWV0ZXJzLmFwcGVuZChwYXJhbWV0ZXJfZXhwcmVzc2lvbikKLQotICAgICAgICBpZiBjb21tYW5k
LmlzX2FzeW5jOgotICAgICAgICAgICAgYXN5bmNfYXJncyA9IHsKLSAgICAgICAgICAgICAgICAn
ZG9tYWluTmFtZSc6IGRvbWFpbi5kb21haW5fbmFtZSwKLSAgICAgICAgICAgICAgICAnY2FsbGJh
Y2tOYW1lJzogdWNmaXJzdChjb21tYW5kLmNvbW1hbmRfbmFtZSkgKyAnQ2FsbGJhY2snCi0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5k
KCcgICAgICAgIGNhbGxiYWNrLT5kaXNhYmxlKCk7JykKLSAgICAgICAgICAgIG91dF9wYXJhbWV0
ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9y
dFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7JykK
LSAgICAgICAgICAgIG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAgICAgIHJl
dHVybjsnKQotICAgICAgICAgICAgbWV0aG9kX3BhcmFtZXRlcnMuYXBwZW5kKCdjYWxsYmFjay5j
b3B5UmVmKCknKQotCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBmb3IgcGFyYW1ldGVyIGlu
IGNvbW1hbmQucmV0dXJuX3BhcmFtZXRlcnM6Ci0gICAgICAgICAgICAgICAgcGFyYW1fYXJncyA9
IHsKLSAgICAgICAgICAgICAgICAgICAgJ3BhcmFtZXRlclR5cGUnOiBDcHBHZW5lcmF0b3IuY3Bw
X3R5cGVfZm9yX3N0YWNrX291dF9wYXJhbWV0ZXIocGFyYW1ldGVyKSwKLSAgICAgICAgICAgICAg
ICAgICAgJ3BhcmFtZXRlcktleSc6IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwKLSAgICAgICAg
ICAgICAgICAgICAgJ3BhcmFtZXRlck5hbWUnOiBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUsCi0g
ICAgICAgICAgICAgICAgICAgICdrZXllZFNldE1ldGhvZCc6IENwcEdlbmVyYXRvci5jcHBfc2V0
dGVyX21ldGhvZF9mb3JfdHlwZShwYXJhbWV0ZXIudHlwZSksCisgICAgICAgICAgICAgICAgZW51
bV9hcmdzID0gewogICAgICAgICAgICAgICAgICAgICAnaGVscGVyc05hbWVzcGFjZSc6IHNlbGYu
aGVscGVyc19uYW1lc3BhY2UoKSwKKyAgICAgICAgICAgICAgICAgICAgJ3BhcmFtZXRlcktleSc6
IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgJ2VudW1UeXBl
JzogQ3BwR2VuZXJhdG9yLmNwcF9wcm90b2NvbF90eXBlX2Zvcl90eXBlKF90eXBlKSwKKyAgICAg
ICAgICAgICAgICAgICAgJ2VudW1WYXJpYWJsZU5hbWUnOiB2YXJpYWJsZV9uYW1lLAorICAgICAg
ICAgICAgICAgICAgICAnc3RyaW5nVmFyaWFibGVOYW1lJzogcGFyYW1ldGVyX25hbWUsCiAgICAg
ICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgb3V0X3BhcmFtZXRlcl9kZWNsYXJhdGlv
bnMuYXBwZW5kKCcgICAgJShwYXJhbWV0ZXJUeXBlKXMgb3V0XyUocGFyYW1ldGVyTmFtZSlzOycg
JSBwYXJhbV9hcmdzKQorICAgICAgICAgICAgICAgIGlmIGxlbihwYXJhbWV0ZXJfZW51bV9yZXNv
bHV0aW9ucyk6CisgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcl9lbnVtX3Jlc29sdXRpb25z
LmFwcGVuZCgnJykKKyAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfZW51bV9yZXNvbHV0aW9ucy5h
cHBlbmQoJyAgICBhdXRvICUoZW51bVZhcmlhYmxlTmFtZSlzID0gUHJvdG9jb2w6OiUoaGVscGVy
c05hbWVzcGFjZSlzOjpwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8JShlbnVtVHlwZSlzPiglKHN0
cmluZ1ZhcmlhYmxlTmFtZSlzKTsnICUgZW51bV9hcmdzKQogICAgICAgICAgICAgICAgIGlmIHBh
cmFtZXRlci5pc19vcHRpb25hbDoKLSAgICAgICAgICAgICAgICAgICAgaWYgQ3BwR2VuZXJhdG9y
LnNob3VsZF91c2Vfd3JhcHBlcl9mb3JfcmV0dXJuX3R5cGUocGFyYW1ldGVyLnR5cGUpOgotICAg
ICAgICAgICAgICAgICAgICAgICAgb3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAg
ICAgICAgaWYgKG91dF8lKHBhcmFtZXRlck5hbWUpcy5oYXNWYWx1ZSgpKScgJSBwYXJhbV9hcmdz
KQotICAgICAgICAgICAgICAgICAgICAgICAgb3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBl
bmQoJyAgICAgICAgICAgIHJlc3VsdC0+JShrZXllZFNldE1ldGhvZClzKCIlKHBhcmFtZXRlcktl
eSlzIl9zLCAqb3V0XyUocGFyYW1ldGVyTmFtZSlzKTsnICUgcGFyYW1fYXJncykKLSAgICAgICAg
ICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAgIG91dF9wYXJhbWV0ZXJf
YXNzaWdubWVudHMuYXBwZW5kKCcgICAgICAgIGlmIChvdXRfJShwYXJhbWV0ZXJOYW1lKXMpJyAl
IHBhcmFtX2FyZ3MpCi0gICAgICAgICAgICAgICAgICAgICAgICBvdXRfcGFyYW1ldGVyX2Fzc2ln
bm1lbnRzLmFwcGVuZCgnICAgICAgICAgICAgcmVzdWx0LT4lKGtleWVkU2V0TWV0aG9kKXMoIiUo
cGFyYW1ldGVyS2V5KXMiX3MsIG91dF8lKHBhcmFtZXRlck5hbWUpcyk7JyAlIHBhcmFtX2FyZ3Mp
Ci0gICAgICAgICAgICAgICAgZWxpZiBwYXJhbWV0ZXIudHlwZS5pc19lbnVtKCk6Ci0gICAgICAg
ICAgICAgICAgICAgIG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAgICAgIHJl
c3VsdC0+JShrZXllZFNldE1ldGhvZClzKCIlKHBhcmFtZXRlcktleSlzIl9zLCBJbnNwZWN0b3I6
OlByb3RvY29sOjolKGhlbHBlcnNOYW1lc3BhY2Upczo6Z2V0RW51bUNvbnN0YW50VmFsdWUob3V0
XyUocGFyYW1ldGVyTmFtZSlzKSk7JyAlIHBhcmFtX2FyZ3MpCisgICAgICAgICAgICAgICAgICAg
IHBhcmFtZXRlcl9leHByZXNzaW9uID0gJ1dURk1vdmUoJXMpJyAlIHZhcmlhYmxlX25hbWUKICAg
ICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBvdXRfcGFyYW1ldGVyX2Fz
c2lnbm1lbnRzLmFwcGVuZCgnICAgICAgICByZXN1bHQtPiUoa2V5ZWRTZXRNZXRob2QpcygiJShw
YXJhbWV0ZXJLZXkpcyJfcywgb3V0XyUocGFyYW1ldGVyTmFtZSlzKTsnICUgcGFyYW1fYXJncykK
KyAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyX2VudW1fcmVzb2x1dGlvbnMuYXBwZW5kKCcg
ICAgaWYgKCElKGVudW1WYXJpYWJsZU5hbWUpcykgeycgJSBlbnVtX2FyZ3MpCisgICAgICAgICAg
ICAgICAgICAgIHBhcmFtZXRlcl9lbnVtX3Jlc29sdXRpb25zLmFwcGVuZCgnICAgICAgICBtX2Jh
Y2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpT
ZXJ2ZXJFcnJvciwgbWFrZVN0cmluZygiVW5rbm93biAlKHBhcmFtZXRlcktleSlzOiAiX3MsICUo
c3RyaW5nVmFyaWFibGVOYW1lKXMpKTsnICUgZW51bV9hcmdzKQorICAgICAgICAgICAgICAgICAg
ICBwYXJhbWV0ZXJfZW51bV9yZXNvbHV0aW9ucy5hcHBlbmQoJyAgICAgICAgcmV0dXJuOycpCisg
ICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcl9lbnVtX3Jlc29sdXRpb25zLmFwcGVuZCgnICAg
IH0nKQorICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfZXhwcmVzc2lvbiA9ICcqJyArIHZh
cmlhYmxlX25hbWUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaWYgX3R5cGUu
cmF3X25hbWUoKSA9PSAnc3RyaW5nJzoKKyAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyX2V4
cHJlc3Npb24gPSB2YXJpYWJsZV9uYW1lCisgICAgICAgICAgICAgICAgZWxpZiBwYXJhbWV0ZXIu
aXNfb3B0aW9uYWw6CisgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcl9leHByZXNzaW9uID0g
J1dURk1vdmUoJXMpJyAlIHZhcmlhYmxlX25hbWUKKyAgICAgICAgICAgICAgICBlbGlmIF90eXBl
LnJhd19uYW1lKCkgaW4gWydib29sZWFuJywgJ2ludGVnZXInLCAnbnVtYmVyJ106CisgICAgICAg
ICAgICAgICAgICAgIHBhcmFtZXRlcl9leHByZXNzaW9uID0gJyonICsgdmFyaWFibGVfbmFtZQor
ICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcl9leHBy
ZXNzaW9uID0gdmFyaWFibGVfbmFtZSArICcucmVsZWFzZU5vbk51bGwoKScKKyAgICAgICAgICAg
ICAgICBhbHRlcm5hdGVfZGlzcGF0Y2hlcl9tZXRob2RfcGFyYW1ldGVycy5hcHBlbmQocGFyYW1l
dGVyX2V4cHJlc3Npb24pCisgICAgICAgICAgICBtZXRob2RfcGFyYW1ldGVycy5hcHBlbmQocGFy
YW1ldGVyX2V4cHJlc3Npb24pCiAKLSAgICAgICAgICAgICAgICBpZiBDcHBHZW5lcmF0b3Iuc2hv
dWxkX3Bhc3NfYnlfY29weV9mb3JfcmV0dXJuX3R5cGUocGFyYW1ldGVyLnR5cGUpIG9yIHBhcmFt
ZXRlci5pc19vcHRpb25hbCBhbmQgQ3BwR2VuZXJhdG9yLnNob3VsZF91c2Vfd3JhcHBlcl9mb3Jf
cmV0dXJuX3R5cGUocGFyYW1ldGVyLnR5cGUpOgotICAgICAgICAgICAgICAgICAgICBtZXRob2Rf
cGFyYW1ldGVycy5hcHBlbmQoJ291dF8nICsgcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKQotICAg
ICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIG1ldGhvZF9wYXJhbWV0ZXJz
LmFwcGVuZCgnJm91dF8nICsgcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKQorICAgICAgICAgICAg
cGFyYW1fYXJncyA9IHsKKyAgICAgICAgICAgICAgICAncGFyYW1ldGVyS2V5JzogcGFyYW1ldGVy
LnBhcmFtZXRlcl9uYW1lLAorICAgICAgICAgICAgICAgICdwYXJhbWV0ZXJOYW1lJzogcGFyYW1l
dGVyX25hbWUsCisgICAgICAgICAgICAgICAgJ2tleWVkR2V0TWV0aG9kJzogQ3BwR2VuZXJhdG9y
LmNwcF9nZXR0ZXJfbWV0aG9kX2Zvcl90eXBlKF90eXBlKSwKKyAgICAgICAgICAgICAgICAncmVx
dWlyZWQnOiAnZmFsc2UnIGlmIHBhcmFtZXRlci5pc19vcHRpb25hbCBlbHNlICd0cnVlJywKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIHBhcmFtZXRlcl9kZWNsYXJhdGlvbnMuYXBwZW5kKCcg
ICAgYXV0byAlKHBhcmFtZXRlck5hbWUpcyA9IG1fYmFja2VuZERpc3BhdGNoZXItPiUoa2V5ZWRH
ZXRNZXRob2Qpcyhwcm90b2NvbF9wYXJhbWV0ZXJzLmdldCgpLCAiJShwYXJhbWV0ZXJLZXkpcyJf
cywgJShyZXF1aXJlZClzKTsnICUgcGFyYW1fYXJncykKKworICAgICAgICBpZiBjb21tYW5kLmlz
X2FzeW5jOgorICAgICAgICAgICAgbWV0aG9kX3BhcmFtZXRlcnMuYXBwZW5kKCdhZG9wdFJlZigq
bmV3ICVzQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjolcyhtX2JhY2tlbmREaXNwYXRjaGVyLmNv
cHlSZWYoKSwgcHJvdG9jb2xfY2FsbElkKSknICUgKGRvbWFpbi5kb21haW5fbmFtZSwgJyVzQ2Fs
bGJhY2snICUgdWNmaXJzdChjb21tYW5kLmNvbW1hbmRfbmFtZSkpKQogCiAgICAgICAgIGNvbW1h
bmRfYXJncyA9IHsKICAgICAgICAgICAgICdkb21haW5OYW1lJzogZG9tYWluLmRvbWFpbl9uYW1l
LAotICAgICAgICAgICAgJ2NhbGxiYWNrTmFtZSc6ICclc0NhbGxiYWNrJyAlIHVjZmlyc3QoY29t
bWFuZC5jb21tYW5kX25hbWUpLAogICAgICAgICAgICAgJ2NvbW1hbmROYW1lJzogY29tbWFuZC5j
b21tYW5kX25hbWUsCi0gICAgICAgICAgICAnaW5QYXJhbWV0ZXJEZWNsYXJhdGlvbnMnOiAnXG4n
LmpvaW4oaW5fcGFyYW1ldGVyX2RlY2xhcmF0aW9ucyksCisgICAgICAgICAgICAncGFyYW1ldGVy
RGVjbGFyYXRpb25zJzogJ1xuJy5qb2luKHBhcmFtZXRlcl9kZWNsYXJhdGlvbnMpLAogICAgICAg
ICAgICAgJ2ludm9jYXRpb25QYXJhbWV0ZXJzJzogJywgJy5qb2luKG1ldGhvZF9wYXJhbWV0ZXJz
KSwKICAgICAgICAgICAgICdhbHRlcm5hdGVJbnZvY2F0aW9uUGFyYW1ldGVycyc6ICcsICcuam9p
bihhbHRlcm5hdGVfZGlzcGF0Y2hlcl9tZXRob2RfcGFyYW1ldGVycyksCiAgICAgICAgIH0KIAog
ICAgICAgICBsaW5lcyA9IFtdCiAgICAgICAgIGlmIGxlbihjb21tYW5kLmNhbGxfcGFyYW1ldGVy
cykgPT0gMDoKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgndm9pZCAlKGRvbWFpbk5hbWUpc0Jh
Y2tlbmREaXNwYXRjaGVyOjolKGNvbW1hbmROYW1lKXMobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxK
U09OOjpPYmplY3Q+JiYpJyAlIGNvbW1hbmRfYXJncykKKyAgICAgICAgICAgIGxpbmVzLmFwcGVu
ZCgndm9pZCAlKGRvbWFpbk5hbWUpc0JhY2tlbmREaXNwYXRjaGVyOjolKGNvbW1hbmROYW1lKXMo
bG9uZyBwcm90b2NvbF9jYWxsSWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpJyAlIGNvbW1hbmRf
YXJncykKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgndm9pZCAlKGRv
bWFpbk5hbWUpc0JhY2tlbmREaXNwYXRjaGVyOjolKGNvbW1hbmROYW1lKXMobG9uZyByZXF1ZXN0
SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyknICUgY29tbWFuZF9hcmdzKQor
ICAgICAgICAgICAgbGluZXMuYXBwZW5kKCd2b2lkICUoZG9tYWluTmFtZSlzQmFja2VuZERpc3Bh
dGNoZXI6OiUoY29tbWFuZE5hbWUpcyhsb25nIHByb3RvY29sX2NhbGxJZCwgUmVmUHRyPEpTT046
Ok9iamVjdD4mJiBwcm90b2NvbF9wYXJhbWV0ZXJzKScgJSBjb21tYW5kX2FyZ3MpCiAgICAgICAg
IGxpbmVzLmFwcGVuZCgneycpCiAKICAgICAgICAgaWYgbGVuKGNvbW1hbmQuY2FsbF9wYXJhbWV0
ZXJzKSA+IDA6CkBAIC0zMTksMzEgKzMwNiw3MSBAQCBjbGFzcyBDcHBCYWNrZW5kRGlzcGF0Y2hl
ckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAgICAgICBsaW5l
cy5hcHBlbmQoJyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVS
UyknKQogICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcnKQogCisgICAgICAgIGlmIGxlbihwYXJh
bWV0ZXJfZW51bV9yZXNvbHV0aW9ucyk6CisgICAgICAgICAgICBsaW5lcy5leHRlbmQocGFyYW1l
dGVyX2VudW1fcmVzb2x1dGlvbnMpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJycpCisKICAg
ICAgICAgaWYgY29tbWFuZC5pc19hc3luYzoKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAg
IFJlZjwlKGRvbWFpbk5hbWUpc0JhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6JShjYWxsYmFja05h
bWUpcz4gY2FsbGJhY2sgPSBhZG9wdFJlZigqbmV3ICUoZG9tYWluTmFtZSlzQmFja2VuZERpc3Bh
dGNoZXJIYW5kbGVyOjolKGNhbGxiYWNrTmFtZSlzKG1fYmFja2VuZERpc3BhdGNoZXIuY29weVJl
ZigpLCByZXF1ZXN0SWQpKTsnICUgY29tbWFuZF9hcmdzKQorICAgICAgICAgICAgbGluZXMuYXBw
ZW5kKCcgICAgbV9hZ2VudC0+JShjb21tYW5kTmFtZSlzKCUoaW52b2NhdGlvblBhcmFtZXRlcnMp
cyk7JyAlIGNvbW1hbmRfYXJncykKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGxpbmVzLmFw
cGVuZCgnICAgIEVycm9yU3RyaW5nIGVycm9yOycpCi0gICAgICAgICAgICBsaW5lcy5hcHBlbmQo
JyAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOycp
CisgICAgICAgICAgICByZXN1bHRfZXh0cmFjdGlvbl9uYW1lcyA9IFtdCisgICAgICAgICAgICBy
ZXN1bHRfY29udmVyc2lvbl9saW5lcyA9IFtdCisgICAgICAgICAgICBmb3IgcGFyYW1ldGVyIGlu
IGNvbW1hbmQucmV0dXJuX3BhcmFtZXRlcnM6CisgICAgICAgICAgICAgICAgcGFyYW1ldGVyX25h
bWUgPSBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUKKyAgICAgICAgICAgICAgICBpZiBwYXJhbWV0
ZXIuaXNfb3B0aW9uYWw6CisgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcl9uYW1lID0gJ29w
dF8nICsgcGFyYW1ldGVyX25hbWUKKyAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfbmFtZSA9ICdv
dXRfJyArIHBhcmFtZXRlcl9uYW1lCiAKLSAgICAgICAgaWYgbGVuKGNvbW1hbmQucmV0dXJuX3Bh
cmFtZXRlcnMpID4gMDoKLSAgICAgICAgICAgIGxpbmVzLmV4dGVuZChvdXRfcGFyYW1ldGVyX2Rl
Y2xhcmF0aW9ucykKLSAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgbV9hZ2VudC0+JShjb21tYW5k
TmFtZSlzKCUoaW52b2NhdGlvblBhcmFtZXRlcnMpcyk7JyAlIGNvbW1hbmRfYXJncykKLSAgICAg
ICAgbGluZXMuYXBwZW5kKCcnKQorICAgICAgICAgICAgICAgIHJlc3VsdF9leHRyYWN0aW9uX25h
bWVzLmFwcGVuZChwYXJhbWV0ZXJfbmFtZSkKIAotICAgICAgICBpZiBub3QgY29tbWFuZC5pc19h
c3luYzoKLSAgICAgICAgICAgIGlmIGxlbihjb21tYW5kLnJldHVybl9wYXJhbWV0ZXJzKSA+IDE6
Ci0gICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgaWYgKCFlcnJvci5sZW5ndGgoKSkg
eycpCi0gICAgICAgICAgICAgICAgbGluZXMuZXh0ZW5kKG91dF9wYXJhbWV0ZXJfYXNzaWdubWVu
dHMpCi0gICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgfScpCi0gICAgICAgICAgICBl
bGlmIGxlbihjb21tYW5kLnJldHVybl9wYXJhbWV0ZXJzKSA9PSAxOgotICAgICAgICAgICAgICAg
IGxpbmVzLmFwcGVuZCgnICAgIGlmICghZXJyb3IubGVuZ3RoKCkpJykKLSAgICAgICAgICAgICAg
ICBsaW5lcy5leHRlbmQob3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cykKKyAgICAgICAgICAgICAg
ICBwYXJhbWV0ZXJfdmFsdWUgPSBwYXJhbWV0ZXJfbmFtZQorCisgICAgICAgICAgICAgICAgX3R5
cGUgPSBwYXJhbWV0ZXIudHlwZQorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUs
IEFsaWFzZWRUeXBlKToKKyAgICAgICAgICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5hbGlhc2Vk
X3R5cGUKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBFbnVtVHlwZSkgYW5k
IF90eXBlLmlzX2Fub255bW91czoKKyAgICAgICAgICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5w
cmltaXRpdmVfdHlwZQorCisgICAgICAgICAgICAgICAgaWYgX3R5cGUuaXNfZW51bSgpOgorICAg
ICAgICAgICAgICAgICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6CisgICAgICAgICAgICAg
ICAgICAgICAgICBwYXJhbWV0ZXJfdmFsdWUgPSAnKicgKyBwYXJhbWV0ZXJfdmFsdWUKKyAgICAg
ICAgICAgICAgICAgICAgcGFyYW1ldGVyX3ZhbHVlID0gJ1Byb3RvY29sOjolczo6Z2V0RW51bUNv
bnN0YW50VmFsdWUoJXMpJyAlIChzZWxmLmhlbHBlcnNfbmFtZXNwYWNlKCksIHBhcmFtZXRlcl92
YWx1ZSkKKyAgICAgICAgICAgICAgICBlbGlmIENwcEdlbmVyYXRvci5zaG91bGRfcmVsZWFzZV9h
cmd1bWVudChfdHlwZSwgcGFyYW1ldGVyLmlzX29wdGlvbmFsKToKKyAgICAgICAgICAgICAgICAg
ICAgcGFyYW1ldGVyX3ZhbHVlID0gcGFyYW1ldGVyX3ZhbHVlICsgJy5yZWxlYXNlTm9uTnVsbCgp
JworICAgICAgICAgICAgICAgIGVsaWYgQ3BwR2VuZXJhdG9yLnNob3VsZF9kZXJlZmVyZW5jZV9h
cmd1bWVudChfdHlwZSwgcGFyYW1ldGVyLmlzX29wdGlvbmFsKToKKyAgICAgICAgICAgICAgICAg
ICAgcGFyYW1ldGVyX3ZhbHVlID0gJyonICsgcGFyYW1ldGVyX3ZhbHVlCisgICAgICAgICAgICAg
ICAgZWxpZiBDcHBHZW5lcmF0b3Iuc2hvdWxkX21vdmVfYXJndW1lbnQoX3R5cGUsIHBhcmFtZXRl
ci5pc19vcHRpb25hbCk6CisgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcl92YWx1ZSA9ICdX
VEZNb3ZlKCVzKScgJSBwYXJhbWV0ZXJfdmFsdWUKKworICAgICAgICAgICAgICAgIHBhcmFtX2Fy
Z3MgPSB7CisgICAgICAgICAgICAgICAgICAgICdrZXllZFNldE1ldGhvZCc6IENwcEdlbmVyYXRv
ci5jcHBfc2V0dGVyX21ldGhvZF9mb3JfdHlwZShfdHlwZSksCisgICAgICAgICAgICAgICAgICAg
ICdwYXJhbWV0ZXJLZXknOiBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUsCisgICAgICAgICAgICAg
ICAgICAgICdwYXJhbWV0ZXJOYW1lJzogcGFyYW1ldGVyX25hbWUsCisgICAgICAgICAgICAgICAg
ICAgICdwYXJhbWV0ZXJWYWx1ZSc6IHBhcmFtZXRlcl92YWx1ZSwKKyAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6CisgICAgICAgICAg
ICAgICAgICAgIHJlc3VsdF9jb252ZXJzaW9uX2xpbmVzLmFwcGVuZCgnICAgIGlmICghISUocGFy
YW1ldGVyTmFtZSlzKScgJSBwYXJhbV9hcmdzKQorICAgICAgICAgICAgICAgICAgICByZXN1bHRf
Y29udmVyc2lvbl9saW5lcy5hcHBlbmQoJyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPiUo
a2V5ZWRTZXRNZXRob2QpcygiJShwYXJhbWV0ZXJLZXkpcyJfcywgJShwYXJhbWV0ZXJWYWx1ZSlz
KTsnICUgcGFyYW1fYXJncykKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAg
ICAgICByZXN1bHRfY29udmVyc2lvbl9saW5lcy5hcHBlbmQoJyAgICBwcm90b2NvbF9qc29uTWVz
c2FnZS0+JShrZXllZFNldE1ldGhvZClzKCIlKHBhcmFtZXRlcktleSlzIl9zLCAlKHBhcmFtZXRl
clZhbHVlKXMpOycgJSBwYXJhbV9hcmdzKQorCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAg
ICBhdXRvIHJlc3VsdCA9IG1fYWdlbnQtPiUoY29tbWFuZE5hbWUpcyglKGludm9jYXRpb25QYXJh
bWV0ZXJzKXMpOycgJSBjb21tYW5kX2FyZ3MpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAg
ICBpZiAoIXJlc3VsdCkgeycpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgQVNT
RVJUKCFyZXN1bHQuZXJyb3IoKS5pc0VtcHR5KCkpOycpCisgICAgICAgICAgICBsaW5lcy5hcHBl
bmQoJyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNr
ZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIHJlc3VsdC5lcnJvcigpKTsnKQorICAgICAgICAg
ICAgbGluZXMuYXBwZW5kKCcgICAgICAgIHJldHVybjsnKQorICAgICAgICAgICAgbGluZXMuYXBw
ZW5kKCcgICAgfScpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJycpCisgICAgICAgICAgICBp
ZiBsZW4ocmVzdWx0X2V4dHJhY3Rpb25fbmFtZXMpID09IDE6CisgICAgICAgICAgICAgICAgbGlu
ZXMuYXBwZW5kKCcgICAgYXV0byAlcyA9IFdURk1vdmUocmVzdWx0LnZhbHVlKCkpOycgJSByZXN1
bHRfZXh0cmFjdGlvbl9uYW1lc1swXSkKICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJycp
Ci0KLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGlmICghZXJyb3IubGVuZ3RoKCkpJykK
LSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5z
ZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsnKQotICAgICAg
ICAgICAgbGluZXMuYXBwZW5kKCcgICAgZWxzZScpCi0gICAgICAgICAgICBsaW5lcy5hcHBlbmQo
JyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5k
RGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsnKQorICAgICAgICAgICAg
ZWxpZiBsZW4ocmVzdWx0X2V4dHJhY3Rpb25fbmFtZXMpID4gMToKKyAgICAgICAgICAgICAgICBs
aW5lcy5hcHBlbmQoJyAgICBhdXRvIFslc10gPSBXVEZNb3ZlKHJlc3VsdC52YWx1ZSgpKTsnICUg
IiwgIi5qb2luKHJlc3VsdF9leHRyYWN0aW9uX25hbWVzKSkKKyAgICAgICAgICAgICAgICBsaW5l
cy5hcHBlbmQoJycpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBhdXRvIHByb3RvY29s
X2pzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsnKQorICAgICAgICAgICAgbGlu
ZXMuZXh0ZW5kKHJlc3VsdF9jb252ZXJzaW9uX2xpbmVzKQorICAgICAgICAgICAgbGluZXMuYXBw
ZW5kKCcgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHByb3RvY29sX2NhbGxJ
ZCwgV1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSksIGZhbHNlKTsnKQogCiAgICAgICAgIGxp
bmVzLmFwcGVuZCgnfScpCiAgICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3Jf
Y29uZGl0aW9uKGNvbW1hbmQuY29uZGl0aW9uLCAiXG4iLmpvaW4obGluZXMpKQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJh
dGVfY3BwX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5IGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2Zyb250ZW5kX2Rpc3Bh
dGNoZXJfaGVhZGVyLnB5CmluZGV4IDExOWQyM2MzOGNkZjI0Y2Y1NmQwZmZjNjZkNTdiOGEzZDRl
MmRhNDQuLmJlYWExN2M5ODE1NGI3ZWUyMmUzYjViOTc2ZDAxODM5NDBhNDY5MTMgMTAwNzU1Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVy
YXRlX2NwcF9mcm9udGVuZF9kaXNwYXRjaGVyX2hlYWRlci5weQorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfZnJvbnRlbmRf
ZGlzcGF0Y2hlcl9oZWFkZXIucHkKQEAgLTczLDkgKzczLDkgQEAgY2xhc3MgQ3BwRnJvbnRlbmRE
aXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAgIGhlYWRlcl9p
bmNsdWRlcyA9IFsKICAgICAgICAgICAgIChbIkphdmFTY3JpcHRDb3JlIiwgIldlYktpdCJdLCAo
c2VsZi5tb2RlbCgpLmZyYW1ld29yay5uYW1lLCAiJXNQcm90b2NvbE9iamVjdHMuaCIgJSBzZWxm
LnByb3RvY29sX25hbWUoKSkpLAogICAgICAgICAgICAgKFsiSmF2YVNjcmlwdENvcmUiLCAiV2Vi
S2l0Il0sICgiV1RGIiwgInd0Zi9KU09OVmFsdWVzLmgiKSksCi0gICAgICAgICAgICAoWyJKYXZh
U2NyaXB0Q29yZSIsICJXZWJLaXQiXSwgKCJXVEYiLCAid3RmL3RleHQvV1RGU3RyaW5nLmgiKSkK
KyAgICAgICAgICAgIChbIkphdmFTY3JpcHRDb3JlIiwgIldlYktpdCJdLCAoIldURiIsICJ3dGYv
T3B0aW9uYWwuaCIpKSwKKyAgICAgICAgICAgIChbIkphdmFTY3JpcHRDb3JlIiwgIldlYktpdCJd
LCAoIldURiIsICJ3dGYvdGV4dC9XVEZTdHJpbmcuaCIpKSwKICAgICAgICAgXQotCiAgICAgICAg
IHJldHVybiAnXG4nLmpvaW4oc2VsZi5nZW5lcmF0ZV9pbmNsdWRlc19mcm9tX2VudHJpZXMoaGVh
ZGVyX2luY2x1ZGVzKSkKIAogICAgIGRlZiBfZ2VuZXJhdGVfYW5vbnltb3VzX2VudW1fZm9yX3Bh
cmFtZXRlcihzZWxmLCBwYXJhbWV0ZXIsIGV2ZW50KToKQEAgLTExNyw4ICsxMTcsMTMgQEAgY2xh
c3MgQ3BwRnJvbnRlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAg
ICAgICAgIGZvcm1hbF9wYXJhbWV0ZXJzID0gW10KICAgICAgICAgbGluZXMgPSBbXQogICAgICAg
ICBmb3IgcGFyYW1ldGVyIGluIGV2ZW50LmV2ZW50X3BhcmFtZXRlcnM6Ci0gICAgICAgICAgICBm
b3JtYWxfcGFyYW1ldGVycy5hcHBlbmQoJyVzICVzJyAlIChDcHBHZW5lcmF0b3IuY3BwX3R5cGVf
Zm9yX2NoZWNrZWRfZm9ybWFsX2V2ZW50X3BhcmFtZXRlcihwYXJhbWV0ZXIpLCBwYXJhbWV0ZXIu
cGFyYW1ldGVyX25hbWUpKQotICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShwYXJhbWV0ZXIudHlw
ZSwgRW51bVR5cGUpIGFuZCBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUgbm90IGluIHVzZWRfZW51
bV9uYW1lczoKKyAgICAgICAgICAgIHBhcmFtZXRlcl9uYW1lID0gcGFyYW1ldGVyLnBhcmFtZXRl
cl9uYW1lCisgICAgICAgICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6CisgICAgICAgICAg
ICAgICAgcGFyYW1ldGVyX25hbWUgPSAnb3B0XycgKyBwYXJhbWV0ZXJfbmFtZQorCisgICAgICAg
ICAgICBmb3JtYWxfcGFyYW1ldGVycy5hcHBlbmQoJyVzICVzJyAlIChDcHBHZW5lcmF0b3IuY3Bw
X3R5cGVfZm9yX2V2ZW50X3BhcmFtZXRlcihwYXJhbWV0ZXIudHlwZSwgcGFyYW1ldGVyLmlzX29w
dGlvbmFsKSwgcGFyYW1ldGVyX25hbWUpKQorCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHBh
cmFtZXRlci50eXBlLCBFbnVtVHlwZSkgYW5kIHBhcmFtZXRlci50eXBlLmlzX2Fub255bW91cyBh
bmQgcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lIG5vdCBpbiB1c2VkX2VudW1fbmFtZXM6CiAgICAg
ICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2Fub255bW91c19lbnVtX2Zv
cl9wYXJhbWV0ZXIocGFyYW1ldGVyLCBldmVudCkpCiAgICAgICAgICAgICAgICAgdXNlZF9lbnVt
X25hbWVzLmFkZChwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpCiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9m
cm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5IGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2Zyb250ZW5kX2Rpc3Bh
dGNoZXJfaW1wbGVtZW50YXRpb24ucHkKaW5kZXggNjZkYzZlMTg1Y2ZlMmI2MWIxZWNhNzc1NzNj
ZTE2NzRlNmIzNWE0OS4uNzYzZTAxZGZiNzhjZGVjOGQ2MDMwZDJlZGMzNTA1NDg5MTc2OTgwYyAx
MDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVn
ZW4vZ2VuZXJhdGVfY3BwX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJh
dGVfY3BwX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkKQEAgLTMzLDEyICsz
MywxMiBAQCB0cnk6CiAgICAgZnJvbSAuY3BwX2dlbmVyYXRvciBpbXBvcnQgQ3BwR2VuZXJhdG9y
CiAgICAgZnJvbSAuY3BwX2dlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IENwcEdlbmVyYXRvclRl
bXBsYXRlcyBhcyBDcHBUZW1wbGF0ZXMKICAgICBmcm9tIC5nZW5lcmF0b3IgaW1wb3J0IEdlbmVy
YXRvciwgdWNmaXJzdAotICAgIGZyb20gLm1vZGVscyBpbXBvcnQgT2JqZWN0VHlwZSwgQXJyYXlU
eXBlCisgICAgZnJvbSAubW9kZWxzIGltcG9ydCBPYmplY3RUeXBlLCBBcnJheVR5cGUsIEFsaWFz
ZWRUeXBlLCBFbnVtVHlwZQogZXhjZXB0OgogICAgIGZyb20gY3BwX2dlbmVyYXRvciBpbXBvcnQg
Q3BwR2VuZXJhdG9yCiAgICAgZnJvbSBjcHBfZ2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgQ3Bw
R2VuZXJhdG9yVGVtcGxhdGVzIGFzIENwcFRlbXBsYXRlcwogICAgIGZyb20gZ2VuZXJhdG9yIGlt
cG9ydCBHZW5lcmF0b3IsIHVjZmlyc3QKLSAgICBmcm9tIG1vZGVscyBpbXBvcnQgT2JqZWN0VHlw
ZSwgQXJyYXlUeXBlCisgICAgZnJvbSBtb2RlbHMgaW1wb3J0IE9iamVjdFR5cGUsIEFycmF5VHlw
ZSwgQWxpYXNlZFR5cGUsIEVudW1UeXBlCiAKIGxvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9i
YWwnKQogCkBAIC03MSw5ICs3MSw3IEBAIGNsYXNzIENwcEZyb250ZW5kRGlzcGF0Y2hlckltcGxl
bWVudGF0aW9uR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgZGVmIF9nZW5lcmF0ZV9zZWNv
bmRhcnlfaGVhZGVyX2luY2x1ZGVzKHNlbGYpOgogICAgICAgICBoZWFkZXJfaW5jbHVkZXMgPSBb
CiAgICAgICAgICAgICAoWyJKYXZhU2NyaXB0Q29yZSIsICJXZWJLaXQiXSwgKCJKYXZhU2NyaXB0
Q29yZSIsICJpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaCIpKSwKLSAgICAgICAg
ICAgIChbIkphdmFTY3JpcHRDb3JlIiwgIldlYktpdCJdLCAoIldURiIsICJ3dGYvdGV4dC9DU3Ry
aW5nLmgiKSkKICAgICAgICAgXQotCiAgICAgICAgIHJldHVybiAnXG4nLmpvaW4oc2VsZi5nZW5l
cmF0ZV9pbmNsdWRlc19mcm9tX2VudHJpZXMoaGVhZGVyX2luY2x1ZGVzKSkKIAogICAgIGRlZiBf
Z2VuZXJhdGVfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbnNfZm9yX2RvbWFpbihzZWxmLCBkb21h
aW4pOgpAQCAtOTAsMjcgKzg4LDQzIEBAIGNsYXNzIENwcEZyb250ZW5kRGlzcGF0Y2hlckltcGxl
bWVudGF0aW9uR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAgIGZvcm1hbF9wYXJhbWV0
ZXJzID0gW10KIAogICAgICAgICBmb3IgcGFyYW1ldGVyIGluIGV2ZW50LmV2ZW50X3BhcmFtZXRl
cnM6CisgICAgICAgICAgICBwYXJhbWV0ZXJfbmFtZSA9IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFt
ZQorICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAg
IHBhcmFtZXRlcl9uYW1lID0gJ29wdF8nICsgcGFyYW1ldGVyX25hbWUKIAotICAgICAgICAgICAg
cGFyYW1ldGVyX3ZhbHVlID0gcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lCi0gICAgICAgICAgICBp
ZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwgYW5kIG5vdCBDcHBHZW5lcmF0b3Iuc2hvdWxkX3Bhc3Nf
YnlfY29weV9mb3JfcmV0dXJuX3R5cGUocGFyYW1ldGVyLnR5cGUpOgorICAgICAgICAgICAgcGFy
YW1ldGVyX3ZhbHVlID0gcGFyYW1ldGVyX25hbWUKKworICAgICAgICAgICAgX3R5cGUgPSBwYXJh
bWV0ZXIudHlwZQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgQWxpYXNlZFR5cGUp
OgorICAgICAgICAgICAgICAgIF90eXBlID0gX3R5cGUuYWxpYXNlZF90eXBlCisgICAgICAgICAg
ICBpZiBpc2luc3RhbmNlKF90eXBlLCBFbnVtVHlwZSkgYW5kIF90eXBlLmlzX2Fub255bW91czoK
KyAgICAgICAgICAgICAgICBfdHlwZSA9IF90eXBlLnByaW1pdGl2ZV90eXBlCisKKyAgICAgICAg
ICAgIGlmIF90eXBlLmlzX2VudW0oKToKKyAgICAgICAgICAgICAgICBpZiBwYXJhbWV0ZXIuaXNf
b3B0aW9uYWw6CisgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcl92YWx1ZSA9ICcqJyArIHBh
cmFtZXRlcl92YWx1ZQorICAgICAgICAgICAgICAgIHBhcmFtZXRlcl92YWx1ZSA9ICdQcm90b2Nv
bDo6JXM6OmdldEVudW1Db25zdGFudFZhbHVlKCVzKScgJSAoc2VsZi5oZWxwZXJzX25hbWVzcGFj
ZSgpLCBwYXJhbWV0ZXJfdmFsdWUpCisgICAgICAgICAgICBlbGlmIENwcEdlbmVyYXRvci5zaG91
bGRfcmVsZWFzZV9hcmd1bWVudChfdHlwZSwgcGFyYW1ldGVyLmlzX29wdGlvbmFsKToKKyAgICAg
ICAgICAgICAgICBwYXJhbWV0ZXJfdmFsdWUgPSBwYXJhbWV0ZXJfdmFsdWUgKyAnLnJlbGVhc2VO
b25OdWxsKCknCisgICAgICAgICAgICBlbGlmIENwcEdlbmVyYXRvci5zaG91bGRfZGVyZWZlcmVu
Y2VfYXJndW1lbnQoX3R5cGUsIHBhcmFtZXRlci5pc19vcHRpb25hbCk6CiAgICAgICAgICAgICAg
ICAgcGFyYW1ldGVyX3ZhbHVlID0gJyonICsgcGFyYW1ldGVyX3ZhbHVlCi0gICAgICAgICAgICBp
ZiBwYXJhbWV0ZXIudHlwZS5pc19lbnVtKCk6Ci0gICAgICAgICAgICAgICAgcGFyYW1ldGVyX3Zh
bHVlID0gJ0luc3BlY3Rvcjo6UHJvdG9jb2w6OiVzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZSglcykn
ICUgKHNlbGYuaGVscGVyc19uYW1lc3BhY2UoKSwgcGFyYW1ldGVyX3ZhbHVlKQorICAgICAgICAg
ICAgZWxpZiBDcHBHZW5lcmF0b3Iuc2hvdWxkX21vdmVfYXJndW1lbnQoX3R5cGUsIHBhcmFtZXRl
ci5pc19vcHRpb25hbCk6CisgICAgICAgICAgICAgICAgcGFyYW1ldGVyX3ZhbHVlID0gJ1dURk1v
dmUoJXMpJyAlIHBhcmFtZXRlcl92YWx1ZQogCiAgICAgICAgICAgICBwYXJhbWV0ZXJfYXJncyA9
IHsKLSAgICAgICAgICAgICAgICAncGFyYW1ldGVyVHlwZSc6IENwcEdlbmVyYXRvci5jcHBfdHlw
ZV9mb3Jfc3RhY2tfb3V0X3BhcmFtZXRlcihwYXJhbWV0ZXIpLAotICAgICAgICAgICAgICAgICdw
YXJhbWV0ZXJOYW1lJzogcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lLAorICAgICAgICAgICAgICAg
ICdwYXJhbWV0ZXJLZXknOiBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUsCisgICAgICAgICAgICAg
ICAgJ3BhcmFtZXRlck5hbWUnOiBwYXJhbWV0ZXJfbmFtZSwKICAgICAgICAgICAgICAgICAncGFy
YW1ldGVyVmFsdWUnOiBwYXJhbWV0ZXJfdmFsdWUsCi0gICAgICAgICAgICAgICAgJ2tleWVkU2V0
TWV0aG9kJzogQ3BwR2VuZXJhdG9yLmNwcF9zZXR0ZXJfbWV0aG9kX2Zvcl90eXBlKHBhcmFtZXRl
ci50eXBlKSwKKyAgICAgICAgICAgICAgICAna2V5ZWRTZXRNZXRob2QnOiBDcHBHZW5lcmF0b3Iu
Y3BwX3NldHRlcl9tZXRob2RfZm9yX3R5cGUoX3R5cGUpLAogICAgICAgICAgICAgfQogCiAgICAg
ICAgICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6Ci0gICAgICAgICAgICAgICAgcGFyYW1l
dGVyX2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAgIGlmICglKHBhcmFtZXRlck5hbWUpcyknICUgcGFy
YW1ldGVyX2FyZ3MpCi0gICAgICAgICAgICAgICAgcGFyYW1ldGVyX2Fzc2lnbm1lbnRzLmFwcGVu
ZCgnICAgICAgICBwYXJhbXNPYmplY3QtPiUoa2V5ZWRTZXRNZXRob2QpcygiJShwYXJhbWV0ZXJO
YW1lKXMiX3MsICUocGFyYW1ldGVyVmFsdWUpcyk7JyAlIHBhcmFtZXRlcl9hcmdzKQorICAgICAg
ICAgICAgICAgIHBhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICBpZiAoISElKHBhcmFt
ZXRlck5hbWUpcyknICUgcGFyYW1ldGVyX2FyZ3MpCisgICAgICAgICAgICAgICAgcGFyYW1ldGVy
X2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAgICAgICBwcm90b2NvbF9wYXJhbXNPYmplY3QtPiUoa2V5
ZWRTZXRNZXRob2QpcygiJShwYXJhbWV0ZXJLZXkpcyJfcywgJShwYXJhbWV0ZXJWYWx1ZSlzKTsn
ICUgcGFyYW1ldGVyX2FyZ3MpCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHBh
cmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICBwYXJhbXNPYmplY3QtPiUoa2V5ZWRTZXRN
ZXRob2QpcygiJShwYXJhbWV0ZXJOYW1lKXMiX3MsICUocGFyYW1ldGVyVmFsdWUpcyk7JyAlIHBh
cmFtZXRlcl9hcmdzKQorICAgICAgICAgICAgICAgIHBhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBl
bmQoJyAgICBwcm90b2NvbF9wYXJhbXNPYmplY3QtPiUoa2V5ZWRTZXRNZXRob2QpcygiJShwYXJh
bWV0ZXJLZXkpcyJfcywgJShwYXJhbWV0ZXJWYWx1ZSlzKTsnICUgcGFyYW1ldGVyX2FyZ3MpCiAK
LSAgICAgICAgICAgIGZvcm1hbF9wYXJhbWV0ZXJzLmFwcGVuZCgnJXMgJXMnICUgKENwcEdlbmVy
YXRvci5jcHBfdHlwZV9mb3JfY2hlY2tlZF9mb3JtYWxfZXZlbnRfcGFyYW1ldGVyKHBhcmFtZXRl
ciksIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkpCisgICAgICAgICAgICBmb3JtYWxfcGFyYW1l
dGVycy5hcHBlbmQoJyVzICVzJyAlIChDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX2V2ZW50X3Bh
cmFtZXRlcihfdHlwZSwgcGFyYW1ldGVyLmlzX29wdGlvbmFsKSwgcGFyYW1ldGVyX25hbWUpKQog
CiAgICAgICAgIGV2ZW50X2FyZ3MgPSB7CiAgICAgICAgICAgICAnZG9tYWluTmFtZSc6IGRvbWFp
bi5kb21haW5fbmFtZSwKQEAgLTEyMCwxNSArMTM0LDE1IEBAIGNsYXNzIENwcEZyb250ZW5kRGlz
cGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAKICAgICAgICAg
bGluZXMuYXBwZW5kKCd2b2lkICUoZG9tYWluTmFtZSlzRnJvbnRlbmREaXNwYXRjaGVyOjolKGV2
ZW50TmFtZSlzKCUoZm9ybWFsUGFyYW1ldGVycylzKScgJSBldmVudF9hcmdzKQogICAgICAgICBs
aW5lcy5hcHBlbmQoJ3snKQotICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBSZWY8SlNPTjo6T2Jq
ZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7JykKLSAgICAgICAgbGlu
ZXMuYXBwZW5kKCcgICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiJShkb21h
aW5OYW1lKXMuJShldmVudE5hbWUpcyJfcyk7JyAlIGV2ZW50X2FyZ3MpCisgICAgICAgIGxpbmVz
LmFwcGVuZCgnICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNy
ZWF0ZSgpOycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIHByb3RvY29sX2pzb25NZXNzYWdl
LT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIiUoZG9tYWluTmFtZSlzLiUoZXZlbnROYW1lKXMiX3Mp
OycgJSBldmVudF9hcmdzKQogCiAgICAgICAgIGlmIGxlbihwYXJhbWV0ZXJfYXNzaWdubWVudHMp
ID4gMDoKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIFJlZjxKU09OOjpPYmplY3Q+IHBh
cmFtc09iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7JykKKyAgICAgICAgICAgIGxpbmVz
LmFwcGVuZCgnICAgIGF1dG8gcHJvdG9jb2xfcGFyYW1zT2JqZWN0ID0gSlNPTjo6T2JqZWN0Ojpj
cmVhdGUoKTsnKQogICAgICAgICAgICAgbGluZXMuZXh0ZW5kKHBhcmFtZXRlcl9hc3NpZ25tZW50
cykKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGpzb25NZXNzYWdlLT5zZXRPYmplY3Qo
InBhcmFtcyJfcywgV1RGTW92ZShwYXJhbXNPYmplY3QpKTsnKQorICAgICAgICAgICAgbGluZXMu
YXBwZW5kKCcgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIl9zLCBX
VEZNb3ZlKHByb3RvY29sX3BhcmFtc09iamVjdCkpOycpCiAKICAgICAgICAgbGluZXMuYXBwZW5k
KCcnKQotICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBtX2Zyb250ZW5kUm91dGVyLnNlbmRFdmVu
dChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgn
ICAgIG1fZnJvbnRlbmRSb3V0ZXIuc2VuZEV2ZW50KHByb3RvY29sX2pzb25NZXNzYWdlLT50b0pT
T05TdHJpbmcoKSk7JykKICAgICAgICAgbGluZXMuYXBwZW5kKCd9JykKICAgICAgICAgcmV0dXJu
IHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZXZlbnQuY29uZGl0aW9uLCAiXG4i
LmpvaW4obGluZXMpKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX3Byb3RvY29sX3R5cGVzX2hlYWRlci5weSBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRl
X2NwcF9wcm90b2NvbF90eXBlc19oZWFkZXIucHkKaW5kZXggMDAxOTI0ZGUwZWIwODI3Zjc0NWQz
ZDczNmMwYWI5MjAyMTI0ZGIzNi4uNzgxZDA2ZDk0MDU2NmIxNzJlYzU1YzJlZmJkMTAxYTAwNTBk
NzFhOCAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2NvZGVnZW4vZ2VuZXJhdGVfY3BwX3Byb3RvY29sX3R5cGVzX2hlYWRlci5weQorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBf
cHJvdG9jb2xfdHlwZXNfaGVhZGVyLnB5CkBAIC04NSw5ICs4NSwxMCBAQCBjbGFzcyBDcHBQcm90
b2NvbFR5cGVzSGVhZGVyR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgZGVmIF9nZW5lcmF0
ZV9zZWNvbmRhcnlfaGVhZGVyX2luY2x1ZGVzKHNlbGYpOgogICAgICAgICBoZWFkZXJfaW5jbHVk
ZXMgPSBbCiAgICAgICAgICAgICAoWyJKYXZhU2NyaXB0Q29yZSIsICJXZWJLaXQiXSwgKCJKYXZh
U2NyaXB0Q29yZSIsICJpbnNwZWN0b3IvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oIikpLAotICAg
ICAgICAgICAgKFsiSmF2YVNjcmlwdENvcmUiLCAiV2ViS2l0Il0sICgiV1RGIiwgInd0Zi9Bc3Nl
cnRpb25zLmgiKSkKKyAgICAgICAgICAgIChbIkphdmFTY3JpcHRDb3JlIiwgIldlYktpdCJdLCAo
IldURiIsICJ3dGYvSlNPTlZhbHVlcy5oIikpLAorICAgICAgICAgICAgKFsiSmF2YVNjcmlwdENv
cmUiLCAiV2ViS2l0Il0sICgiV1RGIiwgInd0Zi9PcHRpb25hbC5oIikpLAorICAgICAgICAgICAg
KFsiSmF2YVNjcmlwdENvcmUiLCAiV2ViS2l0Il0sICgiV1RGIiwgInd0Zi90ZXh0L1dURlN0cmlu
Zy5oIikpLAogICAgICAgICBdCi0KICAgICAgICAgcmV0dXJuICdcbicuam9pbihzZWxmLmdlbmVy
YXRlX2luY2x1ZGVzX2Zyb21fZW50cmllcyhoZWFkZXJfaW5jbHVkZXMpKQogCiAgICAgZGVmIF9n
ZW5lcmF0ZV92ZXJzaW9ucyhzZWxmLCBkb21haW5zKToKQEAgLTIzMiw5ICsyMzMsNiBAQCBjbGFz
cyBDcHBQcm90b2NvbFR5cGVzSGVhZGVyR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAg
IHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGRvbWFpbi5jb25kaXRp
b24sICdcbicuam9pbihsaW5lcykpCiAKICAgICBkZWYgX2dlbmVyYXRlX2NsYXNzX2Zvcl9vYmpl
Y3RfZGVjbGFyYXRpb24oc2VsZiwgdHlwZV9kZWNsYXJhdGlvbiwgZG9tYWluKToKLSAgICAgICAg
aWYgbGVuKHR5cGVfZGVjbGFyYXRpb24udHlwZV9tZW1iZXJzKSA9PSAwOgotICAgICAgICAgICAg
cmV0dXJuICcnCi0KICAgICAgICAgZW51bV9tZW1iZXJzID0gW21lbWJlciBmb3IgbWVtYmVyIGlu
IHR5cGVfZGVjbGFyYXRpb24udHlwZV9tZW1iZXJzIGlmIGlzaW5zdGFuY2UobWVtYmVyLnR5cGUs
IEVudW1UeXBlKSBhbmQgbWVtYmVyLnR5cGUuaXNfYW5vbnltb3VzXQogICAgICAgICByZXF1aXJl
ZF9tZW1iZXJzID0gW21lbWJlciBmb3IgbWVtYmVyIGluIHR5cGVfZGVjbGFyYXRpb24udHlwZV9t
ZW1iZXJzIGlmIG5vdCBtZW1iZXIuaXNfb3B0aW9uYWxdCiAgICAgICAgIG9wdGlvbmFsX21lbWJl
cnMgPSBbbWVtYmVyIGZvciBtZW1iZXIgaW4gdHlwZV9kZWNsYXJhdGlvbi50eXBlX21lbWJlcnMg
aWYgbWVtYmVyLmlzX29wdGlvbmFsXQpAQCAtMjQ2LDExICsyNDQsMTIgQEAgY2xhc3MgQ3BwUHJv
dG9jb2xUeXBlc0hlYWRlckdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAgICBiYXNlX2Ns
YXNzID0gJ0pTT046Ok9iamVjdCcKICAgICAgICAgaWYgbm90IEdlbmVyYXRvci50eXBlX2hhc19v
cGVuX2ZpZWxkcyh0eXBlX2RlY2xhcmF0aW9uLnR5cGUpOgogICAgICAgICAgICAgYmFzZV9jbGFz
cyA9IGJhc2VfY2xhc3MgKyAnQmFzZScKLSAgICAgICAgbGluZXMuYXBwZW5kKCdjbGFzcyAlcyA6
IHB1YmxpYyAlcyB7JyAlIChvYmplY3RfbmFtZSwgYmFzZV9jbGFzcykpCisgICAgICAgIGxpbmVz
LmFwcGVuZCgnY2xhc3MgJXMgZmluYWwgOiBwdWJsaWMgJXMgeycgJSAob2JqZWN0X25hbWUsIGJh
c2VfY2xhc3MpKQogICAgICAgICBsaW5lcy5hcHBlbmQoJ3B1YmxpYzonKQogICAgICAgICBmb3Ig
ZW51bV9tZW1iZXIgaW4gZW51bV9tZW1iZXJzOgogICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcg
ICAgLy8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSBcJyVzXCcgd2hpbGUgZ2VuZXJhdGluZyAl
cy4nICUgKGVudW1fbWVtYmVyLm1lbWJlcl9uYW1lLCBvYmplY3RfbmFtZSkpCiAgICAgICAgICAg
ICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfc3RydWN0X2Zvcl9hbm9ueW1vdXNfZW51bV9t
ZW1iZXIoZW51bV9tZW1iZXIpKQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcnKQogICAgICAg
ICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYnVpbGRlcl9zdGF0ZV9lbnVtKHR5cGVfZGVj
bGFyYXRpb24pKQogCiAgICAgICAgIGNvbnN0cnVjdG9yX2V4YW1wbGUgPSBbXQpAQCAtMjc3LDcg
KzI3Niw3IEBAIGNsYXNzIENwcFByb3RvY29sVHlwZXNIZWFkZXJHZW5lcmF0b3IoQ3BwR2VuZXJh
dG9yKToKICAgICAgICAgICAgIG9wZW5fbWVtYmVycyA9IEdlbmVyYXRvci5vcGVuX2ZpZWxkcyh0
eXBlX2RlY2xhcmF0aW9uKQogICAgICAgICAgICAgZm9yIHR5cGVfbWVtYmVyIGluIG9wZW5fbWVt
YmVyczoKICAgICAgICAgICAgICAgICBleHBvcnRfbWFjcm8gPSBzZWxmLm1vZGVsKCkuZnJhbWV3
b3JrLnNldHRpbmcoJ2V4cG9ydF9tYWNybycsIE5vbmUpCi0gICAgICAgICAgICAgICAgbGluZXMu
YXBwZW5kKCcgICAgJXMgc3RhdGljIGNvbnN0IGNoYXIqICVzOycgJSAoZXhwb3J0X21hY3JvLCB1
Y2ZpcnN0KHR5cGVfbWVtYmVyLm1lbWJlcl9uYW1lKSkpCisgICAgICAgICAgICAgICAgbGluZXMu
YXBwZW5kKCcgICAgJXMgc3RhdGljIGNvbnN0IGNoYXIqICVzS2V5OycgJSAoZXhwb3J0X21hY3Jv
LCB0eXBlX21lbWJlci5tZW1iZXJfbmFtZSkpCiAKICAgICAgICAgbGluZXMuYXBwZW5kKCd9Oycp
CiAgICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKHR5cGVf
ZGVjbGFyYXRpb24uY29uZGl0aW9uLCAnXG4nLmpvaW4obGluZXMpKQpAQCAtMzI4LDQ3ICszMjcs
NTYgQEAgY2xhc3MgQ3BwUHJvdG9jb2xUeXBlc0hlYWRlckdlbmVyYXRvcihDcHBHZW5lcmF0b3Ip
OgogICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQogCiAgICAgZGVmIF9nZW5lcmF0ZV9i
dWlsZGVyX3NldHRlcl9mb3JfbWVtYmVyKHNlbGYsIHR5cGVfbWVtYmVyLCBkb21haW4pOgorICAg
ICAgICBtZW1iZXJfbmFtZSA9ICdpbl8nICsgdHlwZV9tZW1iZXIubWVtYmVyX25hbWUKKworICAg
ICAgICBtZW1iZXJfdmFsdWUgPSBtZW1iZXJfbmFtZQorICAgICAgICBpZiB0eXBlX21lbWJlci50
eXBlLmlzX2VudW0oKToKKyAgICAgICAgICAgIG1lbWJlcl92YWx1ZSA9ICdQcm90b2NvbDo6JXM6
OmdldEVudW1Db25zdGFudFZhbHVlKCVzKScgJSAoc2VsZi5oZWxwZXJzX25hbWVzcGFjZSgpLCBt
ZW1iZXJfdmFsdWUpCisgICAgICAgIGVsaWYgQ3BwR2VuZXJhdG9yLnNob3VsZF9tb3ZlX2FyZ3Vt
ZW50KHR5cGVfbWVtYmVyLnR5cGUsIEZhbHNlKToKKyAgICAgICAgICAgIG1lbWJlcl92YWx1ZSA9
ICdXVEZNb3ZlKCVzKScgJSBtZW1iZXJfdmFsdWUKKwogICAgICAgICBzZXR0ZXJfYXJncyA9IHsK
ICAgICAgICAgICAgICdjYW1lbE5hbWUnOiB1Y2ZpcnN0KHR5cGVfbWVtYmVyLm1lbWJlcl9uYW1l
KSwKLSAgICAgICAgICAgICdrZXllZFNldCc6IENwcEdlbmVyYXRvci5jcHBfc2V0dGVyX21ldGhv
ZF9mb3JfdHlwZSh0eXBlX21lbWJlci50eXBlKSwKLSAgICAgICAgICAgICduYW1lJzogdHlwZV9t
ZW1iZXIubWVtYmVyX25hbWUsCi0gICAgICAgICAgICAncGFyYW1ldGVyVHlwZSc6IENwcEdlbmVy
YXRvci5jcHBfdHlwZV9mb3JfdHlwZV9tZW1iZXIodHlwZV9tZW1iZXIpLAotICAgICAgICAgICAg
J2hlbHBlcnNOYW1lc3BhY2UnOiBzZWxmLmhlbHBlcnNfbmFtZXNwYWNlKCksCisgICAgICAgICAg
ICAnc2V0dGVyJzogQ3BwR2VuZXJhdG9yLmNwcF9zZXR0ZXJfbWV0aG9kX2Zvcl90eXBlKHR5cGVf
bWVtYmVyLnR5cGUpLAorICAgICAgICAgICAgJ21lbWJlclR5cGUnOiBDcHBHZW5lcmF0b3IuY3Bw
X3R5cGVfZm9yX3R5cGVfbWVtYmVyX2FyZ3VtZW50KHR5cGVfbWVtYmVyLnR5cGUsIHR5cGVfbWVt
YmVyLm1lbWJlcl9uYW1lKSwKKyAgICAgICAgICAgICdtZW1iZXJLZXknOiB0eXBlX21lbWJlci5t
ZW1iZXJfbmFtZSwKKyAgICAgICAgICAgICdtZW1iZXJOYW1lJzogbWVtYmVyX25hbWUsCisgICAg
ICAgICAgICAnbWVtYmVyVmFsdWUnOiBtZW1iZXJfdmFsdWUsCiAgICAgICAgIH0KIAogICAgICAg
ICBsaW5lcyA9IFtdCiAgICAgICAgIGxpbmVzLmFwcGVuZCgnJykKLSAgICAgICAgbGluZXMuYXBw
ZW5kKCcgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCAlKGNhbWVsTmFtZSlzU2V0PiYgc2V0JShjYW1l
bE5hbWUpcyglKHBhcmFtZXRlclR5cGUpcyB2YWx1ZSknICUgc2V0dGVyX2FyZ3MpCisgICAgICAg
IGxpbmVzLmFwcGVuZCgnICAgICAgICBCdWlsZGVyPFNUQVRFIHwgJShjYW1lbE5hbWUpc1NldD4m
IHNldCUoY2FtZWxOYW1lKXMoJShtZW1iZXJUeXBlKXMgJShtZW1iZXJOYW1lKXMpJyAlIHNldHRl
cl9hcmdzKQogICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgeycpCi0gICAgICAgIGxpbmVz
LmFwcGVuZCgnICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmICUoY2FtZWxOYW1l
KXNTZXQpLCBwcm9wZXJ0eV8lKG5hbWUpc19hbHJlYWR5X3NldCk7JyAlIHNldHRlcl9hcmdzKQot
Ci0gICAgICAgIGlmIGlzaW5zdGFuY2UodHlwZV9tZW1iZXIudHlwZSwgRW51bVR5cGUpOgotICAg
ICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgICAgICBtX3Jlc3VsdC0+JShrZXllZFNldClz
KCIlKG5hbWUpcyJfcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6JShoZWxwZXJzTmFtZXNwYWNlKXM6
OmdldEVudW1Db25zdGFudFZhbHVlKHZhbHVlKSk7JyAlIHNldHRlcl9hcmdzKQotICAgICAgICBl
bHNlOgotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgICAgICBtX3Jlc3VsdC0+JShr
ZXllZFNldClzKCIlKG5hbWUpcyJfcywgdmFsdWUpOycgJSBzZXR0ZXJfYXJncykKKyAgICAgICAg
bGluZXMuYXBwZW5kKCcgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgJShjYW1l
bE5hbWUpc1NldCksIHByb3BlcnR5XyUobWVtYmVyS2V5KXNfYWxyZWFkeV9zZXQpOycgJSBzZXR0
ZXJfYXJncykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgICAgICBtX3Jlc3VsdC0+JShz
ZXR0ZXIpcygiJShtZW1iZXJLZXkpcyJfcywgJShtZW1iZXJWYWx1ZSlzKTsnICUgc2V0dGVyX2Fy
Z3MpCiAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTwl
KGNhbWVsTmFtZSlzU2V0PigpOycgJSBzZXR0ZXJfYXJncykKICAgICAgICAgbGluZXMuYXBwZW5k
KCcgICAgICAgIH0nKQogICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQogCiAgICAgZGVm
IF9nZW5lcmF0ZV91bmNoZWNrZWRfc2V0dGVyX2Zvcl9tZW1iZXIoc2VsZiwgdHlwZV9tZW1iZXIs
IGRvbWFpbik6CisgICAgICAgIG1lbWJlcl9uYW1lID0gJ2luX29wdF8nICsgdHlwZV9tZW1iZXIu
bWVtYmVyX25hbWUKKworICAgICAgICBtZW1iZXJfdmFsdWUgPSBtZW1iZXJfbmFtZQorICAgICAg
ICBpZiB0eXBlX21lbWJlci50eXBlLmlzX2VudW0oKToKKyAgICAgICAgICAgIG1lbWJlcl92YWx1
ZSA9ICdQcm90b2NvbDo6JXM6OmdldEVudW1Db25zdGFudFZhbHVlKCVzKScgJSAoc2VsZi5oZWxw
ZXJzX25hbWVzcGFjZSgpLCBtZW1iZXJfdmFsdWUpCisgICAgICAgIGVsaWYgQ3BwR2VuZXJhdG9y
LnNob3VsZF9tb3ZlX2FyZ3VtZW50KHR5cGVfbWVtYmVyLnR5cGUsIEZhbHNlKToKKyAgICAgICAg
ICAgIG1lbWJlcl92YWx1ZSA9ICdXVEZNb3ZlKCVzKScgJSBtZW1iZXJfdmFsdWUKKwogICAgICAg
ICBzZXR0ZXJfYXJncyA9IHsKICAgICAgICAgICAgICdjYW1lbE5hbWUnOiB1Y2ZpcnN0KHR5cGVf
bWVtYmVyLm1lbWJlcl9uYW1lKSwKLSAgICAgICAgICAgICdrZXllZFNldCc6IENwcEdlbmVyYXRv
ci5jcHBfc2V0dGVyX21ldGhvZF9mb3JfdHlwZSh0eXBlX21lbWJlci50eXBlKSwKLSAgICAgICAg
ICAgICduYW1lJzogdHlwZV9tZW1iZXIubWVtYmVyX25hbWUsCi0gICAgICAgICAgICAncGFyYW1l
dGVyVHlwZSc6IENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3JfdHlwZV9tZW1iZXIodHlwZV9tZW1i
ZXIpLAotICAgICAgICAgICAgJ2hlbHBlcnNOYW1lc3BhY2UnOiBzZWxmLmhlbHBlcnNfbmFtZXNw
YWNlKCksCisgICAgICAgICAgICAnc2V0dGVyJzogQ3BwR2VuZXJhdG9yLmNwcF9zZXR0ZXJfbWV0
aG9kX2Zvcl90eXBlKHR5cGVfbWVtYmVyLnR5cGUpLAorICAgICAgICAgICAgJ21lbWJlcktleSc6
IHR5cGVfbWVtYmVyLm1lbWJlcl9uYW1lLAorICAgICAgICAgICAgJ21lbWJlck5hbWUnOiBtZW1i
ZXJfbmFtZSwKKyAgICAgICAgICAgICdtZW1iZXJWYWx1ZSc6IG1lbWJlcl92YWx1ZSwKKyAgICAg
ICAgICAgICdtZW1iZXJUeXBlJzogQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl90eXBlX21lbWJl
cl9hcmd1bWVudCh0eXBlX21lbWJlci50eXBlLCB0eXBlX21lbWJlci5tZW1iZXJfbmFtZSksCiAg
ICAgICAgIH0KIAogICAgICAgICBsaW5lcyA9IFtdCiAgICAgICAgIGxpbmVzLmFwcGVuZCgnJykK
LSAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgdm9pZCBzZXQlKGNhbWVsTmFtZSlzKCUocGFyYW1l
dGVyVHlwZSlzIHZhbHVlKScgJSBzZXR0ZXJfYXJncykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcg
ICAgdm9pZCBzZXQlKGNhbWVsTmFtZSlzKCUobWVtYmVyVHlwZSlzICUobWVtYmVyTmFtZSlzKScg
JSBzZXR0ZXJfYXJncykKICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgeycpCi0gICAgICAgIGlm
IGlzaW5zdGFuY2UodHlwZV9tZW1iZXIudHlwZSwgRW51bVR5cGUpOgotICAgICAgICAgICAgbGlu
ZXMuYXBwZW5kKCcgICAgICAgIEpTT046Ok9iamVjdEJhc2U6OiUoa2V5ZWRTZXQpcygiJShuYW1l
KXMiX3MsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OiUoaGVscGVyc05hbWVzcGFjZSlzOjpnZXRFbnVt
Q29uc3RhbnRWYWx1ZSh2YWx1ZSkpOycgJSBzZXR0ZXJfYXJncykKLSAgICAgICAgZWxpZiBDcHBH
ZW5lcmF0b3Iuc2hvdWxkX3VzZV9yZWZlcmVuY2VzX2Zvcl90eXBlKHR5cGVfbWVtYmVyLnR5cGUp
OgotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIEpTT046Ok9iamVjdEJhc2U6OiUo
a2V5ZWRTZXQpcygiJShuYW1lKXMiX3MsIFdURk1vdmUodmFsdWUpKTsnICUgc2V0dGVyX2FyZ3Mp
Ci0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgSlNPTjo6
T2JqZWN0QmFzZTo6JShrZXllZFNldClzKCIlKG5hbWUpcyJfcywgdmFsdWUpOycgJSBzZXR0ZXJf
YXJncykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIEpTT046Ok9iamVjdEJhc2U6OiUo
c2V0dGVyKXMoIiUobWVtYmVyS2V5KXMiX3MsICUobWVtYmVyVmFsdWUpcyk7JyAlIHNldHRlcl9h
cmdzKQogICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICB9JykKICAgICAgICAgcmV0dXJuICdcbicu
am9pbihsaW5lcykKIApAQCAtMzgxLDEzICszODksMTMgQEAgY2xhc3MgQ3BwUHJvdG9jb2xUeXBl
c0hlYWRlckdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAgICAgICAgZGVjbGFyYXRpb25z
X3RvX2dlbmVyYXRlID0gW2RlY2wgZm9yIGRlY2wgaW4gdHlwZV9kZWNsYXJhdGlvbnMgaWYgc2Vs
Zi50eXBlX25lZWRzX3NoYXBlX2Fzc2VydGlvbnMoZGVjbC50eXBlKV0KIAogICAgICAgICAgICAg
Zm9yIHR5cGVfZGVjbGFyYXRpb24gaW4gZGVjbGFyYXRpb25zX3RvX2dlbmVyYXRlOgotICAgICAg
ICAgICAgICAgIGZvciB0eXBlX21lbWJlciBpbiB0eXBlX2RlY2xhcmF0aW9uLnR5cGVfbWVtYmVy
czoKLSAgICAgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh0eXBlX21lbWJlci50eXBlLCBF
bnVtVHlwZSk6Ci0gICAgICAgICAgICAgICAgICAgICAgICB0eXBlX2FyZ3VtZW50cy5hcHBlbmQo
KHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24odHlwZV9kZWNsYXJhdGlvbi5jb25k
aXRpb24sIENwcEdlbmVyYXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZV9tZW1iZXIodHlw
ZV9tZW1iZXIsIHR5cGVfZGVjbGFyYXRpb24pKSwgRmFsc2UpKQotCiAgICAgICAgICAgICAgICAg
aWYgaXNpbnN0YW5jZSh0eXBlX2RlY2xhcmF0aW9uLnR5cGUsIE9iamVjdFR5cGUpOgogICAgICAg
ICAgICAgICAgICAgICB0eXBlX2FyZ3VtZW50cy5hcHBlbmQoKHNlbGYud3JhcF93aXRoX2d1YXJk
X2Zvcl9jb25kaXRpb24odHlwZV9kZWNsYXJhdGlvbi5jb25kaXRpb24sIENwcEdlbmVyYXRvci5j
cHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZSh0eXBlX2RlY2xhcmF0aW9uLnR5cGUpKSwgR2VuZXJh
dG9yLnR5cGVfbmVlZHNfcnVudGltZV9jYXN0cyh0eXBlX2RlY2xhcmF0aW9uLnR5cGUpKSkKIAor
ICAgICAgICAgICAgICAgIGZvciB0eXBlX21lbWJlciBpbiB0eXBlX2RlY2xhcmF0aW9uLnR5cGVf
bWVtYmVyczoKKyAgICAgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh0eXBlX21lbWJlci50
eXBlLCBFbnVtVHlwZSk6CisgICAgICAgICAgICAgICAgICAgICAgICB0eXBlX2FyZ3VtZW50cy5h
cHBlbmQoKHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24odHlwZV9kZWNsYXJhdGlv
bi5jb25kaXRpb24sIENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3JfZW51bSh0eXBlX21lbWJlci50
eXBlLCAnJXM6OiVzJyAlICh0eXBlX2RlY2xhcmF0aW9uLnR5cGVfbmFtZSwgdWNmaXJzdCh0eXBl
X21lbWJlci5tZW1iZXJfbmFtZSkpKSksIEZhbHNlKSkKKwogICAgICAgICBzdHJ1Y3Rfa2V5d29y
ZHMgPSBbJ3N0cnVjdCddCiAgICAgICAgIGZ1bmN0aW9uX2tleXdvcmRzID0gWydzdGF0aWMgdm9p
ZCddCiAgICAgICAgIGV4cG9ydF9tYWNybyA9IHNlbGYubW9kZWwoKS5mcmFtZXdvcmsuc2V0dGlu
ZygnZXhwb3J0X21hY3JvJywgTm9uZSkKQEAgLTM5OSw3ICs0MDcsNyBAQCBjbGFzcyBDcHBQcm90
b2NvbFR5cGVzSGVhZGVyR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAgIGZvciBhcmd1
bWVudCBpbiB0eXBlX2FyZ3VtZW50czoKICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgndGVtcGxh
dGU8PiAlcyBCaW5kaW5nVHJhaXRzPCVzPiB7JyAlICgnICcuam9pbihzdHJ1Y3Rfa2V5d29yZHMp
LCBhcmd1bWVudFswXSkpCiAgICAgICAgICAgICBpZiBhcmd1bWVudFsxXToKLSAgICAgICAgICAg
ICAgICBsaW5lcy5hcHBlbmQoJ3N0YXRpYyBSZWZQdHI8JXM+IHJ1bnRpbWVDYXN0KFJlZlB0cjxK
U09OOjpWYWx1ZT4mJiB2YWx1ZSk7JyAlIGFyZ3VtZW50WzBdKQorICAgICAgICAgICAgICAgIGxp
bmVzLmFwcGVuZCgnc3RhdGljIFJlZjwlcz4gcnVudGltZUNhc3QoUmVmPEpTT046OlZhbHVlPiYm
IHZhbHVlKTsnICUgYXJndW1lbnRbMF0pCiAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyVzIGFz
c2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKEpTT046OlZhbHVlKik7JyAlICcgJy5qb2luKGZ1bmN0
aW9uX2tleXdvcmRzKSkKICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnfTsnKQogICAgICAgICBy
ZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQpAQCAtNDM4LDEzICs0NDYsMTMgQEAgY2xhc3MgQ3BwUHJv
dG9jb2xUeXBlc0hlYWRlckdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAgICAgICAgZG9t
YWluX2xpbmVzID0gW10KICAgICAgICAgICAgIGRvbWFpbl9saW5lcy5hcHBlbmQoIi8vIEVudW1z
IGluIHRoZSAnJXMnIERvbWFpbiIgJSBkb21haW4uZG9tYWluX25hbWUpCiAgICAgICAgICAgICBm
b3IgZW51bV90eXBlIGluIGVudW1fdHlwZXM6Ci0gICAgICAgICAgICAgICAgY3BwX3Byb3RvY29s
X3R5cGUgPSBDcHBHZW5lcmF0b3IuY3BwX3Byb3RvY29sX3R5cGVfZm9yX3R5cGUoZW51bV90eXBl
KQorICAgICAgICAgICAgICAgIGNwcF9wcm90b2NvbF90eXBlID0gQ3BwR2VuZXJhdG9yLmNwcF90
eXBlX2Zvcl9lbnVtKGVudW1fdHlwZSwgZW51bV90eXBlLnJhd19uYW1lKCkpCiAgICAgICAgICAg
ICAgICAgZG9tYWluX2xpbmVzLmFwcGVuZChzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0
aW9uKGVudW1fdHlwZS5kZWNsYXJhdGlvbigpLmNvbmRpdGlvbiwgJ3RlbXBsYXRlPD5cbiVzIHBh
cnNlRW51bVZhbHVlRnJvbVN0cmluZzwlcz4oY29uc3QgU3RyaW5nJik7JyAlIChyZXR1cm5fdHlw
ZV93aXRoX2V4cG9ydF9tYWNybyhjcHBfcHJvdG9jb2xfdHlwZSksIGNwcF9wcm90b2NvbF90eXBl
KSkpCiAKICAgICAgICAgICAgIGZvciBvYmplY3RfdHlwZSBpbiBvYmplY3RfdHlwZXM6CiAgICAg
ICAgICAgICAgICAgb2JqZWN0X2xpbmVzID0gW10KICAgICAgICAgICAgICAgICBmb3IgZW51bV9t
ZW1iZXIgaW4gZmlsdGVyKHR5cGVfbWVtYmVyX2lzX2Fub255bW91c19lbnVtX3R5cGUsIG9iamVj
dF90eXBlLm1lbWJlcnMpOgotICAgICAgICAgICAgICAgICAgICBjcHBfcHJvdG9jb2xfdHlwZSA9
IENwcEdlbmVyYXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZV9tZW1iZXIoZW51bV9tZW1i
ZXIsIG9iamVjdF90eXBlLmRlY2xhcmF0aW9uKCkpCisgICAgICAgICAgICAgICAgICAgIGNwcF9w
cm90b2NvbF90eXBlID0gQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl9lbnVtKGVudW1fbWVtYmVy
LnR5cGUsICclczo6JXMnICUgKG9iamVjdF90eXBlLnJhd19uYW1lKCksIHVjZmlyc3QoZW51bV9t
ZW1iZXIubWVtYmVyX25hbWUpKSkKICAgICAgICAgICAgICAgICAgICAgb2JqZWN0X2xpbmVzLmFw
cGVuZCgndGVtcGxhdGU8PlxuJXMgcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPCVzPihjb25zdCBT
dHJpbmcmKTsnICUgKHJldHVybl90eXBlX3dpdGhfZXhwb3J0X21hY3JvKGNwcF9wcm90b2NvbF90
eXBlKSwgY3BwX3Byb3RvY29sX3R5cGUpKQogICAgICAgICAgICAgICAgIGlmIGxlbihvYmplY3Rf
bGluZXMpOgogICAgICAgICAgICAgICAgICAgICBkb21haW5fbGluZXMuYXBwZW5kKHNlbGYud3Jh
cF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24ob2JqZWN0X3R5cGUuZGVjbGFyYXRpb24oKS5jb25k
aXRpb24sICdcbicuam9pbihvYmplY3RfbGluZXMpKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9wcm90b2Nv
bF90eXBlc19pbXBsZW1lbnRhdGlvbi5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9wcm90b2NvbF90eXBlc19pbXBsZW1lbnRh
dGlvbi5weQppbmRleCA1ZGQ1MzQ2OTQ0ODU1MTU0OGQ2N2FhMGI0NTZjNmExYTY2NThkNTkzLi4x
M2U1ODk3MjZkNGNkYjdhNDUyYzY3MGM4MzI1ZWIxYTM5ZWU2MjIyIDEwMDc1NQotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBf
cHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50YXRpb24ucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX3Byb3RvY29sX3R5cGVz
X2ltcGxlbWVudGF0aW9uLnB5CkBAIC04MiwxMCArODIsOCBAQCBjbGFzcyBDcHBQcm90b2NvbFR5
cGVzSW1wbGVtZW50YXRpb25HZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKIAogICAgIGRlZiBfZ2Vu
ZXJhdGVfc2Vjb25kYXJ5X2hlYWRlcl9pbmNsdWRlcyhzZWxmKToKICAgICAgICAgaGVhZGVyX2lu
Y2x1ZGVzID0gWwotICAgICAgICAgICAgKFsiSmF2YVNjcmlwdENvcmUiLCAiV2ViS2l0Il0sICgi
V1RGIiwgInd0Zi9PcHRpb25hbC5oIikpLAotICAgICAgICAgICAgKFsiSmF2YVNjcmlwdENvcmUi
LCAiV2ViS2l0Il0sICgiV1RGIiwgInd0Zi90ZXh0L0NTdHJpbmcuaCIpKSwKKyAgICAgICAgICAg
IChbIkphdmFTY3JpcHRDb3JlIiwgIldlYktpdCJdLCAoIldURiIsICJ3dGYvQXNzZXJ0aW9ucy5o
IikpLAogICAgICAgICBdCi0KICAgICAgICAgcmV0dXJuICdcbicuam9pbihzZWxmLmdlbmVyYXRl
X2luY2x1ZGVzX2Zyb21fZW50cmllcyhoZWFkZXJfaW5jbHVkZXMpKQogCiAgICAgZGVmIF9nZW5l
cmF0ZV9lbnVtX21hcHBpbmcoc2VsZik6CkBAIC0xNDQsMTQgKzE0MiwxNCBAQCBjbGFzcyBDcHBQ
cm90b2NvbFR5cGVzSW1wbGVtZW50YXRpb25HZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAg
ICAgbGluZXMgPSBbXQogICAgICAgICBsaW5lcy5hcHBlbmQoIi8vIEVudW1zIGluIHRoZSAnJXMn
IERvbWFpbiIgJSBkb21haW4uZG9tYWluX25hbWUpCiAgICAgICAgIGZvciBlbnVtX3R5cGUgaW4g
ZW51bV90eXBlczoKLSAgICAgICAgICAgIGNwcF9wcm90b2NvbF90eXBlID0gQ3BwR2VuZXJhdG9y
LmNwcF9wcm90b2NvbF90eXBlX2Zvcl90eXBlKGVudW1fdHlwZSkKKyAgICAgICAgICAgIGNwcF9w
cm90b2NvbF90eXBlID0gQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl9lbnVtKGVudW1fdHlwZSwg
ZW51bV90eXBlLnJhd19uYW1lKCkpCiAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJycpCiAgICAg
ICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihl
bnVtX3R5cGUuZGVjbGFyYXRpb24oKS5jb25kaXRpb24sIGdlbmVyYXRlX2NvbnZlcnNpb25fbWV0
aG9kX2JvZHkoZW51bV90eXBlLCBjcHBfcHJvdG9jb2xfdHlwZSkpKQogCiAgICAgICAgIGZvciBv
YmplY3RfdHlwZSBpbiBvYmplY3RfdHlwZXM6CiAgICAgICAgICAgICBvYmplY3RfbGluZXMgPSBb
XQogICAgICAgICAgICAgZm9yIGVudW1fbWVtYmVyIGluIGZpbHRlcih0eXBlX21lbWJlcl9pc19h
bm9ueW1vdXNfZW51bV90eXBlLCBvYmplY3RfdHlwZS5tZW1iZXJzKToKLSAgICAgICAgICAgICAg
ICBjcHBfcHJvdG9jb2xfdHlwZSA9IENwcEdlbmVyYXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3Jf
dHlwZV9tZW1iZXIoZW51bV9tZW1iZXIsIG9iamVjdF90eXBlLmRlY2xhcmF0aW9uKCkpCisgICAg
ICAgICAgICAgICAgY3BwX3Byb3RvY29sX3R5cGUgPSBDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9y
X2VudW0oZW51bV9tZW1iZXIudHlwZSwgJyVzOjolcycgJSAob2JqZWN0X3R5cGUucmF3X25hbWUo
KSwgdWNmaXJzdChlbnVtX21lbWJlci5tZW1iZXJfbmFtZSkpKQogICAgICAgICAgICAgICAgIG9i
amVjdF9saW5lcy5hcHBlbmQoZ2VuZXJhdGVfY29udmVyc2lvbl9tZXRob2RfYm9keShlbnVtX21l
bWJlci50eXBlLCBjcHBfcHJvdG9jb2xfdHlwZSkpCiAgICAgICAgICAgICBpZiBsZW4ob2JqZWN0
X2xpbmVzKToKICAgICAgICAgICAgICAgICBpZiBsZW4obGluZXMpOgpAQCAtMTgzLDggKzE4MSw3
IEBAIGNsYXNzIENwcFByb3RvY29sVHlwZXNJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihDcHBHZW5l
cmF0b3IpOgogICAgICAgICAgICAgZm9yIHR5cGVfZGVjbGFyYXRpb24gaW4gW2RlY2wgZm9yIGRl
Y2wgaW4gdHlwZV9kZWNsYXJhdGlvbnMgaWYgR2VuZXJhdG9yLnR5cGVfaGFzX29wZW5fZmllbGRz
KGRlY2wudHlwZSldOgogICAgICAgICAgICAgICAgIG9wZW5fbWVtYmVycyA9IEdlbmVyYXRvci5v
cGVuX2ZpZWxkcyh0eXBlX2RlY2xhcmF0aW9uKQogICAgICAgICAgICAgICAgIGZvciB0eXBlX21l
bWJlciBpbiBzb3J0ZWQob3Blbl9tZW1iZXJzLCBrZXk9bGFtYmRhIG1lbWJlcjogbWVtYmVyLm1l
bWJlcl9uYW1lKToKLSAgICAgICAgICAgICAgICAgICAgZmllbGRfbmFtZSA9ICc6Oicuam9pbihb
J0luc3BlY3RvcicsICdQcm90b2NvbCcsIGRvbWFpbi5kb21haW5fbmFtZSwgdWNmaXJzdCh0eXBl
X2RlY2xhcmF0aW9uLnR5cGVfbmFtZSksIHVjZmlyc3QodHlwZV9tZW1iZXIubWVtYmVyX25hbWUp
XSkKLSAgICAgICAgICAgICAgICAgICAgZG9tYWluX2xpbmVzLmFwcGVuZCgnY29uc3QgY2hhciog
JXMgPSAiJXMiOycgJSAoZmllbGRfbmFtZSwgdHlwZV9tZW1iZXIubWVtYmVyX25hbWUpKQorICAg
ICAgICAgICAgICAgICAgICBkb21haW5fbGluZXMuYXBwZW5kKCdjb25zdCBjaGFyKiBQcm90b2Nv
bDo6JXM6OiVzOjolc0tleSA9ICIlcyI7JyAlIChkb21haW4uZG9tYWluX25hbWUsIHVjZmlyc3Qo
dHlwZV9kZWNsYXJhdGlvbi50eXBlX25hbWUpLCB0eXBlX21lbWJlci5tZW1iZXJfbmFtZSwgdHlw
ZV9tZW1iZXIubWVtYmVyX25hbWUpKQogICAgICAgICAgICAgaWYgbGVuKGRvbWFpbl9saW5lcyk6
CiAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9j
b25kaXRpb24oZG9tYWluLmNvbmRpdGlvbiwgJ1xuJy5qb2luKGRvbWFpbl9saW5lcykpKQogCkBA
IC0yMjcsMzcgKzIyNCw1NCBAQCBjbGFzcyBDcHBQcm90b2NvbFR5cGVzSW1wbGVtZW50YXRpb25H
ZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKIAogICAgICAgICBsaW5lcy5hcHBlbmQoJ3ZvaWQgQmlu
ZGluZ1RyYWl0czwlcz46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKEpTT046OlZhbHVlKiB2
YWx1ZSknICUgKENwcEdlbmVyYXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZShvYmplY3Rf
ZGVjbGFyYXRpb24udHlwZSkpKQogICAgICAgICBsaW5lcy5hcHBlbmQoIiIieworICAgIEFTU0VS
VF9VTlVTRUQodmFsdWUsIHZhbHVlKTsKICNpZiBBU1NFUlRfRU5BQkxFRAotICAgIEFTU0VSVF9B
UkcodmFsdWUsIHZhbHVlKTsKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBvYmplY3Q7Ci0gICAg
Ym9vbCBjYXN0U3VjY2VlZGVkID0gdmFsdWUtPmFzT2JqZWN0KG9iamVjdCk7Ci0gICAgQVNTRVJU
X1VOVVNFRChjYXN0U3VjY2VlZGVkLCBjYXN0U3VjY2VlZGVkKTsiIiIpCisgICAgYXV0byBvYmpl
Y3QgPSB2YWx1ZS0+YXNPYmplY3QoKTsKKyAgICBBU1NFUlQob2JqZWN0KTsiIiIpCiAgICAgICAg
IGZvciB0eXBlX21lbWJlciBpbiByZXF1aXJlZF9tZW1iZXJzOgorICAgICAgICAgICAgbWVtYmVy
X3R5cGUgPSB0eXBlX21lbWJlci50eXBlCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKG1lbWJl
cl90eXBlLCBBbGlhc2VkVHlwZSk6CisgICAgICAgICAgICAgICAgbWVtYmVyX3R5cGUgPSBtZW1i
ZXJfdHlwZS5hbGlhc2VkX3R5cGUKKworICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShtZW1iZXJf
dHlwZSwgRW51bVR5cGUpOgorICAgICAgICAgICAgICAgIG1lbWJlcl90eXBlID0gQ3BwR2VuZXJh
dG9yLmNwcF90eXBlX2Zvcl9lbnVtKG1lbWJlcl90eXBlLCAnJXM6OiVzJyAlIChvYmplY3RfZGVj
bGFyYXRpb24udHlwZV9uYW1lLCB1Y2ZpcnN0KHR5cGVfbWVtYmVyLm1lbWJlcl9uYW1lKSkpCisg
ICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG1lbWJlcl90eXBlID0gQ3BwR2VuZXJh
dG9yLmNwcF9wcm90b2NvbF90eXBlX2Zvcl90eXBlKG1lbWJlcl90eXBlKQorCiAgICAgICAgICAg
ICBhcmdzID0gewogICAgICAgICAgICAgICAgICdtZW1iZXJOYW1lJzogdHlwZV9tZW1iZXIubWVt
YmVyX25hbWUsCi0gICAgICAgICAgICAgICAgJ2Fzc2VydE1ldGhvZCc6IENwcEdlbmVyYXRvci5j
cHBfYXNzZXJ0aW9uX21ldGhvZF9mb3JfdHlwZV9tZW1iZXIodHlwZV9tZW1iZXIsIG9iamVjdF9k
ZWNsYXJhdGlvbikKKyAgICAgICAgICAgICAgICAnbWVtYmVyVHlwZSc6IG1lbWJlcl90eXBlCiAg
ICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgiIiIgICAgewogICAgICAg
ICBhdXRvICUobWVtYmVyTmFtZSlzUG9zID0gb2JqZWN0LT5maW5kKCIlKG1lbWJlck5hbWUpcyJf
cyk7CiAgICAgICAgIEFTU0VSVCglKG1lbWJlck5hbWUpc1BvcyAhPSBvYmplY3QtPmVuZCgpKTsK
LSAgICAgICAgJShhc3NlcnRNZXRob2QpcyglKG1lbWJlck5hbWUpc1Bvcy0+dmFsdWUuZ2V0KCkp
OworICAgICAgICBCaW5kaW5nVHJhaXRzPCUobWVtYmVyVHlwZSlzPjo6YXNzZXJ0VmFsdWVIYXNF
eHBlY3RlZFR5cGUoJShtZW1iZXJOYW1lKXNQb3MtPnZhbHVlLnB0cigpKTsKICAgICB9IiIiICUg
YXJncykKIAogICAgICAgICBpZiBzaG91bGRfY291bnRfcHJvcGVydGllczoKICAgICAgICAgICAg
IGxpbmVzLmFwcGVuZCgnJykKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGludCBmb3Vu
ZFByb3BlcnRpZXNDb3VudCA9ICVzOycgJSBsZW4ocmVxdWlyZWRfbWVtYmVycykpCisgICAgICAg
ICAgICBsaW5lcy5hcHBlbmQoJyAgICBzaXplX3QgZm91bmRQcm9wZXJ0aWVzQ291bnQgPSAlczsn
ICUgbGVuKHJlcXVpcmVkX21lbWJlcnMpKQogCiAgICAgICAgIGZvciB0eXBlX21lbWJlciBpbiBv
cHRpb25hbF9tZW1iZXJzOgorICAgICAgICAgICAgbWVtYmVyX3R5cGUgPSB0eXBlX21lbWJlci50
eXBlCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKG1lbWJlcl90eXBlLCBBbGlhc2VkVHlwZSk6
CisgICAgICAgICAgICAgICAgbWVtYmVyX3R5cGUgPSBtZW1iZXJfdHlwZS5hbGlhc2VkX3R5cGUK
KworICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShtZW1iZXJfdHlwZSwgRW51bVR5cGUpOgorICAg
ICAgICAgICAgICAgIG1lbWJlcl90eXBlID0gQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl9lbnVt
KG1lbWJlcl90eXBlLCAnJXM6OiVzJyAlIChvYmplY3RfZGVjbGFyYXRpb24udHlwZV9uYW1lLCB1
Y2ZpcnN0KHR5cGVfbWVtYmVyLm1lbWJlcl9uYW1lKSkpCisgICAgICAgICAgICBlbHNlOgorICAg
ICAgICAgICAgICAgIG1lbWJlcl90eXBlID0gQ3BwR2VuZXJhdG9yLmNwcF9wcm90b2NvbF90eXBl
X2Zvcl90eXBlKG1lbWJlcl90eXBlKQorCiAgICAgICAgICAgICBhcmdzID0gewogICAgICAgICAg
ICAgICAgICdtZW1iZXJOYW1lJzogdHlwZV9tZW1iZXIubWVtYmVyX25hbWUsCi0gICAgICAgICAg
ICAgICAgJ2Fzc2VydE1ldGhvZCc6IENwcEdlbmVyYXRvci5jcHBfYXNzZXJ0aW9uX21ldGhvZF9m
b3JfdHlwZV9tZW1iZXIodHlwZV9tZW1iZXIsIG9iamVjdF9kZWNsYXJhdGlvbikKKyAgICAgICAg
ICAgICAgICAnbWVtYmVyVHlwZSc6IG1lbWJlcl90eXBlCiAgICAgICAgICAgICB9CiAKICAgICAg
ICAgICAgIGxpbmVzLmFwcGVuZCgiIiIgICAgewogICAgICAgICBhdXRvICUobWVtYmVyTmFtZSlz
UG9zID0gb2JqZWN0LT5maW5kKCIlKG1lbWJlck5hbWUpcyJfcyk7CiAgICAgICAgIGlmICglKG1l
bWJlck5hbWUpc1BvcyAhPSBvYmplY3QtPmVuZCgpKSB7Ci0gICAgICAgICAgICAlKGFzc2VydE1l
dGhvZClzKCUobWVtYmVyTmFtZSlzUG9zLT52YWx1ZS5nZXQoKSk7IiIiICUgYXJncykKKyAgICAg
ICAgICAgIEJpbmRpbmdUcmFpdHM8JShtZW1iZXJUeXBlKXM+Ojphc3NlcnRWYWx1ZUhhc0V4cGVj
dGVkVHlwZSglKG1lbWJlck5hbWUpc1Bvcy0+dmFsdWUucHRyKCkpOyIiIiAlIGFyZ3MpCiAKICAg
ICAgICAgICAgIGlmIHNob3VsZF9jb3VudF9wcm9wZXJ0aWVzOgogICAgICAgICAgICAgICAgIGxp
bmVzLmFwcGVuZCgnICAgICAgICAgICAgKytmb3VuZFByb3BlcnRpZXNDb3VudDsnKQpAQCAtMjY3
LDI3ICsyODEsMjIgQEAgY2xhc3MgQ3BwUHJvdG9jb2xUeXBlc0ltcGxlbWVudGF0aW9uR2VuZXJh
dG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAgIGlmIHNob3VsZF9jb3VudF9wcm9wZXJ0aWVzOgog
ICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgaWYgKGZvdW5kUHJvcGVydGllc0NvdW50ICE9
IG9iamVjdC0+c2l6ZSgpKScpCiAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgRkFU
QUwoIlVuZXhwZWN0ZWQgcHJvcGVydGllcyBpbiBvYmplY3Q6ICVzXFxuIiwgb2JqZWN0LT50b0pT
T05TdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSk7JykKLSAgICAgICAgbGluZXMuYXBwZW5kKCcjZWxz
ZSAvLyBBU1NFUlRfRU5BQkxFRCcpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIFVOVVNFRF9Q
QVJBTSh2YWx1ZSk7JykKLSAgICAgICAgbGluZXMuYXBwZW5kKCcjZW5kaWYgLy8gQVNTRVJUX0VO
QUJMRUQnKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyNlbmRpZicpCiAgICAgICAgIGxpbmVzLmFw
cGVuZCgnfScpCiAgICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCiAKICAgICBkZWYgX2dl
bmVyYXRlX2Fzc2VydGlvbl9mb3JfZW51bShzZWxmLCBlbnVtX21lbWJlciwgb2JqZWN0X2RlY2xh
cmF0aW9uKToKICAgICAgICAgbGluZXMgPSBbXQotICAgICAgICBsaW5lcy5hcHBlbmQoJ3ZvaWQg
JXMoSlNPTjo6VmFsdWUqIHZhbHVlKScgJSBDcHBHZW5lcmF0b3IuY3BwX2Fzc2VydGlvbl9tZXRo
b2RfZm9yX3R5cGVfbWVtYmVyKGVudW1fbWVtYmVyLCBvYmplY3RfZGVjbGFyYXRpb24pKQorICAg
ICAgICBsaW5lcy5hcHBlbmQoJ3ZvaWQgQmluZGluZ1RyYWl0czwlcz46OmFzc2VydFZhbHVlSGFz
RXhwZWN0ZWRUeXBlKEpTT046OlZhbHVlKiB2YWx1ZSknICUgQ3BwR2VuZXJhdG9yLmNwcF90eXBl
X2Zvcl9lbnVtKGVudW1fbWVtYmVyLnR5cGUsICclczo6JXMnICUgKG9iamVjdF9kZWNsYXJhdGlv
bi50eXBlX25hbWUsIHVjZmlyc3QoZW51bV9tZW1iZXIubWVtYmVyX25hbWUpKSkpCiAgICAgICAg
IGxpbmVzLmFwcGVuZCgneycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIEFTU0VSVF9VTlVT
RUQodmFsdWUsIHZhbHVlKTsnKQogICAgICAgICBsaW5lcy5hcHBlbmQoJyNpZiBBU1NFUlRfRU5B
QkxFRCcpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIEFTU0VSVF9BUkcodmFsdWUsIHZhbHVl
KTsnKQotICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBTdHJpbmcgcmVzdWx0OycpCi0gICAgICAg
IGxpbmVzLmFwcGVuZCgnICAgIGJvb2wgY2FzdFN1Y2NlZWRlZCA9IHZhbHVlLT5hc1N0cmluZyhy
ZXN1bHQpOycpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIEFTU0VSVChjYXN0U3VjY2VlZGVk
KTsnKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBhdXRvIHJlc3VsdCA9IHZhbHVlLT5hc1N0
cmluZygpOycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIEFTU0VSVChyZXN1bHQpOycpCiAK
ICAgICAgICAgYXNzZXJ0X2NvbmRpdGlvbiA9ICcgfHwgJy5qb2luKFsncmVzdWx0ID09ICIlcyIn
ICUgZW51bV92YWx1ZSBmb3IgZW51bV92YWx1ZSBpbiBlbnVtX21lbWJlci50eXBlLmVudW1fdmFs
dWVzKCldKQogICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBBU1NFUlQoJXMpOycgJSBhc3NlcnRf
Y29uZGl0aW9uKQotICAgICAgICBsaW5lcy5hcHBlbmQoJyNlbHNlIC8vIEFTU0VSVF9FTkFCTEVE
JykKLSAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsnKQotICAg
ICAgICBsaW5lcy5hcHBlbmQoJyNlbmRpZiAvLyBBU1NFUlRfRU5BQkxFRCcpCisgICAgICAgIGxp
bmVzLmFwcGVuZCgnI2VuZGlmJykKICAgICAgICAgbGluZXMuYXBwZW5kKCd9JykKIAogICAgICAg
ICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19iYWNrZW5kX2Rpc3Bh
dGNoZXJfaGVhZGVyLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5CmluZGV4
IDNlMTM5NzRhYjM2MjEzZGE3OGI3MmNhMjMyZTc3ZTFhOTk0YzU1ZjcuLjk2YjZiNjEyNmRjN2Vk
ODEzMmMzZjJlMjM1ZGUzZjcwMWRjZjg5MTEgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfYmFja2VuZF9kaXNw
YXRjaGVyX2hlYWRlci5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkK
QEAgLTMzLDEzICszMywxMyBAQCBmcm9tIHN0cmluZyBpbXBvcnQgVGVtcGxhdGUKIHRyeToKICAg
ICBmcm9tIC5jcHBfZ2VuZXJhdG9yIGltcG9ydCBDcHBHZW5lcmF0b3IKICAgICBmcm9tIC5nZW5l
cmF0b3IgaW1wb3J0IEdlbmVyYXRvcgotICAgIGZyb20gLm1vZGVscyBpbXBvcnQgRnJhbWV3b3Jr
cworICAgIGZyb20gLm1vZGVscyBpbXBvcnQgRW51bVR5cGUsIEFsaWFzZWRUeXBlLCBGcmFtZXdv
cmtzCiAgICAgZnJvbSAub2JqY19nZW5lcmF0b3IgaW1wb3J0IE9iakNHZW5lcmF0b3IKICAgICBm
cm9tIC5vYmpjX2dlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IE9iakNHZW5lcmF0b3JUZW1wbGF0
ZXMgYXMgT2JqQ1RlbXBsYXRlcwogZXhjZXB0IFZhbHVlRXJyb3I6CiAgICAgZnJvbSBjcHBfZ2Vu
ZXJhdG9yIGltcG9ydCBDcHBHZW5lcmF0b3IKICAgICBmcm9tIGdlbmVyYXRvciBpbXBvcnQgR2Vu
ZXJhdG9yCi0gICAgZnJvbSBtb2RlbHMgaW1wb3J0IEZyYW1ld29ya3MKKyAgICBmcm9tIG1vZGVs
cyBpbXBvcnQgRW51bVR5cGUsIEFsaWFzZWRUeXBlLCBGcmFtZXdvcmtzCiAgICAgZnJvbSBvYmpj
X2dlbmVyYXRvciBpbXBvcnQgT2JqQ0dlbmVyYXRvcgogICAgIGZyb20gb2JqY19nZW5lcmF0b3Jf
dGVtcGxhdGVzIGltcG9ydCBPYmpDR2VuZXJhdG9yVGVtcGxhdGVzIGFzIE9iakNUZW1wbGF0ZXMK
IApAQCAtMTAzLDkgKzEwMywxOSBAQCBjbGFzcyBPYmpDQmFja2VuZERpc3BhdGNoZXJIZWFkZXJH
ZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6CiAKICAgICBkZWYgX2dlbmVyYXRlX29iamNfaGFuZGxl
cl9kZWNsYXJhdGlvbl9mb3JfY29tbWFuZChzZWxmLCBjb21tYW5kKToKICAgICAgICAgbGluZXMg
PSBbXQotICAgICAgICBwYXJhbWV0ZXJzID0gWydsb25nIHJlcXVlc3RJZCddCi0gICAgICAgIGZv
ciBfcGFyYW1ldGVyIGluIGNvbW1hbmQuY2FsbF9wYXJhbWV0ZXJzOgotICAgICAgICAgICAgcGFy
YW1ldGVycy5hcHBlbmQoJyVzIGluXyVzJyAlIChDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX3Vu
Y2hlY2tlZF9mb3JtYWxfaW5fcGFyYW1ldGVyKF9wYXJhbWV0ZXIpLCBfcGFyYW1ldGVyLnBhcmFt
ZXRlcl9uYW1lKSkKKyAgICAgICAgcGFyYW1ldGVycyA9IFsnbG9uZyBwcm90b2NvbF9jYWxsSWQn
XQorICAgICAgICBmb3IgcGFyYW1ldGVyIGluIGNvbW1hbmQuY2FsbF9wYXJhbWV0ZXJzOgorICAg
ICAgICAgICAgcGFyYW1ldGVyX3R5cGUgPSBwYXJhbWV0ZXIudHlwZQorICAgICAgICAgICAgaWYg
aXNpbnN0YW5jZShwYXJhbWV0ZXJfdHlwZSwgQWxpYXNlZFR5cGUpOgorICAgICAgICAgICAgICAg
IHBhcmFtZXRlcl90eXBlID0gcGFyYW1ldGVyX3R5cGUuYWxpYXNlZF90eXBlCisgICAgICAgICAg
ICBpZiBpc2luc3RhbmNlKHBhcmFtZXRlcl90eXBlLCBFbnVtVHlwZSk6CisgICAgICAgICAgICAg
ICAgcGFyYW1ldGVyX3R5cGUgPSBwYXJhbWV0ZXJfdHlwZS5wcmltaXRpdmVfdHlwZQorCisgICAg
ICAgICAgICBwYXJhbWV0ZXJfbmFtZSA9IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZQorICAgICAg
ICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAgIHBhcmFtZXRl
cl9uYW1lID0gJ29wdF8nICsgcGFyYW1ldGVyX25hbWUKKworICAgICAgICAgICAgcGFyYW1ldGVy
cy5hcHBlbmQoJyVzICVzJyAlIChDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX2NvbW1hbmRfcGFy
YW1ldGVyKHBhcmFtZXRlcl90eXBlLCBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwpLCBwYXJhbWV0ZXJf
bmFtZSkpCiAKICAgICAgICAgY29tbWFuZF9hcmdzID0gewogICAgICAgICAgICAgJ2NvbW1hbmRO
YW1lJzogY29tbWFuZC5jb21tYW5kX25hbWUsCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2JhY2tlbmRfZGlz
cGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxl
bWVudGF0aW9uLnB5CmluZGV4IGY1ZWU4ZTU4Mzk4ZDY5YmFlNGJlYjRjMTg2NzA2M2NjZDUyMjA5
ZWMuLjFiZDk2MzViZDMyNTE5OTE1MWNmZDk4MDEzYTUxMjcyODk4OGQxYjkgMTAwNzU1Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRl
X29iamNfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5CisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfYmFj
a2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5CkBAIC05MCw5ICs5MCwyMCBAQCBjbGFz
cyBPYmpDQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihPYmpDR2VuZXJh
dG9yKToKIAogICAgIGRlZiBfZ2VuZXJhdGVfaGFuZGxlcl9pbXBsZW1lbnRhdGlvbl9mb3JfY29t
bWFuZChzZWxmLCBkb21haW4sIGNvbW1hbmQpOgogICAgICAgICBsaW5lcyA9IFtdCi0gICAgICAg
IHBhcmFtZXRlcnMgPSBbJ2xvbmcgcmVxdWVzdElkJ10KKyAgICAgICAgcGFyYW1ldGVycyA9IFsn
bG9uZyBwcm90b2NvbF9jYWxsSWQnXQogICAgICAgICBmb3IgcGFyYW1ldGVyIGluIGNvbW1hbmQu
Y2FsbF9wYXJhbWV0ZXJzOgotICAgICAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoJyVzIGluXyVz
JyAlIChDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX3VuY2hlY2tlZF9mb3JtYWxfaW5fcGFyYW1l
dGVyKHBhcmFtZXRlciksIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkpCisgICAgICAgICAgICBw
YXJhbWV0ZXJfdHlwZSA9IHBhcmFtZXRlci50eXBlCisgICAgICAgICAgICBpZiBpc2luc3RhbmNl
KHBhcmFtZXRlcl90eXBlLCBBbGlhc2VkVHlwZSk6CisgICAgICAgICAgICAgICAgcGFyYW1ldGVy
X3R5cGUgPSBwYXJhbWV0ZXJfdHlwZS5hbGlhc2VkX3R5cGUKKyAgICAgICAgICAgIGlmIGlzaW5z
dGFuY2UocGFyYW1ldGVyX3R5cGUsIEVudW1UeXBlKToKKyAgICAgICAgICAgICAgICBwYXJhbWV0
ZXJfdHlwZSA9IHBhcmFtZXRlcl90eXBlLnByaW1pdGl2ZV90eXBlCisKKyAgICAgICAgICAgIHBh
cmFtZXRlcl9uYW1lID0gcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lCisgICAgICAgICAgICBpZiBw
YXJhbWV0ZXIuaXNfb3B0aW9uYWw6CisgICAgICAgICAgICAgICAgcGFyYW1ldGVyX25hbWUgPSAn
b3B0XycgKyBwYXJhbWV0ZXJfbmFtZQorICAgICAgICAgICAgcGFyYW1ldGVyX25hbWUgPSAnaW5f
JyArIHBhcmFtZXRlcl9uYW1lCisKKyAgICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKCclcyAl
cycgJSAoQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl9jb21tYW5kX3BhcmFtZXRlcihwYXJhbWV0
ZXJfdHlwZSwgcGFyYW1ldGVyLmlzX29wdGlvbmFsKSwgcGFyYW1ldGVyX25hbWUpKQogCiAgICAg
ICAgIGNvbW1hbmRfYXJncyA9IHsKICAgICAgICAgICAgICdkb21haW5OYW1lJzogZG9tYWluLmRv
bWFpbl9uYW1lLApAQCAtMTE1LDQ1ICsxMjYsNTQgQEAgY2xhc3MgT2JqQ0JhY2tlbmREaXNwYXRj
aGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6CiAgICAgICAgIGlmIGNv
bW1hbmQucmV0dXJuX3BhcmFtZXRlcnM6CiAgICAgICAgICAgICBzdWNjZXNzX2Jsb2NrX3BhcmFt
ZXRlcnMgPSBbXQogICAgICAgICAgICAgZm9yIHBhcmFtZXRlciBpbiBjb21tYW5kLnJldHVybl9w
YXJhbWV0ZXJzOgorICAgICAgICAgICAgICAgIG91dF9wYXJhbV9uYW1lID0gcGFyYW1ldGVyLnBh
cmFtZXRlcl9uYW1lCisgICAgICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgor
ICAgICAgICAgICAgICAgICAgICBvdXRfcGFyYW1fbmFtZSA9ICdvcHRfJyArIG91dF9wYXJhbV9u
YW1lCisgICAgICAgICAgICAgICAgb3V0X3BhcmFtX25hbWUgPSAnb3V0XycgKyBvdXRfcGFyYW1f
bmFtZQogICAgICAgICAgICAgICAgIG9iamNfdHlwZSA9IHNlbGYub2JqY190eXBlX2Zvcl9wYXJh
bShkb21haW4sIGNvbW1hbmQuY29tbWFuZF9uYW1lLCBwYXJhbWV0ZXIpCi0gICAgICAgICAgICAg
ICAgdmFyX25hbWUgPSBPYmpDR2VuZXJhdG9yLmlkZW50aWZpZXJfdG9fb2JqY19pZGVudGlmaWVy
KHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkKLSAgICAgICAgICAgICAgICBzdWNjZXNzX2Jsb2Nr
X3BhcmFtZXRlcnMuYXBwZW5kKGpvaW5fdHlwZV9hbmRfbmFtZShvYmpjX3R5cGUsIHZhcl9uYW1l
KSkKKyAgICAgICAgICAgICAgICBzdWNjZXNzX2Jsb2NrX3BhcmFtZXRlcnMuYXBwZW5kKGpvaW5f
dHlwZV9hbmRfbmFtZShvYmpjX3R5cGUsIG91dF9wYXJhbV9uYW1lKSkKICAgICAgICAgICAgIGxp
bmVzLmFwcGVuZCgnICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF4oJXMpIHsnICUgJywgJy5qb2lu
KHN1Y2Nlc3NfYmxvY2tfcGFyYW1ldGVycykpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBs
aW5lcy5hcHBlbmQoJyAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeeycpCiAKKyAgICAgICAgbGlu
ZXMuYXBwZW5kKCcgICAgICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmpl
Y3Q6OmNyZWF0ZSgpOycpCiAgICAgICAgIGlmIGNvbW1hbmQucmV0dXJuX3BhcmFtZXRlcnM6Ci0g
ICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0
T2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsnKQotCiAgICAgICAgICAgICByZXF1aXJl
ZF9wb2ludGVyX3BhcmFtZXRlcnMgPSBbcGFyYW1ldGVyIGZvciBwYXJhbWV0ZXIgaW4gY29tbWFu
ZC5yZXR1cm5fcGFyYW1ldGVycyBpZiBub3QgcGFyYW1ldGVyLmlzX29wdGlvbmFsIGFuZCBPYmpD
R2VuZXJhdG9yLmlzX3R5cGVfb2JqY19wb2ludGVyX3R5cGUocGFyYW1ldGVyLnR5cGUpXQogICAg
ICAgICAgICAgZm9yIHBhcmFtZXRlciBpbiByZXF1aXJlZF9wb2ludGVyX3BhcmFtZXRlcnM6Ci0g
ICAgICAgICAgICAgICAgdmFyX25hbWUgPSBPYmpDR2VuZXJhdG9yLmlkZW50aWZpZXJfdG9fb2Jq
Y19pZGVudGlmaWVyKHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkKLSAgICAgICAgICAgICAgICBs
aW5lcy5hcHBlbmQoJyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVU
RVIoJXMsIEAiJXMiKTsnICUgKHZhcl9uYW1lLCB2YXJfbmFtZSkpCisgICAgICAgICAgICAgICAg
b3V0X3BhcmFtX25hbWUgPSBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUKKyAgICAgICAgICAgICAg
ICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6CisgICAgICAgICAgICAgICAgICAgIG91dF9wYXJh
bV9uYW1lID0gJ29wdF8nICsgb3V0X3BhcmFtX25hbWUKKyAgICAgICAgICAgICAgICBvdXRfcGFy
YW1fbmFtZSA9ICdvdXRfJyArIG91dF9wYXJhbV9uYW1lCisgICAgICAgICAgICAgICAgbGluZXMu
YXBwZW5kKCcgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKCVz
LCBAIiVzIik7JyAlIChvdXRfcGFyYW1fbmFtZSwgcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKSkK
ICAgICAgICAgICAgICAgICBvYmpjX2FycmF5X2NsYXNzID0gc2VsZi5vYmpjX2NsYXNzX2Zvcl9h
cnJheV90eXBlKHBhcmFtZXRlci50eXBlKQogICAgICAgICAgICAgICAgIGlmIG9iamNfYXJyYXlf
Y2xhc3MgYW5kIG9iamNfYXJyYXlfY2xhc3Muc3RhcnRzd2l0aChzZWxmLm9iamNfcHJlZml4KCkp
OgotICAgICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgVEhST1dfRVhDRVBU
SU9OX0ZPUl9CQURfVFlQRV9JTl9BUlJBWSglcywgWyVzIGNsYXNzXSk7JyAlICh2YXJfbmFtZSwg
b2JqY19hcnJheV9jbGFzcykpCisgICAgICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAg
ICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFX0lOX0FSUkFZKCVzLCBbJXMgY2xhc3Nd
KTsnICUgKG91dF9wYXJhbV9uYW1lLCBvYmpjX2FycmF5X2NsYXNzKSkKIAogICAgICAgICAgICAg
b3B0aW9uYWxfcG9pbnRlcl9wYXJhbWV0ZXJzID0gW3BhcmFtZXRlciBmb3IgcGFyYW1ldGVyIGlu
IGNvbW1hbmQucmV0dXJuX3BhcmFtZXRlcnMgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsIGFuZCBP
YmpDR2VuZXJhdG9yLmlzX3R5cGVfb2JqY19wb2ludGVyX3R5cGUocGFyYW1ldGVyLnR5cGUpXQog
ICAgICAgICAgICAgZm9yIHBhcmFtZXRlciBpbiBvcHRpb25hbF9wb2ludGVyX3BhcmFtZXRlcnM6
Ci0gICAgICAgICAgICAgICAgdmFyX25hbWUgPSBPYmpDR2VuZXJhdG9yLmlkZW50aWZpZXJfdG9f
b2JqY19pZGVudGlmaWVyKHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkKLSAgICAgICAgICAgICAg
ICBsaW5lcy5hcHBlbmQoJyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxf
UEFSQU1FVEVSKCVzLCBAIiVzIik7JyAlICh2YXJfbmFtZSwgdmFyX25hbWUpKQorICAgICAgICAg
ICAgICAgIG91dF9wYXJhbV9uYW1lID0gcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lCisgICAgICAg
ICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAgICAgICBv
dXRfcGFyYW1fbmFtZSA9ICdvcHRfJyArIG91dF9wYXJhbV9uYW1lCisgICAgICAgICAgICAgICAg
b3V0X3BhcmFtX25hbWUgPSAnb3V0XycgKyBvdXRfcGFyYW1fbmFtZQorICAgICAgICAgICAgICAg
IGxpbmVzLmFwcGVuZCgnICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9Q
QVJBTUVURVIoJXMsIEAiJXMiKTsnICUgKG91dF9wYXJhbV9uYW1lLCBwYXJhbWV0ZXIucGFyYW1l
dGVyX25hbWUpKQogICAgICAgICAgICAgICAgIG9iamNfYXJyYXlfY2xhc3MgPSBzZWxmLm9iamNf
Y2xhc3NfZm9yX2FycmF5X3R5cGUocGFyYW1ldGVyLnR5cGUpCiAgICAgICAgICAgICAgICAgaWYg
b2JqY19hcnJheV9jbGFzcyBhbmQgb2JqY19hcnJheV9jbGFzcy5zdGFydHN3aXRoKHNlbGYub2Jq
Y19wcmVmaXgoKSk6Ci0gICAgICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBU
SFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFX0lOX09QVElPTkFMX0FSUkFZKCVzLCBbJXMgY2xh
c3NdKTsnICUgKHZhcl9uYW1lLCBvYmpjX2FycmF5X2NsYXNzKSkKKyAgICAgICAgICAgICAgICAg
ICAgbGluZXMuYXBwZW5kKCcgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEVfSU5f
T1BUSU9OQUxfQVJSQVkoJXMsIFslcyBjbGFzc10pOycgJSAob3V0X3BhcmFtX25hbWUsIG9iamNf
YXJyYXlfY2xhc3MpKQogCiAgICAgICAgICAgICBmb3IgcGFyYW1ldGVyIGluIGNvbW1hbmQucmV0
dXJuX3BhcmFtZXRlcnM6CisgICAgICAgICAgICAgICAgb3V0X3BhcmFtX25hbWUgPSBwYXJhbWV0
ZXIucGFyYW1ldGVyX25hbWUKKyAgICAgICAgICAgICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9u
YWw6CisgICAgICAgICAgICAgICAgICAgIG91dF9wYXJhbV9uYW1lID0gJ29wdF8nICsgb3V0X3Bh
cmFtX25hbWUKKyAgICAgICAgICAgICAgICBvdXRfcGFyYW1fbmFtZSA9ICdvdXRfJyArIG91dF9w
YXJhbV9uYW1lCiAgICAgICAgICAgICAgICAga2V5ZWRfc2V0X21ldGhvZCA9IENwcEdlbmVyYXRv
ci5jcHBfc2V0dGVyX21ldGhvZF9mb3JfdHlwZShwYXJhbWV0ZXIudHlwZSkKLSAgICAgICAgICAg
ICAgICB2YXJfbmFtZSA9IE9iakNHZW5lcmF0b3IuaWRlbnRpZmllcl90b19vYmpjX2lkZW50aWZp
ZXIocGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKQotICAgICAgICAgICAgICAgIHZhcl9leHByZXNz
aW9uID0gJyolcycgJSB2YXJfbmFtZSBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwgZWxzZSB2YXJf
bmFtZQorICAgICAgICAgICAgICAgIHZhcl9leHByZXNzaW9uID0gJyolcycgJSBvdXRfcGFyYW1f
bmFtZSBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwgZWxzZSBvdXRfcGFyYW1fbmFtZQogICAgICAg
ICAgICAgICAgIGV4cG9ydF9leHByZXNzaW9uID0gc2VsZi5vYmpjX3Byb3RvY29sX2V4cG9ydF9l
eHByZXNzaW9uX2Zvcl92YXJpYWJsZShwYXJhbWV0ZXIudHlwZSwgdmFyX2V4cHJlc3Npb24pCiAg
ICAgICAgICAgICAgICAgaWYgbm90IHBhcmFtZXRlci5pc19vcHRpb25hbDoKLSAgICAgICAgICAg
ICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIHJlc3VsdE9iamVjdC0+JXMoIiVzIl9zLCAl
cyk7JyAlIChrZXllZF9zZXRfbWV0aG9kLCBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUsIGV4cG9y
dF9leHByZXNzaW9uKSkKKyAgICAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAg
IHByb3RvY29sX2pzb25NZXNzYWdlLT4lcygiJXMiX3MsICVzKTsnICUgKGtleWVkX3NldF9tZXRo
b2QsIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwgZXhwb3J0X2V4cHJlc3Npb24pKQogICAgICAg
ICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAg
ICBpZiAoJXMpJyAlIHZhcl9uYW1lKQotICAgICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQo
JyAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+JXMoIiVzIl9zLCAlcyk7JyAlIChrZXllZF9zZXRf
bWV0aG9kLCBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUsIGV4cG9ydF9leHByZXNzaW9uKSkKLSAg
ICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5k
UmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdE9iamVjdCksIGZhbHNlKTsnKQotICAg
ICAgICBlbHNlOgotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIGJhY2tlbmREaXNw
YXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIEpTT046Ok9iamVjdDo6Y3JlYXRlKCks
IGZhbHNlKTsnKQorICAgICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgaWYg
KCEhJXMpJyAlIG91dF9wYXJhbV9uYW1lKQorICAgICAgICAgICAgICAgICAgICBsaW5lcy5hcHBl
bmQoJyAgICAgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT4lcygiJXMiX3MsICVzKTsnICUg
KGtleWVkX3NldF9tZXRob2QsIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwgZXhwb3J0X2V4cHJl
c3Npb24pKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIo
KS0+c2VuZFJlc3BvbnNlKHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9qc29uTWVz
c2FnZSksIGZhbHNlKTsnKQogCiAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIH07JykKICAgICAg
ICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKQEAgLTE2NiwxNyArMTg2LDI3IEBAIGNsYXNzIE9i
akNCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKE9iakNHZW5lcmF0b3Ip
OgogICAgICAgICBkZWYgaW5fcGFyYW1fZXhwcmVzc2lvbihwYXJhbV9uYW1lLCBwYXJhbWV0ZXIp
OgogICAgICAgICAgICAgX3R5cGUgPSBwYXJhbWV0ZXIudHlwZQogICAgICAgICAgICAgaWYgaXNp
bnN0YW5jZShfdHlwZSwgQWxpYXNlZFR5cGUpOgotICAgICAgICAgICAgICAgIF90eXBlID0gX3R5
cGUuYWxpYXNlZF90eXBlICAjIEZhbGwgdGhyb3VnaCB0byBlbnVtIG9yIHByaW1pdGl2ZS4KKyAg
ICAgICAgICAgICAgICBfdHlwZSA9IF90eXBlLmFsaWFzZWRfdHlwZQogICAgICAgICAgICAgaWYg
aXNpbnN0YW5jZShfdHlwZSwgRW51bVR5cGUpOgotICAgICAgICAgICAgICAgIF90eXBlID0gX3R5
cGUucHJpbWl0aXZlX3R5cGUgICMgRmFsbCB0aHJvdWdoIHRvIHByaW1pdGl2ZS4KLSAgICAgICAg
ICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIFByaW1pdGl2ZVR5cGUpOgotICAgICAgICAgICAgICAg
IGlmIF90eXBlLnJhd19uYW1lKCkgaW4gWydhcnJheScsICdhbnknLCAnb2JqZWN0J106Ci0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiAnJiVzJyAlIHBhcmFtX25hbWUgaWYgbm90IHBhcmFtZXRl
ci5pc19vcHRpb25hbCBlbHNlIHBhcmFtX25hbWUKLSAgICAgICAgICAgICAgICByZXR1cm4gJyol
cycgJSBwYXJhbV9uYW1lIGlmIHBhcmFtZXRlci5pc19vcHRpb25hbCBlbHNlIHBhcmFtX25hbWUK
LSAgICAgICAgICAgIHJldHVybiAnJiVzJyAlIHBhcmFtX25hbWUgaWYgbm90IHBhcmFtZXRlci5p
c19vcHRpb25hbCBlbHNlIHBhcmFtX25hbWUKKyAgICAgICAgICAgICAgICBfdHlwZSA9IF90eXBl
LnByaW1pdGl2ZV90eXBlCisKKyAgICAgICAgICAgIGlmIF90eXBlLmlzX2VudW0oKToKKyAgICAg
ICAgICAgICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6CisgICAgICAgICAgICAgICAgICAg
IHBhcmFtX25hbWUgPSAnKicgKyBwYXJhbV9uYW1lCisgICAgICAgICAgICAgICAgcmV0dXJuICdQ
cm90b2NvbDo6SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUoJXMpJyAlIHBhcmFtX25hbWUK
KyAgICAgICAgICAgIGlmIENwcEdlbmVyYXRvci5zaG91bGRfcmVsZWFzZV9hcmd1bWVudChfdHlw
ZSwgcGFyYW1ldGVyLmlzX29wdGlvbmFsKToKKyAgICAgICAgICAgICAgICByZXR1cm4gcGFyYW1f
bmFtZSArICcucmVsZWFzZU5vbk51bGwoKScKKyAgICAgICAgICAgIGlmIENwcEdlbmVyYXRvci5z
aG91bGRfZGVyZWZlcmVuY2VfYXJndW1lbnQoX3R5cGUsIHBhcmFtZXRlci5pc19vcHRpb25hbCk6
CisgICAgICAgICAgICAgICAgcmV0dXJuICcqJyArIHBhcmFtX25hbWUKKyAgICAgICAgICAgIGlm
IENwcEdlbmVyYXRvci5zaG91bGRfbW92ZV9hcmd1bWVudChfdHlwZSwgcGFyYW1ldGVyLmlzX29w
dGlvbmFsKToKKyAgICAgICAgICAgICAgICByZXR1cm4gJ1dURk1vdmUoJXMpJyAlIHBhcmFtX25h
bWUKKyAgICAgICAgICAgIHJldHVybiBwYXJhbV9uYW1lCiAKICAgICAgICAgZm9yIHBhcmFtZXRl
ciBpbiBjb21tYW5kLmNhbGxfcGFyYW1ldGVyczoKLSAgICAgICAgICAgIGluX3BhcmFtX25hbWUg
PSAnaW5fJXMnICUgcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lCisgICAgICAgICAgICBpbl9wYXJh
bV9uYW1lID0gcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lCisgICAgICAgICAgICBpZiBwYXJhbWV0
ZXIuaXNfb3B0aW9uYWw6CisgICAgICAgICAgICAgICAgaW5fcGFyYW1fbmFtZSA9ICdvcHRfJyAr
IGluX3BhcmFtX25hbWUKKyAgICAgICAgICAgIGluX3BhcmFtX25hbWUgPSAnaW5fJyArIGluX3Bh
cmFtX25hbWUKICAgICAgICAgICAgIG9iamNfaW5fcGFyYW1fbmFtZSA9ICdvXyVzJyAlIGluX3Bh
cmFtX25hbWUKICAgICAgICAgICAgIG9iamNfdHlwZSA9IHNlbGYub2JqY190eXBlX2Zvcl9wYXJh
bShkb21haW4sIGNvbW1hbmQuY29tbWFuZF9uYW1lLCBwYXJhbWV0ZXIsIEZhbHNlKQogICAgICAg
ICAgICAgaWYgaXNpbnN0YW5jZShwYXJhbWV0ZXIudHlwZSwgRW51bVR5cGUpOgpAQCAtMTk0LDEx
ICsyMjQsOCBAQCBjbGFzcyBPYmpDQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVy
YXRvcihPYmpDR2VuZXJhdG9yKToKIAogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAg
ICBsaW5lcy5hcHBlbmQoJyAgICAlczsnICUgam9pbl90eXBlX2FuZF9uYW1lKG9iamNfdHlwZSwg
b2JqY19pbl9wYXJhbV9uYW1lKSkKLSAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBp
ZiAoJXMpJyAlIGluX3BhcmFtX25hbWUpCisgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcg
ICAgaWYgKCEhJXMpJyAlIGluX3BhcmFtX25hbWUpCiAgICAgICAgICAgICAgICAgbGluZXMuYXBw
ZW5kKCcgICAgICAgICVzID0gJXM7JyAlIChvYmpjX2luX3BhcmFtX25hbWUsIGltcG9ydF9leHBy
ZXNzaW9uKSkKLQotICAgICAgICBpZiBsaW5lczoKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgn
JykKICAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKIAogICAgIGRlZiBfZ2VuZXJhdGVf
aW52b2NhdGlvbl9mb3JfY29tbWFuZChzZWxmLCBkb21haW4sIGNvbW1hbmQpOgpAQCAtMjA2LDcg
KzIzMywxMCBAQCBjbGFzcyBPYmpDQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVy
YXRvcihPYmpDR2VuZXJhdG9yKToKICAgICAgICAgcGFpcnMuYXBwZW5kKCdXaXRoRXJyb3JDYWxs
YmFjazplcnJvckNhbGxiYWNrJykKICAgICAgICAgcGFpcnMuYXBwZW5kKCdzdWNjZXNzQ2FsbGJh
Y2s6c3VjY2Vzc0NhbGxiYWNrJykKICAgICAgICAgZm9yIHBhcmFtZXRlciBpbiBjb21tYW5kLmNh
bGxfcGFyYW1ldGVyczoKLSAgICAgICAgICAgIGluX3BhcmFtX25hbWUgPSAnaW5fJXMnICUgcGFy
YW1ldGVyLnBhcmFtZXRlcl9uYW1lCisgICAgICAgICAgICBpbl9wYXJhbV9uYW1lID0gcGFyYW1l
dGVyLnBhcmFtZXRlcl9uYW1lCisgICAgICAgICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6
CisgICAgICAgICAgICAgICAgaW5fcGFyYW1fbmFtZSA9ICdvcHRfJyArIGluX3BhcmFtX25hbWUK
KyAgICAgICAgICAgIGluX3BhcmFtX25hbWUgPSAnaW5fJyArIGluX3BhcmFtX25hbWUKICAgICAg
ICAgICAgIG9iamNfaW5fcGFyYW1fZXhwcmVzc2lvbiA9ICdvXyVzJyAlIGluX3BhcmFtX25hbWUK
ICAgICAgICAgICAgIGlmIG5vdCBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6CiAgICAgICAgICAgICAg
ICAgaWYgaXNpbnN0YW5jZShwYXJhbWV0ZXIudHlwZSwgRW51bVR5cGUpOgpAQCAtMjE3LDYgKzI0
Nyw2IEBAIGNsYXNzIE9iakNCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9y
KE9iakNHZW5lcmF0b3IpOgogICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UocGFyYW1ldGVy
LnR5cGUsIEVudW1UeXBlKToKICAgICAgICAgICAgICAgICAgICAgb2JqY19pbl9wYXJhbV9leHBy
ZXNzaW9uID0gJyVzLnZhbHVlKCknICUgb2JqY19pbl9wYXJhbV9leHByZXNzaW9uCiAKLSAgICAg
ICAgICAgICAgICBvcHRpb25hbF9leHByZXNzaW9uID0gJyglcyA/ICYlcyA6IG5pbCknICUgKGlu
X3BhcmFtX25hbWUsIG9iamNfaW5fcGFyYW1fZXhwcmVzc2lvbikKKyAgICAgICAgICAgICAgICBv
cHRpb25hbF9leHByZXNzaW9uID0gJyghISVzID8gJiVzIDogbmlsKScgJSAoaW5fcGFyYW1fbmFt
ZSwgb2JqY19pbl9wYXJhbV9leHByZXNzaW9uKQogICAgICAgICAgICAgICAgIHBhaXJzLmFwcGVu
ZCgnJXM6JXMnICUgKHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwgb3B0aW9uYWxfZXhwcmVzc2lv
bikpCiAgICAgICAgIHJldHVybiAnICAgIFttX2RlbGVnYXRlICVzJXNdOycgJSAoY29tbWFuZC5j
b21tYW5kX25hbWUsICcgJy5qb2luKHBhaXJzKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfZnJvbnRlbmRf
ZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfZnJvbnRlbmRfZGlzcGF0Y2hlcl9p
bXBsZW1lbnRhdGlvbi5weQppbmRleCBkZGRiMjdhODhjMmJhZmY1ZmM2ZjI3YmM0M2EwMWUzMWVh
OWNkNDlkLi44ZDQxOTM4MTIzZjkwNmZiZjA5MWUyYWI3YjM2YTYwNzMzZGIzOTUyIDEwMDc1NQot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5l
cmF0ZV9vYmpjX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2Jq
Y19mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5CkBAIC0xMjUsMTEgKzEyNSwx
MSBAQCBjbGFzcyBPYmpDRnJvbnRlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3Io
T2JqQ0dlbmVyYXRvcik6CiAgICAgICAgIGlmIHJlcXVpcmVkX3BvaW50ZXJfcGFyYW1ldGVycyBv
ciBvcHRpb25hbF9wb2ludGVyX3BhcmFtZXRlcnM6CiAgICAgICAgICAgICBsaW5lcy5hcHBlbmQo
JycpCiAKLSAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1l
c3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOycpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgn
ICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIiVzLiVzIl9zKTsnICUgKGRv
bWFpbi5kb21haW5fbmFtZSwgZXZlbnQuZXZlbnRfbmFtZSkpCisgICAgICAgIGxpbmVzLmFwcGVu
ZCgnICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgp
OycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRT
dHJpbmcoIm1ldGhvZCJfcywgIiVzLiVzIl9zKTsnICUgKGRvbWFpbi5kb21haW5fbmFtZSwgZXZl
bnQuZXZlbnRfbmFtZSkpCiAgICAgICAgIGlmIGV2ZW50LmV2ZW50X3BhcmFtZXRlcnM6CiAgICAg
ICAgICAgICBsaW5lcy5leHRlbmQoc2VsZi5fZ2VuZXJhdGVfZXZlbnRfb3V0X3BhcmFtZXRlcnMo
ZG9tYWluLCBldmVudCkpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIHJvdXRlci5zZW5kRXZl
bnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsnKQorICAgICAgICBsaW5lcy5hcHBlbmQo
JyAgICByb3V0ZXIuc2VuZEV2ZW50KHByb3RvY29sX2pzb25NZXNzYWdlLT50b0pTT05TdHJpbmco
KSk7JykKICAgICAgICAgbGluZXMuYXBwZW5kKCd9JykKICAgICAgICAgcmV0dXJuIHNlbGYud3Jh
cF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZXZlbnQuY29uZGl0aW9uLCAnXG4nLmpvaW4obGlu
ZXMpKQogCkBAIC0xNDUsMTYgKzE0NSwxNiBAQCBjbGFzcyBPYmpDRnJvbnRlbmREaXNwYXRjaGVy
SW1wbGVtZW50YXRpb25HZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6CiAKICAgICBkZWYgX2dlbmVy
YXRlX2V2ZW50X291dF9wYXJhbWV0ZXJzKHNlbGYsIGRvbWFpbiwgZXZlbnQpOgogICAgICAgICBs
aW5lcyA9IFtdCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIFJlZjxKU09OOjpPYmplY3Q+IHBh
cmFtc09iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7JykKKyAgICAgICAgbGluZXMuYXBw
ZW5kKCcgICAgYXV0byBwcm90b2NvbF9wYXJhbXNPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0
ZSgpOycpCiAgICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gZXZlbnQuZXZlbnRfcGFyYW1ldGVyczoK
ICAgICAgICAgICAgIGtleWVkX3NldF9tZXRob2QgPSBDcHBHZW5lcmF0b3IuY3BwX3NldHRlcl9t
ZXRob2RfZm9yX3R5cGUocGFyYW1ldGVyLnR5cGUpCiAgICAgICAgICAgICB2YXJfbmFtZSA9IHBh
cmFtZXRlci5wYXJhbWV0ZXJfbmFtZQogICAgICAgICAgICAgc2FmZV92YXJfbmFtZSA9ICcoKiVz
KScgJSB2YXJfbmFtZSBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwgZWxzZSB2YXJfbmFtZQogICAg
ICAgICAgICAgZXhwb3J0X2V4cHJlc3Npb24gPSBzZWxmLm9iamNfcHJvdG9jb2xfZXhwb3J0X2V4
cHJlc3Npb25fZm9yX3ZhcmlhYmxlKHBhcmFtZXRlci50eXBlLCBzYWZlX3Zhcl9uYW1lKQogICAg
ICAgICAgICAgaWYgbm90IHBhcmFtZXRlci5pc19vcHRpb25hbDoKLSAgICAgICAgICAgICAgICBs
aW5lcy5hcHBlbmQoJyAgICBwYXJhbXNPYmplY3QtPiVzKCIlcyJfcywgJXMpOycgJSAoa2V5ZWRf
c2V0X21ldGhvZCwgcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lLCBleHBvcnRfZXhwcmVzc2lvbikp
CisgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0
LT4lcygiJXMiX3MsICVzKTsnICUgKGtleWVkX3NldF9tZXRob2QsIHBhcmFtZXRlci5wYXJhbWV0
ZXJfbmFtZSwgZXhwb3J0X2V4cHJlc3Npb24pKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAg
ICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBpZiAoJXMpJyAlIChwYXJhbWV0ZXIucGFyYW1ldGVy
X25hbWUpKQotICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBwYXJhbXNPYmpl
Y3QtPiVzKCIlcyJfcywgJXMpOycgJSAoa2V5ZWRfc2V0X21ldGhvZCwgcGFyYW1ldGVyLnBhcmFt
ZXRlcl9uYW1lLCBleHBvcnRfZXhwcmVzc2lvbikpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAg
IGpzb25NZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyJfcywgV1RGTW92ZShwYXJhbXNPYmplY3Qp
KTsnKQorICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBwcm90b2NvbF9wYXJh
bXNPYmplY3QtPiVzKCIlcyJfcywgJXMpOycgJSAoa2V5ZWRfc2V0X21ldGhvZCwgcGFyYW1ldGVy
LnBhcmFtZXRlcl9uYW1lLCBleHBvcnRfZXhwcmVzc2lvbikpCisgICAgICAgIGxpbmVzLmFwcGVu
ZCgnICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyJfcywgV1RGTW92
ZShwcm90b2NvbF9wYXJhbXNPYmplY3QpKTsnKQogICAgICAgICByZXR1cm4gbGluZXMKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dl
bmVyYXRvci5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2Rl
Z2VuL2dlbmVyYXRvci5weQppbmRleCA5NGQxOGQ5ZDY2MTk0ZDE1ODVjMGUxMGMwNDk0YmI0YjFh
MTNiOTU1Li4yOWEyZGVhNzI0ZjBiYmVjZmViYTZkYjkyMDYwODE3MDFlNTEwYzUxIDEwMDc1NQot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5l
cmF0b3IucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2Nv
ZGVnZW4vZ2VuZXJhdG9yLnB5CkBAIC03Myw5ICs3Myw2IEBAIF9UWVBFU19ORUVESU5HX1JVTlRJ
TUVfQ0FTVFMgPSBzZXQoWwogICAgICJSdW50aW1lLkNvbGxlY3Rpb25FbnRyeSIsCiAgICAgIkRl
YnVnZ2VyLkZ1bmN0aW9uRGV0YWlscyIsCiAgICAgIkRlYnVnZ2VyLkNhbGxGcmFtZSIsCi0gICAg
IkNhbnZhcy5UcmFjZUxvZyIsCi0gICAgIkNhbnZhcy5SZXNvdXJjZUluZm8iLAotICAgICJDYW52
YXMuUmVzb3VyY2VTdGF0ZSIsCiAgICAgIyBUaGlzIHNob3VsZCBiZSBhIHRlbXBvcmFyeSBoYWNr
LiBUaW1lbGluZUV2ZW50IHNob3VsZCBiZSBjcmVhdGVkIHZpYSBnZW5lcmF0ZWQgQysrIEFQSS4K
ICAgICAiVGltZWxpbmUuVGltZWxpbmVFdmVudCIsCiAgICAgIyBGb3IgdGVzdGluZyBwdXJwb3Nl
cyBvbmx5LgpAQCAtODUsMTAgKzgyLDE5IEBAIF9UWVBFU19ORUVESU5HX1JVTlRJTUVfQ0FTVFMg
PSBzZXQoWwogIyBGSVhNRTogVGhpcyBzaG91bGQgYmUgY29udmVydGVkIGludG8gYSBwcm9wZXJ0
eSBpbiBKU09OLgogX1RZUEVTX1dJVEhfT1BFTl9GSUVMRFMgPSB7CiAgICAgIlRpbWVsaW5lLlRp
bWVsaW5lRXZlbnQiOiBbXSwKLSAgICAjIEluc3BlY3RvclN0eWxlU2hlZXQgbm90IG9ubHkgY3Jl
YXRlcyB0aGlzIHByb3BlcnR5IGJ1dCB3YW50cyB0byByZWFkIGl0IGFuZCBtb2RpZnkgaXQuCi0g
ICAgIkNTUy5DU1NQcm9wZXJ0eSI6IFtdLAotICAgICMgSW5zcGVjdG9yTmV0d29ya0FnZW50IG5l
ZWRzIHRvIHVwZGF0ZSBtaW1lLXR5cGUuCi0gICAgIk5ldHdvcmsuUmVzcG9uc2UiOiBbIm1pbWVU
eXBlIl0sCisgICAgIkNTUy5DU1NQcm9wZXJ0eSI6IFsicHJpb3JpdHkiLCAicGFyc2VkT2siLCAi
c3RhdHVzIl0sCisgICAgIkRPTS5IaWdobGlnaHRDb25maWciOiBbXSwKKyAgICAiRE9NLlJHQkFD
b2xvciI6IFtdLAorICAgICJET01TdG9yYWdlLlN0b3JhZ2VJZCI6IFtdLAorICAgICJEZWJ1Z2dl
ci5CcmVha3BvaW50QWN0aW9uIjogW10sCisgICAgIkRlYnVnZ2VyLkJyZWFrcG9pbnRPcHRpb25z
IjogW10sCisgICAgIkRlYnVnZ2VyLkxvY2F0aW9uIjogW10sCisgICAgIkluZGV4ZWREQi5LZXki
OiBbXSwKKyAgICAiSW5kZXhlZERCLktleVJhbmdlIjogW10sCisgICAgIk5ldHdvcmsuUmVzcG9u
c2UiOiBbInN0YXR1cyIsICJzdGF0dXNUZXh0IiwgIm1pbWVUeXBlIiwgInNvdXJjZSJdLAorICAg
ICJQYWdlLkNvb2tpZSI6IFtdLAorICAgICJSdW50aW1lLkNhbGxBcmd1bWVudCI6IFsib2JqZWN0
SWQiXSwKKyAgICAiUnVudGltZS5UeXBlTG9jYXRpb24iOiBbXSwKICAgICAjIEZvciB0ZXN0aW5n
IHB1cnBvc2VzIG9ubHkuCiAgICAgIlRlc3QuT3BlblBhcmFtZXRlcnMiOiBbImFscGhhIl0sCiB9
CkBAIC0xMzQsNyArMTQwLDcgQEAgY2xhc3MgR2VuZXJhdG9yOgogICAgICAgICAgICAgaWYgc2Vs
Zi5tb2RlbCgpLmZyYW1ld29yay5uYW1lIG5vdCBpbiBhbGxvd2VkX2ZyYW1ld29ya3M6CiAgICAg
ICAgICAgICAgICAgY29udGludWUKIAotICAgICAgICAgICAgaWYgZnJhbWV3b3JrX25hbWUgPT0g
IldURiI6CisgICAgICAgICAgICBpZiBmcmFtZXdvcmtfbmFtZSA9PSAiV1RGIiBvciBmcmFtZXdv
cmtfbmFtZSA9PSAic3RkIjoKICAgICAgICAgICAgICAgICBpbmNsdWRlcy5hZGQoIiNpbmNsdWRl
IDwlcz4iICUgaGVhZGVyX3BhdGgpCiAgICAgICAgICAgICBlbGlmIHNlbGYubW9kZWwoKS5mcmFt
ZXdvcmsubmFtZSAhPSBmcmFtZXdvcmtfbmFtZToKICAgICAgICAgICAgICAgICBpbmNsdWRlcy5h
ZGQoIiNpbmNsdWRlIDwlcy8lcz4iICUgKGZyYW1ld29ya19uYW1lLCBvcy5wYXRoLmJhc2VuYW1l
KGhlYWRlcl9wYXRoKSkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvY29kZWdlbi9vYmpjX2dlbmVyYXRvci5weSBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL29iamNfZ2VuZXJhdG9yLnB5CmluZGV4IDcz
MTUzYjk1NDY2NzJiOTkwNGU3ZjVlYjkxODg2NWZjOGE1MTY4YjYuLmEyZDM3NmRmM2I5NDNkZGM5
MTY3OGJiYmE1YTJlZDNmMDJlMzcwYzAgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL29iamNfZ2VuZXJhdG9yLnB5CisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL29iamNfZ2VuZXJhdG9y
LnB5CkBAIC0yNjMsNyArMjYzLDcgQEAgY2xhc3MgT2JqQ0dlbmVyYXRvcihHZW5lcmF0b3IpOgog
ICAgICAgICBpZiAoaXNpbnN0YW5jZShfdHlwZSwgRW51bVR5cGUpKToKICAgICAgICAgICAgIHJl
dHVybiBPYmpDR2VuZXJhdG9yLnByb3RvY29sX3R5cGVfZm9yX3R5cGUoX3R5cGUucHJpbWl0aXZl
X3R5cGUpCiAgICAgICAgIGlmIChpc2luc3RhbmNlKF90eXBlLCBPYmplY3RUeXBlKSk6Ci0gICAg
ICAgICAgICByZXR1cm4gJ0luc3BlY3Rvcjo6UHJvdG9jb2w6OiVzOjolcycgJSAoX3R5cGUudHlw
ZV9kb21haW4oKS5kb21haW5fbmFtZSwgX3R5cGUucmF3X25hbWUoKSkKKyAgICAgICAgICAgIHJl
dHVybiAnUHJvdG9jb2w6OiVzOjolcycgJSAoX3R5cGUudHlwZV9kb21haW4oKS5kb21haW5fbmFt
ZSwgX3R5cGUucmF3X25hbWUoKSkKICAgICAgICAgaWYgKGlzaW5zdGFuY2UoX3R5cGUsIEFycmF5
VHlwZSkpOgogICAgICAgICAgICAgc3ViX3R5cGUgPSBPYmpDR2VuZXJhdG9yLnByb3RvY29sX3R5
cGVfZm9yX3R5cGUoX3R5cGUuZWxlbWVudF90eXBlKQogICAgICAgICAgICAgcmV0dXJuICdKU09O
OjpBcnJheU9mPCVzPicgJSBzdWJfdHlwZQpAQCAtMzUzLDggKzM1Myw2IEBAIGNsYXNzIE9iakNH
ZW5lcmF0b3IoR2VuZXJhdG9yKToKICAgICAgICAgaWYgKGlzaW5zdGFuY2UoX3R5cGUsIFByaW1p
dGl2ZVR5cGUpKToKICAgICAgICAgICAgIHJldHVybiBzZWxmLm9iamNfdHlwZV9mb3JfcmF3X25h
bWUoX3R5cGUucmF3X25hbWUoKSkKICAgICAgICAgaWYgKGlzaW5zdGFuY2UoX3R5cGUsIEVudW1U
eXBlKSk6Ci0gICAgICAgICAgICBpZiBfdHlwZS5pc19hbm9ueW1vdXM6Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIHNlbGYub2JqY19lbnVtX25hbWVfZm9yX2Fub255bW91c19lbnVtX3BhcmFtZXRl
cihkb21haW4sIGV2ZW50X29yX2NvbW1hbmRfbmFtZSwgcGFyYW1ldGVyKQogICAgICAgICAgICAg
cmV0dXJuIHNlbGYub2JqY19lbnVtX25hbWVfZm9yX25vbl9hbm9ueW1vdXNfZW51bShfdHlwZSkK
ICAgICAgICAgaWYgKGlzaW5zdGFuY2UoX3R5cGUsIE9iamVjdFR5cGUpKToKICAgICAgICAgICAg
IHJldHVybiBzZWxmLm9iamNfbmFtZV9mb3JfdHlwZShfdHlwZSkgKyAnIConCkBAIC0zOTgsOCAr
Mzk2LDYgQEAgY2xhc3MgT2JqQ0dlbmVyYXRvcihHZW5lcmF0b3IpOgogCiAgICAgZGVmIG9iamNf
cHJvdG9jb2xfaW1wb3J0X2V4cHJlc3Npb25fZm9yX3BhcmFtZXRlcihzZWxmLCBuYW1lLCBkb21h
aW4sIGV2ZW50X29yX2NvbW1hbmRfbmFtZSwgcGFyYW1ldGVyKToKICAgICAgICAgaWYgaXNpbnN0
YW5jZShwYXJhbWV0ZXIudHlwZSwgRW51bVR5cGUpOgotICAgICAgICAgICAgaWYgcGFyYW1ldGVy
LnR5cGUuaXNfYW5vbnltb3VzOgotICAgICAgICAgICAgICAgIHJldHVybiAnZnJvbVByb3RvY29s
U3RyaW5nPCVzPiglcyknICUgKHNlbGYub2JqY19lbnVtX25hbWVfZm9yX2Fub255bW91c19lbnVt
X3BhcmFtZXRlcihkb21haW4sIGV2ZW50X29yX2NvbW1hbmRfbmFtZSwgcGFyYW1ldGVyKSwgbmFt
ZSkKICAgICAgICAgICAgIHJldHVybiAnZnJvbVByb3RvY29sU3RyaW5nPCVzPiglcyknICUgKHNl
bGYub2JqY19lbnVtX25hbWVfZm9yX25vbl9hbm9ueW1vdXNfZW51bShwYXJhbWV0ZXIudHlwZSks
IG5hbWUpCiAgICAgICAgIHJldHVybiBzZWxmLm9iamNfcHJvdG9jb2xfaW1wb3J0X2V4cHJlc3Np
b25fZm9yX3ZhcmlhYmxlKHBhcmFtZXRlci50eXBlLCBuYW1lKQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9vYmpjX2dlbmVyYXRv
cl90ZW1wbGF0ZXMucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Y29kZWdlbi9vYmpjX2dlbmVyYXRvcl90ZW1wbGF0ZXMucHkKaW5kZXggMzI2YzI2MjVlYTM0ZjA2
NmIyZDRjYzk4NDZlMTRhMjM0MWI4MTg4MS4uYjU2ZDE0ODE5NWM0YjY1ZmZkMjQzYTk5MTBhYWQz
NjMzM2EwODUyZCAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2NvZGVnZW4vb2JqY19nZW5lcmF0b3JfdGVtcGxhdGVzLnB5CisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL29iamNfZ2VuZXJhdG9yX3Rl
bXBsYXRlcy5weQpAQCAtMTE0LDEzICsxMTQsMTMgQEAgcHJpdmF0ZToKICAgICAiIiJ2b2lkIE9i
akNJbnNwZWN0b3Ike2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXI6OiR7Y29tbWFuZE5hbWV9
KCR7cGFyYW1ldGVyc30pCiB7CiAgICAgaWYgKCEke3Jlc3BvbmRzVG9TZWxlY3Rvcn0pIHsKLSAg
ICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQs
IEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIicke2RvbWFpbk5hbWV9LiR7Y29t
bWFuZE5hbWV9JyB3YXMgbm90IGZvdW5kIl9zKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIo
KS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxsSWQsIEJhY2tlbmREaXNwYXRjaGVy
OjpNZXRob2ROb3RGb3VuZCwgIicke2RvbWFpbk5hbWV9LiR7Y29tbWFuZE5hbWV9JyB3YXMgbm90
IGZvdW5kIl9zKTsKICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJv
cnMoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBe
KE5TU3RyaW5nICplcnJvcikgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQ
cm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBl
cnJvcik7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3Io
cHJvdG9jb2xfY2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsK
ICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKICAgICB9
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZW51bS12YWx1ZXMuanNvbiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9lbnVtLXZhbHVlcy5qc29uCmluZGV4IGNkYWQ2MWRmN2M5ZjljNzZlNjky
ODk3YzNkZmUwYjA4MjNmOTBlNGQuLjI4MTU2MWI5NDhlMTlhNDFmYTBhMmM4MGVjZjJlMDlhZjNh
OGJjNDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9lbnVtLXZhbHVlcy5qc29uCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9lbnVtLXZhbHVlcy5qc29uCkBAIC0zLDkgKzMsOSBAQAogICAg
ICJkb21haW4iOiAiVHlwZURvbWFpbiIsCiAgICAgInR5cGVzIjogWwogICAgICAgICB7Ci0gICAg
ICAgICAgICAiaWQiOiAiVHlwZURvbWFpbkVudW0iLAorICAgICAgICAgICAgImlkIjogIkVudW0i
LAogICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKLSAgICAgICAgICAgICJlbnVtIjogWyJz
aGFyZWQiLCAicmVkIiwgImdyZWVuIiwgImJsdWUiXQorICAgICAgICAgICAgImVudW0iOiBbInNo
YXJlZCIsICIxIiwgIjIiXQogICAgICAgICB9CiAgICAgXQogfSwKQEAgLTEzLDEwICsxMywxOCBA
QAogICAgICJkb21haW4iOiAiQ29tbWFuZERvbWFpbiIsCiAgICAgImNvbW1hbmRzIjogWwogICAg
ICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJjb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZSIs
Ci0gICAgICAgICAgICAicGFyYW1ldGVycyI6IFtdLAorICAgICAgICAgICAgIm5hbWUiOiAiY29t
bWFuZCIsCisgICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKKyAgICAgICAgICAgICAgICB7ICJu
YW1lIjogImVudW1SZXF1aXJlZCIsICIkcmVmIjogIlR5cGVEb21haW4uRW51bSIgfSwKKyAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogImVudW1PcHRpb25hbCIsICIkcmVmIjogIlR5cGVEb21haW4u
RW51bSIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBh
cmFtZXRlclJlcXVpcmVkIiwgInR5cGUiOiAic3RyaW5nIiwgImVudW0iOiBbInNoYXJlZCIsICJz
aGFyZWRSZXF1aXJlZCIsICJibGFjayJdIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJw
YXJhbWV0ZXJPcHRpb25hbCIsICJ0eXBlIjogInN0cmluZyIsICJlbnVtIjogWyJzaGFyZWQiLCAi
c2hhcmVkT3B0aW9uYWwiLCAicmVkIl0sICJvcHRpb25hbCI6IHRydWUgfQorICAgICAgICAgICAg
XSwKICAgICAgICAgICAgICJyZXR1cm5zIjogWwotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
cmV0dXJuVmFsdWUiLCAidHlwZSI6ICJzdHJpbmciLCAiZW51bSI6IFsic2hhcmVkIiwgImN5YW4i
LCAibWFnZW50YSIsICJ5ZWxsb3ciXSB9CisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJlbnVt
UmVxdWlyZWQiLCAiJHJlZiI6ICJUeXBlRG9tYWluLkVudW0iIH0sCisgICAgICAgICAgICAgICAg
eyAibmFtZSI6ICJlbnVtT3B0aW9uYWwiLCAiJHJlZiI6ICJUeXBlRG9tYWluLkVudW0iLCAib3B0
aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJyZXR1cm5SZXF1aXJl
ZCIsICJ0eXBlIjogInN0cmluZyIsICJlbnVtIjogWyJzaGFyZWQiLCAic2hhcmVkUmVxdWlyZWQi
LCAid2hpdGUiXSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicmV0dXJuT3B0aW9uYWwi
LCAidHlwZSI6ICJzdHJpbmciLCAiZW51bSI6IFsic2hhcmVkIiwgInNoYXJlZE9wdGlvbmFsIiwg
ImJsdWUiXSwgIm9wdGlvbmFsIjogdHJ1ZSB9CiAgICAgICAgICAgICBdCiAgICAgICAgIH0KICAg
ICBdCkBAIC0yNSw5ICszMywxMiBAQAogICAgICJkb21haW4iOiAiRXZlbnREb21haW4iLAogICAg
ICJldmVudHMiOiBbCiAgICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjogImV2ZW50V2l0aEVu
dW1QYXJhbWV0ZXIiLAorICAgICAgICAgICAgIm5hbWUiOiAiZXZlbnQiLAogICAgICAgICAgICAg
InBhcmFtZXRlcnMiOiBbCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwYXJhbWV0ZXIiLCAi
dHlwZSI6ICJzdHJpbmciLCAiZW51bSI6IFsic2hhcmVkIiwgImJsYWNrIiwgIndoaXRlIl0gfQor
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZW51bVJlcXVpcmVkIiwgIiRyZWYiOiAiVHlwZURv
bWFpbi5FbnVtIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZW51bU9wdGlvbmFsIiwg
IiRyZWYiOiAiVHlwZURvbWFpbi5FbnVtIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAicGFyYW1ldGVyUmVxdWlyZWQiLCAidHlwZSI6ICJzdHJpbmciLCAi
ZW51bSI6IFsic2hhcmVkIiwgInNoYXJlZFJlcXVpcmVkIiwgImdyZXkiXSB9LAorICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAicGFyYW1ldGVyT3B0aW9uYWwiLCAidHlwZSI6ICJzdHJpbmciLCAi
ZW51bSI6IFsic2hhcmVkIiwgInNoYXJlZE9wdGlvbmFsIiwgImdyZWVuIl0sICJvcHRpb25hbCI6
IHRydWUgfQogICAgICAgICAgICAgXQogICAgICAgICB9CiAgICAgXQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2NvbW1h
bmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbi1yZXN1bHQg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQv
Y29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uLXJl
c3VsdAppbmRleCBlOWMxOGJmYWU1YjMyYzk1N2JiZWFkNGUwZWI5ZDA2YjYzOThiMDYzLi4zMmQ0
YThlODExNDYwMWVmZDY2ZWY5ODc5YmRjYTZjZmZlNzBiYzg5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvY29tbWFuZC10
YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uLXJlc3VsdAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQv
Y29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uLXJl
c3VsdApAQCAtNzAsNyArNzAsNyBAQCBJbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJE
b21haW4iLCBbInBhZ2UiXSk7CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQ
QVRDSEVSUykKIAotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVkZSAiVGVz
dFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJv
bnRlbmRSb3V0ZXIuaD4KIApAQCAtODgsNyArODgsNyBAQCBwcml2YXRlOgogY2xhc3MgQWx0ZXJu
YXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIgOiBwdWJsaWMgQWx0ZXJuYXRlQmFja2VuZERpc3Bh
dGNoZXIgewogcHVibGljOgogICAgIHZpcnR1YWwgfkFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNw
YXRjaGVyKCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIENvbW1hbmQobG9uZyBjYWxsSWQpID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgQ29tbWFuZChsb25nIHByb3RvY29sX2NhbGxJZCkgPSAwOwogfTsK
IAogfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCkBAIC0xMzAsMTEgKzEzMCwxNCBAQCBwdWJsaWM6
CiAKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx0dXBsZT4KKyNp
bmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKLXR5
cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVS
TkFURV9ESVNQQVRDSEVSUykKIGNsYXNzIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVy
OwpAQCAtMTQyLDcgKzE0NSw3IEBAIGNsYXNzIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRj
aGVyOwogCiBjbGFzcyBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewogcHVibGljOgot
ICAgIHZpcnR1YWwgdm9pZCBDb21tYW5kKEVycm9yU3RyaW5nJikgPSAwOworICAgIHZpcnR1YWwg
UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gQ29tbWFuZCgpID0gMDsKIHByb3RlY3RlZDoK
ICAgICB2aXJ0dWFsIH5Eb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKTsKIH07CkBAIC0x
NTAsOSArMTUzLDkgQEAgcHJvdGVjdGVkOgogY2xhc3MgRG9tYWluQmFja2VuZERpc3BhdGNoZXIg
ZmluYWwgOiBwdWJsaWMgU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIgewogcHVibGljOgog
ICAgIHN0YXRpYyBSZWY8RG9tYWluQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShCYWNrZW5kRGlz
cGF0Y2hlciYsIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwotICAgIHZvaWQgZGlz
cGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2Jq
ZWN0PiYmIG1lc3NhZ2UpIGZpbmFsOworICAgIHZvaWQgZGlzcGF0Y2gobG9uZyBwcm90b2NvbF9j
YWxsSWQsIGNvbnN0IFN0cmluZyYgcHJvdG9jb2xfbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYm
IHByb3RvY29sX21lc3NhZ2UpIGZpbmFsOwogcHJpdmF0ZToKLSAgICB2b2lkIENvbW1hbmQobG9u
ZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7CisgICAgdm9p
ZCBDb21tYW5kKGxvbmcgcHJvdG9jbF9jYWxsSWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcHJv
dG9jb2xfcGFyYW1ldGVycyk7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFU
Q0hFUlMpCiBwdWJsaWM6CiAgICAgdm9pZCBzZXRBbHRlcm5hdGVEaXNwYXRjaGVyKEFsdGVybmF0
ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyKiBhbHRlcm5hdGVEaXNwYXRjaGVyKSB7IG1fYWx0ZXJu
YXRlRGlzcGF0Y2hlciA9IGFsdGVybmF0ZURpc3BhdGNoZXI7IH0KQEAgLTIwMSw5ICsyMDQsNyBA
QCBwcml2YXRlOgogI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKIAogI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8
d3RmL0pTT05WYWx1ZXMuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNs
dWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKICNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJz
LmgiCkBAIC0yMjUsMzggKzIyNiwzOCBAQCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6RG9tYWlu
QmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYQogICAgIG1f
YmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbigiRG9tYWluIl9z
LCB0aGlzKTsKIH0KIAotdm9pZCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9u
ZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1l
c3NhZ2UpCit2b2lkIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHByb3Rv
Y29sX2NhbGxJZCwgY29uc3QgU3RyaW5nJiBwcm90b2NvbF9tZXRob2QsIFJlZjxKU09OOjpPYmpl
Y3Q+JiYgcHJvdG9jb2xfbWVzc2FnZSkKIHsKICAgICBSZWY8RG9tYWluQmFja2VuZERpc3BhdGNo
ZXI+IHByb3RlY3QoKnRoaXMpOwogCi0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVy
czsKLSAgICBtZXNzYWdlLT5nZXRPYmplY3QoInBhcmFtcyJfcywgcGFyYW1ldGVycyk7CisgICAg
YXV0byBwcm90b2NvbF9wYXJhbWV0ZXJzID0gcHJvdG9jb2xfbWVzc2FnZS0+Z2V0T2JqZWN0KCJw
YXJhbXMiX3MpOwogCi0gICAgaWYgKG1ldGhvZCA9PSAiQ29tbWFuZCIpIHsKLSAgICAgICAgQ29t
bWFuZChyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykpOworICAgIGlmIChwcm90b2NvbF9t
ZXRob2QgPT0gIkNvbW1hbmQiKSB7CisgICAgICAgIENvbW1hbmQocHJvdG9jb2xfY2FsbElkLCBX
VEZNb3ZlKHByb3RvY29sX3BhcmFtZXRlcnMpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAot
ICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3Bh
dGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RvbWFpbi4iICsgbWV0aG9kICsgIicgd2FzIG5vdCBm
b3VuZCIpOworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFj
a2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RvbWFpbi4iICsgcHJvdG9jb2xfbWV0
aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOwogfQogCi12b2lkIERvbWFpbkJhY2tlbmREaXNwYXRj
aGVyOjpDb21tYW5kKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQordm9p
ZCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Q29tbWFuZChsb25nIHByb3RvY29sX2NhbGxJZCwg
UmVmUHRyPEpTT046Ok9iamVjdD4mJikKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKICAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAg
IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+Q29tbWFuZChyZXF1ZXN0SWQpOworICAgICAgICBtX2Fs
dGVybmF0ZURpc3BhdGNoZXItPkNvbW1hbmQocHJvdG9jb2xfY2FsbElkKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KICNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRD
SEVSUykKIAotICAgIEVycm9yU3RyaW5nIGVycm9yOwotICAgIFJlZjxKU09OOjpPYmplY3Q+IHJl
c3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgbV9hZ2VudC0+Q29tbWFuZChlcnJv
cik7CisgICAgYXV0byByZXN1bHQgPSBtX2FnZW50LT5Db21tYW5kKCk7CisgICAgaWYgKCFyZXN1
bHQpIHsKKyAgICAgICAgQVNTRVJUKCFyZXN1bHQuZXJyb3IoKS5pc0VtcHR5KCkpOworICAgICAg
ICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRj
aGVyOjpTZXJ2ZXJFcnJvciwgcmVzdWx0LmVycm9yKCkpOworICAgICAgICByZXR1cm47CisgICAg
fQogCi0gICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7Ci0gICAg
ZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJh
Y2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOworICAgIGF1dG8g
cHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIG1fYmFj
a2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJv
dG9jb2xfanNvbk1lc3NhZ2UpLCBmYWxzZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEluc3BlY3Rv
cgpAQCAtMjk3LDYgKzI5OCw3IEBAIHZvaWQgRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkNvbW1h
bmQobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCiAKICNpbmNsdWRlICJU
ZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNs
dWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAog
bmFtZXNwYWNlIEluc3BlY3RvciB7CkBAIC0zNDksMTYgKzM1MSwxNSBAQCBwcml2YXRlOgogI2lu
Y2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJp
bmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKIHZvaWQgRG9tYWluRnJvbnRlbmREaXNw
YXRjaGVyOjpFdmVudCgpCiB7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBK
U09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhv
ZCJfcywgIkRvbWFpbi5FdmVudCJfcyk7CisgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9
IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0
cmluZygibWV0aG9kIl9zLCAiRG9tYWluLkV2ZW50Il9zKTsKIAotICAgIG1fZnJvbnRlbmRSb3V0
ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7CisgICAgbV9mcm9udGVu
ZFJvdXRlci5zZW5kRXZlbnQocHJvdG9jb2xfanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCkBAIC0zOTgsNyArMzk5LDkgQEAgdm9pZCBE
b21haW5Gcm9udGVuZERpc3BhdGNoZXI6OkV2ZW50KCkKICNwcmFnbWEgb25jZQogCiAjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgotI2luY2x1ZGUgPHd0
Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3
dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNw
YWNlIEluc3BlY3RvciB7CiAKQEAgLTQ1Miw4ICs0NTUsNyBAQCBuYW1lc3BhY2UgUHJvdG9jb2wg
ewogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIK
IAotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcu
aD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsK
IApAQCAtNTA5LDcgKzUxMSw3IEBAIGNsYXNzIE9iakNJbnNwZWN0b3JEb21haW5CYWNrZW5kRGlz
cGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBBbHRlcm5hdGVEb21haW5CYWNrZW5kCiAgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgT2JqQ0luc3BlY3RvckRvbWFpbkJhY2tl
bmREaXNwYXRjaGVyKGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+IGhhbmRsZXIp
IHsgbV9kZWxlZ2F0ZSA9IGhhbmRsZXI7IH0KLSAgICB2b2lkIENvbW1hbmQobG9uZyByZXF1ZXN0
SWQpIGZpbmFsOworICAgIHZvaWQgQ29tbWFuZChsb25nIHByb3RvY29sX2NhbGxJZCkgZmluYWw7
CiBwcml2YXRlOgogICAgIFJldGFpblB0cjxpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5k
bGVyPj4gbV9kZWxlZ2F0ZTsKIH07CkBAIC01NTcsMjEgKzU1OSwyMiBAQCBwcml2YXRlOgogCiBu
YW1lc3BhY2UgSW5zcGVjdG9yIHsKIAotdm9pZCBPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERp
c3BhdGNoZXI6OkNvbW1hbmQobG9uZyByZXF1ZXN0SWQpCit2b2lkIE9iakNJbnNwZWN0b3JEb21h
aW5CYWNrZW5kRGlzcGF0Y2hlcjo6Q29tbWFuZChsb25nIHByb3RvY29sX2NhbGxJZCkKIHsKICAg
ICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoQ29tbWFuZFdp
dGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazopXSkgewotICAgICAgICBiYWNrZW5kRGlz
cGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNo
ZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RvbWFpbi5Db21tYW5kJyB3YXMgbm90IGZvdW5kIl9zKTsK
KyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2Nv
bF9jYWxsSWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEb21haW4uQ29t
bWFuZCcgd2FzIG5vdCBmb3VuZCJfcyk7CiAgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNl
bmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZCBlcnJv
ckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNo
ZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpT
ZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQ
cm90b2NvbEVycm9yKHByb3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVy
cm9yLCBlcnJvcik7CiAgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJy
b3JzKCk7CiAgICAgfTsKIAogICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF57Ci0gICAgICAgIGJh
Y2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIEpTT046Ok9iamVjdDo6
Y3JlYXRlKCksIGZhbHNlKTsKKyAgICAgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpT
T046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRS
ZXNwb25zZShwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJvdG9jb2xfanNvbk1lc3NhZ2UpLCBm
YWxzZSk7CiAgICAgfTsKIAogICAgIFttX2RlbGVnYXRlIENvbW1hbmRXaXRoRXJyb3JDYWxsYmFj
azplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOwpAQCAtNzcz
LDkgKzc3Niw5IEBAIHVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CiB7CiAgICAgY29uc3QgRnJv
bnRlbmRSb3V0ZXImIHJvdXRlciA9IF9jb250cm9sbGVyLT5mcm9udGVuZFJvdXRlcigpOwogCi0g
ICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgp
OwotICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRvbWFpbi5FdmVudCJf
cyk7Ci0gICAgcm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwor
ICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwor
ICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRvbWFpbi5F
dmVudCJfcyk7CisgICAgcm91dGVyLnNlbmRFdmVudChwcm90b2NvbF9qc29uTWVzc2FnZS0+dG9K
U09OU3RyaW5nKCkpOwogfQogCiBAZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1hc3luYy1h
dHRyaWJ1dGUuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbi1y
ZXN1bHQKaW5kZXggZDFjNjliMDMxY2RiNDcxZDE4YTJlNDk3OGYyMTI3YjBlY2Q0N2M1Mi4uNGNl
NmZjM2QyMTM2YTRlYjRhYjIyNDY1MWE5YmZiMTY1ZTQ1MzBmNiAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2NvbW1hbmRz
LXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24tcmVzdWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9jb21tYW5kcy13aXRoLWFzeW5j
LWF0dHJpYnV0ZS5qc29uLXJlc3VsdApAQCAtNzMsNyArNzMsNyBAQCBJbnNwZWN0b3JCYWNrZW5k
LmFjdGl2YXRlRG9tYWluKCJEYXRhYmFzZSIsIG51bGwpOwogCiAjaWYgRU5BQkxFKElOU1BFQ1RP
Ul9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5o
IgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CiAKQEAgLTkxLDEwICs5MSwxMCBAQCBwcml2
YXRlOgogY2xhc3MgQWx0ZXJuYXRlRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciA6IHB1YmxpYyBB
bHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+QWx0ZXJu
YXRlRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcigpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBleGVj
dXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgY2FsbElkLCBpbnQgaW5fZGF0YWJh
c2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBleGVj
dXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIGNhbGxJZCwgaW50IGluX2RhdGFi
YXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnkpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZXhl
Y3V0ZVNRTFN5bmMobG9uZyBjYWxsSWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcm
IGluX3F1ZXJ5KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVTUUxBc3luYyhsb25nIGNh
bGxJZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnkpID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIHBy
b3RvY29sX2NhbGxJZCwgaW50IGRhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgcXVlcnkpID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9u
ZyBwcm90b2NvbF9jYWxsSWQsIGludCBkYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIHF1ZXJ5KSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVTUUxTeW5jKGxvbmcgcHJvdG9jb2xfY2FsbElk
LCBpbnQgZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBxdWVyeSkgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBleGVjdXRlU1FMQXN5bmMobG9uZyBwcm90b2NvbF9jYWxsSWQsIGludCBkYXRhYmFzZUlk
LCBjb25zdCBTdHJpbmcmIHF1ZXJ5KSA9IDA7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKQEAgLTEzNiwxMSArMTM2LDE0IEBAIHB1YmxpYzoKIAogI2luY2x1ZGUgIlRlc3RQcm90b2Nv
bE9iamVjdHMuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlci5oPgorI2luY2x1ZGUgPHR1cGxlPgorI2luY2x1ZGUgPHd0Zi9FeHBlY3RlZC5oPgor
I2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7
CisKIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogY2xhc3Mg
QWx0ZXJuYXRlRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjsKQEAgLTE0OCwyNyArMTUxLDIwIEBA
IGNsYXNzIEFsdGVybmF0ZURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI7CiAKIGNsYXNzIERhdGFi
YXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKIHB1YmxpYzoKLSAgICAvLyBOYW1lZCBhZnRl
ciBwYXJhbWV0ZXIgJ3ByaW50Q29sb3InIHdoaWxlIGdlbmVyYXRpbmcgY29tbWFuZC9ldmVudCBl
eGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzLgotICAgIGVudW0gY2xhc3MgUHJpbnRD
b2xvciB7Ci0gICAgICAgIEN5YW4gPSAzLAotICAgICAgICBNYWdlbnRhID0gNCwKLSAgICAgICAg
WWVsbG93ID0gNSwKLSAgICAgICAgQmxhY2sgPSA2LAotICAgIH07IC8vIGVudW0gY2xhc3MgUHJp
bnRDb2xvcgotICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFs
dWVzKEVycm9yU3RyaW5nJiwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVl
cnksIFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+JiBvcHRfb3V0X2NvbHVtbk5hbWVzLCBP
cHRpb25hbDxTdHJpbmc+JiBvcHRfb3V0X25vdGVzLCBPcHRpb25hbDxkb3VibGU+JiBvcHRfb3V0
X3RpbWVzdGFtcCwgT3B0aW9uYWw8SlNPTjo6T2JqZWN0PiYgb3B0X291dF92YWx1ZXMsIE9wdGlv
bmFsPEpTT046OlZhbHVlPiYgb3B0X291dF9wYXlsb2FkLCBPcHRpb25hbDxpbnQ+JiBvcHRfb3V0
X2RhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+
JiBvcHRfb3V0X3NxbEVycm9yLCBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFy
eUNvbG9ycyogb3B0X291dF9zY3JlZW5Db2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRhdGFiYXNlOjpDb2xvckxpc3Q+JiBvcHRfb3V0X2FsdGVybmF0ZUNvbG9ycywgRGF0YWJhc2VC
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3IqIG9wdF9vdXRfcHJpbnRDb2xvcikg
PSAwOworICAgIHZpcnR1YWwgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8c3RkOjp0dXBsZTxSZWZQ
dHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiAvKiBvcHRfY29sdW1uTmFtZXMgKi8sIFN0cmluZyAv
KiBvcHRfbm90ZXMgKi8sIE9wdGlvbmFsPGRvdWJsZT4gLyogb3B0X3RpbWVzdGFtcCAqLywgUmVm
UHRyPEpTT046Ok9iamVjdD4gLyogb3B0X3ZhbHVlcyAqLywgUmVmUHRyPEpTT046OlZhbHVlPiAv
KiBvcHRfcGF5bG9hZCAqLywgT3B0aW9uYWw8aW50PiAvKiBvcHRfZGF0YWJhc2VJZCAqLywgUmVm
UHRyPFByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IC8qIG9wdF9zcWxFcnJvciAqLywgT3B0aW9u
YWw8UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPiAvKiBvcHRfc2NyZWVuQ29sb3Ig
Ki8sIFJlZlB0cjxQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4gLyogb3B0X2FsdGVybmF0
ZUNvbG9ycyAqLywgU3RyaW5nIC8qIG9wdF9wcmludENvbG9yICovPj4gZXhlY3V0ZVNRTFN5bmNP
cHRpb25hbFJldHVyblZhbHVlcyhpbnQgZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBxdWVyeSkg
PSAwOwogICAgIGNsYXNzIEV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJh
Y2sgOiBwdWJsaWMgQmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZSB7CiAgICAgcHVibGlj
OgogICAgICAgICBFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc0NhbGxiYWNrKFJl
ZjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiwgaW50IGlkKTsKLSAgICAgICAgdm9pZCBzZW5kU3VjY2Vz
cyhSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiYmIGNvbHVtbk5hbWVzLCBPcHRpb25hbDxT
dHJpbmc+JiBub3RlcywgT3B0aW9uYWw8ZG91YmxlPiYgdGltZXN0YW1wLCBPcHRpb25hbDxKU09O
OjpPYmplY3Q+JiB2YWx1ZXMsIE9wdGlvbmFsPEpTT046OlZhbHVlPiYgcGF5bG9hZCwgT3B0aW9u
YWw8aW50PiYgZGF0YWJhc2VJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNl
OjpFcnJvcj4mJiBzcWxFcnJvciwgT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJh
c2U6OlByaW1hcnlDb2xvcnM+IHNjcmVlbkNvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4mJiBhbHRlcm5hdGVDb2xvcnMsIE9wdGlvbmFsPERhdGFi
YXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQcmludENvbG9yPiBwcmludENvbG9yKTsKKyAg
ICAgICAgdm9pZCBzZW5kU3VjY2VzcyhSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiYmIG9w
dF9jb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBvcHRfbm90ZXMsIE9wdGlvbmFsPGRvdWJsZT4m
JiBvcHRfdGltZXN0YW1wLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIG9wdF92YWx1ZXMsIFJlZlB0
cjxKU09OOjpWYWx1ZT4mJiBvcHRfcGF5bG9hZCwgT3B0aW9uYWw8aW50PiYmIG9wdF9kYXRhYmFz
ZUlkLCBSZWZQdHI8UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4mJiBvcHRfc3FsRXJyb3IsIE9w
dGlvbmFsPFByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4mJiBvcHRfc2NyZWVuQ29s
b3IsIFJlZlB0cjxQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4mJiBvcHRfYWx0ZXJuYXRl
Q29sb3JzLCBjb25zdCBTdHJpbmcmIG9wdF9wcmludENvbG9yKTsKICAgICB9OwotICAgIHZpcnR1
YWwgdm9pZCBleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhpbnQgaW5fZGF0YWJh
c2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSwgUmVmPEV4ZWN1dGVTUUxBc3luY09wdGlvbmFs
UmV0dXJuVmFsdWVzQ2FsbGJhY2s+JiYgY2FsbGJhY2spID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQg
ZXhlY3V0ZVNRTFN5bmMoRXJyb3JTdHJpbmcmLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3Ry
aW5nJiBpbl9xdWVyeSwgUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4mIG91dF9jb2x1bW5O
YW1lcywgU3RyaW5nKiBvdXRfbm90ZXMsIGRvdWJsZSogb3V0X3RpbWVzdGFtcCwgSlNPTjo6T2Jq
ZWN0KiBvdXRfdmFsdWVzLCBKU09OOjpWYWx1ZSogb3V0X3BheWxvYWQsIGludCogb3V0X2RhdGFi
YXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+JiBvdXRf
c3FsRXJyb3IsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0
PiYgb3V0X2FsdGVybmF0ZUNvbG9ycywgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlBy
aW1hcnlDb2xvcnMqIG91dF9zY3JlZW5Db2xvciwgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXI6OlByaW50Q29sb3IqIG91dF9wcmludENvbG9yKSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IGV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGludCBkYXRhYmFzZUlkLCBjb25z
dCBTdHJpbmcmIHF1ZXJ5LCBSZWY8RXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXND
YWxsYmFjaz4mJikgPSAwOworICAgIHZpcnR1YWwgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8c3Rk
Ojp0dXBsZTxSZWY8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiAvKiBjb2x1bW5OYW1lcyAqLywgU3Ry
aW5nIC8qIG5vdGVzICovLCBkb3VibGUgLyogdGltZXN0YW1wICovLCBSZWY8SlNPTjo6T2JqZWN0
PiAvKiB2YWx1ZXMgKi8sIFJlZjxKU09OOjpWYWx1ZT4gLyogcGF5bG9hZCAqLywgaW50IC8qIGRh
dGFiYXNlSWQgKi8sIFJlZjxQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiAvKiBzcWxFcnJvciAq
LywgUmVmPFByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiAvKiBhbHRlcm5hdGVDb2xvcnMg
Ki8sIFByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyAvKiBzY3JlZW5Db2xvciAqLywg
U3RyaW5nIC8qIHByaW50Q29sb3IgKi8+PiBleGVjdXRlU1FMU3luYyhpbnQgZGF0YWJhc2VJZCwg
Y29uc3QgU3RyaW5nJiBxdWVyeSkgPSAwOwogICAgIGNsYXNzIEV4ZWN1dGVTUUxBc3luY0NhbGxi
YWNrIDogcHVibGljIEJhY2tlbmREaXNwYXRjaGVyOjpDYWxsYmFja0Jhc2UgewogICAgIHB1Ymxp
YzoKICAgICAgICAgRXhlY3V0ZVNRTEFzeW5jQ2FsbGJhY2soUmVmPEJhY2tlbmREaXNwYXRjaGVy
PiYmLCBpbnQgaWQpOwotICAgICAgICB2b2lkIHNlbmRTdWNjZXNzKFJlZlB0cjxKU09OOjpBcnJh
eU9mPFN0cmluZz4+JiYgY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgbm90ZXMsIGRvdWJsZSB0
aW1lc3RhbXAsIEpTT046Ok9iamVjdCB2YWx1ZXMsIEpTT046OlZhbHVlIHBheWxvYWQsIGludCBk
YXRhYmFzZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiYm
IHNxbEVycm9yLCBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyBz
Y3JlZW5Db2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxp
c3Q+JiYgYWx0ZXJuYXRlQ29sb3JzLCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6
UHJpbnRDb2xvciBwcmludENvbG9yKTsKKyAgICAgICAgdm9pZCBzZW5kU3VjY2VzcyhSZWY8SlNP
Tjo6QXJyYXlPZjxTdHJpbmc+PiYmIGNvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIG5vdGVzLCBk
b3VibGUgdGltZXN0YW1wLCBSZWY8SlNPTjo6T2JqZWN0PiYmIHZhbHVlcywgUmVmPEpTT046OlZh
bHVlPiYmIHBheWxvYWQsIGludCBkYXRhYmFzZUlkLCBSZWY8UHJvdG9jb2w6OkRhdGFiYXNlOjpF
cnJvcj4mJiBzcWxFcnJvciwgUHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzIHNjcmVl
bkNvbG9yLCBSZWY8UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+JiYgYWx0ZXJuYXRlQ29s
b3JzLCBjb25zdCBTdHJpbmcmIHByaW50Q29sb3IpOwogICAgIH07Ci0gICAgdmlydHVhbCB2b2lk
IGV4ZWN1dGVTUUxBc3luYyhpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVy
eSwgUmVmPEV4ZWN1dGVTUUxBc3luY0NhbGxiYWNrPiYmIGNhbGxiYWNrKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIGV4ZWN1dGVTUUxBc3luYyhpbnQgZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBx
dWVyeSwgUmVmPEV4ZWN1dGVTUUxBc3luY0NhbGxiYWNrPiYmKSA9IDA7CiBwcm90ZWN0ZWQ6CiAg
ICAgdmlydHVhbCB+RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKTsKIH07CkBAIC0x
NzYsMTIgKzE3MiwxMiBAQCBwcm90ZWN0ZWQ6CiBjbGFzcyBEYXRhYmFzZUJhY2tlbmREaXNwYXRj
aGVyIGZpbmFsIDogcHVibGljIFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIHsKIHB1Ymxp
YzoKICAgICBzdGF0aWMgUmVmPERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShCYWNr
ZW5kRGlzcGF0Y2hlciYsIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7Ci0gICAg
dm9pZCBkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxK
U09OOjpPYmplY3Q+JiYgbWVzc2FnZSkgZmluYWw7CisgICAgdm9pZCBkaXNwYXRjaChsb25nIHBy
b3RvY29sX2NhbGxJZCwgY29uc3QgU3RyaW5nJiBwcm90b2NvbF9tZXRob2QsIFJlZjxKU09OOjpP
YmplY3Q+JiYgcHJvdG9jb2xfbWVzc2FnZSkgZmluYWw7CiBwcml2YXRlOgotICAgIHZvaWQgZXhl
Y3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpT
T046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKLSAgICB2b2lkIGV4ZWN1dGVTUUxBc3luY09wdGlv
bmFsUmV0dXJuVmFsdWVzKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBh
cmFtZXRlcnMpOwotICAgIHZvaWQgZXhlY3V0ZVNRTFN5bmMobG9uZyByZXF1ZXN0SWQsIFJlZlB0
cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7Ci0gICAgdm9pZCBleGVjdXRlU1FMQXN5bmMo
bG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7CisgICAg
dm9pZCBleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgcHJvdG9jbF9jYWxs
SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfcGFyYW1ldGVycyk7CisgICAgdm9p
ZCBleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIHByb3RvY2xfY2FsbElk
LCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX3BhcmFtZXRlcnMpOworICAgIHZvaWQg
ZXhlY3V0ZVNRTFN5bmMobG9uZyBwcm90b2NsX2NhbGxJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4m
JiBwcm90b2NvbF9wYXJhbWV0ZXJzKTsKKyAgICB2b2lkIGV4ZWN1dGVTUUxBc3luYyhsb25nIHBy
b3RvY2xfY2FsbElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX3BhcmFtZXRlcnMp
OwogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogcHVibGljOgog
ICAgIHZvaWQgc2V0QWx0ZXJuYXRlRGlzcGF0Y2hlcihBbHRlcm5hdGVEYXRhYmFzZUJhY2tlbmRE
aXNwYXRjaGVyKiBhbHRlcm5hdGVEaXNwYXRjaGVyKSB7IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciA9
IGFsdGVybmF0ZURpc3BhdGNoZXI7IH0KQEAgLTIzMCw5ICsyMjYsNyBAQCBwcml2YXRlOgogI2lu
Y2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMu
aD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9D
U3RyaW5nLmg+CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykK
ICNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCkBAIC0yNTQsMzcg
KzI0OCwzNiBAQCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRAogICAgIG1fYmFja2VuZERpc3BhdGNo
ZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbigiRGF0YWJhc2UiX3MsIHRoaXMpOwogfQog
Ci12b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElk
LCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKQordm9p
ZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHByb3RvY29sX2NhbGxJ
ZCwgY29uc3QgU3RyaW5nJiBwcm90b2NvbF9tZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgcHJv
dG9jb2xfbWVzc2FnZSkKIHsKICAgICBSZWY8RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcj4gcHJv
dGVjdCgqdGhpcyk7CiAKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzOwotICAg
IG1lc3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9zLCBwYXJhbWV0ZXJzKTsKKyAgICBhdXRvIHBy
b3RvY29sX3BhcmFtZXRlcnMgPSBwcm90b2NvbF9tZXNzYWdlLT5nZXRPYmplY3QoInBhcmFtcyJf
cyk7CiAKLSAgICBpZiAobWV0aG9kID09ICJleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFs
dWVzIikgewotICAgICAgICBleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKHJlcXVl
c3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7CisgICAgaWYgKHByb3RvY29sX21ldGhvZCA9PSAi
ZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyIpIHsKKyAgICAgICAgZXhlY3V0ZVNR
TFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJvdG9j
b2xfcGFyYW1ldGVycykpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmIChtZXRob2Qg
PT0gImV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzIikgewotICAgICAgICBleGVj
dXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1l
dGVycykpOworICAgIGlmIChwcm90b2NvbF9tZXRob2QgPT0gImV4ZWN1dGVTUUxBc3luY09wdGlv
bmFsUmV0dXJuVmFsdWVzIikgeworICAgICAgICBleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVy
blZhbHVlcyhwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJvdG9jb2xfcGFyYW1ldGVycykpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmIChtZXRob2QgPT0gImV4ZWN1dGVTUUxTeW5j
IikgewotICAgICAgICBleGVjdXRlU1FMU3luYyhyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVy
cykpOworICAgIGlmIChwcm90b2NvbF9tZXRob2QgPT0gImV4ZWN1dGVTUUxTeW5jIikgeworICAg
ICAgICBleGVjdXRlU1FMU3luYyhwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJvdG9jb2xfcGFy
YW1ldGVycykpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmIChtZXRob2QgPT0gImV4
ZWN1dGVTUUxBc3luYyIpIHsKLSAgICAgICAgZXhlY3V0ZVNRTEFzeW5jKHJlcXVlc3RJZCwgV1RG
TW92ZShwYXJhbWV0ZXJzKSk7CisgICAgaWYgKHByb3RvY29sX21ldGhvZCA9PSAiZXhlY3V0ZVNR
TEFzeW5jIikgeworICAgICAgICBleGVjdXRlU1FMQXN5bmMocHJvdG9jb2xfY2FsbElkLCBXVEZN
b3ZlKHByb3RvY29sX3BhcmFtZXRlcnMpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNo
ZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RhdGFiYXNlLiIgKyBtZXRob2QgKyAiJyB3YXMgbm90IGZv
dW5kIik7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNr
ZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRGF0YWJhc2UuIiArIHByb3RvY29sX21l
dGhvZCArICInIHdhcyBub3QgZm91bmQiKTsKIH0KIAotdm9pZCBEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVyOjpleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgcmVxdWVzdElk
LCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpCit2b2lkIERhdGFiYXNlQmFja2Vu
ZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyBwcm90
b2NvbF9jYWxsSWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfcGFyYW1ldGVycykK
IHsKLSAgICBpbnQgaW5fZGF0YWJhc2VJZCA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldEludGVn
ZXIocGFyYW1ldGVycy5nZXQoKSwgImRhdGFiYXNlSWQiX3MsIG51bGxwdHIpOwotICAgIFN0cmlu
ZyBpbl9xdWVyeSA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFN0cmluZyhwYXJhbWV0ZXJzLmdl
dCgpLCAicXVlcnkiX3MsIG51bGxwdHIpOworICAgIGF1dG8gaW5fZGF0YWJhc2VJZCA9IG1fYmFj
a2VuZERpc3BhdGNoZXItPmdldEludGVnZXIocHJvdG9jb2xfcGFyYW1ldGVycy5nZXQoKSwgImRh
dGFiYXNlSWQiX3MsIHRydWUpOworICAgIGF1dG8gaW5fcXVlcnkgPSBtX2JhY2tlbmREaXNwYXRj
aGVyLT5nZXRTdHJpbmcocHJvdG9jb2xfcGFyYW1ldGVycy5nZXQoKSwgInF1ZXJ5Il9zLCB0cnVl
KTsKICAgICBpZiAobV9iYWNrZW5kRGlzcGF0Y2hlci0+aGFzUHJvdG9jb2xFcnJvcnMoKSkgewog
ICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmRE
aXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCAiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICdEYXRh
YmFzZS5leGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzJyBjYW4ndCBiZSBwcm9jZXNz
ZWQiX3MpOwogICAgICAgICByZXR1cm47CkBAIC0yOTIsODUgKzI4NSw3NiBAQCB2b2lkIERhdGFi
YXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMo
bG9uZyByZXF1ZXN0SQogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hF
UlMpCiAgICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0
ZURpc3BhdGNoZXItPmV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMocmVxdWVzdElk
LCBpbl9kYXRhYmFzZUlkLCBpbl9xdWVyeSk7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hl
ci0+ZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhwcm90b2NvbF9jYWxsSWQsICpp
bl9kYXRhYmFzZUlkLCBpbl9xdWVyeSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYg
Ly8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAKLSAgICBFcnJvclN0
cmluZyBlcnJvcjsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6
OmNyZWF0ZSgpOwotICAgIFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+IG91dF9jb2x1bW5O
YW1lczsKLSAgICBPcHRpb25hbDxTdHJpbmc+IG91dF9ub3RlczsKLSAgICBPcHRpb25hbDxkb3Vi
bGU+IG91dF90aW1lc3RhbXA7Ci0gICAgT3B0aW9uYWw8SlNPTjo6T2JqZWN0PiBvdXRfdmFsdWVz
OwotICAgIE9wdGlvbmFsPEpTT046OlZhbHVlPiBvdXRfcGF5bG9hZDsKLSAgICBPcHRpb25hbDxp
bnQ+IG91dF9kYXRhYmFzZUlkOwotICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRh
YmFzZTo6RXJyb3I+IG91dF9zcWxFcnJvcjsKLSAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRh
YmFzZTo6UHJpbWFyeUNvbG9ycyBvdXRfc2NyZWVuQ29sb3I7Ci0gICAgUmVmUHRyPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+IG91dF9hbHRlcm5hdGVDb2xvcnM7Ci0g
ICAgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3Igb3V0X3ByaW50
Q29sb3I7Ci0gICAgbV9hZ2VudC0+ZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhl
cnJvciwgaW5fZGF0YWJhc2VJZCwgaW5fcXVlcnksIG91dF9jb2x1bW5OYW1lcywgb3V0X25vdGVz
LCBvdXRfdGltZXN0YW1wLCBvdXRfdmFsdWVzLCBvdXRfcGF5bG9hZCwgb3V0X2RhdGFiYXNlSWQs
IG91dF9zcWxFcnJvciwgb3V0X3NjcmVlbkNvbG9yLCBvdXRfYWx0ZXJuYXRlQ29sb3JzLCBvdXRf
cHJpbnRDb2xvcik7Ci0KLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKSB7Ci0gICAgICAgIGlmIChv
dXRfY29sdW1uTmFtZXMpCi0gICAgICAgICAgICByZXN1bHQtPnNldEFycmF5KCJjb2x1bW5OYW1l
cyJfcywgb3V0X2NvbHVtbk5hbWVzKTsKLSAgICAgICAgaWYgKG91dF9ub3Rlcy5oYXNWYWx1ZSgp
KQotICAgICAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCAqb3V0X25vdGVzKTsK
LSAgICAgICAgaWYgKG91dF90aW1lc3RhbXAuaGFzVmFsdWUoKSkKLSAgICAgICAgICAgIHJlc3Vs
dC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsICpvdXRfdGltZXN0YW1wKTsKLSAgICAgICAgaWYg
KG91dF92YWx1ZXMuaGFzVmFsdWUoKSkKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0T2JqZWN0KCJ2
YWx1ZXMiX3MsICpvdXRfdmFsdWVzKTsKLSAgICAgICAgaWYgKG91dF9wYXlsb2FkLmhhc1ZhbHVl
KCkpCi0gICAgICAgICAgICByZXN1bHQtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCAqb3V0X3BheWxv
YWQpOwotICAgICAgICBpZiAob3V0X2RhdGFiYXNlSWQuaGFzVmFsdWUoKSkKLSAgICAgICAgICAg
IHJlc3VsdC0+c2V0SW50ZWdlcigiZGF0YWJhc2VJZCJfcywgKm91dF9kYXRhYmFzZUlkKTsKLSAg
ICAgICAgaWYgKG91dF9zcWxFcnJvcikKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0T2JqZWN0KCJz
cWxFcnJvciJfcywgb3V0X3NxbEVycm9yKTsKLSAgICAgICAgaWYgKG91dF9zY3JlZW5Db2xvci5o
YXNWYWx1ZSgpKQotICAgICAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9z
LCAqb3V0X3NjcmVlbkNvbG9yKTsKLSAgICAgICAgaWYgKG91dF9hbHRlcm5hdGVDb2xvcnMpCi0g
ICAgICAgICAgICByZXN1bHQtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIG91dF9hbHRl
cm5hdGVDb2xvcnMpOwotICAgICAgICBpZiAob3V0X3ByaW50Q29sb3IuaGFzVmFsdWUoKSkKLSAg
ICAgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCAqb3V0X3ByaW50Q29s
b3IpOworICAgIGF1dG8gcmVzdWx0ID0gbV9hZ2VudC0+ZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJl
dHVyblZhbHVlcygqaW5fZGF0YWJhc2VJZCwgaW5fcXVlcnkpOworICAgIGlmICghcmVzdWx0KSB7
CisgICAgICAgIEFTU0VSVCghcmVzdWx0LmVycm9yKCkuaXNFbXB0eSgpKTsKKyAgICAgICAgbV9i
YWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6
U2VydmVyRXJyb3IsIHJlc3VsdC5lcnJvcigpKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KLSAg
ICBpZiAoIWVycm9yLmxlbmd0aCgpKQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5k
UmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKLSAgICBlbHNlCi0g
ICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERp
c3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7CisKKyAgICBhdXRvIFtvdXRf
b3B0X2NvbHVtbk5hbWVzLCBvdXRfb3B0X25vdGVzLCBvdXRfb3B0X3RpbWVzdGFtcCwgb3V0X29w
dF92YWx1ZXMsIG91dF9vcHRfcGF5bG9hZCwgb3V0X29wdF9kYXRhYmFzZUlkLCBvdXRfb3B0X3Nx
bEVycm9yLCBvdXRfb3B0X3NjcmVlbkNvbG9yLCBvdXRfb3B0X2FsdGVybmF0ZUNvbG9ycywgb3V0
X29wdF9wcmludENvbG9yXSA9IFdURk1vdmUocmVzdWx0LnZhbHVlKCkpOworCisgICAgYXV0byBw
cm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgaWYgKCEh
b3V0X29wdF9jb2x1bW5OYW1lcykKKyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldEFy
cmF5KCJjb2x1bW5OYW1lcyJfcywgb3V0X29wdF9jb2x1bW5OYW1lcy5yZWxlYXNlTm9uTnVsbCgp
KTsKKyAgICBpZiAoISFvdXRfb3B0X25vdGVzKQorICAgICAgICBwcm90b2NvbF9qc29uTWVzc2Fn
ZS0+c2V0U3RyaW5nKCJub3RlcyJfcywgb3V0X29wdF9ub3Rlcyk7CisgICAgaWYgKCEhb3V0X29w
dF90aW1lc3RhbXApCisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXREb3VibGUoInRp
bWVzdGFtcCJfcywgKm91dF9vcHRfdGltZXN0YW1wKTsKKyAgICBpZiAoISFvdXRfb3B0X3ZhbHVl
cykKKyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldE9iamVjdCgidmFsdWVzIl9zLCBv
dXRfb3B0X3ZhbHVlcy5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICBpZiAoISFvdXRfb3B0X3BheWxv
YWQpCisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRWYWx1ZSgicGF5bG9hZCJfcywg
b3V0X29wdF9wYXlsb2FkLnJlbGVhc2VOb25OdWxsKCkpOworICAgIGlmICghIW91dF9vcHRfZGF0
YWJhc2VJZCkKKyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldEludGVnZXIoImRhdGFi
YXNlSWQiX3MsICpvdXRfb3B0X2RhdGFiYXNlSWQpOworICAgIGlmICghIW91dF9vcHRfc3FsRXJy
b3IpCisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRPYmplY3QoInNxbEVycm9yIl9z
LCBvdXRfb3B0X3NxbEVycm9yLnJlbGVhc2VOb25OdWxsKCkpOworICAgIGlmICghIW91dF9vcHRf
c2NyZWVuQ29sb3IpCisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoInNj
cmVlbkNvbG9yIl9zLCBQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVl
KCpvdXRfb3B0X3NjcmVlbkNvbG9yKSk7CisgICAgaWYgKCEhb3V0X29wdF9hbHRlcm5hdGVDb2xv
cnMpCisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29s
b3JzIl9zLCBvdXRfb3B0X2FsdGVybmF0ZUNvbG9ycy5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICBp
ZiAoISFvdXRfb3B0X3ByaW50Q29sb3IpCisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5z
ZXRTdHJpbmcoInByaW50Q29sb3IiX3MsIG91dF9vcHRfcHJpbnRDb2xvcik7CisgICAgbV9iYWNr
ZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90
b2NvbF9qc29uTWVzc2FnZSksIGZhbHNlKTsKIH0KIAogRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXI6OkV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJhY2s6OkV4
ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJhY2soUmVmPEJhY2tlbmREaXNw
YXRjaGVyPiYmIGJhY2tlbmREaXNwYXRjaGVyLCBpbnQgaWQpIDogQmFja2VuZERpc3BhdGNoZXI6
OkNhbGxiYWNrQmFzZShXVEZNb3ZlKGJhY2tlbmREaXNwYXRjaGVyKSwgaWQpIHsgfQogCi12b2lk
IERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNPcHRpb25h
bFJldHVyblZhbHVlc0NhbGxiYWNrOjpzZW5kU3VjY2VzcyhSZWZQdHI8SlNPTjo6QXJyYXlPZjxT
dHJpbmc+PiYmIGNvbHVtbk5hbWVzLCBPcHRpb25hbDxTdHJpbmc+JiBub3RlcywgT3B0aW9uYWw8
ZG91YmxlPiYgdGltZXN0YW1wLCBPcHRpb25hbDxKU09OOjpPYmplY3Q+JiB2YWx1ZXMsIE9wdGlv
bmFsPEpTT046OlZhbHVlPiYgcGF5bG9hZCwgT3B0aW9uYWw8aW50PiYgZGF0YWJhc2VJZCwgUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4mJiBzcWxFcnJvciwgT3B0
aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+IHNjcmVl
bkNvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4m
JiBhbHRlcm5hdGVDb2xvcnMsIE9wdGlvbmFsPERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyOjpQcmludENvbG9yPiBwcmludENvbG9yKQordm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRj
aGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNDYWxsYmFjazo6
c2VuZFN1Y2Nlc3MoUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4mJiBvcHRfY29sdW1uTmFt
ZXMsIGNvbnN0IFN0cmluZyYgb3B0X25vdGVzLCBPcHRpb25hbDxkb3VibGU+JiYgb3B0X3RpbWVz
dGFtcCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBvcHRfdmFsdWVzLCBSZWZQdHI8SlNPTjo6VmFs
dWU+JiYgb3B0X3BheWxvYWQsIE9wdGlvbmFsPGludD4mJiBvcHRfZGF0YWJhc2VJZCwgUmVmUHRy
PFByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+JiYgb3B0X3NxbEVycm9yLCBPcHRpb25hbDxQcm90
b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+JiYgb3B0X3NjcmVlbkNvbG9yLCBSZWZQdHI8
UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+JiYgb3B0X2FsdGVybmF0ZUNvbG9ycywgY29u
c3QgU3RyaW5nJiBvcHRfcHJpbnRDb2xvcikKIHsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29u
TWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgaWYgKGNvbHVtbk5hbWVzKQot
ICAgICAgICBqc29uTWVzc2FnZS0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCBjb2x1bW5OYW1l
cyk7Ci0gICAgaWYgKG5vdGVzLmhhc1ZhbHVlKCkpCi0gICAgICAgIGpzb25NZXNzYWdlLT5zZXRT
dHJpbmcoIm5vdGVzIl9zLCAqbm90ZXMpOwotICAgIGlmICh0aW1lc3RhbXAuaGFzVmFsdWUoKSkK
LSAgICAgICAganNvbk1lc3NhZ2UtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCAqdGltZXN0YW1w
KTsKLSAgICBpZiAodmFsdWVzLmhhc1ZhbHVlKCkpCi0gICAgICAgIGpzb25NZXNzYWdlLT5zZXRP
YmplY3QoInZhbHVlcyJfcywgKnZhbHVlcyk7Ci0gICAgaWYgKHBheWxvYWQuaGFzVmFsdWUoKSkK
LSAgICAgICAganNvbk1lc3NhZ2UtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCAqcGF5bG9hZCk7Ci0g
ICAgaWYgKGRhdGFiYXNlSWQuaGFzVmFsdWUoKSkKLSAgICAgICAganNvbk1lc3NhZ2UtPnNldElu
dGVnZXIoImRhdGFiYXNlSWQiX3MsICpkYXRhYmFzZUlkKTsKLSAgICBpZiAoc3FsRXJyb3IpCi0g
ICAgICAgIGpzb25NZXNzYWdlLT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBzcWxFcnJvcik7Ci0g
ICAgaWYgKHNjcmVlbkNvbG9yLmhhc1ZhbHVlKCkpCi0gICAgICAgIGpzb25NZXNzYWdlLT5zZXRT
dHJpbmcoInNjcmVlbkNvbG9yIl9zLCAqc2NyZWVuQ29sb3IpOwotICAgIGlmIChhbHRlcm5hdGVD
b2xvcnMpCi0gICAgICAgIGpzb25NZXNzYWdlLT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9z
LCBhbHRlcm5hdGVDb2xvcnMpOwotICAgIGlmIChwcmludENvbG9yLmhhc1ZhbHVlKCkpCi0gICAg
ICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoInByaW50Q29sb3IiX3MsICpwcmludENvbG9yKTsK
LSAgICBDYWxsYmFja0Jhc2U6OnNlbmRTdWNjZXNzKFdURk1vdmUoanNvbk1lc3NhZ2UpKTsKKyAg
ICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAg
ICBpZiAoISFvcHRfY29sdW1uTmFtZXMpCisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5z
ZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIG9wdF9jb2x1bW5OYW1lcy5yZWxlYXNlTm9uTnVsbCgp
KTsKKyAgICBpZiAoISFvcHRfbm90ZXMpCisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5z
ZXRTdHJpbmcoIm5vdGVzIl9zLCBvcHRfbm90ZXMpOworICAgIGlmICghIW9wdF90aW1lc3RhbXAp
CisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywg
Km9wdF90aW1lc3RhbXApOworICAgIGlmICghIW9wdF92YWx1ZXMpCisgICAgICAgIHByb3RvY29s
X2pzb25NZXNzYWdlLT5zZXRPYmplY3QoInZhbHVlcyJfcywgb3B0X3ZhbHVlcy5yZWxlYXNlTm9u
TnVsbCgpKTsKKyAgICBpZiAoISFvcHRfcGF5bG9hZCkKKyAgICAgICAgcHJvdG9jb2xfanNvbk1l
c3NhZ2UtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCBvcHRfcGF5bG9hZC5yZWxlYXNlTm9uTnVsbCgp
KTsKKyAgICBpZiAoISFvcHRfZGF0YWJhc2VJZCkKKyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3Nh
Z2UtPnNldEludGVnZXIoImRhdGFiYXNlSWQiX3MsICpvcHRfZGF0YWJhc2VJZCk7CisgICAgaWYg
KCEhb3B0X3NxbEVycm9yKQorICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0T2JqZWN0
KCJzcWxFcnJvciJfcywgb3B0X3NxbEVycm9yLnJlbGVhc2VOb25OdWxsKCkpOworICAgIGlmICgh
IW9wdF9zY3JlZW5Db2xvcikKKyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmlu
Zygic2NyZWVuQ29sb3IiX3MsIFByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50
VmFsdWUoKm9wdF9zY3JlZW5Db2xvcikpOworICAgIGlmICghIW9wdF9hbHRlcm5hdGVDb2xvcnMp
CisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3Jz
Il9zLCBvcHRfYWx0ZXJuYXRlQ29sb3JzLnJlbGVhc2VOb25OdWxsKCkpOworICAgIGlmICghIW9w
dF9wcmludENvbG9yKQorICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJw
cmludENvbG9yIl9zLCBvcHRfcHJpbnRDb2xvcik7CisgICAgQ2FsbGJhY2tCYXNlOjpzZW5kU3Vj
Y2VzcyhXVEZNb3ZlKHByb3RvY29sX2pzb25NZXNzYWdlKSk7CiB9CiAKLXZvaWQgRGF0YWJhc2VC
YWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9u
ZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycykKK3ZvaWQgRGF0
YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1
ZXMobG9uZyBwcm90b2NvbF9jYWxsSWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xf
cGFyYW1ldGVycykKIHsKLSAgICBpbnQgaW5fZGF0YWJhc2VJZCA9IG1fYmFja2VuZERpc3BhdGNo
ZXItPmdldEludGVnZXIocGFyYW1ldGVycy5nZXQoKSwgImRhdGFiYXNlSWQiX3MsIG51bGxwdHIp
OwotICAgIFN0cmluZyBpbl9xdWVyeSA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFN0cmluZyhw
YXJhbWV0ZXJzLmdldCgpLCAicXVlcnkiX3MsIG51bGxwdHIpOworICAgIGF1dG8gaW5fZGF0YWJh
c2VJZCA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldEludGVnZXIocHJvdG9jb2xfcGFyYW1ldGVy
cy5nZXQoKSwgImRhdGFiYXNlSWQiX3MsIHRydWUpOworICAgIGF1dG8gaW5fcXVlcnkgPSBtX2Jh
Y2tlbmREaXNwYXRjaGVyLT5nZXRTdHJpbmcocHJvdG9jb2xfcGFyYW1ldGVycy5nZXQoKSwgInF1
ZXJ5Il9zLCB0cnVlKTsKICAgICBpZiAobV9iYWNrZW5kRGlzcGF0Y2hlci0+aGFzUHJvdG9jb2xF
cnJvcnMoKSkgewogICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVy
cm9yKEJhY2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCAiU29tZSBhcmd1bWVudHMgb2Yg
bWV0aG9kICdEYXRhYmFzZS5leGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcycgY2Fu
J3QgYmUgcHJvY2Vzc2VkIl9zKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMzc4LDIwICszNjIsMTgg
QEAgdm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FMQXN5bmNPcHRpb25h
bFJldHVyblZhbHVlcyhsb25nIHJlcXVlc3QKIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJO
QVRFX0RJU1BBVENIRVJTKQogICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAg
ICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5leGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZh
bHVlcyhyZXF1ZXN0SWQsIGluX2RhdGFiYXNlSWQsIGluX3F1ZXJ5KTsKKyAgICAgICAgbV9hbHRl
cm5hdGVEaXNwYXRjaGVyLT5leGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhwcm90
b2NvbF9jYWxsSWQsICppbl9kYXRhYmFzZUlkLCBpbl9xdWVyeSk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMp
CiAKLSAgICBSZWY8RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkV4ZWN1dGVTUUxB
c3luY09wdGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJhY2s+IGNhbGxiYWNrID0gYWRvcHRSZWYoKm5l
dyBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5jT3B0aW9u
YWxSZXR1cm5WYWx1ZXNDYWxsYmFjayhtX2JhY2tlbmREaXNwYXRjaGVyLmNvcHlSZWYoKSwgcmVx
dWVzdElkKSk7Ci0gICAgbV9hZ2VudC0+ZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1
ZXMoaW5fZGF0YWJhc2VJZCwgaW5fcXVlcnksIGNhbGxiYWNrLmNvcHlSZWYoKSk7Ci0KKyAgICBt
X2FnZW50LT5leGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcygqaW5fZGF0YWJhc2VJ
ZCwgaW5fcXVlcnksIGFkb3B0UmVmKCpuZXcgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXI6OkV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJhY2sobV9iYWNrZW5k
RGlzcGF0Y2hlci5jb3B5UmVmKCksIHByb3RvY29sX2NhbGxJZCkpKTsKIH0KIAotdm9pZCBEYXRh
YmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FMU3luYyhsb25nIHJlcXVlc3RJZCwgUmVm
UHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKQordm9pZCBEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVyOjpleGVjdXRlU1FMU3luYyhsb25nIHByb3RvY29sX2NhbGxJZCwgUmVmUHRyPEpTT046
Ok9iamVjdD4mJiBwcm90b2NvbF9wYXJhbWV0ZXJzKQogewotICAgIGludCBpbl9kYXRhYmFzZUlk
ID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0SW50ZWdlcihwYXJhbWV0ZXJzLmdldCgpLCAiZGF0
YWJhc2VJZCJfcywgbnVsbHB0cik7Ci0gICAgU3RyaW5nIGluX3F1ZXJ5ID0gbV9iYWNrZW5kRGlz
cGF0Y2hlci0+Z2V0U3RyaW5nKHBhcmFtZXRlcnMuZ2V0KCksICJxdWVyeSJfcywgbnVsbHB0cik7
CisgICAgYXV0byBpbl9kYXRhYmFzZUlkID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0SW50ZWdl
cihwcm90b2NvbF9wYXJhbWV0ZXJzLmdldCgpLCAiZGF0YWJhc2VJZCJfcywgdHJ1ZSk7CisgICAg
YXV0byBpbl9xdWVyeSA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFN0cmluZyhwcm90b2NvbF9w
YXJhbWV0ZXJzLmdldCgpLCAicXVlcnkiX3MsIHRydWUpOwogICAgIGlmIChtX2JhY2tlbmREaXNw
YXRjaGVyLT5oYXNQcm90b2NvbEVycm9ycygpKSB7CiAgICAgICAgIG1fYmFja2VuZERpc3BhdGNo
ZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OkludmFsaWRQYXJhbXMs
ICJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJ0RhdGFiYXNlLmV4ZWN1dGVTUUxTeW5jJyBjYW4n
dCBiZSBwcm9jZXNzZWQiX3MpOwogICAgICAgICByZXR1cm47CkBAIC0zOTksNjUgKzM4MSw1NiBA
QCB2b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxTeW5jKGxvbmcgcmVx
dWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZQogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5B
VEVfRElTUEFUQ0hFUlMpCiAgICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgewotICAgICAg
ICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmV4ZWN1dGVTUUxTeW5jKHJlcXVlc3RJZCwgaW5fZGF0
YWJhc2VJZCwgaW5fcXVlcnkpOworICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmV4ZWN1
dGVTUUxTeW5jKHByb3RvY29sX2NhbGxJZCwgKmluX2RhdGFiYXNlSWQsIGluX3F1ZXJ5KTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKIAotICAgIEVycm9yU3RyaW5nIGVycm9yOwotICAgIFJlZjxKU09OOjpP
YmplY3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgUmVmUHRyPEpTT046
OkFycmF5T2Y8U3RyaW5nPj4gb3V0X2NvbHVtbk5hbWVzOwotICAgIFN0cmluZyBvdXRfbm90ZXM7
Ci0gICAgZG91YmxlIG91dF90aW1lc3RhbXA7Ci0gICAgSlNPTjo6T2JqZWN0IG91dF92YWx1ZXM7
Ci0gICAgSlNPTjo6VmFsdWUgb3V0X3BheWxvYWQ7Ci0gICAgaW50IG91dF9kYXRhYmFzZUlkOwot
ICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IG91dF9zcWxF
cnJvcjsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlz
dD4gb3V0X2FsdGVybmF0ZUNvbG9yczsKLSAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFz
ZTo6UHJpbWFyeUNvbG9ycyBvdXRfc2NyZWVuQ29sb3I7Ci0gICAgRGF0YWJhc2VCYWNrZW5kRGlz
cGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3Igb3V0X3ByaW50Q29sb3I7Ci0gICAgbV9hZ2VudC0+
ZXhlY3V0ZVNRTFN5bmMoZXJyb3IsIGluX2RhdGFiYXNlSWQsIGluX3F1ZXJ5LCBvdXRfY29sdW1u
TmFtZXMsICZvdXRfbm90ZXMsICZvdXRfdGltZXN0YW1wLCBvdXRfdmFsdWVzLCAmb3V0X3BheWxv
YWQsICZvdXRfZGF0YWJhc2VJZCwgb3V0X3NxbEVycm9yLCBvdXRfYWx0ZXJuYXRlQ29sb3JzLCAm
b3V0X3NjcmVlbkNvbG9yLCAmb3V0X3ByaW50Q29sb3IpOwotCi0gICAgaWYgKCFlcnJvci5sZW5n
dGgoKSkgewotICAgICAgICByZXN1bHQtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgb3V0X2Nv
bHVtbk5hbWVzKTsKLSAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCBvdXRfbm90
ZXMpOwotICAgICAgICByZXN1bHQtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCBvdXRfdGltZXN0
YW1wKTsKLSAgICAgICAgcmVzdWx0LT5zZXRPYmplY3QoInZhbHVlcyJfcywgb3V0X3ZhbHVlcyk7
Ci0gICAgICAgIHJlc3VsdC0+c2V0VmFsdWUoInBheWxvYWQiX3MsIG91dF9wYXlsb2FkKTsKLSAg
ICAgICAgcmVzdWx0LT5zZXRJbnRlZ2VyKCJkYXRhYmFzZUlkIl9zLCBvdXRfZGF0YWJhc2VJZCk7
Ci0gICAgICAgIHJlc3VsdC0+c2V0T2JqZWN0KCJzcWxFcnJvciJfcywgb3V0X3NxbEVycm9yKTsK
LSAgICAgICAgcmVzdWx0LT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCBvdXRfYWx0ZXJu
YXRlQ29sb3JzKTsKLSAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCBJ
bnNwZWN0b3I6OlByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUob3V0
X3NjcmVlbkNvbG9yKSk7Ci0gICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9z
LCBJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUo
b3V0X3ByaW50Q29sb3IpKTsKKyAgICBhdXRvIHJlc3VsdCA9IG1fYWdlbnQtPmV4ZWN1dGVTUUxT
eW5jKCppbl9kYXRhYmFzZUlkLCBpbl9xdWVyeSk7CisgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAg
ICAgQVNTRVJUKCFyZXN1bHQuZXJyb3IoKS5pc0VtcHR5KCkpOworICAgICAgICBtX2JhY2tlbmRE
aXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJF
cnJvciwgcmVzdWx0LmVycm9yKCkpOworICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmICgh
ZXJyb3IubGVuZ3RoKCkpCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25z
ZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2UpOwotICAgIGVsc2UKLSAgICAgICAg
bV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hl
cjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKKworICAgIGF1dG8gW291dF9jb2x1bW5O
YW1lcywgb3V0X25vdGVzLCBvdXRfdGltZXN0YW1wLCBvdXRfdmFsdWVzLCBvdXRfcGF5bG9hZCwg
b3V0X2RhdGFiYXNlSWQsIG91dF9zcWxFcnJvciwgb3V0X2FsdGVybmF0ZUNvbG9ycywgb3V0X3Nj
cmVlbkNvbG9yLCBvdXRfcHJpbnRDb2xvcl0gPSBXVEZNb3ZlKHJlc3VsdC52YWx1ZSgpKTsKKwor
ICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwor
ICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIFdURk1v
dmUob3V0X2NvbHVtbk5hbWVzKSk7CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmlu
Zygibm90ZXMiX3MsIG91dF9ub3Rlcyk7CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldERv
dWJsZSgidGltZXN0YW1wIl9zLCBvdXRfdGltZXN0YW1wKTsKKyAgICBwcm90b2NvbF9qc29uTWVz
c2FnZS0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIFdURk1vdmUob3V0X3ZhbHVlcykpOworICAgIHBy
b3RvY29sX2pzb25NZXNzYWdlLT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgV1RGTW92ZShvdXRfcGF5
bG9hZCkpOworICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRJbnRlZ2VyKCJkYXRhYmFzZUlk
Il9zLCBvdXRfZGF0YWJhc2VJZCk7CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldE9iamVj
dCgic3FsRXJyb3IiX3MsIFdURk1vdmUob3V0X3NxbEVycm9yKSk7CisgICAgcHJvdG9jb2xfanNv
bk1lc3NhZ2UtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIFdURk1vdmUob3V0X2FsdGVy
bmF0ZUNvbG9ycykpOworICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoInNjcmVl
bkNvbG9yIl9zLCBQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKG91
dF9zY3JlZW5Db2xvcikpOworICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoInBy
aW50Q29sb3IiX3MsIG91dF9wcmludENvbG9yKTsKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5z
ZW5kUmVzcG9uc2UocHJvdG9jb2xfY2FsbElkLCBXVEZNb3ZlKHByb3RvY29sX2pzb25NZXNzYWdl
KSwgZmFsc2UpOwogfQogCiBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0
ZVNRTEFzeW5jQ2FsbGJhY2s6OkV4ZWN1dGVTUUxBc3luY0NhbGxiYWNrKFJlZjxCYWNrZW5kRGlz
cGF0Y2hlcj4mJiBiYWNrZW5kRGlzcGF0Y2hlciwgaW50IGlkKSA6IEJhY2tlbmREaXNwYXRjaGVy
OjpDYWxsYmFja0Jhc2UoV1RGTW92ZShiYWNrZW5kRGlzcGF0Y2hlciksIGlkKSB7IH0KIAotdm9p
ZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5jQ2FsbGJh
Y2s6OnNlbmRTdWNjZXNzKFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+JiYgY29sdW1uTmFt
ZXMsIGNvbnN0IFN0cmluZyYgbm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIEpTT046Ok9iamVjdCB2
YWx1ZXMsIEpTT046OlZhbHVlIHBheWxvYWQsIGludCBkYXRhYmFzZUlkLCBSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiYmIHNxbEVycm9yLCBJbnNwZWN0b3I6OlBy
b3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyBzY3JlZW5Db2xvciwgUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+JiYgYWx0ZXJuYXRlQ29sb3JzLCBE
YXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UHJpbnRDb2xvciBwcmludENvbG9yKQor
dm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5jQ2Fs
bGJhY2s6OnNlbmRTdWNjZXNzKFJlZjxKU09OOjpBcnJheU9mPFN0cmluZz4+JiYgY29sdW1uTmFt
ZXMsIGNvbnN0IFN0cmluZyYgbm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIFJlZjxKU09OOjpPYmpl
Y3Q+JiYgdmFsdWVzLCBSZWY8SlNPTjo6VmFsdWU+JiYgcGF5bG9hZCwgaW50IGRhdGFiYXNlSWQs
IFJlZjxQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiYmIHNxbEVycm9yLCBQcm90b2NvbDo6RGF0
YWJhc2U6OlByaW1hcnlDb2xvcnMgc2NyZWVuQ29sb3IsIFJlZjxQcm90b2NvbDo6RGF0YWJhc2U6
OkNvbG9yTGlzdD4mJiBhbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyYgcHJpbnRDb2xvcikK
IHsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3Jl
YXRlKCk7Ci0gICAganNvbk1lc3NhZ2UtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgY29sdW1u
TmFtZXMpOwotICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm5vdGVzIl9zLCBub3Rlcyk7Ci0g
ICAganNvbk1lc3NhZ2UtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCB0aW1lc3RhbXApOwotICAg
IGpzb25NZXNzYWdlLT5zZXRPYmplY3QoInZhbHVlcyJfcywgdmFsdWVzKTsKLSAgICBqc29uTWVz
c2FnZS0+c2V0VmFsdWUoInBheWxvYWQiX3MsIHBheWxvYWQpOwotICAgIGpzb25NZXNzYWdlLT5z
ZXRJbnRlZ2VyKCJkYXRhYmFzZUlkIl9zLCBkYXRhYmFzZUlkKTsKLSAgICBqc29uTWVzc2FnZS0+
c2V0T2JqZWN0KCJzcWxFcnJvciJfcywgc3FsRXJyb3IpOwotICAgIGpzb25NZXNzYWdlLT5zZXRT
dHJpbmcoInNjcmVlbkNvbG9yIl9zLCBJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0SGVscGVyczo6
Z2V0RW51bUNvbnN0YW50VmFsdWUoc2NyZWVuQ29sb3IpKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0
QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywgYWx0ZXJuYXRlQ29sb3JzKTsKLSAgICBqc29uTWVz
c2FnZS0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCBJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0
SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUocHJpbnRDb2xvcikpOwotICAgIENhbGxiYWNr
QmFzZTo6c2VuZFN1Y2Nlc3MoV1RGTW92ZShqc29uTWVzc2FnZSkpOworICAgIGF1dG8gcHJvdG9j
b2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIHByb3RvY29sX2pz
b25NZXNzYWdlLT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIFdURk1vdmUoY29sdW1uTmFtZXMp
KTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJub3RlcyJfcywgbm90ZXMp
OworICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywgdGlt
ZXN0YW1wKTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3Ms
IFdURk1vdmUodmFsdWVzKSk7CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFZhbHVlKCJw
YXlsb2FkIl9zLCBXVEZNb3ZlKHBheWxvYWQpKTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+
c2V0SW50ZWdlcigiZGF0YWJhc2VJZCJfcywgZGF0YWJhc2VJZCk7CisgICAgcHJvdG9jb2xfanNv
bk1lc3NhZ2UtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIFdURk1vdmUoc3FsRXJyb3IpKTsKKyAg
ICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgUHJvdG9j
b2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShzY3JlZW5Db2xvcikpOworICAg
IHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCBXVEZN
b3ZlKGFsdGVybmF0ZUNvbG9ycykpOworICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJp
bmcoInByaW50Q29sb3IiX3MsIHByaW50Q29sb3IpOworICAgIENhbGxiYWNrQmFzZTo6c2VuZFN1
Y2Nlc3MoV1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSkpOwogfQogCi12b2lkIERhdGFiYXNl
QmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxBc3luYyhsb25nIHJlcXVlc3RJZCwgUmVmUHRy
PEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKQordm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRj
aGVyOjpleGVjdXRlU1FMQXN5bmMobG9uZyBwcm90b2NvbF9jYWxsSWQsIFJlZlB0cjxKU09OOjpP
YmplY3Q+JiYgcHJvdG9jb2xfcGFyYW1ldGVycykKIHsKLSAgICBpbnQgaW5fZGF0YWJhc2VJZCA9
IG1fYmFja2VuZERpc3BhdGNoZXItPmdldEludGVnZXIocGFyYW1ldGVycy5nZXQoKSwgImRhdGFi
YXNlSWQiX3MsIG51bGxwdHIpOwotICAgIFN0cmluZyBpbl9xdWVyeSA9IG1fYmFja2VuZERpc3Bh
dGNoZXItPmdldFN0cmluZyhwYXJhbWV0ZXJzLmdldCgpLCAicXVlcnkiX3MsIG51bGxwdHIpOwor
ICAgIGF1dG8gaW5fZGF0YWJhc2VJZCA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldEludGVnZXIo
cHJvdG9jb2xfcGFyYW1ldGVycy5nZXQoKSwgImRhdGFiYXNlSWQiX3MsIHRydWUpOworICAgIGF1
dG8gaW5fcXVlcnkgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRTdHJpbmcocHJvdG9jb2xfcGFy
YW1ldGVycy5nZXQoKSwgInF1ZXJ5Il9zLCB0cnVlKTsKICAgICBpZiAobV9iYWNrZW5kRGlzcGF0
Y2hlci0+aGFzUHJvdG9jb2xFcnJvcnMoKSkgewogICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVy
LT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCAi
U29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICdEYXRhYmFzZS5leGVjdXRlU1FMQXN5bmMnIGNhbid0
IGJlIHByb2Nlc3NlZCJfcyk7CiAgICAgICAgIHJldHVybjsKQEAgLTQ2NSwxNCArNDM4LDEyIEBA
IHZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTEFzeW5jKGxvbmcgcmVx
dWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqCiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKICAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAg
IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+ZXhlY3V0ZVNRTEFzeW5jKHJlcXVlc3RJZCwgaW5fZGF0
YWJhc2VJZCwgaW5fcXVlcnkpOworICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmV4ZWN1
dGVTUUxBc3luYyhwcm90b2NvbF9jYWxsSWQsICppbl9kYXRhYmFzZUlkLCBpbl9xdWVyeSk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5B
VEVfRElTUEFUQ0hFUlMpCiAKLSAgICBSZWY8RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXI6OkV4ZWN1dGVTUUxBc3luY0NhbGxiYWNrPiBjYWxsYmFjayA9IGFkb3B0UmVmKCpuZXcgRGF0
YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkV4ZWN1dGVTUUxBc3luY0NhbGxiYWNrKG1f
YmFja2VuZERpc3BhdGNoZXIuY29weVJlZigpLCByZXF1ZXN0SWQpKTsKLSAgICBtX2FnZW50LT5l
eGVjdXRlU1FMQXN5bmMoaW5fZGF0YWJhc2VJZCwgaW5fcXVlcnksIGNhbGxiYWNrLmNvcHlSZWYo
KSk7Ci0KKyAgICBtX2FnZW50LT5leGVjdXRlU1FMQXN5bmMoKmluX2RhdGFiYXNlSWQsIGluX3F1
ZXJ5LCBhZG9wdFJlZigqbmV3IERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVj
dXRlU1FMQXN5bmNDYWxsYmFjayhtX2JhY2tlbmREaXNwYXRjaGVyLmNvcHlSZWYoKSwgcHJvdG9j
b2xfY2FsbElkKSkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKQEAgLTUxMyw2ICs0
ODQsNyBAQCB2b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxBc3luYyhs
b25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iagogCiAjaW5jbHVkZSAiVGVzdFByb3RvY29s
T2JqZWN0cy5oIgogI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL09w
dGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJ
bnNwZWN0b3IgewpAQCAtNTU2LDcgKzUyOCw2IEBAIGNsYXNzIEZyb250ZW5kUm91dGVyOwogI2lu
Y2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJp
bmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKQEAgLTU5Nyw3ICs1NjgsOSBAQCBuYW1l
c3BhY2UgSW5zcGVjdG9yIHsKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+
CisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7
CiAKQEAgLTYxOSw3ICs1OTIsNyBAQCBlbnVtIGNsYXNzIFByaW1hcnlDb2xvcnM7CiBuYW1lc3Bh
Y2UgRGF0YWJhc2UgewogLyogVW5pcXVlIGlkZW50aWZpZXIgb2YgRGF0YWJhc2Ugb2JqZWN0LiAq
LwogdXNpbmcgRGF0YWJhc2VJZCA9IGludDsKLXVzaW5nIENvbG9yTGlzdCA9IEpTT046OkFycmF5
T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+OwordXNpbmcg
Q29sb3JMaXN0ID0gSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xv
cnM+OwogfSAvLyBEYXRhYmFzZQogLy8gRW5kIG9mIHR5cGVkZWZzLgogCkBAIC02NDMsNyArNjE2
LDcgQEAgZW51bSBjbGFzcyBQcmltYXJ5Q29sb3JzIHsKIH07IC8vIGVudW0gY2xhc3MgUHJpbWFy
eUNvbG9ycwogCiAvKiBEYXRhYmFzZSBlcnJvci4gKi8KLWNsYXNzIEVycm9yIDogcHVibGljIEpT
T046Ok9iamVjdEJhc2UgeworY2xhc3MgRXJyb3IgZmluYWwgOiBwdWJsaWMgSlNPTjo6T2JqZWN0
QmFzZSB7CiBwdWJsaWM6CiAgICAgZW51bSB7CiAgICAgICAgIE5vRmllbGRzU2V0ID0gMCwKQEAg
LTY3MCwxNyArNjQzLDE3IEBAIHB1YmxpYzoKICAgICAgICAgZnJpZW5kIGNsYXNzIEVycm9yOwog
ICAgIHB1YmxpYzoKIAotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTWVzc2FnZVNldD4mIHNldE1l
c3NhZ2UoY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IE1lc3Nh
Z2VTZXQ+JiBzZXRNZXNzYWdlKGNvbnN0IFN0cmluZyYgaW5fbWVzc2FnZSkKICAgICAgICAgewog
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE1lc3NhZ2VTZXQpLCBwcm9wZXJ0
eV9tZXNzYWdlX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmco
Im1lc3NhZ2UiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm1l
c3NhZ2UiX3MsIGluX21lc3NhZ2UpOwogICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxNZXNz
YWdlU2V0PigpOwogICAgICAgICB9CiAKLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IENvZGVTZXQ+
JiBzZXRDb2RlKGludCB2YWx1ZSkKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IENvZGVTZXQ+JiBz
ZXRDb2RlKGludCBpbl9jb2RlKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VS
VCghKFNUQVRFICYgQ29kZVNldCksIHByb3BlcnR5X2NvZGVfYWxyZWFkeV9zZXQpOwotICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldEludGVnZXIoImNvZGUiX3MsIHZhbHVlKTsKKyAgICAgICAgICAg
IG1fcmVzdWx0LT5zZXRJbnRlZ2VyKCJjb2RlIl9zLCBpbl9jb2RlKTsKICAgICAgICAgICAgIHJl
dHVybiBjYXN0U3RhdGU8Q29kZVNldD4oKTsKICAgICAgICAgfQogCkBAIC03MTksNyArNjkyLDcg
QEAgT3B0aW9uYWw8UHJvdG9jb2xFbnVtVHlwZT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nKGNv
bnN0IFN0cmluZyYpOwogCiAvLyBFbnVtcyBpbiB0aGUgJ0RhdGFiYXNlJyBEb21haW4KIHRlbXBs
YXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29s
b3JzPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJh
c2U6OlByaW1hcnlDb2xvcnM+KGNvbnN0IFN0cmluZyYpOworT3B0aW9uYWw8UHJvdG9jb2w6OkRh
dGFiYXNlOjpQcmltYXJ5Q29sb3JzPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8UHJvdG9jb2w6
OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPihjb25zdCBTdHJpbmcmKTsKIAogfSAvLyBuYW1lc3Bh
Y2UgVGVzdEhlbHBlcnMKIApAQCAtNzcxLDggKzc0NCw3IEBAIHN0cnVjdCBEZWZhdWx0SGFzaDxJ
bnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4gOiBJbnRIYXNoPElu
c3BlCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5o
IgogCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3Ig
ewogCkBAIC03OTcsMTYgKzc2OSwxNiBAQCBTdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoaW50
IGNvZGUpIHsKIC8vIEVudW1zIGluIHRoZSAnRGF0YWJhc2UnIERvbWFpbgogCiB0ZW1wbGF0ZTw+
Ci1PcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4g
cGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQ
cmltYXJ5Q29sb3JzPihjb25zdCBTdHJpbmcmIHByb3RvY29sU3RyaW5nKQorT3B0aW9uYWw8UHJv
dG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8
UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPihjb25zdCBTdHJpbmcmIHByb3RvY29s
U3RyaW5nKQogewogICAgIHN0YXRpYyBjb25zdCBzaXplX3QgY29uc3RhbnRWYWx1ZXNbXSA9IHsK
LSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNv
bG9yczo6UmVkLAotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNl
OjpQcmltYXJ5Q29sb3JzOjpHcmVlbiwKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3Rv
Y29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9yczo6Qmx1ZSwKKyAgICAgICAgKHNpemVfdClQcm90
b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM6OlJlZCwKKyAgICAgICAgKHNpemVfdClQcm90
b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM6OkdyZWVuLAorICAgICAgICAoc2l6ZV90KVBy
b3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9yczo6Qmx1ZSwKICAgICB9OwogICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgMzsgKytpKQogICAgICAgICBpZiAocHJvdG9jb2xTdHJpbmcgPT0g
ZW51bV9jb25zdGFudF92YWx1ZXNbY29uc3RhbnRWYWx1ZXNbaV1dKQotICAgICAgICAgICAgcmV0
dXJuIChJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyljb25zdGFu
dFZhbHVlc1tpXTsKKyAgICAgICAgICAgIHJldHVybiAoUHJvdG9jb2w6OkRhdGFiYXNlOjpQcmlt
YXJ5Q29sb3JzKWNvbnN0YW50VmFsdWVzW2ldOwogCiAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
IH0KQEAgLTg2MywxMCArODM1LDEwIEBAIGNsYXNzIE9iakNJbnNwZWN0b3JEYXRhYmFzZUJhY2tl
bmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEFsdGVybmF0ZURhdGFiYXNlQmFjCiAgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgT2JqQ0luc3BlY3RvckRhdGFiYXNl
QmFja2VuZERpc3BhdGNoZXIoaWQ8VGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5IYW5kbGVyPiBo
YW5kbGVyKSB7IG1fZGVsZWdhdGUgPSBoYW5kbGVyOyB9Ci0gICAgdm9pZCBleGVjdXRlU1FMU3lu
Y09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgcmVxdWVzdElkLCBpbnQgaW5fZGF0YWJhc2VJZCwg
Y29uc3QgU3RyaW5nJiBpbl9xdWVyeSkgZmluYWw7Ci0gICAgdm9pZCBleGVjdXRlU1FMQXN5bmNP
cHRpb25hbFJldHVyblZhbHVlcyhsb25nIHJlcXVlc3RJZCwgaW50IGluX2RhdGFiYXNlSWQsIGNv
bnN0IFN0cmluZyYgaW5fcXVlcnkpIGZpbmFsOwotICAgIHZvaWQgZXhlY3V0ZVNRTFN5bmMobG9u
ZyByZXF1ZXN0SWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5KSBm
aW5hbDsKLSAgICB2b2lkIGV4ZWN1dGVTUUxBc3luYyhsb25nIHJlcXVlc3RJZCwgaW50IGluX2Rh
dGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnkpIGZpbmFsOworICAgIHZvaWQgZXhlY3V0
ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIHByb3RvY29sX2NhbGxJZCwgaW50IGRh
dGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgcXVlcnkpIGZpbmFsOworICAgIHZvaWQgZXhlY3V0ZVNR
TEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyBwcm90b2NvbF9jYWxsSWQsIGludCBkYXRh
YmFzZUlkLCBjb25zdCBTdHJpbmcmIHF1ZXJ5KSBmaW5hbDsKKyAgICB2b2lkIGV4ZWN1dGVTUUxT
eW5jKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBpbnQgZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBx
dWVyeSkgZmluYWw7CisgICAgdm9pZCBleGVjdXRlU1FMQXN5bmMobG9uZyBwcm90b2NvbF9jYWxs
SWQsIGludCBkYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIHF1ZXJ5KSBmaW5hbDsKIHByaXZhdGU6
CiAgICAgUmV0YWluUHRyPGlkPFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluSGFuZGxlcj4+IG1f
ZGVsZWdhdGU7CiB9OwpAQCAtOTE0LDE4MyArODg2LDE3OSBAQCBwcml2YXRlOgogCiBuYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKIAotdm9pZCBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0
Y2hlcjo6ZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIHJlcXVlc3RJZCwg
aW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnkpCit2b2lkIE9iakNJbnNw
ZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0
dXJuVmFsdWVzKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3Qg
U3RyaW5nJiBpbl9xdWVyeSkKIHsKICAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxl
Y3RvcjpAc2VsZWN0b3IoZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1dpdGhFcnJv
ckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazpkYXRhYmFzZUlkOnF1ZXJ5OildKSB7Ci0gICAgICAg
IGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNr
ZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRGF0YWJhc2UuZXhlY3V0ZVNRTFN5bmNP
cHRpb25hbFJldHVyblZhbHVlcycgd2FzIG5vdCBmb3VuZCJfcyk7CisgICAgICAgIGJhY2tlbmRE
aXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocHJvdG9jb2xfY2FsbElkLCBCYWNrZW5k
RGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRGF0YWJhc2UuZXhlY3V0ZVNRTFN5bmNPcHRp
b25hbFJldHVyblZhbHVlcycgd2FzIG5vdCBmb3VuZCJfcyk7CiAgICAgICAgIGJhY2tlbmREaXNw
YXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
ICAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFj
a2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmRE
aXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hl
cigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHByb3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNo
ZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CiAgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNl
bmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgfTsKIAotICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF4o
TlNBcnJheS8qPE5TU3RyaW5nPiovICoqY29sdW1uTmFtZXMsIE5TU3RyaW5nICoqbm90ZXMsIGRv
dWJsZSAqdGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKip2YWx1ZXMsIFJXSVByb3Rv
Y29sSlNPTk9iamVjdCAqKnBheWxvYWQsIGludCAqZGF0YWJhc2VJZCwgVGVzdFByb3RvY29sRGF0
YWJhc2VFcnJvciAqKnNxbEVycm9yLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMg
KnNjcmVlbkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiphbHRlcm5hdGVDb2xvcnMsIFRl
c3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50
Q29sb3IgKnByaW50Q29sb3IpIHsKLSAgICAgICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0T2Jq
ZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZP
Ul9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKGNvbHVtbk5hbWVzLCBAImNvbHVtbk5hbWVzIik7Ci0g
ICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihub3Rlcywg
QCJub3RlcyIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJB
TUVURVIodmFsdWVzLCBAInZhbHVlcyIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JB
RF9PUFRJT05BTF9QQVJBTUVURVIocGF5bG9hZCwgQCJwYXlsb2FkIik7Ci0gICAgICAgIFRIUk9X
X0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihzcWxFcnJvciwgQCJzcWxFcnJv
ciIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIo
YWx0ZXJuYXRlQ29sb3JzLCBAImFsdGVybmF0ZUNvbG9ycyIpOwotICAgICAgICBpZiAoY29sdW1u
TmFtZXMpCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJf
cywgdG9KU09OU3RyaW5nQXJyYXkoKmNvbHVtbk5hbWVzKSk7Ci0gICAgICAgIGlmIChub3RlcykK
LSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKCJub3RlcyJfcywgKm5vdGVzKTsK
LSAgICAgICAgaWYgKHRpbWVzdGFtcCkKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0RG91
YmxlKCJ0aW1lc3RhbXAiX3MsICp0aW1lc3RhbXApOwotICAgICAgICBpZiAodmFsdWVzKQotICAg
ICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRPYmplY3QoInZhbHVlcyJfcywgWyp2YWx1ZXMgdG9K
U09OT2JqZWN0XSk7Ci0gICAgICAgIGlmIChwYXlsb2FkKQotICAgICAgICAgICAgcmVzdWx0T2Jq
ZWN0LT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgWypwYXlsb2FkIHRvSlNPTk9iamVjdF0pOwotICAg
ICAgICBpZiAoZGF0YWJhc2VJZCkKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0SW50ZWdl
cigiZGF0YWJhc2VJZCJfcywgKmRhdGFiYXNlSWQpOwotICAgICAgICBpZiAoc3FsRXJyb3IpCi0g
ICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIFsqc3FsRXJy
b3IgdG9KU09OT2JqZWN0XSk7Ci0gICAgICAgIGlmIChzY3JlZW5Db2xvcikKLSAgICAgICAgICAg
IHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgdG9Qcm90b2NvbFN0cmlu
Zygqc2NyZWVuQ29sb3IpKTsKLSAgICAgICAgaWYgKGFsdGVybmF0ZUNvbG9ycykKLSAgICAgICAg
ICAgIHJlc3VsdE9iamVjdC0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywgdG9KU09OU3Ry
aW5nQXJyYXkoKmFsdGVybmF0ZUNvbG9ycykpOwotICAgICAgICBpZiAocHJpbnRDb2xvcikKLSAg
ICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCB0b1Byb3Rv
Y29sU3RyaW5nKCpwcmludENvbG9yKSk7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNl
bmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0T2JqZWN0KSwgZmFsc2UpOworICAg
IGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF4oTlNBcnJheS8qPE5TU3RyaW5nPiovICoqb3V0X29wdF9j
b2x1bW5OYW1lcywgTlNTdHJpbmcgKipvdXRfb3B0X25vdGVzLCBkb3VibGUgKm91dF9vcHRfdGlt
ZXN0YW1wLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKipvdXRfb3B0X3ZhbHVlcywgUldJUHJvdG9j
b2xKU09OT2JqZWN0ICoqb3V0X29wdF9wYXlsb2FkLCBpbnQgKm91dF9vcHRfZGF0YWJhc2VJZCwg
VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKm91dF9vcHRfc3FsRXJyb3IsIFRlc3RQcm90b2Nv
bERhdGFiYXNlUHJpbWFyeUNvbG9ycyAqb3V0X29wdF9zY3JlZW5Db2xvciwgTlNBcnJheS8qPE5T
U3RyaW5nPiovICoqb3V0X29wdF9hbHRlcm5hdGVDb2xvcnMsIFRlc3RQcm90b2NvbERhdGFiYXNl
KGFub255bW91cykgKm91dF9vcHRfcHJpbnRDb2xvcikgeworICAgICAgICBhdXRvIHByb3RvY29s
X2pzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgVEhST1dfRVhD
RVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKG91dF9vcHRfY29sdW1uTmFtZXMsIEAi
Y29sdW1uTmFtZXMiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxf
UEFSQU1FVEVSKG91dF9vcHRfbm90ZXMsIEAibm90ZXMiKTsKKyAgICAgICAgVEhST1dfRVhDRVBU
SU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKG91dF9vcHRfdmFsdWVzLCBAInZhbHVlcyIp
OworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIob3V0
X29wdF9wYXlsb2FkLCBAInBheWxvYWQiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9C
QURfT1BUSU9OQUxfUEFSQU1FVEVSKG91dF9vcHRfc3FsRXJyb3IsIEAic3FsRXJyb3IiKTsKKyAg
ICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKG91dF9vcHRf
YWx0ZXJuYXRlQ29sb3JzLCBAImFsdGVybmF0ZUNvbG9ycyIpOworICAgICAgICBpZiAoISFvdXRf
b3B0X2NvbHVtbk5hbWVzKQorICAgICAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldEFy
cmF5KCJjb2x1bW5OYW1lcyJfcywgdG9KU09OU3RyaW5nQXJyYXkoKm91dF9vcHRfY29sdW1uTmFt
ZXMpKTsKKyAgICAgICAgaWYgKCEhb3V0X29wdF9ub3RlcykKKyAgICAgICAgICAgIHByb3RvY29s
X2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm5vdGVzIl9zLCAqb3V0X29wdF9ub3Rlcyk7CisgICAg
ICAgIGlmICghIW91dF9vcHRfdGltZXN0YW1wKQorICAgICAgICAgICAgcHJvdG9jb2xfanNvbk1l
c3NhZ2UtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCAqb3V0X29wdF90aW1lc3RhbXApOworICAg
ICAgICBpZiAoISFvdXRfb3B0X3ZhbHVlcykKKyAgICAgICAgICAgIHByb3RvY29sX2pzb25NZXNz
YWdlLT5zZXRPYmplY3QoInZhbHVlcyJfcywgWypvdXRfb3B0X3ZhbHVlcyB0b0pTT05PYmplY3Rd
KTsKKyAgICAgICAgaWYgKCEhb3V0X29wdF9wYXlsb2FkKQorICAgICAgICAgICAgcHJvdG9jb2xf
anNvbk1lc3NhZ2UtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCBbKm91dF9vcHRfcGF5bG9hZCB0b0pT
T05PYmplY3RdKTsKKyAgICAgICAgaWYgKCEhb3V0X29wdF9kYXRhYmFzZUlkKQorICAgICAgICAg
ICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldEludGVnZXIoImRhdGFiYXNlSWQiX3MsICpvdXRf
b3B0X2RhdGFiYXNlSWQpOworICAgICAgICBpZiAoISFvdXRfb3B0X3NxbEVycm9yKQorICAgICAg
ICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIFsqb3V0
X29wdF9zcWxFcnJvciB0b0pTT05PYmplY3RdKTsKKyAgICAgICAgaWYgKCEhb3V0X29wdF9zY3Jl
ZW5Db2xvcikKKyAgICAgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoInNj
cmVlbkNvbG9yIl9zLCB0b1Byb3RvY29sU3RyaW5nKCpvdXRfb3B0X3NjcmVlbkNvbG9yKSk7Cisg
ICAgICAgIGlmICghIW91dF9vcHRfYWx0ZXJuYXRlQ29sb3JzKQorICAgICAgICAgICAgcHJvdG9j
b2xfanNvbk1lc3NhZ2UtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIHRvSlNPTlN0cmlu
Z0FycmF5KCpvdXRfb3B0X2FsdGVybmF0ZUNvbG9ycykpOworICAgICAgICBpZiAoISFvdXRfb3B0
X3ByaW50Q29sb3IpCisgICAgICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5n
KCJwcmludENvbG9yIl9zLCB0b1Byb3RvY29sU3RyaW5nKCpvdXRfb3B0X3ByaW50Q29sb3IpKTsK
KyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHByb3RvY29sX2NhbGxJ
ZCwgV1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSksIGZhbHNlKTsKICAgICB9OwogCiAgICAg
aW50IG9faW5fZGF0YWJhc2VJZCA9IGluX2RhdGFiYXNlSWQ7CiAgICAgTlNTdHJpbmcgKm9faW5f
cXVlcnkgPSBpbl9xdWVyeTsKLQogICAgIFttX2RlbGVnYXRlIGV4ZWN1dGVTUUxTeW5jT3B0aW9u
YWxSZXR1cm5WYWx1ZXNXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxs
YmFjazpzdWNjZXNzQ2FsbGJhY2sgZGF0YWJhc2VJZDpvX2luX2RhdGFiYXNlSWQgcXVlcnk6b19p
bl9xdWVyeV07CiB9CiAKLXZvaWQgT2JqQ0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNo
ZXI6OmV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgcmVxdWVzdElkLCBp
bnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSkKK3ZvaWQgT2JqQ0luc3Bl
Y3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0
dXJuVmFsdWVzKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3Qg
U3RyaW5nJiBpbl9xdWVyeSkKIHsKICAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxl
Y3RvcjpAc2VsZWN0b3IoZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNXaXRoRXJy
b3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6ZGF0YWJhc2VJZDpxdWVyeTopXSkgewotICAgICAg
ICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFj
a2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RhdGFiYXNlLmV4ZWN1dGVTUUxBc3lu
Y09wdGlvbmFsUmV0dXJuVmFsdWVzJyB3YXMgbm90IGZvdW5kIl9zKTsKKyAgICAgICAgYmFja2Vu
ZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxsSWQsIEJhY2tl
bmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEYXRhYmFzZS5leGVjdXRlU1FMQXN5bmNP
cHRpb25hbFJldHVyblZhbHVlcycgd2FzIG5vdCBmb3VuZCJfcyk7CiAgICAgICAgIGJhY2tlbmRE
aXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKICAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAg
YmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tl
bmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0
Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHByb3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3Bh
dGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CiAgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCkt
PnNlbmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgfTsKIAotICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9
IF4oTlNBcnJheS8qPE5TU3RyaW5nPiovICoqY29sdW1uTmFtZXMsIE5TU3RyaW5nICoqbm90ZXMs
IGRvdWJsZSAqdGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKip2YWx1ZXMsIFJXSVBy
b3RvY29sSlNPTk9iamVjdCAqKnBheWxvYWQsIGludCAqZGF0YWJhc2VJZCwgVGVzdFByb3RvY29s
RGF0YWJhc2VFcnJvciAqKnNxbEVycm9yLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xv
cnMgKnNjcmVlbkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiphbHRlcm5hdGVDb2xvcnMs
IFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQ
cmludENvbG9yICpwcmludENvbG9yKSB7Ci0gICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3Vs
dE9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihjb2x1bW5OYW1lcywgQCJjb2x1bW5OYW1lcyIp
OwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIobm90
ZXMsIEAibm90ZXMiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxf
UEFSQU1FVEVSKHZhbHVlcywgQCJ2YWx1ZXMiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZP
Ul9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKHBheWxvYWQsIEAicGF5bG9hZCIpOwotICAgICAgICBU
SFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIoc3FsRXJyb3IsIEAic3Fs
RXJyb3IiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1F
VEVSKGFsdGVybmF0ZUNvbG9ycywgQCJhbHRlcm5hdGVDb2xvcnMiKTsKLSAgICAgICAgaWYgKGNv
bHVtbk5hbWVzKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRBcnJheSgiY29sdW1uTmFt
ZXMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KCpjb2x1bW5OYW1lcykpOwotICAgICAgICBpZiAobm90
ZXMpCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZygibm90ZXMiX3MsICpub3Rl
cyk7Ci0gICAgICAgIGlmICh0aW1lc3RhbXApCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNl
dERvdWJsZSgidGltZXN0YW1wIl9zLCAqdGltZXN0YW1wKTsKLSAgICAgICAgaWYgKHZhbHVlcykK
LSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIFsqdmFsdWVz
IHRvSlNPTk9iamVjdF0pOwotICAgICAgICBpZiAocGF5bG9hZCkKLSAgICAgICAgICAgIHJlc3Vs
dE9iamVjdC0+c2V0VmFsdWUoInBheWxvYWQiX3MsIFsqcGF5bG9hZCB0b0pTT05PYmplY3RdKTsK
LSAgICAgICAgaWYgKGRhdGFiYXNlSWQpCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldElu
dGVnZXIoImRhdGFiYXNlSWQiX3MsICpkYXRhYmFzZUlkKTsKLSAgICAgICAgaWYgKHNxbEVycm9y
KQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBbKnNx
bEVycm9yIHRvSlNPTk9iamVjdF0pOwotICAgICAgICBpZiAoc2NyZWVuQ29sb3IpCi0gICAgICAg
ICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZygic2NyZWVuQ29sb3IiX3MsIHRvUHJvdG9jb2xT
dHJpbmcoKnNjcmVlbkNvbG9yKSk7Ci0gICAgICAgIGlmIChhbHRlcm5hdGVDb2xvcnMpCi0gICAg
ICAgICAgICByZXN1bHRPYmplY3QtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIHRvSlNP
TlN0cmluZ0FycmF5KCphbHRlcm5hdGVDb2xvcnMpKTsKLSAgICAgICAgaWYgKHByaW50Q29sb3Ip
Ci0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZygicHJpbnRDb2xvciJfcywgdG9Q
cm90b2NvbFN0cmluZygqcHJpbnRDb2xvcikpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigp
LT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdE9iamVjdCksIGZhbHNlKTsK
KyAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKm91dF9v
cHRfY29sdW1uTmFtZXMsIE5TU3RyaW5nICoqb3V0X29wdF9ub3RlcywgZG91YmxlICpvdXRfb3B0
X3RpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqb3V0X29wdF92YWx1ZXMsIFJXSVBy
b3RvY29sSlNPTk9iamVjdCAqKm91dF9vcHRfcGF5bG9hZCwgaW50ICpvdXRfb3B0X2RhdGFiYXNl
SWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKipvdXRfb3B0X3NxbEVycm9yLCBUZXN0UHJv
dG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgKm91dF9vcHRfc2NyZWVuQ29sb3IsIE5TQXJyYXkv
KjxOU1N0cmluZz4qLyAqKm91dF9vcHRfYWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRh
YmFzZShhbm9ueW1vdXMpICpvdXRfb3B0X3ByaW50Q29sb3IpIHsKKyAgICAgICAgYXV0byBwcm90
b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIFRIUk9X
X0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihvdXRfb3B0X2NvbHVtbk5hbWVz
LCBAImNvbHVtbk5hbWVzIik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElP
TkFMX1BBUkFNRVRFUihvdXRfb3B0X25vdGVzLCBAIm5vdGVzIik7CisgICAgICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihvdXRfb3B0X3ZhbHVlcywgQCJ2YWx1
ZXMiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVS
KG91dF9vcHRfcGF5bG9hZCwgQCJwYXlsb2FkIik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9G
T1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihvdXRfb3B0X3NxbEVycm9yLCBAInNxbEVycm9yIik7
CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihvdXRf
b3B0X2FsdGVybmF0ZUNvbG9ycywgQCJhbHRlcm5hdGVDb2xvcnMiKTsKKyAgICAgICAgaWYgKCEh
b3V0X29wdF9jb2x1bW5OYW1lcykKKyAgICAgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5z
ZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KCpvdXRfb3B0X2NvbHVt
bk5hbWVzKSk7CisgICAgICAgIGlmICghIW91dF9vcHRfbm90ZXMpCisgICAgICAgICAgICBwcm90
b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJub3RlcyJfcywgKm91dF9vcHRfbm90ZXMpOwor
ICAgICAgICBpZiAoISFvdXRfb3B0X3RpbWVzdGFtcCkKKyAgICAgICAgICAgIHByb3RvY29sX2pz
b25NZXNzYWdlLT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywgKm91dF9vcHRfdGltZXN0YW1wKTsK
KyAgICAgICAgaWYgKCEhb3V0X29wdF92YWx1ZXMpCisgICAgICAgICAgICBwcm90b2NvbF9qc29u
TWVzc2FnZS0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIFsqb3V0X29wdF92YWx1ZXMgdG9KU09OT2Jq
ZWN0XSk7CisgICAgICAgIGlmICghIW91dF9vcHRfcGF5bG9hZCkKKyAgICAgICAgICAgIHByb3Rv
Y29sX2pzb25NZXNzYWdlLT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgWypvdXRfb3B0X3BheWxvYWQg
dG9KU09OT2JqZWN0XSk7CisgICAgICAgIGlmICghIW91dF9vcHRfZGF0YWJhc2VJZCkKKyAgICAg
ICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRJbnRlZ2VyKCJkYXRhYmFzZUlkIl9zLCAq
b3V0X29wdF9kYXRhYmFzZUlkKTsKKyAgICAgICAgaWYgKCEhb3V0X29wdF9zcWxFcnJvcikKKyAg
ICAgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBb
Km91dF9vcHRfc3FsRXJyb3IgdG9KU09OT2JqZWN0XSk7CisgICAgICAgIGlmICghIW91dF9vcHRf
c2NyZWVuQ29sb3IpCisgICAgICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5n
KCJzY3JlZW5Db2xvciJfcywgdG9Qcm90b2NvbFN0cmluZygqb3V0X29wdF9zY3JlZW5Db2xvcikp
OworICAgICAgICBpZiAoISFvdXRfb3B0X2FsdGVybmF0ZUNvbG9ycykKKyAgICAgICAgICAgIHBy
b3RvY29sX2pzb25NZXNzYWdlLT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCB0b0pTT05T
dHJpbmdBcnJheSgqb3V0X29wdF9hbHRlcm5hdGVDb2xvcnMpKTsKKyAgICAgICAgaWYgKCEhb3V0
X29wdF9wcmludENvbG9yKQorICAgICAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0
cmluZygicHJpbnRDb2xvciJfcywgdG9Qcm90b2NvbFN0cmluZygqb3V0X29wdF9wcmludENvbG9y
KSk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShwcm90b2NvbF9j
YWxsSWQsIFdURk1vdmUocHJvdG9jb2xfanNvbk1lc3NhZ2UpLCBmYWxzZSk7CiAgICAgfTsKIAog
ICAgIGludCBvX2luX2RhdGFiYXNlSWQgPSBpbl9kYXRhYmFzZUlkOwogICAgIE5TU3RyaW5nICpv
X2luX3F1ZXJ5ID0gaW5fcXVlcnk7Ci0KICAgICBbbV9kZWxlZ2F0ZSBleGVjdXRlU1FMQXN5bmNP
cHRpb25hbFJldHVyblZhbHVlc1dpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vz
c0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjayBkYXRhYmFzZUlkOm9faW5fZGF0YWJhc2VJZCBxdWVy
eTpvX2luX3F1ZXJ5XTsKIH0KIAotdm9pZCBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlz
cGF0Y2hlcjo6ZXhlY3V0ZVNRTFN5bmMobG9uZyByZXF1ZXN0SWQsIGludCBpbl9kYXRhYmFzZUlk
LCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5KQordm9pZCBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNr
ZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTFN5bmMobG9uZyBwcm90b2NvbF9jYWxsSWQsIGludCBp
bl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5KQogewogICAgIGlmICghW21fZGVs
ZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihleGVjdXRlU1FMU3luY1dpdGhFcnJv
ckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazpkYXRhYmFzZUlkOnF1ZXJ5OildKSB7Ci0gICAgICAg
IGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNr
ZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRGF0YWJhc2UuZXhlY3V0ZVNRTFN5bmMn
IHdhcyBub3QgZm91bmQiX3MpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQ
cm90b2NvbEVycm9yKHByb3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5v
dEZvdW5kLCAiJ0RhdGFiYXNlLmV4ZWN1dGVTUUxTeW5jJyB3YXMgbm90IGZvdW5kIl9zKTsKICAg
ICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAogICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJv
cikgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJl
cXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CisgICAgICAg
IGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocHJvdG9jb2xfY2FsbElk
LCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKICAgICAgICAgYmFja2Vu
ZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKICAgICB9OwogCi0gICAgaWQgc3Vj
Y2Vzc0NhbGxiYWNrID0gXihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmNvbHVtbk5hbWVzLCBOU1N0
cmluZyAqbm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqdmFs
dWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKnBheWxvYWQsIGludCBkYXRhYmFzZUlkLCBUZXN0
UHJvdG9jb2xEYXRhYmFzZUVycm9yICpzcWxFcnJvciwgTlNBcnJheS8qPE5TU3RyaW5nPiovICph
bHRlcm5hdGVDb2xvcnMsIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyBzY3JlZW5D
b2xvciwgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY1ByaW50Q29sb3IgcHJpbnRD
b2xvcikgewotICAgICAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHRPYmplY3QgPSBKU09OOjpP
YmplY3Q6OmNyZWF0ZSgpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BB
UkFNRVRFUihjb2x1bW5OYW1lcywgQCJjb2x1bW5OYW1lcyIpOwotICAgICAgICBUSFJPV19FWENF
UFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihub3RlcywgQCJub3RlcyIpOwotICAgICAgICBU
SFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUih2YWx1ZXMsIEAidmFsdWVzIik7
Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKHBheWxvYWQs
IEAicGF5bG9hZCIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFN
RVRFUihzcWxFcnJvciwgQCJzcWxFcnJvciIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9S
X1JFUVVJUkVEX1BBUkFNRVRFUihhbHRlcm5hdGVDb2xvcnMsIEAiYWx0ZXJuYXRlQ29sb3JzIik7
Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCB0b0pTT05T
dHJpbmdBcnJheShjb2x1bW5OYW1lcykpOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmlu
Zygibm90ZXMiX3MsIG5vdGVzKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXREb3VibGUoInRp
bWVzdGFtcCJfcywgdGltZXN0YW1wKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRPYmplY3Qo
InZhbHVlcyJfcywgW3ZhbHVlcyB0b0pTT05PYmplY3RdKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0
LT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgW3BheWxvYWQgdG9KU09OT2JqZWN0XSk7Ci0gICAgICAg
IHJlc3VsdE9iamVjdC0+c2V0SW50ZWdlcigiZGF0YWJhc2VJZCJfcywgZGF0YWJhc2VJZCk7Ci0g
ICAgICAgIHJlc3VsdE9iamVjdC0+c2V0T2JqZWN0KCJzcWxFcnJvciJfcywgW3NxbEVycm9yIHRv
SlNPTk9iamVjdF0pOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldEFycmF5KCJhbHRlcm5hdGVD
b2xvcnMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KGFsdGVybmF0ZUNvbG9ycykpOwotICAgICAgICBy
ZXN1bHRPYmplY3QtPnNldFN0cmluZygic2NyZWVuQ29sb3IiX3MsIHRvUHJvdG9jb2xTdHJpbmco
c2NyZWVuQ29sb3IpKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoInByaW50Q29s
b3IiX3MsIHRvUHJvdG9jb2xTdHJpbmcocHJpbnRDb2xvcikpOwotICAgICAgICBiYWNrZW5kRGlz
cGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdE9iamVjdCks
IGZhbHNlKTsKKyAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeKE5TQXJyYXkvKjxOU1N0cmluZz4q
LyAqb3V0X2NvbHVtbk5hbWVzLCBOU1N0cmluZyAqb3V0X25vdGVzLCBkb3VibGUgb3V0X3RpbWVz
dGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpvdXRfdmFsdWVzLCBSV0lQcm90b2NvbEpTT05P
YmplY3QgKm91dF9wYXlsb2FkLCBpbnQgb3V0X2RhdGFiYXNlSWQsIFRlc3RQcm90b2NvbERhdGFi
YXNlRXJyb3IgKm91dF9zcWxFcnJvciwgTlNBcnJheS8qPE5TU3RyaW5nPiovICpvdXRfYWx0ZXJu
YXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgb3V0X3NjcmVlbkNv
bG9yLCBUZXN0UHJvdG9jb2xEYXRhYmFzZShhbm9ueW1vdXMpIG91dF9wcmludENvbG9yKSB7Cisg
ICAgICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgp
OworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihvdXRfY29s
dW1uTmFtZXMsIEAiY29sdW1uTmFtZXMiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9S
RVFVSVJFRF9QQVJBTUVURVIob3V0X25vdGVzLCBAIm5vdGVzIik7CisgICAgICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKG91dF92YWx1ZXMsIEAidmFsdWVzIik7Cisg
ICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKG91dF9wYXlsb2Fk
LCBAInBheWxvYWQiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJB
TUVURVIob3V0X3NxbEVycm9yLCBAInNxbEVycm9yIik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKG91dF9hbHRlcm5hdGVDb2xvcnMsIEAiYWx0ZXJuYXRl
Q29sb3JzIik7CisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRBcnJheSgiY29sdW1u
TmFtZXMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KG91dF9jb2x1bW5OYW1lcykpOworICAgICAgICBw
cm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJub3RlcyJfcywgb3V0X25vdGVzKTsKKyAg
ICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCBvdXRf
dGltZXN0YW1wKTsKKyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldE9iamVjdCgidmFs
dWVzIl9zLCBbb3V0X3ZhbHVlcyB0b0pTT05PYmplY3RdKTsKKyAgICAgICAgcHJvdG9jb2xfanNv
bk1lc3NhZ2UtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCBbb3V0X3BheWxvYWQgdG9KU09OT2JqZWN0
XSk7CisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRJbnRlZ2VyKCJkYXRhYmFzZUlk
Il9zLCBvdXRfZGF0YWJhc2VJZCk7CisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRP
YmplY3QoInNxbEVycm9yIl9zLCBbb3V0X3NxbEVycm9yIHRvSlNPTk9iamVjdF0pOworICAgICAg
ICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywgdG9K
U09OU3RyaW5nQXJyYXkob3V0X2FsdGVybmF0ZUNvbG9ycykpOworICAgICAgICBwcm90b2NvbF9q
c29uTWVzc2FnZS0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgdG9Qcm90b2NvbFN0cmluZyhv
dXRfc2NyZWVuQ29sb3IpKTsKKyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmlu
ZygicHJpbnRDb2xvciJfcywgdG9Qcm90b2NvbFN0cmluZyhvdXRfcHJpbnRDb2xvcikpOworICAg
ICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocHJvdG9jb2xfY2FsbElkLCBX
VEZNb3ZlKHByb3RvY29sX2pzb25NZXNzYWdlKSwgZmFsc2UpOwogICAgIH07CiAKICAgICBpbnQg
b19pbl9kYXRhYmFzZUlkID0gaW5fZGF0YWJhc2VJZDsKICAgICBOU1N0cmluZyAqb19pbl9xdWVy
eSA9IGluX3F1ZXJ5OwotCiAgICAgW21fZGVsZWdhdGUgZXhlY3V0ZVNRTFN5bmNXaXRoRXJyb3JD
YWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2sgZGF0
YWJhc2VJZDpvX2luX2RhdGFiYXNlSWQgcXVlcnk6b19pbl9xdWVyeV07CiB9CiAKLXZvaWQgT2Jq
Q0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxBc3luYyhsb25n
IHJlcXVlc3RJZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnkpCit2
b2lkIE9iakNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FMQXN5
bmMobG9uZyBwcm90b2NvbF9jYWxsSWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcm
IGluX3F1ZXJ5KQogewogICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBz
ZWxlY3RvcihleGVjdXRlU1FMQXN5bmNXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6
ZGF0YWJhc2VJZDpxdWVyeTopXSkgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBv
cnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZv
dW5kLCAiJ0RhdGFiYXNlLmV4ZWN1dGVTUUxBc3luYycgd2FzIG5vdCBmb3VuZCJfcyk7CisgICAg
ICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocHJvdG9jb2xfY2Fs
bElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRGF0YWJhc2UuZXhlY3V0
ZVNRTEFzeW5jJyB3YXMgbm90IGZvdW5kIl9zKTsKICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIo
KS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlk
IGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgewotICAgICAgICBiYWNrZW5kRGlz
cGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNo
ZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJl
cG9ydFByb3RvY29sRXJyb3IocHJvdG9jb2xfY2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2Vy
dmVyRXJyb3IsIGVycm9yKTsKICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRp
bmdFcnJvcnMoKTsKICAgICB9OwogCi0gICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXihOU0FycmF5
Lyo8TlNTdHJpbmc+Ki8gKmNvbHVtbk5hbWVzLCBOU1N0cmluZyAqbm90ZXMsIGRvdWJsZSB0aW1l
c3RhbXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmpl
Y3QgKnBheWxvYWQsIGludCBkYXRhYmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICpz
cWxFcnJvciwgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzIHNjcmVlbkNvbG9yLCBO
U0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmFsdGVybmF0ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0YWJh
c2VFeGVjdXRlU1FMQXN5bmNQcmludENvbG9yIHByaW50Q29sb3IpIHsKLSAgICAgICAgUmVmPEpT
T046Ok9iamVjdD4gcmVzdWx0T2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICAg
ICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoY29sdW1uTmFtZXMsIEAi
Y29sdW1uTmFtZXMiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJB
TUVURVIobm90ZXMsIEAibm90ZXMiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFV
SVJFRF9QQVJBTUVURVIodmFsdWVzLCBAInZhbHVlcyIpOwotICAgICAgICBUSFJPV19FWENFUFRJ
T05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihwYXlsb2FkLCBAInBheWxvYWQiKTsKLSAgICAgICAg
VEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoc3FsRXJyb3IsIEAic3FsRXJy
b3IiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoYWx0
ZXJuYXRlQ29sb3JzLCBAImFsdGVybmF0ZUNvbG9ycyIpOwotICAgICAgICByZXN1bHRPYmplY3Qt
PnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgdG9KU09OU3RyaW5nQXJyYXkoY29sdW1uTmFtZXMp
KTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCBub3Rlcyk7Ci0g
ICAgICAgIHJlc3VsdE9iamVjdC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsIHRpbWVzdGFtcCk7
Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIFt2YWx1ZXMgdG9K
U09OT2JqZWN0XSk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0VmFsdWUoInBheWxvYWQiX3Ms
IFtwYXlsb2FkIHRvSlNPTk9iamVjdF0pOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldEludGVn
ZXIoImRhdGFiYXNlSWQiX3MsIGRhdGFiYXNlSWQpOwotICAgICAgICByZXN1bHRPYmplY3QtPnNl
dE9iamVjdCgic3FsRXJyb3IiX3MsIFtzcWxFcnJvciB0b0pTT05PYmplY3RdKTsKLSAgICAgICAg
cmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCB0b1Byb3RvY29sU3RyaW5n
KHNjcmVlbkNvbG9yKSk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0QXJyYXkoImFsdGVybmF0
ZUNvbG9ycyJfcywgdG9KU09OU3RyaW5nQXJyYXkoYWx0ZXJuYXRlQ29sb3JzKSk7Ci0gICAgICAg
IHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCB0b1Byb3RvY29sU3RyaW5n
KHByaW50Q29sb3IpKTsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNl
KHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHRPYmplY3QpLCBmYWxzZSk7CisgICAgaWQgc3VjY2Vz
c0NhbGxiYWNrID0gXihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKm91dF9jb2x1bW5OYW1lcywgTlNT
dHJpbmcgKm91dF9ub3RlcywgZG91YmxlIG91dF90aW1lc3RhbXAsIFJXSVByb3RvY29sSlNPTk9i
amVjdCAqb3V0X3ZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpvdXRfcGF5bG9hZCwgaW50
IG91dF9kYXRhYmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICpvdXRfc3FsRXJyb3Is
IFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyBvdXRfc2NyZWVuQ29sb3IsIE5TQXJy
YXkvKjxOU1N0cmluZz4qLyAqb3V0X2FsdGVybmF0ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0YWJh
c2UoYW5vbnltb3VzKSBvdXRfcHJpbnRDb2xvcikgeworICAgICAgICBhdXRvIHByb3RvY29sX2pz
b25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgVEhST1dfRVhDRVBU
SU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIob3V0X2NvbHVtbk5hbWVzLCBAImNvbHVtbk5hbWVz
Iik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKG91dF9u
b3RlcywgQCJub3RlcyIpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BB
UkFNRVRFUihvdXRfdmFsdWVzLCBAInZhbHVlcyIpOworICAgICAgICBUSFJPV19FWENFUFRJT05f
Rk9SX1JFUVVJUkVEX1BBUkFNRVRFUihvdXRfcGF5bG9hZCwgQCJwYXlsb2FkIik7CisgICAgICAg
IFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKG91dF9zcWxFcnJvciwgQCJz
cWxFcnJvciIpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRF
UihvdXRfYWx0ZXJuYXRlQ29sb3JzLCBAImFsdGVybmF0ZUNvbG9ycyIpOworICAgICAgICBwcm90
b2NvbF9qc29uTWVzc2FnZS0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCB0b0pTT05TdHJpbmdB
cnJheShvdXRfY29sdW1uTmFtZXMpKTsKKyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNl
dFN0cmluZygibm90ZXMiX3MsIG91dF9ub3Rlcyk7CisgICAgICAgIHByb3RvY29sX2pzb25NZXNz
YWdlLT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywgb3V0X3RpbWVzdGFtcCk7CisgICAgICAgIHBy
b3RvY29sX2pzb25NZXNzYWdlLT5zZXRPYmplY3QoInZhbHVlcyJfcywgW291dF92YWx1ZXMgdG9K
U09OT2JqZWN0XSk7CisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRWYWx1ZSgicGF5
bG9hZCJfcywgW291dF9wYXlsb2FkIHRvSlNPTk9iamVjdF0pOworICAgICAgICBwcm90b2NvbF9q
c29uTWVzc2FnZS0+c2V0SW50ZWdlcigiZGF0YWJhc2VJZCJfcywgb3V0X2RhdGFiYXNlSWQpOwor
ICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJzcWxFcnJvciJfcywgW291
dF9zcWxFcnJvciB0b0pTT05PYmplY3RdKTsKKyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2Ut
PnNldFN0cmluZygic2NyZWVuQ29sb3IiX3MsIHRvUHJvdG9jb2xTdHJpbmcob3V0X3NjcmVlbkNv
bG9yKSk7CisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRBcnJheSgiYWx0ZXJuYXRl
Q29sb3JzIl9zLCB0b0pTT05TdHJpbmdBcnJheShvdXRfYWx0ZXJuYXRlQ29sb3JzKSk7CisgICAg
ICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoInByaW50Q29sb3IiX3MsIHRvUHJv
dG9jb2xTdHJpbmcob3V0X3ByaW50Q29sb3IpKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIo
KS0+c2VuZFJlc3BvbnNlKHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9qc29uTWVz
c2FnZSksIGZhbHNlKTsKICAgICB9OwogCiAgICAgaW50IG9faW5fZGF0YWJhc2VJZCA9IGluX2Rh
dGFiYXNlSWQ7CiAgICAgTlNTdHJpbmcgKm9faW5fcXVlcnkgPSBpbl9xdWVyeTsKLQogICAgIFtt
X2RlbGVnYXRlIGV4ZWN1dGVTUUxBc3luY1dpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sg
c3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjayBkYXRhYmFzZUlkOm9faW5fZGF0YWJhc2VJ
ZCBxdWVyeTpvX2luX3F1ZXJ5XTsKIH0KIApAQCAtMTM0NiwxMCArMTMxNCwxMCBAQCBfX2F0dHJp
YnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKIAogQHByb3RvY29sIFRlc3RQcm90b2Nv
bERhdGFiYXNlRG9tYWluSGFuZGxlciA8TlNPYmplY3Q+CiBAb3B0aW9uYWwKLS0gKHZvaWQpZXhl
Y3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1dpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4p
KE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXiko
TlNBcnJheS8qPE5TU3RyaW5nPiovICoqY29sdW1uTmFtZXMsIE5TU3RyaW5nICoqbm90ZXMsIGRv
dWJsZSAqdGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKip2YWx1ZXMsIFJXSVByb3Rv
Y29sSlNPTk9iamVjdCAqKnBheWxvYWQsIGludCAqZGF0YWJhc2VJZCwgVGVzdFByb3RvY29sRGF0
YWJhc2VFcnJvciAqKnNxbEVycm9yLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMg
KnNjcmVlbkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiphbHRlcm5hdGVDb2xvcnMsIFRl
c3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50
Q29sb3IgKnByaW50Q29sb3IpKXN1Y2Nlc3NDYWxsYmFjayBkYXRhYmFzZUlkOihpbnQpZGF0YWJh
c2VJZCBxdWVyeTooTlNTdHJpbmcgKilxdWVyeTsKLS0gKHZvaWQpZXhlY3V0ZVNRTEFzeW5jT3B0
aW9uYWxSZXR1cm5WYWx1ZXNXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJy
b3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKE5TQXJyYXkvKjxOU1N0
cmluZz4qLyAqKmNvbHVtbk5hbWVzLCBOU1N0cmluZyAqKm5vdGVzLCBkb3VibGUgKnRpbWVzdGFt
cCwgUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3Qg
KipwYXlsb2FkLCBpbnQgKmRhdGFiYXNlSWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKipz
cWxFcnJvciwgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzICpzY3JlZW5Db2xvciwg
TlNBcnJheS8qPE5TU3RyaW5nPiovICoqYWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRh
YmFzZUV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvciAqcHJpbnRD
b2xvcikpc3VjY2Vzc0NhbGxiYWNrIGRhdGFiYXNlSWQ6KGludClkYXRhYmFzZUlkIHF1ZXJ5OihO
U1N0cmluZyAqKXF1ZXJ5OwotLSAodm9pZClleGVjdXRlU1FMU3luY1dpdGhFcnJvckNhbGxiYWNr
Oih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6
KHZvaWQoXikoTlNBcnJheS8qPE5TU3RyaW5nPiovICpjb2x1bW5OYW1lcywgTlNTdHJpbmcgKm5v
dGVzLCBkb3VibGUgdGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKnZhbHVlcywgUldJ
UHJvdG9jb2xKU09OT2JqZWN0ICpwYXlsb2FkLCBpbnQgZGF0YWJhc2VJZCwgVGVzdFByb3RvY29s
RGF0YWJhc2VFcnJvciAqc3FsRXJyb3IsIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqYWx0ZXJuYXRl
Q29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgc2NyZWVuQ29sb3IsIFRl
c3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNQcmludENvbG9yIHByaW50Q29sb3IpKXN1
Y2Nlc3NDYWxsYmFjayBkYXRhYmFzZUlkOihpbnQpZGF0YWJhc2VJZCBxdWVyeTooTlNTdHJpbmcg
KilxdWVyeTsKLS0gKHZvaWQpZXhlY3V0ZVNRTEFzeW5jV2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQo
XikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZChe
KShOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmNvbHVtbk5hbWVzLCBOU1N0cmluZyAqbm90ZXMsIGRv
dWJsZSB0aW1lc3RhbXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqdmFsdWVzLCBSV0lQcm90b2Nv
bEpTT05PYmplY3QgKnBheWxvYWQsIGludCBkYXRhYmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFz
ZUVycm9yICpzcWxFcnJvciwgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzIHNjcmVl
bkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmFsdGVybmF0ZUNvbG9ycywgVGVzdFByb3Rv
Y29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNQcmludENvbG9yIHByaW50Q29sb3IpKXN1Y2Nlc3ND
YWxsYmFjayBkYXRhYmFzZUlkOihpbnQpZGF0YWJhc2VJZCBxdWVyeTooTlNTdHJpbmcgKilxdWVy
eTsKKy0gKHZvaWQpZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1dpdGhFcnJvckNh
bGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2Fs
bGJhY2s6KHZvaWQoXikoTlNBcnJheS8qPE5TU3RyaW5nPiovICoqY29sdW1uTmFtZXMsIE5TU3Ry
aW5nICoqbm90ZXMsIGRvdWJsZSAqdGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKip2
YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqKnBheWxvYWQsIGludCAqZGF0YWJhc2VJZCwg
VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKnNxbEVycm9yLCBUZXN0UHJvdG9jb2xEYXRhYmFz
ZVByaW1hcnlDb2xvcnMgKnNjcmVlbkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiphbHRl
cm5hdGVDb2xvcnMsIFRlc3RQcm90b2NvbERhdGFiYXNlKGFub255bW91cykgKnByaW50Q29sb3Ip
KXN1Y2Nlc3NDYWxsYmFjayBkYXRhYmFzZUlkOihpbnQpZGF0YWJhc2VJZCBxdWVyeTooTlNTdHJp
bmcgKilxdWVyeTsKKy0gKHZvaWQpZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNX
aXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sg
c3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKmNvbHVtbk5h
bWVzLCBOU1N0cmluZyAqKm5vdGVzLCBkb3VibGUgKnRpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09O
T2JqZWN0ICoqdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKipwYXlsb2FkLCBpbnQgKmRh
dGFiYXNlSWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKipzcWxFcnJvciwgVGVzdFByb3Rv
Y29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzICpzY3JlZW5Db2xvciwgTlNBcnJheS8qPE5TU3RyaW5n
PiovICoqYWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZShhbm9ueW1vdXMpICpw
cmludENvbG9yKSlzdWNjZXNzQ2FsbGJhY2sgZGF0YWJhc2VJZDooaW50KWRhdGFiYXNlSWQgcXVl
cnk6KE5TU3RyaW5nICopcXVlcnk7CistICh2b2lkKWV4ZWN1dGVTUUxTeW5jV2l0aEVycm9yQ2Fs
bGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxs
YmFjazoodm9pZCheKShOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmNvbHVtbk5hbWVzLCBOU1N0cmlu
ZyAqbm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqdmFsdWVz
LCBSV0lQcm90b2NvbEpTT05PYmplY3QgKnBheWxvYWQsIGludCBkYXRhYmFzZUlkLCBUZXN0UHJv
dG9jb2xEYXRhYmFzZUVycm9yICpzcWxFcnJvciwgTlNBcnJheS8qPE5TU3RyaW5nPiovICphbHRl
cm5hdGVDb2xvcnMsIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyBzY3JlZW5Db2xv
ciwgVGVzdFByb3RvY29sRGF0YWJhc2UoYW5vbnltb3VzKSBwcmludENvbG9yKSlzdWNjZXNzQ2Fs
bGJhY2sgZGF0YWJhc2VJZDooaW50KWRhdGFiYXNlSWQgcXVlcnk6KE5TU3RyaW5nICopcXVlcnk7
CistICh2b2lkKWV4ZWN1dGVTUUxBc3luY1dpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3Ry
aW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikoTlNBcnJh
eS8qPE5TU3RyaW5nPiovICpjb2x1bW5OYW1lcywgTlNTdHJpbmcgKm5vdGVzLCBkb3VibGUgdGlt
ZXN0YW1wLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2Jq
ZWN0ICpwYXlsb2FkLCBpbnQgZGF0YWJhc2VJZCwgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAq
c3FsRXJyb3IsIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyBzY3JlZW5Db2xvciwg
TlNBcnJheS8qPE5TU3RyaW5nPiovICphbHRlcm5hdGVDb2xvcnMsIFRlc3RQcm90b2NvbERhdGFi
YXNlKGFub255bW91cykgcHJpbnRDb2xvcikpc3VjY2Vzc0NhbGxiYWNrIGRhdGFiYXNlSWQ6KGlu
dClkYXRhYmFzZUlkIHF1ZXJ5OihOU1N0cmluZyAqKXF1ZXJ5OwogQGVuZAogCiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3Rl
ZC9jb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbi1yZXN1
bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0
ZWQvY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpzb24tcmVz
dWx0CmluZGV4IDFmMmY0NWQ3NGMzOTM5MTExMjM2YTg2N2Q3ZmZmZDI0MGU2ZDk5YzUuLjNlNDQy
NzQ4OTRjMmVkMDY0ZWU4ZDE5OWUxYTBlNGMxMTQ0YWJmY2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9jb21tYW5kcy13
aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbi1yZXN1bHQKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2NvbW1h
bmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1ldGVycy5qc29uLXJlc3VsdApAQCAt
NzAsNyArNzAsNyBAQCBJbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJEYXRhYmFzZSIs
IG51bGwpOwogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAK
LSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9i
amVjdHMuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlci5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVy
Lmg+CiAKQEAgLTg4LDggKzg4LDggQEAgcHJpdmF0ZToKIGNsYXNzIEFsdGVybmF0ZURhdGFiYXNl
QmFja2VuZERpc3BhdGNoZXIgOiBwdWJsaWMgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewog
cHVibGljOgogICAgIHZpcnR1YWwgfkFsdGVybmF0ZURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIo
KSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhsb25n
IGNhbGxJZCwgY29uc3QgSlNPTjo6QXJyYXkqIGluX2NvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcq
IGluX25vdGVzLCBjb25zdCBkb3VibGUqIGluX3RpbWVzdGFtcCwgY29uc3QgSlNPTjo6T2JqZWN0
KiBpbl92YWx1ZXMsIGNvbnN0IEpTT046OlZhbHVlKiBpbl9wYXlsb2FkLCBjb25zdCBpbnQqIGlu
X2RhdGFiYXNlSWQsIGNvbnN0IEpTT046Ok9iamVjdCogaW5fc3FsRXJyb3IsIGNvbnN0IFN0cmlu
ZyogaW5fc2NyZWVuQ29sb3IsIGNvbnN0IEpTT046OkFycmF5KiBpbl9hbHRlcm5hdGVDb2xvcnMs
IGNvbnN0IFN0cmluZyogaW5fcHJpbnRDb2xvcikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBleGVj
dXRlTm9PcHRpb25hbFBhcmFtZXRlcnMobG9uZyBjYWxsSWQsIGNvbnN0IEpTT046OkFycmF5JiBp
bl9jb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBpbl9ub3RlcywgZG91YmxlIGluX3RpbWVzdGFt
cCwgY29uc3QgSlNPTjo6T2JqZWN0JiBpbl92YWx1ZXMsIEpTT046OlZhbHVlIGluX3BheWxvYWQs
IGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBKU09OOjpPYmplY3QmIGluX3NxbEVycm9yLCBjb25z
dCBTdHJpbmcmIGluX3NjcmVlbkNvbG9yLCBjb25zdCBKU09OOjpBcnJheSYgaW5fYWx0ZXJuYXRl
Q29sb3JzLCBjb25zdCBTdHJpbmcmIGluX3ByaW50Q29sb3IpID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhsb25nIHByb3RvY29sX2NhbGxJZCwgUmVm
UHRyPEpTT046OkFycmF5PiYmIG9wdF9jb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBvcHRfbm90
ZXMsIE9wdGlvbmFsPGRvdWJsZT4mJiBvcHRfdGltZXN0YW1wLCBSZWZQdHI8SlNPTjo6T2JqZWN0
PiYmIG9wdF92YWx1ZXMsIFJlZlB0cjxKU09OOjpWYWx1ZT4mJiBvcHRfcGF5bG9hZCwgT3B0aW9u
YWw8aW50PiYmIG9wdF9kYXRhYmFzZUlkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIG9wdF9zcWxF
cnJvciwgY29uc3QgU3RyaW5nJiBvcHRfc2NyZWVuQ29sb3IsIFJlZlB0cjxKU09OOjpBcnJheT4m
JiBvcHRfYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcmIG9wdF9wcmludENvbG9yKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhsb25nIHByb3Rv
Y29sX2NhbGxJZCwgUmVmPEpTT046OkFycmF5PiYmIGNvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcm
IG5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBSZWY8SlNPTjo6T2JqZWN0PiYmIHZhbHVlcywgUmVm
PEpTT046OlZhbHVlPiYmIHBheWxvYWQsIGludCBkYXRhYmFzZUlkLCBSZWY8SlNPTjo6T2JqZWN0
PiYmIHNxbEVycm9yLCBjb25zdCBTdHJpbmcmIHNjcmVlbkNvbG9yLCBSZWY8SlNPTjo6QXJyYXk+
JiYgYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcmIHByaW50Q29sb3IpID0gMDsKIH07CiAK
IH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgpAQCAtMTMxLDExICsxMzEsMTQgQEAgcHVibGljOgog
CiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8dHVwbGU+CisjaW5j
bHVkZSA8d3RmL0V4cGVjdGVkLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCi10eXBl
ZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKwogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5B
VEVfRElTUEFUQ0hFUlMpCiBjbGFzcyBBbHRlcm5hdGVEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVy
OwpAQCAtMTQzLDE1ICsxNDYsOCBAQCBjbGFzcyBBbHRlcm5hdGVEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVyOwogCiBjbGFzcyBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7CiBwdWJs
aWM6Ci0gICAgLy8gTmFtZWQgYWZ0ZXIgcGFyYW1ldGVyICdwcmludENvbG9yJyB3aGlsZSBnZW5l
cmF0aW5nIGNvbW1hbmQvZXZlbnQgZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycy4KLSAgICBl
bnVtIGNsYXNzIFByaW50Q29sb3IgewotICAgICAgICBDeWFuID0gMywKLSAgICAgICAgTWFnZW50
YSA9IDQsCi0gICAgICAgIFllbGxvdyA9IDUsCi0gICAgICAgIEJsYWNrID0gNiwKLSAgICB9OyAv
LyBlbnVtIGNsYXNzIFByaW50Q29sb3IKLSAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZUFsbE9wdGlv
bmFsUGFyYW1ldGVycyhFcnJvclN0cmluZyYsIGNvbnN0IEpTT046OkFycmF5KiBvcHRfaW5fY29s
dW1uTmFtZXMsIGNvbnN0IFN0cmluZyogb3B0X2luX25vdGVzLCBjb25zdCBkb3VibGUqIG9wdF9p
bl90aW1lc3RhbXAsIGNvbnN0IEpTT046Ok9iamVjdCogb3B0X2luX3ZhbHVlcywgY29uc3QgSlNP
Tjo6VmFsdWUqIG9wdF9pbl9wYXlsb2FkLCBjb25zdCBpbnQqIG9wdF9pbl9kYXRhYmFzZUlkLCBj
b25zdCBKU09OOjpPYmplY3QqIG9wdF9pbl9zcWxFcnJvciwgY29uc3QgU3RyaW5nKiBvcHRfaW5f
c2NyZWVuQ29sb3IsIGNvbnN0IEpTT046OkFycmF5KiBvcHRfaW5fYWx0ZXJuYXRlQ29sb3JzLCBj
b25zdCBTdHJpbmcqIG9wdF9pbl9wcmludENvbG9yLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJp
bmc+PiYgb3B0X291dF9jb2x1bW5OYW1lcywgT3B0aW9uYWw8U3RyaW5nPiYgb3B0X291dF9ub3Rl
cywgT3B0aW9uYWw8ZG91YmxlPiYgb3B0X291dF90aW1lc3RhbXAsIE9wdGlvbmFsPEpTT046Ok9i
amVjdD4mIG9wdF9vdXRfdmFsdWVzLCBPcHRpb25hbDxKU09OOjpWYWx1ZT4mIG9wdF9vdXRfcGF5
bG9hZCwgT3B0aW9uYWw8aW50PiYgb3B0X291dF9kYXRhYmFzZUlkLCBSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiYgb3B0X291dF9zcWxFcnJvciwgSW5zcGVjdG9y
OjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMqIG9wdF9vdXRfc2NyZWVuQ29sb3Is
IFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiYgb3B0X291
dF9hbHRlcm5hdGVDb2xvcnMsIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQcmlu
dENvbG9yKiBvcHRfb3V0X3ByaW50Q29sb3IpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0
ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKEVycm9yU3RyaW5nJiwgY29uc3QgSlNPTjo6QXJyYXkmIGlu
X2NvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIGluX25vdGVzLCBkb3VibGUgaW5fdGltZXN0YW1w
LCBjb25zdCBKU09OOjpPYmplY3QmIGluX3ZhbHVlcywgSlNPTjo6VmFsdWUgaW5fcGF5bG9hZCwg
aW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IEpTT046Ok9iamVjdCYgaW5fc3FsRXJyb3IsIGNvbnN0
IFN0cmluZyYgaW5fc2NyZWVuQ29sb3IsIGNvbnN0IEpTT046OkFycmF5JiBpbl9hbHRlcm5hdGVD
b2xvcnMsIGNvbnN0IFN0cmluZyYgaW5fcHJpbnRDb2xvciwgUmVmUHRyPEpTT046OkFycmF5T2Y8
U3RyaW5nPj4mIG91dF9jb2x1bW5OYW1lcywgU3RyaW5nKiBvdXRfbm90ZXMsIGRvdWJsZSogb3V0
X3RpbWVzdGFtcCwgSlNPTjo6T2JqZWN0KiBvdXRfdmFsdWVzLCBKU09OOjpWYWx1ZSogb3V0X3Bh
eWxvYWQsIGludCogb3V0X2RhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpE
YXRhYmFzZTo6RXJyb3I+JiBvdXRfc3FsRXJyb3IsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFi
YXNlOjpQcmltYXJ5Q29sb3JzKiBvdXRfc2NyZWVuQ29sb3IsIFJlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiYgb3V0X2FsdGVybmF0ZUNvbG9ycywgRGF0YWJh
c2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3IqIG91dF9wcmludENvbG9yKSA9
IDA7CisgICAgdmlydHVhbCBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxzdGQ6OnR1cGxlPFJlZlB0
cjxKU09OOjpBcnJheU9mPFN0cmluZz4+IC8qIG9wdF9jb2x1bW5OYW1lcyAqLywgU3RyaW5nIC8q
IG9wdF9ub3RlcyAqLywgT3B0aW9uYWw8ZG91YmxlPiAvKiBvcHRfdGltZXN0YW1wICovLCBSZWZQ
dHI8SlNPTjo6T2JqZWN0PiAvKiBvcHRfdmFsdWVzICovLCBSZWZQdHI8SlNPTjo6VmFsdWU+IC8q
IG9wdF9wYXlsb2FkICovLCBPcHRpb25hbDxpbnQ+IC8qIG9wdF9kYXRhYmFzZUlkICovLCBSZWZQ
dHI8UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4gLyogb3B0X3NxbEVycm9yICovLCBPcHRpb25h
bDxQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+IC8qIG9wdF9zY3JlZW5Db2xvciAq
LywgUmVmUHRyPFByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiAvKiBvcHRfYWx0ZXJuYXRl
Q29sb3JzICovLCBTdHJpbmcgLyogb3B0X3ByaW50Q29sb3IgKi8+PiBleGVjdXRlQWxsT3B0aW9u
YWxQYXJhbWV0ZXJzKFJlZlB0cjxKU09OOjpBcnJheT4mJiBvcHRfY29sdW1uTmFtZXMsIGNvbnN0
IFN0cmluZyYgb3B0X25vdGVzLCBPcHRpb25hbDxkb3VibGU+JiYgb3B0X3RpbWVzdGFtcCwgUmVm
UHRyPEpTT046Ok9iamVjdD4mJiBvcHRfdmFsdWVzLCBSZWZQdHI8SlNPTjo6VmFsdWU+JiYgb3B0
X3BheWxvYWQsIE9wdGlvbmFsPGludD4mJiBvcHRfZGF0YWJhc2VJZCwgUmVmUHRyPEpTT046Ok9i
amVjdD4mJiBvcHRfc3FsRXJyb3IsIE9wdGlvbmFsPFByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFy
eUNvbG9ycz4mJiBvcHRfc2NyZWVuQ29sb3IsIFJlZlB0cjxKU09OOjpBcnJheT4mJiBvcHRfYWx0
ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcmIG9wdF9wcmludENvbG9yKSA9IDA7CisgICAgdmly
dHVhbCBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxzdGQ6OnR1cGxlPFJlZjxKU09OOjpBcnJheU9m
PFN0cmluZz4+IC8qIGNvbHVtbk5hbWVzICovLCBTdHJpbmcgLyogbm90ZXMgKi8sIGRvdWJsZSAv
KiB0aW1lc3RhbXAgKi8sIFJlZjxKU09OOjpPYmplY3Q+IC8qIHZhbHVlcyAqLywgUmVmPEpTT046
OlZhbHVlPiAvKiBwYXlsb2FkICovLCBpbnQgLyogZGF0YWJhc2VJZCAqLywgUmVmPFByb3RvY29s
OjpEYXRhYmFzZTo6RXJyb3I+IC8qIHNxbEVycm9yICovLCBQcm90b2NvbDo6RGF0YWJhc2U6OlBy
aW1hcnlDb2xvcnMgLyogc2NyZWVuQ29sb3IgKi8sIFJlZjxQcm90b2NvbDo6RGF0YWJhc2U6OkNv
bG9yTGlzdD4gLyogYWx0ZXJuYXRlQ29sb3JzICovLCBTdHJpbmcgLyogcHJpbnRDb2xvciAqLz4+
IGV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhSZWY8SlNPTjo6QXJyYXk+JiYgY29sdW1uTmFt
ZXMsIGNvbnN0IFN0cmluZyYgbm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIFJlZjxKU09OOjpPYmpl
Y3Q+JiYgdmFsdWVzLCBSZWY8SlNPTjo6VmFsdWU+JiYgcGF5bG9hZCwgaW50IGRhdGFiYXNlSWQs
IFJlZjxKU09OOjpPYmplY3Q+JiYgc3FsRXJyb3IsIFByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFy
eUNvbG9ycyBzY3JlZW5Db2xvciwgUmVmPEpTT046OkFycmF5PiYmIGFsdGVybmF0ZUNvbG9ycywg
Y29uc3QgU3RyaW5nJiBwcmludENvbG9yKSA9IDA7CiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB+
RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKTsKIH07CkBAIC0xNTksMTAgKzE1NSwx
MCBAQCBwcm90ZWN0ZWQ6CiBjbGFzcyBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDog
cHVibGljIFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIHsKIHB1YmxpYzoKICAgICBzdGF0
aWMgUmVmPERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hl
ciYsIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7Ci0gICAgdm9pZCBkaXNwYXRj
aChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+
JiYgbWVzc2FnZSkgZmluYWw7CisgICAgdm9pZCBkaXNwYXRjaChsb25nIHByb3RvY29sX2NhbGxJ
ZCwgY29uc3QgU3RyaW5nJiBwcm90b2NvbF9tZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgcHJv
dG9jb2xfbWVzc2FnZSkgZmluYWw7CiBwcml2YXRlOgotICAgIHZvaWQgZXhlY3V0ZUFsbE9wdGlv
bmFsUGFyYW1ldGVycyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJh
bWV0ZXJzKTsKLSAgICB2b2lkIGV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhsb25nIHJlcXVl
c3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKKyAgICB2b2lkIGV4ZWN1
dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMobG9uZyBwcm90b2NsX2NhbGxJZCwgUmVmUHRyPEpTT046
Ok9iamVjdD4mJiBwcm90b2NvbF9wYXJhbWV0ZXJzKTsKKyAgICB2b2lkIGV4ZWN1dGVOb09wdGlv
bmFsUGFyYW1ldGVycyhsb25nIHByb3RvY2xfY2FsbElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYm
IHByb3RvY29sX3BhcmFtZXRlcnMpOwogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJ
U1BBVENIRVJTKQogcHVibGljOgogICAgIHZvaWQgc2V0QWx0ZXJuYXRlRGlzcGF0Y2hlcihBbHRl
cm5hdGVEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKiBhbHRlcm5hdGVEaXNwYXRjaGVyKSB7IG1f
YWx0ZXJuYXRlRGlzcGF0Y2hlciA9IGFsdGVybmF0ZURpc3BhdGNoZXI7IH0KQEAgLTIxMSw5ICsy
MDcsNyBAQCBwcml2YXRlOgogI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKIAog
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5j
bHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4K
LSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FM
VEVSTkFURV9ESVNQQVRDSEVSUykKICNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3Bh
dGNoZXJzLmgiCkBAIC0yMzUsNDcgKzIyOSwzNiBAQCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVy
OjpEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRAog
ICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbigiRGF0
YWJhc2UiX3MsIHRoaXMpOwogfQogCi12b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmRp
c3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9i
amVjdD4mJiBtZXNzYWdlKQordm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRj
aChsb25nIHByb3RvY29sX2NhbGxJZCwgY29uc3QgU3RyaW5nJiBwcm90b2NvbF9tZXRob2QsIFJl
ZjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfbWVzc2FnZSkKIHsKICAgICBSZWY8RGF0YWJhc2VC
YWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7CiAKLSAgICBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiBwYXJhbWV0ZXJzOwotICAgIG1lc3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9zLCBwYXJh
bWV0ZXJzKTsKKyAgICBhdXRvIHByb3RvY29sX3BhcmFtZXRlcnMgPSBwcm90b2NvbF9tZXNzYWdl
LT5nZXRPYmplY3QoInBhcmFtcyJfcyk7CiAKLSAgICBpZiAobWV0aG9kID09ICJleGVjdXRlQWxs
T3B0aW9uYWxQYXJhbWV0ZXJzIikgewotICAgICAgICBleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0
ZXJzKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7CisgICAgaWYgKHByb3RvY29sX21l
dGhvZCA9PSAiZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyIpIHsKKyAgICAgICAgZXhlY3V0
ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJvdG9jb2xf
cGFyYW1ldGVycykpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmIChtZXRob2QgPT0g
ImV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyIpIHsKLSAgICAgICAgZXhlY3V0ZU5vT3B0aW9u
YWxQYXJhbWV0ZXJzKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7CisgICAgaWYgKHBy
b3RvY29sX21ldGhvZCA9PSAiZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzIikgeworICAgICAg
ICBleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMocHJvdG9jb2xfY2FsbElkLCBXVEZNb3ZlKHBy
b3RvY29sX3BhcmFtZXRlcnMpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1fYmFj
a2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1l
dGhvZE5vdEZvdW5kLCAiJ0RhdGFiYXNlLiIgKyBtZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7
CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlz
cGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRGF0YWJhc2UuIiArIHByb3RvY29sX21ldGhvZCAr
ICInIHdhcyBub3QgZm91bmQiKTsKIH0KIAotdm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVy
OjpleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNP
Tjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpCit2b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6
OmV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMobG9uZyBwcm90b2NvbF9jYWxsSWQsIFJlZlB0
cjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfcGFyYW1ldGVycykKIHsKLSAgICBib29sIG9wdF9p
bl9jb2x1bW5OYW1lc192YWx1ZUZvdW5kID0gZmFsc2U7Ci0gICAgUmVmUHRyPEpTT046OkFycmF5
PiBvcHRfaW5fY29sdW1uTmFtZXMgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRBcnJheShwYXJh
bWV0ZXJzLmdldCgpLCAiY29sdW1uTmFtZXMiX3MsICZvcHRfaW5fY29sdW1uTmFtZXNfdmFsdWVG
b3VuZCk7Ci0gICAgYm9vbCBvcHRfaW5fbm90ZXNfdmFsdWVGb3VuZCA9IGZhbHNlOwotICAgIFN0
cmluZyBvcHRfaW5fbm90ZXMgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRTdHJpbmcocGFyYW1l
dGVycy5nZXQoKSwgIm5vdGVzIl9zLCAmb3B0X2luX25vdGVzX3ZhbHVlRm91bmQpOwotICAgIGJv
b2wgb3B0X2luX3RpbWVzdGFtcF92YWx1ZUZvdW5kID0gZmFsc2U7Ci0gICAgZG91YmxlIG9wdF9p
bl90aW1lc3RhbXAgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXREb3VibGUocGFyYW1ldGVycy5n
ZXQoKSwgInRpbWVzdGFtcCJfcywgJm9wdF9pbl90aW1lc3RhbXBfdmFsdWVGb3VuZCk7Ci0gICAg
Ym9vbCBvcHRfaW5fdmFsdWVzX3ZhbHVlRm91bmQgPSBmYWxzZTsKLSAgICBSZWZQdHI8SlNPTjo6
T2JqZWN0PiBvcHRfaW5fdmFsdWVzID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0T2JqZWN0KHBh
cmFtZXRlcnMuZ2V0KCksICJ2YWx1ZXMiX3MsICZvcHRfaW5fdmFsdWVzX3ZhbHVlRm91bmQpOwot
ICAgIGJvb2wgb3B0X2luX3BheWxvYWRfdmFsdWVGb3VuZCA9IGZhbHNlOwotICAgIFJlZlB0cjxK
U09OOjpWYWx1ZT4gb3B0X2luX3BheWxvYWQgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRWYWx1
ZShwYXJhbWV0ZXJzLmdldCgpLCAicGF5bG9hZCJfcywgJm9wdF9pbl9wYXlsb2FkX3ZhbHVlRm91
bmQpOwotICAgIGJvb2wgb3B0X2luX2RhdGFiYXNlSWRfdmFsdWVGb3VuZCA9IGZhbHNlOwotICAg
IGludCBvcHRfaW5fZGF0YWJhc2VJZCA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldEludGVnZXIo
cGFyYW1ldGVycy5nZXQoKSwgImRhdGFiYXNlSWQiX3MsICZvcHRfaW5fZGF0YWJhc2VJZF92YWx1
ZUZvdW5kKTsKLSAgICBib29sIG9wdF9pbl9zcWxFcnJvcl92YWx1ZUZvdW5kID0gZmFsc2U7Ci0g
ICAgUmVmUHRyPEpTT046Ok9iamVjdD4gb3B0X2luX3NxbEVycm9yID0gbV9iYWNrZW5kRGlzcGF0
Y2hlci0+Z2V0T2JqZWN0KHBhcmFtZXRlcnMuZ2V0KCksICJzcWxFcnJvciJfcywgJm9wdF9pbl9z
cWxFcnJvcl92YWx1ZUZvdW5kKTsKLSAgICBib29sIG9wdF9pbl9zY3JlZW5Db2xvcl92YWx1ZUZv
dW5kID0gZmFsc2U7Ci0gICAgU3RyaW5nIG9wdF9pbl9zY3JlZW5Db2xvciA9IG1fYmFja2VuZERp
c3BhdGNoZXItPmdldFN0cmluZyhwYXJhbWV0ZXJzLmdldCgpLCAic2NyZWVuQ29sb3IiX3MsICZv
cHRfaW5fc2NyZWVuQ29sb3JfdmFsdWVGb3VuZCk7Ci0gICAgYm9vbCBvcHRfaW5fYWx0ZXJuYXRl
Q29sb3JzX3ZhbHVlRm91bmQgPSBmYWxzZTsKLSAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IG9wdF9p
bl9hbHRlcm5hdGVDb2xvcnMgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRBcnJheShwYXJhbWV0
ZXJzLmdldCgpLCAiYWx0ZXJuYXRlQ29sb3JzIl9zLCAmb3B0X2luX2FsdGVybmF0ZUNvbG9yc192
YWx1ZUZvdW5kKTsKLSAgICBib29sIG9wdF9pbl9wcmludENvbG9yX3ZhbHVlRm91bmQgPSBmYWxz
ZTsKLSAgICBTdHJpbmcgb3B0X2luX3ByaW50Q29sb3IgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5n
ZXRTdHJpbmcocGFyYW1ldGVycy5nZXQoKSwgInByaW50Q29sb3IiX3MsICZvcHRfaW5fcHJpbnRD
b2xvcl92YWx1ZUZvdW5kKTsKKyAgICBhdXRvIGluX29wdF9jb2x1bW5OYW1lcyA9IG1fYmFja2Vu
ZERpc3BhdGNoZXItPmdldEFycmF5KHByb3RvY29sX3BhcmFtZXRlcnMuZ2V0KCksICJjb2x1bW5O
YW1lcyJfcywgZmFsc2UpOworICAgIGF1dG8gaW5fb3B0X25vdGVzID0gbV9iYWNrZW5kRGlzcGF0
Y2hlci0+Z2V0U3RyaW5nKHByb3RvY29sX3BhcmFtZXRlcnMuZ2V0KCksICJub3RlcyJfcywgZmFs
c2UpOworICAgIGF1dG8gaW5fb3B0X3RpbWVzdGFtcCA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdl
dERvdWJsZShwcm90b2NvbF9wYXJhbWV0ZXJzLmdldCgpLCAidGltZXN0YW1wIl9zLCBmYWxzZSk7
CisgICAgYXV0byBpbl9vcHRfdmFsdWVzID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0T2JqZWN0
KHByb3RvY29sX3BhcmFtZXRlcnMuZ2V0KCksICJ2YWx1ZXMiX3MsIGZhbHNlKTsKKyAgICBhdXRv
IGluX29wdF9wYXlsb2FkID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0VmFsdWUocHJvdG9jb2xf
cGFyYW1ldGVycy5nZXQoKSwgInBheWxvYWQiX3MsIGZhbHNlKTsKKyAgICBhdXRvIGluX29wdF9k
YXRhYmFzZUlkID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0SW50ZWdlcihwcm90b2NvbF9wYXJh
bWV0ZXJzLmdldCgpLCAiZGF0YWJhc2VJZCJfcywgZmFsc2UpOworICAgIGF1dG8gaW5fb3B0X3Nx
bEVycm9yID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0T2JqZWN0KHByb3RvY29sX3BhcmFtZXRl
cnMuZ2V0KCksICJzcWxFcnJvciJfcywgZmFsc2UpOworICAgIGF1dG8gaW5fb3B0X3NjcmVlbkNv
bG9yX2pzb24gPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRTdHJpbmcocHJvdG9jb2xfcGFyYW1l
dGVycy5nZXQoKSwgInNjcmVlbkNvbG9yIl9zLCBmYWxzZSk7CisgICAgYXV0byBpbl9vcHRfYWx0
ZXJuYXRlQ29sb3JzID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0QXJyYXkocHJvdG9jb2xfcGFy
YW1ldGVycy5nZXQoKSwgImFsdGVybmF0ZUNvbG9ycyJfcywgZmFsc2UpOworICAgIGF1dG8gaW5f
b3B0X3ByaW50Q29sb3IgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRTdHJpbmcocHJvdG9jb2xf
cGFyYW1ldGVycy5nZXQoKSwgInByaW50Q29sb3IiX3MsIGZhbHNlKTsKICAgICBpZiAobV9iYWNr
ZW5kRGlzcGF0Y2hlci0+aGFzUHJvdG9jb2xFcnJvcnMoKSkgewogICAgICAgICBtX2JhY2tlbmRE
aXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpJbnZhbGlk
UGFyYW1zLCAiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICdEYXRhYmFzZS5leGVjdXRlQWxsT3B0
aW9uYWxQYXJhbWV0ZXJzJyBjYW4ndCBiZSBwcm9jZXNzZWQiX3MpOwogICAgICAgICByZXR1cm47
CkBAIC0yODMsNjUgKzI2Niw1OCBAQCB2b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4
ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMobG9uZyByZXF1ZXN0SWQsIFJlZgogCiAjaWYgRU5B
QkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAgICAgaWYgKG1fYWx0ZXJuYXRl
RGlzcGF0Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmV4ZWN1dGVBbGxP
cHRpb25hbFBhcmFtZXRlcnMocmVxdWVzdElkLCBvcHRfaW5fY29sdW1uTmFtZXNfdmFsdWVGb3Vu
ZCA/IG9wdF9pbl9jb2x1bW5OYW1lcy5nZXQoKSA6IG51bGxwdHIsIG9wdF9pbl9ub3Rlc192YWx1
ZUZvdW5kID8gJm9wdF9pbl9ub3RlcyA6IG51bGxwdHIsIG9wdF9pbl90aW1lc3RhbXBfdmFsdWVG
b3VuZCA/ICZvcHRfaW5fdGltZXN0YW1wIDogbnVsbHB0ciwgb3B0X2luX3ZhbHVlc192YWx1ZUZv
dW5kID8gb3B0X2luX3ZhbHVlcy5nZXQoKSA6IG51bGxwdHIsIG9wdF9pbl9wYXlsb2FkX3ZhbHVl
Rm91bmQgPyBvcHRfaW5fcGF5bG9hZC5nZXQoKSA6IG51bGxwdHIsIG9wdF9pbl9kYXRhYmFzZUlk
X3ZhbHVlRm91bmQgPyAmb3B0X2luX2RhdGFiYXNlSWQgOiBudWxscHRyLCBvcHRfaW5fc3FsRXJy
b3JfdmFsdWVGb3VuZCA/IG9wdF9pbl9zcWxFcnJvci5nZXQoKSA6IG51bGxwdHIsIG9wdF9pbl9z
Y3JlZW5Db2xvcl92YWx1ZUZvdW5kID8gJm9wdF9pbl9zY3JlZW5Db2xvciA6IG51bGxwdHIsIG9w
dF9pbl9hbHRlcm5hdGVDb2xvcnNfdmFsdWVGb3VuZCA/IG9wdF9pbl9hbHRlcm5hdGVDb2xvcnMu
Z2V0KCkgOiBudWxscHRyLCBvcHRfaW5fcHJpbnRDb2xvcl92YWx1ZUZvdW5kID8gJm9wdF9pbl9w
cmludENvbG9yIDogbnVsbHB0cik7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+ZXhl
Y3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUoaW5fb3B0
X2NvbHVtbk5hbWVzKSwgaW5fb3B0X25vdGVzLCBXVEZNb3ZlKGluX29wdF90aW1lc3RhbXApLCBX
VEZNb3ZlKGluX29wdF92YWx1ZXMpLCBXVEZNb3ZlKGluX29wdF9wYXlsb2FkKSwgV1RGTW92ZShp
bl9vcHRfZGF0YWJhc2VJZCksIFdURk1vdmUoaW5fb3B0X3NxbEVycm9yKSwgaW5fb3B0X3NjcmVl
bkNvbG9yX2pzb24sIFdURk1vdmUoaW5fb3B0X2FsdGVybmF0ZUNvbG9ycyksIGluX29wdF9wcmlu
dENvbG9yKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZiAvLyBFTkFCTEUoSU5TUEVD
VE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIAotICAgIEVycm9yU3RyaW5nIGVycm9yOwotICAg
IFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAg
UmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4gb3V0X2NvbHVtbk5hbWVzOwotICAgIE9wdGlv
bmFsPFN0cmluZz4gb3V0X25vdGVzOwotICAgIE9wdGlvbmFsPGRvdWJsZT4gb3V0X3RpbWVzdGFt
cDsKLSAgICBPcHRpb25hbDxKU09OOjpPYmplY3Q+IG91dF92YWx1ZXM7Ci0gICAgT3B0aW9uYWw8
SlNPTjo6VmFsdWU+IG91dF9wYXlsb2FkOwotICAgIE9wdGlvbmFsPGludD4gb3V0X2RhdGFiYXNl
SWQ7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4gb3V0
X3NxbEVycm9yOwotICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29s
b3JzIG91dF9zY3JlZW5Db2xvcjsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0
YWJhc2U6OkNvbG9yTGlzdD4gb3V0X2FsdGVybmF0ZUNvbG9yczsKLSAgICBEYXRhYmFzZUJhY2tl
bmREaXNwYXRjaGVySGFuZGxlcjo6UHJpbnRDb2xvciBvdXRfcHJpbnRDb2xvcjsKLSAgICBtX2Fn
ZW50LT5leGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKGVycm9yLCBvcHRfaW5fY29sdW1uTmFt
ZXNfdmFsdWVGb3VuZCA/IG9wdF9pbl9jb2x1bW5OYW1lcy5nZXQoKSA6IG51bGxwdHIsIG9wdF9p
bl9ub3Rlc192YWx1ZUZvdW5kID8gJm9wdF9pbl9ub3RlcyA6IG51bGxwdHIsIG9wdF9pbl90aW1l
c3RhbXBfdmFsdWVGb3VuZCA/ICZvcHRfaW5fdGltZXN0YW1wIDogbnVsbHB0ciwgb3B0X2luX3Zh
bHVlc192YWx1ZUZvdW5kID8gb3B0X2luX3ZhbHVlcy5nZXQoKSA6IG51bGxwdHIsIG9wdF9pbl9w
YXlsb2FkX3ZhbHVlRm91bmQgPyBvcHRfaW5fcGF5bG9hZC5nZXQoKSA6IG51bGxwdHIsIG9wdF9p
bl9kYXRhYmFzZUlkX3ZhbHVlRm91bmQgPyAmb3B0X2luX2RhdGFiYXNlSWQgOiBudWxscHRyLCBv
cHRfaW5fc3FsRXJyb3JfdmFsdWVGb3VuZCA/IG9wdF9pbl9zcWxFcnJvci5nZXQoKSA6IG51bGxw
dHIsIG9wdF9pbl9zY3JlZW5Db2xvcl92YWx1ZUZvdW5kID8gJm9wdF9pbl9zY3JlZW5Db2xvciA6
IG51bGxwdHIsIG9wdF9pbl9hbHRlcm5hdGVDb2xvcnNfdmFsdWVGb3VuZCA/IG9wdF9pbl9hbHRl
cm5hdGVDb2xvcnMuZ2V0KCkgOiBudWxscHRyLCBvcHRfaW5fcHJpbnRDb2xvcl92YWx1ZUZvdW5k
ID8gJm9wdF9pbl9wcmludENvbG9yIDogbnVsbHB0ciwgb3V0X2NvbHVtbk5hbWVzLCBvdXRfbm90
ZXMsIG91dF90aW1lc3RhbXAsIG91dF92YWx1ZXMsIG91dF9wYXlsb2FkLCBvdXRfZGF0YWJhc2VJ
ZCwgb3V0X3NxbEVycm9yLCBvdXRfc2NyZWVuQ29sb3IsIG91dF9hbHRlcm5hdGVDb2xvcnMsIG91
dF9wcmludENvbG9yKTsKKyAgICBhdXRvIGluX29wdF9zY3JlZW5Db2xvciA9IFByb3RvY29sOjpU
ZXN0SGVscGVyczo6cGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPFByb3RvY29sOjpEYXRhYmFzZTo6
UHJpbWFyeUNvbG9ycz4oaW5fb3B0X3NjcmVlbkNvbG9yX2pzb24pOwogCi0gICAgaWYgKCFlcnJv
ci5sZW5ndGgoKSkgewotICAgICAgICBpZiAob3V0X2NvbHVtbk5hbWVzKQotICAgICAgICAgICAg
cmVzdWx0LT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIG91dF9jb2x1bW5OYW1lcyk7Ci0gICAg
ICAgIGlmIChvdXRfbm90ZXMuaGFzVmFsdWUoKSkKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0U3Ry
aW5nKCJub3RlcyJfcywgKm91dF9ub3Rlcyk7Ci0gICAgICAgIGlmIChvdXRfdGltZXN0YW1wLmhh
c1ZhbHVlKCkpCi0gICAgICAgICAgICByZXN1bHQtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCAq
b3V0X3RpbWVzdGFtcCk7Ci0gICAgICAgIGlmIChvdXRfdmFsdWVzLmhhc1ZhbHVlKCkpCi0gICAg
ICAgICAgICByZXN1bHQtPnNldE9iamVjdCgidmFsdWVzIl9zLCAqb3V0X3ZhbHVlcyk7Ci0gICAg
ICAgIGlmIChvdXRfcGF5bG9hZC5oYXNWYWx1ZSgpKQotICAgICAgICAgICAgcmVzdWx0LT5zZXRW
YWx1ZSgicGF5bG9hZCJfcywgKm91dF9wYXlsb2FkKTsKLSAgICAgICAgaWYgKG91dF9kYXRhYmFz
ZUlkLmhhc1ZhbHVlKCkpCi0gICAgICAgICAgICByZXN1bHQtPnNldEludGVnZXIoImRhdGFiYXNl
SWQiX3MsICpvdXRfZGF0YWJhc2VJZCk7Ci0gICAgICAgIGlmIChvdXRfc3FsRXJyb3IpCi0gICAg
ICAgICAgICByZXN1bHQtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIG91dF9zcWxFcnJvcik7Ci0g
ICAgICAgIGlmIChvdXRfc2NyZWVuQ29sb3IuaGFzVmFsdWUoKSkKLSAgICAgICAgICAgIHJlc3Vs
dC0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgKm91dF9zY3JlZW5Db2xvcik7Ci0gICAgICAg
IGlmIChvdXRfYWx0ZXJuYXRlQ29sb3JzKQotICAgICAgICAgICAgcmVzdWx0LT5zZXRBcnJheSgi
YWx0ZXJuYXRlQ29sb3JzIl9zLCBvdXRfYWx0ZXJuYXRlQ29sb3JzKTsKLSAgICAgICAgaWYgKG91
dF9wcmludENvbG9yLmhhc1ZhbHVlKCkpCi0gICAgICAgICAgICByZXN1bHQtPnNldFN0cmluZygi
cHJpbnRDb2xvciJfcywgKm91dF9wcmludENvbG9yKTsKKyAgICBhdXRvIHJlc3VsdCA9IG1fYWdl
bnQtPmV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMoV1RGTW92ZShpbl9vcHRfY29sdW1uTmFt
ZXMpLCBpbl9vcHRfbm90ZXMsIFdURk1vdmUoaW5fb3B0X3RpbWVzdGFtcCksIFdURk1vdmUoaW5f
b3B0X3ZhbHVlcyksIFdURk1vdmUoaW5fb3B0X3BheWxvYWQpLCBXVEZNb3ZlKGluX29wdF9kYXRh
YmFzZUlkKSwgV1RGTW92ZShpbl9vcHRfc3FsRXJyb3IpLCBXVEZNb3ZlKGluX29wdF9zY3JlZW5D
b2xvciksIFdURk1vdmUoaW5fb3B0X2FsdGVybmF0ZUNvbG9ycyksIGluX29wdF9wcmludENvbG9y
KTsKKyAgICBpZiAoIXJlc3VsdCkgeworICAgICAgICBBU1NFUlQoIXJlc3VsdC5lcnJvcigpLmlz
RW1wdHkoKSk7CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJy
b3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCByZXN1bHQuZXJyb3IoKSk7CisgICAg
ICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKLSAgICAgICAgbV9i
YWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQp
LCBmYWxzZSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQ
cm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJv
cikpOworCisgICAgYXV0byBbb3V0X29wdF9jb2x1bW5OYW1lcywgb3V0X29wdF9ub3Rlcywgb3V0
X29wdF90aW1lc3RhbXAsIG91dF9vcHRfdmFsdWVzLCBvdXRfb3B0X3BheWxvYWQsIG91dF9vcHRf
ZGF0YWJhc2VJZCwgb3V0X29wdF9zcWxFcnJvciwgb3V0X29wdF9zY3JlZW5Db2xvciwgb3V0X29w
dF9hbHRlcm5hdGVDb2xvcnMsIG91dF9vcHRfcHJpbnRDb2xvcl0gPSBXVEZNb3ZlKHJlc3VsdC52
YWx1ZSgpKTsKKworICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6
OmNyZWF0ZSgpOworICAgIGlmICghIW91dF9vcHRfY29sdW1uTmFtZXMpCisgICAgICAgIHByb3Rv
Y29sX2pzb25NZXNzYWdlLT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIG91dF9vcHRfY29sdW1u
TmFtZXMucmVsZWFzZU5vbk51bGwoKSk7CisgICAgaWYgKCEhb3V0X29wdF9ub3RlcykKKyAgICAg
ICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygibm90ZXMiX3MsIG91dF9vcHRfbm90
ZXMpOworICAgIGlmICghIW91dF9vcHRfdGltZXN0YW1wKQorICAgICAgICBwcm90b2NvbF9qc29u
TWVzc2FnZS0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsICpvdXRfb3B0X3RpbWVzdGFtcCk7Cisg
ICAgaWYgKCEhb3V0X29wdF92YWx1ZXMpCisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5z
ZXRPYmplY3QoInZhbHVlcyJfcywgb3V0X29wdF92YWx1ZXMucmVsZWFzZU5vbk51bGwoKSk7Cisg
ICAgaWYgKCEhb3V0X29wdF9wYXlsb2FkKQorICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+
c2V0VmFsdWUoInBheWxvYWQiX3MsIG91dF9vcHRfcGF5bG9hZC5yZWxlYXNlTm9uTnVsbCgpKTsK
KyAgICBpZiAoISFvdXRfb3B0X2RhdGFiYXNlSWQpCisgICAgICAgIHByb3RvY29sX2pzb25NZXNz
YWdlLT5zZXRJbnRlZ2VyKCJkYXRhYmFzZUlkIl9zLCAqb3V0X29wdF9kYXRhYmFzZUlkKTsKKyAg
ICBpZiAoISFvdXRfb3B0X3NxbEVycm9yKQorICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+
c2V0T2JqZWN0KCJzcWxFcnJvciJfcywgb3V0X29wdF9zcWxFcnJvci5yZWxlYXNlTm9uTnVsbCgp
KTsKKyAgICBpZiAoISFvdXRfb3B0X3NjcmVlbkNvbG9yKQorICAgICAgICBwcm90b2NvbF9qc29u
TWVzc2FnZS0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgUHJvdG9jb2w6OlRlc3RIZWxwZXJz
OjpnZXRFbnVtQ29uc3RhbnRWYWx1ZSgqb3V0X29wdF9zY3JlZW5Db2xvcikpOworICAgIGlmICgh
IW91dF9vcHRfYWx0ZXJuYXRlQ29sb3JzKQorICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+
c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywgb3V0X29wdF9hbHRlcm5hdGVDb2xvcnMucmVs
ZWFzZU5vbk51bGwoKSk7CisgICAgaWYgKCEhb3V0X29wdF9wcmludENvbG9yKQorICAgICAgICBw
cm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCBvdXRfb3B0X3By
aW50Q29sb3IpOworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShwcm90b2Nv
bF9jYWxsSWQsIFdURk1vdmUocHJvdG9jb2xfanNvbk1lc3NhZ2UpLCBmYWxzZSk7CiB9CiAKLXZv
aWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJz
KGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpCit2b2lk
IERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhs
b25nIHByb3RvY29sX2NhbGxJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9wYXJh
bWV0ZXJzKQogewotICAgIFJlZlB0cjxKU09OOjpBcnJheT4gaW5fY29sdW1uTmFtZXMgPSBtX2Jh
Y2tlbmREaXNwYXRjaGVyLT5nZXRBcnJheShwYXJhbWV0ZXJzLmdldCgpLCAiY29sdW1uTmFtZXMi
X3MsIG51bGxwdHIpOwotICAgIFN0cmluZyBpbl9ub3RlcyA9IG1fYmFja2VuZERpc3BhdGNoZXIt
PmdldFN0cmluZyhwYXJhbWV0ZXJzLmdldCgpLCAibm90ZXMiX3MsIG51bGxwdHIpOwotICAgIGRv
dWJsZSBpbl90aW1lc3RhbXAgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXREb3VibGUocGFyYW1l
dGVycy5nZXQoKSwgInRpbWVzdGFtcCJfcywgbnVsbHB0cik7Ci0gICAgUmVmUHRyPEpTT046Ok9i
amVjdD4gaW5fdmFsdWVzID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0T2JqZWN0KHBhcmFtZXRl
cnMuZ2V0KCksICJ2YWx1ZXMiX3MsIG51bGxwdHIpOwotICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4g
aW5fcGF5bG9hZCA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFZhbHVlKHBhcmFtZXRlcnMuZ2V0
KCksICJwYXlsb2FkIl9zLCBudWxscHRyKTsKLSAgICBpbnQgaW5fZGF0YWJhc2VJZCA9IG1fYmFj
a2VuZERpc3BhdGNoZXItPmdldEludGVnZXIocGFyYW1ldGVycy5nZXQoKSwgImRhdGFiYXNlSWQi
X3MsIG51bGxwdHIpOwotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IGluX3NxbEVycm9yID0gbV9i
YWNrZW5kRGlzcGF0Y2hlci0+Z2V0T2JqZWN0KHBhcmFtZXRlcnMuZ2V0KCksICJzcWxFcnJvciJf
cywgbnVsbHB0cik7Ci0gICAgU3RyaW5nIGluX3NjcmVlbkNvbG9yID0gbV9iYWNrZW5kRGlzcGF0
Y2hlci0+Z2V0U3RyaW5nKHBhcmFtZXRlcnMuZ2V0KCksICJzY3JlZW5Db2xvciJfcywgbnVsbHB0
cik7Ci0gICAgUmVmUHRyPEpTT046OkFycmF5PiBpbl9hbHRlcm5hdGVDb2xvcnMgPSBtX2JhY2tl
bmREaXNwYXRjaGVyLT5nZXRBcnJheShwYXJhbWV0ZXJzLmdldCgpLCAiYWx0ZXJuYXRlQ29sb3Jz
Il9zLCBudWxscHRyKTsKLSAgICBTdHJpbmcgaW5fcHJpbnRDb2xvciA9IG1fYmFja2VuZERpc3Bh
dGNoZXItPmdldFN0cmluZyhwYXJhbWV0ZXJzLmdldCgpLCAicHJpbnRDb2xvciJfcywgbnVsbHB0
cik7CisgICAgYXV0byBpbl9jb2x1bW5OYW1lcyA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldEFy
cmF5KHByb3RvY29sX3BhcmFtZXRlcnMuZ2V0KCksICJjb2x1bW5OYW1lcyJfcywgdHJ1ZSk7Cisg
ICAgYXV0byBpbl9ub3RlcyA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFN0cmluZyhwcm90b2Nv
bF9wYXJhbWV0ZXJzLmdldCgpLCAibm90ZXMiX3MsIHRydWUpOworICAgIGF1dG8gaW5fdGltZXN0
YW1wID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0RG91YmxlKHByb3RvY29sX3BhcmFtZXRlcnMu
Z2V0KCksICJ0aW1lc3RhbXAiX3MsIHRydWUpOworICAgIGF1dG8gaW5fdmFsdWVzID0gbV9iYWNr
ZW5kRGlzcGF0Y2hlci0+Z2V0T2JqZWN0KHByb3RvY29sX3BhcmFtZXRlcnMuZ2V0KCksICJ2YWx1
ZXMiX3MsIHRydWUpOworICAgIGF1dG8gaW5fcGF5bG9hZCA9IG1fYmFja2VuZERpc3BhdGNoZXIt
PmdldFZhbHVlKHByb3RvY29sX3BhcmFtZXRlcnMuZ2V0KCksICJwYXlsb2FkIl9zLCB0cnVlKTsK
KyAgICBhdXRvIGluX2RhdGFiYXNlSWQgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRJbnRlZ2Vy
KHByb3RvY29sX3BhcmFtZXRlcnMuZ2V0KCksICJkYXRhYmFzZUlkIl9zLCB0cnVlKTsKKyAgICBh
dXRvIGluX3NxbEVycm9yID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0T2JqZWN0KHByb3RvY29s
X3BhcmFtZXRlcnMuZ2V0KCksICJzcWxFcnJvciJfcywgdHJ1ZSk7CisgICAgYXV0byBpbl9zY3Jl
ZW5Db2xvcl9qc29uID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3RyaW5nKHByb3RvY29sX3Bh
cmFtZXRlcnMuZ2V0KCksICJzY3JlZW5Db2xvciJfcywgdHJ1ZSk7CisgICAgYXV0byBpbl9hbHRl
cm5hdGVDb2xvcnMgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRBcnJheShwcm90b2NvbF9wYXJh
bWV0ZXJzLmdldCgpLCAiYWx0ZXJuYXRlQ29sb3JzIl9zLCB0cnVlKTsKKyAgICBhdXRvIGluX3By
aW50Q29sb3IgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRTdHJpbmcocHJvdG9jb2xfcGFyYW1l
dGVycy5nZXQoKSwgInByaW50Q29sb3IiX3MsIHRydWUpOwogICAgIGlmIChtX2JhY2tlbmREaXNw
YXRjaGVyLT5oYXNQcm90b2NvbEVycm9ycygpKSB7CiAgICAgICAgIG1fYmFja2VuZERpc3BhdGNo
ZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OkludmFsaWRQYXJhbXMs
ICJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJ0RhdGFiYXNlLmV4ZWN1dGVOb09wdGlvbmFsUGFy
YW1ldGVycycgY2FuJ3QgYmUgcHJvY2Vzc2VkIl9zKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMzQ5
LDQxICszMjUsMzggQEAgdm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlTm9P
cHRpb25hbFBhcmFtZXRlcnMobG9uZyByZXF1ZXN0SWQsIFJlZlAKIAogI2lmIEVOQUJMRShJTlNQ
RUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNo
ZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5leGVjdXRlTm9PcHRpb25hbFBh
cmFtZXRlcnMocmVxdWVzdElkLCAqaW5fY29sdW1uTmFtZXMsIGluX25vdGVzLCBpbl90aW1lc3Rh
bXAsICppbl92YWx1ZXMsICppbl9wYXlsb2FkLCBpbl9kYXRhYmFzZUlkLCAqaW5fc3FsRXJyb3Is
IGluX3NjcmVlbkNvbG9yLCAqaW5fYWx0ZXJuYXRlQ29sb3JzLCBpbl9wcmludENvbG9yKTsKKyAg
ICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5leGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMo
cHJvdG9jb2xfY2FsbElkLCBpbl9jb2x1bW5OYW1lcy5yZWxlYXNlTm9uTnVsbCgpLCBpbl9ub3Rl
cywgKmluX3RpbWVzdGFtcCwgaW5fdmFsdWVzLnJlbGVhc2VOb25OdWxsKCksIGluX3BheWxvYWQu
cmVsZWFzZU5vbk51bGwoKSwgKmluX2RhdGFiYXNlSWQsIGluX3NxbEVycm9yLnJlbGVhc2VOb25O
dWxsKCksIGluX3NjcmVlbkNvbG9yX2pzb24sIGluX2FsdGVybmF0ZUNvbG9ycy5yZWxlYXNlTm9u
TnVsbCgpLCBpbl9wcmludENvbG9yKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZiAv
LyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIAotICAgIEVycm9yU3Ry
aW5nIGVycm9yOwotICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6
Y3JlYXRlKCk7Ci0gICAgUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4gb3V0X2NvbHVtbk5h
bWVzOwotICAgIFN0cmluZyBvdXRfbm90ZXM7Ci0gICAgZG91YmxlIG91dF90aW1lc3RhbXA7Ci0g
ICAgSlNPTjo6T2JqZWN0IG91dF92YWx1ZXM7Ci0gICAgSlNPTjo6VmFsdWUgb3V0X3BheWxvYWQ7
Ci0gICAgaW50IG91dF9kYXRhYmFzZUlkOwotICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29s
OjpEYXRhYmFzZTo6RXJyb3I+IG91dF9zcWxFcnJvcjsKLSAgICBJbnNwZWN0b3I6OlByb3RvY29s
OjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyBvdXRfc2NyZWVuQ29sb3I7Ci0gICAgUmVmUHRyPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+IG91dF9hbHRlcm5hdGVDb2xv
cnM7Ci0gICAgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3Igb3V0
X3ByaW50Q29sb3I7Ci0gICAgbV9hZ2VudC0+ZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKGVy
cm9yLCAqaW5fY29sdW1uTmFtZXMsIGluX25vdGVzLCBpbl90aW1lc3RhbXAsICppbl92YWx1ZXMs
ICppbl9wYXlsb2FkLCBpbl9kYXRhYmFzZUlkLCAqaW5fc3FsRXJyb3IsIGluX3NjcmVlbkNvbG9y
LCAqaW5fYWx0ZXJuYXRlQ29sb3JzLCBpbl9wcmludENvbG9yLCBvdXRfY29sdW1uTmFtZXMsICZv
dXRfbm90ZXMsICZvdXRfdGltZXN0YW1wLCBvdXRfdmFsdWVzLCAmb3V0X3BheWxvYWQsICZvdXRf
ZGF0YWJhc2VJZCwgb3V0X3NxbEVycm9yLCAmb3V0X3NjcmVlbkNvbG9yLCBvdXRfYWx0ZXJuYXRl
Q29sb3JzLCAmb3V0X3ByaW50Q29sb3IpOwotCi0gICAgaWYgKCFlcnJvci5sZW5ndGgoKSkgewot
ICAgICAgICByZXN1bHQtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgb3V0X2NvbHVtbk5hbWVz
KTsKLSAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCBvdXRfbm90ZXMpOwotICAg
ICAgICByZXN1bHQtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCBvdXRfdGltZXN0YW1wKTsKLSAg
ICAgICAgcmVzdWx0LT5zZXRPYmplY3QoInZhbHVlcyJfcywgb3V0X3ZhbHVlcyk7Ci0gICAgICAg
IHJlc3VsdC0+c2V0VmFsdWUoInBheWxvYWQiX3MsIG91dF9wYXlsb2FkKTsKLSAgICAgICAgcmVz
dWx0LT5zZXRJbnRlZ2VyKCJkYXRhYmFzZUlkIl9zLCBvdXRfZGF0YWJhc2VJZCk7Ci0gICAgICAg
IHJlc3VsdC0+c2V0T2JqZWN0KCJzcWxFcnJvciJfcywgb3V0X3NxbEVycm9yKTsKLSAgICAgICAg
cmVzdWx0LT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCBJbnNwZWN0b3I6OlByb3RvY29sOjpU
ZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUob3V0X3NjcmVlbkNvbG9yKSk7Ci0gICAg
ICAgIHJlc3VsdC0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywgb3V0X2FsdGVybmF0ZUNv
bG9ycyk7Ci0gICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCBJbnNwZWN0
b3I6OlByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUob3V0X3ByaW50
Q29sb3IpKTsKKyAgICBhdXRvIGluX3NjcmVlbkNvbG9yID0gUHJvdG9jb2w6OlRlc3RIZWxwZXJz
OjpwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29s
b3JzPihpbl9zY3JlZW5Db2xvcl9qc29uKTsKKyAgICBpZiAoIWluX3NjcmVlbkNvbG9yKSB7Cisg
ICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERp
c3BhdGNoZXI6OlNlcnZlckVycm9yLCBtYWtlU3RyaW5nKCJVbmtub3duIHNjcmVlbkNvbG9yOiAi
X3MsIGluX3NjcmVlbkNvbG9yX2pzb24pKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBp
ZiAoIWVycm9yLmxlbmd0aCgpKQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVz
cG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKLSAgICBlbHNlCi0gICAg
ICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3Bh
dGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7CisKKyAgICBhdXRvIHJlc3VsdCA9
IG1fYWdlbnQtPmV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhpbl9jb2x1bW5OYW1lcy5yZWxl
YXNlTm9uTnVsbCgpLCBpbl9ub3RlcywgKmluX3RpbWVzdGFtcCwgaW5fdmFsdWVzLnJlbGVhc2VO
b25OdWxsKCksIGluX3BheWxvYWQucmVsZWFzZU5vbk51bGwoKSwgKmluX2RhdGFiYXNlSWQsIGlu
X3NxbEVycm9yLnJlbGVhc2VOb25OdWxsKCksICppbl9zY3JlZW5Db2xvciwgaW5fYWx0ZXJuYXRl
Q29sb3JzLnJlbGVhc2VOb25OdWxsKCksIGluX3ByaW50Q29sb3IpOworICAgIGlmICghcmVzdWx0
KSB7CisgICAgICAgIEFTU0VSVCghcmVzdWx0LmVycm9yKCkuaXNFbXB0eSgpKTsKKyAgICAgICAg
bV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hl
cjo6U2VydmVyRXJyb3IsIHJlc3VsdC5lcnJvcigpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGF1dG8gW291dF9jb2x1bW5OYW1lcywgb3V0X25vdGVzLCBvdXRfdGltZXN0YW1wLCBv
dXRfdmFsdWVzLCBvdXRfcGF5bG9hZCwgb3V0X2RhdGFiYXNlSWQsIG91dF9zcWxFcnJvciwgb3V0
X3NjcmVlbkNvbG9yLCBvdXRfYWx0ZXJuYXRlQ29sb3JzLCBvdXRfcHJpbnRDb2xvcl0gPSBXVEZN
b3ZlKHJlc3VsdC52YWx1ZSgpKTsKKworICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBK
U09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRBcnJh
eSgiY29sdW1uTmFtZXMiX3MsIFdURk1vdmUob3V0X2NvbHVtbk5hbWVzKSk7CisgICAgcHJvdG9j
b2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygibm90ZXMiX3MsIG91dF9ub3Rlcyk7CisgICAgcHJv
dG9jb2xfanNvbk1lc3NhZ2UtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCBvdXRfdGltZXN0YW1w
KTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIFdURk1v
dmUob3V0X3ZhbHVlcykpOworICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRWYWx1ZSgicGF5
bG9hZCJfcywgV1RGTW92ZShvdXRfcGF5bG9hZCkpOworICAgIHByb3RvY29sX2pzb25NZXNzYWdl
LT5zZXRJbnRlZ2VyKCJkYXRhYmFzZUlkIl9zLCBvdXRfZGF0YWJhc2VJZCk7CisgICAgcHJvdG9j
b2xfanNvbk1lc3NhZ2UtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIFdURk1vdmUob3V0X3NxbEVy
cm9yKSk7CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygic2NyZWVuQ29sb3Ii
X3MsIFByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUob3V0X3NjcmVl
bkNvbG9yKSk7CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldEFycmF5KCJhbHRlcm5hdGVD
b2xvcnMiX3MsIFdURk1vdmUob3V0X2FsdGVybmF0ZUNvbG9ycykpOworICAgIHByb3RvY29sX2pz
b25NZXNzYWdlLT5zZXRTdHJpbmcoInByaW50Q29sb3IiX3MsIG91dF9wcmludENvbG9yKTsKKyAg
ICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocHJvdG9jb2xfY2FsbElkLCBXVEZN
b3ZlKHByb3RvY29sX2pzb25NZXNzYWdlKSwgZmFsc2UpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBJ
bnNwZWN0b3IKQEAgLTQyNCw2ICszOTcsNyBAQCB2b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNo
ZXI6OmV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhsb25nIHJlcXVlc3RJZCwgUmVmUAogCiAj
aW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVz
Lmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewpAQCAtNDY3LDcgKzQ0MSw2IEBAIGNsYXNz
IEZyb250ZW5kUm91dGVyOwogI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCiAK
ICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKQEAg
LTUwOCw3ICs0ODEsOSBAQCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKICNwcmFnbWEgb25jZQogCiAj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgotI2luY2x1
ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNs
dWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAog
bmFtZXNwYWNlIEluc3BlY3RvciB7CiAKQEAgLTUzMCw3ICs1MDUsNyBAQCBlbnVtIGNsYXNzIFBy
aW1hcnlDb2xvcnM7CiBuYW1lc3BhY2UgRGF0YWJhc2UgewogLyogVW5pcXVlIGlkZW50aWZpZXIg
b2YgRGF0YWJhc2Ugb2JqZWN0LiAqLwogdXNpbmcgRGF0YWJhc2VJZCA9IGludDsKLXVzaW5nIENv
bG9yTGlzdCA9IEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlBy
aW1hcnlDb2xvcnM+OwordXNpbmcgQ29sb3JMaXN0ID0gSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6
RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+OwogfSAvLyBEYXRhYmFzZQogLy8gRW5kIG9mIHR5cGVk
ZWZzLgogCkBAIC01NTQsNyArNTI5LDcgQEAgZW51bSBjbGFzcyBQcmltYXJ5Q29sb3JzIHsKIH07
IC8vIGVudW0gY2xhc3MgUHJpbWFyeUNvbG9ycwogCiAvKiBEYXRhYmFzZSBlcnJvci4gKi8KLWNs
YXNzIEVycm9yIDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgeworY2xhc3MgRXJyb3IgZmluYWwg
OiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7CiBwdWJsaWM6CiAgICAgZW51bSB7CiAgICAgICAg
IE5vRmllbGRzU2V0ID0gMCwKQEAgLTU4MSwxNyArNTU2LDE3IEBAIHB1YmxpYzoKICAgICAgICAg
ZnJpZW5kIGNsYXNzIEVycm9yOwogICAgIHB1YmxpYzoKIAotICAgICAgICBCdWlsZGVyPFNUQVRF
IHwgTWVzc2FnZVNldD4mIHNldE1lc3NhZ2UoY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICAgICAg
QnVpbGRlcjxTVEFURSB8IE1lc3NhZ2VTZXQ+JiBzZXRNZXNzYWdlKGNvbnN0IFN0cmluZyYgaW5f
bWVzc2FnZSkKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAm
IE1lc3NhZ2VTZXQpLCBwcm9wZXJ0eV9tZXNzYWdlX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAg
IG1fcmVzdWx0LT5zZXRTdHJpbmcoIm1lc3NhZ2UiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIG1f
cmVzdWx0LT5zZXRTdHJpbmcoIm1lc3NhZ2UiX3MsIGluX21lc3NhZ2UpOwogICAgICAgICAgICAg
cmV0dXJuIGNhc3RTdGF0ZTxNZXNzYWdlU2V0PigpOwogICAgICAgICB9CiAKLSAgICAgICAgQnVp
bGRlcjxTVEFURSB8IENvZGVTZXQ+JiBzZXRDb2RlKGludCB2YWx1ZSkKKyAgICAgICAgQnVpbGRl
cjxTVEFURSB8IENvZGVTZXQ+JiBzZXRDb2RlKGludCBpbl9jb2RlKQogICAgICAgICB7CiAgICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQ29kZVNldCksIHByb3BlcnR5X2NvZGVf
YWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldEludGVnZXIoImNvZGUiX3Ms
IHZhbHVlKTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRJbnRlZ2VyKCJjb2RlIl9zLCBpbl9j
b2RlKTsKICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Q29kZVNldD4oKTsKICAgICAgICAg
fQogCkBAIC02MzAsNyArNjA1LDcgQEAgT3B0aW9uYWw8UHJvdG9jb2xFbnVtVHlwZT4gcGFyc2VF
bnVtVmFsdWVGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYpOwogCiAvLyBFbnVtcyBpbiB0aGUgJ0Rh
dGFiYXNlJyBEb21haW4KIHRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVj
dG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+KGNvbnN0IFN0cmluZyYpOwor
T3B0aW9uYWw8UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPiBwYXJzZUVudW1WYWx1
ZUZyb21TdHJpbmc8UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPihjb25zdCBTdHJp
bmcmKTsKIAogfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKIApAQCAtNjgyLDggKzY1Nyw3IEBA
IHN0cnVjdCBEZWZhdWx0SGFzaDxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFy
eUNvbG9ycz4gOiBJbnRIYXNoPEluc3BlCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
VGVzdFByb3RvY29sT2JqZWN0cy5oIgogCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5j
bHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAK
IG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC03MDgsMTYgKzY4MiwxNiBAQCBTdHJpbmcgZ2V0
RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpIHsKIC8vIEVudW1zIGluIHRoZSAnRGF0YWJhc2Un
IERvbWFpbgogCiB0ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRh
YmFzZTo6UHJpbWFyeUNvbG9ycz4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPihjb25zdCBTdHJpbmcmIHByb3RvY29s
U3RyaW5nKQorT3B0aW9uYWw8UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPiBwYXJz
ZUVudW1WYWx1ZUZyb21TdHJpbmc8UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPihj
b25zdCBTdHJpbmcmIHByb3RvY29sU3RyaW5nKQogewogICAgIHN0YXRpYyBjb25zdCBzaXplX3Qg
Y29uc3RhbnRWYWx1ZXNbXSA9IHsKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29s
OjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9yczo6UmVkLAotICAgICAgICAoc2l6ZV90KUluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzOjpHcmVlbiwKLSAgICAgICAgKHNp
emVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9yczo6Qmx1ZSwK
KyAgICAgICAgKHNpemVfdClQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM6OlJlZCwK
KyAgICAgICAgKHNpemVfdClQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM6OkdyZWVu
LAorICAgICAgICAoc2l6ZV90KVByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9yczo6Qmx1
ZSwKICAgICB9OwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgMzsgKytpKQogICAgICAgICBp
ZiAocHJvdG9jb2xTdHJpbmcgPT0gZW51bV9jb25zdGFudF92YWx1ZXNbY29uc3RhbnRWYWx1ZXNb
aV1dKQotICAgICAgICAgICAgcmV0dXJuIChJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6
UHJpbWFyeUNvbG9ycyljb25zdGFudFZhbHVlc1tpXTsKKyAgICAgICAgICAgIHJldHVybiAoUHJv
dG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzKWNvbnN0YW50VmFsdWVzW2ldOwogCiAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KQEAgLTc3NCw4ICs3NDgsOCBAQCBjbGFzcyBPYmpDSW5z
cGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBBbHRlcm5hdGVE
YXRhYmFzZUJhYwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIE9i
akNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKGlkPFRlc3RQcm90b2NvbERhdGFi
YXNlRG9tYWluSGFuZGxlcj4gaGFuZGxlcikgeyBtX2RlbGVnYXRlID0gaGFuZGxlcjsgfQotICAg
IHZvaWQgZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhsb25nIHJlcXVlc3RJZCwgY29uc3Qg
SlNPTjo6QXJyYXkqIGluX2NvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcqIGluX25vdGVzLCBjb25z
dCBkb3VibGUqIGluX3RpbWVzdGFtcCwgY29uc3QgSlNPTjo6T2JqZWN0KiBpbl92YWx1ZXMsIGNv
bnN0IEpTT046OlZhbHVlKiBpbl9wYXlsb2FkLCBjb25zdCBpbnQqIGluX2RhdGFiYXNlSWQsIGNv
bnN0IEpTT046Ok9iamVjdCogaW5fc3FsRXJyb3IsIGNvbnN0IFN0cmluZyogaW5fc2NyZWVuQ29s
b3IsIGNvbnN0IEpTT046OkFycmF5KiBpbl9hbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyog
aW5fcHJpbnRDb2xvcikgZmluYWw7Ci0gICAgdm9pZCBleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRl
cnMobG9uZyByZXF1ZXN0SWQsIGNvbnN0IEpTT046OkFycmF5JiBpbl9jb2x1bW5OYW1lcywgY29u
c3QgU3RyaW5nJiBpbl9ub3RlcywgZG91YmxlIGluX3RpbWVzdGFtcCwgY29uc3QgSlNPTjo6T2Jq
ZWN0JiBpbl92YWx1ZXMsIEpTT046OlZhbHVlIGluX3BheWxvYWQsIGludCBpbl9kYXRhYmFzZUlk
LCBjb25zdCBKU09OOjpPYmplY3QmIGluX3NxbEVycm9yLCBjb25zdCBTdHJpbmcmIGluX3NjcmVl
bkNvbG9yLCBjb25zdCBKU09OOjpBcnJheSYgaW5fYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJp
bmcmIGluX3ByaW50Q29sb3IpIGZpbmFsOworICAgIHZvaWQgZXhlY3V0ZUFsbE9wdGlvbmFsUGFy
YW1ldGVycyhsb25nIHByb3RvY29sX2NhbGxJZCwgUmVmUHRyPEpTT046OkFycmF5PiYmIG9wdF9j
b2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBvcHRfbm90ZXMsIE9wdGlvbmFsPGRvdWJsZT4mJiBv
cHRfdGltZXN0YW1wLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIG9wdF92YWx1ZXMsIFJlZlB0cjxK
U09OOjpWYWx1ZT4mJiBvcHRfcGF5bG9hZCwgT3B0aW9uYWw8aW50PiYmIG9wdF9kYXRhYmFzZUlk
LCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIG9wdF9zcWxFcnJvciwgY29uc3QgU3RyaW5nJiBvcHRf
c2NyZWVuQ29sb3IsIFJlZlB0cjxKU09OOjpBcnJheT4mJiBvcHRfYWx0ZXJuYXRlQ29sb3JzLCBj
b25zdCBTdHJpbmcmIG9wdF9wcmludENvbG9yKSBmaW5hbDsKKyAgICB2b2lkIGV4ZWN1dGVOb09w
dGlvbmFsUGFyYW1ldGVycyhsb25nIHByb3RvY29sX2NhbGxJZCwgUmVmPEpTT046OkFycmF5PiYm
IGNvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIG5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBSZWY8
SlNPTjo6T2JqZWN0PiYmIHZhbHVlcywgUmVmPEpTT046OlZhbHVlPiYmIHBheWxvYWQsIGludCBk
YXRhYmFzZUlkLCBSZWY8SlNPTjo6T2JqZWN0PiYmIHNxbEVycm9yLCBjb25zdCBTdHJpbmcmIHNj
cmVlbkNvbG9yLCBSZWY8SlNPTjo6QXJyYXk+JiYgYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJp
bmcmIHByaW50Q29sb3IpIGZpbmFsOwogcHJpdmF0ZToKICAgICBSZXRhaW5QdHI8aWQ8VGVzdFBy
b3RvY29sRGF0YWJhc2VEb21haW5IYW5kbGVyPj4gbV9kZWxlZ2F0ZTsKIH07CkBAIC04MjMsMTM3
ICs3OTcsMTM1IEBAIHByaXZhdGU6CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCi12b2lkIE9i
akNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlQWxsT3B0aW9uYWxQ
YXJhbWV0ZXJzKGxvbmcgcmVxdWVzdElkLCBjb25zdCBKU09OOjpBcnJheSogaW5fY29sdW1uTmFt
ZXMsIGNvbnN0IFN0cmluZyogaW5fbm90ZXMsIGNvbnN0IGRvdWJsZSogaW5fdGltZXN0YW1wLCBj
b25zdCBKU09OOjpPYmplY3QqIGluX3ZhbHVlcywgY29uc3QgSlNPTjo6VmFsdWUqIGluX3BheWxv
YWQsIGNvbnN0IGludCogaW5fZGF0YWJhc2VJZCwgY29uc3QgSlNPTjo6T2JqZWN0KiBpbl9zcWxF
cnJvciwgY29uc3QgU3RyaW5nKiBpbl9zY3JlZW5Db2xvciwgY29uc3QgSlNPTjo6QXJyYXkqIGlu
X2FsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nKiBpbl9wcmludENvbG9yKQordm9pZCBPYmpD
SW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZUFsbE9wdGlvbmFsUGFy
YW1ldGVycyhsb25nIHByb3RvY29sX2NhbGxJZCwgUmVmUHRyPEpTT046OkFycmF5PiYmIGluX29w
dF9jb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBpbl9vcHRfbm90ZXMsIE9wdGlvbmFsPGRvdWJs
ZT4mJiBpbl9vcHRfdGltZXN0YW1wLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIGluX29wdF92YWx1
ZXMsIFJlZlB0cjxKU09OOjpWYWx1ZT4mJiBpbl9vcHRfcGF5bG9hZCwgT3B0aW9uYWw8aW50PiYm
IGluX29wdF9kYXRhYmFzZUlkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIGluX29wdF9zcWxFcnJv
ciwgY29uc3QgU3RyaW5nJiBpbl9vcHRfc2NyZWVuQ29sb3IsIFJlZlB0cjxKU09OOjpBcnJheT4m
JiBpbl9vcHRfYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcmIGluX29wdF9wcmludENvbG9y
KQogewogICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihl
eGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxi
YWNrOmNvbHVtbk5hbWVzOm5vdGVzOnRpbWVzdGFtcDp2YWx1ZXM6cGF5bG9hZDpkYXRhYmFzZUlk
OnNxbEVycm9yOnNjcmVlbkNvbG9yOmFsdGVybmF0ZUNvbG9yczpwcmludENvbG9yOildKSB7Ci0g
ICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElk
LCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRGF0YWJhc2UuZXhlY3V0ZUFs
bE9wdGlvbmFsUGFyYW1ldGVycycgd2FzIG5vdCBmb3VuZCJfcyk7CisgICAgICAgIGJhY2tlbmRE
aXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocHJvdG9jb2xfY2FsbElkLCBCYWNrZW5k
RGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRGF0YWJhc2UuZXhlY3V0ZUFsbE9wdGlvbmFs
UGFyYW1ldGVycycgd2FzIG5vdCBmb3VuZCJfcyk7CiAgICAgICAgIGJhY2tlbmREaXNwYXRjaGVy
KCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBp
ZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRj
aGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5y
ZXBvcnRQcm90b2NvbEVycm9yKHByb3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNl
cnZlckVycm9yLCBlcnJvcik7CiAgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5k
aW5nRXJyb3JzKCk7CiAgICAgfTsKIAotICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF4oTlNBcnJh
eS8qPE5TU3RyaW5nPiovICoqY29sdW1uTmFtZXMsIE5TU3RyaW5nICoqbm90ZXMsIGRvdWJsZSAq
dGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKip2YWx1ZXMsIFJXSVByb3RvY29sSlNP
Tk9iamVjdCAqKnBheWxvYWQsIGludCAqZGF0YWJhc2VJZCwgVGVzdFByb3RvY29sRGF0YWJhc2VF
cnJvciAqKnNxbEVycm9yLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgKnNjcmVl
bkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiphbHRlcm5hdGVDb2xvcnMsIFRlc3RQcm90
b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3IgKnByaW50
Q29sb3IpIHsKLSAgICAgICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0T2JqZWN0ID0gSlNPTjo6
T2JqZWN0OjpjcmVhdGUoKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9O
QUxfUEFSQU1FVEVSKGNvbHVtbk5hbWVzLCBAImNvbHVtbk5hbWVzIik7Ci0gICAgICAgIFRIUk9X
X0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihub3RlcywgQCJub3RlcyIpOwot
ICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIodmFsdWVz
LCBAInZhbHVlcyIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9Q
QVJBTUVURVIocGF5bG9hZCwgQCJwYXlsb2FkIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9G
T1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihzcWxFcnJvciwgQCJzcWxFcnJvciIpOwotICAgICAg
ICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIoYWx0ZXJuYXRlQ29s
b3JzLCBAImFsdGVybmF0ZUNvbG9ycyIpOwotICAgICAgICBpZiAoY29sdW1uTmFtZXMpCi0gICAg
ICAgICAgICByZXN1bHRPYmplY3QtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgdG9KU09OU3Ry
aW5nQXJyYXkoKmNvbHVtbk5hbWVzKSk7Ci0gICAgICAgIGlmIChub3RlcykKLSAgICAgICAgICAg
IHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKCJub3RlcyJfcywgKm5vdGVzKTsKLSAgICAgICAgaWYg
KHRpbWVzdGFtcCkKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0RG91YmxlKCJ0aW1lc3Rh
bXAiX3MsICp0aW1lc3RhbXApOwotICAgICAgICBpZiAodmFsdWVzKQotICAgICAgICAgICAgcmVz
dWx0T2JqZWN0LT5zZXRPYmplY3QoInZhbHVlcyJfcywgWyp2YWx1ZXMgdG9KU09OT2JqZWN0XSk7
Ci0gICAgICAgIGlmIChwYXlsb2FkKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRWYWx1
ZSgicGF5bG9hZCJfcywgWypwYXlsb2FkIHRvSlNPTk9iamVjdF0pOwotICAgICAgICBpZiAoZGF0
YWJhc2VJZCkKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0SW50ZWdlcigiZGF0YWJhc2VJ
ZCJfcywgKmRhdGFiYXNlSWQpOwotICAgICAgICBpZiAoc3FsRXJyb3IpCi0gICAgICAgICAgICBy
ZXN1bHRPYmplY3QtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIFsqc3FsRXJyb3IgdG9KU09OT2Jq
ZWN0XSk7Ci0gICAgICAgIGlmIChzY3JlZW5Db2xvcikKLSAgICAgICAgICAgIHJlc3VsdE9iamVj
dC0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgdG9Qcm90b2NvbFN0cmluZygqc2NyZWVuQ29s
b3IpKTsKLSAgICAgICAgaWYgKGFsdGVybmF0ZUNvbG9ycykKLSAgICAgICAgICAgIHJlc3VsdE9i
amVjdC0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywgdG9KU09OU3RyaW5nQXJyYXkoKmFs
dGVybmF0ZUNvbG9ycykpOwotICAgICAgICBpZiAocHJpbnRDb2xvcikKLSAgICAgICAgICAgIHJl
c3VsdE9iamVjdC0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCB0b1Byb3RvY29sU3RyaW5nKCpw
cmludENvbG9yKSk7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShy
ZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0T2JqZWN0KSwgZmFsc2UpOworICAgIGlkIHN1Y2Nlc3ND
YWxsYmFjayA9IF4oTlNBcnJheS8qPE5TU3RyaW5nPiovICoqb3V0X29wdF9jb2x1bW5OYW1lcywg
TlNTdHJpbmcgKipvdXRfb3B0X25vdGVzLCBkb3VibGUgKm91dF9vcHRfdGltZXN0YW1wLCBSV0lQ
cm90b2NvbEpTT05PYmplY3QgKipvdXRfb3B0X3ZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0
ICoqb3V0X29wdF9wYXlsb2FkLCBpbnQgKm91dF9vcHRfZGF0YWJhc2VJZCwgVGVzdFByb3RvY29s
RGF0YWJhc2VFcnJvciAqKm91dF9vcHRfc3FsRXJyb3IsIFRlc3RQcm90b2NvbERhdGFiYXNlUHJp
bWFyeUNvbG9ycyAqb3V0X29wdF9zY3JlZW5Db2xvciwgTlNBcnJheS8qPE5TU3RyaW5nPiovICoq
b3V0X29wdF9hbHRlcm5hdGVDb2xvcnMsIFRlc3RQcm90b2NvbERhdGFiYXNlKGFub255bW91cykg
Km91dF9vcHRfcHJpbnRDb2xvcikgeworICAgICAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdl
ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9C
QURfT1BUSU9OQUxfUEFSQU1FVEVSKG91dF9vcHRfY29sdW1uTmFtZXMsIEAiY29sdW1uTmFtZXMi
KTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKG91
dF9vcHRfbm90ZXMsIEAibm90ZXMiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURf
T1BUSU9OQUxfUEFSQU1FVEVSKG91dF9vcHRfdmFsdWVzLCBAInZhbHVlcyIpOworICAgICAgICBU
SFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIob3V0X29wdF9wYXlsb2Fk
LCBAInBheWxvYWQiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxf
UEFSQU1FVEVSKG91dF9vcHRfc3FsRXJyb3IsIEAic3FsRXJyb3IiKTsKKyAgICAgICAgVEhST1df
RVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKG91dF9vcHRfYWx0ZXJuYXRlQ29s
b3JzLCBAImFsdGVybmF0ZUNvbG9ycyIpOworICAgICAgICBpZiAoISFvdXRfb3B0X2NvbHVtbk5h
bWVzKQorICAgICAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldEFycmF5KCJjb2x1bW5O
YW1lcyJfcywgdG9KU09OU3RyaW5nQXJyYXkoKm91dF9vcHRfY29sdW1uTmFtZXMpKTsKKyAgICAg
ICAgaWYgKCEhb3V0X29wdF9ub3RlcykKKyAgICAgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdl
LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCAqb3V0X29wdF9ub3Rlcyk7CisgICAgICAgIGlmICghIW91
dF9vcHRfdGltZXN0YW1wKQorICAgICAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldERv
dWJsZSgidGltZXN0YW1wIl9zLCAqb3V0X29wdF90aW1lc3RhbXApOworICAgICAgICBpZiAoISFv
dXRfb3B0X3ZhbHVlcykKKyAgICAgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRPYmpl
Y3QoInZhbHVlcyJfcywgWypvdXRfb3B0X3ZhbHVlcyB0b0pTT05PYmplY3RdKTsKKyAgICAgICAg
aWYgKCEhb3V0X29wdF9wYXlsb2FkKQorICAgICAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2Ut
PnNldFZhbHVlKCJwYXlsb2FkIl9zLCBbKm91dF9vcHRfcGF5bG9hZCB0b0pTT05PYmplY3RdKTsK
KyAgICAgICAgaWYgKCEhb3V0X29wdF9kYXRhYmFzZUlkKQorICAgICAgICAgICAgcHJvdG9jb2xf
anNvbk1lc3NhZ2UtPnNldEludGVnZXIoImRhdGFiYXNlSWQiX3MsICpvdXRfb3B0X2RhdGFiYXNl
SWQpOworICAgICAgICBpZiAoISFvdXRfb3B0X3NxbEVycm9yKQorICAgICAgICAgICAgcHJvdG9j
b2xfanNvbk1lc3NhZ2UtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIFsqb3V0X29wdF9zcWxFcnJv
ciB0b0pTT05PYmplY3RdKTsKKyAgICAgICAgaWYgKCEhb3V0X29wdF9zY3JlZW5Db2xvcikKKyAg
ICAgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9z
LCB0b1Byb3RvY29sU3RyaW5nKCpvdXRfb3B0X3NjcmVlbkNvbG9yKSk7CisgICAgICAgIGlmICgh
IW91dF9vcHRfYWx0ZXJuYXRlQ29sb3JzKQorICAgICAgICAgICAgcHJvdG9jb2xfanNvbk1lc3Nh
Z2UtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KCpvdXRf
b3B0X2FsdGVybmF0ZUNvbG9ycykpOworICAgICAgICBpZiAoISFvdXRfb3B0X3ByaW50Q29sb3Ip
CisgICAgICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJwcmludENvbG9y
Il9zLCB0b1Byb3RvY29sU3RyaW5nKCpvdXRfb3B0X3ByaW50Q29sb3IpKTsKKyAgICAgICAgYmFj
a2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShw
cm90b2NvbF9qc29uTWVzc2FnZSksIGZhbHNlKTsKICAgICB9OwogCi0gICAgTlNBcnJheS8qPE5T
U3RyaW5nPiovICpvX2luX2NvbHVtbk5hbWVzOwotICAgIGlmIChpbl9jb2x1bW5OYW1lcykKLSAg
ICAgICAgb19pbl9jb2x1bW5OYW1lcyA9IHRvT2JqQ1N0cmluZ0FycmF5KGluX2NvbHVtbk5hbWVz
KTsKLSAgICBOU1N0cmluZyAqb19pbl9ub3RlczsKLSAgICBpZiAoaW5fbm90ZXMpCi0gICAgICAg
IG9faW5fbm90ZXMgPSAqaW5fbm90ZXM7Ci0gICAgZG91YmxlIG9faW5fdGltZXN0YW1wOwotICAg
IGlmIChpbl90aW1lc3RhbXApCi0gICAgICAgIG9faW5fdGltZXN0YW1wID0gKmluX3RpbWVzdGFt
cDsKLSAgICBSV0lQcm90b2NvbEpTT05PYmplY3QgKm9faW5fdmFsdWVzOwotICAgIGlmIChpbl92
YWx1ZXMpCi0gICAgICAgIG9faW5fdmFsdWVzID0gW1tbUldJUHJvdG9jb2xKU09OT2JqZWN0IGFs
bG9jXSBpbml0V2l0aEpTT05PYmplY3Q6aW5fdmFsdWVzXSBhdXRvcmVsZWFzZV07Ci0gICAgUldJ
UHJvdG9jb2xKU09OT2JqZWN0ICpvX2luX3BheWxvYWQ7Ci0gICAgaWYgKGluX3BheWxvYWQpCi0g
ICAgICAgIG9faW5fcGF5bG9hZCA9IFtbW1JXSVByb3RvY29sSlNPTk9iamVjdCBhbGxvY10gaW5p
dFdpdGhKU09OT2JqZWN0OmluX3BheWxvYWRdIGF1dG9yZWxlYXNlXTsKLSAgICBpbnQgb19pbl9k
YXRhYmFzZUlkOwotICAgIGlmIChpbl9kYXRhYmFzZUlkKQotICAgICAgICBvX2luX2RhdGFiYXNl
SWQgPSAqaW5fZGF0YWJhc2VJZDsKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICpvX2lu
X3NxbEVycm9yOwotICAgIGlmIChpbl9zcWxFcnJvcikKLSAgICAgICAgb19pbl9zcWxFcnJvciA9
IFtbW1Rlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgYWxsb2NdIGluaXRXaXRoSlNPTk9iamVjdDpp
bl9zcWxFcnJvcl0gYXV0b3JlbGVhc2VdOwotICAgIE9wdGlvbmFsPFRlc3RQcm90b2NvbERhdGFi
YXNlUHJpbWFyeUNvbG9ycz4gb19pbl9zY3JlZW5Db2xvcjsKLSAgICBpZiAoaW5fc2NyZWVuQ29s
b3IpCi0gICAgICAgIG9faW5fc2NyZWVuQ29sb3IgPSBmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFBy
b3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzPigqaW5fc2NyZWVuQ29sb3IpOwotICAgIE5TQXJy
YXkvKjxOU1N0cmluZz4qLyAqb19pbl9hbHRlcm5hdGVDb2xvcnM7Ci0gICAgaWYgKGluX2FsdGVy
bmF0ZUNvbG9ycykKLSAgICAgICAgb19pbl9hbHRlcm5hdGVDb2xvcnMgPSB0b09iakNTdHJpbmdB
cnJheShpbl9hbHRlcm5hdGVDb2xvcnMpOwotICAgIE9wdGlvbmFsPFRlc3RQcm90b2NvbERhdGFi
YXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3I+IG9faW5fcHJpbnRDb2xv
cjsKLSAgICBpZiAoaW5fcHJpbnRDb2xvcikKLSAgICAgICAgb19pbl9wcmludENvbG9yID0gZnJv
bVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFy
YW1ldGVyc1ByaW50Q29sb3I+KCppbl9wcmludENvbG9yKTsKLQotICAgIFttX2RlbGVnYXRlIGV4
ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNr
IHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2sgY29sdW1uTmFtZXM6KGluX2NvbHVtbk5h
bWVzID8gJm9faW5fY29sdW1uTmFtZXMgOiBuaWwpIG5vdGVzOihpbl9ub3RlcyA/ICZvX2luX25v
dGVzIDogbmlsKSB0aW1lc3RhbXA6KGluX3RpbWVzdGFtcCA/ICZvX2luX3RpbWVzdGFtcCA6IG5p
bCkgdmFsdWVzOihpbl92YWx1ZXMgPyAmb19pbl92YWx1ZXMgOiBuaWwpIHBheWxvYWQ6KGluX3Bh
eWxvYWQgPyAmb19pbl9wYXlsb2FkIDogbmlsKSBkYXRhYmFzZUlkOihpbl9kYXRhYmFzZUlkID8g
Jm9faW5fZGF0YWJhc2VJZCA6IG5pbCkgc3FsRXJyb3I6KGluX3NxbEVycm9yID8gJm9faW5fc3Fs
RXJyb3IgOiBuaWwpIHNjcmVlbkNvbG9yOihpbl9zY3JlZW5Db2xvciA/ICZvX2luX3NjcmVlbkNv
bG9yLnZhbHVlKCkgOiBuaWwpIGFsdGVybmF0ZUNvbG9yczooaW5fYWx0ZXJuYXRlQ29sb3JzID8g
Jm9faW5fYWx0ZXJuYXRlQ29sb3JzIDogbmlsKSBwcmludENvbG9yOihpbl9wcmludENvbG9yID8g
Jm9faW5fcHJpbnRDb2xvci52YWx1ZSgpIDogbmlsKV07CisgICAgTlNBcnJheS8qPE5TU3RyaW5n
PiovICpvX2luX29wdF9jb2x1bW5OYW1lczsKKyAgICBpZiAoISFpbl9vcHRfY29sdW1uTmFtZXMp
CisgICAgICAgIG9faW5fb3B0X2NvbHVtbk5hbWVzID0gdG9PYmpDU3RyaW5nQXJyYXkoaW5fb3B0
X2NvbHVtbk5hbWVzLnJlbGVhc2VOb25OdWxsKCkpOworICAgIE5TU3RyaW5nICpvX2luX29wdF9u
b3RlczsKKyAgICBpZiAoISFpbl9vcHRfbm90ZXMpCisgICAgICAgIG9faW5fb3B0X25vdGVzID0g
aW5fb3B0X25vdGVzOworICAgIGRvdWJsZSBvX2luX29wdF90aW1lc3RhbXA7CisgICAgaWYgKCEh
aW5fb3B0X3RpbWVzdGFtcCkKKyAgICAgICAgb19pbl9vcHRfdGltZXN0YW1wID0gKmluX29wdF90
aW1lc3RhbXA7CisgICAgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpvX2luX29wdF92YWx1ZXM7Cisg
ICAgaWYgKCEhaW5fb3B0X3ZhbHVlcykKKyAgICAgICAgb19pbl9vcHRfdmFsdWVzID0gW1tbUldJ
UHJvdG9jb2xKU09OT2JqZWN0IGFsbG9jXSBpbml0V2l0aEpTT05PYmplY3Q6aW5fb3B0X3ZhbHVl
cy5yZWxlYXNlTm9uTnVsbCgpXSBhdXRvcmVsZWFzZV07CisgICAgUldJUHJvdG9jb2xKU09OT2Jq
ZWN0ICpvX2luX29wdF9wYXlsb2FkOworICAgIGlmICghIWluX29wdF9wYXlsb2FkKQorICAgICAg
ICBvX2luX29wdF9wYXlsb2FkID0gW1tbUldJUHJvdG9jb2xKU09OT2JqZWN0IGFsbG9jXSBpbml0
V2l0aEpTT05PYmplY3Q6aW5fb3B0X3BheWxvYWQucmVsZWFzZU5vbk51bGwoKV0gYXV0b3JlbGVh
c2VdOworICAgIGludCBvX2luX29wdF9kYXRhYmFzZUlkOworICAgIGlmICghIWluX29wdF9kYXRh
YmFzZUlkKQorICAgICAgICBvX2luX29wdF9kYXRhYmFzZUlkID0gKmluX29wdF9kYXRhYmFzZUlk
OworICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKm9faW5fb3B0X3NxbEVycm9yOworICAg
IGlmICghIWluX29wdF9zcWxFcnJvcikKKyAgICAgICAgb19pbl9vcHRfc3FsRXJyb3IgPSBbW1tU
ZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yIGFsbG9jXSBpbml0V2l0aEpTT05PYmplY3Q6aW5fb3B0
X3NxbEVycm9yLnJlbGVhc2VOb25OdWxsKCldIGF1dG9yZWxlYXNlXTsKKyAgICBPcHRpb25hbDxU
ZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnM+IG9faW5fb3B0X3NjcmVlbkNvbG9yOwor
ICAgIGlmICghIWluX29wdF9zY3JlZW5Db2xvcikKKyAgICAgICAgb19pbl9vcHRfc2NyZWVuQ29s
b3IgPSBmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3Jz
Pihpbl9vcHRfc2NyZWVuQ29sb3IpOworICAgIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqb19pbl9v
cHRfYWx0ZXJuYXRlQ29sb3JzOworICAgIGlmICghIWluX29wdF9hbHRlcm5hdGVDb2xvcnMpCisg
ICAgICAgIG9faW5fb3B0X2FsdGVybmF0ZUNvbG9ycyA9IHRvT2JqQ1N0cmluZ0FycmF5KGluX29w
dF9hbHRlcm5hdGVDb2xvcnMucmVsZWFzZU5vbk51bGwoKSk7CisgICAgT3B0aW9uYWw8VGVzdFBy
b3RvY29sRGF0YWJhc2UoYW5vbnltb3VzKT4gb19pbl9vcHRfcHJpbnRDb2xvcjsKKyAgICBpZiAo
ISFpbl9vcHRfcHJpbnRDb2xvcikKKyAgICAgICAgb19pbl9vcHRfcHJpbnRDb2xvciA9IGZyb21Q
cm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xEYXRhYmFzZShhbm9ueW1vdXMpPihpbl9vcHRfcHJp
bnRDb2xvcik7CisgICAgW21fZGVsZWdhdGUgZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1dp
dGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxs
YmFjayBjb2x1bW5OYW1lczooISFpbl9vcHRfY29sdW1uTmFtZXMgPyAmb19pbl9vcHRfY29sdW1u
TmFtZXMgOiBuaWwpIG5vdGVzOighIWluX29wdF9ub3RlcyA/ICZvX2luX29wdF9ub3RlcyA6IG5p
bCkgdGltZXN0YW1wOighIWluX29wdF90aW1lc3RhbXAgPyAmb19pbl9vcHRfdGltZXN0YW1wIDog
bmlsKSB2YWx1ZXM6KCEhaW5fb3B0X3ZhbHVlcyA/ICZvX2luX29wdF92YWx1ZXMgOiBuaWwpIHBh
eWxvYWQ6KCEhaW5fb3B0X3BheWxvYWQgPyAmb19pbl9vcHRfcGF5bG9hZCA6IG5pbCkgZGF0YWJh
c2VJZDooISFpbl9vcHRfZGF0YWJhc2VJZCA/ICZvX2luX29wdF9kYXRhYmFzZUlkIDogbmlsKSBz
cWxFcnJvcjooISFpbl9vcHRfc3FsRXJyb3IgPyAmb19pbl9vcHRfc3FsRXJyb3IgOiBuaWwpIHNj
cmVlbkNvbG9yOighIWluX29wdF9zY3JlZW5Db2xvciA/ICZvX2luX29wdF9zY3JlZW5Db2xvci52
YWx1ZSgpIDogbmlsKSBhbHRlcm5hdGVDb2xvcnM6KCEhaW5fb3B0X2FsdGVybmF0ZUNvbG9ycyA/
ICZvX2luX29wdF9hbHRlcm5hdGVDb2xvcnMgOiBuaWwpIHByaW50Q29sb3I6KCEhaW5fb3B0X3By
aW50Q29sb3IgPyAmb19pbl9vcHRfcHJpbnRDb2xvci52YWx1ZSgpIDogbmlsKV07CiB9CiAKLXZv
aWQgT2JqQ0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVOb09wdGlv
bmFsUGFyYW1ldGVycyhsb25nIHJlcXVlc3RJZCwgY29uc3QgSlNPTjo6QXJyYXkmIGluX2NvbHVt
bk5hbWVzLCBjb25zdCBTdHJpbmcmIGluX25vdGVzLCBkb3VibGUgaW5fdGltZXN0YW1wLCBjb25z
dCBKU09OOjpPYmplY3QmIGluX3ZhbHVlcywgSlNPTjo6VmFsdWUgaW5fcGF5bG9hZCwgaW50IGlu
X2RhdGFiYXNlSWQsIGNvbnN0IEpTT046Ok9iamVjdCYgaW5fc3FsRXJyb3IsIGNvbnN0IFN0cmlu
ZyYgaW5fc2NyZWVuQ29sb3IsIGNvbnN0IEpTT046OkFycmF5JiBpbl9hbHRlcm5hdGVDb2xvcnMs
IGNvbnN0IFN0cmluZyYgaW5fcHJpbnRDb2xvcikKK3ZvaWQgT2JqQ0luc3BlY3RvckRhdGFiYXNl
QmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhsb25nIHByb3Rv
Y29sX2NhbGxJZCwgUmVmPEpTT046OkFycmF5PiYmIGluX2NvbHVtbk5hbWVzLCBjb25zdCBTdHJp
bmcmIGluX25vdGVzLCBkb3VibGUgaW5fdGltZXN0YW1wLCBSZWY8SlNPTjo6T2JqZWN0PiYmIGlu
X3ZhbHVlcywgUmVmPEpTT046OlZhbHVlPiYmIGluX3BheWxvYWQsIGludCBpbl9kYXRhYmFzZUlk
LCBSZWY8SlNPTjo6T2JqZWN0PiYmIGluX3NxbEVycm9yLCBjb25zdCBTdHJpbmcmIGluX3NjcmVl
bkNvbG9yLCBSZWY8SlNPTjo6QXJyYXk+JiYgaW5fYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJp
bmcmIGluX3ByaW50Q29sb3IpCiB7CiAgICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25kc1RvU2Vs
ZWN0b3I6QHNlbGVjdG9yKGV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1dpdGhFcnJvckNhbGxi
YWNrOnN1Y2Nlc3NDYWxsYmFjazpjb2x1bW5OYW1lczpub3Rlczp0aW1lc3RhbXA6dmFsdWVzOnBh
eWxvYWQ6ZGF0YWJhc2VJZDpzcWxFcnJvcjpzY3JlZW5Db2xvcjphbHRlcm5hdGVDb2xvcnM6cHJp
bnRDb2xvcjopXSkgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2Nv
bEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0Rh
dGFiYXNlLmV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycycgd2FzIG5vdCBmb3VuZCJfcyk7Cisg
ICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocHJvdG9jb2xf
Y2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRGF0YWJhc2UuZXhl
Y3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzJyB3YXMgbm90IGZvdW5kIl9zKTsKICAgICAgICAgYmFj
a2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAogICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgewotICAg
ICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwg
QmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CisgICAgICAgIGJhY2tlbmRE
aXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocHJvdG9jb2xfY2FsbElkLCBCYWNrZW5k
RGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKICAgICAgICAgYmFja2VuZERpc3BhdGNo
ZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKICAgICB9OwogCi0gICAgaWQgc3VjY2Vzc0NhbGxi
YWNrID0gXihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmNvbHVtbk5hbWVzLCBOU1N0cmluZyAqbm90
ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqdmFsdWVzLCBSV0lQ
cm90b2NvbEpTT05PYmplY3QgKnBheWxvYWQsIGludCBkYXRhYmFzZUlkLCBUZXN0UHJvdG9jb2xE
YXRhYmFzZUVycm9yICpzcWxFcnJvciwgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3Jz
IHNjcmVlbkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmFsdGVybmF0ZUNvbG9ycywgVGVz
dFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yIHBy
aW50Q29sb3IpIHsKLSAgICAgICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0T2JqZWN0ID0gSlNP
Tjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJF
RF9QQVJBTUVURVIoY29sdW1uTmFtZXMsIEAiY29sdW1uTmFtZXMiKTsKLSAgICAgICAgVEhST1df
RVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIobm90ZXMsIEAibm90ZXMiKTsKLSAgICAg
ICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIodmFsdWVzLCBAInZhbHVl
cyIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihwYXls
b2FkLCBAInBheWxvYWQiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9Q
QVJBTUVURVIoc3FsRXJyb3IsIEAic3FsRXJyb3IiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9O
X0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoYWx0ZXJuYXRlQ29sb3JzLCBAImFsdGVybmF0ZUNvbG9y
cyIpOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgdG9K
U09OU3RyaW5nQXJyYXkoY29sdW1uTmFtZXMpKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRT
dHJpbmcoIm5vdGVzIl9zLCBub3Rlcyk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0RG91Ymxl
KCJ0aW1lc3RhbXAiX3MsIHRpbWVzdGFtcCk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0T2Jq
ZWN0KCJ2YWx1ZXMiX3MsIFt2YWx1ZXMgdG9KU09OT2JqZWN0XSk7Ci0gICAgICAgIHJlc3VsdE9i
amVjdC0+c2V0VmFsdWUoInBheWxvYWQiX3MsIFtwYXlsb2FkIHRvSlNPTk9iamVjdF0pOwotICAg
ICAgICByZXN1bHRPYmplY3QtPnNldEludGVnZXIoImRhdGFiYXNlSWQiX3MsIGRhdGFiYXNlSWQp
OwotICAgICAgICByZXN1bHRPYmplY3QtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIFtzcWxFcnJv
ciB0b0pTT05PYmplY3RdKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoInNjcmVl
bkNvbG9yIl9zLCB0b1Byb3RvY29sU3RyaW5nKHNjcmVlbkNvbG9yKSk7Ci0gICAgICAgIHJlc3Vs
dE9iamVjdC0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywgdG9KU09OU3RyaW5nQXJyYXko
YWx0ZXJuYXRlQ29sb3JzKSk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKCJwcmlu
dENvbG9yIl9zLCB0b1Byb3RvY29sU3RyaW5nKHByaW50Q29sb3IpKTsKLSAgICAgICAgYmFja2Vu
ZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHRPYmpl
Y3QpLCBmYWxzZSk7CisgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXihOU0FycmF5Lyo8TlNTdHJp
bmc+Ki8gKm91dF9jb2x1bW5OYW1lcywgTlNTdHJpbmcgKm91dF9ub3RlcywgZG91YmxlIG91dF90
aW1lc3RhbXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqb3V0X3ZhbHVlcywgUldJUHJvdG9jb2xK
U09OT2JqZWN0ICpvdXRfcGF5bG9hZCwgaW50IG91dF9kYXRhYmFzZUlkLCBUZXN0UHJvdG9jb2xE
YXRhYmFzZUVycm9yICpvdXRfc3FsRXJyb3IsIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNv
bG9ycyBvdXRfc2NyZWVuQ29sb3IsIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqb3V0X2FsdGVybmF0
ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0YWJhc2UoYW5vbnltb3VzKSBvdXRfcHJpbnRDb2xvcikg
eworICAgICAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVh
dGUoKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIob3V0
X2NvbHVtbk5hbWVzLCBAImNvbHVtbk5hbWVzIik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9G
T1JfUkVRVUlSRURfUEFSQU1FVEVSKG91dF9ub3RlcywgQCJub3RlcyIpOworICAgICAgICBUSFJP
V19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihvdXRfdmFsdWVzLCBAInZhbHVlcyIp
OworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihvdXRfcGF5
bG9hZCwgQCJwYXlsb2FkIik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURf
UEFSQU1FVEVSKG91dF9zcWxFcnJvciwgQCJzcWxFcnJvciIpOworICAgICAgICBUSFJPV19FWENF
UFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihvdXRfYWx0ZXJuYXRlQ29sb3JzLCBAImFsdGVy
bmF0ZUNvbG9ycyIpOworICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0QXJyYXkoImNv
bHVtbk5hbWVzIl9zLCB0b0pTT05TdHJpbmdBcnJheShvdXRfY29sdW1uTmFtZXMpKTsKKyAgICAg
ICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygibm90ZXMiX3MsIG91dF9ub3Rlcyk7
CisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywg
b3V0X3RpbWVzdGFtcCk7CisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRPYmplY3Qo
InZhbHVlcyJfcywgW291dF92YWx1ZXMgdG9KU09OT2JqZWN0XSk7CisgICAgICAgIHByb3RvY29s
X2pzb25NZXNzYWdlLT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgW291dF9wYXlsb2FkIHRvSlNPTk9i
amVjdF0pOworICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0SW50ZWdlcigiZGF0YWJh
c2VJZCJfcywgb3V0X2RhdGFiYXNlSWQpOworICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+
c2V0T2JqZWN0KCJzcWxFcnJvciJfcywgW291dF9zcWxFcnJvciB0b0pTT05PYmplY3RdKTsKKyAg
ICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygic2NyZWVuQ29sb3IiX3MsIHRv
UHJvdG9jb2xTdHJpbmcob3V0X3NjcmVlbkNvbG9yKSk7CisgICAgICAgIHByb3RvY29sX2pzb25N
ZXNzYWdlLT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCB0b0pTT05TdHJpbmdBcnJheShv
dXRfYWx0ZXJuYXRlQ29sb3JzKSk7CisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRT
dHJpbmcoInByaW50Q29sb3IiX3MsIHRvUHJvdG9jb2xTdHJpbmcob3V0X3ByaW50Q29sb3IpKTsK
KyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHByb3RvY29sX2NhbGxJ
ZCwgV1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSksIGZhbHNlKTsKICAgICB9OwogCi0gICAg
TlNBcnJheS8qPE5TU3RyaW5nPiovICpvX2luX2NvbHVtbk5hbWVzID0gdG9PYmpDU3RyaW5nQXJy
YXkoJmluX2NvbHVtbk5hbWVzKTsKKyAgICBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKm9faW5fY29s
dW1uTmFtZXMgPSB0b09iakNTdHJpbmdBcnJheShXVEZNb3ZlKGluX2NvbHVtbk5hbWVzKSk7CiAg
ICAgTlNTdHJpbmcgKm9faW5fbm90ZXMgPSBpbl9ub3RlczsKICAgICBkb3VibGUgb19pbl90aW1l
c3RhbXAgPSBpbl90aW1lc3RhbXA7Ci0gICAgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpvX2luX3Zh
bHVlcyA9IFtbW1JXSVByb3RvY29sSlNPTk9iamVjdCBhbGxvY10gaW5pdFdpdGhKU09OT2JqZWN0
OiZpbl92YWx1ZXNdIGF1dG9yZWxlYXNlXTsKLSAgICBSV0lQcm90b2NvbEpTT05PYmplY3QgKm9f
aW5fcGF5bG9hZCA9IFtbW1JXSVByb3RvY29sSlNPTk9iamVjdCBhbGxvY10gaW5pdFdpdGhKU09O
T2JqZWN0OiZpbl9wYXlsb2FkXSBhdXRvcmVsZWFzZV07CisgICAgUldJUHJvdG9jb2xKU09OT2Jq
ZWN0ICpvX2luX3ZhbHVlcyA9IFtbW1JXSVByb3RvY29sSlNPTk9iamVjdCBhbGxvY10gaW5pdFdp
dGhKU09OT2JqZWN0OldURk1vdmUoaW5fdmFsdWVzKV0gYXV0b3JlbGVhc2VdOworICAgIFJXSVBy
b3RvY29sSlNPTk9iamVjdCAqb19pbl9wYXlsb2FkID0gW1tbUldJUHJvdG9jb2xKU09OT2JqZWN0
IGFsbG9jXSBpbml0V2l0aEpTT05PYmplY3Q6V1RGTW92ZShpbl9wYXlsb2FkKV0gYXV0b3JlbGVh
c2VdOwogICAgIGludCBvX2luX2RhdGFiYXNlSWQgPSBpbl9kYXRhYmFzZUlkOwotICAgIFRlc3RQ
cm90b2NvbERhdGFiYXNlRXJyb3IgKm9faW5fc3FsRXJyb3IgPSBbW1tUZXN0UHJvdG9jb2xEYXRh
YmFzZUVycm9yIGFsbG9jXSBpbml0V2l0aEpTT05PYmplY3Q6JmluX3NxbEVycm9yXSBhdXRvcmVs
ZWFzZV07CisgICAgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqb19pbl9zcWxFcnJvciA9IFtb
W1Rlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgYWxsb2NdIGluaXRXaXRoSlNPTk9iamVjdDpXVEZN
b3ZlKGluX3NxbEVycm9yKV0gYXV0b3JlbGVhc2VdOwogICAgIE9wdGlvbmFsPFRlc3RQcm90b2Nv
bERhdGFiYXNlUHJpbWFyeUNvbG9ycz4gb19pbl9zY3JlZW5Db2xvciA9IGZyb21Qcm90b2NvbFN0
cmluZzxUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnM+KGluX3NjcmVlbkNvbG9yKTsK
ICAgICBpZiAoIW9faW5fc2NyZWVuQ29sb3IpIHsKICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIo
KS0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFtcywg
IlBhcmFtZXRlciAnc2NyZWVuQ29sb3InIG9mIG1ldGhvZCAnRGF0YWJhc2UuZXhlY3V0ZU5vT3B0
aW9uYWxQYXJhbWV0ZXJzJyBjYW5ub3QgYmUgcHJvY2Vzc2VkIl9zKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KLSAgICBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKm9faW5fYWx0ZXJuYXRlQ29sb3Jz
ID0gdG9PYmpDU3RyaW5nQXJyYXkoJmluX2FsdGVybmF0ZUNvbG9ycyk7Ci0gICAgT3B0aW9uYWw8
VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9y
PiBvX2luX3ByaW50Q29sb3IgPSBmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sRGF0YWJh
c2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yPihpbl9wcmludENvbG9yKTsK
KyAgICBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKm9faW5fYWx0ZXJuYXRlQ29sb3JzID0gdG9PYmpD
U3RyaW5nQXJyYXkoV1RGTW92ZShpbl9hbHRlcm5hdGVDb2xvcnMpKTsKKyAgICBPcHRpb25hbDxU
ZXN0UHJvdG9jb2xEYXRhYmFzZShhbm9ueW1vdXMpPiBvX2luX3ByaW50Q29sb3IgPSBmcm9tUHJv
dG9jb2xTdHJpbmc8VGVzdFByb3RvY29sRGF0YWJhc2UoYW5vbnltb3VzKT4oaW5fcHJpbnRDb2xv
cik7CiAgICAgaWYgKCFvX2luX3ByaW50Q29sb3IpIHsKICAgICAgICAgYmFja2VuZERpc3BhdGNo
ZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFt
cywgIlBhcmFtZXRlciAncHJpbnRDb2xvcicgb2YgbWV0aG9kICdEYXRhYmFzZS5leGVjdXRlTm9P
cHRpb25hbFBhcmFtZXRlcnMnIGNhbm5vdCBiZSBwcm9jZXNzZWQiX3MpOwogICAgICAgICByZXR1
cm47CiAgICAgfQotCiAgICAgW21fZGVsZWdhdGUgZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJz
V2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0Nh
bGxiYWNrIGNvbHVtbk5hbWVzOm9faW5fY29sdW1uTmFtZXMgbm90ZXM6b19pbl9ub3RlcyB0aW1l
c3RhbXA6b19pbl90aW1lc3RhbXAgdmFsdWVzOm9faW5fdmFsdWVzIHBheWxvYWQ6b19pbl9wYXls
b2FkIGRhdGFiYXNlSWQ6b19pbl9kYXRhYmFzZUlkIHNxbEVycm9yOm9faW5fc3FsRXJyb3Igc2Ny
ZWVuQ29sb3I6b19pbl9zY3JlZW5Db2xvci52YWx1ZSgpIGFsdGVybmF0ZUNvbG9yczpvX2luX2Fs
dGVybmF0ZUNvbG9ycyBwcmludENvbG9yOm9faW5fcHJpbnRDb2xvci52YWx1ZSgpXTsKIH0KIApA
QCAtMTIxMyw4ICsxMTg1LDggQEAgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQi
KSkpCiAKIEBwcm90b2NvbCBUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkhhbmRsZXIgPE5TT2Jq
ZWN0PgogQG9wdGlvbmFsCi0tICh2b2lkKWV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNXaXRo
RXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3Vj
Y2Vzc0NhbGxiYWNrOih2b2lkKF4pKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKmNvbHVtbk5hbWVz
LCBOU1N0cmluZyAqKm5vdGVzLCBkb3VibGUgKnRpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2Jq
ZWN0ICoqdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKipwYXlsb2FkLCBpbnQgKmRhdGFi
YXNlSWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKipzcWxFcnJvciwgVGVzdFByb3RvY29s
RGF0YWJhc2VQcmltYXJ5Q29sb3JzICpzY3JlZW5Db2xvciwgTlNBcnJheS8qPE5TU3RyaW5nPiov
ICoqYWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25h
bFBhcmFtZXRlcnNQcmludENvbG9yICpwcmludENvbG9yKSlzdWNjZXNzQ2FsbGJhY2sgY29sdW1u
TmFtZXM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKiljb2x1bW5OYW1lcyBub3RlczooTlNTdHJp
bmcgKiopbm90ZXMgdGltZXN0YW1wOihkb3VibGUgKil0aW1lc3RhbXAgdmFsdWVzOihSV0lQcm90
b2NvbEpTT05PYmplY3QgKiopdmFsdWVzIHBheWxvYWQ6KFJXSVByb3RvY29sSlNPTk9iamVjdCAq
KilwYXlsb2FkIGRhdGFiYXNlSWQ6KGludCAqKWRhdGFiYXNlSWQgc3FsRXJyb3I6KFRlc3RQcm90
b2NvbERhdGFiYXNlRXJyb3IgKiopc3FsRXJyb3Igc2NyZWVuQ29sb3I6KFRlc3RQcm90b2NvbERh
dGFiYXNlUHJpbWFyeUNvbG9ycyAqKXNjcmVlbkNvbG9yIGFsdGVybmF0ZUNvbG9yczooTlNBcnJh
eS8qPE5TU3RyaW5nPiovICoqKWFsdGVybmF0ZUNvbG9ycyBwcmludENvbG9yOihUZXN0UHJvdG9j
b2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yICopcHJpbnRD
b2xvcjsKLS0gKHZvaWQpZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzV2l0aEVycm9yQ2FsbGJh
Y2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFj
azoodm9pZCheKShOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmNvbHVtbk5hbWVzLCBOU1N0cmluZyAq
bm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqdmFsdWVzLCBS
V0lQcm90b2NvbEpTT05PYmplY3QgKnBheWxvYWQsIGludCBkYXRhYmFzZUlkLCBUZXN0UHJvdG9j
b2xEYXRhYmFzZUVycm9yICpzcWxFcnJvciwgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29s
b3JzIHNjcmVlbkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmFsdGVybmF0ZUNvbG9ycywg
VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9y
IHByaW50Q29sb3IpKXN1Y2Nlc3NDYWxsYmFjayBjb2x1bW5OYW1lczooTlNBcnJheS8qPE5TU3Ry
aW5nPiovICopY29sdW1uTmFtZXMgbm90ZXM6KE5TU3RyaW5nICopbm90ZXMgdGltZXN0YW1wOihk
b3VibGUpdGltZXN0YW1wIHZhbHVlczooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopdmFsdWVzIHBh
eWxvYWQ6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXBheWxvYWQgZGF0YWJhc2VJZDooaW50KWRh
dGFiYXNlSWQgc3FsRXJyb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKilzcWxFcnJvciBz
Y3JlZW5Db2xvcjooVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzKXNjcmVlbkNvbG9y
IGFsdGVybmF0ZUNvbG9yczooTlNBcnJheS8qPE5TU3RyaW5nPiovICopYWx0ZXJuYXRlQ29sb3Jz
IHByaW50Q29sb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0
ZXJzUHJpbnRDb2xvcilwcmludENvbG9yOworLSAodm9pZClleGVjdXRlQWxsT3B0aW9uYWxQYXJh
bWV0ZXJzV2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNh
bGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKShOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKipj
b2x1bW5OYW1lcywgTlNTdHJpbmcgKipub3RlcywgZG91YmxlICp0aW1lc3RhbXAsIFJXSVByb3Rv
Y29sSlNPTk9iamVjdCAqKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqcGF5bG9hZCwg
aW50ICpkYXRhYmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoqc3FsRXJyb3IsIFRl
c3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyAqc2NyZWVuQ29sb3IsIE5TQXJyYXkvKjxO
U1N0cmluZz4qLyAqKmFsdGVybmF0ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0YWJhc2UoYW5vbnlt
b3VzKSAqcHJpbnRDb2xvcikpc3VjY2Vzc0NhbGxiYWNrIGNvbHVtbk5hbWVzOihOU0FycmF5Lyo8
TlNTdHJpbmc+Ki8gKiopY29sdW1uTmFtZXMgbm90ZXM6KE5TU3RyaW5nICoqKW5vdGVzIHRpbWVz
dGFtcDooZG91YmxlICopdGltZXN0YW1wIHZhbHVlczooUldJUHJvdG9jb2xKU09OT2JqZWN0ICoq
KXZhbHVlcyBwYXlsb2FkOihSV0lQcm90b2NvbEpTT05PYmplY3QgKiopcGF5bG9hZCBkYXRhYmFz
ZUlkOihpbnQgKilkYXRhYmFzZUlkIHNxbEVycm9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9y
ICoqKXNxbEVycm9yIHNjcmVlbkNvbG9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xv
cnMgKilzY3JlZW5Db2xvciBhbHRlcm5hdGVDb2xvcnM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAq
KilhbHRlcm5hdGVDb2xvcnMgcHJpbnRDb2xvcjooVGVzdFByb3RvY29sRGF0YWJhc2UoYW5vbnlt
b3VzKSAqKXByaW50Q29sb3I7CistICh2b2lkKWV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1dp
dGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBz
dWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikoTlNBcnJheS8qPE5TU3RyaW5nPiovICpjb2x1bW5OYW1l
cywgTlNTdHJpbmcgKm5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05PYmpl
Y3QgKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpwYXlsb2FkLCBpbnQgZGF0YWJhc2VJ
ZCwgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqc3FsRXJyb3IsIFRlc3RQcm90b2NvbERhdGFi
YXNlUHJpbWFyeUNvbG9ycyBzY3JlZW5Db2xvciwgTlNBcnJheS8qPE5TU3RyaW5nPiovICphbHRl
cm5hdGVDb2xvcnMsIFRlc3RQcm90b2NvbERhdGFiYXNlKGFub255bW91cykgcHJpbnRDb2xvcikp
c3VjY2Vzc0NhbGxiYWNrIGNvbHVtbk5hbWVzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiljb2x1
bW5OYW1lcyBub3RlczooTlNTdHJpbmcgKilub3RlcyB0aW1lc3RhbXA6KGRvdWJsZSl0aW1lc3Rh
bXAgdmFsdWVzOihSV0lQcm90b2NvbEpTT05PYmplY3QgKil2YWx1ZXMgcGF5bG9hZDooUldJUHJv
dG9jb2xKU09OT2JqZWN0ICopcGF5bG9hZCBkYXRhYmFzZUlkOihpbnQpZGF0YWJhc2VJZCBzcWxF
cnJvcjooVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKXNxbEVycm9yIHNjcmVlbkNvbG9yOihU
ZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMpc2NyZWVuQ29sb3IgYWx0ZXJuYXRlQ29s
b3JzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKilhbHRlcm5hdGVDb2xvcnMgcHJpbnRDb2xvcjoo
VGVzdFByb3RvY29sRGF0YWJhc2UoYW5vbnltb3VzKSlwcmludENvbG9yOwogQGVuZAogCiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9l
eHBlY3RlZC9kZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uLXJlc3VsdCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9kZWZpbml0
aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uLXJlc3VsdAppbmRleCBkMDJiZWQ3YjhkNmUyZmUw
MmE1MjQyZWQxMjJmNGEyODRmOTBjOWI5Li5iMzBkZjE3MGFhYmE1OTdiMzYxOTYyNGJhZDY3OTM1
MTUzM2U0NDhjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZXhwZWN0ZWQvZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbi1y
ZXN1bHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2V4cGVjdGVkL2RlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24tcmVzdWx0CkBAIC03
Niw3ICs3Niw3IEBAIEluc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIk5ldHdvcmsiLCBu
dWxsKTsKIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogCi0j
aW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmpl
Y3RzLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXIuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5o
PgogCkBAIC05Niw3ICs5Niw3IEBAIGNsYXNzIEFsdGVybmF0ZU5ldHdvcmtCYWNrZW5kRGlzcGF0
Y2hlciA6IHB1YmxpYyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7CiBwdWJsaWM6CiAgICAg
dmlydHVhbCB+QWx0ZXJuYXRlTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyKCkgeyB9CiAjaWYgQ09N
TUFORC1NQUMKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlKGxvbmcgY2FsbElkKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZShsb25nIHByb3RvY29sX2NhbGxJZCkgPSAw
OwogI2VuZGlmIC8vIENPTU1BTkQtTUFDCiB9OwogI2VuZGlmIC8vIERPTUFJTi1NQUMKQEAgLTE0
MCwxMSArMTQwLDE0IEBAIHB1YmxpYzoKIAogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMu
aCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5o
PgorI2luY2x1ZGUgPHR1cGxlPgorI2luY2x1ZGUgPHd0Zi9FeHBlY3RlZC5oPgorI2luY2x1ZGUg
PHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1l
c3BhY2UgSW5zcGVjdG9yIHsKIAotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKIAogI2lm
IEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogI2lmIERPTUFJTi1NQUMK
QEAgLTE1Niw3ICsxNTksNyBAQCBjbGFzcyBBbHRlcm5hdGVOZXR3b3JrQmFja2VuZERpc3BhdGNo
ZXI7CiBjbGFzcyBOZXR3b3JrQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKIHB1YmxpYzoKICNp
ZiBDT01NQU5ELU1BQwotICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UoRXJyb3JTdHJpbmcm
KSA9IDA7CisgICAgdmlydHVhbCBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBsb2FkUmVz
b3VyY2UoKSA9IDA7CiAjZW5kaWYgLy8gQ09NTUFORC1NQUMKIHByb3RlY3RlZDoKICAgICB2aXJ0
dWFsIH5OZXR3b3JrQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCk7CkBAIC0xNjcsMTAgKzE3MCwx
MCBAQCBwcm90ZWN0ZWQ6CiBjbGFzcyBOZXR3b3JrQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBw
dWJsaWMgU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIgewogcHVibGljOgogICAgIHN0YXRp
YyBSZWY8TmV0d29ya0JhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUoQmFja2VuZERpc3BhdGNoZXIm
LCBOZXR3b3JrQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7Ci0gICAgdm9pZCBkaXNwYXRjaChs
b25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYg
bWVzc2FnZSkgZmluYWw7CisgICAgdm9pZCBkaXNwYXRjaChsb25nIHByb3RvY29sX2NhbGxJZCwg
Y29uc3QgU3RyaW5nJiBwcm90b2NvbF9tZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgcHJvdG9j
b2xfbWVzc2FnZSkgZmluYWw7CiBwcml2YXRlOgogI2lmIENPTU1BTkQtTUFDCi0gICAgdm9pZCBs
b2FkUmVzb3VyY2UobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1l
dGVycyk7CisgICAgdm9pZCBsb2FkUmVzb3VyY2UobG9uZyBwcm90b2NsX2NhbGxJZCwgUmVmUHRy
PEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9wYXJhbWV0ZXJzKTsKICNlbmRpZiAvLyBDT01NQU5E
LU1BQwogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogcHVibGlj
OgpAQCAtMjIxLDkgKzIyNCw3IEBAIHByaXZhdGU6CiAjaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNw
YXRjaGVycy5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRS
b3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgogI2luY2x1ZGUgPHd0Zi9OZXZl
ckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogI2lmIEVOQUJM
RShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogI2luY2x1ZGUgIlRlc3RBbHRlcm5h
dGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKQEAgLTI0OCw0MSArMjQ5LDQxIEBAIE5ldHdvcmtCYWNr
ZW5kRGlzcGF0Y2hlcjo6TmV0d29ya0JhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVy
JiBiYWNrZW5kRGlzCiAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRjaGVy
Rm9yRG9tYWluKCJOZXR3b3JrIl9zLCB0aGlzKTsKIH0KIAotdm9pZCBOZXR3b3JrQmFja2VuZERp
c3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwg
UmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKQordm9pZCBOZXR3b3JrQmFja2VuZERpc3BhdGNo
ZXI6OmRpc3BhdGNoKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBjb25zdCBTdHJpbmcmIHByb3RvY29s
X21ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9tZXNzYWdlKQogewogICAgIFJl
ZjxOZXR3b3JrQmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOwogCi0gICAgUmVmUHRy
PEpTT046Ok9iamVjdD4gcGFyYW1ldGVyczsKLSAgICBtZXNzYWdlLT5nZXRPYmplY3QoInBhcmFt
cyJfcywgcGFyYW1ldGVycyk7CisgICAgYXV0byBwcm90b2NvbF9wYXJhbWV0ZXJzID0gcHJvdG9j
b2xfbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3MpOwogCiAjaWYgQ09NTUFORC1NQUMKLSAg
ICBpZiAobWV0aG9kID09ICJsb2FkUmVzb3VyY2UiKSB7Ci0gICAgICAgIGxvYWRSZXNvdXJjZShy
ZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykpOworICAgIGlmIChwcm90b2NvbF9tZXRob2Qg
PT0gImxvYWRSZXNvdXJjZSIpIHsKKyAgICAgICAgbG9hZFJlc291cmNlKHByb3RvY29sX2NhbGxJ
ZCwgV1RGTW92ZShwcm90b2NvbF9wYXJhbWV0ZXJzKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAjZW5kaWYgLy8gQ09NTUFORC1NQUMKIAotICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9y
dFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdv
cmsuIiArIG1ldGhvZCArICInIHdhcyBub3QgZm91bmQiKTsKKyAgICBtX2JhY2tlbmREaXNwYXRj
aGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3Vu
ZCwgIidOZXR3b3JrLiIgKyBwcm90b2NvbF9tZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7CiB9
CiAKICNpZiBDT01NQU5ELU1BQwotdm9pZCBOZXR3b3JrQmFja2VuZERpc3BhdGNoZXI6OmxvYWRS
ZXNvdXJjZShsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikKK3ZvaWQgTmV0
d29ya0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UobG9uZyBwcm90b2NvbF9jYWxsSWQs
IFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5B
VEVfRElTUEFUQ0hFUlMpCiAgICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgewotICAgICAg
ICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmxvYWRSZXNvdXJjZShyZXF1ZXN0SWQpOworICAgICAg
ICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmxvYWRSZXNvdXJjZShwcm90b2NvbF9jYWxsSWQpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJO
QVRFX0RJU1BBVENIRVJTKQogCi0gICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVmPEpTT046
Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBtX2FnZW50LT5s
b2FkUmVzb3VyY2UoZXJyb3IpOworICAgIGF1dG8gcmVzdWx0ID0gbV9hZ2VudC0+bG9hZFJlc291
cmNlKCk7CisgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAgICAgQVNTRVJUKCFyZXN1bHQuZXJyb3Io
KS5pc0VtcHR5KCkpOworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2Nv
bEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgcmVzdWx0LmVycm9yKCkpOwor
ICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKLSAgICAg
ICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShy
ZXN1bHQpLCBmYWxzZSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5y
ZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92
ZShlcnJvcikpOworICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6
OmNyZWF0ZSgpOworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShwcm90b2Nv
bF9jYWxsSWQsIFdURk1vdmUocHJvdG9jb2xfanNvbk1lc3NhZ2UpLCBmYWxzZSk7CiB9CiAjZW5k
aWYgLy8gQ09NTUFORC1NQUMKICNlbmRpZiAvLyBET01BSU4tTUFDCkBAIC0zMjUsNiArMzI2LDcg
QEAgdm9pZCBOZXR3b3JrQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZShsb25nIHJlcXVl
c3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4KIAogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVj
dHMuaCIKICNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25h
bC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVj
dG9yIHsKQEAgLTM4MSw3ICszODMsNiBAQCBwcml2YXRlOgogI2luY2x1ZGUgIlRlc3RGcm9udGVu
ZERpc3BhdGNoZXJzLmgiCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9u
dGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogbmFtZXNwYWNl
IEluc3BlY3RvciB7CiAKQEAgLTM4OSwxMCArMzkwLDEwIEBAIG5hbWVzcGFjZSBJbnNwZWN0b3Ig
ewogI2lmIEVWRU5ULU1BQwogdm9pZCBOZXR3b3JrRnJvbnRlbmREaXNwYXRjaGVyOjpyZXNvdXJj
ZUxvYWRlZCgpCiB7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpP
YmplY3Q6OmNyZWF0ZSgpOwotICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywg
Ik5ldHdvcmsucmVzb3VyY2VMb2FkZWQiX3MpOworICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3Nh
Z2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5z
ZXRTdHJpbmcoIm1ldGhvZCJfcywgIk5ldHdvcmsucmVzb3VyY2VMb2FkZWQiX3MpOwogCi0gICAg
bV9mcm9udGVuZFJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsK
KyAgICBtX2Zyb250ZW5kUm91dGVyLnNlbmRFdmVudChwcm90b2NvbF9qc29uTWVzc2FnZS0+dG9K
U09OU3RyaW5nKCkpOwogfQogI2VuZGlmIC8vIEVWRU5ULU1BQwogI2VuZGlmIC8vIERPTUFJTi1N
QUMKQEAgLTQzNCw3ICs0MzUsOSBAQCB2b2lkIE5ldHdvcmtGcm9udGVuZERpc3BhdGNoZXI6OnJl
c291cmNlTG9hZGVkKCkKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Cisj
aW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAK
QEAgLTQ2MSw3ICs0NjQsNyBAQCBjbGFzcyBOZXR3b3JrRXJyb3I7CiBuYW1lc3BhY2UgTmV0d29y
ayB7CiAKICNpZiBUWVBFLU1BQwotY2xhc3MgTmV0d29ya0Vycm9yIDogcHVibGljIEpTT046Ok9i
amVjdEJhc2UgeworY2xhc3MgTmV0d29ya0Vycm9yIGZpbmFsIDogcHVibGljIEpTT046Ok9iamVj
dEJhc2UgewogcHVibGljOgogICAgIGVudW0gewogICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCkBA
IC00ODgsMTcgKzQ5MSwxNyBAQCBwdWJsaWM6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBOZXR3b3Jr
RXJyb3I7CiAgICAgcHVibGljOgogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBNZXNzYWdlU2V0
PiYgc2V0TWVzc2FnZShjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRF
IHwgTWVzc2FnZVNldD4mIHNldE1lc3NhZ2UoY29uc3QgU3RyaW5nJiBpbl9tZXNzYWdlKQogICAg
ICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTWVzc2FnZVNldCks
IHByb3BlcnR5X21lc3NhZ2VfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNl
dFN0cmluZygibWVzc2FnZSJfcywgdmFsdWUpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0
cmluZygibWVzc2FnZSJfcywgaW5fbWVzc2FnZSk7CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0
YXRlPE1lc3NhZ2VTZXQ+KCk7CiAgICAgICAgIH0KIAotICAgICAgICBCdWlsZGVyPFNUQVRFIHwg
Q29kZVNldD4mIHNldENvZGUoaW50IHZhbHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQ29k
ZVNldD4mIHNldENvZGUoaW50IGluX2NvZGUpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKCEoU1RBVEUgJiBDb2RlU2V0KSwgcHJvcGVydHlfY29kZV9hbHJlYWR5X3NldCk7
Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0SW50ZWdlcigiY29kZSJfcywgdmFsdWUpOworICAg
ICAgICAgICAgbV9yZXN1bHQtPnNldEludGVnZXIoImNvZGUiX3MsIGluX2NvZGUpOwogICAgICAg
ICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxDb2RlU2V0PigpOwogICAgICAgICB9CiAKQEAgLTU3MCw4
ICs1NzMsNyBAQCBwdWJsaWM6CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGVzdFBy
b3RvY29sT2JqZWN0cy5oIgogCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8
d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAKIG5hbWVz
cGFjZSBJbnNwZWN0b3IgewogCkBAIC02MzEsNyArNjMzLDcgQEAgY2xhc3MgT2JqQ0luc3BlY3Rv
ck5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBBbHRlcm5hdGVOZXR3b3Jr
QmFja2UKIHB1YmxpYzoKICAgICBPYmpDSW5zcGVjdG9yTmV0d29ya0JhY2tlbmREaXNwYXRjaGVy
KGlkPFRlc3RQcm90b2NvbE5ldHdvcmtEb21haW5IYW5kbGVyPiBoYW5kbGVyKSB7IG1fZGVsZWdh
dGUgPSBoYW5kbGVyOyB9CiAjaWYgQ09NTUFORC1NQUMKLSAgICB2b2lkIGxvYWRSZXNvdXJjZShs
b25nIHJlcXVlc3RJZCkgZmluYWw7CisgICAgdm9pZCBsb2FkUmVzb3VyY2UobG9uZyBwcm90b2Nv
bF9jYWxsSWQpIGZpbmFsOwogI2VuZGlmIC8vIENPTU1BTkQtTUFDCiBwcml2YXRlOgogICAgIFJl
dGFpblB0cjxpZDxUZXN0UHJvdG9jb2xOZXR3b3JrRG9tYWluSGFuZGxlcj4+IG1fZGVsZWdhdGU7
CkBAIC02ODMsMjEgKzY4NSwyMiBAQCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAogI2lmIERPTUFJ
Ti1NQUMKICNpZiBDT01NQU5ELU1BQwotdm9pZCBPYmpDSW5zcGVjdG9yTmV0d29ya0JhY2tlbmRE
aXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UobG9uZyByZXF1ZXN0SWQpCit2b2lkIE9iakNJbnNwZWN0
b3JOZXR3b3JrQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZShsb25nIHByb3RvY29sX2Nh
bGxJZCkKIHsKICAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0
b3IobG9hZFJlc291cmNlV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7Ci0g
ICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElk
LCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29yay5sb2FkUmVzb3Vy
Y2UnIHdhcyBub3QgZm91bmQiX3MpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBv
cnRQcm90b2NvbEVycm9yKHByb3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhv
ZE5vdEZvdW5kLCAiJ05ldHdvcmsubG9hZFJlc291cmNlJyB3YXMgbm90IGZvdW5kIl9zKTsKICAg
ICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAogICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJv
cikgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJl
cXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CisgICAgICAg
IGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocHJvdG9jb2xfY2FsbElk
LCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKICAgICAgICAgYmFja2Vu
ZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKICAgICB9OwogCiAgICAgaWQgc3Vj
Y2Vzc0NhbGxiYWNrID0gXnsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3Bv
bnNlKHJlcXVlc3RJZCwgSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSwgZmFsc2UpOworICAgICAgICBh
dXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAg
ICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHByb3RvY29sX2NhbGxJZCwgV1RG
TW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSksIGZhbHNlKTsKICAgICB9OwogCiAgICAgW21fZGVs
ZWdhdGUgbG9hZFJlc291cmNlV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNz
Q2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsKQEAgLTkxMSw5ICs5MTQsOSBAQCB1c2luZyBuYW1l
c3BhY2UgSW5zcGVjdG9yOwogewogICAgIGNvbnN0IEZyb250ZW5kUm91dGVyJiByb3V0ZXIgPSBf
Y29udHJvbGxlci0+ZnJvbnRlbmRSb3V0ZXIoKTsKIAotICAgIFJlZjxKU09OOjpPYmplY3Q+IGpz
b25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0
U3RyaW5nKCJtZXRob2QiX3MsICJOZXR3b3JrLnJlc291cmNlTG9hZGVkIl9zKTsKLSAgICByb3V0
ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7CisgICAgYXV0byBwcm90
b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgcHJvdG9jb2xf
anNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiTmV0d29yay5yZXNvdXJjZUxvYWRl
ZCJfcyk7CisgICAgcm91dGVyLnNlbmRFdmVudChwcm90b2NvbF9qc29uTWVzc2FnZS0+dG9KU09O
U3RyaW5nKCkpOwogfQogI2VuZGlmIC8vIEVWRU5ULU1BQwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZG9tYWluLWRl
YnVnZ2FibGVUeXBlcy5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9kb21haW4tZGVidWdnYWJsZVR5cGVzLmpzb24tcmVz
dWx0CmluZGV4IGE0OGY2ZjliNWExOTc5ODJhZDY5MTAyOWFlYWFkYzY3NTJmODEzMmEuLmM4NzUx
NDhmM2RhZjA1ZWQzMWFjZWQ5N2MzMmViM2JiNzU0N2Y4YWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9kb21haW4tZGVi
dWdnYWJsZVR5cGVzLmpzb24tcmVzdWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9kb21haW4tZGVidWdnYWJsZVR5cGVzLmpzb24t
cmVzdWx0CkBAIC03MCw3ICs3MCw3IEBAIEluc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4o
IkRvbWFpbiIsIFsid2ViLXBhZ2UiXSk7CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKIAotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVk
ZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yRnJvbnRlbmRSb3V0ZXIuaD4KIApAQCAtODgsNyArODgsNyBAQCBwcml2YXRlOgogY2xhc3Mg
QWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIgOiBwdWJsaWMgQWx0ZXJuYXRlQmFja2Vu
ZERpc3BhdGNoZXIgewogcHVibGljOgogICAgIHZpcnR1YWwgfkFsdGVybmF0ZURvbWFpbkJhY2tl
bmREaXNwYXRjaGVyKCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIENvbW1hbmQobG9uZyBjYWxsSWQp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgQ29tbWFuZChsb25nIHByb3RvY29sX2NhbGxJZCkgPSAw
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCkBAIC0xMzAsMTEgKzEzMCwxNCBAQCBw
dWJsaWM6CiAKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx0dXBs
ZT4KKyNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4K
ICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7
CiAKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCiAKICNpZiBFTkFCTEUoSU5TUEVDVE9S
X0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIGNsYXNzIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNw
YXRjaGVyOwpAQCAtMTQyLDcgKzE0NSw3IEBAIGNsYXNzIEFsdGVybmF0ZURvbWFpbkJhY2tlbmRE
aXNwYXRjaGVyOwogCiBjbGFzcyBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewogcHVi
bGljOgotICAgIHZpcnR1YWwgdm9pZCBDb21tYW5kKEVycm9yU3RyaW5nJikgPSAwOworICAgIHZp
cnR1YWwgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gQ29tbWFuZCgpID0gMDsKIHByb3Rl
Y3RlZDoKICAgICB2aXJ0dWFsIH5Eb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKTsKIH07
CkBAIC0xNTAsOSArMTUzLDkgQEAgcHJvdGVjdGVkOgogY2xhc3MgRG9tYWluQmFja2VuZERpc3Bh
dGNoZXIgZmluYWwgOiBwdWJsaWMgU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIgewogcHVi
bGljOgogICAgIHN0YXRpYyBSZWY8RG9tYWluQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShCYWNr
ZW5kRGlzcGF0Y2hlciYsIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwotICAgIHZv
aWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNP
Tjo6T2JqZWN0PiYmIG1lc3NhZ2UpIGZpbmFsOworICAgIHZvaWQgZGlzcGF0Y2gobG9uZyBwcm90
b2NvbF9jYWxsSWQsIGNvbnN0IFN0cmluZyYgcHJvdG9jb2xfbWV0aG9kLCBSZWY8SlNPTjo6T2Jq
ZWN0PiYmIHByb3RvY29sX21lc3NhZ2UpIGZpbmFsOwogcHJpdmF0ZToKLSAgICB2b2lkIENvbW1h
bmQobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7Cisg
ICAgdm9pZCBDb21tYW5kKGxvbmcgcHJvdG9jbF9jYWxsSWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+
JiYgcHJvdG9jb2xfcGFyYW1ldGVycyk7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVf
RElTUEFUQ0hFUlMpCiBwdWJsaWM6CiAgICAgdm9pZCBzZXRBbHRlcm5hdGVEaXNwYXRjaGVyKEFs
dGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyKiBhbHRlcm5hdGVEaXNwYXRjaGVyKSB7IG1f
YWx0ZXJuYXRlRGlzcGF0Y2hlciA9IGFsdGVybmF0ZURpc3BhdGNoZXI7IH0KQEAgLTIwMSw5ICsy
MDQsNyBAQCBwcml2YXRlOgogI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKIAog
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5j
bHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4K
LSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FM
VEVSTkFURV9ESVNQQVRDSEVSUykKICNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3Bh
dGNoZXJzLmgiCkBAIC0yMjUsMzggKzIyNiwzOCBAQCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6
RG9tYWluQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYQog
ICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbigiRG9t
YWluIl9zLCB0aGlzKTsKIH0KIAotdm9pZCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0
Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0
PiYmIG1lc3NhZ2UpCit2b2lkIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25n
IHByb3RvY29sX2NhbGxJZCwgY29uc3QgU3RyaW5nJiBwcm90b2NvbF9tZXRob2QsIFJlZjxKU09O
OjpPYmplY3Q+JiYgcHJvdG9jb2xfbWVzc2FnZSkKIHsKICAgICBSZWY8RG9tYWluQmFja2VuZERp
c3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOwogCi0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFy
YW1ldGVyczsKLSAgICBtZXNzYWdlLT5nZXRPYmplY3QoInBhcmFtcyJfcywgcGFyYW1ldGVycyk7
CisgICAgYXV0byBwcm90b2NvbF9wYXJhbWV0ZXJzID0gcHJvdG9jb2xfbWVzc2FnZS0+Z2V0T2Jq
ZWN0KCJwYXJhbXMiX3MpOwogCi0gICAgaWYgKG1ldGhvZCA9PSAiQ29tbWFuZCIpIHsKLSAgICAg
ICAgQ29tbWFuZChyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykpOworICAgIGlmIChwcm90
b2NvbF9tZXRob2QgPT0gIkNvbW1hbmQiKSB7CisgICAgICAgIENvbW1hbmQocHJvdG9jb2xfY2Fs
bElkLCBXVEZNb3ZlKHByb3RvY29sX3BhcmFtZXRlcnMpKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2Vu
ZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RvbWFpbi4iICsgbWV0aG9kICsgIicgd2Fz
IG5vdCBmb3VuZCIpOworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJy
b3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RvbWFpbi4iICsgcHJvdG9j
b2xfbWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOwogfQogCi12b2lkIERvbWFpbkJhY2tlbmRE
aXNwYXRjaGVyOjpDb21tYW5kKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYm
KQordm9pZCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Q29tbWFuZChsb25nIHByb3RvY29sX2Nh
bGxJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FM
VEVSTkFURV9ESVNQQVRDSEVSUykKICAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0g
ICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+Q29tbWFuZChyZXF1ZXN0SWQpOworICAgICAg
ICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPkNvbW1hbmQocHJvdG9jb2xfY2FsbElkKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KICNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9E
SVNQQVRDSEVSUykKIAotICAgIEVycm9yU3RyaW5nIGVycm9yOwotICAgIFJlZjxKU09OOjpPYmpl
Y3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgbV9hZ2VudC0+Q29tbWFu
ZChlcnJvcik7CisgICAgYXV0byByZXN1bHQgPSBtX2FnZW50LT5Db21tYW5kKCk7CisgICAgaWYg
KCFyZXN1bHQpIHsKKyAgICAgICAgQVNTRVJUKCFyZXN1bHQuZXJyb3IoKS5pc0VtcHR5KCkpOwor
ICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmRE
aXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgcmVzdWx0LmVycm9yKCkpOworICAgICAgICByZXR1cm47
CisgICAgfQogCi0gICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKLSAgICAgICAgbV9iYWNrZW5kRGlz
cGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7
Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVy
cm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOworICAg
IGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAg
IG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShwcm90b2NvbF9jYWxsSWQsIFdURk1v
dmUocHJvdG9jb2xfanNvbk1lc3NhZ2UpLCBmYWxzZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgpAQCAtMjk3LDYgKzI5OCw3IEBAIHZvaWQgRG9tYWluQmFja2VuZERpc3BhdGNoZXI6
OkNvbW1hbmQobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCiAKICNpbmNs
dWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4K
KyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CkBAIC0zNDksMTYgKzM1MSwxNSBAQCBwcml2YXRl
OgogI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCiAKICNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0
L0NTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKIHZvaWQgRG9tYWluRnJvbnRl
bmREaXNwYXRjaGVyOjpFdmVudCgpCiB7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3Nh
Z2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmco
Im1ldGhvZCJfcywgIkRvbWFpbi5FdmVudCJfcyk7CisgICAgYXV0byBwcm90b2NvbF9qc29uTWVz
c2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2Ut
PnNldFN0cmluZygibWV0aG9kIl9zLCAiRG9tYWluLkV2ZW50Il9zKTsKIAotICAgIG1fZnJvbnRl
bmRSb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7CisgICAgbV9m
cm9udGVuZFJvdXRlci5zZW5kRXZlbnQocHJvdG9jb2xfanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmlu
ZygpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCkBAIC0zOTgsNyArMzk5LDkgQEAg
dm9pZCBEb21haW5Gcm9udGVuZERpc3BhdGNoZXI6OkV2ZW50KCkKICNwcmFnbWEgb25jZQogCiAj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgotI2luY2x1
ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNs
dWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAog
bmFtZXNwYWNlIEluc3BlY3RvciB7CiAKQEAgLTQ1Miw4ICs0NTUsNyBAQCBuYW1lc3BhY2UgUHJv
dG9jb2wgewogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVj
dHMuaCIKIAotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogCiBuYW1lc3BhY2UgSW5zcGVj
dG9yIHsKIApAQCAtNTA5LDcgKzUxMSw3IEBAIGNsYXNzIE9iakNJbnNwZWN0b3JEb21haW5CYWNr
ZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBBbHRlcm5hdGVEb21haW5CYWNrZW5kCiAgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgT2JqQ0luc3BlY3RvckRvbWFp
bkJhY2tlbmREaXNwYXRjaGVyKGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+IGhh
bmRsZXIpIHsgbV9kZWxlZ2F0ZSA9IGhhbmRsZXI7IH0KLSAgICB2b2lkIENvbW1hbmQobG9uZyBy
ZXF1ZXN0SWQpIGZpbmFsOworICAgIHZvaWQgQ29tbWFuZChsb25nIHByb3RvY29sX2NhbGxJZCkg
ZmluYWw7CiBwcml2YXRlOgogICAgIFJldGFpblB0cjxpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21h
aW5IYW5kbGVyPj4gbV9kZWxlZ2F0ZTsKIH07CkBAIC01NTcsMjEgKzU1OSwyMiBAQCBwcml2YXRl
OgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAotdm9pZCBPYmpDSW5zcGVjdG9yRG9tYWluQmFj
a2VuZERpc3BhdGNoZXI6OkNvbW1hbmQobG9uZyByZXF1ZXN0SWQpCit2b2lkIE9iakNJbnNwZWN0
b3JEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Q29tbWFuZChsb25nIHByb3RvY29sX2NhbGxJZCkK
IHsKICAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoQ29t
bWFuZFdpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazopXSkgewotICAgICAgICBiYWNr
ZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERp
c3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RvbWFpbi5Db21tYW5kJyB3YXMgbm90IGZvdW5k
Il9zKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihw
cm90b2NvbF9jYWxsSWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEb21h
aW4uQ29tbWFuZCcgd2FzIG5vdCBmb3VuZCJfcyk7CiAgICAgICAgIGJhY2tlbmREaXNwYXRjaGVy
KCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBp
ZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRj
aGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5y
ZXBvcnRQcm90b2NvbEVycm9yKHByb3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNl
cnZlckVycm9yLCBlcnJvcik7CiAgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5k
aW5nRXJyb3JzKCk7CiAgICAgfTsKIAogICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF57Ci0gICAg
ICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIEpTT046Ok9i
amVjdDo6Y3JlYXRlKCksIGZhbHNlKTsKKyAgICAgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2Fn
ZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCkt
PnNlbmRSZXNwb25zZShwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJvdG9jb2xfanNvbk1lc3Nh
Z2UpLCBmYWxzZSk7CiAgICAgfTsKIAogICAgIFttX2RlbGVnYXRlIENvbW1hbmRXaXRoRXJyb3JD
YWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOwpA
QCAtNzczLDkgKzc3Niw5IEBAIHVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CiB7CiAgICAgY29u
c3QgRnJvbnRlbmRSb3V0ZXImIHJvdXRlciA9IF9jb250cm9sbGVyLT5mcm9udGVuZFJvdXRlcigp
OwogCi0gICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNy
ZWF0ZSgpOwotICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRvbWFpbi5F
dmVudCJfcyk7Ci0gICAgcm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5n
KCkpOworICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0
ZSgpOworICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRv
bWFpbi5FdmVudCJfcyk7CisgICAgcm91dGVyLnNlbmRFdmVudChwcm90b2NvbF9qc29uTWVzc2Fn
ZS0+dG9KU09OU3RyaW5nKCkpOwogfQogCiBAZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZG9tYWluLXRhcmdldFR5
cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24tcmVzdWx0IGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2RvbWFpbi10YXJn
ZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uLXJlc3VsdAppbmRleCBh
NzdmZTM1ODk3ODg1MzQ3NTA1NjIyM2UwMTlhMWIwZmIxZDQ3ZTY4Li45NDJkY2NhOGYyNjAxZWM2
OTcyYmJjNjA5ODRiZGM3NTU3NDFjM2VmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZG9tYWluLXRhcmdldFR5cGUtbWF0
Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24tcmVzdWx0CisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9kb21haW4tdGFyZ2V0
VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbi1yZXN1bHQKQEAgLTcwLDcg
KzcwLDcgQEAgSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiRG9tYWluIiwgWyJwYWdl
Il0pOwogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAKLSNp
bmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVj
dHMuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
ci5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+
CiAKQEAgLTg4LDcgKzg4LDcgQEAgcHJpdmF0ZToKIGNsYXNzIEFsdGVybmF0ZURvbWFpbkJhY2tl
bmREaXNwYXRjaGVyIDogcHVibGljIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIH5BbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlcigpIHsgfQot
ICAgIHZpcnR1YWwgdm9pZCBDb21tYW5kKGxvbmcgY2FsbElkKSA9IDA7CisgICAgdmlydHVhbCB2
b2lkIENvbW1hbmQobG9uZyBwcm90b2NvbF9jYWxsSWQpID0gMDsKIH07CiAKIH0gLy8gbmFtZXNw
YWNlIEluc3BlY3RvcgpAQCAtMTMwLDExICsxMzAsMTQgQEAgcHVibGljOgogCiAjaW5jbHVkZSAi
VGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8dHVwbGU+CisjaW5jbHVkZSA8d3RmL0V4
cGVjdGVkLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCi10eXBlZGVmIFN0cmluZyBF
cnJvclN0cmluZzsKKwogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hF
UlMpCiBjbGFzcyBBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjsKQEAgLTE0Miw3ICsx
NDUsNyBAQCBjbGFzcyBBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjsKIAogY2xhc3Mg
RG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKIHB1YmxpYzoKLSAgICB2aXJ0dWFsIHZv
aWQgQ29tbWFuZChFcnJvclN0cmluZyYpID0gMDsKKyAgICB2aXJ0dWFsIFByb3RvY29sOjpFcnJv
clN0cmluZ09yPHZvaWQ+IENvbW1hbmQoKSA9IDA7CiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB+
RG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCk7CiB9OwpAQCAtMTUwLDkgKzE1Myw5IEBA
IHByb3RlY3RlZDoKIGNsYXNzIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGlj
IFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVm
PERvbWFpbkJhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImLCBEb21h
aW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKLSAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcmVx
dWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdl
KSBmaW5hbDsKKyAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBjb25zdCBT
dHJpbmcmIHByb3RvY29sX21ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9tZXNz
YWdlKSBmaW5hbDsKIHByaXZhdGU6Ci0gICAgdm9pZCBDb21tYW5kKGxvbmcgcmVxdWVzdElkLCBS
ZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOworICAgIHZvaWQgQ29tbWFuZChsb25n
IHByb3RvY2xfY2FsbElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX3BhcmFtZXRl
cnMpOwogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogcHVibGlj
OgogICAgIHZvaWQgc2V0QWx0ZXJuYXRlRGlzcGF0Y2hlcihBbHRlcm5hdGVEb21haW5CYWNrZW5k
RGlzcGF0Y2hlciogYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeyBtX2FsdGVybmF0ZURpc3BhdGNoZXIg
PSBhbHRlcm5hdGVEaXNwYXRjaGVyOyB9CkBAIC0yMDEsOSArMjA0LDcgQEAgcHJpdmF0ZToKICNp
bmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVz
Lmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMp
CiAjaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgpAQCAtMjI1LDM4
ICsyMjYsMzggQEAgRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkRvbWFpbkJhY2tlbmREaXNwYXRj
aGVyKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGEKICAgICBtX2JhY2tlbmREaXNwYXRj
aGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4oIkRvbWFpbiJfcywgdGhpcyk7CiB9CiAK
LXZvaWQgRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBj
b25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKQordm9pZCBE
b21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyBwcm90b2NvbF9jYWxsSWQsIGNv
bnN0IFN0cmluZyYgcHJvdG9jb2xfbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29s
X21lc3NhZ2UpCiB7CiAgICAgUmVmPERvbWFpbkJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0
aGlzKTsKIAotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnM7Ci0gICAgbWVzc2Fn
ZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3MsIHBhcmFtZXRlcnMpOworICAgIGF1dG8gcHJvdG9jb2xf
cGFyYW1ldGVycyA9IHByb3RvY29sX21lc3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9zKTsKIAot
ICAgIGlmIChtZXRob2QgPT0gIkNvbW1hbmQiKSB7Ci0gICAgICAgIENvbW1hbmQocmVxdWVzdElk
LCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKKyAgICBpZiAocHJvdG9jb2xfbWV0aG9kID09ICJDb21t
YW5kIikgeworICAgICAgICBDb21tYW5kKHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2Nv
bF9wYXJhbWV0ZXJzKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBtX2JhY2tlbmRE
aXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2RO
b3RGb3VuZCwgIidEb21haW4uIiArIG1ldGhvZCArICInIHdhcyBub3QgZm91bmQiKTsKKyAgICBt
X2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVy
OjpNZXRob2ROb3RGb3VuZCwgIidEb21haW4uIiArIHByb3RvY29sX21ldGhvZCArICInIHdhcyBu
b3QgZm91bmQiKTsKIH0KIAotdm9pZCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Q29tbWFuZChs
b25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikKK3ZvaWQgRG9tYWluQmFja2Vu
ZERpc3BhdGNoZXI6OkNvbW1hbmQobG9uZyBwcm90b2NvbF9jYWxsSWQsIFJlZlB0cjxKU09OOjpP
YmplY3Q+JiYpCiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMp
CiAgICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0ZURp
c3BhdGNoZXItPkNvbW1hbmQocmVxdWVzdElkKTsKKyAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRj
aGVyLT5Db21tYW5kKHByb3RvY29sX2NhbGxJZCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAj
ZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAKLSAgICBF
cnJvclN0cmluZyBlcnJvcjsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpP
YmplY3Q6OmNyZWF0ZSgpOwotICAgIG1fYWdlbnQtPkNvbW1hbmQoZXJyb3IpOworICAgIGF1dG8g
cmVzdWx0ID0gbV9hZ2VudC0+Q29tbWFuZCgpOworICAgIGlmICghcmVzdWx0KSB7CisgICAgICAg
IEFTU0VSVCghcmVzdWx0LmVycm9yKCkuaXNFbXB0eSgpKTsKKyAgICAgICAgbV9iYWNrZW5kRGlz
cGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJy
b3IsIHJlc3VsdC5lcnJvcigpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIGlmICgh
ZXJyb3IubGVuZ3RoKCkpCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25z
ZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2UpOwotICAgIGVsc2UKLSAgICAgICAg
bV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hl
cjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKKyAgICBhdXRvIHByb3RvY29sX2pzb25N
ZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVy
LT5zZW5kUmVzcG9uc2UocHJvdG9jb2xfY2FsbElkLCBXVEZNb3ZlKHByb3RvY29sX2pzb25NZXNz
YWdlKSwgZmFsc2UpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKQEAgLTI5Nyw2ICsy
OTgsNyBAQCB2b2lkIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpDb21tYW5kKGxvbmcgcmVxdWVz
dElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQogCiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2Jq
ZWN0cy5oIgogI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL09wdGlv
bmFsLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNw
ZWN0b3IgewpAQCAtMzQ5LDE2ICszNTEsMTUgQEAgcHJpdmF0ZToKICNpbmNsdWRlICJUZXN0RnJv
bnRlbmREaXNwYXRjaGVycy5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
RnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKIG5hbWVz
cGFjZSBJbnNwZWN0b3IgewogCiB2b2lkIERvbWFpbkZyb250ZW5kRGlzcGF0Y2hlcjo6RXZlbnQo
KQogewotICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0Ojpj
cmVhdGUoKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJEb21haW4u
RXZlbnQiX3MpOworICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6
OmNyZWF0ZSgpOworICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJf
cywgIkRvbWFpbi5FdmVudCJfcyk7CiAKLSAgICBtX2Zyb250ZW5kUm91dGVyLnNlbmRFdmVudChq
c29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOworICAgIG1fZnJvbnRlbmRSb3V0ZXIuc2VuZEV2
ZW50KHByb3RvY29sX2pzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7CiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgpAQCAtMzk4LDcgKzM5OSw5IEBAIHZvaWQgRG9tYWluRnJvbnRlbmRE
aXNwYXRjaGVyOjpFdmVudCgpCiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5o
PgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3Ig
ewogCkBAIC00NTIsOCArNDU1LDcgQEAgbmFtZXNwYWNlIFByb3RvY29sIHsKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAKLSNpbmNsdWRlIDx3
dGYvT3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8
d3RmL0Fzc2VydGlvbnMuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKQEAgLTUwOSw3ICs1
MTEsNyBAQCBjbGFzcyBPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXIgZmluYWwg
OiBwdWJsaWMgQWx0ZXJuYXRlRG9tYWluQmFja2VuZAogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOwogcHVibGljOgogICAgIE9iakNJbnNwZWN0b3JEb21haW5CYWNrZW5kRGlzcGF0Y2hlcihp
ZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPiBoYW5kbGVyKSB7IG1fZGVsZWdhdGUg
PSBoYW5kbGVyOyB9Ci0gICAgdm9pZCBDb21tYW5kKGxvbmcgcmVxdWVzdElkKSBmaW5hbDsKKyAg
ICB2b2lkIENvbW1hbmQobG9uZyBwcm90b2NvbF9jYWxsSWQpIGZpbmFsOwogcHJpdmF0ZToKICAg
ICBSZXRhaW5QdHI8aWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4+IG1fZGVsZWdh
dGU7CiB9OwpAQCAtNTU3LDIxICs1NTksMjIgQEAgcHJpdmF0ZToKIAogbmFtZXNwYWNlIEluc3Bl
Y3RvciB7CiAKLXZvaWQgT2JqQ0luc3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpDb21t
YW5kKGxvbmcgcmVxdWVzdElkKQordm9pZCBPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3Bh
dGNoZXI6OkNvbW1hbmQobG9uZyBwcm90b2NvbF9jYWxsSWQpCiB7CiAgICAgaWYgKCFbbV9kZWxl
Z2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKENvbW1hbmRXaXRoRXJyb3JDYWxsYmFj
azpzdWNjZXNzQ2FsbGJhY2s6KV0pIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVw
b3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RG
b3VuZCwgIidEb21haW4uQ29tbWFuZCcgd2FzIG5vdCBmb3VuZCJfcyk7CisgICAgICAgIGJhY2tl
bmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocHJvdG9jb2xfY2FsbElkLCBCYWNr
ZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRG9tYWluLkNvbW1hbmQnIHdhcyBub3Qg
Zm91bmQiX3MpOwogICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9y
cygpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4o
TlNTdHJpbmcgKmVycm9yKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFBy
b3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVy
cm9yKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihw
cm90b2NvbF9jYWxsSWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwog
ICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgIH07
CiAKICAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hl
cigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxz
ZSk7CisgICAgICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNy
ZWF0ZSgpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocHJvdG9j
b2xfY2FsbElkLCBXVEZNb3ZlKHByb3RvY29sX2pzb25NZXNzYWdlKSwgZmFsc2UpOwogICAgIH07
CiAKICAgICBbbV9kZWxlZ2F0ZSBDb21tYW5kV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFj
ayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsKQEAgLTc3Myw5ICs3NzYsOSBAQCB1
c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwogewogICAgIGNvbnN0IEZyb250ZW5kUm91dGVyJiBy
b3V0ZXIgPSBfY29udHJvbGxlci0+ZnJvbnRlbmRSb3V0ZXIoKTsKIAotICAgIFJlZjxKU09OOjpP
YmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBqc29uTWVz
c2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJEb21haW4uRXZlbnQiX3MpOwotICAgIHJvdXRl
ci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKKyAgICBhdXRvIHByb3Rv
Y29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBwcm90b2NvbF9q
c29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJEb21haW4uRXZlbnQiX3MpOworICAg
IHJvdXRlci5zZW5kRXZlbnQocHJvdG9jb2xfanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsK
IH0KIAogQGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2RvbWFpbi10YXJnZXRUeXBlcy5qc29uLXJlc3VsdCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9kb21h
aW4tdGFyZ2V0VHlwZXMuanNvbi1yZXN1bHQKaW5kZXggMGFkNmQwNDQ2MDFjMmVhNDA4Mzg4YmNm
MjU0ZmM2NjU0NWY3Y2QwNC4uODQ5ZjNiNzI5Y2FjZDhiOWYxMTRjOGI5YmZiMjE3MTkxZDI3Mjkx
ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2V4cGVjdGVkL2RvbWFpbi10YXJnZXRUeXBlcy5qc29uLXJlc3VsdAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZG9tYWluLXRh
cmdldFR5cGVzLmpzb24tcmVzdWx0CkBAIC03MCw3ICs3MCw3IEBAIEluc3BlY3RvckJhY2tlbmQu
YWN0aXZhdGVEb21haW4oIkRvbWFpbiIsIG51bGwpOwogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9B
TFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgor
I2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CiAKQEAgLTg4LDcgKzg4LDcgQEAgcHJpdmF0ZToK
IGNsYXNzIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyIDogcHVibGljIEFsdGVybmF0
ZUJhY2tlbmREaXNwYXRjaGVyIHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5BbHRlcm5hdGVEb21h
aW5CYWNrZW5kRGlzcGF0Y2hlcigpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBDb21tYW5kKGxvbmcg
Y2FsbElkKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIENvbW1hbmQobG9uZyBwcm90b2NvbF9jYWxs
SWQpID0gMDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgpAQCAtMTMwLDExICsxMzAs
MTQgQEAgcHVibGljOgogCiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVk
ZSA8dHVwbGU+CisjaW5jbHVkZSA8d3RmL0V4cGVjdGVkLmg+CisjaW5jbHVkZSA8d3RmL09wdGlv
bmFsLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNw
ZWN0b3IgewogCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKwogCiAjaWYgRU5BQkxFKElO
U1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiBjbGFzcyBBbHRlcm5hdGVEb21haW5CYWNr
ZW5kRGlzcGF0Y2hlcjsKQEAgLTE0Miw3ICsxNDUsNyBAQCBjbGFzcyBBbHRlcm5hdGVEb21haW5C
YWNrZW5kRGlzcGF0Y2hlcjsKIAogY2xhc3MgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVy
IHsKIHB1YmxpYzoKLSAgICB2aXJ0dWFsIHZvaWQgQ29tbWFuZChFcnJvclN0cmluZyYpID0gMDsK
KyAgICB2aXJ0dWFsIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IENvbW1hbmQoKSA9IDA7
CiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB+RG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVy
KCk7CiB9OwpAQCAtMTUwLDkgKzE1Myw5IEBAIHByb3RlY3RlZDoKIGNsYXNzIERvbWFpbkJhY2tl
bmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVy
IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPERvbWFpbkJhY2tlbmREaXNwYXRjaGVyPiBjcmVh
dGUoQmFja2VuZERpc3BhdGNoZXImLCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsK
LSAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwg
UmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKSBmaW5hbDsKKyAgICB2b2lkIGRpc3BhdGNoKGxv
bmcgcHJvdG9jb2xfY2FsbElkLCBjb25zdCBTdHJpbmcmIHByb3RvY29sX21ldGhvZCwgUmVmPEpT
T046Ok9iamVjdD4mJiBwcm90b2NvbF9tZXNzYWdlKSBmaW5hbDsKIHByaXZhdGU6Ci0gICAgdm9p
ZCBDb21tYW5kKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRl
cnMpOworICAgIHZvaWQgQ29tbWFuZChsb25nIHByb3RvY2xfY2FsbElkLCBSZWZQdHI8SlNPTjo6
T2JqZWN0PiYmIHByb3RvY29sX3BhcmFtZXRlcnMpOwogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQogcHVibGljOgogICAgIHZvaWQgc2V0QWx0ZXJuYXRlRGlzcGF0
Y2hlcihBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlciogYWx0ZXJuYXRlRGlzcGF0Y2hl
cikgeyBtX2FsdGVybmF0ZURpc3BhdGNoZXIgPSBhbHRlcm5hdGVEaXNwYXRjaGVyOyB9CkBAIC0y
MDEsOSArMjA0LDcgQEAgcHJpdmF0ZToKICNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJz
LmgiCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5o
PgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJv
eWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiAjaWYgRU5BQkxFKElOU1BF
Q1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAjaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tl
bmREaXNwYXRjaGVycy5oIgpAQCAtMjI1LDM4ICsyMjYsMzggQEAgRG9tYWluQmFja2VuZERpc3Bh
dGNoZXI6OkRvbWFpbkJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5k
RGlzcGEKICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21h
aW4oIkRvbWFpbiJfcywgdGhpcyk7CiB9CiAKLXZvaWQgRG9tYWluQmFja2VuZERpc3BhdGNoZXI6
OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046
Ok9iamVjdD4mJiBtZXNzYWdlKQordm9pZCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0
Y2gobG9uZyBwcm90b2NvbF9jYWxsSWQsIGNvbnN0IFN0cmluZyYgcHJvdG9jb2xfbWV0aG9kLCBS
ZWY8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX21lc3NhZ2UpCiB7CiAgICAgUmVmPERvbWFpbkJh
Y2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKIAotICAgIFJlZlB0cjxKU09OOjpPYmpl
Y3Q+IHBhcmFtZXRlcnM7Ci0gICAgbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3MsIHBhcmFt
ZXRlcnMpOworICAgIGF1dG8gcHJvdG9jb2xfcGFyYW1ldGVycyA9IHByb3RvY29sX21lc3NhZ2Ut
PmdldE9iamVjdCgicGFyYW1zIl9zKTsKIAotICAgIGlmIChtZXRob2QgPT0gIkNvbW1hbmQiKSB7
Ci0gICAgICAgIENvbW1hbmQocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKKyAgICBp
ZiAocHJvdG9jb2xfbWV0aG9kID09ICJDb21tYW5kIikgeworICAgICAgICBDb21tYW5kKHByb3Rv
Y29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9wYXJhbWV0ZXJzKSk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKLSAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9y
KEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEb21haW4uIiArIG1ldGhvZCAr
ICInIHdhcyBub3QgZm91bmQiKTsKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90
b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEb21haW4uIiAr
IHByb3RvY29sX21ldGhvZCArICInIHdhcyBub3QgZm91bmQiKTsKIH0KIAotdm9pZCBEb21haW5C
YWNrZW5kRGlzcGF0Y2hlcjo6Q29tbWFuZChsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9i
amVjdD4mJikKK3ZvaWQgRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkNvbW1hbmQobG9uZyBwcm90
b2NvbF9jYWxsSWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCiB7CiAjaWYgRU5BQkxFKElOU1BF
Q1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAgICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hl
cikgewotICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPkNvbW1hbmQocmVxdWVzdElkKTsK
KyAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5Db21tYW5kKHByb3RvY29sX2NhbGxJZCk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRF
Uk5BVEVfRElTUEFUQ0hFUlMpCiAKLSAgICBFcnJvclN0cmluZyBlcnJvcjsKLSAgICBSZWY8SlNP
Tjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIG1fYWdlbnQt
PkNvbW1hbmQoZXJyb3IpOworICAgIGF1dG8gcmVzdWx0ID0gbV9hZ2VudC0+Q29tbWFuZCgpOwor
ICAgIGlmICghcmVzdWx0KSB7CisgICAgICAgIEFTU0VSVCghcmVzdWx0LmVycm9yKCkuaXNFbXB0
eSgpKTsKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihC
YWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIHJlc3VsdC5lcnJvcigpKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KIAotICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCi0gICAgICAgIG1fYmFj
a2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwg
ZmFsc2UpOwotICAgIGVsc2UKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJv
dG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3Ip
KTsKKyAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUo
KTsKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocHJvdG9jb2xfY2FsbElk
LCBXVEZNb3ZlKHByb3RvY29sX2pzb25NZXNzYWdlKSwgZmFsc2UpOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBJbnNwZWN0b3IKQEAgLTI5Nyw2ICsyOTgsNyBAQCB2b2lkIERvbWFpbkJhY2tlbmREaXNw
YXRjaGVyOjpDb21tYW5kKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQog
CiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPHd0Zi9KU09OVmFs
dWVzLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewpAQCAtMzQ5LDE2ICszNTEsMTUgQEAg
cHJpdmF0ZToKICNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgogCiAjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3
dGYvdGV4dC9DU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCiB2b2lkIERvbWFp
bkZyb250ZW5kRGlzcGF0Y2hlcjo6RXZlbnQoKQogewotICAgIFJlZjxKU09OOjpPYmplY3Q+IGpz
b25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0
U3RyaW5nKCJtZXRob2QiX3MsICJEb21haW4uRXZlbnQiX3MpOworICAgIGF1dG8gcHJvdG9jb2xf
anNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIHByb3RvY29sX2pzb25N
ZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRvbWFpbi5FdmVudCJfcyk7CiAKLSAgICBt
X2Zyb250ZW5kUm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwor
ICAgIG1fZnJvbnRlbmRSb3V0ZXIuc2VuZEV2ZW50KHByb3RvY29sX2pzb25NZXNzYWdlLT50b0pT
T05TdHJpbmcoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgpAQCAtMzk4LDcgKzM5
OSw5IEBAIHZvaWQgRG9tYWluRnJvbnRlbmREaXNwYXRjaGVyOjpFdmVudCgpCiAjcHJhZ21hIG9u
Y2UKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4K
LSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+
CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC00NTIsOCArNDU1LDcgQEAgbmFtZXNw
YWNlIFByb3RvY29sIHsKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJUZXN0UHJvdG9j
b2xPYmplY3RzLmgiCiAKLSNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYv
dGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KIAogbmFtZXNwYWNl
IEluc3BlY3RvciB7CiAKQEAgLTUwOSw3ICs1MTEsNyBAQCBjbGFzcyBPYmpDSW5zcGVjdG9yRG9t
YWluQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgQWx0ZXJuYXRlRG9tYWluQmFja2Vu
ZAogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIE9iakNJbnNwZWN0
b3JEb21haW5CYWNrZW5kRGlzcGF0Y2hlcihpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5k
bGVyPiBoYW5kbGVyKSB7IG1fZGVsZWdhdGUgPSBoYW5kbGVyOyB9Ci0gICAgdm9pZCBDb21tYW5k
KGxvbmcgcmVxdWVzdElkKSBmaW5hbDsKKyAgICB2b2lkIENvbW1hbmQobG9uZyBwcm90b2NvbF9j
YWxsSWQpIGZpbmFsOwogcHJpdmF0ZToKICAgICBSZXRhaW5QdHI8aWQ8VGVzdFByb3RvY29sRG9t
YWluRG9tYWluSGFuZGxlcj4+IG1fZGVsZWdhdGU7CiB9OwpAQCAtNTU3LDIxICs1NTksMjIgQEAg
cHJpdmF0ZToKIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKLXZvaWQgT2JqQ0luc3BlY3RvckRv
bWFpbkJhY2tlbmREaXNwYXRjaGVyOjpDb21tYW5kKGxvbmcgcmVxdWVzdElkKQordm9pZCBPYmpD
SW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkNvbW1hbmQobG9uZyBwcm90b2NvbF9j
YWxsSWQpCiB7CiAgICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVj
dG9yKENvbW1hbmRXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6KV0pIHsKLSAgICAg
ICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJh
Y2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEb21haW4uQ29tbWFuZCcgd2FzIG5v
dCBmb3VuZCJfcyk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29s
RXJyb3IocHJvdG9jb2xfY2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQs
ICInRG9tYWluLkNvbW1hbmQnIHdhcyBub3QgZm91bmQiX3MpOwogICAgICAgICBiYWNrZW5kRGlz
cGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
CiAgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7Ci0gICAgICAgIGJh
Y2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5k
RGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNo
ZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxsSWQsIEJhY2tlbmREaXNwYXRj
aGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwogICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5z
ZW5kUGVuZGluZ0Vycm9ycygpOwogICAgIH07CiAKICAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBe
ewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBK
U09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7CisgICAgICAgIGF1dG8gcHJvdG9jb2xfanNv
bk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBiYWNrZW5kRGlzcGF0
Y2hlcigpLT5zZW5kUmVzcG9uc2UocHJvdG9jb2xfY2FsbElkLCBXVEZNb3ZlKHByb3RvY29sX2pz
b25NZXNzYWdlKSwgZmFsc2UpOwogICAgIH07CiAKICAgICBbbV9kZWxlZ2F0ZSBDb21tYW5kV2l0
aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxi
YWNrXTsKQEAgLTc3Myw5ICs3NzYsOSBAQCB1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwogewog
ICAgIGNvbnN0IEZyb250ZW5kUm91dGVyJiByb3V0ZXIgPSBfY29udHJvbGxlci0+ZnJvbnRlbmRS
b3V0ZXIoKTsKIAotICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2Jq
ZWN0OjpjcmVhdGUoKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJE
b21haW4uRXZlbnQiX3MpOwotICAgIHJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNP
TlN0cmluZygpKTsKKyAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0
OjpjcmVhdGUoKTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2Qi
X3MsICJEb21haW4uRXZlbnQiX3MpOworICAgIHJvdXRlci5zZW5kRXZlbnQocHJvdG9jb2xfanNv
bk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKIH0KIAogQGVuZApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2RvbWFpbnMt
d2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZG9tYWlucy13aXRoLXZhcnlp
bmctY29tbWFuZC1zaXplcy5qc29uLXJlc3VsdAppbmRleCA0NzViODdiZDBjOGRhODUyYjVmOTkw
Y2IyMWNiM2MyZTA3NjA5OTg0Li40MTlmOTJlZGExM2FlYzIyZDhmNGFmMmFmMTdmMDVmNzVkMjQx
YTc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZXhwZWN0ZWQvZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uLXJl
c3VsdAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
ZXhwZWN0ZWQvZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uLXJlc3VsdApA
QCAtNzksNyArNzksNyBAQCBJbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJOZXR3b3Jr
MyIsIG51bGwpOwogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMp
CiAKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2Nv
bE9iamVjdHMuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlci5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91
dGVyLmg+CiAKQEAgLTk3LDE5ICs5NywxOSBAQCBwcml2YXRlOgogY2xhc3MgQWx0ZXJuYXRlTmV0
d29yazFCYWNrZW5kRGlzcGF0Y2hlciA6IHB1YmxpYyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hl
ciB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+QWx0ZXJuYXRlTmV0d29yazFCYWNrZW5kRGlzcGF0
Y2hlcigpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UxKGxvbmcgY2FsbElkKSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTEobG9uZyBwcm90b2NvbF9jYWxsSWQp
ID0gMDsKIH07CiAKIGNsYXNzIEFsdGVybmF0ZU5ldHdvcmszQmFja2VuZERpc3BhdGNoZXIgOiBw
dWJsaWMgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewogcHVibGljOgogICAgIHZpcnR1YWwg
fkFsdGVybmF0ZU5ldHdvcmszQmFja2VuZERpc3BhdGNoZXIoKSB7IH0KLSAgICB2aXJ0dWFsIHZv
aWQgbG9hZFJlc291cmNlMShsb25nIGNhbGxJZCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBsb2Fk
UmVzb3VyY2UyKGxvbmcgY2FsbElkKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJj
ZTMobG9uZyBjYWxsSWQpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlNChsb25n
IGNhbGxJZCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2U1KGxvbmcgY2FsbElk
KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTYobG9uZyBjYWxsSWQpID0gMDsK
LSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlNyhsb25nIGNhbGxJZCkgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UxKGxvbmcgcHJvdG9jb2xfY2FsbElkKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTIobG9uZyBwcm90b2NvbF9jYWxsSWQpID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlMyhsb25nIHByb3RvY29sX2NhbGxJZCkgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2U0KGxvbmcgcHJvdG9jb2xfY2FsbElkKSA9IDA7
CisgICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTUobG9uZyBwcm90b2NvbF9jYWxsSWQpID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlNihsb25nIHByb3RvY29sX2NhbGxJZCkg
PSAwOworICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2U3KGxvbmcgcHJvdG9jb2xfY2FsbElk
KSA9IDA7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKQEAgLTE1MSwxMSArMTUxLDE0
IEBAIHB1YmxpYzoKIAogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUg
PHR1cGxlPgorI2luY2x1ZGUgPHd0Zi9FeHBlY3RlZC5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25h
bC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVj
dG9yIHsKIAotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKIAogI2lmIEVOQUJMRShJTlNQ
RUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogY2xhc3MgQWx0ZXJuYXRlTmV0d29yazFCYWNr
ZW5kRGlzcGF0Y2hlcjsKQEAgLTE2NCwyMCArMTY3LDIwIEBAIGNsYXNzIEFsdGVybmF0ZU5ldHdv
cmszQmFja2VuZERpc3BhdGNoZXI7CiAKIGNsYXNzIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyIHsKIHB1YmxpYzoKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlMShFcnJvclN0
cmluZyYpID0gMDsKKyAgICB2aXJ0dWFsIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGxv
YWRSZXNvdXJjZTEoKSA9IDA7CiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB+TmV0d29yazFCYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXIoKTsKIH07CiAKIGNsYXNzIE5ldHdvcmszQmFja2VuZERpc3Bh
dGNoZXJIYW5kbGVyIHsKIHB1YmxpYzoKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlMShF
cnJvclN0cmluZyYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlMihFcnJvclN0
cmluZyYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlMyhFcnJvclN0cmluZyYp
ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlNChFcnJvclN0cmluZyYpID0gMDsK
LSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlNShFcnJvclN0cmluZyYpID0gMDsKLSAgICB2
aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlNihFcnJvclN0cmluZyYpID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgbG9hZFJlc291cmNlNyhFcnJvclN0cmluZyYpID0gMDsKKyAgICB2aXJ0dWFsIFByb3Rv
Y29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGxvYWRSZXNvdXJjZTEoKSA9IDA7CisgICAgdmlydHVh
bCBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBsb2FkUmVzb3VyY2UyKCkgPSAwOworICAg
IHZpcnR1YWwgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gbG9hZFJlc291cmNlMygpID0g
MDsKKyAgICB2aXJ0dWFsIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGxvYWRSZXNvdXJj
ZTQoKSA9IDA7CisgICAgdmlydHVhbCBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBsb2Fk
UmVzb3VyY2U1KCkgPSAwOworICAgIHZpcnR1YWwgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9p
ZD4gbG9hZFJlc291cmNlNigpID0gMDsKKyAgICB2aXJ0dWFsIFByb3RvY29sOjpFcnJvclN0cmlu
Z09yPHZvaWQ+IGxvYWRSZXNvdXJjZTcoKSA9IDA7CiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB+
TmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKTsKIH07CkBAIC0xODUsOSArMTg4LDkg
QEAgcHJvdGVjdGVkOgogY2xhc3MgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1
YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7CiBwdWJsaWM6CiAgICAgc3RhdGlj
IFJlZjxOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUoQmFja2VuZERpc3BhdGNoZXIm
LCBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwotICAgIHZvaWQgZGlzcGF0Y2go
bG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYm
IG1lc3NhZ2UpIGZpbmFsOworICAgIHZvaWQgZGlzcGF0Y2gobG9uZyBwcm90b2NvbF9jYWxsSWQs
IGNvbnN0IFN0cmluZyYgcHJvdG9jb2xfbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIHByb3Rv
Y29sX21lc3NhZ2UpIGZpbmFsOwogcHJpdmF0ZToKLSAgICB2b2lkIGxvYWRSZXNvdXJjZTEobG9u
ZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7CisgICAgdm9p
ZCBsb2FkUmVzb3VyY2UxKGxvbmcgcHJvdG9jbF9jYWxsSWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+
JiYgcHJvdG9jb2xfcGFyYW1ldGVycyk7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVf
RElTUEFUQ0hFUlMpCiBwdWJsaWM6CiAgICAgdm9pZCBzZXRBbHRlcm5hdGVEaXNwYXRjaGVyKEFs
dGVybmF0ZU5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIqIGFsdGVybmF0ZURpc3BhdGNoZXIpIHsg
bV9hbHRlcm5hdGVEaXNwYXRjaGVyID0gYWx0ZXJuYXRlRGlzcGF0Y2hlcjsgfQpAQCAtMjAyLDE1
ICsyMDUsMTUgQEAgcHJpdmF0ZToKIGNsYXNzIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXIgZmlu
YWwgOiBwdWJsaWMgU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIgewogcHVibGljOgogICAg
IHN0YXRpYyBSZWY8TmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEJhY2tlbmREaXNw
YXRjaGVyJiwgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKLSAgICB2b2lkIGRp
c3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9i
amVjdD4mJiBtZXNzYWdlKSBmaW5hbDsKKyAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcHJvdG9jb2xf
Y2FsbElkLCBjb25zdCBTdHJpbmcmIHByb3RvY29sX21ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4m
JiBwcm90b2NvbF9tZXNzYWdlKSBmaW5hbDsKIHByaXZhdGU6Ci0gICAgdm9pZCBsb2FkUmVzb3Vy
Y2UxKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOwot
ICAgIHZvaWQgbG9hZFJlc291cmNlMihsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVj
dD4mJiBwYXJhbWV0ZXJzKTsKLSAgICB2b2lkIGxvYWRSZXNvdXJjZTMobG9uZyByZXF1ZXN0SWQs
IFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7Ci0gICAgdm9pZCBsb2FkUmVzb3Vy
Y2U0KGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOwot
ICAgIHZvaWQgbG9hZFJlc291cmNlNShsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVj
dD4mJiBwYXJhbWV0ZXJzKTsKLSAgICB2b2lkIGxvYWRSZXNvdXJjZTYobG9uZyByZXF1ZXN0SWQs
IFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7Ci0gICAgdm9pZCBsb2FkUmVzb3Vy
Y2U3KGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOwor
ICAgIHZvaWQgbG9hZFJlc291cmNlMShsb25nIHByb3RvY2xfY2FsbElkLCBSZWZQdHI8SlNPTjo6
T2JqZWN0PiYmIHByb3RvY29sX3BhcmFtZXRlcnMpOworICAgIHZvaWQgbG9hZFJlc291cmNlMihs
b25nIHByb3RvY2xfY2FsbElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX3BhcmFt
ZXRlcnMpOworICAgIHZvaWQgbG9hZFJlc291cmNlMyhsb25nIHByb3RvY2xfY2FsbElkLCBSZWZQ
dHI8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX3BhcmFtZXRlcnMpOworICAgIHZvaWQgbG9hZFJl
c291cmNlNChsb25nIHByb3RvY2xfY2FsbElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHByb3Rv
Y29sX3BhcmFtZXRlcnMpOworICAgIHZvaWQgbG9hZFJlc291cmNlNShsb25nIHByb3RvY2xfY2Fs
bElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX3BhcmFtZXRlcnMpOworICAgIHZv
aWQgbG9hZFJlc291cmNlNihsb25nIHByb3RvY2xfY2FsbElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0
PiYmIHByb3RvY29sX3BhcmFtZXRlcnMpOworICAgIHZvaWQgbG9hZFJlc291cmNlNyhsb25nIHBy
b3RvY2xfY2FsbElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX3BhcmFtZXRlcnMp
OwogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogcHVibGljOgog
ICAgIHZvaWQgc2V0QWx0ZXJuYXRlRGlzcGF0Y2hlcihBbHRlcm5hdGVOZXR3b3JrM0JhY2tlbmRE
aXNwYXRjaGVyKiBhbHRlcm5hdGVEaXNwYXRjaGVyKSB7IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciA9
IGFsdGVybmF0ZURpc3BhdGNoZXI7IH0KQEAgLTI1OSw5ICsyNjIsNyBAQCBwcml2YXRlOgogI2lu
Y2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMu
aD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9D
U3RyaW5nLmg+CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykK
ICNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCkBAIC0yODQsMzgg
KzI4NSwzOCBAQCBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpOZXR3b3JrMUJhY2tlbmREaXNw
YXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRAogICAgIG1fYmFja2VuZERpc3BhdGNo
ZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbigiTmV0d29yazEiX3MsIHRoaXMpOwogfQog
Ci12b2lkIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElk
LCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKQordm9p
ZCBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHByb3RvY29sX2NhbGxJ
ZCwgY29uc3QgU3RyaW5nJiBwcm90b2NvbF9tZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgcHJv
dG9jb2xfbWVzc2FnZSkKIHsKICAgICBSZWY8TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcj4gcHJv
dGVjdCgqdGhpcyk7CiAKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzOwotICAg
IG1lc3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9zLCBwYXJhbWV0ZXJzKTsKKyAgICBhdXRvIHBy
b3RvY29sX3BhcmFtZXRlcnMgPSBwcm90b2NvbF9tZXNzYWdlLT5nZXRPYmplY3QoInBhcmFtcyJf
cyk7CiAKLSAgICBpZiAobWV0aG9kID09ICJsb2FkUmVzb3VyY2UxIikgewotICAgICAgICBsb2Fk
UmVzb3VyY2UxKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7CisgICAgaWYgKHByb3Rv
Y29sX21ldGhvZCA9PSAibG9hZFJlc291cmNlMSIpIHsKKyAgICAgICAgbG9hZFJlc291cmNlMShw
cm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJvdG9jb2xfcGFyYW1ldGVycykpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xF
cnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29yazEuIiArIG1l
dGhvZCArICInIHdhcyBub3QgZm91bmQiKTsKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBv
cnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidOZXR3
b3JrMS4iICsgcHJvdG9jb2xfbWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOwogfQogCi12b2lk
IE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTEobG9uZyByZXF1ZXN0SWQs
IFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCit2b2lkIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI6
OmxvYWRSZXNvdXJjZTEobG9uZyBwcm90b2NvbF9jYWxsSWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+
JiYpCiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAgICAg
aWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNo
ZXItPmxvYWRSZXNvdXJjZTEocmVxdWVzdElkKTsKKyAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRj
aGVyLT5sb2FkUmVzb3VyY2UxKHByb3RvY29sX2NhbGxJZCk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAK
LSAgICBFcnJvclN0cmluZyBlcnJvcjsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBK
U09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJjZTEoZXJyb3Ip
OworICAgIGF1dG8gcmVzdWx0ID0gbV9hZ2VudC0+bG9hZFJlc291cmNlMSgpOworICAgIGlmICgh
cmVzdWx0KSB7CisgICAgICAgIEFTU0VSVCghcmVzdWx0LmVycm9yKCkuaXNFbXB0eSgpKTsKKyAg
ICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlz
cGF0Y2hlcjo6U2VydmVyRXJyb3IsIHJlc3VsdC5lcnJvcigpKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KIAotICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCi0gICAgICAgIG1fYmFja2VuZERpc3Bh
dGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2UpOwot
ICAgIGVsc2UKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJv
cihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKKyAgICBh
dXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBt
X2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocHJvdG9jb2xfY2FsbElkLCBXVEZNb3Zl
KHByb3RvY29sX2pzb25NZXNzYWdlKSwgZmFsc2UpOwogfQogCiBSZWY8TmV0d29yazNCYWNrZW5k
RGlzcGF0Y2hlcj4gTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6Y3JlYXRlKEJhY2tlbmREaXNw
YXRjaGVyJiBiYWNrZW5kRGlzcGF0Y2hlciwgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXIqIGFnZW50KQpAQCAtMzMwLDE0ICszMzEsMTMgQEAgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hl
cjo6TmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZEQK
ICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4oIk5l
dHdvcmszIl9zLCB0aGlzKTsKIH0KIAotdm9pZCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpk
aXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpP
YmplY3Q+JiYgbWVzc2FnZSkKK3ZvaWQgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0
Y2gobG9uZyBwcm90b2NvbF9jYWxsSWQsIGNvbnN0IFN0cmluZyYgcHJvdG9jb2xfbWV0aG9kLCBS
ZWY8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX21lc3NhZ2UpCiB7CiAgICAgUmVmPE5ldHdvcmsz
QmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOwogCi0gICAgUmVmUHRyPEpTT046Ok9i
amVjdD4gcGFyYW1ldGVyczsKLSAgICBtZXNzYWdlLT5nZXRPYmplY3QoInBhcmFtcyJfcywgcGFy
YW1ldGVycyk7CisgICAgYXV0byBwcm90b2NvbF9wYXJhbWV0ZXJzID0gcHJvdG9jb2xfbWVzc2Fn
ZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3MpOwogCi0gICAgdXNpbmcgQ2FsbEhhbmRsZXIgPSB2b2lk
IChOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjoqKShsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpT
T046Ok9iamVjdD4mJiBtZXNzYWdlKTsKKyAgICB1c2luZyBDYWxsSGFuZGxlciA9IHZvaWQgKE5l
dHdvcmszQmFja2VuZERpc3BhdGNoZXI6OiopKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBSZWZQdHI8
SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX21lc3NhZ2UpOwogICAgIHVzaW5nIERpc3BhdGNoTWFw
ID0gSGFzaE1hcDxTdHJpbmcsIENhbGxIYW5kbGVyPjsKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8RGlzcGF0Y2hNYXA+IGRpc3BhdGNoTWFwOwogICAgIGlmIChkaXNwYXRjaE1hcC5nZXQoKS5p
c0VtcHR5KCkpIHsKQEAgLTM1OCwxNDYgKzM1OCwxNTMgQEAgdm9pZCBOZXR3b3JrM0JhY2tlbmRE
aXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2Qs
IFIKICAgICAgICAgICAgIGRpc3BhdGNoTWFwLmdldCgpLmFkZChjb21tYW5kc1tpXS5uYW1lLCBj
b21tYW5kc1tpXS5oYW5kbGVyKTsKICAgICB9CiAKLSAgICBhdXRvIGZpbmRSZXN1bHQgPSBkaXNw
YXRjaE1hcC5nZXQoKS5maW5kKG1ldGhvZCk7CisgICAgYXV0byBmaW5kUmVzdWx0ID0gZGlzcGF0
Y2hNYXAuZ2V0KCkuZmluZChwcm90b2NvbF9tZXRob2QpOwogICAgIGlmIChmaW5kUmVzdWx0ID09
IGRpc3BhdGNoTWFwLmdldCgpLmVuZCgpKSB7Ci0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXIt
PnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAi
J05ldHdvcmszLiIgKyBtZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7CisgICAgICAgIG1fYmFj
a2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1l
dGhvZE5vdEZvdW5kLCAiJ05ldHdvcmszLiIgKyBwcm90b2NvbF9tZXRob2QgKyAiJyB3YXMgbm90
IGZvdW5kIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICAoKCp0aGlzKS4qZmluZFJl
c3VsdC0+dmFsdWUpKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7CisgICAgKCgqdGhp
cykuKmZpbmRSZXN1bHQtPnZhbHVlKShwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJvdG9jb2xf
cGFyYW1ldGVycykpOwogfQogCi12b2lkIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRS
ZXNvdXJjZTEobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCit2b2lkIE5l
dHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTEobG9uZyBwcm90b2NvbF9jYWxs
SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRF
Uk5BVEVfRElTUEFUQ0hFUlMpCiAgICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgewotICAg
ICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmxvYWRSZXNvdXJjZTEocmVxdWVzdElkKTsKKyAg
ICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVzb3VyY2UxKHByb3RvY29sX2NhbGxJ
ZCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9B
TFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAKLSAgICBFcnJvclN0cmluZyBlcnJvcjsKLSAgICBSZWY8
SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIG1fYWdl
bnQtPmxvYWRSZXNvdXJjZTEoZXJyb3IpOworICAgIGF1dG8gcmVzdWx0ID0gbV9hZ2VudC0+bG9h
ZFJlc291cmNlMSgpOworICAgIGlmICghcmVzdWx0KSB7CisgICAgICAgIEFTU0VSVCghcmVzdWx0
LmVycm9yKCkuaXNFbXB0eSgpKTsKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0
UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIHJlc3VsdC5lcnJv
cigpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIGlmICghZXJyb3IubGVuZ3RoKCkp
Ci0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdU
Rk1vdmUocmVzdWx0KSwgZmFsc2UpOwotICAgIGVsc2UKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0
Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3Is
IFdURk1vdmUoZXJyb3IpKTsKKyAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6
T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2Uo
cHJvdG9jb2xfY2FsbElkLCBXVEZNb3ZlKHByb3RvY29sX2pzb25NZXNzYWdlKSwgZmFsc2UpOwog
fQogCi12b2lkIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTIobG9uZyBy
ZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCit2b2lkIE5ldHdvcmszQmFja2VuZERp
c3BhdGNoZXI6OmxvYWRSZXNvdXJjZTIobG9uZyBwcm90b2NvbF9jYWxsSWQsIFJlZlB0cjxKU09O
OjpPYmplY3Q+JiYpCiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hF
UlMpCiAgICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0
ZURpc3BhdGNoZXItPmxvYWRSZXNvdXJjZTIocmVxdWVzdElkKTsKKyAgICAgICAgbV9hbHRlcm5h
dGVEaXNwYXRjaGVyLT5sb2FkUmVzb3VyY2UyKHByb3RvY29sX2NhbGxJZCk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFU
Q0hFUlMpCiAKLSAgICBFcnJvclN0cmluZyBlcnJvcjsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBy
ZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJj
ZTIoZXJyb3IpOworICAgIGF1dG8gcmVzdWx0ID0gbV9hZ2VudC0+bG9hZFJlc291cmNlMigpOwor
ICAgIGlmICghcmVzdWx0KSB7CisgICAgICAgIEFTU0VSVCghcmVzdWx0LmVycm9yKCkuaXNFbXB0
eSgpKTsKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihC
YWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIHJlc3VsdC5lcnJvcigpKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KIAotICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCi0gICAgICAgIG1fYmFj
a2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwg
ZmFsc2UpOwotICAgIGVsc2UKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJv
dG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3Ip
KTsKKyAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUo
KTsKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocHJvdG9jb2xfY2FsbElk
LCBXVEZNb3ZlKHByb3RvY29sX2pzb25NZXNzYWdlKSwgZmFsc2UpOwogfQogCi12b2lkIE5ldHdv
cmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTMobG9uZyByZXF1ZXN0SWQsIFJlZlB0
cjxKU09OOjpPYmplY3Q+JiYpCit2b2lkIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRS
ZXNvdXJjZTMobG9uZyBwcm90b2NvbF9jYWxsSWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCiB7
CiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAgICAgaWYgKG1f
YWx0ZXJuYXRlRGlzcGF0Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmxv
YWRSZXNvdXJjZTMocmVxdWVzdElkKTsKKyAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5s
b2FkUmVzb3VyY2UzKHByb3RvY29sX2NhbGxJZCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAj
ZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAKLSAgICBF
cnJvclN0cmluZyBlcnJvcjsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpP
YmplY3Q6OmNyZWF0ZSgpOwotICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJjZTMoZXJyb3IpOworICAg
IGF1dG8gcmVzdWx0ID0gbV9hZ2VudC0+bG9hZFJlc291cmNlMygpOworICAgIGlmICghcmVzdWx0
KSB7CisgICAgICAgIEFTU0VSVCghcmVzdWx0LmVycm9yKCkuaXNFbXB0eSgpKTsKKyAgICAgICAg
bV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hl
cjo6U2VydmVyRXJyb3IsIHJlc3VsdC5lcnJvcigpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
IAotICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXIt
PnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2UpOwotICAgIGVs
c2UKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNr
ZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKKyAgICBhdXRvIHBy
b3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBtX2JhY2tl
bmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocHJvdG9jb2xfY2FsbElkLCBXVEZNb3ZlKHByb3Rv
Y29sX2pzb25NZXNzYWdlKSwgZmFsc2UpOwogfQogCi12b2lkIE5ldHdvcmszQmFja2VuZERpc3Bh
dGNoZXI6OmxvYWRSZXNvdXJjZTQobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+
JiYpCit2b2lkIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTQobG9uZyBw
cm90b2NvbF9jYWxsSWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCiB7CiAjaWYgRU5BQkxFKElO
U1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAgICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0
Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmxvYWRSZXNvdXJjZTQocmVx
dWVzdElkKTsKKyAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVzb3VyY2U0KHBy
b3RvY29sX2NhbGxJZCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYgLy8gRU5BQkxF
KElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAKLSAgICBFcnJvclN0cmluZyBlcnJv
cjsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgp
OwotICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJjZTQoZXJyb3IpOworICAgIGF1dG8gcmVzdWx0ID0g
bV9hZ2VudC0+bG9hZFJlc291cmNlNCgpOworICAgIGlmICghcmVzdWx0KSB7CisgICAgICAgIEFT
U0VSVCghcmVzdWx0LmVycm9yKCkuaXNFbXB0eSgpKTsKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0
Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3Is
IHJlc3VsdC5lcnJvcigpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIGlmICghZXJy
b3IubGVuZ3RoKCkpCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShy
ZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2UpOwotICAgIGVsc2UKLSAgICAgICAgbV9i
YWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6
U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKKyAgICBhdXRvIHByb3RvY29sX2pzb25NZXNz
YWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5z
ZW5kUmVzcG9uc2UocHJvdG9jb2xfY2FsbElkLCBXVEZNb3ZlKHByb3RvY29sX2pzb25NZXNzYWdl
KSwgZmFsc2UpOwogfQogCi12b2lkIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNv
dXJjZTUobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCit2b2lkIE5ldHdv
cmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTUobG9uZyBwcm90b2NvbF9jYWxsSWQs
IFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5B
VEVfRElTUEFUQ0hFUlMpCiAgICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgewotICAgICAg
ICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmxvYWRSZXNvdXJjZTUocmVxdWVzdElkKTsKKyAgICAg
ICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVzb3VyY2U1KHByb3RvY29sX2NhbGxJZCk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRF
Uk5BVEVfRElTUEFUQ0hFUlMpCiAKLSAgICBFcnJvclN0cmluZyBlcnJvcjsKLSAgICBSZWY8SlNP
Tjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIG1fYWdlbnQt
PmxvYWRSZXNvdXJjZTUoZXJyb3IpOworICAgIGF1dG8gcmVzdWx0ID0gbV9hZ2VudC0+bG9hZFJl
c291cmNlNSgpOworICAgIGlmICghcmVzdWx0KSB7CisgICAgICAgIEFTU0VSVCghcmVzdWx0LmVy
cm9yKCkuaXNFbXB0eSgpKTsKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJv
dG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIHJlc3VsdC5lcnJvcigp
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCi0g
ICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1v
dmUocmVzdWx0KSwgZmFsc2UpOwotICAgIGVsc2UKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdU
Rk1vdmUoZXJyb3IpKTsKKyAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2Jq
ZWN0OjpjcmVhdGUoKTsKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocHJv
dG9jb2xfY2FsbElkLCBXVEZNb3ZlKHByb3RvY29sX2pzb25NZXNzYWdlKSwgZmFsc2UpOwogfQog
Ci12b2lkIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTYobG9uZyByZXF1
ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCit2b2lkIE5ldHdvcmszQmFja2VuZERpc3Bh
dGNoZXI6OmxvYWRSZXNvdXJjZTYobG9uZyBwcm90b2NvbF9jYWxsSWQsIFJlZlB0cjxKU09OOjpP
YmplY3Q+JiYpCiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMp
CiAgICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0ZURp
c3BhdGNoZXItPmxvYWRSZXNvdXJjZTYocmVxdWVzdElkKTsKKyAgICAgICAgbV9hbHRlcm5hdGVE
aXNwYXRjaGVyLT5sb2FkUmVzb3VyY2U2KHByb3RvY29sX2NhbGxJZCk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hF
UlMpCiAKLSAgICBFcnJvclN0cmluZyBlcnJvcjsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1
bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJjZTYo
ZXJyb3IpOworICAgIGF1dG8gcmVzdWx0ID0gbV9hZ2VudC0+bG9hZFJlc291cmNlNigpOworICAg
IGlmICghcmVzdWx0KSB7CisgICAgICAgIEFTU0VSVCghcmVzdWx0LmVycm9yKCkuaXNFbXB0eSgp
KTsKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNr
ZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIHJlc3VsdC5lcnJvcigpKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KIAotICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCi0gICAgICAgIG1fYmFja2Vu
ZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwgZmFs
c2UpOwotICAgIGVsc2UKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9j
b2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsK
KyAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsK
KyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocHJvdG9jb2xfY2FsbElkLCBX
VEZNb3ZlKHByb3RvY29sX2pzb25NZXNzYWdlKSwgZmFsc2UpOwogfQogCi12b2lkIE5ldHdvcmsz
QmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTcobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxK
U09OOjpPYmplY3Q+JiYpCit2b2lkIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNv
dXJjZTcobG9uZyBwcm90b2NvbF9jYWxsSWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCiB7CiAj
aWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAgICAgaWYgKG1fYWx0
ZXJuYXRlRGlzcGF0Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmxvYWRS
ZXNvdXJjZTcocmVxdWVzdElkKTsKKyAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5sb2Fk
UmVzb3VyY2U3KHByb3RvY29sX2NhbGxJZCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5k
aWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAKLSAgICBFcnJv
clN0cmluZyBlcnJvcjsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmpl
Y3Q6OmNyZWF0ZSgpOwotICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJjZTcoZXJyb3IpOworICAgIGF1
dG8gcmVzdWx0ID0gbV9hZ2VudC0+bG9hZFJlc291cmNlNygpOworICAgIGlmICghcmVzdWx0KSB7
CisgICAgICAgIEFTU0VSVCghcmVzdWx0LmVycm9yKCkuaXNFbXB0eSgpKTsKKyAgICAgICAgbV9i
YWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6
U2VydmVyRXJyb3IsIHJlc3VsdC5lcnJvcigpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAot
ICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNl
bmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2UpOwotICAgIGVsc2UK
LSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5k
RGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKKyAgICBhdXRvIHByb3Rv
Y29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBtX2JhY2tlbmRE
aXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocHJvdG9jb2xfY2FsbElkLCBXVEZNb3ZlKHByb3RvY29s
X2pzb25NZXNzYWdlKSwgZmFsc2UpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKQEAg
LTUzOCw2ICs1NDUsNyBAQCB2b2lkIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNv
dXJjZTcobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplYwogCiAjaW5jbHVkZSAiVGVz
dFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVk
ZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5h
bWVzcGFjZSBJbnNwZWN0b3IgewpAQCAtNTgxLDcgKzU4OSw2IEBAIGNsYXNzIEZyb250ZW5kUm91
dGVyOwogI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCiAKICNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi90
ZXh0L0NTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKQEAgLTYyMiw3ICs2Mjks
OSBAQCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9Bc3Nl
cnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvT3B0
aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIElu
c3BlY3RvciB7CiAKQEAgLTY4MSw4ICs2OTAsNyBAQCB1c2luZyBMb2FkZXJJZCA9IFN0cmluZzsK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAK
LSNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+
CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAK
QEAgLTczOSw3ICs3NDcsNyBAQCBjbGFzcyBPYmpDSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlz
cGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBBbHRlcm5hdGVOZXR3b3JrMUJhYwogICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIE9iakNJbnNwZWN0b3JOZXR3b3JrMUJhY2tl
bmREaXNwYXRjaGVyKGlkPFRlc3RQcm90b2NvbE5ldHdvcmsxRG9tYWluSGFuZGxlcj4gaGFuZGxl
cikgeyBtX2RlbGVnYXRlID0gaGFuZGxlcjsgfQotICAgIHZvaWQgbG9hZFJlc291cmNlMShsb25n
IHJlcXVlc3RJZCkgZmluYWw7CisgICAgdm9pZCBsb2FkUmVzb3VyY2UxKGxvbmcgcHJvdG9jb2xf
Y2FsbElkKSBmaW5hbDsKIHByaXZhdGU6CiAgICAgUmV0YWluUHRyPGlkPFRlc3RQcm90b2NvbE5l
dHdvcmsxRG9tYWluSGFuZGxlcj4+IG1fZGVsZWdhdGU7CiB9OwpAQCAtNzQ4LDEzICs3NTYsMTMg
QEAgY2xhc3MgT2JqQ0luc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBw
dWJsaWMgQWx0ZXJuYXRlTmV0d29yazNCYWMKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
IHB1YmxpYzoKICAgICBPYmpDSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcihpZDxU
ZXN0UHJvdG9jb2xOZXR3b3JrM0RvbWFpbkhhbmRsZXI+IGhhbmRsZXIpIHsgbV9kZWxlZ2F0ZSA9
IGhhbmRsZXI7IH0KLSAgICB2b2lkIGxvYWRSZXNvdXJjZTEobG9uZyByZXF1ZXN0SWQpIGZpbmFs
OwotICAgIHZvaWQgbG9hZFJlc291cmNlMihsb25nIHJlcXVlc3RJZCkgZmluYWw7Ci0gICAgdm9p
ZCBsb2FkUmVzb3VyY2UzKGxvbmcgcmVxdWVzdElkKSBmaW5hbDsKLSAgICB2b2lkIGxvYWRSZXNv
dXJjZTQobG9uZyByZXF1ZXN0SWQpIGZpbmFsOwotICAgIHZvaWQgbG9hZFJlc291cmNlNShsb25n
IHJlcXVlc3RJZCkgZmluYWw7Ci0gICAgdm9pZCBsb2FkUmVzb3VyY2U2KGxvbmcgcmVxdWVzdElk
KSBmaW5hbDsKLSAgICB2b2lkIGxvYWRSZXNvdXJjZTcobG9uZyByZXF1ZXN0SWQpIGZpbmFsOwor
ICAgIHZvaWQgbG9hZFJlc291cmNlMShsb25nIHByb3RvY29sX2NhbGxJZCkgZmluYWw7CisgICAg
dm9pZCBsb2FkUmVzb3VyY2UyKGxvbmcgcHJvdG9jb2xfY2FsbElkKSBmaW5hbDsKKyAgICB2b2lk
IGxvYWRSZXNvdXJjZTMobG9uZyBwcm90b2NvbF9jYWxsSWQpIGZpbmFsOworICAgIHZvaWQgbG9h
ZFJlc291cmNlNChsb25nIHByb3RvY29sX2NhbGxJZCkgZmluYWw7CisgICAgdm9pZCBsb2FkUmVz
b3VyY2U1KGxvbmcgcHJvdG9jb2xfY2FsbElkKSBmaW5hbDsKKyAgICB2b2lkIGxvYWRSZXNvdXJj
ZTYobG9uZyBwcm90b2NvbF9jYWxsSWQpIGZpbmFsOworICAgIHZvaWQgbG9hZFJlc291cmNlNyhs
b25nIHByb3RvY29sX2NhbGxJZCkgZmluYWw7CiBwcml2YXRlOgogICAgIFJldGFpblB0cjxpZDxU
ZXN0UHJvdG9jb2xOZXR3b3JrM0RvbWFpbkhhbmRsZXI+PiBtX2RlbGVnYXRlOwogfTsKQEAgLTgw
MiwxNjEgKzgxMCwxNjkgQEAgcHJpdmF0ZToKIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKLXZv
aWQgT2JqQ0luc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTEo
bG9uZyByZXF1ZXN0SWQpCit2b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRj
aGVyOjpsb2FkUmVzb3VyY2UxKGxvbmcgcHJvdG9jb2xfY2FsbElkKQogewogICAgIGlmICghW21f
ZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihsb2FkUmVzb3VyY2UxV2l0aEVy
cm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRj
aGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6
TWV0aG9kTm90Rm91bmQsICInTmV0d29yazEubG9hZFJlc291cmNlMScgd2FzIG5vdCBmb3VuZCJf
cyk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocHJv
dG9jb2xfY2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29y
azEubG9hZFJlc291cmNlMScgd2FzIG5vdCBmb3VuZCJfcyk7CiAgICAgICAgIGJhY2tlbmREaXNw
YXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
ICAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFj
a2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmRE
aXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hl
cigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHByb3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNo
ZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CiAgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNl
bmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgfTsKIAogICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF57
Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIEpT
T046Ok9iamVjdDo6Y3JlYXRlKCksIGZhbHNlKTsKKyAgICAgICAgYXV0byBwcm90b2NvbF9qc29u
TWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIGJhY2tlbmREaXNwYXRj
aGVyKCktPnNlbmRSZXNwb25zZShwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJvdG9jb2xfanNv
bk1lc3NhZ2UpLCBmYWxzZSk7CiAgICAgfTsKIAogICAgIFttX2RlbGVnYXRlIGxvYWRSZXNvdXJj
ZTFXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNz
Q2FsbGJhY2tdOwogfQogCi12b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRj
aGVyOjpsb2FkUmVzb3VyY2UxKGxvbmcgcmVxdWVzdElkKQordm9pZCBPYmpDSW5zcGVjdG9yTmV0
d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMShsb25nIHByb3RvY29sX2NhbGxJ
ZCkKIHsKICAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Io
bG9hZFJlc291cmNlMVdpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazopXSkgewotICAg
ICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwg
QmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdvcmszLmxvYWRSZXNvdXJj
ZTEnIHdhcyBub3QgZm91bmQiX3MpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBv
cnRQcm90b2NvbEVycm9yKHByb3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhv
ZE5vdEZvdW5kLCAiJ05ldHdvcmszLmxvYWRSZXNvdXJjZTEnIHdhcyBub3QgZm91bmQiX3MpOwog
ICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCiAgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVy
cm9yKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3Io
cmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAg
ICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxs
SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwogICAgICAgICBiYWNr
ZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgIH07CiAKICAgICBpZCBz
dWNjZXNzQ2FsbGJhY2sgPSBeewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVz
cG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7CisgICAgICAg
IGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAg
ICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocHJvdG9jb2xfY2FsbElkLCBX
VEZNb3ZlKHByb3RvY29sX2pzb25NZXNzYWdlKSwgZmFsc2UpOwogICAgIH07CiAKICAgICBbbV9k
ZWxlZ2F0ZSBsb2FkUmVzb3VyY2UxV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNj
ZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsKIH0KIAotdm9pZCBPYmpDSW5zcGVjdG9yTmV0
d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMihsb25nIHJlcXVlc3RJZCkKK3Zv
aWQgT2JqQ0luc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTIo
bG9uZyBwcm90b2NvbF9jYWxsSWQpCiB7CiAgICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25kc1Rv
U2VsZWN0b3I6QHNlbGVjdG9yKGxvYWRSZXNvdXJjZTJXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNz
Q2FsbGJhY2s6KV0pIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9j
b2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidO
ZXR3b3JrMy5sb2FkUmVzb3VyY2UyJyB3YXMgbm90IGZvdW5kIl9zKTsKKyAgICAgICAgYmFja2Vu
ZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxsSWQsIEJhY2tl
bmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidOZXR3b3JrMy5sb2FkUmVzb3VyY2UyJyB3
YXMgbm90IGZvdW5kIl9zKTsKICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRp
bmdFcnJvcnMoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlkIGVycm9yQ2FsbGJh
Y2sgPSBeKE5TU3RyaW5nICplcnJvcikgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5y
ZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVy
cm9yLCBlcnJvcik7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29s
RXJyb3IocHJvdG9jb2xfY2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVy
cm9yKTsKICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsK
ICAgICB9OwogCiAgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKLSAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgSlNPTjo6T2JqZWN0OjpjcmVhdGUo
KSwgZmFsc2UpOworICAgICAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2Jq
ZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNl
KHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSksIGZhbHNlKTsK
ICAgICB9OwogCiAgICAgW21fZGVsZWdhdGUgbG9hZFJlc291cmNlMldpdGhFcnJvckNhbGxiYWNr
OmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107CiB9CiAKLXZv
aWQgT2JqQ0luc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTMo
bG9uZyByZXF1ZXN0SWQpCit2b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRj
aGVyOjpsb2FkUmVzb3VyY2UzKGxvbmcgcHJvdG9jb2xfY2FsbElkKQogewogICAgIGlmICghW21f
ZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihsb2FkUmVzb3VyY2UzV2l0aEVy
cm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRj
aGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6
TWV0aG9kTm90Rm91bmQsICInTmV0d29yazMubG9hZFJlc291cmNlMycgd2FzIG5vdCBmb3VuZCJf
cyk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocHJv
dG9jb2xfY2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29y
azMubG9hZFJlc291cmNlMycgd2FzIG5vdCBmb3VuZCJfcyk7CiAgICAgICAgIGJhY2tlbmREaXNw
YXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
ICAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFj
a2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmRE
aXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hl
cigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHByb3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNo
ZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CiAgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNl
bmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgfTsKIAogICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF57
Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIEpT
T046Ok9iamVjdDo6Y3JlYXRlKCksIGZhbHNlKTsKKyAgICAgICAgYXV0byBwcm90b2NvbF9qc29u
TWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIGJhY2tlbmREaXNwYXRj
aGVyKCktPnNlbmRSZXNwb25zZShwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJvdG9jb2xfanNv
bk1lc3NhZ2UpLCBmYWxzZSk7CiAgICAgfTsKIAogICAgIFttX2RlbGVnYXRlIGxvYWRSZXNvdXJj
ZTNXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNz
Q2FsbGJhY2tdOwogfQogCi12b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRj
aGVyOjpsb2FkUmVzb3VyY2U0KGxvbmcgcmVxdWVzdElkKQordm9pZCBPYmpDSW5zcGVjdG9yTmV0
d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNChsb25nIHByb3RvY29sX2NhbGxJ
ZCkKIHsKICAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Io
bG9hZFJlc291cmNlNFdpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazopXSkgewotICAg
ICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwg
QmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdvcmszLmxvYWRSZXNvdXJj
ZTQnIHdhcyBub3QgZm91bmQiX3MpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBv
cnRQcm90b2NvbEVycm9yKHByb3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhv
ZE5vdEZvdW5kLCAiJ05ldHdvcmszLmxvYWRSZXNvdXJjZTQnIHdhcyBub3QgZm91bmQiX3MpOwog
ICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCiAgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVy
cm9yKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3Io
cmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAg
ICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxs
SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwogICAgICAgICBiYWNr
ZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgIH07CiAKICAgICBpZCBz
dWNjZXNzQ2FsbGJhY2sgPSBeewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVz
cG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7CisgICAgICAg
IGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAg
ICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocHJvdG9jb2xfY2FsbElkLCBX
VEZNb3ZlKHByb3RvY29sX2pzb25NZXNzYWdlKSwgZmFsc2UpOwogICAgIH07CiAKICAgICBbbV9k
ZWxlZ2F0ZSBsb2FkUmVzb3VyY2U0V2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNj
ZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsKIH0KIAotdm9pZCBPYmpDSW5zcGVjdG9yTmV0
d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNShsb25nIHJlcXVlc3RJZCkKK3Zv
aWQgT2JqQ0luc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTUo
bG9uZyBwcm90b2NvbF9jYWxsSWQpCiB7CiAgICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25kc1Rv
U2VsZWN0b3I6QHNlbGVjdG9yKGxvYWRSZXNvdXJjZTVXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNz
Q2FsbGJhY2s6KV0pIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9j
b2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidO
ZXR3b3JrMy5sb2FkUmVzb3VyY2U1JyB3YXMgbm90IGZvdW5kIl9zKTsKKyAgICAgICAgYmFja2Vu
ZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxsSWQsIEJhY2tl
bmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidOZXR3b3JrMy5sb2FkUmVzb3VyY2U1JyB3
YXMgbm90IGZvdW5kIl9zKTsKICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRp
bmdFcnJvcnMoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlkIGVycm9yQ2FsbGJh
Y2sgPSBeKE5TU3RyaW5nICplcnJvcikgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5y
ZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVy
cm9yLCBlcnJvcik7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29s
RXJyb3IocHJvdG9jb2xfY2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVy
cm9yKTsKICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsK
ICAgICB9OwogCiAgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKLSAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgSlNPTjo6T2JqZWN0OjpjcmVhdGUo
KSwgZmFsc2UpOworICAgICAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2Jq
ZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNl
KHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSksIGZhbHNlKTsK
ICAgICB9OwogCiAgICAgW21fZGVsZWdhdGUgbG9hZFJlc291cmNlNVdpdGhFcnJvckNhbGxiYWNr
OmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107CiB9CiAKLXZv
aWQgT2JqQ0luc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTYo
bG9uZyByZXF1ZXN0SWQpCit2b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRj
aGVyOjpsb2FkUmVzb3VyY2U2KGxvbmcgcHJvdG9jb2xfY2FsbElkKQogewogICAgIGlmICghW21f
ZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihsb2FkUmVzb3VyY2U2V2l0aEVy
cm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRj
aGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6
TWV0aG9kTm90Rm91bmQsICInTmV0d29yazMubG9hZFJlc291cmNlNicgd2FzIG5vdCBmb3VuZCJf
cyk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocHJv
dG9jb2xfY2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29y
azMubG9hZFJlc291cmNlNicgd2FzIG5vdCBmb3VuZCJfcyk7CiAgICAgICAgIGJhY2tlbmREaXNw
YXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
ICAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFj
a2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmRE
aXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hl
cigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHByb3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNo
ZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CiAgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNl
bmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgfTsKIAogICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF57
Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIEpT
T046Ok9iamVjdDo6Y3JlYXRlKCksIGZhbHNlKTsKKyAgICAgICAgYXV0byBwcm90b2NvbF9qc29u
TWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIGJhY2tlbmREaXNwYXRj
aGVyKCktPnNlbmRSZXNwb25zZShwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJvdG9jb2xfanNv
bk1lc3NhZ2UpLCBmYWxzZSk7CiAgICAgfTsKIAogICAgIFttX2RlbGVnYXRlIGxvYWRSZXNvdXJj
ZTZXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNz
Q2FsbGJhY2tdOwogfQogCi12b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRj
aGVyOjpsb2FkUmVzb3VyY2U3KGxvbmcgcmVxdWVzdElkKQordm9pZCBPYmpDSW5zcGVjdG9yTmV0
d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNyhsb25nIHByb3RvY29sX2NhbGxJ
ZCkKIHsKICAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Io
bG9hZFJlc291cmNlN1dpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazopXSkgewotICAg
ICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwg
QmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdvcmszLmxvYWRSZXNvdXJj
ZTcnIHdhcyBub3QgZm91bmQiX3MpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBv
cnRQcm90b2NvbEVycm9yKHByb3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhv
ZE5vdEZvdW5kLCAiJ05ldHdvcmszLmxvYWRSZXNvdXJjZTcnIHdhcyBub3QgZm91bmQiX3MpOwog
ICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCiAgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVy
cm9yKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3Io
cmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAg
ICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxs
SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwogICAgICAgICBiYWNr
ZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgIH07CiAKICAgICBpZCBz
dWNjZXNzQ2FsbGJhY2sgPSBeewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVz
cG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7CisgICAgICAg
IGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAg
ICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocHJvdG9jb2xfY2FsbElkLCBX
VEZNb3ZlKHByb3RvY29sX2pzb25NZXNzYWdlKSwgZmFsc2UpOwogICAgIH07CiAKICAgICBbbV9k
ZWxlZ2F0ZSBsb2FkUmVzb3VyY2U3V2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNj
ZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9lbnVtLXZhbHVlcy5qc29u
LXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9l
eHBlY3RlZC9lbnVtLXZhbHVlcy5qc29uLXJlc3VsdAppbmRleCA3OTUzY2JmMjE4Mzg4Zjg0Nzc3
MmJkNDEzZDE4MDI2MjlhN2I4MDViLi45OTNmOWFhMjhjNzEzNjZkZGVlN2FkYTFmMWM2MTBjNjcx
YzFmYjI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZXhwZWN0ZWQvZW51bS12YWx1ZXMuanNvbi1yZXN1bHQKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2VudW0tdmFsdWVz
Lmpzb24tcmVzdWx0CkBAIC0zMCwxOCArMzAsMTkgQEAKIAogLy8gVHlwZURvbWFpbgogSW5zcGVj
dG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbigiVHlwZURvbWFpbiIsIG51bGwpOwotSW5zcGVjdG9y
QmFja2VuZC5yZWdpc3RlckVudW0oIlR5cGVEb21haW4uVHlwZURvbWFpbkVudW0iLCB7U2hhcmVk
OiAic2hhcmVkIiwgUmVkOiAicmVkIiwgR3JlZW46ICJncmVlbiIsIEJsdWU6ICJibHVlIn0pOwor
SW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckVudW0oIlR5cGVEb21haW4uRW51bSIsIHtTaGFyZWQ6
ICJzaGFyZWQiLCAxOiAiMSIsIDI6ICIyIn0pOwogSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURv
bWFpbigiVHlwZURvbWFpbiIsIG51bGwpOwogCiAvLyBDb21tYW5kRG9tYWluCiBJbnNwZWN0b3JC
YWNrZW5kLnJlZ2lzdGVyRG9tYWluKCJDb21tYW5kRG9tYWluIiwgbnVsbCk7Ci1JbnNwZWN0b3JC
YWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiQ29tbWFuZERvbWFpbi5jb21tYW5kV2l0aEVudW1SZXR1
cm5WYWx1ZSIsIG51bGwsIFtdLCBbInJldHVyblZhbHVlIl0pOworSW5zcGVjdG9yQmFja2VuZC5y
ZWdpc3RlckNvbW1hbmQoIkNvbW1hbmREb21haW4uY29tbWFuZCIsIG51bGwsIFt7Im5hbWUiOiAi
ZW51bVJlcXVpcmVkIiwgInR5cGUiOiAic3RyaW5nIn0sIHsibmFtZSI6ICJlbnVtT3B0aW9uYWwi
LCAidHlwZSI6ICJzdHJpbmciLCAib3B0aW9uYWwiOiB0cnVlfSwgeyJuYW1lIjogInBhcmFtZXRl
clJlcXVpcmVkIiwgInR5cGUiOiAic3RyaW5nIn0sIHsibmFtZSI6ICJwYXJhbWV0ZXJPcHRpb25h
bCIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IHRydWV9XSwgWyJlbnVtUmVxdWlyZWQi
LCAiZW51bU9wdGlvbmFsIiwgInJldHVyblJlcXVpcmVkIiwgInJldHVybk9wdGlvbmFsIl0pOwog
SW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiQ29tbWFuZERvbWFpbiIsIG51bGwpOwog
CiAvLyBFdmVudERvbWFpbgogSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbigiRXZlbnRE
b21haW4iLCBudWxsKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFbnVtKCJFdmVudERvbWFp
bi5FdmVudFdpdGhFbnVtUGFyYW1ldGVyUGFyYW1ldGVyIiwge1NoYXJlZDogInNoYXJlZCIsIEJs
YWNrOiAiYmxhY2siLCBXaGl0ZTogIndoaXRlIn0pOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3Rl
ckV2ZW50KCJFdmVudERvbWFpbi5ldmVudFdpdGhFbnVtUGFyYW1ldGVyIiwgbnVsbCwgWyJwYXJh
bWV0ZXIiXSk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRW51bSgiRXZlbnREb21haW4uRXZl
bnRQYXJhbWV0ZXJSZXF1aXJlZCIsIHtTaGFyZWQ6ICJzaGFyZWQiLCBTaGFyZWRSZXF1aXJlZDog
InNoYXJlZFJlcXVpcmVkIiwgR3JleTogImdyZXkifSk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lz
dGVyRW51bSgiRXZlbnREb21haW4uRXZlbnRQYXJhbWV0ZXJPcHRpb25hbCIsIHtTaGFyZWQ6ICJz
aGFyZWQiLCBTaGFyZWRPcHRpb25hbDogInNoYXJlZE9wdGlvbmFsIiwgR3JlZW46ICJncmVlbiJ9
KTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFdmVudCgiRXZlbnREb21haW4uZXZlbnQiLCBu
dWxsLCBbImVudW1SZXF1aXJlZCIsICJlbnVtT3B0aW9uYWwiLCAicGFyYW1ldGVyUmVxdWlyZWQi
LCAicGFyYW1ldGVyT3B0aW9uYWwiXSk7CiBJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRXZlbnRE
b21haW5EaXNwYXRjaGVyID0gSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRpc3BhdGNoZXIuYmlu
ZChJbnNwZWN0b3JCYWNrZW5kLCAiRXZlbnREb21haW4iKTsKIEluc3BlY3RvckJhY2tlbmQuYWN0
aXZhdGVEb21haW4oIkV2ZW50RG9tYWluIiwgbnVsbCk7CiAjIyMgRW5kIEZpbGU6IEluc3BlY3Rv
ckJhY2tlbmRDb21tYW5kcy5qcy5pbgpAQCAtODAsNyArODEsNyBAQCBJbnNwZWN0b3JCYWNrZW5k
LmFjdGl2YXRlRG9tYWluKCJFdmVudERvbWFpbiIsIG51bGwpOwogCiAjaWYgRU5BQkxFKElOU1BF
Q1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBl
cy5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgogI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CiAKQEAgLTk4LDcgKzk5LDcgQEAgcHJp
dmF0ZToKIGNsYXNzIEFsdGVybmF0ZUNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlciA6IHB1
YmxpYyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+
QWx0ZXJuYXRlQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyKCkgeyB9Ci0gICAgdmlydHVh
bCB2b2lkIGNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlKGxvbmcgY2FsbElkKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIGNvbW1hbmQobG9uZyBwcm90b2NvbF9jYWxsSWQsIGNvbnN0IFN0cmluZyYg
ZW51bVJlcXVpcmVkLCBjb25zdCBTdHJpbmcmIG9wdF9lbnVtT3B0aW9uYWwsIGNvbnN0IFN0cmlu
ZyYgcGFyYW1ldGVyUmVxdWlyZWQsIGNvbnN0IFN0cmluZyYgb3B0X3BhcmFtZXRlck9wdGlvbmFs
KSA9IDA7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKQEAgLTE0MCwxMSArMTQxLDE0
IEBAIHB1YmxpYzoKIAogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUg
PHR1cGxlPgorI2luY2x1ZGUgPHd0Zi9FeHBlY3RlZC5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25h
bC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVj
dG9yIHsKIAotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKIAogI2lmIEVOQUJMRShJTlNQ
RUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogY2xhc3MgQWx0ZXJuYXRlQ29tbWFuZERvbWFp
bkJhY2tlbmREaXNwYXRjaGVyOwpAQCAtMTUyLDE0ICsxNTYsNyBAQCBjbGFzcyBBbHRlcm5hdGVD
b21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXI7CiAKIGNsYXNzIENvbW1hbmREb21haW5CYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXIgewogcHVibGljOgotICAgIC8vIE5hbWVkIGFmdGVyIHBhcmFt
ZXRlciAncmV0dXJuVmFsdWUnIHdoaWxlIGdlbmVyYXRpbmcgY29tbWFuZC9ldmVudCBjb21tYW5k
V2l0aEVudW1SZXR1cm5WYWx1ZS4KLSAgICBlbnVtIGNsYXNzIFJldHVyblZhbHVlIHsKLSAgICAg
ICAgU2hhcmVkID0gMCwKLSAgICAgICAgQ3lhbiA9IDYsCi0gICAgICAgIE1hZ2VudGEgPSA3LAot
ICAgICAgICBZZWxsb3cgPSA4LAotICAgIH07IC8vIGVudW0gY2xhc3MgUmV0dXJuVmFsdWUKLSAg
ICB2aXJ0dWFsIHZvaWQgY29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUoRXJyb3JTdHJpbmcmLCBD
b21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpSZXR1cm5WYWx1ZSogb3V0X3Jl
dHVyblZhbHVlKSA9IDA7CisgICAgdmlydHVhbCBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxzdGQ6
OnR1cGxlPFByb3RvY29sOjpUeXBlRG9tYWluOjpFbnVtIC8qIGVudW1SZXF1aXJlZCAqLywgT3B0
aW9uYWw8UHJvdG9jb2w6OlR5cGVEb21haW46OkVudW0+IC8qIG9wdF9lbnVtT3B0aW9uYWwgKi8s
IFN0cmluZyAvKiByZXR1cm5SZXF1aXJlZCAqLywgU3RyaW5nIC8qIG9wdF9yZXR1cm5PcHRpb25h
bCAqLz4+IGNvbW1hbmQoUHJvdG9jb2w6OlR5cGVEb21haW46OkVudW0gZW51bVJlcXVpcmVkLCBP
cHRpb25hbDxQcm90b2NvbDo6VHlwZURvbWFpbjo6RW51bT4mJiBvcHRfZW51bU9wdGlvbmFsLCBj
b25zdCBTdHJpbmcmIHBhcmFtZXRlclJlcXVpcmVkLCBjb25zdCBTdHJpbmcmIG9wdF9wYXJhbWV0
ZXJPcHRpb25hbCkgPSAwOwogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgfkNvbW1hbmREb21haW5C
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKTsKIH07CkBAIC0xNjcsOSArMTY0LDkgQEAgcHJvdGVj
dGVkOgogY2xhc3MgQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGlj
IFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVm
PENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEJhY2tlbmREaXNwYXRjaGVy
JiwgQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwotICAgIHZvaWQgZGlz
cGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2Jq
ZWN0PiYmIG1lc3NhZ2UpIGZpbmFsOworICAgIHZvaWQgZGlzcGF0Y2gobG9uZyBwcm90b2NvbF9j
YWxsSWQsIGNvbnN0IFN0cmluZyYgcHJvdG9jb2xfbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYm
IHByb3RvY29sX21lc3NhZ2UpIGZpbmFsOwogcHJpdmF0ZToKLSAgICB2b2lkIGNvbW1hbmRXaXRo
RW51bVJldHVyblZhbHVlKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBh
cmFtZXRlcnMpOworICAgIHZvaWQgY29tbWFuZChsb25nIHByb3RvY2xfY2FsbElkLCBSZWZQdHI8
SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX3BhcmFtZXRlcnMpOwogI2lmIEVOQUJMRShJTlNQRUNU
T1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogcHVibGljOgogICAgIHZvaWQgc2V0QWx0ZXJuYXRl
RGlzcGF0Y2hlcihBbHRlcm5hdGVDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXIqIGFsdGVy
bmF0ZURpc3BhdGNoZXIpIHsgbV9hbHRlcm5hdGVEaXNwYXRjaGVyID0gYWx0ZXJuYXRlRGlzcGF0
Y2hlcjsgfQpAQCAtMjE4LDkgKzIxNSw3IEBAIHByaXZhdGU6CiAjaW5jbHVkZSAiVGVzdEJhY2tl
bmREaXNwYXRjaGVycy5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJv
bnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgogI2luY2x1ZGUgPHd0
Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogI2lm
IEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogI2luY2x1ZGUgIlRlc3RB
bHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKQEAgLTI0Miw0MiArMjM3LDYzIEBAIENvbW1h
bmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Q29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVy
KEJhY2tlbmREaXNwYXRjaGVyCiAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNw
YXRjaGVyRm9yRG9tYWluKCJDb21tYW5kRG9tYWluIl9zLCB0aGlzKTsKIH0KIAotdm9pZCBDb21t
YW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25z
dCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKQordm9pZCBDb21t
YW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcHJvdG9jb2xfY2FsbElk
LCBjb25zdCBTdHJpbmcmIHByb3RvY29sX21ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBwcm90
b2NvbF9tZXNzYWdlKQogewogICAgIFJlZjxDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXI+
IHByb3RlY3QoKnRoaXMpOwogCi0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVyczsK
LSAgICBtZXNzYWdlLT5nZXRPYmplY3QoInBhcmFtcyJfcywgcGFyYW1ldGVycyk7CisgICAgYXV0
byBwcm90b2NvbF9wYXJhbWV0ZXJzID0gcHJvdG9jb2xfbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJh
bXMiX3MpOwogCi0gICAgaWYgKG1ldGhvZCA9PSAiY29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUi
KSB7Ci0gICAgICAgIGNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlKHJlcXVlc3RJZCwgV1RGTW92
ZShwYXJhbWV0ZXJzKSk7CisgICAgaWYgKHByb3RvY29sX21ldGhvZCA9PSAiY29tbWFuZCIpIHsK
KyAgICAgICAgY29tbWFuZChwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJvdG9jb2xfcGFyYW1l
dGVycykpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQs
ICInQ29tbWFuZERvbWFpbi4iICsgbWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOworICAgIG1f
YmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6
Ok1ldGhvZE5vdEZvdW5kLCAiJ0NvbW1hbmREb21haW4uIiArIHByb3RvY29sX21ldGhvZCArICIn
IHdhcyBub3QgZm91bmQiKTsKIH0KIAotdm9pZCBDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNo
ZXI6OmNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNP
Tjo6T2JqZWN0PiYmKQordm9pZCBDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OmNvbW1h
bmQobG9uZyBwcm90b2NvbF9jYWxsSWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xf
cGFyYW1ldGVycykKIHsKKyAgICBhdXRvIGluX2VudW1SZXF1aXJlZF9qc29uID0gbV9iYWNrZW5k
RGlzcGF0Y2hlci0+Z2V0U3RyaW5nKHByb3RvY29sX3BhcmFtZXRlcnMuZ2V0KCksICJlbnVtUmVx
dWlyZWQiX3MsIHRydWUpOworICAgIGF1dG8gaW5fb3B0X2VudW1PcHRpb25hbF9qc29uID0gbV9i
YWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3RyaW5nKHByb3RvY29sX3BhcmFtZXRlcnMuZ2V0KCksICJl
bnVtT3B0aW9uYWwiX3MsIGZhbHNlKTsKKyAgICBhdXRvIGluX3BhcmFtZXRlclJlcXVpcmVkID0g
bV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3RyaW5nKHByb3RvY29sX3BhcmFtZXRlcnMuZ2V0KCks
ICJwYXJhbWV0ZXJSZXF1aXJlZCJfcywgdHJ1ZSk7CisgICAgYXV0byBpbl9vcHRfcGFyYW1ldGVy
T3B0aW9uYWwgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRTdHJpbmcocHJvdG9jb2xfcGFyYW1l
dGVycy5nZXQoKSwgInBhcmFtZXRlck9wdGlvbmFsIl9zLCBmYWxzZSk7CisgICAgaWYgKG1fYmFj
a2VuZERpc3BhdGNoZXItPmhhc1Byb3RvY29sRXJyb3JzKCkpIHsKKyAgICAgICAgbV9iYWNrZW5k
RGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxp
ZFBhcmFtcywgIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnQ29tbWFuZERvbWFpbi5jb21tYW5k
JyBjYW4ndCBiZSBwcm9jZXNzZWQiX3MpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAjaWYg
RU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAgICAgaWYgKG1fYWx0ZXJu
YXRlRGlzcGF0Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmNvbW1hbmRX
aXRoRW51bVJldHVyblZhbHVlKHJlcXVlc3RJZCk7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0
Y2hlci0+Y29tbWFuZChwcm90b2NvbF9jYWxsSWQsIGluX2VudW1SZXF1aXJlZF9qc29uLCBpbl9v
cHRfZW51bU9wdGlvbmFsX2pzb24sIGluX3BhcmFtZXRlclJlcXVpcmVkLCBpbl9vcHRfcGFyYW1l
dGVyT3B0aW9uYWwpOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmIC8vIEVOQUJMRShJ
TlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogCi0gICAgRXJyb3JTdHJpbmcgZXJyb3I7
Ci0gICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsK
LSAgICBDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpSZXR1cm5WYWx1ZSBv
dXRfcmV0dXJuVmFsdWU7Ci0gICAgbV9hZ2VudC0+Y29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUo
ZXJyb3IsICZvdXRfcmV0dXJuVmFsdWUpOworICAgIGF1dG8gaW5fZW51bVJlcXVpcmVkID0gUHJv
dG9jb2w6OlRlc3RIZWxwZXJzOjpwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8UHJvdG9jb2w6OlR5
cGVEb21haW46OkVudW0+KGluX2VudW1SZXF1aXJlZF9qc29uKTsKKyAgICBpZiAoIWluX2VudW1S
ZXF1aXJlZCkgeworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVy
cm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgbWFrZVN0cmluZygiVW5rbm93biBl
bnVtUmVxdWlyZWQ6ICJfcywgaW5fZW51bVJlcXVpcmVkX2pzb24pKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KIAotICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCi0gICAgICAgIHJlc3VsdC0+c2V0
U3RyaW5nKCJyZXR1cm5WYWx1ZSJfcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6
OmdldEVudW1Db25zdGFudFZhbHVlKG91dF9yZXR1cm5WYWx1ZSkpOworICAgIGF1dG8gaW5fb3B0
X2VudW1PcHRpb25hbCA9IFByb3RvY29sOjpUZXN0SGVscGVyczo6cGFyc2VFbnVtVmFsdWVGcm9t
U3RyaW5nPFByb3RvY29sOjpUeXBlRG9tYWluOjpFbnVtPihpbl9vcHRfZW51bU9wdGlvbmFsX2pz
b24pOwogCi0gICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0
Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7Ci0g
ICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9y
KEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOworICAgIGF1
dG8gcmVzdWx0ID0gbV9hZ2VudC0+Y29tbWFuZCgqaW5fZW51bVJlcXVpcmVkLCBXVEZNb3ZlKGlu
X29wdF9lbnVtT3B0aW9uYWwpLCBpbl9wYXJhbWV0ZXJSZXF1aXJlZCwgaW5fb3B0X3BhcmFtZXRl
ck9wdGlvbmFsKTsKKyAgICBpZiAoIXJlc3VsdCkgeworICAgICAgICBBU1NFUlQoIXJlc3VsdC5l
cnJvcigpLmlzRW1wdHkoKSk7CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFBy
b3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCByZXN1bHQuZXJyb3Io
KSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBhdXRvIFtvdXRfZW51bVJlcXVpcmVk
LCBvdXRfb3B0X2VudW1PcHRpb25hbCwgb3V0X3JldHVyblJlcXVpcmVkLCBvdXRfb3B0X3JldHVy
bk9wdGlvbmFsXSA9IFdURk1vdmUocmVzdWx0LnZhbHVlKCkpOworCisgICAgYXV0byBwcm90b2Nv
bF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgcHJvdG9jb2xfanNv
bk1lc3NhZ2UtPnNldFN0cmluZygiZW51bVJlcXVpcmVkIl9zLCBQcm90b2NvbDo6VGVzdEhlbHBl
cnM6OmdldEVudW1Db25zdGFudFZhbHVlKG91dF9lbnVtUmVxdWlyZWQpKTsKKyAgICBpZiAoISFv
dXRfb3B0X2VudW1PcHRpb25hbCkKKyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0
cmluZygiZW51bU9wdGlvbmFsIl9zLCBQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25z
dGFudFZhbHVlKCpvdXRfb3B0X2VudW1PcHRpb25hbCkpOworICAgIHByb3RvY29sX2pzb25NZXNz
YWdlLT5zZXRTdHJpbmcoInJldHVyblJlcXVpcmVkIl9zLCBvdXRfcmV0dXJuUmVxdWlyZWQpOwor
ICAgIGlmICghIW91dF9vcHRfcmV0dXJuT3B0aW9uYWwpCisgICAgICAgIHByb3RvY29sX2pzb25N
ZXNzYWdlLT5zZXRTdHJpbmcoInJldHVybk9wdGlvbmFsIl9zLCBvdXRfb3B0X3JldHVybk9wdGlv
bmFsKTsKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocHJvdG9jb2xfY2Fs
bElkLCBXVEZNb3ZlKHByb3RvY29sX2pzb25NZXNzYWdlKSwgZmFsc2UpOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKQEAgLTMxOCw2ICszMzQsNyBAQCB2b2lkIENvbW1hbmREb21haW5C
YWNrZW5kRGlzcGF0Y2hlcjo6Y29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUobG9uZyByZXF1ZXN0
SWQsCiAKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8d3RmL0pT
T05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CkBAIC0zMjgsMTMgKzM0NSwx
OSBAQCBjbGFzcyBFdmVudERvbWFpbkZyb250ZW5kRGlzcGF0Y2hlciB7CiAgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgRXZlbnREb21haW5Gcm9udGVuZERpc3BhdGNo
ZXIoRnJvbnRlbmRSb3V0ZXImIGZyb250ZW5kUm91dGVyKSA6IG1fZnJvbnRlbmRSb3V0ZXIoZnJv
bnRlbmRSb3V0ZXIpIHsgfQotICAgICAgICAvLyBOYW1lZCBhZnRlciBwYXJhbWV0ZXIgJ3BhcmFt
ZXRlcicgd2hpbGUgZ2VuZXJhdGluZyBjb21tYW5kL2V2ZW50IGV2ZW50V2l0aEVudW1QYXJhbWV0
ZXIuCi0gICAgICAgIGVudW0gY2xhc3MgUGFyYW1ldGVyIHsKKyAgICAgICAgLy8gTmFtZWQgYWZ0
ZXIgcGFyYW1ldGVyICdwYXJhbWV0ZXJSZXF1aXJlZCcgd2hpbGUgZ2VuZXJhdGluZyBjb21tYW5k
L2V2ZW50IGV2ZW50LgorICAgICAgICBlbnVtIGNsYXNzIFBhcmFtZXRlclJlcXVpcmVkIHsKICAg
ICAgICAgICAgIFNoYXJlZCA9IDAsCi0gICAgICAgICAgICBCbGFjayA9IDQsCi0gICAgICAgICAg
ICBXaGl0ZSA9IDUsCi0gICAgICAgIH07IC8vIGVudW0gY2xhc3MgUGFyYW1ldGVyCi0gICAgdm9p
ZCBldmVudFdpdGhFbnVtUGFyYW1ldGVyKFBhcmFtZXRlciBwYXJhbWV0ZXIpOworICAgICAgICAg
ICAgU2hhcmVkUmVxdWlyZWQgPSAzLAorICAgICAgICAgICAgR3JleSA9IDQsCisgICAgICAgIH07
IC8vIGVudW0gY2xhc3MgUGFyYW1ldGVyUmVxdWlyZWQKKyAgICAgICAgLy8gTmFtZWQgYWZ0ZXIg
cGFyYW1ldGVyICdwYXJhbWV0ZXJPcHRpb25hbCcgd2hpbGUgZ2VuZXJhdGluZyBjb21tYW5kL2V2
ZW50IGV2ZW50LgorICAgICAgICBlbnVtIGNsYXNzIFBhcmFtZXRlck9wdGlvbmFsIHsKKyAgICAg
ICAgICAgIFNoYXJlZCA9IDAsCisgICAgICAgICAgICBTaGFyZWRPcHRpb25hbCA9IDUsCisgICAg
ICAgICAgICBHcmVlbiA9IDYsCisgICAgICAgIH07IC8vIGVudW0gY2xhc3MgUGFyYW1ldGVyT3B0
aW9uYWwKKyAgICB2b2lkIGV2ZW50KFByb3RvY29sOjpUeXBlRG9tYWluOjpFbnVtIGVudW1SZXF1
aXJlZCwgT3B0aW9uYWw8UHJvdG9jb2w6OlR5cGVEb21haW46OkVudW0+JiYgb3B0X2VudW1PcHRp
b25hbCwgY29uc3QgU3RyaW5nJiBwYXJhbWV0ZXJSZXF1aXJlZCwgY29uc3QgU3RyaW5nJiBvcHRf
cGFyYW1ldGVyT3B0aW9uYWwpOwogcHJpdmF0ZToKICAgICBGcm9udGVuZFJvdXRlciYgbV9mcm9u
dGVuZFJvdXRlcjsKIH07CkBAIC0zNzYsMTkgKzM5OSwyMyBAQCBwcml2YXRlOgogI2luY2x1ZGUg
IlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9J
bnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
IAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKLXZvaWQgRXZlbnREb21haW5Gcm9udGVuZERpc3Bh
dGNoZXI6OmV2ZW50V2l0aEVudW1QYXJhbWV0ZXIoUGFyYW1ldGVyIHBhcmFtZXRlcikKK3ZvaWQg
RXZlbnREb21haW5Gcm9udGVuZERpc3BhdGNoZXI6OmV2ZW50KFByb3RvY29sOjpUeXBlRG9tYWlu
OjpFbnVtIGVudW1SZXF1aXJlZCwgT3B0aW9uYWw8UHJvdG9jb2w6OlR5cGVEb21haW46OkVudW0+
JiYgb3B0X2VudW1PcHRpb25hbCwgY29uc3QgU3RyaW5nJiBwYXJhbWV0ZXJSZXF1aXJlZCwgY29u
c3QgU3RyaW5nJiBvcHRfcGFyYW1ldGVyT3B0aW9uYWwpCiB7Ci0gICAgUmVmPEpTT046Ok9iamVj
dD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIGpzb25NZXNzYWdl
LT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkV2ZW50RG9tYWluLmV2ZW50V2l0aEVudW1QYXJhbWV0
ZXIiX3MpOwotICAgIFJlZjxKU09OOjpPYmplY3Q+IHBhcmFtc09iamVjdCA9IEpTT046Ok9iamVj
dDo6Y3JlYXRlKCk7Ci0gICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInBhcmFtZXRlciJfcywg
SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKHBh
cmFtZXRlcikpOwotICAgIGpzb25NZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyJfcywgV1RGTW92
ZShwYXJhbXNPYmplY3QpKTsKKyAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6
T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJt
ZXRob2QiX3MsICJFdmVudERvbWFpbi5ldmVudCJfcyk7CisgICAgYXV0byBwcm90b2NvbF9wYXJh
bXNPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIHByb3RvY29sX3BhcmFtc09i
amVjdC0+c2V0U3RyaW5nKCJlbnVtUmVxdWlyZWQiX3MsIFByb3RvY29sOjpUZXN0SGVscGVyczo6
Z2V0RW51bUNvbnN0YW50VmFsdWUoZW51bVJlcXVpcmVkKSk7CisgICAgaWYgKCEhb3B0X2VudW1P
cHRpb25hbCkKKyAgICAgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoImVudW1P
cHRpb25hbCJfcywgUHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZSgq
b3B0X2VudW1PcHRpb25hbCkpOworICAgIHByb3RvY29sX3BhcmFtc09iamVjdC0+c2V0U3RyaW5n
KCJwYXJhbWV0ZXJSZXF1aXJlZCJfcywgcGFyYW1ldGVyUmVxdWlyZWQpOworICAgIGlmICghIW9w
dF9wYXJhbWV0ZXJPcHRpb25hbCkKKyAgICAgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRT
dHJpbmcoInBhcmFtZXRlck9wdGlvbmFsIl9zLCBvcHRfcGFyYW1ldGVyT3B0aW9uYWwpOworICAg
IHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyJfcywgV1RGTW92ZShwcm90
b2NvbF9wYXJhbXNPYmplY3QpKTsKIAotICAgIG1fZnJvbnRlbmRSb3V0ZXIuc2VuZEV2ZW50KGpz
b25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7CisgICAgbV9mcm9udGVuZFJvdXRlci5zZW5kRXZl
bnQocHJvdG9jb2xfanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgSW5zcGVjdG9yCkBAIC00MjgsNyArNDU1LDkgQEAgdm9pZCBFdmVudERvbWFpbkZyb250
ZW5kRGlzcGF0Y2hlcjo6ZXZlbnRXaXRoRW51bVBhcmFtZXRlcihQYXJhbWV0ZXIgcGFyYW1ldGVy
KQogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90
b2NvbFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYv
SlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtNDQwLDcgKzQ2
OSw3IEBAIG5hbWVzcGFjZSBQcm90b2NvbCB7CiAKIC8vIEZvcndhcmQgZGVjbGFyYXRpb25zLgog
bmFtZXNwYWNlIFR5cGVEb21haW4gewotZW51bSBjbGFzcyBUeXBlRG9tYWluRW51bTsKK2VudW0g
Y2xhc3MgRW51bTsKIH0gLy8gVHlwZURvbWFpbgogLy8gRW5kIG9mIGZvcndhcmQgZGVjbGFyYXRp
b25zLgogCkBAIC00NjAsMTIgKzQ4OSwxMSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBTdHJpbmcg
Z2V0RW51bUNvbnN0YW50VmFsdWUoVCBlbnVtVmFsdWUpCiAKIG5hbWVzcGFjZSBUeXBlRG9tYWlu
IHsKIAotZW51bSBjbGFzcyBUeXBlRG9tYWluRW51bSB7CitlbnVtIGNsYXNzIEVudW0gewogICAg
IFNoYXJlZCA9IDAsCi0gICAgUmVkID0gMSwKLSAgICBHcmVlbiA9IDIsCi0gICAgQmx1ZSA9IDMs
Ci19OyAvLyBlbnVtIGNsYXNzIFR5cGVEb21haW5FbnVtCisgICAgMSA9IDEsCisgICAgMiA9IDIs
Cit9OyAvLyBlbnVtIGNsYXNzIEVudW0KIAogfSAvLyBUeXBlRG9tYWluCiAKQEAgLTQ3OCw3ICs1
MDYsNyBAQCBPcHRpb25hbDxQcm90b2NvbEVudW1UeXBlPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJp
bmcoY29uc3QgU3RyaW5nJik7CiAKIC8vIEVudW1zIGluIHRoZSAnVHlwZURvbWFpbicgRG9tYWlu
CiB0ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpUeXBlRG9tYWluOjpU
eXBlRG9tYWluRW51bT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlR5cGVEb21haW46OlR5cGVEb21haW5FbnVtPihjb25zdCBTdHJpbmcmKTsKK09wdGlvbmFs
PFByb3RvY29sOjpUeXBlRG9tYWluOjpFbnVtPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8UHJv
dG9jb2w6OlR5cGVEb21haW46OkVudW0+KGNvbnN0IFN0cmluZyYpOwogCiB9IC8vIG5hbWVzcGFj
ZSBUZXN0SGVscGVycwogCkBAIC00OTIsNyArNTIwLDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4g
c3RydWN0IERlZmF1bHRIYXNoOwogCiAvLyBIYXNoIGRlY2xhcmF0aW9ucyBpbiB0aGUgJ1R5cGVE
b21haW4nIERvbWFpbgogdGVtcGxhdGU8Pgotc3RydWN0IERlZmF1bHRIYXNoPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlR5cGVEb21haW46OlR5cGVEb21haW5FbnVtPiA6IEludEhhc2g8SW5zcGVjdG9y
OjpQcm90b2NvbDo6VHlwZURvbWFpbjo6VHlwZURvbWFpbkVudW0+IHsgfTsKK3N0cnVjdCBEZWZh
dWx0SGFzaDxJbnNwZWN0b3I6OlByb3RvY29sOjpUeXBlRG9tYWluOjpFbnVtPiA6IEludEhhc2g8
SW5zcGVjdG9yOjpQcm90b2NvbDo6VHlwZURvbWFpbjo6RW51bT4geyB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXVEYKICMjIyBFbmQgRmlsZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCkBAIC01MzAsOCAr
NTU4LDcgQEAgc3RydWN0IERlZmF1bHRIYXNoPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlR5cGVEb21h
aW46OlR5cGVEb21haW5FbnVtPiA6IEludEhhc2g8SW4KICNpbmNsdWRlICJjb25maWcuaCIKICNp
bmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAKLSNpbmNsdWRlIDx3dGYvT3B0aW9uYWwu
aD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlv
bnMuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKQEAgLTU0MSwxNCArNTY4LDE2IEBAIG5h
bWVzcGFjZSBUZXN0SGVscGVycyB7CiAKIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBlbnVtX2Nv
bnN0YW50X3ZhbHVlc1tdID0gewogICAgICJzaGFyZWQiLAotICAgICJyZWQiLAorICAgICIxIiwK
KyAgICAiMiIsCisgICAgInNoYXJlZFJlcXVpcmVkIiwKKyAgICAiZ3JleSIsCisgICAgInNoYXJl
ZE9wdGlvbmFsIiwKICAgICAiZ3JlZW4iLAotICAgICJibHVlIiwKICAgICAiYmxhY2siLAorICAg
ICJyZWQiLAogICAgICJ3aGl0ZSIsCi0gICAgImN5YW4iLAotICAgICJtYWdlbnRhIiwKLSAgICAi
eWVsbG93IiwKKyAgICAiYmx1ZSIsCiB9OwogCiBTdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUo
aW50IGNvZGUpIHsKQEAgLTU1OCwxNyArNTg3LDE2IEBAIFN0cmluZyBnZXRFbnVtQ29uc3RhbnRW
YWx1ZShpbnQgY29kZSkgewogLy8gRW51bXMgaW4gdGhlICdUeXBlRG9tYWluJyBEb21haW4KIAog
dGVtcGxhdGU8PgotT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6VHlwZURvbWFpbjo6VHlw
ZURvbWFpbkVudW0+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29s
OjpUeXBlRG9tYWluOjpUeXBlRG9tYWluRW51bT4oY29uc3QgU3RyaW5nJiBwcm90b2NvbFN0cmlu
ZykKK09wdGlvbmFsPFByb3RvY29sOjpUeXBlRG9tYWluOjpFbnVtPiBwYXJzZUVudW1WYWx1ZUZy
b21TdHJpbmc8UHJvdG9jb2w6OlR5cGVEb21haW46OkVudW0+KGNvbnN0IFN0cmluZyYgcHJvdG9j
b2xTdHJpbmcpCiB7CiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBjb25zdGFudFZhbHVlc1tdID0g
ewotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlR5cGVEb21haW46OlR5cGVE
b21haW5FbnVtOjpTaGFyZWQsCi0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6
VHlwZURvbWFpbjo6VHlwZURvbWFpbkVudW06OlJlZCwKLSAgICAgICAgKHNpemVfdClJbnNwZWN0
b3I6OlByb3RvY29sOjpUeXBlRG9tYWluOjpUeXBlRG9tYWluRW51bTo6R3JlZW4sCi0gICAgICAg
IChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6VHlwZURvbWFpbjo6VHlwZURvbWFpbkVudW06
OkJsdWUsCisgICAgICAgIChzaXplX3QpUHJvdG9jb2w6OlR5cGVEb21haW46OkVudW06OlNoYXJl
ZCwKKyAgICAgICAgKHNpemVfdClQcm90b2NvbDo6VHlwZURvbWFpbjo6RW51bTo6MSwKKyAgICAg
ICAgKHNpemVfdClQcm90b2NvbDo6VHlwZURvbWFpbjo6RW51bTo6MiwKICAgICB9OwotICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgNDsgKytpKQorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
MzsgKytpKQogICAgICAgICBpZiAocHJvdG9jb2xTdHJpbmcgPT0gZW51bV9jb25zdGFudF92YWx1
ZXNbY29uc3RhbnRWYWx1ZXNbaV1dKQotICAgICAgICAgICAgcmV0dXJuIChJbnNwZWN0b3I6OlBy
b3RvY29sOjpUeXBlRG9tYWluOjpUeXBlRG9tYWluRW51bSljb25zdGFudFZhbHVlc1tpXTsKKyAg
ICAgICAgICAgIHJldHVybiAoUHJvdG9jb2w6OlR5cGVEb21haW46OkVudW0pY29uc3RhbnRWYWx1
ZXNbaV07CiAKICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQpAQCAtNjI1LDcgKzY1Myw3IEBA
IGNsYXNzIE9iakNJbnNwZWN0b3JDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXIgZmluYWwg
OiBwdWJsaWMgQWx0ZXJuYXRlQ29tbWFuCiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBw
dWJsaWM6CiAgICAgT2JqQ0luc3BlY3RvckNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcihp
ZDxUZXN0UHJvdG9jb2xDb21tYW5kRG9tYWluRG9tYWluSGFuZGxlcj4gaGFuZGxlcikgeyBtX2Rl
bGVnYXRlID0gaGFuZGxlcjsgfQotICAgIHZvaWQgY29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUo
bG9uZyByZXF1ZXN0SWQpIGZpbmFsOworICAgIHZvaWQgY29tbWFuZChsb25nIHByb3RvY29sX2Nh
bGxJZCwgY29uc3QgU3RyaW5nJiBlbnVtUmVxdWlyZWQsIGNvbnN0IFN0cmluZyYgb3B0X2VudW1P
cHRpb25hbCwgY29uc3QgU3RyaW5nJiBwYXJhbWV0ZXJSZXF1aXJlZCwgY29uc3QgU3RyaW5nJiBv
cHRfcGFyYW1ldGVyT3B0aW9uYWwpIGZpbmFsOwogcHJpdmF0ZToKICAgICBSZXRhaW5QdHI8aWQ8
VGVzdFByb3RvY29sQ29tbWFuZERvbWFpbkRvbWFpbkhhbmRsZXI+PiBtX2RlbGVnYXRlOwogfTsK
QEAgLTY3MywyNiArNzAxLDQ3IEBAIHByaXZhdGU6CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3Igewog
Ci12b2lkIE9iakNJbnNwZWN0b3JDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OmNvbW1h
bmRXaXRoRW51bVJldHVyblZhbHVlKGxvbmcgcmVxdWVzdElkKQordm9pZCBPYmpDSW5zcGVjdG9y
Q29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpjb21tYW5kKGxvbmcgcHJvdG9jb2xfY2Fs
bElkLCBjb25zdCBTdHJpbmcmIGluX2VudW1SZXF1aXJlZCwgY29uc3QgU3RyaW5nJiBpbl9vcHRf
ZW51bU9wdGlvbmFsLCBjb25zdCBTdHJpbmcmIGluX3BhcmFtZXRlclJlcXVpcmVkLCBjb25zdCBT
dHJpbmcmIGluX29wdF9wYXJhbWV0ZXJPcHRpb25hbCkKIHsKLSAgICBpZiAoIVttX2RlbGVnYXRl
IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoY29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWVX
aXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6KV0pIHsKLSAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRj
aGVyOjpNZXRob2ROb3RGb3VuZCwgIidDb21tYW5kRG9tYWluLmNvbW1hbmRXaXRoRW51bVJldHVy
blZhbHVlJyB3YXMgbm90IGZvdW5kIl9zKTsKKyAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRz
VG9TZWxlY3RvcjpAc2VsZWN0b3IoY29tbWFuZFdpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxs
YmFjazplbnVtUmVxdWlyZWQ6ZW51bU9wdGlvbmFsOnBhcmFtZXRlclJlcXVpcmVkOnBhcmFtZXRl
ck9wdGlvbmFsOildKSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3Rv
Y29sRXJyb3IocHJvdG9jb2xfY2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91
bmQsICInQ29tbWFuZERvbWFpbi5jb21tYW5kJyB3YXMgbm90IGZvdW5kIl9zKTsKICAgICAgICAg
YmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAogICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgewot
ICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJ
ZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CisgICAgICAgIGJhY2tl
bmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocHJvdG9jb2xfY2FsbElkLCBCYWNr
ZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKICAgICAgICAgYmFja2VuZERpc3Bh
dGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKICAgICB9OwogCi0gICAgaWQgc3VjY2Vzc0Nh
bGxiYWNrID0gXihUZXN0UHJvdG9jb2xDb21tYW5kRG9tYWluQ29tbWFuZFdpdGhFbnVtUmV0dXJu
VmFsdWVSZXR1cm5WYWx1ZSByZXR1cm5WYWx1ZSkgewotICAgICAgICBSZWY8SlNPTjo6T2JqZWN0
PiByZXN1bHRPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgICAgICByZXN1bHRP
YmplY3QtPnNldFN0cmluZygicmV0dXJuVmFsdWUiX3MsIHRvUHJvdG9jb2xTdHJpbmcocmV0dXJu
VmFsdWUpKTsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVl
c3RJZCwgV1RGTW92ZShyZXN1bHRPYmplY3QpLCBmYWxzZSk7CisgICAgaWQgc3VjY2Vzc0NhbGxi
YWNrID0gXihUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bSBvdXRfZW51bVJlcXVpcmVkLCBUZXN0
UHJvdG9jb2xUeXBlRG9tYWluRW51bSAqb3V0X29wdF9lbnVtT3B0aW9uYWwsIFRlc3RQcm90b2Nv
bENvbW1hbmREb21haW4oYW5vbnltb3VzKSBvdXRfcmV0dXJuUmVxdWlyZWQsIFRlc3RQcm90b2Nv
bENvbW1hbmREb21haW4oYW5vbnltb3VzKSAqb3V0X29wdF9yZXR1cm5PcHRpb25hbCkgeworICAg
ICAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsK
KyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygiZW51bVJlcXVpcmVkIl9z
LCB0b1Byb3RvY29sU3RyaW5nKG91dF9lbnVtUmVxdWlyZWQpKTsKKyAgICAgICAgaWYgKCEhb3V0
X29wdF9lbnVtT3B0aW9uYWwpCisgICAgICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0
U3RyaW5nKCJlbnVtT3B0aW9uYWwiX3MsIHRvUHJvdG9jb2xTdHJpbmcoKm91dF9vcHRfZW51bU9w
dGlvbmFsKSk7CisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoInJldHVy
blJlcXVpcmVkIl9zLCB0b1Byb3RvY29sU3RyaW5nKG91dF9yZXR1cm5SZXF1aXJlZCkpOworICAg
ICAgICBpZiAoISFvdXRfb3B0X3JldHVybk9wdGlvbmFsKQorICAgICAgICAgICAgcHJvdG9jb2xf
anNvbk1lc3NhZ2UtPnNldFN0cmluZygicmV0dXJuT3B0aW9uYWwiX3MsIHRvUHJvdG9jb2xTdHJp
bmcoKm91dF9vcHRfcmV0dXJuT3B0aW9uYWwpKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIo
KS0+c2VuZFJlc3BvbnNlKHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9qc29uTWVz
c2FnZSksIGZhbHNlKTsKICAgICB9OwogCi0gICAgW21fZGVsZWdhdGUgY29tbWFuZFdpdGhFbnVt
UmV0dXJuVmFsdWVXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFj
azpzdWNjZXNzQ2FsbGJhY2tdOworICAgIE9wdGlvbmFsPFRlc3RQcm90b2NvbFR5cGVEb21haW5F
bnVtPiBvX2luX2VudW1SZXF1aXJlZCA9IGZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xU
eXBlRG9tYWluRW51bT4oaW5fZW51bVJlcXVpcmVkKTsKKyAgICBpZiAoIW9faW5fZW51bVJlcXVp
cmVkKSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3Io
QmFja2VuZERpc3BhdGNoZXI6OkludmFsaWRQYXJhbXMsICJQYXJhbWV0ZXIgJ2VudW1SZXF1aXJl
ZCcgb2YgbWV0aG9kICdDb21tYW5kRG9tYWluLmNvbW1hbmQnIGNhbm5vdCBiZSBwcm9jZXNzZWQi
X3MpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIE9wdGlvbmFsPFRlc3RQcm90b2NvbFR5
cGVEb21haW5FbnVtPiBvX2luX29wdF9lbnVtT3B0aW9uYWw7CisgICAgaWYgKCEhaW5fb3B0X2Vu
dW1PcHRpb25hbCkKKyAgICAgICAgb19pbl9vcHRfZW51bU9wdGlvbmFsID0gZnJvbVByb3RvY29s
U3RyaW5nPFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtPihpbl9vcHRfZW51bU9wdGlvbmFsKTsK
KyAgICBPcHRpb25hbDxUZXN0UHJvdG9jb2xDb21tYW5kRG9tYWluKGFub255bW91cyk+IG9faW5f
cGFyYW1ldGVyUmVxdWlyZWQgPSBmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sQ29tbWFu
ZERvbWFpbihhbm9ueW1vdXMpPihpbl9wYXJhbWV0ZXJSZXF1aXJlZCk7CisgICAgaWYgKCFvX2lu
X3BhcmFtZXRlclJlcXVpcmVkKSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9y
dFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OkludmFsaWRQYXJhbXMsICJQYXJhbWV0
ZXIgJ3BhcmFtZXRlclJlcXVpcmVkJyBvZiBtZXRob2QgJ0NvbW1hbmREb21haW4uY29tbWFuZCcg
Y2Fubm90IGJlIHByb2Nlc3NlZCJfcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgT3B0
aW9uYWw8VGVzdFByb3RvY29sQ29tbWFuZERvbWFpbihhbm9ueW1vdXMpPiBvX2luX29wdF9wYXJh
bWV0ZXJPcHRpb25hbDsKKyAgICBpZiAoISFpbl9vcHRfcGFyYW1ldGVyT3B0aW9uYWwpCisgICAg
ICAgIG9faW5fb3B0X3BhcmFtZXRlck9wdGlvbmFsID0gZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQ
cm90b2NvbENvbW1hbmREb21haW4oYW5vbnltb3VzKT4oaW5fb3B0X3BhcmFtZXRlck9wdGlvbmFs
KTsKKyAgICBbbV9kZWxlZ2F0ZSBjb21tYW5kV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFj
ayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrIGVudW1SZXF1aXJlZDpvX2luX2VudW1S
ZXF1aXJlZC52YWx1ZSgpIGVudW1PcHRpb25hbDooISFpbl9vcHRfZW51bU9wdGlvbmFsID8gJm9f
aW5fb3B0X2VudW1PcHRpb25hbC52YWx1ZSgpIDogbmlsKSBwYXJhbWV0ZXJSZXF1aXJlZDpvX2lu
X3BhcmFtZXRlclJlcXVpcmVkLnZhbHVlKCkgcGFyYW1ldGVyT3B0aW9uYWw6KCEhaW5fb3B0X3Bh
cmFtZXRlck9wdGlvbmFsID8gJm9faW5fb3B0X3BhcmFtZXRlck9wdGlvbmFsLnZhbHVlKCkgOiBu
aWwpXTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCkBAIC04ODcsMTYgKzkzNiwyMSBA
QCB1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwogICAgIHJldHVybiBzZWxmOwogfQogCi0tICh2
b2lkKWV2ZW50V2l0aEVudW1QYXJhbWV0ZXJXaXRoUGFyYW1ldGVyOihUZXN0UHJvdG9jb2xFdmVu
dERvbWFpbkV2ZW50V2l0aEVudW1QYXJhbWV0ZXJQYXJhbWV0ZXIpcGFyYW1ldGVyCistICh2b2lk
KWV2ZW50V2l0aEVudW1SZXF1aXJlZDooVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW0pZW51bVJl
cXVpcmVkIGVudW1PcHRpb25hbDooVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW0gKillbnVtT3B0
aW9uYWwgcGFyYW1ldGVyUmVxdWlyZWQ6KFRlc3RQcm90b2NvbEV2ZW50RG9tYWluKGFub255bW91
cykpcGFyYW1ldGVyUmVxdWlyZWQgcGFyYW1ldGVyT3B0aW9uYWw6KFRlc3RQcm90b2NvbEV2ZW50
RG9tYWluKGFub255bW91cykgKilwYXJhbWV0ZXJPcHRpb25hbAogewogICAgIGNvbnN0IEZyb250
ZW5kUm91dGVyJiByb3V0ZXIgPSBfY29udHJvbGxlci0+ZnJvbnRlbmRSb3V0ZXIoKTsKIAotICAg
IFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsK
LSAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJFdmVudERvbWFpbi5ldmVu
dFdpdGhFbnVtUGFyYW1ldGVyIl9zKTsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBwYXJhbXNPYmpl
Y3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5n
KCJwYXJhbWV0ZXIiX3MsIHRvUHJvdG9jb2xTdHJpbmcocGFyYW1ldGVyKSk7Ci0gICAganNvbk1l
c3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIl9zLCBXVEZNb3ZlKHBhcmFtc09iamVjdCkpOwotICAg
IHJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKKyAgICBhdXRv
IHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBwcm90
b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJFdmVudERvbWFpbi5ldmVu
dCJfcyk7CisgICAgYXV0byBwcm90b2NvbF9wYXJhbXNPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNy
ZWF0ZSgpOworICAgIHByb3RvY29sX3BhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJlbnVtUmVxdWly
ZWQiX3MsIHRvUHJvdG9jb2xTdHJpbmcoZW51bVJlcXVpcmVkKSk7CisgICAgaWYgKGVudW1PcHRp
b25hbCkKKyAgICAgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoImVudW1PcHRp
b25hbCJfcywgdG9Qcm90b2NvbFN0cmluZygoKmVudW1PcHRpb25hbCkpKTsKKyAgICBwcm90b2Nv
bF9wYXJhbXNPYmplY3QtPnNldFN0cmluZygicGFyYW1ldGVyUmVxdWlyZWQiX3MsIHRvUHJvdG9j
b2xTdHJpbmcocGFyYW1ldGVyUmVxdWlyZWQpKTsKKyAgICBpZiAocGFyYW1ldGVyT3B0aW9uYWwp
CisgICAgICAgIHByb3RvY29sX3BhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJwYXJhbWV0ZXJPcHRp
b25hbCJfcywgdG9Qcm90b2NvbFN0cmluZygoKnBhcmFtZXRlck9wdGlvbmFsKSkpOworICAgIHBy
b3RvY29sX2pzb25NZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyJfcywgV1RGTW92ZShwcm90b2Nv
bF9wYXJhbXNPYmplY3QpKTsKKyAgICByb3V0ZXIuc2VuZEV2ZW50KHByb3RvY29sX2pzb25NZXNz
YWdlLT50b0pTT05TdHJpbmcoKSk7CiB9CiAKIEBlbmQKQEAgLTk0MywyMSArOTk3LDIwIEBAIHVz
aW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CiAKIHR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRl
c3RQcm90b2NvbFR5cGVEb21haW5FbnVtKSB7CiAgICAgVGVzdFByb3RvY29sVHlwZURvbWFpbkVu
dW1TaGFyZWQsCi0gICAgVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW1SZWQsCi0gICAgVGVzdFBy
b3RvY29sVHlwZURvbWFpbkVudW1HcmVlbiwKLSAgICBUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51
bUJsdWUsCisgICAgVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW0xLAorICAgIFRlc3RQcm90b2Nv
bFR5cGVEb21haW5FbnVtMiwKIH07CiAKIAogCiBAcHJvdG9jb2wgVGVzdFByb3RvY29sQ29tbWFu
ZERvbWFpbkRvbWFpbkhhbmRsZXIgPE5TT2JqZWN0PgogQG9wdGlvbmFsCi0tICh2b2lkKWNvbW1h
bmRXaXRoRW51bVJldHVyblZhbHVlV2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcg
KmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKShUZXN0UHJvdG9j
b2xDb21tYW5kRG9tYWluQ29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWVSZXR1cm5WYWx1ZSByZXR1
cm5WYWx1ZSkpc3VjY2Vzc0NhbGxiYWNrOworLSAodm9pZCljb21tYW5kV2l0aEVycm9yQ2FsbGJh
Y2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFj
azoodm9pZCheKShUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bSBlbnVtUmVxdWlyZWQsIFRlc3RQ
cm90b2NvbFR5cGVEb21haW5FbnVtICplbnVtT3B0aW9uYWwsIFRlc3RQcm90b2NvbENvbW1hbmRE
b21haW4oYW5vbnltb3VzKSByZXR1cm5SZXF1aXJlZCwgVGVzdFByb3RvY29sQ29tbWFuZERvbWFp
bihhbm9ueW1vdXMpICpyZXR1cm5PcHRpb25hbCkpc3VjY2Vzc0NhbGxiYWNrIGVudW1SZXF1aXJl
ZDooVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW0pZW51bVJlcXVpcmVkIGVudW1PcHRpb25hbDoo
VGVzdFByb3RvY29sVHlwZURvbWFpbkVudW0gKillbnVtT3B0aW9uYWwgcGFyYW1ldGVyUmVxdWly
ZWQ6KFRlc3RQcm90b2NvbENvbW1hbmREb21haW4oYW5vbnltb3VzKSlwYXJhbWV0ZXJSZXF1aXJl
ZCBwYXJhbWV0ZXJPcHRpb25hbDooVGVzdFByb3RvY29sQ29tbWFuZERvbWFpbihhbm9ueW1vdXMp
ICopcGFyYW1ldGVyT3B0aW9uYWw7CiBAZW5kCiAKIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkg
KCJkZWZhdWx0IikpKQogQGludGVyZmFjZSBUZXN0UHJvdG9jb2xFdmVudERvbWFpbkRvbWFpbkV2
ZW50RGlzcGF0Y2hlciA6IE5TT2JqZWN0Ci0tICh2b2lkKWV2ZW50V2l0aEVudW1QYXJhbWV0ZXJX
aXRoUGFyYW1ldGVyOihUZXN0UHJvdG9jb2xFdmVudERvbWFpbkV2ZW50V2l0aEVudW1QYXJhbWV0
ZXJQYXJhbWV0ZXIpcGFyYW1ldGVyOworLSAodm9pZClldmVudFdpdGhFbnVtUmVxdWlyZWQ6KFRl
c3RQcm90b2NvbFR5cGVEb21haW5FbnVtKWVudW1SZXF1aXJlZCBlbnVtT3B0aW9uYWw6KFRlc3RQ
cm90b2NvbFR5cGVEb21haW5FbnVtICopZW51bU9wdGlvbmFsIHBhcmFtZXRlclJlcXVpcmVkOihU
ZXN0UHJvdG9jb2xFdmVudERvbWFpbihhbm9ueW1vdXMpKXBhcmFtZXRlclJlcXVpcmVkIHBhcmFt
ZXRlck9wdGlvbmFsOihUZXN0UHJvdG9jb2xFdmVudERvbWFpbihhbm9ueW1vdXMpICopcGFyYW1l
dGVyT3B0aW9uYWw7CiBAZW5kCiAKIApAQCAtMTA1MCwxMiArMTEwMywxMCBAQCBpbmxpbmUgU3Ry
aW5nIHRvUHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW0gdmFsdWUpCiAg
ICAgc3dpdGNoKHZhbHVlKSB7CiAgICAgY2FzZSBUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bVNo
YXJlZDoKICAgICAgICAgcmV0dXJuICJzaGFyZWQiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xU
eXBlRG9tYWluRW51bVJlZDoKLSAgICAgICAgcmV0dXJuICJyZWQiX3M7Ci0gICAgY2FzZSBUZXN0
UHJvdG9jb2xUeXBlRG9tYWluRW51bUdyZWVuOgotICAgICAgICByZXR1cm4gImdyZWVuIl9zOwot
ICAgIGNhc2UgVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW1CbHVlOgotICAgICAgICByZXR1cm4g
ImJsdWUiX3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bTE6CisgICAgICAg
IHJldHVybiAiMSJfczsKKyAgICBjYXNlIFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtMjoKKyAg
ICAgICAgcmV0dXJuICIyIl9zOwogICAgIH0KIH0KIApAQCAtMTA2NCwxMiArMTExNSwxMCBAQCBp
bmxpbmUgT3B0aW9uYWw8VGVzdFByb3RvY29sVHlwZURvbWFpbkVudW0+IGZyb21Qcm90b2NvbFN0
cmluZyhjb25zdCBTdHJpbmcmIHZhbAogewogICAgIGlmICh2YWx1ZSA9PSAic2hhcmVkIikKICAg
ICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtU2hhcmVkOwotICAgIGlmICh2
YWx1ZSA9PSAicmVkIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVt
UmVkOwotICAgIGlmICh2YWx1ZSA9PSAiZ3JlZW4iKQotICAgICAgICByZXR1cm4gVGVzdFByb3Rv
Y29sVHlwZURvbWFpbkVudW1HcmVlbjsKLSAgICBpZiAodmFsdWUgPT0gImJsdWUiKQotICAgICAg
ICByZXR1cm4gVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW1CbHVlOworICAgIGlmICh2YWx1ZSA9
PSAiMSIpCisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bTE7CisgICAg
aWYgKHZhbHVlID09ICIyIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFR5cGVEb21haW5F
bnVtMjsKICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQogCkBAIC0xMTE3LDE3ICsxMTY2LDE3
IEBAIHVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CiAKIEBpbnRlcmZhY2UgVGVzdFByb3RvY29s
VHlwZUNvbnZlcnNpb25zIChUeXBlRG9tYWluRG9tYWluKQogCi0rICh2b2lkKV9wYXJzZVR5cGVE
b21haW5FbnVtOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsK
KysgKHZvaWQpX3BhcnNlRW51bTooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlk
KXBheWxvYWQ7CiAKIEBlbmQKIAogQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFR5cGVDb252
ZXJzaW9ucyAoVHlwZURvbWFpbkRvbWFpbikKIAotKyAodm9pZClfcGFyc2VUeXBlRG9tYWluRW51
bTooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKKysgKHZvaWQp
X3BhcnNlRW51bTooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQK
IHsKICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU1N0cmluZyBj
bGFzc10pOwogICAgIE9wdGlvbmFsPFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtPiByZXN1bHQg
PSBJbnNwZWN0b3I6OmZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51
bT4ocGF5bG9hZCk7Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfRU5VTV9WQUxVRShyZXN1
bHQsIEAiVHlwZURvbWFpbkVudW0iKTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9FTlVN
X1ZBTFVFKHJlc3VsdCwgQCJFbnVtIik7CiAgICAgKm91dFZhbHVlID0gQChyZXN1bHQudmFsdWUo
KSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9leHBlY3RlZC9ldmVudC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1
Z2dhYmxlVHlwZS5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9leHBlY3RlZC9ldmVudC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1k
ZWJ1Z2dhYmxlVHlwZS5qc29uLXJlc3VsdAppbmRleCBlMmVkOWY4ODk0Y2U3NzZiMjcyZDYxMTNl
NTM2Y2FhNzQ2ZWJjYjg1Li5iZTk0YjM1OTQwMDMyYjNlOWEzMzZkNTQxMzQ0NzdiOTY1Y2QzYTU0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZXhwZWN0ZWQvZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5
cGUuanNvbi1yZXN1bHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2V4cGVjdGVkL2V2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVn
Z2FibGVUeXBlLmpzb24tcmVzdWx0CkBAIC03MCw3ICs3MCw3IEBAIEluc3BlY3RvckJhY2tlbmQu
YWN0aXZhdGVEb21haW4oIkRvbWFpbiIsIFsicGFnZSJdKTsKIAogI2lmIEVOQUJMRShJTlNQRUNU
T1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMu
aCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgogCkBAIC04OCw3ICs4OCw3IEBAIHByaXZh
dGU6CiBjbGFzcyBBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlciA6IHB1YmxpYyBBbHRl
cm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+QWx0ZXJuYXRl
RG9tYWluQmFja2VuZERpc3BhdGNoZXIoKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgQ29tbWFuZChs
b25nIGNhbGxJZCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBDb21tYW5kKGxvbmcgcHJvdG9jb2xf
Y2FsbElkKSA9IDA7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKQEAgLTEzMCwxMSAr
MTMwLDE0IEBAIHB1YmxpYzoKIAogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2lu
Y2x1ZGUgPHR1cGxlPgorI2luY2x1ZGUgPHd0Zi9FeHBlY3RlZC5oPgorI2luY2x1ZGUgPHd0Zi9P
cHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKIAotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKIAogI2lmIEVOQUJM
RShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogY2xhc3MgQWx0ZXJuYXRlRG9tYWlu
QmFja2VuZERpc3BhdGNoZXI7CkBAIC0xNDIsNyArMTQ1LDcgQEAgY2xhc3MgQWx0ZXJuYXRlRG9t
YWluQmFja2VuZERpc3BhdGNoZXI7CiAKIGNsYXNzIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFu
ZGxlciB7CiBwdWJsaWM6Ci0gICAgdmlydHVhbCB2b2lkIENvbW1hbmQoRXJyb3JTdHJpbmcmKSA9
IDA7CisgICAgdmlydHVhbCBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBDb21tYW5kKCkg
PSAwOwogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgfkRvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFu
ZGxlcigpOwogfTsKQEAgLTE1MCw5ICsxNTMsOSBAQCBwcm90ZWN0ZWQ6CiBjbGFzcyBEb21haW5C
YWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0
Y2hlciB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxEb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4g
Y3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiwgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVy
Kik7Ci0gICAgdm9pZCBkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRo
b2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkgZmluYWw7CisgICAgdm9pZCBkaXNwYXRj
aChsb25nIHByb3RvY29sX2NhbGxJZCwgY29uc3QgU3RyaW5nJiBwcm90b2NvbF9tZXRob2QsIFJl
ZjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfbWVzc2FnZSkgZmluYWw7CiBwcml2YXRlOgotICAg
IHZvaWQgQ29tbWFuZChsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJh
bWV0ZXJzKTsKKyAgICB2b2lkIENvbW1hbmQobG9uZyBwcm90b2NsX2NhbGxJZCwgUmVmUHRyPEpT
T046Ok9iamVjdD4mJiBwcm90b2NvbF9wYXJhbWV0ZXJzKTsKICNpZiBFTkFCTEUoSU5TUEVDVE9S
X0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIHB1YmxpYzoKICAgICB2b2lkIHNldEFsdGVybmF0ZURp
c3BhdGNoZXIoQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIqIGFsdGVybmF0ZURpc3Bh
dGNoZXIpIHsgbV9hbHRlcm5hdGVEaXNwYXRjaGVyID0gYWx0ZXJuYXRlRGlzcGF0Y2hlcjsgfQpA
QCAtMjAxLDkgKzIwNCw3IEBAIHByaXZhdGU6CiAjaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRj
aGVycy5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0
ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRl
c3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogI2lmIEVOQUJMRShJ
TlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVC
YWNrZW5kRGlzcGF0Y2hlcnMuaCIKQEAgLTIyNSwzOCArMjI2LDM4IEBAIERvbWFpbkJhY2tlbmRE
aXNwYXRjaGVyOjpEb21haW5CYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYgYmFj
a2VuZERpc3BhCiAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRjaGVyRm9y
RG9tYWluKCJEb21haW4iX3MsIHRoaXMpOwogfQogCi12b2lkIERvbWFpbkJhY2tlbmREaXNwYXRj
aGVyOjpkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxK
U09OOjpPYmplY3Q+JiYgbWVzc2FnZSkKK3ZvaWQgRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OmRp
c3BhdGNoKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBjb25zdCBTdHJpbmcmIHByb3RvY29sX21ldGhv
ZCwgUmVmPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9tZXNzYWdlKQogewogICAgIFJlZjxEb21h
aW5CYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7CiAKLSAgICBSZWZQdHI8SlNPTjo6
T2JqZWN0PiBwYXJhbWV0ZXJzOwotICAgIG1lc3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9zLCBw
YXJhbWV0ZXJzKTsKKyAgICBhdXRvIHByb3RvY29sX3BhcmFtZXRlcnMgPSBwcm90b2NvbF9tZXNz
YWdlLT5nZXRPYmplY3QoInBhcmFtcyJfcyk7CiAKLSAgICBpZiAobWV0aG9kID09ICJDb21tYW5k
IikgewotICAgICAgICBDb21tYW5kKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7Cisg
ICAgaWYgKHByb3RvY29sX21ldGhvZCA9PSAiQ29tbWFuZCIpIHsKKyAgICAgICAgQ29tbWFuZChw
cm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJvdG9jb2xfcGFyYW1ldGVycykpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xF
cnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRG9tYWluLiIgKyBtZXRo
b2QgKyAiJyB3YXMgbm90IGZvdW5kIik7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0
UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRG9tYWlu
LiIgKyBwcm90b2NvbF9tZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7CiB9CiAKLXZvaWQgRG9t
YWluQmFja2VuZERpc3BhdGNoZXI6OkNvbW1hbmQobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09O
OjpPYmplY3Q+JiYpCit2b2lkIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpDb21tYW5kKGxvbmcg
cHJvdG9jb2xfY2FsbElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQogewogI2lmIEVOQUJMRShJ
TlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogICAgIGlmIChtX2FsdGVybmF0ZURpc3Bh
dGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5Db21tYW5kKHJlcXVlc3RJ
ZCk7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+Q29tbWFuZChwcm90b2NvbF9jYWxs
SWQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1Jf
QUxURVJOQVRFX0RJU1BBVENIRVJTKQogCi0gICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVm
PEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBtX2Fn
ZW50LT5Db21tYW5kKGVycm9yKTsKKyAgICBhdXRvIHJlc3VsdCA9IG1fYWdlbnQtPkNvbW1hbmQo
KTsKKyAgICBpZiAoIXJlc3VsdCkgeworICAgICAgICBBU1NFUlQoIXJlc3VsdC5lcnJvcigpLmlz
RW1wdHkoKSk7CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJy
b3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCByZXN1bHQuZXJyb3IoKSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQotICAgICAgICBt
X2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3Vs
dCksIGZhbHNlKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9y
dFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVy
cm9yKSk7CisgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3Jl
YXRlKCk7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHByb3RvY29sX2Nh
bGxJZCwgV1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSksIGZhbHNlKTsKIH0KIAogfSAvLyBu
YW1lc3BhY2UgSW5zcGVjdG9yCkBAIC0yOTcsNiArMjk4LDcgQEAgdm9pZCBEb21haW5CYWNrZW5k
RGlzcGF0Y2hlcjo6Q29tbWFuZChsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4m
JikKIAogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDx3dGYvSlNP
TlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKQEAgLTM0OSwxNiArMzUxLDE1
IEBAIHByaXZhdGU6CiAjaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKIAogI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVk
ZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAogdm9pZCBE
b21haW5Gcm9udGVuZERpc3BhdGNoZXI6OkV2ZW50KCkKIHsKLSAgICBSZWY8SlNPTjo6T2JqZWN0
PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAganNvbk1lc3NhZ2Ut
PnNldFN0cmluZygibWV0aG9kIl9zLCAiRG9tYWluLkV2ZW50Il9zKTsKKyAgICBhdXRvIHByb3Rv
Y29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBwcm90b2NvbF9q
c29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJEb21haW4uRXZlbnQiX3MpOwogCi0g
ICAgbV9mcm9udGVuZFJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygp
KTsKKyAgICBtX2Zyb250ZW5kUm91dGVyLnNlbmRFdmVudChwcm90b2NvbF9qc29uTWVzc2FnZS0+
dG9KU09OU3RyaW5nKCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKQEAgLTM5OCw3
ICszOTksOSBAQCB2b2lkIERvbWFpbkZyb250ZW5kRGlzcGF0Y2hlcjo6RXZlbnQoKQogI3ByYWdt
YSBvbmNlCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVz
Lmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVl
cy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtNDUyLDggKzQ1NSw3IEBAIG5h
bWVzcGFjZSBQcm90b2NvbCB7CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGVzdFBy
b3RvY29sT2JqZWN0cy5oIgogCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8
d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAKIG5hbWVz
cGFjZSBJbnNwZWN0b3IgewogCkBAIC01MDksNyArNTExLDcgQEAgY2xhc3MgT2JqQ0luc3BlY3Rv
ckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEFsdGVybmF0ZURvbWFpbkJh
Y2tlbmQKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBPYmpDSW5z
cGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXIoaWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWlu
SGFuZGxlcj4gaGFuZGxlcikgeyBtX2RlbGVnYXRlID0gaGFuZGxlcjsgfQotICAgIHZvaWQgQ29t
bWFuZChsb25nIHJlcXVlc3RJZCkgZmluYWw7CisgICAgdm9pZCBDb21tYW5kKGxvbmcgcHJvdG9j
b2xfY2FsbElkKSBmaW5hbDsKIHByaXZhdGU6CiAgICAgUmV0YWluUHRyPGlkPFRlc3RQcm90b2Nv
bERvbWFpbkRvbWFpbkhhbmRsZXI+PiBtX2RlbGVnYXRlOwogfTsKQEAgLTU1NywyMSArNTU5LDIy
IEBAIHByaXZhdGU6CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCi12b2lkIE9iakNJbnNwZWN0
b3JEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Q29tbWFuZChsb25nIHJlcXVlc3RJZCkKK3ZvaWQg
T2JqQ0luc3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpDb21tYW5kKGxvbmcgcHJvdG9j
b2xfY2FsbElkKQogewogICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBz
ZWxlY3RvcihDb21tYW5kV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7Ci0g
ICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElk
LCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRG9tYWluLkNvbW1hbmQnIHdh
cyBub3QgZm91bmQiX3MpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90
b2NvbEVycm9yKHByb3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZv
dW5kLCAiJ0RvbWFpbi5Db21tYW5kJyB3YXMgbm90IGZvdW5kIl9zKTsKICAgICAgICAgYmFja2Vu
ZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAogICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgewotICAgICAg
ICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFj
a2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CisgICAgICAgIGJhY2tlbmREaXNw
YXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocHJvdG9jb2xfY2FsbElkLCBCYWNrZW5kRGlz
cGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIo
KS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKICAgICB9OwogCiAgICAgaWQgc3VjY2Vzc0NhbGxiYWNr
ID0gXnsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJ
ZCwgSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSwgZmFsc2UpOworICAgICAgICBhdXRvIHByb3RvY29s
X2pzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2Nv
bF9qc29uTWVzc2FnZSksIGZhbHNlKTsKICAgICB9OwogCiAgICAgW21fZGVsZWdhdGUgQ29tbWFu
ZFdpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3ND
YWxsYmFja107CkBAIC03NzMsOSArNzc2LDkgQEAgdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsK
IHsKICAgICBjb25zdCBGcm9udGVuZFJvdXRlciYgcm91dGVyID0gX2NvbnRyb2xsZXItPmZyb250
ZW5kUm91dGVyKCk7CiAKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046
Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9z
LCAiRG9tYWluLkV2ZW50Il9zKTsKLSAgICByb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50
b0pTT05TdHJpbmcoKSk7CisgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9i
amVjdDo6Y3JlYXRlKCk7CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0
aG9kIl9zLCAiRG9tYWluLkV2ZW50Il9zKTsKKyAgICByb3V0ZXIuc2VuZEV2ZW50KHByb3RvY29s
X2pzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7CiB9CiAKIEBlbmQKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9ldmVu
dHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2V2ZW50cy13aXRoLW9wdGlv
bmFsLXBhcmFtZXRlcnMuanNvbi1yZXN1bHQKaW5kZXggOTBlMTRlOGM3YmI0ZjA1MTUxM2NiZDdj
M2M2ZGM3Yjk2ZmNjMWE3NC4uODQ3YjQ5M2Y3MWM1N2U0MjczZDg0OTYyYmFlOWY2YzkyMGZkYzlk
YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2V4cGVjdGVkL2V2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbi1yZXN1bHQK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVj
dGVkL2V2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMuanNvbi1yZXN1bHQKQEAgLTcwLDcg
KzcwLDcgQEAgSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiRGF0YWJhc2UiLCBudWxs
KTsKIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogCi0jaW5j
bHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3Rz
LmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIu
aD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgog
CkBAIC0xMjYsMTEgKzEyNiwxNCBAQCBwcml2YXRlOgogCiAjaW5jbHVkZSAiVGVzdFByb3RvY29s
T2JqZWN0cy5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyLmg+CisjaW5jbHVkZSA8dHVwbGU+CisjaW5jbHVkZSA8d3RmL0V4cGVjdGVkLmg+Cisj
aW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsK
KwogCiAKIApAQCAtMTcxLDkgKzE3NCw3IEBAIHR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwog
I2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKIAogI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0pTT05WYWx1
ZXMuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVS
UykKICNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCkBAIC0yMjEs
NiArMjIyLDcgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKICNpbmNsdWRlICJUZXN0UHJvdG9j
b2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYv
T3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNl
IEluc3BlY3RvciB7CkBAIC0yMzEsOCArMjMzLDggQEAgY2xhc3MgRGF0YWJhc2VGcm9udGVuZERp
c3BhdGNoZXIgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIERh
dGFiYXNlRnJvbnRlbmREaXNwYXRjaGVyKEZyb250ZW5kUm91dGVyJiBmcm9udGVuZFJvdXRlcikg
OiBtX2Zyb250ZW5kUm91dGVyKGZyb250ZW5kUm91dGVyKSB7IH0KLSAgICB2b2lkIGRpZEV4ZWN1
dGVPcHRpb25hbFBhcmFtZXRlcnMoUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4gY29sdW1u
TmFtZXMsIGNvbnN0IFN0cmluZyogbm90ZXMsIGNvbnN0IGRvdWJsZSogdGltZXN0YW1wLCBSZWZQ
dHI8SlNPTjo6T2JqZWN0PiB2YWx1ZXMsIFJlZlB0cjxKU09OOjpWYWx1ZT4gcGF5bG9hZCwgUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4gc3FsRXJyb3IsIGNvbnN0
IFN0cmluZyogc2NyZWVuQ29sb3IsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFz
ZTo6Q29sb3JMaXN0PiBhbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyogcHJpbnRDb2xvcik7
Ci0gICAgdm9pZCBkaWRFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMoUmVmUHRyPEpTT046OkFy
cmF5T2Y8U3RyaW5nPj4gY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgbm90ZXMsIGRvdWJsZSB0
aW1lc3RhbXAsIFJlZlB0cjxKU09OOjpPYmplY3Q+IHZhbHVlcywgUmVmUHRyPEpTT046OlZhbHVl
PiBwYXlsb2FkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiBz
cWxFcnJvciwgY29uc3QgU3RyaW5nJiBzY3JlZW5Db2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+IGFsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5n
JiBwcmludENvbG9yKTsKKyAgICB2b2lkIGRpZEV4ZWN1dGVPcHRpb25hbFBhcmFtZXRlcnMoUmVm
UHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4mJiBvcHRfY29sdW1uTmFtZXMsIGNvbnN0IFN0cmlu
ZyYgb3B0X25vdGVzLCBPcHRpb25hbDxkb3VibGU+JiYgb3B0X3RpbWVzdGFtcCwgUmVmUHRyPEpT
T046Ok9iamVjdD4mJiBvcHRfdmFsdWVzLCBSZWZQdHI8SlNPTjo6VmFsdWU+JiYgb3B0X3BheWxv
YWQsIFJlZlB0cjxQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiYmIG9wdF9zcWxFcnJvciwgY29u
c3QgU3RyaW5nJiBvcHRfc2NyZWVuQ29sb3IsIFJlZlB0cjxQcm90b2NvbDo6RGF0YWJhc2U6OkNv
bG9yTGlzdD4mJiBvcHRfYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcmIG9wdF9wcmludENv
bG9yKTsKKyAgICB2b2lkIGRpZEV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhSZWY8SlNPTjo6
QXJyYXlPZjxTdHJpbmc+PiYmIGNvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIG5vdGVzLCBkb3Vi
bGUgdGltZXN0YW1wLCBSZWY8SlNPTjo6T2JqZWN0PiYmIHZhbHVlcywgUmVmPEpTT046OlZhbHVl
PiYmIHBheWxvYWQsIFJlZjxQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiYmIHNxbEVycm9yLCBj
b25zdCBTdHJpbmcmIHNjcmVlbkNvbG9yLCBSZWY8UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxp
c3Q+JiYgYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcmIHByaW50Q29sb3IpOwogcHJpdmF0
ZToKICAgICBGcm9udGVuZFJvdXRlciYgbV9mcm9udGVuZFJvdXRlcjsKIH07CkBAIC0yNzQsNTUg
KzI3Niw1NCBAQCBwcml2YXRlOgogI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgi
CiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgot
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAK
LXZvaWQgRGF0YWJhc2VGcm9udGVuZERpc3BhdGNoZXI6OmRpZEV4ZWN1dGVPcHRpb25hbFBhcmFt
ZXRlcnMoUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4gY29sdW1uTmFtZXMsIGNvbnN0IFN0
cmluZyogbm90ZXMsIGNvbnN0IGRvdWJsZSogdGltZXN0YW1wLCBSZWZQdHI8SlNPTjo6T2JqZWN0
PiB2YWx1ZXMsIFJlZlB0cjxKU09OOjpWYWx1ZT4gcGF5bG9hZCwgUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4gc3FsRXJyb3IsIGNvbnN0IFN0cmluZyogc2NyZWVu
Q29sb3IsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiBh
bHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyogcHJpbnRDb2xvcikKK3ZvaWQgRGF0YWJhc2VG
cm9udGVuZERpc3BhdGNoZXI6OmRpZEV4ZWN1dGVPcHRpb25hbFBhcmFtZXRlcnMoUmVmUHRyPEpT
T046OkFycmF5T2Y8U3RyaW5nPj4mJiBvcHRfY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgb3B0
X25vdGVzLCBPcHRpb25hbDxkb3VibGU+JiYgb3B0X3RpbWVzdGFtcCwgUmVmUHRyPEpTT046Ok9i
amVjdD4mJiBvcHRfdmFsdWVzLCBSZWZQdHI8SlNPTjo6VmFsdWU+JiYgb3B0X3BheWxvYWQsIFJl
ZlB0cjxQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiYmIG9wdF9zcWxFcnJvciwgY29uc3QgU3Ry
aW5nJiBvcHRfc2NyZWVuQ29sb3IsIFJlZlB0cjxQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlz
dD4mJiBvcHRfYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcmIG9wdF9wcmludENvbG9yKQog
ewotICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVh
dGUoKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJEYXRhYmFzZS5k
aWRFeGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJzIl9zKTsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBw
YXJhbXNPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIGlmIChjb2x1bW5OYW1l
cykKLSAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIGNvbHVt
bk5hbWVzKTsKLSAgICBpZiAobm90ZXMpCi0gICAgICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5n
KCJub3RlcyJfcywgKm5vdGVzKTsKLSAgICBpZiAodGltZXN0YW1wKQotICAgICAgICBwYXJhbXNP
YmplY3QtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCAqdGltZXN0YW1wKTsKLSAgICBpZiAodmFs
dWVzKQotICAgICAgICBwYXJhbXNPYmplY3QtPnNldE9iamVjdCgidmFsdWVzIl9zLCB2YWx1ZXMp
OwotICAgIGlmIChwYXlsb2FkKQotICAgICAgICBwYXJhbXNPYmplY3QtPnNldFZhbHVlKCJwYXls
b2FkIl9zLCAqcGF5bG9hZCk7Ci0gICAgaWYgKHNxbEVycm9yKQotICAgICAgICBwYXJhbXNPYmpl
Y3QtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIHNxbEVycm9yKTsKLSAgICBpZiAoc2NyZWVuQ29s
b3IpCi0gICAgICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgKnNj
cmVlbkNvbG9yKTsKLSAgICBpZiAoYWx0ZXJuYXRlQ29sb3JzKQotICAgICAgICBwYXJhbXNPYmpl
Y3QtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIGFsdGVybmF0ZUNvbG9ycyk7Ci0gICAg
aWYgKHByaW50Q29sb3IpCi0gICAgICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJwcmludENv
bG9yIl9zLCAqcHJpbnRDb2xvcik7Ci0gICAganNvbk1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1z
Il9zLCBXVEZNb3ZlKHBhcmFtc09iamVjdCkpOworICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3Nh
Z2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5z
ZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRhdGFiYXNlLmRpZEV4ZWN1dGVPcHRpb25hbFBhcmFtZXRl
cnMiX3MpOworICAgIGF1dG8gcHJvdG9jb2xfcGFyYW1zT2JqZWN0ID0gSlNPTjo6T2JqZWN0Ojpj
cmVhdGUoKTsKKyAgICBpZiAoISFvcHRfY29sdW1uTmFtZXMpCisgICAgICAgIHByb3RvY29sX3Bh
cmFtc09iamVjdC0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCBvcHRfY29sdW1uTmFtZXMucmVs
ZWFzZU5vbk51bGwoKSk7CisgICAgaWYgKCEhb3B0X25vdGVzKQorICAgICAgICBwcm90b2NvbF9w
YXJhbXNPYmplY3QtPnNldFN0cmluZygibm90ZXMiX3MsIG9wdF9ub3Rlcyk7CisgICAgaWYgKCEh
b3B0X3RpbWVzdGFtcCkKKyAgICAgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT5zZXREb3VibGUo
InRpbWVzdGFtcCJfcywgKm9wdF90aW1lc3RhbXApOworICAgIGlmICghIW9wdF92YWx1ZXMpCisg
ICAgICAgIHByb3RvY29sX3BhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIG9wdF92
YWx1ZXMucmVsZWFzZU5vbk51bGwoKSk7CisgICAgaWYgKCEhb3B0X3BheWxvYWQpCisgICAgICAg
IHByb3RvY29sX3BhcmFtc09iamVjdC0+c2V0VmFsdWUoInBheWxvYWQiX3MsIG9wdF9wYXlsb2Fk
LnJlbGVhc2VOb25OdWxsKCkpOworICAgIGlmICghIW9wdF9zcWxFcnJvcikKKyAgICAgICAgcHJv
dG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBvcHRfc3FsRXJyb3Iu
cmVsZWFzZU5vbk51bGwoKSk7CisgICAgaWYgKCEhb3B0X3NjcmVlbkNvbG9yKQorICAgICAgICBw
cm90b2NvbF9wYXJhbXNPYmplY3QtPnNldFN0cmluZygic2NyZWVuQ29sb3IiX3MsIG9wdF9zY3Jl
ZW5Db2xvcik7CisgICAgaWYgKCEhb3B0X2FsdGVybmF0ZUNvbG9ycykKKyAgICAgICAgcHJvdG9j
b2xfcGFyYW1zT2JqZWN0LT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCBvcHRfYWx0ZXJu
YXRlQ29sb3JzLnJlbGVhc2VOb25OdWxsKCkpOworICAgIGlmICghIW9wdF9wcmludENvbG9yKQor
ICAgICAgICBwcm90b2NvbF9wYXJhbXNPYmplY3QtPnNldFN0cmluZygicHJpbnRDb2xvciJfcywg
b3B0X3ByaW50Q29sb3IpOworICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRPYmplY3QoInBh
cmFtcyJfcywgV1RGTW92ZShwcm90b2NvbF9wYXJhbXNPYmplY3QpKTsKIAotICAgIG1fZnJvbnRl
bmRSb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7CisgICAgbV9m
cm9udGVuZFJvdXRlci5zZW5kRXZlbnQocHJvdG9jb2xfanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmlu
ZygpKTsKIH0KIAotdm9pZCBEYXRhYmFzZUZyb250ZW5kRGlzcGF0Y2hlcjo6ZGlkRXhlY3V0ZU5v
T3B0aW9uYWxQYXJhbWV0ZXJzKFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+IGNvbHVtbk5h
bWVzLCBjb25zdCBTdHJpbmcmIG5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBSZWZQdHI8SlNPTjo6
T2JqZWN0PiB2YWx1ZXMsIFJlZlB0cjxKU09OOjpWYWx1ZT4gcGF5bG9hZCwgUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4gc3FsRXJyb3IsIGNvbnN0IFN0cmluZyYg
c2NyZWVuQ29sb3IsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JM
aXN0PiBhbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyYgcHJpbnRDb2xvcikKK3ZvaWQgRGF0
YWJhc2VGcm9udGVuZERpc3BhdGNoZXI6OmRpZEV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhS
ZWY8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiYmIGNvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIG5v
dGVzLCBkb3VibGUgdGltZXN0YW1wLCBSZWY8SlNPTjo6T2JqZWN0PiYmIHZhbHVlcywgUmVmPEpT
T046OlZhbHVlPiYmIHBheWxvYWQsIFJlZjxQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiYmIHNx
bEVycm9yLCBjb25zdCBTdHJpbmcmIHNjcmVlbkNvbG9yLCBSZWY8UHJvdG9jb2w6OkRhdGFiYXNl
OjpDb2xvckxpc3Q+JiYgYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcmIHByaW50Q29sb3Ip
CiB7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNy
ZWF0ZSgpOwotICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRhdGFiYXNl
LmRpZEV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyJfcyk7Ci0gICAgUmVmPEpTT046Ok9iamVj
dD4gcGFyYW1zT2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBwYXJhbXNPYmpl
Y3QtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgY29sdW1uTmFtZXMpOwotICAgIHBhcmFtc09i
amVjdC0+c2V0U3RyaW5nKCJub3RlcyJfcywgbm90ZXMpOwotICAgIHBhcmFtc09iamVjdC0+c2V0
RG91YmxlKCJ0aW1lc3RhbXAiX3MsIHRpbWVzdGFtcCk7Ci0gICAgcGFyYW1zT2JqZWN0LT5zZXRP
YmplY3QoInZhbHVlcyJfcywgdmFsdWVzKTsKLSAgICBwYXJhbXNPYmplY3QtPnNldFZhbHVlKCJw
YXlsb2FkIl9zLCBwYXlsb2FkKTsKLSAgICBwYXJhbXNPYmplY3QtPnNldE9iamVjdCgic3FsRXJy
b3IiX3MsIHNxbEVycm9yKTsKLSAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygic2NyZWVuQ29s
b3IiX3MsIHNjcmVlbkNvbG9yKTsKLSAgICBwYXJhbXNPYmplY3QtPnNldEFycmF5KCJhbHRlcm5h
dGVDb2xvcnMiX3MsIGFsdGVybmF0ZUNvbG9ycyk7Ci0gICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJp
bmcoInByaW50Q29sb3IiX3MsIHByaW50Q29sb3IpOwotICAgIGpzb25NZXNzYWdlLT5zZXRPYmpl
Y3QoInBhcmFtcyJfcywgV1RGTW92ZShwYXJhbXNPYmplY3QpKTsKKyAgICBhdXRvIHByb3RvY29s
X2pzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBwcm90b2NvbF9qc29u
TWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJEYXRhYmFzZS5kaWRFeGVjdXRlTm9PcHRp
b25hbFBhcmFtZXRlcnMiX3MpOworICAgIGF1dG8gcHJvdG9jb2xfcGFyYW1zT2JqZWN0ID0gSlNP
Tjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBwcm90b2NvbF9wYXJhbXNPYmplY3QtPnNldEFycmF5
KCJjb2x1bW5OYW1lcyJfcywgV1RGTW92ZShjb2x1bW5OYW1lcykpOworICAgIHByb3RvY29sX3Bh
cmFtc09iamVjdC0+c2V0U3RyaW5nKCJub3RlcyJfcywgbm90ZXMpOworICAgIHByb3RvY29sX3Bh
cmFtc09iamVjdC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsIHRpbWVzdGFtcCk7CisgICAgcHJv
dG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRPYmplY3QoInZhbHVlcyJfcywgV1RGTW92ZSh2YWx1ZXMp
KTsKKyAgICBwcm90b2NvbF9wYXJhbXNPYmplY3QtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCBXVEZN
b3ZlKHBheWxvYWQpKTsKKyAgICBwcm90b2NvbF9wYXJhbXNPYmplY3QtPnNldE9iamVjdCgic3Fs
RXJyb3IiX3MsIFdURk1vdmUoc3FsRXJyb3IpKTsKKyAgICBwcm90b2NvbF9wYXJhbXNPYmplY3Qt
PnNldFN0cmluZygic2NyZWVuQ29sb3IiX3MsIHNjcmVlbkNvbG9yKTsKKyAgICBwcm90b2NvbF9w
YXJhbXNPYmplY3QtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIFdURk1vdmUoYWx0ZXJu
YXRlQ29sb3JzKSk7CisgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInByaW50
Q29sb3IiX3MsIHByaW50Q29sb3IpOworICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRPYmpl
Y3QoInBhcmFtcyJfcywgV1RGTW92ZShwcm90b2NvbF9wYXJhbXNPYmplY3QpKTsKIAotICAgIG1f
ZnJvbnRlbmRSb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7Cisg
ICAgbV9mcm9udGVuZFJvdXRlci5zZW5kRXZlbnQocHJvdG9jb2xfanNvbk1lc3NhZ2UtPnRvSlNP
TlN0cmluZygpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCkBAIC0zNjIsNyArMzYz
LDkgQEAgdm9pZCBEYXRhYmFzZUZyb250ZW5kRGlzcGF0Y2hlcjo6ZGlkRXhlY3V0ZU5vT3B0aW9u
YWxQYXJhbWV0ZXJzKFJlZlB0cjxKU09OOjpBcnIKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9B
c3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYv
T3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNl
IEluc3BlY3RvciB7CiAKQEAgLTM5MSw3ICszOTQsNyBAQCB1c2luZyBDb2xvckxpc3QgPSBKU09O
OjpBcnJheU9mPFN0cmluZz47CiBuYW1lc3BhY2UgRGF0YWJhc2UgewogCiAvKiBEYXRhYmFzZSBl
cnJvci4gKi8KLWNsYXNzIEVycm9yIDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgeworY2xhc3Mg
RXJyb3IgZmluYWwgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7CiBwdWJsaWM6CiAgICAgZW51
bSB7CiAgICAgICAgIE5vRmllbGRzU2V0ID0gMCwKQEAgLTQxOCwxNyArNDIxLDE3IEBAIHB1Ymxp
YzoKICAgICAgICAgZnJpZW5kIGNsYXNzIEVycm9yOwogICAgIHB1YmxpYzoKIAotICAgICAgICBC
dWlsZGVyPFNUQVRFIHwgTWVzc2FnZVNldD4mIHNldE1lc3NhZ2UoY29uc3QgU3RyaW5nJiB2YWx1
ZSkKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IE1lc3NhZ2VTZXQ+JiBzZXRNZXNzYWdlKGNvbnN0
IFN0cmluZyYgaW5fbWVzc2FnZSkKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoIShTVEFURSAmIE1lc3NhZ2VTZXQpLCBwcm9wZXJ0eV9tZXNzYWdlX2FscmVhZHlfc2V0KTsK
LSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm1lc3NhZ2UiX3MsIHZhbHVlKTsKKyAg
ICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm1lc3NhZ2UiX3MsIGluX21lc3NhZ2UpOwog
ICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxNZXNzYWdlU2V0PigpOwogICAgICAgICB9CiAK
LSAgICAgICAgQnVpbGRlcjxTVEFURSB8IENvZGVTZXQ+JiBzZXRDb2RlKGludCB2YWx1ZSkKKyAg
ICAgICAgQnVpbGRlcjxTVEFURSB8IENvZGVTZXQ+JiBzZXRDb2RlKGludCBpbl9jb2RlKQogICAg
ICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQ29kZVNldCksIHBy
b3BlcnR5X2NvZGVfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldEludGVn
ZXIoImNvZGUiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRJbnRlZ2VyKCJj
b2RlIl9zLCBpbl9jb2RlKTsKICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Q29kZVNldD4o
KTsKICAgICAgICAgfQogCkBAIC00OTgsOCArNTAxLDcgQEAgcHVibGljOgogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKIAotI2luY2x1ZGUgPHd0
Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3
dGYvQXNzZXJ0aW9ucy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtNzc4LDI5ICs3
ODAsMjkgQEAgdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKICAgICBUSFJPV19FWENFUFRJT05f
Rk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIoYWx0ZXJuYXRlQ29sb3JzLCBAImFsdGVybmF0ZUNv
bG9ycyIpOwogICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihw
cmludENvbG9yLCBAInByaW50Q29sb3IiKTsKIAotICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25N
ZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0U3Ry
aW5nKCJtZXRob2QiX3MsICJEYXRhYmFzZS5kaWRFeGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJzIl9z
KTsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBwYXJhbXNPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNy
ZWF0ZSgpOworICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNy
ZWF0ZSgpOworICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywg
IkRhdGFiYXNlLmRpZEV4ZWN1dGVPcHRpb25hbFBhcmFtZXRlcnMiX3MpOworICAgIGF1dG8gcHJv
dG9jb2xfcGFyYW1zT2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICBpZiAoY29s
dW1uTmFtZXMpCi0gICAgICAgIHBhcmFtc09iamVjdC0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9z
LCB0b0pTT05TdHJpbmdBcnJheSgoKmNvbHVtbk5hbWVzKSkpOworICAgICAgICBwcm90b2NvbF9w
YXJhbXNPYmplY3QtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgdG9KU09OU3RyaW5nQXJyYXko
KCpjb2x1bW5OYW1lcykpKTsKICAgICBpZiAobm90ZXMpCi0gICAgICAgIHBhcmFtc09iamVjdC0+
c2V0U3RyaW5nKCJub3RlcyJfcywgKCpub3RlcykpOworICAgICAgICBwcm90b2NvbF9wYXJhbXNP
YmplY3QtPnNldFN0cmluZygibm90ZXMiX3MsICgqbm90ZXMpKTsKICAgICBpZiAodGltZXN0YW1w
KQotICAgICAgICBwYXJhbXNPYmplY3QtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCAoKnRpbWVz
dGFtcCkpOworICAgICAgICBwcm90b2NvbF9wYXJhbXNPYmplY3QtPnNldERvdWJsZSgidGltZXN0
YW1wIl9zLCAoKnRpbWVzdGFtcCkpOwogICAgIGlmICh2YWx1ZXMpCi0gICAgICAgIHBhcmFtc09i
amVjdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIFsoKnZhbHVlcykgdG9KU09OT2JqZWN0XSk7Cisg
ICAgICAgIHByb3RvY29sX3BhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIFsoKnZh
bHVlcykgdG9KU09OT2JqZWN0XSk7CiAgICAgaWYgKHBheWxvYWQpCi0gICAgICAgIHBhcmFtc09i
amVjdC0+c2V0VmFsdWUoInBheWxvYWQiX3MsIFsoKnBheWxvYWQpIHRvSlNPTk9iamVjdF0pOwor
ICAgICAgICBwcm90b2NvbF9wYXJhbXNPYmplY3QtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCBbKCpw
YXlsb2FkKSB0b0pTT05PYmplY3RdKTsKICAgICBpZiAoc3FsRXJyb3IpCi0gICAgICAgIHBhcmFt
c09iamVjdC0+c2V0T2JqZWN0KCJzcWxFcnJvciJfcywgWygqc3FsRXJyb3IpIHRvSlNPTk9iamVj
dF0pOworICAgICAgICBwcm90b2NvbF9wYXJhbXNPYmplY3QtPnNldE9iamVjdCgic3FsRXJyb3Ii
X3MsIFsoKnNxbEVycm9yKSB0b0pTT05PYmplY3RdKTsKICAgICBpZiAoc2NyZWVuQ29sb3IpCi0g
ICAgICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgKCpzY3JlZW5D
b2xvcikpOworICAgICAgICBwcm90b2NvbF9wYXJhbXNPYmplY3QtPnNldFN0cmluZygic2NyZWVu
Q29sb3IiX3MsICgqc2NyZWVuQ29sb3IpKTsKICAgICBpZiAoYWx0ZXJuYXRlQ29sb3JzKQotICAg
ICAgICBwYXJhbXNPYmplY3QtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIHRvSlNPTlN0
cmluZ0FycmF5KCgqYWx0ZXJuYXRlQ29sb3JzKSkpOworICAgICAgICBwcm90b2NvbF9wYXJhbXNP
YmplY3QtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KCgq
YWx0ZXJuYXRlQ29sb3JzKSkpOwogICAgIGlmIChwcmludENvbG9yKQotICAgICAgICBwYXJhbXNP
YmplY3QtPnNldFN0cmluZygicHJpbnRDb2xvciJfcywgKCpwcmludENvbG9yKSk7Ci0gICAganNv
bk1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIl9zLCBXVEZNb3ZlKHBhcmFtc09iamVjdCkpOwot
ICAgIHJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKKyAgICAg
ICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInByaW50Q29sb3IiX3MsICgqcHJp
bnRDb2xvcikpOworICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyJf
cywgV1RGTW92ZShwcm90b2NvbF9wYXJhbXNPYmplY3QpKTsKKyAgICByb3V0ZXIuc2VuZEV2ZW50
KHByb3RvY29sX2pzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7CiB9CiAKIC0gKHZvaWQpZGlk
RXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzV2l0aENvbHVtbk5hbWVzOihOU0FycmF5Lyo8TlNT
dHJpbmc+Ki8gKiljb2x1bW5OYW1lcyBub3RlczooTlNTdHJpbmcgKilub3RlcyB0aW1lc3RhbXA6
KGRvdWJsZSl0aW1lc3RhbXAgdmFsdWVzOihSV0lQcm90b2NvbEpTT05PYmplY3QgKil2YWx1ZXMg
cGF5bG9hZDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopcGF5bG9hZCBzcWxFcnJvcjooVGVzdFBy
b3RvY29sRGF0YWJhc2VFcnJvciAqKXNxbEVycm9yIHNjcmVlbkNvbG9yOihOU1N0cmluZyAqKXNj
cmVlbkNvbG9yIGFsdGVybmF0ZUNvbG9yczooTlNBcnJheS8qPE5TU3RyaW5nPiovICopYWx0ZXJu
YXRlQ29sb3JzIHByaW50Q29sb3I6KE5TU3RyaW5nICopcHJpbnRDb2xvcgpAQCAtODE2LDIwICs4
MTgsMjAgQEAgdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKICAgICBUSFJPV19FWENFUFRJT05f
Rk9SX1JFUVVJUkVEX1BBUkFNRVRFUihhbHRlcm5hdGVDb2xvcnMsIEAiYWx0ZXJuYXRlQ29sb3Jz
Iik7CiAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIocHJpbnRDb2xv
ciwgQCJwcmludENvbG9yIik7CiAKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9
IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0
aG9kIl9zLCAiRGF0YWJhc2UuZGlkRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzIl9zKTsKLSAg
ICBSZWY8SlNPTjo6T2JqZWN0PiBwYXJhbXNPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgp
OwotICAgIHBhcmFtc09iamVjdC0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCB0b0pTT05TdHJp
bmdBcnJheShjb2x1bW5OYW1lcykpOwotICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJub3Rl
cyJfcywgbm90ZXMpOwotICAgIHBhcmFtc09iamVjdC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3Ms
IHRpbWVzdGFtcCk7Ci0gICAgcGFyYW1zT2JqZWN0LT5zZXRPYmplY3QoInZhbHVlcyJfcywgW3Zh
bHVlcyB0b0pTT05PYmplY3RdKTsKLSAgICBwYXJhbXNPYmplY3QtPnNldFZhbHVlKCJwYXlsb2Fk
Il9zLCBbcGF5bG9hZCB0b0pTT05PYmplY3RdKTsKLSAgICBwYXJhbXNPYmplY3QtPnNldE9iamVj
dCgic3FsRXJyb3IiX3MsIFtzcWxFcnJvciB0b0pTT05PYmplY3RdKTsKLSAgICBwYXJhbXNPYmpl
Y3QtPnNldFN0cmluZygic2NyZWVuQ29sb3IiX3MsIHNjcmVlbkNvbG9yKTsKLSAgICBwYXJhbXNP
YmplY3QtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KGFs
dGVybmF0ZUNvbG9ycykpOwotICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJwcmludENvbG9y
Il9zLCBwcmludENvbG9yKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiX3Ms
IFdURk1vdmUocGFyYW1zT2JqZWN0KSk7Ci0gICAgcm91dGVyLnNlbmRFdmVudChqc29uTWVzc2Fn
ZS0+dG9KU09OU3RyaW5nKCkpOworICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09O
OjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJpbmco
Im1ldGhvZCJfcywgIkRhdGFiYXNlLmRpZEV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyJfcyk7
CisgICAgYXV0byBwcm90b2NvbF9wYXJhbXNPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgp
OworICAgIHByb3RvY29sX3BhcmFtc09iamVjdC0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCB0
b0pTT05TdHJpbmdBcnJheShjb2x1bW5OYW1lcykpOworICAgIHByb3RvY29sX3BhcmFtc09iamVj
dC0+c2V0U3RyaW5nKCJub3RlcyJfcywgbm90ZXMpOworICAgIHByb3RvY29sX3BhcmFtc09iamVj
dC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsIHRpbWVzdGFtcCk7CisgICAgcHJvdG9jb2xfcGFy
YW1zT2JqZWN0LT5zZXRPYmplY3QoInZhbHVlcyJfcywgW3ZhbHVlcyB0b0pTT05PYmplY3RdKTsK
KyAgICBwcm90b2NvbF9wYXJhbXNPYmplY3QtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCBbcGF5bG9h
ZCB0b0pTT05PYmplY3RdKTsKKyAgICBwcm90b2NvbF9wYXJhbXNPYmplY3QtPnNldE9iamVjdCgi
c3FsRXJyb3IiX3MsIFtzcWxFcnJvciB0b0pTT05PYmplY3RdKTsKKyAgICBwcm90b2NvbF9wYXJh
bXNPYmplY3QtPnNldFN0cmluZygic2NyZWVuQ29sb3IiX3MsIHNjcmVlbkNvbG9yKTsKKyAgICBw
cm90b2NvbF9wYXJhbXNPYmplY3QtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIHRvSlNP
TlN0cmluZ0FycmF5KGFsdGVybmF0ZUNvbG9ycykpOworICAgIHByb3RvY29sX3BhcmFtc09iamVj
dC0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCBwcmludENvbG9yKTsKKyAgICBwcm90b2NvbF9q
c29uTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiX3MsIFdURk1vdmUocHJvdG9jb2xfcGFyYW1z
T2JqZWN0KSk7CisgICAgcm91dGVyLnNlbmRFdmVudChwcm90b2NvbF9qc29uTWVzc2FnZS0+dG9K
U09OU3RyaW5nKCkpOwogfQogCiBAZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZ2VuZXJhdGUtZG9tYWlucy13aXRo
LWZlYXR1cmUtZ3VhcmRzLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2dlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJl
LWd1YXJkcy5qc29uLXJlc3VsdAppbmRleCAyOTRiYTkwODEyMThhMzUwMmQ5NmQ0NTVkNGQ2M2Qy
YjNmNWFhZTlhLi4zOWMzNjYzYWZmMmY2ZmI5YzBlYTdiODQ5Y2YzOTBhZmRhM2JmYmFhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhw
ZWN0ZWQvZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24tcmVzdWx0Cisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3Rl
ZC9nZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbi1yZXN1bHQKQEAgLTc0
LDcgKzc0LDcgQEAgSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiTmV0d29yazMiLCBu
dWxsKTsKIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogCi0j
aW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmpl
Y3RzLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXIuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5o
PgogCkBAIC05Miw3ICs5Miw3IEBAIHByaXZhdGU6CiBjbGFzcyBBbHRlcm5hdGVOZXR3b3JrMUJh
Y2tlbmREaXNwYXRjaGVyIDogcHVibGljIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKIHB1
YmxpYzoKICAgICB2aXJ0dWFsIH5BbHRlcm5hdGVOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyKCkg
eyB9Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZShsb25nIGNhbGxJZCkgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UobG9uZyBwcm90b2NvbF9jYWxsSWQpID0gMDsKIH07
CiAKIH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgpAQCAtMTM0LDExICsxMzQsMTQgQEAgcHVibGlj
OgogCiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8dHVwbGU+Cisj
aW5jbHVkZSA8d3RmL0V4cGVjdGVkLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCi10
eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKwogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRF
Uk5BVEVfRElTUEFUQ0hFUlMpCiBjbGFzcyBBbHRlcm5hdGVOZXR3b3JrMUJhY2tlbmREaXNwYXRj
aGVyOwpAQCAtMTQ2LDcgKzE0OSw3IEBAIGNsYXNzIEFsdGVybmF0ZU5ldHdvcmsxQmFja2VuZERp
c3BhdGNoZXI7CiAKIGNsYXNzIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKIHB1
YmxpYzoKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlKEVycm9yU3RyaW5nJikgPSAwOwor
ICAgIHZpcnR1YWwgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gbG9hZFJlc291cmNlKCkg
PSAwOwogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgfk5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyKCk7CiB9OwpAQCAtMTU0LDkgKzE1Nyw5IEBAIHByb3RlY3RlZDoKIGNsYXNzIE5ldHdv
cmsxQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgU3VwcGxlbWVudGFsQmFja2VuZERp
c3BhdGNoZXIgewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8TmV0d29yazFCYWNrZW5kRGlzcGF0
Y2hlcj4gY3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiwgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXIqKTsKLSAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJp
bmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKSBmaW5hbDsKKyAgICB2b2lk
IGRpc3BhdGNoKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBjb25zdCBTdHJpbmcmIHByb3RvY29sX21l
dGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9tZXNzYWdlKSBmaW5hbDsKIHByaXZh
dGU6Ci0gICAgdm9pZCBsb2FkUmVzb3VyY2UobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpP
YmplY3Q+JiYgcGFyYW1ldGVycyk7CisgICAgdm9pZCBsb2FkUmVzb3VyY2UobG9uZyBwcm90b2Ns
X2NhbGxJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9wYXJhbWV0ZXJzKTsKICNp
ZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIHB1YmxpYzoKICAgICB2
b2lkIHNldEFsdGVybmF0ZURpc3BhdGNoZXIoQWx0ZXJuYXRlTmV0d29yazFCYWNrZW5kRGlzcGF0
Y2hlciogYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeyBtX2FsdGVybmF0ZURpc3BhdGNoZXIgPSBhbHRl
cm5hdGVEaXNwYXRjaGVyOyB9CkBAIC0yMDUsOSArMjA4LDcgQEAgcHJpdmF0ZToKICNpbmNsdWRl
ICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9J
bnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CiAj
aW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAjaW5j
bHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgpAQCAtMjI5LDM4ICsyMzAs
MzggQEAgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hl
cihCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZEQKICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5y
ZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4oIk5ldHdvcmsxIl9zLCB0aGlzKTsKIH0KIAotdm9p
ZCBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29u
c3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkKK3ZvaWQgTmV0
d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyBwcm90b2NvbF9jYWxsSWQsIGNv
bnN0IFN0cmluZyYgcHJvdG9jb2xfbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29s
X21lc3NhZ2UpCiB7CiAgICAgUmVmPE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3Qo
KnRoaXMpOwogCi0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVyczsKLSAgICBtZXNz
YWdlLT5nZXRPYmplY3QoInBhcmFtcyJfcywgcGFyYW1ldGVycyk7CisgICAgYXV0byBwcm90b2Nv
bF9wYXJhbWV0ZXJzID0gcHJvdG9jb2xfbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3MpOwog
Ci0gICAgaWYgKG1ldGhvZCA9PSAibG9hZFJlc291cmNlIikgewotICAgICAgICBsb2FkUmVzb3Vy
Y2UocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKKyAgICBpZiAocHJvdG9jb2xfbWV0
aG9kID09ICJsb2FkUmVzb3VyY2UiKSB7CisgICAgICAgIGxvYWRSZXNvdXJjZShwcm90b2NvbF9j
YWxsSWQsIFdURk1vdmUocHJvdG9jb2xfcGFyYW1ldGVycykpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCi0gICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNr
ZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29yazEuIiArIG1ldGhvZCArICIn
IHdhcyBub3QgZm91bmQiKTsKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2Nv
bEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidOZXR3b3JrMS4iICsg
cHJvdG9jb2xfbWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOwogfQogCi12b2lkIE5ldHdvcmsx
QmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZShsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpT
T046Ok9iamVjdD4mJikKK3ZvaWQgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291
cmNlKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQogewogI2lm
IEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogICAgIGlmIChtX2FsdGVy
bmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVz
b3VyY2UocmVxdWVzdElkKTsKKyAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVz
b3VyY2UocHJvdG9jb2xfY2FsbElkKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZiAv
LyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIAotICAgIEVycm9yU3Ry
aW5nIGVycm9yOwotICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6
Y3JlYXRlKCk7Ci0gICAgbV9hZ2VudC0+bG9hZFJlc291cmNlKGVycm9yKTsKKyAgICBhdXRvIHJl
c3VsdCA9IG1fYWdlbnQtPmxvYWRSZXNvdXJjZSgpOworICAgIGlmICghcmVzdWx0KSB7CisgICAg
ICAgIEFTU0VSVCghcmVzdWx0LmVycm9yKCkuaXNFbXB0eSgpKTsKKyAgICAgICAgbV9iYWNrZW5k
RGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVy
RXJyb3IsIHJlc3VsdC5lcnJvcigpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIGlm
ICghZXJyb3IubGVuZ3RoKCkpCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNw
b25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2UpOwotICAgIGVsc2UKLSAgICAg
ICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0
Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKKyAgICBhdXRvIHByb3RvY29sX2pz
b25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBtX2JhY2tlbmREaXNwYXRj
aGVyLT5zZW5kUmVzcG9uc2UocHJvdG9jb2xfY2FsbElkLCBXVEZNb3ZlKHByb3RvY29sX2pzb25N
ZXNzYWdlKSwgZmFsc2UpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKQEAgLTMwMSw2
ICszMDIsNyBAQCB2b2lkIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZShs
b25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdAogCiAjaW5jbHVkZSAiVGVzdFByb3Rv
Y29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3Rm
L09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFj
ZSBJbnNwZWN0b3IgewpAQCAtMzUzLDE2ICszNTUsMTUgQEAgcHJpdmF0ZToKICNpbmNsdWRlICJU
ZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAK
IG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCiB2b2lkIE5ldHdvcmszRnJvbnRlbmREaXNwYXRjaGVy
OjpyZXNvdXJjZUxvYWRlZCgpCiB7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2Ug
PSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1l
dGhvZCJfcywgIk5ldHdvcmszLnJlc291cmNlTG9hZGVkIl9zKTsKKyAgICBhdXRvIHByb3RvY29s
X2pzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBwcm90b2NvbF9qc29u
TWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJOZXR3b3JrMy5yZXNvdXJjZUxvYWRlZCJf
cyk7CiAKLSAgICBtX2Zyb250ZW5kUm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09O
U3RyaW5nKCkpOworICAgIG1fZnJvbnRlbmRSb3V0ZXIuc2VuZEV2ZW50KHByb3RvY29sX2pzb25N
ZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgpA
QCAtNDAyLDcgKzQwMyw5IEBAIHZvaWQgTmV0d29yazNGcm9udGVuZERpc3BhdGNoZXI6OnJlc291
cmNlTG9hZGVkKCkKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yUHJvdG9jb2xUeXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5j
bHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKQEAg
LTQyMyw3ICs0MjYsNyBAQCBjbGFzcyBOZXR3b3JrRXJyb3I7CiAKIG5hbWVzcGFjZSBOZXR3b3Jr
MiB7CiAKLWNsYXNzIE5ldHdvcmtFcnJvciA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKK2Ns
YXNzIE5ldHdvcmtFcnJvciBmaW5hbCA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKIHB1Ymxp
YzoKICAgICBlbnVtIHsKICAgICAgICAgTm9GaWVsZHNTZXQgPSAwLApAQCAtNDUwLDE3ICs0NTMs
MTcgQEAgcHVibGljOgogICAgICAgICBmcmllbmQgY2xhc3MgTmV0d29ya0Vycm9yOwogICAgIHB1
YmxpYzoKIAotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTWVzc2FnZVNldD4mIHNldE1lc3NhZ2Uo
Y29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IE1lc3NhZ2VTZXQ+
JiBzZXRNZXNzYWdlKGNvbnN0IFN0cmluZyYgaW5fbWVzc2FnZSkKICAgICAgICAgewogICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE1lc3NhZ2VTZXQpLCBwcm9wZXJ0eV9tZXNz
YWdlX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm1lc3Nh
Z2UiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm1lc3NhZ2Ui
X3MsIGluX21lc3NhZ2UpOwogICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxNZXNzYWdlU2V0
PigpOwogICAgICAgICB9CiAKLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IENvZGVTZXQ+JiBzZXRD
b2RlKGludCB2YWx1ZSkKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IENvZGVTZXQ+JiBzZXRDb2Rl
KGludCBpbl9jb2RlKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNU
QVRFICYgQ29kZVNldCksIHByb3BlcnR5X2NvZGVfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAg
bV9yZXN1bHQtPnNldEludGVnZXIoImNvZGUiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIG1fcmVz
dWx0LT5zZXRJbnRlZ2VyKCJjb2RlIl9zLCBpbl9jb2RlKTsKICAgICAgICAgICAgIHJldHVybiBj
YXN0U3RhdGU8Q29kZVNldD4oKTsKICAgICAgICAgfQogCkBAIC01MzAsOCArNTMzLDcgQEAgcHVi
bGljOgogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMu
aCIKIAotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJp
bmcuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9y
IHsKIApAQCAtNTg3LDcgKzU4OSw3IEBAIGNsYXNzIE9iakNJbnNwZWN0b3JOZXR3b3JrMUJhY2tl
bmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEFsdGVybmF0ZU5ldHdvcmsxQmFjCiAgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgT2JqQ0luc3BlY3Rvck5ldHdvcmsx
QmFja2VuZERpc3BhdGNoZXIoaWQ8VGVzdFByb3RvY29sTmV0d29yazFEb21haW5IYW5kbGVyPiBo
YW5kbGVyKSB7IG1fZGVsZWdhdGUgPSBoYW5kbGVyOyB9Ci0gICAgdm9pZCBsb2FkUmVzb3VyY2Uo
bG9uZyByZXF1ZXN0SWQpIGZpbmFsOworICAgIHZvaWQgbG9hZFJlc291cmNlKGxvbmcgcHJvdG9j
b2xfY2FsbElkKSBmaW5hbDsKIHByaXZhdGU6CiAgICAgUmV0YWluUHRyPGlkPFRlc3RQcm90b2Nv
bE5ldHdvcmsxRG9tYWluSGFuZGxlcj4+IG1fZGVsZWdhdGU7CiB9OwpAQCAtNjM1LDIxICs2Mzcs
MjIgQEAgcHJpdmF0ZToKIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKLXZvaWQgT2JqQ0luc3Bl
Y3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZShsb25nIHJlcXVlc3RJ
ZCkKK3ZvaWQgT2JqQ0luc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNv
dXJjZShsb25nIHByb3RvY29sX2NhbGxJZCkKIHsKICAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3Bv
bmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IobG9hZFJlc291cmNlV2l0aEVycm9yQ2FsbGJhY2s6c3Vj
Y2Vzc0NhbGxiYWNrOildKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFBy
b3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQs
ICInTmV0d29yazEubG9hZFJlc291cmNlJyB3YXMgbm90IGZvdW5kIl9zKTsKKyAgICAgICAgYmFj
a2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxsSWQsIEJh
Y2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidOZXR3b3JrMS5sb2FkUmVzb3VyY2Un
IHdhcyBub3QgZm91bmQiX3MpOwogICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVu
ZGluZ0Vycm9ycygpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWQgZXJyb3JDYWxs
YmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCkt
PnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVy
RXJyb3IsIGVycm9yKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9j
b2xFcnJvcihwcm90b2NvbF9jYWxsSWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwg
ZXJyb3IpOwogICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygp
OwogICAgIH07CiAKICAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeewotICAgICAgICBiYWNrZW5k
RGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0
ZSgpLCBmYWxzZSk7CisgICAgICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpP
YmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9u
c2UocHJvdG9jb2xfY2FsbElkLCBXVEZNb3ZlKHByb3RvY29sX2pzb25NZXNzYWdlKSwgZmFsc2Up
OwogICAgIH07CiAKICAgICBbbV9kZWxlZ2F0ZSBsb2FkUmVzb3VyY2VXaXRoRXJyb3JDYWxsYmFj
azplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOwpAQCAtODUx
LDkgKzg1NCw5IEBAIHVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CiB7CiAgICAgY29uc3QgRnJv
bnRlbmRSb3V0ZXImIHJvdXRlciA9IF9jb250cm9sbGVyLT5mcm9udGVuZFJvdXRlcigpOwogCi0g
ICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgp
OwotICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIk5ldHdvcmszLnJlc291
cmNlTG9hZGVkIl9zKTsKLSAgICByb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05T
dHJpbmcoKSk7CisgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6
Y3JlYXRlKCk7CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9z
LCAiTmV0d29yazMucmVzb3VyY2VMb2FkZWQiX3MpOworICAgIHJvdXRlci5zZW5kRXZlbnQocHJv
dG9jb2xfanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKIH0KIAogQGVuZApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVk
L3NhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3NhbWUtdHlwZS1pZC1k
aWZmZXJlbnQtZG9tYWluLmpzb24tcmVzdWx0CmluZGV4IDQ1M2VmNmU0OTQ4ZWFiMDI1YWI1NjEz
NzhkMmI4YWE5NGY1NWM4OGQuLjU2ZWY2MzRkZTk4MDY4NTg2ZGJkY2QwODgxYjkxZDg0OWUyZmJh
MTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9leHBlY3RlZC9zYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uLXJlc3VsdAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0
ZWQvc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbi1yZXN1bHQKQEAgLTYzLDcgKzYz
LDcgQEAKIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogCi0j
aW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmpl
Y3RzLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXIuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5o
PgogCkBAIC0xMTksMTEgKzExOSwxNCBAQCBwcml2YXRlOgogCiAjaW5jbHVkZSAiVGVzdFByb3Rv
Y29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8dHVwbGU+CisjaW5jbHVkZSA8d3RmL0V4cGVjdGVkLmg+
CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmlu
ZzsKKwogCiAKIApAQCAtMTY0LDkgKzE2Nyw3IEBAIHR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5n
OwogI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKIAogI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0pTT05W
YWx1ZXMuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYv
dGV4dC9DU3RyaW5nLmg+CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRD
SEVSUykKICNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCkBAIC0y
MTQsNiArMjE1LDcgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKICNpbmNsdWRlICJUZXN0UHJv
dG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3
dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNw
YWNlIEluc3BlY3RvciB7CkBAIC0yNTcsNyArMjU5LDYgQEAgY2xhc3MgRnJvbnRlbmRSb3V0ZXI7
CiAjaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKIAogI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtMjk4LDcgKzI5OSw5IEBA
IG5hbWVzcGFjZSBJbnNwZWN0b3IgewogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlv
bnMuaD4KKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25h
bC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVj
dG9yIHsKIApAQCAtMzYyLDggKzM2NSw3IEBAIHVzaW5nIFJlbW90ZU9iamVjdElkID0gU3RyaW5n
OwogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIK
IAotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcu
aD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2V4cGVjdGVkL3NoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uLXJlc3VsdCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9z
aGFkb3dlZC1vcHRpb25hbC10eXBlLXNldHRlcnMuanNvbi1yZXN1bHQKaW5kZXggNWYyY2Q3OTMz
MDQyNDdlNzY1NWYzZTk4MWVhNzAwZjU3Yzc3MGZkOS4uOGVjZWNjNzAxMDM0MDRkYTdkYzI3OGNh
OTc1MTlhMmRlYmZjMDA1YiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3NoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVy
cy5qc29uLXJlc3VsdAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZXhwZWN0ZWQvc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24tcmVz
dWx0CkBAIC02Myw3ICs2Myw3IEBACiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9E
SVNQQVRDSEVSUykKIAotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVkZSAi
VGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
RnJvbnRlbmRSb3V0ZXIuaD4KIApAQCAtMTE5LDExICsxMTksMTQgQEAgcHJpdmF0ZToKIAogI2lu
Y2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9J
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHR1cGxlPgorI2luY2x1ZGUg
PHd0Zi9FeHBlY3RlZC5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAotdHlwZWRlZiBT
dHJpbmcgRXJyb3JTdHJpbmc7CisKIAogCiAKQEAgLTE2NCw5ICsxNjcsNyBAQCB0eXBlZGVmIFN0
cmluZyBFcnJvclN0cmluZzsKICNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCiAK
ICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2lu
Y2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+
Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9B
TFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAjaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNw
YXRjaGVycy5oIgpAQCAtMjE0LDYgKzIxNSw3IEBAIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCiAj
aW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVz
Lmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewpAQCAtMjU3LDcgKzI1OSw2IEBAIGNsYXNz
IEZyb250ZW5kUm91dGVyOwogI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCiAK
ICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKQEAg
LTI5OCw3ICsyOTksOSBAQCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKICNwcmFnbWEgb25jZQogCiAj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgotI2luY2x1
ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNs
dWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAog
bmFtZXNwYWNlIEluc3BlY3RvciB7CiAKQEAgLTMzMSw3ICszMzQsNyBAQCB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBTdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoVCBlbnVtVmFsdWUpCiBuYW1lc3Bh
Y2UgUnVudGltZSB7CiAKIC8qIEtleSBwYXRoLiAqLwotY2xhc3MgS2V5UGF0aCA6IHB1YmxpYyBK
U09OOjpPYmplY3RCYXNlIHsKK2NsYXNzIEtleVBhdGggZmluYWwgOiBwdWJsaWMgSlNPTjo6T2Jq
ZWN0QmFzZSB7CiBwdWJsaWM6CiAgICAgLy8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAndHlw
ZScgd2hpbGUgZ2VuZXJhdGluZyBLZXlQYXRoLgogICAgIGVudW0gY2xhc3MgVHlwZSB7CkBAIC0z
MzksNiArMzQyLDcgQEAgcHVibGljOgogICAgICAgICBTdHJpbmcgPSAxLAogICAgICAgICBBcnJh
eSA9IDIsCiAgICAgfTsgLy8gZW51bSBjbGFzcyBUeXBlCisKICAgICBlbnVtIHsKICAgICAgICAg
Tm9GaWVsZHNTZXQgPSAwLAogICAgICAgICBUeXBlU2V0ID0gMSA8PCAwLApAQCAtMzYzLDEwICsz
NjcsMTAgQEAgcHVibGljOgogICAgICAgICBmcmllbmQgY2xhc3MgS2V5UGF0aDsKICAgICBwdWJs
aWM6CiAKLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IFR5cGVTZXQ+JiBzZXRUeXBlKFR5cGUgdmFs
dWUpCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBUeXBlU2V0PiYgc2V0VHlwZShUeXBlIGluX3R5
cGUpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBUeXBl
U2V0KSwgcHJvcGVydHlfdHlwZV9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+
c2V0U3RyaW5nKCJ0eXBlIl9zLCBJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0
RW51bUNvbnN0YW50VmFsdWUodmFsdWUpKTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJp
bmcoInR5cGUiX3MsIFByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUo
aW5fdHlwZSkpOwogICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxUeXBlU2V0PigpOwogICAg
ICAgICB9CiAKQEAgLTM5MiwxNCArMzk2LDE0IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIEJ1
aWxkZXI8Tm9GaWVsZHNTZXQ+KEpTT046Ok9iamVjdDo6Y3JlYXRlKCkpOwogICAgIH0KIAotICAg
IHZvaWQgc2V0U3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgdm9pZCBzZXRTdHJpbmco
Y29uc3QgU3RyaW5nJiBpbl9vcHRfc3RyaW5nKQogICAgIHsKLSAgICAgICAgSlNPTjo6T2JqZWN0
QmFzZTo6c2V0U3RyaW5nKCJzdHJpbmciX3MsIHZhbHVlKTsKKyAgICAgICAgSlNPTjo6T2JqZWN0
QmFzZTo6c2V0U3RyaW5nKCJzdHJpbmciX3MsIGluX29wdF9zdHJpbmcpOwogICAgIH0KIAotICAg
IHZvaWQgc2V0QXJyYXkoUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4gdmFsdWUpCisgICAg
dm9pZCBzZXRBcnJheShSZWY8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiYmIGluX29wdF9hcnJheSkK
ICAgICB7Ci0gICAgICAgIEpTT046Ok9iamVjdEJhc2U6OnNldEFycmF5KCJhcnJheSJfcywgV1RG
TW92ZSh2YWx1ZSkpOworICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXRBcnJheSgiYXJyYXki
X3MsIFdURk1vdmUoaW5fb3B0X2FycmF5KSk7CiAgICAgfQogfTsKIApAQCAtNDE0LDcgKzQxOCw3
IEBAIE9wdGlvbmFsPFByb3RvY29sRW51bVR5cGU+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZyhj
b25zdCBTdHJpbmcmKTsKIAogLy8gRW51bXMgaW4gdGhlICdSdW50aW1lJyBEb21haW4KIHRlbXBs
YXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OktleVBhdGg6OlR5
cGU+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1l
OjpLZXlQYXRoOjpUeXBlPihjb25zdCBTdHJpbmcmKTsKK09wdGlvbmFsPFByb3RvY29sOjpSdW50
aW1lOjpLZXlQYXRoOjpUeXBlPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8UHJvdG9jb2w6OlJ1
bnRpbWU6OktleVBhdGg6OlR5cGU+KGNvbnN0IFN0cmluZyYpOwogCiB9IC8vIG5hbWVzcGFjZSBU
ZXN0SGVscGVycwogCkBAIC00NTYsOCArNDYwLDcgQEAgT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90
b2NvbDo6UnVudGltZTo6S2V5UGF0aDo6VHlwZT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEkK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAK
LSNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+
CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAK
QEAgLTQ3OCwxNiArNDgxLDE2IEBAIFN0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29k
ZSkgewogLy8gRW51bXMgaW4gdGhlICdSdW50aW1lJyBEb21haW4KIAogdGVtcGxhdGU8PgotT3B0
aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6S2V5UGF0aDo6VHlwZT4gcGFyc2VF
bnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OktleVBhdGg6
OlR5cGU+KGNvbnN0IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcpCitPcHRpb25hbDxQcm90b2NvbDo6
UnVudGltZTo6S2V5UGF0aDo6VHlwZT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPFByb3RvY29s
OjpSdW50aW1lOjpLZXlQYXRoOjpUeXBlPihjb25zdCBTdHJpbmcmIHByb3RvY29sU3RyaW5nKQog
ewogICAgIHN0YXRpYyBjb25zdCBzaXplX3QgY29uc3RhbnRWYWx1ZXNbXSA9IHsKLSAgICAgICAg
KHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpLZXlQYXRoOjpUeXBlOjpOdWxs
LAotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OktleVBhdGg6
OlR5cGU6OlN0cmluZywKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50
aW1lOjpLZXlQYXRoOjpUeXBlOjpBcnJheSwKKyAgICAgICAgKHNpemVfdClQcm90b2NvbDo6UnVu
dGltZTo6S2V5UGF0aDo6VHlwZTo6TnVsbCwKKyAgICAgICAgKHNpemVfdClQcm90b2NvbDo6UnVu
dGltZTo6S2V5UGF0aDo6VHlwZTo6U3RyaW5nLAorICAgICAgICAoc2l6ZV90KVByb3RvY29sOjpS
dW50aW1lOjpLZXlQYXRoOjpUeXBlOjpBcnJheSwKICAgICB9OwogICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgMzsgKytpKQogICAgICAgICBpZiAocHJvdG9jb2xTdHJpbmcgPT0gZW51bV9jb25z
dGFudF92YWx1ZXNbY29uc3RhbnRWYWx1ZXNbaV1dKQotICAgICAgICAgICAgcmV0dXJuIChJbnNw
ZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpLZXlQYXRoOjpUeXBlKWNvbnN0YW50VmFsdWVzW2ld
OworICAgICAgICAgICAgcmV0dXJuIChQcm90b2NvbDo6UnVudGltZTo6S2V5UGF0aDo6VHlwZSlj
b25zdGFudFZhbHVlc1tpXTsKIAogICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0
ZWQvc2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3Nob3VsZC1zdHJpcC1jb21tZW50
cy5qc29uLXJlc3VsdAppbmRleCAzNDhhY2U5M2JhYjA5NDdkYWY4NWI0NWY1OWM5ZmNhYTY3MDJk
ZTAwLi4wMGFhMzZmYTNkMDI0OTEzYzViOGQyNzM4MTFkYTVhMDE1NDgzMTI4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQv
c2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpzb24tcmVzdWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9zaG91bGQtc3RyaXAtY29tbWVu
dHMuanNvbi1yZXN1bHQKQEAgLTYzLDcgKzYzLDcgQEAKIAogI2lmIEVOQUJMRShJTlNQRUNUT1Jf
QUxURVJOQVRFX0RJU1BBVENIRVJTKQogCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIK
KyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgogCkBAIC0xMTksMTEgKzExOSwxNCBAQCBwcml2
YXRlOgogCiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8dHVwbGU+
CisjaW5jbHVkZSA8d3RmL0V4cGVjdGVkLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAj
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3Igewog
Ci10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKwogCiAKIApAQCAtMTY0LDkgKzE2Nyw3IEBA
IHR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwogI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0
Y2hlcnMuaCIKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91
dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJE
ZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKICNpZiBFTkFCTEUo
SU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKICNpbmNsdWRlICJUZXN0QWx0ZXJuYXRl
QmFja2VuZERpc3BhdGNoZXJzLmgiCkBAIC0yMTQsNiArMjE1LDcgQEAgbmFtZXNwYWNlIEluc3Bl
Y3RvciB7CiAKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8d3Rm
L0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CkBAIC0yNTcsNyArMjU5
LDYgQEAgY2xhc3MgRnJvbnRlbmRSb3V0ZXI7CiAjaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0
Y2hlcnMuaCIKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91
dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVj
dG9yIHsKIApAQCAtMjk4LDcgKzI5OSw5IEBAIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogI3ByYWdt
YSBvbmNlCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVz
Lmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVl
cy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtMzUyLDggKzM1NSw3IEBAIG5h
bWVzcGFjZSBQcm90b2NvbCB7CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGVzdFBy
b3RvY29sT2JqZWN0cy5oIgogCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8
d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAKIG5hbWVz
cGFjZSBJbnNwZWN0b3IgewogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXBy
aW1pdGl2ZS10eXBlLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRp
dmUtdHlwZS5qc29uLXJlc3VsdAppbmRleCA3OWNiOTg1NDU5Zjg4MjQ1Njc3YzVlM2MyNjA1Zjcz
NDRlMTE2YmZjLi4zNGIxYWNiYmNhZWM4MTJkODRkMTY5ZmUzYjJiODI3MjU2N2FiZDQxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhw
ZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24tcmVzdWx0
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBl
Y3RlZC90eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbi1yZXN1bHQK
QEAgLTYzLDcgKzYzLDcgQEAKIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BB
VENIRVJTKQogCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKKyNpbmNsdWRlICJUZXN0
UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFj
a2VuZERpc3BhdGNoZXIuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9u
dGVuZFJvdXRlci5oPgogCkBAIC0xMTksMTEgKzExOSwxNCBAQCBwcml2YXRlOgogCiAjaW5jbHVk
ZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8dHVwbGU+CisjaW5jbHVkZSA8d3Rm
L0V4cGVjdGVkLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCi10eXBlZGVmIFN0cmlu
ZyBFcnJvclN0cmluZzsKKwogCiAKIApAQCAtMTY0LDkgKzE2Nyw3IEBAIHR5cGVkZWYgU3RyaW5n
IEVycm9yU3RyaW5nOwogI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKIAogI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVk
ZSA8d3RmL0pTT05WYWx1ZXMuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVS
TkFURV9ESVNQQVRDSEVSUykKICNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNo
ZXJzLmgiCkBAIC0yMTQsNiArMjE1LDcgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKICNpbmNs
dWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4K
KyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CkBAIC0yNTcsNyArMjU5LDYgQEAgY2xhc3MgRnJv
bnRlbmRSb3V0ZXI7CiAjaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKIAogI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVk
ZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtMjk4
LDcgKzI5OSw5IEBAIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogI3ByYWdtYSBvbmNlCiAKICNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+Ci0jaW5jbHVkZSA8
d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUg
PHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1l
c3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtMzU3LDggKzM2MCw3IEBAIHVzaW5nIFJlbW90ZU9iamVj
dElkID0gaW50OwogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9i
amVjdHMuaCIKIAotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0
L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogCiBuYW1lc3BhY2UgSW5z
cGVjdG9yIHsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uLXJl
c3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBl
Y3RlZC90eXBlLWRlY2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbi1yZXN1bHQKaW5kZXggZDg4ODBj
NjNlMzM3OGM1Y2ZlMzA4Y2FmZGY4NGNjOTg3NDkyYmJmYy4uOTQwZjE1ODBiZGMxZDliY2E0NDAx
NDc0MTUyYTIzYmIyNTRiMTkwZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlw
ZS5qc29uLXJlc3VsdAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24tcmVzdWx0
CkBAIC02OCw3ICs2OCw3IEBAIEluc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIkRlYnVn
Z2VyIiwgbnVsbCk7CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVS
UykKIAotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVkZSAiVGVzdFByb3Rv
Y29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRS
b3V0ZXIuaD4KIApAQCAtMTI0LDExICsxMjQsMTQgQEAgcHJpdmF0ZToKIAogI2luY2x1ZGUgIlRl
c3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHR1cGxlPgorI2luY2x1ZGUgPHd0Zi9FeHBl
Y3RlZC5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAotdHlwZWRlZiBTdHJpbmcgRXJy
b3JTdHJpbmc7CisKIAogCiAKQEAgLTE2OSw5ICsxNzIsNyBAQCB0eXBlZGVmIFN0cmluZyBFcnJv
clN0cmluZzsKICNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCiAKICNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0
Zi9KU09OVmFsdWVzLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVk
ZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVf
RElTUEFUQ0hFUlMpCiAjaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5o
IgpAQCAtMjE5LDYgKzIyMCw3IEBAIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCiAjaW5jbHVkZSAi
VGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5j
bHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAK
IG5hbWVzcGFjZSBJbnNwZWN0b3IgewpAQCAtMjYyLDcgKzI2NCw2IEBAIGNsYXNzIEZyb250ZW5k
Um91dGVyOwogI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCiAKICNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0
Zi90ZXh0L0NTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKQEAgLTMwMyw3ICsz
MDQsOSBAQCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9B
c3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYv
T3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNl
IEluc3BlY3RvciB7CiAKQEAgLTMzMSw3ICszMzQsNyBAQCB1c2luZyBMdWNreU51bWJlcnMgPSBK
U09OOjpBcnJheU9mPGludD47CiB1c2luZyBCYWJ5TmFtZXMgPSBKU09OOjpBcnJheU9mPFN0cmlu
Zz47CiB1c2luZyBOZXdPYmplY3RzID0gSlNPTjo6QXJyYXlPZjxpbnQ+OwogdXNpbmcgT2xkT2Jq
ZWN0cyA9IEpTT046OkFycmF5T2Y8aW50PjsKLXVzaW5nIFN0b3BSZWFzb25zID0gSlNPTjo6QXJy
YXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6UmVhc29uPjsKK3VzaW5nIFN0b3BS
ZWFzb25zID0gSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6RGVidWdnZXI6OlJlYXNvbj47CiB9IC8v
IFJ1bnRpbWUKIC8vIEVuZCBvZiB0eXBlZGVmcy4KIApAQCAtMzY1LDcgKzM2OCw3IEBAIE9wdGlv
bmFsPFByb3RvY29sRW51bVR5cGU+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZyhjb25zdCBTdHJp
bmcmKTsKIAogLy8gRW51bXMgaW4gdGhlICdEZWJ1Z2dlcicgRG9tYWluCiB0ZW1wbGF0ZTw+Ci1P
cHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6UmVhc29uPiBwYXJzZUVudW1W
YWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OlJlYXNvbj4oY29u
c3QgU3RyaW5nJik7CitPcHRpb25hbDxQcm90b2NvbDo6RGVidWdnZXI6OlJlYXNvbj4gcGFyc2VF
bnVtVmFsdWVGcm9tU3RyaW5nPFByb3RvY29sOjpEZWJ1Z2dlcjo6UmVhc29uPihjb25zdCBTdHJp
bmcmKTsKIAogfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKIApAQCAtNDE3LDggKzQyMCw3IEBA
IHN0cnVjdCBEZWZhdWx0SGFzaDxJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6UmVhc29u
PiA6IEludEhhc2g8SW5zcGVjdG9yOjpQCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
VGVzdFByb3RvY29sT2JqZWN0cy5oIgogCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5j
bHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAK
IG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC00MzksMTYgKzQ0MSwxNiBAQCBTdHJpbmcgZ2V0
RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpIHsKIC8vIEVudW1zIGluIHRoZSAnRGVidWdnZXIn
IERvbWFpbgogCiB0ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1
Z2dlcjo6UmVhc29uPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6RGVidWdnZXI6OlJlYXNvbj4oY29uc3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKK09wdGlv
bmFsPFByb3RvY29sOjpEZWJ1Z2dlcjo6UmVhc29uPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8
UHJvdG9jb2w6OkRlYnVnZ2VyOjpSZWFzb24+KGNvbnN0IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcp
CiB7CiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBjb25zdGFudFZhbHVlc1tdID0gewotICAgICAg
ICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpSZWFzb246OkRpZWQsCi0g
ICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OlJlYXNvbjo6RmFp
bnRlZCwKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6UmVh
c29uOjpIdW5ncnksCisgICAgICAgIChzaXplX3QpUHJvdG9jb2w6OkRlYnVnZ2VyOjpSZWFzb246
OkRpZWQsCisgICAgICAgIChzaXplX3QpUHJvdG9jb2w6OkRlYnVnZ2VyOjpSZWFzb246OkZhaW50
ZWQsCisgICAgICAgIChzaXplX3QpUHJvdG9jb2w6OkRlYnVnZ2VyOjpSZWFzb246Okh1bmdyeSwK
ICAgICB9OwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgMzsgKytpKQogICAgICAgICBpZiAo
cHJvdG9jb2xTdHJpbmcgPT0gZW51bV9jb25zdGFudF92YWx1ZXNbY29uc3RhbnRWYWx1ZXNbaV1d
KQotICAgICAgICAgICAgcmV0dXJuIChJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6UmVh
c29uKWNvbnN0YW50VmFsdWVzW2ldOworICAgICAgICAgICAgcmV0dXJuIChQcm90b2NvbDo6RGVi
dWdnZXI6OlJlYXNvbiljb25zdGFudFZhbHVlc1tpXTsKIAogICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbi1yZXN1bHQg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQv
dHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbi1yZXN1bHQKaW5kZXggM2EyYzIwNTI4MzA0
NGUwMDA2YjMzMWVlMzE1YjA0MzdhNGZhNWJmOS4uOTUxMTZiYzUwYWJmMjc5NDA2NDU5MDcxMGZj
ZDNlMjQ2YmYwYzU4YiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24t
cmVzdWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uLXJlc3VsdApAQCAtNjks
NyArNjksNyBAQCBJbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJSdW50aW1lIiwgbnVs
bCk7CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIAotI2lu
Y2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0
cy5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
Lmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4K
IApAQCAtMTI1LDExICsxMjUsMTQgQEAgcHJpdmF0ZToKIAogI2luY2x1ZGUgIlRlc3RQcm90b2Nv
bE9iamVjdHMuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlci5oPgorI2luY2x1ZGUgPHR1cGxlPgorI2luY2x1ZGUgPHd0Zi9FeHBlY3RlZC5oPgor
I2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7
CisKIAogCiAKQEAgLTE3MCw5ICsxNzMsNyBAQCB0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsK
ICNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCiAKICNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi9KU09OVmFs
dWVzLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3Rl
eHQvQ1N0cmluZy5oPgogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hF
UlMpCiAjaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgpAQCAtMjIw
LDYgKzIyMSw3IEBAIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCiAjaW5jbHVkZSAiVGVzdFByb3Rv
Y29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3Rm
L09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFj
ZSBJbnNwZWN0b3IgewpAQCAtMjYzLDcgKzI2NSw2IEBAIGNsYXNzIEZyb250ZW5kUm91dGVyOwog
I2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCiAKICNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKQEAgLTMwNCw3ICszMDUsOSBAQCBu
YW1lc3BhY2UgSW5zcGVjdG9yIHsKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25z
Lmg+CisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwu
aD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3Rv
ciB7CiAKQEAgLTM2Miw5ICszNjUsOSBAQCBPcHRpb25hbDxQcm90b2NvbEVudW1UeXBlPiBwYXJz
ZUVudW1WYWx1ZUZyb21TdHJpbmcoY29uc3QgU3RyaW5nJik7CiAKIC8vIEVudW1zIGluIHRoZSAn
UnVudGltZScgRG9tYWluCiB0ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29s
OjpSdW50aW1lOjpGYXJtQW5pbWFscz4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkZhcm1BbmltYWxzPihjb25zdCBTdHJpbmcmKTsKK09wdGlv
bmFsPFByb3RvY29sOjpSdW50aW1lOjpGYXJtQW5pbWFscz4gcGFyc2VFbnVtVmFsdWVGcm9tU3Ry
aW5nPFByb3RvY29sOjpSdW50aW1lOjpGYXJtQW5pbWFscz4oY29uc3QgU3RyaW5nJik7CiB0ZW1w
bGF0ZTw+Ci1PcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpUd29MZWdnZWRB
bmltYWxzPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVu
dGltZTo6VHdvTGVnZ2VkQW5pbWFscz4oY29uc3QgU3RyaW5nJik7CitPcHRpb25hbDxQcm90b2Nv
bDo6UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFscz4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPFBy
b3RvY29sOjpSdW50aW1lOjpUd29MZWdnZWRBbmltYWxzPihjb25zdCBTdHJpbmcmKTsKIAogfSAv
LyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKIApAQCAtNDE4LDggKzQyMSw3IEBAIHN0cnVjdCBEZWZh
dWx0SGFzaDxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpUd29MZWdnZWRBbmltYWxzPiA6
IEludEhhc2g8SW5zCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGVzdFByb3RvY29s
T2JqZWN0cy5oIgogCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3Rl
eHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAKIG5hbWVzcGFjZSBJ
bnNwZWN0b3IgewogCkBAIC00NDQsMzMgKzQ0NiwzMyBAQCBTdHJpbmcgZ2V0RW51bUNvbnN0YW50
VmFsdWUoaW50IGNvZGUpIHsKIC8vIEVudW1zIGluIHRoZSAnUnVudGltZScgRG9tYWluCiAKIHRl
bXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkZhcm1Bbmlt
YWxzPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGlt
ZTo6RmFybUFuaW1hbHM+KGNvbnN0IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcpCitPcHRpb25hbDxQ
cm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHM+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxQ
cm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHM+KGNvbnN0IFN0cmluZyYgcHJvdG9jb2xTdHJp
bmcpCiB7CiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBjb25zdGFudFZhbHVlc1tdID0gewotICAg
ICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkZhcm1BbmltYWxzOjpQ
aWdzLAotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkZhcm1B
bmltYWxzOjpDb3dzLAotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRp
bWU6OkZhcm1BbmltYWxzOjpDYXRzLAotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9j
b2w6OlJ1bnRpbWU6OkZhcm1BbmltYWxzOjpIZW5zLAorICAgICAgICAoc2l6ZV90KVByb3RvY29s
OjpSdW50aW1lOjpGYXJtQW5pbWFsczo6UGlncywKKyAgICAgICAgKHNpemVfdClQcm90b2NvbDo6
UnVudGltZTo6RmFybUFuaW1hbHM6OkNvd3MsCisgICAgICAgIChzaXplX3QpUHJvdG9jb2w6OlJ1
bnRpbWU6OkZhcm1BbmltYWxzOjpDYXRzLAorICAgICAgICAoc2l6ZV90KVByb3RvY29sOjpSdW50
aW1lOjpGYXJtQW5pbWFsczo6SGVucywKICAgICB9OwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgNDsgKytpKQogICAgICAgICBpZiAocHJvdG9jb2xTdHJpbmcgPT0gZW51bV9jb25zdGFudF92
YWx1ZXNbY29uc3RhbnRWYWx1ZXNbaV1dKQotICAgICAgICAgICAgcmV0dXJuIChJbnNwZWN0b3I6
OlByb3RvY29sOjpSdW50aW1lOjpGYXJtQW5pbWFscyljb25zdGFudFZhbHVlc1tpXTsKKyAgICAg
ICAgICAgIHJldHVybiAoUHJvdG9jb2w6OlJ1bnRpbWU6OkZhcm1BbmltYWxzKWNvbnN0YW50VmFs
dWVzW2ldOwogCiAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KIAogdGVtcGxhdGU8PgotT3B0
aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFscz4gcGFy
c2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlR3b0xl
Z2dlZEFuaW1hbHM+KGNvbnN0IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcpCitPcHRpb25hbDxQcm90
b2NvbDo6UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFscz4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5n
PFByb3RvY29sOjpSdW50aW1lOjpUd29MZWdnZWRBbmltYWxzPihjb25zdCBTdHJpbmcmIHByb3Rv
Y29sU3RyaW5nKQogewogICAgIHN0YXRpYyBjb25zdCBzaXplX3QgY29uc3RhbnRWYWx1ZXNbXSA9
IHsKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpUd29MZWdn
ZWRBbmltYWxzOjpEdWNrcywKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpS
dW50aW1lOjpUd29MZWdnZWRBbmltYWxzOjpIZW5zLAotICAgICAgICAoc2l6ZV90KUluc3BlY3Rv
cjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlR3b0xlZ2dlZEFuaW1hbHM6OkNyb3dzLAotICAgICAgICAo
c2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlR3b0xlZ2dlZEFuaW1hbHM6OkZs
YW1pbmdvcywKKyAgICAgICAgKHNpemVfdClQcm90b2NvbDo6UnVudGltZTo6VHdvTGVnZ2VkQW5p
bWFsczo6RHVja3MsCisgICAgICAgIChzaXplX3QpUHJvdG9jb2w6OlJ1bnRpbWU6OlR3b0xlZ2dl
ZEFuaW1hbHM6OkhlbnMsCisgICAgICAgIChzaXplX3QpUHJvdG9jb2w6OlJ1bnRpbWU6OlR3b0xl
Z2dlZEFuaW1hbHM6OkNyb3dzLAorICAgICAgICAoc2l6ZV90KVByb3RvY29sOjpSdW50aW1lOjpU
d29MZWdnZWRBbmltYWxzOjpGbGFtaW5nb3MsCiAgICAgfTsKICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IDQ7ICsraSkKICAgICAgICAgaWYgKHByb3RvY29sU3RyaW5nID09IGVudW1fY29uc3Rh
bnRfdmFsdWVzW2NvbnN0YW50VmFsdWVzW2ldXSkKLSAgICAgICAgICAgIHJldHVybiAoSW5zcGVj
dG9yOjpQcm90b2NvbDo6UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFscyljb25zdGFudFZhbHVlc1tp
XTsKKyAgICAgICAgICAgIHJldHVybiAoUHJvdG9jb2w6OlJ1bnRpbWU6OlR3b0xlZ2dlZEFuaW1h
bHMpY29uc3RhbnRWYWx1ZXNbaV07CiAKICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4
cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbi1yZXN1bHQgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNs
YXJhdGlvbi1vYmplY3QtdHlwZS5qc29uLXJlc3VsdAppbmRleCAzMjhmZWQyM2RjNGNhN2YxODg1
OTBiNjM0NGQ1YmY3ZTQ3M2RkYzAzLi5iYTlmMTdjNjI1MGRjZTA2OGNmOTQ2NTU5NDcwZGQ0NWI2
MTc3NDA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uLXJlc3Vs
dAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhw
ZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29uLXJlc3VsdApAQCAtNzAsNyAr
NzAsNyBAQCBJbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJEYXRhYmFzZSIsIG51bGwp
OwogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAKLSNpbmNs
dWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMu
aCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5o
PgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CiAK
QEAgLTEyNiwxMSArMTI2LDE0IEBAIHByaXZhdGU6CiAKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xP
YmplY3RzLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXIuaD4KKyNpbmNsdWRlIDx0dXBsZT4KKyNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4KKyNp
bmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
IAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwor
CiAKIAogCkBAIC0xNzEsOSArMTc0LDcgQEAgdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiAj
aW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVl
cy5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0
L0NTdHJpbmcuaD4KIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJT
KQogI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKQEAgLTIyMSw2
ICsyMjIsNyBAQCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAogI2luY2x1ZGUgIlRlc3RQcm90b2Nv
bE9iamVjdHMuaCIKICNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9P
cHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKQEAgLTI2NCw3ICsyNjYsNiBAQCBjbGFzcyBGcm9udGVuZFJvdXRlcjsKICNp
bmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3Ry
aW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC0zMDUsNyArMzA2LDkgQEAgbmFt
ZXNwYWNlIEluc3BlY3RvciB7CiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5o
PgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3Ig
ewogCkBAIC0zMzMsNyArMzM2LDcgQEAgY2xhc3MgUGFyYW1ldGVyQnVuZGxlOwogCiAvLyBUeXBl
ZGVmcy4KIG5hbWVzcGFjZSBEYXRhYmFzZSB7Ci11c2luZyBFcnJvckxpc3QgPSBKU09OOjpBcnJh
eU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj47Cit1c2luZyBFcnJvckxp
c3QgPSBKU09OOjpBcnJheU9mPFByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+OwogfSAvLyBEYXRh
YmFzZQogLy8gRW5kIG9mIHR5cGVkZWZzLgogCkBAIC0zNTEsNyArMzU0LDcgQEAgdGVtcGxhdGU8
dHlwZW5hbWUgVD4gU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKFQgZW51bVZhbHVlKQogbmFt
ZXNwYWNlIERhdGFiYXNlIHsKIAogLyogRGF0YWJhc2UgZXJyb3IuICovCi1jbGFzcyBFcnJvciA6
IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKK2NsYXNzIEVycm9yIGZpbmFsIDogcHVibGljIEpT
T046Ok9iamVjdEJhc2UgewogcHVibGljOgogICAgIGVudW0gewogICAgICAgICBOb0ZpZWxkc1Nl
dCA9IDAsCkBAIC0zNzgsMTcgKzM4MSwxNyBAQCBwdWJsaWM6CiAgICAgICAgIGZyaWVuZCBjbGFz
cyBFcnJvcjsKICAgICBwdWJsaWM6CiAKLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IE1lc3NhZ2VT
ZXQ+JiBzZXRNZXNzYWdlKGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8U1RB
VEUgfCBNZXNzYWdlU2V0PiYgc2V0TWVzc2FnZShjb25zdCBTdHJpbmcmIGluX21lc3NhZ2UpCiAg
ICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBNZXNzYWdlU2V0
KSwgcHJvcGVydHlfbWVzc2FnZV9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+
c2V0U3RyaW5nKCJtZXNzYWdlIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0
U3RyaW5nKCJtZXNzYWdlIl9zLCBpbl9tZXNzYWdlKTsKICAgICAgICAgICAgIHJldHVybiBjYXN0
U3RhdGU8TWVzc2FnZVNldD4oKTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUg
fCBDb2RlU2V0PiYgc2V0Q29kZShpbnQgdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBD
b2RlU2V0PiYgc2V0Q29kZShpbnQgaW5fY29kZSkKICAgICAgICAgewogICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoIShTVEFURSAmIENvZGVTZXQpLCBwcm9wZXJ0eV9jb2RlX2FscmVhZHlfc2V0
KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRJbnRlZ2VyKCJjb2RlIl9zLCB2YWx1ZSk7Cisg
ICAgICAgICAgICBtX3Jlc3VsdC0+c2V0SW50ZWdlcigiY29kZSJfcywgaW5fY29kZSk7CiAgICAg
ICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENvZGVTZXQ+KCk7CiAgICAgICAgIH0KIApAQCAtNDI0
LDEzICs0MjcsMTQgQEAgZW51bSBjbGFzcyBNb3VzZUJ1dHRvbiB7CiAgICAgUmlnaHQgPSAzLAog
fTsgLy8gZW51bSBjbGFzcyBNb3VzZUJ1dHRvbgogCi1jbGFzcyBPcHRpb25hbFBhcmFtZXRlckJ1
bmRsZSA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKK2NsYXNzIE9wdGlvbmFsUGFyYW1ldGVy
QnVuZGxlIGZpbmFsIDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgewogcHVibGljOgogICAgIC8v
IE5hbWVkIGFmdGVyIHByb3BlcnR5IG5hbWUgJ2RpcmVjdGlvbmFsaXR5JyB3aGlsZSBnZW5lcmF0
aW5nIE9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlLgogICAgIGVudW0gY2xhc3MgRGlyZWN0aW9uYWxp
dHkgewogICAgICAgICBMVFIgPSA0LAogICAgICAgICBSVEwgPSA1LAogICAgIH07IC8vIGVudW0g
Y2xhc3MgRGlyZWN0aW9uYWxpdHkKKwogICAgIGVudW0gewogICAgICAgICBOb0ZpZWxkc1NldCA9
IDAsCiAgICAgICAgIEFsbEZpZWxkc1NldCA9IDAKQEAgLTQ3NSw1OSArNDc5LDYwIEBAIHB1Ymxp
YzoKICAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEpTT046Ok9iamVjdDo6Y3Jl
YXRlKCkpOwogICAgIH0KIAotICAgIHZvaWQgc2V0Q29sdW1uTmFtZXMoUmVmUHRyPEpTT046OkFy
cmF5T2Y8U3RyaW5nPj4gdmFsdWUpCisgICAgdm9pZCBzZXRDb2x1bW5OYW1lcyhSZWY8SlNPTjo6
QXJyYXlPZjxTdHJpbmc+PiYmIGluX29wdF9jb2x1bW5OYW1lcykKICAgICB7Ci0gICAgICAgIEpT
T046Ok9iamVjdEJhc2U6OnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgV1RGTW92ZSh2YWx1ZSkp
OworICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIFdU
Rk1vdmUoaW5fb3B0X2NvbHVtbk5hbWVzKSk7CiAgICAgfQogCi0gICAgdm9pZCBzZXRCdXR0b25z
KFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpNb3Vz
ZUJ1dHRvbj4+IHZhbHVlKQorICAgIHZvaWQgc2V0QnV0dG9ucyhSZWY8SlNPTjo6QXJyYXlPZjxQ
cm90b2NvbDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9uPj4mJiBpbl9vcHRfYnV0dG9ucykKICAgICB7
Ci0gICAgICAgIEpTT046Ok9iamVjdEJhc2U6OnNldEFycmF5KCJidXR0b25zIl9zLCBXVEZNb3Zl
KHZhbHVlKSk7CisgICAgICAgIEpTT046Ok9iamVjdEJhc2U6OnNldEFycmF5KCJidXR0b25zIl9z
LCBXVEZNb3ZlKGluX29wdF9idXR0b25zKSk7CiAgICAgfQogCi0gICAgdm9pZCBzZXREaXJlY3Rp
b25hbGl0eShEaXJlY3Rpb25hbGl0eSB2YWx1ZSkKKyAgICB2b2lkIHNldERpcmVjdGlvbmFsaXR5
KERpcmVjdGlvbmFsaXR5IGluX29wdF9kaXJlY3Rpb25hbGl0eSkKICAgICB7Ci0gICAgICAgIEpT
T046Ok9iamVjdEJhc2U6OnNldFN0cmluZygiZGlyZWN0aW9uYWxpdHkiX3MsIEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZSh2YWx1ZSkpOworICAg
ICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXRTdHJpbmcoImRpcmVjdGlvbmFsaXR5Il9zLCBQcm90
b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKGluX29wdF9kaXJlY3Rpb25h
bGl0eSkpOwogICAgIH0KIAotICAgIHZvaWQgc2V0Tm90ZXMoY29uc3QgU3RyaW5nJiB2YWx1ZSkK
KyAgICB2b2lkIHNldE5vdGVzKGNvbnN0IFN0cmluZyYgaW5fb3B0X25vdGVzKQogICAgIHsKLSAg
ICAgICAgSlNPTjo6T2JqZWN0QmFzZTo6c2V0U3RyaW5nKCJub3RlcyJfcywgdmFsdWUpOworICAg
ICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXRTdHJpbmcoIm5vdGVzIl9zLCBpbl9vcHRfbm90ZXMp
OwogICAgIH0KIAotICAgIHZvaWQgc2V0VGltZXN0YW1wKGRvdWJsZSB2YWx1ZSkKKyAgICB2b2lk
IHNldFRpbWVzdGFtcChkb3VibGUgaW5fb3B0X3RpbWVzdGFtcCkKICAgICB7Ci0gICAgICAgIEpT
T046Ok9iamVjdEJhc2U6OnNldERvdWJsZSgidGltZXN0YW1wIl9zLCB2YWx1ZSk7CisgICAgICAg
IEpTT046Ok9iamVjdEJhc2U6OnNldERvdWJsZSgidGltZXN0YW1wIl9zLCBpbl9vcHRfdGltZXN0
YW1wKTsKICAgICB9CiAKLSAgICB2b2lkIHNldFZhbHVlcyhSZWZQdHI8SlNPTjo6T2JqZWN0PiB2
YWx1ZSkKKyAgICB2b2lkIHNldFZhbHVlcyhSZWY8SlNPTjo6T2JqZWN0PiYmIGluX29wdF92YWx1
ZXMpCiAgICAgewotICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXRPYmplY3QoInZhbHVlcyJf
cywgV1RGTW92ZSh2YWx1ZSkpOworICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXRPYmplY3Qo
InZhbHVlcyJfcywgV1RGTW92ZShpbl9vcHRfdmFsdWVzKSk7CiAgICAgfQogCi0gICAgdm9pZCBz
ZXRQYXlsb2FkKFJlZlB0cjxKU09OOjpWYWx1ZT4gdmFsdWUpCisgICAgdm9pZCBzZXRQYXlsb2Fk
KFJlZjxKU09OOjpWYWx1ZT4mJiBpbl9vcHRfcGF5bG9hZCkKICAgICB7Ci0gICAgICAgIEpTT046
Ok9iamVjdEJhc2U6OnNldFZhbHVlKCJwYXlsb2FkIl9zLCBXVEZNb3ZlKHZhbHVlKSk7CisgICAg
ICAgIEpTT046Ok9iamVjdEJhc2U6OnNldFZhbHVlKCJwYXlsb2FkIl9zLCBXVEZNb3ZlKGluX29w
dF9wYXlsb2FkKSk7CiAgICAgfQogCi0gICAgdm9pZCBzZXRFcnJvcihSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiB2YWx1ZSkKKyAgICB2b2lkIHNldEVycm9yKFJl
ZjxQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiYmIGluX29wdF9lcnJvcikKICAgICB7Ci0gICAg
ICAgIEpTT046Ok9iamVjdEJhc2U6OnNldE9iamVjdCgiZXJyb3IiX3MsIFdURk1vdmUodmFsdWUp
KTsKKyAgICAgICAgSlNPTjo6T2JqZWN0QmFzZTo6c2V0T2JqZWN0KCJlcnJvciJfcywgV1RGTW92
ZShpbl9vcHRfZXJyb3IpKTsKICAgICB9CiAKLSAgICB2b2lkIHNldEVycm9yTGlzdChSZWZQdHI8
SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yTGlzdD4gdmFsdWUpCisgICAgdm9p
ZCBzZXRFcnJvckxpc3QoUmVmPFByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3JMaXN0PiYmIGluX29w
dF9lcnJvckxpc3QpCiAgICAgewotICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXRBcnJheSgi
ZXJyb3JMaXN0Il9zLCBXVEZNb3ZlKHZhbHVlKSk7CisgICAgICAgIEpTT046Ok9iamVjdEJhc2U6
OnNldEFycmF5KCJlcnJvckxpc3QiX3MsIFdURk1vdmUoaW5fb3B0X2Vycm9yTGlzdCkpOwogICAg
IH0KIH07CiAKLWNsYXNzIFBhcmFtZXRlckJ1bmRsZSA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNl
IHsKK2NsYXNzIFBhcmFtZXRlckJ1bmRsZSBmaW5hbCA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNl
IHsKIHB1YmxpYzoKICAgICAvLyBOYW1lZCBhZnRlciBwcm9wZXJ0eSBuYW1lICdkaXJlY3Rpb25h
bGl0eScgd2hpbGUgZ2VuZXJhdGluZyBQYXJhbWV0ZXJCdW5kbGUuCiAgICAgZW51bSBjbGFzcyBE
aXJlY3Rpb25hbGl0eSB7CiAgICAgICAgIExUUiA9IDQsCiAgICAgICAgIFJUTCA9IDUsCiAgICAg
fTsgLy8gZW51bSBjbGFzcyBEaXJlY3Rpb25hbGl0eQorCiAgICAgZW51bSB7CiAgICAgICAgIE5v
RmllbGRzU2V0ID0gMCwKICAgICAgICAgQ29sdW1uTmFtZXNTZXQgPSAxIDw8IDAsCkBAIC01NjAs
NjYgKzU2NSw2NiBAQCBwdWJsaWM6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBQYXJhbWV0ZXJCdW5k
bGU7CiAgICAgcHVibGljOgogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDb2x1bW5OYW1lc1Nl
dD4mIHNldENvbHVtbk5hbWVzKFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+IHZhbHVlKQor
ICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQ29sdW1uTmFtZXNTZXQ+JiBzZXRDb2x1bW5OYW1lcyhS
ZWY8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiYmIGluX2NvbHVtbk5hbWVzKQogICAgICAgICB7CiAg
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQ29sdW1uTmFtZXNTZXQpLCBwcm9w
ZXJ0eV9jb2x1bW5OYW1lc19hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0
QXJyYXkoImNvbHVtbk5hbWVzIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0
QXJyYXkoImNvbHVtbk5hbWVzIl9zLCBXVEZNb3ZlKGluX2NvbHVtbk5hbWVzKSk7CiAgICAgICAg
ICAgICByZXR1cm4gY2FzdFN0YXRlPENvbHVtbk5hbWVzU2V0PigpOwogICAgICAgICB9CiAKLSAg
ICAgICAgQnVpbGRlcjxTVEFURSB8IEJ1dHRvbnNTZXQ+JiBzZXRCdXR0b25zKFJlZlB0cjxKU09O
OjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbj4+IHZh
bHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQnV0dG9uc1NldD4mIHNldEJ1dHRvbnMoUmVm
PEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbj4+JiYgaW5fYnV0
dG9ucykKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEJ1
dHRvbnNTZXQpLCBwcm9wZXJ0eV9idXR0b25zX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1f
cmVzdWx0LT5zZXRBcnJheSgiYnV0dG9ucyJfcywgdmFsdWUpOworICAgICAgICAgICAgbV9yZXN1
bHQtPnNldEFycmF5KCJidXR0b25zIl9zLCBXVEZNb3ZlKGluX2J1dHRvbnMpKTsKICAgICAgICAg
ICAgIHJldHVybiBjYXN0U3RhdGU8QnV0dG9uc1NldD4oKTsKICAgICAgICAgfQogCi0gICAgICAg
IEJ1aWxkZXI8U1RBVEUgfCBEaXJlY3Rpb25hbGl0eVNldD4mIHNldERpcmVjdGlvbmFsaXR5KERp
cmVjdGlvbmFsaXR5IHZhbHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRFIHwgRGlyZWN0aW9uYWxp
dHlTZXQ+JiBzZXREaXJlY3Rpb25hbGl0eShEaXJlY3Rpb25hbGl0eSBpbl9kaXJlY3Rpb25hbGl0
eSkKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIERpcmVj
dGlvbmFsaXR5U2V0KSwgcHJvcGVydHlfZGlyZWN0aW9uYWxpdHlfYWxyZWFkeV9zZXQpOwotICAg
ICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygiZGlyZWN0aW9uYWxpdHkiX3MsIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZSh2YWx1ZSkpOwor
ICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygiZGlyZWN0aW9uYWxpdHkiX3MsIFByb3Rv
Y29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUoaW5fZGlyZWN0aW9uYWxpdHkp
KTsKICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8RGlyZWN0aW9uYWxpdHlTZXQ+KCk7CiAg
ICAgICAgIH0KIAotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTm90ZXNTZXQ+JiBzZXROb3Rlcyhj
b25zdCBTdHJpbmcmIHZhbHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTm90ZXNTZXQ+JiBz
ZXROb3Rlcyhjb25zdCBTdHJpbmcmIGluX25vdGVzKQogICAgICAgICB7CiAgICAgICAgICAgICBD
T01QSUxFX0FTU0VSVCghKFNUQVRFICYgTm90ZXNTZXQpLCBwcm9wZXJ0eV9ub3Rlc19hbHJlYWR5
X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJub3RlcyJfcywgdmFsdWUp
OworICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibm90ZXMiX3MsIGluX25vdGVzKTsK
ICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Tm90ZXNTZXQ+KCk7CiAgICAgICAgIH0KIAot
ICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVGltZXN0YW1wU2V0PiYgc2V0VGltZXN0YW1wKGRvdWJs
ZSB2YWx1ZSkKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IFRpbWVzdGFtcFNldD4mIHNldFRpbWVz
dGFtcChkb3VibGUgaW5fdGltZXN0YW1wKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxF
X0FTU0VSVCghKFNUQVRFICYgVGltZXN0YW1wU2V0KSwgcHJvcGVydHlfdGltZXN0YW1wX2FscmVh
ZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywg
dmFsdWUpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCBp
bl90aW1lc3RhbXApOwogICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxUaW1lc3RhbXBTZXQ+
KCk7CiAgICAgICAgIH0KIAotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVmFsdWVzU2V0PiYgc2V0
VmFsdWVzKFJlZlB0cjxKU09OOjpPYmplY3Q+IHZhbHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRF
IHwgVmFsdWVzU2V0PiYgc2V0VmFsdWVzKFJlZjxKU09OOjpPYmplY3Q+JiYgaW5fdmFsdWVzKQog
ICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVmFsdWVzU2V0
KSwgcHJvcGVydHlfdmFsdWVzX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5z
ZXRPYmplY3QoInZhbHVlcyJfcywgdmFsdWUpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldE9i
amVjdCgidmFsdWVzIl9zLCBXVEZNb3ZlKGluX3ZhbHVlcykpOwogICAgICAgICAgICAgcmV0dXJu
IGNhc3RTdGF0ZTxWYWx1ZXNTZXQ+KCk7CiAgICAgICAgIH0KIAotICAgICAgICBCdWlsZGVyPFNU
QVRFIHwgUGF5bG9hZFNldD4mIHNldFBheWxvYWQoUmVmUHRyPEpTT046OlZhbHVlPiB2YWx1ZSkK
KyAgICAgICAgQnVpbGRlcjxTVEFURSB8IFBheWxvYWRTZXQ+JiBzZXRQYXlsb2FkKFJlZjxKU09O
OjpWYWx1ZT4mJiBpbl9wYXlsb2FkKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FT
U0VSVCghKFNUQVRFICYgUGF5bG9hZFNldCksIHByb3BlcnR5X3BheWxvYWRfYWxyZWFkeV9zZXQp
OwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCB2YWx1ZSk7Cisg
ICAgICAgICAgICBtX3Jlc3VsdC0+c2V0VmFsdWUoInBheWxvYWQiX3MsIFdURk1vdmUoaW5fcGF5
bG9hZCkpOwogICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxQYXlsb2FkU2V0PigpOwogICAg
ICAgICB9CiAKLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IEVycm9yU2V0PiYgc2V0RXJyb3IoUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4gdmFsdWUpCisgICAgICAg
IEJ1aWxkZXI8U1RBVEUgfCBFcnJvclNldD4mIHNldEVycm9yKFJlZjxQcm90b2NvbDo6RGF0YWJh
c2U6OkVycm9yPiYmIGluX2Vycm9yKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FT
U0VSVCghKFNUQVRFICYgRXJyb3JTZXQpLCBwcm9wZXJ0eV9lcnJvcl9hbHJlYWR5X3NldCk7Ci0g
ICAgICAgICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0KCJlcnJvciJfcywgdmFsdWUpOworICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldE9iamVjdCgiZXJyb3IiX3MsIFdURk1vdmUoaW5fZXJyb3IpKTsK
ICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8RXJyb3JTZXQ+KCk7CiAgICAgICAgIH0KIAot
ICAgICAgICBCdWlsZGVyPFNUQVRFIHwgRXJyb3JMaXN0U2V0PiYgc2V0RXJyb3JMaXN0KFJlZlB0
cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3JMaXN0PiB2YWx1ZSkKKyAgICAg
ICAgQnVpbGRlcjxTVEFURSB8IEVycm9yTGlzdFNldD4mIHNldEVycm9yTGlzdChSZWY8UHJvdG9j
b2w6OkRhdGFiYXNlOjpFcnJvckxpc3Q+JiYgaW5fZXJyb3JMaXN0KQogICAgICAgICB7CiAgICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgRXJyb3JMaXN0U2V0KSwgcHJvcGVydHlf
ZXJyb3JMaXN0X2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRBcnJheSgi
ZXJyb3JMaXN0Il9zLCB2YWx1ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0QXJyYXkoImVy
cm9yTGlzdCJfcywgV1RGTW92ZShpbl9lcnJvckxpc3QpKTsKICAgICAgICAgICAgIHJldHVybiBj
YXN0U3RhdGU8RXJyb3JMaXN0U2V0PigpOwogICAgICAgICB9CiAKQEAgLTY1NSw3ICs2NjAsNyBA
QCBwdWJsaWM6CiB9OwogCiAvKiBDb25mbGljdGVkIG5hbWVzIG1heSBjYXVzZSBnZW5lcmF0ZWQg
Z2V0dGVycy9zZXR0ZXJzIHRvIGNsYXNoIHdpdGggYnVpbHQtaW4gSW5zcGVjdG9yT2JqZWN0IG1l
dGhvZHMuICovCi1jbGFzcyBPYmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzIDogcHVibGlj
IEpTT046Ok9iamVjdEJhc2UgeworY2xhc3MgT2JqZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0
cyBmaW5hbCA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKIHB1YmxpYzoKICAgICBlbnVtIHsK
ICAgICAgICAgTm9GaWVsZHNTZXQgPSAwLApAQCAtNjg1LDM4ICs2OTAsMzggQEAgcHVibGljOgog
ICAgICAgICBmcmllbmQgY2xhc3MgT2JqZWN0V2l0aFByb3BlcnR5TmFtZUNvbmZsaWN0czsKICAg
ICBwdWJsaWM6CiAKLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IEludGVnZXJTZXQ+JiBzZXRJbnRl
Z2VyKGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBJbnRlZ2Vy
U2V0PiYgc2V0SW50ZWdlcihjb25zdCBTdHJpbmcmIGluX2ludGVnZXIpCiAgICAgICAgIHsKICAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBJbnRlZ2VyU2V0KSwgcHJvcGVydHlf
aW50ZWdlcl9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJp
bnRlZ2VyIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJpbnRl
Z2VyIl9zLCBpbl9pbnRlZ2VyKTsKICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8SW50ZWdl
clNldD4oKTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBBcnJheVNldD4m
IHNldEFycmF5KGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBB
cnJheVNldD4mIHNldEFycmF5KGNvbnN0IFN0cmluZyYgaW5fYXJyYXkpCiAgICAgICAgIHsKICAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBBcnJheVNldCksIHByb3BlcnR5X2Fy
cmF5X2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoImFycmF5
Il9zLCB2YWx1ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJhcnJheSJfcywg
aW5fYXJyYXkpOwogICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxBcnJheVNldD4oKTsKICAg
ICAgICAgfQogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBTdHJpbmdTZXQ+JiBzZXRTdHJpbmco
Y29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IFN0cmluZ1NldD4m
IHNldFN0cmluZyhjb25zdCBTdHJpbmcmIGluX3N0cmluZykKICAgICAgICAgewogICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFN0cmluZ1NldCksIHByb3BlcnR5X3N0cmluZ19h
bHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJzdHJpbmciX3Ms
IHZhbHVlKTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInN0cmluZyJfcywgaW5f
c3RyaW5nKTsKICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8U3RyaW5nU2V0PigpOwogICAg
ICAgICB9CiAKLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IFZhbHVlU2V0PiYgc2V0VmFsdWUoY29u
c3QgU3RyaW5nJiB2YWx1ZSkKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IFZhbHVlU2V0PiYgc2V0
VmFsdWUoY29uc3QgU3RyaW5nJiBpbl92YWx1ZSkKICAgICAgICAgewogICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoIShTVEFURSAmIFZhbHVlU2V0KSwgcHJvcGVydHlfdmFsdWVfYWxyZWFkeV9z
ZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygidmFsdWUiX3MsIHZhbHVlKTsK
KyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInZhbHVlIl9zLCBpbl92YWx1ZSk7CiAg
ICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFZhbHVlU2V0PigpOwogICAgICAgICB9CiAKLSAg
ICAgICAgQnVpbGRlcjxTVEFURSB8IE9iamVjdFNldD4mIHNldE9iamVjdChjb25zdCBTdHJpbmcm
IHZhbHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRFIHwgT2JqZWN0U2V0PiYgc2V0T2JqZWN0KGNv
bnN0IFN0cmluZyYgaW5fb2JqZWN0KQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FT
U0VSVCghKFNUQVRFICYgT2JqZWN0U2V0KSwgcHJvcGVydHlfb2JqZWN0X2FscmVhZHlfc2V0KTsK
LSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm9iamVjdCJfcywgdmFsdWUpOworICAg
ICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygib2JqZWN0Il9zLCBpbl9vYmplY3QpOwogICAg
ICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxPYmplY3RTZXQ+KCk7CiAgICAgICAgIH0KIApAQCAt
NzQ3LDE3ICs3NTIsNjYgQEAgcHVibGljOgogICAgIH0KIH07CiAKKy8qIEFuIG9wZW4gb2JqZWN0
IHRoYXQgZG9lc24ndCBoYXZlIGFueSBwcmVkZWZpbmVkIGZpZWxkcy4gKi8KK2NsYXNzIER1bW15
T2JqZWN0IGZpbmFsIDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgeworcHVibGljOgorICAgIGVu
dW0geworICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCisgICAgICAgIEFsbEZpZWxkc1NldCA9IDAK
KyAgICB9OworCisgICAgdGVtcGxhdGU8aW50IFNUQVRFPgorICAgIGNsYXNzIEJ1aWxkZXIgewor
ICAgIHByaXZhdGU6CisgICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG1fcmVzdWx0OworCisg
ICAgICAgIHRlbXBsYXRlPGludCBTVEVQPiBCdWlsZGVyPFNUQVRFIHwgU1RFUD4mIGNhc3RTdGF0
ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxCdWls
ZGVyPFNUQVRFIHwgU1RFUD4qPih0aGlzKTsKKyAgICAgICAgfQorCisgICAgICAgIEJ1aWxkZXIo
UmVmPC8qRHVtbXlPYmplY3QqL0pTT046Ok9iamVjdD4mJiBvYmplY3QpCisgICAgICAgICAgICA6
IG1fcmVzdWx0KFdURk1vdmUob2JqZWN0KSkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoU1RBVEUgPT0gTm9GaWVsZHNTZXQsIGJ1aWxkZXJfY3JlYXRlZF9pbl9ub25faW5p
dF9zdGF0ZSk7CisgICAgICAgIH0KKyAgICAgICAgZnJpZW5kIGNsYXNzIER1bW15T2JqZWN0Owor
ICAgIHB1YmxpYzoKKworICAgICAgICBSZWY8RHVtbXlPYmplY3Q+IHJlbGVhc2UoKQorICAgICAg
ICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBBbGxGaWVsZHNTZXQsIHJl
c3VsdF9pc19ub3RfcmVhZHkpOworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKER1
bW15T2JqZWN0KSA9PSBzaXplb2YoSlNPTjo6T2JqZWN0KSwgY2Fubm90X2Nhc3QpOworCisgICAg
ICAgICAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uUmVzdWx0ID0gbV9yZXN1bHQucmVsZWFzZU5v
bk51bGwoKTsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gV1RGTW92ZSgqcmVpbnRlcnByZXRf
Y2FzdDxSZWY8RHVtbXlPYmplY3Q+Kj4oJmpzb25SZXN1bHQpKTsKKyAgICAgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgICAgIH0KKyAgICB9OworCisgICAgLyoKKyAgICAgKiBTeW50aGV0aWMg
Y29uc3RydWN0b3I6CisgICAgICogUmVmPER1bW15T2JqZWN0PiByZXN1bHQgPSBEdW1teU9iamVj
dDo6Y3JlYXRlKCkKKyAgICAgKiAgICAgLnJlbGVhc2UoKTsKKyAgICAgKi8KKyAgICBzdGF0aWMg
QnVpbGRlcjxOb0ZpZWxkc1NldD4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBCdWls
ZGVyPE5vRmllbGRzU2V0PihKU09OOjpPYmplY3Q6OmNyZWF0ZSgpKTsKKyAgICB9Cit9OworCiB9
IC8vIERhdGFiYXNlCiAKIG5hbWVzcGFjZSBUZXN0IHsKIAotY2xhc3MgUGFyYW1ldGVyQnVuZGxl
IDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgeworY2xhc3MgUGFyYW1ldGVyQnVuZGxlIGZpbmFs
IDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgewogcHVibGljOgogICAgIC8vIE5hbWVkIGFmdGVy
IHByb3BlcnR5IG5hbWUgJ2RpcmVjdGlvbmFsaXR5JyB3aGlsZSBnZW5lcmF0aW5nIFBhcmFtZXRl
ckJ1bmRsZS4KICAgICBlbnVtIGNsYXNzIERpcmVjdGlvbmFsaXR5IHsKICAgICAgICAgTFRSID0g
NCwKICAgICAgICAgUlRMID0gNSwKICAgICB9OyAvLyBlbnVtIGNsYXNzIERpcmVjdGlvbmFsaXR5
CisKICAgICBlbnVtIHsKICAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAogICAgICAgICBEaXJlY3Rp
b25hbGl0eVNldCA9IDEgPDwgMCwKQEAgLTc4OSw1OSArODQzLDU5IEBAIHB1YmxpYzoKICAgICAg
ICAgZnJpZW5kIGNsYXNzIFBhcmFtZXRlckJ1bmRsZTsKICAgICBwdWJsaWM6CiAKLSAgICAgICAg
QnVpbGRlcjxTVEFURSB8IERpcmVjdGlvbmFsaXR5U2V0PiYgc2V0RGlyZWN0aW9uYWxpdHkoRGly
ZWN0aW9uYWxpdHkgdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBEaXJlY3Rpb25hbGl0
eVNldD4mIHNldERpcmVjdGlvbmFsaXR5KERpcmVjdGlvbmFsaXR5IGluX2RpcmVjdGlvbmFsaXR5
KQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgRGlyZWN0
aW9uYWxpdHlTZXQpLCBwcm9wZXJ0eV9kaXJlY3Rpb25hbGl0eV9hbHJlYWR5X3NldCk7Ci0gICAg
ICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJkaXJlY3Rpb25hbGl0eSJfcywgSW5zcGVjdG9y
OjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKHZhbHVlKSk7Cisg
ICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJkaXJlY3Rpb25hbGl0eSJfcywgUHJvdG9j
b2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbl9kaXJlY3Rpb25hbGl0eSkp
OwogICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxEaXJlY3Rpb25hbGl0eVNldD4oKTsKICAg
ICAgICAgfQogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBCdXR0b25zU2V0PiYgc2V0QnV0dG9u
cyhSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6TW91
c2VCdXR0b24+PiB2YWx1ZSkKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IEJ1dHRvbnNTZXQ+JiBz
ZXRCdXR0b25zKFJlZjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpEYXRhYmFzZTo6TW91c2VCdXR0
b24+PiYmIGluX2J1dHRvbnMpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KCEoU1RBVEUgJiBCdXR0b25zU2V0KSwgcHJvcGVydHlfYnV0dG9uc19hbHJlYWR5X3NldCk7Ci0g
ICAgICAgICAgICBtX3Jlc3VsdC0+c2V0QXJyYXkoImJ1dHRvbnMiX3MsIHZhbHVlKTsKKyAgICAg
ICAgICAgIG1fcmVzdWx0LT5zZXRBcnJheSgiYnV0dG9ucyJfcywgV1RGTW92ZShpbl9idXR0b25z
KSk7CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEJ1dHRvbnNTZXQ+KCk7CiAgICAgICAg
IH0KIAotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQ29sdW1uTmFtZXNTZXQ+JiBzZXRDb2x1bW5O
YW1lcyhSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiB2YWx1ZSkKKyAgICAgICAgQnVpbGRl
cjxTVEFURSB8IENvbHVtbk5hbWVzU2V0PiYgc2V0Q29sdW1uTmFtZXMoUmVmPEpTT046OkFycmF5
T2Y8U3RyaW5nPj4mJiBpbl9jb2x1bW5OYW1lcykKICAgICAgICAgewogICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoIShTVEFURSAmIENvbHVtbk5hbWVzU2V0KSwgcHJvcGVydHlfY29sdW1uTmFt
ZXNfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldEFycmF5KCJjb2x1bW5O
YW1lcyJfcywgdmFsdWUpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldEFycmF5KCJjb2x1bW5O
YW1lcyJfcywgV1RGTW92ZShpbl9jb2x1bW5OYW1lcykpOwogICAgICAgICAgICAgcmV0dXJuIGNh
c3RTdGF0ZTxDb2x1bW5OYW1lc1NldD4oKTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCBOb3Rlc1NldD4mIHNldE5vdGVzKGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgICAg
IEJ1aWxkZXI8U1RBVEUgfCBOb3Rlc1NldD4mIHNldE5vdGVzKGNvbnN0IFN0cmluZyYgaW5fbm90
ZXMpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBOb3Rl
c1NldCksIHByb3BlcnR5X25vdGVzX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0
LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0
U3RyaW5nKCJub3RlcyJfcywgaW5fbm90ZXMpOwogICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0
ZTxOb3Rlc1NldD4oKTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBUaW1l
c3RhbXBTZXQ+JiBzZXRUaW1lc3RhbXAoZG91YmxlIHZhbHVlKQorICAgICAgICBCdWlsZGVyPFNU
QVRFIHwgVGltZXN0YW1wU2V0PiYgc2V0VGltZXN0YW1wKGRvdWJsZSBpbl90aW1lc3RhbXApCiAg
ICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBUaW1lc3RhbXBT
ZXQpLCBwcm9wZXJ0eV90aW1lc3RhbXBfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1
bHQtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICBtX3Jlc3Vs
dC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsIGluX3RpbWVzdGFtcCk7CiAgICAgICAgICAgICBy
ZXR1cm4gY2FzdFN0YXRlPFRpbWVzdGFtcFNldD4oKTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1
aWxkZXI8U1RBVEUgfCBWYWx1ZXNTZXQ+JiBzZXRWYWx1ZXMoUmVmUHRyPEpTT046Ok9iamVjdD4g
dmFsdWUpCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBWYWx1ZXNTZXQ+JiBzZXRWYWx1ZXMoUmVm
PEpTT046Ok9iamVjdD4mJiBpbl92YWx1ZXMpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKCEoU1RBVEUgJiBWYWx1ZXNTZXQpLCBwcm9wZXJ0eV92YWx1ZXNfYWxyZWFkeV9z
ZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldE9iamVjdCgidmFsdWVzIl9zLCB2YWx1ZSk7
CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIFdURk1vdmUoaW5f
dmFsdWVzKSk7CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFZhbHVlc1NldD4oKTsKICAg
ICAgICAgfQogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBQYXlsb2FkU2V0PiYgc2V0UGF5bG9h
ZChSZWZQdHI8SlNPTjo6VmFsdWU+IHZhbHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRFIHwgUGF5
bG9hZFNldD4mIHNldFBheWxvYWQoUmVmPEpTT046OlZhbHVlPiYmIGluX3BheWxvYWQpCiAgICAg
ICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBQYXlsb2FkU2V0KSwg
cHJvcGVydHlfcGF5bG9hZF9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0
VmFsdWUoInBheWxvYWQiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRWYWx1
ZSgicGF5bG9hZCJfcywgV1RGTW92ZShpbl9wYXlsb2FkKSk7CiAgICAgICAgICAgICByZXR1cm4g
Y2FzdFN0YXRlPFBheWxvYWRTZXQ+KCk7CiAgICAgICAgIH0KIAotICAgICAgICBCdWlsZGVyPFNU
QVRFIHwgRXJyb3JTZXQ+JiBzZXRFcnJvcihSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0
YWJhc2U6OkVycm9yPiB2YWx1ZSkKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IEVycm9yU2V0PiYg
c2V0RXJyb3IoUmVmPFByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+JiYgaW5fZXJyb3IpCiAgICAg
ICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBFcnJvclNldCksIHBy
b3BlcnR5X2Vycm9yX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRPYmpl
Y3QoImVycm9yIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0KCJl
cnJvciJfcywgV1RGTW92ZShpbl9lcnJvcikpOwogICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0
ZTxFcnJvclNldD4oKTsKICAgICAgICAgfQogCkBAIC04ODYsMTUgKzk0MCwxNSBAQCBPcHRpb25h
bDxQcm90b2NvbEVudW1UeXBlPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmcoY29uc3QgU3RyaW5n
Jik7CiAKIC8vIEVudW1zIGluIHRoZSAnRGF0YWJhc2UnIERvbWFpbgogdGVtcGxhdGU8PgotT3B0
aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9uPiBwYXJzZUVu
dW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6Ok1vdXNlQnV0
dG9uPihjb25zdCBTdHJpbmcmKTsKK09wdGlvbmFsPFByb3RvY29sOjpEYXRhYmFzZTo6TW91c2VC
dXR0b24+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxQcm90b2NvbDo6RGF0YWJhc2U6Ok1vdXNl
QnV0dG9uPihjb25zdCBTdHJpbmcmKTsKIHRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRhdGFiYXNlOjpPcHRpb25hbFBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxp
dHk+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFz
ZTo6T3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5Pihjb25zdCBTdHJpbmcm
KTsKK09wdGlvbmFsPFByb3RvY29sOjpEYXRhYmFzZTo6T3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU6
OkRpcmVjdGlvbmFsaXR5PiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8UHJvdG9jb2w6OkRhdGFi
YXNlOjpPcHRpb25hbFBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk+KGNvbnN0IFN0cmlu
ZyYpOwogdGVtcGxhdGU8PgotT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6
OlBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmlu
ZzxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rp
b25hbGl0eT4oY29uc3QgU3RyaW5nJik7CitPcHRpb25hbDxQcm90b2NvbDo6RGF0YWJhc2U6OlBh
cmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxQ
cm90b2NvbDo6RGF0YWJhc2U6OlBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk+KGNvbnN0
IFN0cmluZyYpOwogCiAvLyBFbnVtcyBpbiB0aGUgJ1Rlc3QnIERvbWFpbgogdGVtcGxhdGU8Pgot
T3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UGFyYW1ldGVyQnVuZGxlOjpEaXJl
Y3Rpb25hbGl0eT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlRlc3Q6OlBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk+KGNvbnN0IFN0cmluZyYpOwor
T3B0aW9uYWw8UHJvdG9jb2w6OlRlc3Q6OlBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk+
IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxQcm90b2NvbDo6VGVzdDo6UGFyYW1ldGVyQnVuZGxl
OjpEaXJlY3Rpb25hbGl0eT4oY29uc3QgU3RyaW5nJik7CiAKIH0gLy8gbmFtZXNwYWNlIFRlc3RI
ZWxwZXJzCiAKQEAgLTk0Niw4ICsxMDAwLDcgQEAgc3RydWN0IERlZmF1bHRIYXNoPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbj4gOiBJbnRIYXNoPEluc3BlY3QKICNp
bmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAKLSNp
bmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Cisj
aW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKQEAg
LTk3MSw0NSArMTAyNCw0NSBAQCBTdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUp
IHsKIC8vIEVudW1zIGluIHRoZSAnRGF0YWJhc2UnIERvbWFpbgogCiB0ZW1wbGF0ZTw+Ci1PcHRp
b25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6TW91c2VCdXR0b24+IHBhcnNlRW51
bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6TW91c2VCdXR0
b24+KGNvbnN0IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcpCitPcHRpb25hbDxQcm90b2NvbDo6RGF0
YWJhc2U6Ok1vdXNlQnV0dG9uPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8UHJvdG9jb2w6OkRh
dGFiYXNlOjpNb3VzZUJ1dHRvbj4oY29uc3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKIHsKICAg
ICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNvbnN0YW50VmFsdWVzW10gPSB7Ci0gICAgICAgIChzaXpl
X3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9uOjpOb25lLAotICAg
ICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbjo6
TGVmdCwKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6TW91
c2VCdXR0b246Ok1pZGRsZSwKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpE
YXRhYmFzZTo6TW91c2VCdXR0b246OlJpZ2h0LAorICAgICAgICAoc2l6ZV90KVByb3RvY29sOjpE
YXRhYmFzZTo6TW91c2VCdXR0b246Ok5vbmUsCisgICAgICAgIChzaXplX3QpUHJvdG9jb2w6OkRh
dGFiYXNlOjpNb3VzZUJ1dHRvbjo6TGVmdCwKKyAgICAgICAgKHNpemVfdClQcm90b2NvbDo6RGF0
YWJhc2U6Ok1vdXNlQnV0dG9uOjpNaWRkbGUsCisgICAgICAgIChzaXplX3QpUHJvdG9jb2w6OkRh
dGFiYXNlOjpNb3VzZUJ1dHRvbjo6UmlnaHQsCiAgICAgfTsKICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IDQ7ICsraSkKICAgICAgICAgaWYgKHByb3RvY29sU3RyaW5nID09IGVudW1fY29uc3Rh
bnRfdmFsdWVzW2NvbnN0YW50VmFsdWVzW2ldXSkKLSAgICAgICAgICAgIHJldHVybiAoSW5zcGVj
dG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9uKWNvbnN0YW50VmFsdWVzW2ldOwor
ICAgICAgICAgICAgcmV0dXJuIChQcm90b2NvbDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9uKWNvbnN0
YW50VmFsdWVzW2ldOwogCiAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KIAogdGVtcGxhdGU8
PgotT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6Ok9wdGlvbmFsUGFyYW1l
dGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpPcHRpb25hbFBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0
aW9uYWxpdHk+KGNvbnN0IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcpCitPcHRpb25hbDxQcm90b2Nv
bDo6RGF0YWJhc2U6Ok9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eT4gcGFy
c2VFbnVtVmFsdWVGcm9tU3RyaW5nPFByb3RvY29sOjpEYXRhYmFzZTo6T3B0aW9uYWxQYXJhbWV0
ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5Pihjb25zdCBTdHJpbmcmIHByb3RvY29sU3RyaW5nKQog
ewogICAgIHN0YXRpYyBjb25zdCBzaXplX3QgY29uc3RhbnRWYWx1ZXNbXSA9IHsKLSAgICAgICAg
KHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6T3B0aW9uYWxQYXJhbWV0ZXJC
dW5kbGU6OkRpcmVjdGlvbmFsaXR5OjpMVFIsCi0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQ
cm90b2NvbDo6RGF0YWJhc2U6Ok9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0
eTo6UlRMLAorICAgICAgICAoc2l6ZV90KVByb3RvY29sOjpEYXRhYmFzZTo6T3B0aW9uYWxQYXJh
bWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5OjpMVFIsCisgICAgICAgIChzaXplX3QpUHJvdG9j
b2w6OkRhdGFiYXNlOjpPcHRpb25hbFBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk6OlJU
TCwKICAgICB9OwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgMjsgKytpKQogICAgICAgICBp
ZiAocHJvdG9jb2xTdHJpbmcgPT0gZW51bV9jb25zdGFudF92YWx1ZXNbY29uc3RhbnRWYWx1ZXNb
aV1dKQotICAgICAgICAgICAgcmV0dXJuIChJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6
T3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5KWNvbnN0YW50VmFsdWVzW2ld
OworICAgICAgICAgICAgcmV0dXJuIChQcm90b2NvbDo6RGF0YWJhc2U6Ok9wdGlvbmFsUGFyYW1l
dGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eSljb25zdGFudFZhbHVlc1tpXTsKIAogICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CiB9CiAKIHRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRhdGFiYXNlOjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5PiBwYXJzZUVu
dW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlBhcmFtZXRl
ckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk+KGNvbnN0IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcpCitP
cHRpb25hbDxQcm90b2NvbDo6RGF0YWJhc2U6OlBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxp
dHk+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxQcm90b2NvbDo6RGF0YWJhc2U6OlBhcmFtZXRl
ckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk+KGNvbnN0IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcpCiB7
CiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBjb25zdGFudFZhbHVlc1tdID0gewotICAgICAgICAo
c2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQYXJhbWV0ZXJCdW5kbGU6OkRp
cmVjdGlvbmFsaXR5OjpMVFIsCi0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6
RGF0YWJhc2U6OlBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk6OlJUTCwKKyAgICAgICAg
KHNpemVfdClQcm90b2NvbDo6RGF0YWJhc2U6OlBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxp
dHk6OkxUUiwKKyAgICAgICAgKHNpemVfdClQcm90b2NvbDo6RGF0YWJhc2U6OlBhcmFtZXRlckJ1
bmRsZTo6RGlyZWN0aW9uYWxpdHk6OlJUTCwKICAgICB9OwogICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgMjsgKytpKQogICAgICAgICBpZiAocHJvdG9jb2xTdHJpbmcgPT0gZW51bV9jb25zdGFu
dF92YWx1ZXNbY29uc3RhbnRWYWx1ZXNbaV1dKQotICAgICAgICAgICAgcmV0dXJuIChJbnNwZWN0
b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eSlj
b25zdGFudFZhbHVlc1tpXTsKKyAgICAgICAgICAgIHJldHVybiAoUHJvdG9jb2w6OkRhdGFiYXNl
OjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5KWNvbnN0YW50VmFsdWVzW2ldOwogCiAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KQEAgLTEwMTcsMTUgKzEwNzAsMTUgQEAgT3B0aW9u
YWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0
aW9uYWxpdHk+IHBhcnNlRW4KIC8vIEVudW1zIGluIHRoZSAnVGVzdCcgRG9tYWluCiAKIHRlbXBs
YXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlBhcmFtZXRlckJ1bmRs
ZTo6RGlyZWN0aW9uYWxpdHk+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlBy
b3RvY29sOjpUZXN0OjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5Pihjb25zdCBTdHJp
bmcmIHByb3RvY29sU3RyaW5nKQorT3B0aW9uYWw8UHJvdG9jb2w6OlRlc3Q6OlBhcmFtZXRlckJ1
bmRsZTo6RGlyZWN0aW9uYWxpdHk+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxQcm90b2NvbDo6
VGVzdDo6UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eT4oY29uc3QgU3RyaW5nJiBwcm90
b2NvbFN0cmluZykKIHsKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNvbnN0YW50VmFsdWVzW10g
PSB7Ci0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UGFyYW1ldGVy
QnVuZGxlOjpEaXJlY3Rpb25hbGl0eTo6TFRSLAotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6
UHJvdG9jb2w6OlRlc3Q6OlBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk6OlJUTCwKKyAg
ICAgICAgKHNpemVfdClQcm90b2NvbDo6VGVzdDo6UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25h
bGl0eTo6TFRSLAorICAgICAgICAoc2l6ZV90KVByb3RvY29sOjpUZXN0OjpQYXJhbWV0ZXJCdW5k
bGU6OkRpcmVjdGlvbmFsaXR5OjpSVEwsCiAgICAgfTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IDI7ICsraSkKICAgICAgICAgaWYgKHByb3RvY29sU3RyaW5nID09IGVudW1fY29uc3RhbnRf
dmFsdWVzW2NvbnN0YW50VmFsdWVzW2ldXSkKLSAgICAgICAgICAgIHJldHVybiAoSW5zcGVjdG9y
OjpQcm90b2NvbDo6VGVzdDo6UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eSljb25zdGFu
dFZhbHVlc1tpXTsKKyAgICAgICAgICAgIHJldHVybiAoUHJvdG9jb2w6OlRlc3Q6OlBhcmFtZXRl
ckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHkpY29uc3RhbnRWYWx1ZXNbaV07CiAKICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMu
anNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZXhwZWN0ZWQvdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uLXJlc3VsdAppbmRl
eCAyNmI3NTBjNjZiMjAxYjBkNGVjYmYyZjM3NDhhYjlmNDAzMDlhOWVjLi40ZGUwNGFiNGI2ZDkx
ZGM5N2YwMDYzNTlhOGQ2Yzc2ODBkOTJmMzdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1yZXF1aXJpbmctcnVu
dGltZS1jYXN0cy5qc29uLXJlc3VsdAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5q
c29uLXJlc3VsdApAQCAtNjksNyArNjksNyBAQCBJbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9t
YWluKCJUZXN0IiwgbnVsbCk7CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQ
QVRDSEVSUykKIAotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVkZSAiVGVz
dFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJv
bnRlbmRSb3V0ZXIuaD4KIApAQCAtMTI1LDExICsxMjUsMTQgQEAgcHJpdmF0ZToKIAogI2luY2x1
ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHR1cGxlPgorI2luY2x1ZGUgPHd0
Zi9FeHBlY3RlZC5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAotdHlwZWRlZiBTdHJp
bmcgRXJyb3JTdHJpbmc7CisKIAogCiAKQEAgLTE3MCw5ICsxNzMsNyBAQCB0eXBlZGVmIFN0cmlu
ZyBFcnJvclN0cmluZzsKICNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCiAKICNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1
ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0j
aW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRF
Uk5BVEVfRElTUEFUQ0hFUlMpCiAjaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRj
aGVycy5oIgpAQCAtMjIwLDYgKzIyMSw3IEBAIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCiAjaW5j
bHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+
CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewpAQCAtMjYzLDcgKzI2NSw2IEBAIGNsYXNzIEZy
b250ZW5kUm91dGVyOwogI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCiAKICNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKQEAgLTMw
NCw3ICszMDUsOSBAQCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKICNwcmFnbWEgb25jZQogCiAjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgotI2luY2x1ZGUg
PHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRl
IDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFt
ZXNwYWNlIEluc3BlY3RvciB7CiAKQEAgLTM0Niw3ICszNDksNyBAQCB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBTdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoVCBlbnVtVmFsdWUpCiBuYW1lc3BhY2Ug
VGVzdCB7CiAKIC8qIEEgZHVtbXkgdHlwZSB0aGF0IHJlcXVpcmVzIHJ1bnRpbWUgY2FzdHMsIGFu
ZCBmb3JjZXMgbm9uLXByaW1pdGl2ZSByZWZlcmVuY2VkIHR5cGVzIHRvIGFsc28gZW1pdCBydW50
aW1lIGNhc3QgaGVscGVycy4gKi8KLWNsYXNzIFR5cGVOZWVkaW5nQ2FzdCA6IHB1YmxpYyBKU09O
OjpPYmplY3RCYXNlIHsKK2NsYXNzIFR5cGVOZWVkaW5nQ2FzdCBmaW5hbCA6IHB1YmxpYyBKU09O
OjpPYmplY3RCYXNlIHsKIHB1YmxpYzoKICAgICBlbnVtIHsKICAgICAgICAgTm9GaWVsZHNTZXQg
PSAwLApAQCAtMzc2LDM4ICszNzksMzggQEAgcHVibGljOgogICAgICAgICBmcmllbmQgY2xhc3Mg
VHlwZU5lZWRpbmdDYXN0OwogICAgIHB1YmxpYzoKIAotICAgICAgICBCdWlsZGVyPFNUQVRFIHwg
U3RyaW5nU2V0PiYgc2V0U3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgICAgIEJ1aWxk
ZXI8U1RBVEUgfCBTdHJpbmdTZXQ+JiBzZXRTdHJpbmcoY29uc3QgU3RyaW5nJiBpbl9zdHJpbmcp
CiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTdHJpbmdT
ZXQpLCBwcm9wZXJ0eV9zdHJpbmdfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQt
PnNldFN0cmluZygic3RyaW5nIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0
U3RyaW5nKCJzdHJpbmciX3MsIGluX3N0cmluZyk7CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0
YXRlPFN0cmluZ1NldD4oKTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBO
dW1iZXJTZXQ+JiBzZXROdW1iZXIoaW50IHZhbHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRFIHwg
TnVtYmVyU2V0PiYgc2V0TnVtYmVyKGludCBpbl9udW1iZXIpCiAgICAgICAgIHsKICAgICAgICAg
ICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBOdW1iZXJTZXQpLCBwcm9wZXJ0eV9udW1iZXJf
YWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldEludGVnZXIoIm51bWJlciJf
cywgdmFsdWUpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldEludGVnZXIoIm51bWJlciJfcywg
aW5fbnVtYmVyKTsKICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TnVtYmVyU2V0PigpOwog
ICAgICAgICB9CiAKLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IEFuaW1hbHNTZXQ+JiBzZXRBbmlt
YWxzKEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHMgdmFsdWUpCisgICAg
ICAgIEJ1aWxkZXI8U1RBVEUgfCBBbmltYWxzU2V0PiYgc2V0QW5pbWFscyhQcm90b2NvbDo6VGVz
dDo6Q2FzdGVkQW5pbWFscyBpbl9hbmltYWxzKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVCghKFNUQVRFICYgQW5pbWFsc1NldCksIHByb3BlcnR5X2FuaW1hbHNfYWxyZWFk
eV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygiYW5pbWFscyJfcywgSW5z
cGVjdG9yOjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKHZhbHVl
KSk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJhbmltYWxzIl9zLCBQcm90b2Nv
bDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKGluX2FuaW1hbHMpKTsKICAgICAg
ICAgICAgIHJldHVybiBjYXN0U3RhdGU8QW5pbWFsc1NldD4oKTsKICAgICAgICAgfQogCi0gICAg
ICAgIEJ1aWxkZXI8U1RBVEUgfCBJZFNldD4mIHNldElkKGludCB2YWx1ZSkKKyAgICAgICAgQnVp
bGRlcjxTVEFURSB8IElkU2V0PiYgc2V0SWQoaW50IGluX2lkKQogICAgICAgICB7CiAgICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgSWRTZXQpLCBwcm9wZXJ0eV9pZF9hbHJlYWR5
X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0SW50ZWdlcigiaWQiX3MsIHZhbHVlKTsK
KyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRJbnRlZ2VyKCJpZCJfcywgaW5faWQpOwogICAgICAg
ICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxJZFNldD4oKTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1
aWxkZXI8U1RBVEUgfCBUcmVlU2V0PiYgc2V0VHJlZShSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0MT4gdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8U1RBVEUg
fCBUcmVlU2V0PiYgc2V0VHJlZShSZWY8UHJvdG9jb2w6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDE+
JiYgaW5fdHJlZSkKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFU
RSAmIFRyZWVTZXQpLCBwcm9wZXJ0eV90cmVlX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1f
cmVzdWx0LT5zZXRPYmplY3QoInRyZWUiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIG1fcmVzdWx0
LT5zZXRPYmplY3QoInRyZWUiX3MsIFdURk1vdmUoaW5fdHJlZSkpOwogICAgICAgICAgICAgcmV0
dXJuIGNhc3RTdGF0ZTxUcmVlU2V0PigpOwogICAgICAgICB9CiAKQEAgLTQ1Miw3ICs0NTUsNyBA
QCBlbnVtIGNsYXNzIENhc3RlZEFuaW1hbHMgewogICAgIEZsYW1pbmdvcyA9IDMsCiB9OyAvLyBl
bnVtIGNsYXNzIENhc3RlZEFuaW1hbHMKIAotY2xhc3MgUmVjdXJzaXZlT2JqZWN0MSA6IHB1Ymxp
YyBKU09OOjpPYmplY3RCYXNlIHsKK2NsYXNzIFJlY3Vyc2l2ZU9iamVjdDEgZmluYWwgOiBwdWJs
aWMgSlNPTjo6T2JqZWN0QmFzZSB7CiBwdWJsaWM6CiAgICAgZW51bSB7CiAgICAgICAgIE5vRmll
bGRzU2V0ID0gMCwKQEAgLTQ5OCwxMyArNTAxLDEzIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJu
IEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEpTT046Ok9iamVjdDo6Y3JlYXRlKCkpOwogICAgIH0KIAot
ICAgIHZvaWQgc2V0T2JqKFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpSZWN1cnNp
dmVPYmplY3QyPiB2YWx1ZSkKKyAgICB2b2lkIHNldE9iaihSZWY8UHJvdG9jb2w6OlRlc3Q6OlJl
Y3Vyc2l2ZU9iamVjdDI+JiYgaW5fb3B0X29iaikKICAgICB7Ci0gICAgICAgIEpTT046Ok9iamVj
dEJhc2U6OnNldE9iamVjdCgib2JqIl9zLCBXVEZNb3ZlKHZhbHVlKSk7CisgICAgICAgIEpTT046
Ok9iamVjdEJhc2U6OnNldE9iamVjdCgib2JqIl9zLCBXVEZNb3ZlKGluX29wdF9vYmopKTsKICAg
ICB9CiB9OwogCi1jbGFzcyBSZWN1cnNpdmVPYmplY3QyIDogcHVibGljIEpTT046Ok9iamVjdEJh
c2UgeworY2xhc3MgUmVjdXJzaXZlT2JqZWN0MiBmaW5hbCA6IHB1YmxpYyBKU09OOjpPYmplY3RC
YXNlIHsKIHB1YmxpYzoKICAgICBlbnVtIHsKICAgICAgICAgTm9GaWVsZHNTZXQgPSAwLApAQCAt
NTUwLDI1ICs1NTMsMjUgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxk
c1NldD4oSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSk7CiAgICAgfQogCi0gICAgdm9pZCBzZXRPYmoo
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDE+IHZhbHVl
KQorICAgIHZvaWQgc2V0T2JqKFJlZjxQcm90b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0MT4m
JiBpbl9vcHRfb2JqKQogICAgIHsKLSAgICAgICAgSlNPTjo6T2JqZWN0QmFzZTo6c2V0T2JqZWN0
KCJvYmoiX3MsIFdURk1vdmUodmFsdWUpKTsKKyAgICAgICAgSlNPTjo6T2JqZWN0QmFzZTo6c2V0
T2JqZWN0KCJvYmoiX3MsIFdURk1vdmUoaW5fb3B0X29iaikpOwogICAgIH0KIH07CiAKIH0gLy8g
VGVzdAogCi10ZW1wbGF0ZTw+IHN0cnVjdCBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM+IHsKK3RlbXBsYXRlPD4gc3RydWN0IEJpbmRpbmdUcmFp
dHM8UHJvdG9jb2w6OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdD4geworc3RhdGljIFJlZjxQcm90b2Nv
bDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0PiBydW50aW1lQ2FzdChSZWY8SlNPTjo6VmFsdWU+JiYg
dmFsdWUpOwogc3RhdGljIHZvaWQgYXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoSlNPTjo6VmFs
dWUqKTsKIH07Ci10ZW1wbGF0ZTw+IHN0cnVjdCBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdD4gewotc3RhdGljIFJlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3Q+IHJ1bnRpbWVDYXN0KFJlZlB0cjxKU09O
OjpWYWx1ZT4mJiB2YWx1ZSk7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBCaW5kaW5nVHJhaXRzPFByb3Rv
Y29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzPiB7CiBzdGF0aWMgdm9pZCBhc3NlcnRWYWx1ZUhhc0V4
cGVjdGVkVHlwZShKU09OOjpWYWx1ZSopOwogfTsKLXRlbXBsYXRlPD4gc3RydWN0IEJpbmRpbmdU
cmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0MT4gewordGVt
cGxhdGU8PiBzdHJ1Y3QgQmluZGluZ1RyYWl0czxQcm90b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2Jq
ZWN0MT4gewogc3RhdGljIHZvaWQgYXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoSlNPTjo6VmFs
dWUqKTsKIH07Ci10ZW1wbGF0ZTw+IHN0cnVjdCBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDI+IHsKK3RlbXBsYXRlPD4gc3RydWN0IEJpbmRp
bmdUcmFpdHM8UHJvdG9jb2w6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDI+IHsKIHN0YXRpYyB2b2lk
IGFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKEpTT046OlZhbHVlKik7CiB9OwogCkBAIC01Nzks
OSArNTgyLDkgQEAgT3B0aW9uYWw8UHJvdG9jb2xFbnVtVHlwZT4gcGFyc2VFbnVtVmFsdWVGcm9t
U3RyaW5nKGNvbnN0IFN0cmluZyYpOwogCiAvLyBFbnVtcyBpbiB0aGUgJ1Rlc3QnIERvbWFpbgog
dGVtcGxhdGU8PgotT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VW5jYXN0ZWRB
bmltYWxzPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVz
dDo6VW5jYXN0ZWRBbmltYWxzPihjb25zdCBTdHJpbmcmKTsKK09wdGlvbmFsPFByb3RvY29sOjpU
ZXN0OjpVbmNhc3RlZEFuaW1hbHM+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxQcm90b2NvbDo6
VGVzdDo6VW5jYXN0ZWRBbmltYWxzPihjb25zdCBTdHJpbmcmKTsKIHRlbXBsYXRlPD4KLU9wdGlv
bmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM+IHBhcnNlRW51bVZh
bHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzPihj
b25zdCBTdHJpbmcmKTsKK09wdGlvbmFsPFByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzPiBw
YXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM+KGNv
bnN0IFN0cmluZyYpOwogCiB9IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycwogCkBAIC02MzUsOCAr
NjM4LDcgQEAgc3RydWN0IERlZmF1bHRIYXNoPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OkNh
c3RlZEFuaW1hbHM+IDogSW50SGFzaDxJbnNwZWN0b3IKICNpbmNsdWRlICJjb25maWcuaCIKICNp
bmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAKLSNpbmNsdWRlIDx3dGYvT3B0aW9uYWwu
aD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlv
bnMuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKQEAgLTY2MSwzMyArNjYzLDMzIEBAIFN0
cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSkgewogLy8gRW51bXMgaW4gdGhlICdU
ZXN0JyBEb21haW4KIAogdGVtcGxhdGU8PgotT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6
VGVzdDo6VW5jYXN0ZWRBbmltYWxzPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9y
OjpQcm90b2NvbDo6VGVzdDo6VW5jYXN0ZWRBbmltYWxzPihjb25zdCBTdHJpbmcmIHByb3RvY29s
U3RyaW5nKQorT3B0aW9uYWw8UHJvdG9jb2w6OlRlc3Q6OlVuY2FzdGVkQW5pbWFscz4gcGFyc2VF
bnVtVmFsdWVGcm9tU3RyaW5nPFByb3RvY29sOjpUZXN0OjpVbmNhc3RlZEFuaW1hbHM+KGNvbnN0
IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcpCiB7CiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBjb25z
dGFudFZhbHVlc1tdID0gewotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlRl
c3Q6OlVuY2FzdGVkQW5pbWFsczo6UGlncywKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlBy
b3RvY29sOjpUZXN0OjpVbmNhc3RlZEFuaW1hbHM6OkNvd3MsCi0gICAgICAgIChzaXplX3QpSW5z
cGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VW5jYXN0ZWRBbmltYWxzOjpDYXRzLAotICAgICAgICAo
c2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlVuY2FzdGVkQW5pbWFsczo6SGVucywK
KyAgICAgICAgKHNpemVfdClQcm90b2NvbDo6VGVzdDo6VW5jYXN0ZWRBbmltYWxzOjpQaWdzLAor
ICAgICAgICAoc2l6ZV90KVByb3RvY29sOjpUZXN0OjpVbmNhc3RlZEFuaW1hbHM6OkNvd3MsCisg
ICAgICAgIChzaXplX3QpUHJvdG9jb2w6OlRlc3Q6OlVuY2FzdGVkQW5pbWFsczo6Q2F0cywKKyAg
ICAgICAgKHNpemVfdClQcm90b2NvbDo6VGVzdDo6VW5jYXN0ZWRBbmltYWxzOjpIZW5zLAogICAg
IH07CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCA0OyArK2kpCiAgICAgICAgIGlmIChwcm90
b2NvbFN0cmluZyA9PSBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb25zdGFudFZhbHVlc1tpXV0pCi0g
ICAgICAgICAgICByZXR1cm4gKEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlVuY2FzdGVkQW5p
bWFscyljb25zdGFudFZhbHVlc1tpXTsKKyAgICAgICAgICAgIHJldHVybiAoUHJvdG9jb2w6OlRl
c3Q6OlVuY2FzdGVkQW5pbWFscyljb25zdGFudFZhbHVlc1tpXTsKIAogICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CiB9CiAKIHRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlRlc3Q6OkNhc3RlZEFuaW1hbHM+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6
OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzPihjb25zdCBTdHJpbmcmIHByb3RvY29sU3Ry
aW5nKQorT3B0aW9uYWw8UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM+IHBhcnNlRW51bVZh
bHVlRnJvbVN0cmluZzxQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFscz4oY29uc3QgU3RyaW5n
JiBwcm90b2NvbFN0cmluZykKIHsKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNvbnN0YW50VmFs
dWVzW10gPSB7Ci0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2Fz
dGVkQW5pbWFsczo6RHVja3MsCi0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6
VGVzdDo6Q2FzdGVkQW5pbWFsczo6SGVucywKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlBy
b3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzOjpDcm93cywKLSAgICAgICAgKHNpemVfdClJbnNw
ZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzOjpGbGFtaW5nb3MsCisgICAgICAg
IChzaXplX3QpUHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM6OkR1Y2tzLAorICAgICAgICAo
c2l6ZV90KVByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzOjpIZW5zLAorICAgICAgICAoc2l6
ZV90KVByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzOjpDcm93cywKKyAgICAgICAgKHNpemVf
dClQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFsczo6RmxhbWluZ29zLAogICAgIH07CiAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCA0OyArK2kpCiAgICAgICAgIGlmIChwcm90b2NvbFN0cmlu
ZyA9PSBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb25zdGFudFZhbHVlc1tpXV0pCi0gICAgICAgICAg
ICByZXR1cm4gKEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHMpY29uc3Rh
bnRWYWx1ZXNbaV07CisgICAgICAgICAgICByZXR1cm4gKFByb3RvY29sOjpUZXN0OjpDYXN0ZWRB
bmltYWxzKWNvbnN0YW50VmFsdWVzW2ldOwogCiAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0K
QEAgLTY5NiwxMTUgKzY5OCwxMDEgQEAgT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVz
dDo6Q2FzdGVkQW5pbWFscz4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3AKIAogCiAKLXZv
aWQgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxz
Pjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoSlNPTjo6VmFsdWUqIHZhbHVlKQordm9pZCBC
aW5kaW5nVHJhaXRzPFByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzPjo6YXNzZXJ0VmFsdWVI
YXNFeHBlY3RlZFR5cGUoSlNPTjo6VmFsdWUqIHZhbHVlKQogeworICAgIEFTU0VSVF9VTlVTRUQo
dmFsdWUsIHZhbHVlKTsKICNpZiBBU1NFUlRfRU5BQkxFRAotICAgIEFTU0VSVF9BUkcodmFsdWUs
IHZhbHVlKTsKLSAgICBTdHJpbmcgcmVzdWx0OwotICAgIGJvb2wgY2FzdFN1Y2NlZWRlZCA9IHZh
bHVlLT5hc1N0cmluZyhyZXN1bHQpOwotICAgIEFTU0VSVChjYXN0U3VjY2VlZGVkKTsKKyAgICBh
dXRvIHJlc3VsdCA9IHZhbHVlLT5hc1N0cmluZygpOworICAgIEFTU0VSVChyZXN1bHQpOwogICAg
IEFTU0VSVChyZXN1bHQgPT0gIkR1Y2tzIiB8fCByZXN1bHQgPT0gIkhlbnMiIHx8IHJlc3VsdCA9
PSAiQ3Jvd3MiIHx8IHJlc3VsdCA9PSAiRmxhbWluZ29zIik7Ci0jZWxzZSAvLyBBU1NFUlRfRU5B
QkxFRAotICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7Ci0jZW5kaWYgLy8gQVNTRVJUX0VOQUJMRUQK
KyNlbmRpZgogfQogCi12b2lkIEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVz
dDo6VHlwZU5lZWRpbmdDYXN0Pjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoSlNPTjo6VmFs
dWUqIHZhbHVlKQordm9pZCBCaW5kaW5nVHJhaXRzPFByb3RvY29sOjpUZXN0OjpUeXBlTmVlZGlu
Z0Nhc3Q+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShKU09OOjpWYWx1ZSogdmFsdWUpCiB7
CisgICAgQVNTRVJUX1VOVVNFRCh2YWx1ZSwgdmFsdWUpOwogI2lmIEFTU0VSVF9FTkFCTEVECi0g
ICAgQVNTRVJUX0FSRyh2YWx1ZSwgdmFsdWUpOwotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG9i
amVjdDsKLSAgICBib29sIGNhc3RTdWNjZWVkZWQgPSB2YWx1ZS0+YXNPYmplY3Qob2JqZWN0KTsK
LSAgICBBU1NFUlRfVU5VU0VEKGNhc3RTdWNjZWVkZWQsIGNhc3RTdWNjZWVkZWQpOworICAgIGF1
dG8gb2JqZWN0ID0gdmFsdWUtPmFzT2JqZWN0KCk7CisgICAgQVNTRVJUKG9iamVjdCk7CiAgICAg
ewogICAgICAgICBhdXRvIHN0cmluZ1BvcyA9IG9iamVjdC0+ZmluZCgic3RyaW5nIl9zKTsKICAg
ICAgICAgQVNTRVJUKHN0cmluZ1BvcyAhPSBvYmplY3QtPmVuZCgpKTsKLSAgICAgICAgQmluZGlu
Z1RyYWl0czxTdHJpbmc+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShzdHJpbmdQb3MtPnZh
bHVlLmdldCgpKTsKKyAgICAgICAgQmluZGluZ1RyYWl0czxTdHJpbmc+Ojphc3NlcnRWYWx1ZUhh
c0V4cGVjdGVkVHlwZShzdHJpbmdQb3MtPnZhbHVlLnB0cigpKTsKICAgICB9CiAgICAgewogICAg
ICAgICBhdXRvIG51bWJlclBvcyA9IG9iamVjdC0+ZmluZCgibnVtYmVyIl9zKTsKICAgICAgICAg
QVNTRVJUKG51bWJlclBvcyAhPSBvYmplY3QtPmVuZCgpKTsKLSAgICAgICAgQmluZGluZ1RyYWl0
czxpbnQ+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShudW1iZXJQb3MtPnZhbHVlLmdldCgp
KTsKKyAgICAgICAgQmluZGluZ1RyYWl0czxpbnQ+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlw
ZShudW1iZXJQb3MtPnZhbHVlLnB0cigpKTsKICAgICB9CiAgICAgewogICAgICAgICBhdXRvIGFu
aW1hbHNQb3MgPSBvYmplY3QtPmZpbmQoImFuaW1hbHMiX3MpOwogICAgICAgICBBU1NFUlQoYW5p
bWFsc1BvcyAhPSBvYmplY3QtPmVuZCgpKTsKLSAgICAgICAgQmluZGluZ1RyYWl0czxJbnNwZWN0
b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3Rl
ZFR5cGUoYW5pbWFsc1Bvcy0+dmFsdWUuZ2V0KCkpOworICAgICAgICBCaW5kaW5nVHJhaXRzPFBy
b3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUo
YW5pbWFsc1Bvcy0+dmFsdWUucHRyKCkpOwogICAgIH0KICAgICB7CiAgICAgICAgIGF1dG8gaWRQ
b3MgPSBvYmplY3QtPmZpbmQoImlkIl9zKTsKICAgICAgICAgQVNTRVJUKGlkUG9zICE9IG9iamVj
dC0+ZW5kKCkpOwotICAgICAgICBCaW5kaW5nVHJhaXRzPGludD46OmFzc2VydFZhbHVlSGFzRXhw
ZWN0ZWRUeXBlKGlkUG9zLT52YWx1ZS5nZXQoKSk7CisgICAgICAgIEJpbmRpbmdUcmFpdHM8aW50
Pjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoaWRQb3MtPnZhbHVlLnB0cigpKTsKICAgICB9
CiAgICAgewogICAgICAgICBhdXRvIHRyZWVQb3MgPSBvYmplY3QtPmZpbmQoInRyZWUiX3MpOwog
ICAgICAgICBBU1NFUlQodHJlZVBvcyAhPSBvYmplY3QtPmVuZCgpKTsKLSAgICAgICAgQmluZGlu
Z1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpSZWN1cnNpdmVPYmplY3QxPjo6YXNz
ZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUodHJlZVBvcy0+dmFsdWUuZ2V0KCkpOworICAgICAgICBC
aW5kaW5nVHJhaXRzPFByb3RvY29sOjpUZXN0OjpSZWN1cnNpdmVPYmplY3QxPjo6YXNzZXJ0VmFs
dWVIYXNFeHBlY3RlZFR5cGUodHJlZVBvcy0+dmFsdWUucHRyKCkpOwogICAgIH0KIAotICAgIGlu
dCBmb3VuZFByb3BlcnRpZXNDb3VudCA9IDU7CisgICAgc2l6ZV90IGZvdW5kUHJvcGVydGllc0Nv
dW50ID0gNTsKICAgICBpZiAoZm91bmRQcm9wZXJ0aWVzQ291bnQgIT0gb2JqZWN0LT5zaXplKCkp
CiAgICAgICAgIEZBVEFMKCJVbmV4cGVjdGVkIHByb3BlcnRpZXMgaW4gb2JqZWN0OiAlc1xuIiwg
b2JqZWN0LT50b0pTT05TdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSk7Ci0jZWxzZSAvLyBBU1NFUlRf
RU5BQkxFRAotICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7Ci0jZW5kaWYgLy8gQVNTRVJUX0VOQUJM
RUQKKyNlbmRpZgogfQogCi1SZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VHlwZU5l
ZWRpbmdDYXN0PiBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlR5cGVO
ZWVkaW5nQ2FzdD46OnJ1bnRpbWVDYXN0KFJlZlB0cjxKU09OOjpWYWx1ZT4mJiB2YWx1ZSkKK1Jl
ZjxQcm90b2NvbDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0PiBCaW5kaW5nVHJhaXRzPFByb3RvY29s
OjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3Q+OjpydW50aW1lQ2FzdChSZWY8SlNPTjo6VmFsdWU+JiYg
dmFsdWUpCiB7Ci0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcmVzdWx0OwotICAgIGJvb2wgY2Fz
dFN1Y2NlZWRlZCA9IHZhbHVlLT5hc09iamVjdChyZXN1bHQpOwotICAgIEFTU0VSVF9VTlVTRUQo
Y2FzdFN1Y2NlZWRlZCwgY2FzdFN1Y2NlZWRlZCk7Ci0gICAgQmluZGluZ1RyYWl0czxJbnNwZWN0
b3I6OlByb3RvY29sOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3Q+Ojphc3NlcnRWYWx1ZUhhc0V4cGVj
dGVkVHlwZShyZXN1bHQuZ2V0KCkpOwotICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihJbnNwZWN0
b3I6OlByb3RvY29sOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3QpID09IHNpemVvZihKU09OOjpPYmpl
Y3RCYXNlKSwgdHlwZV9jYXN0X3Byb2JsZW0pOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxJbnNw
ZWN0b3I6OlByb3RvY29sOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3QqPihzdGF0aWNfY2FzdDxKU09O
OjpPYmplY3RCYXNlKj4ocmVzdWx0LmdldCgpKSk7CisgICAgYXV0byByZXN1bHQgPSB2YWx1ZS0+
YXNPYmplY3QoKTsKKyAgICBCaW5kaW5nVHJhaXRzPFByb3RvY29sOjpUZXN0OjpUeXBlTmVlZGlu
Z0Nhc3Q+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShyZXN1bHQuZ2V0KCkpOworICAgIENP
TVBJTEVfQVNTRVJUKHNpemVvZihQcm90b2NvbDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0KSA9PSBz
aXplb2YoSlNPTjo6T2JqZWN0QmFzZSksIHR5cGVfY2FzdF9wcm9ibGVtKTsKKyAgICByZXR1cm4g
c3RhdGljX3JlZmVyZW5jZV9jYXN0PFByb3RvY29sOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3Q+KHN0
YXRpY19yZWZlcmVuY2VfY2FzdDxKU09OOjpPYmplY3RCYXNlPihyZXN1bHQucmVsZWFzZU5vbk51
bGwoKSkpOwogfQogCiAKLXZvaWQgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpU
ZXN0OjpSZWN1cnNpdmVPYmplY3QxPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoSlNPTjo6
VmFsdWUqIHZhbHVlKQordm9pZCBCaW5kaW5nVHJhaXRzPFByb3RvY29sOjpUZXN0OjpSZWN1cnNp
dmVPYmplY3QxPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoSlNPTjo6VmFsdWUqIHZhbHVl
KQogeworICAgIEFTU0VSVF9VTlVTRUQodmFsdWUsIHZhbHVlKTsKICNpZiBBU1NFUlRfRU5BQkxF
RAotICAgIEFTU0VSVF9BUkcodmFsdWUsIHZhbHVlKTsKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0
PiBvYmplY3Q7Ci0gICAgYm9vbCBjYXN0U3VjY2VlZGVkID0gdmFsdWUtPmFzT2JqZWN0KG9iamVj
dCk7Ci0gICAgQVNTRVJUX1VOVVNFRChjYXN0U3VjY2VlZGVkLCBjYXN0U3VjY2VlZGVkKTsKKyAg
ICBhdXRvIG9iamVjdCA9IHZhbHVlLT5hc09iamVjdCgpOworICAgIEFTU0VSVChvYmplY3QpOwog
Ci0gICAgaW50IGZvdW5kUHJvcGVydGllc0NvdW50ID0gMDsKKyAgICBzaXplX3QgZm91bmRQcm9w
ZXJ0aWVzQ291bnQgPSAwOwogICAgIHsKICAgICAgICAgYXV0byBvYmpQb3MgPSBvYmplY3QtPmZp
bmQoIm9iaiJfcyk7CiAgICAgICAgIGlmIChvYmpQb3MgIT0gb2JqZWN0LT5lbmQoKSkgewotICAg
ICAgICAgICAgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpSZWN1cnNp
dmVPYmplY3QyPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUob2JqUG9zLT52YWx1ZS5nZXQo
KSk7CisgICAgICAgICAgICBCaW5kaW5nVHJhaXRzPFByb3RvY29sOjpUZXN0OjpSZWN1cnNpdmVP
YmplY3QyPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUob2JqUG9zLT52YWx1ZS5wdHIoKSk7
CiAgICAgICAgICAgICArK2ZvdW5kUHJvcGVydGllc0NvdW50OwogICAgICAgICB9CiAgICAgfQog
ICAgIGlmIChmb3VuZFByb3BlcnRpZXNDb3VudCAhPSBvYmplY3QtPnNpemUoKSkKICAgICAgICAg
RkFUQUwoIlVuZXhwZWN0ZWQgcHJvcGVydGllcyBpbiBvYmplY3Q6ICVzXG4iLCBvYmplY3QtPnRv
SlNPTlN0cmluZygpLmFzY2lpKCkuZGF0YSgpKTsKLSNlbHNlIC8vIEFTU0VSVF9FTkFCTEVECi0g
ICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKLSNlbmRpZiAvLyBBU1NFUlRfRU5BQkxFRAorI2VuZGlm
CiB9CiAKLXZvaWQgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpSZWN1
cnNpdmVPYmplY3QyPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoSlNPTjo6VmFsdWUqIHZh
bHVlKQordm9pZCBCaW5kaW5nVHJhaXRzPFByb3RvY29sOjpUZXN0OjpSZWN1cnNpdmVPYmplY3Qy
Pjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoSlNPTjo6VmFsdWUqIHZhbHVlKQogeworICAg
IEFTU0VSVF9VTlVTRUQodmFsdWUsIHZhbHVlKTsKICNpZiBBU1NFUlRfRU5BQkxFRAotICAgIEFT
U0VSVF9BUkcodmFsdWUsIHZhbHVlKTsKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBvYmplY3Q7
Ci0gICAgYm9vbCBjYXN0U3VjY2VlZGVkID0gdmFsdWUtPmFzT2JqZWN0KG9iamVjdCk7Ci0gICAg
QVNTRVJUX1VOVVNFRChjYXN0U3VjY2VlZGVkLCBjYXN0U3VjY2VlZGVkKTsKKyAgICBhdXRvIG9i
amVjdCA9IHZhbHVlLT5hc09iamVjdCgpOworICAgIEFTU0VSVChvYmplY3QpOwogCi0gICAgaW50
IGZvdW5kUHJvcGVydGllc0NvdW50ID0gMDsKKyAgICBzaXplX3QgZm91bmRQcm9wZXJ0aWVzQ291
bnQgPSAwOwogICAgIHsKICAgICAgICAgYXV0byBvYmpQb3MgPSBvYmplY3QtPmZpbmQoIm9iaiJf
cyk7CiAgICAgICAgIGlmIChvYmpQb3MgIT0gb2JqZWN0LT5lbmQoKSkgewotICAgICAgICAgICAg
QmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpSZWN1cnNpdmVPYmplY3Qx
Pjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUob2JqUG9zLT52YWx1ZS5nZXQoKSk7CisgICAg
ICAgICAgICBCaW5kaW5nVHJhaXRzPFByb3RvY29sOjpUZXN0OjpSZWN1cnNpdmVPYmplY3QxPjo6
YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUob2JqUG9zLT52YWx1ZS5wdHIoKSk7CiAgICAgICAg
ICAgICArK2ZvdW5kUHJvcGVydGllc0NvdW50OwogICAgICAgICB9CiAgICAgfQogICAgIGlmIChm
b3VuZFByb3BlcnRpZXNDb3VudCAhPSBvYmplY3QtPnNpemUoKSkKICAgICAgICAgRkFUQUwoIlVu
ZXhwZWN0ZWQgcHJvcGVydGllcyBpbiBvYmplY3Q6ICVzXG4iLCBvYmplY3QtPnRvSlNPTlN0cmlu
ZygpLmFzY2lpKCkuZGF0YSgpKTsKLSNlbHNlIC8vIEFTU0VSVF9FTkFCTEVECi0gICAgVU5VU0VE
X1BBUkFNKHZhbHVlKTsKLSNlbmRpZiAvLyBBU1NFUlRfRU5BQkxFRAorI2VuZGlmCiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIFByb3RvY29sCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS13aXRoLW9wZW4tcGFyYW1ldGVy
cy5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9leHBlY3RlZC90eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0CmluZGV4
IDdkNTc3NjJhOGZmOGJlNGE5YWU0OWRjOWVmNTQ3YjlkMzIxM2RjN2IuLmI5ODRjYjA3YzJiMzc1
NTFhMWY3N2MyM2IwOTQwNjIyOTE2ZWU1ZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLXdpdGgtb3Blbi1wYXJh
bWV0ZXJzLmpzb24tcmVzdWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24tcmVz
dWx0CkBAIC02Myw3ICs2Myw3IEBACiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9E
SVNQQVRDSEVSUykKIAotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVkZSAi
VGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
RnJvbnRlbmRSb3V0ZXIuaD4KIApAQCAtMTE5LDExICsxMTksMTQgQEAgcHJpdmF0ZToKIAogI2lu
Y2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9J
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHR1cGxlPgorI2luY2x1ZGUg
PHd0Zi9FeHBlY3RlZC5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAotdHlwZWRlZiBT
dHJpbmcgRXJyb3JTdHJpbmc7CisKIAogCiAKQEAgLTE2NCw5ICsxNjcsNyBAQCB0eXBlZGVmIFN0
cmluZyBFcnJvclN0cmluZzsKICNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCiAK
ICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2lu
Y2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+
Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9B
TFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAjaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNw
YXRjaGVycy5oIgpAQCAtMjE0LDYgKzIxNSw3IEBAIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCiAj
aW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVz
Lmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewpAQCAtMjU3LDcgKzI1OSw2IEBAIGNsYXNz
IEZyb250ZW5kUm91dGVyOwogI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCiAK
ICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKQEAg
LTI5OCw3ICsyOTksOSBAQCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKICNwcmFnbWEgb25jZQogCiAj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgotI2luY2x1
ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNs
dWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAog
bmFtZXNwYWNlIEluc3BlY3RvciB7CiAKQEAgLTMyMCw3ICszMjMsNyBAQCBjbGFzcyBPcGVuUGFy
YW1ldGVyczsKIAogbmFtZXNwYWNlIFRlc3QgewogCi1jbGFzcyBOb09wZW5QYXJhbWV0ZXJzIDog
cHVibGljIEpTT046Ok9iamVjdEJhc2UgeworY2xhc3MgTm9PcGVuUGFyYW1ldGVycyBmaW5hbCA6
IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKIHB1YmxpYzoKICAgICBlbnVtIHsKICAgICAgICAg
Tm9GaWVsZHNTZXQgPSAwLApAQCAtMzQ3LDE3ICszNTAsMTcgQEAgcHVibGljOgogICAgICAgICBm
cmllbmQgY2xhc3MgTm9PcGVuUGFyYW1ldGVyczsKICAgICBwdWJsaWM6CiAKLSAgICAgICAgQnVp
bGRlcjxTVEFURSB8IE9uZVNldD4mIHNldE9uZShkb3VibGUgdmFsdWUpCisgICAgICAgIEJ1aWxk
ZXI8U1RBVEUgfCBPbmVTZXQ+JiBzZXRPbmUoZG91YmxlIGluX29uZSkKICAgICAgICAgewogICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE9uZVNldCksIHByb3BlcnR5X29uZV9h
bHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0RG91YmxlKCJvbmUiX3MsIHZh
bHVlKTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXREb3VibGUoIm9uZSJfcywgaW5fb25lKTsK
ICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8T25lU2V0PigpOwogICAgICAgICB9CiAKLSAg
ICAgICAgQnVpbGRlcjxTVEFURSB8IFR3b1NldD4mIHNldFR3byhkb3VibGUgdmFsdWUpCisgICAg
ICAgIEJ1aWxkZXI8U1RBVEUgfCBUd29TZXQ+JiBzZXRUd28oZG91YmxlIGluX3R3bykKICAgICAg
ICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFR3b1NldCksIHByb3Bl
cnR5X3R3b19hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0RG91YmxlKCJ0
d28iX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXREb3VibGUoInR3byJfcywg
aW5fdHdvKTsKICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VHdvU2V0PigpOwogICAgICAg
ICB9CiAKQEAgLTM4NSw3ICszODgsNyBAQCBwdWJsaWM6CiAgICAgfQogfTsKIAotY2xhc3MgT3Bl
blBhcmFtZXRlcnMgOiBwdWJsaWMgSlNPTjo6T2JqZWN0IHsKK2NsYXNzIE9wZW5QYXJhbWV0ZXJz
IGZpbmFsIDogcHVibGljIEpTT046Ok9iamVjdCB7CiBwdWJsaWM6CiAgICAgZW51bSB7CiAgICAg
ICAgIE5vRmllbGRzU2V0ID0gMCwKQEAgLTQxMiwxNyArNDE1LDE3IEBAIHB1YmxpYzoKICAgICAg
ICAgZnJpZW5kIGNsYXNzIE9wZW5QYXJhbWV0ZXJzOwogICAgIHB1YmxpYzoKIAotICAgICAgICBC
dWlsZGVyPFNUQVRFIHwgQWxwaGFTZXQ+JiBzZXRBbHBoYShkb3VibGUgdmFsdWUpCisgICAgICAg
IEJ1aWxkZXI8U1RBVEUgfCBBbHBoYVNldD4mIHNldEFscGhhKGRvdWJsZSBpbl9hbHBoYSkKICAg
ICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEFscGhhU2V0KSwg
cHJvcGVydHlfYWxwaGFfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldERv
dWJsZSgiYWxwaGEiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXREb3VibGUo
ImFscGhhIl9zLCBpbl9hbHBoYSk7CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEFscGhh
U2V0PigpOwogICAgICAgICB9CiAKLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IEJldGFTZXQ+JiBz
ZXRCZXRhKGRvdWJsZSB2YWx1ZSkKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IEJldGFTZXQ+JiBz
ZXRCZXRhKGRvdWJsZSBpbl9iZXRhKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FT
U0VSVCghKFNUQVRFICYgQmV0YVNldCksIHByb3BlcnR5X2JldGFfYWxyZWFkeV9zZXQpOwotICAg
ICAgICAgICAgbV9yZXN1bHQtPnNldERvdWJsZSgiYmV0YSJfcywgdmFsdWUpOworICAgICAgICAg
ICAgbV9yZXN1bHQtPnNldERvdWJsZSgiYmV0YSJfcywgaW5fYmV0YSk7CiAgICAgICAgICAgICBy
ZXR1cm4gY2FzdFN0YXRlPEJldGFTZXQ+KCk7CiAgICAgICAgIH0KIApAQCAtNDUwLDcgKzQ1Myw3
IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICAvLyBQcm9wZXJ0eSBuYW1lcyBmb3IgdHlwZSBnZW5l
cmF0ZWQgYXMgb3Blbi4KLSAgICBOb25lIHN0YXRpYyBjb25zdCBjaGFyKiBBbHBoYTsKKyAgICBO
b25lIHN0YXRpYyBjb25zdCBjaGFyKiBhbHBoYUtleTsKIH07CiAKIH0gLy8gVGVzdApAQCAtNDk1
LDE0ICs0OTgsMTMgQEAgcHVibGljOgogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlRl
c3RQcm90b2NvbE9iamVjdHMuaCIKIAotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogCiBu
YW1lc3BhY2UgSW5zcGVjdG9yIHsKIAogbmFtZXNwYWNlIFByb3RvY29sIHsKIAotY29uc3QgY2hh
ciogSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6T3BlblBhcmFtZXRlcnM6OkFscGhhID0gImFs
cGhhIjsKK2NvbnN0IGNoYXIqIFByb3RvY29sOjpUZXN0OjpPcGVuUGFyYW1ldGVyczo6YWxwaGFL
ZXkgPSAiYWxwaGEiOwogCiB9IC8vIG5hbWVzcGFjZSBQcm90b2NvbAogCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdmVy
c2lvbi5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9leHBlY3RlZC92ZXJzaW9uLmpzb24tcmVzdWx0CmluZGV4IGVmNzc4YTA2YzdmMjUx
MWY2YzIzNDE4NjcyNTUwNTY4MzdmYmZhM2YuLmMwNGFiNTk3M2U3NjYxMjFlNmJlODY5OTk4NTQx
ZDVhNzEyNzJlOGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9leHBlY3RlZC92ZXJzaW9uLmpzb24tcmVzdWx0CisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC92ZXJzaW9uLmpz
b24tcmVzdWx0CkBAIC02OCw3ICs2OCw3IEBAIEluc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21h
aW4oIlZlcnNpb25Eb21haW4iLCBudWxsKTsKIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJO
QVRFX0RJU1BBVENIRVJTKQogCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKKyNpbmNs
dWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JGcm9udGVuZFJvdXRlci5oPgogCkBAIC0xMjQsMTEgKzEyNCwxNCBAQCBwcml2YXRlOgog
CiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8dHVwbGU+CisjaW5j
bHVkZSA8d3RmL0V4cGVjdGVkLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCi10eXBl
ZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKwogCiAKIApAQCAtMTY5LDkgKzE3Miw3IEBAIHR5cGVk
ZWYgU3RyaW5nIEVycm9yU3RyaW5nOwogI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMu
aCIKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+
Ci0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95
ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKICNpZiBFTkFCTEUoSU5TUEVD
VE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKICNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2Vu
ZERpc3BhdGNoZXJzLmgiCkBAIC0yMTksNiArMjIwLDcgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7
CiAKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8d3RmL0pTT05W
YWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CkBAIC0yNjIsNyArMjY0LDYgQEAg
Y2xhc3MgRnJvbnRlbmRSb3V0ZXI7CiAjaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMu
aCIKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+
Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsK
IApAQCAtMzAzLDcgKzMwNCw5IEBAIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogI3ByYWdtYSBvbmNl
CiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+Ci0j
aW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgor
I2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtMzYyLDggKzM2NSw3IEBAIHN0YXRpYyBj
b25zdGV4cHIgdW5zaWduZWQgVkVSU0lPTiA9IDQyOwogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKIAotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5o
PgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9u
cy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvVHlwZVNldC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9UeXBlU2V0LmNwcAppbmRleCBkOTlmZjMxMWRiNzU1NGEyYjAxMzBkMjcyMjQ5YzdiMDRk
MDViOGE1Li42NWVhMzU0NTljNDQ5Nzg0MmI1OGFhM2I0ZDJjMTZhYmNjOWZlMTU2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlU2V0LmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlU2V0LmNwcApAQCAtNTAxLDE0ICs1MDEsMTQg
QEAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlN0cnVjdHVyZURlc2NyaXB0aW9u
PiBTdHJ1Y3R1cmVTaGFwZTo6aW5zcGVjdG8KICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBmaWVs
ZCA6IGN1cnJlbnRTaGFwZS0+bV9vcHRpb25hbEZpZWxkcykKICAgICAgICAgICAgIG9wdGlvbmFs
RmllbGRzLT5hZGRJdGVtKGZpZWxkLmdldCgpKTsKIAotICAgICAgICBjdXJyZW50T2JqZWN0LT5z
ZXRGaWVsZHMoJmZpZWxkcy5nZXQoKSk7Ci0gICAgICAgIGN1cnJlbnRPYmplY3QtPnNldE9wdGlv
bmFsRmllbGRzKCZvcHRpb25hbEZpZWxkcy5nZXQoKSk7CisgICAgICAgIGN1cnJlbnRPYmplY3Qt
PnNldEZpZWxkcyhXVEZNb3ZlKGZpZWxkcykpOworICAgICAgICBjdXJyZW50T2JqZWN0LT5zZXRP
cHRpb25hbEZpZWxkcyhXVEZNb3ZlKG9wdGlvbmFsRmllbGRzKSk7CiAgICAgICAgIGN1cnJlbnRP
YmplY3QtPnNldENvbnN0cnVjdG9yTmFtZShjdXJyZW50U2hhcGUtPm1fY29uc3RydWN0b3JOYW1l
KTsKICAgICAgICAgY3VycmVudE9iamVjdC0+c2V0SXNJbXByZWNpc2UoY3VycmVudFNoYXBlLT5t
X2lzSW5EaWN0aW9uYXJ5TW9kZSk7CiAKICAgICAgICAgaWYgKGN1cnJlbnRTaGFwZS0+bV9wcm90
bykgewogICAgICAgICAgICAgYXV0byBuZXh0T2JqZWN0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6
UnVudGltZTo6U3RydWN0dXJlRGVzY3JpcHRpb246OmNyZWF0ZSgpLnJlbGVhc2UoKTsKLSAgICAg
ICAgICAgIGN1cnJlbnRPYmplY3QtPnNldFByb3RvdHlwZVN0cnVjdHVyZSgmbmV4dE9iamVjdC5n
ZXQoKSk7CisgICAgICAgICAgICBjdXJyZW50T2JqZWN0LT5zZXRQcm90b3R5cGVTdHJ1Y3R1cmUo
bmV4dE9iamVjdC5jb3B5UmVmKCkpOwogICAgICAgICAgICAgY3VycmVudE9iamVjdCA9IFdURk1v
dmUobmV4dE9iamVjdCk7CiAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYv
SlNPTlZhbHVlcy5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9KU09OVmFsdWVzLmNwcAppbmRleCA0MDUy
MDc4ZjNmOTdjMmU5MGZhY2QwNTFkYzE5MmVjNjUyNjE0YzM0Li40OWIzZjBjYTJmZjFmOGU2OWQw
YzRmNDNhYWFjZmNjNmFiZGE2YjYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9KU09OVmFs
dWVzLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9KU09OVmFsdWVzLmNwcApAQCAtNTcsOSArNTcs
OSBAQCBlbnVtIGNsYXNzIFRva2VuIHsKICAgICBJbnZhbGlkLAogfTsKIAotY29uc3QgY2hhciog
Y29uc3QgbnVsbFN0cmluZyA9ICJudWxsIjsKLWNvbnN0IGNoYXIqIGNvbnN0IHRydWVTdHJpbmcg
PSAidHJ1ZSI7Ci1jb25zdCBjaGFyKiBjb25zdCBmYWxzZVN0cmluZyA9ICJmYWxzZSI7Citjb25z
dCBjaGFyKiBjb25zdCBudWxsVG9rZW4gPSAibnVsbCI7Citjb25zdCBjaGFyKiBjb25zdCB0cnVl
VG9rZW4gPSAidHJ1ZSI7Citjb25zdCBjaGFyKiBjb25zdCBmYWxzZVRva2VuID0gImZhbHNlIjsK
IAogYm9vbCBwYXJzZUNvbnN0VG9rZW4oY29uc3QgVUNoYXIqIHN0YXJ0LCBjb25zdCBVQ2hhciog
ZW5kLCBjb25zdCBVQ2hhcioqIHRva2VuRW5kLCBjb25zdCBjaGFyKiB0b2tlbikKIHsKQEAgLTIw
OSwxNSArMjA5LDE1IEBAIFRva2VuIHBhcnNlVG9rZW4oY29uc3QgVUNoYXIqIHN0YXJ0LCBjb25z
dCBVQ2hhciogZW5kLCBjb25zdCBVQ2hhcioqIHRva2VuU3RhcnQsCiAKICAgICBzd2l0Y2ggKCpz
dGFydCkgewogICAgIGNhc2UgJ24nOgotICAgICAgICBpZiAocGFyc2VDb25zdFRva2VuKHN0YXJ0
LCBlbmQsIHRva2VuRW5kLCBudWxsU3RyaW5nKSkKKyAgICAgICAgaWYgKHBhcnNlQ29uc3RUb2tl
bihzdGFydCwgZW5kLCB0b2tlbkVuZCwgbnVsbFRva2VuKSkKICAgICAgICAgICAgIHJldHVybiBU
b2tlbjo6TnVsbDsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSAndCc6Ci0gICAgICAgIGlmIChw
YXJzZUNvbnN0VG9rZW4oc3RhcnQsIGVuZCwgdG9rZW5FbmQsIHRydWVTdHJpbmcpKQorICAgICAg
ICBpZiAocGFyc2VDb25zdFRva2VuKHN0YXJ0LCBlbmQsIHRva2VuRW5kLCB0cnVlVG9rZW4pKQog
ICAgICAgICAgICAgcmV0dXJuIFRva2VuOjpCb29sVHJ1ZTsKICAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSAnZic6Ci0gICAgICAgIGlmIChwYXJzZUNvbnN0VG9rZW4oc3RhcnQsIGVuZCwgdG9rZW5F
bmQsIGZhbHNlU3RyaW5nKSkKKyAgICAgICAgaWYgKHBhcnNlQ29uc3RUb2tlbihzdGFydCwgZW5k
LCB0b2tlbkVuZCwgZmFsc2VUb2tlbikpCiAgICAgICAgICAgICByZXR1cm4gVG9rZW46OkJvb2xG
YWxzZTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSAnWyc6CkBAIC0zODAsNyArMzgwLDcgQEAg
UmVmUHRyPEpTT046OlZhbHVlPiBidWlsZFZhbHVlKGNvbnN0IFVDaGFyKiBzdGFydCwgY29uc3Qg
VUNoYXIqIGVuZCwgY29uc3QgVUNoYXIKICAgICAgICAgICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4g
YXJyYXlOb2RlID0gYnVpbGRWYWx1ZShzdGFydCwgZW5kLCAmdG9rZW5FbmQsIGRlcHRoICsgMSk7
CiAgICAgICAgICAgICBpZiAoIWFycmF5Tm9kZSkKICAgICAgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLSAgICAgICAgICAgIGFycmF5LT5wdXNoVmFsdWUoV1RGTW92ZShhcnJheU5vZGUpKTsK
KyAgICAgICAgICAgIGFycmF5LT5wdXNoVmFsdWUoYXJyYXlOb2RlLnJlbGVhc2VOb25OdWxsKCkp
OwogCiAgICAgICAgICAgICAvLyBBZnRlciBhIGxpc3QgdmFsdWUsIHdlIGV4cGVjdCBhIGNvbW1h
IG9yIHRoZSBlbmQgb2YgdGhlIGxpc3QuCiAgICAgICAgICAgICBzdGFydCA9IHRva2VuRW5kOwpA
QCAtNDIwLDcgKzQyMCw3IEBAIFJlZlB0cjxKU09OOjpWYWx1ZT4gYnVpbGRWYWx1ZShjb25zdCBV
Q2hhciogc3RhcnQsIGNvbnN0IFVDaGFyKiBlbmQsIGNvbnN0IFVDaGFyCiAgICAgICAgICAgICBS
ZWZQdHI8SlNPTjo6VmFsdWU+IHZhbHVlID0gYnVpbGRWYWx1ZShzdGFydCwgZW5kLCAmdG9rZW5F
bmQsIGRlcHRoICsgMSk7CiAgICAgICAgICAgICBpZiAoIXZhbHVlKQogICAgICAgICAgICAgICAg
IHJldHVybiBudWxscHRyOwotICAgICAgICAgICAgb2JqZWN0LT5zZXRWYWx1ZShrZXksIFdURk1v
dmUodmFsdWUpKTsKKyAgICAgICAgICAgIG9iamVjdC0+c2V0VmFsdWUoa2V5LCB2YWx1ZS5yZWxl
YXNlTm9uTnVsbCgpKTsKICAgICAgICAgICAgIHN0YXJ0ID0gdG9rZW5FbmQ7CiAKICAgICAgICAg
ICAgIC8vIEFmdGVyIGEga2V5L3ZhbHVlIHBhaXIsIHdlIGV4cGVjdCBhIGNvbW1hIG9yIHRoZSBl
bmQgb2YgdGhlCkBAIC00ODksNDAgKzQ4OSwzOCBAQCBSZWY8VmFsdWU+IFZhbHVlOjpjcmVhdGUo
Y29uc3QgY2hhciogdmFsdWUpCiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgVmFsdWUodmFsdWUp
KTsKIH0KIAotYm9vbCBWYWx1ZTo6YXNWYWx1ZShSZWZQdHI8VmFsdWU+JiB2YWx1ZSkKK1JlZlB0
cjxWYWx1ZT4gVmFsdWU6OmFzVmFsdWUoKQogewotICAgIHZhbHVlID0gdGhpczsKLSAgICByZXR1
cm4gdHJ1ZTsKKyAgICByZXR1cm4gdGhpczsKIH0KIAotYm9vbCBWYWx1ZTo6YXNPYmplY3QoUmVm
UHRyPE9iamVjdD4mKQorUmVmUHRyPE9iamVjdD4gVmFsdWU6OmFzT2JqZWN0KCkKIHsKLSAgICBy
ZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLWJvb2wgVmFsdWU6OmFzQXJy
YXkoUmVmUHRyPEFycmF5PiYpCitSZWZQdHI8QXJyYXk+IFZhbHVlOjphc0FycmF5KCkKIHsKLSAg
ICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLWJvb2wgVmFsdWU6OnBh
cnNlSlNPTihjb25zdCBTdHJpbmcmIGpzb25JbnB1dCwgUmVmUHRyPFZhbHVlPiYgb3V0cHV0KQor
UmVmUHRyPFZhbHVlPiBWYWx1ZTo6cGFyc2VKU09OKGNvbnN0IFN0cmluZyYganNvbikKIHsKICAg
ICAvLyBGSVhNRTogVGhpcyB3aG9sZSBmaWxlIHNob3VsZCBqdXN0IHVzZSBTdHJpbmdWaWV3IGlu
c3RlYWQgb2YgVUNoYXIvbGVuZ3RoIGFuZCBhdm9pZCB1cGNvbnZlcnRpbmcuCi0gICAgYXV0byBj
aGFyYWN0ZXJzID0gU3RyaW5nVmlldyhqc29uSW5wdXQpLnVwY29udmVydGVkQ2hhcmFjdGVycygp
OworICAgIGF1dG8gY2hhcmFjdGVycyA9IFN0cmluZ1ZpZXcoanNvbikudXBjb252ZXJ0ZWRDaGFy
YWN0ZXJzKCk7CiAgICAgY29uc3QgVUNoYXIqIHN0YXJ0ID0gY2hhcmFjdGVyczsKLSAgICBjb25z
dCBVQ2hhciogZW5kID0gc3RhcnQgKyBqc29uSW5wdXQubGVuZ3RoKCk7CisgICAgY29uc3QgVUNo
YXIqIGVuZCA9IHN0YXJ0ICsganNvbi5sZW5ndGgoKTsKICAgICBjb25zdCBVQ2hhciogdG9rZW5F
bmQ7CiAgICAgYXV0byByZXN1bHQgPSBidWlsZFZhbHVlKHN0YXJ0LCBlbmQsICZ0b2tlbkVuZCwg
MCk7CiAgICAgaWYgKCFyZXN1bHQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAKICAgICBmb3IgKGNvbnN0IFVDaGFyKiB2YWx1ZUVuZCA9IHRva2VuRW5k
OyB2YWx1ZUVuZCA8IGVuZDsgKyt2YWx1ZUVuZCkgewogICAgICAgICBpZiAoIWlzU3BhY2VPck5l
d2xpbmUoKnZhbHVlRW5kKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
IHJldHVybiBudWxscHRyOwogICAgIH0KIAotICAgIG91dHB1dCA9IFdURk1vdmUocmVzdWx0KTsK
LSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiB2b2lkIFZhbHVlOjpl
c2NhcGVTdHJpbmcoU3RyaW5nQnVpbGRlciYgYnVpbGRlciwgU3RyaW5nVmlldyBzdHJpbmcpCkBA
IC01NzMsOTQgKzU3MSwzMiBAQCBTdHJpbmcgVmFsdWU6OnRvSlNPTlN0cmluZygpIGNvbnN0CiAg
ICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwogfQogCi1ib29sIFZhbHVlOjphc0Jvb2xlYW4o
Ym9vbCYgb3V0cHV0KSBjb25zdAorT3B0aW9uYWw8Ym9vbD4gVmFsdWU6OmFzQm9vbGVhbigpIGNv
bnN0CiB7CiAgICAgaWYgKHR5cGUoKSAhPSBUeXBlOjpCb29sZWFuKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBvdXRwdXQgPSBtX3ZhbHVlLmJvb2xlYW47Ci0gICAgcmV0dXJuIHRydWU7
CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgcmV0dXJuIG1fdmFsdWUuYm9vbGVh
bjsKIH0KIAotYm9vbCBWYWx1ZTo6YXNEb3VibGUoZG91YmxlJiBvdXRwdXQpIGNvbnN0CitPcHRp
b25hbDxkb3VibGU+IFZhbHVlOjphc0RvdWJsZSgpIGNvbnN0CiB7Ci0gICAgaWYgKHR5cGUoKSAh
PSBUeXBlOjpEb3VibGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIG91dHB1dCA9IG1f
dmFsdWUubnVtYmVyOwotICAgIHJldHVybiB0cnVlOworICAgIGlmICh0eXBlKCkgIT0gVHlwZTo6
RG91YmxlICYmIHR5cGUoKSAhPSBUeXBlOjpJbnRlZ2VyKQorICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OworICAgIHJldHVybiBtX3ZhbHVlLm51bWJlcjsKIH0KIAotYm9vbCBWYWx1ZTo6YXNE
b3VibGUoZmxvYXQmIG91dHB1dCkgY29uc3QKK09wdGlvbmFsPGludD4gVmFsdWU6OmFzSW50ZWdl
cigpIGNvbnN0CiB7Ci0gICAgaWYgKHR5cGUoKSAhPSBUeXBlOjpEb3VibGUpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIG91dHB1dCA9IHN0YXRpY19jYXN0PGZsb2F0PihtX3ZhbHVlLm51
bWJlcik7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgaWYgKHR5cGUoKSAhPSBUeXBlOjpEb3VibGUg
JiYgdHlwZSgpICE9IFR5cGU6OkludGVnZXIpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4obV92YWx1ZS5udW1iZXIpOwogfQogCi1ib29s
IFZhbHVlOjphc0ludGVnZXIoaW50JiBvdXRwdXQpIGNvbnN0Ci17Ci0gICAgaWYgKHR5cGUoKSAh
PSBUeXBlOjpJbnRlZ2VyICYmIHR5cGUoKSAhPSBUeXBlOjpEb3VibGUpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIG91dHB1dCA9IHN0YXRpY19jYXN0PGludD4obV92YWx1ZS5udW1iZXIp
OwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFZhbHVlOjphc0ludGVnZXIodW5zaWduZWQm
IG91dHB1dCkgY29uc3QKLXsKLSAgICBpZiAodHlwZSgpICE9IFR5cGU6OkludGVnZXIgJiYgdHlw
ZSgpICE9IFR5cGU6OkRvdWJsZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgb3V0cHV0
ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fdmFsdWUubnVtYmVyKTsKLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotYm9vbCBWYWx1ZTo6YXNJbnRlZ2VyKGxvbmcmIG91dHB1dCkgY29uc3QKLXsKLSAg
ICBpZiAodHlwZSgpICE9IFR5cGU6OkludGVnZXIgJiYgdHlwZSgpICE9IFR5cGU6OkRvdWJsZSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgb3V0cHV0ID0gc3RhdGljX2Nhc3Q8bG9uZz4o
bV92YWx1ZS5udW1iZXIpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFZhbHVlOjphc0lu
dGVnZXIobG9uZyBsb25nJiBvdXRwdXQpIGNvbnN0Ci17Ci0gICAgaWYgKHR5cGUoKSAhPSBUeXBl
OjpJbnRlZ2VyICYmIHR5cGUoKSAhPSBUeXBlOjpEb3VibGUpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIG91dHB1dCA9IHN0YXRpY19jYXN0PGxvbmcgbG9uZz4obV92YWx1ZS5udW1iZXIp
OwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFZhbHVlOjphc0ludGVnZXIodW5zaWduZWQg
bG9uZyYgb3V0cHV0KSBjb25zdAotewotICAgIGlmICh0eXBlKCkgIT0gVHlwZTo6SW50ZWdlciAm
JiB0eXBlKCkgIT0gVHlwZTo6RG91YmxlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBv
dXRwdXQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPihtX3ZhbHVlLm51bWJlcik7Ci0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgVmFsdWU6OmFzSW50ZWdlcih1bnNpZ25lZCBsb25nIGxv
bmcmIG91dHB1dCkgY29uc3QKLXsKLSAgICBpZiAodHlwZSgpICE9IFR5cGU6OkludGVnZXIgJiYg
dHlwZSgpICE9IFR5cGU6OkRvdWJsZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgb3V0
cHV0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPihtX3ZhbHVlLm51bWJlcik7Ci0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgVmFsdWU6OmFzU3RyaW5nKFN0cmluZyYgb3V0cHV0
KSBjb25zdAorU3RyaW5nIFZhbHVlOjphc1N0cmluZygpIGNvbnN0CiB7CiAgICAgaWYgKHR5cGUo
KSAhPSBUeXBlOjpTdHJpbmcpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIG91dHB1dCA9
IG1fdmFsdWUuc3RyaW5nOwotICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4gbnVsbFN0
cmluZygpOworICAgIHJldHVybiBtX3ZhbHVlLnN0cmluZzsKIH0KIAogdm9pZCBWYWx1ZTo6d3Jp
dGVKU09OKFN0cmluZ0J1aWxkZXImIG91dHB1dCkgY29uc3QKQEAgLTcwMyw3NiArNjM5LDc0IEBA
IE9iamVjdEJhc2U6On5PYmplY3RCYXNlKCkKIHsKIH0KIAotYm9vbCBPYmplY3RCYXNlOjphc09i
amVjdChSZWZQdHI8T2JqZWN0PiYgb3V0cHV0KQorUmVmUHRyPE9iamVjdD4gT2JqZWN0QmFzZTo6
YXNPYmplY3QoKQogewogICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihPYmplY3QpID09IHNpemVv
ZihPYmplY3RCYXNlKSwgY2Fubm90X2Nhc3QpOwotCi0gICAgb3V0cHV0ID0gc3RhdGljX2Nhc3Q8
T2JqZWN0Kj4odGhpcyk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLU9iamVjdCogT2JqZWN0QmFz
ZTo6b3BlbkFjY2Vzc29ycygpCi17Ci0gICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKE9iamVjdCkg
PT0gc2l6ZW9mKE9iamVjdEJhc2UpLCBjYW5ub3RfY2FzdCk7Ci0KICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8T2JqZWN0Kj4odGhpcyk7CiB9CiAKIHNpemVfdCBPYmplY3RCYXNlOjptZW1vcnlDb3N0
KCkgY29uc3QKIHsKICAgICBzaXplX3QgbWVtb3J5Q29zdCA9IFZhbHVlOjptZW1vcnlDb3N0KCk7
Ci0gICAgZm9yIChjb25zdCBhdXRvJiBlbnRyeSA6IG1fbWFwKSB7Ci0gICAgICAgIG1lbW9yeUNv
c3QgKz0gZW50cnkua2V5LnNpemVJbkJ5dGVzKCk7Ci0gICAgICAgIGlmIChlbnRyeS52YWx1ZSkK
LSAgICAgICAgICAgIG1lbW9yeUNvc3QgKz0gZW50cnkudmFsdWUtPm1lbW9yeUNvc3QoKTsKLSAg
ICB9CisgICAgZm9yIChjb25zdCBhdXRvJiBlbnRyeSA6IG1fbWFwKQorICAgICAgICBtZW1vcnlD
b3N0ICs9IGVudHJ5LmtleS5zaXplSW5CeXRlcygpICsgZW50cnkudmFsdWUtPm1lbW9yeUNvc3Qo
KTsKICAgICByZXR1cm4gbWVtb3J5Q29zdDsKIH0KIAotYm9vbCBPYmplY3RCYXNlOjpnZXRCb29s
ZWFuKGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCYgb3V0cHV0KSBjb25zdAorT3B0aW9uYWw8Ym9v
bD4gT2JqZWN0QmFzZTo6Z2V0Qm9vbGVhbihjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0CiB7Ci0g
ICAgUmVmUHRyPFZhbHVlPiB2YWx1ZTsKLSAgICBpZiAoIWdldFZhbHVlKG5hbWUsIHZhbHVlKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHZhbHVlLT5hc0Jvb2xlYW4ob3V0
cHV0KTsKKyAgICBhdXRvIHZhbHVlID0gZ2V0VmFsdWUobmFtZSk7CisgICAgaWYgKCF2YWx1ZSkK
KyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICByZXR1cm4gdmFsdWUtPmFzQm9vbGVh
bigpOwogfQogCi1ib29sIE9iamVjdEJhc2U6OmdldFN0cmluZyhjb25zdCBTdHJpbmcmIG5hbWUs
IFN0cmluZyYgb3V0cHV0KSBjb25zdAorT3B0aW9uYWw8ZG91YmxlPiBPYmplY3RCYXNlOjpnZXRE
b3VibGUoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdAogewotICAgIFJlZlB0cjxWYWx1ZT4gdmFs
dWU7Ci0gICAgaWYgKCFnZXRWYWx1ZShuYW1lLCB2YWx1ZSkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIHJldHVybiB2YWx1ZS0+YXNTdHJpbmcob3V0cHV0KTsKKyAgICBhdXRvIHZhbHVl
ID0gZ2V0VmFsdWUobmFtZSk7CisgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKKyAgICByZXR1cm4gdmFsdWUtPmFzRG91YmxlKCk7CiB9CiAKLWJvb2wgT2JqZWN0
QmFzZTo6Z2V0T2JqZWN0KGNvbnN0IFN0cmluZyYgbmFtZSwgUmVmUHRyPE9iamVjdD4mIG91dHB1
dCkgY29uc3QKK09wdGlvbmFsPGludD4gT2JqZWN0QmFzZTo6Z2V0SW50ZWdlcihjb25zdCBTdHJp
bmcmIG5hbWUpIGNvbnN0CiB7Ci0gICAgUmVmUHRyPFZhbHVlPiB2YWx1ZTsKLSAgICBpZiAoIWdl
dFZhbHVlKG5hbWUsIHZhbHVlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJu
IHZhbHVlLT5hc09iamVjdChvdXRwdXQpOworICAgIGF1dG8gdmFsdWUgPSBnZXRWYWx1ZShuYW1l
KTsKKyAgICBpZiAoIXZhbHVlKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHJl
dHVybiB2YWx1ZS0+YXNJbnRlZ2VyKCk7CiB9CiAKLWJvb2wgT2JqZWN0QmFzZTo6Z2V0QXJyYXko
Y29uc3QgU3RyaW5nJiBuYW1lLCBSZWZQdHI8QXJyYXk+JiBvdXRwdXQpIGNvbnN0CitTdHJpbmcg
T2JqZWN0QmFzZTo6Z2V0U3RyaW5nKGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3QKIHsKLSAgICBS
ZWZQdHI8VmFsdWU+IHZhbHVlOwotICAgIGlmICghZ2V0VmFsdWUobmFtZSwgdmFsdWUpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gdmFsdWUtPmFzQXJyYXkob3V0cHV0KTsK
KyAgICBhdXRvIHZhbHVlID0gZ2V0VmFsdWUobmFtZSk7CisgICAgaWYgKCF2YWx1ZSkKKyAgICAg
ICAgcmV0dXJuIG51bGxTdHJpbmcoKTsKKyAgICByZXR1cm4gdmFsdWUtPmFzU3RyaW5nKCk7CiB9
CiAKLWJvb2wgT2JqZWN0QmFzZTo6Z2V0VmFsdWUoY29uc3QgU3RyaW5nJiBuYW1lLCBSZWZQdHI8
VmFsdWU+JiBvdXRwdXQpIGNvbnN0CitSZWZQdHI8T2JqZWN0PiBPYmplY3RCYXNlOjpnZXRPYmpl
Y3QoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdAogewotICAgIERpY3Rpb25hcnk6OmNvbnN0X2l0
ZXJhdG9yIGZpbmRSZXN1bHQgPSBtX21hcC5maW5kKG5hbWUpOworICAgIGF1dG8gdmFsdWUgPSBn
ZXRWYWx1ZShuYW1lKTsKKyAgICBpZiAoIXZhbHVlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICByZXR1cm4gdmFsdWUtPmFzT2JqZWN0KCk7Cit9CisKK1JlZlB0cjxBcnJheT4gT2JqZWN0
QmFzZTo6Z2V0QXJyYXkoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdAoreworICAgIGF1dG8gdmFs
dWUgPSBnZXRWYWx1ZShuYW1lKTsKKyAgICBpZiAoIXZhbHVlKQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICByZXR1cm4gdmFsdWUtPmFzQXJyYXkoKTsKK30KKworUmVmUHRyPFZhbHVlPiBP
YmplY3RCYXNlOjpnZXRWYWx1ZShjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0Cit7CisgICAgYXV0
byBmaW5kUmVzdWx0ID0gbV9tYXAuZmluZChuYW1lKTsKICAgICBpZiAoZmluZFJlc3VsdCA9PSBt
X21hcC5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgb3V0cHV0ID0gZmluZFJl
c3VsdC0+dmFsdWU7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgIHJldHVybiBmaW5kUmVzdWx0LT52YWx1ZS5jb3B5UmVmKCk7CiB9CiAKIHZvaWQgT2JqZWN0
QmFzZTo6cmVtb3ZlKGNvbnN0IFN0cmluZyYgbmFtZSkKQEAgLTc5OCw4ICs3MzIsNiBAQCB2b2lk
IE9iamVjdEJhc2U6OndyaXRlSlNPTihTdHJpbmdCdWlsZGVyJiBvdXRwdXQpIGNvbnN0CiAKIE9i
amVjdEJhc2U6Ok9iamVjdEJhc2UoKQogICAgIDogVmFsdWUoVHlwZTo6T2JqZWN0KQotICAgICwg
bV9tYXAoKQotICAgICwgbV9vcmRlcigpCiB7CiB9CiAKQEAgLTgwNywxNyArNzM5LDE2IEBAIEFy
cmF5QmFzZTo6fkFycmF5QmFzZSgpCiB7CiB9CiAKLWJvb2wgQXJyYXlCYXNlOjphc0FycmF5KFJl
ZlB0cjxBcnJheT4mIG91dHB1dCkKK1JlZlB0cjxBcnJheT4gQXJyYXlCYXNlOjphc0FycmF5KCkK
IHsKICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoQXJyYXlCYXNlKSA9PSBzaXplb2YoQXJyYXkp
LCBjYW5ub3RfY2FzdCk7Ci0gICAgb3V0cHV0ID0gc3RhdGljX2Nhc3Q8QXJyYXkqPih0aGlzKTsK
LSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8QXJyYXkqPih0aGlzKTsK
IH0KIAogdm9pZCBBcnJheUJhc2U6OndyaXRlSlNPTihTdHJpbmdCdWlsZGVyJiBvdXRwdXQpIGNv
bnN0CiB7CiAgICAgb3V0cHV0LmFwcGVuZCgnWycpOwotICAgIGZvciAoVmVjdG9yPFJlZlB0cjxW
YWx1ZT4+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fbWFwLmJlZ2luKCk7IGl0ICE9IG1fbWFwLmVu
ZCgpOyArK2l0KSB7CisgICAgZm9yIChhdXRvIGl0ID0gbV9tYXAuYmVnaW4oKTsgaXQgIT0gbV9t
YXAuZW5kKCk7ICsraXQpIHsKICAgICAgICAgaWYgKGl0ICE9IG1fbWFwLmJlZ2luKCkpCiAgICAg
ICAgICAgICBvdXRwdXQuYXBwZW5kKCcsJyk7CiAgICAgICAgICgqaXQpLT53cml0ZUpTT04ob3V0
cHV0KTsKQEAgLTgyNywxMSArNzU4LDEwIEBAIHZvaWQgQXJyYXlCYXNlOjp3cml0ZUpTT04oU3Ry
aW5nQnVpbGRlciYgb3V0cHV0KSBjb25zdAogCiBBcnJheUJhc2U6OkFycmF5QmFzZSgpCiAgICAg
OiBWYWx1ZShUeXBlOjpBcnJheSkKLSAgICAsIG1fbWFwKCkKIHsKIH0KIAotUmVmUHRyPFZhbHVl
PiBBcnJheUJhc2U6OmdldChzaXplX3QgaW5kZXgpIGNvbnN0CitSZWY8VmFsdWU+IEFycmF5QmFz
ZTo6Z2V0KHNpemVfdCBpbmRleCkgY29uc3QKIHsKICAgICBSRUxFQVNFX0FTU0VSVF9XSVRIX1NF
Q1VSSVRZX0lNUExJQ0FUSU9OKGluZGV4IDwgbV9tYXAuc2l6ZSgpKTsKICAgICByZXR1cm4gbV9t
YXBbaW5kZXhdOwpAQCAtODUwLDEwICs3ODAsOCBAQCBSZWY8QXJyYXk+IEFycmF5OjpjcmVhdGUo
KQogc2l6ZV90IEFycmF5QmFzZTo6bWVtb3J5Q29zdCgpIGNvbnN0CiB7CiAgICAgc2l6ZV90IG1l
bW9yeUNvc3QgPSBWYWx1ZTo6bWVtb3J5Q29zdCgpOwotICAgIGZvciAoY29uc3QgYXV0byYgaXRl
bSA6IG1fbWFwKSB7Ci0gICAgICAgIGlmIChpdGVtKQotICAgICAgICAgICAgbWVtb3J5Q29zdCAr
PSBpdGVtLT5tZW1vcnlDb3N0KCk7Ci0gICAgfQorICAgIGZvciAoY29uc3QgYXV0byYgaXRlbSA6
IG1fbWFwKQorICAgICAgICBtZW1vcnlDb3N0ICs9IGl0ZW0tPm1lbW9yeUNvc3QoKTsKICAgICBy
ZXR1cm4gbWVtb3J5Q29zdDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvSlNPTlZh
bHVlcy5oIGIvU291cmNlL1dURi93dGYvSlNPTlZhbHVlcy5oCmluZGV4IGViYWJjNDQ5Zjg4MGIz
OWQzZmFkZTc4Y2Q2MWIxYzRkNWUwZTY4NjMuLjQzMDc0NTNkOWNjOGY4OGNjMTY5OWNkODg1NzIx
Njg3N2ZkYzliMDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0pTT05WYWx1ZXMuaAorKysg
Yi9Tb3VyY2UvV1RGL3d0Zi9KU09OVmFsdWVzLmgKQEAgLTkyLDIyICs5MiwxNSBAQCBwdWJsaWM6
CiAgICAgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CiAgICAgYm9vbCBpc051
bGwoKSBjb25zdCB7IHJldHVybiBtX3R5cGUgPT0gVHlwZTo6TnVsbDsgfQogCi0gICAgYm9vbCBh
c0Jvb2xlYW4oYm9vbCYpIGNvbnN0OwotICAgIGJvb2wgYXNJbnRlZ2VyKGludCYpIGNvbnN0Owot
ICAgIGJvb2wgYXNJbnRlZ2VyKHVuc2lnbmVkJikgY29uc3Q7Ci0gICAgYm9vbCBhc0ludGVnZXIo
bG9uZyYpIGNvbnN0OwotICAgIGJvb2wgYXNJbnRlZ2VyKGxvbmcgbG9uZyYpIGNvbnN0OwotICAg
IGJvb2wgYXNJbnRlZ2VyKHVuc2lnbmVkIGxvbmcmKSBjb25zdDsKLSAgICBib29sIGFzSW50ZWdl
cih1bnNpZ25lZCBsb25nIGxvbmcmKSBjb25zdDsKLSAgICBib29sIGFzRG91YmxlKGRvdWJsZSYp
IGNvbnN0OwotICAgIGJvb2wgYXNEb3VibGUoZmxvYXQmKSBjb25zdDsKLSAgICBib29sIGFzU3Ry
aW5nKFN0cmluZyYpIGNvbnN0OwotICAgIGJvb2wgYXNWYWx1ZShSZWZQdHI8VmFsdWU+Jik7Cisg
ICAgT3B0aW9uYWw8Ym9vbD4gYXNCb29sZWFuKCkgY29uc3Q7CisgICAgT3B0aW9uYWw8aW50PiBh
c0ludGVnZXIoKSBjb25zdDsKKyAgICBPcHRpb25hbDxkb3VibGU+IGFzRG91YmxlKCkgY29uc3Q7
CisgICAgU3RyaW5nIGFzU3RyaW5nKCkgY29uc3Q7CisgICAgUmVmUHRyPFZhbHVlPiBhc1ZhbHVl
KCk7CisgICAgdmlydHVhbCBSZWZQdHI8T2JqZWN0PiBhc09iamVjdCgpOworICAgIHZpcnR1YWwg
UmVmUHRyPEFycmF5PiBhc0FycmF5KCk7CiAKLSAgICB2aXJ0dWFsIGJvb2wgYXNPYmplY3QoUmVm
UHRyPE9iamVjdD4mKTsKLSAgICB2aXJ0dWFsIGJvb2wgYXNBcnJheShSZWZQdHI8QXJyYXk+Jik7
Ci0KLSAgICBzdGF0aWMgYm9vbCBwYXJzZUpTT04oY29uc3QgU3RyaW5nJiBqc29uSW5wdXQsIFJl
ZlB0cjxWYWx1ZT4mIG91dHB1dCk7CisgICAgc3RhdGljIFJlZlB0cjxWYWx1ZT4gcGFyc2VKU09O
KGNvbnN0IFN0cmluZyYpOwogICAgIHN0YXRpYyB2b2lkIGVzY2FwZVN0cmluZyhTdHJpbmdCdWls
ZGVyJiwgU3RyaW5nVmlldyk7CiAKICAgICBTdHJpbmcgdG9KU09OU3RyaW5nKCkgY29uc3Q7CkBA
IC0xNzIsOTUgKzE2NSw2MyBAQCBwcml2YXRlOgogCiBjbGFzcyBXVEZfRVhQT1JUX1BSSVZBVEUg
T2JqZWN0QmFzZSA6IHB1YmxpYyBWYWx1ZSB7CiBwcml2YXRlOgotICAgIHR5cGVkZWYgSGFzaE1h
cDxTdHJpbmcsIFJlZlB0cjxWYWx1ZT4+IERpY3Rpb25hcnk7CisgICAgdXNpbmcgRGF0YVN0b3Jh
Z2UgPSBIYXNoTWFwPFN0cmluZywgUmVmPFZhbHVlPj47CisgICAgdXNpbmcgT3JkZXJTdG9yYWdl
ID0gVmVjdG9yPFN0cmluZz47CiAKIHB1YmxpYzoKLSAgICB0eXBlZGVmIERpY3Rpb25hcnk6Oml0
ZXJhdG9yIGl0ZXJhdG9yOwotICAgIHR5cGVkZWYgRGljdGlvbmFyeTo6Y29uc3RfaXRlcmF0b3Ig
Y29uc3RfaXRlcmF0b3I7CisgICAgdXNpbmcgaXRlcmF0b3IgPSBEYXRhU3RvcmFnZTo6aXRlcmF0
b3I7CisgICAgdXNpbmcgY29uc3RfaXRlcmF0b3IgPSBEYXRhU3RvcmFnZTo6Y29uc3RfaXRlcmF0
b3I7CiAKLSAgICBPYmplY3QqIG9wZW5BY2Nlc3NvcnMoKTsKKyAgICBSZWZQdHI8T2JqZWN0PiBh
c09iamVjdCgpIGZpbmFsOwogCiAgICAgc2l6ZV90IG1lbW9yeUNvc3QoKSBjb25zdCBmaW5hbDsK
IAogcHJvdGVjdGVkOgogICAgIH5PYmplY3RCYXNlKCkgb3ZlcnJpZGU7CiAKLSAgICBib29sIGFz
T2JqZWN0KFJlZlB0cjxPYmplY3Q+JiBvdXRwdXQpIG92ZXJyaWRlOwotCiAgICAgLy8gRklYTUU6
IHVzZSB0ZW1wbGF0ZXMgdG8gcmVkdWNlIHRoZSBhbW91bnQgb2YgZHVwbGljYXRlZCBzZXQqKCkg
bWV0aG9kcy4KICAgICB2b2lkIHNldEJvb2xlYW4oY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKTsK
ICAgICB2b2lkIHNldEludGVnZXIoY29uc3QgU3RyaW5nJiBuYW1lLCBpbnQpOwogICAgIHZvaWQg
c2V0RG91YmxlKGNvbnN0IFN0cmluZyYgbmFtZSwgZG91YmxlKTsKICAgICB2b2lkIHNldFN0cmlu
Zyhjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYpOwotICAgIHZvaWQgc2V0VmFsdWUo
Y29uc3QgU3RyaW5nJiBuYW1lLCBSZWZQdHI8VmFsdWU+JiYpOwotICAgIHZvaWQgc2V0T2JqZWN0
KGNvbnN0IFN0cmluZyYgbmFtZSwgUmVmUHRyPE9iamVjdEJhc2U+JiYpOwotICAgIHZvaWQgc2V0
QXJyYXkoY29uc3QgU3RyaW5nJiBuYW1lLCBSZWZQdHI8QXJyYXlCYXNlPiYmKTsKKyAgICB2b2lk
IHNldFZhbHVlKGNvbnN0IFN0cmluZyYgbmFtZSwgUmVmPFZhbHVlPiYmKTsKKyAgICB2b2lkIHNl
dE9iamVjdChjb25zdCBTdHJpbmcmIG5hbWUsIFJlZjxPYmplY3RCYXNlPiYmKTsKKyAgICB2b2lk
IHNldEFycmF5KGNvbnN0IFN0cmluZyYgbmFtZSwgUmVmPEFycmF5QmFzZT4mJik7CiAKICAgICBp
dGVyYXRvciBmaW5kKGNvbnN0IFN0cmluZyYgbmFtZSk7CiAgICAgY29uc3RfaXRlcmF0b3IgZmlu
ZChjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0OwogCi0gICAgLy8gRklYTUU6IHVzZSB0ZW1wbGF0
ZXMgdG8gcmVkdWNlIHRoZSBhbW91bnQgb2YgZHVwbGljYXRlZCBnZXQqKCkgbWV0aG9kcy4KLSAg
ICBib29sIGdldEJvb2xlYW4oY29uc3QgU3RyaW5nJiBuYW1lLCBib29sJiBvdXRwdXQpIGNvbnN0
OwotICAgIHRlbXBsYXRlPGNsYXNzIFQ+IGJvb2wgZ2V0RG91YmxlKGNvbnN0IFN0cmluZyYgbmFt
ZSwgVCYgb3V0cHV0KSBjb25zdAotICAgIHsKLSAgICAgICAgUmVmUHRyPFZhbHVlPiB2YWx1ZTsK
LSAgICAgICAgaWYgKCFnZXRWYWx1ZShuYW1lLCB2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICAgICAgcmV0dXJuIHZhbHVlLT5hc0RvdWJsZShvdXRwdXQpOwotICAgIH0K
LSAgICB0ZW1wbGF0ZTxjbGFzcyBUPiBib29sIGdldEludGVnZXIoY29uc3QgU3RyaW5nJiBuYW1l
LCBUJiBvdXRwdXQpIGNvbnN0Ci0gICAgewotICAgICAgICBSZWZQdHI8VmFsdWU+IHZhbHVlOwot
ICAgICAgICBpZiAoIWdldFZhbHVlKG5hbWUsIHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgICAgICByZXR1cm4gdmFsdWUtPmFzSW50ZWdlcihvdXRwdXQpOwotICAgIH0K
LQotICAgIHRlbXBsYXRlPGNsYXNzIFQ+IE9wdGlvbmFsPFQ+IGdldE51bWJlcihjb25zdCBTdHJp
bmcmIG5hbWUpIGNvbnN0Ci0gICAgewotICAgICAgICBSZWZQdHI8VmFsdWU+IHZhbHVlOwotICAg
ICAgICBpZiAoIWdldFZhbHVlKG5hbWUsIHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7Ci0KLSAgICAgICAgVCByZXN1bHQ7Ci0gICAgICAgIGlmICghdmFsdWUtPmFzRG91
YmxlKHJlc3VsdCkpCi0gICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgICAg
IHJldHVybiByZXN1bHQ7Ci0gICAgfQotCi0gICAgYm9vbCBnZXRTdHJpbmcoY29uc3QgU3RyaW5n
JiBuYW1lLCBTdHJpbmcmIG91dHB1dCkgY29uc3Q7Ci0gICAgYm9vbCBnZXRPYmplY3QoY29uc3Qg
U3RyaW5nJiBuYW1lLCBSZWZQdHI8T2JqZWN0PiYpIGNvbnN0OwotICAgIGJvb2wgZ2V0QXJyYXko
Y29uc3QgU3RyaW5nJiBuYW1lLCBSZWZQdHI8QXJyYXk+JikgY29uc3Q7Ci0gICAgYm9vbCBnZXRW
YWx1ZShjb25zdCBTdHJpbmcmIG5hbWUsIFJlZlB0cjxWYWx1ZT4mKSBjb25zdDsKKyAgICBPcHRp
b25hbDxib29sPiBnZXRCb29sZWFuKGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3Q7CisgICAgT3B0
aW9uYWw8ZG91YmxlPiBnZXREb3VibGUoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdDsKKyAgICBP
cHRpb25hbDxpbnQ+IGdldEludGVnZXIoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdDsKKyAgICBT
dHJpbmcgZ2V0U3RyaW5nKGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3Q7CisgICAgUmVmUHRyPE9i
amVjdD4gZ2V0T2JqZWN0KGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3Q7CisgICAgUmVmUHRyPEFy
cmF5PiBnZXRBcnJheShjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0OworICAgIFJlZlB0cjxWYWx1
ZT4gZ2V0VmFsdWUoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdDsKIAogICAgIHZvaWQgcmVtb3Zl
KGNvbnN0IFN0cmluZyYgbmFtZSk7CiAKLSAgICB2b2lkIHdyaXRlSlNPTihTdHJpbmdCdWlsZGVy
JiBvdXRwdXQpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgd3JpdGVKU09OKFN0cmluZ0J1aWxk
ZXImIG91dHB1dCkgY29uc3QgZmluYWw7CiAKICAgICBpdGVyYXRvciBiZWdpbigpIHsgcmV0dXJu
IG1fbWFwLmJlZ2luKCk7IH0KICAgICBpdGVyYXRvciBlbmQoKSB7IHJldHVybiBtX21hcC5lbmQo
KTsgfQogICAgIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gbV9tYXAuYmVn
aW4oKTsgfQogICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fbWFwLmVu
ZCgpOyB9CiAKLSAgICBpbnQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWFwLnNpemUoKTsgfQor
ICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX21hcC5zaXplKCk7IH0KIAogcHJv
dGVjdGVkOgogICAgIE9iamVjdEJhc2UoKTsKIAogcHJpdmF0ZToKLSAgICBEaWN0aW9uYXJ5IG1f
bWFwOwotICAgIFZlY3RvcjxTdHJpbmc+IG1fb3JkZXI7CisgICAgRGF0YVN0b3JhZ2UgbV9tYXA7
CisgICAgT3JkZXJTdG9yYWdlIG1fb3JkZXI7CiB9OwogCiBjbGFzcyBPYmplY3QgOiBwdWJsaWMg
T2JqZWN0QmFzZSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFdURl9FWFBPUlRfUFJJVkFURSBSZWY8
T2JqZWN0PiBjcmVhdGUoKTsKIAotICAgIHVzaW5nIE9iamVjdEJhc2U6OmFzT2JqZWN0OwotCiAg
ICAgLy8gVGhpcyBjbGFzcyBleHBlY3RlZCBub24tY3ljbGljIHZhbHVlcywgYXMgd2UgY2Fubm90
IHNlcmlhbGl6ZSBjeWNsZXMgaW4gSlNPTi4KICAgICB1c2luZyBPYmplY3RCYXNlOjpzZXRCb29s
ZWFuOwogICAgIHVzaW5nIE9iamVjdEJhc2U6OnNldEludGVnZXI7CkBAIC0yNzQsNyArMjM1LDYg
QEAgcHVibGljOgogICAgIHVzaW5nIE9iamVjdEJhc2U6OmdldEJvb2xlYW47CiAgICAgdXNpbmcg
T2JqZWN0QmFzZTo6Z2V0SW50ZWdlcjsKICAgICB1c2luZyBPYmplY3RCYXNlOjpnZXREb3VibGU7
Ci0gICAgdXNpbmcgT2JqZWN0QmFzZTo6Z2V0TnVtYmVyOwogICAgIHVzaW5nIE9iamVjdEJhc2U6
OmdldFN0cmluZzsKICAgICB1c2luZyBPYmplY3RCYXNlOjpnZXRPYmplY3Q7CiAgICAgdXNpbmcg
T2JqZWN0QmFzZTo6Z2V0QXJyYXk7CkBAIC0yOTAsNDkgKzI1MCw0OSBAQCBwdWJsaWM6CiAKIAog
Y2xhc3MgV1RGX0VYUE9SVF9QUklWQVRFIEFycmF5QmFzZSA6IHB1YmxpYyBWYWx1ZSB7Citwcml2
YXRlOgorICAgIHVzaW5nIERhdGFTdG9yYWdlID0gVmVjdG9yPFJlZjxWYWx1ZT4+OworCiBwdWJs
aWM6Ci0gICAgdHlwZWRlZiBWZWN0b3I8UmVmUHRyPFZhbHVlPj46Oml0ZXJhdG9yIGl0ZXJhdG9y
OwotICAgIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxWYWx1ZT4+Ojpjb25zdF9pdGVyYXRvciBjb25z
dF9pdGVyYXRvcjsKKyAgICB1c2luZyBpdGVyYXRvciA9IERhdGFTdG9yYWdlOjppdGVyYXRvcjsK
KyAgICB1c2luZyBjb25zdF9pdGVyYXRvciA9IERhdGFTdG9yYWdlOjpjb25zdF9pdGVyYXRvcjsK
IAotICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2ln
bmVkPihtX21hcC5zaXplKCkpOyB9CisgICAgc2l6ZV90IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJu
IG1fbWFwLnNpemUoKTsgfQogCi0gICAgUmVmUHRyPFZhbHVlPiBnZXQoc2l6ZV90IGluZGV4KSBj
b25zdDsKKyAgICBSZWY8VmFsdWU+IGdldChzaXplX3QgaW5kZXgpIGNvbnN0OwogCiAgICAgc2l6
ZV90IG1lbW9yeUNvc3QoKSBjb25zdCBmaW5hbDsKIAorICAgIFJlZlB0cjxBcnJheT4gYXNBcnJh
eSgpIGZpbmFsOworCiBwcm90ZWN0ZWQ6CiAgICAgfkFycmF5QmFzZSgpIG92ZXJyaWRlOwogCi0g
ICAgYm9vbCBhc0FycmF5KFJlZlB0cjxBcnJheT4mKSBvdmVycmlkZTsKLQogICAgIHZvaWQgcHVz
aEJvb2xlYW4oYm9vbCk7CiAgICAgdm9pZCBwdXNoSW50ZWdlcihpbnQpOwogICAgIHZvaWQgcHVz
aERvdWJsZShkb3VibGUpOwogICAgIHZvaWQgcHVzaFN0cmluZyhjb25zdCBTdHJpbmcmKTsKLSAg
ICB2b2lkIHB1c2hWYWx1ZShSZWZQdHI8VmFsdWU+JiYpOwotICAgIHZvaWQgcHVzaE9iamVjdChS
ZWZQdHI8T2JqZWN0QmFzZT4mJik7Ci0gICAgdm9pZCBwdXNoQXJyYXkoUmVmUHRyPEFycmF5QmFz
ZT4mJik7Ci0KLSAgICB2b2lkIHdyaXRlSlNPTihTdHJpbmdCdWlsZGVyJiBvdXRwdXQpIGNvbnN0
IG92ZXJyaWRlOworICAgIHZvaWQgcHVzaFZhbHVlKFJlZjxWYWx1ZT4mJik7CisgICAgdm9pZCBw
dXNoT2JqZWN0KFJlZjxPYmplY3RCYXNlPiYmKTsKKyAgICB2b2lkIHB1c2hBcnJheShSZWY8QXJy
YXlCYXNlPiYmKTsKIAogICAgIGl0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gbV9tYXAuYmVnaW4o
KTsgfQogICAgIGl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIG1fbWFwLmVuZCgpOyB9CiAgICAgY29u
c3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBtX21hcC5iZWdpbigpOyB9CiAgICAg
Y29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gbV9tYXAuZW5kKCk7IH0KKyAgICB2
b2lkIHdyaXRlSlNPTihTdHJpbmdCdWlsZGVyJiBvdXRwdXQpIGNvbnN0IGZpbmFsOwogCiBwcm90
ZWN0ZWQ6CiAgICAgQXJyYXlCYXNlKCk7CiAKIHByaXZhdGU6Ci0gICAgVmVjdG9yPFJlZlB0cjxW
YWx1ZT4+IG1fbWFwOworICAgIERhdGFTdG9yYWdlIG1fbWFwOwogfTsKIAotY2xhc3MgQXJyYXkg
OiBwdWJsaWMgQXJyYXlCYXNlIHsKK2NsYXNzIEFycmF5IGZpbmFsIDogcHVibGljIEFycmF5QmFz
ZSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFdURl9FWFBPUlRfUFJJVkFURSBSZWY8QXJyYXk+IGNy
ZWF0ZSgpOwogCi0gICAgdXNpbmcgQXJyYXlCYXNlOjphc0FycmF5OwotCiAgICAgLy8gVGhpcyBj
bGFzcyBleHBlY3RlZCBub24tY3ljbGljIHZhbHVlcywgYXMgd2UgY2Fubm90IHNlcmlhbGl6ZSBj
eWNsZXMgaW4gSlNPTi4KICAgICB1c2luZyBBcnJheUJhc2U6OnB1c2hCb29sZWFuOwogICAgIHVz
aW5nIEFycmF5QmFzZTo6cHVzaEludGVnZXI7CkBAIC0zNDgsNyArMzA4LDYgQEAgcHVibGljOgog
ICAgIHVzaW5nIEFycmF5QmFzZTo6ZW5kOwogfTsKIAotCiBpbmxpbmUgT2JqZWN0QmFzZTo6aXRl
cmF0b3IgT2JqZWN0QmFzZTo6ZmluZChjb25zdCBTdHJpbmcmIG5hbWUpCiB7CiAgICAgcmV0dXJu
IG1fbWFwLmZpbmQobmFtZSk7CkBAIC0zNzksMjMgKzMzOCwyMCBAQCBpbmxpbmUgdm9pZCBPYmpl
Y3RCYXNlOjpzZXRTdHJpbmcoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVl
KQogICAgIHNldFZhbHVlKG5hbWUsIFZhbHVlOjpjcmVhdGUodmFsdWUpKTsKIH0KIAotaW5saW5l
IHZvaWQgT2JqZWN0QmFzZTo6c2V0VmFsdWUoY29uc3QgU3RyaW5nJiBuYW1lLCBSZWZQdHI8VmFs
dWU+JiYgdmFsdWUpCitpbmxpbmUgdm9pZCBPYmplY3RCYXNlOjpzZXRWYWx1ZShjb25zdCBTdHJp
bmcmIG5hbWUsIFJlZjxWYWx1ZT4mJiB2YWx1ZSkKIHsKLSAgICBBU1NFUlQodmFsdWUpOwogICAg
IGlmIChtX21hcC5zZXQobmFtZSwgV1RGTW92ZSh2YWx1ZSkpLmlzTmV3RW50cnkpCiAgICAgICAg
IG1fb3JkZXIuYXBwZW5kKG5hbWUpOwogfQogCi1pbmxpbmUgdm9pZCBPYmplY3RCYXNlOjpzZXRP
YmplY3QoY29uc3QgU3RyaW5nJiBuYW1lLCBSZWZQdHI8T2JqZWN0QmFzZT4mJiB2YWx1ZSkKK2lu
bGluZSB2b2lkIE9iamVjdEJhc2U6OnNldE9iamVjdChjb25zdCBTdHJpbmcmIG5hbWUsIFJlZjxP
YmplY3RCYXNlPiYmIHZhbHVlKQogewotICAgIEFTU0VSVCh2YWx1ZSk7CiAgICAgaWYgKG1fbWFw
LnNldChuYW1lLCBXVEZNb3ZlKHZhbHVlKSkuaXNOZXdFbnRyeSkKICAgICAgICAgbV9vcmRlci5h
cHBlbmQobmFtZSk7CiB9CiAKLWlubGluZSB2b2lkIE9iamVjdEJhc2U6OnNldEFycmF5KGNvbnN0
IFN0cmluZyYgbmFtZSwgUmVmUHRyPEFycmF5QmFzZT4mJiB2YWx1ZSkKK2lubGluZSB2b2lkIE9i
amVjdEJhc2U6OnNldEFycmF5KGNvbnN0IFN0cmluZyYgbmFtZSwgUmVmPEFycmF5QmFzZT4mJiB2
YWx1ZSkKIHsKLSAgICBBU1NFUlQodmFsdWUpOwogICAgIGlmIChtX21hcC5zZXQobmFtZSwgV1RG
TW92ZSh2YWx1ZSkpLmlzTmV3RW50cnkpCiAgICAgICAgIG1fb3JkZXIuYXBwZW5kKG5hbWUpOwog
fQpAQCAtNDIwLDI2ICszNzYsMjMgQEAgaW5saW5lIHZvaWQgQXJyYXlCYXNlOjpwdXNoU3RyaW5n
KGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgbV9tYXAuYXBwZW5kKFZhbHVlOjpjcmVhdGUodmFs
dWUpKTsKIH0KIAotaW5saW5lIHZvaWQgQXJyYXlCYXNlOjpwdXNoVmFsdWUoUmVmUHRyPFZhbHVl
PiYmIHZhbHVlKQoraW5saW5lIHZvaWQgQXJyYXlCYXNlOjpwdXNoVmFsdWUoUmVmPFZhbHVlPiYm
IHZhbHVlKQogewotICAgIEFTU0VSVCh2YWx1ZSk7CiAgICAgbV9tYXAuYXBwZW5kKFdURk1vdmUo
dmFsdWUpKTsKIH0KIAotaW5saW5lIHZvaWQgQXJyYXlCYXNlOjpwdXNoT2JqZWN0KFJlZlB0cjxP
YmplY3RCYXNlPiYmIHZhbHVlKQoraW5saW5lIHZvaWQgQXJyYXlCYXNlOjpwdXNoT2JqZWN0KFJl
ZjxPYmplY3RCYXNlPiYmIHZhbHVlKQogewotICAgIEFTU0VSVCh2YWx1ZSk7CiAgICAgbV9tYXAu
YXBwZW5kKFdURk1vdmUodmFsdWUpKTsKIH0KIAotaW5saW5lIHZvaWQgQXJyYXlCYXNlOjpwdXNo
QXJyYXkoUmVmUHRyPEFycmF5QmFzZT4mJiB2YWx1ZSkKK2lubGluZSB2b2lkIEFycmF5QmFzZTo6
cHVzaEFycmF5KFJlZjxBcnJheUJhc2U+JiYgdmFsdWUpCiB7Ci0gICAgQVNTRVJUKHZhbHVlKTsK
ICAgICBtX21hcC5hcHBlbmQoV1RGTW92ZSh2YWx1ZSkpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgotY2xhc3MgQXJyYXlPZiA6IHB1YmxpYyBBcnJheUJhc2UgeworY2xhc3MgQXJyYXlPZiBm
aW5hbCA6IHB1YmxpYyBBcnJheUJhc2UgewogcHJpdmF0ZToKICAgICBBcnJheU9mKCkgeyB9CiAK
QEAgLTQ1MCw3ICs0MDMsNyBAQCBwcml2YXRlOgogICAgIH0KIAogcHVibGljOgotICAgIHZvaWQg
YWRkSXRlbShSZWZQdHI8VD4mJiB2YWx1ZSkKKyAgICB2b2lkIGFkZEl0ZW0oUmVmPFQ+JiYgdmFs
dWUpCiAgICAgewogICAgICAgICBjYXN0ZWRBcnJheSgpLnB1c2hWYWx1ZShXVEZNb3ZlKHZhbHVl
KSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBsaWNhdGlv
bm1hbmlmZXN0L0FwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9hcHBsaWNhdGlvbm1hbmlmZXN0L0FwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXIuY3Bw
CmluZGV4IDhkYzc2ZmEyZTU5ZWE2N2UwMjE3MzhjMzExYTM1NzdmNGQzNmU2OTEuLmY4OGNhZGE2
NjBmMzlhZGVmYTAwNmQwOTVlYzU4N2ZiMjkzNDYyMGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvYXBwbGljYXRpb25tYW5pZmVzdC9BcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2Vy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FwcGxpY2F0aW9ubWFuaWZlc3QvQXBw
bGljYXRpb25NYW5pZmVzdFBhcnNlci5jcHAKQEAgLTU0LDE0ICs1NCwxNCBAQCBBcHBsaWNhdGlv
bk1hbmlmZXN0IEFwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXI6OnBhcnNlTWFuaWZlc3QoY29uc3Qg
U3RyaW5nJiB0ZXh0LAogewogICAgIG1fbWFuaWZlc3RVUkwgPSBtYW5pZmVzdFVSTDsKIAotICAg
IFJlZlB0cjxKU09OOjpWYWx1ZT4ganNvblZhbHVlOwotICAgIGlmICghSlNPTjo6VmFsdWU6OnBh
cnNlSlNPTih0ZXh0LCBqc29uVmFsdWUpKSB7CisgICAgYXV0byBqc29uVmFsdWUgPSBKU09OOjpW
YWx1ZTo6cGFyc2VKU09OKHRleHQpOworICAgIGlmICghanNvblZhbHVlKSB7CiAgICAgICAgIGxv
Z0RldmVsb3Blcldhcm5pbmcoIlRoZSBtYW5pZmVzdCBpcyBub3QgdmFsaWQgSlNPTiBkYXRhLiJf
cyk7CiAgICAgICAgIGpzb25WYWx1ZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgfQog
Ci0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gbWFuaWZlc3Q7Ci0gICAgaWYgKCFqc29uVmFsdWUt
PmFzT2JqZWN0KG1hbmlmZXN0KSkgeworICAgIGF1dG8gbWFuaWZlc3QgPSBqc29uVmFsdWUtPmFz
T2JqZWN0KCk7CisgICAgaWYgKCFtYW5pZmVzdCkgewogICAgICAgICBsb2dEZXZlbG9wZXJXYXJu
aW5nKCJUaGUgbWFuaWZlc3QgaXMgbm90IGEgSlNPTiB2YWx1ZSBvZiB0eXBlIFwib2JqZWN0XCIu
Il9zKTsKICAgICAgICAgbWFuaWZlc3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgIH0K
QEAgLTk2LDEyICs5NiwxMiBAQCB2b2lkIEFwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXI6OmxvZ0Rl
dmVsb3Blcldhcm5pbmcoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQogCiBVUkwgQXBwbGljYXRpb25N
YW5pZmVzdFBhcnNlcjo6cGFyc2VTdGFydFVSTChjb25zdCBKU09OOjpPYmplY3QmIG1hbmlmZXN0
LCBjb25zdCBVUkwmIGRvY3VtZW50VVJMKQogewotICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gdmFs
dWU7Ci0gICAgaWYgKCFtYW5pZmVzdC5nZXRWYWx1ZSgic3RhcnRfdXJsIiwgdmFsdWUpKQorICAg
IGF1dG8gdmFsdWUgPSBtYW5pZmVzdC5nZXRWYWx1ZSgic3RhcnRfdXJsIl9zKTsKKyAgICBpZiAo
IXZhbHVlKQogICAgICAgICByZXR1cm4gZG9jdW1lbnRVUkw7CiAKLSAgICBTdHJpbmcgc3RyaW5n
VmFsdWU7Ci0gICAgaWYgKCF2YWx1ZS0+YXNTdHJpbmcoc3RyaW5nVmFsdWUpKSB7CisgICAgYXV0
byBzdHJpbmdWYWx1ZSA9IHZhbHVlLT5hc1N0cmluZygpOworICAgIGlmICghc3RyaW5nVmFsdWUp
IHsKICAgICAgICAgbG9nTWFuaWZlc3RQcm9wZXJ0eU5vdEFTdHJpbmcoInN0YXJ0X3VybCJfcyk7
CiAgICAgICAgIHJldHVybiBkb2N1bWVudFVSTDsKICAgICB9CkBAIC0xMjcsMTIgKzEyNywxMiBA
QCBVUkwgQXBwbGljYXRpb25NYW5pZmVzdFBhcnNlcjo6cGFyc2VTdGFydFVSTChjb25zdCBKU09O
OjpPYmplY3QmIG1hbmlmZXN0LCBjb25zdAogCiBBcHBsaWNhdGlvbk1hbmlmZXN0OjpEaXNwbGF5
IEFwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXI6OnBhcnNlRGlzcGxheShjb25zdCBKU09OOjpPYmpl
Y3QmIG1hbmlmZXN0KQogewotICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gdmFsdWU7Ci0gICAgaWYg
KCFtYW5pZmVzdC5nZXRWYWx1ZSgiZGlzcGxheSJfcywgdmFsdWUpKQorICAgIGF1dG8gdmFsdWUg
PSBtYW5pZmVzdC5nZXRWYWx1ZSgiZGlzcGxheSJfcyk7CisgICAgaWYgKCF2YWx1ZSkKICAgICAg
ICAgcmV0dXJuIEFwcGxpY2F0aW9uTWFuaWZlc3Q6OkRpc3BsYXk6OkJyb3dzZXI7CiAKLSAgICBT
dHJpbmcgc3RyaW5nVmFsdWU7Ci0gICAgaWYgKCF2YWx1ZS0+YXNTdHJpbmcoc3RyaW5nVmFsdWUp
KSB7CisgICAgYXV0byBzdHJpbmdWYWx1ZSA9IHZhbHVlLT5hc1N0cmluZygpOworICAgIGlmICgh
c3RyaW5nVmFsdWUpIHsKICAgICAgICAgbG9nTWFuaWZlc3RQcm9wZXJ0eU5vdEFTdHJpbmcoImRp
c3BsYXkiX3MpOwogICAgICAgICByZXR1cm4gQXBwbGljYXRpb25NYW5pZmVzdDo6RGlzcGxheTo6
QnJvd3NlcjsKICAgICB9CkBAIC0xOTUsMTIgKzE5NSwxMiBAQCBVUkwgQXBwbGljYXRpb25NYW5p
ZmVzdFBhcnNlcjo6cGFyc2VTY29wZShjb25zdCBKU09OOjpPYmplY3QmIG1hbmlmZXN0LCBjb25z
dCBVUgogewogICAgIFVSTCBkZWZhdWx0U2NvcGUgeyBzdGFydFVSTCwgIi4vIiB9OwogCi0gICAg
UmVmUHRyPEpTT046OlZhbHVlPiB2YWx1ZTsKLSAgICBpZiAoIW1hbmlmZXN0LmdldFZhbHVlKCJz
Y29wZSIsIHZhbHVlKSkKKyAgICBhdXRvIHZhbHVlID0gbWFuaWZlc3QuZ2V0VmFsdWUoInNjb3Bl
Iik7CisgICAgaWYgKCF2YWx1ZSkKICAgICAgICAgcmV0dXJuIGRlZmF1bHRTY29wZTsKIAotICAg
IFN0cmluZyBzdHJpbmdWYWx1ZTsKLSAgICBpZiAoIXZhbHVlLT5hc1N0cmluZyhzdHJpbmdWYWx1
ZSkpIHsKKyAgICBhdXRvIHN0cmluZ1ZhbHVlID0gdmFsdWUtPmFzU3RyaW5nKCk7CisgICAgaWYg
KCFzdHJpbmdWYWx1ZSkgewogICAgICAgICBsb2dNYW5pZmVzdFByb3BlcnR5Tm90QVN0cmluZygi
c2NvcGUiX3MpOwogICAgICAgICByZXR1cm4gZGVmYXVsdFNjb3BlOwogICAgIH0KQEAgLTIzMSwx
MiArMjMxLDEyIEBAIFVSTCBBcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyOjpwYXJzZVNjb3BlKGNv
bnN0IEpTT046Ok9iamVjdCYgbWFuaWZlc3QsIGNvbnN0IFVSCiAKIFN0cmluZyBBcHBsaWNhdGlv
bk1hbmlmZXN0UGFyc2VyOjpwYXJzZUdlbmVyaWNTdHJpbmcoY29uc3QgSlNPTjo6T2JqZWN0JiBt
YW5pZmVzdCwgY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUpCiB7Ci0gICAgUmVmUHRyPEpTT046
OlZhbHVlPiB2YWx1ZTsKLSAgICBpZiAoIW1hbmlmZXN0LmdldFZhbHVlKHByb3BlcnR5TmFtZSwg
dmFsdWUpKQorICAgIGF1dG8gdmFsdWUgPSBtYW5pZmVzdC5nZXRWYWx1ZShwcm9wZXJ0eU5hbWUp
OworICAgIGlmICghdmFsdWUpCiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBTdHJpbmcgc3Ry
aW5nVmFsdWU7Ci0gICAgaWYgKCF2YWx1ZS0+YXNTdHJpbmcoc3RyaW5nVmFsdWUpKSB7CisgICAg
YXV0byBzdHJpbmdWYWx1ZSA9IHZhbHVlLT5hc1N0cmluZygpOworICAgIGlmICghc3RyaW5nVmFs
dWUpIHsKICAgICAgICAgbG9nTWFuaWZlc3RQcm9wZXJ0eU5vdEFTdHJpbmcocHJvcGVydHlOYW1l
KTsKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL0luaXREYXRhUmVnaXN0cnkuY3BwIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9Jbml0RGF0YVJlZ2lzdHJ5LmNwcAppbmRleCAz
YjI1ZDA2YjEyM2ExYTUxYTBhMmFjZmI0ZjY1NmY4ZDk0YWRiM2ZjLi42YWIyZjg3OGEzZjhjYTk4
ZTgyYjBlNDJlNWYwYmFhYTIyOGIxYzVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2VuY3J5cHRlZG1lZGlhL0luaXREYXRhUmVnaXN0cnkuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvZW5jcnlwdGVkbWVkaWEvSW5pdERhdGFSZWdpc3RyeS5jcHAKQEAgLTYyLDIy
ICs2MiwyMiBAQCBzdGF0aWMgT3B0aW9uYWw8VmVjdG9yPFJlZjxTaGFyZWRCdWZmZXI+Pj4gZXh0
cmFjdEtleUlEc0tleWlkcyhjb25zdCBTaGFyZWRCdWZmZQogICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwogICAgIFN0cmluZyBqc29uIHsgYnVmZmVyLmRhdGEoKSwgc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KGJ1ZmZlci5zaXplKCkpIH07CiAKLSAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHZhbHVl
OwotICAgIGlmICghSlNPTjo6VmFsdWU6OnBhcnNlSlNPTihqc29uLCB2YWx1ZSkpCisgICAgYXV0
byB2YWx1ZSA9IEpTT046OlZhbHVlOjpwYXJzZUpTT04oanNvbik7CisgICAgaWYgKCF2YWx1ZSkK
ICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+
IG9iamVjdDsKLSAgICBpZiAoIXZhbHVlLT5hc09iamVjdChvYmplY3QpKQorICAgIGF1dG8gb2Jq
ZWN0ID0gdmFsdWUtPmFzT2JqZWN0KCk7CisgICAgaWYgKCFvYmplY3QpCiAgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CiAKLSAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IGtpZHNBcnJheTsKLSAg
ICBpZiAoIW9iamVjdC0+Z2V0QXJyYXkoImtpZHMiLCBraWRzQXJyYXkpKQorICAgIGF1dG8ga2lk
c0FycmF5ID0gb2JqZWN0LT5nZXRBcnJheSgia2lkcyJfcyk7CisgICAgaWYgKCFraWRzQXJyYXkp
CiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICBWZWN0b3I8UmVmPFNoYXJlZEJ1
ZmZlcj4+IGtleUlEczsKICAgICBmb3IgKGF1dG8mIHZhbHVlIDogKmtpZHNBcnJheSkgewotICAg
ICAgICBTdHJpbmcga2V5SUQ7Ci0gICAgICAgIGlmICghdmFsdWUtPmFzU3RyaW5nKGtleUlEKSkK
KyAgICAgICAgYXV0byBrZXlJRCA9IHZhbHVlLT5hc1N0cmluZygpOworICAgICAgICBpZiAoIWtl
eUlEKQogICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgVmVjdG9yPGNoYXI+IGtleUlE
RGF0YTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db21tYW5kTGluZUFQ
SUhvc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0NvbW1hbmRMaW5lQVBJSG9zdC5j
cHAKaW5kZXggZGNlMzU5ZTc2OGVmOWExM2E2YzZkZTE2ZDFmOGQzYzhiYmZmN2E5Ny4uOTRkMDNk
ODVkNmRhOWY0Zjg4ZjhjZDEyZTRiZmZiZDMzYjRkYzU2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0NvbW1hbmRMaW5lQVBJSG9zdC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0NvbW1hbmRMaW5lQVBJSG9zdC5jcHAKQEAgLTczLDcgKzczLDcgQEAgdm9p
ZCBDb21tYW5kTGluZUFQSUhvc3Q6OmRpc2Nvbm5lY3QoKQogICAgIG1faW5zdHJ1bWVudGluZ0Fn
ZW50cyA9IG51bGxwdHI7CiB9CiAKLXZvaWQgQ29tbWFuZExpbmVBUElIb3N0OjppbnNwZWN0KEpT
Qzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSB2YWx1
ZVRvSW5zcGVjdCwgSlNDOjpKU1ZhbHVlIGhpbnRzVmFsdWUpCit2b2lkIENvbW1hbmRMaW5lQVBJ
SG9zdDo6aW5zcGVjdChKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBK
U0M6OkpTVmFsdWUgb2JqZWN0LCBKU0M6OkpTVmFsdWUgaGludHMpCiB7CiAgICAgaWYgKCFtX2lu
c3RydW1lbnRpbmdBZ2VudHMpCiAgICAgICAgIHJldHVybjsKQEAgLTgyLDEyICs4MiwyMCBAQCB2
b2lkIENvbW1hbmRMaW5lQVBJSG9zdDo6aW5zcGVjdChKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBKU0M6OgogICAgIGlmICghaW5zcGVjdG9yQWdlbnQpCiAgICAgICAg
IHJldHVybjsKIAotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IGhpbnRzT2JqZWN0OwotICAgIGlm
ICghSW5zcGVjdG9yOjp0b0luc3BlY3RvclZhbHVlKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCBoaW50
c1ZhbHVlKS0+YXNPYmplY3QoaGludHNPYmplY3QpKQorICAgIGF1dG8gb2JqZWN0VmFsdWUgPSBJ
bnNwZWN0b3I6OnRvSW5zcGVjdG9yVmFsdWUoJmxleGljYWxHbG9iYWxPYmplY3QsIG9iamVjdCk7
CisgICAgaWYgKCFvYmplY3RWYWx1ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byByZW1v
dGVPYmplY3QgPSBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJl
bW90ZU9iamVjdD46OnJ1bnRpbWVDYXN0KEluc3BlY3Rvcjo6dG9JbnNwZWN0b3JWYWx1ZSgmbGV4
aWNhbEdsb2JhbE9iamVjdCwgdmFsdWVUb0luc3BlY3QpKTsKLSAgICBpbnNwZWN0b3JBZ2VudC0+
aW5zcGVjdChXVEZNb3ZlKHJlbW90ZU9iamVjdCksIFdURk1vdmUoaGludHNPYmplY3QpKTsKKyAg
ICBhdXRvIGhpbnRzVmFsdWUgPSBJbnNwZWN0b3I6OnRvSW5zcGVjdG9yVmFsdWUoJmxleGljYWxH
bG9iYWxPYmplY3QsIGhpbnRzKTsKKyAgICBpZiAoIWhpbnRzVmFsdWUpCisgICAgICAgIHJldHVy
bjsKKworICAgIGF1dG8gaGludHNPYmplY3QgPSBoaW50c1ZhbHVlLT5hc09iamVjdCgpOworICAg
IGlmICghaGludHNPYmplY3QpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8gcmVtb3RlT2Jq
ZWN0ID0gUHJvdG9jb2w6OkJpbmRpbmdUcmFpdHM8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9i
amVjdD46OnJ1bnRpbWVDYXN0KG9iamVjdFZhbHVlLnJlbGVhc2VOb25OdWxsKCkpOworICAgIGlu
c3BlY3RvckFnZW50LT5pbnNwZWN0KFdURk1vdmUocmVtb3RlT2JqZWN0KSwgaGludHNPYmplY3Qu
cmVsZWFzZU5vbk51bGwoKSk7CiB9CiAKIENvbW1hbmRMaW5lQVBJSG9zdDo6RXZlbnRMaXN0ZW5l
cnNSZWNvcmQgQ29tbWFuZExpbmVBUElIb3N0OjpnZXRFdmVudExpc3RlbmVycyhKU0dsb2JhbE9i
amVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgRXZlbnRUYXJnZXQmIHRhcmdldCkKQEAgLTEzNiw4
ICsxNDQsNyBAQCB2b2lkIENvbW1hbmRMaW5lQVBJSG9zdDo6Y2xlYXJDb25zb2xlTWVzc2FnZXMo
KQogICAgIGlmICghY29uc29sZUFnZW50KQogICAgICAgICByZXR1cm47CiAKLSAgICBFcnJvclN0
cmluZyBpZ25vcmVkOwotICAgIGNvbnNvbGVBZ2VudC0+Y2xlYXJNZXNzYWdlcyhpZ25vcmVkKTsK
KyAgICBjb25zb2xlQWdlbnQtPmNsZWFyTWVzc2FnZXMoKTsKIH0KIAogdm9pZCBDb21tYW5kTGlu
ZUFQSUhvc3Q6OmNvcHlUZXh0KGNvbnN0IFN0cmluZyYgdGV4dCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBdWRpdFJlc291cmNlc09iamVjdC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQXVkaXRSZXNvdXJjZXNPYmplY3QuY3Bw
CmluZGV4IDAwMTQ4ZTBmZjQ5NDRhYmQwOTBiODM2ZWE5MzA1ZWNmNzQ4YzZmYTQuLmI3ZmYwZTEw
NGE1NTA2OTE2Y2NmYTlkMjMwYzhiMmJiYjM2M2RmM2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBdWRpdFJlc291cmNlc09iamVjdC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckF1ZGl0UmVzb3VyY2VzT2JqZWN0LmNwcApA
QCAtMTA1LDcgKzEwNSw3IEBAIEV4Y2VwdGlvbk9yPEluc3BlY3RvckF1ZGl0UmVzb3VyY2VzT2Jq
ZWN0OjpSZXNvdXJjZUNvbnRlbnQ+IEluc3BlY3RvckF1ZGl0UmVzb3VyCiAgICAgaWYgKCFjYWNo
ZWRSZXNvdXJjZSkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IE5vdEZvdW5kRXJyb3IsIG1h
a2VTdHJpbmcoIlVua25vd24gaWRlbnRpZmllciAiX3MsIGlkKSB9OwogCi0gICAgRXJyb3JTdHJp
bmcgZXJyb3JTdHJpbmc7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOwog
ICAgIFJlc291cmNlQ29udGVudCByZXNvdXJjZUNvbnRlbnQ7CiAgICAgSW5zcGVjdG9yUGFnZUFn
ZW50OjpyZXNvdXJjZUNvbnRlbnQoZXJyb3JTdHJpbmcsIGZyYW1lLCBjYWNoZWRSZXNvdXJjZS0+
dXJsKCksICZyZXNvdXJjZUNvbnRlbnQuZGF0YSwgJnJlc291cmNlQ29udGVudC5iYXNlNjRFbmNv
ZGVkKTsKICAgICBpZiAoIWVycm9yU3RyaW5nLmlzRW1wdHkoKSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDYW52YXMuY3BwIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckNhbnZhcy5jcHAKaW5kZXggNWM1N2I2MDU3NGVjYTU3MjJkMTU0
OTkyYWZkYmRjNzU1ZTYzMTk5Zi4uYTYxYjhlZWRhMDQxNmNmN2YxNTRhYTAxMWM4NjBjZThmYjBi
MzI1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNhbnZh
cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNhbnZhcy5jcHAK
QEAgLTM1NiwxMyArMzU2LDEzIEBAIHZvaWQgSW5zcGVjdG9yQ2FudmFzOjpyZWNvcmRBY3Rpb24o
Y29uc3QgU3RyaW5nJiBuYW1lLCBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8UmVjCiAgICAgfQogCiAg
ICAgaWYgKCFtX2ZyYW1lcykKLSAgICAgICAgbV9mcmFtZXMgPSBKU09OOjpBcnJheU9mPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlJlY29yZGluZzo6RnJhbWU+OjpjcmVhdGUoKTsKKyAgICAgICAgbV9m
cmFtZXMgPSBKU09OOjpBcnJheU9mPFByb3RvY29sOjpSZWNvcmRpbmc6OkZyYW1lPjo6Y3JlYXRl
KCk7CiAKICAgICBpZiAoIW1fY3VycmVudEFjdGlvbnMpIHsKICAgICAgICAgbV9jdXJyZW50QWN0
aW9ucyA9IEpTT046OkFycmF5T2Y8SlNPTjo6VmFsdWU+OjpjcmVhdGUoKTsKIAotICAgICAgICBh
dXRvIGZyYW1lID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6UmVjb3JkaW5nOjpGcmFtZTo6Y3JlYXRl
KCkKLSAgICAgICAgICAgIC5zZXRBY3Rpb25zKG1fY3VycmVudEFjdGlvbnMpCisgICAgICAgIGF1
dG8gZnJhbWUgPSBQcm90b2NvbDo6UmVjb3JkaW5nOjpGcmFtZTo6Y3JlYXRlKCkKKyAgICAgICAg
ICAgIC5zZXRBY3Rpb25zKCptX2N1cnJlbnRBY3Rpb25zKQogICAgICAgICAgICAgLnJlbGVhc2Uo
KTsKIAogICAgICAgICBtX2ZyYW1lcy0+YWRkSXRlbShXVEZNb3ZlKGZyYW1lKSk7CkBAIC0zNzUs
NyArMzc1LDcgQEAgdm9pZCBJbnNwZWN0b3JDYW52YXM6OnJlY29yZEFjdGlvbihjb25zdCBTdHJp
bmcmIG5hbWUsIHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxSZWMKIAogICAgIG1fbGFzdFJlY29yZGVk
QWN0aW9uID0gYnVpbGRBY3Rpb24obmFtZSwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7CiAgICAgbV9i
dWZmZXJVc2VkICs9IG1fbGFzdFJlY29yZGVkQWN0aW9uLT5tZW1vcnlDb3N0KCk7Ci0gICAgbV9j
dXJyZW50QWN0aW9ucy0+YWRkSXRlbShtX2xhc3RSZWNvcmRlZEFjdGlvbi5nZXQoKSk7CisgICAg
bV9jdXJyZW50QWN0aW9ucy0+YWRkSXRlbSgqbV9sYXN0UmVjb3JkZWRBY3Rpb24pOwogCiAgICAg
YXV0byogY29udGV4dCA9IGNhbnZhc0NvbnRleHQoKTsKICAgICBBU1NFUlQoY29udGV4dCk7CkBA
IC0zOTgsNyArMzk4LDcgQEAgdm9pZCBJbnNwZWN0b3JDYW52YXM6OmZpbmFsaXplRnJhbWUoKQog
ICAgIGFwcGVuZEFjdGlvblNuYXBzaG90SWZOZWVkZWQoKTsKIAogICAgIGlmIChtX2ZyYW1lcyAm
JiBtX2ZyYW1lcy0+bGVuZ3RoKCkgJiYgIXN0ZDo6aXNuYW4obV9jdXJyZW50RnJhbWVTdGFydFRp
bWUpKSB7Ci0gICAgICAgIGF1dG8gY3VycmVudEZyYW1lID0gc3RhdGljX2Nhc3Q8SW5zcGVjdG9y
OjpQcm90b2NvbDo6UmVjb3JkaW5nOjpGcmFtZSo+KG1fZnJhbWVzLT5nZXQobV9mcmFtZXMtPmxl
bmd0aCgpIC0gMSkuZ2V0KCkpOworICAgICAgICBhdXRvIGN1cnJlbnRGcmFtZSA9IHN0YXRpY19y
ZWZlcmVuY2VfY2FzdDxQcm90b2NvbDo6UmVjb3JkaW5nOjpGcmFtZT4obV9mcmFtZXMtPmdldCht
X2ZyYW1lcy0+bGVuZ3RoKCkgLSAxKSk7CiAgICAgICAgIGN1cnJlbnRGcmFtZS0+c2V0RHVyYXRp
b24oKE1vbm90b25pY1RpbWU6Om5vdygpIC0gbV9jdXJyZW50RnJhbWVTdGFydFRpbWUpLm1pbGxp
c2Vjb25kcygpKTsKIAogICAgICAgICBtX2N1cnJlbnRGcmFtZVN0YXJ0VGltZSA9IE1vbm90b25p
Y1RpbWU6Om5hbigpOwpAQCAtNDEyLDcgKzQxMiw4IEBAIHZvaWQgSW5zcGVjdG9yQ2FudmFzOjpt
YXJrQ3VycmVudEZyYW1lSW5jb21wbGV0ZSgpCiAgICAgaWYgKCFtX2N1cnJlbnRBY3Rpb25zIHx8
ICFtX2ZyYW1lcyB8fCAhbV9mcmFtZXMtPmxlbmd0aCgpKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBzdGF0aWNfY2FzdDxJbnNwZWN0b3I6OlByb3RvY29sOjpSZWNvcmRpbmc6OkZyYW1lKj4obV9m
cmFtZXMtPmdldChtX2ZyYW1lcy0+bGVuZ3RoKCkgLSAxKS5nZXQoKSktPnNldEluY29tcGxldGUo
dHJ1ZSk7CisgICAgYXV0byBjdXJyZW50RnJhbWUgPSBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8UHJv
dG9jb2w6OlJlY29yZGluZzo6RnJhbWU+KG1fZnJhbWVzLT5nZXQobV9mcmFtZXMtPmxlbmd0aCgp
IC0gMSkpOworICAgIGN1cnJlbnRGcmFtZS0+c2V0SW5jb21wbGV0ZSh0cnVlKTsKIH0KIAogdm9p
ZCBJbnNwZWN0b3JDYW52YXM6OnNldEJ1ZmZlckxpbWl0KGxvbmcgbWVtb3J5TGltaXQpCkBAIC00
MzgsMjkgKzQzOSwyOSBAQCBib29sIEluc3BlY3RvckNhbnZhczo6b3ZlckZyYW1lQ291bnQoKSBj
b25zdAogICAgIHJldHVybiBtX2ZyYW1lQ291bnQgJiYgbV9mcmFtZXNDYXB0dXJlZCA+PSBtX2Zy
YW1lQ291bnQudmFsdWUoKTsKIH0KIAotUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6
Q2FudmFzPiBJbnNwZWN0b3JDYW52YXM6OmJ1aWxkT2JqZWN0Rm9yQ2FudmFzKGJvb2wgY2FwdHVy
ZUJhY2t0cmFjZSkKK1JlZjxQcm90b2NvbDo6Q2FudmFzOjpDYW52YXM+IEluc3BlY3RvckNhbnZh
czo6YnVpbGRPYmplY3RGb3JDYW52YXMoYm9vbCBjYXB0dXJlQmFja3RyYWNlKQogewotICAgIHVz
aW5nIENvbnRleHRUeXBlVHlwZSA9IE9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZh
czo6Q29udGV4dFR5cGU+OworICAgIHVzaW5nIENvbnRleHRUeXBlVHlwZSA9IE9wdGlvbmFsPFBy
b3RvY29sOjpDYW52YXM6OkNvbnRleHRUeXBlPjsKICAgICBhdXRvIGNvbnRleHRUeXBlID0gV1RG
Ojpzd2l0Y2hPbihtX2NvbnRleHQsCiAgICAgICAgIFtdIChzdGQ6OnJlZmVyZW5jZV93cmFwcGVy
PENhbnZhc1JlbmRlcmluZ0NvbnRleHQ+IGNvbnRleHRXcmFwcGVyKSAtPiBDb250ZXh0VHlwZVR5
cGUgewogICAgICAgICAgICAgYXV0byYgY29udGV4dCA9IGNvbnRleHRXcmFwcGVyLmdldCgpOwog
ICAgICAgICAgICAgaWYgKGlzPENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4oY29udGV4dCkpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6Q29udGV4
dFR5cGU6OkNhbnZhczJEOworICAgICAgICAgICAgICAgIHJldHVybiBQcm90b2NvbDo6Q2FudmFz
OjpDb250ZXh0VHlwZTo6Q2FudmFzMkQ7CiAgICAgICAgICAgICBpZiAoaXM8SW1hZ2VCaXRtYXBS
ZW5kZXJpbmdDb250ZXh0Pihjb250ZXh0KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gSW5zcGVj
dG9yOjpQcm90b2NvbDo6Q2FudmFzOjpDb250ZXh0VHlwZTo6Qml0bWFwUmVuZGVyZXI7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIFByb3RvY29sOjpDYW52YXM6OkNvbnRleHRUeXBlOjpCaXRtYXBS
ZW5kZXJlcjsKICNpZiBFTkFCTEUoV0VCR0wpCiAgICAgICAgICAgICBpZiAoaXM8V2ViR0xSZW5k
ZXJpbmdDb250ZXh0Pihjb250ZXh0KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gSW5zcGVjdG9y
OjpQcm90b2NvbDo6Q2FudmFzOjpDb250ZXh0VHlwZTo6V2ViR0w7CisgICAgICAgICAgICAgICAg
cmV0dXJuIFByb3RvY29sOjpDYW52YXM6OkNvbnRleHRUeXBlOjpXZWJHTDsKICNlbmRpZgogI2lm
IEVOQUJMRShXRUJHTDIpCiAgICAgICAgICAgICBpZiAoaXM8V2ViR0wyUmVuZGVyaW5nQ29udGV4
dD4oY29udGV4dCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkNhbnZhczo6Q29udGV4dFR5cGU6OldlYkdMMjsKKyAgICAgICAgICAgICAgICByZXR1cm4gUHJv
dG9jb2w6OkNhbnZhczo6Q29udGV4dFR5cGU6OldlYkdMMjsKICNlbmRpZgogICAgICAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAgICAgfSwKICNpZiBFTkFCTEUoV0VCR1BVKQogICAg
ICAgICBbXSAoc3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxXZWJHUFVEZXZpY2U+KSB7Ci0gICAgICAg
ICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q2FudmFzOjpDb250ZXh0VHlwZTo6V2Vi
R1BVOworICAgICAgICAgICAgcmV0dXJuIFByb3RvY29sOjpDYW52YXM6OkNvbnRleHRUeXBlOjpX
ZWJHUFU7CiAgICAgICAgIH0sCiAjZW5kaWYKICAgICAgICAgW10gKE1vbm9zdGF0ZSkgewpAQCAt
NDcwLDEwICs0NzEsMTAgQEAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6Q2FudmFz
PiBJbnNwZWN0b3JDYW52YXM6OmJ1aWxkT2JqZWN0Rm9yQ2FudmFzKGIKICAgICApOwogICAgIGlm
ICghY29udGV4dFR5cGUpIHsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAg
IGNvbnRleHRUeXBlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q2FudmFzOjpDb250ZXh0VHlwZTo6
Q2FudmFzMkQ7CisgICAgICAgIGNvbnRleHRUeXBlID0gUHJvdG9jb2w6OkNhbnZhczo6Q29udGV4
dFR5cGU6OkNhbnZhczJEOwogICAgIH0KIAotICAgIGF1dG8gY2FudmFzID0gSW5zcGVjdG9yOjpQ
cm90b2NvbDo6Q2FudmFzOjpDYW52YXM6OmNyZWF0ZSgpCisgICAgYXV0byBjYW52YXMgPSBQcm90
b2NvbDo6Q2FudmFzOjpDYW52YXM6OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRDYW52YXNJZChtX2lk
ZW50aWZpZXIpCiAgICAgICAgIC5zZXRDb250ZXh0VHlwZShjb250ZXh0VHlwZS52YWx1ZSgpKQog
ICAgICAgICAucmVsZWFzZSgpOwpAQCAtNDg2LDEyICs0ODcsMTIgQEAgUmVmPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkNhbnZhczo6Q2FudmFzPiBJbnNwZWN0b3JDYW52YXM6OmJ1aWxkT2JqZWN0Rm9y
Q2FudmFzKGIKICAgICAgICAgLy8gRklYTUU6IDxodHRwczovL3dlYmtpdC5vcmcvYi8xNzgyODI+
IFdlYiBJbnNwZWN0b3I6IHNlbmQgYSBET00gbm9kZSB3aXRoIGVhY2ggQ2FudmFzIHBheWxvYWQg
YW5kIGVsaW1pbmF0ZSBDYW52YXMucmVxdWVzdE5vZGUKICAgICB9CiAKLSAgICB1c2luZyBDb250
ZXh0QXR0cmlidXRlc1R5cGUgPSBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q2FudmFzOjpD
b250ZXh0QXR0cmlidXRlcz47CisgICAgdXNpbmcgQ29udGV4dEF0dHJpYnV0ZXNUeXBlID0gUmVm
UHRyPFByb3RvY29sOjpDYW52YXM6OkNvbnRleHRBdHRyaWJ1dGVzPjsKICAgICBhdXRvIGNvbnRl
eHRBdHRyaWJ1dGVzID0gV1RGOjpzd2l0Y2hPbihtX2NvbnRleHQsCiAgICAgICAgIFtdIChzdGQ6
OnJlZmVyZW5jZV93cmFwcGVyPENhbnZhc1JlbmRlcmluZ0NvbnRleHQ+IGNvbnRleHRXcmFwcGVy
KSAtPiBDb250ZXh0QXR0cmlidXRlc1R5cGUgewogICAgICAgICAgICAgYXV0byYgY29udGV4dCA9
IGNvbnRleHRXcmFwcGVyLmdldCgpOwogICAgICAgICAgICAgaWYgKGlzPEltYWdlQml0bWFwUmVu
ZGVyaW5nQ29udGV4dD4oY29udGV4dCkpIHsKLSAgICAgICAgICAgICAgICBhdXRvIGNvbnRleHRB
dHRyaWJ1dGVzUGF5bG9hZCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6Q29udGV4dEF0
dHJpYnV0ZXM6OmNyZWF0ZSgpCisgICAgICAgICAgICAgICAgYXV0byBjb250ZXh0QXR0cmlidXRl
c1BheWxvYWQgPSBQcm90b2NvbDo6Q2FudmFzOjpDb250ZXh0QXR0cmlidXRlczo6Y3JlYXRlKCkK
ICAgICAgICAgICAgICAgICAgICAgLnJlbGVhc2UoKTsKICAgICAgICAgICAgICAgICBjb250ZXh0
QXR0cmlidXRlc1BheWxvYWQtPnNldEFscGhhKGRvd25jYXN0PEltYWdlQml0bWFwUmVuZGVyaW5n
Q29udGV4dD4oY29udGV4dCkuaGFzQWxwaGEoKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGNv
bnRleHRBdHRyaWJ1dGVzUGF5bG9hZDsKQEAgLTUwMCw3ICs1MDEsNyBAQCBSZWY8SW5zcGVjdG9y
OjpQcm90b2NvbDo6Q2FudmFzOjpDYW52YXM+IEluc3BlY3RvckNhbnZhczo6YnVpbGRPYmplY3RG
b3JDYW52YXMoYgogI2lmIEVOQUJMRShXRUJHTCkKICAgICAgICAgICAgIGlmIChpczxXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlPihjb250ZXh0KSkgewogICAgICAgICAgICAgICAgIGlmIChjb25z
dCBhdXRvJiBhdHRyaWJ1dGVzID0gZG93bmNhc3Q8V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZT4o
Y29udGV4dCkuZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKSkgewotICAgICAgICAgICAgICAgICAgICBh
dXRvIGNvbnRleHRBdHRyaWJ1dGVzUGF5bG9hZCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZh
czo6Q29udGV4dEF0dHJpYnV0ZXM6OmNyZWF0ZSgpCisgICAgICAgICAgICAgICAgICAgIGF1dG8g
Y29udGV4dEF0dHJpYnV0ZXNQYXlsb2FkID0gUHJvdG9jb2w6OkNhbnZhczo6Q29udGV4dEF0dHJp
YnV0ZXM6OmNyZWF0ZSgpCiAgICAgICAgICAgICAgICAgICAgICAgICAucmVsZWFzZSgpOwogICAg
ICAgICAgICAgICAgICAgICBjb250ZXh0QXR0cmlidXRlc1BheWxvYWQtPnNldEFscGhhKGF0dHJp
YnV0ZXMtPmFscGhhKTsKICAgICAgICAgICAgICAgICAgICAgY29udGV4dEF0dHJpYnV0ZXNQYXls
b2FkLT5zZXREZXB0aChhdHRyaWJ1dGVzLT5kZXB0aCk7CkBAIC01MzAsNyArNTMxLDcgQEAgUmVm
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6Q2FudmFzPiBJbnNwZWN0b3JDYW52YXM6OmJ1
aWxkT2JqZWN0Rm9yQ2FudmFzKGIKICAgICAgICAgW10gKHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8
V2ViR1BVRGV2aWNlPiBkZXZpY2VXcmFwcGVyKSAtPiBDb250ZXh0QXR0cmlidXRlc1R5cGUgewog
ICAgICAgICAgICAgYXV0byYgZGV2aWNlID0gZGV2aWNlV3JhcHBlci5nZXQoKTsKICAgICAgICAg
ICAgIGlmIChjb25zdCBhdXRvJiBvcHRpb25zID0gZGV2aWNlLmFkYXB0ZXIoKS5vcHRpb25zKCkp
IHsKLSAgICAgICAgICAgICAgICBhdXRvIGNvbnRleHRBdHRyaWJ1dGVzUGF5bG9hZCA9IEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6Q29udGV4dEF0dHJpYnV0ZXM6OmNyZWF0ZSgpCisgICAg
ICAgICAgICAgICAgYXV0byBjb250ZXh0QXR0cmlidXRlc1BheWxvYWQgPSBQcm90b2NvbDo6Q2Fu
dmFzOjpDb250ZXh0QXR0cmlidXRlczo6Y3JlYXRlKCkKICAgICAgICAgICAgICAgICAgICAgLnJl
bGVhc2UoKTsKICAgICAgICAgICAgICAgICBpZiAoY29uc3QgYXV0byYgcG93ZXJQcmVmZXJlbmNl
ID0gb3B0aW9ucy0+cG93ZXJQcmVmZXJlbmNlKSB7CiAgICAgICAgICAgICAgICAgICAgIHN3aXRj
aCAocG93ZXJQcmVmZXJlbmNlLnZhbHVlKCkpIHsKQEAgLTU1NCw3ICs1NTUsNyBAQCBSZWY8SW5z
cGVjdG9yOjpQcm90b2NvbDo6Q2FudmFzOjpDYW52YXM+IEluc3BlY3RvckNhbnZhczo6YnVpbGRP
YmplY3RGb3JDYW52YXMoYgogICAgICAgICB9CiAgICAgKTsKICAgICBpZiAoY29udGV4dEF0dHJp
YnV0ZXMpCi0gICAgICAgIGNhbnZhcy0+c2V0Q29udGV4dEF0dHJpYnV0ZXMoV1RGTW92ZShjb250
ZXh0QXR0cmlidXRlcykpOworICAgICAgICBjYW52YXMtPnNldENvbnRleHRBdHRyaWJ1dGVzKGNv
bnRleHRBdHRyaWJ1dGVzLnJlbGVhc2VOb25OdWxsKCkpOwogCiAgICAgLy8gRklYTUU6IDxodHRw
czovL3dlYmtpdC5vcmcvYi8xODA4MzM+IFdlYiBJbnNwZWN0b3I6IHN1cHBvcnQgT2Zmc2NyZWVu
Q2FudmFzIGZvciBDYW52YXMgcmVsYXRlZCBvcGVyYXRpb25zCiAKQEAgLTU3MSw3ICs1NzIsNyBA
QCBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q2FudmFzOjpDYW52YXM+IEluc3BlY3RvckNhbnZh
czo6YnVpbGRPYmplY3RGb3JDYW52YXMoYgogICAgIHJldHVybiBjYW52YXM7CiB9CiAKLVJlZjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpSZWNvcmRpbmc6OlJlY29yZGluZz4gSW5zcGVjdG9yQ2FudmFz
OjpyZWxlYXNlT2JqZWN0Rm9yUmVjb3JkaW5nKCkKK1JlZjxQcm90b2NvbDo6UmVjb3JkaW5nOjpS
ZWNvcmRpbmc+IEluc3BlY3RvckNhbnZhczo6cmVsZWFzZU9iamVjdEZvclJlY29yZGluZygpCiB7
CiAgICAgQVNTRVJUKCFtX2N1cnJlbnRBY3Rpb25zKTsKICAgICBBU1NFUlQoIW1fbGFzdFJlY29y
ZGVkQWN0aW9uKTsKQEAgLTU4MSwyNiArNTgyLDI2IEBAIFJlZjxJbnNwZWN0b3I6OlByb3RvY29s
OjpSZWNvcmRpbmc6OlJlY29yZGluZz4gSW5zcGVjdG9yQ2FudmFzOjpyZWxlYXNlT2JqZWN0Rm9y
CiAgICAgQVNTRVJUKGNvbnRleHQpOwogICAgIC8vIEZJWE1FOiA8aHR0cHM6Ly93ZWJraXQub3Jn
L2IvMjAxNjUxPiBXZWIgSW5zcGVjdG9yOiBDYW52YXM6IHN1cHBvcnQgY2FudmFzIHJlY29yZGlu
Z3MgZm9yIFdlYkdQVURldmljZQogCi0gICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6UmVjb3JkaW5n
OjpUeXBlIHR5cGU7CisgICAgUHJvdG9jb2w6OlJlY29yZGluZzo6VHlwZSB0eXBlOwogICAgIGlm
IChpczxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KGNvbnRleHQpKQotICAgICAgICB0eXBlID0g
SW5zcGVjdG9yOjpQcm90b2NvbDo6UmVjb3JkaW5nOjpUeXBlOjpDYW52YXMyRDsKKyAgICAgICAg
dHlwZSA9IFByb3RvY29sOjpSZWNvcmRpbmc6OlR5cGU6OkNhbnZhczJEOwogICAgIGVsc2UgaWYg
KGlzPEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dD4oY29udGV4dCkpCi0gICAgICAgIHR5cGUg
PSBJbnNwZWN0b3I6OlByb3RvY29sOjpSZWNvcmRpbmc6OlR5cGU6OkNhbnZhc0JpdG1hcFJlbmRl
cmVyOworICAgICAgICB0eXBlID0gUHJvdG9jb2w6OlJlY29yZGluZzo6VHlwZTo6Q2FudmFzQml0
bWFwUmVuZGVyZXI7CiAjaWYgRU5BQkxFKFdFQkdMKQogICAgIGVsc2UgaWYgKGlzPFdlYkdMUmVu
ZGVyaW5nQ29udGV4dD4oY29udGV4dCkpCi0gICAgICAgIHR5cGUgPSBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpSZWNvcmRpbmc6OlR5cGU6OkNhbnZhc1dlYkdMOworICAgICAgICB0eXBlID0gUHJvdG9j
b2w6OlJlY29yZGluZzo6VHlwZTo6Q2FudmFzV2ViR0w7CiAjZW5kaWYKICNpZiBFTkFCTEUoV0VC
R0wyKQogICAgIGVsc2UgaWYgKGlzPFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ+KGNvbnRleHQpKQot
ICAgICAgICB0eXBlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6UmVjb3JkaW5nOjpUeXBlOjpDYW52
YXNXZWJHTDI7CisgICAgICAgIHR5cGUgPSBQcm90b2NvbDo6UmVjb3JkaW5nOjpUeXBlOjpDYW52
YXNXZWJHTDI7CiAjZW5kaWYKICAgICBlbHNlIHsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0gICAgICAgIHR5cGUgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpSZWNvcmRpbmc6OlR5cGU6
OkNhbnZhczJEOworICAgICAgICB0eXBlID0gUHJvdG9jb2w6OlJlY29yZGluZzo6VHlwZTo6Q2Fu
dmFzMkQ7CiAgICAgfQogCi0gICAgYXV0byByZWNvcmRpbmcgPSBJbnNwZWN0b3I6OlByb3RvY29s
OjpSZWNvcmRpbmc6OlJlY29yZGluZzo6Y3JlYXRlKCkKLSAgICAgICAgLnNldFZlcnNpb24oSW5z
cGVjdG9yOjpQcm90b2NvbDo6UmVjb3JkaW5nOjpWRVJTSU9OKQorICAgIGF1dG8gcmVjb3JkaW5n
ID0gUHJvdG9jb2w6OlJlY29yZGluZzo6UmVjb3JkaW5nOjpjcmVhdGUoKQorICAgICAgICAuc2V0
VmVyc2lvbihQcm90b2NvbDo6UmVjb3JkaW5nOjpWRVJTSU9OKQogICAgICAgICAuc2V0VHlwZSh0
eXBlKQogICAgICAgICAuc2V0SW5pdGlhbFN0YXRlKG1faW5pdGlhbFN0YXRlLnJlbGVhc2VOb25O
dWxsKCkpCiAgICAgICAgIC5zZXREYXRhKG1fc2VyaWFsaXplZER1cGxpY2F0ZURhdGEucmVsZWFz
ZU5vbk51bGwoKSkKQEAgLTYxNCw3ICs2MTUsNyBAQCBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6
UmVjb3JkaW5nOjpSZWNvcmRpbmc+IEluc3BlY3RvckNhbnZhczo6cmVsZWFzZU9iamVjdEZvcgog
ICAgIHJldHVybiByZWNvcmRpbmc7CiB9CiAKLVN0cmluZyBJbnNwZWN0b3JDYW52YXM6OmdldENh
bnZhc0NvbnRlbnRBc0RhdGFVUkwoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nKQorU3RyaW5nIElu
c3BlY3RvckNhbnZhczo6Z2V0Q2FudmFzQ29udGVudEFzRGF0YVVSTChQcm90b2NvbDo6RXJyb3JT
dHJpbmcmIGVycm9yU3RyaW5nKQogewogICAgIGF1dG8qIG5vZGUgPSBjYW52YXNFbGVtZW50KCk7
CiAgICAgaWYgKCFub2RlKSB7CkBAIC02NTEsNyArNjUyLDcgQEAgdm9pZCBJbnNwZWN0b3JDYW52
YXM6OmFwcGVuZEFjdGlvblNuYXBzaG90SWZOZWVkZWQoKQogICAgIGlmIChtX2NvbnRlbnRDaGFu
Z2VkKSB7CiAgICAgICAgIG1fYnVmZmVyVXNlZCAtPSBtX2xhc3RSZWNvcmRlZEFjdGlvbi0+bWVt
b3J5Q29zdCgpOwogCi0gICAgICAgIEVycm9yU3RyaW5nIGlnbm9yZWQ7CisgICAgICAgIFByb3Rv
Y29sOjpFcnJvclN0cmluZyBpZ25vcmVkOwogICAgICAgICBtX2xhc3RSZWNvcmRlZEFjdGlvbi0+
YWRkSXRlbShpbmRleEZvckRhdGEoZ2V0Q2FudmFzQ29udGVudEFzRGF0YVVSTChpZ25vcmVkKSkp
OwogCiAgICAgICAgIG1fYnVmZmVyVXNlZCArPSBtX2xhc3RSZWNvcmRlZEFjdGlvbi0+bWVtb3J5
Q29zdCgpOwpAQCAtNzc1LDcgKzc3Niw3IEBAIGludCBJbnNwZWN0b3JDYW52YXM6OmluZGV4Rm9y
RGF0YShEdXBsaWNhdGVEYXRhVmFyaWFudCBkYXRhKQogCiAgICAgaWYgKGl0ZW0pIHsKICAgICAg
ICAgbV9idWZmZXJVc2VkICs9IGl0ZW0tPm1lbW9yeUNvc3QoKTsKLSAgICAgICAgbV9zZXJpYWxp
emVkRHVwbGljYXRlRGF0YS0+YWRkSXRlbShXVEZNb3ZlKGl0ZW0pKTsKKyAgICAgICAgbV9zZXJp
YWxpemVkRHVwbGljYXRlRGF0YS0+YWRkSXRlbShpdGVtLnJlbGVhc2VOb25OdWxsKCkpOwogCiAg
ICAgICAgIG1faW5kZXhlZER1cGxpY2F0ZURhdGEuYXBwZW5kKGRhdGEpOwogICAgICAgICBpbmRl
eCA9IG1faW5kZXhlZER1cGxpY2F0ZURhdGEuc2l6ZSgpIC0gMTsKQEAgLTgxMCwxMyArODExLDEz
IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0YXRpYyBSZWY8SlNPTjo6QXJyYXlPZjxKU09OOjpW
YWx1ZT4+IGJ1aWxkQXJyYXlGb3JWZWN0b3IoCiAgICAgcmV0dXJuIGFycmF5OwogfQogCi1SZWY8
SW5zcGVjdG9yOjpQcm90b2NvbDo6UmVjb3JkaW5nOjpJbml0aWFsU3RhdGU+IEluc3BlY3RvckNh
bnZhczo6YnVpbGRJbml0aWFsU3RhdGUoKQorUmVmPFByb3RvY29sOjpSZWNvcmRpbmc6OkluaXRp
YWxTdGF0ZT4gSW5zcGVjdG9yQ2FudmFzOjpidWlsZEluaXRpYWxTdGF0ZSgpCiB7CiAgICAgYXV0
byogY29udGV4dCA9IGNhbnZhc0NvbnRleHQoKTsKICAgICBBU1NFUlQoY29udGV4dCk7CiAgICAg
Ly8gRklYTUU6IDxodHRwczovL3dlYmtpdC5vcmcvYi8yMDE2NTE+IFdlYiBJbnNwZWN0b3I6IENh
bnZhczogc3VwcG9ydCBjYW52YXMgcmVjb3JkaW5ncyBmb3IgV2ViR1BVRGV2aWNlCiAKLSAgICBh
dXRvIGluaXRpYWxTdGF0ZVBheWxvYWQgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpSZWNvcmRpbmc6
OkluaXRpYWxTdGF0ZTo6Y3JlYXRlKCkucmVsZWFzZSgpOworICAgIGF1dG8gaW5pdGlhbFN0YXRl
UGF5bG9hZCA9IFByb3RvY29sOjpSZWNvcmRpbmc6OkluaXRpYWxTdGF0ZTo6Y3JlYXRlKCkucmVs
ZWFzZSgpOwogCiAgICAgYXV0byBhdHRyaWJ1dGVzUGF5bG9hZCA9IEpTT046Ok9iamVjdDo6Y3Jl
YXRlKCk7CiAgICAgYXR0cmlidXRlc1BheWxvYWQtPnNldEludGVnZXIoIndpZHRoIl9zLCBjb250
ZXh0LT5jYW52YXNCYXNlKCkud2lkdGgoKSk7CkBAIC05MDgsNyArOTA5LDcgQEAgUmVmPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlJlY29yZGluZzo6SW5pdGlhbFN0YXRlPiBJbnNwZWN0b3JDYW52YXM6
OmJ1aWxkSW5pdGlhbFMKICAgICBpZiAocGFyYW1ldGVyc1BheWxvYWQtPmxlbmd0aCgpKQogICAg
ICAgICBpbml0aWFsU3RhdGVQYXlsb2FkLT5zZXRQYXJhbWV0ZXJzKFdURk1vdmUocGFyYW1ldGVy
c1BheWxvYWQpKTsKIAotICAgIEVycm9yU3RyaW5nIGlnbm9yZWQ7CisgICAgUHJvdG9jb2w6OkVy
cm9yU3RyaW5nIGlnbm9yZWQ7CiAgICAgaW5pdGlhbFN0YXRlUGF5bG9hZC0+c2V0Q29udGVudChn
ZXRDYW52YXNDb250ZW50QXNEYXRhVVJMKGlnbm9yZWQpKTsKIAogICAgIHJldHVybiBpbml0aWFs
U3RhdGVQYXlsb2FkOwpAQCAtOTQ2LDcgKzk0Nyw3IEBAIFJlZjxKU09OOjpBcnJheU9mPEpTT046
OlZhbHVlPj4gSW5zcGVjdG9yQ2FudmFzOjpidWlsZEFjdGlvbihjb25zdCBTdHJpbmcmIG5hbWUs
CiAgICAgICAgICAgICAgICAgYXJyYXktPmFkZEl0ZW0odmFsdWUuZC52YWx1ZU9yKDEpKTsKICAg
ICAgICAgICAgICAgICBhcnJheS0+YWRkSXRlbSh2YWx1ZS5lLnZhbHVlT3IoMCkpOwogICAgICAg
ICAgICAgICAgIGFycmF5LT5hZGRJdGVtKHZhbHVlLmYudmFsdWVPcigwKSk7Ci0gICAgICAgICAg
ICAgICAgYWRkUGFyYW1ldGVyKGFycmF5LnB0cigpLCBSZWNvcmRpbmdTd2l6emxlVHlwZXM6OkRP
TU1hdHJpeCk7CisgICAgICAgICAgICAgICAgYWRkUGFyYW1ldGVyKFdURk1vdmUoYXJyYXkpLCBS
ZWNvcmRpbmdTd2l6emxlVHlwZXM6OkRPTU1hdHJpeCk7CiAgICAgICAgICAgICB9LAogICAgICAg
ICAgICAgWyZdIChjb25zdCBFbGVtZW50KiB2YWx1ZSkgewogICAgICAgICAgICAgICAgIGlmICh2
YWx1ZSkgewpAQCAtMTEwNiwxNiArMTEwNywxNiBAQCBSZWY8SlNPTjo6QXJyYXlPZjxKU09OOjpW
YWx1ZT4+IEluc3BlY3RvckNhbnZhczo6YnVpbGRBY3Rpb24oY29uc3QgU3RyaW5nJiBuYW1lLAog
ICAgICAgICAgICAgICAgIGF1dG8gZGVkdXBsaWNhdGVkID0gdmFsdWUubWFwKFsmXSAoY29uc3Qg
U3RyaW5nJiBpdGVtKSB7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbmRleEZvckRhdGEo
aXRlbSk7CiAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgYWRkUGFyYW1ldGVy
KGJ1aWxkQXJyYXlGb3JWZWN0b3IoZGVkdXBsaWNhdGVkKS5wdHIoKSwgUmVjb3JkaW5nU3dpenps
ZVR5cGVzOjpTdHJpbmcpOworICAgICAgICAgICAgICAgIGFkZFBhcmFtZXRlcihidWlsZEFycmF5
Rm9yVmVjdG9yKGRlZHVwbGljYXRlZCksIFJlY29yZGluZ1N3aXp6bGVUeXBlczo6U3RyaW5nKTsK
ICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBbJl0gKGNvbnN0IFZlY3RvcjxmbG9hdD4mIHZh
bHVlKSB7IGFkZFBhcmFtZXRlcihidWlsZEFycmF5Rm9yVmVjdG9yKHZhbHVlKS5wdHIoKSwgUmVj
b3JkaW5nU3dpenpsZVR5cGVzOjpBcnJheSk7IH0sCisgICAgICAgICAgICBbJl0gKGNvbnN0IFZl
Y3RvcjxmbG9hdD4mIHZhbHVlKSB7IGFkZFBhcmFtZXRlcihidWlsZEFycmF5Rm9yVmVjdG9yKHZh
bHVlKSwgUmVjb3JkaW5nU3dpenpsZVR5cGVzOjpBcnJheSk7IH0sCiAgICAgICAgICAgICBbJl0g
KGNvbnN0IFZlY3Rvcjx1aW50MzJfdD4mIHZhbHVlKSB7CiAgICAgICAgICAgICAgICAgYXV0byBt
YXBwZWQgPSB2YWx1ZS5tYXAoWyZdICh1aW50MzJfdCBpdGVtKSB7CiAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxkb3VibGU+KGl0ZW0pOwogICAgICAgICAgICAgICAgIH0p
OwotICAgICAgICAgICAgICAgIGFkZFBhcmFtZXRlcihidWlsZEFycmF5Rm9yVmVjdG9yKG1hcHBl
ZCkucHRyKCksIFJlY29yZGluZ1N3aXp6bGVUeXBlczo6QXJyYXkpOworICAgICAgICAgICAgICAg
IGFkZFBhcmFtZXRlcihidWlsZEFycmF5Rm9yVmVjdG9yKG1hcHBlZCksIFJlY29yZGluZ1N3aXp6
bGVUeXBlczo6QXJyYXkpOwogICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIFsmXSAoY29uc3Qg
VmVjdG9yPGludDMyX3Q+JiB2YWx1ZSkgeyBhZGRQYXJhbWV0ZXIoYnVpbGRBcnJheUZvclZlY3Rv
cih2YWx1ZSkucHRyKCksIFJlY29yZGluZ1N3aXp6bGVUeXBlczo6QXJyYXkpOyB9LAorICAgICAg
ICAgICAgWyZdIChjb25zdCBWZWN0b3I8aW50MzJfdD4mIHZhbHVlKSB7IGFkZFBhcmFtZXRlcihi
dWlsZEFycmF5Rm9yVmVjdG9yKHZhbHVlKSwgUmVjb3JkaW5nU3dpenpsZVR5cGVzOjpBcnJheSk7
IH0sCiAjaWYgRU5BQkxFKFdFQkdMKQogICAgICAgICAgICAgWyZdIChjb25zdCBXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjpGbG9hdDMyTGlzdDo6VmFyaWFudFR5cGUmIHZhbHVlKSB7CiAgICAg
ICAgICAgICAgICAgV1RGOjp2aXNpdChwYXJzZVBhcmFtZXRlciwgdmFsdWUpOwpAQCAtMTE1OSw3
ICsxMTYwLDcgQEAgUmVmPEpTT046OkFycmF5T2Y8SlNPTjo6VmFsdWU+PiBJbnNwZWN0b3JDYW52
YXM6OmJ1aWxkQWN0aW9uKGNvbnN0IFN0cmluZyYgbmFtZSwKIFJlZjxKU09OOjpBcnJheU9mPEpT
T046OlZhbHVlPj4gSW5zcGVjdG9yQ2FudmFzOjpidWlsZEFycmF5Rm9yQ2FudmFzR3JhZGllbnQo
Y29uc3QgQ2FudmFzR3JhZGllbnQmIGNhbnZhc0dyYWRpZW50KQogewogICAgIEFTQ0lJTGl0ZXJh
bCB0eXBlID0gImxpbmVhci1ncmFkaWVudCJfczsKLSAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU09O
OjpBcnJheU9mPGZsb2F0Pjo6Y3JlYXRlKCk7CisgICAgYXV0byBwYXJhbWV0ZXJzID0gSlNPTjo6
QXJyYXlPZjxkb3VibGU+OjpjcmVhdGUoKTsKICAgICBXVEY6OnN3aXRjaE9uKGNhbnZhc0dyYWRp
ZW50LmdyYWRpZW50KCkuZGF0YSgpLAogICAgICAgICBbJl0gKGNvbnN0IEdyYWRpZW50OjpMaW5l
YXJEYXRhJiBkYXRhKSB7CiAgICAgICAgICAgICBwYXJhbWV0ZXJzLT5hZGRJdGVtKGRhdGEucG9p
bnQwLngoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
Q2FudmFzLmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzLmgKaW5k
ZXggNzhjYjZhOGEzYjhhYjc4MGU5NWZiM2ZhZWQzYWJjNTk0ZDE0NjU5OC4uYjI3YmM4ZDQ5MjM5
MTE3YmVlNTI1ZDVmZTZhYzI2ZTJkNjE2YjVjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckNhbnZhcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JDYW52YXMuaApAQCAtNTgsOCArNTgsNiBAQCBjbGFzcyBPZmZzY3JlZW5DYW52
YXM7CiBjbGFzcyBUeXBlZE9NQ1NTSW1hZ2VWYWx1ZTsKICNlbmRpZgogCi10eXBlZGVmIFN0cmlu
ZyBFcnJvclN0cmluZzsKLQogY2xhc3MgSW5zcGVjdG9yQ2FudmFzIGZpbmFsIDogcHVibGljIFJl
ZkNvdW50ZWQ8SW5zcGVjdG9yQ2FudmFzPiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxJbnNw
ZWN0b3JDYW52YXM+IGNyZWF0ZShDYW52YXNSZW5kZXJpbmdDb250ZXh0Jik7CkBAIC0xMDcsNyAr
MTA1LDcgQEAgcHVibGljOgogICAgIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDYW52YXM6OkNh
bnZhcz4gYnVpbGRPYmplY3RGb3JDYW52YXMoYm9vbCBjYXB0dXJlQmFja3RyYWNlKTsKICAgICBS
ZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6UmVjb3JkaW5nOjpSZWNvcmRpbmc+IHJlbGVhc2VPYmpl
Y3RGb3JSZWNvcmRpbmcoKTsKIAotICAgIFN0cmluZyBnZXRDYW52YXNDb250ZW50QXNEYXRhVVJM
KEVycm9yU3RyaW5nJik7CisgICAgU3RyaW5nIGdldENhbnZhc0NvbnRlbnRBc0RhdGFVUkwoSW5z
cGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmcmKTsKIAogcHJpdmF0ZToKICAgICBJbnNwZWN0
b3JDYW52YXMoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCmluZGV4IDJlOTBjMTE5NDhhN2UwZWI2
MTA1YTgzZTJjMDhjYjRmODJhOGYyZmUuLjYzMGRmNzE3OTBjNjNiNmU3NTg3MzQ1MWExNzQwZjg2
ZjY3ZTAyZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JD
b250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29u
dHJvbGxlci5jcHAKQEAgLTQ3OCwxMCArNDc4LDggQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVy
Ojpmcm9udGVuZEluaXRpYWxpemVkKCkKIHsKICAgICBpZiAobV9wYXVzZUFmdGVySW5pdGlhbGl6
YXRpb24pIHsKICAgICAgICAgbV9wYXVzZUFmdGVySW5pdGlhbGl6YXRpb24gPSBmYWxzZTsKLSAg
ICAgICAgaWYgKGF1dG8qIGRlYnVnZ2VyQWdlbnQgPSBtX2luc3RydW1lbnRpbmdBZ2VudHMtPmVu
YWJsZWRQYWdlRGVidWdnZXJBZ2VudCgpKSB7Ci0gICAgICAgICAgICBFcnJvclN0cmluZyBpZ25v
cmVkOwotICAgICAgICAgICAgZGVidWdnZXJBZ2VudC0+cGF1c2UoaWdub3JlZCk7Ci0gICAgICAg
IH0KKyAgICAgICAgaWYgKGF1dG8qIGRlYnVnZ2VyQWdlbnQgPSBtX2luc3RydW1lbnRpbmdBZ2Vu
dHMtPmVuYWJsZWRQYWdlRGVidWdnZXJBZ2VudCgpKQorICAgICAgICAgICAgZGVidWdnZXJBZ2Vu
dC0+cGF1c2UoKTsKICAgICB9CiAKICNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHAKaW5k
ZXggNTBlMGM4M2JjOTIwNjYyZTc2ODAyNTU3NzUyYjM2ZjIzNzViMDM5Yy4uYTZiYjg3N2EyMmEw
YWE4NmJmODk5ODM5YTc1ZjVhZmY2ZWY4ZGUzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHAKQEAgLTYwNyw3ICs2MDcsNyBAQCBi
b29sIEluc3BlY3RvckZyb250ZW5kSG9zdDo6ZGlhZ25vc3RpY0xvZ2dpbmdBdmFpbGFibGUoKQog
ICAgIHJldHVybiBtX2NsaWVudCAmJiBtX2NsaWVudC0+ZGlhZ25vc3RpY0xvZ2dpbmdBdmFpbGFi
bGUoKTsKIH0KIAotc3RhdGljIE9wdGlvbmFsPERpYWdub3N0aWNMb2dnaW5nQ2xpZW50OjpWYWx1
ZVBheWxvYWQ+IHZhbHVlUGF5bG9hZEZyb21KU09OVmFsdWUoY29uc3QgUmVmUHRyPEpTT046OlZh
bHVlPiYgdmFsdWUpCitzdGF0aWMgT3B0aW9uYWw8RGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQ6OlZh
bHVlUGF5bG9hZD4gdmFsdWVQYXlsb2FkRnJvbUpTT05WYWx1ZShSZWY8SlNPTjo6VmFsdWU+JiYg
dmFsdWUpCiB7CiAgICAgc3dpdGNoICh2YWx1ZS0+dHlwZSgpKSB7CiAgICAgY2FzZSBKU09OOjpW
YWx1ZTo6VHlwZTo6QXJyYXk6CkBAIC02MTcsMjQgKzYxNywxNiBAQCBzdGF0aWMgT3B0aW9uYWw8
RGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQ6OlZhbHVlUGF5bG9hZD4gdmFsdWVQYXlsb2FkRnJvbUpT
T05WYWx1ZQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgY2FzZSBKU09OOjpW
YWx1ZTo6VHlwZTo6Qm9vbGVhbjoKLSAgICAgICAgYm9vbCBib29sVmFsdWU7Ci0gICAgICAgIHZh
bHVlLT5hc0Jvb2xlYW4oYm9vbFZhbHVlKTsKLSAgICAgICAgcmV0dXJuIERpYWdub3N0aWNMb2dn
aW5nQ2xpZW50OjpWYWx1ZVBheWxvYWQoYm9vbFZhbHVlKTsKKyAgICAgICAgcmV0dXJuIERpYWdu
b3N0aWNMb2dnaW5nQ2xpZW50OjpWYWx1ZVBheWxvYWQodmFsdWUtPmFzQm9vbGVhbigpLnZhbHVl
T3IoZmFsc2UpKTsKIAogICAgIGNhc2UgSlNPTjo6VmFsdWU6OlR5cGU6OkRvdWJsZToKLSAgICAg
ICAgZG91YmxlIGRvdWJsZVZhbHVlOwotICAgICAgICB2YWx1ZS0+YXNEb3VibGUoZG91YmxlVmFs
dWUpOwotICAgICAgICByZXR1cm4gRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQ6OlZhbHVlUGF5bG9h
ZChkb3VibGVWYWx1ZSk7CisgICAgICAgIHJldHVybiBEaWFnbm9zdGljTG9nZ2luZ0NsaWVudDo6
VmFsdWVQYXlsb2FkKHZhbHVlLT5hc0RvdWJsZSgpLnZhbHVlT3IoMCkpOwogCiAgICAgY2FzZSBK
U09OOjpWYWx1ZTo6VHlwZTo6SW50ZWdlcjoKLSAgICAgICAgbG9uZyBsb25nIGludFZhbHVlOwot
ICAgICAgICB2YWx1ZS0+YXNJbnRlZ2VyKGludFZhbHVlKTsKLSAgICAgICAgcmV0dXJuIERpYWdu
b3N0aWNMb2dnaW5nQ2xpZW50OjpWYWx1ZVBheWxvYWQoaW50VmFsdWUpOworICAgICAgICByZXR1
cm4gRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQ6OlZhbHVlUGF5bG9hZChzdGF0aWNfY2FzdDxsb25n
IGxvbmc+KHZhbHVlLT5hc0ludGVnZXIoKS52YWx1ZU9yKDApKSk7CiAKICAgICBjYXNlIEpTT046
OlZhbHVlOjpUeXBlOjpTdHJpbmc6Ci0gICAgICAgIFN0cmluZyBzdHJpbmdWYWx1ZTsKLSAgICAg
ICAgdmFsdWUtPmFzU3RyaW5nKHN0cmluZ1ZhbHVlKTsKLSAgICAgICAgcmV0dXJuIERpYWdub3N0
aWNMb2dnaW5nQ2xpZW50OjpWYWx1ZVBheWxvYWQoc3RyaW5nVmFsdWUpOworICAgICAgICByZXR1
cm4gRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQ6OlZhbHVlUGF5bG9hZCh2YWx1ZS0+YXNTdHJpbmco
KSk7CiAgICAgfQogCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC02NDYsMTcgKzYzOCwx
NyBAQCB2b2lkIEluc3BlY3RvckZyb250ZW5kSG9zdDo6bG9nRGlhZ25vc3RpY0V2ZW50KGNvbnN0
IFN0cmluZyYgZXZlbnROYW1lLCBjb25zdCBTdAogICAgIGlmICghc3VwcG9ydHNEaWFnbm9zdGlj
TG9nZ2luZygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHBh
eWxvYWRWYWx1ZTsKLSAgICBpZiAoIUpTT046OlZhbHVlOjpwYXJzZUpTT04ocGF5bG9hZFN0cmlu
ZywgcGF5bG9hZFZhbHVlKSkKKyAgICBhdXRvIHBheWxvYWRWYWx1ZSA9IEpTT046OlZhbHVlOjpw
YXJzZUpTT04ocGF5bG9hZFN0cmluZyk7CisgICAgaWYgKCFwYXlsb2FkVmFsdWUpCiAgICAgICAg
IHJldHVybjsKIAotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBheWxvYWRPYmplY3Q7Ci0gICAg
aWYgKCFwYXlsb2FkVmFsdWUtPmFzT2JqZWN0KHBheWxvYWRPYmplY3QpKQorICAgIGF1dG8gcGF5
bG9hZE9iamVjdCA9IHBheWxvYWRWYWx1ZS0+YXNPYmplY3QoKTsKKyAgICBpZiAoIXBheWxvYWRP
YmplY3QpCiAgICAgICAgIHJldHVybjsKIAogICAgIERpYWdub3N0aWNMb2dnaW5nQ2xpZW50OjpW
YWx1ZURpY3Rpb25hcnkgZGljdGlvbmFyeTsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIFtrZXksIHZh
bHVlXSA6ICpwYXlsb2FkT2JqZWN0KSB7Ci0gICAgICAgIGlmIChhdXRvIHZhbHVlUGF5bG9hZCA9
IHZhbHVlUGF5bG9hZEZyb21KU09OVmFsdWUodmFsdWUpKQorICAgIGZvciAoYXV0byYgW2tleSwg
dmFsdWVdIDogKnBheWxvYWRPYmplY3QpIHsKKyAgICAgICAgaWYgKGF1dG8gdmFsdWVQYXlsb2Fk
ID0gdmFsdWVQYXlsb2FkRnJvbUpTT05WYWx1ZShXVEZNb3ZlKHZhbHVlKSkpCiAgICAgICAgICAg
ICBkaWN0aW9uYXJ5LnNldChrZXksIFdURk1vdmUodmFsdWVQYXlsb2FkLnZhbHVlKCkpKTsKICAg
ICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHls
ZVNoZWV0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0
LmNwcAppbmRleCBhZTBmZWY1ZGZlMzliOWE1MTZlNTUxMDMwN2VhYmNiNjYwZDFhYmNiLi45NzY2
OWVmYjY4N2QzMzU1NGQ1MmJjNjhlMThjNjg0MWFlYjRjZjRmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwCkBAIC0zODAsNyArMzgwLDcg
QEAgdm9pZCBTdHlsZVNoZWV0SGFuZGxlcjo6b2JzZXJ2ZUNvbW1lbnQodW5zaWduZWQgc3RhcnRP
ZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCkKICAgICBtX2N1cnJlbnRSdWxlRGF0YVN0YWNrLmxh
c3QoKS0+c3R5bGVTb3VyY2VEYXRhLT5wcm9wZXJ0eURhdGEuYXBwZW5kKENTU1Byb3BlcnR5U291
cmNlRGF0YShwcm9wZXJ0eURhdGEubmFtZSwgcHJvcGVydHlEYXRhLnZhbHVlLCBmYWxzZSwgdHJ1
ZSwgdHJ1ZSwgU291cmNlUmFuZ2Uoc3RhcnRPZmZzZXQgLSB0b3BSdWxlQm9keVJhbmdlLnN0YXJ0
LCBlbmRPZmZzZXQgLSB0b3BSdWxlQm9keVJhbmdlLnN0YXJ0KSkpOwogfQogCi1zdGF0aWMgUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U291cmNlUmFuZ2U+IGJ1aWxkU291cmNlUmFu
Z2VPYmplY3QoY29uc3QgU291cmNlUmFuZ2UmIHJhbmdlLCBjb25zdCBWZWN0b3I8c2l6ZV90PiYg
bGluZUVuZGluZ3MsIGludCogZW5kaW5nTGluZSA9IG51bGxwdHIpCitzdGF0aWMgUmVmUHRyPFBy
b3RvY29sOjpDU1M6OlNvdXJjZVJhbmdlPiBidWlsZFNvdXJjZVJhbmdlT2JqZWN0KGNvbnN0IFNv
dXJjZVJhbmdlJiByYW5nZSwgY29uc3QgVmVjdG9yPHNpemVfdD4mIGxpbmVFbmRpbmdzLCBpbnQq
IGVuZGluZ0xpbmUgPSBudWxscHRyKQogewogICAgIGlmIChsaW5lRW5kaW5ncy5pc0VtcHR5KCkp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtMzkxLDcgKzM5MSw3IEBAIHN0YXRpYyBSZWZQ
dHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTb3VyY2VSYW5nZT4gYnVpbGRTb3VyY2VSYW5n
ZU9iamVjdChjb25zCiAgICAgaWYgKGVuZGluZ0xpbmUpCiAgICAgICAgICplbmRpbmdMaW5lID0g
ZW5kLm1fbGluZS56ZXJvQmFzZWRJbnQoKTsKIAotICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpDU1M6OlNvdXJjZVJhbmdlOjpjcmVhdGUoKQorICAgIHJldHVybiBQcm90b2NvbDo6Q1NT
OjpTb3VyY2VSYW5nZTo6Y3JlYXRlKCkKICAgICAgICAgLnNldFN0YXJ0TGluZShzdGFydC5tX2xp
bmUuemVyb0Jhc2VkSW50KCkpCiAgICAgICAgIC5zZXRTdGFydENvbHVtbihzdGFydC5tX2NvbHVt
bi56ZXJvQmFzZWRJbnQoKSkKICAgICAgICAgLnNldEVuZExpbmUoZW5kLm1fbGluZS56ZXJvQmFz
ZWRJbnQoKSkKQEAgLTQyOCwzNCArNDI4LDM0IEBAIHN0YXRpYyBSZWZQdHI8Q1NTUnVsZUxpc3Q+
IGFzQ1NTUnVsZUxpc3QoQ1NTUnVsZSogcnVsZSkKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAot
c3RhdGljIFJlZjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6R3JvdXBp
bmc+PiBidWlsZEFycmF5Rm9yR3JvdXBpbmdzKENTU1J1bGUmIHJ1bGUpCitzdGF0aWMgUmVmPEpT
T046OkFycmF5T2Y8UHJvdG9jb2w6OkNTUzo6R3JvdXBpbmc+PiBidWlsZEFycmF5Rm9yR3JvdXBp
bmdzKENTU1J1bGUmIHJ1bGUpCiB7Ci0gICAgYXV0byBncm91cGluZ3NQYXlsb2FkID0gSlNPTjo6
QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6Okdyb3VwaW5nPjo6Y3JlYXRlKCk7Cisg
ICAgYXV0byBncm91cGluZ3NQYXlsb2FkID0gSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6Q1NTOjpH
cm91cGluZz46OmNyZWF0ZSgpOwogCiAgICAgYXV0byogcGFyZW50UnVsZSA9ICZydWxlOwogICAg
IHdoaWxlIChwYXJlbnRSdWxlKSB7Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29s
OjpDU1M6Okdyb3VwaW5nPiBydWxlR3JvdXBpbmdQYXlsb2FkOworICAgICAgICBSZWZQdHI8UHJv
dG9jb2w6OkNTUzo6R3JvdXBpbmc+IHJ1bGVHcm91cGluZ1BheWxvYWQ7CiAKICAgICAgICAgaWYg
KGlzPENTU01lZGlhUnVsZT4ocGFyZW50UnVsZSkpIHsKICAgICAgICAgICAgIGF1dG8qIG1lZGlh
ID0gZG93bmNhc3Q8Q1NTTWVkaWFSdWxlPihwYXJlbnRSdWxlKS0+bWVkaWEoKTsKICAgICAgICAg
ICAgIGlmIChtZWRpYSAmJiBtZWRpYS0+bGVuZ3RoKCkgJiYgbWVkaWEtPm1lZGlhVGV4dCgpICE9
ICJhbGwiKSB7Ci0gICAgICAgICAgICAgICAgcnVsZUdyb3VwaW5nUGF5bG9hZCA9IEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkNTUzo6R3JvdXBpbmc6OmNyZWF0ZSgpCisgICAgICAgICAgICAgICAgcnVs
ZUdyb3VwaW5nUGF5bG9hZCA9IFByb3RvY29sOjpDU1M6Okdyb3VwaW5nOjpjcmVhdGUoKQogICAg
ICAgICAgICAgICAgICAgICAuc2V0VGV4dChtZWRpYS0+bWVkaWFUZXh0KCkpCi0gICAgICAgICAg
ICAgICAgICAgIC5zZXRUeXBlKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6R3JvdXBpbmc6OlR5
cGU6Ok1lZGlhUnVsZSkKKyAgICAgICAgICAgICAgICAgICAgLnNldFR5cGUoUHJvdG9jb2w6OkNT
Uzo6R3JvdXBpbmc6OlR5cGU6Ok1lZGlhUnVsZSkKICAgICAgICAgICAgICAgICAgICAgLnJlbGVh
c2UoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIGlmIChpczxDU1NJbXBvcnRSdWxl
PihwYXJlbnRSdWxlKSkgewogICAgICAgICAgICAgYXV0byYgbWVkaWEgPSBkb3duY2FzdDxDU1NJ
bXBvcnRSdWxlPihwYXJlbnRSdWxlKS0+bWVkaWEoKTsKICAgICAgICAgICAgIGlmIChtZWRpYS5s
ZW5ndGgoKSAmJiBtZWRpYS5tZWRpYVRleHQoKSAhPSAiYWxsIikgewotICAgICAgICAgICAgICAg
IHJ1bGVHcm91cGluZ1BheWxvYWQgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6Okdyb3VwaW5n
OjpjcmVhdGUoKQorICAgICAgICAgICAgICAgIHJ1bGVHcm91cGluZ1BheWxvYWQgPSBQcm90b2Nv
bDo6Q1NTOjpHcm91cGluZzo6Y3JlYXRlKCkKICAgICAgICAgICAgICAgICAgICAgLnNldFRleHQo
bWVkaWEubWVkaWFUZXh0KCkpCi0gICAgICAgICAgICAgICAgICAgIC5zZXRUeXBlKEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkNTUzo6R3JvdXBpbmc6OlR5cGU6Ok1lZGlhSW1wb3J0UnVsZSkKKyAgICAg
ICAgICAgICAgICAgICAgLnNldFR5cGUoUHJvdG9jb2w6OkNTUzo6R3JvdXBpbmc6OlR5cGU6Ok1l
ZGlhSW1wb3J0UnVsZSkKICAgICAgICAgICAgICAgICAgICAgLnJlbGVhc2UoKTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgfSBlbHNlIGlmIChpczxDU1NTdXBwb3J0c1J1bGU+KHBhcmVudFJ1bGUp
KSB7Ci0gICAgICAgICAgICBydWxlR3JvdXBpbmdQYXlsb2FkID0gSW5zcGVjdG9yOjpQcm90b2Nv
bDo6Q1NTOjpHcm91cGluZzo6Y3JlYXRlKCkKKyAgICAgICAgICAgIHJ1bGVHcm91cGluZ1BheWxv
YWQgPSBQcm90b2NvbDo6Q1NTOjpHcm91cGluZzo6Y3JlYXRlKCkKICAgICAgICAgICAgICAgICAu
c2V0VGV4dChkb3duY2FzdDxDU1NTdXBwb3J0c1J1bGU+KHBhcmVudFJ1bGUpLT5jb25kaXRpb25U
ZXh0KCkpCi0gICAgICAgICAgICAgICAgLnNldFR5cGUoSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NT
OjpHcm91cGluZzo6VHlwZTo6U3VwcG9ydHNSdWxlKQorICAgICAgICAgICAgICAgIC5zZXRUeXBl
KFByb3RvY29sOjpDU1M6Okdyb3VwaW5nOjpUeXBlOjpTdXBwb3J0c1J1bGUpCiAgICAgICAgICAg
ICAgICAgLnJlbGVhc2UoKTsKICAgICAgICAgfQogCkBAIC00NzAsNyArNDcwLDcgQEAgc3RhdGlj
IFJlZjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6R3JvdXBpbmc+PiBi
dWlsZEFycmF5Rm9yR3JvdXAKICAgICAgICAgICAgICAgICAgICAgcnVsZUdyb3VwaW5nUGF5bG9h
ZC0+c2V0U291cmNlVVJMKHNvdXJjZVVSTCk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
IGdyb3VwaW5nc1BheWxvYWQtPmFkZEl0ZW0oV1RGTW92ZShydWxlR3JvdXBpbmdQYXlsb2FkKSk7
CisgICAgICAgICAgICBncm91cGluZ3NQYXlsb2FkLT5hZGRJdGVtKHJ1bGVHcm91cGluZ1BheWxv
YWQucmVsZWFzZU5vbk51bGwoKSk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAocGFyZW50UnVs
ZS0+cGFyZW50UnVsZSgpKSB7CkBAIC00ODIsOSArNDgyLDkgQEAgc3RhdGljIFJlZjxKU09OOjpB
cnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6R3JvdXBpbmc+PiBidWlsZEFycmF5Rm9y
R3JvdXAKICAgICAgICAgd2hpbGUgKHN0eWxlU2hlZXQpIHsKICAgICAgICAgICAgIGF1dG8qIG1l
ZGlhID0gc3R5bGVTaGVldC0+bWVkaWEoKTsKICAgICAgICAgICAgIGlmIChtZWRpYSAmJiBtZWRp
YS0+bGVuZ3RoKCkgJiYgbWVkaWEtPm1lZGlhVGV4dCgpICE9ICJhbGwiKSB7Ci0gICAgICAgICAg
ICAgICAgYXV0byBzaGVldEdyb3VwaW5nUGF5bG9hZCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNT
Uzo6R3JvdXBpbmc6OmNyZWF0ZSgpCisgICAgICAgICAgICAgICAgYXV0byBzaGVldEdyb3VwaW5n
UGF5bG9hZCA9IFByb3RvY29sOjpDU1M6Okdyb3VwaW5nOjpjcmVhdGUoKQogICAgICAgICAgICAg
ICAgICAgICAuc2V0VGV4dChtZWRpYS0+bWVkaWFUZXh0KCkpCi0gICAgICAgICAgICAgICAgICAg
IC5zZXRUeXBlKGlzPEhUTUxTdHlsZUVsZW1lbnQ+KHN0eWxlU2hlZXQtPm93bmVyTm9kZSgpKSA/
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6R3JvdXBpbmc6OlR5cGU6Ok1lZGlhU3R5bGVOb2Rl
OiBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6Okdyb3VwaW5nOjpUeXBlOjpNZWRpYUxpbmtOb2Rl
KQorICAgICAgICAgICAgICAgICAgICAuc2V0VHlwZShpczxIVE1MU3R5bGVFbGVtZW50PihzdHls
ZVNoZWV0LT5vd25lck5vZGUoKSkgPyBQcm90b2NvbDo6Q1NTOjpHcm91cGluZzo6VHlwZTo6TWVk
aWFTdHlsZU5vZGU6IFByb3RvY29sOjpDU1M6Okdyb3VwaW5nOjpUeXBlOjpNZWRpYUxpbmtOb2Rl
KQogICAgICAgICAgICAgICAgICAgICAucmVsZWFzZSgpOwogCiAgICAgICAgICAgICAgICAgU3Ry
aW5nIHNvdXJjZVVSTDsKQEAgLTUyMywyOCArNTIzLDMwIEBAIEluc3BlY3RvclN0eWxlOjpJbnNw
ZWN0b3JTdHlsZShjb25zdCBJbnNwZWN0b3JDU1NJZCYgc3R5bGVJZCwgUmVmPENTU1N0eWxlRGVj
bGFyCiAKIEluc3BlY3RvclN0eWxlOjp+SW5zcGVjdG9yU3R5bGUoKSA9IGRlZmF1bHQ7CiAKLVJl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlPiBJbnNwZWN0b3JTdHlsZTo6
YnVpbGRPYmplY3RGb3JTdHlsZSgpIGNvbnN0CitSZWY8UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+
IEluc3BlY3RvclN0eWxlOjpidWlsZE9iamVjdEZvclN0eWxlKCkgY29uc3QKIHsKLSAgICBSZWY8
SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4gcmVzdWx0ID0gc3R5bGVXaXRoUHJv
cGVydGllcygpOwotICAgIGlmICghbV9zdHlsZUlkLmlzRW1wdHkoKSkKLSAgICAgICAgcmVzdWx0
LT5zZXRTdHlsZUlkKG1fc3R5bGVJZC5hc1Byb3RvY29sVmFsdWU8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6Q1NTOjpDU1NTdHlsZUlkPigpKTsKKyAgICBSZWY8UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+
IHJlc3VsdCA9IHN0eWxlV2l0aFByb3BlcnRpZXMoKTsKKyAgICBpZiAoYXV0byBzdHlsZUlkID0g
bV9zdHlsZUlkLmFzUHJvdG9jb2xWYWx1ZTxQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZUlkPigpKQor
ICAgICAgICByZXN1bHQtPnNldFN0eWxlSWQoc3R5bGVJZC5yZWxlYXNlTm9uTnVsbCgpKTsKIAog
ICAgIHJlc3VsdC0+c2V0V2lkdGgobV9zdHlsZS0+Z2V0UHJvcGVydHlWYWx1ZSgid2lkdGgiKSk7
CiAgICAgcmVzdWx0LT5zZXRIZWlnaHQobV9zdHlsZS0+Z2V0UHJvcGVydHlWYWx1ZSgiaGVpZ2h0
IikpOwogCiAgICAgUmVmUHRyPENTU1J1bGVTb3VyY2VEYXRhPiBzb3VyY2VEYXRhID0gZXh0cmFj
dFNvdXJjZURhdGEoKTsKLSAgICBpZiAoc291cmNlRGF0YSkKLSAgICAgICAgcmVzdWx0LT5zZXRS
YW5nZShidWlsZFNvdXJjZVJhbmdlT2JqZWN0KHNvdXJjZURhdGEtPnJ1bGVCb2R5UmFuZ2UsIG1f
cGFyZW50U3R5bGVTaGVldC0+bGluZUVuZGluZ3MoKSkpOworICAgIGlmIChzb3VyY2VEYXRhKSB7
CisgICAgICAgIGlmIChhdXRvIHJhbmdlID0gYnVpbGRTb3VyY2VSYW5nZU9iamVjdChzb3VyY2VE
YXRhLT5ydWxlQm9keVJhbmdlLCBtX3BhcmVudFN0eWxlU2hlZXQtPmxpbmVFbmRpbmdzKCkpKQor
ICAgICAgICAgICAgcmVzdWx0LT5zZXRSYW5nZShyYW5nZS5yZWxlYXNlTm9uTnVsbCgpKTsKKyAg
ICB9CiAKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1SZWY8SlNPTjo6QXJyYXlPZjxJbnNwZWN0
b3I6OlByb3RvY29sOjpDU1M6OkNTU0NvbXB1dGVkU3R5bGVQcm9wZXJ0eT4+IEluc3BlY3RvclN0
eWxlOjpidWlsZEFycmF5Rm9yQ29tcHV0ZWRTdHlsZSgpIGNvbnN0CitSZWY8SlNPTjo6QXJyYXlP
ZjxQcm90b2NvbDo6Q1NTOjpDU1NDb21wdXRlZFN0eWxlUHJvcGVydHk+PiBJbnNwZWN0b3JTdHls
ZTo6YnVpbGRBcnJheUZvckNvbXB1dGVkU3R5bGUoKSBjb25zdAogewotICAgIGF1dG8gcmVzdWx0
ID0gSlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU0NvbXB1dGVkU3R5
bGVQcm9wZXJ0eT46OmNyZWF0ZSgpOworICAgIGF1dG8gcmVzdWx0ID0gSlNPTjo6QXJyYXlPZjxQ
cm90b2NvbDo6Q1NTOjpDU1NDb21wdXRlZFN0eWxlUHJvcGVydHk+OjpjcmVhdGUoKTsKICAgICBm
b3IgKGF1dG8mIHByb3BlcnR5IDogY29sbGVjdFByb3BlcnRpZXModHJ1ZSkpIHsKICAgICAgICAg
Y29uc3QgQ1NTUHJvcGVydHlTb3VyY2VEYXRhJiBwcm9wZXJ0eUVudHJ5ID0gcHJvcGVydHkuc291
cmNlRGF0YTsKLSAgICAgICAgYXV0byBlbnRyeSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6
Q1NTQ29tcHV0ZWRTdHlsZVByb3BlcnR5OjpjcmVhdGUoKQorICAgICAgICBhdXRvIGVudHJ5ID0g
UHJvdG9jb2w6OkNTUzo6Q1NTQ29tcHV0ZWRTdHlsZVByb3BlcnR5OjpjcmVhdGUoKQogICAgICAg
ICAgICAgLnNldE5hbWUocHJvcGVydHlFbnRyeS5uYW1lKQogICAgICAgICAgICAgLnNldFZhbHVl
KHByb3BlcnR5RW50cnkudmFsdWUpCiAgICAgICAgICAgICAucmVsZWFzZSgpOwpAQCAtNjIzLDEz
ICs2MjUsMTMgQEAgVmVjdG9yPEluc3BlY3RvclN0eWxlUHJvcGVydHk+IEluc3BlY3RvclN0eWxl
Ojpjb2xsZWN0UHJvcGVydGllcyhib29sIGluY2x1ZGVBbGwKICAgICByZXR1cm4gcmVzdWx0Owog
fQogCi1SZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4gSW5zcGVjdG9yU3R5
bGU6OnN0eWxlV2l0aFByb3BlcnRpZXMoKSBjb25zdAorUmVmPFByb3RvY29sOjpDU1M6OkNTU1N0
eWxlPiBJbnNwZWN0b3JTdHlsZTo6c3R5bGVXaXRoUHJvcGVydGllcygpIGNvbnN0CiB7CiAgICAg
YXV0byBwcm9wZXJ0aWVzID0gY29sbGVjdFByb3BlcnRpZXMoZmFsc2UpOwogCi0gICAgYXV0byBw
cm9wZXJ0aWVzT2JqZWN0ID0gSlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6
OkNTU1Byb3BlcnR5Pjo6Y3JlYXRlKCk7Ci0gICAgYXV0byBzaG9ydGhhbmRFbnRyaWVzID0gQXJy
YXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlNob3J0aGFuZEVudHJ5Pjo6Y3JlYXRlKCk7
Ci0gICAgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNT
U1Byb3BlcnR5Pj4gcHJvcGVydHlOYW1lVG9QcmV2aW91c0FjdGl2ZVByb3BlcnR5OworICAgIGF1
dG8gcHJvcGVydGllc09iamVjdCA9IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkNTUzo6Q1NTUHJv
cGVydHk+OjpjcmVhdGUoKTsKKyAgICBhdXRvIHNob3J0aGFuZEVudHJpZXMgPSBBcnJheU9mPFBy
b3RvY29sOjpDU1M6OlNob3J0aGFuZEVudHJ5Pjo6Y3JlYXRlKCk7CisgICAgSGFzaE1hcDxTdHJp
bmcsIFJlZlB0cjxQcm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0eT4+IHByb3BlcnR5TmFtZVRvUHJl
dmlvdXNBY3RpdmVQcm9wZXJ0eTsKICAgICBIYXNoU2V0PFN0cmluZz4gZm91bmRTaG9ydGhhbmRz
OwogICAgIFN0cmluZyBwcmV2aW91c1ByaW9yaXR5OwogICAgIFN0cmluZyBwcmV2aW91c1N0YXR1
czsKQEAgLTY0MSw5ICs2NDMsOSBAQCBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NT
dHlsZT4gSW5zcGVjdG9yU3R5bGU6OnN0eWxlV2l0aFByb3BlcnRpZXMoKSBjbwogICAgICAgICBj
b25zdCBDU1NQcm9wZXJ0eVNvdXJjZURhdGEmIHByb3BlcnR5RW50cnkgPSBpdC0+c291cmNlRGF0
YTsKICAgICAgICAgY29uc3QgU3RyaW5nJiBuYW1lID0gcHJvcGVydHlFbnRyeS5uYW1lOwogCi0g
ICAgICAgIGF1dG8gc3RhdHVzID0gaXQtPmRpc2FibGVkID8gSW5zcGVjdG9yOjpQcm90b2NvbDo6
Q1NTOjpDU1NQcm9wZXJ0eVN0YXR1czo6RGlzYWJsZWQgOiBJbnNwZWN0b3I6OlByb3RvY29sOjpD
U1M6OkNTU1Byb3BlcnR5U3RhdHVzOjpBY3RpdmU7CisgICAgICAgIGF1dG8gc3RhdHVzID0gaXQt
PmRpc2FibGVkID8gUHJvdG9jb2w6OkNTUzo6Q1NTUHJvcGVydHlTdGF0dXM6OkRpc2FibGVkIDog
UHJvdG9jb2w6OkNTUzo6Q1NTUHJvcGVydHlTdGF0dXM6OkFjdGl2ZTsKIAotICAgICAgICBhdXRv
IHByb3BlcnR5ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0eTo6Y3JlYXRl
KCkKKyAgICAgICAgYXV0byBwcm9wZXJ0eSA9IFByb3RvY29sOjpDU1M6OkNTU1Byb3BlcnR5Ojpj
cmVhdGUoKQogICAgICAgICAgICAgLnNldE5hbWUobmFtZS5jb252ZXJ0VG9BU0NJSUxvd2VyY2Fz
ZSgpKQogICAgICAgICAgICAgLnNldFZhbHVlKHByb3BlcnR5RW50cnkudmFsdWUpCiAgICAgICAg
ICAgICAucmVsZWFzZSgpOwpAQCAtNjY5LDcgKzY3MSw4IEBAIFJlZjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpDU1M6OkNTU1N0eWxlPiBJbnNwZWN0b3JTdHlsZTo6c3R5bGVXaXRoUHJvcGVydGllcygp
IGNvCiAgICAgICAgICAgICBTb3VyY2VSYW5nZSBhYnNvbHV0ZVByb3BlcnR5UmFuZ2UgPSBwcm9w
ZXJ0eUVudHJ5LnJhbmdlOwogICAgICAgICAgICAgYWJzb2x1dGVQcm9wZXJ0eVJhbmdlLnN0YXJ0
ICs9IHJ1bGVCb2R5UmFuZ2VTdGFydDsKICAgICAgICAgICAgIGFic29sdXRlUHJvcGVydHlSYW5n
ZS5lbmQgKz0gcnVsZUJvZHlSYW5nZVN0YXJ0OwotICAgICAgICAgICAgcHJvcGVydHktPnNldFJh
bmdlKGJ1aWxkU291cmNlUmFuZ2VPYmplY3QoYWJzb2x1dGVQcm9wZXJ0eVJhbmdlLCBsaW5lRW5k
aW5ncykpOworICAgICAgICAgICAgaWYgKGF1dG8gcmFuZ2UgPSBidWlsZFNvdXJjZVJhbmdlT2Jq
ZWN0KGFic29sdXRlUHJvcGVydHlSYW5nZSwgbGluZUVuZGluZ3MpKQorICAgICAgICAgICAgICAg
IHByb3BlcnR5LT5zZXRSYW5nZShyYW5nZS5yZWxlYXNlTm9uTnVsbCgpKTsKICAgICAgICAgfQog
CiAgICAgICAgIGlmICghaXQtPmRpc2FibGVkKSB7CkBAIC02ODMsMzAgKzY4NiwzNSBAQCBSZWY8
SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4gSW5zcGVjdG9yU3R5bGU6OnN0eWxl
V2l0aFByb3BlcnRpZXMoKSBjbwogCiAgICAgICAgICAgICAgICAgLy8gQ2Fub25pY2FsaXplIHBy
b3BlcnR5IG5hbWVzIHRvIHRyZWF0IG5vbi1wcmVmaXhlZCBhbmQgdmVuZG9yLXByZWZpeGVkIHBy
b3BlcnR5IG5hbWVzIHRoZSBzYW1lIChvcGFjaXR5IHZzLiAtd2Via2l0LW9wYWNpdHkpLgogICAg
ICAgICAgICAgICAgIFN0cmluZyBjYW5vbmljYWxQcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eUlkID8g
Z2V0UHJvcGVydHlOYW1lU3RyaW5nKHByb3BlcnR5SWQpIDogbmFtZTsKLSAgICAgICAgICAgICAg
ICBIYXNoTWFwPFN0cmluZywgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUHJv
cGVydHk+Pjo6aXRlcmF0b3IgYWN0aXZlSXQgPSBwcm9wZXJ0eU5hbWVUb1ByZXZpb3VzQWN0aXZl
UHJvcGVydHkuZmluZChjYW5vbmljYWxQcm9wZXJ0eU5hbWUpOworICAgICAgICAgICAgICAgIEhh
c2hNYXA8U3RyaW5nLCBSZWZQdHI8UHJvdG9jb2w6OkNTUzo6Q1NTUHJvcGVydHk+Pjo6aXRlcmF0
b3IgYWN0aXZlSXQgPSBwcm9wZXJ0eU5hbWVUb1ByZXZpb3VzQWN0aXZlUHJvcGVydHkuZmluZChj
YW5vbmljYWxQcm9wZXJ0eU5hbWUpOwogICAgICAgICAgICAgICAgIGlmIChhY3RpdmVJdCAhPSBw
cm9wZXJ0eU5hbWVUb1ByZXZpb3VzQWN0aXZlUHJvcGVydHkuZW5kKCkpIHsKICAgICAgICAgICAg
ICAgICAgICAgaWYgKHByb3BlcnR5RW50cnkucGFyc2VkT2spIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2wgc3VjY2Vzc1ByaW9yaXR5ID0gYWN0aXZlSXQtPnZhbHVlLT5nZXRTdHJpbmco
SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0eTo6UHJpb3JpdHksIHByZXZpb3Vz
UHJpb3JpdHkpOwotICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBzdWNjZXNzU3RhdHVzID0g
YWN0aXZlSXQtPnZhbHVlLT5nZXRTdHJpbmcoSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NQ
cm9wZXJ0eTo6U3RhdHVzLCBwcmV2aW91c1N0YXR1cyk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoc3VjY2Vzc1N0YXR1cyAmJiBwcmV2aW91c1N0YXR1cyAhPSAiaW5hY3RpdmUiKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnR5RW50cnkuaW1wb3J0YW50IHx8
ICFzdWNjZXNzUHJpb3JpdHkpIC8vIFByaW9yaXR5IG5vdCBzZXQgPT0gIm5vdCBpbXBvcnRhbnQi
LgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG91bGRJbmFjdGl2YXRlID0gdHJ1
ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChzdGF0dXMgPT0gSW5zcGVj
dG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0eVN0YXR1czo6QWN0aXZlKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEluYWN0aXZhdGUgYSBub24taW1wb3J0YW50IHBy
b3BlcnR5IGZvbGxvd2luZyB0aGUgc2FtZS1uYW1lZCBpbXBvcnRhbnQgcHJvcGVydHkuCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkNTUzo6Q1NTUHJvcGVydHlTdGF0dXM6OkluYWN0aXZlOworICAgICAgICAgICAgICAgICAgICAg
ICAgYXV0byBuZXdQcmlvcml0eSA9IGFjdGl2ZUl0LT52YWx1ZS0+Z2V0U3RyaW5nKFByb3RvY29s
OjpDU1M6OkNTU1Byb3BlcnR5Ojpwcmlvcml0eUtleSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoISFuZXdQcmlvcml0eSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91
c1ByaW9yaXR5ID0gbmV3UHJpb3JpdHk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8g
bmV3U3RhdHVzID0gYWN0aXZlSXQtPnZhbHVlLT5nZXRTdHJpbmcoUHJvdG9jb2w6OkNTUzo6Q1NT
UHJvcGVydHk6OnN0YXR1c0tleSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISFuZXdT
dGF0dXMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91c1N0YXR1cyA9IG5l
d1N0YXR1czsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJldmlvdXNTdGF0dXMg
IT0gUHJvdG9jb2w6OkhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKFByb3RvY29sOjpDU1M6
OkNTU1Byb3BlcnR5U3RhdHVzOjpJbmFjdGl2ZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHByb3BlcnR5RW50cnkuaW1wb3J0YW50IHx8ICEhbmV3UHJpb3JpdHkpIC8v
IFByaW9yaXR5IG5vdCBzZXQgPT0gIm5vdCBpbXBvcnRhbnQiLgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2hvdWxkSW5hY3RpdmF0ZSA9IHRydWU7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN0YXR1cyA9PSBQcm90b2NvbDo6Q1NTOjpDU1NQ
cm9wZXJ0eVN0YXR1czo6QWN0aXZlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBJbmFjdGl2YXRlIGEgbm9uLWltcG9ydGFudCBwcm9wZXJ0eSBmb2xsb3dpbmcgdGhl
IHNhbWUtbmFtZWQgaW1wb3J0YW50IHByb3BlcnR5LgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3RhdHVzID0gUHJvdG9jb2w6OkNTUzo6Q1NTUHJvcGVydHlTdGF0dXM6Oklu
YWN0aXZlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBwcmV2aW91c1Bh
cnNlZE9rOwotICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBzdWNjZXNzID0gYWN0aXZlSXQt
PnZhbHVlLT5nZXRCb29sZWFuKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUHJvcGVydHk6
OlBhcnNlZE9rLCBwcmV2aW91c1BhcnNlZE9rKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChzdWNjZXNzICYmICFwcmV2aW91c1BhcnNlZE9rKQorICAgICAgICAgICAgICAgICAgICAgICAg
YXV0byBwcmV2aW91c1BhcnNlZE9rID0gYWN0aXZlSXQtPnZhbHVlLT5nZXRCb29sZWFuKFByb3Rv
Y29sOjpDU1M6OkNTU1Byb3BlcnR5OjpwYXJzZWRPa0tleSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAocHJldmlvdXNQYXJzZWRPayAmJiAhcHJldmlvdXNQYXJzZWRPaykKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzaG91bGRJbmFjdGl2YXRlID0gdHJ1ZTsKICAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgICAgICBw
cm9wZXJ0eU5hbWVUb1ByZXZpb3VzQWN0aXZlUHJvcGVydHkuc2V0KGNhbm9uaWNhbFByb3BlcnR5
TmFtZSwgcHJvcGVydHkuY29weVJlZigpKTsKIAogICAgICAgICAgICAgICAgIGlmIChzaG91bGRJ
bmFjdGl2YXRlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGFjdGl2ZUl0LT52YWx1ZS0+c2V0U3Rh
dHVzKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUHJvcGVydHlTdGF0dXM6OkluYWN0aXZl
KTsKKyAgICAgICAgICAgICAgICAgICAgYWN0aXZlSXQtPnZhbHVlLT5zZXRTdGF0dXMoUHJvdG9j
b2w6OkNTUzo6Q1NTUHJvcGVydHlTdGF0dXM6OkluYWN0aXZlKTsKICAgICAgICAgICAgICAgICAg
ICAgcHJvcGVydHlOYW1lVG9QcmV2aW91c0FjdGl2ZVByb3BlcnR5LnNldChjYW5vbmljYWxQcm9w
ZXJ0eU5hbWUsIHByb3BlcnR5LmNvcHlSZWYoKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgfSBlbHNlIHsKQEAgLTcxNCwxMyArNzIyLDEzIEBAIFJlZjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpDU1M6OkNTU1N0eWxlPiBJbnNwZWN0b3JTdHlsZTo6c3R5bGVXaXRoUHJvcGVydGllcygp
IGNvCiAgICAgICAgICAgICAgICAgLy8gRGVmYXVsdCAiaW1wbGljaXQiID09IGZhbHNlLgogICAg
ICAgICAgICAgICAgIGlmIChpbXBsaWNpdCkKICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHkt
PnNldEltcGxpY2l0KHRydWUpOwotICAgICAgICAgICAgICAgIHN0YXR1cyA9IEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkNTUzo6Q1NTUHJvcGVydHlTdGF0dXM6OlN0eWxlOworICAgICAgICAgICAgICAg
IHN0YXR1cyA9IFByb3RvY29sOjpDU1M6OkNTU1Byb3BlcnR5U3RhdHVzOjpTdHlsZTsKIAogICAg
ICAgICAgICAgICAgIFN0cmluZyBzaG9ydGhhbmQgPSBtX3N0eWxlLT5nZXRQcm9wZXJ0eVNob3J0
aGFuZChuYW1lKTsKICAgICAgICAgICAgICAgICBpZiAoIXNob3J0aGFuZC5pc0VtcHR5KCkpIHsK
ICAgICAgICAgICAgICAgICAgICAgaWYgKCFmb3VuZFNob3J0aGFuZHMuY29udGFpbnMoc2hvcnRo
YW5kKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRTaG9ydGhhbmRzLmFkZChzaG9y
dGhhbmQpOwotICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBlbnRyeSA9IEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkNTUzo6U2hvcnRoYW5kRW50cnk6OmNyZWF0ZSgpCisgICAgICAgICAgICAgICAg
ICAgICAgICBhdXRvIGVudHJ5ID0gUHJvdG9jb2w6OkNTUzo6U2hvcnRoYW5kRW50cnk6OmNyZWF0
ZSgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNldE5hbWUoc2hvcnRoYW5kKQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRWYWx1ZShzaG9ydGhhbmRWYWx1ZShzaG9ydGhh
bmQpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZWxlYXNlKCk7CkBAIC03MzEsMTEg
KzczOSwxMSBAQCBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4gSW5zcGVj
dG9yU3R5bGU6OnN0eWxlV2l0aFByb3BlcnRpZXMoKSBjbwogICAgICAgICB9CiAKICAgICAgICAg
Ly8gRGVmYXVsdCAic3RhdHVzIiA9PSAic3R5bGUiLgotICAgICAgICBpZiAoc3RhdHVzICE9IElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUHJvcGVydHlTdGF0dXM6OlN0eWxlKQorICAgICAg
ICBpZiAoc3RhdHVzICE9IFByb3RvY29sOjpDU1M6OkNTU1Byb3BlcnR5U3RhdHVzOjpTdHlsZSkK
ICAgICAgICAgICAgIHByb3BlcnR5LT5zZXRTdGF0dXMoc3RhdHVzKTsKICAgICB9CiAKLSAgICBy
ZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZTo6Y3JlYXRlKCkKKyAgICBy
ZXR1cm4gUHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU6OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRDc3NQ
cm9wZXJ0aWVzKFdURk1vdmUocHJvcGVydGllc09iamVjdCkpCiAgICAgICAgIC5zZXRTaG9ydGhh
bmRFbnRyaWVzKFdURk1vdmUoc2hvcnRoYW5kRW50cmllcykpCiAgICAgICAgIC5yZWxlYXNlKCk7
CkBAIC04MDUsNyArODEzLDcgQEAgVmVjdG9yPFN0cmluZz4gSW5zcGVjdG9yU3R5bGU6Omxvbmdo
YW5kUHJvcGVydGllcyhjb25zdCBTdHJpbmcmIHNob3J0aGFuZFByb3BlcnQKICAgICByZXR1cm4g
cHJvcGVydGllczsKIH0KIAotUmVmPEluc3BlY3RvclN0eWxlU2hlZXQ+IEluc3BlY3RvclN0eWxl
U2hlZXQ6OmNyZWF0ZShJbnNwZWN0b3JQYWdlQWdlbnQqIHBhZ2VBZ2VudCwgY29uc3QgU3RyaW5n
JiBpZCwgUmVmUHRyPENTU1N0eWxlU2hlZXQ+JiYgcGFnZVN0eWxlU2hlZXQsIEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbiBvcmlnaW4sIGNvbnN0IFN0cmluZyYgZG9j
dW1lbnRVUkwsIExpc3RlbmVyKiBsaXN0ZW5lcikKK1JlZjxJbnNwZWN0b3JTdHlsZVNoZWV0PiBJ
bnNwZWN0b3JTdHlsZVNoZWV0OjpjcmVhdGUoSW5zcGVjdG9yUGFnZUFnZW50KiBwYWdlQWdlbnQs
IGNvbnN0IFN0cmluZyYgaWQsIFJlZlB0cjxDU1NTdHlsZVNoZWV0PiYmIHBhZ2VTdHlsZVNoZWV0
LCBQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luIG9yaWdpbiwgY29uc3QgU3RyaW5nJiBk
b2N1bWVudFVSTCwgTGlzdGVuZXIqIGxpc3RlbmVyKQogewogICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IEluc3BlY3RvclN0eWxlU2hlZXQocGFnZUFnZW50LCBpZCwgV1RGTW92ZShwYWdlU3R5bGVT
aGVldCksIG9yaWdpbiwgZG9jdW1lbnRVUkwsIGxpc3RlbmVyKSk7CiB9CkBAIC04MTcsNyArODI1
LDcgQEAgU3RyaW5nIEluc3BlY3RvclN0eWxlU2hlZXQ6OnN0eWxlU2hlZXRVUkwoQ1NTU3R5bGVT
aGVldCogcGFnZVN0eWxlU2hlZXQpCiAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CiB9CiAKLUlu
c3BlY3RvclN0eWxlU2hlZXQ6Okluc3BlY3RvclN0eWxlU2hlZXQoSW5zcGVjdG9yUGFnZUFnZW50
KiBwYWdlQWdlbnQsIGNvbnN0IFN0cmluZyYgaWQsIFJlZlB0cjxDU1NTdHlsZVNoZWV0PiYmIHBh
Z2VTdHlsZVNoZWV0LCBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW4g
b3JpZ2luLCBjb25zdCBTdHJpbmcmIGRvY3VtZW50VVJMLCBMaXN0ZW5lciogbGlzdGVuZXIpCitJ
bnNwZWN0b3JTdHlsZVNoZWV0OjpJbnNwZWN0b3JTdHlsZVNoZWV0KEluc3BlY3RvclBhZ2VBZ2Vu
dCogcGFnZUFnZW50LCBjb25zdCBTdHJpbmcmIGlkLCBSZWZQdHI8Q1NTU3R5bGVTaGVldD4mJiBw
YWdlU3R5bGVTaGVldCwgUHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbiBvcmlnaW4sIGNv
bnN0IFN0cmluZyYgZG9jdW1lbnRVUkwsIExpc3RlbmVyKiBsaXN0ZW5lcikKICAgICA6IG1fcGFn
ZUFnZW50KHBhZ2VBZ2VudCkKICAgICAsIG1faWQoaWQpCiAgICAgLCBtX3BhZ2VTdHlsZVNoZWV0
KFdURk1vdmUocGFnZVN0eWxlU2hlZXQpKQpAQCAtOTQ3LDcgKzk1NSw3IEBAIEV4Y2VwdGlvbk9y
PENTU1N0eWxlUnVsZSo+IEluc3BlY3RvclN0eWxlU2hlZXQ6OmFkZFJ1bGUoY29uc3QgU3RyaW5n
JiBzZWxlY3RvcikKICAgICBzZXRUZXh0KHN0eWxlU2hlZXRUZXh0LnRvU3RyaW5nKCkpOwogCiAg
ICAgLy8gSW5zcGVjdG9yIFN0eWxlIFNoZWV0cyBhcmUgYWx3YXlzIHRyZWF0ZWQgYXMgdGhvdWdo
IHRoZWlyIHBhcnNlZCBkYXRhIGlzIHJlYWR5LgotICAgIGlmIChtX29yaWdpbiA9PSBJbnNwZWN0
b3I6OlByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW46Okluc3BlY3RvcikKKyAgICBpZiAo
bV9vcmlnaW4gPT0gUHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6SW5zcGVjdG9yKQog
ICAgICAgICBmaXJlU3R5bGVTaGVldENoYW5nZWQoKTsKICAgICBlbHNlCiAgICAgICAgIHJlcGFy
c2VTdHlsZVNoZWV0KHN0eWxlU2hlZXRUZXh0LnRvU3RyaW5nKCkpOwpAQCAtMTAwNyw3ICsxMDE1
LDcgQEAgQ1NTU3R5bGVSdWxlKiBJbnNwZWN0b3JTdHlsZVNoZWV0OjpydWxlRm9ySWQoY29uc3Qg
SW5zcGVjdG9yQ1NTSWQmIGlkKSBjb25zdAogICAgIHJldHVybiBpZC5vcmRpbmFsKCkgPj0gbV9m
bGF0UnVsZXMuc2l6ZSgpID8gbnVsbHB0ciA6IG1fZmxhdFJ1bGVzLmF0KGlkLm9yZGluYWwoKSku
Z2V0KCk7CiB9CiAKLVJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlU2hl
ZXRCb2R5PiBJbnNwZWN0b3JTdHlsZVNoZWV0OjpidWlsZE9iamVjdEZvclN0eWxlU2hlZXQoKQor
UmVmUHRyPFByb3RvY29sOjpDU1M6OkNTU1N0eWxlU2hlZXRCb2R5PiBJbnNwZWN0b3JTdHlsZVNo
ZWV0OjpidWlsZE9iamVjdEZvclN0eWxlU2hlZXQoKQogewogICAgIENTU1N0eWxlU2hlZXQqIHN0
eWxlU2hlZXQgPSBwYWdlU3R5bGVTaGVldCgpOwogICAgIGlmICghc3R5bGVTaGVldCkKQEAgLTEw
MTUsNyArMTAyMyw3IEBAIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxl
U2hlZXRCb2R5PiBJbnNwZWN0b3JTdHlsZVNoZWV0OjpidWlsZE9iCiAKICAgICBSZWZQdHI8Q1NT
UnVsZUxpc3Q+IGNzc1J1bGVMaXN0ID0gYXNDU1NSdWxlTGlzdChzdHlsZVNoZWV0KTsKIAotICAg
IGF1dG8gcmVzdWx0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZVNoZWV0Qm9k
eTo6Y3JlYXRlKCkKKyAgICBhdXRvIHJlc3VsdCA9IFByb3RvY29sOjpDU1M6OkNTU1N0eWxlU2hl
ZXRCb2R5OjpjcmVhdGUoKQogICAgICAgICAuc2V0U3R5bGVTaGVldElkKGlkKCkpCiAgICAgICAg
IC5zZXRSdWxlcyhidWlsZEFycmF5Rm9yUnVsZUxpc3QoY3NzUnVsZUxpc3QuZ2V0KCkpKQogICAg
ICAgICAucmVsZWFzZSgpOwpAQCAtMTAyNyw3ICsxMDM1LDcgQEAgUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGVTaGVldEJvZHk+IEluc3BlY3RvclN0eWxlU2hlZXQ6OmJ1
aWxkT2IKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1SZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6Q1NTOjpDU1NTdHlsZVNoZWV0SGVhZGVyPiBJbnNwZWN0b3JTdHlsZVNoZWV0OjpidWlsZE9i
amVjdEZvclN0eWxlU2hlZXRJbmZvKCkKK1JlZlB0cjxQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZVNo
ZWV0SGVhZGVyPiBJbnNwZWN0b3JTdHlsZVNoZWV0OjpidWlsZE9iamVjdEZvclN0eWxlU2hlZXRJ
bmZvKCkKIHsKICAgICBDU1NTdHlsZVNoZWV0KiBzdHlsZVNoZWV0ID0gcGFnZVN0eWxlU2hlZXQo
KTsKICAgICBpZiAoIXN0eWxlU2hlZXQpCkBAIC0xMDM1LDcgKzEwNDMsNyBAQCBSZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZVNoZWV0SGVhZGVyPiBJbnNwZWN0b3JTdHls
ZVNoZWV0OjpidWlsZAogCiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gc3R5bGVTaGVldC0+b3du
ZXJEb2N1bWVudCgpOwogICAgIEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50ID8gZG9jdW1lbnQtPmZy
YW1lKCkgOiBudWxscHRyOwotICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNT
U1N0eWxlU2hlZXRIZWFkZXI6OmNyZWF0ZSgpCisgICAgcmV0dXJuIFByb3RvY29sOjpDU1M6OkNT
U1N0eWxlU2hlZXRIZWFkZXI6OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRTdHlsZVNoZWV0SWQoaWQo
KSkKICAgICAgICAgLnNldE9yaWdpbihtX29yaWdpbikKICAgICAgICAgLnNldERpc2FibGVkKHN0
eWxlU2hlZXQtPmRpc2FibGVkKCkpCkBAIC0xMDQ4LDkgKzEwNTYsOSBAQCBSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZVNoZWV0SGVhZGVyPiBJbnNwZWN0b3JTdHlsZVNo
ZWV0OjpidWlsZAogICAgICAgICAucmVsZWFzZSgpOwogfQogCi1zdGF0aWMgUmVmPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkNTUzo6Q1NTU2VsZWN0b3I+IGJ1aWxkT2JqZWN0Rm9yU2VsZWN0b3JIZWxw
ZXIoY29uc3QgU3RyaW5nJiBzZWxlY3RvclRleHQsIGNvbnN0IENTU1NlbGVjdG9yJiBzZWxlY3Rv
cikKK3N0YXRpYyBSZWY8UHJvdG9jb2w6OkNTUzo6Q1NTU2VsZWN0b3I+IGJ1aWxkT2JqZWN0Rm9y
U2VsZWN0b3JIZWxwZXIoY29uc3QgU3RyaW5nJiBzZWxlY3RvclRleHQsIGNvbnN0IENTU1NlbGVj
dG9yJiBzZWxlY3RvcikKIHsKLSAgICBhdXRvIGluc3BlY3RvclNlbGVjdG9yID0gSW5zcGVjdG9y
OjpQcm90b2NvbDo6Q1NTOjpDU1NTZWxlY3Rvcjo6Y3JlYXRlKCkKKyAgICBhdXRvIGluc3BlY3Rv
clNlbGVjdG9yID0gUHJvdG9jb2w6OkNTUzo6Q1NTU2VsZWN0b3I6OmNyZWF0ZSgpCiAgICAgICAg
IC5zZXRUZXh0KHNlbGVjdG9yVGV4dCkKICAgICAgICAgLnJlbGVhc2UoKTsKIApAQCAtMTA2NSwx
MSArMTA3MywxMSBAQCBzdGF0aWMgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU2Vs
ZWN0b3I+IGJ1aWxkT2JqZWN0Rm9yU2VsZWN0b3JIZWxwZXIoYwogICAgIHJldHVybiBpbnNwZWN0
b3JTZWxlY3RvcjsKIH0KIAotc3RhdGljIFJlZjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkNTUzo6Q1NTU2VsZWN0b3I+PiBzZWxlY3RvcnNGcm9tU291cmNlKGNvbnN0IENTU1J1
bGVTb3VyY2VEYXRhKiBzb3VyY2VEYXRhLCBjb25zdCBTdHJpbmcmIHNoZWV0VGV4dCwgY29uc3Qg
Q1NTU2VsZWN0b3JMaXN0JiBzZWxlY3Rvckxpc3QpCitzdGF0aWMgUmVmPEpTT046OkFycmF5T2Y8
UHJvdG9jb2w6OkNTUzo6Q1NTU2VsZWN0b3I+PiBzZWxlY3RvcnNGcm9tU291cmNlKGNvbnN0IENT
U1J1bGVTb3VyY2VEYXRhKiBzb3VyY2VEYXRhLCBjb25zdCBTdHJpbmcmIHNoZWV0VGV4dCwgY29u
c3QgQ1NTU2VsZWN0b3JMaXN0JiBzZWxlY3Rvckxpc3QpCiB7CiAgICAgc3RhdGljIE5ldmVyRGVz
dHJveWVkPEpTQzo6WWFycjo6UmVndWxhckV4cHJlc3Npb24+IGNvbW1lbnQoIi9cXCpbXl0qP1xc
Ki8iLCBKU0M6OllhcnI6OlRleHRDYXNlU2Vuc2l0aXZlLCBKU0M6OllhcnI6Ok11bHRpbGluZUVu
YWJsZWQpOwogCi0gICAgYXV0byByZXN1bHQgPSBKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkNTUzo6Q1NTU2VsZWN0b3I+OjpjcmVhdGUoKTsKKyAgICBhdXRvIHJlc3VsdCA9IEpT
T046OkFycmF5T2Y8UHJvdG9jb2w6OkNTUzo6Q1NTU2VsZWN0b3I+OjpjcmVhdGUoKTsKICAgICBj
b25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3IgPSBzZWxlY3Rvckxpc3QuZmlyc3QoKTsKICAgICBm
b3IgKGF1dG8mIHJhbmdlIDogc291cmNlRGF0YS0+c2VsZWN0b3JSYW5nZXMpIHsKICAgICAgICAg
Ly8gSWYgd2UgZG9uJ3QgaGF2ZSBhIHNlbGVjdG9yLCB0aGF0IG1lYW5zIHRoZSBTb3VyY2VEYXRh
IGZvciB0aGlzIENTU1N0eWxlU2hlZXQKQEAgLTEwODksMTcgKzEwOTcsMTcgQEAgc3RhdGljIFJl
ZjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU2VsZWN0b3I+PiBz
ZWxlY3RvcnNGcm9tU28KICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1SZWY8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6Q1NTOjpDU1NTZWxlY3Rvcj4gSW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGRPYmpl
Y3RGb3JTZWxlY3Rvcihjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3IpCitSZWY8UHJvdG9jb2w6
OkNTUzo6Q1NTU2VsZWN0b3I+IEluc3BlY3RvclN0eWxlU2hlZXQ6OmJ1aWxkT2JqZWN0Rm9yU2Vs
ZWN0b3IoY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yKQogewogICAgIHJldHVybiBidWlsZE9i
amVjdEZvclNlbGVjdG9ySGVscGVyKHNlbGVjdG9yLT5zZWxlY3RvclRleHQoKSwgKnNlbGVjdG9y
KTsKIH0KIAotUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U2VsZWN0b3JMaXN0PiBJbnNw
ZWN0b3JTdHlsZVNoZWV0OjpidWlsZE9iamVjdEZvclNlbGVjdG9yTGlzdChDU1NTdHlsZVJ1bGUq
IHJ1bGUsIGludCYgZW5kaW5nTGluZSkKK1JlZjxQcm90b2NvbDo6Q1NTOjpTZWxlY3Rvckxpc3Q+
IEluc3BlY3RvclN0eWxlU2hlZXQ6OmJ1aWxkT2JqZWN0Rm9yU2VsZWN0b3JMaXN0KENTU1N0eWxl
UnVsZSogcnVsZSwgaW50JiBlbmRpbmdMaW5lKQogewogICAgIFJlZlB0cjxDU1NSdWxlU291cmNl
RGF0YT4gc291cmNlRGF0YTsKICAgICBpZiAoZW5zdXJlUGFyc2VkRGF0YVJlYWR5KCkpCiAgICAg
ICAgIHNvdXJjZURhdGEgPSBydWxlU291cmNlRGF0YUZvcigmcnVsZS0+c3R5bGUoKSk7Ci0gICAg
UmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTZWxlY3Rv
cj4+IHNlbGVjdG9yczsKKyAgICBSZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6Q1NTOjpD
U1NTZWxlY3Rvcj4+IHNlbGVjdG9yczsKIAogICAgIC8vIFRoaXMgaW50ZW50aW9uYWxseSBkb2Vz
IG5vdCByZWx5IG9uIHRoZSBzb3VyY2UgZGF0YSB0byBhdm9pZCBjYXRjaGluZyB0aGUgdHJhaWxp
bmcgY29tbWVudHMgKGJlZm9yZSB0aGUgZGVjbGFyYXRpb24gc3RhcnRpbmcgJ3snKS4KICAgICBT
dHJpbmcgc2VsZWN0b3JUZXh0ID0gcnVsZS0+c2VsZWN0b3JUZXh0KCk7CkBAIC0xMTA3LDQxICsx
MTE1LDQyIEBAIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlNlbGVjdG9yTGlzdD4gSW5z
cGVjdG9yU3R5bGVTaGVldDo6YnVpbGRPYmplY3RGb3JTCiAgICAgaWYgKHNvdXJjZURhdGEpCiAg
ICAgICAgIHNlbGVjdG9ycyA9IHNlbGVjdG9yc0Zyb21Tb3VyY2Uoc291cmNlRGF0YS5nZXQoKSwg
bV9wYXJzZWRTdHlsZVNoZWV0LT50ZXh0KCksIHJ1bGUtPnN0eWxlUnVsZSgpLnNlbGVjdG9yTGlz
dCgpKTsKICAgICBlbHNlIHsKLSAgICAgICAgc2VsZWN0b3JzID0gSlNPTjo6QXJyYXlPZjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1NlbGVjdG9yPjo6Y3JlYXRlKCk7CisgICAgICAgIHNl
bGVjdG9ycyA9IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkNTUzo6Q1NTU2VsZWN0b3I+OjpjcmVh
dGUoKTsKICAgICAgICAgY29uc3QgQ1NTU2VsZWN0b3JMaXN0JiBzZWxlY3Rvckxpc3QgPSBydWxl
LT5zdHlsZVJ1bGUoKS5zZWxlY3Rvckxpc3QoKTsKICAgICAgICAgZm9yIChjb25zdCBDU1NTZWxl
Y3Rvciogc2VsZWN0b3IgPSBzZWxlY3Rvckxpc3QuZmlyc3QoKTsgc2VsZWN0b3I7IHNlbGVjdG9y
ID0gQ1NTU2VsZWN0b3JMaXN0OjpuZXh0KHNlbGVjdG9yKSkKICAgICAgICAgICAgIHNlbGVjdG9y
cy0+YWRkSXRlbShidWlsZE9iamVjdEZvclNlbGVjdG9yKHNlbGVjdG9yKSk7CiAgICAgfQotICAg
IGF1dG8gcmVzdWx0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTZWxlY3Rvckxpc3Q6OmNy
ZWF0ZSgpCi0gICAgICAgIC5zZXRTZWxlY3RvcnMoV1RGTW92ZShzZWxlY3RvcnMpKQorICAgIGF1
dG8gcmVzdWx0ID0gUHJvdG9jb2w6OkNTUzo6U2VsZWN0b3JMaXN0OjpjcmVhdGUoKQorICAgICAg
ICAuc2V0U2VsZWN0b3JzKHNlbGVjdG9ycy5yZWxlYXNlTm9uTnVsbCgpKQogICAgICAgICAuc2V0
VGV4dChzZWxlY3RvclRleHQpCiAgICAgICAgIC5yZWxlYXNlKCk7Ci0gICAgaWYgKHNvdXJjZURh
dGEpCi0gICAgICAgIHJlc3VsdC0+c2V0UmFuZ2UoYnVpbGRTb3VyY2VSYW5nZU9iamVjdChzb3Vy
Y2VEYXRhLT5ydWxlSGVhZGVyUmFuZ2UsIGxpbmVFbmRpbmdzKCksICZlbmRpbmdMaW5lKSk7Cisg
ICAgaWYgKHNvdXJjZURhdGEpIHsKKyAgICAgICAgaWYgKGF1dG8gcmFuZ2UgPSBidWlsZFNvdXJj
ZVJhbmdlT2JqZWN0KHNvdXJjZURhdGEtPnJ1bGVIZWFkZXJSYW5nZSwgbGluZUVuZGluZ3MoKSwg
JmVuZGluZ0xpbmUpKQorICAgICAgICAgICAgcmVzdWx0LT5zZXRSYW5nZShyYW5nZS5yZWxlYXNl
Tm9uTnVsbCgpKTsKKyAgICB9CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUnVsZT4gSW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGRP
YmplY3RGb3JSdWxlKENTU1N0eWxlUnVsZSogcnVsZSkKK1JlZlB0cjxQcm90b2NvbDo6Q1NTOjpD
U1NSdWxlPiBJbnNwZWN0b3JTdHlsZVNoZWV0OjpidWlsZE9iamVjdEZvclJ1bGUoQ1NTU3R5bGVS
dWxlKiBydWxlKQogewogICAgIENTU1N0eWxlU2hlZXQqIHN0eWxlU2hlZXQgPSBwYWdlU3R5bGVT
aGVldCgpOwogICAgIGlmICghc3R5bGVTaGVldCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAK
ICAgICBpbnQgZW5kaW5nTGluZSA9IDA7Ci0gICAgYXV0byByZXN1bHQgPSBJbnNwZWN0b3I6OlBy
b3RvY29sOjpDU1M6OkNTU1J1bGU6OmNyZWF0ZSgpCisgICAgYXV0byByZXN1bHQgPSBQcm90b2Nv
bDo6Q1NTOjpDU1NSdWxlOjpjcmVhdGUoKQogICAgICAgICAuc2V0U2VsZWN0b3JMaXN0KGJ1aWxk
T2JqZWN0Rm9yU2VsZWN0b3JMaXN0KHJ1bGUsIGVuZGluZ0xpbmUpKQogICAgICAgICAuc2V0U291
cmNlTGluZShlbmRpbmdMaW5lKQogICAgICAgICAuc2V0T3JpZ2luKG1fb3JpZ2luKQogICAgICAg
ICAuc2V0U3R5bGUoYnVpbGRPYmplY3RGb3JTdHlsZSgmcnVsZS0+c3R5bGUoKSkpCiAgICAgICAg
IC5yZWxlYXNlKCk7CiAKLSAgICBpZiAobV9vcmlnaW4gPT0gSW5zcGVjdG9yOjpQcm90b2NvbDo6
Q1NTOjpTdHlsZVNoZWV0T3JpZ2luOjpBdXRob3IgfHwgbV9vcmlnaW4gPT0gSW5zcGVjdG9yOjpQ
cm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luOjpVc2VyKQorICAgIGlmIChtX29yaWdpbiA9
PSBQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luOjpBdXRob3IgfHwgbV9vcmlnaW4gPT0g
UHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6VXNlcikKICAgICAgICAgcmVzdWx0LT5z
ZXRTb3VyY2VVUkwoZmluYWxVUkwoKSk7CiAKICAgICBpZiAoY2FuQmluZCgpKSB7Ci0gICAgICAg
IEluc3BlY3RvckNTU0lkIGlkKHJ1bGVJZChydWxlKSk7Ci0gICAgICAgIGlmICghaWQuaXNFbXB0
eSgpKQotICAgICAgICAgICAgcmVzdWx0LT5zZXRSdWxlSWQoaWQuYXNQcm90b2NvbFZhbHVlPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUnVsZUlkPigpKTsKKyAgICAgICAgaWYgKGF1dG8g
cnVsZUlkID0gdGhpcy0+cnVsZUlkKHJ1bGUpLmFzUHJvdG9jb2xWYWx1ZTxQcm90b2NvbDo6Q1NT
OjpDU1NSdWxlSWQ+KCkpCisgICAgICAgICAgICByZXN1bHQtPnNldFJ1bGVJZChydWxlSWQucmVs
ZWFzZU5vbk51bGwoKSk7CiAgICAgfQogCiAgICAgYXV0byBncm91cGluZ3NQYXlsb2FkID0gYnVp
bGRBcnJheUZvckdyb3VwaW5ncygqcnVsZSk7CkBAIC0xMTUxLDcgKzExNjAsNyBAQCBSZWZQdHI8
SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NSdWxlPiBJbnNwZWN0b3JTdHlsZVNoZWV0Ojpi
dWlsZE9iamVjdEZvclJ1bAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLVJlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlPiBJbnNwZWN0b3JTdHlsZVNoZWV0OjpidWlsZE9i
amVjdEZvclN0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKQorUmVmPFByb3RvY29sOjpD
U1M6OkNTU1N0eWxlPiBJbnNwZWN0b3JTdHlsZVNoZWV0OjpidWlsZE9iamVjdEZvclN0eWxlKENT
U1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKQogewogICAgIFJlZlB0cjxDU1NSdWxlU291cmNlRGF0
YT4gc291cmNlRGF0YTsKICAgICBpZiAoZW5zdXJlUGFyc2VkRGF0YVJlYWR5KCkpCkBAIC0xMTU5
LDEzICsxMTY4LDE1IEBAIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxl
PiBJbnNwZWN0b3JTdHlsZVNoZWV0OjpidWlsZE9iamVjdEZvclN0CiAKICAgICBJbnNwZWN0b3JD
U1NJZCBpZCA9IHJ1bGVPclN0eWxlSWQoc3R5bGUpOwogICAgIGlmIChpZC5pc0VtcHR5KCkpIHsK
LSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU6OmNyZWF0
ZSgpCi0gICAgICAgICAgICAuc2V0Q3NzUHJvcGVydGllcyhBcnJheU9mPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkNTUzo6Q1NTUHJvcGVydHk+OjpjcmVhdGUoKSkKLSAgICAgICAgICAgIC5zZXRTaG9y
dGhhbmRFbnRyaWVzKEFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTaG9ydGhhbmRF
bnRyeT46OmNyZWF0ZSgpKQorICAgICAgICByZXR1cm4gUHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU6
OmNyZWF0ZSgpCisgICAgICAgICAgICAuc2V0Q3NzUHJvcGVydGllcyhBcnJheU9mPFByb3RvY29s
OjpDU1M6OkNTU1Byb3BlcnR5Pjo6Y3JlYXRlKCkpCisgICAgICAgICAgICAuc2V0U2hvcnRoYW5k
RW50cmllcyhBcnJheU9mPFByb3RvY29sOjpDU1M6OlNob3J0aGFuZEVudHJ5Pjo6Y3JlYXRlKCkp
CiAgICAgICAgICAgICAucmVsZWFzZSgpOwogICAgIH0KKwogICAgIFJlZlB0cjxJbnNwZWN0b3JT
dHlsZT4gaW5zcGVjdG9yU3R5bGUgPSBpbnNwZWN0b3JTdHlsZUZvcklkKGlkKTsKLSAgICBSZWZQ
dHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4gcmVzdWx0ID0gaW5zcGVjdG9y
U3R5bGUtPmJ1aWxkT2JqZWN0Rm9yU3R5bGUoKTsKKworICAgIGF1dG8gcmVzdWx0ID0gaW5zcGVj
dG9yU3R5bGUtPmJ1aWxkT2JqZWN0Rm9yU3R5bGUoKTsKIAogICAgIC8vIFN0eWxlIHRleHQgY2Fu
bm90IGJlIHJldHJpZXZlZCB3aXRob3V0IHN0eWxlc2hlZXQsIHNvIHNldCBjc3NUZXh0IGhlcmUu
CiAgICAgaWYgKHNvdXJjZURhdGEpIHsKQEAgLTEyNzQsNyArMTI4NSw3IEBAIGJvb2wgSW5zcGVj
dG9yU3R5bGVTaGVldDo6c3R5bGVTaGVldE11dGF0ZWQoKSBjb25zdAogCiBib29sIEluc3BlY3Rv
clN0eWxlU2hlZXQ6OmVuc3VyZVBhcnNlZERhdGFSZWFkeSgpCiB7Ci0gICAgYm9vbCBhbGxvd1Bh
cnNlZERhdGEgPSBtX29yaWdpbiA9PSBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlN0eWxlU2hl
ZXRPcmlnaW46Okluc3BlY3RvciB8fCAhc3R5bGVTaGVldE11dGF0ZWQoKTsKKyAgICBib29sIGFs
bG93UGFyc2VkRGF0YSA9IG1fb3JpZ2luID09IFByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRPcmln
aW46Okluc3BlY3RvciB8fCAhc3R5bGVTaGVldE11dGF0ZWQoKTsKICAgICByZXR1cm4gYWxsb3dQ
YXJzZWREYXRhICYmIGVuc3VyZVRleHQoKSAmJiBlbnN1cmVTb3VyY2VEYXRhKCk7CiB9CiAKQEAg
LTEzNzEsNyArMTM4Miw3IEBAIEluc3BlY3RvckNTU0lkIEluc3BlY3RvclN0eWxlU2hlZXQ6OnJ1
bGVJZChDU1NTdHlsZVJ1bGUqIHJ1bGUpIGNvbnN0CiAKIGJvb2wgSW5zcGVjdG9yU3R5bGVTaGVl
dDo6b3JpZ2luYWxTdHlsZVNoZWV0VGV4dChTdHJpbmcqIHJlc3VsdCkgY29uc3QKIHsKLSAgICBp
ZiAoIW1fcGFnZVN0eWxlU2hlZXQgfHwgbV9vcmlnaW4gPT0gSW5zcGVjdG9yOjpQcm90b2NvbDo6
Q1NTOjpTdHlsZVNoZWV0T3JpZ2luOjpVc2VyQWdlbnQpCisgICAgaWYgKCFtX3BhZ2VTdHlsZVNo
ZWV0IHx8IG1fb3JpZ2luID09IFByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW46OlVzZXJB
Z2VudCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiBpbmxpbmVTdHlsZVNoZWV0
VGV4dChyZXN1bHQpIHx8IHJlc291cmNlU3R5bGVTaGVldFRleHQocmVzdWx0KSB8fCBleHRlbnNp
b25TdHlsZVNoZWV0VGV4dChyZXN1bHQpOwogfQpAQCAtMTQxNCw5ICsxNDI1LDkgQEAgYm9vbCBJ
bnNwZWN0b3JTdHlsZVNoZWV0OjpleHRlbnNpb25TdHlsZVNoZWV0VGV4dChTdHJpbmcqIHJlc3Vs
dCkgY29uc3QKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotUmVmPEpTT046OkFycmF5T2Y8SW5zcGVj
dG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NSdWxlPj4gSW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGRB
cnJheUZvclJ1bGVMaXN0KENTU1J1bGVMaXN0KiBydWxlTGlzdCkKK1JlZjxKU09OOjpBcnJheU9m
PFByb3RvY29sOjpDU1M6OkNTU1J1bGU+PiBJbnNwZWN0b3JTdHlsZVNoZWV0OjpidWlsZEFycmF5
Rm9yUnVsZUxpc3QoQ1NTUnVsZUxpc3QqIHJ1bGVMaXN0KQogewotICAgIGF1dG8gcmVzdWx0ID0g
SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1J1bGU+OjpjcmVhdGUo
KTsKKyAgICBhdXRvIHJlc3VsdCA9IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkNTUzo6Q1NTUnVs
ZT46OmNyZWF0ZSgpOwogICAgIGlmICghcnVsZUxpc3QpCiAgICAgICAgIHJldHVybiByZXN1bHQ7
CiAKQEAgLTE0MjQsOCArMTQzNSwxMCBAQCBSZWY8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpDU1M6OkNTU1J1bGU+PiBJbnNwZWN0b3JTdHlsZVNoZWV0OjpidWlsZAogICAgIENT
U1N0eWxlUnVsZVZlY3RvciBydWxlczsKICAgICBjb2xsZWN0RmxhdFJ1bGVzKFdURk1vdmUocmVm
UnVsZUxpc3QpLCAmcnVsZXMpOwogCi0gICAgZm9yIChhdXRvJiBydWxlIDogcnVsZXMpCi0gICAg
ICAgIHJlc3VsdC0+YWRkSXRlbShidWlsZE9iamVjdEZvclJ1bGUocnVsZS5nZXQoKSkpOworICAg
IGZvciAoYXV0byYgcnVsZSA6IHJ1bGVzKSB7CisgICAgICAgIGlmIChhdXRvIHJ1bGVPYmplY3Qg
PSBidWlsZE9iamVjdEZvclJ1bGUocnVsZS5nZXQoKSkpCisgICAgICAgICAgICByZXN1bHQtPmFk
ZEl0ZW0ocnVsZU9iamVjdC5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICB9CiAKICAgICByZXR1cm4g
cmVzdWx0OwogfQpAQCAtMTQ0OCwxMiArMTQ2MSwxMiBAQCB2b2lkIEluc3BlY3RvclN0eWxlU2hl
ZXQ6OmNvbGxlY3RGbGF0UnVsZXMoUmVmUHRyPENTU1J1bGVMaXN0PiYmIHJ1bGVMaXN0LCBDU1NT
dAogICAgIH0KIH0KIAotUmVmPEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZT4gSW5z
cGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlOjpjcmVhdGUoSW5zcGVjdG9yUGFnZUFnZW50
KiBwYWdlQWdlbnQsIGNvbnN0IFN0cmluZyYgaWQsIFJlZjxTdHlsZWRFbGVtZW50PiYmIGVsZW1l
bnQsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbiBvcmlnaW4sIExp
c3RlbmVyKiBsaXN0ZW5lcikKK1JlZjxJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU+
IEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZTo6Y3JlYXRlKEluc3BlY3RvclBhZ2VB
Z2VudCogcGFnZUFnZW50LCBjb25zdCBTdHJpbmcmIGlkLCBSZWY8U3R5bGVkRWxlbWVudD4mJiBl
bGVtZW50LCBQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luIG9yaWdpbiwgTGlzdGVuZXIq
IGxpc3RlbmVyKQogewogICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEluc3BlY3RvclN0eWxlU2hl
ZXRGb3JJbmxpbmVTdHlsZShwYWdlQWdlbnQsIGlkLCBXVEZNb3ZlKGVsZW1lbnQpLCBvcmlnaW4s
IGxpc3RlbmVyKSk7CiB9CiAKLUluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZTo6SW5z
cGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlKEluc3BlY3RvclBhZ2VBZ2VudCogcGFnZUFn
ZW50LCBjb25zdCBTdHJpbmcmIGlkLCBSZWY8U3R5bGVkRWxlbWVudD4mJiBlbGVtZW50LCBJbnNw
ZWN0b3I6OlByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW4gb3JpZ2luLCBMaXN0ZW5lciog
bGlzdGVuZXIpCitJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU6Okluc3BlY3RvclN0
eWxlU2hlZXRGb3JJbmxpbmVTdHlsZShJbnNwZWN0b3JQYWdlQWdlbnQqIHBhZ2VBZ2VudCwgY29u
c3QgU3RyaW5nJiBpZCwgUmVmPFN0eWxlZEVsZW1lbnQ+JiYgZWxlbWVudCwgUHJvdG9jb2w6OkNT
Uzo6U3R5bGVTaGVldE9yaWdpbiBvcmlnaW4sIExpc3RlbmVyKiBsaXN0ZW5lcikKICAgICA6IElu
c3BlY3RvclN0eWxlU2hlZXQocGFnZUFnZW50LCBpZCwgbnVsbHB0ciwgb3JpZ2luLCBTdHJpbmco
KSwgbGlzdGVuZXIpCiAgICAgLCBtX2VsZW1lbnQoV1RGTW92ZShlbGVtZW50KSkKICAgICAsIG1f
cnVsZVNvdXJjZURhdGEobnVsbHB0cikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yU3R5bGVTaGVldC5oCmluZGV4IDczZDM2MThlNWE0OGEzNzQ1NzYyNmRkNTQ4ZGNlN2Uz
NmIxZGUxMzUuLjc4ZjE0ZDI5MTZiYWE1YzM3ZTAxMDkzOTJmMjFlZjY2YTY1NWY3NmMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuaApAQCAtNDUs
MTggKzQ1LDE5IEBAIGNsYXNzIEVsZW1lbnQ7CiBjbGFzcyBJbnNwZWN0b3JQYWdlQWdlbnQ7CiBj
bGFzcyBJbnNwZWN0b3JTdHlsZVNoZWV0OwogCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsK
LQogY2xhc3MgSW5zcGVjdG9yQ1NTSWQgewogcHVibGljOgogICAgIEluc3BlY3RvckNTU0lkKCkg
PSBkZWZhdWx0OwogCiAgICAgZXhwbGljaXQgSW5zcGVjdG9yQ1NTSWQoY29uc3QgSlNPTjo6T2Jq
ZWN0JiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIGlmICghdmFsdWUuZ2V0U3RyaW5nKCJzdHlsZVNo
ZWV0SWQiX3MsIG1fc3R5bGVTaGVldElkKSkKKyAgICAgICAgbV9zdHlsZVNoZWV0SWQgPSB2YWx1
ZS5nZXRTdHJpbmcoInN0eWxlU2hlZXRJZCJfcyk7CisgICAgICAgIGlmICghbV9zdHlsZVNoZWV0
SWQpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgaWYgKCF2YWx1ZS5nZXRJbnRlZ2Vy
KCJvcmRpbmFsIl9zLCBtX29yZGluYWwpKQorICAgICAgICBpZiAoYXV0byBvcmRpbmFsID0gdmFs
dWUuZ2V0SW50ZWdlcigib3JkaW5hbCJfcykpCisgICAgICAgICAgICBtX29yZGluYWwgPSAqb3Jk
aW5hbDsKKyAgICAgICAgZWxzZQogICAgICAgICAgICAgbV9zdHlsZVNoZWV0SWQgPSBTdHJpbmco
KTsKICAgICB9CiAKQEAgLTEyNiw3ICsxMjcsNyBAQCBwdWJsaWM6CiAgICAgfkluc3BlY3RvclN0
eWxlKCk7CiAKICAgICBDU1NTdHlsZURlY2xhcmF0aW9uJiBjc3NTdHlsZSgpIGNvbnN0IHsgcmV0
dXJuIG1fc3R5bGUuZ2V0KCk7IH0KLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NT
OjpDU1NTdHlsZT4gYnVpbGRPYmplY3RGb3JTdHlsZSgpIGNvbnN0OworICAgIFJlZjxJbnNwZWN0
b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlPiBidWlsZE9iamVjdEZvclN0eWxlKCkgY29uc3Q7
CiAgICAgUmVmPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NDb21w
dXRlZFN0eWxlUHJvcGVydHk+PiBidWlsZEFycmF5Rm9yQ29tcHV0ZWRTdHlsZSgpIGNvbnN0Owog
CiAgICAgRXhjZXB0aW9uT3I8U3RyaW5nPiB0ZXh0KCkgY29uc3Q7CkBAIC0xNzUsNyArMTc2LDcg
QEAgcHVibGljOgogICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxl
U2hlZXRCb2R5PiBidWlsZE9iamVjdEZvclN0eWxlU2hlZXQoKTsKICAgICBSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZVNoZWV0SGVhZGVyPiBidWlsZE9iamVjdEZvclN0
eWxlU2hlZXRJbmZvKCk7CiAgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NT
UnVsZT4gYnVpbGRPYmplY3RGb3JSdWxlKENTU1N0eWxlUnVsZSopOwotICAgIFJlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlPiBidWlsZE9iamVjdEZvclN0eWxlKENTU1N0
eWxlRGVjbGFyYXRpb24qKTsKKyAgICBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NT
dHlsZT4gYnVpbGRPYmplY3RGb3JTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKik7CiAgICAgRXhj
ZXB0aW9uT3I8dm9pZD4gc2V0U3R5bGVUZXh0KGNvbnN0IEluc3BlY3RvckNTU0lkJiwgY29uc3Qg
U3RyaW5nJiB0ZXh0LCBTdHJpbmcqIG9sZFRleHQpOwogCiAgICAgdmlydHVhbCBFeGNlcHRpb25P
cjxTdHJpbmc+IHRleHQoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9UaW1lbGluZVJlY29yZEZhY3RvcnkuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L1RpbWVsaW5lUmVjb3JkRmFjdG9yeS5jcHAKaW5kZXggMzYzZDE2OGU4MDVlYTNmODdkN2JjOWQ4
MjlkNDZkZTZjYmY1MmFhZS4uYTA3MDMzNmI3NTYxZGE4NWVjYjVmZmY0YzE0YjYxYmZmMzk2MjEz
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1RpbWVsaW5lUmVjb3JkRmFj
dG9yeS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1RpbWVsaW5lUmVjb3JkRmFj
dG9yeS5jcHAKQEAgLTE2MSw5ICsxNjEsOSBAQCBSZWY8SlNPTjo6T2JqZWN0PiBUaW1lbGluZVJl
Y29yZEZhY3Rvcnk6OmNyZWF0ZVBhaW50RGF0YShjb25zdCBGbG9hdFF1YWQmIHF1YWQpCiAgICAg
cmV0dXJuIGRhdGE7CiB9CiAKLXZvaWQgVGltZWxpbmVSZWNvcmRGYWN0b3J5OjphcHBlbmRMYXlv
dXRSb290KEpTT046Ok9iamVjdCogZGF0YSwgY29uc3QgRmxvYXRRdWFkJiBxdWFkKQordm9pZCBU
aW1lbGluZVJlY29yZEZhY3Rvcnk6OmFwcGVuZExheW91dFJvb3QoSlNPTjo6T2JqZWN0JiBkYXRh
LCBjb25zdCBGbG9hdFF1YWQmIHF1YWQpCiB7Ci0gICAgZGF0YS0+c2V0QXJyYXkoInJvb3QiX3Ms
IGNyZWF0ZVF1YWQocXVhZCkpOworICAgIGRhdGEuc2V0QXJyYXkoInJvb3QiX3MsIGNyZWF0ZVF1
YWQocXVhZCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvVGltZWxpbmVSZWNvcmRGYWN0b3J5LmggYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvVGltZWxpbmVSZWNvcmRGYWN0b3J5LmgKaW5kZXggNDhmNDMwZTliZWQ5
M2QxYWZkMmJhMzZlNTk1N2U3ZWYwNjE4YjNhYS4uY2E1ZGI0MTA4OThkYjkzY2QwYTM1YzI2Mjc5
MDljMWQ0OWUxYzI2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1RpbWVs
aW5lUmVjb3JkRmFjdG9yeS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9UaW1lbGlu
ZVJlY29yZEZhY3RvcnkuaApAQCAtNTksNyArNTksNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFJl
ZjxKU09OOjpPYmplY3Q+IGNyZWF0ZU9ic2VydmVyQ2FsbGJhY2tEYXRhKGNvbnN0IFN0cmluZyYg
Y2FsbGJhY2tUeXBlKTsKICAgICBzdGF0aWMgUmVmPEpTT046Ok9iamVjdD4gY3JlYXRlUGFpbnRE
YXRhKGNvbnN0IEZsb2F0UXVhZCYpOwogCi0gICAgc3RhdGljIHZvaWQgYXBwZW5kTGF5b3V0Um9v
dChKU09OOjpPYmplY3QqIGRhdGEsIGNvbnN0IEZsb2F0UXVhZCYpOworICAgIHN0YXRpYyB2b2lk
IGFwcGVuZExheW91dFJvb3QoSlNPTjo6T2JqZWN0JiBkYXRhLCBjb25zdCBGbG9hdFF1YWQmKTsK
IAogcHJpdmF0ZToKICAgICBUaW1lbGluZVJlY29yZEZhY3RvcnkoKSB7IH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQW5pbWF0aW9uQWdlbnQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBbmltYXRpb25B
Z2VudC5jcHAKaW5kZXggNzEzMjVmNTIyZDNhMTIzYTUzNGZjN2ZmM2E1ODRiNThiYzk0ZjkzNi4u
MDI1NzEyYjA5NDY0ZWM2YjE1NDdlY2Y3MDY2ZTIwYmRmYWJmNDFjZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBbmltYXRpb25BZ2VudC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBbmltYXRpb25B
Z2VudC5jcHAKQEAgLTcyLDQ1ICs3Miw0NSBAQCBzdGF0aWMgT3B0aW9uYWw8ZG91YmxlPiBwcm90
b2NvbFZhbHVlRm9yU2Vjb25kcyhjb25zdCBTZWNvbmRzJiBzZWNvbmRzKQogICAgIHJldHVybiBz
ZWNvbmRzLm1pbGxpc2Vjb25kcygpOwogfQogCi1zdGF0aWMgT3B0aW9uYWw8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6QW5pbWF0aW9uOjpQbGF5YmFja0RpcmVjdGlvbj4gcHJvdG9jb2xWYWx1ZUZvclBs
YXliYWNrRGlyZWN0aW9uKFBsYXliYWNrRGlyZWN0aW9uIHBsYXliYWNrRGlyZWN0aW9uKQorc3Rh
dGljIE9wdGlvbmFsPFByb3RvY29sOjpBbmltYXRpb246OlBsYXliYWNrRGlyZWN0aW9uPiBwcm90
b2NvbFZhbHVlRm9yUGxheWJhY2tEaXJlY3Rpb24oUGxheWJhY2tEaXJlY3Rpb24gcGxheWJhY2tE
aXJlY3Rpb24pCiB7CiAgICAgc3dpdGNoIChwbGF5YmFja0RpcmVjdGlvbikgewogICAgIGNhc2Ug
UGxheWJhY2tEaXJlY3Rpb246Ok5vcm1hbDoKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkFuaW1hdGlvbjo6UGxheWJhY2tEaXJlY3Rpb246Ok5vcm1hbDsKKyAgICAgICAgcmV0
dXJuIFByb3RvY29sOjpBbmltYXRpb246OlBsYXliYWNrRGlyZWN0aW9uOjpOb3JtYWw7CiAgICAg
Y2FzZSBQbGF5YmFja0RpcmVjdGlvbjo6UmV2ZXJzZToKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkFuaW1hdGlvbjo6UGxheWJhY2tEaXJlY3Rpb246OlJldmVyc2U7CisgICAg
ICAgIHJldHVybiBQcm90b2NvbDo6QW5pbWF0aW9uOjpQbGF5YmFja0RpcmVjdGlvbjo6UmV2ZXJz
ZTsKICAgICBjYXNlIFBsYXliYWNrRGlyZWN0aW9uOjpBbHRlcm5hdGU6Ci0gICAgICAgIHJldHVy
biBJbnNwZWN0b3I6OlByb3RvY29sOjpBbmltYXRpb246OlBsYXliYWNrRGlyZWN0aW9uOjpBbHRl
cm5hdGU7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6QW5pbWF0aW9uOjpQbGF5YmFja0RpcmVj
dGlvbjo6QWx0ZXJuYXRlOwogICAgIGNhc2UgUGxheWJhY2tEaXJlY3Rpb246OkFsdGVybmF0ZVJl
dmVyc2U6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpBbmltYXRpb246OlBs
YXliYWNrRGlyZWN0aW9uOjpBbHRlcm5hdGVSZXZlcnNlOworICAgICAgICByZXR1cm4gUHJvdG9j
b2w6OkFuaW1hdGlvbjo6UGxheWJhY2tEaXJlY3Rpb246OkFsdGVybmF0ZVJldmVyc2U7CiAgICAg
fQogCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
IH0KIAotc3RhdGljIE9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFuaW1hdGlvbjo6Rmls
bE1vZGU+IHByb3RvY29sVmFsdWVGb3JGaWxsTW9kZShGaWxsTW9kZSBmaWxsTW9kZSkKK3N0YXRp
YyBPcHRpb25hbDxQcm90b2NvbDo6QW5pbWF0aW9uOjpGaWxsTW9kZT4gcHJvdG9jb2xWYWx1ZUZv
ckZpbGxNb2RlKEZpbGxNb2RlIGZpbGxNb2RlKQogewogICAgIHN3aXRjaCAoZmlsbE1vZGUpIHsK
ICAgICBjYXNlIEZpbGxNb2RlOjpOb25lOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90
b2NvbDo6QW5pbWF0aW9uOjpGaWxsTW9kZTo6Tm9uZTsKKyAgICAgICAgcmV0dXJuIFByb3RvY29s
OjpBbmltYXRpb246OkZpbGxNb2RlOjpOb25lOwogICAgIGNhc2UgRmlsbE1vZGU6OkZvcndhcmRz
OgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6QW5pbWF0aW9uOjpGaWxsTW9k
ZTo6Rm9yd2FyZHM7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6QW5pbWF0aW9uOjpGaWxsTW9k
ZTo6Rm9yd2FyZHM7CiAgICAgY2FzZSBGaWxsTW9kZTo6QmFja3dhcmRzOgotICAgICAgICByZXR1
cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6QW5pbWF0aW9uOjpGaWxsTW9kZTo6QmFja3dhcmRzOwor
ICAgICAgICByZXR1cm4gUHJvdG9jb2w6OkFuaW1hdGlvbjo6RmlsbE1vZGU6OkJhY2t3YXJkczsK
ICAgICBjYXNlIEZpbGxNb2RlOjpCb3RoOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90
b2NvbDo6QW5pbWF0aW9uOjpGaWxsTW9kZTo6Qm90aDsKKyAgICAgICAgcmV0dXJuIFByb3RvY29s
OjpBbmltYXRpb246OkZpbGxNb2RlOjpCb3RoOwogICAgIGNhc2UgRmlsbE1vZGU6OkF1dG86Ci0g
ICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpBbmltYXRpb246OkZpbGxNb2RlOjpB
dXRvOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OkFuaW1hdGlvbjo6RmlsbE1vZGU6OkF1dG87
CiAgICAgfQogCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKIH0KIAotc3RhdGljIFJlZjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkFuaW1hdGlvbjo6S2V5ZnJhbWU+PiBidWlsZE9iamVjdEZvcktleWZyYW1lcyhLZXlmcmFtZUVm
ZmVjdCYga2V5ZnJhbWVFZmZlY3QpCitzdGF0aWMgUmVmPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6
OkFuaW1hdGlvbjo6S2V5ZnJhbWU+PiBidWlsZE9iamVjdEZvcktleWZyYW1lcyhLZXlmcmFtZUVm
ZmVjdCYga2V5ZnJhbWVFZmZlY3QpCiB7Ci0gICAgYXV0byBrZXlmcmFtZXNQYXlsb2FkID0gSlNP
Tjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpBbmltYXRpb246OktleWZyYW1lPjo6Y3Jl
YXRlKCk7CisgICAgYXV0byBrZXlmcmFtZXNQYXlsb2FkID0gSlNPTjo6QXJyYXlPZjxQcm90b2Nv
bDo6QW5pbWF0aW9uOjpLZXlmcmFtZT46OmNyZWF0ZSgpOwogCiAgICAgY29uc3QgYXV0byYgYmxl
bmRpbmdLZXlmcmFtZXMgPSBrZXlmcmFtZUVmZmVjdC5ibGVuZGluZ0tleWZyYW1lcygpOwogICAg
IGNvbnN0IGF1dG8mIHBhcnNlZEtleWZyYW1lcyA9IGtleWZyYW1lRWZmZWN0LnBhcnNlZEtleWZy
YW1lcygpOwpAQCAtMTMwLDcgKzEzMCw3IEBAIHN0YXRpYyBSZWY8SlNPTjo6QXJyYXlPZjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpBbmltYXRpb246OktleWZyYW1lPj4gYnVpbGRPYmplY3RGCiAgICAg
ICAgICAgICBBU1NFUlQoYmxlbmRpbmdLZXlmcmFtZS5zdHlsZSgpKTsKICAgICAgICAgICAgIGF1
dG8mIHN0eWxlID0gKmJsZW5kaW5nS2V5ZnJhbWUuc3R5bGUoKTsKIAotICAgICAgICAgICAgYXV0
byBrZXlmcmFtZVBheWxvYWQgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBbmltYXRpb246OktleWZy
YW1lOjpjcmVhdGUoKQorICAgICAgICAgICAgYXV0byBrZXlmcmFtZVBheWxvYWQgPSBQcm90b2Nv
bDo6QW5pbWF0aW9uOjpLZXlmcmFtZTo6Y3JlYXRlKCkKICAgICAgICAgICAgICAgICAuc2V0T2Zm
c2V0KGJsZW5kaW5nS2V5ZnJhbWUua2V5KCkpCiAgICAgICAgICAgICAgICAgLnJlbGVhc2UoKTsK
IApAQCAtMTY3LDcgKzE2Nyw3IEBAIHN0YXRpYyBSZWY8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6
OlByb3RvY29sOjpBbmltYXRpb246OktleWZyYW1lPj4gYnVpbGRPYmplY3RGCiAgICAgICAgIH0K
ICAgICB9IGVsc2UgewogICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHBhcnNlZEtleWZyYW1lIDog
cGFyc2VkS2V5ZnJhbWVzKSB7Ci0gICAgICAgICAgICBhdXRvIGtleWZyYW1lUGF5bG9hZCA9IElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkFuaW1hdGlvbjo6S2V5ZnJhbWU6OmNyZWF0ZSgpCisgICAgICAg
ICAgICBhdXRvIGtleWZyYW1lUGF5bG9hZCA9IFByb3RvY29sOjpBbmltYXRpb246OktleWZyYW1l
OjpjcmVhdGUoKQogICAgICAgICAgICAgICAgIC5zZXRPZmZzZXQocGFyc2VkS2V5ZnJhbWUuY29t
cHV0ZWRPZmZzZXQpCiAgICAgICAgICAgICAgICAgLnJlbGVhc2UoKTsKIApAQCAtMTg2LDkgKzE4
Niw5IEBAIHN0YXRpYyBSZWY8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpBbmlt
YXRpb246OktleWZyYW1lPj4gYnVpbGRPYmplY3RGCiAgICAgcmV0dXJuIGtleWZyYW1lc1BheWxv
YWQ7CiB9CiAKLXN0YXRpYyBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6QW5pbWF0aW9uOjpFZmZl
Y3Q+IGJ1aWxkT2JqZWN0Rm9yRWZmZWN0KEFuaW1hdGlvbkVmZmVjdCYgZWZmZWN0KQorc3RhdGlj
IFJlZjxQcm90b2NvbDo6QW5pbWF0aW9uOjpFZmZlY3Q+IGJ1aWxkT2JqZWN0Rm9yRWZmZWN0KEFu
aW1hdGlvbkVmZmVjdCYgZWZmZWN0KQogewotICAgIGF1dG8gZWZmZWN0UGF5bG9hZCA9IEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkFuaW1hdGlvbjo6RWZmZWN0OjpjcmVhdGUoKQorICAgIGF1dG8gZWZm
ZWN0UGF5bG9hZCA9IFByb3RvY29sOjpBbmltYXRpb246OkVmZmVjdDo6Y3JlYXRlKCkKICAgICAg
ICAgLnJlbGVhc2UoKTsKIAogICAgIGlmIChhdXRvIHN0YXJ0RGVsYXkgPSBwcm90b2NvbFZhbHVl
Rm9yU2Vjb25kcyhlZmZlY3QuZGVsYXkoKSkpCkBAIC0yMzgsMjAgKzIzOCwxNyBAQCB2b2lkIElu
c3BlY3RvckFuaW1hdGlvbkFnZW50OjpkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoRnJvbnRl
bmRSb3V0ZXIqLCBCYWNrZQogCiB2b2lkIEluc3BlY3RvckFuaW1hdGlvbkFnZW50Ojp3aWxsRGVz
dHJveUZyb250ZW5kQW5kQmFja2VuZChEaXNjb25uZWN0UmVhc29uKQogewotICAgIEVycm9yU3Ry
aW5nIGlnbm9yZWQ7Ci0gICAgc3RvcFRyYWNraW5nKGlnbm9yZWQpOwotICAgIGRpc2FibGUoaWdu
b3JlZCk7CisgICAgc3RvcFRyYWNraW5nKCk7CisgICAgZGlzYWJsZSgpOwogCiAgICAgQVNTRVJU
KG1faW5zdHJ1bWVudGluZ0FnZW50cy5wZXJzaXN0ZW50QW5pbWF0aW9uQWdlbnQoKSA9PSB0aGlz
KTsKICAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMuc2V0UGVyc2lzdGVudEFuaW1hdGlvbkFnZW50
KG51bGxwdHIpOwogfQogCi12b2lkIEluc3BlY3RvckFuaW1hdGlvbkFnZW50OjplbmFibGUoRXJy
b3JTdHJpbmcmIGVycm9yU3RyaW5nKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5z
cGVjdG9yQW5pbWF0aW9uQWdlbnQ6OmVuYWJsZSgpCiB7Ci0gICAgaWYgKG1faW5zdHJ1bWVudGlu
Z0FnZW50cy5lbmFibGVkQW5pbWF0aW9uQWdlbnQoKSA9PSB0aGlzKSB7Ci0gICAgICAgIGVycm9y
U3RyaW5nID0gIkFuaW1hdGlvbiBkb21haW4gYWxyZWFkeSBlbmFibGVkIl9zOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQorICAgIGlmIChtX2luc3RydW1lbnRpbmdBZ2VudHMuZW5hYmxlZEFuaW1h
dGlvbkFnZW50KCkgPT0gdGhpcykKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJBbmlt
YXRpb24gZG9tYWluIGFscmVhZHkgZW5hYmxlZCJfcyk7CiAKICAgICBtX2luc3RydW1lbnRpbmdB
Z2VudHMuc2V0RW5hYmxlZEFuaW1hdGlvbkFnZW50KHRoaXMpOwogCkBAIC0yNzAsNDkgKzI2Nyw1
MSBAQCB2b2lkIEluc3BlY3RvckFuaW1hdGlvbkFnZW50OjplbmFibGUoRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nKQogICAgICAgICAgICAgICAgIGJpbmRBbmltYXRpb24oKmFuaW1hdGlvbiwgZmFs
c2UpOwogICAgICAgICB9CiAgICAgfQorCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNw
ZWN0b3JBbmltYXRpb25BZ2VudDo6ZGlzYWJsZShFcnJvclN0cmluZyYpCitQcm90b2NvbDo6RXJy
b3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JBbmltYXRpb25BZ2VudDo6ZGlzYWJsZSgpCiB7CiAg
ICAgbV9pbnN0cnVtZW50aW5nQWdlbnRzLnNldEVuYWJsZWRBbmltYXRpb25BZ2VudChudWxscHRy
KTsKIAogICAgIHJlc2V0KCk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3Rv
ckFuaW1hdGlvbkFnZW50OjpyZXF1ZXN0RWZmZWN0VGFyZ2V0KEVycm9yU3RyaW5nJiBlcnJvclN0
cmluZywgY29uc3QgU3RyaW5nJiBhbmltYXRpb25JZCwgaW50KiBub2RlSWQpCitQcm90b2NvbDo6
RXJyb3JTdHJpbmdPcjxQcm90b2NvbDo6RE9NOjpOb2RlSWQ+IEluc3BlY3RvckFuaW1hdGlvbkFn
ZW50OjpyZXF1ZXN0RWZmZWN0VGFyZ2V0KGNvbnN0IFByb3RvY29sOjpBbmltYXRpb246OkFuaW1h
dGlvbklkJiBhbmltYXRpb25JZCkKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JT
dHJpbmc7CisKICAgICBhdXRvKiBhbmltYXRpb24gPSBhc3NlcnRBbmltYXRpb24oZXJyb3JTdHJp
bmcsIGFuaW1hdGlvbklkKTsKICAgICBpZiAoIWFuaW1hdGlvbikKLSAgICAgICAgcmV0dXJuOwor
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCiAgICAgYXV0byog
ZG9tQWdlbnQgPSBtX2luc3RydW1lbnRpbmdBZ2VudHMucGVyc2lzdGVudERPTUFnZW50KCk7Ci0g
ICAgaWYgKCFkb21BZ2VudCkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJET00gZG9tYWluIG11
c3QgYmUgZW5hYmxlZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoIWRvbUFn
ZW50KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkRPTSBkb21haW4gbXVzdCBiZSBl
bmFibGVkIl9zKTsKIAogICAgIGF1dG8qIGVmZmVjdCA9IGFuaW1hdGlvbi0+ZWZmZWN0KCk7Ci0g
ICAgaWYgKCFpczxLZXlmcmFtZUVmZmVjdD4oZWZmZWN0KSkgewotICAgICAgICBlcnJvclN0cmlu
ZyA9ICJBbmltYXRpb24gZm9yIGdpdmVuIGFuaW1hdGlvbklkIGRvZXMgbm90IGhhdmUgYW4gZWZm
ZWN0Il9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghaXM8S2V5ZnJhbWVFZmZl
Y3Q+KGVmZmVjdCkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiQW5pbWF0aW9uIGZv
ciBnaXZlbiBhbmltYXRpb25JZCBkb2VzIG5vdCBoYXZlIGFuIGVmZmVjdCJfcyk7CiAKICAgICBh
dXRvJiBrZXlmcmFtZUVmZmVjdCA9IGRvd25jYXN0PEtleWZyYW1lRWZmZWN0PigqZWZmZWN0KTsK
IAogICAgIGF1dG8qIHRhcmdldCA9IGtleWZyYW1lRWZmZWN0LnRhcmdldEVsZW1lbnRPclBzZXVk
b0VsZW1lbnQoKTsKLSAgICBpZiAoIXRhcmdldCkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJB
bmltYXRpb24gZm9yIGdpdmVuIGFuaW1hdGlvbklkIGRvZXMgbm90IGhhdmUgYSB0YXJnZXQiX3M7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKCF0YXJnZXQpCisgICAgICAgIHJldHVy
biBtYWtlVW5leHBlY3RlZCgiQW5pbWF0aW9uIGZvciBnaXZlbiBhbmltYXRpb25JZCBkb2VzIG5v
dCBoYXZlIGEgdGFyZ2V0Il9zKTsKIAotICAgICpub2RlSWQgPSBkb21BZ2VudC0+cHVzaE5vZGVQ
YXRoVG9Gcm9udGVuZChlcnJvclN0cmluZywgdGFyZ2V0KTsKKyAgICByZXR1cm4gZG9tQWdlbnQt
PnB1c2hOb2RlUGF0aFRvRnJvbnRlbmQoZXJyb3JTdHJpbmcsIHRhcmdldCk7CiB9CiAKLXZvaWQg
SW5zcGVjdG9yQW5pbWF0aW9uQWdlbnQ6OnJlc29sdmVBbmltYXRpb24oRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGFuaW1hdGlvbklkLCBjb25zdCBTdHJpbmcqIG9iamVj
dEdyb3VwLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0
PiYgcmVzdWx0KQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPFByb3RvY29sOjpSdW50aW1l
OjpSZW1vdGVPYmplY3Q+PiBJbnNwZWN0b3JBbmltYXRpb25BZ2VudDo6cmVzb2x2ZUFuaW1hdGlv
bihjb25zdCBQcm90b2NvbDo6QW5pbWF0aW9uOjpBbmltYXRpb25JZCYgYW5pbWF0aW9uSWQsIGNv
bnN0IFN0cmluZyYgb2JqZWN0R3JvdXApCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVy
cm9yU3RyaW5nOworCiAgICAgYXV0byogYW5pbWF0aW9uID0gYXNzZXJ0QW5pbWF0aW9uKGVycm9y
U3RyaW5nLCBhbmltYXRpb25JZCk7CiAgICAgaWYgKCFhbmltYXRpb24pCi0gICAgICAgIHJldHVy
bjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgIGF1
dG8qIHN0YXRlID0gYW5pbWF0aW9uLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmV4ZWNTdGF0
ZSgpOwogICAgIGF1dG8gaW5qZWN0ZWRTY3JpcHQgPSBtX2luamVjdGVkU2NyaXB0TWFuYWdlci5p
bmplY3RlZFNjcmlwdEZvcihzdGF0ZSk7CkBAIC0zMjgsMzggKzMyNyw0MiBAQCB2b2lkIEluc3Bl
Y3RvckFuaW1hdGlvbkFnZW50OjpyZXNvbHZlQW5pbWF0aW9uKEVycm9yU3RyaW5nJiBlcnJvclN0
cmluZywgY29uc3QgUwogCiAgICAgaWYgKCF2YWx1ZSkgewogICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiSW50ZXJuYWwgZXJyb3I6IHVua25vd24g
QW5pbWF0aW9uIGZvciBnaXZlbiBhbmltYXRpb25JZCJfczsKLSAgICAgICAgcmV0dXJuOworICAg
ICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkludGVybmFsIGVycm9yOiB1bmtub3duIEFuaW1h
dGlvbiBmb3IgZ2l2ZW4gYW5pbWF0aW9uSWQiX3MpOwogICAgIH0KIAotICAgIFN0cmluZyBvYmpl
Y3RHcm91cE5hbWUgPSBvYmplY3RHcm91cCA/ICpvYmplY3RHcm91cCA6IFN0cmluZygpOwotICAg
IHJlc3VsdCA9IGluamVjdGVkU2NyaXB0LndyYXBPYmplY3QodmFsdWUsIG9iamVjdEdyb3VwTmFt
ZSk7CisgICAgYXV0byBvYmplY3QgPSBpbmplY3RlZFNjcmlwdC53cmFwT2JqZWN0KHZhbHVlLCBv
YmplY3RHcm91cCk7CisgICAgaWYgKCFvYmplY3QpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBl
Y3RlZCgiSW50ZXJuYWwgZXJyb3I6IHVuYWJsZSB0byBjYXN0IEFuaW1hdGlvbiIpOworCisgICAg
cmV0dXJuIG9iamVjdC5yZWxlYXNlTm9uTnVsbCgpOwogfQogCi12b2lkIEluc3BlY3RvckFuaW1h
dGlvbkFnZW50OjpzdGFydFRyYWNraW5nKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZykKK1Byb3Rv
Y29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckFuaW1hdGlvbkFnZW50OjpzdGFydFRy
YWNraW5nKCkKIHsKLSAgICBpZiAobV9pbnN0cnVtZW50aW5nQWdlbnRzLnRyYWNraW5nQW5pbWF0
aW9uQWdlbnQoKSA9PSB0aGlzKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIkFuaW1hdGlvbiBk
b21haW4gYWxyZWFkeSB0cmFja2luZyJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBp
ZiAobV9pbnN0cnVtZW50aW5nQWdlbnRzLnRyYWNraW5nQW5pbWF0aW9uQWdlbnQoKSA9PSB0aGlz
KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkFuaW1hdGlvbiBkb21haW4gYWxyZWFk
eSB0cmFja2luZyJfcyk7CiAKICAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMuc2V0VHJhY2tpbmdB
bmltYXRpb25BZ2VudCh0aGlzKTsKIAogICAgIEFTU0VSVChtX3RyYWNrZWREZWNsYXJhdGl2ZUFu
aW1hdGlvbkRhdGEuaXNFbXB0eSgpKTsKIAogICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT50cmFj
a2luZ1N0YXJ0KG1fZW52aXJvbm1lbnQuZXhlY3V0aW9uU3RvcHdhdGNoKCkuZWxhcHNlZFRpbWUo
KS5zZWNvbmRzKCkpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JBbmlt
YXRpb25BZ2VudDo6c3RvcFRyYWNraW5nKEVycm9yU3RyaW5nJikKK1Byb3RvY29sOjpFcnJvclN0
cmluZ09yPHZvaWQ+IEluc3BlY3RvckFuaW1hdGlvbkFnZW50OjpzdG9wVHJhY2tpbmcoKQogewog
ICAgIGlmIChtX2luc3RydW1lbnRpbmdBZ2VudHMudHJhY2tpbmdBbmltYXRpb25BZ2VudCgpICE9
IHRoaXMpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIG1faW5z
dHJ1bWVudGluZ0FnZW50cy5zZXRUcmFja2luZ0FuaW1hdGlvbkFnZW50KG51bGxwdHIpOwogCiAg
ICAgbV90cmFja2VkRGVjbGFyYXRpdmVBbmltYXRpb25EYXRhLmNsZWFyKCk7CiAKICAgICBtX2Zy
b250ZW5kRGlzcGF0Y2hlci0+dHJhY2tpbmdDb21wbGV0ZShtX2Vudmlyb25tZW50LmV4ZWN1dGlv
blN0b3B3YXRjaCgpLmVsYXBzZWRUaW1lKCkuc2Vjb25kcygpKTsKKworICAgIHJldHVybiB7IH07
CiB9CiAKIHN0YXRpYyBib29sIGlzRGVsYXllZChDb21wdXRlZEVmZmVjdFRpbWluZyYgY29tcHV0
ZWRUaW1pbmcpCkBAIC0zODAsMzEgKzM4MywzMSBAQCB2b2lkIEluc3BlY3RvckFuaW1hdGlvbkFn
ZW50Ojp3aWxsQXBwbHlLZXlmcmFtZUVmZmVjdChFbGVtZW50JiB0YXJnZXQsIEtleWZyYW1lRQog
ICAgIH0pOwogICAgIGF1dG8mIHRyYWNraW5nRGF0YSA9IGVuc3VyZVJlc3VsdC5pdGVyYXRvci0+
dmFsdWU7CiAKLSAgICBPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpBbmltYXRpb246OkFu
aW1hdGlvblN0YXRlPiBhbmltYXRpb25BbmltYXRpb25TdGF0ZTsKKyAgICBPcHRpb25hbDxQcm90
b2NvbDo6QW5pbWF0aW9uOjpBbmltYXRpb25TdGF0ZT4gYW5pbWF0aW9uQW5pbWF0aW9uU3RhdGU7
CiAKICAgICBpZiAoKGVuc3VyZVJlc3VsdC5pc05ld0VudHJ5IHx8ICFpc0RlbGF5ZWQodHJhY2tp
bmdEYXRhLmxhc3RDb21wdXRlZFRpbWluZykpICYmIGlzRGVsYXllZChjb21wdXRlZFRpbWluZykp
Ci0gICAgICAgIGFuaW1hdGlvbkFuaW1hdGlvblN0YXRlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6
QW5pbWF0aW9uOjpBbmltYXRpb25TdGF0ZTo6RGVsYXllZDsKKyAgICAgICAgYW5pbWF0aW9uQW5p
bWF0aW9uU3RhdGUgPSBQcm90b2NvbDo6QW5pbWF0aW9uOjpBbmltYXRpb25TdGF0ZTo6RGVsYXll
ZDsKICAgICBlbHNlIGlmIChlbnN1cmVSZXN1bHQuaXNOZXdFbnRyeSB8fCB0cmFja2luZ0RhdGEu
bGFzdENvbXB1dGVkVGltaW5nLnBoYXNlICE9IGNvbXB1dGVkVGltaW5nLnBoYXNlKSB7CiAgICAg
ICAgIHN3aXRjaCAoY29tcHV0ZWRUaW1pbmcucGhhc2UpIHsKICAgICAgICAgY2FzZSBBbmltYXRp
b25FZmZlY3RQaGFzZTo6QmVmb3JlOgotICAgICAgICAgICAgYW5pbWF0aW9uQW5pbWF0aW9uU3Rh
dGUgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBbmltYXRpb246OkFuaW1hdGlvblN0YXRlOjpSZWFk
eTsKKyAgICAgICAgICAgIGFuaW1hdGlvbkFuaW1hdGlvblN0YXRlID0gUHJvdG9jb2w6OkFuaW1h
dGlvbjo6QW5pbWF0aW9uU3RhdGU6OlJlYWR5OwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAg
ICAgY2FzZSBBbmltYXRpb25FZmZlY3RQaGFzZTo6QWN0aXZlOgotICAgICAgICAgICAgYW5pbWF0
aW9uQW5pbWF0aW9uU3RhdGUgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBbmltYXRpb246OkFuaW1h
dGlvblN0YXRlOjpBY3RpdmU7CisgICAgICAgICAgICBhbmltYXRpb25BbmltYXRpb25TdGF0ZSA9
IFByb3RvY29sOjpBbmltYXRpb246OkFuaW1hdGlvblN0YXRlOjpBY3RpdmU7CiAgICAgICAgICAg
ICBicmVhazsKIAogICAgICAgICBjYXNlIEFuaW1hdGlvbkVmZmVjdFBoYXNlOjpBZnRlcjoKLSAg
ICAgICAgICAgIGFuaW1hdGlvbkFuaW1hdGlvblN0YXRlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6
QW5pbWF0aW9uOjpBbmltYXRpb25TdGF0ZTo6RG9uZTsKKyAgICAgICAgICAgIGFuaW1hdGlvbkFu
aW1hdGlvblN0YXRlID0gUHJvdG9jb2w6OkFuaW1hdGlvbjo6QW5pbWF0aW9uU3RhdGU6OkRvbmU7
CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIEFuaW1hdGlvbkVmZmVjdFBoYXNl
OjpJZGxlOgotICAgICAgICAgICAgYW5pbWF0aW9uQW5pbWF0aW9uU3RhdGUgPSBJbnNwZWN0b3I6
OlByb3RvY29sOjpBbmltYXRpb246OkFuaW1hdGlvblN0YXRlOjpDYW5jZWxlZDsKKyAgICAgICAg
ICAgIGFuaW1hdGlvbkFuaW1hdGlvblN0YXRlID0gUHJvdG9jb2w6OkFuaW1hdGlvbjo6QW5pbWF0
aW9uU3RhdGU6OkNhbmNlbGVkOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9
IGVsc2UgaWYgKHRyYWNraW5nRGF0YS5sYXN0Q29tcHV0ZWRUaW1pbmcuY3VycmVudEl0ZXJhdGlv
biAhPSBjb21wdXRlZFRpbWluZy5jdXJyZW50SXRlcmF0aW9uKSB7CiAgICAgICAgIC8vIEl0ZXJh
dGlvbnMgYXJlIHJlcHJlc2VudGVkIGJ5IHNlcXVlbnRpYWwgImFjdGl2ZSIgc3RhdGUgZXZlbnRz
LgotICAgICAgICBhbmltYXRpb25BbmltYXRpb25TdGF0ZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkFuaW1hdGlvbjo6QW5pbWF0aW9uU3RhdGU6OkFjdGl2ZTsKKyAgICAgICAgYW5pbWF0aW9uQW5p
bWF0aW9uU3RhdGUgPSBQcm90b2NvbDo6QW5pbWF0aW9uOjpBbmltYXRpb25TdGF0ZTo6QWN0aXZl
OwogICAgIH0KIAogICAgIHRyYWNraW5nRGF0YS5sYXN0Q29tcHV0ZWRUaW1pbmcgPSBjb21wdXRl
ZFRpbWluZzsKQEAgLTQxMiw3ICs0MTUsNyBAQCB2b2lkIEluc3BlY3RvckFuaW1hdGlvbkFnZW50
Ojp3aWxsQXBwbHlLZXlmcmFtZUVmZmVjdChFbGVtZW50JiB0YXJnZXQsIEtleWZyYW1lRQogICAg
IGlmICghYW5pbWF0aW9uQW5pbWF0aW9uU3RhdGUpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1
dG8gZXZlbnQgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBbmltYXRpb246OlRyYWNraW5nVXBkYXRl
OjpjcmVhdGUoKQorICAgIGF1dG8gZXZlbnQgPSBQcm90b2NvbDo6QW5pbWF0aW9uOjpUcmFja2lu
Z1VwZGF0ZTo6Y3JlYXRlKCkKICAgICAgICAgLnNldFRyYWNraW5nQW5pbWF0aW9uSWQodHJhY2tp
bmdEYXRhLnRyYWNraW5nQW5pbWF0aW9uSWQpCiAgICAgICAgIC5zZXRBbmltYXRpb25TdGF0ZShh
bmltYXRpb25BbmltYXRpb25TdGF0ZS52YWx1ZSgpKQogICAgICAgICAucmVsZWFzZSgpOwpAQCAt
NDQxLDggKzQ0NCw3IEBAIHZvaWQgSW5zcGVjdG9yQW5pbWF0aW9uQWdlbnQ6OmRpZENoYW5nZVdl
YkFuaW1hdGlvbk5hbWUoV2ViQW5pbWF0aW9uJiBhbmltYXRpb24pCiAgICAgaWYgKGFuaW1hdGlv
bklkLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byBuYW1lID0gYW5pbWF0
aW9uLmlkKCk7Ci0gICAgbV9mcm9udGVuZERpc3BhdGNoZXItPm5hbWVDaGFuZ2VkKGFuaW1hdGlv
bklkLCAhbmFtZS5pc0VtcHR5KCkgPyAmbmFtZSA6IG51bGxwdHIpOworICAgIG1fZnJvbnRlbmRE
aXNwYXRjaGVyLT5uYW1lQ2hhbmdlZChhbmltYXRpb25JZCwgYW5pbWF0aW9uLmlkKCkpOwogfQog
CiB2b2lkIEluc3BlY3RvckFuaW1hdGlvbkFnZW50OjpkaWRTZXRXZWJBbmltYXRpb25FZmZlY3Qo
V2ViQW5pbWF0aW9uJiBhbmltYXRpb24pCkBAIC01MjUsNyArNTI3LDcgQEAgU3RyaW5nIEluc3Bl
Y3RvckFuaW1hdGlvbkFnZW50OjpmaW5kQW5pbWF0aW9uSWQoV2ViQW5pbWF0aW9uJiBhbmltYXRp
b24pCiAgICAgcmV0dXJuIG51bGxTdHJpbmcoKTsKIH0KIAotV2ViQW5pbWF0aW9uKiBJbnNwZWN0
b3JBbmltYXRpb25BZ2VudDo6YXNzZXJ0QW5pbWF0aW9uKEVycm9yU3RyaW5nJiBlcnJvclN0cmlu
ZywgY29uc3QgU3RyaW5nJiBhbmltYXRpb25JZCkKK1dlYkFuaW1hdGlvbiogSW5zcGVjdG9yQW5p
bWF0aW9uQWdlbnQ6OmFzc2VydEFuaW1hdGlvbihQcm90b2NvbDo6RXJyb3JTdHJpbmcmIGVycm9y
U3RyaW5nLCBjb25zdCBTdHJpbmcmIGFuaW1hdGlvbklkKQogewogICAgIGF1dG8qIGFuaW1hdGlv
biA9IG1fYW5pbWF0aW9uSWRNYXAuZ2V0KGFuaW1hdGlvbklkKTsKICAgICBpZiAoIWFuaW1hdGlv
bikKQEAgLTUzOCw3ICs1NDAsNyBAQCB2b2lkIEluc3BlY3RvckFuaW1hdGlvbkFnZW50OjpiaW5k
QW5pbWF0aW9uKFdlYkFuaW1hdGlvbiYgYW5pbWF0aW9uLCBib29sIGNhcHR1cgogICAgIGF1dG8g
YW5pbWF0aW9uSWQgPSBtYWtlU3RyaW5nKCJhbmltYXRpb246IiArIElkZW50aWZpZXJzRmFjdG9y
eTo6Y3JlYXRlSWRlbnRpZmllcigpKTsKICAgICBtX2FuaW1hdGlvbklkTWFwLnNldChhbmltYXRp
b25JZCwgJmFuaW1hdGlvbik7CiAKLSAgICBhdXRvIGFuaW1hdGlvblBheWxvYWQgPSBJbnNwZWN0
b3I6OlByb3RvY29sOjpBbmltYXRpb246OkFuaW1hdGlvbjo6Y3JlYXRlKCkKKyAgICBhdXRvIGFu
aW1hdGlvblBheWxvYWQgPSBQcm90b2NvbDo6QW5pbWF0aW9uOjpBbmltYXRpb246OmNyZWF0ZSgp
CiAgICAgICAgIC5zZXRBbmltYXRpb25JZChhbmltYXRpb25JZCkKICAgICAgICAgLnJlbGVhc2Uo
KTsKIApAQCAtNjAzLDkgKzYwNSw5IEBAIHZvaWQgSW5zcGVjdG9yQW5pbWF0aW9uQWdlbnQ6OnN0
b3BUcmFja2luZ0RlY2xhcmF0aXZlQW5pbWF0aW9uKERlY2xhcmF0aXZlQW5pbWF0CiAgICAgICAg
IHJldHVybjsKIAogICAgIGlmIChpdC0+dmFsdWUubGFzdENvbXB1dGVkVGltaW5nLnBoYXNlICE9
IEFuaW1hdGlvbkVmZmVjdFBoYXNlOjpBZnRlciAmJiBpdC0+dmFsdWUubGFzdENvbXB1dGVkVGlt
aW5nLnBoYXNlICE9IEFuaW1hdGlvbkVmZmVjdFBoYXNlOjpJZGxlKSB7Ci0gICAgICAgIGF1dG8g
ZXZlbnQgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBbmltYXRpb246OlRyYWNraW5nVXBkYXRlOjpj
cmVhdGUoKQorICAgICAgICBhdXRvIGV2ZW50ID0gUHJvdG9jb2w6OkFuaW1hdGlvbjo6VHJhY2tp
bmdVcGRhdGU6OmNyZWF0ZSgpCiAgICAgICAgICAgICAuc2V0VHJhY2tpbmdBbmltYXRpb25JZChp
dC0+dmFsdWUudHJhY2tpbmdBbmltYXRpb25JZCkKLSAgICAgICAgICAgIC5zZXRBbmltYXRpb25T
dGF0ZShJbnNwZWN0b3I6OlByb3RvY29sOjpBbmltYXRpb246OkFuaW1hdGlvblN0YXRlOjpDYW5j
ZWxlZCkKKyAgICAgICAgICAgIC5zZXRBbmltYXRpb25TdGF0ZShQcm90b2NvbDo6QW5pbWF0aW9u
OjpBbmltYXRpb25TdGF0ZTo6Q2FuY2VsZWQpCiAgICAgICAgICAgICAucmVsZWFzZSgpOwogICAg
ICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+dHJhY2tpbmdVcGRhdGUobV9lbnZpcm9ubWVudC5l
eGVjdXRpb25TdG9wd2F0Y2goKS5lbGFwc2VkVGltZSgpLnNlY29uZHMoKSwgV1RGTW92ZShldmVu
dCkpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9yQW5pbWF0aW9uQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2Vu
dHMvSW5zcGVjdG9yQW5pbWF0aW9uQWdlbnQuaAppbmRleCA4YjUxMTYyOGM5N2EyMjJhOGY5YWNk
OGQzZTViMjAyYThkYmI2YmVjLi4wNjRhYzQwNjNjMzA5ZmRiNDFjNzFiZmNmNmNiZDllYTY0ZWQ5
MzE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rv
ckFuaW1hdGlvbkFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9J
bnNwZWN0b3JBbmltYXRpb25BZ2VudC5oCkBAIC00NCwyNiArNDQsMjQgQEAgY2xhc3MgS2V5ZnJh
bWVFZmZlY3Q7CiBjbGFzcyBQYWdlOwogY2xhc3MgV2ViQW5pbWF0aW9uOwogCi10eXBlZGVmIFN0
cmluZyBFcnJvclN0cmluZzsKLQogY2xhc3MgSW5zcGVjdG9yQW5pbWF0aW9uQWdlbnQgZmluYWwg
OiBwdWJsaWMgSW5zcGVjdG9yQWdlbnRCYXNlLCBwdWJsaWMgSW5zcGVjdG9yOjpBbmltYXRpb25C
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEluc3Bl
Y3RvckFuaW1hdGlvbkFnZW50KTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1Ymxp
YzoKICAgICBJbnNwZWN0b3JBbmltYXRpb25BZ2VudChQYWdlQWdlbnRDb250ZXh0Jik7Ci0gICAg
fkluc3BlY3RvckFuaW1hdGlvbkFnZW50KCkgb3ZlcnJpZGU7CisgICAgfkluc3BlY3RvckFuaW1h
dGlvbkFnZW50KCk7CiAKICAgICAvLyBJbnNwZWN0b3JBZ2VudEJhc2UKLSAgICB2b2lkIGRpZENy
ZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kUm91dGVyKiwgSW5zcGVj
dG9yOjpCYWNrZW5kRGlzcGF0Y2hlciopIG92ZXJyaWRlOwotICAgIHZvaWQgd2lsbERlc3Ryb3lG
cm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKSBvdmVycmlkZTsK
KyAgICB2b2lkIGRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5k
Um91dGVyKiwgSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlciopOworICAgIHZvaWQgd2lsbERl
c3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKTsKIAog
ICAgIC8vIEFuaW1hdGlvbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcgotICAgIHZvaWQgZW5hYmxl
KEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkaXNhYmxlKEVycm9yU3RyaW5nJikg
b3ZlcnJpZGU7Ci0gICAgdm9pZCByZXF1ZXN0RWZmZWN0VGFyZ2V0KEVycm9yU3RyaW5nJiwgY29u
c3QgU3RyaW5nJiBhbmltYXRpb25JZCwgaW50KiBub2RlSWQpIG92ZXJyaWRlOwotICAgIHZvaWQg
cmVzb2x2ZUFuaW1hdGlvbihFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uSWQs
IGNvbnN0IFN0cmluZyogb2JqZWN0R3JvdXAsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpS
dW50aW1lOjpSZW1vdGVPYmplY3Q+Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzdGFydFRyYWNraW5n
KEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzdG9wVHJhY2tpbmcoRXJyb3JTdHJp
bmcmKSBvdmVycmlkZTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZv
aWQ+IGVuYWJsZSgpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9p
ZD4gZGlzYWJsZSgpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8SW5z
cGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQ+IHJlcXVlc3RFZmZlY3RUYXJnZXQoY29uc3Qg
SW5zcGVjdG9yOjpQcm90b2NvbDo6QW5pbWF0aW9uOjpBbmltYXRpb25JZCYpOworICAgIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1
bnRpbWU6OlJlbW90ZU9iamVjdD4+IHJlc29sdmVBbmltYXRpb24oY29uc3QgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6QW5pbWF0aW9uOjpBbmltYXRpb25JZCYsIGNvbnN0IFN0cmluZyYgb2JqZWN0R3Jv
dXApOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc3RhcnRU
cmFja2luZygpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4g
c3RvcFRyYWNraW5nKCk7CiAKICAgICAvLyBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24KICAgICB2
b2lkIHdpbGxBcHBseUtleWZyYW1lRWZmZWN0KEVsZW1lbnQmLCBLZXlmcmFtZUVmZmVjdCYsIENv
bXB1dGVkRWZmZWN0VGltaW5nKTsKQEAgLTc3LDcgKzc1LDcgQEAgcHVibGljOgogCiBwcml2YXRl
OgogICAgIFN0cmluZyBmaW5kQW5pbWF0aW9uSWQoV2ViQW5pbWF0aW9uJik7Ci0gICAgV2ViQW5p
bWF0aW9uKiBhc3NlcnRBbmltYXRpb24oRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGFuaW1h
dGlvbklkKTsKKyAgICBXZWJBbmltYXRpb24qIGFzc2VydEFuaW1hdGlvbihJbnNwZWN0b3I6OlBy
b3RvY29sOjpFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uSWQpOwogICAgIHZv
aWQgYmluZEFuaW1hdGlvbihXZWJBbmltYXRpb24mLCBib29sIGNhcHR1cmVCYWNrdHJhY2UpOwog
ICAgIHZvaWQgdW5iaW5kQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uSWQpOwogICAg
IHZvaWQgYW5pbWF0aW9uRGVzdHJveWVkVGltZXJGaXJlZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBcHBsaWNhdGlv
bkNhY2hlQWdlbnQuY3BwCmluZGV4IDkxMjkyNjQ4ZDY4MmQ5YzM4MWU1MjRmZDA5NzAwOGE0N2Mz
NjUwNGEuLmFmNjczNzhhNmRkY2QxYWU3NzI0NGU4OTk1MzY3NzNhNzAyN2IwM2MgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQXBwbGljYXRpb25D
YWNoZUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3Bl
Y3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5jcHAKQEAgLTU3LDMxICs1NywzMCBAQCB2b2lkIElu
c3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudDo6ZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5k
KEZyb250ZW5kUm91dGVyKgogCiB2b2lkIEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudDo6
d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29u
KQogewotICAgIEVycm9yU3RyaW5nIGlnbm9yZWQ7Ci0gICAgZGlzYWJsZShpZ25vcmVkKTsKKyAg
ICBkaXNhYmxlKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50Ojpl
bmFibGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8
dm9pZD4gSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50OjplbmFibGUoKQogewotICAgIGlm
IChtX2luc3RydW1lbnRpbmdBZ2VudHMuZW5hYmxlZEFwcGxpY2F0aW9uQ2FjaGVBZ2VudCgpID09
IHRoaXMpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiQXBwbGljYXRpb25DYWNoZSBkb21haW4g
YWxyZWFkeSBlbmFibGVkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmIChtX2lu
c3RydW1lbnRpbmdBZ2VudHMuZW5hYmxlZEFwcGxpY2F0aW9uQ2FjaGVBZ2VudCgpID09IHRoaXMp
CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiQXBwbGljYXRpb25DYWNoZSBkb21haW4g
YWxyZWFkeSBlbmFibGVkIl9zKTsKIAogICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy5zZXRFbmFi
bGVkQXBwbGljYXRpb25DYWNoZUFnZW50KHRoaXMpOwogCiAgICAgLy8gV2UgbmVlZCB0byBwYXNz
IGluaXRpYWwgbmF2aWdhdG9yLm9uT25saW5lLgogICAgIG5ldHdvcmtTdGF0ZUNoYW5nZWQoKTsK
KworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFn
ZW50OjpkaXNhYmxlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZykKK1Byb3RvY29sOjpFcnJvclN0
cmluZ09yPHZvaWQ+IEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudDo6ZGlzYWJsZSgpCiB7
Ci0gICAgaWYgKG1faW5zdHJ1bWVudGluZ0FnZW50cy5lbmFibGVkQXBwbGljYXRpb25DYWNoZUFn
ZW50KCkgIT0gdGhpcykgewotICAgICAgICBlcnJvclN0cmluZyA9ICJBcHBsaWNhdGlvbkNhY2hl
IGRvbWFpbiBhbHJlYWR5IGRpc2FibGVkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAg
IGlmIChtX2luc3RydW1lbnRpbmdBZ2VudHMuZW5hYmxlZEFwcGxpY2F0aW9uQ2FjaGVBZ2VudCgp
ICE9IHRoaXMpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiQXBwbGljYXRpb25DYWNo
ZSBkb21haW4gYWxyZWFkeSBkaXNhYmxlZCJfcyk7CiAKICAgICBtX2luc3RydW1lbnRpbmdBZ2Vu
dHMuc2V0RW5hYmxlZEFwcGxpY2F0aW9uQ2FjaGVBZ2VudChudWxscHRyKTsKKworICAgIHJldHVy
biB7IH07CiB9CiAKIHZvaWQgSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50Ojp1cGRhdGVB
cHBsaWNhdGlvbkNhY2hlU3RhdHVzKEZyYW1lKiBmcmFtZSkKQEAgLTEwOSwxNiArMTA4LDEzIEBA
IHZvaWQgSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50OjpuZXR3b3JrU3RhdGVDaGFuZ2Vk
KCkKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+bmV0d29ya1N0YXRlVXBkYXRlZChwbGF0Zm9y
bVN0cmF0ZWdpZXMoKS0+bG9hZGVyU3RyYXRlZ3koKS0+aXNPbkxpbmUoKSk7CiB9CiAKLXZvaWQg
SW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50OjpnZXRGcmFtZXNXaXRoTWFuaWZlc3RzKEVy
cm9yU3RyaW5nJiBlcnJvclN0cmluZywgUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6QXBwbGljYXRpb25DYWNoZTo6RnJhbWVXaXRoTWFuaWZlc3Q+PiYgcmVzdWx0KQor
RXhwZWN0ZWQ8UmVmPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkZy
YW1lV2l0aE1hbmlmZXN0Pj4sIFByb3RvY29sOjpFcnJvclN0cmluZz4gSW5zcGVjdG9yQXBwbGlj
YXRpb25DYWNoZUFnZW50OjpnZXRGcmFtZXNXaXRoTWFuaWZlc3RzKCkKIHsKICAgICBhdXRvKiBw
YWdlQWdlbnQgPSBtX2luc3RydW1lbnRpbmdBZ2VudHMuZW5hYmxlZFBhZ2VBZ2VudCgpOwotICAg
IGlmICghcGFnZUFnZW50KSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIlBhZ2UgZG9tYWluIG11
c3QgYmUgZW5hYmxlZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHJlc3VsdCA9
IEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXBwbGljYXRpb25DYWNoZTo6RnJh
bWVXaXRoTWFuaWZlc3Q+OjpjcmVhdGUoKTsKKyAgICBpZiAoIXBhZ2VBZ2VudCkKKyAgICAgICAg
cmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJQYWdlIGRvbWFpbiBtdXN0IGJlIGVuYWJsZWQiX3MpOwog
CisgICAgYXV0byByZXN1bHQgPSBKU09OOjpBcnJheU9mPFByb3RvY29sOjpBcHBsaWNhdGlvbkNh
Y2hlOjpGcmFtZVdpdGhNYW5pZmVzdD46OmNyZWF0ZSgpOwogICAgIGZvciAoRnJhbWUqIGZyYW1l
ID0gJm1faW5zcGVjdGVkUGFnZS5tYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRy
ZWUoKS50cmF2ZXJzZU5leHQoKSkgewogICAgICAgICBhdXRvKiBkb2N1bWVudExvYWRlciA9IGZy
YW1lLT5sb2FkZXIoKS5kb2N1bWVudExvYWRlcigpOwogICAgICAgICBpZiAoIWRvY3VtZW50TG9h
ZGVyKQpAQCAtMTI3LDE2ICsxMjMsMTcgQEAgdm9pZCBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hl
QWdlbnQ6OmdldEZyYW1lc1dpdGhNYW5pZmVzdHMoRXJyb3JTdHJpbmcmIGVycm9yU3QKICAgICAg
ICAgYXV0byYgaG9zdCA9IGRvY3VtZW50TG9hZGVyLT5hcHBsaWNhdGlvbkNhY2hlSG9zdCgpOwog
ICAgICAgICBTdHJpbmcgbWFuaWZlc3RVUkwgPSBob3N0LmFwcGxpY2F0aW9uQ2FjaGVJbmZvKCku
bWFuaWZlc3Quc3RyaW5nKCk7CiAgICAgICAgIGlmICghbWFuaWZlc3RVUkwuaXNFbXB0eSgpKSB7
Ci0gICAgICAgICAgICByZXN1bHQtPmFkZEl0ZW0oSW5zcGVjdG9yOjpQcm90b2NvbDo6QXBwbGlj
YXRpb25DYWNoZTo6RnJhbWVXaXRoTWFuaWZlc3Q6OmNyZWF0ZSgpCisgICAgICAgICAgICByZXN1
bHQtPmFkZEl0ZW0oUHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkZyYW1lV2l0aE1hbmlmZXN0
OjpjcmVhdGUoKQogICAgICAgICAgICAgICAgIC5zZXRGcmFtZUlkKHBhZ2VBZ2VudC0+ZnJhbWVJ
ZChmcmFtZSkpCiAgICAgICAgICAgICAgICAgLnNldE1hbmlmZXN0VVJMKG1hbmlmZXN0VVJMKQog
ICAgICAgICAgICAgICAgIC5zZXRTdGF0dXMoc3RhdGljX2Nhc3Q8aW50Pihob3N0LnN0YXR1cygp
KSkKICAgICAgICAgICAgICAgICAucmVsZWFzZSgpKTsKICAgICAgICAgfQogICAgIH0KKyAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCi1Eb2N1bWVudExvYWRlciogSW5zcGVjdG9yQXBwbGljYXRpb25D
YWNoZUFnZW50Ojphc3NlcnRGcmFtZVdpdGhEb2N1bWVudExvYWRlcihFcnJvclN0cmluZyYgZXJy
b3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgZnJhbWVJZCkKK0RvY3VtZW50TG9hZGVyKiBJbnNwZWN0
b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQ6OmFzc2VydEZyYW1lV2l0aERvY3VtZW50TG9hZGVyKFBy
b3RvY29sOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9j
b2w6Ok5ldHdvcms6OkZyYW1lSWQmIGZyYW1lSWQpCiB7CiAgICAgYXV0byogcGFnZUFnZW50ID0g
bV9pbnN0cnVtZW50aW5nQWdlbnRzLmVuYWJsZWRQYWdlQWdlbnQoKTsKICAgICBpZiAoIXBhZ2VB
Z2VudCkgewpAQCAtMTUxLDI4ICsxNDgsMzIgQEAgRG9jdW1lbnRMb2FkZXIqIEluc3BlY3RvckFw
cGxpY2F0aW9uQ2FjaGVBZ2VudDo6YXNzZXJ0RnJhbWVXaXRoRG9jdW1lbnRMb2FkZXIoRXIKICAg
ICByZXR1cm4gSW5zcGVjdG9yUGFnZUFnZW50Ojphc3NlcnREb2N1bWVudExvYWRlcihlcnJvclN0
cmluZywgZnJhbWUpOwogfQogCi12b2lkIEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudDo6
Z2V0TWFuaWZlc3RGb3JGcmFtZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmlu
ZyYgZnJhbWVJZCwgU3RyaW5nKiBtYW5pZmVzdFVSTCkKK0V4cGVjdGVkPFN0cmluZywgUHJvdG9j
b2w6OkVycm9yU3RyaW5nPiBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQ6OmdldE1hbmlm
ZXN0Rm9yRnJhbWUoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6RnJhbWVJZCYg
ZnJhbWVJZCkKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAg
ICBEb2N1bWVudExvYWRlciogZG9jdW1lbnRMb2FkZXIgPSBhc3NlcnRGcmFtZVdpdGhEb2N1bWVu
dExvYWRlcihlcnJvclN0cmluZywgZnJhbWVJZCk7CiAgICAgaWYgKCFkb2N1bWVudExvYWRlcikK
LSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJp
bmcpOwogCi0gICAgKm1hbmlmZXN0VVJMID0gZG9jdW1lbnRMb2FkZXItPmFwcGxpY2F0aW9uQ2Fj
aGVIb3N0KCkuYXBwbGljYXRpb25DYWNoZUluZm8oKS5tYW5pZmVzdC5zdHJpbmcoKTsKKyAgICBy
ZXR1cm4gZG9jdW1lbnRMb2FkZXItPmFwcGxpY2F0aW9uQ2FjaGVIb3N0KCkuYXBwbGljYXRpb25D
YWNoZUluZm8oKS5tYW5pZmVzdC5zdHJpbmcoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JBcHBsaWNh
dGlvbkNhY2hlQWdlbnQ6OmdldEFwcGxpY2F0aW9uQ2FjaGVGb3JGcmFtZShFcnJvclN0cmluZyYg
ZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgZnJhbWVJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkFwcGxpY2F0aW9uQ2FjaGU+JiBhcHBsaWNhdGlvbkNh
Y2hlKQorRXhwZWN0ZWQ8UmVmPFByb3RvY29sOjpBcHBsaWNhdGlvbkNhY2hlOjpBcHBsaWNhdGlv
bkNhY2hlPiwgUHJvdG9jb2w6OkVycm9yU3RyaW5nPiBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hl
QWdlbnQ6OmdldEFwcGxpY2F0aW9uQ2FjaGVGb3JGcmFtZShjb25zdCBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpOZXR3b3JrOjpGcmFtZUlkJiBmcmFtZUlkKQogeworICAgIFByb3RvY29sOjpFcnJvclN0
cmluZyBlcnJvclN0cmluZzsKKwogICAgIGF1dG8qIGRvY3VtZW50TG9hZGVyID0gYXNzZXJ0RnJh
bWVXaXRoRG9jdW1lbnRMb2FkZXIoZXJyb3JTdHJpbmcsIGZyYW1lSWQpOwogICAgIGlmICghZG9j
dW1lbnRMb2FkZXIpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVj
dGVkKGVycm9yU3RyaW5nKTsKIAogICAgIGF1dG8mIGhvc3QgPSBkb2N1bWVudExvYWRlci0+YXBw
bGljYXRpb25DYWNoZUhvc3QoKTsKLSAgICBhcHBsaWNhdGlvbkNhY2hlID0gYnVpbGRPYmplY3RG
b3JBcHBsaWNhdGlvbkNhY2hlKGhvc3QucmVzb3VyY2VMaXN0KCksIGhvc3QuYXBwbGljYXRpb25D
YWNoZUluZm8oKSk7CisgICAgcmV0dXJuIGJ1aWxkT2JqZWN0Rm9yQXBwbGljYXRpb25DYWNoZSho
b3N0LnJlc291cmNlTGlzdCgpLCBob3N0LmFwcGxpY2F0aW9uQ2FjaGVJbmZvKCkpOwogfQogCi1S
ZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXBwbGljYXRpb25DYWNoZTo6QXBwbGljYXRpb25DYWNo
ZT4gSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50OjpidWlsZE9iamVjdEZvckFwcGxpY2F0
aW9uQ2FjaGUoY29uc3QgVmVjdG9yPEFwcGxpY2F0aW9uQ2FjaGVIb3N0OjpSZXNvdXJjZUluZm8+
JiBhcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2VzLCBjb25zdCBBcHBsaWNhdGlvbkNhY2hlSG9zdDo6
Q2FjaGVJbmZvJiBhcHBsaWNhdGlvbkNhY2hlSW5mbykKK1JlZjxQcm90b2NvbDo6QXBwbGljYXRp
b25DYWNoZTo6QXBwbGljYXRpb25DYWNoZT4gSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50
OjpidWlsZE9iamVjdEZvckFwcGxpY2F0aW9uQ2FjaGUoY29uc3QgVmVjdG9yPEFwcGxpY2F0aW9u
Q2FjaGVIb3N0OjpSZXNvdXJjZUluZm8+JiBhcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2VzLCBjb25z
dCBBcHBsaWNhdGlvbkNhY2hlSG9zdDo6Q2FjaGVJbmZvJiBhcHBsaWNhdGlvbkNhY2hlSW5mbykK
IHsKLSAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXBwbGljYXRpb25DYWNoZTo6QXBw
bGljYXRpb25DYWNoZTo6Y3JlYXRlKCkKKyAgICByZXR1cm4gUHJvdG9jb2w6OkFwcGxpY2F0aW9u
Q2FjaGU6OkFwcGxpY2F0aW9uQ2FjaGU6OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRNYW5pZmVzdFVS
TChhcHBsaWNhdGlvbkNhY2hlSW5mby5tYW5pZmVzdC5zdHJpbmcoKSkKICAgICAgICAgLnNldFNp
emUoYXBwbGljYXRpb25DYWNoZUluZm8uc2l6ZSkKICAgICAgICAgLnNldENyZWF0aW9uVGltZShh
cHBsaWNhdGlvbkNhY2hlSW5mby5jcmVhdGlvblRpbWUpCkBAIC0xODEsMTUgKzE4MiwxNSBAQCBS
ZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXBwbGljYXRpb25DYWNoZTo6QXBwbGljYXRpb25DYWNo
ZT4gSW5zcGVjdG9yQXBwbGljYXRpbwogICAgICAgICAucmVsZWFzZSgpOwogfQogCi1SZWY8SlNP
Tjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcHBsaWNhdGlvbkNhY2hlOjpBcHBsaWNh
dGlvbkNhY2hlUmVzb3VyY2U+PiBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQ6OmJ1aWxk
QXJyYXlGb3JBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2VzKGNvbnN0IFZlY3RvcjxBcHBsaWNhdGlv
bkNhY2hlSG9zdDo6UmVzb3VyY2VJbmZvPiYgYXBwbGljYXRpb25DYWNoZVJlc291cmNlcykKK1Jl
ZjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpBcHBsaWNhdGlvbkNhY2hlOjpBcHBsaWNhdGlvbkNh
Y2hlUmVzb3VyY2U+PiBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQ6OmJ1aWxkQXJyYXlG
b3JBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2VzKGNvbnN0IFZlY3RvcjxBcHBsaWNhdGlvbkNhY2hl
SG9zdDo6UmVzb3VyY2VJbmZvPiYgYXBwbGljYXRpb25DYWNoZVJlc291cmNlcykKIHsKLSAgICBh
dXRvIHJlc3VsdCA9IEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXBwbGljYXRp
b25DYWNoZTo6QXBwbGljYXRpb25DYWNoZVJlc291cmNlPjo6Y3JlYXRlKCk7CisgICAgYXV0byBy
ZXN1bHQgPSBKU09OOjpBcnJheU9mPFByb3RvY29sOjpBcHBsaWNhdGlvbkNhY2hlOjpBcHBsaWNh
dGlvbkNhY2hlUmVzb3VyY2U+OjpjcmVhdGUoKTsKICAgICBmb3IgKGF1dG8mIGluZm8gOiBhcHBs
aWNhdGlvbkNhY2hlUmVzb3VyY2VzKQogICAgICAgICByZXN1bHQtPmFkZEl0ZW0oYnVpbGRPYmpl
Y3RGb3JBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UoaW5mbykpOwogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKLVJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcHBsaWNhdGlvbkNhY2hlOjpBcHBsaWNh
dGlvbkNhY2hlUmVzb3VyY2U+IEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudDo6YnVpbGRP
YmplY3RGb3JBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UoY29uc3QgQXBwbGljYXRpb25DYWNoZUhv
c3Q6OlJlc291cmNlSW5mbyYgcmVzb3VyY2VJbmZvKQorUmVmPFByb3RvY29sOjpBcHBsaWNhdGlv
bkNhY2hlOjpBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U+IEluc3BlY3RvckFwcGxpY2F0aW9uQ2Fj
aGVBZ2VudDo6YnVpbGRPYmplY3RGb3JBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2UoY29uc3QgQXBw
bGljYXRpb25DYWNoZUhvc3Q6OlJlc291cmNlSW5mbyYgcmVzb3VyY2VJbmZvKQogewogICAgIFN0
cmluZ0J1aWxkZXIgdHlwZXM7CiAKQEAgLTIwOCw3ICsyMDksNyBAQCBSZWY8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6QXBwbGljYXRpb25DYWNoZTo6QXBwbGljYXRpb25DYWNoZVJlc291cmNlPiBJbnNw
ZWN0b3JBcAogICAgIGlmIChyZXNvdXJjZUluZm8uaXNFeHBsaWNpdCkKICAgICAgICAgdHlwZXMu
YXBwZW5kTGl0ZXJhbCgiRXhwbGljaXQgIik7CiAKLSAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90
b2NvbDo6QXBwbGljYXRpb25DYWNoZTo6QXBwbGljYXRpb25DYWNoZVJlc291cmNlOjpjcmVhdGUo
KQorICAgIHJldHVybiBQcm90b2NvbDo6QXBwbGljYXRpb25DYWNoZTo6QXBwbGljYXRpb25DYWNo
ZVJlc291cmNlOjpjcmVhdGUoKQogICAgICAgICAuc2V0VXJsKHJlc291cmNlSW5mby5yZXNvdXJj
ZS5zdHJpbmcoKSkKICAgICAgICAgLnNldFNpemUoc3RhdGljX2Nhc3Q8aW50PihyZXNvdXJjZUlu
Zm8uc2l6ZSkpCiAgICAgICAgIC5zZXRUeXBlKHR5cGVzLnRvU3RyaW5nKCkpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckFwcGxpY2F0aW9uQ2Fj
aGVBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBcHBs
aWNhdGlvbkNhY2hlQWdlbnQuaAppbmRleCA1MTk4OGY2MTdkZTExZWYxMTcwOGE3YjM5MmNmMGNl
MTk0YjQ4NmVhLi44MDc2Nzk3Y2FiNjA5YjkyMzY3OTNlMjI4MWE1ODljNGNkMTQ2MjU2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckFwcGxpY2F0
aW9uQ2FjaGVBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5z
cGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50LmgKQEAgLTM5LDI1ICszOSwyMyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiBjbGFzcyBGcmFtZTsKIGNsYXNzIFBhZ2U7CiAKLXR5cGVkZWYgU3RyaW5n
IEVycm9yU3RyaW5nOwotCiBjbGFzcyBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQgZmlu
YWwgOiBwdWJsaWMgSW5zcGVjdG9yQWdlbnRCYXNlLCBwdWJsaWMgSW5zcGVjdG9yOjpBcHBsaWNh
dGlvbkNhY2hlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQpOwogICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOwogcHVibGljOgogICAgIEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudChQ
YWdlQWdlbnRDb250ZXh0Jik7Ci0gICAgfkluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudCgp
IG92ZXJyaWRlOworICAgIH5JbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQoKTsKIAogICAg
IC8vIEluc3BlY3RvckFnZW50QmFzZQotICAgIHZvaWQgZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNr
ZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRSb3V0ZXIqLCBJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRj
aGVyKikgb3ZlcnJpZGU7Ci0gICAgdm9pZCB3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJ
bnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24pIG92ZXJyaWRlOworICAgIHZvaWQgZGlkQ3JlYXRl
RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRSb3V0ZXIqLCBJbnNwZWN0b3I6
OkJhY2tlbmREaXNwYXRjaGVyKik7CisgICAgdm9pZCB3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFj
a2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24pOwogCiAgICAgLy8gQXBwbGljYXRpb25D
YWNoZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcgotICAgIHZvaWQgZW5hYmxlKEVycm9yU3RyaW5n
Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkaXNhYmxlKEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCBnZXRGcmFtZXNXaXRoTWFuaWZlc3RzKEVycm9yU3RyaW5nJiwgUmVmUHRyPEpTT046
OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXBwbGljYXRpb25DYWNoZTo6RnJhbWVXaXRo
TWFuaWZlc3Q+PiYgcmVzdWx0KSBvdmVycmlkZTsKLSAgICB2b2lkIGdldE1hbmlmZXN0Rm9yRnJh
bWUoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGZyYW1lSWQsIFN0cmluZyogbWFuaWZlc3RV
UkwpIG92ZXJyaWRlOwotICAgIHZvaWQgZ2V0QXBwbGljYXRpb25DYWNoZUZvckZyYW1lKEVycm9y
U3RyaW5nJiwgY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6QXBwbGljYXRpb25DYWNoZTo6QXBwbGljYXRpb25DYWNoZT4mKSBvdmVycmlkZTsKKyAgICBJ
bnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGVuYWJsZSgpOworICAgIElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZGlzYWJsZSgpOworICAgIElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEpTT046OkFycmF5T2Y8SW5zcGVj
dG9yOjpQcm90b2NvbDo6QXBwbGljYXRpb25DYWNoZTo6RnJhbWVXaXRoTWFuaWZlc3Q+Pj4gZ2V0
RnJhbWVzV2l0aE1hbmlmZXN0cygpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3Ry
aW5nT3I8U3RyaW5nPiBnZXRNYW5pZmVzdEZvckZyYW1lKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9j
b2w6Ok5ldHdvcms6OkZyYW1lSWQmKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0
cmluZ09yPFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcHBsaWNhdGlvbkNhY2hlOjpBcHBsaWNh
dGlvbkNhY2hlPj4gZ2V0QXBwbGljYXRpb25DYWNoZUZvckZyYW1lKGNvbnN0IEluc3BlY3Rvcjo6
UHJvdG9jb2w6Ok5ldHdvcms6OkZyYW1lSWQmKTsKIAogICAgIC8vIEluc3BlY3Rvckluc3RydW1l
bnRhdGlvbgogICAgIHZvaWQgdXBkYXRlQXBwbGljYXRpb25DYWNoZVN0YXR1cyhGcmFtZSopOwpA
QCAtNjgsNyArNjYsNyBAQCBwcml2YXRlOgogICAgIFJlZjxKU09OOjpBcnJheU9mPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZT4+
IGJ1aWxkQXJyYXlGb3JBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2VzKGNvbnN0IFZlY3RvcjxBcHBs
aWNhdGlvbkNhY2hlSG9zdDo6UmVzb3VyY2VJbmZvPiYpOwogICAgIFJlZjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpBcHBsaWNhdGlvbkNhY2hlOjpBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U+IGJ1aWxk
T2JqZWN0Rm9yQXBwbGljYXRpb25DYWNoZVJlc291cmNlKGNvbnN0IEFwcGxpY2F0aW9uQ2FjaGVI
b3N0OjpSZXNvdXJjZUluZm8mKTsKIAotICAgIERvY3VtZW50TG9hZGVyKiBhc3NlcnRGcmFtZVdp
dGhEb2N1bWVudExvYWRlcihFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgZnJhbWVJZCk7Cisg
ICAgRG9jdW1lbnRMb2FkZXIqIGFzc2VydEZyYW1lV2l0aERvY3VtZW50TG9hZGVyKEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nJiwgY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0
d29yazo6RnJhbWVJZCYpOwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPEluc3BlY3Rvcjo6QXBwbGlj
YXRpb25DYWNoZUZyb250ZW5kRGlzcGF0Y2hlcj4gbV9mcm9udGVuZERpc3BhdGNoZXI7CiAgICAg
UmVmUHRyPEluc3BlY3Rvcjo6QXBwbGljYXRpb25DYWNoZUJhY2tlbmREaXNwYXRjaGVyPiBtX2Jh
Y2tlbmREaXNwYXRjaGVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Fn
ZW50cy9JbnNwZWN0b3JDUFVQcm9maWxlckFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9hZ2VudHMvSW5zcGVjdG9yQ1BVUHJvZmlsZXJBZ2VudC5jcHAKaW5kZXggYTBlNmZjNDUz
MTUxNmQ5ODkzMjExNWJiNGI5Y2EyYjJjMjMwNTY5My4uODI4MTFiZTUxY2Y0NjNjNDExODBiZGU4
MDQ1ODIyZDQ3ZmUxZTUyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Fn
ZW50cy9JbnNwZWN0b3JDUFVQcm9maWxlckFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNQVVByb2ZpbGVyQWdlbnQuY3BwCkBAIC01MywxNiAr
NTMsMTUgQEAgdm9pZCBJbnNwZWN0b3JDUFVQcm9maWxlckFnZW50OjpkaWRDcmVhdGVGcm9udGVu
ZEFuZEJhY2tlbmQoRnJvbnRlbmRSb3V0ZXIqLCBCYWMKIAogdm9pZCBJbnNwZWN0b3JDUFVQcm9m
aWxlckFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChEaXNjb25uZWN0UmVhc29u
KQogewotICAgIEVycm9yU3RyaW5nIGlnbm9yZWQ7Ci0gICAgc3RvcFRyYWNraW5nKGlnbm9yZWQp
OworICAgIHN0b3BUcmFja2luZygpOwogCiAgICAgbV9pbnN0cnVtZW50aW5nQWdlbnRzLnNldFBl
cnNpc3RlbnRDUFVQcm9maWxlckFnZW50KG51bGxwdHIpOwogfQogCi12b2lkIEluc3BlY3RvckNQ
VVByb2ZpbGVyQWdlbnQ6OnN0YXJ0VHJhY2tpbmcoRXJyb3JTdHJpbmcmKQorUHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yQ1BVUHJvZmlsZXJBZ2VudDo6c3RhcnRUcmFja2lu
ZygpCiB7CiAgICAgaWYgKG1fdHJhY2tpbmcpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0
dXJuIHsgfTsKIAogICAgIFJlc291cmNlVXNhZ2VUaHJlYWQ6OmFkZE9ic2VydmVyKHRoaXMsIENQ
VSwgW3RoaXNdIChjb25zdCBSZXNvdXJjZVVzYWdlRGF0YSYgZGF0YSkgewogICAgICAgICBjb2xs
ZWN0U2FtcGxlKGRhdGEpOwpAQCAtNzEsMTggKzcwLDIyIEBAIHZvaWQgSW5zcGVjdG9yQ1BVUHJv
ZmlsZXJBZ2VudDo6c3RhcnRUcmFja2luZyhFcnJvclN0cmluZyYpCiAgICAgbV90cmFja2luZyA9
IHRydWU7CiAKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+dHJhY2tpbmdTdGFydChtX2Vudmly
b25tZW50LmV4ZWN1dGlvblN0b3B3YXRjaCgpLmVsYXBzZWRUaW1lKCkuc2Vjb25kcygpKTsKKwor
ICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ1BVUHJvZmlsZXJBZ2VudDo6c3Rv
cFRyYWNraW5nKEVycm9yU3RyaW5nJikKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IElu
c3BlY3RvckNQVVByb2ZpbGVyQWdlbnQ6OnN0b3BUcmFja2luZygpCiB7CiAgICAgaWYgKCFtX3Ry
YWNraW5nKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB7IH07CiAKICAgICBSZXNv
dXJjZVVzYWdlVGhyZWFkOjpyZW1vdmVPYnNlcnZlcih0aGlzKTsKIAogICAgIG1fdHJhY2tpbmcg
PSBmYWxzZTsKIAogICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT50cmFja2luZ0NvbXBsZXRlKG1f
ZW52aXJvbm1lbnQuZXhlY3V0aW9uU3RvcHdhdGNoKCkuZWxhcHNlZFRpbWUoKS5zZWNvbmRzKCkp
OworCisgICAgcmV0dXJuIHsgfTsKIH0KIAogc3RhdGljIFJlZjxQcm90b2NvbDo6Q1BVUHJvZmls
ZXI6OlRocmVhZEluZm8+IGJ1aWxkVGhyZWFkSW5mbyhjb25zdCBUaHJlYWRDUFVJbmZvJiB0aHJl
YWQpCkBAIC0xMTMsNyArMTE2LDcgQEAgdm9pZCBJbnNwZWN0b3JDUFVQcm9maWxlckFnZW50Ojpj
b2xsZWN0U2FtcGxlKGNvbnN0IFJlc291cmNlVXNhZ2VEYXRhJiBkYXRhKQogICAgICAgICAucmVs
ZWFzZSgpOwogCiAgICAgaWYgKCFkYXRhLmNwdVRocmVhZHMuaXNFbXB0eSgpKSB7Ci0gICAgICAg
IFJlZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpDUFVQcm9maWxlcjo6VGhyZWFkSW5mbz4+
IHRocmVhZHMgPSBKU09OOjpBcnJheU9mPFByb3RvY29sOjpDUFVQcm9maWxlcjo6VGhyZWFkSW5m
bz46OmNyZWF0ZSgpOworICAgICAgICBhdXRvIHRocmVhZHMgPSBKU09OOjpBcnJheU9mPFByb3Rv
Y29sOjpDUFVQcm9maWxlcjo6VGhyZWFkSW5mbz46OmNyZWF0ZSgpOwogICAgICAgICBmb3IgKGF1
dG8mIHRocmVhZEluZm8gOiBkYXRhLmNwdVRocmVhZHMpCiAgICAgICAgICAgICB0aHJlYWRzLT5h
ZGRJdGVtKGJ1aWxkVGhyZWFkSW5mbyh0aHJlYWRJbmZvKSk7CiAgICAgICAgIGV2ZW50LT5zZXRU
aHJlYWRzKFdURk1vdmUodGhyZWFkcykpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDUFVQcm9maWxlckFnZW50LmggYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNQVVByb2ZpbGVyQWdlbnQuaAppbmRleCA0ZWU4
ZTk3ODUzZDcxMmQzZGE2NDM5Yjk4OTdlODY1YTg5NmRiZmZmLi5mZTVlMTg1YWJkYjFjNGYyZjEz
YjRkOGEwN2E5MmJmZDc5ZTY5ZDBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvYWdlbnRzL0luc3BlY3RvckNQVVByb2ZpbGVyQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNQVVByb2ZpbGVyQWdlbnQuaApAQCAtMzQsMjIg
KzM0LDIwIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdHlwZWRlZiBTdHJpbmcgRXJyb3JT
dHJpbmc7Ci0KIGNsYXNzIEluc3BlY3RvckNQVVByb2ZpbGVyQWdlbnQgZmluYWwgOiBwdWJsaWMg
SW5zcGVjdG9yQWdlbnRCYXNlLCBwdWJsaWMgSW5zcGVjdG9yOjpDUFVQcm9maWxlckJhY2tlbmRE
aXNwYXRjaGVySGFuZGxlciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW5zcGVjdG9yQ1BV
UHJvZmlsZXJBZ2VudCk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAg
ICAgSW5zcGVjdG9yQ1BVUHJvZmlsZXJBZ2VudChQYWdlQWdlbnRDb250ZXh0Jik7Ci0gICAgfklu
c3BlY3RvckNQVVByb2ZpbGVyQWdlbnQoKSBvdmVycmlkZTsKKyAgICB+SW5zcGVjdG9yQ1BVUHJv
ZmlsZXJBZ2VudCgpOwogCiAgICAgLy8gSW5zcGVjdG9yQWdlbnRCYXNlCi0gICAgdm9pZCBkaWRD
cmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9udGVuZFJvdXRlciosIEluc3Bl
Y3Rvcjo6QmFja2VuZERpc3BhdGNoZXIqKSBvdmVycmlkZTsKLSAgICB2b2lkIHdpbGxEZXN0cm95
RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlzY29ubmVjdFJlYXNvbikgb3ZlcnJpZGU7
CisgICAgdm9pZCBkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9udGVu
ZFJvdXRlciosIEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXIqKTsKKyAgICB2b2lkIHdpbGxE
ZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlzY29ubmVjdFJlYXNvbik7CiAK
ICAgICAvLyBDUFVQcm9maWxlckJhY2tlbmREaXNwYXRjaGVySGFuZGxlcgotICAgIHZvaWQgc3Rh
cnRUcmFja2luZyhFcnJvclN0cmluZyYpIG92ZXJyaWRlOwotICAgIHZvaWQgc3RvcFRyYWNraW5n
KEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JT
dHJpbmdPcjx2b2lkPiBzdGFydFRyYWNraW5nKCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6
RXJyb3JTdHJpbmdPcjx2b2lkPiBzdG9wVHJhY2tpbmcoKTsKIAogcHJpdmF0ZToKICAgICB2b2lk
IGNvbGxlY3RTYW1wbGUoY29uc3QgUmVzb3VyY2VVc2FnZURhdGEmKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDU1NBZ2VudC5jcHAKaW5kZXgg
NTY1ZWJlMDgyYzA3OGJiNjY4Nzc0MDM4OWViMzcyZWUxMTliNzQxYi4uNTk0Yzg0NWMxOGEzMjVk
NTBkOWU1ZTAzODIxMDlmOTIyYjNiY2QyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDU1NBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDU1NBZ2VudC5jcHAKQEAgLTkyLDEwICs5Miw3IEBA
IHN0YXRpYyB1bnNpZ25lZCBjb21wdXRlUHNldWRvQ2xhc3NNYXNrKGNvbnN0IEpTT046OkFycmF5
JiBwc2V1ZG9DbGFzc0FycmF5KQogCiAgICAgdW5zaWduZWQgcmVzdWx0ID0gUHNldWRvQ2xhc3NO
b25lOwogICAgIGZvciAoYXV0byYgcHNldWRvQ2xhc3NWYWx1ZSA6IHBzZXVkb0NsYXNzQXJyYXkp
IHsKLSAgICAgICAgU3RyaW5nIHBzZXVkb0NsYXNzOwotICAgICAgICBib29sIHN1Y2Nlc3MgPSBw
c2V1ZG9DbGFzc1ZhbHVlLT5hc1N0cmluZyhwc2V1ZG9DbGFzcyk7Ci0gICAgICAgIGlmICghc3Vj
Y2VzcykKLSAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBhdXRvIHBzZXVkb0NsYXNzID0g
cHNldWRvQ2xhc3NWYWx1ZS0+YXNTdHJpbmcoKTsKICAgICAgICAgaWYgKHBzZXVkb0NsYXNzID09
IGFjdGl2ZSkKICAgICAgICAgICAgIHJlc3VsdCB8PSBQc2V1ZG9DbGFzc0FjdGl2ZTsKICAgICAg
ICAgZWxzZSBpZiAocHNldWRvQ2xhc3MgPT0gaG92ZXIpCkBAIC0zMTIsOCArMzA5LDcgQEAgdm9p
ZCBJbnNwZWN0b3JDU1NBZ2VudDo6ZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rv
cjo6RnJvbnRlbmRSb3V0ZXIqLAogCiB2b2lkIEluc3BlY3RvckNTU0FnZW50Ojp3aWxsRGVzdHJv
eUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24pCiB7Ci0gICAg
U3RyaW5nIHVudXNlZDsKLSAgICBkaXNhYmxlKHVudXNlZCk7CisgICAgZGlzYWJsZSgpOwogfQog
CiB2b2lkIEluc3BlY3RvckNTU0FnZW50OjpyZXNldCgpCkBAIC0zMjcsMTAgKzMyMywxMCBAQCB2
b2lkIEluc3BlY3RvckNTU0FnZW50OjpyZXNldCgpCiAgICAgcmVzZXRQc2V1ZG9TdGF0ZXMoKTsK
IH0KIAotdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6ZW5hYmxlKEVycm9yU3RyaW5nJikKK1Byb3Rv
Y29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckNTU0FnZW50OjplbmFibGUoKQogewog
ICAgIGlmIChtX2luc3RydW1lbnRpbmdBZ2VudHMuZW5hYmxlZENTU0FnZW50KCkgPT0gdGhpcykK
LSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4geyB9OwogCiAgICAgbV9pbnN0cnVtZW50
aW5nQWdlbnRzLnNldEVuYWJsZWRDU1NBZ2VudCh0aGlzKTsKIApAQCAtMzM4LDEzICszMzQsMTcg
QEAgdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6ZW5hYmxlKEVycm9yU3RyaW5nJikKICAgICAgICAg
Zm9yIChhdXRvKiBkb2N1bWVudCA6IGRvbUFnZW50LT5kb2N1bWVudHMoKSkKICAgICAgICAgICAg
IGFjdGl2ZVN0eWxlU2hlZXRzVXBkYXRlZCgqZG9jdW1lbnQpOwogICAgIH0KKworICAgIHJldHVy
biB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmRpc2FibGUoRXJyb3JTdHJpbmcm
KQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmRpc2Fi
bGUoKQogewogICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy5zZXRFbmFibGVkQ1NTQWdlbnQobnVs
bHB0cik7CiAKICAgICByZXNldCgpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAogdm9pZCBJbnNw
ZWN0b3JDU1NBZ2VudDo6ZG9jdW1lbnREZXRhY2hlZChEb2N1bWVudCYgZG9jdW1lbnQpCkBAIC0z
ODcsNyArMzg3LDcgQEAgdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6c2V0QWN0aXZlU3R5bGVTaGVl
dHNGb3JEb2N1bWVudChEb2N1bWVudCYgZG9jdW1lbnQsIFZlY3QKICAgICAgICAgcHJldmlvdXNs
eUtub3duQWN0aXZlU3R5bGVTaGVldHMucmVtb3ZlKGNzc1N0eWxlU2hlZXQpOwogICAgICAgICBS
ZWZQdHI8SW5zcGVjdG9yU3R5bGVTaGVldD4gaW5zcGVjdG9yU3R5bGVTaGVldCA9IG1fY3NzU3R5
bGVTaGVldFRvSW5zcGVjdG9yU3R5bGVTaGVldC5nZXQoY3NzU3R5bGVTaGVldCk7CiAgICAgICAg
IGlmIChtX2lkVG9JbnNwZWN0b3JTdHlsZVNoZWV0LmNvbnRhaW5zKGluc3BlY3RvclN0eWxlU2hl
ZXQtPmlkKCkpKSB7Ci0gICAgICAgICAgICBTdHJpbmcgaWQgPSB1bmJpbmRTdHlsZVNoZWV0KGlu
c3BlY3RvclN0eWxlU2hlZXQuZ2V0KCkpOworICAgICAgICAgICAgYXV0byBpZCA9IHVuYmluZFN0
eWxlU2hlZXQoaW5zcGVjdG9yU3R5bGVTaGVldC5nZXQoKSk7CiAgICAgICAgICAgICBtX2Zyb250
ZW5kRGlzcGF0Y2hlci0+c3R5bGVTaGVldFJlbW92ZWQoaWQpOwogICAgICAgICB9CiAgICAgfQpA
QCAtMzk2LDcgKzM5Niw4IEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OnNldEFjdGl2ZVN0eWxl
U2hlZXRzRm9yRG9jdW1lbnQoRG9jdW1lbnQmIGRvY3VtZW50LCBWZWN0CiAgICAgICAgIHByZXZp
b3VzbHlLbm93bkFjdGl2ZVN0eWxlU2hlZXRzLmFkZChjc3NTdHlsZVNoZWV0KTsKICAgICAgICAg
aWYgKCFtX2Nzc1N0eWxlU2hlZXRUb0luc3BlY3RvclN0eWxlU2hlZXQuY29udGFpbnMoY3NzU3R5
bGVTaGVldCkpIHsKICAgICAgICAgICAgIEluc3BlY3RvclN0eWxlU2hlZXQqIGluc3BlY3RvclN0
eWxlU2hlZXQgPSBiaW5kU3R5bGVTaGVldChjc3NTdHlsZVNoZWV0KTsKLSAgICAgICAgICAgIG1f
ZnJvbnRlbmREaXNwYXRjaGVyLT5zdHlsZVNoZWV0QWRkZWQoaW5zcGVjdG9yU3R5bGVTaGVldC0+
YnVpbGRPYmplY3RGb3JTdHlsZVNoZWV0SW5mbygpKTsKKyAgICAgICAgICAgIGlmIChhdXRvIGhl
YWRlciA9IGluc3BlY3RvclN0eWxlU2hlZXQtPmJ1aWxkT2JqZWN0Rm9yU3R5bGVTaGVldEluZm8o
KSkKKyAgICAgICAgICAgICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+c3R5bGVTaGVldEFkZGVk
KGhlYWRlci5yZWxlYXNlTm9uTnVsbCgpKTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTQxMCw3
ICs0MTEsNyBAQCBib29sIEluc3BlY3RvckNTU0FnZW50Ojpmb3JjZVBzZXVkb1N0YXRlKGNvbnN0
IEVsZW1lbnQmIGVsZW1lbnQsIENTU1NlbGVjdG9yOjpQcwogICAgIGlmICghZG9tQWdlbnQpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGludCBub2RlSWQgPSBkb21BZ2VudC0+Ym91bmRO
b2RlSWQoJmVsZW1lbnQpOworICAgIGF1dG8gbm9kZUlkID0gZG9tQWdlbnQtPmJvdW5kTm9kZUlk
KCZlbGVtZW50KTsKICAgICBpZiAoIW5vZGVJZCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBA
IC00MjksMzcgKzQzMCwzNyBAQCBib29sIEluc3BlY3RvckNTU0FnZW50Ojpmb3JjZVBzZXVkb1N0
YXRlKGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQsIENTU1NlbGVjdG9yOjpQcwogICAgIH0KIH0KIAot
c3RhdGljIE9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6UHNldWRvSWQ+IHByb3Rv
Y29sVmFsdWVGb3JQc2V1ZG9JZChQc2V1ZG9JZCBwc2V1ZG9JZCkKK3N0YXRpYyBPcHRpb25hbDxQ
cm90b2NvbDo6Q1NTOjpQc2V1ZG9JZD4gcHJvdG9jb2xWYWx1ZUZvclBzZXVkb0lkKFBzZXVkb0lk
IHBzZXVkb0lkKQogewogICAgIHN3aXRjaCAocHNldWRvSWQpIHsKICAgICBjYXNlIFBzZXVkb0lk
OjpGaXJzdExpbmU6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlBz
ZXVkb0lkOjpGaXJzdExpbmU7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6Q1NTOjpQc2V1ZG9J
ZDo6Rmlyc3RMaW5lOwogICAgIGNhc2UgUHNldWRvSWQ6OkZpcnN0TGV0dGVyOgotICAgICAgICBy
ZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpQc2V1ZG9JZDo6Rmlyc3RMZXR0ZXI7Cisg
ICAgICAgIHJldHVybiBQcm90b2NvbDo6Q1NTOjpQc2V1ZG9JZDo6Rmlyc3RMZXR0ZXI7CiAgICAg
Y2FzZSBQc2V1ZG9JZDo6TWFya2VyOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2Nv
bDo6Q1NTOjpQc2V1ZG9JZDo6TWFya2VyOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OkNTUzo6
UHNldWRvSWQ6Ok1hcmtlcjsKICAgICBjYXNlIFBzZXVkb0lkOjpCZWZvcmU6Ci0gICAgICAgIHJl
dHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlBzZXVkb0lkOjpCZWZvcmU7CisgICAgICAg
IHJldHVybiBQcm90b2NvbDo6Q1NTOjpQc2V1ZG9JZDo6QmVmb3JlOwogICAgIGNhc2UgUHNldWRv
SWQ6OkFmdGVyOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpQc2V1
ZG9JZDo6QWZ0ZXI7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6Q1NTOjpQc2V1ZG9JZDo6QWZ0
ZXI7CiAgICAgY2FzZSBQc2V1ZG9JZDo6U2VsZWN0aW9uOgotICAgICAgICByZXR1cm4gSW5zcGVj
dG9yOjpQcm90b2NvbDo6Q1NTOjpQc2V1ZG9JZDo6U2VsZWN0aW9uOworICAgICAgICByZXR1cm4g
UHJvdG9jb2w6OkNTUzo6UHNldWRvSWQ6OlNlbGVjdGlvbjsKICAgICBjYXNlIFBzZXVkb0lkOjpI
aWdobGlnaHQ6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlBzZXVk
b0lkOjpIaWdobGlnaHQ7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6Q1NTOjpQc2V1ZG9JZDo6
SGlnaGxpZ2h0OwogICAgIGNhc2UgUHNldWRvSWQ6OlNjcm9sbGJhcjoKLSAgICAgICAgcmV0dXJu
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6UHNldWRvSWQ6OlNjcm9sbGJhcjsKKyAgICAgICAg
cmV0dXJuIFByb3RvY29sOjpDU1M6OlBzZXVkb0lkOjpTY3JvbGxiYXI7CiAgICAgY2FzZSBQc2V1
ZG9JZDo6U2Nyb2xsYmFyVGh1bWI6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29s
OjpDU1M6OlBzZXVkb0lkOjpTY3JvbGxiYXJUaHVtYjsKKyAgICAgICAgcmV0dXJuIFByb3RvY29s
OjpDU1M6OlBzZXVkb0lkOjpTY3JvbGxiYXJUaHVtYjsKICAgICBjYXNlIFBzZXVkb0lkOjpTY3Jv
bGxiYXJCdXR0b246Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlBz
ZXVkb0lkOjpTY3JvbGxiYXJCdXR0b247CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6Q1NTOjpQ
c2V1ZG9JZDo6U2Nyb2xsYmFyQnV0dG9uOwogICAgIGNhc2UgUHNldWRvSWQ6OlNjcm9sbGJhclRy
YWNrOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpQc2V1ZG9JZDo6
U2Nyb2xsYmFyVHJhY2s7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6Q1NTOjpQc2V1ZG9JZDo6
U2Nyb2xsYmFyVHJhY2s7CiAgICAgY2FzZSBQc2V1ZG9JZDo6U2Nyb2xsYmFyVHJhY2tQaWVjZToK
LSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6UHNldWRvSWQ6OlNjcm9s
bGJhclRyYWNrUGllY2U7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6Q1NTOjpQc2V1ZG9JZDo6
U2Nyb2xsYmFyVHJhY2tQaWVjZTsKICAgICBjYXNlIFBzZXVkb0lkOjpTY3JvbGxiYXJDb3JuZXI6
Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlBzZXVkb0lkOjpTY3Jv
bGxiYXJDb3JuZXI7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6Q1NTOjpQc2V1ZG9JZDo6U2Ny
b2xsYmFyQ29ybmVyOwogICAgIGNhc2UgUHNldWRvSWQ6OlJlc2l6ZXI6Ci0gICAgICAgIHJldHVy
biBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlBzZXVkb0lkOjpSZXNpemVyOworICAgICAgICBy
ZXR1cm4gUHJvdG9jb2w6OkNTUzo6UHNldWRvSWQ6OlJlc2l6ZXI7CiAKICAgICBkZWZhdWx0Ogog
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTQ2NywzNiArNDY4LDM3IEBAIHN0YXRp
YyBPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlBzZXVkb0lkPiBwcm90b2NvbFZh
bHVlRm9yUHNldWRvSWQoUHNlCiAgICAgfQogfQogCi12b2lkIEluc3BlY3RvckNTU0FnZW50Ojpn
ZXRNYXRjaGVkU3R5bGVzRm9yTm9kZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2Rl
SWQsIGNvbnN0IGJvb2wqIGluY2x1ZGVQc2V1ZG8sIGNvbnN0IGJvb2wqIGluY2x1ZGVJbmhlcml0
ZWQsIFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6UnVsZU1h
dGNoPj4mIG1hdGNoZWRDU1NSdWxlcywgUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6Q1NTOjpQc2V1ZG9JZE1hdGNoZXM+PiYgcHNldWRvSWRNYXRjaGVzLCBSZWZQdHI8
SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkluaGVyaXRlZFN0eWxlRW50
cnk+PiYgaW5oZXJpdGVkRW50cmllcykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHN0ZDo6dHVw
bGU8UmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkNTUzo6UnVsZU1hdGNoPj4sIFJlZlB0
cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpDU1M6OlBzZXVkb0lkTWF0Y2hlcz4+LCBSZWZQdHI8
SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6Q1NTOjpJbmhlcml0ZWRTdHlsZUVudHJ5Pj4+PiBJbnNw
ZWN0b3JDU1NBZ2VudDo6Z2V0TWF0Y2hlZFN0eWxlc0Zvck5vZGUoUHJvdG9jb2w6OkRPTTo6Tm9k
ZUlkIG5vZGVJZCwgT3B0aW9uYWw8Ym9vbD4mJiBpbmNsdWRlUHNldWRvLCBPcHRpb25hbDxib29s
PiYmIGluY2x1ZGVJbmhlcml0ZWQpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9y
U3RyaW5nOworCiAgICAgRWxlbWVudCogZWxlbWVudCA9IGVsZW1lbnRGb3JJZChlcnJvclN0cmlu
Zywgbm9kZUlkKTsKICAgICBpZiAoIWVsZW1lbnQpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAg
cmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgIEVsZW1lbnQqIG9yaWdp
bmFsRWxlbWVudCA9IGVsZW1lbnQ7CiAgICAgUHNldWRvSWQgZWxlbWVudFBzZXVkb0lkID0gZWxl
bWVudC0+cHNldWRvSWQoKTsKICAgICBpZiAoZWxlbWVudFBzZXVkb0lkICE9IFBzZXVkb0lkOjpO
b25lKSB7CiAgICAgICAgIGVsZW1lbnQgPSBkb3duY2FzdDxQc2V1ZG9FbGVtZW50PigqZWxlbWVu
dCkuaG9zdEVsZW1lbnQoKTsKLSAgICAgICAgaWYgKCFlbGVtZW50KSB7Ci0gICAgICAgICAgICBl
cnJvclN0cmluZyA9ICJNaXNzaW5nIHBhcmVudCBvZiBwc2V1ZG8tZWxlbWVudCBub2RlIGZvciBn
aXZlbiBub2RlSWQiX3M7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KKyAgICAgICAg
aWYgKCFlbGVtZW50KQorICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJNaXNzaW5n
IHBhcmVudCBvZiBwc2V1ZG8tZWxlbWVudCBub2RlIGZvciBnaXZlbiBub2RlSWQiX3MpOwogICAg
IH0KIAogICAgIC8vIE1hdGNoZWQgcnVsZXMuCiAgICAgYXV0byYgc3R5bGVSZXNvbHZlciA9IGVs
ZW1lbnQtPnN0eWxlUmVzb2x2ZXIoKTsKICAgICBhdXRvIG1hdGNoZWRSdWxlcyA9IHN0eWxlUmVz
b2x2ZXIucHNldWRvU3R5bGVSdWxlc0ZvckVsZW1lbnQoZWxlbWVudCwgZWxlbWVudFBzZXVkb0lk
LCBTdHlsZTo6UmVzb2x2ZXI6OkFsbENTU1J1bGVzKTsKLSAgICBtYXRjaGVkQ1NTUnVsZXMgPSBi
dWlsZEFycmF5Rm9yTWF0Y2hlZFJ1bGVMaXN0KG1hdGNoZWRSdWxlcywgc3R5bGVSZXNvbHZlciwg
KmVsZW1lbnQsIGVsZW1lbnRQc2V1ZG9JZCk7CisgICAgYXV0byBtYXRjaGVkQ1NTUnVsZXMgPSBi
dWlsZEFycmF5Rm9yTWF0Y2hlZFJ1bGVMaXN0KG1hdGNoZWRSdWxlcywgc3R5bGVSZXNvbHZlciwg
KmVsZW1lbnQsIGVsZW1lbnRQc2V1ZG9JZCk7CisgICAgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJv
dG9jb2w6OkNTUzo6UHNldWRvSWRNYXRjaGVzPj4gcHNldWRvRWxlbWVudHM7CisgICAgUmVmUHRy
PEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkNTUzo6SW5oZXJpdGVkU3R5bGVFbnRyeT4+IGluaGVy
aXRlZDsKIAogICAgIGlmICghb3JpZ2luYWxFbGVtZW50LT5pc1BzZXVkb0VsZW1lbnQoKSkgewot
ICAgICAgICAvLyBQc2V1ZG8gZWxlbWVudHMuCiAgICAgICAgIGlmICghaW5jbHVkZVBzZXVkbyB8
fCAqaW5jbHVkZVBzZXVkbykgewotICAgICAgICAgICAgYXV0byBwc2V1ZG9FbGVtZW50cyA9IEpT
T046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpQc2V1ZG9JZE1hdGNoZXM+Ojpj
cmVhdGUoKTsKKyAgICAgICAgICAgIHBzZXVkb0VsZW1lbnRzID0gSlNPTjo6QXJyYXlPZjxQcm90
b2NvbDo6Q1NTOjpQc2V1ZG9JZE1hdGNoZXM+OjpjcmVhdGUoKTsKICAgICAgICAgICAgIGZvciAo
UHNldWRvSWQgcHNldWRvSWQgPSBQc2V1ZG9JZDo6Rmlyc3RQdWJsaWNQc2V1ZG9JZDsgcHNldWRv
SWQgPCBQc2V1ZG9JZDo6QWZ0ZXJMYXN0SW50ZXJuYWxQc2V1ZG9JZDsgcHNldWRvSWQgPSBzdGF0
aWNfY2FzdDxQc2V1ZG9JZD4oc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHBzZXVkb0lkKSArIDEpKSB7
CiAgICAgICAgICAgICAgICAgaWYgKGF1dG8gcHJvdG9jb2xQc2V1ZG9JZCA9IHByb3RvY29sVmFs
dWVGb3JQc2V1ZG9JZChwc2V1ZG9JZCkpIHsKICAgICAgICAgICAgICAgICAgICAgYXV0byBtYXRj
aGVkUnVsZXMgPSBzdHlsZVJlc29sdmVyLnBzZXVkb1N0eWxlUnVsZXNGb3JFbGVtZW50KGVsZW1l
bnQsIHBzZXVkb0lkLCBTdHlsZTo6UmVzb2x2ZXI6OkFsbENTU1J1bGVzKTsKICAgICAgICAgICAg
ICAgICAgICAgaWYgKCFtYXRjaGVkUnVsZXMuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBhdXRvIG1hdGNoZXMgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlBzZXVkb0lk
TWF0Y2hlczo6Y3JlYXRlKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gbWF0Y2hlcyA9
IFByb3RvY29sOjpDU1M6OlBzZXVkb0lkTWF0Y2hlczo6Y3JlYXRlKCkKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAuc2V0UHNldWRvSWQocHJvdG9jb2xQc2V1ZG9JZC52YWx1ZSgpKQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRNYXRjaGVzKGJ1aWxkQXJyYXlGb3JNYXRjaGVk
UnVsZUxpc3QobWF0Y2hlZFJ1bGVzLCBzdHlsZVJlc29sdmVyLCAqZWxlbWVudCwgcHNldWRvSWQp
KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZWxlYXNlKCk7CkBAIC01MDQsNjYgKzUw
Niw2NiBAQCB2b2lkIEluc3BlY3RvckNTU0FnZW50OjpnZXRNYXRjaGVkU3R5bGVzRm9yTm9kZShF
cnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBubwogICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBwc2V1ZG9JZE1h
dGNoZXMgPSBXVEZNb3ZlKHBzZXVkb0VsZW1lbnRzKTsKICAgICAgICAgfQogCi0gICAgICAgIC8v
IEluaGVyaXRlZCBzdHlsZXMuCiAgICAgICAgIGlmICghaW5jbHVkZUluaGVyaXRlZCB8fCAqaW5j
bHVkZUluaGVyaXRlZCkgewotICAgICAgICAgICAgYXV0byBlbnRyaWVzID0gSlNPTjo6QXJyYXlP
ZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkluaGVyaXRlZFN0eWxlRW50cnk+OjpjcmVhdGUo
KTsKKyAgICAgICAgICAgIGluaGVyaXRlZCA9IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkNTUzo6
SW5oZXJpdGVkU3R5bGVFbnRyeT46OmNyZWF0ZSgpOwogICAgICAgICAgICAgZm9yIChhdXRvJiBh
bmNlc3RvciA6IGFuY2VzdG9yc09mVHlwZTxFbGVtZW50PigqZWxlbWVudCkpIHsKICAgICAgICAg
ICAgICAgICBhdXRvJiBwYXJlbnRTdHlsZVJlc29sdmVyID0gYW5jZXN0b3Iuc3R5bGVSZXNvbHZl
cigpOwogICAgICAgICAgICAgICAgIGF1dG8gcGFyZW50TWF0Y2hlZFJ1bGVzID0gcGFyZW50U3R5
bGVSZXNvbHZlci5zdHlsZVJ1bGVzRm9yRWxlbWVudCgmYW5jZXN0b3IsIFN0eWxlOjpSZXNvbHZl
cjo6QWxsQ1NTUnVsZXMpOwotICAgICAgICAgICAgICAgIGF1dG8gZW50cnkgPSBJbnNwZWN0b3I6
OlByb3RvY29sOjpDU1M6OkluaGVyaXRlZFN0eWxlRW50cnk6OmNyZWF0ZSgpCisgICAgICAgICAg
ICAgICAgYXV0byBlbnRyeSA9IFByb3RvY29sOjpDU1M6OkluaGVyaXRlZFN0eWxlRW50cnk6OmNy
ZWF0ZSgpCiAgICAgICAgICAgICAgICAgICAgIC5zZXRNYXRjaGVkQ1NTUnVsZXMoYnVpbGRBcnJh
eUZvck1hdGNoZWRSdWxlTGlzdChwYXJlbnRNYXRjaGVkUnVsZXMsIHN0eWxlUmVzb2x2ZXIsIGFu
Y2VzdG9yLCBQc2V1ZG9JZDo6Tm9uZSkpCiAgICAgICAgICAgICAgICAgICAgIC5yZWxlYXNlKCk7
CiAgICAgICAgICAgICAgICAgaWYgKGlzPFN0eWxlZEVsZW1lbnQ+KGFuY2VzdG9yKSAmJiBkb3du
Y2FzdDxTdHlsZWRFbGVtZW50PihhbmNlc3RvcikuY3Nzb21TdHlsZSgpLmxlbmd0aCgpKSB7CiAg
ICAgICAgICAgICAgICAgICAgIGF1dG8mIHN0eWxlU2hlZXQgPSBhc0luc3BlY3RvclN0eWxlU2hl
ZXQoZG93bmNhc3Q8U3R5bGVkRWxlbWVudD4oYW5jZXN0b3IpKTsKICAgICAgICAgICAgICAgICAg
ICAgZW50cnktPnNldElubGluZVN0eWxlKHN0eWxlU2hlZXQuYnVpbGRPYmplY3RGb3JTdHlsZShz
dHlsZVNoZWV0LnN0eWxlRm9ySWQoSW5zcGVjdG9yQ1NTSWQoc3R5bGVTaGVldC5pZCgpLCAwKSkp
KTsKICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBlbnRyaWVzLT5hZGRJdGVt
KFdURk1vdmUoZW50cnkpKTsKKyAgICAgICAgICAgICAgICBpbmhlcml0ZWQtPmFkZEl0ZW0oV1RG
TW92ZShlbnRyeSkpOwogICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpbmhlcml0ZWRFbnRy
aWVzID0gV1RGTW92ZShlbnRyaWVzKTsKICAgICAgICAgfQogICAgIH0KKworICAgIHJldHVybiB7
IHsgV1RGTW92ZShtYXRjaGVkQ1NTUnVsZXMpLCBXVEZNb3ZlKHBzZXVkb0VsZW1lbnRzKSwgV1RG
TW92ZShpbmhlcml0ZWQpIH0gfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0SW5s
aW5lU3R5bGVzRm9yTm9kZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQsIFJl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlPiYgaW5saW5lU3R5bGUsIFJl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlPiYgYXR0cmlidXRlc1N0eWxl
KQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8c3RkOjp0dXBsZTxSZWZQdHI8UHJvdG9jb2w6OkNT
Uzo6Q1NTU3R5bGU+IC8qIGlubGluZVN0eWxlICovLCBSZWZQdHI8UHJvdG9jb2w6OkNTUzo6Q1NT
U3R5bGU+IC8qIGF0dHJpYnV0ZXNTdHlsZSAqLz4+IEluc3BlY3RvckNTU0FnZW50OjpnZXRJbmxp
bmVTdHlsZXNGb3JOb2RlKFByb3RvY29sOjpET006Ok5vZGVJZCBub2RlSWQpCiB7CisgICAgUHJv
dG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAgICAgYXV0byogZWxlbWVudCA9IGVs
ZW1lbnRGb3JJZChlcnJvclN0cmluZywgbm9kZUlkKTsKICAgICBpZiAoIWlzPFN0eWxlZEVsZW1l
bnQ+KGVsZW1lbnQpKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBl
Y3RlZChlcnJvclN0cmluZyk7CiAKICAgICBhdXRvJiBzdHlsZWRFbGVtZW50ID0gZG93bmNhc3Q8
U3R5bGVkRWxlbWVudD4oKmVsZW1lbnQpOwogICAgIGF1dG8mIHN0eWxlU2hlZXQgPSBhc0luc3Bl
Y3RvclN0eWxlU2hlZXQoc3R5bGVkRWxlbWVudCk7Ci0gICAgaW5saW5lU3R5bGUgPSBzdHlsZVNo
ZWV0LmJ1aWxkT2JqZWN0Rm9yU3R5bGUoJnN0eWxlZEVsZW1lbnQuY3Nzb21TdHlsZSgpKTsKLSAg
ICBpZiAoYXV0byBhdHRyaWJ1dGVzID0gYnVpbGRPYmplY3RGb3JBdHRyaWJ1dGVzU3R5bGUoc3R5
bGVkRWxlbWVudCkpCi0gICAgICAgIGF0dHJpYnV0ZXNTdHlsZSA9IFdURk1vdmUoYXR0cmlidXRl
cyk7Ci0gICAgZWxzZQotICAgICAgICBhdHRyaWJ1dGVzU3R5bGUgPSBudWxscHRyOworICAgIHJl
dHVybiB7IHsgc3R5bGVTaGVldC5idWlsZE9iamVjdEZvclN0eWxlKCZzdHlsZWRFbGVtZW50LmNz
c29tU3R5bGUoKSksIGJ1aWxkT2JqZWN0Rm9yQXR0cmlidXRlc1N0eWxlKHN0eWxlZEVsZW1lbnQp
IH0gfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0Q29tcHV0ZWRTdHlsZUZvck5v
ZGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkLCBSZWZQdHI8SlNPTjo6QXJy
YXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU0NvbXB1dGVkU3R5bGVQcm9wZXJ0eT4+
JiBzdHlsZSkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPFByb3Rv
Y29sOjpDU1M6OkNTU0NvbXB1dGVkU3R5bGVQcm9wZXJ0eT4+PiBJbnNwZWN0b3JDU1NBZ2VudDo6
Z2V0Q29tcHV0ZWRTdHlsZUZvck5vZGUoUHJvdG9jb2w6OkRPTTo6Tm9kZUlkIG5vZGVJZCkKIHsK
KyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBhdXRvKiBlbGVt
ZW50ID0gZWxlbWVudEZvcklkKGVycm9yU3RyaW5nLCBub2RlSWQpOwogICAgIGlmICghZWxlbWVu
dCkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JT
dHJpbmcpOwogCiAgICAgYXV0byBjb21wdXRlZFN0eWxlSW5mbyA9IENTU0NvbXB1dGVkU3R5bGVE
ZWNsYXJhdGlvbjo6Y3JlYXRlKCplbGVtZW50LCB0cnVlKTsKICAgICBhdXRvIGluc3BlY3RvclN0
eWxlID0gSW5zcGVjdG9yU3R5bGU6OmNyZWF0ZShJbnNwZWN0b3JDU1NJZCgpLCBXVEZNb3ZlKGNv
bXB1dGVkU3R5bGVJbmZvKSwgbnVsbHB0cik7Ci0gICAgc3R5bGUgPSBpbnNwZWN0b3JTdHlsZS0+
YnVpbGRBcnJheUZvckNvbXB1dGVkU3R5bGUoKTsKKyAgICByZXR1cm4gaW5zcGVjdG9yU3R5bGUt
PmJ1aWxkQXJyYXlGb3JDb21wdXRlZFN0eWxlKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ1NTQWdl
bnQ6OmdldEFsbFN0eWxlU2hlZXRzKEVycm9yU3RyaW5nJiwgUmVmUHRyPEpTT046OkFycmF5T2Y8
SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZVNoZWV0SGVhZGVyPj4mIHN0eWxlSW5m
b3MpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6
Q1NTOjpDU1NTdHlsZVNoZWV0SGVhZGVyPj4+IEluc3BlY3RvckNTU0FnZW50OjpnZXRBbGxTdHls
ZVNoZWV0cygpCiB7Ci0gICAgc3R5bGVJbmZvcyA9IEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6Q1NTOjpDU1NTdHlsZVNoZWV0SGVhZGVyPjo6Y3JlYXRlKCk7CisgICAgYXV0byBo
ZWFkZXJzID0gSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZVNoZWV0SGVhZGVy
Pjo6Y3JlYXRlKCk7CiAKICAgICBWZWN0b3I8SW5zcGVjdG9yU3R5bGVTaGVldCo+IGluc3BlY3Rv
clN0eWxlU2hlZXRzOwogICAgIGNvbGxlY3RBbGxTdHlsZVNoZWV0cyhpbnNwZWN0b3JTdHlsZVNo
ZWV0cyk7Ci0gICAgZm9yIChhdXRvKiBpbnNwZWN0b3JTdHlsZVNoZWV0IDogaW5zcGVjdG9yU3R5
bGVTaGVldHMpCi0gICAgICAgIHN0eWxlSW5mb3MtPmFkZEl0ZW0oaW5zcGVjdG9yU3R5bGVTaGVl
dC0+YnVpbGRPYmplY3RGb3JTdHlsZVNoZWV0SW5mbygpKTsKKyAgICBmb3IgKGF1dG8qIGluc3Bl
Y3RvclN0eWxlU2hlZXQgOiBpbnNwZWN0b3JTdHlsZVNoZWV0cykgeworICAgICAgICBpZiAoYXV0
byBoZWFkZXIgPSBpbnNwZWN0b3JTdHlsZVNoZWV0LT5idWlsZE9iamVjdEZvclN0eWxlU2hlZXRJ
bmZvKCkpCisgICAgICAgICAgICBoZWFkZXJzLT5hZGRJdGVtKGhlYWRlci5yZWxlYXNlTm9uTnVs
bCgpKTsKKyAgICB9CisKKyAgICByZXR1cm4gV1RGTW92ZShoZWFkZXJzKTsKIH0KIAogdm9pZCBJ
bnNwZWN0b3JDU1NBZ2VudDo6Y29sbGVjdEFsbFN0eWxlU2hlZXRzKFZlY3RvcjxJbnNwZWN0b3JT
dHlsZVNoZWV0Kj4mIHJlc3VsdCkKQEAgLTU5OCwxMTYgKzYwMCwxMjQgQEAgdm9pZCBJbnNwZWN0
b3JDU1NBZ2VudDo6Y29sbGVjdFN0eWxlU2hlZXRzKENTU1N0eWxlU2hlZXQqIHN0eWxlU2hlZXQs
IFZlY3RvcjxDU1MKICAgICB9CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldFN0eWxl
U2hlZXQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHN0eWxlU2hlZXRJ
ZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGVTaGVldEJvZHk+JiBz
dHlsZVNoZWV0T2JqZWN0KQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPFByb3RvY29sOjpD
U1M6OkNTU1N0eWxlU2hlZXRCb2R5Pj4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldFN0eWxlU2hlZXQo
Y29uc3QgUHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldElkJiBzdHlsZVNoZWV0SWQpCiB7CisgICAg
UHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAgICAgSW5zcGVjdG9yU3R5bGVT
aGVldCogaW5zcGVjdG9yU3R5bGVTaGVldCA9IGFzc2VydFN0eWxlU2hlZXRGb3JJZChlcnJvclN0
cmluZywgc3R5bGVTaGVldElkKTsKICAgICBpZiAoIWluc3BlY3RvclN0eWxlU2hlZXQpCi0gICAg
ICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsK
IAotICAgIHN0eWxlU2hlZXRPYmplY3QgPSBpbnNwZWN0b3JTdHlsZVNoZWV0LT5idWlsZE9iamVj
dEZvclN0eWxlU2hlZXQoKTsKKyAgICBhdXRvIHN0eWxlU2hlZXQgPSBpbnNwZWN0b3JTdHlsZVNo
ZWV0LT5idWlsZE9iamVjdEZvclN0eWxlU2hlZXQoKTsKKyAgICBpZiAoIXN0eWxlU2hlZXQpCisg
ICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiSW50ZXJuYWwgZXJyb3I6IG1pc3Npbmcgc3R5
bGUgc2hlZXQiKTsKKworICAgIHJldHVybiBzdHlsZVNoZWV0LnJlbGVhc2VOb25OdWxsKCk7CiB9
CiAKLXZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldFN0eWxlU2hlZXRUZXh0KEVycm9yU3RyaW5n
JiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBzdHlsZVNoZWV0SWQsIFN0cmluZyogcmVzdWx0
KQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8U3RyaW5nPiBJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0
U3R5bGVTaGVldFRleHQoY29uc3QgUHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldElkJiBzdHlsZVNo
ZWV0SWQpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAgICAg
SW5zcGVjdG9yU3R5bGVTaGVldCogaW5zcGVjdG9yU3R5bGVTaGVldCA9IGFzc2VydFN0eWxlU2hl
ZXRGb3JJZChlcnJvclN0cmluZywgc3R5bGVTaGVldElkKTsKICAgICBpZiAoIWluc3BlY3RvclN0
eWxlU2hlZXQpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVk
KGVycm9yU3RyaW5nKTsKIAogICAgIGF1dG8gdGV4dCA9IGluc3BlY3RvclN0eWxlU2hlZXQtPnRl
eHQoKTsKLSAgICBpZiAoIXRleHQuaGFzRXhjZXB0aW9uKCkpCi0gICAgICAgICpyZXN1bHQgPSB0
ZXh0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpOworICAgIGlmICh0ZXh0Lmhhc0V4Y2VwdGlvbigpKQor
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoSW5zcGVjdG9yRE9NQWdlbnQ6OnRvRXJyb3JT
dHJpbmcodGV4dC5yZWxlYXNlRXhjZXB0aW9uKCkpKTsKKworICAgIHJldHVybiB0ZXh0LnJlbGVh
c2VSZXR1cm5WYWx1ZSgpOwogfQogCi12b2lkIEluc3BlY3RvckNTU0FnZW50OjpzZXRTdHlsZVNo
ZWV0VGV4dChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgc3R5bGVTaGVl
dElkLCBjb25zdCBTdHJpbmcmIHRleHQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJ
bnNwZWN0b3JDU1NBZ2VudDo6c2V0U3R5bGVTaGVldFRleHQoY29uc3QgUHJvdG9jb2w6OkNTUzo6
U3R5bGVTaGVldElkJiBzdHlsZVNoZWV0SWQsIGNvbnN0IFN0cmluZyYgdGV4dCkKIHsKKyAgICBQ
cm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBJbnNwZWN0b3JTdHlsZVNo
ZWV0KiBpbnNwZWN0b3JTdHlsZVNoZWV0ID0gYXNzZXJ0U3R5bGVTaGVldEZvcklkKGVycm9yU3Ry
aW5nLCBzdHlsZVNoZWV0SWQpOwogICAgIGlmICghaW5zcGVjdG9yU3R5bGVTaGVldCkKLSAgICAg
ICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwog
CiAgICAgYXV0byogZG9tQWdlbnQgPSBtX2luc3RydW1lbnRpbmdBZ2VudHMucGVyc2lzdGVudERP
TUFnZW50KCk7Ci0gICAgaWYgKCFkb21BZ2VudCkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJE
T00gZG9tYWluIG11c3QgYmUgZW5hYmxlZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAg
ICBpZiAoIWRvbUFnZW50KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkRPTSBkb21h
aW4gbXVzdCBiZSBlbmFibGVkIl9zKTsKIAogICAgIGF1dG8gcmVzdWx0ID0gZG9tQWdlbnQtPmhp
c3RvcnkoKS0+cGVyZm9ybShtYWtlVW5pcXVlPFNldFN0eWxlU2hlZXRUZXh0QWN0aW9uPihpbnNw
ZWN0b3JTdHlsZVNoZWV0LCB0ZXh0KSk7CiAgICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkK
LSAgICAgICAgZXJyb3JTdHJpbmcgPSBJbnNwZWN0b3JET01BZ2VudDo6dG9FcnJvclN0cmluZyhy
ZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpKTsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVk
KEluc3BlY3RvckRPTUFnZW50Ojp0b0Vycm9yU3RyaW5nKHJlc3VsdC5yZWxlYXNlRXhjZXB0aW9u
KCkpKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OnNl
dFN0eWxlVGV4dChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IEpTT046Ok9iamVjdCYg
ZnVsbFN0eWxlSWQsIGNvbnN0IFN0cmluZyYgdGV4dCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkNTUzo6Q1NTU3R5bGU+JiByZXN1bHQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8
UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+PiBJbnNwZWN0b3JDU1NBZ2VudDo6c2V0U3R5bGVUZXh0
KFJlZjxKU09OOjpPYmplY3Q+JiYgc3R5bGVJZCwgY29uc3QgU3RyaW5nJiB0ZXh0KQogewotICAg
IEluc3BlY3RvckNTU0lkIGNvbXBvdW5kSWQoZnVsbFN0eWxlSWQpOworICAgIFByb3RvY29sOjpF
cnJvclN0cmluZyBlcnJvclN0cmluZzsKKworICAgIEluc3BlY3RvckNTU0lkIGNvbXBvdW5kSWQo
c3R5bGVJZCk7CiAgICAgQVNTRVJUKCFjb21wb3VuZElkLmlzRW1wdHkoKSk7CiAKICAgICBJbnNw
ZWN0b3JTdHlsZVNoZWV0KiBpbnNwZWN0b3JTdHlsZVNoZWV0ID0gYXNzZXJ0U3R5bGVTaGVldEZv
cklkKGVycm9yU3RyaW5nLCBjb21wb3VuZElkLnN0eWxlU2hlZXRJZCgpKTsKICAgICBpZiAoIWlu
c3BlY3RvclN0eWxlU2hlZXQpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgIGF1dG8qIGRvbUFnZW50ID0gbV9pbnN0cnVt
ZW50aW5nQWdlbnRzLnBlcnNpc3RlbnRET01BZ2VudCgpOwotICAgIGlmICghZG9tQWdlbnQpIHsK
LSAgICAgICAgZXJyb3JTdHJpbmcgPSAiRE9NIGRvbWFpbiBtdXN0IGJlIGVuYWJsZWQiX3M7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKCFkb21BZ2VudCkKKyAgICAgICAgcmV0dXJu
IG1ha2VVbmV4cGVjdGVkKCJET00gZG9tYWluIG11c3QgYmUgZW5hYmxlZCJfcyk7CiAKICAgICBh
dXRvIHBlcmZvcm1SZXN1bHQgPSBkb21BZ2VudC0+aGlzdG9yeSgpLT5wZXJmb3JtKG1ha2VVbmlx
dWU8U2V0U3R5bGVUZXh0QWN0aW9uPihpbnNwZWN0b3JTdHlsZVNoZWV0LCBjb21wb3VuZElkLCB0
ZXh0KSk7Ci0gICAgaWYgKHBlcmZvcm1SZXN1bHQuaGFzRXhjZXB0aW9uKCkpIHsKLSAgICAgICAg
ZXJyb3JTdHJpbmcgPSBJbnNwZWN0b3JET01BZ2VudDo6dG9FcnJvclN0cmluZyhwZXJmb3JtUmVz
dWx0LnJlbGVhc2VFeGNlcHRpb24oKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYg
KHBlcmZvcm1SZXN1bHQuaGFzRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBl
Y3RlZChJbnNwZWN0b3JET01BZ2VudDo6dG9FcnJvclN0cmluZyhwZXJmb3JtUmVzdWx0LnJlbGVh
c2VFeGNlcHRpb24oKSkpOwogCi0gICAgcmVzdWx0ID0gaW5zcGVjdG9yU3R5bGVTaGVldC0+YnVp
bGRPYmplY3RGb3JTdHlsZShpbnNwZWN0b3JTdHlsZVNoZWV0LT5zdHlsZUZvcklkKGNvbXBvdW5k
SWQpKTsKKyAgICByZXR1cm4gaW5zcGVjdG9yU3R5bGVTaGVldC0+YnVpbGRPYmplY3RGb3JTdHls
ZShpbnNwZWN0b3JTdHlsZVNoZWV0LT5zdHlsZUZvcklkKGNvbXBvdW5kSWQpKTsKIH0KIAotdm9p
ZCBJbnNwZWN0b3JDU1NBZ2VudDo6c2V0UnVsZVNlbGVjdG9yKEVycm9yU3RyaW5nJiBlcnJvclN0
cmluZywgY29uc3QgSlNPTjo6T2JqZWN0JiBmdWxsUnVsZUlkLCBjb25zdCBTdHJpbmcmIHNlbGVj
dG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NSdWxlPiYgcmVzdWx0KQor
UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPFByb3RvY29sOjpDU1M6OkNTU1J1bGU+PiBJbnNw
ZWN0b3JDU1NBZ2VudDo6c2V0UnVsZVNlbGVjdG9yKFJlZjxKU09OOjpPYmplY3Q+JiYgcnVsZUlk
LCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yKQogewotICAgIEluc3BlY3RvckNTU0lkIGNvbXBvdW5k
SWQoZnVsbFJ1bGVJZCk7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOwor
CisgICAgSW5zcGVjdG9yQ1NTSWQgY29tcG91bmRJZChydWxlSWQpOwogICAgIEFTU0VSVCghY29t
cG91bmRJZC5pc0VtcHR5KCkpOwogCiAgICAgSW5zcGVjdG9yU3R5bGVTaGVldCogaW5zcGVjdG9y
U3R5bGVTaGVldCA9IGFzc2VydFN0eWxlU2hlZXRGb3JJZChlcnJvclN0cmluZywgY29tcG91bmRJ
ZC5zdHlsZVNoZWV0SWQoKSk7CiAgICAgaWYgKCFpbnNwZWN0b3JTdHlsZVNoZWV0KQotICAgICAg
ICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAK
ICAgICBhdXRvKiBkb21BZ2VudCA9IG1faW5zdHJ1bWVudGluZ0FnZW50cy5wZXJzaXN0ZW50RE9N
QWdlbnQoKTsKLSAgICBpZiAoIWRvbUFnZW50KSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIkRP
TSBkb21haW4gbXVzdCBiZSBlbmFibGVkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAg
IGlmICghZG9tQWdlbnQpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiRE9NIGRvbWFp
biBtdXN0IGJlIGVuYWJsZWQiX3MpOwogCiAgICAgYXV0byBwZXJmb3JtUmVzdWx0ID0gZG9tQWdl
bnQtPmhpc3RvcnkoKS0+cGVyZm9ybShtYWtlVW5pcXVlPFNldFJ1bGVTZWxlY3RvckFjdGlvbj4o
aW5zcGVjdG9yU3R5bGVTaGVldCwgY29tcG91bmRJZCwgc2VsZWN0b3IpKTsKLSAgICBpZiAocGVy
Zm9ybVJlc3VsdC5oYXNFeGNlcHRpb24oKSkgewotICAgICAgICBlcnJvclN0cmluZyA9IEluc3Bl
Y3RvckRPTUFnZW50Ojp0b0Vycm9yU3RyaW5nKHBlcmZvcm1SZXN1bHQucmVsZWFzZUV4Y2VwdGlv
bigpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAocGVyZm9ybVJlc3VsdC5oYXNF
eGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEluc3BlY3RvckRPTUFn
ZW50Ojp0b0Vycm9yU3RyaW5nKHBlcmZvcm1SZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpKSk7CiAK
LSAgICByZXN1bHQgPSBpbnNwZWN0b3JTdHlsZVNoZWV0LT5idWlsZE9iamVjdEZvclJ1bGUoaW5z
cGVjdG9yU3R5bGVTaGVldC0+cnVsZUZvcklkKGNvbXBvdW5kSWQpKTsKKyAgICBhdXRvIHJ1bGUg
PSBpbnNwZWN0b3JTdHlsZVNoZWV0LT5idWlsZE9iamVjdEZvclJ1bGUoaW5zcGVjdG9yU3R5bGVT
aGVldC0+cnVsZUZvcklkKGNvbXBvdW5kSWQpKTsKKyAgICBpZiAoIXJ1bGUpCisgICAgICAgIHJl
dHVybiBtYWtlVW5leHBlY3RlZCgiSW50ZXJuYWwgZXJyb3I6IG1pc3Npbmcgc3R5bGUgc2hlZXQi
KTsKKworICAgIHJldHVybiBydWxlLnJlbGVhc2VOb25OdWxsKCk7CiB9CiAKLXZvaWQgSW5zcGVj
dG9yQ1NTQWdlbnQ6OmNyZWF0ZVN0eWxlU2hlZXQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBj
b25zdCBTdHJpbmcmIGZyYW1lSWQsIFN0cmluZyogc3R5bGVTaGVldElkKQorUHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8UHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldElkPiBJbnNwZWN0b3JDU1NBZ2Vu
dDo6Y3JlYXRlU3R5bGVTaGVldChjb25zdCBQcm90b2NvbDo6TmV0d29yazo6RnJhbWVJZCYgZnJh
bWVJZCkKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBh
dXRvKiBwYWdlQWdlbnQgPSBtX2luc3RydW1lbnRpbmdBZ2VudHMuZW5hYmxlZFBhZ2VBZ2VudCgp
OwotICAgIGlmICghcGFnZUFnZW50KSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIlBhZ2UgZG9t
YWluIG11c3QgYmUgZW5hYmxlZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAo
IXBhZ2VBZ2VudCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJQYWdlIGRvbWFpbiBt
dXN0IGJlIGVuYWJsZWQiX3MpOwogCiAgICAgYXV0byogZnJhbWUgPSBwYWdlQWdlbnQtPmFzc2Vy
dEZyYW1lKGVycm9yU3RyaW5nLCBmcmFtZUlkKTsKICAgICBpZiAoIWZyYW1lKQotICAgICAgICBy
ZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAg
ICBEb2N1bWVudCogZG9jdW1lbnQgPSBmcmFtZS0+ZG9jdW1lbnQoKTsKLSAgICBpZiAoIWRvY3Vt
ZW50KSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIk1pc3NpbmcgZG9jdW1lbnQgb2YgZnJhbWUg
Zm9yIGdpdmVuIGZyYW1lSWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKCFk
b2N1bWVudCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJNaXNzaW5nIGRvY3VtZW50
IG9mIGZyYW1lIGZvciBnaXZlbiBmcmFtZUlkIl9zKTsKIAogICAgIEluc3BlY3RvclN0eWxlU2hl
ZXQqIGluc3BlY3RvclN0eWxlU2hlZXQgPSBjcmVhdGVJbnNwZWN0b3JTdHlsZVNoZWV0Rm9yRG9j
dW1lbnQoKmRvY3VtZW50KTsKLSAgICBpZiAoIWluc3BlY3RvclN0eWxlU2hlZXQpIHsKLSAgICAg
ICAgZXJyb3JTdHJpbmcgPSAiQ291bGQgbm90IGNyZWF0ZSBzdHlsZSBzaGVldCBmb3IgZG9jdW1l
bnQgb2YgZnJhbWUgZm9yIGdpdmVuIGZyYW1lSWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
CisgICAgaWYgKCFpbnNwZWN0b3JTdHlsZVNoZWV0KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoIkNvdWxkIG5vdCBjcmVhdGUgc3R5bGUgc2hlZXQgZm9yIGRvY3VtZW50IG9mIGZyYW1l
IGZvciBnaXZlbiBmcmFtZUlkIl9zKTsKIAotICAgICpzdHlsZVNoZWV0SWQgPSBpbnNwZWN0b3JT
dHlsZVNoZWV0LT5pZCgpOworICAgIHJldHVybiBpbnNwZWN0b3JTdHlsZVNoZWV0LT5pZCgpOwog
fQogCiBJbnNwZWN0b3JTdHlsZVNoZWV0KiBJbnNwZWN0b3JDU1NBZ2VudDo6Y3JlYXRlSW5zcGVj
dG9yU3R5bGVTaGVldEZvckRvY3VtZW50KERvY3VtZW50JiBkb2N1bWVudCkKQEAgLTc1MSw0MSAr
NzYxLDQyIEBAIEluc3BlY3RvclN0eWxlU2hlZXQqIEluc3BlY3RvckNTU0FnZW50OjpjcmVhdGVJ
bnNwZWN0b3JTdHlsZVNoZWV0Rm9yRG9jdW1lbnQoRG9jCiAgICAgcmV0dXJuIGluc3BlY3RvclN0
eWxlU2hlZXRzRm9yRG9jdW1lbnQubGFzdCgpLmdldCgpOwogfQogCi12b2lkIEluc3BlY3RvckNT
U0FnZW50OjphZGRSdWxlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBz
dHlsZVNoZWV0SWQsIGNvbnN0IFN0cmluZyYgc2VsZWN0b3IsIFJlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpDU1M6OkNTU1J1bGU+JiByZXN1bHQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxS
ZWY8UHJvdG9jb2w6OkNTUzo6Q1NTUnVsZT4+IEluc3BlY3RvckNTU0FnZW50OjphZGRSdWxlKGNv
bnN0IFByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRJZCYgc3R5bGVTaGVldElkLCBjb25zdCBTdHJp
bmcmIHNlbGVjdG9yKQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsK
KwogICAgIEluc3BlY3RvclN0eWxlU2hlZXQqIGluc3BlY3RvclN0eWxlU2hlZXQgPSBhc3NlcnRT
dHlsZVNoZWV0Rm9ySWQoZXJyb3JTdHJpbmcsIHN0eWxlU2hlZXRJZCk7CiAgICAgaWYgKCFpbnNw
ZWN0b3JTdHlsZVNoZWV0KQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5l
eHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAgICBhdXRvKiBkb21BZ2VudCA9IG1faW5zdHJ1bWVu
dGluZ0FnZW50cy5wZXJzaXN0ZW50RE9NQWdlbnQoKTsKLSAgICBpZiAoIWRvbUFnZW50KSB7Ci0g
ICAgICAgIGVycm9yU3RyaW5nID0gIkRPTSBkb21haW4gbXVzdCBiZSBlbmFibGVkIl9zOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghZG9tQWdlbnQpCisgICAgICAgIHJldHVybiBt
YWtlVW5leHBlY3RlZCgiRE9NIGRvbWFpbiBtdXN0IGJlIGVuYWJsZWQiX3MpOwogCiAgICAgYXV0
byBhY3Rpb24gPSBtYWtlVW5pcXVlPEFkZFJ1bGVBY3Rpb24+KGluc3BlY3RvclN0eWxlU2hlZXQs
IHNlbGVjdG9yKTsKICAgICBhdXRvJiByYXdBY3Rpb24gPSAqYWN0aW9uOwogICAgIGF1dG8gcGVy
Zm9ybVJlc3VsdCA9IGRvbUFnZW50LT5oaXN0b3J5KCktPnBlcmZvcm0oV1RGTW92ZShhY3Rpb24p
KTsKLSAgICBpZiAocGVyZm9ybVJlc3VsdC5oYXNFeGNlcHRpb24oKSkgewotICAgICAgICBlcnJv
clN0cmluZyA9IEluc3BlY3RvckRPTUFnZW50Ojp0b0Vycm9yU3RyaW5nKHBlcmZvcm1SZXN1bHQu
cmVsZWFzZUV4Y2VwdGlvbigpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAocGVy
Zm9ybVJlc3VsdC5oYXNFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVk
KEluc3BlY3RvckRPTUFnZW50Ojp0b0Vycm9yU3RyaW5nKHBlcmZvcm1SZXN1bHQucmVsZWFzZUV4
Y2VwdGlvbigpKSk7CiAKLSAgICBJbnNwZWN0b3JDU1NJZCBydWxlSWQgPSByYXdBY3Rpb24ubmV3
UnVsZUlkKCk7Ci0gICAgQ1NTU3R5bGVSdWxlKiBydWxlID0gaW5zcGVjdG9yU3R5bGVTaGVldC0+
cnVsZUZvcklkKHJ1bGVJZCk7Ci0gICAgcmVzdWx0ID0gaW5zcGVjdG9yU3R5bGVTaGVldC0+YnVp
bGRPYmplY3RGb3JSdWxlKHJ1bGUpOworICAgIGF1dG8gcnVsZSA9IGluc3BlY3RvclN0eWxlU2hl
ZXQtPmJ1aWxkT2JqZWN0Rm9yUnVsZShpbnNwZWN0b3JTdHlsZVNoZWV0LT5ydWxlRm9ySWQocmF3
QWN0aW9uLm5ld1J1bGVJZCgpKSk7CisgICAgaWYgKCFydWxlKQorICAgICAgICByZXR1cm4gbWFr
ZVVuZXhwZWN0ZWQoIkludGVybmFsIGVycm9yOiBtaXNzaW5nIHN0eWxlIHNoZWV0Iik7CisKKyAg
ICByZXR1cm4gcnVsZS5yZWxlYXNlTm9uTnVsbCgpOwogfQogCi12b2lkIEluc3BlY3RvckNTU0Fn
ZW50OjpnZXRTdXBwb3J0ZWRDU1NQcm9wZXJ0aWVzKEVycm9yU3RyaW5nJiwgUmVmUHRyPEpTT046
OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0eUluZm8+PiYgY3Nz
UHJvcGVydGllcykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPFBy
b3RvY29sOjpDU1M6OkNTU1Byb3BlcnR5SW5mbz4+PiBJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0U3Vw
cG9ydGVkQ1NTUHJvcGVydGllcygpCiB7Ci0gICAgYXV0byBwcm9wZXJ0aWVzID0gSlNPTjo6QXJy
YXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1Byb3BlcnR5SW5mbz46OmNyZWF0ZSgp
OworICAgIGF1dG8gY3NzUHJvcGVydGllcyA9IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkNTUzo6
Q1NTUHJvcGVydHlJbmZvPjo6Y3JlYXRlKCk7CisKICAgICBmb3IgKGludCBpID0gZmlyc3RDU1NQ
cm9wZXJ0eTsgaSA8PSBsYXN0Q1NTUHJvcGVydHk7ICsraSkgewogICAgICAgICBDU1NQcm9wZXJ0
eUlEIHByb3BlcnR5SUQgPSBjb252ZXJ0VG9DU1NQcm9wZXJ0eUlEKGkpOwogICAgICAgICAvLyBG
SVhNRTogU2hvdWxkIHRha2UgYWNjb3VudCBmb3IgZmxhZ3MgaW4gc2V0dGluZ3MoKS4KICAgICAg
ICAgaWYgKGlzSW50ZXJuYWxDU1NQcm9wZXJ0eShwcm9wZXJ0eUlEKSB8fCAhaXNFbmFibGVkQ1NT
UHJvcGVydHkocHJvcGVydHlJRCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBh
dXRvIHByb3BlcnR5ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0eUluZm86
OmNyZWF0ZSgpCisgICAgICAgIGF1dG8gcHJvcGVydHkgPSBQcm90b2NvbDo6Q1NTOjpDU1NQcm9w
ZXJ0eUluZm86OmNyZWF0ZSgpCiAgICAgICAgICAgICAuc2V0TmFtZShnZXRQcm9wZXJ0eU5hbWVT
dHJpbmcocHJvcGVydHlJRCkpCiAgICAgICAgICAgICAucmVsZWFzZSgpOwogCkBAIC04MjEsNjMg
KzgzMiw2NiBAQCB2b2lkIEluc3BlY3RvckNTU0FnZW50OjpnZXRTdXBwb3J0ZWRDU1NQcm9wZXJ0
aWVzKEVycm9yU3RyaW5nJiwgUmVmUHRyPEpTT046OkFycgogICAgICAgICBpZiAoQ1NTUHJvcGVy
dHk6OmlzSW5oZXJpdGVkUHJvcGVydHkocHJvcGVydHlJRCkpCiAgICAgICAgICAgICBwcm9wZXJ0
eS0+c2V0SW5oZXJpdGVkKHRydWUpOwogCi0gICAgICAgIHByb3BlcnRpZXMtPmFkZEl0ZW0oV1RG
TW92ZShwcm9wZXJ0eSkpOworICAgICAgICBjc3NQcm9wZXJ0aWVzLT5hZGRJdGVtKFdURk1vdmUo
cHJvcGVydHkpKTsKICAgICB9Ci0gICAgY3NzUHJvcGVydGllcyA9IFdURk1vdmUocHJvcGVydGll
cyk7CisKKyAgICByZXR1cm4gV1RGTW92ZShjc3NQcm9wZXJ0aWVzKTsKIH0KIAotdm9pZCBJbnNw
ZWN0b3JDU1NBZ2VudDo6Z2V0U3VwcG9ydGVkU3lzdGVtRm9udEZhbWlseU5hbWVzKEVycm9yU3Ry
aW5nJiwgUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4mIGZvbnRGYW1pbHlOYW1lcykKK1By
b3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPFN0cmluZz4+PiBJbnNwZWN0
b3JDU1NBZ2VudDo6Z2V0U3VwcG9ydGVkU3lzdGVtRm9udEZhbWlseU5hbWVzKCkKIHsKLSAgICBh
dXRvIGZhbWlsaWVzID0gSlNPTjo6QXJyYXlPZjxTdHJpbmc+OjpjcmVhdGUoKTsKKyAgICBhdXRv
IGZvbnRGYW1pbHlOYW1lcyA9IEpTT046OkFycmF5T2Y8U3RyaW5nPjo6Y3JlYXRlKCk7CiAKICAg
ICBWZWN0b3I8U3RyaW5nPiBzeXN0ZW1Gb250RmFtaWxpZXMgPSBGb250Q2FjaGU6OnNpbmdsZXRv
bigpLnN5c3RlbUZvbnRGYW1pbGllcygpOwogICAgIGZvciAoY29uc3QgYXV0byYgZmFtaWx5TmFt
ZSA6IHN5c3RlbUZvbnRGYW1pbGllcykKLSAgICAgICAgZmFtaWxpZXMtPmFkZEl0ZW0oZmFtaWx5
TmFtZSk7CisgICAgICAgIGZvbnRGYW1pbHlOYW1lcy0+YWRkSXRlbShmYW1pbHlOYW1lKTsKIAot
ICAgIGZvbnRGYW1pbHlOYW1lcyA9IFdURk1vdmUoZmFtaWxpZXMpOworICAgIHJldHVybiBXVEZN
b3ZlKGZvbnRGYW1pbHlOYW1lcyk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmZvcmNl
UHNldWRvU3RhdGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkLCBjb25zdCBK
U09OOjpBcnJheSYgZm9yY2VkUHNldWRvQ2xhc3NlcykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09y
PHZvaWQ+IEluc3BlY3RvckNTU0FnZW50Ojpmb3JjZVBzZXVkb1N0YXRlKFByb3RvY29sOjpET006
Ok5vZGVJZCBub2RlSWQsIFJlZjxKU09OOjpBcnJheT4mJiBmb3JjZWRQc2V1ZG9DbGFzc2VzKQog
eworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIGF1dG8qIGRv
bUFnZW50ID0gbV9pbnN0cnVtZW50aW5nQWdlbnRzLnBlcnNpc3RlbnRET01BZ2VudCgpOwotICAg
IGlmICghZG9tQWdlbnQpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiRE9NIGRvbWFpbiBtdXN0
IGJlIGVuYWJsZWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKCFkb21BZ2Vu
dCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJET00gZG9tYWluIG11c3QgYmUgZW5h
YmxlZCJfcyk7CiAKICAgICBFbGVtZW50KiBlbGVtZW50ID0gZG9tQWdlbnQtPmFzc2VydEVsZW1l
bnQoZXJyb3JTdHJpbmcsIG5vZGVJZCk7CiAgICAgaWYgKCFlbGVtZW50KQotICAgICAgICByZXR1
cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAgICAv
LyBSZXR1cm4gZWFybHkgaWYgdGhlIGZvcmNlZCBwc2V1ZG8gc3RhdGUgd2FzIGFscmVhZHkgc2V0
IGNvcnJlY3RseS4KICAgICB1bnNpZ25lZCBmb3JjZWRQc2V1ZG9TdGF0ZSA9IGNvbXB1dGVQc2V1
ZG9DbGFzc01hc2soZm9yY2VkUHNldWRvQ2xhc3Nlcyk7CiAgICAgaWYgKGZvcmNlZFBzZXVkb1N0
YXRlKSB7CiAgICAgICAgIGF1dG8gaXRlcmF0b3IgPSBtX25vZGVJZFRvRm9yY2VkUHNldWRvU3Rh
dGUuYWRkKG5vZGVJZCwgMCkuaXRlcmF0b3I7CiAgICAgICAgIGlmIChmb3JjZWRQc2V1ZG9TdGF0
ZSA9PSBpdGVyYXRvci0+dmFsdWUpCi0gICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBy
ZXR1cm4geyB9OwogICAgICAgICBpdGVyYXRvci0+dmFsdWUgPSBmb3JjZWRQc2V1ZG9TdGF0ZTsK
ICAgICAgICAgbV9kb2N1bWVudHNXaXRoRm9yY2VkUHNldWRvU3RhdGVzLmFkZCgmZWxlbWVudC0+
ZG9jdW1lbnQoKSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKCFtX25vZGVJZFRvRm9yY2Vk
UHNldWRvU3RhdGUucmVtb3ZlKG5vZGVJZCkpCi0gICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICByZXR1cm4geyB9OwogICAgICAgICBpZiAobV9ub2RlSWRUb0ZvcmNlZFBzZXVkb1N0YXRl
LmlzRW1wdHkoKSkKICAgICAgICAgICAgIG1fZG9jdW1lbnRzV2l0aEZvcmNlZFBzZXVkb1N0YXRl
cy5jbGVhcigpOwogICAgIH0KIAogICAgIGVsZW1lbnQtPmRvY3VtZW50KCkuc3R5bGVTY29wZSgp
LmRpZENoYW5nZVN0eWxlU2hlZXRFbnZpcm9ubWVudCgpOworCisgICAgcmV0dXJuIHsgfTsKIH0K
IAogSW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlJiBJbnNwZWN0b3JDU1NBZ2VudDo6
YXNJbnNwZWN0b3JTdHlsZVNoZWV0KFN0eWxlZEVsZW1lbnQmIGVsZW1lbnQpCiB7CiAgICAgcmV0
dXJuIG1fbm9kZVRvSW5zcGVjdG9yU3R5bGVTaGVldC5lbnN1cmUoJmVsZW1lbnQsIFt0aGlzLCAm
ZWxlbWVudF0gewogICAgICAgICBTdHJpbmcgbmV3U3R5bGVTaGVldElkID0gU3RyaW5nOjpudW1i
ZXIobV9sYXN0U3R5bGVTaGVldElkKyspOwotICAgICAgICBhdXRvIGluc3BlY3RvclN0eWxlU2hl
ZXQgPSBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU6OmNyZWF0ZShtX2luc3RydW1l
bnRpbmdBZ2VudHMuZW5hYmxlZFBhZ2VBZ2VudCgpLCBuZXdTdHlsZVNoZWV0SWQsIGVsZW1lbnQs
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6QXV0aG9yLCB0aGlz
KTsKKyAgICAgICAgYXV0byBpbnNwZWN0b3JTdHlsZVNoZWV0ID0gSW5zcGVjdG9yU3R5bGVTaGVl
dEZvcklubGluZVN0eWxlOjpjcmVhdGUobV9pbnN0cnVtZW50aW5nQWdlbnRzLmVuYWJsZWRQYWdl
QWdlbnQoKSwgbmV3U3R5bGVTaGVldElkLCBlbGVtZW50LCBQcm90b2NvbDo6Q1NTOjpTdHlsZVNo
ZWV0T3JpZ2luOjpBdXRob3IsIHRoaXMpOwogICAgICAgICBtX2lkVG9JbnNwZWN0b3JTdHlsZVNo
ZWV0LnNldChuZXdTdHlsZVNoZWV0SWQsIGluc3BlY3RvclN0eWxlU2hlZXQuY29weVJlZigpKTsK
ICAgICAgICAgcmV0dXJuIGluc3BlY3RvclN0eWxlU2hlZXQ7CiAgICAgfSkuaXRlcmF0b3ItPnZh
bHVlOwogfQogCi1FbGVtZW50KiBJbnNwZWN0b3JDU1NBZ2VudDo6ZWxlbWVudEZvcklkKEVycm9y
U3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJZCkKK0VsZW1lbnQqIEluc3BlY3RvckNTU0Fn
ZW50OjplbGVtZW50Rm9ySWQoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgUHJv
dG9jb2w6OkRPTTo6Tm9kZUlkIG5vZGVJZCkKIHsKICAgICBhdXRvKiBkb21BZ2VudCA9IG1faW5z
dHJ1bWVudGluZ0FnZW50cy5wZXJzaXN0ZW50RE9NQWdlbnQoKTsKICAgICBpZiAoIWRvbUFnZW50
KSB7CkBAIC05MTQsNyArOTI4LDcgQEAgSW5zcGVjdG9yU3R5bGVTaGVldCogSW5zcGVjdG9yQ1NT
QWdlbnQ6OmJpbmRTdHlsZVNoZWV0KENTU1N0eWxlU2hlZXQqIHN0eWxlU2hlZXQKICAgICByZXR1
cm4gaW5zcGVjdG9yU3R5bGVTaGVldC5nZXQoKTsKIH0KIAotSW5zcGVjdG9yU3R5bGVTaGVldCog
SW5zcGVjdG9yQ1NTQWdlbnQ6OmFzc2VydFN0eWxlU2hlZXRGb3JJZChFcnJvclN0cmluZyYgZXJy
b3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgc3R5bGVTaGVldElkKQorSW5zcGVjdG9yU3R5bGVTaGVl
dCogSW5zcGVjdG9yQ1NTQWdlbnQ6OmFzc2VydFN0eWxlU2hlZXRGb3JJZChQcm90b2NvbDo6RXJy
b3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHN0eWxlU2hlZXRJZCkKIHsKICAg
ICBJZFRvSW5zcGVjdG9yU3R5bGVTaGVldDo6aXRlcmF0b3IgaXQgPSBtX2lkVG9JbnNwZWN0b3JT
dHlsZVNoZWV0LmZpbmQoc3R5bGVTaGVldElkKTsKICAgICBpZiAoaXQgPT0gbV9pZFRvSW5zcGVj
dG9yU3R5bGVTaGVldC5lbmQoKSkgewpAQCAtOTI0LDI5ICs5MzgsMjkgQEAgSW5zcGVjdG9yU3R5
bGVTaGVldCogSW5zcGVjdG9yQ1NTQWdlbnQ6OmFzc2VydFN0eWxlU2hlZXRGb3JJZChFcnJvclN0
cmluZyYgZXJyb3IKICAgICByZXR1cm4gaXQtPnZhbHVlLmdldCgpOwogfQogCi1JbnNwZWN0b3I6
OlByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmRldGVj
dE9yaWdpbihDU1NTdHlsZVNoZWV0KiBwYWdlU3R5bGVTaGVldCwgRG9jdW1lbnQqIG93bmVyRG9j
dW1lbnQpCitQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luIEluc3BlY3RvckNTU0FnZW50
OjpkZXRlY3RPcmlnaW4oQ1NTU3R5bGVTaGVldCogcGFnZVN0eWxlU2hlZXQsIERvY3VtZW50KiBv
d25lckRvY3VtZW50KQogewogICAgIGlmIChtX2NyZWF0aW5nVmlhSW5zcGVjdG9yU3R5bGVTaGVl
dCkKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9y
aWdpbjo6SW5zcGVjdG9yOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVl
dE9yaWdpbjo6SW5zcGVjdG9yOwogCiAgICAgaWYgKHBhZ2VTdHlsZVNoZWV0ICYmICFwYWdlU3R5
bGVTaGVldC0+b3duZXJOb2RlKCkgJiYgcGFnZVN0eWxlU2hlZXQtPmhyZWYoKS5pc0VtcHR5KCkp
Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRPcmln
aW46OlVzZXJBZ2VudDsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRP
cmlnaW46OlVzZXJBZ2VudDsKIAogICAgIGlmIChwYWdlU3R5bGVTaGVldCAmJiBwYWdlU3R5bGVT
aGVldC0+Y29udGVudHMoKS5pc1VzZXJTdHlsZVNoZWV0KCkpCi0gICAgICAgIHJldHVybiBJbnNw
ZWN0b3I6OlByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW46OlVzZXI7CisgICAgICAgIHJl
dHVybiBQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luOjpVc2VyOwogCiAgICAgYXV0byBp
dGVyYXRvciA9IG1fZG9jdW1lbnRUb0luc3BlY3RvclN0eWxlU2hlZXQuZmluZChvd25lckRvY3Vt
ZW50KTsKICAgICBpZiAoaXRlcmF0b3IgIT0gbV9kb2N1bWVudFRvSW5zcGVjdG9yU3R5bGVTaGVl
dC5lbmQoKSkgewogICAgICAgICBmb3IgKGF1dG8mIGluc3BlY3RvclN0eWxlU2hlZXQgOiBpdGVy
YXRvci0+dmFsdWUpIHsKICAgICAgICAgICAgIGlmIChwYWdlU3R5bGVTaGVldCA9PSBpbnNwZWN0
b3JTdHlsZVNoZWV0LT5wYWdlU3R5bGVTaGVldCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBJ
bnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW46Okluc3BlY3RvcjsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gUHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6SW5z
cGVjdG9yOwogICAgICAgICB9CiAgICAgfQogCi0gICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6QXV0aG9yOworICAgIHJldHVybiBQcm90b2NvbDo6
Q1NTOjpTdHlsZVNoZWV0T3JpZ2luOjpBdXRob3I7CiB9CiAKLVJlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpDU1M6OkNTU1J1bGU+IEluc3BlY3RvckNTU0FnZW50OjpidWlsZE9iamVjdEZvclJ1
bGUoY29uc3QgU3R5bGVSdWxlKiBzdHlsZVJ1bGUsIFN0eWxlOjpSZXNvbHZlciYgc3R5bGVSZXNv
bHZlciwgRWxlbWVudCYgZWxlbWVudCkKK1JlZlB0cjxQcm90b2NvbDo6Q1NTOjpDU1NSdWxlPiBJ
bnNwZWN0b3JDU1NBZ2VudDo6YnVpbGRPYmplY3RGb3JSdWxlKGNvbnN0IFN0eWxlUnVsZSogc3R5
bGVSdWxlLCBTdHlsZTo6UmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIEVsZW1lbnQmIGVsZW1lbnQp
CiB7CiAgICAgaWYgKCFzdHlsZVJ1bGUpCiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtOTY4
LDcgKzk4Miw3IEBAIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1J1bGU+IElu
c3BlY3RvckNTU0FnZW50OjpidWlsZE9iamVjdEZvclJ1bGUoCiAgICAgcmV0dXJuIGluc3BlY3Rv
clN0eWxlU2hlZXQgPyBpbnNwZWN0b3JTdHlsZVNoZWV0LT5idWlsZE9iamVjdEZvclJ1bGUoY3Nz
b21XcmFwcGVyKSA6IG51bGxwdHI7CiB9CiAKLVJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpD
U1M6OkNTU1J1bGU+IEluc3BlY3RvckNTU0FnZW50OjpidWlsZE9iamVjdEZvclJ1bGUoQ1NTU3R5
bGVSdWxlKiBydWxlKQorUmVmUHRyPFByb3RvY29sOjpDU1M6OkNTU1J1bGU+IEluc3BlY3RvckNT
U0FnZW50OjpidWlsZE9iamVjdEZvclJ1bGUoQ1NTU3R5bGVSdWxlKiBydWxlKQogewogICAgIGlm
ICghcnVsZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC05NzgsMTYgKzk5MiwxNiBAQCBS
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NSdWxlPiBJbnNwZWN0b3JDU1NBZ2Vu
dDo6YnVpbGRPYmplY3RGb3JSdWxlKAogICAgIHJldHVybiBpbnNwZWN0b3JTdHlsZVNoZWV0ID8g
aW5zcGVjdG9yU3R5bGVTaGVldC0+YnVpbGRPYmplY3RGb3JSdWxlKHJ1bGUpIDogbnVsbHB0cjsK
IH0KIAotUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpSdWxl
TWF0Y2g+PiBJbnNwZWN0b3JDU1NBZ2VudDo6YnVpbGRBcnJheUZvck1hdGNoZWRSdWxlTGlzdChj
b25zdCBWZWN0b3I8UmVmUHRyPGNvbnN0IFN0eWxlUnVsZT4+JiBtYXRjaGVkUnVsZXMsIFN0eWxl
OjpSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgRWxlbWVudCYgZWxlbWVudCwgUHNldWRvSWQgcHNl
dWRvSWQpCitSZWY8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6Q1NTOjpSdWxlTWF0Y2g+PiBJbnNw
ZWN0b3JDU1NBZ2VudDo6YnVpbGRBcnJheUZvck1hdGNoZWRSdWxlTGlzdChjb25zdCBWZWN0b3I8
UmVmUHRyPGNvbnN0IFN0eWxlUnVsZT4+JiBtYXRjaGVkUnVsZXMsIFN0eWxlOjpSZXNvbHZlciYg
c3R5bGVSZXNvbHZlciwgRWxlbWVudCYgZWxlbWVudCwgUHNldWRvSWQgcHNldWRvSWQpCiB7Ci0g
ICAgYXV0byByZXN1bHQgPSBKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6
UnVsZU1hdGNoPjo6Y3JlYXRlKCk7CisgICAgYXV0byByZXN1bHQgPSBKU09OOjpBcnJheU9mPFBy
b3RvY29sOjpDU1M6OlJ1bGVNYXRjaD46OmNyZWF0ZSgpOwogCiAgICAgU2VsZWN0b3JDaGVja2Vy
OjpDaGVja2luZ0NvbnRleHQgY29udGV4dChTZWxlY3RvckNoZWNrZXI6Ok1vZGU6OkNvbGxlY3Rp
bmdSdWxlcyk7CiAgICAgY29udGV4dC5wc2V1ZG9JZCA9IHBzZXVkb0lkICE9IFBzZXVkb0lkOjpO
b25lID8gcHNldWRvSWQgOiBlbGVtZW50LnBzZXVkb0lkKCk7CiAgICAgU2VsZWN0b3JDaGVja2Vy
IHNlbGVjdG9yQ2hlY2tlcihlbGVtZW50LmRvY3VtZW50KCkpOwogCiAgICAgZm9yIChhdXRvJiBt
YXRjaGVkUnVsZSA6IG1hdGNoZWRSdWxlcykgewotICAgICAgICBSZWZQdHI8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6Q1NTOjpDU1NSdWxlPiBydWxlT2JqZWN0ID0gYnVpbGRPYmplY3RGb3JSdWxlKG1h
dGNoZWRSdWxlLmdldCgpLCBzdHlsZVJlc29sdmVyLCBlbGVtZW50KTsKKyAgICAgICAgUmVmUHRy
PFByb3RvY29sOjpDU1M6OkNTU1J1bGU+IHJ1bGVPYmplY3QgPSBidWlsZE9iamVjdEZvclJ1bGUo
bWF0Y2hlZFJ1bGUuZ2V0KCksIHN0eWxlUmVzb2x2ZXIsIGVsZW1lbnQpOwogICAgICAgICBpZiAo
IXJ1bGVPYmplY3QpCiAgICAgICAgICAgICBjb250aW51ZTsKIApAQCAtMTAwMSw4ICsxMDE1LDgg
QEAgUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpSdWxlTWF0
Y2g+PiBJbnNwZWN0b3JDU1NBZ2VudDo6YnUKICAgICAgICAgICAgICsraW5kZXg7CiAgICAgICAg
IH0KIAotICAgICAgICBhdXRvIG1hdGNoID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpSdWxl
TWF0Y2g6OmNyZWF0ZSgpCi0gICAgICAgICAgICAuc2V0UnVsZShXVEZNb3ZlKHJ1bGVPYmplY3Qp
KQorICAgICAgICBhdXRvIG1hdGNoID0gUHJvdG9jb2w6OkNTUzo6UnVsZU1hdGNoOjpjcmVhdGUo
KQorICAgICAgICAgICAgLnNldFJ1bGUocnVsZU9iamVjdC5yZWxlYXNlTm9uTnVsbCgpKQogICAg
ICAgICAgICAgLnNldE1hdGNoaW5nU2VsZWN0b3JzKFdURk1vdmUobWF0Y2hpbmdTZWxlY3RvcnMp
KQogICAgICAgICAgICAgLnJlbGVhc2UoKTsKICAgICAgICAgcmVzdWx0LT5hZGRJdGVtKFdURk1v
dmUobWF0Y2gpKTsKQEAgLTEwMTEsNyArMTAyNSw3IEBAIFJlZlB0cjxKU09OOjpBcnJheU9mPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6UnVsZU1hdGNoPj4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmJ1
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNT
Uzo6Q1NTU3R5bGU+IEluc3BlY3RvckNTU0FnZW50OjpidWlsZE9iamVjdEZvckF0dHJpYnV0ZXNT
dHlsZShTdHlsZWRFbGVtZW50JiBlbGVtZW50KQorUmVmUHRyPFByb3RvY29sOjpDU1M6OkNTU1N0
eWxlPiBJbnNwZWN0b3JDU1NBZ2VudDo6YnVpbGRPYmplY3RGb3JBdHRyaWJ1dGVzU3R5bGUoU3R5
bGVkRWxlbWVudCYgZWxlbWVudCkKIHsKICAgICAvLyBGSVhNRTogVWdsaW5lc3MgYmVsb3cuCiAg
ICAgYXV0byogYXR0cmlidXRlU3R5bGUgPSBjb25zdF9jYXN0PFN0eWxlUHJvcGVydGllcyo+KGVs
ZW1lbnQucHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUoKSk7CkBAIC0xMDIzLDcgKzEwMzcsNyBA
QCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4gSW5zcGVjdG9yQ1NT
QWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yQXR0cgogICAgIHJldHVybiBpbnNwZWN0b3JTdHlsZS0+YnVp
bGRPYmplY3RGb3JTdHlsZSgpOwogfQogCi12b2lkIEluc3BlY3RvckNTU0FnZW50OjpkaWRSZW1v
dmVET01Ob2RlKE5vZGUmIG5vZGUsIGludCBub2RlSWQpCit2b2lkIEluc3BlY3RvckNTU0FnZW50
OjpkaWRSZW1vdmVET01Ob2RlKE5vZGUmIG5vZGUsIFByb3RvY29sOjpET006Ok5vZGVJZCBub2Rl
SWQpCiB7CiAgICAgbV9ub2RlSWRUb0ZvcmNlZFBzZXVkb1N0YXRlLnJlbW92ZShub2RlSWQpOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNT
U0FnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNTU0Fn
ZW50LmgKaW5kZXggZmExZDY3MWRkODMzYjAwM2E2MWRjMjc5NjU5NjY5MjE2MWFhZGY3Zi4uZDJm
Y2E3OTVkYzY4MGY5OGRlODZjYmNjMWQ2ZTkwYzhjYTdjNzBiMSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDU1NBZ2VudC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ1NTQWdlbnQuaApAQCAtNjEsNyAr
NjEsNyBAQCBjbGFzcyBJbnNwZWN0b3JDU1NBZ2VudCBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3JB
Z2VudEJhc2UgLCBwdWJsaWMgSW5zcGVjdG9yOjpDUwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOwogcHVibGljOgogICAgIEluc3BlY3RvckNTU0FnZW50KFdlYkFnZW50Q29udGV4dCYpOwot
ICAgIH5JbnNwZWN0b3JDU1NBZ2VudCgpIG92ZXJyaWRlOworICAgIH5JbnNwZWN0b3JDU1NBZ2Vu
dCgpOwogCiAgICAgY2xhc3MgSW5saW5lU3R5bGVPdmVycmlkZVNjb3BlIHsKICAgICBwdWJsaWM6
CkBAIC04MywyOSArODMsMjkgQEAgcHVibGljOgogICAgIHN0YXRpYyBDU1NTdHlsZVJ1bGUqIGFz
Q1NTU3R5bGVSdWxlKENTU1J1bGUmKTsKIAogICAgIC8vIEluc3BlY3RvckFnZW50QmFzZQotICAg
IHZvaWQgZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRSb3V0
ZXIqLCBJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyKikgb3ZlcnJpZGU7Ci0gICAgdm9pZCB3
aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24p
IG92ZXJyaWRlOworICAgIHZvaWQgZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rv
cjo6RnJvbnRlbmRSb3V0ZXIqLCBJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyKik7CisgICAg
dm9pZCB3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5lY3RS
ZWFzb24pOwogCiAgICAgLy8gQ1NTQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyCi0gICAgdm9pZCBl
bmFibGUoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2b2lkIGRpc2FibGUoRXJyb3JTdHJp
bmcmKSBvdmVycmlkZTsKLSAgICB2b2lkIGdldENvbXB1dGVkU3R5bGVGb3JOb2RlKEVycm9yU3Ry
aW5nJiwgaW50IG5vZGVJZCwgUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6Q1NTOjpDU1NDb21wdXRlZFN0eWxlUHJvcGVydHk+PiYpIG92ZXJyaWRlOwotICAgIHZvaWQg
Z2V0SW5saW5lU3R5bGVzRm9yTm9kZShFcnJvclN0cmluZyYsIGludCBub2RlSWQsIFJlZlB0cjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlPiYgaW5saW5lU3R5bGUsIFJlZlB0cjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlPiYgYXR0cmlidXRlcykgb3ZlcnJpZGU7
Ci0gICAgdm9pZCBnZXRNYXRjaGVkU3R5bGVzRm9yTm9kZShFcnJvclN0cmluZyYsIGludCBub2Rl
SWQsIGNvbnN0IGJvb2wqIGluY2x1ZGVQc2V1ZG8sIGNvbnN0IGJvb2wqIGluY2x1ZGVJbmhlcml0
ZWQsIFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6UnVsZU1h
dGNoPj4mIG1hdGNoZWRDU1NSdWxlcywgUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6Q1NTOjpQc2V1ZG9JZE1hdGNoZXM+PiYsIFJlZlB0cjxKU09OOjpBcnJheU9mPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6SW5oZXJpdGVkU3R5bGVFbnRyeT4+JiBpbmhlcml0ZWRF
bnRyaWVzKSBvdmVycmlkZTsKLSAgICB2b2lkIGdldEFsbFN0eWxlU2hlZXRzKEVycm9yU3RyaW5n
JiwgUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHls
ZVNoZWV0SGVhZGVyPj4mIHN0eWxlU2hlZXRJbmZvcykgb3ZlcnJpZGU7Ci0gICAgdm9pZCBnZXRT
dHlsZVNoZWV0KEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBzdHlsZVNoZWV0SWQsIFJlZlB0
cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlU2hlZXRCb2R5PiYgcmVzdWx0KSBv
dmVycmlkZTsKLSAgICB2b2lkIGdldFN0eWxlU2hlZXRUZXh0KEVycm9yU3RyaW5nJiwgY29uc3Qg
U3RyaW5nJiBzdHlsZVNoZWV0SWQsIFN0cmluZyogcmVzdWx0KSBvdmVycmlkZTsKLSAgICB2b2lk
IHNldFN0eWxlU2hlZXRUZXh0KEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBzdHlsZVNoZWV0
SWQsIGNvbnN0IFN0cmluZyYgdGV4dCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRTdHlsZVRleHQo
RXJyb3JTdHJpbmcmLCBjb25zdCBKU09OOjpPYmplY3QmIHN0eWxlSWQsIGNvbnN0IFN0cmluZyYg
dGV4dCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+JiByZXN1bHQp
IG92ZXJyaWRlOwotICAgIHZvaWQgc2V0UnVsZVNlbGVjdG9yKEVycm9yU3RyaW5nJiwgY29uc3Qg
SlNPTjo6T2JqZWN0JiBydWxlSWQsIGNvbnN0IFN0cmluZyYgc2VsZWN0b3IsIFJlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1J1bGU+JiByZXN1bHQpIG92ZXJyaWRlOwotICAgIHZv
aWQgY3JlYXRlU3R5bGVTaGVldChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgZnJhbWVJZCwg
U3RyaW5nKiBzdHlsZVNoZWV0SWQpIG92ZXJyaWRlOwotICAgIHZvaWQgYWRkUnVsZShFcnJvclN0
cmluZyYsIGNvbnN0IFN0cmluZyYgc3R5bGVTaGVldElkLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9y
LCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NSdWxlPiYgcmVzdWx0KSBvdmVy
cmlkZTsKLSAgICB2b2lkIGdldFN1cHBvcnRlZENTU1Byb3BlcnRpZXMoRXJyb3JTdHJpbmcmLCBS
ZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1Byb3BlcnR5
SW5mbz4+JiByZXN1bHQpIG92ZXJyaWRlOwotICAgIHZvaWQgZ2V0U3VwcG9ydGVkU3lzdGVtRm9u
dEZhbWlseU5hbWVzKEVycm9yU3RyaW5nJiwgUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4m
IHJlc3VsdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBmb3JjZVBzZXVkb1N0YXRlKEVycm9yU3RyaW5n
JiwgaW50IG5vZGVJZCwgY29uc3QgSlNPTjo6QXJyYXkmIGZvcmNlZFBzZXVkb0NsYXNzZXMpIG92
ZXJyaWRlOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZW5h
YmxlKCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBkaXNh
YmxlKCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SlNPTjo6
QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU0NvbXB1dGVkU3R5bGVQcm9wZXJ0
eT4+PiBnZXRDb21wdXRlZFN0eWxlRm9yTm9kZShJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5v
ZGVJZCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxzdGQ6OnR1cGxl
PFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlPiAvKiBpbmxpbmVTdHls
ZSAqLywgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+IC8qIGF0dHJp
YnV0ZXNTdHlsZSAqLz4+IGdldElubGluZVN0eWxlc0Zvck5vZGUoSW5zcGVjdG9yOjpQcm90b2Nv
bDo6RE9NOjpOb2RlSWQpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8
c3RkOjp0dXBsZTxSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6
OlJ1bGVNYXRjaD4+LCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpD
U1M6OlBzZXVkb0lkTWF0Y2hlcz4+LCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpDU1M6OkluaGVyaXRlZFN0eWxlRW50cnk+Pj4+IGdldE1hdGNoZWRTdHlsZXNGb3JO
b2RlKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkLCBPcHRpb25hbDxib29sPiYmIGlu
Y2x1ZGVQc2V1ZG8sIE9wdGlvbmFsPGJvb2w+JiYgaW5jbHVkZUluaGVyaXRlZCk7CisgICAgSW5z
cGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SlNPTjo6QXJyYXlPZjxJbnNwZWN0
b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlU2hlZXRIZWFkZXI+Pj4gZ2V0QWxsU3R5bGVTaGVl
dHMoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxJbnNwZWN0
b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlU2hlZXRCb2R5Pj4gZ2V0U3R5bGVTaGVldChjb25z
dCBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRJZCYpOworICAgIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8U3RyaW5nPiBnZXRTdHlsZVNoZWV0VGV4dChjb25z
dCBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRJZCYpOworICAgIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc2V0U3R5bGVTaGVldFRleHQoY29uc3Qg
SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0SWQmLCBjb25zdCBTdHJpbmcmIHRl
eHQpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+PiBzZXRTdHlsZVRleHQoUmVmPEpTT046Ok9iamVj
dD4mJiBzdHlsZUlkLCBjb25zdCBTdHJpbmcmIHRleHQpOworICAgIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkVycm9yU3RyaW5nT3I8UmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUnVsZT4+
IHNldFJ1bGVTZWxlY3RvcihSZWY8SlNPTjo6T2JqZWN0PiYmIHJ1bGVJZCwgY29uc3QgU3RyaW5n
JiBzZWxlY3Rvcik7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRJZD4gY3JlYXRlU3R5bGVTaGVldChjb25z
dCBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpGcmFtZUlkJik7CisgICAgSW5zcGVjdG9y
OjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpD
U1NSdWxlPj4gYWRkUnVsZShjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlN0eWxlU2hl
ZXRJZCYsIGNvbnN0IFN0cmluZyYgc2VsZWN0b3IpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8UmVmPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NT
OjpDU1NQcm9wZXJ0eUluZm8+Pj4gZ2V0U3VwcG9ydGVkQ1NTUHJvcGVydGllcygpOworICAgIElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEpTT046OkFycmF5T2Y8U3RyaW5n
Pj4+IGdldFN1cHBvcnRlZFN5c3RlbUZvbnRGYW1pbHlOYW1lcygpOworICAgIEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZm9yY2VQc2V1ZG9TdGF0ZShJbnNwZWN0b3I6
OlByb3RvY29sOjpET006Ok5vZGVJZCwgUmVmPEpTT046OkFycmF5PiYmIGZvcmNlZFBzZXVkb0Ns
YXNzZXMpOwogCiAgICAgLy8gSW5zcGVjdG9yU3R5bGVTaGVldDo6TGlzdGVuZXIKLSAgICB2b2lk
IHN0eWxlU2hlZXRDaGFuZ2VkKEluc3BlY3RvclN0eWxlU2hlZXQqKSBvdmVycmlkZTsKKyAgICB2
b2lkIHN0eWxlU2hlZXRDaGFuZ2VkKEluc3BlY3RvclN0eWxlU2hlZXQqKTsKIAogICAgIC8vIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbgogICAgIHZvaWQgZG9jdW1lbnREZXRhY2hlZChEb2N1bWVu
dCYpOwpAQCAtMTE0LDcgKzExNCw3IEBAIHB1YmxpYzoKICAgICBib29sIGZvcmNlUHNldWRvU3Rh
dGUoY29uc3QgRWxlbWVudCYsIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc1R5cGUpOwogCiAgICAg
Ly8gSW5zcGVjdG9yRE9NQWdlbnQgaG9va3MKLSAgICB2b2lkIGRpZFJlbW92ZURPTU5vZGUoTm9k
ZSYsIGludCBub2RlSWQpOworICAgIHZvaWQgZGlkUmVtb3ZlRE9NTm9kZShOb2RlJiwgSW5zcGVj
dG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQpOwogICAgIHZvaWQgZGlkTW9kaWZ5RE9NQXR0cihF
bGVtZW50Jik7CiAKICAgICB2b2lkIHJlc2V0KCk7CkBAIC0xMjYsMjggKzEyNiwyOCBAQCBwcml2
YXRlOgogICAgIGNsYXNzIFNldFJ1bGVTZWxlY3RvckFjdGlvbjsKICAgICBjbGFzcyBBZGRSdWxl
QWN0aW9uOwogCi0gICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgUmVmUHRyPEluc3BlY3RvclN0
eWxlU2hlZXQ+PiBJZFRvSW5zcGVjdG9yU3R5bGVTaGVldDsKKyAgICB0eXBlZGVmIEhhc2hNYXA8
SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0SWQsIFJlZlB0cjxJbnNwZWN0b3JT
dHlsZVNoZWV0Pj4gSWRUb0luc3BlY3RvclN0eWxlU2hlZXQ7CiAgICAgdHlwZWRlZiBIYXNoTWFw
PENTU1N0eWxlU2hlZXQqLCBSZWZQdHI8SW5zcGVjdG9yU3R5bGVTaGVldD4+IENTU1N0eWxlU2hl
ZXRUb0luc3BlY3RvclN0eWxlU2hlZXQ7CiAgICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxEb2N1
bWVudD4sIFZlY3RvcjxSZWZQdHI8SW5zcGVjdG9yU3R5bGVTaGVldD4+PiBEb2N1bWVudFRvVmlh
SW5zcGVjdG9yU3R5bGVTaGVldDsgLy8gInZpYSBpbnNwZWN0b3IiIHN0eWxlc2hlZXRzCi0gICAg
dHlwZWRlZiBIYXNoTWFwPGludCwgdW5zaWduZWQ+IE5vZGVJZFRvRm9yY2VkUHNldWRvU3RhdGU7
CisgICAgdHlwZWRlZiBIYXNoTWFwPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkLCB1
bnNpZ25lZD4gTm9kZUlkVG9Gb3JjZWRQc2V1ZG9TdGF0ZTsKIAogICAgIEluc3BlY3RvclN0eWxl
U2hlZXRGb3JJbmxpbmVTdHlsZSYgYXNJbnNwZWN0b3JTdHlsZVNoZWV0KFN0eWxlZEVsZW1lbnQm
KTsKLSAgICBFbGVtZW50KiBlbGVtZW50Rm9ySWQoRXJyb3JTdHJpbmcmLCBpbnQgbm9kZUlkKTsK
KyAgICBFbGVtZW50KiBlbGVtZW50Rm9ySWQoSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJp
bmcmLCBJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZCk7CiAKICAgICB2b2lkIGNvbGxl
Y3RBbGxTdHlsZVNoZWV0cyhWZWN0b3I8SW5zcGVjdG9yU3R5bGVTaGVldCo+Jik7CiAgICAgdm9p
ZCBjb2xsZWN0QWxsRG9jdW1lbnRTdHlsZVNoZWV0cyhEb2N1bWVudCYsIFZlY3RvcjxDU1NTdHls
ZVNoZWV0Kj4mKTsKICAgICB2b2lkIGNvbGxlY3RTdHlsZVNoZWV0cyhDU1NTdHlsZVNoZWV0Kiwg
VmVjdG9yPENTU1N0eWxlU2hlZXQqPiYpOwogICAgIHZvaWQgc2V0QWN0aXZlU3R5bGVTaGVldHNG
b3JEb2N1bWVudChEb2N1bWVudCYsIFZlY3RvcjxDU1NTdHlsZVNoZWV0Kj4mIGFjdGl2ZVN0eWxl
U2hlZXRzKTsKIAotICAgIFN0cmluZyB1bmJpbmRTdHlsZVNoZWV0KEluc3BlY3RvclN0eWxlU2hl
ZXQqKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRJZCB1bmJpbmRT
dHlsZVNoZWV0KEluc3BlY3RvclN0eWxlU2hlZXQqKTsKICAgICBJbnNwZWN0b3JTdHlsZVNoZWV0
KiBiaW5kU3R5bGVTaGVldChDU1NTdHlsZVNoZWV0Kik7Ci0gICAgSW5zcGVjdG9yU3R5bGVTaGVl
dCogYXNzZXJ0U3R5bGVTaGVldEZvcklkKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJik7Cisg
ICAgSW5zcGVjdG9yU3R5bGVTaGVldCogYXNzZXJ0U3R5bGVTaGVldEZvcklkKEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkVycm9yU3RyaW5nJiwgY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpT
dHlsZVNoZWV0SWQmKTsKICAgICBJbnNwZWN0b3JTdHlsZVNoZWV0KiBjcmVhdGVJbnNwZWN0b3JT
dHlsZVNoZWV0Rm9yRG9jdW1lbnQoRG9jdW1lbnQmKTsKICAgICBJbnNwZWN0b3I6OlByb3RvY29s
OjpDU1M6OlN0eWxlU2hlZXRPcmlnaW4gZGV0ZWN0T3JpZ2luKENTU1N0eWxlU2hlZXQqIHBhZ2VT
dHlsZVNoZWV0LCBEb2N1bWVudCogb3duZXJEb2N1bWVudCk7CiAKICAgICBSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NSdWxlPiBidWlsZE9iamVjdEZvclJ1bGUoY29uc3QgU3R5
bGVSdWxlKiwgU3R5bGU6OlJlc29sdmVyJiwgRWxlbWVudCYpOwogICAgIFJlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpDU1M6OkNTU1J1bGU+IGJ1aWxkT2JqZWN0Rm9yUnVsZShDU1NTdHlsZVJ1
bGUqKTsKLSAgICBSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6
OlJ1bGVNYXRjaD4+IGJ1aWxkQXJyYXlGb3JNYXRjaGVkUnVsZUxpc3QoY29uc3QgVmVjdG9yPFJl
ZlB0cjxjb25zdCBTdHlsZVJ1bGU+PiYsIFN0eWxlOjpSZXNvbHZlciYsIEVsZW1lbnQmLCBQc2V1
ZG9JZCk7CisgICAgUmVmPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpS
dWxlTWF0Y2g+PiBidWlsZEFycmF5Rm9yTWF0Y2hlZFJ1bGVMaXN0KGNvbnN0IFZlY3RvcjxSZWZQ
dHI8Y29uc3QgU3R5bGVSdWxlPj4mLCBTdHlsZTo6UmVzb2x2ZXImLCBFbGVtZW50JiwgUHNldWRv
SWQpOwogICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlPiBidWls
ZE9iamVjdEZvckF0dHJpYnV0ZXNTdHlsZShTdHlsZWRFbGVtZW50Jik7CiAKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDYW52YXNBZ2VudC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNhbnZhc0FnZW50
LmNwcAppbmRleCBkMDkxNjgyOTQwMGY5NDZmMDg2MDA5NThhYTQ0M2U1NzA3M2ZlOGFhLi5hODUw
MzhmNWMwNjc3ZTdkOTI4MTk0ZGI3ZDA0MDlhOTQ4YmM5NmI5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNhbnZhc0FnZW50LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNhbnZhc0FnZW50LmNwcApA
QCAtMTAyLDggKzEwMiw3IEBAIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmRpZENyZWF0ZUZy
b250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kUm91dGVyCiAKIHZvaWQgSW5zcGVj
dG9yQ2FudmFzQWdlbnQ6OndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6
RGlzY29ubmVjdFJlYXNvbikKIHsKLSAgICBFcnJvclN0cmluZyBpZ25vcmVkOwotICAgIGRpc2Fi
bGUoaWdub3JlZCk7CisgICAgZGlzYWJsZSgpOwogfQogCiB2b2lkIEluc3BlY3RvckNhbnZhc0Fn
ZW50OjpkaXNjYXJkQWdlbnQoKQpAQCAtMTExLDEwICsxMTAsMTAgQEAgdm9pZCBJbnNwZWN0b3JD
YW52YXNBZ2VudDo6ZGlzY2FyZEFnZW50KCkKICAgICByZXNldCgpOwogfQogCi12b2lkIEluc3Bl
Y3RvckNhbnZhc0FnZW50OjplbmFibGUoRXJyb3JTdHJpbmcmKQorUHJvdG9jb2w6OkVycm9yU3Ry
aW5nT3I8dm9pZD4gSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmVuYWJsZSgpCiB7CiAgICAgaWYgKG1f
aW5zdHJ1bWVudGluZ0FnZW50cy5lbmFibGVkQ2FudmFzQWdlbnQoKSA9PSB0aGlzKQotICAgICAg
ICByZXR1cm47CisgICAgICAgIHJldHVybiB7IH07CiAKICAgICBtX2luc3RydW1lbnRpbmdBZ2Vu
dHMuc2V0RW5hYmxlZENhbnZhc0FnZW50KHRoaXMpOwogCkBAIC0xNzAsNzMgKzE2OSw4NCBAQCB2
b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjplbmFibGUoRXJyb3JTdHJpbmcmKQogICAgICAgICB9
CiAgICAgfQogI2VuZGlmIC8vIEVOQUJMRShXRUJHUFUpCisKKyAgICByZXR1cm4geyB9OwogfQog
Ci12b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjpkaXNhYmxlKEVycm9yU3RyaW5nJikKK1Byb3Rv
Y29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckNhbnZhc0FnZW50OjpkaXNhYmxlKCkK
IHsKICAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMuc2V0RW5hYmxlZENhbnZhc0FnZW50KG51bGxw
dHIpOwogCiAgICAgcmVzZXQoKTsKIAogICAgIG1fcmVjb3JkaW5nQXV0b0NhcHR1cmVGcmFtZUNv
dW50ID0gV1RGOjpudWxsb3B0OworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0
b3JDYW52YXNBZ2VudDo6cmVxdWVzdE5vZGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25z
dCBTdHJpbmcmIGNhbnZhc0lkLCBpbnQqIG5vZGVJZCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09y
PFByb3RvY29sOjpET006Ok5vZGVJZD4gSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnJlcXVlc3ROb2Rl
KGNvbnN0IFByb3RvY29sOjpDYW52YXM6OkNhbnZhc0lkJiBjYW52YXNJZCkKIHsKKyAgICBQcm90
b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBhdXRvIGluc3BlY3RvckNhbnZh
cyA9IGFzc2VydEluc3BlY3RvckNhbnZhcyhlcnJvclN0cmluZywgY2FudmFzSWQpOwogICAgIGlm
ICghaW5zcGVjdG9yQ2FudmFzKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtl
VW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAgICBhdXRvKiBub2RlID0gaW5zcGVjdG9yQ2Fu
dmFzLT5jYW52YXNFbGVtZW50KCk7Ci0gICAgaWYgKCFub2RlKSB7Ci0gICAgICAgIGVycm9yU3Ry
aW5nID0gIk1pc3NpbmcgZWxlbWVudCBvZiBjYW52YXMgZm9yIGdpdmVuIGNhbnZhc0lkIl9zOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghbm9kZSkKKyAgICAgICAgbWFrZVVuZXhw
ZWN0ZWQoIk1pc3NpbmcgZWxlbWVudCBvZiBjYW52YXMgZm9yIGdpdmVuIGNhbnZhc0lkIl9zKTsK
IAogICAgIC8vIEZJWE1FOiA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMjEzNDk5PiBXZWIgSW5zcGVj
dG9yOiBhbGxvdyBET00gbm9kZXMgdG8gYmUgaW5zdHJ1bWVudGVkIGF0IGFueSBwb2ludCwgcmVn
YXJkbGVzcyBvZiB3aGV0aGVyIHRoZSBtYWluIGRvY3VtZW50IGhhcyBhbHNvIGJlZW4gaW5zdHJ1
bWVudGVkCiAgICAgaW50IGRvY3VtZW50Tm9kZUlkID0gbV9pbnN0cnVtZW50aW5nQWdlbnRzLnBl
cnNpc3RlbnRET01BZ2VudCgpLT5ib3VuZE5vZGVJZCgmbm9kZS0+ZG9jdW1lbnQoKSk7Ci0gICAg
aWYgKCFkb2N1bWVudE5vZGVJZCkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJEb2N1bWVudCBt
dXN0IGhhdmUgYmVlbiByZXF1ZXN0ZWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAg
aWYgKCFkb2N1bWVudE5vZGVJZCkKKyAgICAgICAgbWFrZVVuZXhwZWN0ZWQoIkRvY3VtZW50IG11
c3QgaGF2ZSBiZWVuIHJlcXVlc3RlZCJfcyk7CiAKLSAgICAqbm9kZUlkID0gbV9pbnN0cnVtZW50
aW5nQWdlbnRzLnBlcnNpc3RlbnRET01BZ2VudCgpLT5wdXNoTm9kZVRvRnJvbnRlbmQoZXJyb3JT
dHJpbmcsIGRvY3VtZW50Tm9kZUlkLCBub2RlKTsKKyAgICByZXR1cm4gbV9pbnN0cnVtZW50aW5n
QWdlbnRzLnBlcnNpc3RlbnRET01BZ2VudCgpLT5wdXNoTm9kZVRvRnJvbnRlbmQoZXJyb3JTdHJp
bmcsIGRvY3VtZW50Tm9kZUlkLCBub2RlKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2Vu
dDo6cmVxdWVzdENvbnRlbnQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcm
IGNhbnZhc0lkLCBTdHJpbmcqIGNvbnRlbnQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxTdHJp
bmc+IEluc3BlY3RvckNhbnZhc0FnZW50OjpyZXF1ZXN0Q29udGVudChjb25zdCBQcm90b2NvbDo6
Q2FudmFzOjpDYW52YXNJZCYgY2FudmFzSWQpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5n
IGVycm9yU3RyaW5nOworCiAgICAgYXV0byBpbnNwZWN0b3JDYW52YXMgPSBhc3NlcnRJbnNwZWN0
b3JDYW52YXMoZXJyb3JTdHJpbmcsIGNhbnZhc0lkKTsKICAgICBpZiAoIWluc3BlY3RvckNhbnZh
cykKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JT
dHJpbmcpOwogCi0gICAgKmNvbnRlbnQgPSBpbnNwZWN0b3JDYW52YXMtPmdldENhbnZhc0NvbnRl
bnRBc0RhdGFVUkwoZXJyb3JTdHJpbmcpOworICAgIGF1dG8gcmVzdWx0ID0gaW5zcGVjdG9yQ2Fu
dmFzLT5nZXRDYW52YXNDb250ZW50QXNEYXRhVVJMKGVycm9yU3RyaW5nKTsKKyAgICBpZiAoIXJl
c3VsdCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKKworICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnJlcXVlc3RD
bGllbnROb2RlcyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgY2FudmFz
SWQsIFJlZlB0cjxKU09OOjpBcnJheU9mPGludD4+JiBjbGllbnROb2RlSWRzKQorUHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8UmVmPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkRPTTo6Tm9kZUlkPj4+
IEluc3BlY3RvckNhbnZhc0FnZW50OjpyZXF1ZXN0Q2xpZW50Tm9kZXMoY29uc3QgUHJvdG9jb2w6
OkNhbnZhczo6Q2FudmFzSWQmIGNhbnZhc0lkKQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmlu
ZyBlcnJvclN0cmluZzsKKwogICAgIGF1dG8qIGRvbUFnZW50ID0gbV9pbnN0cnVtZW50aW5nQWdl
bnRzLnBlcnNpc3RlbnRET01BZ2VudCgpOwotICAgIGlmICghZG9tQWdlbnQpIHsKLSAgICAgICAg
ZXJyb3JTdHJpbmcgPSAiRE9NIGRvbWFpbiBtdXN0IGJlIGVuYWJsZWQiX3M7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9CisgICAgaWYgKCFkb21BZ2VudCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4
cGVjdGVkKCJET00gZG9tYWluIG11c3QgYmUgZW5hYmxlZCJfcyk7CiAKICAgICBhdXRvIGluc3Bl
Y3RvckNhbnZhcyA9IGFzc2VydEluc3BlY3RvckNhbnZhcyhlcnJvclN0cmluZywgY2FudmFzSWQp
OwogICAgIGlmICghaW5zcGVjdG9yQ2FudmFzKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJl
dHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKLSAgICBjbGllbnROb2RlSWRzID0g
SlNPTjo6QXJyYXlPZjxpbnQ+OjpjcmVhdGUoKTsKKyAgICBhdXRvIGNsaWVudE5vZGVJZHMgPSBK
U09OOjpBcnJheU9mPFByb3RvY29sOjpET006Ok5vZGVJZD46OmNyZWF0ZSgpOwogICAgIGZvciAo
YXV0byYgY2xpZW50Tm9kZSA6IGluc3BlY3RvckNhbnZhcy0+Y2xpZW50Tm9kZXMoKSkgewogICAg
ICAgICAvLyBGSVhNRTogPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzIxMzQ5OT4gV2ViIEluc3BlY3Rv
cjogYWxsb3cgRE9NIG5vZGVzIHRvIGJlIGluc3RydW1lbnRlZCBhdCBhbnkgcG9pbnQsIHJlZ2Fy
ZGxlc3Mgb2Ygd2hldGhlciB0aGUgbWFpbiBkb2N1bWVudCBoYXMgYWxzbyBiZWVuIGluc3RydW1l
bnRlZAogICAgICAgICBpZiAoYXV0byBkb2N1bWVudE5vZGVJZCA9IGRvbUFnZW50LT5ib3VuZE5v
ZGVJZCgmY2xpZW50Tm9kZS0+ZG9jdW1lbnQoKSkpCiAgICAgICAgICAgICBjbGllbnROb2RlSWRz
LT5hZGRJdGVtKGRvbUFnZW50LT5wdXNoTm9kZVRvRnJvbnRlbmQoZXJyb3JTdHJpbmcsIGRvY3Vt
ZW50Tm9kZUlkLCBjbGllbnROb2RlKSk7CiAgICAgfQorICAgIHJldHVybiBXVEZNb3ZlKGNsaWVu
dE5vZGVJZHMpOwogfQogCi12b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjpyZXNvbHZlQ29udGV4
dChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgY2FudmFzSWQsIGNvbnN0
IFN0cmluZyogb2JqZWN0R3JvdXAsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1l
OjpSZW1vdGVPYmplY3Q+JiByZXN1bHQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8UHJv
dG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4+IEluc3BlY3RvckNhbnZhc0FnZW50OjpyZXNv
bHZlQ29udGV4dChjb25zdCBQcm90b2NvbDo6Q2FudmFzOjpDYW52YXNJZCYgY2FudmFzSWQsIGNv
bnN0IFN0cmluZyYgb2JqZWN0R3JvdXApCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVy
cm9yU3RyaW5nOworCiAgICAgYXV0byBpbnNwZWN0b3JDYW52YXMgPSBhc3NlcnRJbnNwZWN0b3JD
YW52YXMoZXJyb3JTdHJpbmcsIGNhbnZhc0lkKTsKICAgICBpZiAoIWluc3BlY3RvckNhbnZhcykK
LSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJp
bmcpOwogCiAgICAgYXV0byogc3RhdGUgPSBpbnNwZWN0b3JDYW52YXMtPnNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKS0+ZXhlY1N0YXRlKCk7CiAgICAgYXV0byBpbmplY3RlZFNjcmlwdCA9IG1faW5q
ZWN0ZWRTY3JpcHRNYW5hZ2VyLmluamVjdGVkU2NyaXB0Rm9yKHN0YXRlKTsKQEAgLTI0NiwxMjIg
KzI1NiwxMjkgQEAgdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6cmVzb2x2ZUNvbnRleHQoRXJy
b3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcKIAogICAgIGlmICghdmFsdWUpIHsK
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIklu
dGVybmFsIGVycm9yOiB1bmtub3duIGNvbnRleHQgb2YgY2FudmFzIGZvciBnaXZlbiBjYW52YXNJ
ZCJfczsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIklu
dGVybmFsIGVycm9yOiB1bmtub3duIGNvbnRleHQgb2YgY2FudmFzIGZvciBnaXZlbiBjYW52YXNJ
ZCJfcyk7CiAgICAgfQogCi0gICAgU3RyaW5nIG9iamVjdEdyb3VwTmFtZSA9IG9iamVjdEdyb3Vw
ID8gKm9iamVjdEdyb3VwIDogU3RyaW5nKCk7Ci0gICAgcmVzdWx0ID0gaW5qZWN0ZWRTY3JpcHQu
d3JhcE9iamVjdCh2YWx1ZSwgb2JqZWN0R3JvdXBOYW1lKTsKKyAgICBhdXRvIHJlc3VsdCA9IGlu
amVjdGVkU2NyaXB0LndyYXBPYmplY3QodmFsdWUsIG9iamVjdEdyb3VwKTsKKyAgICBpZiAoIXJl
c3VsdCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJJbnRlcm5hbCBlcnJvcjogdW5h
YmxlIHRvIGNhc3QgQ29udGV4dCIpOworCisgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlTm9uTnVs
bCgpOwogfQogCi12b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjpzZXRSZWNvcmRpbmdBdXRvQ2Fw
dHVyZUZyYW1lQ291bnQoRXJyb3JTdHJpbmcmLCBpbnQgY291bnQpCitQcm90b2NvbDo6RXJyb3JT
dHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JDYW52YXNBZ2VudDo6c2V0UmVjb3JkaW5nQXV0b0NhcHR1
cmVGcmFtZUNvdW50KGludCBjb3VudCkKIHsKICAgICBpZiAoY291bnQgPiAwKQogICAgICAgICBt
X3JlY29yZGluZ0F1dG9DYXB0dXJlRnJhbWVDb3VudCA9IGNvdW50OwogICAgIGVsc2UKICAgICAg
ICAgbV9yZWNvcmRpbmdBdXRvQ2FwdHVyZUZyYW1lQ291bnQgPSBXVEY6Om51bGxvcHQ7CisgICAg
cmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6c3RhcnRSZWNvcmRp
bmcoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGNhbnZhc0lkLCBjb25z
dCBpbnQqIGZyYW1lQ291bnQsIGNvbnN0IGludCogbWVtb3J5TGltaXQpCitQcm90b2NvbDo6RXJy
b3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JDYW52YXNBZ2VudDo6c3RhcnRSZWNvcmRpbmcoY29u
c3QgUHJvdG9jb2w6OkNhbnZhczo6Q2FudmFzSWQmIGNhbnZhc0lkLCBPcHRpb25hbDxpbnQ+JiYg
ZnJhbWVDb3VudCwgT3B0aW9uYWw8aW50PiYmIG1lbW9yeUxpbWl0KQogeworICAgIFByb3RvY29s
OjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIGF1dG8gaW5zcGVjdG9yQ2FudmFzID0g
YXNzZXJ0SW5zcGVjdG9yQ2FudmFzKGVycm9yU3RyaW5nLCBjYW52YXNJZCk7CiAgICAgaWYgKCFp
bnNwZWN0b3JDYW52YXMpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEZJWE1FOiA8aHR0cHM6
Ly93ZWJraXQub3JnL2IvMjAxNjUxPiBXZWIgSW5zcGVjdG9yOiBDYW52YXM6IHN1cHBvcnQgY2Fu
dmFzIHJlY29yZGluZ3MgZm9yIFdlYkdQVURldmljZQorICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoZXJyb3JTdHJpbmcpOwogCiAgICAgYXV0byogY29udGV4dCA9IGluc3BlY3RvckNhbnZh
cy0+Y2FudmFzQ29udGV4dCgpOwotICAgIGlmICghY29udGV4dCkKLSAgICAgICAgcmV0dXJuOwog
Ci0gICAgaWYgKGNvbnRleHQtPmNhbGxUcmFjaW5nQWN0aXZlKCkpIHsKLSAgICAgICAgZXJyb3JT
dHJpbmcgPSAiQWxyZWFkeSByZWNvcmRpbmcgY2FudmFzIl9zOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQorICAgIC8vIEZJWE1FOiA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMjAxNjUxPiBXZWIgSW5z
cGVjdG9yOiBDYW52YXM6IHN1cHBvcnQgY2FudmFzIHJlY29yZGluZ3MgZm9yIFdlYkdQVURldmlj
ZQorICAgIGlmICghY29udGV4dCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJOb3Qg
c3VwcG9ydGVkIl9zKTsKKworICAgIGlmIChjb250ZXh0LT5jYWxsVHJhY2luZ0FjdGl2ZSgpKQor
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkFscmVhZHkgcmVjb3JkaW5nIGNhbnZhcyJf
cyk7CiAKICAgICBSZWNvcmRpbmdPcHRpb25zIHJlY29yZGluZ09wdGlvbnM7CiAgICAgaWYgKGZy
YW1lQ291bnQpCiAgICAgICAgIHJlY29yZGluZ09wdGlvbnMuZnJhbWVDb3VudCA9ICpmcmFtZUNv
dW50OwogICAgIGlmIChtZW1vcnlMaW1pdCkKICAgICAgICAgcmVjb3JkaW5nT3B0aW9ucy5tZW1v
cnlMaW1pdCA9ICptZW1vcnlMaW1pdDsKLSAgICBzdGFydFJlY29yZGluZygqaW5zcGVjdG9yQ2Fu
dmFzLCBJbnNwZWN0b3I6OlByb3RvY29sOjpSZWNvcmRpbmc6OkluaXRpYXRvcjo6RnJvbnRlbmQs
IFdURk1vdmUocmVjb3JkaW5nT3B0aW9ucykpOworICAgIHN0YXJ0UmVjb3JkaW5nKCppbnNwZWN0
b3JDYW52YXMsIFByb3RvY29sOjpSZWNvcmRpbmc6OkluaXRpYXRvcjo6RnJvbnRlbmQsIFdURk1v
dmUocmVjb3JkaW5nT3B0aW9ucykpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNw
ZWN0b3JDYW52YXNBZ2VudDo6c3RvcFJlY29yZGluZyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcs
IGNvbnN0IFN0cmluZyYgY2FudmFzSWQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJ
bnNwZWN0b3JDYW52YXNBZ2VudDo6c3RvcFJlY29yZGluZyhjb25zdCBQcm90b2NvbDo6Q2FudmFz
OjpDYW52YXNJZCYgY2FudmFzSWQpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9y
U3RyaW5nOworCiAgICAgYXV0byBpbnNwZWN0b3JDYW52YXMgPSBhc3NlcnRJbnNwZWN0b3JDYW52
YXMoZXJyb3JTdHJpbmcsIGNhbnZhc0lkKTsKICAgICBpZiAoIWluc3BlY3RvckNhbnZhcykKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgLy8gRklYTUU6IDxodHRwczovL3dlYmtpdC5vcmcvYi8yMDE2
NTE+IFdlYiBJbnNwZWN0b3I6IENhbnZhczogc3VwcG9ydCBjYW52YXMgcmVjb3JkaW5ncyBmb3Ig
V2ViR1BVRGV2aWNlCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7
CiAKICAgICBhdXRvKiBjb250ZXh0ID0gaW5zcGVjdG9yQ2FudmFzLT5jYW52YXNDb250ZXh0KCk7
Ci0gICAgaWYgKCFjb250ZXh0KQotICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoIWNvbnRleHQt
PmNhbGxUcmFjaW5nQWN0aXZlKCkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiTm90IHJlY29y
ZGluZyBjYW52YXMiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgLy8gRklYTUU6IDxo
dHRwczovL3dlYmtpdC5vcmcvYi8yMDE2NTE+IFdlYiBJbnNwZWN0b3I6IENhbnZhczogc3VwcG9y
dCBjYW52YXMgcmVjb3JkaW5ncyBmb3IgV2ViR1BVRGV2aWNlCisgICAgaWYgKCFjb250ZXh0KQor
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk5vdCBzdXBwb3J0ZWQiX3MpOworCisgICAg
aWYgKCFjb250ZXh0LT5jYWxsVHJhY2luZ0FjdGl2ZSgpKQorICAgICAgICByZXR1cm4gbWFrZVVu
ZXhwZWN0ZWQoIk5vdCByZWNvcmRpbmcgY2FudmFzIl9zKTsKIAogICAgIGRpZEZpbmlzaFJlY29y
ZGluZ0NhbnZhc0ZyYW1lKCpjb250ZXh0LCB0cnVlKTsKKworICAgIHJldHVybiB7IH07CiB9CiAK
ICNpZiBFTkFCTEUoV0VCR0wpIHx8IEVOQUJMRShXRUJHUFUpCi12b2lkIEluc3BlY3RvckNhbnZh
c0FnZW50OjpyZXF1ZXN0U2hhZGVyU291cmNlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29u
c3QgU3RyaW5nJiBwcm9ncmFtSWQsIGNvbnN0IFN0cmluZyYgc2hhZGVyVHlwZVN0cmluZywgU3Ry
aW5nKiBvdXRTb3VyY2UpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxTdHJpbmc+IEluc3BlY3Rv
ckNhbnZhc0FnZW50OjpyZXF1ZXN0U2hhZGVyU291cmNlKGNvbnN0IFByb3RvY29sOjpDYW52YXM6
OlByb2dyYW1JZCYgcHJvZ3JhbUlkLCBQcm90b2NvbDo6Q2FudmFzOjpTaGFkZXJUeXBlIHNoYWRl
clR5cGUpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAgICAg
YXV0byBpbnNwZWN0b3JQcm9ncmFtID0gYXNzZXJ0SW5zcGVjdG9yUHJvZ3JhbShlcnJvclN0cmlu
ZywgcHJvZ3JhbUlkKTsKICAgICBpZiAoIWluc3BlY3RvclByb2dyYW0pCi0gICAgICAgIHJldHVy
bjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAotICAgIGF1
dG8gc2hhZGVyVHlwZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6Okluc3BlY3RvckhlbHBlcnM6OnBh
cnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpDYW52YXM6OlNoYWRl
clR5cGU+KHNoYWRlclR5cGVTdHJpbmcpOwotICAgIGlmICghc2hhZGVyVHlwZSkgewotICAgICAg
ICBlcnJvclN0cmluZyA9IG1ha2VTdHJpbmcoIlVua25vd24gc2hhZGVyVHlwZTogIl9zLCBzaGFk
ZXJUeXBlU3RyaW5nKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBhdXRvIHNvdXJjZSA9
IGluc3BlY3RvclByb2dyYW0tPnJlcXVlc3RTaGFkZXJTb3VyY2Uoc2hhZGVyVHlwZSk7CisgICAg
aWYgKCFzb3VyY2UpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTWlzc2luZyBzaGFk
ZXIgb2YgZ2l2ZW4gc2hhZGVyVHlwZSBmb3IgZ2l2ZW4gcHJvZ3JhbUlkIl9zKTsKIAotICAgIGF1
dG8gc291cmNlID0gaW5zcGVjdG9yUHJvZ3JhbS0+cmVxdWVzdFNoYWRlclNvdXJjZShzaGFkZXJU
eXBlLnZhbHVlKCkpOwotICAgIGlmICghc291cmNlKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0g
Ik1pc3Npbmcgc2hhZGVyIG9mIGdpdmVuIHNoYWRlclR5cGUgZm9yIGdpdmVuIHByb2dyYW1JZCJf
czsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgICpvdXRTb3VyY2UgPSBzb3VyY2U7Cisg
ICAgcmV0dXJuIHNvdXJjZTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6dXBkYXRl
U2hhZGVyKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBwcm9ncmFtSWQs
IGNvbnN0IFN0cmluZyYgc2hhZGVyVHlwZVN0cmluZywgY29uc3QgU3RyaW5nJiBzb3VyY2UpCitQ
cm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JDYW52YXNBZ2VudDo6dXBkYXRl
U2hhZGVyKGNvbnN0IFByb3RvY29sOjpDYW52YXM6OlByb2dyYW1JZCYgcHJvZ3JhbUlkLCBQcm90
b2NvbDo6Q2FudmFzOjpTaGFkZXJUeXBlIHNoYWRlclR5cGUsIGNvbnN0IFN0cmluZyYgc291cmNl
KQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIGF1dG8g
aW5zcGVjdG9yUHJvZ3JhbSA9IGFzc2VydEluc3BlY3RvclByb2dyYW0oZXJyb3JTdHJpbmcsIHBy
b2dyYW1JZCk7CiAgICAgaWYgKCFpbnNwZWN0b3JQcm9ncmFtKQotICAgICAgICByZXR1cm47Cisg
ICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKLSAgICBhdXRvIHNo
YWRlclR5cGUgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpJbnNwZWN0b3JIZWxwZXJzOjpwYXJzZUVu
dW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q2FudmFzOjpTaGFkZXJUeXBl
PihzaGFkZXJUeXBlU3RyaW5nKTsKLSAgICBpZiAoIXNoYWRlclR5cGUpIHsKLSAgICAgICAgZXJy
b3JTdHJpbmcgPSBtYWtlU3RyaW5nKCJVbmtub3duIHNoYWRlclR5cGU6ICJfcywgc2hhZGVyVHlw
ZVN0cmluZyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKCFpbnNwZWN0b3JQcm9n
cmFtLT51cGRhdGVTaGFkZXIoc2hhZGVyVHlwZSwgc291cmNlKSkKKyAgICAgICAgcmV0dXJuIG1h
a2VVbmV4cGVjdGVkKCJGYWlsZWQgdG8gdXBkYXRlIHNoYWRlciBvZiBnaXZlbiBzaGFkZXJUeXBl
IGZvciBnaXZlbiBwcm9ncmFtSWQiX3MpOwogCi0gICAgaWYgKCFpbnNwZWN0b3JQcm9ncmFtLT51
cGRhdGVTaGFkZXIoc2hhZGVyVHlwZS52YWx1ZSgpLCBzb3VyY2UpKQotICAgICAgICBlcnJvclN0
cmluZyA9ICJGYWlsZWQgdG8gdXBkYXRlIHNoYWRlciBvZiBnaXZlbiBzaGFkZXJUeXBlIGZvciBn
aXZlbiBwcm9ncmFtSWQiX3M7CisgICAgcmV0dXJuIHsgfTsKIH0KIAogI2lmIEVOQUJMRShXRUJH
TCkKLXZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnNldFNoYWRlclByb2dyYW1EaXNhYmxlZChF
cnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgcHJvZ3JhbUlkLCBib29sIGRp
c2FibGVkKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yQ2FudmFzQWdl
bnQ6OnNldFNoYWRlclByb2dyYW1EaXNhYmxlZChjb25zdCBQcm90b2NvbDo6Q2FudmFzOjpQcm9n
cmFtSWQmIHByb2dyYW1JZCwgYm9vbCBkaXNhYmxlZCkKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JT
dHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBhdXRvIGluc3BlY3RvclByb2dyYW0gPSBhc3NlcnRJ
bnNwZWN0b3JQcm9ncmFtKGVycm9yU3RyaW5nLCBwcm9ncmFtSWQpOwogICAgIGlmICghaW5zcGVj
dG9yUHJvZ3JhbSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0
ZWQoZXJyb3JTdHJpbmcpOwogCiAgICAgaW5zcGVjdG9yUHJvZ3JhbS0+c2V0RGlzYWJsZWQoZGlz
YWJsZWQpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2Vu
dDo6c2V0U2hhZGVyUHJvZ3JhbUhpZ2hsaWdodGVkKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywg
Y29uc3QgU3RyaW5nJiBwcm9ncmFtSWQsIGJvb2wgaGlnaGxpZ2h0ZWQpCitQcm90b2NvbDo6RXJy
b3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JDYW52YXNBZ2VudDo6c2V0U2hhZGVyUHJvZ3JhbUhp
Z2hsaWdodGVkKGNvbnN0IFByb3RvY29sOjpDYW52YXM6OlByb2dyYW1JZCYgcHJvZ3JhbUlkLCBi
b29sIGhpZ2hsaWdodGVkKQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmlu
ZzsKKwogICAgIGF1dG8gaW5zcGVjdG9yUHJvZ3JhbSA9IGFzc2VydEluc3BlY3RvclByb2dyYW0o
ZXJyb3JTdHJpbmcsIHByb2dyYW1JZCk7CiAgICAgaWYgKCFpbnNwZWN0b3JQcm9ncmFtKQotICAg
ICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7
CiAKICAgICBpbnNwZWN0b3JQcm9ncmFtLT5zZXRIaWdobGlnaHRlZChoaWdobGlnaHRlZCk7CisK
KyAgICByZXR1cm4geyB9OwogfQogI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkKICNlbmRpZiAvLyBF
TkFCTEUoV0VCR0wpIHx8IEVOQUJMRShXRUJHUFUpCkBAIC00MTMsNyArNDMwLDcgQEAgdm9pZCBJ
bnNwZWN0b3JDYW52YXNBZ2VudDo6ZGlkQ3JlYXRlQ2FudmFzUmVuZGVyaW5nQ29udGV4dChDYW52
YXNSZW5kZXJpbmdDb250ZXgKICAgICBpZiAobV9yZWNvcmRpbmdBdXRvQ2FwdHVyZUZyYW1lQ291
bnQpIHsKICAgICAgICAgUmVjb3JkaW5nT3B0aW9ucyByZWNvcmRpbmdPcHRpb25zOwogICAgICAg
ICByZWNvcmRpbmdPcHRpb25zLmZyYW1lQ291bnQgPSBtX3JlY29yZGluZ0F1dG9DYXB0dXJlRnJh
bWVDb3VudC52YWx1ZSgpOwotICAgICAgICBzdGFydFJlY29yZGluZyhpbnNwZWN0b3JDYW52YXMs
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlY29yZGluZzo6SW5pdGlhdG9yOjpBdXRvQ2FwdHVyZSwg
V1RGTW92ZShyZWNvcmRpbmdPcHRpb25zKSk7CisgICAgICAgIHN0YXJ0UmVjb3JkaW5nKGluc3Bl
Y3RvckNhbnZhcywgUHJvdG9jb2w6OlJlY29yZGluZzo6SW5pdGlhdG9yOjpBdXRvQ2FwdHVyZSwg
V1RGTW92ZShyZWNvcmRpbmdPcHRpb25zKSk7CiAgICAgfQogfQogCkBAIC01NzMsNyArNTkwLDcg
QEAgdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6Y29uc29sZVN0YXJ0UmVjb3JkaW5nQ2FudmFz
KENhbnZhc1JlbmRlcmluZ0NvbnRleHQmIGMKICAgICAgICAgaWYgKEpTQzo6SlNWYWx1ZSBvcHRp
b25OYW1lID0gb3B0aW9ucy0+Z2V0KCZleGVjLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmco
dm0sICJuYW1lIikpKQogICAgICAgICAgICAgcmVjb3JkaW5nT3B0aW9ucy5uYW1lID0gb3B0aW9u
TmFtZS50b1dURlN0cmluZygmZXhlYyk7CiAgICAgfQotICAgIHN0YXJ0UmVjb3JkaW5nKCppbnNw
ZWN0b3JDYW52YXMsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlY29yZGluZzo6SW5pdGlhdG9yOjpD
b25zb2xlLCBXVEZNb3ZlKHJlY29yZGluZ09wdGlvbnMpKTsKKyAgICBzdGFydFJlY29yZGluZygq
aW5zcGVjdG9yQ2FudmFzLCBQcm90b2NvbDo6UmVjb3JkaW5nOjpJbml0aWF0b3I6OkNvbnNvbGUs
IFdURk1vdmUocmVjb3JkaW5nT3B0aW9ucykpOwogfQogCiB2b2lkIEluc3BlY3RvckNhbnZhc0Fn
ZW50Ojpjb25zb2xlU3RvcFJlY29yZGluZ0NhbnZhcyhDYW52YXNSZW5kZXJpbmdDb250ZXh0JiBj
b250ZXh0KQpAQCAtNjk4LDcgKzcxNSw3IEBAIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6Ondp
bGxEZXN0cm95V2ViR1BVUGlwZWxpbmUoV2ViR1BVUGlwZWxpbmUmIHBpcGVsaW5lKQogfQogI2Vu
ZGlmIC8vIEVOQUJMRShXRUJHUFUpCiAKLXZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnN0YXJ0
UmVjb3JkaW5nKEluc3BlY3RvckNhbnZhcyYgaW5zcGVjdG9yQ2FudmFzLCBJbnNwZWN0b3I6OlBy
b3RvY29sOjpSZWNvcmRpbmc6OkluaXRpYXRvciBpbml0aWF0b3IsIFJlY29yZGluZ09wdGlvbnMm
JiByZWNvcmRpbmdPcHRpb25zKQordm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6c3RhcnRSZWNv
cmRpbmcoSW5zcGVjdG9yQ2FudmFzJiBpbnNwZWN0b3JDYW52YXMsIFByb3RvY29sOjpSZWNvcmRp
bmc6OkluaXRpYXRvciBpbml0aWF0b3IsIFJlY29yZGluZ09wdGlvbnMmJiByZWNvcmRpbmdPcHRp
b25zKQogewogICAgIGF1dG8qIGNvbnRleHQgPSBpbnNwZWN0b3JDYW52YXMuY2FudmFzQ29udGV4
dCgpOwogICAgIEFTU0VSVChjb250ZXh0KTsKQEAgLTg0MCw3ICs4NTcsNyBAQCB2b2lkIEluc3Bl
Y3RvckNhbnZhc0FnZW50Ojp1bmJpbmRDYW52YXMoSW5zcGVjdG9yQ2FudmFzJiBpbnNwZWN0b3JD
YW52YXMpCiAgICAgICAgIG1fY2FudmFzRGVzdHJveWVkVGltZXIuc3RhcnRPbmVTaG90KDBfcyk7
CiB9CiAKLVJlZlB0cjxJbnNwZWN0b3JDYW52YXM+IEluc3BlY3RvckNhbnZhc0FnZW50Ojphc3Nl
cnRJbnNwZWN0b3JDYW52YXMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcm
IGNhbnZhc0lkKQorUmVmUHRyPEluc3BlY3RvckNhbnZhcz4gSW5zcGVjdG9yQ2FudmFzQWdlbnQ6
OmFzc2VydEluc3BlY3RvckNhbnZhcyhQcm90b2NvbDo6RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5n
LCBjb25zdCBTdHJpbmcmIGNhbnZhc0lkKQogewogICAgIGF1dG8gaW5zcGVjdG9yQ2FudmFzID0g
bV9pZGVudGlmaWVyVG9JbnNwZWN0b3JDYW52YXMuZ2V0KGNhbnZhc0lkKTsKICAgICBpZiAoIWlu
c3BlY3RvckNhbnZhcykgewpAQCAtODg1LDcgKzkwMiw3IEBAIHZvaWQgSW5zcGVjdG9yQ2FudmFz
QWdlbnQ6OnVuYmluZFByb2dyYW0oSW5zcGVjdG9yU2hhZGVyUHJvZ3JhbSYgaW5zcGVjdG9yUHJv
Z3JhCiAgICAgICAgIG1fcHJvZ3JhbURlc3Ryb3llZFRpbWVyLnN0YXJ0T25lU2hvdCgwX3MpOwog
fQogCi1SZWZQdHI8SW5zcGVjdG9yU2hhZGVyUHJvZ3JhbT4gSW5zcGVjdG9yQ2FudmFzQWdlbnQ6
OmFzc2VydEluc3BlY3RvclByb2dyYW0oRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBT
dHJpbmcmIHByb2dyYW1JZCkKK1JlZlB0cjxJbnNwZWN0b3JTaGFkZXJQcm9ncmFtPiBJbnNwZWN0
b3JDYW52YXNBZ2VudDo6YXNzZXJ0SW5zcGVjdG9yUHJvZ3JhbShQcm90b2NvbDo6RXJyb3JTdHJp
bmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHByb2dyYW1JZCkKIHsKICAgICBhdXRvIGlu
c3BlY3RvclByb2dyYW0gPSBtX2lkZW50aWZpZXJUb0luc3BlY3RvclByb2dyYW0uZ2V0KHByb2dy
YW1JZCk7CiAgICAgaWYgKCFpbnNwZWN0b3JQcm9ncmFtKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNhbnZhc0FnZW50LmggYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNhbnZhc0FnZW50LmgKaW5kZXggMGVm
MWFlZmI2NDdlYWQ5OWI3ZDBlYjI0M2ZkMGI0MDhjZTQ1YjYwZi4uODZiZGI1MTI1NjlhMzExZjdh
MjUwODk1ZThmZmJjOWRkOWViY2RjMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2FnZW50cy9JbnNwZWN0b3JDYW52YXNBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ2FudmFzQWdlbnQuaApAQCAtNTcsNDMgKzU3LDQxIEBA
IGNsYXNzIFdlYkdQVVN3YXBDaGFpbjsKICNlbmRpZiAvLyBFTkFCTEUoV0VCR1BVKQogI2VuZGlm
IC8vIEVOQUJMRShXRUJHTCkgfHwgRU5BQkxFKFdFQkdQVSkKIAotdHlwZWRlZiBTdHJpbmcgRXJy
b3JTdHJpbmc7Ci0KIGNsYXNzIEluc3BlY3RvckNhbnZhc0FnZW50IGZpbmFsIDogcHVibGljIElu
c3BlY3RvckFnZW50QmFzZSwgcHVibGljIEluc3BlY3Rvcjo6Q2FudmFzQmFja2VuZERpc3BhdGNo
ZXJIYW5kbGVyLCBwdWJsaWMgQ2FudmFzT2JzZXJ2ZXIsIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxJ
bnNwZWN0b3JDYW52YXNBZ2VudD4gewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEluc3BlY3Rv
ckNhbnZhc0FnZW50KTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAg
ICBJbnNwZWN0b3JDYW52YXNBZ2VudChQYWdlQWdlbnRDb250ZXh0Jik7Ci0gICAgfkluc3BlY3Rv
ckNhbnZhc0FnZW50KCkgb3ZlcnJpZGU7CisgICAgfkluc3BlY3RvckNhbnZhc0FnZW50KCk7CiAK
ICAgICAvLyBJbnNwZWN0b3JBZ2VudEJhc2UKLSAgICB2b2lkIGRpZENyZWF0ZUZyb250ZW5kQW5k
QmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kUm91dGVyKiwgSW5zcGVjdG9yOjpCYWNrZW5kRGlz
cGF0Y2hlciopIG92ZXJyaWRlOwotICAgIHZvaWQgd2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tl
bmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKSBvdmVycmlkZTsKLSAgICB2b2lkIGRpc2Nh
cmRBZ2VudCgpIG92ZXJyaWRlOworICAgIHZvaWQgZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5k
KEluc3BlY3Rvcjo6RnJvbnRlbmRSb3V0ZXIqLCBJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVy
Kik7CisgICAgdm9pZCB3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkRp
c2Nvbm5lY3RSZWFzb24pOworICAgIHZvaWQgZGlzY2FyZEFnZW50KCk7CiAKICAgICAvLyBDYW52
YXNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIKLSAgICB2b2lkIGVuYWJsZShFcnJvclN0cmluZyYp
IG92ZXJyaWRlOwotICAgIHZvaWQgZGlzYWJsZShFcnJvclN0cmluZyYpIG92ZXJyaWRlOwotICAg
IHZvaWQgcmVxdWVzdE5vZGUoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGNhbnZhc0lkLCBp
bnQqIG5vZGVJZCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZXF1ZXN0Q29udGVudChFcnJvclN0cmlu
ZyYsIGNvbnN0IFN0cmluZyYgY2FudmFzSWQsIFN0cmluZyogY29udGVudCkgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCByZXF1ZXN0Q2xpZW50Tm9kZXMoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGNh
bnZhc0lkLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxpbnQ+PiYpIG92ZXJyaWRlOwotICAgIHZvaWQg
cmVzb2x2ZUNvbnRleHQoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGNhbnZhc0lkLCBjb25z
dCBTdHJpbmcqIG9iamVjdEdyb3VwLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGlt
ZTo6UmVtb3RlT2JqZWN0PiYpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0UmVjb3JkaW5nQXV0b0Nh
cHR1cmVGcmFtZUNvdW50KEVycm9yU3RyaW5nJiwgaW50IGNvdW50KSBvdmVycmlkZTsKLSAgICB2
b2lkIHN0YXJ0UmVjb3JkaW5nKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBjYW52YXNJZCwg
Y29uc3QgaW50KiBmcmFtZUNvdW50LCBjb25zdCBpbnQqIG1lbW9yeUxpbWl0KSBvdmVycmlkZTsK
LSAgICB2b2lkIHN0b3BSZWNvcmRpbmcoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGNhbnZh
c0lkKSBvdmVycmlkZTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZv
aWQ+IGVuYWJsZSgpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9p
ZD4gZGlzYWJsZSgpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8SW5z
cGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQ+IHJlcXVlc3ROb2RlKGNvbnN0IEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkNhbnZhczo6Q2FudmFzSWQmKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29s
OjpFcnJvclN0cmluZ09yPFN0cmluZz4gcmVxdWVzdENvbnRlbnQoY29uc3QgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6Q2FudmFzOjpDYW52YXNJZCYpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8UmVmPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpO
b2RlSWQ+Pj4gcmVxdWVzdENsaWVudE5vZGVzKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNh
bnZhczo6Q2FudmFzSWQmKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09y
PFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+PiByZXNvbHZl
Q29udGV4dChjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpDYW52YXM6OkNhbnZhc0lkJiwgY29u
c3QgU3RyaW5nJiBvYmplY3RHcm91cCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JT
dHJpbmdPcjx2b2lkPiBzZXRSZWNvcmRpbmdBdXRvQ2FwdHVyZUZyYW1lQ291bnQoaW50KTsKKyAg
ICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHN0YXJ0UmVjb3JkaW5n
KGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6Q2FudmFzSWQmLCBPcHRpb25hbDxp
bnQ+JiYgZnJhbWVDb3VudCwgT3B0aW9uYWw8aW50PiYmIG1lbW9yeUxpbWl0KTsKKyAgICBJbnNw
ZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHN0b3BSZWNvcmRpbmcoY29uc3Qg
SW5zcGVjdG9yOjpQcm90b2NvbDo6Q2FudmFzOjpDYW52YXNJZCYpOwogI2lmIEVOQUJMRShXRUJH
TCkgfHwgRU5BQkxFKFdFQkdQVSkKLSAgICB2b2lkIHJlcXVlc3RTaGFkZXJTb3VyY2UoRXJyb3JT
dHJpbmcmLCBjb25zdCBTdHJpbmcmIHByb2dyYW1JZCwgY29uc3QgU3RyaW5nJiBzaGFkZXJUeXBl
LCBTdHJpbmcqIHNvdXJjZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCB1cGRhdGVTaGFkZXIoRXJyb3JT
dHJpbmcmLCBjb25zdCBTdHJpbmcmIHByb2dyYW1JZCwgY29uc3QgU3RyaW5nJiBzaGFkZXJUeXBl
LCBjb25zdCBTdHJpbmcmIHNvdXJjZSkgb3ZlcnJpZGU7CisgICAgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6RXJyb3JTdHJpbmdPcjxTdHJpbmc+IHJlcXVlc3RTaGFkZXJTb3VyY2UoY29uc3QgSW5zcGVj
dG9yOjpQcm90b2NvbDo6Q2FudmFzOjpQcm9ncmFtSWQmLCBJbnNwZWN0b3I6OlByb3RvY29sOjpD
YW52YXM6OlNoYWRlclR5cGUpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5n
T3I8dm9pZD4gdXBkYXRlU2hhZGVyKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6
UHJvZ3JhbUlkJiwgSW5zcGVjdG9yOjpQcm90b2NvbDo6Q2FudmFzOjpTaGFkZXJUeXBlLCBjb25z
dCBTdHJpbmcmIHNvdXJjZSk7CiAjaWYgRU5BQkxFKFdFQkdMKQotICAgIHZvaWQgc2V0U2hhZGVy
UHJvZ3JhbURpc2FibGVkKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBwcm9ncmFtSWQsIGJv
b2wgZGlzYWJsZWQpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0U2hhZGVyUHJvZ3JhbUhpZ2hsaWdo
dGVkKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBwcm9ncmFtSWQsIGJvb2wgaGlnaGxpZ2h0
ZWQpIG92ZXJyaWRlOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9p
ZD4gc2V0U2hhZGVyUHJvZ3JhbURpc2FibGVkKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNh
bnZhczo6UHJvZ3JhbUlkJiwgYm9vbCBkaXNhYmxlZCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzZXRTaGFkZXJQcm9ncmFtSGlnaGxpZ2h0ZWQoY29uc3Qg
SW5zcGVjdG9yOjpQcm90b2NvbDo6Q2FudmFzOjpQcm9ncmFtSWQmLCBib29sIGhpZ2hsaWdodGVk
KTsKICNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKSB8fCBF
TkFCTEUoV0VCR1BVKQogCiAgICAgLy8gQ2FudmFzT2JzZXJ2ZXIKLSAgICB2b2lkIGNhbnZhc0No
YW5nZWQoQ2FudmFzQmFzZSYsIGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOwotICAgIHZvaWQg
Y2FudmFzUmVzaXplZChDYW52YXNCYXNlJikgb3ZlcnJpZGUgeyB9Ci0gICAgdm9pZCBjYW52YXNE
ZXN0cm95ZWQoQ2FudmFzQmFzZSYpIG92ZXJyaWRlOworICAgIHZvaWQgY2FudmFzQ2hhbmdlZChD
YW52YXNCYXNlJiwgY29uc3QgRmxvYXRSZWN0Jik7CisgICAgdm9pZCBjYW52YXNSZXNpemVkKENh
bnZhc0Jhc2UmKSB7IH0KKyAgICB2b2lkIGNhbnZhc0Rlc3Ryb3llZChDYW52YXNCYXNlJik7CiAK
ICAgICAvLyBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24KICAgICB2b2lkIGZyYW1lTmF2aWdhdGVk
KEZyYW1lJik7CkBAIC0xMzgsNyArMTM2LDcgQEAgcHJpdmF0ZToKICAgICBJbnNwZWN0b3JDYW52
YXMmIGJpbmRDYW52YXMoV2ViR1BVRGV2aWNlJiwgYm9vbCBjYXB0dXJlQmFja3RyYWNlKTsKICNl
bmRpZiAvLyBFTkFCTEUoV0VCR1BVKQogICAgIHZvaWQgdW5iaW5kQ2FudmFzKEluc3BlY3RvckNh
bnZhcyYpOwotICAgIFJlZlB0cjxJbnNwZWN0b3JDYW52YXM+IGFzc2VydEluc3BlY3RvckNhbnZh
cyhFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgY2FudmFzSWQpOworICAgIFJlZlB0cjxJbnNw
ZWN0b3JDYW52YXM+IGFzc2VydEluc3BlY3RvckNhbnZhcyhJbnNwZWN0b3I6OlByb3RvY29sOjpF
cnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgY2FudmFzSWQpOwogICAgIFJlZlB0cjxJbnNwZWN0
b3JDYW52YXM+IGZpbmRJbnNwZWN0b3JDYW52YXMoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCYpOwog
I2lmIEVOQUJMRShXRUJHUFUpCiAgICAgUmVmUHRyPEluc3BlY3RvckNhbnZhcz4gZmluZEluc3Bl
Y3RvckNhbnZhcyhXZWJHUFVEZXZpY2UmKTsKQEAgLTE0Niw3ICsxNDQsNyBAQCBwcml2YXRlOgog
CiAjaWYgRU5BQkxFKFdFQkdMKSB8fCBFTkFCTEUoV0VCR1BVKQogICAgIHZvaWQgdW5iaW5kUHJv
Z3JhbShJbnNwZWN0b3JTaGFkZXJQcm9ncmFtJik7Ci0gICAgUmVmUHRyPEluc3BlY3RvclNoYWRl
clByb2dyYW0+IGFzc2VydEluc3BlY3RvclByb2dyYW0oRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJp
bmcmIHByb2dyYW1JZCk7CisgICAgUmVmUHRyPEluc3BlY3RvclNoYWRlclByb2dyYW0+IGFzc2Vy
dEluc3BlY3RvclByb2dyYW0oSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBjb25z
dCBTdHJpbmcmIHByb2dyYW1JZCk7CiAjaWYgRU5BQkxFKFdFQkdMKQogICAgIFJlZlB0cjxJbnNw
ZWN0b3JTaGFkZXJQcm9ncmFtPiBmaW5kSW5zcGVjdG9yUHJvZ3JhbShXZWJHTFByb2dyYW0mKTsK
ICNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCmluZGV4IDgzOWE1OGI1NDg4NTRkZTc1
NzcwZDI2MzNkOGQ1OWFmNTlmMjQxMTIuLmRiZGI4NTE4YzlhMWRiZTFhYWY3N2IwMjJmNjBhOWMx
NmQ0NDAzODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5z
cGVjdG9yRE9NQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9yRE9NQWdlbnQuY3BwCkBAIC0xMjksNDAgKzEyOSwzOSBAQCB1c2luZyBuYW1lc3Bh
Y2UgSFRNTE5hbWVzOwogc3RhdGljIGNvbnN0IHNpemVfdCBtYXhUZXh0U2l6ZSA9IDEwMDAwOwog
c3RhdGljIGNvbnN0IFVDaGFyIGVsbGlwc2lzVUNoYXJbXSA9IHsgMHgyMDI2LCAwIH07CiAKLXN0
YXRpYyBDb2xvciBwYXJzZUNvbG9yKGNvbnN0IEpTT046Ok9iamVjdCogY29sb3JPYmplY3QpCitz
dGF0aWMgQ29sb3IgcGFyc2VDb2xvcihSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIGNvbG9yT2JqZWN0
KQogewogICAgIGlmICghY29sb3JPYmplY3QpCiAgICAgICAgIHJldHVybiBDb2xvcjo6dHJhbnNw
YXJlbnRCbGFjazsKIAotICAgIGludCByID0gMDsKLSAgICBpbnQgZyA9IDA7Ci0gICAgaW50IGIg
PSAwOwotICAgIGlmICghY29sb3JPYmplY3QtPmdldEludGVnZXIoInIiLCByKSB8fCAhY29sb3JP
YmplY3QtPmdldEludGVnZXIoImciLCBnKSB8fCAhY29sb3JPYmplY3QtPmdldEludGVnZXIoImIi
LCBiKSkKKyAgICBhdXRvIHIgPSBjb2xvck9iamVjdC0+Z2V0SW50ZWdlcihQcm90b2NvbDo6RE9N
OjpSR0JBQ29sb3I6OnJLZXkpOworICAgIGF1dG8gZyA9IGNvbG9yT2JqZWN0LT5nZXRJbnRlZ2Vy
KFByb3RvY29sOjpET006OlJHQkFDb2xvcjo6Z0tleSk7CisgICAgYXV0byBiID0gY29sb3JPYmpl
Y3QtPmdldEludGVnZXIoUHJvdG9jb2w6OkRPTTo6UkdCQUNvbG9yOjpiS2V5KTsKKyAgICBpZiAo
IXIgfHwgIWcgfHwgIWIpCiAgICAgICAgIHJldHVybiBDb2xvcjo6dHJhbnNwYXJlbnRCbGFjazsK
IAotICAgIGRvdWJsZSBhID0gMS4wOwotICAgIGlmICghY29sb3JPYmplY3QtPmdldERvdWJsZSgi
YSIsIGEpKQotICAgICAgICByZXR1cm4gY2xhbXBUb0NvbXBvbmVudEJ5dGVzPFNSR0JBPihyLCBn
LCBiKTsKLSAgICByZXR1cm4gY2xhbXBUb0NvbXBvbmVudEJ5dGVzPFNSR0JBPihyLCBnLCBiLCBj
b252ZXJ0VG9Db21wb25lbnRCeXRlKGEpKTsKKyAgICBhdXRvIGEgPSBjb2xvck9iamVjdC0+Z2V0
RG91YmxlKFByb3RvY29sOjpET006OlJHQkFDb2xvcjo6YUtleSk7CisgICAgaWYgKCFhKQorICAg
ICAgICByZXR1cm4gY2xhbXBUb0NvbXBvbmVudEJ5dGVzPFNSR0JBPigqciwgKmcsICpiKTsKKyAg
ICByZXR1cm4gY2xhbXBUb0NvbXBvbmVudEJ5dGVzPFNSR0JBPigqciwgKmcsICpiLCBjb252ZXJ0
VG9Db21wb25lbnRCeXRlKCphKSk7CiB9CiAKLXN0YXRpYyBDb2xvciBwYXJzZUNvbmZpZ0NvbG9y
KGNvbnN0IFN0cmluZyYgZmllbGROYW1lLCBjb25zdCBKU09OOjpPYmplY3QqIGNvbmZpZ09iamVj
dCkKK3N0YXRpYyBDb2xvciBwYXJzZUNvbmZpZ0NvbG9yKGNvbnN0IFN0cmluZyYgZmllbGROYW1l
LCBKU09OOjpPYmplY3QmIGNvbmZpZ09iamVjdCkKIHsKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0
PiBjb2xvck9iamVjdDsKLSAgICBjb25maWdPYmplY3QtPmdldE9iamVjdChmaWVsZE5hbWUsIGNv
bG9yT2JqZWN0KTsKLQotICAgIHJldHVybiBwYXJzZUNvbG9yKGNvbG9yT2JqZWN0LmdldCgpKTsK
KyAgICByZXR1cm4gcGFyc2VDb2xvcihjb25maWdPYmplY3QuZ2V0T2JqZWN0KGZpZWxkTmFtZSkp
OwogfQogCi1zdGF0aWMgYm9vbCBwYXJzZVF1YWQoY29uc3QgSlNPTjo6QXJyYXkmIHF1YWRBcnJh
eSwgRmxvYXRRdWFkKiBxdWFkKQorc3RhdGljIGJvb2wgcGFyc2VRdWFkKFJlZjxKU09OOjpBcnJh
eT4mJiBxdWFkQXJyYXksIEZsb2F0UXVhZCogcXVhZCkKIHsKICAgICBjb25zdCBzaXplX3QgY29v
cmRpbmF0ZXNJblF1YWQgPSA4OwogICAgIGRvdWJsZSBjb29yZGluYXRlc1tjb29yZGluYXRlc0lu
UXVhZF07Ci0gICAgaWYgKHF1YWRBcnJheS5sZW5ndGgoKSAhPSBjb29yZGluYXRlc0luUXVhZCkK
KyAgICBpZiAocXVhZEFycmF5LT5sZW5ndGgoKSAhPSBjb29yZGluYXRlc0luUXVhZCkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY29vcmRpbmF0ZXNJ
blF1YWQ7ICsraSkgewotICAgICAgICBpZiAoIXF1YWRBcnJheS5nZXQoaSktPmFzRG91YmxlKCoo
Y29vcmRpbmF0ZXMgKyBpKSkpCisgICAgICAgIGF1dG8gY29vcmRpbmF0ZSA9IHF1YWRBcnJheS0+
Z2V0KGkpLT5hc0RvdWJsZSgpOworICAgICAgICBpZiAoIWNvb3JkaW5hdGUpCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIGNvb3JkaW5hdGVzW2ldID0gKmNvb3JkaW5hdGU7CiAg
ICAgfQogICAgIHF1YWQtPnNldFAxKEZsb2F0UG9pbnQoY29vcmRpbmF0ZXNbMF0sIGNvb3JkaW5h
dGVzWzFdKSk7CiAgICAgcXVhZC0+c2V0UDIoRmxvYXRQb2ludChjb29yZGluYXRlc1syXSwgY29v
cmRpbmF0ZXNbM10pKTsKQEAgLTI0Myw3ICsyNDIsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBy
ZXR1cm47CiAKICAgICAgICAgYXV0byogbm9kZSA9IGRvd25jYXN0PE5vZGU+KGV2ZW50LnRhcmdl
dCgpKTsKLSAgICAgICAgaW50IG5vZGVJZCA9IG1fZG9tQWdlbnQucHVzaE5vZGVQYXRoVG9Gcm9u
dGVuZChub2RlKTsKKyAgICAgICAgYXV0byBub2RlSWQgPSBtX2RvbUFnZW50LnB1c2hOb2RlUGF0
aFRvRnJvbnRlbmQobm9kZSk7CiAgICAgICAgIGlmICghbm9kZUlkKQogICAgICAgICAgICAgcmV0
dXJuOwogCkBAIC0zMjAsOSArMzE5LDkgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6d2lsbERl
c3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc28KICAgICBt
X21vdXNlZE92ZXJOb2RlID0gbnVsbHB0cjsKICAgICBtX2luc3BlY3RlZE5vZGUgPSBudWxscHRy
OwogCi0gICAgRXJyb3JTdHJpbmcgaWdub3JlZDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcg
aWdub3JlZDsKICAgICBzZXRTZWFyY2hpbmdGb3JOb2RlKGlnbm9yZWQsIGZhbHNlLCBudWxscHRy
LCBmYWxzZSk7Ci0gICAgaGlkZUhpZ2hsaWdodChpZ25vcmVkKTsKKyAgICBoaWRlSGlnaGxpZ2h0
KCk7CiAKICAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMuc2V0UGVyc2lzdGVudERPTUFnZW50KG51
bGxwdHIpOwogICAgIG1fZG9jdW1lbnRSZXF1ZXN0ZWQgPSBmYWxzZTsKQEAgLTM3NCw5ICszNzMs
OSBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpyZWxlYXNlRGFuZ2xpbmdOb2RlcygpCiAgICAg
bV9kYW5nbGluZ05vZGVUb0lkTWFwcy5jbGVhcigpOwogfQogCi1pbnQgSW5zcGVjdG9yRE9NQWdl
bnQ6OmJpbmQoTm9kZSogbm9kZSwgTm9kZVRvSWRNYXAqIG5vZGVzTWFwKQorUHJvdG9jb2w6OkRP
TTo6Tm9kZUlkIEluc3BlY3RvckRPTUFnZW50OjpiaW5kKE5vZGUqIG5vZGUsIE5vZGVUb0lkTWFw
KiBub2Rlc01hcCkKIHsKLSAgICBpbnQgaWQgPSBub2Rlc01hcC0+Z2V0KG5vZGUpOworICAgIGF1
dG8gaWQgPSBub2Rlc01hcC0+Z2V0KG5vZGUpOwogICAgIGlmIChpZCkKICAgICAgICAgcmV0dXJu
IGlkOwogICAgIGlkID0gbV9sYXN0Tm9kZUlkKys7CkBAIC0zODgsNyArMzg3LDcgQEAgaW50IElu
c3BlY3RvckRPTUFnZW50OjpiaW5kKE5vZGUqIG5vZGUsIE5vZGVUb0lkTWFwKiBub2Rlc01hcCkK
IAogdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6dW5iaW5kKE5vZGUqIG5vZGUsIE5vZGVUb0lkTWFw
KiBub2Rlc01hcCkKIHsKLSAgICBpbnQgaWQgPSBub2Rlc01hcC0+Z2V0KG5vZGUpOworICAgIGF1
dG8gaWQgPSBub2Rlc01hcC0+Z2V0KG5vZGUpOwogICAgIGlmICghaWQpCiAgICAgICAgIHJldHVy
bjsKIApAQCAtNDIyLDcgKzQyMSw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnVuYmluZChO
b2RlKiBub2RlLCBOb2RlVG9JZE1hcCogbm9kZXNNYXApCiAgICAgfQogfQogCi1Ob2RlKiBJbnNw
ZWN0b3JET01BZ2VudDo6YXNzZXJ0Tm9kZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBu
b2RlSWQpCitOb2RlKiBJbnNwZWN0b3JET01BZ2VudDo6YXNzZXJ0Tm9kZShQcm90b2NvbDo6RXJy
b3JTdHJpbmcmIGVycm9yU3RyaW5nLCBQcm90b2NvbDo6RE9NOjpOb2RlSWQgbm9kZUlkKQogewog
ICAgIE5vZGUqIG5vZGUgPSBub2RlRm9ySWQobm9kZUlkKTsKICAgICBpZiAoIW5vZGUpIHsKQEAg
LTQzMiw3ICs0MzEsNyBAQCBOb2RlKiBJbnNwZWN0b3JET01BZ2VudDo6YXNzZXJ0Tm9kZShFcnJv
clN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQpCiAgICAgcmV0dXJuIG5vZGU7CiB9CiAK
LURvY3VtZW50KiBJbnNwZWN0b3JET01BZ2VudDo6YXNzZXJ0RG9jdW1lbnQoRXJyb3JTdHJpbmcm
IGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkKQorRG9jdW1lbnQqIEluc3BlY3RvckRPTUFnZW50Ojph
c3NlcnREb2N1bWVudChQcm90b2NvbDo6RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBQcm90b2Nv
bDo6RE9NOjpOb2RlSWQgbm9kZUlkKQogewogICAgIE5vZGUqIG5vZGUgPSBhc3NlcnROb2RlKGVy
cm9yU3RyaW5nLCBub2RlSWQpOwogICAgIGlmICghbm9kZSkKQEAgLTQ0NCw3ICs0NDMsNyBAQCBE
b2N1bWVudCogSW5zcGVjdG9yRE9NQWdlbnQ6OmFzc2VydERvY3VtZW50KEVycm9yU3RyaW5nJiBl
cnJvclN0cmluZywgaW50IG5vZGVJZAogICAgIHJldHVybiBkb3duY2FzdDxEb2N1bWVudD4obm9k
ZSk7CiB9CiAKLUVsZW1lbnQqIEluc3BlY3RvckRPTUFnZW50Ojphc3NlcnRFbGVtZW50KEVycm9y
U3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJZCkKK0VsZW1lbnQqIEluc3BlY3RvckRPTUFn
ZW50Ojphc3NlcnRFbGVtZW50KFByb3RvY29sOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIFBy
b3RvY29sOjpET006Ok5vZGVJZCBub2RlSWQpCiB7CiAgICAgTm9kZSogbm9kZSA9IGFzc2VydE5v
ZGUoZXJyb3JTdHJpbmcsIG5vZGVJZCk7CiAgICAgaWYgKCFub2RlKQpAQCAtNDU2LDcgKzQ1NSw3
IEBAIEVsZW1lbnQqIEluc3BlY3RvckRPTUFnZW50Ojphc3NlcnRFbGVtZW50KEVycm9yU3RyaW5n
JiBlcnJvclN0cmluZywgaW50IG5vZGVJZCkKICAgICByZXR1cm4gZG93bmNhc3Q8RWxlbWVudD4o
bm9kZSk7CiB9CiAKLU5vZGUqIEluc3BlY3RvckRPTUFnZW50Ojphc3NlcnRFZGl0YWJsZU5vZGUo
RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkKQorTm9kZSogSW5zcGVjdG9yRE9N
QWdlbnQ6OmFzc2VydEVkaXRhYmxlTm9kZShQcm90b2NvbDo6RXJyb3JTdHJpbmcmIGVycm9yU3Ry
aW5nLCBQcm90b2NvbDo6RE9NOjpOb2RlSWQgbm9kZUlkKQogewogICAgIE5vZGUqIG5vZGUgPSBh
c3NlcnROb2RlKGVycm9yU3RyaW5nLCBub2RlSWQpOwogICAgIGlmICghbm9kZSkKQEAgLTQ3Miw3
ICs0NzEsNyBAQCBOb2RlKiBJbnNwZWN0b3JET01BZ2VudDo6YXNzZXJ0RWRpdGFibGVOb2RlKEVy
cm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJZAogICAgIHJldHVybiBub2RlOwogfQog
Ci1FbGVtZW50KiBJbnNwZWN0b3JET01BZ2VudDo6YXNzZXJ0RWRpdGFibGVFbGVtZW50KEVycm9y
U3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJZCkKK0VsZW1lbnQqIEluc3BlY3RvckRPTUFn
ZW50Ojphc3NlcnRFZGl0YWJsZUVsZW1lbnQoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0
cmluZywgUHJvdG9jb2w6OkRPTTo6Tm9kZUlkIG5vZGVJZCkKIHsKICAgICBOb2RlKiBub2RlID0g
YXNzZXJ0RWRpdGFibGVOb2RlKGVycm9yU3RyaW5nLCBub2RlSWQpOwogICAgIGlmICghbm9kZSkK
QEAgLTQ4NCwyNyArNDgzLDI3IEBAIEVsZW1lbnQqIEluc3BlY3RvckRPTUFnZW50Ojphc3NlcnRF
ZGl0YWJsZUVsZW1lbnQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQKICAgICByZXR1cm4g
ZG93bmNhc3Q8RWxlbWVudD4obm9kZSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6Omdl
dERvY3VtZW50KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRPTTo6Tm9kZT4mIHJvb3QpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8UHJv
dG9jb2w6OkRPTTo6Tm9kZT4+IEluc3BlY3RvckRPTUFnZW50OjpnZXREb2N1bWVudCgpCiB7CiAg
ICAgbV9kb2N1bWVudFJlcXVlc3RlZCA9IHRydWU7CiAKLSAgICBpZiAoIW1fZG9jdW1lbnQpIHsK
LSAgICAgICAgZXJyb3JTdHJpbmcgPSAiSW50ZXJuYWwgZXJyb3I6IG1pc3NpbmcgZG9jdW1lbnQi
X3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKCFtX2RvY3VtZW50KQorICAgICAg
ICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkludGVybmFsIGVycm9yOiBtaXNzaW5nIGRvY3VtZW50
Il9zKTsKIAogICAgIC8vIFJlc2V0IGJhY2tlbmQgc3RhdGUuCiAgICAgUmVmUHRyPERvY3VtZW50
PiBkb2N1bWVudCA9IG1fZG9jdW1lbnQ7CiAgICAgcmVzZXQoKTsKICAgICBtX2RvY3VtZW50ID0g
ZG9jdW1lbnQ7CiAKLSAgICByb290ID0gYnVpbGRPYmplY3RGb3JOb2RlKG1fZG9jdW1lbnQuZ2V0
KCksIDIsICZtX2RvY3VtZW50Tm9kZVRvSWRNYXApOworICAgIGF1dG8gcm9vdCA9IGJ1aWxkT2Jq
ZWN0Rm9yTm9kZShtX2RvY3VtZW50LmdldCgpLCAyLCAmbV9kb2N1bWVudE5vZGVUb0lkTWFwKTsK
IAogICAgIGlmIChtX25vZGVUb0ZvY3VzKQogICAgICAgICBmb2N1c05vZGUoKTsKKworICAgIHJl
dHVybiBXVEZNb3ZlKHJvb3QpOwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpwdXNoQ2hp
bGROb2Rlc1RvRnJvbnRlbmQoaW50IG5vZGVJZCwgaW50IGRlcHRoKQordm9pZCBJbnNwZWN0b3JE
T01BZ2VudDo6cHVzaENoaWxkTm9kZXNUb0Zyb250ZW5kKFByb3RvY29sOjpET006Ok5vZGVJZCBu
b2RlSWQsIGludCBkZXB0aCkKIHsKICAgICBOb2RlKiBub2RlID0gbm9kZUZvcklkKG5vZGVJZCk7
CiAgICAgaWYgKCFub2RlIHx8IChub2RlLT5ub2RlVHlwZSgpICE9IE5vZGU6OkVMRU1FTlRfTk9E
RSAmJiBub2RlLT5ub2RlVHlwZSgpICE9IE5vZGU6OkRPQ1VNRU5UX05PREUgJiYgbm9kZS0+bm9k
ZVR5cGUoKSAhPSBOb2RlOjpET0NVTUVOVF9GUkFHTUVOVF9OT0RFKSkKQEAgLTUxOSw3ICs1MTgs
NyBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpwdXNoQ2hpbGROb2Rlc1RvRnJvbnRlbmQoaW50
IG5vZGVJZCwgaW50IGRlcHRoKQogICAgICAgICBkZXB0aC0tOwogCiAgICAgICAgIGZvciAobm9k
ZSA9IGlubmVyRmlyc3RDaGlsZChub2RlKTsgbm9kZTsgbm9kZSA9IGlubmVyTmV4dFNpYmxpbmco
bm9kZSkpIHsKLSAgICAgICAgICAgIGludCBjaGlsZE5vZGVJZCA9IG5vZGVNYXAtPmdldChub2Rl
KTsKKyAgICAgICAgICAgIGF1dG8gY2hpbGROb2RlSWQgPSBub2RlTWFwLT5nZXQobm9kZSk7CiAg
ICAgICAgICAgICBBU1NFUlQoY2hpbGROb2RlSWQpOwogICAgICAgICAgICAgcHVzaENoaWxkTm9k
ZXNUb0Zyb250ZW5kKGNoaWxkTm9kZUlkLCBkZXB0aCk7CiAgICAgICAgIH0KQEAgLTU0MSwxOCAr
NTQwLDE4IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmRpc2NhcmRCaW5kaW5ncygpCiAgICAg
bV9jaGlsZHJlblJlcXVlc3RlZC5jbGVhcigpOwogfQogCi1pbnQgSW5zcGVjdG9yRE9NQWdlbnQ6
OnB1c2hOb2RlVG9Gcm9udGVuZChOb2RlKiBub2RlVG9QdXNoKQorUHJvdG9jb2w6OkRPTTo6Tm9k
ZUlkIEluc3BlY3RvckRPTUFnZW50OjpwdXNoTm9kZVRvRnJvbnRlbmQoTm9kZSogbm9kZVRvUHVz
aCkKIHsKICAgICBpZiAoIW5vZGVUb1B1c2gpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgLy8g
RklYTUU6IDxodHRwczovL3dlYmtpdC5vcmcvYi8yMTM0OTk+IFdlYiBJbnNwZWN0b3I6IGFsbG93
IERPTSBub2RlcyB0byBiZSBpbnN0cnVtZW50ZWQgYXQgYW55IHBvaW50LCByZWdhcmRsZXNzIG9m
IHdoZXRoZXIgdGhlIG1haW4gZG9jdW1lbnQgaGFzIGFsc28gYmVlbiBpbnN0cnVtZW50ZWQKIAot
ICAgIEVycm9yU3RyaW5nIGlnbm9yZWQ7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGlnbm9y
ZWQ7CiAgICAgcmV0dXJuIHB1c2hOb2RlVG9Gcm9udGVuZChpZ25vcmVkLCBib3VuZE5vZGVJZCgm
bm9kZVRvUHVzaC0+ZG9jdW1lbnQoKSksIG5vZGVUb1B1c2gpOwogfQogCi1pbnQgSW5zcGVjdG9y
RE9NQWdlbnQ6OnB1c2hOb2RlVG9Gcm9udGVuZChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGlu
dCBkb2N1bWVudE5vZGVJZCwgTm9kZSogbm9kZVRvUHVzaCkKK1Byb3RvY29sOjpET006Ok5vZGVJ
ZCBJbnNwZWN0b3JET01BZ2VudDo6cHVzaE5vZGVUb0Zyb250ZW5kKFByb3RvY29sOjpFcnJvclN0
cmluZyYgZXJyb3JTdHJpbmcsIFByb3RvY29sOjpET006Ok5vZGVJZCBkb2N1bWVudE5vZGVJZCwg
Tm9kZSogbm9kZVRvUHVzaCkKIHsKICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBhc3NlcnREb2N1
bWVudChlcnJvclN0cmluZywgZG9jdW1lbnROb2RlSWQpOwogICAgIGlmICghZG9jdW1lbnQpCkBA
IC01NjUsNyArNTY0LDcgQEAgaW50IEluc3BlY3RvckRPTUFnZW50OjpwdXNoTm9kZVRvRnJvbnRl
bmQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgZG9jdW1lbnQKICAgICByZXR1cm4gcHVz
aE5vZGVQYXRoVG9Gcm9udGVuZChlcnJvclN0cmluZywgbm9kZVRvUHVzaCk7CiB9CiAKLU5vZGUq
IEluc3BlY3RvckRPTUFnZW50Ojpub2RlRm9ySWQoaW50IGlkKQorTm9kZSogSW5zcGVjdG9yRE9N
QWdlbnQ6Om5vZGVGb3JJZChQcm90b2NvbDo6RE9NOjpOb2RlSWQgaWQpCiB7CiAgICAgaWYgKCFt
X2lkVG9Ob2RlLmlzVmFsaWRLZXkoaWQpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTU3
Myw3ICs1NzIsNyBAQCBOb2RlKiBJbnNwZWN0b3JET01BZ2VudDo6bm9kZUZvcklkKGludCBpZCkK
ICAgICByZXR1cm4gbV9pZFRvTm9kZS5nZXQoaWQpOwogfQogCi12b2lkIEluc3BlY3RvckRPTUFn
ZW50OjpyZXF1ZXN0Q2hpbGROb2RlcyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2Rl
SWQsIGNvbnN0IGludCogZGVwdGgpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNw
ZWN0b3JET01BZ2VudDo6cmVxdWVzdENoaWxkTm9kZXMoUHJvdG9jb2w6OkRPTTo6Tm9kZUlkIG5v
ZGVJZCwgT3B0aW9uYWw8aW50PiYmIGRlcHRoKQogewogICAgIGludCBzYW5pdGl6ZWREZXB0aDsK
IApAQCAtNTgzLDY0ICs1ODIsNjQgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6cmVxdWVzdENo
aWxkTm9kZXMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkLAogICAgICAgICBz
YW5pdGl6ZWREZXB0aCA9IElOVF9NQVg7CiAgICAgZWxzZSBpZiAoKmRlcHRoID4gMCkKICAgICAg
ICAgc2FuaXRpemVkRGVwdGggPSAqZGVwdGg7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGVycm9yU3Ry
aW5nID0gIlVuZXhwZWN0ZWQgdmFsdWUgYmVsb3cgLTEgZm9yIGdpdmVuIGRlcHRoIl9zOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQorICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVj
dGVkKCJVbmV4cGVjdGVkIHZhbHVlIGJlbG93IC0xIGZvciBnaXZlbiBkZXB0aCJfcyk7CiAKICAg
ICBwdXNoQ2hpbGROb2Rlc1RvRnJvbnRlbmQobm9kZUlkLCBzYW5pdGl6ZWREZXB0aCk7CisKKyAg
ICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpxdWVyeVNlbGVjdG9y
KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJZCwgY29uc3QgU3RyaW5nJiBzZWxl
Y3RvcnMsIGludCogZWxlbWVudElkKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UHJvdG9jb2w6
OkRPTTo6Tm9kZUlkPiBJbnNwZWN0b3JET01BZ2VudDo6cXVlcnlTZWxlY3RvcihQcm90b2NvbDo6
RE9NOjpOb2RlSWQgbm9kZUlkLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yKQogewotICAgICplbGVt
ZW50SWQgPSAwOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAg
IE5vZGUqIG5vZGUgPSBhc3NlcnROb2RlKGVycm9yU3RyaW5nLCBub2RlSWQpOwogICAgIGlmICgh
bm9kZSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICghaXM8Q29udGFpbmVyTm9kZT4oKm5vZGUp
KSB7Ci0gICAgICAgIGFzc2VydEVsZW1lbnQoZXJyb3JTdHJpbmcsIG5vZGVJZCk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmlu
Zyk7CisgICAgaWYgKCFpczxDb250YWluZXJOb2RlPigqbm9kZSkpCisgICAgICAgIHJldHVybiBt
YWtlVW5leHBlY3RlZCgiTm9kZSBmb3IgZ2l2ZW4gbm9kZUlkIGlzIG5vdCBhIGNvbnRhaW5lciBu
b2RlIl9zKTsKIAotICAgIGF1dG8gcXVlcnlSZXN1bHQgPSBkb3duY2FzdDxDb250YWluZXJOb2Rl
Pigqbm9kZSkucXVlcnlTZWxlY3RvcihzZWxlY3RvcnMpOwotICAgIGlmIChxdWVyeVJlc3VsdC5o
YXNFeGNlcHRpb24oKSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJET00gRXJyb3Igd2hpbGUg
cXVlcnlpbmcgd2l0aCBnaXZlbiBzZWxlY3RvcnMiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
CisgICAgYXV0byBxdWVyeVJlc3VsdCA9IGRvd25jYXN0PENvbnRhaW5lck5vZGU+KCpub2RlKS5x
dWVyeVNlbGVjdG9yKHNlbGVjdG9yKTsKKyAgICBpZiAocXVlcnlSZXN1bHQuaGFzRXhjZXB0aW9u
KCkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChJbnNwZWN0b3JET01BZ2VudDo6dG9F
cnJvclN0cmluZyhxdWVyeVJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCkpKTsKIAotICAgIGlmIChh
dXRvKiBlbGVtZW50ID0gcXVlcnlSZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCkpCi0gICAgICAg
ICplbGVtZW50SWQgPSBwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKGVycm9yU3RyaW5nLCBlbGVtZW50
KTsKKyAgICBhdXRvIHJlc3VsdE5vZGVJZCA9IHB1c2hOb2RlUGF0aFRvRnJvbnRlbmQoZXJyb3JT
dHJpbmcsIHF1ZXJ5UmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKKyAgICBpZiAoIXJlc3Vs
dE5vZGVJZCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKKwor
ICAgIHJldHVybiByZXN1bHROb2RlSWQ7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnF1
ZXJ5U2VsZWN0b3JBbGwoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkLCBjb25z
dCBTdHJpbmcmIHNlbGVjdG9ycywgUmVmUHRyPEpTT046OkFycmF5T2Y8aW50Pj4mIHJlc3VsdCkK
K1Byb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpET006
Ok5vZGVJZD4+PiBJbnNwZWN0b3JET01BZ2VudDo6cXVlcnlTZWxlY3RvckFsbChQcm90b2NvbDo6
RE9NOjpOb2RlSWQgbm9kZUlkLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yKQogeworICAgIFByb3Rv
Y29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIE5vZGUqIG5vZGUgPSBhc3NlcnRO
b2RlKGVycm9yU3RyaW5nLCBub2RlSWQpOwogICAgIGlmICghbm9kZSkKLSAgICAgICAgcmV0dXJu
OwotICAgIGlmICghaXM8Q29udGFpbmVyTm9kZT4oKm5vZGUpKSB7Ci0gICAgICAgIGFzc2VydEVs
ZW1lbnQoZXJyb3JTdHJpbmcsIG5vZGVJZCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CisgICAgaWYgKCFpczxDb250
YWluZXJOb2RlPigqbm9kZSkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTm9kZSBm
b3IgZ2l2ZW4gbm9kZUlkIGlzIG5vdCBhIGNvbnRhaW5lciBub2RlIl9zKTsKIAotICAgIGF1dG8g
cXVlcnlSZXN1bHQgPSBkb3duY2FzdDxDb250YWluZXJOb2RlPigqbm9kZSkucXVlcnlTZWxlY3Rv
ckFsbChzZWxlY3RvcnMpOwotICAgIGlmIChxdWVyeVJlc3VsdC5oYXNFeGNlcHRpb24oKSkgewot
ICAgICAgICBlcnJvclN0cmluZyA9ICJET00gRXJyb3Igd2hpbGUgcXVlcnlpbmcgd2l0aCBnaXZl
biBzZWxlY3RvcnMiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgYXV0byBxdWVyeVJl
c3VsdCA9IGRvd25jYXN0PENvbnRhaW5lck5vZGU+KCpub2RlKS5xdWVyeVNlbGVjdG9yQWxsKHNl
bGVjdG9yKTsKKyAgICBpZiAocXVlcnlSZXN1bHQuaGFzRXhjZXB0aW9uKCkpCisgICAgICAgIHJl
dHVybiBtYWtlVW5leHBlY3RlZChJbnNwZWN0b3JET01BZ2VudDo6dG9FcnJvclN0cmluZyhxdWVy
eVJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCkpKTsKIAogICAgIGF1dG8gbm9kZXMgPSBxdWVyeVJl
c3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUoKTsKLSAgICByZXN1bHQgPSBKU09OOjpBcnJheU9mPGlu
dD46OmNyZWF0ZSgpOworCisgICAgYXV0byBub2RlSWRzID0gSlNPTjo6QXJyYXlPZjxQcm90b2Nv
bDo6RE9NOjpOb2RlSWQ+OjpjcmVhdGUoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bm9kZXMtPmxlbmd0aCgpOyArK2kpCi0gICAgICAgIHJlc3VsdC0+YWRkSXRlbShwdXNoTm9kZVBh
dGhUb0Zyb250ZW5kKG5vZGVzLT5pdGVtKGkpKSk7CisgICAgICAgIG5vZGVJZHMtPmFkZEl0ZW0o
cHVzaE5vZGVQYXRoVG9Gcm9udGVuZChub2Rlcy0+aXRlbShpKSkpOworICAgIHJldHVybiBXVEZN
b3ZlKG5vZGVJZHMpOwogfQogCi1pbnQgSW5zcGVjdG9yRE9NQWdlbnQ6OnB1c2hOb2RlUGF0aFRv
RnJvbnRlbmQoTm9kZSogbm9kZVRvUHVzaCkKK1Byb3RvY29sOjpET006Ok5vZGVJZCBJbnNwZWN0
b3JET01BZ2VudDo6cHVzaE5vZGVQYXRoVG9Gcm9udGVuZChOb2RlKiBub2RlVG9QdXNoKQogewot
ICAgIEVycm9yU3RyaW5nIGlnbm9yZWQ7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGlnbm9y
ZWQ7CiAgICAgcmV0dXJuIHB1c2hOb2RlUGF0aFRvRnJvbnRlbmQoaWdub3JlZCwgbm9kZVRvUHVz
aCk7CiB9CiAKLWludCBJbnNwZWN0b3JET01BZ2VudDo6cHVzaE5vZGVQYXRoVG9Gcm9udGVuZChF
cnJvclN0cmluZyBlcnJvclN0cmluZywgTm9kZSogbm9kZVRvUHVzaCkKK1Byb3RvY29sOjpET006
Ok5vZGVJZCBJbnNwZWN0b3JET01BZ2VudDo6cHVzaE5vZGVQYXRoVG9Gcm9udGVuZChQcm90b2Nv
bDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmcsIE5vZGUqIG5vZGVUb1B1c2gpCiB7CiAgICAgQVNT
RVJUKG5vZGVUb1B1c2gpOyAgLy8gSW52YWxpZCBpbnB1dAogCkBAIC02NTYsOCArNjU1LDcgQEAg
aW50IEluc3BlY3RvckRPTUFnZW50OjpwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKEVycm9yU3RyaW5n
IGVycm9yU3RyaW5nLCBOb2RlKiBub2QKICAgICB9CiAKICAgICAvLyBSZXR1cm4gaWQgaW4gY2Fz
ZSB0aGUgbm9kZSBpcyBrbm93bi4KLSAgICBpbnQgcmVzdWx0ID0gbV9kb2N1bWVudE5vZGVUb0lk
TWFwLmdldChub2RlVG9QdXNoKTsKLSAgICBpZiAocmVzdWx0KQorICAgIGlmIChhdXRvIHJlc3Vs
dCA9IG1fZG9jdW1lbnROb2RlVG9JZE1hcC5nZXQobm9kZVRvUHVzaCkpCiAgICAgICAgIHJldHVy
biByZXN1bHQ7CiAKICAgICBOb2RlKiBub2RlID0gbm9kZVRvUHVzaDsKQEAgLTY3MSw3ICs2Njks
NyBAQCBpbnQgSW5zcGVjdG9yRE9NQWdlbnQ6OnB1c2hOb2RlUGF0aFRvRnJvbnRlbmQoRXJyb3JT
dHJpbmcgZXJyb3JTdHJpbmcsIE5vZGUqIG5vZAogICAgICAgICAgICAgYXV0byBuZXdNYXAgPSBt
YWtlVW5pcXVlPE5vZGVUb0lkTWFwPigpOwogICAgICAgICAgICAgZGFuZ2xpbmdNYXAgPSBuZXdN
YXAuZ2V0KCk7CiAgICAgICAgICAgICBtX2RhbmdsaW5nTm9kZVRvSWRNYXBzLmFwcGVuZChuZXdN
YXAucmVsZWFzZSgpKTsKLSAgICAgICAgICAgIGF1dG8gY2hpbGRyZW4gPSBKU09OOjpBcnJheU9m
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZT46OmNyZWF0ZSgpOworICAgICAgICAgICAg
YXV0byBjaGlsZHJlbiA9IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkRPTTo6Tm9kZT46OmNyZWF0
ZSgpOwogICAgICAgICAgICAgY2hpbGRyZW4tPmFkZEl0ZW0oYnVpbGRPYmplY3RGb3JOb2RlKG5v
ZGUsIDAsIGRhbmdsaW5nTWFwKSk7CiAgICAgICAgICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+
c2V0Q2hpbGROb2RlcygwLCBXVEZNb3ZlKGNoaWxkcmVuKSk7CiAgICAgICAgICAgICBicmVhazsK
QEAgLTY4NiwyMjEgKzY4NCwyNTIgQEAgaW50IEluc3BlY3RvckRPTUFnZW50OjpwdXNoTm9kZVBh
dGhUb0Zyb250ZW5kKEVycm9yU3RyaW5nIGVycm9yU3RyaW5nLCBOb2RlKiBub2QKIAogICAgIE5v
ZGVUb0lkTWFwKiBtYXAgPSBkYW5nbGluZ01hcCA/IGRhbmdsaW5nTWFwIDogJm1fZG9jdW1lbnRO
b2RlVG9JZE1hcDsKICAgICBmb3IgKGludCBpID0gcGF0aC5zaXplKCkgLSAxOyBpID49IDA7IC0t
aSkgewotICAgICAgICBpbnQgbm9kZUlkID0gbWFwLT5nZXQocGF0aC5hdChpKSk7CisgICAgICAg
IGF1dG8gbm9kZUlkID0gbWFwLT5nZXQocGF0aC5hdChpKSk7CiAgICAgICAgIEFTU0VSVChub2Rl
SWQpOwogICAgICAgICBwdXNoQ2hpbGROb2Rlc1RvRnJvbnRlbmQobm9kZUlkKTsKICAgICB9CiAg
ICAgcmV0dXJuIG1hcC0+Z2V0KG5vZGVUb1B1c2gpOwogfQogCi1pbnQgSW5zcGVjdG9yRE9NQWdl
bnQ6OmJvdW5kTm9kZUlkKGNvbnN0IE5vZGUqIG5vZGUpCitQcm90b2NvbDo6RE9NOjpOb2RlSWQg
SW5zcGVjdG9yRE9NQWdlbnQ6OmJvdW5kTm9kZUlkKGNvbnN0IE5vZGUqIG5vZGUpCiB7CiAgICAg
cmV0dXJuIG1fZG9jdW1lbnROb2RlVG9JZE1hcC5nZXQoY29uc3RfY2FzdDxOb2RlKj4obm9kZSkp
OwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpzZXRBdHRyaWJ1dGVWYWx1ZShFcnJvclN0
cmluZyYgZXJyb3JTdHJpbmcsIGludCBlbGVtZW50SWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29u
c3QgU3RyaW5nJiB2YWx1ZSkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3Rv
ckRPTUFnZW50OjpzZXRBdHRyaWJ1dGVWYWx1ZShQcm90b2NvbDo6RE9NOjpOb2RlSWQgbm9kZUlk
LCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7Ci0gICAgRWxlbWVu
dCogZWxlbWVudCA9IGFzc2VydEVkaXRhYmxlRWxlbWVudChlcnJvclN0cmluZywgZWxlbWVudElk
KTsKLSAgICBpZiAoIWVsZW1lbnQpCi0gICAgICAgIHJldHVybjsKKyAgICBQcm90b2NvbDo6RXJy
b3JTdHJpbmcgZXJyb3JTdHJpbmc7CiAKLSAgICBtX2RvbUVkaXRvci0+c2V0QXR0cmlidXRlKCpl
bGVtZW50LCBuYW1lLCB2YWx1ZSwgZXJyb3JTdHJpbmcpOworICAgIEVsZW1lbnQqIGVsZW1lbnQg
PSBhc3NlcnRFZGl0YWJsZUVsZW1lbnQoZXJyb3JTdHJpbmcsIG5vZGVJZCk7CisgICAgaWYgKCFl
bGVtZW50KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOworCisg
ICAgaWYgKCFtX2RvbUVkaXRvci0+c2V0QXR0cmlidXRlKCplbGVtZW50LCBuYW1lLCB2YWx1ZSwg
ZXJyb3JTdHJpbmcpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcp
OworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c2V0QXR0
cmlidXRlc0FzVGV4dChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBlbGVtZW50SWQsIGNv
bnN0IFN0cmluZyYgdGV4dCwgY29uc3QgU3RyaW5nKiBuYW1lKQorUHJvdG9jb2w6OkVycm9yU3Ry
aW5nT3I8dm9pZD4gSW5zcGVjdG9yRE9NQWdlbnQ6OnNldEF0dHJpYnV0ZXNBc1RleHQoUHJvdG9j
b2w6OkRPTTo6Tm9kZUlkIG5vZGVJZCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBTdHJpbmcm
IG5hbWUpCiB7Ci0gICAgRWxlbWVudCogZWxlbWVudCA9IGFzc2VydEVkaXRhYmxlRWxlbWVudChl
cnJvclN0cmluZywgZWxlbWVudElkKTsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JT
dHJpbmc7CisKKyAgICBFbGVtZW50KiBlbGVtZW50ID0gYXNzZXJ0RWRpdGFibGVFbGVtZW50KGVy
cm9yU3RyaW5nLCBub2RlSWQpOwogICAgIGlmICghZWxlbWVudCkKLSAgICAgICAgcmV0dXJuOwor
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCiAgICAgYXV0byBw
YXJzZWRFbGVtZW50ID0gY3JlYXRlSFRNTEVsZW1lbnQoZWxlbWVudC0+ZG9jdW1lbnQoKSwgc3Bh
blRhZyk7CiAgICAgYXV0byByZXN1bHQgPSBwYXJzZWRFbGVtZW50LmdldCgpLnNldElubmVySFRN
TCgiPHNwYW4gIiArIHRleHQgKyAiPjwvc3Bhbj4iKTsKLSAgICBpZiAocmVzdWx0Lmhhc0V4Y2Vw
dGlvbigpKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gdG9FcnJvclN0cmluZyhyZXN1bHQucmVs
ZWFzZUV4Y2VwdGlvbigpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAocmVzdWx0
Lmhhc0V4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoSW5zcGVjdG9y
RE9NQWdlbnQ6OnRvRXJyb3JTdHJpbmcocmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKSkpOwogCiAg
ICAgTm9kZSogY2hpbGQgPSBwYXJzZWRFbGVtZW50LT5maXJzdENoaWxkKCk7Ci0gICAgaWYgKCFj
aGlsZCkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJDb3VsZCBub3QgcGFyc2UgZ2l2ZW4gdGV4
dCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoIWNoaWxkKQorICAgICAgICBy
ZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkNvdWxkIG5vdCBwYXJzZSBnaXZlbiB0ZXh0Il9zKTsKIAog
ICAgIEVsZW1lbnQqIGNoaWxkRWxlbWVudCA9IGRvd25jYXN0PEVsZW1lbnQ+KGNoaWxkKTsKLSAg
ICBpZiAoIWNoaWxkRWxlbWVudC0+aGFzQXR0cmlidXRlcygpICYmIG5hbWUpIHsKLSAgICAgICAg
bV9kb21FZGl0b3ItPnJlbW92ZUF0dHJpYnV0ZSgqZWxlbWVudCwgKm5hbWUsIGVycm9yU3RyaW5n
KTsKLSAgICAgICAgcmV0dXJuOworICAgIGlmICghY2hpbGRFbGVtZW50LT5oYXNBdHRyaWJ1dGVz
KCkgJiYgISFuYW1lKSB7CisgICAgICAgIGlmICghbV9kb21FZGl0b3ItPnJlbW92ZUF0dHJpYnV0
ZSgqZWxlbWVudCwgbmFtZSwgZXJyb3JTdHJpbmcpKQorICAgICAgICAgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKICAg
ICBib29sIGZvdW5kT3JpZ2luYWxBdHRyaWJ1dGUgPSBmYWxzZTsKICAgICBmb3IgKGNvbnN0IEF0
dHJpYnV0ZSYgYXR0cmlidXRlIDogY2hpbGRFbGVtZW50LT5hdHRyaWJ1dGVzSXRlcmF0b3IoKSkg
ewogICAgICAgICAvLyBBZGQgYXR0cmlidXRlIHBhaXIKLSAgICAgICAgZm91bmRPcmlnaW5hbEF0
dHJpYnV0ZSA9IGZvdW5kT3JpZ2luYWxBdHRyaWJ1dGUgfHwgKG5hbWUgJiYgYXR0cmlidXRlLm5h
bWUoKS50b1N0cmluZygpID09ICpuYW1lKTsKKyAgICAgICAgZm91bmRPcmlnaW5hbEF0dHJpYnV0
ZSA9IGZvdW5kT3JpZ2luYWxBdHRyaWJ1dGUgfHwgYXR0cmlidXRlLm5hbWUoKS50b1N0cmluZygp
ID09IG5hbWU7CiAgICAgICAgIGlmICghbV9kb21FZGl0b3ItPnNldEF0dHJpYnV0ZSgqZWxlbWVu
dCwgYXR0cmlidXRlLm5hbWUoKS50b1N0cmluZygpLCBhdHRyaWJ1dGUudmFsdWUoKSwgZXJyb3JT
dHJpbmcpKQotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4
cGVjdGVkKGVycm9yU3RyaW5nKTsKICAgICB9CiAKLSAgICBpZiAoIWZvdW5kT3JpZ2luYWxBdHRy
aWJ1dGUgJiYgbmFtZSAmJiAhbmFtZS0+c3RyaXBXaGl0ZVNwYWNlKCkuaXNFbXB0eSgpKQotICAg
ICAgICBtX2RvbUVkaXRvci0+cmVtb3ZlQXR0cmlidXRlKCplbGVtZW50LCAqbmFtZSwgZXJyb3JT
dHJpbmcpOworICAgIGlmICghZm91bmRPcmlnaW5hbEF0dHJpYnV0ZSAmJiAhbmFtZS5zdHJpcFdo
aXRlU3BhY2UoKS5pc0VtcHR5KCkpIHsKKyAgICAgICAgaWYgKCFtX2RvbUVkaXRvci0+cmVtb3Zl
QXR0cmlidXRlKCplbGVtZW50LCBuYW1lLCBlcnJvclN0cmluZykpCisgICAgICAgICAgICByZXR1
cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOworICAgIH0KKworICAgIHJldHVybiB7IH07
CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnJlbW92ZUF0dHJpYnV0ZShFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcsIGludCBlbGVtZW50SWQsIGNvbnN0IFN0cmluZyYgbmFtZSkKK1Byb3Rv
Y29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRPTUFnZW50OjpyZW1vdmVBdHRyaWJ1
dGUoUHJvdG9jb2w6OkRPTTo6Tm9kZUlkIG5vZGVJZCwgY29uc3QgU3RyaW5nJiBuYW1lKQogewot
ICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBhc3NlcnRFZGl0YWJsZUVsZW1lbnQoZXJyb3JTdHJpbmcs
IGVsZW1lbnRJZCk7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCisg
ICAgRWxlbWVudCogZWxlbWVudCA9IGFzc2VydEVkaXRhYmxlRWxlbWVudChlcnJvclN0cmluZywg
bm9kZUlkKTsKICAgICBpZiAoIWVsZW1lbnQpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0
dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAotICAgIG1fZG9tRWRpdG9yLT5yZW1v
dmVBdHRyaWJ1dGUoKmVsZW1lbnQsIG5hbWUsIGVycm9yU3RyaW5nKTsKKyAgICBpZiAoIW1fZG9t
RWRpdG9yLT5yZW1vdmVBdHRyaWJ1dGUoKmVsZW1lbnQsIG5hbWUsIGVycm9yU3RyaW5nKSkKKyAg
ICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKKworICAgIHJldHVybiB7
IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnJlbW92ZU5vZGUoRXJyb3JTdHJpbmcm
IGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4g
SW5zcGVjdG9yRE9NQWdlbnQ6OnJlbW92ZU5vZGUoUHJvdG9jb2w6OkRPTTo6Tm9kZUlkIG5vZGVJ
ZCkKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBOb2Rl
KiBub2RlID0gYXNzZXJ0RWRpdGFibGVOb2RlKGVycm9yU3RyaW5nLCBub2RlSWQpOwogICAgIGlm
ICghbm9kZSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQo
ZXJyb3JTdHJpbmcpOwogCiAgICAgQ29udGFpbmVyTm9kZSogcGFyZW50Tm9kZSA9IG5vZGUtPnBh
cmVudE5vZGUoKTsKLSAgICBpZiAoIXBhcmVudE5vZGUpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcg
PSAiQ2Fubm90IHJlbW92ZSBkZXRhY2hlZCBub2RlIl9zOwotICAgICAgICByZXR1cm47Ci0gICAg
fQorICAgIGlmICghcGFyZW50Tm9kZSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJD
YW5ub3QgcmVtb3ZlIGRldGFjaGVkIG5vZGUiX3MpOwogCi0gICAgbV9kb21FZGl0b3ItPnJlbW92
ZUNoaWxkKCpwYXJlbnROb2RlLCAqbm9kZSwgZXJyb3JTdHJpbmcpOworICAgIGlmICghbV9kb21F
ZGl0b3ItPnJlbW92ZUNoaWxkKCpwYXJlbnROb2RlLCAqbm9kZSwgZXJyb3JTdHJpbmcpKQorICAg
ICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOworCisgICAgcmV0dXJuIHsg
fTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c2V0Tm9kZU5hbWUoRXJyb3JTdHJpbmcm
IGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkLCBjb25zdCBTdHJpbmcmIHRhZ05hbWUsIGludCogbmV3
SWQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxQcm90b2NvbDo6RE9NOjpOb2RlSWQ+IEluc3Bl
Y3RvckRPTUFnZW50OjpzZXROb2RlTmFtZShQcm90b2NvbDo6RE9NOjpOb2RlSWQgbm9kZUlkLCBj
b25zdCBTdHJpbmcmIHRhZ05hbWUpCiB7Ci0gICAgKm5ld0lkID0gMDsKKyAgICBQcm90b2NvbDo6
RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CiAKLSAgICBSZWZQdHI8Tm9kZT4gb2xkTm9kZSA9IG5v
ZGVGb3JJZChub2RlSWQpOwotICAgIGlmICghaXM8RWxlbWVudD4ob2xkTm9kZSkpCi0gICAgICAg
IHJldHVybjsKKyAgICBhdXRvIG9sZE5vZGUgPSBhc3NlcnRFbGVtZW50KGVycm9yU3RyaW5nLCBu
b2RlSWQpOworICAgIGlmICghb2xkTm9kZSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVk
KGVycm9yU3RyaW5nKTsKIAogICAgIGF1dG8gY3JlYXRlRWxlbWVudFJlc3VsdCA9IG9sZE5vZGUt
PmRvY3VtZW50KCkuY3JlYXRlRWxlbWVudEZvckJpbmRpbmdzKHRhZ05hbWUpOwogICAgIGlmIChj
cmVhdGVFbGVtZW50UmVzdWx0Lmhhc0V4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm47CisgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChJbnNwZWN0b3JET01BZ2VudDo6dG9FcnJvclN0cmlu
ZyhjcmVhdGVFbGVtZW50UmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKSkpOworCiAgICAgYXV0byBu
ZXdFbGVtZW50ID0gY3JlYXRlRWxlbWVudFJlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUoKTsKIAog
ICAgIC8vIENvcHkgb3ZlciB0aGUgb3JpZ2luYWwgbm9kZSdzIGF0dHJpYnV0ZXMuCi0gICAgbmV3
RWxlbWVudC0+Y2xvbmVBdHRyaWJ1dGVzRnJvbUVsZW1lbnQoZG93bmNhc3Q8RWxlbWVudD4oKm9s
ZE5vZGUpKTsKKyAgICBuZXdFbGVtZW50LT5jbG9uZUF0dHJpYnV0ZXNGcm9tRWxlbWVudCgqb2xk
Tm9kZSk7CiAKICAgICAvLyBDb3B5IG92ZXIgdGhlIG9yaWdpbmFsIG5vZGUncyBjaGlsZHJlbi4K
ICAgICBSZWZQdHI8Tm9kZT4gY2hpbGQ7CiAgICAgd2hpbGUgKChjaGlsZCA9IG9sZE5vZGUtPmZp
cnN0Q2hpbGQoKSkpIHsKICAgICAgICAgaWYgKCFtX2RvbUVkaXRvci0+aW5zZXJ0QmVmb3JlKG5l
d0VsZW1lbnQsICpjaGlsZCwgMCwgZXJyb3JTdHJpbmcpKQotICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKICAgICB9CiAK
ICAgICAvLyBSZXBsYWNlIHRoZSBvbGQgbm9kZSB3aXRoIHRoZSBuZXcgbm9kZQogICAgIFJlZlB0
cjxDb250YWluZXJOb2RlPiBwYXJlbnQgPSBvbGROb2RlLT5wYXJlbnROb2RlKCk7CiAgICAgaWYg
KCFtX2RvbUVkaXRvci0+aW5zZXJ0QmVmb3JlKCpwYXJlbnQsIG5ld0VsZW1lbnQuY29weVJlZigp
LCBvbGROb2RlLT5uZXh0U2libGluZygpLCBlcnJvclN0cmluZykpCi0gICAgICAgIHJldHVybjsK
KyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKICAgICBpZiAoIW1f
ZG9tRWRpdG9yLT5yZW1vdmVDaGlsZCgqcGFyZW50LCAqb2xkTm9kZSwgZXJyb3JTdHJpbmcpKQot
ICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmlu
Zyk7CiAKLSAgICAqbmV3SWQgPSBwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKGVycm9yU3RyaW5nLCBu
ZXdFbGVtZW50LnB0cigpKTsKKyAgICBhdXRvIHJlc3VsdE5vZGVJZCA9IHB1c2hOb2RlUGF0aFRv
RnJvbnRlbmQoZXJyb3JTdHJpbmcsIG5ld0VsZW1lbnQucHRyKCkpOwogICAgIGlmIChtX2NoaWxk
cmVuUmVxdWVzdGVkLmNvbnRhaW5zKG5vZGVJZCkpCi0gICAgICAgIHB1c2hDaGlsZE5vZGVzVG9G
cm9udGVuZCgqbmV3SWQpOworICAgICAgICBwdXNoQ2hpbGROb2Rlc1RvRnJvbnRlbmQocmVzdWx0
Tm9kZUlkKTsKKworICAgIHJldHVybiByZXN1bHROb2RlSWQ7CiB9CiAKLXZvaWQgSW5zcGVjdG9y
RE9NQWdlbnQ6OmdldE91dGVySFRNTChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2Rl
SWQsIFdURjo6U3RyaW5nKiBvdXRlckhUTUwpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxTdHJp
bmc+IEluc3BlY3RvckRPTUFnZW50OjpnZXRPdXRlckhUTUwoUHJvdG9jb2w6OkRPTTo6Tm9kZUlk
IG5vZGVJZCkKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAg
ICBOb2RlKiBub2RlID0gYXNzZXJ0Tm9kZShlcnJvclN0cmluZywgbm9kZUlkKTsKICAgICBpZiAo
IW5vZGUpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVy
cm9yU3RyaW5nKTsKIAotICAgICpvdXRlckhUTUwgPSBzZXJpYWxpemVGcmFnbWVudCgqbm9kZSwg
U2VyaWFsaXplZE5vZGVzOjpTdWJ0cmVlSW5jbHVkaW5nTm9kZSk7CisgICAgcmV0dXJuIHNlcmlh
bGl6ZUZyYWdtZW50KCpub2RlLCBTZXJpYWxpemVkTm9kZXM6OlN1YnRyZWVJbmNsdWRpbmdOb2Rl
KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c2V0T3V0ZXJIVE1MKEVycm9yU3RyaW5n
JiBlcnJvclN0cmluZywgaW50IG5vZGVJZCwgY29uc3QgU3RyaW5nJiBvdXRlckhUTUwpCitQcm90
b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JET01BZ2VudDo6c2V0T3V0ZXJIVE1M
KFByb3RvY29sOjpET006Ok5vZGVJZCBub2RlSWQsIGNvbnN0IFN0cmluZyYgb3V0ZXJIVE1MKQog
eworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIGlmICghbm9k
ZUlkKSB7CiAgICAgICAgIERPTVBhdGNoU3VwcG9ydCB7ICptX2RvbUVkaXRvciwgKm1fZG9jdW1l
bnQgfS5wYXRjaERvY3VtZW50KG91dGVySFRNTCk7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAg
cmV0dXJuIHsgfTsKICAgICB9CiAKICAgICBOb2RlKiBub2RlID0gYXNzZXJ0RWRpdGFibGVOb2Rl
KGVycm9yU3RyaW5nLCBub2RlSWQpOwogICAgIGlmICghbm9kZSkKLSAgICAgICAgcmV0dXJuOwor
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCiAgICAgRG9jdW1l
bnQmIGRvY3VtZW50ID0gbm9kZS0+ZG9jdW1lbnQoKTsKLSAgICBpZiAoIWRvY3VtZW50LmlzSFRN
TERvY3VtZW50KCkgJiYgIWRvY3VtZW50LmlzWE1MRG9jdW1lbnQoKSkgewotICAgICAgICBlcnJv
clN0cmluZyA9ICJEb2N1bWVudCBvZiBub2RlIGZvciBnaXZlbiBub2RlSWQgaXMgbm90IEhUTUwv
WE1MIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghZG9jdW1lbnQuaXNIVE1M
RG9jdW1lbnQoKSAmJiAhZG9jdW1lbnQuaXNYTUxEb2N1bWVudCgpKQorICAgICAgICByZXR1cm4g
bWFrZVVuZXhwZWN0ZWQoIkRvY3VtZW50IG9mIG5vZGUgZm9yIGdpdmVuIG5vZGVJZCBpcyBub3Qg
SFRNTC9YTUwiX3MpOwogCiAgICAgTm9kZSogbmV3Tm9kZSA9IG51bGxwdHI7CiAgICAgaWYgKCFt
X2RvbUVkaXRvci0+c2V0T3V0ZXJIVE1MKCpub2RlLCBvdXRlckhUTUwsIG5ld05vZGUsIGVycm9y
U3RyaW5nKSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQo
ZXJyb3JTdHJpbmcpOwogCiAgICAgaWYgKCFuZXdOb2RlKSB7CiAgICAgICAgIC8vIFRoZSBvbmx5
IGNoaWxkIG5vZGUgaGFzIGJlZW4gZGVsZXRlZC4KLSAgICAgICAgcmV0dXJuOworICAgICAgICBy
ZXR1cm4geyB9OwogICAgIH0KIAotICAgIGludCBuZXdJZCA9IHB1c2hOb2RlUGF0aFRvRnJvbnRl
bmQoZXJyb3JTdHJpbmcsIG5ld05vZGUpOworICAgIGF1dG8gbmV3SWQgPSBwdXNoTm9kZVBhdGhU
b0Zyb250ZW5kKGVycm9yU3RyaW5nLCBuZXdOb2RlKTsKIAogICAgIGJvb2wgY2hpbGRyZW5SZXF1
ZXN0ZWQgPSBtX2NoaWxkcmVuUmVxdWVzdGVkLmNvbnRhaW5zKG5vZGVJZCk7CiAgICAgaWYgKGNo
aWxkcmVuUmVxdWVzdGVkKQogICAgICAgICBwdXNoQ2hpbGROb2Rlc1RvRnJvbnRlbmQobmV3SWQp
OworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6aW5zZXJ0
QWRqYWNlbnRIVE1MKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJZCwgY29uc3Qg
U3RyaW5nJiBwb3NpdGlvbiwgY29uc3QgU3RyaW5nJiBodG1sKQorUHJvdG9jb2w6OkVycm9yU3Ry
aW5nT3I8dm9pZD4gSW5zcGVjdG9yRE9NQWdlbnQ6Omluc2VydEFkamFjZW50SFRNTChQcm90b2Nv
bDo6RE9NOjpOb2RlSWQgbm9kZUlkLCBjb25zdCBTdHJpbmcmIHBvc2l0aW9uLCBjb25zdCBTdHJp
bmcmIGh0bWwpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAg
ICAgTm9kZSogbm9kZSA9IGFzc2VydEVkaXRhYmxlTm9kZShlcnJvclN0cmluZywgbm9kZUlkKTsK
ICAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4
cGVjdGVkKGVycm9yU3RyaW5nKTsKIAotICAgIGlmICghaXM8RWxlbWVudD4obm9kZSkpIHsKLSAg
ICAgICAgZXJyb3JTdHJpbmcgPSAiTm9kZSBmb3IgZ2l2ZW4gbm9kZUlkIGlzIG5vdCBhbiBlbGVt
ZW50Il9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghaXM8RWxlbWVudD4obm9k
ZSkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTm9kZSBmb3IgZ2l2ZW4gbm9kZUlk
IGlzIG5vdCBhbiBlbGVtZW50Il9zKTsKIAotICAgIG1fZG9tRWRpdG9yLT5pbnNlcnRBZGphY2Vu
dEhUTUwoZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUpLCBwb3NpdGlvbiwgaHRtbCwgZXJyb3JTdHJp
bmcpOworICAgIGlmICghbV9kb21FZGl0b3ItPmluc2VydEFkamFjZW50SFRNTChkb3duY2FzdDxF
bGVtZW50Pigqbm9kZSksIHBvc2l0aW9uLCBodG1sLCBlcnJvclN0cmluZykpCisgICAgICAgIHJl
dHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CisKKyAgICByZXR1cm4geyB9OwogfQog
Ci12b2lkIEluc3BlY3RvckRPTUFnZW50OjpzZXROb2RlVmFsdWUoRXJyb3JTdHJpbmcmIGVycm9y
U3RyaW5nLCBpbnQgbm9kZUlkLCBjb25zdCBTdHJpbmcmIHZhbHVlKQorUHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yRE9NQWdlbnQ6OnNldE5vZGVWYWx1ZShQcm90b2NvbDo6
RE9NOjpOb2RlSWQgbm9kZUlkLCBjb25zdCBTdHJpbmcmIHZhbHVlKQogeworICAgIFByb3RvY29s
OjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIE5vZGUqIG5vZGUgPSBhc3NlcnRFZGl0
YWJsZU5vZGUoZXJyb3JTdHJpbmcsIG5vZGVJZCk7CiAgICAgaWYgKCFub2RlKQotICAgICAgICBy
ZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKLSAg
ICBpZiAoIWlzPFRleHQ+KCpub2RlKSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJOb2RlIGZv
ciBnaXZlbiBub2RlSWQgaXMgbm90IHRleHQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Cisg
ICAgaWYgKCFpczxUZXh0Pigqbm9kZSkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgi
Tm9kZSBmb3IgZ2l2ZW4gbm9kZUlkIGlzIG5vdCB0ZXh0Il9zKTsKIAotICAgIG1fZG9tRWRpdG9y
LT5yZXBsYWNlV2hvbGVUZXh0KGRvd25jYXN0PFRleHQ+KCpub2RlKSwgdmFsdWUsIGVycm9yU3Ry
aW5nKTsKKyAgICBpZiAoIW1fZG9tRWRpdG9yLT5yZXBsYWNlV2hvbGVUZXh0KGRvd25jYXN0PFRl
eHQ+KCpub2RlKSwgdmFsdWUsIGVycm9yU3RyaW5nKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4
cGVjdGVkKGVycm9yU3RyaW5nKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVj
dG9yRE9NQWdlbnQ6OmdldFN1cHBvcnRlZEV2ZW50TmFtZXMoRXJyb3JTdHJpbmcmLCBSZWZQdHI8
SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiYgZXZlbnROYW1lcykKK1Byb3RvY29sOjpFcnJvclN0cmlu
Z09yPFJlZjxKU09OOjpBcnJheU9mPFN0cmluZz4+PiBJbnNwZWN0b3JET01BZ2VudDo6Z2V0U3Vw
cG9ydGVkRXZlbnROYW1lcygpCiB7Ci0gICAgZXZlbnROYW1lcyA9IEpTT046OkFycmF5T2Y8U3Ry
aW5nPjo6Y3JlYXRlKCk7CisgICAgYXV0byBldmVudE5hbWVzID0gSlNPTjo6QXJyYXlPZjxTdHJp
bmc+OjpjcmVhdGUoKTsKIAogI2RlZmluZSBET01fRVZFTlRfTkFNRVNfQUREKG5hbWUpIGV2ZW50
TmFtZXMtPmFkZEl0ZW0oI25hbWUpOwogICAgIERPTV9FVkVOVF9OQU1FU19GT1JfRUFDSChET01f
RVZFTlRfTkFNRVNfQUREKQogI3VuZGVmIERPTV9FVkVOVF9OQU1FU19BREQKKworICAgIHJldHVy
biBXVEZNb3ZlKGV2ZW50TmFtZXMpOwogfQogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5B
VEVfRElTUEFUQ0hFUlMpCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpnZXREYXRhQmluZGluZ3NG
b3JOb2RlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IC8qIG5vZGVJZCAqLywgUmVmUHRy
PEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpEYXRhQmluZGluZz4+JiAv
KiBkYXRhQmluZGluZ3MgKi8pCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SlNPTjo6QXJy
YXlPZjxQcm90b2NvbDo6RE9NOjpEYXRhQmluZGluZz4+PiBJbnNwZWN0b3JET01BZ2VudDo6Z2V0
RGF0YUJpbmRpbmdzRm9yTm9kZShQcm90b2NvbDo6RE9NOjpOb2RlSWQpCiB7Ci0gICAgZXJyb3JT
dHJpbmcgPSAiTm90IHN1cHBvcnRlZCJfczsKKyAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk5v
dCBzdXBwb3J0ZWQiX3MpOwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpnZXRBc3NvY2lh
dGVkRGF0YUZvck5vZGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgLyogbm9kZUlkICov
LCBPcHRpb25hbDxTdHJpbmc+JiAvKiBhc3NvY2lhdGVkRGF0YSAqLykKK1Byb3RvY29sOjpFcnJv
clN0cmluZ09yPFN0cmluZz4gSW5zcGVjdG9yRE9NQWdlbnQ6OmdldEFzc29jaWF0ZWREYXRhRm9y
Tm9kZShQcm90b2NvbDo6RE9NOjpOb2RlSWQpCiB7Ci0gICAgZXJyb3JTdHJpbmcgPSAiTm90IHN1
cHBvcnRlZCJfczsKKyAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk5vdCBzdXBwb3J0ZWQiX3Mp
OwogfQogI2VuZGlmCiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmdldEV2ZW50TGlzdGVuZXJz
Rm9yTm9kZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQsIFJlZlB0cjxKU09O
OjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6RXZlbnRMaXN0ZW5lcj4+JiBsaXN0
ZW5lcnNBcnJheSkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPFBy
b3RvY29sOjpET006OkV2ZW50TGlzdGVuZXI+Pj4gSW5zcGVjdG9yRE9NQWdlbnQ6OmdldEV2ZW50
TGlzdGVuZXJzRm9yTm9kZShQcm90b2NvbDo6RE9NOjpOb2RlSWQgbm9kZUlkKQogewotICAgIGxp
c3RlbmVyc0FycmF5ID0gSlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkV2
ZW50TGlzdGVuZXI+OjpjcmVhdGUoKTsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JT
dHJpbmc7CiAKICAgICBhdXRvKiBub2RlID0gYXNzZXJ0Tm9kZShlcnJvclN0cmluZywgbm9kZUlk
KTsKICAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgIFZlY3RvcjxSZWZQdHI8RXZlbnRUYXJnZXQ+
PiBhbmNlc3RvcnM7CiAgICAgYW5jZXN0b3JzLmFwcGVuZChub2RlKTsKQEAgLTkyOSw4ICs5NTgs
MTAgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Z2V0RXZlbnRMaXN0ZW5lcnNGb3JOb2RlKEVy
cm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG4KICAgICAgICAgfQogICAgIH0KIAorICAgIGF1
dG8gbGlzdGVuZXJzID0gSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6RE9NOjpFdmVudExpc3RlbmVy
Pjo6Y3JlYXRlKCk7CisKICAgICBhdXRvIGFkZExpc3RlbmVyID0gWyZdIChSZWdpc3RlcmVkRXZl
bnRMaXN0ZW5lciYgbGlzdGVuZXIsIGNvbnN0IEV2ZW50TGlzdGVuZXJJbmZvJiBpbmZvKSB7Ci0g
ICAgICAgIGludCBpZGVudGlmaWVyID0gMDsKKyAgICAgICAgUHJvdG9jb2w6OkRPTTo6RXZlbnRM
aXN0ZW5lcklkIGlkZW50aWZpZXIgPSAwOwogICAgICAgICBib29sIGRpc2FibGVkID0gZmFsc2U7
CiAgICAgICAgIFJlZlB0cjxKU0M6OkJyZWFrcG9pbnQ+IGJyZWFrcG9pbnQ7CiAKQEAgLTk1Myw3
ICs5ODQsNyBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpnZXRFdmVudExpc3RlbmVyc0Zvck5v
ZGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgbgogICAgICAgICAgICAgbV9ldmVudExp
c3RlbmVyRW50cmllcy5hZGQoaWRlbnRpZmllciwgaW5zcGVjdG9yRXZlbnRMaXN0ZW5lcik7CiAg
ICAgICAgIH0KIAotICAgICAgICBsaXN0ZW5lcnNBcnJheS0+YWRkSXRlbShidWlsZE9iamVjdEZv
ckV2ZW50TGlzdGVuZXIobGlzdGVuZXIsIGlkZW50aWZpZXIsICppbmZvLmV2ZW50VGFyZ2V0LCBp
bmZvLmV2ZW50VHlwZSwgZGlzYWJsZWQsIGJyZWFrcG9pbnQpKTsKKyAgICAgICAgbGlzdGVuZXJz
LT5hZGRJdGVtKGJ1aWxkT2JqZWN0Rm9yRXZlbnRMaXN0ZW5lcihsaXN0ZW5lciwgaWRlbnRpZmll
ciwgKmluZm8uZXZlbnRUYXJnZXQsIGluZm8uZXZlbnRUeXBlLCBkaXNhYmxlZCwgYnJlYWtwb2lu
dCkpOwogICAgIH07CiAKICAgICAvLyBHZXQgQ2FwdHVyaW5nIExpc3RlbmVycyAoaW4gdGhpcyBv
cmRlcikKQEAgLTk3Niw4MCArMTAwNyw4MSBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpnZXRF
dmVudExpc3RlbmVyc0Zvck5vZGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgbgogCiAg
ICAgaWYgKG1faW5zcGVjdGVkTm9kZSA9PSBub2RlKQogICAgICAgICBtX3N1cHByZXNzRXZlbnRM
aXN0ZW5lckNoYW5nZWRFdmVudCA9IGZhbHNlOworCisgICAgcmV0dXJuIFdURk1vdmUobGlzdGVu
ZXJzKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c2V0RXZlbnRMaXN0ZW5lckRpc2Fi
bGVkKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IGV2ZW50TGlzdGVuZXJJZCwgYm9vbCBk
aXNhYmxlZCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRPTUFnZW50
OjpzZXRFdmVudExpc3RlbmVyRGlzYWJsZWQoUHJvdG9jb2w6OkRPTTo6RXZlbnRMaXN0ZW5lcklk
IGV2ZW50TGlzdGVuZXJJZCwgYm9vbCBkaXNhYmxlZCkKIHsKICAgICBhdXRvIGl0ID0gbV9ldmVu
dExpc3RlbmVyRW50cmllcy5maW5kKGV2ZW50TGlzdGVuZXJJZCk7Ci0gICAgaWYgKGl0ID09IG1f
ZXZlbnRMaXN0ZW5lckVudHJpZXMuZW5kKCkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWlz
c2luZyBldmVudCBsaXN0ZW5lciBmb3IgZ2l2ZW4gZXZlbnRMaXN0ZW5lcklkIl9zOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQorICAgIGlmIChpdCA9PSBtX2V2ZW50TGlzdGVuZXJFbnRyaWVzLmVu
ZCgpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk1pc3NpbmcgZXZlbnQgbGlzdGVu
ZXIgZm9yIGdpdmVuIGV2ZW50TGlzdGVuZXJJZCJfcyk7CiAKICAgICBpdC0+dmFsdWUuZGlzYWJs
ZWQgPSBkaXNhYmxlZDsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9N
QWdlbnQ6OnNldEJyZWFrcG9pbnRGb3JFdmVudExpc3RlbmVyKEVycm9yU3RyaW5nJiBlcnJvclN0
cmluZywgaW50IGV2ZW50TGlzdGVuZXJJZCwgY29uc3QgSlNPTjo6T2JqZWN0KiBvcHRpb25zUGF5
bG9hZCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRPTUFnZW50Ojpz
ZXRCcmVha3BvaW50Rm9yRXZlbnRMaXN0ZW5lcihQcm90b2NvbDo6RE9NOjpFdmVudExpc3RlbmVy
SWQgZXZlbnRMaXN0ZW5lcklkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIG9wdGlvbnMpCiB7Cisg
ICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAgICAgYXV0byBpdCA9IG1f
ZXZlbnRMaXN0ZW5lckVudHJpZXMuZmluZChldmVudExpc3RlbmVySWQpOwotICAgIGlmIChpdCA9
PSBtX2V2ZW50TGlzdGVuZXJFbnRyaWVzLmVuZCgpKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0g
Ik1pc3NpbmcgZXZlbnQgbGlzdGVuZXIgZm9yIGdpdmVuIGV2ZW50TGlzdGVuZXJJZCJfczsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoaXQgPT0gbV9ldmVudExpc3RlbmVyRW50cmll
cy5lbmQoKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJNaXNzaW5nIGV2ZW50IGxp
c3RlbmVyIGZvciBnaXZlbiBldmVudExpc3RlbmVySWQiX3MpOwogCi0gICAgaWYgKGl0LT52YWx1
ZS5icmVha3BvaW50KSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIkJyZWFrcG9pbnQgZm9yIGdp
dmVuIGV2ZW50TGlzdGVuZXJJZCBhbHJlYWR5IGV4aXN0cyJfczsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KKyAgICBpZiAoaXQtPnZhbHVlLmJyZWFrcG9pbnQpCisgICAgICAgIHJldHVybiBtYWtl
VW5leHBlY3RlZCgiQnJlYWtwb2ludCBmb3IgZ2l2ZW4gZXZlbnRMaXN0ZW5lcklkIGFscmVhZHkg
ZXhpc3RzIl9zKTsKIAotICAgIGl0LT52YWx1ZS5icmVha3BvaW50ID0gSW5zcGVjdG9yRGVidWdn
ZXJBZ2VudDo6ZGVidWdnZXJCcmVha3BvaW50RnJvbVBheWxvYWQoZXJyb3JTdHJpbmcsIG9wdGlv
bnNQYXlsb2FkKTsKKyAgICBpdC0+dmFsdWUuYnJlYWtwb2ludCA9IEluc3BlY3RvckRlYnVnZ2Vy
QWdlbnQ6OmRlYnVnZ2VyQnJlYWtwb2ludEZyb21QYXlsb2FkKGVycm9yU3RyaW5nLCBXVEZNb3Zl
KG9wdGlvbnMpKTsKKyAgICBpZiAoIWl0LT52YWx1ZS5icmVha3BvaW50KQorICAgICAgICByZXR1
cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAot
dm9pZCBJbnNwZWN0b3JET01BZ2VudDo6cmVtb3ZlQnJlYWtwb2ludEZvckV2ZW50TGlzdGVuZXIo
RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgZXZlbnRMaXN0ZW5lcklkKQorUHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yRE9NQWdlbnQ6OnJlbW92ZUJyZWFrcG9pbnRG
b3JFdmVudExpc3RlbmVyKFByb3RvY29sOjpET006OkV2ZW50TGlzdGVuZXJJZCBldmVudExpc3Rl
bmVySWQpCiB7CiAgICAgYXV0byBpdCA9IG1fZXZlbnRMaXN0ZW5lckVudHJpZXMuZmluZChldmVu
dExpc3RlbmVySWQpOwotICAgIGlmIChpdCA9PSBtX2V2ZW50TGlzdGVuZXJFbnRyaWVzLmVuZCgp
KSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIk1pc3NpbmcgZXZlbnQgbGlzdGVuZXIgZm9yIGdp
dmVuIGV2ZW50TGlzdGVuZXJJZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAo
aXQgPT0gbV9ldmVudExpc3RlbmVyRW50cmllcy5lbmQoKSkKKyAgICAgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKCJNaXNzaW5nIGV2ZW50IGxpc3RlbmVyIGZvciBnaXZlbiBldmVudExpc3RlbmVy
SWQiX3MpOwogCiAgICAgaWYgKCFpdC0+dmFsdWUuYnJlYWtwb2ludCkKLSAgICAgICAgZXJyb3JT
dHJpbmcgPSAiQnJlYWtwb2ludCBmb3IgZ2l2ZW4gZXZlbnRMaXN0ZW5lcklkIG1pc3NpbmciX3M7
CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiQnJlYWtwb2ludCBmb3IgZ2l2ZW4gZXZl
bnRMaXN0ZW5lcklkIG1pc3NpbmciX3MpOwogCiAgICAgaXQtPnZhbHVlLmJyZWFrcG9pbnQgPSBu
dWxscHRyOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6
Z2V0QWNjZXNzaWJpbGl0eVByb3BlcnRpZXNGb3JOb2RlKEVycm9yU3RyaW5nJiBlcnJvclN0cmlu
ZywgaW50IG5vZGVJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJp
bGl0eVByb3BlcnRpZXM+JiBheFByb3BlcnRpZXMpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxS
ZWY8UHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM+PiBJbnNwZWN0b3JET01B
Z2VudDo6Z2V0QWNjZXNzaWJpbGl0eVByb3BlcnRpZXNGb3JOb2RlKFByb3RvY29sOjpET006Ok5v
ZGVJZCBub2RlSWQpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOwor
CiAgICAgTm9kZSogbm9kZSA9IGFzc2VydE5vZGUoZXJyb3JTdHJpbmcsIG5vZGVJZCk7CiAgICAg
aWYgKCFub2RlKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3Rl
ZChlcnJvclN0cmluZyk7CiAKLSAgICBheFByb3BlcnRpZXMgPSBidWlsZE9iamVjdEZvckFjY2Vz
c2liaWxpdHlQcm9wZXJ0aWVzKG5vZGUpOworICAgIHJldHVybiBidWlsZE9iamVjdEZvckFjY2Vz
c2liaWxpdHlQcm9wZXJ0aWVzKCpub2RlKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6
cGVyZm9ybVNlYXJjaChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgcXVl
cnksIGNvbnN0IEpTT046OkFycmF5KiBub2RlSWRzLCBjb25zdCBib29sKiBjYXNlU2Vuc2l0aXZl
LCBTdHJpbmcqIHNlYXJjaElkLCBpbnQqIHJlc3VsdENvdW50KQorUHJvdG9jb2w6OkVycm9yU3Ry
aW5nT3I8c3RkOjp0dXBsZTxTdHJpbmcgLyogc2VhcmNoSWQgKi8sIGludCAvKiByZXN1bHRDb3Vu
dCAqLz4+IEluc3BlY3RvckRPTUFnZW50OjpwZXJmb3JtU2VhcmNoKGNvbnN0IFN0cmluZyYgcXVl
cnksIFJlZlB0cjxKU09OOjpBcnJheT4mJiBub2RlSWRzLCBPcHRpb25hbDxib29sPiYmIGNhc2VT
ZW5zaXRpdmUpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAg
ICAgLy8gRklYTUU6IFNlYXJjaCB3b3JrcyB3aXRoIG5vZGUgZ3JhbnVsYXJpdHkgLSBudW1iZXIg
b2YgbWF0Y2hlcyB3aXRoaW4gbm9kZSBpcyBub3QgY2FsY3VsYXRlZC4KICAgICBJbnNwZWN0b3JO
b2RlRmluZGVyIGZpbmRlcihxdWVyeSwgY2FzZVNlbnNpdGl2ZSAmJiAqY2FzZVNlbnNpdGl2ZSk7
CiAKICAgICBpZiAobm9kZUlkcykgewogICAgICAgICBmb3IgKGF1dG8mIG5vZGVWYWx1ZSA6ICpu
b2RlSWRzKSB7Ci0gICAgICAgICAgICBpZiAoIW5vZGVWYWx1ZSkgewotICAgICAgICAgICAgICAg
IGVycm9yU3RyaW5nID0gIlVuZXhwZWN0ZWQgbm9uLWludGVnZXIgaXRlbSBpbiBnaXZlbiBub2Rl
SWRzIl9zOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGludCBub2RlSWQgPSAwOwotICAgICAgICAgICAgaWYgKCFub2RlVmFsdWUtPmFzSW50ZWdl
cihub2RlSWQpKSB7Ci0gICAgICAgICAgICAgICAgZXJyb3JTdHJpbmcgPSAiVW5leHBlY3RlZCBu
b24taW50ZWdlciBpdGVtIGluIGdpdmVuIG5vZGVJZHMiX3M7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgTm9kZSogbm9kZSA9IGFzc2VydE5vZGUo
ZXJyb3JTdHJpbmcsIG5vZGVJZCk7Ci0gICAgICAgICAgICBpZiAoIW5vZGUpIHsKLSAgICAgICAg
ICAgICAgICAvLyBhc3NlcnROb2RlIHNob3VsZCBoYXZlIGZpbGxlZCB0aGUgZXJyb3JTdHJpbmcg
Zm9yIHVzLgotICAgICAgICAgICAgICAgIEFTU0VSVChlcnJvclN0cmluZy5sZW5ndGgoKSk7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgYXV0byBu
b2RlSWQgPSBub2RlVmFsdWUtPmFzSW50ZWdlcigpOworICAgICAgICAgICAgaWYgKCFub2RlSWQp
CisgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJVbmV4cGVjdGVkIG5vbi1p
bnRlZ2VyIGl0ZW0gaW4gZ2l2ZW4gbm9kZUlkcyJfcyk7CisKKyAgICAgICAgICAgIE5vZGUqIG5v
ZGUgPSBhc3NlcnROb2RlKGVycm9yU3RyaW5nLCAqbm9kZUlkKTsKKyAgICAgICAgICAgIGlmICgh
bm9kZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcp
OworCiAgICAgICAgICAgICBmaW5kZXIucGVyZm9ybVNlYXJjaChub2RlKTsKICAgICAgICAgfQog
ICAgIH0gZWxzZSB7CkBAIC0xMDU4LDM3ICsxMDkwLDM2IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdl
bnQ6OnBlcmZvcm1TZWFyY2goRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcm
IHF1CiAgICAgICAgIGZpbmRlci5wZXJmb3JtU2VhcmNoKG1fZG9jdW1lbnQuZ2V0KCkpOwogICAg
IH0KIAotICAgICpzZWFyY2hJZCA9IElkZW50aWZpZXJzRmFjdG9yeTo6Y3JlYXRlSWRlbnRpZmll
cigpOworICAgIGF1dG8gc2VhcmNoSWQgPSBJZGVudGlmaWVyc0ZhY3Rvcnk6OmNyZWF0ZUlkZW50
aWZpZXIoKTsKIAotICAgIGF1dG8mIHJlc3VsdHNWZWN0b3IgPSBtX3NlYXJjaFJlc3VsdHMuYWRk
KCpzZWFyY2hJZCwgVmVjdG9yPFJlZlB0cjxOb2RlPj4oKSkuaXRlcmF0b3ItPnZhbHVlOworICAg
IGF1dG8mIHJlc3VsdHNWZWN0b3IgPSBtX3NlYXJjaFJlc3VsdHMuYWRkKHNlYXJjaElkLCBWZWN0
b3I8UmVmUHRyPE5vZGU+PigpKS5pdGVyYXRvci0+dmFsdWU7CiAgICAgZm9yIChhdXRvJiByZXN1
bHQgOiBmaW5kZXIucmVzdWx0cygpKQogICAgICAgICByZXN1bHRzVmVjdG9yLmFwcGVuZChyZXN1
bHQpOwogCi0gICAgKnJlc3VsdENvdW50ID0gcmVzdWx0c1ZlY3Rvci5zaXplKCk7CisgICAgcmV0
dXJuIHsgeyBzZWFyY2hJZCwgcmVzdWx0c1ZlY3Rvci5zaXplKCkgfSB9OwogfQogCi12b2lkIElu
c3BlY3RvckRPTUFnZW50OjpnZXRTZWFyY2hSZXN1bHRzKEVycm9yU3RyaW5nJiBlcnJvclN0cmlu
ZywgY29uc3QgU3RyaW5nJiBzZWFyY2hJZCwgaW50IGZyb21JbmRleCwgaW50IHRvSW5kZXgsIFJl
ZlB0cjxKU09OOjpBcnJheU9mPGludD4+JiBub2RlSWRzKQorUHJvdG9jb2w6OkVycm9yU3RyaW5n
T3I8UmVmPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkRPTTo6Tm9kZUlkPj4+IEluc3BlY3RvckRP
TUFnZW50OjpnZXRTZWFyY2hSZXN1bHRzKGNvbnN0IFN0cmluZyYgc2VhcmNoSWQsIGludCBmcm9t
SW5kZXgsIGludCB0b0luZGV4KQogewogICAgIFNlYXJjaFJlc3VsdHM6Oml0ZXJhdG9yIGl0ID0g
bV9zZWFyY2hSZXN1bHRzLmZpbmQoc2VhcmNoSWQpOwotICAgIGlmIChpdCA9PSBtX3NlYXJjaFJl
c3VsdHMuZW5kKCkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWlzc2luZyBzZWFyY2ggcmVz
dWx0IGZvciBnaXZlbiBzZWFyY2hJZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBp
ZiAoaXQgPT0gbV9zZWFyY2hSZXN1bHRzLmVuZCgpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoIk1pc3Npbmcgc2VhcmNoIHJlc3VsdCBmb3IgZ2l2ZW4gc2VhcmNoSWQiX3MpOwogCiAg
ICAgaW50IHNpemUgPSBpdC0+dmFsdWUuc2l6ZSgpOwotICAgIGlmIChmcm9tSW5kZXggPCAwIHx8
IHRvSW5kZXggPiBzaXplIHx8IGZyb21JbmRleCA+PSB0b0luZGV4KSB7Ci0gICAgICAgIGVycm9y
U3RyaW5nID0gIkludmFsaWQgc2VhcmNoIHJlc3VsdCByYW5nZSBmb3IgZ2l2ZW4gZnJvbUluZGV4
IGFuZCB0b0luZGV4Il9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmIChmcm9tSW5k
ZXggPCAwIHx8IHRvSW5kZXggPiBzaXplIHx8IGZyb21JbmRleCA+PSB0b0luZGV4KQorICAgICAg
ICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkludmFsaWQgc2VhcmNoIHJlc3VsdCByYW5nZSBmb3Ig
Z2l2ZW4gZnJvbUluZGV4IGFuZCB0b0luZGV4Il9zKTsKIAotICAgIG5vZGVJZHMgPSBKU09OOjpB
cnJheU9mPGludD46OmNyZWF0ZSgpOworICAgIGF1dG8gbm9kZUlkcyA9IEpTT046OkFycmF5T2Y8
UHJvdG9jb2w6OkRPTTo6Tm9kZUlkPjo6Y3JlYXRlKCk7CiAgICAgZm9yIChpbnQgaSA9IGZyb21J
bmRleDsgaSA8IHRvSW5kZXg7ICsraSkKICAgICAgICAgbm9kZUlkcy0+YWRkSXRlbShwdXNoTm9k
ZVBhdGhUb0Zyb250ZW5kKChpdC0+dmFsdWUpW2ldLmdldCgpKSk7CisgICAgcmV0dXJuIFdURk1v
dmUobm9kZUlkcyk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmRpc2NhcmRTZWFyY2hS
ZXN1bHRzKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBzZWFyY2hJZCkKK1Byb3RvY29sOjpF
cnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRPTUFnZW50OjpkaXNjYXJkU2VhcmNoUmVzdWx0
cyhjb25zdCBTdHJpbmcmIHNlYXJjaElkKQogewogICAgIG1fc2VhcmNoUmVzdWx0cy5yZW1vdmUo
c2VhcmNoSWQpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAogYm9vbCBJbnNwZWN0b3JET01BZ2Vu
dDo6aGFuZGxlTW91c2VQcmVzcygpCkBAIC0xMTE3LDcgKzExNDgsNyBAQCBib29sIEluc3BlY3Rv
ckRPTUFnZW50OjpoYW5kbGVUb3VjaEV2ZW50KE5vZGUmIG5vZGUpCiAKIHZvaWQgSW5zcGVjdG9y
RE9NQWdlbnQ6Omluc3BlY3QoTm9kZSogaW5zcGVjdGVkTm9kZSkKIHsKLSAgICBFcnJvclN0cmlu
ZyBpZ25vcmVkOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBpZ25vcmVkOwogICAgIFJlZlB0
cjxOb2RlPiBub2RlID0gaW5zcGVjdGVkTm9kZTsKICAgICBzZXRTZWFyY2hpbmdGb3JOb2RlKGln
bm9yZWQsIGZhbHNlLCBudWxscHRyLCBmYWxzZSk7CiAKQEAgLTExNzMsNyArMTIwNCw3IEBAIHZv
aWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmhpZ2hsaWdodE1vdXNlZE92ZXJOb2RlKCkKICAgICAgICAg
bV9vdmVybGF5LT5oaWdobGlnaHROb2RlKG5vZGUsICptX2luc3BlY3RNb2RlSGlnaGxpZ2h0Q29u
ZmlnKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c2V0U2VhcmNoaW5nRm9yTm9kZShF
cnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGJvb2wgZW5hYmxlZCwgY29uc3QgSlNPTjo6T2JqZWN0
KiBoaWdobGlnaHRJbnNwZWN0b3JPYmplY3QsIGJvb2wgc2hvd1J1bGVycykKK3ZvaWQgSW5zcGVj
dG9yRE9NQWdlbnQ6OnNldFNlYXJjaGluZ0Zvck5vZGUoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBl
cnJvclN0cmluZywgYm9vbCBlbmFibGVkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIGhpZ2hsaWdo
dEluc3BlY3Rvck9iamVjdCwgYm9vbCBzaG93UnVsZXJzKQogewogICAgIGlmIChtX3NlYXJjaGlu
Z0Zvck5vZGUgPT0gZW5hYmxlZCkKICAgICAgICAgcmV0dXJuOwpAQCAtMTE4MywxMiArMTIxNCwx
MiBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpzZXRTZWFyY2hpbmdGb3JOb2RlKEVycm9yU3Ry
aW5nJiBlcnJvclN0cmluZywgYm9vbCBlbmFibAogICAgIG1fb3ZlcmxheS0+c2V0U2hvd1J1bGVy
c0R1cmluZ0VsZW1lbnRTZWxlY3Rpb24obV9zZWFyY2hpbmdGb3JOb2RlICYmIHNob3dSdWxlcnMp
OwogCiAgICAgaWYgKG1fc2VhcmNoaW5nRm9yTm9kZSkgewotICAgICAgICBtX2luc3BlY3RNb2Rl
SGlnaGxpZ2h0Q29uZmlnID0gaGlnaGxpZ2h0Q29uZmlnRnJvbUluc3BlY3Rvck9iamVjdChlcnJv
clN0cmluZywgaGlnaGxpZ2h0SW5zcGVjdG9yT2JqZWN0KTsKKyAgICAgICAgbV9pbnNwZWN0TW9k
ZUhpZ2hsaWdodENvbmZpZyA9IGhpZ2hsaWdodENvbmZpZ0Zyb21JbnNwZWN0b3JPYmplY3QoZXJy
b3JTdHJpbmcsIFdURk1vdmUoaGlnaGxpZ2h0SW5zcGVjdG9yT2JqZWN0KSk7CiAgICAgICAgIGlm
ICghbV9pbnNwZWN0TW9kZUhpZ2hsaWdodENvbmZpZykKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgaGlnaGxpZ2h0TW91c2VkT3Zlck5vZGUoKTsKICAgICB9IGVsc2UKLSAgICAgICAgaGlk
ZUhpZ2hsaWdodChlcnJvclN0cmluZyk7CisgICAgICAgIGhpZGVIaWdobGlnaHQoKTsKIAogICAg
IG1fb3ZlcmxheS0+ZGlkU2V0U2VhcmNoaW5nRm9yTm9kZShtX3NlYXJjaGluZ0Zvck5vZGUpOwog
CkBAIC0xMTk2LDcgKzEyMjcsNyBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpzZXRTZWFyY2hp
bmdGb3JOb2RlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgYm9vbCBlbmFibAogICAgICAgICBj
bGllbnQtPmVsZW1lbnRTZWxlY3Rpb25DaGFuZ2VkKG1fc2VhcmNoaW5nRm9yTm9kZSk7CiB9CiAK
LXN0ZDo6dW5pcXVlX3B0cjxIaWdobGlnaHRDb25maWc+IEluc3BlY3RvckRPTUFnZW50OjpoaWdo
bGlnaHRDb25maWdGcm9tSW5zcGVjdG9yT2JqZWN0KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywg
Y29uc3QgSlNPTjo6T2JqZWN0KiBoaWdobGlnaHRJbnNwZWN0b3JPYmplY3QpCitzdGQ6OnVuaXF1
ZV9wdHI8SGlnaGxpZ2h0Q29uZmlnPiBJbnNwZWN0b3JET01BZ2VudDo6aGlnaGxpZ2h0Q29uZmln
RnJvbUluc3BlY3Rvck9iamVjdChQcm90b2NvbDo6RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBS
ZWZQdHI8SlNPTjo6T2JqZWN0PiYmIGhpZ2hsaWdodEluc3BlY3Rvck9iamVjdCkKIHsKICAgICBp
ZiAoIWhpZ2hsaWdodEluc3BlY3Rvck9iamVjdCkgewogICAgICAgICBlcnJvclN0cmluZyA9ICJJ
bnRlcm5hbCBlcnJvcjogaGlnaGxpZ2h0IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyIGlzIG1pc3Np
bmciX3M7CkBAIC0xMjA0LDgxICsxMjM1LDkzIEBAIHN0ZDo6dW5pcXVlX3B0cjxIaWdobGlnaHRD
b25maWc+IEluc3BlY3RvckRPTUFnZW50OjpoaWdobGlnaHRDb25maWdGcm9tSW5zcGVjdG9yCiAg
ICAgfQogCiAgICAgYXV0byBoaWdobGlnaHRDb25maWcgPSBtYWtlVW5pcXVlPEhpZ2hsaWdodENv
bmZpZz4oKTsKLSAgICBib29sIHNob3dJbmZvID0gZmFsc2U7IC8vIERlZmF1bHQ6IGZhbHNlIChk
byBub3Qgc2hvdyBhIHRvb2x0aXApLgotICAgIGhpZ2hsaWdodEluc3BlY3Rvck9iamVjdC0+Z2V0
Qm9vbGVhbigic2hvd0luZm8iLCBzaG93SW5mbyk7Ci0gICAgaGlnaGxpZ2h0Q29uZmlnLT5zaG93
SW5mbyA9IHNob3dJbmZvOwotICAgIGhpZ2hsaWdodENvbmZpZy0+Y29udGVudCA9IHBhcnNlQ29u
ZmlnQ29sb3IoImNvbnRlbnRDb2xvciIsIGhpZ2hsaWdodEluc3BlY3Rvck9iamVjdCk7Ci0gICAg
aGlnaGxpZ2h0Q29uZmlnLT5jb250ZW50T3V0bGluZSA9IHBhcnNlQ29uZmlnQ29sb3IoImNvbnRl
bnRPdXRsaW5lQ29sb3IiLCBoaWdobGlnaHRJbnNwZWN0b3JPYmplY3QpOwotICAgIGhpZ2hsaWdo
dENvbmZpZy0+cGFkZGluZyA9IHBhcnNlQ29uZmlnQ29sb3IoInBhZGRpbmdDb2xvciIsIGhpZ2hs
aWdodEluc3BlY3Rvck9iamVjdCk7Ci0gICAgaGlnaGxpZ2h0Q29uZmlnLT5ib3JkZXIgPSBwYXJz
ZUNvbmZpZ0NvbG9yKCJib3JkZXJDb2xvciIsIGhpZ2hsaWdodEluc3BlY3Rvck9iamVjdCk7Ci0g
ICAgaGlnaGxpZ2h0Q29uZmlnLT5tYXJnaW4gPSBwYXJzZUNvbmZpZ0NvbG9yKCJtYXJnaW5Db2xv
ciIsIGhpZ2hsaWdodEluc3BlY3Rvck9iamVjdCk7CisgICAgaGlnaGxpZ2h0Q29uZmlnLT5zaG93
SW5mbyA9IGhpZ2hsaWdodEluc3BlY3Rvck9iamVjdC0+Z2V0Qm9vbGVhbihQcm90b2NvbDo6RE9N
OjpIaWdobGlnaHRDb25maWc6OnNob3dJbmZvS2V5KS52YWx1ZU9yKGZhbHNlKTsKKyAgICBoaWdo
bGlnaHRDb25maWctPmNvbnRlbnQgPSBwYXJzZUNvbmZpZ0NvbG9yKFByb3RvY29sOjpET006Okhp
Z2hsaWdodENvbmZpZzo6Y29udGVudENvbG9yS2V5LCAqaGlnaGxpZ2h0SW5zcGVjdG9yT2JqZWN0
KTsKKyAgICBoaWdobGlnaHRDb25maWctPnBhZGRpbmcgPSBwYXJzZUNvbmZpZ0NvbG9yKFByb3Rv
Y29sOjpET006OkhpZ2hsaWdodENvbmZpZzo6cGFkZGluZ0NvbG9yS2V5LCAqaGlnaGxpZ2h0SW5z
cGVjdG9yT2JqZWN0KTsKKyAgICBoaWdobGlnaHRDb25maWctPmJvcmRlciA9IHBhcnNlQ29uZmln
Q29sb3IoUHJvdG9jb2w6OkRPTTo6SGlnaGxpZ2h0Q29uZmlnOjpib3JkZXJDb2xvcktleSwgKmhp
Z2hsaWdodEluc3BlY3Rvck9iamVjdCk7CisgICAgaGlnaGxpZ2h0Q29uZmlnLT5tYXJnaW4gPSBw
YXJzZUNvbmZpZ0NvbG9yKFByb3RvY29sOjpET006OkhpZ2hsaWdodENvbmZpZzo6bWFyZ2luQ29s
b3JLZXksICpoaWdobGlnaHRJbnNwZWN0b3JPYmplY3QpOwogICAgIHJldHVybiBoaWdobGlnaHRD
b25maWc7CiB9CiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotdm9pZCBJbnNwZWN0b3JET01B
Z2VudDo6c2V0SW5zcGVjdE1vZGVFbmFibGVkKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgYm9v
bCBlbmFibGVkLCBjb25zdCBKU09OOjpPYmplY3QqIGhpZ2hsaWdodENvbmZpZykKK1Byb3RvY29s
OjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRPTUFnZW50OjpzZXRJbnNwZWN0TW9kZUVu
YWJsZWQoYm9vbCBlbmFibGVkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIGhpZ2hsaWdodENvbmZp
ZykKIHsKLSAgICBzZXRTZWFyY2hpbmdGb3JOb2RlKGVycm9yU3RyaW5nLCBlbmFibGVkLCBoaWdo
bGlnaHRDb25maWcgPyBoaWdobGlnaHRDb25maWcgOiBudWxscHRyLCBmYWxzZSk7CisgICAgUHJv
dG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCisgICAgc2V0U2VhcmNoaW5nRm9yTm9k
ZShlcnJvclN0cmluZywgZW5hYmxlZCwgV1RGTW92ZShoaWdobGlnaHRDb25maWcpLCBmYWxzZSk7
CisKKyAgICBpZiAoISFlcnJvclN0cmluZykKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVk
KGVycm9yU3RyaW5nKTsKKworICAgIHJldHVybiB7IH07CiB9CiAjZWxzZQotdm9pZCBJbnNwZWN0
b3JET01BZ2VudDo6c2V0SW5zcGVjdE1vZGVFbmFibGVkKEVycm9yU3RyaW5nJiBlcnJvclN0cmlu
ZywgYm9vbCBlbmFibGVkLCBjb25zdCBKU09OOjpPYmplY3QqIGhpZ2hsaWdodENvbmZpZywgY29u
c3QgYm9vbCogc2hvd1J1bGVycykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3Bl
Y3RvckRPTUFnZW50OjpzZXRJbnNwZWN0TW9kZUVuYWJsZWQoYm9vbCBlbmFibGVkLCBSZWZQdHI8
SlNPTjo6T2JqZWN0PiYmIGhpZ2hsaWdodENvbmZpZywgT3B0aW9uYWw8Ym9vbD4mJiBzaG93UnVs
ZXJzKQogewotICAgIHNldFNlYXJjaGluZ0Zvck5vZGUoZXJyb3JTdHJpbmcsIGVuYWJsZWQsIGhp
Z2hsaWdodENvbmZpZyA/IGhpZ2hsaWdodENvbmZpZyA6IG51bGxwdHIsIHNob3dSdWxlcnMgJiYg
KnNob3dSdWxlcnMpOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwor
ICAgIHNldFNlYXJjaGluZ0Zvck5vZGUoZXJyb3JTdHJpbmcsIGVuYWJsZWQsIFdURk1vdmUoaGln
aGxpZ2h0Q29uZmlnKSwgc2hvd1J1bGVycyAmJiAqc2hvd1J1bGVycyk7CisKKyAgICBpZiAoISFl
cnJvclN0cmluZykKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsK
KworICAgIHJldHVybiB7IH07CiB9CiAjZW5kaWYKIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6
aGlnaGxpZ2h0UmVjdChFcnJvclN0cmluZyYsIGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQg
aGVpZ2h0LCBjb25zdCBKU09OOjpPYmplY3QqIGNvbG9yLCBjb25zdCBKU09OOjpPYmplY3QqIG91
dGxpbmVDb2xvciwgY29uc3QgYm9vbCogdXNlUGFnZUNvb3JkaW5hdGVzKQorUHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yRE9NQWdlbnQ6OmhpZ2hsaWdodFJlY3QoaW50IHgs
IGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgY29s
b3IsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgb3V0bGluZUNvbG9yLCBPcHRpb25hbDxib29sPiYm
IHVzZVBhZ2VDb29yZGluYXRlcykKIHsKICAgICBhdXRvIHF1YWQgPSBtYWtlVW5pcXVlPEZsb2F0
UXVhZD4oRmxvYXRSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpKTsKLSAgICBpbm5lckhpZ2hsaWdo
dFF1YWQoV1RGTW92ZShxdWFkKSwgY29sb3IsIG91dGxpbmVDb2xvciwgdXNlUGFnZUNvb3JkaW5h
dGVzKTsKKyAgICBpbm5lckhpZ2hsaWdodFF1YWQoV1RGTW92ZShxdWFkKSwgV1RGTW92ZShjb2xv
ciksIFdURk1vdmUob3V0bGluZUNvbG9yKSwgV1RGTW92ZSh1c2VQYWdlQ29vcmRpbmF0ZXMpKTsK
KworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmhpZ2hsaWdo
dFF1YWQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBKU09OOjpBcnJheSYgcXVhZEFy
cmF5LCBjb25zdCBKU09OOjpPYmplY3QqIGNvbG9yLCBjb25zdCBKU09OOjpPYmplY3QqIG91dGxp
bmVDb2xvciwgY29uc3QgYm9vbCogdXNlUGFnZUNvb3JkaW5hdGVzKQorUHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yRE9NQWdlbnQ6OmhpZ2hsaWdodFF1YWQoUmVmPEpTT046
OkFycmF5PiYmIHF1YWRPYmplY3QsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgY29sb3IsIFJlZlB0
cjxKU09OOjpPYmplY3Q+JiYgb3V0bGluZUNvbG9yLCBPcHRpb25hbDxib29sPiYmIHVzZVBhZ2VD
b29yZGluYXRlcykKIHsKICAgICBhdXRvIHF1YWQgPSBtYWtlVW5pcXVlPEZsb2F0UXVhZD4oKTsK
LSAgICBpZiAoIXBhcnNlUXVhZChxdWFkQXJyYXksIHF1YWQuZ2V0KCkpKSB7Ci0gICAgICAgIGVy
cm9yU3RyaW5nID0gIlVuZXhwZWN0ZWQgaW52YWxpZCBxdWFkQXJyYXkiX3M7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0gICAgaW5uZXJIaWdobGlnaHRRdWFkKFdURk1vdmUocXVhZCksIGNvbG9y
LCBvdXRsaW5lQ29sb3IsIHVzZVBhZ2VDb29yZGluYXRlcyk7CisgICAgaWYgKCFwYXJzZVF1YWQo
V1RGTW92ZShxdWFkT2JqZWN0KSwgcXVhZC5nZXQoKSkpCisgICAgICAgIHJldHVybiBtYWtlVW5l
eHBlY3RlZCgiVW5leHBlY3RlZCBpbnZhbGlkIHF1YWQiX3MpOworCisgICAgaW5uZXJIaWdobGln
aHRRdWFkKFdURk1vdmUocXVhZCksIFdURk1vdmUoY29sb3IpLCBXVEZNb3ZlKG91dGxpbmVDb2xv
ciksIFdURk1vdmUodXNlUGFnZUNvb3JkaW5hdGVzKSk7CisKKyAgICByZXR1cm4geyB9OwogfQog
Ci12b2lkIEluc3BlY3RvckRPTUFnZW50Ojppbm5lckhpZ2hsaWdodFF1YWQoc3RkOjp1bmlxdWVf
cHRyPEZsb2F0UXVhZD4gcXVhZCwgY29uc3QgSlNPTjo6T2JqZWN0KiBjb2xvciwgY29uc3QgSlNP
Tjo6T2JqZWN0KiBvdXRsaW5lQ29sb3IsIGNvbnN0IGJvb2wqIHVzZVBhZ2VDb29yZGluYXRlcykK
K3ZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmlubmVySGlnaGxpZ2h0UXVhZChzdGQ6OnVuaXF1ZV9w
dHI8RmxvYXRRdWFkPiBxdWFkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIGNvbG9yLCBSZWZQdHI8
SlNPTjo6T2JqZWN0PiYmIG91dGxpbmVDb2xvciwgT3B0aW9uYWw8Ym9vbD4mJiB1c2VQYWdlQ29v
cmRpbmF0ZXMpCiB7CiAgICAgYXV0byBoaWdobGlnaHRDb25maWcgPSBtYWtlVW5pcXVlPEhpZ2hs
aWdodENvbmZpZz4oKTsKLSAgICBoaWdobGlnaHRDb25maWctPmNvbnRlbnQgPSBwYXJzZUNvbG9y
KGNvbG9yKTsKLSAgICBoaWdobGlnaHRDb25maWctPmNvbnRlbnRPdXRsaW5lID0gcGFyc2VDb2xv
cihvdXRsaW5lQ29sb3IpOworICAgIGhpZ2hsaWdodENvbmZpZy0+Y29udGVudCA9IHBhcnNlQ29s
b3IoV1RGTW92ZShjb2xvcikpOworICAgIGhpZ2hsaWdodENvbmZpZy0+Y29udGVudE91dGxpbmUg
PSBwYXJzZUNvbG9yKFdURk1vdmUob3V0bGluZUNvbG9yKSk7CiAgICAgaGlnaGxpZ2h0Q29uZmln
LT51c2VQYWdlQ29vcmRpbmF0ZXMgPSB1c2VQYWdlQ29vcmRpbmF0ZXMgPyAqdXNlUGFnZUNvb3Jk
aW5hdGVzIDogZmFsc2U7CiAgICAgbV9vdmVybGF5LT5oaWdobGlnaHRRdWFkKFdURk1vdmUocXVh
ZCksICpoaWdobGlnaHRDb25maWcpOwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpoaWdo
bGlnaHRTZWxlY3RvcihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IEpTT046Ok9iamVj
dCYgaGlnaGxpZ2h0SW5zcGVjdG9yT2JqZWN0LCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yU3RyaW5n
LCBjb25zdCBTdHJpbmcqIGZyYW1lSWQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJ
bnNwZWN0b3JET01BZ2VudDo6aGlnaGxpZ2h0U2VsZWN0b3IoUmVmPEpTT046Ok9iamVjdD4mJiBo
aWdobGlnaHRJbnNwZWN0b3JPYmplY3QsIGNvbnN0IFN0cmluZyYgc2VsZWN0b3JTdHJpbmcsIGNv
bnN0IFByb3RvY29sOjpOZXR3b3JrOjpGcmFtZUlkJiBmcmFtZUlkKQogewotICAgIGF1dG8gaGln
aGxpZ2h0Q29uZmlnID0gaGlnaGxpZ2h0Q29uZmlnRnJvbUluc3BlY3Rvck9iamVjdChlcnJvclN0
cmluZywgJmhpZ2hsaWdodEluc3BlY3Rvck9iamVjdCk7CisgICAgUHJvdG9jb2w6OkVycm9yU3Ry
aW5nIGVycm9yU3RyaW5nOworCisgICAgYXV0byBoaWdobGlnaHRDb25maWcgPSBoaWdobGlnaHRD
b25maWdGcm9tSW5zcGVjdG9yT2JqZWN0KGVycm9yU3RyaW5nLCBXVEZNb3ZlKGhpZ2hsaWdodElu
c3BlY3Rvck9iamVjdCkpOwogICAgIGlmICghaGlnaGxpZ2h0Q29uZmlnKQotICAgICAgICByZXR1
cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAgICBS
ZWZQdHI8RG9jdW1lbnQ+IGRvY3VtZW50OwogCi0gICAgaWYgKGZyYW1lSWQpIHsKKyAgICBpZiAo
ISFmcmFtZUlkKSB7CiAgICAgICAgIGF1dG8qIHBhZ2VBZ2VudCA9IG1faW5zdHJ1bWVudGluZ0Fn
ZW50cy5lbmFibGVkUGFnZUFnZW50KCk7Ci0gICAgICAgIGlmICghcGFnZUFnZW50KSB7Ci0gICAg
ICAgICAgICBlcnJvclN0cmluZyA9ICJQYWdlIGRvbWFpbiBtdXN0IGJlIGVuYWJsZWQiX3M7Ci0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKCFwYWdlQWdlbnQpCisg
ICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIlBhZ2UgZG9tYWluIG11c3QgYmUgZW5h
YmxlZCJfcyk7CiAKLSAgICAgICAgYXV0byogZnJhbWUgPSBwYWdlQWdlbnQtPmFzc2VydEZyYW1l
KGVycm9yU3RyaW5nLCAqZnJhbWVJZCk7CisgICAgICAgIGF1dG8qIGZyYW1lID0gcGFnZUFnZW50
LT5hc3NlcnRGcmFtZShlcnJvclN0cmluZywgZnJhbWVJZCk7CiAgICAgICAgIGlmICghZnJhbWUp
Ci0gICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQo
ZXJyb3JTdHJpbmcpOwogCiAgICAgICAgIGRvY3VtZW50ID0gZnJhbWUtPmRvY3VtZW50KCk7CiAg
ICAgfSBlbHNlCiAgICAgICAgIGRvY3VtZW50ID0gbV9kb2N1bWVudDsKIAotICAgIGlmICghZG9j
dW1lbnQpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWlzc2luZyBkb2N1bWVudCBvZiBmcmFt
ZSBmb3IgZ2l2ZW4gZnJhbWVJZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAo
IWRvY3VtZW50KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk1pc3NpbmcgZG9jdW1l
bnQgb2YgZnJhbWUgZm9yIGdpdmVuIGZyYW1lSWQiX3MpOwogCiAgICAgQ1NTUGFyc2VyIHBhcnNl
cigqZG9jdW1lbnQpOwogICAgIENTU1NlbGVjdG9yTGlzdCBzZWxlY3Rvckxpc3Q7CkBAIC0xMzM5
LDE1OCArMTM4MiwxNzMgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6aGlnaGxpZ2h0U2VsZWN0
b3IoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBKU09OOjoKICAgICB9CiAKICAgICBt
X292ZXJsYXktPmhpZ2hsaWdodE5vZGVMaXN0KFN0YXRpY05vZGVMaXN0OjpjcmVhdGUoV1RGTW92
ZShub2RlTGlzdCkpLCAqaGlnaGxpZ2h0Q29uZmlnKTsKKworICAgIHJldHVybiB7IH07CiB9CiAK
LXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmhpZ2hsaWdodE5vZGUoRXJyb3JTdHJpbmcmIGVycm9y
U3RyaW5nLCBjb25zdCBKU09OOjpPYmplY3QmIGhpZ2hsaWdodEluc3BlY3Rvck9iamVjdCwgY29u
c3QgaW50KiBub2RlSWQsIGNvbnN0IFN0cmluZyogb2JqZWN0SWQpCitQcm90b2NvbDo6RXJyb3JT
dHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JET01BZ2VudDo6aGlnaGxpZ2h0Tm9kZShSZWY8SlNPTjo6
T2JqZWN0PiYmIGhpZ2hsaWdodEluc3BlY3Rvck9iamVjdCwgT3B0aW9uYWw8UHJvdG9jb2w6OkRP
TTo6Tm9kZUlkPiYmIG5vZGVJZCwgY29uc3QgUHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVj
dElkJiBvYmplY3RJZCkKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7
CisKICAgICBOb2RlKiBub2RlID0gbnVsbHB0cjsKICAgICBpZiAobm9kZUlkKQogICAgICAgICBu
b2RlID0gYXNzZXJ0Tm9kZShlcnJvclN0cmluZywgKm5vZGVJZCk7Ci0gICAgZWxzZSBpZiAob2Jq
ZWN0SWQpIHsKLSAgICAgICAgbm9kZSA9IG5vZGVGb3JPYmplY3RJZCgqb2JqZWN0SWQpOwotICAg
ICAgICBpZiAoIW5vZGUpCi0gICAgICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIG5vZGUg
Zm9yIGdpdmVuIG9iamVjdElkIl9zOworICAgIGVsc2UgaWYgKCEhb2JqZWN0SWQpIHsKKyAgICAg
ICAgbm9kZSA9IG5vZGVGb3JPYmplY3RJZChvYmplY3RJZCk7CisgICAgICAgIGVycm9yU3RyaW5n
ID0gIk1pc3Npbmcgbm9kZSBmb3IgZ2l2ZW4gb2JqZWN0SWQiX3M7CiAgICAgfSBlbHNlCiAgICAg
ICAgIGVycm9yU3RyaW5nID0gIkVpdGhlciBub2RlSWQgb3Igb2JqZWN0SWQgbXVzdCBiZSBzcGVj
aWZpZWQiX3M7CiAKICAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0
dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxI
aWdobGlnaHRDb25maWc+IGhpZ2hsaWdodENvbmZpZyA9IGhpZ2hsaWdodENvbmZpZ0Zyb21JbnNw
ZWN0b3JPYmplY3QoZXJyb3JTdHJpbmcsICZoaWdobGlnaHRJbnNwZWN0b3JPYmplY3QpOworICAg
IHN0ZDo6dW5pcXVlX3B0cjxIaWdobGlnaHRDb25maWc+IGhpZ2hsaWdodENvbmZpZyA9IGhpZ2hs
aWdodENvbmZpZ0Zyb21JbnNwZWN0b3JPYmplY3QoZXJyb3JTdHJpbmcsIFdURk1vdmUoaGlnaGxp
Z2h0SW5zcGVjdG9yT2JqZWN0KSk7CiAgICAgaWYgKCFoaWdobGlnaHRDb25maWcpCi0gICAgICAg
IHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAog
ICAgIG1fb3ZlcmxheS0+aGlnaGxpZ2h0Tm9kZShub2RlLCAqaGlnaGxpZ2h0Q29uZmlnKTsKKwor
ICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmhpZ2hsaWdodE5v
ZGVMaXN0KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgSlNPTjo6QXJyYXkmIG5vZGVJ
ZHMsIGNvbnN0IEpTT046Ok9iamVjdCYgaGlnaGxpZ2h0SW5zcGVjdG9yT2JqZWN0KQorUHJvdG9j
b2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yRE9NQWdlbnQ6OmhpZ2hsaWdodE5vZGVM
aXN0KFJlZjxKU09OOjpBcnJheT4mJiBub2RlSWRzLCBSZWY8SlNPTjo6T2JqZWN0PiYmIGhpZ2hs
aWdodEluc3BlY3Rvck9iamVjdCkKIHsKLSAgICBWZWN0b3I8UmVmPE5vZGU+PiBub2RlczsKLSAg
ICBmb3IgKGF1dG8mIG5vZGVWYWx1ZSA6IG5vZGVJZHMpIHsKLSAgICAgICAgaWYgKCFub2RlVmFs
dWUpIHsKLSAgICAgICAgICAgIGVycm9yU3RyaW5nID0gIlVuZXhwZWN0ZWQgbm9uLWludGVnZXIg
aXRlbSBpbiBnaXZlbiBub2RlSWRzIl9zOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOwogCi0gICAgICAgIGludCBu
b2RlSWQgPSAwOwotICAgICAgICBpZiAoIW5vZGVWYWx1ZS0+YXNJbnRlZ2VyKG5vZGVJZCkpIHsK
LSAgICAgICAgICAgIGVycm9yU3RyaW5nID0gIlVuZXhwZWN0ZWQgbm9uLWludGVnZXIgaXRlbSBp
biBnaXZlbiBub2RlSWRzIl9zOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9CisgICAg
VmVjdG9yPFJlZjxOb2RlPj4gbm9kZXM7CisgICAgZm9yIChhdXRvJiBub2RlSWRWYWx1ZSA6IG5v
ZGVJZHMuZ2V0KCkpIHsKKyAgICAgICAgYXV0byBub2RlSWQgPSBub2RlSWRWYWx1ZS0+YXNJbnRl
Z2VyKCk7CisgICAgICAgIGlmICghbm9kZUlkKQorICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4
cGVjdGVkKCJVbmV4cGVjdGVkIG5vbi1pbnRlZ2VyIGl0ZW0gaW4gZ2l2ZW4gbm9kZUlkcyJfcyk7
CiAKICAgICAgICAgLy8gSW4gdGhlIGNhc2UgdGhhdCBhIG5vZGUgaXMgcmVtb3ZlZCBpbiB0aGUg
dGltZSBiZXR3ZWVuIHdoZW4gaGlnaGxpZ2h0Tm9kZUxpc3QgaXMgaW52b2tlZAogICAgICAgICAv
LyBieSB0aGUgZnJvbnRlbmQgYW5kIGl0IGlzIGV4ZWN1dGVkIGJ5IHRoZSBiYWNrZW5kLCB3ZSBz
aG91bGQgc3RpbGwgYXR0ZW1wdCB0byBoaWdobGlnaHQKICAgICAgICAgLy8gYXMgbWFueSBub2Rl
cyBhcyBwb3NzaWJsZS4gQXMgc3VjaCwgd2Ugc2hvdWxkIGlnbm9yZSBhbnkgZXJyb3JzIGdlbmVy
YXRlZCB3aGVuIGF0dGVtcHRpbmcKICAgICAgICAgLy8gdG8gZ2V0IGEgTm9kZSBmcm9tIGEgZ2l2
ZW4gbm9kZUlkLiAKLSAgICAgICAgRXJyb3JTdHJpbmcgaWdub3JlZDsKLSAgICAgICAgTm9kZSog
bm9kZSA9IGFzc2VydE5vZGUoaWdub3JlZCwgbm9kZUlkKTsKKyAgICAgICAgUHJvdG9jb2w6OkVy
cm9yU3RyaW5nIGlnbm9yZWQ7CisgICAgICAgIE5vZGUqIG5vZGUgPSBhc3NlcnROb2RlKGlnbm9y
ZWQsICpub2RlSWQpOwogICAgICAgICBpZiAoIW5vZGUpCiAgICAgICAgICAgICBjb250aW51ZTsK
IAogICAgICAgICBub2Rlcy5hcHBlbmQoKm5vZGUpOwogICAgIH0KIAotICAgIHN0ZDo6dW5pcXVl
X3B0cjxIaWdobGlnaHRDb25maWc+IGhpZ2hsaWdodENvbmZpZyA9IGhpZ2hsaWdodENvbmZpZ0Zy
b21JbnNwZWN0b3JPYmplY3QoZXJyb3JTdHJpbmcsICZoaWdobGlnaHRJbnNwZWN0b3JPYmplY3Qp
OworICAgIHN0ZDo6dW5pcXVlX3B0cjxIaWdobGlnaHRDb25maWc+IGhpZ2hsaWdodENvbmZpZyA9
IGhpZ2hsaWdodENvbmZpZ0Zyb21JbnNwZWN0b3JPYmplY3QoZXJyb3JTdHJpbmcsIFdURk1vdmUo
aGlnaGxpZ2h0SW5zcGVjdG9yT2JqZWN0KSk7CiAgICAgaWYgKCFoaWdobGlnaHRDb25maWcpCi0g
ICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5n
KTsKIAogICAgIG1fb3ZlcmxheS0+aGlnaGxpZ2h0Tm9kZUxpc3QoU3RhdGljTm9kZUxpc3Q6OmNy
ZWF0ZShXVEZNb3ZlKG5vZGVzKSksICpoaWdobGlnaHRDb25maWcpOworCisgICAgcmV0dXJuIHsg
fTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6aGlnaGxpZ2h0RnJhbWUoRXJyb3JTdHJp
bmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGZyYW1lSWQsIGNvbnN0IEpTT046Ok9iamVj
dCogY29sb3IsIGNvbnN0IEpTT046Ok9iamVjdCogb3V0bGluZUNvbG9yKQorUHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yRE9NQWdlbnQ6OmhpZ2hsaWdodEZyYW1lKGNvbnN0
IFByb3RvY29sOjpOZXR3b3JrOjpGcmFtZUlkJiBmcmFtZUlkLCBSZWZQdHI8SlNPTjo6T2JqZWN0
PiYmIGNvbG9yLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIG91dGxpbmVDb2xvcikKIHsKKyAgICBQ
cm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBhdXRvKiBwYWdlQWdlbnQg
PSBtX2luc3RydW1lbnRpbmdBZ2VudHMuZW5hYmxlZFBhZ2VBZ2VudCgpOwotICAgIGlmICghcGFn
ZUFnZW50KSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIlBhZ2UgZG9tYWluIG11c3QgYmUgZW5h
YmxlZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoIXBhZ2VBZ2VudCkKKyAg
ICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJQYWdlIGRvbWFpbiBtdXN0IGJlIGVuYWJsZWQi
X3MpOwogCiAgICAgYXV0byogZnJhbWUgPSBwYWdlQWdlbnQtPmFzc2VydEZyYW1lKGVycm9yU3Ry
aW5nLCBmcmFtZUlkKTsKICAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm47CisgICAgICAg
IHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAgICBpZiAoZnJhbWUtPm93
bmVyRWxlbWVudCgpKSB7CiAgICAgICAgIGF1dG8gaGlnaGxpZ2h0Q29uZmlnID0gbWFrZVVuaXF1
ZTxIaWdobGlnaHRDb25maWc+KCk7CiAgICAgICAgIGhpZ2hsaWdodENvbmZpZy0+c2hvd0luZm8g
PSB0cnVlOyAvLyBBbHdheXMgc2hvdyB0b29sdGlwcyBmb3IgZnJhbWVzLgotICAgICAgICBoaWdo
bGlnaHRDb25maWctPmNvbnRlbnQgPSBwYXJzZUNvbG9yKGNvbG9yKTsKLSAgICAgICAgaGlnaGxp
Z2h0Q29uZmlnLT5jb250ZW50T3V0bGluZSA9IHBhcnNlQ29sb3Iob3V0bGluZUNvbG9yKTsKKyAg
ICAgICAgaGlnaGxpZ2h0Q29uZmlnLT5jb250ZW50ID0gcGFyc2VDb2xvcihXVEZNb3ZlKGNvbG9y
KSk7CisgICAgICAgIGhpZ2hsaWdodENvbmZpZy0+Y29udGVudE91dGxpbmUgPSBwYXJzZUNvbG9y
KFdURk1vdmUob3V0bGluZUNvbG9yKSk7CiAgICAgICAgIG1fb3ZlcmxheS0+aGlnaGxpZ2h0Tm9k
ZShmcmFtZS0+b3duZXJFbGVtZW50KCksICpoaWdobGlnaHRDb25maWcpOwogICAgIH0KKworICAg
IHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmhpZGVIaWdobGlnaHQo
RXJyb3JTdHJpbmcmKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yRE9N
QWdlbnQ6OmhpZGVIaWdobGlnaHQoKQogewogICAgIG1fb3ZlcmxheS0+aGlkZUhpZ2hsaWdodCgp
OworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6bW92ZVRv
KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJZCwgaW50IHRhcmdldEVsZW1lbnRJ
ZCwgY29uc3QgaW50KiBhbmNob3JOb2RlSWQsIGludCogbmV3Tm9kZUlkKQorUHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8UHJvdG9jb2w6OkRPTTo6Tm9kZUlkPiBJbnNwZWN0b3JET01BZ2VudDo6bW92
ZVRvKFByb3RvY29sOjpET006Ok5vZGVJZCBub2RlSWQsIFByb3RvY29sOjpET006Ok5vZGVJZCB0
YXJnZXROb2RlSWQsIE9wdGlvbmFsPFByb3RvY29sOjpET006Ok5vZGVJZD4mJiBpbnNlcnRCZWZv
cmVOb2RlSWQpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAg
ICAgTm9kZSogbm9kZSA9IGFzc2VydEVkaXRhYmxlTm9kZShlcnJvclN0cmluZywgbm9kZUlkKTsK
ICAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4
cGVjdGVkKGVycm9yU3RyaW5nKTsKIAotICAgIEVsZW1lbnQqIHRhcmdldEVsZW1lbnQgPSBhc3Nl
cnRFZGl0YWJsZUVsZW1lbnQoZXJyb3JTdHJpbmcsIHRhcmdldEVsZW1lbnRJZCk7CisgICAgRWxl
bWVudCogdGFyZ2V0RWxlbWVudCA9IGFzc2VydEVkaXRhYmxlRWxlbWVudChlcnJvclN0cmluZywg
dGFyZ2V0Tm9kZUlkKTsKICAgICBpZiAoIXRhcmdldEVsZW1lbnQpCi0gICAgICAgIHJldHVybjsK
KyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAotICAgIE5vZGUq
IGFuY2hvck5vZGUgPSAwOwotICAgIGlmIChhbmNob3JOb2RlSWQgJiYgKmFuY2hvck5vZGVJZCkg
ewotICAgICAgICBhbmNob3JOb2RlID0gYXNzZXJ0RWRpdGFibGVOb2RlKGVycm9yU3RyaW5nLCAq
YW5jaG9yTm9kZUlkKTsKKyAgICBOb2RlKiBhbmNob3JOb2RlID0gbnVsbHB0cjsKKyAgICBpZiAo
aW5zZXJ0QmVmb3JlTm9kZUlkICYmICppbnNlcnRCZWZvcmVOb2RlSWQpIHsKKyAgICAgICAgYW5j
aG9yTm9kZSA9IGFzc2VydEVkaXRhYmxlTm9kZShlcnJvclN0cmluZywgKmluc2VydEJlZm9yZU5v
ZGVJZCk7CiAgICAgICAgIGlmICghYW5jaG9yTm9kZSkKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgaWYgKGFuY2hvck5vZGUtPnBhcmVudE5vZGUoKSAhPSB0YXJnZXRFbGVtZW50KSB7Ci0g
ICAgICAgICAgICBlcnJvclN0cmluZyA9ICJHaXZlbiBhbmNob3JOb2RlSWQgbXVzdCBiZSBhIGNo
aWxkIG9mIGdpdmVuIHRhcmdldEVsZW1lbnRJZCJfczsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsK
KyAgICAgICAgaWYgKGFuY2hvck5vZGUtPnBhcmVudE5vZGUoKSAhPSB0YXJnZXRFbGVtZW50KQor
ICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJHaXZlbiBpbnNlcnRCZWZvcmVOb2Rl
SWQgbXVzdCBiZSBhIGNoaWxkIG9mIGdpdmVuIHRhcmdldE5vZGVJZCJfcyk7CiAgICAgfQogCiAg
ICAgaWYgKCFtX2RvbUVkaXRvci0+aW5zZXJ0QmVmb3JlKCp0YXJnZXRFbGVtZW50LCAqbm9kZSwg
YW5jaG9yTm9kZSwgZXJyb3JTdHJpbmcpKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVy
biBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKLSAgICAqbmV3Tm9kZUlkID0gcHVzaE5v
ZGVQYXRoVG9Gcm9udGVuZChlcnJvclN0cmluZywgbm9kZSk7CisgICAgcmV0dXJuIHB1c2hOb2Rl
UGF0aFRvRnJvbnRlbmQoZXJyb3JTdHJpbmcsIG5vZGUpOwogfQogCi12b2lkIEluc3BlY3RvckRP
TUFnZW50Ojp1bmRvKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZykKK1Byb3RvY29sOjpFcnJvclN0
cmluZ09yPHZvaWQ+IEluc3BlY3RvckRPTUFnZW50Ojp1bmRvKCkKIHsKICAgICBhdXRvIHJlc3Vs
dCA9IG1faGlzdG9yeS0+dW5kbygpOwogICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpCi0g
ICAgICAgIGVycm9yU3RyaW5nID0gdG9FcnJvclN0cmluZyhyZXN1bHQucmVsZWFzZUV4Y2VwdGlv
bigpKTsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEluc3BlY3RvckRPTUFnZW50Ojp0
b0Vycm9yU3RyaW5nKHJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCkpKTsKKworICAgIHJldHVybiB7
IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnJlZG8oRXJyb3JTdHJpbmcmIGVycm9y
U3RyaW5nKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yRE9NQWdlbnQ6
OnJlZG8oKQogewogICAgIGF1dG8gcmVzdWx0ID0gbV9oaXN0b3J5LT5yZWRvKCk7CiAgICAgaWYg
KHJlc3VsdC5oYXNFeGNlcHRpb24oKSkKLSAgICAgICAgZXJyb3JTdHJpbmcgPSB0b0Vycm9yU3Ry
aW5nKHJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCkpOworICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoSW5zcGVjdG9yRE9NQWdlbnQ6OnRvRXJyb3JTdHJpbmcocmVzdWx0LnJlbGVhc2VFeGNl
cHRpb24oKSkpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2Vu
dDo6bWFya1VuZG9hYmxlU3RhdGUoRXJyb3JTdHJpbmcmKQorUHJvdG9jb2w6OkVycm9yU3RyaW5n
T3I8dm9pZD4gSW5zcGVjdG9yRE9NQWdlbnQ6Om1hcmtVbmRvYWJsZVN0YXRlKCkKIHsKICAgICBt
X2hpc3RvcnktPm1hcmtVbmRvYWJsZVN0YXRlKCk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12
b2lkIEluc3BlY3RvckRPTUFnZW50Ojpmb2N1cyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGlu
dCBub2RlSWQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JET01BZ2Vu
dDo6Zm9jdXMoUHJvdG9jb2w6OkRPTTo6Tm9kZUlkIG5vZGVJZCkKIHsKKyAgICBQcm90b2NvbDo6
RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBFbGVtZW50KiBlbGVtZW50ID0gYXNzZXJ0
RWxlbWVudChlcnJvclN0cmluZywgbm9kZUlkKTsKICAgICBpZiAoIWVsZW1lbnQpCi0gICAgICAg
IHJldHVybjsKLSAgICBpZiAoIWVsZW1lbnQtPmlzRm9jdXNhYmxlKCkpIHsKLSAgICAgICAgZXJy
b3JTdHJpbmcgPSAiRWxlbWVudCBmb3IgZ2l2ZW4gbm9kZUlkIGlzIG5vdCBmb2N1c2FibGUiX3M7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChl
cnJvclN0cmluZyk7CisgICAgaWYgKCFlbGVtZW50LT5pc0ZvY3VzYWJsZSgpKQorICAgICAgICBy
ZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkVsZW1lbnQgZm9yIGdpdmVuIG5vZGVJZCBpcyBub3QgZm9j
dXNhYmxlIl9zKTsKKwogICAgIGVsZW1lbnQtPmZvY3VzKCk7CisKKyAgICByZXR1cm4geyB9Owog
fQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpzZXRJbnNwZWN0ZWROb2RlKEVycm9yU3RyaW5n
JiBlcnJvclN0cmluZywgaW50IG5vZGVJZCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+
IEluc3BlY3RvckRPTUFnZW50OjpzZXRJbnNwZWN0ZWROb2RlKFByb3RvY29sOjpET006Ok5vZGVJ
ZCBub2RlSWQpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAg
ICAgTm9kZSogbm9kZSA9IGFzc2VydE5vZGUoZXJyb3JTdHJpbmcsIG5vZGVJZCk7CiAgICAgaWYg
KCFub2RlKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChl
cnJvclN0cmluZyk7CiAKLSAgICBpZiAobm9kZS0+aXNJblVzZXJBZ2VudFNoYWRvd1RyZWUoKSAm
JiAhbV9hbGxvd0VkaXRpbmdVc2VyQWdlbnRTaGFkb3dUcmVlcykgewotICAgICAgICBlcnJvclN0
cmluZyA9ICJOb2RlIGZvciBnaXZlbiBub2RlSWQgaXMgaW4gYSBzaGFkb3cgdHJlZSJfczsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAobm9kZS0+aXNJblVzZXJBZ2VudFNoYWRvd1Ry
ZWUoKSAmJiAhbV9hbGxvd0VkaXRpbmdVc2VyQWdlbnRTaGFkb3dUcmVlcykKKyAgICAgICAgcmV0
dXJuIG1ha2VVbmV4cGVjdGVkKCJOb2RlIGZvciBnaXZlbiBub2RlSWQgaXMgaW4gYSBzaGFkb3cg
dHJlZSJfcyk7CiAKICAgICBtX2luc3BlY3RlZE5vZGUgPSBub2RlOwogCkBAIC0xNDk4LDM4ICsx
NTU2LDQ5IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNldEluc3BlY3RlZE5vZGUoRXJyb3JT
dHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkKQogICAgICAgICBjb21tYW5kTGluZUFQSUhv
c3QtPmFkZEluc3BlY3RlZE9iamVjdChtYWtlVW5pcXVlPEluc3BlY3RhYmxlTm9kZT4obm9kZSkp
OwogCiAgICAgbV9zdXBwcmVzc0V2ZW50TGlzdGVuZXJDaGFuZ2VkRXZlbnQgPSBmYWxzZTsKKwor
ICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnJlc29sdmVOb2Rl
KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJZCwgY29uc3QgU3RyaW5nKiBvYmpl
Y3RHcm91cCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVj
dD4mIHJlc3VsdCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxQcm90b2NvbDo6UnVudGlt
ZTo6UmVtb3RlT2JqZWN0Pj4gSW5zcGVjdG9yRE9NQWdlbnQ6OnJlc29sdmVOb2RlKFByb3RvY29s
OjpET006Ok5vZGVJZCBub2RlSWQsIGNvbnN0IFN0cmluZyYgb2JqZWN0R3JvdXApCiB7Ci0gICAg
U3RyaW5nIG9iamVjdEdyb3VwTmFtZSA9IG9iamVjdEdyb3VwID8gKm9iamVjdEdyb3VwIDogZW1w
dHlTdHJpbmcoKTsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAg
ICBOb2RlKiBub2RlID0gYXNzZXJ0Tm9kZShlcnJvclN0cmluZywgbm9kZUlkKTsKICAgICBpZiAo
IW5vZGUpCi0gICAgICAgIHJldHVybjsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
UnVudGltZTo6UmVtb3RlT2JqZWN0PiBvYmplY3QgPSByZXNvbHZlTm9kZShub2RlLCBvYmplY3RH
cm91cE5hbWUpOwotICAgIGlmICghb2JqZWN0KSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIk1p
c3NpbmcgaW5qZWN0ZWQgc2NyaXB0IGZvciBnaXZlbiBub2RlSWQiX3M7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0gICAgcmVzdWx0ID0gb2JqZWN0OworICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoZXJyb3JTdHJpbmcpOworCisgICAgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1v
dGVPYmplY3Q+IG9iamVjdCA9IHJlc29sdmVOb2RlKG5vZGUsIG9iamVjdEdyb3VwKTsKKyAgICBp
ZiAoIW9iamVjdCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJNaXNzaW5nIGluamVj
dGVkIHNjcmlwdCBmb3IgZ2l2ZW4gbm9kZUlkIl9zKTsKKworICAgIHJldHVybiBvYmplY3QucmVs
ZWFzZU5vbk51bGwoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Z2V0QXR0cmlidXRl
cyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQsIFJlZlB0cjxKU09OOjpBcnJh
eU9mPFN0cmluZz4+JiByZXN1bHQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SlNPTjo6
QXJyYXlPZjxTdHJpbmc+Pj4gSW5zcGVjdG9yRE9NQWdlbnQ6OmdldEF0dHJpYnV0ZXMoUHJvdG9j
b2w6OkRPTTo6Tm9kZUlkIG5vZGVJZCkKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJy
b3JTdHJpbmc7CisKICAgICBFbGVtZW50KiBlbGVtZW50ID0gYXNzZXJ0RWxlbWVudChlcnJvclN0
cmluZywgbm9kZUlkKTsKICAgICBpZiAoIWVsZW1lbnQpCi0gICAgICAgIHJldHVybjsKKyAgICAg
ICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAotICAgIHJlc3VsdCA9IGJ1
aWxkQXJyYXlGb3JFbGVtZW50QXR0cmlidXRlcyhlbGVtZW50KTsKKyAgICByZXR1cm4gYnVpbGRB
cnJheUZvckVsZW1lbnRBdHRyaWJ1dGVzKGVsZW1lbnQpOwogfQogCi12b2lkIEluc3BlY3RvckRP
TUFnZW50OjpyZXF1ZXN0Tm9kZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmlu
ZyYgb2JqZWN0SWQsIGludCogbm9kZUlkKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UHJvdG9j
b2w6OkRPTTo6Tm9kZUlkPiBJbnNwZWN0b3JET01BZ2VudDo6cmVxdWVzdE5vZGUoY29uc3QgUHJv
dG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdElkJiBvYmplY3RJZCkKIHsKKyAgICBQcm90b2Nv
bDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBOb2RlKiBub2RlID0gbm9kZUZvck9i
amVjdElkKG9iamVjdElkKTsKLSAgICBpZiAobm9kZSkKLSAgICAgICAgKm5vZGVJZCA9IHB1c2hO
b2RlUGF0aFRvRnJvbnRlbmQoZXJyb3JTdHJpbmcsIG5vZGUpOwotICAgIGVsc2UKLSAgICAgICAg
Km5vZGVJZCA9IDA7CisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0
ZWQoIk1pc3Npbmcgbm9kZSBmb3IgZ2l2ZW4gb2JqZWN0SWQiX3MpOworCisgICAgYXV0byBub2Rl
SWQgPSBwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKGVycm9yU3RyaW5nLCBub2RlKTsKKyAgICBpZiAo
IW5vZGVJZCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKKwor
ICAgIHJldHVybiBub2RlSWQ7CiB9CiAKIFN0cmluZyBJbnNwZWN0b3JET01BZ2VudDo6ZG9jdW1l
bnRVUkxTdHJpbmcoRG9jdW1lbnQqIGRvY3VtZW50KQpAQCAtMTU0NCw0NCArMTYxMyw0NCBAQCBz
dGF0aWMgU3RyaW5nIGRvY3VtZW50QmFzZVVSTFN0cmluZyhEb2N1bWVudCogZG9jdW1lbnQpCiAg
ICAgcmV0dXJuIGRvY3VtZW50LT5jb21wbGV0ZVVSTChlbXB0eVN0cmluZygpKS5zdHJpbmcoKTsK
IH0KIAotc3RhdGljIGJvb2wgcHNldWRvRWxlbWVudFR5cGUoUHNldWRvSWQgcHNldWRvSWQsIElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6UHNldWRvVHlwZSogdHlwZSkKK3N0YXRpYyBib29sIHBz
ZXVkb0VsZW1lbnRUeXBlKFBzZXVkb0lkIHBzZXVkb0lkLCBQcm90b2NvbDo6RE9NOjpQc2V1ZG9U
eXBlKiB0eXBlKQogewogICAgIHN3aXRjaCAocHNldWRvSWQpIHsKICAgICBjYXNlIFBzZXVkb0lk
OjpCZWZvcmU6Ci0gICAgICAgICp0eXBlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpQc2V1
ZG9UeXBlOjpCZWZvcmU7CisgICAgICAgICp0eXBlID0gUHJvdG9jb2w6OkRPTTo6UHNldWRvVHlw
ZTo6QmVmb3JlOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBjYXNlIFBzZXVkb0lkOjpBZnRl
cjoKLSAgICAgICAgKnR5cGUgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpET006OlBzZXVkb1R5cGU6
OkFmdGVyOworICAgICAgICAqdHlwZSA9IFByb3RvY29sOjpET006OlBzZXVkb1R5cGU6OkFmdGVy
OwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQogfQogCi1zdGF0aWMgSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpTaGFkb3dS
b290VHlwZSBzaGFkb3dSb290VHlwZShTaGFkb3dSb290TW9kZSBtb2RlKQorc3RhdGljIFByb3Rv
Y29sOjpET006OlNoYWRvd1Jvb3RUeXBlIHNoYWRvd1Jvb3RUeXBlKFNoYWRvd1Jvb3RNb2RlIG1v
ZGUpCiB7CiAgICAgc3dpdGNoIChtb2RlKSB7CiAgICAgY2FzZSBTaGFkb3dSb290TW9kZTo6VXNl
ckFnZW50OgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpTaGFkb3dS
b290VHlwZTo6VXNlckFnZW50OworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OkRPTTo6U2hhZG93
Um9vdFR5cGU6OlVzZXJBZ2VudDsKICAgICBjYXNlIFNoYWRvd1Jvb3RNb2RlOjpDbG9zZWQ6Ci0g
ICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpET006OlNoYWRvd1Jvb3RUeXBlOjpD
bG9zZWQ7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6RE9NOjpTaGFkb3dSb290VHlwZTo6Q2xv
c2VkOwogICAgIGNhc2UgU2hhZG93Um9vdE1vZGU6Ok9wZW46Ci0gICAgICAgIHJldHVybiBJbnNw
ZWN0b3I6OlByb3RvY29sOjpET006OlNoYWRvd1Jvb3RUeXBlOjpPcGVuOworICAgICAgICByZXR1
cm4gUHJvdG9jb2w6OkRPTTo6U2hhZG93Um9vdFR5cGU6Ok9wZW47CiAgICAgfQogCiAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6
U2hhZG93Um9vdFR5cGU6OlVzZXJBZ2VudDsKKyAgICByZXR1cm4gUHJvdG9jb2w6OkRPTTo6U2hh
ZG93Um9vdFR5cGU6OlVzZXJBZ2VudDsKIH0KIAotc3RhdGljIEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRPTTo6Q3VzdG9tRWxlbWVudFN0YXRlIGN1c3RvbUVsZW1lbnRTdGF0ZShjb25zdCBFbGVtZW50
JiBlbGVtZW50KQorc3RhdGljIFByb3RvY29sOjpET006OkN1c3RvbUVsZW1lbnRTdGF0ZSBjdXN0
b21FbGVtZW50U3RhdGUoY29uc3QgRWxlbWVudCYgZWxlbWVudCkKIHsKICAgICBpZiAoZWxlbWVu
dC5pc0RlZmluZWRDdXN0b21FbGVtZW50KCkpCi0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlBy
b3RvY29sOjpET006OkN1c3RvbUVsZW1lbnRTdGF0ZTo6Q3VzdG9tOworICAgICAgICByZXR1cm4g
UHJvdG9jb2w6OkRPTTo6Q3VzdG9tRWxlbWVudFN0YXRlOjpDdXN0b207CiAgICAgaWYgKGVsZW1l
bnQuaXNGYWlsZWRDdXN0b21FbGVtZW50KCkpCi0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlBy
b3RvY29sOjpET006OkN1c3RvbUVsZW1lbnRTdGF0ZTo6RmFpbGVkOworICAgICAgICByZXR1cm4g
UHJvdG9jb2w6OkRPTTo6Q3VzdG9tRWxlbWVudFN0YXRlOjpGYWlsZWQ7CiAgICAgaWYgKGVsZW1l
bnQuaXNVbmRlZmluZWRDdXN0b21FbGVtZW50KCkgfHwgZWxlbWVudC5pc0N1c3RvbUVsZW1lbnRV
cGdyYWRlQ2FuZGlkYXRlKCkpCi0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpE
T006OkN1c3RvbUVsZW1lbnRTdGF0ZTo6V2FpdGluZzsKLSAgICByZXR1cm4gSW5zcGVjdG9yOjpQ
cm90b2NvbDo6RE9NOjpDdXN0b21FbGVtZW50U3RhdGU6OkJ1aWx0aW47CisgICAgICAgIHJldHVy
biBQcm90b2NvbDo6RE9NOjpDdXN0b21FbGVtZW50U3RhdGU6OldhaXRpbmc7CisgICAgcmV0dXJu
IFByb3RvY29sOjpET006OkN1c3RvbUVsZW1lbnRTdGF0ZTo6QnVpbHRpbjsKIH0KIAogc3RhdGlj
IFN0cmluZyBjb21wdXRlQ29udGVudFNlY3VyaXR5UG9saWN5U0hBMjU2SGFzaChjb25zdCBFbGVt
ZW50JiBlbGVtZW50KQpAQCAtMTU5Nyw5ICsxNjY2LDkgQEAgc3RhdGljIFN0cmluZyBjb21wdXRl
Q29udGVudFNlY3VyaXR5UG9saWN5U0hBMjU2SGFzaChjb25zdCBFbGVtZW50JiBlbGVtZW50KQog
ICAgIHJldHVybiBtYWtlU3RyaW5nKCJzaGEyNTYtIiwgYmFzZTY0RW5jb2RlKGRpZ2VzdC5kYXRh
KCksIGRpZ2VzdC5zaXplKCkpKTsKIH0KIAotUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6
Tm9kZT4gSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yTm9kZShOb2RlKiBub2RlLCBp
bnQgZGVwdGgsIE5vZGVUb0lkTWFwKiBub2Rlc01hcCkKK1JlZjxQcm90b2NvbDo6RE9NOjpOb2Rl
PiBJbnNwZWN0b3JET01BZ2VudDo6YnVpbGRPYmplY3RGb3JOb2RlKE5vZGUqIG5vZGUsIGludCBk
ZXB0aCwgTm9kZVRvSWRNYXAqIG5vZGVzTWFwKQogewotICAgIGludCBpZCA9IGJpbmQobm9kZSwg
bm9kZXNNYXApOworICAgIGF1dG8gaWQgPSBiaW5kKG5vZGUsIG5vZGVzTWFwKTsKICAgICBTdHJp
bmcgbm9kZU5hbWU7CiAgICAgU3RyaW5nIGxvY2FsTmFtZTsKICAgICBTdHJpbmcgbm9kZVZhbHVl
OwpAQCAtMTYzMCw3ICsxNjk5LDcgQEAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9k
ZT4gSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yTm9kZShOb2RlKgogICAgICAgICBi
cmVhazsKICAgICB9CiAKLSAgICBhdXRvIHZhbHVlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9N
OjpOb2RlOjpjcmVhdGUoKQorICAgIGF1dG8gdmFsdWUgPSBQcm90b2NvbDo6RE9NOjpOb2RlOjpj
cmVhdGUoKQogICAgICAgICAuc2V0Tm9kZUlkKGlkKQogICAgICAgICAuc2V0Tm9kZVR5cGUoc3Rh
dGljX2Nhc3Q8aW50Pihub2RlLT5ub2RlVHlwZSgpKSkKICAgICAgICAgLnNldE5vZGVOYW1lKG5v
ZGVOYW1lKQpAQCAtMTY0MSw3ICsxNzEwLDcgQEAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRP
TTo6Tm9kZT4gSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yTm9kZShOb2RlKgogICAg
IGlmIChub2RlLT5pc0NvbnRhaW5lck5vZGUoKSkgewogICAgICAgICBpbnQgbm9kZUNvdW50ID0g
aW5uZXJDaGlsZE5vZGVDb3VudChub2RlKTsKICAgICAgICAgdmFsdWUtPnNldENoaWxkTm9kZUNv
dW50KG5vZGVDb3VudCk7Ci0gICAgICAgIFJlZjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRPTTo6Tm9kZT4+IGNoaWxkcmVuID0gYnVpbGRBcnJheUZvckNvbnRhaW5lckNoaWxk
cmVuKG5vZGUsIGRlcHRoLCBub2Rlc01hcCk7CisgICAgICAgIFJlZjxKU09OOjpBcnJheU9mPFBy
b3RvY29sOjpET006Ok5vZGU+PiBjaGlsZHJlbiA9IGJ1aWxkQXJyYXlGb3JDb250YWluZXJDaGls
ZHJlbihub2RlLCBkZXB0aCwgbm9kZXNNYXApOwogICAgICAgICBpZiAoY2hpbGRyZW4tPmxlbmd0
aCgpID4gMCkKICAgICAgICAgICAgIHZhbHVlLT5zZXRDaGlsZHJlbihXVEZNb3ZlKGNoaWxkcmVu
KSk7CiAgICAgfQpAQCAtMTY2MSw3ICsxNzMwLDcgQEAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRPTTo6Tm9kZT4gSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yTm9kZShOb2RlKgog
ICAgICAgICB9CiAKICAgICAgICAgaWYgKFNoYWRvd1Jvb3QqIHJvb3QgPSBlbGVtZW50LnNoYWRv
d1Jvb3QoKSkgewotICAgICAgICAgICAgYXV0byBzaGFkb3dSb290cyA9IEpTT046OkFycmF5T2Y8
SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlPjo6Y3JlYXRlKCk7CisgICAgICAgICAgICBh
dXRvIHNoYWRvd1Jvb3RzID0gSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6RE9NOjpOb2RlPjo6Y3Jl
YXRlKCk7CiAgICAgICAgICAgICBzaGFkb3dSb290cy0+YWRkSXRlbShidWlsZE9iamVjdEZvck5v
ZGUocm9vdCwgMCwgbm9kZXNNYXApKTsKICAgICAgICAgICAgIHZhbHVlLT5zZXRTaGFkb3dSb290
cyhXVEZNb3ZlKHNoYWRvd1Jvb3RzKSk7CiAgICAgICAgIH0KQEAgLTE2NzMsMTYgKzE3NDIsMTYg
QEAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZT4gSW5zcGVjdG9yRE9NQWdlbnQ6
OmJ1aWxkT2JqZWN0Rm9yTm9kZShOb2RlKgogICAgICAgICAgICAgdmFsdWUtPnNldENvbnRlbnRT
ZWN1cml0eVBvbGljeUhhc2goY29tcHV0ZUNvbnRlbnRTZWN1cml0eVBvbGljeVNIQTI1Nkhhc2go
ZWxlbWVudCkpOwogCiAgICAgICAgIGF1dG8gc3RhdGUgPSBjdXN0b21FbGVtZW50U3RhdGUoZWxl
bWVudCk7Ci0gICAgICAgIGlmIChzdGF0ZSAhPSBJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkN1
c3RvbUVsZW1lbnRTdGF0ZTo6QnVpbHRpbikKKyAgICAgICAgaWYgKHN0YXRlICE9IFByb3RvY29s
OjpET006OkN1c3RvbUVsZW1lbnRTdGF0ZTo6QnVpbHRpbikKICAgICAgICAgICAgIHZhbHVlLT5z
ZXRDdXN0b21FbGVtZW50U3RhdGUoc3RhdGUpOwogCiAgICAgICAgIGlmIChlbGVtZW50LnBzZXVk
b0lkKCkgIT0gUHNldWRvSWQ6Ok5vbmUpIHsKLSAgICAgICAgICAgIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRPTTo6UHNldWRvVHlwZSBwc2V1ZG9UeXBlOworICAgICAgICAgICAgUHJvdG9jb2w6OkRP
TTo6UHNldWRvVHlwZSBwc2V1ZG9UeXBlOwogICAgICAgICAgICAgaWYgKHBzZXVkb0VsZW1lbnRU
eXBlKGVsZW1lbnQucHNldWRvSWQoKSwgJnBzZXVkb1R5cGUpKQogICAgICAgICAgICAgICAgIHZh
bHVlLT5zZXRQc2V1ZG9UeXBlKHBzZXVkb1R5cGUpOwogICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgaWYgKGF1dG8gcHNldWRvRWxlbWVudHMgPSBidWlsZEFycmF5Rm9yUHNldWRvRWxlbWVu
dHMoZWxlbWVudCwgbm9kZXNNYXApKQotICAgICAgICAgICAgICAgIHZhbHVlLT5zZXRQc2V1ZG9F
bGVtZW50cyhXVEZNb3ZlKHBzZXVkb0VsZW1lbnRzKSk7CisgICAgICAgICAgICAgICAgdmFsdWUt
PnNldFBzZXVkb0VsZW1lbnRzKHBzZXVkb0VsZW1lbnRzLnJlbGVhc2VOb25OdWxsKCkpOwogICAg
ICAgICB9CiAgICAgfSBlbHNlIGlmIChpczxEb2N1bWVudD4oKm5vZGUpKSB7CiAgICAgICAgIERv
Y3VtZW50JiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50Pigqbm9kZSk7CkBAIC0xNzIxLDkg
KzE3OTAsOSBAQCBSZWY8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiBJbnNwZWN0b3JET01BZ2VudDo6
YnVpbGRBcnJheUZvckVsZW1lbnRBdHRyaWJ1dGVzKEVsZQogICAgIHJldHVybiBhdHRyaWJ1dGVz
VmFsdWU7CiB9CiAKLVJlZjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6
Tm9kZT4+IEluc3BlY3RvckRPTUFnZW50OjpidWlsZEFycmF5Rm9yQ29udGFpbmVyQ2hpbGRyZW4o
Tm9kZSogY29udGFpbmVyLCBpbnQgZGVwdGgsIE5vZGVUb0lkTWFwKiBub2Rlc01hcCkKK1JlZjxK
U09OOjpBcnJheU9mPFByb3RvY29sOjpET006Ok5vZGU+PiBJbnNwZWN0b3JET01BZ2VudDo6YnVp
bGRBcnJheUZvckNvbnRhaW5lckNoaWxkcmVuKE5vZGUqIGNvbnRhaW5lciwgaW50IGRlcHRoLCBO
b2RlVG9JZE1hcCogbm9kZXNNYXApCiB7Ci0gICAgYXV0byBjaGlsZHJlbiA9IEpTT046OkFycmF5
T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlPjo6Y3JlYXRlKCk7CisgICAgYXV0byBj
aGlsZHJlbiA9IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkRPTTo6Tm9kZT46OmNyZWF0ZSgpOwog
ICAgIGlmIChkZXB0aCA9PSAwKSB7CiAgICAgICAgIC8vIFNwZWNpYWwtY2FzZSB0aGUgb25seSB0
ZXh0IGNoaWxkIC0gcHJldGVuZCB0aGF0IGNvbnRhaW5lcidzIGNoaWxkcmVuIGhhdmUgYmVlbiBy
ZXF1ZXN0ZWQuCiAgICAgICAgIE5vZGUqIGZpcnN0Q2hpbGQgPSBjb250YWluZXItPmZpcnN0Q2hp
bGQoKTsKQEAgLTE3NDUsMTQgKzE4MTQsMTQgQEAgUmVmPEpTT046OkFycmF5T2Y8SW5zcGVjdG9y
OjpQcm90b2NvbDo6RE9NOjpOb2RlPj4gSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkQXJyYXkKICAg
ICByZXR1cm4gY2hpbGRyZW47CiB9CiAKLVJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRPTTo6Tm9kZT4+IEluc3BlY3RvckRPTUFnZW50OjpidWlsZEFycmF5Rm9yUHNl
dWRvRWxlbWVudHMoY29uc3QgRWxlbWVudCYgZWxlbWVudCwgTm9kZVRvSWRNYXAqIG5vZGVzTWFw
KQorUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkRPTTo6Tm9kZT4+IEluc3BlY3RvckRP
TUFnZW50OjpidWlsZEFycmF5Rm9yUHNldWRvRWxlbWVudHMoY29uc3QgRWxlbWVudCYgZWxlbWVu
dCwgTm9kZVRvSWRNYXAqIG5vZGVzTWFwKQogewogICAgIFBzZXVkb0VsZW1lbnQqIGJlZm9yZUVs
ZW1lbnQgPSBlbGVtZW50LmJlZm9yZVBzZXVkb0VsZW1lbnQoKTsKICAgICBQc2V1ZG9FbGVtZW50
KiBhZnRlckVsZW1lbnQgPSBlbGVtZW50LmFmdGVyUHNldWRvRWxlbWVudCgpOwogICAgIGlmICgh
YmVmb3JlRWxlbWVudCAmJiAhYWZ0ZXJFbGVtZW50KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
IAotICAgIGF1dG8gcHNldWRvRWxlbWVudHMgPSBKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRPTTo6Tm9kZT46OmNyZWF0ZSgpOworICAgIGF1dG8gcHNldWRvRWxlbWVudHMgPSBK
U09OOjpBcnJheU9mPFByb3RvY29sOjpET006Ok5vZGU+OjpjcmVhdGUoKTsKICAgICBpZiAoYmVm
b3JlRWxlbWVudCkKICAgICAgICAgcHNldWRvRWxlbWVudHMtPmFkZEl0ZW0oYnVpbGRPYmplY3RG
b3JOb2RlKGJlZm9yZUVsZW1lbnQsIDAsIG5vZGVzTWFwKSk7CiAgICAgaWYgKGFmdGVyRWxlbWVu
dCkKQEAgLTE3NjAsNyArMTgyOSw3IEBAIFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRPTTo6Tm9kZT4+IEluc3BlY3RvckRPTUFnZW50OjpidWlsZEFyCiAgICAgcmV0
dXJuIHBzZXVkb0VsZW1lbnRzOwogfQogCi1SZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpF
dmVudExpc3RlbmVyPiBJbnNwZWN0b3JET01BZ2VudDo6YnVpbGRPYmplY3RGb3JFdmVudExpc3Rl
bmVyKGNvbnN0IFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyJiByZWdpc3RlcmVkRXZlbnRMaXN0ZW5l
ciwgaW50IGlkZW50aWZpZXIsIEV2ZW50VGFyZ2V0JiBldmVudFRhcmdldCwgY29uc3QgQXRvbVN0
cmluZyYgZXZlbnRUeXBlLCBib29sIGRpc2FibGVkLCBjb25zdCBSZWZQdHI8SlNDOjpCcmVha3Bv
aW50PiYgYnJlYWtwb2ludCkKK1JlZjxQcm90b2NvbDo6RE9NOjpFdmVudExpc3RlbmVyPiBJbnNw
ZWN0b3JET01BZ2VudDo6YnVpbGRPYmplY3RGb3JFdmVudExpc3RlbmVyKGNvbnN0IFJlZ2lzdGVy
ZWRFdmVudExpc3RlbmVyJiByZWdpc3RlcmVkRXZlbnRMaXN0ZW5lciwgUHJvdG9jb2w6OkRPTTo6
RXZlbnRMaXN0ZW5lcklkIGlkZW50aWZpZXIsIEV2ZW50VGFyZ2V0JiBldmVudFRhcmdldCwgY29u
c3QgQXRvbVN0cmluZyYgZXZlbnRUeXBlLCBib29sIGRpc2FibGVkLCBjb25zdCBSZWZQdHI8SlND
OjpCcmVha3BvaW50PiYgYnJlYWtwb2ludCkKIHsKICAgICBSZWY8RXZlbnRMaXN0ZW5lcj4gZXZl
bnRMaXN0ZW5lciA9IHJlZ2lzdGVyZWRFdmVudExpc3RlbmVyLmNhbGxiYWNrKCk7CiAKQEAgLTE4
MjIsNyArMTg5MSw3IEBAIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkV2ZW50TGlzdGVu
ZXI+IEluc3BlY3RvckRPTUFnZW50OjpidWlsZE9iamVjdEZvckV2CiAgICAgICAgIH0KICAgICB9
CiAKLSAgICBhdXRvIHZhbHVlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpFdmVudExpc3Rl
bmVyOjpjcmVhdGUoKQorICAgIGF1dG8gdmFsdWUgPSBQcm90b2NvbDo6RE9NOjpFdmVudExpc3Rl
bmVyOjpjcmVhdGUoKQogICAgICAgICAuc2V0RXZlbnRMaXN0ZW5lcklkKGlkZW50aWZpZXIpCiAg
ICAgICAgIC5zZXRUeXBlKGV2ZW50VHlwZSkKICAgICAgICAgLnNldFVzZUNhcHR1cmUocmVnaXN0
ZXJlZEV2ZW50TGlzdGVuZXIudXNlQ2FwdHVyZSgpKQpAQCAtMTgzMyw3ICsxOTAyLDcgQEAgUmVm
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6RXZlbnRMaXN0ZW5lcj4gSW5zcGVjdG9yRE9NQWdl
bnQ6OmJ1aWxkT2JqZWN0Rm9yRXYKICAgICBlbHNlIGlmIChpczxET01XaW5kb3c+KGV2ZW50VGFy
Z2V0KSkKICAgICAgICAgdmFsdWUtPnNldE9uV2luZG93KHRydWUpOwogICAgIGlmICghc2NyaXB0
SUQuaXNOdWxsKCkpIHsKLSAgICAgICAgYXV0byBsb2NhdGlvbiA9IEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRlYnVnZ2VyOjpMb2NhdGlvbjo6Y3JlYXRlKCkKKyAgICAgICAgYXV0byBsb2NhdGlvbiA9
IFByb3RvY29sOjpEZWJ1Z2dlcjo6TG9jYXRpb246OmNyZWF0ZSgpCiAgICAgICAgICAgICAuc2V0
U2NyaXB0SWQoc2NyaXB0SUQpCiAgICAgICAgICAgICAuc2V0TGluZU51bWJlcihsaW5lTnVtYmVy
KQogICAgICAgICAgICAgLnJlbGVhc2UoKTsKQEAgLTE4NTMsNyArMTkyMiw3IEBAIFJlZjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpET006OkV2ZW50TGlzdGVuZXI+IEluc3BlY3RvckRPTUFnZW50Ojpi
dWlsZE9iamVjdEZvckV2CiAgICAgcmV0dXJuIHZhbHVlOwogfQogCi12b2lkIEluc3BlY3RvckRP
TUFnZW50Ojpwcm9jZXNzQWNjZXNzaWJpbGl0eUNoaWxkcmVuKEFYQ29yZU9iamVjdCYgYXhPYmpl
Y3QsIEpTT046OkFycmF5T2Y8aW50PiYgY2hpbGROb2RlSWRzKQordm9pZCBJbnNwZWN0b3JET01B
Z2VudDo6cHJvY2Vzc0FjY2Vzc2liaWxpdHlDaGlsZHJlbihBWENvcmVPYmplY3QmIGF4T2JqZWN0
LCBKU09OOjpBcnJheU9mPFByb3RvY29sOjpET006Ok5vZGVJZD4mIGNoaWxkTm9kZUlkcykKIHsK
ICAgICBjb25zdCBhdXRvJiBjaGlsZHJlbiA9IGF4T2JqZWN0LmNoaWxkcmVuKCk7CiAgICAgaWYg
KCFjaGlsZHJlbi5zaXplKCkpCkBAIC0xODY3LDQzICsxOTM2LDM5IEBAIHZvaWQgSW5zcGVjdG9y
RE9NQWdlbnQ6OnByb2Nlc3NBY2Nlc3NpYmlsaXR5Q2hpbGRyZW4oQVhDb3JlT2JqZWN0JiBheE9i
amVjdCwgSlNPCiAgICAgfQogfQogICAgIAotUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRP
TTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM+IEluc3BlY3RvckRPTUFnZW50OjpidWlsZE9iamVj
dEZvckFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzKE5vZGUqIG5vZGUpCitSZWY8UHJvdG9jb2w6OkRP
TTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM+IEluc3BlY3RvckRPTUFnZW50OjpidWlsZE9iamVj
dEZvckFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzKE5vZGUmIG5vZGUpCiB7Ci0gICAgQVNTRVJUKG5v
ZGUpOwotICAgIGlmICghbm9kZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KICAgICBpZiAo
IVdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkpCiAgICAgICAg
IFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OmVuYWJsZUFjY2Vzc2liaWxpdHkoKTsKIAogICAgIE5v
ZGUqIGFjdGl2ZURlc2NlbmRhbnROb2RlID0gbnVsbHB0cjsKICAgICBib29sIGJ1c3kgPSBmYWxz
ZTsKLSAgICBhdXRvIGNoZWNrZWQgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2li
aWxpdHlQcm9wZXJ0aWVzOjpDaGVja2VkOjpGYWxzZTsKLSAgICBSZWZQdHI8SlNPTjo6QXJyYXlP
ZjxpbnQ+PiBjaGlsZE5vZGVJZHM7Ci0gICAgUmVmUHRyPEpTT046OkFycmF5T2Y8aW50Pj4gY29u
dHJvbGxlZE5vZGVJZHM7Ci0gICAgYXV0byBjdXJyZW50U3RhdGUgPSBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpDdXJyZW50OjpGYWxzZTsKKyAgICBh
dXRvIGNoZWNrZWQgPSBQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6Q2hl
Y2tlZDo6RmFsc2U7CisgICAgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkRPTTo6Tm9k
ZUlkPj4gY2hpbGROb2RlSWRzOworICAgIFJlZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpE
T006Ok5vZGVJZD4+IGNvbnRyb2xsZWROb2RlSWRzOworICAgIGF1dG8gY3VycmVudFN0YXRlID0g
UHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6OkN1cnJlbnQ6OkZhbHNlOwog
ICAgIGJvb2wgZXhpc3RzID0gZmFsc2U7CiAgICAgYm9vbCBleHBhbmRlZCA9IGZhbHNlOwogICAg
IGJvb2wgZGlzYWJsZWQgPSBmYWxzZTsKLSAgICBSZWZQdHI8SlNPTjo6QXJyYXlPZjxpbnQ+PiBm
bG93ZWROb2RlSWRzOworICAgIFJlZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpET006Ok5v
ZGVJZD4+IGZsb3dlZE5vZGVJZHM7CiAgICAgYm9vbCBmb2N1c2VkID0gZmFsc2U7CiAgICAgYm9v
bCBpZ25vcmVkID0gdHJ1ZTsKICAgICBib29sIGlnbm9yZWRCeURlZmF1bHQgPSBmYWxzZTsKLSAg
ICBhdXRvIGludmFsaWQgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQ
cm9wZXJ0aWVzOjpJbnZhbGlkOjpGYWxzZTsKKyAgICBhdXRvIGludmFsaWQgPSBQcm90b2NvbDo6
RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6SW52YWxpZDo6RmFsc2U7CiAgICAgYm9vbCBo
aWRkZW4gPSBmYWxzZTsKICAgICBTdHJpbmcgbGFiZWw7CiAgICAgYm9vbCBsaXZlUmVnaW9uQXRv
bWljID0gZmFsc2U7CiAgICAgUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4gbGl2ZVJlZ2lv
blJlbGV2YW50OwotICAgIGF1dG8gbGl2ZVJlZ2lvblN0YXR1cyA9IEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6OkxpdmVSZWdpb25TdGF0dXM6Ok9mZjsK
KyAgICBhdXRvIGxpdmVSZWdpb25TdGF0dXMgPSBQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5
UHJvcGVydGllczo6TGl2ZVJlZ2lvblN0YXR1czo6T2ZmOwogICAgIE5vZGUqIG1vdXNlRXZlbnRO
b2RlID0gbnVsbHB0cjsKLSAgICBSZWZQdHI8SlNPTjo6QXJyYXlPZjxpbnQ+PiBvd25lZE5vZGVJ
ZHM7CisgICAgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkRPTTo6Tm9kZUlkPj4gb3du
ZWROb2RlSWRzOwogICAgIE5vZGUqIHBhcmVudE5vZGUgPSBudWxscHRyOwogICAgIGJvb2wgcHJl
c3NlZCA9IGZhbHNlOwogICAgIGJvb2wgcmVhZG9ubHkgPSBmYWxzZTsKICAgICBib29sIHJlcXVp
cmVkID0gZmFsc2U7CiAgICAgU3RyaW5nIHJvbGU7CiAgICAgYm9vbCBzZWxlY3RlZCA9IGZhbHNl
OwotICAgIFJlZlB0cjxKU09OOjpBcnJheU9mPGludD4+IHNlbGVjdGVkQ2hpbGROb2RlSWRzOwor
ICAgIFJlZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpET006Ok5vZGVJZD4+IHNlbGVjdGVk
Q2hpbGROb2RlSWRzOwogICAgIGJvb2wgc3VwcG9ydHNDaGVja2VkID0gZmFsc2U7CiAgICAgYm9v
bCBzdXBwb3J0c0V4cGFuZGVkID0gZmFsc2U7CiAgICAgYm9vbCBzdXBwb3J0c0xpdmVSZWdpb24g
PSBmYWxzZTsKQEAgLTE5MTUsOCArMTk4MCw4IEBAIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29s
OjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzPiBJbnNwZWN0b3JET01BZ2VudDo6YnVpCiAg
ICAgdW5zaWduZWQgaGllcmFyY2hpY2FsTGV2ZWwgPSAwOwogICAgIHVuc2lnbmVkIGxldmVsID0g
MDsKIAotICAgIGlmIChBWE9iamVjdENhY2hlKiBheE9iamVjdENhY2hlID0gbm9kZS0+ZG9jdW1l
bnQoKS5heE9iamVjdENhY2hlKCkpIHsKLSAgICAgICAgaWYgKEFYQ29yZU9iamVjdCogYXhPYmpl
Y3QgPSBheE9iamVjdENhY2hlLT5nZXRPckNyZWF0ZShub2RlKSkgeworICAgIGlmIChBWE9iamVj
dENhY2hlKiBheE9iamVjdENhY2hlID0gbm9kZS5kb2N1bWVudCgpLmF4T2JqZWN0Q2FjaGUoKSkg
eworICAgICAgICBpZiAoQVhDb3JlT2JqZWN0KiBheE9iamVjdCA9IGF4T2JqZWN0Q2FjaGUtPmdl
dE9yQ3JlYXRlKCZub2RlKSkgewogCiAgICAgICAgICAgICBpZiAoQVhDb3JlT2JqZWN0KiBhY3Rp
dmVEZXNjZW5kYW50ID0gYXhPYmplY3QtPmFjdGl2ZURlc2NlbmRhbnQoKSkKICAgICAgICAgICAg
ICAgICBhY3RpdmVEZXNjZW5kYW50Tm9kZSA9IGFjdGl2ZURlc2NlbmRhbnQtPm5vZGUoKTsKQEAg
LTE5MzIsNDcgKzE5OTcsNDkgQEAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6QWNj
ZXNzaWJpbGl0eVByb3BlcnRpZXM+IEluc3BlY3RvckRPTUFnZW50OjpidWkKICAgICAgICAgICAg
IGlmIChzdXBwb3J0c0NoZWNrZWQpIHsKICAgICAgICAgICAgICAgICBBY2Nlc3NpYmlsaXR5QnV0
dG9uU3RhdGUgY2hlY2tWYWx1ZSA9IGF4T2JqZWN0LT5jaGVja2JveE9yUmFkaW9WYWx1ZSgpOyAv
LyBFbGVtZW50IHVzaW5nIGFyaWEtY2hlY2tlZC4KICAgICAgICAgICAgICAgICBpZiAoY2hlY2tW
YWx1ZSA9PSBBY2Nlc3NpYmlsaXR5QnV0dG9uU3RhdGU6Ok9uKQotICAgICAgICAgICAgICAgICAg
ICBjaGVja2VkID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVy
dGllczo6Q2hlY2tlZDo6VHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgY2hlY2tlZCA9IFByb3Rv
Y29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpDaGVja2VkOjpUcnVlOwogICAgICAg
ICAgICAgICAgIGVsc2UgaWYgKGNoZWNrVmFsdWUgPT0gQWNjZXNzaWJpbGl0eUJ1dHRvblN0YXRl
OjpNaXhlZCkKLSAgICAgICAgICAgICAgICAgICAgY2hlY2tlZCA9IEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6OkNoZWNrZWQ6Ok1peGVkOworICAgICAg
ICAgICAgICAgICAgICBjaGVja2VkID0gUHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3Bl
cnRpZXM6OkNoZWNrZWQ6Ok1peGVkOwogICAgICAgICAgICAgICAgIGVsc2UgaWYgKGF4T2JqZWN0
LT5pc0NoZWNrZWQoKSkgLy8gTmF0aXZlIGNoZWNrYm94LgotICAgICAgICAgICAgICAgICAgICBj
aGVja2VkID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGll
czo6Q2hlY2tlZDo6VHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgY2hlY2tlZCA9IFByb3RvY29s
OjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpDaGVja2VkOjpUcnVlOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAoIWF4T2JqZWN0LT5jaGlsZHJlbigp
LmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgIGNoaWxkTm9kZUlkcyA9IEpTT046OkFycmF5
T2Y8aW50Pjo6Y3JlYXRlKCk7CisgICAgICAgICAgICAgICAgY2hpbGROb2RlSWRzID0gSlNPTjo6
QXJyYXlPZjxQcm90b2NvbDo6RE9NOjpOb2RlSWQ+OjpjcmVhdGUoKTsKICAgICAgICAgICAgICAg
ICBwcm9jZXNzQWNjZXNzaWJpbGl0eUNoaWxkcmVuKCpheE9iamVjdCwgKmNoaWxkTm9kZUlkcyk7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIFZlY3RvcjxFbGVtZW50
Kj4gY29udHJvbGxlZEVsZW1lbnRzOwogICAgICAgICAgICAgYXhPYmplY3QtPmVsZW1lbnRzRnJv
bUF0dHJpYnV0ZShjb250cm9sbGVkRWxlbWVudHMsIGFyaWFfY29udHJvbHNBdHRyKTsKICAgICAg
ICAgICAgIGlmIChjb250cm9sbGVkRWxlbWVudHMuc2l6ZSgpKSB7Ci0gICAgICAgICAgICAgICAg
Y29udHJvbGxlZE5vZGVJZHMgPSBKU09OOjpBcnJheU9mPGludD46OmNyZWF0ZSgpOwotICAgICAg
ICAgICAgICAgIGZvciAoRWxlbWVudCogY29udHJvbGxlZEVsZW1lbnQgOiBjb250cm9sbGVkRWxl
bWVudHMpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZWROb2RlSWRzLT5hZGRJdGVtKHB1
c2hOb2RlUGF0aFRvRnJvbnRlbmQoY29udHJvbGxlZEVsZW1lbnQpKTsKKyAgICAgICAgICAgICAg
ICBjb250cm9sbGVkTm9kZUlkcyA9IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkRPTTo6Tm9kZUlk
Pjo6Y3JlYXRlKCk7CisgICAgICAgICAgICAgICAgZm9yIChFbGVtZW50KiBjb250cm9sbGVkRWxl
bWVudCA6IGNvbnRyb2xsZWRFbGVtZW50cykgeworICAgICAgICAgICAgICAgICAgICBpZiAoYXV0
byBjb250cm9sbGVkRWxlbWVudElkID0gcHVzaE5vZGVQYXRoVG9Gcm9udGVuZChjb250cm9sbGVk
RWxlbWVudCkpCisgICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVkTm9kZUlkcy0+YWRk
SXRlbShjb250cm9sbGVkRWxlbWVudElkKTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIHN3aXRjaCAoYXhPYmplY3QtPmN1cnJlbnRT
dGF0ZSgpKSB7CiAgICAgICAgICAgICBjYXNlIEFjY2Vzc2liaWxpdHlDdXJyZW50U3RhdGU6OkZh
bHNlOgotICAgICAgICAgICAgICAgIGN1cnJlbnRTdGF0ZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6OkN1cnJlbnQ6OkZhbHNlOworICAgICAgICAg
ICAgICAgIGN1cnJlbnRTdGF0ZSA9IFByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0
aWVzOjpDdXJyZW50OjpGYWxzZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IGNhc2UgQWNjZXNzaWJpbGl0eUN1cnJlbnRTdGF0ZTo6UGFnZToKLSAgICAgICAgICAgICAgICBj
dXJyZW50U3RhdGUgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9w
ZXJ0aWVzOjpDdXJyZW50OjpQYWdlOworICAgICAgICAgICAgICAgIGN1cnJlbnRTdGF0ZSA9IFBy
b3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpDdXJyZW50OjpQYWdlOwogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBBY2Nlc3NpYmlsaXR5Q3VycmVu
dFN0YXRlOjpTdGVwOgotICAgICAgICAgICAgICAgIGN1cnJlbnRTdGF0ZSA9IEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6OkN1cnJlbnQ6OlN0ZXA7Cisg
ICAgICAgICAgICAgICAgY3VycmVudFN0YXRlID0gUHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0
eVByb3BlcnRpZXM6OkN1cnJlbnQ6OlN0ZXA7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICBjYXNlIEFjY2Vzc2liaWxpdHlDdXJyZW50U3RhdGU6OkxvY2F0aW9uOgotICAgICAg
ICAgICAgICAgIGN1cnJlbnRTdGF0ZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6QWNjZXNz
aWJpbGl0eVByb3BlcnRpZXM6OkN1cnJlbnQ6OkxvY2F0aW9uOworICAgICAgICAgICAgICAgIGN1
cnJlbnRTdGF0ZSA9IFByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpDdXJy
ZW50OjpMb2NhdGlvbjsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2Ug
QWNjZXNzaWJpbGl0eUN1cnJlbnRTdGF0ZTo6RGF0ZToKLSAgICAgICAgICAgICAgICBjdXJyZW50
U3RhdGUgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVz
OjpDdXJyZW50OjpEYXRlOworICAgICAgICAgICAgICAgIGN1cnJlbnRTdGF0ZSA9IFByb3RvY29s
OjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpDdXJyZW50OjpEYXRlOwogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBBY2Nlc3NpYmlsaXR5Q3VycmVudFN0YXRl
OjpUaW1lOgotICAgICAgICAgICAgICAgIGN1cnJlbnRTdGF0ZSA9IEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6OkN1cnJlbnQ6OlRpbWU7CisgICAgICAg
ICAgICAgICAgY3VycmVudFN0YXRlID0gUHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3Bl
cnRpZXM6OkN1cnJlbnQ6OlRpbWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICBjYXNlIEFjY2Vzc2liaWxpdHlDdXJyZW50U3RhdGU6OlRydWU6Ci0gICAgICAgICAgICAgICAg
Y3VycmVudFN0YXRlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJv
cGVydGllczo6Q3VycmVudDo6VHJ1ZTsKKyAgICAgICAgICAgICAgICBjdXJyZW50U3RhdGUgPSBQ
cm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6Q3VycmVudDo6VHJ1ZTsKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KIApAQCAtMTk4NiwxMiArMjA1Mywx
NCBAQCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVy
dGllcz4gSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aQogICAgICAgICAgICAgVmVjdG9yPEVsZW1lbnQq
PiBmbG93ZWRFbGVtZW50czsKICAgICAgICAgICAgIGF4T2JqZWN0LT5lbGVtZW50c0Zyb21BdHRy
aWJ1dGUoZmxvd2VkRWxlbWVudHMsIGFyaWFfZmxvd3RvQXR0cik7CiAgICAgICAgICAgICBpZiAo
Zmxvd2VkRWxlbWVudHMuc2l6ZSgpKSB7Ci0gICAgICAgICAgICAgICAgZmxvd2VkTm9kZUlkcyA9
IEpTT046OkFycmF5T2Y8aW50Pjo6Y3JlYXRlKCk7Ci0gICAgICAgICAgICAgICAgZm9yIChFbGVt
ZW50KiBmbG93ZWRFbGVtZW50IDogZmxvd2VkRWxlbWVudHMpCi0gICAgICAgICAgICAgICAgICAg
IGZsb3dlZE5vZGVJZHMtPmFkZEl0ZW0ocHVzaE5vZGVQYXRoVG9Gcm9udGVuZChmbG93ZWRFbGVt
ZW50KSk7CisgICAgICAgICAgICAgICAgZmxvd2VkTm9kZUlkcyA9IEpTT046OkFycmF5T2Y8UHJv
dG9jb2w6OkRPTTo6Tm9kZUlkPjo6Y3JlYXRlKCk7CisgICAgICAgICAgICAgICAgZm9yIChFbGVt
ZW50KiBmbG93ZWRFbGVtZW50IDogZmxvd2VkRWxlbWVudHMpIHsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKGF1dG8gZmxvd2VkRWxlbWVudElkID0gcHVzaE5vZGVQYXRoVG9Gcm9udGVuZChmbG93
ZWRFbGVtZW50KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGZsb3dlZE5vZGVJZHMtPmFkZEl0
ZW0oZmxvd2VkRWxlbWVudElkKTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChpczxFbGVtZW50Pigqbm9kZSkpIHsKKyAgICAg
ICAgICAgIGlmIChpczxFbGVtZW50Pihub2RlKSkgewogICAgICAgICAgICAgICAgIHN1cHBvcnRz
Rm9jdXNlZCA9IGF4T2JqZWN0LT5jYW5TZXRGb2N1c0F0dHJpYnV0ZSgpOwogICAgICAgICAgICAg
ICAgIGlmIChzdXBwb3J0c0ZvY3VzZWQpCiAgICAgICAgICAgICAgICAgICAgIGZvY3VzZWQgPSBh
eE9iamVjdC0+aXNGb2N1c2VkKCk7CkBAIC0yMDAyLDEzICsyMDcxLDEzIEBAIFJlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzPiBJbnNwZWN0b3JE
T01BZ2VudDo6YnVpCiAgICAgICAgICAgICAKICAgICAgICAgICAgIFN0cmluZyBpbnZhbGlkVmFs
dWUgPSBheE9iamVjdC0+aW52YWxpZFN0YXR1cygpOwogICAgICAgICAgICAgaWYgKGludmFsaWRW
YWx1ZSA9PSAiZmFsc2UiKQotICAgICAgICAgICAgICAgIGludmFsaWQgPSBJbnNwZWN0b3I6OlBy
b3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpJbnZhbGlkOjpGYWxzZTsKKyAg
ICAgICAgICAgICAgICBpbnZhbGlkID0gUHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3Bl
cnRpZXM6OkludmFsaWQ6OkZhbHNlOwogICAgICAgICAgICAgZWxzZSBpZiAoaW52YWxpZFZhbHVl
ID09ICJncmFtbWFyIikKLSAgICAgICAgICAgICAgICBpbnZhbGlkID0gSW5zcGVjdG9yOjpQcm90
b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6SW52YWxpZDo6R3JhbW1hcjsKKyAg
ICAgICAgICAgICAgICBpbnZhbGlkID0gUHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3Bl
cnRpZXM6OkludmFsaWQ6OkdyYW1tYXI7CiAgICAgICAgICAgICBlbHNlIGlmIChpbnZhbGlkVmFs
dWUgPT0gInNwZWxsaW5nIikKLSAgICAgICAgICAgICAgICBpbnZhbGlkID0gSW5zcGVjdG9yOjpQ
cm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6SW52YWxpZDo6U3BlbGxpbmc7
CisgICAgICAgICAgICAgICAgaW52YWxpZCA9IFByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQ
cm9wZXJ0aWVzOjpJbnZhbGlkOjpTcGVsbGluZzsKICAgICAgICAgICAgIGVsc2UgLy8gRnV0dXJl
IHZlcnNpb25zIG9mIEFSSUEgbWF5IGFsbG93IGFkZGl0aW9uYWwgdHJ1dGh5IHZhbHVlcy4gRXgu
IGZvcm1hdCwgb3JkZXIsIG9yIHNpemUuCi0gICAgICAgICAgICAgICAgaW52YWxpZCA9IEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6OkludmFsaWQ6OlRy
dWU7CisgICAgICAgICAgICAgICAgaW52YWxpZCA9IFByb3RvY29sOjpET006OkFjY2Vzc2liaWxp
dHlQcm9wZXJ0aWVzOjpJbnZhbGlkOjpUcnVlOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBp
ZiAoYXhPYmplY3QtPmlzQVhIaWRkZW4oKSB8fCBheE9iamVjdC0+aXNET01IaWRkZW4oKSkKICAg
ICAgICAgICAgICAgICBoaWRkZW4gPSB0cnVlOwpAQCAtMjAyMiw5ICsyMDkxLDkgQEAgUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM+IEluc3Bl
Y3RvckRPTUFnZW50OjpidWkKICAgICAgICAgICAgICAgICBTdHJpbmcgYXJpYVJlbGV2YW50QXR0
clZhbHVlID0gYXhPYmplY3QtPmxpdmVSZWdpb25SZWxldmFudCgpOwogICAgICAgICAgICAgICAg
IGlmICghYXJpYVJlbGV2YW50QXR0clZhbHVlLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAg
ICAgICAvLyBGSVhNRTogUGFzcyBlbnVtIHZhbHVlcyByYXRoZXIgdGhhbiBzdHJpbmdzIG9uY2Ug
dW5ibG9ja2VkLiBodHRwOi8vd2Via2l0Lm9yZy9iLzEzMzcxMQotICAgICAgICAgICAgICAgICAg
ICBTdHJpbmcgYXJpYVJlbGV2YW50QWRkaXRpb25zID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6SW5z
cGVjdG9ySGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUoSW5zcGVjdG9yOjpQcm90b2NvbDo6
RE9NOjpMaXZlUmVnaW9uUmVsZXZhbnQ6OkFkZGl0aW9ucyk7Ci0gICAgICAgICAgICAgICAgICAg
IFN0cmluZyBhcmlhUmVsZXZhbnRSZW1vdmFscyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6Okluc3Bl
Y3RvckhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRP
TTo6TGl2ZVJlZ2lvblJlbGV2YW50OjpSZW1vdmFscyk7Ci0gICAgICAgICAgICAgICAgICAgIFN0
cmluZyBhcmlhUmVsZXZhbnRUZXh0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6SW5zcGVjdG9ySGVs
cGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUoSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpMaXZl
UmVnaW9uUmVsZXZhbnQ6OlRleHQpOworICAgICAgICAgICAgICAgICAgICBTdHJpbmcgYXJpYVJl
bGV2YW50QWRkaXRpb25zID0gUHJvdG9jb2w6OkhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVl
KFByb3RvY29sOjpET006OkxpdmVSZWdpb25SZWxldmFudDo6QWRkaXRpb25zKTsKKyAgICAgICAg
ICAgICAgICAgICAgU3RyaW5nIGFyaWFSZWxldmFudFJlbW92YWxzID0gUHJvdG9jb2w6OkhlbHBl
cnM6OmdldEVudW1Db25zdGFudFZhbHVlKFByb3RvY29sOjpET006OkxpdmVSZWdpb25SZWxldmFu
dDo6UmVtb3ZhbHMpOworICAgICAgICAgICAgICAgICAgICBTdHJpbmcgYXJpYVJlbGV2YW50VGV4
dCA9IFByb3RvY29sOjpIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShQcm90b2NvbDo6RE9N
OjpMaXZlUmVnaW9uUmVsZXZhbnQ6OlRleHQpOwogICAgICAgICAgICAgICAgICAgICBsaXZlUmVn
aW9uUmVsZXZhbnQgPSBKU09OOjpBcnJheU9mPFN0cmluZz46OmNyZWF0ZSgpOwogICAgICAgICAg
ICAgICAgICAgICBjb25zdCBTcGFjZVNwbGl0U3RyaW5nJiB2YWx1ZXMgPSBTcGFjZVNwbGl0U3Ry
aW5nKGFyaWFSZWxldmFudEF0dHJWYWx1ZSwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgIC8v
IEBhcmlhLXJlbGV2YW50PSJhbGwiIGlzIGV4cG9zZWQgYXMgWyJhZGRpdGlvbnMiLCJyZW1vdmFs
cyIsInRleHQiXSwgaW4gb3JkZXIuCkBAIC0yMDQ1LDkgKzIxMTQsOSBAQCBSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllcz4gSW5zcGVjdG9yRE9N
QWdlbnQ6OmJ1aQogCiAgICAgICAgICAgICAgICAgU3RyaW5nIGFyaWFMaXZlID0gYXhPYmplY3Qt
PmxpdmVSZWdpb25TdGF0dXMoKTsKICAgICAgICAgICAgICAgICBpZiAoYXJpYUxpdmUgPT0gImFz
c2VydGl2ZSIpCi0gICAgICAgICAgICAgICAgICAgIGxpdmVSZWdpb25TdGF0dXMgPSBJbnNwZWN0
b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpMaXZlUmVnaW9uU3Rh
dHVzOjpBc3NlcnRpdmU7CisgICAgICAgICAgICAgICAgICAgIGxpdmVSZWdpb25TdGF0dXMgPSBQ
cm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6TGl2ZVJlZ2lvblN0YXR1czo6
QXNzZXJ0aXZlOwogICAgICAgICAgICAgICAgIGVsc2UgaWYgKGFyaWFMaXZlID09ICJwb2xpdGUi
KQotICAgICAgICAgICAgICAgICAgICBsaXZlUmVnaW9uU3RhdHVzID0gSW5zcGVjdG9yOjpQcm90
b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6TGl2ZVJlZ2lvblN0YXR1czo6UG9s
aXRlOworICAgICAgICAgICAgICAgICAgICBsaXZlUmVnaW9uU3RhdHVzID0gUHJvdG9jb2w6OkRP
TTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6OkxpdmVSZWdpb25TdGF0dXM6OlBvbGl0ZTsKICAg
ICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKGlzPEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0
PigqYXhPYmplY3QpKQpAQCAtMjA1Nyw5ICsyMTI2LDExIEBAIFJlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzPiBJbnNwZWN0b3JET01BZ2VudDo6
YnVpCiAgICAgICAgICAgICAgICAgVmVjdG9yPEVsZW1lbnQqPiBvd25lZEVsZW1lbnRzOwogICAg
ICAgICAgICAgICAgIGF4T2JqZWN0LT5lbGVtZW50c0Zyb21BdHRyaWJ1dGUob3duZWRFbGVtZW50
cywgYXJpYV9vd25zQXR0cik7CiAgICAgICAgICAgICAgICAgaWYgKG93bmVkRWxlbWVudHMuc2l6
ZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG93bmVkTm9kZUlkcyA9IEpTT046OkFycmF5T2Y8
aW50Pjo6Y3JlYXRlKCk7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoRWxlbWVudCogb3duZWRF
bGVtZW50IDogb3duZWRFbGVtZW50cykKLSAgICAgICAgICAgICAgICAgICAgICAgIG93bmVkTm9k
ZUlkcy0+YWRkSXRlbShwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKG93bmVkRWxlbWVudCkpOworICAg
ICAgICAgICAgICAgICAgICBvd25lZE5vZGVJZHMgPSBKU09OOjpBcnJheU9mPFByb3RvY29sOjpE
T006Ok5vZGVJZD46OmNyZWF0ZSgpOworICAgICAgICAgICAgICAgICAgICBmb3IgKEVsZW1lbnQq
IG93bmVkRWxlbWVudCA6IG93bmVkRWxlbWVudHMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChhdXRvIG93bmVkRWxlbWVudElkID0gcHVzaE5vZGVQYXRoVG9Gcm9udGVuZChvd25lZEVs
ZW1lbnQpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG93bmVkTm9kZUlkcy0+YWRkSXRl
bShvd25lZEVsZW1lbnRJZCk7CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICB9CiAKQEAgLTIwODMsMTAgKzIxNTQsMTIgQEAgUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM+IEluc3BlY3RvckRP
TUFnZW50OjpidWkKICAgICAgICAgICAgIEFYQ29yZU9iamVjdDo6QWNjZXNzaWJpbGl0eUNoaWxk
cmVuVmVjdG9yIHNlbGVjdGVkQ2hpbGRyZW47CiAgICAgICAgICAgICBheE9iamVjdC0+c2VsZWN0
ZWRDaGlsZHJlbihzZWxlY3RlZENoaWxkcmVuKTsKICAgICAgICAgICAgIGlmIChzZWxlY3RlZENo
aWxkcmVuLnNpemUoKSkgewotICAgICAgICAgICAgICAgIHNlbGVjdGVkQ2hpbGROb2RlSWRzID0g
SlNPTjo6QXJyYXlPZjxpbnQ+OjpjcmVhdGUoKTsKKyAgICAgICAgICAgICAgICBzZWxlY3RlZENo
aWxkTm9kZUlkcyA9IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkRPTTo6Tm9kZUlkPjo6Y3JlYXRl
KCk7CiAgICAgICAgICAgICAgICAgZm9yIChhdXRvJiBzZWxlY3RlZENoaWxkT2JqZWN0IDogc2Vs
ZWN0ZWRDaGlsZHJlbikgewotICAgICAgICAgICAgICAgICAgICBpZiAoTm9kZSogc2VsZWN0ZWRD
aGlsZE5vZGUgPSBzZWxlY3RlZENoaWxkT2JqZWN0LT5ub2RlKCkpCi0gICAgICAgICAgICAgICAg
ICAgICAgICBzZWxlY3RlZENoaWxkTm9kZUlkcy0+YWRkSXRlbShwdXNoTm9kZVBhdGhUb0Zyb250
ZW5kKHNlbGVjdGVkQ2hpbGROb2RlKSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChOb2RlKiBz
ZWxlY3RlZENoaWxkTm9kZSA9IHNlbGVjdGVkQ2hpbGRPYmplY3QtPm5vZGUoKSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKGF1dG8gc2VsZWN0ZWRDaGlsZE5vZGVJZCA9IHB1c2hOb2Rl
UGF0aFRvRnJvbnRlbmQoc2VsZWN0ZWRDaGlsZE5vZGUpKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNlbGVjdGVkQ2hpbGROb2RlSWRzLT5hZGRJdGVtKHNlbGVjdGVkQ2hpbGROb2RlSWQp
OworICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
fQogICAgICAgICAgICAgCkBAIC0yMDk4LDU0ICsyMTcxLDYwIEBAIFJlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzPiBJbnNwZWN0b3JET01BZ2Vu
dDo6YnVpCiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgUmVmPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM+IHZhbHVlID0gSW5zcGVjdG9yOjpQcm90
b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6Y3JlYXRlKCkKKyAgICBSZWY8UHJv
dG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM+IHZhbHVlID0gUHJvdG9jb2w6OkRP
TTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRFeGlzdHMo
ZXhpc3RzKQogICAgICAgICAuc2V0TGFiZWwobGFiZWwpCiAgICAgICAgIC5zZXRSb2xlKHJvbGUp
Ci0gICAgICAgIC5zZXROb2RlSWQocHVzaE5vZGVQYXRoVG9Gcm9udGVuZChub2RlKSkKKyAgICAg
ICAgLnNldE5vZGVJZChwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKCZub2RlKSkKICAgICAgICAgLnJl
bGVhc2UoKTsKIAogICAgIGlmIChleGlzdHMpIHsKLSAgICAgICAgaWYgKGFjdGl2ZURlc2NlbmRh
bnROb2RlKQotICAgICAgICAgICAgdmFsdWUtPnNldEFjdGl2ZURlc2NlbmRhbnROb2RlSWQocHVz
aE5vZGVQYXRoVG9Gcm9udGVuZChhY3RpdmVEZXNjZW5kYW50Tm9kZSkpOworICAgICAgICBpZiAo
YWN0aXZlRGVzY2VuZGFudE5vZGUpIHsKKyAgICAgICAgICAgIGlmIChhdXRvIGFjdGl2ZURlc2Nl
bmRhbnROb2RlSWQgPSBwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKGFjdGl2ZURlc2NlbmRhbnROb2Rl
KSkKKyAgICAgICAgICAgICAgICB2YWx1ZS0+c2V0QWN0aXZlRGVzY2VuZGFudE5vZGVJZChhY3Rp
dmVEZXNjZW5kYW50Tm9kZUlkKTsKKyAgICAgICAgfQogICAgICAgICBpZiAoYnVzeSkKICAgICAg
ICAgICAgIHZhbHVlLT5zZXRCdXN5KGJ1c3kpOwogICAgICAgICBpZiAoc3VwcG9ydHNDaGVja2Vk
KQogICAgICAgICAgICAgdmFsdWUtPnNldENoZWNrZWQoY2hlY2tlZCk7CiAgICAgICAgIGlmIChj
aGlsZE5vZGVJZHMpCi0gICAgICAgICAgICB2YWx1ZS0+c2V0Q2hpbGROb2RlSWRzKGNoaWxkTm9k
ZUlkcyk7CisgICAgICAgICAgICB2YWx1ZS0+c2V0Q2hpbGROb2RlSWRzKGNoaWxkTm9kZUlkcy5y
ZWxlYXNlTm9uTnVsbCgpKTsKICAgICAgICAgaWYgKGNvbnRyb2xsZWROb2RlSWRzKQotICAgICAg
ICAgICAgdmFsdWUtPnNldENvbnRyb2xsZWROb2RlSWRzKGNvbnRyb2xsZWROb2RlSWRzKTsKLSAg
ICAgICAgaWYgKGN1cnJlbnRTdGF0ZSAhPSBJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkFjY2Vz
c2liaWxpdHlQcm9wZXJ0aWVzOjpDdXJyZW50OjpGYWxzZSkKKyAgICAgICAgICAgIHZhbHVlLT5z
ZXRDb250cm9sbGVkTm9kZUlkcyhjb250cm9sbGVkTm9kZUlkcy5yZWxlYXNlTm9uTnVsbCgpKTsK
KyAgICAgICAgaWYgKGN1cnJlbnRTdGF0ZSAhPSBQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5
UHJvcGVydGllczo6Q3VycmVudDo6RmFsc2UpCiAgICAgICAgICAgICB2YWx1ZS0+c2V0Q3VycmVu
dChjdXJyZW50U3RhdGUpOwogICAgICAgICBpZiAoZGlzYWJsZWQpCiAgICAgICAgICAgICB2YWx1
ZS0+c2V0RGlzYWJsZWQoZGlzYWJsZWQpOwogICAgICAgICBpZiAoc3VwcG9ydHNFeHBhbmRlZCkK
ICAgICAgICAgICAgIHZhbHVlLT5zZXRFeHBhbmRlZChleHBhbmRlZCk7CiAgICAgICAgIGlmIChm
bG93ZWROb2RlSWRzKQotICAgICAgICAgICAgdmFsdWUtPnNldEZsb3dlZE5vZGVJZHMoZmxvd2Vk
Tm9kZUlkcyk7CisgICAgICAgICAgICB2YWx1ZS0+c2V0Rmxvd2VkTm9kZUlkcyhmbG93ZWROb2Rl
SWRzLnJlbGVhc2VOb25OdWxsKCkpOwogICAgICAgICBpZiAoc3VwcG9ydHNGb2N1c2VkKQogICAg
ICAgICAgICAgdmFsdWUtPnNldEZvY3VzZWQoZm9jdXNlZCk7CiAgICAgICAgIGlmIChpZ25vcmVk
KQogICAgICAgICAgICAgdmFsdWUtPnNldElnbm9yZWQoaWdub3JlZCk7CiAgICAgICAgIGlmIChp
Z25vcmVkQnlEZWZhdWx0KQogICAgICAgICAgICAgdmFsdWUtPnNldElnbm9yZWRCeURlZmF1bHQo
aWdub3JlZEJ5RGVmYXVsdCk7Ci0gICAgICAgIGlmIChpbnZhbGlkICE9IEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6OkludmFsaWQ6OkZhbHNlKQorICAg
ICAgICBpZiAoaW52YWxpZCAhPSBQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGll
czo6SW52YWxpZDo6RmFsc2UpCiAgICAgICAgICAgICB2YWx1ZS0+c2V0SW52YWxpZChpbnZhbGlk
KTsKICAgICAgICAgaWYgKGhpZGRlbikKICAgICAgICAgICAgIHZhbHVlLT5zZXRIaWRkZW4oaGlk
ZGVuKTsKICAgICAgICAgaWYgKHN1cHBvcnRzTGl2ZVJlZ2lvbikgewogICAgICAgICAgICAgdmFs
dWUtPnNldExpdmVSZWdpb25BdG9taWMobGl2ZVJlZ2lvbkF0b21pYyk7CiAgICAgICAgICAgICBp
ZiAobGl2ZVJlZ2lvblJlbGV2YW50LT5sZW5ndGgoKSkKLSAgICAgICAgICAgICAgICB2YWx1ZS0+
c2V0TGl2ZVJlZ2lvblJlbGV2YW50KGxpdmVSZWdpb25SZWxldmFudCk7CisgICAgICAgICAgICAg
ICAgdmFsdWUtPnNldExpdmVSZWdpb25SZWxldmFudChsaXZlUmVnaW9uUmVsZXZhbnQucmVsZWFz
ZU5vbk51bGwoKSk7CiAgICAgICAgICAgICB2YWx1ZS0+c2V0TGl2ZVJlZ2lvblN0YXR1cyhsaXZl
UmVnaW9uU3RhdHVzKTsKICAgICAgICAgfQotICAgICAgICBpZiAobW91c2VFdmVudE5vZGUpCi0g
ICAgICAgICAgICB2YWx1ZS0+c2V0TW91c2VFdmVudE5vZGVJZChwdXNoTm9kZVBhdGhUb0Zyb250
ZW5kKG1vdXNlRXZlbnROb2RlKSk7CisgICAgICAgIGlmIChtb3VzZUV2ZW50Tm9kZSkgeworICAg
ICAgICAgICAgaWYgKGF1dG8gbW91c2VFdmVudE5vZGVJZCA9IHB1c2hOb2RlUGF0aFRvRnJvbnRl
bmQobW91c2VFdmVudE5vZGUpKQorICAgICAgICAgICAgICAgIHZhbHVlLT5zZXRNb3VzZUV2ZW50
Tm9kZUlkKG1vdXNlRXZlbnROb2RlSWQpOworICAgICAgICB9CiAgICAgICAgIGlmIChvd25lZE5v
ZGVJZHMpCi0gICAgICAgICAgICB2YWx1ZS0+c2V0T3duZWROb2RlSWRzKG93bmVkTm9kZUlkcyk7
Ci0gICAgICAgIGlmIChwYXJlbnROb2RlKQotICAgICAgICAgICAgdmFsdWUtPnNldFBhcmVudE5v
ZGVJZChwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKHBhcmVudE5vZGUpKTsKKyAgICAgICAgICAgIHZh
bHVlLT5zZXRPd25lZE5vZGVJZHMob3duZWROb2RlSWRzLnJlbGVhc2VOb25OdWxsKCkpOworICAg
ICAgICBpZiAocGFyZW50Tm9kZSkgeworICAgICAgICAgICAgaWYgKGF1dG8gcGFyZW50Tm9kZUlk
ID0gcHVzaE5vZGVQYXRoVG9Gcm9udGVuZChwYXJlbnROb2RlKSkKKyAgICAgICAgICAgICAgICB2
YWx1ZS0+c2V0UGFyZW50Tm9kZUlkKHBhcmVudE5vZGVJZCk7CisgICAgICAgIH0KICAgICAgICAg
aWYgKHN1cHBvcnRzUHJlc3NlZCkKICAgICAgICAgICAgIHZhbHVlLT5zZXRQcmVzc2VkKHByZXNz
ZWQpOwogICAgICAgICBpZiAocmVhZG9ubHkpCkBAIC0yMTU1LDcgKzIyMzQsNyBAQCBSZWZQdHI8
SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllcz4gSW5zcGVj
dG9yRE9NQWdlbnQ6OmJ1aQogICAgICAgICBpZiAoc2VsZWN0ZWQpCiAgICAgICAgICAgICB2YWx1
ZS0+c2V0U2VsZWN0ZWQoc2VsZWN0ZWQpOwogICAgICAgICBpZiAoc2VsZWN0ZWRDaGlsZE5vZGVJ
ZHMpCi0gICAgICAgICAgICB2YWx1ZS0+c2V0U2VsZWN0ZWRDaGlsZE5vZGVJZHMoc2VsZWN0ZWRD
aGlsZE5vZGVJZHMpOworICAgICAgICAgICAgdmFsdWUtPnNldFNlbGVjdGVkQ2hpbGROb2RlSWRz
KHNlbGVjdGVkQ2hpbGROb2RlSWRzLnJlbGVhc2VOb25OdWxsKCkpOwogICAgICAgICAKICAgICAg
ICAgLy8gSDEgLS0gSDYgYWx3YXlzIGhhdmUgYSBoZWFkaW5nTGV2ZWwgcHJvcGVydHkgdGhhdCBj
YW4gYmUgY29tcGxpbWVudGVkIGJ5IGEgaGllcmFyY2hpY2FsTGV2ZWwKICAgICAgICAgLy8gcHJv
cGVydHkgd2hlbiBhcmlhLWxldmVsIGlzIHNldCBvbiB0aGUgZWxlbWVudCwgaW4gd2hpY2ggY2Fz
ZSB3ZSB3YW50IHRvIHJlbWFpbiBjYWxsaW5nCkBAIC0yMjM1LDIyICsyMzE0LDIyIEBAIHZvaWQg
SW5zcGVjdG9yRE9NQWdlbnQ6OmRpZENvbW1pdExvYWQoRG9jdW1lbnQqIGRvY3VtZW50KQogICAg
IGlmICghZnJhbWVPd25lcikKICAgICAgICAgcmV0dXJuOwogCi0gICAgaW50IGZyYW1lT3duZXJJ
ZCA9IG1fZG9jdW1lbnROb2RlVG9JZE1hcC5nZXQoZnJhbWVPd25lcik7CisgICAgYXV0byBmcmFt
ZU93bmVySWQgPSBtX2RvY3VtZW50Tm9kZVRvSWRNYXAuZ2V0KGZyYW1lT3duZXIpOwogICAgIGlm
ICghZnJhbWVPd25lcklkKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBSZS1hZGQgZnJhbWUg
b3duZXIgZWxlbWVudCB0b2dldGhlciB3aXRoIGl0cyBuZXcgY2hpbGRyZW4uCi0gICAgaW50IHBh
cmVudElkID0gbV9kb2N1bWVudE5vZGVUb0lkTWFwLmdldChpbm5lclBhcmVudE5vZGUoZnJhbWVP
d25lci5nZXQoKSkpOworICAgIGF1dG8gcGFyZW50SWQgPSBtX2RvY3VtZW50Tm9kZVRvSWRNYXAu
Z2V0KGlubmVyUGFyZW50Tm9kZShmcmFtZU93bmVyLmdldCgpKSk7CiAgICAgbV9mcm9udGVuZERp
c3BhdGNoZXItPmNoaWxkTm9kZVJlbW92ZWQocGFyZW50SWQsIGZyYW1lT3duZXJJZCk7CiAgICAg
dW5iaW5kKGZyYW1lT3duZXIuZ2V0KCksICZtX2RvY3VtZW50Tm9kZVRvSWRNYXApOwogCi0gICAg
UmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZT4gdmFsdWUgPSBidWlsZE9iamVjdEZv
ck5vZGUoZnJhbWVPd25lci5nZXQoKSwgMCwgJm1fZG9jdW1lbnROb2RlVG9JZE1hcCk7CisgICAg
UmVmPFByb3RvY29sOjpET006Ok5vZGU+IHZhbHVlID0gYnVpbGRPYmplY3RGb3JOb2RlKGZyYW1l
T3duZXIuZ2V0KCksIDAsICZtX2RvY3VtZW50Tm9kZVRvSWRNYXApOwogICAgIE5vZGUqIHByZXZp
b3VzU2libGluZyA9IGlubmVyUHJldmlvdXNTaWJsaW5nKGZyYW1lT3duZXIuZ2V0KCkpOwotICAg
IGludCBwcmV2SWQgPSBwcmV2aW91c1NpYmxpbmcgPyBtX2RvY3VtZW50Tm9kZVRvSWRNYXAuZ2V0
KHByZXZpb3VzU2libGluZykgOiAwOworICAgIGF1dG8gcHJldklkID0gcHJldmlvdXNTaWJsaW5n
ID8gbV9kb2N1bWVudE5vZGVUb0lkTWFwLmdldChwcmV2aW91c1NpYmxpbmcpIDogMDsKICAgICBt
X2Zyb250ZW5kRGlzcGF0Y2hlci0+Y2hpbGROb2RlSW5zZXJ0ZWQocGFyZW50SWQsIHByZXZJZCwg
V1RGTW92ZSh2YWx1ZSkpOwogfQogCi1pbnQgSW5zcGVjdG9yRE9NQWdlbnQ6OmlkZW50aWZpZXJG
b3JOb2RlKE5vZGUmIG5vZGUpCitQcm90b2NvbDo6RE9NOjpOb2RlSWQgSW5zcGVjdG9yRE9NQWdl
bnQ6OmlkZW50aWZpZXJGb3JOb2RlKE5vZGUmIG5vZGUpCiB7CiAgICAgcmV0dXJuIHB1c2hOb2Rl
UGF0aFRvRnJvbnRlbmQoJm5vZGUpOwogfQpAQCAtMjMwNyw3ICsyMzg2LDcgQEAgdm9pZCBJbnNw
ZWN0b3JET01BZ2VudDo6ZGlkSW5zZXJ0RE9NTm9kZShOb2RlJiBub2RlKQogICAgIGlmICghcGFy
ZW50KQogICAgICAgICByZXR1cm47CiAKLSAgICBpbnQgcGFyZW50SWQgPSBtX2RvY3VtZW50Tm9k
ZVRvSWRNYXAuZ2V0KHBhcmVudCk7CisgICAgYXV0byBwYXJlbnRJZCA9IG1fZG9jdW1lbnROb2Rl
VG9JZE1hcC5nZXQocGFyZW50KTsKICAgICAvLyBSZXR1cm4gaWYgcGFyZW50IGlzIG5vdCBtYXBw
ZWQgeWV0LgogICAgIGlmICghcGFyZW50SWQpCiAgICAgICAgIHJldHVybjsKQEAgLTIzMTgsOCAr
MjM5Nyw4IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmRpZEluc2VydERPTU5vZGUoTm9kZSYg
bm9kZSkKICAgICB9IGVsc2UgewogICAgICAgICAvLyBDaGlsZHJlbiBoYXZlIGJlZW4gcmVxdWVz
dGVkIC0+IHJldHVybiB2YWx1ZSBvZiBhIG5ldyBjaGlsZC4KICAgICAgICAgTm9kZSogcHJldlNp
YmxpbmcgPSBpbm5lclByZXZpb3VzU2libGluZygmbm9kZSk7Ci0gICAgICAgIGludCBwcmV2SWQg
PSBwcmV2U2libGluZyA/IG1fZG9jdW1lbnROb2RlVG9JZE1hcC5nZXQocHJldlNpYmxpbmcpIDog
MDsKLSAgICAgICAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZT4gdmFsdWUgPSBi
dWlsZE9iamVjdEZvck5vZGUoJm5vZGUsIDAsICZtX2RvY3VtZW50Tm9kZVRvSWRNYXApOworICAg
ICAgICBhdXRvIHByZXZJZCA9IHByZXZTaWJsaW5nID8gbV9kb2N1bWVudE5vZGVUb0lkTWFwLmdl
dChwcmV2U2libGluZykgOiAwOworICAgICAgICBSZWY8UHJvdG9jb2w6OkRPTTo6Tm9kZT4gdmFs
dWUgPSBidWlsZE9iamVjdEZvck5vZGUoJm5vZGUsIDAsICZtX2RvY3VtZW50Tm9kZVRvSWRNYXAp
OwogICAgICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+Y2hpbGROb2RlSW5zZXJ0ZWQocGFyZW50
SWQsIHByZXZJZCwgV1RGTW92ZSh2YWx1ZSkpOwogICAgIH0KIH0KQEAgLTIzMzUsNyArMjQxNCw3
IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmRpZFJlbW92ZURPTU5vZGUoTm9kZSYgbm9kZSkK
ICAgICBpZiAoIW1fZG9jdW1lbnROb2RlVG9JZE1hcC5jb250YWlucyhwYXJlbnQpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBpbnQgcGFyZW50SWQgPSBtX2RvY3VtZW50Tm9kZVRvSWRNYXAuZ2V0
KHBhcmVudCk7CisgICAgYXV0byBwYXJlbnRJZCA9IG1fZG9jdW1lbnROb2RlVG9JZE1hcC5nZXQo
cGFyZW50KTsKIAogICAgIGlmICghbV9jaGlsZHJlblJlcXVlc3RlZC5jb250YWlucyhwYXJlbnRJ
ZCkpIHsKICAgICAgICAgLy8gTm8gY2hpbGRyZW4gYXJlIG1hcHBlZCB5ZXQgLT4gb25seSBub3Rp
Znkgb24gY2hhbmdlcyBvZiBoYXNDaGlsZHJlbi4KQEAgLTIzNTgsNyArMjQzNyw3IEBAIHZvaWQg
SW5zcGVjdG9yRE9NQWdlbnQ6OmRpZE1vZGlmeURPTUF0dHIoRWxlbWVudCYgZWxlbWVudCwgY29u
c3QgQXRvbVN0cmluZyYgbmFtCiAgICAgaWYgKHNob3VsZFN1cHByZXNzRXZlbnQpCiAgICAgICAg
IHJldHVybjsKIAotICAgIGludCBpZCA9IGJvdW5kTm9kZUlkKCZlbGVtZW50KTsKKyAgICBhdXRv
IGlkID0gYm91bmROb2RlSWQoJmVsZW1lbnQpOwogICAgIGlmICghaWQpCiAgICAgICAgIHJldHVy
bjsKIApAQCAtMjM3MCw3ICsyNDQ5LDcgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6ZGlkTW9k
aWZ5RE9NQXR0cihFbGVtZW50JiBlbGVtZW50LCBjb25zdCBBdG9tU3RyaW5nJiBuYW0KIAogdm9p
ZCBJbnNwZWN0b3JET01BZ2VudDo6ZGlkUmVtb3ZlRE9NQXR0cihFbGVtZW50JiBlbGVtZW50LCBj
b25zdCBBdG9tU3RyaW5nJiBuYW1lKQogewotICAgIGludCBpZCA9IGJvdW5kTm9kZUlkKCZlbGVt
ZW50KTsKKyAgICBhdXRvIGlkID0gYm91bmROb2RlSWQoJmVsZW1lbnQpOwogICAgIGlmICghaWQp
CiAgICAgICAgIHJldHVybjsKIApAQCAtMjM4Miw5ICsyNDYxLDkgQEAgdm9pZCBJbnNwZWN0b3JE
T01BZ2VudDo6ZGlkUmVtb3ZlRE9NQXR0cihFbGVtZW50JiBlbGVtZW50LCBjb25zdCBBdG9tU3Ry
aW5nJiBuYW0KIAogdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c3R5bGVBdHRyaWJ1dGVJbnZhbGlk
YXRlZChjb25zdCBWZWN0b3I8RWxlbWVudCo+JiBlbGVtZW50cykKIHsKLSAgICBhdXRvIG5vZGVJ
ZHMgPSBKU09OOjpBcnJheU9mPGludD46OmNyZWF0ZSgpOworICAgIGF1dG8gbm9kZUlkcyA9IEpT
T046OkFycmF5T2Y8UHJvdG9jb2w6OkRPTTo6Tm9kZUlkPjo6Y3JlYXRlKCk7CiAgICAgZm9yIChh
dXRvJiBlbGVtZW50IDogZWxlbWVudHMpIHsKLSAgICAgICAgaW50IGlkID0gYm91bmROb2RlSWQo
ZWxlbWVudCk7CisgICAgICAgIGF1dG8gaWQgPSBib3VuZE5vZGVJZChlbGVtZW50KTsKICAgICAg
ICAgaWYgKCFpZCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCkBAIC0yMzk4LDcgKzI0NzcsNyBA
QCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpzdHlsZUF0dHJpYnV0ZUludmFsaWRhdGVkKGNvbnN0
IFZlY3RvcjxFbGVtZW50Kj4mIGVsZW1lbgogCiB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpjaGFy
YWN0ZXJEYXRhTW9kaWZpZWQoQ2hhcmFjdGVyRGF0YSYgY2hhcmFjdGVyRGF0YSkKIHsKLSAgICBp
bnQgaWQgPSBtX2RvY3VtZW50Tm9kZVRvSWRNYXAuZ2V0KCZjaGFyYWN0ZXJEYXRhKTsKKyAgICBh
dXRvIGlkID0gbV9kb2N1bWVudE5vZGVUb0lkTWFwLmdldCgmY2hhcmFjdGVyRGF0YSk7CiAgICAg
aWYgKCFpZCkgewogICAgICAgICAvLyBQdXNoIHRleHQgbm9kZSBpZiBpdCBpcyBiZWluZyBjcmVh
dGVkLgogICAgICAgICBkaWRJbnNlcnRET01Ob2RlKGNoYXJhY3RlckRhdGEpOwpAQCAtMjQwOSw3
ICsyNDg4LDcgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Y2hhcmFjdGVyRGF0YU1vZGlmaWVk
KENoYXJhY3RlckRhdGEmIGNoYXJhY3RlckRhdGEpCiAKIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6
OmRpZEludmFsaWRhdGVTdHlsZUF0dHIoRWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICBpbnQgaWQg
PSBtX2RvY3VtZW50Tm9kZVRvSWRNYXAuZ2V0KCZlbGVtZW50KTsKKyAgICBhdXRvIGlkID0gbV9k
b2N1bWVudE5vZGVUb0lkTWFwLmdldCgmZWxlbWVudCk7CiAgICAgaWYgKCFpZCkKICAgICAgICAg
cmV0dXJuOwogCkBAIC0yNDIwLDIyICsyNDk5LDIyIEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6
OmRpZEludmFsaWRhdGVTdHlsZUF0dHIoRWxlbWVudCYgZWxlbWVudCkKIAogdm9pZCBJbnNwZWN0
b3JET01BZ2VudDo6ZGlkUHVzaFNoYWRvd1Jvb3QoRWxlbWVudCYgaG9zdCwgU2hhZG93Um9vdCYg
cm9vdCkKIHsKLSAgICBpbnQgaG9zdElkID0gbV9kb2N1bWVudE5vZGVUb0lkTWFwLmdldCgmaG9z
dCk7CisgICAgYXV0byBob3N0SWQgPSBtX2RvY3VtZW50Tm9kZVRvSWRNYXAuZ2V0KCZob3N0KTsK
ICAgICBpZiAoaG9zdElkKQogICAgICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+c2hhZG93Um9v
dFB1c2hlZChob3N0SWQsIGJ1aWxkT2JqZWN0Rm9yTm9kZSgmcm9vdCwgMCwgJm1fZG9jdW1lbnRO
b2RlVG9JZE1hcCkpOwogfQogCiB2b2lkIEluc3BlY3RvckRPTUFnZW50Ojp3aWxsUG9wU2hhZG93
Um9vdChFbGVtZW50JiBob3N0LCBTaGFkb3dSb290JiByb290KQogewotICAgIGludCBob3N0SWQg
PSBtX2RvY3VtZW50Tm9kZVRvSWRNYXAuZ2V0KCZob3N0KTsKLSAgICBpbnQgcm9vdElkID0gbV9k
b2N1bWVudE5vZGVUb0lkTWFwLmdldCgmcm9vdCk7CisgICAgYXV0byBob3N0SWQgPSBtX2RvY3Vt
ZW50Tm9kZVRvSWRNYXAuZ2V0KCZob3N0KTsKKyAgICBhdXRvIHJvb3RJZCA9IG1fZG9jdW1lbnRO
b2RlVG9JZE1hcC5nZXQoJnJvb3QpOwogICAgIGlmIChob3N0SWQgJiYgcm9vdElkKQogICAgICAg
ICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+c2hhZG93Um9vdFBvcHBlZChob3N0SWQsIHJvb3RJZCk7
CiB9CiAKIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmRpZENoYW5nZUN1c3RvbUVsZW1lbnRTdGF0
ZShFbGVtZW50JiBlbGVtZW50KQogewotICAgIGludCBlbGVtZW50SWQgPSBtX2RvY3VtZW50Tm9k
ZVRvSWRNYXAuZ2V0KCZlbGVtZW50KTsKKyAgICBhdXRvIGVsZW1lbnRJZCA9IG1fZG9jdW1lbnRO
b2RlVG9JZE1hcC5nZXQoJmVsZW1lbnQpOwogICAgIGlmICghZWxlbWVudElkKQogICAgICAgICBy
ZXR1cm47CiAKQEAgLTI0NjIsNyArMjU0MSw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnBz
ZXVkb0VsZW1lbnRDcmVhdGVkKFBzZXVkb0VsZW1lbnQmIHBzZXVkb0VsZW1lbnQpCiAgICAgaWYg
KCFwYXJlbnQpCiAgICAgICAgIHJldHVybjsKIAotICAgIGludCBwYXJlbnRJZCA9IG1fZG9jdW1l
bnROb2RlVG9JZE1hcC5nZXQocGFyZW50KTsKKyAgICBhdXRvIHBhcmVudElkID0gbV9kb2N1bWVu
dE5vZGVUb0lkTWFwLmdldChwYXJlbnQpOwogICAgIGlmICghcGFyZW50SWQpCiAgICAgICAgIHJl
dHVybjsKIApAQCAtMjQ3MiwxNCArMjU1MSwxNCBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50Ojpw
c2V1ZG9FbGVtZW50Q3JlYXRlZChQc2V1ZG9FbGVtZW50JiBwc2V1ZG9FbGVtZW50KQogCiB2b2lk
IEluc3BlY3RvckRPTUFnZW50Ojpwc2V1ZG9FbGVtZW50RGVzdHJveWVkKFBzZXVkb0VsZW1lbnQm
IHBzZXVkb0VsZW1lbnQpCiB7Ci0gICAgaW50IHBzZXVkb0VsZW1lbnRJZCA9IG1fZG9jdW1lbnRO
b2RlVG9JZE1hcC5nZXQoJnBzZXVkb0VsZW1lbnQpOworICAgIGF1dG8gcHNldWRvRWxlbWVudElk
ID0gbV9kb2N1bWVudE5vZGVUb0lkTWFwLmdldCgmcHNldWRvRWxlbWVudCk7CiAgICAgaWYgKCFw
c2V1ZG9FbGVtZW50SWQpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIElmIGEgUHNldWRvRWxl
bWVudCBpcyBib3VuZCwgaXRzIHBhcmVudCBlbGVtZW50IG11c3QgaGF2ZSBiZWVuIGJvdW5kLgog
ICAgIEVsZW1lbnQqIHBhcmVudCA9IHBzZXVkb0VsZW1lbnQuaG9zdEVsZW1lbnQoKTsKICAgICBB
U1NFUlQocGFyZW50KTsKLSAgICBpbnQgcGFyZW50SWQgPSBtX2RvY3VtZW50Tm9kZVRvSWRNYXAu
Z2V0KHBhcmVudCk7CisgICAgYXV0byBwYXJlbnRJZCA9IG1fZG9jdW1lbnROb2RlVG9JZE1hcC5n
ZXQocGFyZW50KTsKICAgICBBU1NFUlQocGFyZW50SWQpOwogCiAgICAgdW5iaW5kKCZwc2V1ZG9F
bGVtZW50LCAmbV9kb2N1bWVudE5vZGVUb0lkTWFwKTsKQEAgLTI0OTUsNyArMjU3NCw3IEBAIHZv
aWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmRpZEFkZEV2ZW50TGlzdGVuZXIoRXZlbnRUYXJnZXQmIHRh
cmdldCkKICAgICBpZiAoIW5vZGUuY29udGFpbnMobV9pbnNwZWN0ZWROb2RlLmdldCgpKSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgaW50IG5vZGVJZCA9IGJvdW5kTm9kZUlkKCZub2RlKTsKKyAg
ICBhdXRvIG5vZGVJZCA9IGJvdW5kTm9kZUlkKCZub2RlKTsKICAgICBpZiAoIW5vZGVJZCkKICAg
ICAgICAgcmV0dXJuOwogCkBAIC0yNTE2LDcgKzI1OTUsNyBAQCB2b2lkIEluc3BlY3RvckRPTUFn
ZW50Ojp3aWxsUmVtb3ZlRXZlbnRMaXN0ZW5lcihFdmVudFRhcmdldCYgdGFyZ2V0LCBjb25zdCBB
dG9tUwogICAgIGlmICghbm9kZS5jb250YWlucyhtX2luc3BlY3RlZE5vZGUuZ2V0KCkpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBpbnQgbm9kZUlkID0gYm91bmROb2RlSWQoJm5vZGUpOworICAg
IGF1dG8gbm9kZUlkID0gYm91bmROb2RlSWQoJm5vZGUpOwogICAgIGlmICghbm9kZUlkKQogICAg
ICAgICByZXR1cm47CiAKQEAgLTI1NjYsNyArMjY0NSw3IEBAIFJlZlB0cjxKU0M6OkJyZWFrcG9p
bnQ+IEluc3BlY3RvckRPTUFnZW50OjpicmVha3BvaW50Rm9yRXZlbnRMaXN0ZW5lcihFdmVudFRh
cmdlCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLWludCBJbnNwZWN0b3JET01BZ2VudDo6aWRG
b3JFdmVudExpc3RlbmVyKEV2ZW50VGFyZ2V0JiB0YXJnZXQsIGNvbnN0IEF0b21TdHJpbmcmIGV2
ZW50VHlwZSwgRXZlbnRMaXN0ZW5lciYgbGlzdGVuZXIsIGJvb2wgY2FwdHVyZSkKK1Byb3RvY29s
OjpET006OkV2ZW50TGlzdGVuZXJJZCBJbnNwZWN0b3JET01BZ2VudDo6aWRGb3JFdmVudExpc3Rl
bmVyKEV2ZW50VGFyZ2V0JiB0YXJnZXQsIGNvbnN0IEF0b21TdHJpbmcmIGV2ZW50VHlwZSwgRXZl
bnRMaXN0ZW5lciYgbGlzdGVuZXIsIGJvb2wgY2FwdHVyZSkKIHsKICAgICBmb3IgKGF1dG8mIGlu
c3BlY3RvckV2ZW50TGlzdGVuZXIgOiBtX2V2ZW50TGlzdGVuZXJFbnRyaWVzLnZhbHVlcygpKSB7
CiAgICAgICAgIGlmIChpbnNwZWN0b3JFdmVudExpc3RlbmVyLm1hdGNoZXModGFyZ2V0LCBldmVu
dFR5cGUsIGxpc3RlbmVyLCBjYXB0dXJlKSkKQEAgLTI2MDQsOCArMjY4Myw3IEBAIHZvaWQgSW5z
cGVjdG9yRE9NQWdlbnQ6Om1lZGlhTWV0cmljc1RpbWVyRmlyZWQoKQogICAgICAgICBpZiAoaXRl
cmF0b3ItPnZhbHVlLmlzUG93ZXJFZmZpY2llbnQgIT0gaXNQb3dlckVmZmljaWVudCkgewogICAg
ICAgICAgICAgaXRlcmF0b3ItPnZhbHVlLmlzUG93ZXJFZmZpY2llbnQgPSBpc1Bvd2VyRWZmaWNp
ZW50OwogCi0gICAgICAgICAgICBpbnQgbm9kZUlkID0gcHVzaE5vZGVQYXRoVG9Gcm9udGVuZCht
ZWRpYUVsZW1lbnQpOwotICAgICAgICAgICAgaWYgKG5vZGVJZCkgeworICAgICAgICAgICAgaWYg
KGF1dG8gbm9kZUlkID0gcHVzaE5vZGVQYXRoVG9Gcm9udGVuZChtZWRpYUVsZW1lbnQpKSB7CiAg
ICAgICAgICAgICAgICAgYXV0byB0aW1lc3RhbXAgPSBtX2Vudmlyb25tZW50LmV4ZWN1dGlvblN0
b3B3YXRjaCgpLmVsYXBzZWRUaW1lKCkuc2Vjb25kcygpOwogICAgICAgICAgICAgICAgIG1fZnJv
bnRlbmREaXNwYXRjaGVyLT5wb3dlckVmZmljaWVudFBsYXliYWNrU3RhdGVDaGFuZ2VkKG5vZGVJ
ZCwgdGltZXN0YW1wLCBpdGVyYXRvci0+dmFsdWUuaXNQb3dlckVmZmljaWVudCk7CiAgICAgICAg
ICAgICB9CkBAIC0yNjU5LDcgKzI3MzcsNyBAQCBOb2RlKiBJbnNwZWN0b3JET01BZ2VudDo6bm9k
ZUZvclBhdGgoY29uc3QgU3RyaW5nJiBwYXRoKQogICAgIHJldHVybiBub2RlOwogfQogCi1Ob2Rl
KiBJbnNwZWN0b3JET01BZ2VudDo6bm9kZUZvck9iamVjdElkKGNvbnN0IFN0cmluZyYgb2JqZWN0
SWQpCitOb2RlKiBJbnNwZWN0b3JET01BZ2VudDo6bm9kZUZvck9iamVjdElkKGNvbnN0IFByb3Rv
Y29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3RJZCYgb2JqZWN0SWQpCiB7CiAgICAgSW5qZWN0ZWRT
Y3JpcHQgaW5qZWN0ZWRTY3JpcHQgPSBtX2luamVjdGVkU2NyaXB0TWFuYWdlci5pbmplY3RlZFNj
cmlwdEZvck9iamVjdElkKG9iamVjdElkKTsKICAgICBpZiAoaW5qZWN0ZWRTY3JpcHQuaGFzTm9W
YWx1ZSgpKQpAQCAtMjY2OCwxNSArMjc0NiwyMCBAQCBOb2RlKiBJbnNwZWN0b3JET01BZ2VudDo6
bm9kZUZvck9iamVjdElkKGNvbnN0IFN0cmluZyYgb2JqZWN0SWQpCiAgICAgcmV0dXJuIHNjcmlw
dFZhbHVlQXNOb2RlKGluamVjdGVkU2NyaXB0LmZpbmRPYmplY3RCeUlkKG9iamVjdElkKSk7CiB9
CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnB1c2hOb2RlQnlQYXRoVG9Gcm9udGVuZChFcnJv
clN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgcGF0aCwgaW50KiBub2RlSWQpCitQ
cm90b2NvbDo6RXJyb3JTdHJpbmdPcjxQcm90b2NvbDo6RE9NOjpOb2RlSWQ+IEluc3BlY3RvckRP
TUFnZW50OjpwdXNoTm9kZUJ5UGF0aFRvRnJvbnRlbmQoY29uc3QgU3RyaW5nJiBwYXRoKQogewot
ICAgIGlmIChOb2RlKiBub2RlID0gbm9kZUZvclBhdGgocGF0aCkpCi0gICAgICAgICpub2RlSWQg
PSBwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKGVycm9yU3RyaW5nLCBub2RlKTsKLSAgICBlbHNlCi0g
ICAgICAgIGVycm9yU3RyaW5nID0gIk1pc3Npbmcgbm9kZSBmb3IgZ2l2ZW4gcGF0aCJfczsKKyAg
ICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKKyAgICBpZiAoTm9kZSogbm9k
ZSA9IG5vZGVGb3JQYXRoKHBhdGgpKSB7CisgICAgICAgIGlmIChhdXRvIG5vZGVJZCA9IHB1c2hO
b2RlUGF0aFRvRnJvbnRlbmQoZXJyb3JTdHJpbmcsIG5vZGUpKQorICAgICAgICAgICAgcmV0dXJu
IG5vZGVJZDsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKKyAg
ICB9CisKKyAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk1pc3Npbmcgbm9kZSBmb3IgZ2l2ZW4g
cGF0aCJfcyk7CiB9CiAKLVJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpSZW1v
dGVPYmplY3Q+IEluc3BlY3RvckRPTUFnZW50OjpyZXNvbHZlTm9kZShOb2RlKiBub2RlLCBjb25z
dCBTdHJpbmcmIG9iamVjdEdyb3VwKQorUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVP
YmplY3Q+IEluc3BlY3RvckRPTUFnZW50OjpyZXNvbHZlTm9kZShOb2RlKiBub2RlLCBjb25zdCBT
dHJpbmcmIG9iamVjdEdyb3VwKQogewogICAgIERvY3VtZW50KiBkb2N1bWVudCA9ICZub2RlLT5k
b2N1bWVudCgpOwogICAgIGlmIChhdXRvKiB0ZW1wbGF0ZUhvc3QgPSBkb2N1bWVudC0+dGVtcGxh
dGVEb2N1bWVudEhvc3QoKSkKQEAgLTI3MDYsOSArMjc4OSwxMSBAQCBKU0M6OkpTVmFsdWUgSW5z
cGVjdG9yRE9NQWdlbnQ6Om5vZGVBc1NjcmlwdFZhbHVlKEpTQzo6SlNHbG9iYWxPYmplY3QmIHN0
YXRlLCBObwogICAgIHJldHVybiB0b0pTKCZzdGF0ZSwgZGVwcmVjYXRlZEdsb2JhbE9iamVjdEZv
clByb3RvdHlwZSgmc3RhdGUpLCBCaW5kaW5nU2VjdXJpdHk6OmNoZWNrU2VjdXJpdHlGb3JOb2Rl
KHN0YXRlLCBub2RlKSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNldEFsbG93RWRp
dGluZ1VzZXJBZ2VudFNoYWRvd1RyZWVzKEVycm9yU3RyaW5nJiwgYm9vbCBhbGxvdykKK1Byb3Rv
Y29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRPTUFnZW50OjpzZXRBbGxvd0VkaXRp
bmdVc2VyQWdlbnRTaGFkb3dUcmVlcyhib29sIGFsbG93KQogewogICAgIG1fYWxsb3dFZGl0aW5n
VXNlckFnZW50U2hhZG93VHJlZXMgPSBhbGxvdzsKKworICAgIHJldHVybiB7IH07CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9hZ2VudHMvSW5zcGVjdG9yRE9NQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9h
Z2VudHMvSW5zcGVjdG9yRE9NQWdlbnQuaAppbmRleCAzZTM3NzA3YWZlY2Y3OGY0MjE4YWE4MzAx
ZTFlYTJkNDFjNzI1MTcyLi43ZjI4NzJkZjQ5ZTBkNDBhYjAyMGNkOTg4NGRlZDAwMzA4ZjFhMmE2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRP
TUFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JE
T01BZ2VudC5oCkBAIC03NiwxNCArNzYsMTIgQEAgY2xhc3MgU2hhZG93Um9vdDsKIAogc3RydWN0
IEhpZ2hsaWdodENvbmZpZzsKIAotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7Ci0KIGNsYXNz
IEluc3BlY3RvckRPTUFnZW50IGZpbmFsIDogcHVibGljIEluc3BlY3RvckFnZW50QmFzZSwgcHVi
bGljIEluc3BlY3Rvcjo6RE9NQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKICAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShJbnNwZWN0b3JET01BZ2VudCk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CiBwdWJsaWM6CiAgICAgSW5zcGVjdG9yRE9NQWdlbnQoUGFnZUFnZW50Q29udGV4dCYs
IEluc3BlY3Rvck92ZXJsYXkqKTsKLSAgICB+SW5zcGVjdG9yRE9NQWdlbnQoKSBvdmVycmlkZTsK
KyAgICB+SW5zcGVjdG9yRE9NQWdlbnQoKTsKIAogICAgIHN0YXRpYyBTdHJpbmcgdG9FcnJvclN0
cmluZyhFeGNlcHRpb25Db2RlKTsKICAgICBzdGF0aWMgU3RyaW5nIHRvRXJyb3JTdHJpbmcoRXhj
ZXB0aW9uJiYpOwpAQCAtMTAyLDYyICsxMDAsNjIgQEAgcHVibGljOgogICAgIHN0YXRpYyBKU0M6
OkpTVmFsdWUgbm9kZUFzU2NyaXB0VmFsdWUoSlNDOjpKU0dsb2JhbE9iamVjdCYsIE5vZGUqKTsK
IAogICAgIC8vIEluc3BlY3RvckFnZW50QmFzZQotICAgIHZvaWQgZGlkQ3JlYXRlRnJvbnRlbmRB
bmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRSb3V0ZXIqLCBJbnNwZWN0b3I6OkJhY2tlbmRE
aXNwYXRjaGVyKikgb3ZlcnJpZGU7Ci0gICAgdm9pZCB3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFj
a2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24pIG92ZXJyaWRlOworICAgIHZvaWQgZGlk
Q3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRSb3V0ZXIqLCBJbnNw
ZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyKik7CisgICAgdm9pZCB3aWxsRGVzdHJveUZyb250ZW5k
QW5kQmFja2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24pOwogCiAgICAgLy8gRE9NQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyCi0gICAgdm9pZCBxdWVyeVNlbGVjdG9yKEVycm9yU3RyaW5n
JiwgaW50IG5vZGVJZCwgY29uc3QgU3RyaW5nJiBzZWxlY3RvcnMsIGludCogZWxlbWVudElkKSBv
dmVycmlkZTsKLSAgICB2b2lkIHF1ZXJ5U2VsZWN0b3JBbGwoRXJyb3JTdHJpbmcmLCBpbnQgbm9k
ZUlkLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9ycywgUmVmUHRyPEpTT046OkFycmF5T2Y8aW50Pj4m
IHJlc3VsdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBnZXREb2N1bWVudChFcnJvclN0cmluZyYsIFJl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+JiByb290KSBvdmVycmlkZTsKLSAg
ICB2b2lkIHJlcXVlc3RDaGlsZE5vZGVzKEVycm9yU3RyaW5nJiwgaW50IG5vZGVJZCwgY29uc3Qg
aW50KiBkZXB0aCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRBdHRyaWJ1dGVWYWx1ZShFcnJvclN0
cmluZyYsIGludCBlbGVtZW50SWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2
YWx1ZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRBdHRyaWJ1dGVzQXNUZXh0KEVycm9yU3RyaW5n
JiwgaW50IGVsZW1lbnRJZCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBTdHJpbmcqIG5hbWUp
IG92ZXJyaWRlOwotICAgIHZvaWQgcmVtb3ZlQXR0cmlidXRlKEVycm9yU3RyaW5nJiwgaW50IGVs
ZW1lbnRJZCwgY29uc3QgU3RyaW5nJiBuYW1lKSBvdmVycmlkZTsKLSAgICB2b2lkIHJlbW92ZU5v
ZGUoRXJyb3JTdHJpbmcmLCBpbnQgbm9kZUlkKSBvdmVycmlkZTsKLSAgICB2b2lkIHNldE5vZGVO
YW1lKEVycm9yU3RyaW5nJiwgaW50IG5vZGVJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBpbnQqIG5l
d0lkKSBvdmVycmlkZTsKLSAgICB2b2lkIGdldE91dGVySFRNTChFcnJvclN0cmluZyYsIGludCBu
b2RlSWQsIFdURjo6U3RyaW5nKiBvdXRlckhUTUwpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0T3V0
ZXJIVE1MKEVycm9yU3RyaW5nJiwgaW50IG5vZGVJZCwgY29uc3QgU3RyaW5nJiBvdXRlckhUTUwp
IG92ZXJyaWRlOwotICAgIHZvaWQgaW5zZXJ0QWRqYWNlbnRIVE1MKEVycm9yU3RyaW5nJiwgaW50
IG5vZGVJZCwgY29uc3QgU3RyaW5nJiBwb3NpdGlvbiwgY29uc3QgU3RyaW5nJiBodG1sKSBvdmVy
cmlkZTsKLSAgICB2b2lkIHNldE5vZGVWYWx1ZShFcnJvclN0cmluZyYsIGludCBub2RlSWQsIGNv
bnN0IFN0cmluZyYgdmFsdWUpIG92ZXJyaWRlOwotICAgIHZvaWQgZ2V0U3VwcG9ydGVkRXZlbnRO
YW1lcyhFcnJvclN0cmluZyYsIFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+JiBldmVudE5h
bWVzKSBvdmVycmlkZTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkPiBxdWVyeVNlbGVjdG9yKEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRPTTo6Tm9kZUlkLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yKTsKKyAgICBJbnNw
ZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkPj4+IHF1ZXJ5U2VsZWN0b3JBbGwoSW5zcGVjdG9yOjpQ
cm90b2NvbDo6RE9NOjpOb2RlSWQsIGNvbnN0IFN0cmluZyYgc2VsZWN0b3IpOworICAgIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRP
TTo6Tm9kZT4+IGdldERvY3VtZW50KCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JT
dHJpbmdPcjx2b2lkPiByZXF1ZXN0Q2hpbGROb2RlcyhJbnNwZWN0b3I6OlByb3RvY29sOjpET006
Ok5vZGVJZCwgT3B0aW9uYWw8aW50PiYmIGRlcHRoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29s
OjpFcnJvclN0cmluZ09yPHZvaWQ+IHNldEF0dHJpYnV0ZVZhbHVlKEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRPTTo6Tm9kZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUp
OworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc2V0QXR0cmli
dXRlc0FzVGV4dChJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZCwgY29uc3QgU3RyaW5n
JiB0ZXh0LCBjb25zdCBTdHJpbmcmIG5hbWUpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8dm9pZD4gcmVtb3ZlQXR0cmlidXRlKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRP
TTo6Tm9kZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8dm9pZD4gcmVtb3ZlTm9kZShJbnNwZWN0b3I6OlByb3RvY29sOjpET006
Ok5vZGVJZCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxJbnNwZWN0
b3I6OlByb3RvY29sOjpET006Ok5vZGVJZD4gc2V0Tm9kZU5hbWUoSW5zcGVjdG9yOjpQcm90b2Nv
bDo6RE9NOjpOb2RlSWQsIGNvbnN0IFN0cmluZyYpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8U3RyaW5nPiBnZXRPdXRlckhUTUwoSW5zcGVjdG9yOjpQcm90b2NvbDo6
RE9NOjpOb2RlSWQpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9p
ZD4gc2V0T3V0ZXJIVE1MKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkLCBjb25zdCBT
dHJpbmcmKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGlu
c2VydEFkamFjZW50SFRNTChJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZCwgY29uc3Qg
U3RyaW5nJiBwb3NpdGlvbiwgY29uc3QgU3RyaW5nJiBodG1sKTsKKyAgICBJbnNwZWN0b3I6OlBy
b3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHNldE5vZGVWYWx1ZShJbnNwZWN0b3I6OlByb3Rv
Y29sOjpET006Ok5vZGVJZCwgY29uc3QgU3RyaW5nJik7CisgICAgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6RXJyb3JTdHJpbmdPcjxSZWY8SlNPTjo6QXJyYXlPZjxTdHJpbmc+Pj4gZ2V0U3VwcG9ydGVk
RXZlbnROYW1lcygpOwogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJT
KQotICAgIHZvaWQgZ2V0RGF0YUJpbmRpbmdzRm9yTm9kZShFcnJvclN0cmluZyYsIGludCBub2Rl
SWQsIFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6RGF0YUJp
bmRpbmc+PiYgZGF0YUFycmF5KSBvdmVycmlkZTsKLSAgICB2b2lkIGdldEFzc29jaWF0ZWREYXRh
Rm9yTm9kZShFcnJvclN0cmluZyYsIGludCBub2RlSWQsIE9wdGlvbmFsPFN0cmluZz4mIGFzc29j
aWF0ZWREYXRhKSBvdmVycmlkZTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmlu
Z09yPFJlZjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6RGF0YUJpbmRp
bmc+Pj4gZ2V0RGF0YUJpbmRpbmdzRm9yTm9kZShJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5v
ZGVJZCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxTdHJpbmc+IGdl
dEFzc29jaWF0ZWREYXRhRm9yTm9kZShJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZCk7
CiAjZW5kaWYKLSAgICB2b2lkIGdldEV2ZW50TGlzdGVuZXJzRm9yTm9kZShFcnJvclN0cmluZyYs
IGludCBub2RlSWQsIFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRP
TTo6RXZlbnRMaXN0ZW5lcj4+JiBsaXN0ZW5lcnNBcnJheSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBz
ZXRFdmVudExpc3RlbmVyRGlzYWJsZWQoRXJyb3JTdHJpbmcmLCBpbnQgZXZlbnRMaXN0ZW5lcklk
LCBib29sIGRpc2FibGVkKSBvdmVycmlkZTsKLSAgICB2b2lkIHNldEJyZWFrcG9pbnRGb3JFdmVu
dExpc3RlbmVyKEVycm9yU3RyaW5nJiwgaW50IGV2ZW50TGlzdGVuZXJJZCwgY29uc3QgSlNPTjo6
T2JqZWN0KiBvcHRpb25zKSBmaW5hbDsKLSAgICB2b2lkIHJlbW92ZUJyZWFrcG9pbnRGb3JFdmVu
dExpc3RlbmVyKEVycm9yU3RyaW5nJiwgaW50IGV2ZW50TGlzdGVuZXJJZCkgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCBnZXRBY2Nlc3NpYmlsaXR5UHJvcGVydGllc0Zvck5vZGUoRXJyb3JTdHJpbmcmLCBp
bnQgbm9kZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5
UHJvcGVydGllcz4mIGF4UHJvcGVydGllcykgb3ZlcnJpZGU7Ci0gICAgdm9pZCBwZXJmb3JtU2Vh
cmNoKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBxdWVyeSwgY29uc3QgSlNPTjo6QXJyYXkq
IG5vZGVJZHMsIGNvbnN0IGJvb2wqIGNhc2VTZW5zaXRpdmUsIFN0cmluZyogc2VhcmNoSWQsIGlu
dCogcmVzdWx0Q291bnQpIG92ZXJyaWRlOwotICAgIHZvaWQgZ2V0U2VhcmNoUmVzdWx0cyhFcnJv
clN0cmluZyYsIGNvbnN0IFN0cmluZyYgc2VhcmNoSWQsIGludCBmcm9tSW5kZXgsIGludCB0b0lu
ZGV4LCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxpbnQ+PiYpIG92ZXJyaWRlOwotICAgIHZvaWQgZGlz
Y2FyZFNlYXJjaFJlc3VsdHMoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHNlYXJjaElkKSBv
dmVycmlkZTsKLSAgICB2b2lkIHJlc29sdmVOb2RlKEVycm9yU3RyaW5nJiwgaW50IG5vZGVJZCwg
Y29uc3QgU3RyaW5nKiBvYmplY3RHcm91cCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1
bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3VsdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBnZXRBdHRy
aWJ1dGVzKEVycm9yU3RyaW5nJiwgaW50IG5vZGVJZCwgUmVmUHRyPEpTT046OkFycmF5T2Y8U3Ry
aW5nPj4mIHJlc3VsdCkgb3ZlcnJpZGU7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JT
dHJpbmdPcjxSZWY8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkV2ZW50
TGlzdGVuZXI+Pj4gZ2V0RXZlbnRMaXN0ZW5lcnNGb3JOb2RlKEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRPTTo6Tm9kZUlkKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZv
aWQ+IHNldEV2ZW50TGlzdGVuZXJEaXNhYmxlZChJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkV2
ZW50TGlzdGVuZXJJZCwgYm9vbCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJp
bmdPcjx2b2lkPiBzZXRCcmVha3BvaW50Rm9yRXZlbnRMaXN0ZW5lcihJbnNwZWN0b3I6OlByb3Rv
Y29sOjpET006OkV2ZW50TGlzdGVuZXJJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBvcHRpb25z
KTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHJlbW92ZUJy
ZWFrcG9pbnRGb3JFdmVudExpc3RlbmVyKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6RXZlbnRM
aXN0ZW5lcklkKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzPj4gZ2V0QWNj
ZXNzaWJpbGl0eVByb3BlcnRpZXNGb3JOb2RlKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9k
ZUlkKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHN0ZDo6dHVwbGU8
U3RyaW5nIC8qIHNlYXJjaElkICovLCBpbnQgLyogcmVzdWx0Q291bnQgKi8+PiBwZXJmb3JtU2Vh
cmNoKGNvbnN0IFN0cmluZyYgcXVlcnksIFJlZlB0cjxKU09OOjpBcnJheT4mJiBub2RlSWRzLCBP
cHRpb25hbDxib29sPiYmIGNhc2VTZW5zaXRpdmUpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8UmVmPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9N
OjpOb2RlSWQ+Pj4gZ2V0U2VhcmNoUmVzdWx0cyhjb25zdCBTdHJpbmcmIHNlYXJjaElkLCBpbnQg
ZnJvbUluZGV4LCBpbnQgdG9JbmRleCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JT
dHJpbmdPcjx2b2lkPiBkaXNjYXJkU2VhcmNoUmVzdWx0cyhjb25zdCBTdHJpbmcmIHNlYXJjaElk
KTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxJbnNwZWN0b3I6
OlByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+PiByZXNvbHZlTm9kZShJbnNwZWN0b3I6
OlByb3RvY29sOjpET006Ok5vZGVJZCwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCk7CisgICAg
SW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SlNPTjo6QXJyYXlPZjxTdHJp
bmc+Pj4gZ2V0QXR0cmlidXRlcyhJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZCk7CiAj
aWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICB2b2lkIHNldEluc3BlY3RNb2RlRW5hYmxlZChF
cnJvclN0cmluZyYsIGJvb2wgZW5hYmxlZCwgY29uc3QgSlNPTjo6T2JqZWN0KiBoaWdobGlnaHRD
b25maWcpIG92ZXJyaWRlOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8
dm9pZD4gc2V0SW5zcGVjdE1vZGVFbmFibGVkKGJvb2wsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYg
aGlnaGxpZ2h0Q29uZmlnKTsKICNlbHNlCi0gICAgdm9pZCBzZXRJbnNwZWN0TW9kZUVuYWJsZWQo
RXJyb3JTdHJpbmcmLCBib29sIGVuYWJsZWQsIGNvbnN0IEpTT046Ok9iamVjdCogaGlnaGxpZ2h0
Q29uZmlnLCBjb25zdCBib29sKiBzaG93UnVsZXJzKSBvdmVycmlkZTsKKyAgICBJbnNwZWN0b3I6
OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHNldEluc3BlY3RNb2RlRW5hYmxlZChib29s
LCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIGhpZ2hsaWdodENvbmZpZywgT3B0aW9uYWw8Ym9vbD4m
JiBzaG93UnVsZXJzKTsKICNlbmRpZgotICAgIHZvaWQgcmVxdWVzdE5vZGUoRXJyb3JTdHJpbmcm
LCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBpbnQqIG5vZGVJZCkgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBwdXNoTm9kZUJ5UGF0aFRvRnJvbnRlbmQoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHBh
dGgsIGludCogbm9kZUlkKSBvdmVycmlkZTsKLSAgICB2b2lkIGhpZGVIaWdobGlnaHQoRXJyb3JT
dHJpbmcmKSBvdmVycmlkZTsKLSAgICB2b2lkIGhpZ2hsaWdodFJlY3QoRXJyb3JTdHJpbmcmLCBp
bnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCwgY29uc3QgSlNPTjo6T2JqZWN0KiBj
b2xvciwgY29uc3QgSlNPTjo6T2JqZWN0KiBvdXRsaW5lQ29sb3IsIGNvbnN0IGJvb2wqIHVzZVBh
Z2VDb29yZGluYXRlcykgb3ZlcnJpZGU7Ci0gICAgdm9pZCBoaWdobGlnaHRRdWFkKEVycm9yU3Ry
aW5nJiwgY29uc3QgSlNPTjo6QXJyYXkmIHF1YWQsIGNvbnN0IEpTT046Ok9iamVjdCogY29sb3Is
IGNvbnN0IEpTT046Ok9iamVjdCogb3V0bGluZUNvbG9yLCBjb25zdCBib29sKiB1c2VQYWdlQ29v
cmRpbmF0ZXMpIG92ZXJyaWRlOwotICAgIHZvaWQgaGlnaGxpZ2h0U2VsZWN0b3IoRXJyb3JTdHJp
bmcmLCBjb25zdCBKU09OOjpPYmplY3QmIGhpZ2hsaWdodENvbmZpZywgY29uc3QgU3RyaW5nJiBz
ZWxlY3RvclN0cmluZywgY29uc3QgU3RyaW5nKiBmcmFtZUlkKSBvdmVycmlkZTsKLSAgICB2b2lk
IGhpZ2hsaWdodE5vZGUoRXJyb3JTdHJpbmcmLCBjb25zdCBKU09OOjpPYmplY3QmIGhpZ2hsaWdo
dENvbmZpZywgY29uc3QgaW50KiBub2RlSWQsIGNvbnN0IFN0cmluZyogb2JqZWN0SWQpIG92ZXJy
aWRlOwotICAgIHZvaWQgaGlnaGxpZ2h0Tm9kZUxpc3QoRXJyb3JTdHJpbmcmLCBjb25zdCBKU09O
OjpBcnJheSYgbm9kZUlkcywgY29uc3QgSlNPTjo6T2JqZWN0JiBoaWdobGlnaHRDb25maWcpIG92
ZXJyaWRlOwotICAgIHZvaWQgaGlnaGxpZ2h0RnJhbWUoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJp
bmcmIGZyYW1lSWQsIGNvbnN0IEpTT046Ok9iamVjdCogY29sb3IsIGNvbnN0IEpTT046Ok9iamVj
dCogb3V0bGluZUNvbG9yKSBvdmVycmlkZTsKLSAgICB2b2lkIG1vdmVUbyhFcnJvclN0cmluZyYs
IGludCBub2RlSWQsIGludCB0YXJnZXROb2RlSWQsIGNvbnN0IGludCogYW5jaG9yTm9kZUlkLCBp
bnQqIG5ld05vZGVJZCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCB1bmRvKEVycm9yU3RyaW5nJikgb3Zl
cnJpZGU7Ci0gICAgdm9pZCByZWRvKEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBt
YXJrVW5kb2FibGVTdGF0ZShFcnJvclN0cmluZyYpIG92ZXJyaWRlOwotICAgIHZvaWQgZm9jdXMo
RXJyb3JTdHJpbmcmLCBpbnQgbm9kZUlkKSBvdmVycmlkZTsKLSAgICB2b2lkIHNldEluc3BlY3Rl
ZE5vZGUoRXJyb3JTdHJpbmcmLCBpbnQgbm9kZUlkKSBvdmVycmlkZTsKLSAgICB2b2lkIHNldEFs
bG93RWRpdGluZ1VzZXJBZ2VudFNoYWRvd1RyZWVzKEVycm9yU3RyaW5nJiwgYm9vbCBhbGxvdykg
ZmluYWw7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxJbnNwZWN0b3I6
OlByb3RvY29sOjpET006Ok5vZGVJZD4gcmVxdWVzdE5vZGUoY29uc3QgSW5zcGVjdG9yOjpQcm90
b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0SWQmKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29s
OjpFcnJvclN0cmluZ09yPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkPiBwdXNoTm9k
ZUJ5UGF0aFRvRnJvbnRlbmQoY29uc3QgU3RyaW5nJiBwYXRoKTsKKyAgICBJbnNwZWN0b3I6OlBy
b3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGhpZGVIaWdobGlnaHQoKTsKKyAgICBJbnNwZWN0
b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGhpZ2hsaWdodFJlY3QoaW50IHgsIGlu
dCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgY29sb3Is
IFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgb3V0bGluZUNvbG9yLCBPcHRpb25hbDxib29sPiYmIHVz
ZVBhZ2VDb29yZGluYXRlcyk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdP
cjx2b2lkPiBoaWdobGlnaHRRdWFkKFJlZjxKU09OOjpBcnJheT4mJiBxdWFkLCBSZWZQdHI8SlNP
Tjo6T2JqZWN0PiYmIGNvbG9yLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIG91dGxpbmVDb2xvciwg
T3B0aW9uYWw8Ym9vbD4mJiB1c2VQYWdlQ29vcmRpbmF0ZXMpOworICAgIEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gaGlnaGxpZ2h0U2VsZWN0b3IoUmVmPEpTT046Ok9i
amVjdD4mJiBoaWdobGlnaHRDb25maWcsIGNvbnN0IFN0cmluZyYgc2VsZWN0b3JTdHJpbmcsIGNv
bnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OkZyYW1lSWQmKTsKKyAgICBJbnNwZWN0
b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGhpZ2hsaWdodE5vZGUoUmVmPEpTT046
Ok9iamVjdD4mJiBoaWdobGlnaHRDb25maWcsIE9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRPTTo6Tm9kZUlkPiYmLCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpSZW1v
dGVPYmplY3RJZCYpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9p
ZD4gaGlnaGxpZ2h0Tm9kZUxpc3QoUmVmPEpTT046OkFycmF5PiYmIG5vZGVJZHMsIFJlZjxKU09O
OjpPYmplY3Q+JiYgaGlnaGxpZ2h0Q29uZmlnKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpF
cnJvclN0cmluZ09yPHZvaWQ+IGhpZ2hsaWdodEZyYW1lKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9j
b2w6Ok5ldHdvcms6OkZyYW1lSWQmLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIGNvbG9yLCBSZWZQ
dHI8SlNPTjo6T2JqZWN0PiYmIG91dGxpbmVDb2xvcik7CisgICAgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6RXJyb3JTdHJpbmdPcjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZD4gbW92ZVRv
KEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkIG5vZGVJZCwgSW5zcGVjdG9yOjpQcm90
b2NvbDo6RE9NOjpOb2RlSWQgdGFyZ2V0Tm9kZUlkLCBPcHRpb25hbDxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpET006Ok5vZGVJZD4mJiBpbnNlcnRCZWZvcmVOb2RlSWQpOworICAgIEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gdW5kbygpOworICAgIEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gcmVkbygpOworICAgIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gbWFya1VuZG9hYmxlU3RhdGUoKTsKKyAgICBJbnNwZWN0
b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGZvY3VzKEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRPTTo6Tm9kZUlkKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09y
PHZvaWQ+IHNldEluc3BlY3RlZE5vZGUoSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQp
OworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc2V0QWxsb3dF
ZGl0aW5nVXNlckFnZW50U2hhZG93VHJlZXMoYm9vbCk7CiAKICAgICAvLyBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb24KLSAgICBpbnQgaWRlbnRpZmllckZvck5vZGUoTm9kZSYpOworICAgIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkIGlkZW50aWZpZXJGb3JOb2RlKE5vZGUmKTsKICAg
ICB2b2lkIGFkZEV2ZW50TGlzdGVuZXJzVG9Ob2RlKE5vZGUmKTsKICAgICB2b2lkIGRpZEluc2Vy
dERPTU5vZGUoTm9kZSYpOwogICAgIHZvaWQgZGlkUmVtb3ZlRE9NTm9kZShOb2RlJik7CkBAIC0x
ODUsMTIgKzE4MywxMiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHN0eWxlQXR0cmlidXRlSW52YWxp
ZGF0ZWQoY29uc3QgVmVjdG9yPEVsZW1lbnQqPiYgZWxlbWVudHMpOwogCi0gICAgaW50IHB1c2hO
b2RlVG9Gcm9udGVuZChOb2RlKik7Ci0gICAgaW50IHB1c2hOb2RlVG9Gcm9udGVuZChFcnJvclN0
cmluZyYsIGludCBkb2N1bWVudE5vZGVJZCwgTm9kZSopOwotICAgIGludCBwdXNoTm9kZVBhdGhU
b0Zyb250ZW5kKE5vZGUqKTsKLSAgICBpbnQgcHVzaE5vZGVQYXRoVG9Gcm9udGVuZChFcnJvclN0
cmluZywgTm9kZSopOwotICAgIE5vZGUqIG5vZGVGb3JJZChpbnQgbm9kZUlkKTsKLSAgICBpbnQg
Ym91bmROb2RlSWQoY29uc3QgTm9kZSopOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6
Tm9kZUlkIHB1c2hOb2RlVG9Gcm9udGVuZChOb2RlKik7CisgICAgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6RE9NOjpOb2RlSWQgcHVzaE5vZGVUb0Zyb250ZW5kKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVy
cm9yU3RyaW5nJiwgSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQgZG9jdW1lbnROb2Rl
SWQsIE5vZGUqKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZCBwdXNoTm9k
ZVBhdGhUb0Zyb250ZW5kKE5vZGUqKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5v
ZGVJZCBwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3Ry
aW5nLCBOb2RlKik7CisgICAgTm9kZSogbm9kZUZvcklkKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRP
TTo6Tm9kZUlkKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZCBib3VuZE5v
ZGVJZChjb25zdCBOb2RlKik7CiAKICAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVu
dGltZTo6UmVtb3RlT2JqZWN0PiByZXNvbHZlTm9kZShOb2RlKiwgY29uc3QgU3RyaW5nJiBvYmpl
Y3RHcm91cCk7CiAgICAgYm9vbCBoYW5kbGVNb3VzZVByZXNzKCk7CkBAIC0yMDIsMTIgKzIwMCwx
MiBAQCBwdWJsaWM6CiAgICAgVmVjdG9yPERvY3VtZW50Kj4gZG9jdW1lbnRzKCk7CiAgICAgdm9p
ZCByZXNldCgpOwogCi0gICAgTm9kZSogYXNzZXJ0Tm9kZShFcnJvclN0cmluZyYsIGludCBub2Rl
SWQpOwotICAgIEVsZW1lbnQqIGFzc2VydEVsZW1lbnQoRXJyb3JTdHJpbmcmLCBpbnQgbm9kZUlk
KTsKLSAgICBEb2N1bWVudCogYXNzZXJ0RG9jdW1lbnQoRXJyb3JTdHJpbmcmLCBpbnQgbm9kZUlk
KTsKKyAgICBOb2RlKiBhc3NlcnROb2RlKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5n
JiwgSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQpOworICAgIEVsZW1lbnQqIGFzc2Vy
dEVsZW1lbnQoSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBJbnNwZWN0b3I6OlBy
b3RvY29sOjpET006Ok5vZGVJZCk7CisgICAgRG9jdW1lbnQqIGFzc2VydERvY3VtZW50KEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nJiwgSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpO
b2RlSWQpOwogCiAgICAgUmVmUHRyPEpTQzo6QnJlYWtwb2ludD4gYnJlYWtwb2ludEZvckV2ZW50
TGlzdGVuZXIoRXZlbnRUYXJnZXQmLCBjb25zdCBBdG9tU3RyaW5nJiBldmVudFR5cGUsIEV2ZW50
TGlzdGVuZXImLCBib29sIGNhcHR1cmUpOwotICAgIGludCBpZEZvckV2ZW50TGlzdGVuZXIoRXZl
bnRUYXJnZXQmLCBjb25zdCBBdG9tU3RyaW5nJiBldmVudFR5cGUsIEV2ZW50TGlzdGVuZXImLCBi
b29sIGNhcHR1cmUpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6RXZlbnRMaXN0ZW5l
cklkIGlkRm9yRXZlbnRMaXN0ZW5lcihFdmVudFRhcmdldCYsIGNvbnN0IEF0b21TdHJpbmcmIGV2
ZW50VHlwZSwgRXZlbnRMaXN0ZW5lciYsIGJvb2wgY2FwdHVyZSk7CiAKIHByaXZhdGU6CiAjaWYg
RU5BQkxFKFZJREVPKQpAQCAtMjE1LDMzICsyMTMsMzMgQEAgcHJpdmF0ZToKICNlbmRpZgogCiAg
ICAgdm9pZCBoaWdobGlnaHRNb3VzZWRPdmVyTm9kZSgpOwotICAgIHZvaWQgc2V0U2VhcmNoaW5n
Rm9yTm9kZShFcnJvclN0cmluZyYsIGJvb2wgZW5hYmxlZCwgY29uc3QgSlNPTjo6T2JqZWN0KiBo
aWdobGlnaHRDb25maWcsIGJvb2wgc2hvd1J1bGVycyk7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEhp
Z2hsaWdodENvbmZpZz4gaGlnaGxpZ2h0Q29uZmlnRnJvbUluc3BlY3Rvck9iamVjdChFcnJvclN0
cmluZyYsIGNvbnN0IEpTT046Ok9iamVjdCogaGlnaGxpZ2h0SW5zcGVjdG9yT2JqZWN0KTsKKyAg
ICB2b2lkIHNldFNlYXJjaGluZ0Zvck5vZGUoSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJp
bmcmLCBib29sIGVuYWJsZWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgaGlnaGxpZ2h0Q29uZmln
LCBib29sIHNob3dSdWxlcnMpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxIaWdobGlnaHRDb25maWc+
IGhpZ2hsaWdodENvbmZpZ0Zyb21JbnNwZWN0b3JPYmplY3QoSW5zcGVjdG9yOjpQcm90b2NvbDo6
RXJyb3JTdHJpbmcmLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIGhpZ2hsaWdodEluc3BlY3Rvck9i
amVjdCk7CiAKICAgICAvLyBOb2RlLXJlbGF0ZWQgbWV0aG9kcy4KLSAgICB0eXBlZGVmIEhhc2hN
YXA8UmVmUHRyPE5vZGU+LCBpbnQ+IE5vZGVUb0lkTWFwOwotICAgIGludCBiaW5kKE5vZGUqLCBO
b2RlVG9JZE1hcCopOworICAgIHR5cGVkZWYgSGFzaE1hcDxSZWZQdHI8Tm9kZT4sIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkPiBOb2RlVG9JZE1hcDsKKyAgICBJbnNwZWN0b3I6OlBy
b3RvY29sOjpET006Ok5vZGVJZCBiaW5kKE5vZGUqLCBOb2RlVG9JZE1hcCopOwogICAgIHZvaWQg
dW5iaW5kKE5vZGUqLCBOb2RlVG9JZE1hcCopOwogCi0gICAgTm9kZSogYXNzZXJ0RWRpdGFibGVO
b2RlKEVycm9yU3RyaW5nJiwgaW50IG5vZGVJZCk7Ci0gICAgRWxlbWVudCogYXNzZXJ0RWRpdGFi
bGVFbGVtZW50KEVycm9yU3RyaW5nJiwgaW50IG5vZGVJZCk7CisgICAgTm9kZSogYXNzZXJ0RWRp
dGFibGVOb2RlKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nJiwgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6RE9NOjpOb2RlSWQpOworICAgIEVsZW1lbnQqIGFzc2VydEVkaXRhYmxlRWxlbWVu
dChJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZyYsIEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRPTTo6Tm9kZUlkKTsKIAotICAgIHZvaWQgcHVzaENoaWxkTm9kZXNUb0Zyb250ZW5kKGludCBu
b2RlSWQsIGludCBkZXB0aCA9IDEpOworICAgIHZvaWQgcHVzaENoaWxkTm9kZXNUb0Zyb250ZW5k
KEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkLCBpbnQgZGVwdGggPSAxKTsKIAogICAg
IFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+IGJ1aWxkT2JqZWN0Rm9yTm9kZShO
b2RlKiwgaW50IGRlcHRoLCBOb2RlVG9JZE1hcCopOwogICAgIFJlZjxKU09OOjpBcnJheU9mPFN0
cmluZz4+IGJ1aWxkQXJyYXlGb3JFbGVtZW50QXR0cmlidXRlcyhFbGVtZW50Kik7CiAgICAgUmVm
PEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlPj4gYnVpbGRBcnJh
eUZvckNvbnRhaW5lckNoaWxkcmVuKE5vZGUqIGNvbnRhaW5lciwgaW50IGRlcHRoLCBOb2RlVG9J
ZE1hcCogbm9kZXNNYXApOwogICAgIFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRPTTo6Tm9kZT4+IGJ1aWxkQXJyYXlGb3JQc2V1ZG9FbGVtZW50cyhjb25zdCBFbGVt
ZW50JiwgTm9kZVRvSWRNYXAqIG5vZGVzTWFwKTsKLSAgICBSZWY8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6RE9NOjpFdmVudExpc3RlbmVyPiBidWlsZE9iamVjdEZvckV2ZW50TGlzdGVuZXIoY29uc3Qg
UmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXImLCBpbnQgaWRlbnRpZmllciwgRXZlbnRUYXJnZXQmLCBj
b25zdCBBdG9tU3RyaW5nJiBldmVudFR5cGUsIGJvb2wgZGlzYWJsZWQsIGNvbnN0IFJlZlB0cjxK
U0M6OkJyZWFrcG9pbnQ+Jik7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6
QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM+IGJ1aWxkT2JqZWN0Rm9yQWNjZXNzaWJpbGl0eVByb3Bl
cnRpZXMoTm9kZSopOwotICAgIHZvaWQgcHJvY2Vzc0FjY2Vzc2liaWxpdHlDaGlsZHJlbihBWENv
cmVPYmplY3QmLCBKU09OOjpBcnJheU9mPGludD4mKTsKKyAgICBSZWY8SW5zcGVjdG9yOjpQcm90
b2NvbDo6RE9NOjpFdmVudExpc3RlbmVyPiBidWlsZE9iamVjdEZvckV2ZW50TGlzdGVuZXIoY29u
c3QgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXImLCBJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkV2
ZW50TGlzdGVuZXJJZCBpZGVudGlmaWVyLCBFdmVudFRhcmdldCYsIGNvbnN0IEF0b21TdHJpbmcm
IGV2ZW50VHlwZSwgYm9vbCBkaXNhYmxlZCwgY29uc3QgUmVmUHRyPEpTQzo6QnJlYWtwb2ludD4m
KTsKKyAgICBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVy
dGllcz4gYnVpbGRPYmplY3RGb3JBY2Nlc3NpYmlsaXR5UHJvcGVydGllcyhOb2RlJik7CisgICAg
dm9pZCBwcm9jZXNzQWNjZXNzaWJpbGl0eUNoaWxkcmVuKEFYQ29yZU9iamVjdCYsIEpTT046OkFy
cmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQ+Jik7CiAgICAgCiAgICAgTm9k
ZSogbm9kZUZvclBhdGgoY29uc3QgU3RyaW5nJiBwYXRoKTsKLSAgICBOb2RlKiBub2RlRm9yT2Jq
ZWN0SWQoY29uc3QgU3RyaW5nJiBvYmplY3RJZCk7CisgICAgTm9kZSogbm9kZUZvck9iamVjdElk
KGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdElkJik7CiAK
ICAgICB2b2lkIGRpc2NhcmRCaW5kaW5ncygpOwogCi0gICAgdm9pZCBpbm5lckhpZ2hsaWdodFF1
YWQoc3RkOjp1bmlxdWVfcHRyPEZsb2F0UXVhZD4sIGNvbnN0IEpTT046Ok9iamVjdCogY29sb3Is
IGNvbnN0IEpTT046Ok9iamVjdCogb3V0bGluZUNvbG9yLCBjb25zdCBib29sKiB1c2VQYWdlQ29v
cmRpbmF0ZXMpOworICAgIHZvaWQgaW5uZXJIaWdobGlnaHRRdWFkKHN0ZDo6dW5pcXVlX3B0cjxG
bG9hdFF1YWQ+LCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIGNvbG9yLCBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiYmIG91dGxpbmVDb2xvciwgT3B0aW9uYWw8Ym9vbD4mJiB1c2VQYWdlQ29vcmRpbmF0ZXMp
OwogCiAgICAgSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdE1hbmFnZXImIG1faW5qZWN0ZWRTY3Jp
cHRNYW5hZ2VyOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxJbnNwZWN0b3I6OkRPTUZyb250ZW5kRGlz
cGF0Y2hlcj4gbV9mcm9udGVuZERpc3BhdGNoZXI7CkBAIC0yNTEsMTAgKzI0OSwxMCBAQCBwcml2
YXRlOgogICAgIE5vZGVUb0lkTWFwIG1fZG9jdW1lbnROb2RlVG9JZE1hcDsKICAgICAvLyBPd25z
IG5vZGUgbWFwcGluZ3MgZm9yIGRhbmdsaW5nIG5vZGVzLgogICAgIFZlY3RvcjxzdGQ6OnVuaXF1
ZV9wdHI8Tm9kZVRvSWRNYXA+PiBtX2RhbmdsaW5nTm9kZVRvSWRNYXBzOwotICAgIEhhc2hNYXA8
aW50LCBOb2RlKj4gbV9pZFRvTm9kZTsKLSAgICBIYXNoTWFwPGludCwgTm9kZVRvSWRNYXAqPiBt
X2lkVG9Ob2Rlc01hcDsKLSAgICBIYXNoU2V0PGludD4gbV9jaGlsZHJlblJlcXVlc3RlZDsKLSAg
ICBpbnQgbV9sYXN0Tm9kZUlkIHsgMSB9OworICAgIEhhc2hNYXA8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6RE9NOjpOb2RlSWQsIE5vZGUqPiBtX2lkVG9Ob2RlOworICAgIEhhc2hNYXA8SW5zcGVjdG9y
OjpQcm90b2NvbDo6RE9NOjpOb2RlSWQsIE5vZGVUb0lkTWFwKj4gbV9pZFRvTm9kZXNNYXA7Cisg
ICAgSGFzaFNldDxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZD4gbV9jaGlsZHJlblJl
cXVlc3RlZDsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZCBtX2xhc3ROb2Rl
SWQgeyAxIH07CiAgICAgUmVmUHRyPERvY3VtZW50PiBtX2RvY3VtZW50OwogICAgIHR5cGVkZWYg
SGFzaE1hcDxTdHJpbmcsIFZlY3RvcjxSZWZQdHI8Tm9kZT4+PiBTZWFyY2hSZXN1bHRzOwogICAg
IFNlYXJjaFJlc3VsdHMgbV9zZWFyY2hSZXN1bHRzOwpAQCAtMjg1LDcgKzI4Myw3IEBAIHByaXZh
dGU6CiAjZW5kaWYKIAogICAgIHN0cnVjdCBJbnNwZWN0b3JFdmVudExpc3RlbmVyIHsKLSAgICAg
ICAgaW50IGlkZW50aWZpZXIgeyAxIH07CisgICAgICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRP
TTo6RXZlbnRMaXN0ZW5lcklkIGlkZW50aWZpZXIgeyAxIH07CiAgICAgICAgIFJlZlB0cjxFdmVu
dFRhcmdldD4gZXZlbnRUYXJnZXQ7CiAgICAgICAgIFJlZlB0cjxFdmVudExpc3RlbmVyPiBldmVu
dExpc3RlbmVyOwogICAgICAgICBBdG9tU3RyaW5nIGV2ZW50VHlwZTsKQEAgLTI5NSw3ICsyOTMs
NyBAQCBwcml2YXRlOgogCiAgICAgICAgIEluc3BlY3RvckV2ZW50TGlzdGVuZXIoKSB7IH0KIAot
ICAgICAgICBJbnNwZWN0b3JFdmVudExpc3RlbmVyKGludCBpZGVudGlmaWVyLCBFdmVudFRhcmdl
dCYgdGFyZ2V0LCBjb25zdCBBdG9tU3RyaW5nJiB0eXBlLCBFdmVudExpc3RlbmVyJiBsaXN0ZW5l
ciwgYm9vbCBjYXB0dXJlKQorICAgICAgICBJbnNwZWN0b3JFdmVudExpc3RlbmVyKEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRPTTo6RXZlbnRMaXN0ZW5lcklkIGlkZW50aWZpZXIsIEV2ZW50VGFyZ2V0
JiB0YXJnZXQsIGNvbnN0IEF0b21TdHJpbmcmIHR5cGUsIEV2ZW50TGlzdGVuZXImIGxpc3RlbmVy
LCBib29sIGNhcHR1cmUpCiAgICAgICAgICAgICA6IGlkZW50aWZpZXIoaWRlbnRpZmllcikKICAg
ICAgICAgICAgICwgZXZlbnRUYXJnZXQoJnRhcmdldCkKICAgICAgICAgICAgICwgZXZlbnRMaXN0
ZW5lcigmbGlzdGVuZXIpCkBAIC0zMjEsOCArMzE5LDggQEAgcHJpdmF0ZToKICAgICBmcmllbmQg
Y2xhc3MgRXZlbnRGaXJlZENhbGxiYWNrOwogCiAgICAgSGFzaFNldDxjb25zdCBFdmVudCo+IG1f
ZGlzcGF0Y2hlZEV2ZW50czsKLSAgICBIYXNoTWFwPGludCwgSW5zcGVjdG9yRXZlbnRMaXN0ZW5l
cj4gbV9ldmVudExpc3RlbmVyRW50cmllczsKLSAgICBpbnQgbV9sYXN0RXZlbnRMaXN0ZW5lcklk
IHsgMSB9OworICAgIEhhc2hNYXA8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpFdmVudExpc3Rl
bmVySWQsIEluc3BlY3RvckV2ZW50TGlzdGVuZXI+IG1fZXZlbnRMaXN0ZW5lckVudHJpZXM7Cisg
ICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpFdmVudExpc3RlbmVySWQgbV9sYXN0RXZlbnRM
aXN0ZW5lcklkIHsgMSB9OwogCiAgICAgYm9vbCBtX3NlYXJjaGluZ0Zvck5vZGUgeyBmYWxzZSB9
OwogICAgIGJvb2wgbV9zdXBwcmVzc0F0dHJpYnV0ZU1vZGlmaWVkRXZlbnQgeyBmYWxzZSB9Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01E
ZWJ1Z2dlckFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVj
dG9yRE9NRGVidWdnZXJBZ2VudC5jcHAKaW5kZXggMDc5YTExNjg2ZTQ5OGI4NDc5OTU1OWNmM2Nk
OGFmMmY3YzA5MTgxNy4uYzMyZTVhMzkxNGU3OWYzMGJjMTRlNjhkZDZjZmJkMzFiMDA1NDlkZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01E
ZWJ1Z2dlckFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0lu
c3BlY3RvckRPTURlYnVnZ2VyQWdlbnQuY3BwCkBAIC0xMjgsMTA5ICsxMjgsOTQgQEAgdm9pZCBJ
bnNwZWN0b3JET01EZWJ1Z2dlckFnZW50OjptYWluRnJhbWVOYXZpZ2F0ZWQoKQogICAgICAgICBt
X3BhdXNlT25BbGxUaW1lb3V0c0JyZWFrcG9pbnQtPnJlc2V0SGl0Q291bnQoKTsKIH0KIAotdm9p
ZCBJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50OjpzZXRFdmVudEJyZWFrcG9pbnQoRXJyb3JTdHJp
bmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGJyZWFrcG9pbnRUeXBlU3RyaW5nLCBjb25z
dCBTdHJpbmcqIGV2ZW50TmFtZSwgY29uc3QgSlNPTjo6T2JqZWN0KiBvcHRpb25zUGF5bG9hZCkK
K1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQ6
OnNldEV2ZW50QnJlYWtwb2ludChQcm90b2NvbDo6RE9NRGVidWdnZXI6OkV2ZW50QnJlYWtwb2lu
dFR5cGUgYnJlYWtwb2ludFR5cGUsIGNvbnN0IFN0cmluZyYgZXZlbnROYW1lLCBSZWZQdHI8SlNP
Tjo6T2JqZWN0PiYmIG9wdGlvbnMpCiB7Ci0gICAgaWYgKGJyZWFrcG9pbnRUeXBlU3RyaW5nLmlz
RW1wdHkoKSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJicmVha3BvaW50VHlwZSBpcyBlbXB0
eSJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcg
ZXJyb3JTdHJpbmc7CiAKLSAgICBhdXRvIGJyZWFrcG9pbnRUeXBlID0gSW5zcGVjdG9yOjpQcm90
b2NvbDo6SW5zcGVjdG9ySGVscGVyczo6cGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpFdmVudEJyZWFrcG9pbnRUeXBlPihicmVha3BvaW50
VHlwZVN0cmluZyk7Ci0gICAgaWYgKCFicmVha3BvaW50VHlwZSkgewotICAgICAgICBlcnJvclN0
cmluZyA9IG1ha2VTdHJpbmcoIlVua25vd24gYnJlYWtwb2ludFR5cGU6ICJfcywgYnJlYWtwb2lu
dFR5cGVTdHJpbmcpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgYXV0byBicmVha3Bv
aW50ID0gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGVidWdnZXJCcmVha3BvaW50RnJvbVBheWxv
YWQoZXJyb3JTdHJpbmcsIG9wdGlvbnNQYXlsb2FkKTsKKyAgICBhdXRvIGJyZWFrcG9pbnQgPSBJ
bnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkZWJ1Z2dlckJyZWFrcG9pbnRGcm9tUGF5bG9hZChlcnJv
clN0cmluZywgV1RGTW92ZShvcHRpb25zKSk7CiAgICAgaWYgKCFicmVha3BvaW50KQotICAgICAg
ICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAK
LSAgICBpZiAoZXZlbnROYW1lICYmICFldmVudE5hbWUtPmlzRW1wdHkoKSkgewotICAgICAgICBp
ZiAoYnJlYWtwb2ludFR5cGUudmFsdWUoKSA9PSBJbnNwZWN0b3I6OlByb3RvY29sOjpET01EZWJ1
Z2dlcjo6RXZlbnRCcmVha3BvaW50VHlwZTo6TGlzdGVuZXIpIHsKLSAgICAgICAgICAgIGlmICgh
bV9saXN0ZW5lckJyZWFrcG9pbnRzLmFkZCgqZXZlbnROYW1lLCBicmVha3BvaW50LnJlbGVhc2VO
b25OdWxsKCkpKQotICAgICAgICAgICAgICAgIGVycm9yU3RyaW5nID0gIkJyZWFrcG9pbnQgd2l0
aCBldmVudE5hbWUgYWxyZWFkeSBleGlzdHMiX3M7Ci0gICAgICAgICAgICByZXR1cm47CisgICAg
aWYgKCFldmVudE5hbWUuaXNFbXB0eSgpKSB7CisgICAgICAgIGlmIChicmVha3BvaW50VHlwZSA9
PSBQcm90b2NvbDo6RE9NRGVidWdnZXI6OkV2ZW50QnJlYWtwb2ludFR5cGU6Okxpc3RlbmVyKSB7
CisgICAgICAgICAgICBpZiAoIW1fbGlzdGVuZXJCcmVha3BvaW50cy5hZGQoZXZlbnROYW1lLCBi
cmVha3BvaW50LnJlbGVhc2VOb25OdWxsKCkpKQorICAgICAgICAgICAgICAgIHJldHVybiBtYWtl
VW5leHBlY3RlZCgiQnJlYWtwb2ludCB3aXRoIGV2ZW50TmFtZSBhbHJlYWR5IGV4aXN0cyJfcyk7
CisgICAgICAgICAgICByZXR1cm4geyB9OwogICAgICAgICB9CiAKLSAgICAgICAgZXJyb3JTdHJp
bmcgPSAiVW5leHBlY3RlZCBldmVudE5hbWUiX3M7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAg
cmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJVbmV4cGVjdGVkIGV2ZW50TmFtZSJfcyk7CiAgICAgfQog
Ci0gICAgc3dpdGNoIChicmVha3BvaW50VHlwZS52YWx1ZSgpKSB7Ci0gICAgY2FzZSBJbnNwZWN0
b3I6OlByb3RvY29sOjpET01EZWJ1Z2dlcjo6RXZlbnRCcmVha3BvaW50VHlwZTo6QW5pbWF0aW9u
RnJhbWU6Ci0gICAgICAgIHNldEFuaW1hdGlvbkZyYW1lQnJlYWtwb2ludChlcnJvclN0cmluZywg
V1RGTW92ZShicmVha3BvaW50KSk7Ci0gICAgICAgIGJyZWFrOworICAgIHN3aXRjaCAoYnJlYWtw
b2ludFR5cGUpIHsKKyAgICBjYXNlIFByb3RvY29sOjpET01EZWJ1Z2dlcjo6RXZlbnRCcmVha3Bv
aW50VHlwZTo6QW5pbWF0aW9uRnJhbWU6CisgICAgICAgIGlmICghc2V0QW5pbWF0aW9uRnJhbWVC
cmVha3BvaW50KGVycm9yU3RyaW5nLCBXVEZNb3ZlKGJyZWFrcG9pbnQpKSkKKyAgICAgICAgICAg
IHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CisgICAgICAgIHJldHVybiB7IH07
CiAKLSAgICBjYXNlIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpFdmVudEJyZWFr
cG9pbnRUeXBlOjpJbnRlcnZhbDoKLSAgICAgICAgaWYgKCFtX3BhdXNlT25BbGxJbnRlcnZhbHNC
cmVha3BvaW50KQotICAgICAgICAgICAgbV9wYXVzZU9uQWxsSW50ZXJ2YWxzQnJlYWtwb2ludCA9
IFdURk1vdmUoYnJlYWtwb2ludCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGVycm9yU3Ry
aW5nID0gIkJyZWFrcG9pbnQgZm9yIEludGVydmFsIGFscmVhZHkgZXhpc3RzIl9zOwotICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFByb3RvY29sOjpET01EZWJ1Z2dlcjo6RXZlbnRCcmVha3BvaW50
VHlwZTo6SW50ZXJ2YWw6CisgICAgICAgIGlmIChtX3BhdXNlT25BbGxJbnRlcnZhbHNCcmVha3Bv
aW50KQorICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJCcmVha3BvaW50IGZvciBJ
bnRlcnZhbCBhbHJlYWR5IGV4aXN0cyJfcyk7CisgICAgICAgIG1fcGF1c2VPbkFsbEludGVydmFs
c0JyZWFrcG9pbnQgPSBXVEZNb3ZlKGJyZWFrcG9pbnQpOworICAgICAgICByZXR1cm4geyB9Owog
Ci0gICAgY2FzZSBJbnNwZWN0b3I6OlByb3RvY29sOjpET01EZWJ1Z2dlcjo6RXZlbnRCcmVha3Bv
aW50VHlwZTo6TGlzdGVuZXI6Ci0gICAgICAgIGlmICghbV9wYXVzZU9uQWxsTGlzdGVuZXJzQnJl
YWtwb2ludCkKLSAgICAgICAgICAgIG1fcGF1c2VPbkFsbExpc3RlbmVyc0JyZWFrcG9pbnQgPSBX
VEZNb3ZlKGJyZWFrcG9pbnQpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBlcnJvclN0cmlu
ZyA9ICJCcmVha3BvaW50IGZvciBMaXN0ZW5lciBhbHJlYWR5IGV4aXN0cyJfczsKLSAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBQcm90b2NvbDo6RE9NRGVidWdnZXI6OkV2ZW50QnJlYWtwb2ludFR5
cGU6Okxpc3RlbmVyOgorICAgICAgICBpZiAobV9wYXVzZU9uQWxsTGlzdGVuZXJzQnJlYWtwb2lu
dCkKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiQnJlYWtwb2ludCBmb3IgTGlz
dGVuZXIgYWxyZWFkeSBleGlzdHMiX3MpOworICAgICAgICBtX3BhdXNlT25BbGxMaXN0ZW5lcnNC
cmVha3BvaW50ID0gV1RGTW92ZShicmVha3BvaW50KTsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAot
ICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NRGVidWdnZXI6OkV2ZW50QnJlYWtwb2lu
dFR5cGU6OlRpbWVvdXQ6Ci0gICAgICAgIGlmICghbV9wYXVzZU9uQWxsVGltZW91dHNCcmVha3Bv
aW50KQotICAgICAgICAgICAgbV9wYXVzZU9uQWxsVGltZW91dHNCcmVha3BvaW50ID0gV1RGTW92
ZShicmVha3BvaW50KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZXJyb3JTdHJpbmcgPSAi
QnJlYWtwb2ludCBmb3IgVGltZW91dCBhbHJlYWR5IGV4aXN0cyJfczsKLSAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBQcm90b2NvbDo6RE9NRGVidWdnZXI6OkV2ZW50QnJlYWtwb2ludFR5cGU6OlRp
bWVvdXQ6CisgICAgICAgIGlmIChtX3BhdXNlT25BbGxUaW1lb3V0c0JyZWFrcG9pbnQpCisgICAg
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkJyZWFrcG9pbnQgZm9yIFRpbWVvdXQgYWxy
ZWFkeSBleGlzdHMiX3MpOworICAgICAgICBtX3BhdXNlT25BbGxUaW1lb3V0c0JyZWFrcG9pbnQg
PSBXVEZNb3ZlKGJyZWFrcG9pbnQpOworICAgICAgICByZXR1cm4geyB9OwogICAgIH0KKworICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTm90IHN1
cHBvcnRlZCIpOwogfQogCi12b2lkIEluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQ6OnJlbW92ZUV2
ZW50QnJlYWtwb2ludChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgYnJl
YWtwb2ludFR5cGVTdHJpbmcsIGNvbnN0IFN0cmluZyogZXZlbnROYW1lKQorUHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudDo6cmVtb3ZlRXZlbnRC
cmVha3BvaW50KFByb3RvY29sOjpET01EZWJ1Z2dlcjo6RXZlbnRCcmVha3BvaW50VHlwZSBicmVh
a3BvaW50VHlwZSwgY29uc3QgU3RyaW5nJiBldmVudE5hbWUpCiB7Ci0gICAgaWYgKGJyZWFrcG9p
bnRUeXBlU3RyaW5nLmlzRW1wdHkoKSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJicmVha3Bv
aW50VHlwZSBpcyBlbXB0eSJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBQcm90b2Nv
bDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CiAKLSAgICBhdXRvIGJyZWFrcG9pbnRUeXBlID0g
SW5zcGVjdG9yOjpQcm90b2NvbDo6SW5zcGVjdG9ySGVscGVyczo6cGFyc2VFbnVtVmFsdWVGcm9t
U3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpFdmVudEJyZWFrcG9pbnRU
eXBlPihicmVha3BvaW50VHlwZVN0cmluZyk7Ci0gICAgaWYgKCFicmVha3BvaW50VHlwZSkgewot
ICAgICAgICBlcnJvclN0cmluZyA9IG1ha2VTdHJpbmcoIlVua25vd24gYnJlYWtwb2ludFR5cGU6
ICJfcywgYnJlYWtwb2ludFR5cGVTdHJpbmcpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgaWYgKGV2ZW50TmFtZSAmJiAhZXZlbnROYW1lLT5pc0VtcHR5KCkpIHsKLSAgICAgICAgaWYg
KGJyZWFrcG9pbnRUeXBlLnZhbHVlKCkgPT0gSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NRGVidWdn
ZXI6OkV2ZW50QnJlYWtwb2ludFR5cGU6Okxpc3RlbmVyKSB7Ci0gICAgICAgICAgICBpZiAoIW1f
bGlzdGVuZXJCcmVha3BvaW50cy5yZW1vdmUoKmV2ZW50TmFtZSkpCi0gICAgICAgICAgICAgICAg
ZXJyb3JTdHJpbmcgPSAiQnJlYWtwb2ludCBmb3IgZ2l2ZW4gZXZlbnROYW1lIG1pc3NpbmciX3M7
Ci0gICAgICAgICAgICByZXR1cm47CisgICAgaWYgKCFldmVudE5hbWUuaXNFbXB0eSgpKSB7Cisg
ICAgICAgIGlmIChicmVha3BvaW50VHlwZSA9PSBQcm90b2NvbDo6RE9NRGVidWdnZXI6OkV2ZW50
QnJlYWtwb2ludFR5cGU6Okxpc3RlbmVyKSB7CisgICAgICAgICAgICBpZiAoIW1fbGlzdGVuZXJC
cmVha3BvaW50cy5yZW1vdmUoZXZlbnROYW1lKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbWFr
ZVVuZXhwZWN0ZWQoIkJyZWFrcG9pbnQgZm9yIGdpdmVuIGV2ZW50TmFtZSBtaXNzaW5nIl9zKTsK
KyAgICAgICAgICAgIHJldHVybiB7IH07CiAgICAgICAgIH0KIAotICAgICAgICBlcnJvclN0cmlu
ZyA9ICJVbmV4cGVjdGVkIGV2ZW50TmFtZSJfczsKLSAgICAgICAgcmV0dXJuOworICAgICAgICBy
ZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIlVuZXhwZWN0ZWQgZXZlbnROYW1lIl9zKTsKICAgICB9CiAK
LSAgICBzd2l0Y2ggKGJyZWFrcG9pbnRUeXBlLnZhbHVlKCkpIHsKLSAgICBjYXNlIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpFdmVudEJyZWFrcG9pbnRUeXBlOjpBbmltYXRpb25G
cmFtZToKLSAgICAgICAgc2V0QW5pbWF0aW9uRnJhbWVCcmVha3BvaW50KGVycm9yU3RyaW5nLCBu
dWxscHRyKTsKLSAgICAgICAgYnJlYWs7CisgICAgc3dpdGNoIChicmVha3BvaW50VHlwZSkgewor
ICAgIGNhc2UgUHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpFdmVudEJyZWFrcG9pbnRUeXBlOjpBbmlt
YXRpb25GcmFtZToKKyAgICAgICAgaWYgKCFzZXRBbmltYXRpb25GcmFtZUJyZWFrcG9pbnQoZXJy
b3JTdHJpbmcsIG51bGxwdHIpKQorICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVy
cm9yU3RyaW5nKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGNhc2UgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6RE9NRGVidWdnZXI6OkV2ZW50QnJlYWtwb2ludFR5cGU6OkludGVydmFsOgorICAg
IGNhc2UgUHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpFdmVudEJyZWFrcG9pbnRUeXBlOjpJbnRlcnZh
bDoKICAgICAgICAgaWYgKCFtX3BhdXNlT25BbGxJbnRlcnZhbHNCcmVha3BvaW50KQotICAgICAg
ICAgICAgZXJyb3JTdHJpbmcgPSAiQnJlYWtwb2ludCBmb3IgSW50ZXJ2YWxzIG1pc3NpbmciX3M7
CisgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkJyZWFrcG9pbnQgZm9yIEludGVy
dmFscyBtaXNzaW5nIl9zKTsKICAgICAgICAgbV9wYXVzZU9uQWxsSW50ZXJ2YWxzQnJlYWtwb2lu
dCA9IG51bGxwdHI7Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4geyB9OwogCi0gICAg
Y2FzZSBJbnNwZWN0b3I6OlByb3RvY29sOjpET01EZWJ1Z2dlcjo6RXZlbnRCcmVha3BvaW50VHlw
ZTo6TGlzdGVuZXI6CisgICAgY2FzZSBQcm90b2NvbDo6RE9NRGVidWdnZXI6OkV2ZW50QnJlYWtw
b2ludFR5cGU6Okxpc3RlbmVyOgogICAgICAgICBpZiAoIW1fcGF1c2VPbkFsbExpc3RlbmVyc0Jy
ZWFrcG9pbnQpCi0gICAgICAgICAgICBlcnJvclN0cmluZyA9ICJCcmVha3BvaW50IGZvciBMaXN0
ZW5lcnMgbWlzc2luZyJfczsKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiQnJl
YWtwb2ludCBmb3IgTGlzdGVuZXJzIG1pc3NpbmciX3MpOwogICAgICAgICBtX3BhdXNlT25BbGxM
aXN0ZW5lcnNCcmVha3BvaW50ID0gbnVsbHB0cjsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJl
dHVybiB7IH07CiAKLSAgICBjYXNlIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpF
dmVudEJyZWFrcG9pbnRUeXBlOjpUaW1lb3V0OgorICAgIGNhc2UgUHJvdG9jb2w6OkRPTURlYnVn
Z2VyOjpFdmVudEJyZWFrcG9pbnRUeXBlOjpUaW1lb3V0OgogICAgICAgICBpZiAoIW1fcGF1c2VP
bkFsbFRpbWVvdXRzQnJlYWtwb2ludCkKLSAgICAgICAgICAgIGVycm9yU3RyaW5nID0gIkJyZWFr
cG9pbnQgZm9yIFRpbWVvdXRzIG1pc3NpbmciX3M7CisgICAgICAgICAgICByZXR1cm4gbWFrZVVu
ZXhwZWN0ZWQoIkJyZWFrcG9pbnQgZm9yIFRpbWVvdXRzIG1pc3NpbmciX3MpOwogICAgICAgICBt
X3BhdXNlT25BbGxUaW1lb3V0c0JyZWFrcG9pbnQgPSBudWxscHRyOwotICAgICAgICBicmVhazsK
KyAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk5vdCBzdXBwb3J0ZWQiKTsKIH0KIAogdm9pZCBJ
bnNwZWN0b3JET01EZWJ1Z2dlckFnZW50Ojp3aWxsSGFuZGxlRXZlbnQoRXZlbnQmIGV2ZW50LCBj
b25zdCBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lciYgcmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIpCkBA
IC0zMjksNDUgKzMxNCw1MCBAQCB2b2lkIEluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQ6OmRpZEZp
cmVUaW1lcihib29sIG9uZVNob3QpCiAgICAgbV9kZWJ1Z2dlckFnZW50LT5jYW5jZWxQYXVzZUZv
clNwZWNpYWxCcmVha3BvaW50KCpicmVha3BvaW50KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01E
ZWJ1Z2dlckFnZW50OjpzZXRVUkxCcmVha3BvaW50KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywg
Y29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IGJvb2wqIG9wdGlvbmFsSXNSZWdleCwgY29uc3QgSlNP
Tjo6T2JqZWN0KiBvcHRpb25zUGF5bG9hZCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+
IEluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQ6OnNldFVSTEJyZWFrcG9pbnQoY29uc3QgU3RyaW5n
JiB1cmwsIE9wdGlvbmFsPGJvb2w+JiYgaXNSZWdleCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBv
cHRpb25zKQogewotICAgIGF1dG8gYnJlYWtwb2ludCA9IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6
OmRlYnVnZ2VyQnJlYWtwb2ludEZyb21QYXlsb2FkKGVycm9yU3RyaW5nLCBvcHRpb25zUGF5bG9h
ZCk7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCisgICAgYXV0byBi
cmVha3BvaW50ID0gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGVidWdnZXJCcmVha3BvaW50RnJv
bVBheWxvYWQoZXJyb3JTdHJpbmcsIFdURk1vdmUob3B0aW9ucykpOwogICAgIGlmICghYnJlYWtw
b2ludCkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJy
b3JTdHJpbmcpOwogCiAgICAgaWYgKHVybC5pc0VtcHR5KCkpIHsKLSAgICAgICAgaWYgKCFtX3Bh
dXNlT25BbGxVUkxzQnJlYWtwb2ludCkKLSAgICAgICAgICAgIG1fcGF1c2VPbkFsbFVSTHNCcmVh
a3BvaW50ID0gV1RGTW92ZShicmVha3BvaW50KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
ZXJyb3JTdHJpbmcgPSAiQnJlYWtwb2ludCBmb3IgYWxsIFVSTHMgYWxyZWFkeSBleGlzdHMiX3M7
Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKG1fcGF1c2VPbkFsbFVSTHNCcmVha3BvaW50
KQorICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJCcmVha3BvaW50IGZvciBhbGwg
VVJMcyBhbHJlYWR5IGV4aXN0cyJfcyk7CisgICAgICAgIG1fcGF1c2VPbkFsbFVSTHNCcmVha3Bv
aW50ID0gV1RGTW92ZShicmVha3BvaW50KTsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAK
LSAgICBpZiAob3B0aW9uYWxJc1JlZ2V4ICYmICpvcHRpb25hbElzUmVnZXgpIHsKKyAgICBpZiAo
aXNSZWdleCAmJiAqaXNSZWdleCkgewogICAgICAgICBpZiAoIW1fdXJsUmVnZXhCcmVha3BvaW50
cy5hZGQodXJsLCBicmVha3BvaW50LnJlbGVhc2VOb25OdWxsKCkpKQotICAgICAgICAgICAgZXJy
b3JTdHJpbmcgPSAiQnJlYWtwb2ludCBmb3IgZ2l2ZW4gcmVnZXggYWxyZWFkeSBleGlzdHMiX3M7
CisgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkJyZWFrcG9pbnQgZm9yIGdpdmVu
IHJlZ2V4IGFscmVhZHkgZXhpc3RzIl9zKTsKICAgICB9IGVsc2UgewogICAgICAgICBpZiAoIW1f
dXJsVGV4dEJyZWFrcG9pbnRzLmFkZCh1cmwsIGJyZWFrcG9pbnQucmVsZWFzZU5vbk51bGwoKSkp
Ci0gICAgICAgICAgICBlcnJvclN0cmluZyA9ICJCcmVha3BvaW50IGZvciBnaXZlbiBVUkwgYWxy
ZWFkeSBleGlzdHMiX3M7CisgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkJyZWFr
cG9pbnQgZm9yIGdpdmVuIFVSTCBhbHJlYWR5IGV4aXN0cyJfcyk7CiAgICAgfQorCisgICAgcmV0
dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50OjpyZW1vdmVVUkxC
cmVha3BvaW50KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiB1cmwsIGNv
bnN0IGJvb2wqIG9wdGlvbmFsSXNSZWdleCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+
IEluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQ6OnJlbW92ZVVSTEJyZWFrcG9pbnQoY29uc3QgU3Ry
aW5nJiB1cmwsIE9wdGlvbmFsPGJvb2w+JiYgaXNSZWdleCkKIHsKICAgICBpZiAodXJsLmlzRW1w
dHkoKSkgewogICAgICAgICBpZiAoIW1fcGF1c2VPbkFsbFVSTHNCcmVha3BvaW50KQotICAgICAg
ICAgICAgZXJyb3JTdHJpbmcgPSAiQnJlYWtwb2ludCBmb3IgYWxsIFVSTHMgbWlzc2luZyJfczsK
KyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiQnJlYWtwb2ludCBmb3IgYWxsIFVS
THMgbWlzc2luZyJfcyk7CiAgICAgICAgIG1fcGF1c2VPbkFsbFVSTHNCcmVha3BvaW50ID0gbnVs
bHB0cjsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAotICAg
IGlmIChvcHRpb25hbElzUmVnZXggJiYgKm9wdGlvbmFsSXNSZWdleCkgeworICAgIGlmIChpc1Jl
Z2V4ICYmICppc1JlZ2V4KSB7CiAgICAgICAgIGlmICghbV91cmxSZWdleEJyZWFrcG9pbnRzLnJl
bW92ZSh1cmwpKQotICAgICAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWlzc2luZyBicmVha3BvaW50
IGZvciBnaXZlbiByZWdleCJfczsKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgi
TWlzc2luZyBicmVha3BvaW50IGZvciBnaXZlbiByZWdleCJfcyk7CiAgICAgfSBlbHNlIHsKICAg
ICAgICAgaWYgKCFtX3VybFRleHRCcmVha3BvaW50cy5yZW1vdmUodXJsKSkKLSAgICAgICAgICAg
IGVycm9yU3RyaW5nID0gIk1pc3NpbmcgYnJlYWtwb2ludCBmb3IgZ2l2ZW4gVVJMIl9zOworICAg
ICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJNaXNzaW5nIGJyZWFrcG9pbnQgZm9yIGdp
dmVuIFVSTCJfcyk7CiAgICAgfQorCisgICAgcmV0dXJuIHsgfTsKIH0KIAogdm9pZCBJbnNwZWN0
b3JET01EZWJ1Z2dlckFnZW50OjpicmVha09uVVJMSWZOZWVkZWQoY29uc3QgU3RyaW5nJiB1cmws
IFVSTEJyZWFrcG9pbnRTb3VyY2Ugc291cmNlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50LmggYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQuaAppbmRleCA0
ZWMwZjA4YzliNWExYzI3ZGQ0M2VhODU0MDRlY2U2MmM5MzZmMWZhLi44OTYwOWVjZmMwZDg3OTY3
NDFkNDU1YTAzZTdkYWMwOTFlOGRjYzhkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQuaApAQCAtNTAs
OCArNTAsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBFdmVudDsKIGNsYXNzIFJlZ2lz
dGVyZWRFdmVudExpc3RlbmVyOwogCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQogY2xh
c3MgSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudCA6IHB1YmxpYyBJbnNwZWN0b3JBZ2VudEJhc2Us
IHB1YmxpYyBJbnNwZWN0b3I6OkRPTURlYnVnZ2VyQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyLCBw
dWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpMaXN0ZW5lciB7CiAgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudCk7CiAgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CkBAIC02NSwxMCArNjMsMTAgQEAgcHVibGljOgogICAgIHZp
cnR1YWwgYm9vbCBlbmFibGVkKCkgY29uc3Q7CiAKICAgICAvLyBET01EZWJ1Z2dlckJhY2tlbmRE
aXNwYXRjaGVySGFuZGxlcgotICAgIHZvaWQgc2V0VVJMQnJlYWtwb2ludChFcnJvclN0cmluZyYs
IGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBib29sKiBpc1JlZ2V4LCBjb25zdCBKU09OOjpPYmpl
Y3QqIG9wdGlvbnMpIGZpbmFsOwotICAgIHZvaWQgcmVtb3ZlVVJMQnJlYWtwb2ludChFcnJvclN0
cmluZyYsIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBib29sKiBpc1JlZ2V4KSBmaW5hbDsKLSAg
ICB2b2lkIHNldEV2ZW50QnJlYWtwb2ludChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgYnJl
YWtwb2ludFR5cGUsIGNvbnN0IFN0cmluZyogZXZlbnROYW1lLCBjb25zdCBKU09OOjpPYmplY3Qq
IG9wdGlvbnMpIGZpbmFsOwotICAgIHZvaWQgcmVtb3ZlRXZlbnRCcmVha3BvaW50KEVycm9yU3Ry
aW5nJiwgY29uc3QgU3RyaW5nJiBicmVha3BvaW50VHlwZSwgY29uc3QgU3RyaW5nKiBldmVudE5h
bWUpIGZpbmFsOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4g
c2V0VVJMQnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHVybCwgT3B0aW9uYWw8Ym9vbD4mJiBpc1Jl
Z2V4LCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIG9wdGlvbnMpIGZpbmFsOworICAgIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gcmVtb3ZlVVJMQnJlYWtwb2ludChjb25z
dCBTdHJpbmcmIHVybCwgT3B0aW9uYWw8Ym9vbD4mJiBpc1JlZ2V4KSBmaW5hbDsKKyAgICBJbnNw
ZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHNldEV2ZW50QnJlYWtwb2ludChJ
bnNwZWN0b3I6OlByb3RvY29sOjpET01EZWJ1Z2dlcjo6RXZlbnRCcmVha3BvaW50VHlwZSwgY29u
c3QgU3RyaW5nJiBldmVudE5hbWUsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgb3B0aW9ucykgZmlu
YWw7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiByZW1vdmVF
dmVudEJyZWFrcG9pbnQoSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NRGVidWdnZXI6OkV2ZW50QnJl
YWtwb2ludFR5cGUsIGNvbnN0IFN0cmluZyYgZXZlbnROYW1lKSBmaW5hbDsKIAogICAgIC8vIElu
c3BlY3RvckRlYnVnZ2VyQWdlbnQ6Okxpc3RlbmVyCiAgICAgdm9pZCBkZWJ1Z2dlcldhc0VuYWJs
ZWQoKSBvdmVycmlkZTsKQEAgLTg4LDcgKzg2LDcgQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwg
dm9pZCBlbmFibGUoKTsKICAgICB2aXJ0dWFsIHZvaWQgZGlzYWJsZSgpOwogCi0gICAgdmlydHVh
bCB2b2lkIHNldEFuaW1hdGlvbkZyYW1lQnJlYWtwb2ludChFcnJvclN0cmluZyYsIFJlZlB0cjxK
U0M6OkJyZWFrcG9pbnQ+JiYpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgc2V0QW5pbWF0aW9uRnJh
bWVCcmVha3BvaW50KEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nJiwgUmVmUHRyPEpT
Qzo6QnJlYWtwb2ludD4mJikgPSAwOwogCiAgICAgSW5zcGVjdG9yOjpJbnNwZWN0b3JEZWJ1Z2dl
ckFnZW50KiBtX2RlYnVnZ2VyQWdlbnQgeyBudWxscHRyIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50
LmNwcAppbmRleCBlNTkxZTkxNjlkZjMwNDU0NTYyMGI1NDAzMmI2MmZhMmJhZGVjYjZlLi4wM2E3
ZmQwOGQyMDU3YzIyY2FjZGNmODUwNThmMWU0ZGYwNGRkN2YwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTVN0b3JhZ2VBZ2VudC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01TdG9yYWdlQWdl
bnQuY3BwCkBAIC03MCw0MSArNzAsMzkgQEAgdm9pZCBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6
OmRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kUm8KIAogdm9p
ZCBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5k
KEluc3BlY3Rvcjo6RGlzY29ubmVjdFJlYXNvbikKIHsKLSAgICBFcnJvclN0cmluZyBpZ25vcmVk
OwotICAgIGRpc2FibGUoaWdub3JlZCk7CisgICAgZGlzYWJsZSgpOwogfQogCi12b2lkIEluc3Bl
Y3RvckRPTVN0b3JhZ2VBZ2VudDo6ZW5hYmxlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZykKK1By
b3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6ZW5h
YmxlKCkKIHsKLSAgICBpZiAobV9pbnN0cnVtZW50aW5nQWdlbnRzLmVuYWJsZWRET01TdG9yYWdl
QWdlbnQoKSA9PSB0aGlzKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIkRPTVN0b3JhZ2UgZG9t
YWluIGFscmVhZHkgZW5hYmxlZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAo
bV9pbnN0cnVtZW50aW5nQWdlbnRzLmVuYWJsZWRET01TdG9yYWdlQWdlbnQoKSA9PSB0aGlzKQor
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkRPTVN0b3JhZ2UgZG9tYWluIGFscmVhZHkg
ZW5hYmxlZCJfcyk7CiAKICAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMuc2V0RW5hYmxlZERPTVN0
b3JhZ2VBZ2VudCh0aGlzKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9y
RE9NU3RvcmFnZUFnZW50OjpkaXNhYmxlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZykKK1Byb3Rv
Y29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6ZGlzYWJs
ZSgpCiB7Ci0gICAgaWYgKG1faW5zdHJ1bWVudGluZ0FnZW50cy5lbmFibGVkRE9NU3RvcmFnZUFn
ZW50KCkgIT0gdGhpcykgewotICAgICAgICBlcnJvclN0cmluZyA9ICJET01TdG9yYWdlIGRvbWFp
biBhbHJlYWR5IGRpc2FibGVkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICht
X2luc3RydW1lbnRpbmdBZ2VudHMuZW5hYmxlZERPTVN0b3JhZ2VBZ2VudCgpICE9IHRoaXMpCisg
ICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiRE9NU3RvcmFnZSBkb21haW4gYWxyZWFkeSBk
aXNhYmxlZCJfcyk7CiAKICAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMuc2V0RW5hYmxlZERPTVN0
b3JhZ2VBZ2VudChudWxscHRyKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVj
dG9yRE9NU3RvcmFnZUFnZW50OjpnZXRET01TdG9yYWdlSXRlbXMoRXJyb3JTdHJpbmcmIGVycm9y
U3RyaW5nLCBjb25zdCBKU09OOjpPYmplY3QmIHN0b3JhZ2VJZCwgUmVmUHRyPEpTT046OkFycmF5
T2Y8SlNPTjo6QXJyYXlPZjxTdHJpbmc+Pj4mIGl0ZW1zKQorUHJvdG9jb2w6OkVycm9yU3RyaW5n
T3I8UmVmPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkRPTVN0b3JhZ2U6Okl0ZW0+Pj4gSW5zcGVj
dG9yRE9NU3RvcmFnZUFnZW50OjpnZXRET01TdG9yYWdlSXRlbXMoUmVmPEpTT046Ok9iamVjdD4m
JiBzdG9yYWdlSWQpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOwor
CiAgICAgRnJhbWUqIGZyYW1lOwotICAgIFJlZlB0cjxTdG9yYWdlQXJlYT4gc3RvcmFnZUFyZWEg
PSBmaW5kU3RvcmFnZUFyZWEoZXJyb3JTdHJpbmcsIHN0b3JhZ2VJZCwgZnJhbWUpOwotICAgIGlm
ICghc3RvcmFnZUFyZWEpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWlzc2luZyBzdG9yYWdl
IGZvciBnaXZlbiBzdG9yYWdlSWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgUmVm
UHRyPFN0b3JhZ2VBcmVhPiBzdG9yYWdlQXJlYSA9IGZpbmRTdG9yYWdlQXJlYShlcnJvclN0cmlu
ZywgV1RGTW92ZShzdG9yYWdlSWQpLCBmcmFtZSk7CisgICAgaWYgKCFzdG9yYWdlQXJlYSkKKyAg
ICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgIGF1dG8gc3Rv
cmFnZUl0ZW1zID0gSlNPTjo6QXJyYXlPZjxKU09OOjpBcnJheU9mPFN0cmluZz4+OjpjcmVhdGUo
KTsKLQogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdG9yYWdlQXJlYS0+bGVuZ3RoKCk7
ICsraSkgewogICAgICAgICBTdHJpbmcga2V5ID0gc3RvcmFnZUFyZWEtPmtleShpKTsKICAgICAg
ICAgU3RyaW5nIHZhbHVlID0gc3RvcmFnZUFyZWEtPml0ZW0oa2V5KTsKQEAgLTExNCw0NyArMTEy
LDUyIEBAIHZvaWQgSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjpnZXRET01TdG9yYWdlSXRlbXMo
RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zCiAgICAgICAgIGVudHJ5LT5hZGRJdGVtKHZh
bHVlKTsKICAgICAgICAgc3RvcmFnZUl0ZW1zLT5hZGRJdGVtKFdURk1vdmUoZW50cnkpKTsKICAg
ICB9Ci0KLSAgICBpdGVtcyA9IFdURk1vdmUoc3RvcmFnZUl0ZW1zKTsKKyAgICByZXR1cm4gV1RG
TW92ZShzdG9yYWdlSXRlbXMpOwogfQogCi12b2lkIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6
c2V0RE9NU3RvcmFnZUl0ZW0oRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBKU09OOjpP
YmplY3QmIHN0b3JhZ2VJZCwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUp
CitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6
OnNldERPTVN0b3JhZ2VJdGVtKFJlZjxKU09OOjpPYmplY3Q+JiYgc3RvcmFnZUlkLCBjb25zdCBT
dHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JT
dHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBGcmFtZSogZnJhbWU7Ci0gICAgUmVmUHRyPFN0b3Jh
Z2VBcmVhPiBzdG9yYWdlQXJlYSA9IGZpbmRTdG9yYWdlQXJlYShlcnJvclN0cmluZywgc3RvcmFn
ZUlkLCBmcmFtZSk7Ci0gICAgaWYgKCFzdG9yYWdlQXJlYSkgewotICAgICAgICBlcnJvclN0cmlu
ZyA9ICJNaXNzaW5nIHN0b3JhZ2UgZm9yIGdpdmVuIHN0b3JhZ2VJZCJfczsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KKyAgICBSZWZQdHI8U3RvcmFnZUFyZWE+IHN0b3JhZ2VBcmVhID0gZmluZFN0
b3JhZ2VBcmVhKGVycm9yU3RyaW5nLCBXVEZNb3ZlKHN0b3JhZ2VJZCksIGZyYW1lKTsKKyAgICBp
ZiAoIXN0b3JhZ2VBcmVhKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJp
bmcpOwogCiAgICAgYm9vbCBxdW90YUV4Y2VwdGlvbiA9IGZhbHNlOwogICAgIHN0b3JhZ2VBcmVh
LT5zZXRJdGVtKGZyYW1lLCBrZXksIHZhbHVlLCBxdW90YUV4Y2VwdGlvbik7CiAgICAgaWYgKHF1
b3RhRXhjZXB0aW9uKQotICAgICAgICBlcnJvclN0cmluZyA9IERPTUV4Y2VwdGlvbjo6bmFtZShR
dW90YUV4Y2VlZGVkRXJyb3IpOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoRE9NRXhj
ZXB0aW9uOjpuYW1lKFF1b3RhRXhjZWVkZWRFcnJvcikpOworCisgICAgcmV0dXJuIHsgfTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OnJlbW92ZURPTVN0b3JhZ2VJdGVtKEVy
cm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgSlNPTjo6T2JqZWN0JiBzdG9yYWdlSWQsIGNv
bnN0IFN0cmluZyYga2V5KQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9y
RE9NU3RvcmFnZUFnZW50OjpyZW1vdmVET01TdG9yYWdlSXRlbShSZWY8SlNPTjo6T2JqZWN0PiYm
IHN0b3JhZ2VJZCwgY29uc3QgU3RyaW5nJiBrZXkpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3Ry
aW5nIGVycm9yU3RyaW5nOworCiAgICAgRnJhbWUqIGZyYW1lOwotICAgIFJlZlB0cjxTdG9yYWdl
QXJlYT4gc3RvcmFnZUFyZWEgPSBmaW5kU3RvcmFnZUFyZWEoZXJyb3JTdHJpbmcsIHN0b3JhZ2VJ
ZCwgZnJhbWUpOwotICAgIGlmICghc3RvcmFnZUFyZWEpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcg
PSAiTWlzc2luZyBzdG9yYWdlIGZvciBnaXZlbiBzdG9yYWdlSWQiX3M7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9CisgICAgUmVmUHRyPFN0b3JhZ2VBcmVhPiBzdG9yYWdlQXJlYSA9IGZpbmRTdG9y
YWdlQXJlYShlcnJvclN0cmluZywgV1RGTW92ZShzdG9yYWdlSWQpLCBmcmFtZSk7CisgICAgaWYg
KCFzdG9yYWdlQXJlYSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5n
KTsKIAogICAgIHN0b3JhZ2VBcmVhLT5yZW1vdmVJdGVtKGZyYW1lLCBrZXkpOworCisgICAgcmV0
dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OmNsZWFyRE9NU3Rv
cmFnZUl0ZW1zKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgSlNPTjo6T2JqZWN0JiBz
dG9yYWdlSWQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JET01TdG9y
YWdlQWdlbnQ6OmNsZWFyRE9NU3RvcmFnZUl0ZW1zKFJlZjxKU09OOjpPYmplY3Q+JiYgc3RvcmFn
ZUlkKQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIEZy
YW1lKiBmcmFtZTsKLSAgICBhdXRvIHN0b3JhZ2VBcmVhID0gZmluZFN0b3JhZ2VBcmVhKGVycm9y
U3RyaW5nLCBzdG9yYWdlSWQsIGZyYW1lKTsKLSAgICBpZiAoIXN0b3JhZ2VBcmVhKSB7Ci0gICAg
ICAgIGVycm9yU3RyaW5nID0gIk1pc3Npbmcgc3RvcmFnZSBmb3IgZ2l2ZW4gc3RvcmFnZUlkIl9z
OwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGF1dG8gc3RvcmFnZUFyZWEgPSBmaW5kU3Rv
cmFnZUFyZWEoZXJyb3JTdHJpbmcsIFdURk1vdmUoc3RvcmFnZUlkKSwgZnJhbWUpOworICAgIGlm
ICghc3RvcmFnZUFyZWEpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmlu
Zyk7CiAKICAgICBzdG9yYWdlQXJlYS0+Y2xlYXIoZnJhbWUpOworCisgICAgcmV0dXJuIHsgfTsK
IH0KIAogU3RyaW5nIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6c3RvcmFnZUlkKFN0b3JhZ2Um
IHN0b3JhZ2UpCkBAIC0xNjgsOSArMTcxLDkgQEAgU3RyaW5nIEluc3BlY3RvckRPTVN0b3JhZ2VB
Z2VudDo6c3RvcmFnZUlkKFN0b3JhZ2UmIHN0b3JhZ2UpCiAgICAgcmV0dXJuIEluc3BlY3RvckRP
TVN0b3JhZ2VBZ2VudDo6c3RvcmFnZUlkKHNlY3VyaXR5T3JpZ2luLnB0cigpLCBpc0xvY2FsU3Rv
cmFnZSktPnRvSlNPTlN0cmluZygpOwogfQogCi1SZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
RE9NU3RvcmFnZTo6U3RvcmFnZUlkPiBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OnN0b3JhZ2VJ
ZChTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlPcmlnaW4sIGJvb2wgaXNMb2NhbFN0b3JhZ2UpCitS
ZWY8UHJvdG9jb2w6OkRPTVN0b3JhZ2U6OlN0b3JhZ2VJZD4gSW5zcGVjdG9yRE9NU3RvcmFnZUFn
ZW50OjpzdG9yYWdlSWQoU2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2luLCBib29sIGlzTG9j
YWxTdG9yYWdlKQogewotICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpET01TdG9yYWdl
OjpTdG9yYWdlSWQ6OmNyZWF0ZSgpCisgICAgcmV0dXJuIFByb3RvY29sOjpET01TdG9yYWdlOjpT
dG9yYWdlSWQ6OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRTZWN1cml0eU9yaWdpbihzZWN1cml0eU9y
aWdpbi0+dG9SYXdTdHJpbmcoKSkKICAgICAgICAgLnNldElzTG9jYWxTdG9yYWdlKGlzTG9jYWxT
dG9yYWdlKQogICAgICAgICAucmVsZWFzZSgpOwpAQCAtMTc4LDI4ICsxODEsMjggQEAgUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTVN0b3JhZ2U6OlN0b3JhZ2VJZD4gSW5zcGVjdG9yRE9N
U3RvcmFnZUFnZW50OjpzdG8KIAogdm9pZCBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OmRpZERp
c3BhdGNoRE9NU3RvcmFnZUV2ZW50KGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIG9s
ZFZhbHVlLCBjb25zdCBTdHJpbmcmIG5ld1ZhbHVlLCBTdG9yYWdlVHlwZSBzdG9yYWdlVHlwZSwg
U2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2luKQogewotICAgIFJlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpET01TdG9yYWdlOjpTdG9yYWdlSWQ+IGlkID0gSW5zcGVjdG9yRE9NU3RvcmFn
ZUFnZW50OjpzdG9yYWdlSWQoc2VjdXJpdHlPcmlnaW4sIHN0b3JhZ2VUeXBlID09IFN0b3JhZ2VU
eXBlOjpMb2NhbCk7CisgICAgYXV0byBpZCA9IEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6c3Rv
cmFnZUlkKHNlY3VyaXR5T3JpZ2luLCBzdG9yYWdlVHlwZSA9PSBTdG9yYWdlVHlwZTo6TG9jYWwp
OwogCiAgICAgaWYgKGtleS5pc051bGwoKSkKLSAgICAgICAgbV9mcm9udGVuZERpc3BhdGNoZXIt
PmRvbVN0b3JhZ2VJdGVtc0NsZWFyZWQoaWQpOworICAgICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hl
ci0+ZG9tU3RvcmFnZUl0ZW1zQ2xlYXJlZChXVEZNb3ZlKGlkKSk7CiAgICAgZWxzZSBpZiAobmV3
VmFsdWUuaXNOdWxsKCkpCi0gICAgICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5kb21TdG9yYWdl
SXRlbVJlbW92ZWQoaWQsIGtleSk7CisgICAgICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5kb21T
dG9yYWdlSXRlbVJlbW92ZWQoV1RGTW92ZShpZCksIGtleSk7CiAgICAgZWxzZSBpZiAob2xkVmFs
dWUuaXNOdWxsKCkpCi0gICAgICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5kb21TdG9yYWdlSXRl
bUFkZGVkKGlkLCBrZXksIG5ld1ZhbHVlKTsKKyAgICAgICAgbV9mcm9udGVuZERpc3BhdGNoZXIt
PmRvbVN0b3JhZ2VJdGVtQWRkZWQoV1RGTW92ZShpZCksIGtleSwgbmV3VmFsdWUpOwogICAgIGVs
c2UKLSAgICAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPmRvbVN0b3JhZ2VJdGVtVXBkYXRlZChp
ZCwga2V5LCBvbGRWYWx1ZSwgbmV3VmFsdWUpOworICAgICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hl
ci0+ZG9tU3RvcmFnZUl0ZW1VcGRhdGVkKFdURk1vdmUoaWQpLCBrZXksIG9sZFZhbHVlLCBuZXdW
YWx1ZSk7CiB9CiAKLVJlZlB0cjxTdG9yYWdlQXJlYT4gSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50
OjpmaW5kU3RvcmFnZUFyZWEoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBKU09OOjpP
YmplY3QmIHN0b3JhZ2VJZCwgRnJhbWUqJiB0YXJnZXRGcmFtZSkKK1JlZlB0cjxTdG9yYWdlQXJl
YT4gSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjpmaW5kU3RvcmFnZUFyZWEoUHJvdG9jb2w6OkVy
cm9yU3RyaW5nJiBlcnJvclN0cmluZywgUmVmPEpTT046Ok9iamVjdD4mJiBzdG9yYWdlSWQsIEZy
YW1lKiYgdGFyZ2V0RnJhbWUpCiB7Ci0gICAgU3RyaW5nIHNlY3VyaXR5T3JpZ2luOwotICAgIGlm
ICghc3RvcmFnZUlkLmdldFN0cmluZygic2VjdXJpdHlPcmlnaW4iX3MsIHNlY3VyaXR5T3JpZ2lu
KSkgeworICAgIGF1dG8gc2VjdXJpdHlPcmlnaW4gPSBzdG9yYWdlSWQtPmdldFN0cmluZyhQcm90
b2NvbDo6RE9NU3RvcmFnZTo6U3RvcmFnZUlkOjpzZWN1cml0eU9yaWdpbktleSk7CisgICAgaWYg
KCFzZWN1cml0eU9yaWdpbikgewogICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIHNlY3Vy
aXR5T3JpZ2luIGluIGdpdmVuIHN0b3JhZ2VJZCI7CiAgICAgICAgIHJldHVybiBudWxscHRyOwog
ICAgIH0KIAotICAgIGJvb2wgaXNMb2NhbFN0b3JhZ2UgPSBmYWxzZTsKLSAgICBpZiAoIXN0b3Jh
Z2VJZC5nZXRCb29sZWFuKCJpc0xvY2FsU3RvcmFnZSJfcywgaXNMb2NhbFN0b3JhZ2UpKSB7Cisg
ICAgYXV0byBpc0xvY2FsU3RvcmFnZSA9IHN0b3JhZ2VJZC0+Z2V0Qm9vbGVhbihQcm90b2NvbDo6
RE9NU3RvcmFnZTo6U3RvcmFnZUlkOjppc0xvY2FsU3RvcmFnZUtleSk7CisgICAgaWYgKCFpc0xv
Y2FsU3RvcmFnZSkgewogICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIGlzTG9jYWxTdG9y
YWdlIGluIGdpdmVuIHN0b3JhZ2VJZCI7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0K
QEAgLTIxMCw3ICsyMTMsNyBAQCBSZWZQdHI8U3RvcmFnZUFyZWE+IEluc3BlY3RvckRPTVN0b3Jh
Z2VBZ2VudDo6ZmluZFN0b3JhZ2VBcmVhKEVycm9yU3RyaW5nJiBlcnJvcgogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKICAgICB9CiAKLSAgICBpZiAoIWlzTG9jYWxTdG9yYWdlKQorICAgIGlmICgh
KmlzTG9jYWxTdG9yYWdlKQogICAgICAgICByZXR1cm4gbV9pbnNwZWN0ZWRQYWdlLnNlc3Npb25T
dG9yYWdlKCktPnN0b3JhZ2VBcmVhKHRhcmdldEZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9y
aWdpbigpLmRhdGEoKSk7CiAgICAgcmV0dXJuIG1faW5zcGVjdGVkUGFnZS5zdG9yYWdlTmFtZXNw
YWNlUHJvdmlkZXIoKS5sb2NhbFN0b3JhZ2VBcmVhKCp0YXJnZXRGcmFtZS0+ZG9jdW1lbnQoKSk7
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rv
ckRPTVN0b3JhZ2VBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNw
ZWN0b3JET01TdG9yYWdlQWdlbnQuaAppbmRleCBkZGJiNWQ1MzQ3ZjNiZWFiZTNjZmFiMjAxZDY4
MzhjODk2ZDIxZTM5Li4zMzg2Y2I4NzlmMTE3OGMxYjk2MzU3NzVjOWEwZTg2NGY1Yjk0YzUyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTVN0
b3JhZ2VBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVj
dG9yRE9NU3RvcmFnZUFnZW50LmgKQEAgLTQ1LDM2ICs0NSwzNCBAQCBjbGFzcyBQYWdlOwogY2xh
c3MgU2VjdXJpdHlPcmlnaW47CiBjbGFzcyBTdG9yYWdlOwogCi10eXBlZGVmIFN0cmluZyBFcnJv
clN0cmluZzsKLQogY2xhc3MgSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50IGZpbmFsIDogcHVibGlj
IEluc3BlY3RvckFnZW50QmFzZSwgcHVibGljIEluc3BlY3Rvcjo6RE9NU3RvcmFnZUJhY2tlbmRE
aXNwYXRjaGVySGFuZGxlciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW5zcGVjdG9yRE9N
U3RvcmFnZUFnZW50KTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAg
ICBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQoUGFnZUFnZW50Q29udGV4dCYpOwotICAgIH5JbnNw
ZWN0b3JET01TdG9yYWdlQWdlbnQoKSBvdmVycmlkZTsKKyAgICB+SW5zcGVjdG9yRE9NU3RvcmFn
ZUFnZW50KCk7CiAKICAgICAvLyBJbnNwZWN0b3JBZ2VudEJhc2UKLSAgICB2b2lkIGRpZENyZWF0
ZUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kUm91dGVyKiwgSW5zcGVjdG9y
OjpCYWNrZW5kRGlzcGF0Y2hlciopIG92ZXJyaWRlOwotICAgIHZvaWQgd2lsbERlc3Ryb3lGcm9u
dGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKSBvdmVycmlkZTsKKyAg
ICB2b2lkIGRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kUm91
dGVyKiwgSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlciopOworICAgIHZvaWQgd2lsbERlc3Ry
b3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKTsKIAogICAg
IC8vIERPTVN0b3JhZ2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIKLSAgICB2b2lkIGVuYWJsZShF
cnJvclN0cmluZyYpIG92ZXJyaWRlOwotICAgIHZvaWQgZGlzYWJsZShFcnJvclN0cmluZyYpIG92
ZXJyaWRlOwotICAgIHZvaWQgZ2V0RE9NU3RvcmFnZUl0ZW1zKEVycm9yU3RyaW5nJiwgY29uc3Qg
SlNPTjo6T2JqZWN0JiBzdG9yYWdlSWQsIFJlZlB0cjxKU09OOjpBcnJheU9mPEpTT046OkFycmF5
T2Y8U3RyaW5nPj4+JiBpdGVtcykgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRET01TdG9yYWdlSXRl
bShFcnJvclN0cmluZyYsIGNvbnN0IEpTT046Ok9iamVjdCYgc3RvcmFnZUlkLCBjb25zdCBTdHJp
bmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZW1vdmVE
T01TdG9yYWdlSXRlbShFcnJvclN0cmluZyYsIGNvbnN0IEpTT046Ok9iamVjdCYgc3RvcmFnZUlk
LCBjb25zdCBTdHJpbmcmIGtleSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjbGVhckRPTVN0b3JhZ2VJ
dGVtcyhFcnJvclN0cmluZyYsIGNvbnN0IEpTT046Ok9iamVjdCYgc3RvcmFnZUlkKSBvdmVycmlk
ZTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGVuYWJsZSgp
OworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZGlzYWJsZSgp
OworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEpTT046OkFycmF5
T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NU3RvcmFnZTo6SXRlbT4+PiBnZXRET01TdG9yYWdl
SXRlbXMoUmVmPEpTT046Ok9iamVjdD4mJiBzdG9yYWdlSWQpOworICAgIEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc2V0RE9NU3RvcmFnZUl0ZW0oUmVmPEpTT046Ok9i
amVjdD4mJiBzdG9yYWdlSWQsIGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVl
KTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHJlbW92ZURP
TVN0b3JhZ2VJdGVtKFJlZjxKU09OOjpPYmplY3Q+JiYgc3RvcmFnZUlkLCBjb25zdCBTdHJpbmcm
IGtleSk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBjbGVh
ckRPTVN0b3JhZ2VJdGVtcyhSZWY8SlNPTjo6T2JqZWN0PiYmIHN0b3JhZ2VJZCk7CiAKICAgICAv
LyBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24KICAgICB2b2lkIGRpZERpc3BhdGNoRE9NU3RvcmFn
ZUV2ZW50KGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIG9sZFZhbHVlLCBjb25zdCBT
dHJpbmcmIG5ld1ZhbHVlLCBTdG9yYWdlVHlwZSwgU2VjdXJpdHlPcmlnaW4qKTsKIAogICAgIC8v
IENvbW1hbmRMaW5lQVBJCiAgICAgc3RhdGljIFN0cmluZyBzdG9yYWdlSWQoU3RvcmFnZSYpOwot
ICAgIHN0YXRpYyBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NU3RvcmFnZTo6U3RvcmFn
ZUlkPiBzdG9yYWdlSWQoU2VjdXJpdHlPcmlnaW4qLCBib29sIGlzTG9jYWxTdG9yYWdlKTsKKyAg
ICBzdGF0aWMgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTVN0b3JhZ2U6OlN0b3JhZ2VJZD4g
c3RvcmFnZUlkKFNlY3VyaXR5T3JpZ2luKiwgYm9vbCBpc0xvY2FsU3RvcmFnZSk7CiAKIHByaXZh
dGU6Ci0gICAgUmVmUHRyPFN0b3JhZ2VBcmVhPiBmaW5kU3RvcmFnZUFyZWEoRXJyb3JTdHJpbmcm
LCBjb25zdCBKU09OOjpPYmplY3QmLCBGcmFtZSomKTsKKyAgICBSZWZQdHI8U3RvcmFnZUFyZWE+
IGZpbmRTdG9yYWdlQXJlYShJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZyYsIFJlZjxK
U09OOjpPYmplY3Q+JiYgc3RvcmFnZUlkLCBGcmFtZSomKTsKIAogICAgIHN0ZDo6dW5pcXVlX3B0
cjxJbnNwZWN0b3I6OkRPTVN0b3JhZ2VGcm9udGVuZERpc3BhdGNoZXI+IG1fZnJvbnRlbmREaXNw
YXRjaGVyOwogICAgIFJlZlB0cjxJbnNwZWN0b3I6OkRPTVN0b3JhZ2VCYWNrZW5kRGlzcGF0Y2hl
cj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9hZ2VudHMvSW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRhdGFiYXNlQWdlbnQuY3BwCmluZGV4IDRiOWE1NWRl
NTU3YmU5NDY3MTZmNWUwMjExMTQ0MzcxMTgyZDZkNTIuLjI5YzExNGYyNjc2ODNkMjUwNjUyN2Fk
N2NmOWQ1N2ZiYjFlOTJmM2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9h
Z2VudHMvSW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2FnZW50cy9JbnNwZWN0b3JEYXRhYmFzZUFnZW50LmNwcApAQCAtNTksNyArNTksNyBA
QCBuYW1lc3BhY2UgewogCiB2b2lkIHJlcG9ydFRyYW5zYWN0aW9uRmFpbGVkKEV4ZWN1dGVTUUxD
YWxsYmFjayYgcmVxdWVzdENhbGxiYWNrLCBTUUxFcnJvciYgZXJyb3IpCiB7Ci0gICAgYXV0byBl
cnJvck9iamVjdCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcjo6Y3JlYXRl
KCkKKyAgICBhdXRvIGVycm9yT2JqZWN0ID0gUHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcjo6Y3Jl
YXRlKCkKICAgICAgICAgLnNldE1lc3NhZ2UoZXJyb3IubWVzc2FnZUlzb2xhdGVkQ29weSgpKQog
ICAgICAgICAuc2V0Q29kZShlcnJvci5jb2RlKCkpCiAgICAgICAgIC5yZWxlYXNlKCk7CkBAIC0y
MzAsNTEgKzIzMCw0OCBAQCB2b2lkIEluc3BlY3RvckRhdGFiYXNlQWdlbnQ6OmRpZENyZWF0ZUZy
b250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kUm91dAogCiB2b2lkIEluc3BlY3Rv
ckRhdGFiYXNlQWdlbnQ6OndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6
RGlzY29ubmVjdFJlYXNvbikKIHsKLSAgICBFcnJvclN0cmluZyBpZ25vcmVkOwotICAgIGRpc2Fi
bGUoaWdub3JlZCk7CisgICAgZGlzYWJsZSgpOwogfQogCi12b2lkIEluc3BlY3RvckRhdGFiYXNl
QWdlbnQ6OmVuYWJsZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCitQcm90b2NvbDo6RXJyb3JT
dHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JEYXRhYmFzZUFnZW50OjplbmFibGUoKQogewotICAgIGlm
IChtX2luc3RydW1lbnRpbmdBZ2VudHMuZW5hYmxlZERhdGFiYXNlQWdlbnQoKSA9PSB0aGlzKSB7
Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIkRhdGFiYXNlIGRvbWFpbiBhbHJlYWR5IGVuYWJsZWQi
X3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKG1faW5zdHJ1bWVudGluZ0FnZW50
cy5lbmFibGVkRGF0YWJhc2VBZ2VudCgpID09IHRoaXMpCisgICAgICAgIHJldHVybiBtYWtlVW5l
eHBlY3RlZCgiRGF0YWJhc2UgZG9tYWluIGFscmVhZHkgZW5hYmxlZCJfcyk7CiAKICAgICBtX2lu
c3RydW1lbnRpbmdBZ2VudHMuc2V0RW5hYmxlZERhdGFiYXNlQWdlbnQodGhpcyk7CiAKICAgICBm
b3IgKGF1dG8mIGRhdGFiYXNlIDogRGF0YWJhc2VUcmFja2VyOjpzaW5nbGV0b24oKS5vcGVuRGF0
YWJhc2VzKCkpCiAgICAgICAgIGRpZE9wZW5EYXRhYmFzZShkYXRhYmFzZS5nZXQoKSk7CisKKyAg
ICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckRhdGFiYXNlQWdlbnQ6OmRpc2FibGUo
RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4g
SW5zcGVjdG9yRGF0YWJhc2VBZ2VudDo6ZGlzYWJsZSgpCiB7Ci0gICAgaWYgKG1faW5zdHJ1bWVu
dGluZ0FnZW50cy5lbmFibGVkRGF0YWJhc2VBZ2VudCgpICE9IHRoaXMpIHsKLSAgICAgICAgZXJy
b3JTdHJpbmcgPSAiRGF0YWJhc2UgZG9tYWluIGFscmVhZHkgZGlzYWJsZWQiX3M7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9CisgICAgaWYgKG1faW5zdHJ1bWVudGluZ0FnZW50cy5lbmFibGVkRGF0
YWJhc2VBZ2VudCgpICE9IHRoaXMpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiRGF0
YWJhc2UgZG9tYWluIGFscmVhZHkgZGlzYWJsZWQiX3MpOwogCiAgICAgbV9pbnN0cnVtZW50aW5n
QWdlbnRzLnNldEVuYWJsZWREYXRhYmFzZUFnZW50KG51bGxwdHIpOwogCiAgICAgbV9yZXNvdXJj
ZXMuY2xlYXIoKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGF0YWJh
c2VBZ2VudDo6Z2V0RGF0YWJhc2VUYWJsZU5hbWVzKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywg
Y29uc3QgU3RyaW5nJiBkYXRhYmFzZUlkLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiYg
bmFtZXMpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SlNPTjo6QXJyYXlPZjxTdHJpbmc+
Pj4gSW5zcGVjdG9yRGF0YWJhc2VBZ2VudDo6Z2V0RGF0YWJhc2VUYWJsZU5hbWVzKGNvbnN0IFBy
b3RvY29sOjpEYXRhYmFzZTo6RGF0YWJhc2VJZCYgZGF0YWJhc2VJZCkKIHsKLSAgICBpZiAobV9p
bnN0cnVtZW50aW5nQWdlbnRzLmVuYWJsZWREYXRhYmFzZUFnZW50KCkgIT0gdGhpcykgewotICAg
ICAgICBlcnJvclN0cmluZyA9ICJEYXRhYmFzZSBkb21haW4gbXVzdCBiZSBlbmFibGVkIl9zOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbmFtZXMgPSBKU09OOjpBcnJheU9mPFN0cmlu
Zz46OmNyZWF0ZSgpOworICAgIGlmIChtX2luc3RydW1lbnRpbmdBZ2VudHMuZW5hYmxlZERhdGFi
YXNlQWdlbnQoKSAhPSB0aGlzKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkRhdGFi
YXNlIGRvbWFpbiBtdXN0IGJlIGVuYWJsZWQiX3MpOwogCisgICAgYXV0byBuYW1lcyA9IEpTT046
OkFycmF5T2Y8U3RyaW5nPjo6Y3JlYXRlKCk7CiAgICAgaWYgKGF1dG8qIGRhdGFiYXNlID0gZGF0
YWJhc2VGb3JJZChkYXRhYmFzZUlkKSkgewogICAgICAgICBmb3IgKGF1dG8mIHRhYmxlTmFtZSA6
IGRhdGFiYXNlLT50YWJsZU5hbWVzKCkpCiAgICAgICAgICAgICBuYW1lcy0+YWRkSXRlbSh0YWJs
ZU5hbWUpOwogICAgIH0KKyAgICByZXR1cm4gV1RGTW92ZShuYW1lcyk7CiB9CiAKLXZvaWQgSW5z
cGVjdG9yRGF0YWJhc2VBZ2VudDo6ZXhlY3V0ZVNRTChjb25zdCBTdHJpbmcmIGRhdGFiYXNlSWQs
IGNvbnN0IFN0cmluZyYgcXVlcnksIFJlZjxFeGVjdXRlU1FMQ2FsbGJhY2s+JiYgcmVxdWVzdENh
bGxiYWNrKQordm9pZCBJbnNwZWN0b3JEYXRhYmFzZUFnZW50OjpleGVjdXRlU1FMKGNvbnN0IFBy
b3RvY29sOjpEYXRhYmFzZTo6RGF0YWJhc2VJZCYgZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBx
dWVyeSwgUmVmPEV4ZWN1dGVTUUxDYWxsYmFjaz4mJiByZXF1ZXN0Q2FsbGJhY2spCiB7CiAgICAg
aWYgKG1faW5zdHJ1bWVudGluZ0FnZW50cy5lbmFibGVkRGF0YWJhc2VBZ2VudCgpICE9IHRoaXMp
IHsKICAgICAgICAgcmVxdWVzdENhbGxiYWNrLT5zZW5kRmFpbHVyZSgiRGF0YWJhc2UgZG9tYWlu
IG11c3QgYmUgZW5hYmxlZCJfcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvYWdlbnRzL0luc3BlY3RvckRhdGFiYXNlQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9hZ2VudHMvSW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5oCmluZGV4IDQzMDUwMzE5MWNkY2I5
ODc5ZmRiNjU1MTM5YzE0YmI3N2E3Mzc0MmYuLjAxY2VmNDM5YjRhYzZkYWQyZTQxMjZiNTQzNDE2
YzUzOTQzMmNiYzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9h
Z2VudHMvSW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5oCkBAIC00MSwyNCArNDEsMjIgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogY2xhc3MgRGF0YWJhc2U7CiBjbGFzcyBJbnNwZWN0b3JEYXRhYmFzZVJl
c291cmNlOwogCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQogY2xhc3MgSW5zcGVjdG9y
RGF0YWJhc2VBZ2VudCBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3JBZ2VudEJhc2UsIHB1YmxpYyBJ
bnNwZWN0b3I6OkRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKICAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShJbnNwZWN0b3JEYXRhYmFzZUFnZW50KTsKICAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBJbnNwZWN0b3JEYXRhYmFzZUFnZW50KFdlYkFnZW50
Q29udGV4dCYpOwotICAgIH5JbnNwZWN0b3JEYXRhYmFzZUFnZW50KCkgb3ZlcnJpZGU7CisgICAg
fkluc3BlY3RvckRhdGFiYXNlQWdlbnQoKTsKIAogICAgIC8vIEluc3BlY3RvckFnZW50QmFzZQot
ICAgIHZvaWQgZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRS
b3V0ZXIqLCBJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyKikgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCB3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFz
b24pIG92ZXJyaWRlOworICAgIHZvaWQgZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEluc3Bl
Y3Rvcjo6RnJvbnRlbmRSb3V0ZXIqLCBJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyKik7Cisg
ICAgdm9pZCB3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5l
Y3RSZWFzb24pOwogCiAgICAgLy8gRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIKLSAg
ICB2b2lkIGVuYWJsZShFcnJvclN0cmluZyYpIG92ZXJyaWRlOwotICAgIHZvaWQgZGlzYWJsZShF
cnJvclN0cmluZyYpIG92ZXJyaWRlOwotICAgIHZvaWQgZ2V0RGF0YWJhc2VUYWJsZU5hbWVzKEVy
cm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZUlkLCBSZWZQdHI8SlNPTjo6QXJyYXlP
ZjxTdHJpbmc+PiYgbmFtZXMpIG92ZXJyaWRlOwotICAgIHZvaWQgZXhlY3V0ZVNRTChjb25zdCBT
dHJpbmcmIGRhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgcXVlcnksIFJlZjxFeGVjdXRlU1FMQ2Fs
bGJhY2s+JiYpIG92ZXJyaWRlOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5n
T3I8dm9pZD4gZW5hYmxlKCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdP
cjx2b2lkPiBkaXNhYmxlKCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdP
cjxSZWY8SlNPTjo6QXJyYXlPZjxTdHJpbmc+Pj4gZ2V0RGF0YWJhc2VUYWJsZU5hbWVzKGNvbnN0
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpEYXRhYmFzZUlkJik7CisgICAgdm9pZCBl
eGVjdXRlU1FMKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpEYXRhYmFzZUlk
JiwgY29uc3QgU3RyaW5nJiBxdWVyeSwgUmVmPEV4ZWN1dGVTUUxDYWxsYmFjaz4mJik7CiAKICAg
ICAvLyBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24KICAgICB2b2lkIGRpZENvbW1pdExvYWQoKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9ySW5k
ZXhlZERCQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0
b3JJbmRleGVkREJBZ2VudC5jcHAKaW5kZXggZmY4ZjMwZjQwM2Y4NWM3ZGRiZTMxYjEwZTAzY2Vm
NWZjZGY3ZjAwNi4uYTE0NWUwNGViMjE4ZGU4YTQyZmY4OTgyOThiOGJlYTY4MmM0ZWRlMSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JJbmRleGVk
REJBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0
b3JJbmRleGVkREJBZ2VudC5jcHAKQEAgLTcwLDI2ICs3MCw2IEBACiAjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlTnVtYmVycy5oPgog
Ci11c2luZyBKU09OOjpBcnJheU9mOwotdXNpbmcgSW5zcGVjdG9yOjpQcm90b2NvbDo6SW5kZXhl
ZERCOjpEYXRhYmFzZVdpdGhPYmplY3RTdG9yZXM7Ci11c2luZyBJbnNwZWN0b3I6OlByb3RvY29s
OjpJbmRleGVkREI6OkRhdGFFbnRyeTsKLXVzaW5nIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkluZGV4
ZWREQjo6S2V5OwotdXNpbmcgSW5zcGVjdG9yOjpQcm90b2NvbDo6SW5kZXhlZERCOjpLZXlQYXRo
OwotdXNpbmcgSW5zcGVjdG9yOjpQcm90b2NvbDo6SW5kZXhlZERCOjpLZXlSYW5nZTsKLXVzaW5n
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkluZGV4ZWREQjo6T2JqZWN0U3RvcmU7Ci11c2luZyBJbnNw
ZWN0b3I6OlByb3RvY29sOjpJbmRleGVkREI6Ok9iamVjdFN0b3JlSW5kZXg7Ci0KLXR5cGVkZWYg
SW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlIFJlcXVlc3RDYWxsYmFj
azsKLXR5cGVkZWYgSW5zcGVjdG9yOjpJbmRleGVkREJCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6
OlJlcXVlc3REYXRhYmFzZU5hbWVzQ2FsbGJhY2sgUmVxdWVzdERhdGFiYXNlTmFtZXNDYWxsYmFj
azsKLXR5cGVkZWYgSW5zcGVjdG9yOjpJbmRleGVkREJCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6
OlJlcXVlc3REYXRhYmFzZUNhbGxiYWNrIFJlcXVlc3REYXRhYmFzZUNhbGxiYWNrOwotdHlwZWRl
ZiBJbnNwZWN0b3I6OkluZGV4ZWREQkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UmVxdWVzdERh
dGFDYWxsYmFjayBSZXF1ZXN0RGF0YUNhbGxiYWNrOwotdHlwZWRlZiBJbnNwZWN0b3I6OkluZGV4
ZWREQkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6Q2xlYXJPYmplY3RTdG9yZUNhbGxiYWNrIENs
ZWFyT2JqZWN0U3RvcmVDYWxsYmFjazsKLQotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7Ci0K
LXRlbXBsYXRlIDx0eXBlbmFtZSBUPgotdXNpbmcgRXJyb3JTdHJpbmdPciA9IEV4cGVjdGVkPFQs
IEVycm9yU3RyaW5nPjsKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2Ug
SW5zcGVjdG9yOwpAQCAtMTAzLDcgKzgzLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgfkV4ZWN1
dGFibGVXaXRoRGF0YWJhc2UoKSA9IGRlZmF1bHQ7CiAgICAgdm9pZCBzdGFydChJREJGYWN0b3J5
KiwgU2VjdXJpdHlPcmlnaW4qLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlTmFtZSk7CiAgICAgdmly
dHVhbCB2b2lkIGV4ZWN1dGUoSURCRGF0YWJhc2UmKSA9IDA7Ci0gICAgdmlydHVhbCBSZXF1ZXN0
Q2FsbGJhY2smIHJlcXVlc3RDYWxsYmFjaygpID0gMDsKKyAgICB2aXJ0dWFsIEJhY2tlbmREaXNw
YXRjaGVyOjpDYWxsYmFja0Jhc2UmIHJlcXVlc3RDYWxsYmFjaygpID0gMDsKICAgICBTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBjb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0OyB9CiBw
cml2YXRlOgogICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIG1fY29udGV4dDsKQEAgLTE3MSwy
MCArMTUxLDIwIEBAIHZvaWQgRXhlY3V0YWJsZVdpdGhEYXRhYmFzZTo6c3RhcnQoSURCRmFjdG9y
eSogaWRiRmFjdG9yeSwgU2VjdXJpdHlPcmlnaW4qLCBjb25zCiB9CiAKIAotc3RhdGljIFJlZlB0
cjxLZXlQYXRoPiBrZXlQYXRoRnJvbUlEQktleVBhdGgoY29uc3QgT3B0aW9uYWw8SURCS2V5UGF0
aD4mIGlkYktleVBhdGgpCitzdGF0aWMgUmVmPFByb3RvY29sOjpJbmRleGVkREI6OktleVBhdGg+
IGtleVBhdGhGcm9tSURCS2V5UGF0aChjb25zdCBPcHRpb25hbDxJREJLZXlQYXRoPiYgaWRiS2V5
UGF0aCkKIHsKICAgICBpZiAoIWlkYktleVBhdGgpCi0gICAgICAgIHJldHVybiBLZXlQYXRoOjpj
cmVhdGUoKS5zZXRUeXBlKEtleVBhdGg6OlR5cGU6Ok51bGwpLnJlbGVhc2UoKTsKKyAgICAgICAg
cmV0dXJuIFByb3RvY29sOjpJbmRleGVkREI6OktleVBhdGg6OmNyZWF0ZSgpLnNldFR5cGUoUHJv
dG9jb2w6OkluZGV4ZWREQjo6S2V5UGF0aDo6VHlwZTo6TnVsbCkucmVsZWFzZSgpOwogCiAgICAg
YXV0byB2aXNpdG9yID0gV1RGOjptYWtlVmlzaXRvcihbXShjb25zdCBTdHJpbmcmIHN0cmluZykg
ewotICAgICAgICBhdXRvIGtleVBhdGggPSBLZXlQYXRoOjpjcmVhdGUoKS5zZXRUeXBlKEtleVBh
dGg6OlR5cGU6OlN0cmluZykucmVsZWFzZSgpOworICAgICAgICBhdXRvIGtleVBhdGggPSBQcm90
b2NvbDo6SW5kZXhlZERCOjpLZXlQYXRoOjpjcmVhdGUoKS5zZXRUeXBlKFByb3RvY29sOjpJbmRl
eGVkREI6OktleVBhdGg6OlR5cGU6OlN0cmluZykucmVsZWFzZSgpOwogICAgICAgICBrZXlQYXRo
LT5zZXRTdHJpbmcoc3RyaW5nKTsKICAgICAgICAgcmV0dXJuIGtleVBhdGg7CiAgICAgfSwgW10o
Y29uc3QgVmVjdG9yPFN0cmluZz4mIHZlY3RvcikgewogICAgICAgICBhdXRvIGFycmF5ID0gSlNP
Tjo6QXJyYXlPZjxTdHJpbmc+OjpjcmVhdGUoKTsKICAgICAgICAgZm9yIChhdXRvJiBzdHJpbmcg
OiB2ZWN0b3IpCiAgICAgICAgICAgICBhcnJheS0+YWRkSXRlbShzdHJpbmcpOwotICAgICAgICBh
dXRvIGtleVBhdGggPSBLZXlQYXRoOjpjcmVhdGUoKS5zZXRUeXBlKEtleVBhdGg6OlR5cGU6OkFy
cmF5KS5yZWxlYXNlKCk7CisgICAgICAgIGF1dG8ga2V5UGF0aCA9IFByb3RvY29sOjpJbmRleGVk
REI6OktleVBhdGg6OmNyZWF0ZSgpLnNldFR5cGUoUHJvdG9jb2w6OkluZGV4ZWREQjo6S2V5UGF0
aDo6VHlwZTo6QXJyYXkpLnJlbGVhc2UoKTsKICAgICAgICAga2V5UGF0aC0+c2V0QXJyYXkoV1RG
TW92ZShhcnJheSkpOwogICAgICAgICByZXR1cm4ga2V5UGF0aDsKICAgICB9KTsKQEAgLTIxNyw3
ICsxOTcsNyBAQCBzdGF0aWMgUmVmUHRyPElEQkluZGV4PiBpbmRleEZvck9iamVjdFN0b3JlKElE
Qk9iamVjdFN0b3JlKiBpZGJPYmplY3RTdG9yZSwgY29ucwogCiBjbGFzcyBEYXRhYmFzZUxvYWRl
ciBmaW5hbCA6IHB1YmxpYyBFeGVjdXRhYmxlV2l0aERhdGFiYXNlIHsKIHB1YmxpYzoKLSAgICBz
dGF0aWMgUmVmPERhdGFiYXNlTG9hZGVyPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
Y29udGV4dCwgUmVmPFJlcXVlc3REYXRhYmFzZUNhbGxiYWNrPiYmIHJlcXVlc3RDYWxsYmFjaykK
KyAgICBzdGF0aWMgUmVmPERhdGFiYXNlTG9hZGVyPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogY29udGV4dCwgUmVmPEluZGV4ZWREQkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UmVx
dWVzdERhdGFiYXNlQ2FsbGJhY2s+JiYgcmVxdWVzdENhbGxiYWNrKQogICAgIHsKICAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgRGF0YWJhc2VMb2FkZXIoY29udGV4dCwgV1RGTW92ZShyZXF1
ZXN0Q2FsbGJhY2spKSk7CiAgICAgfQpAQCAtMjMwLDE3ICsyMTAsMTcgQEAgcHVibGljOgogICAg
ICAgICAgICAgcmV0dXJuOwogICAgIAogICAgICAgICBhdXRvJiBkYXRhYmFzZUluZm8gPSBkYXRh
YmFzZS5pbmZvKCk7Ci0gICAgICAgIGF1dG8gb2JqZWN0U3RvcmVzID0gSlNPTjo6QXJyYXlPZjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpJbmRleGVkREI6Ok9iamVjdFN0b3JlPjo6Y3JlYXRlKCk7Cisg
ICAgICAgIGF1dG8gb2JqZWN0U3RvcmVzID0gSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6SW5kZXhl
ZERCOjpPYmplY3RTdG9yZT46OmNyZWF0ZSgpOwogICAgICAgICBhdXRvIG9iamVjdFN0b3JlTmFt
ZXMgPSBkYXRhYmFzZUluZm8ub2JqZWN0U3RvcmVOYW1lcygpOwogICAgICAgICBmb3IgKGF1dG8m
IG5hbWUgOiBvYmplY3RTdG9yZU5hbWVzKSB7CiAgICAgICAgICAgICBhdXRvKiBvYmplY3RTdG9y
ZUluZm8gPSBkYXRhYmFzZUluZm8uaW5mb0ZvckV4aXN0aW5nT2JqZWN0U3RvcmUobmFtZSk7CiAg
ICAgICAgICAgICBpZiAoIW9iamVjdFN0b3JlSW5mbykKICAgICAgICAgICAgICAgICBjb250aW51
ZTsKIAotICAgICAgICAgICAgYXV0byBpbmRleGVzID0gSlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6
OlByb3RvY29sOjpJbmRleGVkREI6Ok9iamVjdFN0b3JlSW5kZXg+OjpjcmVhdGUoKTsKKyAgICAg
ICAgICAgIGF1dG8gaW5kZXhlcyA9IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkluZGV4ZWREQjo6
T2JqZWN0U3RvcmVJbmRleD46OmNyZWF0ZSgpOwogICAgIAogICAgICAgICAgICAgZm9yIChhdXRv
JiBpbmRleEluZm8gOiBvYmplY3RTdG9yZUluZm8tPmluZGV4TWFwKCkudmFsdWVzKCkpIHsKLSAg
ICAgICAgICAgICAgICBhdXRvIG9iamVjdFN0b3JlSW5kZXggPSBPYmplY3RTdG9yZUluZGV4Ojpj
cmVhdGUoKQorICAgICAgICAgICAgICAgIGF1dG8gb2JqZWN0U3RvcmVJbmRleCA9IFByb3RvY29s
OjpJbmRleGVkREI6Ok9iamVjdFN0b3JlSW5kZXg6OmNyZWF0ZSgpCiAgICAgICAgICAgICAgICAg
ICAgIC5zZXROYW1lKGluZGV4SW5mby5uYW1lKCkpCiAgICAgICAgICAgICAgICAgICAgIC5zZXRL
ZXlQYXRoKGtleVBhdGhGcm9tSURCS2V5UGF0aChpbmRleEluZm8ua2V5UGF0aCgpKSkKICAgICAg
ICAgICAgICAgICAgICAgLnNldFVuaXF1ZShpbmRleEluZm8udW5pcXVlKCkpCkBAIC0yNDksNyAr
MjI5LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGluZGV4ZXMtPmFkZEl0ZW0oV1RGTW92
ZShvYmplY3RTdG9yZUluZGV4KSk7CiAgICAgICAgICAgICB9CiAgICAgCi0gICAgICAgICAgICBh
dXRvIG9iamVjdFN0b3JlID0gT2JqZWN0U3RvcmU6OmNyZWF0ZSgpCisgICAgICAgICAgICBhdXRv
IG9iamVjdFN0b3JlID0gUHJvdG9jb2w6OkluZGV4ZWREQjo6T2JqZWN0U3RvcmU6OmNyZWF0ZSgp
CiAgICAgICAgICAgICAgICAgLnNldE5hbWUob2JqZWN0U3RvcmVJbmZvLT5uYW1lKCkpCiAgICAg
ICAgICAgICAgICAgLnNldEtleVBhdGgoa2V5UGF0aEZyb21JREJLZXlQYXRoKG9iamVjdFN0b3Jl
SW5mby0+a2V5UGF0aCgpKSkKICAgICAgICAgICAgICAgICAuc2V0QXV0b0luY3JlbWVudChvYmpl
Y3RTdG9yZUluZm8tPmF1dG9JbmNyZW1lbnQoKSkKQEAgLTI1OCw3ICsyMzgsNyBAQCBwdWJsaWM6
CiAgICAgICAgICAgICBvYmplY3RTdG9yZXMtPmFkZEl0ZW0oV1RGTW92ZShvYmplY3RTdG9yZSkp
OwogICAgICAgICB9CiAgICAgCi0gICAgICAgIGF1dG8gcmVzdWx0ID0gRGF0YWJhc2VXaXRoT2Jq
ZWN0U3RvcmVzOjpjcmVhdGUoKQorICAgICAgICBhdXRvIHJlc3VsdCA9IFByb3RvY29sOjpJbmRl
eGVkREI6OkRhdGFiYXNlV2l0aE9iamVjdFN0b3Jlczo6Y3JlYXRlKCkKICAgICAgICAgICAgIC5z
ZXROYW1lKGRhdGFiYXNlSW5mby5uYW1lKCkpCiAgICAgICAgICAgICAuc2V0VmVyc2lvbihkYXRh
YmFzZUluZm8udmVyc2lvbigpKQogICAgICAgICAgICAgLnNldE9iamVjdFN0b3JlcyhXVEZNb3Zl
KG9iamVjdFN0b3JlcykpCkBAIC0yNjYsOTIgKzI0Niw5NiBAQCBwdWJsaWM6CiAgICAgICAgIG1f
cmVxdWVzdENhbGxiYWNrLT5zZW5kU3VjY2VzcyhXVEZNb3ZlKHJlc3VsdCkpOwogICAgIH0KIAot
ICAgIFJlcXVlc3RDYWxsYmFjayYgcmVxdWVzdENhbGxiYWNrKCkgb3ZlcnJpZGUgeyByZXR1cm4g
bV9yZXF1ZXN0Q2FsbGJhY2suZ2V0KCk7IH0KKyAgICBCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJh
Y2tCYXNlJiByZXF1ZXN0Q2FsbGJhY2soKSBvdmVycmlkZSB7IHJldHVybiBtX3JlcXVlc3RDYWxs
YmFjay5nZXQoKTsgfQogcHJpdmF0ZToKLSAgICBEYXRhYmFzZUxvYWRlcihTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBjb250ZXh0LCBSZWY8UmVxdWVzdERhdGFiYXNlQ2FsbGJhY2s+JiYgcmVxdWVz
dENhbGxiYWNrKQorICAgIERhdGFiYXNlTG9hZGVyKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNv
bnRleHQsIFJlZjxJbmRleGVkREJCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlJlcXVlc3REYXRh
YmFzZUNhbGxiYWNrPiYmIHJlcXVlc3RDYWxsYmFjaykKICAgICAgICAgOiBFeGVjdXRhYmxlV2l0
aERhdGFiYXNlKGNvbnRleHQpCiAgICAgICAgICwgbV9yZXF1ZXN0Q2FsbGJhY2soV1RGTW92ZShy
ZXF1ZXN0Q2FsbGJhY2spKSB7IH0KLSAgICBSZWY8UmVxdWVzdERhdGFiYXNlQ2FsbGJhY2s+IG1f
cmVxdWVzdENhbGxiYWNrOworICAgIFJlZjxJbmRleGVkREJCYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXI6OlJlcXVlc3REYXRhYmFzZUNhbGxiYWNrPiBtX3JlcXVlc3RDYWxsYmFjazsKIH07CiAKLXN0
YXRpYyBSZWZQdHI8SURCS2V5PiBpZGJLZXlGcm9tSW5zcGVjdG9yT2JqZWN0KEpTT046Ok9iamVj
dCoga2V5KQorc3RhdGljIFJlZlB0cjxJREJLZXk+IGlkYktleUZyb21JbnNwZWN0b3JPYmplY3Qo
UmVmPEpTT046Ok9iamVjdD4mJiBrZXkpCiB7Ci0gICAgU3RyaW5nIHR5cGU7Ci0gICAgaWYgKCFr
ZXktPmdldFN0cmluZygidHlwZSIsIHR5cGUpKQorICAgIGF1dG8gdHlwZVN0cmluZyA9IGtleS0+
Z2V0U3RyaW5nKFByb3RvY29sOjpJbmRleGVkREI6OktleTo6dHlwZUtleSk7CisgICAgaWYgKCF0
eXBlU3RyaW5nKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHN0YXRpYyBOZXZlckRl
c3Ryb3llZDxjb25zdCBTdHJpbmc+IG51bWJlclR5cGUoTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwo
Im51bWJlciIpKTsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiBzdHJp
bmdUeXBlKE1BS0VfU1RBVElDX1NUUklOR19JTVBMKCJzdHJpbmciKSk7Ci0gICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPGNvbnN0IFN0cmluZz4gZGF0ZVR5cGUoTUFLRV9TVEFUSUNfU1RSSU5HX0lN
UEwoImRhdGUiKSk7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0cmluZz4gYXJy
YXlUeXBlKE1BS0VfU1RBVElDX1NUUklOR19JTVBMKCJhcnJheSIpKTsKKyAgICBhdXRvIHR5cGUg
PSBQcm90b2NvbDo6SGVscGVyczo6cGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPFByb3RvY29sOjpJ
bmRleGVkREI6OktleTo6VHlwZT4odHlwZVN0cmluZyk7CisgICAgaWYgKCF0eXBlKQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKIAotICAgIFJlZlB0cjxJREJLZXk+IGlkYktleTsKLSAgICBpZiAo
dHlwZSA9PSBudW1iZXJUeXBlKSB7Ci0gICAgICAgIGRvdWJsZSBudW1iZXI7Ci0gICAgICAgIGlm
ICgha2V5LT5nZXREb3VibGUoIm51bWJlciIsIG51bWJlcikpCisgICAgc3dpdGNoICgqdHlwZSkg
eworICAgIGNhc2UgUHJvdG9jb2w6OkluZGV4ZWREQjo6S2V5OjpUeXBlOjpOdW1iZXI6IHsKKyAg
ICAgICAgYXV0byBudW1iZXIgPSBrZXktPmdldERvdWJsZShQcm90b2NvbDo6SW5kZXhlZERCOjpL
ZXk6Om51bWJlcktleSk7CisgICAgICAgIGlmICghbnVtYmVyKQogICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0gICAgICAgIGlkYktleSA9IElEQktleTo6Y3JlYXRlTnVtYmVyKG51bWJlcik7
Ci0gICAgfSBlbHNlIGlmICh0eXBlID09IHN0cmluZ1R5cGUpIHsKLSAgICAgICAgU3RyaW5nIHN0
cmluZzsKLSAgICAgICAgaWYgKCFrZXktPmdldFN0cmluZygic3RyaW5nIiwgc3RyaW5nKSkKKyAg
ICAgICAgcmV0dXJuIElEQktleTo6Y3JlYXRlTnVtYmVyKCpudW1iZXIpOworICAgIH0KKworICAg
IGNhc2UgUHJvdG9jb2w6OkluZGV4ZWREQjo6S2V5OjpUeXBlOjpTdHJpbmc6IHsKKyAgICAgICAg
YXV0byBzdHJpbmcgPSBrZXktPmdldFN0cmluZyhQcm90b2NvbDo6SW5kZXhlZERCOjpLZXk6OnN0
cmluZ0tleSk7CisgICAgICAgIGlmICghc3RyaW5nKQogICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0gICAgICAgIGlkYktleSA9IElEQktleTo6Y3JlYXRlU3RyaW5nKHN0cmluZyk7Ci0gICAg
fSBlbHNlIGlmICh0eXBlID09IGRhdGVUeXBlKSB7Ci0gICAgICAgIGRvdWJsZSBkYXRlOwotICAg
ICAgICBpZiAoIWtleS0+Z2V0RG91YmxlKCJkYXRlIiwgZGF0ZSkpCisgICAgICAgIHJldHVybiBJ
REJLZXk6OmNyZWF0ZVN0cmluZyhzdHJpbmcpOworICAgIH0KKworICAgIGNhc2UgUHJvdG9jb2w6
OkluZGV4ZWREQjo6S2V5OjpUeXBlOjpEYXRlOiB7CisgICAgICAgIGF1dG8gZGF0ZSA9IGtleS0+
Z2V0RG91YmxlKFByb3RvY29sOjpJbmRleGVkREI6OktleTo6ZGF0ZUtleSk7CisgICAgICAgIGlm
ICghZGF0ZSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICBpZGJLZXkgPSBJ
REJLZXk6OmNyZWF0ZURhdGUoZGF0ZSk7Ci0gICAgfSBlbHNlIGlmICh0eXBlID09IGFycmF5VHlw
ZSkgeworICAgICAgICByZXR1cm4gSURCS2V5OjpjcmVhdGVEYXRlKCpkYXRlKTsKKyAgICB9CisK
KyAgICBjYXNlIFByb3RvY29sOjpJbmRleGVkREI6OktleTo6VHlwZTo6QXJyYXk6IHsKKyAgICAg
ICAgYXV0byBhcnJheSA9IGtleS0+Z2V0QXJyYXkoUHJvdG9jb2w6OkluZGV4ZWREQjo6S2V5Ojph
cnJheUtleSk7CisgICAgICAgIGlmICghYXJyYXkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKwogICAgICAgICBWZWN0b3I8UmVmUHRyPElEQktleT4+IGtleUFycmF5OwotICAgICAgICBS
ZWZQdHI8SlNPTjo6QXJyYXk+IGFycmF5OwotICAgICAgICBpZiAoIWtleS0+Z2V0QXJyYXkoImFy
cmF5IiwgYXJyYXkpKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgYXJyYXktPmxlbmd0aCgpOyArK2kpIHsKLSAgICAgICAgICAgIFJl
ZlB0cjxKU09OOjpWYWx1ZT4gdmFsdWUgPSBhcnJheS0+Z2V0KGkpOwotICAgICAgICAgICAgUmVm
UHRyPEpTT046Ok9iamVjdD4gb2JqZWN0OwotICAgICAgICAgICAgaWYgKCF2YWx1ZS0+YXNPYmpl
Y3Qob2JqZWN0KSkKKyAgICAgICAgICAgIGF1dG8gb2JqZWN0ID0gYXJyYXktPmdldChpKS0+YXNP
YmplY3QoKTsKKyAgICAgICAgICAgIGlmICghb2JqZWN0KQogICAgICAgICAgICAgICAgIHJldHVy
biBudWxscHRyOwotICAgICAgICAgICAga2V5QXJyYXkuYXBwZW5kKGlkYktleUZyb21JbnNwZWN0
b3JPYmplY3Qob2JqZWN0LmdldCgpKSk7CisgICAgICAgICAgICBrZXlBcnJheS5hcHBlbmQoaWRi
S2V5RnJvbUluc3BlY3Rvck9iamVjdChvYmplY3QucmVsZWFzZU5vbk51bGwoKSkpOwogICAgICAg
ICB9Ci0gICAgICAgIGlkYktleSA9IElEQktleTo6Y3JlYXRlQXJyYXkoa2V5QXJyYXkpOwotICAg
IH0gZWxzZQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIElEQktleTo6
Y3JlYXRlQXJyYXkoa2V5QXJyYXkpOworICAgIH0KKyAgICB9CiAKLSAgICByZXR1cm4gaWRiS2V5
OworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBudWxscHRyOwogfQogCi1z
dGF0aWMgUmVmUHRyPElEQktleVJhbmdlPiBpZGJLZXlSYW5nZUZyb21LZXlSYW5nZShjb25zdCBK
U09OOjpPYmplY3QqIGtleVJhbmdlKQorc3RhdGljIFJlZlB0cjxJREJLZXlSYW5nZT4gaWRiS2V5
UmFuZ2VGcm9tS2V5UmFuZ2UoSlNPTjo6T2JqZWN0JiBrZXlSYW5nZSkKIHsKICAgICBSZWZQdHI8
SURCS2V5PiBpZGJMb3dlcjsKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBsb3dlcjsKLSAgICBp
ZiAoa2V5UmFuZ2UtPmdldE9iamVjdCgibG93ZXIiX3MsIGxvd2VyKSkgewotICAgICAgICBpZGJM
b3dlciA9IGlkYktleUZyb21JbnNwZWN0b3JPYmplY3QobG93ZXIuZ2V0KCkpOworICAgIGlmIChh
dXRvIGxvd2VyID0ga2V5UmFuZ2UuZ2V0T2JqZWN0KFByb3RvY29sOjpJbmRleGVkREI6OktleVJh
bmdlOjpsb3dlcktleSkpIHsKKyAgICAgICAgaWRiTG93ZXIgPSBpZGJLZXlGcm9tSW5zcGVjdG9y
T2JqZWN0KGxvd2VyLnJlbGVhc2VOb25OdWxsKCkpOwogICAgICAgICBpZiAoIWlkYkxvd2VyKQog
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCiAgICAgUmVmUHRyPElEQktleT4g
aWRiVXBwZXI7Ci0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gdXBwZXI7Ci0gICAgaWYgKGtleVJh
bmdlLT5nZXRPYmplY3QoInVwcGVyIl9zLCB1cHBlcikpIHsKLSAgICAgICAgaWRiVXBwZXIgPSBp
ZGJLZXlGcm9tSW5zcGVjdG9yT2JqZWN0KHVwcGVyLmdldCgpKTsKKyAgICBpZiAoYXV0byB1cHBl
ciA9IGtleVJhbmdlLmdldE9iamVjdChQcm90b2NvbDo6SW5kZXhlZERCOjpLZXlSYW5nZTo6dXBw
ZXJLZXkpKSB7CisgICAgICAgIGlkYlVwcGVyID0gaWRiS2V5RnJvbUluc3BlY3Rvck9iamVjdCh1
cHBlci5yZWxlYXNlTm9uTnVsbCgpKTsKICAgICAgICAgaWYgKCFpZGJVcHBlcikKICAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAotICAgIGJvb2wgbG93ZXJPcGVuOwotICAgIGlm
ICgha2V5UmFuZ2UtPmdldEJvb2xlYW4oImxvd2VyT3BlbiJfcywgbG93ZXJPcGVuKSkKKyAgICBh
dXRvIGxvd2VyT3BlbiA9IGtleVJhbmdlLmdldEJvb2xlYW4oUHJvdG9jb2w6OkluZGV4ZWREQjo6
S2V5UmFuZ2U6Omxvd2VyT3BlbktleSk7CisgICAgaWYgKCFsb3dlck9wZW4pCiAgICAgICAgIHJl
dHVybiBudWxscHRyOwogCi0gICAgYm9vbCB1cHBlck9wZW47Ci0gICAgaWYgKCFrZXlSYW5nZS0+
Z2V0Qm9vbGVhbigidXBwZXJPcGVuIl9zLCB1cHBlck9wZW4pKQorICAgIGF1dG8gdXBwZXJPcGVu
ID0ga2V5UmFuZ2UuZ2V0Qm9vbGVhbihQcm90b2NvbDo6SW5kZXhlZERCOjpLZXlSYW5nZTo6dXBw
ZXJPcGVuS2V5KTsKKyAgICBpZiAoIXVwcGVyT3BlbikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAKLSAgICByZXR1cm4gSURCS2V5UmFuZ2U6OmNyZWF0ZShXVEZNb3ZlKGlkYkxvd2VyKSwgV1RG
TW92ZShpZGJVcHBlciksIGxvd2VyT3BlbiwgdXBwZXJPcGVuKTsKKyAgICByZXR1cm4gSURCS2V5
UmFuZ2U6OmNyZWF0ZShXVEZNb3ZlKGlkYkxvd2VyKSwgV1RGTW92ZShpZGJVcHBlciksICpsb3dl
ck9wZW4sICp1cHBlck9wZW4pOwogfQogCiBjbGFzcyBPcGVuQ3Vyc29yQ2FsbGJhY2sgZmluYWwg
OiBwdWJsaWMgRXZlbnRMaXN0ZW5lciB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxPcGVuQ3Vy
c29yQ2FsbGJhY2s+IGNyZWF0ZShJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdCwgUmVmPFJl
cXVlc3REYXRhQ2FsbGJhY2s+JiYgcmVxdWVzdENhbGxiYWNrLCBpbnQgc2tpcENvdW50LCB1bnNp
Z25lZCBwYWdlU2l6ZSkKKyAgICBzdGF0aWMgUmVmPE9wZW5DdXJzb3JDYWxsYmFjaz4gY3JlYXRl
KEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0LCBSZWY8SW5kZXhlZERCQmFja2VuZERpc3Bh
dGNoZXJIYW5kbGVyOjpSZXF1ZXN0RGF0YUNhbGxiYWNrPiYmIHJlcXVlc3RDYWxsYmFjaywgaW50
IHNraXBDb3VudCwgdW5zaWduZWQgcGFnZVNpemUpCiAgICAgewogICAgICAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBPcGVuQ3Vyc29yQ2FsbGJhY2soaW5qZWN0ZWRTY3JpcHQsIFdURk1vdmUocmVx
dWVzdENhbGxiYWNrKSwgc2tpcENvdW50LCBwYWdlU2l6ZSkpOwogICAgIH0KQEAgLTQwNSwxMyAr
Mzg5LDIzIEBAIHB1YmxpYzoKICAgICAgICAgfQogCiAgICAgICAgIGF1dG8qIGxleGljYWxHbG9i
YWxPYmplY3QgPSBjb250ZXh0LmV4ZWNTdGF0ZSgpOwotICAgICAgICBhdXRvIGtleSA9ICB0b0pT
KCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqbGV4aWNhbEdsb2JhbE9iamVjdCwgY3Vyc29yLT5rZXko
KSk7Ci0gICAgICAgIGF1dG8gcHJpbWFyeUtleSA9IHRvSlMoKmxleGljYWxHbG9iYWxPYmplY3Qs
ICpsZXhpY2FsR2xvYmFsT2JqZWN0LCBjdXJzb3ItPnByaW1hcnlLZXkoKSk7Ci0gICAgICAgIGF1
dG8gdmFsdWUgPSBkZXNlcmlhbGl6ZUlEQlZhbHVlVG9KU1ZhbHVlKCpsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCBjdXJzb3ItPnZhbHVlKCkpOwotICAgICAgICBhdXRvIGRhdGFFbnRyeSA9IERhdGFFbnRy
eTo6Y3JlYXRlKCkKLSAgICAgICAgICAgIC5zZXRLZXkobV9pbmplY3RlZFNjcmlwdC53cmFwT2Jq
ZWN0KGtleSwgU3RyaW5nKCksIHRydWUpKQotICAgICAgICAgICAgLnNldFByaW1hcnlLZXkobV9p
bmplY3RlZFNjcmlwdC53cmFwT2JqZWN0KHByaW1hcnlLZXksIFN0cmluZygpLCB0cnVlKSkKLSAg
ICAgICAgICAgIC5zZXRWYWx1ZShtX2luamVjdGVkU2NyaXB0LndyYXBPYmplY3QodmFsdWUsIFN0
cmluZygpLCB0cnVlKSkKKworICAgICAgICBhdXRvIGtleSA9IG1faW5qZWN0ZWRTY3JpcHQud3Jh
cE9iamVjdCh0b0pTKCpsZXhpY2FsR2xvYmFsT2JqZWN0LCAqbGV4aWNhbEdsb2JhbE9iamVjdCwg
Y3Vyc29yLT5rZXkoKSksIFN0cmluZygpLCB0cnVlKTsKKyAgICAgICAgaWYgKCFrZXkpCisgICAg
ICAgICAgICByZXR1cm47CisKKyAgICAgICAgYXV0byBwcmltYXJ5S2V5ID0gbV9pbmplY3RlZFNj
cmlwdC53cmFwT2JqZWN0KHRvSlMoKmxleGljYWxHbG9iYWxPYmplY3QsICpsZXhpY2FsR2xvYmFs
T2JqZWN0LCBjdXJzb3ItPnByaW1hcnlLZXkoKSksIFN0cmluZygpLCB0cnVlKTsKKyAgICAgICAg
aWYgKCFwcmltYXJ5S2V5KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGF1dG8gdmFs
dWUgPSBtX2luamVjdGVkU2NyaXB0LndyYXBPYmplY3QoZGVzZXJpYWxpemVJREJWYWx1ZVRvSlNW
YWx1ZSgqbGV4aWNhbEdsb2JhbE9iamVjdCwgY3Vyc29yLT52YWx1ZSgpKSwgU3RyaW5nKCksIHRy
dWUpOworICAgICAgICBpZiAoIXZhbHVlKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAg
IGF1dG8gZGF0YUVudHJ5ID0gUHJvdG9jb2w6OkluZGV4ZWREQjo6RGF0YUVudHJ5OjpjcmVhdGUo
KQorICAgICAgICAgICAgLnNldEtleShrZXkucmVsZWFzZU5vbk51bGwoKSkKKyAgICAgICAgICAg
IC5zZXRQcmltYXJ5S2V5KHByaW1hcnlLZXkucmVsZWFzZU5vbk51bGwoKSkKKyAgICAgICAgICAg
IC5zZXRWYWx1ZSh2YWx1ZS5yZWxlYXNlTm9uTnVsbCgpKQogICAgICAgICAgICAgLnJlbGVhc2Uo
KTsKICAgICAgICAgbV9yZXN1bHQtPmFkZEl0ZW0oV1RGTW92ZShkYXRhRW50cnkpKTsKICAgICB9
CkBAIC00MjQsMjUgKzQxOCwyNSBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgotICAgIE9w
ZW5DdXJzb3JDYWxsYmFjayhJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdCwgUmVmPFJlcXVl
c3REYXRhQ2FsbGJhY2s+JiYgcmVxdWVzdENhbGxiYWNrLCBpbnQgc2tpcENvdW50LCB1bnNpZ25l
ZCBwYWdlU2l6ZSkKKyAgICBPcGVuQ3Vyc29yQ2FsbGJhY2soSW5qZWN0ZWRTY3JpcHQgaW5qZWN0
ZWRTY3JpcHQsIFJlZjxJbmRleGVkREJCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlJlcXVlc3RE
YXRhQ2FsbGJhY2s+JiYgcmVxdWVzdENhbGxiYWNrLCBpbnQgc2tpcENvdW50LCB1bnNpZ25lZCBw
YWdlU2l6ZSkKICAgICAgICAgOiBFdmVudExpc3RlbmVyKEV2ZW50TGlzdGVuZXI6OkNQUEV2ZW50
TGlzdGVuZXJUeXBlKQogICAgICAgICAsIG1faW5qZWN0ZWRTY3JpcHQoaW5qZWN0ZWRTY3JpcHQp
CiAgICAgICAgICwgbV9yZXF1ZXN0Q2FsbGJhY2soV1RGTW92ZShyZXF1ZXN0Q2FsbGJhY2spKQot
ICAgICAgICAsIG1fcmVzdWx0KEpTT046OkFycmF5T2Y8RGF0YUVudHJ5Pjo6Y3JlYXRlKCkpCisg
ICAgICAgICwgbV9yZXN1bHQoSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6SW5kZXhlZERCOjpEYXRh
RW50cnk+OjpjcmVhdGUoKSkKICAgICAgICAgLCBtX3NraXBDb3VudChza2lwQ291bnQpCiAgICAg
ICAgICwgbV9wYWdlU2l6ZShwYWdlU2l6ZSkKICAgICB7CiAgICAgfQogICAgIEluamVjdGVkU2Ny
aXB0IG1faW5qZWN0ZWRTY3JpcHQ7Ci0gICAgUmVmPFJlcXVlc3REYXRhQ2FsbGJhY2s+IG1fcmVx
dWVzdENhbGxiYWNrOwotICAgIFJlZjxKU09OOjpBcnJheU9mPERhdGFFbnRyeT4+IG1fcmVzdWx0
OworICAgIFJlZjxJbmRleGVkREJCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlJlcXVlc3REYXRh
Q2FsbGJhY2s+IG1fcmVxdWVzdENhbGxiYWNrOworICAgIFJlZjxKU09OOjpBcnJheU9mPFByb3Rv
Y29sOjpJbmRleGVkREI6OkRhdGFFbnRyeT4+IG1fcmVzdWx0OwogICAgIGludCBtX3NraXBDb3Vu
dDsKICAgICB1bnNpZ25lZCBtX3BhZ2VTaXplOwogfTsKIAogY2xhc3MgRGF0YUxvYWRlciBmaW5h
bCA6IHB1YmxpYyBFeGVjdXRhYmxlV2l0aERhdGFiYXNlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMg
UmVmPERhdGFMb2FkZXI+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBS
ZWY8UmVxdWVzdERhdGFDYWxsYmFjaz4mJiByZXF1ZXN0Q2FsbGJhY2ssIGNvbnN0IEluamVjdGVk
U2NyaXB0JiBpbmplY3RlZFNjcmlwdCwgY29uc3QgU3RyaW5nJiBvYmplY3RTdG9yZU5hbWUsIGNv
bnN0IFN0cmluZyYgaW5kZXhOYW1lLCBSZWZQdHI8SURCS2V5UmFuZ2U+JiYgaWRiS2V5UmFuZ2Us
IGludCBza2lwQ291bnQsIHVuc2lnbmVkIHBhZ2VTaXplKQorICAgIHN0YXRpYyBSZWY8RGF0YUxv
YWRlcj4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFJlZjxJbmRleGVk
REJCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlJlcXVlc3REYXRhQ2FsbGJhY2s+JiYgcmVxdWVz
dENhbGxiYWNrLCBjb25zdCBJbmplY3RlZFNjcmlwdCYgaW5qZWN0ZWRTY3JpcHQsIGNvbnN0IFN0
cmluZyYgb2JqZWN0U3RvcmVOYW1lLCBjb25zdCBTdHJpbmcmIGluZGV4TmFtZSwgUmVmUHRyPElE
QktleVJhbmdlPiYmIGlkYktleVJhbmdlLCBpbnQgc2tpcENvdW50LCB1bnNpZ25lZCBwYWdlU2l6
ZSkKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERhdGFMb2FkZXIoY29udGV4
dCwgV1RGTW92ZShyZXF1ZXN0Q2FsbGJhY2spLCBpbmplY3RlZFNjcmlwdCwgb2JqZWN0U3RvcmVO
YW1lLCBpbmRleE5hbWUsIFdURk1vdmUoaWRiS2V5UmFuZ2UpLCBza2lwQ291bnQsIHBhZ2VTaXpl
KSk7CiAgICAgfQpAQCAtNDk4LDggKzQ5Miw4IEBAIHB1YmxpYzoKICAgICAgICAgaWRiUmVxdWVz
dC0+YWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkuc3VjY2Vzc0V2ZW50LCBXVEZNb3ZlKG9w
ZW5DdXJzb3JDYWxsYmFjayksIGZhbHNlKTsKICAgICB9CiAKLSAgICBSZXF1ZXN0Q2FsbGJhY2sm
IHJlcXVlc3RDYWxsYmFjaygpIG92ZXJyaWRlIHsgcmV0dXJuIG1fcmVxdWVzdENhbGxiYWNrLmdl
dCgpOyB9Ci0gICAgRGF0YUxvYWRlcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVj
dXRpb25Db250ZXh0LCBSZWY8UmVxdWVzdERhdGFDYWxsYmFjaz4mJiByZXF1ZXN0Q2FsbGJhY2ss
IGNvbnN0IEluamVjdGVkU2NyaXB0JiBpbmplY3RlZFNjcmlwdCwgY29uc3QgU3RyaW5nJiBvYmpl
Y3RTdG9yZU5hbWUsIGNvbnN0IFN0cmluZyYgaW5kZXhOYW1lLCBSZWZQdHI8SURCS2V5UmFuZ2U+
IGlkYktleVJhbmdlLCBpbnQgc2tpcENvdW50LCB1bnNpZ25lZCBwYWdlU2l6ZSkKKyAgICBCYWNr
ZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlJiByZXF1ZXN0Q2FsbGJhY2soKSBvdmVycmlkZSB7
IHJldHVybiBtX3JlcXVlc3RDYWxsYmFjay5nZXQoKTsgfQorICAgIERhdGFMb2FkZXIoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgUmVmPEluZGV4ZWREQkJh
Y2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UmVxdWVzdERhdGFDYWxsYmFjaz4mJiByZXF1ZXN0Q2Fs
bGJhY2ssIGNvbnN0IEluamVjdGVkU2NyaXB0JiBpbmplY3RlZFNjcmlwdCwgY29uc3QgU3RyaW5n
JiBvYmplY3RTdG9yZU5hbWUsIGNvbnN0IFN0cmluZyYgaW5kZXhOYW1lLCBSZWZQdHI8SURCS2V5
UmFuZ2U+IGlkYktleVJhbmdlLCBpbnQgc2tpcENvdW50LCB1bnNpZ25lZCBwYWdlU2l6ZSkKICAg
ICAgICAgOiBFeGVjdXRhYmxlV2l0aERhdGFiYXNlKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpCiAg
ICAgICAgICwgbV9yZXF1ZXN0Q2FsbGJhY2soV1RGTW92ZShyZXF1ZXN0Q2FsbGJhY2spKQogICAg
ICAgICAsIG1faW5qZWN0ZWRTY3JpcHQoaW5qZWN0ZWRTY3JpcHQpCkBAIC01MDgsNyArNTAyLDcg
QEAgcHVibGljOgogICAgICAgICAsIG1faWRiS2V5UmFuZ2UoV1RGTW92ZShpZGJLZXlSYW5nZSkp
CiAgICAgICAgICwgbV9za2lwQ291bnQoc2tpcENvdW50KQogICAgICAgICAsIG1fcGFnZVNpemUo
cGFnZVNpemUpIHsgfQotICAgIFJlZjxSZXF1ZXN0RGF0YUNhbGxiYWNrPiBtX3JlcXVlc3RDYWxs
YmFjazsKKyAgICBSZWY8SW5kZXhlZERCQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpSZXF1ZXN0
RGF0YUNhbGxiYWNrPiBtX3JlcXVlc3RDYWxsYmFjazsKICAgICBJbmplY3RlZFNjcmlwdCBtX2lu
amVjdGVkU2NyaXB0OwogICAgIFN0cmluZyBtX29iamVjdFN0b3JlTmFtZTsKICAgICBTdHJpbmcg
bV9pbmRleE5hbWU7CkBAIC01MzUsMTkgKzUyOSwyMCBAQCB2b2lkIEluc3BlY3RvckluZGV4ZWRE
QkFnZW50OjpkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9udGVuZFJv
dQogCiB2b2lkIEluc3BlY3RvckluZGV4ZWREQkFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5k
QmFja2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24pCiB7Ci0gICAgRXJyb3JTdHJpbmcg
aWdub3JlZDsKLSAgICBkaXNhYmxlKGlnbm9yZWQpOworICAgIGRpc2FibGUoKTsKIH0KIAotdm9p
ZCBJbnNwZWN0b3JJbmRleGVkREJBZ2VudDo6ZW5hYmxlKEVycm9yU3RyaW5nJikKK1Byb3RvY29s
OjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckluZGV4ZWREQkFnZW50OjplbmFibGUoKQog
eworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQ6OmRp
c2FibGUoRXJyb3JTdHJpbmcmKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVj
dG9ySW5kZXhlZERCQWdlbnQ6OmRpc2FibGUoKQogeworICAgIHJldHVybiB7IH07CiB9CiAKLXN0
YXRpYyBFcnJvclN0cmluZ09yPERvY3VtZW50Kj4gZG9jdW1lbnRGcm9tRnJhbWUoRnJhbWUqIGZy
YW1lKQorc3RhdGljIFByb3RvY29sOjpFcnJvclN0cmluZ09yPERvY3VtZW50Kj4gZG9jdW1lbnRG
cm9tRnJhbWUoRnJhbWUqIGZyYW1lKQogewogICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGZyYW1l
ID8gZnJhbWUtPmRvY3VtZW50KCkgOiBudWxscHRyOwogICAgIGlmICghZG9jdW1lbnQpCkBAIC01
NTYsNyArNTUxLDcgQEAgc3RhdGljIEVycm9yU3RyaW5nT3I8RG9jdW1lbnQqPiBkb2N1bWVudEZy
b21GcmFtZShGcmFtZSogZnJhbWUpCiAgICAgcmV0dXJuIGRvY3VtZW50OwogfQogCi1zdGF0aWMg
RXJyb3JTdHJpbmdPcjxJREJGYWN0b3J5Kj4gSURCRmFjdG9yeUZyb21Eb2N1bWVudChEb2N1bWVu
dCogZG9jdW1lbnQpCitzdGF0aWMgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8SURCRmFjdG9yeSo+
IElEQkZhY3RvcnlGcm9tRG9jdW1lbnQoRG9jdW1lbnQqIGRvY3VtZW50KQogewogICAgIERPTVdp
bmRvdyogZG9tV2luZG93ID0gZG9jdW1lbnQtPmRvbVdpbmRvdygpOwogICAgIGlmICghZG9tV2lu
ZG93KQpAQCAtNTcxLDEzICs1NjYsMTMgQEAgc3RhdGljIEVycm9yU3RyaW5nT3I8SURCRmFjdG9y
eSo+IElEQkZhY3RvcnlGcm9tRG9jdW1lbnQoRG9jdW1lbnQqIGRvY3VtZW50KQogCiBzdGF0aWMg
Ym9vbCBnZXREb2N1bWVudEFuZElEQkZhY3RvcnlGcm9tRnJhbWVPclNlbmRGYWlsdXJlKEZyYW1l
KiBmcmFtZSwgRG9jdW1lbnQqJiBvdXRfZG9jdW1lbnQsIElEQkZhY3RvcnkqJiBvdXRfaWRiRmFj
dG9yeSwgQmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZSYgY2FsbGJhY2spCiB7Ci0gICAg
RXJyb3JTdHJpbmdPcjxEb2N1bWVudCo+IGRvY3VtZW50ID0gZG9jdW1lbnRGcm9tRnJhbWUoZnJh
bWUpOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPERvY3VtZW50Kj4gZG9jdW1lbnQgPSBk
b2N1bWVudEZyb21GcmFtZShmcmFtZSk7CiAgICAgaWYgKCFkb2N1bWVudC5oYXNfdmFsdWUoKSkg
ewogICAgICAgICBjYWxsYmFjay5zZW5kRmFpbHVyZShkb2N1bWVudC5lcnJvcigpKTsKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIEVycm9yU3RyaW5nT3I8SURCRmFjdG9yeSo+
IGlkYkZhY3RvcnkgPSBJREJGYWN0b3J5RnJvbURvY3VtZW50KGRvY3VtZW50LnZhbHVlKCkpOwor
ICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPElEQkZhY3RvcnkqPiBpZGJGYWN0b3J5ID0gSURC
RmFjdG9yeUZyb21Eb2N1bWVudChkb2N1bWVudC52YWx1ZSgpKTsKICAgICBpZiAoIWlkYkZhY3Rv
cnkuaGFzX3ZhbHVlKCkpIHsKICAgICAgICAgY2FsbGJhY2suc2VuZEZhaWx1cmUoaWRiRmFjdG9y
eS5lcnJvcigpKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNjIwLDcgKzYxNSw3IEBAIHZv
aWQgSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQ6OnJlcXVlc3REYXRhYmFzZShjb25zdCBTdHJpbmcm
IHNlY3VyaXR5T3JpZ2luLCBjb25zCiAgICAgZGF0YWJhc2VMb2FkZXItPnN0YXJ0KGlkYkZhY3Rv
cnksICZkb2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKSwgZGF0YWJhc2VOYW1lKTsKIH0KIAotdm9p
ZCBJbnNwZWN0b3JJbmRleGVkREJBZ2VudDo6cmVxdWVzdERhdGEoY29uc3QgU3RyaW5nJiBzZWN1
cml0eU9yaWdpbiwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZU5hbWUsIGNvbnN0IFN0cmluZyYgb2Jq
ZWN0U3RvcmVOYW1lLCBjb25zdCBTdHJpbmcmIGluZGV4TmFtZSwgaW50IHNraXBDb3VudCwgaW50
IHBhZ2VTaXplLCBjb25zdCBKU09OOjpPYmplY3QqIGtleVJhbmdlLCBSZWY8UmVxdWVzdERhdGFD
YWxsYmFjaz4mJiBjYWxsYmFjaykKK3ZvaWQgSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQ6OnJlcXVl
c3REYXRhKGNvbnN0IFN0cmluZyYgc2VjdXJpdHlPcmlnaW4sIGNvbnN0IFN0cmluZyYgZGF0YWJh
c2VOYW1lLCBjb25zdCBTdHJpbmcmIG9iamVjdFN0b3JlTmFtZSwgY29uc3QgU3RyaW5nJiBpbmRl
eE5hbWUsIGludCBza2lwQ291bnQsIGludCBwYWdlU2l6ZSwgUmVmUHRyPEpTT046Ok9iamVjdD4m
JiBrZXlSYW5nZSwgUmVmPFJlcXVlc3REYXRhQ2FsbGJhY2s+JiYgY2FsbGJhY2spCiB7CiAgICAg
YXV0byogZnJhbWUgPSBJbnNwZWN0b3JQYWdlQWdlbnQ6OmZpbmRGcmFtZVdpdGhTZWN1cml0eU9y
aWdpbihtX2luc3BlY3RlZFBhZ2UsIHNlY3VyaXR5T3JpZ2luKTsKICAgICBEb2N1bWVudCogZG9j
dW1lbnQ7CkBAIC02MjksNyArNjI0LDcgQEAgdm9pZCBJbnNwZWN0b3JJbmRleGVkREJBZ2VudDo6
cmVxdWVzdERhdGEoY29uc3QgU3RyaW5nJiBzZWN1cml0eU9yaWdpbiwgY29uc3QgU3QKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHQgPSBtX2luamVj
dGVkU2NyaXB0TWFuYWdlci5pbmplY3RlZFNjcmlwdEZvcihtYWluV29ybGRFeGVjU3RhdGUoZnJh
bWUpKTsKLSAgICBSZWZQdHI8SURCS2V5UmFuZ2U+IGlkYktleVJhbmdlID0ga2V5UmFuZ2UgPyBp
ZGJLZXlSYW5nZUZyb21LZXlSYW5nZShrZXlSYW5nZSkgOiBudWxscHRyOworICAgIFJlZlB0cjxJ
REJLZXlSYW5nZT4gaWRiS2V5UmFuZ2UgPSBrZXlSYW5nZSA/IGlkYktleVJhbmdlRnJvbUtleVJh
bmdlKCprZXlSYW5nZSkgOiBudWxscHRyOwogICAgIGlmIChrZXlSYW5nZSAmJiAhaWRiS2V5UmFu
Z2UpIHsKICAgICAgICAgY2FsbGJhY2stPnNlbmRGYWlsdXJlKCJDb3VsZCBub3QgcGFyc2Uga2V5
IHJhbmdlLiJfcyk7CiAgICAgICAgIHJldHVybjsKQEAgLTY0NCw3ICs2MzksNyBAQCBuYW1lc3Bh
Y2UgewogY2xhc3MgQ2xlYXJPYmplY3RTdG9yZUxpc3RlbmVyIGZpbmFsIDogcHVibGljIEV2ZW50
TGlzdGVuZXIgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENsZWFyT2JqZWN0U3RvcmVMaXN0
ZW5lcik7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxDbGVhck9iamVjdFN0b3JlTGlzdGVuZXI+
IGNyZWF0ZShSZWY8Q2xlYXJPYmplY3RTdG9yZUNhbGxiYWNrPiByZXF1ZXN0Q2FsbGJhY2spCisg
ICAgc3RhdGljIFJlZjxDbGVhck9iamVjdFN0b3JlTGlzdGVuZXI+IGNyZWF0ZShSZWY8SW5kZXhl
ZERCQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpDbGVhck9iamVjdFN0b3JlQ2FsbGJhY2s+IHJl
cXVlc3RDYWxsYmFjaykKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENsZWFy
T2JqZWN0U3RvcmVMaXN0ZW5lcihXVEZNb3ZlKHJlcXVlc3RDYWxsYmFjaykpKTsKICAgICB9CkBA
IC02NjgsMjMgKzY2MywyMyBAQCBwdWJsaWM6CiAgICAgICAgIG1fcmVxdWVzdENhbGxiYWNrLT5z
ZW5kU3VjY2VzcygpOwogICAgIH0KIHByaXZhdGU6Ci0gICAgQ2xlYXJPYmplY3RTdG9yZUxpc3Rl
bmVyKFJlZjxDbGVhck9iamVjdFN0b3JlQ2FsbGJhY2s+JiYgcmVxdWVzdENhbGxiYWNrKQorICAg
IENsZWFyT2JqZWN0U3RvcmVMaXN0ZW5lcihSZWY8SW5kZXhlZERCQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyOjpDbGVhck9iamVjdFN0b3JlQ2FsbGJhY2s+JiYgcmVxdWVzdENhbGxiYWNrKQogICAg
ICAgICA6IEV2ZW50TGlzdGVuZXIoRXZlbnRMaXN0ZW5lcjo6Q1BQRXZlbnRMaXN0ZW5lclR5cGUp
CiAgICAgICAgICwgbV9yZXF1ZXN0Q2FsbGJhY2soV1RGTW92ZShyZXF1ZXN0Q2FsbGJhY2spKQog
ICAgIHsKICAgICB9CiAKLSAgICBSZWY8Q2xlYXJPYmplY3RTdG9yZUNhbGxiYWNrPiBtX3JlcXVl
c3RDYWxsYmFjazsKKyAgICBSZWY8SW5kZXhlZERCQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpD
bGVhck9iamVjdFN0b3JlQ2FsbGJhY2s+IG1fcmVxdWVzdENhbGxiYWNrOwogfTsKIAogY2xhc3Mg
Q2xlYXJPYmplY3RTdG9yZSBmaW5hbCA6IHB1YmxpYyBFeGVjdXRhYmxlV2l0aERhdGFiYXNlIHsK
IHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPENsZWFyT2JqZWN0U3RvcmU+IGNyZWF0ZShTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIG9iamVjdFN0b3JlTmFtZSwg
UmVmPENsZWFyT2JqZWN0U3RvcmVDYWxsYmFjaz4mJiByZXF1ZXN0Q2FsbGJhY2spCisgICAgc3Rh
dGljIFJlZjxDbGVhck9iamVjdFN0b3JlPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
Y29udGV4dCwgY29uc3QgU3RyaW5nJiBvYmplY3RTdG9yZU5hbWUsIFJlZjxJbmRleGVkREJCYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkNsZWFyT2JqZWN0U3RvcmVDYWxsYmFjaz4mJiByZXF1ZXN0
Q2FsbGJhY2spCiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDbGVhck9iamVj
dFN0b3JlKGNvbnRleHQsIG9iamVjdFN0b3JlTmFtZSwgV1RGTW92ZShyZXF1ZXN0Q2FsbGJhY2sp
KSk7CiAgICAgfQogCi0gICAgQ2xlYXJPYmplY3RTdG9yZShTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIG9iamVjdFN0b3JlTmFtZSwgUmVmPENsZWFyT2JqZWN0
U3RvcmVDYWxsYmFjaz4mJiByZXF1ZXN0Q2FsbGJhY2spCisgICAgQ2xlYXJPYmplY3RTdG9yZShT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIG9iamVjdFN0b3Jl
TmFtZSwgUmVmPEluZGV4ZWREQkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6Q2xlYXJPYmplY3RT
dG9yZUNhbGxiYWNrPiYmIHJlcXVlc3RDYWxsYmFjaykKICAgICAgICAgOiBFeGVjdXRhYmxlV2l0
aERhdGFiYXNlKGNvbnRleHQpCiAgICAgICAgICwgbV9vYmplY3RTdG9yZU5hbWUob2JqZWN0U3Rv
cmVOYW1lKQogICAgICAgICAsIG1fcmVxdWVzdENhbGxiYWNrKFdURk1vdmUocmVxdWVzdENhbGxi
YWNrKSkKQEAgLTcyMywxMCArNzE4LDEwIEBAIHB1YmxpYzoKICAgICAgICAgaWRiVHJhbnNhY3Rp
b24tPmFkZEV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLmNvbXBsZXRlRXZlbnQsIENsZWFyT2Jq
ZWN0U3RvcmVMaXN0ZW5lcjo6Y3JlYXRlKG1fcmVxdWVzdENhbGxiYWNrLmNvcHlSZWYoKSksIGZh
bHNlKTsKICAgICB9CiAKLSAgICBSZXF1ZXN0Q2FsbGJhY2smIHJlcXVlc3RDYWxsYmFjaygpIG92
ZXJyaWRlIHsgcmV0dXJuIG1fcmVxdWVzdENhbGxiYWNrLmdldCgpOyB9CisgICAgQmFja2VuZERp
c3BhdGNoZXI6OkNhbGxiYWNrQmFzZSYgcmVxdWVzdENhbGxiYWNrKCkgb3ZlcnJpZGUgeyByZXR1
cm4gbV9yZXF1ZXN0Q2FsbGJhY2suZ2V0KCk7IH0KIHByaXZhdGU6CiAgICAgY29uc3QgU3RyaW5n
IG1fb2JqZWN0U3RvcmVOYW1lOwotICAgIFJlZjxDbGVhck9iamVjdFN0b3JlQ2FsbGJhY2s+IG1f
cmVxdWVzdENhbGxiYWNrOworICAgIFJlZjxJbmRleGVkREJCYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXI6OkNsZWFyT2JqZWN0U3RvcmVDYWxsYmFjaz4gbV9yZXF1ZXN0Q2FsbGJhY2s7CiB9OwogCiB9
IC8vIGFub255bW91cyBuYW1lc3BhY2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9hZ2VudHMvSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQuaAppbmRleCBkYjI5N2JkOWNk
YThkYTZjMDQ3YWI4MmZmMzUwYTJmNGY1NzQ4ZmU5Li5lNTQ0ZjljNmYyNTM5YzQxMTcyZDVjNjky
ZTRkMjgwZTU0MzAyMzkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdl
bnRzL0luc3BlY3RvckluZGV4ZWREQkFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2FnZW50cy9JbnNwZWN0b3JJbmRleGVkREJBZ2VudC5oCkBAIC00NSwyNiArNDUsMjQgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBQYWdlOwogCi10eXBlZGVmIFN0cmluZyBFcnJv
clN0cmluZzsKLQogY2xhc3MgSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQgZmluYWwgOiBwdWJsaWMg
SW5zcGVjdG9yQWdlbnRCYXNlLCBwdWJsaWMgSW5zcGVjdG9yOjpJbmRleGVkREJCYWNrZW5kRGlz
cGF0Y2hlckhhbmRsZXIgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEluc3BlY3RvckluZGV4
ZWREQkFnZW50KTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBJ
bnNwZWN0b3JJbmRleGVkREJBZ2VudChQYWdlQWdlbnRDb250ZXh0Jik7Ci0gICAgfkluc3BlY3Rv
ckluZGV4ZWREQkFnZW50KCkgb3ZlcnJpZGU7CisgICAgfkluc3BlY3RvckluZGV4ZWREQkFnZW50
KCk7CiAKICAgICAvLyBJbnNwZWN0b3JBZ2VudEJhc2UKLSAgICB2b2lkIGRpZENyZWF0ZUZyb250
ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kUm91dGVyKiwgSW5zcGVjdG9yOjpCYWNr
ZW5kRGlzcGF0Y2hlciopIG92ZXJyaWRlOwotICAgIHZvaWQgd2lsbERlc3Ryb3lGcm9udGVuZEFu
ZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKSBvdmVycmlkZTsKKyAgICB2b2lk
IGRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kUm91dGVyKiwg
SW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlciopOworICAgIHZvaWQgd2lsbERlc3Ryb3lGcm9u
dGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKTsKIAogICAgIC8vIElu
ZGV4ZWREQkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcgotICAgIHZvaWQgZW5hYmxlKEVycm9yU3Ry
aW5nJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkaXNhYmxlKEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7
Ci0gICAgdm9pZCByZXF1ZXN0RGF0YWJhc2VOYW1lcyhjb25zdCBTdHJpbmcmIHNlY3VyaXR5T3Jp
Z2luLCBSZWY8UmVxdWVzdERhdGFiYXNlTmFtZXNDYWxsYmFjaz4mJikgb3ZlcnJpZGU7Ci0gICAg
dm9pZCByZXF1ZXN0RGF0YWJhc2UoY29uc3QgU3RyaW5nJiBzZWN1cml0eU9yaWdpbiwgY29uc3Qg
U3RyaW5nJiBkYXRhYmFzZU5hbWUsIFJlZjxSZXF1ZXN0RGF0YWJhc2VDYWxsYmFjaz4mJikgb3Zl
cnJpZGU7Ci0gICAgdm9pZCByZXF1ZXN0RGF0YShjb25zdCBTdHJpbmcmIHNlY3VyaXR5T3JpZ2lu
LCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlTmFtZSwgY29uc3QgU3RyaW5nJiBvYmplY3RTdG9yZU5h
bWUsIGNvbnN0IFN0cmluZyYgaW5kZXhOYW1lLCBpbnQgc2tpcENvdW50LCBpbnQgcGFnZVNpemUs
IGNvbnN0IEpTT046Ok9iamVjdCoga2V5UmFuZ2UsIFJlZjxSZXF1ZXN0RGF0YUNhbGxiYWNrPiYm
KSBvdmVycmlkZTsKLSAgICB2b2lkIGNsZWFyT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBzZWN1
cml0eU9yaWdpbiwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZU5hbWUsIGNvbnN0IFN0cmluZyYgb2Jq
ZWN0U3RvcmVOYW1lLCBSZWY8Q2xlYXJPYmplY3RTdG9yZUNhbGxiYWNrPiYmKSBvdmVycmlkZTsK
KyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGVuYWJsZSgpOwor
ICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZGlzYWJsZSgpOwor
ICAgIHZvaWQgcmVxdWVzdERhdGFiYXNlTmFtZXMoY29uc3QgU3RyaW5nJiBzZWN1cml0eU9yaWdp
biwgUmVmPFJlcXVlc3REYXRhYmFzZU5hbWVzQ2FsbGJhY2s+JiYpOworICAgIHZvaWQgcmVxdWVz
dERhdGFiYXNlKGNvbnN0IFN0cmluZyYgc2VjdXJpdHlPcmlnaW4sIGNvbnN0IFN0cmluZyYgZGF0
YWJhc2VOYW1lLCBSZWY8UmVxdWVzdERhdGFiYXNlQ2FsbGJhY2s+JiYpOworICAgIHZvaWQgcmVx
dWVzdERhdGEoY29uc3QgU3RyaW5nJiBzZWN1cml0eU9yaWdpbiwgY29uc3QgU3RyaW5nJiBkYXRh
YmFzZU5hbWUsIGNvbnN0IFN0cmluZyYgb2JqZWN0U3RvcmVOYW1lLCBjb25zdCBTdHJpbmcmIGlu
ZGV4TmFtZSwgaW50IHNraXBDb3VudCwgaW50IHBhZ2VTaXplLCBSZWZQdHI8SlNPTjo6T2JqZWN0
PiYmIGtleVJhbmdlLCBSZWY8UmVxdWVzdERhdGFDYWxsYmFjaz4mJik7CisgICAgdm9pZCBjbGVh
ck9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgc2VjdXJpdHlPcmlnaW4sIGNvbnN0IFN0cmluZyYg
ZGF0YWJhc2VOYW1lLCBjb25zdCBTdHJpbmcmIG9iamVjdFN0b3JlTmFtZSwgUmVmPENsZWFyT2Jq
ZWN0U3RvcmVDYWxsYmFjaz4mJik7CiAKIHByaXZhdGU6CiAgICAgSW5zcGVjdG9yOjpJbmplY3Rl
ZFNjcmlwdE1hbmFnZXImIG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JMYXllclRyZWVBZ2VudC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckxheWVyVHJlZUFnZW50
LmNwcAppbmRleCBiYjk5NGJmOTlmYzI1MTY2OWY4ZDczYTRkZjBiNTVlYzBmNTZjNjEzLi41MmQz
ZmQ3MGY2YTI5OWQ5YWYwNDY5MjRmNGJhZTNkZDVkNjBiMTFjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckxheWVyVHJlZUFnZW50LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckxheWVyVHJlZUFnZW50
LmNwcApAQCAtNjEsOCArNjEsNyBAQCB2b2lkIEluc3BlY3RvckxheWVyVHJlZUFnZW50OjpkaWRD
cmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9udGVuZFJvdQogCiB2b2lkIElu
c3BlY3RvckxheWVyVHJlZUFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJbnNw
ZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24pCiB7Ci0gICAgRXJyb3JTdHJpbmcgaWdub3JlZDsKLSAg
ICBkaXNhYmxlKGlnbm9yZWQpOworICAgIGRpc2FibGUoKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JM
YXllclRyZWVBZ2VudDo6cmVzZXQoKQpAQCAtNzQsMTYgKzczLDIwIEBAIHZvaWQgSW5zcGVjdG9y
TGF5ZXJUcmVlQWdlbnQ6OnJlc2V0KCkKICAgICBtX3N1cHByZXNzTGF5ZXJDaGFuZ2VFdmVudHMg
PSBmYWxzZTsKIH0KIAotdm9pZCBJbnNwZWN0b3JMYXllclRyZWVBZ2VudDo6ZW5hYmxlKEVycm9y
U3RyaW5nJikKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckxheWVyVHJl
ZUFnZW50OjplbmFibGUoKQogewogICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy5zZXRFbmFibGVk
TGF5ZXJUcmVlQWdlbnQodGhpcyk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3Bl
Y3RvckxheWVyVHJlZUFnZW50OjpkaXNhYmxlKEVycm9yU3RyaW5nJikKK1Byb3RvY29sOjpFcnJv
clN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckxheWVyVHJlZUFnZW50OjpkaXNhYmxlKCkKIHsKICAg
ICBtX2luc3RydW1lbnRpbmdBZ2VudHMuc2V0RW5hYmxlZExheWVyVHJlZUFnZW50KG51bGxwdHIp
OwogCiAgICAgcmVzZXQoKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKIHZvaWQgSW5zcGVjdG9y
TGF5ZXJUcmVlQWdlbnQ6OmxheWVyVHJlZURpZENoYW5nZSgpCkBAIC0xMDYsNTEgKzEwOSw0OSBA
QCB2b2lkIEluc3BlY3RvckxheWVyVHJlZUFnZW50Ojpwc2V1ZG9FbGVtZW50RGVzdHJveWVkKFBz
ZXVkb0VsZW1lbnQmIHBzZXVkb0VsZW1lbgogICAgIHVuYmluZFBzZXVkb0VsZW1lbnQoJnBzZXVk
b0VsZW1lbnQpOwogfQogCi12b2lkIEluc3BlY3RvckxheWVyVHJlZUFnZW50OjpsYXllcnNGb3JO
b2RlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJZCwgUmVmUHRyPEpTT046OkFy
cmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6TGF5ZXJUcmVlOjpMYXllcj4+JiBsYXllcnMpCitQ
cm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6TGF5ZXJU
cmVlOjpMYXllcj4+PiBJbnNwZWN0b3JMYXllclRyZWVBZ2VudDo6bGF5ZXJzRm9yTm9kZShQcm90
b2NvbDo6RE9NOjpOb2RlSWQgbm9kZUlkKQogewotICAgIGxheWVycyA9IEpTT046OkFycmF5T2Y8
SW5zcGVjdG9yOjpQcm90b2NvbDo6TGF5ZXJUcmVlOjpMYXllcj46OmNyZWF0ZSgpOwotCiAgICAg
YXV0byogbm9kZSA9IG1faW5zdHJ1bWVudGluZ0FnZW50cy5wZXJzaXN0ZW50RE9NQWdlbnQoKS0+
bm9kZUZvcklkKG5vZGVJZCk7Ci0gICAgaWYgKCFub2RlKSB7Ci0gICAgICAgIGVycm9yU3RyaW5n
ID0gIk1pc3Npbmcgbm9kZSBmb3IgZ2l2ZW4gbm9kZUlkIl9zOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQorICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJNaXNz
aW5nIG5vZGUgZm9yIGdpdmVuIG5vZGVJZCJfcyk7CiAKICAgICBhdXRvKiByZW5kZXJlciA9IG5v
ZGUtPnJlbmRlcmVyKCk7Ci0gICAgaWYgKCFyZW5kZXJlcikgewotICAgICAgICBlcnJvclN0cmlu
ZyA9ICJNaXNzaW5nIHJlbmRlcmVyIG9mIG5vZGUgZm9yIGdpdmVuIG5vZGVJZCJfczsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoIXJlbmRlcmVyKQorICAgICAgICByZXR1cm4gbWFr
ZVVuZXhwZWN0ZWQoIk1pc3NpbmcgcmVuZGVyZXIgb2Ygbm9kZSBmb3IgZ2l2ZW4gbm9kZUlkIl9z
KTsKIAogICAgIGlmICghaXM8UmVuZGVyRWxlbWVudD4oKnJlbmRlcmVyKSkKLSAgICAgICAgcmV0
dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk1pc3NpbmcgcmVuZGVyZXIgb2Yg
ZWxlbWVudCBmb3IgZ2l2ZW4gbm9kZUlkIl9zKTsKIAotICAgIGdhdGhlckxheWVyc1VzaW5nUmVu
ZGVyT2JqZWN0SGllcmFyY2h5KGVycm9yU3RyaW5nLCBkb3duY2FzdDxSZW5kZXJFbGVtZW50Pigq
cmVuZGVyZXIpLCBsYXllcnMpOworICAgIGF1dG8gbGF5ZXJzID0gSlNPTjo6QXJyYXlPZjxQcm90
b2NvbDo6TGF5ZXJUcmVlOjpMYXllcj46OmNyZWF0ZSgpOworCisgICAgZ2F0aGVyTGF5ZXJzVXNp
bmdSZW5kZXJPYmplY3RIaWVyYXJjaHkoZG93bmNhc3Q8UmVuZGVyRWxlbWVudD4oKnJlbmRlcmVy
KSwgbGF5ZXJzKTsKIAogICAgIG1fc3VwcHJlc3NMYXllckNoYW5nZUV2ZW50cyA9IGZhbHNlOwor
CisgICAgcmV0dXJuIFdURk1vdmUobGF5ZXJzKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JMYXllclRy
ZWVBZ2VudDo6Z2F0aGVyTGF5ZXJzVXNpbmdSZW5kZXJPYmplY3RIaWVyYXJjaHkoRXJyb3JTdHJp
bmcmIGVycm9yU3RyaW5nLCBSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgUmVmUHRyPEpTT046OkFy
cmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6TGF5ZXJUcmVlOjpMYXllcj4+JiBsYXllcnMpCit2
b2lkIEluc3BlY3RvckxheWVyVHJlZUFnZW50OjpnYXRoZXJMYXllcnNVc2luZ1JlbmRlck9iamVj
dEhpZXJhcmNoeShSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgSlNPTjo6QXJyYXlPZjxQcm90b2Nv
bDo6TGF5ZXJUcmVlOjpMYXllcj4mIGxheWVycykKIHsKICAgICBpZiAocmVuZGVyZXIuaGFzTGF5
ZXIoKSkgewotICAgICAgICBnYXRoZXJMYXllcnNVc2luZ1JlbmRlckxheWVySGllcmFyY2h5KGVy
cm9yU3RyaW5nLCBkb3duY2FzdDxSZW5kZXJMYXllck1vZGVsT2JqZWN0PihyZW5kZXJlcikubGF5
ZXIoKSwgbGF5ZXJzKTsKKyAgICAgICAgZ2F0aGVyTGF5ZXJzVXNpbmdSZW5kZXJMYXllckhpZXJh
cmNoeShkb3duY2FzdDxSZW5kZXJMYXllck1vZGVsT2JqZWN0PihyZW5kZXJlcikubGF5ZXIoKSwg
bGF5ZXJzKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGZvciAoYXV0byYgY2hpbGQg
OiBjaGlsZHJlbk9mVHlwZTxSZW5kZXJFbGVtZW50PihyZW5kZXJlcikpCi0gICAgICAgIGdhdGhl
ckxheWVyc1VzaW5nUmVuZGVyT2JqZWN0SGllcmFyY2h5KGVycm9yU3RyaW5nLCBjaGlsZCwgbGF5
ZXJzKTsKKyAgICAgICAgZ2F0aGVyTGF5ZXJzVXNpbmdSZW5kZXJPYmplY3RIaWVyYXJjaHkoY2hp
bGQsIGxheWVycyk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OmdhdGhlckxh
eWVyc1VzaW5nUmVuZGVyTGF5ZXJIaWVyYXJjaHkoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBS
ZW5kZXJMYXllciogcmVuZGVyTGF5ZXIsIFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkxheWVyVHJlZTo6TGF5ZXI+PiYgbGF5ZXJzKQordm9pZCBJbnNwZWN0b3JMYXll
clRyZWVBZ2VudDo6Z2F0aGVyTGF5ZXJzVXNpbmdSZW5kZXJMYXllckhpZXJhcmNoeShSZW5kZXJM
YXllciogcmVuZGVyTGF5ZXIsIEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkxheWVyVHJlZTo6TGF5
ZXI+JiBsYXllcnMpCiB7CiAgICAgaWYgKHJlbmRlckxheWVyLT5pc0NvbXBvc2l0ZWQoKSkKLSAg
ICAgICAgbGF5ZXJzLT5hZGRJdGVtKGJ1aWxkT2JqZWN0Rm9yTGF5ZXIoZXJyb3JTdHJpbmcsIHJl
bmRlckxheWVyKSk7CisgICAgICAgIGxheWVycy5hZGRJdGVtKGJ1aWxkT2JqZWN0Rm9yTGF5ZXIo
cmVuZGVyTGF5ZXIpKTsKIAogICAgIGZvciAocmVuZGVyTGF5ZXIgPSByZW5kZXJMYXllci0+Zmly
c3RDaGlsZCgpOyByZW5kZXJMYXllcjsgcmVuZGVyTGF5ZXIgPSByZW5kZXJMYXllci0+bmV4dFNp
YmxpbmcoKSkKLSAgICAgICAgZ2F0aGVyTGF5ZXJzVXNpbmdSZW5kZXJMYXllckhpZXJhcmNoeShl
cnJvclN0cmluZywgcmVuZGVyTGF5ZXIsIGxheWVycyk7CisgICAgICAgIGdhdGhlckxheWVyc1Vz
aW5nUmVuZGVyTGF5ZXJIaWVyYXJjaHkocmVuZGVyTGF5ZXIsIGxheWVycyk7CiB9CiAKLVJlZjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpMYXllclRyZWU6OkxheWVyPiBJbnNwZWN0b3JMYXllclRyZWVB
Z2VudDo6YnVpbGRPYmplY3RGb3JMYXllcihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIFJlbmRl
ckxheWVyKiByZW5kZXJMYXllcikKK1JlZjxQcm90b2NvbDo6TGF5ZXJUcmVlOjpMYXllcj4gSW5z
cGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yTGF5ZXIoUmVuZGVyTGF5ZXIqIHJl
bmRlckxheWVyKQogewogICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSAmcmVuZGVyTGF5ZXIt
PnJlbmRlcmVyKCk7CiAgICAgUmVuZGVyTGF5ZXJCYWNraW5nKiBiYWNraW5nID0gcmVuZGVyTGF5
ZXItPmJhY2tpbmcoKTsKQEAgLTE3MCw5ICsxNzEsOSBAQCBSZWY8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6TGF5ZXJUcmVlOjpMYXllcj4gSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OmJ1aWxkT2JqZWN0
RgogICAgICAgICBub2RlID0gcmVuZGVyZXItPnBhcmVudCgpLT5lbGVtZW50KCk7CiAKICAgICAv
LyBCYXNpYyBzZXQgb2YgcHJvcGVydGllcy4KLSAgICBhdXRvIGxheWVyT2JqZWN0ID0gSW5zcGVj
dG9yOjpQcm90b2NvbDo6TGF5ZXJUcmVlOjpMYXllcjo6Y3JlYXRlKCkKKyAgICBhdXRvIGxheWVy
T2JqZWN0ID0gUHJvdG9jb2w6OkxheWVyVHJlZTo6TGF5ZXI6OmNyZWF0ZSgpCiAgICAgICAgIC5z
ZXRMYXllcklkKGJpbmQocmVuZGVyTGF5ZXIpKQotICAgICAgICAuc2V0Tm9kZUlkKGlkRm9yTm9k
ZShlcnJvclN0cmluZywgbm9kZSkpCisgICAgICAgIC5zZXROb2RlSWQoaWRGb3JOb2RlKG5vZGUp
KQogICAgICAgICAuc2V0Qm91bmRzKGJ1aWxkT2JqZWN0Rm9ySW50UmVjdChyZW5kZXJlci0+YWJz
b2x1dGVCb3VuZGluZ0JveFJlY3QoKSkpCiAgICAgICAgIC5zZXRNZW1vcnkoYmFja2luZy0+YmFj
a2luZ1N0b3JlTWVtb3J5RXN0aW1hdGUoKSkKICAgICAgICAgLnNldENvbXBvc2l0ZWRCb3VuZHMo
YnVpbGRPYmplY3RGb3JJbnRSZWN0KGVuY2xvc2luZ0ludFJlY3QoYmFja2luZy0+Y29tcG9zaXRl
ZEJvdW5kcygpKSkpCkBAIC0yMDksMjUgKzIxMCwyNSBAQCBSZWY8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6TGF5ZXJUcmVlOjpMYXllcj4gSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OmJ1aWxkT2JqZWN0
RgogICAgIHJldHVybiBsYXllck9iamVjdDsKIH0KIAotaW50IEluc3BlY3RvckxheWVyVHJlZUFn
ZW50OjppZEZvck5vZGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBOb2RlKiBub2RlKQorUHJv
dG9jb2w6OkRPTTo6Tm9kZUlkIEluc3BlY3RvckxheWVyVHJlZUFnZW50OjppZEZvck5vZGUoTm9k
ZSogbm9kZSkKIHsKICAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgSW5z
cGVjdG9yRE9NQWdlbnQqIGRvbUFnZW50ID0gbV9pbnN0cnVtZW50aW5nQWdlbnRzLnBlcnNpc3Rl
bnRET01BZ2VudCgpOwogICAgIAotICAgIGludCBub2RlSWQgPSBkb21BZ2VudC0+Ym91bmROb2Rl
SWQobm9kZSk7CisgICAgYXV0byBub2RlSWQgPSBkb21BZ2VudC0+Ym91bmROb2RlSWQobm9kZSk7
CiAgICAgaWYgKCFub2RlSWQpIHsKICAgICAgICAgLy8gRklYTUU6IDxodHRwczovL3dlYmtpdC5v
cmcvYi8yMTM0OTk+IFdlYiBJbnNwZWN0b3I6IGFsbG93IERPTSBub2RlcyB0byBiZSBpbnN0cnVt
ZW50ZWQgYXQgYW55IHBvaW50LCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlIG1haW4gZG9jdW1l
bnQgaGFzIGFsc28gYmVlbiBpbnN0cnVtZW50ZWQKLSAgICAgICAgbm9kZUlkID0gZG9tQWdlbnQt
PnB1c2hOb2RlVG9Gcm9udGVuZChlcnJvclN0cmluZywgZG9tQWdlbnQtPmJvdW5kTm9kZUlkKCZu
b2RlLT5kb2N1bWVudCgpKSwgbm9kZSk7CisgICAgICAgIG5vZGVJZCA9IGRvbUFnZW50LT5wdXNo
Tm9kZVRvRnJvbnRlbmQobm9kZSk7CiAgICAgfQogCiAgICAgcmV0dXJuIG5vZGVJZDsKIH0KIAot
UmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkxheWVyVHJlZTo6SW50UmVjdD4gSW5zcGVjdG9yTGF5
ZXJUcmVlQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9ySW50UmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQor
UmVmPFByb3RvY29sOjpMYXllclRyZWU6OkludFJlY3Q+IEluc3BlY3RvckxheWVyVHJlZUFnZW50
OjpidWlsZE9iamVjdEZvckludFJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKLSAgICByZXR1
cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6TGF5ZXJUcmVlOjpJbnRSZWN0OjpjcmVhdGUoKQorICAg
IHJldHVybiBQcm90b2NvbDo6TGF5ZXJUcmVlOjpJbnRSZWN0OjpjcmVhdGUoKQogICAgICAgICAu
c2V0WChyZWN0LngoKSkKICAgICAgICAgLnNldFkocmVjdC55KCkpCiAgICAgICAgIC5zZXRXaWR0
aChyZWN0LndpZHRoKCkpCkBAIC0yMzUsMTcgKzIzNiwxNSBAQCBSZWY8SW5zcGVjdG9yOjpQcm90
b2NvbDo6TGF5ZXJUcmVlOjpJbnRSZWN0PiBJbnNwZWN0b3JMYXllclRyZWVBZ2VudDo6YnVpbGRP
YmplYwogICAgICAgICAucmVsZWFzZSgpOwogfQogCi12b2lkIEluc3BlY3RvckxheWVyVHJlZUFn
ZW50OjpyZWFzb25zRm9yQ29tcG9zaXRpbmdMYXllcihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcs
IGNvbnN0IFN0cmluZyYgbGF5ZXJJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkxheWVy
VHJlZTo6Q29tcG9zaXRpbmdSZWFzb25zPiYgY29tcG9zaXRpbmdSZWFzb25zUmVzdWx0KQorUHJv
dG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPFByb3RvY29sOjpMYXllclRyZWU6OkNvbXBvc2l0aW5n
UmVhc29ucz4+IEluc3BlY3RvckxheWVyVHJlZUFnZW50OjpyZWFzb25zRm9yQ29tcG9zaXRpbmdM
YXllcihjb25zdCBQcm90b2NvbDo6TGF5ZXJUcmVlOjpMYXllcklkJiBsYXllcklkKQogewogICAg
IGNvbnN0IFJlbmRlckxheWVyKiByZW5kZXJMYXllciA9IG1faWRUb0xheWVyLmdldChsYXllcklk
KTsKIAotICAgIGlmICghcmVuZGVyTGF5ZXIpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWlz
c2luZyByZW5kZXIgbGF5ZXIgZm9yIGdpdmVuIGxheWVySWQiX3M7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9CisgICAgaWYgKCFyZW5kZXJMYXllcikKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVj
dGVkKCJNaXNzaW5nIHJlbmRlciBsYXllciBmb3IgZ2l2ZW4gbGF5ZXJJZCJfcyk7CiAKICAgICBP
cHRpb25TZXQ8Q29tcG9zaXRpbmdSZWFzb24+IHJlYXNvbnMgPSByZW5kZXJMYXllci0+Y29tcG9z
aXRvcigpLnJlYXNvbnNGb3JDb21wb3NpdGluZygqcmVuZGVyTGF5ZXIpOwotICAgIGF1dG8gY29t
cG9zaXRpbmdSZWFzb25zID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6TGF5ZXJUcmVlOjpDb21wb3Np
dGluZ1JlYXNvbnM6OmNyZWF0ZSgpLnJlbGVhc2UoKTsKKyAgICBhdXRvIGNvbXBvc2l0aW5nUmVh
c29ucyA9IFByb3RvY29sOjpMYXllclRyZWU6OkNvbXBvc2l0aW5nUmVhc29uczo6Y3JlYXRlKCku
cmVsZWFzZSgpOwogCiAgICAgaWYgKHJlYXNvbnMuY29udGFpbnMoQ29tcG9zaXRpbmdSZWFzb246
OlRyYW5zZm9ybTNEKSkKICAgICAgICAgY29tcG9zaXRpbmdSZWFzb25zLT5zZXRUcmFuc2Zvcm0z
RCh0cnVlKTsKQEAgLTMyNCw3ICszMjMsNyBAQCB2b2lkIEluc3BlY3RvckxheWVyVHJlZUFnZW50
OjpyZWFzb25zRm9yQ29tcG9zaXRpbmdMYXllcihFcnJvclN0cmluZyYgZXJyb3JTdHJpbgogICAg
IGlmIChyZWFzb25zLmNvbnRhaW5zKENvbXBvc2l0aW5nUmVhc29uOjpSb290KSkKICAgICAgICAg
Y29tcG9zaXRpbmdSZWFzb25zLT5zZXRSb290KHRydWUpOwogCi0gICAgY29tcG9zaXRpbmdSZWFz
b25zUmVzdWx0ID0gV1RGTW92ZShjb21wb3NpdGluZ1JlYXNvbnMpOworICAgIHJldHVybiBXVEZN
b3ZlKGNvbXBvc2l0aW5nUmVhc29ucyk7CiB9CiAKIFN0cmluZyBJbnNwZWN0b3JMYXllclRyZWVB
Z2VudDo6YmluZChjb25zdCBSZW5kZXJMYXllciogbGF5ZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckxheWVyVHJlZUFnZW50LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckxheWVyVHJlZUFnZW50LmgKaW5k
ZXggODcyMzU4MGM2NTMwMTBlMWVlYTYwZDQwZTljZDlkNzMyMzU4ZDlmYi4uNWYxMTUzMWNjNjQ0
NDI5ZjQ4ZDFkNmQ4MTU1MWRkODRiOWY5NGNjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JMYXllclRyZWVBZ2VudC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQuaApAQCAtNDIs
MjQgKzQyLDIyIEBAIGNsYXNzIFBzZXVkb0VsZW1lbnQ7CiBjbGFzcyBSZW5kZXJFbGVtZW50Owog
Y2xhc3MgUmVuZGVyTGF5ZXI7CiAKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCiBjbGFz
cyBJbnNwZWN0b3JMYXllclRyZWVBZ2VudCBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3JBZ2VudEJh
c2UsIHB1YmxpYyBJbnNwZWN0b3I6OkxheWVyVHJlZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7
CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQpOwogICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIEluc3BlY3RvckxheWVyVHJl
ZUFnZW50KFdlYkFnZW50Q29udGV4dCYpOwotICAgIH5JbnNwZWN0b3JMYXllclRyZWVBZ2VudCgp
IG92ZXJyaWRlOworICAgIH5JbnNwZWN0b3JMYXllclRyZWVBZ2VudCgpOwogCiAgICAgLy8gSW5z
cGVjdG9yQWdlbnRCYXNlCi0gICAgdm9pZCBkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5z
cGVjdG9yOjpGcm9udGVuZFJvdXRlciosIEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXIqKSBv
dmVycmlkZTsKLSAgICB2b2lkIHdpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rv
cjo6RGlzY29ubmVjdFJlYXNvbikgb3ZlcnJpZGU7CisgICAgdm9pZCBkaWRDcmVhdGVGcm9udGVu
ZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9udGVuZFJvdXRlciosIEluc3BlY3Rvcjo6QmFja2Vu
ZERpc3BhdGNoZXIqKTsKKyAgICB2b2lkIHdpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKElu
c3BlY3Rvcjo6RGlzY29ubmVjdFJlYXNvbik7CiAKICAgICAvLyBMYXllclRyZWVCYWNrZW5kRGlz
cGF0Y2hlckhhbmRsZXIKLSAgICB2b2lkIGVuYWJsZShFcnJvclN0cmluZyYpIG92ZXJyaWRlOwot
ICAgIHZvaWQgZGlzYWJsZShFcnJvclN0cmluZyYpIG92ZXJyaWRlOwotICAgIHZvaWQgbGF5ZXJz
Rm9yTm9kZShFcnJvclN0cmluZyYsIGludCBub2RlSWQsIFJlZlB0cjxKU09OOjpBcnJheU9mPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkxheWVyVHJlZTo6TGF5ZXI+PiYpIG92ZXJyaWRlOwotICAgIHZv
aWQgcmVhc29uc0ZvckNvbXBvc2l0aW5nTGF5ZXIoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcm
IGxheWVySWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpMYXllclRyZWU6OkNvbXBvc2l0
aW5nUmVhc29ucz4mKSBvdmVycmlkZTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0
cmluZ09yPHZvaWQ+IGVuYWJsZSgpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3Ry
aW5nT3I8dm9pZD4gZGlzYWJsZSgpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3Ry
aW5nT3I8UmVmPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6TGF5ZXJUcmVlOjpM
YXllcj4+PiBsYXllcnNGb3JOb2RlKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkKTsK
KyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpMYXllclRyZWU6OkNvbXBvc2l0aW5nUmVhc29ucz4+IHJlYXNvbnNGb3JDb21wb3Np
dGluZ0xheWVyKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkxheWVyVHJlZTo6TGF5ZXJJZCYp
OwogCiAgICAgLy8gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uCiAgICAgdm9pZCBsYXllclRyZWVE
aWRDaGFuZ2UoKTsKQEAgLTcyLDEzICs3MCwxMyBAQCBwcml2YXRlOgogICAgIFN0cmluZyBiaW5k
KGNvbnN0IFJlbmRlckxheWVyKik7CiAgICAgdm9pZCB1bmJpbmQoY29uc3QgUmVuZGVyTGF5ZXIq
KTsKIAotICAgIHZvaWQgZ2F0aGVyTGF5ZXJzVXNpbmdSZW5kZXJPYmplY3RIaWVyYXJjaHkoRXJy
b3JTdHJpbmcmLCBSZW5kZXJFbGVtZW50JiwgUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9y
OjpQcm90b2NvbDo6TGF5ZXJUcmVlOjpMYXllcj4+Jik7Ci0gICAgdm9pZCBnYXRoZXJMYXllcnNV
c2luZ1JlbmRlckxheWVySGllcmFyY2h5KEVycm9yU3RyaW5nJiwgUmVuZGVyTGF5ZXIqLCBSZWZQ
dHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpMYXllclRyZWU6OkxheWVyPj4m
KTsKKyAgICB2b2lkIGdhdGhlckxheWVyc1VzaW5nUmVuZGVyT2JqZWN0SGllcmFyY2h5KFJlbmRl
ckVsZW1lbnQmLCBKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkxheWVyVHJlZTo6
TGF5ZXI+Jik7CisgICAgdm9pZCBnYXRoZXJMYXllcnNVc2luZ1JlbmRlckxheWVySGllcmFyY2h5
KFJlbmRlckxheWVyKiwgSlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpMYXllclRy
ZWU6OkxheWVyPiYpOwogCi0gICAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkxheWVyVHJlZTo6
TGF5ZXI+IGJ1aWxkT2JqZWN0Rm9yTGF5ZXIoRXJyb3JTdHJpbmcmLCBSZW5kZXJMYXllciopOwor
ICAgIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpMYXllclRyZWU6OkxheWVyPiBidWlsZE9iamVj
dEZvckxheWVyKFJlbmRlckxheWVyKik7CiAgICAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6Okxh
eWVyVHJlZTo6SW50UmVjdD4gYnVpbGRPYmplY3RGb3JJbnRSZWN0KGNvbnN0IEludFJlY3QmKTsK
IAotICAgIGludCBpZEZvck5vZGUoRXJyb3JTdHJpbmcmLCBOb2RlKik7CisgICAgSW5zcGVjdG9y
OjpQcm90b2NvbDo6RE9NOjpOb2RlSWQgaWRGb3JOb2RlKE5vZGUqKTsKIAogICAgIFN0cmluZyBi
aW5kUHNldWRvRWxlbWVudChQc2V1ZG9FbGVtZW50Kik7CiAgICAgdm9pZCB1bmJpbmRQc2V1ZG9F
bGVtZW50KFBzZXVkb0VsZW1lbnQqKTsKQEAgLTg2LDExICs4NCwxMSBAQCBwcml2YXRlOgogICAg
IHN0ZDo6dW5pcXVlX3B0cjxJbnNwZWN0b3I6OkxheWVyVHJlZUZyb250ZW5kRGlzcGF0Y2hlcj4g
bV9mcm9udGVuZERpc3BhdGNoZXI7CiAgICAgUmVmUHRyPEluc3BlY3Rvcjo6TGF5ZXJUcmVlQmFj
a2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7CiAKLSAgICBIYXNoTWFwPGNvbnN0
IFJlbmRlckxheWVyKiwgU3RyaW5nPiBtX2RvY3VtZW50TGF5ZXJUb0lkTWFwOwotICAgIEhhc2hN
YXA8U3RyaW5nLCBjb25zdCBSZW5kZXJMYXllcio+IG1faWRUb0xheWVyOworICAgIEhhc2hNYXA8
Y29uc3QgUmVuZGVyTGF5ZXIqLCBJbnNwZWN0b3I6OlByb3RvY29sOjpMYXllclRyZWU6OkxheWVy
SWQ+IG1fZG9jdW1lbnRMYXllclRvSWRNYXA7CisgICAgSGFzaE1hcDxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpMYXllclRyZWU6OkxheWVySWQsIGNvbnN0IFJlbmRlckxheWVyKj4gbV9pZFRvTGF5ZXI7
CiAKLSAgICBIYXNoTWFwPFBzZXVkb0VsZW1lbnQqLCBTdHJpbmc+IG1fcHNldWRvRWxlbWVudFRv
SWRNYXA7Ci0gICAgSGFzaE1hcDxTdHJpbmcsIFBzZXVkb0VsZW1lbnQqPiBtX2lkVG9Qc2V1ZG9F
bGVtZW50OworICAgIEhhc2hNYXA8UHNldWRvRWxlbWVudCosIEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkxheWVyVHJlZTo6UHNldWRvRWxlbWVudElkPiBtX3BzZXVkb0VsZW1lbnRUb0lkTWFwOworICAg
IEhhc2hNYXA8SW5zcGVjdG9yOjpQcm90b2NvbDo6TGF5ZXJUcmVlOjpQc2V1ZG9FbGVtZW50SWQs
IFBzZXVkb0VsZW1lbnQqPiBtX2lkVG9Qc2V1ZG9FbGVtZW50OwogCiAgICAgYm9vbCBtX3N1cHBy
ZXNzTGF5ZXJDaGFuZ2VFdmVudHMgeyBmYWxzZSB9OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yTWVtb3J5QWdlbnQuY3BwIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JNZW1vcnlBZ2VudC5jcHAKaW5kZXgg
ZDBlOGFhNjg4MzM2NTllNjRhZmU1NTM0N2NiNTZmNzczZWI3ZDdhNS4uMTRjZTY3MDk2YTI0MjQ0
OTRjNTkyNDY2MDg2YTFkMWUyODc3NDEwOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2FnZW50cy9JbnNwZWN0b3JNZW1vcnlBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JNZW1vcnlBZ2VudC5jcHAKQEAgLTU0LDQwICs1
NCwzOSBAQCB2b2lkIEluc3BlY3Rvck1lbW9yeUFnZW50OjpkaWRDcmVhdGVGcm9udGVuZEFuZEJh
Y2tlbmQoRnJvbnRlbmRSb3V0ZXIqLCBCYWNrZW5kRAogCiB2b2lkIEluc3BlY3Rvck1lbW9yeUFn
ZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChEaXNjb25uZWN0UmVhc29uKQogewot
ICAgIEVycm9yU3RyaW5nIGlnbm9yZWQ7Ci0gICAgZGlzYWJsZShpZ25vcmVkKTsKKyAgICBkaXNh
YmxlKCk7CiAKICAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMuc2V0UGVyc2lzdGVudE1lbW9yeUFn
ZW50KG51bGxwdHIpOwogfQogCi12b2lkIEluc3BlY3Rvck1lbW9yeUFnZW50OjplbmFibGUoRXJy
b3JTdHJpbmcmIGVycm9yU3RyaW5nKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5z
cGVjdG9yTWVtb3J5QWdlbnQ6OmVuYWJsZSgpCiB7Ci0gICAgaWYgKG1faW5zdHJ1bWVudGluZ0Fn
ZW50cy5lbmFibGVkTWVtb3J5QWdlbnQoKSA9PSB0aGlzKSB7Ci0gICAgICAgIGVycm9yU3RyaW5n
ID0gIk1lbW9yeSBkb21haW4gYWxyZWFkeSBlbmFibGVkIl9zOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQorICAgIGlmIChtX2luc3RydW1lbnRpbmdBZ2VudHMuZW5hYmxlZE1lbW9yeUFnZW50KCkg
PT0gdGhpcykKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJNZW1vcnkgZG9tYWluIGFs
cmVhZHkgZW5hYmxlZCJfcyk7CiAKICAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMuc2V0RW5hYmxl
ZE1lbW9yeUFnZW50KHRoaXMpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0
b3JNZW1vcnlBZ2VudDo6ZGlzYWJsZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCitQcm90b2Nv
bDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JNZW1vcnlBZ2VudDo6ZGlzYWJsZSgpCiB7
Ci0gICAgaWYgKG1faW5zdHJ1bWVudGluZ0FnZW50cy5lbmFibGVkTWVtb3J5QWdlbnQoKSAhPSB0
aGlzKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIk1lbW9yeSBkb21haW4gYWxyZWFkeSBkaXNh
YmxlZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAobV9pbnN0cnVtZW50aW5n
QWdlbnRzLmVuYWJsZWRNZW1vcnlBZ2VudCgpICE9IHRoaXMpCisgICAgICAgIHJldHVybiBtYWtl
VW5leHBlY3RlZCgiTWVtb3J5IGRvbWFpbiBhbHJlYWR5IGRpc2FibGVkIl9zKTsKIAogICAgIG1f
aW5zdHJ1bWVudGluZ0FnZW50cy5zZXRFbmFibGVkTWVtb3J5QWdlbnQobnVsbHB0cik7CiAKICAg
ICBtX3RyYWNraW5nID0gZmFsc2U7CiAKICAgICBSZXNvdXJjZVVzYWdlVGhyZWFkOjpyZW1vdmVP
YnNlcnZlcih0aGlzKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yTWVt
b3J5QWdlbnQ6OnN0YXJ0VHJhY2tpbmcoRXJyb3JTdHJpbmcmKQorUHJvdG9jb2w6OkVycm9yU3Ry
aW5nT3I8dm9pZD4gSW5zcGVjdG9yTWVtb3J5QWdlbnQ6OnN0YXJ0VHJhY2tpbmcoKQogewogICAg
IGlmIChtX3RyYWNraW5nKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB7IH07CiAK
ICAgICBSZXNvdXJjZVVzYWdlVGhyZWFkOjphZGRPYnNlcnZlcih0aGlzLCBNZW1vcnksIFt0aGlz
XSAoY29uc3QgUmVzb3VyY2VVc2FnZURhdGEmIGRhdGEpIHsKICAgICAgICAgY29sbGVjdFNhbXBs
ZShkYXRhKTsKQEAgLTk2LDI0ICs5NSwyOCBAQCB2b2lkIEluc3BlY3Rvck1lbW9yeUFnZW50Ojpz
dGFydFRyYWNraW5nKEVycm9yU3RyaW5nJikKICAgICBtX3RyYWNraW5nID0gdHJ1ZTsKIAogICAg
IG1fZnJvbnRlbmREaXNwYXRjaGVyLT50cmFja2luZ1N0YXJ0KG1fZW52aXJvbm1lbnQuZXhlY3V0
aW9uU3RvcHdhdGNoKCkuZWxhcHNlZFRpbWUoKS5zZWNvbmRzKCkpOworCisgICAgcmV0dXJuIHsg
fTsKIH0KIAotdm9pZCBJbnNwZWN0b3JNZW1vcnlBZ2VudDo6c3RvcFRyYWNraW5nKEVycm9yU3Ry
aW5nJikKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3Rvck1lbW9yeUFnZW50
OjpzdG9wVHJhY2tpbmcoKQogewogICAgIGlmICghbV90cmFja2luZykKLSAgICAgICAgcmV0dXJu
OworICAgICAgICByZXR1cm4geyB9OwogCiAgICAgUmVzb3VyY2VVc2FnZVRocmVhZDo6cmVtb3Zl
T2JzZXJ2ZXIodGhpcyk7CiAKICAgICBtX3RyYWNraW5nID0gZmFsc2U7CiAKICAgICBtX2Zyb250
ZW5kRGlzcGF0Y2hlci0+dHJhY2tpbmdDb21wbGV0ZShtX2Vudmlyb25tZW50LmV4ZWN1dGlvblN0
b3B3YXRjaCgpLmVsYXBzZWRUaW1lKCkuc2Vjb25kcygpKTsKKworICAgIHJldHVybiB7IH07CiB9
CiAKIHZvaWQgSW5zcGVjdG9yTWVtb3J5QWdlbnQ6OmRpZEhhbmRsZU1lbW9yeVByZXNzdXJlKENy
aXRpY2FsIGNyaXRpY2FsKQogewogICAgIE1lbW9yeUZyb250ZW5kRGlzcGF0Y2hlcjo6U2V2ZXJp
dHkgc2V2ZXJpdHkgPSBjcml0aWNhbCA9PSBDcml0aWNhbDo6WWVzID8gTWVtb3J5RnJvbnRlbmRE
aXNwYXRjaGVyOjpTZXZlcml0eTo6Q3JpdGljYWwgOiBNZW1vcnlGcm9udGVuZERpc3BhdGNoZXI6
OlNldmVyaXR5OjpOb25Dcml0aWNhbDsKLSAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+bWVtb3J5
UHJlc3N1cmUobV9lbnZpcm9ubWVudC5leGVjdXRpb25TdG9wd2F0Y2goKS5lbGFwc2VkVGltZSgp
LnNlY29uZHMoKSwgc2V2ZXJpdHkpOworICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5tZW1vcnlQ
cmVzc3VyZShtX2Vudmlyb25tZW50LmV4ZWN1dGlvblN0b3B3YXRjaCgpLmVsYXBzZWRUaW1lKCku
c2Vjb25kcygpLCBQcm90b2NvbDo6SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUoc2V2ZXJp
dHkpKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JNZW1vcnlBZ2VudDo6Y29sbGVjdFNhbXBsZShjb25z
dCBSZXNvdXJjZVVzYWdlRGF0YSYgZGF0YSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yTWVtb3J5QWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yTWVtb3J5QWdlbnQuaAppbmRleCBjNDQ3NzJkYmVhYmY5
MTE0Y2ZhNDQ3ZmU5NmU4NGUzZDJiNTI2MjhlLi4xYTc2NDA4ZWY5M2M5NjFiNWEwMGFhYzFmOTI1
YTg5MzY0MzI5NDczIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRz
L0luc3BlY3Rvck1lbW9yeUFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Fn
ZW50cy9JbnNwZWN0b3JNZW1vcnlBZ2VudC5oCkBAIC0zNSwyNCArMzUsMjIgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQogY2xhc3MgSW5z
cGVjdG9yTWVtb3J5QWdlbnQgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yQWdlbnRCYXNlLCBwdWJs
aWMgSW5zcGVjdG9yOjpNZW1vcnlCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewogICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKEluc3BlY3Rvck1lbW9yeUFnZW50KTsKICAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBJbnNwZWN0b3JNZW1vcnlBZ2VudChQYWdlQWdlbnRD
b250ZXh0Jik7Ci0gICAgfkluc3BlY3Rvck1lbW9yeUFnZW50KCkgb3ZlcnJpZGU7CisgICAgfklu
c3BlY3Rvck1lbW9yeUFnZW50KCk7CiAKICAgICAvLyBJbnNwZWN0b3JBZ2VudEJhc2UKLSAgICB2
b2lkIGRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kUm91dGVy
KiwgSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlciopIG92ZXJyaWRlOwotICAgIHZvaWQgd2ls
bERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKSBv
dmVycmlkZTsKKyAgICB2b2lkIGRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6
OkZyb250ZW5kUm91dGVyKiwgSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlciopOworICAgIHZv
aWQgd2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVh
c29uKTsKIAogICAgIC8vIE1lbW9yeUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcgotICAgIHZvaWQg
ZW5hYmxlKEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkaXNhYmxlKEVycm9yU3Ry
aW5nJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzdGFydFRyYWNraW5nKEVycm9yU3RyaW5nJikgb3Zl
cnJpZGU7Ci0gICAgdm9pZCBzdG9wVHJhY2tpbmcoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKKyAg
ICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGVuYWJsZSgpOworICAg
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZGlzYWJsZSgpOworICAg
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc3RhcnRUcmFja2luZygp
OworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc3RvcFRyYWNr
aW5nKCk7CiAKICAgICAvLyBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24KICAgICB2b2lkIGRpZEhh
bmRsZU1lbW9yeVByZXNzdXJlKENyaXRpY2FsKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yTmV0d29ya0FnZW50LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yTmV0d29ya0FnZW50LmNwcAppbmRleCAwOWYy
NzdmMTk1ZDM1NmNmNmQzMTRmYmY3MmNmY2JlYWQ2NjdlMTVjLi4wOWU2YzZkNGM5NmQ2NDQxODIz
ZGQwNTEwYmY5ZGM5MjY4NDk3MDM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvYWdlbnRzL0luc3BlY3Rvck5ldHdvcmtBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JOZXR3b3JrQWdlbnQuY3BwCkBAIC0xNzIsOSArMTcy
LDkgQEAgcHJpdmF0ZToKICAgICBpbnQgbV9zdGF0dXNDb2RlOwogfTsKIAotUmVmPEluc3BlY3Rv
cjo6UHJvdG9jb2w6Ok5ldHdvcms6OldlYlNvY2tldEZyYW1lPiBidWlsZFdlYlNvY2tldE1lc3Nh
Z2UoY29uc3QgV2ViU29ja2V0RnJhbWUmIGZyYW1lKQorUmVmPFByb3RvY29sOjpOZXR3b3JrOjpX
ZWJTb2NrZXRGcmFtZT4gYnVpbGRXZWJTb2NrZXRNZXNzYWdlKGNvbnN0IFdlYlNvY2tldEZyYW1l
JiBmcmFtZSkKIHsKLSAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6V2Vi
U29ja2V0RnJhbWU6OmNyZWF0ZSgpCisgICAgcmV0dXJuIFByb3RvY29sOjpOZXR3b3JrOjpXZWJT
b2NrZXRGcmFtZTo6Y3JlYXRlKCkKICAgICAgICAgLnNldE9wY29kZShmcmFtZS5vcENvZGUpCiAg
ICAgICAgIC5zZXRNYXNrKGZyYW1lLm1hc2tlZCkKICAgICAgICAgLnNldFBheWxvYWREYXRhKGZy
YW1lLm9wQ29kZSA9PSAxID8gU3RyaW5nOjpmcm9tVVRGOFdpdGhMYXRpbjFGYWxsYmFjayhmcmFt
ZS5wYXlsb2FkLCBmcmFtZS5wYXlsb2FkTGVuZ3RoKSA6IGJhc2U2NEVuY29kZShmcmFtZS5wYXls
b2FkLCBmcmFtZS5wYXlsb2FkTGVuZ3RoKSkKQEAgLTIwMSwyMCArMjAxLDIxIEBAIHZvaWQgSW5z
cGVjdG9yTmV0d29ya0FnZW50OjpkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9y
OjpGcm9udGVuZFJvdXRlCiAKIHZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50Ojp3aWxsRGVzdHJv
eUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24pCiB7Ci0gICAg
RXJyb3JTdHJpbmcgaWdub3JlZDsKLSAgICBkaXNhYmxlKGlnbm9yZWQpOworICAgIGRpc2FibGUo
KTsKIH0KIAotc3RhdGljIFJlZjxKU09OOjpPYmplY3Q+IGJ1aWxkT2JqZWN0Rm9ySGVhZGVycyhj
b25zdCBIVFRQSGVhZGVyTWFwJiBoZWFkZXJzKQorc3RhdGljIFJlZjxQcm90b2NvbDo6TmV0d29y
azo6SGVhZGVycz4gYnVpbGRPYmplY3RGb3JIZWFkZXJzKGNvbnN0IEhUVFBIZWFkZXJNYXAmIGhl
YWRlcnMpCiB7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4gaGVhZGVyc09iamVjdCA9IEpTT046Ok9i
amVjdDo6Y3JlYXRlKCk7CisgICAgYXV0byBoZWFkZXJzVmFsdWUgPSBQcm90b2NvbDo6TmV0d29y
azo6SGVhZGVyczo6Y3JlYXRlKCkucmVsZWFzZSgpOwogCisgICAgYXV0byBoZWFkZXJzT2JqZWN0
ID0gaGVhZGVyc1ZhbHVlLT5hc09iamVjdCgpOwogICAgIGZvciAoY29uc3QgYXV0byYgaGVhZGVy
IDogaGVhZGVycykKICAgICAgICAgaGVhZGVyc09iamVjdC0+c2V0U3RyaW5nKGhlYWRlci5rZXks
IGhlYWRlci52YWx1ZSk7Ci0gICAgcmV0dXJuIGhlYWRlcnNPYmplY3Q7CisKKyAgICByZXR1cm4g
aGVhZGVyc1ZhbHVlOwogfQogCi1SZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6UmVz
b3VyY2VUaW1pbmc+IEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6YnVpbGRPYmplY3RGb3JUaW1pbmco
Y29uc3QgTmV0d29ya0xvYWRNZXRyaWNzKiB0aW1pbmcsIFJlc291cmNlTG9hZGVyJiByZXNvdXJj
ZUxvYWRlcikKK1JlZjxQcm90b2NvbDo6TmV0d29yazo6UmVzb3VyY2VUaW1pbmc+IEluc3BlY3Rv
ck5ldHdvcmtBZ2VudDo6YnVpbGRPYmplY3RGb3JUaW1pbmcoY29uc3QgTmV0d29ya0xvYWRNZXRy
aWNzKiB0aW1pbmcsIFJlc291cmNlTG9hZGVyJiByZXNvdXJjZUxvYWRlcikKIHsKICAgICBhdXRv
JiBsb2FkVGltaW5nID0gcmVzb3VyY2VMb2FkZXIubG9hZFRpbWluZygpOwogCkBAIC0yMjcsNyAr
MjI4LDcgQEAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OlJlc291cmNlVGltaW5n
PiBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmJ1aWxkT2IKICAgICAgICAgdGltaW5nID0gJmVtcHR5
LnZhbHVlKCk7CiAgICAgfQogCi0gICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdv
cms6OlJlc291cmNlVGltaW5nOjpjcmVhdGUoKQorICAgIHJldHVybiBQcm90b2NvbDo6TmV0d29y
azo6UmVzb3VyY2VUaW1pbmc6OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRTdGFydFRpbWUoZWxhcHNl
ZFRpbWVTaW5jZShsb2FkVGltaW5nLnN0YXJ0VGltZSgpKSkKICAgICAgICAgLnNldFJlZGlyZWN0
U3RhcnQoZWxhcHNlZFRpbWVTaW5jZShsb2FkVGltaW5nLnJlZGlyZWN0U3RhcnQoKSkpCiAgICAg
ICAgIC5zZXRSZWRpcmVjdEVuZChlbGFwc2VkVGltZVNpbmNlKGxvYWRUaW1pbmcucmVkaXJlY3RF
bmQoKSkpCkBAIC0yNDMsMjYgKzI0NCwyNiBAQCBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0
d29yazo6UmVzb3VyY2VUaW1pbmc+IEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6YnVpbGRPYgogICAg
ICAgICAucmVsZWFzZSgpOwogfQogCi1zdGF0aWMgSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29y
azo6TWV0cmljczo6UHJpb3JpdHkgdG9Qcm90b2NvbChOZXR3b3JrTG9hZFByaW9yaXR5IHByaW9y
aXR5KQorc3RhdGljIFByb3RvY29sOjpOZXR3b3JrOjpNZXRyaWNzOjpQcmlvcml0eSB0b1Byb3Rv
Y29sKE5ldHdvcmtMb2FkUHJpb3JpdHkgcHJpb3JpdHkpCiB7CiAgICAgc3dpdGNoIChwcmlvcml0
eSkgewogICAgIGNhc2UgTmV0d29ya0xvYWRQcmlvcml0eTo6TG93OgotICAgICAgICByZXR1cm4g
SW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6TWV0cmljczo6UHJpb3JpdHk6OkxvdzsKKyAg
ICAgICAgcmV0dXJuIFByb3RvY29sOjpOZXR3b3JrOjpNZXRyaWNzOjpQcmlvcml0eTo6TG93Owog
ICAgIGNhc2UgTmV0d29ya0xvYWRQcmlvcml0eTo6TWVkaXVtOgotICAgICAgICByZXR1cm4gSW5z
cGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6TWV0cmljczo6UHJpb3JpdHk6Ok1lZGl1bTsKKyAg
ICAgICAgcmV0dXJuIFByb3RvY29sOjpOZXR3b3JrOjpNZXRyaWNzOjpQcmlvcml0eTo6TWVkaXVt
OwogICAgIGNhc2UgTmV0d29ya0xvYWRQcmlvcml0eTo6SGlnaDoKLSAgICAgICAgcmV0dXJuIElu
c3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6Ok1ldHJpY3M6OlByaW9yaXR5OjpIaWdoOworICAg
ICAgICByZXR1cm4gUHJvdG9jb2w6Ok5ldHdvcms6Ok1ldHJpY3M6OlByaW9yaXR5OjpIaWdoOwog
ICAgIGNhc2UgTmV0d29ya0xvYWRQcmlvcml0eTo6VW5rbm93bjoKICAgICAgICAgYnJlYWs7CiAg
ICAgfQogCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIEluc3BlY3Rvcjo6
UHJvdG9jb2w6Ok5ldHdvcms6Ok1ldHJpY3M6OlByaW9yaXR5OjpNZWRpdW07CisgICAgcmV0dXJu
IFByb3RvY29sOjpOZXR3b3JrOjpNZXRyaWNzOjpQcmlvcml0eTo6TWVkaXVtOwogfQogCi1SZWY8
SW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6TWV0cmljcz4gSW5zcGVjdG9yTmV0d29ya0Fn
ZW50OjpidWlsZE9iamVjdEZvck1ldHJpY3MoY29uc3QgTmV0d29ya0xvYWRNZXRyaWNzJiBuZXR3
b3JrTG9hZE1ldHJpY3MpCitSZWY8UHJvdG9jb2w6Ok5ldHdvcms6Ok1ldHJpY3M+IEluc3BlY3Rv
ck5ldHdvcmtBZ2VudDo6YnVpbGRPYmplY3RGb3JNZXRyaWNzKGNvbnN0IE5ldHdvcmtMb2FkTWV0
cmljcyYgbmV0d29ya0xvYWRNZXRyaWNzKQogewotICAgIGF1dG8gbWV0cmljcyA9IEluc3BlY3Rv
cjo6UHJvdG9jb2w6Ok5ldHdvcms6Ok1ldHJpY3M6OmNyZWF0ZSgpLnJlbGVhc2UoKTsKKyAgICBh
dXRvIG1ldHJpY3MgPSBQcm90b2NvbDo6TmV0d29yazo6TWV0cmljczo6Y3JlYXRlKCkucmVsZWFz
ZSgpOwogCiAgICAgaWYgKCFuZXR3b3JrTG9hZE1ldHJpY3MucHJvdG9jb2wuaXNOdWxsKCkpCiAg
ICAgICAgIG1ldHJpY3MtPnNldFByb3RvY29sKG5ldHdvcmtMb2FkTWV0cmljcy5wcm90b2NvbCk7
CkBAIC0yODYsNyArMjg3LDcgQEAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6Ok1l
dHJpY3M+IEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6YnVpbGRPYmplY3RGb3IKICAgICBpZiAobmV0
d29ya0xvYWRNZXRyaWNzLnJlc3BvbnNlQm9keURlY29kZWRTaXplICE9IHN0ZDo6bnVtZXJpY19s
aW1pdHM8dWludDY0X3Q+OjptYXgoKSkKICAgICAgICAgbWV0cmljcy0+c2V0UmVzcG9uc2VCb2R5
RGVjb2RlZFNpemUobmV0d29ya0xvYWRNZXRyaWNzLnJlc3BvbnNlQm9keURlY29kZWRTaXplKTsK
IAotICAgIGF1dG8gY29ubmVjdGlvblBheWxvYWQgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpTZWN1
cml0eTo6Q29ubmVjdGlvbjo6Y3JlYXRlKCkKKyAgICBhdXRvIGNvbm5lY3Rpb25QYXlsb2FkID0g
UHJvdG9jb2w6OlNlY3VyaXR5OjpDb25uZWN0aW9uOjpjcmVhdGUoKQogICAgICAgICAucmVsZWFz
ZSgpOwogCiAgICAgaWYgKCFuZXR3b3JrTG9hZE1ldHJpY3MudGxzUHJvdG9jb2wuaXNFbXB0eSgp
KQpAQCAtMzAwLDkgKzMwMSw5IEBAIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpN
ZXRyaWNzPiBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yCiAgICAgcmV0dXJu
IG1ldHJpY3M7CiB9CiAKLXN0YXRpYyBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6
UmVxdWVzdD4gYnVpbGRPYmplY3RGb3JSZXNvdXJjZVJlcXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1
ZXN0JiByZXF1ZXN0KQorc3RhdGljIFJlZjxQcm90b2NvbDo6TmV0d29yazo6UmVxdWVzdD4gYnVp
bGRPYmplY3RGb3JSZXNvdXJjZVJlcXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0
KQogewotICAgIGF1dG8gcmVxdWVzdE9iamVjdCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdv
cms6OlJlcXVlc3Q6OmNyZWF0ZSgpCisgICAgYXV0byByZXF1ZXN0T2JqZWN0ID0gUHJvdG9jb2w6
Ok5ldHdvcms6OlJlcXVlc3Q6OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRVcmwocmVxdWVzdC51cmwo
KS5zdHJpbmcoKSkKICAgICAgICAgLnNldE1ldGhvZChyZXF1ZXN0Lmh0dHBNZXRob2QoKSkKICAg
ICAgICAgLnNldEhlYWRlcnMoYnVpbGRPYmplY3RGb3JIZWFkZXJzKHJlcXVlc3QuaHR0cEhlYWRl
ckZpZWxkcygpKSkKQEAgLTMxNCw0NCArMzE1LDQyIEBAIHN0YXRpYyBSZWY8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6TmV0d29yazo6UmVxdWVzdD4gYnVpbGRPYmplY3RGb3JSZXNvdXJjZVJlcXVlc3Qo
CiAgICAgcmV0dXJuIHJlcXVlc3RPYmplY3Q7CiB9CiAKLXN0YXRpYyBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpOZXR3b3JrOjpSZXNwb25zZTo6U291cmNlIHJlc3BvbnNlU291cmNlKFJlc291cmNlUmVz
cG9uc2U6OlNvdXJjZSBzb3VyY2UpCitzdGF0aWMgUHJvdG9jb2w6Ok5ldHdvcms6OlJlc3BvbnNl
OjpTb3VyY2UgcmVzcG9uc2VTb3VyY2UoUmVzb3VyY2VSZXNwb25zZTo6U291cmNlIHNvdXJjZSkK
IHsKICAgICBzd2l0Y2ggKHNvdXJjZSkgewogICAgIGNhc2UgUmVzb3VyY2VSZXNwb25zZTo6U291
cmNlOjpET01DYWNoZToKICAgICBjYXNlIFJlc291cmNlUmVzcG9uc2U6OlNvdXJjZTo6QXBwbGlj
YXRpb25DYWNoZToKICAgICAgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBBcHBsaWNhdGlv
bkNhY2hlIGluIGluc3BlY3Rvci4KICAgICBjYXNlIFJlc291cmNlUmVzcG9uc2U6OlNvdXJjZTo6
VW5rbm93bjoKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OlJl
c3BvbnNlOjpTb3VyY2U6OlVua25vd247CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6TmV0d29y
azo6UmVzcG9uc2U6OlNvdXJjZTo6VW5rbm93bjsKICAgICBjYXNlIFJlc291cmNlUmVzcG9uc2U6
OlNvdXJjZTo6TmV0d29yazoKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5l
dHdvcms6OlJlc3BvbnNlOjpTb3VyY2U6Ok5ldHdvcms7CisgICAgICAgIHJldHVybiBQcm90b2Nv
bDo6TmV0d29yazo6UmVzcG9uc2U6OlNvdXJjZTo6TmV0d29yazsKICAgICBjYXNlIFJlc291cmNl
UmVzcG9uc2U6OlNvdXJjZTo6TWVtb3J5Q2FjaGU6CiAgICAgY2FzZSBSZXNvdXJjZVJlc3BvbnNl
OjpTb3VyY2U6Ok1lbW9yeUNhY2hlQWZ0ZXJWYWxpZGF0aW9uOgotICAgICAgICByZXR1cm4gSW5z
cGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6UmVzcG9uc2U6OlNvdXJjZTo6TWVtb3J5Q2FjaGU7
CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6TmV0d29yazo6UmVzcG9uc2U6OlNvdXJjZTo6TWVt
b3J5Q2FjaGU7CiAgICAgY2FzZSBSZXNvdXJjZVJlc3BvbnNlOjpTb3VyY2U6OkRpc2tDYWNoZToK
ICAgICBjYXNlIFJlc291cmNlUmVzcG9uc2U6OlNvdXJjZTo6RGlza0NhY2hlQWZ0ZXJWYWxpZGF0
aW9uOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6UmVzcG9u
c2U6OlNvdXJjZTo6RGlza0NhY2hlOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6Ok5ldHdvcms6
OlJlc3BvbnNlOjpTb3VyY2U6OkRpc2tDYWNoZTsKICAgICBjYXNlIFJlc291cmNlUmVzcG9uc2U6
OlNvdXJjZTo6U2VydmljZVdvcmtlcjoKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9j
b2w6Ok5ldHdvcms6OlJlc3BvbnNlOjpTb3VyY2U6OlNlcnZpY2VXb3JrZXI7CisgICAgICAgIHJl
dHVybiBQcm90b2NvbDo6TmV0d29yazo6UmVzcG9uc2U6OlNvdXJjZTo6U2VydmljZVdvcmtlcjsK
ICAgICBjYXNlIFJlc291cmNlUmVzcG9uc2U6OlNvdXJjZTo6SW5zcGVjdG9yT3ZlcnJpZGU6Ci0g
ICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpSZXNwb25zZTo6U291
cmNlOjpJbnNwZWN0b3JPdmVycmlkZTsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpOZXR3b3Jr
OjpSZXNwb25zZTo6U291cmNlOjpJbnNwZWN0b3JPdmVycmlkZTsKICAgICB9CiAKICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29y
azo6UmVzcG9uc2U6OlNvdXJjZTo6VW5rbm93bjsKKyAgICByZXR1cm4gUHJvdG9jb2w6Ok5ldHdv
cms6OlJlc3BvbnNlOjpTb3VyY2U6OlVua25vd247CiB9CiAKLVJlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpOZXR3b3JrOjpSZXNwb25zZT4gSW5zcGVjdG9yTmV0d29ya0FnZW50OjpidWlsZE9i
amVjdEZvclJlc291cmNlUmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2Us
IFJlc291cmNlTG9hZGVyKiByZXNvdXJjZUxvYWRlcikKK1JlZlB0cjxQcm90b2NvbDo6TmV0d29y
azo6UmVzcG9uc2U+IEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6YnVpbGRPYmplY3RGb3JSZXNvdXJj
ZVJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBSZXNvdXJjZUxvYWRl
ciogcmVzb3VyY2VMb2FkZXIpCiB7CiAgICAgaWYgKHJlc3BvbnNlLmlzTnVsbCgpKQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKIAotICAgIFJlZjxKU09OOjpPYmplY3Q+IGhlYWRlcnMgPSBidWls
ZE9iamVjdEZvckhlYWRlcnMocmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkcygpKTsKLQotICAgIGF1
dG8gcmVzcG9uc2VPYmplY3QgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpSZXNwb25z
ZTo6Y3JlYXRlKCkKKyAgICBhdXRvIHJlc3BvbnNlT2JqZWN0ID0gUHJvdG9jb2w6Ok5ldHdvcms6
OlJlc3BvbnNlOjpjcmVhdGUoKQogICAgICAgICAuc2V0VXJsKHJlc3BvbnNlLnVybCgpLnN0cmlu
ZygpKQogICAgICAgICAuc2V0U3RhdHVzKHJlc3BvbnNlLmh0dHBTdGF0dXNDb2RlKCkpCiAgICAg
ICAgIC5zZXRTdGF0dXNUZXh0KHJlc3BvbnNlLmh0dHBTdGF0dXNUZXh0KCkpCi0gICAgICAgIC5z
ZXRIZWFkZXJzKFdURk1vdmUoaGVhZGVycykpCisgICAgICAgIC5zZXRIZWFkZXJzKGJ1aWxkT2Jq
ZWN0Rm9ySGVhZGVycyhyZXNwb25zZS5odHRwSGVhZGVyRmllbGRzKCkpKQogICAgICAgICAuc2V0
TWltZVR5cGUocmVzcG9uc2UubWltZVR5cGUoKSkKICAgICAgICAgLnNldFNvdXJjZShyZXNwb25z
ZVNvdXJjZShyZXNwb25zZS5zb3VyY2UoKSkpCiAgICAgICAgIC5yZWxlYXNlKCk7CkBAIC0zNjAs
MTEgKzM1OSwxMSBAQCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6UmVzcG9u
c2U+IEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6YnVpbGRPYmplYwogICAgICAgICByZXNwb25zZU9i
amVjdC0+c2V0VGltaW5nKGJ1aWxkT2JqZWN0Rm9yVGltaW5nKHJlc3BvbnNlLmRlcHJlY2F0ZWRO
ZXR3b3JrTG9hZE1ldHJpY3NPck51bGwoKSwgKnJlc291cmNlTG9hZGVyKSk7CiAKICAgICBpZiAo
YXV0byYgY2VydGlmaWNhdGVJbmZvID0gcmVzcG9uc2UuY2VydGlmaWNhdGVJbmZvKCkpIHsKLSAg
ICAgICAgYXV0byBzZWN1cml0eVBheWxvYWQgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpTZWN1cml0
eTo6U2VjdXJpdHk6OmNyZWF0ZSgpCisgICAgICAgIGF1dG8gc2VjdXJpdHlQYXlsb2FkID0gUHJv
dG9jb2w6OlNlY3VyaXR5OjpTZWN1cml0eTo6Y3JlYXRlKCkKICAgICAgICAgICAgIC5yZWxlYXNl
KCk7CiAKICAgICAgICAgaWYgKGF1dG8gY2VydGlmaWNhdGVTdW1tYXJ5SW5mbyA9IGNlcnRpZmlj
YXRlSW5mby52YWx1ZSgpLnN1bW1hcnkoKSkgewotICAgICAgICAgICAgYXV0byBjZXJ0aWZpY2F0
ZVBheWxvYWQgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpTZWN1cml0eTo6Q2VydGlmaWNhdGU6OmNy
ZWF0ZSgpCisgICAgICAgICAgICBhdXRvIGNlcnRpZmljYXRlUGF5bG9hZCA9IFByb3RvY29sOjpT
ZWN1cml0eTo6Q2VydGlmaWNhdGU6OmNyZWF0ZSgpCiAgICAgICAgICAgICAgICAgLnJlbGVhc2Uo
KTsKIAogICAgICAgICAgICAgY2VydGlmaWNhdGVQYXlsb2FkLT5zZXRTdWJqZWN0KGNlcnRpZmlj
YXRlU3VtbWFyeUluZm8udmFsdWUoKS5zdWJqZWN0KTsKQEAgLTM5NiwxNiArMzk1LDE2IEBAIFJl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpSZXNwb25zZT4gSW5zcGVjdG9yTmV0
d29ya0FnZW50OjpidWlsZE9iamVjCiAgICAgcmV0dXJuIHJlc3BvbnNlT2JqZWN0OwogfQogCi1S
ZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6Q2FjaGVkUmVzb3VyY2U+IEluc3BlY3Rv
ck5ldHdvcmtBZ2VudDo6YnVpbGRPYmplY3RGb3JDYWNoZWRSZXNvdXJjZShDYWNoZWRSZXNvdXJj
ZSogY2FjaGVkUmVzb3VyY2UpCitSZWY8UHJvdG9jb2w6Ok5ldHdvcms6OkNhY2hlZFJlc291cmNl
PiBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yQ2FjaGVkUmVzb3VyY2UoQ2Fj
aGVkUmVzb3VyY2UqIGNhY2hlZFJlc291cmNlKQogewotICAgIGF1dG8gcmVzb3VyY2VPYmplY3Qg
PSBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpDYWNoZWRSZXNvdXJjZTo6Y3JlYXRlKCkK
KyAgICBhdXRvIHJlc291cmNlT2JqZWN0ID0gUHJvdG9jb2w6Ok5ldHdvcms6OkNhY2hlZFJlc291
cmNlOjpjcmVhdGUoKQogICAgICAgICAuc2V0VXJsKGNhY2hlZFJlc291cmNlLT51cmwoKS5zdHJp
bmcoKSkKICAgICAgICAgLnNldFR5cGUoSW5zcGVjdG9yUGFnZUFnZW50OjpjYWNoZWRSZXNvdXJj
ZVR5cGVKU09OKCpjYWNoZWRSZXNvdXJjZSkpCiAgICAgICAgIC5zZXRCb2R5U2l6ZShjYWNoZWRS
ZXNvdXJjZS0+ZW5jb2RlZFNpemUoKSkKICAgICAgICAgLnJlbGVhc2UoKTsKIAotICAgIGF1dG8g
cmVzb3VyY2VSZXNwb25zZSA9IGJ1aWxkT2JqZWN0Rm9yUmVzb3VyY2VSZXNwb25zZShjYWNoZWRS
ZXNvdXJjZS0+cmVzcG9uc2UoKSwgY2FjaGVkUmVzb3VyY2UtPmxvYWRlcigpKTsKLSAgICByZXNv
dXJjZU9iamVjdC0+c2V0UmVzcG9uc2UoV1RGTW92ZShyZXNvdXJjZVJlc3BvbnNlKSk7CisgICAg
aWYgKGF1dG8gcmVzb3VyY2VSZXNwb25zZSA9IGJ1aWxkT2JqZWN0Rm9yUmVzb3VyY2VSZXNwb25z
ZShjYWNoZWRSZXNvdXJjZS0+cmVzcG9uc2UoKSwgY2FjaGVkUmVzb3VyY2UtPmxvYWRlcigpKSkK
KyAgICAgICAgcmVzb3VyY2VPYmplY3QtPnNldFJlc3BvbnNlKHJlc291cmNlUmVzcG9uc2UucmVs
ZWFzZU5vbk51bGwoKSk7CiAKICAgICBTdHJpbmcgc291cmNlTWFwcGluZ1VSTCA9IEluc3BlY3Rv
clBhZ2VBZ2VudDo6c291cmNlTWFwVVJMRm9yUmVzb3VyY2UoY2FjaGVkUmVzb3VyY2UpOwogICAg
IGlmICghc291cmNlTWFwcGluZ1VSTC5pc0VtcHR5KCkpCkBAIC00MjksOSArNDI4LDkgQEAgdm9p
ZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OndpbGxTZW5kUmVxdWVzdCh1bnNpZ25lZCBsb25nIGlk
ZW50aWZpZXIsIERvY3VtZW50TG8KICAgICBkb3VibGUgc2VuZFRpbWVzdGFtcCA9IHRpbWVzdGFt
cCgpOwogICAgIFdhbGxUaW1lIHdhbGx0aW1lID0gV2FsbFRpbWU6Om5vdygpOwogCi0gICAgU3Ry
aW5nIHJlcXVlc3RJZCA9IElkZW50aWZpZXJzRmFjdG9yeTo6cmVxdWVzdElkKGlkZW50aWZpZXIp
OwotICAgIFN0cmluZyBmcmFtZUlkID0gZnJhbWVJZGVudGlmaWVyKGxvYWRlcik7Ci0gICAgU3Ry
aW5nIGxvYWRlcklkID0gbG9hZGVySWRlbnRpZmllcihsb2FkZXIpOworICAgIGF1dG8gcmVxdWVz
dElkID0gSWRlbnRpZmllcnNGYWN0b3J5OjpyZXF1ZXN0SWQoaWRlbnRpZmllcik7CisgICAgYXV0
byBmcmFtZUlkID0gZnJhbWVJZGVudGlmaWVyKGxvYWRlcik7CisgICAgYXV0byBsb2FkZXJJZCA9
IGxvYWRlcklkZW50aWZpZXIobG9hZGVyKTsKICAgICBTdHJpbmcgdGFyZ2V0SWQgPSByZXF1ZXN0
LmluaXRpYXRvcklkZW50aWZpZXIoKTsKIAogICAgIGlmICh0eXBlID09IEluc3BlY3RvclBhZ2VB
Z2VudDo6T3RoZXJSZXNvdXJjZSkgewpAQCAtNDYyLDcgKzQ2MSwxMCBAQCB2b2lkIEluc3BlY3Rv
ck5ldHdvcmtBZ2VudDo6d2lsbFNlbmRSZXF1ZXN0KHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwg
RG9jdW1lbnRMbwogICAgIGF1dG8gaW5pdGlhdG9yT2JqZWN0ID0gYnVpbGRJbml0aWF0b3JPYmpl
Y3QoZG9jdW1lbnQsICZyZXF1ZXN0KTsKIAogICAgIFN0cmluZyB1cmwgPSBsb2FkZXIgPyBsb2Fk
ZXItPnVybCgpLnN0cmluZygpIDogcmVxdWVzdC51cmwoKS5zdHJpbmcoKTsKLSAgICBtX2Zyb250
ZW5kRGlzcGF0Y2hlci0+cmVxdWVzdFdpbGxCZVNlbnQocmVxdWVzdElkLCBmcmFtZUlkLCBsb2Fk
ZXJJZCwgdXJsLCBidWlsZE9iamVjdEZvclJlc291cmNlUmVxdWVzdChyZXF1ZXN0KSwgc2VuZFRp
bWVzdGFtcCwgd2FsbHRpbWUuc2Vjb25kc1NpbmNlRXBvY2goKS5zZWNvbmRzKCksIGluaXRpYXRv
ck9iamVjdCwgYnVpbGRPYmplY3RGb3JSZXNvdXJjZVJlc3BvbnNlKHJlZGlyZWN0UmVzcG9uc2Us
IG51bGxwdHIpLCB0eXBlICE9IEluc3BlY3RvclBhZ2VBZ2VudDo6T3RoZXJSZXNvdXJjZSA/ICZw
cm90b2NvbFJlc291cmNlVHlwZSA6IG51bGxwdHIsIHRhcmdldElkLmlzRW1wdHkoKSA/IG51bGxw
dHIgOiAmdGFyZ2V0SWQpOworICAgIE9wdGlvbmFsPFByb3RvY29sOjpQYWdlOjpSZXNvdXJjZVR5
cGU+IHR5cGVQYXlsb2FkOworICAgIGlmICh0eXBlICE9IEluc3BlY3RvclBhZ2VBZ2VudDo6T3Ro
ZXJSZXNvdXJjZSkKKyAgICAgICAgdHlwZVBheWxvYWQgPSBwcm90b2NvbFJlc291cmNlVHlwZTsK
KyAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+cmVxdWVzdFdpbGxCZVNlbnQocmVxdWVzdElkLCBm
cmFtZUlkLCBsb2FkZXJJZCwgdXJsLCBidWlsZE9iamVjdEZvclJlc291cmNlUmVxdWVzdChyZXF1
ZXN0KSwgc2VuZFRpbWVzdGFtcCwgd2FsbHRpbWUuc2Vjb25kc1NpbmNlRXBvY2goKS5zZWNvbmRz
KCksIFdURk1vdmUoaW5pdGlhdG9yT2JqZWN0KSwgYnVpbGRPYmplY3RGb3JSZXNvdXJjZVJlc3Bv
bnNlKHJlZGlyZWN0UmVzcG9uc2UsIG51bGxwdHIpLCBXVEZNb3ZlKHR5cGVQYXlsb2FkKSwgdGFy
Z2V0SWQpOwogfQogCiBzdGF0aWMgSW5zcGVjdG9yUGFnZUFnZW50OjpSZXNvdXJjZVR5cGUgcmVz
b3VyY2VUeXBlRm9yQ2FjaGVkUmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlKQpAQCAt
NTE0LDcgKzUxNiw4IEBAIHZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50OjpkaWRSZWNlaXZlUmVz
cG9uc2UodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBEb2N1bWVuCiAgICAgICAgIH0pOwogICAg
IH0KIAotICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpSZXNwb25zZT4g
cmVzb3VyY2VSZXNwb25zZSA9IGJ1aWxkT2JqZWN0Rm9yUmVzb3VyY2VSZXNwb25zZShyZWFsUmVz
cG9uc2UgPyAqcmVhbFJlc3BvbnNlIDogcmVzcG9uc2UsIHJlc291cmNlTG9hZGVyKTsKKyAgICBS
ZWZQdHI8UHJvdG9jb2w6Ok5ldHdvcms6OlJlc3BvbnNlPiByZXNvdXJjZVJlc3BvbnNlID0gYnVp
bGRPYmplY3RGb3JSZXNvdXJjZVJlc3BvbnNlKHJlYWxSZXNwb25zZSA/ICpyZWFsUmVzcG9uc2Ug
OiByZXNwb25zZSwgcmVzb3VyY2VMb2FkZXIpOworICAgIEFTU0VSVChyZXNvdXJjZVJlc3BvbnNl
KTsKIAogICAgIGJvb2wgaXNOb3RNb2RpZmllZCA9IHJlc3BvbnNlLmh0dHBTdGF0dXNDb2RlKCkg
PT0gMzA0OwogCkBAIC01MjcsNyArNTMwLDcgQEAgdm9pZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6
OmRpZFJlY2VpdmVSZXNwb25zZSh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIERvY3VtZW4KICAg
ICBpZiAoY2FjaGVkUmVzb3VyY2UpIHsKICAgICAgICAgLy8gVXNlIG1pbWUgdHlwZSBmcm9tIGNh
Y2hlZCByZXNvdXJjZSBpbiBjYXNlIHRoZSBvbmUgaW4gcmVzcG9uc2UgaXMgZW1wdHkuCiAgICAg
ICAgIGlmIChyZXNvdXJjZVJlc3BvbnNlICYmIHJlc3BvbnNlLm1pbWVUeXBlKCkuaXNFbXB0eSgp
KQotICAgICAgICAgICAgcmVzb3VyY2VSZXNwb25zZS0+c2V0U3RyaW5nKEluc3BlY3Rvcjo6UHJv
dG9jb2w6Ok5ldHdvcms6OlJlc3BvbnNlOjpNaW1lVHlwZSwgY2FjaGVkUmVzb3VyY2UtPnJlc3Bv
bnNlKCkubWltZVR5cGUoKSk7CisgICAgICAgICAgICByZXNvdXJjZVJlc3BvbnNlLT5zZXRTdHJp
bmcoUHJvdG9jb2w6Ok5ldHdvcms6OlJlc3BvbnNlOjptaW1lVHlwZUtleSwgY2FjaGVkUmVzb3Vy
Y2UtPnJlc3BvbnNlKCkubWltZVR5cGUoKSk7CiAgICAgICAgIG1fcmVzb3VyY2VzRGF0YS0+YWRk
Q2FjaGVkUmVzb3VyY2UocmVxdWVzdElkLCBjYWNoZWRSZXNvdXJjZSk7CiAgICAgfQogCkBAIC01
NDksMjEgKzU1MiwyMSBAQCB2b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6ZGlkUmVjZWl2ZVJl
c3BvbnNlKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgRG9jdW1lbgogICAgICAgICAgICAgICAg
IG1fcmVzb3VyY2VzRGF0YS0+bWF5YmVBZGRSZXNvdXJjZURhdGEocmVxdWVzdElkLCBwcmV2aW91
c0J1ZmZlci0+ZGF0YSgpLCBwcmV2aW91c0J1ZmZlci0+c2l6ZSgpKTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIAotICAgICAgICAgICAgcmVzb3VyY2VSZXNwb25zZS0+c2V0U3RyaW5nKCJt
aW1lVHlwZSJfcywgcHJldmlvdXNSZXNvdXJjZURhdGEtPm1pbWVUeXBlKCkpOworICAgICAgICAg
ICAgcmVzb3VyY2VSZXNwb25zZS0+c2V0U3RyaW5nKFByb3RvY29sOjpOZXR3b3JrOjpSZXNwb25z
ZTo6bWltZVR5cGVLZXksIHByZXZpb3VzUmVzb3VyY2VEYXRhLT5taW1lVHlwZSgpKTsKICAgICAg
ICAgICAgIAotICAgICAgICAgICAgcmVzb3VyY2VSZXNwb25zZS0+c2V0SW50ZWdlcigic3RhdHVz
Il9zLCBwcmV2aW91c1Jlc291cmNlRGF0YS0+aHR0cFN0YXR1c0NvZGUoKSk7Ci0gICAgICAgICAg
ICByZXNvdXJjZVJlc3BvbnNlLT5zZXRTdHJpbmcoInN0YXR1c1RleHQiX3MsIHByZXZpb3VzUmVz
b3VyY2VEYXRhLT5odHRwU3RhdHVzVGV4dCgpKTsKKyAgICAgICAgICAgIHJlc291cmNlUmVzcG9u
c2UtPnNldEludGVnZXIoUHJvdG9jb2w6Ok5ldHdvcms6OlJlc3BvbnNlOjpzdGF0dXNLZXksIHBy
ZXZpb3VzUmVzb3VyY2VEYXRhLT5odHRwU3RhdHVzQ29kZSgpKTsKKyAgICAgICAgICAgIHJlc291
cmNlUmVzcG9uc2UtPnNldFN0cmluZyhQcm90b2NvbDo6TmV0d29yazo6UmVzcG9uc2U6OnN0YXR1
c1RleHRLZXksIHByZXZpb3VzUmVzb3VyY2VEYXRhLT5odHRwU3RhdHVzVGV4dCgpKTsKICAgICAg
ICAgICAgIAotICAgICAgICAgICAgcmVzb3VyY2VSZXNwb25zZS0+c2V0U3RyaW5nKCJzb3VyY2Ui
X3MsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Okluc3BlY3RvckhlbHBlcnM6OmdldEVudW1Db25zdGFu
dFZhbHVlKEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OlJlc3BvbnNlOjpTb3VyY2U6OkRp
c2tDYWNoZSkpOworICAgICAgICAgICAgcmVzb3VyY2VSZXNwb25zZS0+c2V0U3RyaW5nKFByb3Rv
Y29sOjpOZXR3b3JrOjpSZXNwb25zZTo6c291cmNlS2V5LCBQcm90b2NvbDo6SGVscGVyczo6Z2V0
RW51bUNvbnN0YW50VmFsdWUoUHJvdG9jb2w6Ok5ldHdvcms6OlJlc3BvbnNlOjpTb3VyY2U6OkRp
c2tDYWNoZSkpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgU3RyaW5nIGZyYW1lSWQgPSBmcmFt
ZUlkZW50aWZpZXIobG9hZGVyKTsKLSAgICBTdHJpbmcgbG9hZGVySWQgPSBsb2FkZXJJZGVudGlm
aWVyKGxvYWRlcik7CisgICAgUHJvdG9jb2w6Ok5ldHdvcms6OkZyYW1lSWQgZnJhbWVJZCA9IGZy
YW1lSWRlbnRpZmllcihsb2FkZXIpOworICAgIFByb3RvY29sOjpOZXR3b3JrOjpMb2FkZXJJZCBs
b2FkZXJJZCA9IGxvYWRlcklkZW50aWZpZXIobG9hZGVyKTsKIAogICAgIG1fcmVzb3VyY2VzRGF0
YS0+cmVzcG9uc2VSZWNlaXZlZChyZXF1ZXN0SWQsIGZyYW1lSWQsIHJlc3BvbnNlLCB0eXBlLCBz
aG91bGRGb3JjZUJ1ZmZlcmluZ05ldHdvcmtSZXNvdXJjZURhdGEoKSk7CiAKLSAgICBtX2Zyb250
ZW5kRGlzcGF0Y2hlci0+cmVzcG9uc2VSZWNlaXZlZChyZXF1ZXN0SWQsIGZyYW1lSWQsIGxvYWRl
cklkLCB0aW1lc3RhbXAoKSwgSW5zcGVjdG9yUGFnZUFnZW50OjpyZXNvdXJjZVR5cGVKU09OKHR5
cGUpLCByZXNvdXJjZVJlc3BvbnNlKTsKKyAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+cmVzcG9u
c2VSZWNlaXZlZChyZXF1ZXN0SWQsIGZyYW1lSWQsIGxvYWRlcklkLCB0aW1lc3RhbXAoKSwgSW5z
cGVjdG9yUGFnZUFnZW50OjpyZXNvdXJjZVR5cGVKU09OKHR5cGUpLCByZXNvdXJjZVJlc3BvbnNl
LnJlbGVhc2VOb25OdWxsKCkpOwogCiAgICAgLy8gSWYgd2UgcmV2YWxpZGF0ZWQgdGhlIHJlc291
cmNlIGFuZCBnb3QgTm90IG1vZGlmaWVkLCBzZW5kIGNvbnRlbnQgbGVuZ3RoIGZvbGxvd2luZyBk
aWRSZWNlaXZlUmVzcG9uc2UKICAgICAvLyBhcyB0aGVyZSB3aWxsIGJlIG5vIGNhbGxzIHRvIGRp
ZFJlY2VpdmVEYXRhIGZyb20gdGhlIG5ldHdvcmsgc3RhY2suCkBAIC02MjEsOSArNjI0LDkgQEAg
dm9pZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmRpZEZpbmlzaExvYWRpbmcodW5zaWduZWQgbG9u
ZyBpZGVudGlmaWVyLCBEb2N1bWVudEwKICAgICAgICAgICAgIHJlYWxNZXRyaWNzID0gcGxhdGZv
cm1TdHJhdGVnaWVzKCktPmxvYWRlclN0cmF0ZWd5KCktPm5ldHdvcmtNZXRyaWNzRnJvbVJlc291
cmNlTG9hZElkZW50aWZpZXIoaWRlbnRpZmllcikuaXNvbGF0ZWRDb3B5KCk7CiAgICAgICAgIH0p
OwogICAgIH0KLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6TWV0cmlj
cz4gbWV0cmljcyA9IGJ1aWxkT2JqZWN0Rm9yTWV0cmljcyhyZWFsTWV0cmljcyA/ICpyZWFsTWV0
cmljcyA6IG5ldHdvcmtMb2FkTWV0cmljcyk7CisgICAgUmVmUHRyPFByb3RvY29sOjpOZXR3b3Jr
OjpNZXRyaWNzPiBtZXRyaWNzID0gYnVpbGRPYmplY3RGb3JNZXRyaWNzKHJlYWxNZXRyaWNzID8g
KnJlYWxNZXRyaWNzIDogbmV0d29ya0xvYWRNZXRyaWNzKTsKIAotICAgIG1fZnJvbnRlbmREaXNw
YXRjaGVyLT5sb2FkaW5nRmluaXNoZWQocmVxdWVzdElkLCBlbGFwc2VkRmluaXNoVGltZSwgIXNv
dXJjZU1hcHBpbmdVUkwuaXNFbXB0eSgpID8gJnNvdXJjZU1hcHBpbmdVUkwgOiBudWxscHRyLCBt
ZXRyaWNzKTsKKyAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+bG9hZGluZ0ZpbmlzaGVkKHJlcXVl
c3RJZCwgZWxhcHNlZEZpbmlzaFRpbWUsIHNvdXJjZU1hcHBpbmdVUkwsIFdURk1vdmUobWV0cmlj
cykpOwogfQogCiB2b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6ZGlkRmFpbExvYWRpbmcodW5z
aWduZWQgbG9uZyBpZGVudGlmaWVyLCBEb2N1bWVudExvYWRlciogbG9hZGVyLCBjb25zdCBSZXNv
dXJjZUVycm9yJiBlcnJvcikKQEAgLTY0Miw4ICs2NDUsNyBAQCB2b2lkIEluc3BlY3Rvck5ldHdv
cmtBZ2VudDo6ZGlkRmFpbExvYWRpbmcodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBEb2N1bWVu
dExvYQogICAgICAgICB9CiAgICAgfQogCi0gICAgYm9vbCBjYW5jZWxlZCA9IGVycm9yLmlzQ2Fu
Y2VsbGF0aW9uKCk7Ci0gICAgbV9mcm9udGVuZERpc3BhdGNoZXItPmxvYWRpbmdGYWlsZWQocmVx
dWVzdElkLCB0aW1lc3RhbXAoKSwgZXJyb3IubG9jYWxpemVkRGVzY3JpcHRpb24oKSwgY2FuY2Vs
ZWQgPyAmY2FuY2VsZWQgOiBudWxscHRyKTsKKyAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+bG9h
ZGluZ0ZhaWxlZChyZXF1ZXN0SWQsIHRpbWVzdGFtcCgpLCBlcnJvci5sb2NhbGl6ZWREZXNjcmlw
dGlvbigpLCBlcnJvci5pc0NhbmNlbGxhdGlvbigpKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JOZXR3
b3JrQWdlbnQ6OmRpZExvYWRSZXNvdXJjZUZyb21NZW1vcnlDYWNoZShEb2N1bWVudExvYWRlciog
bG9hZGVyLCBDYWNoZWRSZXNvdXJjZSYgcmVzb3VyY2UpCkBAIC02NTQsOCArNjU2LDggQEAgdm9p
ZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmRpZExvYWRSZXNvdXJjZUZyb21NZW1vcnlDYWNoZShE
b2N1bWVudExvYWRlciogbG9hZGUKIAogICAgIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciA9IGxv
YWRlci0+ZnJhbWUoKS0+cGFnZSgpLT5wcm9ncmVzcygpLmNyZWF0ZVVuaXF1ZUlkZW50aWZpZXIo
KTsKICAgICBTdHJpbmcgcmVxdWVzdElkID0gSWRlbnRpZmllcnNGYWN0b3J5OjpyZXF1ZXN0SWQo
aWRlbnRpZmllcik7Ci0gICAgU3RyaW5nIGxvYWRlcklkID0gbG9hZGVySWRlbnRpZmllcihsb2Fk
ZXIpOwotICAgIFN0cmluZyBmcmFtZUlkID0gZnJhbWVJZGVudGlmaWVyKGxvYWRlcik7CisgICAg
UHJvdG9jb2w6Ok5ldHdvcms6OkxvYWRlcklkIGxvYWRlcklkID0gbG9hZGVySWRlbnRpZmllcihs
b2FkZXIpOworICAgIFByb3RvY29sOjpOZXR3b3JrOjpGcmFtZUlkIGZyYW1lSWQgPSBmcmFtZUlk
ZW50aWZpZXIobG9hZGVyKTsKIAogICAgIG1fcmVzb3VyY2VzRGF0YS0+cmVzb3VyY2VDcmVhdGVk
KHJlcXVlc3RJZCwgbG9hZGVySWQsIHJlc291cmNlKTsKIApAQCAtNjY1LDcgKzY2Nyw3IEBAIHZv
aWQgSW5zcGVjdG9yTmV0d29ya0FnZW50OjpkaWRMb2FkUmVzb3VyY2VGcm9tTWVtb3J5Q2FjaGUo
RG9jdW1lbnRMb2FkZXIqIGxvYWRlCiAgICAgLy8gaW5zdGVhZCBvZiB3aGF0ZXZlciBSZXNvdXJj
ZVJlc3BvbnNlOjpTb3VyY2UgdGhlIENhY2hlZFJlc291cmNlcydzIHJlc3BvbnNlIGhhcy4KICAg
ICAvLyBUaGUgZnJvbnRlbmQgYWxyZWFkeSBrbm93cyBmb3IgY2VydGFpbiB0aGF0IHRoaXMgd2Fz
IHNlcnZlZCBmcm9tIHRoZSBtZW1vcnkgY2FjaGUuCiAKLSAgICBtX2Zyb250ZW5kRGlzcGF0Y2hl
ci0+cmVxdWVzdFNlcnZlZEZyb21NZW1vcnlDYWNoZShyZXF1ZXN0SWQsIGZyYW1lSWQsIGxvYWRl
cklkLCBsb2FkZXItPnVybCgpLnN0cmluZygpLCB0aW1lc3RhbXAoKSwgaW5pdGlhdG9yT2JqZWN0
LCBidWlsZE9iamVjdEZvckNhY2hlZFJlc291cmNlKCZyZXNvdXJjZSkpOworICAgIG1fZnJvbnRl
bmREaXNwYXRjaGVyLT5yZXF1ZXN0U2VydmVkRnJvbU1lbW9yeUNhY2hlKHJlcXVlc3RJZCwgZnJh
bWVJZCwgbG9hZGVySWQsIGxvYWRlci0+dXJsKCkuc3RyaW5nKCksIHRpbWVzdGFtcCgpLCBXVEZN
b3ZlKGluaXRpYXRvck9iamVjdCksIGJ1aWxkT2JqZWN0Rm9yQ2FjaGVkUmVzb3VyY2UoJnJlc291
cmNlKSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50OjpzZXRJbml0aWFsU2NyaXB0
Q29udGVudCh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgc291cmNlU3Ry
aW5nKQpAQCAtNzI5LDI2ICs3MzEsMjYgQEAgdm9pZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmRp
ZFNjaGVkdWxlU3R5bGVSZWNhbGN1bGF0aW9uKERvY3VtZW50JiBkb2N1bWVudCkKICAgICAgICAg
bV9zdHlsZVJlY2FsY3VsYXRpb25Jbml0aWF0b3IgPSBidWlsZEluaXRpYXRvck9iamVjdCgmZG9j
dW1lbnQpOwogfQogCi1SZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6SW5pdGlh
dG9yPiBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmJ1aWxkSW5pdGlhdG9yT2JqZWN0KERvY3VtZW50
KiBkb2N1bWVudCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0KiByZXNvdXJjZVJlcXVlc3QpCitSZWY8
UHJvdG9jb2w6Ok5ldHdvcms6OkluaXRpYXRvcj4gSW5zcGVjdG9yTmV0d29ya0FnZW50OjpidWls
ZEluaXRpYXRvck9iamVjdChEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IFJlc291cmNlUmVxdWVz
dCogcmVzb3VyY2VSZXF1ZXN0KQogewogICAgIC8vIEZJWE1FOiBXb3JrZXIgc3VwcG9ydC4KICAg
ICBpZiAoIWlzTWFpblRocmVhZCgpKSB7Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpOZXR3b3JrOjpJbml0aWF0b3I6OmNyZWF0ZSgpCi0gICAgICAgICAgICAuc2V0VHlwZShJ
bnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpJbml0aWF0b3I6OlR5cGU6Ok90aGVyKQorICAg
ICAgICByZXR1cm4gUHJvdG9jb2w6Ok5ldHdvcms6OkluaXRpYXRvcjo6Y3JlYXRlKCkKKyAgICAg
ICAgICAgIC5zZXRUeXBlKFByb3RvY29sOjpOZXR3b3JrOjpJbml0aWF0b3I6OlR5cGU6Ok90aGVy
KQogICAgICAgICAgICAgLnJlbGVhc2UoKTsKICAgICB9CiAKLSAgICBSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6TmV0d29yazo6SW5pdGlhdG9yPiBpbml0aWF0b3JPYmplY3Q7CisgICAgUmVm
UHRyPFByb3RvY29sOjpOZXR3b3JrOjpJbml0aWF0b3I+IGluaXRpYXRvck9iamVjdDsKIAogICAg
IFJlZjxTY3JpcHRDYWxsU3RhY2s+IHN0YWNrVHJhY2UgPSBjcmVhdGVTY3JpcHRDYWxsU3RhY2so
SlNFeGVjU3RhdGU6OmN1cnJlbnRTdGF0ZSgpKTsKICAgICBpZiAoc3RhY2tUcmFjZS0+c2l6ZSgp
ID4gMCkgewotICAgICAgICBpbml0aWF0b3JPYmplY3QgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpO
ZXR3b3JrOjpJbml0aWF0b3I6OmNyZWF0ZSgpCi0gICAgICAgICAgICAuc2V0VHlwZShJbnNwZWN0
b3I6OlByb3RvY29sOjpOZXR3b3JrOjpJbml0aWF0b3I6OlR5cGU6OlNjcmlwdCkKKyAgICAgICAg
aW5pdGlhdG9yT2JqZWN0ID0gUHJvdG9jb2w6Ok5ldHdvcms6OkluaXRpYXRvcjo6Y3JlYXRlKCkK
KyAgICAgICAgICAgIC5zZXRUeXBlKFByb3RvY29sOjpOZXR3b3JrOjpJbml0aWF0b3I6OlR5cGU6
OlNjcmlwdCkKICAgICAgICAgICAgIC5yZWxlYXNlKCk7CiAgICAgICAgIGluaXRpYXRvck9iamVj
dC0+c2V0U3RhY2tUcmFjZShzdGFja1RyYWNlLT5idWlsZEluc3BlY3RvckFycmF5KCkpOwogICAg
IH0gZWxzZSBpZiAoZG9jdW1lbnQgJiYgZG9jdW1lbnQtPnNjcmlwdGFibGVEb2N1bWVudFBhcnNl
cigpKSB7Ci0gICAgICAgIGluaXRpYXRvck9iamVjdCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5l
dHdvcms6OkluaXRpYXRvcjo6Y3JlYXRlKCkKLSAgICAgICAgICAgIC5zZXRUeXBlKEluc3BlY3Rv
cjo6UHJvdG9jb2w6Ok5ldHdvcms6OkluaXRpYXRvcjo6VHlwZTo6UGFyc2VyKQorICAgICAgICBp
bml0aWF0b3JPYmplY3QgPSBQcm90b2NvbDo6TmV0d29yazo6SW5pdGlhdG9yOjpjcmVhdGUoKQor
ICAgICAgICAgICAgLnNldFR5cGUoUHJvdG9jb2w6Ok5ldHdvcms6OkluaXRpYXRvcjo6VHlwZTo6
UGFyc2VyKQogICAgICAgICAgICAgLnJlbGVhc2UoKTsKICAgICAgICAgaW5pdGlhdG9yT2JqZWN0
LT5zZXRVcmwoZG9jdW1lbnQtPnVybCgpLnN0cmluZygpKTsKICAgICAgICAgaW5pdGlhdG9yT2Jq
ZWN0LT5zZXRMaW5lTnVtYmVyKGRvY3VtZW50LT5zY3JpcHRhYmxlRG9jdW1lbnRQYXJzZXIoKS0+
dGV4dFBvc2l0aW9uKCkubV9saW5lLm9uZUJhc2VkSW50KCkpOwpAQCAtNzU4LDggKzc2MCw4IEBA
IFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpJbml0aWF0b3I+IEluc3BlY3Rv
ck5ldHdvcmtBZ2VudDo6YnVpbGRJbml0CiAgICAgaWYgKGRvbUFnZW50ICYmIHJlc291cmNlUmVx
dWVzdCkgewogICAgICAgICBpZiAoYXV0byBpbnNwZWN0b3JJbml0aWF0b3JOb2RlSWRlbnRpZmll
ciA9IHJlc291cmNlUmVxdWVzdC0+aW5zcGVjdG9ySW5pdGlhdG9yTm9kZUlkZW50aWZpZXIoKSkg
ewogICAgICAgICAgICAgaWYgKCFpbml0aWF0b3JPYmplY3QpIHsKLSAgICAgICAgICAgICAgICBp
bml0aWF0b3JPYmplY3QgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpJbml0aWF0b3I6
OmNyZWF0ZSgpCi0gICAgICAgICAgICAgICAgICAgIC5zZXRUeXBlKEluc3BlY3Rvcjo6UHJvdG9j
b2w6Ok5ldHdvcms6OkluaXRpYXRvcjo6VHlwZTo6T3RoZXIpCisgICAgICAgICAgICAgICAgaW5p
dGlhdG9yT2JqZWN0ID0gUHJvdG9jb2w6Ok5ldHdvcms6OkluaXRpYXRvcjo6Y3JlYXRlKCkKKyAg
ICAgICAgICAgICAgICAgICAgLnNldFR5cGUoUHJvdG9jb2w6Ok5ldHdvcms6OkluaXRpYXRvcjo6
VHlwZTo6T3RoZXIpCiAgICAgICAgICAgICAgICAgICAgIC5yZWxlYXNlKCk7CiAgICAgICAgICAg
ICB9CiAKQEAgLTc2OCwxMyArNzcwLDEzIEBAIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpO
ZXR3b3JrOjpJbml0aWF0b3I+IEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6YnVpbGRJbml0CiAgICAg
fQogCiAgICAgaWYgKGluaXRpYXRvck9iamVjdCkKLSAgICAgICAgcmV0dXJuIGluaXRpYXRvck9i
amVjdDsKKyAgICAgICAgcmV0dXJuIGluaXRpYXRvck9iamVjdC5yZWxlYXNlTm9uTnVsbCgpOwog
CiAgICAgaWYgKG1faXNSZWNhbGN1bGF0aW5nU3R5bGUgJiYgbV9zdHlsZVJlY2FsY3VsYXRpb25J
bml0aWF0b3IpCi0gICAgICAgIHJldHVybiBtX3N0eWxlUmVjYWxjdWxhdGlvbkluaXRpYXRvcjsK
KyAgICAgICAgcmV0dXJuICptX3N0eWxlUmVjYWxjdWxhdGlvbkluaXRpYXRvcjsKIAotICAgIHJl
dHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpJbml0aWF0b3I6OmNyZWF0ZSgpCi0g
ICAgICAgIC5zZXRUeXBlKEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OkluaXRpYXRvcjo6
VHlwZTo6T3RoZXIpCisgICAgcmV0dXJuIFByb3RvY29sOjpOZXR3b3JrOjpJbml0aWF0b3I6OmNy
ZWF0ZSgpCisgICAgICAgIC5zZXRUeXBlKFByb3RvY29sOjpOZXR3b3JrOjpJbml0aWF0b3I6OlR5
cGU6Ok90aGVyKQogICAgICAgICAucmVsZWFzZSgpOwogfQogCkBAIC03ODUsNyArNzg3LDcgQEAg
dm9pZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmRpZENyZWF0ZVdlYlNvY2tldCh1bnNpZ25lZCBs
b25nIGlkZW50aWZpZXIsIGNvbnN0IFUKIAogdm9pZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6Ondp
bGxTZW5kV2ViU29ja2V0SGFuZHNoYWtlUmVxdWVzdCh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIs
IGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKIHsKLSAgICBhdXRvIHJlcXVlc3RPYmpl
Y3QgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpXZWJTb2NrZXRSZXF1ZXN0OjpjcmVh
dGUoKQorICAgIGF1dG8gcmVxdWVzdE9iamVjdCA9IFByb3RvY29sOjpOZXR3b3JrOjpXZWJTb2Nr
ZXRSZXF1ZXN0OjpjcmVhdGUoKQogICAgICAgICAuc2V0SGVhZGVycyhidWlsZE9iamVjdEZvckhl
YWRlcnMocmVxdWVzdC5odHRwSGVhZGVyRmllbGRzKCkpKQogICAgICAgICAucmVsZWFzZSgpOwog
ICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT53ZWJTb2NrZXRXaWxsU2VuZEhhbmRzaGFrZVJlcXVl
c3QoSWRlbnRpZmllcnNGYWN0b3J5OjpyZXF1ZXN0SWQoaWRlbnRpZmllciksIHRpbWVzdGFtcCgp
LCBXYWxsVGltZTo6bm93KCkuc2Vjb25kc1NpbmNlRXBvY2goKS5zZWNvbmRzKCksIFdURk1vdmUo
cmVxdWVzdE9iamVjdCkpOwpAQCAtNzkzLDcgKzc5NSw3IEBAIHZvaWQgSW5zcGVjdG9yTmV0d29y
a0FnZW50Ojp3aWxsU2VuZFdlYlNvY2tldEhhbmRzaGFrZVJlcXVlc3QodW5zaWduZWQgbG9uZyBp
ZGVuCiAKIHZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50OjpkaWRSZWNlaXZlV2ViU29ja2V0SGFu
ZHNoYWtlUmVzcG9uc2UodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBSZXNvdXJjZVJl
c3BvbnNlJiByZXNwb25zZSkKIHsKLSAgICBhdXRvIHJlc3BvbnNlT2JqZWN0ID0gSW5zcGVjdG9y
OjpQcm90b2NvbDo6TmV0d29yazo6V2ViU29ja2V0UmVzcG9uc2U6OmNyZWF0ZSgpCisgICAgYXV0
byByZXNwb25zZU9iamVjdCA9IFByb3RvY29sOjpOZXR3b3JrOjpXZWJTb2NrZXRSZXNwb25zZTo6
Y3JlYXRlKCkKICAgICAgICAgLnNldFN0YXR1cyhyZXNwb25zZS5odHRwU3RhdHVzQ29kZSgpKQog
ICAgICAgICAuc2V0U3RhdHVzVGV4dChyZXNwb25zZS5odHRwU3RhdHVzVGV4dCgpKQogICAgICAg
ICAuc2V0SGVhZGVycyhidWlsZE9iamVjdEZvckhlYWRlcnMocmVzcG9uc2UuaHR0cEhlYWRlckZp
ZWxkcygpKSkKQEAgLTgyMCwxMiArODIyLDcgQEAgdm9pZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6
OmRpZFJlY2VpdmVXZWJTb2NrZXRGcmFtZUVycm9yKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmkKICAg
ICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+d2ViU29ja2V0RnJhbWVFcnJvcihJZGVudGlmaWVyc0Zh
Y3Rvcnk6OnJlcXVlc3RJZChpZGVudGlmaWVyKSwgdGltZXN0YW1wKCksIGVycm9yTWVzc2FnZSk7
CiB9CiAKLXZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50OjplbmFibGUoRXJyb3JTdHJpbmcmKQot
ewotICAgIGVuYWJsZSgpOwotfQotCi12b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6ZW5hYmxl
KCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6
ZW5hYmxlKCkKIHsKICAgICBtX2VuYWJsZWQgPSB0cnVlOwogICAgIG1faW5zdHJ1bWVudGluZ0Fn
ZW50cy5zZXRFbmFibGVkTmV0d29ya0FnZW50KHRoaXMpOwpAQCAtODU3LDkgKzg1NCwxMSBAQCB2
b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6ZW5hYmxlKCkKICAgICAgICAgICAgICAgICBkaWRD
bG9zZVdlYlNvY2tldChpZGVudGlmaWVyKTsKICAgICAgICAgfQogICAgIH0KKworICAgIHJldHVy
biB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50OjpkaXNhYmxlKEVycm9yU3Ry
aW5nJikKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3Rvck5ldHdvcmtBZ2Vu
dDo6ZGlzYWJsZSgpCiB7CiAgICAgbV9lbmFibGVkID0gZmFsc2U7CiAgICAgbV9pbnRlcmNlcHRp
b25FbmFibGVkID0gZmFsc2U7CkBAIC04NzIsOSArODcxLDExIEBAIHZvaWQgSW5zcGVjdG9yTmV0
d29ya0FnZW50OjpkaXNhYmxlKEVycm9yU3RyaW5nJikKICAgICBjb250aW51ZVBlbmRpbmdSZXNw
b25zZXMoKTsKIAogICAgIHNldFJlc291cmNlQ2FjaGluZ0Rpc2FibGVkKGZhbHNlKTsKKworICAg
IHJldHVybiB7IH07CiB9CiAKLWJvb2wgSW5zcGVjdG9yTmV0d29ya0FnZW50OjpzaG91bGRJbnRl
cmNlcHQoVVJMIHVybCwgTmV0d29ya1N0YWdlIG5ldHdvcmtTdGFnZSkKK2Jvb2wgSW5zcGVjdG9y
TmV0d29ya0FnZW50OjpzaG91bGRJbnRlcmNlcHQoVVJMIHVybCwgUHJvdG9jb2w6Ok5ldHdvcms6
Ok5ldHdvcmtTdGFnZSBuZXR3b3JrU3RhZ2UpCiB7CiAgICAgdXJsLnJlbW92ZUZyYWdtZW50SWRl
bnRpZmllcigpOwogCkBAIC05MTEsNTYgKzkxMiw1NSBAQCB2b2lkIEluc3BlY3Rvck5ldHdvcmtB
Z2VudDo6Y29udGludWVQZW5kaW5nUmVzcG9uc2VzKCkKICAgICBtX3BlbmRpbmdJbnRlcmNlcHRS
ZXNwb25zZXMuY2xlYXIoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OnNldEV4
dHJhSFRUUEhlYWRlcnMoRXJyb3JTdHJpbmcmLCBjb25zdCBKU09OOjpPYmplY3QmIGhlYWRlcnMp
CitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OnNl
dEV4dHJhSFRUUEhlYWRlcnMoUmVmPEpTT046Ok9iamVjdD4mJiBoZWFkZXJzKQogewotICAgIGZv
ciAoYXV0byYgZW50cnkgOiBoZWFkZXJzKSB7Ci0gICAgICAgIFN0cmluZyBzdHJpbmdWYWx1ZTsK
LSAgICAgICAgaWYgKGVudHJ5LnZhbHVlLT5hc1N0cmluZyhzdHJpbmdWYWx1ZSkpCisgICAgZm9y
IChhdXRvJiBlbnRyeSA6IGhlYWRlcnMuZ2V0KCkpIHsKKyAgICAgICAgYXV0byBzdHJpbmdWYWx1
ZSA9IGVudHJ5LnZhbHVlLT5hc1N0cmluZygpOworICAgICAgICBpZiAoISFzdHJpbmdWYWx1ZSkK
ICAgICAgICAgICAgIG1fZXh0cmFSZXF1ZXN0SGVhZGVycy5zZXQoZW50cnkua2V5LCBzdHJpbmdW
YWx1ZSk7CiAgICAgfQorCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JOZXR3
b3JrQWdlbnQ6OmdldFJlc3BvbnNlQm9keShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0
IFN0cmluZyYgcmVxdWVzdElkLCBTdHJpbmcqIGNvbnRlbnQsIGJvb2wqIGJhc2U2NEVuY29kZWQp
CitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxzdGQ6OnR1cGxlPFN0cmluZywgYm9vbCAvKiBiYXNl
NjRFbmNvZGVkICovPj4gSW5zcGVjdG9yTmV0d29ya0FnZW50OjpnZXRSZXNwb25zZUJvZHkoY29u
c3QgUHJvdG9jb2w6Ok5ldHdvcms6OlJlcXVlc3RJZCYgcmVxdWVzdElkKQogewogICAgIE5ldHdv
cmtSZXNvdXJjZXNEYXRhOjpSZXNvdXJjZURhdGEgY29uc3QqIHJlc291cmNlRGF0YSA9IG1fcmVz
b3VyY2VzRGF0YS0+ZGF0YShyZXF1ZXN0SWQpOwotICAgIGlmICghcmVzb3VyY2VEYXRhKSB7Ci0g
ICAgICAgIGVycm9yU3RyaW5nID0gIk1pc3NpbmcgcmVzb3VyY2UgZm9yIGdpdmVuIHJlcXVlc3RJ
ZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoIXJlc291cmNlRGF0YSkKKyAg
ICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJNaXNzaW5nIHJlc291cmNlIGZvciBnaXZlbiBy
ZXF1ZXN0SWQiX3MpOwogCi0gICAgaWYgKHJlc291cmNlRGF0YS0+aGFzQ29udGVudCgpKSB7Ci0g
ICAgICAgICpiYXNlNjRFbmNvZGVkID0gcmVzb3VyY2VEYXRhLT5iYXNlNjRFbmNvZGVkKCk7Ci0g
ICAgICAgICpjb250ZW50ID0gcmVzb3VyY2VEYXRhLT5jb250ZW50KCk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9CisgICAgaWYgKHJlc291cmNlRGF0YS0+aGFzQ29udGVudCgpKQorICAgICAgICBy
ZXR1cm4geyB7IHJlc291cmNlRGF0YS0+Y29udGVudCgpLCByZXNvdXJjZURhdGEtPmJhc2U2NEVu
Y29kZWQoKSB9IH07CiAKLSAgICBpZiAocmVzb3VyY2VEYXRhLT5pc0NvbnRlbnRFdmljdGVkKCkp
IHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiUmVzb3VyY2UgY29udGVudCB3YXMgZXZpY3RlZCBm
cm9tIGluc3BlY3RvciBjYWNoZSJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAo
cmVzb3VyY2VEYXRhLT5pc0NvbnRlbnRFdmljdGVkKCkpCisgICAgICAgIHJldHVybiBtYWtlVW5l
eHBlY3RlZCgiUmVzb3VyY2UgY29udGVudCB3YXMgZXZpY3RlZCBmcm9tIGluc3BlY3RvciBjYWNo
ZSJfcyk7CiAKICAgICBpZiAocmVzb3VyY2VEYXRhLT5idWZmZXIoKSAmJiAhcmVzb3VyY2VEYXRh
LT50ZXh0RW5jb2RpbmdOYW1lKCkuaXNOdWxsKCkpIHsKLSAgICAgICAgKmJhc2U2NEVuY29kZWQg
PSBmYWxzZTsKLSAgICAgICAgaWYgKEluc3BlY3RvclBhZ2VBZ2VudDo6c2hhcmVkQnVmZmVyQ29u
dGVudChyZXNvdXJjZURhdGEtPmJ1ZmZlcigpLCByZXNvdXJjZURhdGEtPnRleHRFbmNvZGluZ05h
bWUoKSwgKmJhc2U2NEVuY29kZWQsIGNvbnRlbnQpKQotICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICBTdHJpbmcgYm9keTsKKyAgICAgICAgaWYgKEluc3BlY3RvclBhZ2VBZ2VudDo6c2hhcmVk
QnVmZmVyQ29udGVudChyZXNvdXJjZURhdGEtPmJ1ZmZlcigpLCByZXNvdXJjZURhdGEtPnRleHRF
bmNvZGluZ05hbWUoKSwgZmFsc2UsICZib2R5KSkKKyAgICAgICAgICAgIHJldHVybiB7IHsgYm9k
eSwgZmFsc2UgfSB9OwogICAgIH0KIAogICAgIGlmIChyZXNvdXJjZURhdGEtPmNhY2hlZFJlc291
cmNlKCkpIHsKLSAgICAgICAgaWYgKEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6Y2FjaGVkUmVzb3Vy
Y2VDb250ZW50KCpyZXNvdXJjZURhdGEtPmNhY2hlZFJlc291cmNlKCksIGNvbnRlbnQsIGJhc2U2
NEVuY29kZWQpKQotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBTdHJpbmcgYm9keTsKKyAg
ICAgICAgYm9vbCBiYXNlNjRFbmNvZGVkOworICAgICAgICBpZiAoSW5zcGVjdG9yTmV0d29ya0Fn
ZW50OjpjYWNoZWRSZXNvdXJjZUNvbnRlbnQoKnJlc291cmNlRGF0YS0+Y2FjaGVkUmVzb3VyY2Uo
KSwgJmJvZHksICZiYXNlNjRFbmNvZGVkKSkKKyAgICAgICAgICAgIHJldHVybiB7IHsgYm9keSwg
YmFzZTY0RW5jb2RlZCB9IH07CiAgICAgfQogCi0gICAgZXJyb3JTdHJpbmcgPSAiTWlzc2luZyBj
b250ZW50IG9mIHJlc291cmNlIGZvciBnaXZlbiByZXF1ZXN0SWQiX3M7CisgICAgcmV0dXJuIG1h
a2VVbmV4cGVjdGVkKCJNaXNzaW5nIGNvbnRlbnQgb2YgcmVzb3VyY2UgZm9yIGdpdmVuIHJlcXVl
c3RJZCJfcyk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50OjpzZXRSZXNvdXJjZUNh
Y2hpbmdEaXNhYmxlZChFcnJvclN0cmluZyYsIGJvb2wgZGlzYWJsZWQpCitQcm90b2NvbDo6RXJy
b3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OnNldFJlc291cmNlQ2FjaGlu
Z0Rpc2FibGVkKGJvb2wgZGlzYWJsZWQpCiB7Ci0gICAgc2V0UmVzb3VyY2VDYWNoaW5nRGlzYWJs
ZWQoZGlzYWJsZWQpOworICAgIHNldFJlc291cmNlQ2FjaGluZ0Rpc2FibGVkSW50ZXJhbChkaXNh
YmxlZCk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2Vu
dDo6bG9hZFJlc291cmNlKGNvbnN0IFN0cmluZyYgZnJhbWVJZCwgY29uc3QgU3RyaW5nJiB1cmxT
dHJpbmcsIFJlZjxMb2FkUmVzb3VyY2VDYWxsYmFjaz4mJiBjYWxsYmFjaykKK3ZvaWQgSW5zcGVj
dG9yTmV0d29ya0FnZW50Ojpsb2FkUmVzb3VyY2UoY29uc3QgUHJvdG9jb2w6Ok5ldHdvcms6OkZy
YW1lSWQmIGZyYW1lSWQsIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nLCBSZWY8TG9hZFJlc291cmNl
Q2FsbGJhY2s+JiYgY2FsbGJhY2spCiB7Ci0gICAgRXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7Cisg
ICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOwogICAgIGF1dG8qIGNvbnRleHQg
PSBzY3JpcHRFeGVjdXRpb25Db250ZXh0KGVycm9yU3RyaW5nLCBmcmFtZUlkKTsKICAgICBpZiAo
IWNvbnRleHQpIHsKICAgICAgICAgY2FsbGJhY2stPnNlbmRGYWlsdXJlKGVycm9yU3RyaW5nKTsK
QEAgLTk5NCwyNiArOTk0LDIyIEBAIHZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50Ojpsb2FkUmVz
b3VyY2UoY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBjb25zdCBTdHJpbmcmIHVyCiAgICAgaW5zcGVj
dG9yVGhyZWFkYWJsZUxvYWRlckNsaWVudC0+c2V0TG9hZGVyKFdURk1vdmUobG9hZGVyKSk7CiB9
CiAKLXZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50OjpnZXRTZXJpYWxpemVkQ2VydGlmaWNhdGUo
RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgU3RyaW5n
KiBzZXJpYWxpemVkQ2VydGlmaWNhdGUpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxTdHJpbmc+
IEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6Z2V0U2VyaWFsaXplZENlcnRpZmljYXRlKGNvbnN0IFBy
b3RvY29sOjpOZXR3b3JrOjpSZXF1ZXN0SWQmIHJlcXVlc3RJZCkKIHsKICAgICBhdXRvKiByZXNv
dXJjZURhdGEgPSBtX3Jlc291cmNlc0RhdGEtPmRhdGEocmVxdWVzdElkKTsKLSAgICBpZiAoIXJl
c291cmNlRGF0YSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIHJlc291cmNlIGZv
ciBnaXZlbiByZXF1ZXN0SWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKCFy
ZXNvdXJjZURhdGEpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTWlzc2luZyByZXNv
dXJjZSBmb3IgZ2l2ZW4gcmVxdWVzdElkIl9zKTsKIAogICAgIGF1dG8mIGNlcnRpZmljYXRlID0g
cmVzb3VyY2VEYXRhLT5jZXJ0aWZpY2F0ZUluZm8oKTsKLSAgICBpZiAoIWNlcnRpZmljYXRlIHx8
IGNlcnRpZmljYXRlLnZhbHVlKCkuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0g
Ik1pc3NpbmcgY2VydGlmaWNhdGUgb2YgcmVzb3VyY2UgZm9yIGdpdmVuIHJlcXVlc3RJZCJfczsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoIWNlcnRpZmljYXRlIHx8IGNlcnRpZmlj
YXRlLnZhbHVlKCkuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk1p
c3NpbmcgY2VydGlmaWNhdGUgb2YgcmVzb3VyY2UgZm9yIGdpdmVuIHJlcXVlc3RJZCJfcyk7CiAK
ICAgICBXVEY6OlBlcnNpc3RlbmNlOjpFbmNvZGVyIGVuY29kZXI7CiAgICAgV1RGOjpQZXJzaXN0
ZW5jZTo6Q29kZXI8V2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvPjo6ZW5jb2RlKGVuY29kZXIsIGNl
cnRpZmljYXRlLnZhbHVlKCkpOwotICAgICpzZXJpYWxpemVkQ2VydGlmaWNhdGUgPSBiYXNlNjRF
bmNvZGUoZW5jb2Rlci5idWZmZXIoKSwgZW5jb2Rlci5idWZmZXJTaXplKCkpOworICAgIHJldHVy
biBiYXNlNjRFbmNvZGUoZW5jb2Rlci5idWZmZXIoKSwgZW5jb2Rlci5idWZmZXJTaXplKCkpOwog
fQogCi1XZWJTb2NrZXQqIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6d2ViU29ja2V0Rm9yUmVxdWVz
dElkKGNvbnN0IFN0cmluZyYgcmVxdWVzdElkKQorV2ViU29ja2V0KiBJbnNwZWN0b3JOZXR3b3Jr
QWdlbnQ6OndlYlNvY2tldEZvclJlcXVlc3RJZChjb25zdCBQcm90b2NvbDo6TmV0d29yazo6UmVx
dWVzdElkJiByZXF1ZXN0SWQpCiB7CiAgICAgTG9ja0hvbGRlciBsb2NrKFdlYlNvY2tldDo6YWxs
QWN0aXZlV2ViU29ja2V0c011dGV4KCkpOwogCkBAIC0xMDMxLDM5ICsxMDI3LDM2IEBAIHN0YXRp
YyBKU0M6OkpTVmFsdWUgd2ViU29ja2V0QXNTY3JpcHRWYWx1ZShKU0M6OkpTR2xvYmFsT2JqZWN0
JiBzdGF0ZSwgV2ViU29ja2V0CiAgICAgcmV0dXJuIHRvSlMoJnN0YXRlLCBkZXByZWNhdGVkR2xv
YmFsT2JqZWN0Rm9yUHJvdG90eXBlKCZzdGF0ZSksIHdlYlNvY2tldCk7CiB9CiAKLXZvaWQgSW5z
cGVjdG9yTmV0d29ya0FnZW50OjpyZXNvbHZlV2ViU29ja2V0KEVycm9yU3RyaW5nJiBlcnJvclN0
cmluZywgY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyogb2JqZWN0R3JvdXAs
IFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiByZXN1
bHQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90
ZU9iamVjdD4+IEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6cmVzb2x2ZVdlYlNvY2tldChjb25zdCBQ
cm90b2NvbDo6TmV0d29yazo6UmVxdWVzdElkJiByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgb2Jq
ZWN0R3JvdXApCiB7CiAgICAgV2ViU29ja2V0KiB3ZWJTb2NrZXQgPSB3ZWJTb2NrZXRGb3JSZXF1
ZXN0SWQocmVxdWVzdElkKTsKLSAgICBpZiAoIXdlYlNvY2tldCkgewotICAgICAgICBlcnJvclN0
cmluZyA9ICJNaXNzaW5nIHdlYiBzb2NrZXQgZm9yIGdpdmVuIHJlcXVlc3RJZCJfczsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoIXdlYlNvY2tldCkKKyAgICAgICAgcmV0dXJuIG1h
a2VVbmV4cGVjdGVkKCJNaXNzaW5nIHdlYiBzb2NrZXQgZm9yIGdpdmVuIHJlcXVlc3RJZCJfcyk7
CiAKICAgICAvLyBGSVhNRTogPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzE2ODQ3NT4gV2ViIEluc3Bl
Y3RvcjogQ29ycmVjdGx5IGRpc3BsYXkgaWZyYW1lJ3MgYW5kIHdvcmtlcidzIFdlYlNvY2tldHMK
ICAgICBpZiAoIWlzPERvY3VtZW50Pih3ZWJTb2NrZXQtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KSkpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJOb3Qg
c3VwcG9ydGVkIik7CiAKICAgICBhdXRvKiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50Pih3
ZWJTb2NrZXQtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7CiAgICAgYXV0byogZnJhbWUgPSBk
b2N1bWVudC0+ZnJhbWUoKTsKLSAgICBpZiAoIWZyYW1lKSB7Ci0gICAgICAgIGVycm9yU3RyaW5n
ID0gIk1pc3NpbmcgZnJhbWUgb2Ygd2ViIHNvY2tldCBmb3IgZ2l2ZW4gcmVxdWVzdElkIl9zOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybiBt
YWtlVW5leHBlY3RlZCgiTWlzc2luZyBmcmFtZSBvZiB3ZWIgc29ja2V0IGZvciBnaXZlbiByZXF1
ZXN0SWQiX3MpOwogCiAgICAgYXV0byYgc3RhdGUgPSAqbWFpbldvcmxkRXhlY1N0YXRlKGZyYW1l
KTsKICAgICBhdXRvIGluamVjdGVkU2NyaXB0ID0gbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIuaW5q
ZWN0ZWRTY3JpcHRGb3IoJnN0YXRlKTsKICAgICBBU1NFUlQoIWluamVjdGVkU2NyaXB0Lmhhc05v
VmFsdWUoKSk7CiAKLSAgICBTdHJpbmcgb2JqZWN0R3JvdXBOYW1lID0gb2JqZWN0R3JvdXAgPyAq
b2JqZWN0R3JvdXAgOiBTdHJpbmcoKTsKLSAgICByZXN1bHQgPSBpbmplY3RlZFNjcmlwdC53cmFw
T2JqZWN0KHdlYlNvY2tldEFzU2NyaXB0VmFsdWUoc3RhdGUsIHdlYlNvY2tldCksIG9iamVjdEdy
b3VwTmFtZSk7CisgICAgYXV0byBvYmplY3QgPSBpbmplY3RlZFNjcmlwdC53cmFwT2JqZWN0KHdl
YlNvY2tldEFzU2NyaXB0VmFsdWUoc3RhdGUsIHdlYlNvY2tldCksIG9iamVjdEdyb3VwKTsKKyAg
ICBpZiAoIW9iamVjdCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJJbnRlcm5hbCBl
cnJvcjogdW5hYmxlIHRvIGNhc3QgV2ViU29ja2V0Iik7CisKKyAgICByZXR1cm4gb2JqZWN0LnJl
bGVhc2VOb25OdWxsKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50OjpzZXRJbnRl
cmNlcHRpb25FbmFibGVkKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgYm9vbCBlbmFibGVkKQor
UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yTmV0d29ya0FnZW50OjpzZXRJ
bnRlcmNlcHRpb25FbmFibGVkKGJvb2wgZW5hYmxlZCkKIHsKLSAgICBpZiAobV9pbnRlcmNlcHRp
b25FbmFibGVkID09IGVuYWJsZWQpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSBtX2ludGVyY2Vw
dGlvbkVuYWJsZWQgPyAiSW50ZXJjZXB0aW9uIGFscmVhZHkgZW5hYmxlZCJfcyA6ICJJbnRlcmNl
cHRpb24gYWxyZWFkeSBkaXNhYmxlZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBp
ZiAobV9pbnRlcmNlcHRpb25FbmFibGVkID09IGVuYWJsZWQpCisgICAgICAgIHJldHVybiBtYWtl
VW5leHBlY3RlZChtX2ludGVyY2VwdGlvbkVuYWJsZWQgPyAiSW50ZXJjZXB0aW9uIGFscmVhZHkg
ZW5hYmxlZCJfcyA6ICJJbnRlcmNlcHRpb24gYWxyZWFkeSBkaXNhYmxlZCJfcyk7CiAKICAgICBt
X2ludGVyY2VwdGlvbkVuYWJsZWQgPSBlbmFibGVkOwogCkBAIC0xMDcxLDQ2ICsxMDY0LDQwIEBA
IHZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50OjpzZXRJbnRlcmNlcHRpb25FbmFibGVkKEVycm9y
U3RyaW5nJiBlcnJvclN0cmluZywgYm9vCiAgICAgICAgIGNvbnRpbnVlUGVuZGluZ1JlcXVlc3Rz
KCk7CiAgICAgICAgIGNvbnRpbnVlUGVuZGluZ1Jlc3BvbnNlcygpOwogICAgIH0KKworICAgIHJl
dHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50OjphZGRJbnRlcmNlcHRp
b24oRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3Ry
aW5nJiBuZXR3b3JrU3RhZ2VTdHJpbmcsIGNvbnN0IGJvb2wqIG9wdGlvbmFsQ2FzZVNlbnNpdGl2
ZSwgY29uc3QgYm9vbCogb3B0aW9uYWxJc1JlZ2V4KQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8
dm9pZD4gSW5zcGVjdG9yTmV0d29ya0FnZW50OjphZGRJbnRlcmNlcHRpb24oY29uc3QgU3RyaW5n
JiB1cmwsIFByb3RvY29sOjpOZXR3b3JrOjpOZXR3b3JrU3RhZ2UgbmV0d29ya1N0YWdlLCBPcHRp
b25hbDxib29sPiYmIGNhc2VTZW5zaXRpdmUsIE9wdGlvbmFsPGJvb2w+JiYgaXNSZWdleCkKIHsK
LSAgICBhdXRvIG5ldHdvcmtTdGFnZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6Okluc3BlY3Rvckhl
bHBlcnM6OnBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3
b3JrOjpOZXR3b3JrU3RhZ2U+KG5ldHdvcmtTdGFnZVN0cmluZyk7Ci0gICAgaWYgKCFuZXR3b3Jr
U3RhZ2UpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSBtYWtlU3RyaW5nKCJVbmtub3duIG5ldHdv
cmtTdGFnZTogIl9zLCBuZXR3b3JrU3RhZ2VTdHJpbmcpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCiAgICAgSW50ZXJjZXB0IGludGVyY2VwdDsKICAgICBpbnRlcmNlcHQudXJsID0gdXJsOwot
ICAgIGlmIChvcHRpb25hbENhc2VTZW5zaXRpdmUpCi0gICAgICAgIGludGVyY2VwdC5jYXNlU2Vu
c2l0aXZlID0gKm9wdGlvbmFsQ2FzZVNlbnNpdGl2ZTsKLSAgICBpZiAob3B0aW9uYWxJc1JlZ2V4
KQotICAgICAgICBpbnRlcmNlcHQuaXNSZWdleCA9ICpvcHRpb25hbElzUmVnZXg7Ci0gICAgaW50
ZXJjZXB0Lm5ldHdvcmtTdGFnZSA9IG5ldHdvcmtTdGFnZS52YWx1ZSgpOworICAgIGlmIChjYXNl
U2Vuc2l0aXZlKQorICAgICAgICBpbnRlcmNlcHQuY2FzZVNlbnNpdGl2ZSA9ICpjYXNlU2Vuc2l0
aXZlOworICAgIGlmIChpc1JlZ2V4KQorICAgICAgICBpbnRlcmNlcHQuaXNSZWdleCA9ICppc1Jl
Z2V4OworICAgIGludGVyY2VwdC5uZXR3b3JrU3RhZ2UgPSBuZXR3b3JrU3RhZ2U7CiAKICAgICBp
ZiAoIW1faW50ZXJjZXB0cy5hcHBlbmRJZk5vdENvbnRhaW5zKGludGVyY2VwdCkpCi0gICAgICAg
IGVycm9yU3RyaW5nID0gIkludGVyY2VwdCBmb3IgZ2l2ZW4gdXJsLCBnaXZlbiBpc1JlZ2V4LCBh
bmQgZ2l2ZW4gc3RhZ2UgYWxyZWFkeSBleGlzdHMiX3M7CisgICAgICAgIHJldHVybiBtYWtlVW5l
eHBlY3RlZCgiSW50ZXJjZXB0IGZvciBnaXZlbiB1cmwsIGdpdmVuIGlzUmVnZXgsIGFuZCBnaXZl
biBzdGFnZSBhbHJlYWR5IGV4aXN0cyJfcyk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lk
IEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6cmVtb3ZlSW50ZXJjZXB0aW9uKEVycm9yU3RyaW5nJiBl
cnJvclN0cmluZywgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgbmV0d29ya1N0YWdl
U3RyaW5nLCBjb25zdCBib29sKiBvcHRpb25hbENhc2VTZW5zaXRpdmUsIGNvbnN0IGJvb2wqIG9w
dGlvbmFsSXNSZWdleCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3Rvck5l
dHdvcmtBZ2VudDo6cmVtb3ZlSW50ZXJjZXB0aW9uKGNvbnN0IFN0cmluZyYgdXJsLCBQcm90b2Nv
bDo6TmV0d29yazo6TmV0d29ya1N0YWdlIG5ldHdvcmtTdGFnZSwgT3B0aW9uYWw8Ym9vbD4mJiBj
YXNlU2Vuc2l0aXZlLCBPcHRpb25hbDxib29sPiYmIGlzUmVnZXgpCiB7Ci0gICAgYXV0byBuZXR3
b3JrU3RhZ2UgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpJbnNwZWN0b3JIZWxwZXJzOjpwYXJzZUVu
dW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6TmV0d29ya1N0
YWdlPihuZXR3b3JrU3RhZ2VTdHJpbmcpOwotICAgIGlmICghbmV0d29ya1N0YWdlKSB7Ci0gICAg
ICAgIGVycm9yU3RyaW5nID0gbWFrZVN0cmluZygiVW5rbm93biBuZXR3b3JrU3RhZ2U6ICJfcywg
bmV0d29ya1N0YWdlU3RyaW5nKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIEludGVy
Y2VwdCBpbnRlcmNlcHQ7CiAgICAgaW50ZXJjZXB0LnVybCA9IHVybDsKLSAgICBpZiAob3B0aW9u
YWxDYXNlU2Vuc2l0aXZlKQotICAgICAgICBpbnRlcmNlcHQuY2FzZVNlbnNpdGl2ZSA9ICpvcHRp
b25hbENhc2VTZW5zaXRpdmU7Ci0gICAgaWYgKG9wdGlvbmFsSXNSZWdleCkKLSAgICAgICAgaW50
ZXJjZXB0LmlzUmVnZXggPSAqb3B0aW9uYWxJc1JlZ2V4OwotICAgIGludGVyY2VwdC5uZXR3b3Jr
U3RhZ2UgPSBuZXR3b3JrU3RhZ2UudmFsdWUoKTsKKyAgICBpZiAoY2FzZVNlbnNpdGl2ZSkKKyAg
ICAgICAgaW50ZXJjZXB0LmNhc2VTZW5zaXRpdmUgPSAqY2FzZVNlbnNpdGl2ZTsKKyAgICBpZiAo
aXNSZWdleCkKKyAgICAgICAgaW50ZXJjZXB0LmlzUmVnZXggPSAqaXNSZWdleDsKKyAgICBpbnRl
cmNlcHQubmV0d29ya1N0YWdlID0gbmV0d29ya1N0YWdlOwogCiAgICAgaWYgKCFtX2ludGVyY2Vw
dHMucmVtb3ZlQWxsKGludGVyY2VwdCkpCi0gICAgICAgIGVycm9yU3RyaW5nID0gIk1pc3Npbmcg
aW50ZXJjZXB0IGZvciBnaXZlbiB1cmwsIGdpdmVuIGlzUmVnZXgsIGFuZCBnaXZlbiBzdGFnZSJf
czsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJNaXNzaW5nIGludGVyY2VwdCBmb3Ig
Z2l2ZW4gdXJsLCBnaXZlbiBpc1JlZ2V4LCBhbmQgZ2l2ZW4gc3RhZ2UiX3MpOworCisgICAgcmV0
dXJuIHsgfTsKIH0KIAogYm9vbCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OndpbGxJbnRlcmNlcHQo
Y29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQpAQCAtMTExOCw4ICsxMTA1LDggQEAgYm9v
bCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OndpbGxJbnRlcmNlcHQoY29uc3QgUmVzb3VyY2VSZXF1
ZXN0JiByZXF1ZXN0KQogICAgIGlmICghbV9pbnRlcmNlcHRpb25FbmFibGVkKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gc2hvdWxkSW50ZXJjZXB0KHJlcXVlc3QudXJsKCks
IE5ldHdvcmtTdGFnZTo6UmVxdWVzdCkKLSAgICAgICAgfHwgc2hvdWxkSW50ZXJjZXB0KHJlcXVl
c3QudXJsKCksIE5ldHdvcmtTdGFnZTo6UmVzcG9uc2UpOworICAgIHJldHVybiBzaG91bGRJbnRl
cmNlcHQocmVxdWVzdC51cmwoKSwgUHJvdG9jb2w6Ok5ldHdvcms6Ok5ldHdvcmtTdGFnZTo6UmVx
dWVzdCkKKyAgICAgICAgfHwgc2hvdWxkSW50ZXJjZXB0KHJlcXVlc3QudXJsKCksIFByb3RvY29s
OjpOZXR3b3JrOjpOZXR3b3JrU3RhZ2U6OlJlc3BvbnNlKTsKIH0KIAogYm9vbCBJbnNwZWN0b3JO
ZXR3b3JrQWdlbnQ6OnNob3VsZEludGVyY2VwdFJlcXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1ZXN0
JiByZXF1ZXN0KQpAQCAtMTEyNyw3ICsxMTE0LDcgQEAgYm9vbCBJbnNwZWN0b3JOZXR3b3JrQWdl
bnQ6OnNob3VsZEludGVyY2VwdFJlcXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXMK
ICAgICBpZiAoIW1faW50ZXJjZXB0aW9uRW5hYmxlZCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgcmV0dXJuIHNob3VsZEludGVyY2VwdChyZXF1ZXN0LnVybCgpLCBOZXR3b3JrU3RhZ2U6
OlJlcXVlc3QpOworICAgIHJldHVybiBzaG91bGRJbnRlcmNlcHQocmVxdWVzdC51cmwoKSwgUHJv
dG9jb2w6Ok5ldHdvcms6Ok5ldHdvcmtTdGFnZTo6UmVxdWVzdCk7CiB9CiAKIGJvb2wgSW5zcGVj
dG9yTmV0d29ya0FnZW50OjpzaG91bGRJbnRlcmNlcHRSZXNwb25zZShjb25zdCBSZXNvdXJjZVJl
c3BvbnNlJiByZXNwb25zZSkKQEAgLTExMzUsNyArMTEyMiw3IEBAIGJvb2wgSW5zcGVjdG9yTmV0
d29ya0FnZW50OjpzaG91bGRJbnRlcmNlcHRSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNl
JiByZXNwCiAgICAgaWYgKCFtX2ludGVyY2VwdGlvbkVuYWJsZWQpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgIHJldHVybiBzaG91bGRJbnRlcmNlcHQocmVzcG9uc2UudXJsKCksIE5ldHdv
cmtTdGFnZTo6UmVzcG9uc2UpOworICAgIHJldHVybiBzaG91bGRJbnRlcmNlcHQocmVzcG9uc2Uu
dXJsKCksIFByb3RvY29sOjpOZXR3b3JrOjpOZXR3b3JrU3RhZ2U6OlJlc3BvbnNlKTsKIH0KIAog
dm9pZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmludGVyY2VwdFJlcXVlc3QoUmVzb3VyY2VMb2Fk
ZXImIGxvYWRlciwgRnVuY3Rpb248dm9pZChjb25zdCBSZXNvdXJjZVJlcXVlc3QmKT4mJiBoYW5k
bGVyKQpAQCAtMTE2Niw5MiArMTE1Myw4OSBAQCB2b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6
aW50ZXJjZXB0UmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsCiAKICAg
ICBtX3BlbmRpbmdJbnRlcmNlcHRSZXNwb25zZXMuc2V0KHJlcXVlc3RJZCwgbWFrZVVuaXF1ZTxQ
ZW5kaW5nSW50ZXJjZXB0UmVzcG9uc2U+KHJlc3BvbnNlLCBXVEZNb3ZlKGhhbmRsZXIpKSk7CiAK
LSAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+cmVzcG9uc2VJbnRlcmNlcHRlZChyZXF1ZXN0SWQs
IGJ1aWxkT2JqZWN0Rm9yUmVzb3VyY2VSZXNwb25zZShyZXNwb25zZSwgbnVsbHB0cikpOworICAg
IGF1dG8gcmVzb3VyY2VSZXNwb25zZSA9IGJ1aWxkT2JqZWN0Rm9yUmVzb3VyY2VSZXNwb25zZShy
ZXNwb25zZSwgbnVsbHB0cik7CisgICAgaWYgKCFyZXNvdXJjZVJlc3BvbnNlKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+cmVzcG9uc2VJbnRlcmNlcHRlZChy
ZXF1ZXN0SWQsIHJlc291cmNlUmVzcG9uc2UucmVsZWFzZU5vbk51bGwoKSk7CiB9CiAKLXZvaWQg
SW5zcGVjdG9yTmV0d29ya0FnZW50OjppbnRlcmNlcHRDb250aW51ZShFcnJvclN0cmluZyYgZXJy
b3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG5ldHdvcmtT
dGFnZVN0cmluZykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3Rvck5ldHdv
cmtBZ2VudDo6aW50ZXJjZXB0Q29udGludWUoY29uc3QgUHJvdG9jb2w6Ok5ldHdvcms6OlJlcXVl
c3RJZCYgcmVxdWVzdElkLCBQcm90b2NvbDo6TmV0d29yazo6TmV0d29ya1N0YWdlIG5ldHdvcmtT
dGFnZSkKIHsKLSAgICBhdXRvIG5ldHdvcmtTdGFnZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6Oklu
c3BlY3RvckhlbHBlcnM6OnBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpOZXR3b3JrOjpOZXR3b3JrU3RhZ2U+KG5ldHdvcmtTdGFnZVN0cmluZyk7Ci0gICAgaWYg
KCFuZXR3b3JrU3RhZ2UpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSBtYWtlU3RyaW5nKCJVbmtu
b3duIG5ldHdvcmtTdGFnZTogIl9zLCBuZXR3b3JrU3RhZ2VTdHJpbmcpOwotICAgICAgICByZXR1
cm47CisgICAgc3dpdGNoIChuZXR3b3JrU3RhZ2UpIHsKKyAgICBjYXNlIFByb3RvY29sOjpOZXR3
b3JrOjpOZXR3b3JrU3RhZ2U6OlJlcXVlc3Q6CisgICAgICAgIGlmIChhdXRvIHBlbmRpbmdJbnRl
cmNlcHRSZXF1ZXN0ID0gbV9wZW5kaW5nSW50ZXJjZXB0UmVxdWVzdHMudGFrZShyZXF1ZXN0SWQp
KSB7CisgICAgICAgICAgICBwZW5kaW5nSW50ZXJjZXB0UmVxdWVzdC0+Y29udGludWVXaXRoT3Jp
Z2luYWxSZXF1ZXN0KCk7CisgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICB9CisgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTWlzc2luZyBwZW5kaW5nIGludGVyY2VwdCByZXF1
ZXN0IGZvciBnaXZlbiByZXF1ZXN0SWQiX3MpOworCisgICAgY2FzZSBQcm90b2NvbDo6TmV0d29y
azo6TmV0d29ya1N0YWdlOjpSZXNwb25zZToKKyAgICAgICAgaWYgKGF1dG8gcGVuZGluZ0ludGVy
Y2VwdFJlc3BvbnNlID0gbV9wZW5kaW5nSW50ZXJjZXB0UmVzcG9uc2VzLnRha2UocmVxdWVzdElk
KSkgeworICAgICAgICAgICAgcGVuZGluZ0ludGVyY2VwdFJlc3BvbnNlLT5yZXNwb25kV2l0aE9y
aWdpbmFsUmVzcG9uc2UoKTsKKyAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJNaXNzaW5nIHBlbmRpbmcgaW50ZXJjZXB0IHJl
c3BvbnNlIGZvciBnaXZlbiByZXF1ZXN0SWQiX3MpOwogICAgIH0KIAotICAgIHN3aXRjaCAobmV0
d29ya1N0YWdlLnZhbHVlKCkpIHsKLSAgICBjYXNlIE5ldHdvcmtTdGFnZTo6UmVxdWVzdDoKLSAg
ICAgICAgaWYgKGF1dG8gcGVuZGluZ0ludGVyY2VwdFJlcXVlc3QgPSBtX3BlbmRpbmdJbnRlcmNl
cHRSZXF1ZXN0cy50YWtlKHJlcXVlc3RJZCkpCi0gICAgICAgICAgICBwZW5kaW5nSW50ZXJjZXB0
UmVxdWVzdC0+Y29udGludWVXaXRoT3JpZ2luYWxSZXF1ZXN0KCk7Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIGVycm9yU3RyaW5nID0gIk1pc3NpbmcgcGVuZGluZyBpbnRlcmNlcHQgcmVxdWVz
dCBmb3IgZ2l2ZW4gcmVxdWVzdElkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBOZXR3
b3JrU3RhZ2U6OlJlc3BvbnNlOgotICAgICAgICBpZiAoYXV0byBwZW5kaW5nSW50ZXJjZXB0UmVz
cG9uc2UgPSBtX3BlbmRpbmdJbnRlcmNlcHRSZXNwb25zZXMudGFrZShyZXF1ZXN0SWQpKQotICAg
ICAgICAgICAgcGVuZGluZ0ludGVyY2VwdFJlc3BvbnNlLT5yZXNwb25kV2l0aE9yaWdpbmFsUmVz
cG9uc2UoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWlzc2lu
ZyBwZW5kaW5nIGludGVyY2VwdCByZXNwb25zZSBmb3IgZ2l2ZW4gcmVxdWVzdElkIl9zOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVy
biB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50OjppbnRlcmNlcHRXaXRoUmVx
dWVzdChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBj
b25zdCBTdHJpbmcqIHVybCwgY29uc3QgU3RyaW5nKiBtZXRob2QsIGNvbnN0IEpTT046Ok9iamVj
dCogaGVhZGVycywgY29uc3QgU3RyaW5nKiBwb3N0RGF0YSkKK1Byb3RvY29sOjpFcnJvclN0cmlu
Z09yPHZvaWQ+IEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6aW50ZXJjZXB0V2l0aFJlcXVlc3QoY29u
c3QgUHJvdG9jb2w6Ok5ldHdvcms6OlJlcXVlc3RJZCYgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcm
IHVybCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgaGVhZGVy
cywgY29uc3QgU3RyaW5nJiBwb3N0RGF0YSkKIHsKICAgICBhdXRvIHBlbmRpbmdSZXF1ZXN0ID0g
bV9wZW5kaW5nSW50ZXJjZXB0UmVxdWVzdHMudGFrZShyZXF1ZXN0SWQpOwotICAgIGlmICghcGVu
ZGluZ1JlcXVlc3QpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWlzc2luZyBwZW5kaW5nIGlu
dGVyY2VwdCByZXF1ZXN0IGZvciBnaXZlbiByZXF1ZXN0SWQiX3M7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9CisgICAgaWYgKCFwZW5kaW5nUmVxdWVzdCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4
cGVjdGVkKCJNaXNzaW5nIHBlbmRpbmcgaW50ZXJjZXB0IHJlcXVlc3QgZm9yIGdpdmVuIHJlcXVl
c3RJZCJfcyk7CiAKICAgICBhdXRvJiBsb2FkZXIgPSAqcGVuZGluZ1JlcXVlc3QtPm1fbG9hZGVy
OwogICAgIFJlc291cmNlUmVxdWVzdCByZXF1ZXN0ID0gbG9hZGVyLnJlcXVlc3QoKTsKLSAgICBp
ZiAodXJsKQotICAgICAgICByZXF1ZXN0LnNldFVSTChVUkwoeyB9LCAqdXJsKSk7Ci0gICAgaWYg
KG1ldGhvZCkKLSAgICAgICAgcmVxdWVzdC5zZXRIVFRQTWV0aG9kKCptZXRob2QpOworICAgIGlm
ICghIXVybCkKKyAgICAgICAgcmVxdWVzdC5zZXRVUkwoVVJMKHsgfSwgdXJsKSk7CisgICAgaWYg
KCEhbWV0aG9kKQorICAgICAgICByZXF1ZXN0LnNldEhUVFBNZXRob2QobWV0aG9kKTsKICAgICBp
ZiAoaGVhZGVycykgewogICAgICAgICBIVFRQSGVhZGVyTWFwIGV4cGxpY2l0SGVhZGVyczsKICAg
ICAgICAgZm9yIChhdXRvJiBoZWFkZXIgOiAqaGVhZGVycykgewotICAgICAgICAgICAgU3RyaW5n
IGhlYWRlclZhbHVlOwotICAgICAgICAgICAgaWYgKGhlYWRlci52YWx1ZS0+YXNTdHJpbmcoaGVh
ZGVyVmFsdWUpKQorICAgICAgICAgICAgYXV0byBoZWFkZXJWYWx1ZSA9IGhlYWRlci52YWx1ZS0+
YXNTdHJpbmcoKTsKKyAgICAgICAgICAgIGlmICghIWhlYWRlclZhbHVlKQogICAgICAgICAgICAg
ICAgIGV4cGxpY2l0SGVhZGVycy5hZGQoaGVhZGVyLmtleSwgaGVhZGVyVmFsdWUpOwogICAgICAg
ICB9CiAgICAgICAgIHJlcXVlc3Quc2V0SFRUUEhlYWRlckZpZWxkcyhXVEZNb3ZlKGV4cGxpY2l0
SGVhZGVycykpOwogICAgIH0KLSAgICBpZiAocG9zdERhdGEpIHsKKyAgICBpZiAoISFwb3N0RGF0
YSkgewogICAgICAgICBWZWN0b3I8dWludDhfdD4gYnVmZmVyOwotICAgICAgICBpZiAoIWJhc2U2
NERlY29kZSgqcG9zdERhdGEsIGJ1ZmZlcikpIHsKLSAgICAgICAgICAgIGVycm9yU3RyaW5nID0g
IlVuYWJsZSB0byBkZWNvZGUgZ2l2ZW4gcG9zdERhdGEiX3M7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKCFiYXNlNjREZWNvZGUocG9zdERhdGEsIGJ1ZmZlcikp
CisgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIlVuYWJsZSB0byBkZWNvZGUgZ2l2
ZW4gcG9zdERhdGEiX3MpOwogCiAgICAgICAgIHJlcXVlc3Quc2V0SFRUUEJvZHkoRm9ybURhdGE6
OmNyZWF0ZShidWZmZXIpKTsKICAgICB9CiAgICAgLy8gRklYTUU6IGZpZ3VyZSBvdXQgaG93IHRv
IGlkZW50aWZ5IHdoZW4gYSByZXF1ZXN0IGhhcyBiZWVuIG92ZXJyaWRkZW4gd2hlbiB3ZSBhZGQg
dGhpcyB0byB0aGUgZnJvbnRlbmQuCiAgICAgcGVuZGluZ1JlcXVlc3QtPmNvbnRpbnVlV2l0aFJl
cXVlc3QocmVxdWVzdCk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3Rvck5l
dHdvcmtBZ2VudDo6aW50ZXJjZXB0V2l0aFJlc3BvbnNlKEVycm9yU3RyaW5nJiBlcnJvclN0cmlu
ZywgY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgY29udGVudCwgYm9vbCBi
YXNlNjRFbmNvZGVkLCBjb25zdCBTdHJpbmcqIG1pbWVUeXBlLCBjb25zdCBpbnQqIHN0YXR1cywg
Y29uc3QgU3RyaW5nKiBzdGF0dXNUZXh0LCBjb25zdCBKU09OOjpPYmplY3QqIGhlYWRlcnMpCitQ
cm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmludGVy
Y2VwdFdpdGhSZXNwb25zZShjb25zdCBQcm90b2NvbDo6TmV0d29yazo6UmVxdWVzdElkJiByZXF1
ZXN0SWQsIGNvbnN0IFN0cmluZyYgY29udGVudCwgYm9vbCBiYXNlNjRFbmNvZGVkLCBjb25zdCBT
dHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxpbnQ+JiYgc3RhdHVzLCBjb25zdCBTdHJpbmcmIHN0
YXR1c1RleHQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgaGVhZGVycykKIHsKICAgICBhdXRvIHBl
bmRpbmdJbnRlcmNlcHRSZXNwb25zZSA9IG1fcGVuZGluZ0ludGVyY2VwdFJlc3BvbnNlcy50YWtl
KHJlcXVlc3RJZCk7Ci0gICAgaWYgKCFwZW5kaW5nSW50ZXJjZXB0UmVzcG9uc2UpIHsKLSAgICAg
ICAgZXJyb3JTdHJpbmcgPSAiTWlzc2luZyBwZW5kaW5nIGludGVyY2VwdCByZXNwb25zZSBmb3Ig
Z2l2ZW4gcmVxdWVzdElkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghcGVu
ZGluZ0ludGVyY2VwdFJlc3BvbnNlKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk1p
c3NpbmcgcGVuZGluZyBpbnRlcmNlcHQgcmVzcG9uc2UgZm9yIGdpdmVuIHJlcXVlc3RJZCJfcyk7
CiAKICAgICBSZXNvdXJjZVJlc3BvbnNlIG92ZXJyaWRlUmVzcG9uc2UocGVuZGluZ0ludGVyY2Vw
dFJlc3BvbnNlLT5vcmlnaW5hbFJlc3BvbnNlKCkpOwogICAgIG92ZXJyaWRlUmVzcG9uc2Uuc2V0
U291cmNlKFJlc291cmNlUmVzcG9uc2U6OlNvdXJjZTo6SW5zcGVjdG9yT3ZlcnJpZGUpOwogCiAg
ICAgaWYgKHN0YXR1cykKICAgICAgICAgb3ZlcnJpZGVSZXNwb25zZS5zZXRIVFRQU3RhdHVzQ29k
ZSgqc3RhdHVzKTsKLSAgICBpZiAoc3RhdHVzVGV4dCkKLSAgICAgICAgb3ZlcnJpZGVSZXNwb25z
ZS5zZXRIVFRQU3RhdHVzVGV4dCgqc3RhdHVzVGV4dCk7Ci0gICAgaWYgKG1pbWVUeXBlKQotICAg
ICAgICBvdmVycmlkZVJlc3BvbnNlLnNldE1pbWVUeXBlKCptaW1lVHlwZSk7CisgICAgaWYgKCEh
c3RhdHVzVGV4dCkKKyAgICAgICAgb3ZlcnJpZGVSZXNwb25zZS5zZXRIVFRQU3RhdHVzVGV4dChz
dGF0dXNUZXh0KTsKKyAgICBpZiAoISFtaW1lVHlwZSkKKyAgICAgICAgb3ZlcnJpZGVSZXNwb25z
ZS5zZXRNaW1lVHlwZShtaW1lVHlwZSk7CiAgICAgaWYgKGhlYWRlcnMpIHsKICAgICAgICAgSFRU
UEhlYWRlck1hcCBleHBsaWNpdEhlYWRlcnM7CiAgICAgICAgIGZvciAoYXV0byYgaGVhZGVyIDog
KmhlYWRlcnMpIHsKLSAgICAgICAgICAgIFN0cmluZyBoZWFkZXJWYWx1ZTsKLSAgICAgICAgICAg
IGlmIChoZWFkZXIudmFsdWUtPmFzU3RyaW5nKGhlYWRlclZhbHVlKSkKKyAgICAgICAgICAgIGF1
dG8gaGVhZGVyVmFsdWUgPSBoZWFkZXIudmFsdWUtPmFzU3RyaW5nKCk7CisgICAgICAgICAgICBp
ZiAoISFoZWFkZXJWYWx1ZSkKICAgICAgICAgICAgICAgICBleHBsaWNpdEhlYWRlcnMuYWRkKGhl
YWRlci5rZXksIGhlYWRlclZhbHVlKTsKICAgICAgICAgfQogICAgICAgICBvdmVycmlkZVJlc3Bv
bnNlLnNldEhUVFBIZWFkZXJGaWVsZHMoV1RGTW92ZShleHBsaWNpdEhlYWRlcnMpKTsKQEAgLTEy
NjEsNDEgKzEyNDUsMzQgQEAgdm9pZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmludGVyY2VwdFdp
dGhSZXNwb25zZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnMKICAgICBSZWZQdHI8U2hh
cmVkQnVmZmVyPiBvdmVycmlkZURhdGE7CiAgICAgaWYgKGJhc2U2NEVuY29kZWQpIHsKICAgICAg
ICAgVmVjdG9yPHVpbnQ4X3Q+IGJ1ZmZlcjsKLSAgICAgICAgaWYgKCFiYXNlNjREZWNvZGUoY29u
dGVudCwgYnVmZmVyKSkgewotICAgICAgICAgICAgZXJyb3JTdHJpbmcgPSAiVW5hYmxlIHRvIGRl
Y29kZSBnaXZlbiBjb250ZW50Il9zOwotICAgICAgICAgICAgcGVuZGluZ0ludGVyY2VwdFJlc3Bv
bnNlLT5yZXNwb25kV2l0aE9yaWdpbmFsUmVzcG9uc2UoKTsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQorICAgICAgICBpZiAoIWJhc2U2NERlY29kZShjb250ZW50LCBidWZmZXIpKQor
ICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJVbmFibGUgdG8gZGVjb2RlIGdpdmVu
IGNvbnRlbnQiX3MpOwogCiAgICAgICAgIG92ZXJyaWRlRGF0YSA9IFNoYXJlZEJ1ZmZlcjo6Y3Jl
YXRlKFdURk1vdmUoYnVmZmVyKSk7CiAgICAgfSBlbHNlCiAgICAgICAgIG92ZXJyaWRlRGF0YSA9
IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGNvbnRlbnQudXRmOCgpLmRhdGEoKSwgY29udGVudC51dGY4
KCkubGVuZ3RoKCkpOwogCiAgICAgcGVuZGluZ0ludGVyY2VwdFJlc3BvbnNlLT5yZXNwb25kKG92
ZXJyaWRlUmVzcG9uc2UsIG92ZXJyaWRlRGF0YSk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12
b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6aW50ZXJjZXB0UmVxdWVzdFdpdGhSZXNwb25zZShF
cnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBjb25zdCBT
dHJpbmcmIGNvbnRlbnQsIGJvb2wgYmFzZTY0RW5jb2RlZCwgY29uc3QgU3RyaW5nJiBtaW1lVHlw
ZSwgaW50IHN0YXR1cywgY29uc3QgU3RyaW5nJiBzdGF0dXNUZXh0LCBjb25zdCBKU09OOjpPYmpl
Y3QmIGhlYWRlcnMpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JOZXR3
b3JrQWdlbnQ6OmludGVyY2VwdFJlcXVlc3RXaXRoUmVzcG9uc2UoY29uc3QgUHJvdG9jb2w6Ok5l
dHdvcms6OlJlcXVlc3RJZCYgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQsIGJvb2wg
YmFzZTY0RW5jb2RlZCwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgaW50IHN0YXR1cywgY29uc3Qg
U3RyaW5nJiBzdGF0dXNUZXh0LCBSZWY8SlNPTjo6T2JqZWN0PiYmIGhlYWRlcnMpCiB7CiAgICAg
YXV0byBwZW5kaW5nUmVxdWVzdCA9IG1fcGVuZGluZ0ludGVyY2VwdFJlcXVlc3RzLnRha2UocmVx
dWVzdElkKTsKLSAgICBpZiAoIXBlbmRpbmdSZXF1ZXN0KSB7Ci0gICAgICAgIGVycm9yU3RyaW5n
ID0gIk1pc3NpbmcgcGVuZGluZyBpbnRlcmNlcHQgcmVxdWVzdCBmb3IgZ2l2ZW4gcmVxdWVzdElk
Il9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghcGVuZGluZ1JlcXVlc3QpCisg
ICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTWlzc2luZyBwZW5kaW5nIGludGVyY2VwdCBy
ZXF1ZXN0IGZvciBnaXZlbiByZXF1ZXN0SWQiX3MpOwogCiAgICAgLy8gTG9hZGVyIHdpbGwgYmUg
cmV0YWluZWQgaW4gdGhlIGRpZFJlY2VpdmVSZXNwb25zZSBsYW1iZGEgYmVsb3cuCiAgICAgUmVm
UHRyPFJlc291cmNlTG9hZGVyPiBsb2FkZXIgPSBwZW5kaW5nUmVxdWVzdC0+bV9sb2FkZXIuZ2V0
KCk7Ci0gICAgaWYgKGxvYWRlci0+cmVhY2hlZFRlcm1pbmFsU3RhdGUoKSkgewotICAgICAgICBl
cnJvclN0cmluZyA9ICJVbmFibGUgdG8gZnVsZmlsbCByZXF1ZXN0LCBpdCBoYXMgYWxyZWFkeSBi
ZWVuIHByb2Nlc3NlZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAobG9hZGVy
LT5yZWFjaGVkVGVybWluYWxTdGF0ZSgpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQo
IlVuYWJsZSB0byBmdWxmaWxsIHJlcXVlc3QsIGl0IGhhcyBhbHJlYWR5IGJlZW4gcHJvY2Vzc2Vk
Il9zKTsKIAogICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGRhdGE7CiAgICAgaWYgKGJhc2U2NEVu
Y29kZWQpIHsKICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGJ1ZmZlcjsKLSAgICAgICAgaWYgKCFi
YXNlNjREZWNvZGUoY29udGVudCwgYnVmZmVyKSkgewotICAgICAgICAgICAgZXJyb3JTdHJpbmcg
PSAiVW5hYmxlIHRvIGRlY29kZSBnaXZlbiBjb250ZW50Il9zOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9CisgICAgICAgIGlmICghYmFzZTY0RGVjb2RlKGNvbnRlbnQsIGJ1ZmZlcikp
CisgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIlVuYWJsZSB0byBkZWNvZGUgZ2l2
ZW4gY29udGVudCJfcyk7CiAKICAgICAgICAgZGF0YSA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKFdU
Rk1vdmUoYnVmZmVyKSk7CiAgICAgfSBlbHNlCkBAIC0xMzA3LDkgKzEyODQsOSBAQCB2b2lkIElu
c3BlY3Rvck5ldHdvcmtBZ2VudDo6aW50ZXJjZXB0UmVxdWVzdFdpdGhSZXNwb25zZShFcnJvclN0
cmluZyYgZXJyb3JTdHJpbgogICAgIHJlc3BvbnNlLnNldEhUVFBTdGF0dXNDb2RlKHN0YXR1cyk7
CiAgICAgcmVzcG9uc2Uuc2V0SFRUUFN0YXR1c1RleHQoc3RhdHVzVGV4dCk7CiAgICAgSFRUUEhl
YWRlck1hcCBleHBsaWNpdEhlYWRlcnM7Ci0gICAgZm9yIChhdXRvJiBoZWFkZXIgOiBoZWFkZXJz
KSB7Ci0gICAgICAgIFN0cmluZyBoZWFkZXJWYWx1ZTsKLSAgICAgICAgaWYgKGhlYWRlci52YWx1
ZS0+YXNTdHJpbmcoaGVhZGVyVmFsdWUpKQorICAgIGZvciAoYXV0byYgaGVhZGVyIDogaGVhZGVy
cy5nZXQoKSkgeworICAgICAgICBhdXRvIGhlYWRlclZhbHVlID0gaGVhZGVyLnZhbHVlLT5hc1N0
cmluZygpOworICAgICAgICBpZiAoISFoZWFkZXJWYWx1ZSkKICAgICAgICAgICAgIGV4cGxpY2l0
SGVhZGVycy5hZGQoaGVhZGVyLmtleSwgaGVhZGVyVmFsdWUpOwogICAgIH0KICAgICByZXNwb25z
ZS5zZXRIVFRQSGVhZGVyRmllbGRzKFdURk1vdmUoZXhwbGljaXRIZWFkZXJzKSk7CkBAIC0xMzE5
LDQ0ICsxMjk2LDQwIEBAIHZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50OjppbnRlcmNlcHRSZXF1
ZXN0V2l0aFJlc3BvbnNlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluCiAgICAgICAgICAgICBsb2Fk
ZXItPmRpZFJlY2VpdmVCdWZmZXIoV1RGTW92ZShidWZmZXIpLCBidWZmZXItPnNpemUoKSwgRGF0
YVBheWxvYWRXaG9sZVJlc291cmNlKTsKICAgICAgICAgbG9hZGVyLT5kaWRGaW5pc2hMb2FkaW5n
KE5ldHdvcmtMb2FkTWV0cmljcygpKTsKICAgICB9KTsKKworICAgIHJldHVybiB7IH07CiB9CiAK
LXZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50OjppbnRlcmNlcHRSZXF1ZXN0V2l0aEVycm9yKEVy
cm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIGNvbnN0IFN0
cmluZyYgZXJyb3JUeXBlU3RyaW5nKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5z
cGVjdG9yTmV0d29ya0FnZW50OjppbnRlcmNlcHRSZXF1ZXN0V2l0aEVycm9yKGNvbnN0IFByb3Rv
Y29sOjpOZXR3b3JrOjpSZXF1ZXN0SWQmIHJlcXVlc3RJZCwgUHJvdG9jb2w6Ok5ldHdvcms6OlJl
c291cmNlRXJyb3JUeXBlIGVycm9yVHlwZSkKIHsKICAgICBhdXRvIHBlbmRpbmdSZXF1ZXN0ID0g
bV9wZW5kaW5nSW50ZXJjZXB0UmVxdWVzdHMudGFrZShyZXF1ZXN0SWQpOwotICAgIGlmICghcGVu
ZGluZ1JlcXVlc3QpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWlzc2luZyBwZW5kaW5nIGlu
dGVyY2VwdCByZXF1ZXN0IGZvciBnaXZlbiByZXF1ZXN0SWQiX3M7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9CisgICAgaWYgKCFwZW5kaW5nUmVxdWVzdCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4
cGVjdGVkKCJNaXNzaW5nIHBlbmRpbmcgaW50ZXJjZXB0IHJlcXVlc3QgZm9yIGdpdmVuIHJlcXVl
c3RJZCJfcyk7CiAKICAgICBhdXRvJiBsb2FkZXIgPSAqcGVuZGluZ1JlcXVlc3QtPm1fbG9hZGVy
OwotICAgIGlmIChsb2FkZXIucmVhY2hlZFRlcm1pbmFsU3RhdGUoKSkgewotICAgICAgICBlcnJv
clN0cmluZyA9ICJVbmFibGUgdG8gYWJvcnQgcmVxdWVzdCwgaXQgaGFzIGFscmVhZHkgYmVlbiBw
cm9jZXNzZWQiX3M7Ci0gICAgICAgIHJldHVybjsKKyAgICBpZiAobG9hZGVyLnJlYWNoZWRUZXJt
aW5hbFN0YXRlKCkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiVW5hYmxlIHRvIGFi
b3J0IHJlcXVlc3QsIGl0IGhhcyBhbHJlYWR5IGJlZW4gcHJvY2Vzc2VkIl9zKTsKKworICAgIHN3
aXRjaCAoZXJyb3JUeXBlKSB7CisgICAgY2FzZSBQcm90b2NvbDo6TmV0d29yazo6UmVzb3VyY2VF
cnJvclR5cGU6OkdlbmVyYWw6CisgICAgICAgIGxvYWRlci5kaWRGYWlsKFJlc291cmNlRXJyb3Io
ZXJyb3JEb21haW5XZWJLaXRJbnRlcm5hbCwgMCwgbG9hZGVyLnVybCgpLCAiUmVxdWVzdCBpbnRl
cmNlcHRlZCJfcywgUmVzb3VyY2VFcnJvcjo6VHlwZTo6R2VuZXJhbCkpOworICAgICAgICByZXR1
cm4geyB9OworCisgICAgY2FzZSBQcm90b2NvbDo6TmV0d29yazo6UmVzb3VyY2VFcnJvclR5cGU6
OkFjY2Vzc0NvbnRyb2w6CisgICAgICAgIGxvYWRlci5kaWRGYWlsKFJlc291cmNlRXJyb3IoZXJy
b3JEb21haW5XZWJLaXRJbnRlcm5hbCwgMCwgbG9hZGVyLnVybCgpLCAiQWNjZXNzIGRlbmllZCJf
cywgUmVzb3VyY2VFcnJvcjo6VHlwZTo6QWNjZXNzQ29udHJvbCkpOworICAgICAgICByZXR1cm4g
eyB9OworCisgICAgY2FzZSBQcm90b2NvbDo6TmV0d29yazo6UmVzb3VyY2VFcnJvclR5cGU6OkNh
bmNlbGxhdGlvbjoKKyAgICAgICAgbG9hZGVyLmRpZEZhaWwoUmVzb3VyY2VFcnJvcihlcnJvckRv
bWFpbldlYktpdEludGVybmFsLCAwLCBsb2FkZXIudXJsKCksICJSZXF1ZXN0IGNhbmNlbGVkIl9z
LCBSZXNvdXJjZUVycm9yOjpUeXBlOjpDYW5jZWxsYXRpb24pKTsKKyAgICAgICAgcmV0dXJuIHsg
fTsKKworICAgIGNhc2UgUHJvdG9jb2w6Ok5ldHdvcms6OlJlc291cmNlRXJyb3JUeXBlOjpUaW1l
b3V0OgorICAgICAgICBsb2FkZXIuZGlkRmFpbChSZXNvdXJjZUVycm9yKGVycm9yRG9tYWluV2Vi
S2l0SW50ZXJuYWwsIDAsIGxvYWRlci51cmwoKSwgIlJlcXVlc3QgdGltZWQgb3V0Il9zLCBSZXNv
dXJjZUVycm9yOjpUeXBlOjpUaW1lb3V0KSk7CisgICAgICAgIHJldHVybiB7IH07CiAgICAgfQog
Ci0gICAgYXV0byBlcnJvclR5cGUgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpJbnNwZWN0b3JIZWxw
ZXJzOjpwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29y
azo6UmVzb3VyY2VFcnJvclR5cGU+KGVycm9yVHlwZVN0cmluZyk7Ci0gICAgaWYgKCFlcnJvclR5
cGUpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSBtYWtlU3RyaW5nKCJVbmtub3duIGVycm9yVHlw
ZTogIl9zLCBlcnJvclR5cGVTdHJpbmcpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
UmVzb3VyY2VFcnJvciBlcnJvcjsKLSAgICBzd2l0Y2ggKGVycm9yVHlwZS52YWx1ZSgpKSB7Ci0g
ICAgY2FzZSBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpSZXNvdXJjZUVycm9yVHlwZTo6
R2VuZXJhbDoKLSAgICAgICAgZXJyb3IgPSBSZXNvdXJjZUVycm9yKGVycm9yRG9tYWluV2ViS2l0
SW50ZXJuYWwsIDAsIGxvYWRlci51cmwoKSwgIlJlcXVlc3QgaW50ZXJjZXB0ZWQiX3MsIFJlc291
cmNlRXJyb3I6OlR5cGU6OkdlbmVyYWwpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OlJlc291cmNlRXJyb3JUeXBlOjpBY2Nlc3NDb250cm9s
OgotICAgICAgICBlcnJvciA9IFJlc291cmNlRXJyb3IoZXJyb3JEb21haW5XZWJLaXRJbnRlcm5h
bCwgMCwgbG9hZGVyLnVybCgpLCAiQWNjZXNzIGRlbmllZCJfcywgUmVzb3VyY2VFcnJvcjo6VHlw
ZTo6QWNjZXNzQ29udHJvbCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6TmV0d29yazo6UmVzb3VyY2VFcnJvclR5cGU6OkNhbmNlbGxhdGlvbjoKLSAgICAg
ICAgZXJyb3IgPSBSZXNvdXJjZUVycm9yKGVycm9yRG9tYWluV2ViS2l0SW50ZXJuYWwsIDAsIGxv
YWRlci51cmwoKSwgIlJlcXVlc3QgY2FuY2VsZWQiX3MsIFJlc291cmNlRXJyb3I6OlR5cGU6OkNh
bmNlbGxhdGlvbik7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6TmV0d29yazo6UmVzb3VyY2VFcnJvclR5cGU6OlRpbWVvdXQ6Ci0gICAgICAgIGVycm9yID0g
UmVzb3VyY2VFcnJvcihlcnJvckRvbWFpbldlYktpdEludGVybmFsLCAwLCBsb2FkZXIudXJsKCks
ICJSZXF1ZXN0IHRpbWVkIG91dCJfcywgUmVzb3VyY2VFcnJvcjo6VHlwZTo6VGltZW91dCk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBsb2FkZXIuZGlkRmFpbChlcnJvcik7CisgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIHsgfTsKIH0KIAogYm9vbCBJbnNwZWN0b3JO
ZXR3b3JrQWdlbnQ6OnNob3VsZFRyZWF0QXNUZXh0KGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCkBA
IC0xNDM5LDkgKzE0MTIsOSBAQCBib29sIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6Y2FjaGVkUmVz
b3VyY2VDb250ZW50KENhY2hlZFJlc291cmNlJiByZXNvdXJjZSwgU3RyaQogICAgIH0KIH0KIAot
c3RhdGljIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpTZWFyY2hSZXN1bHQ+IGJ1aWxk
T2JqZWN0Rm9yU2VhcmNoUmVzdWx0KGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBjb25zdCBTdHJp
bmcmIGZyYW1lSWQsIGNvbnN0IFN0cmluZyYgdXJsLCBpbnQgbWF0Y2hlc0NvdW50KQorc3RhdGlj
IFJlZjxQcm90b2NvbDo6UGFnZTo6U2VhcmNoUmVzdWx0PiBidWlsZE9iamVjdEZvclNlYXJjaFJl
c3VsdChjb25zdCBQcm90b2NvbDo6TmV0d29yazo6UmVxdWVzdElkJiByZXF1ZXN0SWQsIGNvbnN0
IFByb3RvY29sOjpOZXR3b3JrOjpGcmFtZUlkJiBmcmFtZUlkLCBjb25zdCBTdHJpbmcmIHVybCwg
aW50IG1hdGNoZXNDb3VudCkKIHsKLSAgICBhdXRvIHNlYXJjaFJlc3VsdCA9IEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlBhZ2U6OlNlYXJjaFJlc3VsdDo6Y3JlYXRlKCkKKyAgICBhdXRvIHNlYXJjaFJl
c3VsdCA9IFByb3RvY29sOjpQYWdlOjpTZWFyY2hSZXN1bHQ6OmNyZWF0ZSgpCiAgICAgICAgIC5z
ZXRVcmwodXJsKQogICAgICAgICAuc2V0RnJhbWVJZChmcmFtZUlkKQogICAgICAgICAuc2V0TWF0
Y2hlc0NvdW50KG1hdGNoZXNDb3VudCkKQEAgLTE0NjEsNyArMTQzNCw3IEBAIHN0YXRpYyBPcHRp
b25hbDxTdHJpbmc+IHRleHRDb250ZW50Rm9yUmVzb3VyY2VEYXRhKGNvbnN0IE5ldHdvcmtSZXNv
dXJjZXNEYXRhOjpSCiAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KIAotdm9pZCBJbnNwZWN0
b3JOZXR3b3JrQWdlbnQ6OnNlYXJjaE90aGVyUmVxdWVzdHMoY29uc3QgSlNDOjpZYXJyOjpSZWd1
bGFyRXhwcmVzc2lvbiYgcmVnZXgsIFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OlBhZ2U6OlNlYXJjaFJlc3VsdD4+JiByZXN1bHQpCit2b2lkIEluc3BlY3Rvck5ldHdv
cmtBZ2VudDo6c2VhcmNoT3RoZXJSZXF1ZXN0cyhjb25zdCBKU0M6OllhcnI6OlJlZ3VsYXJFeHBy
ZXNzaW9uJiByZWdleCwgUmVmPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlBhZ2U6OlNlYXJjaFJl
c3VsdD4+JiByZXN1bHQpCiB7CiAgICAgVmVjdG9yPE5ldHdvcmtSZXNvdXJjZXNEYXRhOjpSZXNv
dXJjZURhdGEqPiByZXNvdXJjZXMgPSBtX3Jlc291cmNlc0RhdGEtPnJlc291cmNlcygpOwogICAg
IGZvciAoYXV0byogcmVzb3VyY2VEYXRhIDogcmVzb3VyY2VzKSB7CkBAIC0xNDczLDcgKzE0NDYs
NyBAQCB2b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6c2VhcmNoT3RoZXJSZXF1ZXN0cyhjb25z
dCBKU0M6OllhcnI6OlJlZ3VsYXJFeHByZXNzaQogICAgIH0KIH0KIAotdm9pZCBJbnNwZWN0b3JO
ZXR3b3JrQWdlbnQ6OnNlYXJjaEluUmVxdWVzdChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNv
bnN0IFN0cmluZyYgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIHF1ZXJ5LCBib29sIGNhc2VTZW5z
aXRpdmUsIGJvb2wgaXNSZWdleCwgUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90
b2NvbDo6R2VuZXJpY1R5cGVzOjpTZWFyY2hNYXRjaD4+JiByZXN1bHRzKQordm9pZCBJbnNwZWN0
b3JOZXR3b3JrQWdlbnQ6OnNlYXJjaEluUmVxdWVzdChQcm90b2NvbDo6RXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBjb25zdCBQcm90b2NvbDo6TmV0d29yazo6UmVxdWVzdElkJiByZXF1ZXN0SWQs
IGNvbnN0IFN0cmluZyYgcXVlcnksIGJvb2wgY2FzZVNlbnNpdGl2ZSwgYm9vbCBpc1JlZ2V4LCBS
ZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6R2VuZXJpY1R5cGVzOjpTZWFyY2hNYXRjaD4+
JiByZXN1bHRzKQogewogICAgIE5ldHdvcmtSZXNvdXJjZXNEYXRhOjpSZXNvdXJjZURhdGEgY29u
c3QqIHJlc291cmNlRGF0YSA9IG1fcmVzb3VyY2VzRGF0YS0+ZGF0YShyZXF1ZXN0SWQpOwogICAg
IGlmICghcmVzb3VyY2VEYXRhKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvYWdlbnRzL0luc3BlY3Rvck5ldHdvcmtBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2FnZW50cy9JbnNwZWN0b3JOZXR3b3JrQWdlbnQuaAppbmRleCAzNDQwZTcxYTVlZDVlZjM4
NDYyMGE5ZjYyODAzNzUxZTk4M2RiNWIxLi40MGUyM2M0M2E3MGU3OWIwYzJjMGIxZDZhMTUzZWRl
Mzk1ODAyYWE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0lu
c3BlY3Rvck5ldHdvcmtBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2Vu
dHMvSW5zcGVjdG9yTmV0d29ya0FnZW50LmgKQEAgLTYxLDggKzYxLDYgQEAgY2xhc3MgV2ViU29j
a2V0OwogCiBzdHJ1Y3QgV2ViU29ja2V0RnJhbWU7CiAKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3Ry
aW5nOwotCiBjbGFzcyBJbnNwZWN0b3JOZXR3b3JrQWdlbnQgOiBwdWJsaWMgSW5zcGVjdG9yQWdl
bnRCYXNlLCBwdWJsaWMgSW5zcGVjdG9yOjpOZXR3b3JrQmFja2VuZERpc3BhdGNoZXJIYW5kbGVy
IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbnNwZWN0b3JOZXR3b3JrQWdlbnQpOwogICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwpAQCAtNzksMjIgKzc3LDIyIEBAIHB1YmxpYzoKICAg
ICB2b2lkIHdpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlzY29ubmVj
dFJlYXNvbikgZmluYWw7CiAKICAgICAvLyBOZXR3b3JrQmFja2VuZERpc3BhdGNoZXJIYW5kbGVy
Ci0gICAgdm9pZCBlbmFibGUoRXJyb3JTdHJpbmcmKSBmaW5hbDsKLSAgICB2b2lkIGRpc2FibGUo
RXJyb3JTdHJpbmcmKSBmaW5hbDsKLSAgICB2b2lkIHNldEV4dHJhSFRUUEhlYWRlcnMoRXJyb3JT
dHJpbmcmLCBjb25zdCBKU09OOjpPYmplY3QmIGhlYWRlcnMpIGZpbmFsOwotICAgIHZvaWQgZ2V0
UmVzcG9uc2VCb2R5KEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIFN0cmlu
ZyogY29udGVudCwgYm9vbCogYmFzZTY0RW5jb2RlZCkgZmluYWw7Ci0gICAgdm9pZCBzZXRSZXNv
dXJjZUNhY2hpbmdEaXNhYmxlZChFcnJvclN0cmluZyYsIGJvb2wgZGlzYWJsZWQpIGZpbmFsOwot
ICAgIHZvaWQgbG9hZFJlc291cmNlKGNvbnN0IFN0cmluZyYgZnJhbWVJZCwgY29uc3QgU3RyaW5n
JiB1cmwsIFJlZjxMb2FkUmVzb3VyY2VDYWxsYmFjaz4mJikgZmluYWw7Ci0gICAgdm9pZCBnZXRT
ZXJpYWxpemVkQ2VydGlmaWNhdGUoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHJlcXVlc3RJ
ZCwgU3RyaW5nKiBzZXJpYWxpemVkQ2VydGlmaWNhdGUpIGZpbmFsOwotICAgIHZvaWQgcmVzb2x2
ZVdlYlNvY2tldChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBjb25zdCBT
dHJpbmcqIG9iamVjdEdyb3VwLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6
UmVtb3RlT2JqZWN0PiYpIGZpbmFsOwotICAgIHZvaWQgc2V0SW50ZXJjZXB0aW9uRW5hYmxlZChF
cnJvclN0cmluZyYsIGJvb2wgZW5hYmxlZCkgZmluYWw7Ci0gICAgdm9pZCBhZGRJbnRlcmNlcHRp
b24oRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBuZXR3b3Jr
U3RhZ2VTdHJpbmcsIGNvbnN0IGJvb2wqIGNhc2VTZW5zaXRpdmUsIGNvbnN0IGJvb2wqIGlzUmVn
ZXgpIGZpbmFsOwotICAgIHZvaWQgcmVtb3ZlSW50ZXJjZXB0aW9uKEVycm9yU3RyaW5nJiwgY29u
c3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgbmV0d29ya1N0YWdlU3RyaW5nLCBjb25zdCBi
b29sKiBjYXNlU2Vuc2l0aXZlLCBjb25zdCBib29sKiBpc1JlZ2V4KSBmaW5hbDsKLSAgICB2b2lk
IGludGVyY2VwdENvbnRpbnVlKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQs
IGNvbnN0IFN0cmluZyYgbmV0d29ya1N0YWdlU3RyaW5nKSBmaW5hbDsKLSAgICB2b2lkIGludGVy
Y2VwdFdpdGhSZXF1ZXN0KEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIGNv
bnN0IFN0cmluZyogdXJsLCBjb25zdCBTdHJpbmcqIG1ldGhvZCwgY29uc3QgSlNPTjo6T2JqZWN0
KiBoZWFkZXJzLCBjb25zdCBTdHJpbmcqIHBvc3REYXRhKSBmaW5hbDsKLSAgICB2b2lkIGludGVy
Y2VwdFdpdGhSZXNwb25zZShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBj
b25zdCBTdHJpbmcmIGNvbnRlbnQsIGJvb2wgYmFzZTY0RW5jb2RlZCwgY29uc3QgU3RyaW5nKiBt
aW1lVHlwZSwgY29uc3QgaW50KiBzdGF0dXMsIGNvbnN0IFN0cmluZyogc3RhdHVzVGV4dCwgY29u
c3QgSlNPTjo6T2JqZWN0KiBoZWFkZXJzKSBmaW5hbDsKLSAgICB2b2lkIGludGVyY2VwdFJlcXVl
c3RXaXRoUmVzcG9uc2UoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgY29u
c3QgU3RyaW5nJiBjb250ZW50LCBib29sIGJhc2U2NEVuY29kZWQsIGNvbnN0IFN0cmluZyYgbWlt
ZVR5cGUsIGludCBzdGF0dXMsIGNvbnN0IFN0cmluZyYgc3RhdHVzVGV4dCwgY29uc3QgSlNPTjo6
T2JqZWN0JiBoZWFkZXJzKSBmaW5hbDsKLSAgICB2b2lkIGludGVyY2VwdFJlcXVlc3RXaXRoRXJy
b3IoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBl
cnJvclR5cGUpIGZpbmFsOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8
dm9pZD4gZW5hYmxlKCkgZmluYWw7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJp
bmdPcjx2b2lkPiBkaXNhYmxlKCkgZmluYWw7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJy
b3JTdHJpbmdPcjx2b2lkPiBzZXRFeHRyYUhUVFBIZWFkZXJzKFJlZjxKU09OOjpPYmplY3Q+JiYp
IGZpbmFsOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8c3RkOjp0dXBs
ZTxTdHJpbmcsIGJvb2wgLyogYmFzZTY0RW5jb2RlZCAqLz4+IGdldFJlc3BvbnNlQm9keShjb25z
dCBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpSZXF1ZXN0SWQmKSBmaW5hbDsKKyAgICBJ
bnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHNldFJlc291cmNlQ2FjaGlu
Z0Rpc2FibGVkKGJvb2wpIGZpbmFsOworICAgIHZvaWQgbG9hZFJlc291cmNlKGNvbnN0IEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OkZyYW1lSWQmLCBjb25zdCBTdHJpbmcmIHVybCwgUmVm
PExvYWRSZXNvdXJjZUNhbGxiYWNrPiYmKSBmaW5hbDsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29s
OjpFcnJvclN0cmluZ09yPFN0cmluZz4gZ2V0U2VyaWFsaXplZENlcnRpZmljYXRlKGNvbnN0IElu
c3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OlJlcXVlc3RJZCYpIGZpbmFsOworICAgIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1
bnRpbWU6OlJlbW90ZU9iamVjdD4+IHJlc29sdmVXZWJTb2NrZXQoY29uc3QgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6TmV0d29yazo6UmVxdWVzdElkJiwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCkg
ZmluYWw7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzZXRJ
bnRlcmNlcHRpb25FbmFibGVkKGJvb2wpIGZpbmFsOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8dm9pZD4gYWRkSW50ZXJjZXB0aW9uKGNvbnN0IFN0cmluZyYgdXJsLCBJ
bnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpOZXR3b3JrU3RhZ2UsIE9wdGlvbmFsPGJvb2w+
JiYgY2FzZVNlbnNpdGl2ZSwgT3B0aW9uYWw8Ym9vbD4mJiBpc1JlZ2V4KSBmaW5hbDsKKyAgICBJ
bnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHJlbW92ZUludGVyY2VwdGlv
bihjb25zdCBTdHJpbmcmIHVybCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6TmV0d29y
a1N0YWdlLCBPcHRpb25hbDxib29sPiYmIGNhc2VTZW5zaXRpdmUsIE9wdGlvbmFsPGJvb2w+JiYg
aXNSZWdleCkgZmluYWw7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2
b2lkPiBpbnRlcmNlcHRDb250aW51ZShjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3Jr
OjpSZXF1ZXN0SWQmLCBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpOZXR3b3JrU3RhZ2Up
IGZpbmFsOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gaW50
ZXJjZXB0V2l0aFJlcXVlc3QoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6UmVx
dWVzdElkJiwgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWZQdHI8
SlNPTjo6T2JqZWN0PiYmIGhlYWRlcnMsIGNvbnN0IFN0cmluZyYgcG9zdERhdGEpIGZpbmFsOwor
ICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gaW50ZXJjZXB0V2l0
aFJlc3BvbnNlKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OlJlcXVlc3RJZCYs
IGNvbnN0IFN0cmluZyYgY29udGVudCwgYm9vbCBiYXNlNjRFbmNvZGVkLCBjb25zdCBTdHJpbmcm
IG1pbWVUeXBlLCBPcHRpb25hbDxpbnQ+JiYgc3RhdHVzLCBjb25zdCBTdHJpbmcmIHN0YXR1c1Rl
eHQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgaGVhZGVycykgZmluYWw7CisgICAgSW5zcGVjdG9y
OjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBpbnRlcmNlcHRSZXF1ZXN0V2l0aFJlc3Bv
bnNlKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OlJlcXVlc3RJZCYsIGNvbnN0
IFN0cmluZyYgY29udGVudCwgYm9vbCBiYXNlNjRFbmNvZGVkLCBjb25zdCBTdHJpbmcmIG1pbWVU
eXBlLCBpbnQgc3RhdHVzLCBjb25zdCBTdHJpbmcmIHN0YXR1c1RleHQsIFJlZjxKU09OOjpPYmpl
Y3Q+JiYgaGVhZGVycykgZmluYWw7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJp
bmdPcjx2b2lkPiBpbnRlcmNlcHRSZXF1ZXN0V2l0aEVycm9yKGNvbnN0IEluc3BlY3Rvcjo6UHJv
dG9jb2w6Ok5ldHdvcms6OlJlcXVlc3RJZCYsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6
OlJlc291cmNlRXJyb3JUeXBlKSBmaW5hbDsKIAogICAgIC8vIEluc3BlY3Rvckluc3RydW1lbnRh
dGlvbgogICAgIHZvaWQgd2lsbFJlY2FsY3VsYXRlU3R5bGUoKTsKQEAgLTEyNywzMiArMTI1LDI5
IEBAIHB1YmxpYzoKICAgICB2b2lkIGludGVyY2VwdFJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVz
cG9uc2UmLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
Y29uc3QgUmVzb3VyY2VSZXNwb25zZSYsIFJlZlB0cjxTaGFyZWRCdWZmZXI+KT4mJik7CiAgICAg
dm9pZCBpbnRlcmNlcHRSZXF1ZXN0KFJlc291cmNlTG9hZGVyJiwgRnVuY3Rpb248dm9pZChjb25z
dCBSZXNvdXJjZVJlcXVlc3QmKT4mJik7CiAKLSAgICB2b2lkIHNlYXJjaE90aGVyUmVxdWVzdHMo
Y29uc3QgSlNDOjpZYXJyOjpSZWd1bGFyRXhwcmVzc2lvbiYsIFJlZlB0cjxKU09OOjpBcnJheU9m
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OlNlYXJjaFJlc3VsdD4+Jik7Ci0gICAgdm9pZCBz
ZWFyY2hJblJlcXVlc3QoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgY29u
c3QgU3RyaW5nJiBxdWVyeSwgYm9vbCBjYXNlU2Vuc2l0aXZlLCBib29sIGlzUmVnZXgsIFJlZlB0
cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkdlbmVyaWNUeXBlczo6U2VhcmNo
TWF0Y2g+PiYpOworICAgIHZvaWQgc2VhcmNoT3RoZXJSZXF1ZXN0cyhjb25zdCBKU0M6OllhcnI6
OlJlZ3VsYXJFeHByZXNzaW9uJiwgUmVmPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6UGFnZTo6U2VhcmNoUmVzdWx0Pj4mKTsKKyAgICB2b2lkIHNlYXJjaEluUmVxdWVzdChJbnNw
ZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZyYsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6
Ok5ldHdvcms6OlJlcXVlc3RJZCYsIGNvbnN0IFN0cmluZyYgcXVlcnksIGJvb2wgY2FzZVNlbnNp
dGl2ZSwgYm9vbCBpc1JlZ2V4LCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpHZW5lcmljVHlwZXM6OlNlYXJjaE1hdGNoPj4mKTsKIAogcHJvdGVjdGVkOgogICAgIElu
c3BlY3Rvck5ldHdvcmtBZ2VudChXZWJBZ2VudENvbnRleHQmKTsKIAotICAgIHZpcnR1YWwgU3Ry
aW5nIGxvYWRlcklkZW50aWZpZXIoRG9jdW1lbnRMb2FkZXIqKSA9IDA7Ci0gICAgdmlydHVhbCBT
dHJpbmcgZnJhbWVJZGVudGlmaWVyKERvY3VtZW50TG9hZGVyKikgPSAwOworICAgIHZpcnR1YWwg
SW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6TG9hZGVySWQgbG9hZGVySWRlbnRpZmllcihE
b2N1bWVudExvYWRlciopID0gMDsKKyAgICB2aXJ0dWFsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5l
dHdvcms6OkZyYW1lSWQgZnJhbWVJZGVudGlmaWVyKERvY3VtZW50TG9hZGVyKikgPSAwOwogICAg
IHZpcnR1YWwgVmVjdG9yPFdlYlNvY2tldCo+IGFjdGl2ZVdlYlNvY2tldHMoY29uc3QgTG9ja0hv
bGRlciYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0UmVzb3VyY2VDYWNoaW5nRGlzYWJsZWQo
Ym9vbCkgPSAwOwotICAgIHZpcnR1YWwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgZnJhbWVJZCkgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBzZXRSZXNvdXJjZUNhY2hpbmdEaXNhYmxlZEludGVyYWwoYm9vbCkg
PSAwOworICAgIHZpcnR1YWwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9u
Q29udGV4dChJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZyYsIGNvbnN0IEluc3BlY3Rv
cjo6UHJvdG9jb2w6Ok5ldHdvcms6OkZyYW1lSWQmKSA9IDA7CiAgICAgdmlydHVhbCBib29sIHNo
b3VsZEZvcmNlQnVmZmVyaW5nTmV0d29ya1Jlc291cmNlRGF0YSgpIGNvbnN0ID0gMDsKIAogcHJp
dmF0ZToKLSAgICB2b2lkIGVuYWJsZSgpOwotCiAgICAgdm9pZCB3aWxsU2VuZFJlcXVlc3QodW5z
aWduZWQgbG9uZyBpZGVudGlmaWVyLCBEb2N1bWVudExvYWRlciosIFJlc291cmNlUmVxdWVzdCYs
IGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2UsIEluc3BlY3RvclBhZ2VB
Z2VudDo6UmVzb3VyY2VUeXBlKTsKIAotICAgIHVzaW5nIE5ldHdvcmtTdGFnZSA9IEluc3BlY3Rv
cjo6UHJvdG9jb2w6Ok5ldHdvcms6Ok5ldHdvcmtTdGFnZTsKLSAgICBib29sIHNob3VsZEludGVy
Y2VwdChVUkwsIE5ldHdvcmtTdGFnZSk7CisgICAgYm9vbCBzaG91bGRJbnRlcmNlcHQoVVJMLCBJ
bnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpOZXR3b3JrU3RhZ2UpOwogICAgIHZvaWQgY29u
dGludWVQZW5kaW5nUmVxdWVzdHMoKTsKICAgICB2b2lkIGNvbnRpbnVlUGVuZGluZ1Jlc3BvbnNl
cygpOwogCi0gICAgV2ViU29ja2V0KiB3ZWJTb2NrZXRGb3JSZXF1ZXN0SWQoY29uc3QgU3RyaW5n
JiByZXF1ZXN0SWQpOworICAgIFdlYlNvY2tldCogd2ViU29ja2V0Rm9yUmVxdWVzdElkKGNvbnN0
IEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OlJlcXVlc3RJZCYpOwogCi0gICAgUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OkluaXRpYXRvcj4gYnVpbGRJbml0aWF0b3JP
YmplY3QoRG9jdW1lbnQqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QqID0gbnVsbHB0cik7CisgICAg
UmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OkluaXRpYXRvcj4gYnVpbGRJbml0aWF0
b3JPYmplY3QoRG9jdW1lbnQqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QqID0gbnVsbHB0cik7CiAg
ICAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OlJlc291cmNlVGltaW5nPiBidWls
ZE9iamVjdEZvclRpbWluZyhjb25zdCBOZXR3b3JrTG9hZE1ldHJpY3MqLCBSZXNvdXJjZUxvYWRl
ciYpOwogICAgIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpNZXRyaWNzPiBidWls
ZE9iamVjdEZvck1ldHJpY3MoY29uc3QgTmV0d29ya0xvYWRNZXRyaWNzJik7CiAgICAgUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OlJlc3BvbnNlPiBidWlsZE9iamVjdEZvclJl
c291cmNlUmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYsIFJlc291cmNlTG9hZGVyKik7
CkBAIC0yMzYsNyArMjMxLDcgQEAgcHJpdmF0ZToKICAgICAgICAgU3RyaW5nIHVybDsKICAgICAg
ICAgYm9vbCBjYXNlU2Vuc2l0aXZlIHsgdHJ1ZSB9OwogICAgICAgICBib29sIGlzUmVnZXggeyBm
YWxzZSB9OwotICAgICAgICBOZXR3b3JrU3RhZ2UgbmV0d29ya1N0YWdlIHsgTmV0d29ya1N0YWdl
OjpSZXNwb25zZSB9OworICAgICAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpOZXR3
b3JrU3RhZ2UgbmV0d29ya1N0YWdlIHsgSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6TmV0
d29ya1N0YWdlOjpSZXNwb25zZSB9OwogCiAgICAgICAgIGlubGluZSBib29sIG9wZXJhdG9yPT0o
Y29uc3QgSW50ZXJjZXB0JiBvdGhlcikgY29uc3QKICAgICAgICAgewpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCmluZGV4
IDUzOWU4MTA1YjY2ZTdiMmE2YTA1NTcxYTFlMWM4Y2Q2YmRmMjdjOTAuLjhiZjdhZTFlMGQwNWEy
NjQ5YzEzYWJiMGQxNGQyMDg0Mzc3NTgwOTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUGFnZUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAKQEAgLTE1MSw3ICsxNTEs
NyBAQCBWZWN0b3I8Q2FjaGVkUmVzb3VyY2UqPiBJbnNwZWN0b3JQYWdlQWdlbnQ6OmNhY2hlZFJl
c291cmNlc0ZvckZyYW1lKEZyYW1lKiBmcmFtZQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZv
aWQgSW5zcGVjdG9yUGFnZUFnZW50OjpyZXNvdXJjZUNvbnRlbnQoRXJyb3JTdHJpbmcmIGVycm9y
U3RyaW5nLCBGcmFtZSogZnJhbWUsIGNvbnN0IFVSTCYgdXJsLCBTdHJpbmcqIHJlc3VsdCwgYm9v
bCogYmFzZTY0RW5jb2RlZCkKK3ZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpyZXNvdXJjZUNvbnRl
bnQoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgRnJhbWUqIGZyYW1lLCBjb25z
dCBVUkwmIHVybCwgU3RyaW5nKiByZXN1bHQsIGJvb2wqIGJhc2U2NEVuY29kZWQpCiB7CiAgICAg
RG9jdW1lbnRMb2FkZXIqIGxvYWRlciA9IGFzc2VydERvY3VtZW50TG9hZGVyKGVycm9yU3RyaW5n
LCBmcmFtZSk7CiAgICAgaWYgKCFsb2FkZXIpCkBAIC0yMTMsMzcgKzIxMywzNyBAQCBDYWNoZWRS
ZXNvdXJjZSogSW5zcGVjdG9yUGFnZUFnZW50OjpjYWNoZWRSZXNvdXJjZShGcmFtZSogZnJhbWUs
IGNvbnN0IFVSTCYgdXJsKQogICAgIHJldHVybiBjYWNoZWRSZXNvdXJjZTsKIH0KIAotSW5zcGVj
dG9yOjpQcm90b2NvbDo6UGFnZTo6UmVzb3VyY2VUeXBlIEluc3BlY3RvclBhZ2VBZ2VudDo6cmVz
b3VyY2VUeXBlSlNPTihJbnNwZWN0b3JQYWdlQWdlbnQ6OlJlc291cmNlVHlwZSByZXNvdXJjZVR5
cGUpCitQcm90b2NvbDo6UGFnZTo6UmVzb3VyY2VUeXBlIEluc3BlY3RvclBhZ2VBZ2VudDo6cmVz
b3VyY2VUeXBlSlNPTihJbnNwZWN0b3JQYWdlQWdlbnQ6OlJlc291cmNlVHlwZSByZXNvdXJjZVR5
cGUpCiB7CiAgICAgc3dpdGNoIChyZXNvdXJjZVR5cGUpIHsKICAgICBjYXNlIERvY3VtZW50UmVz
b3VyY2U6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpSZXNvdXJj
ZVR5cGU6OkRvY3VtZW50OworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OlBhZ2U6OlJlc291cmNl
VHlwZTo6RG9jdW1lbnQ7CiAgICAgY2FzZSBJbWFnZVJlc291cmNlOgotICAgICAgICByZXR1cm4g
SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6UmVzb3VyY2VUeXBlOjpJbWFnZTsKKyAgICAgICAg
cmV0dXJuIFByb3RvY29sOjpQYWdlOjpSZXNvdXJjZVR5cGU6OkltYWdlOwogICAgIGNhc2UgRm9u
dFJlc291cmNlOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6UmVz
b3VyY2VUeXBlOjpGb250OworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OlBhZ2U6OlJlc291cmNl
VHlwZTo6Rm9udDsKICAgICBjYXNlIFN0eWxlU2hlZXRSZXNvdXJjZToKLSAgICAgICAgcmV0dXJu
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OlJlc291cmNlVHlwZTo6U3R5bGVTaGVldDsKKyAg
ICAgICAgcmV0dXJuIFByb3RvY29sOjpQYWdlOjpSZXNvdXJjZVR5cGU6OlN0eWxlU2hlZXQ7CiAg
ICAgY2FzZSBTY3JpcHRSZXNvdXJjZToKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlBhZ2U6OlJlc291cmNlVHlwZTo6U2NyaXB0OworICAgICAgICByZXR1cm4gUHJvdG9jb2w6
OlBhZ2U6OlJlc291cmNlVHlwZTo6U2NyaXB0OwogICAgIGNhc2UgWEhSUmVzb3VyY2U6Ci0gICAg
ICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpSZXNvdXJjZVR5cGU6OlhIUjsK
KyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpQYWdlOjpSZXNvdXJjZVR5cGU6OlhIUjsKICAgICBj
YXNlIEZldGNoUmVzb3VyY2U6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpQ
YWdlOjpSZXNvdXJjZVR5cGU6OkZldGNoOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OlBhZ2U6
OlJlc291cmNlVHlwZTo6RmV0Y2g7CiAgICAgY2FzZSBQaW5nUmVzb3VyY2U6Ci0gICAgICAgIHJl
dHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpSZXNvdXJjZVR5cGU6OlBpbmc7CisgICAg
ICAgIHJldHVybiBQcm90b2NvbDo6UGFnZTo6UmVzb3VyY2VUeXBlOjpQaW5nOwogICAgIGNhc2Ug
QmVhY29uUmVzb3VyY2U6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdl
OjpSZXNvdXJjZVR5cGU6OkJlYWNvbjsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpQYWdlOjpS
ZXNvdXJjZVR5cGU6OkJlYWNvbjsKICAgICBjYXNlIFdlYlNvY2tldFJlc291cmNlOgotICAgICAg
ICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6UmVzb3VyY2VUeXBlOjpXZWJTb2Nr
ZXQ7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6UGFnZTo6UmVzb3VyY2VUeXBlOjpXZWJTb2Nr
ZXQ7CiAgICAgY2FzZSBPdGhlclJlc291cmNlOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQ
cm90b2NvbDo6UGFnZTo6UmVzb3VyY2VUeXBlOjpPdGhlcjsKKyAgICAgICAgcmV0dXJuIFByb3Rv
Y29sOjpQYWdlOjpSZXNvdXJjZVR5cGU6Ok90aGVyOwogI2lmIEVOQUJMRShBUFBMSUNBVElPTl9N
QU5JRkVTVCkKICAgICBjYXNlIEFwcGxpY2F0aW9uTWFuaWZlc3RSZXNvdXJjZToKICAgICAgICAg
YnJlYWs7CiAjZW5kaWYKICAgICB9Ci0gICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBh
Z2U6OlJlc291cmNlVHlwZTo6T3RoZXI7CisgICAgcmV0dXJuIFByb3RvY29sOjpQYWdlOjpSZXNv
dXJjZVR5cGU6Ok90aGVyOwogfQogCiBJbnNwZWN0b3JQYWdlQWdlbnQ6OlJlc291cmNlVHlwZSBJ
bnNwZWN0b3JQYWdlQWdlbnQ6Omluc3BlY3RvclJlc291cmNlVHlwZShDYWNoZWRSZXNvdXJjZTo6
VHlwZSB0eXBlKQpAQCAtMjk3LDcgKzI5Nyw3IEBAIEluc3BlY3RvclBhZ2VBZ2VudDo6UmVzb3Vy
Y2VUeXBlIEluc3BlY3RvclBhZ2VBZ2VudDo6aW5zcGVjdG9yUmVzb3VyY2VUeXBlKGNvbnN0CiAg
ICAgcmV0dXJuIGluc3BlY3RvclJlc291cmNlVHlwZShjYWNoZWRSZXNvdXJjZS50eXBlKCkpOwog
fQogCi1JbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpSZXNvdXJjZVR5cGUgSW5zcGVjdG9yUGFn
ZUFnZW50OjpjYWNoZWRSZXNvdXJjZVR5cGVKU09OKGNvbnN0IENhY2hlZFJlc291cmNlJiBjYWNo
ZWRSZXNvdXJjZSkKK1Byb3RvY29sOjpQYWdlOjpSZXNvdXJjZVR5cGUgSW5zcGVjdG9yUGFnZUFn
ZW50OjpjYWNoZWRSZXNvdXJjZVR5cGVKU09OKGNvbnN0IENhY2hlZFJlc291cmNlJiBjYWNoZWRS
ZXNvdXJjZSkKIHsKICAgICByZXR1cm4gcmVzb3VyY2VUeXBlSlNPTihpbnNwZWN0b3JSZXNvdXJj
ZVR5cGUoY2FjaGVkUmVzb3VyY2UpKTsKIH0KQEAgLTMxMSw3ICszMTEsNyBAQCBGcmFtZSogSW5z
cGVjdG9yUGFnZUFnZW50OjpmaW5kRnJhbWVXaXRoU2VjdXJpdHlPcmlnaW4oUGFnZSYgcGFnZSwg
Y29uc3QgU3RyaW5nJgogICAgIHJldHVybiBudWxscHRyOwogfQogCi1Eb2N1bWVudExvYWRlciog
SW5zcGVjdG9yUGFnZUFnZW50Ojphc3NlcnREb2N1bWVudExvYWRlcihFcnJvclN0cmluZyYgZXJy
b3JTdHJpbmcsIEZyYW1lKiBmcmFtZSkKK0RvY3VtZW50TG9hZGVyKiBJbnNwZWN0b3JQYWdlQWdl
bnQ6OmFzc2VydERvY3VtZW50TG9hZGVyKFByb3RvY29sOjpFcnJvclN0cmluZyYgZXJyb3JTdHJp
bmcsIEZyYW1lKiBmcmFtZSkKIHsKICAgICBGcmFtZUxvYWRlciYgZnJhbWVMb2FkZXIgPSBmcmFt
ZS0+bG9hZGVyKCk7CiAgICAgRG9jdW1lbnRMb2FkZXIqIGRvY3VtZW50TG9hZGVyID0gZnJhbWVM
b2FkZXIuZG9jdW1lbnRMb2FkZXIoKTsKQEAgLTMzOCwxNiArMzM4LDEzIEBAIHZvaWQgSW5zcGVj
dG9yUGFnZUFnZW50OjpkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9u
dGVuZFJvdXRlciosCiAKIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50Ojp3aWxsRGVzdHJveUZyb250
ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24pCiB7Ci0gICAgRXJyb3JT
dHJpbmcgdW51c2VkOwotICAgIGRpc2FibGUodW51c2VkKTsKKyAgICBkaXNhYmxlKCk7CiB9CiAK
LXZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjplbmFibGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5n
KQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yUGFnZUFnZW50OjplbmFi
bGUoKQogewotICAgIGlmIChtX2luc3RydW1lbnRpbmdBZ2VudHMuZW5hYmxlZFBhZ2VBZ2VudCgp
ID09IHRoaXMpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiUGFnZSBkb21haW4gYWxyZWFkeSBl
bmFibGVkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmIChtX2luc3RydW1lbnRp
bmdBZ2VudHMuZW5hYmxlZFBhZ2VBZ2VudCgpID09IHRoaXMpCisgICAgICAgIHJldHVybiBtYWtl
VW5leHBlY3RlZCgiUGFnZSBkb21haW4gYWxyZWFkeSBlbmFibGVkIl9zKTsKIAogICAgIG1faW5z
dHJ1bWVudGluZ0FnZW50cy5zZXRFbmFibGVkUGFnZUFnZW50KHRoaXMpOwogCkBAIC0zNTgsMjEg
KzM1NSwyMiBAQCB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6ZW5hYmxlKEVycm9yU3RyaW5nJiBl
cnJvclN0cmluZykKICNpZiBFTkFCTEUoREFSS19NT0RFX0NTUykgfHwgSEFWRShPU19EQVJLX01P
REVfU1VQUE9SVCkKICAgICBkZWZhdWx0QXBwZWFyYW5jZURpZENoYW5nZShtX2luc3BlY3RlZFBh
Z2UuZGVmYXVsdFVzZURhcmtBcHBlYXJhbmNlKCkpOwogI2VuZGlmCisKKyAgICByZXR1cm4geyB9
OwogfQogCi12b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6ZGlzYWJsZShFcnJvclN0cmluZyYpCitQ
cm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JQYWdlQWdlbnQ6OmRpc2FibGUo
KQogewogICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy5zZXRFbmFibGVkUGFnZUFnZW50KG51bGxw
dHIpOwogCi0gICAgRXJyb3JTdHJpbmcgdW51c2VkOwotICAgIHNldFNob3dQYWludFJlY3RzKHVu
dXNlZCwgZmFsc2UpOworICAgIHNldFNob3dQYWludFJlY3RzKGZhbHNlKTsKICNpZiAhUExBVEZP
Uk0oSU9TX0ZBTUlMWSkKLSAgICBzZXRTaG93UnVsZXJzKHVudXNlZCwgZmFsc2UpOworICAgIHNl
dFNob3dSdWxlcnMoZmFsc2UpOwogI2VuZGlmCi0gICAgb3ZlcnJpZGVVc2VyQWdlbnQodW51c2Vk
LCBudWxscHRyKTsKLSAgICBzZXRFbXVsYXRlZE1lZGlhKHVudXNlZCwgZW1wdHlTdHJpbmcoKSk7
CisgICAgb3ZlcnJpZGVVc2VyQWdlbnQobnVsbFN0cmluZygpKTsKKyAgICBzZXRFbXVsYXRlZE1l
ZGlhKGVtcHR5U3RyaW5nKCkpOwogI2lmIEVOQUJMRShEQVJLX01PREVfQ1NTKSB8fCBIQVZFKE9T
X0RBUktfTU9ERV9TVVBQT1JUKQotICAgIHNldEZvcmNlZEFwcGVhcmFuY2UodW51c2VkLCBlbXB0
eVN0cmluZygpKTsKKyAgICBzZXRGb3JjZWRBcHBlYXJhbmNlKFdURjo6bnVsbG9wdCk7CiAjZW5k
aWYKIAogICAgIGF1dG8mIGluc3BlY3RlZFBhZ2VTZXR0aW5ncyA9IG1faW5zcGVjdGVkUGFnZS5z
ZXR0aW5ncygpOwpAQCAtMzkxLDYgKzM4OSw4IEBAIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50Ojpk
aXNhYmxlKEVycm9yU3RyaW5nJikKICAgICBtX2NsaWVudC0+c2V0RGV2ZWxvcGVyUHJlZmVyZW5j
ZU92ZXJyaWRlKEluc3BlY3RvckNsaWVudDo6RGV2ZWxvcGVyUHJlZmVyZW5jZTo6QWRDbGlja0F0
dHJpYnV0aW9uRGVidWdNb2RlRW5hYmxlZCwgV1RGOjpudWxsb3B0KTsKICAgICBtX2NsaWVudC0+
c2V0RGV2ZWxvcGVyUHJlZmVyZW5jZU92ZXJyaWRlKEluc3BlY3RvckNsaWVudDo6RGV2ZWxvcGVy
UHJlZmVyZW5jZTo6SVRQRGVidWdNb2RlRW5hYmxlZCwgV1RGOjpudWxsb3B0KTsKICAgICBtX2Ns
aWVudC0+c2V0RGV2ZWxvcGVyUHJlZmVyZW5jZU92ZXJyaWRlKEluc3BlY3RvckNsaWVudDo6RGV2
ZWxvcGVyUHJlZmVyZW5jZTo6TW9ja0NhcHR1cmVEZXZpY2VzRW5hYmxlZCwgV1RGOjpudWxsb3B0
KTsKKworICAgIHJldHVybiB7IH07CiB9CiAKIGRvdWJsZSBJbnNwZWN0b3JQYWdlQWdlbnQ6OnRp
bWVzdGFtcCgpCkBAIC0zOTgsMjEgKzM5OCwxOSBAQCBkb3VibGUgSW5zcGVjdG9yUGFnZUFnZW50
Ojp0aW1lc3RhbXAoKQogICAgIHJldHVybiBtX2Vudmlyb25tZW50LmV4ZWN1dGlvblN0b3B3YXRj
aCgpLmVsYXBzZWRUaW1lKCkuc2Vjb25kcygpOwogfQogCi12b2lkIEluc3BlY3RvclBhZ2VBZ2Vu
dDo6cmVsb2FkKEVycm9yU3RyaW5nJiwgY29uc3QgYm9vbCogb3B0aW9uYWxSZWxvYWRGcm9tT3Jp
Z2luLCBjb25zdCBib29sKiBvcHRpb25hbFJldmFsaWRhdGVBbGxSZXNvdXJjZXMpCitQcm90b2Nv
bDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JQYWdlQWdlbnQ6OnJlbG9hZChPcHRpb25h
bDxib29sPiYmIGlnbm9yZUNhY2hlLCBPcHRpb25hbDxib29sPiYmIHJldmFsaWRhdGVBbGxSZXNv
dXJjZXMpCiB7Ci0gICAgYm9vbCByZWxvYWRGcm9tT3JpZ2luID0gb3B0aW9uYWxSZWxvYWRGcm9t
T3JpZ2luICYmICpvcHRpb25hbFJlbG9hZEZyb21PcmlnaW47Ci0gICAgYm9vbCByZXZhbGlkYXRl
QWxsUmVzb3VyY2VzID0gb3B0aW9uYWxSZXZhbGlkYXRlQWxsUmVzb3VyY2VzICYmICpvcHRpb25h
bFJldmFsaWRhdGVBbGxSZXNvdXJjZXM7Ci0KICAgICBPcHRpb25TZXQ8UmVsb2FkT3B0aW9uPiBy
ZWxvYWRPcHRpb25zOwotICAgIGlmIChyZWxvYWRGcm9tT3JpZ2luKQorICAgIGlmIChpZ25vcmVD
YWNoZSAmJiAqaWdub3JlQ2FjaGUpCiAgICAgICAgIHJlbG9hZE9wdGlvbnMuYWRkKFJlbG9hZE9w
dGlvbjo6RnJvbU9yaWdpbik7Ci0gICAgaWYgKCFyZXZhbGlkYXRlQWxsUmVzb3VyY2VzKQorICAg
IGlmICghcmV2YWxpZGF0ZUFsbFJlc291cmNlcyB8fCAhKnJldmFsaWRhdGVBbGxSZXNvdXJjZXMp
CiAgICAgICAgIHJlbG9hZE9wdGlvbnMuYWRkKFJlbG9hZE9wdGlvbjo6RXhwaXJlZE9ubHkpOwot
CiAgICAgbV9pbnNwZWN0ZWRQYWdlLm1haW5GcmFtZSgpLmxvYWRlcigpLnJlbG9hZChyZWxvYWRP
cHRpb25zKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yUGFnZUFnZW50
OjpuYXZpZ2F0ZShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgdXJsKQorUHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yUGFnZUFnZW50OjpuYXZpZ2F0ZShjb25zdCBTdHJp
bmcmIHVybCkKIHsKICAgICBVc2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3IgeyBQcm9jZXNz
aW5nVXNlckdlc3R1cmUgfTsKICAgICBGcmFtZSYgZnJhbWUgPSBtX2luc3BlY3RlZFBhZ2UubWFp
bkZyYW1lKCk7CkBAIC00MjEsMTExICs0MTksOTcgQEAgdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6
Om5hdmlnYXRlKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiB1cmwpCiAgICAgRnJhbWVMb2Fk
UmVxdWVzdCBmcmFtZUxvYWRSZXF1ZXN0IHsgKmZyYW1lLmRvY3VtZW50KCksIGZyYW1lLmRvY3Vt
ZW50KCktPnNlY3VyaXR5T3JpZ2luKCksIFdURk1vdmUocmVzb3VyY2VSZXF1ZXN0KSwgIl9zZWxm
Il9zLCBJbml0aWF0ZWRCeU1haW5GcmFtZTo6VW5rbm93biB9OwogICAgIGZyYW1lTG9hZFJlcXVl
c3QuZGlzYWJsZU5hdmlnYXRpb25Ub0ludmFsaWRVUkwoKTsKICAgICBmcmFtZS5sb2FkZXIoKS5j
aGFuZ2VMb2NhdGlvbihXVEZNb3ZlKGZyYW1lTG9hZFJlcXVlc3QpKTsKKworICAgIHJldHVybiB7
IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpvdmVycmlkZVVzZXJBZ2VudChFcnJv
clN0cmluZyYsIGNvbnN0IFN0cmluZyogdmFsdWUpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2
b2lkPiBJbnNwZWN0b3JQYWdlQWdlbnQ6Om92ZXJyaWRlVXNlckFnZW50KGNvbnN0IFN0cmluZyYg
dmFsdWUpCiB7Ci0gICAgbV91c2VyQWdlbnRPdmVycmlkZSA9IHZhbHVlID8gKnZhbHVlIDogU3Ry
aW5nKCk7CisgICAgbV91c2VyQWdlbnRPdmVycmlkZSA9IHZhbHVlOworCisgICAgcmV0dXJuIHsg
fTsKIH0KIAotc3RhdGljIGlubGluZSBPcHRpb25hbDxib29sPiBhc09wdGlvbmFsQm9vbChjb25z
dCBib29sKiB2YWx1ZSkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvclBh
Z2VBZ2VudDo6b3ZlcnJpZGVTZXR0aW5nKFByb3RvY29sOjpQYWdlOjpTZXR0aW5nIHNldHRpbmcs
IE9wdGlvbmFsPGJvb2w+JiYgdmFsdWUpCiB7Ci0gICAgaWYgKCF2YWx1ZSkKLSAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKLSAgICByZXR1cm4gKnZhbHVlOwotfQotCi12b2lkIEluc3BlY3Rv
clBhZ2VBZ2VudDo6b3ZlcnJpZGVTZXR0aW5nKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29u
c3QgU3RyaW5nJiBzZXR0aW5nU3RyaW5nLCBjb25zdCBib29sKiB2YWx1ZSkKLXsKLSAgICBpZiAo
c2V0dGluZ1N0cmluZy5pc0VtcHR5KCkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAic2V0dGlu
Z1N0cmluZyBpcyBlbXB0eSJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8g
c2V0dGluZyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6Okluc3BlY3RvckhlbHBlcnM6OnBhcnNlRW51
bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpTZXR0aW5nPihzZXR0
aW5nU3RyaW5nKTsKLSAgICBpZiAoIXNldHRpbmcpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSBt
YWtlU3RyaW5nKCJVbmtub3duIHNldHRpbmdTdHJpbmc6ICJfcywgc2V0dGluZ1N0cmluZyk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBhdXRvJiBpbnNwZWN0ZWRQYWdlU2V0dGluZ3Mg
PSBtX2luc3BlY3RlZFBhZ2Uuc2V0dGluZ3MoKTsKIAotICAgIGF1dG8gb3ZlcnJpZGVWYWx1ZSA9
IGFzT3B0aW9uYWxCb29sKHZhbHVlKTsKLSAgICBzd2l0Y2ggKHNldHRpbmcudmFsdWUoKSkgewot
ICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6U2V0dGluZzo6QWRDbGlja0F0dHJp
YnV0aW9uRGVidWdNb2RlRW5hYmxlZDoKLSAgICAgICAgbV9jbGllbnQtPnNldERldmVsb3BlclBy
ZWZlcmVuY2VPdmVycmlkZShJbnNwZWN0b3JDbGllbnQ6OkRldmVsb3BlclByZWZlcmVuY2U6OkFk
Q2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZUVuYWJsZWQsIG92ZXJyaWRlVmFsdWUpOwotICAgICAg
ICByZXR1cm47CisgICAgc3dpdGNoIChzZXR0aW5nKSB7CisgICAgY2FzZSBQcm90b2NvbDo6UGFn
ZTo6U2V0dGluZzo6QWRDbGlja0F0dHJpYnV0aW9uRGVidWdNb2RlRW5hYmxlZDoKKyAgICAgICAg
bV9jbGllbnQtPnNldERldmVsb3BlclByZWZlcmVuY2VPdmVycmlkZShJbnNwZWN0b3JDbGllbnQ6
OkRldmVsb3BlclByZWZlcmVuY2U6OkFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZUVuYWJsZWQs
IHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90
b2NvbDo6UGFnZTo6U2V0dGluZzo6QXV0aG9yQW5kVXNlclN0eWxlc0VuYWJsZWQ6Ci0gICAgICAg
IGluc3BlY3RlZFBhZ2VTZXR0aW5ncy5zZXRBdXRob3JBbmRVc2VyU3R5bGVzRW5hYmxlZEluc3Bl
Y3Rvck92ZXJyaWRlKG92ZXJyaWRlVmFsdWUpOwotICAgICAgICByZXR1cm47CisgICAgY2FzZSBQ
cm90b2NvbDo6UGFnZTo6U2V0dGluZzo6QXV0aG9yQW5kVXNlclN0eWxlc0VuYWJsZWQ6CisgICAg
ICAgIGluc3BlY3RlZFBhZ2VTZXR0aW5ncy5zZXRBdXRob3JBbmRVc2VyU3R5bGVzRW5hYmxlZElu
c3BlY3Rvck92ZXJyaWRlKHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGNhc2Ug
SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6U2V0dGluZzo6SUNFQ2FuZGlkYXRlRmlsdGVyaW5n
RW5hYmxlZDoKLSAgICAgICAgaW5zcGVjdGVkUGFnZVNldHRpbmdzLnNldElDRUNhbmRpZGF0ZUZp
bHRlcmluZ0VuYWJsZWRJbnNwZWN0b3JPdmVycmlkZShvdmVycmlkZVZhbHVlKTsKLSAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgUHJvdG9jb2w6OlBhZ2U6OlNldHRpbmc6OklDRUNhbmRpZGF0ZUZp
bHRlcmluZ0VuYWJsZWQ6CisgICAgICAgIGluc3BlY3RlZFBhZ2VTZXR0aW5ncy5zZXRJQ0VDYW5k
aWRhdGVGaWx0ZXJpbmdFbmFibGVkSW5zcGVjdG9yT3ZlcnJpZGUodmFsdWUpOworICAgICAgICBy
ZXR1cm4geyB9OwogCi0gICAgY2FzZSBJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpTZXR0aW5n
OjpJVFBEZWJ1Z01vZGVFbmFibGVkOgotICAgICAgICBtX2NsaWVudC0+c2V0RGV2ZWxvcGVyUHJl
ZmVyZW5jZU92ZXJyaWRlKEluc3BlY3RvckNsaWVudDo6RGV2ZWxvcGVyUHJlZmVyZW5jZTo6SVRQ
RGVidWdNb2RlRW5hYmxlZCwgb3ZlcnJpZGVWYWx1ZSk7Ci0gICAgICAgIHJldHVybjsKKyAgICBj
YXNlIFByb3RvY29sOjpQYWdlOjpTZXR0aW5nOjpJVFBEZWJ1Z01vZGVFbmFibGVkOgorICAgICAg
ICBtX2NsaWVudC0+c2V0RGV2ZWxvcGVyUHJlZmVyZW5jZU92ZXJyaWRlKEluc3BlY3RvckNsaWVu
dDo6RGV2ZWxvcGVyUHJlZmVyZW5jZTo6SVRQRGVidWdNb2RlRW5hYmxlZCwgdmFsdWUpOworICAg
ICAgICByZXR1cm4geyB9OwogCi0gICAgY2FzZSBJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpT
ZXR0aW5nOjpJbWFnZXNFbmFibGVkOgotICAgICAgICBpbnNwZWN0ZWRQYWdlU2V0dGluZ3Muc2V0
SW1hZ2VzRW5hYmxlZEluc3BlY3Rvck92ZXJyaWRlKG92ZXJyaWRlVmFsdWUpOwotICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBQcm90b2NvbDo6UGFnZTo6U2V0dGluZzo6SW1hZ2VzRW5hYmxlZDoK
KyAgICAgICAgaW5zcGVjdGVkUGFnZVNldHRpbmdzLnNldEltYWdlc0VuYWJsZWRJbnNwZWN0b3JP
dmVycmlkZSh2YWx1ZSk7CisgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBjYXNlIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlBhZ2U6OlNldHRpbmc6Ok1lZGlhQ2FwdHVyZVJlcXVpcmVzU2VjdXJlQ29u
bmVjdGlvbjoKLSAgICAgICAgaW5zcGVjdGVkUGFnZVNldHRpbmdzLnNldE1lZGlhQ2FwdHVyZVJl
cXVpcmVzU2VjdXJlQ29ubmVjdGlvbkluc3BlY3Rvck92ZXJyaWRlKG92ZXJyaWRlVmFsdWUpOwot
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBQcm90b2NvbDo6UGFnZTo6U2V0dGluZzo6TWVkaWFD
YXB0dXJlUmVxdWlyZXNTZWN1cmVDb25uZWN0aW9uOgorICAgICAgICBpbnNwZWN0ZWRQYWdlU2V0
dGluZ3Muc2V0TWVkaWFDYXB0dXJlUmVxdWlyZXNTZWN1cmVDb25uZWN0aW9uSW5zcGVjdG9yT3Zl
cnJpZGUodmFsdWUpOworICAgICAgICByZXR1cm4geyB9OwogCi0gICAgY2FzZSBJbnNwZWN0b3I6
OlByb3RvY29sOjpQYWdlOjpTZXR0aW5nOjpNb2NrQ2FwdHVyZURldmljZXNFbmFibGVkOgotICAg
ICAgICBpbnNwZWN0ZWRQYWdlU2V0dGluZ3Muc2V0TW9ja0NhcHR1cmVEZXZpY2VzRW5hYmxlZElu
c3BlY3Rvck92ZXJyaWRlKG92ZXJyaWRlVmFsdWUpOwotICAgICAgICBtX2NsaWVudC0+c2V0RGV2
ZWxvcGVyUHJlZmVyZW5jZU92ZXJyaWRlKEluc3BlY3RvckNsaWVudDo6RGV2ZWxvcGVyUHJlZmVy
ZW5jZTo6TW9ja0NhcHR1cmVEZXZpY2VzRW5hYmxlZCwgb3ZlcnJpZGVWYWx1ZSk7Ci0gICAgICAg
IHJldHVybjsKKyAgICBjYXNlIFByb3RvY29sOjpQYWdlOjpTZXR0aW5nOjpNb2NrQ2FwdHVyZURl
dmljZXNFbmFibGVkOgorICAgICAgICBpbnNwZWN0ZWRQYWdlU2V0dGluZ3Muc2V0TW9ja0NhcHR1
cmVEZXZpY2VzRW5hYmxlZEluc3BlY3Rvck92ZXJyaWRlKHZhbHVlKTsKKyAgICAgICAgbV9jbGll
bnQtPnNldERldmVsb3BlclByZWZlcmVuY2VPdmVycmlkZShJbnNwZWN0b3JDbGllbnQ6OkRldmVs
b3BlclByZWZlcmVuY2U6Ok1vY2tDYXB0dXJlRGV2aWNlc0VuYWJsZWQsIHZhbHVlKTsKKyAgICAg
ICAgcmV0dXJuIHsgfTsKIAotICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6U2V0
dGluZzo6TmVlZHNTaXRlU3BlY2lmaWNRdWlya3M6Ci0gICAgICAgIGluc3BlY3RlZFBhZ2VTZXR0
aW5ncy5zZXROZWVkc1NpdGVTcGVjaWZpY1F1aXJrc0luc3BlY3Rvck92ZXJyaWRlKG92ZXJyaWRl
VmFsdWUpOwotICAgICAgICByZXR1cm47CisgICAgY2FzZSBQcm90b2NvbDo6UGFnZTo6U2V0dGlu
Zzo6TmVlZHNTaXRlU3BlY2lmaWNRdWlya3M6CisgICAgICAgIGluc3BlY3RlZFBhZ2VTZXR0aW5n
cy5zZXROZWVkc1NpdGVTcGVjaWZpY1F1aXJrc0luc3BlY3Rvck92ZXJyaWRlKHZhbHVlKTsKKyAg
ICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6
U2V0dGluZzo6U2NyaXB0RW5hYmxlZDoKLSAgICAgICAgaW5zcGVjdGVkUGFnZVNldHRpbmdzLnNl
dFNjcmlwdEVuYWJsZWRJbnNwZWN0b3JPdmVycmlkZShvdmVycmlkZVZhbHVlKTsKLSAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgUHJvdG9jb2w6OlBhZ2U6OlNldHRpbmc6OlNjcmlwdEVuYWJsZWQ6
CisgICAgICAgIGluc3BlY3RlZFBhZ2VTZXR0aW5ncy5zZXRTY3JpcHRFbmFibGVkSW5zcGVjdG9y
T3ZlcnJpZGUodmFsdWUpOworICAgICAgICByZXR1cm4geyB9OwogCi0gICAgY2FzZSBJbnNwZWN0
b3I6OlByb3RvY29sOjpQYWdlOjpTZXR0aW5nOjpTaG93RGVidWdCb3JkZXJzOgotICAgICAgICBp
bnNwZWN0ZWRQYWdlU2V0dGluZ3Muc2V0U2hvd0RlYnVnQm9yZGVyc0luc3BlY3Rvck92ZXJyaWRl
KG92ZXJyaWRlVmFsdWUpOwotICAgICAgICByZXR1cm47CisgICAgY2FzZSBQcm90b2NvbDo6UGFn
ZTo6U2V0dGluZzo6U2hvd0RlYnVnQm9yZGVyczoKKyAgICAgICAgaW5zcGVjdGVkUGFnZVNldHRp
bmdzLnNldFNob3dEZWJ1Z0JvcmRlcnNJbnNwZWN0b3JPdmVycmlkZSh2YWx1ZSk7CisgICAgICAg
IHJldHVybiB7IH07CiAKLSAgICBjYXNlIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OlNldHRp
bmc6OlNob3dSZXBhaW50Q291bnRlcjoKLSAgICAgICAgaW5zcGVjdGVkUGFnZVNldHRpbmdzLnNl
dFNob3dSZXBhaW50Q291bnRlckluc3BlY3Rvck92ZXJyaWRlKG92ZXJyaWRlVmFsdWUpOwotICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBQcm90b2NvbDo6UGFnZTo6U2V0dGluZzo6U2hvd1JlcGFp
bnRDb3VudGVyOgorICAgICAgICBpbnNwZWN0ZWRQYWdlU2V0dGluZ3Muc2V0U2hvd1JlcGFpbnRD
b3VudGVySW5zcGVjdG9yT3ZlcnJpZGUodmFsdWUpOworICAgICAgICByZXR1cm4geyB9OwogCi0g
ICAgY2FzZSBJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpTZXR0aW5nOjpXZWJSVENFbmNyeXB0
aW9uRW5hYmxlZDoKLSAgICAgICAgaW5zcGVjdGVkUGFnZVNldHRpbmdzLnNldFdlYlJUQ0VuY3J5
cHRpb25FbmFibGVkSW5zcGVjdG9yT3ZlcnJpZGUob3ZlcnJpZGVWYWx1ZSk7Ci0gICAgICAgIHJl
dHVybjsKKyAgICBjYXNlIFByb3RvY29sOjpQYWdlOjpTZXR0aW5nOjpXZWJSVENFbmNyeXB0aW9u
RW5hYmxlZDoKKyAgICAgICAgaW5zcGVjdGVkUGFnZVNldHRpbmdzLnNldFdlYlJUQ0VuY3J5cHRp
b25FbmFibGVkSW5zcGVjdG9yT3ZlcnJpZGUodmFsdWUpOworICAgICAgICByZXR1cm4geyB9Owog
Ci0gICAgY2FzZSBJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpTZXR0aW5nOjpXZWJTZWN1cml0
eUVuYWJsZWQ6Ci0gICAgICAgIGluc3BlY3RlZFBhZ2VTZXR0aW5ncy5zZXRXZWJTZWN1cml0eUVu
YWJsZWRJbnNwZWN0b3JPdmVycmlkZShvdmVycmlkZVZhbHVlKTsKLSAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgUHJvdG9jb2w6OlBhZ2U6OlNldHRpbmc6OldlYlNlY3VyaXR5RW5hYmxlZDoKKyAg
ICAgICAgaW5zcGVjdGVkUGFnZVNldHRpbmdzLnNldFdlYlNlY3VyaXR5RW5hYmxlZEluc3BlY3Rv
ck92ZXJyaWRlKHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4geyB9OwogfQogCi1zdGF0aWMgSW5zcGVjdG9y
OjpQcm90b2NvbDo6UGFnZTo6Q29va2llU2FtZVNpdGVQb2xpY3kgY29va2llU2FtZVNpdGVQb2xp
Y3lKU09OKENvb2tpZTo6U2FtZVNpdGVQb2xpY3kgcG9saWN5KQorc3RhdGljIFByb3RvY29sOjpQ
YWdlOjpDb29raWVTYW1lU2l0ZVBvbGljeSBjb29raWVTYW1lU2l0ZVBvbGljeUpTT04oQ29va2ll
OjpTYW1lU2l0ZVBvbGljeSBwb2xpY3kpCiB7CiAgICAgc3dpdGNoIChwb2xpY3kpIHsKICAgICBj
YXNlIENvb2tpZTo6U2FtZVNpdGVQb2xpY3k6Ok5vbmU6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0
b3I6OlByb3RvY29sOjpQYWdlOjpDb29raWVTYW1lU2l0ZVBvbGljeTo6Tm9uZTsKKyAgICAgICAg
cmV0dXJuIFByb3RvY29sOjpQYWdlOjpDb29raWVTYW1lU2l0ZVBvbGljeTo6Tm9uZTsKICAgICBj
YXNlIENvb2tpZTo6U2FtZVNpdGVQb2xpY3k6OkxheDoKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlBhZ2U6OkNvb2tpZVNhbWVTaXRlUG9saWN5OjpMYXg7CisgICAgICAgIHJl
dHVybiBQcm90b2NvbDo6UGFnZTo6Q29va2llU2FtZVNpdGVQb2xpY3k6OkxheDsKICAgICBjYXNl
IENvb2tpZTo6U2FtZVNpdGVQb2xpY3k6OlN0cmljdDoKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlBhZ2U6OkNvb2tpZVNhbWVTaXRlUG9saWN5OjpTdHJpY3Q7CisgICAgICAg
IHJldHVybiBQcm90b2NvbDo6UGFnZTo6Q29va2llU2FtZVNpdGVQb2xpY3k6OlN0cmljdDsKICAg
ICB9CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJv
dG9jb2w6OlBhZ2U6OkNvb2tpZVNhbWVTaXRlUG9saWN5OjpOb25lOworICAgIHJldHVybiBQcm90
b2NvbDo6UGFnZTo6Q29va2llU2FtZVNpdGVQb2xpY3k6Ok5vbmU7CiB9CiAKLXN0YXRpYyBSZWY8
SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6Q29va2llPiBidWlsZE9iamVjdEZvckNvb2tpZShj
b25zdCBDb29raWUmIGNvb2tpZSkKK3N0YXRpYyBSZWY8UHJvdG9jb2w6OlBhZ2U6OkNvb2tpZT4g
YnVpbGRPYmplY3RGb3JDb29raWUoY29uc3QgQ29va2llJiBjb29raWUpCiB7Ci0gICAgcmV0dXJu
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkNvb2tpZTo6Y3JlYXRlKCkKKyAgICByZXR1cm4g
UHJvdG9jb2w6OlBhZ2U6OkNvb2tpZTo6Y3JlYXRlKCkKICAgICAgICAgLnNldE5hbWUoY29va2ll
Lm5hbWUpCiAgICAgICAgIC5zZXRWYWx1ZShjb29raWUudmFsdWUpCiAgICAgICAgIC5zZXREb21h
aW4oY29va2llLmRvbWFpbikKQEAgLTUzOCw5ICs1MjIsOSBAQCBzdGF0aWMgUmVmPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlBhZ2U6OkNvb2tpZT4gYnVpbGRPYmplY3RGb3JDb29raWUoY29uc3QgQ29v
a2llJgogICAgICAgICAucmVsZWFzZSgpOwogfQogCi1zdGF0aWMgUmVmPEpTT046OkFycmF5T2Y8
SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6Q29va2llPj4gYnVpbGRBcnJheUZvckNvb2tpZXMo
TGlzdEhhc2hTZXQ8Q29va2llPiYgY29va2llc0xpc3QpCitzdGF0aWMgUmVmPEpTT046OkFycmF5
T2Y8UHJvdG9jb2w6OlBhZ2U6OkNvb2tpZT4+IGJ1aWxkQXJyYXlGb3JDb29raWVzKExpc3RIYXNo
U2V0PENvb2tpZT4mIGNvb2tpZXNMaXN0KQogewotICAgIGF1dG8gY29va2llcyA9IEpTT046OkFy
cmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6Q29va2llPjo6Y3JlYXRlKCk7CisgICAg
YXV0byBjb29raWVzID0gSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UGFnZTo6Q29va2llPjo6Y3Jl
YXRlKCk7CiAKICAgICBmb3IgKGNvbnN0IGF1dG8mIGNvb2tpZSA6IGNvb2tpZXNMaXN0KQogICAg
ICAgICBjb29raWVzLT5hZGRJdGVtKGJ1aWxkT2JqZWN0Rm9yQ29va2llKGNvb2tpZSkpOwpAQCAt
NTYwLDcgKzU0NCw3IEBAIHN0YXRpYyBWZWN0b3I8VVJMPiBhbGxSZXNvdXJjZXNVUkxzRm9yRnJh
bWUoRnJhbWUqIGZyYW1lKQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgSW5zcGVjdG9y
UGFnZUFnZW50OjpnZXRDb29raWVzKEVycm9yU3RyaW5nJiwgUmVmUHRyPEpTT046OkFycmF5T2Y8
SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6Q29va2llPj4mIGNvb2tpZXMpCitQcm90b2NvbDo6
RXJyb3JTdHJpbmdPcjxSZWY8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UGFnZTo6Q29va2llPj4+
IEluc3BlY3RvclBhZ2VBZ2VudDo6Z2V0Q29va2llcygpCiB7CiAgICAgTGlzdEhhc2hTZXQ8Q29v
a2llPiBhbGxSYXdDb29raWVzOwogCkBAIC01NzksNzIgKzU2Myw4NCBAQCB2b2lkIEluc3BlY3Rv
clBhZ2VBZ2VudDo6Z2V0Q29va2llcyhFcnJvclN0cmluZyYsIFJlZlB0cjxKU09OOjpBcnJheU9m
PEluc3BlY3RvcgogICAgICAgICB9CiAgICAgfQogCi0gICAgY29va2llcyA9IGJ1aWxkQXJyYXlG
b3JDb29raWVzKGFsbFJhd0Nvb2tpZXMpOworICAgIHJldHVybiBidWlsZEFycmF5Rm9yQ29va2ll
cyhhbGxSYXdDb29raWVzKTsKIH0KIAotc3RhdGljIE9wdGlvbmFsPENvb2tpZT4gcGFyc2VDb29r
aWVPYmplY3QoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBKU09OOjpPYmplY3QmIGNv
b2tpZU9iamVjdCkKK3N0YXRpYyBPcHRpb25hbDxDb29raWU+IHBhcnNlQ29va2llT2JqZWN0KFBy
b3RvY29sOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIFJlZjxKU09OOjpPYmplY3Q+JiYgY29v
a2llT2JqZWN0KQogewogICAgIENvb2tpZSBjb29raWU7CiAKLSAgICBpZiAoIWNvb2tpZU9iamVj
dC5nZXRTdHJpbmcoIm5hbWUiX3MsIGNvb2tpZS5uYW1lKSkgeworICAgIGNvb2tpZS5uYW1lID0g
Y29va2llT2JqZWN0LT5nZXRTdHJpbmcoUHJvdG9jb2w6OlBhZ2U6OkNvb2tpZTo6bmFtZUtleSk7
CisgICAgaWYgKCFjb29raWUubmFtZSkgewogICAgICAgICBlcnJvclN0cmluZyA9ICJJbnZhbGlk
IHZhbHVlIGZvciBrZXkgbmFtZSBpbiBnaXZlbiBjb29raWUiOwogICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwogICAgIH0KIAotICAgIGlmICghY29va2llT2JqZWN0LmdldFN0cmluZygidmFs
dWUiX3MsIGNvb2tpZS52YWx1ZSkpIHsKKyAgICBjb29raWUudmFsdWUgPSBjb29raWVPYmplY3Qt
PmdldFN0cmluZyhQcm90b2NvbDo6UGFnZTo6Q29va2llOjp2YWx1ZUtleSk7CisgICAgaWYgKCFj
b29raWUudmFsdWUpIHsKICAgICAgICAgZXJyb3JTdHJpbmcgPSAiSW52YWxpZCB2YWx1ZSBmb3Ig
a2V5IHZhbHVlIGluIGdpdmVuIGNvb2tpZSI7CiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CiAgICAgfQogCi0gICAgaWYgKCFjb29raWVPYmplY3QuZ2V0U3RyaW5nKCJkb21haW4iX3MsIGNv
b2tpZS5kb21haW4pKSB7CisgICAgY29va2llLmRvbWFpbiA9IGNvb2tpZU9iamVjdC0+Z2V0U3Ry
aW5nKFByb3RvY29sOjpQYWdlOjpDb29raWU6OmRvbWFpbktleSk7CisgICAgaWYgKCFjb29raWUu
ZG9tYWluKSB7CiAgICAgICAgIGVycm9yU3RyaW5nID0gIkludmFsaWQgdmFsdWUgZm9yIGtleSBk
b21haW4gaW4gZ2l2ZW4gY29va2llIjsKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAg
ICB9CiAKLSAgICBpZiAoIWNvb2tpZU9iamVjdC5nZXRTdHJpbmcoInBhdGgiX3MsIGNvb2tpZS5w
YXRoKSkgeworICAgIGNvb2tpZS5wYXRoID0gY29va2llT2JqZWN0LT5nZXRTdHJpbmcoUHJvdG9j
b2w6OlBhZ2U6OkNvb2tpZTo6cGF0aEtleSk7CisgICAgaWYgKCFjb29raWUucGF0aCkgewogICAg
ICAgICBlcnJvclN0cmluZyA9ICJJbnZhbGlkIHZhbHVlIGZvciBrZXkgcGF0aCBpbiBnaXZlbiBj
b29raWUiOwogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIH0KIAotICAgIGlmICgh
Y29va2llT2JqZWN0LmdldEJvb2xlYW4oImh0dHBPbmx5Il9zLCBjb29raWUuaHR0cE9ubHkpKSB7
CisgICAgYXV0byBodHRwT25seSA9IGNvb2tpZU9iamVjdC0+Z2V0Qm9vbGVhbihQcm90b2NvbDo6
UGFnZTo6Q29va2llOjpodHRwT25seUtleSk7CisgICAgaWYgKCFodHRwT25seSkgewogICAgICAg
ICBlcnJvclN0cmluZyA9ICJJbnZhbGlkIHZhbHVlIGZvciBrZXkgaHR0cE9ubHkgaW4gZ2l2ZW4g
Y29va2llIjsKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICB9CiAKLSAgICBpZiAo
IWNvb2tpZU9iamVjdC5nZXRCb29sZWFuKCJzZWN1cmUiX3MsIGNvb2tpZS5zZWN1cmUpKSB7Cisg
ICAgY29va2llLmh0dHBPbmx5ID0gKmh0dHBPbmx5OworCisgICAgYXV0byBzZWN1cmUgPSBjb29r
aWVPYmplY3QtPmdldEJvb2xlYW4oUHJvdG9jb2w6OlBhZ2U6OkNvb2tpZTo6c2VjdXJlS2V5KTsK
KyAgICBpZiAoIXNlY3VyZSkgewogICAgICAgICBlcnJvclN0cmluZyA9ICJJbnZhbGlkIHZhbHVl
IGZvciBrZXkgc2VjdXJlIGluIGdpdmVuIGNvb2tpZSI7CiAgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CiAgICAgfQogCi0gICAgYm9vbCB2YWxpZFNlc3Npb24gPSBjb29raWVPYmplY3QuZ2V0
Qm9vbGVhbigic2Vzc2lvbiJfcywgY29va2llLnNlc3Npb24pOwotICAgIGNvb2tpZS5leHBpcmVz
ID0gY29va2llT2JqZWN0LmdldE51bWJlcjxkb3VibGU+KCJleHBpcmVzIl9zKTsKLSAgICBpZiAo
IXZhbGlkU2Vzc2lvbiAmJiAhY29va2llLmV4cGlyZXMpIHsKKyAgICBjb29raWUuc2VjdXJlID0g
KnNlY3VyZTsKKworICAgIGF1dG8gc2Vzc2lvbiA9IGNvb2tpZU9iamVjdC0+Z2V0Qm9vbGVhbihQ
cm90b2NvbDo6UGFnZTo6Q29va2llOjpzZXNzaW9uS2V5KTsKKyAgICBjb29raWUuZXhwaXJlcyA9
IGNvb2tpZU9iamVjdC0+Z2V0RG91YmxlKFByb3RvY29sOjpQYWdlOjpDb29raWU6OmV4cGlyZXNL
ZXkpOworICAgIGlmICghc2Vzc2lvbiAmJiAhY29va2llLmV4cGlyZXMpIHsKICAgICAgICAgZXJy
b3JTdHJpbmcgPSAiSW52YWxpZCB2YWx1ZSBmb3Iga2V5IGV4cGlyZXMgaW4gZ2l2ZW4gY29va2ll
IjsKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICB9CiAKLSAgICBTdHJpbmcgc2Ft
ZVNpdGVTdHJpbmc7Ci0gICAgaWYgKCFjb29raWVPYmplY3QuZ2V0U3RyaW5nKCJzYW1lU2l0ZSJf
cywgc2FtZVNpdGVTdHJpbmcpKSB7CisgICAgY29va2llLnNlc3Npb24gPSAqc2Vzc2lvbjsKKwor
ICAgIGF1dG8gc2FtZVNpdGVTdHJpbmcgPSBjb29raWVPYmplY3QtPmdldFN0cmluZyhQcm90b2Nv
bDo6UGFnZTo6Q29va2llOjpzYW1lU2l0ZUtleSk7CisgICAgaWYgKCFzYW1lU2l0ZVN0cmluZykg
ewogICAgICAgICBlcnJvclN0cmluZyA9ICJJbnZhbGlkIHZhbHVlIGZvciBrZXkgc2FtZVNpdGUg
aW4gZ2l2ZW4gY29va2llIjsKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICB9CiAK
LSAgICBhdXRvIHNhbWVTaXRlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6SW5zcGVjdG9ySGVscGVy
czo6cGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkNv
b2tpZVNhbWVTaXRlUG9saWN5PihzYW1lU2l0ZVN0cmluZyk7CisgICAgYXV0byBzYW1lU2l0ZSA9
IFByb3RvY29sOjpIZWxwZXJzOjpwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8UHJvdG9jb2w6OlBh
Z2U6OkNvb2tpZVNhbWVTaXRlUG9saWN5PihzYW1lU2l0ZVN0cmluZyk7CiAgICAgaWYgKCFzYW1l
U2l0ZSkgewogICAgICAgICBlcnJvclN0cmluZyA9ICJJbnZhbGlkIHZhbHVlIGZvciBrZXkgc2Ft
ZVNpdGUgaW4gZ2l2ZW4gY29va2llIjsKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAg
ICB9CiAKICAgICBzd2l0Y2ggKHNhbWVTaXRlLnZhbHVlKCkpIHsKLSAgICBjYXNlIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlBhZ2U6OkNvb2tpZVNhbWVTaXRlUG9saWN5OjpOb25lOgorICAgIGNhc2Ug
UHJvdG9jb2w6OlBhZ2U6OkNvb2tpZVNhbWVTaXRlUG9saWN5OjpOb25lOgogICAgICAgICBjb29r
aWUuc2FtZVNpdGUgPSBDb29raWU6OlNhbWVTaXRlUG9saWN5OjpOb25lOwotCiAgICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6Q29va2llU2FtZVNpdGVQ
b2xpY3k6OkxheDoKKworICAgIGNhc2UgUHJvdG9jb2w6OlBhZ2U6OkNvb2tpZVNhbWVTaXRlUG9s
aWN5OjpMYXg6CiAgICAgICAgIGNvb2tpZS5zYW1lU2l0ZSA9IENvb2tpZTo6U2FtZVNpdGVQb2xp
Y3k6OkxheDsKLQogICAgICAgICBicmVhazsKLSAgICBjYXNlIEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlBhZ2U6OkNvb2tpZVNhbWVTaXRlUG9saWN5OjpTdHJpY3Q6CisKKyAgICBjYXNlIFByb3RvY29s
OjpQYWdlOjpDb29raWVTYW1lU2l0ZVBvbGljeTo6U3RyaWN0OgogICAgICAgICBjb29raWUuc2Ft
ZVNpdGUgPSBDb29raWU6OlNhbWVTaXRlUG9saWN5OjpTdHJpY3Q7CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KQEAgLTY1MiwxMSArNjQ4LDEzIEBAIHN0YXRpYyBPcHRpb25hbDxDb29raWU+IHBhcnNl
Q29va2llT2JqZWN0KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgSlNPTjo6CiAgICAg
cmV0dXJuIGNvb2tpZTsKIH0KIAotdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OnNldENvb2tpZShF
cnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IEpTT046Ok9iamVjdCYgY29va2llT2JqZWN0
KQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yUGFnZUFnZW50OjpzZXRD
b29raWUoUmVmPEpTT046Ok9iamVjdD4mJiBjb29raWVPYmplY3QpCiB7Ci0gICAgYXV0byBjb29r
aWUgPSBwYXJzZUNvb2tpZU9iamVjdChlcnJvclN0cmluZywgY29va2llT2JqZWN0KTsKKyAgICBQ
cm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKKyAgICBhdXRvIGNvb2tpZSA9IHBh
cnNlQ29va2llT2JqZWN0KGVycm9yU3RyaW5nLCBXVEZNb3ZlKGNvb2tpZU9iamVjdCkpOwogICAg
IGlmICghY29va2llKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBl
Y3RlZChlcnJvclN0cmluZyk7CiAKICAgICBmb3IgKGF1dG8qIGZyYW1lID0gJm1faW5zcGVjdGVk
UGFnZS5tYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5l
eHQoKSkgewogICAgICAgICBpZiAoYXV0byogZG9jdW1lbnQgPSBmcmFtZS0+ZG9jdW1lbnQoKSkg
ewpAQCAtNjY0LDkgKzY2MiwxMSBAQCB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6c2V0Q29va2ll
KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgSlNPTjo6T2JqZWN0JgogICAgICAgICAg
ICAgICAgIHBhZ2UtPmNvb2tpZUphcigpLnNldFJhd0Nvb2tpZSgqZG9jdW1lbnQsIGNvb2tpZS52
YWx1ZSgpKTsKICAgICAgICAgfQogICAgIH0KKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQg
SW5zcGVjdG9yUGFnZUFnZW50OjpkZWxldGVDb29raWUoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJp
bmcmIGNvb2tpZU5hbWUsIGNvbnN0IFN0cmluZyYgdXJsKQorUHJvdG9jb2w6OkVycm9yU3RyaW5n
T3I8dm9pZD4gSW5zcGVjdG9yUGFnZUFnZW50OjpkZWxldGVDb29raWUoY29uc3QgU3RyaW5nJiBj
b29raWVOYW1lLCBjb25zdCBTdHJpbmcmIHVybCkKIHsKICAgICBVUkwgcGFyc2VkVVJMKHsgfSwg
dXJsKTsKICAgICBmb3IgKEZyYW1lKiBmcmFtZSA9ICZtX2luc3BlY3RlZFBhZ2UubWFpbkZyYW1l
KCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsKQEAgLTY3
NSw0OCArNjc1LDU5IEBAIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpkZWxldGVDb29raWUoRXJy
b3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGNvb2tpZU5hbWUsIGNvCiAgICAgICAgICAgICAgICAg
cGFnZS0+Y29va2llSmFyKCkuZGVsZXRlQ29va2llKCpkb2N1bWVudCwgcGFyc2VkVVJMLCBjb29r
aWVOYW1lKTsKICAgICAgICAgfQogICAgIH0KKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQg
SW5zcGVjdG9yUGFnZUFnZW50OjpnZXRSZXNvdXJjZVRyZWUoRXJyb3JTdHJpbmcmLCBSZWZQdHI8
SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6RnJhbWVSZXNvdXJjZVRyZWU+JiBvYmplY3QpCitQ
cm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8UHJvdG9jb2w6OlBhZ2U6OkZyYW1lUmVzb3VyY2VU
cmVlPj4gSW5zcGVjdG9yUGFnZUFnZW50OjpnZXRSZXNvdXJjZVRyZWUoKQogewotICAgIG9iamVj
dCA9IGJ1aWxkT2JqZWN0Rm9yRnJhbWVUcmVlKCZtX2luc3BlY3RlZFBhZ2UubWFpbkZyYW1lKCkp
OworICAgIHJldHVybiBidWlsZE9iamVjdEZvckZyYW1lVHJlZSgmbV9pbnNwZWN0ZWRQYWdlLm1h
aW5GcmFtZSgpKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmdldFJlc291cmNlQ29u
dGVudChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgZnJhbWVJZCwgY29u
c3QgU3RyaW5nJiB1cmwsIFN0cmluZyogY29udGVudCwgYm9vbCogYmFzZTY0RW5jb2RlZCkKK1By
b3RvY29sOjpFcnJvclN0cmluZ09yPHN0ZDo6dHVwbGU8U3RyaW5nLCBib29sIC8qIGJhc2U2NEVu
Y29kZWQgKi8+PiBJbnNwZWN0b3JQYWdlQWdlbnQ6OmdldFJlc291cmNlQ29udGVudChjb25zdCBQ
cm90b2NvbDo6TmV0d29yazo6RnJhbWVJZCYgZnJhbWVJZCwgY29uc3QgU3RyaW5nJiB1cmwpCiB7
CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAgICAgRnJhbWUqIGZy
YW1lID0gYXNzZXJ0RnJhbWUoZXJyb3JTdHJpbmcsIGZyYW1lSWQpOwogICAgIGlmICghZnJhbWUp
Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3Ry
aW5nKTsKIAotICAgIHJlc291cmNlQ29udGVudChlcnJvclN0cmluZywgZnJhbWUsIFVSTCh7IH0s
IHVybCksIGNvbnRlbnQsIGJhc2U2NEVuY29kZWQpOworICAgIFN0cmluZyBjb250ZW50OworICAg
IGJvb2wgYmFzZTY0RW5jb2RlZDsKKworICAgIHJlc291cmNlQ29udGVudChlcnJvclN0cmluZywg
ZnJhbWUsIFVSTCh7IH0sIHVybCksICZjb250ZW50LCAmYmFzZTY0RW5jb2RlZCk7CisKKyAgICBy
ZXR1cm4geyB7IGNvbnRlbnQsIGJhc2U2NEVuY29kZWQgfSB9OwogfQogCi12b2lkIEluc3BlY3Rv
clBhZ2VBZ2VudDo6c2V0Qm9vdHN0cmFwU2NyaXB0KEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5n
KiBvcHRpb25hbFNvdXJjZSkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3Rv
clBhZ2VBZ2VudDo6c2V0Qm9vdHN0cmFwU2NyaXB0KGNvbnN0IFN0cmluZyYgc291cmNlKQogewot
ICAgIG1fYm9vdHN0cmFwU2NyaXB0ID0gb3B0aW9uYWxTb3VyY2UgPyAqb3B0aW9uYWxTb3VyY2Ug
OiBudWxsU3RyaW5nKCk7CisgICAgbV9ib290c3RyYXBTY3JpcHQgPSBzb3VyY2U7CisKKyAgICBy
ZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6c2VhcmNoSW5SZXNvdXJj
ZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgZnJhbWVJZCwgY29uc3Qg
U3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgcXVlcnksIGNvbnN0IGJvb2wqIG9wdGlvbmFsQ2Fz
ZVNlbnNpdGl2ZSwgY29uc3QgYm9vbCogb3B0aW9uYWxJc1JlZ2V4LCBjb25zdCBTdHJpbmcqIG9w
dGlvbmFsUmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29s
OjpHZW5lcmljVHlwZXM6OlNlYXJjaE1hdGNoPj4mIHJlc3VsdHMpCitQcm90b2NvbDo6RXJyb3JT
dHJpbmdPcjxSZWY8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6R2VuZXJpY1R5cGVzOjpTZWFyY2hN
YXRjaD4+PiBJbnNwZWN0b3JQYWdlQWdlbnQ6OnNlYXJjaEluUmVzb3VyY2UoY29uc3QgUHJvdG9j
b2w6Ok5ldHdvcms6OkZyYW1lSWQmIGZyYW1lSWQsIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBT
dHJpbmcmIHF1ZXJ5LCBPcHRpb25hbDxib29sPiYmIGNhc2VTZW5zaXRpdmUsIE9wdGlvbmFsPGJv
b2w+JiYgaXNSZWdleCwgY29uc3QgUHJvdG9jb2w6Ok5ldHdvcms6OlJlcXVlc3RJZCYgcmVxdWVz
dElkKQogewotICAgIHJlc3VsdHMgPSBKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkdlbmVyaWNUeXBlczo6U2VhcmNoTWF0Y2g+OjpjcmVhdGUoKTsKKyAgICBQcm90b2NvbDo6RXJy
b3JTdHJpbmcgZXJyb3JTdHJpbmc7CiAKLSAgICBib29sIGlzUmVnZXggPSBvcHRpb25hbElzUmVn
ZXggPyAqb3B0aW9uYWxJc1JlZ2V4IDogZmFsc2U7Ci0gICAgYm9vbCBjYXNlU2Vuc2l0aXZlID0g
b3B0aW9uYWxDYXNlU2Vuc2l0aXZlID8gKm9wdGlvbmFsQ2FzZVNlbnNpdGl2ZSA6IGZhbHNlOwot
Ci0gICAgaWYgKG9wdGlvbmFsUmVxdWVzdElkKSB7CisgICAgaWYgKCEhcmVxdWVzdElkKSB7CiAg
ICAgICAgIGlmIChhdXRvKiBuZXR3b3JrQWdlbnQgPSBtX2luc3RydW1lbnRpbmdBZ2VudHMuZW5h
YmxlZE5ldHdvcmtBZ2VudCgpKSB7Ci0gICAgICAgICAgICBuZXR3b3JrQWdlbnQtPnNlYXJjaElu
UmVxdWVzdChlcnJvclN0cmluZywgKm9wdGlvbmFsUmVxdWVzdElkLCBxdWVyeSwgY2FzZVNlbnNp
dGl2ZSwgaXNSZWdleCwgcmVzdWx0cyk7Ci0gICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICBSZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6R2VuZXJpY1R5cGVzOjpTZWFyY2hNYXRj
aD4+IHJlc3VsdDsKKyAgICAgICAgICAgIG5ldHdvcmtBZ2VudC0+c2VhcmNoSW5SZXF1ZXN0KGVy
cm9yU3RyaW5nLCByZXF1ZXN0SWQsIHF1ZXJ5LCBjYXNlU2Vuc2l0aXZlICYmICpjYXNlU2Vuc2l0
aXZlLCBpc1JlZ2V4ICYmICppc1JlZ2V4LCByZXN1bHQpOworICAgICAgICAgICAgaWYgKCFyZXN1
bHQpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsK
KyAgICAgICAgICAgIHJldHVybiByZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKICAgICAgICAgfQog
ICAgIH0KIAogICAgIEZyYW1lKiBmcmFtZSA9IGFzc2VydEZyYW1lKGVycm9yU3RyaW5nLCBmcmFt
ZUlkKTsKICAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBt
YWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAgICBEb2N1bWVudExvYWRlciogbG9hZGVy
ID0gYXNzZXJ0RG9jdW1lbnRMb2FkZXIoZXJyb3JTdHJpbmcsIGZyYW1lKTsKICAgICBpZiAoIWxv
YWRlcikKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJy
b3JTdHJpbmcpOwogCiAgICAgVVJMIGt1cmwoeyB9LCB1cmwpOwogCkBAIC03MzUsMjkgKzc0Niwy
NiBAQCB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6c2VhcmNoSW5SZXNvdXJjZShFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZwogICAgIH0KIAogICAgIGlmICghc3VjY2VzcykK
LSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6
R2VuZXJpY1R5cGVzOjpTZWFyY2hNYXRjaD46OmNyZWF0ZSgpOwogCi0gICAgcmVzdWx0cyA9IENv
bnRlbnRTZWFyY2hVdGlsaXRpZXM6OnNlYXJjaEluVGV4dEJ5TGluZXMoY29udGVudCwgcXVlcnks
IGNhc2VTZW5zaXRpdmUsIGlzUmVnZXgpOworICAgIHJldHVybiBDb250ZW50U2VhcmNoVXRpbGl0
aWVzOjpzZWFyY2hJblRleHRCeUxpbmVzKGNvbnRlbnQsIHF1ZXJ5LCBjYXNlU2Vuc2l0aXZlICYm
ICpjYXNlU2Vuc2l0aXZlLCBpc1JlZ2V4ICYmICppc1JlZ2V4KTsKIH0KIAotc3RhdGljIFJlZjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpTZWFyY2hSZXN1bHQ+IGJ1aWxkT2JqZWN0Rm9yU2Vh
cmNoUmVzdWx0KGNvbnN0IFN0cmluZyYgZnJhbWVJZCwgY29uc3QgU3RyaW5nJiB1cmwsIGludCBt
YXRjaGVzQ291bnQpCitzdGF0aWMgUmVmPFByb3RvY29sOjpQYWdlOjpTZWFyY2hSZXN1bHQ+IGJ1
aWxkT2JqZWN0Rm9yU2VhcmNoUmVzdWx0KGNvbnN0IFByb3RvY29sOjpOZXR3b3JrOjpGcmFtZUlk
JiBmcmFtZUlkLCBjb25zdCBTdHJpbmcmIHVybCwgaW50IG1hdGNoZXNDb3VudCkKIHsKLSAgICBy
ZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6U2VhcmNoUmVzdWx0OjpjcmVhdGUoKQor
ICAgIHJldHVybiBQcm90b2NvbDo6UGFnZTo6U2VhcmNoUmVzdWx0OjpjcmVhdGUoKQogICAgICAg
ICAuc2V0VXJsKHVybCkKICAgICAgICAgLnNldEZyYW1lSWQoZnJhbWVJZCkKICAgICAgICAgLnNl
dE1hdGNoZXNDb3VudChtYXRjaGVzQ291bnQpCiAgICAgICAgIC5yZWxlYXNlKCk7CiB9CiAKLXZv
aWQgSW5zcGVjdG9yUGFnZUFnZW50OjpzZWFyY2hJblJlc291cmNlcyhFcnJvclN0cmluZyYsIGNv
bnN0IFN0cmluZyYgdGV4dCwgY29uc3QgYm9vbCogb3B0aW9uYWxDYXNlU2Vuc2l0aXZlLCBjb25z
dCBib29sKiBvcHRpb25hbElzUmVnZXgsIFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlBhZ2U6OlNlYXJjaFJlc3VsdD4+JiByZXN1bHQpCitQcm90b2NvbDo6RXJyb3JT
dHJpbmdPcjxSZWY8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UGFnZTo6U2VhcmNoUmVzdWx0Pj4+
IEluc3BlY3RvclBhZ2VBZ2VudDo6c2VhcmNoSW5SZXNvdXJjZXMoY29uc3QgU3RyaW5nJiB0ZXh0
LCBPcHRpb25hbDxib29sPiYmIGNhc2VTZW5zaXRpdmUsIE9wdGlvbmFsPGJvb2w+JiYgaXNSZWdl
eCkKIHsKLSAgICByZXN1bHQgPSBKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBh
Z2U6OlNlYXJjaFJlc3VsdD46OmNyZWF0ZSgpOworICAgIGF1dG8gcmVzdWx0ID0gSlNPTjo6QXJy
YXlPZjxQcm90b2NvbDo6UGFnZTo6U2VhcmNoUmVzdWx0Pjo6Y3JlYXRlKCk7CiAKLSAgICBib29s
IGNhc2VTZW5zaXRpdmUgPSBvcHRpb25hbENhc2VTZW5zaXRpdmUgPyAqb3B0aW9uYWxDYXNlU2Vu
c2l0aXZlIDogZmFsc2U7Ci0gICAgYm9vbCBpc1JlZ2V4ID0gb3B0aW9uYWxJc1JlZ2V4ID8gKm9w
dGlvbmFsSXNSZWdleCA6IGZhbHNlOwotCi0gICAgYXV0byBzZWFyY2hTdHJpbmdUeXBlID0gaXNS
ZWdleCA/IENvbnRlbnRTZWFyY2hVdGlsaXRpZXM6OlNlYXJjaFN0cmluZ1R5cGU6OlJlZ2V4IDog
Q29udGVudFNlYXJjaFV0aWxpdGllczo6U2VhcmNoU3RyaW5nVHlwZTo6Q29udGFpbnNTdHJpbmc7
Ci0gICAgYXV0byByZWdleCA9IENvbnRlbnRTZWFyY2hVdGlsaXRpZXM6OmNyZWF0ZVJlZ3VsYXJF
eHByZXNzaW9uRm9yU2VhcmNoU3RyaW5nKHRleHQsIGNhc2VTZW5zaXRpdmUsIHNlYXJjaFN0cmlu
Z1R5cGUpOworICAgIGF1dG8gc2VhcmNoU3RyaW5nVHlwZSA9IChpc1JlZ2V4ICYmICppc1JlZ2V4
KSA/IENvbnRlbnRTZWFyY2hVdGlsaXRpZXM6OlNlYXJjaFN0cmluZ1R5cGU6OlJlZ2V4IDogQ29u
dGVudFNlYXJjaFV0aWxpdGllczo6U2VhcmNoU3RyaW5nVHlwZTo6Q29udGFpbnNTdHJpbmc7Cisg
ICAgYXV0byByZWdleCA9IENvbnRlbnRTZWFyY2hVdGlsaXRpZXM6OmNyZWF0ZVJlZ3VsYXJFeHBy
ZXNzaW9uRm9yU2VhcmNoU3RyaW5nKHRleHQsIGNhc2VTZW5zaXRpdmUgJiYgKmNhc2VTZW5zaXRp
dmUsIHNlYXJjaFN0cmluZ1R5cGUpOwogCiAgICAgZm9yIChGcmFtZSogZnJhbWUgPSAmbV9pbnNw
ZWN0ZWRQYWdlLm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZl
cnNlTmV4dCgpKSB7CiAgICAgICAgIGZvciAoYXV0byogY2FjaGVkUmVzb3VyY2UgOiBjYWNoZWRS
ZXNvdXJjZXNGb3JGcmFtZShmcmFtZSkpIHsKQEAgLTc3MSwyNCArNzc5LDMwIEBAIHZvaWQgSW5z
cGVjdG9yUGFnZUFnZW50OjpzZWFyY2hJblJlc291cmNlcyhFcnJvclN0cmluZyYsIGNvbnN0IFN0
cmluZyYgdGV4dCwgY29uCiAKICAgICBpZiAoYXV0byogbmV0d29ya0FnZW50ID0gbV9pbnN0cnVt
ZW50aW5nQWdlbnRzLmVuYWJsZWROZXR3b3JrQWdlbnQoKSkKICAgICAgICAgbmV0d29ya0FnZW50
LT5zZWFyY2hPdGhlclJlcXVlc3RzKHJlZ2V4LCByZXN1bHQpOworCisgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIAogI2lmICFQTEFURk9STShJT1NfRkFNSUxZKQotdm9pZCBJbnNwZWN0b3JQYWdlQWdl
bnQ6OnNldFNob3dSdWxlcnMoRXJyb3JTdHJpbmcmLCBib29sIHNob3dSdWxlcnMpCitQcm90b2Nv
bDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JQYWdlQWdlbnQ6OnNldFNob3dSdWxlcnMo
Ym9vbCBzaG93UnVsZXJzKQogewogICAgIG1fb3ZlcmxheS0+c2V0U2hvd1J1bGVycyhzaG93UnVs
ZXJzKTsKKworICAgIHJldHVybiB7IH07CiB9CiAjZW5kaWYKIAotdm9pZCBJbnNwZWN0b3JQYWdl
QWdlbnQ6OnNldFNob3dQYWludFJlY3RzKEVycm9yU3RyaW5nJiwgYm9vbCBzaG93KQorUHJvdG9j
b2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yUGFnZUFnZW50OjpzZXRTaG93UGFpbnRS
ZWN0cyhib29sIHNob3cpCiB7CiAgICAgbV9zaG93UGFpbnRSZWN0cyA9IHNob3c7CiAgICAgbV9j
bGllbnQtPnNldFNob3dQYWludFJlY3RzKHNob3cpOwogCiAgICAgaWYgKG1fY2xpZW50LT5vdmVy
cmlkZXNTaG93UGFpbnRSZWN0cygpKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB7
IH07CiAKICAgICBtX292ZXJsYXktPnNldFNob3dQYWludFJlY3RzKHNob3cpOworCisgICAgcmV0
dXJuIHsgfTsKIH0KIAogdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmRvbUNvbnRlbnRFdmVudEZp
cmVkKCkKQEAgLTgxNiw3ICs4MzAsNyBAQCB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6ZnJhbWVE
ZXRhY2hlZChGcmFtZSYgZnJhbWUpCiAgICAgbV9pZGVudGlmaWVyVG9GcmFtZS5yZW1vdmUoaWRl
bnRpZmllcik7CiB9CiAKLUZyYW1lKiBJbnNwZWN0b3JQYWdlQWdlbnQ6OmZyYW1lRm9ySWQoY29u
c3QgU3RyaW5nJiBmcmFtZUlkKQorRnJhbWUqIEluc3BlY3RvclBhZ2VBZ2VudDo6ZnJhbWVGb3JJ
ZChjb25zdCBQcm90b2NvbDo6TmV0d29yazo6RnJhbWVJZCYgZnJhbWVJZCkKIHsKICAgICByZXR1
cm4gZnJhbWVJZC5pc0VtcHR5KCkgPyBudWxscHRyIDogbV9pZGVudGlmaWVyVG9GcmFtZS5nZXQo
ZnJhbWVJZCk7CiB9CkBAIC04NDEsNyArODU1LDcgQEAgU3RyaW5nIEluc3BlY3RvclBhZ2VBZ2Vu
dDo6bG9hZGVySWQoRG9jdW1lbnRMb2FkZXIqIGxvYWRlcikKICAgICB9KS5pdGVyYXRvci0+dmFs
dWU7CiB9CiAKLUZyYW1lKiBJbnNwZWN0b3JQYWdlQWdlbnQ6OmFzc2VydEZyYW1lKEVycm9yU3Ry
aW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBmcmFtZUlkKQorRnJhbWUqIEluc3BlY3Rv
clBhZ2VBZ2VudDo6YXNzZXJ0RnJhbWUoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0cmlu
ZywgY29uc3QgUHJvdG9jb2w6Ok5ldHdvcms6OkZyYW1lSWQmIGZyYW1lSWQpCiB7CiAgICAgRnJh
bWUqIGZyYW1lID0gZnJhbWVGb3JJZChmcmFtZUlkKTsKICAgICBpZiAoIWZyYW1lKQpAQCAtODc3
LDcgKzg5MSw3IEBAIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpmcmFtZUNsZWFyZWRTY2hlZHVs
ZWROYXZpZ2F0aW9uKEZyYW1lJiBmcmFtZSkKICNpZiBFTkFCTEUoREFSS19NT0RFX0NTUykgfHwg
SEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpkZWZh
dWx0QXBwZWFyYW5jZURpZENoYW5nZShib29sIHVzZURhcmtBcHBlYXJhbmNlKQogewotICAgIG1f
ZnJvbnRlbmREaXNwYXRjaGVyLT5kZWZhdWx0QXBwZWFyYW5jZURpZENoYW5nZSh1c2VEYXJrQXBw
ZWFyYW5jZSA/IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkFwcGVhcmFuY2U6OkRhcmsgOiBJ
bnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpBcHBlYXJhbmNlOjpMaWdodCk7CisgICAgbV9mcm9u
dGVuZERpc3BhdGNoZXItPmRlZmF1bHRBcHBlYXJhbmNlRGlkQ2hhbmdlKHVzZURhcmtBcHBlYXJh
bmNlID8gUHJvdG9jb2w6OlBhZ2U6OkFwcGVhcmFuY2U6OkRhcmsgOiBQcm90b2NvbDo6UGFnZTo6
QXBwZWFyYW5jZTo6TGlnaHQpOwogfQogI2VuZGlmCiAKQEAgLTkzMywxMSArOTQ3LDExIEBAIHZv
aWQgSW5zcGVjdG9yUGFnZUFnZW50OjpkaWRSZWNhbGN1bGF0ZVN0eWxlKCkKICAgICBtX292ZXJs
YXktPnVwZGF0ZSgpOwogfQogCi1SZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6RnJhbWU+
IEluc3BlY3RvclBhZ2VBZ2VudDo6YnVpbGRPYmplY3RGb3JGcmFtZShGcmFtZSogZnJhbWUpCitS
ZWY8UHJvdG9jb2w6OlBhZ2U6OkZyYW1lPiBJbnNwZWN0b3JQYWdlQWdlbnQ6OmJ1aWxkT2JqZWN0
Rm9yRnJhbWUoRnJhbWUqIGZyYW1lKQogewogICAgIEFTU0VSVF9BUkcoZnJhbWUsIGZyYW1lKTsK
IAotICAgIGF1dG8gZnJhbWVPYmplY3QgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpGcmFt
ZTo6Y3JlYXRlKCkKKyAgICBhdXRvIGZyYW1lT2JqZWN0ID0gUHJvdG9jb2w6OlBhZ2U6OkZyYW1l
OjpjcmVhdGUoKQogICAgICAgICAuc2V0SWQoZnJhbWVJZChmcmFtZSkpCiAgICAgICAgIC5zZXRM
b2FkZXJJZChsb2FkZXJJZChmcmFtZS0+bG9hZGVyKCkuZG9jdW1lbnRMb2FkZXIoKSkpCiAgICAg
ICAgIC5zZXRVcmwoZnJhbWUtPmRvY3VtZW50KCktPnVybCgpLnN0cmluZygpKQpAQCAtOTU2LDE5
ICs5NzAsMTkgQEAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkZyYW1lPiBJbnNwZWN0
b3JQYWdlQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yRnJhbWUoRnIKICAgICByZXR1cm4gZnJhbWVPYmpl
Y3Q7CiB9CiAKLVJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpGcmFtZVJlc291cmNlVHJl
ZT4gSW5zcGVjdG9yUGFnZUFnZW50OjpidWlsZE9iamVjdEZvckZyYW1lVHJlZShGcmFtZSogZnJh
bWUpCitSZWY8UHJvdG9jb2w6OlBhZ2U6OkZyYW1lUmVzb3VyY2VUcmVlPiBJbnNwZWN0b3JQYWdl
QWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yRnJhbWVUcmVlKEZyYW1lKiBmcmFtZSkKIHsKICAgICBBU1NF
UlRfQVJHKGZyYW1lLCBmcmFtZSk7CiAKLSAgICBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFn
ZTo6RnJhbWU+IGZyYW1lT2JqZWN0ID0gYnVpbGRPYmplY3RGb3JGcmFtZShmcmFtZSk7Ci0gICAg
YXV0byBzdWJyZXNvdXJjZXMgPSBKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBh
Z2U6OkZyYW1lUmVzb3VyY2U+OjpjcmVhdGUoKTsKLSAgICBhdXRvIHJlc3VsdCA9IEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlBhZ2U6OkZyYW1lUmVzb3VyY2VUcmVlOjpjcmVhdGUoKQorICAgIFJlZjxQ
cm90b2NvbDo6UGFnZTo6RnJhbWU+IGZyYW1lT2JqZWN0ID0gYnVpbGRPYmplY3RGb3JGcmFtZShm
cmFtZSk7CisgICAgYXV0byBzdWJyZXNvdXJjZXMgPSBKU09OOjpBcnJheU9mPFByb3RvY29sOjpQ
YWdlOjpGcmFtZVJlc291cmNlPjo6Y3JlYXRlKCk7CisgICAgYXV0byByZXN1bHQgPSBQcm90b2Nv
bDo6UGFnZTo6RnJhbWVSZXNvdXJjZVRyZWU6OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRGcmFtZShX
VEZNb3ZlKGZyYW1lT2JqZWN0KSkKICAgICAgICAgLnNldFJlc291cmNlcyhzdWJyZXNvdXJjZXMu
Y29weVJlZigpKQogICAgICAgICAucmVsZWFzZSgpOwogCiAgICAgZm9yIChhdXRvKiBjYWNoZWRS
ZXNvdXJjZSA6IGNhY2hlZFJlc291cmNlc0ZvckZyYW1lKGZyYW1lKSkgewotICAgICAgICBhdXRv
IHJlc291cmNlT2JqZWN0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6RnJhbWVSZXNvdXJj
ZTo6Y3JlYXRlKCkKKyAgICAgICAgYXV0byByZXNvdXJjZU9iamVjdCA9IFByb3RvY29sOjpQYWdl
OjpGcmFtZVJlc291cmNlOjpjcmVhdGUoKQogICAgICAgICAgICAgLnNldFVybChjYWNoZWRSZXNv
dXJjZS0+dXJsKCkuc3RyaW5nKCkpCiAgICAgICAgICAgICAuc2V0VHlwZShjYWNoZWRSZXNvdXJj
ZVR5cGVKU09OKCpjYWNoZWRSZXNvdXJjZSkpCiAgICAgICAgICAgICAuc2V0TWltZVR5cGUoY2Fj
aGVkUmVzb3VyY2UtPnJlc3BvbnNlKCkubWltZVR5cGUoKSkKQEAgLTk4NiwyMSArMTAwMCwyMSBA
QCBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6RnJhbWVSZXNvdXJjZVRyZWU+IEluc3Bl
Y3RvclBhZ2VBZ2VudDo6YnVpbGRPYmplYwogICAgICAgICBzdWJyZXNvdXJjZXMtPmFkZEl0ZW0o
V1RGTW92ZShyZXNvdXJjZU9iamVjdCkpOwogICAgIH0KIAotICAgIFJlZlB0cjxKU09OOjpBcnJh
eU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkZyYW1lUmVzb3VyY2VUcmVlPj4gY2hpbGRy
ZW5BcnJheTsKKyAgICBSZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UGFnZTo6RnJhbWVS
ZXNvdXJjZVRyZWU+PiBjaGlsZHJlbkFycmF5OwogICAgIGZvciAoRnJhbWUqIGNoaWxkID0gZnJh
bWUtPnRyZWUoKS5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT50cmVlKCkubmV4
dFNpYmxpbmcoKSkgewogICAgICAgICBpZiAoIWNoaWxkcmVuQXJyYXkpIHsKLSAgICAgICAgICAg
IGNoaWxkcmVuQXJyYXkgPSBKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6
OkZyYW1lUmVzb3VyY2VUcmVlPjo6Y3JlYXRlKCk7Ci0gICAgICAgICAgICByZXN1bHQtPnNldENo
aWxkRnJhbWVzKGNoaWxkcmVuQXJyYXkpOworICAgICAgICAgICAgY2hpbGRyZW5BcnJheSA9IEpT
T046OkFycmF5T2Y8UHJvdG9jb2w6OlBhZ2U6OkZyYW1lUmVzb3VyY2VUcmVlPjo6Y3JlYXRlKCk7
CisgICAgICAgICAgICByZXN1bHQtPnNldENoaWxkRnJhbWVzKCpjaGlsZHJlbkFycmF5KTsKICAg
ICAgICAgfQogICAgICAgICBjaGlsZHJlbkFycmF5LT5hZGRJdGVtKGJ1aWxkT2JqZWN0Rm9yRnJh
bWVUcmVlKGNoaWxkKSk7CiAgICAgfQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgSW5z
cGVjdG9yUGFnZUFnZW50OjpzZXRFbXVsYXRlZE1lZGlhKEVycm9yU3RyaW5nJiwgY29uc3QgU3Ry
aW5nJiBtZWRpYSkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvclBhZ2VB
Z2VudDo6c2V0RW11bGF0ZWRNZWRpYShjb25zdCBTdHJpbmcmIG1lZGlhKQogewogICAgIGlmICht
ZWRpYSA9PSBtX2VtdWxhdGVkTWVkaWEpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJu
IHsgfTsKIAogICAgIG1fZW11bGF0ZWRNZWRpYSA9IG1lZGlhOwogCkBAIC0xMDA5LDIxICsxMDIz
LDM0IEBAIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpzZXRFbXVsYXRlZE1lZGlhKEVycm9yU3Ry
aW5nJiwgY29uc3QgU3RyaW5nJiBtZWRpYSkKIAogICAgIGF1dG8gZG9jdW1lbnQgPSBtYWtlUmVm
UHRyKG1faW5zcGVjdGVkUGFnZS5tYWluRnJhbWUoKS5kb2N1bWVudCgpKTsKICAgICBpZiAoIWRv
Y3VtZW50KQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB7IH07CiAKICAgICBkb2N1
bWVudC0+dXBkYXRlTGF5b3V0KCk7CiAgICAgZG9jdW1lbnQtPmV2YWx1YXRlTWVkaWFRdWVyaWVz
QW5kUmVwb3J0Q2hhbmdlcygpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAogI2lmIEVOQUJMRShE
QVJLX01PREVfQ1NTKSB8fCBIQVZFKE9TX0RBUktfTU9ERV9TVVBQT1JUKQotdm9pZCBJbnNwZWN0
b3JQYWdlQWdlbnQ6OnNldEZvcmNlZEFwcGVhcmFuY2UoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJp
bmcmIGFwcGVhcmFuY2UpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JQ
YWdlQWdlbnQ6OnNldEZvcmNlZEFwcGVhcmFuY2UoT3B0aW9uYWw8UHJvdG9jb2w6OlBhZ2U6OkFw
cGVhcmFuY2U+JiYgYXBwZWFyYW5jZSkKIHsKLSAgICBpZiAoYXBwZWFyYW5jZSA9PSAiTGlnaHQi
X3MpCi0gICAgICAgIG1faW5zcGVjdGVkUGFnZS5zZXRVc2VEYXJrQXBwZWFyYW5jZU92ZXJyaWRl
KGZhbHNlKTsKLSAgICBlbHNlIGlmIChhcHBlYXJhbmNlID09ICJEYXJrIl9zKQotICAgICAgICBt
X2luc3BlY3RlZFBhZ2Uuc2V0VXNlRGFya0FwcGVhcmFuY2VPdmVycmlkZSh0cnVlKTsKLSAgICBl
bHNlCisgICAgaWYgKCFhcHBlYXJhbmNlKSB7CiAgICAgICAgIG1faW5zcGVjdGVkUGFnZS5zZXRV
c2VEYXJrQXBwZWFyYW5jZU92ZXJyaWRlKFdURjo6bnVsbG9wdCk7CisgICAgICAgIHJldHVybiB7
IH07CisgICAgfQorCisgICAgc3dpdGNoICgqYXBwZWFyYW5jZSkgeworICAgIGNhc2UgUHJvdG9j
b2w6OlBhZ2U6OkFwcGVhcmFuY2U6OkxpZ2h0OgorICAgICAgICBtX2luc3BlY3RlZFBhZ2Uuc2V0
VXNlRGFya0FwcGVhcmFuY2VPdmVycmlkZShmYWxzZSk7CisgICAgICAgIHJldHVybiB7IH07CisK
KyAgICBjYXNlIFByb3RvY29sOjpQYWdlOjpBcHBlYXJhbmNlOjpEYXJrOgorICAgICAgICBtX2lu
c3BlY3RlZFBhZ2Uuc2V0VXNlRGFya0FwcGVhcmFuY2VPdmVycmlkZSh0cnVlKTsKKyAgICAgICAg
cmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1
cm4geyB9OwogfQogI2VuZGlmCiAKQEAgLTEwMzksNTEgKzEwNjYsNDcgQEAgdm9pZCBJbnNwZWN0
b3JQYWdlQWdlbnQ6OmFwcGx5RW11bGF0ZWRNZWRpYShTdHJpbmcmIG1lZGlhKQogICAgICAgICBt
ZWRpYSA9IG1fZW11bGF0ZWRNZWRpYTsKIH0KIAotdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OnNu
YXBzaG90Tm9kZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQsIFN0cmluZyog
b3V0RGF0YVVSTCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPFN0cmluZz4gSW5zcGVjdG9yUGFn
ZUFnZW50OjpzbmFwc2hvdE5vZGUoUHJvdG9jb2w6OkRPTTo6Tm9kZUlkIG5vZGVJZCkKIHsKKyAg
ICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBJbnNwZWN0b3JET01B
Z2VudCogZG9tQWdlbnQgPSBtX2luc3RydW1lbnRpbmdBZ2VudHMucGVyc2lzdGVudERPTUFnZW50
KCk7CiAgICAgQVNTRVJUKGRvbUFnZW50KTsKICAgICBOb2RlKiBub2RlID0gZG9tQWdlbnQtPmFz
c2VydE5vZGUoZXJyb3JTdHJpbmcsIG5vZGVJZCk7CiAgICAgaWYgKCFub2RlKQotICAgICAgICBy
ZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IHNuYXBzaG90ID0gV2ViQ29yZTo6c25hcHNo
b3ROb2RlKG1faW5zcGVjdGVkUGFnZS5tYWluRnJhbWUoKSwgKm5vZGUpOwotICAgIGlmICghc25h
cHNob3QpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiQ291bGQgbm90IGNhcHR1cmUgc25hcHNo
b3QiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKCFzbmFwc2hvdCkKKyAgICAg
ICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJDb3VsZCBub3QgY2FwdHVyZSBzbmFwc2hvdCJfcyk7
CiAKLSAgICAqb3V0RGF0YVVSTCA9IHNuYXBzaG90LT50b0RhdGFVUkwoImltYWdlL3BuZyJfcywg
V1RGOjpudWxsb3B0LCBQcmVzZXJ2ZVJlc29sdXRpb246Olllcyk7CisgICAgcmV0dXJuIHNuYXBz
aG90LT50b0RhdGFVUkwoImltYWdlL3BuZyJfcywgV1RGOjpudWxsb3B0LCBQcmVzZXJ2ZVJlc29s
dXRpb246Olllcyk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpzbmFwc2hvdFJlY3Qo
RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhl
aWdodCwgY29uc3QgU3RyaW5nJiBjb29yZGluYXRlU3lzdGVtLCBTdHJpbmcqIG91dERhdGFVUkwp
CitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxTdHJpbmc+IEluc3BlY3RvclBhZ2VBZ2VudDo6c25h
cHNob3RSZWN0KGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBQcm90b2NvbDo6
UGFnZTo6Q29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtKQogewogICAgIFNuYXBzaG90
T3B0aW9ucyBvcHRpb25zID0gU25hcHNob3RPcHRpb25zTm9uZTsKLSAgICBpZiAoY29vcmRpbmF0
ZVN5c3RlbSA9PSAiVmlld3BvcnQiKQorICAgIGlmIChjb29yZGluYXRlU3lzdGVtID09IFByb3Rv
Y29sOjpQYWdlOjpDb29yZGluYXRlU3lzdGVtOjpWaWV3cG9ydCkKICAgICAgICAgb3B0aW9ucyB8
PSBTbmFwc2hvdE9wdGlvbnNJblZpZXdDb29yZGluYXRlczsKIAogICAgIEludFJlY3QgcmVjdGFu
Z2xlKHgsIHksIHdpZHRoLCBoZWlnaHQpOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZl
cj4gc25hcHNob3QgPSBzbmFwc2hvdEZyYW1lUmVjdChtX2luc3BlY3RlZFBhZ2UubWFpbkZyYW1l
KCksIHJlY3RhbmdsZSwgb3B0aW9ucyk7CiAKLSAgICBpZiAoIXNuYXBzaG90KSB7Ci0gICAgICAg
IGVycm9yU3RyaW5nID0gIkNvdWxkIG5vdCBjYXB0dXJlIHNuYXBzaG90Il9zOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQorICAgIGlmICghc25hcHNob3QpCisgICAgICAgIHJldHVybiBtYWtlVW5l
eHBlY3RlZCgiQ291bGQgbm90IGNhcHR1cmUgc25hcHNob3QiX3MpOwogCi0gICAgKm91dERhdGFV
UkwgPSBzbmFwc2hvdC0+dG9EYXRhVVJMKCJpbWFnZS9wbmciX3MsIFdURjo6bnVsbG9wdCwgUHJl
c2VydmVSZXNvbHV0aW9uOjpZZXMpOworICAgIHJldHVybiBzbmFwc2hvdC0+dG9EYXRhVVJMKCJp
bWFnZS9wbmciX3MsIFdURjo6bnVsbG9wdCwgUHJlc2VydmVSZXNvbHV0aW9uOjpZZXMpOwogfQog
CiAjaWYgRU5BQkxFKFdFQl9BUkNISVZFKSAmJiBVU0UoQ0YpCi12b2lkIEluc3BlY3RvclBhZ2VB
Z2VudDo6YXJjaGl2ZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIFN0cmluZyogZGF0YSkKK1By
b3RvY29sOjpFcnJvclN0cmluZ09yPFN0cmluZz4gSW5zcGVjdG9yUGFnZUFnZW50OjphcmNoaXZl
KCkKIHsKICAgICBhdXRvIGFyY2hpdmUgPSBMZWdhY3lXZWJBcmNoaXZlOjpjcmVhdGUobV9pbnNw
ZWN0ZWRQYWdlLm1haW5GcmFtZSgpKTsKLSAgICBpZiAoIWFyY2hpdmUpIHsKLSAgICAgICAgZXJy
b3JTdHJpbmcgPSAiQ291bGQgbm90IGNyZWF0ZSB3ZWIgYXJjaGl2ZSBmb3IgbWFpbiBmcmFtZSJf
czsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoIWFyY2hpdmUpCisgICAgICAgIHJl
dHVybiBtYWtlVW5leHBlY3RlZCgiQ291bGQgbm90IGNyZWF0ZSB3ZWIgYXJjaGl2ZSBmb3IgbWFp
biBmcmFtZSJfcyk7CiAKICAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBidWZmZXIgPSBhcmNoaXZl
LT5yYXdEYXRhUmVwcmVzZW50YXRpb24oKTsKLSAgICAqZGF0YSA9IGJhc2U2NEVuY29kZShDRkRh
dGFHZXRCeXRlUHRyKGJ1ZmZlci5nZXQoKSksIENGRGF0YUdldExlbmd0aChidWZmZXIuZ2V0KCkp
KTsKKyAgICByZXR1cm4gYmFzZTY0RW5jb2RlKENGRGF0YUdldEJ5dGVQdHIoYnVmZmVyLmdldCgp
KSwgQ0ZEYXRhR2V0TGVuZ3RoKGJ1ZmZlci5nZXQoKSkpOwogfQogI2VuZGlmCiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUGFnZUFnZW50Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclBhZ2VBZ2VudC5oCmlu
ZGV4IDNiY2QwNDg3Y2ZjODc2NmJhYTAxYzc4MDQxNzNhMTU3NDdiNDdiMmQuLmQyYjA2NWUxMzY1
MWZhZmU3NDczMjVmMDJlNzcwMWZiZjFlOGU0NWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUGFnZUFnZW50LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JQYWdlQWdlbnQuaApAQCAtNTEsMTQgKzUxLDEy
IEBAIGNsYXNzIFBhZ2U7CiBjbGFzcyBSZW5kZXJPYmplY3Q7CiBjbGFzcyBTaGFyZWRCdWZmZXI7
CiAKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCiBjbGFzcyBJbnNwZWN0b3JQYWdlQWdl
bnQgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yQWdlbnRCYXNlLCBwdWJsaWMgSW5zcGVjdG9yOjpQ
YWdlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJ
bnNwZWN0b3JQYWdlQWdlbnQpOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGlj
OgogICAgIEluc3BlY3RvclBhZ2VBZ2VudChQYWdlQWdlbnRDb250ZXh0JiwgSW5zcGVjdG9yQ2xp
ZW50KiwgSW5zcGVjdG9yT3ZlcmxheSopOwotICAgIH5JbnNwZWN0b3JQYWdlQWdlbnQoKSBvdmVy
cmlkZTsKKyAgICB+SW5zcGVjdG9yUGFnZUFnZW50KCk7CiAKICAgICBlbnVtIFJlc291cmNlVHlw
ZSB7CiAgICAgICAgIERvY3VtZW50UmVzb3VyY2UsCkBAIC03OSw3ICs3Nyw3IEBAIHB1YmxpYzoK
IAogICAgIHN0YXRpYyBib29sIHNoYXJlZEJ1ZmZlckNvbnRlbnQoUmVmUHRyPFNoYXJlZEJ1ZmZl
cj4mJiwgY29uc3QgU3RyaW5nJiB0ZXh0RW5jb2RpbmdOYW1lLCBib29sIHdpdGhCYXNlNjRFbmNv
ZGUsIFN0cmluZyogcmVzdWx0KTsKICAgICBzdGF0aWMgVmVjdG9yPENhY2hlZFJlc291cmNlKj4g
Y2FjaGVkUmVzb3VyY2VzRm9yRnJhbWUoRnJhbWUqKTsKLSAgICBzdGF0aWMgdm9pZCByZXNvdXJj
ZUNvbnRlbnQoRXJyb3JTdHJpbmcmLCBGcmFtZSosIGNvbnN0IFVSTCYsIFN0cmluZyogcmVzdWx0
LCBib29sKiBiYXNlNjRFbmNvZGVkKTsKKyAgICBzdGF0aWMgdm9pZCByZXNvdXJjZUNvbnRlbnQo
SW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBGcmFtZSosIGNvbnN0IFVSTCYsIFN0
cmluZyogcmVzdWx0LCBib29sKiBiYXNlNjRFbmNvZGVkKTsKICAgICBzdGF0aWMgU3RyaW5nIHNv
dXJjZU1hcFVSTEZvclJlc291cmNlKENhY2hlZFJlc291cmNlKik7CiAgICAgc3RhdGljIENhY2hl
ZFJlc291cmNlKiBjYWNoZWRSZXNvdXJjZShGcmFtZSosIGNvbnN0IFVSTCYpOwogICAgIHN0YXRp
YyBJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpSZXNvdXJjZVR5cGUgcmVzb3VyY2VUeXBlSlNP
TihSZXNvdXJjZVR5cGUpOwpAQCAtODcsMzkgKzg1LDM5IEBAIHB1YmxpYzoKICAgICBzdGF0aWMg
UmVzb3VyY2VUeXBlIGluc3BlY3RvclJlc291cmNlVHlwZShjb25zdCBDYWNoZWRSZXNvdXJjZSYp
OwogICAgIHN0YXRpYyBJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpSZXNvdXJjZVR5cGUgY2Fj
aGVkUmVzb3VyY2VUeXBlSlNPTihjb25zdCBDYWNoZWRSZXNvdXJjZSYpOwogICAgIHN0YXRpYyBG
cmFtZSogZmluZEZyYW1lV2l0aFNlY3VyaXR5T3JpZ2luKFBhZ2UmLCBjb25zdCBTdHJpbmcmIG9y
aWdpblJhd1N0cmluZyk7Ci0gICAgc3RhdGljIERvY3VtZW50TG9hZGVyKiBhc3NlcnREb2N1bWVu
dExvYWRlcihFcnJvclN0cmluZyYsIEZyYW1lKik7CisgICAgc3RhdGljIERvY3VtZW50TG9hZGVy
KiBhc3NlcnREb2N1bWVudExvYWRlcihJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZyYs
IEZyYW1lKik7CiAKICAgICAvLyBJbnNwZWN0b3JBZ2VudEJhc2UKLSAgICB2b2lkIGRpZENyZWF0
ZUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kUm91dGVyKiwgSW5zcGVjdG9y
OjpCYWNrZW5kRGlzcGF0Y2hlciopIG92ZXJyaWRlOwotICAgIHZvaWQgd2lsbERlc3Ryb3lGcm9u
dGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKSBvdmVycmlkZTsKKyAg
ICB2b2lkIGRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kUm91
dGVyKiwgSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlciopOworICAgIHZvaWQgd2lsbERlc3Ry
b3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKTsKIAogICAg
IC8vIFBhZ2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIKLSAgICB2b2lkIGVuYWJsZShFcnJvclN0
cmluZyYpIG92ZXJyaWRlOwotICAgIHZvaWQgZGlzYWJsZShFcnJvclN0cmluZyYpIG92ZXJyaWRl
OwotICAgIHZvaWQgcmVsb2FkKEVycm9yU3RyaW5nJiwgY29uc3QgYm9vbCogb3B0aW9uYWxSZWxv
YWRGcm9tT3JpZ2luLCBjb25zdCBib29sKiBvcHRpb25hbFJldmFsaWRhdGVBbGxSZXNvdXJjZXMp
IG92ZXJyaWRlOwotICAgIHZvaWQgbmF2aWdhdGUoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcm
IHVybCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBvdmVycmlkZVVzZXJBZ2VudChFcnJvclN0cmluZyYs
IGNvbnN0IFN0cmluZyogdmFsdWUpIG92ZXJyaWRlOwotICAgIHZvaWQgb3ZlcnJpZGVTZXR0aW5n
KEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBzZXR0aW5nLCBjb25zdCBib29sKiB2YWx1ZSkg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBnZXRDb29raWVzKEVycm9yU3RyaW5nJiwgUmVmUHRyPEpTT046
OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6Q29va2llPj4mIGNvb2tpZXMpIG92
ZXJyaWRlOwotICAgIHZvaWQgc2V0Q29va2llKEVycm9yU3RyaW5nJiwgY29uc3QgSlNPTjo6T2Jq
ZWN0JiBjb29raWVPYmplY3QpIG92ZXJyaWRlOwotICAgIHZvaWQgZGVsZXRlQ29va2llKEVycm9y
U3RyaW5nJiwgY29uc3QgU3RyaW5nJiBjb29raWVOYW1lLCBjb25zdCBTdHJpbmcmIHVybCkgb3Zl
cnJpZGU7Ci0gICAgdm9pZCBnZXRSZXNvdXJjZVRyZWUoRXJyb3JTdHJpbmcmLCBSZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6RnJhbWVSZXNvdXJjZVRyZWU+Jikgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCBnZXRSZXNvdXJjZUNvbnRlbnQoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGZy
YW1lSWQsIGNvbnN0IFN0cmluZyYgdXJsLCBTdHJpbmcqIGNvbnRlbnQsIGJvb2wqIGJhc2U2NEVu
Y29kZWQpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0Qm9vdHN0cmFwU2NyaXB0KEVycm9yU3RyaW5n
JiwgY29uc3QgU3RyaW5nKiBvcHRpb25hbFNvdXJjZSkgZmluYWw7Ci0gICAgdm9pZCBzZWFyY2hJ
blJlc291cmNlKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBjb25zdCBTdHJp
bmcmIHVybCwgY29uc3QgU3RyaW5nJiBxdWVyeSwgY29uc3QgYm9vbCogb3B0aW9uYWxDYXNlU2Vu
c2l0aXZlLCBjb25zdCBib29sKiBvcHRpb25hbElzUmVnZXgsIGNvbnN0IFN0cmluZyogb3B0aW9u
YWxSZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6Okdl
bmVyaWNUeXBlczo6U2VhcmNoTWF0Y2g+PiYpIG92ZXJyaWRlOwotICAgIHZvaWQgc2VhcmNoSW5S
ZXNvdXJjZXMoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBjb25zdCBib29sKiBjYXNlU2Vu
c2l0aXZlLCBjb25zdCBib29sKiBpc1JlZ2V4LCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0
b3I6OlByb3RvY29sOjpQYWdlOjpTZWFyY2hSZXN1bHQ+PiYpIG92ZXJyaWRlOworICAgIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZW5hYmxlKCk7CisgICAgSW5zcGVj
dG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBkaXNhYmxlKCk7CisgICAgSW5zcGVj
dG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiByZWxvYWQoT3B0aW9uYWw8Ym9vbD4m
JiBpZ25vcmVDYWNoZSwgT3B0aW9uYWw8Ym9vbD4mJiByZXZhbGlkYXRlQWxsUmVzb3VyY2VzKTsK
KyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IG5hdmlnYXRlKGNv
bnN0IFN0cmluZyYgdXJsKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09y
PHZvaWQ+IG92ZXJyaWRlVXNlckFnZW50KGNvbnN0IFN0cmluZyYpOworICAgIEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gb3ZlcnJpZGVTZXR0aW5nKEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlBhZ2U6OlNldHRpbmcsIE9wdGlvbmFsPGJvb2w+JiYgdmFsdWUpOworICAgIElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEpTT046OkFycmF5T2Y8SW5zcGVj
dG9yOjpQcm90b2NvbDo6UGFnZTo6Q29va2llPj4+IGdldENvb2tpZXMoKTsKKyAgICBJbnNwZWN0
b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHNldENvb2tpZShSZWY8SlNPTjo6T2Jq
ZWN0PiYmKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGRl
bGV0ZUNvb2tpZShjb25zdCBTdHJpbmcmIGNvb2tpZU5hbWUsIGNvbnN0IFN0cmluZyYgdXJsKTsK
KyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpQYWdlOjpGcmFtZVJlc291cmNlVHJlZT4+IGdldFJlc291cmNlVHJlZSgpOworICAg
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8c3RkOjp0dXBsZTxTdHJpbmcsIGJv
b2wgLyogYmFzZTY0RW5jb2RlZCAqLz4+IGdldFJlc291cmNlQ29udGVudChjb25zdCBJbnNwZWN0
b3I6OlByb3RvY29sOjpOZXR3b3JrOjpGcmFtZUlkJiwgY29uc3QgU3RyaW5nJiB1cmwpOworICAg
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc2V0Qm9vdHN0cmFwU2Ny
aXB0KGNvbnN0IFN0cmluZyYgc291cmNlKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJv
clN0cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkdlbmVyaWNU
eXBlczo6U2VhcmNoTWF0Y2g+Pj4gc2VhcmNoSW5SZXNvdXJjZShjb25zdCBJbnNwZWN0b3I6OlBy
b3RvY29sOjpOZXR3b3JrOjpGcmFtZUlkJiwgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmlu
ZyYgcXVlcnksIE9wdGlvbmFsPGJvb2w+JiYgY2FzZVNlbnNpdGl2ZSwgT3B0aW9uYWw8Ym9vbD4m
JiBpc1JlZ2V4LCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpSZXF1ZXN0SWQm
KTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJh
eU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OlNlYXJjaFJlc3VsdD4+PiBzZWFyY2hJblJl
c291cmNlcyhjb25zdCBTdHJpbmcmLCBPcHRpb25hbDxib29sPiYmIGNhc2VTZW5zaXRpdmUsIE9w
dGlvbmFsPGJvb2w+JiYgaXNSZWdleCk7CiAjaWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAg
dm9pZCBzZXRTaG93UnVsZXJzKEVycm9yU3RyaW5nJiwgYm9vbCkgb3ZlcnJpZGU7CisgICAgSW5z
cGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzZXRTaG93UnVsZXJzKGJvb2wp
OwogI2VuZGlmCi0gICAgdm9pZCBzZXRTaG93UGFpbnRSZWN0cyhFcnJvclN0cmluZyYsIGJvb2wg
c2hvdykgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRFbXVsYXRlZE1lZGlhKEVycm9yU3RyaW5nJiwg
Y29uc3QgU3RyaW5nJikgb3ZlcnJpZGU7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JT
dHJpbmdPcjx2b2lkPiBzZXRTaG93UGFpbnRSZWN0cyhib29sKTsKKyAgICBJbnNwZWN0b3I6OlBy
b3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHNldEVtdWxhdGVkTWVkaWEoY29uc3QgU3RyaW5n
Jik7CiAjaWYgRU5BQkxFKERBUktfTU9ERV9DU1MpIHx8IEhBVkUoT1NfREFSS19NT0RFX1NVUFBP
UlQpCi0gICAgdm9pZCBzZXRGb3JjZWRBcHBlYXJhbmNlKEVycm9yU3RyaW5nJiwgY29uc3QgU3Ry
aW5nJikgb3ZlcnJpZGU7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2
b2lkPiBzZXRGb3JjZWRBcHBlYXJhbmNlKE9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBh
Z2U6OkFwcGVhcmFuY2U+JiYpOwogI2VuZGlmCi0gICAgdm9pZCBzbmFwc2hvdE5vZGUoRXJyb3JT
dHJpbmcmLCBpbnQgbm9kZUlkLCBTdHJpbmcqIG91dERhdGFVUkwpIG92ZXJyaWRlOwotICAgIHZv
aWQgc25hcHNob3RSZWN0KEVycm9yU3RyaW5nJiwgaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGlu
dCBoZWlnaHQsIGNvbnN0IFN0cmluZyYgY29vcmRpbmF0ZVN5c3RlbSwgU3RyaW5nKiBvdXREYXRh
VVJMKSBvdmVycmlkZTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFN0
cmluZz4gc25hcHNob3ROb2RlKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkKTsKKyAg
ICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFN0cmluZz4gc25hcHNob3RSZWN0
KGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBJbnNwZWN0b3I6OlByb3RvY29s
OjpQYWdlOjpDb29yZGluYXRlU3lzdGVtKTsKICNpZiBFTkFCTEUoV0VCX0FSQ0hJVkUpICYmIFVT
RShDRikKLSAgICB2b2lkIGFyY2hpdmUoRXJyb3JTdHJpbmcmLCBTdHJpbmcqIGRhdGEpIG92ZXJy
aWRlOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8U3RyaW5nPiBhcmNo
aXZlKCk7CiAjZW5kaWYKIAogICAgIC8vIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbgpAQCAtMTQz
LDEwICsxNDEsMTAgQEAgcHVibGljOgogICAgIHZvaWQgZGlkU2Nyb2xsKCk7CiAgICAgdm9pZCBk
aWRSZWNhbGN1bGF0ZVN0eWxlKCk7CiAKLSAgICBGcmFtZSogZnJhbWVGb3JJZChjb25zdCBTdHJp
bmcmIGZyYW1lSWQpOworICAgIEZyYW1lKiBmcmFtZUZvcklkKGNvbnN0IEluc3BlY3Rvcjo6UHJv
dG9jb2w6Ok5ldHdvcms6OkZyYW1lSWQmKTsKICAgICBXRUJDT1JFX0VYUE9SVCBTdHJpbmcgZnJh
bWVJZChGcmFtZSopOwogICAgIFN0cmluZyBsb2FkZXJJZChEb2N1bWVudExvYWRlciopOwotICAg
IEZyYW1lKiBhc3NlcnRGcmFtZShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgZnJhbWVJZCk7
CisgICAgRnJhbWUqIGFzc2VydEZyYW1lKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5n
JiwgY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6RnJhbWVJZCYpOwogCiBwcml2
YXRlOgogICAgIGRvdWJsZSB0aW1lc3RhbXAoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclRpbWVsaW5lQWdlbnQuY3BwCmluZGV4IDBi
NDY2MDY4ZDkwZmUxNDk1YTg0MjliNzYzOWYzMTM1YmQ0MzNmNDguLjBkZjk1MDU3MDNkMGIzODE4
MTEyNWU1MzAxZTIwNDExMjdmYzNiNTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9hZ2VudHMvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JUaW1lbGluZUFnZW50LmNwcApAQCAtMTAyLDgw
ICsxMDIsODIgQEAgdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpkaWRDcmVhdGVGcm9udGVu
ZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9udGVuZFJvdXQKIAogdm9pZCBJbnNwZWN0b3JUaW1l
bGluZUFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkRpc2Nv
bm5lY3RSZWFzb24pCiB7Ci0gICAgRXJyb3JTdHJpbmcgaWdub3JlZDsKLSAgICBkaXNhYmxlKGln
bm9yZWQpOworICAgIGRpc2FibGUoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50
OjplbmFibGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nKQorUHJvdG9jb2w6OkVycm9yU3RyaW5n
T3I8dm9pZD4gSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6ZW5hYmxlKCkKIHsKLSAgICBpZiAobV9p
bnN0cnVtZW50aW5nQWdlbnRzLmVuYWJsZWRUaW1lbGluZUFnZW50KCkgPT0gdGhpcykgewotICAg
ICAgICBlcnJvclN0cmluZyA9ICJUaW1lbGluZSBkb21haW4gYWxyZWFkeSBlbmFibGVkIl9zOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmIChtX2luc3RydW1lbnRpbmdBZ2VudHMuZW5h
YmxlZFRpbWVsaW5lQWdlbnQoKSA9PSB0aGlzKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0
ZWQoIlRpbWVsaW5lIGRvbWFpbiBhbHJlYWR5IGVuYWJsZWQiX3MpOwogCiAgICAgbV9pbnN0cnVt
ZW50aW5nQWdlbnRzLnNldEVuYWJsZWRUaW1lbGluZUFnZW50KHRoaXMpOworCisgICAgcmV0dXJu
IHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpkaXNhYmxlKEVycm9yU3Ry
aW5nJiBlcnJvclN0cmluZykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3Rv
clRpbWVsaW5lQWdlbnQ6OmRpc2FibGUoKQogewotICAgIGlmIChtX2luc3RydW1lbnRpbmdBZ2Vu
dHMuZW5hYmxlZFRpbWVsaW5lQWdlbnQoKSAhPSB0aGlzKSB7Ci0gICAgICAgIGVycm9yU3RyaW5n
ID0gIlRpbWVsaW5lIGRvbWFpbiBhbHJlYWR5IGRpc2FibGVkIl9zOwotICAgICAgICByZXR1cm47
Ci0gICAgfQorICAgIGlmIChtX2luc3RydW1lbnRpbmdBZ2VudHMuZW5hYmxlZFRpbWVsaW5lQWdl
bnQoKSAhPSB0aGlzKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIlRpbWVsaW5lIGRv
bWFpbiBhbHJlYWR5IGRpc2FibGVkIl9zKTsKIAogICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy5z
ZXRFbmFibGVkVGltZWxpbmVBZ2VudChudWxscHRyKTsKIAotICAgIEVycm9yU3RyaW5nIGlnbm9y
ZWQ7Ci0gICAgc3RvcChpZ25vcmVkKTsKKyAgICBzdG9wKCk7CiAKICAgICBtX2F1dG9DYXB0dXJl
RW5hYmxlZCA9IGZhbHNlOwogICAgIG1faW5zdHJ1bWVudHMuY2xlYXIoKTsKKworICAgIHJldHVy
biB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6c3RhcnQoRXJyb3JTdHJp
bmcmLCBjb25zdCBpbnQqIG1heENhbGxTdGFja0RlcHRoKQorUHJvdG9jb2w6OkVycm9yU3RyaW5n
T3I8dm9pZD4gSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6c3RhcnQoT3B0aW9uYWw8aW50PiYmIG1h
eENhbGxTdGFja0RlcHRoKQogewogICAgIG1fdHJhY2tpbmdGcm9tRnJvbnRlbmQgPSB0cnVlOwog
Ci0gICAgaW50ZXJuYWxTdGFydChtYXhDYWxsU3RhY2tEZXB0aCk7CisgICAgaW50ZXJuYWxTdGFy
dChXVEZNb3ZlKG1heENhbGxTdGFja0RlcHRoKSk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12
b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OnN0b3AoRXJyb3JTdHJpbmcmKQorUHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6c3RvcCgpCiB7CiAg
ICAgaW50ZXJuYWxTdG9wKCk7CiAKICAgICBtX3RyYWNraW5nRnJvbUZyb250ZW5kID0gZmFsc2U7
CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OnNl
dEF1dG9DYXB0dXJlRW5hYmxlZChFcnJvclN0cmluZyYsIGJvb2wgZW5hYmxlZCkKK1Byb3RvY29s
OjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OnNldEF1dG9DYXB0
dXJlRW5hYmxlZChib29sIGVuYWJsZWQpCiB7CiAgICAgbV9hdXRvQ2FwdHVyZUVuYWJsZWQgPSBl
bmFibGVkOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFn
ZW50OjpzZXRJbnN0cnVtZW50cyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IEpTT046
OkFycmF5JiBpbnN0cnVtZW50cykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3Bl
Y3RvclRpbWVsaW5lQWdlbnQ6OnNldEluc3RydW1lbnRzKFJlZjxKU09OOjpBcnJheT4mJiBpbnN0
cnVtZW50cykKIHsKICAgICBWZWN0b3I8UHJvdG9jb2w6OlRpbWVsaW5lOjpJbnN0cnVtZW50PiBu
ZXdJbnN0cnVtZW50czsKLSAgICBuZXdJbnN0cnVtZW50cy5yZXNlcnZlQ2FwYWNpdHkoaW5zdHJ1
bWVudHMubGVuZ3RoKCkpOworICAgIG5ld0luc3RydW1lbnRzLnJlc2VydmVDYXBhY2l0eShpbnN0
cnVtZW50cy0+bGVuZ3RoKCkpOwogCi0gICAgZm9yIChjb25zdCBhdXRvJiBpbnN0cnVtZW50VmFs
dWUgOiBpbnN0cnVtZW50cykgewotICAgICAgICBTdHJpbmcgZW51bVZhbHVlU3RyaW5nOwotICAg
ICAgICBpZiAoIWluc3RydW1lbnRWYWx1ZS0+YXNTdHJpbmcoZW51bVZhbHVlU3RyaW5nKSkgewot
ICAgICAgICAgICAgZXJyb3JTdHJpbmcgPSAiVW5leHBlY3RlZCBub24tc3RyaW5nIHZhbHVlIGlu
IGdpdmVuIGluc3RydW1lbnRzIl9zOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Cisg
ICAgZm9yIChjb25zdCBhdXRvJiBpbnN0cnVtZW50VmFsdWUgOiBpbnN0cnVtZW50cy5nZXQoKSkg
eworICAgICAgICBhdXRvIGluc3RydW1lbnRTdHJpbmcgPSBpbnN0cnVtZW50VmFsdWUtPmFzU3Ry
aW5nKCk7CisgICAgICAgIGlmICghaW5zdHJ1bWVudFN0cmluZykKKyAgICAgICAgICAgIHJldHVy
biBtYWtlVW5leHBlY3RlZCgiVW5leHBlY3RlZCBub24tc3RyaW5nIHZhbHVlIGluIGdpdmVuIGlu
c3RydW1lbnRzIl9zKTsKIAotICAgICAgICBPcHRpb25hbDxQcm90b2NvbDo6VGltZWxpbmU6Oklu
c3RydW1lbnQ+IGluc3RydW1lbnRUeXBlID0gUHJvdG9jb2w6Okluc3BlY3RvckhlbHBlcnM6OnBh
cnNlRW51bVZhbHVlRnJvbVN0cmluZzxQcm90b2NvbDo6VGltZWxpbmU6Okluc3RydW1lbnQ+KGVu
dW1WYWx1ZVN0cmluZyk7Ci0gICAgICAgIGlmICghaW5zdHJ1bWVudFR5cGUpIHsKLSAgICAgICAg
ICAgIGVycm9yU3RyaW5nID0gbWFrZVN0cmluZygiVW5rbm93biBpdGVtIGluIGdpdmVuIGluc3Ry
dW1lbnRzOiAiLCBlbnVtVmFsdWVTdHJpbmcpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9CisgICAgICAgIGF1dG8gaW5zdHJ1bWVudCA9IFByb3RvY29sOjpIZWxwZXJzOjpwYXJzZUVu
dW1WYWx1ZUZyb21TdHJpbmc8UHJvdG9jb2w6OlRpbWVsaW5lOjpJbnN0cnVtZW50PihpbnN0cnVt
ZW50U3RyaW5nKTsKKyAgICAgICAgaWYgKCFpbnN0cnVtZW50KQorICAgICAgICAgICAgcmV0dXJu
IG1ha2VVbmV4cGVjdGVkKG1ha2VTdHJpbmcoIlVua25vd24gaW5zdHJ1bWVudDogIiwgaW5zdHJ1
bWVudFN0cmluZykpOwogCi0gICAgICAgIG5ld0luc3RydW1lbnRzLnVuY2hlY2tlZEFwcGVuZCgq
aW5zdHJ1bWVudFR5cGUpOworICAgICAgICBuZXdJbnN0cnVtZW50cy51bmNoZWNrZWRBcHBlbmQo
Kmluc3RydW1lbnQpOwogICAgIH0KIAogICAgIG1faW5zdHJ1bWVudHMuc3dhcChuZXdJbnN0cnVt
ZW50cyk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvclRpbWVsaW5lQWdl
bnQ6OmludGVybmFsU3RhcnQoY29uc3QgaW50KiBtYXhDYWxsU3RhY2tEZXB0aCkKK3ZvaWQgSW5z
cGVjdG9yVGltZWxpbmVBZ2VudDo6aW50ZXJuYWxTdGFydChPcHRpb25hbDxpbnQ+JiYgbWF4Q2Fs
bFN0YWNrRGVwdGgpCiB7CiAgICAgaWYgKG1fdHJhY2tpbmcpCiAgICAgICAgIHJldHVybjsKQEAg
LTI5Miw4ICsyOTQsNyBAQCB2b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OnN0YXJ0RnJvbUNv
bnNvbGUoSlNDOjpKU0dsb2JhbE9iamVjdCogZXhlYywgY29uc3QgUwogICAgIC8vIEFsbG93IGR1
cGxpY2F0ZSB1bm5hbWVkIHByb2ZpbGVzLiBEaXNhbGxvdyBkdXBsaWNhdGUgbmFtZWQgcHJvZmls
ZXMuCiAgICAgaWYgKCF0aXRsZS5pc0VtcHR5KCkpIHsKICAgICAgICAgZm9yIChjb25zdCBUaW1l
bGluZVJlY29yZEVudHJ5JiByZWNvcmQgOiBtX3BlbmRpbmdDb25zb2xlUHJvZmlsZVJlY29yZHMp
IHsKLSAgICAgICAgICAgIFN0cmluZyByZWNvcmRUaXRsZTsKLSAgICAgICAgICAgIHJlY29yZC5k
YXRhLT5nZXRTdHJpbmcoInRpdGxlIl9zLCByZWNvcmRUaXRsZSk7CisgICAgICAgICAgICBhdXRv
IHJlY29yZFRpdGxlID0gcmVjb3JkLmRhdGEtPmdldFN0cmluZygidGl0bGUiX3MpOwogICAgICAg
ICAgICAgaWYgKHJlY29yZFRpdGxlID09IHRpdGxlKSB7CiAgICAgICAgICAgICAgICAgaWYgKGF1
dG8qIGNvbnNvbGVBZ2VudCA9IG1faW5zdHJ1bWVudGluZ0FnZW50cy53ZWJDb25zb2xlQWdlbnQo
KSkgewogICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogU2VuZCBhbiBlbnVtIHRvIHRoZSBm
cm9udGVuZCBmb3IgbG9jYWxpemF0aW9uPwpAQCAtMzE4LDggKzMxOSw3IEBAIHZvaWQgSW5zcGVj
dG9yVGltZWxpbmVBZ2VudDo6c3RvcEZyb21Db25zb2xlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBj
b25zdCBTdHJpbmcmCiAgICAgZm9yIChpbnQgaSA9IG1fcGVuZGluZ0NvbnNvbGVQcm9maWxlUmVj
b3Jkcy5zaXplKCkgLSAxOyBpID49IDA7IC0taSkgewogICAgICAgICBjb25zdCBUaW1lbGluZVJl
Y29yZEVudHJ5JiByZWNvcmQgPSBtX3BlbmRpbmdDb25zb2xlUHJvZmlsZVJlY29yZHNbaV07CiAK
LSAgICAgICAgU3RyaW5nIHJlY29yZFRpdGxlOwotICAgICAgICByZWNvcmQuZGF0YS0+Z2V0U3Ry
aW5nKCJ0aXRsZSJfcywgcmVjb3JkVGl0bGUpOworICAgICAgICBhdXRvIHJlY29yZFRpdGxlID0g
cmVjb3JkLmRhdGEtPmdldFN0cmluZygidGl0bGUiX3MpOwogICAgICAgICBpZiAodGl0bGUuaXNF
bXB0eSgpIHx8IHJlY29yZFRpdGxlID09IHRpdGxlKSB7CiAgICAgICAgICAgICBkaWRDb21wbGV0
ZVJlY29yZEVudHJ5KHJlY29yZCk7CiAgICAgICAgICAgICBtX3BlbmRpbmdDb25zb2xlUHJvZmls
ZVJlY29yZHMucmVtb3ZlKGkpOwpAQCAtNDk2LDEwICs0OTYsOCBAQCB2b2lkIEluc3BlY3RvclRp
bWVsaW5lQWdlbnQ6Om1haW5GcmFtZVN0YXJ0ZWRMb2FkaW5nKCkKICAgICBtX2F1dG9DYXB0dXJl
UGhhc2UgPSBBdXRvQ2FwdHVyZVBoYXNlOjpCZWZvcmVMb2FkOwogCiAgICAgLy8gUHJlLWVtcHRp
dmVseSBkaXNhYmxlIGJyZWFrcG9pbnRzLiBUaGUgZnJvbnRlbmQgbXVzdCByZS1lbmFibGUgdGhl
bS4KLSAgICBpZiAoYXV0byogd2ViRGVidWdnZXJBZ2VudCA9IG1faW5zdHJ1bWVudGluZ0FnZW50
cy5lbmFibGVkV2ViRGVidWdnZXJBZ2VudCgpKSB7Ci0gICAgICAgIEVycm9yU3RyaW5nIGlnbm9y
ZWQ7Ci0gICAgICAgIHdlYkRlYnVnZ2VyQWdlbnQtPnNldEJyZWFrcG9pbnRzQWN0aXZlKGlnbm9y
ZWQsIGZhbHNlKTsKLSAgICB9CisgICAgaWYgKGF1dG8qIHdlYkRlYnVnZ2VyQWdlbnQgPSBtX2lu
c3RydW1lbnRpbmdBZ2VudHMuZW5hYmxlZFdlYkRlYnVnZ2VyQWdlbnQoKSkKKyAgICAgICAgd2Vi
RGVidWdnZXJBZ2VudC0+c2V0QnJlYWtwb2ludHNBY3RpdmUoZmFsc2UpOwogCiAgICAgLy8gSW5m
b3JtIHRoZSBmcm9udGVuZCB3ZSBzdGFydGVkIGFuIGF1dG8gY2FwdHVyZS4gVGhlIGZyb250ZW5k
IG11c3Qgc3RvcCBjYXB0dXJlLgogICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5hdXRvQ2FwdHVy
ZVN0YXJ0ZWQoKTsKQEAgLTUyMywxMCArNTIxLDggQEAgdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFn
ZW50OjpzdGFydFByb2dyYW1tYXRpY0NhcHR1cmUoKQogICAgIC8vIERpc2FibGUgYnJlYWtwb2lu
dHMgZHVyaW5nIHByb2dyYW1tYXRpYyBjYXB0dXJlLgogICAgIGlmIChhdXRvKiB3ZWJEZWJ1Z2dl
ckFnZW50ID0gbV9pbnN0cnVtZW50aW5nQWdlbnRzLmVuYWJsZWRXZWJEZWJ1Z2dlckFnZW50KCkp
IHsKICAgICAgICAgbV9wcm9ncmFtbWF0aWNDYXB0dXJlUmVzdG9yZUJyZWFrcG9pbnRBY3RpdmVW
YWx1ZSA9IHdlYkRlYnVnZ2VyQWdlbnQtPmJyZWFrcG9pbnRzQWN0aXZlKCk7Ci0gICAgICAgIGlm
IChtX3Byb2dyYW1tYXRpY0NhcHR1cmVSZXN0b3JlQnJlYWtwb2ludEFjdGl2ZVZhbHVlKSB7Ci0g
ICAgICAgICAgICBFcnJvclN0cmluZyBpZ25vcmVkOwotICAgICAgICAgICAgd2ViRGVidWdnZXJB
Z2VudC0+c2V0QnJlYWtwb2ludHNBY3RpdmUoaWdub3JlZCwgZmFsc2UpOwotICAgICAgICB9Cisg
ICAgICAgIGlmIChtX3Byb2dyYW1tYXRpY0NhcHR1cmVSZXN0b3JlQnJlYWtwb2ludEFjdGl2ZVZh
bHVlKQorICAgICAgICAgICAgd2ViRGVidWdnZXJBZ2VudC0+c2V0QnJlYWtwb2ludHNBY3RpdmUo
ZmFsc2UpOwogICAgIH0gZWxzZQogICAgICAgICBtX3Byb2dyYW1tYXRpY0NhcHR1cmVSZXN0b3Jl
QnJlYWtwb2ludEFjdGl2ZVZhbHVlID0gZmFsc2U7CiAKQEAgLTU0NiwxMCArNTQyLDggQEAgdm9p
ZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpzdG9wUHJvZ3JhbW1hdGljQ2FwdHVyZSgpCiAKICAg
ICAvLyBSZS1lbmFibGUgYnJlYWtwb2ludHMgaWYgdGhleSB3ZXJlIGVuYWJsZWQuCiAgICAgaWYg
KG1fcHJvZ3JhbW1hdGljQ2FwdHVyZVJlc3RvcmVCcmVha3BvaW50QWN0aXZlVmFsdWUpIHsKLSAg
ICAgICAgaWYgKGF1dG8qIHdlYkRlYnVnZ2VyQWdlbnQgPSBtX2luc3RydW1lbnRpbmdBZ2VudHMu
ZW5hYmxlZFdlYkRlYnVnZ2VyQWdlbnQoKSkgewotICAgICAgICAgICAgRXJyb3JTdHJpbmcgaWdu
b3JlZDsKLSAgICAgICAgICAgIHdlYkRlYnVnZ2VyQWdlbnQtPnNldEJyZWFrcG9pbnRzQWN0aXZl
KGlnbm9yZWQsIHRydWUpOwotICAgICAgICB9CisgICAgICAgIGlmIChhdXRvKiB3ZWJEZWJ1Z2dl
ckFnZW50ID0gbV9pbnN0cnVtZW50aW5nQWdlbnRzLmVuYWJsZWRXZWJEZWJ1Z2dlckFnZW50KCkp
CisgICAgICAgICAgICB3ZWJEZWJ1Z2dlckFnZW50LT5zZXRCcmVha3BvaW50c0FjdGl2ZSh0cnVl
KTsKICAgICB9CiB9CiAKQEAgLTU1NywyNiArNTUxLDI2IEBAIHZvaWQgSW5zcGVjdG9yVGltZWxp
bmVBZ2VudDo6dG9nZ2xlSW5zdHJ1bWVudHMoSW5zdHJ1bWVudFN0YXRlIHN0YXRlKQogewogICAg
IGZvciAoYXV0byBpbnN0cnVtZW50VHlwZSA6IG1faW5zdHJ1bWVudHMpIHsKICAgICAgICAgc3dp
dGNoIChpbnN0cnVtZW50VHlwZSkgewotICAgICAgICBjYXNlIEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlRpbWVsaW5lOjpJbnN0cnVtZW50OjpTY3JpcHRQcm9maWxlcjogeworICAgICAgICBjYXNlIFBy
b3RvY29sOjpUaW1lbGluZTo6SW5zdHJ1bWVudDo6U2NyaXB0UHJvZmlsZXI6IHsKICAgICAgICAg
ICAgIHRvZ2dsZVNjcmlwdFByb2ZpbGVySW5zdHJ1bWVudChzdGF0ZSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQotICAgICAgICBjYXNlIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRpbWVs
aW5lOjpJbnN0cnVtZW50OjpIZWFwOiB7CisgICAgICAgIGNhc2UgUHJvdG9jb2w6OlRpbWVsaW5l
OjpJbnN0cnVtZW50OjpIZWFwOiB7CiAgICAgICAgICAgICB0b2dnbGVIZWFwSW5zdHJ1bWVudChz
dGF0ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBjYXNlIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlRpbWVsaW5lOjpJbnN0cnVtZW50OjpDUFU6IHsKKyAgICAgICAgY2Fz
ZSBQcm90b2NvbDo6VGltZWxpbmU6Okluc3RydW1lbnQ6OkNQVTogewogICAgICAgICAgICAgdG9n
Z2xlQ1BVSW5zdHJ1bWVudChzdGF0ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQot
ICAgICAgICBjYXNlIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRpbWVsaW5lOjpJbnN0cnVtZW50OjpN
ZW1vcnk6IHsKKyAgICAgICAgY2FzZSBQcm90b2NvbDo6VGltZWxpbmU6Okluc3RydW1lbnQ6Ok1l
bW9yeTogewogICAgICAgICAgICAgdG9nZ2xlTWVtb3J5SW5zdHJ1bWVudChzdGF0ZSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBjYXNlIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlRpbWVsaW5lOjpJbnN0cnVtZW50OjpUaW1lbGluZToKKyAgICAgICAgY2FzZSBQcm90b2Nv
bDo6VGltZWxpbmU6Okluc3RydW1lbnQ6OlRpbWVsaW5lOgogICAgICAgICAgICAgdG9nZ2xlVGlt
ZWxpbmVJbnN0cnVtZW50KHN0YXRlKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRpbWVsaW5lOjpJbnN0cnVtZW50OjpBbmltYXRpb246Cisg
ICAgICAgIGNhc2UgUHJvdG9jb2w6OlRpbWVsaW5lOjpJbnN0cnVtZW50OjpBbmltYXRpb246CiAg
ICAgICAgICAgICB0b2dnbGVBbmltYXRpb25JbnN0cnVtZW50KHN0YXRlKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CkBAIC01ODYsMjQgKzU4MCwyMSBAQCB2b2lkIEluc3BlY3RvclRp
bWVsaW5lQWdlbnQ6OnRvZ2dsZUluc3RydW1lbnRzKEluc3RydW1lbnRTdGF0ZSBzdGF0ZSkKIHZv
aWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6dG9nZ2xlU2NyaXB0UHJvZmlsZXJJbnN0cnVtZW50
KEluc3RydW1lbnRTdGF0ZSBzdGF0ZSkKIHsKICAgICBpZiAoYXV0byogc2NyaXB0UHJvZmlsZXJB
Z2VudCA9IG1faW5zdHJ1bWVudGluZ0FnZW50cy5wZXJzaXN0ZW50U2NyaXB0UHJvZmlsZXJBZ2Vu
dCgpKSB7Ci0gICAgICAgIEVycm9yU3RyaW5nIGlnbm9yZWQ7Ci0gICAgICAgIGlmIChzdGF0ZSA9
PSBJbnN0cnVtZW50U3RhdGU6OlN0YXJ0KSB7Ci0gICAgICAgICAgICBjb25zdCBib29sIGluY2x1
ZGVTYW1wbGVzID0gdHJ1ZTsKLSAgICAgICAgICAgIHNjcmlwdFByb2ZpbGVyQWdlbnQtPnN0YXJ0
VHJhY2tpbmcoaWdub3JlZCwgJmluY2x1ZGVTYW1wbGVzKTsKLSAgICAgICAgfSBlbHNlCi0gICAg
ICAgICAgICBzY3JpcHRQcm9maWxlckFnZW50LT5zdG9wVHJhY2tpbmcoaWdub3JlZCk7CisgICAg
ICAgIGlmIChzdGF0ZSA9PSBJbnN0cnVtZW50U3RhdGU6OlN0YXJ0KQorICAgICAgICAgICAgc2Ny
aXB0UHJvZmlsZXJBZ2VudC0+c3RhcnRUcmFja2luZyh0cnVlKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgc2NyaXB0UHJvZmlsZXJBZ2VudC0+c3RvcFRyYWNraW5nKCk7CiAgICAgfQogfQog
CiB2b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OnRvZ2dsZUhlYXBJbnN0cnVtZW50KEluc3Ry
dW1lbnRTdGF0ZSBzdGF0ZSkKIHsKICAgICBpZiAoYXV0byogaGVhcEFnZW50ID0gbV9pbnN0cnVt
ZW50aW5nQWdlbnRzLmVuYWJsZWRQYWdlSGVhcEFnZW50KCkpIHsKLSAgICAgICAgRXJyb3JTdHJp
bmcgaWdub3JlZDsKICAgICAgICAgaWYgKHN0YXRlID09IEluc3RydW1lbnRTdGF0ZTo6U3RhcnQp
IHsKICAgICAgICAgICAgIGlmIChtX2F1dG9DYXB0dXJlUGhhc2UgPT0gQXV0b0NhcHR1cmVQaGFz
ZTo6Tm9uZSB8fCBtX2F1dG9DYXB0dXJlUGhhc2UgPT0gQXV0b0NhcHR1cmVQaGFzZTo6Rmlyc3RO
YXZpZ2F0aW9uKQotICAgICAgICAgICAgICAgIGhlYXBBZ2VudC0+c3RhcnRUcmFja2luZyhpZ25v
cmVkKTsKKyAgICAgICAgICAgICAgICBoZWFwQWdlbnQtPnN0YXJ0VHJhY2tpbmcoKTsKICAgICAg
ICAgfSBlbHNlCi0gICAgICAgICAgICBoZWFwQWdlbnQtPnN0b3BUcmFja2luZyhpZ25vcmVkKTsK
KyAgICAgICAgICAgIGhlYXBBZ2VudC0+c3RvcFRyYWNraW5nKCk7CiAgICAgfQogfQogCkBAIC02
MTEsMTEgKzYwMiwxMCBAQCB2b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OnRvZ2dsZUNQVUlu
c3RydW1lbnQoSW5zdHJ1bWVudFN0YXRlIHN0YXRlKQogewogI2lmIEVOQUJMRShSRVNPVVJDRV9V
U0FHRSkKICAgICBpZiAoYXV0byogY3B1UHJvZmlsZXJBZ2VudCA9IG1faW5zdHJ1bWVudGluZ0Fn
ZW50cy5wZXJzaXN0ZW50Q1BVUHJvZmlsZXJBZ2VudCgpKSB7Ci0gICAgICAgIEVycm9yU3RyaW5n
IGlnbm9yZWQ7CiAgICAgICAgIGlmIChzdGF0ZSA9PSBJbnN0cnVtZW50U3RhdGU6OlN0YXJ0KQot
ICAgICAgICAgICAgY3B1UHJvZmlsZXJBZ2VudC0+c3RhcnRUcmFja2luZyhpZ25vcmVkKTsKKyAg
ICAgICAgICAgIGNwdVByb2ZpbGVyQWdlbnQtPnN0YXJ0VHJhY2tpbmcoKTsKICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgY3B1UHJvZmlsZXJBZ2VudC0+c3RvcFRyYWNraW5nKGlnbm9yZWQpOwor
ICAgICAgICAgICAgY3B1UHJvZmlsZXJBZ2VudC0+c3RvcFRyYWNraW5nKCk7CiAgICAgfQogI2Vs
c2UKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAtNjI2LDExICs2MTYsMTAgQEAgdm9pZCBJ
bnNwZWN0b3JUaW1lbGluZUFnZW50Ojp0b2dnbGVNZW1vcnlJbnN0cnVtZW50KEluc3RydW1lbnRT
dGF0ZSBzdGF0ZSkKIHsKICNpZiBFTkFCTEUoUkVTT1VSQ0VfVVNBR0UpCiAgICAgaWYgKGF1dG8q
IG1lbW9yeUFnZW50ID0gbV9pbnN0cnVtZW50aW5nQWdlbnRzLnBlcnNpc3RlbnRNZW1vcnlBZ2Vu
dCgpKSB7Ci0gICAgICAgIEVycm9yU3RyaW5nIGlnbm9yZWQ7CiAgICAgICAgIGlmIChzdGF0ZSA9
PSBJbnN0cnVtZW50U3RhdGU6OlN0YXJ0KQotICAgICAgICAgICAgbWVtb3J5QWdlbnQtPnN0YXJ0
VHJhY2tpbmcoaWdub3JlZCk7CisgICAgICAgICAgICBtZW1vcnlBZ2VudC0+c3RhcnRUcmFja2lu
ZygpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBtZW1vcnlBZ2VudC0+c3RvcFRyYWNraW5n
KGlnbm9yZWQpOworICAgICAgICAgICAgbWVtb3J5QWdlbnQtPnN0b3BUcmFja2luZygpOwogICAg
IH0KICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTY0MCw3ICs2MjksNyBAQCB2
b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OnRvZ2dsZU1lbW9yeUluc3RydW1lbnQoSW5zdHJ1
bWVudFN0YXRlIHN0YXRlKQogdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50Ojp0b2dnbGVUaW1l
bGluZUluc3RydW1lbnQoSW5zdHJ1bWVudFN0YXRlIHN0YXRlKQogewogICAgIGlmIChzdGF0ZSA9
PSBJbnN0cnVtZW50U3RhdGU6OlN0YXJ0KQotICAgICAgICBpbnRlcm5hbFN0YXJ0KCk7CisgICAg
ICAgIGludGVybmFsU3RhcnQoV1RGOjpudWxsb3B0KTsKICAgICBlbHNlCiAgICAgICAgIGludGVy
bmFsU3RvcCgpOwogfQpAQCAtNjQ4LDExICs2MzcsMTAgQEAgdm9pZCBJbnNwZWN0b3JUaW1lbGlu
ZUFnZW50Ojp0b2dnbGVUaW1lbGluZUluc3RydW1lbnQoSW5zdHJ1bWVudFN0YXRlIHN0YXRlKQog
dm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50Ojp0b2dnbGVBbmltYXRpb25JbnN0cnVtZW50KElu
c3RydW1lbnRTdGF0ZSBzdGF0ZSkKIHsKICAgICBpZiAoYXV0byogYW5pbWF0aW9uQWdlbnQgPSBt
X2luc3RydW1lbnRpbmdBZ2VudHMucGVyc2lzdGVudEFuaW1hdGlvbkFnZW50KCkpIHsKLSAgICAg
ICAgRXJyb3JTdHJpbmcgaWdub3JlZDsKICAgICAgICAgaWYgKHN0YXRlID09IEluc3RydW1lbnRT
dGF0ZTo6U3RhcnQpCi0gICAgICAgICAgICBhbmltYXRpb25BZ2VudC0+c3RhcnRUcmFja2luZyhp
Z25vcmVkKTsKKyAgICAgICAgICAgIGFuaW1hdGlvbkFnZW50LT5zdGFydFRyYWNraW5nKCk7CiAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIGFuaW1hdGlvbkFnZW50LT5zdG9wVHJhY2tpbmcoaWdu
b3JlZCk7CisgICAgICAgICAgICBhbmltYXRpb25BZ2VudC0+c3RvcFRyYWNraW5nKCk7CiAgICAg
fQogfQogCkBAIC02OTEsNzEgKzY3OSw3MSBAQCB2b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6
OmJyZWFrcG9pbnRBY3Rpb25Qcm9iZShKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsRwogICAg
IGFwcGVuZFJlY29yZChUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZVByb2JlU2FtcGxlRGF0
YShhY3Rpb25JRCwgc2FtcGxlSWQpLCBUaW1lbGluZVJlY29yZFR5cGU6OlByb2JlU2FtcGxlLCBm
YWxzZSwgZnJhbWVGcm9tRXhlY1N0YXRlKGxleGljYWxHbG9iYWxPYmplY3QpKTsKIH0KIAotc3Rh
dGljIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRpbWVsaW5lOjpFdmVudFR5cGUgdG9Qcm90b2NvbChU
aW1lbGluZVJlY29yZFR5cGUgdHlwZSkKK3N0YXRpYyBQcm90b2NvbDo6VGltZWxpbmU6OkV2ZW50
VHlwZSB0b1Byb3RvY29sKFRpbWVsaW5lUmVjb3JkVHlwZSB0eXBlKQogewogICAgIHN3aXRjaCAo
dHlwZSkgewogICAgIGNhc2UgVGltZWxpbmVSZWNvcmRUeXBlOjpFdmVudERpc3BhdGNoOgotICAg
ICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6VGltZWxpbmU6OkV2ZW50VHlwZTo6RXZl
bnREaXNwYXRjaDsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpUaW1lbGluZTo6RXZlbnRUeXBl
OjpFdmVudERpc3BhdGNoOwogICAgIGNhc2UgVGltZWxpbmVSZWNvcmRUeXBlOjpTY2hlZHVsZVN0
eWxlUmVjYWxjdWxhdGlvbjoKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRp
bWVsaW5lOjpFdmVudFR5cGU6OlNjaGVkdWxlU3R5bGVSZWNhbGN1bGF0aW9uOworICAgICAgICBy
ZXR1cm4gUHJvdG9jb2w6OlRpbWVsaW5lOjpFdmVudFR5cGU6OlNjaGVkdWxlU3R5bGVSZWNhbGN1
bGF0aW9uOwogICAgIGNhc2UgVGltZWxpbmVSZWNvcmRUeXBlOjpSZWNhbGN1bGF0ZVN0eWxlczoK
LSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRpbWVsaW5lOjpFdmVudFR5cGU6
OlJlY2FsY3VsYXRlU3R5bGVzOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OlRpbWVsaW5lOjpF
dmVudFR5cGU6OlJlY2FsY3VsYXRlU3R5bGVzOwogICAgIGNhc2UgVGltZWxpbmVSZWNvcmRUeXBl
OjpJbnZhbGlkYXRlTGF5b3V0OgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6
VGltZWxpbmU6OkV2ZW50VHlwZTo6SW52YWxpZGF0ZUxheW91dDsKKyAgICAgICAgcmV0dXJuIFBy
b3RvY29sOjpUaW1lbGluZTo6RXZlbnRUeXBlOjpJbnZhbGlkYXRlTGF5b3V0OwogICAgIGNhc2Ug
VGltZWxpbmVSZWNvcmRUeXBlOjpMYXlvdXQ6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlBy
b3RvY29sOjpUaW1lbGluZTo6RXZlbnRUeXBlOjpMYXlvdXQ7CisgICAgICAgIHJldHVybiBQcm90
b2NvbDo6VGltZWxpbmU6OkV2ZW50VHlwZTo6TGF5b3V0OwogICAgIGNhc2UgVGltZWxpbmVSZWNv
cmRUeXBlOjpQYWludDoKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRpbWVs
aW5lOjpFdmVudFR5cGU6OlBhaW50OworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OlRpbWVsaW5l
OjpFdmVudFR5cGU6OlBhaW50OwogICAgIGNhc2UgVGltZWxpbmVSZWNvcmRUeXBlOjpDb21wb3Np
dGU6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpUaW1lbGluZTo6RXZlbnRU
eXBlOjpDb21wb3NpdGU7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6VGltZWxpbmU6OkV2ZW50
VHlwZTo6Q29tcG9zaXRlOwogICAgIGNhc2UgVGltZWxpbmVSZWNvcmRUeXBlOjpSZW5kZXJpbmdG
cmFtZToKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRpbWVsaW5lOjpFdmVu
dFR5cGU6OlJlbmRlcmluZ0ZyYW1lOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OlRpbWVsaW5l
OjpFdmVudFR5cGU6OlJlbmRlcmluZ0ZyYW1lOwogCiAgICAgY2FzZSBUaW1lbGluZVJlY29yZFR5
cGU6OlRpbWVySW5zdGFsbDoKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRp
bWVsaW5lOjpFdmVudFR5cGU6OlRpbWVySW5zdGFsbDsKKyAgICAgICAgcmV0dXJuIFByb3RvY29s
OjpUaW1lbGluZTo6RXZlbnRUeXBlOjpUaW1lckluc3RhbGw7CiAgICAgY2FzZSBUaW1lbGluZVJl
Y29yZFR5cGU6OlRpbWVyUmVtb3ZlOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2Nv
bDo6VGltZWxpbmU6OkV2ZW50VHlwZTo6VGltZXJSZW1vdmU7CisgICAgICAgIHJldHVybiBQcm90
b2NvbDo6VGltZWxpbmU6OkV2ZW50VHlwZTo6VGltZXJSZW1vdmU7CiAgICAgY2FzZSBUaW1lbGlu
ZVJlY29yZFR5cGU6OlRpbWVyRmlyZToKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlRpbWVsaW5lOjpFdmVudFR5cGU6OlRpbWVyRmlyZTsKKyAgICAgICAgcmV0dXJuIFByb3Rv
Y29sOjpUaW1lbGluZTo6RXZlbnRUeXBlOjpUaW1lckZpcmU7CiAKICAgICBjYXNlIFRpbWVsaW5l
UmVjb3JkVHlwZTo6RXZhbHVhdGVTY3JpcHQ6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlBy
b3RvY29sOjpUaW1lbGluZTo6RXZlbnRUeXBlOjpFdmFsdWF0ZVNjcmlwdDsKKyAgICAgICAgcmV0
dXJuIFByb3RvY29sOjpUaW1lbGluZTo6RXZlbnRUeXBlOjpFdmFsdWF0ZVNjcmlwdDsKIAogICAg
IGNhc2UgVGltZWxpbmVSZWNvcmRUeXBlOjpUaW1lU3RhbXA6Ci0gICAgICAgIHJldHVybiBJbnNw
ZWN0b3I6OlByb3RvY29sOjpUaW1lbGluZTo6RXZlbnRUeXBlOjpUaW1lU3RhbXA7CisgICAgICAg
IHJldHVybiBQcm90b2NvbDo6VGltZWxpbmU6OkV2ZW50VHlwZTo6VGltZVN0YW1wOwogICAgIGNh
c2UgVGltZWxpbmVSZWNvcmRUeXBlOjpUaW1lOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQ
cm90b2NvbDo6VGltZWxpbmU6OkV2ZW50VHlwZTo6VGltZTsKKyAgICAgICAgcmV0dXJuIFByb3Rv
Y29sOjpUaW1lbGluZTo6RXZlbnRUeXBlOjpUaW1lOwogICAgIGNhc2UgVGltZWxpbmVSZWNvcmRU
eXBlOjpUaW1lRW5kOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6VGltZWxp
bmU6OkV2ZW50VHlwZTo6VGltZUVuZDsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpUaW1lbGlu
ZTo6RXZlbnRUeXBlOjpUaW1lRW5kOwogCiAgICAgY2FzZSBUaW1lbGluZVJlY29yZFR5cGU6OkZ1
bmN0aW9uQ2FsbDoKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRpbWVsaW5l
OjpFdmVudFR5cGU6OkZ1bmN0aW9uQ2FsbDsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpUaW1l
bGluZTo6RXZlbnRUeXBlOjpGdW5jdGlvbkNhbGw7CiAgICAgY2FzZSBUaW1lbGluZVJlY29yZFR5
cGU6OlByb2JlU2FtcGxlOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6VGlt
ZWxpbmU6OkV2ZW50VHlwZTo6UHJvYmVTYW1wbGU7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6
VGltZWxpbmU6OkV2ZW50VHlwZTo6UHJvYmVTYW1wbGU7CiAgICAgY2FzZSBUaW1lbGluZVJlY29y
ZFR5cGU6OkNvbnNvbGVQcm9maWxlOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2Nv
bDo6VGltZWxpbmU6OkV2ZW50VHlwZTo6Q29uc29sZVByb2ZpbGU7CisgICAgICAgIHJldHVybiBQ
cm90b2NvbDo6VGltZWxpbmU6OkV2ZW50VHlwZTo6Q29uc29sZVByb2ZpbGU7CiAKICAgICBjYXNl
IFRpbWVsaW5lUmVjb3JkVHlwZTo6UmVxdWVzdEFuaW1hdGlvbkZyYW1lOgotICAgICAgICByZXR1
cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6VGltZWxpbmU6OkV2ZW50VHlwZTo6UmVxdWVzdEFuaW1h
dGlvbkZyYW1lOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OlRpbWVsaW5lOjpFdmVudFR5cGU6
OlJlcXVlc3RBbmltYXRpb25GcmFtZTsKICAgICBjYXNlIFRpbWVsaW5lUmVjb3JkVHlwZTo6Q2Fu
Y2VsQW5pbWF0aW9uRnJhbWU6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpU
aW1lbGluZTo6RXZlbnRUeXBlOjpDYW5jZWxBbmltYXRpb25GcmFtZTsKKyAgICAgICAgcmV0dXJu
IFByb3RvY29sOjpUaW1lbGluZTo6RXZlbnRUeXBlOjpDYW5jZWxBbmltYXRpb25GcmFtZTsKICAg
ICBjYXNlIFRpbWVsaW5lUmVjb3JkVHlwZTo6RmlyZUFuaW1hdGlvbkZyYW1lOgotICAgICAgICBy
ZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6VGltZWxpbmU6OkV2ZW50VHlwZTo6RmlyZUFuaW1h
dGlvbkZyYW1lOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OlRpbWVsaW5lOjpFdmVudFR5cGU6
OkZpcmVBbmltYXRpb25GcmFtZTsKIAogICAgIGNhc2UgVGltZWxpbmVSZWNvcmRUeXBlOjpPYnNl
cnZlckNhbGxiYWNrOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6VGltZWxp
bmU6OkV2ZW50VHlwZTo6T2JzZXJ2ZXJDYWxsYmFjazsKKyAgICAgICAgcmV0dXJuIFByb3RvY29s
OjpUaW1lbGluZTo6RXZlbnRUeXBlOjpPYnNlcnZlckNhbGxiYWNrOwogICAgIH0KIAotICAgIHJl
dHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpUaW1lbGluZTo6RXZlbnRUeXBlOjpUaW1lU3RhbXA7
CisgICAgcmV0dXJuIFByb3RvY29sOjpUaW1lbGluZTo6RXZlbnRUeXBlOjpUaW1lU3RhbXA7CiB9
CiAKLXZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6YWRkUmVjb3JkVG9UaW1lbGluZShSZWZQ
dHI8SlNPTjo6T2JqZWN0PiYmIHJlY29yZCwgVGltZWxpbmVSZWNvcmRUeXBlIHR5cGUpCit2b2lk
IEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OmFkZFJlY29yZFRvVGltZWxpbmUoUmVmPEpTT046Ok9i
amVjdD4mJiByZWNvcmQsIFRpbWVsaW5lUmVjb3JkVHlwZSB0eXBlKQogewotICAgIEFTU0VSVF9B
UkcocmVjb3JkLCByZWNvcmQpOwotICAgIHJlY29yZC0+c2V0U3RyaW5nKCJ0eXBlIiwgSW5zcGVj
dG9yOjpQcm90b2NvbDo6SW5zcGVjdG9ySGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUodG9Q
cm90b2NvbCh0eXBlKSkpOworICAgIHJlY29yZC0+c2V0U3RyaW5nKFByb3RvY29sOjpUaW1lbGlu
ZTo6VGltZWxpbmVFdmVudDo6dHlwZUtleSwgUHJvdG9jb2w6OkhlbHBlcnM6OmdldEVudW1Db25z
dGFudFZhbHVlKHRvUHJvdG9jb2wodHlwZSkpKTsKIAogICAgIGlmIChtX3JlY29yZFN0YWNrLmlz
RW1wdHkoKSkgewotICAgICAgICBhdXRvIHJlY29yZE9iamVjdCA9IEJpbmRpbmdUcmFpdHM8SW5z
cGVjdG9yOjpQcm90b2NvbDo6VGltZWxpbmU6OlRpbWVsaW5lRXZlbnQ+OjpydW50aW1lQ2FzdChX
VEZNb3ZlKHJlY29yZCkpOworICAgICAgICAvLyBGSVhNRTogcnVudGltZUNhc3QgaXMgYSBoYWNr
LiBXZSBkbyBpdCBiZWNhdXNlIHdlIGNhbid0IGJ1aWxkIFRpbWVsaW5lRXZlbnQgZGlyZWN0bHkg
bm93LgorICAgICAgICBhdXRvIHJlY29yZE9iamVjdCA9IFByb3RvY29sOjpCaW5kaW5nVHJhaXRz
PFByb3RvY29sOjpUaW1lbGluZTo6VGltZWxpbmVFdmVudD46OnJ1bnRpbWVDYXN0KFdURk1vdmUo
cmVjb3JkKSk7CiAgICAgICAgIHNlbmRFdmVudChXVEZNb3ZlKHJlY29yZE9iamVjdCkpOwogICAg
IH0gZWxzZSB7CiAgICAgICAgIGNvbnN0IFRpbWVsaW5lUmVjb3JkRW50cnkmIHBhcmVudCA9IG1f
cmVjb3JkU3RhY2subGFzdCgpOwpAQCAtNzgxLDggKzc2OSw5IEBAIHZvaWQgSW5zcGVjdG9yVGlt
ZWxpbmVBZ2VudDo6c2V0RnJhbWVJZGVudGlmaWVyKEpTT046Ok9iamVjdCogcmVjb3JkLCBGcmFt
ZSogZnJhCiAKIHZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6ZGlkQ29tcGxldGVSZWNvcmRF
bnRyeShjb25zdCBUaW1lbGluZVJlY29yZEVudHJ5JiBlbnRyeSkKIHsKLSAgICBlbnRyeS5yZWNv
cmQtPnNldE9iamVjdCgiZGF0YSJfcywgZW50cnkuZGF0YSk7Ci0gICAgZW50cnkucmVjb3JkLT5z
ZXRBcnJheSgiY2hpbGRyZW4iX3MsIGVudHJ5LmNoaWxkcmVuKTsKKyAgICBlbnRyeS5yZWNvcmQt
PnNldE9iamVjdChQcm90b2NvbDo6VGltZWxpbmU6OlRpbWVsaW5lRXZlbnQ6OmRhdGFLZXksIGVu
dHJ5LmRhdGEuY29weVJlZigpKTsKKyAgICBpZiAoZW50cnkuY2hpbGRyZW4pCisgICAgICAgIGVu
dHJ5LnJlY29yZC0+c2V0QXJyYXkoUHJvdG9jb2w6OlRpbWVsaW5lOjpUaW1lbGluZUV2ZW50Ojpj
aGlsZHJlbktleSwgKmVudHJ5LmNoaWxkcmVuKTsKICAgICBlbnRyeS5yZWNvcmQtPnNldERvdWJs
ZSgiZW5kVGltZSJfcywgdGltZXN0YW1wKCkpOwogICAgIGFkZFJlY29yZFRvVGltZWxpbmUoZW50
cnkucmVjb3JkLmNvcHlSZWYoKSwgZW50cnkudHlwZSk7CiB9CkBAIC04MDQsMjkgKzc5MywyOSBA
QCB2b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OmRpZENvbXBsZXRlQ3VycmVudFJlY29yZChU
aW1lbGluZVJlY29yZFR5cGUgdHlwZSkKICAgICB9CiB9CiAKLXZvaWQgSW5zcGVjdG9yVGltZWxp
bmVBZ2VudDo6YXBwZW5kUmVjb3JkKFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgZGF0YSwgVGltZWxp
bmVSZWNvcmRUeXBlIHR5cGUsIGJvb2wgY2FwdHVyZUNhbGxTdGFjaywgRnJhbWUqIGZyYW1lKQor
dm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjphcHBlbmRSZWNvcmQoUmVmPEpTT046Ok9iamVj
dD4mJiBkYXRhLCBUaW1lbGluZVJlY29yZFR5cGUgdHlwZSwgYm9vbCBjYXB0dXJlQ2FsbFN0YWNr
LCBGcmFtZSogZnJhbWUpCiB7CiAgICAgUmVmPEpTT046Ok9iamVjdD4gcmVjb3JkID0gVGltZWxp
bmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVHZW5lcmljUmVjb3JkKHRpbWVzdGFtcCgpLCBjYXB0dXJl
Q2FsbFN0YWNrID8gbV9tYXhDYWxsU3RhY2tEZXB0aCA6IDApOwotICAgIHJlY29yZC0+c2V0T2Jq
ZWN0KCJkYXRhIiwgV1RGTW92ZShkYXRhKSk7CisgICAgcmVjb3JkLT5zZXRPYmplY3QoUHJvdG9j
b2w6OlRpbWVsaW5lOjpUaW1lbGluZUV2ZW50OjpkYXRhS2V5LCBXVEZNb3ZlKGRhdGEpKTsKICAg
ICBzZXRGcmFtZUlkZW50aWZpZXIoJnJlY29yZC5nZXQoKSwgZnJhbWUpOwogICAgIGFkZFJlY29y
ZFRvVGltZWxpbmUoV1RGTW92ZShyZWNvcmQpLCB0eXBlKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JU
aW1lbGluZUFnZW50OjpzZW5kRXZlbnQoUmVmUHRyPEpTT046Ok9iamVjdD4mJiBldmVudCkKK3Zv
aWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6c2VuZEV2ZW50KFJlZjxKU09OOjpPYmplY3Q+JiYg
ZXZlbnQpCiB7CiAgICAgLy8gRklYTUU6IHJ1bnRpbWVDYXN0IGlzIGEgaGFjay4gV2UgZG8gaXQg
YmVjYXVzZSB3ZSBjYW4ndCBidWlsZCBUaW1lbGluZUV2ZW50IGRpcmVjdGx5IG5vdy4KLSAgICBh
dXRvIHJlY29yZENoZWNrZWQgPSBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRp
bWVsaW5lOjpUaW1lbGluZUV2ZW50Pjo6cnVudGltZUNhc3QoV1RGTW92ZShldmVudCkpOworICAg
IGF1dG8gcmVjb3JkQ2hlY2tlZCA9IFByb3RvY29sOjpCaW5kaW5nVHJhaXRzPFByb3RvY29sOjpU
aW1lbGluZTo6VGltZWxpbmVFdmVudD46OnJ1bnRpbWVDYXN0KFdURk1vdmUoZXZlbnQpKTsKICAg
ICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+ZXZlbnRSZWNvcmRlZChXVEZNb3ZlKHJlY29yZENoZWNr
ZWQpKTsKIH0KIAotSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6VGltZWxpbmVSZWNvcmRFbnRyeSBJ
bnNwZWN0b3JUaW1lbGluZUFnZW50OjpjcmVhdGVSZWNvcmRFbnRyeShSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiYmIGRhdGEsIFRpbWVsaW5lUmVjb3JkVHlwZSB0eXBlLCBib29sIGNhcHR1cmVDYWxsU3Rh
Y2ssIEZyYW1lKiBmcmFtZSkKK0luc3BlY3RvclRpbWVsaW5lQWdlbnQ6OlRpbWVsaW5lUmVjb3Jk
RW50cnkgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6Y3JlYXRlUmVjb3JkRW50cnkoUmVmPEpTT046
Ok9iamVjdD4mJiBkYXRhLCBUaW1lbGluZVJlY29yZFR5cGUgdHlwZSwgYm9vbCBjYXB0dXJlQ2Fs
bFN0YWNrLCBGcmFtZSogZnJhbWUpCiB7CiAgICAgUmVmPEpTT046Ok9iamVjdD4gcmVjb3JkID0g
VGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVHZW5lcmljUmVjb3JkKHRpbWVzdGFtcCgpLCBj
YXB0dXJlQ2FsbFN0YWNrID8gbV9tYXhDYWxsU3RhY2tEZXB0aCA6IDApOwogICAgIHNldEZyYW1l
SWRlbnRpZmllcigmcmVjb3JkLmdldCgpLCBmcmFtZSk7CiAgICAgcmV0dXJuIFRpbWVsaW5lUmVj
b3JkRW50cnkoV1RGTW92ZShyZWNvcmQpLCBXVEZNb3ZlKGRhdGEpLCBKU09OOjpBcnJheTo6Y3Jl
YXRlKCksIHR5cGUpOwogfQogCi12b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OnB1c2hDdXJy
ZW50UmVjb3JkKFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgZGF0YSwgVGltZWxpbmVSZWNvcmRUeXBl
IHR5cGUsIGJvb2wgY2FwdHVyZUNhbGxTdGFjaywgRnJhbWUqIGZyYW1lKQordm9pZCBJbnNwZWN0
b3JUaW1lbGluZUFnZW50OjpwdXNoQ3VycmVudFJlY29yZChSZWY8SlNPTjo6T2JqZWN0PiYmIGRh
dGEsIFRpbWVsaW5lUmVjb3JkVHlwZSB0eXBlLCBib29sIGNhcHR1cmVDYWxsU3RhY2ssIEZyYW1l
KiBmcmFtZSkKIHsKICAgICBwdXNoQ3VycmVudFJlY29yZChjcmVhdGVSZWNvcmRFbnRyeShXVEZN
b3ZlKGRhdGEpLCB0eXBlLCBjYXB0dXJlQ2FsbFN0YWNrLCBmcmFtZSkpOwogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JUaW1lbGluZUFnZW50
LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclRpbWVsaW5lQWdl
bnQuaAppbmRleCBhZTc1NzlhMTVmMDU3MmI1MmY5YWFlMWFmYmVlMDkyZmI4MjRjODE5Li5mZTc1
ZTQwYjQzNGY4NWQ5NzNhZWRiYjQyOTdhOTRiYWUxOGZiYjJjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclRpbWVsaW5lQWdlbnQuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclRpbWVsaW5lQWdlbnQuaApA
QCAtNTAsOCArNTAsNiBAQCBjbGFzcyBGcmFtZTsKIGNsYXNzIFJlbmRlck9iamVjdDsKIGNsYXNz
IFJ1bkxvb3BPYnNlcnZlcjsKIAotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7Ci0KIGVudW0g
Y2xhc3MgVGltZWxpbmVSZWNvcmRUeXBlIHsKICAgICBFdmVudERpc3BhdGNoLAogICAgIFNjaGVk
dWxlU3R5bGVSZWNhbGN1bGF0aW9uLApAQCAtODgsMjIgKzg2LDIyIEBAIGNsYXNzIEluc3BlY3Rv
clRpbWVsaW5lQWdlbnQgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yQWdlbnRCYXNlICwgcHVibGlj
IEluc3BlY3RvCiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgSW5z
cGVjdG9yVGltZWxpbmVBZ2VudChQYWdlQWdlbnRDb250ZXh0Jik7Ci0gICAgfkluc3BlY3RvclRp
bWVsaW5lQWdlbnQoKSBvdmVycmlkZTsKKyAgICB+SW5zcGVjdG9yVGltZWxpbmVBZ2VudCgpOwog
CiAgICAgLy8gSW5zcGVjdG9yQWdlbnRCYXNlCi0gICAgdm9pZCBkaWRDcmVhdGVGcm9udGVuZEFu
ZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9udGVuZFJvdXRlciosIEluc3BlY3Rvcjo6QmFja2VuZERp
c3BhdGNoZXIqKSBvdmVycmlkZTsKLSAgICB2b2lkIHdpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNr
ZW5kKEluc3BlY3Rvcjo6RGlzY29ubmVjdFJlYXNvbikgb3ZlcnJpZGU7CisgICAgdm9pZCBkaWRD
cmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9udGVuZFJvdXRlciosIEluc3Bl
Y3Rvcjo6QmFja2VuZERpc3BhdGNoZXIqKTsKKyAgICB2b2lkIHdpbGxEZXN0cm95RnJvbnRlbmRB
bmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlzY29ubmVjdFJlYXNvbik7CiAKICAgICAvLyBUaW1lbGlu
ZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcgotICAgIHZvaWQgZW5hYmxlKEVycm9yU3RyaW5nJikg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBkaXNhYmxlKEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAg
dm9pZCBzdGFydChFcnJvclN0cmluZyYsIGNvbnN0IGludCogbWF4Q2FsbFN0YWNrRGVwdGggPSBu
dWxscHRyKSBvdmVycmlkZTsKLSAgICB2b2lkIHN0b3AoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsK
LSAgICB2b2lkIHNldEF1dG9DYXB0dXJlRW5hYmxlZChFcnJvclN0cmluZyYsIGJvb2wpIG92ZXJy
aWRlOwotICAgIHZvaWQgc2V0SW5zdHJ1bWVudHMoRXJyb3JTdHJpbmcmLCBjb25zdCBKU09OOjpB
cnJheSYpIG92ZXJyaWRlOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8
dm9pZD4gZW5hYmxlKCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2
b2lkPiBkaXNhYmxlKCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2
b2lkPiBzdGFydChPcHRpb25hbDxpbnQ+JiYgbWF4Q2FsbFN0YWNrRGVwdGgpOworICAgIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc3RvcCgpOworICAgIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc2V0QXV0b0NhcHR1cmVFbmFibGVkKGJv
b2wpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc2V0SW5z
dHJ1bWVudHMoUmVmPEpTT046OkFycmF5PiYmKTsKIAogICAgIC8vIEpTQzo6RGVidWdnZXI6Ok9i
c2VydmVyCi0gICAgdm9pZCBicmVha3BvaW50QWN0aW9uUHJvYmUoSlNDOjpKU0dsb2JhbE9iamVj
dCosIEpTQzo6QnJlYWtwb2ludEFjdGlvbklELCB1bnNpZ25lZCBiYXRjaElkLCB1bnNpZ25lZCBz
YW1wbGVJZCwgSlNDOjpKU1ZhbHVlIHJlc3VsdCkgZmluYWw7CisgICAgdm9pZCBicmVha3BvaW50
QWN0aW9uUHJvYmUoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6QnJlYWtwb2ludEFjdGlvbklE
LCB1bnNpZ25lZCBiYXRjaElkLCB1bnNpZ25lZCBzYW1wbGVJZCwgSlNDOjpKU1ZhbHVlIHJlc3Vs
dCk7CiAKICAgICAvLyBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24KICAgICB2b2lkIGRpZEluc3Rh
bGxUaW1lcihpbnQgdGltZXJJZCwgU2Vjb25kcyB0aW1lb3V0LCBib29sIHNpbmdsZVNob3QsIEZy
YW1lKik7CkBAIC0xNjAsOSArMTU4LDcgQEAgcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgVGlt
ZWxpbmVSZWNvcmRTdGFjazsKIAogICAgIHN0cnVjdCBUaW1lbGluZVJlY29yZEVudHJ5IHsKLSAg
ICAgICAgVGltZWxpbmVSZWNvcmRFbnRyeSgpCi0gICAgICAgICAgICA6IHR5cGUoVGltZWxpbmVS
ZWNvcmRUeXBlOjpFdmVudERpc3BhdGNoKSB7IH0KLSAgICAgICAgVGltZWxpbmVSZWNvcmRFbnRy
eShSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHJlY29yZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBk
YXRhLCBSZWZQdHI8SlNPTjo6QXJyYXk+JiYgY2hpbGRyZW4sIFRpbWVsaW5lUmVjb3JkVHlwZSB0
eXBlKQorICAgICAgICBUaW1lbGluZVJlY29yZEVudHJ5KFJlZjxKU09OOjpPYmplY3Q+JiYgcmVj
b3JkLCBSZWY8SlNPTjo6T2JqZWN0PiYmIGRhdGEsIFJlZlB0cjxKU09OOjpBcnJheT4mJiBjaGls
ZHJlbiwgVGltZWxpbmVSZWNvcmRUeXBlIHR5cGUpCiAgICAgICAgICAgICA6IHJlY29yZChXVEZN
b3ZlKHJlY29yZCkpCiAgICAgICAgICAgICAsIGRhdGEoV1RGTW92ZShkYXRhKSkKICAgICAgICAg
ICAgICwgY2hpbGRyZW4oV1RGTW92ZShjaGlsZHJlbikpCkBAIC0xNzAsMjkgKzE2NiwyOSBAQCBw
cml2YXRlOgogICAgICAgICB7CiAgICAgICAgIH0KIAotICAgICAgICBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiByZWNvcmQ7Ci0gICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IGRhdGE7CisgICAgICAg
IFJlZjxKU09OOjpPYmplY3Q+IHJlY29yZDsKKyAgICAgICAgUmVmPEpTT046Ok9iamVjdD4gZGF0
YTsKICAgICAgICAgUmVmUHRyPEpTT046OkFycmF5PiBjaGlsZHJlbjsKICAgICAgICAgVGltZWxp
bmVSZWNvcmRUeXBlIHR5cGU7CiAgICAgfTsKIAotICAgIHZvaWQgaW50ZXJuYWxTdGFydChjb25z
dCBpbnQqIG1heENhbGxTdGFja0RlcHRoID0gbnVsbHB0cik7CisgICAgdm9pZCBpbnRlcm5hbFN0
YXJ0KE9wdGlvbmFsPGludD4mJiBtYXhDYWxsU3RhY2tEZXB0aCk7CiAgICAgdm9pZCBpbnRlcm5h
bFN0b3AoKTsKICAgICBkb3VibGUgdGltZXN0YW1wKCk7CiAKLSAgICB2b2lkIHNlbmRFdmVudChS
ZWZQdHI8SlNPTjo6T2JqZWN0PiYmKTsKLSAgICB2b2lkIGFwcGVuZFJlY29yZChSZWZQdHI8SlNP
Tjo6T2JqZWN0PiYmIGRhdGEsIFRpbWVsaW5lUmVjb3JkVHlwZSwgYm9vbCBjYXB0dXJlQ2FsbFN0
YWNrLCBGcmFtZSopOwotICAgIHZvaWQgcHVzaEN1cnJlbnRSZWNvcmQoUmVmUHRyPEpTT046Ok9i
amVjdD4mJiwgVGltZWxpbmVSZWNvcmRUeXBlLCBib29sIGNhcHR1cmVDYWxsU3RhY2ssIEZyYW1l
Kik7CisgICAgdm9pZCBzZW5kRXZlbnQoUmVmPEpTT046Ok9iamVjdD4mJik7CisgICAgdm9pZCBh
cHBlbmRSZWNvcmQoUmVmPEpTT046Ok9iamVjdD4mJiBkYXRhLCBUaW1lbGluZVJlY29yZFR5cGUs
IGJvb2wgY2FwdHVyZUNhbGxTdGFjaywgRnJhbWUqKTsKKyAgICB2b2lkIHB1c2hDdXJyZW50UmVj
b3JkKFJlZjxKU09OOjpPYmplY3Q+JiYsIFRpbWVsaW5lUmVjb3JkVHlwZSwgYm9vbCBjYXB0dXJl
Q2FsbFN0YWNrLCBGcmFtZSopOwogICAgIHZvaWQgcHVzaEN1cnJlbnRSZWNvcmQoY29uc3QgVGlt
ZWxpbmVSZWNvcmRFbnRyeSYgcmVjb3JkKSB7IG1fcmVjb3JkU3RhY2suYXBwZW5kKHJlY29yZCk7
IH0KIAotICAgIFRpbWVsaW5lUmVjb3JkRW50cnkgY3JlYXRlUmVjb3JkRW50cnkoUmVmUHRyPEpT
T046Ok9iamVjdD4mJiBkYXRhLCBUaW1lbGluZVJlY29yZFR5cGUsIGJvb2wgY2FwdHVyZUNhbGxT
dGFjaywgRnJhbWUqKTsKKyAgICBUaW1lbGluZVJlY29yZEVudHJ5IGNyZWF0ZVJlY29yZEVudHJ5
KFJlZjxKU09OOjpPYmplY3Q+JiYgZGF0YSwgVGltZWxpbmVSZWNvcmRUeXBlLCBib29sIGNhcHR1
cmVDYWxsU3RhY2ssIEZyYW1lKik7CiAKICAgICB2b2lkIHNldEZyYW1lSWRlbnRpZmllcihKU09O
OjpPYmplY3QqIHJlY29yZCwgRnJhbWUqKTsKIAogICAgIHZvaWQgZGlkQ29tcGxldGVSZWNvcmRF
bnRyeShjb25zdCBUaW1lbGluZVJlY29yZEVudHJ5Jik7CiAgICAgdm9pZCBkaWRDb21wbGV0ZUN1
cnJlbnRSZWNvcmQoVGltZWxpbmVSZWNvcmRUeXBlKTsKIAotICAgIHZvaWQgYWRkUmVjb3JkVG9U
aW1lbGluZShSZWZQdHI8SlNPTjo6T2JqZWN0PiYmLCBUaW1lbGluZVJlY29yZFR5cGUpOworICAg
IHZvaWQgYWRkUmVjb3JkVG9UaW1lbGluZShSZWY8SlNPTjo6T2JqZWN0PiYmLCBUaW1lbGluZVJl
Y29yZFR5cGUpOwogCiAgICAgdm9pZCBsb2NhbFRvUGFnZVF1YWQoY29uc3QgUmVuZGVyT2JqZWN0
JiwgY29uc3QgTGF5b3V0UmVjdCYsIEZsb2F0UXVhZCopOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvcldvcmtlckFnZW50LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yV29ya2VyQWdlbnQuY3BwCmluZGV4
IDkwOWM0NjZmODdlOWJmYThjNGMxNzI4YzQ2YWQ2ZTdlNTkwN2I0NmUuLjMzY2FhMGFhMjA3OWFk
NDA4MWNjMjk2MDVhNTM1MzdjMjRkNjZiZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yV29ya2VyQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yV29ya2VyQWdlbnQuY3BwCkBAIC01Myw1NSAr
NTMsNTYgQEAgdm9pZCBJbnNwZWN0b3JXb3JrZXJBZ2VudDo6d2lsbERlc3Ryb3lGcm9udGVuZEFu
ZEJhY2tlbmQoRGlzY29ubmVjdFJlYXNvbikKIHsKICAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMu
c2V0UGVyc2lzdGVudFdvcmtlckFnZW50KG51bGxwdHIpOwogCi0gICAgRXJyb3JTdHJpbmcgaWdu
b3JlZDsKLSAgICBkaXNhYmxlKGlnbm9yZWQpOworICAgIGRpc2FibGUoKTsKIH0KIAotdm9pZCBJ
bnNwZWN0b3JXb3JrZXJBZ2VudDo6ZW5hYmxlKEVycm9yU3RyaW5nJikKK1Byb3RvY29sOjpFcnJv
clN0cmluZ09yPHZvaWQ+IEluc3BlY3RvcldvcmtlckFnZW50OjplbmFibGUoKQogewogICAgIGlm
IChtX2VuYWJsZWQpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAogICAg
IG1fZW5hYmxlZCA9IHRydWU7CiAKICAgICBjb25uZWN0VG9BbGxXb3JrZXJJbnNwZWN0b3JQcm94
aWVzRm9yUGFnZSgpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JXb3Jr
ZXJBZ2VudDo6ZGlzYWJsZShFcnJvclN0cmluZyYpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2
b2lkPiBJbnNwZWN0b3JXb3JrZXJBZ2VudDo6ZGlzYWJsZSgpCiB7CiAgICAgaWYgKCFtX2VuYWJs
ZWQpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIG1fZW5hYmxl
ZCA9IGZhbHNlOwogCiAgICAgZGlzY29ubmVjdEZyb21BbGxXb3JrZXJJbnNwZWN0b3JQcm94aWVz
KCk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvcldvcmtlckFnZW50Ojpp
bml0aWFsaXplZChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgd29ya2Vy
SWQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JXb3JrZXJBZ2VudDo6
aW5pdGlhbGl6ZWQoY29uc3QgU3RyaW5nJiB3b3JrZXJJZCkKIHsKICAgICBXb3JrZXJJbnNwZWN0
b3JQcm94eSogcHJveHkgPSBtX2Nvbm5lY3RlZFByb3hpZXMuZ2V0KHdvcmtlcklkKTsKLSAgICBp
ZiAoIXByb3h5KSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIk1pc3Npbmcgd29ya2VyIGZvciBn
aXZlbiB3b3JrZXJJZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoIXByb3h5
KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk1pc3Npbmcgd29ya2VyIGZvciBnaXZl
biB3b3JrZXJJZCJfcyk7CiAKICAgICBwcm94eS0+cmVzdW1lV29ya2VySWZQYXVzZWQoKTsKKwor
ICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yV29ya2VyQWdlbnQ6OnNlbmRNZXNz
YWdlVG9Xb3JrZXIoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHdvcmtl
cklkLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lk
PiBJbnNwZWN0b3JXb3JrZXJBZ2VudDo6c2VuZE1lc3NhZ2VUb1dvcmtlcihjb25zdCBTdHJpbmcm
IHdvcmtlcklkLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCiB7Ci0gICAgaWYgKCFtX2VuYWJsZWQp
IHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiV29ya2VyIGRvbWFpbiBtdXN0IGJlIGVuYWJsZWQi
X3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKCFtX2VuYWJsZWQpCisgICAgICAg
IHJldHVybiBtYWtlVW5leHBlY3RlZCgiV29ya2VyIGRvbWFpbiBtdXN0IGJlIGVuYWJsZWQiX3Mp
OwogCiAgICAgV29ya2VySW5zcGVjdG9yUHJveHkqIHByb3h5ID0gbV9jb25uZWN0ZWRQcm94aWVz
LmdldCh3b3JrZXJJZCk7Ci0gICAgaWYgKCFwcm94eSkgewotICAgICAgICBlcnJvclN0cmluZyA9
ICJNaXNzaW5nIHdvcmtlciBmb3IgZ2l2ZW4gd29ya2VySWQiX3M7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9CisgICAgaWYgKCFwcm94eSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJN
aXNzaW5nIHdvcmtlciBmb3IgZ2l2ZW4gd29ya2VySWQiX3MpOwogCiAgICAgcHJveHktPnNlbmRN
ZXNzYWdlVG9Xb3JrZXJJbnNwZWN0b3JDb250cm9sbGVyKG1lc3NhZ2UpOworCisgICAgcmV0dXJu
IHsgfTsKIH0KIAogdm9pZCBJbnNwZWN0b3JXb3JrZXJBZ2VudDo6c2VuZE1lc3NhZ2VGcm9tV29y
a2VyVG9Gcm9udGVuZChXb3JrZXJJbnNwZWN0b3JQcm94eSYgcHJveHksIGNvbnN0IFN0cmluZyYg
bWVzc2FnZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5z
cGVjdG9yV29ya2VyQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5z
cGVjdG9yV29ya2VyQWdlbnQuaAppbmRleCAxN2QxYmVhZTkwMTBmMzIwMDFhYzY0ZGQ5ZDg5MmE5
M2YxMGE3ZDU2Li42MzZiYzgxZGQ1YTUwYWVlMDUzYzJlMDRlNjg2OTlkM2ZhNmI2NGVmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvcldvcmtlckFn
ZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JXb3Jr
ZXJBZ2VudC5oCkBAIC0zNSwyNyArMzUsMjUgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFz
cyBQYWdlOwogCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQogY2xhc3MgSW5zcGVjdG9y
V29ya2VyQWdlbnQgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yQWdlbnRCYXNlLCBwdWJsaWMgSW5z
cGVjdG9yOjpXb3JrZXJCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIsIHB1YmxpYyBXb3JrZXJJbnNw
ZWN0b3JQcm94eTo6UGFnZUNoYW5uZWwgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEluc3Bl
Y3RvcldvcmtlckFnZW50KTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoK
ICAgICBJbnNwZWN0b3JXb3JrZXJBZ2VudChQYWdlQWdlbnRDb250ZXh0Jik7Ci0gICAgfkluc3Bl
Y3RvcldvcmtlckFnZW50KCkgb3ZlcnJpZGU7CisgICAgfkluc3BlY3RvcldvcmtlckFnZW50KCk7
CiAKICAgICAvLyBJbnNwZWN0b3JBZ2VudEJhc2UKLSAgICB2b2lkIGRpZENyZWF0ZUZyb250ZW5k
QW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kUm91dGVyKiwgSW5zcGVjdG9yOjpCYWNrZW5k
RGlzcGF0Y2hlciopIG92ZXJyaWRlOwotICAgIHZvaWQgd2lsbERlc3Ryb3lGcm9udGVuZEFuZEJh
Y2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKSBvdmVycmlkZTsKKyAgICB2b2lkIGRp
ZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kUm91dGVyKiwgSW5z
cGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlciopOworICAgIHZvaWQgd2lsbERlc3Ryb3lGcm9udGVu
ZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKTsKIAogICAgIC8vIFdvcmtl
ckJhY2tlbmREaXNwYXRjaGVySGFuZGxlcgotICAgIHZvaWQgZW5hYmxlKEVycm9yU3RyaW5nJikg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBkaXNhYmxlKEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAg
dm9pZCBpbml0aWFsaXplZChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgd29ya2VySWQpIG92
ZXJyaWRlOwotICAgIHZvaWQgc2VuZE1lc3NhZ2VUb1dvcmtlcihFcnJvclN0cmluZyYsIGNvbnN0
IFN0cmluZyYgd29ya2VySWQsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkgb3ZlcnJpZGU7CisgICAg
SW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBlbmFibGUoKTsKKyAgICBJ
bnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGRpc2FibGUoKTsKKyAgICBJ
bnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGluaXRpYWxpemVkKGNvbnN0
IFN0cmluZyYgd29ya2VySWQpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5n
T3I8dm9pZD4gc2VuZE1lc3NhZ2VUb1dvcmtlcihjb25zdCBTdHJpbmcmIHdvcmtlcklkLCBjb25z
dCBTdHJpbmcmIG1lc3NhZ2UpOwogCiAgICAgLy8gV29ya2VySW5zcGVjdG9yUHJveHk6OlBhZ2VD
aGFubmVsCi0gICAgdm9pZCBzZW5kTWVzc2FnZUZyb21Xb3JrZXJUb0Zyb250ZW5kKFdvcmtlcklu
c3BlY3RvclByb3h5JiwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKSBvdmVycmlkZTsKKyAgICB2b2lk
IHNlbmRNZXNzYWdlRnJvbVdvcmtlclRvRnJvbnRlbmQoV29ya2VySW5zcGVjdG9yUHJveHkmLCBj
b25zdCBTdHJpbmcmIG1lc3NhZ2UpOwogCiAgICAgLy8gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
CiAgICAgYm9vbCBzaG91bGRXYWl0Rm9yRGVidWdnZXJPblN0YXJ0KCkgY29uc3Q7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL1dlYkNvbnNvbGVBZ2VudC5oIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9XZWJDb25zb2xlQWdlbnQuaAppbmRleCBm
N2Q4Mjc4MDcwZmU0NzAyOTlmMmRkNmJhYjY2NDYyZDU4NTg4OTA1Li4wYjhmMjBlYWMzNDNiNjY4
MTdhYzlmMGYwYzZjOGNiMjBjOWJhYzdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvYWdlbnRzL1dlYkNvbnNvbGVBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9hZ2VudHMvV2ViQ29uc29sZUFnZW50LmgKQEAgLTMzLDcgKzMzLDYgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogY2xhc3MgRE9NV2luZG93OwogY2xhc3MgUmVzb3VyY2VFcnJvcjsKIGNsYXNz
IFJlc291cmNlUmVzcG9uc2U7Ci10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKIAogY2xhc3Mg
V2ViQ29uc29sZUFnZW50IDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yQ29uc29sZUFnZW50
IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShXZWJDb25zb2xlQWdlbnQpOwpAQCAtNDYsOCAr
NDUsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBmcmFtZVdpbmRvd0Rpc2NhcmRlZChET01XaW5kb3cq
KTsKICAgICB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZSh1bnNpZ25lZCBsb25nIHJlcXVlc3RJZGVu
dGlmaWVyLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7CiAgICAgdm9pZCBkaWRGYWlsTG9hZGlu
Zyh1bnNpZ25lZCBsb25nIHJlcXVlc3RJZGVudGlmaWVyLCBjb25zdCBSZXNvdXJjZUVycm9yJik7
Ci0KLXByb3RlY3RlZDoKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvV2ViRGVidWdnZXJBZ2VudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL1dlYkRlYnVnZ2VyQWdlbnQuY3BwCmluZGV4
IGI5M2E4MWZiZjRmNTA2NDY2YWRiM2UxM2JiZTg4Y2M1MzkyMzViN2UuLjFjNjEzNTdhZmRjZTM1
MGFlMjNhYmMyMDdmMjI3MDRjOTRlYmY0ZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9hZ2VudHMvV2ViRGVidWdnZXJBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2FnZW50cy9XZWJEZWJ1Z2dlckFnZW50LmNwcApAQCAtNDksMTggKzQ5LDE4IEBA
IGJvb2wgV2ViRGVidWdnZXJBZ2VudDo6ZW5hYmxlZCgpIGNvbnN0CiAgICAgcmV0dXJuIG1faW5z
dHJ1bWVudGluZ0FnZW50cy5lbmFibGVkV2ViRGVidWdnZXJBZ2VudCgpID09IHRoaXMgJiYgSW5z
cGVjdG9yRGVidWdnZXJBZ2VudDo6ZW5hYmxlZCgpOwogfQogCi12b2lkIFdlYkRlYnVnZ2VyQWdl
bnQ6OmVuYWJsZSgpCit2b2lkIFdlYkRlYnVnZ2VyQWdlbnQ6OmludGVybmFsRW5hYmxlKCkKIHsK
ICAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMuc2V0RW5hYmxlZFdlYkRlYnVnZ2VyQWdlbnQodGhp
cyk7CiAKLSAgICBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjplbmFibGUoKTsKKyAgICBJbnNwZWN0
b3JEZWJ1Z2dlckFnZW50OjppbnRlcm5hbEVuYWJsZSgpOwogfQogCi12b2lkIFdlYkRlYnVnZ2Vy
QWdlbnQ6OmRpc2FibGUoYm9vbCBpc0JlaW5nRGVzdHJveWVkKQordm9pZCBXZWJEZWJ1Z2dlckFn
ZW50OjppbnRlcm5hbERpc2FibGUoYm9vbCBpc0JlaW5nRGVzdHJveWVkKQogewogICAgIG1faW5z
dHJ1bWVudGluZ0FnZW50cy5zZXRFbmFibGVkV2ViRGVidWdnZXJBZ2VudChudWxscHRyKTsKIAot
ICAgIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpc2FibGUoaXNCZWluZ0Rlc3Ryb3llZCk7Cisg
ICAgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6aW50ZXJuYWxEaXNhYmxlKGlzQmVpbmdEZXN0cm95
ZWQpOwogfQogCiB2b2lkIFdlYkRlYnVnZ2VyQWdlbnQ6OmRpZEFkZEV2ZW50TGlzdGVuZXIoRXZl
bnRUYXJnZXQmIHRhcmdldCwgY29uc3QgQXRvbVN0cmluZyYgZXZlbnRUeXBlLCBFdmVudExpc3Rl
bmVyJiBsaXN0ZW5lciwgYm9vbCBjYXB0dXJlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2FnZW50cy9XZWJEZWJ1Z2dlckFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvYWdlbnRzL1dlYkRlYnVnZ2VyQWdlbnQuaAppbmRleCAxMGI5NjQ4ODgxYWEwMTU2NGZj
YmU3MmU3NGZmYmFjNzk2ODQ1NzYyLi5hOTIzNzFkYTVkMjNhYTA1ZWRiNjg5ODc1OWVhNDExZWU3
NWE2OThiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL1dlYkRl
YnVnZ2VyQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL1dlYkRl
YnVnZ2VyQWdlbnQuaApAQCAtMzUsNyArMzUsNiBAQCBjbGFzcyBFdmVudFRhcmdldDsKIGNsYXNz
IEluc3RydW1lbnRpbmdBZ2VudHM7CiBjbGFzcyBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lcjsKIGNs
YXNzIFRpbWVyQmFzZTsKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwogCiBjbGFzcyBXZWJE
ZWJ1Z2dlckFnZW50IDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudCB7
CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoV2ViRGVidWdnZXJBZ2VudCk7CkBAIC01Niw4ICs1
NSw4IEBAIHB1YmxpYzoKIAogcHJvdGVjdGVkOgogICAgIFdlYkRlYnVnZ2VyQWdlbnQoV2ViQWdl
bnRDb250ZXh0Jik7Ci0gICAgdm9pZCBlbmFibGUoKSBvdmVycmlkZTsKLSAgICB2b2lkIGRpc2Fi
bGUoYm9vbCBpc0JlaW5nRGVzdHJveWVkKSBvdmVycmlkZTsKKyAgICB2b2lkIGludGVybmFsRW5h
YmxlKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBpbnRlcm5hbERpc2FibGUoYm9vbCBpc0JlaW5nRGVz
dHJveWVkKSBvdmVycmlkZTsKIAogICAgIHZvaWQgZGlkQ2xlYXJBc3luY1N0YWNrVHJhY2VEYXRh
KCkgZmluYWw7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMv
V2ViSGVhcEFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvV2ViSGVh
cEFnZW50LmNwcAppbmRleCA1YWE3NDUzZDA5NTYwNzYyNzhlYjAzMGY4MDhkZGYwMTRkYWJmYjg1
Li45Mjc1ZThmNzlkMDBmZTFhMTE4MjFlZDhhODY5YzBlMTdiNDA4MDIyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL1dlYkhlYXBBZ2VudC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9XZWJIZWFwQWdlbnQuY3BwCkBAIC0zNSw3ICsz
NSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CiAK
IHN0cnVjdCBHYXJiYWdlQ29sbGVjdGlvbkRhdGEgewotICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkhlYXA6OkdhcmJhZ2VDb2xsZWN0aW9uOjpUeXBlIHR5cGU7CisgICAgUHJvdG9jb2w6OkhlYXA6
OkdhcmJhZ2VDb2xsZWN0aW9uOjpUeXBlIHR5cGU7CiAgICAgU2Vjb25kcyBzdGFydFRpbWU7CiAg
ICAgU2Vjb25kcyBlbmRUaW1lOwogfTsKQEAgLTEwMywyNSArMTAzLDI3IEBAIFdlYkhlYXBBZ2Vu
dDo6V2ViSGVhcEFnZW50KFdlYkFnZW50Q29udGV4dCYgY29udGV4dCkKIAogV2ViSGVhcEFnZW50
Ojp+V2ViSGVhcEFnZW50KCkgPSBkZWZhdWx0OwogCi12b2lkIFdlYkhlYXBBZ2VudDo6ZW5hYmxl
KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+
IFdlYkhlYXBBZ2VudDo6ZW5hYmxlKCkKIHsKLSAgICBJbnNwZWN0b3JIZWFwQWdlbnQ6OmVuYWJs
ZShlcnJvclN0cmluZyk7CisgICAgYXV0byByZXN1bHQgPSBJbnNwZWN0b3JIZWFwQWdlbnQ6OmVu
YWJsZSgpOwogCiAgICAgaWYgKGF1dG8qIGNvbnNvbGVBZ2VudCA9IG1faW5zdHJ1bWVudGluZ0Fn
ZW50cy53ZWJDb25zb2xlQWdlbnQoKSkKICAgICAgICAgY29uc29sZUFnZW50LT5zZXRIZWFwQWdl
bnQodGhpcyk7CisKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIFdlYkhlYXBBZ2VudDo6
ZGlzYWJsZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdP
cjx2b2lkPiBXZWJIZWFwQWdlbnQ6OmRpc2FibGUoKQogewogICAgIG1fc2VuZEdhcmJhZ2VDb2xs
ZWN0aW9uRXZlbnRzVGFzay0+cmVzZXQoKTsKIAogICAgIGlmIChhdXRvKiBjb25zb2xlQWdlbnQg
PSBtX2luc3RydW1lbnRpbmdBZ2VudHMud2ViQ29uc29sZUFnZW50KCkpCiAgICAgICAgIGNvbnNv
bGVBZ2VudC0+c2V0SGVhcEFnZW50KG51bGxwdHIpOwogCi0gICAgSW5zcGVjdG9ySGVhcEFnZW50
OjpkaXNhYmxlKGVycm9yU3RyaW5nKTsKKyAgICByZXR1cm4gSW5zcGVjdG9ySGVhcEFnZW50Ojpk
aXNhYmxlKCk7CiB9CiAKLXZvaWQgV2ViSGVhcEFnZW50OjpkaXNwYXRjaEdhcmJhZ2VDb2xsZWN0
ZWRFdmVudChJbnNwZWN0b3I6OlByb3RvY29sOjpIZWFwOjpHYXJiYWdlQ29sbGVjdGlvbjo6VHlw
ZSB0eXBlLCBTZWNvbmRzIHN0YXJ0VGltZSwgU2Vjb25kcyBlbmRUaW1lKQordm9pZCBXZWJIZWFw
QWdlbnQ6OmRpc3BhdGNoR2FyYmFnZUNvbGxlY3RlZEV2ZW50KFByb3RvY29sOjpIZWFwOjpHYXJi
YWdlQ29sbGVjdGlvbjo6VHlwZSB0eXBlLCBTZWNvbmRzIHN0YXJ0VGltZSwgU2Vjb25kcyBlbmRU
aW1lKQogewogICAgIC8vIERpc3BhdGNoIHRoZSBldmVudCBhc3luY2hyb25vdXNseSBiZWNhdXNl
IHRoaXMgbWV0aG9kIG1heSBiZQogICAgIC8vIGNhbGxlZCBiZXR3ZWVuIGNvbGxlY3Rpb24gYW5k
IHN3ZWVwaW5nIGFuZCB3ZSBkb24ndCB3YW50IHRvCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvYWdlbnRzL1dlYkhlYXBBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2FnZW50cy9XZWJIZWFwQWdlbnQuaAppbmRleCAwYmM4ZTY0YWY1YTg2YTcyZDVmODA0NDBm
ZGIxMTYzZmUxN2UxNTczLi5hMzVlNTdjYzdhNzFmOGFmNDEzODYzNzg3Y2VmMzZiZWU0MTZmNmJj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL1dlYkhlYXBBZ2Vu
dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvV2ViSGVhcEFnZW50LmgK
QEAgLTMzLDcgKzMzLDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBTZW5kR2FyYmFn
ZUNvbGxlY3Rpb25FdmVudHNUYXNrOwogc3RydWN0IEdhcmJhZ2VDb2xsZWN0aW9uRGF0YTsKLXR5
cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwogCiBjbGFzcyBXZWJIZWFwQWdlbnQgOiBwdWJsaWMg
SW5zcGVjdG9yOjpJbnNwZWN0b3JIZWFwQWdlbnQgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KFdlYkhlYXBBZ2VudCk7CkBAIC00NCw4ICs0Myw4IEBAIHB1YmxpYzoKICAgICB+V2ViSGVhcEFn
ZW50KCkgb3ZlcnJpZGU7CiAKICAgICAvLyBIZWFwQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyCi0g
ICAgdm9pZCBlbmFibGUoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2b2lkIGRpc2FibGUo
RXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0
cmluZ09yPHZvaWQ+IGVuYWJsZSgpIG92ZXJyaWRlOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8dm9pZD4gZGlzYWJsZSgpIG92ZXJyaWRlOwogCiBwcm90ZWN0ZWQ6CiAg
ICAgdm9pZCBkaXNwYXRjaEdhcmJhZ2VDb2xsZWN0ZWRFdmVudChJbnNwZWN0b3I6OlByb3RvY29s
OjpIZWFwOjpHYXJiYWdlQ29sbGVjdGlvbjo6VHlwZSwgU2Vjb25kcyBzdGFydFRpbWUsIFNlY29u
ZHMgZW5kVGltZSkgZmluYWw7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
YWdlbnRzL3BhZ2UvUGFnZUF1ZGl0QWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2FnZW50cy9wYWdlL1BhZ2VBdWRpdEFnZW50LmNwcAppbmRleCBkZGQ1M2JhNWRmYmNhNTUzN2Ji
YjZiN2JlMDY1MDU3ZDcyZmJhYmQ4Li45YWNmZTRkZDRiMTYwZWU5YjM4OTEwY2M5Yzc1YTI0MTI0
Y2VmZWRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2Uv
UGFnZUF1ZGl0QWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMv
cGFnZS9QYWdlQXVkaXRBZ2VudC5jcHAKQEAgLTU2LDcgKzU2LDcgQEAgUGFnZUF1ZGl0QWdlbnQ6
OlBhZ2VBdWRpdEFnZW50KFBhZ2VBZ2VudENvbnRleHQmIGNvbnRleHQpCiAKIFBhZ2VBdWRpdEFn
ZW50Ojp+UGFnZUF1ZGl0QWdlbnQoKSA9IGRlZmF1bHQ7CiAKLUluamVjdGVkU2NyaXB0IFBhZ2VB
dWRpdEFnZW50OjppbmplY3RlZFNjcmlwdEZvckV2YWwoY29uc3QgaW50KiBleGVjdXRpb25Db250
ZXh0SWQpCitJbmplY3RlZFNjcmlwdCBQYWdlQXVkaXRBZ2VudDo6aW5qZWN0ZWRTY3JpcHRGb3JF
dmFsKE9wdGlvbmFsPFByb3RvY29sOjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0SWQ+JiYgZXhl
Y3V0aW9uQ29udGV4dElkKQogewogICAgIGlmIChleGVjdXRpb25Db250ZXh0SWQpCiAgICAgICAg
IHJldHVybiBpbmplY3RlZFNjcmlwdE1hbmFnZXIoKS5pbmplY3RlZFNjcmlwdEZvcklkKCpleGVj
dXRpb25Db250ZXh0SWQpOwpAQCAtNjUsOSArNjUsOSBAQCBJbmplY3RlZFNjcmlwdCBQYWdlQXVk
aXRBZ2VudDo6aW5qZWN0ZWRTY3JpcHRGb3JFdmFsKGNvbnN0IGludCogZXhlY3V0aW9uQ29udGV4
dAogICAgIHJldHVybiBpbmplY3RlZFNjcmlwdE1hbmFnZXIoKS5pbmplY3RlZFNjcmlwdEZvcihz
Y3JpcHRTdGF0ZSk7CiB9CiAKLUluamVjdGVkU2NyaXB0IFBhZ2VBdWRpdEFnZW50OjppbmplY3Rl
ZFNjcmlwdEZvckV2YWwoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBpbnQqIGV4ZWN1
dGlvbkNvbnRleHRJZCkKK0luamVjdGVkU2NyaXB0IFBhZ2VBdWRpdEFnZW50OjppbmplY3RlZFNj
cmlwdEZvckV2YWwoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgT3B0aW9uYWw8
UHJvdG9jb2w6OlJ1bnRpbWU6OkV4ZWN1dGlvbkNvbnRleHRJZD4mJiBleGVjdXRpb25Db250ZXh0
SWQpCiB7Ci0gICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHQgPSBpbmplY3RlZFNjcmlw
dEZvckV2YWwoZXhlY3V0aW9uQ29udGV4dElkKTsKKyAgICBJbmplY3RlZFNjcmlwdCBpbmplY3Rl
ZFNjcmlwdCA9IGluamVjdGVkU2NyaXB0Rm9yRXZhbChXVEZNb3ZlKGV4ZWN1dGlvbkNvbnRleHRJ
ZCkpOwogICAgIGlmIChpbmplY3RlZFNjcmlwdC5oYXNOb1ZhbHVlKCkpIHsKICAgICAgICAgaWYg
KGV4ZWN1dGlvbkNvbnRleHRJZCkKICAgICAgICAgICAgIGVycm9yU3RyaW5nID0gIk1pc3Npbmcg
aW5qZWN0ZWQgc2NyaXB0IGZvciBnaXZlbiBleGVjdXRpb25Db250ZXh0SWQiX3M7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZUF1ZGl0QWdlbnQu
aCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlQXVkaXRBZ2VudC5o
CmluZGV4IGRkZWM0NjUxN2UxYTA1Y2JmNWJmOGZmZDdkMWFjODg4YTA4OTRmNzkuLjY5M2ZhYzMy
NzQ2OWE5MDQ0ZDg3MDE3NmZhYTJhMWQ0OWZiYTFiMzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlQXVkaXRBZ2VudC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlQXVkaXRBZ2VudC5oCkBAIC0zNywxNiAr
MzcsMTYgQEAgY2xhc3MgUGFnZUF1ZGl0QWdlbnQgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yOjpJ
bnNwZWN0b3JBdWRpdEFnZW50IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1Ymxp
YzoKICAgICBQYWdlQXVkaXRBZ2VudChQYWdlQWdlbnRDb250ZXh0Jik7Ci0gICAgflBhZ2VBdWRp
dEFnZW50KCkgb3ZlcnJpZGU7CisgICAgflBhZ2VBdWRpdEFnZW50KCk7CiAKIHByaXZhdGU6Ci0g
ICAgSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdEZvckV2YWwoY29uc3Qg
aW50KiBleGVjdXRpb25Db250ZXh0SWQpOwotICAgIEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHQg
aW5qZWN0ZWRTY3JpcHRGb3JFdmFsKEluc3BlY3Rvcjo6RXJyb3JTdHJpbmcmLCBjb25zdCBpbnQq
IGV4ZWN1dGlvbkNvbnRleHRJZCkgb3ZlcnJpZGU7CisgICAgSW5zcGVjdG9yOjpJbmplY3RlZFNj
cmlwdCBpbmplY3RlZFNjcmlwdEZvckV2YWwoT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6
UnVudGltZTo6RXhlY3V0aW9uQ29udGV4dElkPiYmKTsKKyAgICBJbnNwZWN0b3I6OkluamVjdGVk
U2NyaXB0IGluamVjdGVkU2NyaXB0Rm9yRXZhbChJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0
cmluZyYsIE9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkV4ZWN1dGlvbkNv
bnRleHRJZD4mJik7CiAKLSAgICB2b2lkIHBvcHVsYXRlQXVkaXRPYmplY3QoSlNDOjpKU0dsb2Jh
bE9iamVjdCosIEpTQzo6U3Ryb25nPEpTQzo6SlNPYmplY3Q+JiBhdWRpdE9iamVjdCkgb3ZlcnJp
ZGU7CisgICAgdm9pZCBwb3B1bGF0ZUF1ZGl0T2JqZWN0KEpTQzo6SlNHbG9iYWxPYmplY3QqLCBK
U0M6OlN0cm9uZzxKU0M6OkpTT2JqZWN0PiYgYXVkaXRPYmplY3QpOwogCi0gICAgdm9pZCBtdXRl
Q29uc29sZSgpIG92ZXJyaWRlOwotICAgIHZvaWQgdW5tdXRlQ29uc29sZSgpIG92ZXJyaWRlOwor
ICAgIHZvaWQgbXV0ZUNvbnNvbGUoKTsKKyAgICB2b2lkIHVubXV0ZUNvbnNvbGUoKTsKIAogICAg
IFBhZ2UmIG1faW5zcGVjdGVkUGFnZTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZUNvbnNvbGVBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZUNvbnNvbGVBZ2VudC5jcHAKaW5kZXggMTNmZDFk
N2RhYmFhOTlkMGJiMGM0OWZmN2JiNWU1MmY1NGM2NjNkMy4uMTIxMmI4NjZkOWUyODk5Njc3YTkz
ZmQ3MTZjMWU4NjhkM2MxZmZmYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2FnZW50cy9wYWdlL1BhZ2VDb25zb2xlQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlQ29uc29sZUFnZW50LmNwcApAQCAtNTQsNzkgKzU0LDgz
IEBAIFBhZ2VDb25zb2xlQWdlbnQ6OlBhZ2VDb25zb2xlQWdlbnQoUGFnZUFnZW50Q29udGV4dCYg
Y29udGV4dCkKIAogUGFnZUNvbnNvbGVBZ2VudDo6flBhZ2VDb25zb2xlQWdlbnQoKSA9IGRlZmF1
bHQ7CiAKLXZvaWQgUGFnZUNvbnNvbGVBZ2VudDo6Y2xlYXJNZXNzYWdlcyhFcnJvclN0cmluZyYg
ZXJyb3JTdHJpbmcpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBQYWdlQ29uc29sZUFn
ZW50OjpjbGVhck1lc3NhZ2VzKCkKIHsKICAgICBpZiAoYXV0byogZG9tQWdlbnQgPSBtX2luc3Ry
dW1lbnRpbmdBZ2VudHMucGVyc2lzdGVudERPTUFnZW50KCkpCiAgICAgICAgIGRvbUFnZW50LT5y
ZWxlYXNlRGFuZ2xpbmdOb2RlcygpOwogCi0gICAgV2ViQ29uc29sZUFnZW50OjpjbGVhck1lc3Nh
Z2VzKGVycm9yU3RyaW5nKTsKKyAgICByZXR1cm4gV2ViQ29uc29sZUFnZW50OjpjbGVhck1lc3Nh
Z2VzKCk7CiB9CiAKLXZvaWQgUGFnZUNvbnNvbGVBZ2VudDo6Z2V0TG9nZ2luZ0NoYW5uZWxzKEVy
cm9yU3RyaW5nJiwgUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q29u
c29sZTo6Q2hhbm5lbD4+JiBjaGFubmVscykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxK
U09OOjpBcnJheU9mPFByb3RvY29sOjpDb25zb2xlOjpDaGFubmVsPj4+IFBhZ2VDb25zb2xlQWdl
bnQ6OmdldExvZ2dpbmdDaGFubmVscygpCiB7Ci0gICAgc3RhdGljIGNvbnN0IHN0cnVjdCBDaGFu
bmVsVGFibGUgewotICAgICAgICBOZXZlckRlc3Ryb3llZDxTdHJpbmc+IG5hbWU7Ci0gICAgICAg
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWxTb3VyY2Ugc291cmNlOwotICAg
IH0gY2hhbm5lbFRhYmxlW10gPSB7Ci0gICAgICAgIHsgTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwo
IldlYlJUQyIpLCBJbnNwZWN0b3I6OlByb3RvY29sOjpDb25zb2xlOjpDaGFubmVsU291cmNlOjpX
ZWJSVEMgfSwKLSAgICAgICAgeyBNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgiTWVkaWEiKSwgSW5z
cGVjdG9yOjpQcm90b2NvbDo6Q29uc29sZTo6Q2hhbm5lbFNvdXJjZTo6TWVkaWEgfSwKLSAgICAg
ICAgeyBNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgiTWVkaWFTb3VyY2UiKSwgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6Q29uc29sZTo6Q2hhbm5lbFNvdXJjZTo6TWVkaWFTb3VyY2UgfSwKLSAgICB9Owor
ICAgIGF1dG8gY2hhbm5lbHMgPSBKU09OOjpBcnJheU9mPFByb3RvY29sOjpDb25zb2xlOjpDaGFu
bmVsPjo6Y3JlYXRlKCk7CiAKLSAgICBjaGFubmVscyA9IEpTT046OkFycmF5T2Y8SW5zcGVjdG9y
OjpQcm90b2NvbDo6Q29uc29sZTo6Q2hhbm5lbD46OmNyZWF0ZSgpOwotCi0gICAgc2l6ZV90IGxl
bmd0aCA9IFdURl9BUlJBWV9MRU5HVEgoY2hhbm5lbFRhYmxlKTsKLSAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIGF1dG8qIGxvZ0NoYW5uZWwgPSBnZXRM
b2dDaGFubmVsKGNoYW5uZWxUYWJsZVtpXS5uYW1lKTsKKyAgICBhdXRvIGFkZExvZ0NoYW5uZWwg
PSBbJl0gKFByb3RvY29sOjpDb25zb2xlOjpDaGFubmVsU291cmNlIHNvdXJjZSkgeworICAgICAg
ICBhdXRvKiBsb2dDaGFubmVsID0gZ2V0TG9nQ2hhbm5lbChQcm90b2NvbDo6SGVscGVyczo6Z2V0
RW51bUNvbnN0YW50VmFsdWUoc291cmNlKSk7CiAgICAgICAgIGlmICghbG9nQ2hhbm5lbCkKICAg
ICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBhdXRvIGxldmVsID0gSW5zcGVjdG9yOjpQcm90
b2NvbDo6Q29uc29sZTo6Q2hhbm5lbExldmVsOjpPZmY7CisgICAgICAgIGF1dG8gbGV2ZWwgPSBQ
cm90b2NvbDo6Q29uc29sZTo6Q2hhbm5lbExldmVsOjpPZmY7CiAgICAgICAgIGlmIChsb2dDaGFu
bmVsLT5zdGF0ZSAhPSBXVEZMb2dDaGFubmVsU3RhdGU6Ok9mZikgewogICAgICAgICAgICAgc3dp
dGNoIChsb2dDaGFubmVsLT5sZXZlbCkgewogICAgICAgICAgICAgY2FzZSBXVEZMb2dMZXZlbDo6
QWx3YXlzOgogICAgICAgICAgICAgY2FzZSBXVEZMb2dMZXZlbDo6RXJyb3I6CiAgICAgICAgICAg
ICBjYXNlIFdURkxvZ0xldmVsOjpXYXJuaW5nOgogICAgICAgICAgICAgY2FzZSBXVEZMb2dMZXZl
bDo6SW5mbzoKLSAgICAgICAgICAgICAgICBsZXZlbCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNv
bnNvbGU6OkNoYW5uZWxMZXZlbDo6QmFzaWM7CisgICAgICAgICAgICAgICAgbGV2ZWwgPSBQcm90
b2NvbDo6Q29uc29sZTo6Q2hhbm5lbExldmVsOjpCYXNpYzsKICAgICAgICAgICAgICAgICBicmVh
azsKKwogICAgICAgICAgICAgY2FzZSBXVEZMb2dMZXZlbDo6RGVidWc6Ci0gICAgICAgICAgICAg
ICAgbGV2ZWwgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpDb25zb2xlOjpDaGFubmVsTGV2ZWw6OlZl
cmJvc2U7CisgICAgICAgICAgICAgICAgbGV2ZWwgPSBQcm90b2NvbDo6Q29uc29sZTo6Q2hhbm5l
bExldmVsOjpWZXJib3NlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQog
ICAgICAgICB9CiAKLSAgICAgICAgYXV0byBjaGFubmVsID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6
Q29uc29sZTo6Q2hhbm5lbDo6Y3JlYXRlKCkKLSAgICAgICAgICAgIC5zZXRTb3VyY2UoY2hhbm5l
bFRhYmxlW2ldLnNvdXJjZSkKKyAgICAgICAgYXV0byBjaGFubmVsID0gUHJvdG9jb2w6OkNvbnNv
bGU6OkNoYW5uZWw6OmNyZWF0ZSgpCisgICAgICAgICAgICAuc2V0U291cmNlKHNvdXJjZSkKICAg
ICAgICAgICAgIC5zZXRMZXZlbChsZXZlbCkKICAgICAgICAgICAgIC5yZWxlYXNlKCk7CiAgICAg
ICAgIGNoYW5uZWxzLT5hZGRJdGVtKFdURk1vdmUoY2hhbm5lbCkpOwotICAgIH0KKyAgICB9Owor
ICAgIGFkZExvZ0NoYW5uZWwoUHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWxTb3VyY2U6OlhNTCk7
CisgICAgYWRkTG9nQ2hhbm5lbChQcm90b2NvbDo6Q29uc29sZTo6Q2hhbm5lbFNvdXJjZTo6SmF2
YVNjcmlwdCk7CisgICAgYWRkTG9nQ2hhbm5lbChQcm90b2NvbDo6Q29uc29sZTo6Q2hhbm5lbFNv
dXJjZTo6TmV0d29yayk7CisgICAgYWRkTG9nQ2hhbm5lbChQcm90b2NvbDo6Q29uc29sZTo6Q2hh
bm5lbFNvdXJjZTo6Q29uc29sZUFQSSk7CisgICAgYWRkTG9nQ2hhbm5lbChQcm90b2NvbDo6Q29u
c29sZTo6Q2hhbm5lbFNvdXJjZTo6U3RvcmFnZSk7CisgICAgYWRkTG9nQ2hhbm5lbChQcm90b2Nv
bDo6Q29uc29sZTo6Q2hhbm5lbFNvdXJjZTo6QXBwY2FjaGUpOworICAgIGFkZExvZ0NoYW5uZWwo
UHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWxTb3VyY2U6OlJlbmRlcmluZyk7CisgICAgYWRkTG9n
Q2hhbm5lbChQcm90b2NvbDo6Q29uc29sZTo6Q2hhbm5lbFNvdXJjZTo6Q1NTKTsKKyAgICBhZGRM
b2dDaGFubmVsKFByb3RvY29sOjpDb25zb2xlOjpDaGFubmVsU291cmNlOjpTZWN1cml0eSk7Cisg
ICAgYWRkTG9nQ2hhbm5lbChQcm90b2NvbDo6Q29uc29sZTo6Q2hhbm5lbFNvdXJjZTo6Q29udGVu
dEJsb2NrZXIpOworICAgIGFkZExvZ0NoYW5uZWwoUHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWxT
b3VyY2U6Ok1lZGlhKTsKKyAgICBhZGRMb2dDaGFubmVsKFByb3RvY29sOjpDb25zb2xlOjpDaGFu
bmVsU291cmNlOjpNZWRpYVNvdXJjZSk7CisgICAgYWRkTG9nQ2hhbm5lbChQcm90b2NvbDo6Q29u
c29sZTo6Q2hhbm5lbFNvdXJjZTo6V2ViUlRDKTsKKyAgICBhZGRMb2dDaGFubmVsKFByb3RvY29s
OjpDb25zb2xlOjpDaGFubmVsU291cmNlOjpJVFBEZWJ1Zyk7CisgICAgYWRkTG9nQ2hhbm5lbChQ
cm90b2NvbDo6Q29uc29sZTo6Q2hhbm5lbFNvdXJjZTo6QWRDbGlja0F0dHJpYnV0aW9uKTsKKyAg
ICBhZGRMb2dDaGFubmVsKFByb3RvY29sOjpDb25zb2xlOjpDaGFubmVsU291cmNlOjpPdGhlcik7
CisKKyAgICByZXR1cm4gV1RGTW92ZShjaGFubmVscyk7CiB9CiAKLXN0YXRpYyBPcHRpb25hbDxz
dGQ6OnBhaXI8V1RGTG9nQ2hhbm5lbFN0YXRlLCBXVEZMb2dMZXZlbD4+IGNoYW5uZWxDb25maWd1
cmF0aW9uRm9yU3RyaW5nKGNvbnN0IFN0cmluZyYgbGV2ZWxTdHJpbmcpCitQcm90b2NvbDo6RXJy
b3JTdHJpbmdPcjx2b2lkPiBQYWdlQ29uc29sZUFnZW50OjpzZXRMb2dnaW5nQ2hhbm5lbExldmVs
KFByb3RvY29sOjpDb25zb2xlOjpDaGFubmVsU291cmNlIHNvdXJjZSwgUHJvdG9jb2w6OkNvbnNv
bGU6OkNoYW5uZWxMZXZlbCBsZXZlbCkKIHsKLSAgICBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2Fz
ZShsZXZlbFN0cmluZywgIm9mZiIpKQotICAgICAgICByZXR1cm4geyB7IFdURkxvZ0NoYW5uZWxT
dGF0ZTo6T2ZmLCBXVEZMb2dMZXZlbDo6RXJyb3IgfSB9OworICAgIHN3aXRjaCAobGV2ZWwpIHsK
KyAgICBjYXNlIFByb3RvY29sOjpDb25zb2xlOjpDaGFubmVsTGV2ZWw6Ok9mZjoKKyAgICAgICAg
bV9pbnNwZWN0ZWRQYWdlLmNvbmZpZ3VyZUxvZ2dpbmdDaGFubmVsKFByb3RvY29sOjpIZWxwZXJz
OjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShzb3VyY2UpLCBXVEZMb2dDaGFubmVsU3RhdGU6Ok9mZiwg
V1RGTG9nTGV2ZWw6OkVycm9yKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGlmIChlcXVh
bElnbm9yaW5nQVNDSUlDYXNlKGxldmVsU3RyaW5nLCAiYmFzaWMiKSkKLSAgICAgICAgcmV0dXJu
IHsgeyBXVEZMb2dDaGFubmVsU3RhdGU6Ok9uLCBXVEZMb2dMZXZlbDo6SW5mbyB9IH07CisgICAg
Y2FzZSBQcm90b2NvbDo6Q29uc29sZTo6Q2hhbm5lbExldmVsOjpCYXNpYzoKKyAgICAgICAgbV9p
bnNwZWN0ZWRQYWdlLmNvbmZpZ3VyZUxvZ2dpbmdDaGFubmVsKFByb3RvY29sOjpIZWxwZXJzOjpn
ZXRFbnVtQ29uc3RhbnRWYWx1ZShzb3VyY2UpLCBXVEZMb2dDaGFubmVsU3RhdGU6Ok9uLCBXVEZM
b2dMZXZlbDo6SW5mbyk7CisgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBpZiAoZXF1YWxJZ25v
cmluZ0FTQ0lJQ2FzZShsZXZlbFN0cmluZywgInZlcmJvc2UiKSkKLSAgICAgICAgcmV0dXJuIHsg
eyBXVEZMb2dDaGFubmVsU3RhdGU6Ok9uLCBXVEZMb2dMZXZlbDo6RGVidWcgfSB9OwotCi0gICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKLX0KLQotdm9pZCBQYWdlQ29uc29sZUFnZW50OjpzZXRMb2dn
aW5nQ2hhbm5lbExldmVsKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBj
aGFubmVsTmFtZSwgY29uc3QgU3RyaW5nJiBjaGFubmVsTGV2ZWwpCi17Ci0gICAgYXV0byBjb25m
aWd1cmF0aW9uID0gY2hhbm5lbENvbmZpZ3VyYXRpb25Gb3JTdHJpbmcoY2hhbm5lbExldmVsKTsK
LSAgICBpZiAoIWNvbmZpZ3VyYXRpb24pIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSBtYWtlU3Ry
aW5nKCJVbmtub3duIGNoYW5uZWxMZXZlbDogIl9zLCBjaGFubmVsTGV2ZWwpOwotICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBQcm90b2NvbDo6Q29uc29sZTo6Q2hhbm5lbExldmVsOjpWZXJib3Nl
OgorICAgICAgICBtX2luc3BlY3RlZFBhZ2UuY29uZmlndXJlTG9nZ2luZ0NoYW5uZWwoUHJvdG9j
b2w6OkhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKHNvdXJjZSksIFdURkxvZ0NoYW5uZWxT
dGF0ZTo6T24sIFdURkxvZ0xldmVsOjpEZWJ1Zyk7CisgICAgICAgIHJldHVybiB7IH07CiAgICAg
fQogCi0gICAgbV9pbnNwZWN0ZWRQYWdlLmNvbmZpZ3VyZUxvZ2dpbmdDaGFubmVsKGNoYW5uZWxO
YW1lLCBjb25maWd1cmF0aW9uLnZhbHVlKCkuZmlyc3QsIGNvbmZpZ3VyYXRpb24udmFsdWUoKS5z
ZWNvbmQpOworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiB7IH07CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9hZ2VudHMvcGFnZS9QYWdlQ29uc29sZUFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZUNvbnNvbGVBZ2VudC5oCmluZGV4IDRjNDVmMmRhZDBmN2Mx
YjQwNDUzOWZlNGY1N2U1YTg2ZGIyMDYzMTguLjQxZmU3NmQwMzIwNzBlMGQ0MTAzZTQwYTJjMTQ0
Y2UzNzk4MWM4MzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMv
cGFnZS9QYWdlQ29uc29sZUFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Fn
ZW50cy9wYWdlL1BhZ2VDb25zb2xlQWdlbnQuaApAQCAtNDEsMTIgKzQxLDEyIEBAIGNsYXNzIFBh
Z2VDb25zb2xlQWdlbnQgZmluYWwgOiBwdWJsaWMgV2ViQ29uc29sZUFnZW50IHsKICAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBQYWdlQ29uc29sZUFnZW50KFBhZ2VB
Z2VudENvbnRleHQmKTsKLSAgICB+UGFnZUNvbnNvbGVBZ2VudCgpIG92ZXJyaWRlOworICAgIH5Q
YWdlQ29uc29sZUFnZW50KCk7CiAKICAgICAvLyBDb25zb2xlQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyCi0gICAgdm9pZCBjbGVhck1lc3NhZ2VzKEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAg
dm9pZCBnZXRMb2dnaW5nQ2hhbm5lbHMoRXJyb3JTdHJpbmcmLCBSZWZQdHI8SlNPTjo6QXJyYXlP
ZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDb25zb2xlOjpDaGFubmVsPj4mKSBvdmVycmlkZTsKLSAg
ICB2b2lkIHNldExvZ2dpbmdDaGFubmVsTGV2ZWwoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcm
IGNoYW5uZWwsIGNvbnN0IFN0cmluZyYgbGV2ZWwpIG92ZXJyaWRlOworICAgIEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gY2xlYXJNZXNzYWdlcygpOworICAgIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEpTT046OkFycmF5T2Y8SW5zcGVjdG9y
OjpQcm90b2NvbDo6Q29uc29sZTo6Q2hhbm5lbD4+PiBnZXRMb2dnaW5nQ2hhbm5lbHMoKTsKKyAg
ICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHNldExvZ2dpbmdDaGFu
bmVsTGV2ZWwoSW5zcGVjdG9yOjpQcm90b2NvbDo6Q29uc29sZTo6Q2hhbm5lbFNvdXJjZSwgSW5z
cGVjdG9yOjpQcm90b2NvbDo6Q29uc29sZTo6Q2hhbm5lbExldmVsKTsKIAogcHJpdmF0ZToKICAg
ICBJbnN0cnVtZW50aW5nQWdlbnRzJiBtX2luc3RydW1lbnRpbmdBZ2VudHM7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZURPTURlYnVnZ2VyQWdl
bnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VET01EZWJ1
Z2dlckFnZW50LmNwcAppbmRleCA3YzVmZmE0ZTM4M2Y1MmNhYjVlMmEyN2ZkOTE1OTA5ZmJjZWY1
MTRjLi5jODhiYmRjMDNkMjU0MTBmYjY5NThiMGYwOWFmYzViZjE4OGRiMjU3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZURPTURlYnVnZ2VyQWdl
bnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlRE9N
RGVidWdnZXJBZ2VudC5jcHAKQEAgLTY5LDg0ICs2OSw3NCBAQCB2b2lkIFBhZ2VET01EZWJ1Z2dl
ckFnZW50OjpkaXNhYmxlKCkKICAgICBJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50OjpkaXNhYmxl
KCk7CiB9CiAKLXZvaWQgUGFnZURPTURlYnVnZ2VyQWdlbnQ6OnNldERPTUJyZWFrcG9pbnQoRXJy
b3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkLCBjb25zdCBTdHJpbmcmIHR5cGVTdHJp
bmcsIGNvbnN0IEpTT046Ok9iamVjdCogb3B0aW9uc1BheWxvYWQpCitQcm90b2NvbDo6RXJyb3JT
dHJpbmdPcjx2b2lkPiBQYWdlRE9NRGVidWdnZXJBZ2VudDo6c2V0RE9NQnJlYWtwb2ludChQcm90
b2NvbDo6RE9NOjpOb2RlSWQgbm9kZUlkLCBQcm90b2NvbDo6RE9NRGVidWdnZXI6OkRPTUJyZWFr
cG9pbnRUeXBlIHR5cGUsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgb3B0aW9ucykKIHsKKyAgICBQ
cm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBhdXRvKiBkb21BZ2VudCA9
IG1faW5zdHJ1bWVudGluZ0FnZW50cy5wZXJzaXN0ZW50RE9NQWdlbnQoKTsKLSAgICBpZiAoIWRv
bUFnZW50KSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIkRPTSBkb21haW4gbXVzdCBiZSBlbmFi
bGVkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghZG9tQWdlbnQpCisgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiRE9NIGRvbWFpbiBtdXN0IGJlIGVuYWJsZWQiX3Mp
OwogCiAgICAgTm9kZSogbm9kZSA9IGRvbUFnZW50LT5hc3NlcnROb2RlKGVycm9yU3RyaW5nLCBu
b2RlSWQpOwogICAgIGlmICghbm9kZSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4g
bWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCi0gICAgYXV0byB0eXBlID0gSW5zcGVjdG9y
OjpQcm90b2NvbDo6SW5zcGVjdG9ySGVscGVyczo6cGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpET01CcmVha3BvaW50VHlwZT4odHlwZVN0
cmluZyk7Ci0gICAgaWYgKCF0eXBlKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gbWFrZVN0cmlu
ZygiVW5rbm93biB0eXBlOiAiX3MsIHR5cGVTdHJpbmcpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgYXV0byBicmVha3BvaW50ID0gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGVidWdn
ZXJCcmVha3BvaW50RnJvbVBheWxvYWQoZXJyb3JTdHJpbmcsIG9wdGlvbnNQYXlsb2FkKTsKKyAg
ICBhdXRvIGJyZWFrcG9pbnQgPSBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkZWJ1Z2dlckJyZWFr
cG9pbnRGcm9tUGF5bG9hZChlcnJvclN0cmluZywgV1RGTW92ZShvcHRpb25zKSk7CiAgICAgaWYg
KCFicmVha3BvaW50KQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBl
Y3RlZChlcnJvclN0cmluZyk7CiAKLSAgICBzd2l0Y2ggKCp0eXBlKSB7Ci0gICAgY2FzZSBJbnNw
ZWN0b3I6OlByb3RvY29sOjpET01EZWJ1Z2dlcjo6RE9NQnJlYWtwb2ludFR5cGU6OlN1YnRyZWVN
b2RpZmllZDoKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIFByb3RvY29sOjpET01EZWJ1
Z2dlcjo6RE9NQnJlYWtwb2ludFR5cGU6OlN1YnRyZWVNb2RpZmllZDoKICAgICAgICAgaWYgKCFt
X2RvbVN1YnRyZWVNb2RpZmllZEJyZWFrcG9pbnRzLmFkZChub2RlLCBicmVha3BvaW50LnJlbGVh
c2VOb25OdWxsKCkpKQotICAgICAgICAgICAgZXJyb3JTdHJpbmcgPSAiQnJlYWtwb2ludCBmb3Ig
Z2l2ZW4gbm9kZSBhbmQgZ2l2ZW4gdHlwZSBhbHJlYWR5IGV4aXN0cyJfczsKLSAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJCcmVha3BvaW50IGZvciBn
aXZlbiBub2RlIGFuZCBnaXZlbiB0eXBlIGFscmVhZHkgZXhpc3RzIl9zKTsKKyAgICAgICAgcmV0
dXJuIHsgfTsKIAotICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NRGVidWdnZXI6OkRP
TUJyZWFrcG9pbnRUeXBlOjpBdHRyaWJ1dGVNb2RpZmllZDoKKyAgICBjYXNlIFByb3RvY29sOjpE
T01EZWJ1Z2dlcjo6RE9NQnJlYWtwb2ludFR5cGU6OkF0dHJpYnV0ZU1vZGlmaWVkOgogICAgICAg
ICBpZiAoIW1fZG9tQXR0cmlidXRlTW9kaWZpZWRCcmVha3BvaW50cy5hZGQobm9kZSwgYnJlYWtw
b2ludC5yZWxlYXNlTm9uTnVsbCgpKSkKLSAgICAgICAgICAgIGVycm9yU3RyaW5nID0gIkJyZWFr
cG9pbnQgZm9yIGdpdmVuIG5vZGUgYW5kIGdpdmVuIHR5cGUgYWxyZWFkeSBleGlzdHMiX3M7Ci0g
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiQnJlYWtw
b2ludCBmb3IgZ2l2ZW4gbm9kZSBhbmQgZ2l2ZW4gdHlwZSBhbHJlYWR5IGV4aXN0cyJfcyk7Cisg
ICAgICAgIHJldHVybiB7IH07CiAKLSAgICBjYXNlIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTURl
YnVnZ2VyOjpET01CcmVha3BvaW50VHlwZTo6Tm9kZVJlbW92ZWQ6CisgICAgY2FzZSBQcm90b2Nv
bDo6RE9NRGVidWdnZXI6OkRPTUJyZWFrcG9pbnRUeXBlOjpOb2RlUmVtb3ZlZDoKICAgICAgICAg
aWYgKCFtX2RvbU5vZGVSZW1vdmVkQnJlYWtwb2ludHMuYWRkKG5vZGUsIGJyZWFrcG9pbnQucmVs
ZWFzZU5vbk51bGwoKSkpCi0gICAgICAgICAgICBlcnJvclN0cmluZyA9ICJCcmVha3BvaW50IGZv
ciBnaXZlbiBub2RlIGFuZCBnaXZlbiB0eXBlIGFscmVhZHkgZXhpc3RzIl9zOwotICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkJyZWFrcG9pbnQgZm9y
IGdpdmVuIG5vZGUgYW5kIGdpdmVuIHR5cGUgYWxyZWFkeSBleGlzdHMiX3MpOworICAgICAgICBy
ZXR1cm4geyB9OwogICAgIH0KIAogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVy
biBtYWtlVW5leHBlY3RlZCgiTm90IHN1cHBvcnRlZCIpOwogfQogCi12b2lkIFBhZ2VET01EZWJ1
Z2dlckFnZW50OjpyZW1vdmVET01CcmVha3BvaW50KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywg
aW50IG5vZGVJZCwgY29uc3QgU3RyaW5nJiB0eXBlU3RyaW5nKQorUHJvdG9jb2w6OkVycm9yU3Ry
aW5nT3I8dm9pZD4gUGFnZURPTURlYnVnZ2VyQWdlbnQ6OnJlbW92ZURPTUJyZWFrcG9pbnQoUHJv
dG9jb2w6OkRPTTo6Tm9kZUlkIG5vZGVJZCwgUHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpET01CcmVh
a3BvaW50VHlwZSB0eXBlKQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmlu
ZzsKKwogICAgIGF1dG8qIGRvbUFnZW50ID0gbV9pbnN0cnVtZW50aW5nQWdlbnRzLnBlcnNpc3Rl
bnRET01BZ2VudCgpOwotICAgIGlmICghZG9tQWdlbnQpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcg
PSAiRE9NIGRvbWFpbiBtdXN0IGJlIGVuYWJsZWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
CisgICAgaWYgKCFkb21BZ2VudCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJET00g
ZG9tYWluIG11c3QgYmUgZW5hYmxlZCJfcyk7CiAKICAgICBOb2RlKiBub2RlID0gZG9tQWdlbnQt
PmFzc2VydE5vZGUoZXJyb3JTdHJpbmcsIG5vZGVJZCk7CiAgICAgaWYgKCFub2RlKQotICAgICAg
ICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAK
LSAgICBhdXRvIHR5cGUgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpJbnNwZWN0b3JIZWxwZXJzOjpw
YXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NRGVidWdnZXI6
OkRPTUJyZWFrcG9pbnRUeXBlPih0eXBlU3RyaW5nKTsKLSAgICBpZiAoIXR5cGUpIHsKLSAgICAg
ICAgZXJyb3JTdHJpbmcgPSBtYWtlU3RyaW5nKCJVbmtub3duIHR5cGU6ICJfcywgdHlwZVN0cmlu
Zyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBzd2l0Y2ggKCp0eXBlKSB7Ci0gICAg
Y2FzZSBJbnNwZWN0b3I6OlByb3RvY29sOjpET01EZWJ1Z2dlcjo6RE9NQnJlYWtwb2ludFR5cGU6
OlN1YnRyZWVNb2RpZmllZDoKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIFByb3RvY29s
OjpET01EZWJ1Z2dlcjo6RE9NQnJlYWtwb2ludFR5cGU6OlN1YnRyZWVNb2RpZmllZDoKICAgICAg
ICAgaWYgKCFtX2RvbVN1YnRyZWVNb2RpZmllZEJyZWFrcG9pbnRzLnJlbW92ZShub2RlKSkKLSAg
ICAgICAgICAgIGVycm9yU3RyaW5nID0gIkJyZWFrcG9pbnQgZm9yIGdpdmVuIG5vZGUgYW5kIGdp
dmVuIHR5cGUgbWlzc2luZyJfczsKLSAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgcmV0dXJu
IG1ha2VVbmV4cGVjdGVkKCJCcmVha3BvaW50IGZvciBnaXZlbiBub2RlIGFuZCBnaXZlbiB0eXBl
IG1pc3NpbmciX3MpOworICAgICAgICByZXR1cm4geyB9OwogCi0gICAgY2FzZSBJbnNwZWN0b3I6
OlByb3RvY29sOjpET01EZWJ1Z2dlcjo6RE9NQnJlYWtwb2ludFR5cGU6OkF0dHJpYnV0ZU1vZGlm
aWVkOgorICAgIGNhc2UgUHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpET01CcmVha3BvaW50VHlwZTo6
QXR0cmlidXRlTW9kaWZpZWQ6CiAgICAgICAgIGlmICghbV9kb21BdHRyaWJ1dGVNb2RpZmllZEJy
ZWFrcG9pbnRzLnJlbW92ZShub2RlKSkKLSAgICAgICAgICAgIGVycm9yU3RyaW5nID0gIkJyZWFr
cG9pbnQgZm9yIGdpdmVuIG5vZGUgYW5kIGdpdmVuIHR5cGUgbWlzc2luZyJfczsKLSAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJCcmVha3BvaW50IGZv
ciBnaXZlbiBub2RlIGFuZCBnaXZlbiB0eXBlIG1pc3NpbmciX3MpOworICAgICAgICByZXR1cm4g
eyB9OwogCi0gICAgY2FzZSBJbnNwZWN0b3I6OlByb3RvY29sOjpET01EZWJ1Z2dlcjo6RE9NQnJl
YWtwb2ludFR5cGU6Ok5vZGVSZW1vdmVkOgorICAgIGNhc2UgUHJvdG9jb2w6OkRPTURlYnVnZ2Vy
OjpET01CcmVha3BvaW50VHlwZTo6Tm9kZVJlbW92ZWQ6CiAgICAgICAgIGlmICghbV9kb21Ob2Rl
UmVtb3ZlZEJyZWFrcG9pbnRzLnJlbW92ZShub2RlKSkKLSAgICAgICAgICAgIGVycm9yU3RyaW5n
ID0gIkJyZWFrcG9pbnQgZm9yIGdpdmVuIG5vZGUgYW5kIGdpdmVuIHR5cGUgbWlzc2luZyJfczsK
LSAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJCcmVh
a3BvaW50IGZvciBnaXZlbiBub2RlIGFuZCBnaXZlbiB0eXBlIG1pc3NpbmciX3MpOworICAgICAg
ICByZXR1cm4geyB9OwogICAgIH0KIAogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJl
dHVybiBtYWtlVW5leHBlY3RlZCgiTm90IHN1cHBvcnRlZCIpOwogfQogCiB2b2lkIFBhZ2VET01E
ZWJ1Z2dlckFnZW50OjptYWluRnJhbWVOYXZpZ2F0ZWQoKQpAQCAtMjEzLDcgKzIwMyw3IEBAIHZv
aWQgUGFnZURPTURlYnVnZ2VyQWdlbnQ6OndpbGxJbnNlcnRET01Ob2RlKE5vZGUmIHBhcmVudCkK
IAogICAgIEFTU0VSVChjbG9zZXN0QnJlYWtwb2ludE93bmVyKTsKIAotICAgIGF1dG8gcGF1c2VE
YXRhID0gYnVpbGRQYXVzZURhdGFGb3JET01CcmVha3BvaW50KEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRPTURlYnVnZ2VyOjpET01CcmVha3BvaW50VHlwZTo6U3VidHJlZU1vZGlmaWVkLCAqY2xvc2Vz
dEJyZWFrcG9pbnRPd25lcik7CisgICAgYXV0byBwYXVzZURhdGEgPSBidWlsZFBhdXNlRGF0YUZv
ckRPTUJyZWFrcG9pbnQoUHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpET01CcmVha3BvaW50VHlwZTo6
U3VidHJlZU1vZGlmaWVkLCAqY2xvc2VzdEJyZWFrcG9pbnRPd25lcik7CiAgICAgcGF1c2VEYXRh
LT5zZXRCb29sZWFuKCJpbnNlcnRpb24iLCB0cnVlKTsKICAgICAvLyBGSVhNRTogPGh0dHBzOi8v
d2Via2l0Lm9yZy9iLzIxMzQ5OT4gV2ViIEluc3BlY3RvcjogYWxsb3cgRE9NIG5vZGVzIHRvIGJl
IGluc3RydW1lbnRlZCBhdCBhbnkgcG9pbnQsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGUgbWFp
biBkb2N1bWVudCBoYXMgYWxzbyBiZWVuIGluc3RydW1lbnRlZAogICAgIC8vIEluY2x1ZGUgdGhl
IG5ldyBjaGlsZCBub2RlIElEIHNvIHRoZSBmcm9udGVuZCBjYW4gc2hvdyB0aGUgbm9kZSB0aGF0
J3MgYWJvdXQgdG8gYmUgaW5zZXJ0ZWQuCkBAIC0yMzAsNyArMjIwLDcgQEAgdm9pZCBQYWdlRE9N
RGVidWdnZXJBZ2VudDo6d2lsbFJlbW92ZURPTU5vZGUoTm9kZSYgbm9kZSkKIAogICAgIE9wdGlv
bmFsPHNpemVfdD4gY2xvc2VzdERpc3RhbmNlOwogICAgIFJlZlB0cjxKU0M6OkJyZWFrcG9pbnQ+
IGNsb3Nlc3RCcmVha3BvaW50OwotICAgIE9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRP
TURlYnVnZ2VyOjpET01CcmVha3BvaW50VHlwZT4gY2xvc2VzdEJyZWFrcG9pbnRUeXBlOworICAg
IE9wdGlvbmFsPFByb3RvY29sOjpET01EZWJ1Z2dlcjo6RE9NQnJlYWtwb2ludFR5cGU+IGNsb3Nl
c3RCcmVha3BvaW50VHlwZTsKICAgICBOb2RlKiBjbG9zZXN0QnJlYWtwb2ludE93bmVyID0gbnVs
bHB0cjsKIAogICAgIGZvciAoYXV0byBbYnJlYWtwb2ludE93bmVyLCBicmVha3BvaW50XSA6IG1f
ZG9tTm9kZVJlbW92ZWRCcmVha3BvaW50cykgewpAQCAtMjQxLDcgKzIzMSw3IEBAIHZvaWQgUGFn
ZURPTURlYnVnZ2VyQWdlbnQ6OndpbGxSZW1vdmVET01Ob2RlKE5vZGUmIG5vZGUpCiAgICAgICAg
IGlmICghY2xvc2VzdERpc3RhbmNlIHx8IGRpc3RhbmNlIDwgY2xvc2VzdERpc3RhbmNlKSB7CiAg
ICAgICAgICAgICBjbG9zZXN0RGlzdGFuY2UgPSBkaXN0YW5jZTsKICAgICAgICAgICAgIGNsb3Nl
c3RCcmVha3BvaW50ID0gYnJlYWtwb2ludC5jb3B5UmVmKCk7Ci0gICAgICAgICAgICBjbG9zZXN0
QnJlYWtwb2ludFR5cGUgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpET01EZWJ1Z2dlcjo6RE9NQnJl
YWtwb2ludFR5cGU6Ok5vZGVSZW1vdmVkOworICAgICAgICAgICAgY2xvc2VzdEJyZWFrcG9pbnRU
eXBlID0gUHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpET01CcmVha3BvaW50VHlwZTo6Tm9kZVJlbW92
ZWQ7CiAgICAgICAgICAgICBjbG9zZXN0QnJlYWtwb2ludE93bmVyID0gYnJlYWtwb2ludE93bmVy
OwogICAgICAgICB9CiAgICAgfQpAQCAtMjU1LDcgKzI0NSw3IEBAIHZvaWQgUGFnZURPTURlYnVn
Z2VyQWdlbnQ6OndpbGxSZW1vdmVET01Ob2RlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICBpZiAo
IWNsb3Nlc3REaXN0YW5jZSB8fCBkaXN0YW5jZSA8IGNsb3Nlc3REaXN0YW5jZSkgewogICAgICAg
ICAgICAgICAgIGNsb3Nlc3REaXN0YW5jZSA9IGRpc3RhbmNlOwogICAgICAgICAgICAgICAgIGNs
b3Nlc3RCcmVha3BvaW50ID0gYnJlYWtwb2ludC5jb3B5UmVmKCk7Ci0gICAgICAgICAgICAgICAg
Y2xvc2VzdEJyZWFrcG9pbnRUeXBlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NRGVidWdnZXI6
OkRPTUJyZWFrcG9pbnRUeXBlOjpTdWJ0cmVlTW9kaWZpZWQ7CisgICAgICAgICAgICAgICAgY2xv
c2VzdEJyZWFrcG9pbnRUeXBlID0gUHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpET01CcmVha3BvaW50
VHlwZTo6U3VidHJlZU1vZGlmaWVkOwogICAgICAgICAgICAgICAgIGNsb3Nlc3RCcmVha3BvaW50
T3duZXIgPSBicmVha3BvaW50T3duZXI7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTI5
Niw3ICsyODYsNyBAQCB2b2lkIFBhZ2VET01EZWJ1Z2dlckFnZW50Ojp3aWxsTW9kaWZ5RE9NQXR0
cihFbGVtZW50JiBlbGVtZW50KQogICAgIGlmIChpdCA9PSBtX2RvbUF0dHJpYnV0ZU1vZGlmaWVk
QnJlYWtwb2ludHMuZW5kKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gcGF1c2VEYXRh
ID0gYnVpbGRQYXVzZURhdGFGb3JET01CcmVha3BvaW50KEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRP
TURlYnVnZ2VyOjpET01CcmVha3BvaW50VHlwZTo6QXR0cmlidXRlTW9kaWZpZWQsIGVsZW1lbnQp
OworICAgIGF1dG8gcGF1c2VEYXRhID0gYnVpbGRQYXVzZURhdGFGb3JET01CcmVha3BvaW50KFBy
b3RvY29sOjpET01EZWJ1Z2dlcjo6RE9NQnJlYWtwb2ludFR5cGU6OkF0dHJpYnV0ZU1vZGlmaWVk
LCBlbGVtZW50KTsKICAgICBtX2RlYnVnZ2VyQWdlbnQtPmJyZWFrUHJvZ3JhbShJbnNwZWN0b3I6
OkRlYnVnZ2VyRnJvbnRlbmREaXNwYXRjaGVyOjpSZWFzb246OkRPTSwgV1RGTW92ZShwYXVzZURh
dGEpLCBpdC0+dmFsdWUuY29weVJlZigpKTsKIH0KIApAQCAtMzMzLDI3ICszMjMsMjggQEAgdm9p
ZCBQYWdlRE9NRGVidWdnZXJBZ2VudDo6d2lsbEludmFsaWRhdGVTdHlsZUF0dHIoRWxlbWVudCYg
ZWxlbWVudCkKICAgICBpZiAoaXQgPT0gbV9kb21BdHRyaWJ1dGVNb2RpZmllZEJyZWFrcG9pbnRz
LmVuZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIHBhdXNlRGF0YSA9IGJ1aWxkUGF1
c2VEYXRhRm9yRE9NQnJlYWtwb2ludChJbnNwZWN0b3I6OlByb3RvY29sOjpET01EZWJ1Z2dlcjo6
RE9NQnJlYWtwb2ludFR5cGU6OkF0dHJpYnV0ZU1vZGlmaWVkLCBlbGVtZW50KTsKKyAgICBhdXRv
IHBhdXNlRGF0YSA9IGJ1aWxkUGF1c2VEYXRhRm9yRE9NQnJlYWtwb2ludChQcm90b2NvbDo6RE9N
RGVidWdnZXI6OkRPTUJyZWFrcG9pbnRUeXBlOjpBdHRyaWJ1dGVNb2RpZmllZCwgZWxlbWVudCk7
CiAgICAgbV9kZWJ1Z2dlckFnZW50LT5icmVha1Byb2dyYW0oSW5zcGVjdG9yOjpEZWJ1Z2dlckZy
b250ZW5kRGlzcGF0Y2hlcjo6UmVhc29uOjpET00sIFdURk1vdmUocGF1c2VEYXRhKSwgaXQtPnZh
bHVlLmNvcHlSZWYoKSk7CiB9CiAKLXZvaWQgUGFnZURPTURlYnVnZ2VyQWdlbnQ6OnNldEFuaW1h
dGlvbkZyYW1lQnJlYWtwb2ludChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIFJlZlB0cjxKU0M6
OkJyZWFrcG9pbnQ+JiYgYnJlYWtwb2ludCkKK2Jvb2wgUGFnZURPTURlYnVnZ2VyQWdlbnQ6OnNl
dEFuaW1hdGlvbkZyYW1lQnJlYWtwb2ludChQcm90b2NvbDo6RXJyb3JTdHJpbmcmIGVycm9yU3Ry
aW5nLCBSZWZQdHI8SlNDOjpCcmVha3BvaW50PiYmIGJyZWFrcG9pbnQpCiB7CiAgICAgaWYgKCFt
X3BhdXNlT25BbGxBbmltYXRpb25GcmFtZXNCcmVha3BvaW50ID09ICFicmVha3BvaW50KSB7CiAg
ICAgICAgIGVycm9yU3RyaW5nID0gbV9wYXVzZU9uQWxsQW5pbWF0aW9uRnJhbWVzQnJlYWtwb2lu
dCA/ICJCcmVha3BvaW50IGZvciBBbmltYXRpb25GcmFtZSBhbHJlYWR5IGV4aXN0cyJfcyA6ICJC
cmVha3BvaW50IGZvciBBbmltYXRpb25GcmFtZSBtaXNzaW5nIl9zOwotICAgICAgICByZXR1cm47
CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKICAgICBtX3BhdXNlT25BbGxBbmltYXRp
b25GcmFtZXNCcmVha3BvaW50ID0gV1RGTW92ZShicmVha3BvaW50KTsKKyAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotUmVmPEpTT046Ok9iamVjdD4gUGFnZURPTURlYnVnZ2VyQWdlbnQ6OmJ1aWxkUGF1
c2VEYXRhRm9yRE9NQnJlYWtwb2ludChJbnNwZWN0b3I6OlByb3RvY29sOjpET01EZWJ1Z2dlcjo6
RE9NQnJlYWtwb2ludFR5cGUgYnJlYWtwb2ludFR5cGUsIE5vZGUmIGJyZWFrcG9pbnRPd25lcikK
K1JlZjxKU09OOjpPYmplY3Q+IFBhZ2VET01EZWJ1Z2dlckFnZW50OjpidWlsZFBhdXNlRGF0YUZv
ckRPTUJyZWFrcG9pbnQoUHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpET01CcmVha3BvaW50VHlwZSBi
cmVha3BvaW50VHlwZSwgTm9kZSYgYnJlYWtwb2ludE93bmVyKQogewogICAgIEFTU0VSVChtX2Rl
YnVnZ2VyQWdlbnQtPmJyZWFrcG9pbnRzQWN0aXZlKCkpOwogICAgIEFTU0VSVChtX2RvbVN1YnRy
ZWVNb2RpZmllZEJyZWFrcG9pbnRzLmNvbnRhaW5zKCZicmVha3BvaW50T3duZXIpIHx8IG1fZG9t
QXR0cmlidXRlTW9kaWZpZWRCcmVha3BvaW50cy5jb250YWlucygmYnJlYWtwb2ludE93bmVyKSB8
fCBtX2RvbU5vZGVSZW1vdmVkQnJlYWtwb2ludHMuY29udGFpbnMoJmJyZWFrcG9pbnRPd25lcikp
OwogCiAgICAgYXV0byBwYXVzZURhdGEgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIHBh
dXNlRGF0YS0+c2V0U3RyaW5nKCJ0eXBlIiwgSW5zcGVjdG9yOjpQcm90b2NvbDo6SW5zcGVjdG9y
SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUoYnJlYWtwb2ludFR5cGUpKTsKKyAgICBwYXVz
ZURhdGEtPnNldFN0cmluZygidHlwZSIsIFByb3RvY29sOjpIZWxwZXJzOjpnZXRFbnVtQ29uc3Rh
bnRWYWx1ZShicmVha3BvaW50VHlwZSkpOwogICAgIGlmIChhdXRvKiBkb21BZ2VudCA9IG1faW5z
dHJ1bWVudGluZ0FnZW50cy5wZXJzaXN0ZW50RE9NQWdlbnQoKSkgewogICAgICAgICBpZiAoYXV0
byBicmVha3BvaW50T3duZXJOb2RlSWQgPSBkb21BZ2VudC0+cHVzaE5vZGVUb0Zyb250ZW5kKCZi
cmVha3BvaW50T3duZXIpKQogICAgICAgICAgICAgcGF1c2VEYXRhLT5zZXRJbnRlZ2VyKCJub2Rl
SWQiLCBicmVha3BvaW50T3duZXJOb2RlSWQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VET01EZWJ1Z2dlckFnZW50LmggYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZURPTURlYnVnZ2VyQWdlbnQuaAppbmRleCBh
ZDAxYzY3N2U1ZDIyMjVhMDY1Y2YwMTA0NTE1NjliMTc5NGQ2OWE5Li5kODcyODI5MjVlYzY5MzEw
ZTBiYzBlNzg4M2NkY2E1MDhkMTAzNTIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZURPTURlYnVnZ2VyQWdlbnQuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZURPTURlYnVnZ2VyQWdlbnQuaApAQCAtMzYs
MjEgKzM2LDE5IEBAIGNsYXNzIEVsZW1lbnQ7CiBjbGFzcyBGcmFtZTsKIGNsYXNzIE5vZGU7CiAK
LXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCiBjbGFzcyBQYWdlRE9NRGVidWdnZXJBZ2Vu
dCBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50IHsKIHB1YmxpYzoKICAg
ICBQYWdlRE9NRGVidWdnZXJBZ2VudChQYWdlQWdlbnRDb250ZXh0JiwgSW5zcGVjdG9yOjpJbnNw
ZWN0b3JEZWJ1Z2dlckFnZW50Kik7Ci0gICAgflBhZ2VET01EZWJ1Z2dlckFnZW50KCkgb3ZlcnJp
ZGU7CisgICAgflBhZ2VET01EZWJ1Z2dlckFnZW50KCk7CiAKLSAgICBib29sIGVuYWJsZWQoKSBj
b25zdCBvdmVycmlkZTsKKyAgICBib29sIGVuYWJsZWQoKSBjb25zdDsKIAogICAgIC8vIERPTURl
YnVnZ2VyQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyCi0gICAgdm9pZCBzZXRET01CcmVha3BvaW50
KEVycm9yU3RyaW5nJiwgaW50IG5vZGVJZCwgY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBKU09O
OjpPYmplY3QqIG9wdGlvbnMpIG92ZXJyaWRlOwotICAgIHZvaWQgcmVtb3ZlRE9NQnJlYWtwb2lu
dChFcnJvclN0cmluZyYsIGludCBub2RlSWQsIGNvbnN0IFN0cmluZyYgdHlwZSkgb3ZlcnJpZGU7
CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzZXRET01CcmVh
a3BvaW50KEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkLCBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpET01EZWJ1Z2dlcjo6RE9NQnJlYWtwb2ludFR5cGUsIFJlZlB0cjxKU09OOjpPYmplY3Q+
JiYgb3B0aW9ucyk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lk
PiByZW1vdmVET01CcmVha3BvaW50KEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkLCBJ
bnNwZWN0b3I6OlByb3RvY29sOjpET01EZWJ1Z2dlcjo6RE9NQnJlYWtwb2ludFR5cGUpOwogCiAg
ICAgLy8gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uCi0gICAgdm9pZCBtYWluRnJhbWVOYXZpZ2F0
ZWQoKSBmaW5hbDsKKyAgICB2b2lkIG1haW5GcmFtZU5hdmlnYXRlZCgpOwogICAgIHZvaWQgZnJh
bWVEb2N1bWVudFVwZGF0ZWQoRnJhbWUmKTsKICAgICB2b2lkIHdpbGxJbnNlcnRET01Ob2RlKE5v
ZGUmIHBhcmVudCk7CiAgICAgdm9pZCB3aWxsUmVtb3ZlRE9NTm9kZShOb2RlJik7CkBAIC02MSwx
MCArNTksMTAgQEAgcHVibGljOgogICAgIHZvaWQgZGlkRmlyZUFuaW1hdGlvbkZyYW1lKCk7CiAK
IHByaXZhdGU6Ci0gICAgdm9pZCBlbmFibGUoKSBvdmVycmlkZTsKLSAgICB2b2lkIGRpc2FibGUo
KSBvdmVycmlkZTsKKyAgICB2b2lkIGVuYWJsZSgpOworICAgIHZvaWQgZGlzYWJsZSgpOwogCi0g
ICAgdm9pZCBzZXRBbmltYXRpb25GcmFtZUJyZWFrcG9pbnQoRXJyb3JTdHJpbmcmLCBSZWZQdHI8
SlNDOjpCcmVha3BvaW50PiYmKSBvdmVycmlkZTsKKyAgICBib29sIHNldEFuaW1hdGlvbkZyYW1l
QnJlYWtwb2ludChJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZyYsIFJlZlB0cjxKU0M6
OkJyZWFrcG9pbnQ+JiYpOwogCiAgICAgUmVmPEpTT046Ok9iamVjdD4gYnVpbGRQYXVzZURhdGFG
b3JET01CcmVha3BvaW50KEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpET01CcmVh
a3BvaW50VHlwZSwgTm9kZSYgYnJlYWtwb2ludE93bmVyKTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VEZWJ1Z2dlckFnZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlRGVidWdnZXJBZ2VudC5jcHAK
aW5kZXggMGMyMDM5ODI3MzNiNGVlOGJhYmQwNTU4ZmEzM2IyYTFkYzRmOGYyNS4uNjE4NzI2OGJk
Mjc1MTgxZTk4ZjQ1ZWUwZmE3ZTE2YTc1MDliYzE2MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VEZWJ1Z2dlckFnZW50LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZURlYnVnZ2VyQWdlbnQuY3BwCkBA
IC02OCwyNiArNjgsMjUgQEAgYm9vbCBQYWdlRGVidWdnZXJBZ2VudDo6ZW5hYmxlZCgpIGNvbnN0
CiAgICAgcmV0dXJuIG1faW5zdHJ1bWVudGluZ0FnZW50cy5lbmFibGVkUGFnZURlYnVnZ2VyQWdl
bnQoKSA9PSB0aGlzICYmIFdlYkRlYnVnZ2VyQWdlbnQ6OmVuYWJsZWQoKTsKIH0KIAotdm9pZCBQ
YWdlRGVidWdnZXJBZ2VudDo6ZXZhbHVhdGVPbkNhbGxGcmFtZShFcnJvclN0cmluZyYgZXJyb3JT
dHJpbmcsIGNvbnN0IFN0cmluZyYgY2FsbEZyYW1lSWQsIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lv
biwgY29uc3QgU3RyaW5nKiBvYmplY3RHcm91cCwgY29uc3QgYm9vbCogaW5jbHVkZUNvbW1hbmRM
aW5lQVBJLCBjb25zdCBib29sKiBkb05vdFBhdXNlT25FeGNlcHRpb25zQW5kTXV0ZUNvbnNvbGUs
IGNvbnN0IGJvb2wqIHJldHVybkJ5VmFsdWUsIGNvbnN0IGJvb2wqIGdlbmVyYXRlUHJldmlldywg
Y29uc3QgYm9vbCogc2F2ZVJlc3VsdCwgY29uc3QgYm9vbCogZW11bGF0ZVVzZXJHZXN0dXJlLCBS
ZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3VsdCwgT3B0aW9uYWw8
Ym9vbD4mIHdhc1Rocm93biwgT3B0aW9uYWw8aW50PiYgc2F2ZWRSZXN1bHRJbmRleCkKK1Byb3Rv
Y29sOjpFcnJvclN0cmluZ09yPHN0ZDo6dHVwbGU8UmVmPFByb3RvY29sOjpSdW50aW1lOjpSZW1v
dGVPYmplY3Q+LCBPcHRpb25hbDxib29sPiAvKiB3YXNUaHJvd24gKi8sIE9wdGlvbmFsPGludD4g
Lyogc2F2ZWRSZXN1bHRJbmRleCAqLz4+IFBhZ2VEZWJ1Z2dlckFnZW50OjpldmFsdWF0ZU9uQ2Fs
bEZyYW1lKGNvbnN0IFByb3RvY29sOjpEZWJ1Z2dlcjo6Q2FsbEZyYW1lSWQmIGNhbGxGcmFtZUlk
LCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIGNvbnN0IFN0cmluZyYgb2JqZWN0R3JvdXAsIE9w
dGlvbmFsPGJvb2w+JiYgaW5jbHVkZUNvbW1hbmRMaW5lQVBJLCBPcHRpb25hbDxib29sPiYmIGRv
Tm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29sZSwgT3B0aW9uYWw8Ym9vbD4mJiByZXR1
cm5CeVZhbHVlLCBPcHRpb25hbDxib29sPiYmIGdlbmVyYXRlUHJldmlldywgT3B0aW9uYWw8Ym9v
bD4mJiBzYXZlUmVzdWx0LCBPcHRpb25hbDxib29sPiYmIGVtdWxhdGVVc2VyR2VzdHVyZSkKIHsK
LSAgICBhdXRvIHNob3VsZEVtdWxhdGVVc2VyR2VzdHVyZSA9IGVtdWxhdGVVc2VyR2VzdHVyZSAm
JiAqZW11bGF0ZVVzZXJHZXN0dXJlOwotICAgIFVzZXJHZXN0dXJlRW11bGF0aW9uU2NvcGUgdXNl
ckdlc3R1cmVTY29wZShtX2luc3BlY3RlZFBhZ2UsIHNob3VsZEVtdWxhdGVVc2VyR2VzdHVyZSk7
CisgICAgVXNlckdlc3R1cmVFbXVsYXRpb25TY29wZSB1c2VyR2VzdHVyZVNjb3BlKG1faW5zcGVj
dGVkUGFnZSwgZW11bGF0ZVVzZXJHZXN0dXJlICYmICplbXVsYXRlVXNlckdlc3R1cmUpOwogCi0g
ICAgV2ViRGVidWdnZXJBZ2VudDo6ZXZhbHVhdGVPbkNhbGxGcmFtZShlcnJvclN0cmluZywgY2Fs
bEZyYW1lSWQsIGV4cHJlc3Npb24sIG9iamVjdEdyb3VwLCBpbmNsdWRlQ29tbWFuZExpbmVBUEks
IGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29sZSwgcmV0dXJuQnlWYWx1ZSwgZ2Vu
ZXJhdGVQcmV2aWV3LCBzYXZlUmVzdWx0LCBlbXVsYXRlVXNlckdlc3R1cmUsIHJlc3VsdCwgd2Fz
VGhyb3duLCBzYXZlZFJlc3VsdEluZGV4KTsKKyAgICByZXR1cm4gV2ViRGVidWdnZXJBZ2VudDo6
ZXZhbHVhdGVPbkNhbGxGcmFtZShjYWxsRnJhbWVJZCwgZXhwcmVzc2lvbiwgb2JqZWN0R3JvdXAs
IFdURk1vdmUoaW5jbHVkZUNvbW1hbmRMaW5lQVBJKSwgV1RGTW92ZShkb05vdFBhdXNlT25FeGNl
cHRpb25zQW5kTXV0ZUNvbnNvbGUpLCBXVEZNb3ZlKHJldHVybkJ5VmFsdWUpLCBXVEZNb3ZlKGdl
bmVyYXRlUHJldmlldyksIFdURk1vdmUoc2F2ZVJlc3VsdCksIFdURk1vdmUoZW11bGF0ZVVzZXJH
ZXN0dXJlKSk7CiB9CiAKLXZvaWQgUGFnZURlYnVnZ2VyQWdlbnQ6OmVuYWJsZSgpCit2b2lkIFBh
Z2VEZWJ1Z2dlckFnZW50OjppbnRlcm5hbEVuYWJsZSgpCiB7CiAgICAgbV9pbnN0cnVtZW50aW5n
QWdlbnRzLnNldEVuYWJsZWRQYWdlRGVidWdnZXJBZ2VudCh0aGlzKTsKIAotICAgIFdlYkRlYnVn
Z2VyQWdlbnQ6OmVuYWJsZSgpOworICAgIFdlYkRlYnVnZ2VyQWdlbnQ6OmludGVybmFsRW5hYmxl
KCk7CiB9CiAKLXZvaWQgUGFnZURlYnVnZ2VyQWdlbnQ6OmRpc2FibGUoYm9vbCBpc0JlaW5nRGVz
dHJveWVkKQordm9pZCBQYWdlRGVidWdnZXJBZ2VudDo6aW50ZXJuYWxEaXNhYmxlKGJvb2wgaXNC
ZWluZ0Rlc3Ryb3llZCkKIHsKICAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMuc2V0RW5hYmxlZFBh
Z2VEZWJ1Z2dlckFnZW50KG51bGxwdHIpOwogCi0gICAgV2ViRGVidWdnZXJBZ2VudDo6ZGlzYWJs
ZShpc0JlaW5nRGVzdHJveWVkKTsKKyAgICBXZWJEZWJ1Z2dlckFnZW50OjppbnRlcm5hbERpc2Fi
bGUoaXNCZWluZ0Rlc3Ryb3llZCk7CiB9CiAKIFN0cmluZyBQYWdlRGVidWdnZXJBZ2VudDo6c291
cmNlTWFwVVJMRm9yU2NyaXB0KGNvbnN0IEpTQzo6RGVidWdnZXI6OlNjcmlwdCYgc2NyaXB0KQpA
QCAtMTI2LDcgKzEyNSw3IEBAIHZvaWQgUGFnZURlYnVnZ2VyQWdlbnQ6OmJyZWFrcG9pbnRBY3Rp
b25Mb2coSlNDOjpKU0dsb2JhbE9iamVjdCogbGV4aWNhbEdsb2JhbE9iCiAgICAgbV9pbnNwZWN0
ZWRQYWdlLmNvbnNvbGUoKS5hZGRNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OkpTLCBNZXNzYWdlTGV2
ZWw6OkxvZywgbWVzc2FnZSwgY3JlYXRlU2NyaXB0Q2FsbFN0YWNrKGxleGljYWxHbG9iYWxPYmpl
Y3QpKTsKIH0KIAotSW5qZWN0ZWRTY3JpcHQgUGFnZURlYnVnZ2VyQWdlbnQ6OmluamVjdGVkU2Ny
aXB0Rm9yRXZhbChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IGludCogZXhlY3V0aW9u
Q29udGV4dElkKQorSW5qZWN0ZWRTY3JpcHQgUGFnZURlYnVnZ2VyQWdlbnQ6OmluamVjdGVkU2Ny
aXB0Rm9yRXZhbChQcm90b2NvbDo6RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBPcHRpb25hbDxQ
cm90b2NvbDo6UnVudGltZTo6RXhlY3V0aW9uQ29udGV4dElkPiYmIGV4ZWN1dGlvbkNvbnRleHRJ
ZCkKIHsKICAgICBpZiAoIWV4ZWN1dGlvbkNvbnRleHRJZCkgewogICAgICAgICBKU0M6OkpTR2xv
YmFsT2JqZWN0KiBzY3JpcHRTdGF0ZSA9IG1haW5Xb3JsZEV4ZWNTdGF0ZSgmbV9pbnNwZWN0ZWRQ
YWdlLm1haW5GcmFtZSgpKTsKQEAgLTE1Myw4ICsxNTIsNyBAQCB2b2lkIFBhZ2VEZWJ1Z2dlckFn
ZW50OjptYWluRnJhbWVTdGFydGVkTG9hZGluZygpCiAgICAgaWYgKGlzUGF1c2VkKCkpIHsKICAg
ICAgICAgc2V0U3VwcHJlc3NBbGxQYXVzZXModHJ1ZSk7CiAKLSAgICAgICAgRXJyb3JTdHJpbmcg
aWdub3JlZDsKLSAgICAgICAgcmVzdW1lKGlnbm9yZWQpOworICAgICAgICByZXN1bWUoKTsKICAg
ICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFn
ZS9QYWdlRGVidWdnZXJBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9w
YWdlL1BhZ2VEZWJ1Z2dlckFnZW50LmgKaW5kZXggNGMyN2RkMWM3NGIxMmU4NTdiNmNmNjUxMGY4
OTk3NjA3YTE2NjIwNy4uYmZlYmU5MzYyYzQ5MzVlMTAxZTFhMWYxM2M3YTAyYmUxNTNjOWViNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VEZWJ1
Z2dlckFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1Bh
Z2VEZWJ1Z2dlckFnZW50LmgKQEAgLTQ1LDE0ICs0NSwxNCBAQCBjbGFzcyBQYWdlRGVidWdnZXJB
Z2VudCBmaW5hbCA6IHB1YmxpYyBXZWJEZWJ1Z2dlckFnZW50IHsKICAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBQYWdlRGVidWdnZXJBZ2VudChQYWdlQWdlbnRDb250
ZXh0Jik7Ci0gICAgflBhZ2VEZWJ1Z2dlckFnZW50KCkgb3ZlcnJpZGU7Ci0gICAgYm9vbCBlbmFi
bGVkKCkgY29uc3QgZmluYWw7CisgICAgflBhZ2VEZWJ1Z2dlckFnZW50KCk7CisgICAgYm9vbCBl
bmFibGVkKCkgY29uc3Q7CiAKICAgICAvLyBEZWJ1Z2dlckJhY2tlbmREaXNwYXRjaGVySGFuZGxl
cgotICAgIHZvaWQgZXZhbHVhdGVPbkNhbGxGcmFtZShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmlu
ZyYgY2FsbEZyYW1lSWQsIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgY29uc3QgU3RyaW5nKiBv
YmplY3RHcm91cCwgY29uc3QgYm9vbCogaW5jbHVkZUNvbW1hbmRMaW5lQVBJLCBjb25zdCBib29s
KiBkb05vdFBhdXNlT25FeGNlcHRpb25zQW5kTXV0ZUNvbnNvbGUsIGNvbnN0IGJvb2wqIHJldHVy
bkJ5VmFsdWUsIGNvbnN0IGJvb2wqIGdlbmVyYXRlUHJldmlldywgY29uc3QgYm9vbCogc2F2ZVJl
c3VsdCwgY29uc3QgYm9vbCogZW11bGF0ZVVzZXJHZXN0dXJlLCBSZWZQdHI8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0LCBPcHRpb25hbDxib29sPiYg
d2FzVGhyb3duLCBPcHRpb25hbDxpbnQ+JiBzYXZlZFJlc3VsdEluZGV4KSBvdmVycmlkZTsKKyAg
ICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHN0ZDo6dHVwbGU8UmVmPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4sIE9wdGlvbmFsPGJvb2w+IC8q
IHdhc1Rocm93biAqLywgT3B0aW9uYWw8aW50PiAvKiBzYXZlZFJlc3VsdEluZGV4ICovPj4gZXZh
bHVhdGVPbkNhbGxGcmFtZShjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6Q2Fs
bEZyYW1lSWQmLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIGNvbnN0IFN0cmluZyYgb2JqZWN0
R3JvdXAsIE9wdGlvbmFsPGJvb2w+JiYgaW5jbHVkZUNvbW1hbmRMaW5lQVBJLCBPcHRpb25hbDxi
b29sPiYmIGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29sZSwgT3B0aW9uYWw8Ym9v
bD4mJiByZXR1cm5CeVZhbHVlLCBPcHRpb25hbDxib29sPiYmIGdlbmVyYXRlUHJldmlldywgT3B0
aW9uYWw8Ym9vbD4mJiBzYXZlUmVzdWx0LCBPcHRpb25hbDxib29sPiYmIGVtdWxhdGVVc2VyR2Vz
dHVyZSk7CiAKICAgICAvLyBKU0M6OkRlYnVnZ2VyOjpPYnNlcnZlcgotICAgIHZvaWQgYnJlYWtw
b2ludEFjdGlvbkxvZyhKU0M6OkpTR2xvYmFsT2JqZWN0KiwgY29uc3QgU3RyaW5nJiBkYXRhKSBm
aW5hbDsKKyAgICB2b2lkIGJyZWFrcG9pbnRBY3Rpb25Mb2coSlNDOjpKU0dsb2JhbE9iamVjdCos
IGNvbnN0IFN0cmluZyYgZGF0YSk7CiAKICAgICAvLyBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24K
ICAgICB2b2lkIGRpZENsZWFyV2luZG93T2JqZWN0SW5Xb3JsZChGcmFtZSYsIERPTVdyYXBwZXJX
b3JsZCYpOwpAQCAtNjQsMTUgKzY0LDE1IEBAIHB1YmxpYzoKICAgICB2b2lkIGRpZENhbmNlbEFu
aW1hdGlvbkZyYW1lKGludCBjYWxsYmFja0lkKTsKIAogcHJpdmF0ZToKLSAgICB2b2lkIGVuYWJs
ZSgpIG92ZXJyaWRlOwotICAgIHZvaWQgZGlzYWJsZShib29sIGlzQmVpbmdEZXN0cm95ZWQpIG92
ZXJyaWRlOworICAgIHZvaWQgaW50ZXJuYWxFbmFibGUoKTsKKyAgICB2b2lkIGludGVybmFsRGlz
YWJsZShib29sIGlzQmVpbmdEZXN0cm95ZWQpOwogCi0gICAgU3RyaW5nIHNvdXJjZU1hcFVSTEZv
clNjcmlwdChjb25zdCBKU0M6OkRlYnVnZ2VyOjpTY3JpcHQmKSBvdmVycmlkZTsKKyAgICBTdHJp
bmcgc291cmNlTWFwVVJMRm9yU2NyaXB0KGNvbnN0IEpTQzo6RGVidWdnZXI6OlNjcmlwdCYpOwog
Ci0gICAgdm9pZCBtdXRlQ29uc29sZSgpIG92ZXJyaWRlOwotICAgIHZvaWQgdW5tdXRlQ29uc29s
ZSgpIG92ZXJyaWRlOworICAgIHZvaWQgbXV0ZUNvbnNvbGUoKTsKKyAgICB2b2lkIHVubXV0ZUNv
bnNvbGUoKTsKIAotICAgIEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHRG
b3JFdmFsKEVycm9yU3RyaW5nJiwgY29uc3QgaW50KiBleGVjdXRpb25Db250ZXh0SWQpIG92ZXJy
aWRlOworICAgIEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHRGb3JFdmFs
KEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nJiwgT3B0aW9uYWw8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6UnVudGltZTo6RXhlY3V0aW9uQ29udGV4dElkPiYmKTsKIAogICAgIFBhZ2UmIG1f
aW5zcGVjdGVkUGFnZTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
YWdlbnRzL3BhZ2UvUGFnZUhlYXBBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
YWdlbnRzL3BhZ2UvUGFnZUhlYXBBZ2VudC5jcHAKaW5kZXggNDkyMThlZjEyODNlYmQ0ZGQ3NTQy
MTEzNjliMzQ5YTQ4MjUyMmQ5OC4uNDAzNmEyM2M2ODUwN2U1OTRhYjJlOTc0ZjViNjJkYjg2N2M3
ODc2MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1Bh
Z2VIZWFwQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFn
ZS9QYWdlSGVhcEFnZW50LmNwcApAQCAtMzksMTYgKzM5LDIwIEBAIFBhZ2VIZWFwQWdlbnQ6OlBh
Z2VIZWFwQWdlbnQoUGFnZUFnZW50Q29udGV4dCYgY29udGV4dCkKIAogUGFnZUhlYXBBZ2VudDo6
flBhZ2VIZWFwQWdlbnQoKSA9IGRlZmF1bHQ7CiAKLXZvaWQgUGFnZUhlYXBBZ2VudDo6ZW5hYmxl
KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+
IFBhZ2VIZWFwQWdlbnQ6OmVuYWJsZSgpCiB7Ci0gICAgV2ViSGVhcEFnZW50OjplbmFibGUoZXJy
b3JTdHJpbmcpOworICAgIGF1dG8gcmVzdWx0ID0gV2ViSGVhcEFnZW50OjplbmFibGUoKTsKKwog
ICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy5zZXRFbmFibGVkUGFnZUhlYXBBZ2VudCh0aGlzKTsK
KworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgUGFnZUhlYXBBZ2VudDo6ZGlzYWJsZShF
cnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBQ
YWdlSGVhcEFnZW50OjpkaXNhYmxlKCkKIHsKICAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMuc2V0
RW5hYmxlZFBhZ2VIZWFwQWdlbnQobnVsbHB0cik7Ci0gICAgV2ViSGVhcEFnZW50OjpkaXNhYmxl
KGVycm9yU3RyaW5nKTsKKworICAgIHJldHVybiBXZWJIZWFwQWdlbnQ6OmRpc2FibGUoKTsKIH0K
IAogdm9pZCBQYWdlSGVhcEFnZW50OjptYWluRnJhbWVOYXZpZ2F0ZWQoKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VIZWFwQWdlbnQuaCBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlSGVhcEFnZW50LmgKaW5kZXgg
MWJkNmNhMGZjOWVmMTVhMWQ3YTI1Mjg0Mjk1YThlMTllODVmMTBkZS4uZjI2ZmY4NGIzOGI5NGM5
NzJkOWY0NmNjOWM0YTc0ZWFmZjc0YzdhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VIZWFwQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZUhlYXBBZ2VudC5oCkBAIC0zMSwxOCArMzEsMTYgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQog
Y2xhc3MgUGFnZUhlYXBBZ2VudCBmaW5hbCA6IHB1YmxpYyBXZWJIZWFwQWdlbnQgewogICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKFBhZ2VIZWFwQWdlbnQpOwogICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOwogcHVibGljOgogICAgIFBhZ2VIZWFwQWdlbnQoUGFnZUFnZW50Q29udGV4dCYpOwot
ICAgIH5QYWdlSGVhcEFnZW50KCkgb3ZlcnJpZGU7CisgICAgflBhZ2VIZWFwQWdlbnQoKTsKIAog
ICAgIC8vIEhlYXBCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIKLSAgICB2b2lkIGVuYWJsZShFcnJv
clN0cmluZyYpIG92ZXJyaWRlOwotICAgIHZvaWQgZGlzYWJsZShFcnJvclN0cmluZyYpIG92ZXJy
aWRlOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZW5hYmxl
KCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBkaXNhYmxl
KCk7CiAKICAgICAvLyBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24KICAgICB2b2lkIG1haW5GcmFt
ZU5hdmlnYXRlZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50
cy9wYWdlL1BhZ2VOZXR3b3JrQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Fn
ZW50cy9wYWdlL1BhZ2VOZXR3b3JrQWdlbnQuY3BwCmluZGV4IDJjNjViODEwNDk0YmJlYjczZDUz
NGU2NjJhYzMxMTkzZjQwYzNjNjguLjlmZTEzOTljM2I3MjYyMzU1MmI0MjNiMDAzM2UzM2Y5ODFj
M2IzZDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9Q
YWdlTmV0d29ya0FnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRz
L3BhZ2UvUGFnZU5ldHdvcmtBZ2VudC5jcHAKQEAgLTQ3LDcgKzQ3LDcgQEAgUGFnZU5ldHdvcmtB
Z2VudDo6UGFnZU5ldHdvcmtBZ2VudChQYWdlQWdlbnRDb250ZXh0JiBjb250ZXh0KQogCiBQYWdl
TmV0d29ya0FnZW50Ojp+UGFnZU5ldHdvcmtBZ2VudCgpID0gZGVmYXVsdDsKIAotU3RyaW5nIFBh
Z2VOZXR3b3JrQWdlbnQ6OmxvYWRlcklkZW50aWZpZXIoRG9jdW1lbnRMb2FkZXIqIGxvYWRlcikK
K1Byb3RvY29sOjpOZXR3b3JrOjpMb2FkZXJJZCBQYWdlTmV0d29ya0FnZW50Ojpsb2FkZXJJZGVu
dGlmaWVyKERvY3VtZW50TG9hZGVyKiBsb2FkZXIpCiB7CiAgICAgaWYgKGxvYWRlcikgewogICAg
ICAgICBpZiAoYXV0byogcGFnZUFnZW50ID0gbV9pbnN0cnVtZW50aW5nQWdlbnRzLmVuYWJsZWRQ
YWdlQWdlbnQoKSkKQEAgLTU2LDcgKzU2LDcgQEAgU3RyaW5nIFBhZ2VOZXR3b3JrQWdlbnQ6Omxv
YWRlcklkZW50aWZpZXIoRG9jdW1lbnRMb2FkZXIqIGxvYWRlcikKICAgICByZXR1cm4geyB9Owog
fQogCi1TdHJpbmcgUGFnZU5ldHdvcmtBZ2VudDo6ZnJhbWVJZGVudGlmaWVyKERvY3VtZW50TG9h
ZGVyKiBsb2FkZXIpCitQcm90b2NvbDo6TmV0d29yazo6RnJhbWVJZCBQYWdlTmV0d29ya0FnZW50
OjpmcmFtZUlkZW50aWZpZXIoRG9jdW1lbnRMb2FkZXIqIGxvYWRlcikKIHsKICAgICBpZiAobG9h
ZGVyKSB7CiAgICAgICAgIGlmIChhdXRvKiBwYWdlQWdlbnQgPSBtX2luc3RydW1lbnRpbmdBZ2Vu
dHMuZW5hYmxlZFBhZ2VBZ2VudCgpKQpAQCAtOTEsMTIgKzkxLDEyIEBAIFZlY3RvcjxXZWJTb2Nr
ZXQqPiBQYWdlTmV0d29ya0FnZW50OjphY3RpdmVXZWJTb2NrZXRzKGNvbnN0IExvY2tIb2xkZXIm
IGxvY2spCiAgICAgcmV0dXJuIHdlYlNvY2tldHM7CiB9CiAKLXZvaWQgUGFnZU5ldHdvcmtBZ2Vu
dDo6c2V0UmVzb3VyY2VDYWNoaW5nRGlzYWJsZWQoYm9vbCBkaXNhYmxlZCkKK3ZvaWQgUGFnZU5l
dHdvcmtBZ2VudDo6c2V0UmVzb3VyY2VDYWNoaW5nRGlzYWJsZWRJbnRlcmFsKGJvb2wgZGlzYWJs
ZWQpCiB7CiAgICAgbV9pbnNwZWN0ZWRQYWdlLnNldFJlc291cmNlQ2FjaGluZ0Rpc2FibGVkQnlX
ZWJJbnNwZWN0b3IoZGlzYWJsZWQpOwogfQogCi1TY3JpcHRFeGVjdXRpb25Db250ZXh0KiBQYWdl
TmV0d29ya0FnZW50OjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KEVycm9yU3RyaW5nJiBlcnJvclN0
cmluZywgY29uc3QgU3RyaW5nJiBmcmFtZUlkKQorU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogUGFn
ZU5ldHdvcmtBZ2VudDo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dChQcm90b2NvbDo6RXJyb3JTdHJp
bmcmIGVycm9yU3RyaW5nLCBjb25zdCBQcm90b2NvbDo6TmV0d29yazo6RnJhbWVJZCYgZnJhbWVJ
ZCkKIHsKICAgICBhdXRvKiBwYWdlQWdlbnQgPSBtX2luc3RydW1lbnRpbmdBZ2VudHMuZW5hYmxl
ZFBhZ2VBZ2VudCgpOwogICAgIGlmICghcGFnZUFnZW50KSB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZU5ldHdvcmtBZ2VudC5oIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VOZXR3b3JrQWdlbnQuaAppbmRleCBi
ZWRjZTNlOGRiYjdjOWQyMmIyZTFiOTcyZDIyYjJhNWJjZTQwYWNhLi4wMmQ0YmViMjFjNTJmYzFi
MzQ2NzJkY2VhYTM3NTA0NTFiZTUyNDFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZU5ldHdvcmtBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlTmV0d29ya0FnZW50LmgKQEAgLTM2LDE1ICszNiwx
NSBAQCBjbGFzcyBQYWdlTmV0d29ya0FnZW50IGZpbmFsIDogcHVibGljIEluc3BlY3Rvck5ldHdv
cmtBZ2VudCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgUGFn
ZU5ldHdvcmtBZ2VudChQYWdlQWdlbnRDb250ZXh0Jik7Ci0gICAgflBhZ2VOZXR3b3JrQWdlbnQo
KSBvdmVycmlkZTsKKyAgICB+UGFnZU5ldHdvcmtBZ2VudCgpOwogCiBwcml2YXRlOgotICAgIFN0
cmluZyBsb2FkZXJJZGVudGlmaWVyKERvY3VtZW50TG9hZGVyKikgb3ZlcnJpZGU7Ci0gICAgU3Ry
aW5nIGZyYW1lSWRlbnRpZmllcihEb2N1bWVudExvYWRlciopIG92ZXJyaWRlOwotICAgIFZlY3Rv
cjxXZWJTb2NrZXQqPiBhY3RpdmVXZWJTb2NrZXRzKGNvbnN0IExvY2tIb2xkZXImKSBvdmVycmlk
ZTsKLSAgICB2b2lkIHNldFJlc291cmNlQ2FjaGluZ0Rpc2FibGVkKGJvb2wpIG92ZXJyaWRlOwot
ICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoRXJyb3JT
dHJpbmcmLCBjb25zdCBTdHJpbmcmIGZyYW1lSWQpIG92ZXJyaWRlOwotICAgIGJvb2wgc2hvdWxk
Rm9yY2VCdWZmZXJpbmdOZXR3b3JrUmVzb3VyY2VEYXRhKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gZmFsc2U7IH0KKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpMb2FkZXJJZCBs
b2FkZXJJZGVudGlmaWVyKERvY3VtZW50TG9hZGVyKik7CisgICAgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6TmV0d29yazo6RnJhbWVJZCBmcmFtZUlkZW50aWZpZXIoRG9jdW1lbnRMb2FkZXIqKTsKKyAg
ICBWZWN0b3I8V2ViU29ja2V0Kj4gYWN0aXZlV2ViU29ja2V0cyhjb25zdCBMb2NrSG9sZGVyJik7
CisgICAgdm9pZCBzZXRSZXNvdXJjZUNhY2hpbmdEaXNhYmxlZEludGVyYWwoYm9vbCk7CisgICAg
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dChJbnNwZWN0b3I6
OlByb3RvY29sOjpFcnJvclN0cmluZyYsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdv
cms6OkZyYW1lSWQmKTsKKyAgICBib29sIHNob3VsZEZvcmNlQnVmZmVyaW5nTmV0d29ya1Jlc291
cmNlRGF0YSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKICAgICBQYWdlJiBtX2luc3BlY3Rl
ZFBhZ2U7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9w
YWdlL1BhZ2VSdW50aW1lQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50
cy9wYWdlL1BhZ2VSdW50aW1lQWdlbnQuY3BwCmluZGV4IGU4YWI1ZjRjODlhZGU0ZmM4NWMwNDJi
NDM0MzNiNzI2NTYzYWJkZDIuLjAwZTY5ZjFhYTJlM2Y4ZWEyZjQ0NWU4ZGQ0NDZkZDE2ZWE2MzYz
ZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdl
UnVudGltZUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3Bh
Z2UvUGFnZVJ1bnRpbWVBZ2VudC5jcHAKQEAgLTUyLDExICs1Miw2IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKIAotc3RhdGljIGJvb2wgYXNCb29s
KGNvbnN0IGJvb2wqIGIpCi17Ci0gICAgcmV0dXJuIGIgJiYgKmI7Ci19Ci0KIFBhZ2VSdW50aW1l
QWdlbnQ6OlBhZ2VSdW50aW1lQWdlbnQoUGFnZUFnZW50Q29udGV4dCYgY29udGV4dCkKICAgICA6
IEluc3BlY3RvclJ1bnRpbWVBZ2VudChjb250ZXh0KQogICAgICwgbV9mcm9udGVuZERpc3BhdGNo
ZXIobWFrZVVuaXF1ZTxJbnNwZWN0b3I6OlJ1bnRpbWVGcm9udGVuZERpc3BhdGNoZXI+KGNvbnRl
eHQuZnJvbnRlbmRSb3V0ZXIpKQpAQCAtNjgsMjcgKzYzLDI5IEBAIFBhZ2VSdW50aW1lQWdlbnQ6
OlBhZ2VSdW50aW1lQWdlbnQoUGFnZUFnZW50Q29udGV4dCYgY29udGV4dCkKIAogUGFnZVJ1bnRp
bWVBZ2VudDo6flBhZ2VSdW50aW1lQWdlbnQoKSA9IGRlZmF1bHQ7CiAKLXZvaWQgUGFnZVJ1bnRp
bWVBZ2VudDo6ZW5hYmxlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZykKK1Byb3RvY29sOjpFcnJv
clN0cmluZ09yPHZvaWQ+IFBhZ2VSdW50aW1lQWdlbnQ6OmVuYWJsZSgpCiB7CiAgICAgaWYgKG1f
aW5zdHJ1bWVudGluZ0FnZW50cy5lbmFibGVkUGFnZVJ1bnRpbWVBZ2VudCgpID09IHRoaXMpCi0g
ICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIEluc3BlY3RvclJ1bnRp
bWVBZ2VudDo6ZW5hYmxlKGVycm9yU3RyaW5nKTsKLSAgICBpZiAoIWVycm9yU3RyaW5nLmlzRW1w
dHkoKSkKLSAgICAgICAgcmV0dXJuOworICAgIGF1dG8gcmVzdWx0ID0gSW5zcGVjdG9yUnVudGlt
ZUFnZW50OjplbmFibGUoKTsKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKIAogICAgIC8vIFJlcG9ydCBpbml0aWFsIGNvbnRleHRzIGJlZm9yZSBlbmFibGluZyBpbnN0
cnVtZW50YXRpb24gYXMgdGhlIHJlcG9ydGluZwogICAgIC8vIGNhbiBmb3JjZSBjcmVhdGlvbiBv
ZiBzY3JpcHQgc3RhdGUgd2hpY2ggY291bGQgcmVzdWx0IGluIGR1cGxpY2F0ZSBub3RpZmljYXRp
b25zLgogICAgIHJlcG9ydEV4ZWN1dGlvbkNvbnRleHRDcmVhdGlvbigpOwogCiAgICAgbV9pbnN0
cnVtZW50aW5nQWdlbnRzLnNldEVuYWJsZWRQYWdlUnVudGltZUFnZW50KHRoaXMpOworCisgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBQYWdlUnVudGltZUFnZW50OjpkaXNhYmxlKEVycm9y
U3RyaW5nJiBlcnJvclN0cmluZykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IFBhZ2VS
dW50aW1lQWdlbnQ6OmRpc2FibGUoKQogewogICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy5zZXRF
bmFibGVkUGFnZVJ1bnRpbWVBZ2VudChudWxscHRyKTsKIAotICAgIEluc3BlY3RvclJ1bnRpbWVB
Z2VudDo6ZGlzYWJsZShlcnJvclN0cmluZyk7CisgICAgcmV0dXJuIEluc3BlY3RvclJ1bnRpbWVB
Z2VudDo6ZGlzYWJsZSgpOwogfQogCiB2b2lkIFBhZ2VSdW50aW1lQWdlbnQ6OmZyYW1lTmF2aWdh
dGVkKEZyYW1lJiBmcmFtZSkKQEAgLTEwNiw3ICsxMDMsNyBAQCB2b2lkIFBhZ2VSdW50aW1lQWdl
bnQ6OmRpZENsZWFyV2luZG93T2JqZWN0SW5Xb3JsZChGcmFtZSYgZnJhbWUsIERPTVdyYXBwZXJX
b3JsZAogICAgIG5vdGlmeUNvbnRleHRDcmVhdGVkKHBhZ2VBZ2VudC0+ZnJhbWVJZCgmZnJhbWUp
LCBmcmFtZS5zY3JpcHQoKS5nbG9iYWxPYmplY3Qod29ybGQpLCB3b3JsZCk7CiB9CiAKLUluamVj
dGVkU2NyaXB0IFBhZ2VSdW50aW1lQWdlbnQ6OmluamVjdGVkU2NyaXB0Rm9yRXZhbChFcnJvclN0
cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IGludCogZXhlY3V0aW9uQ29udGV4dElkKQorSW5qZWN0
ZWRTY3JpcHQgUGFnZVJ1bnRpbWVBZ2VudDo6aW5qZWN0ZWRTY3JpcHRGb3JFdmFsKFByb3RvY29s
OjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIE9wdGlvbmFsPFByb3RvY29sOjpSdW50aW1lOjpF
eGVjdXRpb25Db250ZXh0SWQ+JiYgZXhlY3V0aW9uQ29udGV4dElkKQogewogICAgIGlmICghZXhl
Y3V0aW9uQ29udGV4dElkKSB7CiAgICAgICAgIEpTQzo6SlNHbG9iYWxPYmplY3QqIHNjcmlwdFN0
YXRlID0gbWFpbldvcmxkRXhlY1N0YXRlKCZtX2luc3BlY3RlZFBhZ2UubWFpbkZyYW1lKCkpOwpA
QCAtMTU5LDIyICsxNTYsMjIgQEAgdm9pZCBQYWdlUnVudGltZUFnZW50OjpyZXBvcnRFeGVjdXRp
b25Db250ZXh0Q3JlYXRpb24oKQogICAgIH0KIH0KIAotc3RhdGljIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlJ1bnRpbWU6OkV4ZWN1dGlvbkNvbnRleHRUeXBlIHRvUHJvdG9jb2woRE9NV3JhcHBlcldv
cmxkOjpUeXBlIHR5cGUpCitzdGF0aWMgUHJvdG9jb2w6OlJ1bnRpbWU6OkV4ZWN1dGlvbkNvbnRl
eHRUeXBlIHRvUHJvdG9jb2woRE9NV3JhcHBlcldvcmxkOjpUeXBlIHR5cGUpCiB7CiAgICAgc3dp
dGNoICh0eXBlKSB7CiAgICAgY2FzZSBET01XcmFwcGVyV29ybGQ6OlR5cGU6Ok5vcm1hbDoKLSAg
ICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkV4ZWN1dGlvbkNvbnRl
eHRUeXBlOjpOb3JtYWw7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6UnVudGltZTo6RXhlY3V0
aW9uQ29udGV4dFR5cGU6Ok5vcm1hbDsKICAgICBjYXNlIERPTVdyYXBwZXJXb3JsZDo6VHlwZTo6
VXNlcjoKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkV4ZWN1
dGlvbkNvbnRleHRUeXBlOjpVc2VyOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OlJ1bnRpbWU6
OkV4ZWN1dGlvbkNvbnRleHRUeXBlOjpVc2VyOwogICAgIGNhc2UgRE9NV3JhcHBlcldvcmxkOjpU
eXBlOjpJbnRlcm5hbDoKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRp
bWU6OkV4ZWN1dGlvbkNvbnRleHRUeXBlOjpJbnRlcm5hbDsKKyAgICAgICAgcmV0dXJuIFByb3Rv
Y29sOjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0VHlwZTo6SW50ZXJuYWw7CiAgICAgfQogCiAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlJ1bnRpbWU6OkV4ZWN1dGlvbkNvbnRleHRUeXBlOjpJbnRlcm5hbDsKKyAgICByZXR1cm4gUHJv
dG9jb2w6OlJ1bnRpbWU6OkV4ZWN1dGlvbkNvbnRleHRUeXBlOjpJbnRlcm5hbDsKIH0KIAotdm9p
ZCBQYWdlUnVudGltZUFnZW50Ojpub3RpZnlDb250ZXh0Q3JlYXRlZChjb25zdCBTdHJpbmcmIGZy
YW1lSWQsIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgRE9NV3JhcHBl
cldvcmxkJiB3b3JsZCwgU2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2luKQordm9pZCBQYWdl
UnVudGltZUFnZW50Ojpub3RpZnlDb250ZXh0Q3JlYXRlZChjb25zdCBQcm90b2NvbDo6TmV0d29y
azo6RnJhbWVJZCYgZnJhbWVJZCwgSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBj
b25zdCBET01XcmFwcGVyV29ybGQmIHdvcmxkLCBTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlPcmln
aW4pCiB7CiAgICAgYXV0byBpbmplY3RlZFNjcmlwdCA9IGluamVjdGVkU2NyaXB0TWFuYWdlcigp
LmluamVjdGVkU2NyaXB0Rm9yKGdsb2JhbE9iamVjdCk7CiAgICAgaWYgKGluamVjdGVkU2NyaXB0
Lmhhc05vVmFsdWUoKSkKQEAgLTE4NCw3ICsxODEsNyBAQCB2b2lkIFBhZ2VSdW50aW1lQWdlbnQ6
Om5vdGlmeUNvbnRleHRDcmVhdGVkKGNvbnN0IFN0cmluZyYgZnJhbWVJZCwgSlNDOjpKU0dsb2Jh
bAogICAgIGlmIChuYW1lLmlzRW1wdHkoKSAmJiBzZWN1cml0eU9yaWdpbikKICAgICAgICAgbmFt
ZSA9IHNlY3VyaXR5T3JpZ2luLT50b1Jhd1N0cmluZygpOwogCi0gICAgbV9mcm9udGVuZERpc3Bh
dGNoZXItPmV4ZWN1dGlvbkNvbnRleHRDcmVhdGVkKEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRp
bWU6OkV4ZWN1dGlvbkNvbnRleHREZXNjcmlwdGlvbjo6Y3JlYXRlKCkKKyAgICBtX2Zyb250ZW5k
RGlzcGF0Y2hlci0+ZXhlY3V0aW9uQ29udGV4dENyZWF0ZWQoUHJvdG9jb2w6OlJ1bnRpbWU6OkV4
ZWN1dGlvbkNvbnRleHREZXNjcmlwdGlvbjo6Y3JlYXRlKCkKICAgICAgICAgLnNldElkKGluamVj
dGVkU2NyaXB0TWFuYWdlcigpLmluamVjdGVkU2NyaXB0SWRGb3IoZ2xvYmFsT2JqZWN0KSkKICAg
ICAgICAgLnNldFR5cGUodG9Qcm90b2NvbCh3b3JsZC50eXBlKCkpKQogICAgICAgICAuc2V0TmFt
ZShuYW1lKQpAQCAtMTkyLDE2ICsxODksMTYgQEAgdm9pZCBQYWdlUnVudGltZUFnZW50Ojpub3Rp
ZnlDb250ZXh0Q3JlYXRlZChjb25zdCBTdHJpbmcmIGZyYW1lSWQsIEpTQzo6SlNHbG9iYWwKICAg
ICAgICAgLnJlbGVhc2UoKSk7CiB9CiAKLXZvaWQgUGFnZVJ1bnRpbWVBZ2VudDo6ZXZhbHVhdGUo
RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIGNvbnN0
IFN0cmluZyogb2JqZWN0R3JvdXAsIGNvbnN0IGJvb2wqIGluY2x1ZGVDb21tYW5kTGluZUFQSSwg
Y29uc3QgYm9vbCogZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xlLCBjb25zdCBp
bnQqIGV4ZWN1dGlvbkNvbnRleHRJZCwgY29uc3QgYm9vbCogcmV0dXJuQnlWYWx1ZSwgY29uc3Qg
Ym9vbCogZ2VuZXJhdGVQcmV2aWV3LCBjb25zdCBib29sKiBzYXZlUmVzdWx0LCBjb25zdCBib29s
KiBlbXVsYXRlVXNlckdlc3R1cmUsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1l
OjpSZW1vdGVPYmplY3Q+JiByZXN1bHQsIE9wdGlvbmFsPGJvb2w+JiB3YXNUaHJvd24sIE9wdGlv
bmFsPGludD4mIHNhdmVkUmVzdWx0SW5kZXgpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxzdGQ6
OnR1cGxlPFJlZjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiwgT3B0aW9uYWw8Ym9v
bD4gLyogd2FzVGhyb3duICovLCBPcHRpb25hbDxpbnQ+IC8qIHNhdmVkUmVzdWx0SW5kZXggKi8+
PiBQYWdlUnVudGltZUFnZW50OjpldmFsdWF0ZShjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIGNv
bnN0IFN0cmluZyYgb2JqZWN0R3JvdXAsIE9wdGlvbmFsPGJvb2w+JiYgaW5jbHVkZUNvbW1hbmRM
aW5lQVBJLCBPcHRpb25hbDxib29sPiYmIGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29u
c29sZSwgT3B0aW9uYWw8UHJvdG9jb2w6OlJ1bnRpbWU6OkV4ZWN1dGlvbkNvbnRleHRJZD4mJiBl
eGVjdXRpb25Db250ZXh0SWQsIE9wdGlvbmFsPGJvb2w+JiYgcmV0dXJuQnlWYWx1ZSwgT3B0aW9u
YWw8Ym9vbD4mJiBnZW5lcmF0ZVByZXZpZXcsIE9wdGlvbmFsPGJvb2w+JiYgc2F2ZVJlc3VsdCwg
T3B0aW9uYWw8Ym9vbD4mJiBlbXVsYXRlVXNlckdlc3R1cmUpCiB7Ci0gICAgVXNlckdlc3R1cmVF
bXVsYXRpb25TY29wZSB1c2VyR2VzdHVyZVNjb3BlKG1faW5zcGVjdGVkUGFnZSwgYXNCb29sKGVt
dWxhdGVVc2VyR2VzdHVyZSkpOwotICAgIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6ZXZhbHVhdGUo
ZXJyb3JTdHJpbmcsIGV4cHJlc3Npb24sIG9iamVjdEdyb3VwLCBpbmNsdWRlQ29tbWFuZExpbmVB
UEksIGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29sZSwgZXhlY3V0aW9uQ29udGV4
dElkLCByZXR1cm5CeVZhbHVlLCBnZW5lcmF0ZVByZXZpZXcsIHNhdmVSZXN1bHQsIGVtdWxhdGVV
c2VyR2VzdHVyZSwgcmVzdWx0LCB3YXNUaHJvd24sIHNhdmVkUmVzdWx0SW5kZXgpOworICAgIFVz
ZXJHZXN0dXJlRW11bGF0aW9uU2NvcGUgdXNlckdlc3R1cmVTY29wZShtX2luc3BlY3RlZFBhZ2Us
IGVtdWxhdGVVc2VyR2VzdHVyZSAmJiAqZW11bGF0ZVVzZXJHZXN0dXJlKTsKKyAgICByZXR1cm4g
SW5zcGVjdG9yUnVudGltZUFnZW50OjpldmFsdWF0ZShleHByZXNzaW9uLCBvYmplY3RHcm91cCwg
V1RGTW92ZShpbmNsdWRlQ29tbWFuZExpbmVBUEkpLCBXVEZNb3ZlKGRvTm90UGF1c2VPbkV4Y2Vw
dGlvbnNBbmRNdXRlQ29uc29sZSksIFdURk1vdmUoZXhlY3V0aW9uQ29udGV4dElkKSwgV1RGTW92
ZShyZXR1cm5CeVZhbHVlKSwgV1RGTW92ZShnZW5lcmF0ZVByZXZpZXcpLCBXVEZNb3ZlKHNhdmVS
ZXN1bHQpLCBXVEZNb3ZlKGVtdWxhdGVVc2VyR2VzdHVyZSkpOwogfQogCi12b2lkIFBhZ2VSdW50
aW1lQWdlbnQ6OmNhbGxGdW5jdGlvbk9uKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3Qg
U3RyaW5nJiBvYmplY3RJZCwgY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBjb25zdCBKU09OOjpB
cnJheSogb3B0aW9uYWxBcmd1bWVudHMsIGNvbnN0IGJvb2wqIGRvTm90UGF1c2VPbkV4Y2VwdGlv
bnNBbmRNdXRlQ29uc29sZSwgY29uc3QgYm9vbCogcmV0dXJuQnlWYWx1ZSwgY29uc3QgYm9vbCog
Z2VuZXJhdGVQcmV2aWV3LCBjb25zdCBib29sKiBlbXVsYXRlVXNlckdlc3R1cmUsIFJlZlB0cjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiByZXN1bHQsIE9wdGlv
bmFsPGJvb2w+JiB3YXNUaHJvd24pCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxzdGQ6OnR1cGxl
PFJlZjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiwgT3B0aW9uYWw8Ym9vbD4gLyog
d2FzVGhyb3duICovPj4gUGFnZVJ1bnRpbWVBZ2VudDo6Y2FsbEZ1bmN0aW9uT24oY29uc3QgUHJv
dG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdElkJiBvYmplY3RJZCwgY29uc3QgU3RyaW5nJiBl
eHByZXNzaW9uLCBSZWZQdHI8SlNPTjo6QXJyYXk+JiYgb3B0aW9uYWxBcmd1bWVudHMsIE9wdGlv
bmFsPGJvb2w+JiYgZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xlLCBPcHRpb25h
bDxib29sPiYmIHJldHVybkJ5VmFsdWUsIE9wdGlvbmFsPGJvb2w+JiYgZ2VuZXJhdGVQcmV2aWV3
LCBPcHRpb25hbDxib29sPiYmIGVtdWxhdGVVc2VyR2VzdHVyZSkKIHsKLSAgICBVc2VyR2VzdHVy
ZUVtdWxhdGlvblNjb3BlIHVzZXJHZXN0dXJlU2NvcGUobV9pbnNwZWN0ZWRQYWdlLCBhc0Jvb2wo
ZW11bGF0ZVVzZXJHZXN0dXJlKSk7Ci0gICAgSW5zcGVjdG9yUnVudGltZUFnZW50OjpjYWxsRnVu
Y3Rpb25PbihlcnJvclN0cmluZywgb2JqZWN0SWQsIGV4cHJlc3Npb24sIG9wdGlvbmFsQXJndW1l
bnRzLCBkb05vdFBhdXNlT25FeGNlcHRpb25zQW5kTXV0ZUNvbnNvbGUsIHJldHVybkJ5VmFsdWUs
IGdlbmVyYXRlUHJldmlldywgZW11bGF0ZVVzZXJHZXN0dXJlLCByZXN1bHQsIHdhc1Rocm93bik7
CisgICAgVXNlckdlc3R1cmVFbXVsYXRpb25TY29wZSB1c2VyR2VzdHVyZVNjb3BlKG1faW5zcGVj
dGVkUGFnZSwgZW11bGF0ZVVzZXJHZXN0dXJlICYmICplbXVsYXRlVXNlckdlc3R1cmUpOworICAg
IHJldHVybiBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmNhbGxGdW5jdGlvbk9uKG9iamVjdElkLCBl
eHByZXNzaW9uLCBXVEZNb3ZlKG9wdGlvbmFsQXJndW1lbnRzKSwgV1RGTW92ZShkb05vdFBhdXNl
T25FeGNlcHRpb25zQW5kTXV0ZUNvbnNvbGUpLCBXVEZNb3ZlKHJldHVybkJ5VmFsdWUpLCBXVEZN
b3ZlKGdlbmVyYXRlUHJldmlldyksIFdURk1vdmUoZW11bGF0ZVVzZXJHZXN0dXJlKSk7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9hZ2VudHMvcGFnZS9QYWdlUnVudGltZUFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZVJ1bnRpbWVBZ2VudC5oCmluZGV4IDJhZjM3MzliN2ZlN2Mx
NmZhYTdkOGQyNzk3Y2U2ZDAxMDIxNTM5OGQuLjI5ODQ2NWM1MmI0MjQ2NGMyNzMzNjU5ZTA3ZjNm
NzYwMTc0YTk1ZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMv
cGFnZS9QYWdlUnVudGltZUFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Fn
ZW50cy9wYWdlL1BhZ2VSdW50aW1lQWdlbnQuaApAQCAtNDUsMzEgKzQ1LDMwIEBAIGNsYXNzIERP
TVdyYXBwZXJXb3JsZDsKIGNsYXNzIEZyYW1lOwogY2xhc3MgUGFnZTsKIGNsYXNzIFNlY3VyaXR5
T3JpZ2luOwotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiAKIGNsYXNzIFBhZ2VSdW50aW1l
QWdlbnQgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JSdW50aW1lQWdlbnQgewog
ICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFBhZ2VSdW50aW1lQWdlbnQpOwogICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIFBhZ2VSdW50aW1lQWdlbnQoUGFnZUFnZW50
Q29udGV4dCYpOwotICAgIH5QYWdlUnVudGltZUFnZW50KCkgb3ZlcnJpZGU7CisgICAgflBhZ2VS
dW50aW1lQWdlbnQoKTsKIAogICAgIC8vIFJ1bnRpbWVCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIK
LSAgICB2b2lkIGVuYWJsZShFcnJvclN0cmluZyYpIG92ZXJyaWRlOwotICAgIHZvaWQgZGlzYWJs
ZShFcnJvclN0cmluZyYpIG92ZXJyaWRlOwotICAgIHZvaWQgZXZhbHVhdGUoRXJyb3JTdHJpbmcm
LCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIGNvbnN0IFN0cmluZyogb2JqZWN0R3JvdXAsIGNv
bnN0IGJvb2wqIGluY2x1ZGVDb21tYW5kTGluZUFQSSwgY29uc3QgYm9vbCogZG9Ob3RQYXVzZU9u
RXhjZXB0aW9uc0FuZE11dGVDb25zb2xlLCBjb25zdCBpbnQqIGV4ZWN1dGlvbkNvbnRleHRJZCwg
Y29uc3QgYm9vbCogcmV0dXJuQnlWYWx1ZSwgY29uc3QgYm9vbCogZ2VuZXJhdGVQcmV2aWV3LCBj
b25zdCBib29sKiBzYXZlUmVzdWx0LCBjb25zdCBib29sKiBlbXVsYXRlVXNlckdlc3R1cmUsIFJl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiByZXN1bHQs
IE9wdGlvbmFsPGJvb2w+JiB3YXNUaHJvd24sIE9wdGlvbmFsPGludD4mIHNhdmVkUmVzdWx0SW5k
ZXgpIG92ZXJyaWRlOwotICAgIHZvaWQgY2FsbEZ1bmN0aW9uT24oRXJyb3JTdHJpbmcmLCBjb25z
dCBTdHJpbmcmIG9iamVjdElkLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIGNvbnN0IEpTT046
OkFycmF5KiBvcHRpb25hbEFyZ3VtZW50cywgY29uc3QgYm9vbCogZG9Ob3RQYXVzZU9uRXhjZXB0
aW9uc0FuZE11dGVDb25zb2xlLCBjb25zdCBib29sKiByZXR1cm5CeVZhbHVlLCBjb25zdCBib29s
KiBnZW5lcmF0ZVByZXZpZXcsIGNvbnN0IGJvb2wqIGVtdWxhdGVVc2VyR2VzdHVyZSwgUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3VsdCwgT3B0
aW9uYWw8Ym9vbD4mIHdhc1Rocm93bikgb3ZlcnJpZGU7CisgICAgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBlbmFibGUoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29s
OjpFcnJvclN0cmluZ09yPHZvaWQ+IGRpc2FibGUoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29s
OjpFcnJvclN0cmluZ09yPHN0ZDo6dHVwbGU8UmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRp
bWU6OlJlbW90ZU9iamVjdD4sIE9wdGlvbmFsPGJvb2w+IC8qIHdhc1Rocm93biAqLywgT3B0aW9u
YWw8aW50PiAvKiBzYXZlZFJlc3VsdEluZGV4ICovPj4gZXZhbHVhdGUoY29uc3QgU3RyaW5nJiBl
eHByZXNzaW9uLCBjb25zdCBTdHJpbmcmIG9iamVjdEdyb3VwLCBPcHRpb25hbDxib29sPiYmIGlu
Y2x1ZGVDb21tYW5kTGluZUFQSSwgT3B0aW9uYWw8Ym9vbD4mJiBkb05vdFBhdXNlT25FeGNlcHRp
b25zQW5kTXV0ZUNvbnNvbGUsIE9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6
OkV4ZWN1dGlvbkNvbnRleHRJZD4mJiwgT3B0aW9uYWw8Ym9vbD4mJiByZXR1cm5CeVZhbHVlLCBP
cHRpb25hbDxib29sPiYmIGdlbmVyYXRlUHJldmlldywgT3B0aW9uYWw8Ym9vbD4mJiBzYXZlUmVz
dWx0LCBPcHRpb25hbDxib29sPiYmIGVtdWxhdGVVc2VyR2VzdHVyZSk7CisgICAgSW5zcGVjdG9y
OjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxzdGQ6OnR1cGxlPFJlZjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+LCBPcHRpb25hbDxib29sPiAvKiB3YXNUaHJvd24g
Ki8+PiBjYWxsRnVuY3Rpb25Pbihjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpS
ZW1vdGVPYmplY3RJZCYsIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgUmVmUHRyPEpTT046OkFy
cmF5PiYmIGFyZ3VtZW50cywgT3B0aW9uYWw8Ym9vbD4mJiBkb05vdFBhdXNlT25FeGNlcHRpb25z
QW5kTXV0ZUNvbnNvbGUsIE9wdGlvbmFsPGJvb2w+JiYgcmV0dXJuQnlWYWx1ZSwgT3B0aW9uYWw8
Ym9vbD4mJiBnZW5lcmF0ZVByZXZpZXcsIE9wdGlvbmFsPGJvb2w+JiYgZW11bGF0ZVVzZXJHZXN0
dXJlKTsKIAogICAgIC8vIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbgogICAgIHZvaWQgZnJhbWVO
YXZpZ2F0ZWQoRnJhbWUmKTsKICAgICB2b2lkIGRpZENsZWFyV2luZG93T2JqZWN0SW5Xb3JsZChG
cmFtZSYsIERPTVdyYXBwZXJXb3JsZCYpOwogCiBwcml2YXRlOgotICAgIEluc3BlY3Rvcjo6SW5q
ZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHRGb3JFdmFsKEVycm9yU3RyaW5nJiwgY29uc3QgaW50
KiBleGVjdXRpb25Db250ZXh0SWQpIG92ZXJyaWRlOwotICAgIHZvaWQgbXV0ZUNvbnNvbGUoKSBv
dmVycmlkZTsKLSAgICB2b2lkIHVubXV0ZUNvbnNvbGUoKSBvdmVycmlkZTsKKyAgICBJbnNwZWN0
b3I6OkluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0Rm9yRXZhbChJbnNwZWN0b3I6OlByb3Rv
Y29sOjpFcnJvclN0cmluZyYsIE9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6
OkV4ZWN1dGlvbkNvbnRleHRJZD4mJik7CisgICAgdm9pZCBtdXRlQ29uc29sZSgpOworICAgIHZv
aWQgdW5tdXRlQ29uc29sZSgpOwogICAgIHZvaWQgcmVwb3J0RXhlY3V0aW9uQ29udGV4dENyZWF0
aW9uKCk7Ci0gICAgdm9pZCBub3RpZnlDb250ZXh0Q3JlYXRlZChjb25zdCBTdHJpbmcmIGZyYW1l
SWQsIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBjb25zdCBET01XcmFwcGVyV29ybGQmLCBTZWN1cml0
eU9yaWdpbiogPSBudWxscHRyKTsKKyAgICB2b2lkIG5vdGlmeUNvbnRleHRDcmVhdGVkKGNvbnN0
IEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OkZyYW1lSWQmLCBKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiwgY29uc3QgRE9NV3JhcHBlcldvcmxkJiwgU2VjdXJpdHlPcmlnaW4qID0gbnVsbHB0cik7
CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW5zcGVjdG9yOjpSdW50aW1lRnJvbnRlbmREaXNwYXRj
aGVyPiBtX2Zyb250ZW5kRGlzcGF0Y2hlcjsKICAgICBSZWZQdHI8SW5zcGVjdG9yOjpSdW50aW1l
QmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9TZXJ2aWNlV29ya2VyQWdlbnQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvU2VydmljZVdvcmtlckFn
ZW50LmNwcAppbmRleCAxOGE2MGMzYzFjYjJmYTExMzNlODk0MTkxMjYzOWY5MzcyZWZmMmE2Li5i
YmUyY2MwM2Q2NDVmYzEyOTA4NGRiZWU5ZGQ4MDQyMmJiZDYzZmQ4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9TZXJ2aWNlV29ya2VyQWdlbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1NlcnZpY2VXb3Jr
ZXJBZ2VudC5jcHAKQEAgLTU0LDkgKzU0LDkgQEAgdm9pZCBTZXJ2aWNlV29ya2VyQWdlbnQ6Ondp
bGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlzY29ubmVjdFJlYXMKIHsK
IH0KIAotdm9pZCBTZXJ2aWNlV29ya2VyQWdlbnQ6OmdldEluaXRpYWxpemF0aW9uSW5mbyhFcnJv
clN0cmluZyYsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpTZXJ2aWNlV29ya2VyOjpDb25m
aWd1cmF0aW9uPiYgaW5mbykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxQcm90b2NvbDo6
U2VydmljZVdvcmtlcjo6Q29uZmlndXJhdGlvbj4+IFNlcnZpY2VXb3JrZXJBZ2VudDo6Z2V0SW5p
dGlhbGl6YXRpb25JbmZvKCkKIHsKLSAgICBpbmZvID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6U2Vy
dmljZVdvcmtlcjo6Q29uZmlndXJhdGlvbjo6Y3JlYXRlKCkKKyAgICByZXR1cm4gUHJvdG9jb2w6
OlNlcnZpY2VXb3JrZXI6OkNvbmZpZ3VyYXRpb246OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRUYXJn
ZXRJZChtX3NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZS5pZGVudGlmaWVyKCkpCiAgICAgICAgIC5z
ZXRTZWN1cml0eU9yaWdpbihtX3NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZS5zZWN1cml0eU9yaWdp
bigpLT50b1Jhd1N0cmluZygpKQogICAgICAgICAuc2V0VXJsKG1fc2VydmljZVdvcmtlckdsb2Jh
bFNjb3BlLnRocmVhZCgpLmNvbnRleHREYXRhKCkuc2NyaXB0VVJMLnN0cmluZygpKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvU2VydmljZVdvcmtl
ckFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9TZXJ2aWNl
V29ya2VyQWdlbnQuaAppbmRleCA4MTQ5ZmYzZGFjMzU3OGZjMDQ4YjY1OGU2MzE3ZGUzMmIxOTdk
NDAwLi4wYmE1Y2M1Y2M3ZjMzZDYxMWI0NWEwNDk4NzQ1MDU1YjhmMjlmZmM0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9TZXJ2aWNlV29ya2VyQWdl
bnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9TZXJ2aWNl
V29ya2VyQWdlbnQuaApAQCAtMzQsMjEgKzM0LDE5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
Y2xhc3MgU2VydmljZVdvcmtlckdsb2JhbFNjb3BlOwogCi10eXBlZGVmIFN0cmluZyBFcnJvclN0
cmluZzsKLQogY2xhc3MgU2VydmljZVdvcmtlckFnZW50IGZpbmFsIDogcHVibGljIEluc3BlY3Rv
ckFnZW50QmFzZSwgcHVibGljIEluc3BlY3Rvcjo6U2VydmljZVdvcmtlckJhY2tlbmREaXNwYXRj
aGVySGFuZGxlciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU2VydmljZVdvcmtlckFnZW50
KTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBTZXJ2aWNlV29y
a2VyQWdlbnQoV29ya2VyQWdlbnRDb250ZXh0Jik7Ci0gICAgflNlcnZpY2VXb3JrZXJBZ2VudCgp
IG92ZXJyaWRlOworICAgIH5TZXJ2aWNlV29ya2VyQWdlbnQoKTsKIAogICAgIC8vIEluc3BlY3Rv
ckFnZW50QmFzZQotICAgIHZvaWQgZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rv
cjo6RnJvbnRlbmRSb3V0ZXIqLCBJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyKikgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCB3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkRp
c2Nvbm5lY3RSZWFzb24pIG92ZXJyaWRlOworICAgIHZvaWQgZGlkQ3JlYXRlRnJvbnRlbmRBbmRC
YWNrZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRSb3V0ZXIqLCBJbnNwZWN0b3I6OkJhY2tlbmREaXNw
YXRjaGVyKik7CisgICAgdm9pZCB3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0
b3I6OkRpc2Nvbm5lY3RSZWFzb24pOwogCiAgICAgLy8gU2VydmljZVdvcmtlckJhY2tlbmREaXNw
YXRjaGVySGFuZGxlcgotICAgIHZvaWQgZ2V0SW5pdGlhbGl6YXRpb25JbmZvKEVycm9yU3RyaW5n
JiwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlNlcnZpY2VXb3JrZXI6OkNvbmZpZ3VyYXRp
b24+Jikgb3ZlcnJpZGU7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxS
ZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6U2VydmljZVdvcmtlcjo6Q29uZmlndXJhdGlvbj4+IGdl
dEluaXRpYWxpemF0aW9uSW5mbygpOwogCiBwcml2YXRlOgogICAgIFNlcnZpY2VXb3JrZXJHbG9i
YWxTY29wZSYgbV9zZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGU7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJBdWRpdEFnZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlckF1ZGl0QWdlbnQuY3Bw
CmluZGV4IGMxMmI1YWE0MTMyZjg5YWM1ODJkZWI5ZjcyZjE4NTFhOWVlZjk1M2YuLjg5MjQxOTBl
ZTYyMGYxNTUxNGEyNTBkNzYyZTJiZTRhMTkzMzA2M2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlckF1ZGl0QWdlbnQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlckF1ZGl0QWdlbnQuY3Bw
CkBAIC00OCw3ICs0OCw3IEBAIFdvcmtlckF1ZGl0QWdlbnQ6OldvcmtlckF1ZGl0QWdlbnQoV29y
a2VyQWdlbnRDb250ZXh0JiBjb250ZXh0KQogCiBXb3JrZXJBdWRpdEFnZW50Ojp+V29ya2VyQXVk
aXRBZ2VudCgpID0gZGVmYXVsdDsKIAotSW5qZWN0ZWRTY3JpcHQgV29ya2VyQXVkaXRBZ2VudDo6
aW5qZWN0ZWRTY3JpcHRGb3JFdmFsKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgaW50
KiBleGVjdXRpb25Db250ZXh0SWQpCitJbmplY3RlZFNjcmlwdCBXb3JrZXJBdWRpdEFnZW50Ojpp
bmplY3RlZFNjcmlwdEZvckV2YWwoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywg
T3B0aW9uYWw8UHJvdG9jb2w6OlJ1bnRpbWU6OkV4ZWN1dGlvbkNvbnRleHRJZD4mJiBleGVjdXRp
b25Db250ZXh0SWQpCiB7CiAgICAgaWYgKGV4ZWN1dGlvbkNvbnRleHRJZCkgewogICAgICAgICBl
cnJvclN0cmluZyA9ICJleGVjdXRpb25Db250ZXh0SWQgaXMgbm90IHN1cHBvcnRlZCBmb3Igd29y
a2VycyBhcyB0aGVyZSBpcyBvbmx5IG9uZSBleGVjdXRpb24gY29udGV4dCJfczsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlckF1ZGl0QWdl
bnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlckF1ZGl0
QWdlbnQuaAppbmRleCBkNmFjZGMwZWEzZTg5ZjBmYWQzMWNjYjJkNzY4ZTBlMTQ2YmQzMjM1Li5k
MjU5YzZhNzZjMmVjYjBlZWI4ZWRkNzMzOWVjMDQ1OWJkMzcyYjNkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJBdWRpdEFnZW50LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2VyQXVkaXRBZ2Vu
dC5oCkBAIC0zNywxMCArMzcsMTAgQEAgY2xhc3MgV29ya2VyQXVkaXRBZ2VudCBmaW5hbCA6IHB1
YmxpYyBJbnNwZWN0b3I6Okluc3BlY3RvckF1ZGl0QWdlbnQgewogICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOwogcHVibGljOgogICAgIFdvcmtlckF1ZGl0QWdlbnQoV29ya2VyQWdlbnRDb250
ZXh0Jik7Ci0gICAgfldvcmtlckF1ZGl0QWdlbnQoKSBvdmVycmlkZTsKKyAgICB+V29ya2VyQXVk
aXRBZ2VudCgpOwogCiBwcml2YXRlOgotICAgIEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHQgaW5q
ZWN0ZWRTY3JpcHRGb3JFdmFsKEluc3BlY3Rvcjo6RXJyb3JTdHJpbmcmLCBjb25zdCBpbnQqIGV4
ZWN1dGlvbkNvbnRleHRJZCkgb3ZlcnJpZGU7CisgICAgSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlw
dCBpbmplY3RlZFNjcmlwdEZvckV2YWwoSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmcm
LCBPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0
SWQ+JiYpOwogCiAgICAgV29ya2VyR2xvYmFsU2NvcGUmIG1fd29ya2VyR2xvYmFsU2NvcGU7CiB9
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29y
a2VyQ29uc29sZUFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtl
ci9Xb3JrZXJDb25zb2xlQWdlbnQuaAppbmRleCBiN2I1NWQwMDY1OTBlZmIwODNmZWJiOTRlNDNi
NDEyZDYzY2VhZmQwLi41NzE1OTkxMjQ3Y2FmYjlkNjdlZjMzMTcxYWRmZDFjOTZjN2U0ODI2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJD
b25zb2xlQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtl
ci9Xb3JrZXJDb25zb2xlQWdlbnQuaApAQCAtMzUsNyArMzUsNyBAQCBjbGFzcyBXb3JrZXJDb25z
b2xlQWdlbnQgZmluYWwgOiBwdWJsaWMgV2ViQ29uc29sZUFnZW50IHsKICAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBXb3JrZXJDb25zb2xlQWdlbnQoV29ya2VyQWdl
bnRDb250ZXh0Jik7Ci0gICAgfldvcmtlckNvbnNvbGVBZ2VudCgpIG92ZXJyaWRlOworICAgIH5X
b3JrZXJDb25zb2xlQWdlbnQoKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlckRPTURl
YnVnZ2VyQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93b3JrZXIv
V29ya2VyRE9NRGVidWdnZXJBZ2VudC5jcHAKaW5kZXggYmQ1ZDhhODM0ZWFlODYzMzBmY2I5NzJj
NTkyZDVmNzBhN2U3MzA0Yy4uOTIyNzQzNTBjNjM3MTQ2MDUxZDc0OTljOWJmYjc0NjA3MDMyMjEx
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29y
a2VyRE9NRGVidWdnZXJBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Fn
ZW50cy93b3JrZXIvV29ya2VyRE9NRGVidWdnZXJBZ2VudC5jcHAKQEAgLTM3LDE5ICszNywyMCBA
QCBXb3JrZXJET01EZWJ1Z2dlckFnZW50OjpXb3JrZXJET01EZWJ1Z2dlckFnZW50KFdvcmtlckFn
ZW50Q29udGV4dCYgY29udGV4dCwgSW5zcAogCiBXb3JrZXJET01EZWJ1Z2dlckFnZW50Ojp+V29y
a2VyRE9NRGVidWdnZXJBZ2VudCgpID0gZGVmYXVsdDsKIAotdm9pZCBXb3JrZXJET01EZWJ1Z2dl
ckFnZW50OjpzZXRET01CcmVha3BvaW50KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IC8q
IG5vZGVJZCAqLywgY29uc3QgU3RyaW5nJiAvKiB0eXBlU3RyaW5nICovLCBjb25zdCBKU09OOjpP
YmplY3QqIC8qIG9wdGlvbnNQYXlsb2FkICovKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9p
ZD4gV29ya2VyRE9NRGVidWdnZXJBZ2VudDo6c2V0RE9NQnJlYWtwb2ludChQcm90b2NvbDo6RE9N
OjpOb2RlSWQsIFByb3RvY29sOjpET01EZWJ1Z2dlcjo6RE9NQnJlYWtwb2ludFR5cGUsIFJlZlB0
cjxKU09OOjpPYmplY3Q+JiYgLyogb3B0aW9ucyAqLykKIHsKLSAgICBlcnJvclN0cmluZyA9ICJO
b3Qgc3VwcG9ydGVkIl9zOworICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTm90IHN1cHBvcnRl
ZCJfcyk7CiB9CiAKLXZvaWQgV29ya2VyRE9NRGVidWdnZXJBZ2VudDo6cmVtb3ZlRE9NQnJlYWtw
b2ludChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCAvKiBub2RlSWQgKi8sIGNvbnN0IFN0
cmluZyYgLyogdHlwZVN0cmluZyAqLykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IFdv
cmtlckRPTURlYnVnZ2VyQWdlbnQ6OnJlbW92ZURPTUJyZWFrcG9pbnQoUHJvdG9jb2w6OkRPTTo6
Tm9kZUlkLCBQcm90b2NvbDo6RE9NRGVidWdnZXI6OkRPTUJyZWFrcG9pbnRUeXBlKQogewotICAg
IGVycm9yU3RyaW5nID0gIk5vdCBzdXBwb3J0ZWQiX3M7CisgICAgcmV0dXJuIG1ha2VVbmV4cGVj
dGVkKCJOb3Qgc3VwcG9ydGVkIl9zKTsKIH0KIAotdm9pZCBXb3JrZXJET01EZWJ1Z2dlckFnZW50
OjpzZXRBbmltYXRpb25GcmFtZUJyZWFrcG9pbnQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBS
ZWZQdHI8SlNDOjpCcmVha3BvaW50PiYmKQorYm9vbCBXb3JrZXJET01EZWJ1Z2dlckFnZW50Ojpz
ZXRBbmltYXRpb25GcmFtZUJyZWFrcG9pbnQoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0
cmluZywgUmVmUHRyPEpTQzo6QnJlYWtwb2ludD4mJikKIHsKICAgICBlcnJvclN0cmluZyA9ICJO
b3Qgc3VwcG9ydGVkIl9zOworICAgIHJldHVybiBmYWxzZTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93b3Jr
ZXIvV29ya2VyRE9NRGVidWdnZXJBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Fn
ZW50cy93b3JrZXIvV29ya2VyRE9NRGVidWdnZXJBZ2VudC5oCmluZGV4IDg2ZWI5M2Y1ZTE5NzU1
MWJiZDIwOTY5NjU3OWM3MDg5NGQ1OGMyMWMuLjU2ZjVhMDkwYTMzMDg2MDFkYmRiYTljNGYyYjRk
M2Y3YzExMzNkMTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMv
d29ya2VyL1dvcmtlckRPTURlYnVnZ2VyQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJET01EZWJ1Z2dlckFnZW50LmgKQEAgLTMxLDE5ICsz
MSwxNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3Ry
aW5nOwotCiBjbGFzcyBXb3JrZXJET01EZWJ1Z2dlckFnZW50IGZpbmFsIDogcHVibGljIEluc3Bl
Y3RvckRPTURlYnVnZ2VyQWdlbnQgewogcHVibGljOgogICAgIFdvcmtlckRPTURlYnVnZ2VyQWdl
bnQoV29ya2VyQWdlbnRDb250ZXh0JiwgSW5zcGVjdG9yOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50
Kik7Ci0gICAgfldvcmtlckRPTURlYnVnZ2VyQWdlbnQoKSBvdmVycmlkZTsKKyAgICB+V29ya2Vy
RE9NRGVidWdnZXJBZ2VudCgpOwogCiAgICAgLy8gRE9NRGVidWdnZXJCYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXIKLSAgICB2b2lkIHNldERPTUJyZWFrcG9pbnQoRXJyb3JTdHJpbmcmLCBpbnQgbm9k
ZUlkLCBjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IEpTT046Ok9iamVjdCogb3B0aW9ucykgb3Zl
cnJpZGU7Ci0gICAgdm9pZCByZW1vdmVET01CcmVha3BvaW50KEVycm9yU3RyaW5nJiwgaW50IG5v
ZGVJZCwgY29uc3QgU3RyaW5nJiB0eXBlKSBvdmVycmlkZTsKKyAgICBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHNldERPTUJyZWFrcG9pbnQoSW5zcGVjdG9yOjpQcm90
b2NvbDo6RE9NOjpOb2RlSWQsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpET01C
cmVha3BvaW50VHlwZSwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBvcHRpb25zKTsKKyAgICBJbnNw
ZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHJlbW92ZURPTUJyZWFrcG9pbnQo
SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRP
TURlYnVnZ2VyOjpET01CcmVha3BvaW50VHlwZSk7CiAKIHByaXZhdGU6Ci0gICAgdm9pZCBzZXRB
bmltYXRpb25GcmFtZUJyZWFrcG9pbnQoRXJyb3JTdHJpbmcmLCBSZWZQdHI8SlNDOjpCcmVha3Bv
aW50PiYmKSBvdmVycmlkZTsKKyAgICBib29sIHNldEFuaW1hdGlvbkZyYW1lQnJlYWtwb2ludChJ
bnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZyYsIFJlZlB0cjxKU0M6OkJyZWFrcG9pbnQ+
JiYpOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2VyRGVidWdnZXJBZ2VudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJEZWJ1Z2dlckFnZW50
LmNwcAppbmRleCBjYmM2MjA1MjIxOTRmMjlhOTQxODdhOGEyN2FjMTJiNDE5ZDM1OWUwLi43YWE3
MmI2YTRjNjRjYTlmNjc4MTUwZDA2YTMyZDAyOTRjNTA4ODI1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJEZWJ1Z2dlckFnZW50LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJEZWJ1Z2dl
ckFnZW50LmNwcApAQCAtNTMsNyArNTMsNyBAQCB2b2lkIFdvcmtlckRlYnVnZ2VyQWdlbnQ6OmJy
ZWFrcG9pbnRBY3Rpb25Mb2coSlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9iYWxPYmplYwogICAg
IG1fd29ya2VyR2xvYmFsU2NvcGUuYWRkQ29uc29sZU1lc3NhZ2UobWFrZVVuaXF1ZTxDb25zb2xl
TWVzc2FnZT4oTWVzc2FnZVNvdXJjZTo6SlMsIE1lc3NhZ2VUeXBlOjpMb2csIE1lc3NhZ2VMZXZl
bDo6TG9nLCBtZXNzYWdlLCBjcmVhdGVTY3JpcHRDYWxsU3RhY2sobGV4aWNhbEdsb2JhbE9iamVj
dCkpKTsKIH0KIAotSW5qZWN0ZWRTY3JpcHQgV29ya2VyRGVidWdnZXJBZ2VudDo6aW5qZWN0ZWRT
Y3JpcHRGb3JFdmFsKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgaW50KiBleGVjdXRp
b25Db250ZXh0SWQpCitJbmplY3RlZFNjcmlwdCBXb3JrZXJEZWJ1Z2dlckFnZW50OjppbmplY3Rl
ZFNjcmlwdEZvckV2YWwoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgT3B0aW9u
YWw8UHJvdG9jb2w6OlJ1bnRpbWU6OkV4ZWN1dGlvbkNvbnRleHRJZD4mJiBleGVjdXRpb25Db250
ZXh0SWQpCiB7CiAgICAgaWYgKGV4ZWN1dGlvbkNvbnRleHRJZCkgewogICAgICAgICBlcnJvclN0
cmluZyA9ICJleGVjdXRpb25Db250ZXh0SWQgaXMgbm90IHN1cHBvcnRlZCBmb3Igd29ya2VycyBh
cyB0aGVyZSBpcyBvbmx5IG9uZSBleGVjdXRpb24gY29udGV4dCJfczsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlckRlYnVnZ2VyQWdlbnQu
aCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlckRlYnVnZ2Vy
QWdlbnQuaAppbmRleCA0YWMwN2Q2Y2MzN2MyMjgwMzMzOGViODBkMzQyMTk1MjFiOTZmM2RlLi43
Y2E2NGU0MDEzYTU0YjQxOGQ1M2U0NzQ4MDJlNzMyYmYxOTA4Yzk3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJEZWJ1Z2dlckFnZW50LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2VyRGVidWdn
ZXJBZ2VudC5oCkBAIC0zNiwxNyArMzYsMTcgQEAgY2xhc3MgV29ya2VyRGVidWdnZXJBZ2VudCBm
aW5hbCA6IHB1YmxpYyBXZWJEZWJ1Z2dlckFnZW50IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKIHB1YmxpYzoKICAgICBXb3JrZXJEZWJ1Z2dlckFnZW50KFdvcmtlckFnZW50Q29udGV4
dCYpOwotICAgIH5Xb3JrZXJEZWJ1Z2dlckFnZW50KCkgb3ZlcnJpZGU7CisgICAgfldvcmtlckRl
YnVnZ2VyQWdlbnQoKTsKIAogICAgIC8vIEpTQzo6RGVidWdnZXI6Ok9ic2VydmVyCi0gICAgdm9p
ZCBicmVha3BvaW50QWN0aW9uTG9nKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBjb25zdCBTdHJpbmcm
IGRhdGEpIGZpbmFsOworICAgIHZvaWQgYnJlYWtwb2ludEFjdGlvbkxvZyhKU0M6OkpTR2xvYmFs
T2JqZWN0KiwgY29uc3QgU3RyaW5nJiBkYXRhKTsKIAogcHJpdmF0ZToKICAgICAvLyBXZSBkb24n
dCBuZWVkIHRvIG11dGUgY29uc29sZSBmb3Igd29ya2Vycy4KLSAgICB2b2lkIG11dGVDb25zb2xl
KCkgb3ZlcnJpZGUgeyB9Ci0gICAgdm9pZCB1bm11dGVDb25zb2xlKCkgb3ZlcnJpZGUgeyB9Cisg
ICAgdm9pZCBtdXRlQ29uc29sZSgpIHsgfQorICAgIHZvaWQgdW5tdXRlQ29uc29sZSgpIHsgfQog
Ci0gICAgSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdEZvckV2YWwoRXJy
b3JTdHJpbmcmLCBjb25zdCBpbnQqIGV4ZWN1dGlvbkNvbnRleHRJZCkgb3ZlcnJpZGU7CisgICAg
SW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdEZvckV2YWwoSW5zcGVjdG9y
OjpQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpS
dW50aW1lOjpFeGVjdXRpb25Db250ZXh0SWQ+JiYpOwogCiAgICAgV29ya2VyR2xvYmFsU2NvcGUm
IG1fd29ya2VyR2xvYmFsU2NvcGU7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2VyTmV0d29ya0FnZW50LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlck5ldHdvcmtBZ2VudC5jcHAKaW5kZXgg
NTNmYTg4M2FkOTcxODg2ODRjYjk0YzA5MGU3OTYxNjkwODFiNmI0ZC4uMmIxNjhlNmQzYTdhMWJl
MTQ2ODM2OWMzMGNjMmViNmM5YjM5ZDI3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2VyTmV0d29ya0FnZW50LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJOZXR3b3JrQWdlbnQuY3BwCkBA
IC00MywxMiArNDMsMTIgQEAgV29ya2VyTmV0d29ya0FnZW50OjpXb3JrZXJOZXR3b3JrQWdlbnQo
V29ya2VyQWdlbnRDb250ZXh0JiBjb250ZXh0KQogCiBXb3JrZXJOZXR3b3JrQWdlbnQ6On5Xb3Jr
ZXJOZXR3b3JrQWdlbnQoKSA9IGRlZmF1bHQ7CiAKLVN0cmluZyBXb3JrZXJOZXR3b3JrQWdlbnQ6
OmxvYWRlcklkZW50aWZpZXIoRG9jdW1lbnRMb2FkZXIqKQorUHJvdG9jb2w6Ok5ldHdvcms6Okxv
YWRlcklkIFdvcmtlck5ldHdvcmtBZ2VudDo6bG9hZGVySWRlbnRpZmllcihEb2N1bWVudExvYWRl
ciopCiB7CiAgICAgcmV0dXJuIHsgfTsKIH0KIAotU3RyaW5nIFdvcmtlck5ldHdvcmtBZ2VudDo6
ZnJhbWVJZGVudGlmaWVyKERvY3VtZW50TG9hZGVyKikKK1Byb3RvY29sOjpOZXR3b3JrOjpGcmFt
ZUlkIFdvcmtlck5ldHdvcmtBZ2VudDo6ZnJhbWVJZGVudGlmaWVyKERvY3VtZW50TG9hZGVyKikK
IHsKICAgICByZXR1cm4geyB9OwogfQpAQCAtNTksMTIgKzU5LDEyIEBAIFZlY3RvcjxXZWJTb2Nr
ZXQqPiBXb3JrZXJOZXR3b3JrQWdlbnQ6OmFjdGl2ZVdlYlNvY2tldHMoY29uc3QgTG9ja0hvbGRl
ciYpCiAgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBXb3JrZXJOZXR3b3JrQWdlbnQ6OnNldFJl
c291cmNlQ2FjaGluZ0Rpc2FibGVkKGJvb2wgZGlzYWJsZWQpCit2b2lkIFdvcmtlck5ldHdvcmtB
Z2VudDo6c2V0UmVzb3VyY2VDYWNoaW5nRGlzYWJsZWRJbnRlcmFsKGJvb2wgZGlzYWJsZWQpCiB7
CiAgICAgbV93b3JrZXJHbG9iYWxTY29wZS50aHJlYWQoKS53b3JrZXJEZWJ1Z2dlclByb3h5KCku
c2V0UmVzb3VyY2VDYWNoaW5nRGlzYWJsZWRCeVdlYkluc3BlY3RvcihkaXNhYmxlZCk7CiB9CiAK
LVNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIFdvcmtlck5ldHdvcmtBZ2VudDo6c2NyaXB0RXhlY3V0
aW9uQ29udGV4dChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYpCitTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBXb3JrZXJOZXR3b3JrQWdlbnQ6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoUHJvdG9j
b2w6OkVycm9yU3RyaW5nJiwgY29uc3QgUHJvdG9jb2w6Ok5ldHdvcms6OkZyYW1lSWQmKQogewog
ICAgIHJldHVybiAmbV93b3JrZXJHbG9iYWxTY29wZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlck5ldHdvcmtBZ2VudC5oIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2VyTmV0d29ya0FnZW50LmgK
aW5kZXggODk5ZjBhNTZmZDFiN2RhOTQzYTQ1NTNiOGM5NGNmM2M3YmZiMGI5NC4uOTFiMDViOWMy
MzBlYzdjZDM1YTQ2Y2U1N2M1NjYzOTI3MjIyZGZmMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2VyTmV0d29ya0FnZW50LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2VyTmV0d29ya0FnZW50LmgK
QEAgLTM0LDE1ICszNCwxNSBAQCBjbGFzcyBXb3JrZXJOZXR3b3JrQWdlbnQgZmluYWwgOiBwdWJs
aWMgSW5zcGVjdG9yTmV0d29ya0FnZW50IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
IHB1YmxpYzoKICAgICBXb3JrZXJOZXR3b3JrQWdlbnQoV29ya2VyQWdlbnRDb250ZXh0Jik7Ci0g
ICAgfldvcmtlck5ldHdvcmtBZ2VudCgpIG92ZXJyaWRlOworICAgIH5Xb3JrZXJOZXR3b3JrQWdl
bnQoKTsKIAogcHJpdmF0ZToKLSAgICBTdHJpbmcgbG9hZGVySWRlbnRpZmllcihEb2N1bWVudExv
YWRlciopIG92ZXJyaWRlOwotICAgIFN0cmluZyBmcmFtZUlkZW50aWZpZXIoRG9jdW1lbnRMb2Fk
ZXIqKSBvdmVycmlkZTsKLSAgICBWZWN0b3I8V2ViU29ja2V0Kj4gYWN0aXZlV2ViU29ja2V0cyhj
b25zdCBMb2NrSG9sZGVyJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRSZXNvdXJjZUNhY2hpbmdE
aXNhYmxlZChib29sKSBvdmVycmlkZTsKLSAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3Jp
cHRFeGVjdXRpb25Db250ZXh0KEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBmcmFtZUlkKSBv
dmVycmlkZTsKLSAgICBib29sIHNob3VsZEZvcmNlQnVmZmVyaW5nTmV0d29ya1Jlc291cmNlRGF0
YSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKyAgICBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpOZXR3b3JrOjpMb2FkZXJJZCBsb2FkZXJJZGVudGlmaWVyKERvY3VtZW50TG9hZGVyKik7
CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6RnJhbWVJZCBmcmFtZUlkZW50aWZp
ZXIoRG9jdW1lbnRMb2FkZXIqKTsKKyAgICBWZWN0b3I8V2ViU29ja2V0Kj4gYWN0aXZlV2ViU29j
a2V0cyhjb25zdCBMb2NrSG9sZGVyJik7CisgICAgdm9pZCBzZXRSZXNvdXJjZUNhY2hpbmdEaXNh
YmxlZEludGVyYWwoYm9vbCk7CisgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dChJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZyYsIGNvbnN0IElu
c3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OkZyYW1lSWQmKTsKKyAgICBib29sIHNob3VsZEZv
cmNlQnVmZmVyaW5nTmV0d29ya1Jlc291cmNlRGF0YSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0K
IAogICAgIFdvcmtlckdsb2JhbFNjb3BlJiBtX3dvcmtlckdsb2JhbFNjb3BlOwogfTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlclJ1bnRp
bWVBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3Jr
ZXJSdW50aW1lQWdlbnQuY3BwCmluZGV4IGQ5MjMwODFjNTFlM2JkMjc1MjFhYTI0MWM3Y2FjOGZi
NDBkM2UyODMuLmZmZmQzY2VhMjE1MzU5ZmU2ZjBlZDFlZGQ3NzJkMTZiNzA5NTFkZWIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlclJ1bnRp
bWVBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93b3JrZXIv
V29ya2VyUnVudGltZUFnZW50LmNwcApAQCAtNTEsNyArNTEsNyBAQCBXb3JrZXJSdW50aW1lQWdl
bnQ6OldvcmtlclJ1bnRpbWVBZ2VudChXb3JrZXJBZ2VudENvbnRleHQmIGNvbnRleHQpCiAKIFdv
cmtlclJ1bnRpbWVBZ2VudDo6fldvcmtlclJ1bnRpbWVBZ2VudCgpID0gZGVmYXVsdDsKIAotSW5q
ZWN0ZWRTY3JpcHQgV29ya2VyUnVudGltZUFnZW50OjppbmplY3RlZFNjcmlwdEZvckV2YWwoRXJy
b3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBpbnQqIGV4ZWN1dGlvbkNvbnRleHRJZCkKK0lu
amVjdGVkU2NyaXB0IFdvcmtlclJ1bnRpbWVBZ2VudDo6aW5qZWN0ZWRTY3JpcHRGb3JFdmFsKFBy
b3RvY29sOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIE9wdGlvbmFsPFByb3RvY29sOjpSdW50
aW1lOjpFeGVjdXRpb25Db250ZXh0SWQ+JiYgZXhlY3V0aW9uQ29udGV4dElkKQogewogICAgIGlm
IChleGVjdXRpb25Db250ZXh0SWQpIHsKICAgICAgICAgZXJyb3JTdHJpbmcgPSAiZXhlY3V0aW9u
Q29udGV4dElkIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHdvcmtlcnMgYXMgdGhlcmUgaXMgb25seSBv
bmUgZXhlY3V0aW9uIGNvbnRleHQiX3M7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJSdW50aW1lQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlclJ1bnRpbWVBZ2VudC5oCmluZGV4IDUzMDhl
YjQzODhkNGQxMDUyZWM3NDU4NTA0N2ExZTg4ZTdkNDNiNGIuLjZiOTk4ZjRkMTczMTg1MWY5OWI2
N2VlMTVhNWQyMDAxNTg3ZjRkMDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9hZ2VudHMvd29ya2VyL1dvcmtlclJ1bnRpbWVBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlclJ1bnRpbWVBZ2VudC5oCkBAIC0zNywyMSAr
MzcsMjAgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgV29ya2VyR2xvYmFsU2NvcGU7
Ci10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKIAogY2xhc3MgV29ya2VyUnVudGltZUFnZW50
IGZpbmFsIDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yUnVudGltZUFnZW50IHsKICAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShXb3JrZXJSdW50aW1lQWdlbnQpOwogICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIFdvcmtlclJ1bnRpbWVBZ2VudChXb3JrZXJBZ2Vu
dENvbnRleHQmKTsKLSAgICB+V29ya2VyUnVudGltZUFnZW50KCkgb3ZlcnJpZGU7CisgICAgfldv
cmtlclJ1bnRpbWVBZ2VudCgpOwogCiBwcml2YXRlOgotICAgIEluc3BlY3Rvcjo6SW5qZWN0ZWRT
Y3JpcHQgaW5qZWN0ZWRTY3JpcHRGb3JFdmFsKEVycm9yU3RyaW5nJiwgY29uc3QgaW50KiBleGVj
dXRpb25Db250ZXh0SWQpIG92ZXJyaWRlOworICAgIEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHQg
aW5qZWN0ZWRTY3JpcHRGb3JFdmFsKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nJiwg
T3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RXhlY3V0aW9uQ29udGV4dElk
PiYmKTsKIAogICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gbXV0ZSBjb25zb2xlIGZvciB3b3JrZXJz
LgotICAgIHZvaWQgbXV0ZUNvbnNvbGUoKSBvdmVycmlkZSB7IH0KLSAgICB2b2lkIHVubXV0ZUNv
bnNvbGUoKSBvdmVycmlkZSB7IH0KKyAgICB2b2lkIG11dGVDb25zb2xlKCkgeyB9CisgICAgdm9p
ZCB1bm11dGVDb25zb2xlKCkgeyB9CiAKICAgICBSZWZQdHI8SW5zcGVjdG9yOjpSdW50aW1lQmFj
a2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7CiAgICAgV29ya2VyR2xvYmFsU2Nv
cGUmIG1fd29ya2VyR2xvYmFsU2NvcGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1VdGlsaXRpZXMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNVXRpbGl0aWVzLmNwcAppbmRleCA1ZTg4NWFkNmU1ODY5
MDljMGVkMjE1YmVlNWJlOGU4ZWY3YzI3YWY4Li41YmViY2I0OWFhOGViOWEyYmIwNzExZWFlMDgw
ZjM3N2UyMmI5ODM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0
ZWRtZWRpYS9DRE1VdGlsaXRpZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Vu
Y3J5cHRlZG1lZGlhL0NETVV0aWxpdGllcy5jcHAKQEAgLTQ3LDEyICs0NywxMiBAQCBSZWZQdHI8
SlNPTjo6T2JqZWN0PiBwYXJzZUpTT05PYmplY3QoY29uc3QgU2hhcmVkQnVmZmVyJiBidWZmZXIp
CiAKICAgICAvLyBQYXJzZSB0aGUgYnVmZmVyIGNvbnRlbnRzIGFzIEpTT04sIHJldHVybmluZyB0
aGUgcm9vdCBvYmplY3QgKGlmIGFueSkuCiAgICAgU3RyaW5nIGpzb24geyBidWZmZXIuZGF0YSgp
LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc2l6ZSkgfTsKLSAgICBSZWZQdHI8SlNPTjo6VmFsdWU+
IHZhbHVlOwotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG9iamVjdDsKLSAgICBpZiAoIUpTT046
OlZhbHVlOjpwYXJzZUpTT04oanNvbiwgdmFsdWUpIHx8ICF2YWx1ZS0+YXNPYmplY3Qob2JqZWN0
KSkKKworICAgIGF1dG8gdmFsdWUgPSBKU09OOjpWYWx1ZTo6cGFyc2VKU09OKGpzb24pOworICAg
IGlmICghdmFsdWUpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJuIG9iamVj
dDsKKyAgICByZXR1cm4gdmFsdWUtPmFzT2JqZWN0KCk7CiB9CiAKIH07CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9jbGVhcmtleS9DRE1DbGVhcktl
eS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9jbGVhcmtleS9D
RE1DbGVhcktleS5jcHAKaW5kZXggZTZjYzIyZDkwYzdhYzM5YjU2ZmQ4MmExNmIwNzY1ZWMxZTFj
ZmE4Ny4uNWExODJmZGY0NTI2NDJhYThlZjQ2MGI3NzRhYzllN2I0MGMyZWM1MiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkvQ0RNQ2xl
YXJLZXkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL2Ns
ZWFya2V5L0NETUNsZWFyS2V5LmNwcApAQCAtNTUsMjMgKzU1LDI3IEBAIHN0YXRpYyBPcHRpb25h
bDxWZWN0b3I8UmVmUHRyPEtleUhhbmRsZT4+PiBwYXJzZUxpY2Vuc2VGb3JtYXQoY29uc3QgSlNP
Tjo6T2JqZWN0CiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICAvLyBSZXRyaWV2
ZSB0aGUga2V5cyBhcnJheS4KLSAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IGtleXNBcnJheTsKLSAg
ICBpZiAoIWl0LT52YWx1ZS0+YXNBcnJheShrZXlzQXJyYXkpKQorICAgIGF1dG8ga2V5c0FycmF5
ID0gaXQtPnZhbHVlLT5hc0FycmF5KCk7CisgICAgaWYgKCFrZXlzQXJyYXkpCiAgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICBWZWN0b3I8UmVmUHRyPEtleUhhbmRsZT4+IGRlY29k
ZWRLZXlzOwogICAgIGJvb2wgdmFsaWRGb3JtYXQgPSBzdGQ6OmFsbF9vZihrZXlzQXJyYXktPmJl
Z2luKCksIGtleXNBcnJheS0+ZW5kKCksCiAgICAgICAgIFsmZGVjb2RlZEtleXNdIChjb25zdCBh
dXRvJiB2YWx1ZSkgewotICAgICAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4ga2V5T2JqZWN0
OwotICAgICAgICAgICAgaWYgKCF2YWx1ZS0+YXNPYmplY3Qoa2V5T2JqZWN0KSkKKyAgICAgICAg
ICAgIGF1dG8ga2V5T2JqZWN0ID0gdmFsdWUtPmFzT2JqZWN0KCk7CisgICAgICAgICAgICBpZiAo
IWtleU9iamVjdCkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgICAg
IFN0cmluZyBrZXlUeXBlOwotICAgICAgICAgICAgaWYgKCFrZXlPYmplY3QtPmdldFN0cmluZygi
a3R5Iiwga2V5VHlwZSkgfHwgIWVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGtleVR5cGUs
ICJvY3QiKSkKKyAgICAgICAgICAgIGF1dG8ga2V5VHlwZSA9IGtleU9iamVjdC0+Z2V0U3RyaW5n
KCJrdHkiKTsKKyAgICAgICAgICAgIGlmICgha2V5VHlwZSB8fCAhZXF1YWxMZXR0ZXJzSWdub3Jp
bmdBU0NJSUNhc2Uoa2V5VHlwZSwgIm9jdCIpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgICAgICAgICAgU3RyaW5nIGtleUlELCBrZXlWYWx1ZTsKLSAgICAgICAgICAgIGlm
ICgha2V5T2JqZWN0LT5nZXRTdHJpbmcoImtpZCIsIGtleUlEKSB8fCAha2V5T2JqZWN0LT5nZXRT
dHJpbmcoImsiLCBrZXlWYWx1ZSkpCisgICAgICAgICAgICBhdXRvIGtleUlEID0ga2V5T2JqZWN0
LT5nZXRTdHJpbmcoImtpZCIpOworICAgICAgICAgICAgaWYgKCFrZXlJRCkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgIGF1dG8ga2V5VmFsdWUgPSBrZXlPYmpl
Y3QtPmdldFN0cmluZygiayIpOworICAgICAgICAgICAgaWYgKCFrZXlWYWx1ZSkKICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgICAgIEtleUlEVHlwZSBrZXlJRERhdGE7
CkBAIC05Niw4ICsxMDAsOCBAQCBzdGF0aWMgYm9vbCBwYXJzZUxpY2Vuc2VSZWxlYXNlQWNrbm93
bGVkZ2VtZW50Rm9ybWF0KGNvbnN0IEpTT046Ok9iamVjdCYgcm9vdCkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCiAgICAgLy8gUmV0cmlldmUgdGhlIGtpZHMgYXJyYXkuCi0gICAgUmVmUHRyPEpT
T046OkFycmF5PiBraWRzQXJyYXk7Ci0gICAgaWYgKCFpdC0+dmFsdWUtPmFzQXJyYXkoa2lkc0Fy
cmF5KSkKKyAgICBhdXRvIGtpZHNBcnJheSA9IGl0LT52YWx1ZS0+YXNBcnJheSgpOworICAgIGlm
ICgha2lkc0FycmF5KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBGSVhNRTogUmV0
dXJuIHRoZSBrZXkgSURzIGFuZCB2YWxpZGF0ZSB0aGVtLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0NETUZhaXJQbGF5U3RyZWFtaW5n
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9DRE1G
YWlyUGxheVN0cmVhbWluZy5jcHAKaW5kZXggOGFjNDhlYzVkYzY5YjMxNDk1N2JhNDMzZjk3MTAx
ZWEyNzc2OTY0NC4uNGY0MmM0OTNjYzM1NzBkZGM2YWYwOGRlMzkwNWQwY2M4NDlkOWE3MCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0NE
TUZhaXJQbGF5U3RyZWFtaW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9hdmZvdW5kYXRpb24vQ0RNRmFpclBsYXlTdHJlYW1pbmcuY3BwCkBAIC05MiwyNCArOTIs
MjQgQEAgc3RhdGljIFZlY3RvcjxSZWY8U2hhcmVkQnVmZmVyPj4gZXh0cmFjdFNpbmZEYXRhKGNv
bnN0IFNoYXJlZEJ1ZmZlciYgYnVmZmVyKQogICAgICAgICByZXR1cm4geyB9OwogICAgIFN0cmlu
ZyBqc29uIHsgYnVmZmVyLmRhdGEoKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGJ1ZmZlci5zaXpl
KCkpIH07CiAKLSAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHZhbHVlOwotICAgIGlmICghSlNPTjo6
VmFsdWU6OnBhcnNlSlNPTihqc29uLCB2YWx1ZSkpCisgICAgYXV0byB2YWx1ZSA9IEpTT046OlZh
bHVlOjpwYXJzZUpTT04oanNvbik7CisgICAgaWYgKCF2YWx1ZSkKICAgICAgICAgcmV0dXJuIHsg
fTsKIAotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG9iamVjdDsKLSAgICBpZiAoIXZhbHVlLT5h
c09iamVjdChvYmplY3QpKQorICAgIGF1dG8gb2JqZWN0ID0gdmFsdWUtPmFzT2JqZWN0KCk7Cisg
ICAgaWYgKCFvYmplY3QpCiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBSZWZQdHI8SlNPTjo6
QXJyYXk+IHNpbmZBcnJheTsKLSAgICBpZiAoIW9iamVjdC0+Z2V0QXJyYXkoQ0RNUHJpdmF0ZUZh
aXJQbGF5U3RyZWFtaW5nOjpzaW5mTmFtZSgpLCBzaW5mQXJyYXkpKQorICAgIGF1dG8gc2luZkFy
cmF5ID0gb2JqZWN0LT5nZXRBcnJheShDRE1Qcml2YXRlRmFpclBsYXlTdHJlYW1pbmc6OnNpbmZO
YW1lKCkpOworICAgIGlmICghc2luZkFycmF5KQogICAgICAgICByZXR1cm4geyB9OwogCiAgICAg
VmVjdG9yPFJlZjxTaGFyZWRCdWZmZXI+PiBzaW5mczsKICAgICBzaW5mcy5yZXNlcnZlSW5pdGlh
bENhcGFjaXR5KHNpbmZBcnJheS0+bGVuZ3RoKCkpOwogCiAgICAgZm9yIChhdXRvJiB2YWx1ZSA6
ICpzaW5mQXJyYXkpIHsKLSAgICAgICAgU3RyaW5nIGtleUlEOwotICAgICAgICBpZiAoIXZhbHVl
LT5hc1N0cmluZyhrZXlJRCkpCisgICAgICAgIGF1dG8ga2V5SUQgPSB2YWx1ZS0+YXNTdHJpbmco
KTsKKyAgICAgICAgaWYgKCFrZXlJRCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAg
IFZlY3RvcjxjaGFyPiBzaW5mRGF0YTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NETUluc3RhbmNlRmFpclBsYXlTdHJlYW1p
bmdBVkZPYmpDLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0
aW9uL29iamMvQ0RNSW5zdGFuY2VGYWlyUGxheVN0cmVhbWluZ0FWRk9iakMubW0KaW5kZXggYzA1
MTlhOGMyMjE5MzBmNWM2MWEwYTgwZTllYzNhMWU5OWM4ZjFkNC4uMWM0OWY4ODc1M2E5NGM5MDdi
ZGY2ZGIwMTlmMjE5NWI4NDdiNDgzZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvQ0RNSW5zdGFuY2VGYWlyUGxheVN0cmVhbWlu
Z0FWRk9iakMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3Vu
ZGF0aW9uL29iamMvQ0RNSW5zdGFuY2VGYWlyUGxheVN0cmVhbWluZ0FWRk9iakMubW0KQEAgLTMx
MiwxMSArMzEyLDggQEAgc3RhdGljIFJlZlB0cjxKU09OOjpWYWx1ZT4gcGFyc2VKU09OVmFsdWUo
Y29uc3QgU2hhcmVkQnVmZmVyJiBidWZmZXIpCiAKICAgICAvLyBQYXJzZSB0aGUgYnVmZmVyIGNv
bnRlbnRzIGFzIEpTT04sIHJldHVybmluZyB0aGUgcm9vdCBvYmplY3QgKGlmIGFueSkuCiAgICAg
U3RyaW5nIGpzb24geyBidWZmZXIuZGF0YSgpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc2l6ZSkg
fTsKLSAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHZhbHVlOwotICAgIGlmICghSlNPTjo6VmFsdWU6
OnBhcnNlSlNPTihqc29uLCB2YWx1ZSkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAg
cmV0dXJuIHZhbHVlOworICAgIHJldHVybiBKU09OOjpWYWx1ZTo6cGFyc2VKU09OKGpzb24pOwog
fQogCiBib29sIENETUluc3RhbmNlRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDOjpzdXBwb3J0c1Bl
cnNpc3RhYmxlU3RhdGUoKQpAQCAtODA0LDE5ICs4MDEsMjQgQEAgdm9pZCBDRE1JbnN0YW5jZVNl
c3Npb25GYWlyUGxheVN0cmVhbWluZ0FWRk9iakM6OnVwZGF0ZUxpY2Vuc2UoY29uc3QgU3RyaW5n
JiwgTGkKICAgICAgICAgfSk7CiAKICAgICAgICAgYXV0byByb290ID0gcGFyc2VKU09OVmFsdWUo
cmVzcG9uc2VEYXRhKTsKLSAgICAgICAgUmVmUHRyPEpTT046OkFycmF5PiBhcnJheTsKLSAgICAg
ICAgaWYgKCFyb290IHx8ICFyb290LT5hc0FycmF5KGFycmF5KSkgeworICAgICAgICBpZiAoIXJv
b3QpIHsKICAgICAgICAgICAgIGNhbGxiYWNrKGZhbHNlLCBXVEY6Om51bGxvcHQsIFdURjo6bnVs
bG9wdCwgV1RGOjpudWxsb3B0LCBGYWlsZWQpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CiAKLSAgICAgICAgYXV0byBwYXJzZVJlc3BvbnNlID0gWyZdKFJlZlB0cjxKU09OOjpWYWx1
ZT4mIHZhbHVlKSAtPiBib29sIHsKLSAgICAgICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG9i
amVjdDsKLSAgICAgICAgICAgIGlmICghdmFsdWUtPmFzT2JqZWN0KG9iamVjdCkpCisgICAgICAg
IGF1dG8gYXJyYXkgPSByb290LT5hc0FycmF5KCk7CisgICAgICAgIGlmICghYXJyYXkpIHsKKyAg
ICAgICAgICAgIGNhbGxiYWNrKGZhbHNlLCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCwgV1RG
OjpudWxsb3B0LCBGYWlsZWQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAg
ICAgICAgYXV0byBwYXJzZVJlc3BvbnNlID0gWyZdKFJlZjxKU09OOjpWYWx1ZT4mJiB2YWx1ZSkg
LT4gYm9vbCB7CisgICAgICAgICAgICBhdXRvIG9iamVjdCA9IHZhbHVlLT5hc09iamVjdCgpOwor
ICAgICAgICAgICAgaWYgKCFvYmplY3QpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgICAgICAgICBTdHJpbmcga2V5SURTdHJpbmc7Ci0gICAgICAgICAgICBpZiAoIW9iamVj
dC0+Z2V0U3RyaW5nKCJrZXlJRCIsIGtleUlEU3RyaW5nKSkKKyAgICAgICAgICAgIGF1dG8ga2V5
SURTdHJpbmcgPSBvYmplY3QtPmdldFN0cmluZygia2V5SUQiKTsKKyAgICAgICAgICAgIGlmICgh
a2V5SURTdHJpbmcpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgICAg
ICBWZWN0b3I8dWludDhfdD4ga2V5SURWZWN0b3I7CkBAIC04NDMsMTQgKzg0NSwxNCBAQCB2b2lk
IENETUluc3RhbmNlU2Vzc2lvbkZhaXJQbGF5U3RyZWFtaW5nQVZGT2JqQzo6dXBkYXRlTGljZW5z
ZShjb25zdCBTdHJpbmcmLCBMaQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAg
ICAgICAgICAgaWYgKGhhc0Vycm9yKSB7Ci0gICAgICAgICAgICAgICAgTlNJbnRlZ2VyIGVycm9y
Q29kZTsKLSAgICAgICAgICAgICAgICBpZiAoIWVycm9yRmluZFJlc3VsdHMtPnZhbHVlLT5hc0lu
dGVnZXIoZXJyb3JDb2RlKSkKKyAgICAgICAgICAgICAgICBhdXRvIGVycm9yQ29kZSA9IGVycm9y
RmluZFJlc3VsdHMtPnZhbHVlLT5hc0ludGVnZXIoKTsKKyAgICAgICAgICAgICAgICBpZiAoIWVy
cm9yQ29kZSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAg
ICAgIGF1dG8gZXJyb3IgPSBhZG9wdE5TKFtbTlNFcnJvciBhbGxvY10gaW5pdFdpdGhEb21haW46
QCJvcmcud2Via2l0LmVtZSIgY29kZTplcnJvckNvZGUgdXNlckluZm86bmlsXSk7CisgICAgICAg
ICAgICAgICAgYXV0byBlcnJvciA9IGFkb3B0TlMoW1tOU0Vycm9yIGFsbG9jXSBpbml0V2l0aERv
bWFpbjpAIm9yZy53ZWJraXQuZW1lIiBjb2RlOiplcnJvckNvZGUgdXNlckluZm86bmlsXSk7CiAg
ICAgICAgICAgICAgICAgW3JlcXVlc3QgcHJvY2Vzc0NvbnRlbnRLZXlSZXNwb25zZUVycm9yOmVy
cm9yLmdldCgpXTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoaGFzUGF5bG9hZCkgewotICAgICAg
ICAgICAgICAgIFN0cmluZyBwYXlsb2FkU3RyaW5nOwotICAgICAgICAgICAgICAgIGlmICghcGF5
bG9hZEZpbmRSZXN1bHRzLT52YWx1ZS0+YXNTdHJpbmcocGF5bG9hZFN0cmluZykpCisgICAgICAg
ICAgICAgICAgYXV0byBwYXlsb2FkU3RyaW5nID0gcGF5bG9hZEZpbmRSZXN1bHRzLT52YWx1ZS0+
YXNTdHJpbmcoKTsKKyAgICAgICAgICAgICAgICBpZiAoIXBheWxvYWRTdHJpbmcpCiAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICBWZWN0b3I8dWludDhf
dD4gcGF5bG9hZFZlY3RvcjsKICAgICAgICAgICAgICAgICBpZiAoIWJhc2U2NERlY29kZShwYXls
b2FkU3RyaW5nLCBwYXlsb2FkVmVjdG9yKSkKQEAgLTg2MSw3ICs4NjMsNyBAQCB2b2lkIENETUlu
c3RhbmNlU2Vzc2lvbkZhaXJQbGF5U3RyZWFtaW5nQVZGT2JqQzo6dXBkYXRlTGljZW5zZShjb25z
dCBTdHJpbmcmLCBMaQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH07CiAgICAg
ICAgIGZvciAoYXV0byB2YWx1ZSA6ICphcnJheSkgewotICAgICAgICAgICAgaWYgKCFwYXJzZVJl
c3BvbnNlKHZhbHVlKSkgeworICAgICAgICAgICAgaWYgKCFwYXJzZVJlc3BvbnNlKFdURk1vdmUo
dmFsdWUpKSkgewogICAgICAgICAgICAgICAgIERFQlVHX0xPR19JRl9QT1NTSUJMRShMT0dJREVO
VElGSUVSLCAiJ2NlbmMnIGluaXREYXRhLCBGYWlsZWQsIGNvdWxkIG5vdCBwYXJzZSByZXNwb25z
ZSIpOwogICAgICAgICAgICAgICAgIGNhbGxiYWNrKGZhbHNlLCBXVEY6Om51bGxvcHQsIFdURjo6
bnVsbG9wdCwgV1RGOjpudWxsb3B0LCBGYWlsZWQpOwogICAgICAgICAgICAgICAgIHJldHVybjsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJEcml2ZXIvQ29tbWFuZFJlc3VsdC5jcHAgYi9Tb3VyY2Uv
V2ViRHJpdmVyL0NvbW1hbmRSZXN1bHQuY3BwCmluZGV4IGE3MjA3MDk5MDg5M2RiMTU2ZDdmZDZm
ZTMwN2E1M2YyMGNiMjM1MGEuLjczNGZiMmMzY2M1Y2E0YWJkNDBhN2YzNTAzYWZiYjJiNDVjOTY1
MzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJEcml2ZXIvQ29tbWFuZFJlc3VsdC5jcHAKKysrIGIv
U291cmNlL1dlYkRyaXZlci9Db21tYW5kUmVzdWx0LmNwcApAQCAtNDksMTUgKzQ5LDE2IEBAIENv
bW1hbmRSZXN1bHQ6OkNvbW1hbmRSZXN1bHQoUmVmUHRyPEpTT046OlZhbHVlPiYmIHJlc3VsdCwg
T3B0aW9uYWw8RXJyb3JDb2RlPiBlCiAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJldHVybjsK
IAotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IGVycm9yT2JqZWN0OwotICAgIGlmICghcmVzdWx0
LT5hc09iamVjdChlcnJvck9iamVjdCkpCisgICAgYXV0byBlcnJvck9iamVjdCA9IHJlc3VsdC0+
YXNPYmplY3QoKTsKKyAgICBpZiAoIWVycm9yT2JqZWN0KQogICAgICAgICByZXR1cm47CiAKLSAg
ICBpbnQgZXJyb3I7Ci0gICAgaWYgKCFlcnJvck9iamVjdC0+Z2V0SW50ZWdlcigiY29kZSIsIGVy
cm9yKSkKKyAgICBhdXRvIGVycm9yID0gZXJyb3JPYmplY3QtPmdldEludGVnZXIoImNvZGUiKTsK
KyAgICBpZiAoIWVycm9yKQogICAgICAgICByZXR1cm47Ci0gICAgU3RyaW5nIGVycm9yTWVzc2Fn
ZTsKLSAgICBpZiAoIWVycm9yT2JqZWN0LT5nZXRTdHJpbmcoIm1lc3NhZ2UiLCBlcnJvck1lc3Nh
Z2UpKQorCisgICAgYXV0byBlcnJvck1lc3NhZ2UgPSBlcnJvck9iamVjdC0+Z2V0U3RyaW5nKCJt
ZXNzYWdlIik7CisgICAgaWYgKCFlcnJvck1lc3NhZ2UpCiAgICAgICAgIHJldHVybjsKIAogICAg
IHN3aXRjaCAoZXJyb3IpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJEcml2ZXIvU2Vzc2lvbi5j
cHAgYi9Tb3VyY2UvV2ViRHJpdmVyL1Nlc3Npb24uY3BwCmluZGV4IGE1NWZhNDkzODBjNDk1MTMw
ZmUzMWE5NmM4NGUwODliNzZkMWNhYzguLjdlYjdiZmRlYzY4YTYwMGQ0Nzc4YTY3YjAxMTdkMWEz
MDBkYWVjODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJEcml2ZXIvU2Vzc2lvbi5jcHAKKysrIGIv
U291cmNlL1dlYkRyaXZlci9TZXNzaW9uLmNwcApAQCAtODMsMTEgKzgzLDEwIEBAIGJvb2wgU2Vz
c2lvbjo6aXNDb25uZWN0ZWQoKSBjb25zdAogCiBzdGF0aWMgT3B0aW9uYWw8U3RyaW5nPiBmaXJz
dFdpbmRvd0hhbmRsZUluUmVzdWx0KEpTT046OlZhbHVlJiByZXN1bHQpCiB7Ci0gICAgUmVmUHRy
PEpTT046OkFycmF5PiBoYW5kbGVzOwotICAgIGlmIChyZXN1bHQuYXNBcnJheShoYW5kbGVzKSAm
JiBoYW5kbGVzLT5sZW5ndGgoKSkgewotICAgICAgICBhdXRvIGhhbmRsZVZhbHVlID0gaGFuZGxl
cy0+Z2V0KDApOwotICAgICAgICBTdHJpbmcgaGFuZGxlOwotICAgICAgICBpZiAoaGFuZGxlVmFs
dWUtPmFzU3RyaW5nKGhhbmRsZSkpCisgICAgYXV0byBoYW5kbGVzID0gcmVzdWx0LmFzQXJyYXko
KTsKKyAgICBpZiAoaGFuZGxlcyAmJiBoYW5kbGVzLT5sZW5ndGgoKSkgeworICAgICAgICBhdXRv
IGhhbmRsZSA9IGhhbmRsZXMtPmdldCgwKS0+YXNTdHJpbmcoKTsKKyAgICAgICAgaWYgKCEhaGFu
ZGxlKQogICAgICAgICAgICAgcmV0dXJuIGhhbmRsZTsKICAgICB9CiAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKQEAgLTEyNiw3ICsxMjUsNyBAQCB2b2lkIFNlc3Npb246OmNsb3NlKEZ1bmN0aW9u
PHZvaWQgKENvbW1hbmRSZXN1bHQmJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiAKIHZvaWQgU2Vz
c2lvbjo6Z2V0VGltZW91dHMoRnVuY3Rpb248dm9pZCAoQ29tbWFuZFJlc3VsdCYmKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKIHsKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzID0g
SlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU09OOjpPYmpl
Y3Q6OmNyZWF0ZSgpOwogICAgIGlmIChtX3NjcmlwdFRpbWVvdXQgPT0gc3RkOjpudW1lcmljX2xp
bWl0czxkb3VibGU+OjppbmZpbml0eSgpKQogICAgICAgICBwYXJhbWV0ZXJzLT5zZXRWYWx1ZSgi
c2NyaXB0Il9zLCBKU09OOjpWYWx1ZTo6bnVsbCgpKTsKICAgICBlbHNlCkBAIC0xODcsMTEgKzE4
NiwxMyBAQCB2b2lkIFNlc3Npb246OmNyZWF0ZVRvcExldmVsQnJvd3NpbmdDb250ZXh0KEZ1bmN0
aW9uPHZvaWQgKENvbW1hbmRSZXN1bHQmJik+JiYgYwogICAgICAgICAgICAgY29tcGxldGlvbkhh
bmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChXVEZNb3ZlKHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0
KSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIFN0cmluZyBoYW5k
bGU7Ci0gICAgICAgIGlmICghcmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdldFN0cmluZygiaGFu
ZGxlIl9zLCBoYW5kbGUpKSB7CisKKyAgICAgICAgYXV0byBoYW5kbGUgPSByZXNwb25zZS5yZXNw
b25zZU9iamVjdC0+Z2V0U3RyaW5nKCJoYW5kbGUiX3MpOworICAgICAgICBpZiAoIWhhbmRsZSkg
ewogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21t
YW5kUmVzdWx0OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikpOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CisKICAgICAgICAgc3dpdGNoVG9Ub3BMZXZlbEJyb3dzaW5nQ29udGV4dCho
YW5kbGUpOwogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpzdWNjZXNz
KCkpOwogICAgIH0pOwpAQCAtMTk5LDE1ICsyMDAsMTYgQEAgdm9pZCBTZXNzaW9uOjpjcmVhdGVU
b3BMZXZlbEJyb3dzaW5nQ29udGV4dChGdW5jdGlvbjx2b2lkIChDb21tYW5kUmVzdWx0JiYpPiYm
IGMKIAogdm9pZCBTZXNzaW9uOjpoYW5kbGVVc2VyUHJvbXB0cyhGdW5jdGlvbjx2b2lkIChDb21t
YW5kUmVzdWx0JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIFJlZlB0cjxKU09OOjpP
YmplY3Q+IHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGF1dG8gcGFy
YW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgcGFyYW1ldGVycy0+c2V0U3Ry
aW5nKCJicm93c2luZ0NvbnRleHRIYW5kbGUiX3MsIG1fdG9wbGV2ZWxCcm93c2luZ0NvbnRleHQu
dmFsdWUoKSk7CiAgICAgbV9ob3N0LT5zZW5kQ29tbWFuZFRvQmFja2VuZCgiaXNTaG93aW5nSmF2
YVNjcmlwdERpYWxvZyJfcywgV1RGTW92ZShwYXJhbWV0ZXJzKSwgW3RoaXMsIHByb3RlY3RlZFRo
aXMgPSBtYWtlUmVmKCp0aGlzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKV0oU2Vzc2lvbkhvc3Q6OkNvbW1hbmRSZXNwb25zZSYmIHJlc3BvbnNlKSBtdXRh
YmxlIHsKICAgICAgICAgaWYgKHJlc3BvbnNlLmlzRXJyb3IgfHwgIXJlc3BvbnNlLnJlc3BvbnNl
T2JqZWN0KSB7CiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0Ojpm
YWlsKFdURk1vdmUocmVzcG9uc2UucmVzcG9uc2VPYmplY3QpKSk7CiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KLSAgICAgICAgYm9vbCBpc1Nob3dpbmdKYXZhU2NyaXB0RGlhbG9nOwot
ICAgICAgICBpZiAoIXJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRCb29sZWFuKCJyZXN1bHQi
LCBpc1Nob3dpbmdKYXZhU2NyaXB0RGlhbG9nKSkgeworCisgICAgICAgIGF1dG8gaXNTaG93aW5n
SmF2YVNjcmlwdERpYWxvZyA9IHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRCb29sZWFuKCJy
ZXN1bHQiKTsKKyAgICAgICAgaWYgKCFpc1Nob3dpbmdKYXZhU2NyaXB0RGlhbG9nKSB7CiAgICAg
ICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1
bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVycm9yKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KQEAgLTI3MywxMyArMjc1LDEzIEBAIHZvaWQgU2Vzc2lvbjo6cmVwb3J0VW5leHBlY3Rl
ZEFsZXJ0T3BlbihGdW5jdGlvbjx2b2lkIChDb21tYW5kUmVzdWx0JiYpPiYmIGNvbXBsCiAgICAg
Z2V0QWxlcnRUZXh0KFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpXShDb21tYW5kUmVzdWx0JiYgcmVzdWx0KSB7CiAgICAgICAgIE9wdGlvbmFsPFN0cmluZz4g
YWxlcnRUZXh0OwogICAgICAgICBpZiAoIXJlc3VsdC5pc0Vycm9yKCkpIHsKLSAgICAgICAgICAg
IFN0cmluZyB2YWx1ZVN0cmluZzsKLSAgICAgICAgICAgIGlmIChyZXN1bHQucmVzdWx0KCktPmFz
U3RyaW5nKHZhbHVlU3RyaW5nKSkKKyAgICAgICAgICAgIGF1dG8gdmFsdWVTdHJpbmcgPSByZXN1
bHQucmVzdWx0KCktPmFzU3RyaW5nKCk7CisgICAgICAgICAgICBpZiAoISF2YWx1ZVN0cmluZykK
ICAgICAgICAgICAgICAgICBhbGVydFRleHQgPSB2YWx1ZVN0cmluZzsKICAgICAgICAgfQogICAg
ICAgICBhdXRvIGVycm9yUmVzdWx0ID0gQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0
OjpFcnJvckNvZGU6OlVuZXhwZWN0ZWRBbGVydE9wZW4pOwogICAgICAgICBpZiAoYWxlcnRUZXh0
KSB7Ci0gICAgICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBhZGRpdG9uYWxEYXRhID0gSlNP
Tjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgICAgIGF1dG8gYWRkaXRvbmFsRGF0YSA9IEpT
T046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgICAgICBhZGRpdG9uYWxEYXRhLT5zZXRTdHJp
bmcoInRleHQiX3MsIGFsZXJ0VGV4dC52YWx1ZSgpKTsKICAgICAgICAgICAgIGVycm9yUmVzdWx0
LnNldEFkZGl0aW9uYWxFcnJvckRhdGEoV1RGTW92ZShhZGRpdG9uYWxEYXRhKSk7CiAgICAgICAg
IH0KQEAgLTMwMCw3ICszMDIsNyBAQCB2b2lkIFNlc3Npb246OmdvKGNvbnN0IFN0cmluZyYgdXJs
LCBGdW5jdGlvbjx2b2lkIChDb21tYW5kUmVzdWx0JiYpPiYmIGNvbXBsZXRpbwogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFy
YW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIGF1dG8gcGFyYW1ldGVy
cyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgIHBhcmFtZXRlcnMtPnNldFN0cmlu
ZygiaGFuZGxlIl9zLCBtX3RvcGxldmVsQnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwogICAgICAg
ICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoInVybCJfcywgdXJsKTsKICAgICAgICAgcGFyYW1ldGVy
cy0+c2V0RG91YmxlKCJwYWdlTG9hZFRpbWVvdXQiX3MsIG1fcGFnZUxvYWRUaW1lb3V0KTsKQEAg
LTMzMCwyMyArMzMyLDI2IEBAIHZvaWQgU2Vzc2lvbjo6Z2V0Q3VycmVudFVSTChGdW5jdGlvbjx2
b2lkIChDb21tYW5kUmVzdWx0JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyCiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0
ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgYXV0byBwYXJhbWV0ZXJzID0g
SlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJo
YW5kbGUiX3MsIG1fdG9wbGV2ZWxCcm93c2luZ0NvbnRleHQudmFsdWUoKSk7CiAgICAgICAgIG1f
aG9zdC0+c2VuZENvbW1hbmRUb0JhY2tlbmQoImdldEJyb3dzaW5nQ29udGV4dCJfcywgV1RGTW92
ZShwYXJhbWV0ZXJzKSwgW3Byb3RlY3RlZFRoaXMsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcildKFNlc3Npb25Ib3N0OjpDb21tYW5kUmVzcG9uc2UmJiByZXNw
b25zZSkgewogICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmlzRXJyb3IgfHwgIXJlc3BvbnNlLnJl
c3BvbnNlT2JqZWN0KSB7CiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFu
ZFJlc3VsdDo6ZmFpbChXVEZNb3ZlKHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0KSkpOwogICAgICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFJlZlB0cjxKU09O
OjpPYmplY3Q+IGJyb3dzaW5nQ29udGV4dDsKLSAgICAgICAgICAgIGlmICghcmVzcG9uc2UucmVz
cG9uc2VPYmplY3QtPmdldE9iamVjdCgiY29udGV4dCIsIGJyb3dzaW5nQ29udGV4dCkpIHsKKwor
ICAgICAgICAgICAgYXV0byBicm93c2luZ0NvbnRleHQgPSByZXNwb25zZS5yZXNwb25zZU9iamVj
dC0+Z2V0T2JqZWN0KCJjb250ZXh0Iik7CisgICAgICAgICAgICBpZiAoIWJyb3dzaW5nQ29udGV4
dCkgewogICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZh
aWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKICAgICAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBTdHJpbmcgdXJsOwotICAg
ICAgICAgICAgaWYgKCFicm93c2luZ0NvbnRleHQtPmdldFN0cmluZygidXJsIiwgdXJsKSkgewor
CisgICAgICAgICAgICBhdXRvIHVybCA9IGJyb3dzaW5nQ29udGV4dC0+Z2V0U3RyaW5nKCJ1cmwi
KTsKKyAgICAgICAgICAgIGlmICghdXJsKSB7CiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhh
bmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OlVua25v
d25FcnJvcikpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KKwogICAg
ICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6c3VjY2VzcyhKU09OOjpW
YWx1ZTo6Y3JlYXRlKHVybCkpKTsKICAgICAgICAgfSk7CiAgICAgfSk7CkBAIC0zNjQsNyArMzY5
LDcgQEAgdm9pZCBTZXNzaW9uOjpiYWNrKEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSZXN1bHQmJik+
JiYgY29tcGxldGlvbkhhbmRsZXIpCiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZN
b3ZlKHJlc3VsdCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIFJl
ZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwor
ICAgICAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAg
ICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoImhhbmRsZSJfcywgbV90b3BsZXZlbEJyb3dzaW5nQ29u
dGV4dC52YWx1ZSgpKTsKICAgICAgICAgcGFyYW1ldGVycy0+c2V0RG91YmxlKCJwYWdlTG9hZFRp
bWVvdXQiX3MsIG1fcGFnZUxvYWRUaW1lb3V0KTsKICAgICAgICAgaWYgKGF1dG8gcGFnZUxvYWRT
dHJhdGVneSA9IHBhZ2VMb2FkU3RyYXRlZ3lTdHJpbmcoKSkKQEAgLTM5Miw3ICszOTcsNyBAQCB2
b2lkIFNlc3Npb246OmZvcndhcmQoRnVuY3Rpb248dm9pZCAoQ29tbWFuZFJlc3VsdCYmKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUo
cmVzdWx0KSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgUmVmUHRy
PEpTT046Ok9iamVjdD4gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAg
ICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgIHBh
cmFtZXRlcnMtPnNldFN0cmluZygiaGFuZGxlIl9zLCBtX3RvcGxldmVsQnJvd3NpbmdDb250ZXh0
LnZhbHVlKCkpOwogICAgICAgICBwYXJhbWV0ZXJzLT5zZXREb3VibGUoInBhZ2VMb2FkVGltZW91
dCJfcywgbV9wYWdlTG9hZFRpbWVvdXQpOwogICAgICAgICBpZiAoYXV0byBwYWdlTG9hZFN0cmF0
ZWd5ID0gcGFnZUxvYWRTdHJhdGVneVN0cmluZygpKQpAQCAtNDIwLDcgKzQyNSw3IEBAIHZvaWQg
U2Vzc2lvbjo6cmVmcmVzaChGdW5jdGlvbjx2b2lkIChDb21tYW5kUmVzdWx0JiYpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShyZXN1
bHQpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBSZWZQdHI8SlNP
Tjo6T2JqZWN0PiBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAg
YXV0byBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICAgcGFyYW1l
dGVycy0+c2V0U3RyaW5nKCJoYW5kbGUiX3MsIG1fdG9wbGV2ZWxCcm93c2luZ0NvbnRleHQudmFs
dWUoKSk7CiAgICAgICAgIHBhcmFtZXRlcnMtPnNldERvdWJsZSgicGFnZUxvYWRUaW1lb3V0Il9z
LCBtX3BhZ2VMb2FkVGltZW91dCk7CiAgICAgICAgIGlmIChhdXRvIHBhZ2VMb2FkU3RyYXRlZ3kg
PSBwYWdlTG9hZFN0cmF0ZWd5U3RyaW5nKCkpCkBAIC00NDgsNyArNDUzLDcgQEAgdm9pZCBTZXNz
aW9uOjpnZXRUaXRsZShGdW5jdGlvbjx2b2lkIChDb21tYW5kUmVzdWx0JiYpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKQogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShyZXN1bHQp
KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBSZWZQdHI8SlNPTjo6
T2JqZWN0PiBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgYXV0
byBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICAgcGFyYW1ldGVy
cy0+c2V0U3RyaW5nKCJicm93c2luZ0NvbnRleHRIYW5kbGUiX3MsIG1fdG9wbGV2ZWxCcm93c2lu
Z0NvbnRleHQudmFsdWUoKSk7CiAgICAgICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiZnVuY3Rp
b24iX3MsICJmdW5jdGlvbigpIHsgcmV0dXJuIGRvY3VtZW50LnRpdGxlOyB9Il9zKTsKICAgICAg
ICAgcGFyYW1ldGVycy0+c2V0QXJyYXkoImFyZ3VtZW50cyJfcywgSlNPTjo6QXJyYXk6OmNyZWF0
ZSgpKTsKQEAgLTQ1NywxNiArNDYyLDE5IEBAIHZvaWQgU2Vzc2lvbjo6Z2V0VGl0bGUoRnVuY3Rp
b248dm9pZCAoQ29tbWFuZFJlc3VsdCYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKICAgICAgICAg
ICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKFdURk1vdmUocmVz
cG9uc2UucmVzcG9uc2VPYmplY3QpKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICAgICAgfQotICAgICAgICAgICAgU3RyaW5nIHZhbHVlU3RyaW5nOwotICAgICAgICAgICAgaWYg
KCFyZXNwb25zZS5yZXNwb25zZU9iamVjdC0+Z2V0U3RyaW5nKCJyZXN1bHQiX3MsIHZhbHVlU3Ry
aW5nKSkgeworCisgICAgICAgICAgICBhdXRvIHZhbHVlU3RyaW5nID0gcmVzcG9uc2UucmVzcG9u
c2VPYmplY3QtPmdldFN0cmluZygicmVzdWx0Il9zKTsKKyAgICAgICAgICAgIGlmICghdmFsdWVT
dHJpbmcpIHsKICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0
OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVycm9yKSk7CiAgICAgICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgUmVmUHRyPEpTT046
OlZhbHVlPiByZXN1bHRWYWx1ZTsKLSAgICAgICAgICAgIGlmICghSlNPTjo6VmFsdWU6OnBhcnNl
SlNPTih2YWx1ZVN0cmluZywgcmVzdWx0VmFsdWUpKSB7CisKKyAgICAgICAgICAgIGF1dG8gcmVz
dWx0VmFsdWUgPSBKU09OOjpWYWx1ZTo6cGFyc2VKU09OKHZhbHVlU3RyaW5nKTsKKyAgICAgICAg
ICAgIGlmICghcmVzdWx0VmFsdWUpIHsKICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVy
cm9yKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQorCiAgICAgICAg
ICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpzdWNjZXNzKFdURk1vdmUocmVz
dWx0VmFsdWUpKSk7CiAgICAgICAgIH0pOwogICAgIH0pOwpAQCAtNDc5LDMwICs0ODcsMzMgQEAg
dm9pZCBTZXNzaW9uOjpnZXRXaW5kb3dIYW5kbGUoRnVuY3Rpb248dm9pZCAoQ29tbWFuZFJlc3Vs
dCYmKT4mJiBjb21wbGV0aW9uSGFuZGwKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFJl
ZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwor
ICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgcGFyYW1l
dGVycy0+c2V0U3RyaW5nKCJoYW5kbGUiX3MsIG1fdG9wbGV2ZWxCcm93c2luZ0NvbnRleHQudmFs
dWUoKSk7CiAgICAgbV9ob3N0LT5zZW5kQ29tbWFuZFRvQmFja2VuZCgiZ2V0QnJvd3NpbmdDb250
ZXh0Il9zLCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBbcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRo
aXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXShTZXNz
aW9uSG9zdDo6Q29tbWFuZFJlc3BvbnNlJiYgcmVzcG9uc2UpIHsKICAgICAgICAgaWYgKHJlc3Bv
bnNlLmlzRXJyb3IgfHwgIXJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0KSB7CiAgICAgICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKFdURk1vdmUocmVzcG9uc2UucmVz
cG9uc2VPYmplY3QpKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAg
UmVmUHRyPEpTT046Ok9iamVjdD4gYnJvd3NpbmdDb250ZXh0OwotICAgICAgICBpZiAoIXJlc3Bv
bnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRPYmplY3QoImNvbnRleHQiX3MsIGJyb3dzaW5nQ29udGV4
dCkpIHsKKworICAgICAgICBhdXRvIGJyb3dzaW5nQ29udGV4dCA9IHJlc3BvbnNlLnJlc3BvbnNl
T2JqZWN0LT5nZXRPYmplY3QoImNvbnRleHQiX3MpOworICAgICAgICBpZiAoIWJyb3dzaW5nQ29u
dGV4dCkgewogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFp
bChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikpOwogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIFN0cmluZyBoYW5kbGU7Ci0gICAgICAgIGlmICgh
YnJvd3NpbmdDb250ZXh0LT5nZXRTdHJpbmcoImhhbmRsZSJfcywgaGFuZGxlKSkgeworCisgICAg
ICAgIGF1dG8gaGFuZGxlID0gYnJvd3NpbmdDb250ZXh0LT5nZXRTdHJpbmcoImhhbmRsZSJfcyk7
CisgICAgICAgIGlmICghaGFuZGxlKSB7CiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihD
b21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVycm9y
KSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KKwogICAgICAgICBjb21wbGV0aW9u
SGFuZGxlcihDb21tYW5kUmVzdWx0OjpzdWNjZXNzKEpTT046OlZhbHVlOjpjcmVhdGUoaGFuZGxl
KSkpOwogICAgIH0pOwogfQogCiB2b2lkIFNlc3Npb246OmNsb3NlVG9wTGV2ZWxCcm93c2luZ0Nv
bnRleHQoY29uc3QgU3RyaW5nJiB0b3BsZXZlbEJyb3dzaW5nQ29udGV4dCwgRnVuY3Rpb248dm9p
ZCAoQ29tbWFuZFJlc3VsdCYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBSZWZQdHI8
SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBh
dXRvIHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgIHBhcmFtZXRlcnMt
PnNldFN0cmluZygiaGFuZGxlIl9zLCB0b3BsZXZlbEJyb3dzaW5nQ29udGV4dCk7CiAgICAgbV9o
b3N0LT5zZW5kQ29tbWFuZFRvQmFja2VuZCgiY2xvc2VCcm93c2luZ0NvbnRleHQiX3MsIFdURk1v
dmUocGFyYW1ldGVycyksIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNv
bXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKFNlc3Npb25Ib3N0
OjpDb21tYW5kUmVzcG9uc2UmJiByZXNwb25zZSkgbXV0YWJsZSB7CiAgICAgICAgIGlmICghbV9o
b3N0LT5pc0Nvbm5lY3RlZCgpKSB7CkBAIC01NDUsNyArNTU2LDcgQEAgdm9pZCBTZXNzaW9uOjpj
bG9zZVdpbmRvdyhGdW5jdGlvbjx2b2lkIChDb21tYW5kUmVzdWx0JiYpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQogCiB2b2lkIFNlc3Npb246OnN3aXRjaFRvV2luZG93KGNvbnN0IFN0cmluZyYgd2lu
ZG93SGFuZGxlLCBGdW5jdGlvbjx2b2lkIChDb21tYW5kUmVzdWx0JiYpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQogewotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnMgPSBKU09OOjpP
YmplY3Q6OmNyZWF0ZSgpOworICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3Jl
YXRlKCk7CiAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJicm93c2luZ0NvbnRleHRIYW5kbGUi
X3MsIHdpbmRvd0hhbmRsZSk7CiAgICAgbV9ob3N0LT5zZW5kQ29tbWFuZFRvQmFja2VuZCgic3dp
dGNoVG9Ccm93c2luZ0NvbnRleHQiX3MsIFdURk1vdmUocGFyYW1ldGVycyksIFt0aGlzLCBwcm90
ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIHdpbmRvd0hhbmRsZSwgY29tcGxldGlvbkhhbmRs
ZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oU2Vzc2lvbkhvc3Q6OkNvbW1hbmRSZXNw
b25zZSYmIHJlc3BvbnNlKSB7CiAgICAgICAgIGlmIChyZXNwb25zZS5pc0Vycm9yKSB7CkBAIC01
NjQsMjIgKzU3NSwyMyBAQCB2b2lkIFNlc3Npb246OmdldFdpbmRvd0hhbmRsZXMoRnVuY3Rpb248
dm9pZCAoQ29tbWFuZFJlc3VsdCYmKT4mJiBjb21wbGV0aW9uSGFuZAogICAgICAgICAgICAgY29t
cGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChXVEZNb3ZlKHJlc3BvbnNlLnJlc3Bv
bnNlT2JqZWN0KSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIFJl
ZlB0cjxKU09OOjpBcnJheT4gYnJvd3NpbmdDb250ZXh0QXJyYXk7Ci0gICAgICAgIGlmICghcmVz
cG9uc2UucmVzcG9uc2VPYmplY3QtPmdldEFycmF5KCJjb250ZXh0cyJfcywgYnJvd3NpbmdDb250
ZXh0QXJyYXkpKSB7CisKKyAgICAgICAgYXV0byBicm93c2luZ0NvbnRleHRBcnJheSA9IHJlc3Bv
bnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRBcnJheSgiY29udGV4dHMiX3MpOworICAgICAgICBpZiAo
IWJyb3dzaW5nQ29udGV4dEFycmF5KSB7CiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihD
b21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVycm9y
KSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgUmVmUHRyPEpTT046
OkFycmF5PiB3aW5kb3dIYW5kbGVzID0gSlNPTjo6QXJyYXk6OmNyZWF0ZSgpOworCisgICAgICAg
IGF1dG8gd2luZG93SGFuZGxlcyA9IEpTT046OkFycmF5OjpjcmVhdGUoKTsKICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGJyb3dzaW5nQ29udGV4dEFycmF5LT5sZW5ndGgoKTsgKytp
KSB7Ci0gICAgICAgICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IGJyb3dzaW5nQ29udGV4dFZhbHVl
ID0gYnJvd3NpbmdDb250ZXh0QXJyYXktPmdldChpKTsKLSAgICAgICAgICAgIFJlZlB0cjxKU09O
OjpPYmplY3Q+IGJyb3dzaW5nQ29udGV4dDsKLSAgICAgICAgICAgIGlmICghYnJvd3NpbmdDb250
ZXh0VmFsdWUtPmFzT2JqZWN0KGJyb3dzaW5nQ29udGV4dCkpIHsKKyAgICAgICAgICAgIGF1dG8g
YnJvd3NpbmdDb250ZXh0ID0gYnJvd3NpbmdDb250ZXh0QXJyYXktPmdldChpKS0+YXNPYmplY3Qo
KTsKKyAgICAgICAgICAgIGlmICghYnJvd3NpbmdDb250ZXh0KSB7CiAgICAgICAgICAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJv
ckNvZGU6OlVua25vd25FcnJvcikpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
ICAgIH0KIAotICAgICAgICAgICAgU3RyaW5nIGhhbmRsZTsKLSAgICAgICAgICAgIGlmICghYnJv
d3NpbmdDb250ZXh0LT5nZXRTdHJpbmcoImhhbmRsZSJfcywgaGFuZGxlKSkgeworICAgICAgICAg
ICAgYXV0byBoYW5kbGUgPSBicm93c2luZ0NvbnRleHQtPmdldFN0cmluZygiaGFuZGxlIl9zKTsK
KyAgICAgICAgICAgIGlmICghaGFuZGxlKSB7CiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhh
bmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OlVua25v
d25FcnJvcikpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KQEAgLTYx
MywxNyArNjI1LDIwIEBAIHZvaWQgU2Vzc2lvbjo6bmV3V2luZG93KE9wdGlvbmFsPFN0cmluZz4g
dHlwZUhpbnQsIEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSZXN1bHQmCiAgICAgICAgICAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChXVEZNb3ZlKHJlc3BvbnNlLnJl
c3BvbnNlT2JqZWN0KSkpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIFN0cmluZyBoYW5kbGU7Ci0gICAgICAgICAgICBpZiAoIXJlc3BvbnNlLnJl
c3BvbnNlT2JqZWN0LT5nZXRTdHJpbmcoImhhbmRsZSJfcywgaGFuZGxlKSkgeworCisgICAgICAg
ICAgICBhdXRvIGhhbmRsZSA9IHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRTdHJpbmcoImhh
bmRsZSJfcyk7CisgICAgICAgICAgICBpZiAoIWhhbmRsZSkgewogICAgICAgICAgICAgICAgIGNv
bXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JD
b2RlOjpVbmtub3duRXJyb3IpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBTdHJpbmcgcHJlc2VudGF0aW9uOwotICAgICAgICAgICAgaWYgKCFy
ZXNwb25zZS5yZXNwb25zZU9iamVjdC0+Z2V0U3RyaW5nKCJwcmVzZW50YXRpb24iX3MsIHByZXNl
bnRhdGlvbikpIHsKKworICAgICAgICAgICAgYXV0byBwcmVzZW50YXRpb24gPSByZXNwb25zZS5y
ZXNwb25zZU9iamVjdC0+Z2V0U3RyaW5nKCJwcmVzZW50YXRpb24iX3MpOworICAgICAgICAgICAg
aWYgKCFwcmVzZW50YXRpb24pIHsKICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihD
b21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVycm9y
KSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQotICAgICAgICAgICAg
UmVmUHRyPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKwor
ICAgICAgICAgICAgYXV0byByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAg
ICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoImhhbmRsZSJfcywgaGFuZGxlKTsKICAgICAgICAgICAg
IHJlc3VsdC0+c2V0U3RyaW5nKCJ0eXBlIl9zLCBwcmVzZW50YXRpb24gPT0gIldpbmRvdyJfcyA/
ICJ3aW5kb3ciX3MgOiAidGFiIl9zKTsKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENv
bW1hbmRSZXN1bHQ6OnN1Y2Nlc3MoV1RGTW92ZShyZXN1bHQpKSk7CkBAIC02NDksMTUgKzY2NCwx
NCBAQCB2b2lkIFNlc3Npb246OnN3aXRjaFRvRnJhbWUoUmVmUHRyPEpTT046OlZhbHVlPiYmIGZy
YW1lSUQsIEZ1bmN0aW9uPHZvaWQgKENvbW1hbgogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIoV1RGTW92ZShyZXN1bHQpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAg
ICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVh
dGUoKTsKKyAgICAgICAgYXV0byBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsK
ICAgICAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJicm93c2luZ0NvbnRleHRIYW5kbGUiX3Ms
IG1fdG9wbGV2ZWxCcm93c2luZ0NvbnRleHQudmFsdWUoKSk7CiAgICAgICAgIGlmIChtX2N1cnJl
bnRCcm93c2luZ0NvbnRleHQpCiAgICAgICAgICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoImZy
YW1lSGFuZGxlIl9zLCBtX2N1cnJlbnRCcm93c2luZ0NvbnRleHQudmFsdWUoKSk7CiAKLSAgICAg
ICAgaW50IGZyYW1lSW5kZXg7Ci0gICAgICAgIGlmIChmcmFtZUlELT5hc0ludGVnZXIoZnJhbWVJ
bmRleCkpIHsKKyAgICAgICAgaWYgKGF1dG8gZnJhbWVJbmRleCA9IGZyYW1lSUQtPmFzSW50ZWdl
cigpKSB7CiAgICAgICAgICAgICBBU1NFUlQoZnJhbWVJbmRleCA+PSAwICYmIGZyYW1lSW5kZXgg
PCBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkIHNob3J0Pjo6bWF4KCkpOwotICAgICAgICAg
ICAgcGFyYW1ldGVycy0+c2V0SW50ZWdlcigib3JkaW5hbCJfcywgZnJhbWVJbmRleCk7CisgICAg
ICAgICAgICBwYXJhbWV0ZXJzLT5zZXRJbnRlZ2VyKCJvcmRpbmFsIl9zLCAqZnJhbWVJbmRleCk7
CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBTdHJpbmcgZnJhbWVFbGVtZW50SUQgPSBl
eHRyYWN0RWxlbWVudElEKCpmcmFtZUlEKTsKICAgICAgICAgICAgIEFTU0VSVCghZnJhbWVFbGVt
ZW50SUQuaXNFbXB0eSgpKTsKQEAgLTY2OSwxMSArNjgzLDEzIEBAIHZvaWQgU2Vzc2lvbjo6c3dp
dGNoVG9GcmFtZShSZWZQdHI8SlNPTjo6VmFsdWU+JiYgZnJhbWVJRCwgRnVuY3Rpb248dm9pZCAo
Q29tbWFuCiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6
ZmFpbChXVEZNb3ZlKHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0KSkpOwogICAgICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFN0cmluZyBmcmFtZUhhbmRsZTsK
LSAgICAgICAgICAgIGlmICghcmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdldFN0cmluZygicmVz
dWx0Il9zLCBmcmFtZUhhbmRsZSkpIHsKKworICAgICAgICAgICAgYXV0byBmcmFtZUhhbmRsZSA9
IHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRTdHJpbmcoInJlc3VsdCJfcyk7CisgICAgICAg
ICAgICBpZiAoIWZyYW1lSGFuZGxlKSB7CiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OlVua25vd25F
cnJvcikpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KKwogICAgICAg
ICAgICAgc3dpdGNoVG9Ccm93c2luZ0NvbnRleHQoZnJhbWVIYW5kbGUpOwogICAgICAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6c3VjY2VzcygpKTsKICAgICAgICAgfSk7
CkBAIC02OTcsNyArNzEzLDcgQEAgdm9pZCBTZXNzaW9uOjpzd2l0Y2hUb1BhcmVudEZyYW1lKEZ1
bmN0aW9uPHZvaWQgKENvbW1hbmRSZXN1bHQmJik+JiYgY29tcGxldGlvbkgKICAgICAgICAgICAg
IGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUocmVzdWx0KSk7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KLSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVycyA9IEpT
T046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTT046Ok9i
amVjdDo6Y3JlYXRlKCk7CiAgICAgICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiYnJvd3NpbmdD
b250ZXh0SGFuZGxlIl9zLCBtX3RvcGxldmVsQnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwogICAg
ICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoImZyYW1lSGFuZGxlIl9zLCBtX2N1cnJlbnRCcm93
c2luZ0NvbnRleHQudmFsdWUoKSk7CiAgICAgICAgIG1faG9zdC0+c2VuZENvbW1hbmRUb0JhY2tl
bmQoInJlc29sdmVQYXJlbnRGcmFtZUhhbmRsZSJfcywgV1RGTW92ZShwYXJhbWV0ZXJzKSwgW3Ro
aXMsIHByb3RlY3RlZFRoaXMsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcildKFNlc3Npb25Ib3N0OjpDb21tYW5kUmVzcG9uc2UmJiByZXNwb25zZSkgewpAQCAt
NzA1LDExICs3MjEsMTMgQEAgdm9pZCBTZXNzaW9uOjpzd2l0Y2hUb1BhcmVudEZyYW1lKEZ1bmN0
aW9uPHZvaWQgKENvbW1hbmRSZXN1bHQmJik+JiYgY29tcGxldGlvbkgKICAgICAgICAgICAgICAg
ICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKFdURk1vdmUocmVzcG9uc2Uu
cmVzcG9uc2VPYmplY3QpKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAg
fQotICAgICAgICAgICAgU3RyaW5nIGZyYW1lSGFuZGxlOwotICAgICAgICAgICAgaWYgKCFyZXNw
b25zZS5yZXNwb25zZU9iamVjdC0+Z2V0U3RyaW5nKCJyZXN1bHQiX3MsIGZyYW1lSGFuZGxlKSkg
eworCisgICAgICAgICAgICBhdXRvIGZyYW1lSGFuZGxlID0gcmVzcG9uc2UucmVzcG9uc2VPYmpl
Y3QtPmdldFN0cmluZygicmVzdWx0Il9zKTsKKyAgICAgICAgICAgIGlmICghZnJhbWVIYW5kbGUp
IHsKICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWls
KENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVycm9yKSk7CiAgICAgICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBzd2l0Y2hUb0Jyb3dzaW5n
Q29udGV4dChmcmFtZUhhbmRsZSk7CiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21t
YW5kUmVzdWx0OjpzdWNjZXNzKCkpOwogICAgICAgICB9KTsKQEAgLTcxOCwzOSArNzM2LDYxIEBA
IHZvaWQgU2Vzc2lvbjo6c3dpdGNoVG9QYXJlbnRGcmFtZShGdW5jdGlvbjx2b2lkIChDb21tYW5k
UmVzdWx0JiYpPiYmIGNvbXBsZXRpb25ICiAKIHZvaWQgU2Vzc2lvbjo6Z2V0VG9wbGV2ZWxCcm93
c2luZ0NvbnRleHRSZWN0KEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSZXN1bHQmJik+JiYgY29tcGxl
dGlvbkhhbmRsZXIpCiB7Ci0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVycyA9IEpT
T046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgYXV0byBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0
OjpjcmVhdGUoKTsKICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoImhhbmRsZSJfcywgbV90b3Bs
ZXZlbEJyb3dzaW5nQ29udGV4dC52YWx1ZSgpKTsKICAgICBtX2hvc3QtPnNlbmRDb21tYW5kVG9C
YWNrZW5kKCJnZXRCcm93c2luZ0NvbnRleHQiX3MsIFdURk1vdmUocGFyYW1ldGVycyksIFtwcm90
ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcildKFNlc3Npb25Ib3N0OjpDb21tYW5kUmVzcG9uc2UmJiByZXNwb25z
ZSkgewogICAgICAgICBpZiAocmVzcG9uc2UuaXNFcnJvciB8fCAhcmVzcG9uc2UucmVzcG9uc2VP
YmplY3QpIHsKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZh
aWwoV1RGTW92ZShyZXNwb25zZS5yZXNwb25zZU9iamVjdCkpKTsKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQotICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBicm93c2luZ0NvbnRl
eHQ7Ci0gICAgICAgIGlmICghcmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdldE9iamVjdCgiY29u
dGV4dCJfcywgYnJvd3NpbmdDb250ZXh0KSkgeworCisgICAgICAgIGF1dG8gYnJvd3NpbmdDb250
ZXh0ID0gcmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdldE9iamVjdCgiY29udGV4dCJfcyk7Cisg
ICAgICAgIGlmICghYnJvd3NpbmdDb250ZXh0KSB7CiAgICAgICAgICAgICBjb21wbGV0aW9uSGFu
ZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93
bkVycm9yKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgUmVmUHRy
PEpTT046Ok9iamVjdD4gd2luZG93T3JpZ2luOwotICAgICAgICBkb3VibGUgeCA9IDAsIHkgPSAw
OwotICAgICAgICBpZiAoIWJyb3dzaW5nQ29udGV4dC0+Z2V0T2JqZWN0KCJ3aW5kb3dPcmlnaW4i
X3MsIHdpbmRvd09yaWdpbikKLSAgICAgICAgICAgIHx8ICF3aW5kb3dPcmlnaW4tPmdldERvdWJs
ZSgieCJfcywgeCkKLSAgICAgICAgICAgIHx8ICF3aW5kb3dPcmlnaW4tPmdldERvdWJsZSgieSJf
cywgeSkpIHsKKworICAgICAgICBhdXRvIHdpbmRvd09yaWdpbiA9IGJyb3dzaW5nQ29udGV4dC0+
Z2V0T2JqZWN0KCJ3aW5kb3dPcmlnaW4iX3MpOworICAgICAgICBpZiAoIXdpbmRvd09yaWdpbikg
ewogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21t
YW5kUmVzdWx0OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikpOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9Ci0gICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHdpbmRvd1NpemU7Ci0g
ICAgICAgIGRvdWJsZSB3aWR0aCA9IDAsIGhlaWdodCA9IDA7Ci0gICAgICAgIGlmICghYnJvd3Np
bmdDb250ZXh0LT5nZXRPYmplY3QoIndpbmRvd1NpemUiX3MsIHdpbmRvd1NpemUpCi0gICAgICAg
ICAgICB8fCAhd2luZG93U2l6ZS0+Z2V0RG91YmxlKCJ3aWR0aCJfcywgd2lkdGgpCi0gICAgICAg
ICAgICB8fCAhd2luZG93U2l6ZS0+Z2V0RG91YmxlKCJoZWlnaHQiX3MsIGhlaWdodCkpIHsKKwor
ICAgICAgICBhdXRvIHggPSB3aW5kb3dPcmlnaW4tPmdldERvdWJsZSgieCJfcyk7CisgICAgICAg
IGlmICgheCkgewogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6
ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikpOwogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CisKKyAgICAgICAgYXV0byB5ID0gd2luZG93T3JpZ2luLT5n
ZXREb3VibGUoInkiX3MpOworICAgICAgICBpZiAoIXkpIHsKKyAgICAgICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpV
bmtub3duRXJyb3IpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAg
IGF1dG8gd2luZG93U2l6ZSA9IGJyb3dzaW5nQ29udGV4dC0+Z2V0T2JqZWN0KCJ3aW5kb3dTaXpl
Il9zKTsKKyAgICAgICAgaWYgKCF3aW5kb3dTaXplKSB7CisgICAgICAgICAgICBjb21wbGV0aW9u
SGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5r
bm93bkVycm9yKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBh
dXRvIHdpZHRoID0gd2luZG93U2l6ZS0+Z2V0RG91YmxlKCJ3aWR0aCJfcyk7CisgICAgICAgIGlm
ICghd2lkdGgpIHsKKyAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6
OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGF1dG8gaGVpZ2h0ID0gd2luZG93U2l6
ZS0+Z2V0RG91YmxlKCJoZWlnaHQiX3MpOworICAgICAgICBpZiAoIWhlaWdodCkgeworICAgICAg
ICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0
OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisKICAgICAgICAgYXV0byB3aW5kb3dSZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsK
LSAgICAgICAgd2luZG93UmVjdC0+c2V0RG91YmxlKCJ4Il9zLCB4KTsKLSAgICAgICAgd2luZG93
UmVjdC0+c2V0RG91YmxlKCJ5Il9zLCB5KTsKLSAgICAgICAgd2luZG93UmVjdC0+c2V0RG91Ymxl
KCJ3aWR0aCJfcywgd2lkdGgpOwotICAgICAgICB3aW5kb3dSZWN0LT5zZXREb3VibGUoImhlaWdo
dCJfcywgaGVpZ2h0KTsKKyAgICAgICAgd2luZG93UmVjdC0+c2V0RG91YmxlKCJ4Il9zLCB4LnJl
bGVhc2VOb25OdWxsKCkpOworICAgICAgICB3aW5kb3dSZWN0LT5zZXREb3VibGUoInkiX3MsIHku
cmVsZWFzZU5vbk51bGwoKSk7CisgICAgICAgIHdpbmRvd1JlY3QtPnNldERvdWJsZSgid2lkdGgi
X3MsIHdpZHRoLnJlbGVhc2VOb25OdWxsKCkpOworICAgICAgICB3aW5kb3dSZWN0LT5zZXREb3Vi
bGUoImhlaWdodCJfcywgaGVpZ2h0LnJlbGVhc2VOb25OdWxsKCkpOwogICAgICAgICBjb21wbGV0
aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpzdWNjZXNzKFdURk1vdmUod2luZG93UmVjdCkpKTsK
ICAgICB9KTsKIH0KQEAgLTc4NCwxNiArODI0LDE2IEBAIHZvaWQgU2Vzc2lvbjo6c2V0V2luZG93
UmVjdChPcHRpb25hbDxkb3VibGU+IHgsIE9wdGlvbmFsPGRvdWJsZT4geSwgT3B0aW9uYWw8ZG91
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBSZWZQdHI8SlNPTjo6
T2JqZWN0PiBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgYXV0
byBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICAgcGFyYW1ldGVy
cy0+c2V0U3RyaW5nKCJoYW5kbGUiX3MsIG1fdG9wbGV2ZWxCcm93c2luZ0NvbnRleHQudmFsdWUo
KSk7CiAgICAgICAgIGlmICh4ICYmIHkpIHsKLSAgICAgICAgICAgIFJlZlB0cjxKU09OOjpPYmpl
Y3Q+IHdpbmRvd09yaWdpbiA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgICAgICBh
dXRvIHdpbmRvd09yaWdpbiA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgICAgICB3
aW5kb3dPcmlnaW4tPnNldERvdWJsZSgieCIsIHgudmFsdWUoKSk7CiAgICAgICAgICAgICB3aW5k
b3dPcmlnaW4tPnNldERvdWJsZSgieSIsIHkudmFsdWUoKSk7CiAgICAgICAgICAgICBwYXJhbWV0
ZXJzLT5zZXRPYmplY3QoIm9yaWdpbiJfcywgV1RGTW92ZSh3aW5kb3dPcmlnaW4pKTsKICAgICAg
ICAgfQogICAgICAgICBpZiAod2lkdGggJiYgaGVpZ2h0KSB7Ci0gICAgICAgICAgICBSZWZQdHI8
SlNPTjo6T2JqZWN0PiB3aW5kb3dTaXplID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAg
ICAgICAgIGF1dG8gd2luZG93U2l6ZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAg
ICAgICB3aW5kb3dTaXplLT5zZXREb3VibGUoIndpZHRoIiwgd2lkdGgudmFsdWUoKSk7CiAgICAg
ICAgICAgICB3aW5kb3dTaXplLT5zZXREb3VibGUoImhlaWdodCIsIGhlaWdodC52YWx1ZSgpKTsK
ICAgICAgICAgICAgIHBhcmFtZXRlcnMtPnNldE9iamVjdCgic2l6ZSJfcywgV1RGTW92ZSh3aW5k
b3dTaXplKSk7CkBAIC04MjEsNyArODYxLDcgQEAgdm9pZCBTZXNzaW9uOjptYXhpbWl6ZVdpbmRv
dyhGdW5jdGlvbjx2b2lkIChDb21tYW5kUmVzdWx0JiYpPiYmIGNvbXBsZXRpb25IYW5kbGUKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIFJlZlB0cjxKU09OOjpPYmpl
Y3Q+IHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBhdXRvIHBh
cmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICBwYXJhbWV0ZXJzLT5z
ZXRTdHJpbmcoImhhbmRsZSJfcywgbV90b3BsZXZlbEJyb3dzaW5nQ29udGV4dC52YWx1ZSgpKTsK
ICAgICAgICAgbV9ob3N0LT5zZW5kQ29tbWFuZFRvQmFja2VuZCgibWF4aW1pemVXaW5kb3dPZkJy
b3dzaW5nQ29udGV4dCJfcywgV1RGTW92ZShwYXJhbWV0ZXJzKSwgW3RoaXMsIHByb3RlY3RlZFRo
aXMsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildIChTZXNz
aW9uSG9zdDo6Q29tbWFuZFJlc3BvbnNlJiYgcmVzcG9uc2UpIG11dGFibGUgewogICAgICAgICAg
ICAgaWYgKHJlc3BvbnNlLmlzRXJyb3IpIHsKQEAgLTg0Niw3ICs4ODYsNyBAQCB2b2lkIFNlc3Np
b246Om1pbmltaXplV2luZG93KEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSZXN1bHQmJik+JiYgY29t
cGxldGlvbkhhbmRsZQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAg
UmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7
CisgICAgICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAg
ICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiaGFuZGxlIl9zLCBtX3RvcGxldmVsQnJvd3NpbmdD
b250ZXh0LnZhbHVlKCkpOwogICAgICAgICBtX2hvc3QtPnNlbmRDb21tYW5kVG9CYWNrZW5kKCJo
aWRlV2luZG93T2ZCcm93c2luZ0NvbnRleHQiX3MsIFdURk1vdmUocGFyYW1ldGVycyksIFt0aGlz
LCBwcm90ZWN0ZWRUaGlzLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpXSAoU2Vzc2lvbkhvc3Q6OkNvbW1hbmRSZXNwb25zZSYmIHJlc3BvbnNlKSBtdXRhYmxl
IHsKICAgICAgICAgICAgIGlmIChyZXNwb25zZS5pc0Vycm9yKSB7CkBAIC04NzEsNyArOTExLDcg
QEAgdm9pZCBTZXNzaW9uOjpmdWxsc2NyZWVuV2luZG93KEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRS
ZXN1bHQmJik+JiYgY29tcGxldGlvbkhhbmQKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQogCi0gICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnMgPSBKU09OOjpPYmpl
Y3Q6OmNyZWF0ZSgpOworICAgICAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNy
ZWF0ZSgpOwogICAgICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoImJyb3dzaW5nQ29udGV4dEhh
bmRsZSJfcywgbV90b3BsZXZlbEJyb3dzaW5nQ29udGV4dC52YWx1ZSgpKTsKICAgICAgICAgcGFy
YW1ldGVycy0+c2V0U3RyaW5nKCJmdW5jdGlvbiJfcywgU3RyaW5nKEVudGVyRnVsbHNjcmVlbkph
dmFTY3JpcHQsIHNpemVvZihFbnRlckZ1bGxzY3JlZW5KYXZhU2NyaXB0KSkpOwogICAgICAgICBw
YXJhbWV0ZXJzLT5zZXRBcnJheSgiYXJndW1lbnRzIl9zLCBKU09OOjpBcnJheTo6Y3JlYXRlKCkp
OwpAQCAtODgyLDEzICs5MjIsMTQgQEAgdm9pZCBTZXNzaW9uOjpmdWxsc2NyZWVuV2luZG93KEZ1
bmN0aW9uPHZvaWQgKENvbW1hbmRSZXN1bHQmJik+JiYgY29tcGxldGlvbkhhbmQKICAgICAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIFN0cmluZyB2YWx1
ZVN0cmluZzsKLSAgICAgICAgICAgIGlmICghcmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdldFN0
cmluZygicmVzdWx0Il9zLCB2YWx1ZVN0cmluZykpIHsKKyAgICAgICAgICAgIGF1dG8gdmFsdWVT
dHJpbmcgPSByZXNwb25zZS5yZXNwb25zZU9iamVjdC0+Z2V0U3RyaW5nKCJyZXN1bHQiX3MpOwor
ICAgICAgICAgICAgaWYgKCF2YWx1ZVN0cmluZykgewogICAgICAgICAgICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpV
bmtub3duRXJyb3IpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHJlc3VsdFZhbHVlOwotICAgICAgICAgICAg
aWYgKCFKU09OOjpWYWx1ZTo6cGFyc2VKU09OKHZhbHVlU3RyaW5nLCByZXN1bHRWYWx1ZSkpIHsK
KworICAgICAgICAgICAgYXV0byByZXN1bHRWYWx1ZSA9IEpTT046OlZhbHVlOjpwYXJzZUpTT04o
dmFsdWVTdHJpbmcpOworICAgICAgICAgICAgaWYgKCFyZXN1bHRWYWx1ZSkgewogICAgICAgICAg
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3Vs
dDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgICAgICB9CkBAIC04OTgsMjQgKzkzOSwyNCBAQCB2b2lkIFNlc3Npb246OmZ1bGxzY3Jl
ZW5XaW5kb3coRnVuY3Rpb248dm9pZCAoQ29tbWFuZFJlc3VsdCYmKT4mJiBjb21wbGV0aW9uSGFu
ZAogICAgIH0pOwogfQogCi1SZWZQdHI8SlNPTjo6T2JqZWN0PiBTZXNzaW9uOjpjcmVhdGVFbGVt
ZW50KFJlZlB0cjxKU09OOjpWYWx1ZT4mJiB2YWx1ZSkKK1JlZlB0cjxKU09OOjpPYmplY3Q+IFNl
c3Npb246OmNyZWF0ZUVsZW1lbnQoUmVmPEpTT046OlZhbHVlPiYmIHZhbHVlKQogewotICAgIFJl
ZlB0cjxKU09OOjpPYmplY3Q+IHZhbHVlT2JqZWN0OwotICAgIGlmICghdmFsdWUtPmFzT2JqZWN0
KHZhbHVlT2JqZWN0KSkKKyAgICBhdXRvIHZhbHVlT2JqZWN0ID0gdmFsdWUtPmFzT2JqZWN0KCk7
CisgICAgaWYgKCF2YWx1ZU9iamVjdCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBT
dHJpbmcgZWxlbWVudElEOwotICAgIGlmICghdmFsdWVPYmplY3QtPmdldFN0cmluZygic2Vzc2lv
bi1ub2RlLSIgKyBpZCgpLCBlbGVtZW50SUQpKQorICAgIGF1dG8gZWxlbWVudElEID0gdmFsdWVP
YmplY3QtPmdldFN0cmluZygic2Vzc2lvbi1ub2RlLSIgKyBpZCgpKTsKKyAgICBpZiAoIWVsZW1l
bnRJRCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0
PiBlbGVtZW50T2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBhdXRvIGVsZW1l
bnRPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgIGVsZW1lbnRPYmplY3QtPnNl
dFN0cmluZyh3ZWJFbGVtZW50SWRlbnRpZmllcigpLCBlbGVtZW50SUQpOwogICAgIHJldHVybiBl
bGVtZW50T2JqZWN0OwogfQogCi1SZWZQdHI8SlNPTjo6T2JqZWN0PiBTZXNzaW9uOjpjcmVhdGVF
bGVtZW50KGNvbnN0IFN0cmluZyYgZWxlbWVudElEKQorUmVmPEpTT046Ok9iamVjdD4gU2Vzc2lv
bjo6Y3JlYXRlRWxlbWVudChjb25zdCBTdHJpbmcmIGVsZW1lbnRJRCkKIHsKLSAgICBSZWZQdHI8
SlNPTjo6T2JqZWN0PiBlbGVtZW50T2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAg
ICBhdXRvIGVsZW1lbnRPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgIGVsZW1l
bnRPYmplY3QtPnNldFN0cmluZygic2Vzc2lvbi1ub2RlLSIgKyBpZCgpLCBlbGVtZW50SUQpOwog
ICAgIHJldHVybiBlbGVtZW50T2JqZWN0OwogfQpAQCAtOTI4LDEyICs5NjksMTIgQEAgUmVmUHRy
PEpTT046Ok9iamVjdD4gU2Vzc2lvbjo6ZXh0cmFjdEVsZW1lbnQoSlNPTjo6VmFsdWUmIHZhbHVl
KQogCiBTdHJpbmcgU2Vzc2lvbjo6ZXh0cmFjdEVsZW1lbnRJRChKU09OOjpWYWx1ZSYgdmFsdWUp
CiB7Ci0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gdmFsdWVPYmplY3Q7Ci0gICAgaWYgKCF2YWx1
ZS5hc09iamVjdCh2YWx1ZU9iamVjdCkpCisgICAgYXV0byB2YWx1ZU9iamVjdCA9IHZhbHVlLmFz
T2JqZWN0KCk7CisgICAgaWYgKCF2YWx1ZU9iamVjdCkKICAgICAgICAgcmV0dXJuIGVtcHR5U3Ry
aW5nKCk7CiAKLSAgICBTdHJpbmcgZWxlbWVudElEOwotICAgIGlmICghdmFsdWVPYmplY3QtPmdl
dFN0cmluZyh3ZWJFbGVtZW50SWRlbnRpZmllcigpLCBlbGVtZW50SUQpKQorICAgIGF1dG8gZWxl
bWVudElEID0gdmFsdWVPYmplY3QtPmdldFN0cmluZyh3ZWJFbGVtZW50SWRlbnRpZmllcigpKTsK
KyAgICBpZiAoIWVsZW1lbnRJRCkKICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CiAKICAg
ICByZXR1cm4gZWxlbWVudElEOwpAQCAtOTQzLDcgKzk4NCw3IEBAIHZvaWQgU2Vzc2lvbjo6Y29t
cHV0ZUVsZW1lbnRMYXlvdXQoY29uc3QgU3RyaW5nJiBlbGVtZW50SUQsIE9wdGlvblNldDxFbGVt
ZW50TGF5CiB7CiAgICAgQVNTRVJUKG1fdG9wbGV2ZWxCcm93c2luZ0NvbnRleHQudmFsdWUoKSk7
CiAKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0Ojpj
cmVhdGUoKTsKKyAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwog
ICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiYnJvd3NpbmdDb250ZXh0SGFuZGxlIl9zLCBtX3Rv
cGxldmVsQnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwogICAgIHBhcmFtZXRlcnMtPnNldFN0cmlu
ZygiZnJhbWVIYW5kbGUiX3MsIG1fY3VycmVudEJyb3dzaW5nQ29udGV4dC52YWx1ZU9yKGVtcHR5
U3RyaW5nKCkpKTsKICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoIm5vZGVIYW5kbGUiX3MsIGVs
ZW1lbnRJRCk7CkBAIC05NTQsNTcgKzk5NSw1OCBAQCB2b2lkIFNlc3Npb246OmNvbXB1dGVFbGVt
ZW50TGF5b3V0KGNvbnN0IFN0cmluZyYgZWxlbWVudElELCBPcHRpb25TZXQ8RWxlbWVudExheQog
ICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQs
IGZhbHNlLCBXVEZNb3ZlKHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0KSk7CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcmVjdE9iamVj
dDsKLSAgICAgICAgaWYgKCFyZXNwb25zZS5yZXNwb25zZU9iamVjdC0+Z2V0T2JqZWN0KCJyZWN0
Il9zLCByZWN0T2JqZWN0KSkgeworCisgICAgICAgIGF1dG8gcmVjdE9iamVjdCA9IHJlc3BvbnNl
LnJlc3BvbnNlT2JqZWN0LT5nZXRPYmplY3QoInJlY3QiX3MpOworICAgICAgICBpZiAoIXJlY3RP
YmplY3QpIHsKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURjo6bnVsbG9wdCwgV1RG
OjpudWxsb3B0LCBmYWxzZSwgbnVsbHB0cik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KKwogICAgICAgICBPcHRpb25hbDxpbnQ+IGVsZW1lbnRYOwogICAgICAgICBPcHRpb25hbDxp
bnQ+IGVsZW1lbnRZOwotICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBlbGVtZW50UG9zaXRp
b247Ci0gICAgICAgIGlmIChyZWN0T2JqZWN0LT5nZXRPYmplY3QoIm9yaWdpbiJfcywgZWxlbWVu
dFBvc2l0aW9uKSkgewotICAgICAgICAgICAgaW50IHgsIHk7Ci0gICAgICAgICAgICBpZiAoZWxl
bWVudFBvc2l0aW9uLT5nZXRJbnRlZ2VyKCJ4Il9zLCB4KSAmJiBlbGVtZW50UG9zaXRpb24tPmdl
dEludGVnZXIoInkiX3MsIHkpKSB7Ci0gICAgICAgICAgICAgICAgZWxlbWVudFggPSB4OwotICAg
ICAgICAgICAgICAgIGVsZW1lbnRZID0geTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgYXV0byBl
bGVtZW50UG9zaXRpb24gPSByZWN0T2JqZWN0LT5nZXRPYmplY3QoIm9yaWdpbiJfcyk7CisgICAg
ICAgIGlmIChlbGVtZW50UG9zaXRpb24pIHsKKyAgICAgICAgICAgIGVsZW1lbnRYID0gZWxlbWVu
dFBvc2l0aW9uLT5nZXRJbnRlZ2VyKCJ4Il9zKTsKKyAgICAgICAgICAgIGVsZW1lbnRZID0gZWxl
bWVudFBvc2l0aW9uLT5nZXRJbnRlZ2VyKCJ5Il9zKTsKICAgICAgICAgfQogICAgICAgICBpZiAo
IWVsZW1lbnRYIHx8ICFlbGVtZW50WSkgewogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIo
V1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQsIGZhbHNlLCBudWxscHRyKTsKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfQorCiAgICAgICAgIE9wdGlvbmFsPGludD4gZWxlbWVudFdpZHRo
OwogICAgICAgICBPcHRpb25hbDxpbnQ+IGVsZW1lbnRIZWlnaHQ7Ci0gICAgICAgIFJlZlB0cjxK
U09OOjpPYmplY3Q+IGVsZW1lbnRTaXplOwotICAgICAgICBpZiAocmVjdE9iamVjdC0+Z2V0T2Jq
ZWN0KCJzaXplIl9zLCBlbGVtZW50U2l6ZSkpIHsKLSAgICAgICAgICAgIGludCB3aWR0aCwgaGVp
Z2h0OwotICAgICAgICAgICAgaWYgKGVsZW1lbnRTaXplLT5nZXRJbnRlZ2VyKCJ3aWR0aCJfcywg
d2lkdGgpICYmIGVsZW1lbnRTaXplLT5nZXRJbnRlZ2VyKCJoZWlnaHQiX3MsIGhlaWdodCkpIHsK
LSAgICAgICAgICAgICAgICBlbGVtZW50V2lkdGggPSB3aWR0aDsKLSAgICAgICAgICAgICAgICBl
bGVtZW50SGVpZ2h0ID0gaGVpZ2h0OwotICAgICAgICAgICAgfQorICAgICAgICBhdXRvIGVsZW1l
bnRTaXplID0gcmVjdE9iamVjdC0+Z2V0T2JqZWN0KCJzaXplIl9zKTsKKyAgICAgICAgaWYgKGVs
ZW1lbnRTaXplKSB7CisgICAgICAgICAgICBlbGVtZW50V2lkdGggPSBlbGVtZW50U2l6ZS0+Z2V0
SW50ZWdlcigid2lkdGgiX3MpOworICAgICAgICAgICAgZWxlbWVudEhlaWdodCA9IGVsZW1lbnRT
aXplLT5nZXRJbnRlZ2VyKCJoZWlnaHQiX3MpOwogICAgICAgICB9CiAgICAgICAgIGlmICghZWxl
bWVudFdpZHRoIHx8ICFlbGVtZW50SGVpZ2h0KSB7CiAgICAgICAgICAgICBjb21wbGV0aW9uSGFu
ZGxlcihXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCwgZmFsc2UsIG51bGxwdHIpOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CisKICAgICAgICAgUmVjdCByZWN0ID0geyB7IGVsZW1l
bnRYLnZhbHVlKCksIGVsZW1lbnRZLnZhbHVlKCkgfSwgeyBlbGVtZW50V2lkdGgudmFsdWUoKSwg
ZWxlbWVudEhlaWdodC52YWx1ZSgpIH0gfTsKIAotICAgICAgICBib29sIGlzT2JzY3VyZWQ7Ci0g
ICAgICAgIGlmICghcmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdldEJvb2xlYW4oImlzT2JzY3Vy
ZWQiX3MsIGlzT2JzY3VyZWQpKSB7CisgICAgICAgIGF1dG8gaXNPYnNjdXJlZCA9IHJlc3BvbnNl
LnJlc3BvbnNlT2JqZWN0LT5nZXRCb29sZWFuKCJpc09ic2N1cmVkIl9zKTsKKyAgICAgICAgaWYg
KCFpc09ic2N1cmVkKSB7CiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEY6Om51bGxv
cHQsIFdURjo6bnVsbG9wdCwgZmFsc2UsIG51bGxwdHIpOwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9Ci0gICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IGluVmlld0NlbnRlclBvaW50
T2JqZWN0OwotICAgICAgICBpZiAoIXJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRPYmplY3Qo
ImluVmlld0NlbnRlclBvaW50Il9zLCBpblZpZXdDZW50ZXJQb2ludE9iamVjdCkpIHsKKworICAg
ICAgICBhdXRvIGluVmlld0NlbnRlclBvaW50T2JqZWN0ID0gcmVzcG9uc2UucmVzcG9uc2VPYmpl
Y3QtPmdldE9iamVjdCgiaW5WaWV3Q2VudGVyUG9pbnQiX3MpOworICAgICAgICBpZiAoIWluVmll
d0NlbnRlclBvaW50T2JqZWN0KSB7CiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihyZWN0
LCBXVEY6Om51bGxvcHQsIGlzT2JzY3VyZWQsIG51bGxwdHIpOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9Ci0gICAgICAgIGludCBpblZpZXdDZW50ZXJQb2ludFggPSAwLCBpblZpZXdD
ZW50ZXJQb2ludFkgPSAwOwotICAgICAgICBpZiAoIWluVmlld0NlbnRlclBvaW50T2JqZWN0LT5n
ZXRJbnRlZ2VyKCJ4Il9zLCBpblZpZXdDZW50ZXJQb2ludFgpCi0gICAgICAgICAgICB8fCAhaW5W
aWV3Q2VudGVyUG9pbnRPYmplY3QtPmdldEludGVnZXIoInkiX3MsIGluVmlld0NlbnRlclBvaW50
WSkpIHsKKworICAgICAgICBhdXRvIGluVmlld0NlbnRlclBvaW50WCA9IGluVmlld0NlbnRlclBv
aW50T2JqZWN0LT5nZXRJbnRlZ2VyKCJ4Il9zKTsKKyAgICAgICAgYXV0byBpblZpZXdDZW50ZXJQ
b2ludFkgPSBpblZpZXdDZW50ZXJQb2ludE9iamVjdC0+Z2V0SW50ZWdlcigieSJfcyk7CisgICAg
ICAgIGlmICghaW5WaWV3Q2VudGVyUG9pbnRYIHx8ICFpblZpZXdDZW50ZXJQb2ludFkpIHsKICAg
ICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0LCBp
c09ic2N1cmVkLCBudWxscHRyKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQorCiAg
ICAgICAgIFBvaW50IGluVmlld0NlbnRlclBvaW50ID0geyBpblZpZXdDZW50ZXJQb2ludFgsIGlu
Vmlld0NlbnRlclBvaW50WSB9OwogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihyZWN0LCBpblZp
ZXdDZW50ZXJQb2ludCwgaXNPYnNjdXJlZCwgbnVsbHB0cik7CiAgICAgfSk7CkBAIC0xMDIyLDcg
KzEwNjQsNyBAQCB2b2lkIFNlc3Npb246OmZpbmRFbGVtZW50cyhjb25zdCBTdHJpbmcmIHN0cmF0
ZWd5LCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yLCBGaW5kRQogICAgICAgICAgICAgY29tcGxldGlv
bkhhbmRsZXIoV1RGTW92ZShyZXN1bHQpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQotICAgICAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IGFyZ3VtZW50cyA9IEpTT046OkFycmF5Ojpj
cmVhdGUoKTsKKyAgICAgICAgYXV0byBhcmd1bWVudHMgPSBKU09OOjpBcnJheTo6Y3JlYXRlKCk7
CiAgICAgICAgIGFyZ3VtZW50cy0+cHVzaFN0cmluZyhKU09OOjpWYWx1ZTo6Y3JlYXRlKHN0cmF0
ZWd5KS0+dG9KU09OU3RyaW5nKCkpOwogICAgICAgICBpZiAocm9vdEVsZW1lbnRJRC5pc0VtcHR5
KCkpCiAgICAgICAgICAgICBhcmd1bWVudHMtPnB1c2hTdHJpbmcoSlNPTjo6VmFsdWU6Om51bGwo
KS0+dG9KU09OU3RyaW5nKCkpOwpAQCAtMTAzMiw3ICsxMDc0LDcgQEAgdm9pZCBTZXNzaW9uOjpm
aW5kRWxlbWVudHMoY29uc3QgU3RyaW5nJiBzdHJhdGVneSwgY29uc3QgU3RyaW5nJiBzZWxlY3Rv
ciwgRmluZEUKICAgICAgICAgYXJndW1lbnRzLT5wdXNoU3RyaW5nKEpTT046OlZhbHVlOjpjcmVh
dGUobW9kZSA9PSBGaW5kRWxlbWVudHNNb2RlOjpTaW5nbGUpLT50b0pTT05TdHJpbmcoKSk7CiAg
ICAgICAgIGFyZ3VtZW50cy0+cHVzaFN0cmluZyhKU09OOjpWYWx1ZTo6Y3JlYXRlKG1faW1wbGlj
aXRXYWl0VGltZW91dCktPnRvSlNPTlN0cmluZygpKTsKIAotICAgICAgICBSZWZQdHI8SlNPTjo6
T2JqZWN0PiBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgYXV0
byBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICAgcGFyYW1ldGVy
cy0+c2V0U3RyaW5nKCJicm93c2luZ0NvbnRleHRIYW5kbGUiX3MsIG1fdG9wbGV2ZWxCcm93c2lu
Z0NvbnRleHQudmFsdWUoKSk7CiAgICAgICAgIGlmIChtX2N1cnJlbnRCcm93c2luZ0NvbnRleHQp
CiAgICAgICAgICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoImZyYW1lSGFuZGxlIl9zLCBtX2N1
cnJlbnRCcm93c2luZ0NvbnRleHQudmFsdWUoKSk7CkBAIC0xMDQ4LDIwICsxMDkwLDIzIEBAIHZv
aWQgU2Vzc2lvbjo6ZmluZEVsZW1lbnRzKGNvbnN0IFN0cmluZyYgc3RyYXRlZ3ksIGNvbnN0IFN0
cmluZyYgc2VsZWN0b3IsIEZpbmRFCiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIo
Q29tbWFuZFJlc3VsdDo6ZmFpbChXVEZNb3ZlKHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0KSkpOwog
ICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFN0cmlu
ZyB2YWx1ZVN0cmluZzsKLSAgICAgICAgICAgIGlmICghcmVzcG9uc2UucmVzcG9uc2VPYmplY3Qt
PmdldFN0cmluZygicmVzdWx0Il9zLCB2YWx1ZVN0cmluZykpIHsKLSAgICAgICAgICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9y
Q29kZTo6VW5rbm93bkVycm9yKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgUmVmUHRyPEpTT046OlZhbHVlPiByZXN1bHRWYWx1ZTsKLSAgICAg
ICAgICAgIGlmICghSlNPTjo6VmFsdWU6OnBhcnNlSlNPTih2YWx1ZVN0cmluZywgcmVzdWx0VmFs
dWUpKSB7CisKKyAgICAgICAgICAgIGF1dG8gdmFsdWVTdHJpbmcgPSByZXNwb25zZS5yZXNwb25z
ZU9iamVjdC0+Z2V0U3RyaW5nKCJyZXN1bHQiX3MpOworICAgICAgICAgICAgaWYgKCF2YWx1ZVN0
cmluZykgewogICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6
OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKICAgICAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0
VmFsdWUgPSBKU09OOjpWYWx1ZTo6cGFyc2VKU09OKHZhbHVlU3RyaW5nKTsKKyAgICAgICAgICAg
IGlmICghcmVzdWx0VmFsdWUpIHsKKyAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihD
b21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVycm9y
KSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisKICAgICAgICAg
ICAgIHN3aXRjaCAobW9kZSkgewogICAgICAgICAgICAgY2FzZSBGaW5kRWxlbWVudHNNb2RlOjpT
aW5nbGU6IHsKLSAgICAgICAgICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBlbGVtZW50T2Jq
ZWN0ID0gY3JlYXRlRWxlbWVudChXVEZNb3ZlKHJlc3VsdFZhbHVlKSk7CisgICAgICAgICAgICAg
ICAgYXV0byBlbGVtZW50T2JqZWN0ID0gY3JlYXRlRWxlbWVudChXVEZNb3ZlKHJlc3VsdFZhbHVl
KSk7CiAgICAgICAgICAgICAgICAgaWYgKCFlbGVtZW50T2JqZWN0KSB7CiAgICAgICAgICAgICAg
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3Vs
dDo6RXJyb3JDb2RlOjpOb1N1Y2hFbGVtZW50KSk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKQEAgLTEwNzAsMTIgKzExMTUsMTMgQEAgdm9pZCBTZXNzaW9uOjpmaW5kRWxlbWVudHMoY29u
c3QgU3RyaW5nJiBzdHJhdGVneSwgY29uc3QgU3RyaW5nJiBzZWxlY3RvciwgRmluZEUKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNhc2UgRmluZEVs
ZW1lbnRzTW9kZTo6TXVsdGlwbGU6IHsKLSAgICAgICAgICAgICAgICBSZWZQdHI8SlNPTjo6QXJy
YXk+IGVsZW1lbnRzQXJyYXk7Ci0gICAgICAgICAgICAgICAgaWYgKCFyZXN1bHRWYWx1ZS0+YXNB
cnJheShlbGVtZW50c0FycmF5KSkgeworICAgICAgICAgICAgICAgIGF1dG8gZWxlbWVudHNBcnJh
eSA9IHJlc3VsdFZhbHVlLT5hc0FycmF5KCk7CisgICAgICAgICAgICAgICAgaWYgKCFlbGVtZW50
c0FycmF5KSB7CiAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRS
ZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpOb1N1Y2hFbGVtZW50KSk7CiAg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgUmVmUHRyPEpTT046OkFycmF5PiBlbGVtZW50T2JqZWN0c0FycmF5ID0gSlNPTjo6QXJy
YXk6OmNyZWF0ZSgpOworCisgICAgICAgICAgICAgICAgYXV0byBlbGVtZW50T2JqZWN0c0FycmF5
ID0gSlNPTjo6QXJyYXk6OmNyZWF0ZSgpOwogICAgICAgICAgICAgICAgIHVuc2lnbmVkIGVsZW1l
bnRzQXJyYXlMZW5ndGggPSBlbGVtZW50c0FycmF5LT5sZW5ndGgoKTsKICAgICAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZWxlbWVudHNBcnJheUxlbmd0aDsgKytpKSB7CiAg
ICAgICAgICAgICAgICAgICAgIGlmIChhdXRvIGVsZW1lbnRPYmplY3QgPSBjcmVhdGVFbGVtZW50
KGVsZW1lbnRzQXJyYXktPmdldChpKSkpCkBAIC0xMTAxLDcgKzExNDcsNyBAQCB2b2lkIFNlc3Np
b246OmdldEFjdGl2ZUVsZW1lbnQoRnVuY3Rpb248dm9pZCAoQ29tbWFuZFJlc3VsdCYmKT4mJiBj
b21wbGV0aW9uSGFuZAogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShyZXN1
bHQpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBSZWZQdHI8SlNP
Tjo6T2JqZWN0PiBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAg
YXV0byBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICAgcGFyYW1l
dGVycy0+c2V0U3RyaW5nKCJicm93c2luZ0NvbnRleHRIYW5kbGUiX3MsIG1fdG9wbGV2ZWxCcm93
c2luZ0NvbnRleHQudmFsdWUoKSk7CiAgICAgICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiZnVu
Y3Rpb24iX3MsICJmdW5jdGlvbigpIHsgcmV0dXJuIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7IH0i
X3MpOwogICAgICAgICBwYXJhbWV0ZXJzLT5zZXRBcnJheSgiYXJndW1lbnRzIl9zLCBKU09OOjpB
cnJheTo6Y3JlYXRlKCkpOwpAQCAtMTExMCwxNyArMTE1NiwyMCBAQCB2b2lkIFNlc3Npb246Omdl
dEFjdGl2ZUVsZW1lbnQoRnVuY3Rpb248dm9pZCAoQ29tbWFuZFJlc3VsdCYmKT4mJiBjb21wbGV0
aW9uSGFuZAogICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6
OmZhaWwoV1RGTW92ZShyZXNwb25zZS5yZXNwb25zZU9iamVjdCkpKTsKICAgICAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBTdHJpbmcgdmFsdWVTdHJpbmc7
Ci0gICAgICAgICAgICBpZiAoIXJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRTdHJpbmcoInJl
c3VsdCJfcywgdmFsdWVTdHJpbmcpKSB7CisKKyAgICAgICAgICAgIGF1dG8gdmFsdWVTdHJpbmcg
PSByZXNwb25zZS5yZXNwb25zZU9iamVjdC0+Z2V0U3RyaW5nKCJyZXN1bHQiX3MpOworICAgICAg
ICAgICAgaWYgKCF2YWx1ZVN0cmluZykgewogICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5k
bGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtub3du
RXJyb3IpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHJlc3VsdFZhbHVlOwotICAgICAgICAgICAgaWYgKCFK
U09OOjpWYWx1ZTo6cGFyc2VKU09OKHZhbHVlU3RyaW5nLCByZXN1bHRWYWx1ZSkpIHsKKworICAg
ICAgICAgICAgYXV0byByZXN1bHRWYWx1ZSA9IEpTT046OlZhbHVlOjpwYXJzZUpTT04odmFsdWVT
dHJpbmcpOworICAgICAgICAgICAgaWYgKCFyZXN1bHRWYWx1ZSkgewogICAgICAgICAgICAgICAg
IGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJy
b3JDb2RlOjpVbmtub3duRXJyb3IpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBlbGVtZW50T2JqZWN0ID0g
Y3JlYXRlRWxlbWVudChXVEZNb3ZlKHJlc3VsdFZhbHVlKSk7CisKKyAgICAgICAgICAgIGF1dG8g
ZWxlbWVudE9iamVjdCA9IGNyZWF0ZUVsZW1lbnQoV1RGTW92ZShyZXN1bHRWYWx1ZSkpOwogICAg
ICAgICAgICAgaWYgKCFlbGVtZW50T2JqZWN0KSB7CiAgICAgICAgICAgICAgICAgY29tcGxldGlv
bkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6Ok5v
U3VjaEVsZW1lbnQpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CkBAIC0xMTQyLDExICsxMTkx
LDExIEBAIHZvaWQgU2Vzc2lvbjo6aXNFbGVtZW50U2VsZWN0ZWQoY29uc3QgU3RyaW5nJiBlbGVt
ZW50SUQsIEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSCiAgICAgICAgICAgICBjb21wbGV0aW9uSGFu
ZGxlcihXVEZNb3ZlKHJlc3VsdCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0g
ICAgICAgIFJlZlB0cjxKU09OOjpBcnJheT4gYXJndW1lbnRzID0gSlNPTjo6QXJyYXk6OmNyZWF0
ZSgpOworICAgICAgICBhdXRvIGFyZ3VtZW50cyA9IEpTT046OkFycmF5OjpjcmVhdGUoKTsKICAg
ICAgICAgYXJndW1lbnRzLT5wdXNoU3RyaW5nKGNyZWF0ZUVsZW1lbnQoZWxlbWVudElEKS0+dG9K
U09OU3RyaW5nKCkpOwogICAgICAgICBhcmd1bWVudHMtPnB1c2hTdHJpbmcoSlNPTjo6VmFsdWU6
OmNyZWF0ZSgic2VsZWN0ZWQiKS0+dG9KU09OU3RyaW5nKCkpOwogCi0gICAgICAgIFJlZlB0cjxK
U09OOjpPYmplY3Q+IHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgICAg
ICBhdXRvIHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICBwYXJh
bWV0ZXJzLT5zZXRTdHJpbmcoImJyb3dzaW5nQ29udGV4dEhhbmRsZSJfcywgbV90b3BsZXZlbEJy
b3dzaW5nQ29udGV4dC52YWx1ZSgpKTsKICAgICAgICAgaWYgKG1fY3VycmVudEJyb3dzaW5nQ29u
dGV4dCkKICAgICAgICAgICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiZnJhbWVIYW5kbGUiX3Ms
IG1fY3VycmVudEJyb3dzaW5nQ29udGV4dC52YWx1ZSgpKTsKQEAgLTExNTcsMjUgKzEyMDYsMzAg
QEAgdm9pZCBTZXNzaW9uOjppc0VsZW1lbnRTZWxlY3RlZChjb25zdCBTdHJpbmcmIGVsZW1lbnRJ
RCwgRnVuY3Rpb248dm9pZCAoQ29tbWFuZFIKICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFu
ZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKFdURk1vdmUocmVzcG9uc2UucmVzcG9uc2VPYmplY3Qp
KSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQotICAgICAgICAgICAg
U3RyaW5nIHZhbHVlU3RyaW5nOwotICAgICAgICAgICAgaWYgKCFyZXNwb25zZS5yZXNwb25zZU9i
amVjdC0+Z2V0U3RyaW5nKCJyZXN1bHQiX3MsIHZhbHVlU3RyaW5nKSkgeworCisgICAgICAgICAg
ICBhdXRvIHZhbHVlU3RyaW5nID0gcmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdldFN0cmluZygi
cmVzdWx0Il9zKTsKKyAgICAgICAgICAgIGlmICghdmFsdWVTdHJpbmcpIHsKICAgICAgICAgICAg
ICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6
OkVycm9yQ29kZTo6VW5rbm93bkVycm9yKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAgICAgfQotICAgICAgICAgICAgUmVmUHRyPEpTT046OlZhbHVlPiByZXN1bHRWYWx1ZTsK
LSAgICAgICAgICAgIGlmICghSlNPTjo6VmFsdWU6OnBhcnNlSlNPTih2YWx1ZVN0cmluZywgcmVz
dWx0VmFsdWUpKSB7CisKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0VmFsdWUgPSBKU09OOjpWYWx1
ZTo6cGFyc2VKU09OKHZhbHVlU3RyaW5nKTsKKyAgICAgICAgICAgIGlmICghcmVzdWx0VmFsdWUp
IHsKICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWls
KENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVycm9yKSk7CiAgICAgICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBpZiAocmVzdWx0VmFsdWUt
PmlzTnVsbCgpKSB7CiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJl
c3VsdDo6c3VjY2VzcyhKU09OOjpWYWx1ZTo6Y3JlYXRlKGZhbHNlKSkpOwogICAgICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFN0cmluZyBib29sZWFuUmVz
dWx0OwotICAgICAgICAgICAgaWYgKCFyZXN1bHRWYWx1ZS0+YXNTdHJpbmcoYm9vbGVhblJlc3Vs
dCkgfHwgYm9vbGVhblJlc3VsdCAhPSAidHJ1ZSIpIHsKKworICAgICAgICAgICAgYXV0byBib29s
ZWFuUmVzdWx0ID0gcmVzdWx0VmFsdWUtPmFzU3RyaW5nKCk7CisgICAgICAgICAgICBpZiAoIWJv
b2xlYW5SZXN1bHQgfHwgYm9vbGVhblJlc3VsdCAhPSAidHJ1ZSIpIHsKICAgICAgICAgICAgICAg
ICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVy
cm9yQ29kZTo6VW5rbm93bkVycm9yKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICAgICAgfQorCiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0Ojpz
dWNjZXNzKEpTT046OlZhbHVlOjpjcmVhdGUodHJ1ZSkpKTsKICAgICAgICAgfSk7CiAgICAgfSk7
CkBAIC0xMTkzLDEwICsxMjQ3LDEwIEBAIHZvaWQgU2Vzc2lvbjo6Z2V0RWxlbWVudFRleHQoY29u
c3QgU3RyaW5nJiBlbGVtZW50SUQsIEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSZXN1CiAgICAgICAg
ICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKHJlc3VsdCkpOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9Ci0gICAgICAgIFJlZlB0cjxKU09OOjpBcnJheT4gYXJndW1lbnRzID0g
SlNPTjo6QXJyYXk6OmNyZWF0ZSgpOworICAgICAgICBhdXRvIGFyZ3VtZW50cyA9IEpTT046OkFy
cmF5OjpjcmVhdGUoKTsKICAgICAgICAgYXJndW1lbnRzLT5wdXNoU3RyaW5nKGNyZWF0ZUVsZW1l
bnQoZWxlbWVudElEKS0+dG9KU09OU3RyaW5nKCkpOwogCi0gICAgICAgIFJlZlB0cjxKU09OOjpP
YmplY3Q+IHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBhdXRv
IHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICBwYXJhbWV0ZXJz
LT5zZXRTdHJpbmcoImJyb3dzaW5nQ29udGV4dEhhbmRsZSJfcywgbV90b3BsZXZlbEJyb3dzaW5n
Q29udGV4dC52YWx1ZSgpKTsKICAgICAgICAgaWYgKG1fY3VycmVudEJyb3dzaW5nQ29udGV4dCkK
ICAgICAgICAgICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiZnJhbWVIYW5kbGUiX3MsIG1fY3Vy
cmVudEJyb3dzaW5nQ29udGV4dC52YWx1ZSgpKTsKQEAgLTEyMDgsMTYgKzEyNjIsMTkgQEAgdm9p
ZCBTZXNzaW9uOjpnZXRFbGVtZW50VGV4dChjb25zdCBTdHJpbmcmIGVsZW1lbnRJRCwgRnVuY3Rp
b248dm9pZCAoQ29tbWFuZFJlc3UKICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihD
b21tYW5kUmVzdWx0OjpmYWlsKFdURk1vdmUocmVzcG9uc2UucmVzcG9uc2VPYmplY3QpKSk7CiAg
ICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgU3RyaW5n
IHZhbHVlU3RyaW5nOwotICAgICAgICAgICAgaWYgKCFyZXNwb25zZS5yZXNwb25zZU9iamVjdC0+
Z2V0U3RyaW5nKCJyZXN1bHQiX3MsIHZhbHVlU3RyaW5nKSkgeworCisgICAgICAgICAgICBhdXRv
IHZhbHVlU3RyaW5nID0gcmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdldFN0cmluZygicmVzdWx0
Il9zKTsKKyAgICAgICAgICAgIGlmICghdmFsdWVTdHJpbmcpIHsKICAgICAgICAgICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9y
Q29kZTo6VW5rbm93bkVycm9yKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAg
ICAgfQotICAgICAgICAgICAgUmVmUHRyPEpTT046OlZhbHVlPiByZXN1bHRWYWx1ZTsKLSAgICAg
ICAgICAgIGlmICghSlNPTjo6VmFsdWU6OnBhcnNlSlNPTih2YWx1ZVN0cmluZywgcmVzdWx0VmFs
dWUpKSB7CisKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0VmFsdWUgPSBKU09OOjpWYWx1ZTo6cGFy
c2VKU09OKHZhbHVlU3RyaW5nKTsKKyAgICAgICAgICAgIGlmICghcmVzdWx0VmFsdWUpIHsKICAg
ICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1h
bmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVycm9yKSk7CiAgICAgICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21t
YW5kUmVzdWx0OjpzdWNjZXNzKFdURk1vdmUocmVzdWx0VmFsdWUpKSk7CiAgICAgICAgIH0pOwog
ICAgIH0pOwpAQCAtMTIzNSwxMCArMTI5MiwxMCBAQCB2b2lkIFNlc3Npb246OmdldEVsZW1lbnRU
YWdOYW1lKGNvbnN0IFN0cmluZyYgZWxlbWVudElELCBGdW5jdGlvbjx2b2lkIChDb21tYW5kUgog
ICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShyZXN1bHQpKTsKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IGFyZ3Vt
ZW50cyA9IEpTT046OkFycmF5OjpjcmVhdGUoKTsKKyAgICAgICAgYXV0byBhcmd1bWVudHMgPSBK
U09OOjpBcnJheTo6Y3JlYXRlKCk7CiAgICAgICAgIGFyZ3VtZW50cy0+cHVzaFN0cmluZyhjcmVh
dGVFbGVtZW50KGVsZW1lbnRJRCktPnRvSlNPTlN0cmluZygpKTsKIAotICAgICAgICBSZWZQdHI8
SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAg
ICAgYXV0byBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICAgcGFy
YW1ldGVycy0+c2V0U3RyaW5nKCJicm93c2luZ0NvbnRleHRIYW5kbGUiX3MsIG1fdG9wbGV2ZWxC
cm93c2luZ0NvbnRleHQudmFsdWUoKSk7CiAgICAgICAgIGlmIChtX2N1cnJlbnRCcm93c2luZ0Nv
bnRleHQpCiAgICAgICAgICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoImZyYW1lSGFuZGxlIl9z
LCBtX2N1cnJlbnRCcm93c2luZ0NvbnRleHQudmFsdWUoKSk7CkBAIC0xMjQ5LDE2ICsxMzA2LDE5
IEBAIHZvaWQgU2Vzc2lvbjo6Z2V0RWxlbWVudFRhZ05hbWUoY29uc3QgU3RyaW5nJiBlbGVtZW50
SUQsIEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSCiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhh
bmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChXVEZNb3ZlKHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0
KSkpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IFN0cmluZyB2YWx1ZVN0cmluZzsKLSAgICAgICAgICAgIGlmICghcmVzcG9uc2UucmVzcG9uc2VP
YmplY3QtPmdldFN0cmluZygicmVzdWx0Il9zLCB2YWx1ZVN0cmluZykpIHsKKworICAgICAgICAg
ICAgYXV0byB2YWx1ZVN0cmluZyA9IHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRTdHJpbmco
InJlc3VsdCJfcyk7CisgICAgICAgICAgICBpZiAoIXZhbHVlU3RyaW5nKSB7CiAgICAgICAgICAg
ICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0
OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gcmVzdWx0VmFsdWU7
Ci0gICAgICAgICAgICBpZiAoIUpTT046OlZhbHVlOjpwYXJzZUpTT04odmFsdWVTdHJpbmcsIHJl
c3VsdFZhbHVlKSkgeworCisgICAgICAgICAgICBhdXRvIHJlc3VsdFZhbHVlID0gSlNPTjo6VmFs
dWU6OnBhcnNlSlNPTih2YWx1ZVN0cmluZyk7CisgICAgICAgICAgICBpZiAoIXJlc3VsdFZhbHVl
KSB7CiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFp
bChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikpOwogICAgICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIoQ29tbWFuZFJlc3VsdDo6c3VjY2VzcyhXVEZNb3ZlKHJlc3VsdFZhbHVlKSkpOwogICAgICAg
ICB9KTsKICAgICB9KTsKQEAgLTEyODEsNyArMTM0MSw3IEBAIHZvaWQgU2Vzc2lvbjo6Z2V0RWxl
bWVudFJlY3QoY29uc3QgU3RyaW5nJiBlbGVtZW50SUQsIEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRS
ZXN1CiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFp
bChXVEZNb3ZlKGVycm9yKSkpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHJlY3RPYmplY3QgPSBKU09OOjpP
YmplY3Q6OmNyZWF0ZSgpOworICAgICAgICAgICAgYXV0byByZWN0T2JqZWN0ID0gSlNPTjo6T2Jq
ZWN0OjpjcmVhdGUoKTsKICAgICAgICAgICAgIHJlY3RPYmplY3QtPnNldEludGVnZXIoIngiX3Ms
IHJlY3QudmFsdWUoKS5vcmlnaW4ueCk7CiAgICAgICAgICAgICByZWN0T2JqZWN0LT5zZXRJbnRl
Z2VyKCJ5Il9zLCByZWN0LnZhbHVlKCkub3JpZ2luLnkpOwogICAgICAgICAgICAgcmVjdE9iamVj
dC0+c2V0SW50ZWdlcigid2lkdGgiX3MsIHJlY3QudmFsdWUoKS5zaXplLndpZHRoKTsKQEAgLTEz
MDMsMTAgKzEzNjMsMTAgQEAgdm9pZCBTZXNzaW9uOjppc0VsZW1lbnRFbmFibGVkKGNvbnN0IFN0
cmluZyYgZWxlbWVudElELCBGdW5jdGlvbjx2b2lkIChDb21tYW5kUmUKICAgICAgICAgICAgIGNv
bXBsZXRpb25IYW5kbGVyKFdURk1vdmUocmVzdWx0KSk7CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KLSAgICAgICAgUmVmUHRyPEpTT046OkFycmF5PiBhcmd1bWVudHMgPSBKU09OOjpB
cnJheTo6Y3JlYXRlKCk7CisgICAgICAgIGF1dG8gYXJndW1lbnRzID0gSlNPTjo6QXJyYXk6OmNy
ZWF0ZSgpOwogICAgICAgICBhcmd1bWVudHMtPnB1c2hTdHJpbmcoY3JlYXRlRWxlbWVudChlbGVt
ZW50SUQpLT50b0pTT05TdHJpbmcoKSk7CiAKLSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4g
cGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIGF1dG8gcGFyYW1l
dGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgIHBhcmFtZXRlcnMtPnNldFN0
cmluZygiYnJvd3NpbmdDb250ZXh0SGFuZGxlIl9zLCBtX3RvcGxldmVsQnJvd3NpbmdDb250ZXh0
LnZhbHVlKCkpOwogICAgICAgICBpZiAobV9jdXJyZW50QnJvd3NpbmdDb250ZXh0KQogICAgICAg
ICAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJmcmFtZUhhbmRsZSJfcywgbV9jdXJyZW50QnJv
d3NpbmdDb250ZXh0LnZhbHVlKCkpOwpAQCAtMTMxNywxNiArMTM3NywxOSBAQCB2b2lkIFNlc3Np
b246OmlzRWxlbWVudEVuYWJsZWQoY29uc3QgU3RyaW5nJiBlbGVtZW50SUQsIEZ1bmN0aW9uPHZv
aWQgKENvbW1hbmRSZQogICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRS
ZXN1bHQ6OmZhaWwoV1RGTW92ZShyZXNwb25zZS5yZXNwb25zZU9iamVjdCkpKTsKICAgICAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBTdHJpbmcgdmFsdWVT
dHJpbmc7Ci0gICAgICAgICAgICBpZiAoIXJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRTdHJp
bmcoInJlc3VsdCJfcywgdmFsdWVTdHJpbmcpKSB7CisKKyAgICAgICAgICAgIGF1dG8gdmFsdWVT
dHJpbmcgPSByZXNwb25zZS5yZXNwb25zZU9iamVjdC0+Z2V0U3RyaW5nKCJyZXN1bHQiX3MpOwor
ICAgICAgICAgICAgaWYgKCF2YWx1ZVN0cmluZykgewogICAgICAgICAgICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpV
bmtub3duRXJyb3IpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHJlc3VsdFZhbHVlOwotICAgICAgICAgICAg
aWYgKCFKU09OOjpWYWx1ZTo6cGFyc2VKU09OKHZhbHVlU3RyaW5nLCByZXN1bHRWYWx1ZSkpIHsK
KworICAgICAgICAgICAgYXV0byByZXN1bHRWYWx1ZSA9IEpTT046OlZhbHVlOjpwYXJzZUpTT04o
dmFsdWVTdHJpbmcpOworICAgICAgICAgICAgaWYgKCFyZXN1bHRWYWx1ZSkgewogICAgICAgICAg
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3Vs
dDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgICAgICB9CisKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1
bHQ6OnN1Y2Nlc3MoV1RGTW92ZShyZXN1bHRWYWx1ZSkpKTsKICAgICAgICAgfSk7CiAgICAgfSk7
CkBAIC0xMzQ0LDEwICsxNDA3LDEwIEBAIHZvaWQgU2Vzc2lvbjo6aXNFbGVtZW50RGlzcGxheWVk
KGNvbnN0IFN0cmluZyYgZWxlbWVudElELCBGdW5jdGlvbjx2b2lkIChDb21tYW5kCiAgICAgICAg
ICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKHJlc3VsdCkpOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9Ci0gICAgICAgIFJlZlB0cjxKU09OOjpBcnJheT4gYXJndW1lbnRzID0g
SlNPTjo6QXJyYXk6OmNyZWF0ZSgpOworICAgICAgICBhdXRvIGFyZ3VtZW50cyA9IEpTT046OkFy
cmF5OjpjcmVhdGUoKTsKICAgICAgICAgYXJndW1lbnRzLT5wdXNoU3RyaW5nKGNyZWF0ZUVsZW1l
bnQoZWxlbWVudElEKS0+dG9KU09OU3RyaW5nKCkpOwogCi0gICAgICAgIFJlZlB0cjxKU09OOjpP
YmplY3Q+IHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBhdXRv
IHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICBwYXJhbWV0ZXJz
LT5zZXRTdHJpbmcoImJyb3dzaW5nQ29udGV4dEhhbmRsZSJfcywgbV90b3BsZXZlbEJyb3dzaW5n
Q29udGV4dC52YWx1ZSgpKTsKICAgICAgICAgaWYgKG1fY3VycmVudEJyb3dzaW5nQ29udGV4dCkK
ICAgICAgICAgICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiZnJhbWVIYW5kbGUiX3MsIG1fY3Vy
cmVudEJyb3dzaW5nQ29udGV4dC52YWx1ZSgpKTsKQEAgLTEzNTgsMTYgKzE0MjEsMTkgQEAgdm9p
ZCBTZXNzaW9uOjppc0VsZW1lbnREaXNwbGF5ZWQoY29uc3QgU3RyaW5nJiBlbGVtZW50SUQsIEZ1
bmN0aW9uPHZvaWQgKENvbW1hbmQKICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihD
b21tYW5kUmVzdWx0OjpmYWlsKFdURk1vdmUocmVzcG9uc2UucmVzcG9uc2VPYmplY3QpKSk7CiAg
ICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgU3RyaW5n
IHZhbHVlU3RyaW5nOwotICAgICAgICAgICAgaWYgKCFyZXNwb25zZS5yZXNwb25zZU9iamVjdC0+
Z2V0U3RyaW5nKCJyZXN1bHQiX3MsIHZhbHVlU3RyaW5nKSkgeworCisgICAgICAgICAgICBhdXRv
IHZhbHVlU3RyaW5nID0gcmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdldFN0cmluZygicmVzdWx0
Il9zKTsKKyAgICAgICAgICAgIGlmICghdmFsdWVTdHJpbmcpIHsKICAgICAgICAgICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9y
Q29kZTo6VW5rbm93bkVycm9yKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAg
ICAgfQotICAgICAgICAgICAgUmVmUHRyPEpTT046OlZhbHVlPiByZXN1bHRWYWx1ZTsKLSAgICAg
ICAgICAgIGlmICghSlNPTjo6VmFsdWU6OnBhcnNlSlNPTih2YWx1ZVN0cmluZywgcmVzdWx0VmFs
dWUpKSB7CisKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0VmFsdWUgPSBKU09OOjpWYWx1ZTo6cGFy
c2VKU09OKHZhbHVlU3RyaW5nKTsKKyAgICAgICAgICAgIGlmICghcmVzdWx0VmFsdWUpIHsKICAg
ICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1h
bmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVycm9yKSk7CiAgICAgICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21t
YW5kUmVzdWx0OjpzdWNjZXNzKFdURk1vdmUocmVzdWx0VmFsdWUpKSk7CiAgICAgICAgIH0pOwog
ICAgIH0pOwpAQCAtMTM4NSwxMSArMTQ1MSwxMSBAQCB2b2lkIFNlc3Npb246OmdldEVsZW1lbnRB
dHRyaWJ1dGUoY29uc3QgU3RyaW5nJiBlbGVtZW50SUQsIGNvbnN0IFN0cmluZyYgYXR0cmlidQog
ICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShyZXN1bHQpKTsKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IGFyZ3Vt
ZW50cyA9IEpTT046OkFycmF5OjpjcmVhdGUoKTsKKyAgICAgICAgYXV0byBhcmd1bWVudHMgPSBK
U09OOjpBcnJheTo6Y3JlYXRlKCk7CiAgICAgICAgIGFyZ3VtZW50cy0+cHVzaFN0cmluZyhjcmVh
dGVFbGVtZW50KGVsZW1lbnRJRCktPnRvSlNPTlN0cmluZygpKTsKICAgICAgICAgYXJndW1lbnRz
LT5wdXNoU3RyaW5nKEpTT046OlZhbHVlOjpjcmVhdGUoYXR0cmlidXRlKS0+dG9KU09OU3RyaW5n
KCkpOwogCi0gICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnMgPSBKU09OOjpP
YmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6
OmNyZWF0ZSgpOwogICAgICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoImJyb3dzaW5nQ29udGV4
dEhhbmRsZSJfcywgbV90b3BsZXZlbEJyb3dzaW5nQ29udGV4dC52YWx1ZSgpKTsKICAgICAgICAg
aWYgKG1fY3VycmVudEJyb3dzaW5nQ29udGV4dCkKICAgICAgICAgICAgIHBhcmFtZXRlcnMtPnNl
dFN0cmluZygiZnJhbWVIYW5kbGUiX3MsIG1fY3VycmVudEJyb3dzaW5nQ29udGV4dC52YWx1ZSgp
KTsKQEAgLTE0MDAsMTYgKzE0NjYsMTkgQEAgdm9pZCBTZXNzaW9uOjpnZXRFbGVtZW50QXR0cmli
dXRlKGNvbnN0IFN0cmluZyYgZWxlbWVudElELCBjb25zdCBTdHJpbmcmIGF0dHJpYnUKICAgICAg
ICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKFdURk1vdmUo
cmVzcG9uc2UucmVzcG9uc2VPYmplY3QpKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAgICAgfQotICAgICAgICAgICAgU3RyaW5nIHZhbHVlU3RyaW5nOwotICAgICAgICAgICAg
aWYgKCFyZXNwb25zZS5yZXNwb25zZU9iamVjdC0+Z2V0U3RyaW5nKCJyZXN1bHQiX3MsIHZhbHVl
U3RyaW5nKSkgeworCisgICAgICAgICAgICBhdXRvIHZhbHVlU3RyaW5nID0gcmVzcG9uc2UucmVz
cG9uc2VPYmplY3QtPmdldFN0cmluZygicmVzdWx0Il9zKTsKKyAgICAgICAgICAgIGlmICghdmFs
dWVTdHJpbmcpIHsKICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVz
dWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVycm9yKSk7CiAgICAg
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgUmVmUHRyPEpT
T046OlZhbHVlPiByZXN1bHRWYWx1ZTsKLSAgICAgICAgICAgIGlmICghSlNPTjo6VmFsdWU6OnBh
cnNlSlNPTih2YWx1ZVN0cmluZywgcmVzdWx0VmFsdWUpKSB7CisKKyAgICAgICAgICAgIGF1dG8g
cmVzdWx0VmFsdWUgPSBKU09OOjpWYWx1ZTo6cGFyc2VKU09OKHZhbHVlU3RyaW5nKTsKKyAgICAg
ICAgICAgIGlmICghcmVzdWx0VmFsdWUpIHsKICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFu
ZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93
bkVycm9yKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQorCiAgICAg
ICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpzdWNjZXNzKFdURk1vdmUo
cmVzdWx0VmFsdWUpKSk7CiAgICAgICAgIH0pOwogICAgIH0pOwpAQCAtMTQyNywxMCArMTQ5Niwx
MCBAQCB2b2lkIFNlc3Npb246OmdldEVsZW1lbnRQcm9wZXJ0eShjb25zdCBTdHJpbmcmIGVsZW1l
bnRJRCwgY29uc3QgU3RyaW5nJiBwcm9wZXJ0eQogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIoV1RGTW92ZShyZXN1bHQpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAg
ICAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IGFyZ3VtZW50cyA9IEpTT046OkFycmF5OjpjcmVhdGUo
KTsKKyAgICAgICAgYXV0byBhcmd1bWVudHMgPSBKU09OOjpBcnJheTo6Y3JlYXRlKCk7CiAgICAg
ICAgIGFyZ3VtZW50cy0+cHVzaFN0cmluZyhjcmVhdGVFbGVtZW50KGVsZW1lbnRJRCktPnRvSlNP
TlN0cmluZygpKTsKIAotICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzID0g
SlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgYXV0byBwYXJhbWV0ZXJzID0gSlNPTjo6
T2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJicm93c2lu
Z0NvbnRleHRIYW5kbGUiX3MsIG1fdG9wbGV2ZWxCcm93c2luZ0NvbnRleHQudmFsdWUoKSk7CiAg
ICAgICAgIGlmIChtX2N1cnJlbnRCcm93c2luZ0NvbnRleHQpCiAgICAgICAgICAgICBwYXJhbWV0
ZXJzLT5zZXRTdHJpbmcoImZyYW1lSGFuZGxlIl9zLCBtX2N1cnJlbnRCcm93c2luZ0NvbnRleHQu
dmFsdWUoKSk7CkBAIC0xNDQxLDE2ICsxNTEwLDE5IEBAIHZvaWQgU2Vzc2lvbjo6Z2V0RWxlbWVu
dFByb3BlcnR5KGNvbnN0IFN0cmluZyYgZWxlbWVudElELCBjb25zdCBTdHJpbmcmIHByb3BlcnR5
CiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChX
VEZNb3ZlKHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0KSkpOwogICAgICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFN0cmluZyB2YWx1ZVN0cmluZzsKLSAgICAg
ICAgICAgIGlmICghcmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdldFN0cmluZygicmVzdWx0Il9z
LCB2YWx1ZVN0cmluZykpIHsKKworICAgICAgICAgICAgYXV0byB2YWx1ZVN0cmluZyA9IHJlc3Bv
bnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRTdHJpbmcoInJlc3VsdCJfcyk7CisgICAgICAgICAgICBp
ZiAoIXZhbHVlU3RyaW5nKSB7CiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29t
bWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikp
OwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFJl
ZlB0cjxKU09OOjpWYWx1ZT4gcmVzdWx0VmFsdWU7Ci0gICAgICAgICAgICBpZiAoIUpTT046OlZh
bHVlOjpwYXJzZUpTT04odmFsdWVTdHJpbmcsIHJlc3VsdFZhbHVlKSkgeworCisgICAgICAgICAg
ICBhdXRvIHJlc3VsdFZhbHVlID0gSlNPTjo6VmFsdWU6OnBhcnNlSlNPTih2YWx1ZVN0cmluZyk7
CisgICAgICAgICAgICBpZiAoIXJlc3VsdFZhbHVlKSB7CiAgICAgICAgICAgICAgICAgY29tcGxl
dGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6
OlVua25vd25FcnJvcikpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0K
KwogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6c3VjY2VzcyhX
VEZNb3ZlKHJlc3VsdFZhbHVlKSkpOwogICAgICAgICB9KTsKICAgICB9KTsKQEAgLTE0NjgsMTAg
KzE1NDAsMTAgQEAgdm9pZCBTZXNzaW9uOjpnZXRFbGVtZW50Q1NTVmFsdWUoY29uc3QgU3RyaW5n
JiBlbGVtZW50SUQsIGNvbnN0IFN0cmluZyYgY3NzUHJvcGUKICAgICAgICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKFdURk1vdmUocmVzdWx0KSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KLSAgICAgICAgUmVmUHRyPEpTT046OkFycmF5PiBhcmd1bWVudHMgPSBKU09OOjpBcnJheTo6
Y3JlYXRlKCk7CisgICAgICAgIGF1dG8gYXJndW1lbnRzID0gSlNPTjo6QXJyYXk6OmNyZWF0ZSgp
OwogICAgICAgICBhcmd1bWVudHMtPnB1c2hTdHJpbmcoY3JlYXRlRWxlbWVudChlbGVtZW50SUQp
LT50b0pTT05TdHJpbmcoKSk7CiAKLSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1l
dGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIGF1dG8gcGFyYW1ldGVycyA9
IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygi
YnJvd3NpbmdDb250ZXh0SGFuZGxlIl9zLCBtX3RvcGxldmVsQnJvd3NpbmdDb250ZXh0LnZhbHVl
KCkpOwogICAgICAgICBpZiAobV9jdXJyZW50QnJvd3NpbmdDb250ZXh0KQogICAgICAgICAgICAg
cGFyYW1ldGVycy0+c2V0U3RyaW5nKCJmcmFtZUhhbmRsZSJfcywgbV9jdXJyZW50QnJvd3NpbmdD
b250ZXh0LnZhbHVlKCkpOwpAQCAtMTQ4MiwxNiArMTU1NCwxOSBAQCB2b2lkIFNlc3Npb246Omdl
dEVsZW1lbnRDU1NWYWx1ZShjb25zdCBTdHJpbmcmIGVsZW1lbnRJRCwgY29uc3QgU3RyaW5nJiBj
c3NQcm9wZQogICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6
OmZhaWwoV1RGTW92ZShyZXNwb25zZS5yZXNwb25zZU9iamVjdCkpKTsKICAgICAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBTdHJpbmcgdmFsdWVTdHJpbmc7
Ci0gICAgICAgICAgICBpZiAoIXJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRTdHJpbmcoInJl
c3VsdCJfcywgdmFsdWVTdHJpbmcpKSB7CisKKyAgICAgICAgICAgIGF1dG8gdmFsdWVTdHJpbmcg
PSByZXNwb25zZS5yZXNwb25zZU9iamVjdC0+Z2V0U3RyaW5nKCJyZXN1bHQiX3MpOworICAgICAg
ICAgICAgaWYgKCF2YWx1ZVN0cmluZykgewogICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5k
bGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtub3du
RXJyb3IpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHJlc3VsdFZhbHVlOwotICAgICAgICAgICAgaWYgKCFK
U09OOjpWYWx1ZTo6cGFyc2VKU09OKHZhbHVlU3RyaW5nLCByZXN1bHRWYWx1ZSkpIHsKKworICAg
ICAgICAgICAgYXV0byByZXN1bHRWYWx1ZSA9IEpTT046OlZhbHVlOjpwYXJzZUpTT04odmFsdWVT
dHJpbmcpOworICAgICAgICAgICAgaWYgKCFyZXN1bHRWYWx1ZSkgewogICAgICAgICAgICAgICAg
IGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJy
b3JDb2RlOjpVbmtub3duRXJyb3IpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
ICAgICB9CisKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OnN1
Y2Nlc3MoV1RGTW92ZShyZXN1bHRWYWx1ZSkpKTsKICAgICAgICAgfSk7CiAgICAgfSk7CkBAIC0x
NTA0LDcgKzE1NzksNyBAQCB2b2lkIFNlc3Npb246OndhaXRGb3JOYXZpZ2F0aW9uVG9Db21wbGV0
ZShGdW5jdGlvbjx2b2lkIChDb21tYW5kUmVzdWx0JiYpPiYmIGNvbQogICAgICAgICByZXR1cm47
CiAgICAgfQogCi0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVycyA9IEpTT046Ok9i
amVjdDo6Y3JlYXRlKCk7CisgICAgYXV0byBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVh
dGUoKTsKICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoImJyb3dzaW5nQ29udGV4dEhhbmRsZSJf
cywgbV90b3BsZXZlbEJyb3dzaW5nQ29udGV4dC52YWx1ZSgpKTsKICAgICBpZiAobV9jdXJyZW50
QnJvd3NpbmdDb250ZXh0KQogICAgICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoImZyYW1lSGFu
ZGxlIl9zLCBtX2N1cnJlbnRCcm93c2luZ0NvbnRleHQudmFsdWUoKSk7CkBAIC0xNTM0LDcgKzE2
MDksNyBAQCB2b2lkIFNlc3Npb246OndhaXRGb3JOYXZpZ2F0aW9uVG9Db21wbGV0ZShGdW5jdGlv
bjx2b2lkIChDb21tYW5kUmVzdWx0JiYpPiYmIGNvbQogCiB2b2lkIFNlc3Npb246OmVsZW1lbnRJ
c0ZpbGVVcGxvYWQoY29uc3QgU3RyaW5nJiBlbGVtZW50SUQsIEZ1bmN0aW9uPHZvaWQgKENvbW1h
bmRSZXN1bHQmJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgUmVmUHRyPEpTT046OkFy
cmF5PiBhcmd1bWVudHMgPSBKU09OOjpBcnJheTo6Y3JlYXRlKCk7CisgICAgYXV0byBhcmd1bWVu
dHMgPSBKU09OOjpBcnJheTo6Y3JlYXRlKCk7CiAgICAgYXJndW1lbnRzLT5wdXNoU3RyaW5nKGNy
ZWF0ZUVsZW1lbnQoZWxlbWVudElEKS0+dG9KU09OU3RyaW5nKCkpOwogCiAgICAgc3RhdGljIGNv
bnN0IGNoYXIgaXNGaWxlVXBsb2FkU2NyaXB0W10gPQpAQCAtMTU0NCw3ICsxNjE5LDcgQEAgdm9p
ZCBTZXNzaW9uOjplbGVtZW50SXNGaWxlVXBsb2FkKGNvbnN0IFN0cmluZyYgZWxlbWVudElELCBG
dW5jdGlvbjx2b2lkIChDb21tYW4KICAgICAgICAgIiAgICByZXR1cm4geyAnZmlsZVVwbG9hZCc6
IGZhbHNlIH07IgogICAgICAgICAifSI7CiAKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJh
bWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBhdXRvIHBhcmFtZXRlcnMgPSBK
U09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiYnJvd3Np
bmdDb250ZXh0SGFuZGxlIl9zLCBtX3RvcGxldmVsQnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwog
ICAgIGlmIChtX2N1cnJlbnRCcm93c2luZ0NvbnRleHQpCiAgICAgICAgIHBhcmFtZXRlcnMtPnNl
dFN0cmluZygiZnJhbWVIYW5kbGUiX3MsIG1fY3VycmVudEJyb3dzaW5nQ29udGV4dC52YWx1ZSgp
KTsKQEAgLTE1NTUsMzIgKzE2MzAsMzUgQEAgdm9pZCBTZXNzaW9uOjplbGVtZW50SXNGaWxlVXBs
b2FkKGNvbnN0IFN0cmluZyYgZWxlbWVudElELCBGdW5jdGlvbjx2b2lkIChDb21tYW4KICAgICAg
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoV1RGTW92ZShyZXNw
b25zZS5yZXNwb25zZU9iamVjdCkpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQot
ICAgICAgICBTdHJpbmcgdmFsdWVTdHJpbmc7Ci0gICAgICAgIGlmICghcmVzcG9uc2UucmVzcG9u
c2VPYmplY3QtPmdldFN0cmluZygicmVzdWx0Il9zLCB2YWx1ZVN0cmluZykpIHsKKworICAgICAg
ICBhdXRvIHZhbHVlU3RyaW5nID0gcmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdldFN0cmluZygi
cmVzdWx0Il9zKTsKKyAgICAgICAgaWYgKCF2YWx1ZVN0cmluZykgewogICAgICAgICAgICAgY29t
cGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNv
ZGU6OlVua25vd25FcnJvcikpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAg
ICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gcmVzdWx0VmFsdWU7Ci0gICAgICAgIGlmICghSlNPTjo6
VmFsdWU6OnBhcnNlSlNPTih2YWx1ZVN0cmluZywgcmVzdWx0VmFsdWUpKSB7CisKKyAgICAgICAg
YXV0byByZXN1bHRWYWx1ZSA9IEpTT046OlZhbHVlOjpwYXJzZUpTT04odmFsdWVTdHJpbmcpOwor
ICAgICAgICBpZiAoIXJlc3VsdFZhbHVlKSB7CiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVy
cm9yKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KKwogICAgICAgICBjb21wbGV0
aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpzdWNjZXNzKFdURk1vdmUocmVzdWx0VmFsdWUpKSk7
CiAgICAgfSk7CiB9CiAKIE9wdGlvbmFsPFNlc3Npb246OkZpbGVVcGxvYWRUeXBlPiBTZXNzaW9u
OjpwYXJzZUVsZW1lbnRJc0ZpbGVVcGxvYWRSZXN1bHQoY29uc3QgUmVmUHRyPEpTT046OlZhbHVl
PiYgcmVzdWx0VmFsdWUpCiB7Ci0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcmVzdWx0OwotICAg
IGlmICghcmVzdWx0VmFsdWUtPmFzT2JqZWN0KHJlc3VsdCkpCisgICAgYXV0byByZXN1bHQgPSBy
ZXN1bHRWYWx1ZS0+YXNPYmplY3QoKTsKKyAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKIAotICAgIGJvb2wgaXNGaWxlVXBsb2FkOwotICAgIGlmICghcmVzdWx0
LT5nZXRCb29sZWFuKCJmaWxlVXBsb2FkIl9zLCBpc0ZpbGVVcGxvYWQpIHx8ICFpc0ZpbGVVcGxv
YWQpCisgICAgYXV0byBpc0ZpbGVVcGxvYWQgPSByZXN1bHQtPmdldEJvb2xlYW4oImZpbGVVcGxv
YWQiXyk7CisgICAgaWYgKCFpc0ZpbGVVcGxvYWQgfHwgISppc0ZpbGVVcGxvYWQpCiAgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBib29sIG11bHRpcGxlOwotICAgIGlmICghcmVz
dWx0LT5nZXRCb29sZWFuKCJtdWx0aXBsZSJfcywgbXVsdGlwbGUpIHx8ICFtdWx0aXBsZSkKKyAg
ICBhdXRvIG11bHRpcGxlID0gcmVzdWx0LT5nZXRCb29sZWFuKCJtdWx0aXBsZSJfKTsKKyAgICBp
ZiAoIW11bHRpcGxlIHx8ICEqbXVsdGlwbGUpCiAgICAgICAgIHJldHVybiBGaWxlVXBsb2FkVHlw
ZTo6U2luZ2xlOwogCiAgICAgcmV0dXJuIEZpbGVVcGxvYWRUeXBlOjpNdWx0aXBsZTsKQEAgLTE1
ODgsNyArMTY2Niw3IEBAIE9wdGlvbmFsPFNlc3Npb246OkZpbGVVcGxvYWRUeXBlPiBTZXNzaW9u
OjpwYXJzZUVsZW1lbnRJc0ZpbGVVcGxvYWRSZXN1bHQoY29uc3QKIAogdm9pZCBTZXNzaW9uOjpz
ZWxlY3RPcHRpb25FbGVtZW50KGNvbnN0IFN0cmluZyYgZWxlbWVudElELCBGdW5jdGlvbjx2b2lk
IChDb21tYW5kUmVzdWx0JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIFJlZlB0cjxK
U09OOjpPYmplY3Q+IHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGF1
dG8gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgcGFyYW1ldGVycy0+
c2V0U3RyaW5nKCJicm93c2luZ0NvbnRleHRIYW5kbGUiX3MsIG1fdG9wbGV2ZWxCcm93c2luZ0Nv
bnRleHQudmFsdWUoKSk7CiAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJmcmFtZUhhbmRsZSJf
cywgbV9jdXJyZW50QnJvd3NpbmdDb250ZXh0LnZhbHVlT3IoZW1wdHlTdHJpbmcoKSkpOwogICAg
IHBhcmFtZXRlcnMtPnNldFN0cmluZygibm9kZUhhbmRsZSJfcywgZWxlbWVudElEKTsKQEAgLTE2
NDEsOCArMTcxOSw4IEBAIHZvaWQgU2Vzc2lvbjo6ZWxlbWVudENsaWNrKGNvbnN0IFN0cmluZyYg
ZWxlbWVudElELCBGdW5jdGlvbjx2b2lkIChDb21tYW5kUmVzdWx0CiAgICAgICAgICAgICAgICAg
Z2V0RWxlbWVudFRhZ05hbWUoZWxlbWVudElELCBbdGhpcywgZWxlbWVudElELCBpblZpZXdDZW50
ZXIgPSBXVEZNb3ZlKGluVmlld0NlbnRlciksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcildKENvbW1hbmRSZXN1bHQmJiByZXN1bHQpIG11dGFibGUgewogICAg
ICAgICAgICAgICAgICAgICBib29sIGlzT3B0aW9uRWxlbWVudCA9IGZhbHNlOwogICAgICAgICAg
ICAgICAgICAgICBpZiAoIXJlc3VsdC5pc0Vycm9yKCkpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIFN0cmluZyB0YWdOYW1lOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5y
ZXN1bHQoKS0+YXNTdHJpbmcodGFnTmFtZSkpCisgICAgICAgICAgICAgICAgICAgICAgICBhdXRv
IHRhZ05hbWUgPSByZXN1bHQucmVzdWx0KCktPmFzU3RyaW5nKCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoISF0YWdOYW1lKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzT3B0
aW9uRWxlbWVudCA9IHRhZ05hbWUgPT0gIm9wdGlvbiI7CiAgICAgICAgICAgICAgICAgICAgIH0K
IApAQCAtMTY2Niw3ICsxNzQ0LDcgQEAgdm9pZCBTZXNzaW9uOjplbGVtZW50Q2xpY2soY29uc3Qg
U3RyaW5nJiBlbGVtZW50SUQsIEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSZXN1bHQKIAogdm9pZCBT
ZXNzaW9uOjplbGVtZW50SXNFZGl0YWJsZShjb25zdCBTdHJpbmcmIGVsZW1lbnRJRCwgRnVuY3Rp
b248dm9pZCAoQ29tbWFuZFJlc3VsdCYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBS
ZWZQdHI8SlNPTjo6QXJyYXk+IGFyZ3VtZW50cyA9IEpTT046OkFycmF5OjpjcmVhdGUoKTsKKyAg
ICBhdXRvIGFyZ3VtZW50cyA9IEpTT046OkFycmF5OjpjcmVhdGUoKTsKICAgICBhcmd1bWVudHMt
PnB1c2hTdHJpbmcoY3JlYXRlRWxlbWVudChlbGVtZW50SUQpLT50b0pTT05TdHJpbmcoKSk7CiAK
ICAgICBzdGF0aWMgY29uc3QgY2hhciBpc0VkaXRhYmxlU2NyaXB0W10gPQpAQCAtMTY4Niw3ICsx
NzY0LDcgQEAgdm9pZCBTZXNzaW9uOjplbGVtZW50SXNFZGl0YWJsZShjb25zdCBTdHJpbmcmIGVs
ZW1lbnRJRCwgRnVuY3Rpb248dm9pZCAoQ29tbWFuZFIKICAgICAgICAgIiAgICByZXR1cm4gZmFs
c2U7IgogICAgICAgICAifSI7CiAKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJz
ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU09OOjpP
YmplY3Q6OmNyZWF0ZSgpOwogICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiYnJvd3NpbmdDb250
ZXh0SGFuZGxlIl9zLCBtX3RvcGxldmVsQnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwogICAgIGlm
IChtX2N1cnJlbnRCcm93c2luZ0NvbnRleHQpCiAgICAgICAgIHBhcmFtZXRlcnMtPnNldFN0cmlu
ZygiZnJhbWVIYW5kbGUiX3MsIG1fY3VycmVudEJyb3dzaW5nQ29udGV4dC52YWx1ZSgpKTsKQEAg
LTE2OTcsMTYgKzE3NzUsMTkgQEAgdm9pZCBTZXNzaW9uOjplbGVtZW50SXNFZGl0YWJsZShjb25z
dCBTdHJpbmcmIGVsZW1lbnRJRCwgRnVuY3Rpb248dm9pZCAoQ29tbWFuZFIKICAgICAgICAgICAg
IGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoV1RGTW92ZShyZXNwb25zZS5y
ZXNwb25zZU9iamVjdCkpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAg
ICBTdHJpbmcgdmFsdWVTdHJpbmc7Ci0gICAgICAgIGlmICghcmVzcG9uc2UucmVzcG9uc2VPYmpl
Y3QtPmdldFN0cmluZygicmVzdWx0Il9zLCB2YWx1ZVN0cmluZykpIHsKKworICAgICAgICBhdXRv
IHZhbHVlU3RyaW5nID0gcmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdldFN0cmluZygicmVzdWx0
Il9zKTsKKyAgICAgICAgaWYgKCF2YWx1ZVN0cmluZykgewogICAgICAgICAgICAgY29tcGxldGlv
bkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OlVu
a25vd25FcnJvcikpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIFJl
ZlB0cjxKU09OOjpWYWx1ZT4gcmVzdWx0VmFsdWU7Ci0gICAgICAgIGlmICghSlNPTjo6VmFsdWU6
OnBhcnNlSlNPTih2YWx1ZVN0cmluZywgcmVzdWx0VmFsdWUpKSB7CisKKyAgICAgICAgYXV0byBy
ZXN1bHRWYWx1ZSA9IEpTT046OlZhbHVlOjpwYXJzZUpTT04odmFsdWVTdHJpbmcpOworICAgICAg
ICBpZiAoIXJlc3VsdFZhbHVlKSB7CiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21t
YW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVycm9yKSk7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KKwogICAgICAgICBjb21wbGV0aW9uSGFu
ZGxlcihDb21tYW5kUmVzdWx0OjpzdWNjZXNzKFdURk1vdmUocmVzdWx0VmFsdWUpKSk7CiAgICAg
fSk7CiB9CkBAIC0xNzMwLDggKzE4MTEsOCBAQCB2b2lkIFNlc3Npb246OmVsZW1lbnRDbGVhcihj
b25zdCBTdHJpbmcmIGVsZW1lbnRJRCwgRnVuY3Rpb248dm9pZCAoQ29tbWFuZFJlc3VsdAogICAg
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgYm9vbCBp
c0VkaXRhYmxlOwotICAgICAgICAgICAgaWYgKCFyZXN1bHQucmVzdWx0KCktPmFzQm9vbGVhbihp
c0VkaXRhYmxlKSB8fCAhaXNFZGl0YWJsZSkgeworICAgICAgICAgICAgYXV0byBpc0VkaXRhYmxl
ID0gcmVzdWx0LnJlc3VsdCgpLT5hc0Jvb2xlYW4oKTsKKyAgICAgICAgICAgIGlmICghaXNFZGl0
YWJsZSB8fCAhKmlzRWRpdGFibGUpIHsKICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6SW52YWxpZEVs
ZW1lbnRTdGF0ZSkpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KQEAg
LTE3NDYsMTAgKzE4MjcsMTAgQEAgdm9pZCBTZXNzaW9uOjplbGVtZW50Q2xlYXIoY29uc3QgU3Ry
aW5nJiBlbGVtZW50SUQsIEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSZXN1bHQKICAgICAgICAgICAg
ICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVz
dWx0OjpFcnJvckNvZGU6OkVsZW1lbnROb3RJbnRlcmFjdGFibGUpKTsKICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBSZWZQdHI8
SlNPTjo6QXJyYXk+IGFyZ3VtZW50cyA9IEpTT046OkFycmF5OjpjcmVhdGUoKTsKKyAgICAgICAg
ICAgICAgICBhdXRvIGFyZ3VtZW50cyA9IEpTT046OkFycmF5OjpjcmVhdGUoKTsKICAgICAgICAg
ICAgICAgICBhcmd1bWVudHMtPnB1c2hTdHJpbmcoY3JlYXRlRWxlbWVudChlbGVtZW50SUQpLT50
b0pTT05TdHJpbmcoKSk7CiAKLSAgICAgICAgICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBw
YXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgICAgICAgICBhdXRv
IHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICAgICAgICAgIHBh
cmFtZXRlcnMtPnNldFN0cmluZygiYnJvd3NpbmdDb250ZXh0SGFuZGxlIl9zLCBtX3RvcGxldmVs
QnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwogICAgICAgICAgICAgICAgIGlmIChtX2N1cnJlbnRC
cm93c2luZ0NvbnRleHQpCiAgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMtPnNldFN0cmlu
ZygiZnJhbWVIYW5kbGUiX3MsIG1fY3VycmVudEJyb3dzaW5nQ29udGV4dC52YWx1ZSgpKTsKQEAg
LTE3ODAsNyArMTg2MSw3IEBAIHZvaWQgU2Vzc2lvbjo6c2V0SW5wdXRGaWxlVXBsb2FkRmlsZXMo
Y29uc3QgU3RyaW5nJiBlbGVtZW50SUQsIGNvbnN0IFN0cmluZyYgdGV4CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKLSAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IGZpbGVuYW1lcyA9IEpTT046OkFy
cmF5OjpjcmVhdGUoKTsKKyAgICBhdXRvIGZpbGVuYW1lcyA9IEpTT046OkFycmF5OjpjcmVhdGUo
KTsKICAgICBmb3IgKGNvbnN0IGF1dG8mIGZpbGUgOiBmaWxlcykgewogICAgICAgICBpZiAoIUZp
bGVTeXN0ZW06OmZpbGVFeGlzdHMoZmlsZSkpIHsKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5k
bGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpJbnZhbGlk
QXJndW1lbnQpKTsKQEAgLTE3ODksNyArMTg3MCw3IEBAIHZvaWQgU2Vzc2lvbjo6c2V0SW5wdXRG
aWxlVXBsb2FkRmlsZXMoY29uc3QgU3RyaW5nJiBlbGVtZW50SUQsIGNvbnN0IFN0cmluZyYgdGV4
CiAgICAgICAgIGZpbGVuYW1lcy0+cHVzaFN0cmluZyhmaWxlKTsKICAgICB9CiAKLSAgICBSZWZQ
dHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAg
ICBhdXRvIHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgIHBhcmFtZXRl
cnMtPnNldFN0cmluZygiYnJvd3NpbmdDb250ZXh0SGFuZGxlIl9zLCBtX3RvcGxldmVsQnJvd3Np
bmdDb250ZXh0LnZhbHVlKCkpOwogICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiZnJhbWVIYW5k
bGUiX3MsIG1fY3VycmVudEJyb3dzaW5nQ29udGV4dC52YWx1ZU9yKGVtcHR5U3RyaW5nKCkpKTsK
ICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoIm5vZGVIYW5kbGUiX3MsIGVsZW1lbnRJRCk7CkBA
IC0xOTgwLDkgKzIwNjEsOSBAQCB2b2lkIFNlc3Npb246OmVsZW1lbnRTZW5kS2V5cyhjb25zdCBT
dHJpbmcmIGVsZW1lbnRJRCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBGdW5jdAogICAgICAgICAgICAg
ICAgICAgICAiICAgICAgICB0aHJvdyB7bmFtZTogJ0VsZW1lbnROb3RJbnRlcmFjdGFibGUnLCBt
ZXNzYWdlOiAnRWxlbWVudCBpcyBub3QgZm9jdXNhYmxlLid9OyIKICAgICAgICAgICAgICAgICAg
ICAgIn0iOwogCi0gICAgICAgICAgICAgICAgUmVmUHRyPEpTT046OkFycmF5PiBhcmd1bWVudHMg
PSBKU09OOjpBcnJheTo6Y3JlYXRlKCk7CisgICAgICAgICAgICAgICAgYXV0byBhcmd1bWVudHMg
PSBKU09OOjpBcnJheTo6Y3JlYXRlKCk7CiAgICAgICAgICAgICAgICAgYXJndW1lbnRzLT5wdXNo
U3RyaW5nKGNyZWF0ZUVsZW1lbnQoZWxlbWVudElEKS0+dG9KU09OU3RyaW5nKCkpOwotICAgICAg
ICAgICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6
OmNyZWF0ZSgpOworICAgICAgICAgICAgICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTT046Ok9iamVj
dDo6Y3JlYXRlKCk7CiAgICAgICAgICAgICAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJicm93
c2luZ0NvbnRleHRIYW5kbGUiX3MsIG1fdG9wbGV2ZWxCcm93c2luZ0NvbnRleHQudmFsdWUoKSk7
CiAgICAgICAgICAgICAgICAgaWYgKG1fY3VycmVudEJyb3dzaW5nQ29udGV4dCkKICAgICAgICAg
ICAgICAgICAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJmcmFtZUhhbmRsZSJfcywgbV9jdXJy
ZW50QnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwpAQCAtMjA1Niw3ICsyMTM3LDcgQEAgdm9pZCBT
ZXNzaW9uOjpnZXRQYWdlU291cmNlKEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSZXN1bHQmJik+JiYg
Y29tcGxldGlvbkhhbmRsZXIKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUo
cmVzdWx0KSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgUmVmUHRy
PEpTT046Ok9iamVjdD4gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAg
ICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgIHBh
cmFtZXRlcnMtPnNldFN0cmluZygiYnJvd3NpbmdDb250ZXh0SGFuZGxlIl9zLCBtX3RvcGxldmVs
QnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwogICAgICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmco
ImZ1bmN0aW9uIl9zLCAiZnVuY3Rpb24oKSB7IHJldHVybiBkb2N1bWVudC5kb2N1bWVudEVsZW1l
bnQub3V0ZXJIVE1MOyB9Il9zKTsKICAgICAgICAgcGFyYW1ldGVycy0+c2V0QXJyYXkoImFyZ3Vt
ZW50cyJfcywgSlNPTjo6QXJyYXk6OmNyZWF0ZSgpKTsKQEAgLTIwNjUsMjYgKzIxNDYsMjggQEAg
dm9pZCBTZXNzaW9uOjpnZXRQYWdlU291cmNlKEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSZXN1bHQm
Jik+JiYgY29tcGxldGlvbkhhbmRsZXIKICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cihDb21tYW5kUmVzdWx0OjpmYWlsKFdURk1vdmUocmVzcG9uc2UucmVzcG9uc2VPYmplY3QpKSk7
CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgU3Ry
aW5nIHZhbHVlU3RyaW5nOwotICAgICAgICAgICAgaWYgKCFyZXNwb25zZS5yZXNwb25zZU9iamVj
dC0+Z2V0U3RyaW5nKCJyZXN1bHQiX3MsIHZhbHVlU3RyaW5nKSkgeworCisgICAgICAgICAgICBh
dXRvIHZhbHVlU3RyaW5nID0gcmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdldFN0cmluZygicmVz
dWx0Il9zKTsKKyAgICAgICAgICAgIGlmICghdmFsdWVTdHJpbmcpIHsKICAgICAgICAgICAgICAg
ICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVy
cm9yQ29kZTo6VW5rbm93bkVycm9yKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICAgICAgfQotICAgICAgICAgICAgUmVmUHRyPEpTT046OlZhbHVlPiByZXN1bHRWYWx1ZTsKLSAg
ICAgICAgICAgIGlmICghSlNPTjo6VmFsdWU6OnBhcnNlSlNPTih2YWx1ZVN0cmluZywgcmVzdWx0
VmFsdWUpKSB7CisKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0VmFsdWUgPSBKU09OOjpWYWx1ZTo6
cGFyc2VKU09OKHZhbHVlU3RyaW5nKTsKKyAgICAgICAgICAgIGlmICghcmVzdWx0VmFsdWUpIHsK
ICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENv
bW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVycm9yKSk7CiAgICAgICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihD
b21tYW5kUmVzdWx0OjpzdWNjZXNzKFdURk1vdmUocmVzdWx0VmFsdWUpKSk7CiAgICAgICAgIH0p
OwogICAgIH0pOwogfQogCi1SZWZQdHI8SlNPTjo6VmFsdWU+IFNlc3Npb246OmhhbmRsZVNjcmlw
dFJlc3VsdChSZWZQdHI8SlNPTjo6VmFsdWU+JiYgcmVzdWx0VmFsdWUpCitSZWY8SlNPTjo6VmFs
dWU+IFNlc3Npb246OmhhbmRsZVNjcmlwdFJlc3VsdChSZWY8SlNPTjo6VmFsdWU+JiYgcmVzdWx0
VmFsdWUpCiB7Ci0gICAgUmVmUHRyPEpTT046OkFycmF5PiByZXN1bHRBcnJheTsKLSAgICBpZiAo
cmVzdWx0VmFsdWUtPmFzQXJyYXkocmVzdWx0QXJyYXkpKSB7Ci0gICAgICAgIFJlZlB0cjxKU09O
OjpBcnJheT4gcmV0dXJuVmFsdWVBcnJheSA9IEpTT046OkFycmF5OjpjcmVhdGUoKTsKKyAgICBp
ZiAoYXV0byByZXN1bHRBcnJheSA9IHJlc3VsdFZhbHVlLT5hc0FycmF5KCkpIHsKKyAgICAgICAg
YXV0byByZXR1cm5WYWx1ZUFycmF5ID0gSlNPTjo6QXJyYXk6OmNyZWF0ZSgpOwogICAgICAgICB1
bnNpZ25lZCByZXN1bHRBcnJheUxlbmd0aCA9IHJlc3VsdEFycmF5LT5sZW5ndGgoKTsKICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlc3VsdEFycmF5TGVuZ3RoOyArK2kpCiAgICAg
ICAgICAgICByZXR1cm5WYWx1ZUFycmF5LT5wdXNoVmFsdWUoaGFuZGxlU2NyaXB0UmVzdWx0KHJl
c3VsdEFycmF5LT5nZXQoaSkpKTsKQEAgLTIwOTQsOSArMjE3Nyw4IEBAIFJlZlB0cjxKU09OOjpW
YWx1ZT4gU2Vzc2lvbjo6aGFuZGxlU2NyaXB0UmVzdWx0KFJlZlB0cjxKU09OOjpWYWx1ZT4mJiBy
ZXN1bHRWYWx1CiAgICAgaWYgKGF1dG8gZWxlbWVudCA9IGNyZWF0ZUVsZW1lbnQoUmVmUHRyPEpT
T046OlZhbHVlPihyZXN1bHRWYWx1ZSkpKQogICAgICAgICByZXR1cm4gZWxlbWVudDsKIAotICAg
IFJlZlB0cjxKU09OOjpPYmplY3Q+IHJlc3VsdE9iamVjdDsKLSAgICBpZiAocmVzdWx0VmFsdWUt
PmFzT2JqZWN0KHJlc3VsdE9iamVjdCkpIHsKLSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4g
cmV0dXJuVmFsdWVPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGlmIChhdXRv
IHJlc3VsdE9iamVjdCA9IHJlc3VsdFZhbHVlLT5hc09iamVjdCgpKSB7CisgICAgICAgIGF1dG8g
cmV0dXJuVmFsdWVPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICBhdXRv
IGVuZCA9IHJlc3VsdE9iamVjdC0+ZW5kKCk7CiAgICAgICAgIGZvciAoYXV0byBpdCA9IHJlc3Vs
dE9iamVjdC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQogICAgICAgICAgICAgcmV0dXJuVmFs
dWVPYmplY3QtPnNldFZhbHVlKGl0LT5rZXksIGhhbmRsZVNjcmlwdFJlc3VsdChXVEZNb3ZlKGl0
LT52YWx1ZSkpKTsKQEAgLTIxMTgsNyArMjIwMCw3IEBAIHZvaWQgU2Vzc2lvbjo6ZXhlY3V0ZVNj
cmlwdChjb25zdCBTdHJpbmcmIHNjcmlwdCwgUmVmUHRyPEpTT046OkFycmF5PiYmIGFyZ3VtZW50
CiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKHJlc3VsdCkpOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIFJlZlB0cjxKU09OOjpBcnJheT4gYXJn
dW1lbnRzID0gSlNPTjo6QXJyYXk6OmNyZWF0ZSgpOworICAgICAgICBhdXRvIGFyZ3VtZW50cyA9
IEpTT046OkFycmF5OjpjcmVhdGUoKTsKICAgICAgICAgdW5zaWduZWQgYXJndW1lbnRzTGVuZ3Ro
ID0gYXJndW1lbnRzQXJyYXktPmxlbmd0aCgpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgYXJndW1lbnRzTGVuZ3RoOyArK2kpIHsKICAgICAgICAgICAgIGlmIChhdXRvIGFyZ3Vt
ZW50ID0gYXJndW1lbnRzQXJyYXktPmdldChpKSkgewpAQCAtMjEyOSw3ICsyMjExLDcgQEAgdm9p
ZCBTZXNzaW9uOjpleGVjdXRlU2NyaXB0KGNvbnN0IFN0cmluZyYgc2NyaXB0LCBSZWZQdHI8SlNP
Tjo6QXJyYXk+JiYgYXJndW1lbnQKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAg
IFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgp
OworICAgICAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAg
ICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoImJyb3dzaW5nQ29udGV4dEhhbmRsZSJfcywgbV90
b3BsZXZlbEJyb3dzaW5nQ29udGV4dC52YWx1ZSgpKTsKICAgICAgICAgaWYgKG1fY3VycmVudEJy
b3dzaW5nQ29udGV4dCkKICAgICAgICAgICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiZnJhbWVI
YW5kbGUiX3MsIG1fY3VycmVudEJyb3dzaW5nQ29udGV4dC52YWx1ZSgpKTsKQEAgLTIxNDgsMTYg
KzIyMzAsMTkgQEAgdm9pZCBTZXNzaW9uOjpleGVjdXRlU2NyaXB0KGNvbnN0IFN0cmluZyYgc2Ny
aXB0LCBSZWZQdHI8SlNPTjo6QXJyYXk+JiYgYXJndW1lbnQKICAgICAgICAgICAgICAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShyZXN1bHQpKTsKICAgICAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBTdHJpbmcgdmFsdWVTdHJpbmc7Ci0gICAg
ICAgICAgICBpZiAoIXJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRTdHJpbmcoInJlc3VsdCJf
cywgdmFsdWVTdHJpbmcpKSB7CisKKyAgICAgICAgICAgIGF1dG8gdmFsdWVTdHJpbmcgPSByZXNw
b25zZS5yZXNwb25zZU9iamVjdC0+Z2V0U3RyaW5nKCJyZXN1bHQiX3MpOworICAgICAgICAgICAg
aWYgKCF2YWx1ZVN0cmluZykgewogICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENv
bW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3Ip
KTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBS
ZWZQdHI8SlNPTjo6VmFsdWU+IHJlc3VsdFZhbHVlOwotICAgICAgICAgICAgaWYgKCFKU09OOjpW
YWx1ZTo6cGFyc2VKU09OKHZhbHVlU3RyaW5nLCByZXN1bHRWYWx1ZSkpIHsKKworICAgICAgICAg
ICAgYXV0byByZXN1bHRWYWx1ZSA9IEpTT046OlZhbHVlOjpwYXJzZUpTT04odmFsdWVTdHJpbmcp
OworICAgICAgICAgICAgaWYgKCFyZXN1bHRWYWx1ZSkgewogICAgICAgICAgICAgICAgIGNvbXBs
ZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2Rl
OjpVbmtub3duRXJyb3IpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9
CisKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OnN1Y2Nlc3Mo
aGFuZGxlU2NyaXB0UmVzdWx0KFdURk1vdmUocmVzdWx0VmFsdWUpKSkpOwogICAgICAgICB9KTsK
ICAgICB9KTsKQEAgLTIxODEsOSArMjI2Niw5IEBAIHN0YXRpYyBTdHJpbmcgbW91c2VCdXR0b25G
b3JBdXRvbWF0aW9uKE1vdXNlQnV0dG9uIGJ1dHRvbikKIAogdm9pZCBTZXNzaW9uOjpwZXJmb3Jt
TW91c2VJbnRlcmFjdGlvbihpbnQgeCwgaW50IHksIE1vdXNlQnV0dG9uIGJ1dHRvbiwgTW91c2VJ
bnRlcmFjdGlvbiBpbnRlcmFjdGlvbiwgRnVuY3Rpb248dm9pZCAoQ29tbWFuZFJlc3VsdCYmKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0
ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU09O
OjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiaGFuZGxlIl9z
LCBtX3RvcGxldmVsQnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwotICAgIFJlZlB0cjxKU09OOjpP
YmplY3Q+IHBvc2l0aW9uID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBhdXRvIHBvc2l0
aW9uID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICBwb3NpdGlvbi0+c2V0SW50ZWdlcigi
eCJfcywgeCk7CiAgICAgcG9zaXRpb24tPnNldEludGVnZXIoInkiX3MsIHkpOwogICAgIHBhcmFt
ZXRlcnMtPnNldE9iamVjdCgicG9zaXRpb24iX3MsIFdURk1vdmUocG9zaXRpb24pKTsKQEAgLTIy
MTcsMTEgKzIzMDIsMTEgQEAgdm9pZCBTZXNzaW9uOjpwZXJmb3JtTW91c2VJbnRlcmFjdGlvbihp
bnQgeCwgaW50IHksIE1vdXNlQnV0dG9uIGJ1dHRvbiwgTW91c2VJbnQKIAogdm9pZCBTZXNzaW9u
OjpwZXJmb3JtS2V5Ym9hcmRJbnRlcmFjdGlvbnMoVmVjdG9yPEtleWJvYXJkSW50ZXJhY3Rpb24+
JiYgaW50ZXJhY3Rpb25zLCBGdW5jdGlvbjx2b2lkIChDb21tYW5kUmVzdWx0JiYpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQogewotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnMgPSBK
U09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTT046Ok9iamVj
dDo6Y3JlYXRlKCk7CiAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJoYW5kbGUiX3MsIG1fdG9w
bGV2ZWxCcm93c2luZ0NvbnRleHQudmFsdWUoKSk7Ci0gICAgUmVmUHRyPEpTT046OkFycmF5PiBp
bnRlcmFjdGlvbnNBcnJheSA9IEpTT046OkFycmF5OjpjcmVhdGUoKTsKKyAgICBhdXRvIGludGVy
YWN0aW9uc0FycmF5ID0gSlNPTjo6QXJyYXk6OmNyZWF0ZSgpOwogICAgIGZvciAoY29uc3QgYXV0
byYgaW50ZXJhY3Rpb24gOiBpbnRlcmFjdGlvbnMpIHsKLSAgICAgICAgUmVmUHRyPEpTT046Ok9i
amVjdD4gaW50ZXJhY3Rpb25PYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgICAg
ICBhdXRvIGludGVyYWN0aW9uT2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICAg
ICAgc3dpdGNoIChpbnRlcmFjdGlvbi50eXBlKSB7CiAgICAgICAgIGNhc2UgS2V5Ym9hcmRJbnRl
cmFjdGlvblR5cGU6OktleVByZXNzOgogICAgICAgICAgICAgaW50ZXJhY3Rpb25PYmplY3QtPnNl
dFN0cmluZygidHlwZSJfcywgIktleVByZXNzIl9zKTsKQEAgLTIyODAsOSArMjM2NSw5IEBAIHN0
YXRpYyBPcHRpb25hbDxTZXNzaW9uOjpDb29raWU+IHBhcnNlQXV0b21hdGlvbkNvb2tpZShjb25z
dCBKU09OOjpPYmplY3QmIGNvb2tpCiAgICAgcmV0dXJuIGNvb2tpZTsKIH0KIAotc3RhdGljIFJl
ZlB0cjxKU09OOjpPYmplY3Q+IGJ1aWx0QXV0b21hdGlvbkNvb2tpZShjb25zdCBTZXNzaW9uOjpD
b29raWUmIGNvb2tpZSkKK3N0YXRpYyBSZWY8SlNPTjo6T2JqZWN0PiBidWlsdEF1dG9tYXRpb25D
b29raWUoY29uc3QgU2Vzc2lvbjo6Q29va2llJiBjb29raWUpCiB7Ci0gICAgUmVmUHRyPEpTT046
Ok9iamVjdD4gY29va2llT2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBhdXRv
IGNvb2tpZU9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgY29va2llT2JqZWN0
LT5zZXRTdHJpbmcoIm5hbWUiX3MsIGNvb2tpZS5uYW1lKTsKICAgICBjb29raWVPYmplY3QtPnNl
dFN0cmluZygidmFsdWUiX3MsIGNvb2tpZS52YWx1ZSk7CiAgICAgY29va2llT2JqZWN0LT5zZXRT
dHJpbmcoInBhdGgiX3MsIGNvb2tpZS5wYXRoLnZhbHVlT3IoIi8iKSk7CkBAIC0yMjk0LDkgKzIz
NzksOSBAQCBzdGF0aWMgUmVmUHRyPEpTT046Ok9iamVjdD4gYnVpbHRBdXRvbWF0aW9uQ29va2ll
KGNvbnN0IFNlc3Npb246OkNvb2tpZSYgY29va2llKQogICAgIHJldHVybiBjb29raWVPYmplY3Q7
CiB9CiAKLXN0YXRpYyBSZWZQdHI8SlNPTjo6T2JqZWN0PiBzZXJpYWxpemVDb29raWUoY29uc3Qg
U2Vzc2lvbjo6Q29va2llJiBjb29raWUpCitzdGF0aWMgUmVmPEpTT046Ok9iamVjdD4gc2VyaWFs
aXplQ29va2llKGNvbnN0IFNlc3Npb246OkNvb2tpZSYgY29va2llKQogewotICAgIFJlZlB0cjxK
U09OOjpPYmplY3Q+IGNvb2tpZU9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAg
YXV0byBjb29raWVPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgIGNvb2tpZU9i
amVjdC0+c2V0U3RyaW5nKCJuYW1lIl9zLCBjb29raWUubmFtZSk7CiAgICAgY29va2llT2JqZWN0
LT5zZXRTdHJpbmcoInZhbHVlIl9zLCBjb29raWUudmFsdWUpOwogICAgIGlmIChjb29raWUucGF0
aCkKQEAgLTIzMjUsMjMgKzI0MTAsMjQgQEAgdm9pZCBTZXNzaW9uOjpnZXRBbGxDb29raWVzKEZ1
bmN0aW9uPHZvaWQgKENvbW1hbmRSZXN1bHQmJik+JiYgY29tcGxldGlvbkhhbmRsZXIKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+
IHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBhdXRvIHBhcmFt
ZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICBwYXJhbWV0ZXJzLT5zZXRT
dHJpbmcoImJyb3dzaW5nQ29udGV4dEhhbmRsZSJfcywgbV90b3BsZXZlbEJyb3dzaW5nQ29udGV4
dC52YWx1ZSgpKTsKICAgICAgICAgbV9ob3N0LT5zZW5kQ29tbWFuZFRvQmFja2VuZCgiZ2V0QWxs
Q29va2llcyJfcywgV1RGTW92ZShwYXJhbWV0ZXJzKSwgW3Byb3RlY3RlZFRoaXMsIGNvbXBsZXRp
b25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKFNlc3Npb25Ib3N0OjpDb21t
YW5kUmVzcG9uc2UmJiByZXNwb25zZSkgbXV0YWJsZSB7CiAgICAgICAgICAgICBpZiAocmVzcG9u
c2UuaXNFcnJvciB8fCAhcmVzcG9uc2UucmVzcG9uc2VPYmplY3QpIHsKICAgICAgICAgICAgICAg
ICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKFdURk1vdmUocmVzcG9uc2Uu
cmVzcG9uc2VPYmplY3QpKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAg
fQotICAgICAgICAgICAgUmVmUHRyPEpTT046OkFycmF5PiBjb29raWVzQXJyYXk7Ci0gICAgICAg
ICAgICBpZiAoIXJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRBcnJheSgiY29va2llcyJfcywg
Y29va2llc0FycmF5KSkgeworCisgICAgICAgICAgICBhdXRvIGNvb2tpZXNBcnJheSA9IHJlc3Bv
bnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRBcnJheSgiY29va2llcyJfcyk7CisgICAgICAgICAgICBp
ZiAoIWNvb2tpZXNBcnJheSkgewogICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENv
bW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3Ip
KTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBS
ZWZQdHI8SlNPTjo6QXJyYXk+IGNvb2tpZXMgPSBKU09OOjpBcnJheTo6Y3JlYXRlKCk7CisKKyAg
ICAgICAgICAgIGF1dG8gY29va2llcyA9IEpTT046OkFycmF5OjpjcmVhdGUoKTsKICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb29raWVzQXJyYXktPmxlbmd0aCgpOyArK2kp
IHsKLSAgICAgICAgICAgICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IGNvb2tpZVZhbHVlID0gY29v
a2llc0FycmF5LT5nZXQoaSk7Ci0gICAgICAgICAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4g
Y29va2llT2JqZWN0OwotICAgICAgICAgICAgICAgIGlmICghY29va2llVmFsdWUtPmFzT2JqZWN0
KGNvb2tpZU9iamVjdCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvIGNvb2tpZU9iamVjdCA9IGNv
b2tpZXNBcnJheS0+Z2V0KGkpLT5hc09iamVjdCgpOworICAgICAgICAgICAgICAgIGlmICghY29v
a2llT2JqZWN0KSB7CiAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1h
bmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsK
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIH0KQEAgLTIzNjUs
MTQgKzI0NTEsMTEgQEAgdm9pZCBTZXNzaW9uOjpnZXROYW1lZENvb2tpZShjb25zdCBTdHJpbmcm
IG5hbWUsIEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSZXN1bHQmJikKICAgICAgICAgICAgIGNvbXBs
ZXRpb25IYW5kbGVyKFdURk1vdmUocmVzdWx0KSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KLSAgICAgICAgUmVmUHRyPEpTT046OkFycmF5PiBjb29raWVzQXJyYXk7Ci0gICAgICAg
IHJlc3VsdC5yZXN1bHQoKS0+YXNBcnJheShjb29raWVzQXJyYXkpOworCisgICAgICAgIGF1dG8g
Y29va2llc0FycmF5ID0gcmVzdWx0LnJlc3VsdCgpLT5hc0FycmF5KCk7CiAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBjb29raWVzQXJyYXktPmxlbmd0aCgpOyArK2kpIHsKLSAgICAg
ICAgICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gY29va2llVmFsdWUgPSBjb29raWVzQXJyYXktPmdl
dChpKTsKLSAgICAgICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IGNvb2tpZU9iamVjdDsKLSAg
ICAgICAgICAgIGNvb2tpZVZhbHVlLT5hc09iamVjdChjb29raWVPYmplY3QpOwotICAgICAgICAg
ICAgU3RyaW5nIGNvb2tpZU5hbWU7Ci0gICAgICAgICAgICBjb29raWVPYmplY3QtPmdldFN0cmlu
ZygibmFtZSJfcywgY29va2llTmFtZSk7CisgICAgICAgICAgICBhdXRvIGNvb2tpZU9iamVjdCA9
IGNvb2tpZXNBcnJheS0+Z2V0KGkpLT5hc09iamVjdCgpOworICAgICAgICAgICAgYXV0byBjb29r
aWVOYW1lID0gY29va2llT2JqZWN0LT5nZXRTdHJpbmcoIm5hbWUiX3MpOwogICAgICAgICAgICAg
aWYgKGNvb2tpZU5hbWUgPT0gbmFtZSkgewogICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5k
bGVyKENvbW1hbmRSZXN1bHQ6OnN1Y2Nlc3MoV1RGTW92ZShjb29raWVPYmplY3QpKSk7CiAgICAg
ICAgICAgICAgICAgcmV0dXJuOwpAQCAtMjM5NCw3ICsyNDc3LDcgQEAgdm9pZCBTZXNzaW9uOjph
ZGRDb29raWUoY29uc3QgQ29va2llJiBjb29raWUsIEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSZXN1
bHQmJik+JiYKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUocmVzdWx0KSk7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgUmVmUHRyPEpTT046Ok9i
amVjdD4gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIGF1dG8g
cGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgIHBhcmFtZXRlcnMt
PnNldFN0cmluZygiYnJvd3NpbmdDb250ZXh0SGFuZGxlIl9zLCBtX3RvcGxldmVsQnJvd3NpbmdD
b250ZXh0LnZhbHVlKCkpOwogICAgICAgICBwYXJhbWV0ZXJzLT5zZXRPYmplY3QoImNvb2tpZSJf
cywgV1RGTW92ZShjb29raWUpKTsKICAgICAgICAgbV9ob3N0LT5zZW5kQ29tbWFuZFRvQmFja2Vu
ZCgiYWRkU2luZ2xlQ29va2llIl9zLCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBbcHJvdGVjdGVkVGhp
cywgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oU2Vzc2lv
bkhvc3Q6OkNvbW1hbmRSZXNwb25zZSYmIHJlc3BvbnNlKSB7CkBAIC0yNDE5LDcgKzI1MDIsNyBA
QCB2b2lkIFNlc3Npb246OmRlbGV0ZUNvb2tpZShjb25zdCBTdHJpbmcmIG5hbWUsIEZ1bmN0aW9u
PHZvaWQgKENvbW1hbmRSZXN1bHQmJik+JgogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIo
V1RGTW92ZShyZXN1bHQpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAg
ICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUo
KTsKKyAgICAgICAgYXV0byBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAg
ICAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJicm93c2luZ0NvbnRleHRIYW5kbGUiX3MsIG1f
dG9wbGV2ZWxCcm93c2luZ0NvbnRleHQudmFsdWUoKSk7CiAgICAgICAgIHBhcmFtZXRlcnMtPnNl
dFN0cmluZygiY29va2llTmFtZSJfcywgbmFtZSk7CiAgICAgICAgIG1faG9zdC0+c2VuZENvbW1h
bmRUb0JhY2tlbmQoImRlbGV0ZVNpbmdsZUNvb2tpZSJfcywgV1RGTW92ZShwYXJhbWV0ZXJzKSwg
W3Byb3RlY3RlZFRoaXMsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcildKFNlc3Npb25Ib3N0OjpDb21tYW5kUmVzcG9uc2UmJiByZXNwb25zZSkgewpAQCAtMjQ0
NCw3ICsyNTI3LDcgQEAgdm9pZCBTZXNzaW9uOjpkZWxldGVBbGxDb29raWVzKEZ1bmN0aW9uPHZv
aWQgKENvbW1hbmRSZXN1bHQmJik+JiYgY29tcGxldGlvbkhhbmQKICAgICAgICAgICAgIGNvbXBs
ZXRpb25IYW5kbGVyKFdURk1vdmUocmVzdWx0KSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KLSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVycyA9IEpTT046Ok9i
amVjdDo6Y3JlYXRlKCk7CisgICAgICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6
Y3JlYXRlKCk7CiAgICAgICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiYnJvd3NpbmdDb250ZXh0
SGFuZGxlIl9zLCBtX3RvcGxldmVsQnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwogICAgICAgICBt
X2hvc3QtPnNlbmRDb21tYW5kVG9CYWNrZW5kKCJkZWxldGVBbGxDb29raWVzIl9zLCBXVEZNb3Zl
KHBhcmFtZXRlcnMpLCBbcHJvdGVjdGVkVGhpcywgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKV0oU2Vzc2lvbkhvc3Q6OkNvbW1hbmRSZXNwb25zZSYmIHJlc3Bv
bnNlKSB7CiAgICAgICAgICAgICBpZiAocmVzcG9uc2UuaXNFcnJvcikgewpAQCAtMjUxNywyMyAr
MjYwMCwyMyBAQCB2b2lkIFNlc3Npb246OnBlcmZvcm1BY3Rpb25zKFZlY3RvcjxWZWN0b3I8QWN0
aW9uPj4mJiBhY3Rpb25zQnlUaWNrLCBGdW5jdGlvbjx2bwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CiAKLSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVycyA9IEpT
T046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTT046Ok9i
amVjdDo6Y3JlYXRlKCk7CiAgICAgICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiaGFuZGxlIl9z
LCBtX3RvcGxldmVsQnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwogICAgICAgICBpZiAobV9jdXJy
ZW50QnJvd3NpbmdDb250ZXh0KQogICAgICAgICAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJm
cmFtZUhhbmRsZSJfcywgbV9jdXJyZW50QnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwotICAgICAg
ICBSZWZQdHI8SlNPTjo6QXJyYXk+IGlucHV0U291cmNlcyA9IEpTT046OkFycmF5OjpjcmVhdGUo
KTsKKyAgICAgICAgYXV0byBpbnB1dFNvdXJjZXMgPSBKU09OOjpBcnJheTo6Y3JlYXRlKCk7CiAg
ICAgICAgIGZvciAoY29uc3QgYXV0byYgaW5wdXRTb3VyY2UgOiBtX2FjdGl2ZUlucHV0U291cmNl
cykgewotICAgICAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gaW5wdXRTb3VyY2VPYmplY3Qg
PSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICAgICAgYXV0byBpbnB1dFNvdXJjZU9i
amVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgICAgICBpbnB1dFNvdXJjZU9i
amVjdC0+c2V0U3RyaW5nKCJzb3VyY2VJZCJfcywgaW5wdXRTb3VyY2Uua2V5KTsKICAgICAgICAg
ICAgIGlucHV0U291cmNlT2JqZWN0LT5zZXRTdHJpbmcoInNvdXJjZVR5cGUiX3MsIGF1dG9tYXRp
b25Tb3VyY2VUeXBlKGlucHV0U291cmNlLnZhbHVlLnR5cGUpKTsKICAgICAgICAgICAgIGlucHV0
U291cmNlcy0+cHVzaE9iamVjdChXVEZNb3ZlKGlucHV0U291cmNlT2JqZWN0KSk7CiAgICAgICAg
IH0KICAgICAgICAgcGFyYW1ldGVycy0+c2V0QXJyYXkoImlucHV0U291cmNlcyJfcywgV1RGTW92
ZShpbnB1dFNvdXJjZXMpKTsKLSAgICAgICAgUmVmUHRyPEpTT046OkFycmF5PiBzdGVwcyA9IEpT
T046OkFycmF5OjpjcmVhdGUoKTsKKyAgICAgICAgYXV0byBzdGVwcyA9IEpTT046OkFycmF5Ojpj
cmVhdGUoKTsKICAgICAgICAgZm9yIChjb25zdCBhdXRvJiB0aWNrIDogYWN0aW9uc0J5VGljaykg
ewotICAgICAgICAgICAgUmVmUHRyPEpTT046OkFycmF5PiBzdGF0ZXMgPSBKU09OOjpBcnJheTo6
Y3JlYXRlKCk7CisgICAgICAgICAgICBhdXRvIHN0YXRlcyA9IEpTT046OkFycmF5OjpjcmVhdGUo
KTsKICAgICAgICAgICAgIGZvciAoY29uc3QgYXV0byYgYWN0aW9uIDogdGljaykgewotICAgICAg
ICAgICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHN0YXRlID0gSlNPTjo6T2JqZWN0OjpjcmVh
dGUoKTsKKyAgICAgICAgICAgICAgICBhdXRvIHN0YXRlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUo
KTsKICAgICAgICAgICAgICAgICBhdXRvJiBjdXJyZW50U3RhdGUgPSBpbnB1dFNvdXJjZVN0YXRl
KGFjdGlvbi5pZCk7CiAgICAgICAgICAgICAgICAgc3RhdGUtPnNldFN0cmluZygic291cmNlSWQi
X3MsIGFjdGlvbi5pZCk7CiAgICAgICAgICAgICAgICAgc3dpdGNoIChhY3Rpb24udHlwZSkgewpA
QCAtMjU1MSw3ICsyNjM0LDcgQEAgdm9pZCBTZXNzaW9uOjpwZXJmb3JtQWN0aW9ucyhWZWN0b3I8
VmVjdG9yPEFjdGlvbj4+JiYgYWN0aW9uc0J5VGljaywgRnVuY3Rpb248dm8KICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICBjYXNlIEFjdGlvbjo6U3Vi
dHlwZTo6UG9pbnRlck1vdmU6IHsKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5zZXRT
dHJpbmcoIm9yaWdpbiJfcywgYXV0b21hdGlvbk9yaWdpblR5cGUoYWN0aW9uLm9yaWdpbi0+dHlw
ZSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gbG9jYXRp
b24gPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgYXV0
byBsb2NhdGlvbiA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBsb2NhdGlvbi0+c2V0SW50ZWdlcigieCJfcywgYWN0aW9uLngudmFsdWUoKSk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbi0+c2V0SW50ZWdlcigieSJfcywgYWN0aW9uLnku
dmFsdWUoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+c2V0T2JqZWN0KCJsb2Nh
dGlvbiJfcywgV1RGTW92ZShsb2NhdGlvbikpOwpAQCAtMjYxNyw3ICsyNzAwLDcgQEAgdm9pZCBT
ZXNzaW9uOjpwZXJmb3JtQWN0aW9ucyhWZWN0b3I8VmVjdG9yPEFjdGlvbj4+JiYgYWN0aW9uc0J5
VGljaywgRnVuY3Rpb248dm8KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgc3Rh
dGVzLT5wdXNoT2JqZWN0KFdURk1vdmUoc3RhdGUpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHN0ZXBTdGF0ZXMgPSBKU09OOjpPYmplY3Q6OmNyZWF0
ZSgpOworICAgICAgICAgICAgYXV0byBzdGVwU3RhdGVzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUo
KTsKICAgICAgICAgICAgIHN0ZXBTdGF0ZXMtPnNldEFycmF5KCJzdGF0ZXMiX3MsIFdURk1vdmUo
c3RhdGVzKSk7CiAgICAgICAgICAgICBzdGVwcy0+cHVzaE9iamVjdChXVEZNb3ZlKHN0ZXBTdGF0
ZXMpKTsKICAgICAgICAgfQpAQCAtMjY0Myw3ICsyNzI2LDcgQEAgdm9pZCBTZXNzaW9uOjpyZWxl
YXNlQWN0aW9ucyhGdW5jdGlvbjx2b2lkIChDb21tYW5kUmVzdWx0JiYpPiYmIGNvbXBsZXRpb25I
YW5kbGUKICAgICBtX2FjdGl2ZUlucHV0U291cmNlcy5jbGVhcigpOwogICAgIG1faW5wdXRTdGF0
ZVRhYmxlLmNsZWFyKCk7CiAKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzID0g
SlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU09OOjpPYmpl
Y3Q6OmNyZWF0ZSgpOwogICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiaGFuZGxlIl9zLCBtX3Rv
cGxldmVsQnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwogICAgIG1faG9zdC0+c2VuZENvbW1hbmRU
b0JhY2tlbmQoImNhbmNlbEludGVyYWN0aW9uU2VxdWVuY2UiX3MsIFdURk1vdmUocGFyYW1ldGVy
cyksIFtwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0g
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKFNlc3Npb25Ib3N0OjpDb21tYW5kUmVzcG9uc2Um
JiByZXNwb25zZSkgewogICAgICAgICBpZiAocmVzcG9uc2UuaXNFcnJvcikgewpAQCAtMjY2MSw3
ICsyNzQ0LDcgQEAgdm9pZCBTZXNzaW9uOjpkaXNtaXNzQWxlcnQoRnVuY3Rpb248dm9pZCAoQ29t
bWFuZFJlc3VsdCYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6
OmNyZWF0ZSgpOworICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7
CiAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJicm93c2luZ0NvbnRleHRIYW5kbGUiX3MsIG1f
dG9wbGV2ZWxCcm93c2luZ0NvbnRleHQudmFsdWUoKSk7CiAgICAgbV9ob3N0LT5zZW5kQ29tbWFu
ZFRvQmFja2VuZCgiZGlzbWlzc0N1cnJlbnRKYXZhU2NyaXB0RGlhbG9nIl9zLCBXVEZNb3ZlKHBh
cmFtZXRlcnMpLCBbcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjb21wbGV0aW9uSGFu
ZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXShTZXNzaW9uSG9zdDo6Q29tbWFuZFJl
c3BvbnNlJiYgcmVzcG9uc2UpIHsKICAgICAgICAgaWYgKHJlc3BvbnNlLmlzRXJyb3IpIHsKQEAg
LTI2NzksNyArMjc2Miw3IEBAIHZvaWQgU2Vzc2lvbjo6YWNjZXB0QWxlcnQoRnVuY3Rpb248dm9p
ZCAoQ29tbWFuZFJlc3VsdCYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnMgPSBKU09OOjpP
YmplY3Q6OmNyZWF0ZSgpOworICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3Jl
YXRlKCk7CiAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJicm93c2luZ0NvbnRleHRIYW5kbGUi
X3MsIG1fdG9wbGV2ZWxCcm93c2luZ0NvbnRleHQudmFsdWUoKSk7CiAgICAgbV9ob3N0LT5zZW5k
Q29tbWFuZFRvQmFja2VuZCgiYWNjZXB0Q3VycmVudEphdmFTY3JpcHREaWFsb2ciX3MsIFdURk1v
dmUocGFyYW1ldGVycyksIFtwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNvbXBsZXRp
b25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKFNlc3Npb25Ib3N0OjpDb21t
YW5kUmVzcG9uc2UmJiByZXNwb25zZSkgewogICAgICAgICBpZiAocmVzcG9uc2UuaXNFcnJvcikg
ewpAQCAtMjY5NywxOCArMjc4MCwyMCBAQCB2b2lkIFNlc3Npb246OmdldEFsZXJ0VGV4dChGdW5j
dGlvbjx2b2lkIChDb21tYW5kUmVzdWx0JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVycyA9
IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgYXV0byBwYXJhbWV0ZXJzID0gSlNPTjo6T2Jq
ZWN0OjpjcmVhdGUoKTsKICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoImJyb3dzaW5nQ29udGV4
dEhhbmRsZSJfcywgbV90b3BsZXZlbEJyb3dzaW5nQ29udGV4dC52YWx1ZSgpKTsKICAgICBtX2hv
c3QtPnNlbmRDb21tYW5kVG9CYWNrZW5kKCJtZXNzYWdlT2ZDdXJyZW50SmF2YVNjcmlwdERpYWxv
ZyJfcywgV1RGTW92ZShwYXJhbWV0ZXJzKSwgW3Byb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlz
KSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oU2Vzc2lv
bkhvc3Q6OkNvbW1hbmRSZXNwb25zZSYmIHJlc3BvbnNlKSB7CiAgICAgICAgIGlmIChyZXNwb25z
ZS5pc0Vycm9yIHx8ICFyZXNwb25zZS5yZXNwb25zZU9iamVjdCkgewogICAgICAgICAgICAgY29t
cGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChXVEZNb3ZlKHJlc3BvbnNlLnJlc3Bv
bnNlT2JqZWN0KSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIFN0
cmluZyB2YWx1ZVN0cmluZzsKLSAgICAgICAgaWYgKCFyZXNwb25zZS5yZXNwb25zZU9iamVjdC0+
Z2V0U3RyaW5nKCJtZXNzYWdlIl9zLCB2YWx1ZVN0cmluZykpIHsKKworICAgICAgICBhdXRvIHZh
bHVlU3RyaW5nID0gcmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdldFN0cmluZygibWVzc2FnZSJf
cyk7CisgICAgICAgIGlmICghdmFsdWVTdHJpbmcpIHsKICAgICAgICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtu
b3duRXJyb3IpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQorCiAgICAgICAgIGNv
bXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OnN1Y2Nlc3MoSlNPTjo6VmFsdWU6OmNyZWF0
ZSh2YWx1ZVN0cmluZykpKTsKICAgICB9KTsKIH0KQEAgLTI3MjAsNyArMjgwNSw3IEBAIHZvaWQg
U2Vzc2lvbjo6c2VuZEFsZXJ0VGV4dChjb25zdCBTdHJpbmcmIHRleHQsIEZ1bmN0aW9uPHZvaWQg
KENvbW1hbmRSZXN1bHQmJik+CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBSZWZQdHI8
SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBh
dXRvIHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgIHBhcmFtZXRlcnMt
PnNldFN0cmluZygiYnJvd3NpbmdDb250ZXh0SGFuZGxlIl9zLCBtX3RvcGxldmVsQnJvd3NpbmdD
b250ZXh0LnZhbHVlKCkpOwogICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygidXNlcklucHV0Il9z
LCB0ZXh0KTsKICAgICBtX2hvc3QtPnNlbmRDb21tYW5kVG9CYWNrZW5kKCJzZXRVc2VySW5wdXRG
b3JDdXJyZW50SmF2YVNjcmlwdFByb21wdCJfcywgV1RGTW92ZShwYXJhbWV0ZXJzKSwgW3Byb3Rl
Y3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKV0oU2Vzc2lvbkhvc3Q6OkNvbW1hbmRSZXNwb25zZSYmIHJlc3BvbnNl
KSB7CkBAIC0yNzQ0LDcgKzI4MjksNyBAQCB2b2lkIFNlc3Npb246OnRha2VTY3JlZW5zaG90KE9w
dGlvbmFsPFN0cmluZz4gZWxlbWVudElELCBPcHRpb25hbDxib29sPiBzY3JvbGxJbgogICAgICAg
ICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShyZXN1bHQpKTsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQotICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJz
ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgYXV0byBwYXJhbWV0ZXJzID0gSlNP
Tjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJoYW5k
bGUiX3MsIG1fdG9wbGV2ZWxCcm93c2luZ0NvbnRleHQudmFsdWUoKSk7CiAgICAgICAgIGlmICht
X2N1cnJlbnRCcm93c2luZ0NvbnRleHQpCiAgICAgICAgICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJp
bmcoImZyYW1lSGFuZGxlIl9zLCBtX2N1cnJlbnRCcm93c2luZ0NvbnRleHQudmFsdWUoKSk7CkBA
IC0yNzU4LDExICsyODQzLDEzIEBAIHZvaWQgU2Vzc2lvbjo6dGFrZVNjcmVlbnNob3QoT3B0aW9u
YWw8U3RyaW5nPiBlbGVtZW50SUQsIE9wdGlvbmFsPGJvb2w+IHNjcm9sbEluCiAgICAgICAgICAg
ICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChXVEZNb3ZlKHJlc3Bv
bnNlLnJlc3BvbnNlT2JqZWN0KSkpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIFN0cmluZyBkYXRhOwotICAgICAgICAgICAgaWYgKCFyZXNwb25z
ZS5yZXNwb25zZU9iamVjdC0+Z2V0U3RyaW5nKCJkYXRhIl9zLCBkYXRhKSkgeworCisgICAgICAg
ICAgICBhdXRvIGRhdGEgPSByZXNwb25zZS5yZXNwb25zZU9iamVjdC0+Z2V0U3RyaW5nKCJkYXRh
Il9zKTsKKyAgICAgICAgICAgIGlmICghZGF0YSkgewogICAgICAgICAgICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpV
bmtub3duRXJyb3IpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CisK
ICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OnN1Y2Nlc3MoSlNP
Tjo6VmFsdWU6OmNyZWF0ZShkYXRhKSkpOwogICAgICAgICB9KTsKICAgICB9KTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJEcml2ZXIvU2Vzc2lvbkhvc3QuY3BwIGIvU291cmNlL1dlYkRyaXZlci9T
ZXNzaW9uSG9zdC5jcHAKaW5kZXggZDE2OWI5NWM0YjZjZWU0Mjg5ZDhjODg5ZTU1M2RmNzYzOTU1
YWFiYy4uNDcyZWJkZmFmNGE2MmI2YjIwMGI0ZDFlYzdiMjFiZTU5MTE4NWUwMSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkRyaXZlci9TZXNzaW9uSG9zdC5jcHAKKysrIGIvU291cmNlL1dlYkRyaXZl
ci9TZXNzaW9uSG9zdC5jcHAKQEAgLTYyLDMxICs2MiwyNyBAQCBsb25nIFNlc3Npb25Ib3N0Ojpz
ZW5kQ29tbWFuZFRvQmFja2VuZChjb25zdCBTdHJpbmcmIGNvbW1hbmQsIFJlZlB0cjxKU09OOjpP
YmplYwogCiB2b2lkIFNlc3Npb25Ib3N0OjpkaXNwYXRjaE1lc3NhZ2UoY29uc3QgU3RyaW5nJiBt
ZXNzYWdlKQogewotICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gbWVzc2FnZVZhbHVlOwotICAgIGlm
ICghSlNPTjo6VmFsdWU6OnBhcnNlSlNPTihtZXNzYWdlLCBtZXNzYWdlVmFsdWUpKQorICAgIGF1
dG8gbWVzc2FnZVZhbHVlID0gSlNPTjo6VmFsdWU6OnBhcnNlSlNPTihtZXNzYWdlKTsKKyAgICBp
ZiAoIW1lc3NhZ2VWYWx1ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVmUHRyPEpTT046Ok9i
amVjdD4gbWVzc2FnZU9iamVjdDsKLSAgICBpZiAoIW1lc3NhZ2VWYWx1ZS0+YXNPYmplY3QobWVz
c2FnZU9iamVjdCkpCisgICAgYXV0byBtZXNzYWdlT2JqZWN0ID0gbWVzc2FnZVZhbHVlLT5hc09i
amVjdCgpOworICAgIGlmICghbWVzc2FnZU9iamVjdCkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
bG9uZyBzZXF1ZW5jZUlEOwotICAgIGlmICghbWVzc2FnZU9iamVjdC0+Z2V0SW50ZWdlcigiaWQi
X3MsIHNlcXVlbmNlSUQpKQorICAgIGF1dG8gc2VxdWVuY2VJRCA9IG1lc3NhZ2VPYmplY3QtPmdl
dEludGVnZXIoImlkIl9zKTsKKyAgICBpZiAoIXNlcXVlbmNlSUQpCiAgICAgICAgIHJldHVybjsK
IAotICAgIGF1dG8gcmVzcG9uc2VIYW5kbGVyID0gbV9jb21tYW5kUmVxdWVzdHMudGFrZShzZXF1
ZW5jZUlEKTsKKyAgICBhdXRvIHJlc3BvbnNlSGFuZGxlciA9IG1fY29tbWFuZFJlcXVlc3RzLnRh
a2UoKnNlcXVlbmNlSUQpOwogICAgIEFTU0VSVChyZXNwb25zZUhhbmRsZXIpOwogCiAgICAgQ29t
bWFuZFJlc3BvbnNlIHJlc3BvbnNlOwotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IGVycm9yT2Jq
ZWN0OwotICAgIGlmIChtZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoImVycm9yIl9zLCBlcnJvck9i
amVjdCkpIHsKKyAgICBpZiAoYXV0byBlcnJvck9iamVjdCA9IG1lc3NhZ2VPYmplY3QtPmdldE9i
amVjdCgiZXJyb3IiX3MpKSB7CiAgICAgICAgIHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0ID0gV1RG
TW92ZShlcnJvck9iamVjdCk7CiAgICAgICAgIHJlc3BvbnNlLmlzRXJyb3IgPSB0cnVlOwotICAg
IH0gZWxzZSB7Ci0gICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHJlc3VsdE9iamVjdDsKLSAg
ICAgICAgaWYgKG1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgicmVzdWx0Il9zLCByZXN1bHRPYmpl
Y3QpICYmIHJlc3VsdE9iamVjdC0+c2l6ZSgpKQotICAgICAgICAgICAgcmVzcG9uc2UucmVzcG9u
c2VPYmplY3QgPSBXVEZNb3ZlKHJlc3VsdE9iamVjdCk7Ci0gICAgfQorICAgIH0gZWxzZSBpZiAo
YXV0byByZXN1bHRPYmplY3QgPSBtZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInJlc3VsdCJfcykp
CisgICAgICAgIHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0ID0gV1RGTW92ZShyZXN1bHRPYmplY3Qp
OwogCiAgICAgcmVzcG9uc2VIYW5kbGVyKFdURk1vdmUocmVzcG9uc2UpKTsKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJEcml2ZXIvV2ViRHJpdmVyU2VydmljZS5jcHAgYi9Tb3VyY2UvV2ViRHJp
dmVyL1dlYkRyaXZlclNlcnZpY2UuY3BwCmluZGV4IDliYjk3NmQ5ZjBjNWUzYjQ4OWIyMDlmM2Ri
ODUwZGMzMjFiNjBmNGUuLjljNWY0ZmQ1NTA5ZTkzODAwOTBjZmU0NjQ5MTJiY2NmY2I5MDRiMzkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJEcml2ZXIvV2ViRHJpdmVyU2VydmljZS5jcHAKKysrIGIv
U291cmNlL1dlYkRyaXZlci9XZWJEcml2ZXJTZXJ2aWNlLmNwcApAQCAtMjM5LDEzICsyMzksMTQg
QEAgdm9pZCBXZWJEcml2ZXJTZXJ2aWNlOjpoYW5kbGVSZXF1ZXN0KEhUVFBSZXF1ZXN0SGFuZGxl
cjo6UmVxdWVzdCYmIHJlcXVlc3QsIEZ1bmMKIAogICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBh
cmFtZXRlcnNPYmplY3Q7CiAgICAgaWYgKG1ldGhvZC52YWx1ZSgpID09IEhUVFBNZXRob2Q6OlBv
c3QpIHsKLSAgICAgICAgUmVmUHRyPEpTT046OlZhbHVlPiBtZXNzYWdlVmFsdWU7Ci0gICAgICAg
IGlmICghSlNPTjo6VmFsdWU6OnBhcnNlSlNPTihTdHJpbmc6OmZyb21VVEY4KHJlcXVlc3QuZGF0
YSwgcmVxdWVzdC5kYXRhTGVuZ3RoKSwgbWVzc2FnZVZhbHVlKSkgeworICAgICAgICBhdXRvIG1l
c3NhZ2VWYWx1ZSA9IEpTT046OlZhbHVlOjpwYXJzZUpTT04oU3RyaW5nOjpmcm9tVVRGOChyZXF1
ZXN0LmRhdGEsIHJlcXVlc3QuZGF0YUxlbmd0aCkpOworICAgICAgICBpZiAoIW1lc3NhZ2VWYWx1
ZSkgewogICAgICAgICAgICAgc2VuZFJlc3BvbnNlKFdURk1vdmUocmVwbHlIYW5kbGVyKSwgQ29t
bWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OkludmFsaWRBcmd1bWVu
dCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKCFtZXNz
YWdlVmFsdWUtPmFzT2JqZWN0KHBhcmFtZXRlcnNPYmplY3QpKSB7CisgICAgICAgIHBhcmFtZXRl
cnNPYmplY3QgPSBtZXNzYWdlVmFsdWUtPmFzT2JqZWN0KCk7CisgICAgICAgIGlmICghcGFyYW1l
dGVyc09iamVjdCkgewogICAgICAgICAgICAgc2VuZFJlc3BvbnNlKFdURk1vdmUocmVwbHlIYW5k
bGVyKSwgQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OkludmFs
aWRBcmd1bWVudCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC0yNzQsNyAr
Mjc1LDcgQEAgdm9pZCBXZWJEcml2ZXJTZXJ2aWNlOjpzZW5kUmVzcG9uc2UoRnVuY3Rpb248dm9p
ZCAoSFRUUFJlcXVlc3RIYW5kbGVyOjpSZXNwb25zZSYKICAgICAgICAgZXJyb3JPYmplY3QtPnNl
dFN0cmluZygic3RhY2t0cmFjZSJfcywgZW1wdHlTdHJpbmcoKSk7CiAgICAgICAgIC8vIElmIHRo
ZSBlcnJvciBkYXRhIGRpY3Rpb25hcnkgY29udGFpbnMgYW55IGVudHJpZXMsIHNldCB0aGUgImRh
dGEiIGZpZWxkIG9uIGJvZHkgdG8gYSBuZXcgSlNPTiBPYmplY3QgcG9wdWxhdGVkIHdpdGggdGhl
IGRpY3Rpb25hcnkuCiAgICAgICAgIGlmIChhdXRvJiBhZGRpdGlvbmFsRGF0YSA9IHJlc3VsdC5h
ZGRpdGlvbmFsRXJyb3JEYXRhKCkpCi0gICAgICAgICAgICBlcnJvck9iamVjdC0+c2V0T2JqZWN0
KCJkYXRhIl9zLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiB7IGFkZGl0aW9uYWxEYXRhIH0pOworICAg
ICAgICAgICAgZXJyb3JPYmplY3QtPnNldE9iamVjdCgiZGF0YSJfcywgYWRkaXRpb25hbERhdGEt
PnJlbGVhc2VOb25OdWxsKCkpOwogICAgICAgICAvLyBTZW5kIGEgcmVzcG9uc2Ugd2l0aCBzdGF0
dXMgYW5kIGJvZHkgYXMgYXJndW1lbnRzLgogICAgICAgICByZXN1bHRWYWx1ZSA9IFdURk1vdmUo
ZXJyb3JPYmplY3QpOwogICAgIH0gZWxzZSBpZiAoYXV0byB2YWx1ZSA9IHJlc3VsdC5yZXN1bHQo
KSkKQEAgLTI4NCwyNCArMjg1LDI0IEBAIHZvaWQgV2ViRHJpdmVyU2VydmljZTo6c2VuZFJlc3Bv
bnNlKEZ1bmN0aW9uPHZvaWQgKEhUVFBSZXF1ZXN0SGFuZGxlcjo6UmVzcG9uc2UmCiAKICAgICAv
LyBXaGVuIHJlcXVpcmVkIHRvIHNlbmQgYSByZXNwb25zZS4KICAgICAvLyBodHRwczovL3czYy5n
aXRodWIuaW8vd2ViZHJpdmVyL3dlYmRyaXZlci1zcGVjLmh0bWwjZGZuLXNlbmQtYS1yZXNwb25z
ZQotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHJlc3BvbnNlT2JqZWN0ID0gSlNPTjo6T2JqZWN0
OjpjcmVhdGUoKTsKKyAgICBhdXRvIHJlc3BvbnNlT2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVh
dGUoKTsKICAgICByZXNwb25zZU9iamVjdC0+c2V0VmFsdWUoInZhbHVlIl9zLCBXVEZNb3ZlKHJl
c3VsdFZhbHVlKSk7CiAgICAgcmVwbHlIYW5kbGVyKHsgcmVzdWx0Lmh0dHBTdGF0dXNDb2RlKCks
IHJlc3BvbnNlT2JqZWN0LT50b0pTT05TdHJpbmcoKS51dGY4KCksICJhcHBsaWNhdGlvbi9qc29u
OyBjaGFyc2V0PXV0Zi04Il9zIH0pOwogfQogCiBzdGF0aWMgT3B0aW9uYWw8ZG91YmxlPiB2YWx1
ZUFzTnVtYmVySW5SYW5nZShjb25zdCBKU09OOjpWYWx1ZSYgdmFsdWUsIGRvdWJsZSBtaW5BbGxv
d2VkID0gMCwgZG91YmxlIG1heEFsbG93ZWQgPSBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1h
eCgpKQogewotICAgIGRvdWJsZSBudW1iZXI7Ci0gICAgaWYgKCF2YWx1ZS5hc0RvdWJsZShudW1i
ZXIpKQorICAgIGF1dG8gbnVtYmVyID0gdmFsdWUuYXNEb3VibGUoKTsKKyAgICBpZiAoIW51bWJl
cikKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIGlmIChzdGQ6OmlzbmFuKG51
bWJlcikgfHwgc3RkOjppc2luZihudW1iZXIpKQorICAgIGlmIChzdGQ6OmlzbmFuKCpudW1iZXIp
IHx8IHN0ZDo6aXNpbmYoKm51bWJlcikpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAK
LSAgICBpZiAobnVtYmVyIDwgbWluQWxsb3dlZCB8fCBudW1iZXIgPiBtYXhBbGxvd2VkKQorICAg
IGlmICgqbnVtYmVyIDwgbWluQWxsb3dlZCB8fCAqbnVtYmVyID4gbWF4QWxsb3dlZCkKICAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHJldHVybiBudW1iZXI7CisgICAgcmV0dXJu
ICpudW1iZXI7CiB9CiAKIHN0YXRpYyBPcHRpb25hbDx1aW50NjRfdD4gdW5zaWduZWRWYWx1ZShK
U09OOjpWYWx1ZSYgdmFsdWUpCkBAIC0zMzgsNyArMzM5LDcgQEAgc3RhdGljIE9wdGlvbmFsPFRp
bWVvdXRzPiBkZXNlcmlhbGl6ZVRpbWVvdXRzKEpTT046Ok9iamVjdCYgdGltZW91dHNPYmplY3Qs
IElnbm8KICAgICAgICAgfQogCiAgICAgICAgIC8vIElmIHZhbHVlIGlzIG5vdCBhbiBpbnRlZ2Vy
LCBvciBpdCBpcyBsZXNzIHRoYW4gMCBvciBncmVhdGVyIHRoYW4gdGhlIG1heGltdW0gc2FmZSBp
bnRlZ2VyLCByZXR1cm4gZXJyb3Igd2l0aCBlcnJvciBjb2RlIGludmFsaWQgYXJndW1lbnQuCi0g
ICAgICAgIGF1dG8gdGltZW91dE1TID0gdW5zaWduZWRWYWx1ZSgqaXQtPnZhbHVlKTsKKyAgICAg
ICAgYXV0byB0aW1lb3V0TVMgPSB1bnNpZ25lZFZhbHVlKGl0LT52YWx1ZSk7CiAgICAgICAgIGlm
ICghdGltZW91dE1TKQogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIApAQCAtMzU5
LDYxICszNjAsNjEgQEAgc3RhdGljIE9wdGlvbmFsPFByb3h5PiBkZXNlcmlhbGl6ZVByb3h5KEpT
T046Ok9iamVjdCYgcHJveHlPYmplY3QpCiAgICAgLy8gwqc3LjEgUHJveHkuCiAgICAgLy8gaHR0
cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmRyaXZlci8jcHJveHkKICAgICBQcm94eSBwcm94eTsKLSAg
ICBpZiAoIXByb3h5T2JqZWN0LmdldFN0cmluZygicHJveHlUeXBlIl9zLCBwcm94eS50eXBlKSkK
KworICAgIHByb3h5LnR5cGUgPSBwcm94eU9iamVjdC5nZXRTdHJpbmcoInByb3h5VHlwZSJfcyk7
CisgICAgaWYgKCFwcm94eS50eXBlKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAg
ICAgaWYgKHByb3h5LnR5cGUgPT0gImRpcmVjdCIgfHwgcHJveHkudHlwZSA9PSAiYXV0b2RldGVj
dCIgfHwgcHJveHkudHlwZSA9PSAic3lzdGVtIikKICAgICAgICAgcmV0dXJuIHByb3h5OwogCiAg
ICAgaWYgKHByb3h5LnR5cGUgPT0gInBhYyIpIHsKLSAgICAgICAgU3RyaW5nIGF1dG9jb25maWdV
Ukw7Ci0gICAgICAgIGlmICghcHJveHlPYmplY3QuZ2V0U3RyaW5nKCJwcm94eUF1dG9jb25maWdV
cmwiX3MsIGF1dG9jb25maWdVUkwpKQorICAgICAgICBwcm94eS5hdXRvY29uZmlnVVJMID0gcHJv
eHlPYmplY3QuZ2V0U3RyaW5nKCJwcm94eUF1dG9jb25maWdVcmwiX3MpOworICAgICAgICBpZiAo
IXByb3h5LmF1dG9jb25maWdVUkwpCiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owog
Ci0gICAgICAgIHByb3h5LmF1dG9jb25maWdVUkwgPSBhdXRvY29uZmlnVVJMOwogICAgICAgICBy
ZXR1cm4gcHJveHk7CiAgICAgfQogCiAgICAgaWYgKHByb3h5LnR5cGUgPT0gIm1hbnVhbCIpIHsK
LSAgICAgICAgUmVmUHRyPEpTT046OlZhbHVlPiB2YWx1ZTsKLSAgICAgICAgaWYgKHByb3h5T2Jq
ZWN0LmdldFZhbHVlKCJmdHBQcm94eSJfcywgdmFsdWUpKSB7Ci0gICAgICAgICAgICBTdHJpbmcg
ZnRwUHJveHk7Ci0gICAgICAgICAgICBpZiAoIXZhbHVlLT5hc1N0cmluZyhmdHBQcm94eSkpCisg
ICAgICAgIGlmIChhdXRvIHZhbHVlID0gcHJveHlPYmplY3QuZ2V0VmFsdWUoImZ0cFByb3h5Il9z
KSkgeworICAgICAgICAgICAgYXV0byBmdHBQcm94eSA9IHZhbHVlLT5hc1N0cmluZygpOworICAg
ICAgICAgICAgaWYgKCFmdHBQcm94eSkKICAgICAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwogCiAgICAgICAgICAgICBwcm94eS5mdHBVUkwgPSBVUkwoeyB9LCBtYWtlU3RyaW5nKCJm
dHA6Ly8iLCBmdHBQcm94eSkpOwogICAgICAgICAgICAgaWYgKCFwcm94eS5mdHBVUkwtPmlzVmFs
aWQoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAgICB9Ci0g
ICAgICAgIGlmIChwcm94eU9iamVjdC5nZXRWYWx1ZSgiaHR0cFByb3h5Il9zLCB2YWx1ZSkpIHsK
LSAgICAgICAgICAgIFN0cmluZyBodHRwUHJveHk7Ci0gICAgICAgICAgICBpZiAoIXZhbHVlLT5h
c1N0cmluZyhodHRwUHJveHkpKQorICAgICAgICBpZiAoYXV0byB2YWx1ZSA9IHByb3h5T2JqZWN0
LmdldFZhbHVlKCJodHRwUHJveHkiX3MpKSB7CisgICAgICAgICAgICBhdXRvIGh0dHBQcm94eSA9
IHZhbHVlLT5hc1N0cmluZygpOworICAgICAgICAgICAgaWYgKCFodHRwUHJveHkpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgICAgICAgICAgcHJveHkuaHR0cFVS
TCA9IFVSTCh7IH0sIG1ha2VTdHJpbmcoImh0dHA6Ly8iLCBodHRwUHJveHkpKTsKICAgICAgICAg
ICAgIGlmICghcHJveHkuaHR0cFVSTC0+aXNWYWxpZCgpKQogICAgICAgICAgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHByb3h5T2JqZWN0LmdldFZh
bHVlKCJzc2xQcm94eSJfcywgdmFsdWUpKSB7Ci0gICAgICAgICAgICBTdHJpbmcgc3NsUHJveHk7
Ci0gICAgICAgICAgICBpZiAoIXZhbHVlLT5hc1N0cmluZyhzc2xQcm94eSkpCisgICAgICAgIGlm
IChhdXRvIHZhbHVlID0gcHJveHlPYmplY3QuZ2V0VmFsdWUoInNzbFByb3h5Il9zKSkgeworICAg
ICAgICAgICAgYXV0byBzc2xQcm94eSA9IHZhbHVlLT5hc1N0cmluZygpOworICAgICAgICAgICAg
aWYgKCFzc2xQcm94eSkKICAgICAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAg
ICAgICAgICAgICBwcm94eS5odHRwc1VSTCA9IFVSTCh7IH0sIG1ha2VTdHJpbmcoImh0dHBzOi8v
Iiwgc3NsUHJveHkpKTsKICAgICAgICAgICAgIGlmICghcHJveHkuaHR0cHNVUkwtPmlzVmFsaWQo
KSkKICAgICAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAgICB9Ci0gICAg
ICAgIGlmIChwcm94eU9iamVjdC5nZXRWYWx1ZSgic29ja3NQcm94eSIsIHZhbHVlKSkgewotICAg
ICAgICAgICAgU3RyaW5nIHNvY2tzUHJveHk7Ci0gICAgICAgICAgICBpZiAoIXZhbHVlLT5hc1N0
cmluZyhzb2Nrc1Byb3h5KSkKKyAgICAgICAgaWYgKGF1dG8gdmFsdWUgPSBwcm94eU9iamVjdC5n
ZXRWYWx1ZSgic29ja3NQcm94eSIpKSB7CisgICAgICAgICAgICBhdXRvIHNvY2tzUHJveHkgPSB2
YWx1ZS0+YXNTdHJpbmcoKTsKKyAgICAgICAgICAgIGlmICghc29ja3NQcm94eSkKICAgICAgICAg
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgICAgICAgICBwcm94eS5zb2Nrc1VS
TCA9IFVSTCh7IH0sIG1ha2VTdHJpbmcoInNvY2tzOi8vIiwgc29ja3NQcm94eSkpOwogICAgICAg
ICAgICAgaWYgKCFwcm94eS5zb2Nrc1VSTC0+aXNWYWxpZCgpKQogICAgICAgICAgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICAgICAgICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gc29j
a3NWZXJzaW9uVmFsdWU7Ci0gICAgICAgICAgICBpZiAoIXByb3h5T2JqZWN0LmdldFZhbHVlKCJz
b2Nrc1ZlcnNpb24iLCBzb2Nrc1ZlcnNpb25WYWx1ZSkpCisgICAgICAgICAgICBhdXRvIHNvY2tz
VmVyc2lvblZhbHVlID0gcHJveHlPYmplY3QuZ2V0VmFsdWUoInNvY2tzVmVyc2lvbiIpOworICAg
ICAgICAgICAgaWYgKCFzb2Nrc1ZlcnNpb25WYWx1ZSkKICAgICAgICAgICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwogCiAgICAgICAgICAgICBhdXRvIHNvY2tzVmVyc2lvbiA9IHVuc2lnbmVk
VmFsdWUoKnNvY2tzVmVyc2lvblZhbHVlKTsKQEAgLTQyMSwxOCArNDIyLDE3IEBAIHN0YXRpYyBP
cHRpb25hbDxQcm94eT4gZGVzZXJpYWxpemVQcm94eShKU09OOjpPYmplY3QmIHByb3h5T2JqZWN0
KQogICAgICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAgICAgICBwcm94
eS5zb2Nrc1ZlcnNpb24gPSBzb2Nrc1ZlcnNpb24udmFsdWUoKTsKICAgICAgICAgfQotICAgICAg
ICBpZiAocHJveHlPYmplY3QuZ2V0VmFsdWUoIm5vUHJveHkiX3MsIHZhbHVlKSkgewotICAgICAg
ICAgICAgUmVmUHRyPEpTT046OkFycmF5PiBub1Byb3h5OwotICAgICAgICAgICAgaWYgKCF2YWx1
ZS0+YXNBcnJheShub1Byb3h5KSkKKyAgICAgICAgaWYgKGF1dG8gdmFsdWUgPSBwcm94eU9iamVj
dC5nZXRWYWx1ZSgibm9Qcm94eSJfcykpIHsKKyAgICAgICAgICAgIGF1dG8gbm9Qcm94eSA9IHZh
bHVlLT5hc0FycmF5KCk7CisgICAgICAgICAgICBpZiAoIW5vUHJveHkpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgICAgICAgICAgYXV0byBub1Byb3h5TGVuZ3Ro
ID0gbm9Qcm94eS0+bGVuZ3RoKCk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbm9Qcm94eUxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgUmVmUHRyPEpTT046OlZh
bHVlPiBhZGRyZXNzVmFsdWUgPSBub1Byb3h5LT5nZXQoaSk7Ci0gICAgICAgICAgICAgICAgU3Ry
aW5nIGFkZHJlc3M7Ci0gICAgICAgICAgICAgICAgaWYgKCFhZGRyZXNzVmFsdWUtPmFzU3RyaW5n
KGFkZHJlc3MpKQorICAgICAgICAgICAgICAgIGF1dG8gYWRkcmVzcyA9IG5vUHJveHktPmdldChp
KS0+YXNTdHJpbmcoKTsKKyAgICAgICAgICAgICAgICBpZiAoIWFkZHJlc3MpCiAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgICAgICAgICAgICAgcHJveHkuaWdu
b3JlQWRkcmVzc0xpc3QuYXBwZW5kKFdURk1vdmUoYWRkcmVzcykpOworICAgICAgICAgICAgICAg
IHByb3h5Lmlnbm9yZUFkZHJlc3NMaXN0LmFwcGVuZChhZGRyZXNzKTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQogCkBAIC00NzEsNDMgKzQ3MSw1MyBAQCBzdGF0aWMgT3B0aW9uYWw8VW5oYW5k
bGVkUHJvbXB0QmVoYXZpb3I+IGRlc2VyaWFsaXplVW5oYW5kbGVkUHJvbXB0QmVoYXZpb3IoY29u
cwogdm9pZCBXZWJEcml2ZXJTZXJ2aWNlOjpwYXJzZUNhcGFiaWxpdGllcyhjb25zdCBKU09OOjpP
YmplY3QmIG1hdGNoZWRDYXBhYmlsaXRpZXMsIENhcGFiaWxpdGllcyYgY2FwYWJpbGl0aWVzKSBj
b25zdAogewogICAgIC8vIE1hdGNoZWQgY2FwYWJpbGl0aWVzIGhhdmUgYWxyZWFkeSBiZWVuIHZh
bGlkYXRlZC4KLSAgICBib29sIGFjY2VwdEluc2VjdXJlQ2VydHM7Ci0gICAgaWYgKG1hdGNoZWRD
YXBhYmlsaXRpZXMuZ2V0Qm9vbGVhbigiYWNjZXB0SW5zZWN1cmVDZXJ0cyJfcywgYWNjZXB0SW5z
ZWN1cmVDZXJ0cykpCi0gICAgICAgIGNhcGFiaWxpdGllcy5hY2NlcHRJbnNlY3VyZUNlcnRzID0g
YWNjZXB0SW5zZWN1cmVDZXJ0czsKLSAgICBib29sIHNldFdpbmRvd1JlY3Q7Ci0gICAgaWYgKG1h
dGNoZWRDYXBhYmlsaXRpZXMuZ2V0Qm9vbGVhbigic2V0V2luZG93UmVjdCJfcywgc2V0V2luZG93
UmVjdCkpCi0gICAgICAgIGNhcGFiaWxpdGllcy5zZXRXaW5kb3dSZWN0ID0gc2V0V2luZG93UmVj
dDsKLSAgICBTdHJpbmcgYnJvd3Nlck5hbWU7Ci0gICAgaWYgKG1hdGNoZWRDYXBhYmlsaXRpZXMu
Z2V0U3RyaW5nKCJicm93c2VyTmFtZSJfcywgYnJvd3Nlck5hbWUpKQorICAgIGF1dG8gYWNjZXB0
SW5zZWN1cmVDZXJ0cyA9IG1hdGNoZWRDYXBhYmlsaXRpZXMuZ2V0Qm9vbGVhbigiYWNjZXB0SW5z
ZWN1cmVDZXJ0cyJfcyk7CisgICAgaWYgKGFjY2VwdEluc2VjdXJlQ2VydHMpCisgICAgICAgIGNh
cGFiaWxpdGllcy5hY2NlcHRJbnNlY3VyZUNlcnRzID0gKmFjY2VwdEluc2VjdXJlQ2VydHM7CisK
KyAgICBhdXRvIHNldFdpbmRvd1JlY3QgPSBtYXRjaGVkQ2FwYWJpbGl0aWVzLmdldEJvb2xlYW4o
InNldFdpbmRvd1JlY3QiX3MpOworICAgIGlmIChzZXRXaW5kb3dSZWN0KQorICAgICAgICBjYXBh
YmlsaXRpZXMuc2V0V2luZG93UmVjdCA9ICpzZXRXaW5kb3dSZWN0OworCisgICAgYXV0byBicm93
c2VyTmFtZSA9IG1hdGNoZWRDYXBhYmlsaXRpZXMuZ2V0U3RyaW5nKCJicm93c2VyTmFtZSJfcyk7
CisgICAgaWYgKCEhYnJvd3Nlck5hbWUpCiAgICAgICAgIGNhcGFiaWxpdGllcy5icm93c2VyTmFt
ZSA9IGJyb3dzZXJOYW1lOwotICAgIFN0cmluZyBicm93c2VyVmVyc2lvbjsKLSAgICBpZiAobWF0
Y2hlZENhcGFiaWxpdGllcy5nZXRTdHJpbmcoImJyb3dzZXJWZXJzaW9uIl9zLCBicm93c2VyVmVy
c2lvbikpCisKKyAgICBhdXRvIGJyb3dzZXJWZXJzaW9uID0gbWF0Y2hlZENhcGFiaWxpdGllcy5n
ZXRTdHJpbmcoImJyb3dzZXJWZXJzaW9uIl9zKTsKKyAgICBpZiAoISFicm93c2VyVmVyc2lvbikK
ICAgICAgICAgY2FwYWJpbGl0aWVzLmJyb3dzZXJWZXJzaW9uID0gYnJvd3NlclZlcnNpb247Ci0g
ICAgU3RyaW5nIHBsYXRmb3JtTmFtZTsKLSAgICBpZiAobWF0Y2hlZENhcGFiaWxpdGllcy5nZXRT
dHJpbmcoInBsYXRmb3JtTmFtZSJfcywgcGxhdGZvcm1OYW1lKSkKKworICAgIGF1dG8gcGxhdGZv
cm1OYW1lID0gbWF0Y2hlZENhcGFiaWxpdGllcy5nZXRTdHJpbmcoInBsYXRmb3JtTmFtZSJfcyk7
CisgICAgaWYgKCEhcGxhdGZvcm1OYW1lKQogICAgICAgICBjYXBhYmlsaXRpZXMucGxhdGZvcm1O
YW1lID0gcGxhdGZvcm1OYW1lOwotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHByb3h5OwotICAg
IGlmIChtYXRjaGVkQ2FwYWJpbGl0aWVzLmdldE9iamVjdCgicHJveHkiX3MsIHByb3h5KSkKKwor
ICAgIGF1dG8gcHJveHkgPSBtYXRjaGVkQ2FwYWJpbGl0aWVzLmdldE9iamVjdCgicHJveHkiX3Mp
OworICAgIGlmIChwcm94eSkKICAgICAgICAgY2FwYWJpbGl0aWVzLnByb3h5ID0gZGVzZXJpYWxp
emVQcm94eSgqcHJveHkpOwotICAgIGJvb2wgc3RyaWN0RmlsZUludGVyYWN0YWJpbGl0eTsKLSAg
ICBpZiAobWF0Y2hlZENhcGFiaWxpdGllcy5nZXRCb29sZWFuKCJzdHJpY3RGaWxlSW50ZXJhY3Rh
YmlsaXR5Il9zLCBzdHJpY3RGaWxlSW50ZXJhY3RhYmlsaXR5KSkKLSAgICAgICAgY2FwYWJpbGl0
aWVzLnN0cmljdEZpbGVJbnRlcmFjdGFiaWxpdHkgPSBzdHJpY3RGaWxlSW50ZXJhY3RhYmlsaXR5
OwotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHRpbWVvdXRzOwotICAgIGlmIChtYXRjaGVkQ2Fw
YWJpbGl0aWVzLmdldE9iamVjdCgidGltZW91dHMiX3MsIHRpbWVvdXRzKSkKKworICAgIGF1dG8g
c3RyaWN0RmlsZUludGVyYWN0YWJpbGl0eSA9IG1hdGNoZWRDYXBhYmlsaXRpZXMuZ2V0Qm9vbGVh
bigic3RyaWN0RmlsZUludGVyYWN0YWJpbGl0eSJfcyk7CisgICAgaWYgKHN0cmljdEZpbGVJbnRl
cmFjdGFiaWxpdHkpCisgICAgICAgIGNhcGFiaWxpdGllcy5zdHJpY3RGaWxlSW50ZXJhY3RhYmls
aXR5ID0gKnN0cmljdEZpbGVJbnRlcmFjdGFiaWxpdHk7CisKKyAgICBhdXRvIHRpbWVvdXRzID0g
bWF0Y2hlZENhcGFiaWxpdGllcy5nZXRPYmplY3QoInRpbWVvdXRzIl9zKTsKKyAgICBpZiAodGlt
ZW91dHMpCiAgICAgICAgIGNhcGFiaWxpdGllcy50aW1lb3V0cyA9IGRlc2VyaWFsaXplVGltZW91
dHMoKnRpbWVvdXRzLCBJZ25vcmVVbmtub3duVGltZW91dDo6Tm8pOwotICAgIFN0cmluZyBwYWdl
TG9hZFN0cmF0ZWd5OwotICAgIGlmIChtYXRjaGVkQ2FwYWJpbGl0aWVzLmdldFN0cmluZygicGFn
ZUxvYWRTdHJhdGVneSJfcywgcGFnZUxvYWRTdHJhdGVneSkpCisKKyAgICBhdXRvIHBhZ2VMb2Fk
U3RyYXRlZ3kgPSBtYXRjaGVkQ2FwYWJpbGl0aWVzLmdldFN0cmluZygicGFnZUxvYWRTdHJhdGVn
eSJfcyk7CisgICAgaWYgKCEhcGFnZUxvYWRTdHJhdGVneSkKICAgICAgICAgY2FwYWJpbGl0aWVz
LnBhZ2VMb2FkU3RyYXRlZ3kgPSBkZXNlcmlhbGl6ZVBhZ2VMb2FkU3RyYXRlZ3kocGFnZUxvYWRT
dHJhdGVneSk7Ci0gICAgU3RyaW5nIHVuaGFuZGxlZFByb21wdEJlaGF2aW9yOwotICAgIGlmICht
YXRjaGVkQ2FwYWJpbGl0aWVzLmdldFN0cmluZygidW5oYW5kbGVkUHJvbXB0QmVoYXZpb3IiX3Ms
IHVuaGFuZGxlZFByb21wdEJlaGF2aW9yKSkKKworICAgIGF1dG8gdW5oYW5kbGVkUHJvbXB0QmVo
YXZpb3IgPSBtYXRjaGVkQ2FwYWJpbGl0aWVzLmdldFN0cmluZygidW5oYW5kbGVkUHJvbXB0QmVo
YXZpb3IiX3MpOworICAgIGlmICghIXVuaGFuZGxlZFByb21wdEJlaGF2aW9yKQogICAgICAgICBj
YXBhYmlsaXRpZXMudW5oYW5kbGVkUHJvbXB0QmVoYXZpb3IgPSBkZXNlcmlhbGl6ZVVuaGFuZGxl
ZFByb21wdEJlaGF2aW9yKHVuaGFuZGxlZFByb21wdEJlaGF2aW9yKTsKKwogICAgIHBsYXRmb3Jt
UGFyc2VDYXBhYmlsaXRpZXMobWF0Y2hlZENhcGFiaWxpdGllcywgY2FwYWJpbGl0aWVzKTsKIH0K
IAogYm9vbCBXZWJEcml2ZXJTZXJ2aWNlOjpmaW5kU2Vzc2lvbk9yQ29tcGxldGVXaXRoRXJyb3Io
SlNPTjo6T2JqZWN0JiBwYXJhbWV0ZXJzLCBGdW5jdGlvbjx2b2lkIChDb21tYW5kUmVzdWx0JiYp
PiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgU3RyaW5nIHNlc3Npb25JRDsKLSAgICBpZiAo
IXBhcmFtZXRlcnMuZ2V0U3RyaW5nKCJzZXNzaW9uSWQiX3MsIHNlc3Npb25JRCkpIHsKKyAgICBh
dXRvIHNlc3Npb25JRCA9IHBhcmFtZXRlcnMuZ2V0U3RyaW5nKCJzZXNzaW9uSWQiX3MpOworICAg
IGlmICghc2Vzc2lvbklEKSB7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1
bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpJbnZhbGlkQXJndW1lbnQpKTsKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTUzMCw1MCArNTQwLDUwIEBAIFJlZlB0cjxK
U09OOjpPYmplY3Q+IFdlYkRyaXZlclNlcnZpY2U6OnZhbGlkYXRlZENhcGFiaWxpdGllcyhjb25z
dCBKU09OOjpPYmplY3QmCiB7CiAgICAgLy8gwqc3LjIgUHJvY2Vzc2luZyBDYXBhYmlsaXRpZXMu
CiAgICAgLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmRyaXZlci93ZWJkcml2ZXItc3BlYy5o
dG1sI2Rmbi12YWxpZGF0ZS1jYXBhYmlsaXRpZXMKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBy
ZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGF1dG8gcmVzdWx0ID0gSlNPTjo6
T2JqZWN0OjpjcmVhdGUoKTsKICAgICBhdXRvIGVuZCA9IGNhcGFiaWxpdGllcy5lbmQoKTsKICAg
ICBmb3IgKGF1dG8gaXQgPSBjYXBhYmlsaXRpZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7
CiAgICAgICAgIGlmIChpdC0+dmFsdWUtPmlzTnVsbCgpKQogICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgIGlmIChpdC0+a2V5ID09ICJhY2NlcHRJbnNlY3VyZUNlcnRzIikgewotICAgICAg
ICAgICAgYm9vbCBhY2NlcHRJbnNlY3VyZUNlcnRzOwotICAgICAgICAgICAgaWYgKCFpdC0+dmFs
dWUtPmFzQm9vbGVhbihhY2NlcHRJbnNlY3VyZUNlcnRzKSkKKyAgICAgICAgICAgIGF1dG8gYWNj
ZXB0SW5zZWN1cmVDZXJ0cyA9IGl0LT52YWx1ZS0+YXNCb29sZWFuKCk7CisgICAgICAgICAgICBp
ZiAoIWFjY2VwdEluc2VjdXJlQ2VydHMpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0gICAgICAgICAgICByZXN1bHQtPnNldEJvb2xlYW4oaXQtPmtleSwgYWNjZXB0SW5zZWN1cmVD
ZXJ0cyk7CisgICAgICAgICAgICByZXN1bHQtPnNldEJvb2xlYW4oaXQtPmtleSwgKmFjY2VwdElu
c2VjdXJlQ2VydHMpOwogICAgICAgICB9IGVsc2UgaWYgKGl0LT5rZXkgPT0gImJyb3dzZXJOYW1l
IiB8fCBpdC0+a2V5ID09ICJicm93c2VyVmVyc2lvbiIgfHwgaXQtPmtleSA9PSAicGxhdGZvcm1O
YW1lIikgewotICAgICAgICAgICAgU3RyaW5nIHN0cmluZ1ZhbHVlOwotICAgICAgICAgICAgaWYg
KCFpdC0+dmFsdWUtPmFzU3RyaW5nKHN0cmluZ1ZhbHVlKSkKKyAgICAgICAgICAgIGF1dG8gc3Ry
aW5nVmFsdWUgPSBpdC0+dmFsdWUtPmFzU3RyaW5nKCk7CisgICAgICAgICAgICBpZiAoIXN0cmlu
Z1ZhbHVlKQogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICAgICAgcmVz
dWx0LT5zZXRTdHJpbmcoaXQtPmtleSwgc3RyaW5nVmFsdWUpOwogICAgICAgICB9IGVsc2UgaWYg
KGl0LT5rZXkgPT0gInBhZ2VMb2FkU3RyYXRlZ3kiKSB7Ci0gICAgICAgICAgICBTdHJpbmcgcGFn
ZUxvYWRTdHJhdGVneTsKLSAgICAgICAgICAgIGlmICghaXQtPnZhbHVlLT5hc1N0cmluZyhwYWdl
TG9hZFN0cmF0ZWd5KSB8fCAhZGVzZXJpYWxpemVQYWdlTG9hZFN0cmF0ZWd5KHBhZ2VMb2FkU3Ry
YXRlZ3kpKQorICAgICAgICAgICAgYXV0byBwYWdlTG9hZFN0cmF0ZWd5ID0gaXQtPnZhbHVlLT5h
c1N0cmluZygpOworICAgICAgICAgICAgaWYgKCFwYWdlTG9hZFN0cmF0ZWd5IHx8ICFkZXNlcmlh
bGl6ZVBhZ2VMb2FkU3RyYXRlZ3kocGFnZUxvYWRTdHJhdGVneSkpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAgICAgICAgICAgICByZXN1bHQtPnNldFN0cmluZyhpdC0+a2V5LCBw
YWdlTG9hZFN0cmF0ZWd5KTsKICAgICAgICAgfSBlbHNlIGlmIChpdC0+a2V5ID09ICJwcm94eSIp
IHsKLSAgICAgICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHByb3h5OwotICAgICAgICAgICAg
aWYgKCFpdC0+dmFsdWUtPmFzT2JqZWN0KHByb3h5KSB8fCAhZGVzZXJpYWxpemVQcm94eSgqcHJv
eHkpKQorICAgICAgICAgICAgYXV0byBwcm94eSA9IGl0LT52YWx1ZS0+YXNPYmplY3QoKTsKKyAg
ICAgICAgICAgIGlmICghcHJveHkgfHwgIWRlc2VyaWFsaXplUHJveHkoKnByb3h5KSkKICAgICAg
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0VmFsdWUo
aXQtPmtleSwgUmVmUHRyPEpTT046OlZhbHVlPihpdC0+dmFsdWUpKTsKKyAgICAgICAgICAgIHJl
c3VsdC0+c2V0VmFsdWUoaXQtPmtleSwgKml0LT52YWx1ZSk7CiAgICAgICAgIH0gZWxzZSBpZiAo
aXQtPmtleSA9PSAic3RyaWN0RmlsZUludGVyYWN0YWJpbGl0eSIpIHsKLSAgICAgICAgICAgIGJv
b2wgc3RyaWN0RmlsZUludGVyYWN0YWJpbGl0eTsKLSAgICAgICAgICAgIGlmICghaXQtPnZhbHVl
LT5hc0Jvb2xlYW4oc3RyaWN0RmlsZUludGVyYWN0YWJpbGl0eSkpCisgICAgICAgICAgICBhdXRv
IHN0cmljdEZpbGVJbnRlcmFjdGFiaWxpdHkgPSBpdC0+dmFsdWUtPmFzQm9vbGVhbigpOworICAg
ICAgICAgICAgaWYgKCFzdHJpY3RGaWxlSW50ZXJhY3RhYmlsaXR5KQogICAgICAgICAgICAgICAg
IHJldHVybiBudWxscHRyOwotICAgICAgICAgICAgcmVzdWx0LT5zZXRCb29sZWFuKGl0LT5rZXks
IHN0cmljdEZpbGVJbnRlcmFjdGFiaWxpdHkpOworICAgICAgICAgICAgcmVzdWx0LT5zZXRCb29s
ZWFuKGl0LT5rZXksICpzdHJpY3RGaWxlSW50ZXJhY3RhYmlsaXR5KTsKICAgICAgICAgfSBlbHNl
IGlmIChpdC0+a2V5ID09ICJ0aW1lb3V0cyIpIHsKLSAgICAgICAgICAgIFJlZlB0cjxKU09OOjpP
YmplY3Q+IHRpbWVvdXRzOwotICAgICAgICAgICAgaWYgKCFpdC0+dmFsdWUtPmFzT2JqZWN0KHRp
bWVvdXRzKSB8fCAhZGVzZXJpYWxpemVUaW1lb3V0cygqdGltZW91dHMsIElnbm9yZVVua25vd25U
aW1lb3V0OjpObykpCisgICAgICAgICAgICBhdXRvIHRpbWVvdXRzID0gaXQtPnZhbHVlLT5hc09i
amVjdCgpOworICAgICAgICAgICAgaWYgKCF0aW1lb3V0cyB8fCAhZGVzZXJpYWxpemVUaW1lb3V0
cygqdGltZW91dHMsIElnbm9yZVVua25vd25UaW1lb3V0OjpObykpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0gICAgICAgICAgICByZXN1bHQtPnNldFZhbHVlKGl0LT5rZXksIFJl
ZlB0cjxKU09OOjpWYWx1ZT4oaXQtPnZhbHVlKSk7CisgICAgICAgICAgICByZXN1bHQtPnNldFZh
bHVlKGl0LT5rZXksICppdC0+dmFsdWUpOwogICAgICAgICB9IGVsc2UgaWYgKGl0LT5rZXkgPT0g
InVuaGFuZGxlZFByb21wdEJlaGF2aW9yIikgewotICAgICAgICAgICAgU3RyaW5nIHVuaGFuZGxl
ZFByb21wdEJlaGF2aW9yOwotICAgICAgICAgICAgaWYgKCFpdC0+dmFsdWUtPmFzU3RyaW5nKHVu
aGFuZGxlZFByb21wdEJlaGF2aW9yKSB8fCAhZGVzZXJpYWxpemVVbmhhbmRsZWRQcm9tcHRCZWhh
dmlvcih1bmhhbmRsZWRQcm9tcHRCZWhhdmlvcikpCisgICAgICAgICAgICBhdXRvIHVuaGFuZGxl
ZFByb21wdEJlaGF2aW9yID0gaXQtPnZhbHVlLT5hc1N0cmluZygpOworICAgICAgICAgICAgaWYg
KCF1bmhhbmRsZWRQcm9tcHRCZWhhdmlvciB8fCAhZGVzZXJpYWxpemVVbmhhbmRsZWRQcm9tcHRC
ZWhhdmlvcih1bmhhbmRsZWRQcm9tcHRCZWhhdmlvcikpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgICAgICAgICByZXN1bHQtPnNldFN0cmluZyhpdC0+a2V5LCB1bmhhbmRs
ZWRQcm9tcHRCZWhhdmlvcik7CiAgICAgICAgIH0gZWxzZSBpZiAoaXQtPmtleS5maW5kKCI6Iikg
IT0gbm90Rm91bmQpIHsKICAgICAgICAgICAgIGlmICghcGxhdGZvcm1WYWxpZGF0ZUNhcGFiaWxp
dHkoaXQtPmtleSwgaXQtPnZhbHVlKSkKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICAgICAgICAgIHJlc3VsdC0+c2V0VmFsdWUoaXQtPmtleSwgUmVmUHRyPEpTT046OlZhbHVl
PihpdC0+dmFsdWUpKTsKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0VmFsdWUoaXQtPmtleSwgKml0
LT52YWx1ZSk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAg
ICAgfQpAQCAtNTg0LDE0ICs1OTQsMTQgQEAgUmVmUHRyPEpTT046Ok9iamVjdD4gV2ViRHJpdmVy
U2VydmljZTo6bWVyZ2VDYXBhYmlsaXRpZXMoY29uc3QgSlNPTjo6T2JqZWN0JiByZXEKIHsKICAg
ICAvLyDCpzcuMiBQcm9jZXNzaW5nIENhcGFiaWxpdGllcy4KICAgICAvLyBodHRwczovL3czYy5n
aXRodWIuaW8vd2ViZHJpdmVyL3dlYmRyaXZlci1zcGVjLmh0bWwjZGZuLW1lcmdpbmctY2FwYWJp
bGl0aWVzCi0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0Ojpj
cmVhdGUoKTsKKyAgICBhdXRvIHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAg
YXV0byByZXF1aXJlZEVuZCA9IHJlcXVpcmVkQ2FwYWJpbGl0aWVzLmVuZCgpOwogICAgIGZvciAo
YXV0byBpdCA9IHJlcXVpcmVkQ2FwYWJpbGl0aWVzLmJlZ2luKCk7IGl0ICE9IHJlcXVpcmVkRW5k
OyArK2l0KQotICAgICAgICByZXN1bHQtPnNldFZhbHVlKGl0LT5rZXksIFJlZlB0cjxKU09OOjpW
YWx1ZT4oaXQtPnZhbHVlKSk7CisgICAgICAgIHJlc3VsdC0+c2V0VmFsdWUoaXQtPmtleSwgKml0
LT52YWx1ZSk7CiAKICAgICBhdXRvIGZpcnN0TWF0Y2hFbmQgPSBmaXJzdE1hdGNoQ2FwYWJpbGl0
aWVzLmVuZCgpOwogICAgIGZvciAoYXV0byBpdCA9IGZpcnN0TWF0Y2hDYXBhYmlsaXRpZXMuYmVn
aW4oKTsgaXQgIT0gZmlyc3RNYXRjaEVuZDsgKytpdCkKLSAgICAgICAgcmVzdWx0LT5zZXRWYWx1
ZShpdC0+a2V5LCBSZWZQdHI8SlNPTjo6VmFsdWU+KGl0LT52YWx1ZSkpOworICAgICAgICByZXN1
bHQtPnNldFZhbHVlKGl0LT5rZXksICppdC0+dmFsdWUpOwogCiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KQEAgLTYwNCw3ICs2MTQsNyBAQCBSZWZQdHI8SlNPTjo6T2JqZWN0PiBXZWJEcml2ZXJTZXJ2
aWNlOjptYXRjaENhcGFiaWxpdGllcyhjb25zdCBKU09OOjpPYmplY3QmIG1lcgogCiAgICAgLy8g
U29tZSBjYXBhYmlsaXRpZXMgbGlrZSBicm93c2VyIG5hbWUgYW5kIHZlcnNpb24gbWlnaHQgbmVl
ZCB0byBsYXVuY2ggdGhlIGJyb3dzZXIsCiAgICAgLy8gc28gd2Ugb25seSByZWplY3QgdGhlIGtu
b3duIGNhcGFiaWxpdGllcyB0aGF0IGRvbid0IG1hdGNoLgotICAgIFJlZlB0cjxKU09OOjpPYmpl
Y3Q+IG1hdGNoZWRDYXBhYmlsaXRpZXMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGF1
dG8gbWF0Y2hlZENhcGFiaWxpdGllcyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgaWYg
KHBsYXRmb3JtQ2FwYWJpbGl0aWVzLmJyb3dzZXJOYW1lKQogICAgICAgICBtYXRjaGVkQ2FwYWJp
bGl0aWVzLT5zZXRTdHJpbmcoImJyb3dzZXJOYW1lIl9zLCBwbGF0Zm9ybUNhcGFiaWxpdGllcy5i
cm93c2VyTmFtZS52YWx1ZSgpKTsKICAgICBpZiAocGxhdGZvcm1DYXBhYmlsaXRpZXMuYnJvd3Nl
clZlcnNpb24pCkBAIC02MjEsMzUgKzYzMSwyOCBAQCBSZWZQdHI8SlNPTjo6T2JqZWN0PiBXZWJE
cml2ZXJTZXJ2aWNlOjptYXRjaENhcGFiaWxpdGllcyhjb25zdCBKU09OOjpPYmplY3QmIG1lcgog
ICAgIGF1dG8gZW5kID0gbWVyZ2VkQ2FwYWJpbGl0aWVzLmVuZCgpOwogICAgIGZvciAoYXV0byBp
dCA9IG1lcmdlZENhcGFiaWxpdGllcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAg
ICAgaWYgKGl0LT5rZXkgPT0gImJyb3dzZXJOYW1lIiAmJiBwbGF0Zm9ybUNhcGFiaWxpdGllcy5i
cm93c2VyTmFtZSkgewotICAgICAgICAgICAgU3RyaW5nIGJyb3dzZXJOYW1lOwotICAgICAgICAg
ICAgaXQtPnZhbHVlLT5hc1N0cmluZyhicm93c2VyTmFtZSk7CisgICAgICAgICAgICBhdXRvIGJy
b3dzZXJOYW1lID0gaXQtPnZhbHVlLT5hc1N0cmluZygpOwogICAgICAgICAgICAgaWYgKCFlcXVh
bElnbm9yaW5nQVNDSUlDYXNlKHBsYXRmb3JtQ2FwYWJpbGl0aWVzLmJyb3dzZXJOYW1lLnZhbHVl
KCksIGJyb3dzZXJOYW1lKSkKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAg
ICAgfSBlbHNlIGlmIChpdC0+a2V5ID09ICJicm93c2VyVmVyc2lvbiIgJiYgcGxhdGZvcm1DYXBh
YmlsaXRpZXMuYnJvd3NlclZlcnNpb24pIHsKLSAgICAgICAgICAgIFN0cmluZyBicm93c2VyVmVy
c2lvbjsKLSAgICAgICAgICAgIGl0LT52YWx1ZS0+YXNTdHJpbmcoYnJvd3NlclZlcnNpb24pOwor
ICAgICAgICAgICAgYXV0byBicm93c2VyVmVyc2lvbiA9IGl0LT52YWx1ZS0+YXNTdHJpbmcoKTsK
ICAgICAgICAgICAgIGlmICghcGxhdGZvcm1Db21wYXJlQnJvd3NlclZlcnNpb25zKGJyb3dzZXJW
ZXJzaW9uLCBwbGF0Zm9ybUNhcGFiaWxpdGllcy5icm93c2VyVmVyc2lvbi52YWx1ZSgpKSkKICAg
ICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgfSBlbHNlIGlmIChpdC0+a2V5
ID09ICJwbGF0Zm9ybU5hbWUiICYmIHBsYXRmb3JtQ2FwYWJpbGl0aWVzLnBsYXRmb3JtTmFtZSkg
ewotICAgICAgICAgICAgU3RyaW5nIHBsYXRmb3JtTmFtZTsKLSAgICAgICAgICAgIGl0LT52YWx1
ZS0+YXNTdHJpbmcocGxhdGZvcm1OYW1lKTsKKyAgICAgICAgICAgIGF1dG8gcGxhdGZvcm1OYW1l
ID0gaXQtPnZhbHVlLT5hc1N0cmluZygpOwogICAgICAgICAgICAgaWYgKCFlcXVhbExldHRlcnNJ
Z25vcmluZ0FTQ0lJQ2FzZShwbGF0Zm9ybU5hbWUsICJhbnkiKSAmJiBwbGF0Zm9ybUNhcGFiaWxp
dGllcy5wbGF0Zm9ybU5hbWUudmFsdWUoKSAhPSBwbGF0Zm9ybU5hbWUpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIH0gZWxzZSBpZiAoaXQtPmtleSA9PSAiYWNjZXB0
SW5zZWN1cmVDZXJ0cyIgJiYgcGxhdGZvcm1DYXBhYmlsaXRpZXMuYWNjZXB0SW5zZWN1cmVDZXJ0
cykgewotICAgICAgICAgICAgYm9vbCBhY2NlcHRJbnNlY3VyZUNlcnRzOwotICAgICAgICAgICAg
aXQtPnZhbHVlLT5hc0Jvb2xlYW4oYWNjZXB0SW5zZWN1cmVDZXJ0cyk7CisgICAgICAgICAgICBh
dXRvIGFjY2VwdEluc2VjdXJlQ2VydHMgPSBpdC0+dmFsdWUtPmFzQm9vbGVhbigpOwogICAgICAg
ICAgICAgaWYgKGFjY2VwdEluc2VjdXJlQ2VydHMgJiYgIXBsYXRmb3JtQ2FwYWJpbGl0aWVzLmFj
Y2VwdEluc2VjdXJlQ2VydHMudmFsdWUoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKICAgICAgICAgfSBlbHNlIGlmIChpdC0+a2V5ID09ICJwcm94eSIpIHsKLSAgICAgICAgICAg
IFJlZlB0cjxKU09OOjpPYmplY3Q+IHByb3h5OwotICAgICAgICAgICAgaXQtPnZhbHVlLT5hc09i
amVjdChwcm94eSk7Ci0gICAgICAgICAgICBTdHJpbmcgcHJveHlUeXBlOwotICAgICAgICAgICAg
cHJveHktPmdldFN0cmluZygicHJveHlUeXBlIl9zLCBwcm94eVR5cGUpOworICAgICAgICAgICAg
YXV0byBwcm94eVR5cGUgPSBpdC0+dmFsdWUtPmFzT2JqZWN0KCktPmdldFN0cmluZygicHJveHlU
eXBlIl9zKTsKICAgICAgICAgICAgIGlmICghcGxhdGZvcm1TdXBwb3J0UHJveHlUeXBlKHByb3h5
VHlwZSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIH0gZWxzZSBp
ZiAoIXBsYXRmb3JtTWF0Y2hDYXBhYmlsaXR5KGl0LT5rZXksIGl0LT52YWx1ZSkpCiAgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgbWF0Y2hlZENhcGFiaWxpdGllcy0+c2V0VmFs
dWUoaXQtPmtleSwgUmVmUHRyPEpTT046OlZhbHVlPihpdC0+dmFsdWUpKTsKKyAgICAgICAgbWF0
Y2hlZENhcGFiaWxpdGllcy0+c2V0VmFsdWUoaXQtPmtleSwgKml0LT52YWx1ZSk7CiAgICAgfQog
CiAgICAgcmV0dXJuIG1hdGNoZWRDYXBhYmlsaXRpZXM7CkBAIC02NjEsMTkgKzY2NCwxOSBAQCBW
ZWN0b3I8Q2FwYWJpbGl0aWVzPiBXZWJEcml2ZXJTZXJ2aWNlOjpwcm9jZXNzQ2FwYWJpbGl0aWVz
KGNvbnN0IEpTT046Ok9iamVjdCYgcAogICAgIC8vIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJk
cml2ZXIvd2ViZHJpdmVyLXNwZWMuaHRtbCNwcm9jZXNzaW5nLWNhcGFiaWxpdGllcwogCiAgICAg
Ly8gMS4gTGV0IGNhcGFiaWxpdGllcyByZXF1ZXN0IGJlIHRoZSByZXN1bHQgb2YgZ2V0dGluZyB0
aGUgcHJvcGVydHkgImNhcGFiaWxpdGllcyIgZnJvbSBwYXJhbWV0ZXJzLgotICAgIFJlZlB0cjxK
U09OOjpPYmplY3Q+IGNhcGFiaWxpdGllc09iamVjdDsKLSAgICBpZiAoIXBhcmFtZXRlcnMuZ2V0
T2JqZWN0KCJjYXBhYmlsaXRpZXMiX3MsIGNhcGFiaWxpdGllc09iamVjdCkpIHsKKyAgICBhdXRv
IGNhcGFiaWxpdGllc09iamVjdCA9IHBhcmFtZXRlcnMuZ2V0T2JqZWN0KCJjYXBhYmlsaXRpZXMi
X3MpOworICAgIGlmICghY2FwYWJpbGl0aWVzT2JqZWN0KSB7CiAgICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpJbnZh
bGlkQXJndW1lbnQpKTsKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKICAgICAvLyAyLiBM
ZXQgcmVxdWlyZWQgY2FwYWJpbGl0aWVzIGJlIHRoZSByZXN1bHQgb2YgZ2V0dGluZyB0aGUgcHJv
cGVydHkgImFsd2F5c01hdGNoIiBmcm9tIGNhcGFiaWxpdGllcyByZXF1ZXN0LgotICAgIFJlZlB0
cjxKU09OOjpWYWx1ZT4gcmVxdWlyZWRDYXBhYmlsaXRpZXNWYWx1ZTsKLSAgICBSZWZQdHI8SlNP
Tjo6T2JqZWN0PiByZXF1aXJlZENhcGFiaWxpdGllczsKLSAgICBpZiAoIWNhcGFiaWxpdGllc09i
amVjdC0+Z2V0VmFsdWUoImFsd2F5c01hdGNoIl9zLCByZXF1aXJlZENhcGFiaWxpdGllc1ZhbHVl
KSkKKyAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHJlcXVpcmVkQ2FwYWJpbGl0aWVzOworICAgIGF1
dG8gcmVxdWlyZWRDYXBhYmlsaXRpZXNWYWx1ZSA9IGNhcGFiaWxpdGllc09iamVjdC0+Z2V0VmFs
dWUoImFsd2F5c01hdGNoIl9zKTsKKyAgICBpZiAoIXJlcXVpcmVkQ2FwYWJpbGl0aWVzVmFsdWUp
IHsKICAgICAgICAgLy8gMi4xLiBJZiByZXF1aXJlZCBjYXBhYmlsaXRpZXMgaXMgdW5kZWZpbmVk
LCBzZXQgdGhlIHZhbHVlIHRvIGFuIGVtcHR5IEpTT04gT2JqZWN0LgogICAgICAgICByZXF1aXJl
ZENhcGFiaWxpdGllcyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgZWxzZSBpZiAoIXJl
cXVpcmVkQ2FwYWJpbGl0aWVzVmFsdWUtPmFzT2JqZWN0KHJlcXVpcmVkQ2FwYWJpbGl0aWVzKSkg
eworICAgIH0gZWxzZSBpZiAoIShyZXF1aXJlZENhcGFiaWxpdGllcyA9IHJlcXVpcmVkQ2FwYWJp
bGl0aWVzVmFsdWUtPmFzT2JqZWN0KCkpKSB7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENv
bW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpJbnZhbGlkQXJndW1l
bnQsIFN0cmluZygiYWx3YXlzTWF0Y2ggaXMgaW52YWxpZCBpbiBjYXBhYmlsaXRpZXMiKSkpOwog
ICAgICAgICByZXR1cm4geyB9OwogICAgIH0KQEAgLTY4NiwxMyArNjg5LDEzIEBAIFZlY3RvcjxD
YXBhYmlsaXRpZXM+IFdlYkRyaXZlclNlcnZpY2U6OnByb2Nlc3NDYXBhYmlsaXRpZXMoY29uc3Qg
SlNPTjo6T2JqZWN0JiBwCiAgICAgfQogCiAgICAgLy8gMy4gTGV0IGFsbCBmaXJzdCBtYXRjaCBj
YXBhYmlsaXRpZXMgYmUgdGhlIHJlc3VsdCBvZiBnZXR0aW5nIHRoZSBwcm9wZXJ0eSAiZmlyc3RN
YXRjaCIgZnJvbSBjYXBhYmlsaXRpZXMgcmVxdWVzdC4KLSAgICBSZWZQdHI8SlNPTjo6VmFsdWU+
IGZpcnN0TWF0Y2hDYXBhYmlsaXRpZXNWYWx1ZTsKICAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IGZp
cnN0TWF0Y2hDYXBhYmlsaXRpZXNMaXN0OwotICAgIGlmICghY2FwYWJpbGl0aWVzT2JqZWN0LT5n
ZXRWYWx1ZSgiZmlyc3RNYXRjaCJfcywgZmlyc3RNYXRjaENhcGFiaWxpdGllc1ZhbHVlKSkgewor
ICAgIGF1dG8gZmlyc3RNYXRjaENhcGFiaWxpdGllc1ZhbHVlID0gY2FwYWJpbGl0aWVzT2JqZWN0
LT5nZXRWYWx1ZSgiZmlyc3RNYXRjaCJfcyk7CisgICAgaWYgKCFmaXJzdE1hdGNoQ2FwYWJpbGl0
aWVzVmFsdWUpIHsKICAgICAgICAgLy8gMy4xLiBJZiBhbGwgZmlyc3QgbWF0Y2ggY2FwYWJpbGl0
aWVzIGlzIHVuZGVmaW5lZCwgc2V0IHRoZSB2YWx1ZSB0byBhIEpTT04gTGlzdCB3aXRoIGEgc2lu
Z2xlIGVudHJ5IG9mIGFuIGVtcHR5IEpTT04gT2JqZWN0LgogICAgICAgICBmaXJzdE1hdGNoQ2Fw
YWJpbGl0aWVzTGlzdCA9IEpTT046OkFycmF5OjpjcmVhdGUoKTsKICAgICAgICAgZmlyc3RNYXRj
aENhcGFiaWxpdGllc0xpc3QtPnB1c2hPYmplY3QoSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSk7Ci0g
ICAgfSBlbHNlIGlmICghZmlyc3RNYXRjaENhcGFiaWxpdGllc1ZhbHVlLT5hc0FycmF5KGZpcnN0
TWF0Y2hDYXBhYmlsaXRpZXNMaXN0KSkgeworICAgIH0gZWxzZSBpZiAoIShmaXJzdE1hdGNoQ2Fw
YWJpbGl0aWVzTGlzdCA9IGZpcnN0TWF0Y2hDYXBhYmlsaXRpZXNWYWx1ZS0+YXNBcnJheSgpKSkg
ewogICAgICAgICAvLyAzLjIuIElmIGFsbCBmaXJzdCBtYXRjaCBjYXBhYmlsaXRpZXMgaXMgbm90
IGEgSlNPTiBMaXN0LCByZXR1cm4gZXJyb3Igd2l0aCBlcnJvciBjb2RlIGludmFsaWQgYXJndW1l
bnQuCiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFu
ZFJlc3VsdDo6RXJyb3JDb2RlOjpJbnZhbGlkQXJndW1lbnQsIFN0cmluZygiZmlyc3RNYXRjaCBp
cyBpbnZhbGlkIGluIGNhcGFiaWxpdGllcyIpKSk7CiAgICAgICAgIHJldHVybiB7IH07CkBAIC03
MDQsOSArNzA3LDggQEAgVmVjdG9yPENhcGFiaWxpdGllcz4gV2ViRHJpdmVyU2VydmljZTo6cHJv
Y2Vzc0NhcGFiaWxpdGllcyhjb25zdCBKU09OOjpPYmplY3QmIHAKICAgICB2YWxpZGF0ZWRGaXJz
dE1hdGNoQ2FwYWJpbGl0aWVzTGlzdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGZpcnN0TWF0Y2hD
YXBhYmlsaXRpZXNMaXN0TGVuZ3RoKTsKICAgICAvLyA1LiBGb3IgZWFjaCBmaXJzdCBtYXRjaCBj
YXBhYmlsaXRpZXMgY29ycmVzcG9uZGluZyB0byBhbiBpbmRleGVkIHByb3BlcnR5IGluIGFsbCBm
aXJzdCBtYXRjaCBjYXBhYmlsaXRpZXMuCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZp
cnN0TWF0Y2hDYXBhYmlsaXRpZXNMaXN0TGVuZ3RoOyArK2kpIHsKLSAgICAgICAgUmVmUHRyPEpT
T046OlZhbHVlPiBmaXJzdE1hdGNoQ2FwYWJpbGl0aWVzVmFsdWUgPSBmaXJzdE1hdGNoQ2FwYWJp
bGl0aWVzTGlzdC0+Z2V0KGkpOwotICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBmaXJzdE1h
dGNoQ2FwYWJpbGl0aWVzOwotICAgICAgICBpZiAoIWZpcnN0TWF0Y2hDYXBhYmlsaXRpZXNWYWx1
ZS0+YXNPYmplY3QoZmlyc3RNYXRjaENhcGFiaWxpdGllcykpIHsKKyAgICAgICAgYXV0byBmaXJz
dE1hdGNoQ2FwYWJpbGl0aWVzID0gZmlyc3RNYXRjaENhcGFiaWxpdGllc0xpc3QtPmdldChpKS0+
YXNPYmplY3QoKTsKKyAgICAgICAgaWYgKCFmaXJzdE1hdGNoQ2FwYWJpbGl0aWVzKSB7CiAgICAg
ICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1
bHQ6OkVycm9yQ29kZTo6SW52YWxpZEFyZ3VtZW50LCBTdHJpbmcoIkludmFsaWQgY2FwYWJpbGl0
aWVzIGZvdW5kIGluIGZpcnN0TWF0Y2giKSkpOwogICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAg
ICAgICAgfQpAQCAtODE1LDkgKzgxNyw5IEBAIHZvaWQgV2ViRHJpdmVyU2VydmljZTo6Y3JlYXRl
U2Vzc2lvbihWZWN0b3I8Q2FwYWJpbGl0aWVzPiYmIGNhcGFiaWxpdGllc0xpc3QsIHN0CiAKICAg
ICAgICAgICAgIG1fc2Vzc2lvbiA9IFdURk1vdmUoc2Vzc2lvbik7CiAKLSAgICAgICAgICAgIFJl
ZlB0cjxKU09OOjpPYmplY3Q+IHJlc3VsdE9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7
CisgICAgICAgICAgICBhdXRvIHJlc3VsdE9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7
CiAgICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZygic2Vzc2lvbklkIl9zLCBtX3Nl
c3Npb24tPmlkKCkpOwotICAgICAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gY2FwYWJpbGl0
aWVzT2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgICAgIGF1dG8gY2Fw
YWJpbGl0aWVzT2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICAgICAgIGNv
bnN0IGF1dG8mIGNhcGFiaWxpdGllcyA9IG1fc2Vzc2lvbi0+Y2FwYWJpbGl0aWVzKCk7CiAgICAg
ICAgICAgICBjYXBhYmlsaXRpZXNPYmplY3QtPnNldFN0cmluZygiYnJvd3Nlck5hbWUiX3MsIGNh
cGFiaWxpdGllcy5icm93c2VyTmFtZS52YWx1ZU9yKGVtcHR5U3RyaW5nKCkpKTsKICAgICAgICAg
ICAgIGNhcGFiaWxpdGllc09iamVjdC0+c2V0U3RyaW5nKCJicm93c2VyVmVyc2lvbiJfcywgY2Fw
YWJpbGl0aWVzLmJyb3dzZXJWZXJzaW9uLnZhbHVlT3IoZW1wdHlTdHJpbmcoKSkpOwpAQCAtODU1
LDcgKzg1Nyw3IEBAIHZvaWQgV2ViRHJpdmVyU2VydmljZTo6Y3JlYXRlU2Vzc2lvbihWZWN0b3I8
Q2FwYWJpbGl0aWVzPiYmIGNhcGFiaWxpdGllc0xpc3QsIHN0CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICBpZiAoIWNhcGFiaWxpdGllcy5wcm94eSkKICAgICAgICAgICAgICAgICBjYXBhYmls
aXRpZXNPYmplY3QtPnNldE9iamVjdCgicHJveHkiX3MsIEpTT046Ok9iamVjdDo6Y3JlYXRlKCkp
OwotICAgICAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gdGltZW91dHNPYmplY3QgPSBKU09O
OjpPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICAgICAgYXV0byB0aW1lb3V0c09iamVjdCA9IEpT
T046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgICAgICBpZiAobV9zZXNzaW9uLT5zY3JpcHRU
aW1lb3V0KCkgPT0gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjppbmZpbml0eSgpKQogICAg
ICAgICAgICAgICAgIHRpbWVvdXRzT2JqZWN0LT5zZXRWYWx1ZSgic2NyaXB0Il9zLCBKU09OOjpW
YWx1ZTo6bnVsbCgpKTsKICAgICAgICAgICAgIGVsc2UKQEAgLTExMzUsOCArMTEzNyw4IEBAIHZv
aWQgV2ViRHJpdmVyU2VydmljZTo6Y2xvc2VXaW5kb3coUmVmUHRyPEpTT046Ok9iamVjdD4mJiBw
YXJhbWV0ZXJzLCBGdW5jdGlvbjx2CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAot
ICAgICAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IGhhbmRsZXM7Ci0gICAgICAgIGlmIChyZXN1bHQu
cmVzdWx0KCktPmFzQXJyYXkoaGFuZGxlcykgJiYgIWhhbmRsZXMtPmxlbmd0aCgpKQorICAgICAg
ICBhdXRvIGhhbmRsZXMgPSByZXN1bHQucmVzdWx0KCktPmFzQXJyYXkoKTsKKyAgICAgICAgaWYg
KGhhbmRsZXMgJiYgIWhhbmRsZXMtPmxlbmd0aCgpKQogICAgICAgICAgICAgbV9zZXNzaW9uID0g
bnVsbHB0cjsKIAogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKHJlc3VsdCkpOwpA
QCAtMTE3NSwxMyArMTE3NywxMSBAQCB2b2lkIFdlYkRyaXZlclNlcnZpY2U6Om5ld1dpbmRvdyhS
ZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMsIEZ1bmN0aW9uPHZvaQogICAgICAgICBy
ZXR1cm47CiAKICAgICBPcHRpb25hbDxTdHJpbmc+IHR5cGVIaW50OwotICAgIFJlZlB0cjxKU09O
OjpWYWx1ZT4gdmFsdWU7Ci0gICAgaWYgKHBhcmFtZXRlcnMtPmdldFZhbHVlKCJ0eXBlIl9zLCB2
YWx1ZSkpIHsKLSAgICAgICAgU3RyaW5nIHZhbHVlU3RyaW5nOwotICAgICAgICBpZiAodmFsdWUt
PmFzU3RyaW5nKHZhbHVlU3RyaW5nKSkgewotICAgICAgICAgICAgaWYgKHZhbHVlU3RyaW5nID09
ICJ3aW5kb3ciIHx8IHZhbHVlU3RyaW5nID09ICJ0YWIiKQotICAgICAgICAgICAgICAgIHR5cGVI
aW50ID0gdmFsdWVTdHJpbmc7Ci0gICAgICAgIH0gZWxzZSBpZiAoIXZhbHVlLT5pc051bGwoKSkg
eworICAgIGlmIChhdXRvIHZhbHVlID0gcGFyYW1ldGVycy0+Z2V0VmFsdWUoInR5cGUiX3MpKSB7
CisgICAgICAgIGF1dG8gdmFsdWVTdHJpbmcgPSB2YWx1ZS0+YXNTdHJpbmcoKTsKKyAgICAgICAg
aWYgKHZhbHVlU3RyaW5nID09ICJ3aW5kb3ciIHx8IHZhbHVlU3RyaW5nID09ICJ0YWIiKQorICAg
ICAgICAgICAgdHlwZUhpbnQgPSB2YWx1ZVN0cmluZzsKKyAgICAgICAgZWxzZSBpZiAoIXZhbHVl
LT5pc051bGwoKSkgewogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3Vs
dDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OkludmFsaWRBcmd1bWVudCkpOwogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC0xMjE0LDggKzEyMTQsNyBAQCB2b2lkIFdl
YkRyaXZlclNlcnZpY2U6OnN3aXRjaFRvRnJhbWUoUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJh
bWV0ZXJzLCBGdW5jdGlvbgogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSlNP
Tjo6VmFsdWU6OlR5cGU6Ok9iamVjdDogewotICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBm
cmFtZUlET2JqZWN0OwotICAgICAgICBmcmFtZUlELT5hc09iamVjdChmcmFtZUlET2JqZWN0KTsK
KyAgICAgICAgYXV0byBmcmFtZUlET2JqZWN0ID0gZnJhbWVJRC0+YXNPYmplY3QoKTsKICAgICAg
ICAgaWYgKGZyYW1lSURPYmplY3QtPmZpbmQoU2Vzc2lvbjo6d2ViRWxlbWVudElkZW50aWZpZXIo
KSkgPT0gZnJhbWVJRE9iamVjdC0+ZW5kKCkpIHsKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5k
bGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpJbnZhbGlk
QXJndW1lbnQpKTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTEyNTYsOCArMTI1NSw4IEBAIHZv
aWQgV2ViRHJpdmVyU2VydmljZTo6c3dpdGNoVG9QYXJlbnRGcmFtZShSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiYmIHBhcmFtZXRlcnMsIEZ1CiAKIHN0YXRpYyBPcHRpb25hbDxTdHJpbmc+IGZpbmRFbGVt
ZW50T3JDb21wbGV0ZVdpdGhFcnJvcihKU09OOjpPYmplY3QmIHBhcmFtZXRlcnMsIEZ1bmN0aW9u
PHZvaWQgKENvbW1hbmRSZXN1bHQmJik+JiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBTdHJp
bmcgZWxlbWVudElEOwotICAgIGlmICghcGFyYW1ldGVycy5nZXRTdHJpbmcoImVsZW1lbnRJZCJf
cywgZWxlbWVudElEKSB8fCBlbGVtZW50SUQuaXNFbXB0eSgpKSB7CisgICAgYXV0byBlbGVtZW50
SUQgPSBwYXJhbWV0ZXJzLmdldFN0cmluZygiZWxlbWVudElkIl9zKTsKKyAgICBpZiAoZWxlbWVu
dElELmlzRW1wdHkoKSkgewogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0
OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6SW52YWxpZEFyZ3VtZW50KSk7CiAgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgfQpAQCAtMTI3NywxMSArMTI3NiwxMyBAQCBz
dGF0aWMgaW5saW5lIGJvb2wgaXNWYWxpZFN0cmF0ZWd5KGNvbnN0IFN0cmluZyYgc3RyYXRlZ3kp
CiAKIHN0YXRpYyBib29sIGZpbmRTdHJhdGVneUFuZFNlbGVjdG9yT3JDb21wbGV0ZVdpdGhFcnJv
cihKU09OOjpPYmplY3QmIHBhcmFtZXRlcnMsIEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSZXN1bHQm
Jik+JiBjb21wbGV0aW9uSGFuZGxlciwgU3RyaW5nJiBzdHJhdGVneSwgU3RyaW5nJiBzZWxlY3Rv
cikKIHsKLSAgICBpZiAoIXBhcmFtZXRlcnMuZ2V0U3RyaW5nKCJ1c2luZyJfcywgc3RyYXRlZ3kp
IHx8ICFpc1ZhbGlkU3RyYXRlZ3koc3RyYXRlZ3kpKSB7CisgICAgc3RyYXRlZ3kgPSBwYXJhbWV0
ZXJzLmdldFN0cmluZygidXNpbmciX3MpOworICAgIGlmICghaXNWYWxpZFN0cmF0ZWd5KHN0cmF0
ZWd5KSkgewogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENv
bW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6SW52YWxpZEFyZ3VtZW50KSk7CiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICB9Ci0gICAgaWYgKCFwYXJhbWV0ZXJzLmdldFN0cmluZygidmFsdWUiX3Ms
IHNlbGVjdG9yKSkgeworICAgIHNlbGVjdG9yID0gcGFyYW1ldGVycy5nZXRTdHJpbmcoInZhbHVl
Il9zKTsKKyAgICBpZiAoIXNlbGVjdG9yKSB7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENv
bW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpJbnZhbGlkQXJndW1l
bnQpKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTE1ODQsMTEgKzE1ODUsMTMg
QEAgdm9pZCBXZWJEcml2ZXJTZXJ2aWNlOjpnZXRQYWdlU291cmNlKFJlZlB0cjxKU09OOjpPYmpl
Y3Q+JiYgcGFyYW1ldGVycywgRnVuY3Rpb24KIAogc3RhdGljIGJvb2wgZmluZFNjcmlwdEFuZEFy
Z3VtZW50c09yQ29tcGxldGVXaXRoRXJyb3IoSlNPTjo6T2JqZWN0JiBwYXJhbWV0ZXJzLCBGdW5j
dGlvbjx2b2lkIChDb21tYW5kUmVzdWx0JiYpPiYgY29tcGxldGlvbkhhbmRsZXIsIFN0cmluZyYg
c2NyaXB0LCBSZWZQdHI8SlNPTjo6QXJyYXk+JiBhcmd1bWVudHMpCiB7Ci0gICAgaWYgKCFwYXJh
bWV0ZXJzLmdldFN0cmluZygic2NyaXB0Il9zLCBzY3JpcHQpKSB7CisgICAgc2NyaXB0ID0gcGFy
YW1ldGVycy5nZXRTdHJpbmcoInNjcmlwdCJfcyk7CisgICAgaWYgKCFzY3JpcHQpIHsKICAgICAg
ICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpF
cnJvckNvZGU6OkludmFsaWRBcmd1bWVudCkpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
fQotICAgIGlmICghcGFyYW1ldGVycy5nZXRBcnJheSgiYXJncyJfcywgYXJndW1lbnRzKSkgewor
ICAgIGFyZ3VtZW50cyA9IHBhcmFtZXRlcnMuZ2V0QXJyYXkoImFyZ3MiX3MpOworICAgIGlmICgh
YXJndW1lbnRzKSB7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZh
aWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpJbnZhbGlkQXJndW1lbnQpKTsKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTE2NzgsMzcgKzE2ODEsNDAgQEAgdm9pZCBXZWJEcml2
ZXJTZXJ2aWNlOjpnZXROYW1lZENvb2tpZShSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRl
cnMsIEZ1bmN0aW8KIHN0YXRpYyBPcHRpb25hbDxTZXNzaW9uOjpDb29raWU+IGRlc2VyaWFsaXpl
Q29va2llKEpTT046Ok9iamVjdCYgY29va2llT2JqZWN0KQogewogICAgIFNlc3Npb246OkNvb2tp
ZSBjb29raWU7Ci0gICAgaWYgKCFjb29raWVPYmplY3QuZ2V0U3RyaW5nKCJuYW1lIl9zLCBjb29r
aWUubmFtZSkgfHwgY29va2llLm5hbWUuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwotICAgIGlmICghY29va2llT2JqZWN0LmdldFN0cmluZygidmFsdWUiX3MsIGNvb2tp
ZS52YWx1ZSkgfHwgY29va2llLnZhbHVlLmlzRW1wdHkoKSkKKworICAgIGNvb2tpZS5uYW1lID0g
Y29va2llT2JqZWN0LmdldFN0cmluZygibmFtZSJfcyk7CisgICAgaWYgKGNvb2tpZS5uYW1lLmlz
RW1wdHkoKSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIFJlZlB0cjxKU09O
OjpWYWx1ZT4gdmFsdWU7Ci0gICAgaWYgKGNvb2tpZU9iamVjdC5nZXRWYWx1ZSgicGF0aCJfcywg
dmFsdWUpKSB7Ci0gICAgICAgIFN0cmluZyBwYXRoOwotICAgICAgICBpZiAoIXZhbHVlLT5hc1N0
cmluZyhwYXRoKSkKKyAgICBjb29raWUudmFsdWUgPSBjb29raWVPYmplY3QuZ2V0U3RyaW5nKCJ2
YWx1ZSJfcyk7CisgICAgaWYgKGNvb2tpZS52YWx1ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CisKKyAgICBpZiAoYXV0byB2YWx1ZSA9IGNvb2tpZU9iamVjdC5nZXRW
YWx1ZSgicGF0aCJfcykpIHsKKyAgICAgICAgYXV0byBwYXRoID0gdmFsdWUtPmFzU3RyaW5nKCk7
CisgICAgICAgIGlmICghcGF0aCkKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAg
ICAgICAgIGNvb2tpZS5wYXRoID0gcGF0aDsKICAgICB9Ci0gICAgaWYgKGNvb2tpZU9iamVjdC5n
ZXRWYWx1ZSgiZG9tYWluIl9zLCB2YWx1ZSkpIHsKLSAgICAgICAgU3RyaW5nIGRvbWFpbjsKLSAg
ICAgICAgaWYgKCF2YWx1ZS0+YXNTdHJpbmcoZG9tYWluKSkKKyAgICBpZiAoYXV0byB2YWx1ZSA9
IGNvb2tpZU9iamVjdC5nZXRWYWx1ZSgiZG9tYWluIl9zKSkgeworICAgICAgICBhdXRvIGRvbWFp
biA9IHZhbHVlLT5hc1N0cmluZygpOworICAgICAgICBpZiAoIWRvbWFpbikKICAgICAgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAgIGNvb2tpZS5kb21haW4gPSBkb21haW47CiAg
ICAgfQotICAgIGlmIChjb29raWVPYmplY3QuZ2V0VmFsdWUoInNlY3VyZSJfcywgdmFsdWUpKSB7
Ci0gICAgICAgIGJvb2wgc2VjdXJlOwotICAgICAgICBpZiAoIXZhbHVlLT5hc0Jvb2xlYW4oc2Vj
dXJlKSkKKyAgICBpZiAoYXV0byB2YWx1ZSA9IGNvb2tpZU9iamVjdC5nZXRWYWx1ZSgic2VjdXJl
Il9zKSkgeworICAgICAgICBhdXRvIHNlY3VyZSA9IHZhbHVlLT5hc0Jvb2xlYW4oKTsKKyAgICAg
ICAgaWYgKCFzZWN1cmUpCiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAg
ICBjb29raWUuc2VjdXJlID0gc2VjdXJlOwogICAgIH0KLSAgICBpZiAoY29va2llT2JqZWN0Lmdl
dFZhbHVlKCJodHRwT25seSJfcywgdmFsdWUpKSB7Ci0gICAgICAgIGJvb2wgaHR0cE9ubHk7Ci0g
ICAgICAgIGlmICghdmFsdWUtPmFzQm9vbGVhbihodHRwT25seSkpCisgICAgaWYgKGF1dG8gdmFs
dWUgPSBjb29raWVPYmplY3QuZ2V0VmFsdWUoImh0dHBPbmx5Il9zKSkgeworICAgICAgICBhdXRv
IGh0dHBPbmx5ID0gdmFsdWUtPmFzQm9vbGVhbigpOworICAgICAgICBpZiAoIWh0dHBPbmx5KQog
ICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAgICAgY29va2llLmh0dHBPbmx5
ID0gaHR0cE9ubHk7CiAgICAgfQotICAgIGlmIChjb29raWVPYmplY3QuZ2V0VmFsdWUoImV4cGly
eSJfcywgdmFsdWUpKSB7CisgICAgaWYgKGF1dG8gdmFsdWUgPSBjb29raWVPYmplY3QuZ2V0VmFs
dWUoImV4cGlyeSJfcykpIHsKICAgICAgICAgYXV0byBleHBpcnkgPSB1bnNpZ25lZFZhbHVlKCp2
YWx1ZSk7CiAgICAgICAgIGlmICghZXhwaXJ5KQogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKQEAgLTE3ODYsOCArMTc5Miw4IEBAIHZvaWQgV2ViRHJpdmVyU2VydmljZTo6ZGVsZXRl
QWxsQ29va2llcyhSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMsIEZ1bmN0CiAKIHN0
YXRpYyBib29sIHByb2Nlc3NQYXVzZUFjdGlvbihKU09OOjpPYmplY3QmIGFjdGlvbkl0ZW0sIEFj
dGlvbiYgYWN0aW9uLCBPcHRpb25hbDxTdHJpbmc+JiBlcnJvck1lc3NhZ2UpCiB7Ci0gICAgUmVm
UHRyPEpTT046OlZhbHVlPiBkdXJhdGlvblZhbHVlOwotICAgIGlmICghYWN0aW9uSXRlbS5nZXRW
YWx1ZSgiZHVyYXRpb24iX3MsIGR1cmF0aW9uVmFsdWUpKQorICAgIGF1dG8gZHVyYXRpb25WYWx1
ZSA9IGFjdGlvbkl0ZW0uZ2V0VmFsdWUoImR1cmF0aW9uIl9zKTsKKyAgICBpZiAoIWR1cmF0aW9u
VmFsdWUpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgYXV0byBkdXJhdGlvbiA9IHVuc2ln
bmVkVmFsdWUoKmR1cmF0aW9uVmFsdWUpOwpAQCAtMTgwMiw4ICsxODA4LDcgQEAgc3RhdGljIGJv
b2wgcHJvY2Vzc1BhdXNlQWN0aW9uKEpTT046Ok9iamVjdCYgYWN0aW9uSXRlbSwgQWN0aW9uJiBh
Y3Rpb24sIE9wdGlvbmEKIAogc3RhdGljIE9wdGlvbmFsPEFjdGlvbj4gcHJvY2Vzc051bGxBY3Rp
b24oY29uc3QgU3RyaW5nJiBpZCwgSlNPTjo6T2JqZWN0JiBhY3Rpb25JdGVtLCBPcHRpb25hbDxT
dHJpbmc+JiBlcnJvck1lc3NhZ2UpCiB7Ci0gICAgU3RyaW5nIHN1YnR5cGU7Ci0gICAgYWN0aW9u
SXRlbS5nZXRTdHJpbmcoInR5cGUiX3MsIHN1YnR5cGUpOworICAgIGF1dG8gc3VidHlwZSA9IGFj
dGlvbkl0ZW0uZ2V0U3RyaW5nKCJ0eXBlIl9zKTsKICAgICBpZiAoc3VidHlwZSAhPSAicGF1c2Ui
KSB7CiAgICAgICAgIGVycm9yTWVzc2FnZSA9IFN0cmluZygiVGhlIHBhcmFtZXRlciAndHlwZScg
aW4gbnVsbCBhY3Rpb24gaXMgaW52YWxpZCBvciBtaXNzaW5nIik7CiAgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CkBAIC0xODE5LDggKzE4MjQsNyBAQCBzdGF0aWMgT3B0aW9uYWw8QWN0aW9u
PiBwcm9jZXNzTnVsbEFjdGlvbihjb25zdCBTdHJpbmcmIGlkLCBKU09OOjpPYmplY3QmIGFjdGlv
bgogc3RhdGljIE9wdGlvbmFsPEFjdGlvbj4gcHJvY2Vzc0tleUFjdGlvbihjb25zdCBTdHJpbmcm
IGlkLCBKU09OOjpPYmplY3QmIGFjdGlvbkl0ZW0sIE9wdGlvbmFsPFN0cmluZz4mIGVycm9yTWVz
c2FnZSkKIHsKICAgICBBY3Rpb246OlN1YnR5cGUgYWN0aW9uU3VidHlwZTsKLSAgICBTdHJpbmcg
c3VidHlwZTsKLSAgICBhY3Rpb25JdGVtLmdldFN0cmluZygidHlwZSJfcywgc3VidHlwZSk7Cisg
ICAgYXV0byBzdWJ0eXBlID0gYWN0aW9uSXRlbS5nZXRTdHJpbmcoInR5cGUiX3MpOwogICAgIGlm
IChzdWJ0eXBlID09ICJwYXVzZSIpCiAgICAgICAgIGFjdGlvblN1YnR5cGUgPSBBY3Rpb246OlN1
YnR5cGU6OlBhdXNlOwogICAgIGVsc2UgaWYgKHN1YnR5cGUgPT0gImtleVVwIikKQEAgLTE4NDEs
MTMgKzE4NDUsMTMgQEAgc3RhdGljIE9wdGlvbmFsPEFjdGlvbj4gcHJvY2Vzc0tleUFjdGlvbihj
b25zdCBTdHJpbmcmIGlkLCBKU09OOjpPYmplY3QmIGFjdGlvbkkKICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBBY3Rpb246OlN1YnR5cGU6OktleVVwOgogICAgIGNhc2UgQWN0aW9uOjpTdWJ0eXBl
OjpLZXlEb3duOiB7Ci0gICAgICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4ga2V5VmFsdWU7Ci0gICAg
ICAgIGlmICghYWN0aW9uSXRlbS5nZXRWYWx1ZSgidmFsdWUiX3MsIGtleVZhbHVlKSkgeworICAg
ICAgICBhdXRvIGtleVZhbHVlID0gYWN0aW9uSXRlbS5nZXRWYWx1ZSgidmFsdWUiX3MpOworICAg
ICAgICBpZiAoIWtleVZhbHVlKSB7CiAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBTdHJpbmco
IlRoZSBwYXJhbWF0ZXIgJ3ZhbHVlJyBpcyBtaXNzaW5nIGZvciBrZXkgdXAvZG93biBhY3Rpb24i
KTsKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAgIH0KLSAgICAgICAg
U3RyaW5nIGtleTsKLSAgICAgICAgaWYgKCFrZXlWYWx1ZS0+YXNTdHJpbmcoa2V5KSB8fCBrZXku
aXNFbXB0eSgpKSB7CisgICAgICAgIGF1dG8ga2V5ID0ga2V5VmFsdWUtPmFzU3RyaW5nKGtleSk7
CisgICAgICAgIGlmICgha2V5LmlzRW1wdHkoKSkgewogICAgICAgICAgICAgZXJyb3JNZXNzYWdl
ID0gU3RyaW5nKCJUaGUgcGFyYW1hdGVyICd2YWx1ZScgaXMgaW52YWxpZCBmb3Iga2V5IHVwL2Rv
d24gYWN0aW9uIik7CiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAgICB9
CkBAIC0xODg0LDggKzE4ODgsNyBAQCBzdGF0aWMgTW91c2VCdXR0b24gYWN0aW9uTW91c2VCdXR0
b24odW5zaWduZWQgYnV0dG9uKQogc3RhdGljIE9wdGlvbmFsPEFjdGlvbj4gcHJvY2Vzc1BvaW50
ZXJBY3Rpb24oY29uc3QgU3RyaW5nJiBpZCwgUG9pbnRlclBhcmFtZXRlcnMmIHBhcmFtZXRlcnMs
IEpTT046Ok9iamVjdCYgYWN0aW9uSXRlbSwgT3B0aW9uYWw8U3RyaW5nPiYgZXJyb3JNZXNzYWdl
KQogewogICAgIEFjdGlvbjo6U3VidHlwZSBhY3Rpb25TdWJ0eXBlOwotICAgIFN0cmluZyBzdWJ0
eXBlOwotICAgIGFjdGlvbkl0ZW0uZ2V0U3RyaW5nKCJ0eXBlIl9zLCBzdWJ0eXBlKTsKKyAgICBh
dXRvIHN1YnR5cGUgPSBhY3Rpb25JdGVtLmdldFN0cmluZygidHlwZSJfcyk7CiAgICAgaWYgKHN1
YnR5cGUgPT0gInBhdXNlIikKICAgICAgICAgYWN0aW9uU3VidHlwZSA9IEFjdGlvbjo6U3VidHlw
ZTo6UGF1c2U7CiAgICAgZWxzZSBpZiAoc3VidHlwZSA9PSAicG9pbnRlclVwIikKQEAgLTE5MTEs
OCArMTkxNCw4IEBAIHN0YXRpYyBPcHRpb25hbDxBY3Rpb24+IHByb2Nlc3NQb2ludGVyQWN0aW9u
KGNvbnN0IFN0cmluZyYgaWQsIFBvaW50ZXJQYXJhbWV0ZXJzCiAgICAgICAgIGJyZWFrOwogICAg
IGNhc2UgQWN0aW9uOjpTdWJ0eXBlOjpQb2ludGVyVXA6CiAgICAgY2FzZSBBY3Rpb246OlN1YnR5
cGU6OlBvaW50ZXJEb3duOiB7Ci0gICAgICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gYnV0dG9uVmFs
dWU7Ci0gICAgICAgIGlmICghYWN0aW9uSXRlbS5nZXRWYWx1ZSgiYnV0dG9uIl9zLCBidXR0b25W
YWx1ZSkpIHsKKyAgICAgICAgYXV0byBidXR0b25WYWx1ZSA9IGFjdGlvbkl0ZW0uZ2V0VmFsdWUo
ImJ1dHRvbiJfcyk7CisgICAgICAgIGlmICghYnV0dG9uVmFsdWUpIHsKICAgICAgICAgICAgIGVy
cm9yTWVzc2FnZSA9IFN0cmluZygiVGhlIHBhcmFtYXRlciAnYnV0dG9uJyBpcyBtaXNzaW5nIGZv
ciBwb2ludGVyIHVwL2Rvd24gYWN0aW9uIik7CiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwogICAgICAgICB9CkBAIC0xOTI1LDggKzE5MjgsNyBAQCBzdGF0aWMgT3B0aW9uYWw8QWN0
aW9uPiBwcm9jZXNzUG9pbnRlckFjdGlvbihjb25zdCBTdHJpbmcmIGlkLCBQb2ludGVyUGFyYW1l
dGVycwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBBY3Rpb246OlN1YnR5cGU6OlBv
aW50ZXJNb3ZlOiB7Ci0gICAgICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gZHVyYXRpb25WYWx1ZTsK
LSAgICAgICAgaWYgKGFjdGlvbkl0ZW0uZ2V0VmFsdWUoImR1cmF0aW9uIl9zLCBkdXJhdGlvblZh
bHVlKSkgeworICAgICAgICBpZiAoYXV0byBkdXJhdGlvblZhbHVlID0gYWN0aW9uSXRlbS5nZXRW
YWx1ZSgiZHVyYXRpb24iX3MpKSB7CiAgICAgICAgICAgICBhdXRvIGR1cmF0aW9uID0gdW5zaWdu
ZWRWYWx1ZSgqZHVyYXRpb25WYWx1ZSk7CiAgICAgICAgICAgICBpZiAoIWR1cmF0aW9uKSB7CiAg
ICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gU3RyaW5nKCJUaGUgcGFyYW1ldGVyICdkdXJh
dGlvbicgaXMgaW52YWxpZCBpbiBwb2ludGVyIG1vdmUgYWN0aW9uIik7CkBAIC0xOTM1LDIwICsx
OTM3LDE2IEBAIHN0YXRpYyBPcHRpb25hbDxBY3Rpb24+IHByb2Nlc3NQb2ludGVyQWN0aW9uKGNv
bnN0IFN0cmluZyYgaWQsIFBvaW50ZXJQYXJhbWV0ZXJzCiAgICAgICAgICAgICBhY3Rpb24uZHVy
YXRpb24gPSBkdXJhdGlvbi52YWx1ZSgpOwogICAgICAgICB9CiAKLSAgICAgICAgUmVmUHRyPEpT
T046OlZhbHVlPiBvcmlnaW5WYWx1ZTsKLSAgICAgICAgaWYgKGFjdGlvbkl0ZW0uZ2V0VmFsdWUo
Im9yaWdpbiJfcywgb3JpZ2luVmFsdWUpKSB7Ci0gICAgICAgICAgICBpZiAob3JpZ2luVmFsdWUt
PnR5cGUoKSA9PSBKU09OOjpWYWx1ZTo6VHlwZTo6T2JqZWN0KSB7Ci0gICAgICAgICAgICAgICAg
UmVmUHRyPEpTT046Ok9iamVjdD4gb3JpZ2luT2JqZWN0OwotICAgICAgICAgICAgICAgIG9yaWdp
blZhbHVlLT5hc09iamVjdChvcmlnaW5PYmplY3QpOwotICAgICAgICAgICAgICAgIFN0cmluZyBl
bGVtZW50SUQ7Ci0gICAgICAgICAgICAgICAgaWYgKCFvcmlnaW5PYmplY3QtPmdldFN0cmluZyhT
ZXNzaW9uOjp3ZWJFbGVtZW50SWRlbnRpZmllcigpLCBlbGVtZW50SUQpKSB7CisgICAgICAgIGlm
IChhdXRvIG9yaWdpblZhbHVlID0gYWN0aW9uSXRlbS5nZXRWYWx1ZSgib3JpZ2luIl9zKSkgewor
ICAgICAgICAgICAgaWYgKGF1dG8gb3JpZ2luT2JqZWN0ID0gb3JpZ2luVmFsdWUtPmFzT2JqZWN0
KG9yaWdpbk9iamVjdCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvIGVsZW1lbnRJRCA9IG9yaWdp
bk9iamVjdC0+Z2V0U3RyaW5nKFNlc3Npb246OndlYkVsZW1lbnRJZGVudGlmaWVyKCkpOworICAg
ICAgICAgICAgICAgIGlmICghZWxlbWVudElEKSB7CiAgICAgICAgICAgICAgICAgICAgIGVycm9y
TWVzc2FnZSA9IFN0cmluZygiVGhlIHBhcmFtZXRlciAnb3JpZ2luJyBpcyBub3QgYSB2YWxpZCB3
ZWIgZWxlbWVudCBvYmplY3QgaW4gcG9pbnRlciBtb3ZlIGFjdGlvbiIpOwogICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICBhY3Rpb24ub3JpZ2luID0gUG9pbnRlck9yaWdpbiB7IFBvaW50ZXJPcmlnaW46OlR5
cGU6OkVsZW1lbnQsIGVsZW1lbnRJRCB9OwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICBTdHJpbmcgb3JpZ2luOwotICAgICAgICAgICAgICAgIG9yaWdpblZhbHVlLT5hc1N0
cmluZyhvcmlnaW4pOworICAgICAgICAgICAgICAgIGF1dG8gb3JpZ2luID0gb3JpZ2luVmFsdWUt
PmFzU3RyaW5nKCk7CiAgICAgICAgICAgICAgICAgaWYgKG9yaWdpbiA9PSAidmlld3BvcnQiKQog
ICAgICAgICAgICAgICAgICAgICBhY3Rpb24ub3JpZ2luID0gUG9pbnRlck9yaWdpbiB7IFBvaW50
ZXJPcmlnaW46OlR5cGU6OlZpZXdwb3J0LCBXVEY6Om51bGxvcHQgfTsKICAgICAgICAgICAgICAg
ICBlbHNlIGlmIChvcmlnaW4gPT0gInBvaW50ZXIiKQpAQCAtMTk2MSw4ICsxOTU5LDcgQEAgc3Rh
dGljIE9wdGlvbmFsPEFjdGlvbj4gcHJvY2Vzc1BvaW50ZXJBY3Rpb24oY29uc3QgU3RyaW5nJiBp
ZCwgUG9pbnRlclBhcmFtZXRlcnMKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBhY3Rpb24u
b3JpZ2luID0gUG9pbnRlck9yaWdpbiB7IFBvaW50ZXJPcmlnaW46OlR5cGU6OlZpZXdwb3J0LCBX
VEY6Om51bGxvcHQgfTsKIAotICAgICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHhWYWx1ZTsKLSAg
ICAgICAgaWYgKGFjdGlvbkl0ZW0uZ2V0VmFsdWUoIngiX3MsIHhWYWx1ZSkpIHsKKyAgICAgICAg
aWYgKGF1dG8geFZhbHVlID0gYWN0aW9uSXRlbS5nZXRWYWx1ZSgieCJfcykpIHsKICAgICAgICAg
ICAgIGF1dG8geCA9IHZhbHVlQXNOdW1iZXJJblJhbmdlKCp4VmFsdWUsIElOVF9NSU4pOwogICAg
ICAgICAgICAgaWYgKCF4KSB7CiAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gU3RyaW5n
KCJUaGUgcGFyYW1hdGVyICd4JyBpcyBpbnZhbGlkIGZvciBwb2ludGVyIG1vdmUgYWN0aW9uIik7
CkBAIC0xOTcxLDggKzE5NjgsNyBAQCBzdGF0aWMgT3B0aW9uYWw8QWN0aW9uPiBwcm9jZXNzUG9p
bnRlckFjdGlvbihjb25zdCBTdHJpbmcmIGlkLCBQb2ludGVyUGFyYW1ldGVycwogICAgICAgICAg
ICAgYWN0aW9uLnggPSB4LnZhbHVlKCk7CiAgICAgICAgIH0KIAotICAgICAgICBSZWZQdHI8SlNP
Tjo6VmFsdWU+IHlWYWx1ZTsKLSAgICAgICAgaWYgKGFjdGlvbkl0ZW0uZ2V0VmFsdWUoInkiX3Ms
IHlWYWx1ZSkpIHsKKyAgICAgICAgaWYgKGF1dG8geVZhbHVlID0gYWN0aW9uSXRlbS5nZXRWYWx1
ZSgieSJfcykpIHsKICAgICAgICAgICAgIGF1dG8geSA9IHZhbHVlQXNOdW1iZXJJblJhbmdlKCp5
VmFsdWUsIElOVF9NSU4pOwogICAgICAgICAgICAgaWYgKCF5KSB7CiAgICAgICAgICAgICAgICAg
ZXJyb3JNZXNzYWdlID0gU3RyaW5nKCJUaGUgcGFyYW1hdGVyICd5JyBpcyBpbnZhbGlkIGZvciBw
b2ludGVyIG1vdmUgYWN0aW9uIik7CkBAIC0xOTk1LDE4ICsxOTkxLDE5IEBAIHN0YXRpYyBPcHRp
b25hbDxBY3Rpb24+IHByb2Nlc3NQb2ludGVyQWN0aW9uKGNvbnN0IFN0cmluZyYgaWQsIFBvaW50
ZXJQYXJhbWV0ZXJzCiBzdGF0aWMgT3B0aW9uYWw8UG9pbnRlclBhcmFtZXRlcnM+IHByb2Nlc3NQ
b2ludGVyUGFyYW1ldGVycyhKU09OOjpPYmplY3QmIGFjdGlvblNlcXVlbmNlLCBPcHRpb25hbDxT
dHJpbmc+JiBlcnJvck1lc3NhZ2UpCiB7CiAgICAgUG9pbnRlclBhcmFtZXRlcnMgcGFyYW1ldGVy
czsKLSAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHBhcmFtZXRlcnNEYXRhVmFsdWU7Ci0gICAgaWYg
KCFhY3Rpb25TZXF1ZW5jZS5nZXRWYWx1ZSgicGFyYW1ldGVycyJfcywgcGFyYW1ldGVyc0RhdGFW
YWx1ZSkpCisKKyAgICBhdXRvIHBhcmFtZXRlcnNEYXRhVmFsdWUgPSBhY3Rpb25TZXF1ZW5jZS5n
ZXRWYWx1ZSgicGFyYW1ldGVycyJfcyk7CisgICAgaWYgKCFwYXJhbWV0ZXJzRGF0YVZhbHVlKQog
ICAgICAgICByZXR1cm4gcGFyYW1ldGVyczsKIAotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBh
cmFtZXRlcnNEYXRhOwotICAgIGlmICghcGFyYW1ldGVyc0RhdGFWYWx1ZS0+YXNPYmplY3QocGFy
YW1ldGVyc0RhdGEpKSB7CisgICAgYXV0byBwYXJhbWV0ZXJzRGF0YSA9IHBhcmFtZXRlcnNEYXRh
VmFsdWUtPmFzT2JqZWN0KCk7CisgICAgaWYgKCFwYXJhbWV0ZXJzRGF0YSkgewogICAgICAgICBl
cnJvck1lc3NhZ2UgPSBTdHJpbmcoIkFjdGlvbiBzZXF1ZW5jZSBwb2ludGVyIHBhcmFtZXRlcnMg
aXMgbm90IGFuIG9iamVjdCIpOwogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIH0K
IAotICAgIFN0cmluZyBwb2ludGVyVHlwZTsKLSAgICBpZiAoIXBhcmFtZXRlcnNEYXRhLT5nZXRT
dHJpbmcoInBvaW50ZXJUeXBlIl9zLCBwb2ludGVyVHlwZSkpCisgICAgYXV0byBwb2ludGVyVHlw
ZSA9IHBhcmFtZXRlcnNEYXRhLT5nZXRTdHJpbmcoInBvaW50ZXJUeXBlIl9zKTsKKyAgICBpZiAo
IXBvaW50ZXJUeXBlKQogICAgICAgICByZXR1cm4gcGFyYW1ldGVyczsKIAogICAgIGlmIChwb2lu
dGVyVHlwZSA9PSAibW91c2UiKQpAQCAtMjAyNSwxNCArMjAyMiwxMyBAQCBzdGF0aWMgT3B0aW9u
YWw8UG9pbnRlclBhcmFtZXRlcnM+IHByb2Nlc3NQb2ludGVyUGFyYW1ldGVycyhKU09OOjpPYmpl
Y3QmIGFjdGlvbgogCiBzdGF0aWMgT3B0aW9uYWw8VmVjdG9yPEFjdGlvbj4+IHByb2Nlc3NJbnB1
dEFjdGlvblNlcXVlbmNlKFNlc3Npb24mIHNlc3Npb24sIEpTT046OlZhbHVlJiBhY3Rpb25TZXF1
ZW5jZVZhbHVlLCBPcHRpb25hbDxTdHJpbmc+JiBlcnJvck1lc3NhZ2UpCiB7Ci0gICAgUmVmUHRy
PEpTT046Ok9iamVjdD4gYWN0aW9uU2VxdWVuY2U7Ci0gICAgaWYgKCFhY3Rpb25TZXF1ZW5jZVZh
bHVlLmFzT2JqZWN0KGFjdGlvblNlcXVlbmNlKSkgeworICAgIGF1dG8gYWN0aW9uU2VxdWVuY2Ug
PSBhY3Rpb25TZXF1ZW5jZVZhbHVlLmFzT2JqZWN0KCk7CisgICAgaWYgKCFhY3Rpb25TZXF1ZW5j
ZSkgewogICAgICAgICBlcnJvck1lc3NhZ2UgPSBTdHJpbmcoIlRoZSBhY3Rpb24gc2VxdWVuY2Ug
aXMgbm90IGFuIG9iamVjdCIpOwogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIH0K
IAotICAgIFN0cmluZyB0eXBlOwotICAgIGFjdGlvblNlcXVlbmNlLT5nZXRTdHJpbmcoInR5cGUi
X3MsIHR5cGUpOworICAgIGF1dG8gdHlwZSA9IGFjdGlvblNlcXVlbmNlLT5nZXRTdHJpbmcoInR5
cGUiX3MpOwogICAgIElucHV0U291cmNlOjpUeXBlIGlucHV0U291cmNlVHlwZTsKICAgICBpZiAo
dHlwZSA9PSAia2V5IikKICAgICAgICAgaW5wdXRTb3VyY2VUeXBlID0gSW5wdXRTb3VyY2U6OlR5
cGU6OktleTsKQEAgLTIwNDUsOCArMjA0MSw4IEBAIHN0YXRpYyBPcHRpb25hbDxWZWN0b3I8QWN0
aW9uPj4gcHJvY2Vzc0lucHV0QWN0aW9uU2VxdWVuY2UoU2Vzc2lvbiYgc2Vzc2lvbiwgSlNPCiAg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgfQogCi0gICAgU3RyaW5nIGlkOwotICAg
IGlmICghYWN0aW9uU2VxdWVuY2UtPmdldFN0cmluZygiaWQiX3MsIGlkKSkgeworICAgIGF1dG8g
aWQgPSBhY3Rpb25TZXF1ZW5jZS0+Z2V0U3RyaW5nKCJpZCJfcyk7CisgICAgaWYgKCFpZCkgewog
ICAgICAgICBlcnJvck1lc3NhZ2UgPSBTdHJpbmcoIlRoZSBwYXJhbWV0ZXIgJ2lkJyBpcyBpbnZh
bGlkIG9yIG1pc3NpbmcgaW4gYWN0aW9uIHNlcXVlbmNlIik7CiAgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CiAgICAgfQpAQCAtMjA4MSw5ICsyMDc3LDggQEAgc3RhdGljIE9wdGlvbmFsPFZl
Y3RvcjxBY3Rpb24+PiBwcm9jZXNzSW5wdXRBY3Rpb25TZXF1ZW5jZShTZXNzaW9uJiBzZXNzaW9u
LCBKU08KICAgICBWZWN0b3I8QWN0aW9uPiBhY3Rpb25zOwogICAgIHVuc2lnbmVkIGFjdGlvbkl0
ZW1zTGVuZ3RoID0gYWN0aW9uSXRlbXMtPmxlbmd0aCgpOwogICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBhY3Rpb25JdGVtc0xlbmd0aDsgKytpKSB7Ci0gICAgICAgIGF1dG8gYWN0aW9uSXRl
bVZhbHVlID0gYWN0aW9uSXRlbXMtPmdldChpKTsKLSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVj
dD4gYWN0aW9uSXRlbTsKLSAgICAgICAgaWYgKCFhY3Rpb25JdGVtVmFsdWUtPmFzT2JqZWN0KGFj
dGlvbkl0ZW0pKSB7CisgICAgICAgIGF1dG8gYWN0aW9uSXRlbSA9IGFjdGlvbkl0ZW1zLT5nZXQo
aSktPmFzT2JqZWN0KCk7CisgICAgICAgIGlmICghYWN0aW9uSXRlbSkgewogICAgICAgICAgICAg
ZXJyb3JNZXNzYWdlID0gU3RyaW5nKCJBbiBhY3Rpb24gaW4gYWN0aW9uIHNlcXVlbmNlIGlzIG5v
dCBhbiBvYmplY3QiKTsKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAg
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRy
b2xsZXJzL0NTU01hbmFnZXIuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFj
ZS9Db250cm9sbGVycy9DU1NNYW5hZ2VyLmpzCmluZGV4IDY4YWVhYTk3ODcwMjhlZThkMTg1OGEx
ZDI3MDc1MDMzNjBiZDRlOTIuLjE1YjYyMzFhZjMzYjRjZjdlZWI4ZDI5MDk4NzNiNGRhNGE1YmE3
YTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRy
b2xsZXJzL0NTU01hbmFnZXIuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRl
cmZhY2UvQ29udHJvbGxlcnMvQ1NTTWFuYWdlci5qcwpAQCAtMjAzLDMyICsyMDMsMzQgQEAgV0ku
Q1NTTWFuYWdlciA9IGNsYXNzIENTU01hbmFnZXIgZXh0ZW5kcyBXSS5PYmplY3QKICAgICAgICAg
aWYgKCF0aGlzLmNhbkZvcmNlQXBwZWFyYW5jZSgpKQogICAgICAgICAgICAgcmV0dXJuOwogCi0g
ICAgICAgIGxldCBwcm90b2NvbE5hbWUgPSAiIjsKKyAgICAgICAgbGV0IGNvbW1hbmRBcmd1bWVu
dHMgPSB7fTsKIAogICAgICAgICBzd2l0Y2ggKG5hbWUpIHsKICAgICAgICAgY2FzZSBXSS5DU1NN
YW5hZ2VyLkFwcGVhcmFuY2UuTGlnaHQ6Ci0gICAgICAgICAgICBwcm90b2NvbE5hbWUgPSBJbnNw
ZWN0b3JCYWNrZW5kLkVudW0uUGFnZS5BcHBlYXJhbmNlLkxpZ2h0OworICAgICAgICAgICAgY29t
bWFuZEFyZ3VtZW50cy5hcHBlYXJhbmNlID0gSW5zcGVjdG9yQmFja2VuZC5FbnVtLlBhZ2UuQXBw
ZWFyYW5jZS5MaWdodDsKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgV0kuQ1NT
TWFuYWdlci5BcHBlYXJhbmNlLkRhcms6Ci0gICAgICAgICAgICBwcm90b2NvbE5hbWUgPSBJbnNw
ZWN0b3JCYWNrZW5kLkVudW0uUGFnZS5BcHBlYXJhbmNlLkRhcms7CisgICAgICAgICAgICBjb21t
YW5kQXJndW1lbnRzLmFwcGVhcmFuY2UgPSBJbnNwZWN0b3JCYWNrZW5kLkVudW0uUGFnZS5BcHBl
YXJhbmNlLkRhcms7CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIG51bGw6Ci0g
ICAgICAgIGNhc2UgdW5kZWZpbmVkOgotICAgICAgICBjYXNlICIiOgotICAgICAgICAgICAgcHJv
dG9jb2xOYW1lID0gIiI7CisgICAgICAgICAgICAvLyBDT01QQVRJQklMSVRZIChpT1MgMTQpOiB0
aGUgYGFwcGVhcmFuY2VgYCBwYXJhbWV0ZXIgb2YgYFBhZ2Uuc2V0Rm9yY2VkQXBwZWFyYW5jZWAg
d2FzIG5vdCBvcHRpb25hbC4KKyAgICAgICAgICAgIC8vIFNpbmNlIHN1cHBvcnQgY2FuJ3QgYmUg
dGVzdGVkIGRpcmVjdGx5LCBjaGVjayBmb3IgdGhlIGBvcHRpb25zYGAgcGFyYW1ldGVyIG9mIGBE
T01EZWJ1Z2dlci5zZXRET01CcmVha3BvaW50YCAoaU9TIDE0LjArKS4KKyAgICAgICAgICAgIC8v
IEZJWE1FOiBVc2UgZXhwbGljaXQgdmVyc2lvbiBjaGVja2luZyBvbmNlIGh0dHBzOi8vd2Via2l0
Lm9yZy9iLzE0ODY4MCBpcyBmaXhlZC4KKyAgICAgICAgICAgIGlmICghSW5zcGVjdG9yQmFja2Vu
ZC5oYXNDb21tYW5kKCJET01EZWJ1Z2dlci5zZXRET01CcmVha3BvaW50IiwgIm9wdGlvbnMiKSkK
KyAgICAgICAgICAgICAgICBjb21tYW5kQXJndW1lbnRzLmFwcGVhcmFuY2UgPSAiIjsKICAgICAg
ICAgICAgIGJyZWFrOwogCiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAvLyBBYm9ydCBm
b3IgdW5rbm93biB2YWx1ZXMuCisgICAgICAgICAgICBjb25zb2xlLmFzc2VydChmYWxzZSwgIlVu
a25vd24gYXBwZWFyYW5jZSIsIG5hbWUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CiAKICAgICAgICAgdGhpcy5fZm9yY2VkQXBwZWFyYW5jZSA9IG5hbWUgfHwgbnVsbDsKIAogICAg
ICAgICBsZXQgdGFyZ2V0ID0gV0kuYXNzdW1pbmdNYWluVGFyZ2V0KCk7Ci0gICAgICAgIHRhcmdl
dC5QYWdlQWdlbnQuc2V0Rm9yY2VkQXBwZWFyYW5jZShwcm90b2NvbE5hbWUpLnRoZW4oKCkgPT4g
eworICAgICAgICB0YXJnZXQuUGFnZUFnZW50LnNldEZvcmNlZEFwcGVhcmFuY2UuaW52b2tlKGNv
bW1hbmRBcmd1bWVudHMpLnRoZW4oKCkgPT4gewogICAgICAgICAgICAgdGhpcy5tZWRpYVF1ZXJ5
UmVzdWx0Q2hhbmdlZCgpOwogICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5l
cnMoV0kuQ1NTTWFuYWdlci5FdmVudC5Gb3JjZWRBcHBlYXJhbmNlRGlkQ2hhbmdlLCB7YXBwZWFy
YW5jZTogdGhpcy5fZm9yY2VkQXBwZWFyYW5jZX0pOwogICAgICAgICB9KTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1NldHRpbmdzVGFiQ29u
dGVudFZpZXcuanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9T
ZXR0aW5nc1RhYkNvbnRlbnRWaWV3LmpzCmluZGV4IDQ4MmUxNDJhZTExZDYzYzAwMTVmOTZjNzRi
Y2IyZGVhMmZlNTA2OWQuLjkxODM2ZWNjNzY5Nzc1NmE5NjZlZmVhNzEwM2M5MmQzNDA4ZTQ0NjEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1Nl
dHRpbmdzVGFiQ29udGVudFZpZXcuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJ
bnRlcmZhY2UvVmlld3MvU2V0dGluZ3NUYWJDb250ZW50Vmlldy5qcwpAQCAtMzQ2LDE0ICszNDYs
MTggQEAgV0kuU2V0dGluZ3NUYWJDb250ZW50VmlldyA9IGNsYXNzIFNldHRpbmdzVGFiQ29udGVu
dFZpZXcgZXh0ZW5kcyBXSS5UYWJDb250ZW50VmkKICAgICAgICAgICAgICAgICBbV0kuTG9nZ2lu
Z0NoYW5uZWwuTGV2ZWwuVmVyYm9zZSwgV0kuVUlTdHJpbmcoIlZlcmJvc2UiKV0sCiAgICAgICAg
ICAgICBdOwogICAgICAgICAgICAgY29uc3QgZWRpdG9yTGFiZWxzID0gewotICAgICAgICAgICAg
ICAgIG1lZGlhOiBXSS5VSVN0cmluZygiTWVkaWEgTG9nZ2luZzoiKSwKLSAgICAgICAgICAgICAg
ICBtZWRpYXNvdXJjZTogV0kuVUlTdHJpbmcoIk1TRSBMb2dnaW5nOiIpLAotICAgICAgICAgICAg
ICAgIHdlYnJ0YzogV0kuVUlTdHJpbmcoIldlYlJUQyBMb2dnaW5nOiIpLAorICAgICAgICAgICAg
ICAgIFtXSS5Db25zb2xlTWVzc2FnZS5NZXNzYWdlU291cmNlLk1lZGlhXTogV0kuVUlTdHJpbmco
Ik1lZGlhIExvZ2dpbmc6IiksCisgICAgICAgICAgICAgICAgW1dJLkNvbnNvbGVNZXNzYWdlLk1l
c3NhZ2VTb3VyY2UuTWVkaWFTb3VyY2VdOiBXSS5VSVN0cmluZygiTVNFIExvZ2dpbmc6IiksCisg
ICAgICAgICAgICAgICAgW1dJLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VTb3VyY2UuV2ViUlRDXTog
V0kuVUlTdHJpbmcoIldlYlJUQyBMb2dnaW5nOiIpLAogICAgICAgICAgICAgfTsKIAogICAgICAg
ICAgICAgbGV0IGNoYW5uZWxzID0gV0kuY29uc29sZU1hbmFnZXIuY3VzdG9tTG9nZ2luZ0NoYW5u
ZWxzOwogICAgICAgICAgICAgZm9yIChsZXQgY2hhbm5lbCBvZiBjaGFubmVscykgewotICAgICAg
ICAgICAgICAgIGxldCBsb2dFZGl0b3IgPSBjb25zb2xlU2V0dGluZ3NWaWV3LmFkZEdyb3VwV2l0
aEN1c3RvbVNldHRpbmcoZWRpdG9yTGFiZWxzW2NoYW5uZWwuc291cmNlXSwgV0kuU2V0dGluZ0Vk
aXRvci5UeXBlLlNlbGVjdCwge3ZhbHVlczogbG9nTGV2ZWxzfSk7CisgICAgICAgICAgICAgICAg
bGV0IGxhYmVsID0gZWRpdG9yTGFiZWxzW2NoYW5uZWwuc291cmNlXTsKKyAgICAgICAgICAgICAg
ICBpZiAoIWxhYmVsKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAg
ICAgICAgIGxldCBsb2dFZGl0b3IgPSBjb25zb2xlU2V0dGluZ3NWaWV3LmFkZEdyb3VwV2l0aEN1
c3RvbVNldHRpbmcobGFiZWwsIFdJLlNldHRpbmdFZGl0b3IuVHlwZS5TZWxlY3QsIHt2YWx1ZXM6
IGxvZ0xldmVsc30pOwogICAgICAgICAgICAgICAgIGxvZ0VkaXRvci52YWx1ZSA9IGNoYW5uZWwu
bGV2ZWw7CiAgICAgICAgICAgICAgICAgbG9nRWRpdG9yLmFkZEV2ZW50TGlzdGVuZXIoV0kuU2V0
dGluZ0VkaXRvci5FdmVudC5WYWx1ZURpZENoYW5nZSwgKCkgPT4gewogICAgICAgICAgICAgICAg
ICAgICBmb3IgKGxldCB0YXJnZXQgb2YgV0kudGFyZ2V0cykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vQXV0b21hdGlvbi5qc29uIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQXV0b21hdGlvbi9BdXRvbWF0aW9uLmpzb24KaW5kZXggM2RjYjIxNDFlYjBk
Mjc5NDcwN2RlMjg0Yzg3MDcxMGU4NzcyMWMzOS4uZWIzY2RiNWY4NjZjNWY5M2E4ODIyOTgzYTQ5
ZDkxNmYzZTZlYWZlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21h
dGlvbi9BdXRvbWF0aW9uLmpzb24KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21h
dGlvbi9BdXRvbWF0aW9uLmpzb24KQEAgLTMyLDcgKzMyLDggQEAKICAgICAgICAgICAgICJkZXNj
cmlwdGlvbiI6ICJUaGUgY29vcmRpbmF0ZSBzeXN0ZW0gaW4gd2hpY2ggcmVjdHMsIHBvaW50cywg
YW5kIHNpemVzIGFyZSB0byBiZSBpbnRlcnByZXRlZC4iLAogICAgICAgICAgICAgImVudW0iOiBb
CiAgICAgICAgICAgICAgICAgIlBhZ2UiLAotICAgICAgICAgICAgICAgICJWaWV3cG9ydCIKKyAg
ICAgICAgICAgICAgICAiVmlld3BvcnQiLAorICAgICAgICAgICAgICAgICJMYXlvdXRWaWV3cG9y
dCIKICAgICAgICAgICAgIF0KICAgICAgICAgfSwKICAgICAgICAgewpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbi5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9u
LmNwcAppbmRleCBkODdhNGRmZWM3OTRmMzFkY2I2NGU1ZTllZjRiY2U0YjE4YzE5MmEyLi4zZjdl
NDBlNThkNGFkODFhZjc0MjA4YmNhNjEwYmE5ZjhmNTE3Nzg0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9u
LmNwcApAQCAtMzA1LDcgKzMwNSw3IEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OmdldEJy
b3dzaW5nQ29udGV4dHMoUmVmPEdldEJyb3dzaW5nQ29udGV4dHNDYWxsYmFjaz4mCiAgICAgZ2V0
TmV4dENvbnRleHQobWFrZVJlZigqdGhpcyksIFdURk1vdmUocGFnZXMpLCBKU09OOjpBcnJheU9m
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dD46OmNyZWF0
ZSgpLCBXVEZNb3ZlKGNhbGxiYWNrKSk7CiB9CiAKLXZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246
OmdldEJyb3dzaW5nQ29udGV4dChjb25zdCBTdHJpbmcmIGhhbmRsZSwgUmVmPEdldEJyb3dzaW5n
Q29udGV4dENhbGxiYWNrPiYmIGNhbGxiYWNrKQordm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6
Z2V0QnJvd3NpbmdDb250ZXh0KGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246
OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYgaGFuZGxlLCBSZWY8R2V0QnJvd3NpbmdDb250ZXh0Q2Fs
bGJhY2s+JiYgY2FsbGJhY2spCiB7CiAgICAgV2ViUGFnZVByb3h5KiBwYWdlID0gd2ViUGFnZVBy
b3h5Rm9ySGFuZGxlKGhhbmRsZSk7CiAgICAgaWYgKCFwYWdlKQpAQCAtMzI4LDcgKzMyOCw3IEBA
IHN0YXRpYyBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRQ
cmVzZW50YXRpb24gdG9Qcm90b2NvbChBCiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKIH0KIAotdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6Y3JlYXRlQnJvd3NpbmdDb250ZXh0
KGNvbnN0IFN0cmluZyogb3B0aW9uYWxQcmVzZW50YXRpb25IaW50LCBSZWY8Q3JlYXRlQnJvd3Np
bmdDb250ZXh0Q2FsbGJhY2s+JiYgY2FsbGJhY2spCit2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9u
OjpjcmVhdGVCcm93c2luZ0NvbnRleHQoT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0
b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0UHJlc2VudGF0aW9uPiYmIHByZXNlbnRhdGlvbkhpbnQs
IFJlZjxDcmVhdGVCcm93c2luZ0NvbnRleHRDYWxsYmFjaz4mJiBjYWxsYmFjaykKIHsKICAgICBB
U1NFUlQobV9jbGllbnQpOwogICAgIGlmICghbV9jbGllbnQpCkBAIC0zMzYsMTEgKzMzNiw4IEBA
IHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OmNyZWF0ZUJyb3dzaW5nQ29udGV4dChjb25zdCBT
dHJpbmcqIG9wdGlvbmFsUHJlc2VudGF0CiAKICAgICB1aW50MTZfdCBvcHRpb25zID0gMDsKIAot
ICAgIGlmIChvcHRpb25hbFByZXNlbnRhdGlvbkhpbnQpIHsKLSAgICAgICAgYXV0byBwYXJzZWRQ
cmVzZW50YXRpb25IaW50ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbkhlbHBlcnM6
OnBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9u
OjpCcm93c2luZ0NvbnRleHRQcmVzZW50YXRpb24+KCpvcHRpb25hbFByZXNlbnRhdGlvbkhpbnQp
OwotICAgICAgICBpZiAocGFyc2VkUHJlc2VudGF0aW9uSGludC5oYXNWYWx1ZSgpICYmIHBhcnNl
ZFByZXNlbnRhdGlvbkhpbnQudmFsdWUoKSA9PSBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0
aW9uOjpCcm93c2luZ0NvbnRleHRQcmVzZW50YXRpb246OlRhYikKLSAgICAgICAgICAgIG9wdGlv
bnMgfD0gQVBJOjpBdXRvbWF0aW9uU2Vzc2lvbkJyb3dzaW5nQ29udGV4dE9wdGlvbnNQcmVmZXJO
ZXdUYWI7Ci0gICAgfQorICAgIGlmIChwcmVzZW50YXRpb25IaW50ID09IEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dFByZXNlbnRhdGlvbjo6VGFiKQorICAg
ICAgICBvcHRpb25zIHw9IEFQSTo6QXV0b21hdGlvblNlc3Npb25Ccm93c2luZ0NvbnRleHRPcHRp
b25zUHJlZmVyTmV3VGFiOwogCiAgICAgbV9jbGllbnQtPnJlcXVlc3ROZXdQYWdlV2l0aE9wdGlv
bnMoKnRoaXMsIHN0YXRpY19jYXN0PEFQSTo6QXV0b21hdGlvblNlc3Npb25Ccm93c2luZ0NvbnRl
eHRPcHRpb25zPihvcHRpb25zKSwgW3Byb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY2Fs
bGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oV2ViUGFnZVByb3h5KiBwYWdlKSB7CiAgICAgICAg
IGlmICghcGFnZSkKQEAgLTM1MiwyMyArMzQ5LDI1IEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Np
b246OmNyZWF0ZUJyb3dzaW5nQ29udGV4dChjb25zdCBTdHJpbmcqIG9wdGlvbmFsUHJlc2VudGF0
CiAgICAgfSk7CiB9CiAKLXZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OmNsb3NlQnJvd3NpbmdD
b250ZXh0KEluc3BlY3Rvcjo6RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcm
IGhhbmRsZSkKK0luc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gV2ViQXV0
b21hdGlvblNlc3Npb246OmNsb3NlQnJvd3NpbmdDb250ZXh0KGNvbnN0IEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYgaGFuZGxlKQogewogICAg
IFdlYlBhZ2VQcm94eSogcGFnZSA9IHdlYlBhZ2VQcm94eUZvckhhbmRsZShoYW5kbGUpOwogICAg
IGlmICghcGFnZSkKICAgICAgICAgU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUihXaW5k
b3dOb3RGb3VuZCk7CiAKICAgICBwYWdlLT5jbG9zZVBhZ2UoKTsKKworICAgIHJldHVybiB7IH07
CiB9CiAKLXZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OnN3aXRjaFRvQnJvd3NpbmdDb250ZXh0
KGNvbnN0IFN0cmluZyYgYnJvd3NpbmdDb250ZXh0SGFuZGxlLCBjb25zdCBTdHJpbmcqIG9wdGlv
bmFsRnJhbWVIYW5kbGUsIFJlZjxTd2l0Y2hUb0Jyb3dzaW5nQ29udGV4dENhbGxiYWNrPiYmIGNh
bGxiYWNrKQordm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6c3dpdGNoVG9Ccm93c2luZ0NvbnRl
eHQoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0
SGFuZGxlJiBicm93c2luZ0NvbnRleHRIYW5kbGUsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkF1dG9tYXRpb246OkZyYW1lSGFuZGxlJiBmcmFtZUhhbmRsZSwgUmVmPFN3aXRjaFRvQnJvd3Np
bmdDb250ZXh0Q2FsbGJhY2s+JiYgY2FsbGJhY2spCiB7CiAgICAgV2ViUGFnZVByb3h5KiBwYWdl
ID0gd2ViUGFnZVByb3h5Rm9ySGFuZGxlKGJyb3dzaW5nQ29udGV4dEhhbmRsZSk7CiAgICAgaWYg
KCFwYWdlKQogICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUihXaW5kb3dO
b3RGb3VuZCk7CiAKICAgICBib29sIGZyYW1lTm90Rm91bmQgPSBmYWxzZTsKLSAgICBhdXRvIGZy
YW1lSUQgPSB3ZWJGcmFtZUlERm9ySGFuZGxlKG9wdGlvbmFsRnJhbWVIYW5kbGUgPyAqb3B0aW9u
YWxGcmFtZUhhbmRsZSA6IGVtcHR5U3RyaW5nKCksIGZyYW1lTm90Rm91bmQpOworICAgIGF1dG8g
ZnJhbWVJRCA9IHdlYkZyYW1lSURGb3JIYW5kbGUoZnJhbWVIYW5kbGUsIGZyYW1lTm90Rm91bmQp
OwogICAgIGlmIChmcmFtZU5vdEZvdW5kKQogICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVG
SU5FRF9FUlJPUihGcmFtZU5vdEZvdW5kKTsKIApAQCAtMzgxLDI1ICszODAsMjUgQEAgdm9pZCBX
ZWJBdXRvbWF0aW9uU2Vzc2lvbjo6c3dpdGNoVG9Ccm93c2luZ0NvbnRleHQoY29uc3QgU3RyaW5n
JiBicm93c2luZ0NvbnRleHQKICAgICB9KTsKIH0KIAotdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lv
bjo6c2V0V2luZG93RnJhbWVPZkJyb3dzaW5nQ29udGV4dChjb25zdCBTdHJpbmcmIGhhbmRsZSwg
Y29uc3QgSlNPTjo6T2JqZWN0KiBvcHRpb25hbE9yaWdpbk9iamVjdCwgY29uc3QgSlNPTjo6T2Jq
ZWN0KiBvcHRpb25hbFNpemVPYmplY3QsIFJlZjxTZXRXaW5kb3dGcmFtZU9mQnJvd3NpbmdDb250
ZXh0Q2FsbGJhY2s+JiYgY2FsbGJhY2spCit2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpzZXRX
aW5kb3dGcmFtZU9mQnJvd3NpbmdDb250ZXh0KGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1
dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYgaGFuZGxlLCBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiYmIG9yaWdpbiwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBzaXplLCBSZWY8U2V0V2luZG93
RnJhbWVPZkJyb3dzaW5nQ29udGV4dENhbGxiYWNrPiYmIGNhbGxiYWNrKQogewotICAgIE9wdGlv
bmFsPGZsb2F0PiB4OwotICAgIE9wdGlvbmFsPGZsb2F0PiB5OwotICAgIGlmIChvcHRpb25hbE9y
aWdpbk9iamVjdCkgewotICAgICAgICBpZiAoISh4ID0gb3B0aW9uYWxPcmlnaW5PYmplY3QtPmdl
dE51bWJlcjxmbG9hdD4oIngiX3MpKSkKKyAgICBPcHRpb25hbDxkb3VibGU+IHg7CisgICAgT3B0
aW9uYWw8ZG91YmxlPiB5OworICAgIGlmIChvcmlnaW4pIHsKKyAgICAgICAgaWYgKCEoeCA9IG9y
aWdpbi0+Z2V0RG91YmxlKCJ4Il9zKSkpCiAgICAgICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJF
REVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhNaXNzaW5nUGFyYW1ldGVyLCAiVGhlICd4JyBwYXJh
bWV0ZXIgd2FzIG5vdCBmb3VuZCBvciBpbnZhbGlkLiIpOwogCi0gICAgICAgIGlmICghKHkgPSBv
cHRpb25hbE9yaWdpbk9iamVjdC0+Z2V0TnVtYmVyPGZsb2F0PigieSJfcykpKQorICAgICAgICBp
ZiAoISh5ID0gb3JpZ2luLT5nZXREb3VibGUoInkiX3MpKSkKICAgICAgICAgICAgIEFTWU5DX0ZB
SUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxTKE1pc3NpbmdQYXJhbWV0ZXIsICJU
aGUgJ3knIHBhcmFtZXRlciB3YXMgbm90IGZvdW5kIG9yIGludmFsaWQuIik7CiAgICAgfQogCi0g
ICAgT3B0aW9uYWw8ZmxvYXQ+IHdpZHRoOwotICAgIE9wdGlvbmFsPGZsb2F0PiBoZWlnaHQ7Ci0g
ICAgaWYgKG9wdGlvbmFsU2l6ZU9iamVjdCkgewotICAgICAgICBpZiAoISh3aWR0aCA9IG9wdGlv
bmFsU2l6ZU9iamVjdC0+Z2V0TnVtYmVyPGZsb2F0Pigid2lkdGgiX3MpKSkKKyAgICBPcHRpb25h
bDxkb3VibGU+IHdpZHRoOworICAgIE9wdGlvbmFsPGRvdWJsZT4gaGVpZ2h0OworICAgIGlmIChz
aXplKSB7CisgICAgICAgIGlmICghKHdpZHRoID0gc2l6ZS0+Z2V0RG91YmxlKCJ3aWR0aCJfcykp
KQogICAgICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJ
TFMoTWlzc2luZ1BhcmFtZXRlciwgIlRoZSAnd2lkdGgnIHBhcmFtZXRlciB3YXMgbm90IGZvdW5k
IG9yIGludmFsaWQuIik7CiAKLSAgICAgICAgaWYgKCEoaGVpZ2h0ID0gb3B0aW9uYWxTaXplT2Jq
ZWN0LT5nZXROdW1iZXI8ZmxvYXQ+KCJoZWlnaHQiX3MpKSkKKyAgICAgICAgaWYgKCEoaGVpZ2h0
ID0gc2l6ZS0+Z2V0RG91YmxlKCJoZWlnaHQiX3MpKSkKICAgICAgICAgICAgIEFTWU5DX0ZBSUxf
V0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxTKE1pc3NpbmdQYXJhbWV0ZXIsICJUaGUg
J2hlaWdodCcgcGFyYW1ldGVyIHdhcyBub3QgZm91bmQgb3IgaW52YWxpZC4iKTsKIAogICAgICAg
ICBpZiAod2lkdGgudmFsdWUoKSA8IDApCkBAIC00MjgsMjYgKzQyNywxOCBAQCB2b2lkIFdlYkF1
dG9tYXRpb25TZXNzaW9uOjpzZXRXaW5kb3dGcmFtZU9mQnJvd3NpbmdDb250ZXh0KGNvbnN0IFN0
cmluZyYgaGFuZGxlLAogICAgIH0pOwogfQogCi1zdGF0aWMgT3B0aW9uYWw8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6QXV0b21hdGlvbjo6UGFnZUxvYWRTdHJhdGVneT4gcGFnZUxvYWRTdHJhdGVneUZy
b21TdHJpbmdQYXJhbWV0ZXIoY29uc3QgU3RyaW5nKiBvcHRpb25hbFBhZ2VMb2FkU3RyYXRlZ3lT
dHJpbmcpCitzdGF0aWMgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6UGFnZUxvYWRT
dHJhdGVneSBwYWdlTG9hZFN0cmF0ZWd5RnJvbVBhcmFtZXRlcihPcHRpb25hbDxJbnNwZWN0b3I6
OlByb3RvY29sOjpBdXRvbWF0aW9uOjpQYWdlTG9hZFN0cmF0ZWd5PiYmIG9wdGlvbmFsUGFnZUxv
YWRTdHJhdGVneSkKIHsKLSAgICBpZiAoIW9wdGlvbmFsUGFnZUxvYWRTdHJhdGVneVN0cmluZykK
LSAgICAgICAgcmV0dXJuIGRlZmF1bHRQYWdlTG9hZFN0cmF0ZWd5OwotCi0gICAgYXV0byBwYXJz
ZWRQYWdlTG9hZFN0cmF0ZWd5ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbkhlbHBl
cnM6OnBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0
aW9uOjpQYWdlTG9hZFN0cmF0ZWd5Pigqb3B0aW9uYWxQYWdlTG9hZFN0cmF0ZWd5U3RyaW5nKTsK
LSAgICBpZiAoIXBhcnNlZFBhZ2VMb2FkU3RyYXRlZ3kpCi0gICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7Ci0gICAgcmV0dXJuIHBhcnNlZFBhZ2VMb2FkU3RyYXRlZ3k7CisgICAgcmV0dXJuIG9w
dGlvbmFsUGFnZUxvYWRTdHJhdGVneS52YWx1ZU9yKGRlZmF1bHRQYWdlTG9hZFN0cmF0ZWd5KTsK
IH0KIAotdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6d2FpdEZvck5hdmlnYXRpb25Ub0NvbXBs
ZXRlKGNvbnN0IFN0cmluZyYgYnJvd3NpbmdDb250ZXh0SGFuZGxlLCBjb25zdCBTdHJpbmcqIG9w
dGlvbmFsRnJhbWVIYW5kbGUsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxQYWdlTG9hZFN0cmF0ZWd5
U3RyaW5nLCBjb25zdCBkb3VibGUqIG9wdGlvbmFsUGFnZUxvYWRUaW1lb3V0LCBSZWY8V2FpdEZv
ck5hdmlnYXRpb25Ub0NvbXBsZXRlQ2FsbGJhY2s+JiYgY2FsbGJhY2spCit2b2lkIFdlYkF1dG9t
YXRpb25TZXNzaW9uOjp3YWl0Rm9yTmF2aWdhdGlvblRvQ29tcGxldGUoY29uc3QgSW5zcGVjdG9y
OjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJiBicm93c2luZ0Nv
bnRleHRIYW5kbGUsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkZyYW1l
SGFuZGxlJiBvcHRpb25hbEZyYW1lSGFuZGxlLCBPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29s
OjpBdXRvbWF0aW9uOjpQYWdlTG9hZFN0cmF0ZWd5PiYmIG9wdGlvbmFsUGFnZUxvYWRTdHJhdGVn
eSwgT3B0aW9uYWw8ZG91YmxlPiYmIG9wdGlvbmFsUGFnZUxvYWRUaW1lb3V0LCBSZWY8V2FpdEZv
ck5hdmlnYXRpb25Ub0NvbXBsZXRlQ2FsbGJhY2s+JiYgY2FsbGJhY2spCiB7CiAgICAgV2ViUGFn
ZVByb3h5KiBwYWdlID0gd2ViUGFnZVByb3h5Rm9ySGFuZGxlKGJyb3dzaW5nQ29udGV4dEhhbmRs
ZSk7CiAgICAgaWYgKCFwYWdlKQogICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9F
UlJPUihXaW5kb3dOb3RGb3VuZCk7CiAKLSAgICBhdXRvIHBhZ2VMb2FkU3RyYXRlZ3kgPSBwYWdl
TG9hZFN0cmF0ZWd5RnJvbVN0cmluZ1BhcmFtZXRlcihvcHRpb25hbFBhZ2VMb2FkU3RyYXRlZ3lT
dHJpbmcpOwotICAgIGlmICghcGFnZUxvYWRTdHJhdGVneSkKLSAgICAgICAgQVNZTkNfRkFJTF9X
SVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoSW52YWxpZFBhcmFtZXRlciwgIlRoZSBw
YXJhbWV0ZXIgJ3BhZ2VMb2FkU3RyYXRlZ3knIGlzIGludmFsaWQuIik7CisgICAgYXV0byBwYWdl
TG9hZFN0cmF0ZWd5ID0gcGFnZUxvYWRTdHJhdGVneUZyb21QYXJhbWV0ZXIoV1RGTW92ZShvcHRp
b25hbFBhZ2VMb2FkU3RyYXRlZ3kpKTsKICAgICBhdXRvIHBhZ2VMb2FkVGltZW91dCA9IG9wdGlv
bmFsUGFnZUxvYWRUaW1lb3V0ID8gU2Vjb25kczo6ZnJvbU1pbGxpc2Vjb25kcygqb3B0aW9uYWxQ
YWdlTG9hZFRpbWVvdXQpIDogZGVmYXVsdFBhZ2VMb2FkVGltZW91dDsKIAogICAgIC8vIElmIHBh
Z2UgaXMgbG9hZGluZyBhbmQgdGhlcmUncyBhbiBhY3RpdmUgSmF2YVNjcmlwdCBkaWFsb2cgaXMg
cHJvYmFibHkgYmVjYXVzZSB0aGUKQEAgLTQ1NSwyMiArNDQ2LDIyIEBAIHZvaWQgV2ViQXV0b21h
dGlvblNlc3Npb246OndhaXRGb3JOYXZpZ2F0aW9uVG9Db21wbGV0ZShjb25zdCBTdHJpbmcmIGJy
b3dzaW5nQ29uCiAgICAgLy8gbG9hZCB3aWxsIG5vdCBmaW5pc2ggdW50aWwgdGhlIGRpYWxvZyBp
cyBkaXNtaXNzZWQuIEluc3RlYWQgb2Ygd2FpdGluZyBmb3IgdGhlIHRpbWVvdXQsCiAgICAgLy8g
d2UgcmV0dXJuIHdpdGhvdXQgd2FpdGluZyBzaW5jZSB3ZSBrbm93IGl0IHdpbGwgdGltZW91dCBm
b3Igc3VyZS4gV2Ugd2FudCB0byBjaGVjawogICAgIC8vIGFyZ3VtZW50cyBmaXJzdCwgdGhvdWdo
LgotICAgIGJvb2wgc2hvdWxkVGltZW91dER1ZVRvVW5leHBlY3RlZEFsZXJ0ID0gcGFnZUxvYWRT
dHJhdGVneS52YWx1ZSgpID09IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OlBhZ2VM
b2FkU3RyYXRlZ3k6Ok5vcm1hbAorICAgIGJvb2wgc2hvdWxkVGltZW91dER1ZVRvVW5leHBlY3Rl
ZEFsZXJ0ID0gcGFnZUxvYWRTdHJhdGVneSA9PSBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0
aW9uOjpQYWdlTG9hZFN0cmF0ZWd5OjpOb3JtYWwKICAgICAgICAgJiYgcGFnZS0+cGFnZUxvYWRT
dGF0ZSgpLmlzTG9hZGluZygpICYmIG1fY2xpZW50LT5pc1Nob3dpbmdKYXZhU2NyaXB0RGlhbG9n
T25QYWdlKCp0aGlzLCAqcGFnZSk7CiAKLSAgICBpZiAob3B0aW9uYWxGcmFtZUhhbmRsZSAmJiAh
b3B0aW9uYWxGcmFtZUhhbmRsZS0+aXNFbXB0eSgpKSB7CisgICAgaWYgKCFvcHRpb25hbEZyYW1l
SGFuZGxlLmlzRW1wdHkoKSkgewogICAgICAgICBib29sIGZyYW1lTm90Rm91bmQgPSBmYWxzZTsK
LSAgICAgICAgYXV0byBmcmFtZUlEID0gd2ViRnJhbWVJREZvckhhbmRsZSgqb3B0aW9uYWxGcmFt
ZUhhbmRsZSwgZnJhbWVOb3RGb3VuZCk7CisgICAgICAgIGF1dG8gZnJhbWVJRCA9IHdlYkZyYW1l
SURGb3JIYW5kbGUob3B0aW9uYWxGcmFtZUhhbmRsZSwgZnJhbWVOb3RGb3VuZCk7CiAgICAgICAg
IGlmIChmcmFtZU5vdEZvdW5kKQogICAgICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklO
RURfRVJST1IoRnJhbWVOb3RGb3VuZCk7CiAgICAgICAgIFdlYkZyYW1lUHJveHkqIGZyYW1lID0g
cGFnZS0+cHJvY2VzcygpLndlYkZyYW1lKGZyYW1lSUQudmFsdWUoKSk7CiAgICAgICAgIGlmICgh
ZnJhbWUpCiAgICAgICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUihGcmFt
ZU5vdEZvdW5kKTsKICAgICAgICAgaWYgKCFzaG91bGRUaW1lb3V0RHVlVG9VbmV4cGVjdGVkQWxl
cnQpCi0gICAgICAgICAgICB3YWl0Rm9yTmF2aWdhdGlvblRvQ29tcGxldGVPbkZyYW1lKCpmcmFt
ZSwgcGFnZUxvYWRTdHJhdGVneS52YWx1ZSgpLCBwYWdlTG9hZFRpbWVvdXQsIFdURk1vdmUoY2Fs
bGJhY2spKTsKKyAgICAgICAgICAgIHdhaXRGb3JOYXZpZ2F0aW9uVG9Db21wbGV0ZU9uRnJhbWUo
KmZyYW1lLCBwYWdlTG9hZFN0cmF0ZWd5LCBwYWdlTG9hZFRpbWVvdXQsIFdURk1vdmUoY2FsbGJh
Y2spKTsKICAgICB9IGVsc2UgewogICAgICAgICBpZiAoIXNob3VsZFRpbWVvdXREdWVUb1VuZXhw
ZWN0ZWRBbGVydCkKLSAgICAgICAgICAgIHdhaXRGb3JOYXZpZ2F0aW9uVG9Db21wbGV0ZU9uUGFn
ZSgqcGFnZSwgcGFnZUxvYWRTdHJhdGVneS52YWx1ZSgpLCBwYWdlTG9hZFRpbWVvdXQsIFdURk1v
dmUoY2FsbGJhY2spKTsKKyAgICAgICAgICAgIHdhaXRGb3JOYXZpZ2F0aW9uVG9Db21wbGV0ZU9u
UGFnZSgqcGFnZSwgcGFnZUxvYWRTdHJhdGVneSwgcGFnZUxvYWRUaW1lb3V0LCBXVEZNb3ZlKGNh
bGxiYWNrKSk7CiAgICAgfQogCiAgICAgaWYgKHNob3VsZFRpbWVvdXREdWVUb1VuZXhwZWN0ZWRB
bGVydCkgewpAQCAtNTI3LDcgKzUxOCw3IEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246Ondh
aXRGb3JOYXZpZ2F0aW9uVG9Db21wbGV0ZU9uRnJhbWUoV2ViRnJhbWVQcm94eSYgZnJhCiAKIHZv
aWQgV2ViQXV0b21hdGlvblNlc3Npb246OnJlc3BvbmRUb1BlbmRpbmdQYWdlTmF2aWdhdGlvbkNh
bGxiYWNrc1dpdGhUaW1lb3V0KEhhc2hNYXA8V2ViUGFnZVByb3h5SWRlbnRpZmllciwgUmVmUHRy
PEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZT4+JiBtYXApCiB7Ci0g
ICAgSW5zcGVjdG9yOjpFcnJvclN0cmluZyB0aW1lb3V0RXJyb3IgPSBTVFJJTkdfRk9SX1BSRURF
RklORURfRVJST1JfTkFNRShUaW1lb3V0KTsKKyAgICBhdXRvIHRpbWVvdXRFcnJvciA9IFNUUklO
R19GT1JfUFJFREVGSU5FRF9FUlJPUl9OQU1FKFRpbWVvdXQpOwogICAgIGZvciAoYXV0byBpZCA6
IGNvcHlUb1ZlY3RvcihtYXAua2V5cygpKSkgewogICAgICAgICBhdXRvIHBhZ2UgPSBXZWJQcm9j
ZXNzUHJveHk6OndlYlBhZ2UoaWQpOwogICAgICAgICBhdXRvIGNhbGxiYWNrID0gbWFwLnRha2Uo
aWQpOwpAQCAtNTQ5LDcgKzU0MCw3IEBAIHN0YXRpYyBXZWJQYWdlUHJveHkqIGZpbmRQYWdlRm9y
RnJhbWVJRChjb25zdCBXZWJQcm9jZXNzUG9vbCYgcHJvY2Vzc1Bvb2wsIEZyYW1lCiAKIHZvaWQg
V2ViQXV0b21hdGlvblNlc3Npb246OnJlc3BvbmRUb1BlbmRpbmdGcmFtZU5hdmlnYXRpb25DYWxs
YmFja3NXaXRoVGltZW91dChIYXNoTWFwPEZyYW1lSWRlbnRpZmllciwgUmVmUHRyPEluc3BlY3Rv
cjo6QmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZT4+JiBtYXApCiB7Ci0gICAgSW5zcGVj
dG9yOjpFcnJvclN0cmluZyB0aW1lb3V0RXJyb3IgPSBTVFJJTkdfRk9SX1BSRURFRklORURfRVJS
T1JfTkFNRShUaW1lb3V0KTsKKyAgICBhdXRvIHRpbWVvdXRFcnJvciA9IFNUUklOR19GT1JfUFJF
REVGSU5FRF9FUlJPUl9OQU1FKFRpbWVvdXQpOwogICAgIGZvciAoYXV0byBpZCA6IGNvcHlUb1Zl
Y3RvcihtYXAua2V5cygpKSkgewogICAgICAgICBhdXRvKiBwYWdlID0gZmluZFBhZ2VGb3JGcmFt
ZUlEKCptX3Byb2Nlc3NQb29sLCBpZCk7CiAgICAgICAgIGF1dG8gY2FsbGJhY2sgPSBtYXAudGFr
ZShpZCk7CkBAIC01NjgsNyArNTU5LDcgQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6bG9h
ZFRpbWVyRmlyZWQoKQogICAgIHJlc3BvbmRUb1BlbmRpbmdQYWdlTmF2aWdhdGlvbkNhbGxiYWNr
c1dpdGhUaW1lb3V0KG1fcGVuZGluZ0VhZ2VyTmF2aWdhdGlvbkluQnJvd3NpbmdDb250ZXh0Q2Fs
bGJhY2tzUGVyUGFnZSk7CiB9CiAKLXZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246Om1heGltaXpl
V2luZG93T2ZCcm93c2luZ0NvbnRleHQoY29uc3QgU3RyaW5nJiBicm93c2luZ0NvbnRleHRIYW5k
bGUsIFJlZjxNYXhpbWl6ZVdpbmRvd09mQnJvd3NpbmdDb250ZXh0Q2FsbGJhY2s+JiYgY2FsbGJh
Y2spCit2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjptYXhpbWl6ZVdpbmRvd09mQnJvd3NpbmdD
b250ZXh0KGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29u
dGV4dEhhbmRsZSYgYnJvd3NpbmdDb250ZXh0SGFuZGxlLCBSZWY8TWF4aW1pemVXaW5kb3dPZkJy
b3dzaW5nQ29udGV4dENhbGxiYWNrPiYmIGNhbGxiYWNrKQogewogICAgIGF1dG8qIHBhZ2UgPSB3
ZWJQYWdlUHJveHlGb3JIYW5kbGUoYnJvd3NpbmdDb250ZXh0SGFuZGxlKTsKICAgICBpZiAoIXBh
Z2UpCkBAIC01ODQsNyArNTc1LDcgQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6bWF4aW1p
emVXaW5kb3dPZkJyb3dzaW5nQ29udGV4dChjb25zdCBTdHJpbmcmIGJyb3dzaW4KICAgICB9KTsK
IH0KIAotdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6aGlkZVdpbmRvd09mQnJvd3NpbmdDb250
ZXh0KGNvbnN0IFN0cmluZyYgYnJvd3NpbmdDb250ZXh0SGFuZGxlLCBSZWY8SGlkZVdpbmRvd09m
QnJvd3NpbmdDb250ZXh0Q2FsbGJhY2s+JiYgY2FsbGJhY2spCit2b2lkIFdlYkF1dG9tYXRpb25T
ZXNzaW9uOjpoaWRlV2luZG93T2ZCcm93c2luZ0NvbnRleHQoY29uc3QgSW5zcGVjdG9yOjpQcm90
b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJiBicm93c2luZ0NvbnRleHRI
YW5kbGUsIFJlZjxIaWRlV2luZG93T2ZCcm93c2luZ0NvbnRleHRDYWxsYmFjaz4mJiBjYWxsYmFj
aykKIHsKICAgICBXZWJQYWdlUHJveHkqIHBhZ2UgPSB3ZWJQYWdlUHJveHlGb3JIYW5kbGUoYnJv
d3NpbmdDb250ZXh0SGFuZGxlKTsKICAgICBpZiAoIXBhZ2UpCkBAIC02OTMsNjQgKzY4NCw1NiBA
QCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpkaWRFeGl0RnVsbFNjcmVlbkZvclBhZ2UoY29u
c3QgV2ViUGFnZVByb3h5JikKICAgICAgICAgbV93aW5kb3dTdGF0ZVRyYW5zaXRpb25DYWxsYmFj
ayhXaW5kb3dUcmFuc2l0aW9uZWRUb1N0YXRlOjpVbmZ1bGxzY3JlZW4pOwogfQogCi12b2lkIFdl
YkF1dG9tYXRpb25TZXNzaW9uOjpuYXZpZ2F0ZUJyb3dzaW5nQ29udGV4dChjb25zdCBTdHJpbmcm
IGhhbmRsZSwgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxQYWdlTG9h
ZFN0cmF0ZWd5U3RyaW5nLCBjb25zdCBkb3VibGUqIG9wdGlvbmFsUGFnZUxvYWRUaW1lb3V0LCBS
ZWY8TmF2aWdhdGVCcm93c2luZ0NvbnRleHRDYWxsYmFjaz4mJiBjYWxsYmFjaykKK3ZvaWQgV2Vi
QXV0b21hdGlvblNlc3Npb246Om5hdmlnYXRlQnJvd3NpbmdDb250ZXh0KGNvbnN0IEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYgaGFuZGxlLCBj
b25zdCBTdHJpbmcmIHVybCwgT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlv
bjo6UGFnZUxvYWRTdHJhdGVneT4mJiBvcHRpb25hbFBhZ2VMb2FkU3RyYXRlZ3ksIE9wdGlvbmFs
PGRvdWJsZT4mJiBvcHRpb25hbFBhZ2VMb2FkVGltZW91dCwgUmVmPE5hdmlnYXRlQnJvd3NpbmdD
b250ZXh0Q2FsbGJhY2s+JiYgY2FsbGJhY2spCiB7CiAgICAgV2ViUGFnZVByb3h5KiBwYWdlID0g
d2ViUGFnZVByb3h5Rm9ySGFuZGxlKGhhbmRsZSk7CiAgICAgaWYgKCFwYWdlKQogICAgICAgICBB
U1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUihXaW5kb3dOb3RGb3VuZCk7CiAKLSAgICBh
dXRvIHBhZ2VMb2FkU3RyYXRlZ3kgPSBwYWdlTG9hZFN0cmF0ZWd5RnJvbVN0cmluZ1BhcmFtZXRl
cihvcHRpb25hbFBhZ2VMb2FkU3RyYXRlZ3lTdHJpbmcpOwotICAgIGlmICghcGFnZUxvYWRTdHJh
dGVneSkKLSAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJ
TFMoSW52YWxpZFBhcmFtZXRlciwgIlRoZSBwYXJhbWV0ZXIgJ3BhZ2VMb2FkU3RyYXRlZ3knIGlz
IGludmFsaWQuIik7CisgICAgYXV0byBwYWdlTG9hZFN0cmF0ZWd5ID0gcGFnZUxvYWRTdHJhdGVn
eUZyb21QYXJhbWV0ZXIoV1RGTW92ZShvcHRpb25hbFBhZ2VMb2FkU3RyYXRlZ3kpKTsKICAgICBh
dXRvIHBhZ2VMb2FkVGltZW91dCA9IG9wdGlvbmFsUGFnZUxvYWRUaW1lb3V0ID8gU2Vjb25kczo6
ZnJvbU1pbGxpc2Vjb25kcygqb3B0aW9uYWxQYWdlTG9hZFRpbWVvdXQpIDogZGVmYXVsdFBhZ2VM
b2FkVGltZW91dDsKIAogICAgIHBhZ2UtPmxvYWRSZXF1ZXN0KFVSTChVUkwoKSwgdXJsKSk7Ci0g
ICAgd2FpdEZvck5hdmlnYXRpb25Ub0NvbXBsZXRlT25QYWdlKCpwYWdlLCBwYWdlTG9hZFN0cmF0
ZWd5LnZhbHVlKCksIHBhZ2VMb2FkVGltZW91dCwgV1RGTW92ZShjYWxsYmFjaykpOworICAgIHdh
aXRGb3JOYXZpZ2F0aW9uVG9Db21wbGV0ZU9uUGFnZSgqcGFnZSwgcGFnZUxvYWRTdHJhdGVneSwg
cGFnZUxvYWRUaW1lb3V0LCBXVEZNb3ZlKGNhbGxiYWNrKSk7CiB9CiAKLXZvaWQgV2ViQXV0b21h
dGlvblNlc3Npb246OmdvQmFja0luQnJvd3NpbmdDb250ZXh0KGNvbnN0IFN0cmluZyYgaGFuZGxl
LCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsUGFnZUxvYWRTdHJhdGVneVN0cmluZywgY29uc3QgZG91
YmxlKiBvcHRpb25hbFBhZ2VMb2FkVGltZW91dCwgUmVmPEdvQmFja0luQnJvd3NpbmdDb250ZXh0
Q2FsbGJhY2s+JiYgY2FsbGJhY2spCit2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpnb0JhY2tJ
bkJyb3dzaW5nQ29udGV4dChjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpC
cm93c2luZ0NvbnRleHRIYW5kbGUmIGhhbmRsZSwgT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6QXV0b21hdGlvbjo6UGFnZUxvYWRTdHJhdGVneT4mJiBvcHRpb25hbFBhZ2VMb2FkU3RyYXRl
Z3ksIE9wdGlvbmFsPGRvdWJsZT4mJiBvcHRpb25hbFBhZ2VMb2FkVGltZW91dCwgUmVmPEdvQmFj
a0luQnJvd3NpbmdDb250ZXh0Q2FsbGJhY2s+JiYgY2FsbGJhY2spCiB7CiAgICAgV2ViUGFnZVBy
b3h5KiBwYWdlID0gd2ViUGFnZVByb3h5Rm9ySGFuZGxlKGhhbmRsZSk7CiAgICAgaWYgKCFwYWdl
KQogICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUihXaW5kb3dOb3RGb3Vu
ZCk7CiAKLSAgICBhdXRvIHBhZ2VMb2FkU3RyYXRlZ3kgPSBwYWdlTG9hZFN0cmF0ZWd5RnJvbVN0
cmluZ1BhcmFtZXRlcihvcHRpb25hbFBhZ2VMb2FkU3RyYXRlZ3lTdHJpbmcpOwotICAgIGlmICgh
cGFnZUxvYWRTdHJhdGVneSkKLSAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJS
T1JfQU5EX0RFVEFJTFMoSW52YWxpZFBhcmFtZXRlciwgIlRoZSBwYXJhbWV0ZXIgJ3BhZ2VMb2Fk
U3RyYXRlZ3knIGlzIGludmFsaWQuIik7CisgICAgYXV0byBwYWdlTG9hZFN0cmF0ZWd5ID0gcGFn
ZUxvYWRTdHJhdGVneUZyb21QYXJhbWV0ZXIoV1RGTW92ZShvcHRpb25hbFBhZ2VMb2FkU3RyYXRl
Z3kpKTsKICAgICBhdXRvIHBhZ2VMb2FkVGltZW91dCA9IG9wdGlvbmFsUGFnZUxvYWRUaW1lb3V0
ID8gU2Vjb25kczo6ZnJvbU1pbGxpc2Vjb25kcygqb3B0aW9uYWxQYWdlTG9hZFRpbWVvdXQpIDog
ZGVmYXVsdFBhZ2VMb2FkVGltZW91dDsKIAogICAgIHBhZ2UtPmdvQmFjaygpOwotICAgIHdhaXRG
b3JOYXZpZ2F0aW9uVG9Db21wbGV0ZU9uUGFnZSgqcGFnZSwgcGFnZUxvYWRTdHJhdGVneS52YWx1
ZSgpLCBwYWdlTG9hZFRpbWVvdXQsIFdURk1vdmUoY2FsbGJhY2spKTsKKyAgICB3YWl0Rm9yTmF2
aWdhdGlvblRvQ29tcGxldGVPblBhZ2UoKnBhZ2UsIHBhZ2VMb2FkU3RyYXRlZ3ksIHBhZ2VMb2Fk
VGltZW91dCwgV1RGTW92ZShjYWxsYmFjaykpOwogfQogCi12b2lkIFdlYkF1dG9tYXRpb25TZXNz
aW9uOjpnb0ZvcndhcmRJbkJyb3dzaW5nQ29udGV4dChjb25zdCBTdHJpbmcmIGhhbmRsZSwgY29u
c3QgU3RyaW5nKiBvcHRpb25hbFBhZ2VMb2FkU3RyYXRlZ3lTdHJpbmcsIGNvbnN0IGRvdWJsZSog
b3B0aW9uYWxQYWdlTG9hZFRpbWVvdXQsIFJlZjxHb0ZvcndhcmRJbkJyb3dzaW5nQ29udGV4dENh
bGxiYWNrPiYmIGNhbGxiYWNrKQordm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6Z29Gb3J3YXJk
SW5Ccm93c2luZ0NvbnRleHQoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6
QnJvd3NpbmdDb250ZXh0SGFuZGxlJiBoYW5kbGUsIE9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkF1dG9tYXRpb246OlBhZ2VMb2FkU3RyYXRlZ3k+JiYgb3B0aW9uYWxQYWdlTG9hZFN0cmF0
ZWd5LCBPcHRpb25hbDxkb3VibGU+JiYgb3B0aW9uYWxQYWdlTG9hZFRpbWVvdXQsIFJlZjxHb0Zv
cndhcmRJbkJyb3dzaW5nQ29udGV4dENhbGxiYWNrPiYmIGNhbGxiYWNrKQogewogICAgIFdlYlBh
Z2VQcm94eSogcGFnZSA9IHdlYlBhZ2VQcm94eUZvckhhbmRsZShoYW5kbGUpOwogICAgIGlmICgh
cGFnZSkKICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1IoV2luZG93Tm90
Rm91bmQpOwogCi0gICAgYXV0byBwYWdlTG9hZFN0cmF0ZWd5ID0gcGFnZUxvYWRTdHJhdGVneUZy
b21TdHJpbmdQYXJhbWV0ZXIob3B0aW9uYWxQYWdlTG9hZFN0cmF0ZWd5U3RyaW5nKTsKLSAgICBp
ZiAoIXBhZ2VMb2FkU3RyYXRlZ3kpCi0gICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVE
X0VSUk9SX0FORF9ERVRBSUxTKEludmFsaWRQYXJhbWV0ZXIsICJUaGUgcGFyYW1ldGVyICdwYWdl
TG9hZFN0cmF0ZWd5JyBpcyBpbnZhbGlkLiIpOworICAgIGF1dG8gcGFnZUxvYWRTdHJhdGVneSA9
IHBhZ2VMb2FkU3RyYXRlZ3lGcm9tUGFyYW1ldGVyKFdURk1vdmUob3B0aW9uYWxQYWdlTG9hZFN0
cmF0ZWd5KSk7CiAgICAgYXV0byBwYWdlTG9hZFRpbWVvdXQgPSBvcHRpb25hbFBhZ2VMb2FkVGlt
ZW91dCA/IFNlY29uZHM6OmZyb21NaWxsaXNlY29uZHMoKm9wdGlvbmFsUGFnZUxvYWRUaW1lb3V0
KSA6IGRlZmF1bHRQYWdlTG9hZFRpbWVvdXQ7CiAKICAgICBwYWdlLT5nb0ZvcndhcmQoKTsKLSAg
ICB3YWl0Rm9yTmF2aWdhdGlvblRvQ29tcGxldGVPblBhZ2UoKnBhZ2UsIHBhZ2VMb2FkU3RyYXRl
Z3kudmFsdWUoKSwgcGFnZUxvYWRUaW1lb3V0LCBXVEZNb3ZlKGNhbGxiYWNrKSk7CisgICAgd2Fp
dEZvck5hdmlnYXRpb25Ub0NvbXBsZXRlT25QYWdlKCpwYWdlLCBwYWdlTG9hZFN0cmF0ZWd5LCBw
YWdlTG9hZFRpbWVvdXQsIFdURk1vdmUoY2FsbGJhY2spKTsKIH0KIAotdm9pZCBXZWJBdXRvbWF0
aW9uU2Vzc2lvbjo6cmVsb2FkQnJvd3NpbmdDb250ZXh0KGNvbnN0IFN0cmluZyYgaGFuZGxlLCBj
b25zdCBTdHJpbmcqIG9wdGlvbmFsUGFnZUxvYWRTdHJhdGVneVN0cmluZywgY29uc3QgZG91Ymxl
KiBvcHRpb25hbFBhZ2VMb2FkVGltZW91dCwgUmVmPFJlbG9hZEJyb3dzaW5nQ29udGV4dENhbGxi
YWNrPiYmIGNhbGxiYWNrKQordm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6cmVsb2FkQnJvd3Np
bmdDb250ZXh0KGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5n
Q29udGV4dEhhbmRsZSYgaGFuZGxlLCBPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRv
bWF0aW9uOjpQYWdlTG9hZFN0cmF0ZWd5PiYmIG9wdGlvbmFsUGFnZUxvYWRTdHJhdGVneSwgT3B0
aW9uYWw8ZG91YmxlPiYmIG9wdGlvbmFsUGFnZUxvYWRUaW1lb3V0LCBSZWY8UmVsb2FkQnJvd3Np
bmdDb250ZXh0Q2FsbGJhY2s+JiYgY2FsbGJhY2spCiB7CiAgICAgV2ViUGFnZVByb3h5KiBwYWdl
ID0gd2ViUGFnZVByb3h5Rm9ySGFuZGxlKGhhbmRsZSk7CiAgICAgaWYgKCFwYWdlKQogICAgICAg
ICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUihXaW5kb3dOb3RGb3VuZCk7CiAKLSAg
ICBhdXRvIHBhZ2VMb2FkU3RyYXRlZ3kgPSBwYWdlTG9hZFN0cmF0ZWd5RnJvbVN0cmluZ1BhcmFt
ZXRlcihvcHRpb25hbFBhZ2VMb2FkU3RyYXRlZ3lTdHJpbmcpOwotICAgIGlmICghcGFnZUxvYWRT
dHJhdGVneSkKLSAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RF
VEFJTFMoSW52YWxpZFBhcmFtZXRlciwgIlRoZSBwYXJhbWV0ZXIgJ3BhZ2VMb2FkU3RyYXRlZ3kn
IGlzIGludmFsaWQuIik7CisgICAgYXV0byBwYWdlTG9hZFN0cmF0ZWd5ID0gcGFnZUxvYWRTdHJh
dGVneUZyb21QYXJhbWV0ZXIoV1RGTW92ZShvcHRpb25hbFBhZ2VMb2FkU3RyYXRlZ3kpKTsKICAg
ICBhdXRvIHBhZ2VMb2FkVGltZW91dCA9IG9wdGlvbmFsUGFnZUxvYWRUaW1lb3V0ID8gU2Vjb25k
czo6ZnJvbU1pbGxpc2Vjb25kcygqb3B0aW9uYWxQYWdlTG9hZFRpbWVvdXQpIDogZGVmYXVsdFBh
Z2VMb2FkVGltZW91dDsKIAogICAgIHBhZ2UtPnJlbG9hZCh7IH0pOwotICAgIHdhaXRGb3JOYXZp
Z2F0aW9uVG9Db21wbGV0ZU9uUGFnZSgqcGFnZSwgcGFnZUxvYWRTdHJhdGVneS52YWx1ZSgpLCBw
YWdlTG9hZFRpbWVvdXQsIFdURk1vdmUoY2FsbGJhY2spKTsKKyAgICB3YWl0Rm9yTmF2aWdhdGlv
blRvQ29tcGxldGVPblBhZ2UoKnBhZ2UsIHBhZ2VMb2FkU3RyYXRlZ3ksIHBhZ2VMb2FkVGltZW91
dCwgV1RGTW92ZShjYWxsYmFjaykpOwogfQogCiB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpu
YXZpZ2F0aW9uT2NjdXJyZWRGb3JGcmFtZShjb25zdCBXZWJGcmFtZVByb3h5JiBmcmFtZSkKQEAg
LTkyMiwzNSArOTA1LDI3IEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OmhhbmRsZVJ1bk9w
ZW5QYW5lbChjb25zdCBXZWJQYWdlUHJveHkmIHBhZ2UsIGNvbnN0IFdlCiAgICAgbV9kb21haW5O
b3RpZmllci0+ZmlsZUNob29zZXJEaXNtaXNzZWQoYnJvd3NpbmdDb250ZXh0SGFuZGxlLCBmYWxz
ZSk7CiB9CiAKLXZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OmV2YWx1YXRlSmF2YVNjcmlwdEZ1
bmN0aW9uKGNvbnN0IFN0cmluZyYgYnJvd3NpbmdDb250ZXh0SGFuZGxlLCBjb25zdCBTdHJpbmcq
IG9wdGlvbmFsRnJhbWVIYW5kbGUsIGNvbnN0IFN0cmluZyYgZnVuY3Rpb24sIGNvbnN0IEpTT046
OkFycmF5JiBhcmd1bWVudHMsIGNvbnN0IGJvb2wqIG9wdGlvbmFsRXhwZWN0c0ltcGxpY2l0Q2Fs
bGJhY2tBcmd1bWVudCwgY29uc3QgZG91YmxlKiBvcHRpb25hbENhbGxiYWNrVGltZW91dCwgUmVm
PEV2YWx1YXRlSmF2YVNjcmlwdEZ1bmN0aW9uQ2FsbGJhY2s+JiYgY2FsbGJhY2spCit2b2lkIFdl
YkF1dG9tYXRpb25TZXNzaW9uOjpldmFsdWF0ZUphdmFTY3JpcHRGdW5jdGlvbihjb25zdCBJbnNw
ZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRIYW5kbGUmIGJyb3dz
aW5nQ29udGV4dEhhbmRsZSwgY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6
RnJhbWVIYW5kbGUmIGZyYW1lSGFuZGxlLCBjb25zdCBTdHJpbmcmIGZ1bmN0aW9uLCBSZWY8SlNP
Tjo6QXJyYXk+JiYgYXJndW1lbnRzLCBPcHRpb25hbDxib29sPiYmIGV4cGVjdHNJbXBsaWNpdENh
bGxiYWNrQXJndW1lbnQsIE9wdGlvbmFsPGRvdWJsZT4mJiBjYWxsYmFja1RpbWVvdXQsIFJlZjxF
dmFsdWF0ZUphdmFTY3JpcHRGdW5jdGlvbkNhbGxiYWNrPiYmIGNhbGxiYWNrKQogewogICAgIFdl
YlBhZ2VQcm94eSogcGFnZSA9IHdlYlBhZ2VQcm94eUZvckhhbmRsZShicm93c2luZ0NvbnRleHRI
YW5kbGUpOwogICAgIGlmICghcGFnZSkKICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklO
RURfRVJST1IoV2luZG93Tm90Rm91bmQpOwogCiAgICAgYm9vbCBmcmFtZU5vdEZvdW5kID0gZmFs
c2U7Ci0gICAgYXV0byBmcmFtZUlEID0gd2ViRnJhbWVJREZvckhhbmRsZShvcHRpb25hbEZyYW1l
SGFuZGxlID8gKm9wdGlvbmFsRnJhbWVIYW5kbGUgOiBlbXB0eVN0cmluZygpLCBmcmFtZU5vdEZv
dW5kKTsKKyAgICBhdXRvIGZyYW1lSUQgPSB3ZWJGcmFtZUlERm9ySGFuZGxlKGZyYW1lSGFuZGxl
LCBmcmFtZU5vdEZvdW5kKTsKICAgICBpZiAoZnJhbWVOb3RGb3VuZCkKICAgICAgICAgQVNZTkNf
RkFJTF9XSVRIX1BSRURFRklORURfRVJST1IoRnJhbWVOb3RGb3VuZCk7CiAKICAgICBWZWN0b3I8
U3RyaW5nPiBhcmd1bWVudHNWZWN0b3I7Ci0gICAgYXJndW1lbnRzVmVjdG9yLnJlc2VydmVDYXBh
Y2l0eShhcmd1bWVudHMubGVuZ3RoKCkpOworICAgIGFyZ3VtZW50c1ZlY3Rvci5yZXNlcnZlQ2Fw
YWNpdHkoYXJndW1lbnRzLT5sZW5ndGgoKSk7CiAKLSAgICBmb3IgKGF1dG8mIGFyZ3VtZW50IDog
YXJndW1lbnRzKSB7Ci0gICAgICAgIFN0cmluZyBhcmd1bWVudFN0cmluZzsKLSAgICAgICAgYXJn
dW1lbnQtPmFzU3RyaW5nKGFyZ3VtZW50U3RyaW5nKTsKLSAgICAgICAgYXJndW1lbnRzVmVjdG9y
LnVuY2hlY2tlZEFwcGVuZChhcmd1bWVudFN0cmluZyk7Ci0gICAgfQotCi0gICAgYm9vbCBleHBl
Y3RzSW1wbGljaXRDYWxsYmFja0FyZ3VtZW50ID0gb3B0aW9uYWxFeHBlY3RzSW1wbGljaXRDYWxs
YmFja0FyZ3VtZW50ID8gKm9wdGlvbmFsRXhwZWN0c0ltcGxpY2l0Q2FsbGJhY2tBcmd1bWVudCA6
IGZhbHNlOwotICAgIE9wdGlvbmFsPGRvdWJsZT4gY2FsbGJhY2tUaW1lb3V0OwotICAgIGlmIChv
cHRpb25hbENhbGxiYWNrVGltZW91dCkKLSAgICAgICAgY2FsbGJhY2tUaW1lb3V0ID0gKm9wdGlv
bmFsQ2FsbGJhY2tUaW1lb3V0OworICAgIGZvciAoY29uc3QgYXV0byYgYXJndW1lbnQgOiBhcmd1
bWVudHMuZ2V0KCkpCisgICAgICAgIGFyZ3VtZW50c1ZlY3Rvci51bmNoZWNrZWRBcHBlbmQoYXJn
dW1lbnQtPmFzU3RyaW5nKCkpOwogCiAgICAgdWludDY0X3QgY2FsbGJhY2tJRCA9IG1fbmV4dEV2
YWx1YXRlSmF2YVNjcmlwdENhbGxiYWNrSUQrKzsKICAgICBtX2V2YWx1YXRlSmF2YVNjcmlwdEZ1
bmN0aW9uQ2FsbGJhY2tzLnNldChjYWxsYmFja0lELCBXVEZNb3ZlKGNhbGxiYWNrKSk7CiAKLSAg
ICBwYWdlLT5wcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6V2ViQXV0b21hdGlvblNlc3Npb25Qcm94
eTo6RXZhbHVhdGVKYXZhU2NyaXB0RnVuY3Rpb24ocGFnZS0+d2ViUGFnZUlEKCksIGZyYW1lSUQs
IGZ1bmN0aW9uLCBhcmd1bWVudHNWZWN0b3IsIGV4cGVjdHNJbXBsaWNpdENhbGxiYWNrQXJndW1l
bnQsIGNhbGxiYWNrVGltZW91dCwgY2FsbGJhY2tJRCksIDApOworICAgIHBhZ2UtPnByb2Nlc3Mo
KS5zZW5kKE1lc3NhZ2VzOjpXZWJBdXRvbWF0aW9uU2Vzc2lvblByb3h5OjpFdmFsdWF0ZUphdmFT
Y3JpcHRGdW5jdGlvbihwYWdlLT53ZWJQYWdlSUQoKSwgZnJhbWVJRCwgZnVuY3Rpb24sIGFyZ3Vt
ZW50c1ZlY3RvciwgZXhwZWN0c0ltcGxpY2l0Q2FsbGJhY2tBcmd1bWVudC52YWx1ZU9yKGZhbHNl
KSwgV1RGTW92ZShjYWxsYmFja1RpbWVvdXQpLCBjYWxsYmFja0lEKSwgMCk7CiB9CiAKIHZvaWQg
V2ViQXV0b21hdGlvblNlc3Npb246OmRpZEV2YWx1YXRlSmF2YVNjcmlwdEZ1bmN0aW9uKHVpbnQ2
NF90IGNhbGxiYWNrSUQsIGNvbnN0IFN0cmluZyYgcmVzdWx0LCBjb25zdCBTdHJpbmcmIGVycm9y
VHlwZSkKQEAgLTk2NSw3ICs5NDAsNyBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpkaWRF
dmFsdWF0ZUphdmFTY3JpcHRGdW5jdGlvbih1aW50NjRfdCBjYWxsYmFja0lELCBjbwogICAgICAg
ICBjYWxsYmFjay0+c2VuZFN1Y2Nlc3MocmVzdWx0KTsKIH0KIAotdm9pZCBXZWJBdXRvbWF0aW9u
U2Vzc2lvbjo6cmVzb2x2ZUNoaWxkRnJhbWVIYW5kbGUoY29uc3QgU3RyaW5nJiBicm93c2luZ0Nv
bnRleHRIYW5kbGUsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxGcmFtZUhhbmRsZSwgY29uc3QgaW50
KiBvcHRpb25hbE9yZGluYWwsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxOYW1lLCBjb25zdCBTdHJp
bmcqIG9wdGlvbmFsTm9kZUhhbmRsZSwgUmVmPFJlc29sdmVDaGlsZEZyYW1lSGFuZGxlQ2FsbGJh
Y2s+JiYgY2FsbGJhY2spCit2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpyZXNvbHZlQ2hpbGRG
cmFtZUhhbmRsZShjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2lu
Z0NvbnRleHRIYW5kbGUmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSwgY29uc3QgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6QXV0b21hdGlvbjo6RnJhbWVIYW5kbGUmIGZyYW1lSGFuZGxlLCBPcHRpb25hbDxp
bnQ+JiYgb3B0aW9uYWxPcmRpbmFsLCBjb25zdCBTdHJpbmcmIG9wdGlvbmFsTmFtZSwgY29uc3Qg
SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6Tm9kZUhhbmRsZSYgb3B0aW9uYWxOb2Rl
SGFuZGxlLCBSZWY8UmVzb2x2ZUNoaWxkRnJhbWVIYW5kbGVDYWxsYmFjaz4mJiBjYWxsYmFjaykK
IHsKICAgICBpZiAoIW9wdGlvbmFsT3JkaW5hbCAmJiAhb3B0aW9uYWxOYW1lICYmICFvcHRpb25h
bE5vZGVIYW5kbGUpCiAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FO
RF9ERVRBSUxTKE1pc3NpbmdQYXJhbWV0ZXIsICJDb21tYW5kIG11c3Qgc3BlY2lmeSBhIGNoaWxk
IGZyYW1lIGJ5IG9yZGluYWwsIG5hbWUsIG9yIGVsZW1lbnQgaGFuZGxlLiIpOwpAQCAtOTc1LDcg
Kzk1MCw3IEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OnJlc29sdmVDaGlsZEZyYW1lSGFu
ZGxlKGNvbnN0IFN0cmluZyYgYnJvd3NpbmdDb250ZXh0CiAgICAgICAgIEFTWU5DX0ZBSUxfV0lU
SF9QUkVERUZJTkVEX0VSUk9SKFdpbmRvd05vdEZvdW5kKTsKIAogICAgIGJvb2wgZnJhbWVOb3RG
b3VuZCA9IGZhbHNlOwotICAgIGF1dG8gZnJhbWVJRCA9IHdlYkZyYW1lSURGb3JIYW5kbGUob3B0
aW9uYWxGcmFtZUhhbmRsZSA/ICpvcHRpb25hbEZyYW1lSGFuZGxlIDogZW1wdHlTdHJpbmcoKSwg
ZnJhbWVOb3RGb3VuZCk7CisgICAgYXV0byBmcmFtZUlEID0gd2ViRnJhbWVJREZvckhhbmRsZShm
cmFtZUhhbmRsZSwgZnJhbWVOb3RGb3VuZCk7CiAgICAgaWYgKGZyYW1lTm90Rm91bmQpCiAgICAg
ICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SKEZyYW1lTm90Rm91bmQpOwogCkBA
IC05ODgsMTMgKzk2MywxMyBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpyZXNvbHZlQ2hp
bGRGcmFtZUhhbmRsZShjb25zdCBTdHJpbmcmIGJyb3dzaW5nQ29udGV4dAogICAgICAgICBjYWxs
YmFjay0+c2VuZFN1Y2Nlc3MoaGFuZGxlRm9yV2ViRnJhbWVJRChmcmFtZUlEKSk7CiAgICAgfTsK
IAotICAgIGlmIChvcHRpb25hbE5vZGVIYW5kbGUpIHsKLSAgICAgICAgcGFnZS0+cHJvY2Vzcygp
LnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQXV0b21hdGlvblNlc3Npb25Qcm94eTo6
UmVzb2x2ZUNoaWxkRnJhbWVXaXRoTm9kZUhhbmRsZShwYWdlLT53ZWJQYWdlSUQoKSwgZnJhbWVJ
RCwgKm9wdGlvbmFsTm9kZUhhbmRsZSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAg
ICBpZiAoISFvcHRpb25hbE5vZGVIYW5kbGUpIHsKKyAgICAgICAgcGFnZS0+cHJvY2VzcygpLnNl
bmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQXV0b21hdGlvblNlc3Npb25Qcm94eTo6UmVz
b2x2ZUNoaWxkRnJhbWVXaXRoTm9kZUhhbmRsZShwYWdlLT53ZWJQYWdlSUQoKSwgZnJhbWVJRCwg
b3B0aW9uYWxOb2RlSGFuZGxlKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKG9wdGlvbmFsTmFtZSkgewotICAgICAgICBwYWdl
LT5wcm9jZXNzKCkuc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJBdXRvbWF0aW9uU2Vz
c2lvblByb3h5OjpSZXNvbHZlQ2hpbGRGcmFtZVdpdGhOYW1lKHBhZ2UtPndlYlBhZ2VJRCgpLCBm
cmFtZUlELCAqb3B0aW9uYWxOYW1lKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAg
IGlmICghIW9wdGlvbmFsTmFtZSkgeworICAgICAgICBwYWdlLT5wcm9jZXNzKCkuc2VuZFdpdGhB
c3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJBdXRvbWF0aW9uU2Vzc2lvblByb3h5OjpSZXNvbHZlQ2hp
bGRGcmFtZVdpdGhOYW1lKHBhZ2UtPndlYlBhZ2VJRCgpLCBmcmFtZUlELCBvcHRpb25hbE5hbWUp
LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
QEAgLTEwMDYsNyArOTgxLDcgQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6cmVzb2x2ZUNo
aWxkRnJhbWVIYW5kbGUoY29uc3QgU3RyaW5nJiBicm93c2luZ0NvbnRleHQKICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKIH0KIAotdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6cmVzb2x2ZVBh
cmVudEZyYW1lSGFuZGxlKGNvbnN0IFN0cmluZyYgYnJvd3NpbmdDb250ZXh0SGFuZGxlLCBjb25z
dCBTdHJpbmcmIGZyYW1lSGFuZGxlLCBSZWY8UmVzb2x2ZVBhcmVudEZyYW1lSGFuZGxlQ2FsbGJh
Y2s+JiYgY2FsbGJhY2spCit2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpyZXNvbHZlUGFyZW50
RnJhbWVIYW5kbGUoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3Np
bmdDb250ZXh0SGFuZGxlJiBicm93c2luZ0NvbnRleHRIYW5kbGUsIGNvbnN0IEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkF1dG9tYXRpb246OkZyYW1lSGFuZGxlJiBmcmFtZUhhbmRsZSwgUmVmPFJlc29s
dmVQYXJlbnRGcmFtZUhhbmRsZUNhbGxiYWNrPiYmIGNhbGxiYWNrKQogewogICAgIFdlYlBhZ2VQ
cm94eSogcGFnZSA9IHdlYlBhZ2VQcm94eUZvckhhbmRsZShicm93c2luZ0NvbnRleHRIYW5kbGUp
OwogICAgIGlmICghcGFnZSkKQEAgLTEwMjksMTYgKzEwMDQsMjIgQEAgdm9pZCBXZWJBdXRvbWF0
aW9uU2Vzc2lvbjo6cmVzb2x2ZVBhcmVudEZyYW1lSGFuZGxlKGNvbnN0IFN0cmluZyYgYnJvd3Np
bmdDb250ZXgKICAgICBwYWdlLT5wcm9jZXNzKCkuc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2Vz
OjpXZWJBdXRvbWF0aW9uU2Vzc2lvblByb3h5OjpSZXNvbHZlUGFyZW50RnJhbWUocGFnZS0+d2Vi
UGFnZUlEKCksIGZyYW1lSUQpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKLXN0
YXRpYyBPcHRpb25hbDxDb29yZGluYXRlU3lzdGVtPiBwcm90b2NvbFN0cmluZ1RvQ29vcmRpbmF0
ZVN5c3RlbShjb25zdCBTdHJpbmcmIGNvb3JkaW5hdGVTeXN0ZW1TdHJpbmcpCitzdGF0aWMgT3B0
aW9uYWw8Q29vcmRpbmF0ZVN5c3RlbT4gcHJvdG9jb2xTdHJpbmdUb0Nvb3JkaW5hdGVTeXN0ZW0o
SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6Q29vcmRpbmF0ZVN5c3RlbSBjb29yZGlu
YXRlU3lzdGVtKQogewotICAgIGlmIChjb29yZGluYXRlU3lzdGVtU3RyaW5nID09ICJQYWdlIikK
KyAgICBzd2l0Y2ggKGNvb3JkaW5hdGVTeXN0ZW0pIHsKKyAgICBjYXNlIEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkF1dG9tYXRpb246OkNvb3JkaW5hdGVTeXN0ZW06OlBhZ2U6CiAgICAgICAgIHJldHVy
biBDb29yZGluYXRlU3lzdGVtOjpQYWdlOwotICAgIGlmIChjb29yZGluYXRlU3lzdGVtU3RyaW5n
ID09ICJMYXlvdXRWaWV3cG9ydCIpCisKKyAgICBjYXNlIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1
dG9tYXRpb246OkNvb3JkaW5hdGVTeXN0ZW06OlZpZXdwb3J0OgorICAgIGNhc2UgSW5zcGVjdG9y
OjpQcm90b2NvbDo6QXV0b21hdGlvbjo6Q29vcmRpbmF0ZVN5c3RlbTo6TGF5b3V0Vmlld3BvcnQ6
CiAgICAgICAgIHJldHVybiBDb29yZGluYXRlU3lzdGVtOjpMYXlvdXRWaWV3cG9ydDsKKyAgICB9
CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owog
fQogCi12b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpjb21wdXRlRWxlbWVudExheW91dChjb25z
dCBTdHJpbmcmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSwgY29uc3QgU3RyaW5nJiBmcmFtZUhhbmRs
ZSwgY29uc3QgU3RyaW5nJiBub2RlSGFuZGxlLCBjb25zdCBib29sKiBvcHRpb25hbFNjcm9sbElu
dG9WaWV3SWZOZWVkZWQsIGNvbnN0IFN0cmluZyYgY29vcmRpbmF0ZVN5c3RlbVN0cmluZywgUmVm
PENvbXB1dGVFbGVtZW50TGF5b3V0Q2FsbGJhY2s+JiYgY2FsbGJhY2spCit2b2lkIFdlYkF1dG9t
YXRpb25TZXNzaW9uOjpjb21wdXRlRWxlbWVudExheW91dChjb25zdCBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRIYW5kbGUmIGJyb3dzaW5nQ29udGV4dEhh
bmRsZSwgY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6RnJhbWVIYW5kbGUm
IGZyYW1lSGFuZGxlLCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpOb2Rl
SGFuZGxlJiBub2RlSGFuZGxlLCBPcHRpb25hbDxib29sPiYmIG9wdGlvbmFsU2Nyb2xsSW50b1Zp
ZXdJZk5lZWRlZCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6Q29vcmRpbmF0ZVN5
c3RlbSBjb29yZGluYXRlU3lzdGVtVmFsdWUsIFJlZjxDb21wdXRlRWxlbWVudExheW91dENhbGxi
YWNrPiYmIGNhbGxiYWNrKQogewogICAgIFdlYlBhZ2VQcm94eSogcGFnZSA9IHdlYlBhZ2VQcm94
eUZvckhhbmRsZShicm93c2luZ0NvbnRleHRIYW5kbGUpOwogICAgIGlmICghcGFnZSkKQEAgLTEw
NDksNyArMTAzMCw3IEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OmNvbXB1dGVFbGVtZW50
TGF5b3V0KGNvbnN0IFN0cmluZyYgYnJvd3NpbmdDb250ZXh0SGFuCiAgICAgaWYgKGZyYW1lTm90
Rm91bmQpCiAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SKEZyYW1lTm90
Rm91bmQpOwogCi0gICAgT3B0aW9uYWw8Q29vcmRpbmF0ZVN5c3RlbT4gY29vcmRpbmF0ZVN5c3Rl
bSA9IHByb3RvY29sU3RyaW5nVG9Db29yZGluYXRlU3lzdGVtKGNvb3JkaW5hdGVTeXN0ZW1TdHJp
bmcpOworICAgIE9wdGlvbmFsPENvb3JkaW5hdGVTeXN0ZW0+IGNvb3JkaW5hdGVTeXN0ZW0gPSBw
cm90b2NvbFN0cmluZ1RvQ29vcmRpbmF0ZVN5c3RlbShjb29yZGluYXRlU3lzdGVtVmFsdWUpOwog
ICAgIGlmICghY29vcmRpbmF0ZVN5c3RlbSkKICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURF
RklORURfRVJST1JfQU5EX0RFVEFJTFMoSW52YWxpZFBhcmFtZXRlciwgIlRoZSBwYXJhbWV0ZXIg
J2Nvb3JkaW5hdGVTeXN0ZW0nIGlzIGludmFsaWQuIik7CiAKQEAgLTEwOTEsNyArMTA3Miw3IEBA
IHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OmNvbXB1dGVFbGVtZW50TGF5b3V0KGNvbnN0IFN0
cmluZyYgYnJvd3NpbmdDb250ZXh0SGFuCiAgICAgcGFnZS0+cHJvY2VzcygpLnNlbmRXaXRoQXN5
bmNSZXBseShNZXNzYWdlczo6V2ViQXV0b21hdGlvblNlc3Npb25Qcm94eTo6Q29tcHV0ZUVsZW1l
bnRMYXlvdXQocGFnZS0+d2ViUGFnZUlEKCksIGZyYW1lSUQsIG5vZGVIYW5kbGUsIHNjcm9sbElu
dG9WaWV3SWZOZWVkZWQsIGNvb3JkaW5hdGVTeXN0ZW0udmFsdWUoKSksIFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKIH0KIAotdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6c2VsZWN0T3B0
aW9uRWxlbWVudChjb25zdCBTdHJpbmcmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSwgY29uc3QgU3Ry
aW5nJiBmcmFtZUhhbmRsZSwgY29uc3QgU3RyaW5nJiBub2RlSGFuZGxlLCBSZWY8U2VsZWN0T3B0
aW9uRWxlbWVudENhbGxiYWNrPiYmIGNhbGxiYWNrKQordm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lv
bjo6c2VsZWN0T3B0aW9uRWxlbWVudChjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0
aW9uOjpCcm93c2luZ0NvbnRleHRIYW5kbGUmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSwgY29uc3Qg
SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6RnJhbWVIYW5kbGUmIGZyYW1lSGFuZGxl
LCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpOb2RlSGFuZGxlJiBub2Rl
SGFuZGxlLCBSZWY8U2VsZWN0T3B0aW9uRWxlbWVudENhbGxiYWNrPiYmIGNhbGxiYWNrKQogewog
ICAgIFdlYlBhZ2VQcm94eSogcGFnZSA9IHdlYlBhZ2VQcm94eUZvckhhbmRsZShicm93c2luZ0Nv
bnRleHRIYW5kbGUpOwogICAgIGlmICghcGFnZSkKQEAgLTExMTQsNyArMTA5NSw3IEBAIHZvaWQg
V2ViQXV0b21hdGlvblNlc3Npb246OnNlbGVjdE9wdGlvbkVsZW1lbnQoY29uc3QgU3RyaW5nJiBi
cm93c2luZ0NvbnRleHRIYW5kCiAgICAgcGFnZS0+cHJvY2VzcygpLnNlbmRXaXRoQXN5bmNSZXBs
eShNZXNzYWdlczo6V2ViQXV0b21hdGlvblNlc3Npb25Qcm94eTo6U2VsZWN0T3B0aW9uRWxlbWVu
dChwYWdlLT53ZWJQYWdlSUQoKSwgZnJhbWVJRCwgbm9kZUhhbmRsZSksIFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpKTsKIH0KIAotdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6aXNTaG93aW5n
SmF2YVNjcmlwdERpYWxvZyhJbnNwZWN0b3I6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29u
c3QgU3RyaW5nJiBicm93c2luZ0NvbnRleHRIYW5kbGUsIGJvb2wqIHJlc3VsdCkKK0luc3BlY3Rv
cjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8Ym9vbD4gV2ViQXV0b21hdGlvblNlc3Npb246Omlz
U2hvd2luZ0phdmFTY3JpcHREaWFsb2coY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21h
dGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJiBicm93c2luZ0NvbnRleHRIYW5kbGUpCiB7CiAg
ICAgQVNTRVJUKG1fY2xpZW50KTsKICAgICBpZiAoIW1fY2xpZW50KQpAQCAtMTEyNCwxMCArMTEw
NSwxMCBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjppc1Nob3dpbmdKYXZhU2NyaXB0RGlh
bG9nKEluc3BlY3Rvcjo6RXJyb3JTdHJpbmcmIGVycgogICAgIGlmICghcGFnZSkKICAgICAgICAg
U1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUihXaW5kb3dOb3RGb3VuZCk7CiAKLSAgICAq
cmVzdWx0ID0gbV9jbGllbnQtPmlzU2hvd2luZ0phdmFTY3JpcHREaWFsb2dPblBhZ2UoKnRoaXMs
ICpwYWdlKTsKKyAgICByZXR1cm4gbV9jbGllbnQtPmlzU2hvd2luZ0phdmFTY3JpcHREaWFsb2dP
blBhZ2UoKnRoaXMsICpwYWdlKTsKIH0KIAotdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6ZGlz
bWlzc0N1cnJlbnRKYXZhU2NyaXB0RGlhbG9nKEluc3BlY3Rvcjo6RXJyb3JTdHJpbmcmIGVycm9y
U3RyaW5nLCBjb25zdCBTdHJpbmcmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSkKK0luc3BlY3Rvcjo6
UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gV2ViQXV0b21hdGlvblNlc3Npb246OmRpc21p
c3NDdXJyZW50SmF2YVNjcmlwdERpYWxvZyhjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRv
bWF0aW9uOjpCcm93c2luZ0NvbnRleHRIYW5kbGUmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSkKIHsK
ICAgICBBU1NFUlQobV9jbGllbnQpOwogICAgIGlmICghbV9jbGllbnQpCkBAIC0xMTQxLDkgKzEx
MjIsMTEgQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6ZGlzbWlzc0N1cnJlbnRKYXZhU2Ny
aXB0RGlhbG9nKEluc3BlY3Rvcjo6RXJyb3JTdHJpbmcKICAgICAgICAgU1lOQ19GQUlMX1dJVEhf
UFJFREVGSU5FRF9FUlJPUihOb0phdmFTY3JpcHREaWFsb2cpOwogCiAgICAgbV9jbGllbnQtPmRp
c21pc3NDdXJyZW50SmF2YVNjcmlwdERpYWxvZ09uUGFnZSgqdGhpcywgKnBhZ2UpOworCisgICAg
cmV0dXJuIHsgfTsKIH0KIAotdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6YWNjZXB0Q3VycmVu
dEphdmFTY3JpcHREaWFsb2coSW5zcGVjdG9yOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNv
bnN0IFN0cmluZyYgYnJvd3NpbmdDb250ZXh0SGFuZGxlKQorSW5zcGVjdG9yOjpQcm90b2NvbDo6
RXJyb3JTdHJpbmdPcjx2b2lkPiBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6YWNjZXB0Q3VycmVudEph
dmFTY3JpcHREaWFsb2coY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJv
d3NpbmdDb250ZXh0SGFuZGxlJiBicm93c2luZ0NvbnRleHRIYW5kbGUpCiB7CiAgICAgQVNTRVJU
KG1fY2xpZW50KTsKICAgICBpZiAoIW1fY2xpZW50KQpAQCAtMTE1Nyw5ICsxMTQwLDExIEBAIHZv
aWQgV2ViQXV0b21hdGlvblNlc3Npb246OmFjY2VwdEN1cnJlbnRKYXZhU2NyaXB0RGlhbG9nKElu
c3BlY3Rvcjo6RXJyb3JTdHJpbmcmCiAgICAgICAgIFNZTkNfRkFJTF9XSVRIX1BSRURFRklORURf
RVJST1IoTm9KYXZhU2NyaXB0RGlhbG9nKTsKIAogICAgIG1fY2xpZW50LT5hY2NlcHRDdXJyZW50
SmF2YVNjcmlwdERpYWxvZ09uUGFnZSgqdGhpcywgKnBhZ2UpOworCisgICAgcmV0dXJuIHsgfTsK
IH0KIAotdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6bWVzc2FnZU9mQ3VycmVudEphdmFTY3Jp
cHREaWFsb2coSW5zcGVjdG9yOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmlu
ZyYgYnJvd3NpbmdDb250ZXh0SGFuZGxlLCBTdHJpbmcqIHRleHQpCitJbnNwZWN0b3I6OlByb3Rv
Y29sOjpFcnJvclN0cmluZ09yPFN0cmluZz4gV2ViQXV0b21hdGlvblNlc3Npb246Om1lc3NhZ2VP
ZkN1cnJlbnRKYXZhU2NyaXB0RGlhbG9nKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9t
YXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYgYnJvd3NpbmdDb250ZXh0SGFuZGxlKQogewog
ICAgIEFTU0VSVChtX2NsaWVudCk7CiAgICAgaWYgKCFtX2NsaWVudCkKQEAgLTExNzIsMTAgKzEx
NTcsMTAgQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6bWVzc2FnZU9mQ3VycmVudEphdmFT
Y3JpcHREaWFsb2coSW5zcGVjdG9yOjpFcnJvclN0cmkKICAgICBpZiAoIW1fY2xpZW50LT5pc1No
b3dpbmdKYXZhU2NyaXB0RGlhbG9nT25QYWdlKCp0aGlzLCAqcGFnZSkpCiAgICAgICAgIFNZTkNf
RkFJTF9XSVRIX1BSRURFRklORURfRVJST1IoTm9KYXZhU2NyaXB0RGlhbG9nKTsKIAotICAgICp0
ZXh0ID0gbV9jbGllbnQtPm1lc3NhZ2VPZkN1cnJlbnRKYXZhU2NyaXB0RGlhbG9nT25QYWdlKCp0
aGlzLCAqcGFnZSk7CisgICAgcmV0dXJuIG1fY2xpZW50LT5tZXNzYWdlT2ZDdXJyZW50SmF2YVNj
cmlwdERpYWxvZ09uUGFnZSgqdGhpcywgKnBhZ2UpOwogfQogCi12b2lkIFdlYkF1dG9tYXRpb25T
ZXNzaW9uOjpzZXRVc2VySW5wdXRGb3JDdXJyZW50SmF2YVNjcmlwdFByb21wdChJbnNwZWN0b3I6
OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBicm93c2luZ0NvbnRleHRI
YW5kbGUsIGNvbnN0IFN0cmluZyYgcHJvbXB0VmFsdWUpCitJbnNwZWN0b3I6OlByb3RvY29sOjpF
cnJvclN0cmluZ09yPHZvaWQ+IFdlYkF1dG9tYXRpb25TZXNzaW9uOjpzZXRVc2VySW5wdXRGb3JD
dXJyZW50SmF2YVNjcmlwdFByb21wdChjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0
aW9uOjpCcm93c2luZ0NvbnRleHRIYW5kbGUmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSwgY29uc3Qg
U3RyaW5nJiBwcm9tcHRWYWx1ZSkKIHsKICAgICBBU1NFUlQobV9jbGllbnQpOwogICAgIGlmICgh
bV9jbGllbnQpCkBAIC0xMjA3LDE5ICsxMTkyLDIxIEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Np
b246OnNldFVzZXJJbnB1dEZvckN1cnJlbnRKYXZhU2NyaXB0UHJvbXB0KEluc3BlY3Rvcjo6RXJy
CiAgICAgfQogCiAgICAgbV9jbGllbnQtPnNldFVzZXJJbnB1dEZvckN1cnJlbnRKYXZhU2NyaXB0
UHJvbXB0T25QYWdlKCp0aGlzLCAqcGFnZSwgcHJvbXB0VmFsdWUpOworCisgICAgcmV0dXJuIHsg
fTsKIH0KIAotdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6c2V0RmlsZXNUb1NlbGVjdEZvckZp
bGVVcGxvYWQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGJyb3dzaW5n
Q29udGV4dEhhbmRsZSwgY29uc3QgSlNPTjo6QXJyYXkmIGZpbGVuYW1lcywgY29uc3QgSlNPTjo6
QXJyYXkqIGZpbGVDb250ZW50cykKK0luc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8
dm9pZD4gV2ViQXV0b21hdGlvblNlc3Npb246OnNldEZpbGVzVG9TZWxlY3RGb3JGaWxlVXBsb2Fk
KGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhh
bmRsZSYgYnJvd3NpbmdDb250ZXh0SGFuZGxlLCBSZWY8SlNPTjo6QXJyYXk+JiYgZmlsZW5hbWVz
LCBSZWZQdHI8SlNPTjo6QXJyYXk+JiYgZmlsZUNvbnRlbnRzKQogewogICAgIFZlY3RvcjxTdHJp
bmc+IG5ld0ZpbGVMaXN0OwotICAgIG5ld0ZpbGVMaXN0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHko
ZmlsZW5hbWVzLmxlbmd0aCgpKTsKKyAgICBuZXdGaWxlTGlzdC5yZXNlcnZlSW5pdGlhbENhcGFj
aXR5KGZpbGVuYW1lcy0+bGVuZ3RoKCkpOwogCi0gICAgaWYgKGZpbGVDb250ZW50cyAmJiBmaWxl
Q29udGVudHMtPmxlbmd0aCgpICE9IGZpbGVuYW1lcy5sZW5ndGgoKSkKKyAgICBpZiAoZmlsZUNv
bnRlbnRzICYmIGZpbGVDb250ZW50cy0+bGVuZ3RoKCkgIT0gZmlsZW5hbWVzLT5sZW5ndGgoKSkK
ICAgICAgICAgU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhJbnRl
cm5hbEVycm9yLCAiVGhlIHBhcmFtZXRlcnMgJ2ZpbGVuYW1lcycgYW5kICdmaWxlQ29udGVudHMn
IG11c3QgaGF2ZSBlcXVhbCBsZW5ndGguIik7CiAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGZpbGVuYW1lcy5sZW5ndGgoKTsgKytpKSB7Ci0gICAgICAgIFN0cmluZyBmaWxlbmFtZTsKLSAg
ICAgICAgaWYgKCFmaWxlbmFtZXMuZ2V0KGkpLT5hc1N0cmluZyhmaWxlbmFtZSkpCisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBmaWxlbmFtZXMtPmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAg
YXV0byBmaWxlbmFtZSA9IGZpbGVuYW1lcy0+Z2V0KGkpLT5hc1N0cmluZygpOworICAgICAgICBp
ZiAoIWZpbGVuYW1lKQogICAgICAgICAgICAgU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJP
Ul9BTkRfREVUQUlMUyhJbnRlcm5hbEVycm9yLCAiVGhlIHBhcmFtZXRlciAnZmlsZW5hbWVzJyBj
b250YWlucyBhIG5vbi1zdHJpbmcgdmFsdWUuIik7CiAKICAgICAgICAgaWYgKCFmaWxlQ29udGVu
dHMpIHsKQEAgLTEyMjcsOCArMTIxNCw4IEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OnNl
dEZpbGVzVG9TZWxlY3RGb3JGaWxlVXBsb2FkKEVycm9yU3RyaW5nJiBlcnJvclN0cmluCiAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIFN0cmluZyBmaWxlRGF0YTsK
LSAgICAgICAgaWYgKCFmaWxlQ29udGVudHMtPmdldChpKS0+YXNTdHJpbmcoZmlsZURhdGEpKQor
ICAgICAgICBhdXRvIGZpbGVEYXRhID0gZmlsZUNvbnRlbnRzLT5nZXQoaSktPmFzU3RyaW5nKCk7
CisgICAgICAgIGlmICghZmlsZURhdGEpCiAgICAgICAgICAgICBTWU5DX0ZBSUxfV0lUSF9QUkVE
RUZJTkVEX0VSUk9SX0FORF9ERVRBSUxTKEludGVybmFsRXJyb3IsICJUaGUgcGFyYW1ldGVyICdm
aWxlQ29udGVudHMnIGNvbnRhaW5zIGEgbm9uLXN0cmluZyB2YWx1ZS4iKTsKIAogICAgICAgICBP
cHRpb25hbDxTdHJpbmc+IGxvY2FsRmlsZVBhdGggPSBwbGF0Zm9ybUdlbmVyYXRlTG9jYWxGaWxl
UGF0aEZvclJlbW90ZUZpbGUoZmlsZW5hbWUsIGZpbGVEYXRhKTsKQEAgLTEyMzksOSArMTIyNiwx
MSBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpzZXRGaWxlc1RvU2VsZWN0Rm9yRmlsZVVw
bG9hZChFcnJvclN0cmluZyYgZXJyb3JTdHJpbgogICAgIH0KIAogICAgIG1fZmlsZXNUb1NlbGVj
dEZvckZpbGVVcGxvYWQuc3dhcChuZXdGaWxlTGlzdCk7CisKKyAgICByZXR1cm4geyB9OwogfQog
Ci12b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpzZXRGaWxlc0ZvcklucHV0RmlsZVVwbG9hZChj
b25zdCBTdHJpbmcmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSwgY29uc3QgU3RyaW5nJiBmcmFtZUhh
bmRsZSwgY29uc3QgU3RyaW5nJiBub2RlSGFuZGxlLCBjb25zdCBKU09OOjpBcnJheSYgZmlsZW5h
bWVzLCBSZWY8U2V0RmlsZXNGb3JJbnB1dEZpbGVVcGxvYWRDYWxsYmFjaz4mJiBjYWxsYmFjaykK
K3ZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OnNldEZpbGVzRm9ySW5wdXRGaWxlVXBsb2FkKGNv
bnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRs
ZSYgYnJvd3NpbmdDb250ZXh0SGFuZGxlLCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRv
bWF0aW9uOjpGcmFtZUhhbmRsZSYgZnJhbWVIYW5kbGUsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkF1dG9tYXRpb246Ok5vZGVIYW5kbGUmIG5vZGVIYW5kbGUsIFJlZjxKU09OOjpBcnJheT4m
JiBmaWxlbmFtZXMsIFJlZjxTZXRGaWxlc0ZvcklucHV0RmlsZVVwbG9hZENhbGxiYWNrPiYmIGNh
bGxiYWNrKQogewogICAgIFdlYlBhZ2VQcm94eSogcGFnZSA9IHdlYlBhZ2VQcm94eUZvckhhbmRs
ZShicm93c2luZ0NvbnRleHRIYW5kbGUpOwogICAgIGlmICghcGFnZSkKQEAgLTEyNTMsMTAgKzEy
NDIsMTAgQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6c2V0RmlsZXNGb3JJbnB1dEZpbGVV
cGxvYWQoY29uc3QgU3RyaW5nJiBicm93c2luZ0NvbnQKICAgICAgICAgQVNZTkNfRkFJTF9XSVRI
X1BSRURFRklORURfRVJST1IoRnJhbWVOb3RGb3VuZCk7CiAKICAgICBWZWN0b3I8U3RyaW5nPiBu
ZXdGaWxlTGlzdDsKLSAgICBuZXdGaWxlTGlzdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGZpbGVu
YW1lcy5sZW5ndGgoKSk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaWxlbmFtZXMubGVu
Z3RoKCk7ICsraSkgewotICAgICAgICBTdHJpbmcgZmlsZW5hbWU7Ci0gICAgICAgIGlmICghZmls
ZW5hbWVzLmdldChpKS0+YXNTdHJpbmcoZmlsZW5hbWUpKQorICAgIG5ld0ZpbGVMaXN0LnJlc2Vy
dmVJbml0aWFsQ2FwYWNpdHkoZmlsZW5hbWVzLT5sZW5ndGgoKSk7CisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBmaWxlbmFtZXMtPmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgYXV0byBmaWxl
bmFtZSA9IGZpbGVuYW1lcy0+Z2V0KGkpLT5hc1N0cmluZygpOworICAgICAgICBpZiAoIWZpbGVu
YW1lKQogICAgICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RF
VEFJTFMoSW50ZXJuYWxFcnJvciwgIlRoZSBwYXJhbWV0ZXIgJ2ZpbGVuYW1lcycgY29udGFpbnMg
YSBub24tc3RyaW5nIHZhbHVlLiIpOwogCiAgICAgICAgIG5ld0ZpbGVMaXN0LmFwcGVuZChmaWxl
bmFtZSk7CkBAIC0xMjk5LDcgKzEyODgsNyBAQCBzdGF0aWMgUmVmPEpTT046OkFycmF5T2Y8SW5z
cGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6Q29va2llPj4gYnVpbGRBcnJheUZvcgogICAg
IHJldHVybiBjb29raWVzOwogfQogCi12b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpnZXRBbGxD
b29raWVzKGNvbnN0IFN0cmluZyYgYnJvd3NpbmdDb250ZXh0SGFuZGxlLCBSZWY8R2V0QWxsQ29v
a2llc0NhbGxiYWNrPiYmIGNhbGxiYWNrKQordm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6Z2V0
QWxsQ29va2llcyhjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2lu
Z0NvbnRleHRIYW5kbGUmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSwgUmVmPEdldEFsbENvb2tpZXND
YWxsYmFjaz4mJiBjYWxsYmFjaykKIHsKICAgICBXZWJQYWdlUHJveHkqIHBhZ2UgPSB3ZWJQYWdl
UHJveHlGb3JIYW5kbGUoYnJvd3NpbmdDb250ZXh0SGFuZGxlKTsKICAgICBpZiAoIXBhZ2UpCkBA
IC0xMzE3LDcgKzEzMDYsNyBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpnZXRBbGxDb29r
aWVzKGNvbnN0IFN0cmluZyYgYnJvd3NpbmdDb250ZXh0SGFuZGxlLCBSZQogICAgIHBhZ2UtPnBy
b2Nlc3MoKS5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkF1dG9tYXRpb25TZXNzaW9u
UHJveHk6OkdldENvb2tpZXNGb3JGcmFtZShwYWdlLT53ZWJQYWdlSUQoKSwgV1RGOjpudWxsb3B0
KSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCi12b2lkIFdlYkF1dG9tYXRpb25T
ZXNzaW9uOjpkZWxldGVTaW5nbGVDb29raWUoY29uc3QgU3RyaW5nJiBicm93c2luZ0NvbnRleHRI
YW5kbGUsIGNvbnN0IFN0cmluZyYgY29va2llTmFtZSwgUmVmPERlbGV0ZVNpbmdsZUNvb2tpZUNh
bGxiYWNrPiYmIGNhbGxiYWNrKQordm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6ZGVsZXRlU2lu
Z2xlQ29va2llKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5n
Q29udGV4dEhhbmRsZSYgYnJvd3NpbmdDb250ZXh0SGFuZGxlLCBjb25zdCBTdHJpbmcmIGNvb2tp
ZU5hbWUsIFJlZjxEZWxldGVTaW5nbGVDb29raWVDYWxsYmFjaz4mJiBjYWxsYmFjaykKIHsKICAg
ICBXZWJQYWdlUHJveHkqIHBhZ2UgPSB3ZWJQYWdlUHJveHlGb3JIYW5kbGUoYnJvd3NpbmdDb250
ZXh0SGFuZGxlKTsKICAgICBpZiAoIXBhZ2UpCkBAIC0xMzQ3LDcgKzEzMzYsNyBAQCBzdGF0aWMg
U3RyaW5nIGRvbWFpbkJ5QWRkaW5nRG90UHJlZml4SWZOZWVkZWQoU3RyaW5nIGRvbWFpbikKICAg
ICByZXR1cm4gZG9tYWluOwogfQogICAgIAotdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6YWRk
U2luZ2xlQ29va2llKGNvbnN0IFN0cmluZyYgYnJvd3NpbmdDb250ZXh0SGFuZGxlLCBjb25zdCBK
U09OOjpPYmplY3QmIGNvb2tpZU9iamVjdCwgUmVmPEFkZFNpbmdsZUNvb2tpZUNhbGxiYWNrPiYm
IGNhbGxiYWNrKQordm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6YWRkU2luZ2xlQ29va2llKGNv
bnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRs
ZSYgYnJvd3NpbmdDb250ZXh0SGFuZGxlLCBSZWY8SlNPTjo6T2JqZWN0PiYmIGNvb2tpZU9iamVj
dCwgUmVmPEFkZFNpbmdsZUNvb2tpZUNhbGxiYWNrPiYmIGNhbGxiYWNrKQogewogICAgIFdlYlBh
Z2VQcm94eSogcGFnZSA9IHdlYlBhZ2VQcm94eUZvckhhbmRsZShicm93c2luZ0NvbnRleHRIYW5k
bGUpOwogICAgIGlmICghcGFnZSkKQEAgLTEzNTgsMTQgKzEzNDcsMTYgQEAgdm9pZCBXZWJBdXRv
bWF0aW9uU2Vzc2lvbjo6YWRkU2luZ2xlQ29va2llKGNvbnN0IFN0cmluZyYgYnJvd3NpbmdDb250
ZXh0SGFuZGxlLAogCiAgICAgV2ViQ29yZTo6Q29va2llIGNvb2tpZTsKIAotICAgIGlmICghY29v
a2llT2JqZWN0LmdldFN0cmluZygibmFtZSJfcywgY29va2llLm5hbWUpKQorICAgIGNvb2tpZS5u
YW1lID0gY29va2llT2JqZWN0LT5nZXRTdHJpbmcoIm5hbWUiX3MpOworICAgIGlmICghY29va2ll
Lm5hbWUpCiAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRB
SUxTKE1pc3NpbmdQYXJhbWV0ZXIsICJUaGUgcGFyYW1ldGVyICduYW1lJyB3YXMgbm90IGZvdW5k
LiIpOwogCi0gICAgaWYgKCFjb29raWVPYmplY3QuZ2V0U3RyaW5nKCJ2YWx1ZSJfcywgY29va2ll
LnZhbHVlKSkKKyAgICBjb29raWUudmFsdWUgPSBjb29raWVPYmplY3QtPmdldFN0cmluZygidmFs
dWUiX3MpOworICAgIGlmICghY29va2llLnZhbHVlKQogICAgICAgICBBU1lOQ19GQUlMX1dJVEhf
UFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhNaXNzaW5nUGFyYW1ldGVyLCAiVGhlIHBhcmFt
ZXRlciAndmFsdWUnIHdhcyBub3QgZm91bmQuIik7CiAKLSAgICBTdHJpbmcgZG9tYWluOwotICAg
IGlmICghY29va2llT2JqZWN0LmdldFN0cmluZygiZG9tYWluIl9zLCBkb21haW4pKQorICAgIGF1
dG8gZG9tYWluID0gY29va2llT2JqZWN0LT5nZXRTdHJpbmcoImRvbWFpbiJfcyk7CisgICAgaWYg
KCFkb21haW4pCiAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9E
RVRBSUxTKE1pc3NpbmdQYXJhbWV0ZXIsICJUaGUgcGFyYW1ldGVyICdkb21haW4nIHdhcyBub3Qg
Zm91bmQuIik7CiAKICAgICAvLyBJbmhlcml0IHRoZSBkb21haW4vaG9zdCBmcm9tIHRoZSBtYWlu
IGZyYW1lJ3MgVVJMIGlmIGl0IGlzIG5vdCBleHBsaWNpdGx5IHNldC4KQEAgLTEzNzQsMzEgKzEz
NjUsNDEgQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6YWRkU2luZ2xlQ29va2llKGNvbnN0
IFN0cmluZyYgYnJvd3NpbmdDb250ZXh0SGFuZGxlLAogICAgIGVsc2UKICAgICAgICAgY29va2ll
LmRvbWFpbiA9IGRvbWFpbkJ5QWRkaW5nRG90UHJlZml4SWZOZWVkZWQoZG9tYWluKTsKIAotICAg
IGlmICghY29va2llT2JqZWN0LmdldFN0cmluZygicGF0aCJfcywgY29va2llLnBhdGgpKQorICAg
IGNvb2tpZS5wYXRoID0gY29va2llT2JqZWN0LT5nZXRTdHJpbmcoInBhdGgiX3MpOworICAgIGlm
ICghY29va2llLnBhdGgpCiAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9S
X0FORF9ERVRBSUxTKE1pc3NpbmdQYXJhbWV0ZXIsICJUaGUgcGFyYW1ldGVyICdwYXRoJyB3YXMg
bm90IGZvdW5kLiIpOwogCi0gICAgZG91YmxlIGV4cGlyZXM7Ci0gICAgaWYgKCFjb29raWVPYmpl
Y3QuZ2V0RG91YmxlKCJleHBpcmVzIl9zLCBleHBpcmVzKSkKKyAgICBhdXRvIGV4cGlyZXMgPSBj
b29raWVPYmplY3QtPmdldERvdWJsZSgiZXhwaXJlcyJfcyk7CisgICAgaWYgKCFleHBpcmVzKQog
ICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhNaXNz
aW5nUGFyYW1ldGVyLCAiVGhlIHBhcmFtZXRlciAnZXhwaXJlcycgd2FzIG5vdCBmb3VuZC4iKTsK
IAotICAgIGNvb2tpZS5leHBpcmVzID0gZXhwaXJlcyAqIDEwMDAuMDsKKyAgICBjb29raWUuZXhw
aXJlcyA9ICpleHBpcmVzICogMTAwMC4wOwogCi0gICAgaWYgKCFjb29raWVPYmplY3QuZ2V0Qm9v
bGVhbigic2VjdXJlIl9zLCBjb29raWUuc2VjdXJlKSkKKyAgICBhdXRvIHNlY3VyZSA9IGNvb2tp
ZU9iamVjdC0+Z2V0Qm9vbGVhbigic2VjdXJlIl9zKTsKKyAgICBpZiAoIXNlY3VyZSkKICAgICAg
ICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoTWlzc2luZ1Bh
cmFtZXRlciwgIlRoZSBwYXJhbWV0ZXIgJ3NlY3VyZScgd2FzIG5vdCBmb3VuZC4iKTsKIAotICAg
IGlmICghY29va2llT2JqZWN0LmdldEJvb2xlYW4oInNlc3Npb24iX3MsIGNvb2tpZS5zZXNzaW9u
KSkKKyAgICBjb29raWUuc2VjdXJlID0gKnNlY3VyZTsKKworICAgIGF1dG8gc2Vzc2lvbiA9IGNv
b2tpZU9iamVjdC0+Z2V0Qm9vbGVhbigic2Vzc2lvbiJfcyk7CisgICAgaWYgKCFzZXNzaW9uKQog
ICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhNaXNz
aW5nUGFyYW1ldGVyLCAiVGhlIHBhcmFtZXRlciAnc2Vzc2lvbicgd2FzIG5vdCBmb3VuZC4iKTsK
IAotICAgIGlmICghY29va2llT2JqZWN0LmdldEJvb2xlYW4oImh0dHBPbmx5Il9zLCBjb29raWUu
aHR0cE9ubHkpKQorICAgIGNvb2tpZS5zZXNzaW9uID0gKnNlc3Npb247CisKKyAgICBhdXRvIGh0
dHBPbmx5ID0gY29va2llT2JqZWN0LT5nZXRCb29sZWFuKCJodHRwT25seSJfcyk7CisgICAgaWYg
KCFodHRwT25seSkKICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5E
X0RFVEFJTFMoTWlzc2luZ1BhcmFtZXRlciwgIlRoZSBwYXJhbWV0ZXIgJ2h0dHBPbmx5JyB3YXMg
bm90IGZvdW5kLiIpOwogCisgICAgY29va2llLmh0dHBPbmx5ID0gKmh0dHBPbmx5OworCiAgICAg
V2ViQ29va2llTWFuYWdlclByb3h5KiBjb29raWVNYW5hZ2VyID0gbV9wcm9jZXNzUG9vbC0+c3Vw
cGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7CiAgICAgY29va2llTWFuYWdlci0+c2V0
Q29va2llcyhwYWdlLT53ZWJzaXRlRGF0YVN0b3JlKCkuc2Vzc2lvbklEKCksIHsgY29va2llIH0s
IFtjYWxsYmFja10oKSB7CiAgICAgICAgIGNhbGxiYWNrLT5zZW5kU3VjY2VzcygpOwogICAgIH0p
OwogfQogCi12b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpkZWxldGVBbGxDb29raWVzKEVycm9y
U3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBicm93c2luZ0NvbnRleHRIYW5kbGUp
CitJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IFdlYkF1dG9tYXRpb25T
ZXNzaW9uOjpkZWxldGVBbGxDb29raWVzKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9t
YXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYgYnJvd3NpbmdDb250ZXh0SGFuZGxlKQogewog
ICAgIFdlYlBhZ2VQcm94eSogcGFnZSA9IHdlYlBhZ2VQcm94eUZvckhhbmRsZShicm93c2luZ0Nv
bnRleHRIYW5kbGUpOwogICAgIGlmICghcGFnZSkKQEAgLTE0MTEsOSArMTQxMiwxMSBAQCB2b2lk
IFdlYkF1dG9tYXRpb25TZXNzaW9uOjpkZWxldGVBbGxDb29raWVzKEVycm9yU3RyaW5nJiBlcnJv
clN0cmluZywgY29uc3QgU3RyaQogCiAgICAgV2ViQ29va2llTWFuYWdlclByb3h5KiBjb29raWVN
YW5hZ2VyID0gbV9wcm9jZXNzUG9vbC0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+
KCk7CiAgICAgY29va2llTWFuYWdlci0+ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lcyhwYWdlLT53
ZWJzaXRlRGF0YVN0b3JlKCkuc2Vzc2lvbklEKCksIHsgaG9zdCwgZG9tYWluQnlBZGRpbmdEb3RQ
cmVmaXhJZk5lZWRlZChob3N0KSB9KTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgV2Vi
QXV0b21hdGlvblNlc3Npb246OmdldFNlc3Npb25QZXJtaXNzaW9ucyhFcnJvclN0cmluZyYsIFJl
ZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OlNlc3Np
b25QZXJtaXNzaW9uRGF0YT4+JiBvdXRfcGVybWlzc2lvbnMpCitJbnNwZWN0b3I6OlByb3RvY29s
OjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1
dG9tYXRpb246OlNlc3Npb25QZXJtaXNzaW9uRGF0YT4+PiBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6
Z2V0U2Vzc2lvblBlcm1pc3Npb25zKCkKIHsKICAgICBhdXRvIHBlcm1pc3Npb25zT2JqZWN0QXJy
YXkgPSBKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OlNlc3Np
b25QZXJtaXNzaW9uRGF0YT46OmNyZWF0ZSgpOwogICAgIGF1dG8gZ2V0VXNlck1lZGlhUGVybWlz
c2lvbk9iamVjdCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OlNlc3Npb25QZXJt
aXNzaW9uRGF0YTo6Y3JlYXRlKCkKQEAgLTE0MjIsMzQgKzE0MjUsMzYgQEAgdm9pZCBXZWJBdXRv
bWF0aW9uU2Vzc2lvbjo6Z2V0U2Vzc2lvblBlcm1pc3Npb25zKEVycm9yU3RyaW5nJiwgUmVmUHRy
PEpTT046OkFycmEKICAgICAgICAgLnJlbGVhc2UoKTsKIAogICAgIHBlcm1pc3Npb25zT2JqZWN0
QXJyYXktPmFkZEl0ZW0oV1RGTW92ZShnZXRVc2VyTWVkaWFQZXJtaXNzaW9uT2JqZWN0KSk7Ci0g
ICAgb3V0X3Blcm1pc3Npb25zID0gV1RGTW92ZShwZXJtaXNzaW9uc09iamVjdEFycmF5KTsKKyAg
ICByZXR1cm4gV1RGTW92ZShwZXJtaXNzaW9uc09iamVjdEFycmF5KTsKIH0KIAotdm9pZCBXZWJB
dXRvbWF0aW9uU2Vzc2lvbjo6c2V0U2Vzc2lvblBlcm1pc3Npb25zKEVycm9yU3RyaW5nJiBlcnJv
clN0cmluZywgY29uc3QgSlNPTjo6QXJyYXkmIHBlcm1pc3Npb25zKQorSW5zcGVjdG9yOjpQcm90
b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6c2V0U2Vzc2lv
blBlcm1pc3Npb25zKFJlZjxKU09OOjpBcnJheT4mJiBwZXJtaXNzaW9ucykKIHsKLSAgICBmb3Ig
KGF1dG8gaXQgPSBwZXJtaXNzaW9ucy5iZWdpbigpOyBpdCAhPSBwZXJtaXNzaW9ucy5lbmQoKTsg
KytpdCkgewotICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwZXJtaXNzaW9uOwotICAgICAg
ICBpZiAoIWl0LT5nZXQoKS0+YXNPYmplY3QocGVybWlzc2lvbikpCisgICAgZm9yIChhdXRvIGl0
ID0gcGVybWlzc2lvbnMtPmJlZ2luKCk7IGl0ICE9IHBlcm1pc3Npb25zLT5lbmQoKTsgKytpdCkg
eworICAgICAgICBhdXRvIHBlcm1pc3Npb24gPSBpdC0+Z2V0KCkuYXNPYmplY3QoKTsKKyAgICAg
ICAgaWYgKCFwZXJtaXNzaW9uKQogICAgICAgICAgICAgU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5F
RF9FUlJPUl9BTkRfREVUQUlMUyhJbnZhbGlkUGFyYW1ldGVyLCAiVGhlIHBhcmFtZXRlciAncGVy
bWlzc2lvbnMnIGlzIGludmFsaWQuIik7CiAKLSAgICAgICAgU3RyaW5nIHBlcm1pc3Npb25OYW1l
OwotICAgICAgICBpZiAoIXBlcm1pc3Npb24tPmdldFN0cmluZygicGVybWlzc2lvbiJfcywgcGVy
bWlzc2lvbk5hbWUpKQorICAgICAgICBhdXRvIHBlcm1pc3Npb25OYW1lID0gcGVybWlzc2lvbi0+
Z2V0U3RyaW5nKCJwZXJtaXNzaW9uIl9zKTsKKyAgICAgICAgaWYgKCFwZXJtaXNzaW9uTmFtZSkK
ICAgICAgICAgICAgIFNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMo
SW52YWxpZFBhcmFtZXRlciwgIlRoZSBwYXJhbWV0ZXIgJ3Blcm1pc3Npb24nIGlzIG1pc3Npbmcg
b3IgaW52YWxpZC4iKTsKIAogICAgICAgICBhdXRvIHBhcnNlZFBlcm1pc3Npb25OYW1lID0gSW5z
cGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbkhlbHBlcnM6OnBhcnNlRW51bVZhbHVlRnJvbVN0
cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpTZXNzaW9uUGVybWlzc2lvbj4o
cGVybWlzc2lvbk5hbWUpOwogICAgICAgICBpZiAoIXBhcnNlZFBlcm1pc3Npb25OYW1lKQogICAg
ICAgICAgICAgU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhJbnZh
bGlkUGFyYW1ldGVyLCAiVGhlIHBhcmFtZXRlciAncGVybWlzc2lvbicgaGFzIGFuIHVua25vd24g
dmFsdWUuIik7CiAKLSAgICAgICAgYm9vbCBwZXJtaXNzaW9uVmFsdWU7Ci0gICAgICAgIGlmICgh
cGVybWlzc2lvbi0+Z2V0Qm9vbGVhbigidmFsdWUiX3MsIHBlcm1pc3Npb25WYWx1ZSkpCisgICAg
ICAgIGF1dG8gcGVybWlzc2lvblZhbHVlID0gcGVybWlzc2lvbi0+Z2V0Qm9vbGVhbigidmFsdWUi
X3MpOworICAgICAgICBpZiAoIXBlcm1pc3Npb25WYWx1ZSkKICAgICAgICAgICAgIFNZTkNfRkFJ
TF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoSW52YWxpZFBhcmFtZXRlciwgIlRo
ZSBwYXJhbWV0ZXIgJ3ZhbHVlJyBpcyBtaXNzaW5nIG9yIGludmFsaWQuIik7CiAKICAgICAgICAg
c3dpdGNoIChwYXJzZWRQZXJtaXNzaW9uTmFtZS52YWx1ZSgpKSB7CiAgICAgICAgIGNhc2UgSW5z
cGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6U2Vzc2lvblBlcm1pc3Npb246OkdldFVzZXJN
ZWRpYToKLSAgICAgICAgICAgIG1fcGVybWlzc2lvbkZvckdldFVzZXJNZWRpYSA9IHBlcm1pc3Np
b25WYWx1ZTsKKyAgICAgICAgICAgIG1fcGVybWlzc2lvbkZvckdldFVzZXJNZWRpYSA9ICpwZXJt
aXNzaW9uVmFsdWU7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KKworICAg
IHJldHVybiB7IH07CiB9CiAKIGJvb2wgV2ViQXV0b21hdGlvblNlc3Npb246OnNob3VsZEFsbG93
R2V0VXNlck1lZGlhRm9yUGFnZShjb25zdCBXZWJQYWdlUHJveHkmKSBjb25zdApAQCAtMTQ5NCw3
ICsxNDk5LDcgQEAgU2ltdWxhdGVkSW5wdXRTb3VyY2UqIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpp
bnB1dFNvdXJjZUZvclR5cGUoU2ltdWxhdGVkSW5wdXRTb3UKIH0KIAogLy8gTUFSSzogU2ltdWxh
dGVkSW5wdXREaXNwYXRjaGVyOjpDbGllbnQgQVBJCi12b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9u
Ojp2aWV3cG9ydEluVmlld0NlbnRlclBvaW50T2ZFbGVtZW50KFdlYlBhZ2VQcm94eSYgcGFnZSwg
T3B0aW9uYWw8RnJhbWVJZGVudGlmaWVyPiBmcmFtZUlELCBjb25zdCBTdHJpbmcmIG5vZGVIYW5k
bGUsIEZ1bmN0aW9uPHZvaWQgKE9wdGlvbmFsPFdlYkNvcmU6OkludFBvaW50PiwgT3B0aW9uYWw8
QXV0b21hdGlvbkNvbW1hbmRFcnJvcj4pPiYmIGNvbXBsZXRpb25IYW5kbGVyKQordm9pZCBXZWJB
dXRvbWF0aW9uU2Vzc2lvbjo6dmlld3BvcnRJblZpZXdDZW50ZXJQb2ludE9mRWxlbWVudChXZWJQ
YWdlUHJveHkmIHBhZ2UsIE9wdGlvbmFsPEZyYW1lSWRlbnRpZmllcj4gZnJhbWVJRCwgY29uc3Qg
SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6Tm9kZUhhbmRsZSYgbm9kZUhhbmRsZSwg
RnVuY3Rpb248dm9pZChPcHRpb25hbDxXZWJDb3JlOjpJbnRQb2ludD4sIE9wdGlvbmFsPEF1dG9t
YXRpb25Db21tYW5kRXJyb3I+KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBXVEY6OkNv
bXBsZXRpb25IYW5kbGVyPHZvaWQoT3B0aW9uYWw8U3RyaW5nPiwgV2ViQ29yZTo6SW50UmVjdCwg
T3B0aW9uYWw8V2ViQ29yZTo6SW50UG9pbnQ+LCBib29sKT4gZGlkQ29tcHV0ZUVsZW1lbnRMYXlv
dXRIYW5kbGVyID0gW2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cildKE9wdGlvbmFsPFN0cmluZz4gZXJyb3JUeXBlLCBXZWJDb3JlOjpJbnRSZWN0LCBPcHRpb25h
bDxXZWJDb3JlOjpJbnRQb2ludD4gaW5WaWV3Q2VudGVyUG9pbnQsIGJvb2wpIG11dGFibGUgewog
ICAgICAgICBpZiAoZXJyb3JUeXBlKSB7CkBAIC0xNjM1LDcgKzE2NDAsNyBAQCBzdGF0aWMgV2Vi
RXZlbnQ6Ok1vZGlmaWVyIHByb3RvY29sTW9kaWZpZXJUb1dlYkV2ZW50TW9kaWZpZXIoSW5zcGVj
dG9yOjpQcm90b2NvbAogfQogI2VuZGlmIC8vIEVOQUJMRShXRUJEUklWRVJfTU9VU0VfSU5URVJB
Q1RJT05TKQogCi12b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpwZXJmb3JtTW91c2VJbnRlcmFj
dGlvbihjb25zdCBTdHJpbmcmIGhhbmRsZSwgY29uc3QgSlNPTjo6T2JqZWN0JiByZXF1ZXN0ZWRQ
b3NpdGlvbk9iamVjdCwgY29uc3QgU3RyaW5nJiBtb3VzZUJ1dHRvblN0cmluZywgY29uc3QgU3Ry
aW5nJiBtb3VzZUludGVyYWN0aW9uU3RyaW5nLCBjb25zdCBKU09OOjpBcnJheSYga2V5TW9kaWZp
ZXJTdHJpbmdzLCBSZWY8UGVyZm9ybU1vdXNlSW50ZXJhY3Rpb25DYWxsYmFjaz4mJiBjYWxsYmFj
aykKK3ZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OnBlcmZvcm1Nb3VzZUludGVyYWN0aW9uKGNv
bnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRs
ZSYgaGFuZGxlLCBSZWY8SlNPTjo6T2JqZWN0PiYmIHJlcXVlc3RlZFBvc2l0aW9uLCBJbnNwZWN0
b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpNb3VzZUJ1dHRvbiBtb3VzZUJ1dHRvbiwgSW5zcGVj
dG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6TW91c2VJbnRlcmFjdGlvbiBtb3VzZUludGVyYWN0
aW9uLCBSZWY8SlNPTjo6QXJyYXk+JiYga2V5TW9kaWZpZXJTdHJpbmdzLCBSZWY8UGVyZm9ybU1v
dXNlSW50ZXJhY3Rpb25DYWxsYmFjaz4mJiBjYWxsYmFjaykKIHsKICNpZiAhRU5BQkxFKFdFQkRS
SVZFUl9NT1VTRV9JTlRFUkFDVElPTlMpCiAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURf
RVJST1IoTm90SW1wbGVtZW50ZWQpOwpAQCAtMTY0NCw0OCArMTY0OSw0NCBAQCB2b2lkIFdlYkF1
dG9tYXRpb25TZXNzaW9uOjpwZXJmb3JtTW91c2VJbnRlcmFjdGlvbihjb25zdCBTdHJpbmcmIGhh
bmRsZSwgY29uc3QgSgogICAgIGlmICghcGFnZSkKICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BS
RURFRklORURfRVJST1IoV2luZG93Tm90Rm91bmQpOwogCi0gICAgZmxvYXQgeDsKLSAgICBpZiAo
IXJlcXVlc3RlZFBvc2l0aW9uT2JqZWN0LmdldERvdWJsZSgieCJfcywgeCkpCisgICAgYXV0byB4
ID0gcmVxdWVzdGVkUG9zaXRpb24tPmdldERvdWJsZSgieCJfcyk7CisgICAgaWYgKCF4KQogICAg
ICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhNaXNzaW5n
UGFyYW1ldGVyLCAiVGhlIHBhcmFtZXRlciAneCcgd2FzIG5vdCBmb3VuZC4iKTsKIAotICAgIGZs
b2F0IHk7Ci0gICAgaWYgKCFyZXF1ZXN0ZWRQb3NpdGlvbk9iamVjdC5nZXREb3VibGUoInkiX3Ms
IHkpKQorICAgIGF1dG8gZmxvYXRYID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KCp4KTsKKworICAgIGF1
dG8geSA9IHJlcXVlc3RlZFBvc2l0aW9uLT5nZXREb3VibGUoInkiX3MpOworICAgIGlmICgheSkK
ICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoTWlz
c2luZ1BhcmFtZXRlciwgIlRoZSBwYXJhbWV0ZXIgJ3knIHdhcyBub3QgZm91bmQuIik7CiAKKyAg
ICBhdXRvIGZsb2F0WSA9IHN0YXRpY19jYXN0PGZsb2F0PigqeSk7CisKICAgICBPcHRpb25TZXQ8
V2ViRXZlbnQ6Ok1vZGlmaWVyPiBrZXlNb2RpZmllcnM7Ci0gICAgZm9yIChhdXRvIGl0ID0ga2V5
TW9kaWZpZXJTdHJpbmdzLmJlZ2luKCk7IGl0ICE9IGtleU1vZGlmaWVyU3RyaW5ncy5lbmQoKTsg
KytpdCkgewotICAgICAgICBTdHJpbmcgbW9kaWZpZXJTdHJpbmc7Ci0gICAgICAgIGlmICghaXQt
PmdldCgpLT5hc1N0cmluZyhtb2RpZmllclN0cmluZykpCisgICAgZm9yIChhdXRvIGl0ID0ga2V5
TW9kaWZpZXJTdHJpbmdzLT5iZWdpbigpOyBpdCAhPSBrZXlNb2RpZmllclN0cmluZ3MtPmVuZCgp
OyArK2l0KSB7CisgICAgICAgIGF1dG8gbW9kaWZpZXJTdHJpbmcgPSBpdC0+Z2V0KCkuYXNTdHJp
bmcoKTsKKyAgICAgICAgaWYgKCFtb2RpZmllclN0cmluZykKICAgICAgICAgICAgIEFTWU5DX0ZB
SUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxTKEludmFsaWRQYXJhbWV0ZXIsICJU
aGUgcGFyYW1ldGVyICdtb2RpZmllcnMnIGlzIGludmFsaWQuIik7CiAKICAgICAgICAgYXV0byBw
YXJzZWRNb2RpZmllciA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb25IZWxwZXJzOjpw
YXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6
S2V5TW9kaWZpZXI+KG1vZGlmaWVyU3RyaW5nKTsKICAgICAgICAgaWYgKCFwYXJzZWRNb2RpZmll
cikKICAgICAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRB
SUxTKEludmFsaWRQYXJhbWV0ZXIsICJBIG1vZGlmaWVyIGluIHRoZSAnbW9kaWZpZXJzJyBhcnJh
eSBpcyBpbnZhbGlkLiIpOworCiAgICAgICAgIGtleU1vZGlmaWVycy5hZGQocHJvdG9jb2xNb2Rp
ZmllclRvV2ViRXZlbnRNb2RpZmllcihwYXJzZWRNb2RpZmllci52YWx1ZSgpKSk7CiAgICAgfQog
Ci0gICAgcGFnZS0+Z2V0V2luZG93RnJhbWVXaXRoQ2FsbGJhY2soW3RoaXMsIHByb3RlY3RlZFRo
aXMgPSBtYWtlUmVmKCp0aGlzKSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgcGFnZSA9
IG1ha2VSZWYoKnBhZ2UpLCB4LCB5LCBtb3VzZUludGVyYWN0aW9uU3RyaW5nLCBtb3VzZUJ1dHRv
blN0cmluZywga2V5TW9kaWZpZXJzXShXZWJDb3JlOjpGbG9hdFJlY3Qgd2luZG93RnJhbWUpIG11
dGFibGUgeworICAgIHBhZ2UtPmdldFdpbmRvd0ZyYW1lV2l0aENhbGxiYWNrKFt0aGlzLCBwcm90
ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayks
IHBhZ2UgPSBtYWtlUmVmKCpwYWdlKSwgZmxvYXRYLCBmbG9hdFksIG1vdXNlSW50ZXJhY3Rpb24s
IG1vdXNlQnV0dG9uLCBrZXlNb2RpZmllcnNdKFdlYkNvcmU6OkZsb2F0UmVjdCB3aW5kb3dGcmFt
ZSkgbXV0YWJsZSB7CisgICAgICAgIGZsb2F0WCA9IHN0ZDo6bWluKHN0ZDo6bWF4KDAuMGYsIGZs
b2F0WCksIHdpbmRvd0ZyYW1lLnNpemUoKS53aWR0aCgpKTsKKyAgICAgICAgZmxvYXRZID0gc3Rk
OjptaW4oc3RkOjptYXgoMC4wZiwgZmxvYXRZKSwgd2luZG93RnJhbWUuc2l6ZSgpLmhlaWdodCgp
KTsKIAotICAgICAgICB4ID0gc3RkOjptaW4oc3RkOjptYXgoMC4wZiwgeCksIHdpbmRvd0ZyYW1l
LnNpemUoKS53aWR0aCgpKTsKLSAgICAgICAgeSA9IHN0ZDo6bWluKHN0ZDo6bWF4KDAuMGYsIHkp
LCB3aW5kb3dGcmFtZS5zaXplKCkuaGVpZ2h0KCkpOworICAgICAgICBXZWJDb3JlOjpJbnRQb2lu
dCBsb2NhdGlvbkluVmlld3BvcnQgPSBXZWJDb3JlOjpJbnRQb2ludChzdGF0aWNfY2FzdDxpbnQ+
KGZsb2F0WCksIHN0YXRpY19jYXN0PGludD4oZmxvYXRZKSk7CiAKLSAgICAgICAgV2ViQ29yZTo6
SW50UG9pbnQgbG9jYXRpb25JblZpZXdwb3J0ID0gV2ViQ29yZTo6SW50UG9pbnQoc3RhdGljX2Nh
c3Q8aW50Pih4KSwgc3RhdGljX2Nhc3Q8aW50Pih5KSk7Ci0KLSAgICAgICAgYXV0byBwYXJzZWRJ
bnRlcmFjdGlvbiA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb25IZWxwZXJzOjpwYXJz
ZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6TW91
c2VJbnRlcmFjdGlvbj4obW91c2VJbnRlcmFjdGlvblN0cmluZyk7Ci0gICAgICAgIGlmICghcGFy
c2VkSW50ZXJhY3Rpb24pCi0gICAgICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9F
UlJPUl9BTkRfREVUQUlMUyhJbnZhbGlkUGFyYW1ldGVyLCAiVGhlIHBhcmFtZXRlciAnaW50ZXJh
Y3Rpb24nIGlzIGludmFsaWQuIik7Ci0KLSAgICAgICAgYXV0byBwYXJzZWRCdXR0b24gPSBJbnNw
ZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uSGVscGVyczo6cGFyc2VFbnVtVmFsdWVGcm9tU3Ry
aW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246Ok1vdXNlQnV0dG9uPihtb3VzZUJ1
dHRvblN0cmluZyk7Ci0gICAgICAgIGlmICghcGFyc2VkQnV0dG9uKQotICAgICAgICAgICAgQVNZ
TkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoSW52YWxpZFBhcmFtZXRl
ciwgIlRoZSBwYXJhbWV0ZXIgJ2J1dHRvbicgaXMgaW52YWxpZC4iKTsKLQotICAgICAgICBhdXRv
IG1vdXNlRXZlbnRzRmx1c2hlZENhbGxiYWNrID0gW3Byb3RlY3RlZFRoaXMgPSBXVEZNb3ZlKHBy
b3RlY3RlZFRoaXMpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBwYWdlLCB4LCB5XShP
cHRpb25hbDxBdXRvbWF0aW9uQ29tbWFuZEVycm9yPiBlcnJvcikgeworICAgICAgICBhdXRvIG1v
dXNlRXZlbnRzRmx1c2hlZENhbGxiYWNrID0gW3Byb3RlY3RlZFRoaXMgPSBXVEZNb3ZlKHByb3Rl
Y3RlZFRoaXMpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBwYWdlLCBmbG9hdFgsIGZs
b2F0WV0oT3B0aW9uYWw8QXV0b21hdGlvbkNvbW1hbmRFcnJvcj4gZXJyb3IpIHsKICAgICAgICAg
ICAgIGlmIChlcnJvcikKICAgICAgICAgICAgICAgICBjYWxsYmFjay0+c2VuZEZhaWx1cmUoZXJy
b3IudmFsdWUoKS50b1Byb3RvY29sU3RyaW5nKCkpOwogICAgICAgICAgICAgZWxzZSB7CiAgICAg
ICAgICAgICAgICAgY2FsbGJhY2stPnNlbmRTdWNjZXNzKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1
dG9tYXRpb246OlBvaW50OjpjcmVhdGUoKQotICAgICAgICAgICAgICAgICAgICAuc2V0WCh4KQot
ICAgICAgICAgICAgICAgICAgICAuc2V0WSh5IC0gcGFnZS0+dG9wQ29udGVudEluc2V0KCkpCisg
ICAgICAgICAgICAgICAgICAgIC5zZXRYKGZsb2F0WCkKKyAgICAgICAgICAgICAgICAgICAgLnNl
dFkoZmxvYXRZIC0gcGFnZS0+dG9wQ29udGVudEluc2V0KCkpCiAgICAgICAgICAgICAgICAgICAg
IC5yZWxlYXNlKCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9OwpAQCAtMTY5NSw3ICsxNjk2
LDcgQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6cGVyZm9ybU1vdXNlSW50ZXJhY3Rpb24o
Y29uc3QgU3RyaW5nJiBoYW5kbGUsIGNvbnN0IEoKICAgICAgICAgICAgIGNhbGxiYWNrSW5NYXAo
QVVUT01BVElPTl9DT01NQU5EX0VSUk9SX1dJVEhfTkFNRShUaW1lb3V0KSk7CiAgICAgICAgIGNh
bGxiYWNrSW5NYXAgPSBXVEZNb3ZlKG1vdXNlRXZlbnRzRmx1c2hlZENhbGxiYWNrKTsKIAotICAg
ICAgICBwbGF0Zm9ybVNpbXVsYXRlTW91c2VJbnRlcmFjdGlvbihwYWdlLCBwYXJzZWRJbnRlcmFj
dGlvbi52YWx1ZSgpLCBwYXJzZWRCdXR0b24udmFsdWUoKSwgbG9jYXRpb25JblZpZXdwb3J0LCBr
ZXlNb2RpZmllcnMpOworICAgICAgICBwbGF0Zm9ybVNpbXVsYXRlTW91c2VJbnRlcmFjdGlvbihw
YWdlLCBtb3VzZUludGVyYWN0aW9uLCBtb3VzZUJ1dHRvbiwgbG9jYXRpb25JblZpZXdwb3J0LCBr
ZXlNb2RpZmllcnMpOwogCiAgICAgICAgIC8vIElmIHRoZSBldmVudCBsb2NhdGlvbiB3YXMgcHJl
dmlvdXNseSBjbGlwcGVkIGFuZCBkb2VzIG5vdCBoaXQgdGVzdCBhbnl0aGluZyBpbiB0aGUgd2lu
ZG93LCB0aGVuIGl0IHdpbGwgbm90IGJlIHByb2Nlc3NlZC4KICAgICAgICAgLy8gRm9yIGNvbXBh
dGliaWxpdHkgd2l0aCBwcmUtVzNDIGRyaXZlciBpbXBsZW1lbnRhdGlvbnMsIGRvbid0IG1ha2Ug
dGhpcyBhIGhhcmQgZXJyb3I7IGp1c3QgZG8gbm90aGluZyBzaWxlbnRseS4KQEAgLTE3MDgsNyAr
MTcwOSw3IEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OnBlcmZvcm1Nb3VzZUludGVyYWN0
aW9uKGNvbnN0IFN0cmluZyYgaGFuZGxlLCBjb25zdCBKCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkRS
SVZFUl9NT1VTRV9JTlRFUkFDVElPTlMpCiB9CiAKLXZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246
OnBlcmZvcm1LZXlib2FyZEludGVyYWN0aW9ucyhjb25zdCBTdHJpbmcmIGhhbmRsZSwgY29uc3Qg
SlNPTjo6QXJyYXkmIGludGVyYWN0aW9ucywgUmVmPFBlcmZvcm1LZXlib2FyZEludGVyYWN0aW9u
c0NhbGxiYWNrPiYmIGNhbGxiYWNrKQordm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6cGVyZm9y
bUtleWJvYXJkSW50ZXJhY3Rpb25zKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRp
b246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYgaGFuZGxlLCBSZWY8SlNPTjo6QXJyYXk+JiYgaW50
ZXJhY3Rpb25zLCBSZWY8UGVyZm9ybUtleWJvYXJkSW50ZXJhY3Rpb25zQ2FsbGJhY2s+JiYgY2Fs
bGJhY2spCiB7CiAjaWYgIUVOQUJMRShXRUJEUklWRVJfS0VZQk9BUkRfSU5URVJBQ1RJT05TKQog
ICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SKE5vdEltcGxlbWVudGVkKTsKQEAg
LTE3MTcsMjggKzE3MTgsMjcgQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6cGVyZm9ybUtl
eWJvYXJkSW50ZXJhY3Rpb25zKGNvbnN0IFN0cmluZyYgaGFuZGxlLCBjb24KICAgICBpZiAoIXBh
Z2UpCiAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SKFdpbmRvd05vdEZv
dW5kKTsKIAotICAgIGlmICghaW50ZXJhY3Rpb25zLmxlbmd0aCgpKQorICAgIGlmICghaW50ZXJh
Y3Rpb25zLT5sZW5ndGgoKSkKICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJS
T1JfQU5EX0RFVEFJTFMoSW52YWxpZFBhcmFtZXRlciwgIlRoZSBwYXJhbWV0ZXIgJ2ludGVyYWN0
aW9ucycgd2FzIG5vdCBmb3VuZCBvciBlbXB0eS4iKTsKIAogICAgIC8vIFZhbGlkYXRlIGFsbCBv
ZiB0aGUgcGFyYW1ldGVycyBiZWZvcmUgcGVyZm9ybWluZyBhbnkgaW50ZXJhY3Rpb25zIHdpdGgg
dGhlIGJyb3dzaW5nIGNvbnRleHQgdW5kZXIgdGVzdC4KICAgICBWZWN0b3I8V1RGOjpGdW5jdGlv
bjx2b2lkKCk+PiBhY3Rpb25zVG9QZXJmb3JtOwotICAgIGFjdGlvbnNUb1BlcmZvcm0ucmVzZXJ2
ZUNhcGFjaXR5KGludGVyYWN0aW9ucy5sZW5ndGgoKSk7CisgICAgYWN0aW9uc1RvUGVyZm9ybS5y
ZXNlcnZlQ2FwYWNpdHkoaW50ZXJhY3Rpb25zLT5sZW5ndGgoKSk7CiAKLSAgICBmb3IgKGNvbnN0
IGF1dG8mIGludGVyYWN0aW9uIDogaW50ZXJhY3Rpb25zKSB7Ci0gICAgICAgIFJlZlB0cjxKU09O
OjpPYmplY3Q+IGludGVyYWN0aW9uT2JqZWN0OwotICAgICAgICBpZiAoIWludGVyYWN0aW9uLT5h
c09iamVjdChpbnRlcmFjdGlvbk9iamVjdCkpCisgICAgZm9yIChjb25zdCBhdXRvJiBpbnRlcmFj
dGlvblZhbHVlIDogaW50ZXJhY3Rpb25zLmdldCgpKSB7CisgICAgICAgIGF1dG8gaW50ZXJhY3Rp
b25PYmplY3QgPSBpbnRlcmFjdGlvblZhbHVlLT5hc09iamVjdCgpOworICAgICAgICBpZiAoIWlu
dGVyYWN0aW9uT2JqZWN0KQogICAgICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURf
RVJST1JfQU5EX0RFVEFJTFMoSW52YWxpZFBhcmFtZXRlciwgIkFuIGludGVyYWN0aW9uIGluIHRo
ZSAnaW50ZXJhY3Rpb25zJyBwYXJhbWV0ZXIgd2FzIGludmFsaWQuIik7CiAKLSAgICAgICAgU3Ry
aW5nIGludGVyYWN0aW9uVHlwZVN0cmluZzsKLSAgICAgICAgaWYgKCFpbnRlcmFjdGlvbk9iamVj
dC0+Z2V0U3RyaW5nKCJ0eXBlIl9zLCBpbnRlcmFjdGlvblR5cGVTdHJpbmcpKQorICAgICAgICBh
dXRvIGludGVyYWN0aW9uVHlwZVN0cmluZyA9IGludGVyYWN0aW9uT2JqZWN0LT5nZXRTdHJpbmco
InR5cGUiX3MpOworICAgICAgICBpZiAoIWludGVyYWN0aW9uVHlwZVN0cmluZykKICAgICAgICAg
ICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxTKEludmFsaWRQ
YXJhbWV0ZXIsICJBbiBpbnRlcmFjdGlvbiBpbiB0aGUgJ2ludGVyYWN0aW9ucycgcGFyYW1ldGVy
IGlzIG1pc3NpbmcgdGhlICd0eXBlJyBrZXkuIik7CiAgICAgICAgIGF1dG8gaW50ZXJhY3Rpb25U
eXBlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbkhlbHBlcnM6OnBhcnNlRW51bVZh
bHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpLZXlib2FyZElu
dGVyYWN0aW9uVHlwZT4oaW50ZXJhY3Rpb25UeXBlU3RyaW5nKTsKICAgICAgICAgaWYgKCFpbnRl
cmFjdGlvblR5cGUpCiAgICAgICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJP
Ul9BTkRfREVUQUlMUyhJbnZhbGlkUGFyYW1ldGVyLCAiQW4gaW50ZXJhY3Rpb24gaW4gdGhlICdp
bnRlcmFjdGlvbnMnIHBhcmFtZXRlciBoYXMgYW4gaW52YWxpZCAndHlwZScga2V5LiIpOwogCi0g
ICAgICAgIFN0cmluZyB2aXJ0dWFsS2V5U3RyaW5nOwotICAgICAgICBib29sIGZvdW5kVmlydHVh
bEtleSA9IGludGVyYWN0aW9uT2JqZWN0LT5nZXRTdHJpbmcoImtleSJfcywgdmlydHVhbEtleVN0
cmluZyk7Ci0gICAgICAgIGlmIChmb3VuZFZpcnR1YWxLZXkpIHsKKyAgICAgICAgYXV0byB2aXJ0
dWFsS2V5U3RyaW5nID0gaW50ZXJhY3Rpb25PYmplY3QtPmdldFN0cmluZygia2V5Il9zKTsKKyAg
ICAgICAgaWYgKCEhdmlydHVhbEtleVN0cmluZykgewogICAgICAgICAgICAgT3B0aW9uYWw8Vmly
dHVhbEtleT4gdmlydHVhbEtleSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb25IZWxw
ZXJzOjpwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21h
dGlvbjo6VmlydHVhbEtleT4odmlydHVhbEtleVN0cmluZyk7CiAgICAgICAgICAgICBpZiAoIXZp
cnR1YWxLZXkpCiAgICAgICAgICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJS
T1JfQU5EX0RFVEFJTFMoSW52YWxpZFBhcmFtZXRlciwgIkFuIGludGVyYWN0aW9uIGluIHRoZSAn
aW50ZXJhY3Rpb25zJyBwYXJhbWV0ZXIgaGFzIGFuIGludmFsaWQgJ2tleScgdmFsdWUuIik7CkBA
IC0xNzQ4LDkgKzE3NDgsOCBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpwZXJmb3JtS2V5
Ym9hcmRJbnRlcmFjdGlvbnMoY29uc3QgU3RyaW5nJiBoYW5kbGUsIGNvbgogICAgICAgICAgICAg
fSk7CiAgICAgICAgIH0KIAotICAgICAgICBTdHJpbmcga2V5U2VxdWVuY2U7Ci0gICAgICAgIGJv
b2wgZm91bmRLZXlTZXF1ZW5jZSA9IGludGVyYWN0aW9uT2JqZWN0LT5nZXRTdHJpbmcoInRleHQi
X3MsIGtleVNlcXVlbmNlKTsKLSAgICAgICAgaWYgKGZvdW5kS2V5U2VxdWVuY2UpIHsKKyAgICAg
ICAgYXV0byBrZXlTZXF1ZW5jZSA9IGludGVyYWN0aW9uT2JqZWN0LT5nZXRTdHJpbmcoInRleHQi
X3MpOworICAgICAgICBpZiAoISFrZXlTZXF1ZW5jZSkgewogICAgICAgICAgICAgc3dpdGNoIChp
bnRlcmFjdGlvblR5cGUudmFsdWUoKSkgewogICAgICAgICAgICAgY2FzZSBJbnNwZWN0b3I6OlBy
b3RvY29sOjpBdXRvbWF0aW9uOjpLZXlib2FyZEludGVyYWN0aW9uVHlwZTo6S2V5UHJlc3M6CiAg
ICAgICAgICAgICBjYXNlIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OktleWJvYXJk
SW50ZXJhY3Rpb25UeXBlOjpLZXlSZWxlYXNlOgpAQCAtMTc2NSw3ICsxNzY0LDcgQEAgdm9pZCBX
ZWJBdXRvbWF0aW9uU2Vzc2lvbjo6cGVyZm9ybUtleWJvYXJkSW50ZXJhY3Rpb25zKGNvbnN0IFN0
cmluZyYgaGFuZGxlLCBjb24KICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIGlm
ICghZm91bmRWaXJ0dWFsS2V5ICYmICFmb3VuZEtleVNlcXVlbmNlKQorICAgICAgICBpZiAoIXZp
cnR1YWxLZXlTdHJpbmcgJiYgIWtleVNlcXVlbmNlKQogICAgICAgICAgICAgQVNZTkNfRkFJTF9X
SVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoTWlzc2luZ1BhcmFtZXRlciwgIkFuIGlu
dGVyYWN0aW9uIGluIHRoZSAnaW50ZXJhY3Rpb25zJyBwYXJhbWV0ZXIgaXMgbWlzc2luZyBib3Ro
ICdrZXknIGFuZCAndGV4dCcuIE9uZSBtdXN0IGJlIHByb3ZpZGVkLiIpOwogICAgIH0KIApAQCAt
MTgwOCw3ICsxODA3LDcgQEAgc3RhdGljIFNpbXVsYXRlZElucHV0U291cmNlVHlwZSBzaW11bGF0
ZWRJbnB1dFNvdXJjZVR5cGVGcm9tUHJvdG9jb2xTb3VyY2VUeXBlKEkKIH0KICNlbmRpZiAvLyBF
TkFCTEUoV0VCRFJJVkVSX0FDVElPTlNfQVBJKQogCi12b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9u
OjpwZXJmb3JtSW50ZXJhY3Rpb25TZXF1ZW5jZShjb25zdCBTdHJpbmcmIGhhbmRsZSwgY29uc3Qg
U3RyaW5nKiBvcHRpb25hbEZyYW1lSGFuZGxlLCBjb25zdCBKU09OOjpBcnJheSYgaW5wdXRTb3Vy
Y2VzLCBjb25zdCBKU09OOjpBcnJheSYgc3RlcHMsIFJlZjxXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6
UGVyZm9ybUludGVyYWN0aW9uU2VxdWVuY2VDYWxsYmFjaz4mJiBjYWxsYmFjaykKK3ZvaWQgV2Vi
QXV0b21hdGlvblNlc3Npb246OnBlcmZvcm1JbnRlcmFjdGlvblNlcXVlbmNlKGNvbnN0IEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYgaGFuZGxl
LCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpGcmFtZUhhbmRsZSYgZnJh
bWVIYW5kbGUsIFJlZjxKU09OOjpBcnJheT4mJiBpbnB1dFNvdXJjZXMsIFJlZjxKU09OOjpBcnJh
eT4mJiBzdGVwcywgUmVmPFdlYkF1dG9tYXRpb25TZXNzaW9uOjpQZXJmb3JtSW50ZXJhY3Rpb25T
ZXF1ZW5jZUNhbGxiYWNrPiYmIGNhbGxiYWNrKQogewogICAgIC8vIFRoaXMgY29tbWFuZCBpbXBs
ZW1lbnRzIFdlYktpdCBzdXBwb3J0IGZvciDCpzE3LjUgUGVyZm9ybSBBY3Rpb25zLgogCkBAIC0x
ODIwLDcgKzE4MTksNyBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpwZXJmb3JtSW50ZXJh
Y3Rpb25TZXF1ZW5jZShjb25zdCBTdHJpbmcmIGhhbmRsZSwgY29ucwogICAgICAgICBBU1lOQ19G
QUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUihXaW5kb3dOb3RGb3VuZCk7CiAKICAgICBib29sIGZy
YW1lTm90Rm91bmQgPSBmYWxzZTsKLSAgICBhdXRvIGZyYW1lSUQgPSB3ZWJGcmFtZUlERm9ySGFu
ZGxlKG9wdGlvbmFsRnJhbWVIYW5kbGUgPyAqb3B0aW9uYWxGcmFtZUhhbmRsZSA6IGVtcHR5U3Ry
aW5nKCksIGZyYW1lTm90Rm91bmQpOworICAgIGF1dG8gZnJhbWVJRCA9IHdlYkZyYW1lSURGb3JI
YW5kbGUoZnJhbWVIYW5kbGUsIGZyYW1lTm90Rm91bmQpOwogICAgIGlmIChmcmFtZU5vdEZvdW5k
KQogICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUihGcmFtZU5vdEZvdW5k
KTsKIApAQCAtMTgyOSwyMCArMTgyOCwyMCBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpw
ZXJmb3JtSW50ZXJhY3Rpb25TZXF1ZW5jZShjb25zdCBTdHJpbmcmIGhhbmRsZSwgY29ucwogCiAg
ICAgLy8gUGFyc2UgYW5kIHZhbGlkYXRlIEF1dG9tYXRpb24gcHJvdG9jb2wgYXJndW1lbnRzLiBC
eSB0aGlzIHBvaW50LCB0aGUgZHJpdmVyIGhhcwogICAgIC8vIGFscmVhZHkgcGVyZm9ybWVkIHRo
ZSBzdGVwcyBpbiDCpzE3LjMgUHJvY2Vzc2luZyBBY3Rpb25zIFJlcXVlc3RzLgotICAgIGlmICgh
aW5wdXRTb3VyY2VzLmxlbmd0aCgpKQorICAgIGlmICghaW5wdXRTb3VyY2VzLT5sZW5ndGgoKSkK
ICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoSW52
YWxpZFBhcmFtZXRlciwgIlRoZSBwYXJhbWV0ZXIgJ2lucHV0U291cmNlcycgd2FzIG5vdCBmb3Vu
ZCBvciBlbXB0eS4iKTsKIAotICAgIGZvciAoY29uc3QgYXV0byYgaW5wdXRTb3VyY2UgOiBpbnB1
dFNvdXJjZXMpIHsKLSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gaW5wdXRTb3VyY2VPYmpl
Y3Q7Ci0gICAgICAgIGlmICghaW5wdXRTb3VyY2UtPmFzT2JqZWN0KGlucHV0U291cmNlT2JqZWN0
KSkKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGlucHV0U291cmNlVmFsdWUgOiBpbnB1dFNvdXJjZXMu
Z2V0KCkpIHsKKyAgICAgICAgYXV0byBpbnB1dFNvdXJjZU9iamVjdCA9IGlucHV0U291cmNlVmFs
dWUtPmFzT2JqZWN0KCk7CisgICAgICAgIGlmICghaW5wdXRTb3VyY2VPYmplY3QpCiAgICAgICAg
ICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhJbnZhbGlk
UGFyYW1ldGVyLCAiQW4gaW5wdXQgc291cmNlIGluIHRoZSAnaW5wdXRTb3VyY2VzJyBwYXJhbWV0
ZXIgd2FzIGludmFsaWQuIik7Ci0gICAgICAgIAotICAgICAgICBTdHJpbmcgc291cmNlSWQ7Ci0g
ICAgICAgIGlmICghaW5wdXRTb3VyY2VPYmplY3QtPmdldFN0cmluZygic291cmNlSWQiX3MsIHNv
dXJjZUlkKSkKKworICAgICAgICBhdXRvIHNvdXJjZUlkID0gaW5wdXRTb3VyY2VPYmplY3QtPmdl
dFN0cmluZygic291cmNlSWQiX3MpOworICAgICAgICBpZiAoIXNvdXJjZUlkKQogICAgICAgICAg
ICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoSW52YWxpZFBh
cmFtZXRlciwgIkFuIGlucHV0IHNvdXJjZSBpbiB0aGUgJ2lucHV0U291cmNlcycgcGFyYW1ldGVy
IGlzIG1pc3NpbmcgYSAnc291cmNlSWQnLiIpOwogCi0gICAgICAgIFN0cmluZyBzb3VyY2VUeXBl
OwotICAgICAgICBpZiAoIWlucHV0U291cmNlT2JqZWN0LT5nZXRTdHJpbmcoInNvdXJjZVR5cGUi
X3MsIHNvdXJjZVR5cGUpKQorICAgICAgICBhdXRvIHNvdXJjZVR5cGUgPSBpbnB1dFNvdXJjZU9i
amVjdC0+Z2V0U3RyaW5nKCJzb3VyY2VUeXBlIl9zKTsKKyAgICAgICAgaWYgKCFzb3VyY2VUeXBl
KQogICAgICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJ
TFMoSW52YWxpZFBhcmFtZXRlciwgIkFuIGlucHV0IHNvdXJjZSBpbiB0aGUgJ2lucHV0U291cmNl
cycgcGFyYW1ldGVyIGlzIG1pc3NpbmcgYSAnc291cmNlVHlwZScuIik7CiAKICAgICAgICAgYXV0
byBwYXJzZWRJbnB1dFNvdXJjZVR5cGUgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9u
SGVscGVyczo6cGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1
dG9tYXRpb246OklucHV0U291cmNlVHlwZT4oc291cmNlVHlwZSk7CkBAIC0xODgxLDI4ICsxODgw
LDI4IEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OnBlcmZvcm1JbnRlcmFjdGlvblNlcXVl
bmNlKGNvbnN0IFN0cmluZyYgaGFuZGxlLCBjb25zCiAKICAgICBWZWN0b3I8U2ltdWxhdGVkSW5w
dXRLZXlGcmFtZT4ga2V5RnJhbWVzOwogCi0gICAgaWYgKCFzdGVwcy5sZW5ndGgoKSkKKyAgICBp
ZiAoIXN0ZXBzLT5sZW5ndGgoKSkKICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURf
RVJST1JfQU5EX0RFVEFJTFMoSW52YWxpZFBhcmFtZXRlciwgIlRoZSBwYXJhbWV0ZXIgJ3N0ZXBz
JyB3YXMgbm90IGZvdW5kIG9yIGVtcHR5LiIpOwogCi0gICAgZm9yIChjb25zdCBhdXRvJiBzdGVw
IDogc3RlcHMpIHsKLSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gc3RlcE9iamVjdDsKLSAg
ICAgICAgaWYgKCFzdGVwLT5hc09iamVjdChzdGVwT2JqZWN0KSkKKyAgICBmb3IgKGNvbnN0IGF1
dG8mIHN0ZXBWYWx1ZSA6IHN0ZXBzLmdldCgpKSB7CisgICAgICAgIGF1dG8gc3RlcE9iamVjdCA9
IHN0ZXBWYWx1ZS0+YXNPYmplY3QoKTsKKyAgICAgICAgaWYgKCFzdGVwT2JqZWN0KQogICAgICAg
ICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoSW52YWxp
ZFBhcmFtZXRlciwgIkEgc3RlcCBpbiB0aGUgJ3N0ZXBzJyBwYXJhbWV0ZXIgd2FzIG5vdCBhbiBv
YmplY3QuIik7CiAKLSAgICAgICAgUmVmUHRyPEpTT046OkFycmF5PiBzdGVwU3RhdGVzOwotICAg
ICAgICBpZiAoIXN0ZXBPYmplY3QtPmdldEFycmF5KCJzdGF0ZXMiX3MsIHN0ZXBTdGF0ZXMpKQor
ICAgICAgICBhdXRvIHN0ZXBTdGF0ZXMgPSBzdGVwT2JqZWN0LT5nZXRBcnJheSgic3RhdGVzIl9z
KTsKKyAgICAgICAgaWYgKCFzdGVwU3RhdGVzKQogICAgICAgICAgICAgQVNZTkNfRkFJTF9XSVRI
X1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoSW52YWxpZFBhcmFtZXRlciwgIkEgc3RlcCBp
cyBtaXNzaW5nIHRoZSAnc3RhdGVzJyBwcm9wZXJ0eS4iKTsKIAogICAgICAgICBWZWN0b3I8U2lt
dWxhdGVkSW5wdXRLZXlGcmFtZTo6U3RhdGVFbnRyeT4gZW50cmllczsKICAgICAgICAgZW50cmll
cy5yZXNlcnZlQ2FwYWNpdHkoc3RlcFN0YXRlcy0+bGVuZ3RoKCkpOwogCi0gICAgICAgIGZvciAo
Y29uc3QgYXV0byYgc3RhdGUgOiAqc3RlcFN0YXRlcykgewotICAgICAgICAgICAgUmVmUHRyPEpT
T046Ok9iamVjdD4gc3RhdGVPYmplY3Q7Ci0gICAgICAgICAgICBpZiAoIXN0YXRlLT5hc09iamVj
dChzdGF0ZU9iamVjdCkpCisgICAgICAgIGZvciAoY29uc3QgYXV0byYgc3RhdGVWYWx1ZSA6ICpz
dGVwU3RhdGVzKSB7CisgICAgICAgICAgICBhdXRvIHN0YXRlT2JqZWN0ID0gc3RhdGVWYWx1ZS0+
YXNPYmplY3QoKTsKKyAgICAgICAgICAgIGlmICghc3RhdGVPYmplY3QpCiAgICAgICAgICAgICAg
ICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoSW52YWxpZFBh
cmFtZXRlciwgIkVuY291bnRlcmVkIGEgbm9uLW9iamVjdCBzdGVwIHN0YXRlLiIpOwogCi0gICAg
ICAgICAgICBTdHJpbmcgc291cmNlSWQ7Ci0gICAgICAgICAgICBpZiAoIXN0YXRlT2JqZWN0LT5n
ZXRTdHJpbmcoInNvdXJjZUlkIl9zLCBzb3VyY2VJZCkpCisgICAgICAgICAgICBhdXRvIHNvdXJj
ZUlkID0gc3RhdGVPYmplY3QtPmdldFN0cmluZygic291cmNlSWQiX3MpOworICAgICAgICAgICAg
aWYgKCFzb3VyY2VJZCkKICAgICAgICAgICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5F
RF9FUlJPUl9BTkRfREVUQUlMUyhJbnZhbGlkUGFyYW1ldGVyLCAiU3RlcCBzdGF0ZSBsYWNrcyBy
ZXF1aXJlZCAnc291cmNlSWQnIHByb3BlcnR5LiIpOwogCiAgICAgICAgICAgICBpZiAoIXNvdXJj
ZUlkVG9JbnB1dFNvdXJjZU1hcC5jb250YWlucyhzb3VyY2VJZCkpCkBAIC0xOTExLDE3ICsxOTEw
LDE2IEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OnBlcmZvcm1JbnRlcmFjdGlvblNlcXVl
bmNlKGNvbnN0IFN0cmluZyYgaGFuZGxlLCBjb25zCiAgICAgICAgICAgICBTaW11bGF0ZWRJbnB1
dFNvdXJjZSYgaW5wdXRTb3VyY2UgPSAqc291cmNlSWRUb0lucHV0U291cmNlTWFwLmdldChzb3Vy
Y2VJZCk7CiAgICAgICAgICAgICBTaW11bGF0ZWRJbnB1dFNvdXJjZVN0YXRlIHNvdXJjZVN0YXRl
IHsgfTsKIAotICAgICAgICAgICAgU3RyaW5nIHByZXNzZWRDaGFyS2V5U3RyaW5nOwotICAgICAg
ICAgICAgaWYgKHN0YXRlT2JqZWN0LT5nZXRTdHJpbmcoInByZXNzZWRDaGFyS2V5Il9zLCBwcmVz
c2VkQ2hhcktleVN0cmluZykpCisgICAgICAgICAgICBhdXRvIHByZXNzZWRDaGFyS2V5U3RyaW5n
ID0gc3RhdGVPYmplY3QtPmdldFN0cmluZygicHJlc3NlZENoYXJLZXkiX3MpOworICAgICAgICAg
ICAgaWYgKCEhcHJlc3NlZENoYXJLZXlTdHJpbmcpCiAgICAgICAgICAgICAgICAgc291cmNlU3Rh
dGUucHJlc3NlZENoYXJLZXkgPSBwcmVzc2VkQ2hhcktleVN0cmluZy5jaGFyYWN0ZXJBdCgwKTsK
IAotICAgICAgICAgICAgUmVmUHRyPEpTT046OkFycmF5PiBwcmVzc2VkVmlydHVhbEtleXNBcnJh
eTsKLSAgICAgICAgICAgIGlmIChzdGF0ZU9iamVjdC0+Z2V0QXJyYXkoInByZXNzZWRWaXJ0dWFs
S2V5cyJfcywgcHJlc3NlZFZpcnR1YWxLZXlzQXJyYXkpKSB7CisgICAgICAgICAgICBpZiAoYXV0
byBwcmVzc2VkVmlydHVhbEtleXNBcnJheSA9IHN0YXRlT2JqZWN0LT5nZXRBcnJheSgicHJlc3Nl
ZFZpcnR1YWxLZXlzIl9zKSkgewogICAgICAgICAgICAgICAgIFZpcnR1YWxLZXlTZXQgcHJlc3Nl
ZFZpcnR1YWxLZXlzIHsgfTsKIAogICAgICAgICAgICAgICAgIGZvciAoYXV0byBpdCA9IHByZXNz
ZWRWaXJ0dWFsS2V5c0FycmF5LT5iZWdpbigpOyBpdCAhPSBwcmVzc2VkVmlydHVhbEtleXNBcnJh
eS0+ZW5kKCk7ICsraXQpIHsKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHByZXNzZWRWaXJ0
dWFsS2V5U3RyaW5nOwotICAgICAgICAgICAgICAgICAgICBpZiAoISgqaXQpLT5hc1N0cmluZyhw
cmVzc2VkVmlydHVhbEtleVN0cmluZykpCisgICAgICAgICAgICAgICAgICAgIGF1dG8gcHJlc3Nl
ZFZpcnR1YWxLZXlTdHJpbmcgPSAoKml0KS0+YXNTdHJpbmcoKTsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKCFwcmVzc2VkVmlydHVhbEtleVN0cmluZykKICAgICAgICAgICAgICAgICAgICAgICAg
IEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxTKEludmFsaWRQYXJh
bWV0ZXIsICJFbmNvdW50ZXJlZCBhIG5vbi1zdHJpbmcgdmlydHVhbCBrZXkgdmFsdWUuIik7CiAK
ICAgICAgICAgICAgICAgICAgICAgT3B0aW9uYWw8VmlydHVhbEtleT4gcGFyc2VkVmlydHVhbEtl
eSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb25IZWxwZXJzOjpwYXJzZUVudW1WYWx1
ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6VmlydHVhbEtleT4o
cHJlc3NlZFZpcnR1YWxLZXlTdHJpbmcpOwpAQCAtMTkzNCwzMyArMTkzMiwzMiBAQCB2b2lkIFdl
YkF1dG9tYXRpb25TZXNzaW9uOjpwZXJmb3JtSW50ZXJhY3Rpb25TZXF1ZW5jZShjb25zdCBTdHJp
bmcmIGhhbmRsZSwgY29ucwogICAgICAgICAgICAgICAgIHNvdXJjZVN0YXRlLnByZXNzZWRWaXJ0
dWFsS2V5cyA9IHByZXNzZWRWaXJ0dWFsS2V5czsKICAgICAgICAgICAgIH0KIAotICAgICAgICAg
ICAgU3RyaW5nIHByZXNzZWRCdXR0b25TdHJpbmc7Ci0gICAgICAgICAgICBpZiAoc3RhdGVPYmpl
Y3QtPmdldFN0cmluZygicHJlc3NlZEJ1dHRvbiJfcywgcHJlc3NlZEJ1dHRvblN0cmluZykpIHsK
KyAgICAgICAgICAgIGF1dG8gcHJlc3NlZEJ1dHRvblN0cmluZyA9IHN0YXRlT2JqZWN0LT5nZXRT
dHJpbmcoInByZXNzZWRCdXR0b24iX3MpOworICAgICAgICAgICAgaWYgKCEhcHJlc3NlZEJ1dHRv
blN0cmluZykgewogICAgICAgICAgICAgICAgIGF1dG8gcHJvdG9jb2xCdXR0b24gPSBJbnNwZWN0
b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uSGVscGVyczo6cGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5n
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246Ok1vdXNlQnV0dG9uPihwcmVzc2VkQnV0
dG9uU3RyaW5nKTsKICAgICAgICAgICAgICAgICBzb3VyY2VTdGF0ZS5wcmVzc2VkTW91c2VCdXR0
b24gPSBwcm90b2NvbEJ1dHRvbi52YWx1ZU9yKE1vdXNlQnV0dG9uOjpOb25lKTsKICAgICAgICAg
ICAgIH0KIAotICAgICAgICAgICAgU3RyaW5nIG9yaWdpblN0cmluZzsKLSAgICAgICAgICAgIGlm
IChzdGF0ZU9iamVjdC0+Z2V0U3RyaW5nKCJvcmlnaW4iX3MsIG9yaWdpblN0cmluZykpCisgICAg
ICAgICAgICBhdXRvIG9yaWdpblN0cmluZyA9IHN0YXRlT2JqZWN0LT5nZXRTdHJpbmcoIm9yaWdp
biJfcyk7CisgICAgICAgICAgICBpZiAoISFvcmlnaW5TdHJpbmcpCiAgICAgICAgICAgICAgICAg
c291cmNlU3RhdGUub3JpZ2luID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbkhlbHBl
cnM6OnBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0
aW9uOjpNb3VzZU1vdmVPcmlnaW4+KG9yaWdpblN0cmluZyk7CiAKICAgICAgICAgICAgIGlmIChz
b3VyY2VTdGF0ZS5vcmlnaW4gJiYgc291cmNlU3RhdGUub3JpZ2luLnZhbHVlKCkgPT0gSW5zcGVj
dG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6TW91c2VNb3ZlT3JpZ2luOjpFbGVtZW50KSB7Ci0g
ICAgICAgICAgICAgICAgU3RyaW5nIG5vZGVIYW5kbGVTdHJpbmc7Ci0gICAgICAgICAgICAgICAg
aWYgKCFzdGF0ZU9iamVjdC0+Z2V0U3RyaW5nKCJub2RlSGFuZGxlIl9zLCBub2RlSGFuZGxlU3Ry
aW5nKSkKKyAgICAgICAgICAgICAgICBhdXRvIG5vZGVIYW5kbGVTdHJpbmcgPSBzdGF0ZU9iamVj
dC0+Z2V0U3RyaW5nKCJub2RlSGFuZGxlIl9zKTsKKyAgICAgICAgICAgICAgICBpZiAoIW5vZGVI
YW5kbGVTdHJpbmcpCiAgICAgICAgICAgICAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJ
TkVEX0VSUk9SX0FORF9ERVRBSUxTKEludmFsaWRQYXJhbWV0ZXIsICJOb2RlIGhhbmRsZSBub3Qg
cHJvdmlkZWQgZm9yICdFbGVtZW50JyBvcmlnaW4iKTsKICAgICAgICAgICAgICAgICBzb3VyY2VT
dGF0ZS5ub2RlSGFuZGxlID0gbm9kZUhhbmRsZVN0cmluZzsKICAgICAgICAgICAgIH0KIAotICAg
ICAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gbG9jYXRpb25PYmplY3Q7Ci0gICAgICAgICAg
ICBpZiAoc3RhdGVPYmplY3QtPmdldE9iamVjdCgibG9jYXRpb24iX3MsIGxvY2F0aW9uT2JqZWN0
KSkgewotICAgICAgICAgICAgICAgIGludCB4ID0gMCwgeSA9IDA7Ci0gICAgICAgICAgICAgICAg
aWYgKGxvY2F0aW9uT2JqZWN0LT5nZXRJbnRlZ2VyKCJ4Il9zLCB4KSAmJiBsb2NhdGlvbk9iamVj
dC0+Z2V0SW50ZWdlcigieSJfcywgeSkpCi0gICAgICAgICAgICAgICAgICAgIHNvdXJjZVN0YXRl
LmxvY2F0aW9uID0gV2ViQ29yZTo6SW50UG9pbnQoeCwgeSk7CisgICAgICAgICAgICBpZiAoYXV0
byBsb2NhdGlvbk9iamVjdCA9IHN0YXRlT2JqZWN0LT5nZXRPYmplY3QoImxvY2F0aW9uIl9zKSkg
eworICAgICAgICAgICAgICAgIGF1dG8geCA9IGxvY2F0aW9uT2JqZWN0LT5nZXRJbnRlZ2VyKCJ4
Il9zKTsKKyAgICAgICAgICAgICAgICBhdXRvIHkgPSBsb2NhdGlvbk9iamVjdC0+Z2V0SW50ZWdl
cigieSJfcyk7CisgICAgICAgICAgICAgICAgaWYgKHggJiYgeSkKKyAgICAgICAgICAgICAgICAg
ICAgc291cmNlU3RhdGUubG9jYXRpb24gPSBXZWJDb3JlOjpJbnRQb2ludCgqeCwgKnkpOwogICAg
ICAgICAgICAgfQogCi0gICAgICAgICAgICBpbnQgcGFyc2VkRHVyYXRpb247Ci0gICAgICAgICAg
ICBpZiAoc3RhdGVPYmplY3QtPmdldEludGVnZXIoImR1cmF0aW9uIl9zLCBwYXJzZWREdXJhdGlv
bikpCi0gICAgICAgICAgICAgICAgc291cmNlU3RhdGUuZHVyYXRpb24gPSBTZWNvbmRzOjpmcm9t
TWlsbGlzZWNvbmRzKHBhcnNlZER1cmF0aW9uKTsKKyAgICAgICAgICAgIGlmIChhdXRvIGR1cmF0
aW9uID0gc3RhdGVPYmplY3QtPmdldEludGVnZXIoImR1cmF0aW9uIl9zKSkKKyAgICAgICAgICAg
ICAgICBzb3VyY2VTdGF0ZS5kdXJhdGlvbiA9IFNlY29uZHM6OmZyb21NaWxsaXNlY29uZHMoKmR1
cmF0aW9uKTsKIAogICAgICAgICAgICAgZW50cmllcy51bmNoZWNrZWRBcHBlbmQoc3RkOjpwYWly
PFNpbXVsYXRlZElucHV0U291cmNlJiwgU2ltdWxhdGVkSW5wdXRTb3VyY2VTdGF0ZT4geyBpbnB1
dFNvdXJjZSwgc291cmNlU3RhdGUgfSk7CiAgICAgICAgIH0KQEAgLTE5ODQsNyArMTk4MSw3IEBA
IHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OnBlcmZvcm1JbnRlcmFjdGlvblNlcXVlbmNlKGNv
bnN0IFN0cmluZyYgaGFuZGxlLCBjb25zCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkRSSVZFUl9BQ1RJ
T05TX0FQSSkKIH0KIAotdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6Y2FuY2VsSW50ZXJhY3Rp
b25TZXF1ZW5jZShjb25zdCBTdHJpbmcmIGhhbmRsZSwgY29uc3QgU3RyaW5nKiBvcHRpb25hbEZy
YW1lSGFuZGxlLCBSZWY8Q2FuY2VsSW50ZXJhY3Rpb25TZXF1ZW5jZUNhbGxiYWNrPiYmIGNhbGxi
YWNrKQordm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6Y2FuY2VsSW50ZXJhY3Rpb25TZXF1ZW5j
ZShjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRI
YW5kbGUmIGhhbmRsZSwgY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6RnJh
bWVIYW5kbGUmIGZyYW1lSGFuZGxlLCBSZWY8Q2FuY2VsSW50ZXJhY3Rpb25TZXF1ZW5jZUNhbGxi
YWNrPiYmIGNhbGxiYWNrKQogewogICAgIC8vIFRoaXMgY29tbWFuZCBpbXBsZW1lbnRzIFdlYktp
dCBzdXBwb3J0IGZvciDCpzE3LjYgUmVsZWFzZSBBY3Rpb25zLgogCkBAIC0xOTk2LDcgKzE5OTMs
NyBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpjYW5jZWxJbnRlcmFjdGlvblNlcXVlbmNl
KGNvbnN0IFN0cmluZyYgaGFuZGxlLCBjb25zdAogICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJF
REVGSU5FRF9FUlJPUihXaW5kb3dOb3RGb3VuZCk7CiAKICAgICBib29sIGZyYW1lTm90Rm91bmQg
PSBmYWxzZTsKLSAgICBhdXRvIGZyYW1lSUQgPSB3ZWJGcmFtZUlERm9ySGFuZGxlKG9wdGlvbmFs
RnJhbWVIYW5kbGUgPyAqb3B0aW9uYWxGcmFtZUhhbmRsZSA6IGVtcHR5U3RyaW5nKCksIGZyYW1l
Tm90Rm91bmQpOworICAgIGF1dG8gZnJhbWVJRCA9IHdlYkZyYW1lSURGb3JIYW5kbGUoZnJhbWVI
YW5kbGUsIGZyYW1lTm90Rm91bmQpOwogICAgIGlmIChmcmFtZU5vdEZvdW5kKQogICAgICAgICBB
U1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUihGcmFtZU5vdEZvdW5kKTsKIApAQCAtMjAx
MywxOSArMjAxMCwxOCBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpjYW5jZWxJbnRlcmFj
dGlvblNlcXVlbmNlKGNvbnN0IFN0cmluZyYgaGFuZGxlLCBjb25zdAogI2VuZGlmIC8vIEVOQUJM
RShXRUJEUklWRVJfQUNUSU9OU19BUEkpCiB9CiAKLXZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246
OnRha2VTY3JlZW5zaG90KGNvbnN0IFN0cmluZyYgaGFuZGxlLCBjb25zdCBTdHJpbmcqIG9wdGlv
bmFsRnJhbWVIYW5kbGUsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxOb2RlSGFuZGxlLCBjb25zdCBi
b29sKiBvcHRpb25hbFNjcm9sbEludG9WaWV3SWZOZWVkZWQsIGNvbnN0IGJvb2wqIG9wdGlvbmFs
Q2xpcFRvVmlld3BvcnQsIFJlZjxUYWtlU2NyZWVuc2hvdENhbGxiYWNrPiYmIGNhbGxiYWNrKQor
dm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6dGFrZVNjcmVlbnNob3QoY29uc3QgSW5zcGVjdG9y
OjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJiBoYW5kbGUsIGNv
bnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkZyYW1lSGFuZGxlJiBmcmFtZUhh
bmRsZSwgY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6Tm9kZUhhbmRsZSYg
bm9kZUhhbmRsZSwgT3B0aW9uYWw8Ym9vbD4mJiBvcHRpb25hbFNjcm9sbEludG9WaWV3SWZOZWVk
ZWQsIE9wdGlvbmFsPGJvb2w+JiYgb3B0aW9uYWxDbGlwVG9WaWV3cG9ydCwgUmVmPFRha2VTY3Jl
ZW5zaG90Q2FsbGJhY2s+JiYgY2FsbGJhY2spCiB7CiAgICAgV2ViUGFnZVByb3h5KiBwYWdlID0g
d2ViUGFnZVByb3h5Rm9ySGFuZGxlKGhhbmRsZSk7CiAgICAgaWYgKCFwYWdlKQogICAgICAgICBB
U1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUihXaW5kb3dOb3RGb3VuZCk7CiAKICAgICBi
b29sIGZyYW1lTm90Rm91bmQgPSBmYWxzZTsKLSAgICBhdXRvIGZyYW1lSUQgPSB3ZWJGcmFtZUlE
Rm9ySGFuZGxlKG9wdGlvbmFsRnJhbWVIYW5kbGUgPyAqb3B0aW9uYWxGcmFtZUhhbmRsZSA6IGVt
cHR5U3RyaW5nKCksIGZyYW1lTm90Rm91bmQpOworICAgIGF1dG8gZnJhbWVJRCA9IHdlYkZyYW1l
SURGb3JIYW5kbGUoZnJhbWVIYW5kbGUsIGZyYW1lTm90Rm91bmQpOwogICAgIGlmIChmcmFtZU5v
dEZvdW5kKQogICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUihGcmFtZU5v
dEZvdW5kKTsKIAogICAgIGJvb2wgc2Nyb2xsSW50b1ZpZXdJZk5lZWRlZCA9IG9wdGlvbmFsU2Ny
b2xsSW50b1ZpZXdJZk5lZWRlZCA/ICpvcHRpb25hbFNjcm9sbEludG9WaWV3SWZOZWVkZWQgOiBm
YWxzZTsKLSAgICBTdHJpbmcgbm9kZUhhbmRsZSA9IG9wdGlvbmFsTm9kZUhhbmRsZSA/ICpvcHRp
b25hbE5vZGVIYW5kbGUgOiBlbXB0eVN0cmluZygpOwogICAgIGJvb2wgY2xpcFRvVmlld3BvcnQg
PSBvcHRpb25hbENsaXBUb1ZpZXdwb3J0ID8gKm9wdGlvbmFsQ2xpcFRvVmlld3BvcnQgOiBmYWxz
ZTsKIAogI2lmIFBMQVRGT1JNKEdUSykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uaCBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uaAppbmRleCAzNjI3NjYwMzk1
Y2I1ZjQ0ZTc3YTlmODYxZDQyZTk3MWRiYTFiYmZjLi44ZDkwODkyYTRiMTM0MjY0YTRlODViZTRm
NjVkZmEyMGZjMDEzYTJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRv
bWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbi5oCkBAIC0xMzUsMTAgKzEzNSwxMCBA
QCBwdWJsaWM6CiAKICNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKICAgICAvLyBJbnNwZWN0
b3I6OlJlbW90ZUF1dG9tYXRpb25UYXJnZXQgQVBJCi0gICAgU3RyaW5nIG5hbWUoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBtX3Nlc3Npb25JZGVudGlmaWVyOyB9Ci0gICAgdm9pZCBkaXNwYXRj
aE1lc3NhZ2VGcm9tUmVtb3RlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkgb3ZlcnJpZGU7Ci0gICAg
dm9pZCBjb25uZWN0KEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVsJiwgYm9vbCBpc0F1dG9tYXRp
Y0Nvbm5lY3Rpb24gPSBmYWxzZSwgYm9vbCBpbW1lZGlhdGVseVBhdXNlID0gZmFsc2UpIG92ZXJy
aWRlOwotICAgIHZvaWQgZGlzY29ubmVjdChJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbCYpIG92
ZXJyaWRlOworICAgIFN0cmluZyBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9zZXNzaW9uSWRlbnRp
ZmllcjsgfQorICAgIHZvaWQgZGlzcGF0Y2hNZXNzYWdlRnJvbVJlbW90ZShjb25zdCBTdHJpbmcm
IG1lc3NhZ2UpOworICAgIHZvaWQgY29ubmVjdChJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbCYs
IGJvb2wgaXNBdXRvbWF0aWNDb25uZWN0aW9uID0gZmFsc2UsIGJvb2wgaW1tZWRpYXRlbHlQYXVz
ZSA9IGZhbHNlKTsKKyAgICB2b2lkIGRpc2Nvbm5lY3QoSW5zcGVjdG9yOjpGcm9udGVuZENoYW5u
ZWwmKTsKICNlbmRpZgogICAgIHZvaWQgdGVybWluYXRlKCk7CiAKQEAgLTE0NiwxNSArMTQ2LDE1
IEBAIHB1YmxpYzoKIAogICAgIC8vIFNpbXVsYXRlZElucHV0RGlzcGF0Y2hlcjo6Q2xpZW50IEFQ
SQogI2lmIEVOQUJMRShXRUJEUklWRVJfTU9VU0VfSU5URVJBQ1RJT05TKQotICAgIHZvaWQgc2lt
dWxhdGVNb3VzZUludGVyYWN0aW9uKFdlYlBhZ2VQcm94eSYsIE1vdXNlSW50ZXJhY3Rpb24sIE1v
dXNlQnV0dG9uLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgbG9jYXRpb25JblZpZXcsIEF1dG9t
YXRpb25Db21wbGV0aW9uSGFuZGxlciYmKSBmaW5hbDsKKyAgICB2b2lkIHNpbXVsYXRlTW91c2VJ
bnRlcmFjdGlvbihXZWJQYWdlUHJveHkmLCBNb3VzZUludGVyYWN0aW9uLCBNb3VzZUJ1dHRvbiwg
Y29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGxvY2F0aW9uSW5WaWV3LCBBdXRvbWF0aW9uQ29tcGxl
dGlvbkhhbmRsZXImJik7CiAjZW5kaWYKICNpZiBFTkFCTEUoV0VCRFJJVkVSX1RPVUNIX0lOVEVS
QUNUSU9OUykKLSAgICB2b2lkIHNpbXVsYXRlVG91Y2hJbnRlcmFjdGlvbihXZWJQYWdlUHJveHkm
LCBUb3VjaEludGVyYWN0aW9uLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgbG9jYXRpb25JblZp
ZXcsIE9wdGlvbmFsPFNlY29uZHM+IGR1cmF0aW9uLCBBdXRvbWF0aW9uQ29tcGxldGlvbkhhbmRs
ZXImJikgZmluYWw7CisgICAgdm9pZCBzaW11bGF0ZVRvdWNoSW50ZXJhY3Rpb24oV2ViUGFnZVBy
b3h5JiwgVG91Y2hJbnRlcmFjdGlvbiwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGxvY2F0aW9u
SW5WaWV3LCBPcHRpb25hbDxTZWNvbmRzPiBkdXJhdGlvbiwgQXV0b21hdGlvbkNvbXBsZXRpb25I
YW5kbGVyJiYpOwogI2VuZGlmCiAjaWYgRU5BQkxFKFdFQkRSSVZFUl9LRVlCT0FSRF9JTlRFUkFD
VElPTlMpCi0gICAgdm9pZCBzaW11bGF0ZUtleWJvYXJkSW50ZXJhY3Rpb24oV2ViUGFnZVByb3h5
JiwgS2V5Ym9hcmRJbnRlcmFjdGlvbiwgV1RGOjpWYXJpYW50PFZpcnR1YWxLZXksIENoYXJLZXk+
JiYsIEF1dG9tYXRpb25Db21wbGV0aW9uSGFuZGxlciYmKSBmaW5hbDsKKyAgICB2b2lkIHNpbXVs
YXRlS2V5Ym9hcmRJbnRlcmFjdGlvbihXZWJQYWdlUHJveHkmLCBLZXlib2FyZEludGVyYWN0aW9u
LCBXVEY6OlZhcmlhbnQ8VmlydHVhbEtleSwgQ2hhcktleT4mJiwgQXV0b21hdGlvbkNvbXBsZXRp
b25IYW5kbGVyJiYpOwogI2VuZGlmCi0gICAgdm9pZCB2aWV3cG9ydEluVmlld0NlbnRlclBvaW50
T2ZFbGVtZW50KFdlYlBhZ2VQcm94eSYsIE9wdGlvbmFsPFdlYkNvcmU6OkZyYW1lSWRlbnRpZmll
cj4sIGNvbnN0IFN0cmluZyYgbm9kZUhhbmRsZSwgRnVuY3Rpb248dm9pZCAoT3B0aW9uYWw8V2Vi
Q29yZTo6SW50UG9pbnQ+LCBPcHRpb25hbDxBdXRvbWF0aW9uQ29tbWFuZEVycm9yPik+JiYpIGZp
bmFsOworICAgIHZvaWQgdmlld3BvcnRJblZpZXdDZW50ZXJQb2ludE9mRWxlbWVudChXZWJQYWdl
UHJveHkmLCBPcHRpb25hbDxXZWJDb3JlOjpGcmFtZUlkZW50aWZpZXI+LCBjb25zdCBJbnNwZWN0
b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpOb2RlSGFuZGxlJiwgRnVuY3Rpb248dm9pZChPcHRp
b25hbDxXZWJDb3JlOjpJbnRQb2ludD4sIE9wdGlvbmFsPEF1dG9tYXRpb25Db21tYW5kRXJyb3I+
KT4mJik7CiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCRFJJVkVSX0FDVElPTlNfQVBJKQogCkBAIC0x
NjMsNDUgKzE2Myw0NSBAQCBwdWJsaWM6CiAgICAgLy8gYW5kIHRoZSAtLXBsYXRmb3JtIGFyZ3Vt
ZW50IHBhc3NlZCB0byB0aGUgcHJvdG9jb2wgYmluZGluZ3MgZ2VuZXJhdG9yLgogCiAgICAgLy8g
UGxhdGZvcm06IEdlbmVyaWMKLSAgICB2b2lkIGdldEJyb3dzaW5nQ29udGV4dHMoUmVmPEdldEJy
b3dzaW5nQ29udGV4dHNDYWxsYmFjaz4mJikgZmluYWw7Ci0gICAgdm9pZCBnZXRCcm93c2luZ0Nv
bnRleHQoY29uc3QgU3RyaW5nJiwgUmVmPEdldEJyb3dzaW5nQ29udGV4dENhbGxiYWNrPiYmKSBm
aW5hbDsKLSAgICB2b2lkIGNyZWF0ZUJyb3dzaW5nQ29udGV4dChjb25zdCBTdHJpbmcqIG9wdGlv
bmFsUHJlc2VudGF0aW9uSGludCwgUmVmPENyZWF0ZUJyb3dzaW5nQ29udGV4dENhbGxiYWNrPiYm
KSBmaW5hbDsKLSAgICB2b2lkIGNsb3NlQnJvd3NpbmdDb250ZXh0KEluc3BlY3Rvcjo6RXJyb3JT
dHJpbmcmLCBjb25zdCBTdHJpbmcmKSBmaW5hbDsKLSAgICB2b2lkIHN3aXRjaFRvQnJvd3NpbmdD
b250ZXh0KGNvbnN0IFN0cmluZyYgYnJvd3NpbmdDb250ZXh0SGFuZGxlLCBjb25zdCBTdHJpbmcq
IG9wdGlvbmFsRnJhbWVIYW5kbGUsIFJlZjxTd2l0Y2hUb0Jyb3dzaW5nQ29udGV4dENhbGxiYWNr
PiYmKSBmaW5hbDsKLSAgICB2b2lkIHNldFdpbmRvd0ZyYW1lT2ZCcm93c2luZ0NvbnRleHQoY29u
c3QgU3RyaW5nJiBoYW5kbGUsIGNvbnN0IEpTT046Ok9iamVjdCogb3JpZ2luLCBjb25zdCBKU09O
OjpPYmplY3QqIHNpemUsIFJlZjxTZXRXaW5kb3dGcmFtZU9mQnJvd3NpbmdDb250ZXh0Q2FsbGJh
Y2s+JiYpIGZpbmFsOwotICAgIHZvaWQgbWF4aW1pemVXaW5kb3dPZkJyb3dzaW5nQ29udGV4dChj
b25zdCBTdHJpbmcmIGhhbmRsZSwgUmVmPE1heGltaXplV2luZG93T2ZCcm93c2luZ0NvbnRleHRD
YWxsYmFjaz4mJikgZmluYWw7Ci0gICAgdm9pZCBoaWRlV2luZG93T2ZCcm93c2luZ0NvbnRleHQo
Y29uc3QgU3RyaW5nJiBoYW5kbGUsIFJlZjxIaWRlV2luZG93T2ZCcm93c2luZ0NvbnRleHRDYWxs
YmFjaz4mJikgZmluYWw7Ci0gICAgdm9pZCBuYXZpZ2F0ZUJyb3dzaW5nQ29udGV4dChjb25zdCBT
dHJpbmcmIGhhbmRsZSwgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxQ
YWdlTG9hZFN0cmF0ZWd5U3RyaW5nLCBjb25zdCBkb3VibGUqIG9wdGlvbmFsUGFnZUxvYWRUaW1l
b3V0LCBSZWY8TmF2aWdhdGVCcm93c2luZ0NvbnRleHRDYWxsYmFjaz4mJikgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCBnb0JhY2tJbkJyb3dzaW5nQ29udGV4dChjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJp
bmcqIG9wdGlvbmFsUGFnZUxvYWRTdHJhdGVneVN0cmluZywgY29uc3QgZG91YmxlKiBvcHRpb25h
bFBhZ2VMb2FkVGltZW91dCwgUmVmPEdvQmFja0luQnJvd3NpbmdDb250ZXh0Q2FsbGJhY2s+JiYp
IG92ZXJyaWRlOwotICAgIHZvaWQgZ29Gb3J3YXJkSW5Ccm93c2luZ0NvbnRleHQoY29uc3QgU3Ry
aW5nJiwgY29uc3QgU3RyaW5nKiBvcHRpb25hbFBhZ2VMb2FkU3RyYXRlZ3lTdHJpbmcsIGNvbnN0
IGRvdWJsZSogb3B0aW9uYWxQYWdlTG9hZFRpbWVvdXQsIFJlZjxHb0ZvcndhcmRJbkJyb3dzaW5n
Q29udGV4dENhbGxiYWNrPiYmKSBvdmVycmlkZTsKLSAgICB2b2lkIHJlbG9hZEJyb3dzaW5nQ29u
dGV4dChjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsUGFnZUxvYWRTdHJhdGVn
eVN0cmluZywgY29uc3QgZG91YmxlKiBvcHRpb25hbFBhZ2VMb2FkVGltZW91dCwgUmVmPFJlbG9h
ZEJyb3dzaW5nQ29udGV4dENhbGxiYWNrPiYmKSBvdmVycmlkZTsKLSAgICB2b2lkIHdhaXRGb3JO
YXZpZ2F0aW9uVG9Db21wbGV0ZShjb25zdCBTdHJpbmcmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSwg
Y29uc3QgU3RyaW5nKiBvcHRpb25hbEZyYW1lSGFuZGxlLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFs
UGFnZUxvYWRTdHJhdGVneVN0cmluZywgY29uc3QgZG91YmxlKiBvcHRpb25hbFBhZ2VMb2FkVGlt
ZW91dCwgUmVmPFdhaXRGb3JOYXZpZ2F0aW9uVG9Db21wbGV0ZUNhbGxiYWNrPiYmKSBvdmVycmlk
ZTsKLSAgICB2b2lkIGV2YWx1YXRlSmF2YVNjcmlwdEZ1bmN0aW9uKGNvbnN0IFN0cmluZyYgYnJv
d3NpbmdDb250ZXh0SGFuZGxlLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsRnJhbWVIYW5kbGUsIGNv
bnN0IFN0cmluZyYgZnVuY3Rpb24sIGNvbnN0IEpTT046OkFycmF5JiBhcmd1bWVudHMsIGNvbnN0
IGJvb2wqIG9wdGlvbmFsRXhwZWN0c0ltcGxpY2l0Q2FsbGJhY2tBcmd1bWVudCwgY29uc3QgZG91
YmxlKiBvcHRpb25hbENhbGxiYWNrVGltZW91dCwgUmVmPEluc3BlY3Rvcjo6QXV0b21hdGlvbkJh
Y2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXZhbHVhdGVKYXZhU2NyaXB0RnVuY3Rpb25DYWxsYmFj
az4mJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBwZXJmb3JtTW91c2VJbnRlcmFjdGlvbihjb25zdCBT
dHJpbmcmIGhhbmRsZSwgY29uc3QgSlNPTjo6T2JqZWN0JiByZXF1ZXN0ZWRQb3NpdGlvbiwgY29u
c3QgU3RyaW5nJiBtb3VzZUJ1dHRvbiwgY29uc3QgU3RyaW5nJiBtb3VzZUludGVyYWN0aW9uLCBj
b25zdCBKU09OOjpBcnJheSYga2V5TW9kaWZpZXJzLCBSZWY8UGVyZm9ybU1vdXNlSW50ZXJhY3Rp
b25DYWxsYmFjaz4mJikgZmluYWw7Ci0gICAgdm9pZCBwZXJmb3JtS2V5Ym9hcmRJbnRlcmFjdGlv
bnMoY29uc3QgU3RyaW5nJiBoYW5kbGUsIGNvbnN0IEpTT046OkFycmF5JiBpbnRlcmFjdGlvbnMs
IFJlZjxQZXJmb3JtS2V5Ym9hcmRJbnRlcmFjdGlvbnNDYWxsYmFjaz4mJikgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCBwZXJmb3JtSW50ZXJhY3Rpb25TZXF1ZW5jZShjb25zdCBTdHJpbmcmIGhhbmRsZSwg
Y29uc3QgU3RyaW5nKiBvcHRpb25hbEZyYW1lSGFuZGxlLCBjb25zdCBKU09OOjpBcnJheSYgc291
cmNlcywgY29uc3QgSlNPTjo6QXJyYXkmIHN0ZXBzLCBSZWY8UGVyZm9ybUludGVyYWN0aW9uU2Vx
dWVuY2VDYWxsYmFjaz4mJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjYW5jZWxJbnRlcmFjdGlvblNl
cXVlbmNlKGNvbnN0IFN0cmluZyYgaGFuZGxlLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsRnJhbWVI
YW5kbGUsIFJlZjxDYW5jZWxJbnRlcmFjdGlvblNlcXVlbmNlQ2FsbGJhY2s+JiYpIG92ZXJyaWRl
OwotICAgIHZvaWQgdGFrZVNjcmVlbnNob3QoY29uc3QgU3RyaW5nJiBoYW5kbGUsIGNvbnN0IFN0
cmluZyogb3B0aW9uYWxGcmFtZUhhbmRsZSwgY29uc3QgU3RyaW5nKiBvcHRpb25hbE5vZGVIYW5k
bGUsIGNvbnN0IGJvb2wqIG9wdGlvbmFsU2Nyb2xsSW50b1ZpZXdJZk5lZWRlZCwgY29uc3QgYm9v
bCogb3B0aW9uYWxDbGlwVG9WaWV3cG9ydCwgUmVmPFRha2VTY3JlZW5zaG90Q2FsbGJhY2s+JiYp
IG92ZXJyaWRlOwotICAgIHZvaWQgcmVzb2x2ZUNoaWxkRnJhbWVIYW5kbGUoY29uc3QgU3RyaW5n
JiBicm93c2luZ0NvbnRleHRIYW5kbGUsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxGcmFtZUhhbmRs
ZSwgY29uc3QgaW50KiBvcHRpb25hbE9yZGluYWwsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxOYW1l
LCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsTm9kZUhhbmRsZSwgUmVmPFJlc29sdmVDaGlsZEZyYW1l
SGFuZGxlQ2FsbGJhY2s+JiYpIG92ZXJyaWRlOwotICAgIHZvaWQgcmVzb2x2ZVBhcmVudEZyYW1l
SGFuZGxlKGNvbnN0IFN0cmluZyYgYnJvd3NpbmdDb250ZXh0SGFuZGxlLCBjb25zdCBTdHJpbmcm
IGZyYW1lSGFuZGxlLCBSZWY8UmVzb2x2ZVBhcmVudEZyYW1lSGFuZGxlQ2FsbGJhY2s+JiYpIG92
ZXJyaWRlOwotICAgIHZvaWQgY29tcHV0ZUVsZW1lbnRMYXlvdXQoY29uc3QgU3RyaW5nJiBicm93
c2luZ0NvbnRleHRIYW5kbGUsIGNvbnN0IFN0cmluZyYgZnJhbWVIYW5kbGUsIGNvbnN0IFN0cmlu
ZyYgbm9kZUhhbmRsZSwgY29uc3QgYm9vbCogb3B0aW9uYWxTY3JvbGxJbnRvVmlld0lmTmVlZGVk
LCBjb25zdCBTdHJpbmcmIGNvb3JkaW5hdGVTeXN0ZW0sIFJlZjxJbnNwZWN0b3I6OkF1dG9tYXRp
b25CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkNvbXB1dGVFbGVtZW50TGF5b3V0Q2FsbGJhY2s+
JiYpIG92ZXJyaWRlOwotICAgIHZvaWQgc2VsZWN0T3B0aW9uRWxlbWVudChjb25zdCBTdHJpbmcm
IGJyb3dzaW5nQ29udGV4dEhhbmRsZSwgY29uc3QgU3RyaW5nJiBmcmFtZUhhbmRsZSwgY29uc3Qg
U3RyaW5nJiBub2RlSGFuZGxlLCBSZWY8SW5zcGVjdG9yOjpBdXRvbWF0aW9uQmFja2VuZERpc3Bh
dGNoZXJIYW5kbGVyOjpTZWxlY3RPcHRpb25FbGVtZW50Q2FsbGJhY2s+JiYpIG92ZXJyaWRlOwot
ICAgIHZvaWQgaXNTaG93aW5nSmF2YVNjcmlwdERpYWxvZyhJbnNwZWN0b3I6OkVycm9yU3RyaW5n
JiwgY29uc3QgU3RyaW5nJiBicm93c2luZ0NvbnRleHRIYW5kbGUsIGJvb2wqIHJlc3VsdCkgb3Zl
cnJpZGU7Ci0gICAgdm9pZCBkaXNtaXNzQ3VycmVudEphdmFTY3JpcHREaWFsb2coSW5zcGVjdG9y
OjpFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgYnJvd3NpbmdDb250ZXh0SGFuZGxlKSBvdmVy
cmlkZTsKLSAgICB2b2lkIGFjY2VwdEN1cnJlbnRKYXZhU2NyaXB0RGlhbG9nKEluc3BlY3Rvcjo6
RXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSkgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCBtZXNzYWdlT2ZDdXJyZW50SmF2YVNjcmlwdERpYWxvZyhJbnNwZWN0b3I6
OkVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBicm93c2luZ0NvbnRleHRIYW5kbGUsIFN0cmlu
ZyogdGV4dCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRVc2VySW5wdXRGb3JDdXJyZW50SmF2YVNj
cmlwdFByb21wdChJbnNwZWN0b3I6OkVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBicm93c2lu
Z0NvbnRleHRIYW5kbGUsIGNvbnN0IFN0cmluZyYgdGV4dCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBz
ZXRGaWxlc1RvU2VsZWN0Rm9yRmlsZVVwbG9hZChJbnNwZWN0b3I6OkVycm9yU3RyaW5nJiwgY29u
c3QgU3RyaW5nJiBicm93c2luZ0NvbnRleHRIYW5kbGUsIGNvbnN0IEpTT046OkFycmF5JiBmaWxl
bmFtZXMsIGNvbnN0IEpTT046OkFycmF5KiBvcHRpb25hbEZpbGVDb250ZW50cykgb3ZlcnJpZGU7
Ci0gICAgdm9pZCBzZXRGaWxlc0ZvcklucHV0RmlsZVVwbG9hZChjb25zdCBTdHJpbmcmIGJyb3dz
aW5nQ29udGV4dEhhbmRsZSwgY29uc3QgU3RyaW5nJiBmcmFtZUhhbmRsZSwgY29uc3QgU3RyaW5n
JiBub2RlSGFuZGxlLCBjb25zdCBKU09OOjpBcnJheSYgZmlsZW5hbWVzLCBSZWY8U2V0RmlsZXNG
b3JJbnB1dEZpbGVVcGxvYWRDYWxsYmFjaz4mJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBnZXRBbGxD
b29raWVzKGNvbnN0IFN0cmluZyYgYnJvd3NpbmdDb250ZXh0SGFuZGxlLCBSZWY8R2V0QWxsQ29v
a2llc0NhbGxiYWNrPiYmKSBvdmVycmlkZTsKLSAgICB2b2lkIGRlbGV0ZVNpbmdsZUNvb2tpZShj
b25zdCBTdHJpbmcmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSwgY29uc3QgU3RyaW5nJiBjb29raWVO
YW1lLCBSZWY8RGVsZXRlU2luZ2xlQ29va2llQ2FsbGJhY2s+JiYpIG92ZXJyaWRlOwotICAgIHZv
aWQgYWRkU2luZ2xlQ29va2llKGNvbnN0IFN0cmluZyYgYnJvd3NpbmdDb250ZXh0SGFuZGxlLCBj
b25zdCBKU09OOjpPYmplY3QmIGNvb2tpZSwgUmVmPEFkZFNpbmdsZUNvb2tpZUNhbGxiYWNrPiYm
KSBvdmVycmlkZTsKLSAgICB2b2lkIGRlbGV0ZUFsbENvb2tpZXMoSW5zcGVjdG9yOjpFcnJvclN0
cmluZyYsIGNvbnN0IFN0cmluZyYgYnJvd3NpbmdDb250ZXh0SGFuZGxlKSBvdmVycmlkZTsKLSAg
ICB2b2lkIGdldFNlc3Npb25QZXJtaXNzaW9ucyhJbnNwZWN0b3I6OkVycm9yU3RyaW5nJiwgUmVm
UHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6U2Vzc2lv
blBlcm1pc3Npb25EYXRhPj4mIG91dF9wZXJtaXNzaW9ucykgb3ZlcnJpZGU7Ci0gICAgdm9pZCBz
ZXRTZXNzaW9uUGVybWlzc2lvbnMoSW5zcGVjdG9yOjpFcnJvclN0cmluZyYsIGNvbnN0IEpTT046
OkFycmF5JiBpbl9wZXJtaXNzaW9ucykgb3ZlcnJpZGU7CisgICAgdm9pZCBnZXRCcm93c2luZ0Nv
bnRleHRzKFJlZjxHZXRCcm93c2luZ0NvbnRleHRzQ2FsbGJhY2s+JiYpOworICAgIHZvaWQgZ2V0
QnJvd3NpbmdDb250ZXh0KGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJy
b3dzaW5nQ29udGV4dEhhbmRsZSYsIFJlZjxHZXRCcm93c2luZ0NvbnRleHRDYWxsYmFjaz4mJik7
CisgICAgdm9pZCBjcmVhdGVCcm93c2luZ0NvbnRleHQoT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90
b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0UHJlc2VudGF0aW9uPiYmLCBSZWY8Q3Jl
YXRlQnJvd3NpbmdDb250ZXh0Q2FsbGJhY2s+JiYpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8dm9pZD4gY2xvc2VCcm93c2luZ0NvbnRleHQoY29uc3QgSW5zcGVjdG9y
OjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJik7CisgICAgdm9p
ZCBzd2l0Y2hUb0Jyb3dzaW5nQ29udGV4dChjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRv
bWF0aW9uOjpCcm93c2luZ0NvbnRleHRIYW5kbGUmLCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29s
OjpBdXRvbWF0aW9uOjpGcmFtZUhhbmRsZSYsIFJlZjxTd2l0Y2hUb0Jyb3dzaW5nQ29udGV4dENh
bGxiYWNrPiYmKTsKKyAgICB2b2lkIHNldFdpbmRvd0ZyYW1lT2ZCcm93c2luZ0NvbnRleHQoY29u
c3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxl
JiwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBvcmlnaW4sIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYg
c2l6ZSwgUmVmPFNldFdpbmRvd0ZyYW1lT2ZCcm93c2luZ0NvbnRleHRDYWxsYmFjaz4mJik7Cisg
ICAgdm9pZCBtYXhpbWl6ZVdpbmRvd09mQnJvd3NpbmdDb250ZXh0KGNvbnN0IEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYsIFJlZjxNYXhpbWl6
ZVdpbmRvd09mQnJvd3NpbmdDb250ZXh0Q2FsbGJhY2s+JiYpOworICAgIHZvaWQgaGlkZVdpbmRv
d09mQnJvd3NpbmdDb250ZXh0KGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246
OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYsIFJlZjxIaWRlV2luZG93T2ZCcm93c2luZ0NvbnRleHRD
YWxsYmFjaz4mJik7CisgICAgdm9pZCBuYXZpZ2F0ZUJyb3dzaW5nQ29udGV4dChjb25zdCBJbnNw
ZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRIYW5kbGUmLCBjb25z
dCBTdHJpbmcmIHVybCwgT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6
UGFnZUxvYWRTdHJhdGVneT4mJiwgT3B0aW9uYWw8ZG91YmxlPiYmIHBhZ2VMb2FkVGltZW91dCwg
UmVmPE5hdmlnYXRlQnJvd3NpbmdDb250ZXh0Q2FsbGJhY2s+JiYpOworICAgIHZvaWQgZ29CYWNr
SW5Ccm93c2luZ0NvbnRleHQoY29uc3QgU3RyaW5nJiwgT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90
b2NvbDo6QXV0b21hdGlvbjo6UGFnZUxvYWRTdHJhdGVneT4mJiwgT3B0aW9uYWw8ZG91YmxlPiYm
IHBhZ2VMb2FkVGltZW91dCwgUmVmPEdvQmFja0luQnJvd3NpbmdDb250ZXh0Q2FsbGJhY2s+JiYp
OworICAgIHZvaWQgZ29Gb3J3YXJkSW5Ccm93c2luZ0NvbnRleHQoY29uc3QgU3RyaW5nJiwgT3B0
aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6UGFnZUxvYWRTdHJhdGVneT4m
JiwgT3B0aW9uYWw8ZG91YmxlPiYmIHBhZ2VMb2FkVGltZW91dCwgUmVmPEdvRm9yd2FyZEluQnJv
d3NpbmdDb250ZXh0Q2FsbGJhY2s+JiYpOworICAgIHZvaWQgcmVsb2FkQnJvd3NpbmdDb250ZXh0
KGNvbnN0IFN0cmluZyYsIE9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246
OlBhZ2VMb2FkU3RyYXRlZ3k+JiYsIE9wdGlvbmFsPGRvdWJsZT4mJiBwYWdlTG9hZFRpbWVvdXQs
IFJlZjxSZWxvYWRCcm93c2luZ0NvbnRleHRDYWxsYmFjaz4mJik7CisgICAgdm9pZCB3YWl0Rm9y
TmF2aWdhdGlvblRvQ29tcGxldGUoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlv
bjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJiwgY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0
b21hdGlvbjo6RnJhbWVIYW5kbGUmLCBPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRv
bWF0aW9uOjpQYWdlTG9hZFN0cmF0ZWd5PiYmLCBPcHRpb25hbDxkb3VibGU+JiYgcGFnZUxvYWRU
aW1lb3V0LCBSZWY8V2FpdEZvck5hdmlnYXRpb25Ub0NvbXBsZXRlQ2FsbGJhY2s+JiYpOworICAg
IHZvaWQgZXZhbHVhdGVKYXZhU2NyaXB0RnVuY3Rpb24oY29uc3QgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJiwgY29uc3QgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6QXV0b21hdGlvbjo6RnJhbWVIYW5kbGUmLCBjb25zdCBTdHJpbmcmIGZ1bmN0aW9u
LCBSZWY8SlNPTjo6QXJyYXk+JiYgYXJndW1lbnRzLCBPcHRpb25hbDxib29sPiYmIGV4cGVjdHNJ
bXBsaWNpdENhbGxiYWNrQXJndW1lbnQsIE9wdGlvbmFsPGRvdWJsZT4mJiBjYWxsYmFja1RpbWVv
dXQsIFJlZjxFdmFsdWF0ZUphdmFTY3JpcHRGdW5jdGlvbkNhbGxiYWNrPiYmKTsKKyAgICB2b2lk
IHBlcmZvcm1Nb3VzZUludGVyYWN0aW9uKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9t
YXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYsIFJlZjxKU09OOjpPYmplY3Q+JiYgcmVxdWVz
dGVkUG9zaXRpb24sIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246Ok1vdXNlQnV0dG9u
LCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpNb3VzZUludGVyYWN0aW9uLCBSZWY8
SlNPTjo6QXJyYXk+JiYga2V5TW9kaWZpZXJzLCBSZWY8UGVyZm9ybU1vdXNlSW50ZXJhY3Rpb25D
YWxsYmFjaz4mJik7CisgICAgdm9pZCBwZXJmb3JtS2V5Ym9hcmRJbnRlcmFjdGlvbnMoY29uc3Qg
SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJiwg
UmVmPEpTT046OkFycmF5PiYmIGludGVyYWN0aW9ucywgUmVmPFBlcmZvcm1LZXlib2FyZEludGVy
YWN0aW9uc0NhbGxiYWNrPiYmKTsKKyAgICB2b2lkIHBlcmZvcm1JbnRlcmFjdGlvblNlcXVlbmNl
KGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhh
bmRsZSYsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkZyYW1lSGFuZGxl
JiwgUmVmPEpTT046OkFycmF5PiYmIHNvdXJjZXMsIFJlZjxKU09OOjpBcnJheT4mJiBzdGVwcywg
UmVmPFBlcmZvcm1JbnRlcmFjdGlvblNlcXVlbmNlQ2FsbGJhY2s+JiYpOworICAgIHZvaWQgY2Fu
Y2VsSW50ZXJhY3Rpb25TZXF1ZW5jZShjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0
aW9uOjpCcm93c2luZ0NvbnRleHRIYW5kbGUmLCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpB
dXRvbWF0aW9uOjpGcmFtZUhhbmRsZSYsIFJlZjxDYW5jZWxJbnRlcmFjdGlvblNlcXVlbmNlQ2Fs
bGJhY2s+JiYpOworICAgIHZvaWQgdGFrZVNjcmVlbnNob3QoY29uc3QgSW5zcGVjdG9yOjpQcm90
b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJiwgY29uc3QgSW5zcGVjdG9y
OjpQcm90b2NvbDo6QXV0b21hdGlvbjo6RnJhbWVIYW5kbGUmLCBjb25zdCBJbnNwZWN0b3I6OlBy
b3RvY29sOjpBdXRvbWF0aW9uOjpOb2RlSGFuZGxlJiwgT3B0aW9uYWw8Ym9vbD4mJiBzY3JvbGxJ
bnRvVmlld0lmTmVlZGVkLCBPcHRpb25hbDxib29sPiYmIGNsaXBUb1ZpZXdwb3J0LCBSZWY8VGFr
ZVNjcmVlbnNob3RDYWxsYmFjaz4mJik7CisgICAgdm9pZCByZXNvbHZlQ2hpbGRGcmFtZUhhbmRs
ZShjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRI
YW5kbGUmLCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpGcmFtZUhhbmRs
ZSYsIE9wdGlvbmFsPGludD4mJiBvcmRpbmFsLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246Ok5vZGVIYW5kbGUmLCBSZWY8UmVzb2x2ZUNo
aWxkRnJhbWVIYW5kbGVDYWxsYmFjaz4mJik7CisgICAgdm9pZCByZXNvbHZlUGFyZW50RnJhbWVI
YW5kbGUoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250
ZXh0SGFuZGxlJiwgY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6RnJhbWVI
YW5kbGUmLCBSZWY8UmVzb2x2ZVBhcmVudEZyYW1lSGFuZGxlQ2FsbGJhY2s+JiYpOworICAgIHZv
aWQgY29tcHV0ZUVsZW1lbnRMYXlvdXQoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21h
dGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJiwgY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6
QXV0b21hdGlvbjo6RnJhbWVIYW5kbGUmLCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRv
bWF0aW9uOjpOb2RlSGFuZGxlJiwgT3B0aW9uYWw8Ym9vbD4mJiBzY3JvbGxJbnRvVmlld0lmTmVl
ZGVkLCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpDb29yZGluYXRlU3lzdGVtLCBS
ZWY8Q29tcHV0ZUVsZW1lbnRMYXlvdXRDYWxsYmFjaz4mJik7CisgICAgdm9pZCBzZWxlY3RPcHRp
b25FbGVtZW50KGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5n
Q29udGV4dEhhbmRsZSYsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkZy
YW1lSGFuZGxlJiwgY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6Tm9kZUhh
bmRsZSYsIFJlZjxTZWxlY3RPcHRpb25FbGVtZW50Q2FsbGJhY2s+JiYpOworICAgIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8Ym9vbD4gaXNTaG93aW5nSmF2YVNjcmlwdERpYWxv
Zyhjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRI
YW5kbGUmKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGRp
c21pc3NDdXJyZW50SmF2YVNjcmlwdERpYWxvZyhjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpB
dXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRIYW5kbGUmKTsKKyAgICBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGFjY2VwdEN1cnJlbnRKYXZhU2NyaXB0RGlhbG9nKGNv
bnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRs
ZSYpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8U3RyaW5nPiBtZXNz
YWdlT2ZDdXJyZW50SmF2YVNjcmlwdERpYWxvZyhjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpB
dXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRIYW5kbGUmKTsKKyAgICBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHNldFVzZXJJbnB1dEZvckN1cnJlbnRKYXZhU2NyaXB0
UHJvbXB0KGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29u
dGV4dEhhbmRsZSYsIGNvbnN0IFN0cmluZyYgdGV4dCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzZXRGaWxlc1RvU2VsZWN0Rm9yRmlsZVVwbG9hZChjb25z
dCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRIYW5kbGUm
LCBSZWY8SlNPTjo6QXJyYXk+JiYgZmlsZW5hbWVzLCBSZWZQdHI8SlNPTjo6QXJyYXk+JiYgZmls
ZUNvbnRlbnRzKTsKKyAgICB2b2lkIHNldEZpbGVzRm9ySW5wdXRGaWxlVXBsb2FkKGNvbnN0IElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYsIGNv
bnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkZyYW1lSGFuZGxlJiwgY29uc3Qg
SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6Tm9kZUhhbmRsZSYsIFJlZjxKU09OOjpB
cnJheT4mJiBmaWxlbmFtZXMsIFJlZjxTZXRGaWxlc0ZvcklucHV0RmlsZVVwbG9hZENhbGxiYWNr
PiYmKTsKKyAgICB2b2lkIGdldEFsbENvb2tpZXMoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6
QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJiwgUmVmPEdldEFsbENvb2tpZXNDYWxs
YmFjaz4mJik7CisgICAgdm9pZCBkZWxldGVTaW5nbGVDb29raWUoY29uc3QgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJiwgY29uc3QgU3RyaW5n
JiBjb29raWVOYW1lLCBSZWY8RGVsZXRlU2luZ2xlQ29va2llQ2FsbGJhY2s+JiYpOworICAgIHZv
aWQgYWRkU2luZ2xlQ29va2llKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246
OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYsIFJlZjxKU09OOjpPYmplY3Q+JiYgY29va2llLCBSZWY8
QWRkU2luZ2xlQ29va2llQ2FsbGJhY2s+JiYpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8dm9pZD4gZGVsZXRlQWxsQ29va2llcyhjb25zdCBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRIYW5kbGUmKTsKKyAgICBJbnNwZWN0b3I6
OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkF1dG9tYXRpb246OlNlc3Npb25QZXJtaXNzaW9uRGF0YT4+PiBnZXRTZXNzaW9uUGVy
bWlzc2lvbnMoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+
IHNldFNlc3Npb25QZXJtaXNzaW9ucyhSZWY8SlNPTjo6QXJyYXk+JiYpOwogCiAjaWYgUExBVEZP
Uk0oTUFDKQotICAgIHZvaWQgaW5zcGVjdEJyb3dzaW5nQ29udGV4dChjb25zdCBTdHJpbmcmLCBj
b25zdCBib29sKiBvcHRpb25hbEVuYWJsZUF1dG9DYXB0dXJpbmcsIFJlZjxJbnNwZWN0QnJvd3Np
bmdDb250ZXh0Q2FsbGJhY2s+JiYpIG92ZXJyaWRlOworICAgIHZvaWQgaW5zcGVjdEJyb3dzaW5n
Q29udGV4dChjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0Nv
bnRleHRIYW5kbGUmLCBPcHRpb25hbDxib29sPiYmIGVuYWJsZUF1dG9DYXB0dXJpbmcsIFJlZjxJ
bnNwZWN0QnJvd3NpbmdDb250ZXh0Q2FsbGJhY2s+JiYpOwogI2VuZGlmCiAKICAgICAvLyBFdmVu
dCBTaW11bGF0aW9uIFN1cHBvcnQuCkBAIC0yMzgsNyArMjM4LDcgQEAgcHJpdmF0ZToKICAgICB2
b2lkIGhpZGVXaW5kb3dGb3JQYWdlKFdlYlBhZ2VQcm94eSYsIFdURjo6Q29tcGxldGlvbkhhbmRs
ZXI8dm9pZCgpPiYmKTsKIAogICAgIC8vIElQQzo6TWVzc2FnZVJlY2VpdmVyIChJbXBsZW1lbnRl
ZCBieSBnZW5lcmF0ZWQgY29kZSBpbiBXZWJBdXRvbWF0aW9uU2Vzc2lvbk1lc3NhZ2VSZWNlaXZl
ci5jcHApLgotICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBD
OjpEZWNvZGVyJikgb3ZlcnJpZGU7CisgICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNv
bm5lY3Rpb24mLCBJUEM6OkRlY29kZXImKTsKIAogICAgIC8vIENhbGxlZCBieSBXZWJBdXRvbWF0
aW9uU2Vzc2lvbiBtZXNzYWdlcy4KICAgICB2b2lkIGRpZEV2YWx1YXRlSmF2YVNjcmlwdEZ1bmN0
aW9uKHVpbnQ2NF90IGNhbGxiYWNrSUQsIGNvbnN0IFN0cmluZyYgcmVzdWx0LCBjb25zdCBTdHJp
bmcmIGVycm9yVHlwZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRv
bWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uTWFjcm9zLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uTWFjcm9zLmgKaW5kZXggOTNhZjVh
YmM3MDhiZDU5OGYwZjQwYmNjMjk0ODUyYTM3MDUyOTdhZS4uNGQzNmQ2NGZkNDBmNDNmM2U3ODFk
NWU1OTVhM2JlODRjY2VlZDY1MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbk1hY3Jvcy5oCisrKyBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb25NYWNyb3MuaApAQCAt
NDQsMTQgKzQ0LDEyIEBACiAvLyBDb252ZW5pZW5jZSBtYWNyb3MgZm9yIGZpbGxpbmcgaW4gdGhl
IGVycm9yIHN0cmluZyBvZiBzeW5jaHJvbm91cyBjb21tYW5kcyBpbiBiYWlsb3V0IGJyYW5jaGVz
LgogI2RlZmluZSBTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SKGVycm9yTmFtZSkgXAog
ZG8geyBcCi0gICAgZXJyb3JTdHJpbmcgPSBTVFJJTkdfRk9SX1BSRURFRklORURfRVJST1JfTkFN
RShlcnJvck5hbWUpOyBcCi0gICAgcmV0dXJuOyBcCisgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVk
KFNUUklOR19GT1JfUFJFREVGSU5FRF9FUlJPUl9OQU1FKGVycm9yTmFtZSkpOyBcCiB9IHdoaWxl
IChmYWxzZSkKIAogI2RlZmluZSBTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9E
RVRBSUxTKGVycm9yTmFtZSwgZGV0YWlsc1N0cmluZykgXAogZG8geyBcCi0gICAgZXJyb3JTdHJp
bmcgPSBTVFJJTkdfRk9SX1BSRURFRklORURfRVJST1JfTkFNRV9BTkRfREVUQUlMUyhlcnJvck5h
bWUsIGRldGFpbHNTdHJpbmcpOyBcCi0gICAgcmV0dXJuOyBcCisgICAgcmV0dXJuIG1ha2VVbmV4
cGVjdGVkKFNUUklOR19GT1JfUFJFREVGSU5FRF9FUlJPUl9OQU1FX0FORF9ERVRBSUxTKGVycm9y
TmFtZSwgZGV0YWlsc1N0cmluZykpOyBcCiB9IHdoaWxlIChmYWxzZSkKIAogI2RlZmluZSBBU1lO
Q19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUihlcnJvck5hbWUpIFwKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vbWFjL1dlYkF1dG9tYXRpb25TZXNzaW9u
TWFjLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9tYWMvV2ViQXV0b21h
dGlvblNlc3Npb25NYWMubW0KaW5kZXggM2NhZWNjMzM3ZDA5OTc5NTM0ZTdmY2JmNWUxZTEwYmQ4
MzVmNzZjZC4uOWRiZjJlMDc4N2FhOTk3MDZjNmYyOTA3NTRhOTEzOTBhYmYxZjcwZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9tYWMvV2ViQXV0b21hdGlv
blNlc3Npb25NYWMubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9t
YWMvV2ViQXV0b21hdGlvblNlc3Npb25NYWMubW0KQEAgLTQ0LDcgKzQ0LDcgQEAgdXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CiAKICNwcmFnbWEgbWFyayBDb21tYW5kcyBmb3IgJ1BMQVRGT1JNKE1B
QyknCiAKLXZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246Omluc3BlY3RCcm93c2luZ0NvbnRleHQo
Y29uc3QgU3RyaW5nJiBoYW5kbGUsIGNvbnN0IGJvb2wqIG9wdGlvbmFsRW5hYmxlQXV0b0NhcHR1
cmluZywgUmVmPEluc3BlY3RCcm93c2luZ0NvbnRleHRDYWxsYmFjaz4mJiBjYWxsYmFjaykKK3Zv
aWQgV2ViQXV0b21hdGlvblNlc3Npb246Omluc3BlY3RCcm93c2luZ0NvbnRleHQoY29uc3QgSW5z
cGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJiBoYW5k
bGUsIE9wdGlvbmFsPGJvb2w+JiYgZW5hYmxlQXV0b0NhcHR1cmluZywgUmVmPEluc3BlY3RCcm93
c2luZ0NvbnRleHRDYWxsYmFjaz4mJiBjYWxsYmFjaykKIHsKICAgICBXZWJQYWdlUHJveHkqIHBh
Z2UgPSB3ZWJQYWdlUHJveHlGb3JIYW5kbGUoaGFuZGxlKTsKICAgICBpZiAoIXBhZ2UpCkBAIC02
MCw3ICs2MCw3IEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246Omluc3BlY3RCcm93c2luZ0Nv
bnRleHQoY29uc3QgU3RyaW5nJiBoYW5kbGUsIGNvbnN0IGJvCiAgICAgICAgIHBhZ2UtPmluc3Bl
Y3RvcigpLT5zaG93KCk7CiAKICAgICAgICAgLy8gU3RhcnQgY29sbGVjdGluZyBwcm9maWxlIGlu
Zm9ybWF0aW9uIGltbWVkaWF0ZWx5IHNvIHRoZSBlbnRpcmUgc2Vzc2lvbiBpcyBjYXB0dXJlZC4K
LSAgICAgICAgaWYgKG9wdGlvbmFsRW5hYmxlQXV0b0NhcHR1cmluZyAmJiAqb3B0aW9uYWxFbmFi
bGVBdXRvQ2FwdHVyaW5nKQorICAgICAgICBpZiAoZW5hYmxlQXV0b0NhcHR1cmluZyAmJiAqZW5h
YmxlQXV0b0NhcHR1cmluZykKICAgICAgICAgICAgIHBhZ2UtPmluc3BlY3RvcigpLT50b2dnbGVQ
YWdlUHJvZmlsaW5nKCk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvSW5zcGVjdG9yL0FnZW50cy9JbnNwZWN0b3JCcm93c2VyQWdlbnQuY3BwIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL0FnZW50cy9JbnNwZWN0b3JCcm93c2VyQWdlbnQu
Y3BwCmluZGV4IGMxZmZhNmNmNjE0NjY2ZTRjOGI1ZWM1YjQzY2M2NGY4MDcwZTY1OTkuLmRmNGEx
MGE0MGY4YjAyZmM1ZDc1MDllOTZjNTk0ZWJiYzVhYzlmMTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9BZ2VudHMvSW5zcGVjdG9yQnJvd3NlckFnZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvQWdlbnRzL0luc3BlY3Rv
ckJyb3dzZXJBZ2VudC5jcHAKQEAgLTYwLDM1ICs2MCwzNCBAQCB2b2lkIEluc3BlY3RvckJyb3dz
ZXJBZ2VudDo6ZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRS
b3V0ZQogCiB2b2lkIEluc3BlY3RvckJyb3dzZXJBZ2VudDo6d2lsbERlc3Ryb3lGcm9udGVuZEFu
ZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKQogewotICAgIEVycm9yU3RyaW5n
IGlnbm9yZWQ7Ci0gICAgZGlzYWJsZShpZ25vcmVkKTsKKyAgICBkaXNhYmxlKCk7CiB9CiAKLXZv
aWQgSW5zcGVjdG9yQnJvd3NlckFnZW50OjplbmFibGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5n
KQorSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JCcm93
c2VyQWdlbnQ6OmVuYWJsZSgpCiB7Ci0gICAgaWYgKGVuYWJsZWQoKSkgewotICAgICAgICBlcnJv
clN0cmluZyA9ICJCcm93c2VyIGRvbWFpbiBhbHJlYWR5IGVuYWJsZWQiX3M7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9CisgICAgaWYgKGVuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4
cGVjdGVkKCJCcm93c2VyIGRvbWFpbiBhbHJlYWR5IGVuYWJsZWQiX3MpOwogCiAgICAgbV9pbnNw
ZWN0ZWRQYWdlLmluc3BlY3RvckNvbnRyb2xsZXIoKS5zZXRFbmFibGVkQnJvd3NlckFnZW50KHRo
aXMpOwogCiAgICAgYXV0byogaW5zcGVjdG9yID0gbV9pbnNwZWN0ZWRQYWdlLmluc3BlY3Rvcigp
OwogICAgIEFTU0VSVChpbnNwZWN0b3IpOwogICAgIG1faW5zcGVjdGVkUGFnZS5pbnNwZWN0b3JD
bGllbnQoKS5icm93c2VyRG9tYWluRW5hYmxlZChtX2luc3BlY3RlZFBhZ2UsICppbnNwZWN0b3Ip
OworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JCcm93c2VyQWdlbnQ6OmRp
c2FibGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nKQorSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJy
b3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JCcm93c2VyQWdlbnQ6OmRpc2FibGUoKQogewotICAg
IGlmICghZW5hYmxlZCgpKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIkJyb3dzZXIgZG9tYWlu
IGFscmVhZHkgZGlzYWJsZWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKCFl
bmFibGVkKCkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiQnJvd3NlciBkb21haW4g
YWxyZWFkeSBkaXNhYmxlZCJfcyk7CiAKICAgICBtX2luc3BlY3RlZFBhZ2UuaW5zcGVjdG9yQ29u
dHJvbGxlcigpLnNldEVuYWJsZWRCcm93c2VyQWdlbnQobnVsbHB0cik7CiAKICAgICBpZiAoYXV0
byogaW5zcGVjdG9yID0gbV9pbnNwZWN0ZWRQYWdlLmluc3BlY3RvcigpKQogICAgICAgICBtX2lu
c3BlY3RlZFBhZ2UuaW5zcGVjdG9yQ2xpZW50KCkuYnJvd3NlckRvbWFpbkRpc2FibGVkKG1faW5z
cGVjdGVkUGFnZSwgKmluc3BlY3Rvcik7CisKKyAgICByZXR1cm4geyB9OwogfQogCiB2b2lkIElu
c3BlY3RvckJyb3dzZXJBZ2VudDo6ZXh0ZW5zaW9uc0VuYWJsZWQoSGFzaE1hcDxTdHJpbmcsIFN0
cmluZz4mJiBleHRlbnNpb25JRFRvTmFtZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0luc3BlY3Rvci9BZ2VudHMvSW5zcGVjdG9yQnJvd3NlckFnZW50LmggYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvQWdlbnRzL0luc3BlY3RvckJyb3dzZXJBZ2VudC5o
CmluZGV4IGExMzk1ODNjZDhkODQyMzI5ZjRiM2YzNTIxYjM2MjQwZWFiNTM5MTEuLjMzMWJmYWJi
NTU3NDRlZTk4YTdmZjBmN2RhNzY5NTMxYWM0YzcyNzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0luc3BlY3Rvci9BZ2VudHMvSW5zcGVjdG9yQnJvd3NlckFnZW50LmgKKysr
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL0FnZW50cy9JbnNwZWN0b3JCcm93
c2VyQWdlbnQuaApAQCAtMzMsMjMgKzMzLDIyIEBACiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xh
c3MgV2ViUGFnZVByb3h5OwotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiAKIGNsYXNzIElu
c3BlY3RvckJyb3dzZXJBZ2VudCBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3JBZ2VudEJhc2UsIHB1
YmxpYyBJbnNwZWN0b3I6OkJyb3dzZXJCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewogICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKEluc3BlY3RvckJyb3dzZXJBZ2VudCk7CiAgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgSW5zcGVjdG9yQnJvd3NlckFnZW50KFdlYlBh
Z2VBZ2VudENvbnRleHQmKTsKLSAgICB+SW5zcGVjdG9yQnJvd3NlckFnZW50KCkgb3ZlcnJpZGU7
CisgICAgfkluc3BlY3RvckJyb3dzZXJBZ2VudCgpOwogICAgIGJvb2wgZW5hYmxlZCgpIGNvbnN0
OwogCiAgICAgLy8gSW5zcGVjdG9yQWdlbnRCYXNlCi0gICAgdm9pZCBkaWRDcmVhdGVGcm9udGVu
ZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9udGVuZFJvdXRlciosIEluc3BlY3Rvcjo6QmFja2Vu
ZERpc3BhdGNoZXIqKSBvdmVycmlkZTsKLSAgICB2b2lkIHdpbGxEZXN0cm95RnJvbnRlbmRBbmRC
YWNrZW5kKEluc3BlY3Rvcjo6RGlzY29ubmVjdFJlYXNvbikgb3ZlcnJpZGU7CisgICAgdm9pZCBk
aWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9udGVuZFJvdXRlciosIElu
c3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXIqKTsKKyAgICB2b2lkIHdpbGxEZXN0cm95RnJvbnRl
bmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlzY29ubmVjdFJlYXNvbik7CiAKICAgICAvLyBCcm93
c2VyQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyCi0gICAgdm9pZCBlbmFibGUoRXJyb3JTdHJpbmcm
KSBvdmVycmlkZTsKLSAgICB2b2lkIGRpc2FibGUoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKKyAg
ICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGVuYWJsZSgpOworICAg
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZGlzYWJsZSgpOwogCiAg
ICAgdm9pZCBleHRlbnNpb25zRW5hYmxlZChIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYmKTsKICAg
ICB2b2lkIGV4dGVuc2lvbnNEaXNhYmxlZChIYXNoU2V0PFN0cmluZz4mJik7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3Ivc29ja2V0L1JlbW90ZUluc3BlY3Rv
ckNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3Ivc29ja2V0L1Jl
bW90ZUluc3BlY3RvckNsaWVudC5jcHAKaW5kZXggZmJlZTVjZGZmMzhiM2M3NzlhMjYyNzM4YzQx
OTUxNWI0NDU4YjlkZC4uNWY1MTdmMTBhNDg3NzBkOWNiODljZjg4ZjlkNjAzNzhiYmQ1MmFkNCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL3NvY2tldC9SZW1v
dGVJbnNwZWN0b3JDbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3Bl
Y3Rvci9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmNwcApAQCAtMjA2LDI1ICsyMDYsMzgg
QEAgdm9pZCBSZW1vdGVJbnNwZWN0b3JDbGllbnQ6OnNldFRhcmdldExpc3QoY29uc3QgRXZlbnQm
IGV2ZW50KQogICAgIGlmICghZXZlbnQuY29ubmVjdGlvbklEIHx8ICFldmVudC5tZXNzYWdlKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IG1lc3NhZ2VWYWx1ZTsK
LSAgICBpZiAoIUpTT046OlZhbHVlOjpwYXJzZUpTT04oZXZlbnQubWVzc2FnZS52YWx1ZSgpLCBt
ZXNzYWdlVmFsdWUpKQorICAgIGF1dG8gbWVzc2FnZVZhbHVlID0gSlNPTjo6VmFsdWU6OnBhcnNl
SlNPTihldmVudC5tZXNzYWdlLnZhbHVlKCkpOworICAgIGlmICghbWVzc2FnZVZhbHVlKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IG1lc3NhZ2VBcnJheTsKLSAg
ICBpZiAoIW1lc3NhZ2VWYWx1ZS0+YXNBcnJheShtZXNzYWdlQXJyYXkpKQorICAgIGF1dG8gbWVz
c2FnZUFycmF5ID0gbWVzc2FnZVZhbHVlLT5hc0FycmF5KCk7CisgICAgaWYgKCFtZXNzYWdlQXJy
YXkpCiAgICAgICAgIHJldHVybjsKIAogICAgIFZlY3RvcjxUYXJnZXQ+IHRhcmdldExpc3Q7CiAg
ICAgZm9yIChhdXRvJiBpdGVtVmFsdWUgOiAqbWVzc2FnZUFycmF5KSB7Ci0gICAgICAgIFJlZlB0
cjxKU09OOjpPYmplY3Q+IGl0ZW1PYmplY3Q7Ci0gICAgICAgIGlmICghaXRlbVZhbHVlLT5hc09i
amVjdChpdGVtT2JqZWN0KSkKKyAgICAgICAgYXV0byBpdGVtT2JqZWN0ID0gaXRlbVZhbHVlLT5h
c09iamVjdCgpOworICAgICAgICBpZiAoIWl0ZW1PYmplY3QpCiAgICAgICAgICAgICBjb250aW51
ZTsKIAogICAgICAgICBUYXJnZXQgdGFyZ2V0OwotICAgICAgICBpZiAoIWl0ZW1PYmplY3QtPmdl
dEludGVnZXIoInRhcmdldElEIl9zLCB0YXJnZXQuaWQpCi0gICAgICAgICAgICB8fCAhaXRlbU9i
amVjdC0+Z2V0U3RyaW5nKCJuYW1lIl9zLCB0YXJnZXQubmFtZSkKLSAgICAgICAgICAgIHx8ICFp
dGVtT2JqZWN0LT5nZXRTdHJpbmcoInVybCJfcywgdGFyZ2V0LnVybCkKLSAgICAgICAgICAgIHx8
ICFpdGVtT2JqZWN0LT5nZXRTdHJpbmcoInR5cGUiX3MsIHRhcmdldC50eXBlKSkKKworICAgICAg
ICBhdXRvIHRhcmdldElEID0gaXRlbU9iamVjdC0+Z2V0SW50ZWdlcigidGFyZ2V0SUQiX3MpOwor
ICAgICAgICBpZiAoIXRhcmdldElEKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAg
dGFyZ2V0LnRhcmdldElEID0gKnRhcmdldElEOworCisgICAgICAgIHRhcmdldC5uYW1lID0gaXRl
bU9iamVjdC0+Z2V0U3RyaW5nKCJuYW1lIl9zKTsKKyAgICAgICAgaWYgKCF0YXJnZXQubmFtZSkK
KyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIHRhcmdldC51cmwgPSBpdGVtT2JqZWN0
LT5nZXRTdHJpbmcoInVybCJfcyk7CisgICAgICAgIGlmICghdGFyZ2V0LnVybCkKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworCisgICAgICAgIHRhcmdldC50eXBlID0gaXRlbU9iamVjdC0+Z2V0U3Ry
aW5nKCJ0eXBlIl9zKTsKKyAgICAgICAgaWYgKCF0YXJnZXQudHlwZSkKICAgICAgICAgICAgIGNv
bnRpbnVlOwogCiAgICAgICAgIHRhcmdldExpc3QuYXBwZW5kKFdURk1vdmUodGFyZ2V0KSk7CmRp
ZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZTg4Yjk4
MWM4N2M5YmEyYTFiODg0MmQ4NjkzMmE3YjZlM2VhNTJlMi4uNmU3ODkxMzc4N2RlOTRlZmNlZDYx
NWU1MTRjNzA5ZTc1N2I0OTE2OCAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rv
b2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDIwLTA5LTA4ICBEZXZpbiBSb3Vzc28g
IDxkcm91c3NvQGFwcGxlLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBtb2Rlcm5pemUg
Z2VuZXJhdGVkIGJhY2tlbmQgcHJvdG9jb2wgY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE2MzAyCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS82
ODU0NzY0OT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0pTT05WYWx1ZS5jcHA6CisKIDIwMjAtMDktMDQg
IEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBN
b3ZlIFBERiBoZWFkcy11cCBkaXNwbGF5IHRvIFVJIHByb2Nlc3Mgb24gbWFjT1MKZGlmZiAtLWdp
dCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0pTT05WYWx1ZS5jcHAgYi9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9KU09OVmFsdWUuY3BwCmluZGV4IDkxZWM0MWMzYjdkNDE2
MmQyM2VjNDVlNGRiMzYzN2E5M2NkY2JiNDUuLmMzODA2Mjc2NDRkZjY5MTY2NDAxNmZkYzZjMTE0
OTA4ZmE4ZjgyMTUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0pT
T05WYWx1ZS5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvSlNPTlZhbHVl
LmNwcApAQCAtNDIsODIgKzQyLDY4IEBAIFRFU1QoSlNPTlZhbHVlLCBDb25zdHJ1Y3QpCiAgICAg
ewogICAgICAgICBSZWY8SlNPTjo6VmFsdWU+IHZhbHVlID0gSlNPTjo6VmFsdWU6OmNyZWF0ZSh0
cnVlKTsKICAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUtPnR5cGUoKSA9PSBKU09OOjpWYWx1ZTo6
VHlwZTo6Qm9vbGVhbik7Ci0gICAgICAgIGJvb2wgYm9vbGVhblZhbHVlOwotICAgICAgICBFWFBF
Q1RfVFJVRSh2YWx1ZS0+YXNCb29sZWFuKGJvb2xlYW5WYWx1ZSkpOwotICAgICAgICBFWFBFQ1Rf
RVEoYm9vbGVhblZhbHVlLCB0cnVlKTsKKyAgICAgICAgYXV0byBib29sZWFuVmFsdWUgPSB2YWx1
ZS0+YXNCb29sZWFuKCk7CisgICAgICAgIEVYUEVDVF9UUlVFKGJvb2xlYW5WYWx1ZSk7CisgICAg
ICAgIEVYUEVDVF9FUSgqYm9vbGVhblZhbHVlLCB0cnVlKTsKIAogICAgICAgICB2YWx1ZSA9IEpT
T046OlZhbHVlOjpjcmVhdGUoZmFsc2UpOwogICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+dHlw
ZSgpID09IEpTT046OlZhbHVlOjpUeXBlOjpCb29sZWFuKTsKLSAgICAgICAgRVhQRUNUX1RSVUUo
dmFsdWUtPmFzQm9vbGVhbihib29sZWFuVmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX0VRKGJvb2xl
YW5WYWx1ZSwgZmFsc2UpOworICAgICAgICBib29sZWFuVmFsdWUgPSB2YWx1ZS0+YXNCb29sZWFu
KCk7CisgICAgICAgIEVYUEVDVF9UUlVFKGJvb2xlYW5WYWx1ZSk7CisgICAgICAgIEVYUEVDVF9F
USgqYm9vbGVhblZhbHVlLCBmYWxzZSk7CiAgICAgfQogCiAgICAgewogICAgICAgICBSZWY8SlNP
Tjo6VmFsdWU+IHZhbHVlID0gSlNPTjo6VmFsdWU6OmNyZWF0ZSgxKTsKICAgICAgICAgRVhQRUNU
X1RSVUUodmFsdWUtPnR5cGUoKSA9PSBKU09OOjpWYWx1ZTo6VHlwZTo6SW50ZWdlcik7Ci0gICAg
ICAgIGludCBpbnRlZ2VyVmFsdWU7Ci0gICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlLT5hc0ludGVn
ZXIoaW50ZWdlclZhbHVlKSk7Ci0gICAgICAgIEVYUEVDVF9FUShpbnRlZ2VyVmFsdWUsIDEpOwor
ICAgICAgICBhdXRvIGludGVnZXJWYWx1ZSA9IHZhbHVlLT5hc0ludGVnZXIoKTsKKyAgICAgICAg
RVhQRUNUX1RSVUUoaW50ZWdlclZhbHVlKTsKKyAgICAgICAgRVhQRUNUX0VRKCppbnRlZ2VyVmFs
dWUsIDEpOwogCi0gICAgICAgIC8vIERvdWJsZXMgY2FuIGJlIGdldCBhcyBpbnRlZ2VycywgYnV0
IG5vdCB0aGUgb3RoZXIgd2F5IGFyb3VuZC4KLSAgICAgICAgZmxvYXQgZmxvYXRWYWx1ZTsKLSAg
ICAgICAgRVhQRUNUX0ZBTFNFKHZhbHVlLT5hc0RvdWJsZShmbG9hdFZhbHVlKSk7CisgICAgICAg
IC8vIEludGVnZXJzIGNhbiBiZSBnZXQgYXMgZG91Ymxlcy4KKyAgICAgICAgYXV0byBkb3VibGVW
YWx1ZSA9IHZhbHVlLT5hc0RvdWJsZSgpOworICAgICAgICBFWFBFQ1RfVFJVRShkb3VibGVWYWx1
ZSk7CisgICAgICAgIEVYUEVDVF9FUSgqZG91YmxlVmFsdWUsIDEpOwogCiAgICAgICAgIHZhbHVl
ID0gSlNPTjo6VmFsdWU6OmNyZWF0ZShzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpKTsK
LSAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUtPmFzSW50ZWdlcihpbnRlZ2VyVmFsdWUpKTsKLSAg
ICAgICAgRVhQRUNUX0VRKGludGVnZXJWYWx1ZSwgc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+Ojpt
YXgoKSk7Ci0gICAgICAgIHVuc2lnbmVkIHVuc2lnbmVkVmFsdWU7Ci0gICAgICAgIEVYUEVDVF9U
UlVFKHZhbHVlLT5hc0ludGVnZXIodW5zaWduZWRWYWx1ZSkpOwotICAgICAgICBsb25nIGxvbmdW
YWx1ZTsKLSAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUtPmFzSW50ZWdlcihsb25nVmFsdWUpKTsK
LSAgICAgICAgbG9uZyBsb25nIGxvbmdMb25nVmFsdWU7Ci0gICAgICAgIEVYUEVDVF9UUlVFKHZh
bHVlLT5hc0ludGVnZXIobG9uZ0xvbmdWYWx1ZSkpOwotICAgICAgICB1bnNpZ25lZCBsb25nIHVu
c2lnbmVkTG9uZ1ZhbHVlOwotICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+YXNJbnRlZ2VyKHVu
c2lnbmVkTG9uZ1ZhbHVlKSk7Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyB1bnNpZ25lZExv
bmdMb25nVmFsdWU7Ci0gICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlLT5hc0ludGVnZXIodW5zaWdu
ZWRMb25nTG9uZ1ZhbHVlKSk7CisgICAgICAgIGludGVnZXJWYWx1ZSA9IHZhbHVlLT5hc0ludGVn
ZXIoKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoaW50ZWdlclZhbHVlKTsKKyAgICAgICAgRVhQRUNU
X0VRKCppbnRlZ2VyVmFsdWUsIHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpOwogICAg
IH0KIAogICAgIHsKICAgICAgICAgUmVmPEpTT046OlZhbHVlPiB2YWx1ZSA9IEpTT046OlZhbHVl
OjpjcmVhdGUoMS41KTsKICAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUtPnR5cGUoKSA9PSBKU09O
OjpWYWx1ZTo6VHlwZTo6RG91YmxlKTsKLSAgICAgICAgZG91YmxlIGRvdWJsZVZhbHVlOwotICAg
ICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+YXNEb3VibGUoZG91YmxlVmFsdWUpKTsKLSAgICAgICAg
RVhQRUNUX0VRKGRvdWJsZVZhbHVlLCAxLjUpOwogCi0gICAgICAgIGZsb2F0IGZsb2F0VmFsdWU7
Ci0gICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlLT5hc0RvdWJsZShmbG9hdFZhbHVlKSk7CisgICAg
ICAgIGF1dG8gZG91YmxlVmFsdWUgPSB2YWx1ZS0+YXNEb3VibGUoKTsKKyAgICAgICAgRVhQRUNU
X1RSVUUoZG91YmxlVmFsdWUpOworICAgICAgICBFWFBFQ1RfRVEoKmRvdWJsZVZhbHVlLCAxLjUp
OwogCi0gICAgICAgIGludCBpbnRlZ2VyVmFsdWU7Ci0gICAgICAgIEVYUEVDVF9UUlVFKHZhbHVl
LT5hc0ludGVnZXIoaW50ZWdlclZhbHVlKSk7Ci0gICAgICAgIEVYUEVDVF9FUShpbnRlZ2VyVmFs
dWUsIHN0YXRpY19jYXN0PGludD4oMS41KSk7Ci0KLSAgICAgICAgdW5zaWduZWQgdW5zaWduZWRW
YWx1ZTsKLSAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUtPmFzSW50ZWdlcih1bnNpZ25lZFZhbHVl
KSk7Ci0gICAgICAgIGxvbmcgbG9uZ1ZhbHVlOwotICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+
YXNJbnRlZ2VyKGxvbmdWYWx1ZSkpOwotICAgICAgICBsb25nIGxvbmcgbG9uZ0xvbmdWYWx1ZTsK
LSAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUtPmFzSW50ZWdlcihsb25nTG9uZ1ZhbHVlKSk7Ci0g
ICAgICAgIHVuc2lnbmVkIGxvbmcgdW5zaWduZWRMb25nVmFsdWU7Ci0gICAgICAgIEVYUEVDVF9U
UlVFKHZhbHVlLT5hc0ludGVnZXIodW5zaWduZWRMb25nVmFsdWUpKTsKLSAgICAgICAgdW5zaWdu
ZWQgbG9uZyBsb25nIHVuc2lnbmVkTG9uZ0xvbmdWYWx1ZTsKLSAgICAgICAgRVhQRUNUX1RSVUUo
dmFsdWUtPmFzSW50ZWdlcih1bnNpZ25lZExvbmdMb25nVmFsdWUpKTsKKyAgICAgICAgLy8gRG91
YmxlcyBjYW4gYmUgZ2V0IGFzIGludGVnZXJzLgorICAgICAgICBhdXRvIGludGVnZXJWYWx1ZSA9
IHZhbHVlLT5hc0ludGVnZXIoKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoaW50ZWdlclZhbHVlKTsK
KyAgICAgICAgRVhQRUNUX0VRKCppbnRlZ2VyVmFsdWUsIHN0YXRpY19jYXN0PGludD4oMS41KSk7
CiAgICAgfQogCiAgICAgewogICAgICAgICBSZWY8SlNPTjo6VmFsdWU+IHZhbHVlID0gSlNPTjo6
VmFsdWU6OmNyZWF0ZSgid2Via2l0Iik7CiAgICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlLT50eXBl
KCkgPT0gSlNPTjo6VmFsdWU6OlR5cGU6OlN0cmluZyk7Ci0gICAgICAgIFN0cmluZyBzdHJpbmdW
YWx1ZTsKLSAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUtPmFzU3RyaW5nKHN0cmluZ1ZhbHVlKSk7
CisgICAgICAgIGF1dG8gc3RyaW5nVmFsdWUgPSB2YWx1ZS0+YXNTdHJpbmcoKTsKKyAgICAgICAg
RVhQRUNUX1RSVUUoISFzdHJpbmdWYWx1ZSk7CiAgICAgICAgIEVYUEVDVF9FUShzdHJpbmdWYWx1
ZSwgIndlYmtpdCIpOwogCiAgICAgICAgIFN0cmluZyBudWxsU3RyaW5nOwogICAgICAgICB2YWx1
ZSA9IEpTT046OlZhbHVlOjpjcmVhdGUobnVsbFN0cmluZyk7Ci0gICAgICAgIEVYUEVDVF9UUlVF
KHZhbHVlLT5hc1N0cmluZyhzdHJpbmdWYWx1ZSkpOworICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1
ZS0+dHlwZSgpID09IEpTT046OlZhbHVlOjpUeXBlOjpTdHJpbmcpOworICAgICAgICBzdHJpbmdW
YWx1ZSA9IHZhbHVlLT5hc1N0cmluZygpOworICAgICAgICBFWFBFQ1RfRkFMU0UoISFzdHJpbmdW
YWx1ZSk7CiAgICAgICAgIEVYUEVDVF9UUlVFKHN0cmluZ1ZhbHVlLmlzTnVsbCgpKTsKKyAgICAg
ICAgRVhQRUNUX1RSVUUoc3RyaW5nVmFsdWUuaXNFbXB0eSgpKTsKIAogICAgICAgICB2YWx1ZSA9
IEpTT046OlZhbHVlOjpjcmVhdGUoZW1wdHlTdHJpbmcoKSk7Ci0gICAgICAgIEVYUEVDVF9UUlVF
KHZhbHVlLT5hc1N0cmluZyhzdHJpbmdWYWx1ZSkpOworICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1
ZS0+dHlwZSgpID09IEpTT046OlZhbHVlOjpUeXBlOjpTdHJpbmcpOworICAgICAgICBzdHJpbmdW
YWx1ZSA9IHZhbHVlLT5hc1N0cmluZygpOworICAgICAgICBFWFBFQ1RfVFJVRSghIXN0cmluZ1Zh
bHVlKTsKICAgICAgICAgRVhQRUNUX0ZBTFNFKHN0cmluZ1ZhbHVlLmlzTnVsbCgpKTsKICAgICAg
ICAgRVhQRUNUX1RSVUUoc3RyaW5nVmFsdWUuaXNFbXB0eSgpKTsKICAgICB9CkBAIC0xMzEsNyAr
MTE3LDcgQEAgVEVTVChKU09OVmFsdWUsIENvbnN0cnVjdCkKICAgICB7CiAgICAgICAgIFJlZjxK
U09OOjpPYmplY3Q+IG9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgIEVY
UEVDVF9UUlVFKG9iamVjdC0+dHlwZSgpID09IEpTT046OlZhbHVlOjpUeXBlOjpPYmplY3QpOwot
ICAgICAgICBFWFBFQ1RfRVEob2JqZWN0LT5zaXplKCksIDApOworICAgICAgICBFWFBFQ1RfRVEo
b2JqZWN0LT5zaXplKCksIDBVKTsKICAgICB9CiAKICAgICB7CkBAIC0xNTQsNDggKzE0MCw0OCBA
QCBURVNUKEpTT05BcnJheSwgQmFzaWMpCiAgICAgRVhQRUNUX0VRKGFycmF5LT5sZW5ndGgoKSwg
MlUpOwogICAgIHZhbHVlID0gYXJyYXktPmdldCgxKTsKICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+
dHlwZSgpID09IEpTT046OlZhbHVlOjpUeXBlOjpCb29sZWFuKTsKLSAgICBib29sIGJvb2xlYW5W
YWx1ZTsKLSAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+YXNCb29sZWFuKGJvb2xlYW5WYWx1ZSkpOwot
ICAgIEVYUEVDVF9FUShib29sZWFuVmFsdWUsIHRydWUpOworICAgIGF1dG8gYm9vbGVhblZhbHVl
ID0gdmFsdWUtPmFzQm9vbGVhbigpOworICAgIEVYUEVDVF9UUlVFKGJvb2xlYW5WYWx1ZSk7Cisg
ICAgRVhQRUNUX0VRKCpib29sZWFuVmFsdWUsIHRydWUpOwogCiAgICAgYXJyYXktPnB1c2hJbnRl
Z2VyKDEpOwogICAgIEVYUEVDVF9FUShhcnJheS0+bGVuZ3RoKCksIDNVKTsKICAgICB2YWx1ZSA9
IGFycmF5LT5nZXQoMik7CiAgICAgRVhQRUNUX1RSVUUodmFsdWUtPnR5cGUoKSA9PSBKU09OOjpW
YWx1ZTo6VHlwZTo6SW50ZWdlcik7Ci0gICAgaW50IGludGVnZXJWYWx1ZTsKLSAgICBFWFBFQ1Rf
VFJVRSh2YWx1ZS0+YXNJbnRlZ2VyKGludGVnZXJWYWx1ZSkpOwotICAgIEVYUEVDVF9FUShpbnRl
Z2VyVmFsdWUsIDEpOworICAgIGF1dG8gaW50ZWdlclZhbHVlID0gdmFsdWUtPmFzSW50ZWdlcigp
OworICAgIEVYUEVDVF9UUlVFKGludGVnZXJWYWx1ZSk7CisgICAgRVhQRUNUX0VRKCppbnRlZ2Vy
VmFsdWUsIDEpOwogCiAgICAgYXJyYXktPnB1c2hEb3VibGUoMS41KTsKICAgICBFWFBFQ1RfRVEo
YXJyYXktPmxlbmd0aCgpLCA0VSk7CiAgICAgdmFsdWUgPSBhcnJheS0+Z2V0KDMpOwogICAgIEVY
UEVDVF9UUlVFKHZhbHVlLT50eXBlKCkgPT0gSlNPTjo6VmFsdWU6OlR5cGU6OkRvdWJsZSk7Ci0g
ICAgZG91YmxlIGRvdWJsZVZhbHVlOwotICAgIEVYUEVDVF9UUlVFKHZhbHVlLT5hc0RvdWJsZShk
b3VibGVWYWx1ZSkpOwotICAgIEVYUEVDVF9FUShkb3VibGVWYWx1ZSwgMS41KTsKKyAgICBhdXRv
IGRvdWJsZVZhbHVlID0gdmFsdWUtPmFzRG91YmxlKCk7CisgICAgRVhQRUNUX1RSVUUoZG91Ymxl
VmFsdWUpOworICAgIEVYUEVDVF9FUSgqZG91YmxlVmFsdWUsIDEuNSk7CiAKICAgICBhcnJheS0+
cHVzaFN0cmluZygid2Via2l0Iik7CiAgICAgRVhQRUNUX0VRKGFycmF5LT5sZW5ndGgoKSwgNVUp
OwogICAgIHZhbHVlID0gYXJyYXktPmdldCg0KTsKICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+dHlw
ZSgpID09IEpTT046OlZhbHVlOjpUeXBlOjpTdHJpbmcpOwotICAgIFN0cmluZyBzdHJpbmdWYWx1
ZTsKLSAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+YXNTdHJpbmcoc3RyaW5nVmFsdWUpKTsKKyAgICBh
dXRvIHN0cmluZ1ZhbHVlID0gdmFsdWUtPmFzU3RyaW5nKCk7CisgICAgRVhQRUNUX1RSVUUoISFz
dHJpbmdWYWx1ZSk7CiAgICAgRVhQRUNUX0VRKHN0cmluZ1ZhbHVlLCAid2Via2l0Iik7CiAKICAg
ICBhcnJheS0+cHVzaE9iamVjdChKU09OOjpPYmplY3Q6OmNyZWF0ZSgpKTsKICAgICBFWFBFQ1Rf
RVEoYXJyYXktPmxlbmd0aCgpLCA2VSk7CiAgICAgdmFsdWUgPSBhcnJheS0+Z2V0KDUpOwogICAg
IEVYUEVDVF9UUlVFKHZhbHVlLT50eXBlKCkgPT0gSlNPTjo6VmFsdWU6OlR5cGU6Ok9iamVjdCk7
Ci0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gb2JqZWN0VmFsdWU7Ci0gICAgRVhQRUNUX1RSVUUo
dmFsdWUtPmFzT2JqZWN0KG9iamVjdFZhbHVlKSk7Ci0gICAgRVhQRUNUX0VRKG9iamVjdFZhbHVl
LT5zaXplKCksIDApOworICAgIGF1dG8gb2JqZWN0VmFsdWUgPSB2YWx1ZS0+YXNPYmplY3QoKTsK
KyAgICBFWFBFQ1RfVFJVRShvYmplY3RWYWx1ZSk7CisgICAgRVhQRUNUX0VRKG9iamVjdFZhbHVl
LT5zaXplKCksIDBVKTsKIAogICAgIGFycmF5LT5wdXNoQXJyYXkoSlNPTjo6QXJyYXk6OmNyZWF0
ZSgpKTsKICAgICBFWFBFQ1RfRVEoYXJyYXktPmxlbmd0aCgpLCA3VSk7CiAgICAgdmFsdWUgPSBh
cnJheS0+Z2V0KDYpOwogICAgIEVYUEVDVF9UUlVFKHZhbHVlLT50eXBlKCkgPT0gSlNPTjo6VmFs
dWU6OlR5cGU6OkFycmF5KTsKLSAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IGFycmF5VmFsdWU7Ci0g
ICAgRVhQRUNUX1RSVUUodmFsdWUtPmFzQXJyYXkoYXJyYXlWYWx1ZSkpOworICAgIGF1dG8gYXJy
YXlWYWx1ZSA9IHZhbHVlLT5hc0FycmF5KCk7CisgICAgRVhQRUNUX1RSVUUoYXJyYXlWYWx1ZSk7
CiAgICAgRVhQRUNUX0VRKGFycmF5VmFsdWUtPmxlbmd0aCgpLCAwVSk7CiAKICAgICBhdXRvIGl0
ID0gYXJyYXktPmJlZ2luKCk7CkBAIC0yNTEsNDAgKzIzNyw0MCBAQCBURVNUKEpTT05BcnJheU9m
LCBCYXNpYykKICAgICBFWFBFQ1RfRVEoYXJyYXktPmxlbmd0aCgpLCAyVSk7CiAgICAgdmFsdWUg
PSBhcnJheS0+Z2V0KDEpOwogICAgIEVYUEVDVF9UUlVFKHZhbHVlLT50eXBlKCkgPT0gSlNPTjo6
VmFsdWU6OlR5cGU6OkludGVnZXIpOwotICAgIGludCBpbnRlZ2VyVmFsdWU7Ci0gICAgRVhQRUNU
X1RSVUUodmFsdWUtPmFzSW50ZWdlcihpbnRlZ2VyVmFsdWUpKTsKLSAgICBFWFBFQ1RfRVEoaW50
ZWdlclZhbHVlLCAxKTsKKyAgICBhdXRvIGludGVnZXJWYWx1ZSA9IHZhbHVlLT5hc0ludGVnZXIo
KTsKKyAgICBFWFBFQ1RfVFJVRShpbnRlZ2VyVmFsdWUpOworICAgIEVYUEVDVF9FUSgqaW50ZWdl
clZhbHVlLCAxKTsKIAogICAgIGFycmF5LT5hZGRJdGVtKDEuNSk7CiAgICAgRVhQRUNUX0VRKGFy
cmF5LT5sZW5ndGgoKSwgM1UpOwogICAgIHZhbHVlID0gYXJyYXktPmdldCgyKTsKICAgICBFWFBF
Q1RfVFJVRSh2YWx1ZS0+dHlwZSgpID09IEpTT046OlZhbHVlOjpUeXBlOjpEb3VibGUpOwotICAg
IGRvdWJsZSBkb3VibGVWYWx1ZTsKLSAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+YXNEb3VibGUoZG91
YmxlVmFsdWUpKTsKLSAgICBFWFBFQ1RfRVEoZG91YmxlVmFsdWUsIDEuNSk7CisgICAgYXV0byBk
b3VibGVWYWx1ZSA9IHZhbHVlLT5hc0RvdWJsZSgpOworICAgIEVYUEVDVF9UUlVFKGRvdWJsZVZh
bHVlKTsKKyAgICBFWFBFQ1RfRVEoKmRvdWJsZVZhbHVlLCAxLjUpOwogCiAgICAgYXJyYXktPmFk
ZEl0ZW0oIndlYmtpdCIpOwogICAgIEVYUEVDVF9FUShhcnJheS0+bGVuZ3RoKCksIDRVKTsKICAg
ICB2YWx1ZSA9IGFycmF5LT5nZXQoMyk7CiAgICAgRVhQRUNUX1RSVUUodmFsdWUtPnR5cGUoKSA9
PSBKU09OOjpWYWx1ZTo6VHlwZTo6U3RyaW5nKTsKLSAgICBTdHJpbmcgc3RyaW5nVmFsdWU7Ci0g
ICAgRVhQRUNUX1RSVUUodmFsdWUtPmFzU3RyaW5nKHN0cmluZ1ZhbHVlKSk7CisgICAgYXV0byBz
dHJpbmdWYWx1ZSA9IHZhbHVlLT5hc1N0cmluZygpOworICAgIEVYUEVDVF9UUlVFKCEhc3RyaW5n
VmFsdWUpOwogICAgIEVYUEVDVF9FUShzdHJpbmdWYWx1ZSwgIndlYmtpdCIpOwogCiAgICAgYXJy
YXktPmFkZEl0ZW0oSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSk7CiAgICAgRVhQRUNUX0VRKGFycmF5
LT5sZW5ndGgoKSwgNVUpOwogICAgIHZhbHVlID0gYXJyYXktPmdldCg0KTsKICAgICBFWFBFQ1Rf
VFJVRSh2YWx1ZS0+dHlwZSgpID09IEpTT046OlZhbHVlOjpUeXBlOjpPYmplY3QpOwotICAgIFJl
ZlB0cjxKU09OOjpPYmplY3Q+IG9iamVjdFZhbHVlOwotICAgIEVYUEVDVF9UUlVFKHZhbHVlLT5h
c09iamVjdChvYmplY3RWYWx1ZSkpOwotICAgIEVYUEVDVF9FUShvYmplY3RWYWx1ZS0+c2l6ZSgp
LCAwKTsKKyAgICBhdXRvIG9iamVjdFZhbHVlID0gdmFsdWUtPmFzT2JqZWN0KCk7CisgICAgRVhQ
RUNUX1RSVUUob2JqZWN0VmFsdWUpOworICAgIEVYUEVDVF9FUShvYmplY3RWYWx1ZS0+c2l6ZSgp
LCAwVSk7CiAKICAgICBhcnJheS0+YWRkSXRlbShKU09OOjpBcnJheTo6Y3JlYXRlKCkpOwogICAg
IEVYUEVDVF9FUShhcnJheS0+bGVuZ3RoKCksIDZVKTsKICAgICB2YWx1ZSA9IGFycmF5LT5nZXQo
NSk7CiAgICAgRVhQRUNUX1RSVUUodmFsdWUtPnR5cGUoKSA9PSBKU09OOjpWYWx1ZTo6VHlwZTo6
QXJyYXkpOwotICAgIFJlZlB0cjxKU09OOjpBcnJheT4gYXJyYXlWYWx1ZTsKLSAgICBFWFBFQ1Rf
VFJVRSh2YWx1ZS0+YXNBcnJheShhcnJheVZhbHVlKSk7CisgICAgYXV0byBhcnJheVZhbHVlID0g
dmFsdWUtPmFzQXJyYXkoKTsKKyAgICBFWFBFQ1RfVFJVRShhcnJheVZhbHVlKTsKICAgICBFWFBF
Q1RfRVEoYXJyYXlWYWx1ZS0+bGVuZ3RoKCksIDBVKTsKIAogICAgIGF1dG8gaXQgPSBhcnJheS0+
YmVnaW4oKTsKQEAgLTMyNCw0NSArMzEwLDQ1IEBAIFRFU1QoSlNPTk9iamVjdCwgQmFzaWMpCiAg
ICAgUmVmPEpTT046Ok9iamVjdD4gb2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKIAog
ICAgIG9iamVjdC0+c2V0VmFsdWUoIm51bGwiLCBKU09OOjpWYWx1ZTo6bnVsbCgpKTsKLSAgICBF
WFBFQ1RfRVEob2JqZWN0LT5zaXplKCksIDEpOwotICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gdmFs
dWU7Ci0gICAgRVhQRUNUX1RSVUUob2JqZWN0LT5nZXRWYWx1ZSgibnVsbCIsIHZhbHVlKSk7Cisg
ICAgRVhQRUNUX0VRKG9iamVjdC0+c2l6ZSgpLCAxVSk7CisgICAgYXV0byB2YWx1ZSA9IG9iamVj
dC0+Z2V0VmFsdWUoIm51bGwiKTsKKyAgICBFWFBFQ1RfVFJVRSh2YWx1ZSk7CiAgICAgRVhQRUNU
X1RSVUUodmFsdWUtPmlzTnVsbCgpKTsKIAogICAgIG9iamVjdC0+c2V0Qm9vbGVhbigiYm9vbGVh
biIsIHRydWUpOwotICAgIEVYUEVDVF9FUShvYmplY3QtPnNpemUoKSwgMik7Ci0gICAgYm9vbCBi
b29sZWFuVmFsdWU7Ci0gICAgRVhQRUNUX1RSVUUob2JqZWN0LT5nZXRCb29sZWFuKCJib29sZWFu
IiwgYm9vbGVhblZhbHVlKSk7Ci0gICAgRVhQRUNUX0VRKGJvb2xlYW5WYWx1ZSwgdHJ1ZSk7Cisg
ICAgRVhQRUNUX0VRKG9iamVjdC0+c2l6ZSgpLCAyVSk7CisgICAgYXV0byBib29sZWFuVmFsdWUg
PSBvYmplY3QtPmdldEJvb2xlYW4oImJvb2xlYW4iKTsKKyAgICBFWFBFQ1RfVFJVRShib29sZWFu
VmFsdWUpOworICAgIEVYUEVDVF9FUSgqYm9vbGVhblZhbHVlLCB0cnVlKTsKIAogICAgIG9iamVj
dC0+c2V0SW50ZWdlcigiaW50ZWdlciIsIDEpOwotICAgIEVYUEVDVF9FUShvYmplY3QtPnNpemUo
KSwgMyk7Ci0gICAgaW50IGludGVnZXJWYWx1ZTsKLSAgICBFWFBFQ1RfVFJVRShvYmplY3QtPmdl
dEludGVnZXIoImludGVnZXIiLCBpbnRlZ2VyVmFsdWUpKTsKLSAgICBFWFBFQ1RfRVEoaW50ZWdl
clZhbHVlLCAxKTsKKyAgICBFWFBFQ1RfRVEob2JqZWN0LT5zaXplKCksIDNVKTsKKyAgICBhdXRv
IGludGVnZXJWYWx1ZSA9IG9iamVjdC0+Z2V0SW50ZWdlcigiaW50ZWdlciIpOworICAgIEVYUEVD
VF9UUlVFKGludGVnZXJWYWx1ZSk7CisgICAgRVhQRUNUX0VRKCppbnRlZ2VyVmFsdWUsIDEpOwog
CiAgICAgb2JqZWN0LT5zZXREb3VibGUoImRvdWJsZSIsIDEuNSk7Ci0gICAgRVhQRUNUX0VRKG9i
amVjdC0+c2l6ZSgpLCA0KTsKLSAgICBkb3VibGUgZG91YmxlVmFsdWU7Ci0gICAgRVhQRUNUX1RS
VUUob2JqZWN0LT5nZXREb3VibGUoImRvdWJsZSIsIGRvdWJsZVZhbHVlKSk7Ci0gICAgRVhQRUNU
X0VRKGRvdWJsZVZhbHVlLCAxLjUpOworICAgIEVYUEVDVF9FUShvYmplY3QtPnNpemUoKSwgNFUp
OworICAgIGF1dG8gZG91YmxlVmFsdWUgPSBvYmplY3QtPmdldERvdWJsZSgiZG91YmxlIik7Cisg
ICAgRVhQRUNUX1RSVUUoZG91YmxlVmFsdWUpOworICAgIEVYUEVDVF9FUSgqZG91YmxlVmFsdWUs
IDEuNSk7CiAKICAgICBvYmplY3QtPnNldFN0cmluZygic3RyaW5nIiwgIndlYmtpdCIpOwotICAg
IEVYUEVDVF9FUShvYmplY3QtPnNpemUoKSwgNSk7Ci0gICAgU3RyaW5nIHN0cmluZ1ZhbHVlOwot
ICAgIEVYUEVDVF9UUlVFKG9iamVjdC0+Z2V0U3RyaW5nKCJzdHJpbmciLCBzdHJpbmdWYWx1ZSkp
OworICAgIEVYUEVDVF9FUShvYmplY3QtPnNpemUoKSwgNVUpOworICAgIGF1dG8gc3RyaW5nVmFs
dWUgPSBvYmplY3QtPmdldFN0cmluZygic3RyaW5nIik7CisgICAgRVhQRUNUX1RSVUUoISFzdHJp
bmdWYWx1ZSk7CiAgICAgRVhQRUNUX0VRKHN0cmluZ1ZhbHVlLCAid2Via2l0Iik7CiAKICAgICBv
YmplY3QtPnNldE9iamVjdCgib2JqZWN0IiwgSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSk7Ci0gICAg
RVhQRUNUX0VRKG9iamVjdC0+c2l6ZSgpLCA2KTsKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBv
YmplY3RWYWx1ZTsKLSAgICBFWFBFQ1RfVFJVRShvYmplY3QtPmdldE9iamVjdCgib2JqZWN0Iiwg
b2JqZWN0VmFsdWUpKTsKLSAgICBFWFBFQ1RfRVEob2JqZWN0VmFsdWUtPnNpemUoKSwgMCk7Cisg
ICAgRVhQRUNUX0VRKG9iamVjdC0+c2l6ZSgpLCA2VSk7CisgICAgYXV0byBvYmplY3RWYWx1ZSA9
IG9iamVjdC0+Z2V0T2JqZWN0KCJvYmplY3QiKTsKKyAgICBFWFBFQ1RfVFJVRShvYmplY3RWYWx1
ZSk7CisgICAgRVhQRUNUX0VRKG9iamVjdFZhbHVlLT5zaXplKCksIDBVKTsKIAogICAgIG9iamVj
dC0+c2V0QXJyYXkoImFycmF5IiwgSlNPTjo6QXJyYXk6OmNyZWF0ZSgpKTsKLSAgICBFWFBFQ1Rf
RVEob2JqZWN0LT5zaXplKCksIDcpOwotICAgIFJlZlB0cjxKU09OOjpBcnJheT4gYXJyYXlWYWx1
ZTsKLSAgICBFWFBFQ1RfVFJVRShvYmplY3QtPmdldEFycmF5KCJhcnJheSIsIGFycmF5VmFsdWUp
KTsKKyAgICBFWFBFQ1RfRVEob2JqZWN0LT5zaXplKCksIDdVKTsKKyAgICBhdXRvIGFycmF5VmFs
dWUgPSBvYmplY3QtPmdldEFycmF5KCJhcnJheSIpOworICAgIEVYUEVDVF9UUlVFKGFycmF5VmFs
dWUpOwogICAgIEVYUEVDVF9FUShhcnJheVZhbHVlLT5sZW5ndGgoKSwgMFUpOwogCiAgICAgVmVj
dG9yPGNvbnN0IGNoYXIqPiBrZXlzID0geyAibnVsbCIsICJib29sZWFuIiwgImludGVnZXIiLCAi
ZG91YmxlIiwgInN0cmluZyIsICJvYmplY3QiLCAiYXJyYXkiIH07CkBAIC0zNzYsMzEgKzM2Miwz
MSBAQCBURVNUKEpTT05PYmplY3QsIEJhc2ljKQogICAgIEVYUEVDVF9UUlVFKGtleXMuaXNFbXB0
eSgpKTsKIAogICAgIG9iamVjdC0+cmVtb3ZlKCJudWxsIik7Ci0gICAgRVhQRUNUX0VRKG9iamVj
dC0+c2l6ZSgpLCA2KTsKKyAgICBFWFBFQ1RfRVEob2JqZWN0LT5zaXplKCksIDZVKTsKICAgICBF
WFBFQ1RfVFJVRShvYmplY3QtPmZpbmQoIm51bGwiKSA9PSBvYmplY3QtPmVuZCgpKTsKIAogICAg
IG9iamVjdC0+cmVtb3ZlKCJib29sZWFuIik7Ci0gICAgRVhQRUNUX0VRKG9iamVjdC0+c2l6ZSgp
LCA1KTsKKyAgICBFWFBFQ1RfRVEob2JqZWN0LT5zaXplKCksIDVVKTsKICAgICBFWFBFQ1RfVFJV
RShvYmplY3QtPmZpbmQoImJvb2xlYW4iKSA9PSBvYmplY3QtPmVuZCgpKTsKIAogICAgIG9iamVj
dC0+cmVtb3ZlKCJpbnRlZ2VyIik7Ci0gICAgRVhQRUNUX0VRKG9iamVjdC0+c2l6ZSgpLCA0KTsK
KyAgICBFWFBFQ1RfRVEob2JqZWN0LT5zaXplKCksIDRVKTsKICAgICBFWFBFQ1RfVFJVRShvYmpl
Y3QtPmZpbmQoImludGVnZXIiKSA9PSBvYmplY3QtPmVuZCgpKTsKIAogICAgIG9iamVjdC0+cmVt
b3ZlKCJkb3VibGUiKTsKLSAgICBFWFBFQ1RfRVEob2JqZWN0LT5zaXplKCksIDMpOworICAgIEVY
UEVDVF9FUShvYmplY3QtPnNpemUoKSwgM1UpOwogICAgIEVYUEVDVF9UUlVFKG9iamVjdC0+Zmlu
ZCgiZG91YmxlIikgPT0gb2JqZWN0LT5lbmQoKSk7CiAKICAgICBvYmplY3QtPnJlbW92ZSgic3Ry
aW5nIik7Ci0gICAgRVhQRUNUX0VRKG9iamVjdC0+c2l6ZSgpLCAyKTsKKyAgICBFWFBFQ1RfRVEo
b2JqZWN0LT5zaXplKCksIDJVKTsKICAgICBFWFBFQ1RfVFJVRShvYmplY3QtPmZpbmQoInN0cmlu
ZyIpID09IG9iamVjdC0+ZW5kKCkpOwogCiAgICAgb2JqZWN0LT5yZW1vdmUoIm9iamVjdCIpOwot
ICAgIEVYUEVDVF9FUShvYmplY3QtPnNpemUoKSwgMSk7CisgICAgRVhQRUNUX0VRKG9iamVjdC0+
c2l6ZSgpLCAxVSk7CiAgICAgRVhQRUNUX1RSVUUob2JqZWN0LT5maW5kKCJvYmplY3QiKSA9PSBv
YmplY3QtPmVuZCgpKTsKIAogICAgIG9iamVjdC0+cmVtb3ZlKCJhcnJheSIpOwotICAgIEVYUEVD
VF9FUShvYmplY3QtPnNpemUoKSwgMCk7CisgICAgRVhQRUNUX0VRKG9iamVjdC0+c2l6ZSgpLCAw
VSk7CiAgICAgRVhQRUNUX1RSVUUob2JqZWN0LT5maW5kKCJhcnJheSIpID09IG9iamVjdC0+ZW5k
KCkpOwogfQogCkBAIC00NzksMjAxICs0NjUsMjA0IEBAIFRFU1QoSlNPTlZhbHVlLCBUb0pTT05T
dHJpbmcpCiBURVNUKEpTT05WYWx1ZSwgUGFyc2VKU09OKQogewogICAgIHsKLSAgICAgICAgUmVm
UHRyPEpTT046OlZhbHVlPiB2YWx1ZTsKLSAgICAgICAgRVhQRUNUX1RSVUUoSlNPTjo6VmFsdWU6
OnBhcnNlSlNPTigibnVsbCIsIHZhbHVlKSk7CisgICAgICAgIGF1dG8gdmFsdWUgPSBKU09OOjpW
YWx1ZTo6cGFyc2VKU09OKCJudWxsIik7CisgICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlKTsKICAg
ICAgICAgRVhQRUNUX1RSVUUodmFsdWUtPmlzTnVsbCgpKTsKICAgICB9CiAKICAgICB7Ci0gICAg
ICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gdmFsdWU7Ci0gICAgICAgIEVYUEVDVF9UUlVFKEpTT046
OlZhbHVlOjpwYXJzZUpTT04oInRydWUiLCB2YWx1ZSkpOworICAgICAgICBhdXRvIHZhbHVlID0g
SlNPTjo6VmFsdWU6OnBhcnNlSlNPTigidHJ1ZSIpOworICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1
ZSk7CiAgICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlLT50eXBlKCkgPT0gSlNPTjo6VmFsdWU6OlR5
cGU6OkJvb2xlYW4pOwotICAgICAgICBib29sIGJvb2xlYW5WYWx1ZTsKLSAgICAgICAgRVhQRUNU
X1RSVUUodmFsdWUtPmFzQm9vbGVhbihib29sZWFuVmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX0VR
KGJvb2xlYW5WYWx1ZSwgdHJ1ZSk7CisgICAgICAgIGF1dG8gYm9vbGVhblZhbHVlID0gdmFsdWUt
PmFzQm9vbGVhbigpOworICAgICAgICBFWFBFQ1RfVFJVRShib29sZWFuVmFsdWUpOworICAgICAg
ICBFWFBFQ1RfRVEoKmJvb2xlYW5WYWx1ZSwgdHJ1ZSk7CiAKLSAgICAgICAgRVhQRUNUX1RSVUUo
SlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiZmFsc2UiLCB2YWx1ZSkpOworICAgICAgICB2YWx1ZSA9
IEpTT046OlZhbHVlOjpwYXJzZUpTT04oImZhbHNlIik7CisgICAgICAgIEVYUEVDVF9UUlVFKHZh
bHVlKTsKICAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUtPnR5cGUoKSA9PSBKU09OOjpWYWx1ZTo6
VHlwZTo6Qm9vbGVhbik7Ci0gICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlLT5hc0Jvb2xlYW4oYm9v
bGVhblZhbHVlKSk7Ci0gICAgICAgIEVYUEVDVF9FUShib29sZWFuVmFsdWUsIGZhbHNlKTsKKyAg
ICAgICAgYm9vbGVhblZhbHVlID0gdmFsdWUtPmFzQm9vbGVhbigpOworICAgICAgICBFWFBFQ1Rf
VFJVRShib29sZWFuVmFsdWUpOworICAgICAgICBFWFBFQ1RfRVEoKmJvb2xlYW5WYWx1ZSwgZmFs
c2UpOwogICAgIH0KIAogICAgIHsKLSAgICAgICAgUmVmUHRyPEpTT046OlZhbHVlPiB2YWx1ZTsK
LSAgICAgICAgRVhQRUNUX1RSVUUoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiMSIsIHZhbHVlKSk7
CisgICAgICAgIGF1dG8gdmFsdWUgPSBKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCIxIik7CisgICAg
ICAgIEVYUEVDVF9UUlVFKHZhbHVlKTsKICAgICAgICAgLy8gTnVtYmVycyBhcmUgYWx3YXlzIHBh
cnNlZCBhcyBkb3VibGUuCiAgICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlLT50eXBlKCkgPT0gSlNP
Tjo6VmFsdWU6OlR5cGU6OkRvdWJsZSk7Ci0gICAgICAgIGRvdWJsZSBkb3VibGVWYWx1ZTsKLSAg
ICAgICAgRVhQRUNUX1RSVUUodmFsdWUtPmFzRG91YmxlKGRvdWJsZVZhbHVlKSk7Ci0gICAgICAg
IEVYUEVDVF9FUShkb3VibGVWYWx1ZSwgMS4wKTsKKyAgICAgICAgYXV0byBkb3VibGVWYWx1ZSA9
IHZhbHVlLT5hc0RvdWJsZSgpOworICAgICAgICBFWFBFQ1RfVFJVRShkb3VibGVWYWx1ZSk7Cisg
ICAgICAgIEVYUEVDVF9FUSgqZG91YmxlVmFsdWUsIDEuMCk7CiAKLSAgICAgICAgRVhQRUNUX1RS
VUUoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiMS41IiwgdmFsdWUpKTsKKyAgICAgICAgdmFsdWUg
PSBKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCIxLjUiKTsKKyAgICAgICAgRVhQRUNUX1RSVUUodmFs
dWUpOwogICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+dHlwZSgpID09IEpTT046OlZhbHVlOjpU
eXBlOjpEb3VibGUpOwotICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+YXNEb3VibGUoZG91Ymxl
VmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX0VRKGRvdWJsZVZhbHVlLCAxLjUpOworICAgICAgICBk
b3VibGVWYWx1ZSA9IHZhbHVlLT5hc0RvdWJsZSgpOworICAgICAgICBFWFBFQ1RfVFJVRShkb3Vi
bGVWYWx1ZSk7CisgICAgICAgIEVYUEVDVF9FUSgqZG91YmxlVmFsdWUsIDEuNSk7CiAgICAgfQog
CiAgICAgewotICAgICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHZhbHVlOwotICAgICAgICBFWFBF
Q1RfVFJVRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJcInN0cmluZ1wiIiwgdmFsdWUpKTsKKyAg
ICAgICAgYXV0byB2YWx1ZSA9IEpTT046OlZhbHVlOjpwYXJzZUpTT04oIlwic3RyaW5nXCIiKTsK
KyAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUpOwogICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+
dHlwZSgpID09IEpTT046OlZhbHVlOjpUeXBlOjpTdHJpbmcpOwotICAgICAgICBTdHJpbmcgc3Ry
aW5nVmFsdWU7Ci0gICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlLT5hc1N0cmluZyhzdHJpbmdWYWx1
ZSkpOworICAgICAgICBhdXRvIHN0cmluZ1ZhbHVlID0gdmFsdWUtPmFzU3RyaW5nKCk7CisgICAg
ICAgIEVYUEVDVF9UUlVFKCEhc3RyaW5nVmFsdWUpOwogICAgICAgICBFWFBFQ1RfRVEoc3RyaW5n
VmFsdWUsICJzdHJpbmciKTsKICAgICB9CiAKICAgICB7Ci0gICAgICAgIFJlZlB0cjxKU09OOjpW
YWx1ZT4gdmFsdWU7Ci0gICAgICAgIEVYUEVDVF9UUlVFKEpTT046OlZhbHVlOjpwYXJzZUpTT04o
IltdIiwgdmFsdWUpKTsKKyAgICAgICAgYXV0byB2YWx1ZSA9IEpTT046OlZhbHVlOjpwYXJzZUpT
T04oIltdIik7CisgICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlKTsKICAgICAgICAgRVhQRUNUX1RS
VUUodmFsdWUtPnR5cGUoKSA9PSBKU09OOjpWYWx1ZTo6VHlwZTo6QXJyYXkpOwotICAgICAgICBS
ZWZQdHI8SlNPTjo6QXJyYXk+IGFycmF5VmFsdWU7Ci0gICAgICAgIEVYUEVDVF9UUlVFKHZhbHVl
LT5hc0FycmF5KGFycmF5VmFsdWUpKTsKKyAgICAgICAgYXV0byBhcnJheVZhbHVlID0gdmFsdWUt
PmFzQXJyYXkoKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoYXJyYXlWYWx1ZSk7CiAgICAgICAgIEVY
UEVDVF9FUShhcnJheVZhbHVlLT5sZW5ndGgoKSwgMFUpOwogCi0gICAgICAgIEVYUEVDVF9UUlVF
KEpTT046OlZhbHVlOjpwYXJzZUpTT04oIltudWxsLCAxICwyLjUsW3tcImZvb1wiOlwiYmFyXCJ9
LHtcImJhelwiOmZhbHNlfV0sXCJ3ZWJraXRcIl0iLCB2YWx1ZSkpOworICAgICAgICB2YWx1ZSA9
IEpTT046OlZhbHVlOjpwYXJzZUpTT04oIltudWxsLCAxICwyLjUsW3tcImZvb1wiOlwiYmFyXCJ9
LHtcImJhelwiOmZhbHNlfV0sXCJ3ZWJraXRcIl0iKTsKKyAgICAgICAgRVhQRUNUX1RSVUUodmFs
dWUpOwogICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+dHlwZSgpID09IEpTT046OlZhbHVlOjpU
eXBlOjpBcnJheSk7Ci0gICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlLT5hc0FycmF5KGFycmF5VmFs
dWUpKTsKKyAgICAgICAgYXJyYXlWYWx1ZSA9IHZhbHVlLT5hc0FycmF5KCk7CisgICAgICAgIEVY
UEVDVF9UUlVFKGFycmF5VmFsdWUpOwogICAgICAgICBFWFBFQ1RfRVEoYXJyYXlWYWx1ZS0+bGVu
Z3RoKCksIDVVKTsKICAgICAgICAgYXV0byBpdCA9IGFycmF5VmFsdWUtPmJlZ2luKCk7Ci0gICAg
ICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gaXRlbVZhbHVlID0gaXQtPmdldCgpOwotICAgICAgICBF
WFBFQ1RfVFJVRShpdGVtVmFsdWUtPnR5cGUoKSA9PSBKU09OOjpWYWx1ZTo6VHlwZTo6TnVsbCk7
CisgICAgICAgIEVYUEVDVF9UUlVFKCgqaXQpLT50eXBlKCkgPT0gSlNPTjo6VmFsdWU6OlR5cGU6
Ok51bGwpOwogICAgICAgICArK2l0OwogICAgICAgICBFWFBFQ1RfRkFMU0UoaXQgPT0gYXJyYXlW
YWx1ZS0+ZW5kKCkpOwogCi0gICAgICAgIGl0ZW1WYWx1ZSA9IGl0LT5nZXQoKTsKLSAgICAgICAg
RVhQRUNUX1RSVUUoaXRlbVZhbHVlLT50eXBlKCkgPT0gSlNPTjo6VmFsdWU6OlR5cGU6OkRvdWJs
ZSk7Ci0gICAgICAgIGludCBpbnRlZ2VyVmFsdWU7Ci0gICAgICAgIEVYUEVDVF9UUlVFKGl0ZW1W
YWx1ZS0+YXNJbnRlZ2VyKGludGVnZXJWYWx1ZSkpOwotICAgICAgICBFWFBFQ1RfRVEoaW50ZWdl
clZhbHVlLCAxKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoKCppdCktPnR5cGUoKSA9PSBKU09OOjpW
YWx1ZTo6VHlwZTo6RG91YmxlKTsKKyAgICAgICAgYXV0byBpbnRlZ2VyVmFsdWUgPSAoKml0KS0+
YXNJbnRlZ2VyKCk7CisgICAgICAgIEVYUEVDVF9UUlVFKGludGVnZXJWYWx1ZSk7CisgICAgICAg
IEVYUEVDVF9FUSgqaW50ZWdlclZhbHVlLCAxKTsKICAgICAgICAgKytpdDsKICAgICAgICAgRVhQ
RUNUX0ZBTFNFKGl0ID09IGFycmF5VmFsdWUtPmVuZCgpKTsKIAotICAgICAgICBpdGVtVmFsdWUg
PSBpdC0+Z2V0KCk7Ci0gICAgICAgIEVYUEVDVF9UUlVFKGl0ZW1WYWx1ZS0+dHlwZSgpID09IEpT
T046OlZhbHVlOjpUeXBlOjpEb3VibGUpOwotICAgICAgICBkb3VibGUgZG91YmxlVmFsdWU7Ci0g
ICAgICAgIEVYUEVDVF9UUlVFKGl0ZW1WYWx1ZS0+YXNEb3VibGUoZG91YmxlVmFsdWUpKTsKLSAg
ICAgICAgRVhQRUNUX0VRKGRvdWJsZVZhbHVlLCAyLjUpOworICAgICAgICBFWFBFQ1RfVFJVRSgo
Kml0KS0+dHlwZSgpID09IEpTT046OlZhbHVlOjpUeXBlOjpEb3VibGUpOworICAgICAgICBhdXRv
IGRvdWJsZVZhbHVlID0gKCppdCktPmFzRG91YmxlKCk7CisgICAgICAgIEVYUEVDVF9UUlVFKGRv
dWJsZVZhbHVlKTsKKyAgICAgICAgRVhQRUNUX0VRKCpkb3VibGVWYWx1ZSwgMi41KTsKICAgICAg
ICAgKytpdDsKICAgICAgICAgRVhQRUNUX0ZBTFNFKGl0ID09IGFycmF5VmFsdWUtPmVuZCgpKTsK
IAotICAgICAgICBpdGVtVmFsdWUgPSBpdC0+Z2V0KCk7Ci0gICAgICAgIEVYUEVDVF9UUlVFKGl0
ZW1WYWx1ZS0+dHlwZSgpID09IEpTT046OlZhbHVlOjpUeXBlOjpBcnJheSk7Ci0gICAgICAgIFJl
ZlB0cjxKU09OOjpBcnJheT4gc3ViQXJyYXlWYWx1ZTsKLSAgICAgICAgRVhQRUNUX1RSVUUoaXRl
bVZhbHVlLT5hc0FycmF5KHN1YkFycmF5VmFsdWUpKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoKCpp
dCktPnR5cGUoKSA9PSBKU09OOjpWYWx1ZTo6VHlwZTo6QXJyYXkpOworICAgICAgICBhdXRvIHN1
YkFycmF5VmFsdWUgPSAoKml0KS0+YXNBcnJheSgpOworICAgICAgICBFWFBFQ1RfVFJVRShzdWJB
cnJheVZhbHVlKTsKICAgICAgICAgRVhQRUNUX0VRKHN1YkFycmF5VmFsdWUtPmxlbmd0aCgpLCAy
VSk7Ci0gICAgICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gb2JqZWN0VmFsdWUgPSBzdWJBcnJheVZh
bHVlLT5nZXQoMCk7CisgICAgICAgIGF1dG8gb2JqZWN0VmFsdWUgPSBzdWJBcnJheVZhbHVlLT5n
ZXQoMCk7CiAgICAgICAgIEVYUEVDVF9UUlVFKG9iamVjdFZhbHVlLT50eXBlKCkgPT0gSlNPTjo6
VmFsdWU6OlR5cGU6Ok9iamVjdCk7Ci0gICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG9iamVj
dDsKLSAgICAgICAgRVhQRUNUX1RSVUUob2JqZWN0VmFsdWUtPmFzT2JqZWN0KG9iamVjdCkpOwot
ICAgICAgICBFWFBFQ1RfRVEob2JqZWN0LT5zaXplKCksIDEpOwotICAgICAgICBTdHJpbmcgc3Ry
aW5nVmFsdWU7Ci0gICAgICAgIEVYUEVDVF9UUlVFKG9iamVjdC0+Z2V0U3RyaW5nKCJmb28iLCBz
dHJpbmdWYWx1ZSkpOworICAgICAgICBhdXRvIG9iamVjdCA9IG9iamVjdFZhbHVlLT5hc09iamVj
dCgpOworICAgICAgICBFWFBFQ1RfVFJVRShvYmplY3QpOworICAgICAgICBFWFBFQ1RfRVEob2Jq
ZWN0LT5zaXplKCksIDFVKTsKKyAgICAgICAgYXV0byBzdHJpbmdWYWx1ZSA9IG9iamVjdC0+Z2V0
U3RyaW5nKCJmb28iKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoISFzdHJpbmdWYWx1ZSk7CiAgICAg
ICAgIEVYUEVDVF9FUShzdHJpbmdWYWx1ZSwgImJhciIpOwogICAgICAgICBvYmplY3RWYWx1ZSA9
IHN1YkFycmF5VmFsdWUtPmdldCgxKTsKICAgICAgICAgRVhQRUNUX1RSVUUob2JqZWN0VmFsdWUt
PnR5cGUoKSA9PSBKU09OOjpWYWx1ZTo6VHlwZTo6T2JqZWN0KTsKLSAgICAgICAgRVhQRUNUX1RS
VUUob2JqZWN0VmFsdWUtPmFzT2JqZWN0KG9iamVjdCkpOwotICAgICAgICBFWFBFQ1RfRVEob2Jq
ZWN0LT5zaXplKCksIDEpOwotICAgICAgICBib29sIGJvb2xlYW5WYWx1ZTsKLSAgICAgICAgRVhQ
RUNUX1RSVUUob2JqZWN0LT5nZXRCb29sZWFuKCJiYXoiLCBib29sZWFuVmFsdWUpKTsKLSAgICAg
ICAgRVhQRUNUX0VRKGJvb2xlYW5WYWx1ZSwgZmFsc2UpOworICAgICAgICBvYmplY3QgPW9iamVj
dFZhbHVlLT5hc09iamVjdCgpOworICAgICAgICBFWFBFQ1RfVFJVRShvYmplY3QpOworICAgICAg
ICBFWFBFQ1RfRVEob2JqZWN0LT5zaXplKCksIDFVKTsKKyAgICAgICAgYXV0byBib29sZWFuVmFs
dWUgPSBvYmplY3QtPmdldEJvb2xlYW4oImJheiIpOworICAgICAgICBFWFBFQ1RfVFJVRShib29s
ZWFuVmFsdWUpOworICAgICAgICBFWFBFQ1RfRVEoKmJvb2xlYW5WYWx1ZSwgZmFsc2UpOwogICAg
ICAgICArK2l0OwogICAgICAgICBFWFBFQ1RfRkFMU0UoaXQgPT0gYXJyYXlWYWx1ZS0+ZW5kKCkp
OwogCi0gICAgICAgIGl0ZW1WYWx1ZSA9IGl0LT5nZXQoKTsKLSAgICAgICAgRVhQRUNUX1RSVUUo
aXRlbVZhbHVlLT50eXBlKCkgPT0gSlNPTjo6VmFsdWU6OlR5cGU6OlN0cmluZyk7Ci0gICAgICAg
IEVYUEVDVF9UUlVFKGl0ZW1WYWx1ZS0+YXNTdHJpbmcoc3RyaW5nVmFsdWUpKTsKKyAgICAgICAg
RVhQRUNUX1RSVUUoKCppdCktPnR5cGUoKSA9PSBKU09OOjpWYWx1ZTo6VHlwZTo6U3RyaW5nKTsK
KyAgICAgICAgc3RyaW5nVmFsdWUgPSAoKml0KS0+YXNTdHJpbmcoKTsKKyAgICAgICAgRVhQRUNU
X1RSVUUoISFzdHJpbmdWYWx1ZSk7CiAgICAgICAgIEVYUEVDVF9FUShzdHJpbmdWYWx1ZSwgIndl
YmtpdCIpOwogICAgICAgICArK2l0OwogICAgICAgICBFWFBFQ1RfVFJVRShpdCA9PSBhcnJheVZh
bHVlLT5lbmQoKSk7CiAgICAgfQogCiAgICAgewotICAgICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+
IHZhbHVlOwotICAgICAgICBFWFBFQ1RfVFJVRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJ7fSIs
IHZhbHVlKSk7CisgICAgICAgIGF1dG8gdmFsdWUgPSBKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJ7
fSIpOworICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1ZSk7CiAgICAgICAgIEVYUEVDVF9UUlVFKHZh
bHVlLT50eXBlKCkgPT0gSlNPTjo6VmFsdWU6OlR5cGU6Ok9iamVjdCk7Ci0gICAgICAgIFJlZlB0
cjxKU09OOjpPYmplY3Q+IG9iamVjdFZhbHVlOwotICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+
YXNPYmplY3Qob2JqZWN0VmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX0VRKG9iamVjdFZhbHVlLT5z
aXplKCksIDApOworICAgICAgICBhdXRvIG9iamVjdFZhbHVlID0gdmFsdWUtPmFzT2JqZWN0KCk7
CisgICAgICAgIEVYUEVDVF9UUlVFKG9iamVjdFZhbHVlKTsKKyAgICAgICAgRVhQRUNUX0VRKG9i
amVjdFZhbHVlLT5zaXplKCksIDBVKTsKIAotICAgICAgICBFWFBFQ1RfVFJVRShKU09OOjpWYWx1
ZTo6cGFyc2VKU09OKCJ7XCJmb29cIjogXCJiYXJcIiwgXCJiYXpcIjoge1wic3ViXCI6W251bGws
ZmFsc2VdfX0iLCB2YWx1ZSkpOworICAgICAgICB2YWx1ZSA9IEpTT046OlZhbHVlOjpwYXJzZUpT
T04oIntcImZvb1wiOiBcImJhclwiLCBcImJhelwiOiB7XCJzdWJcIjpbbnVsbCxmYWxzZV19fSIp
OworICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1ZSk7CiAgICAgICAgIEVYUEVDVF9UUlVFKHZhbHVl
LT50eXBlKCkgPT0gSlNPTjo6VmFsdWU6OlR5cGU6Ok9iamVjdCk7Ci0gICAgICAgIEVYUEVDVF9U
UlVFKHZhbHVlLT5hc09iamVjdChvYmplY3RWYWx1ZSkpOwotICAgICAgICBFWFBFQ1RfRVEob2Jq
ZWN0VmFsdWUtPnNpemUoKSwgMik7CisgICAgICAgIG9iamVjdFZhbHVlID0gdmFsdWUtPmFzT2Jq
ZWN0KCk7CisgICAgICAgIEVYUEVDVF9UUlVFKG9iamVjdFZhbHVlKTsKKyAgICAgICAgRVhQRUNU
X0VRKG9iamVjdFZhbHVlLT5zaXplKCksIDJVKTsKIAotICAgICAgICBTdHJpbmcgc3RyaW5nVmFs
dWU7Ci0gICAgICAgIEVYUEVDVF9UUlVFKG9iamVjdFZhbHVlLT5nZXRTdHJpbmcoImZvbyIsIHN0
cmluZ1ZhbHVlKSk7CisgICAgICAgIGF1dG8gc3RyaW5nVmFsdWUgPSBvYmplY3RWYWx1ZS0+Z2V0
U3RyaW5nKCJmb28iKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoISFzdHJpbmdWYWx1ZSk7CiAgICAg
ICAgIEVYUEVDVF9FUShzdHJpbmdWYWx1ZSwgImJhciIpOwogCi0gICAgICAgIFJlZlB0cjxKU09O
OjpPYmplY3Q+IG9iamVjdDsKLSAgICAgICAgRVhQRUNUX1RSVUUob2JqZWN0VmFsdWUtPmdldE9i
amVjdCgiYmF6Iiwgb2JqZWN0KSk7Ci0gICAgICAgIEVYUEVDVF9FUShvYmplY3QtPnNpemUoKSwg
MSk7Ci0gICAgICAgIFJlZlB0cjxKU09OOjpBcnJheT4gYXJyYXk7Ci0gICAgICAgIEVYUEVDVF9U
UlVFKG9iamVjdC0+Z2V0QXJyYXkoInN1YiIsIGFycmF5KSk7CisgICAgICAgIGF1dG8gb2JqZWN0
ID0gb2JqZWN0VmFsdWUtPmdldE9iamVjdCgiYmF6Iik7CisgICAgICAgIEVYUEVDVF9UUlVFKG9i
amVjdCk7CisgICAgICAgIEVYUEVDVF9FUShvYmplY3QtPnNpemUoKSwgMVUpOworICAgICAgICBh
dXRvIGFycmF5ID0gb2JqZWN0LT5nZXRBcnJheSgic3ViIik7CisgICAgICAgIEVYUEVDVF9UUlVF
KGFycmF5KTsKICAgICAgICAgRVhQRUNUX0VRKGFycmF5LT5sZW5ndGgoKSwgMlUpOwogICAgIH0K
IAogICAgIHsKLSAgICAgICAgUmVmUHRyPEpTT046OlZhbHVlPiB2YWx1ZTsKLSAgICAgICAgRVhQ
RUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIiwiLCB2YWx1ZSkpOwotICAgICAgICBF
WFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiXCJmb28iLCB2YWx1ZSkpOwotICAg
ICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiZm9vXCIiLCB2YWx1ZSkp
OwotICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiVHJVZSIsIHZh
bHVlKSk7Ci0gICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJGYWxz
ZSIsIHZhbHVlKSk7Ci0gICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09O
KCIxLmQiLCB2YWx1ZSkpOwotICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNl
SlNPTigiWzEsXSIsIHZhbHVlKSk7Ci0gICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6
cGFyc2VKU09OKCIxLDJdIiwgdmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZh
bHVlOjpwYXJzZUpTT04oIlsxLDIiLCB2YWx1ZSkpOwotICAgICAgICBFWFBFQ1RfRkFMU0UoSlNP
Tjo6VmFsdWU6OnBhcnNlSlNPTigiWzEgMl0iLCB2YWx1ZSkpOwotICAgICAgICBFWFBFQ1RfRkFM
U0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiWzEsMl1dIiwgdmFsdWUpKTsKLSAgICAgICAgRVhQ
RUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIlsxLDJdLCIsIHZhbHVlKSk7Ci0gICAg
ICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJ7Zm9vOlwiYmFyXCJ9Iiwg
dmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIntc
ImZvb1wiOmJhcn0iLCB2YWx1ZSkpOwotICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6
OnBhcnNlSlNPTigie1wiZm9vOlwiYmFyXCJ9IiwgdmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX0ZB
TFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIntmb29cIjpcImJhclwifSIsIHZhbHVlKSk7Ci0g
ICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJ7e1wiZm9vXCI6XCJi
YXJcIn19IiwgdmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJz
ZUpTT04oIntcImZvb1wiOlwiYmFyXCJ9LCIsIHZhbHVlKSk7Ci0gICAgICAgIEVYUEVDVF9GQUxT
RShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJbe1wiZm9vXCI6XCJiYXJcIn0se1wiYmF6XCI6ZmFs
c2V9LF0iLCB2YWx1ZSkpOwotICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNl
SlNPTigiW3tcImZvb1wiOntcImJhelwiOmZhbHNlfV0iLCB2YWx1ZSkpOworICAgICAgICBFWFBF
Q1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiLCIpKTsKKyAgICAgICAgRVhQRUNUX0ZB
TFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIlwiZm9vIikpOworICAgICAgICBFWFBFQ1RfRkFM
U0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiZm9vXCIiKSk7CisgICAgICAgIEVYUEVDVF9GQUxT
RShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJUclVlIikpOworICAgICAgICBFWFBFQ1RfRkFMU0Uo
SlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiRmFsc2UiKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShK
U09OOjpWYWx1ZTo6cGFyc2VKU09OKCIxLmQiKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShKU09O
OjpWYWx1ZTo6cGFyc2VKU09OKCJbMSxdIikpOworICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6
VmFsdWU6OnBhcnNlSlNPTigiMSwyXSIpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZh
bHVlOjpwYXJzZUpTT04oIlsxLDIiKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1
ZTo6cGFyc2VKU09OKCJbMSAyXSIpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVl
OjpwYXJzZUpTT04oIlsxLDJdXSIpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVl
OjpwYXJzZUpTT04oIlsxLDJdLCIpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVl
OjpwYXJzZUpTT04oIntmb286XCJiYXJcIn0iKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShKU09O
OjpWYWx1ZTo6cGFyc2VKU09OKCJ7XCJmb29cIjpiYXJ9IikpOworICAgICAgICBFWFBFQ1RfRkFM
U0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigie1wiZm9vOlwiYmFyXCJ9IikpOworICAgICAgICBF
WFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigie2Zvb1wiOlwiYmFyXCJ9IikpOwor
ICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigie3tcImZvb1wiOlwi
YmFyXCJ9fSIpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04o
IntcImZvb1wiOlwiYmFyXCJ9LCIpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVl
OjpwYXJzZUpTT04oIlt7XCJmb29cIjpcImJhclwifSx7XCJiYXpcIjpmYWxzZX0sXSIpKTsKKyAg
ICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIlt7XCJmb29cIjp7XCJi
YXpcIjpmYWxzZX1dIikpOwogICAgIH0KIAogICAgIHsKLSAgICAgICAgUmVmUHRyPEpTT046OlZh
bHVlPiB2YWx1ZTsKLSAgICAgICAgRVhQRUNUX1RSVUUoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigi
IFwiZm9vXCIgXG4iLCB2YWx1ZSkpOwotICAgICAgICBTdHJpbmcgc3RyaW5nVmFsdWU7Ci0gICAg
ICAgIEVYUEVDVF9UUlVFKHZhbHVlLT5hc1N0cmluZyhzdHJpbmdWYWx1ZSkpOworICAgICAgICBh
dXRvIHZhbHVlID0gSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiIFwiZm9vXCIgXG4iKTsKKyAgICAg
ICAgRVhQRUNUX1RSVUUodmFsdWUpOworICAgICAgICBhdXRvIHN0cmluZ1ZhbHVlID0gdmFsdWUt
PmFzU3RyaW5nKCk7CisgICAgICAgIEVYUEVDVF9UUlVFKCEhc3RyaW5nVmFsdWUpOwogICAgICAg
ICBFWFBFQ1RfRVEoImZvbyIsIHN0cmluZ1ZhbHVlKTsKICAgICB9CiAKICAgICB7Ci0gICAgICAg
IFJlZlB0cjxKU09OOjpWYWx1ZT4gdmFsdWU7Ci0gICAgICAgIEVYUEVDVF9UUlVFKEpTT046OlZh
bHVlOjpwYXJzZUpTT04oIiAxIiwgdmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX1RSVUUoSlNPTjo6
VmFsdWU6OnBhcnNlSlNPTigiXHQxIiwgdmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX1RSVUUoSlNP
Tjo6VmFsdWU6OnBhcnNlSlNPTigiXG4xIiwgdmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX1RSVUUo
SlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiMSAiLCB2YWx1ZSkpOwotICAgICAgICBFWFBFQ1RfVFJV
RShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCIxXHQiLCB2YWx1ZSkpOwotICAgICAgICBFWFBFQ1Rf
VFJVRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCIxXG4iLCB2YWx1ZSkpOwotICAgICAgICBFWFBF
Q1RfVFJVRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCIgMSAiLCB2YWx1ZSkpOwotICAgICAgICBF
WFBFQ1RfVFJVRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCIge30gIiwgdmFsdWUpKTsKLSAgICAg
ICAgRVhQRUNUX1RSVUUoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiIFtdICIsIHZhbHVlKSk7Ci0g
ICAgICAgIEVYUEVDVF9UUlVFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIlwiXFx4RkZcIiIsIHZh
bHVlKSk7Ci0gICAgICAgIEVYUEVDVF9UUlVFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIlwiXFx1
MTIzNFwiIiwgdmFsdWUpKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoSlNPTjo6VmFsdWU6OnBhcnNl
SlNPTigiIDEiKSk7CisgICAgICAgIEVYUEVDVF9UUlVFKEpTT046OlZhbHVlOjpwYXJzZUpTT04o
Ilx0MSIpKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiXG4x
IikpOworICAgICAgICBFWFBFQ1RfVFJVRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCIxICIpKTsK
KyAgICAgICAgRVhQRUNUX1RSVUUoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiMVx0IikpOworICAg
ICAgICBFWFBFQ1RfVFJVRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCIxXG4iKSk7CisgICAgICAg
IEVYUEVDVF9UUlVFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIiAxICIpKTsKKyAgICAgICAgRVhQ
RUNUX1RSVUUoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiIHt9ICIpKTsKKyAgICAgICAgRVhQRUNU
X1RSVUUoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiIFtdICIpKTsKKyAgICAgICAgRVhQRUNUX1RS
VUUoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiXCJcXHhGRlwiIikpOworICAgICAgICBFWFBFQ1Rf
VFJVRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJcIlxcdTEyMzRcIiIpKTsKIAotICAgICAgICBF
WFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiMSAxIiwgdmFsdWUpKTsKLSAgICAg
ICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oInt9IHt9IiwgdmFsdWUpKTsK
LSAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIltdIFtdIiwgdmFs
dWUpKTsKLSAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIlwiXFwi
LCB2YWx1ZSkpOwotICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigi
XCJcXHhGIiwgdmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJz
ZUpTT04oIlwiXFx4RlwiIiwgdmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZh
bHVlOjpwYXJzZUpTT04oIlwiXFx4RiBcIiIsIHZhbHVlKSk7Ci0gICAgICAgIEVYUEVDVF9GQUxT
RShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJcIlxcdTEiLCB2YWx1ZSkpOwotICAgICAgICBFWFBF
Q1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiXCJcXHUxXCIiLCB2YWx1ZSkpOwotICAg
ICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiXCJcXHUxICAgXCIiLCB2
YWx1ZSkpOwotICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiXCJc
XHUxMiIsIHZhbHVlKSk7Ci0gICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VK
U09OKCJcIlxcdTEyXCIiLCB2YWx1ZSkpOwotICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFs
dWU6OnBhcnNlSlNPTigiXCJcXHUxMiAgXCIiLCB2YWx1ZSkpOwotICAgICAgICBFWFBFQ1RfRkFM
U0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiXCJcXHUxMjMiLCB2YWx1ZSkpOwotICAgICAgICBF
WFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiXCJcXHUxMjNcIiIsIHZhbHVlKSk7
Ci0gICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJcIlxcdTEyMyBc
IiIsIHZhbHVlKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09O
KCIxIDEiKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJ7
fSB7fSIpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIltd
IFtdIikpOworICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiXCJc
XCIpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIlwiXFx4
RiIpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIlwiXFx4
RlwiIikpOworICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiXCJc
XHhGIFwiIikpOworICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigi
XCJcXHUxIikpOworICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigi
XCJcXHUxXCIiKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09O
KCJcIlxcdTEgICBcIiIpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJz
ZUpTT04oIlwiXFx1MTIiKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFy
c2VKU09OKCJcIlxcdTEyXCIiKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6
cGFyc2VKU09OKCJcIlxcdTEyICBcIiIpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZh
bHVlOjpwYXJzZUpTT04oIlwiXFx1MTIzIikpOworICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6
VmFsdWU6OnBhcnNlSlNPTigiXCJcXHUxMjNcIiIpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKEpT
T046OlZhbHVlOjpwYXJzZUpTT04oIlwiXFx1MTIzIFwiIikpOwogICAgIH0KIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>408313</attachid>
            <date>2020-09-08 23:36:16 -0700</date>
            <delta_ts>2020-09-08 23:51:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216302-20200908233615.patch</filename>
            <type>text/plain</type>
            <size>1525075</size>
            <attacher name="Devin Rousso">hi</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDdhMGViNGY4YTlhMTBhMTkyZjg2MGNjMTc1MjI4
ZDNkMWRhMzQ0NDEuLjM1Y2IwMThmMTA5ZDk4MTRiODk3MmE2MDcwM2M4ZTliYTY3YmU4ODYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyOCBAQAorMjAyMC0wOS0wOCAgRGV2
aW4gUm91c3NvICA8ZHJvdXNzb0BhcHBsZS5jb20+CisKKyAgICAgICAgV2ViIEluc3BlY3Rvcjog
bW9kZXJuaXplIGdlbmVyYXRlZCBiYWNrZW5kIHByb3RvY29sIGNvZGUKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNjMwMgorICAgICAgICA8cmRhcjov
L3Byb2JsZW0vNjg1NDc2NDk+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgUHJldmlvdXNseSwgdGhlIGluc3BlY3RvciBwcm90b2NvbCB3YXMgZXhwcmVz
c2VkIGluIGNvZGUgaW4gYSBzb21ld2hhdCBjb25mdXNpbmcgd2F5OgorICAgICAgICAgLSB0aGUg
ZXJyb3Igc3RyaW5nIHdhcyB0aGUgZmlyc3QgYXJndW1lbnQKKyAgICAgICAgIC0gcmVxdWlyZWQg
cGFyYW1ldGVycyB3ZXJlIGBUYCBvciBgY29uc3QgVCZgCisgICAgICAgICAtIG9wdGlvbmFsIHBh
cmFtZXRlcnMgd2VyZSBgY29uc3QgVCpgCisgICAgICAgICAtIGVudW0gcGFyYW1ldGVycyB3ZXJl
IHRoZSB1bmRlcmx5aW5nIHR5cGUgcmVxdWlyaW5nIHRoZSBiYWNrZW5kIGRpc3BhdGNoZXIgaGFu
ZGxlciB0bworICAgICAgICAgICBwcm9jZXNzIGl0IGluc3RlYWQgb2YgaXQgYmVpbmcgcHJlcHJv
Y2Vzc2VkCisgICAgICAgICAtIHJlcXVpcmVkIHJldHVybnMgd2VyZSBgVCZgCisgICAgICAgICAt
IG9wdGlvbmFsIHJldHVybnMgd2VyZSBgVCpgCisgICAgICAgIFRoaXMgZG9lc24ndCByZWFsbHkg
bWFrZSBmb3IgZWFzeS9vYnZpb3VzIHJlYWRpbmcgb2YgY29kZSBzaW5jZSB0aGUgb3JkZXIgb2Yg
YXJndW1lbnRzIGlzCisgICAgICAgIG5vdCB3ZWlyZCAoZS5nLiBlcnJvciBzdHJpbmcgZmlyc3Qp
LCBhbmQgdGhhdCB0aGVyZSBhcmUgcmVmZXJlbmNlcy9wb2ludGVycyB0byBwcmltaXRpdmUKKyAg
ICAgICAgdHlwZXMuCisKKyAgICAgICAgVGhpcyBwYXRjaCBjbGVhbnMgdXAgdGhlIGdlbmVyYXRl
ZCBpbnNwZWN0b3IgcHJvdG9jb2wgY29kZSB0byBiZToKKyAgICAgICAgIC0gcmVxdWlyZWQgcGFy
YW1ldGVycyBhcmUgYFRgIG9yIGBSZWY8VD4mJmAKKyAgICAgICAgIC0gb3B0aW9uYWwgcGFyYW1l
dGVycyBhcmUgYE9wdGlvbmFsPFQ+JiZgIG9yIGBSZWZQdHI8VD4mJmAKKyAgICAgICAgIC0gZW51
bSBwYXJhbWV0ZXJzIGFyZSBwcmVwcm9jZXNzZWQgYW5kIHBhc3NlZCB0byB0aGUgYmFja2VuZCBk
aXNwYXRjaGVyIGhhbmRsZXIgaWYgdmFsaWQKKyAgICAgICAgIC0gc3luY2hyb25vdXMgY29tbWFu
ZHMgcmV0dXJuIGBFeHBlY3RlZDxYLCBFcnJvclN0cmluZz5gIHVzaW5nIHRoZSBzYW1lIHR5cGVz
L3J1bGVzIGFib3ZlCisgICAgICAgICAgIHdoZXJlIGBYYCBpcyBlaXRoZXIgYSBzaW5nbGUgcmV0
dXJuIG9yIGEgYHN0ZDo6dHVwbGVgIG9mIG11bHRpcGxlIHJldHVybnMKKworICAgICAgICBUaGUg
b25lIGV4Y2VwdGlvbiB0byB0aGUgYWJvdmUgaXMgYFN0cmluZ2AsIHdoaWNoIGlzIGFscmVhZHkg
YSB0cmktc3RhdGUgb2YgYG51bGxTdHJpbmcoKWAsCisgICAgICAgIGBlbXB0eVN0cmluZygpYCwg
YW5kIHNvbWV0aGluZyBzZXQsIHNvIHRoZXJlJ3Mgbm8gbmVlZCB0byB1c2UgYE9wdGlvbmFsPFN0
cmluZz5gLgorCisgICAgICAgIEFsc28gdXNlIGBQcm90b2NvbGAgb2JqZWN0cy9gdHlwZWRlZnNg
IHdoZXJldmVyIHBvc3NpYmxlIHRvIGZ1cnRoZXIgcmVsYXRlIHRoZSBwcm90b2NvbAorICAgICAg
ICBKU09OIGFuZCB0aGUgYWN0dWFsIGJhY2tlbmQgZGlzcGF0Y2hlciBoYW5kbGVyIGltcGxlbWVu
dGF0aW9uLgorCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0b3Iu
cHk6CisgICAgICAgIChHZW5lcmF0b3IuZ2VuZXJhdGVfaW5jbHVkZXNfZnJvbV9lbnRyaWVzKToK
KyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2NwcF9nZW5lcmF0b3JfdGVtcGxh
dGVzLnB5OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vY3BwX2dlbmVyYXRv
ci5weToKKyAgICAgICAgKENwcEdlbmVyYXRvci5oZWxwZXJzX25hbWVzcGFjZSk6CisgICAgICAg
IChDcHBHZW5lcmF0b3IuY3BwX2dldHRlcl9tZXRob2RfZm9yX3R5cGUpOgorICAgICAgICAoQ3Bw
R2VuZXJhdG9yLmNwcF9zZXR0ZXJfbWV0aG9kX2Zvcl90eXBlKToKKyAgICAgICAgKENwcEdlbmVy
YXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZSk6CisgICAgICAgIChDcHBHZW5lcmF0b3Iu
Y3BwX3R5cGVfZm9yX3R5cGVfbWVtYmVyX2FyZ3VtZW50KTogQWRkZWQuCisgICAgICAgIChDcHBH
ZW5lcmF0b3IuY3BwX3R5cGVfZm9yX2NvbW1hbmRfcGFyYW1ldGVyKTogQWRkZWQuCisgICAgICAg
IChDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX2NvbW1hbmRfcmV0dXJuX2RlY2xhcmF0aW9uKTog
QWRkZWQuCisgICAgICAgIChDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX2NvbW1hbmRfcmV0dXJu
X2FyZ3VtZW50KTogQWRkZWQuCisgICAgICAgIChDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX2V2
ZW50X3BhcmFtZXRlcik6IEFkZGVkLgorICAgICAgICAoQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zv
cl9lbnVtKTogQWRkZWQuCisgICAgICAgIChDcHBHZW5lcmF0b3Iuc2hvdWxkX21vdmVfYXJndW1l
bnQpOiBBZGRlZC4KKyAgICAgICAgKENwcEdlbmVyYXRvci5zaG91bGRfcmVsZWFzZV9hcmd1bWVu
dCk6IEFkZGVkLgorICAgICAgICAoQ3BwR2VuZXJhdG9yLnNob3VsZF9kZXJlZmVyZW5jZV9hcmd1
bWVudCk6IEFkZGVkLgorICAgICAgICAoQ3BwR2VuZXJhdG9yLmNwcF9wcm90b2NvbF90eXBlX2Zv
cl90eXBlX21lbWJlcik6IERlbGV0ZWQuCisgICAgICAgIChDcHBHZW5lcmF0b3IuY3BwX3R5cGVf
Zm9yX3VuY2hlY2tlZF9mb3JtYWxfaW5fcGFyYW1ldGVyKTogRGVsZXRlZC4KKyAgICAgICAgKENw
cEdlbmVyYXRvci5jcHBfdHlwZV9mb3JfY2hlY2tlZF9mb3JtYWxfZXZlbnRfcGFyYW1ldGVyKTog
RGVsZXRlZC4KKyAgICAgICAgKENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3JfdHlwZV9tZW1iZXIp
OiBEZWxldGVkLgorICAgICAgICAoQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl90eXBlX3dpdGhf
bmFtZSk6IERlbGV0ZWQuCisgICAgICAgIChDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX2Zvcm1h
bF9vdXRfcGFyYW1ldGVyKTogRGVsZXRlZC4KKyAgICAgICAgKENwcEdlbmVyYXRvci5jcHBfdHlw
ZV9mb3JfZm9ybWFsX2FzeW5jX3BhcmFtZXRlcik6IERlbGV0ZWQuCisgICAgICAgIChDcHBHZW5l
cmF0b3IuY3BwX3R5cGVfZm9yX3N0YWNrX2luX3BhcmFtZXRlcik6IERlbGV0ZWQuCisgICAgICAg
IChDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX3N0YWNrX291dF9wYXJhbWV0ZXIpOiBEZWxldGVk
LgorICAgICAgICAoQ3BwR2VuZXJhdG9yLmNwcF9hc3NlcnRpb25fbWV0aG9kX2Zvcl90eXBlX21l
bWJlcik6IERlbGV0ZWQuCisgICAgICAgIChDcHBHZW5lcmF0b3IuY3BwX2Fzc2VydGlvbl9tZXRo
b2RfZm9yX3R5cGVfbWVtYmVyLmFzc2VydGlvbl9tZXRob2RfZm9yX3R5cGUpOiBEZWxldGVkLgor
ICAgICAgICAoQ3BwR2VuZXJhdG9yLnNob3VsZF91c2Vfd3JhcHBlcl9mb3JfcmV0dXJuX3R5cGUp
OiBEZWxldGVkLgorICAgICAgICAoQ3BwR2VuZXJhdG9yLnNob3VsZF91c2VfcmVmZXJlbmNlc19m
b3JfdHlwZSk6IERlbGV0ZWQuCisgICAgICAgIChDcHBHZW5lcmF0b3Iuc2hvdWxkX3Bhc3NfYnlf
Y29weV9mb3JfcmV0dXJuX3R5cGUpOiBEZWxldGVkLgorICAgICAgICAqIGluc3BlY3Rvci9zY3Jp
cHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2FsdGVybmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVh
ZGVyLnB5OgorICAgICAgICAoQ3BwQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5l
cmF0b3IuX2dlbmVyYXRlX3NlY29uZGFyeV9oZWFkZXJfaW5jbHVkZXMpOgorICAgICAgICAoQ3Bw
QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRlX2hhbmRs
ZXJfZGVjbGFyYXRpb25fZm9yX2NvbW1hbmQpOgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRz
L2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHk6CisgICAg
ICAgIChDcHBCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvci5nZW5lcmF0ZV9vdXRwdXQp
OgorICAgICAgICAoQ3BwQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRl
X3NlY29uZGFyeV9oZWFkZXJfaW5jbHVkZXMpOgorICAgICAgICAoQ3BwQmFja2VuZERpc3BhdGNo
ZXJIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRlX2hhbmRsZXJfZGVjbGFyYXRpb25zX2Zvcl9kb21h
aW4pOgorICAgICAgICAoQ3BwQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IuX2dlbmVy
YXRlX2hhbmRsZXJfZGVjbGFyYXRpb25fZm9yX2NvbW1hbmQpOgorICAgICAgICAoQ3BwQmFja2Vu
ZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRlX2FzeW5jX2hhbmRsZXJfZGVjbGFy
YXRpb25fZm9yX2NvbW1hbmQpOgorICAgICAgICAoQ3BwQmFja2VuZERpc3BhdGNoZXJIZWFkZXJH
ZW5lcmF0b3IuX2dlbmVyYXRlX2Rpc3BhdGNoZXJfZGVjbGFyYXRpb25fZm9yX2NvbW1hbmQpOgor
ICAgICAgICAoQ3BwQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRlX2Fu
b255bW91c19lbnVtX2Zvcl9wYXJhbWV0ZXIpOiBEZWxldGVkLgorICAgICAgICAqIGluc3BlY3Rv
ci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1l
bnRhdGlvbi5weToKKyAgICAgICAgKENwcEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25H
ZW5lcmF0b3IuX2dlbmVyYXRlX3NlY29uZGFyeV9oZWFkZXJfaW5jbHVkZXMpOgorICAgICAgICAo
Q3BwQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfc21h
bGxfZGlzcGF0Y2hlcl9zd2l0Y2hfaW1wbGVtZW50YXRpb25fZm9yX2RvbWFpbik6CisgICAgICAg
IChDcHBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9h
c3luY19kaXNwYXRjaGVyX2NsYXNzX2Zvcl9kb21haW4pOgorICAgICAgICAoQ3BwQmFja2VuZERp
c3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfZGlzcGF0Y2hlcl9pbXBs
ZW1lbnRhdGlvbl9mb3JfY29tbWFuZCk6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29k
ZWdlbi9nZW5lcmF0ZV9jcHBfZnJvbnRlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHk6CisgICAgICAg
IChDcHBGcm9udGVuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRlX3NlY29uZGFy
eV9oZWFkZXJfaW5jbHVkZXMpOgorICAgICAgICAoQ3BwRnJvbnRlbmREaXNwYXRjaGVySGVhZGVy
R2VuZXJhdG9yLl9nZW5lcmF0ZV9kaXNwYXRjaGVyX2RlY2xhcmF0aW9uX2Zvcl9ldmVudCk6Cisg
ICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfZnJvbnRlbmRf
ZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weToKKyAgICAgICAgKENwcEZyb250ZW5kRGlzcGF0
Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9zZWNvbmRhcnlfaGVhZGVyX2lu
Y2x1ZGVzKToKKyAgICAgICAgKENwcEZyb250ZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2Vu
ZXJhdG9yLl9nZW5lcmF0ZV9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uX2Zvcl9ldmVudCk6Cisg
ICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfcHJvdG9jb2xf
dHlwZXNfaGVhZGVyLnB5OgorICAgICAgICAoQ3BwUHJvdG9jb2xUeXBlc0hlYWRlckdlbmVyYXRv
ci5fZ2VuZXJhdGVfc2Vjb25kYXJ5X2hlYWRlcl9pbmNsdWRlcyk6CisgICAgICAgICogaW5zcGVj
dG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfcHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50
YXRpb24ucHk6CisgICAgICAgIChDcHBQcm90b2NvbFR5cGVzSW1wbGVtZW50YXRpb25HZW5lcmF0
b3IuX2dlbmVyYXRlX3NlY29uZGFyeV9oZWFkZXJfaW5jbHVkZXMpOgorICAgICAgICAoQ3BwUHJv
dG9jb2xUeXBlc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9lbnVtX2NvbnZlcnNp
b25fbWV0aG9kc19mb3JfZG9tYWluKToKKyAgICAgICAgKENwcFByb3RvY29sVHlwZXNJbXBsZW1l
bnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfb3Blbl9maWVsZF9uYW1lcyk6CisgICAgICAgIChD
cHBQcm90b2NvbFR5cGVzSW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX2Fzc2VydGlv
bl9mb3JfZW51bSk6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0
ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHk6CisgICAgICAgIChPYmpDQmFja2Vu
ZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRlX29iamNfaGFuZGxlcl9kZWNsYXJh
dGlvbl9mb3JfY29tbWFuZCk6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9n
ZW5lcmF0ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weToKKyAgICAg
ICAgKE9iakNCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0
ZV9oYW5kbGVyX2ltcGxlbWVudGF0aW9uX2Zvcl9jb21tYW5kKToKKyAgICAgICAgKE9iakNCYWNr
ZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9zdWNjZXNzX2Js
b2NrX2Zvcl9jb21tYW5kKToKKyAgICAgICAgKE9iakNCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVu
dGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9zdWNjZXNzX2Jsb2NrX2Zvcl9jb21tYW5kLmFuZCk6
CisgICAgICAgIChPYmpDQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5f
Z2VuZXJhdGVfY29udmVyc2lvbnNfZm9yX2NvbW1hbmQuaW5fcGFyYW1fZXhwcmVzc2lvbik6Cisg
ICAgICAgIChPYmpDQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2Vu
ZXJhdGVfY29udmVyc2lvbnNfZm9yX2NvbW1hbmQpOgorICAgICAgICAoT2JqQ0JhY2tlbmREaXNw
YXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX2ludm9jYXRpb25fZm9yX2Nv
bW1hbmQpOgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2Jq
Y19mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5OgorICAgICAgICAoT2JqQ0Zy
b250ZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9ldmVudCk6
CisgICAgICAgIChPYmpDRnJvbnRlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3Iu
X2dlbmVyYXRlX2V2ZW50X291dF9wYXJhbWV0ZXJzKToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2Ny
aXB0cy9jb2RlZ2VuL29iamNfZ2VuZXJhdG9yX3RlbXBsYXRlcy5weToKKyAgICAgICAgKiBpbnNw
ZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL29iamNfZ2VuZXJhdG9yLnB5OgorICAgICAgICAoT2JqQ0dl
bmVyYXRvci5wcm90b2NvbF90eXBlX2Zvcl90eXBlKToKKyAgICAgICAgKE9iakNHZW5lcmF0b3Iu
b2JqY190eXBlX2Zvcl9wYXJhbV9pbnRlcm5hbCk6CisgICAgICAgIChPYmpDR2VuZXJhdG9yLm9i
amNfcHJvdG9jb2xfaW1wb3J0X2V4cHJlc3Npb25fZm9yX3BhcmFtZXRlcik6CisKKyAgICAgICAg
KiBpbnNwZWN0b3IvcHJvdG9jb2wvUGFnZS5qc29uOgorICAgICAgICBOb3cgdGhhdCBlbnVtcyBh
cmUgcHJvY2Vzc2VkIGJlZm9yZSBiZWluZyBwYXNzZWQgdG8gYmFja2VuZCBkaXNwYWNoZXIgaGFu
ZGxlcnMsIHRoZQorICAgICAgICBgYXBwZWFyYW5jZWAgcGFyYW1ldGVyIG9mIGBQYWdlLnNldEZv
cmNlZEFwcGVhcmFuY2VgIG11c3QgYmUgbWFya2VkIGBvcHRpb25hbGAgYXMKKyAgICAgICAgdGhl
cmUncyBubyB3YXkgZm9yIGl0IHRvIGFjY2VwdCBhbiBlbXB0eSBzdHJpbmcsIGFzIHRoYXQncyBu
b3QgcG9zc2libGUgZm9yIGFuIGVudW0uCisKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0lu
c3BlY3RvckFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBZ2Vu
dC5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBdWRpdEFnZW50Lmg6
CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBdWRpdEFnZW50LmNwcDoKKyAg
ICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNvbnNvbGVBZ2VudC5oOgorICAgICAg
ICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ29uc29sZUFnZW50LmNwcDoKKyAgICAgICAg
KiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuaDoKKyAgICAgICAgKiBp
bnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwOgorICAgICAgICAqIGlu
c3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9ySGVhcEFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9y
L2FnZW50cy9JbnNwZWN0b3JIZWFwQWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2Vu
dHMvSW5zcGVjdG9yUnVudGltZUFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9J
bnNwZWN0b3JSdW50aW1lQWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5z
cGVjdG9yU2NyaXB0UHJvZmlsZXJBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9yU2NyaXB0UHJvZmlsZXJBZ2VudC5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL2Fn
ZW50cy9JbnNwZWN0b3JUYXJnZXRBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9yVGFyZ2V0QWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSlNH
bG9iYWxPYmplY3RBdWRpdEFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9KU0ds
b2JhbE9iamVjdEF1ZGl0QWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSlNH
bG9iYWxPYmplY3REZWJ1Z2dlckFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9K
U0dsb2JhbE9iamVjdERlYnVnZ2VyQWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2Vu
dHMvSlNHbG9iYWxPYmplY3RSdW50aW1lQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdl
bnRzL0pTR2xvYmFsT2JqZWN0UnVudGltZUFnZW50LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3Iv
SlNHbG9iYWxPYmplY3RDb25zb2xlQ2xpZW50LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSlNH
bG9iYWxPYmplY3RJbnNwZWN0b3JDb250cm9sbGVyLmNwcDoKKyAgICAgICAgRWxpZGVkIGJhY2tl
bmQgZGlzcGF0Y2hlciBoYW5kbGVyIGNoYW5nZXMgZGVzY3JpYmUgYWJvdmUuCisKKyAgICAgICAg
KiBiaW5kaW5ncy9TY3JpcHRWYWx1ZS5jcHA6CisgICAgICAgIChJbnNwZWN0b3I6OmpzVG9JbnNw
ZWN0b3JWYWx1ZSk6CisgICAgICAgICogaW5zcGVjdG9yL0FzeW5jU3RhY2tUcmFjZS5oOgorICAg
ICAgICAqIGluc3BlY3Rvci9Bc3luY1N0YWNrVHJhY2UuY3BwOgorICAgICAgICAoSW5zcGVjdG9y
OjpBc3luY1N0YWNrVHJhY2U6OmJ1aWxkSW5zcGVjdG9yT2JqZWN0IGNvbnN0KToKKyAgICAgICAg
KiBpbnNwZWN0b3IvQ29uc29sZU1lc3NhZ2UuY3BwOgorICAgICAgICAoSW5zcGVjdG9yOjpDb25z
b2xlTWVzc2FnZTo6YWRkVG9Gcm9udGVuZCk6CisgICAgICAgICogaW5zcGVjdG9yL0luamVjdGVk
U2NyaXB0QmFzZS5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbmplY3RlZFNjcmlwdEJhc2UuY3Bw
OgorICAgICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdEJhc2U6Om1ha2VFdmFsQ2FsbCk6
CisgICAgICAgIChJbnNwZWN0b3I6OkluamVjdGVkU2NyaXB0QmFzZTo6Y2hlY2tDYWxsUmVzdWx0
KToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHRCYXNlOjpjaGVja0FzeW5jQ2Fs
bFJlc3VsdCk6CisgICAgICAgICogaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0Lmg6CisgICAgICAg
ICogaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0LmNwcDoKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5q
ZWN0ZWRTY3JpcHQ6OmV4ZWN1dGUpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlw
dDo6ZXZhbHVhdGUpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdDo6Y2FsbEZ1
bmN0aW9uT24pOgorICAgICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdDo6ZXZhbHVhdGVP
bkNhbGxGcmFtZSk6CisgICAgICAgIChJbnNwZWN0b3I6OkluamVjdGVkU2NyaXB0OjpnZXRGdW5j
dGlvbkRldGFpbHMpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdDo6ZnVuY3Rp
b25EZXRhaWxzKToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHQ6OmdldFByZXZp
ZXcpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdDo6Z2V0UHJvcGVydGllcyk6
CisgICAgICAgIChJbnNwZWN0b3I6OkluamVjdGVkU2NyaXB0OjpnZXREaXNwbGF5YWJsZVByb3Bl
cnRpZXMpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdDo6Z2V0SW50ZXJuYWxQ
cm9wZXJ0aWVzKToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHQ6OmdldENvbGxl
Y3Rpb25FbnRyaWVzKToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHQ6OnNhdmVS
ZXN1bHQpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdDo6d3JhcENhbGxGcmFt
ZXMgY29uc3QpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdDo6d3JhcE9iamVj
dCBjb25zdCk6CisgICAgICAgIChJbnNwZWN0b3I6OkluamVjdGVkU2NyaXB0Ojp3cmFwSlNPTlN0
cmluZyBjb25zdCk6CisgICAgICAgIChJbnNwZWN0b3I6OkluamVjdGVkU2NyaXB0Ojp3cmFwVGFi
bGUgY29uc3QpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdDo6cHJldmlld1Zh
bHVlIGNvbnN0KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmNw
cDoKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOjppbmplY3RlZFNj
cmlwdEZvck9iamVjdElkKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXIuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXIuY3BwOgorICAgICAgICAoSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tC
YXNlOjpzZW5kU3VjY2Vzcyk6CisgICAgICAgIChJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVy
OjpkaXNwYXRjaCk6CisgICAgICAgIChJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyOjpzZW5k
UmVzcG9uc2UpOgorICAgICAgICAoSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0UHJv
cGVydHlWYWx1ZSk6CisgICAgICAgIChJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyOjpnZXRC
b29sZWFuKToKKyAgICAgICAgKEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXI6OmdldEludGVn
ZXIpOgorICAgICAgICAoSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0RG91YmxlKToK
KyAgICAgICAgKEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXI6OmdldFN0cmluZyk6CisgICAg
ICAgIChJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyOjpnZXRWYWx1ZSk6CisgICAgICAgIChJ
bnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyOjpnZXRPYmplY3QpOgorICAgICAgICAoSW5zcGVj
dG9yOjpCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0QXJyYXkpOgorICAgICAgICAoSW5zcGVjdG9yOjpj
YXN0VG9JbnRlZ2VyKTogRGVsZXRlZC4KKyAgICAgICAgKEluc3BlY3Rvcjo6Y2FzdFRvTnVtYmVy
KTogRGVsZXRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5o
OgorICAgICAgICAoSW5zcGVjdG9yOjpQcm90b2NvbDo6QmluZGluZ1RyYWl0czxKU09OOjpBcnJh
eU9mPFQ+Pjo6cnVudGltZUNhc3QpOgorICAgICAgICAoSW5zcGVjdG9yOjpQcm90b2NvbDo6Qmlu
ZGluZ1RyYWl0czxKU09OOjpBcnJheU9mPFQ+Pjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUp
OgorICAgICAgICAqIGluc3BlY3Rvci9yZW1vdGUvc29ja2V0L1JlbW90ZUluc3BlY3RvckNvbm5l
Y3Rpb25DbGllbnQuY3BwOgorICAgICAgICAoSW5zcGVjdG9yOjpSZW1vdGVJbnNwZWN0b3JDb25u
ZWN0aW9uQ2xpZW50OjpleHRyYWN0RXZlbnQpOgorICAgICAgICAqIHJ1bnRpbWUvVHlwZVNldC5j
cHA6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVNoYXBlOjppbnNwZWN0b3JSZXByZXNlbnRhdGlv
bik6CisgICAgICAgIGBKU09OYCBjbGFzc2VzIG5vdyB1c2UgYFJlZiYmYCB3aGVyZXZlciBwb3Nz
aWJsZSBhbmQgYE9wdGlvbmFsYCBpbnN0ZWFkIG9mIGFuIG91dCBwYXJhbWV0ZXIKKyAgICAgICAg
Zm9yIGBnZXQqYC9gYXMqYCBzbyB0aGF0IHZhbHVlcyBjYW4gYmUgbW9yZSBlYXNpbHkgbWFuaXB1
bGF0ZWQgYW5kIGNhbiBiZSBjb25maWRlbnRseSBrbm93bgorICAgICAgICB0byBleGlzdC4KKwor
ICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2VudW0tdmFsdWVzLmpzb246CisgICAg
ICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvY29tbWFuZC10YXJnZXRUeXBl
LW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uLXJlc3VsdDoKKyAgICAgICAgKiBp
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9jb21tYW5kcy13aXRoLWFzeW5jLWF0dHJp
YnV0ZS5qc29uLXJlc3VsdDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBl
Y3RlZC9jb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbi1y
ZXN1bHQ6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZGVmaW5p
dGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbi1yZXN1bHQ6CisgICAgICAgICogaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5qc29uLXJlc3Vs
dDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9kb21haW4tdGFy
Z2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbi1yZXN1bHQ6CisgICAg
ICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZG9tYWluLXRhcmdldFR5cGVz
Lmpzb24tcmVzdWx0OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVk
L2RvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbi1yZXN1bHQ6CisgICAgICAg
ICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZW51bS12YWx1ZXMuanNvbi1yZXN1
bHQ6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZXZlbnQtdGFy
Z2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbi1yZXN1bHQ6CisgICAg
ICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZXZlbnRzLXdpdGgtb3B0aW9u
YWwtcGFyYW1ldGVycy5qc29uLXJlc3VsdDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9leHBlY3RlZC9nZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbi1y
ZXN1bHQ6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvc2FtZS10
eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbi1yZXN1bHQ6CisgICAgICAgICogaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpz
b24tcmVzdWx0OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3No
b3VsZC1zdHJpcC1jb21tZW50cy5qc29uLXJlc3VsdDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5
cGUuanNvbi1yZXN1bHQ6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0
ZWQvdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24tcmVzdWx0OgorICAgICAgICAqIGlu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tZW51bS10eXBl
Lmpzb24tcmVzdWx0OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVk
L3R5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbi1yZXN1bHQ6CisgICAgICAgICogaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0
cy5qc29uLXJlc3VsdDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3Rl
ZC90eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0OgorICAgICAgICAqIGluc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3ZlcnNpb24uanNvbi1yZXN1bHQ6CisKIDIwMjAt
MDktMDUgIERldmluIFJvdXNzbyAgPGRyb3Vzc29AYXBwbGUuY29tPgogCiAgICAgICAgIFdlYiBJ
bnNwZWN0b3I6IGFsbG93IERPTSBicmVha3BvaW50cyB0byBiZSBjb25maWd1cmVkCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGQw
YjUxZWRiODA2MDg2MGI3YmIxM2MwNjJhNTAzMTFmYTQyNGYxZGEuLjIwMzZiZDMyOWQzMTAxMzk3
Yjg5YmFkNjQyYjhiOTYwNTkwNDZlNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTIgQEAKKzIwMjAtMDktMDgg
IERldmluIFJvdXNzbyAgPGRyb3Vzc29AYXBwbGUuY29tPgorCisgICAgICAgIFdlYiBJbnNwZWN0
b3I6IG1vZGVybml6ZSBnZW5lcmF0ZWQgYmFja2VuZCBwcm90b2NvbCBjb2RlCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTYzMDIKKyAgICAgICAgPHJk
YXI6Ly9wcm9ibGVtLzY4NTQ3NjQ5PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogd3RmL0pTT05WYWx1ZXMuaDoKKyAgICAgICAgKFdURjo6SlNPTklt
cGw6Ok9iamVjdEJhc2U6OnNldFZhbHVlKToKKyAgICAgICAgKFdURjo6SlNPTkltcGw6Ok9iamVj
dEJhc2U6OnNldE9iamVjdCk6CisgICAgICAgIChXVEY6OkpTT05JbXBsOjpPYmplY3RCYXNlOjpz
ZXRBcnJheSk6CisgICAgICAgIChXVEY6OkpTT05JbXBsOjpBcnJheUJhc2U6OnB1c2hWYWx1ZSk6
CisgICAgICAgIChXVEY6OkpTT05JbXBsOjpBcnJheUJhc2U6OnB1c2hPYmplY3QpOgorICAgICAg
ICAoV1RGOjpKU09OSW1wbDo6QXJyYXlCYXNlOjpwdXNoQXJyYXkpOgorICAgICAgICAoV1RGOjpK
U09OSW1wbDo6QXJyYXlPZjo6QXJyYXlPZik6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OkpTT05J
bXBsOjpBcnJheU9mOjpjYXN0ZWRBcnJheSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OkpTT05J
bXBsOjpBcnJheU9mOjphZGRJdGVtKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6SlNPTkltcGw6
OkFycmF5T2Y6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgICogd3RmL0pTT05WYWx1ZXMuY3Bw
OgorICAgICAgICAoV1RGOjpKU09OSW1wbDo6VmFsdWU6OmFzVmFsdWUpOgorICAgICAgICAoV1RG
OjpKU09OSW1wbDo6VmFsdWU6OmFzT2JqZWN0KToKKyAgICAgICAgKFdURjo6SlNPTkltcGw6OlZh
bHVlOjphc0FycmF5KToKKyAgICAgICAgKFdURjo6SlNPTkltcGw6OlZhbHVlOjpwYXJzZUpTT04p
OgorICAgICAgICAoV1RGOjpKU09OSW1wbDo6VmFsdWU6OmFzQm9vbGVhbiBjb25zdCk6CisgICAg
ICAgIChXVEY6OkpTT05JbXBsOjpWYWx1ZTo6YXNEb3VibGUgY29uc3QpOgorICAgICAgICAoV1RG
OjpKU09OSW1wbDo6VmFsdWU6OmFzSW50ZWdlciBjb25zdCk6CisgICAgICAgIChXVEY6OkpTT05J
bXBsOjpWYWx1ZTo6YXNTdHJpbmcgY29uc3QpOgorICAgICAgICAoV1RGOjpKU09OSW1wbDo6T2Jq
ZWN0QmFzZTo6YXNPYmplY3QpOgorICAgICAgICAoV1RGOjpKU09OSW1wbDo6T2JqZWN0QmFzZTo6
bWVtb3J5Q29zdCBjb25zdCk6CisgICAgICAgIChXVEY6OkpTT05JbXBsOjpPYmplY3RCYXNlOjpn
ZXRCb29sZWFuIGNvbnN0KToKKyAgICAgICAgKFdURjo6SlNPTkltcGw6Ok9iamVjdEJhc2U6Omdl
dERvdWJsZSBjb25zdCk6CisgICAgICAgIChXVEY6OkpTT05JbXBsOjpPYmplY3RCYXNlOjpnZXRJ
bnRlZ2VyIGNvbnN0KToKKyAgICAgICAgKFdURjo6SlNPTkltcGw6Ok9iamVjdEJhc2U6OmdldFN0
cmluZyBjb25zdCk6CisgICAgICAgIChXVEY6OkpTT05JbXBsOjpPYmplY3RCYXNlOjpnZXRPYmpl
Y3QgY29uc3QpOgorICAgICAgICAoV1RGOjpKU09OSW1wbDo6T2JqZWN0QmFzZTo6Z2V0QXJyYXkg
Y29uc3QpOgorICAgICAgICAoV1RGOjpKU09OSW1wbDo6T2JqZWN0QmFzZTo6Z2V0VmFsdWUgY29u
c3QpOgorICAgICAgICAoV1RGOjpKU09OSW1wbDo6T2JqZWN0QmFzZTo6T2JqZWN0QmFzZSk6Cisg
ICAgICAgIChXVEY6OkpTT05JbXBsOjpBcnJheUJhc2U6OmFzQXJyYXkpOgorICAgICAgICAoV1RG
OjpKU09OSW1wbDo6QXJyYXlCYXNlOjp3cml0ZUpTT04gY29uc3QpOgorICAgICAgICAoV1RGOjpK
U09OSW1wbDo6QXJyYXlCYXNlOjpBcnJheUJhc2UpOgorICAgICAgICAoV1RGOjpKU09OSW1wbDo6
QXJyYXlCYXNlOjpnZXQgY29uc3QpOgorICAgICAgICAoV1RGOjpKU09OSW1wbDo6QXJyYXlCYXNl
OjptZW1vcnlDb3N0IGNvbnN0KToKKyAgICAgICAgKFdURjo6SlNPTkltcGw6Ok9iamVjdEJhc2U6
Om9wZW5BY2Nlc3NvcnMpOiBEZWxldGVkLgorICAgICAgICBVc2UgYFJlZiYmYCB3aGVyZXZlciBw
b3NzaWJsZSBhbmQgYE9wdGlvbmFsYCBpbnN0ZWFkIG9mIGFuIG91dCBwYXJhbWV0ZXIgZm9yIGBn
ZXQqYC9gYXMqYAorICAgICAgICBzbyB0aGF0IHZhbHVlcyBjYW4gYmUgbW9yZSBlYXNpbHkgbWFu
aXB1bGF0ZWQgYW5kIGNhbiBiZSBjb25maWRlbnRseSBhc3N1bWVkIHRvIGV4aXN0LgorICAgICAg
ICBSZW1vdmUgdW51c2VkIG92ZXJsb2FkcyBhbmQgYWxsb3cgc3ViY2xhc3NlcyB0byBjYWxsIGBh
cypgIGluc3RlYWQgb2YgYG9wZW5BY2Nlc3NvcnNgIGFzCisgICAgICAgIHRoZXkncmUgZWZmZWN0
aXZlbHkgdGhlIHNhbWUgdGhpbmcuCisKIDIwMjAtMDktMDUgIE15bGVzIEMuIE1heGZpZWxkICA8
bW1heGZpZWxkQGFwcGxlLmNvbT4KIAogICAgICAgICBbQ29jb2FdIENURm9udElzU3lzdGVtVUlG
b250KCkgaXMgZmFzdGVyIHRoYW4gQ1RGb250RGVzY3JpcHRvcklzU3lzdGVtVUlGb250KCkvQ1RG
b250Q29weUZvbnREZXNjcmlwdG9yKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAwN2E1MzVkNGQ4NGMzZTlhYmY4
YjI1ZjBlYWE2ZDI4YmVlMzIzYjlkLi40NGUwOWNiMmU5Y2MxMjE0NGEzZWEyYzdjNzFjYzU1NTBh
YTc0MzgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTM5IEBACisyMDIwLTA5LTA4ICBEZXZpbiBS
b3Vzc28gIDxkcm91c3NvQGFwcGxlLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBtb2Rl
cm5pemUgZ2VuZXJhdGVkIGJhY2tlbmQgcHJvdG9jb2wgY29kZQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE2MzAyCisgICAgICAgIDxyZGFyOi8vcHJv
YmxlbS82ODU0NzY0OT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBQcmV2aW91c2x5LCB0aGUgaW5zcGVjdG9yIHByb3RvY29sIHdhcyBleHByZXNzZWQg
aW4gY29kZSBpbiBhIHNvbWV3aGF0IGNvbmZ1c2luZyB3YXk6CisgICAgICAgICAtIHRoZSBlcnJv
ciBzdHJpbmcgd2FzIHRoZSBmaXJzdCBhcmd1bWVudAorICAgICAgICAgLSByZXF1aXJlZCBwYXJh
bWV0ZXJzIHdlcmUgYFRgIG9yIGBjb25zdCBUJmAKKyAgICAgICAgIC0gb3B0aW9uYWwgcGFyYW1l
dGVycyB3ZXJlIGBjb25zdCBUKmAKKyAgICAgICAgIC0gZW51bSBwYXJhbWV0ZXJzIHdlcmUgdGhl
IHVuZGVybHlpbmcgdHlwZSByZXF1aXJpbmcgdGhlIGJhY2tlbmQgZGlzcGF0Y2hlciBoYW5kbGVy
IHRvCisgICAgICAgICAgIHByb2Nlc3MgaXQgaW5zdGVhZCBvZiBpdCBiZWluZyBwcmVwcm9jZXNz
ZWQKKyAgICAgICAgIC0gcmVxdWlyZWQgcmV0dXJucyB3ZXJlIGBUJmAKKyAgICAgICAgIC0gb3B0
aW9uYWwgcmV0dXJucyB3ZXJlIGBUKmAKKyAgICAgICAgVGhpcyBkb2Vzbid0IHJlYWxseSBtYWtl
IGZvciBlYXN5L29idmlvdXMgcmVhZGluZyBvZiBjb2RlIHNpbmNlIHRoZSBvcmRlciBvZiBhcmd1
bWVudHMgaXMKKyAgICAgICAgbm90IHdlaXJkIChlLmcuIGVycm9yIHN0cmluZyBmaXJzdCksIGFu
ZCB0aGF0IHRoZXJlIGFyZSByZWZlcmVuY2VzL3BvaW50ZXJzIHRvIHByaW1pdGl2ZQorICAgICAg
ICB0eXBlcy4KKworICAgICAgICBUaGlzIHBhdGNoIGNsZWFucyB1cCB0aGUgZ2VuZXJhdGVkIGlu
c3BlY3RvciBwcm90b2NvbCBjb2RlIHRvIGJlOgorICAgICAgICAgLSByZXF1aXJlZCBwYXJhbWV0
ZXJzIGFyZSBgVGAgb3IgYFJlZjxUPiYmYAorICAgICAgICAgLSBvcHRpb25hbCBwYXJhbWV0ZXJz
IGFyZSBgT3B0aW9uYWw8VD4mJmAgb3IgYFJlZlB0cjxUPiYmYAorICAgICAgICAgLSBlbnVtIHBh
cmFtZXRlcnMgYXJlIHByZXByb2Nlc3NlZCBhbmQgcGFzc2VkIHRvIHRoZSBiYWNrZW5kIGRpc3Bh
dGNoZXIgaGFuZGxlciBpZiB2YWxpZAorICAgICAgICAgLSBzeW5jaHJvbm91cyBjb21tYW5kcyBy
ZXR1cm4gYEV4cGVjdGVkPFgsIEVycm9yU3RyaW5nPmAgdXNpbmcgdGhlIHNhbWUgdHlwZXMvcnVs
ZXMgYWJvdmUKKyAgICAgICAgICAgd2hlcmUgYFhgIGlzIGVpdGhlciBhIHNpbmdsZSByZXR1cm4g
b3IgYSBgc3RkOjp0dXBsZWAgb2YgbXVsdGlwbGUgcmV0dXJucworCisgICAgICAgIFRoZSBvbmUg
ZXhjZXB0aW9uIHRvIHRoZSBhYm92ZSBpcyBgU3RyaW5nYCwgd2hpY2ggaXMgYWxyZWFkeSBhIHRy
aS1zdGF0ZSBvZiBgbnVsbFN0cmluZygpYCwKKyAgICAgICAgYGVtcHR5U3RyaW5nKClgLCBhbmQg
c29tZXRoaW5nIHNldCwgc28gdGhlcmUncyBubyBuZWVkIHRvIHVzZSBgT3B0aW9uYWw8U3RyaW5n
PmAuCisKKyAgICAgICAgQWxzbyB1c2UgYFByb3RvY29sYCBvYmplY3RzL2B0eXBlZGVmc2Agd2hl
cmV2ZXIgcG9zc2libGUgdG8gZnVydGhlciByZWxhdGUgdGhlIHByb3RvY29sCisgICAgICAgIEpT
T04gYW5kIHRoZSBhY3R1YWwgYmFja2VuZCBkaXNwYXRjaGVyIGhhbmRsZXIgaW1wbGVtZW50YXRp
b24uCisKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQXVkaXRSZXNvdXJjZXNPYmplY3Qu
Y3BwOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDYW52YXMuaDoKKyAgICAgICAgKiBp
bnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzLmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVj
dG9yQ29udHJvbGxlci5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hl
ZXQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHA6CisgICAg
ICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBbmltYXRpb25BZ2VudC5oOgorICAgICAg
ICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQW5pbWF0aW9uQWdlbnQuY3BwOgorICAgICAg
ICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50Lmg6Cisg
ICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQu
Y3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ1BVUHJvZmlsZXJBZ2Vu
dC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ1BVUHJvZmlsZXJBZ2Vu
dC5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDU1NBZ2VudC5oOgor
ICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwOgorICAgICAg
ICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ2FudmFzQWdlbnQuaDoKKyAgICAgICAgKiBp
bnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNhbnZhc0FnZW50LmNwcDoKKyAgICAgICAgKiBpbnNw
ZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2Fn
ZW50cy9JbnNwZWN0b3JET01BZ2VudC5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9J
bnNwZWN0b3JET01EZWJ1Z2dlckFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9J
bnNwZWN0b3JET01EZWJ1Z2dlckFnZW50LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRz
L0luc3BlY3RvckRPTVN0b3JhZ2VBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRz
L0luc3BlY3RvckRhdGFiYXNlQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0lu
c3BlY3RvckRhdGFiYXNlQWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5z
cGVjdG9ySW5kZXhlZERCQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3Bl
Y3RvckluZGV4ZWREQkFnZW50LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3Bl
Y3RvckxheWVyVHJlZUFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0
b3JMYXllclRyZWVBZ2VudC5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0
b3JNZW1vcnlBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yTWVt
b3J5QWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yTmV0d29y
a0FnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JOZXR3b3JrQWdl
bnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUGFnZUFnZW50Lmg6
CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwOgorICAg
ICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5oOgorICAgICAg
ICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5jcHA6CisgICAgICAg
ICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JXb3JrZXJBZ2VudC5oOgorICAgICAgICAqIGlu
c3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yV29ya2VyQWdlbnQuY3BwOgorICAgICAgICAqIGluc3Bl
Y3Rvci9hZ2VudHMvV2ViQ29uc29sZUFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50
cy9XZWJEZWJ1Z2dlckFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9XZWJEZWJ1
Z2dlckFnZW50LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL1dlYkhlYXBBZ2VudC5o
OgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvV2ViSGVhcEFnZW50LmNwcDoKKyAgICAgICAg
KiBpbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZUF1ZGl0QWdlbnQuaDoKKyAgICAgICAgKiBpbnNw
ZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZUF1ZGl0QWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rv
ci9hZ2VudHMvcGFnZS9QYWdlQ29uc29sZUFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2Fn
ZW50cy9wYWdlL1BhZ2VDb25zb2xlQWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2Vu
dHMvcGFnZS9QYWdlRE9NRGVidWdnZXJBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2Vu
dHMvcGFnZS9QYWdlRE9NRGVidWdnZXJBZ2VudC5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL2Fn
ZW50cy9wYWdlL1BhZ2VEZWJ1Z2dlckFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50
cy9wYWdlL1BhZ2VEZWJ1Z2dlckFnZW50LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRz
L3BhZ2UvUGFnZUhlYXBBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvcGFnZS9Q
YWdlSGVhcEFnZW50LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZU5l
dHdvcmtBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlTmV0d29y
a0FnZW50LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZVJ1bnRpbWVB
Z2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlUnVudGltZUFnZW50
LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9TZXJ2aWNlV29ya2VyQWdl
bnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9TZXJ2aWNlV29ya2VyQWdl
bnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlckF1ZGl0QWdl
bnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJDb25zb2xlQWdl
bnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJBdWRpdEFnZW50
LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJET01EZWJ1Z2dl
ckFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2VyRE9NRGVi
dWdnZXJBZ2VudC5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2Vy
RGVidWdnZXJBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtl
ckRlYnVnZ2VyQWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dv
cmtlck5ldHdvcmtBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dv
cmtlck5ldHdvcmtBZ2VudC5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy93b3JrZXIv
V29ya2VyUnVudGltZUFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy93b3JrZXIv
V29ya2VyUnVudGltZUFnZW50LmNwcDoKKyAgICAgICAgRWxpZGVkIGJhY2tlbmQgZGlzcGF0Y2hl
ciBoYW5kbGVyIGNoYW5nZXMgZGVzY3JpYmUgYWJvdmUuCisKKyAgICAgICAgKiBpbnNwZWN0b3Iv
Q29tbWFuZExpbmVBUElIb3N0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbW1hbmRMaW5lQVBJ
SG9zdDo6aW5zcGVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDb21tYW5kTGluZUFQSUhvc3Q6OmNs
ZWFyQ29uc29sZU1lc3NhZ2VzKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRl
bmRIb3N0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnZhbHVlUGF5bG9hZEZyb21KU09OVmFsdWUp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRIb3N0Ojpsb2dEaWFnbm9zdGlj
RXZlbnQpOgorICAgICAgICAqIGluc3BlY3Rvci9UaW1lbGluZVJlY29yZEZhY3RvcnkuaDoKKyAg
ICAgICAgKiBpbnNwZWN0b3IvVGltZWxpbmVSZWNvcmRGYWN0b3J5LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6YXBwZW5kTGF5b3V0Um9vdCk6CisgICAgICAg
ICogTW9kdWxlcy9hcHBsaWNhdGlvbm1hbmlmZXN0L0FwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25NYW5pZmVzdFBhcnNlcjo6cGFyc2VN
YW5pZmVzdCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyOjpw
YXJzZVN0YXJ0VVJMKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uTWFuaWZlc3RQYXJz
ZXI6OnBhcnNlRGlzcGxheSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbk1hbmlmZXN0
UGFyc2VyOjpwYXJzZVNjb3BlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uTWFuaWZl
c3RQYXJzZXI6OnBhcnNlR2VuZXJpY1N0cmluZyk6CisgICAgICAgICogTW9kdWxlcy9lbmNyeXB0
ZWRtZWRpYS9Jbml0RGF0YVJlZ2lzdHJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmV4dHJhY3RL
ZXlJRHNLZXlpZHMpOgorICAgICAgICAqIHBsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NETVV0aWxp
dGllcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDRE1VdGlsaXRpZXM6OnBhcnNlSlNPTk9iamVj
dCk6CisgICAgICAgICogcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJL
ZXkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VMaWNlbnNlRm9ybWF0KToKKyAgICAgICAg
KFdlYkNvcmU6OnBhcnNlTGljZW5zZVJlbGVhc2VBY2tub3dsZWRnZW1lbnRGb3JtYXQpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9DRE1GYWlyUGxheVN0cmVhbWlu
Zy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpleHRyYWN0U2luZkRhdGEpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NETUluc3RhbmNlRmFpclBsYXlTdHJl
YW1pbmdBVkZPYmpDLm1tOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VKU09OVmFsdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VTZXNzaW9uRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpD
Ojp1cGRhdGVMaWNlbnNlKToKKyAgICAgICAgYEpTT05gIGNsYXNzZXMgbm93IHVzZSBgUmVmJiZg
IHdoZXJldmVyIHBvc3NpYmxlIGFuZCBgT3B0aW9uYWxgIGluc3RlYWQgb2YgYW4gb3V0IHBhcmFt
ZXRlcgorICAgICAgICBmb3IgYGdldCpgL2BhcypgIHNvIHRoYXQgdmFsdWVzIGNhbiBiZSBtb3Jl
IGVhc2lseSBtYW5pcHVsYXRlZCBhbmQgY2FuIGJlIGNvbmZpZGVudGx5IGtub3duCisgICAgICAg
IHRvIGV4aXN0LgorCiAyMDIwLTA5LTA1ICBEZXZpbiBSb3Vzc28gIDxkcm91c3NvQGFwcGxlLmNv
bT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBhbGxvdyBET00gYnJlYWtwb2ludHMgdG8gYmUg
Y29uZmlndXJlZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkRyaXZlci9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViRHJpdmVyL0NoYW5nZUxvZwppbmRleCBkYTNiNjRjYWQ1ZWUxNDk1NjY0YzdmOGNiMGY3
ODQ4OTlmNTc4ODk0Li5mMWM5ZjBlNjI0MzYzMWExOTNmMWUyN2MyZmY5OGU1ZTBiNzg1Y2EyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViRHJpdmVyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViRHJp
dmVyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzNyBAQAorMjAyMC0wOS0wOCAgRGV2aW4gUm91c3Nv
ICA8ZHJvdXNzb0BhcHBsZS5jb20+CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogbW9kZXJuaXpl
IGdlbmVyYXRlZCBiYWNrZW5kIHByb3RvY29sIGNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNjMwMgorICAgICAgICA8cmRhcjovL3Byb2JsZW0v
Njg1NDc2NDk+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBDb21tYW5kUmVzdWx0LmNwcDoKKyAgICAgICAgKFdlYkRyaXZlcjo6Q29tbWFuZFJlc3Vs
dDo6Q29tbWFuZFJlc3VsdCk6CisgICAgICAgICogU2Vzc2lvbi5jcHA6CisgICAgICAgIChXZWJE
cml2ZXI6OmZpcnN0V2luZG93SGFuZGxlSW5SZXN1bHQpOgorICAgICAgICAoV2ViRHJpdmVyOjpT
ZXNzaW9uOjpnZXRUaW1lb3V0cyk6CisgICAgICAgIChXZWJEcml2ZXI6OlNlc3Npb246OmNyZWF0
ZVRvcExldmVsQnJvd3NpbmdDb250ZXh0KToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6
aGFuZGxlVXNlclByb21wdHMpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjpyZXBvcnRV
bmV4cGVjdGVkQWxlcnRPcGVuKToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6Z28pOgor
ICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjpnZXRDdXJyZW50VVJMKToKKyAgICAgICAgKFdl
YkRyaXZlcjo6U2Vzc2lvbjo6YmFjayk6CisgICAgICAgIChXZWJEcml2ZXI6OlNlc3Npb246OmZv
cndhcmQpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjpyZWZyZXNoKToKKyAgICAgICAg
KFdlYkRyaXZlcjo6U2Vzc2lvbjo6Z2V0VGl0bGUpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNz
aW9uOjpnZXRXaW5kb3dIYW5kbGUpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjpjbG9z
ZVRvcExldmVsQnJvd3NpbmdDb250ZXh0KToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6
c3dpdGNoVG9XaW5kb3cpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjpnZXRXaW5kb3dI
YW5kbGVzKToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6bmV3V2luZG93KToKKyAgICAg
ICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6c3dpdGNoVG9GcmFtZSk6CisgICAgICAgIChXZWJEcml2
ZXI6OlNlc3Npb246OnN3aXRjaFRvUGFyZW50RnJhbWUpOgorICAgICAgICAoV2ViRHJpdmVyOjpT
ZXNzaW9uOjpnZXRUb3BsZXZlbEJyb3dzaW5nQ29udGV4dFJlY3QpOgorICAgICAgICAoV2ViRHJp
dmVyOjpTZXNzaW9uOjpzZXRXaW5kb3dSZWN0KToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lv
bjo6bWF4aW1pemVXaW5kb3cpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjptaW5pbWl6
ZVdpbmRvdyk6CisgICAgICAgIChXZWJEcml2ZXI6OlNlc3Npb246OmZ1bGxzY3JlZW5XaW5kb3cp
OgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjpjcmVhdGVFbGVtZW50KToKKyAgICAgICAg
KFdlYkRyaXZlcjo6U2Vzc2lvbjo6ZXh0cmFjdEVsZW1lbnRJRCk6CisgICAgICAgIChXZWJEcml2
ZXI6OlNlc3Npb246OmNvbXB1dGVFbGVtZW50TGF5b3V0KToKKyAgICAgICAgKFdlYkRyaXZlcjo6
U2Vzc2lvbjo6ZmluZEVsZW1lbnRzKToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6Z2V0
QWN0aXZlRWxlbWVudCk6CisgICAgICAgIChXZWJEcml2ZXI6OlNlc3Npb246OmlzRWxlbWVudFNl
bGVjdGVkKToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6Z2V0RWxlbWVudFRleHQpOgor
ICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjpnZXRFbGVtZW50VGFnTmFtZSk6CisgICAgICAg
IChXZWJEcml2ZXI6OlNlc3Npb246OmdldEVsZW1lbnRSZWN0KToKKyAgICAgICAgKFdlYkRyaXZl
cjo6U2Vzc2lvbjo6aXNFbGVtZW50RW5hYmxlZCk6CisgICAgICAgIChXZWJEcml2ZXI6OlNlc3Np
b246OmlzRWxlbWVudERpc3BsYXllZCk6CisgICAgICAgIChXZWJEcml2ZXI6OlNlc3Npb246Omdl
dEVsZW1lbnRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjpnZXRFbGVt
ZW50UHJvcGVydHkpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjpnZXRFbGVtZW50Q1NT
VmFsdWUpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjp3YWl0Rm9yTmF2aWdhdGlvblRv
Q29tcGxldGUpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjplbGVtZW50SXNGaWxlVXBs
b2FkKToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6cGFyc2VFbGVtZW50SXNGaWxlVXBs
b2FkUmVzdWx0KToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6c2VsZWN0T3B0aW9uRWxl
bWVudCk6CisgICAgICAgIChXZWJEcml2ZXI6OlNlc3Npb246OmVsZW1lbnRDbGljayk6CisgICAg
ICAgIChXZWJEcml2ZXI6OlNlc3Npb246OmVsZW1lbnRJc0VkaXRhYmxlKToKKyAgICAgICAgKFdl
YkRyaXZlcjo6U2Vzc2lvbjo6ZWxlbWVudENsZWFyKToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vz
c2lvbjo6c2V0SW5wdXRGaWxlVXBsb2FkRmlsZXMpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNz
aW9uOjplbGVtZW50U2VuZEtleXMpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjpnZXRQ
YWdlU291cmNlKToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6aGFuZGxlU2NyaXB0UmVz
dWx0KToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6ZXhlY3V0ZVNjcmlwdCk6CisgICAg
ICAgIChXZWJEcml2ZXI6OlNlc3Npb246OnBlcmZvcm1Nb3VzZUludGVyYWN0aW9uKToKKyAgICAg
ICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6cGVyZm9ybUtleWJvYXJkSW50ZXJhY3Rpb25zKToKKyAg
ICAgICAgKFdlYkRyaXZlcjo6YnVpbHRBdXRvbWF0aW9uQ29va2llKToKKyAgICAgICAgKFdlYkRy
aXZlcjo6c2VyaWFsaXplQ29va2llKToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6Z2V0
QWxsQ29va2llcyk6CisgICAgICAgIChXZWJEcml2ZXI6OlNlc3Npb246OmdldE5hbWVkQ29va2ll
KToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6YWRkQ29va2llKToKKyAgICAgICAgKFdl
YkRyaXZlcjo6U2Vzc2lvbjo6ZGVsZXRlQ29va2llKToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vz
c2lvbjo6ZGVsZXRlQWxsQ29va2llcyk6CisgICAgICAgIChXZWJEcml2ZXI6OlNlc3Npb246OnBl
cmZvcm1BY3Rpb25zKToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6cmVsZWFzZUFjdGlv
bnMpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjpkaXNtaXNzQWxlcnQpOgorICAgICAg
ICAoV2ViRHJpdmVyOjpTZXNzaW9uOjphY2NlcHRBbGVydCk6CisgICAgICAgIChXZWJEcml2ZXI6
OlNlc3Npb246OmdldEFsZXJ0VGV4dCk6CisgICAgICAgIChXZWJEcml2ZXI6OlNlc3Npb246OnNl
bmRBbGVydFRleHQpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjp0YWtlU2NyZWVuc2hv
dCk6CisgICAgICAgICogU2Vzc2lvbkhvc3QuY3BwOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNz
aW9uSG9zdDo6ZGlzcGF0Y2hNZXNzYWdlKToKKyAgICAgICAgKiBXZWJEcml2ZXJTZXJ2aWNlLmg6
CisgICAgICAgICogV2ViRHJpdmVyU2VydmljZS5jcHA6CisgICAgICAgIChXZWJEcml2ZXI6Oldl
YkRyaXZlclNlcnZpY2U6OmhhbmRsZVJlcXVlc3QpOgorICAgICAgICAoV2ViRHJpdmVyOjpXZWJE
cml2ZXJTZXJ2aWNlOjpzZW5kUmVzcG9uc2UgY29uc3QpOgorICAgICAgICAoV2ViRHJpdmVyOjp2
YWx1ZUFzTnVtYmVySW5SYW5nZSk6CisgICAgICAgIChXZWJEcml2ZXI6OmRlc2VyaWFsaXplVGlt
ZW91dHMpOgorICAgICAgICAoV2ViRHJpdmVyOjpkZXNlcmlhbGl6ZVByb3h5KToKKyAgICAgICAg
KFdlYkRyaXZlcjo6V2ViRHJpdmVyU2VydmljZTo6cGFyc2VDYXBhYmlsaXRpZXMgY29uc3QpOgor
ICAgICAgICAoV2ViRHJpdmVyOjpXZWJEcml2ZXJTZXJ2aWNlOjpmaW5kU2Vzc2lvbk9yQ29tcGxl
dGVXaXRoRXJyb3IpOgorICAgICAgICAoV2ViRHJpdmVyOjpXZWJEcml2ZXJTZXJ2aWNlOjp2YWxp
ZGF0ZWRDYXBhYmlsaXRpZXMgY29uc3QpOgorICAgICAgICAoV2ViRHJpdmVyOjpXZWJEcml2ZXJT
ZXJ2aWNlOjptZXJnZUNhcGFiaWxpdGllcyBjb25zdCk6CisgICAgICAgIChXZWJEcml2ZXI6Oldl
YkRyaXZlclNlcnZpY2U6Om1hdGNoQ2FwYWJpbGl0aWVzIGNvbnN0KToKKyAgICAgICAgKFdlYkRy
aXZlcjo6V2ViRHJpdmVyU2VydmljZTo6cHJvY2Vzc0NhcGFiaWxpdGllcyBjb25zdCk6CisgICAg
ICAgIChXZWJEcml2ZXI6OldlYkRyaXZlclNlcnZpY2U6OmNyZWF0ZVNlc3Npb24pOgorICAgICAg
ICAoV2ViRHJpdmVyOjpXZWJEcml2ZXJTZXJ2aWNlOjpkZWxldGVTZXNzaW9uKToKKyAgICAgICAg
KFdlYkRyaXZlcjo6V2ViRHJpdmVyU2VydmljZTo6Z28pOgorICAgICAgICAoV2ViRHJpdmVyOjpX
ZWJEcml2ZXJTZXJ2aWNlOjpzZXRXaW5kb3dSZWN0KToKKyAgICAgICAgKFdlYkRyaXZlcjo6V2Vi
RHJpdmVyU2VydmljZTo6Y2xvc2VXaW5kb3cpOgorICAgICAgICAoV2ViRHJpdmVyOjpXZWJEcml2
ZXJTZXJ2aWNlOjpzd2l0Y2hUb1dpbmRvdyk6CisgICAgICAgIChXZWJEcml2ZXI6OldlYkRyaXZl
clNlcnZpY2U6Om5ld1dpbmRvdyk6CisgICAgICAgIChXZWJEcml2ZXI6OldlYkRyaXZlclNlcnZp
Y2U6OnN3aXRjaFRvRnJhbWUpOgorICAgICAgICAoV2ViRHJpdmVyOjpmaW5kRWxlbWVudE9yQ29t
cGxldGVXaXRoRXJyb3IpOgorICAgICAgICAoV2ViRHJpdmVyOjpmaW5kU3RyYXRlZ3lBbmRTZWxl
Y3Rvck9yQ29tcGxldGVXaXRoRXJyb3IpOgorICAgICAgICAoV2ViRHJpdmVyOjpXZWJEcml2ZXJT
ZXJ2aWNlOjpnZXRFbGVtZW50QXR0cmlidXRlKToKKyAgICAgICAgKFdlYkRyaXZlcjo6V2ViRHJp
dmVyU2VydmljZTo6Z2V0RWxlbWVudFByb3BlcnR5KToKKyAgICAgICAgKFdlYkRyaXZlcjo6V2Vi
RHJpdmVyU2VydmljZTo6Z2V0RWxlbWVudENTU1ZhbHVlKToKKyAgICAgICAgKFdlYkRyaXZlcjo6
V2ViRHJpdmVyU2VydmljZTo6ZWxlbWVudFNlbmRLZXlzKToKKyAgICAgICAgKFdlYkRyaXZlcjo6
ZmluZFNjcmlwdEFuZEFyZ3VtZW50c09yQ29tcGxldGVXaXRoRXJyb3IpOgorICAgICAgICAoV2Vi
RHJpdmVyOjpXZWJEcml2ZXJTZXJ2aWNlOjpnZXROYW1lZENvb2tpZSk6CisgICAgICAgIChXZWJE
cml2ZXI6OmRlc2VyaWFsaXplQ29va2llKToKKyAgICAgICAgKFdlYkRyaXZlcjo6V2ViRHJpdmVy
U2VydmljZTo6YWRkQ29va2llKToKKyAgICAgICAgKFdlYkRyaXZlcjo6V2ViRHJpdmVyU2Vydmlj
ZTo6ZGVsZXRlQ29va2llKToKKyAgICAgICAgKFdlYkRyaXZlcjo6cHJvY2Vzc1BhdXNlQWN0aW9u
KToKKyAgICAgICAgKFdlYkRyaXZlcjo6cHJvY2Vzc051bGxBY3Rpb24pOgorICAgICAgICAoV2Vi
RHJpdmVyOjpwcm9jZXNzS2V5QWN0aW9uKToKKyAgICAgICAgKFdlYkRyaXZlcjo6cHJvY2Vzc1Bv
aW50ZXJBY3Rpb24pOgorICAgICAgICAoV2ViRHJpdmVyOjpwcm9jZXNzUG9pbnRlclBhcmFtZXRl
cnMpOgorICAgICAgICAoV2ViRHJpdmVyOjpwcm9jZXNzSW5wdXRBY3Rpb25TZXF1ZW5jZSk6Cisg
ICAgICAgIChXZWJEcml2ZXI6OldlYkRyaXZlclNlcnZpY2U6OnBlcmZvcm1BY3Rpb25zKToKKyAg
ICAgICAgKFdlYkRyaXZlcjo6V2ViRHJpdmVyU2VydmljZTo6c2VuZEFsZXJ0VGV4dCk6CisgICAg
ICAgICogV2ViRHJpdmVyL2d0ay9XZWJEcml2ZXJTZXJ2aWNlR3RrLmNwcDoKKyAgICAgICAgKFdl
YkRyaXZlcjo6V2ViRHJpdmVyU2VydmljZTo6cGxhdGZvcm1NYXRjaENhcGFiaWxpdHkpOgorICAg
ICAgICAoV2ViRHJpdmVyOjpXZWJEcml2ZXJTZXJ2aWNlOjpwbGF0Zm9ybVZhbGlkYXRlQ2FwYWJp
bGl0eSk6CisgICAgICAgIChXZWJEcml2ZXI6OldlYkRyaXZlclNlcnZpY2U6OnBsYXRmb3JtUGFy
c2VDYXBhYmlsaXRpZXMpOgorICAgICAgICAqIFdlYkRyaXZlci93aW4vV2ViRHJpdmVyU2Vydmlj
ZVdpbi5jcHA6CisgICAgICAgIChXZWJEcml2ZXI6OldlYkRyaXZlclNlcnZpY2U6OnBsYXRmb3Jt
TWF0Y2hDYXBhYmlsaXR5KToKKyAgICAgICAgKFdlYkRyaXZlcjo6V2ViRHJpdmVyU2VydmljZTo6
cGxhdGZvcm1WYWxpZGF0ZUNhcGFiaWxpdHkpOgorICAgICAgICAoV2ViRHJpdmVyOjpXZWJEcml2
ZXJTZXJ2aWNlOjpwbGF0Zm9ybVBhcnNlQ2FwYWJpbGl0aWVzKToKKyAgICAgICAgKiBXZWJEcml2
ZXIvd3BlL1dlYkRyaXZlclNlcnZpY2VXUEUuY3BwOgorICAgICAgICAoV2ViRHJpdmVyOjpXZWJE
cml2ZXJTZXJ2aWNlOjpwbGF0Zm9ybU1hdGNoQ2FwYWJpbGl0eSk6CisgICAgICAgIChXZWJEcml2
ZXI6OldlYkRyaXZlclNlcnZpY2U6OnBsYXRmb3JtVmFsaWRhdGVDYXBhYmlsaXR5KToKKyAgICAg
ICAgKFdlYkRyaXZlcjo6V2ViRHJpdmVyU2VydmljZTo6cGxhdGZvcm1QYXJzZUNhcGFiaWxpdGll
cyk6CisgICAgICAgIGBKU09OYCBjbGFzc2VzIG5vdyB1c2UgYFJlZiYmYCB3aGVyZXZlciBwb3Nz
aWJsZSBhbmQgYE9wdGlvbmFsYCBpbnN0ZWFkIG9mIGFuIG91dCBwYXJhbWV0ZXIKKyAgICAgICAg
Zm9yIGBnZXQqYC9gYXMqYCBzbyB0aGF0IHZhbHVlcyBjYW4gYmUgbW9yZSBlYXNpbHkgbWFuaXB1
bGF0ZWQgYW5kIGNhbiBiZSBjb25maWRlbnRseSBrbm93bgorICAgICAgICB0byBleGlzdC4KKwog
MjAyMC0wNy0xNSAgRnVqaWkgSGlyb25vcmkgIDxIaXJvbm9yaS5GdWppaUBzb255LmNvbT4KIAog
ICAgICAgICBbQ01ha2VdW1dlYkRyaXZlcl0gR2VuZXJhdGluZyBXZWJEcml2ZXJBdG9tcy5jcHAg
aXMgcmFyZWx5IGZhaWxpbmcgYXMgIkltcG9ydEVycm9yOiBObyBtb2R1bGUgbmFtZWQganNtaW4i
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvQ2hhbmdlTG9nIGIvU291cmNlL1dl
Ykluc3BlY3RvclVJL0NoYW5nZUxvZwppbmRleCA5OWNjMWM3MDFiMTNlYjhlYmZmNGI4MjQ2OTll
NTQ4MDgwZTA5NmNkLi40Y2U4OTQ5Mjg1ODZjMzE4MjhlYzJhNjUwMTUyMTlmYTdlZWJjZjA0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNCBAQAorMjAyMC0wOS0wOCAgRGV2
aW4gUm91c3NvICA8ZHJvdXNzb0BhcHBsZS5jb20+CisKKyAgICAgICAgV2ViIEluc3BlY3Rvcjog
bW9kZXJuaXplIGdlbmVyYXRlZCBiYWNrZW5kIHByb3RvY29sIGNvZGUKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNjMwMgorICAgICAgICA8cmRhcjov
L3Byb2JsZW0vNjg1NDc2NDk+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0NTU01hbmFnZXIuanM6Cisg
ICAgICAgIChXSS5DU1NNYW5hZ2VyLnByb3RvdHlwZS5zZXQgZm9yY2VkQXBwZWFyYW5jZSk6Cisg
ICAgICAgIE5vdyB0aGF0IGVudW1zIGFyZSBwcm9jZXNzZWQgYmVmb3JlIGJlaW5nIHBhc3NlZCB0
byBiYWNrZW5kIGRpc3BhY2hlciBoYW5kbGVycywgdGhlCisgICAgICAgIGBhcHBlYXJhbmNlYCBw
YXJhbWV0ZXIgb2YgYFBhZ2Uuc2V0Rm9yY2VkQXBwZWFyYW5jZWAgbXVzdCBiZSBtYXJrZWQgYG9w
dGlvbmFsYCBhcworICAgICAgICB0aGVyZSdzIG5vIHdheSBmb3IgaXQgdG8gYWNjZXB0IGFuIGVt
cHR5IHN0cmluZywgYXMgdGhhdCdzIG5vdCBwb3NzaWJsZSBmb3IgYW4gZW51bS4KKyAgICAgICAg
QXMgc3VjaCwgcmV3b3JrIHRoZSBmcm9udGVuZCBsb2dpYyBmb3IgaW52b2tpbmcgYFBhZ2Uuc2V0
Rm9yY2VkQXBwZWFyYW5jZWAgdG8gaW5zdGVhZAorICAgICAgICBub3QgcHJvdmlkZSBhbiBgYXBw
ZWFyYW5jZWAgcGFyYW1ldGVyIGF0IGFsbCB3aGVuIHdhbnRpbmcgdG8gInVuc2V0IiBpdC4KKwor
ICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVmlld3MvU2V0dGluZ3NUYWJDb250ZW50Vmlldy5qczoK
KyAgICAgICAgKFdJLlNldHRpbmdzVGFiQ29udGVudFZpZXcucHJvdG90eXBlLl9jcmVhdGVDb25z
b2xlU2V0dGluZ3NWaWV3KToKKyAgICAgICAgTm93IHRoYXQgYWxsIGxvZ2dpbmcgY2hhbm5lbHMg
bWF0Y2hpbmcgYSBgQ29uc29sZS5DaGFubmVsU291cmNlYCBhcmUgcmV0dXJuZWQgaW5zdGVhZCBv
ZgorICAgICAgICBqdXN0IHRoZSBoYXJkY29kZWQgbGlzdCwgY2hlY2sgZm9yIGEgbWF0Y2hpbmcg
YFdJLlVJU3RyaW5nYCBiZWZvcmUgc2hvd2luZyBhIGA8c2VsZWN0PmAuCisKIDIwMjAtMDktMDUg
IERldmluIFJvdXNzbyAgPGRyb3Vzc29AYXBwbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0
b3I6IGFsbG93IERPTSBicmVha3BvaW50cyB0byBiZSBjb25maWd1cmVkCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDFj
ODc4MDc4MzQzYTMyMzdjZGM3YjgxNDJkOTRjMjU5NzJkYjlkNzcuLjJkMzk1ZTlkOWRiMmQ0OTNk
NzgyOTEzZjM1MTc4ODYyODEzODA4YmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdl
TG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTUgQEAKKzIwMjAt
MDktMDggIERldmluIFJvdXNzbyAgPGRyb3Vzc29AYXBwbGUuY29tPgorCisgICAgICAgIFdlYiBJ
bnNwZWN0b3I6IG1vZGVybml6ZSBnZW5lcmF0ZWQgYmFja2VuZCBwcm90b2NvbCBjb2RlCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTYzMDIKKyAgICAg
ICAgPHJkYXI6Ly9wcm9ibGVtLzY4NTQ3NjQ5PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFByZXZpb3VzbHksIHRoZSBpbnNwZWN0b3IgcHJvdG9jb2wg
d2FzIGV4cHJlc3NlZCBpbiBjb2RlIGluIGEgc29tZXdoYXQgY29uZnVzaW5nIHdheToKKyAgICAg
ICAgIC0gdGhlIGVycm9yIHN0cmluZyB3YXMgdGhlIGZpcnN0IGFyZ3VtZW50CisgICAgICAgICAt
IHJlcXVpcmVkIHBhcmFtZXRlcnMgd2VyZSBgVGAgb3IgYGNvbnN0IFQmYAorICAgICAgICAgLSBv
cHRpb25hbCBwYXJhbWV0ZXJzIHdlcmUgYGNvbnN0IFQqYAorICAgICAgICAgLSBlbnVtIHBhcmFt
ZXRlcnMgd2VyZSB0aGUgdW5kZXJseWluZyB0eXBlIHJlcXVpcmluZyB0aGUgYmFja2VuZCBkaXNw
YXRjaGVyIGhhbmRsZXIgdG8KKyAgICAgICAgICAgcHJvY2VzcyBpdCBpbnN0ZWFkIG9mIGl0IGJl
aW5nIHByZXByb2Nlc3NlZAorICAgICAgICAgLSByZXF1aXJlZCByZXR1cm5zIHdlcmUgYFQmYAor
ICAgICAgICAgLSBvcHRpb25hbCByZXR1cm5zIHdlcmUgYFQqYAorICAgICAgICBUaGlzIGRvZXNu
J3QgcmVhbGx5IG1ha2UgZm9yIGVhc3kvb2J2aW91cyByZWFkaW5nIG9mIGNvZGUgc2luY2UgdGhl
IG9yZGVyIG9mIGFyZ3VtZW50cyBpcworICAgICAgICBub3Qgd2VpcmQgKGUuZy4gZXJyb3Igc3Ry
aW5nIGZpcnN0KSwgYW5kIHRoYXQgdGhlcmUgYXJlIHJlZmVyZW5jZXMvcG9pbnRlcnMgdG8gcHJp
bWl0aXZlCisgICAgICAgIHR5cGVzLgorCisgICAgICAgIFRoaXMgcGF0Y2ggY2xlYW5zIHVwIHRo
ZSBnZW5lcmF0ZWQgaW5zcGVjdG9yIHByb3RvY29sIGNvZGUgdG8gYmU6CisgICAgICAgICAtIHJl
cXVpcmVkIHBhcmFtZXRlcnMgYXJlIGBUYCBvciBgUmVmPFQ+JiZgCisgICAgICAgICAtIG9wdGlv
bmFsIHBhcmFtZXRlcnMgYXJlIGBPcHRpb25hbDxUPiYmYCBvciBgUmVmUHRyPFQ+JiZgCisgICAg
ICAgICAtIGVudW0gcGFyYW1ldGVycyBhcmUgcHJlcHJvY2Vzc2VkIGFuZCBwYXNzZWQgdG8gdGhl
IGJhY2tlbmQgZGlzcGF0Y2hlciBoYW5kbGVyIGlmIHZhbGlkCisgICAgICAgICAtIHN5bmNocm9u
b3VzIGNvbW1hbmRzIHJldHVybiBgRXhwZWN0ZWQ8WCwgRXJyb3JTdHJpbmc+YCB1c2luZyB0aGUg
c2FtZSB0eXBlcy9ydWxlcyBhYm92ZQorICAgICAgICAgICB3aGVyZSBgWGAgaXMgZWl0aGVyIGEg
c2luZ2xlIHJldHVybiBvciBhIGBzdGQ6OnR1cGxlYCBvZiBtdWx0aXBsZSByZXR1cm5zCisKKyAg
ICAgICAgVGhlIG9uZSBleGNlcHRpb24gdG8gdGhlIGFib3ZlIGlzIGBTdHJpbmdgLCB3aGljaCBp
cyBhbHJlYWR5IGEgdHJpLXN0YXRlIG9mIGBudWxsU3RyaW5nKClgLAorICAgICAgICBgZW1wdHlT
dHJpbmcoKWAsIGFuZCBzb21ldGhpbmcgc2V0LCBzbyB0aGVyZSdzIG5vIG5lZWQgdG8gdXNlIGBP
cHRpb25hbDxTdHJpbmc+YC4KKworICAgICAgICBBbHNvIHVzZSBgUHJvdG9jb2xgIG9iamVjdHMv
YHR5cGVkZWZzYCB3aGVyZXZlciBwb3NzaWJsZSB0byBmdXJ0aGVyIHJlbGF0ZSB0aGUgcHJvdG9j
b2wKKyAgICAgICAgSlNPTiBhbmQgdGhlIGFjdHVhbCBiYWNrZW5kIGRpc3BhdGNoZXIgaGFuZGxl
ciBpbXBsZW1lbnRhdGlvbi4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BdXRvbWF0aW9uL0F1dG9t
YXRpb24uanNvbjoKKyAgICAgICAgYENvb3JkaW5hdGVTeXN0ZW1gIGhhcyBgUGFnZWAgYW5kIGBW
aWV3cG9ydGAgZW51bSB2YWx1ZXMsIGJ1dCBgV2ViQXV0b21hdGlvblNlc3Npb25gIGNoZWNrcwor
ICAgICAgICBmb3IgYCJQYWdlImAgYW5kIGAiTGF5b3V0Vmlld3BvcnQiYC4gQWRkIGEgYExheW91
dFZpZXdwb3J0YCBlbnVtIHZhbHVlIG5vdyB0aGF0IGVudW1zIGFyZQorICAgICAgICBwcm9jZXNz
ZWQgYmVmb3JlIGJlaW5nIHBhc3NlZCB0byBiYWNrZW5kIGRpc3BhY2hlciBoYW5kbGVycyB0byBw
cmVzZXJ2ZSBmdW5jdGlvbmFsaXR5LgorCisgICAgICAgICogVUlQcm9jZXNzL0luc3BlY3Rvci9B
Z2VudHMvSW5zcGVjdG9yQnJvd3NlckFnZW50Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0luc3Bl
Y3Rvci9BZ2VudHMvSW5zcGVjdG9yQnJvd3NlckFnZW50LmNwcDoKKyAgICAgICAgKiBVSVByb2Nl
c3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbk1hY3Jvcy5oOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmg6CisgICAgICAgICogVUlQ
cm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9BdXRvbWF0aW9uL21hYy9XZWJBdXRvbWF0aW9uU2Vzc2lvbk1hYy5tbToKKyAgICAg
ICAgRWxpZGVkIGJhY2tlbmQgZGlzcGF0Y2hlciBoYW5kbGVyIGNoYW5nZXMgZGVzY3JpYmUgYWJv
dmUuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yL3NvY2tldC9SZW1vdGVJbnNwZWN0
b3JDbGllbnQuY3BwOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbnNwZWN0b3JDbGllbnQ6OnNl
dFRhcmdldExpc3QpOgorICAgICAgICBgSlNPTmAgY2xhc3NlcyBub3cgdXNlIGBSZWYmJmAgd2hl
cmV2ZXIgcG9zc2libGUgYW5kIGBPcHRpb25hbGAgaW5zdGVhZCBvZiBhbiBvdXQgcGFyYW1ldGVy
CisgICAgICAgIGZvciBgZ2V0KmAvYGFzKmAgc28gdGhhdCB2YWx1ZXMgY2FuIGJlIG1vcmUgZWFz
aWx5IG1hbmlwdWxhdGVkIGFuZCBjYW4gYmUgY29uZmlkZW50bHkga25vd24KKyAgICAgICAgdG8g
ZXhpc3QuCisKIDIwMjAtMDktMDUgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgogCiAg
ICAgICAgIFtXZWJJRExdIFJlYWxpZ24gb3VyIElETCBleHRlbmRlZCBhdHRyaWJ1dGUgbmFtZXMg
d2l0aCB0aG9zZSBzcGVjaWZpZWQgaW4gV2ViSURMCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYmluZGluZ3MvU2NyaXB0VmFsdWUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2JpbmRpbmdzL1NjcmlwdFZhbHVlLmNwcAppbmRleCA2Yjg1M2M5MzFmMWRjZTkyNTNiYmFjMDZh
OTVlNmFhYzUyN2NmMjVhLi43OTY4YjkwYTczYjI4MmRmNTk4MjI1NmE2ZWRjYjJkNmU1NzQzOTZl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvU2NyaXB0VmFsdWUu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9TY3JpcHRWYWx1ZS5jcHAK
QEAgLTY5LDcgKzY5LDcgQEAgc3RhdGljIFJlZlB0cjxKU09OOjpWYWx1ZT4ganNUb0luc3BlY3Rv
clZhbHVlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmEKICAgICAgICAgICAgICAg
ICBhdXRvIGVsZW1lbnRWYWx1ZSA9IGpzVG9JbnNwZWN0b3JWYWx1ZShnbG9iYWxPYmplY3QsIGFy
cmF5LmdldEluZGV4KGdsb2JhbE9iamVjdCwgaSksIG1heERlcHRoKTsKICAgICAgICAgICAgICAg
ICBpZiAoIWVsZW1lbnRWYWx1ZSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0gICAgICAgICAgICAgICAgaW5zcGVjdG9yQXJyYXktPnB1c2hWYWx1ZShXVEZNb3ZlKGVsZW1l
bnRWYWx1ZSkpOworICAgICAgICAgICAgICAgIGluc3BlY3RvckFycmF5LT5wdXNoVmFsdWUoZWxl
bWVudFZhbHVlLnJlbGVhc2VOb25OdWxsKCkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAg
cmV0dXJuIGluc3BlY3RvckFycmF5OwogICAgICAgICB9CkBAIC04Miw3ICs4Miw3IEBAIHN0YXRp
YyBSZWZQdHI8SlNPTjo6VmFsdWU+IGpzVG9JbnNwZWN0b3JWYWx1ZShKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU1ZhCiAgICAgICAgICAgICBhdXRvIGluc3BlY3RvclZhbHVlID0ganNU
b0luc3BlY3RvclZhbHVlKGdsb2JhbE9iamVjdCwgb2JqZWN0LmdldChnbG9iYWxPYmplY3QsIG5h
bWUpLCBtYXhEZXB0aCk7CiAgICAgICAgICAgICBpZiAoIWluc3BlY3RvclZhbHVlKQogICAgICAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICAgICAgaW5zcGVjdG9yT2JqZWN0LT5z
ZXRWYWx1ZShuYW1lLnN0cmluZygpLCBXVEZNb3ZlKGluc3BlY3RvclZhbHVlKSk7CisgICAgICAg
ICAgICBpbnNwZWN0b3JPYmplY3QtPnNldFZhbHVlKG5hbWUuc3RyaW5nKCksIGluc3BlY3RvclZh
bHVlLnJlbGVhc2VOb25OdWxsKCkpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBpbnNwZWN0
b3JPYmplY3Q7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9Bc3luY1N0YWNrVHJhY2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9Bc3luY1N0YWNrVHJhY2UuY3BwCmluZGV4IDU0NTBlMmYzYzAwOWM2MDE4Y2Y5YzUzMGEwMzZj
M2RiN2E2MzQ1MGUuLmE1OTYzOTVjYmVhNzkxZTcwYmUzZTIzNjJmZTU3ZjQzODM0YTU5NGEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvQXN5bmNTdGFja1RyYWNl
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0FzeW5jU3RhY2tUcmFj
ZS5jcHAKQEAgLTk3LDcgKzk3LDcgQEAgdm9pZCBBc3luY1N0YWNrVHJhY2U6OmRpZENhbmNlbEFz
eW5jQ2FsbCgpCiAgICAgbV9zdGF0ZSA9IFN0YXRlOjpDYW5jZWxlZDsKIH0KIAotUmVmUHRyPFBy
b3RvY29sOjpDb25zb2xlOjpTdGFja1RyYWNlPiBBc3luY1N0YWNrVHJhY2U6OmJ1aWxkSW5zcGVj
dG9yT2JqZWN0KCkgY29uc3QKK1JlZjxQcm90b2NvbDo6Q29uc29sZTo6U3RhY2tUcmFjZT4gQXN5
bmNTdGFja1RyYWNlOjpidWlsZEluc3BlY3Rvck9iamVjdCgpIGNvbnN0CiB7CiAgICAgUmVmUHRy
PFByb3RvY29sOjpDb25zb2xlOjpTdGFja1RyYWNlPiB0b3BTdGFja1RyYWNlOwogICAgIFJlZlB0
cjxQcm90b2NvbDo6Q29uc29sZTo6U3RhY2tUcmFjZT4gcHJldmlvdXNTdGFja1RyYWNlOwpAQCAt
MTIwLDEzICsxMjAsMTMgQEAgUmVmUHRyPFByb3RvY29sOjpDb25zb2xlOjpTdGFja1RyYWNlPiBB
c3luY1N0YWNrVHJhY2U6OmJ1aWxkSW5zcGVjdG9yT2JqZWN0KCkgY28KICAgICAgICAgICAgIHRv
cFN0YWNrVHJhY2UgPSBwcm90b2NvbE9iamVjdC5wdHIoKTsKIAogICAgICAgICBpZiAocHJldmlv
dXNTdGFja1RyYWNlKQotICAgICAgICAgICAgcHJldmlvdXNTdGFja1RyYWNlLT5zZXRQYXJlbnRT
dGFja1RyYWNlKHByb3RvY29sT2JqZWN0LnB0cigpKTsKKyAgICAgICAgICAgIHByZXZpb3VzU3Rh
Y2tUcmFjZS0+c2V0UGFyZW50U3RhY2tUcmFjZShwcm90b2NvbE9iamVjdC5jb3B5UmVmKCkpOwog
CiAgICAgICAgIHByZXZpb3VzU3RhY2tUcmFjZSA9IFdURk1vdmUocHJvdG9jb2xPYmplY3QpOwog
ICAgICAgICBzdGFja1RyYWNlID0gc3RhY2tUcmFjZS0+bV9wYXJlbnQuZ2V0KCk7CiAgICAgfQog
Ci0gICAgcmV0dXJuIHRvcFN0YWNrVHJhY2U7CisgICAgcmV0dXJuIHRvcFN0YWNrVHJhY2UucmVs
ZWFzZU5vbk51bGwoKTsKIH0KIAogdm9pZCBBc3luY1N0YWNrVHJhY2U6OnRydW5jYXRlKHNpemVf
dCBtYXhEZXB0aCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
QXN5bmNTdGFja1RyYWNlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0FzeW5j
U3RhY2tUcmFjZS5oCmluZGV4IDZlZGU2YzQyNWFiY2FhMmQ2MWU1YmI3YjFiYTE5ZTMyZTU3MjNi
NmMuLjQ5OWExZTA1ZmQ1OTQzZjlmYWVkYzMwZTBiZDNkMjBlMGM1ZGRiZWEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvQXN5bmNTdGFja1RyYWNlLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9Bc3luY1N0YWNrVHJhY2UuaApAQCAtNTEs
NyArNTEsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBkaWREaXNwYXRjaEFzeW5jQ2FsbCgpOwogICAg
IHZvaWQgZGlkQ2FuY2VsQXN5bmNDYWxsKCk7CiAKLSAgICBSZWZQdHI8UHJvdG9jb2w6OkNvbnNv
bGU6OlN0YWNrVHJhY2U+IGJ1aWxkSW5zcGVjdG9yT2JqZWN0KCkgY29uc3Q7CisgICAgUmVmPFBy
b3RvY29sOjpDb25zb2xlOjpTdGFja1RyYWNlPiBidWlsZEluc3BlY3Rvck9iamVjdCgpIGNvbnN0
OwogCiAgICAgfkFzeW5jU3RhY2tUcmFjZSgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL0NvbnNvbGVNZXNzYWdlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3IvQ29uc29sZU1lc3NhZ2UuY3BwCmluZGV4IDU0MmM3YzdiMzdlZmIyZTRh
NzZhMzJhMDA4ZDA2M2RiYzgwNWNkZDAuLjkwYTFkZDk2MDQ3MGE1NGVkM2IxNDY2Y2VjZmRlZmE4
MzQ5NDU4MGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvQ29u
c29sZU1lc3NhZ2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvQ29u
c29sZU1lc3NhZ2UuY3BwCkBAIC0yNjEsOSArMjYxLDExIEBAIHZvaWQgQ29uc29sZU1lc3NhZ2U6
OmFkZFRvRnJvbnRlbmQoQ29uc29sZUZyb250ZW5kRGlzcGF0Y2hlciYgY29uc29sZUZyb250ZW5k
RGlzCiAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICBhcmd1bWVudHNPYmplY3QtPmFkZEl0ZW0oV1RGTW92ZShpbnNwZWN0b3JW
YWx1ZSkpOwotICAgICAgICAgICAgICAgICAgICBpZiAobV9hcmd1bWVudHMtPmFyZ3VtZW50Q291
bnQoKSA+IDEpCi0gICAgICAgICAgICAgICAgICAgICAgICBhcmd1bWVudHNPYmplY3QtPmFkZEl0
ZW0oaW5qZWN0ZWRTY3JpcHQud3JhcE9iamVjdChjb2x1bW5zLCAiY29uc29sZSJfcywgdHJ1ZSkp
OworICAgICAgICAgICAgICAgICAgICBhcmd1bWVudHNPYmplY3QtPmFkZEl0ZW0oaW5zcGVjdG9y
VmFsdWUucmVsZWFzZU5vbk51bGwoKSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChtX2FyZ3Vt
ZW50cy0+YXJndW1lbnRDb3VudCgpID4gMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KGF1dG8gaW5zcGVjdG9yT2JqZWN0ID0gaW5qZWN0ZWRTY3JpcHQud3JhcE9iamVjdChjb2x1bW5z
LCAiY29uc29sZSJfcywgdHJ1ZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJndW1l
bnRzT2JqZWN0LT5hZGRJdGVtKGluc3BlY3Rvck9iamVjdC5yZWxlYXNlTm9uTnVsbCgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2FyZ3VtZW50cy0+YXJndW1lbnRD
b3VudCgpOyArK2kpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gaW5zcGVjdG9yVmFs
dWUgPSBpbmplY3RlZFNjcmlwdC53cmFwT2JqZWN0KG1fYXJndW1lbnRzLT5hcmd1bWVudEF0KGkp
LCAiY29uc29sZSJfcywgZ2VuZXJhdGVQcmV2aWV3KTsKQEAgLTI3MSw3ICsyNzMsNyBAQCB2b2lk
IENvbnNvbGVNZXNzYWdlOjphZGRUb0Zyb250ZW5kKENvbnNvbGVGcm9udGVuZERpc3BhdGNoZXIm
IGNvbnNvbGVGcm9udGVuZERpcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50c09i
amVjdC0+YWRkSXRlbShXVEZNb3ZlKGluc3BlY3RvclZhbHVlKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBhcmd1bWVudHNPYmplY3QtPmFkZEl0ZW0oaW5zcGVjdG9yVmFsdWUucmVsZWFzZU5v
bk51bGwoKSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICB9CkBAIC0yODQsNyArMjg2LDcgQEAgdm9pZCBDb25zb2xlTWVzc2FnZTo6YWRkVG9G
cm9udGVuZChDb25zb2xlRnJvbnRlbmREaXNwYXRjaGVyJiBjb25zb2xlRnJvbnRlbmREaXMKICAg
ICAgICAgICAgICAgICAgICAgaWYgKCFpbnNwZWN0b3JWYWx1ZSkKICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50c09iamVjdC0+
YWRkSXRlbShXVEZNb3ZlKGluc3BlY3RvclZhbHVlKSk7CisgICAgICAgICAgICAgICAgICAgIGFy
Z3VtZW50c09iamVjdC0+YWRkSXRlbShpbnNwZWN0b3JWYWx1ZS5yZWxlYXNlTm9uTnVsbCgpKTsK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHQuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdC5jcHAKaW5kZXggY2M4NDlmMDUxZmE0
MDUxOGE5ZDFhMDM0MjliYzJiNGRiY2ZiMzEwMi4uNjkwOWEzMzllYTJlM2RlNjAwZjU1ZmQ2ZmU0
NjgzNjQ2MTcxZTBhNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9JbmplY3RlZFNjcmlwdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9JbmplY3RlZFNjcmlwdC5jcHAKQEAgLTU2LDcgKzU2LDcgQEAgSW5qZWN0ZWRTY3JpcHQ6On5J
bmplY3RlZFNjcmlwdCgpCiB7CiB9CiAKLXZvaWQgSW5qZWN0ZWRTY3JpcHQ6OmV4ZWN1dGUoRXJy
b3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGZ1bmN0aW9uU3RyaW5nLCBFeGVj
dXRlT3B0aW9ucyYmIG9wdGlvbnMsIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2Jq
ZWN0PiYgcmVzdWx0LCBPcHRpb25hbDxib29sPiYgd2FzVGhyb3duLCBPcHRpb25hbDxpbnQ+JiBz
YXZlZFJlc3VsdEluZGV4KQordm9pZCBJbmplY3RlZFNjcmlwdDo6ZXhlY3V0ZShQcm90b2NvbDo6
RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGZ1bmN0aW9uU3RyaW5nLCBF
eGVjdXRlT3B0aW9ucyYmIG9wdGlvbnMsIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3Rl
T2JqZWN0PiYgcmVzdWx0LCBPcHRpb25hbDxib29sPiYgd2FzVGhyb3duLCBPcHRpb25hbDxpbnQ+
JiBzYXZlZFJlc3VsdEluZGV4KQogewogICAgIERlcHJlY2F0ZWQ6OlNjcmlwdEZ1bmN0aW9uQ2Fs
bCBmdW5jdGlvbihpbmplY3RlZFNjcmlwdE9iamVjdCgpLCAiZXhlY3V0ZSJfcywgaW5zcGVjdG9y
RW52aXJvbm1lbnQoKS0+ZnVuY3Rpb25DYWxsSGFuZGxlcigpKTsKICAgICBmdW5jdGlvbi5hcHBl
bmRBcmd1bWVudChmdW5jdGlvblN0cmluZyk7CkBAIC02OSw3ICs2OSw3IEBAIHZvaWQgSW5qZWN0
ZWRTY3JpcHQ6OmV4ZWN1dGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcm
IGZ1bmN0aW9uU3RyCiAgICAgbWFrZUV2YWxDYWxsKGVycm9yU3RyaW5nLCBmdW5jdGlvbiwgcmVz
dWx0LCB3YXNUaHJvd24sIHNhdmVkUmVzdWx0SW5kZXgpOwogfQogCi12b2lkIEluamVjdGVkU2Ny
aXB0OjpldmFsdWF0ZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgZXhw
cmVzc2lvbiwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCwgYm9vbCBpbmNsdWRlQ29tbWFuZExp
bmVBUEksIGJvb2wgcmV0dXJuQnlWYWx1ZSwgYm9vbCBnZW5lcmF0ZVByZXZpZXcsIGJvb2wgc2F2
ZVJlc3VsdCwgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiByZXN1bHQs
IE9wdGlvbmFsPGJvb2w+JiB3YXNUaHJvd24sIE9wdGlvbmFsPGludD4mIHNhdmVkUmVzdWx0SW5k
ZXgpCit2b2lkIEluamVjdGVkU2NyaXB0OjpldmFsdWF0ZShQcm90b2NvbDo6RXJyb3JTdHJpbmcm
IGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIGNvbnN0IFN0cmluZyYgb2Jq
ZWN0R3JvdXAsIGJvb2wgaW5jbHVkZUNvbW1hbmRMaW5lQVBJLCBib29sIHJldHVybkJ5VmFsdWUs
IGJvb2wgZ2VuZXJhdGVQcmV2aWV3LCBib29sIHNhdmVSZXN1bHQsIFJlZlB0cjxQcm90b2NvbDo6
UnVudGltZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0LCBPcHRpb25hbDxib29sPiYgd2FzVGhyb3du
LCBPcHRpb25hbDxpbnQ+JiBzYXZlZFJlc3VsdEluZGV4KQogewogICAgIERlcHJlY2F0ZWQ6OlNj
cmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihpbmplY3RlZFNjcmlwdE9iamVjdCgpLCAiZXZhbHVh
dGUiX3MsIGluc3BlY3RvckVudmlyb25tZW50KCktPmZ1bmN0aW9uQ2FsbEhhbmRsZXIoKSk7CiAg
ICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoZXhwcmVzc2lvbik7CkBAIC05MSw3ICs5MSw3IEBA
IHZvaWQgSW5qZWN0ZWRTY3JpcHQ6OmF3YWl0UHJvbWlzZShjb25zdCBTdHJpbmcmIHByb21pc2VP
YmplY3RJZCwgYm9vbCByZXR1cm5CeVZhCiAgICAgbWFrZUFzeW5jQ2FsbChmdW5jdGlvbiwgV1RG
TW92ZShjYWxsYmFjaykpOwogfQogCi12b2lkIEluamVjdGVkU2NyaXB0OjpjYWxsRnVuY3Rpb25P
bihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgb2JqZWN0SWQsIGNvbnN0
IFN0cmluZyYgZXhwcmVzc2lvbiwgY29uc3QgU3RyaW5nJiBhcmd1bWVudHMsIGJvb2wgcmV0dXJu
QnlWYWx1ZSwgYm9vbCBnZW5lcmF0ZVByZXZpZXcsIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6
UmVtb3RlT2JqZWN0PiYgcmVzdWx0LCBPcHRpb25hbDxib29sPiYgd2FzVGhyb3duKQordm9pZCBJ
bmplY3RlZFNjcmlwdDo6Y2FsbEZ1bmN0aW9uT24oUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJv
clN0cmluZywgY29uc3QgU3RyaW5nJiBvYmplY3RJZCwgY29uc3QgU3RyaW5nJiBleHByZXNzaW9u
LCBjb25zdCBTdHJpbmcmIGFyZ3VtZW50cywgYm9vbCByZXR1cm5CeVZhbHVlLCBib29sIGdlbmVy
YXRlUHJldmlldywgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiByZXN1
bHQsIE9wdGlvbmFsPGJvb2w+JiB3YXNUaHJvd24pCiB7CiAgICAgRGVwcmVjYXRlZDo6U2NyaXB0
RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKGluamVjdGVkU2NyaXB0T2JqZWN0KCksICJjYWxsRnVuY3Rp
b25PbiJfcywgaW5zcGVjdG9yRW52aXJvbm1lbnQoKS0+ZnVuY3Rpb25DYWxsSGFuZGxlcigpKTsK
ICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChvYmplY3RJZCk7CkBAIC0xMDUsNyArMTA1LDcg
QEAgdm9pZCBJbmplY3RlZFNjcmlwdDo6Y2FsbEZ1bmN0aW9uT24oRXJyb3JTdHJpbmcmIGVycm9y
U3RyaW5nLCBjb25zdCBTdHJpbmcmIG9iamUKICAgICBBU1NFUlQoIXNhdmVkUmVzdWx0SW5kZXgp
OwogfQogCi12b2lkIEluamVjdGVkU2NyaXB0OjpldmFsdWF0ZU9uQ2FsbEZyYW1lKEVycm9yU3Ry
aW5nJiBlcnJvclN0cmluZywgSlNDOjpKU1ZhbHVlIGNhbGxGcmFtZXMsIGNvbnN0IFN0cmluZyYg
Y2FsbEZyYW1lSWQsIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgY29uc3QgU3RyaW5nJiBvYmpl
Y3RHcm91cCwgYm9vbCBpbmNsdWRlQ29tbWFuZExpbmVBUEksIGJvb2wgcmV0dXJuQnlWYWx1ZSwg
Ym9vbCBnZW5lcmF0ZVByZXZpZXcsIGJvb2wgc2F2ZVJlc3VsdCwgUmVmUHRyPFByb3RvY29sOjpS
dW50aW1lOjpSZW1vdGVPYmplY3Q+JiByZXN1bHQsIE9wdGlvbmFsPGJvb2w+JiB3YXNUaHJvd24s
IE9wdGlvbmFsPGludD4mIHNhdmVkUmVzdWx0SW5kZXgpCit2b2lkIEluamVjdGVkU2NyaXB0Ojpl
dmFsdWF0ZU9uQ2FsbEZyYW1lKFByb3RvY29sOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIEpT
Qzo6SlNWYWx1ZSBjYWxsRnJhbWVzLCBjb25zdCBTdHJpbmcmIGNhbGxGcmFtZUlkLCBjb25zdCBT
dHJpbmcmIGV4cHJlc3Npb24sIGNvbnN0IFN0cmluZyYgb2JqZWN0R3JvdXAsIGJvb2wgaW5jbHVk
ZUNvbW1hbmRMaW5lQVBJLCBib29sIHJldHVybkJ5VmFsdWUsIGJvb2wgZ2VuZXJhdGVQcmV2aWV3
LCBib29sIHNhdmVSZXN1bHQsIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0
PiYgcmVzdWx0LCBPcHRpb25hbDxib29sPiYgd2FzVGhyb3duLCBPcHRpb25hbDxpbnQ+JiBzYXZl
ZFJlc3VsdEluZGV4KQogewogICAgIERlcHJlY2F0ZWQ6OlNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5j
dGlvbihpbmplY3RlZFNjcmlwdE9iamVjdCgpLCAiZXZhbHVhdGVPbkNhbGxGcmFtZSJfcywgaW5z
cGVjdG9yRW52aXJvbm1lbnQoKS0+ZnVuY3Rpb25DYWxsSGFuZGxlcigpKTsKICAgICBmdW5jdGlv
bi5hcHBlbmRBcmd1bWVudChjYWxsRnJhbWVzKTsKQEAgLTExOSw1MiArMTE5LDU1IEBAIHZvaWQg
SW5qZWN0ZWRTY3JpcHQ6OmV2YWx1YXRlT25DYWxsRnJhbWUoRXJyb3JTdHJpbmcmIGVycm9yU3Ry
aW5nLCBKU0M6OkpTVmFsdWUKICAgICBtYWtlRXZhbENhbGwoZXJyb3JTdHJpbmcsIGZ1bmN0aW9u
LCByZXN1bHQsIHdhc1Rocm93biwgc2F2ZWRSZXN1bHRJbmRleCk7CiB9CiAKLXZvaWQgSW5qZWN0
ZWRTY3JpcHQ6OmdldEZ1bmN0aW9uRGV0YWlscyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNv
bnN0IFN0cmluZyYgZnVuY3Rpb25JZCwgUmVmUHRyPFByb3RvY29sOjpEZWJ1Z2dlcjo6RnVuY3Rp
b25EZXRhaWxzPiYgcmVzdWx0KQordm9pZCBJbmplY3RlZFNjcmlwdDo6Z2V0RnVuY3Rpb25EZXRh
aWxzKFByb3RvY29sOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgZnVu
Y3Rpb25JZCwgUmVmUHRyPFByb3RvY29sOjpEZWJ1Z2dlcjo6RnVuY3Rpb25EZXRhaWxzPiYgcmVz
dWx0KQogewogICAgIERlcHJlY2F0ZWQ6OlNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihpbmpl
Y3RlZFNjcmlwdE9iamVjdCgpLCAiZ2V0RnVuY3Rpb25EZXRhaWxzIl9zLCBpbnNwZWN0b3JFbnZp
cm9ubWVudCgpLT5mdW5jdGlvbkNhbGxIYW5kbGVyKCkpOwogICAgIGZ1bmN0aW9uLmFwcGVuZEFy
Z3VtZW50KGZ1bmN0aW9uSWQpOwogCiAgICAgUmVmUHRyPEpTT046OlZhbHVlPiByZXN1bHRWYWx1
ZSA9IG1ha2VDYWxsKGZ1bmN0aW9uKTsKICAgICBpZiAoIXJlc3VsdFZhbHVlIHx8IHJlc3VsdFZh
bHVlLT50eXBlKCkgIT0gSlNPTjo6VmFsdWU6OlR5cGU6Ok9iamVjdCkgewotICAgICAgICBpZiAo
IXJlc3VsdFZhbHVlLT5hc1N0cmluZyhlcnJvclN0cmluZykpCisgICAgICAgIGVycm9yU3RyaW5n
ID0gcmVzdWx0VmFsdWUtPmFzU3RyaW5nKCk7CisgICAgICAgIGlmICghZXJyb3JTdHJpbmcpCiAg
ICAgICAgICAgICBlcnJvclN0cmluZyA9ICJJbnRlcm5hbCBlcnJvciJfczsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAotICAgIHJlc3VsdCA9IEJpbmRpbmdUcmFpdHM8UHJvdG9jb2w6OkRlYnVn
Z2VyOjpGdW5jdGlvbkRldGFpbHM+OjpydW50aW1lQ2FzdChXVEZNb3ZlKHJlc3VsdFZhbHVlKSk7
CisgICAgcmVzdWx0ID0gUHJvdG9jb2w6OkJpbmRpbmdUcmFpdHM8UHJvdG9jb2w6OkRlYnVnZ2Vy
OjpGdW5jdGlvbkRldGFpbHM+OjpydW50aW1lQ2FzdChyZXN1bHRWYWx1ZS5yZWxlYXNlTm9uTnVs
bCgpKTsKIH0KIAotdm9pZCBJbmplY3RlZFNjcmlwdDo6ZnVuY3Rpb25EZXRhaWxzKEVycm9yU3Ry
aW5nJiBlcnJvclN0cmluZywgSlNDOjpKU1ZhbHVlIHZhbHVlLCBSZWZQdHI8UHJvdG9jb2w6OkRl
YnVnZ2VyOjpGdW5jdGlvbkRldGFpbHM+JiByZXN1bHQpCit2b2lkIEluamVjdGVkU2NyaXB0Ojpm
dW5jdGlvbkRldGFpbHMoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgSlNDOjpK
U1ZhbHVlIHZhbHVlLCBSZWZQdHI8UHJvdG9jb2w6OkRlYnVnZ2VyOjpGdW5jdGlvbkRldGFpbHM+
JiByZXN1bHQpCiB7CiAgICAgRGVwcmVjYXRlZDo6U2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9u
KGluamVjdGVkU2NyaXB0T2JqZWN0KCksICJmdW5jdGlvbkRldGFpbHMiX3MsIGluc3BlY3RvckVu
dmlyb25tZW50KCktPmZ1bmN0aW9uQ2FsbEhhbmRsZXIoKSk7CiAgICAgZnVuY3Rpb24uYXBwZW5k
QXJndW1lbnQodmFsdWUpOwogCiAgICAgUmVmUHRyPEpTT046OlZhbHVlPiByZXN1bHRWYWx1ZSA9
IG1ha2VDYWxsKGZ1bmN0aW9uKTsKICAgICBpZiAoIXJlc3VsdFZhbHVlIHx8IHJlc3VsdFZhbHVl
LT50eXBlKCkgIT0gSlNPTjo6VmFsdWU6OlR5cGU6Ok9iamVjdCkgewotICAgICAgICBpZiAoIXJl
c3VsdFZhbHVlLT5hc1N0cmluZyhlcnJvclN0cmluZykpCisgICAgICAgIGVycm9yU3RyaW5nID0g
cmVzdWx0VmFsdWUtPmFzU3RyaW5nKCk7CisgICAgICAgIGlmICghZXJyb3JTdHJpbmcpCiAgICAg
ICAgICAgICBlcnJvclN0cmluZyA9ICJJbnRlcm5hbCBlcnJvciJfczsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIHJlc3VsdCA9IEJpbmRpbmdUcmFpdHM8UHJvdG9jb2w6OkRlYnVnZ2Vy
OjpGdW5jdGlvbkRldGFpbHM+OjpydW50aW1lQ2FzdChXVEZNb3ZlKHJlc3VsdFZhbHVlKSk7Cisg
ICAgcmVzdWx0ID0gUHJvdG9jb2w6OkJpbmRpbmdUcmFpdHM8UHJvdG9jb2w6OkRlYnVnZ2VyOjpG
dW5jdGlvbkRldGFpbHM+OjpydW50aW1lQ2FzdChyZXN1bHRWYWx1ZS5yZWxlYXNlTm9uTnVsbCgp
KTsKIH0KIAotdm9pZCBJbmplY3RlZFNjcmlwdDo6Z2V0UHJldmlldyhFcnJvclN0cmluZyYgZXJy
b3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgb2JqZWN0SWQsIFJlZlB0cjxQcm90b2NvbDo6UnVudGlt
ZTo6T2JqZWN0UHJldmlldz4mIHJlc3VsdCkKK3ZvaWQgSW5qZWN0ZWRTY3JpcHQ6OmdldFByZXZp
ZXcoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBvYmpl
Y3RJZCwgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpPYmplY3RQcmV2aWV3PiYgcmVzdWx0KQog
ewogICAgIERlcHJlY2F0ZWQ6OlNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihpbmplY3RlZFNj
cmlwdE9iamVjdCgpLCAiZ2V0UHJldmlldyJfcywgaW5zcGVjdG9yRW52aXJvbm1lbnQoKS0+ZnVu
Y3Rpb25DYWxsSGFuZGxlcigpKTsKICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChvYmplY3RJ
ZCk7CiAKICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHJlc3VsdFZhbHVlID0gbWFrZUNhbGwoZnVu
Y3Rpb24pOwogICAgIGlmICghcmVzdWx0VmFsdWUgfHwgcmVzdWx0VmFsdWUtPnR5cGUoKSAhPSBK
U09OOjpWYWx1ZTo6VHlwZTo6T2JqZWN0KSB7Ci0gICAgICAgIGlmICghcmVzdWx0VmFsdWUtPmFz
U3RyaW5nKGVycm9yU3RyaW5nKSkKKyAgICAgICAgZXJyb3JTdHJpbmcgPSByZXN1bHRWYWx1ZS0+
YXNTdHJpbmcoKTsKKyAgICAgICAgaWYgKCFlcnJvclN0cmluZykKICAgICAgICAgICAgIGVycm9y
U3RyaW5nID0gIkludGVybmFsIGVycm9yIl9zOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgcmVzdWx0ID0gQmluZGluZ1RyYWl0czxQcm90b2NvbDo6UnVudGltZTo6T2JqZWN0UHJldmll
dz46OnJ1bnRpbWVDYXN0KFdURk1vdmUocmVzdWx0VmFsdWUpKTsKKyAgICByZXN1bHQgPSBQcm90
b2NvbDo6QmluZGluZ1RyYWl0czxQcm90b2NvbDo6UnVudGltZTo6T2JqZWN0UHJldmlldz46OnJ1
bnRpbWVDYXN0KHJlc3VsdFZhbHVlLnJlbGVhc2VOb25OdWxsKCkpOwogfQogCi12b2lkIEluamVj
dGVkU2NyaXB0OjpnZXRQcm9wZXJ0aWVzKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3Qg
U3RyaW5nJiBvYmplY3RJZCwgYm9vbCBvd25Qcm9wZXJ0aWVzLCBpbnQgZmV0Y2hTdGFydCwgaW50
IGZldGNoQ291bnQsIGJvb2wgZ2VuZXJhdGVQcmV2aWV3LCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxQ
cm90b2NvbDo6UnVudGltZTo6UHJvcGVydHlEZXNjcmlwdG9yPj4mIHByb3BlcnRpZXMpCit2b2lk
IEluamVjdGVkU2NyaXB0OjpnZXRQcm9wZXJ0aWVzKFByb3RvY29sOjpFcnJvclN0cmluZyYgZXJy
b3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgb2JqZWN0SWQsIGJvb2wgb3duUHJvcGVydGllcywgaW50
IGZldGNoU3RhcnQsIGludCBmZXRjaENvdW50LCBib29sIGdlbmVyYXRlUHJldmlldywgUmVmUHRy
PEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OlByb3BlcnR5RGVzY3JpcHRvcj4+JiBw
cm9wZXJ0aWVzKQogewogICAgIEFTU0VSVChmZXRjaFN0YXJ0ID49IDApOwogICAgIEFTU0VSVChm
ZXRjaENvdW50ID49IDApOwpAQCAtMTgyLDEwICsxODUsMTAgQEAgdm9pZCBJbmplY3RlZFNjcmlw
dDo6Z2V0UHJvcGVydGllcyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYg
b2JqZWMKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHByb3BlcnRpZXMgPSBCaW5kaW5n
VHJhaXRzPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OlByb3BlcnR5RGVzY3JpcHRv
cj4+OjpydW50aW1lQ2FzdChXVEZNb3ZlKHJlc3VsdCkpOworICAgIHByb3BlcnRpZXMgPSBQcm90
b2NvbDo6QmluZGluZ1RyYWl0czxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpQcm9w
ZXJ0eURlc2NyaXB0b3I+Pjo6cnVudGltZUNhc3QocmVzdWx0LnJlbGVhc2VOb25OdWxsKCkpOwog
fQogCi12b2lkIEluamVjdGVkU2NyaXB0OjpnZXREaXNwbGF5YWJsZVByb3BlcnRpZXMoRXJyb3JT
dHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBpbnQgZmV0Y2hTdGFy
dCwgaW50IGZldGNoQ291bnQsIGJvb2wgZ2VuZXJhdGVQcmV2aWV3LCBSZWZQdHI8SlNPTjo6QXJy
YXlPZjxQcm90b2NvbDo6UnVudGltZTo6UHJvcGVydHlEZXNjcmlwdG9yPj4mIHByb3BlcnRpZXMp
Cit2b2lkIEluamVjdGVkU2NyaXB0OjpnZXREaXNwbGF5YWJsZVByb3BlcnRpZXMoUHJvdG9jb2w6
OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBvYmplY3RJZCwgaW50IGZl
dGNoU3RhcnQsIGludCBmZXRjaENvdW50LCBib29sIGdlbmVyYXRlUHJldmlldywgUmVmUHRyPEpT
T046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OlByb3BlcnR5RGVzY3JpcHRvcj4+JiBwcm9w
ZXJ0aWVzKQogewogICAgIEFTU0VSVChmZXRjaFN0YXJ0ID49IDApOwogICAgIEFTU0VSVChmZXRj
aENvdW50ID49IDApOwpAQCAtMjAyLDEwICsyMDUsMTAgQEAgdm9pZCBJbmplY3RlZFNjcmlwdDo6
Z2V0RGlzcGxheWFibGVQcm9wZXJ0aWVzKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3Qg
U3QKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHByb3BlcnRpZXMgPSBCaW5kaW5nVHJh
aXRzPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OlByb3BlcnR5RGVzY3JpcHRvcj4+
OjpydW50aW1lQ2FzdChXVEZNb3ZlKHJlc3VsdCkpOworICAgIHByb3BlcnRpZXMgPSBQcm90b2Nv
bDo6QmluZGluZ1RyYWl0czxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpQcm9wZXJ0
eURlc2NyaXB0b3I+Pjo6cnVudGltZUNhc3QocmVzdWx0LnJlbGVhc2VOb25OdWxsKCkpOwogfQog
Ci12b2lkIEluamVjdGVkU2NyaXB0OjpnZXRJbnRlcm5hbFByb3BlcnRpZXMoRXJyb3JTdHJpbmcm
IGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBib29sIGdlbmVyYXRlUHJldmll
dywgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OkludGVybmFsUHJvcGVy
dHlEZXNjcmlwdG9yPj4mIHByb3BlcnRpZXMpCit2b2lkIEluamVjdGVkU2NyaXB0OjpnZXRJbnRl
cm5hbFByb3BlcnRpZXMoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3Qg
U3RyaW5nJiBvYmplY3RJZCwgYm9vbCBnZW5lcmF0ZVByZXZpZXcsIFJlZlB0cjxKU09OOjpBcnJh
eU9mPFByb3RvY29sOjpSdW50aW1lOjpJbnRlcm5hbFByb3BlcnR5RGVzY3JpcHRvcj4+JiBwcm9w
ZXJ0aWVzKQogewogICAgIERlcHJlY2F0ZWQ6OlNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihp
bmplY3RlZFNjcmlwdE9iamVjdCgpLCAiZ2V0SW50ZXJuYWxQcm9wZXJ0aWVzIl9zLCBpbnNwZWN0
b3JFbnZpcm9ubWVudCgpLT5mdW5jdGlvbkNhbGxIYW5kbGVyKCkpOwogICAgIGZ1bmN0aW9uLmFw
cGVuZEFyZ3VtZW50KG9iamVjdElkKTsKQEAgLTIxNywxMSArMjIwLDEyIEBAIHZvaWQgSW5qZWN0
ZWRTY3JpcHQ6OmdldEludGVybmFsUHJvcGVydGllcyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcs
IGNvbnN0IFN0cmluCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvIGFycmF5ID0g
QmluZGluZ1RyYWl0czxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpJbnRlcm5hbFBy
b3BlcnR5RGVzY3JpcHRvcj4+OjpydW50aW1lQ2FzdChXVEZNb3ZlKHJlc3VsdCkpOwotICAgIHBy
b3BlcnRpZXMgPSBhcnJheS0+bGVuZ3RoKCkgPiAwID8gYXJyYXkgOiBudWxscHRyOworICAgIGF1
dG8gYXJyYXkgPSBQcm90b2NvbDo6QmluZGluZ1RyYWl0czxKU09OOjpBcnJheU9mPFByb3RvY29s
OjpSdW50aW1lOjpJbnRlcm5hbFByb3BlcnR5RGVzY3JpcHRvcj4+OjpydW50aW1lQ2FzdChyZXN1
bHQucmVsZWFzZU5vbk51bGwoKSk7CisgICAgaWYgKGFycmF5LT5sZW5ndGgoKSkKKyAgICAgICAg
cHJvcGVydGllcyA9IFdURk1vdmUoYXJyYXkpOwogfQogCi12b2lkIEluamVjdGVkU2NyaXB0Ojpn
ZXRDb2xsZWN0aW9uRW50cmllcyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmlu
ZyYgb2JqZWN0SWQsIGNvbnN0IFN0cmluZyYgb2JqZWN0R3JvdXAsIGludCBmZXRjaFN0YXJ0LCBp
bnQgZmV0Y2hDb3VudCwgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OkNv
bGxlY3Rpb25FbnRyeT4+JiBlbnRyaWVzKQordm9pZCBJbmplY3RlZFNjcmlwdDo6Z2V0Q29sbGVj
dGlvbkVudHJpZXMoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3Ry
aW5nJiBvYmplY3RJZCwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCwgaW50IGZldGNoU3RhcnQs
IGludCBmZXRjaENvdW50LCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UnVudGltZTo6
Q29sbGVjdGlvbkVudHJ5Pj4mIGVudHJpZXMpCiB7CiAgICAgQVNTRVJUKGZldGNoU3RhcnQgPj0g
MCk7CiAgICAgQVNTRVJUKGZldGNoQ291bnQgPj0gMCk7CkBAIC0yMzgsMTAgKzI0MiwxMCBAQCB2
b2lkIEluamVjdGVkU2NyaXB0OjpnZXRDb2xsZWN0aW9uRW50cmllcyhFcnJvclN0cmluZyYgZXJy
b3JTdHJpbmcsIGNvbnN0IFN0cmluZwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgZW50
cmllcyA9IEJpbmRpbmdUcmFpdHM8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UnVudGltZTo6Q29s
bGVjdGlvbkVudHJ5Pj46OnJ1bnRpbWVDYXN0KFdURk1vdmUocmVzdWx0KSk7CisgICAgZW50cmll
cyA9IFByb3RvY29sOjpCaW5kaW5nVHJhaXRzPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRp
bWU6OkNvbGxlY3Rpb25FbnRyeT4+OjpydW50aW1lQ2FzdChyZXN1bHQucmVsZWFzZU5vbk51bGwo
KSk7CiB9CiAKLXZvaWQgSW5qZWN0ZWRTY3JpcHQ6OnNhdmVSZXN1bHQoRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGNhbGxBcmd1bWVudEpTT04sIE9wdGlvbmFsPGludD4m
IHNhdmVkUmVzdWx0SW5kZXgpCit2b2lkIEluamVjdGVkU2NyaXB0OjpzYXZlUmVzdWx0KFByb3Rv
Y29sOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgY2FsbEFyZ3VtZW50
SlNPTiwgT3B0aW9uYWw8aW50PiYgc2F2ZWRSZXN1bHRJbmRleCkKIHsKICAgICBEZXByZWNhdGVk
OjpTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24oaW5qZWN0ZWRTY3JpcHRPYmplY3QoKSwgInNh
dmVSZXN1bHQiX3MsIGluc3BlY3RvckVudmlyb25tZW50KCktPmZ1bmN0aW9uQ2FsbEhhbmRsZXIo
KSk7CiAgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoY2FsbEFyZ3VtZW50SlNPTik7CkBAIC0y
NTIsOSArMjU2LDcgQEAgdm9pZCBJbmplY3RlZFNjcmlwdDo6c2F2ZVJlc3VsdChFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgY2FsbEFyZ3UKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIGludCByZXN1bHRJbmRleCA9IDA7Ci0gICAgaWYgKHJlc3VsdC0+YXNJbnRl
Z2VyKHJlc3VsdEluZGV4KSAmJiByZXN1bHRJbmRleCA+IDApCi0gICAgICAgIHNhdmVkUmVzdWx0
SW5kZXggPSByZXN1bHRJbmRleDsKKyAgICBzYXZlZFJlc3VsdEluZGV4ID0gcmVzdWx0LT5hc0lu
dGVnZXIoKTsKIH0KIAogUmVmPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkRlYnVnZ2VyOjpDYWxs
RnJhbWU+PiBJbmplY3RlZFNjcmlwdDo6d3JhcENhbGxGcmFtZXMoSlNDOjpKU1ZhbHVlIGNhbGxG
cmFtZXMpIGNvbnN0CkBAIC0yNjksOCArMjcxLDggQEAgUmVmPEpTT046OkFycmF5T2Y8UHJvdG9j
b2w6OkRlYnVnZ2VyOjpDYWxsRnJhbWU+PiBJbmplY3RlZFNjcmlwdDo6d3JhcENhbGxGcmFtZXMK
ICAgICAgICAgcmV0dXJuIEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkRlYnVnZ2VyOjpDYWxsRnJh
bWU+OjpjcmVhdGUoKTsKIAogICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gcmVzdWx0ID0gdG9JbnNw
ZWN0b3JWYWx1ZShnbG9iYWxPYmplY3QoKSwgY2FsbFJlc3VsdC52YWx1ZSgpKTsKLSAgICBpZiAo
cmVzdWx0LT50eXBlKCkgPT0gSlNPTjo6VmFsdWU6OlR5cGU6OkFycmF5KQotICAgICAgICByZXR1
cm4gQmluZGluZ1RyYWl0czxKU09OOjpBcnJheU9mPFByb3RvY29sOjpEZWJ1Z2dlcjo6Q2FsbEZy
YW1lPj46OnJ1bnRpbWVDYXN0KFdURk1vdmUocmVzdWx0KSkucmVsZWFzZU5vbk51bGwoKTsKKyAg
ICBpZiAocmVzdWx0ICYmIHJlc3VsdC0+dHlwZSgpID09IEpTT046OlZhbHVlOjpUeXBlOjpBcnJh
eSkKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpCaW5kaW5nVHJhaXRzPEpTT046OkFycmF5T2Y8
UHJvdG9jb2w6OkRlYnVnZ2VyOjpDYWxsRnJhbWU+Pjo6cnVudGltZUNhc3QocmVzdWx0LnJlbGVh
c2VOb25OdWxsKCkpOwogCiAgICAgcmV0dXJuIEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkRlYnVn
Z2VyOjpDYWxsRnJhbWU+OjpjcmVhdGUoKTsKIH0KQEAgLTI4OCwxMSArMjkwLDE1IEBAIFJlZlB0
cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiBJbmplY3RlZFNjcmlwdDo6d3JhcE9i
amVjdChKU0M6OkpTVmFsdWUKICAgICBpZiAoIWNhbGxSZXN1bHQpCiAgICAgICAgIHJldHVybiBu
dWxscHRyOwogCi0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcmVzdWx0T2JqZWN0OwotICAgIGJv
b2wgY2FzdFN1Y2NlZWRlZCA9IHRvSW5zcGVjdG9yVmFsdWUoZ2xvYmFsT2JqZWN0KCksIGNhbGxS
ZXN1bHQudmFsdWUoKSktPmFzT2JqZWN0KHJlc3VsdE9iamVjdCk7Ci0gICAgQVNTRVJUX1VOVVNF
RChjYXN0U3VjY2VlZGVkLCBjYXN0U3VjY2VlZGVkKTsKKyAgICBhdXRvIHJlc3VsdFZhbHVlID0g
dG9JbnNwZWN0b3JWYWx1ZShnbG9iYWxPYmplY3QoKSwgY2FsbFJlc3VsdC52YWx1ZSgpKTsKKyAg
ICBpZiAoIXJlc3VsdFZhbHVlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVy
biBCaW5kaW5nVHJhaXRzPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+OjpydW50aW1l
Q2FzdChyZXN1bHRPYmplY3QpOworICAgIGF1dG8gcmVzdWx0T2JqZWN0ID0gcmVzdWx0VmFsdWUt
PmFzT2JqZWN0KCk7CisgICAgaWYgKCFyZXN1bHRPYmplY3QpCisgICAgICAgIHJldHVybiBudWxs
cHRyOworCisgICAgcmV0dXJuIFByb3RvY29sOjpCaW5kaW5nVHJhaXRzPFByb3RvY29sOjpSdW50
aW1lOjpSZW1vdGVPYmplY3Q+OjpydW50aW1lQ2FzdChyZXN1bHRPYmplY3QucmVsZWFzZU5vbk51
bGwoKSk7CiB9CiAKIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiBJbmpl
Y3RlZFNjcmlwdDo6d3JhcEpTT05TdHJpbmcoY29uc3QgU3RyaW5nJiBqc29uLCBjb25zdCBTdHJp
bmcmIGdyb3VwTmFtZSwgYm9vbCBnZW5lcmF0ZVByZXZpZXcpIGNvbnN0CkBAIC0zMTAsMTEgKzMx
NiwxNSBAQCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4gSW5qZWN0ZWRT
Y3JpcHQ6OndyYXBKU09OU3RyaW5nKGNvbnN0IFN0cgogICAgIGlmIChjYWxsUmVzdWx0LnZhbHVl
KCkuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgUmVmUHRyPEpTT046
Ok9iamVjdD4gcmVzdWx0T2JqZWN0OwotICAgIGJvb2wgY2FzdFN1Y2NlZWRlZCA9IHRvSW5zcGVj
dG9yVmFsdWUoZ2xvYmFsT2JqZWN0KCksIGNhbGxSZXN1bHQudmFsdWUoKSktPmFzT2JqZWN0KHJl
c3VsdE9iamVjdCk7Ci0gICAgQVNTRVJUX1VOVVNFRChjYXN0U3VjY2VlZGVkLCBjYXN0U3VjY2Vl
ZGVkKTsKKyAgICBhdXRvIHJlc3VsdFZhbHVlID0gdG9JbnNwZWN0b3JWYWx1ZShnbG9iYWxPYmpl
Y3QoKSwgY2FsbFJlc3VsdC52YWx1ZSgpKTsKKyAgICBpZiAoIXJlc3VsdFZhbHVlKQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiBCaW5kaW5nVHJhaXRzPFByb3RvY29sOjpS
dW50aW1lOjpSZW1vdGVPYmplY3Q+OjpydW50aW1lQ2FzdChyZXN1bHRPYmplY3QpOworICAgIGF1
dG8gcmVzdWx0T2JqZWN0ID0gcmVzdWx0VmFsdWUtPmFzT2JqZWN0KCk7CisgICAgaWYgKCFyZXN1
bHRPYmplY3QpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuIFByb3RvY29s
OjpCaW5kaW5nVHJhaXRzPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+OjpydW50aW1l
Q2FzdChyZXN1bHRPYmplY3QucmVsZWFzZU5vbk51bGwoKSk7CiB9CiAKIFJlZlB0cjxQcm90b2Nv
bDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiBJbmplY3RlZFNjcmlwdDo6d3JhcFRhYmxlKEpTQzo6
SlNWYWx1ZSB0YWJsZSwgSlNDOjpKU1ZhbHVlIGNvbHVtbnMpIGNvbnN0CkBAIC0zMzIsMTEgKzM0
MiwxNSBAQCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4gSW5qZWN0ZWRT
Y3JpcHQ6OndyYXBUYWJsZShKU0M6OkpTVmFsdWUgdAogICAgIGlmICghY2FsbFJlc3VsdCkKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiByZXN1bHRP
YmplY3Q7Ci0gICAgYm9vbCBjYXN0U3VjY2VlZGVkID0gdG9JbnNwZWN0b3JWYWx1ZShnbG9iYWxP
YmplY3QoKSwgY2FsbFJlc3VsdC52YWx1ZSgpKS0+YXNPYmplY3QocmVzdWx0T2JqZWN0KTsKLSAg
ICBBU1NFUlRfVU5VU0VEKGNhc3RTdWNjZWVkZWQsIGNhc3RTdWNjZWVkZWQpOworICAgIGF1dG8g
cmVzdWx0VmFsdWUgPSB0b0luc3BlY3RvclZhbHVlKGdsb2JhbE9iamVjdCgpLCBjYWxsUmVzdWx0
LnZhbHVlKCkpOworICAgIGlmICghcmVzdWx0VmFsdWUpCisgICAgICAgIHJldHVybiBudWxscHRy
OwogCi0gICAgcmV0dXJuIEJpbmRpbmdUcmFpdHM8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9i
amVjdD46OnJ1bnRpbWVDYXN0KHJlc3VsdE9iamVjdCk7CisgICAgYXV0byByZXN1bHRPYmplY3Qg
PSByZXN1bHRWYWx1ZS0+YXNPYmplY3QoKTsKKyAgICBpZiAoIXJlc3VsdE9iamVjdCkKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gUHJvdG9jb2w6OkJpbmRpbmdUcmFpdHM8
UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD46OnJ1bnRpbWVDYXN0KHJlc3VsdE9iamVj
dC5yZWxlYXNlTm9uTnVsbCgpKTsKIH0KIAogUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpPYmpl
Y3RQcmV2aWV3PiBJbmplY3RlZFNjcmlwdDo6cHJldmlld1ZhbHVlKEpTQzo6SlNWYWx1ZSB2YWx1
ZSkgY29uc3QKQEAgLTM0OSwxMSArMzYzLDE1IEBAIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6
T2JqZWN0UHJldmlldz4gSW5qZWN0ZWRTY3JpcHQ6OnByZXZpZXdWYWx1ZShKU0M6OkpTVmFsCiAg
ICAgaWYgKCFjYWxsUmVzdWx0KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIFJlZlB0
cjxKU09OOjpPYmplY3Q+IHJlc3VsdE9iamVjdDsKLSAgICBib29sIGNhc3RTdWNjZWVkZWQgPSB0
b0luc3BlY3RvclZhbHVlKGdsb2JhbE9iamVjdCgpLCBjYWxsUmVzdWx0LnZhbHVlKCkpLT5hc09i
amVjdChyZXN1bHRPYmplY3QpOwotICAgIEFTU0VSVF9VTlVTRUQoY2FzdFN1Y2NlZWRlZCwgY2Fz
dFN1Y2NlZWRlZCk7CisgICAgYXV0byByZXN1bHRWYWx1ZSA9IHRvSW5zcGVjdG9yVmFsdWUoZ2xv
YmFsT2JqZWN0KCksIGNhbGxSZXN1bHQudmFsdWUoKSk7CisgICAgaWYgKCFyZXN1bHRWYWx1ZSkK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gQmluZGluZ1RyYWl0czxQcm90
b2NvbDo6UnVudGltZTo6T2JqZWN0UHJldmlldz46OnJ1bnRpbWVDYXN0KHJlc3VsdE9iamVjdCk7
CisgICAgYXV0byByZXN1bHRPYmplY3QgPSByZXN1bHRWYWx1ZS0+YXNPYmplY3QoKTsKKyAgICBp
ZiAoIXJlc3VsdE9iamVjdCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4g
UHJvdG9jb2w6OkJpbmRpbmdUcmFpdHM8UHJvdG9jb2w6OlJ1bnRpbWU6Ok9iamVjdFByZXZpZXc+
OjpydW50aW1lQ2FzdChyZXN1bHRPYmplY3QucmVsZWFzZU5vbk51bGwoKSk7CiB9CiAKIHZvaWQg
SW5qZWN0ZWRTY3JpcHQ6OnNldEV2ZW50VmFsdWUoSlNDOjpKU1ZhbHVlIHZhbHVlKQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdC5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdC5oCmluZGV4IGNk
ZWU0NWYyZDZiMzM3N2YxZTA1MjNjZmU0MDFhZTI4YmNmMmRmNmYuLmQ2M2FlZjAyNTk5NjQ4ODQ2
YzY4MzYxNWNiNTZjNjQzYzM4OWIxYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL0luamVjdGVkU2NyaXB0LmgKQEAgLTU5LDIwICs1OSwyMCBAQCBwdWJsaWM6CiAg
ICAgICAgIGJvb2wgc2F2ZVJlc3VsdCB7IGZhbHNlIH07CiAgICAgICAgIFZlY3RvcjxKU0M6OkpT
VmFsdWU+IGFyZ3M7CiAgICAgfTsKLSAgICB2b2lkIGV4ZWN1dGUoRXJyb3JTdHJpbmcmLCBjb25z
dCBTdHJpbmcmIGZ1bmN0aW9uU3RyaW5nLCBFeGVjdXRlT3B0aW9ucyYmLCBSZWZQdHI8UHJvdG9j
b2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3VsdCwgT3B0aW9uYWw8Ym9vbD4mIHdhc1Ro
cm93biwgT3B0aW9uYWw8aW50PiYgc2F2ZWRSZXN1bHRJbmRleCk7CisgICAgdm9pZCBleGVjdXRl
KFByb3RvY29sOjpFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgZnVuY3Rpb25TdHJpbmcsIEV4
ZWN1dGVPcHRpb25zJiYsIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYg
cmVzdWx0LCBPcHRpb25hbDxib29sPiYgd2FzVGhyb3duLCBPcHRpb25hbDxpbnQ+JiBzYXZlZFJl
c3VsdEluZGV4KTsKIAotICAgIHZvaWQgZXZhbHVhdGUoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJp
bmcmIGV4cHJlc3Npb24sIGNvbnN0IFN0cmluZyYgb2JqZWN0R3JvdXAsIGJvb2wgaW5jbHVkZUNv
bW1hbmRMaW5lQVBJLCBib29sIHJldHVybkJ5VmFsdWUsIGJvb2wgZ2VuZXJhdGVQcmV2aWV3LCBi
b29sIHNhdmVSZXN1bHQsIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYg
cmVzdWx0LCBPcHRpb25hbDxib29sPiYgd2FzVGhyb3duLCBPcHRpb25hbDxpbnQ+JiBzYXZlZFJl
c3VsdEluZGV4KTsKKyAgICB2b2lkIGV2YWx1YXRlKFByb3RvY29sOjpFcnJvclN0cmluZyYsIGNv
bnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCwgYm9vbCBp
bmNsdWRlQ29tbWFuZExpbmVBUEksIGJvb2wgcmV0dXJuQnlWYWx1ZSwgYm9vbCBnZW5lcmF0ZVBy
ZXZpZXcsIGJvb2wgc2F2ZVJlc3VsdCwgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVP
YmplY3Q+JiByZXN1bHQsIE9wdGlvbmFsPGJvb2w+JiB3YXNUaHJvd24sIE9wdGlvbmFsPGludD4m
IHNhdmVkUmVzdWx0SW5kZXgpOwogICAgIHZvaWQgYXdhaXRQcm9taXNlKGNvbnN0IFN0cmluZyYg
cHJvbWlzZU9iamVjdElkLCBib29sIHJldHVybkJ5VmFsdWUsIGJvb2wgZ2VuZXJhdGVQcmV2aWV3
LCBib29sIHNhdmVSZXN1bHQsIEFzeW5jQ2FsbENhbGxiYWNrJiYpOwotICAgIHZvaWQgZXZhbHVh
dGVPbkNhbGxGcmFtZShFcnJvclN0cmluZyYsIEpTQzo6SlNWYWx1ZSBjYWxsRnJhbWVzLCBjb25z
dCBTdHJpbmcmIGNhbGxGcmFtZUlkLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIGNvbnN0IFN0
cmluZyYgb2JqZWN0R3JvdXAsIGJvb2wgaW5jbHVkZUNvbW1hbmRMaW5lQVBJLCBib29sIHJldHVy
bkJ5VmFsdWUsIGJvb2wgZ2VuZXJhdGVQcmV2aWV3LCBib29sIHNhdmVSZXN1bHQsIFJlZlB0cjxQ
cm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0LCBPcHRpb25hbDxib29sPiYg
d2FzVGhyb3duLCBPcHRpb25hbDxpbnQ+JiBzYXZlZFJlc3VsdEluZGV4KTsKLSAgICB2b2lkIGNh
bGxGdW5jdGlvbk9uKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBvYmplY3RJZCwgY29uc3Qg
U3RyaW5nJiBleHByZXNzaW9uLCBjb25zdCBTdHJpbmcmIGFyZ3VtZW50cywgYm9vbCByZXR1cm5C
eVZhbHVlLCBib29sIGdlbmVyYXRlUHJldmlldywgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpS
ZW1vdGVPYmplY3Q+JiByZXN1bHQsIE9wdGlvbmFsPGJvb2w+JiB3YXNUaHJvd24pOwotICAgIHZv
aWQgZ2V0RnVuY3Rpb25EZXRhaWxzKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBmdW5jdGlv
bklkLCBSZWZQdHI8UHJvdG9jb2w6OkRlYnVnZ2VyOjpGdW5jdGlvbkRldGFpbHM+JiByZXN1bHQp
OwotICAgIHZvaWQgZnVuY3Rpb25EZXRhaWxzKEVycm9yU3RyaW5nJiwgSlNDOjpKU1ZhbHVlLCBS
ZWZQdHI8UHJvdG9jb2w6OkRlYnVnZ2VyOjpGdW5jdGlvbkRldGFpbHM+JiByZXN1bHQpOwotICAg
IHZvaWQgZ2V0UHJldmlldyhFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgb2JqZWN0SWQsIFJl
ZlB0cjxQcm90b2NvbDo6UnVudGltZTo6T2JqZWN0UHJldmlldz4mIHJlc3VsdCk7Ci0gICAgdm9p
ZCBnZXRQcm9wZXJ0aWVzKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBvYmplY3RJZCwgYm9v
bCBvd25Qcm9wZXJ0aWVzLCBpbnQgZmV0Y2hTdGFydCwgaW50IGZldGNoQ291bnQsIGJvb2wgZ2Vu
ZXJhdGVQcmV2aWV3LCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UnVudGltZTo6UHJv
cGVydHlEZXNjcmlwdG9yPj4mIHJlc3VsdCk7Ci0gICAgdm9pZCBnZXREaXNwbGF5YWJsZVByb3Bl
cnRpZXMoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBpbnQgZmV0Y2hTdGFy
dCwgaW50IGZldGNoQ291bnQsIGJvb2wgZ2VuZXJhdGVQcmV2aWV3LCBSZWZQdHI8SlNPTjo6QXJy
YXlPZjxQcm90b2NvbDo6UnVudGltZTo6UHJvcGVydHlEZXNjcmlwdG9yPj4mIHJlc3VsdCk7Ci0g
ICAgdm9pZCBnZXRJbnRlcm5hbFByb3BlcnRpZXMoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcm
IG9iamVjdElkLCBib29sIGdlbmVyYXRlUHJldmlldywgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJv
dG9jb2w6OlJ1bnRpbWU6OkludGVybmFsUHJvcGVydHlEZXNjcmlwdG9yPj4mIHJlc3VsdCk7Ci0g
ICAgdm9pZCBnZXRDb2xsZWN0aW9uRW50cmllcyhFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYg
b2JqZWN0SWQsIGNvbnN0IFN0cmluZyYgb2JqZWN0R3JvdXAsIGludCBmZXRjaFN0YXJ0LCBpbnQg
ZmV0Y2hDb3VudCwgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OkNvbGxl
Y3Rpb25FbnRyeT4+JiBlbnRyaWVzKTsKLSAgICB2b2lkIHNhdmVSZXN1bHQoRXJyb3JTdHJpbmcm
LCBjb25zdCBTdHJpbmcmIGNhbGxBcmd1bWVudEpTT04sIE9wdGlvbmFsPGludD4mIHNhdmVkUmVz
dWx0SW5kZXgpOworICAgIHZvaWQgZXZhbHVhdGVPbkNhbGxGcmFtZShQcm90b2NvbDo6RXJyb3JT
dHJpbmcmLCBKU0M6OkpTVmFsdWUgY2FsbEZyYW1lcywgY29uc3QgU3RyaW5nJiBjYWxsRnJhbWVJ
ZCwgY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBjb25zdCBTdHJpbmcmIG9iamVjdEdyb3VwLCBi
b29sIGluY2x1ZGVDb21tYW5kTGluZUFQSSwgYm9vbCByZXR1cm5CeVZhbHVlLCBib29sIGdlbmVy
YXRlUHJldmlldywgYm9vbCBzYXZlUmVzdWx0LCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJl
bW90ZU9iamVjdD4mIHJlc3VsdCwgT3B0aW9uYWw8Ym9vbD4mIHdhc1Rocm93biwgT3B0aW9uYWw8
aW50PiYgc2F2ZWRSZXN1bHRJbmRleCk7CisgICAgdm9pZCBjYWxsRnVuY3Rpb25PbihQcm90b2Nv
bDo6RXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBjb25zdCBTdHJpbmcmIGV4
cHJlc3Npb24sIGNvbnN0IFN0cmluZyYgYXJndW1lbnRzLCBib29sIHJldHVybkJ5VmFsdWUsIGJv
b2wgZ2VuZXJhdGVQcmV2aWV3LCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVj
dD4mIHJlc3VsdCwgT3B0aW9uYWw8Ym9vbD4mIHdhc1Rocm93bik7CisgICAgdm9pZCBnZXRGdW5j
dGlvbkRldGFpbHMoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBmdW5jdGlv
bklkLCBSZWZQdHI8UHJvdG9jb2w6OkRlYnVnZ2VyOjpGdW5jdGlvbkRldGFpbHM+JiByZXN1bHQp
OworICAgIHZvaWQgZnVuY3Rpb25EZXRhaWxzKFByb3RvY29sOjpFcnJvclN0cmluZyYsIEpTQzo6
SlNWYWx1ZSwgUmVmUHRyPFByb3RvY29sOjpEZWJ1Z2dlcjo6RnVuY3Rpb25EZXRhaWxzPiYgcmVz
dWx0KTsKKyAgICB2b2lkIGdldFByZXZpZXcoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiwgY29uc3Qg
U3RyaW5nJiBvYmplY3RJZCwgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpPYmplY3RQcmV2aWV3
PiYgcmVzdWx0KTsKKyAgICB2b2lkIGdldFByb3BlcnRpZXMoUHJvdG9jb2w6OkVycm9yU3RyaW5n
JiwgY29uc3QgU3RyaW5nJiBvYmplY3RJZCwgYm9vbCBvd25Qcm9wZXJ0aWVzLCBpbnQgZmV0Y2hT
dGFydCwgaW50IGZldGNoQ291bnQsIGJvb2wgZ2VuZXJhdGVQcmV2aWV3LCBSZWZQdHI8SlNPTjo6
QXJyYXlPZjxQcm90b2NvbDo6UnVudGltZTo6UHJvcGVydHlEZXNjcmlwdG9yPj4mIHJlc3VsdCk7
CisgICAgdm9pZCBnZXREaXNwbGF5YWJsZVByb3BlcnRpZXMoUHJvdG9jb2w6OkVycm9yU3RyaW5n
JiwgY29uc3QgU3RyaW5nJiBvYmplY3RJZCwgaW50IGZldGNoU3RhcnQsIGludCBmZXRjaENvdW50
LCBib29sIGdlbmVyYXRlUHJldmlldywgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1
bnRpbWU6OlByb3BlcnR5RGVzY3JpcHRvcj4+JiByZXN1bHQpOworICAgIHZvaWQgZ2V0SW50ZXJu
YWxQcm9wZXJ0aWVzKFByb3RvY29sOjpFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgb2JqZWN0
SWQsIGJvb2wgZ2VuZXJhdGVQcmV2aWV3LCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6
UnVudGltZTo6SW50ZXJuYWxQcm9wZXJ0eURlc2NyaXB0b3I+PiYgcmVzdWx0KTsKKyAgICB2b2lk
IGdldENvbGxlY3Rpb25FbnRyaWVzKFByb3RvY29sOjpFcnJvclN0cmluZyYsIGNvbnN0IFN0cmlu
ZyYgb2JqZWN0SWQsIGNvbnN0IFN0cmluZyYgb2JqZWN0R3JvdXAsIGludCBmZXRjaFN0YXJ0LCBp
bnQgZmV0Y2hDb3VudCwgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OkNv
bGxlY3Rpb25FbnRyeT4+JiBlbnRyaWVzKTsKKyAgICB2b2lkIHNhdmVSZXN1bHQoUHJvdG9jb2w6
OkVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBjYWxsQXJndW1lbnRKU09OLCBPcHRpb25hbDxp
bnQ+JiBzYXZlZFJlc3VsdEluZGV4KTsKIAogICAgIFJlZjxKU09OOjpBcnJheU9mPFByb3RvY29s
OjpEZWJ1Z2dlcjo6Q2FsbEZyYW1lPj4gd3JhcENhbGxGcmFtZXMoSlNDOjpKU1ZhbHVlKSBjb25z
dDsKICAgICBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4gd3JhcE9iamVj
dChKU0M6OkpTVmFsdWUsIGNvbnN0IFN0cmluZyYgZ3JvdXBOYW1lLCBib29sIGdlbmVyYXRlUHJl
dmlldyA9IGZhbHNlKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRCYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRCYXNlLmNwcAppbmRleCA3NTY5ZjViNWQ5NzU4MDg4MjRm
NjRlYjJlZjBhNDA2YjY0YTRkOTM5Li4wOTAxNjZhOTFmYzY2YWQxY2RlNzE4MTk1M2NmNDc3M2Zm
NjZmMDhmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luamVj
dGVkU2NyaXB0QmFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9J
bmplY3RlZFNjcmlwdEJhc2UuY3BwCkBAIC0xMDAsNyArMTAwLDcgQEAgUmVmPEpTT046OlZhbHVl
PiBJbmplY3RlZFNjcmlwdEJhc2U6Om1ha2VDYWxsKERlcHJlY2F0ZWQ6OlNjcmlwdEZ1bmN0aW9u
Q2FsbCYgZnUKICAgICByZXR1cm4gcmVzdWx0SlNPTlZhbHVlLnJlbGVhc2VOb25OdWxsKCk7CiB9
CiAKLXZvaWQgSW5qZWN0ZWRTY3JpcHRCYXNlOjptYWtlRXZhbENhbGwoRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBEZXByZWNhdGVkOjpTY3JpcHRGdW5jdGlvbkNhbGwmIGZ1bmN0aW9uLCBSZWZQ
dHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIG91dF9yZXN1bHRPYmplY3QsIE9w
dGlvbmFsPGJvb2w+JiBvdXRfd2FzVGhyb3duLCBPcHRpb25hbDxpbnQ+JiBvdXRfc2F2ZWRSZXN1
bHRJbmRleCkKK3ZvaWQgSW5qZWN0ZWRTY3JpcHRCYXNlOjptYWtlRXZhbENhbGwoUHJvdG9jb2w6
OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgRGVwcmVjYXRlZDo6U2NyaXB0RnVuY3Rpb25DYWxs
JiBmdW5jdGlvbiwgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiBvdXRf
cmVzdWx0T2JqZWN0LCBPcHRpb25hbDxib29sPiYgb3V0X3dhc1Rocm93biwgT3B0aW9uYWw8aW50
PiYgb3V0X3NhdmVkUmVzdWx0SW5kZXgpCiB7CiAgICAgY2hlY2tDYWxsUmVzdWx0KGVycm9yU3Ry
aW5nLCBtYWtlQ2FsbChmdW5jdGlvbiksIG91dF9yZXN1bHRPYmplY3QsIG91dF93YXNUaHJvd24s
IG91dF9zYXZlZFJlc3VsdEluZGV4KTsKIH0KQEAgLTE0Myw3ICsxNDMsNyBAQCB2b2lkIEluamVj
dGVkU2NyaXB0QmFzZTo6bWFrZUFzeW5jQ2FsbChEZXByZWNhdGVkOjpTY3JpcHRGdW5jdGlvbkNh
bGwmIGZ1bmN0aW9uLAogICAgIH0KIH0KIAotdm9pZCBJbmplY3RlZFNjcmlwdEJhc2U6OmNoZWNr
Q2FsbFJlc3VsdChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIFJlZlB0cjxKU09OOjpWYWx1ZT4g
cmVzdWx0LCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIG91dF9yZXN1
bHRPYmplY3QsIE9wdGlvbmFsPGJvb2w+JiBvdXRfd2FzVGhyb3duLCBPcHRpb25hbDxpbnQ+JiBv
dXRfc2F2ZWRSZXN1bHRJbmRleCkKK3ZvaWQgSW5qZWN0ZWRTY3JpcHRCYXNlOjpjaGVja0NhbGxS
ZXN1bHQoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgUmVmUHRyPEpTT046OlZh
bHVlPiByZXN1bHQsIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYgb3V0
X3Jlc3VsdE9iamVjdCwgT3B0aW9uYWw8Ym9vbD4mIG91dF93YXNUaHJvd24sIE9wdGlvbmFsPGlu
dD4mIG91dF9zYXZlZFJlc3VsdEluZGV4KQogewogICAgIGlmICghcmVzdWx0KSB7CiAgICAgICAg
IGVycm9yU3RyaW5nID0gIkludGVybmFsIGVycm9yOiByZXN1bHQgdmFsdWUgaXMgZW1wdHkiX3M7
CkBAIC0xNTEsNDkgKzE1MSw0MiBAQCB2b2lkIEluamVjdGVkU2NyaXB0QmFzZTo6Y2hlY2tDYWxs
UmVzdWx0KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgUmVmUHRyPEpTT046OgogICAgIH0KIAog
ICAgIGlmIChyZXN1bHQtPnR5cGUoKSA9PSBKU09OOjpWYWx1ZTo6VHlwZTo6U3RyaW5nKSB7Ci0g
ICAgICAgIHJlc3VsdC0+YXNTdHJpbmcoZXJyb3JTdHJpbmcpOwotICAgICAgICBBU1NFUlQoZXJy
b3JTdHJpbmcubGVuZ3RoKCkpOworICAgICAgICBlcnJvclN0cmluZyA9IHJlc3VsdC0+YXNTdHJp
bmcoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+
IHJlc3VsdFR1cGxlOwotICAgIGlmICghcmVzdWx0LT5hc09iamVjdChyZXN1bHRUdXBsZSkpIHsK
KyAgICBhdXRvIHJlc3VsdFR1cGxlID0gcmVzdWx0LT5hc09iamVjdCgpOworICAgIGlmICghcmVz
dWx0VHVwbGUpIHsKICAgICAgICAgZXJyb3JTdHJpbmcgPSAiSW50ZXJuYWwgZXJyb3I6IHJlc3Vs
dCBpcyBub3QgYW4gT2JqZWN0Il9zOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgUmVm
UHRyPEpTT046Ok9iamVjdD4gcmVzdWx0T2JqZWN0OwotICAgIGlmICghcmVzdWx0VHVwbGUtPmdl
dE9iamVjdCgicmVzdWx0Il9zLCByZXN1bHRPYmplY3QpKSB7CisgICAgYXV0byByZXN1bHRPYmpl
Y3QgPSByZXN1bHRUdXBsZS0+Z2V0T2JqZWN0KCJyZXN1bHQiX3MpOworICAgIGlmICghcmVzdWx0
T2JqZWN0KSB7CiAgICAgICAgIGVycm9yU3RyaW5nID0gIkludGVybmFsIGVycm9yOiByZXN1bHQg
aXMgbm90IGEgcGFpciBvZiB2YWx1ZSBhbmQgd2FzVGhyb3duIGZsYWciX3M7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSAgICBib29sIHdhc1Rocm93biA9IGZhbHNlOwotICAgIGlmICghcmVz
dWx0VHVwbGUtPmdldEJvb2xlYW4oIndhc1Rocm93biJfcywgd2FzVGhyb3duKSkgeworICAgIG91
dF93YXNUaHJvd24gPSByZXN1bHRUdXBsZS0+Z2V0Qm9vbGVhbigid2FzVGhyb3duIl9zKTsKKyAg
ICBpZiAoIW91dF93YXNUaHJvd24pIHsKICAgICAgICAgZXJyb3JTdHJpbmcgPSAiSW50ZXJuYWwg
ZXJyb3I6IHJlc3VsdCBpcyBub3QgYSBwYWlyIG9mIHZhbHVlIGFuZCB3YXNUaHJvd24gZmxhZyJf
czsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG91dF9yZXN1bHRPYmplY3QgPSBCaW5k
aW5nVHJhaXRzPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+OjpydW50aW1lQ2FzdChy
ZXN1bHRPYmplY3QpOwotCi0gICAgaWYgKHdhc1Rocm93bikKLSAgICAgICAgb3V0X3dhc1Rocm93
biA9IHdhc1Rocm93bjsKLQotICAgIGludCBzYXZlZFJlc3VsdEluZGV4OwotICAgIGlmIChyZXN1
bHRUdXBsZS0+Z2V0SW50ZWdlcigic2F2ZWRSZXN1bHRJbmRleCJfcywgc2F2ZWRSZXN1bHRJbmRl
eCkpCi0gICAgICAgIG91dF9zYXZlZFJlc3VsdEluZGV4ID0gc2F2ZWRSZXN1bHRJbmRleDsKKyAg
ICBvdXRfcmVzdWx0T2JqZWN0ID0gUHJvdG9jb2w6OkJpbmRpbmdUcmFpdHM8UHJvdG9jb2w6OlJ1
bnRpbWU6OlJlbW90ZU9iamVjdD46OnJ1bnRpbWVDYXN0KHJlc3VsdE9iamVjdC5yZWxlYXNlTm9u
TnVsbCgpKTsKKyAgICBvdXRfc2F2ZWRSZXN1bHRJbmRleCA9IHJlc3VsdFR1cGxlLT5nZXRJbnRl
Z2VyKCJzYXZlZFJlc3VsdEluZGV4Il9zKTsKIH0KIAogdm9pZCBJbmplY3RlZFNjcmlwdEJhc2U6
OmNoZWNrQXN5bmNDYWxsUmVzdWx0KFJlZlB0cjxKU09OOjpWYWx1ZT4gcmVzdWx0LCBjb25zdCBB
c3luY0NhbGxDYWxsYmFjayYgY2FsbGJhY2spCiB7Ci0gICAgRXJyb3JTdHJpbmcgZXJyb3JTdHJp
bmc7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOwogICAgIFJlZlB0cjxQ
cm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiByZXN1bHRPYmplY3Q7CiAgICAgT3B0aW9u
YWw8Ym9vbD4gd2FzVGhyb3duOwogICAgIE9wdGlvbmFsPGludD4gc2F2ZWRSZXN1bHRJbmRleDsK
IAogICAgIGNoZWNrQ2FsbFJlc3VsdChlcnJvclN0cmluZywgcmVzdWx0LCByZXN1bHRPYmplY3Qs
IHdhc1Rocm93biwgc2F2ZWRSZXN1bHRJbmRleCk7CiAKLSAgICBjYWxsYmFjayhlcnJvclN0cmlu
ZywgV1RGTW92ZShyZXN1bHRPYmplY3QpLCB3YXNUaHJvd24sIHNhdmVkUmVzdWx0SW5kZXgpOwor
ICAgIGNhbGxiYWNrKGVycm9yU3RyaW5nLCBXVEZNb3ZlKHJlc3VsdE9iamVjdCksIFdURk1vdmUo
d2FzVGhyb3duKSwgV1RGTW92ZShzYXZlZFJlc3VsdEluZGV4KSk7CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIEluc3BlY3RvcgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9JbmplY3RlZFNjcmlwdEJhc2UuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
SW5qZWN0ZWRTY3JpcHRCYXNlLmgKaW5kZXggODEyM2YxZDY2ZTliMTNhZDRhZDBlY2IxYTNjYWQz
M2Y1OTc2ZDVkNy4uZjRlNmEwZmVlYTQxMWNkMDU4NTk4NGJkNzRhY2M0YjI0YWE4ZWQwZiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdEJh
c2UuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0
QmFzZS5oCkBAIC00Nyw4ICs0Nyw3IEBAIGNsYXNzIFNjcmlwdEZ1bmN0aW9uQ2FsbDsKIAogbmFt
ZXNwYWNlIEluc3BlY3RvciB7CiAKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotdHlwZWRl
ZiBXVEY6OkZ1bmN0aW9uPHZvaWQoRXJyb3JTdHJpbmcmLCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRp
bWU6OlJlbW90ZU9iamVjdD4mJiwgT3B0aW9uYWw8Ym9vbD4mLCBPcHRpb25hbDxpbnQ+Jik+IEFz
eW5jQ2FsbENhbGxiYWNrOwordXNpbmcgQXN5bmNDYWxsQ2FsbGJhY2sgPSBXVEY6OkZ1bmN0aW9u
PHZvaWQoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiwgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpS
ZW1vdGVPYmplY3Q+JiYsIE9wdGlvbmFsPGJvb2w+JiYsIE9wdGlvbmFsPGludD4mJik+OwogCiBj
bGFzcyBKU19FWFBPUlRfUFJJVkFURSBJbmplY3RlZFNjcmlwdEJhc2UgewogcHVibGljOgpAQCAt
NjksMTEgKzY4LDExIEBAIHByb3RlY3RlZDoKICAgICBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRP
YmplY3QmIGluamVjdGVkU2NyaXB0T2JqZWN0KCkgY29uc3Q7CiAgICAgRXhwZWN0ZWQ8SlNDOjpK
U1ZhbHVlLCBOYWtlZFB0cjxKU0M6OkV4Y2VwdGlvbj4+IGNhbGxGdW5jdGlvbldpdGhFdmFsRW5h
YmxlZChEZXByZWNhdGVkOjpTY3JpcHRGdW5jdGlvbkNhbGwmKSBjb25zdDsKICAgICBSZWY8SlNP
Tjo6VmFsdWU+IG1ha2VDYWxsKERlcHJlY2F0ZWQ6OlNjcmlwdEZ1bmN0aW9uQ2FsbCYpOwotICAg
IHZvaWQgbWFrZUV2YWxDYWxsKEVycm9yU3RyaW5nJiwgRGVwcmVjYXRlZDo6U2NyaXB0RnVuY3Rp
b25DYWxsJiwgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiByZXN1bHRP
YmplY3QsIE9wdGlvbmFsPGJvb2w+JiB3YXNUaHJvd24sIE9wdGlvbmFsPGludD4mIHNhdmVkUmVz
dWx0SW5kZXgpOworICAgIHZvaWQgbWFrZUV2YWxDYWxsKFByb3RvY29sOjpFcnJvclN0cmluZyYs
IERlcHJlY2F0ZWQ6OlNjcmlwdEZ1bmN0aW9uQ2FsbCYsIFJlZlB0cjxQcm90b2NvbDo6UnVudGlt
ZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0T2JqZWN0LCBPcHRpb25hbDxib29sPiYgd2FzVGhyb3du
LCBPcHRpb25hbDxpbnQ+JiBzYXZlZFJlc3VsdEluZGV4KTsKICAgICB2b2lkIG1ha2VBc3luY0Nh
bGwoRGVwcmVjYXRlZDo6U2NyaXB0RnVuY3Rpb25DYWxsJiwgQXN5bmNDYWxsQ2FsbGJhY2smJik7
CiAKIHByaXZhdGU6Ci0gICAgdm9pZCBjaGVja0NhbGxSZXN1bHQoRXJyb3JTdHJpbmcmLCBSZWZQ
dHI8SlNPTjo6VmFsdWU+IHJlc3VsdCwgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVP
YmplY3Q+JiByZXN1bHRPYmplY3QsIE9wdGlvbmFsPGJvb2w+JiB3YXNUaHJvd24sIE9wdGlvbmFs
PGludD4mIHNhdmVkUmVzdWx0SW5kZXgpOworICAgIHZvaWQgY2hlY2tDYWxsUmVzdWx0KFByb3Rv
Y29sOjpFcnJvclN0cmluZyYsIFJlZlB0cjxKU09OOjpWYWx1ZT4gcmVzdWx0LCBSZWZQdHI8UHJv
dG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3VsdE9iamVjdCwgT3B0aW9uYWw8Ym9v
bD4mIHdhc1Rocm93biwgT3B0aW9uYWw8aW50PiYgc2F2ZWRSZXN1bHRJbmRleCk7CiAgICAgdm9p
ZCBjaGVja0FzeW5jQ2FsbFJlc3VsdChSZWZQdHI8SlNPTjo6VmFsdWU+IHJlc3VsdCwgY29uc3Qg
QXN5bmNDYWxsQ2FsbGJhY2smKTsKIAogICAgIFN0cmluZyBtX25hbWU7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0TWFuYWdlci5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0TWFuYWdlci5j
cHAKaW5kZXggOTBhZjdhOGYzYTMzMDU2MTZiNDk1ZTViM2NhZGYwNTMzMTFlMjM1MC4uZmNjYzhl
ZjE5ODZkODg2ZDc1NjAwZjczNjEwMGE3ZWIzOTZiNTAwNSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdE1hbmFnZXIuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmNwcApA
QCAtMTAyLDE5ICsxMDIsMTkgQEAgaW50IEluamVjdGVkU2NyaXB0TWFuYWdlcjo6aW5qZWN0ZWRT
Y3JpcHRJZEZvcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogCiBJbmplY3RlZFNjcmlw
dCBJbmplY3RlZFNjcmlwdE1hbmFnZXI6OmluamVjdGVkU2NyaXB0Rm9yT2JqZWN0SWQoY29uc3Qg
U3RyaW5nJiBvYmplY3RJZCkKIHsKLSAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHBhcnNlZE9iamVj
dElkOwotICAgIGlmICghSlNPTjo6VmFsdWU6OnBhcnNlSlNPTihvYmplY3RJZCwgcGFyc2VkT2Jq
ZWN0SWQpKQorICAgIGF1dG8gcGFyc2VkT2JqZWN0SWQgPSBKU09OOjpWYWx1ZTo6cGFyc2VKU09O
KG9iamVjdElkKTsKKyAgICBpZiAoIXBhcnNlZE9iamVjdElkKQogICAgICAgICByZXR1cm4gSW5q
ZWN0ZWRTY3JpcHQoKTsKIAotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHJlc3VsdE9iamVjdDsK
LSAgICBpZiAoIXBhcnNlZE9iamVjdElkLT5hc09iamVjdChyZXN1bHRPYmplY3QpKQorICAgIGF1
dG8gcmVzdWx0T2JqZWN0ID0gcGFyc2VkT2JqZWN0SWQtPmFzT2JqZWN0KCk7CisgICAgaWYgKCFy
ZXN1bHRPYmplY3QpCiAgICAgICAgIHJldHVybiBJbmplY3RlZFNjcmlwdCgpOwogCi0gICAgbG9u
ZyBpbmplY3RlZFNjcmlwdElkID0gMDsKLSAgICBpZiAoIXJlc3VsdE9iamVjdC0+Z2V0SW50ZWdl
cigiaW5qZWN0ZWRTY3JpcHRJZCJfcywgaW5qZWN0ZWRTY3JpcHRJZCkpCisgICAgYXV0byBpbmpl
Y3RlZFNjcmlwdElkID0gcmVzdWx0T2JqZWN0LT5nZXRJbnRlZ2VyKCJpbmplY3RlZFNjcmlwdElk
Il9zKTsKKyAgICBpZiAoIWluamVjdGVkU2NyaXB0SWQpCiAgICAgICAgIHJldHVybiBJbmplY3Rl
ZFNjcmlwdCgpOwogCi0gICAgcmV0dXJuIG1faWRUb0luamVjdGVkU2NyaXB0LmdldChpbmplY3Rl
ZFNjcmlwdElkKTsKKyAgICByZXR1cm4gbV9pZFRvSW5qZWN0ZWRTY3JpcHQuZ2V0KCppbmplY3Rl
ZFNjcmlwdElkKTsKIH0KIAogdm9pZCBJbmplY3RlZFNjcmlwdE1hbmFnZXI6OnJlbGVhc2VPYmpl
Y3RHcm91cChjb25zdCBTdHJpbmcmIG9iamVjdEdyb3VwKQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
LmNwcAppbmRleCA2OTNlOGIyNWM3Mzc3ODM0MGU4Mzk0MDQ2Nzg2ZDkzMThhOGEwOTI0Li5kYmEx
N2Q0YTY1YTcwZDM1ODUxYzhjNTE5YWQxZWNiZDU3MTc1MmRkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyLmNwcApAQCAtNjgsNyArNjgsNyBAQCB2b2lkIEJhY2tlbmREaXNwYXRjaGVyOjpDYWxs
YmFja0Jhc2U6OnNlbmRGYWlsdXJlKGNvbnN0IEVycm9yU3RyaW5nJiBlcnJvcikKICAgICBtX2Jh
Y2tlbmREaXNwYXRjaGVyLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogfQogCi12b2lkIEJhY2tlbmRE
aXNwYXRjaGVyOjpDYWxsYmFja0Jhc2U6OnNlbmRTdWNjZXNzKFJlZlB0cjxKU09OOjpPYmplY3Q+
JiYgcGFydGlhbE1lc3NhZ2UpCit2b2lkIEJhY2tlbmREaXNwYXRjaGVyOjpDYWxsYmFja0Jhc2U6
OnNlbmRTdWNjZXNzKFJlZjxKU09OOjpPYmplY3Q+JiYgcGFydGlhbE1lc3NhZ2UpCiB7CiAgICAg
aWYgKG1fYWxyZWFkeVNlbnQpCiAgICAgICAgIHJldHVybjsKQEAgLTEwNyw3ICsxMDcsNyBAQCB2
b2lkIEJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCiAK
ICAgICBBU1NFUlQoIW1fcHJvdG9jb2xFcnJvcnMuc2l6ZSgpKTsKIAotICAgIGxvbmcgcmVxdWVz
dElkID0gMDsKKyAgICBpbnQgcmVxdWVzdElkID0gMDsKICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0
PiBtZXNzYWdlT2JqZWN0OwogCiAgICAgewpAQCAtMTE1LDQ2ICsxMTUsNTAgQEAgdm9pZCBCYWNr
ZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2goY29uc3QgU3RyaW5nJiBtZXNzYWdlKQogICAgICAgICAv
LyB0aGUgb3V0ZXIgcmVxdWVzdCdzIGlkIGp1c3QgYmVjYXVzZSB0aGUgaW5uZXIgcmVxdWVzdCBp
cyBib2d1cy4KICAgICAgICAgU2V0Rm9yU2NvcGU8T3B0aW9uYWw8bG9uZz4+IHNjb3BlZFJlcXVl
c3RJZChtX2N1cnJlbnRSZXF1ZXN0SWQsIFdURjo6bnVsbG9wdCk7CiAKLSAgICAgICAgUmVmUHRy
PEpTT046OlZhbHVlPiBwYXJzZWRNZXNzYWdlOwotICAgICAgICBpZiAoIUpTT046OlZhbHVlOjpw
YXJzZUpTT04obWVzc2FnZSwgcGFyc2VkTWVzc2FnZSkpIHsKKyAgICAgICAgYXV0byBwYXJzZWRN
ZXNzYWdlID0gSlNPTjo6VmFsdWU6OnBhcnNlSlNPTihtZXNzYWdlKTsKKyAgICAgICAgaWYgKCFw
YXJzZWRNZXNzYWdlKSB7CiAgICAgICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKFBhcnNlRXJy
b3IsICJNZXNzYWdlIG11c3QgYmUgaW4gSlNPTiBmb3JtYXQiX3MpOwogICAgICAgICAgICAgc2Vu
ZFBlbmRpbmdFcnJvcnMoKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAg
ICAgIGlmICghcGFyc2VkTWVzc2FnZS0+YXNPYmplY3QobWVzc2FnZU9iamVjdCkpIHsKKyAgICAg
ICAgbWVzc2FnZU9iamVjdCA9IHBhcnNlZE1lc3NhZ2UtPmFzT2JqZWN0KCk7CisgICAgICAgIGlm
ICghbWVzc2FnZU9iamVjdCkgewogICAgICAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihJbnZh
bGlkUmVxdWVzdCwgIk1lc3NhZ2UgbXVzdCBiZSBhIEpTT05pZmllZCBvYmplY3QiX3MpOwogICAg
ICAgICAgICAgc2VuZFBlbmRpbmdFcnJvcnMoKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQogCi0gICAgICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gcmVxdWVzdElkVmFsdWU7Ci0gICAg
ICAgIGlmICghbWVzc2FnZU9iamVjdC0+Z2V0VmFsdWUoImlkIl9zLCByZXF1ZXN0SWRWYWx1ZSkp
IHsKKyAgICAgICAgYXV0byByZXF1ZXN0SWRWYWx1ZSA9IG1lc3NhZ2VPYmplY3QtPmdldFZhbHVl
KCJpZCJfcyk7CisgICAgICAgIGlmICghcmVxdWVzdElkVmFsdWUpIHsKICAgICAgICAgICAgIHJl
cG9ydFByb3RvY29sRXJyb3IoSW52YWxpZFJlcXVlc3QsICInaWQnIHByb3BlcnR5IHdhcyBub3Qg
Zm91bmQiX3MpOwogICAgICAgICAgICAgc2VuZFBlbmRpbmdFcnJvcnMoKTsKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIGlmICghcmVxdWVzdElkVmFsdWUtPmFzSW50
ZWdlcihyZXF1ZXN0SWQpKSB7CisgICAgICAgIGF1dG8gcmVxdWVzdElkSW50ID0gcmVxdWVzdElk
VmFsdWUtPmFzSW50ZWdlcigpOworICAgICAgICBpZiAoIXJlcXVlc3RJZEludCkgewogICAgICAg
ICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihJbnZhbGlkUmVxdWVzdCwgIlRoZSB0eXBlIG9mICdp
ZCcgcHJvcGVydHkgbXVzdCBiZSBpbnRlZ2VyIl9zKTsKICAgICAgICAgICAgIHNlbmRQZW5kaW5n
RXJyb3JzKCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KKworICAgICAgICByZXF1
ZXN0SWQgPSAqcmVxdWVzdElkSW50OwogICAgIH0KIAogICAgIHsKICAgICAgICAgLy8gV2UgY291
bGQgYmUgY2FsbGVkIHJlLWVudHJhbnRseSBmcm9tIGEgbmVzdGVkIHJ1biBsb29wLCBzbyByZXN0
b3JlIHRoZSBwcmV2aW91cyBpZC4KICAgICAgICAgU2V0Rm9yU2NvcGU8T3B0aW9uYWw8bG9uZz4+
IHNjb3BlZFJlcXVlc3RJZChtX2N1cnJlbnRSZXF1ZXN0SWQsIHJlcXVlc3RJZCk7CiAKLSAgICAg
ICAgUmVmUHRyPEpTT046OlZhbHVlPiBtZXRob2RWYWx1ZTsKLSAgICAgICAgaWYgKCFtZXNzYWdl
T2JqZWN0LT5nZXRWYWx1ZSgibWV0aG9kIl9zLCBtZXRob2RWYWx1ZSkpIHsKKyAgICAgICAgYXV0
byBtZXRob2RWYWx1ZSA9IG1lc3NhZ2VPYmplY3QtPmdldFZhbHVlKCJtZXRob2QiX3MpOworICAg
ICAgICBpZiAoIW1ldGhvZFZhbHVlKSB7CiAgICAgICAgICAgICByZXBvcnRQcm90b2NvbEVycm9y
KEludmFsaWRSZXF1ZXN0LCAiJ21ldGhvZCcgcHJvcGVydHkgd2Fzbid0IGZvdW5kIl9zKTsKICAg
ICAgICAgICAgIHNlbmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KIAotICAgICAgICBTdHJpbmcgbWV0aG9kU3RyaW5nOwotICAgICAgICBpZiAoIW1ldGhv
ZFZhbHVlLT5hc1N0cmluZyhtZXRob2RTdHJpbmcpKSB7CisgICAgICAgIGF1dG8gbWV0aG9kU3Ry
aW5nID0gbWV0aG9kVmFsdWUtPmFzU3RyaW5nKCk7CisgICAgICAgIGlmICghbWV0aG9kU3RyaW5n
KSB7CiAgICAgICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKEludmFsaWRSZXF1ZXN0LCAiVGhl
IHR5cGUgb2YgJ21ldGhvZCcgcHJvcGVydHkgbXVzdCBiZSBzdHJpbmciX3MpOwogICAgICAgICAg
ICAgc2VuZFBlbmRpbmdFcnJvcnMoKTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTE4NCwxMiAr
MTg4LDEyIEBAIHZvaWQgQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGNvbnN0IFN0cmluZyYg
bWVzc2FnZSkKIH0KIAogLy8gRklYTUU6IHJlbW92ZSB0aGlzIGZ1bmN0aW9uIHdoZW4gbGVnYWN5
IEluc3BlY3Rvck9iamVjdCBzeW1ib2xzIGFyZSBubyBsb25nZXIgbmVlZGVkIDxodHRwOi8vd2Vi
a2l0Lm9yZy9iLzE3OTg0Nz4uCi12b2lkIEJhY2tlbmREaXNwYXRjaGVyOjpzZW5kUmVzcG9uc2Uo
bG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcmVzdWx0KQordm9pZCBCYWNr
ZW5kRGlzcGF0Y2hlcjo6c2VuZFJlc3BvbnNlKGxvbmcgcmVxdWVzdElkLCBSZWY8SlNPTjo6T2Jq
ZWN0PiYmIHJlc3VsdCkKIHsKICAgICBzZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJl
c3VsdCksIGZhbHNlKTsKIH0KIAotdm9pZCBCYWNrZW5kRGlzcGF0Y2hlcjo6c2VuZFJlc3BvbnNl
KGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHJlc3VsdCwgYm9vbCkKK3Zv
aWQgQmFja2VuZERpc3BhdGNoZXI6OnNlbmRSZXNwb25zZShsb25nIHJlcXVlc3RJZCwgUmVmPEpT
T046Ok9iamVjdD4mJiByZXN1bHQsIGJvb2wpCiB7CiAgICAgQVNTRVJUKCFtX3Byb3RvY29sRXJy
b3JzLnNpemUoKSk7CiAKQEAgLTI3MCw3NCArMjc0LDY0IEBAIHZvaWQgQmFja2VuZERpc3BhdGNo
ZXI6OnJlcG9ydFByb3RvY29sRXJyb3IoT3B0aW9uYWw8bG9uZz4gcmVsYXRlZFJlcXVlc3RJZCwg
Q29tCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1UIEJhY2tlbmREaXNwYXRjaGVyOjpnZXRQ
cm9wZXJ0eVZhbHVlKEpTT046Ok9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJv
b2wqIG91dF9vcHRpb25hbFZhbHVlRm91bmQsIFQgZGVmYXVsdFZhbHVlLCBzdGQ6OmZ1bmN0aW9u
PGJvb2woSlNPTjo6VmFsdWUmLCBUJik+IGFzTWV0aG9kLCBjb25zdCBjaGFyKiB0eXBlTmFtZSkK
K1QgQmFja2VuZERpc3BhdGNoZXI6OmdldFByb3BlcnR5VmFsdWUoSlNPTjo6T2JqZWN0KiBvYmpl
Y3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCByZXF1aXJlZCwgc3RkOjpmdW5jdGlvbjxUKEpT
T046OlZhbHVlJik+IGNvbnZlcnRlciwgY29uc3QgY2hhciogdHlwZU5hbWUpCiB7Ci0gICAgVCBy
ZXN1bHQoZGVmYXVsdFZhbHVlKTsKLSAgICAvLyBvdXRfb3B0aW9uYWxWYWx1ZUZvdW5kIHNpZ25h
bHMgdG8gdGhlIGNhbGxlciB3aGV0aGVyIGFuIG9wdGlvbmFsIHByb3BlcnR5IHdhcyBmb3VuZC4K
LSAgICAvLyBpZiBvdXRfb3B0aW9uYWxWYWx1ZUZvdW5kID09IG51bGxwdHIsIHRoZW4gdGhpcyBp
cyBhIHJlcXVpcmVkIHByb3BlcnR5LgotICAgIGlmIChvdXRfb3B0aW9uYWxWYWx1ZUZvdW5kKQot
ICAgICAgICAqb3V0X29wdGlvbmFsVmFsdWVGb3VuZCA9IGZhbHNlOworICAgIFQgcmVzdWx0Owog
CiAgICAgaWYgKCFvYmplY3QpIHsKLSAgICAgICAgaWYgKCFvdXRfb3B0aW9uYWxWYWx1ZUZvdW5k
KQorICAgICAgICBpZiAocmVxdWlyZWQpCiAgICAgICAgICAgICByZXBvcnRQcm90b2NvbEVycm9y
KEJhY2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCBtYWtlU3RyaW5nKCIncGFyYW1zJyBv
YmplY3QgbXVzdCBjb250YWluIHJlcXVpcmVkIHBhcmFtZXRlciAnIiwgbmFtZSwgIicgd2l0aCB0
eXBlICciLCB0eXBlTmFtZSwgIicuIikpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0K
IAogICAgIGF1dG8gZmluZFJlc3VsdCA9IG9iamVjdC0+ZmluZChuYW1lKTsKICAgICBpZiAoZmlu
ZFJlc3VsdCA9PSBvYmplY3QtPmVuZCgpKSB7Ci0gICAgICAgIGlmICghb3V0X29wdGlvbmFsVmFs
dWVGb3VuZCkKKyAgICAgICAgaWYgKHJlcXVpcmVkKQogICAgICAgICAgICAgcmVwb3J0UHJvdG9j
b2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFtcywgbWFrZVN0cmluZygiUGFy
YW1ldGVyICciLCBuYW1lLCAiJyB3aXRoIHR5cGUgJyIsIHR5cGVOYW1lLCAiJyB3YXMgbm90IGZv
dW5kLiIpKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKLSAgICBpZiAoIWFzTWV0
aG9kKCpmaW5kUmVzdWx0LT52YWx1ZSwgcmVzdWx0KSkgewotICAgICAgICByZXBvcnRQcm90b2Nv
bEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCBtYWtlU3RyaW5nKCJQYXJh
bWV0ZXIgJyIsIG5hbWUsICInIGhhcyB3cm9uZyB0eXBlLiBJdCBtdXN0IGJlICciLCB0eXBlTmFt
ZSwgIicuIikpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KKyAgICByZXN1bHQgPSBj
b252ZXJ0ZXIoZmluZFJlc3VsdC0+dmFsdWUpOwogCi0gICAgaWYgKG91dF9vcHRpb25hbFZhbHVl
Rm91bmQpCi0gICAgICAgICpvdXRfb3B0aW9uYWxWYWx1ZUZvdW5kID0gdHJ1ZTsKKyAgICBpZiAo
IXJlc3VsdCkKKyAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6
SW52YWxpZFBhcmFtcywgbWFrZVN0cmluZygiUGFyYW1ldGVyICciLCBuYW1lLCAiJyBoYXMgd3Jv
bmcgdHlwZS4gSXQgbXVzdCBiZSAnIiwgdHlwZU5hbWUsICInLiIpKTsKIAogICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKLXN0YXRpYyBib29sIGNhc3RUb0ludGVnZXIoSlNPTjo6VmFsdWUmIHZhbHVl
LCBpbnQmIHJlc3VsdCkgeyByZXR1cm4gdmFsdWUuYXNJbnRlZ2VyKHJlc3VsdCk7IH0KLXN0YXRp
YyBib29sIGNhc3RUb051bWJlcihKU09OOjpWYWx1ZSYgdmFsdWUsIGRvdWJsZSYgcmVzdWx0KSB7
IHJldHVybiB2YWx1ZS5hc0RvdWJsZShyZXN1bHQpOyB9Ci0KLWludCBCYWNrZW5kRGlzcGF0Y2hl
cjo6Z2V0SW50ZWdlcihKU09OOjpPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBi
b29sKiB2YWx1ZUZvdW5kKQorT3B0aW9uYWw8Ym9vbD4gQmFja2VuZERpc3BhdGNoZXI6OmdldEJv
b2xlYW4oSlNPTjo6T2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCByZXF1
aXJlZCkKIHsKLSAgICByZXR1cm4gZ2V0UHJvcGVydHlWYWx1ZTxpbnQ+KG9iamVjdCwgbmFtZSwg
dmFsdWVGb3VuZCwgMCwgJmNhc3RUb0ludGVnZXIsICJJbnRlZ2VyIik7CisgICAgcmV0dXJuIGdl
dFByb3BlcnR5VmFsdWU8T3B0aW9uYWw8Ym9vbD4+KG9iamVjdCwgbmFtZSwgcmVxdWlyZWQsICZK
U09OOjpWYWx1ZTo6YXNCb29sZWFuLCAiQm9vbGVhbiIpOwogfQogCi1kb3VibGUgQmFja2VuZERp
c3BhdGNoZXI6OmdldERvdWJsZShKU09OOjpPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBu
YW1lLCBib29sKiB2YWx1ZUZvdW5kKQorT3B0aW9uYWw8aW50PiBCYWNrZW5kRGlzcGF0Y2hlcjo6
Z2V0SW50ZWdlcihKU09OOjpPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29s
IHJlcXVpcmVkKQogewotICAgIHJldHVybiBnZXRQcm9wZXJ0eVZhbHVlPGRvdWJsZT4ob2JqZWN0
LCBuYW1lLCB2YWx1ZUZvdW5kLCAwLCAmY2FzdFRvTnVtYmVyLCAiTnVtYmVyIik7CisgICAgcmV0
dXJuIGdldFByb3BlcnR5VmFsdWU8T3B0aW9uYWw8aW50Pj4ob2JqZWN0LCBuYW1lLCByZXF1aXJl
ZCwgJkpTT046OlZhbHVlOjphc0ludGVnZXIsICJJbnRlZ2VyIik7CiB9CiAKLVN0cmluZyBCYWNr
ZW5kRGlzcGF0Y2hlcjo6Z2V0U3RyaW5nKEpTT046Ok9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJp
bmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQpCitPcHRpb25hbDxkb3VibGU+IEJhY2tlbmREaXNw
YXRjaGVyOjpnZXREb3VibGUoSlNPTjo6T2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFt
ZSwgYm9vbCByZXF1aXJlZCkKIHsKLSAgICByZXR1cm4gZ2V0UHJvcGVydHlWYWx1ZTxTdHJpbmc+
KG9iamVjdCwgbmFtZSwgdmFsdWVGb3VuZCwgIiIsICZKU09OOjpWYWx1ZTo6YXNTdHJpbmcsICJT
dHJpbmciKTsKKyAgICByZXR1cm4gZ2V0UHJvcGVydHlWYWx1ZTxPcHRpb25hbDxkb3VibGU+Pihv
YmplY3QsIG5hbWUsIHJlcXVpcmVkLCAmSlNPTjo6VmFsdWU6OmFzRG91YmxlLCAiTnVtYmVyIik7
CiB9CiAKLWJvb2wgQmFja2VuZERpc3BhdGNoZXI6OmdldEJvb2xlYW4oSlNPTjo6T2JqZWN0KiBv
YmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCkKK1N0cmluZyBCYWNr
ZW5kRGlzcGF0Y2hlcjo6Z2V0U3RyaW5nKEpTT046Ok9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJp
bmcmIG5hbWUsIGJvb2wgcmVxdWlyZWQpCiB7Ci0gICAgcmV0dXJuIGdldFByb3BlcnR5VmFsdWU8
Ym9vbD4ob2JqZWN0LCBuYW1lLCB2YWx1ZUZvdW5kLCBmYWxzZSwgJkpTT046OlZhbHVlOjphc0Jv
b2xlYW4sICJCb29sZWFuIik7CisgICAgcmV0dXJuIGdldFByb3BlcnR5VmFsdWU8U3RyaW5nPihv
YmplY3QsIG5hbWUsIHJlcXVpcmVkLCAmSlNPTjo6VmFsdWU6OmFzU3RyaW5nLCAiU3RyaW5nIik7
CiB9CiAKLVJlZlB0cjxKU09OOjpPYmplY3Q+IEJhY2tlbmREaXNwYXRjaGVyOjpnZXRPYmplY3Qo
SlNPTjo6T2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3Vu
ZCkKK1JlZlB0cjxKU09OOjpWYWx1ZT4gQmFja2VuZERpc3BhdGNoZXI6OmdldFZhbHVlKEpTT046
Ok9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wgcmVxdWlyZWQpCiB7Ci0g
ICAgcmV0dXJuIGdldFByb3BlcnR5VmFsdWU8UmVmUHRyPEpTT046Ok9iamVjdD4+KG9iamVjdCwg
bmFtZSwgdmFsdWVGb3VuZCwgbnVsbHB0ciwgJkpTT046OlZhbHVlOjphc09iamVjdCwgIk9iamVj
dCIpOworICAgIHJldHVybiBnZXRQcm9wZXJ0eVZhbHVlPFJlZlB0cjxKU09OOjpWYWx1ZT4+KG9i
amVjdCwgbmFtZSwgcmVxdWlyZWQsICZKU09OOjpWYWx1ZTo6YXNWYWx1ZSwgIlZhbHVlIik7CiB9
CiAKLVJlZlB0cjxKU09OOjpBcnJheT4gQmFja2VuZERpc3BhdGNoZXI6OmdldEFycmF5KEpTT046
Ok9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQpCitS
ZWZQdHI8SlNPTjo6T2JqZWN0PiBCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0T2JqZWN0KEpTT046Ok9i
amVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wgcmVxdWlyZWQpCiB7Ci0gICAg
cmV0dXJuIGdldFByb3BlcnR5VmFsdWU8UmVmUHRyPEpTT046OkFycmF5Pj4ob2JqZWN0LCBuYW1l
LCB2YWx1ZUZvdW5kLCBudWxscHRyLCAmSlNPTjo6VmFsdWU6OmFzQXJyYXksICJBcnJheSIpOwor
ICAgIHJldHVybiBnZXRQcm9wZXJ0eVZhbHVlPFJlZlB0cjxKU09OOjpPYmplY3Q+PihvYmplY3Qs
IG5hbWUsIHJlcXVpcmVkLCAmSlNPTjo6VmFsdWU6OmFzT2JqZWN0LCAiT2JqZWN0Iik7CiB9CiAK
LVJlZlB0cjxKU09OOjpWYWx1ZT4gQmFja2VuZERpc3BhdGNoZXI6OmdldFZhbHVlKEpTT046Ok9i
amVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQpCitSZWZQ
dHI8SlNPTjo6QXJyYXk+IEJhY2tlbmREaXNwYXRjaGVyOjpnZXRBcnJheShKU09OOjpPYmplY3Qq
IG9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sIHJlcXVpcmVkKQogewotICAgIHJldHVy
biBnZXRQcm9wZXJ0eVZhbHVlPFJlZlB0cjxKU09OOjpWYWx1ZT4+KG9iamVjdCwgbmFtZSwgdmFs
dWVGb3VuZCwgbnVsbHB0ciwgJkpTT046OlZhbHVlOjphc1ZhbHVlLCAiVmFsdWUiKTsKKyAgICBy
ZXR1cm4gZ2V0UHJvcGVydHlWYWx1ZTxSZWZQdHI8SlNPTjo6QXJyYXk+PihvYmplY3QsIG5hbWUs
IHJlcXVpcmVkLCAmSlNPTjo6VmFsdWU6OmFzQXJyYXksICJBcnJheSIpOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaAppbmRleCA5NWQ5ZDgxMTg4
ZTczNWU4ZjFiNzBjYzBkZWVlMjY4MmNiNjcxNGYwLi4wMmM5NmQ3MjYzOGMyMjJmMDMwZDE0OTFj
YzliOTI2MmIwOGJlY2JhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oCkBAIC0yOSw4ICsyOSwx
MCBAQAogI2luY2x1ZGUgIkluc3BlY3RvckZyb250ZW5kUm91dGVyLmgiCiAjaW5jbHVkZSAiSW5z
cGVjdG9yUHJvdG9jb2xUeXBlcy5oIgogI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CisjaW5jbHVkZSA8
d3RmL0Z1bmN0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3Rm
L1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewpAQCAtNTksNyArNjEsNyBA
QCBwdWJsaWM6CiAgICAgICAgIGJvb2wgaXNBY3RpdmUoKSBjb25zdDsKICAgICAgICAgdm9pZCBk
aXNhYmxlKCkgeyBtX2FscmVhZHlTZW50ID0gdHJ1ZTsgfQogCi0gICAgICAgIHZvaWQgc2VuZFN1
Y2Nlc3MoUmVmUHRyPEpTT046Ok9iamVjdD4mJik7CisgICAgICAgIHZvaWQgc2VuZFN1Y2Nlc3Mo
UmVmPEpTT046Ok9iamVjdD4mJik7CiAgICAgICAgIHZvaWQgc2VuZEZhaWx1cmUoY29uc3QgRXJy
b3JTdHJpbmcmKTsKIAogICAgIHByaXZhdGU6CkBAIC04NywyOCArODksMjcgQEAgcHVibGljOgog
ICAgIC8vIE5vdGUgdGhhdCAndW51c2VkJyBpcyBhIHdvcmthcm91bmQgc28gdGhlIGNvbXBpbGVy
IGNhbiBwaWNrIHRoZSByaWdodCBzZW5kUmVzcG9uc2UgYmFzZWQgb24gYXJpdHkuCiAgICAgLy8g
V2hlbiA8aHR0cDovL3dlYmtpdC5vcmcvYi8xNzk4NDc+IGlzIGZpeGVkIG9yIHRoaXMgY2xhc3Mg
aXMgcmVuYW1lZCBmb3IgdGhlIEpTT046Ok9iamVjdCBjYXNlLAogICAgIC8vIHRoZW4gdGhpcyBh
bHRlcm5hdGUgbWV0aG9kIHdpdGggYSBkdW1teSBwYXJhbWV0ZXIgY2FuIGJlIHJlbW92ZWQgaW4g
ZmF2b3Igb2YgdGhlIG9uZSB3aXRob3V0IGl0LgotICAgIHZvaWQgc2VuZFJlc3BvbnNlKGxvbmcg
cmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHJlc3VsdCwgYm9vbCB1bnVzZWQpOwot
ICAgIHZvaWQgc2VuZFJlc3BvbnNlKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0
PiYmIHJlc3VsdCk7CisgICAgdm9pZCBzZW5kUmVzcG9uc2UobG9uZyByZXF1ZXN0SWQsIFJlZjxK
U09OOjpPYmplY3Q+JiYgcmVzdWx0LCBib29sIHVudXNlZCk7CisgICAgdm9pZCBzZW5kUmVzcG9u
c2UobG9uZyByZXF1ZXN0SWQsIFJlZjxKU09OOjpPYmplY3Q+JiYgcmVzdWx0KTsKICAgICB2b2lk
IHNlbmRQZW5kaW5nRXJyb3JzKCk7CiAKICAgICB2b2lkIHJlcG9ydFByb3RvY29sRXJyb3IoQ29t
bW9uRXJyb3JDb2RlLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSk7CiAgICAgdm9pZCByZXBv
cnRQcm90b2NvbEVycm9yKE9wdGlvbmFsPGxvbmc+IHJlbGF0ZWRSZXF1ZXN0SWQsIENvbW1vbkVy
cm9yQ29kZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UpOwogCi0gICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVD4KLSAgICBXVEZfSU5URVJOQUwKLSAgICBUIGdldFByb3BlcnR5VmFsdWUoSlNPTjo6
T2JqZWN0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiBvdXRfb3B0aW9uYWxWYWx1ZUZvdW5k
LCBUIGRlZmF1bHRWYWx1ZSwgc3RkOjpmdW5jdGlvbjxib29sKEpTT046OlZhbHVlJiwgVCYpPiwg
Y29uc3QgY2hhciogdHlwZU5hbWUpOwotCi0gICAgaW50IGdldEludGVnZXIoSlNPTjo6T2JqZWN0
KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kKTsKLSAgICBkb3VibGUgZ2V0
RG91YmxlKEpTT046Ok9iamVjdCosIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3Vu
ZCk7Ci0gICAgU3RyaW5nIGdldFN0cmluZyhKU09OOjpPYmplY3QqLCBjb25zdCBTdHJpbmcmIG5h
bWUsIGJvb2wqIHZhbHVlRm91bmQpOwotICAgIGJvb2wgZ2V0Qm9vbGVhbihKU09OOjpPYmplY3Qq
LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQpOwotICAgIFJlZlB0cjxKU09O
OjpWYWx1ZT4gZ2V0VmFsdWUoSlNPTjo6T2JqZWN0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29s
KiB2YWx1ZUZvdW5kKTsKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBnZXRPYmplY3QoSlNPTjo6
T2JqZWN0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kKTsKLSAgICBSZWZQ
dHI8SlNPTjo6QXJyYXk+IGdldEFycmF5KEpTT046Ok9iamVjdCosIGNvbnN0IFN0cmluZyYgbmFt
ZSwgYm9vbCogdmFsdWVGb3VuZCk7CisgICAgT3B0aW9uYWw8Ym9vbD4gZ2V0Qm9vbGVhbihKU09O
OjpPYmplY3QqLCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wgcmVxdWlyZWQpOworICAgIE9wdGlv
bmFsPGludD4gZ2V0SW50ZWdlcihKU09OOjpPYmplY3QqLCBjb25zdCBTdHJpbmcmIG5hbWUsIGJv
b2wgcmVxdWlyZWQpOworICAgIE9wdGlvbmFsPGRvdWJsZT4gZ2V0RG91YmxlKEpTT046Ok9iamVj
dCosIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCByZXF1aXJlZCk7CisgICAgU3RyaW5nIGdldFN0
cmluZyhKU09OOjpPYmplY3QqLCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wgcmVxdWlyZWQpOwor
ICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gZ2V0VmFsdWUoSlNPTjo6T2JqZWN0KiwgY29uc3QgU3Ry
aW5nJiBuYW1lLCBib29sIHJlcXVpcmVkKTsKKyAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBnZXRP
YmplY3QoSlNPTjo6T2JqZWN0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sIHJlcXVpcmVkKTsK
KyAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IGdldEFycmF5KEpTT046Ok9iamVjdCosIGNvbnN0IFN0
cmluZyYgbmFtZSwgYm9vbCByZXF1aXJlZCk7CiAKIHByaXZhdGU6CiAgICAgQmFja2VuZERpc3Bh
dGNoZXIoUmVmPEZyb250ZW5kUm91dGVyPiYmKTsKIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
CisgICAgVCBnZXRQcm9wZXJ0eVZhbHVlKEpTT046Ok9iamVjdCosIGNvbnN0IFN0cmluZyYgbmFt
ZSwgYm9vbCByZXF1aXJlZCwgc3RkOjpmdW5jdGlvbjxUKEpTT046OlZhbHVlJik+IGNvbnZlcnRl
ciwgY29uc3QgY2hhciogdHlwZU5hbWUpOworCiAgICAgUmVmPEZyb250ZW5kUm91dGVyPiBtX2Zy
b250ZW5kUm91dGVyOwogICAgIEhhc2hNYXA8U3RyaW5nLCBTdXBwbGVtZW50YWxCYWNrZW5kRGlz
cGF0Y2hlcio+IG1fZGlzcGF0Y2hlcnM7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmgKaW5kZXggZDcwMTBhNWM2
MmU4NjMzYTRkZDAxYjJjMDA2MDViYWFjYzljOGM3OS4uNTg3N2UwZDc0MTA4MmY3MTFhNWZmZWQ0
MzVjZWZjMGYyMTMxMzM1ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmgKQEAgLTI3LDEyICsyNywxOSBAQAog
I3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0
Zi9FeHBlY3RlZC5oPgogI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCiBuYW1lc3BhY2Ug
UHJvdG9jb2wgewogCit1c2luZyBFcnJvclN0cmluZyA9IFN0cmluZzsKKwordGVtcGxhdGUgPHR5
cGVuYW1lIFQ+Cit1c2luZyBFcnJvclN0cmluZ09yID0gRXhwZWN0ZWQ8VCwgRXJyb3JTdHJpbmc+
OworCiB0ZW1wbGF0ZTx0eXBlbmFtZT4gc3RydWN0IEJpbmRpbmdUcmFpdHM7CiAKIHRlbXBsYXRl
PEpTT046OlZhbHVlOjpUeXBlIHR5cGU+IHN0cnVjdCBQcmltaXRpdmVCaW5kaW5nVHJhaXRzIHsK
QEAgLTQ0LDI5ICs1MSwyMyBAQCB0ZW1wbGF0ZTxKU09OOjpWYWx1ZTo6VHlwZSB0eXBlPiBzdHJ1
Y3QgUHJpbWl0aXZlQmluZGluZ1RyYWl0cyB7CiB9OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBz
dHJ1Y3QgQmluZGluZ1RyYWl0czxKU09OOjpBcnJheU9mPFQ+PiB7Ci0gICAgc3RhdGljIFJlZlB0
cjxKU09OOjpBcnJheU9mPFQ+PiBydW50aW1lQ2FzdChSZWZQdHI8SlNPTjo6VmFsdWU+JiYgdmFs
dWUpCisgICAgc3RhdGljIFJlZjxKU09OOjpBcnJheU9mPFQ+PiBydW50aW1lQ2FzdChSZWY8SlNP
Tjo6VmFsdWU+JiYgdmFsdWUpCiAgICAgewotICAgICAgICBBU1NFUlRfQVJHKHZhbHVlLCB2YWx1
ZSk7Ci0gICAgICAgIFJlZlB0cjxKU09OOjpBcnJheT4gYXJyYXk7Ci0gICAgICAgIGJvb2wgY2Fz
dFN1Y2NlZWRlZCA9IHZhbHVlLT5hc0FycmF5KGFycmF5KTsKLSAgICAgICAgQVNTRVJUX1VOVVNF
RChjYXN0U3VjY2VlZGVkLCBjYXN0U3VjY2VlZGVkKTsKLSAgICAgICAgYXNzZXJ0VmFsdWVIYXNF
eHBlY3RlZFR5cGUoYXJyYXkuZ2V0KCkpOworICAgICAgICBhdXRvIGFycmF5ID0gdmFsdWUtPmFz
QXJyYXkoKTsKKyAgICAgICAgQmluZGluZ1RyYWl0czxKU09OOjpBcnJheU9mPFQ+Pjo6YXNzZXJ0
VmFsdWVIYXNFeHBlY3RlZFR5cGUoYXJyYXkuZ2V0KCkpOwogICAgICAgICBDT01QSUxFX0FTU0VS
VChzaXplb2YoSlNPTjo6QXJyYXlPZjxUPikgPT0gc2l6ZW9mKEpTT046OkFycmF5KSwgdHlwZV9j
YXN0X3Byb2JsZW0pOwotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SlNPTjo6QXJyYXlPZjxU
Pio+KHN0YXRpY19jYXN0PEpTT046OkFycmF5QmFzZSo+KGFycmF5LmdldCgpKSk7CisgICAgICAg
IHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SlNPTjo6QXJyYXlPZjxUPj4oc3RhdGljX3Jl
ZmVyZW5jZV9jYXN0PEpTT046OkFycmF5QmFzZT4oYXJyYXkucmVsZWFzZU5vbk51bGwoKSkpOwog
ICAgIH0KIAogICAgIHN0YXRpYyB2b2lkIGFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKEpTT046
OlZhbHVlKiB2YWx1ZSkKICAgICB7CisgICAgICAgIEFTU0VSVF9VTlVTRUQodmFsdWUsIHZhbHVl
KTsKICNpZiBBU1NFUlRfRU5BQkxFRAotICAgICAgICBBU1NFUlRfQVJHKHZhbHVlLCB2YWx1ZSk7
Ci0gICAgICAgIFJlZlB0cjxKU09OOjpBcnJheT4gYXJyYXk7Ci0gICAgICAgIGJvb2wgY2FzdFN1
Y2NlZWRlZCA9IHZhbHVlLT5hc0FycmF5KGFycmF5KTsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChj
YXN0U3VjY2VlZGVkLCBjYXN0U3VjY2VlZGVkKTsKKyAgICAgICAgYXV0byBhcnJheSA9IHZhbHVl
LT5hc0FycmF5KCk7CisgICAgICAgIEFTU0VSVChhcnJheSk7CiAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBhcnJheS0+bGVuZ3RoKCk7IGkrKykKLSAgICAgICAgICAgIEJpbmRpbmdU
cmFpdHM8VD46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKGFycmF5LT5nZXQoaSkuZ2V0KCkp
OwotI2Vsc2UKLSAgICAgICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKLSNlbmRpZiAvLyBBU1NFUlRf
RU5BQkxFRAorICAgICAgICAgICAgQmluZGluZ1RyYWl0czxUPjo6YXNzZXJ0VmFsdWVIYXNFeHBl
Y3RlZFR5cGUoYXJyYXktPmdldChpKS5wdHIoKSk7CisjZW5kaWYKICAgICB9CiB9OwogCkBAIC04
NSw2ICs4Niw0IEBAIHRlbXBsYXRlPD4gc3RydWN0IEJpbmRpbmdUcmFpdHM8aW50PiA6IFByaW1p
dGl2ZUJpbmRpbmdUcmFpdHM8SlNPTjo6VmFsdWU6OlR5cGU6CiAKIH0KIAotdXNpbmcgUHJvdG9j
b2w6OkJpbmRpbmdUcmFpdHM7Ci0KIH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0dsb2JhbE9iamVjdENvbnNvbGVD
bGllbnQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0dsb2JhbE9iamVj
dENvbnNvbGVDbGllbnQuY3BwCmluZGV4IDQ2ZDBiNjk0MzI4ZWUwNDE3NjY1MDNmZTU2ZjlkNmMy
Mjk5NzU3YzYuLmJjNjM2OWEwYzM5ZDliYjY0MDk1ZjVkODcwNDRkNjA3NTNjZDQ4N2QgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNHbG9iYWxPYmplY3RDb25z
b2xlQ2xpZW50LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTR2xv
YmFsT2JqZWN0Q29uc29sZUNsaWVudC5jcHAKQEAgLTEzNiwyOCArMTM2LDIyIEBAIHZvaWQgSlNH
bG9iYWxPYmplY3RDb25zb2xlQ2xpZW50Ojpwcm9maWxlRW5kKEpTQzo6SlNHbG9iYWxPYmplY3Qq
LCBjb25zdCBTdHJpbmcmCiAKIHZvaWQgSlNHbG9iYWxPYmplY3RDb25zb2xlQ2xpZW50OjpzdGFy
dENvbnNvbGVQcm9maWxlKCkKIHsKLSAgICBFcnJvclN0cmluZyBpZ25vcmVkOwotCiAgICAgaWYg
KG1fZGVidWdnZXJBZ2VudCkgewogICAgICAgICBtX3Byb2ZpbGVSZXN0b3JlQnJlYWtwb2ludEFj
dGl2ZVZhbHVlID0gbV9kZWJ1Z2dlckFnZW50LT5icmVha3BvaW50c0FjdGl2ZSgpOwotICAgICAg
ICBtX2RlYnVnZ2VyQWdlbnQtPnNldEJyZWFrcG9pbnRzQWN0aXZlKGlnbm9yZWQsIGZhbHNlKTsK
KyAgICAgICAgbV9kZWJ1Z2dlckFnZW50LT5zZXRCcmVha3BvaW50c0FjdGl2ZShmYWxzZSk7CiAg
ICAgfQogCi0gICAgaWYgKG1fc2NyaXB0UHJvZmlsZXJBZ2VudCkgewotICAgICAgICBjb25zdCBi
b29sIGluY2x1ZGVTYW1wbGVzID0gdHJ1ZTsKLSAgICAgICAgbV9zY3JpcHRQcm9maWxlckFnZW50
LT5zdGFydFRyYWNraW5nKGlnbm9yZWQsICZpbmNsdWRlU2FtcGxlcyk7Ci0gICAgfQorICAgIGlm
IChtX3NjcmlwdFByb2ZpbGVyQWdlbnQpCisgICAgICAgIG1fc2NyaXB0UHJvZmlsZXJBZ2VudC0+
c3RhcnRUcmFja2luZyh0cnVlKTsKIH0KIAogdm9pZCBKU0dsb2JhbE9iamVjdENvbnNvbGVDbGll
bnQ6OnN0b3BDb25zb2xlUHJvZmlsZSgpCiB7Ci0gICAgRXJyb3JTdHJpbmcgaWdub3JlZDsKLQog
ICAgIGlmIChtX3NjcmlwdFByb2ZpbGVyQWdlbnQpCi0gICAgICAgIG1fc2NyaXB0UHJvZmlsZXJB
Z2VudC0+c3RvcFRyYWNraW5nKGlnbm9yZWQpOworICAgICAgICBtX3NjcmlwdFByb2ZpbGVyQWdl
bnQtPnN0b3BUcmFja2luZygpOwogCiAgICAgaWYgKG1fZGVidWdnZXJBZ2VudCkKLSAgICAgICAg
bV9kZWJ1Z2dlckFnZW50LT5zZXRCcmVha3BvaW50c0FjdGl2ZShpZ25vcmVkLCBtX3Byb2ZpbGVS
ZXN0b3JlQnJlYWtwb2ludEFjdGl2ZVZhbHVlKTsKKyAgICAgICAgbV9kZWJ1Z2dlckFnZW50LT5z
ZXRCcmVha3BvaW50c0FjdGl2ZShtX3Byb2ZpbGVSZXN0b3JlQnJlYWtwb2ludEFjdGl2ZVZhbHVl
KTsKIH0KIAogdm9pZCBKU0dsb2JhbE9iamVjdENvbnNvbGVDbGllbnQ6OnRha2VIZWFwU25hcHNo
b3QoSlNDOjpKU0dsb2JhbE9iamVjdCosIGNvbnN0IFN0cmluZyYgdGl0bGUpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTR2xvYmFsT2JqZWN0SW5zcGVjdG9y
Q29udHJvbGxlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTR2xvYmFs
T2JqZWN0SW5zcGVjdG9yQ29udHJvbGxlci5jcHAKaW5kZXggZDRkYjU2M2ViZDc2NTMyNjYwNGY1
MTJjMzFlOWRiMjg2ZDEwODNmNC4uYTYwZjI1ZDQzN2ZiZTlmZGZjZTZiYTU4ZDNlODJjMjZkZDU2
ZDYzZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0dsb2Jh
bE9iamVjdEluc3BlY3RvckNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3IvSlNHbG9iYWxPYmplY3RJbnNwZWN0b3JDb250cm9sbGVyLmNwcApAQCAtMjMx
LDkgKzIzMSw4IEBAIHZvaWQgSlNHbG9iYWxPYmplY3RJbnNwZWN0b3JDb250cm9sbGVyOjpmcm9u
dGVuZEluaXRpYWxpemVkKCkKICAgICBpZiAobV9wYXVzZUFmdGVySW5pdGlhbGl6YXRpb24pIHsK
ICAgICAgICAgbV9wYXVzZUFmdGVySW5pdGlhbGl6YXRpb24gPSBmYWxzZTsKIAotICAgICAgICBF
cnJvclN0cmluZyBpZ25vcmVkOwotICAgICAgICBlbnN1cmVEZWJ1Z2dlckFnZW50KCkuZW5hYmxl
KGlnbm9yZWQpOwotICAgICAgICBlbnN1cmVEZWJ1Z2dlckFnZW50KCkucGF1c2UoaWdub3JlZCk7
CisgICAgICAgIGVuc3VyZURlYnVnZ2VyQWdlbnQoKS5lbmFibGUoKTsKKyAgICAgICAgZW5zdXJl
RGVidWdnZXJBZ2VudCgpLnBhdXNlKCk7CiAgICAgfQogCiAjaWYgRU5BQkxFKFJFTU9URV9JTlNQ
RUNUT1IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50
cy9JbnNwZWN0b3JBZ2VudC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2Fn
ZW50cy9JbnNwZWN0b3JBZ2VudC5jcHAKaW5kZXggNWI5YTcxNTQwODUwODY0MWNhMDYxYWVjZjhm
MDExODQ2ZjcxMDQ0OC4uODY4NmQ2OTQxYjc4NDc5OTViMmRmZmRkNjc4YjY2ZDNiNDgxZGRiNSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVj
dG9yQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRz
L0luc3BlY3RvckFnZW50LmNwcApAQCAtNTQsNDQgKzU0LDQ5IEBAIHZvaWQgSW5zcGVjdG9yQWdl
bnQ6OndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKERpc2Nvbm5lY3RSZWFzb24pCiB7CiAg
ICAgbV9wZW5kaW5nRXZhbHVhdGVUZXN0Q29tbWFuZHMuY2xlYXIoKTsKIAotICAgIEVycm9yU3Ry
aW5nIGlnbm9yZWQ7Ci0gICAgZGlzYWJsZShpZ25vcmVkKTsKKyAgICBkaXNhYmxlKCk7CiB9CiAK
LXZvaWQgSW5zcGVjdG9yQWdlbnQ6OmVuYWJsZShFcnJvclN0cmluZyYpCitQcm90b2NvbDo6RXJy
b3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JBZ2VudDo6ZW5hYmxlKCkKIHsKICAgICBtX2VuYWJs
ZWQgPSB0cnVlOwogCiAgICAgaWYgKG1fcGVuZGluZ0luc3BlY3REYXRhLmZpcnN0KQotICAgICAg
ICBpbnNwZWN0KG1fcGVuZGluZ0luc3BlY3REYXRhLmZpcnN0LmNvcHlSZWYoKSwgbV9wZW5kaW5n
SW5zcGVjdERhdGEuc2Vjb25kLmNvcHlSZWYoKSk7CisgICAgICAgIGluc3BlY3QobV9wZW5kaW5n
SW5zcGVjdERhdGEuZmlyc3QucmVsZWFzZU5vbk51bGwoKSwgbV9wZW5kaW5nSW5zcGVjdERhdGEu
c2Vjb25kLnJlbGVhc2VOb25OdWxsKCkpOwogCiAgICAgZm9yIChhdXRvJiB0ZXN0Q29tbWFuZCA6
IG1fcGVuZGluZ0V2YWx1YXRlVGVzdENvbW1hbmRzKQogICAgICAgICBtX2Zyb250ZW5kRGlzcGF0
Y2hlci0+ZXZhbHVhdGVGb3JUZXN0SW5Gcm9udGVuZCh0ZXN0Q29tbWFuZCk7CiAKICAgICBtX3Bl
bmRpbmdFdmFsdWF0ZVRlc3RDb21tYW5kcy5jbGVhcigpOworCisgICAgcmV0dXJuIHsgfTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JBZ2VudDo6ZGlzYWJsZShFcnJvclN0cmluZyYpCitQcm90b2NvbDo6
RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JBZ2VudDo6ZGlzYWJsZSgpCiB7CiAgICAgbV9l
bmFibGVkID0gZmFsc2U7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckFn
ZW50Ojppbml0aWFsaXplZChFcnJvclN0cmluZyYpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2
b2lkPiBJbnNwZWN0b3JBZ2VudDo6aW5pdGlhbGl6ZWQoKQogewogICAgIG1fZW52aXJvbm1lbnQu
ZnJvbnRlbmRJbml0aWFsaXplZCgpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNw
ZWN0b3JBZ2VudDo6aW5zcGVjdChSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVj
dD4mJiBvYmplY3RUb0luc3BlY3QsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgaGludHMpCit2b2lk
IEluc3BlY3RvckFnZW50OjppbnNwZWN0KFJlZjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2Jq
ZWN0PiYmIG9iamVjdCwgUmVmPEpTT046Ok9iamVjdD4mJiBoaW50cykKIHsKICAgICBpZiAobV9l
bmFibGVkKSB7Ci0gICAgICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5pbnNwZWN0KG9iamVjdFRv
SW5zcGVjdCwgaGludHMpOworICAgICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+aW5zcGVjdChX
VEZNb3ZlKG9iamVjdCksIFdURk1vdmUoaGludHMpKTsKICAgICAgICAgbV9wZW5kaW5nSW5zcGVj
dERhdGEuZmlyc3QgPSBudWxscHRyOwogICAgICAgICBtX3BlbmRpbmdJbnNwZWN0RGF0YS5zZWNv
bmQgPSBudWxscHRyOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbV9wZW5kaW5nSW5z
cGVjdERhdGEuZmlyc3QgPSBvYmplY3RUb0luc3BlY3Q7Ci0gICAgbV9wZW5kaW5nSW5zcGVjdERh
dGEuc2Vjb25kID0gaGludHM7CisgICAgbV9wZW5kaW5nSW5zcGVjdERhdGEuZmlyc3QgPSBXVEZN
b3ZlKG9iamVjdCk7CisgICAgbV9wZW5kaW5nSW5zcGVjdERhdGEuc2Vjb25kID0gV1RGTW92ZSho
aW50cyk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQWdlbnQ6OmV2YWx1YXRlRm9yVGVzdEluRnJvbnRl
bmQoY29uc3QgU3RyaW5nJiBzY3JpcHQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBZ2VudC5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQWdlbnQuaAppbmRleCA4NThjNjlhYzJlYjg2
ZGMxODI4YTJmM2UxMjY3MTU4MDllODlmMzVhLi41OTRjZWU3MTc0MDYwNTk5Yzg5OTM2ZDBjMjcz
NmExNTNhYTI3M2Q0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L2FnZW50cy9JbnNwZWN0b3JBZ2VudC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3IvYWdlbnRzL0luc3BlY3RvckFnZW50LmgKQEAgLTQwLDI2ICs0MCwyNCBAQCBuYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKIGNsYXNzIEJhY2tlbmREaXNwYXRjaGVyOwogY2xhc3MgSW5zcGVjdG9y
RW52aXJvbm1lbnQ7CiAKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCiBjbGFzcyBKU19F
WFBPUlRfUFJJVkFURSBJbnNwZWN0b3JBZ2VudCBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3JBZ2Vu
dEJhc2UsIHB1YmxpYyBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewogICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKEluc3BlY3RvckFnZW50KTsKICAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKIHB1YmxpYzoKICAgICBJbnNwZWN0b3JBZ2VudChBZ2VudENvbnRleHQmKTsKLSAg
ICB+SW5zcGVjdG9yQWdlbnQoKSBmaW5hbDsKKyAgICB+SW5zcGVjdG9yQWdlbnQoKTsKIAogICAg
IC8vIEluc3BlY3RvckFnZW50QmFzZQotICAgIHZvaWQgZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNr
ZW5kKEZyb250ZW5kUm91dGVyKiwgQmFja2VuZERpc3BhdGNoZXIqKSBmaW5hbDsKLSAgICB2b2lk
IHdpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKERpc2Nvbm5lY3RSZWFzb24pIGZpbmFsOwor
ICAgIHZvaWQgZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEZyb250ZW5kUm91dGVyKiwgQmFj
a2VuZERpc3BhdGNoZXIqKTsKKyAgICB2b2lkIHdpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5k
KERpc2Nvbm5lY3RSZWFzb24pOwogCiAgICAgLy8gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyCi0gICAgdm9pZCBlbmFibGUoRXJyb3JTdHJpbmcmKSBmaW5hbDsKLSAgICB2b2lkIGRp
c2FibGUoRXJyb3JTdHJpbmcmKSBmaW5hbDsKLSAgICB2b2lkIGluaXRpYWxpemVkKEVycm9yU3Ry
aW5nJikgZmluYWw7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZW5hYmxlKCk7
CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZGlzYWJsZSgpOworICAgIFByb3Rv
Y29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGluaXRpYWxpemVkKCk7CiAKICAgICAvLyBDb21tYW5k
TGluZUFQSQotICAgIHZvaWQgaW5zcGVjdChSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90
ZU9iamVjdD4mJiBvYmplY3RUb0luc3BlY3QsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgaGludHMp
OworICAgIHZvaWQgaW5zcGVjdChSZWY8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4m
JiwgUmVmPEpTT046Ok9iamVjdD4mJiBoaW50cyk7CiAKICAgICB2b2lkIGV2YWx1YXRlRm9yVGVz
dEluRnJvbnRlbmQoY29uc3QgU3RyaW5nJiBzY3JpcHQpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBdWRpdEFnZW50LmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckF1ZGl0QWdl
bnQuY3BwCmluZGV4IDAwYjFlY2MxYWY0ODA3MGVmZWRjNzY2YTNiYTZmZjViNmY0YmE3MDAuLjJm
OWY4ZjA1OWNiMTM5MTNhZmEzMGY2NDk3N2UwMzNiNTM0Yzk0OTMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckF1ZGl0QWdlbnQuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckF1
ZGl0QWdlbnQuY3BwCkBAIC01Nyw0MSArNTcsNDEgQEAgdm9pZCBJbnNwZWN0b3JBdWRpdEFnZW50
Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChEaXNjb25uZWN0UmVhc29uKQogewogfQog
Ci12b2lkIEluc3BlY3RvckF1ZGl0QWdlbnQ6OnNldHVwKEVycm9yU3RyaW5nJiBlcnJvclN0cmlu
ZywgY29uc3QgaW50KiBleGVjdXRpb25Db250ZXh0SWQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdP
cjx2b2lkPiBJbnNwZWN0b3JBdWRpdEFnZW50OjpzZXR1cChPcHRpb25hbDxQcm90b2NvbDo6UnVu
dGltZTo6RXhlY3V0aW9uQ29udGV4dElkPiYmIGV4ZWN1dGlvbkNvbnRleHRJZCkKIHsKLSAgICBp
ZiAoaGFzQWN0aXZlQXVkaXQoKSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJNdXN0IGNhbGwg
dGVhcmRvd24gYmVmb3JlIGNhbGxpbmcgc2V0dXAgYWdhaW4iX3M7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOwogCi0gICAgSW5q
ZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHQgPSBpbmplY3RlZFNjcmlwdEZvckV2YWwoZXJyb3JT
dHJpbmcsIGV4ZWN1dGlvbkNvbnRleHRJZCk7CisgICAgaWYgKGhhc0FjdGl2ZUF1ZGl0KCkpCisg
ICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTXVzdCBjYWxsIHRlYXJkb3duIGJlZm9yZSBj
YWxsaW5nIHNldHVwIGFnYWluIl9zKTsKKworICAgIEluamVjdGVkU2NyaXB0IGluamVjdGVkU2Ny
aXB0ID0gaW5qZWN0ZWRTY3JpcHRGb3JFdmFsKGVycm9yU3RyaW5nLCBXVEZNb3ZlKGV4ZWN1dGlv
bkNvbnRleHRJZCkpOwogICAgIGlmIChpbmplY3RlZFNjcmlwdC5oYXNOb1ZhbHVlKCkpCi0gICAg
ICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsK
IAogICAgIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGluamVjdGVkU2NyaXB0
Lmdsb2JhbE9iamVjdCgpOwotICAgIGlmICghZ2xvYmFsT2JqZWN0KSB7Ci0gICAgICAgIGVycm9y
U3RyaW5nID0gIk1pc3NpbmcgZXhlY3V0aW9uIHN0YXRlIG9mIGluamVjdGVkIHNjcmlwdCBmb3Ig
Z2l2ZW4gZXhlY3V0aW9uQ29udGV4dElkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAg
IGlmICghZ2xvYmFsT2JqZWN0KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk1pc3Np
bmcgZXhlY3V0aW9uIHN0YXRlIG9mIGluamVjdGVkIHNjcmlwdCBmb3IgZ2l2ZW4gZXhlY3V0aW9u
Q29udGV4dElkIl9zKTsKIAogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKIAogICAg
IEpTQzo6SlNMb2NrSG9sZGVyIGxvY2soZ2xvYmFsT2JqZWN0KTsKIAogICAgIG1faW5qZWN0ZWRX
ZWJJbnNwZWN0b3JBdWRpdFZhbHVlLnNldCh2bSwgY29uc3RydWN0RW1wdHlPYmplY3QoZ2xvYmFs
T2JqZWN0KSk7Ci0gICAgaWYgKCFtX2luamVjdGVkV2ViSW5zcGVjdG9yQXVkaXRWYWx1ZSkgewot
ICAgICAgICBlcnJvclN0cmluZyA9ICJVbmFibGUgdG8gY29uc3RydWN0IGluamVjdGVkIFdlYklu
c3BlY3RvckF1ZGl0IG9iamVjdC4iX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYg
KCFtX2luamVjdGVkV2ViSW5zcGVjdG9yQXVkaXRWYWx1ZSkKKyAgICAgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKCJVbmFibGUgdG8gY29uc3RydWN0IGluamVjdGVkIFdlYkluc3BlY3RvckF1ZGl0
IG9iamVjdC4iX3MpOwogCiAgICAgcG9wdWxhdGVBdWRpdE9iamVjdChnbG9iYWxPYmplY3QsIG1f
aW5qZWN0ZWRXZWJJbnNwZWN0b3JBdWRpdFZhbHVlKTsKKworICAgIHJldHVybiB7IH07CiB9CiAK
LXZvaWQgSW5zcGVjdG9yQXVkaXRBZ2VudDo6cnVuKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywg
Y29uc3QgU3RyaW5nJiB0ZXN0LCBjb25zdCBpbnQqIGV4ZWN1dGlvbkNvbnRleHRJZCwgUmVmUHRy
PFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiByZXN1bHQsIE9wdGlvbmFsPGJvb2w+
JiB3YXNUaHJvd24pCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxzdGQ6OnR1cGxlPFJlZjxQcm90
b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiwgT3B0aW9uYWw8Ym9vbD4gLyogd2FzVGhyb3du
ICovPj4gSW5zcGVjdG9yQXVkaXRBZ2VudDo6cnVuKGNvbnN0IFN0cmluZyYgdGVzdCwgT3B0aW9u
YWw8UHJvdG9jb2w6OlJ1bnRpbWU6OkV4ZWN1dGlvbkNvbnRleHRJZD4mJiBleGVjdXRpb25Db250
ZXh0SWQpCiB7Ci0gICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHQgPSBpbmplY3RlZFNj
cmlwdEZvckV2YWwoZXJyb3JTdHJpbmcsIGV4ZWN1dGlvbkNvbnRleHRJZCk7CisgICAgUHJvdG9j
b2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCisgICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0
ZWRTY3JpcHQgPSBpbmplY3RlZFNjcmlwdEZvckV2YWwoZXJyb3JTdHJpbmcsIFdURk1vdmUoZXhl
Y3V0aW9uQ29udGV4dElkKSk7CiAgICAgaWYgKGluamVjdGVkU2NyaXB0Lmhhc05vVmFsdWUoKSkK
LSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJp
bmcpOwogCiAgICAgU3RyaW5nQnVpbGRlciBmdW5jdGlvblN0cmluZzsKICAgICBmdW5jdGlvblN0
cmluZy5hcHBlbmRMaXRlcmFsKCIoZnVuY3Rpb24oV2ViSW5zcGVjdG9yQXVkaXQpIHsgXCJ1c2Ug
c3RyaWN0XCI7IHJldHVybiBldmFsKGAoIik7CkBAIC0xMDMsNiArMTAzLDggQEAgdm9pZCBJbnNw
ZWN0b3JBdWRpdEFnZW50OjpydW4oRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJp
bmcmIHRlc3QsIGNvbnMKICAgICBpZiAobV9pbmplY3RlZFdlYkluc3BlY3RvckF1ZGl0VmFsdWUp
CiAgICAgICAgIG9wdGlvbnMuYXJncyA9IHsgbV9pbmplY3RlZFdlYkluc3BlY3RvckF1ZGl0VmFs
dWUuZ2V0KCkgfTsKIAorICAgIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0
PiByZXN1bHQ7CisgICAgT3B0aW9uYWw8Ym9vbD4gd2FzVGhyb3duOwogICAgIE9wdGlvbmFsPGlu
dD4gc2F2ZWRSZXN1bHRJbmRleDsKIAogICAgIEpTQzo6RGVidWdnZXI6OlRlbXBvcmFyaWx5RGlz
YWJsZUV4Y2VwdGlvbkJyZWFrcG9pbnRzIHRlbXBvcmFyaWx5RGlzYWJsZUV4Y2VwdGlvbkJyZWFr
cG9pbnRzKG1fZGVidWdnZXIpOwpAQCAtMTEzLDE2ICsxMTUsMjEgQEAgdm9pZCBJbnNwZWN0b3JB
dWRpdEFnZW50OjpydW4oRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHRl
c3QsIGNvbnMKICAgICBpbmplY3RlZFNjcmlwdC5leGVjdXRlKGVycm9yU3RyaW5nLCBmdW5jdGlv
blN0cmluZy50b1N0cmluZygpLCBXVEZNb3ZlKG9wdGlvbnMpLCByZXN1bHQsIHdhc1Rocm93biwg
c2F2ZWRSZXN1bHRJbmRleCk7CiAKICAgICB1bm11dGVDb25zb2xlKCk7CisKKyAgICBpZiAoIXJl
c3VsdCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKKworICAg
IHJldHVybiB7IHsgcmVzdWx0LnJlbGVhc2VOb25OdWxsKCksIFdURk1vdmUod2FzVGhyb3duKSB9
IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yQXVkaXRBZ2VudDo6dGVhcmRvd24oRXJyb3JTdHJpbmcm
IGVycm9yU3RyaW5nKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yQXVk
aXRBZ2VudDo6dGVhcmRvd24oKQogewotICAgIGlmICghaGFzQWN0aXZlQXVkaXQoKSkgewotICAg
ICAgICBlcnJvclN0cmluZyA9ICJNdXN0IGNhbGwgc2V0dXAgYmVmb3JlIGNhbGxpbmcgdGVhcmRv
d24iX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKCFoYXNBY3RpdmVBdWRpdCgp
KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk11c3QgY2FsbCBzZXR1cCBiZWZvcmUg
Y2FsbGluZyB0ZWFyZG93biJfcyk7CiAKICAgICBtX2luamVjdGVkV2ViSW5zcGVjdG9yQXVkaXRW
YWx1ZS5jbGVhcigpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAogYm9vbCBJbnNwZWN0b3JBdWRp
dEFnZW50OjpoYXNBY3RpdmVBdWRpdCgpIGNvbnN0CkBAIC0xMzksNyArMTQ2LDcgQEAgdm9pZCBJ
bnNwZWN0b3JBdWRpdEFnZW50Ojpwb3B1bGF0ZUF1ZGl0T2JqZWN0KEpTQzo6SlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwKICAgICBKU0M6OlZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsK
ICAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKHZtKTsKIAotICAgIGF1ZGl0T2JqZWN0LT5wdXRE
aXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIlZlcnNpb24iKSwgSlND
OjpKU1ZhbHVlKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1ZGl0OjpWRVJTSU9OKSk7CisgICAgYXVk
aXRPYmplY3QtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAi
VmVyc2lvbiIpLCBKU0M6OkpTVmFsdWUoUHJvdG9jb2w6OkF1ZGl0OjpWRVJTSU9OKSk7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQXVkaXRBZ2VudC5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQXVkaXRBZ2VudC5oCmluZGV4IDVi
NmQ4YWFiNzIyNjNmMThhYTY0MTA3ODVjMDFjOWJhOGM0ZDMwZjguLmJmNTA2YzM2ZDJkZmYzZjZm
Y2E1OTlmNjdlNTg1NGEyNjhhN2IxZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckF1ZGl0QWdlbnQuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBdWRpdEFnZW50LmgKQEAgLTQw
LDcgKzQwLDYgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKIGNsYXNzIEluamVjdGVkU2NyaXB0
OwogY2xhc3MgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOwotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJp
bmc7CiAKIGNsYXNzIEpTX0VYUE9SVF9QUklWQVRFIEluc3BlY3RvckF1ZGl0QWdlbnQgOiBwdWJs
aWMgSW5zcGVjdG9yQWdlbnRCYXNlLCBwdWJsaWMgQXVkaXRCYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXIgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEluc3BlY3RvckF1ZGl0QWdlbnQpOwpAQCAt
NTMsOSArNTIsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCB3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFj
a2VuZChEaXNjb25uZWN0UmVhc29uKSBmaW5hbDsKIAogICAgIC8vIEF1ZGl0QmFja2VuZERpc3Bh
dGNoZXJIYW5kbGVyCi0gICAgdm9pZCBzZXR1cChFcnJvclN0cmluZyYsIGNvbnN0IGludCogZXhl
Y3V0aW9uQ29udGV4dElkKSBmaW5hbDsKLSAgICB2b2lkIHJ1bihFcnJvclN0cmluZyYsIGNvbnN0
IFN0cmluZyYgdGVzdCwgY29uc3QgaW50KiBleGVjdXRpb25Db250ZXh0SWQsIFJlZlB0cjxQcm90
b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0LCBPcHRpb25hbDxib29sPiYgd2Fz
VGhyb3duKSBmaW5hbDsKLSAgICB2b2lkIHRlYXJkb3duKEVycm9yU3RyaW5nJikgZmluYWw7Cisg
ICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc2V0dXAoT3B0aW9uYWw8UHJvdG9jb2w6
OlJ1bnRpbWU6OkV4ZWN1dGlvbkNvbnRleHRJZD4mJikgZmluYWw7CisgICAgUHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8c3RkOjp0dXBsZTxSZWY8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVj
dD4sIE9wdGlvbmFsPGJvb2w+IC8qIHdhc1Rocm93biAqLz4+IHJ1bihjb25zdCBTdHJpbmcmIHRl
c3QsIE9wdGlvbmFsPFByb3RvY29sOjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0SWQ+JiYpIGZp
bmFsOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHRlYXJkb3duKCkgZmluYWw7
CiAKICAgICBib29sIGhhc0FjdGl2ZUF1ZGl0KCkgY29uc3Q7CiAKQEAgLTY0LDcgKzYzLDcgQEAg
cHJvdGVjdGVkOgogCiAgICAgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyJiBpbmplY3RlZFNjcmlwdE1h
bmFnZXIoKSB7IHJldHVybiBtX2luamVjdGVkU2NyaXB0TWFuYWdlcjsgfQogCi0gICAgdmlydHVh
bCBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdEZvckV2YWwoRXJyb3JTdHJpbmcmLCBjb25z
dCBpbnQqIGV4ZWN1dGlvbkNvbnRleHRJZCkgPSAwOworICAgIHZpcnR1YWwgSW5qZWN0ZWRTY3Jp
cHQgaW5qZWN0ZWRTY3JpcHRGb3JFdmFsKFByb3RvY29sOjpFcnJvclN0cmluZyYsIE9wdGlvbmFs
PFByb3RvY29sOjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0SWQ+JiYpID0gMDsKIAogICAgIHZp
cnR1YWwgdm9pZCBwb3B1bGF0ZUF1ZGl0T2JqZWN0KEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6
OlN0cm9uZzxKU0M6OkpTT2JqZWN0PiYgYXVkaXRPYmplY3QpOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDb25zb2xlQWdlbnQu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ29u
c29sZUFnZW50LmNwcAppbmRleCAxMDVmZTZmYzZjMjIwOGVmNzYzNzFlYWVkZGJmYTQ3MzFmYmZi
NjU0Li4xM2I2MjM0ZDFmNTMyODUwZTMwMDUyNzk3M2MyMTViNzJlMzZhZTE3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDb25zb2xl
QWdlbnQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0lu
c3BlY3RvckNvbnNvbGVBZ2VudC5jcHAKQEAgLTUzLDggKzUzLDcgQEAgdm9pZCBJbnNwZWN0b3JD
b25zb2xlQWdlbnQ6OmRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChGcm9udGVuZFJvdXRlcios
IEJhY2tlbmQKIAogdm9pZCBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OndpbGxEZXN0cm95RnJvbnRl
bmRBbmRCYWNrZW5kKERpc2Nvbm5lY3RSZWFzb24pCiB7Ci0gICAgU3RyaW5nIGVycm9yU3RyaW5n
OwotICAgIGRpc2FibGUoZXJyb3JTdHJpbmcpOworICAgIGRpc2FibGUoKTsKIH0KIAogdm9pZCBJ
bnNwZWN0b3JDb25zb2xlQWdlbnQ6OmRpc2NhcmRWYWx1ZXMoKQpAQCAtNjMsMTAgKzYyLDEwIEBA
IHZvaWQgSW5zcGVjdG9yQ29uc29sZUFnZW50OjpkaXNjYXJkVmFsdWVzKCkKICAgICBtX2V4cGly
ZWRDb25zb2xlTWVzc2FnZUNvdW50ID0gMDsKIH0KIAotdm9pZCBJbnNwZWN0b3JDb25zb2xlQWdl
bnQ6OmVuYWJsZShFcnJvclN0cmluZyYpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJ
bnNwZWN0b3JDb25zb2xlQWdlbnQ6OmVuYWJsZSgpCiB7CiAgICAgaWYgKG1fZW5hYmxlZCkKLSAg
ICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4geyB9OwogCiAgICAgbV9lbmFibGVkID0gdHJ1
ZTsKIApAQCAtODAsMTcgKzc5LDIxIEBAIHZvaWQgSW5zcGVjdG9yQ29uc29sZUFnZW50OjplbmFi
bGUoRXJyb3JTdHJpbmcmKQogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtZXNzYWdlcy5z
aXplKCk7ICsraSkKICAgICAgICAgbWVzc2FnZXNbaV0tPmFkZFRvRnJvbnRlbmQoKm1fZnJvbnRl
bmREaXNwYXRjaGVyLCBtX2luamVjdGVkU2NyaXB0TWFuYWdlciwgZmFsc2UpOworCisgICAgcmV0
dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OmRpc2FibGUoRXJyb3JT
dHJpbmcmKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yQ29uc29sZUFn
ZW50OjpkaXNhYmxlKCkKIHsKICAgICBpZiAoIW1fZW5hYmxlZCkKLSAgICAgICAgcmV0dXJuOwor
ICAgICAgICByZXR1cm4geyB9OwogCiAgICAgbV9lbmFibGVkID0gZmFsc2U7CisKKyAgICByZXR1
cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckNvbnNvbGVBZ2VudDo6Y2xlYXJNZXNzYWdlcyhF
cnJvclN0cmluZyYpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JDb25z
b2xlQWdlbnQ6OmNsZWFyTWVzc2FnZXMoKQogewogICAgIG1fY29uc29sZU1lc3NhZ2VzLmNsZWFy
KCk7CiAgICAgbV9leHBpcmVkQ29uc29sZU1lc3NhZ2VDb3VudCA9IDA7CkBAIC05OSw2ICsxMDIs
OCBAQCB2b2lkIEluc3BlY3RvckNvbnNvbGVBZ2VudDo6Y2xlYXJNZXNzYWdlcyhFcnJvclN0cmlu
ZyYpCiAKICAgICBpZiAobV9lbmFibGVkKQogICAgICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+
bWVzc2FnZXNDbGVhcmVkKCk7CisKKyAgICByZXR1cm4geyB9OwogfQogCiBib29sIEluc3BlY3Rv
ckNvbnNvbGVBZ2VudDo6ZGV2ZWxvcGVyRXh0cmFzRW5hYmxlZCgpIGNvbnN0CkBAIC0xMDgsOCAr
MTEzLDcgQEAgYm9vbCBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OmRldmVsb3BlckV4dHJhc0VuYWJs
ZWQoKSBjb25zdAogCiB2b2lkIEluc3BlY3RvckNvbnNvbGVBZ2VudDo6cmVzZXQoKQogewotICAg
IEVycm9yU3RyaW5nIGlnbm9yZWQ7Ci0gICAgY2xlYXJNZXNzYWdlcyhpZ25vcmVkKTsKKyAgICBj
bGVhck1lc3NhZ2VzKCk7CiAKICAgICBtX3RpbWVzLmNsZWFyKCk7CiAgICAgbV9jb3VudHMuY2xl
YXIoKTsKQEAgLTExNywxMCArMTIxLDggQEAgdm9pZCBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OnJl
c2V0KCkKIAogdm9pZCBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OmFkZE1lc3NhZ2VUb0NvbnNvbGUo
c3RkOjp1bmlxdWVfcHRyPENvbnNvbGVNZXNzYWdlPiBtZXNzYWdlKQogewotICAgIGlmIChtZXNz
YWdlLT50eXBlKCkgPT0gTWVzc2FnZVR5cGU6OkNsZWFyKSB7Ci0gICAgICAgIEVycm9yU3RyaW5n
IGlnbm9yZWQ7Ci0gICAgICAgIGNsZWFyTWVzc2FnZXMoaWdub3JlZCk7Ci0gICAgfQorICAgIGlm
IChtZXNzYWdlLT50eXBlKCkgPT0gTWVzc2FnZVR5cGU6OkNsZWFyKQorICAgICAgICBjbGVhck1l
c3NhZ2VzKCk7CiAKICAgICBhZGRDb25zb2xlTWVzc2FnZShXVEZNb3ZlKG1lc3NhZ2UpKTsKIH0K
QEAgLTE5MSwxMiArMTkzLDEyIEBAIHZvaWQgSW5zcGVjdG9yQ29uc29sZUFnZW50Ojp0YWtlSGVh
cFNuYXBzaG90KGNvbnN0IFN0cmluZyYgdGl0bGUpCiAgICAgaWYgKCFtX2hlYXBBZ2VudCkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgRXJyb3JTdHJpbmcgaWdub3JlZDsKLSAgICBkb3VibGUgdGlt
ZXN0YW1wOwotICAgIFN0cmluZyBzbmFwc2hvdERhdGE7Ci0gICAgbV9oZWFwQWdlbnQtPnNuYXBz
aG90KGlnbm9yZWQsICZ0aW1lc3RhbXAsICZzbmFwc2hvdERhdGEpOworICAgIGF1dG8gcmVzdWx0
ID0gbV9oZWFwQWdlbnQtPnNuYXBzaG90KCk7CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJl
dHVybjsKIAotICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5oZWFwU25hcHNob3QodGltZXN0YW1w
LCBzbmFwc2hvdERhdGEsIHRpdGxlLmlzRW1wdHkoKSA/IG51bGxwdHIgOiAmdGl0bGUpOworICAg
IGF1dG8gW3RpbWVzdGFtcCwgc25hcHNob3REYXRhXSA9IFdURk1vdmUocmVzdWx0LnZhbHVlKCkp
OworICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5oZWFwU25hcHNob3QodGltZXN0YW1wLCBzbmFw
c2hvdERhdGEsIHRpdGxlKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OmNvdW50
KEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgU3RyaW5nJiBsYWJlbCkK
QEAgLTI1NiwxNSArMjU4LDE1IEBAIHZvaWQgSW5zcGVjdG9yQ29uc29sZUFnZW50OjphZGRDb25z
b2xlTWVzc2FnZShzdGQ6OnVuaXF1ZV9wdHI8Q29uc29sZU1lc3NhZ2U+IGNvCiAgICAgfQogfQog
Ci12b2lkIEluc3BlY3RvckNvbnNvbGVBZ2VudDo6Z2V0TG9nZ2luZ0NoYW5uZWxzKEVycm9yU3Ry
aW5nJiwgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWw+PiYg
Y2hhbm5lbHMpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SlNPTjo6QXJyYXlPZjxQcm90
b2NvbDo6Q29uc29sZTo6Q2hhbm5lbD4+PiBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OmdldExvZ2dp
bmdDaGFubmVscygpCiB7CiAgICAgLy8gRGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBoYXMgbm8gbG9n
Z2luZyBjaGFubmVscy4KLSAgICBjaGFubmVscyA9IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkNv
bnNvbGU6OkNoYW5uZWw+OjpjcmVhdGUoKTsKKyAgICByZXR1cm4gSlNPTjo6QXJyYXlPZjxQcm90
b2NvbDo6Q29uc29sZTo6Q2hhbm5lbD46OmNyZWF0ZSgpOwogfQogCi12b2lkIEluc3BlY3RvckNv
bnNvbGVBZ2VudDo6c2V0TG9nZ2luZ0NoYW5uZWxMZXZlbChFcnJvclN0cmluZyYgZXJyb3JTdHJp
bmcsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdP
cjx2b2lkPiBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OnNldExvZ2dpbmdDaGFubmVsTGV2ZWwoUHJv
dG9jb2w6OkNvbnNvbGU6OkNoYW5uZWxTb3VyY2UsIFByb3RvY29sOjpDb25zb2xlOjpDaGFubmVs
TGV2ZWwpCiB7Ci0gICAgZXJyb3JTdHJpbmcgPSAiTm90IHN1cHBvcnRlZCJfczsKKyAgICByZXR1
cm4gbWFrZVVuZXhwZWN0ZWQoIk5vdCBzdXBwb3J0ZWQiX3MpOwogfQogCiB9IC8vIG5hbWVzcGFj
ZSBJbnNwZWN0b3IKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
YWdlbnRzL0luc3BlY3RvckNvbnNvbGVBZ2VudC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ29uc29sZUFnZW50LmgKaW5kZXggNzhjYWYxYWQwOGFl
NTdiMWUwNzg1YzlhZGQ1MTY3NTM2YWZiZjI5Ni4uZWQ4ZTFmNjk5YTVkMGM5MWNkMDU2NjkxYTdk
YjIxOTgwZjIzNWQyMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9hZ2VudHMvSW5zcGVjdG9yQ29uc29sZUFnZW50LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ29uc29sZUFnZW50LmgKQEAgLTQ2LDcgKzQ2
LDYgQEAgY2xhc3MgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOwogY2xhc3MgSW5zcGVjdG9ySGVhcEFn
ZW50OwogY2xhc3MgU2NyaXB0QXJndW1lbnRzOwogY2xhc3MgU2NyaXB0Q2FsbFN0YWNrOwotdHlw
ZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiAKIGNsYXNzIEpTX0VYUE9SVF9QUklWQVRFIEluc3Bl
Y3RvckNvbnNvbGVBZ2VudCA6IHB1YmxpYyBJbnNwZWN0b3JBZ2VudEJhc2UsIHB1YmxpYyBDb25z
b2xlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJ
bnNwZWN0b3JDb25zb2xlQWdlbnQpOwpAQCAtNjEsMTEgKzYwLDExIEBAIHB1YmxpYzoKICAgICB2
b2lkIGRpc2NhcmRWYWx1ZXMoKSBmaW5hbDsKIAogICAgIC8vIENvbnNvbGVCYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXIKLSAgICB2b2lkIGVuYWJsZShFcnJvclN0cmluZyYpIGZpbmFsOwotICAgIHZv
aWQgZGlzYWJsZShFcnJvclN0cmluZyYpIGZpbmFsOwotICAgIHZvaWQgY2xlYXJNZXNzYWdlcyhF
cnJvclN0cmluZyYpIG92ZXJyaWRlOwotICAgIHZvaWQgZ2V0TG9nZ2luZ0NoYW5uZWxzKEVycm9y
U3RyaW5nJiwgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWw+
PiYpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0TG9nZ2luZ0NoYW5uZWxMZXZlbChFcnJvclN0cmlu
ZyYsIGNvbnN0IFN0cmluZyYgY2hhbm5lbCwgY29uc3QgU3RyaW5nJiBsZXZlbCkgb3ZlcnJpZGU7
CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZW5hYmxlKCkgZmluYWw7CisgICAg
UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZGlzYWJsZSgpIGZpbmFsOworICAgIFByb3Rv
Y29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGNsZWFyTWVzc2FnZXMoKSBvdmVycmlkZTsKKyAgICBQ
cm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6Q29uc29s
ZTo6Q2hhbm5lbD4+PiBnZXRMb2dnaW5nQ2hhbm5lbHMoKSBvdmVycmlkZTsKKyAgICBQcm90b2Nv
bDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzZXRMb2dnaW5nQ2hhbm5lbExldmVsKFByb3RvY29sOjpD
b25zb2xlOjpDaGFubmVsU291cmNlLCBQcm90b2NvbDo6Q29uc29sZTo6Q2hhbm5lbExldmVsKSBv
dmVycmlkZTsKIAogICAgIHZvaWQgc2V0SGVhcEFnZW50KEluc3BlY3RvckhlYXBBZ2VudCogYWdl
bnQpIHsgbV9oZWFwQWdlbnQgPSBhZ2VudDsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRlYnVnZ2VyQWdl
bnQuY3BwCmluZGV4IDEzZmMyYzUzYjVhYzQ2NWU2ZTNkNjZhYmUwNTVjMGVlNmQ0ZGMwNzAuLjQx
ZjRiYTQyN2VhNGY3OWRjMTQ0N2ZlYTU5NjRhZDgwNjNjYmRmNzIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQuY3BwCkBAIC02NCwyNSArNjQsMjUgQEAgc3RhdGljIGJvb2wgaXNXZWJL
aXRJbmplY3RlZFNjcmlwdChjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCkKICAgICByZXR1cm4gc291
cmNlVVJMLnN0YXJ0c1dpdGgoIl9fSW5qZWN0ZWRTY3JpcHRfIikgJiYgc291cmNlVVJMLmVuZHNX
aXRoKCIuanMiKTsKIH0KIAotc3RhdGljIE9wdGlvbmFsPEpTQzo6QnJlYWtwb2ludDo6QWN0aW9u
OjpUeXBlPiBicmVha3BvaW50QWN0aW9uVHlwZUZvclN0cmluZyhFcnJvclN0cmluZyYgZXJyb3JT
dHJpbmcsIGNvbnN0IFN0cmluZyYgdHlwZVN0cmluZykKK3N0YXRpYyBPcHRpb25hbDxKU0M6OkJy
ZWFrcG9pbnQ6OkFjdGlvbjo6VHlwZT4gYnJlYWtwb2ludEFjdGlvblR5cGVGb3JTdHJpbmcoUHJv
dG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiB0eXBlU3RyaW5n
KQogewotICAgIGF1dG8gdHlwZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6Okluc3BlY3RvckhlbHBl
cnM6OnBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dl
cjo6QnJlYWtwb2ludEFjdGlvbjo6VHlwZT4odHlwZVN0cmluZyk7CisgICAgYXV0byB0eXBlID0g
UHJvdG9jb2w6OkhlbHBlcnM6OnBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxQcm90b2NvbDo6RGVi
dWdnZXI6OkJyZWFrcG9pbnRBY3Rpb246OlR5cGU+KHR5cGVTdHJpbmcpOwogICAgIGlmICghdHlw
ZSkgewogICAgICAgICBlcnJvclN0cmluZyA9IG1ha2VTdHJpbmcoIlVua25vd24gYnJlYWtwb2lu
dCBhY3Rpb24gdHlwZTogIl9zLCB0eXBlU3RyaW5nKTsKICAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKICAgICB9CiAKICAgICBzd2l0Y2ggKCp0eXBlKSB7Ci0gICAgY2FzZSBJbnNwZWN0b3I6
OlByb3RvY29sOjpEZWJ1Z2dlcjo6QnJlYWtwb2ludEFjdGlvbjo6VHlwZTo6TG9nOgorICAgIGNh
c2UgUHJvdG9jb2w6OkRlYnVnZ2VyOjpCcmVha3BvaW50QWN0aW9uOjpUeXBlOjpMb2c6CiAgICAg
ICAgIHJldHVybiBKU0M6OkJyZWFrcG9pbnQ6OkFjdGlvbjo6VHlwZTo6TG9nOwogCi0gICAgY2Fz
ZSBJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6QnJlYWtwb2ludEFjdGlvbjo6VHlwZTo6
RXZhbHVhdGU6CisgICAgY2FzZSBQcm90b2NvbDo6RGVidWdnZXI6OkJyZWFrcG9pbnRBY3Rpb246
OlR5cGU6OkV2YWx1YXRlOgogICAgICAgICByZXR1cm4gSlNDOjpCcmVha3BvaW50OjpBY3Rpb246
OlR5cGU6OkV2YWx1YXRlOwogCi0gICAgY2FzZSBJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dl
cjo6QnJlYWtwb2ludEFjdGlvbjo6VHlwZTo6U291bmQ6CisgICAgY2FzZSBQcm90b2NvbDo6RGVi
dWdnZXI6OkJyZWFrcG9pbnRBY3Rpb246OlR5cGU6OlNvdW5kOgogICAgICAgICByZXR1cm4gSlND
OjpCcmVha3BvaW50OjpBY3Rpb246OlR5cGU6OlNvdW5kOwogCi0gICAgY2FzZSBJbnNwZWN0b3I6
OlByb3RvY29sOjpEZWJ1Z2dlcjo6QnJlYWtwb2ludEFjdGlvbjo6VHlwZTo6UHJvYmU6CisgICAg
Y2FzZSBQcm90b2NvbDo6RGVidWdnZXI6OkJyZWFrcG9pbnRBY3Rpb246OlR5cGU6OlByb2JlOgog
ICAgICAgICByZXR1cm4gSlNDOjpCcmVha3BvaW50OjpBY3Rpb246OlR5cGU6OlByb2JlOwogICAg
IH0KIApAQCAtOTEsMzAgKzkxLDI5IEBAIHN0YXRpYyBPcHRpb25hbDxKU0M6OkJyZWFrcG9pbnQ6
OkFjdGlvbjo6VHlwZT4gYnJlYWtwb2ludEFjdGlvblR5cGVGb3JTdHJpbmcoRXJyCiB9CiAKIHRl
bXBsYXRlIDx0eXBlbmFtZSBUPgotc3RhdGljIFQgcGFyc2VCcmVha3BvaW50T3B0aW9ucyhFcnJv
clN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IEpTT046Ok9iamVjdCogb3B0aW9uc1BheWxvYWQs
IEZ1bmN0aW9uPFQoY29uc3QgU3RyaW5nJiwgSlNDOjpCcmVha3BvaW50OjpBY3Rpb25zVmVjdG9y
JiYsIGJvb2wsIHNpemVfdCk+IGNhbGxiYWNrKQorc3RhdGljIFQgcGFyc2VCcmVha3BvaW50T3B0
aW9ucyhQcm90b2NvbDo6RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiYmIG9wdGlvbnMsIEZ1bmN0aW9uPFQoY29uc3QgU3RyaW5nJiwgSlNDOjpCcmVha3BvaW50
OjpBY3Rpb25zVmVjdG9yJiYsIGJvb2wsIHNpemVfdCk+IGNhbGxiYWNrKQogewogICAgIFN0cmlu
ZyBjb25kaXRpb247CiAgICAgSlNDOjpCcmVha3BvaW50OjpBY3Rpb25zVmVjdG9yIGFjdGlvbnM7
CiAgICAgYm9vbCBhdXRvQ29udGludWUgPSBmYWxzZTsKICAgICBzaXplX3QgaWdub3JlQ291bnQg
PSAwOwogCi0gICAgaWYgKG9wdGlvbnNQYXlsb2FkKSB7Ci0gICAgICAgIG9wdGlvbnNQYXlsb2Fk
LT5nZXRTdHJpbmcoImNvbmRpdGlvbiJfcywgY29uZGl0aW9uKTsKKyAgICBpZiAob3B0aW9ucykg
eworICAgICAgICBjb25kaXRpb24gPSBvcHRpb25zLT5nZXRTdHJpbmcoUHJvdG9jb2w6OkRlYnVn
Z2VyOjpCcmVha3BvaW50T3B0aW9uczo6Y29uZGl0aW9uS2V5KTsKIAotICAgICAgICBSZWZQdHI8
SlNPTjo6QXJyYXk+IGFjdGlvbnNQYXlsb2FkOwotICAgICAgICBvcHRpb25zUGF5bG9hZC0+Z2V0
QXJyYXkoImFjdGlvbnMiX3MsIGFjdGlvbnNQYXlsb2FkKTsKKyAgICAgICAgYXV0byBhY3Rpb25z
UGF5bG9hZCA9IG9wdGlvbnMtPmdldEFycmF5KFByb3RvY29sOjpEZWJ1Z2dlcjo6QnJlYWtwb2lu
dE9wdGlvbnM6OmFjdGlvbnNLZXkpOwogICAgICAgICBpZiAoYXV0byBjb3VudCA9IGFjdGlvbnNQ
YXlsb2FkID8gYWN0aW9uc1BheWxvYWQtPmxlbmd0aCgpIDogMCkgewogICAgICAgICAgICAgYWN0
aW9ucy5yZXNlcnZlQ2FwYWNpdHkoY291bnQpOwogCiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewotICAgICAgICAgICAgICAgIFJlZlB0cjxKU09OOjpP
YmplY3Q+IGFjdGlvbk9iamVjdDsKLSAgICAgICAgICAgICAgICBpZiAoIWFjdGlvbnNQYXlsb2Fk
LT5nZXQoaSktPmFzT2JqZWN0KGFjdGlvbk9iamVjdCkpIHsKKyAgICAgICAgICAgICAgICBhdXRv
IGFjdGlvbk9iamVjdCA9IGFjdGlvbnNQYXlsb2FkLT5nZXQoaSktPmFzT2JqZWN0KCk7CisgICAg
ICAgICAgICAgICAgaWYgKCFhY3Rpb25PYmplY3QpIHsKICAgICAgICAgICAgICAgICAgICAgZXJy
b3JTdHJpbmcgPSAiVW5leHBlY3RlZCBub24tb2JqZWN0IGl0ZW0gaW4gZ2l2ZW4gYWN0aW9ucyJf
czsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgICAgICBTdHJpbmcgYWN0aW9uVHlwZVN0cmluZzsKLSAgICAgICAgICAgICAg
ICBpZiAoIWFjdGlvbk9iamVjdC0+Z2V0U3RyaW5nKCJ0eXBlIl9zLCBhY3Rpb25UeXBlU3RyaW5n
KSkgeworICAgICAgICAgICAgICAgIGF1dG8gYWN0aW9uVHlwZVN0cmluZyA9IGFjdGlvbk9iamVj
dC0+Z2V0U3RyaW5nKFByb3RvY29sOjpEZWJ1Z2dlcjo6QnJlYWtwb2ludEFjdGlvbjo6dHlwZUtl
eSk7CisgICAgICAgICAgICAgICAgaWYgKCFhY3Rpb25UeXBlU3RyaW5nKSB7CiAgICAgICAgICAg
ICAgICAgICAgIGVycm9yU3RyaW5nID0gIk1pc3NpbmcgdHlwZSBmb3IgaXRlbSBpbiBnaXZlbiBh
Y3Rpb25zIl9zOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4geyB9OwogICAgICAgICAgICAg
ICAgIH0KQEAgLTEyNSwzMyArMTI0LDMzIEBAIHN0YXRpYyBUIHBhcnNlQnJlYWtwb2ludE9wdGlv
bnMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBKU09OOjpPYmplY3QqIG9wCiAKICAg
ICAgICAgICAgICAgICBKU0M6OkJyZWFrcG9pbnQ6OkFjdGlvbiBhY3Rpb24oKmFjdGlvblR5cGUp
OwogCi0gICAgICAgICAgICAgICAgYWN0aW9uT2JqZWN0LT5nZXRTdHJpbmcoImRhdGEiX3MsIGFj
dGlvbi5kYXRhKTsKKyAgICAgICAgICAgICAgICBhY3Rpb24uZGF0YSA9IGFjdGlvbk9iamVjdC0+
Z2V0U3RyaW5nKFByb3RvY29sOjpEZWJ1Z2dlcjo6QnJlYWtwb2ludEFjdGlvbjo6ZGF0YUtleSk7
CiAKICAgICAgICAgICAgICAgICAvLyBTcGVjaWZ5aW5nIGFuIGlkZW50aWZpZXIgaXMgb3B0aW9u
YWwuIFRoZXkgYXJlIHVzZWQgdG8gY29ycmVsYXRlIHByb2JlIHNhbXBsZXMKICAgICAgICAgICAg
ICAgICAvLyBpbiB0aGUgZnJvbnRlbmQgYWNyb3NzIG11bHRpcGxlIGJhY2tlbmQgcHJvYmUgYWN0
aW9ucyBhbmQgc2VncmVnYXRlIG9iamVjdCBncm91cHMuCi0gICAgICAgICAgICAgICAgYWN0aW9u
T2JqZWN0LT5nZXRJbnRlZ2VyKCJpZCJfcywgYWN0aW9uLmlkKTsKKyAgICAgICAgICAgICAgICBh
Y3Rpb24uaWQgPSBhY3Rpb25PYmplY3QtPmdldEludGVnZXIoUHJvdG9jb2w6OkRlYnVnZ2VyOjpC
cmVha3BvaW50QWN0aW9uOjppZEtleSkudmFsdWVPcihKU0M6Om5vQnJlYWtwb2ludEFjdGlvbklE
KTsKIAogICAgICAgICAgICAgICAgIGFjdGlvbnMuYXBwZW5kKFdURk1vdmUoYWN0aW9uKSk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBvcHRpb25zUGF5bG9hZC0+Z2V0Qm9v
bGVhbigiYXV0b0NvbnRpbnVlIl9zLCBhdXRvQ29udGludWUpOwotICAgICAgICBvcHRpb25zUGF5
bG9hZC0+Z2V0SW50ZWdlcigiaWdub3JlQ291bnQiX3MsIGlnbm9yZUNvdW50KTsKKyAgICAgICAg
YXV0b0NvbnRpbnVlID0gb3B0aW9ucy0+Z2V0Qm9vbGVhbihQcm90b2NvbDo6RGVidWdnZXI6OkJy
ZWFrcG9pbnRPcHRpb25zOjphdXRvQ29udGludWVLZXkpLnZhbHVlT3IoZmFsc2UpOworICAgICAg
ICBpZ25vcmVDb3VudCA9IG9wdGlvbnMtPmdldEludGVnZXIoUHJvdG9jb2w6OkRlYnVnZ2VyOjpC
cmVha3BvaW50T3B0aW9uczo6aWdub3JlQ291bnRLZXkpLnZhbHVlT3IoMCk7CiAgICAgfQogCiAg
ICAgcmV0dXJuIGNhbGxiYWNrKGNvbmRpdGlvbiwgV1RGTW92ZShhY3Rpb25zKSwgYXV0b0NvbnRp
bnVlLCBpZ25vcmVDb3VudCk7CiB9CiAKLU9wdGlvbmFsPEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6
OlByb3RvY29sQnJlYWtwb2ludD4gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6UHJvdG9jb2xCcmVh
a3BvaW50Ojpmcm9tUGF5bG9hZChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIEpTQzo6U291cmNl
SUQgc291cmNlSUQsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIHVuc2lnbmVkIGNvbHVtbk51bWJlciwg
Y29uc3QgSlNPTjo6T2JqZWN0KiBvcHRpb25zUGF5bG9hZCkKK09wdGlvbmFsPEluc3BlY3RvckRl
YnVnZ2VyQWdlbnQ6OlByb3RvY29sQnJlYWtwb2ludD4gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6
UHJvdG9jb2xCcmVha3BvaW50Ojpmcm9tUGF5bG9hZChQcm90b2NvbDo6RXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBKU0M6OlNvdXJjZUlEIHNvdXJjZUlELCB1bnNpZ25lZCBsaW5lTnVtYmVyLCB1
bnNpZ25lZCBjb2x1bW5OdW1iZXIsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgb3B0aW9ucykKIHsK
LSAgICByZXR1cm4gcGFyc2VCcmVha3BvaW50T3B0aW9uczxPcHRpb25hbDxQcm90b2NvbEJyZWFr
cG9pbnQ+PihlcnJvclN0cmluZywgb3B0aW9uc1BheWxvYWQsIFsmXSAoY29uc3QgU3RyaW5nJiBj
b25kaXRpb24sIEpTQzo6QnJlYWtwb2ludDo6QWN0aW9uc1ZlY3RvciYmIGFjdGlvbnMsIGJvb2wg
YXV0b0NvbnRpbnVlLCBzaXplX3QgaWdub3JlQ291bnQpIC0+IE9wdGlvbmFsPFByb3RvY29sQnJl
YWtwb2ludD4geworICAgIHJldHVybiBwYXJzZUJyZWFrcG9pbnRPcHRpb25zPE9wdGlvbmFsPFBy
b3RvY29sQnJlYWtwb2ludD4+KGVycm9yU3RyaW5nLCBXVEZNb3ZlKG9wdGlvbnMpLCBbJl0gKGNv
bnN0IFN0cmluZyYgY29uZGl0aW9uLCBKU0M6OkJyZWFrcG9pbnQ6OkFjdGlvbnNWZWN0b3ImJiBh
Y3Rpb25zLCBib29sIGF1dG9Db250aW51ZSwgc2l6ZV90IGlnbm9yZUNvdW50KSAtPiBPcHRpb25h
bDxQcm90b2NvbEJyZWFrcG9pbnQ+IHsKICAgICAgICAgcmV0dXJuIFByb3RvY29sQnJlYWtwb2lu
dChzb3VyY2VJRCwgbGluZU51bWJlciwgY29sdW1uTnVtYmVyLCBjb25kaXRpb24sIFdURk1vdmUo
YWN0aW9ucyksIGF1dG9Db250aW51ZSwgaWdub3JlQ291bnQpOwogICAgIH0pOwogfQogCi1PcHRp
b25hbDxJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpQcm90b2NvbEJyZWFrcG9pbnQ+IEluc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQ6OlByb3RvY29sQnJlYWtwb2ludDo6ZnJvbVBheWxvYWQoRXJyb3JTdHJp
bmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHVybCwgYm9vbCBpc1JlZ2V4LCB1bnNpZ25l
ZCBsaW5lTnVtYmVyLCB1bnNpZ25lZCBjb2x1bW5OdW1iZXIsIGNvbnN0IEpTT046Ok9iamVjdCog
b3B0aW9uc1BheWxvYWQpCitPcHRpb25hbDxJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpQcm90b2Nv
bEJyZWFrcG9pbnQ+IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OlByb3RvY29sQnJlYWtwb2ludDo6
ZnJvbVBheWxvYWQoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3Ry
aW5nJiB1cmwsIGJvb2wgaXNSZWdleCwgdW5zaWduZWQgbGluZU51bWJlciwgdW5zaWduZWQgY29s
dW1uTnVtYmVyLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIG9wdGlvbnMpCiB7Ci0gICAgcmV0dXJu
IHBhcnNlQnJlYWtwb2ludE9wdGlvbnM8T3B0aW9uYWw8UHJvdG9jb2xCcmVha3BvaW50Pj4oZXJy
b3JTdHJpbmcsIG9wdGlvbnNQYXlsb2FkLCBbJl0gKGNvbnN0IFN0cmluZyYgY29uZGl0aW9uLCBK
U0M6OkJyZWFrcG9pbnQ6OkFjdGlvbnNWZWN0b3ImJiBhY3Rpb25zLCBib29sIGF1dG9Db250aW51
ZSwgc2l6ZV90IGlnbm9yZUNvdW50KSAtPiBPcHRpb25hbDxQcm90b2NvbEJyZWFrcG9pbnQ+IHsK
KyAgICByZXR1cm4gcGFyc2VCcmVha3BvaW50T3B0aW9uczxPcHRpb25hbDxQcm90b2NvbEJyZWFr
cG9pbnQ+PihlcnJvclN0cmluZywgV1RGTW92ZShvcHRpb25zKSwgWyZdIChjb25zdCBTdHJpbmcm
IGNvbmRpdGlvbiwgSlNDOjpCcmVha3BvaW50OjpBY3Rpb25zVmVjdG9yJiYgYWN0aW9ucywgYm9v
bCBhdXRvQ29udGludWUsIHNpemVfdCBpZ25vcmVDb3VudCkgLT4gT3B0aW9uYWw8UHJvdG9jb2xC
cmVha3BvaW50PiB7CiAgICAgICAgIHJldHVybiBQcm90b2NvbEJyZWFrcG9pbnQodXJsLCBpc1Jl
Z2V4LCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIsIGNvbmRpdGlvbiwgV1RGTW92ZShhY3Rpb25z
KSwgYXV0b0NvbnRpbnVlLCBpZ25vcmVDb3VudCk7CiAgICAgfSk7CiB9CkBAIC0yMDcsOSArMjA2
LDkgQEAgYm9vbCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpQcm90b2NvbEJyZWFrcG9pbnQ6Om1h
dGNoZXNTY3JpcHRVUkwoY29uc3QgU3RyaW5nJgogICAgIHJldHVybiBtX3VybCA9PSBzY3JpcHRV
Ukw7CiB9CiAKLVJlZlB0cjxKU0M6OkJyZWFrcG9pbnQ+IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6
OmRlYnVnZ2VyQnJlYWtwb2ludEZyb21QYXlsb2FkKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywg
Y29uc3QgSlNPTjo6T2JqZWN0KiBvcHRpb25zUGF5bG9hZCkKK1JlZlB0cjxKU0M6OkJyZWFrcG9p
bnQ+IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRlYnVnZ2VyQnJlYWtwb2ludEZyb21QYXlsb2Fk
KFByb3RvY29sOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIFJlZlB0cjxKU09OOjpPYmplY3Q+
JiYgb3B0aW9ucykKIHsKLSAgICByZXR1cm4gcGFyc2VCcmVha3BvaW50T3B0aW9uczxSZWZQdHI8
SlNDOjpCcmVha3BvaW50Pj4oZXJyb3JTdHJpbmcsIG9wdGlvbnNQYXlsb2FkLCBbXSAoY29uc3Qg
U3RyaW5nJiBjb25kaXRpb24sIEpTQzo6QnJlYWtwb2ludDo6QWN0aW9uc1ZlY3RvciYmIGFjdGlv
bnMsIGJvb2wgYXV0b0NvbnRpbnVlLCBzaXplX3QgaWdub3JlQ291bnQpIHsKKyAgICByZXR1cm4g
cGFyc2VCcmVha3BvaW50T3B0aW9uczxSZWZQdHI8SlNDOjpCcmVha3BvaW50Pj4oZXJyb3JTdHJp
bmcsIFdURk1vdmUob3B0aW9ucyksIFtdIChjb25zdCBTdHJpbmcmIGNvbmRpdGlvbiwgSlNDOjpC
cmVha3BvaW50OjpBY3Rpb25zVmVjdG9yJiYgYWN0aW9ucywgYm9vbCBhdXRvQ29udGludWUsIHNp
emVfdCBpZ25vcmVDb3VudCkgewogICAgICAgICByZXR1cm4gSlNDOjpCcmVha3BvaW50OjpjcmVh
dGUoSlNDOjpub0JyZWFrcG9pbnRJRCwgY29uZGl0aW9uLCBXVEZNb3ZlKGFjdGlvbnMpLCBhdXRv
Q29udGludWUsIGlnbm9yZUNvdW50KTsKICAgICB9KTsKIH0KQEAgLTIzNCwxMCArMjMzLDEwIEBA
IHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5k
KEZyb250ZW5kUm91dGVyKiwgQmFja2VuCiB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6Ondp
bGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKERpc2Nvbm5lY3RSZWFzb24gcmVhc29uKQogewog
ICAgIGlmIChlbmFibGVkKCkpCi0gICAgICAgIGRpc2FibGUocmVhc29uID09IERpc2Nvbm5lY3RS
ZWFzb246Okluc3BlY3RlZFRhcmdldERlc3Ryb3llZCk7CisgICAgICAgIGludGVybmFsRGlzYWJs
ZShyZWFzb24gPT0gRGlzY29ubmVjdFJlYXNvbjo6SW5zcGVjdGVkVGFyZ2V0RGVzdHJveWVkKTsK
IH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjplbmFibGUoKQordm9pZCBJbnNwZWN0
b3JEZWJ1Z2dlckFnZW50OjppbnRlcm5hbEVuYWJsZSgpCiB7CiAgICAgbV9lbmFibGVkID0gdHJ1
ZTsKIApAQCAtMjU3LDcgKzI1Niw3IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZW5h
YmxlKCkKICAgICB9CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlzYWJsZShi
b29sIGlzQmVpbmdEZXN0cm95ZWQpCit2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmludGVy
bmFsRGlzYWJsZShib29sIGlzQmVpbmdEZXN0cm95ZWQpCiB7CiAgICAgZm9yIChhdXRvKiBsaXN0
ZW5lciA6IGNvcHlUb1ZlY3RvcihtX2xpc3RlbmVycykpCiAgICAgICAgIGxpc3RlbmVyLT5kZWJ1
Z2dlcldhc0Rpc2FibGVkKCk7CkBAIC0yNzcsMTkgKzI3NiwyMSBAQCB2b2lkIEluc3BlY3RvckRl
YnVnZ2VyQWdlbnQ6OmRpc2FibGUoYm9vbCBpc0JlaW5nRGVzdHJveWVkKQogICAgIG1fZW5hYmxl
ZCA9IGZhbHNlOwogfQogCi12b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmVuYWJsZShFcnJv
clN0cmluZyYgZXJyb3JTdHJpbmcpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNw
ZWN0b3JEZWJ1Z2dlckFnZW50OjplbmFibGUoKQogewotICAgIGlmIChlbmFibGVkKCkpIHsKLSAg
ICAgICAgZXJyb3JTdHJpbmcgPSAiRGVidWdnZXIgZG9tYWluIGFscmVhZHkgZW5hYmxlZCJfczsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoZW5hYmxlZCgpKQorICAgICAgICByZXR1
cm4gbWFrZVVuZXhwZWN0ZWQoIkRlYnVnZ2VyIGRvbWFpbiBhbHJlYWR5IGVuYWJsZWQiX3MpOwog
Ci0gICAgZW5hYmxlKCk7CisgICAgaW50ZXJuYWxFbmFibGUoKTsKKworICAgIHJldHVybiB7IH07
CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlzYWJsZShFcnJvclN0cmluZyYp
CitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojpk
aXNhYmxlKCkKIHsKLSAgICBkaXNhYmxlKGZhbHNlKTsKKyAgICBpbnRlcm5hbERpc2FibGUoZmFs
c2UpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAogYm9vbCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50
OjpicmVha3BvaW50c0FjdGl2ZSgpIGNvbnN0CkBAIC0yOTcsMjggKzI5OCwzMCBAQCBib29sIElu
c3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmJyZWFrcG9pbnRzQWN0aXZlKCkgY29uc3QKICAgICByZXR1
cm4gbV9kZWJ1Z2dlci5icmVha3BvaW50c0FjdGl2ZSgpOwogfQogCi12b2lkIEluc3BlY3RvckRl
YnVnZ2VyQWdlbnQ6OnNldEFzeW5jU3RhY2tUcmFjZURlcHRoKEVycm9yU3RyaW5nJiBlcnJvclN0
cmluZywgaW50IGRlcHRoKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9y
RGVidWdnZXJBZ2VudDo6c2V0QXN5bmNTdGFja1RyYWNlRGVwdGgoaW50IGRlcHRoKQogewogICAg
IGlmIChtX2FzeW5jU3RhY2tUcmFjZURlcHRoID09IGRlcHRoKQotICAgICAgICByZXR1cm47Cisg
ICAgICAgIHJldHVybiB7IH07CiAKLSAgICBpZiAoZGVwdGggPCAwKSB7Ci0gICAgICAgIGVycm9y
U3RyaW5nID0gIlVuZXhwZWN0ZWQgbmVnYXRpdmUgZGVwdGgiX3M7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9CisgICAgaWYgKGRlcHRoIDwgMCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVk
KCJVbmV4cGVjdGVkIG5lZ2F0aXZlIGRlcHRoIl9zKTsKIAogICAgIG1fYXN5bmNTdGFja1RyYWNl
RGVwdGggPSBkZXB0aDsKIAogICAgIGlmICghbV9hc3luY1N0YWNrVHJhY2VEZXB0aCkKICAgICAg
ICAgY2xlYXJBc3luY1N0YWNrVHJhY2VEYXRhKCk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12
b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldEJyZWFrcG9pbnRzQWN0aXZlKEVycm9yU3Ry
aW5nJiwgYm9vbCBhY3RpdmUpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0
b3JEZWJ1Z2dlckFnZW50OjpzZXRCcmVha3BvaW50c0FjdGl2ZShib29sIGFjdGl2ZSkKIHsKICAg
ICBpZiAoYWN0aXZlKQogICAgICAgICBtX2RlYnVnZ2VyLmFjdGl2YXRlQnJlYWtwb2ludHMoKTsK
ICAgICBlbHNlCiAgICAgICAgIG1fZGVidWdnZXIuZGVhY3RpdmF0ZUJyZWFrcG9pbnRzKCk7CisK
KyAgICByZXR1cm4geyB9OwogfQogCiBib29sIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmlzUGF1
c2VkKCkgY29uc3QKQEAgLTM0MiwyMCArMzQ1LDIwIEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJB
Z2VudDo6dXBkYXRlUGF1c2VSZWFzb25BbmREYXRhKERlYnVnZ2VyRnJvbnRlbmREaXNwYXRjaGVy
CiAgICAgbV9wYXVzZURhdGEgPSBXVEZNb3ZlKGRhdGEpOwogfQogCi1zdGF0aWMgUmVmUHRyPEpT
T046Ok9iamVjdD4gYnVpbGRBc3NlcnRQYXVzZVJlYXNvbihjb25zdCBTdHJpbmcmIG1lc3NhZ2Up
CitzdGF0aWMgUmVmPEpTT046Ok9iamVjdD4gYnVpbGRBc3NlcnRQYXVzZVJlYXNvbihjb25zdCBT
dHJpbmcmIG1lc3NhZ2UpCiB7CiAgICAgYXV0byByZWFzb24gPSBQcm90b2NvbDo6RGVidWdnZXI6
OkFzc2VydFBhdXNlUmVhc29uOjpjcmVhdGUoKS5yZWxlYXNlKCk7CiAgICAgaWYgKCFtZXNzYWdl
LmlzTnVsbCgpKQogICAgICAgICByZWFzb24tPnNldE1lc3NhZ2UobWVzc2FnZSk7Ci0gICAgcmV0
dXJuIHJlYXNvbi0+b3BlbkFjY2Vzc29ycygpOworICAgIHJldHVybiAqcmVhc29uLT5hc09iamVj
dCgpOwogfQogCi1zdGF0aWMgUmVmUHRyPEpTT046Ok9iamVjdD4gYnVpbGRDU1BWaW9sYXRpb25Q
YXVzZVJlYXNvbihjb25zdCBTdHJpbmcmIGRpcmVjdGl2ZVRleHQpCitzdGF0aWMgUmVmPEpTT046
Ok9iamVjdD4gYnVpbGRDU1BWaW9sYXRpb25QYXVzZVJlYXNvbihjb25zdCBTdHJpbmcmIGRpcmVj
dGl2ZVRleHQpCiB7CiAgICAgYXV0byByZWFzb24gPSBQcm90b2NvbDo6RGVidWdnZXI6OkNTUFZp
b2xhdGlvblBhdXNlUmVhc29uOjpjcmVhdGUoKQogICAgICAgICAuc2V0RGlyZWN0aXZlKGRpcmVj
dGl2ZVRleHQpCiAgICAgICAgIC5yZWxlYXNlKCk7Ci0gICAgcmV0dXJuIHJlYXNvbi0+b3BlbkFj
Y2Vzc29ycygpOworICAgIHJldHVybiAqcmVhc29uLT5hc09iamVjdCgpOwogfQogCiBSZWZQdHI8
SlNPTjo6T2JqZWN0PiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpidWlsZEJyZWFrcG9pbnRQYXVz
ZVJlYXNvbihKU0M6OkJyZWFrcG9pbnRJRCBkZWJ1Z2dlckJyZWFrcG9pbnRJRCkKQEAgLTM2OCw3
ICszNzEsNyBAQCBSZWZQdHI8SlNPTjo6T2JqZWN0PiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojpi
dWlsZEJyZWFrcG9pbnRQYXVzZVJlYXNvbihKU0M6OkJyZQogICAgICAgICAgICAgICAgIGF1dG8g
cmVhc29uID0gUHJvdG9jb2w6OkRlYnVnZ2VyOjpCcmVha3BvaW50UGF1c2VSZWFzb246OmNyZWF0
ZSgpCiAgICAgICAgICAgICAgICAgICAgIC5zZXRCcmVha3BvaW50SWQocHJvdG9jb2xCcmVha3Bv
aW50SUQpCiAgICAgICAgICAgICAgICAgICAgIC5yZWxlYXNlKCk7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIHJlYXNvbi0+b3BlbkFjY2Vzc29ycygpOworICAgICAgICAgICAgICAgIHJldHVybiBy
ZWFzb24tPmFzT2JqZWN0KCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC0z
ODYsNyArMzg5LDExIEBAIFJlZlB0cjxKU09OOjpPYmplY3Q+IEluc3BlY3RvckRlYnVnZ2VyQWdl
bnQ6OmJ1aWxkRXhjZXB0aW9uUGF1c2VSZWFzb24oSlNDOjpKU1ZhCiAgICAgaWYgKGluamVjdGVk
U2NyaXB0Lmhhc05vVmFsdWUoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1
cm4gaW5qZWN0ZWRTY3JpcHQud3JhcE9iamVjdChleGNlcHRpb24sIEluc3BlY3RvckRlYnVnZ2Vy
QWdlbnQ6OmJhY2t0cmFjZU9iamVjdEdyb3VwKS0+b3BlbkFjY2Vzc29ycygpOworICAgIGF1dG8g
ZXhjZXB0aW9uVmFsdWUgPSBpbmplY3RlZFNjcmlwdC53cmFwT2JqZWN0KGV4Y2VwdGlvbiwgSW5z
cGVjdG9yRGVidWdnZXJBZ2VudDo6YmFja3RyYWNlT2JqZWN0R3JvdXApOworICAgIGlmICghZXhj
ZXB0aW9uVmFsdWUpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuIGV4Y2Vw
dGlvblZhbHVlLT5hc09iamVjdCgpOwogfQogCiB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6
OmhhbmRsZUNvbnNvbGVBc3NlcnQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQpAQCAtNDkyLDcgKzQ5
OSw3IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlkRGlzcGF0Y2hBc3luY0NhbGwo
KQogICAgICAgICBtX3BlbmRpbmdBc3luY0NhbGxzLnJlbW92ZShpZGVudGlmaWVyKTsKIH0KIAot
c3RhdGljIFJlZlB0cjxQcm90b2NvbDo6RGVidWdnZXI6OkxvY2F0aW9uPiBidWlsZERlYnVnZ2Vy
TG9jYXRpb24oY29uc3QgSlNDOjpCcmVha3BvaW50JiBkZWJ1Z2dlckJyZWFrcG9pbnQpCitzdGF0
aWMgUmVmPFByb3RvY29sOjpEZWJ1Z2dlcjo6TG9jYXRpb24+IGJ1aWxkRGVidWdnZXJMb2NhdGlv
bihjb25zdCBKU0M6OkJyZWFrcG9pbnQmIGRlYnVnZ2VyQnJlYWtwb2ludCkKIHsKICAgICBBU1NF
UlQoZGVidWdnZXJCcmVha3BvaW50LmlzUmVzb2x2ZWQoKSk7CiAKQEAgLTUwMSw1MCArNTA4LDQ5
IEBAIHN0YXRpYyBSZWZQdHI8UHJvdG9jb2w6OkRlYnVnZ2VyOjpMb2NhdGlvbj4gYnVpbGREZWJ1
Z2dlckxvY2F0aW9uKGNvbnN0IEpTQzo6QnJlCiAgICAgICAgIC5zZXRMaW5lTnVtYmVyKGRlYnVn
Z2VyQnJlYWtwb2ludC5saW5lTnVtYmVyKCkpCiAgICAgICAgIC5yZWxlYXNlKCk7CiAgICAgbG9j
YXRpb24tPnNldENvbHVtbk51bWJlcihkZWJ1Z2dlckJyZWFrcG9pbnQuY29sdW1uTnVtYmVyKCkp
OwotCiAgICAgcmV0dXJuIGxvY2F0aW9uOwogfQogCi1zdGF0aWMgYm9vbCBwYXJzZUxvY2F0aW9u
KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgSlNPTjo6T2JqZWN0JiBsb2NhdGlvbiwg
SlNDOjpTb3VyY2VJRCYgc291cmNlSUQsIHVuc2lnbmVkJiBsaW5lTnVtYmVyLCB1bnNpZ25lZCYg
Y29sdW1uTnVtYmVyKQorc3RhdGljIGJvb2wgcGFyc2VMb2NhdGlvbihQcm90b2NvbDo6RXJyb3JT
dHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBKU09OOjpPYmplY3QmIGxvY2F0aW9uLCBKU0M6OlNv
dXJjZUlEJiBzb3VyY2VJRCwgdW5zaWduZWQmIGxpbmVOdW1iZXIsIHVuc2lnbmVkJiBjb2x1bW5O
dW1iZXIpCiB7Ci0gICAgaWYgKCFsb2NhdGlvbi5nZXRJbnRlZ2VyKCJsaW5lTnVtYmVyIl9zLCBs
aW5lTnVtYmVyKSkgeworICAgIGF1dG8gbGluZU51bWJlclZhbHVlID0gbG9jYXRpb24uZ2V0SW50
ZWdlcihQcm90b2NvbDo6RGVidWdnZXI6OkxvY2F0aW9uOjpsaW5lTnVtYmVyS2V5KTsKKyAgICBp
ZiAoIWxpbmVOdW1iZXJWYWx1ZSkgewogICAgICAgICBlcnJvclN0cmluZyA9ICJVbmV4cGVjdGVk
IG5vbi1pbnRlZ2VyIGxpbmVOdW1iZXIgaW4gZ2l2ZW4gbG9jYXRpb24iX3M7CiAgICAgICAgIHNv
dXJjZUlEID0gSlNDOjpub1NvdXJjZUlEOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQog
Ci0gICAgU3RyaW5nIHNjcmlwdElEU3RyOwotICAgIGlmICghbG9jYXRpb24uZ2V0U3RyaW5nKCJz
Y3JpcHRJZCJfcywgc2NyaXB0SURTdHIpKSB7CisgICAgbGluZU51bWJlciA9ICpsaW5lTnVtYmVy
VmFsdWU7CisKKyAgICBhdXRvIHNjcmlwdElEU3RyID0gbG9jYXRpb24uZ2V0U3RyaW5nKFByb3Rv
Y29sOjpEZWJ1Z2dlcjo6TG9jYXRpb246OnNjcmlwdElkS2V5KTsKKyAgICBpZiAoIXNjcmlwdElE
U3RyKSB7CiAgICAgICAgIHNvdXJjZUlEID0gSlNDOjpub1NvdXJjZUlEOwogICAgICAgICBlcnJv
clN0cmluZyA9ICJVbmV4ZXBjdGVkIG5vbi1zdHJpbmcgc2NyaXB0SWQgaW4gZ2l2ZW4gbG9jYXRp
b24iX3M7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKICAgICBzb3VyY2VJRCA9IHNj
cmlwdElEU3RyLnRvSW50UHRyKCk7Ci0gICAgY29sdW1uTnVtYmVyID0gMDsKLSAgICBsb2NhdGlv
bi5nZXRJbnRlZ2VyKCJjb2x1bW5OdW1iZXIiX3MsIGNvbHVtbk51bWJlcik7CisgICAgY29sdW1u
TnVtYmVyID0gbG9jYXRpb24uZ2V0SW50ZWdlcihQcm90b2NvbDo6RGVidWdnZXI6OkxvY2F0aW9u
Ojpjb2x1bW5OdW1iZXJLZXkpLnZhbHVlT3IoMCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZv
aWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0QnJlYWtwb2ludEJ5VXJsKEVycm9yU3RyaW5n
JiBlcnJvclN0cmluZywgaW50IGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxVUkws
IGNvbnN0IFN0cmluZyogb3B0aW9uYWxVUkxSZWdleCwgY29uc3QgaW50KiBvcHRpb25hbENvbHVt
bk51bWJlciwgY29uc3QgSlNPTjo6T2JqZWN0KiBvcHRpb25zUGF5bG9hZCwgUHJvdG9jb2w6OkRl
YnVnZ2VyOjpCcmVha3BvaW50SWQqIG91dEJyZWFrcG9pbnRJZCwgUmVmUHRyPEpTT046OkFycmF5
T2Y8UHJvdG9jb2w6OkRlYnVnZ2VyOjpMb2NhdGlvbj4+JiBvdXRMb2NhdGlvbnMpCitQcm90b2Nv
bDo6RXJyb3JTdHJpbmdPcjxzdGQ6OnR1cGxlPFByb3RvY29sOjpEZWJ1Z2dlcjo6QnJlYWtwb2lu
dElkLCBSZWY8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6RGVidWdnZXI6OkxvY2F0aW9uPj4+PiBJ
bnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZXRCcmVha3BvaW50QnlVcmwoaW50IGxpbmVOdW1iZXIs
IGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIHVybFJlZ2V4LCBPcHRpb25hbDxpbnQ+
JiYgY29sdW1uTnVtYmVyLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIG9wdGlvbnMpCiB7Ci0gICAg
aWYgKCFvcHRpb25hbFVSTCA9PSAhb3B0aW9uYWxVUkxSZWdleCkgewotICAgICAgICBlcnJvclN0
cmluZyA9ICJFaXRoZXIgdXJsIG9yIHVybFJlZ2V4IG11c3QgYmUgc3BlY2lmaWVkIl9zOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghdXJsID09ICF1cmxSZWdleCkKKyAgICAgICAg
cmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJFaXRoZXIgdXJsIG9yIHVybFJlZ2V4IG11c3QgYmUgc3Bl
Y2lmaWVkIl9zKTsKIAotICAgIGF1dG8gcHJvdG9jb2xCcmVha3BvaW50ID0gUHJvdG9jb2xCcmVh
a3BvaW50Ojpmcm9tUGF5bG9hZChlcnJvclN0cmluZywgb3B0aW9uYWxVUkwgPyAqb3B0aW9uYWxV
UkwgOiAqb3B0aW9uYWxVUkxSZWdleCwgISFvcHRpb25hbFVSTFJlZ2V4LCBsaW5lTnVtYmVyLCBv
cHRpb25hbENvbHVtbk51bWJlciA/ICpvcHRpb25hbENvbHVtbk51bWJlciA6IDAsIG9wdGlvbnNQ
YXlsb2FkKTsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKKyAgICBh
dXRvIHByb3RvY29sQnJlYWtwb2ludCA9IFByb3RvY29sQnJlYWtwb2ludDo6ZnJvbVBheWxvYWQo
ZXJyb3JTdHJpbmcsICEhdXJsID8gdXJsIDogdXJsUmVnZXgsICEhdXJsUmVnZXgsIGxpbmVOdW1i
ZXIsIGNvbHVtbk51bWJlci52YWx1ZU9yKDApLCBXVEZNb3ZlKG9wdGlvbnMpKTsKICAgICBpZiAo
IXByb3RvY29sQnJlYWtwb2ludCkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFr
ZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCi0gICAgaWYgKG1fcHJvdG9jb2xCcmVha3BvaW50
Rm9yUHJvdG9jb2xCcmVha3BvaW50SUQuY29udGFpbnMocHJvdG9jb2xCcmVha3BvaW50LT5pZCgp
KSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJCcmVha3BvaW50IGZvciBnaXZlbiBsb2NhdGlv
biBhbHJlYWR5IGV4aXN0cy4iX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKG1f
cHJvdG9jb2xCcmVha3BvaW50Rm9yUHJvdG9jb2xCcmVha3BvaW50SUQuY29udGFpbnMocHJvdG9j
b2xCcmVha3BvaW50LT5pZCgpKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJCcmVh
a3BvaW50IGZvciBnaXZlbiBsb2NhdGlvbiBhbHJlYWR5IGV4aXN0cy4iX3MpOwogCiAgICAgbV9w
cm90b2NvbEJyZWFrcG9pbnRGb3JQcm90b2NvbEJyZWFrcG9pbnRJRC5zZXQocHJvdG9jb2xCcmVh
a3BvaW50LT5pZCgpLCAqcHJvdG9jb2xCcmVha3BvaW50KTsKIAotICAgIG91dExvY2F0aW9ucyA9
IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkRlYnVnZ2VyOjpMb2NhdGlvbj46OmNyZWF0ZSgpOwor
ICAgIGF1dG8gbG9jYXRpb25zID0gSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6RGVidWdnZXI6Okxv
Y2F0aW9uPjo6Y3JlYXRlKCk7CiAKICAgICBmb3IgKGF1dG8mIFtzb3VyY2VJRCwgc2NyaXB0XSA6
IG1fc2NyaXB0cykgewogICAgICAgICBTdHJpbmcgc2NyaXB0VVJMRm9yQnJlYWtwb2ludHMgPSAh
c2NyaXB0LnNvdXJjZVVSTC5pc0VtcHR5KCkgPyBzY3JpcHQuc291cmNlVVJMIDogc2NyaXB0LnVy
bDsKQEAgLTU2MSwyOSArNTY3LDI5IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0
QnJlYWtwb2ludEJ5VXJsKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IGxpCiAKICAgICAg
ICAgZGlkU2V0QnJlYWtwb2ludCgqcHJvdG9jb2xCcmVha3BvaW50LCBkZWJ1Z2dlckJyZWFrcG9p
bnQpOwogCi0gICAgICAgIG91dExvY2F0aW9ucy0+YWRkSXRlbShidWlsZERlYnVnZ2VyTG9jYXRp
b24oZGVidWdnZXJCcmVha3BvaW50KSk7CisgICAgICAgIGxvY2F0aW9ucy0+YWRkSXRlbShidWls
ZERlYnVnZ2VyTG9jYXRpb24oZGVidWdnZXJCcmVha3BvaW50KSk7CiAgICAgfQogCi0gICAgKm91
dEJyZWFrcG9pbnRJZCA9IHByb3RvY29sQnJlYWtwb2ludC0+aWQoKTsKKyAgICByZXR1cm4geyB7
IHByb3RvY29sQnJlYWtwb2ludC0+aWQoKSwgV1RGTW92ZShsb2NhdGlvbnMpIH0gfTsKIH0KIAot
dm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZXRCcmVha3BvaW50KEVycm9yU3RyaW5nJiBl
cnJvclN0cmluZywgY29uc3QgSlNPTjo6T2JqZWN0JiBsb2NhdGlvbiwgY29uc3QgSlNPTjo6T2Jq
ZWN0KiBvcHRpb25zUGF5bG9hZCwgUHJvdG9jb2w6OkRlYnVnZ2VyOjpCcmVha3BvaW50SWQqIG91
dEJyZWFrcG9pbnRJZCwgUmVmUHRyPFByb3RvY29sOjpEZWJ1Z2dlcjo6TG9jYXRpb24+JiBvdXRB
Y3R1YWxMb2NhdGlvbikKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHN0ZDo6dHVwbGU8UHJvdG9j
b2w6OkRlYnVnZ2VyOjpCcmVha3BvaW50SWQsIFJlZjxQcm90b2NvbDo6RGVidWdnZXI6OkxvY2F0
aW9uPj4+IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldEJyZWFrcG9pbnQoUmVmPEpTT046Ok9i
amVjdD4mJiBsb2NhdGlvbiwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBvcHRpb25zKQogeworICAg
IFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIEpTQzo6U291cmNlSUQg
c291cmNlSUQ7CiAgICAgdW5zaWduZWQgbGluZU51bWJlcjsKICAgICB1bnNpZ25lZCBjb2x1bW5O
dW1iZXI7CiAgICAgaWYgKCFwYXJzZUxvY2F0aW9uKGVycm9yU3RyaW5nLCBsb2NhdGlvbiwgc291
cmNlSUQsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlcikpCi0gICAgICAgIHJldHVybjsKKyAgICAg
ICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgIGF1dG8gc2NyaXB0
SXRlcmF0b3IgPSBtX3NjcmlwdHMuZmluZChzb3VyY2VJRCk7Ci0gICAgaWYgKHNjcmlwdEl0ZXJh
dG9yID09IG1fc2NyaXB0cy5lbmQoKSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5n
IHNjcmlwdCBmb3Igc2NyaXB0SWQgaW4gZ2l2ZW4gbG9jYXRpb24iX3M7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9CisgICAgaWYgKHNjcmlwdEl0ZXJhdG9yID09IG1fc2NyaXB0cy5lbmQoKSkKKyAg
ICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJNaXNzaW5nIHNjcmlwdCBmb3Igc2NyaXB0SWQg
aW4gZ2l2ZW4gbG9jYXRpb24iX3MpOwogCi0gICAgYXV0byBwcm90b2NvbEJyZWFrcG9pbnQgPSBQ
cm90b2NvbEJyZWFrcG9pbnQ6OmZyb21QYXlsb2FkKGVycm9yU3RyaW5nLCBzb3VyY2VJRCwgbGlu
ZU51bWJlciwgY29sdW1uTnVtYmVyLCBvcHRpb25zUGF5bG9hZCk7CisgICAgYXV0byBwcm90b2Nv
bEJyZWFrcG9pbnQgPSBQcm90b2NvbEJyZWFrcG9pbnQ6OmZyb21QYXlsb2FkKGVycm9yU3RyaW5n
LCBzb3VyY2VJRCwgbGluZU51bWJlciwgY29sdW1uTnVtYmVyLCBXVEZNb3ZlKG9wdGlvbnMpKTsK
ICAgICBpZiAoIXByb3RvY29sQnJlYWtwb2ludCkKLSAgICAgICAgcmV0dXJuOworICAgICAgICBy
ZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCiAgICAgLy8gRG9uJ3Qgc2F2ZSBg
cHJvdG9jb2xCcmVha3BvaW50YCBpbiBgbV9wcm90b2NvbEJyZWFrcG9pbnRGb3JQcm90b2NvbEJy
ZWFrcG9pbnRJRGAgYmVjYXVzZSBpdAogICAgIC8vIHdhcyBzZXQgc3BlY2lmaWNhbGx5IGZvciB0
aGUgZ2l2ZW4gYHNvdXJjZUlEYCwgd2hpY2ggaXMgdW5pcXVlLCBtZWFuaW5nIHRoYXQgaXQgd2ls
bCBuZXZlcgpAQCAtNTkxLDIwICs1OTcsMTUgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50
OjpzZXRCcmVha3BvaW50KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgSlNPTjoKIAog
ICAgIGF1dG8gZGVidWdnZXJCcmVha3BvaW50ID0gcHJvdG9jb2xCcmVha3BvaW50LT5jcmVhdGVE
ZWJ1Z2dlckJyZWFrcG9pbnQobV9uZXh0RGVidWdnZXJCcmVha3BvaW50SUQrKywgc291cmNlSUQp
OwogCi0gICAgaWYgKCFyZXNvbHZlQnJlYWtwb2ludChzY3JpcHRJdGVyYXRvci0+dmFsdWUsIGRl
YnVnZ2VyQnJlYWtwb2ludCkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiQ291bGQgbm90IHJl
c29sdmUgYnJlYWtwb2ludCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoIXJl
c29sdmVCcmVha3BvaW50KHNjcmlwdEl0ZXJhdG9yLT52YWx1ZSwgZGVidWdnZXJCcmVha3BvaW50
KSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJDb3VsZCBub3QgcmVzb2x2ZSBicmVh
a3BvaW50Il9zKTsKIAotICAgIGlmICghc2V0QnJlYWtwb2ludChkZWJ1Z2dlckJyZWFrcG9pbnQp
KSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIkJyZWFrcG9pbnQgZm9yIGdpdmVuIGxvY2F0aW9u
IGFscmVhZHkgZXhpc3RzIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghc2V0
QnJlYWtwb2ludChkZWJ1Z2dlckJyZWFrcG9pbnQpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoIkJyZWFrcG9pbnQgZm9yIGdpdmVuIGxvY2F0aW9uIGFscmVhZHkgZXhpc3RzIl9zKTsK
IAogICAgIGRpZFNldEJyZWFrcG9pbnQoKnByb3RvY29sQnJlYWtwb2ludCwgZGVidWdnZXJCcmVh
a3BvaW50KTsKIAotICAgIG91dEFjdHVhbExvY2F0aW9uID0gYnVpbGREZWJ1Z2dlckxvY2F0aW9u
KGRlYnVnZ2VyQnJlYWtwb2ludCk7Ci0gICAgKm91dEJyZWFrcG9pbnRJZCA9IHByb3RvY29sQnJl
YWtwb2ludC0+aWQoKTsKKyAgICByZXR1cm4geyB7IHByb3RvY29sQnJlYWtwb2ludC0+aWQoKSwg
YnVpbGREZWJ1Z2dlckxvY2F0aW9uKGRlYnVnZ2VyQnJlYWtwb2ludCkgfSB9OwogfQogCiB2b2lk
IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpZFNldEJyZWFrcG9pbnQoUHJvdG9jb2xCcmVha3Bv
aW50JiBwcm90b2NvbEJyZWFrcG9pbnQsIEpTQzo6QnJlYWtwb2ludCYgZGVidWdnZXJCcmVha3Bv
aW50KQpAQCAtNjMwLDcgKzYzMSw3IEBAIGJvb2wgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0
QnJlYWtwb2ludChKU0M6OkJyZWFrcG9pbnQmIGRlYnVnZ2VyQnJlYWtwb2ludCkKICAgICByZXR1
cm4gbV9kZWJ1Z2dlci5zZXRCcmVha3BvaW50KGRlYnVnZ2VyQnJlYWtwb2ludCk7CiB9CiAKLXZv
aWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6cmVtb3ZlQnJlYWtwb2ludChFcnJvclN0cmluZyYs
IGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpCcmVha3BvaW50SWQmIHByb3Rv
Y29sQnJlYWtwb2ludElEKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9y
RGVidWdnZXJBZ2VudDo6cmVtb3ZlQnJlYWtwb2ludChjb25zdCBQcm90b2NvbDo6RGVidWdnZXI6
OkJyZWFrcG9pbnRJZCYgcHJvdG9jb2xCcmVha3BvaW50SUQpCiB7CiAgICAgbV9wcm90b2NvbEJy
ZWFrcG9pbnRGb3JQcm90b2NvbEJyZWFrcG9pbnRJRC5yZW1vdmUocHJvdG9jb2xCcmVha3BvaW50
SUQpOwogCkBAIC02NDEsMjQgKzY0MiwzNCBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6
OnJlbW92ZUJyZWFrcG9pbnQoRXJyb3JTdHJpbmcmLCBjb25zdCBJbnNwZWN0b3I6OlBybwogICAg
ICAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrZXIobV9kZWJ1Z2dlci52bSgpKTsKICAgICAgICAg
bV9kZWJ1Z2dlci5yZW1vdmVCcmVha3BvaW50KGRlYnVnZ2VyQnJlYWtwb2ludCk7CiAgICAgfQor
CisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojpjb250
aW51ZVVudGlsTmV4dFJ1bkxvb3AoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nKQorUHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6Y29udGludWVVbnRp
bE5leHRSdW5Mb29wKCkKIHsKLSAgICBpZiAoIWFzc2VydFBhdXNlZChlcnJvclN0cmluZykpCi0g
ICAgICAgIHJldHVybjsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CiAK
LSAgICByZXN1bWUoZXJyb3JTdHJpbmcpOworICAgIGlmICghYXNzZXJ0UGF1c2VkKGVycm9yU3Ry
aW5nKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKKworICAg
IGF1dG8gcmVzdW1lUmVzdWx0ID0gcmVzdW1lKCk7CisgICAgaWYgKCFyZXN1bWVSZXN1bHQpCisg
ICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChyZXN1bWVSZXN1bHQuZXJyb3IoKSk7CiAKICAg
ICBtX2VuYWJsZVBhdXNlV2hlbklkbGUgPSB0cnVlOwogCiAgICAgcmVnaXN0ZXJJZGxlSGFuZGxl
cigpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50
Ojpjb250aW51ZVRvTG9jYXRpb24oRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBKU09O
OjpPYmplY3QmIGxvY2F0aW9uKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVj
dG9yRGVidWdnZXJBZ2VudDo6Y29udGludWVUb0xvY2F0aW9uKFJlZjxKU09OOjpPYmplY3Q+JiYg
bG9jYXRpb24pCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAg
ICAgaWYgKCFhc3NlcnRQYXVzZWQoZXJyb3JTdHJpbmcpKQotICAgICAgICByZXR1cm47CisgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAgICBpZiAobV9jb250
aW51ZVRvTG9jYXRpb25EZWJ1Z2dlckJyZWFrcG9pbnQpIHsKICAgICAgICAgbV9kZWJ1Z2dlci5y
ZW1vdmVCcmVha3BvaW50KCptX2NvbnRpbnVlVG9Mb2NhdGlvbkRlYnVnZ2VyQnJlYWtwb2ludCk7
CkBAIC02NjksMTkgKzY4MCwxOCBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmNvbnRp
bnVlVG9Mb2NhdGlvbihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0CiAgICAgdW5zaWdu
ZWQgbGluZU51bWJlcjsKICAgICB1bnNpZ25lZCBjb2x1bW5OdW1iZXI7CiAgICAgaWYgKCFwYXJz
ZUxvY2F0aW9uKGVycm9yU3RyaW5nLCBsb2NhdGlvbiwgc291cmNlSUQsIGxpbmVOdW1iZXIsIGNv
bHVtbk51bWJlcikpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVj
dGVkKGVycm9yU3RyaW5nKTsKIAogICAgIGF1dG8gc2NyaXB0SXRlcmF0b3IgPSBtX3NjcmlwdHMu
ZmluZChzb3VyY2VJRCk7CiAgICAgaWYgKHNjcmlwdEl0ZXJhdG9yID09IG1fc2NyaXB0cy5lbmQo
KSkgewogICAgICAgICBtX2RlYnVnZ2VyLmNvbnRpbnVlUHJvZ3JhbSgpOwogICAgICAgICBtX2Zy
b250ZW5kRGlzcGF0Y2hlci0+cmVzdW1lZCgpOwotICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNz
aW5nIHNjcmlwdCBmb3Igc2NyaXB0SWQgaW4gZ2l2ZW4gbG9jYXRpb24iX3M7Ci0gICAgICAgIHJl
dHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJNaXNzaW5nIHNjcmlwdCBmb3Ig
c2NyaXB0SWQgaW4gZ2l2ZW4gbG9jYXRpb24iX3MpOwogICAgIH0KIAogICAgIGF1dG8gcHJvdG9j
b2xCcmVha3BvaW50ID0gUHJvdG9jb2xCcmVha3BvaW50Ojpmcm9tUGF5bG9hZChlcnJvclN0cmlu
Zywgc291cmNlSUQsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlcik7CiAgICAgaWYgKCFwcm90b2Nv
bEJyZWFrcG9pbnQpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVj
dGVkKGVycm9yU3RyaW5nKTsKIAogICAgIC8vIERvbid0IHNhdmUgYHByb3RvY29sQnJlYWtwb2lu
dGAgaW4gYG1fcHJvdG9jb2xCcmVha3BvaW50Rm9yUHJvdG9jb2xCcmVha3BvaW50SURgIGJlY2F1
c2UgaXQKICAgICAvLyBpcyBhIHRlbXBvcmFyeSBicmVha3BvaW50IHRoYXQgd2lsbCBiZSByZW1v
dmVkIGFzIHNvb24gYXMgYGxvY2F0aW9uYCBpcyByZWFjaGVkLgpAQCAtNjkxLDggKzcwMSw3IEBA
IHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6Y29udGludWVUb0xvY2F0aW9uKEVycm9yU3Ry
aW5nJiBlcnJvclN0cmluZywgY29uc3QKICAgICBpZiAoIXJlc29sdmVCcmVha3BvaW50KHNjcmlw
dEl0ZXJhdG9yLT52YWx1ZSwgZGVidWdnZXJCcmVha3BvaW50KSkgewogICAgICAgICBtX2RlYnVn
Z2VyLmNvbnRpbnVlUHJvZ3JhbSgpOwogICAgICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+cmVz
dW1lZCgpOwotICAgICAgICBlcnJvclN0cmluZyA9ICJDb3VsZCBub3QgcmVzb2x2ZSBicmVha3Bv
aW50Il9zOwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgi
Q291bGQgbm90IHJlc29sdmUgYnJlYWtwb2ludCJfcyk7CiAgICAgfQogCiAgICAgaWYgKCFzZXRC
cmVha3BvaW50KGRlYnVnZ2VyQnJlYWtwb2ludCkpIHsKQEAgLTcwMSw3ICs3MTAsNyBAQCB2b2lk
IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmNvbnRpbnVlVG9Mb2NhdGlvbihFcnJvclN0cmluZyYg
ZXJyb3JTdHJpbmcsIGNvbnN0CiAgICAgICAgIC8vIGhpdCB0aGlzIG5ldyBicmVha3BvaW50IG9y
IG5vdC4KICAgICAgICAgbV9kZWJ1Z2dlci5jb250aW51ZVByb2dyYW0oKTsKICAgICAgICAgbV9m
cm9udGVuZERpc3BhdGNoZXItPnJlc3VtZWQoKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICBy
ZXR1cm4geyB9OwogICAgIH0KIAogICAgIG1fY29udGludWVUb0xvY2F0aW9uRGVidWdnZXJCcmVh
a3BvaW50ID0gV1RGTW92ZShkZWJ1Z2dlckJyZWFrcG9pbnQpOwpAQCAtNzEwLDQxICs3MTksNDIg
QEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojpjb250aW51ZVRvTG9jYXRpb24oRXJyb3JT
dHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdAogICAgIC8vIFNvIGRvbid0IGlzc3VlIGEgcmVzdW1l
ZCBldmVudCB1bmxlc3Mgd2UgZXhpdCB0aGUgVk0gd2l0aG91dCBwYXVzaW5nLgogICAgIHdpbGxT
dGVwQW5kTWF5QmVjb21lSWRsZSgpOwogICAgIG1fZGVidWdnZXIuY29udGludWVQcm9ncmFtKCk7
CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNl
YXJjaEluQ29udGVudChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgc2Ny
aXB0SURTdHIsIGNvbnN0IFN0cmluZyYgcXVlcnksIGNvbnN0IGJvb2wqIG9wdGlvbmFsQ2FzZVNl
bnNpdGl2ZSwgY29uc3QgYm9vbCogb3B0aW9uYWxJc1JlZ2V4LCBSZWZQdHI8SlNPTjo6QXJyYXlP
ZjxQcm90b2NvbDo6R2VuZXJpY1R5cGVzOjpTZWFyY2hNYXRjaD4+JiByZXN1bHRzKQorUHJvdG9j
b2w6OkVycm9yU3RyaW5nT3I8UmVmPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkdlbmVyaWNUeXBl
czo6U2VhcmNoTWF0Y2g+Pj4gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2VhcmNoSW5Db250ZW50
KGNvbnN0IFByb3RvY29sOjpEZWJ1Z2dlcjo6U2NyaXB0SWQmIHNjcmlwdElkLCBjb25zdCBTdHJp
bmcmIHF1ZXJ5LCBPcHRpb25hbDxib29sPiYmIGNhc2VTZW5zaXRpdmUsIE9wdGlvbmFsPGJvb2w+
JiYgaXNSZWdleCkKIHsKLSAgICBKU0M6OlNvdXJjZUlEIHNvdXJjZUlEID0gc2NyaXB0SURTdHIu
dG9JbnRQdHIoKTsKLSAgICBhdXRvIGl0ID0gbV9zY3JpcHRzLmZpbmQoc291cmNlSUQpOwotICAg
IGlmIChpdCA9PSBtX3NjcmlwdHMuZW5kKCkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWlz
c2luZyBzY3JpcHQgZm9yIGdpdmVuIHNjcmlwdElkIjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
KyAgICBhdXRvIGl0ID0gbV9zY3JpcHRzLmZpbmQoc2NyaXB0SWQudG9JbnRQdHIoKSk7CisgICAg
aWYgKGl0ID09IG1fc2NyaXB0cy5lbmQoKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVk
KCJNaXNzaW5nIHNjcmlwdCBmb3IgZ2l2ZW4gc2NyaXB0SWQiX3MpOwogCi0gICAgYm9vbCBpc1Jl
Z2V4ID0gb3B0aW9uYWxJc1JlZ2V4ID8gKm9wdGlvbmFsSXNSZWdleCA6IGZhbHNlOwotICAgIGJv
b2wgY2FzZVNlbnNpdGl2ZSA9IG9wdGlvbmFsQ2FzZVNlbnNpdGl2ZSA/ICpvcHRpb25hbENhc2VT
ZW5zaXRpdmUgOiBmYWxzZTsKLSAgICByZXN1bHRzID0gQ29udGVudFNlYXJjaFV0aWxpdGllczo6
c2VhcmNoSW5UZXh0QnlMaW5lcyhpdC0+dmFsdWUuc291cmNlLCBxdWVyeSwgY2FzZVNlbnNpdGl2
ZSwgaXNSZWdleCk7CisgICAgcmV0dXJuIENvbnRlbnRTZWFyY2hVdGlsaXRpZXM6OnNlYXJjaElu
VGV4dEJ5TGluZXMoaXQtPnZhbHVlLnNvdXJjZSwgcXVlcnksIGNhc2VTZW5zaXRpdmUudmFsdWVP
cihmYWxzZSksIGlzUmVnZXgudmFsdWVPcihmYWxzZSkpOwogfQogCi12b2lkIEluc3BlY3RvckRl
YnVnZ2VyQWdlbnQ6OmdldFNjcmlwdFNvdXJjZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNv
bnN0IFN0cmluZyYgc2NyaXB0SURTdHIsIFN0cmluZyogc2NyaXB0U291cmNlKQorUHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8U3RyaW5nPiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpnZXRTY3JpcHRT
b3VyY2UoY29uc3QgUHJvdG9jb2w6OkRlYnVnZ2VyOjpTY3JpcHRJZCYgc2NyaXB0SWQpCiB7Ci0g
ICAgSlNDOjpTb3VyY2VJRCBzb3VyY2VJRCA9IHNjcmlwdElEU3RyLnRvSW50UHRyKCk7Ci0gICAg
YXV0byBpdCA9IG1fc2NyaXB0cy5maW5kKHNvdXJjZUlEKTsKLSAgICBpZiAoaXQgIT0gbV9zY3Jp
cHRzLmVuZCgpKQotICAgICAgICAqc2NyaXB0U291cmNlID0gaXQtPnZhbHVlLnNvdXJjZTsKLSAg
ICBlbHNlCi0gICAgICAgIGVycm9yU3RyaW5nID0gIk1pc3Npbmcgc2NyaXB0IGZvciBnaXZlbiBz
Y3JpcHRJZCI7CisgICAgYXV0byBpdCA9IG1fc2NyaXB0cy5maW5kKHNjcmlwdElkLnRvSW50UHRy
KCkpOworICAgIGlmIChpdCA9PSBtX3NjcmlwdHMuZW5kKCkpCisgICAgICAgIHJldHVybiBtYWtl
VW5leHBlY3RlZCgiTWlzc2luZyBzY3JpcHQgZm9yIGdpdmVuIHNjcmlwdElkIik7CisKKyAgICBy
ZXR1cm4gaXQtPnZhbHVlLnNvdXJjZTsKIH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50
OjpnZXRGdW5jdGlvbkRldGFpbHMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJp
bmcmIGZ1bmN0aW9uSWQsIFJlZlB0cjxQcm90b2NvbDo6RGVidWdnZXI6OkZ1bmN0aW9uRGV0YWls
cz4mIGRldGFpbHMpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8UHJvdG9jb2w6OkRlYnVn
Z2VyOjpGdW5jdGlvbkRldGFpbHM+PiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpnZXRGdW5jdGlv
bkRldGFpbHMoY29uc3QgU3RyaW5nJiBmdW5jdGlvbklkKQogeworICAgIFByb3RvY29sOjpFcnJv
clN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0
ID0gbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIuaW5qZWN0ZWRTY3JpcHRGb3JPYmplY3RJZChmdW5j
dGlvbklkKTsKLSAgICBpZiAoaW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKSB7Ci0gICAgICAg
IGVycm9yU3RyaW5nID0gIk1pc3NpbmcgaW5qZWN0ZWQgc2NyaXB0IGZvciBnaXZlbiBmdW5jdGlv
bklkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmIChpbmplY3RlZFNjcmlwdC5o
YXNOb1ZhbHVlKCkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTWlzc2luZyBpbmpl
Y3RlZCBzY3JpcHQgZm9yIGdpdmVuIGZ1bmN0aW9uSWQiX3MpOwogCisgICAgUmVmUHRyPFByb3Rv
Y29sOjpEZWJ1Z2dlcjo6RnVuY3Rpb25EZXRhaWxzPiBkZXRhaWxzOwogICAgIGluamVjdGVkU2Ny
aXB0LmdldEZ1bmN0aW9uRGV0YWlscyhlcnJvclN0cmluZywgZnVuY3Rpb25JZCwgZGV0YWlscyk7
CisgICAgaWYgKCFkZXRhaWxzKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JT
dHJpbmcpOworCisgICAgcmV0dXJuIGRldGFpbHMucmVsZWFzZU5vbk51bGwoKTsKIH0KIAogdm9p
ZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzY2hlZHVsZVBhdXNlQXROZXh0T3Bwb3J0dW5pdHko
RGVidWdnZXJGcm9udGVuZERpc3BhdGNoZXI6OlJlYXNvbiByZWFzb24sIFJlZlB0cjxKU09OOjpP
YmplY3Q+JiYgZGF0YSkKQEAgLTc5Miw1NyArODAyLDc1IEBAIGJvb2wgSW5zcGVjdG9yRGVidWdn
ZXJBZ2VudDo6Y2FuY2VsUGF1c2VGb3JTcGVjaWFsQnJlYWtwb2ludChKU0M6OkJyZWFrcG9pbnQm
IGJyCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6
cGF1c2UoRXJyb3JTdHJpbmcmKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVj
dG9yRGVidWdnZXJBZ2VudDo6cGF1c2UoKQogewogICAgIHNjaGVkdWxlUGF1c2VBdE5leHRPcHBv
cnR1bml0eShEZWJ1Z2dlckZyb250ZW5kRGlzcGF0Y2hlcjo6UmVhc29uOjpQYXVzZU9uTmV4dFN0
YXRlbWVudCk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckRlYnVnZ2Vy
QWdlbnQ6OnJlc3VtZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCitQcm90b2NvbDo6RXJyb3JT
dHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpyZXN1bWUoKQogewotICAgIGlm
ICghbV9wYXVzZWRHbG9iYWxPYmplY3QgJiYgIW1famF2YVNjcmlwdFBhdXNlU2NoZWR1bGVkKSB7
Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIk11c3QgYmUgcGF1c2VkIG9yIHdhaXRpbmcgdG8gcGF1
c2UiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKCFtX3BhdXNlZEdsb2JhbE9i
amVjdCAmJiAhbV9qYXZhU2NyaXB0UGF1c2VTY2hlZHVsZWQpCisgICAgICAgIHJldHVybiBtYWtl
VW5leHBlY3RlZCgiTXVzdCBiZSBwYXVzZWQgb3Igd2FpdGluZyB0byBwYXVzZSJfcyk7CiAKICAg
ICBjYW5jZWxQYXVzZUF0TmV4dE9wcG9ydHVuaXR5KCk7CiAgICAgbV9kZWJ1Z2dlci5jb250aW51
ZVByb2dyYW0oKTsKICAgICBtX2NvbmRpdGlvblRvRGlzcGF0Y2hSZXN1bWVkID0gU2hvdWxkRGlz
cGF0Y2hSZXN1bWVkOjpXaGVuQ29udGludWVkOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9p
ZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzdGVwTmV4dChFcnJvclN0cmluZyYgZXJyb3JTdHJp
bmcpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50
OjpzdGVwTmV4dCgpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOwor
CiAgICAgaWYgKCFhc3NlcnRQYXVzZWQoZXJyb3JTdHJpbmcpKQotICAgICAgICByZXR1cm47Cisg
ICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAgICB3aWxsU3Rl
cEFuZE1heUJlY29tZUlkbGUoKTsKICAgICBtX2RlYnVnZ2VyLnN0ZXBOZXh0RXhwcmVzc2lvbigp
OworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojpz
dGVwT3ZlcihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdP
cjx2b2lkPiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzdGVwT3ZlcigpCiB7CisgICAgUHJvdG9j
b2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAgICAgaWYgKCFhc3NlcnRQYXVzZWQoZXJy
b3JTdHJpbmcpKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3Rl
ZChlcnJvclN0cmluZyk7CiAKICAgICB3aWxsU3RlcEFuZE1heUJlY29tZUlkbGUoKTsKICAgICBt
X2RlYnVnZ2VyLnN0ZXBPdmVyU3RhdGVtZW50KCk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12
b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnN0ZXBJbnRvKEVycm9yU3RyaW5nJiBlcnJvclN0
cmluZykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRlYnVnZ2VyQWdl
bnQ6OnN0ZXBJbnRvKCkKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7
CisKICAgICBpZiAoIWFzc2VydFBhdXNlZChlcnJvclN0cmluZykpCi0gICAgICAgIHJldHVybjsK
KyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgIHdpbGxT
dGVwQW5kTWF5QmVjb21lSWRsZSgpOwogICAgIG1fZGVidWdnZXIuc3RlcEludG9TdGF0ZW1lbnQo
KTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6
c3RlcE91dChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdP
cjx2b2lkPiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzdGVwT3V0KCkKIHsKKyAgICBQcm90b2Nv
bDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBpZiAoIWFzc2VydFBhdXNlZChlcnJv
clN0cmluZykpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVk
KGVycm9yU3RyaW5nKTsKIAogICAgIHdpbGxTdGVwQW5kTWF5QmVjb21lSWRsZSgpOwogICAgIG1f
ZGVidWdnZXIuc3RlcE91dE9mRnVuY3Rpb24oKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKIHZv
aWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6cmVnaXN0ZXJJZGxlSGFuZGxlcigpCkBAIC04Nzcs
ODYgKzkwNSw5OCBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpZEJlY29tZUlkbGUo
KQogCiAgICAgbV9jb25kaXRpb25Ub0Rpc3BhdGNoUmVzdW1lZCA9IFNob3VsZERpc3BhdGNoUmVz
dW1lZDo6Tm87CiAKLSAgICBpZiAobV9lbmFibGVQYXVzZVdoZW5JZGxlKSB7Ci0gICAgICAgIEVy
cm9yU3RyaW5nIGlnbm9yZWQ7Ci0gICAgICAgIHBhdXNlKGlnbm9yZWQpOwotICAgIH0KKyAgICBp
ZiAobV9lbmFibGVQYXVzZVdoZW5JZGxlKQorICAgICAgICBwYXVzZSgpOwogfQogCi12b2lkIElu
c3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldFBhdXNlT25EZWJ1Z2dlclN0YXRlbWVudHMoRXJyb3JT
dHJpbmcmIGVycm9yU3RyaW5nLCBib29sIGVuYWJsZWQsIGNvbnN0IEpTT046Ok9iamVjdCogb3B0
aW9uc1BheWxvYWQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JEZWJ1
Z2dlckFnZW50OjpzZXRQYXVzZU9uRGVidWdnZXJTdGF0ZW1lbnRzKGJvb2wgZW5hYmxlZCwgUmVm
UHRyPEpTT046Ok9iamVjdD4mJiBvcHRpb25zKQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmlu
ZyBlcnJvclN0cmluZzsKKwogICAgIGlmICghZW5hYmxlZCkgewogICAgICAgICBtX2RlYnVnZ2Vy
LnNldFBhdXNlT25EZWJ1Z2dlclN0YXRlbWVudHNCcmVha3BvaW50KG51bGxwdHIpOwotICAgICAg
ICByZXR1cm47CisgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCi0gICAgYXV0byBicmVha3Bv
aW50ID0gZGVidWdnZXJCcmVha3BvaW50RnJvbVBheWxvYWQoZXJyb3JTdHJpbmcsIG9wdGlvbnNQ
YXlsb2FkKTsKKyAgICBhdXRvIGJyZWFrcG9pbnQgPSBkZWJ1Z2dlckJyZWFrcG9pbnRGcm9tUGF5
bG9hZChlcnJvclN0cmluZywgV1RGTW92ZShvcHRpb25zKSk7CiAgICAgaWYgKCFicmVha3BvaW50
KQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0
cmluZyk7CiAKICAgICBtX2RlYnVnZ2VyLnNldFBhdXNlT25EZWJ1Z2dlclN0YXRlbWVudHNCcmVh
a3BvaW50KFdURk1vdmUoYnJlYWtwb2ludCkpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9p
ZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZXRQYXVzZU9uRXhjZXB0aW9ucyhFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgc3RhdGVTdHJpbmcsIGNvbnN0IEpTT046Ok9i
amVjdCogb3B0aW9uc1BheWxvYWQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNw
ZWN0b3JEZWJ1Z2dlckFnZW50OjpzZXRQYXVzZU9uRXhjZXB0aW9ucyhjb25zdCBTdHJpbmcmIHN0
YXRlU3RyaW5nLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIG9wdGlvbnMpCiB7CisgICAgUHJvdG9j
b2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAgICAgUmVmUHRyPEpTQzo6QnJlYWtwb2lu
dD4gYWxsRXhjZXB0aW9uc0JyZWFrcG9pbnQ7CiAgICAgUmVmUHRyPEpTQzo6QnJlYWtwb2ludD4g
dW5jYXVnaHRFeGNlcHRpb25zQnJlYWtwb2ludDsKIAogICAgIGlmIChzdGF0ZVN0cmluZyA9PSAi
YWxsIikgewotICAgICAgICBhbGxFeGNlcHRpb25zQnJlYWtwb2ludCA9IGRlYnVnZ2VyQnJlYWtw
b2ludEZyb21QYXlsb2FkKGVycm9yU3RyaW5nLCBvcHRpb25zUGF5bG9hZCk7CisgICAgICAgIGFs
bEV4Y2VwdGlvbnNCcmVha3BvaW50ID0gZGVidWdnZXJCcmVha3BvaW50RnJvbVBheWxvYWQoZXJy
b3JTdHJpbmcsIFdURk1vdmUob3B0aW9ucykpOwogICAgICAgICBpZiAoIWFsbEV4Y2VwdGlvbnNC
cmVha3BvaW50KQotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKICAgICB9IGVsc2UgaWYgKHN0YXRlU3RyaW5nID09ICJ1
bmNhdWdodCIpIHsKLSAgICAgICAgdW5jYXVnaHRFeGNlcHRpb25zQnJlYWtwb2ludCA9IGRlYnVn
Z2VyQnJlYWtwb2ludEZyb21QYXlsb2FkKGVycm9yU3RyaW5nLCBvcHRpb25zUGF5bG9hZCk7Cisg
ICAgICAgIHVuY2F1Z2h0RXhjZXB0aW9uc0JyZWFrcG9pbnQgPSBkZWJ1Z2dlckJyZWFrcG9pbnRG
cm9tUGF5bG9hZChlcnJvclN0cmluZywgV1RGTW92ZShvcHRpb25zKSk7CiAgICAgICAgIGlmICgh
dW5jYXVnaHRFeGNlcHRpb25zQnJlYWtwb2ludCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9
IGVsc2UgaWYgKHN0YXRlU3RyaW5nICE9ICJub25lIikgewotICAgICAgICBlcnJvclN0cmluZyA9
IG1ha2VTdHJpbmcoIlVua25vd24gc3RhdGU6ICJfcywgc3RhdGVTdHJpbmcpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQorICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3Ry
aW5nKTsKKyAgICB9IGVsc2UgaWYgKHN0YXRlU3RyaW5nICE9ICJub25lIikKKyAgICAgICAgcmV0
dXJuIG1ha2VVbmV4cGVjdGVkKG1ha2VTdHJpbmcoIlVua25vd24gc3RhdGU6ICJfcywgc3RhdGVT
dHJpbmcpKTsKIAogICAgIG1fZGVidWdnZXIuc2V0UGF1c2VPbkFsbEV4Y2VwdGlvbnNCcmVha3Bv
aW50KFdURk1vdmUoYWxsRXhjZXB0aW9uc0JyZWFrcG9pbnQpKTsKICAgICBtX2RlYnVnZ2VyLnNl
dFBhdXNlT25VbmNhdWdodEV4Y2VwdGlvbnNCcmVha3BvaW50KFdURk1vdmUodW5jYXVnaHRFeGNl
cHRpb25zQnJlYWtwb2ludCkpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0
b3JEZWJ1Z2dlckFnZW50OjpzZXRQYXVzZU9uQXNzZXJ0aW9ucyhFcnJvclN0cmluZyYgZXJyb3JT
dHJpbmcsIGJvb2wgZW5hYmxlZCwgY29uc3QgSlNPTjo6T2JqZWN0KiBvcHRpb25zUGF5bG9hZCkK
K1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNl
dFBhdXNlT25Bc3NlcnRpb25zKGJvb2wgZW5hYmxlZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBv
cHRpb25zKQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAg
IGlmICghZW5hYmxlZCkgewogICAgICAgICBtX3BhdXNlT25Bc3NlcnRpb25zQnJlYWtwb2ludCA9
IG51bGxwdHI7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAK
LSAgICBhdXRvIGJyZWFrcG9pbnQgPSBkZWJ1Z2dlckJyZWFrcG9pbnRGcm9tUGF5bG9hZChlcnJv
clN0cmluZywgb3B0aW9uc1BheWxvYWQpOworICAgIGF1dG8gYnJlYWtwb2ludCA9IGRlYnVnZ2Vy
QnJlYWtwb2ludEZyb21QYXlsb2FkKGVycm9yU3RyaW5nLCBXVEZNb3ZlKG9wdGlvbnMpKTsKICAg
ICBpZiAoIWJyZWFrcG9pbnQpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgIG1fcGF1c2VPbkFzc2VydGlvbnNCcmVha3Bv
aW50ID0gV1RGTW92ZShicmVha3BvaW50KTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQg
SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0UGF1c2VPbk1pY3JvdGFza3MoRXJyb3JTdHJpbmcm
IGVycm9yU3RyaW5nLCBib29sIGVuYWJsZWQsIGNvbnN0IEpTT046Ok9iamVjdCogb3B0aW9uc1Bh
eWxvYWQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JEZWJ1Z2dlckFn
ZW50OjpzZXRQYXVzZU9uTWljcm90YXNrcyhib29sIGVuYWJsZWQsIFJlZlB0cjxKU09OOjpPYmpl
Y3Q+JiYgb3B0aW9ucykKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7
CisKICAgICBpZiAoIWVuYWJsZWQpIHsKICAgICAgICAgbV9wYXVzZU9uTWljcm90YXNrc0JyZWFr
cG9pbnQgPSBudWxscHRyOwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB7IH07CiAg
ICAgfQogCi0gICAgYXV0byBicmVha3BvaW50ID0gZGVidWdnZXJCcmVha3BvaW50RnJvbVBheWxv
YWQoZXJyb3JTdHJpbmcsIG9wdGlvbnNQYXlsb2FkKTsKKyAgICBhdXRvIGJyZWFrcG9pbnQgPSBk
ZWJ1Z2dlckJyZWFrcG9pbnRGcm9tUGF5bG9hZChlcnJvclN0cmluZywgV1RGTW92ZShvcHRpb25z
KSk7CiAgICAgaWYgKCFicmVha3BvaW50KQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVy
biBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAgICBtX3BhdXNlT25NaWNyb3Rhc2tz
QnJlYWtwb2ludCA9IFdURk1vdmUoYnJlYWtwb2ludCk7CisKKyAgICByZXR1cm4geyB9OwogfQog
Ci12b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmV2YWx1YXRlT25DYWxsRnJhbWUoRXJyb3JT
dHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGNhbGxGcmFtZUlkLCBjb25zdCBTdHJp
bmcmIGV4cHJlc3Npb24sIGNvbnN0IFN0cmluZyogb2JqZWN0R3JvdXAsIGNvbnN0IGJvb2wqIGlu
Y2x1ZGVDb21tYW5kTGluZUFQSSwgY29uc3QgYm9vbCogZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0Fu
ZE11dGVDb25zb2xlLCBjb25zdCBib29sKiByZXR1cm5CeVZhbHVlLCBjb25zdCBib29sKiBnZW5l
cmF0ZVByZXZpZXcsIGNvbnN0IGJvb2wqIHNhdmVSZXN1bHQsIGNvbnN0IGJvb2wqIC8qIGVtdWxh
dGVVc2VyR2VzdHVyZSAqLywgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+
JiByZXN1bHQsIE9wdGlvbmFsPGJvb2w+JiB3YXNUaHJvd24sIE9wdGlvbmFsPGludD4mIHNhdmVk
UmVzdWx0SW5kZXgpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxzdGQ6OnR1cGxlPFJlZjxQcm90
b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiwgT3B0aW9uYWw8Ym9vbD4gLyogd2FzVGhyb3du
ICovLCBPcHRpb25hbDxpbnQ+IC8qIHNhdmVkUmVzdWx0SW5kZXggKi8+PiBJbnNwZWN0b3JEZWJ1
Z2dlckFnZW50OjpldmFsdWF0ZU9uQ2FsbEZyYW1lKGNvbnN0IFByb3RvY29sOjpEZWJ1Z2dlcjo6
Q2FsbEZyYW1lSWQmIGNhbGxGcmFtZUlkLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIGNvbnN0
IFN0cmluZyYgb2JqZWN0R3JvdXAsIE9wdGlvbmFsPGJvb2w+JiYgaW5jbHVkZUNvbW1hbmRMaW5l
QVBJLCBPcHRpb25hbDxib29sPiYmIGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29s
ZSwgT3B0aW9uYWw8Ym9vbD4mJiByZXR1cm5CeVZhbHVlLCBPcHRpb25hbDxib29sPiYmIGdlbmVy
YXRlUHJldmlldywgT3B0aW9uYWw8Ym9vbD4mJiBzYXZlUmVzdWx0LCBPcHRpb25hbDxib29sPiYm
ICAvKiBlbXVsYXRlVXNlckdlc3R1cmUgKi8pCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5n
IGVycm9yU3RyaW5nOworCiAgICAgaWYgKCFhc3NlcnRQYXVzZWQoZXJyb3JTdHJpbmcpKQotICAg
ICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7
CiAKICAgICBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdCA9IG1faW5qZWN0ZWRTY3JpcHRN
YW5hZ2VyLmluamVjdGVkU2NyaXB0Rm9yT2JqZWN0SWQoY2FsbEZyYW1lSWQpOwotICAgIGlmIChp
bmplY3RlZFNjcmlwdC5oYXNOb1ZhbHVlKCkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWlz
c2luZyBpbmplY3RlZCBzY3JpcHQgZm9yIGdpdmVuIGNhbGxGcmFtZUlkIl9zOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQorICAgIGlmIChpbmplY3RlZFNjcmlwdC5oYXNOb1ZhbHVlKCkpCisgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTWlzc2luZyBpbmplY3RlZCBzY3JpcHQgZm9yIGdp
dmVuIGNhbGxGcmFtZUlkIl9zKTsKIAogICAgIEpTQzo6RGVidWdnZXI6OlRlbXBvcmFyaWx5RGlz
YWJsZUV4Y2VwdGlvbkJyZWFrcG9pbnRzIHRlbXBvcmFyaWx5RGlzYWJsZUV4Y2VwdGlvbkJyZWFr
cG9pbnRzKG1fZGVidWdnZXIpOwogCkBAIC05NjYsMjggKzEwMDYsMzEgQEAgdm9pZCBJbnNwZWN0
b3JEZWJ1Z2dlckFnZW50OjpldmFsdWF0ZU9uQ2FsbEZyYW1lKEVycm9yU3RyaW5nJiBlcnJvclN0
cmluZywgY29uc3QKICAgICAgICAgbXV0ZUNvbnNvbGUoKTsKICAgICB9CiAKLSAgICBpbmplY3Rl
ZFNjcmlwdC5ldmFsdWF0ZU9uQ2FsbEZyYW1lKGVycm9yU3RyaW5nLCBtX2N1cnJlbnRDYWxsU3Rh
Y2suZ2V0KCksIGNhbGxGcmFtZUlkLCBleHByZXNzaW9uLAotICAgICAgICBvYmplY3RHcm91cCA/
ICpvYmplY3RHcm91cCA6IGVtcHR5U3RyaW5nKCksIGluY2x1ZGVDb21tYW5kTGluZUFQSSAmJiAq
aW5jbHVkZUNvbW1hbmRMaW5lQVBJLCByZXR1cm5CeVZhbHVlICYmICpyZXR1cm5CeVZhbHVlLCBn
ZW5lcmF0ZVByZXZpZXcgJiYgKmdlbmVyYXRlUHJldmlldywgc2F2ZVJlc3VsdCAmJiAqc2F2ZVJl
c3VsdCwKLSAgICAgICAgcmVzdWx0LCB3YXNUaHJvd24sIHNhdmVkUmVzdWx0SW5kZXgpOworICAg
IFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiByZXN1bHQ7CisgICAgT3B0
aW9uYWw8Ym9vbD4gd2FzVGhyb3duOworICAgIE9wdGlvbmFsPGludD4gc2F2ZWRSZXN1bHRJbmRl
eDsKKworICAgIGluamVjdGVkU2NyaXB0LmV2YWx1YXRlT25DYWxsRnJhbWUoZXJyb3JTdHJpbmcs
IG1fY3VycmVudENhbGxTdGFjay5nZXQoKSwgY2FsbEZyYW1lSWQsIGV4cHJlc3Npb24sIG9iamVj
dEdyb3VwLCBpbmNsdWRlQ29tbWFuZExpbmVBUEkudmFsdWVPcihmYWxzZSksIHJldHVybkJ5VmFs
dWUudmFsdWVPcihmYWxzZSksIGdlbmVyYXRlUHJldmlldy52YWx1ZU9yKGZhbHNlKSwgc2F2ZVJl
c3VsdC52YWx1ZU9yKGZhbHNlKSwgcmVzdWx0LCB3YXNUaHJvd24sIHNhdmVkUmVzdWx0SW5kZXgp
OwogCiAgICAgaWYgKHBhdXNlQW5kTXV0ZSkKICAgICAgICAgdW5tdXRlQ29uc29sZSgpOworCisg
ICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmlu
Zyk7CisKKyAgICByZXR1cm4geyB7IHJlc3VsdC5yZWxlYXNlTm9uTnVsbCgpLCBXVEZNb3ZlKHdh
c1Rocm93biksIFdURk1vdmUoc2F2ZWRSZXN1bHRJbmRleCkgfSB9OwogfQogCi12b2lkIEluc3Bl
Y3RvckRlYnVnZ2VyQWdlbnQ6OnNldFNob3VsZEJsYWNrYm94VVJMKEVycm9yU3RyaW5nJiBlcnJv
clN0cmluZywgY29uc3QgU3RyaW5nJiB1cmwsIGJvb2wgc2hvdWxkQmxhY2tib3gsIGNvbnN0IGJv
b2wqIG9wdGlvbmFsQ2FzZVNlbnNpdGl2ZSwgY29uc3QgYm9vbCogb3B0aW9uYWxJc1JlZ2V4KQor
UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0
U2hvdWxkQmxhY2tib3hVUkwoY29uc3QgU3RyaW5nJiB1cmwsIGJvb2wgc2hvdWxkQmxhY2tib3gs
IE9wdGlvbmFsPGJvb2w+JiYgb3B0aW9uYWxDYXNlU2Vuc2l0aXZlLCBPcHRpb25hbDxib29sPiYm
IG9wdGlvbmFsSXNSZWdleCkKIHsKLSAgICBpZiAodXJsLmlzRW1wdHkoKSkgewotICAgICAgICBl
cnJvclN0cmluZyA9ICJVUkwgbXVzdCBub3QgYmUgZW1wdHkiX3M7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9CisgICAgaWYgKHVybC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBl
Y3RlZCgiVVJMIG11c3Qgbm90IGJlIGVtcHR5Il9zKTsKIAotICAgIGJvb2wgY2FzZVNlbnNpdGl2
ZSA9IG9wdGlvbmFsQ2FzZVNlbnNpdGl2ZSAmJiAqb3B0aW9uYWxDYXNlU2Vuc2l0aXZlOwotICAg
IGJvb2wgaXNSZWdleCA9IG9wdGlvbmFsSXNSZWdleCAmJiAqb3B0aW9uYWxJc1JlZ2V4OworICAg
IGJvb2wgY2FzZVNlbnNpdGl2ZSA9IG9wdGlvbmFsQ2FzZVNlbnNpdGl2ZS52YWx1ZU9yKGZhbHNl
KTsKKyAgICBib29sIGlzUmVnZXggPSBvcHRpb25hbElzUmVnZXgudmFsdWVPcihmYWxzZSk7CiAK
LSAgICBpZiAoIWNhc2VTZW5zaXRpdmUgJiYgIWlzUmVnZXggJiYgaXNXZWJLaXRJbmplY3RlZFNj
cmlwdCh1cmwpKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIkJsYWNrYm94aW5nIG9mIGludGVy
bmFsIHNjcmlwdHMgaXMgY29udHJvbGxlZCBieSAnRGVidWdnZXIuc2V0UGF1c2VGb3JJbnRlcm5h
bFNjcmlwdHMnIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghY2FzZVNlbnNp
dGl2ZSAmJiAhaXNSZWdleCAmJiBpc1dlYktpdEluamVjdGVkU2NyaXB0KHVybCkpCisgICAgICAg
IHJldHVybiBtYWtlVW5leHBlY3RlZCgiQmxhY2tib3hpbmcgb2YgaW50ZXJuYWwgc2NyaXB0cyBp
cyBjb250cm9sbGVkIGJ5ICdEZWJ1Z2dlci5zZXRQYXVzZUZvckludGVybmFsU2NyaXB0cyciX3Mp
OwogCiAgICAgQmxhY2tib3hDb25maWcgY29uZmlnIHsgdXJsLCBjYXNlU2Vuc2l0aXZlLCBpc1Jl
Z2V4IH07CiAgICAgaWYgKHNob3VsZEJsYWNrYm94KQpAQCAtMTAwNCw2ICsxMDQ3LDggQEAgdm9p
ZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZXRTaG91bGRCbGFja2JveFVSTChFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcsIGNvbnMKICAgICAgICAgICAgIGJsYWNrYm94VHlwZSA9IEpTQzo6RGVi
dWdnZXI6OkJsYWNrYm94VHlwZTo6RGVmZXJyZWQ7CiAgICAgICAgIG1fZGVidWdnZXIuc2V0Qmxh
Y2tib3hUeXBlKHNvdXJjZUlELCBibGFja2JveFR5cGUpOwogICAgIH0KKworICAgIHJldHVybiB7
IH07CiB9CiAKIGJvb2wgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2hvdWxkQmxhY2tib3hVUkwo
Y29uc3QgU3RyaW5nJiB1cmwpIGNvbnN0CkBAIC0xMDM5LDEwICsxMDg0LDEwIEBAIFN0cmluZyBJ
bnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojpzb3VyY2VNYXBVUkxGb3JTY3JpcHQoY29uc3QgSlNDOjpE
ZWJ1Z2dlcjo6U2NyaXB0CiAgICAgcmV0dXJuIHNjcmlwdC5zb3VyY2VNYXBwaW5nVVJMOwogfQog
Ci12b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldFBhdXNlRm9ySW50ZXJuYWxTY3JpcHRz
KEVycm9yU3RyaW5nJiwgYm9vbCBzaG91bGRQYXVzZSkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09y
PHZvaWQ+IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldFBhdXNlRm9ySW50ZXJuYWxTY3JpcHRz
KGJvb2wgc2hvdWxkUGF1c2UpCiB7CiAgICAgaWYgKHNob3VsZFBhdXNlID09IG1fcGF1c2VGb3JJ
bnRlcm5hbFNjcmlwdHMpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAog
ICAgIG1fcGF1c2VGb3JJbnRlcm5hbFNjcmlwdHMgPSBzaG91bGRQYXVzZTsKIApAQCAtMTA1Miw2
ICsxMDk3LDggQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZXRQYXVzZUZvckludGVy
bmFsU2NyaXB0cyhFcnJvclN0cmluZyYsIGJvb2wgc2hvdWwKICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICBtX2RlYnVnZ2VyLnNldEJsYWNrYm94VHlwZShzb3VyY2VJRCwgYmxhY2tib3hU
eXBlKTsKICAgICB9CisKKyAgICByZXR1cm4geyB9OwogfQogCiB2b2lkIEluc3BlY3RvckRlYnVn
Z2VyQWdlbnQ6OmRpZFBhcnNlU291cmNlKEpTQzo6U291cmNlSUQgc291cmNlSUQsIGNvbnN0IEpT
Qzo6RGVidWdnZXI6OlNjcmlwdCYgc2NyaXB0KQpAQCAtMTA2MSwxMiArMTEwOCw3IEBAIHZvaWQg
SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlkUGFyc2VTb3VyY2UoSlNDOjpTb3VyY2VJRCBzb3Vy
Y2VJRCwgY29uc3QgSlNDOjpECiAgICAgU3RyaW5nIHNvdXJjZVVSTCA9IHNjcmlwdC5zb3VyY2VV
Ukw7CiAgICAgU3RyaW5nIHNvdXJjZU1hcHBpbmdVUkwgPSBzb3VyY2VNYXBVUkxGb3JTY3JpcHQo
c2NyaXB0KTsKIAotICAgIGNvbnN0IGJvb2wgaXNNb2R1bGUgPSBzY3JpcHQuc291cmNlUHJvdmlk
ZXItPnNvdXJjZVR5cGUoKSA9PSBKU0M6OlNvdXJjZVByb3ZpZGVyU291cmNlVHlwZTo6TW9kdWxl
OwotICAgIGNvbnN0IGJvb2wqIGlzQ29udGVudFNjcmlwdCA9IHNjcmlwdC5pc0NvbnRlbnRTY3Jp
cHQgPyAmc2NyaXB0LmlzQ29udGVudFNjcmlwdCA6IG51bGxwdHI7Ci0gICAgU3RyaW5nKiBzb3Vy
Y2VVUkxQYXJhbSA9IGhhc1NvdXJjZVVSTCA/ICZzb3VyY2VVUkwgOiBudWxscHRyOwotICAgIFN0
cmluZyogc291cmNlTWFwVVJMUGFyYW0gPSBzb3VyY2VNYXBwaW5nVVJMLmlzRW1wdHkoKSA/IG51
bGxwdHIgOiAmc291cmNlTWFwcGluZ1VSTDsKLQotICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5z
Y3JpcHRQYXJzZWQoc2NyaXB0SURTdHIsIHNjcmlwdC51cmwsIHNjcmlwdC5zdGFydExpbmUsIHNj
cmlwdC5zdGFydENvbHVtbiwgc2NyaXB0LmVuZExpbmUsIHNjcmlwdC5lbmRDb2x1bW4sIGlzQ29u
dGVudFNjcmlwdCwgc291cmNlVVJMUGFyYW0sIHNvdXJjZU1hcFVSTFBhcmFtLCBpc01vZHVsZSA/
ICZpc01vZHVsZSA6IG51bGxwdHIpOworICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5zY3JpcHRQ
YXJzZWQoc2NyaXB0SURTdHIsIHNjcmlwdC51cmwsIHNjcmlwdC5zdGFydExpbmUsIHNjcmlwdC5z
dGFydENvbHVtbiwgc2NyaXB0LmVuZExpbmUsIHNjcmlwdC5lbmRDb2x1bW4sIHNjcmlwdC5pc0Nv
bnRlbnRTY3JpcHQsIHNvdXJjZVVSTCwgc291cmNlTWFwcGluZ1VSTCwgc2NyaXB0LnNvdXJjZVBy
b3ZpZGVyLT5zb3VyY2VUeXBlKCkgPT0gSlNDOjpTb3VyY2VQcm92aWRlclNvdXJjZVR5cGU6Ok1v
ZHVsZSk7CiAKICAgICBtX3NjcmlwdHMuc2V0KHNvdXJjZUlELCBzY3JpcHQpOwogCkBAIC0xMTgw
LDEyICsxMjIyLDEzIEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlkUGF1c2UoSlND
OjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkRlCiAgICAgICAgIGlmIChhdXRv
IGRlYnVnZ2VyQnJlYWtwb2ludElkID0gbV9kZWJ1Z2dlci5wYXVzaW5nQnJlYWtwb2ludElEKCkp
IHsKICAgICAgICAgICAgIEFTU0VSVCghbV9jb250aW51ZVRvTG9jYXRpb25EZWJ1Z2dlckJyZWFr
cG9pbnQgfHwgZGVidWdnZXJCcmVha3BvaW50SWQgIT0gbV9jb250aW51ZVRvTG9jYXRpb25EZWJ1
Z2dlckJyZWFrcG9pbnQtPmlkKCkpOwogICAgICAgICAgICAgZGF0YSA9IEpTT046Ok9iamVjdDo6
Y3JlYXRlKCk7Ci0gICAgICAgICAgICBkYXRhLT5zZXRTdHJpbmcoIm9yaWdpbmFsUmVhc29uIl9z
LCBQcm90b2NvbDo6SW5zcGVjdG9ySGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUoRGVidWdn
ZXJGcm9udGVuZERpc3BhdGNoZXI6OlJlYXNvbjo6QnJlYWtwb2ludCkpOwotICAgICAgICAgICAg
ZGF0YS0+c2V0VmFsdWUoIm9yaWdpbmFsRGF0YSJfcywgYnVpbGRCcmVha3BvaW50UGF1c2VSZWFz
b24oZGVidWdnZXJCcmVha3BvaW50SWQpKTsKKyAgICAgICAgICAgIGRhdGEtPnNldFN0cmluZygi
b3JpZ2luYWxSZWFzb24iX3MsIFByb3RvY29sOjpIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1
ZShEZWJ1Z2dlckZyb250ZW5kRGlzcGF0Y2hlcjo6UmVhc29uOjpCcmVha3BvaW50KSk7CisgICAg
ICAgICAgICBpZiAoYXV0byBwYXVzZVJlYXNvbiA9IGJ1aWxkQnJlYWtwb2ludFBhdXNlUmVhc29u
KGRlYnVnZ2VyQnJlYWtwb2ludElkKSkKKyAgICAgICAgICAgICAgICBkYXRhLT5zZXRWYWx1ZSgi
b3JpZ2luYWxEYXRhIl9zLCBwYXVzZVJlYXNvbi5yZWxlYXNlTm9uTnVsbCgpKTsKICAgICAgICAg
fSBlbHNlIGlmIChtX3ByZUJsYWNrYm94UGF1c2VEYXRhKSB7CiAgICAgICAgICAgICBkYXRhID0g
SlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICAgICAgICAgIGRhdGEtPnNldFN0cmluZygib3Jp
Z2luYWxSZWFzb24iX3MsIFByb3RvY29sOjpJbnNwZWN0b3JIZWxwZXJzOjpnZXRFbnVtQ29uc3Rh
bnRWYWx1ZShtX3ByZUJsYWNrYm94UGF1c2VSZWFzb24pKTsKLSAgICAgICAgICAgIGRhdGEtPnNl
dFZhbHVlKCJvcmlnaW5hbERhdGEiX3MsIG1fcHJlQmxhY2tib3hQYXVzZURhdGEpOworICAgICAg
ICAgICAgZGF0YS0+c2V0U3RyaW5nKCJvcmlnaW5hbFJlYXNvbiJfcywgUHJvdG9jb2w6OkhlbHBl
cnM6OmdldEVudW1Db25zdGFudFZhbHVlKG1fcHJlQmxhY2tib3hQYXVzZVJlYXNvbikpOworICAg
ICAgICAgICAgZGF0YS0+c2V0VmFsdWUoIm9yaWdpbmFsRGF0YSJfcywgbV9wcmVCbGFja2JveFBh
dXNlRGF0YS5yZWxlYXNlTm9uTnVsbCgpKTsKICAgICAgICAgfQogICAgICAgICB1cGRhdGVQYXVz
ZVJlYXNvbkFuZERhdGEoRGVidWdnZXJGcm9udGVuZERpc3BhdGNoZXI6OlJlYXNvbjo6QmxhY2ti
b3hlZFNjcmlwdCwgV1RGTW92ZShkYXRhKSk7CiAgICAgfQpAQCAtMTIwNiw3ICsxMjQ5LDcgQEAg
dm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkaWRQYXVzZShKU0M6OkpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTQzo6RGUKICAgICAgICAgICAgIGFzeW5jU3RhY2tUcmFjZSA9IGl0
LT52YWx1ZS0+YnVpbGRJbnNwZWN0b3JPYmplY3QoKTsKICAgICB9CiAKLSAgICBtX2Zyb250ZW5k
RGlzcGF0Y2hlci0+cGF1c2VkKGN1cnJlbnRDYWxsRnJhbWVzKGluamVjdGVkU2NyaXB0KSwgbV9w
YXVzZVJlYXNvbiwgbV9wYXVzZURhdGEsIGFzeW5jU3RhY2tUcmFjZSk7CisgICAgbV9mcm9udGVu
ZERpc3BhdGNoZXItPnBhdXNlZChjdXJyZW50Q2FsbEZyYW1lcyhpbmplY3RlZFNjcmlwdCksIFBy
b3RvY29sOjpIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShtX3BhdXNlUmVhc29uKSwgbV9w
YXVzZURhdGEuY29weVJlZigpLCBXVEZNb3ZlKGFzeW5jU3RhY2tUcmFjZSkpOwogCiAgICAgbV9q
YXZhU2NyaXB0UGF1c2VTY2hlZHVsZWQgPSBmYWxzZTsKIApAQCAtMTIzMSwxMiArMTI3NCwxNSBA
QCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmJyZWFrcG9pbnRBY3Rpb25Qcm9iZShKU0M6
OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYgogewogICAgIEluamVjdGVkU2NyaXB0IGluamVjdGVk
U2NyaXB0ID0gbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIuaW5qZWN0ZWRTY3JpcHRGb3IoZ2xvYmFs
T2JqZWN0KTsKICAgICBhdXRvIHBheWxvYWQgPSBpbmplY3RlZFNjcmlwdC53cmFwT2JqZWN0KHNh
bXBsZSwgb2JqZWN0R3JvdXBGb3JCcmVha3BvaW50QWN0aW9uKGFjdGlvbklEKSwgdHJ1ZSk7Cisg
ICAgaWYgKCFwYXlsb2FkKQorICAgICAgICByZXR1cm47CisKICAgICBhdXRvIHJlc3VsdCA9IFBy
b3RvY29sOjpEZWJ1Z2dlcjo6UHJvYmVTYW1wbGU6OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRQcm9i
ZUlkKGFjdGlvbklEKQogICAgICAgICAuc2V0QmF0Y2hJZChiYXRjaElkKQogICAgICAgICAuc2V0
U2FtcGxlSWQoc2FtcGxlSWQpCiAgICAgICAgIC5zZXRUaW1lc3RhbXAobV9pbmplY3RlZFNjcmlw
dE1hbmFnZXIuaW5zcGVjdG9yRW52aXJvbm1lbnQoKS5leGVjdXRpb25TdG9wd2F0Y2goKS5lbGFw
c2VkVGltZSgpLnNlY29uZHMoKSkKLSAgICAgICAgLnNldFBheWxvYWQoV1RGTW92ZShwYXlsb2Fk
KSkKKyAgICAgICAgLnNldFBheWxvYWQocGF5bG9hZC5yZWxlYXNlTm9uTnVsbCgpKQogICAgICAg
ICAucmVsZWFzZSgpOwogICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5kaWRTYW1wbGVQcm9iZShX
VEZNb3ZlKHJlc3VsdCkpOwogfQpAQCAtMTI2Nyw5ICsxMzEzLDggQEAgdm9pZCBJbnNwZWN0b3JE
ZWJ1Z2dlckFnZW50OjpicmVha1Byb2dyYW0oRGVidWdnZXJGcm9udGVuZERpc3BhdGNoZXI6OlJl
YXNvbiByZWEKIAogdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpjbGVhckluc3BlY3RvckJy
ZWFrcG9pbnRTdGF0ZSgpCiB7Ci0gICAgRXJyb3JTdHJpbmcgaWdub3JlZDsKICAgICBmb3IgKGF1
dG8mIHByb3RvY29sQnJlYWtwb2ludElEIDogY29weVRvVmVjdG9yKG1fZGVidWdnZXJCcmVha3Bv
aW50c0ZvclByb3RvY29sQnJlYWtwb2ludElELmtleXMoKSkpCi0gICAgICAgIHJlbW92ZUJyZWFr
cG9pbnQoaWdub3JlZCwgcHJvdG9jb2xCcmVha3BvaW50SUQpOworICAgICAgICByZW1vdmVCcmVh
a3BvaW50KHByb3RvY29sQnJlYWtwb2ludElEKTsKIAogICAgIG1fcHJvdG9jb2xCcmVha3BvaW50
Rm9yUHJvdG9jb2xCcmVha3BvaW50SUQuY2xlYXIoKTsKIApAQCAtMTMxNyw3ICsxMzYyLDcgQEAg
dm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkaWRDbGVhckdsb2JhbE9iamVjdCgpCiAgICAg
bV9mcm9udGVuZERpc3BhdGNoZXItPmdsb2JhbE9iamVjdENsZWFyZWQoKTsKIH0KIAotYm9vbCBJ
bnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojphc3NlcnRQYXVzZWQoRXJyb3JTdHJpbmcmIGVycm9yU3Ry
aW5nKQorYm9vbCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojphc3NlcnRQYXVzZWQoUHJvdG9jb2w6
OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZykKIHsKICAgICBpZiAoIW1fcGF1c2VkR2xvYmFsT2Jq
ZWN0KSB7CiAgICAgICAgIGVycm9yU3RyaW5nID0gIk11c3QgYmUgcGF1c2VkIl9zOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRGVi
dWdnZXJBZ2VudC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5z
cGVjdG9yRGVidWdnZXJBZ2VudC5oCmluZGV4IDMwZmY5ZjNjMjZkMWFlMDQ2NmE3MWE1YmY2MzY2
MTgyOTU0ZmEyZDguLjRmYzNmODRhNmUyMTJiODg1YjZhMmYzMjhmODFlZGY3NWY5MGE0NmMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2Fn
ZW50cy9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmgKQEAgLTQ4LDcgKzQ4LDYgQEAgbmFtZXNwYWNl
IEluc3BlY3RvciB7CiBjbGFzcyBBc3luY1N0YWNrVHJhY2U7CiBjbGFzcyBJbmplY3RlZFNjcmlw
dDsKIGNsYXNzIEluamVjdGVkU2NyaXB0TWFuYWdlcjsKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3Ry
aW5nOwogCiBjbGFzcyBKU19FWFBPUlRfUFJJVkFURSBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50IDog
cHVibGljIEluc3BlY3RvckFnZW50QmFzZSwgcHVibGljIERlYnVnZ2VyQmFja2VuZERpc3BhdGNo
ZXJIYW5kbGVyLCBwdWJsaWMgSlNDOjpEZWJ1Z2dlcjo6T2JzZXJ2ZXIgewogICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKEluc3BlY3RvckRlYnVnZ2VyQWdlbnQpOwpAQCAtNTYsNyArNTUsNyBAQCBj
bGFzcyBKU19FWFBPUlRfUFJJVkFURSBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50IDogcHVibGljIElu
c3BlY3RvckFnZW50QmFzZSwgcHVibAogcHVibGljOgogICAgIH5JbnNwZWN0b3JEZWJ1Z2dlckFn
ZW50KCkgb3ZlcnJpZGU7CiAKLSAgICBzdGF0aWMgUmVmUHRyPEpTQzo6QnJlYWtwb2ludD4gZGVi
dWdnZXJCcmVha3BvaW50RnJvbVBheWxvYWQoRXJyb3JTdHJpbmcmLCBjb25zdCBKU09OOjpPYmpl
Y3QqIG9wdGlvbnNQYXlsb2FkKTsKKyAgICBzdGF0aWMgUmVmUHRyPEpTQzo6QnJlYWtwb2ludD4g
ZGVidWdnZXJCcmVha3BvaW50RnJvbVBheWxvYWQoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiwgUmVm
UHRyPEpTT046Ok9iamVjdD4mJiBvcHRpb25zKTsKIAogICAgIHN0YXRpYyBjb25zdCBjaGFyKiBj
b25zdCBiYWNrdHJhY2VPYmplY3RHcm91cDsKIApAQCAtNjYsMzEgKzY1LDMxIEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIGJvb2wgZW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZW5hYmxlZDsgfQog
CiAgICAgLy8gRGVidWdnZXJCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIKLSAgICB2b2lkIGVuYWJs
ZShFcnJvclN0cmluZyYpIGZpbmFsOwotICAgIHZvaWQgZGlzYWJsZShFcnJvclN0cmluZyYpIGZp
bmFsOwotICAgIHZvaWQgc2V0QXN5bmNTdGFja1RyYWNlRGVwdGgoRXJyb3JTdHJpbmcmLCBpbnQg
ZGVwdGgpIGZpbmFsOwotICAgIHZvaWQgc2V0QnJlYWtwb2ludHNBY3RpdmUoRXJyb3JTdHJpbmcm
LCBib29sIGFjdGl2ZSkgZmluYWw7Ci0gICAgdm9pZCBzZXRCcmVha3BvaW50QnlVcmwoRXJyb3JT
dHJpbmcmLCBpbnQgbGluZU51bWJlciwgY29uc3QgU3RyaW5nKiBvcHRpb25hbFVSTCwgY29uc3Qg
U3RyaW5nKiBvcHRpb25hbFVSTFJlZ2V4LCBjb25zdCBpbnQqIG9wdGlvbmFsQ29sdW1uTnVtYmVy
LCBjb25zdCBKU09OOjpPYmplY3QqIG9wdGlvbnMsIFByb3RvY29sOjpEZWJ1Z2dlcjo6QnJlYWtw
b2ludElkKiwgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkRlYnVnZ2VyOjpMb2NhdGlv
bj4+JiBsb2NhdGlvbnMpIGZpbmFsOwotICAgIHZvaWQgc2V0QnJlYWtwb2ludChFcnJvclN0cmlu
ZyYsIGNvbnN0IEpTT046Ok9iamVjdCYgbG9jYXRpb24sIGNvbnN0IEpTT046Ok9iamVjdCogb3B0
aW9ucywgUHJvdG9jb2w6OkRlYnVnZ2VyOjpCcmVha3BvaW50SWQqIG91dEJyZWFrcG9pbnRJZCwg
UmVmUHRyPFByb3RvY29sOjpEZWJ1Z2dlcjo6TG9jYXRpb24+JiBvdXRBY3R1YWxMb2NhdGlvbikg
ZmluYWw7Ci0gICAgdm9pZCByZW1vdmVCcmVha3BvaW50KEVycm9yU3RyaW5nJiwgY29uc3QgU3Ry
aW5nJiBicmVha3BvaW50SWRlbnRpZmllcikgZmluYWw7Ci0gICAgdm9pZCBjb250aW51ZVVudGls
TmV4dFJ1bkxvb3AoRXJyb3JTdHJpbmcmKSBmaW5hbDsKLSAgICB2b2lkIGNvbnRpbnVlVG9Mb2Nh
dGlvbihFcnJvclN0cmluZyYsIGNvbnN0IEpTT046Ok9iamVjdCYgbG9jYXRpb24pIGZpbmFsOwot
ICAgIHZvaWQgc3RlcE5leHQoRXJyb3JTdHJpbmcmKSBmaW5hbDsKLSAgICB2b2lkIHN0ZXBPdmVy
KEVycm9yU3RyaW5nJikgZmluYWw7Ci0gICAgdm9pZCBzdGVwSW50byhFcnJvclN0cmluZyYpIGZp
bmFsOwotICAgIHZvaWQgc3RlcE91dChFcnJvclN0cmluZyYpIGZpbmFsOwotICAgIHZvaWQgcGF1
c2UoRXJyb3JTdHJpbmcmKSBmaW5hbDsKLSAgICB2b2lkIHJlc3VtZShFcnJvclN0cmluZyYpIGZp
bmFsOwotICAgIHZvaWQgc2VhcmNoSW5Db250ZW50KEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5n
JiBzY3JpcHRJRCwgY29uc3QgU3RyaW5nJiBxdWVyeSwgY29uc3QgYm9vbCogb3B0aW9uYWxDYXNl
U2Vuc2l0aXZlLCBjb25zdCBib29sKiBvcHRpb25hbElzUmVnZXgsIFJlZlB0cjxKU09OOjpBcnJh
eU9mPFByb3RvY29sOjpHZW5lcmljVHlwZXM6OlNlYXJjaE1hdGNoPj4mKSBmaW5hbDsKLSAgICB2
b2lkIGdldFNjcmlwdFNvdXJjZShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgc2NyaXB0SUQs
IFN0cmluZyogc2NyaXB0U291cmNlKSBmaW5hbDsKLSAgICB2b2lkIGdldEZ1bmN0aW9uRGV0YWls
cyhFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgZnVuY3Rpb25JZCwgUmVmUHRyPFByb3RvY29s
OjpEZWJ1Z2dlcjo6RnVuY3Rpb25EZXRhaWxzPiYpIGZpbmFsOwotICAgIHZvaWQgc2V0UGF1c2VP
bkRlYnVnZ2VyU3RhdGVtZW50cyhFcnJvclN0cmluZyYsIGJvb2wgZW5hYmxlZCwgY29uc3QgSlNP
Tjo6T2JqZWN0KiBvcHRpb25zKSBmaW5hbDsKLSAgICB2b2lkIHNldFBhdXNlT25FeGNlcHRpb25z
KEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBwYXVzZVN0YXRlLCBjb25zdCBKU09OOjpPYmpl
Y3QqIG9wdGlvbnMpIGZpbmFsOwotICAgIHZvaWQgc2V0UGF1c2VPbkFzc2VydGlvbnMoRXJyb3JT
dHJpbmcmLCBib29sIGVuYWJsZWQsIGNvbnN0IEpTT046Ok9iamVjdCogb3B0aW9ucykgZmluYWw7
Ci0gICAgdm9pZCBzZXRQYXVzZU9uTWljcm90YXNrcyhFcnJvclN0cmluZyYsIGJvb2wgZW5hYmxl
ZCwgY29uc3QgSlNPTjo6T2JqZWN0KiBvcHRpb25zKSBmaW5hbDsKLSAgICB2b2lkIHNldFBhdXNl
Rm9ySW50ZXJuYWxTY3JpcHRzKEVycm9yU3RyaW5nJiwgYm9vbCBzaG91bGRQYXVzZSkgZmluYWw7
Ci0gICAgdm9pZCBldmFsdWF0ZU9uQ2FsbEZyYW1lKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5n
JiBjYWxsRnJhbWVJZCwgY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBjb25zdCBTdHJpbmcqIG9i
amVjdEdyb3VwLCBjb25zdCBib29sKiBpbmNsdWRlQ29tbWFuZExpbmVBUEksIGNvbnN0IGJvb2wq
IGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29sZSwgY29uc3QgYm9vbCogcmV0dXJu
QnlWYWx1ZSwgY29uc3QgYm9vbCogZ2VuZXJhdGVQcmV2aWV3LCBjb25zdCBib29sKiBzYXZlUmVz
dWx0LCBjb25zdCBib29sKiBlbXVsYXRlVXNlckdlc3R1cmUsIFJlZlB0cjxQcm90b2NvbDo6UnVu
dGltZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0LCBPcHRpb25hbDxib29sPiYgd2FzVGhyb3duLCBP
cHRpb25hbDxpbnQ+JiBzYXZlZFJlc3VsdEluZGV4KSBvdmVycmlkZTsKLSAgICB2b2lkIHNldFNo
b3VsZEJsYWNrYm94VVJMKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiB1cmwsIGJvb2wgc2hv
dWxkQmxhY2tib3gsIGNvbnN0IGJvb2wqIGNhc2VTZW5zaXRpdmUsIGNvbnN0IGJvb2wqIGlzUmVn
ZXgpIGZpbmFsOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGVuYWJsZSgpIGZp
bmFsOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGRpc2FibGUoKSBmaW5hbDsK
KyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzZXRBc3luY1N0YWNrVHJhY2VEZXB0
aChpbnQpIGZpbmFsOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHNldEJyZWFr
cG9pbnRzQWN0aXZlKGJvb2wpIGZpbmFsOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHN0
ZDo6dHVwbGU8UHJvdG9jb2w6OkRlYnVnZ2VyOjpCcmVha3BvaW50SWQsIFJlZjxKU09OOjpBcnJh
eU9mPFByb3RvY29sOjpEZWJ1Z2dlcjo6TG9jYXRpb24+Pj4+IHNldEJyZWFrcG9pbnRCeVVybChp
bnQgbGluZU51bWJlciwgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgdXJsUmVnZXgs
IE9wdGlvbmFsPGludD4mJiBjb2x1bW5OdW1iZXIsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgb3B0
aW9ucykgZmluYWw7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8c3RkOjp0dXBsZTxQcm90
b2NvbDo6RGVidWdnZXI6OkJyZWFrcG9pbnRJZCwgUmVmPFByb3RvY29sOjpEZWJ1Z2dlcjo6TG9j
YXRpb24+Pj4gc2V0QnJlYWtwb2ludChSZWY8SlNPTjo6T2JqZWN0PiYmIGxvY2F0aW9uLCBSZWZQ
dHI8SlNPTjo6T2JqZWN0PiYmIG9wdGlvbnMpIGZpbmFsOworICAgIFByb3RvY29sOjpFcnJvclN0
cmluZ09yPHZvaWQ+IHJlbW92ZUJyZWFrcG9pbnQoY29uc3QgUHJvdG9jb2w6OkRlYnVnZ2VyOjpC
cmVha3BvaW50SWQmKSBmaW5hbDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBj
b250aW51ZVVudGlsTmV4dFJ1bkxvb3AoKSBmaW5hbDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJp
bmdPcjx2b2lkPiBjb250aW51ZVRvTG9jYXRpb24oUmVmPEpTT046Ok9iamVjdD4mJiBsb2NhdGlv
bikgZmluYWw7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc3RlcE5leHQoKSBm
aW5hbDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzdGVwT3ZlcigpIGZpbmFs
OworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHN0ZXBJbnRvKCkgZmluYWw7Cisg
ICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc3RlcE91dCgpIGZpbmFsOworICAgIFBy
b3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHBhdXNlKCkgZmluYWw7CisgICAgUHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8dm9pZD4gcmVzdW1lKCkgZmluYWw7CisgICAgUHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8UmVmPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkdlbmVyaWNUeXBlczo6U2VhcmNo
TWF0Y2g+Pj4gc2VhcmNoSW5Db250ZW50KGNvbnN0IFByb3RvY29sOjpEZWJ1Z2dlcjo6U2NyaXB0
SWQmLCBjb25zdCBTdHJpbmcmIHF1ZXJ5LCBPcHRpb25hbDxib29sPiYmIGNhc2VTZW5zaXRpdmUs
IE9wdGlvbmFsPGJvb2w+JiYgaXNSZWdleCkgZmluYWw7CisgICAgUHJvdG9jb2w6OkVycm9yU3Ry
aW5nT3I8U3RyaW5nPiBnZXRTY3JpcHRTb3VyY2UoY29uc3QgUHJvdG9jb2w6OkRlYnVnZ2VyOjpT
Y3JpcHRJZCYpIGZpbmFsOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxQcm90b2Nv
bDo6RGVidWdnZXI6OkZ1bmN0aW9uRGV0YWlscz4+IGdldEZ1bmN0aW9uRGV0YWlscyhjb25zdCBT
dHJpbmcmIGZ1bmN0aW9uSWQpIGZpbmFsOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZv
aWQ+IHNldFBhdXNlT25EZWJ1Z2dlclN0YXRlbWVudHMoYm9vbCBlbmFibGVkLCBSZWZQdHI8SlNP
Tjo6T2JqZWN0PiYmIG9wdGlvbnMpIGZpbmFsOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09y
PHZvaWQ+IHNldFBhdXNlT25FeGNlcHRpb25zKGNvbnN0IFN0cmluZyYgc3RhdGUsIFJlZlB0cjxK
U09OOjpPYmplY3Q+JiYgb3B0aW9ucykgZmluYWw7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5n
T3I8dm9pZD4gc2V0UGF1c2VPbkFzc2VydGlvbnMoYm9vbCBlbmFibGVkLCBSZWZQdHI8SlNPTjo6
T2JqZWN0PiYmIG9wdGlvbnMpIGZpbmFsOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZv
aWQ+IHNldFBhdXNlT25NaWNyb3Rhc2tzKGJvb2wgZW5hYmxlZCwgUmVmUHRyPEpTT046Ok9iamVj
dD4mJiBvcHRpb25zKSBmaW5hbDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBz
ZXRQYXVzZUZvckludGVybmFsU2NyaXB0cyhib29sIHNob3VsZFBhdXNlKSBmaW5hbDsKKyAgICBQ
cm90b2NvbDo6RXJyb3JTdHJpbmdPcjxzdGQ6OnR1cGxlPFJlZjxQcm90b2NvbDo6UnVudGltZTo6
UmVtb3RlT2JqZWN0PiwgT3B0aW9uYWw8Ym9vbD4gLyogd2FzVGhyb3duICovLCBPcHRpb25hbDxp
bnQ+IC8qIHNhdmVkUmVzdWx0SW5kZXggKi8+PiBldmFsdWF0ZU9uQ2FsbEZyYW1lKGNvbnN0IFBy
b3RvY29sOjpEZWJ1Z2dlcjo6Q2FsbEZyYW1lSWQmLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24s
IGNvbnN0IFN0cmluZyYgb2JqZWN0R3JvdXAsIE9wdGlvbmFsPGJvb2w+JiYgaW5jbHVkZUNvbW1h
bmRMaW5lQVBJLCBPcHRpb25hbDxib29sPiYmIGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRl
Q29uc29sZSwgT3B0aW9uYWw8Ym9vbD4mJiByZXR1cm5CeVZhbHVlLCBPcHRpb25hbDxib29sPiYm
IGdlbmVyYXRlUHJldmlldywgT3B0aW9uYWw8Ym9vbD4mJiBzYXZlUmVzdWx0LCBPcHRpb25hbDxi
b29sPiYmIGVtdWxhdGVVc2VyR2VzdHVyZSkgb3ZlcnJpZGU7CisgICAgUHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8dm9pZD4gc2V0U2hvdWxkQmxhY2tib3hVUkwoY29uc3QgU3RyaW5nJiB1cmwsIGJv
b2wgc2hvdWxkQmxhY2tib3gsIE9wdGlvbmFsPGJvb2w+JiYgY2FzZVNlbnNpdGl2ZSwgT3B0aW9u
YWw8Ym9vbD4mJiBpc1JlZ2V4KSBmaW5hbDsKIAogICAgIC8vIEpTQzo6RGVidWdnZXI6Ok9ic2Vy
dmVyCiAgICAgdm9pZCBkaWRQYXJzZVNvdXJjZShKU0M6OlNvdXJjZUlELCBjb25zdCBKU0M6OkRl
YnVnZ2VyOjpTY3JpcHQmKSBmaW5hbDsKQEAgLTE0MiwxMSArMTQxLDExIEBAIHB1YmxpYzoKIAog
cHJvdGVjdGVkOgogICAgIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQoQWdlbnRDb250ZXh0Jik7Ci0g
ICAgdmlydHVhbCB2b2lkIGVuYWJsZSgpOwotICAgIHZpcnR1YWwgdm9pZCBkaXNhYmxlKGJvb2wg
aXNCZWluZ0Rlc3Ryb3llZCk7CisgICAgdmlydHVhbCB2b2lkIGludGVybmFsRW5hYmxlKCk7Cisg
ICAgdmlydHVhbCB2b2lkIGludGVybmFsRGlzYWJsZShib29sIGlzQmVpbmdEZXN0cm95ZWQpOwog
CiAgICAgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyJiBpbmplY3RlZFNjcmlwdE1hbmFnZXIoKSBjb25z
dCB7IHJldHVybiBtX2luamVjdGVkU2NyaXB0TWFuYWdlcjsgfQotICAgIHZpcnR1YWwgSW5qZWN0
ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHRGb3JFdmFsKEVycm9yU3RyaW5nJiwgY29uc3QgaW50KiBl
eGVjdXRpb25Db250ZXh0SWQpID0gMDsKKyAgICB2aXJ0dWFsIEluamVjdGVkU2NyaXB0IGluamVj
dGVkU2NyaXB0Rm9yRXZhbChQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBPcHRpb25hbDxQcm90b2Nv
bDo6UnVudGltZTo6RXhlY3V0aW9uQ29udGV4dElkPiYmKSA9IDA7CiAKICAgICBKU0M6OkRlYnVn
Z2VyJiBkZWJ1Z2dlcigpIHsgcmV0dXJuIG1fZGVidWdnZXI7IH0KIApAQCAtMTY2LDggKzE2NSw4
IEBAIHByaXZhdGU6CiAgICAgY2xhc3MgUHJvdG9jb2xCcmVha3BvaW50IHsKICAgICAgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgcHVibGljOgotICAgICAgICBzdGF0aWMgT3B0aW9u
YWw8UHJvdG9jb2xCcmVha3BvaW50PiBmcm9tUGF5bG9hZChFcnJvclN0cmluZyYsIEpTQzo6U291
cmNlSUQsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIHVuc2lnbmVkIGNvbHVtbk51bWJlciwgY29uc3Qg
SlNPTjo6T2JqZWN0KiBvcHRpb25zUGF5bG9hZCA9IG51bGxwdHIpOwotICAgICAgICBzdGF0aWMg
T3B0aW9uYWw8UHJvdG9jb2xCcmVha3BvaW50PiBmcm9tUGF5bG9hZChFcnJvclN0cmluZyYsIGNv
bnN0IFN0cmluZyYgdXJsLCBib29sIGlzUmVnZXgsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIHVuc2ln
bmVkIGNvbHVtbk51bWJlciwgY29uc3QgSlNPTjo6T2JqZWN0KiBvcHRpb25zUGF5bG9hZCA9IG51
bGxwdHIpOworICAgICAgICBzdGF0aWMgT3B0aW9uYWw8UHJvdG9jb2xCcmVha3BvaW50PiBmcm9t
UGF5bG9hZChQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBKU0M6OlNvdXJjZUlELCB1bnNpZ25lZCBs
aW5lTnVtYmVyLCB1bnNpZ25lZCBjb2x1bW5OdW1iZXIsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYg
b3B0aW9ucyA9IG51bGxwdHIpOworICAgICAgICBzdGF0aWMgT3B0aW9uYWw8UHJvdG9jb2xCcmVh
a3BvaW50PiBmcm9tUGF5bG9hZChQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcm
IHVybCwgYm9vbCBpc1JlZ2V4LCB1bnNpZ25lZCBsaW5lTnVtYmVyLCB1bnNpZ25lZCBjb2x1bW5O
dW1iZXIsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgb3B0aW9ucyA9IG51bGxwdHIpOwogCiAgICAg
ICAgIFByb3RvY29sQnJlYWtwb2ludCgpOwogICAgICAgICBQcm90b2NvbEJyZWFrcG9pbnQoSlND
OjpTb3VyY2VJRCwgdW5zaWduZWQgbGluZU51bWJlciwgdW5zaWduZWQgY29sdW1uTnVtYmVyLCBj
b25zdCBTdHJpbmcmIGNvbmRpdGlvbiA9IG51bGxTdHJpbmcoKSwgSlNDOjpCcmVha3BvaW50OjpB
Y3Rpb25zVmVjdG9yJiYgYWN0aW9ucyA9IHsgfSwgYm9vbCBhdXRvQ29udGludWUgPSBmYWxzZSwg
c2l6ZV90IGlnbm9yZUNvdW50ID0gMCk7CkBAIC0xNzUsMTIgKzE3NCwxMiBAQCBwcml2YXRlOgog
CiAgICAgICAgIFJlZjxKU0M6OkJyZWFrcG9pbnQ+IGNyZWF0ZURlYnVnZ2VyQnJlYWtwb2ludChK
U0M6OkJyZWFrcG9pbnRJRCwgSlNDOjpTb3VyY2VJRCkgY29uc3Q7CiAKLSAgICAgICAgY29uc3Qg
SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OkJyZWFrcG9pbnRJZCYgaWQoKSBjb25zdCB7
IHJldHVybiBtX2lkOyB9CisgICAgICAgIGNvbnN0IFByb3RvY29sOjpEZWJ1Z2dlcjo6QnJlYWtw
b2ludElkJiBpZCgpIGNvbnN0IHsgcmV0dXJuIG1faWQ7IH0KIAogICAgICAgICBib29sIG1hdGNo
ZXNTY3JpcHRVUkwoY29uc3QgU3RyaW5nJikgY29uc3Q7CiAKICAgICBwcml2YXRlOgotICAgICAg
ICBJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6QnJlYWtwb2ludElkIG1faWQ7CisgICAg
ICAgIFByb3RvY29sOjpEZWJ1Z2dlcjo6QnJlYWtwb2ludElkIG1faWQ7CiAKICNpZiBBU1NFUlRf
RU5BQkxFRAogICAgICAgICBKU0M6OlNvdXJjZUlEIG1fc291cmNlSUQgeyBKU0M6Om5vU291cmNl
SUQgfTsKQEAgLTIwMiw3ICsyMDEsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgc2V0QnJlYWtwb2lu
dChKU0M6OkJyZWFrcG9pbnQmKTsKICAgICB2b2lkIGRpZFNldEJyZWFrcG9pbnQoUHJvdG9jb2xC
cmVha3BvaW50JiwgSlNDOjpCcmVha3BvaW50Jik7CiAKLSAgICBib29sIGFzc2VydFBhdXNlZChF
cnJvclN0cmluZyYpOworICAgIGJvb2wgYXNzZXJ0UGF1c2VkKFByb3RvY29sOjpFcnJvclN0cmlu
ZyYpOwogICAgIHZvaWQgY2xlYXJEZWJ1Z2dlckJyZWFrcG9pbnRTdGF0ZSgpOwogICAgIHZvaWQg
Y2xlYXJJbnNwZWN0b3JCcmVha3BvaW50U3RhdGUoKTsKICAgICB2b2lkIGNsZWFyUGF1c2VEZXRh
aWxzKCk7CkBAIC0yNDgsOCArMjQ3LDggQEAgcHJpdmF0ZToKICAgICBKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiBtX3BhdXNlZEdsb2JhbE9iamVjdCB7IG51bGxwdHIgfTsKICAgICBKU0M6OlN0cm9uZzxK
U0M6OlVua25vd24+IG1fY3VycmVudENhbGxTdGFjazsKIAotICAgIEhhc2hNYXA8SW5zcGVjdG9y
OjpQcm90b2NvbDo6RGVidWdnZXI6OkJyZWFrcG9pbnRJZCwgUHJvdG9jb2xCcmVha3BvaW50PiBt
X3Byb3RvY29sQnJlYWtwb2ludEZvclByb3RvY29sQnJlYWtwb2ludElEOwotICAgIEhhc2hNYXA8
SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OkJyZWFrcG9pbnRJZCwgSlNDOjpCcmVha3Bv
aW50c1ZlY3Rvcj4gbV9kZWJ1Z2dlckJyZWFrcG9pbnRzRm9yUHJvdG9jb2xCcmVha3BvaW50SUQ7
CisgICAgSGFzaE1hcDxQcm90b2NvbDo6RGVidWdnZXI6OkJyZWFrcG9pbnRJZCwgUHJvdG9jb2xC
cmVha3BvaW50PiBtX3Byb3RvY29sQnJlYWtwb2ludEZvclByb3RvY29sQnJlYWtwb2ludElEOwor
ICAgIEhhc2hNYXA8UHJvdG9jb2w6OkRlYnVnZ2VyOjpCcmVha3BvaW50SWQsIEpTQzo6QnJlYWtw
b2ludHNWZWN0b3I+IG1fZGVidWdnZXJCcmVha3BvaW50c0ZvclByb3RvY29sQnJlYWtwb2ludElE
OwogICAgIEpTQzo6QnJlYWtwb2ludElEIG1fbmV4dERlYnVnZ2VyQnJlYWtwb2ludElEIHsgSlND
Ojpub0JyZWFrcG9pbnRJRCArIDEgfTsKIAogICAgIFJlZlB0cjxKU0M6OkJyZWFrcG9pbnQ+IG1f
Y29udGludWVUb0xvY2F0aW9uRGVidWdnZXJCcmVha3BvaW50OwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9ySGVhcEFnZW50LmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckhlYXBBZ2Vu
dC5jcHAKaW5kZXggOGM2MjFhZDQxYzRkYTUwMDQzZDMwMjIwMGE0NmZhZTllZmM5NzE4Yy4uODVj
ZWQ5ZjNkZjYyMjMwMWI5NWUzM2U0OTM1Y2JiZjE2MmI3ZTMzMCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9ySGVhcEFnZW50LmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JIZWFw
QWdlbnQuY3BwCkBAIC01NiwyOCArNTYsMjUgQEAgdm9pZCBJbnNwZWN0b3JIZWFwQWdlbnQ6OmRp
ZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChGcm9udGVuZFJvdXRlciosIEJhY2tlbmREaXMKIAog
dm9pZCBJbnNwZWN0b3JIZWFwQWdlbnQ6OndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKERp
c2Nvbm5lY3RSZWFzb24pCiB7Ci0gICAgRXJyb3JTdHJpbmcgaWdub3JlZDsKLSAgICBkaXNhYmxl
KGlnbm9yZWQpOworICAgIGRpc2FibGUoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JIZWFwQWdlbnQ6
OmVuYWJsZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdP
cjx2b2lkPiBJbnNwZWN0b3JIZWFwQWdlbnQ6OmVuYWJsZSgpCiB7Ci0gICAgaWYgKG1fZW5hYmxl
ZCkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJIZWFwIGRvbWFpbiBhbHJlYWR5IGVuYWJsZWQi
X3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKG1fZW5hYmxlZCkKKyAgICAgICAg
cmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJIZWFwIGRvbWFpbiBhbHJlYWR5IGVuYWJsZWQiX3MpOwog
CiAgICAgbV9lbmFibGVkID0gdHJ1ZTsKIAogICAgIG1fZW52aXJvbm1lbnQudm0oKS5oZWFwLmFk
ZE9ic2VydmVyKHRoaXMpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JI
ZWFwQWdlbnQ6OmRpc2FibGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nKQorUHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9ySGVhcEFnZW50OjpkaXNhYmxlKCkKIHsKLSAgICBp
ZiAoIW1fZW5hYmxlZCkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJIZWFwIGRvbWFpbiBhbHJl
YWR5IGRpc2FibGVkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghbV9lbmFi
bGVkKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkhlYXAgZG9tYWluIGFscmVhZHkg
ZGlzYWJsZWQiX3MpOwogCiAgICAgbV9lbmFibGVkID0gZmFsc2U7CiAgICAgbV90cmFja2luZyA9
IGZhbHNlOwpAQCAtODUsMTcgKzgyLDIxIEBAIHZvaWQgSW5zcGVjdG9ySGVhcEFnZW50OjpkaXNh
YmxlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZykKICAgICBtX2Vudmlyb25tZW50LnZtKCkuaGVh
cC5yZW1vdmVPYnNlcnZlcih0aGlzKTsKIAogICAgIGNsZWFySGVhcFNuYXBzaG90cygpOworCisg
ICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JIZWFwQWdlbnQ6OmdjKEVycm9yU3Ry
aW5nJikKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckhlYXBBZ2VudDo6
Z2MoKQogewogICAgIFZNJiB2bSA9IG1fZW52aXJvbm1lbnQudm0oKTsKICAgICBKU0xvY2tIb2xk
ZXIgbG9jayh2bSk7CiAgICAgc2FuaXRpemVTdGFja0ZvclZNKHZtKTsKICAgICB2bS5oZWFwLmNv
bGxlY3ROb3coU3luYywgQ29sbGVjdGlvblNjb3BlOjpGdWxsKTsKKworICAgIHJldHVybiB7IH07
CiB9CiAKLXZvaWQgSW5zcGVjdG9ySGVhcEFnZW50OjpzbmFwc2hvdChFcnJvclN0cmluZyYsIGRv
dWJsZSogdGltZXN0YW1wLCBTdHJpbmcqIHNuYXBzaG90RGF0YSkKK1Byb3RvY29sOjpFcnJvclN0
cmluZ09yPHN0ZDo6dHVwbGU8ZG91YmxlLCBQcm90b2NvbDo6SGVhcDo6SGVhcFNuYXBzaG90RGF0
YT4+IEluc3BlY3RvckhlYXBBZ2VudDo6c25hcHNob3QoKQogewogICAgIFZNJiB2bSA9IG1fZW52
aXJvbm1lbnQudm0oKTsKICAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CkBAIC0xMDMsOCArMTA0
LDggQEAgdm9pZCBJbnNwZWN0b3JIZWFwQWdlbnQ6OnNuYXBzaG90KEVycm9yU3RyaW5nJiwgZG91
YmxlKiB0aW1lc3RhbXAsIFN0cmluZyogc25hcHMKICAgICBIZWFwU25hcHNob3RCdWlsZGVyIHNu
YXBzaG90QnVpbGRlcih2bS5lbnN1cmVIZWFwUHJvZmlsZXIoKSk7CiAgICAgc25hcHNob3RCdWls
ZGVyLmJ1aWxkU25hcHNob3QoKTsKIAotICAgICp0aW1lc3RhbXAgPSBtX2Vudmlyb25tZW50LmV4
ZWN1dGlvblN0b3B3YXRjaCgpLmVsYXBzZWRUaW1lKCkuc2Vjb25kcygpOwotICAgICpzbmFwc2hv
dERhdGEgPSBzbmFwc2hvdEJ1aWxkZXIuanNvbihbJl0gKGNvbnN0IEhlYXBTbmFwc2hvdE5vZGUm
IG5vZGUpIHsKKyAgICBhdXRvIHRpbWVzdGFtcCA9IG1fZW52aXJvbm1lbnQuZXhlY3V0aW9uU3Rv
cHdhdGNoKCkuZWxhcHNlZFRpbWUoKS5zZWNvbmRzKCk7CisgICAgYXV0byBzbmFwc2hvdERhdGEg
PSBzbmFwc2hvdEJ1aWxkZXIuanNvbihbJl0gKGNvbnN0IEhlYXBTbmFwc2hvdE5vZGUmIG5vZGUp
IHsKICAgICAgICAgaWYgKFN0cnVjdHVyZSogc3RydWN0dXJlID0gbm9kZS5jZWxsLT5zdHJ1Y3R1
cmUodm0pKSB7CiAgICAgICAgICAgICBpZiAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9
IHN0cnVjdHVyZS0+Z2xvYmFsT2JqZWN0KCkpIHsKICAgICAgICAgICAgICAgICBpZiAoIW1fZW52
aXJvbm1lbnQuY2FuQWNjZXNzSW5zcGVjdGVkU2NyaXB0U3RhdGUoZ2xvYmFsT2JqZWN0KSkKQEAg
LTExMywzNyArMTE0LDQ1IEBAIHZvaWQgSW5zcGVjdG9ySGVhcEFnZW50OjpzbmFwc2hvdChFcnJv
clN0cmluZyYsIGRvdWJsZSogdGltZXN0YW1wLCBTdHJpbmcqIHNuYXBzCiAgICAgICAgIH0KICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfSk7CisKKyAgICByZXR1cm4geyB7IHRpbWVzdGFtcCwg
c25hcHNob3REYXRhIH0gfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JIZWFwQWdlbnQ6OnN0YXJ0VHJh
Y2tpbmcoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8
dm9pZD4gSW5zcGVjdG9ySGVhcEFnZW50OjpzdGFydFRyYWNraW5nKCkKIHsKICAgICBpZiAobV90
cmFja2luZykKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4geyB9OwogCiAgICAgbV90
cmFja2luZyA9IHRydWU7CiAKLSAgICBkb3VibGUgdGltZXN0YW1wOwotICAgIFN0cmluZyBzbmFw
c2hvdERhdGE7Ci0gICAgc25hcHNob3QoZXJyb3JTdHJpbmcsICZ0aW1lc3RhbXAsICZzbmFwc2hv
dERhdGEpOworICAgIGF1dG8gcmVzdWx0ID0gc25hcHNob3QoKTsKKyAgICBpZiAoIXJlc3VsdCkK
KyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKFdURk1vdmUocmVzdWx0LmVycm9yKCkpKTsK
IAorICAgIGF1dG8gW3RpbWVzdGFtcCwgc25hcHNob3REYXRhXSA9IFdURk1vdmUocmVzdWx0LnZh
bHVlKCkpOwogICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT50cmFja2luZ1N0YXJ0KHRpbWVzdGFt
cCwgc25hcHNob3REYXRhKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9y
SGVhcEFnZW50OjpzdG9wVHJhY2tpbmcoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nKQorUHJvdG9j
b2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9ySGVhcEFnZW50OjpzdG9wVHJhY2tpbmco
KQogewogICAgIGlmICghbV90cmFja2luZykKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1
cm4geyB9OwogCiAgICAgbV90cmFja2luZyA9IGZhbHNlOwogCi0gICAgZG91YmxlIHRpbWVzdGFt
cDsKLSAgICBTdHJpbmcgc25hcHNob3REYXRhOwotICAgIHNuYXBzaG90KGVycm9yU3RyaW5nLCAm
dGltZXN0YW1wLCAmc25hcHNob3REYXRhKTsKKyAgICBhdXRvIHJlc3VsdCA9IHNuYXBzaG90KCk7
CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChXVEZNb3Zl
KHJlc3VsdC5lcnJvcigpKSk7CiAKKyAgICBhdXRvIFt0aW1lc3RhbXAsIHNuYXBzaG90RGF0YV0g
PSBXVEZNb3ZlKHJlc3VsdC52YWx1ZSgpKTsKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+dHJh
Y2tpbmdDb21wbGV0ZSh0aW1lc3RhbXAsIHNuYXBzaG90RGF0YSk7CisKKyAgICByZXR1cm4geyB9
OwogfQogCi1PcHRpb25hbDxIZWFwU25hcHNob3ROb2RlPiBJbnNwZWN0b3JIZWFwQWdlbnQ6Om5v
ZGVGb3JIZWFwT2JqZWN0SWRlbnRpZmllcihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIHVuc2ln
bmVkIGhlYXBPYmplY3RJZGVudGlmaWVyKQorT3B0aW9uYWw8SGVhcFNuYXBzaG90Tm9kZT4gSW5z
cGVjdG9ySGVhcEFnZW50Ojpub2RlRm9ySGVhcE9iamVjdElkZW50aWZpZXIoUHJvdG9jb2w6OkVy
cm9yU3RyaW5nJiBlcnJvclN0cmluZywgdW5zaWduZWQgaGVhcE9iamVjdElkZW50aWZpZXIpCiB7
CiAgICAgSGVhcFByb2ZpbGVyKiBoZWFwUHJvZmlsZXIgPSBtX2Vudmlyb25tZW50LnZtKCkuaGVh
cFByb2ZpbGVyKCk7CiAgICAgaWYgKCFoZWFwUHJvZmlsZXIpIHsKQEAgLTE2Niw4ICsxNzUsMTAg
QEAgT3B0aW9uYWw8SGVhcFNuYXBzaG90Tm9kZT4gSW5zcGVjdG9ySGVhcEFnZW50Ojpub2RlRm9y
SGVhcE9iamVjdElkZW50aWZpZXIoRXJyb3IKICAgICByZXR1cm4gb3B0aW9uYWxOb2RlOwogfQog
Ci12b2lkIEluc3BlY3RvckhlYXBBZ2VudDo6Z2V0UHJldmlldyhFcnJvclN0cmluZyYgZXJyb3JT
dHJpbmcsIGludCBoZWFwT2JqZWN0SWQsIE9wdGlvbmFsPFN0cmluZz4mIHJlc3VsdFN0cmluZywg
UmVmUHRyPFByb3RvY29sOjpEZWJ1Z2dlcjo6RnVuY3Rpb25EZXRhaWxzPiYgZnVuY3Rpb25EZXRh
aWxzLCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6Ok9iamVjdFByZXZpZXc+JiBvYmplY3RQcmV2
aWV3KQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8c3RkOjp0dXBsZTxTdHJpbmcsIFJlZlB0cjxQ
cm90b2NvbDo6RGVidWdnZXI6OkZ1bmN0aW9uRGV0YWlscz4sIFJlZlB0cjxQcm90b2NvbDo6UnVu
dGltZTo6T2JqZWN0UHJldmlldz4+PiBJbnNwZWN0b3JIZWFwQWdlbnQ6OmdldFByZXZpZXcoaW50
IGhlYXBPYmplY3RJZCkKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7
CisKICAgICAvLyBQcmV2ZW50IHRoZSBjZWxsIGZyb20gZ2V0dGluZyBjb2xsZWN0ZWQgYXMgd2Ug
bG9vayBpdCB1cC4KICAgICBWTSYgdm0gPSBtX2Vudmlyb25tZW50LnZtKCk7CiAgICAgSlNMb2Nr
SG9sZGVyIGxvY2sodm0pOwpAQCAtMTc2LDUzICsxODcsNDggQEAgdm9pZCBJbnNwZWN0b3JIZWFw
QWdlbnQ6OmdldFByZXZpZXcoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgaGVhcE9iamVj
dElkLAogICAgIHVuc2lnbmVkIGhlYXBPYmplY3RJZGVudGlmaWVyID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KGhlYXBPYmplY3RJZCk7CiAgICAgY29uc3QgT3B0aW9uYWw8SGVhcFNuYXBzaG90Tm9k
ZT4gb3B0aW9uYWxOb2RlID0gbm9kZUZvckhlYXBPYmplY3RJZGVudGlmaWVyKGVycm9yU3RyaW5n
LCBoZWFwT2JqZWN0SWRlbnRpZmllcik7CiAgICAgaWYgKCFvcHRpb25hbE5vZGUpCi0gICAgICAg
IHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAog
ICAgIC8vIFN0cmluZyBwcmV2aWV3LgogICAgIEpTQ2VsbCogY2VsbCA9IG9wdGlvbmFsTm9kZS0+
Y2VsbDsKLSAgICBpZiAoY2VsbC0+aXNTdHJpbmcoKSkgewotICAgICAgICByZXN1bHRTdHJpbmcg
PSBhc1N0cmluZyhjZWxsKS0+dHJ5R2V0VmFsdWUoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
KyAgICBpZiAoY2VsbC0+aXNTdHJpbmcoKSkKKyAgICAgICAgcmV0dXJuIHsgeyBhc1N0cmluZyhj
ZWxsKS0+dHJ5R2V0VmFsdWUoKSwgbnVsbHB0ciwgbnVsbHB0ciB9IH07CiAKICAgICAvLyBCaWdJ
bnQgcHJldmlldy4KLSAgICBpZiAoY2VsbC0+aXNIZWFwQmlnSW50KCkpIHsKLSAgICAgICAgcmVz
dWx0U3RyaW5nID0gSlNCaWdJbnQ6OnRyeUdldFN0cmluZyh2bSwgYXNIZWFwQmlnSW50KGNlbGwp
LCAxMCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKGNlbGwtPmlzSGVhcEJpZ0lu
dCgpKQorICAgICAgICByZXR1cm4geyB7IEpTQmlnSW50Ojp0cnlHZXRTdHJpbmcodm0sIGFzSGVh
cEJpZ0ludChjZWxsKSwgMTApLCBudWxscHRyLCBudWxscHRyIH0gfTsKIAogICAgIC8vIEZJWE1F
OiBQcm92aWRlIHByZXZpZXcgaW5mb3JtYXRpb24gZm9yIEludGVybmFsIE9iamVjdHM/IENvZGVC
bG9jaywgRXhlY3V0YWJsZSwgZXRjLgogCiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBjZWxs
LT5zdHJ1Y3R1cmUodm0pOwotICAgIGlmICghc3RydWN0dXJlKSB7Ci0gICAgICAgIGVycm9yU3Ry
aW5nID0gIlVuYWJsZSB0byBnZXQgb2JqZWN0IGRldGFpbHMgLSBTdHJ1Y3R1cmUiX3M7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKCFzdHJ1Y3R1cmUpCisgICAgICAgIHJldHVybiBt
YWtlVW5leHBlY3RlZCgiVW5hYmxlIHRvIGdldCBvYmplY3QgZGV0YWlscyAtIFN0cnVjdHVyZSJf
cyk7CiAKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gc3RydWN0dXJlLT5nbG9i
YWxPYmplY3QoKTsKLSAgICBpZiAoIWdsb2JhbE9iamVjdCkgewotICAgICAgICBlcnJvclN0cmlu
ZyA9ICJVbmFibGUgdG8gZ2V0IG9iamVjdCBkZXRhaWxzIC0gR2xvYmFsT2JqZWN0Il9zOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghZ2xvYmFsT2JqZWN0KQorICAgICAgICByZXR1
cm4gbWFrZVVuZXhwZWN0ZWQoIlVuYWJsZSB0byBnZXQgb2JqZWN0IGRldGFpbHMgLSBHbG9iYWxP
YmplY3QiX3MpOwogCiAgICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHQgPSBtX2luamVj
dGVkU2NyaXB0TWFuYWdlci5pbmplY3RlZFNjcmlwdEZvcihnbG9iYWxPYmplY3QpOwotICAgIGlm
IChpbmplY3RlZFNjcmlwdC5oYXNOb1ZhbHVlKCkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAi
VW5hYmxlIHRvIGdldCBvYmplY3QgZGV0YWlscyAtIEluamVjdGVkU2NyaXB0Il9zOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQorICAgIGlmIChpbmplY3RlZFNjcmlwdC5oYXNOb1ZhbHVlKCkpCisg
ICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiVW5hYmxlIHRvIGdldCBvYmplY3QgZGV0YWls
cyAtIEluamVjdGVkU2NyaXB0Il9zKTsKIAogICAgIC8vIEZ1bmN0aW9uIHByZXZpZXcuCiAgICAg
aWYgKGNlbGwtPmluaGVyaXRzPEpTRnVuY3Rpb24+KHZtKSkgeworICAgICAgICBSZWZQdHI8UHJv
dG9jb2w6OkRlYnVnZ2VyOjpGdW5jdGlvbkRldGFpbHM+IGZ1bmN0aW9uRGV0YWlsczsKICAgICAg
ICAgaW5qZWN0ZWRTY3JpcHQuZnVuY3Rpb25EZXRhaWxzKGVycm9yU3RyaW5nLCBjZWxsLCBmdW5j
dGlvbkRldGFpbHMpOwotICAgICAgICByZXR1cm47CisgICAgICAgIGlmICghZnVuY3Rpb25EZXRh
aWxzKQorICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKKyAg
ICAgICAgcmV0dXJuIHsgeyBudWxsU3RyaW5nKCksIGZ1bmN0aW9uRGV0YWlscywgbnVsbHB0ciB9
IH07CiAgICAgfQogCiAgICAgLy8gT2JqZWN0IHByZXZpZXcuCi0gICAgb2JqZWN0UHJldmlldyA9
IGluamVjdGVkU2NyaXB0LnByZXZpZXdWYWx1ZShjZWxsKTsKKyAgICByZXR1cm4geyB7IG51bGxT
dHJpbmcoKSwgbnVsbHB0ciwgaW5qZWN0ZWRTY3JpcHQucHJldmlld1ZhbHVlKGNlbGwpIH0gfTsK
IH0KIAotdm9pZCBJbnNwZWN0b3JIZWFwQWdlbnQ6OmdldFJlbW90ZU9iamVjdChFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcsIGludCBoZWFwT2JqZWN0SWQsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxP
YmplY3RHcm91cCwgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiByZXN1
bHQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90
ZU9iamVjdD4+IEluc3BlY3RvckhlYXBBZ2VudDo6Z2V0UmVtb3RlT2JqZWN0KGludCBoZWFwT2Jq
ZWN0SWQsIGNvbnN0IFN0cmluZyYgb2JqZWN0R3JvdXApCiB7CisgICAgUHJvdG9jb2w6OkVycm9y
U3RyaW5nIGVycm9yU3RyaW5nOworCiAgICAgLy8gUHJldmVudCB0aGUgY2VsbCBmcm9tIGdldHRp
bmcgY29sbGVjdGVkIGFzIHdlIGxvb2sgaXQgdXAuCiAgICAgVk0mIHZtID0gbV9lbnZpcm9ubWVu
dC52bSgpOwogICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKQEAgLTIzMSwyOSArMjM3LDI2IEBA
IHZvaWQgSW5zcGVjdG9ySGVhcEFnZW50OjpnZXRSZW1vdGVPYmplY3QoRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBpbnQgaGVhcE9iamVjCiAgICAgdW5zaWduZWQgaGVhcE9iamVjdElkZW50aWZp
ZXIgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaGVhcE9iamVjdElkKTsKICAgICBjb25zdCBPcHRp
b25hbDxIZWFwU25hcHNob3ROb2RlPiBvcHRpb25hbE5vZGUgPSBub2RlRm9ySGVhcE9iamVjdElk
ZW50aWZpZXIoZXJyb3JTdHJpbmcsIGhlYXBPYmplY3RJZGVudGlmaWVyKTsKICAgICBpZiAoIW9w
dGlvbmFsTm9kZSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0
ZWQoZXJyb3JTdHJpbmcpOwogCiAgICAgSlNDZWxsKiBjZWxsID0gb3B0aW9uYWxOb2RlLT5jZWxs
OwogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gY2VsbC0+c3RydWN0dXJlKHZtKTsKLSAgICBp
ZiAoIXN0cnVjdHVyZSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJVbmFibGUgdG8gZ2V0IG9i
amVjdCBkZXRhaWxzIC0gU3RydWN0dXJlIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAg
IGlmICghc3RydWN0dXJlKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIlVuYWJsZSB0
byBnZXQgb2JqZWN0IGRldGFpbHMgLSBTdHJ1Y3R1cmUiX3MpOwogCiAgICAgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCA9IHN0cnVjdHVyZS0+Z2xvYmFsT2JqZWN0KCk7Ci0gICAgaWYgKCFn
bG9iYWxPYmplY3QpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiVW5hYmxlIHRvIGdldCBvYmpl
Y3QgZGV0YWlscyAtIEdsb2JhbE9iamVjdCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAg
ICBpZiAoIWdsb2JhbE9iamVjdCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJVbmFi
bGUgdG8gZ2V0IG9iamVjdCBkZXRhaWxzIC0gR2xvYmFsT2JqZWN0Il9zKTsKIAogICAgIEluamVj
dGVkU2NyaXB0IGluamVjdGVkU2NyaXB0ID0gbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIuaW5qZWN0
ZWRTY3JpcHRGb3IoZ2xvYmFsT2JqZWN0KTsKLSAgICBpZiAoaW5qZWN0ZWRTY3JpcHQuaGFzTm9W
YWx1ZSgpKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIlVuYWJsZSB0byBnZXQgb2JqZWN0IGRl
dGFpbHMgLSBJbmplY3RlZFNjcmlwdCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBp
ZiAoaW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoIlVuYWJsZSB0byBnZXQgb2JqZWN0IGRldGFpbHMgLSBJbmplY3RlZFNjcmlwdCJfcyk7
CiAKLSAgICBTdHJpbmcgb2JqZWN0R3JvdXAgPSBvcHRpb25hbE9iamVjdEdyb3VwID8gKm9wdGlv
bmFsT2JqZWN0R3JvdXAgOiBTdHJpbmcoKTsKLSAgICByZXN1bHQgPSBpbmplY3RlZFNjcmlwdC53
cmFwT2JqZWN0KGNlbGwsIG9iamVjdEdyb3VwLCB0cnVlKTsKKyAgICBhdXRvIG9iamVjdCA9IGlu
amVjdGVkU2NyaXB0LndyYXBPYmplY3QoY2VsbCwgb2JqZWN0R3JvdXAsIHRydWUpOworICAgIGlm
ICghb2JqZWN0KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkludGVybmFsIGVycm9y
OiB1bmFibGUgdG8gY2FzdCBPYmplY3QiKTsKKworICAgIHJldHVybiBvYmplY3QucmVsZWFzZU5v
bk51bGwoKTsKIH0KIAogc3RhdGljIFByb3RvY29sOjpIZWFwOjpHYXJiYWdlQ29sbGVjdGlvbjo6
VHlwZSBwcm90b2NvbFR5cGVGb3JIZWFwT3BlcmF0aW9uKENvbGxlY3Rpb25TY29wZSBzY29wZSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3Bl
Y3RvckhlYXBBZ2VudC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9ySGVhcEFnZW50LmgKaW5kZXggZGVmNmFjZGU5NDYwZTcxMjgwMDQxZGFhNjVmY2Nk
Njg1ZTBmN2MwZi4uY2FhNTEyZDBhYjJlMTBhODhlMGVlNjBjMmUzMmQ3NDM5NDIyMjdhZCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9y
SGVhcEFnZW50LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9ySGVhcEFnZW50LmgKQEAgLTQwLDcgKzQwLDYgQEAgc3RydWN0IEhlYXBTbmFwc2hv
dE5vZGU7CiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAogY2xhc3MgSW5qZWN0ZWRTY3JpcHRNYW5h
Z2VyOwotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiAKIGNsYXNzIEpTX0VYUE9SVF9QUklW
QVRFIEluc3BlY3RvckhlYXBBZ2VudCA6IHB1YmxpYyBJbnNwZWN0b3JBZ2VudEJhc2UsIHB1Ymxp
YyBIZWFwQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyLCBwdWJsaWMgSlNDOjpIZWFwT2JzZXJ2ZXIg
ewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEluc3BlY3RvckhlYXBBZ2VudCk7CkBAIC01NCwx
NCArNTMsMTQgQEAgcHVibGljOgogICAgIHZvaWQgd2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tl
bmQoRGlzY29ubmVjdFJlYXNvbikgZmluYWw7CiAKICAgICAvLyBIZWFwQmFja2VuZERpc3BhdGNo
ZXJIYW5kbGVyCi0gICAgdm9pZCBlbmFibGUoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2
b2lkIGRpc2FibGUoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2b2lkIGdjKEVycm9yU3Ry
aW5nJikgZmluYWw7Ci0gICAgdm9pZCBzbmFwc2hvdChFcnJvclN0cmluZyYsIGRvdWJsZSogdGlt
ZXN0YW1wLCBTdHJpbmcqIHNuYXBzaG90RGF0YSkgZmluYWw7Ci0gICAgdm9pZCBzdGFydFRyYWNr
aW5nKEVycm9yU3RyaW5nJikgZmluYWw7Ci0gICAgdm9pZCBzdG9wVHJhY2tpbmcoRXJyb3JTdHJp
bmcmKSBmaW5hbDsKLSAgICB2b2lkIGdldFByZXZpZXcoRXJyb3JTdHJpbmcmLCBpbnQgaGVhcE9i
amVjdElkLCBPcHRpb25hbDxTdHJpbmc+JiByZXN1bHRTdHJpbmcsIFJlZlB0cjxQcm90b2NvbDo6
RGVidWdnZXI6OkZ1bmN0aW9uRGV0YWlscz4mLCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6Ok9i
amVjdFByZXZpZXc+JikgZmluYWw7Ci0gICAgdm9pZCBnZXRSZW1vdGVPYmplY3QoRXJyb3JTdHJp
bmcmLCBpbnQgaGVhcE9iamVjdElkLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsT2JqZWN0R3JvdXAs
IFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0KSBmaW5hbDsK
KyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBlbmFibGUoKSBvdmVycmlkZTsKKyAg
ICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBkaXNhYmxlKCkgb3ZlcnJpZGU7CisgICAg
UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZ2MoKSBmaW5hbDsKKyAgICBQcm90b2NvbDo6
RXJyb3JTdHJpbmdPcjxzdGQ6OnR1cGxlPGRvdWJsZSwgUHJvdG9jb2w6OkhlYXA6OkhlYXBTbmFw
c2hvdERhdGE+PiBzbmFwc2hvdCgpIGZpbmFsOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09y
PHZvaWQ+IHN0YXJ0VHJhY2tpbmcoKSBmaW5hbDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdP
cjx2b2lkPiBzdG9wVHJhY2tpbmcoKSBmaW5hbDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdP
cjxzdGQ6OnR1cGxlPFN0cmluZywgUmVmUHRyPFByb3RvY29sOjpEZWJ1Z2dlcjo6RnVuY3Rpb25E
ZXRhaWxzPiwgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpPYmplY3RQcmV2aWV3Pj4+IGdldFBy
ZXZpZXcoaW50IGhlYXBPYmplY3RJZCkgZmluYWw7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5n
T3I8UmVmPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+PiBnZXRSZW1vdGVPYmplY3Qo
aW50IGhlYXBPYmplY3RJZCwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCkgZmluYWw7CiAKICAg
ICAvLyBKU0M6OkhlYXBPYnNlcnZlcgogICAgIHZvaWQgd2lsbEdhcmJhZ2VDb2xsZWN0KCkgZmlu
YWw7CkBAIC03Myw3ICs3Miw3IEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0
Y2hHYXJiYWdlQ29sbGVjdGVkRXZlbnQoUHJvdG9jb2w6OkhlYXA6OkdhcmJhZ2VDb2xsZWN0aW9u
OjpUeXBlLCBTZWNvbmRzIHN0YXJ0VGltZSwgU2Vjb25kcyBlbmRUaW1lKTsKIAogcHJpdmF0ZToK
LSAgICBPcHRpb25hbDxKU0M6OkhlYXBTbmFwc2hvdE5vZGU+IG5vZGVGb3JIZWFwT2JqZWN0SWRl
bnRpZmllcihFcnJvclN0cmluZyYsIHVuc2lnbmVkIGhlYXBPYmplY3RJZGVudGlmaWVyKTsKKyAg
ICBPcHRpb25hbDxKU0M6OkhlYXBTbmFwc2hvdE5vZGU+IG5vZGVGb3JIZWFwT2JqZWN0SWRlbnRp
ZmllcihQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCB1bnNpZ25lZCBoZWFwT2JqZWN0SWRlbnRpZmll
cik7CiAKICAgICBJbmplY3RlZFNjcmlwdE1hbmFnZXImIG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2Vy
OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxIZWFwRnJvbnRlbmREaXNwYXRjaGVyPiBtX2Zyb250ZW5k
RGlzcGF0Y2hlcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
YWdlbnRzL0luc3BlY3RvclJ1bnRpbWVBZ2VudC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JSdW50aW1lQWdlbnQuY3BwCmluZGV4IDlhYjFhZjc0
ZDQzMzYzNzFmNjQ5MjliZjYwNjVhNDJjZTFiOTlmODQuLjA1MWM5ZjMzNjgyOGJkZTI5OTQwMmQz
Y2E2OTIxZTZlOTIyOTM4MGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3IvYWdlbnRzL0luc3BlY3RvclJ1bnRpbWVBZ2VudC5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUnVudGltZUFnZW50LmNwcApAQCAt
NDksMTggKzQ5LDYgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKIHVzaW5nIG5hbWVzcGFjZSBK
U0M7CiAKLXN0YXRpYyBib29sIGFzQm9vbChjb25zdCBib29sKiBiKQotewotICAgIHJldHVybiBi
ICYmICpiOwotfQotCi1zdGF0aWMgaW50IGFzSW50KGNvbnN0IGludCogaSkKLXsKLSAgICBpZiAo
aSkKLSAgICAgICAgcmV0dXJuICppOwotICAgIHJldHVybiAwOwotfQotCiBJbnNwZWN0b3JSdW50
aW1lQWdlbnQ6Okluc3BlY3RvclJ1bnRpbWVBZ2VudChBZ2VudENvbnRleHQmIGNvbnRleHQpCiAg
ICAgOiBJbnNwZWN0b3JBZ2VudEJhc2UoIlJ1bnRpbWUiX3MpCiAgICAgLCBtX2luamVjdGVkU2Ny
aXB0TWFuYWdlcihjb250ZXh0LmluamVjdGVkU2NyaXB0TWFuYWdlcikKQEAgLTgxLDI1ICs2OSw0
NiBAQCBzdGF0aWMgUmVmPFByb3RvY29sOjpSdW50aW1lOjpFcnJvclJhbmdlPiBidWlsZEVycm9y
UmFuZ2VPYmplY3QoY29uc3QgSlNUb2tlbkxvYwogICAgICAgICAucmVsZWFzZSgpOwogfQogCi12
b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6cGFyc2UoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJp
bmcmIGV4cHJlc3Npb24sIFByb3RvY29sOjpSdW50aW1lOjpTeW50YXhFcnJvclR5cGUqIHJlc3Vs
dCwgT3B0aW9uYWw8U3RyaW5nPiYgbWVzc2FnZSwgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpF
cnJvclJhbmdlPiYgcmFuZ2UpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0
b3JSdW50aW1lQWdlbnQ6OmVuYWJsZSgpCit7CisgICAgbV9lbmFibGVkID0gdHJ1ZTsKKworICAg
IHJldHVybiB7IH07Cit9CisKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3Rv
clJ1bnRpbWVBZ2VudDo6ZGlzYWJsZSgpCit7CisgICAgbV9lbmFibGVkID0gZmFsc2U7CisKKyAg
ICByZXR1cm4geyB9OworfQorCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxzdGQ6OnR1cGxlPFBy
b3RvY29sOjpSdW50aW1lOjpTeW50YXhFcnJvclR5cGUsIFN0cmluZyAvKiBtZXNzYWdlICovLCBS
ZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OkVycm9yUmFuZ2U+Pj4gSW5zcGVjdG9yUnVudGltZUFn
ZW50OjpwYXJzZShjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24pCiB7CiAgICAgSlNMb2NrSG9sZGVy
IGxvY2sobV92bSk7CiAKICAgICBQYXJzZXJFcnJvciBlcnJvcjsKICAgICBjaGVja1N5bnRheCht
X3ZtLCBKU0M6Om1ha2VTb3VyY2UoZXhwcmVzc2lvbiwgeyB9KSwgZXJyb3IpOwogCisgICAgT3B0
aW9uYWw8UHJvdG9jb2w6OlJ1bnRpbWU6OlN5bnRheEVycm9yVHlwZT4gcmVzdWx0OworICAgIFN0
cmluZyBtZXNzYWdlOworICAgIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6RXJyb3JSYW5nZT4g
cmFuZ2U7CisKICAgICBzd2l0Y2ggKGVycm9yLnN5bnRheEVycm9yVHlwZSgpKSB7CiAgICAgY2Fz
ZSBQYXJzZXJFcnJvcjo6U3ludGF4RXJyb3JOb25lOgotICAgICAgICAqcmVzdWx0ID0gUHJvdG9j
b2w6OlJ1bnRpbWU6OlN5bnRheEVycm9yVHlwZTo6Tm9uZTsKKyAgICAgICAgcmVzdWx0ID0gUHJv
dG9jb2w6OlJ1bnRpbWU6OlN5bnRheEVycm9yVHlwZTo6Tm9uZTsKICAgICAgICAgYnJlYWs7CisK
ICAgICBjYXNlIFBhcnNlckVycm9yOjpTeW50YXhFcnJvcklycmVjb3ZlcmFibGU6Ci0gICAgICAg
ICpyZXN1bHQgPSBQcm90b2NvbDo6UnVudGltZTo6U3ludGF4RXJyb3JUeXBlOjpJcnJlY292ZXJh
YmxlOworICAgICAgICByZXN1bHQgPSBQcm90b2NvbDo6UnVudGltZTo6U3ludGF4RXJyb3JUeXBl
OjpJcnJlY292ZXJhYmxlOwogICAgICAgICBicmVhazsKKwogICAgIGNhc2UgUGFyc2VyRXJyb3I6
OlN5bnRheEVycm9yVW50ZXJtaW5hdGVkTGl0ZXJhbDoKLSAgICAgICAgKnJlc3VsdCA9IFByb3Rv
Y29sOjpSdW50aW1lOjpTeW50YXhFcnJvclR5cGU6OlVudGVybWluYXRlZExpdGVyYWw7CisgICAg
ICAgIHJlc3VsdCA9IFByb3RvY29sOjpSdW50aW1lOjpTeW50YXhFcnJvclR5cGU6OlVudGVybWlu
YXRlZExpdGVyYWw7CiAgICAgICAgIGJyZWFrOworCiAgICAgY2FzZSBQYXJzZXJFcnJvcjo6U3lu
dGF4RXJyb3JSZWNvdmVyYWJsZToKLSAgICAgICAgKnJlc3VsdCA9IFByb3RvY29sOjpSdW50aW1l
OjpTeW50YXhFcnJvclR5cGU6OlJlY292ZXJhYmxlOworICAgICAgICByZXN1bHQgPSBQcm90b2Nv
bDo6UnVudGltZTo6U3ludGF4RXJyb3JUeXBlOjpSZWNvdmVyYWJsZTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQogCkBAIC0xMDcsMjkgKzExNiw0MiBAQCB2b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2Vu
dDo6cGFyc2UoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIFByb3RvYwog
ICAgICAgICBtZXNzYWdlID0gZXJyb3IubWVzc2FnZSgpOwogICAgICAgICByYW5nZSA9IGJ1aWxk
RXJyb3JSYW5nZU9iamVjdChlcnJvci50b2tlbigpLm1fbG9jYXRpb24pOwogICAgIH0KKworICAg
IHJldHVybiB7IHsgKnJlc3VsdCwgbWVzc2FnZSwgV1RGTW92ZShyYW5nZSkgfSB9OwogfQogCi12
b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6ZXZhbHVhdGUoRXJyb3JTdHJpbmcmIGVycm9yU3Ry
aW5nLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIGNvbnN0IFN0cmluZyogb2JqZWN0R3JvdXAs
IGNvbnN0IGJvb2wqIGluY2x1ZGVDb21tYW5kTGluZUFQSSwgY29uc3QgYm9vbCogZG9Ob3RQYXVz
ZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xlLCBjb25zdCBpbnQqIGV4ZWN1dGlvbkNvbnRleHRJ
ZCwgY29uc3QgYm9vbCogcmV0dXJuQnlWYWx1ZSwgY29uc3QgYm9vbCogZ2VuZXJhdGVQcmV2aWV3
LCBjb25zdCBib29sKiBzYXZlUmVzdWx0LCBjb25zdCBib29sKiAvKiBlbXVsYXRlVXNlckdlc3R1
cmUgKi8sIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0LCBP
cHRpb25hbDxib29sPiYgd2FzVGhyb3duLCBPcHRpb25hbDxpbnQ+JiBzYXZlZFJlc3VsdEluZGV4
KQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8c3RkOjp0dXBsZTxSZWY8UHJvdG9jb2w6OlJ1bnRp
bWU6OlJlbW90ZU9iamVjdD4sIE9wdGlvbmFsPGJvb2w+IC8qIHdhc1Rocm93biAqLywgT3B0aW9u
YWw8aW50PiAvKiBzYXZlZFJlc3VsdEluZGV4ICovPj4gSW5zcGVjdG9yUnVudGltZUFnZW50Ojpl
dmFsdWF0ZShjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIGNvbnN0IFN0cmluZyYgb2JqZWN0R3Jv
dXAsIE9wdGlvbmFsPGJvb2w+JiYgaW5jbHVkZUNvbW1hbmRMaW5lQVBJLCBPcHRpb25hbDxib29s
PiYmIGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29sZSwgT3B0aW9uYWw8UHJvdG9j
b2w6OlJ1bnRpbWU6OkV4ZWN1dGlvbkNvbnRleHRJZD4mJiBleGVjdXRpb25Db250ZXh0SWQsIE9w
dGlvbmFsPGJvb2w+JiYgcmV0dXJuQnlWYWx1ZSwgT3B0aW9uYWw8Ym9vbD4mJiBnZW5lcmF0ZVBy
ZXZpZXcsIE9wdGlvbmFsPGJvb2w+JiYgc2F2ZVJlc3VsdCwgT3B0aW9uYWw8Ym9vbD4mJiAvKiBl
bXVsYXRlVXNlckdlc3R1cmUgKi8pCiB7Ci0gICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3Jp
cHQgPSBpbmplY3RlZFNjcmlwdEZvckV2YWwoZXJyb3JTdHJpbmcsIGV4ZWN1dGlvbkNvbnRleHRJ
ZCk7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCisgICAgSW5qZWN0
ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHQgPSBpbmplY3RlZFNjcmlwdEZvckV2YWwoZXJyb3JTdHJp
bmcsIFdURk1vdmUoZXhlY3V0aW9uQ29udGV4dElkKSk7CiAgICAgaWYgKGluamVjdGVkU2NyaXB0
Lmhhc05vVmFsdWUoKSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoZXJyb3JTdHJpbmcpOworCisgICAgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1v
dGVPYmplY3Q+IHJlc3VsdDsKKyAgICBPcHRpb25hbDxib29sPiB3YXNUaHJvd247CisgICAgT3B0
aW9uYWw8aW50PiBzYXZlZFJlc3VsdEluZGV4OwogCiAgICAgSlNDOjpEZWJ1Z2dlcjo6VGVtcG9y
YXJpbHlEaXNhYmxlRXhjZXB0aW9uQnJlYWtwb2ludHMgdGVtcG9yYXJpbHlEaXNhYmxlRXhjZXB0
aW9uQnJlYWtwb2ludHMobV9kZWJ1Z2dlcik7CiAKLSAgICBib29sIHBhdXNlQW5kTXV0ZSA9IGFz
Qm9vbChkb05vdFBhdXNlT25FeGNlcHRpb25zQW5kTXV0ZUNvbnNvbGUpOworICAgIGJvb2wgcGF1
c2VBbmRNdXRlID0gZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xlLnZhbHVlT3Io
ZmFsc2UpOwogICAgIGlmIChwYXVzZUFuZE11dGUpIHsKICAgICAgICAgdGVtcG9yYXJpbHlEaXNh
YmxlRXhjZXB0aW9uQnJlYWtwb2ludHMucmVwbGFjZSgpOwogICAgICAgICBtdXRlQ29uc29sZSgp
OwogICAgIH0KIAotICAgIGluamVjdGVkU2NyaXB0LmV2YWx1YXRlKGVycm9yU3RyaW5nLCBleHBy
ZXNzaW9uLCBvYmplY3RHcm91cCA/ICpvYmplY3RHcm91cCA6IFN0cmluZygpLCBhc0Jvb2woaW5j
bHVkZUNvbW1hbmRMaW5lQVBJKSwgYXNCb29sKHJldHVybkJ5VmFsdWUpLCBhc0Jvb2woZ2VuZXJh
dGVQcmV2aWV3KSwgYXNCb29sKHNhdmVSZXN1bHQpLCByZXN1bHQsIHdhc1Rocm93biwgc2F2ZWRS
ZXN1bHRJbmRleCk7CisgICAgaW5qZWN0ZWRTY3JpcHQuZXZhbHVhdGUoZXJyb3JTdHJpbmcsIGV4
cHJlc3Npb24sIG9iamVjdEdyb3VwLCBpbmNsdWRlQ29tbWFuZExpbmVBUEkudmFsdWVPcihmYWxz
ZSksIHJldHVybkJ5VmFsdWUudmFsdWVPcihmYWxzZSksIGdlbmVyYXRlUHJldmlldy52YWx1ZU9y
KGZhbHNlKSwgc2F2ZVJlc3VsdC52YWx1ZU9yKGZhbHNlKSwgcmVzdWx0LCB3YXNUaHJvd24sIHNh
dmVkUmVzdWx0SW5kZXgpOwogCiAgICAgaWYgKHBhdXNlQW5kTXV0ZSkKICAgICAgICAgdW5tdXRl
Q29uc29sZSgpOworCisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBl
Y3RlZChlcnJvclN0cmluZyk7CisKKyAgICByZXR1cm4geyB7cmVzdWx0LnJlbGVhc2VOb25OdWxs
KCksIFdURk1vdmUod2FzVGhyb3duKSwgV1RGTW92ZShzYXZlZFJlc3VsdEluZGV4KSB9IH07CiB9
CiAKLXZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50Ojphd2FpdFByb21pc2UoY29uc3QgU3RyaW5n
JiBwcm9taXNlT2JqZWN0SWQsIGNvbnN0IGJvb2wqIHJldHVybkJ5VmFsdWUsIGNvbnN0IGJvb2wq
IGdlbmVyYXRlUHJldmlldywgY29uc3QgYm9vbCogc2F2ZVJlc3VsdCwgUmVmPEF3YWl0UHJvbWlz
ZUNhbGxiYWNrPiYmIGNhbGxiYWNrKQordm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmF3YWl0
UHJvbWlzZShjb25zdCBQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0SWQmIHByb21pc2VP
YmplY3RJZCwgT3B0aW9uYWw8Ym9vbD4mJiByZXR1cm5CeVZhbHVlLCBPcHRpb25hbDxib29sPiYm
IGdlbmVyYXRlUHJldmlldywgT3B0aW9uYWw8Ym9vbD4mJiBzYXZlUmVzdWx0LCBSZWY8QXdhaXRQ
cm9taXNlQ2FsbGJhY2s+JiYgY2FsbGJhY2spCiB7CiAgICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0
ZWRTY3JpcHQgPSBtX2luamVjdGVkU2NyaXB0TWFuYWdlci5pbmplY3RlZFNjcmlwdEZvck9iamVj
dElkKHByb21pc2VPYmplY3RJZCk7CiAgICAgaWYgKGluamVjdGVkU2NyaXB0Lmhhc05vVmFsdWUo
KSkgewpAQCAtMTM3LDIxOSArMTU5LDI0NCBAQCB2b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6
YXdhaXRQcm9taXNlKGNvbnN0IFN0cmluZyYgcHJvbWlzZU9iamVjdElkLCBjb25zdCBibwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaW5qZWN0ZWRTY3JpcHQuYXdhaXRQcm9taXNlKHBy
b21pc2VPYmplY3RJZCwgYXNCb29sKHJldHVybkJ5VmFsdWUpLCBhc0Jvb2woZ2VuZXJhdGVQcmV2
aWV3KSwgYXNCb29sKHNhdmVSZXN1bHQpLCBbY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0g
KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1v
dGVPYmplY3Q+JiYgcmVzdWx0LCBPcHRpb25hbDxib29sPiYgd2FzVGhyb3duLCBPcHRpb25hbDxp
bnQ+JiBzYXZlZFJlc3VsdEluZGV4KSB7Ci0gICAgICAgIGlmICghZXJyb3JTdHJpbmcuaXNFbXB0
eSgpKQorICAgIGluamVjdGVkU2NyaXB0LmF3YWl0UHJvbWlzZShwcm9taXNlT2JqZWN0SWQsIHJl
dHVybkJ5VmFsdWUudmFsdWVPcihmYWxzZSksIGdlbmVyYXRlUHJldmlldy52YWx1ZU9yKGZhbHNl
KSwgc2F2ZVJlc3VsdC52YWx1ZU9yKGZhbHNlKSwgW2NhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFj
ayldIChQcm90b2NvbDo6RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBSZWZQdHI8UHJvdG9jb2w6
OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mJiByZXN1bHQsIE9wdGlvbmFsPGJvb2w+JiYgd2FzVGhy
b3duLCBPcHRpb25hbDxpbnQ+JiYgc2F2ZWRSZXN1bHRJbmRleCkgeworICAgICAgICBpZiAoIXJl
c3VsdCkKICAgICAgICAgICAgIGNhbGxiYWNrLT5zZW5kRmFpbHVyZShlcnJvclN0cmluZyk7CiAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNhbGxiYWNrLT5zZW5kU3VjY2VzcyhXVEZNb3ZlKHJl
c3VsdCksIHdhc1Rocm93biwgc2F2ZWRSZXN1bHRJbmRleCk7CisgICAgICAgICAgICBjYWxsYmFj
ay0+c2VuZFN1Y2Nlc3MocmVzdWx0LnJlbGVhc2VOb25OdWxsKCksIFdURk1vdmUod2FzVGhyb3du
KSwgV1RGTW92ZShzYXZlZFJlc3VsdEluZGV4KSk7CiAgICAgfSk7CiB9CiAKLXZvaWQgSW5zcGVj
dG9yUnVudGltZUFnZW50OjpjYWxsRnVuY3Rpb25PbihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcs
IGNvbnN0IFN0cmluZyYgb2JqZWN0SWQsIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgY29uc3Qg
SlNPTjo6QXJyYXkqIG9wdGlvbmFsQXJndW1lbnRzLCBjb25zdCBib29sKiBkb05vdFBhdXNlT25F
eGNlcHRpb25zQW5kTXV0ZUNvbnNvbGUsIGNvbnN0IGJvb2wqIHJldHVybkJ5VmFsdWUsIGNvbnN0
IGJvb2wqIGdlbmVyYXRlUHJldmlldywgY29uc3QgYm9vbCogLyogZW11bGF0ZVVzZXJHZXN0dXJl
ICovLCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3VsdCwgT3B0
aW9uYWw8Ym9vbD4mIHdhc1Rocm93bikKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHN0ZDo6dHVw
bGU8UmVmPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+LCBPcHRpb25hbDxib29sPiAv
KiB3YXNUaHJvd24gKi8+PiBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmNhbGxGdW5jdGlvbk9uKGNv
bnN0IFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3RJZCYgb2JqZWN0SWQsIGNvbnN0IFN0
cmluZyYgZnVuY3Rpb25EZWNsYXJhdGlvbiwgUmVmUHRyPEpTT046OkFycmF5PiYmIGFyZ3VtZW50
cywgT3B0aW9uYWw8Ym9vbD4mJiBkb05vdFBhdXNlT25FeGNlcHRpb25zQW5kTXV0ZUNvbnNvbGUs
IE9wdGlvbmFsPGJvb2w+JiYgcmV0dXJuQnlWYWx1ZSwgT3B0aW9uYWw8Ym9vbD4mJiBnZW5lcmF0
ZVByZXZpZXcsIE9wdGlvbmFsPGJvb2w+JiYgLyogZW11bGF0ZVVzZXJHZXN0dXJlICovKQogewot
ICAgIEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0ID0gbV9pbmplY3RlZFNjcmlwdE1hbmFn
ZXIuaW5qZWN0ZWRTY3JpcHRGb3JPYmplY3RJZChvYmplY3RJZCk7Ci0gICAgaWYgKGluamVjdGVk
U2NyaXB0Lmhhc05vVmFsdWUoKSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIGlu
amVjdGVkIHNjcmlwdCBmb3IgZ2l2ZW4gb2JqZWN0SWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOwogCi0gICAgU3RyaW5n
IGFyZ3VtZW50czsKLSAgICBpZiAob3B0aW9uYWxBcmd1bWVudHMpCi0gICAgICAgIGFyZ3VtZW50
cyA9IG9wdGlvbmFsQXJndW1lbnRzLT50b0pTT05TdHJpbmcoKTsKKyAgICBJbmplY3RlZFNjcmlw
dCBpbmplY3RlZFNjcmlwdCA9IG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmluamVjdGVkU2NyaXB0
Rm9yT2JqZWN0SWQob2JqZWN0SWQpOworICAgIGlmIChpbmplY3RlZFNjcmlwdC5oYXNOb1ZhbHVl
KCkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTWlzc2luZyBpbmplY3RlZCBzY3Jp
cHQgZm9yIGdpdmVuIG9iamVjdElkIl9zKTsKKworICAgIFJlZlB0cjxQcm90b2NvbDo6UnVudGlt
ZTo6UmVtb3RlT2JqZWN0PiByZXN1bHQ7CisgICAgT3B0aW9uYWw8Ym9vbD4gd2FzVGhyb3duOwog
CiAgICAgSlNDOjpEZWJ1Z2dlcjo6VGVtcG9yYXJpbHlEaXNhYmxlRXhjZXB0aW9uQnJlYWtwb2lu
dHMgdGVtcG9yYXJpbHlEaXNhYmxlRXhjZXB0aW9uQnJlYWtwb2ludHMobV9kZWJ1Z2dlcik7CiAK
LSAgICBib29sIHBhdXNlQW5kTXV0ZSA9IGFzQm9vbChkb05vdFBhdXNlT25FeGNlcHRpb25zQW5k
TXV0ZUNvbnNvbGUpOworICAgIGJvb2wgcGF1c2VBbmRNdXRlID0gZG9Ob3RQYXVzZU9uRXhjZXB0
aW9uc0FuZE11dGVDb25zb2xlLnZhbHVlT3IoZmFsc2UpOwogICAgIGlmIChwYXVzZUFuZE11dGUp
IHsKICAgICAgICAgdGVtcG9yYXJpbHlEaXNhYmxlRXhjZXB0aW9uQnJlYWtwb2ludHMucmVwbGFj
ZSgpOwogICAgICAgICBtdXRlQ29uc29sZSgpOwogICAgIH0KIAotICAgIGluamVjdGVkU2NyaXB0
LmNhbGxGdW5jdGlvbk9uKGVycm9yU3RyaW5nLCBvYmplY3RJZCwgZXhwcmVzc2lvbiwgYXJndW1l
bnRzLCBhc0Jvb2wocmV0dXJuQnlWYWx1ZSksIGFzQm9vbChnZW5lcmF0ZVByZXZpZXcpLCByZXN1
bHQsIHdhc1Rocm93bik7CisgICAgaW5qZWN0ZWRTY3JpcHQuY2FsbEZ1bmN0aW9uT24oZXJyb3JT
dHJpbmcsIG9iamVjdElkLCBmdW5jdGlvbkRlY2xhcmF0aW9uLCBhcmd1bWVudHMgPyBhcmd1bWVu
dHMtPnRvSlNPTlN0cmluZygpIDogbnVsbFN0cmluZygpLCByZXR1cm5CeVZhbHVlLnZhbHVlT3Io
ZmFsc2UpLCBnZW5lcmF0ZVByZXZpZXcudmFsdWVPcihmYWxzZSksIHJlc3VsdCwgd2FzVGhyb3du
KTsKIAogICAgIGlmIChwYXVzZUFuZE11dGUpCiAgICAgICAgIHVubXV0ZUNvbnNvbGUoKTsKKwor
ICAgIGlmICghcmVzdWx0KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJp
bmcpOworCisgICAgcmV0dXJuIHsgeyByZXN1bHQucmVsZWFzZU5vbk51bGwoKSwgV1RGTW92ZSh3
YXNUaHJvd24pIH0gfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmdldFByZXZp
ZXcoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBSZWZQ
dHI8UHJvdG9jb2w6OlJ1bnRpbWU6Ok9iamVjdFByZXZpZXc+JiBwcmV2aWV3KQorUHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8UmVmPFByb3RvY29sOjpSdW50aW1lOjpPYmplY3RQcmV2aWV3Pj4gSW5z
cGVjdG9yUnVudGltZUFnZW50OjpnZXRQcmV2aWV3KGNvbnN0IFByb3RvY29sOjpSdW50aW1lOjpS
ZW1vdGVPYmplY3RJZCYgb2JqZWN0SWQpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVy
cm9yU3RyaW5nOworCiAgICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHQgPSBtX2luamVj
dGVkU2NyaXB0TWFuYWdlci5pbmplY3RlZFNjcmlwdEZvck9iamVjdElkKG9iamVjdElkKTsKLSAg
ICBpZiAoaW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKSB7Ci0gICAgICAgIGVycm9yU3RyaW5n
ID0gIk1pc3NpbmcgaW5qZWN0ZWQgc2NyaXB0IGZvciBnaXZlbiBvYmplY3RJZCJfczsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoaW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKQor
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk1pc3NpbmcgaW5qZWN0ZWQgc2NyaXB0IGZv
ciBnaXZlbiBvYmplY3RJZCJfcyk7CiAKICAgICBKU0M6OkRlYnVnZ2VyOjpUZW1wb3JhcmlseURp
c2FibGVFeGNlcHRpb25CcmVha3BvaW50cyB0ZW1wb3JhcmlseURpc2FibGVFeGNlcHRpb25CcmVh
a3BvaW50cyhtX2RlYnVnZ2VyKTsKICAgICB0ZW1wb3JhcmlseURpc2FibGVFeGNlcHRpb25CcmVh
a3BvaW50cy5yZXBsYWNlKCk7CiAKKyAgICBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6Ok9iamVj
dFByZXZpZXc+IHByZXZpZXc7CisKICAgICBtdXRlQ29uc29sZSgpOwogCiAgICAgaW5qZWN0ZWRT
Y3JpcHQuZ2V0UHJldmlldyhlcnJvclN0cmluZywgb2JqZWN0SWQsIHByZXZpZXcpOwogCiAgICAg
dW5tdXRlQ29uc29sZSgpOworCisgICAgaWYgKCFwcmV2aWV3KQorICAgICAgICByZXR1cm4gbWFr
ZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOworCisgICAgcmV0dXJuIHByZXZpZXcucmVsZWFzZU5v
bk51bGwoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmdldFByb3BlcnRpZXMo
RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBjb25zdCBi
b29sKiBvd25Qcm9wZXJ0aWVzLCBjb25zdCBpbnQqIGZldGNoU3RhcnQsIGNvbnN0IGludCogZmV0
Y2hDb3VudCwgY29uc3QgYm9vbCogZ2VuZXJhdGVQcmV2aWV3LCBSZWZQdHI8SlNPTjo6QXJyYXlP
ZjxQcm90b2NvbDo6UnVudGltZTo6UHJvcGVydHlEZXNjcmlwdG9yPj4mIHByb3BlcnRpZXMsIFJl
ZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpJbnRlcm5hbFByb3BlcnR5RGVz
Y3JpcHRvcj4+JiBpbnRlcm5hbFByb3BlcnRpZXMpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxz
dGQ6OnR1cGxlPFJlZjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpQcm9wZXJ0eURl
c2NyaXB0b3I+PiwgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OkludGVy
bmFsUHJvcGVydHlEZXNjcmlwdG9yPj4+PiBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmdldFByb3Bl
cnRpZXMoY29uc3QgUHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdElkJiBvYmplY3RJZCwg
T3B0aW9uYWw8Ym9vbD4mJiBvd25Qcm9wZXJ0aWVzLCBPcHRpb25hbDxpbnQ+JiYgZmV0Y2hTdGFy
dCwgT3B0aW9uYWw8aW50PiYmIGZldGNoQ291bnQsIE9wdGlvbmFsPGJvb2w+JiYgZ2VuZXJhdGVQ
cmV2aWV3KQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAg
IEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0ID0gbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIu
aW5qZWN0ZWRTY3JpcHRGb3JPYmplY3RJZChvYmplY3RJZCk7Ci0gICAgaWYgKGluamVjdGVkU2Ny
aXB0Lmhhc05vVmFsdWUoKSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIGluamVj
dGVkIHNjcmlwdCBmb3IgZ2l2ZW4gb2JqZWN0SWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
CisgICAgaWYgKGluamVjdGVkU2NyaXB0Lmhhc05vVmFsdWUoKSkKKyAgICAgICAgcmV0dXJuIG1h
a2VVbmV4cGVjdGVkKCJNaXNzaW5nIGluamVjdGVkIHNjcmlwdCBmb3IgZ2l2ZW4gb2JqZWN0SWQi
X3MpOwogCi0gICAgaW50IHN0YXJ0ID0gYXNJbnQoZmV0Y2hTdGFydCk7Ci0gICAgaWYgKHN0YXJ0
IDwgMCkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJmZXRjaFN0YXJ0IGNhbm5vdCBiZSBuZWdh
dGl2ZSJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpbnQgc3RhcnQgPSBmZXRjaFN0
YXJ0LnZhbHVlT3IoMCk7CisgICAgaWYgKHN0YXJ0IDwgMCkKKyAgICAgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKCJmZXRjaFN0YXJ0IGNhbm5vdCBiZSBuZWdhdGl2ZSJfcyk7CiAKLSAgICBpbnQg
Y291bnQgPSBhc0ludChmZXRjaENvdW50KTsKLSAgICBpZiAoY291bnQgPCAwKSB7Ci0gICAgICAg
IGVycm9yU3RyaW5nID0gImZldGNoQ291bnQgY2Fubm90IGJlIG5lZ2F0aXZlIl9zOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQorICAgIGludCBjb3VudCA9IGZldGNoQ291bnQudmFsdWVPcigwKTsK
KyAgICBpZiAoY291bnQgPCAwKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoImZldGNo
Q291bnQgY2Fubm90IGJlIG5lZ2F0aXZlIl9zKTsKKworICAgIFJlZlB0cjxKU09OOjpBcnJheU9m
PFByb3RvY29sOjpSdW50aW1lOjpQcm9wZXJ0eURlc2NyaXB0b3I+PiBwcm9wZXJ0aWVzOworICAg
IFJlZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpJbnRlcm5hbFByb3BlcnR5
RGVzY3JpcHRvcj4+IGludGVybmFsUHJvcGVydGllczsKIAogICAgIEpTQzo6RGVidWdnZXI6OlRl
bXBvcmFyaWx5RGlzYWJsZUV4Y2VwdGlvbkJyZWFrcG9pbnRzIHRlbXBvcmFyaWx5RGlzYWJsZUV4
Y2VwdGlvbkJyZWFrcG9pbnRzKG1fZGVidWdnZXIpOwogICAgIHRlbXBvcmFyaWx5RGlzYWJsZUV4
Y2VwdGlvbkJyZWFrcG9pbnRzLnJlcGxhY2UoKTsKIAogICAgIG11dGVDb25zb2xlKCk7CiAKLSAg
ICBpbmplY3RlZFNjcmlwdC5nZXRQcm9wZXJ0aWVzKGVycm9yU3RyaW5nLCBvYmplY3RJZCwgYXNC
b29sKG93blByb3BlcnRpZXMpLCBzdGFydCwgY291bnQsIGFzQm9vbChnZW5lcmF0ZVByZXZpZXcp
LCBwcm9wZXJ0aWVzKTsKKyAgICBpbmplY3RlZFNjcmlwdC5nZXRQcm9wZXJ0aWVzKGVycm9yU3Ry
aW5nLCBvYmplY3RJZCwgb3duUHJvcGVydGllcy52YWx1ZU9yKGZhbHNlKSwgc3RhcnQsIGNvdW50
LCBnZW5lcmF0ZVByZXZpZXcudmFsdWVPcihmYWxzZSksIHByb3BlcnRpZXMpOwogCiAgICAgLy8g
T25seSBpbmNsdWRlIGludGVybmFsIHByb3BlcnRpZXMgZm9yIHRoZSBmaXJzdCBmZXRjaC4KICAg
ICBpZiAoIXN0YXJ0KQotICAgICAgICBpbmplY3RlZFNjcmlwdC5nZXRJbnRlcm5hbFByb3BlcnRp
ZXMoZXJyb3JTdHJpbmcsIG9iamVjdElkLCBhc0Jvb2woZ2VuZXJhdGVQcmV2aWV3KSwgaW50ZXJu
YWxQcm9wZXJ0aWVzKTsKKyAgICAgICAgaW5qZWN0ZWRTY3JpcHQuZ2V0SW50ZXJuYWxQcm9wZXJ0
aWVzKGVycm9yU3RyaW5nLCBvYmplY3RJZCwgZ2VuZXJhdGVQcmV2aWV3LnZhbHVlT3IoZmFsc2Up
LCBpbnRlcm5hbFByb3BlcnRpZXMpOwogCiAgICAgdW5tdXRlQ29uc29sZSgpOworCisgICAgaWYg
KCFwcm9wZXJ0aWVzKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcp
OworCisgICAgcmV0dXJuIHsgeyBwcm9wZXJ0aWVzLnJlbGVhc2VOb25OdWxsKCksIFdURk1vdmUo
aW50ZXJuYWxQcm9wZXJ0aWVzKSB9IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50
OjpnZXREaXNwbGF5YWJsZVByb3BlcnRpZXMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25z
dCBTdHJpbmcmIG9iamVjdElkLCBjb25zdCBpbnQqIGZldGNoU3RhcnQsIGNvbnN0IGludCogZmV0
Y2hDb3VudCwgY29uc3QgYm9vbCogZ2VuZXJhdGVQcmV2aWV3LCBSZWZQdHI8SlNPTjo6QXJyYXlP
ZjxQcm90b2NvbDo6UnVudGltZTo6UHJvcGVydHlEZXNjcmlwdG9yPj4mIHByb3BlcnRpZXMsIFJl
ZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpJbnRlcm5hbFByb3BlcnR5RGVz
Y3JpcHRvcj4+JiBpbnRlcm5hbFByb3BlcnRpZXMpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxz
dGQ6OnR1cGxlPFJlZjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpQcm9wZXJ0eURl
c2NyaXB0b3I+PiwgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OkludGVy
bmFsUHJvcGVydHlEZXNjcmlwdG9yPj4+PiBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmdldERpc3Bs
YXlhYmxlUHJvcGVydGllcyhjb25zdCBQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0SWQm
IG9iamVjdElkLCBPcHRpb25hbDxpbnQ+JiYgZmV0Y2hTdGFydCwgT3B0aW9uYWw8aW50PiYmIGZl
dGNoQ291bnQsIE9wdGlvbmFsPGJvb2w+JiYgZ2VuZXJhdGVQcmV2aWV3KQogeworICAgIFByb3Rv
Y29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIEluamVjdGVkU2NyaXB0IGluamVj
dGVkU2NyaXB0ID0gbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIuaW5qZWN0ZWRTY3JpcHRGb3JPYmpl
Y3RJZChvYmplY3RJZCk7Ci0gICAgaWYgKGluamVjdGVkU2NyaXB0Lmhhc05vVmFsdWUoKSkgewot
ICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIGluamVjdGVkIHNjcmlwdCBmb3IgZ2l2ZW4g
b2JqZWN0SWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKGluamVjdGVkU2Ny
aXB0Lmhhc05vVmFsdWUoKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJNaXNzaW5n
IGluamVjdGVkIHNjcmlwdCBmb3IgZ2l2ZW4gb2JqZWN0SWQiX3MpOwogCi0gICAgaW50IHN0YXJ0
ID0gYXNJbnQoZmV0Y2hTdGFydCk7Ci0gICAgaWYgKHN0YXJ0IDwgMCkgewotICAgICAgICBlcnJv
clN0cmluZyA9ICJmZXRjaFN0YXJ0IGNhbm5vdCBiZSBuZWdhdGl2ZSJfczsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KKyAgICBpbnQgc3RhcnQgPSBmZXRjaFN0YXJ0LnZhbHVlT3IoMCk7CisgICAg
aWYgKHN0YXJ0IDwgMCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJmZXRjaFN0YXJ0
IGNhbm5vdCBiZSBuZWdhdGl2ZSJfcyk7CiAKLSAgICBpbnQgY291bnQgPSBhc0ludChmZXRjaENv
dW50KTsKLSAgICBpZiAoY291bnQgPCAwKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gImZldGNo
Q291bnQgY2Fubm90IGJlIG5lZ2F0aXZlIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAg
IGludCBjb3VudCA9IGZldGNoQ291bnQudmFsdWVPcigwKTsKKyAgICBpZiAoY291bnQgPCAwKQor
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoImZldGNoQ291bnQgY2Fubm90IGJlIG5lZ2F0
aXZlIl9zKTsKKworICAgIFJlZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpQ
cm9wZXJ0eURlc2NyaXB0b3I+PiBwcm9wZXJ0aWVzOworICAgIFJlZlB0cjxKU09OOjpBcnJheU9m
PFByb3RvY29sOjpSdW50aW1lOjpJbnRlcm5hbFByb3BlcnR5RGVzY3JpcHRvcj4+IGludGVybmFs
UHJvcGVydGllczsKIAogICAgIEpTQzo6RGVidWdnZXI6OlRlbXBvcmFyaWx5RGlzYWJsZUV4Y2Vw
dGlvbkJyZWFrcG9pbnRzIHRlbXBvcmFyaWx5RGlzYWJsZUV4Y2VwdGlvbkJyZWFrcG9pbnRzKG1f
ZGVidWdnZXIpOwogICAgIHRlbXBvcmFyaWx5RGlzYWJsZUV4Y2VwdGlvbkJyZWFrcG9pbnRzLnJl
cGxhY2UoKTsKIAogICAgIG11dGVDb25zb2xlKCk7CiAKLSAgICBpbmplY3RlZFNjcmlwdC5nZXRE
aXNwbGF5YWJsZVByb3BlcnRpZXMoZXJyb3JTdHJpbmcsIG9iamVjdElkLCBzdGFydCwgY291bnQs
IGFzQm9vbChnZW5lcmF0ZVByZXZpZXcpLCBwcm9wZXJ0aWVzKTsKKyAgICBpbmplY3RlZFNjcmlw
dC5nZXREaXNwbGF5YWJsZVByb3BlcnRpZXMoZXJyb3JTdHJpbmcsIG9iamVjdElkLCBzdGFydCwg
Y291bnQsIGdlbmVyYXRlUHJldmlldy52YWx1ZU9yKGZhbHNlKSwgcHJvcGVydGllcyk7CiAKICAg
ICAvLyBPbmx5IGluY2x1ZGUgaW50ZXJuYWwgcHJvcGVydGllcyBmb3IgdGhlIGZpcnN0IGZldGNo
LgogICAgIGlmICghc3RhcnQpCi0gICAgICAgIGluamVjdGVkU2NyaXB0LmdldEludGVybmFsUHJv
cGVydGllcyhlcnJvclN0cmluZywgb2JqZWN0SWQsIGFzQm9vbChnZW5lcmF0ZVByZXZpZXcpLCBp
bnRlcm5hbFByb3BlcnRpZXMpOworICAgICAgICBpbmplY3RlZFNjcmlwdC5nZXRJbnRlcm5hbFBy
b3BlcnRpZXMoZXJyb3JTdHJpbmcsIG9iamVjdElkLCBnZW5lcmF0ZVByZXZpZXcudmFsdWVPcihm
YWxzZSksIGludGVybmFsUHJvcGVydGllcyk7CiAKICAgICB1bm11dGVDb25zb2xlKCk7CisKKyAg
ICBpZiAoIXByb3BlcnRpZXMpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0
cmluZyk7CisKKyAgICByZXR1cm4geyB7IHByb3BlcnRpZXMucmVsZWFzZU5vbk51bGwoKSwgV1RG
TW92ZShpbnRlcm5hbFByb3BlcnRpZXMpIH0gfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSdW50aW1l
QWdlbnQ6OmdldENvbGxlY3Rpb25FbnRyaWVzKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29u
c3QgU3RyaW5nJiBvYmplY3RJZCwgY29uc3QgU3RyaW5nKiBvYmplY3RHcm91cCwgY29uc3QgaW50
KiBmZXRjaFN0YXJ0LCBjb25zdCBpbnQqIGZldGNoQ291bnQsIFJlZlB0cjxKU09OOjpBcnJheU9m
PFByb3RvY29sOjpSdW50aW1lOjpDb2xsZWN0aW9uRW50cnk+PiYgZW50cmllcykKK1Byb3RvY29s
OjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpDb2xs
ZWN0aW9uRW50cnk+Pj4gSW5zcGVjdG9yUnVudGltZUFnZW50OjpnZXRDb2xsZWN0aW9uRW50cmll
cyhjb25zdCBQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0SWQmIG9iamVjdElkLCBjb25z
dCBTdHJpbmcmIG9iamVjdEdyb3VwLCBPcHRpb25hbDxpbnQ+JiYgZmV0Y2hTdGFydCwgT3B0aW9u
YWw8aW50PiYmIGZldGNoQ291bnQpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9y
U3RyaW5nOworCiAgICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHQgPSBtX2luamVjdGVk
U2NyaXB0TWFuYWdlci5pbmplY3RlZFNjcmlwdEZvck9iamVjdElkKG9iamVjdElkKTsKLSAgICBp
ZiAoaW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0g
Ik1pc3NpbmcgaW5qZWN0ZWQgc2NyaXB0IGZvciBnaXZlbiBvYmplY3RJZCJfczsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KKyAgICBpZiAoaW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKQorICAg
ICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk1pc3NpbmcgaW5qZWN0ZWQgc2NyaXB0IGZvciBn
aXZlbiBvYmplY3RJZCJfcyk7CiAKLSAgICBpbnQgc3RhcnQgPSBhc0ludChmZXRjaFN0YXJ0KTsK
LSAgICBpZiAoc3RhcnQgPCAwKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gImZldGNoU3RhcnQg
Y2Fubm90IGJlIG5lZ2F0aXZlIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGludCBz
dGFydCA9IGZldGNoU3RhcnQudmFsdWVPcigwKTsKKyAgICBpZiAoc3RhcnQgPCAwKQorICAgICAg
ICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoImZldGNoU3RhcnQgY2Fubm90IGJlIG5lZ2F0aXZlIl9z
KTsKIAotICAgIGludCBjb3VudCA9IGFzSW50KGZldGNoQ291bnQpOwotICAgIGlmIChjb3VudCA8
IDApIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiZmV0Y2hDb3VudCBjYW5ub3QgYmUgbmVnYXRp
dmUiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaW50IGNvdW50ID0gZmV0Y2hDb3Vu
dC52YWx1ZU9yKDApOworICAgIGlmIChjb3VudCA8IDApCisgICAgICAgIHJldHVybiBtYWtlVW5l
eHBlY3RlZCgiZmV0Y2hDb3VudCBjYW5ub3QgYmUgbmVnYXRpdmUiX3MpOwogCi0gICAgaW5qZWN0
ZWRTY3JpcHQuZ2V0Q29sbGVjdGlvbkVudHJpZXMoZXJyb3JTdHJpbmcsIG9iamVjdElkLCBvYmpl
Y3RHcm91cCA/ICpvYmplY3RHcm91cCA6IFN0cmluZygpLCBzdGFydCwgY291bnQsIGVudHJpZXMp
OworICAgIFJlZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpDb2xsZWN0aW9u
RW50cnk+PiBlbnRyaWVzOworCisgICAgaW5qZWN0ZWRTY3JpcHQuZ2V0Q29sbGVjdGlvbkVudHJp
ZXMoZXJyb3JTdHJpbmcsIG9iamVjdElkLCBvYmplY3RHcm91cCwgc3RhcnQsIGNvdW50LCBlbnRy
aWVzKTsKKworICAgIGlmICghZW50cmllcykKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVk
KGVycm9yU3RyaW5nKTsKKworICAgIHJldHVybiBlbnRyaWVzLnJlbGVhc2VOb25OdWxsKCk7CiB9
CiAKLXZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50OjpzYXZlUmVzdWx0KEVycm9yU3RyaW5nJiBl
cnJvclN0cmluZywgY29uc3QgSlNPTjo6T2JqZWN0JiBjYWxsQXJndW1lbnQsIGNvbnN0IGludCog
ZXhlY3V0aW9uQ29udGV4dElkLCBPcHRpb25hbDxpbnQ+JiBzYXZlZFJlc3VsdEluZGV4KQorUHJv
dG9jb2w6OkVycm9yU3RyaW5nT3I8T3B0aW9uYWw8aW50PiAvKiBzYXZlUmVzdWx0SW5kZXggKi8+
IEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6c2F2ZVJlc3VsdChSZWY8SlNPTjo6T2JqZWN0PiYmIGNh
bGxBcmd1bWVudCwgT3B0aW9uYWw8UHJvdG9jb2w6OlJ1bnRpbWU6OkV4ZWN1dGlvbkNvbnRleHRJ
ZD4mJiBleGVjdXRpb25Db250ZXh0SWQpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVy
cm9yU3RyaW5nOworCiAgICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHQ7CiAKLSAgICBT
dHJpbmcgb2JqZWN0SWQ7Ci0gICAgaWYgKGNhbGxBcmd1bWVudC5nZXRTdHJpbmcoIm9iamVjdElk
Il9zLCBvYmplY3RJZCkpIHsKLSAgICAgICAgaW5qZWN0ZWRTY3JpcHQgPSBtX2luamVjdGVkU2Ny
aXB0TWFuYWdlci5pbmplY3RlZFNjcmlwdEZvck9iamVjdElkKG9iamVjdElkKTsKLSAgICAgICAg
aWYgKGluamVjdGVkU2NyaXB0Lmhhc05vVmFsdWUoKSkgewotICAgICAgICAgICAgZXJyb3JTdHJp
bmcgPSAiTWlzc2luZyBpbmplY3RlZCBzY3JpcHQgZm9yIGdpdmVuIG9iamVjdElkIl9zOwotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaW5qZWN0
ZWRTY3JpcHQgPSBpbmplY3RlZFNjcmlwdEZvckV2YWwoZXJyb3JTdHJpbmcsIGV4ZWN1dGlvbkNv
bnRleHRJZCk7CisgICAgYXV0byBvYmplY3RJZCA9IGNhbGxBcmd1bWVudC0+Z2V0U3RyaW5nKFBy
b3RvY29sOjpSdW50aW1lOjpDYWxsQXJndW1lbnQ6Om9iamVjdElkS2V5KTsKKyAgICBpZiAoIW9i
amVjdElkKSB7CisgICAgICAgIGluamVjdGVkU2NyaXB0ID0gaW5qZWN0ZWRTY3JpcHRGb3JFdmFs
KGVycm9yU3RyaW5nLCBXVEZNb3ZlKGV4ZWN1dGlvbkNvbnRleHRJZCkpOwogICAgICAgICBpZiAo
aW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKQotICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBpbmplY3RlZFNjcmlwdCA9IG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmluamVjdGVk
U2NyaXB0Rm9yT2JqZWN0SWQob2JqZWN0SWQpOworICAgICAgICBpZiAoaW5qZWN0ZWRTY3JpcHQu
aGFzTm9WYWx1ZSgpKQorICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJNaXNzaW5n
IGluamVjdGVkIHNjcmlwdCBmb3IgZ2l2ZW4gb2JqZWN0SWQiX3MpOwogICAgIH0KLSAgICAKLSAg
ICBpbmplY3RlZFNjcmlwdC5zYXZlUmVzdWx0KGVycm9yU3RyaW5nLCBjYWxsQXJndW1lbnQudG9K
U09OU3RyaW5nKCksIHNhdmVkUmVzdWx0SW5kZXgpOworCisgICAgT3B0aW9uYWw8aW50PiBzYXZl
ZFJlc3VsdEluZGV4OworCisgICAgaW5qZWN0ZWRTY3JpcHQuc2F2ZVJlc3VsdChlcnJvclN0cmlu
ZywgY2FsbEFyZ3VtZW50LT50b0pTT05TdHJpbmcoKSwgc2F2ZWRSZXN1bHRJbmRleCk7CisKKyAg
ICBpZiAoIXNhdmVkUmVzdWx0SW5kZXgpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChl
cnJvclN0cmluZyk7CisKKyAgICByZXR1cm4gV1RGTW92ZShzYXZlZFJlc3VsdEluZGV4KTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OnNldFNhdmVkUmVzdWx0QWxpYXMoRXJyb3JT
dHJpbmcmLCBjb25zdCBTdHJpbmcqIGFsaWFzKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9p
ZD4gSW5zcGVjdG9yUnVudGltZUFnZW50OjpzZXRTYXZlZFJlc3VsdEFsaWFzKGNvbnN0IFN0cmlu
ZyYgc2F2ZWRSZXN1bHRBbGlhcykKIHsKLSAgICBPcHRpb25hbDxTdHJpbmc+IHNhdmVkUmVzdWx0
QWxpYXM7Ci0gICAgaWYgKGFsaWFzICYmICFhbGlhcy0+aXNFbXB0eSgpKQotICAgICAgICBzYXZl
ZFJlc3VsdEFsaWFzID0gKmFsaWFzOwogICAgIG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmluamVj
dGVkU2NyaXB0SG9zdCgpLnNldFNhdmVkUmVzdWx0QWxpYXMoc2F2ZWRSZXN1bHRBbGlhcyk7CisK
KyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6cmVsZWFz
ZU9iamVjdChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgb2JqZWN0SWQpCitQcm90b2NvbDo6
RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OnJlbGVhc2VPYmplY3Qo
Y29uc3QgUHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdElkJiBvYmplY3RJZCkKIHsKICAg
ICBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdCA9IG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2Vy
LmluamVjdGVkU2NyaXB0Rm9yT2JqZWN0SWQob2JqZWN0SWQpOwogICAgIGlmICghaW5qZWN0ZWRT
Y3JpcHQuaGFzTm9WYWx1ZSgpKQogICAgICAgICBpbmplY3RlZFNjcmlwdC5yZWxlYXNlT2JqZWN0
KG9iamVjdElkKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yUnVudGlt
ZUFnZW50OjpyZWxlYXNlT2JqZWN0R3JvdXAoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIG9i
amVjdEdyb3VwKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yUnVudGlt
ZUFnZW50OjpyZWxlYXNlT2JqZWN0R3JvdXAoY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCkKIHsK
ICAgICBtX2luamVjdGVkU2NyaXB0TWFuYWdlci5yZWxlYXNlT2JqZWN0R3JvdXAob2JqZWN0R3Jv
dXApOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6
OmdldFJ1bnRpbWVUeXBlc0ZvclZhcmlhYmxlc0F0T2Zmc2V0cyhFcnJvclN0cmluZyYgZXJyb3JT
dHJpbmcsIGNvbnN0IEpTT046OkFycmF5JiBsb2NhdGlvbnMsIFJlZlB0cjxKU09OOjpBcnJheU9m
PFByb3RvY29sOjpSdW50aW1lOjpUeXBlRGVzY3JpcHRpb24+PiYgdHlwZURlc2NyaXB0aW9ucykK
K1Byb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50
aW1lOjpUeXBlRGVzY3JpcHRpb24+Pj4gSW5zcGVjdG9yUnVudGltZUFnZW50OjpnZXRSdW50aW1l
VHlwZXNGb3JWYXJpYWJsZXNBdE9mZnNldHMoUmVmPEpTT046OkFycmF5PiYmIGxvY2F0aW9ucykK
IHsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogCi0gICAgdHlw
ZURlc2NyaXB0aW9ucyA9IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OlR5cGVEZXNj
cmlwdGlvbj46OmNyZWF0ZSgpOwotICAgIGlmICghbV92bS50eXBlUHJvZmlsZXIoKSkgewotICAg
ICAgICBlcnJvclN0cmluZyA9ICJWTSBoYXMgbm8gdHlwZSBpbmZvcm1hdGlvbiJfczsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoIW1fdm0udHlwZVByb2ZpbGVyKCkpCisgICAgICAg
IHJldHVybiBtYWtlVW5leHBlY3RlZCgiVk0gaGFzIG5vIHR5cGUgaW5mb3JtYXRpb24iX3MpOwor
CisgICAgYXV0byB0eXBlcyA9IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OlR5cGVE
ZXNjcmlwdGlvbj46OmNyZWF0ZSgpOwogCiAgICAgTW9ub3RvbmljVGltZSBzdGFydCA9IE1vbm90
b25pY1RpbWU6Om5vdygpOwogICAgIG1fdm0udHlwZVByb2ZpbGVyTG9nKCktPnByb2Nlc3NMb2dF
bnRyaWVzKG1fdm0sICJVc2VyIFF1ZXJ5Il9zKTsKIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbG9jYXRpb25zLmxlbmd0aCgpOyBpKyspIHsKLSAgICAgICAgUmVmUHRyPEpTT046OlZhbHVl
PiB2YWx1ZSA9IGxvY2F0aW9ucy5nZXQoaSk7Ci0gICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+
IGxvY2F0aW9uOwotICAgICAgICBpZiAoIXZhbHVlLT5hc09iamVjdChsb2NhdGlvbikpIHsKLSAg
ICAgICAgICAgIGVycm9yU3RyaW5nID0gIlVuZXhwZWN0ZWQgbm9uLW9iamVjdCBpdGVtIGluIGxv
Y2F0aW9ucyJfczsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQorICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbG9jYXRpb25zLT5sZW5ndGgoKTsgaSsrKSB7CisgICAgICAgIGF1dG8g
bG9jYXRpb24gPSBsb2NhdGlvbnMtPmdldChpKS0+YXNPYmplY3QoKTsKKyAgICAgICAgaWYgKCFs
b2NhdGlvbikKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiVW5leHBlY3RlZCBu
b24tb2JqZWN0IGl0ZW0gaW4gbG9jYXRpb25zIl9zKTsKIAotICAgICAgICBpbnQgZGVzY3JpcHRv
cjsKLSAgICAgICAgU3RyaW5nIHNvdXJjZUlEQXNTdHJpbmc7Ci0gICAgICAgIGludCBkaXZvdDsK
LSAgICAgICAgbG9jYXRpb24tPmdldEludGVnZXIoInR5cGVJbmZvcm1hdGlvbkRlc2NyaXB0b3Ii
X3MsIGRlc2NyaXB0b3IpOwotICAgICAgICBsb2NhdGlvbi0+Z2V0U3RyaW5nKCJzb3VyY2VJRCJf
cywgc291cmNlSURBc1N0cmluZyk7Ci0gICAgICAgIGxvY2F0aW9uLT5nZXRJbnRlZ2VyKCJkaXZv
dCJfcywgZGl2b3QpOworICAgICAgICBhdXRvIGRlc2NyaXB0b3IgPSBsb2NhdGlvbi0+Z2V0SW50
ZWdlcihQcm90b2NvbDo6UnVudGltZTo6VHlwZUxvY2F0aW9uOjp0eXBlSW5mb3JtYXRpb25EZXNj
cmlwdG9yS2V5KS52YWx1ZU9yKFR5cGVQcm9maWxlclNlYXJjaERlc2NyaXB0b3JOb3JtYWwpOwor
ICAgICAgICBhdXRvIHNvdXJjZUlEU3RyaW5nID0gbG9jYXRpb24tPmdldFN0cmluZyhQcm90b2Nv
bDo6UnVudGltZTo6VHlwZUxvY2F0aW9uOjpzb3VyY2VJREtleSk7CisgICAgICAgIGF1dG8gZGl2
b3QgPSBsb2NhdGlvbi0+Z2V0SW50ZWdlcihQcm90b2NvbDo6UnVudGltZTo6VHlwZUxvY2F0aW9u
OjpkaXZvdEtleSkudmFsdWVPcigwKTsKIAogICAgICAgICBib29sIG9rYXk7Ci0gICAgICAgIFR5
cGVMb2NhdGlvbiogdHlwZUxvY2F0aW9uID0gbV92bS50eXBlUHJvZmlsZXIoKS0+ZmluZExvY2F0
aW9uKGRpdm90LCBzb3VyY2VJREFzU3RyaW5nLnRvSW50UHRyU3RyaWN0KCZva2F5KSwgc3RhdGlj
X2Nhc3Q8VHlwZVByb2ZpbGVyU2VhcmNoRGVzY3JpcHRvcj4oZGVzY3JpcHRvciksIG1fdm0pOwor
ICAgICAgICBUeXBlTG9jYXRpb24qIHR5cGVMb2NhdGlvbiA9IG1fdm0udHlwZVByb2ZpbGVyKCkt
PmZpbmRMb2NhdGlvbihkaXZvdCwgc291cmNlSURTdHJpbmcudG9JbnRQdHJTdHJpY3QoJm9rYXkp
LCBzdGF0aWNfY2FzdDxUeXBlUHJvZmlsZXJTZWFyY2hEZXNjcmlwdG9yPihkZXNjcmlwdG9yKSwg
bV92bSk7CiAgICAgICAgIEFTU0VSVChva2F5KTsKIAogICAgICAgICBSZWZQdHI8VHlwZVNldD4g
dHlwZVNldDsKQEAgLTM3MiwxMiArNDE5LDE0IEBAIHZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50
OjpnZXRSdW50aW1lVHlwZXNGb3JWYXJpYWJsZXNBdE9mZnNldHMoRXJyb3JTdHJpbmcmIGVyCiAg
ICAgICAgICAgICBkZXNjcmlwdGlvbi0+c2V0SXNUcnVuY2F0ZWQodHlwZVNldC0+aXNPdmVyZmxv
d24oKSk7CiAgICAgICAgIH0KIAotICAgICAgICB0eXBlRGVzY3JpcHRpb25zLT5hZGRJdGVtKFdU
Rk1vdmUoZGVzY3JpcHRpb24pKTsKKyAgICAgICAgdHlwZXMtPmFkZEl0ZW0oV1RGTW92ZShkZXNj
cmlwdGlvbikpOwogICAgIH0KIAogICAgIE1vbm90b25pY1RpbWUgZW5kID0gTW9ub3RvbmljVGlt
ZTo6bm93KCk7CiAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgIGRhdGFMb2dGKCJJbnNwZWN0b3I6
OmdldFJ1bnRpbWVUeXBlc0ZvclZhcmlhYmxlc0F0T2Zmc2V0cyB0b29rICVsZm1zXG4iLCAoZW5k
IC0gc3RhcnQpLm1pbGxpc2Vjb25kcygpKTsKKworICAgIHJldHVybiBXVEZNb3ZlKHR5cGVzKTsK
IH0KIAogdm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmRpZENyZWF0ZUZyb250ZW5kQW5kQmFj
a2VuZChJbnNwZWN0b3I6OkZyb250ZW5kUm91dGVyKiwgSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0
Y2hlciopCkBAIC0zODksMjggKzQzOCwzNSBAQCB2b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6
d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoRGlzY29ubmVjdFJlYXNvbiByZWFzbwogICAg
IGlmIChyZWFzb24gIT0gRGlzY29ubmVjdFJlYXNvbjo6SW5zcGVjdGVkVGFyZ2V0RGVzdHJveWVk
ICYmIG1faXNUeXBlUHJvZmlsaW5nRW5hYmxlZCkKICAgICAgICAgc2V0VHlwZVByb2ZpbGVyRW5h
YmxlZFN0YXRlKGZhbHNlKTsKIAotICAgIFN0cmluZyB1bnVzZWQ7Ci0gICAgZGlzYWJsZSh1bnVz
ZWQpOworICAgIGRpc2FibGUoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmVu
YWJsZVR5cGVQcm9maWxlcihFcnJvclN0cmluZyYpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2
b2lkPiBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmVuYWJsZVR5cGVQcm9maWxlcigpCiB7CiAgICAg
c2V0VHlwZVByb2ZpbGVyRW5hYmxlZFN0YXRlKHRydWUpOworCisgICAgcmV0dXJuIHsgfTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmRpc2FibGVUeXBlUHJvZmlsZXIoRXJyb3JT
dHJpbmcmKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yUnVudGltZUFn
ZW50OjpkaXNhYmxlVHlwZVByb2ZpbGVyKCkKIHsKICAgICBzZXRUeXBlUHJvZmlsZXJFbmFibGVk
U3RhdGUoZmFsc2UpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSdW50
aW1lQWdlbnQ6OmVuYWJsZUNvbnRyb2xGbG93UHJvZmlsZXIoRXJyb3JTdHJpbmcmKQorUHJvdG9j
b2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yUnVudGltZUFnZW50OjplbmFibGVDb250
cm9sRmxvd1Byb2ZpbGVyKCkKIHsKICAgICBzZXRDb250cm9sRmxvd1Byb2ZpbGVyRW5hYmxlZFN0
YXRlKHRydWUpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSdW50aW1l
QWdlbnQ6OmRpc2FibGVDb250cm9sRmxvd1Byb2ZpbGVyKEVycm9yU3RyaW5nJikKK1Byb3RvY29s
OjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6ZGlzYWJsZUNvbnRy
b2xGbG93UHJvZmlsZXIoKQogewogICAgIHNldENvbnRyb2xGbG93UHJvZmlsZXJFbmFibGVkU3Rh
dGUoZmFsc2UpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAogdm9pZCBJbnNwZWN0b3JSdW50aW1l
QWdlbnQ6OnNldFR5cGVQcm9maWxlckVuYWJsZWRTdGF0ZShib29sIGlzVHlwZVByb2ZpbGluZ0Vu
YWJsZWQpCkBAIC00NDIsMTkgKzQ5OCwxMyBAQCB2b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6
c2V0Q29udHJvbEZsb3dQcm9maWxlckVuYWJsZWRTdGF0ZShib29sIGlzQ29udHJvbEZsbwogICAg
IH0pOwogfQogCi12b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6Z2V0QmFzaWNCbG9ja3MoRXJy
b3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHNvdXJjZUlEQXNTdHJpbmcsIFJl
ZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpCYXNpY0Jsb2NrPj4mIGJhc2lj
QmxvY2tzKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEpTT046OkFycmF5T2Y8UHJvdG9j
b2w6OlJ1bnRpbWU6OkJhc2ljQmxvY2s+Pj4gSW5zcGVjdG9yUnVudGltZUFnZW50OjpnZXRCYXNp
Y0Jsb2Nrcyhjb25zdCBTdHJpbmcmIHNvdXJjZUlEKQogewotICAgIGlmICghbV92bS5jb250cm9s
Rmxvd1Byb2ZpbGVyKCkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiVk0gaGFzIG5vIGNvbnRy
b2wgZmxvdyBpbmZvcm1hdGlvbiJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAo
IW1fdm0uY29udHJvbEZsb3dQcm9maWxlcigpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0
ZWQoIlZNIGhhcyBubyBjb250cm9sIGZsb3cgaW5mb3JtYXRpb24iX3MpOwogCi0gICAgYm9vbCBv
a2F5OwotICAgIGludHB0cl90IHNvdXJjZUlEID0gc291cmNlSURBc1N0cmluZy50b0ludFB0clN0
cmljdCgmb2theSk7Ci0gICAgQVNTRVJUKG9rYXkpOwotICAgIGNvbnN0IFZlY3RvcjxCYXNpY0Js
b2NrUmFuZ2U+JiBiYXNpY0Jsb2NrUmFuZ2VzID0gbV92bS5jb250cm9sRmxvd1Byb2ZpbGVyKCkt
PmdldEJhc2ljQmxvY2tzRm9yU291cmNlSUQoc291cmNlSUQsIG1fdm0pOwotICAgIGJhc2ljQmxv
Y2tzID0gSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UnVudGltZTo6QmFzaWNCbG9jaz46OmNyZWF0
ZSgpOwotICAgIGZvciAoY29uc3QgQmFzaWNCbG9ja1JhbmdlJiBibG9jayA6IGJhc2ljQmxvY2tS
YW5nZXMpIHsKKyAgICBhdXRvIGJhc2ljQmxvY2tzID0gSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6
UnVudGltZTo6QmFzaWNCbG9jaz46OmNyZWF0ZSgpOworICAgIGZvciAoY29uc3QgYXV0byYgYmxv
Y2sgOiBtX3ZtLmNvbnRyb2xGbG93UHJvZmlsZXIoKS0+Z2V0QmFzaWNCbG9ja3NGb3JTb3VyY2VJ
RChzb3VyY2VJRC50b0ludFB0cigpLCBtX3ZtKSkgewogICAgICAgICBhdXRvIGxvY2F0aW9uID0g
UHJvdG9jb2w6OlJ1bnRpbWU6OkJhc2ljQmxvY2s6OmNyZWF0ZSgpCiAgICAgICAgICAgICAuc2V0
U3RhcnRPZmZzZXQoYmxvY2subV9zdGFydE9mZnNldCkKICAgICAgICAgICAgIC5zZXRFbmRPZmZz
ZXQoYmxvY2subV9lbmRPZmZzZXQpCkBAIC00NjMsNiArNTEzLDcgQEAgdm9pZCBJbnNwZWN0b3JS
dW50aW1lQWdlbnQ6OmdldEJhc2ljQmxvY2tzKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29u
c3QgU3RyaW4KICAgICAgICAgICAgIC5yZWxlYXNlKCk7CiAgICAgICAgIGJhc2ljQmxvY2tzLT5h
ZGRJdGVtKFdURk1vdmUobG9jYXRpb24pKTsKICAgICB9CisgICAgcmV0dXJuIFdURk1vdmUoYmFz
aWNCbG9ja3MpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclJ1bnRpbWVBZ2Vu
dC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUnVu
dGltZUFnZW50LmgKaW5kZXggMTc1NjE1MTFhZjk3OWIzYjJiNzkxYzc0ZGQ3MjdkNGFlMzEyNGVj
ZS4uZjQwMjk0NmZmNmRhYTg4YzQ4NWQwOTdhYWM2MWMxZDllYmZjMDlhYSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUnVudGltZUFn
ZW50LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVj
dG9yUnVudGltZUFnZW50LmgKQEAgLTQ1LDcgKzQ1LDYgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7
CiAKIGNsYXNzIEluamVjdGVkU2NyaXB0OwogY2xhc3MgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOwot
dHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiAKIGNsYXNzIEpTX0VYUE9SVF9QUklWQVRFIElu
c3BlY3RvclJ1bnRpbWVBZ2VudCA6IHB1YmxpYyBJbnNwZWN0b3JBZ2VudEJhc2UsIHB1YmxpYyBS
dW50aW1lQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShJbnNwZWN0b3JSdW50aW1lQWdlbnQpOwpAQCAtNTgsMzMgKzU3LDMzIEBAIHB1YmxpYzoKICAg
ICB2b2lkIHdpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKERpc2Nvbm5lY3RSZWFzb24pIGZp
bmFsOwogCiAgICAgLy8gUnVudGltZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcgotICAgIHZvaWQg
ZW5hYmxlKEVycm9yU3RyaW5nJikgb3ZlcnJpZGUgeyBtX2VuYWJsZWQgPSB0cnVlOyB9Ci0gICAg
dm9pZCBkaXNhYmxlKEVycm9yU3RyaW5nJikgb3ZlcnJpZGUgeyBtX2VuYWJsZWQgPSBmYWxzZTsg
fQotICAgIHZvaWQgcGFyc2UoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24s
IFByb3RvY29sOjpSdW50aW1lOjpTeW50YXhFcnJvclR5cGUqIHJlc3VsdCwgT3B0aW9uYWw8U3Ry
aW5nPiYgbWVzc2FnZSwgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpFcnJvclJhbmdlPiYpIGZp
bmFsOwotICAgIHZvaWQgZXZhbHVhdGUoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGV4cHJl
c3Npb24sIGNvbnN0IFN0cmluZyogb2JqZWN0R3JvdXAsIGNvbnN0IGJvb2wqIGluY2x1ZGVDb21t
YW5kTGluZUFQSSwgY29uc3QgYm9vbCogZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25z
b2xlLCBjb25zdCBpbnQqIGV4ZWN1dGlvbkNvbnRleHRJZCwgY29uc3QgYm9vbCogcmV0dXJuQnlW
YWx1ZSwgY29uc3QgYm9vbCogZ2VuZXJhdGVQcmV2aWV3LCBjb25zdCBib29sKiBzYXZlUmVzdWx0
LCBjb25zdCBib29sKiBlbXVsYXRlVXNlckdlc3R1cmUsIFJlZlB0cjxQcm90b2NvbDo6UnVudGlt
ZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0LCBPcHRpb25hbDxib29sPiYgd2FzVGhyb3duLCBPcHRp
b25hbDxpbnQ+JiBzYXZlZFJlc3VsdEluZGV4KSBvdmVycmlkZTsKLSAgICB2b2lkIGF3YWl0UHJv
bWlzZShjb25zdCBTdHJpbmcmIHByb21pc2VPYmplY3RJZCwgY29uc3QgYm9vbCogcmV0dXJuQnlW
YWx1ZSwgY29uc3QgYm9vbCogZ2VuZXJhdGVQcmV2aWV3LCBjb25zdCBib29sKiBzYXZlUmVzdWx0
LCBSZWY8QXdhaXRQcm9taXNlQ2FsbGJhY2s+JiYpIGZpbmFsOwotICAgIHZvaWQgY2FsbEZ1bmN0
aW9uT24oRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBjb25zdCBTdHJpbmcm
IGV4cHJlc3Npb24sIGNvbnN0IEpTT046OkFycmF5KiBvcHRpb25hbEFyZ3VtZW50cywgY29uc3Qg
Ym9vbCogZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xlLCBjb25zdCBib29sKiBy
ZXR1cm5CeVZhbHVlLCBjb25zdCBib29sKiBnZW5lcmF0ZVByZXZpZXcsIGNvbnN0IGJvb2wqIGVt
dWxhdGVVc2VyR2VzdHVyZSwgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+
JiByZXN1bHQsIE9wdGlvbmFsPGJvb2w+JiB3YXNUaHJvd24pIG92ZXJyaWRlOwotICAgIHZvaWQg
cmVsZWFzZU9iamVjdChFcnJvclN0cmluZyYsIGNvbnN0IEVycm9yU3RyaW5nJiBvYmplY3RJZCkg
ZmluYWw7Ci0gICAgdm9pZCBnZXRQcmV2aWV3KEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBv
YmplY3RJZCwgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpPYmplY3RQcmV2aWV3PiYpIGZpbmFs
OwotICAgIHZvaWQgZ2V0UHJvcGVydGllcyhFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgb2Jq
ZWN0SWQsIGNvbnN0IGJvb2wqIG93blByb3BlcnRpZXMsIGNvbnN0IGludCogZmV0Y2hTdGFydCwg
Y29uc3QgaW50KiBmZXRjaENvdW50LCBjb25zdCBib29sKiBnZW5lcmF0ZVByZXZpZXcsIFJlZlB0
cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpQcm9wZXJ0eURlc2NyaXB0b3I+PiYg
cHJvcGVydGllcywgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OkludGVy
bmFsUHJvcGVydHlEZXNjcmlwdG9yPj4mIGludGVybmFsUHJvcGVydGllcykgZmluYWw7Ci0gICAg
dm9pZCBnZXREaXNwbGF5YWJsZVByb3BlcnRpZXMoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcm
IG9iamVjdElkLCBjb25zdCBpbnQqIGZldGNoU3RhcnQsIGNvbnN0IGludCogZmV0Y2hDb3VudCwg
Y29uc3QgYm9vbCogZ2VuZXJhdGVQcmV2aWV3LCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90b2Nv
bDo6UnVudGltZTo6UHJvcGVydHlEZXNjcmlwdG9yPj4mIHByb3BlcnRpZXMsIFJlZlB0cjxKU09O
OjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpJbnRlcm5hbFByb3BlcnR5RGVzY3JpcHRvcj4+
JiBpbnRlcm5hbFByb3BlcnRpZXMpIGZpbmFsOwotICAgIHZvaWQgZ2V0Q29sbGVjdGlvbkVudHJp
ZXMoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBjb25zdCBTdHJpbmcqIG9i
amVjdEdyb3VwLCBjb25zdCBpbnQqIGZldGNoU3RhcnQsIGNvbnN0IGludCogZmV0Y2hDb3VudCwg
UmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OkNvbGxlY3Rpb25FbnRyeT4+
JiBlbnRyaWVzKSBmaW5hbDsKLSAgICB2b2lkIHNhdmVSZXN1bHQoRXJyb3JTdHJpbmcmLCBjb25z
dCBKU09OOjpPYmplY3QmIGNhbGxBcmd1bWVudCwgY29uc3QgaW50KiBleGVjdXRpb25Db250ZXh0
SWQsIE9wdGlvbmFsPGludD4mIHNhdmVkUmVzdWx0SW5kZXgpIGZpbmFsOwotICAgIHZvaWQgc2V0
U2F2ZWRSZXN1bHRBbGlhcyhFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyogYWxpYXMpIGZpbmFs
OwotICAgIHZvaWQgcmVsZWFzZU9iamVjdEdyb3VwKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5n
JiBvYmplY3RHcm91cCkgZmluYWw7Ci0gICAgdm9pZCBnZXRSdW50aW1lVHlwZXNGb3JWYXJpYWJs
ZXNBdE9mZnNldHMoRXJyb3JTdHJpbmcmLCBjb25zdCBKU09OOjpBcnJheSYgbG9jYXRpb25zLCBS
ZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UnVudGltZTo6VHlwZURlc2NyaXB0aW9uPj4m
KSBmaW5hbDsKLSAgICB2b2lkIGVuYWJsZVR5cGVQcm9maWxlcihFcnJvclN0cmluZyYpIGZpbmFs
OwotICAgIHZvaWQgZGlzYWJsZVR5cGVQcm9maWxlcihFcnJvclN0cmluZyYpIGZpbmFsOwotICAg
IHZvaWQgZW5hYmxlQ29udHJvbEZsb3dQcm9maWxlcihFcnJvclN0cmluZyYpIGZpbmFsOwotICAg
IHZvaWQgZGlzYWJsZUNvbnRyb2xGbG93UHJvZmlsZXIoRXJyb3JTdHJpbmcmKSBmaW5hbDsKLSAg
ICB2b2lkIGdldEJhc2ljQmxvY2tzKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBpbl9zb3Vy
Y2VJRCwgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OkJhc2ljQmxvY2s+
PiYgb3V0X2Jhc2ljQmxvY2tzKSBmaW5hbDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2
b2lkPiBlbmFibGUoKSBvdmVycmlkZTsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lk
PiBkaXNhYmxlKCkgb3ZlcnJpZGU7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8c3RkOjp0
dXBsZTxQcm90b2NvbDo6UnVudGltZTo6U3ludGF4RXJyb3JUeXBlLCBTdHJpbmcgLyogbWVzc2Fn
ZSAqLywgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpFcnJvclJhbmdlPj4+IHBhcnNlKGNvbnN0
IFN0cmluZyYgZXhwcmVzc2lvbikgZmluYWw7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8
c3RkOjp0dXBsZTxSZWY8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4sIE9wdGlvbmFs
PGJvb2w+IC8qIHdhc1Rocm93biAqLywgT3B0aW9uYWw8aW50PiAvKiBzYXZlZFJlc3VsdEluZGV4
ICovPj4gZXZhbHVhdGUoY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBjb25zdCBTdHJpbmcmIG9i
amVjdEdyb3VwLCBPcHRpb25hbDxib29sPiYmIGluY2x1ZGVDb21tYW5kTGluZUFQSSwgT3B0aW9u
YWw8Ym9vbD4mJiBkb05vdFBhdXNlT25FeGNlcHRpb25zQW5kTXV0ZUNvbnNvbGUsIE9wdGlvbmFs
PFByb3RvY29sOjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0SWQ+JiYsIE9wdGlvbmFsPGJvb2w+
JiYgcmV0dXJuQnlWYWx1ZSwgT3B0aW9uYWw8Ym9vbD4mJiBnZW5lcmF0ZVByZXZpZXcsIE9wdGlv
bmFsPGJvb2w+JiYgc2F2ZVJlc3VsdCwgT3B0aW9uYWw8Ym9vbD4mJiBlbXVsYXRlVXNlckdlc3R1
cmUpIG92ZXJyaWRlOworICAgIHZvaWQgYXdhaXRQcm9taXNlKGNvbnN0IFByb3RvY29sOjpSdW50
aW1lOjpSZW1vdGVPYmplY3RJZCYsIE9wdGlvbmFsPGJvb2w+JiYgcmV0dXJuQnlWYWx1ZSwgT3B0
aW9uYWw8Ym9vbD4mJiBnZW5lcmF0ZVByZXZpZXcsIE9wdGlvbmFsPGJvb2w+JiYgc2F2ZVJlc3Vs
dCwgUmVmPEF3YWl0UHJvbWlzZUNhbGxiYWNrPiYmKSBmaW5hbDsKKyAgICBQcm90b2NvbDo6RXJy
b3JTdHJpbmdPcjxzdGQ6OnR1cGxlPFJlZjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0
PiwgT3B0aW9uYWw8Ym9vbD4gLyogd2FzVGhyb3duICovPj4gY2FsbEZ1bmN0aW9uT24oY29uc3Qg
UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdElkJiwgY29uc3QgU3RyaW5nJiBmdW5jdGlv
bkRlY2xhcmF0aW9uLCBSZWZQdHI8SlNPTjo6QXJyYXk+JiYgYXJndW1lbnRzLCBPcHRpb25hbDxi
b29sPiYmIGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29sZSwgT3B0aW9uYWw8Ym9v
bD4mJiByZXR1cm5CeVZhbHVlLCBPcHRpb25hbDxib29sPiYmIGdlbmVyYXRlUHJldmlldywgT3B0
aW9uYWw8Ym9vbD4mJiBlbXVsYXRlVXNlckdlc3R1cmUpIG92ZXJyaWRlOworICAgIFByb3RvY29s
OjpFcnJvclN0cmluZ09yPHZvaWQ+IHJlbGVhc2VPYmplY3QoY29uc3QgUHJvdG9jb2w6OlJ1bnRp
bWU6OlJlbW90ZU9iamVjdElkJikgZmluYWw7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8
UmVmPFByb3RvY29sOjpSdW50aW1lOjpPYmplY3RQcmV2aWV3Pj4gZ2V0UHJldmlldyhjb25zdCBQ
cm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0SWQmKSBmaW5hbDsKKyAgICBQcm90b2NvbDo6
RXJyb3JTdHJpbmdPcjxzdGQ6OnR1cGxlPFJlZjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50
aW1lOjpQcm9wZXJ0eURlc2NyaXB0b3I+PiwgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6
OlJ1bnRpbWU6OkludGVybmFsUHJvcGVydHlEZXNjcmlwdG9yPj4+PiBnZXRQcm9wZXJ0aWVzKGNv
bnN0IFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3RJZCYsIE9wdGlvbmFsPGJvb2w+JiYg
b3duUHJvcGVydGllcywgT3B0aW9uYWw8aW50PiYmIGZldGNoU3RhcnQsIE9wdGlvbmFsPGludD4m
JiBmZXRjaENvdW50LCBPcHRpb25hbDxib29sPiYmIGdlbmVyYXRlUHJldmlldykgZmluYWw7Cisg
ICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8c3RkOjp0dXBsZTxSZWY8SlNPTjo6QXJyYXlPZjxQ
cm90b2NvbDo6UnVudGltZTo6UHJvcGVydHlEZXNjcmlwdG9yPj4sIFJlZlB0cjxKU09OOjpBcnJh
eU9mPFByb3RvY29sOjpSdW50aW1lOjpJbnRlcm5hbFByb3BlcnR5RGVzY3JpcHRvcj4+Pj4gZ2V0
RGlzcGxheWFibGVQcm9wZXJ0aWVzKGNvbnN0IFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmpl
Y3RJZCYsIE9wdGlvbmFsPGludD4mJiBmZXRjaFN0YXJ0LCBPcHRpb25hbDxpbnQ+JiYgZmV0Y2hD
b3VudCwgT3B0aW9uYWw8Ym9vbD4mJiBnZW5lcmF0ZVByZXZpZXcpIGZpbmFsOworICAgIFByb3Rv
Y29sOjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpD
b2xsZWN0aW9uRW50cnk+Pj4gZ2V0Q29sbGVjdGlvbkVudHJpZXMoY29uc3QgUHJvdG9jb2w6OlJ1
bnRpbWU6OlJlbW90ZU9iamVjdElkJiwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCwgT3B0aW9u
YWw8aW50PiYmIGZldGNoU3RhcnQsIE9wdGlvbmFsPGludD4mJiBmZXRjaENvdW50KSBmaW5hbDsK
KyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxPcHRpb25hbDxpbnQ+IC8qIHNhdmVSZXN1bHRJ
bmRleCAqLz4gc2F2ZVJlc3VsdChSZWY8SlNPTjo6T2JqZWN0PiYmIGNhbGxBcmd1bWVudCwgT3B0
aW9uYWw8UHJvdG9jb2w6OlJ1bnRpbWU6OkV4ZWN1dGlvbkNvbnRleHRJZD4mJikgZmluYWw7Cisg
ICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc2V0U2F2ZWRSZXN1bHRBbGlhcyhjb25z
dCBTdHJpbmcmKSBmaW5hbDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiByZWxl
YXNlT2JqZWN0R3JvdXAoY29uc3QgU3RyaW5nJikgZmluYWw7CisgICAgUHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8UmVmPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OlR5cGVEZXNjcmlw
dGlvbj4+PiBnZXRSdW50aW1lVHlwZXNGb3JWYXJpYWJsZXNBdE9mZnNldHMoUmVmPEpTT046OkFy
cmF5PiYmIGxvY2F0aW9ucykgZmluYWw7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9p
ZD4gZW5hYmxlVHlwZVByb2ZpbGVyKCkgZmluYWw7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5n
T3I8dm9pZD4gZGlzYWJsZVR5cGVQcm9maWxlcigpIGZpbmFsOworICAgIFByb3RvY29sOjpFcnJv
clN0cmluZ09yPHZvaWQ+IGVuYWJsZUNvbnRyb2xGbG93UHJvZmlsZXIoKSBmaW5hbDsKKyAgICBQ
cm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBkaXNhYmxlQ29udHJvbEZsb3dQcm9maWxlcigp
IGZpbmFsOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPFBy
b3RvY29sOjpSdW50aW1lOjpCYXNpY0Jsb2NrPj4+IGdldEJhc2ljQmxvY2tzKGNvbnN0IFN0cmlu
ZyYgc291cmNlSUQpIGZpbmFsOwogCiBwcm90ZWN0ZWQ6CiAgICAgSW5zcGVjdG9yUnVudGltZUFn
ZW50KEFnZW50Q29udGV4dCYpOwogCiAgICAgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyJiBpbmplY3Rl
ZFNjcmlwdE1hbmFnZXIoKSB7IHJldHVybiBtX2luamVjdGVkU2NyaXB0TWFuYWdlcjsgfQogCi0g
ICAgdmlydHVhbCBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdEZvckV2YWwoRXJyb3JTdHJp
bmcmLCBjb25zdCBpbnQqIGV4ZWN1dGlvbkNvbnRleHRJZCkgPSAwOworICAgIHZpcnR1YWwgSW5q
ZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHRGb3JFdmFsKFByb3RvY29sOjpFcnJvclN0cmluZyYs
IE9wdGlvbmFsPFByb3RvY29sOjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0SWQ+JiYpID0gMDsK
IAogICAgIHZpcnR1YWwgdm9pZCBtdXRlQ29uc29sZSgpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQg
dW5tdXRlQ29uc29sZSgpID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclNjcmlwdFByb2ZpbGVyQWdlbnQuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yU2NyaXB0UHJvZmlsZXJB
Z2VudC5jcHAKaW5kZXggNjgxM2UwNzVhOTRiMzYzMWZiNTJlYWRkOWNlNzk5YjljN2RjZDhkZS4u
N2ViNTFhZjMwZmRhODAyY2E4MWE4YjEwZWNkN2U2ZWJlZTIyMTE3YyAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yU2NyaXB0UHJvZmls
ZXJBZ2VudC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9yU2NyaXB0UHJvZmlsZXJBZ2VudC5jcHAKQEAgLTY0LDEwICs2NCwxMCBAQCB2b2lk
IEluc3BlY3RvclNjcmlwdFByb2ZpbGVyQWdlbnQ6OndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNr
ZW5kKERpc2Nvbm5lY3RSZWFzbwogICAgIH0KIH0KIAotdm9pZCBJbnNwZWN0b3JTY3JpcHRQcm9m
aWxlckFnZW50OjpzdGFydFRyYWNraW5nKEVycm9yU3RyaW5nJiwgY29uc3QgYm9vbCogaW5jbHVk
ZVNhbXBsZXMpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JTY3JpcHRQ
cm9maWxlckFnZW50OjpzdGFydFRyYWNraW5nKE9wdGlvbmFsPGJvb2w+JiYgaW5jbHVkZVNhbXBs
ZXMpCiB7CiAgICAgaWYgKG1fdHJhY2tpbmcpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0
dXJuIHsgfTsKIAogICAgIG1fdHJhY2tpbmcgPSB0cnVlOwogCkBAIC05MSwxMiArOTEsMTQgQEAg
dm9pZCBJbnNwZWN0b3JTY3JpcHRQcm9maWxlckFnZW50OjpzdGFydFRyYWNraW5nKEVycm9yU3Ry
aW5nJiwgY29uc3QgYm9vbCogaW5jbHUKICAgICBtX2Vudmlyb25tZW50LmRlYnVnZ2VyKCkuc2V0
UHJvZmlsaW5nQ2xpZW50KHRoaXMpOwogCiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPnRyYWNr
aW5nU3RhcnQoc3RvcHdhdGNoLmVsYXBzZWRUaW1lKCkuc2Vjb25kcygpKTsKKworICAgIHJldHVy
biB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yU2NyaXB0UHJvZmlsZXJBZ2VudDo6c3RvcFRyYWNr
aW5nKEVycm9yU3RyaW5nJikKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3Rv
clNjcmlwdFByb2ZpbGVyQWdlbnQ6OnN0b3BUcmFja2luZygpCiB7CiAgICAgaWYgKCFtX3RyYWNr
aW5nKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB7IH07CiAKICAgICBtX3RyYWNr
aW5nID0gZmFsc2U7CiAgICAgbV9hY3RpdmVFdmFsdWF0ZVNjcmlwdCA9IGZhbHNlOwpAQCAtMTA0
LDYgKzEwNiw4IEBAIHZvaWQgSW5zcGVjdG9yU2NyaXB0UHJvZmlsZXJBZ2VudDo6c3RvcFRyYWNr
aW5nKEVycm9yU3RyaW5nJikKICAgICBtX2Vudmlyb25tZW50LmRlYnVnZ2VyKCkuc2V0UHJvZmls
aW5nQ2xpZW50KG51bGxwdHIpOwogCiAgICAgdHJhY2tpbmdDb21wbGV0ZSgpOworCisgICAgcmV0
dXJuIHsgfTsKIH0KIAogYm9vbCBJbnNwZWN0b3JTY3JpcHRQcm9maWxlckFnZW50Ojppc0FscmVh
ZHlQcm9maWxpbmcoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yU2NyaXB0UHJvZmlsZXJBZ2VudC5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yU2NyaXB0UHJvZmlsZXJBZ2Vu
dC5oCmluZGV4IDdlN2NkYzlmOTc1MDY3NzY2Mjk3NDBhYWRjYjU0ZmI0ZGEwMGQwOGYuLjI4ZjU0
ODhkMGFmYzA2M2IyOWRkMGZmN2NkZDUwZTVkNTBhNjQ3ODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclNjcmlwdFByb2ZpbGVyQWdl
bnQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0
b3JTY3JpcHRQcm9maWxlckFnZW50LmgKQEAgLTM3LDI3ICszNywyNSBAQCBjbGFzcyBQcm9maWxl
OwogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7
Ci0KIGNsYXNzIEpTX0VYUE9SVF9QUklWQVRFIEluc3BlY3RvclNjcmlwdFByb2ZpbGVyQWdlbnQg
ZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yQWdlbnRCYXNlLCBwdWJsaWMgU2NyaXB0UHJvZmlsZXJC
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIsIHB1YmxpYyBKU0M6OkRlYnVnZ2VyOjpQcm9maWxpbmdD
bGllbnQgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEluc3BlY3RvclNjcmlwdFByb2ZpbGVy
QWdlbnQpOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIEluc3Bl
Y3RvclNjcmlwdFByb2ZpbGVyQWdlbnQoQWdlbnRDb250ZXh0Jik7Ci0gICAgfkluc3BlY3RvclNj
cmlwdFByb2ZpbGVyQWdlbnQoKSBmaW5hbDsKKyAgICB+SW5zcGVjdG9yU2NyaXB0UHJvZmlsZXJB
Z2VudCgpOwogCiAgICAgLy8gSW5zcGVjdG9yQWdlbnRCYXNlCi0gICAgdm9pZCBkaWRDcmVhdGVG
cm9udGVuZEFuZEJhY2tlbmQoRnJvbnRlbmRSb3V0ZXIqLCBCYWNrZW5kRGlzcGF0Y2hlciopIGZp
bmFsOwotICAgIHZvaWQgd2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoRGlzY29ubmVjdFJl
YXNvbikgZmluYWw7CisgICAgdm9pZCBkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoRnJvbnRl
bmRSb3V0ZXIqLCBCYWNrZW5kRGlzcGF0Y2hlciopOworICAgIHZvaWQgd2lsbERlc3Ryb3lGcm9u
dGVuZEFuZEJhY2tlbmQoRGlzY29ubmVjdFJlYXNvbik7CiAKICAgICAvLyBTY3JpcHRQcm9maWxl
ckJhY2tlbmREaXNwYXRjaGVySGFuZGxlcgotICAgIHZvaWQgc3RhcnRUcmFja2luZyhFcnJvclN0
cmluZyYsIGNvbnN0IGJvb2wqIGluY2x1ZGVTYW1wbGVzKSBmaW5hbDsKLSAgICB2b2lkIHN0b3BU
cmFja2luZyhFcnJvclN0cmluZyYpIGZpbmFsOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09y
PHZvaWQ+IHN0YXJ0VHJhY2tpbmcoT3B0aW9uYWw8Ym9vbD4mJiBpbmNsdWRlU2FtcGxlcyk7Cisg
ICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc3RvcFRyYWNraW5nKCk7CiAKICAgICAv
LyBKU0M6OkRlYnVnZ2VyOjpQcm9maWxpbmdDbGllbnQKLSAgICBib29sIGlzQWxyZWFkeVByb2Zp
bGluZygpIGNvbnN0IGZpbmFsOwotICAgIFNlY29uZHMgd2lsbEV2YWx1YXRlU2NyaXB0KCkgZmlu
YWw7Ci0gICAgdm9pZCBkaWRFdmFsdWF0ZVNjcmlwdChTZWNvbmRzLCBKU0M6OlByb2ZpbGluZ1Jl
YXNvbikgZmluYWw7CisgICAgYm9vbCBpc0FscmVhZHlQcm9maWxpbmcoKSBjb25zdDsKKyAgICBT
ZWNvbmRzIHdpbGxFdmFsdWF0ZVNjcmlwdCgpOworICAgIHZvaWQgZGlkRXZhbHVhdGVTY3JpcHQo
U2Vjb25kcywgSlNDOjpQcm9maWxpbmdSZWFzb24pOwogCiBwcml2YXRlOgogICAgIHZvaWQgYWRk
RXZlbnQoU2Vjb25kcyBzdGFydFRpbWUsIFNlY29uZHMgZW5kVGltZSwgSlNDOjpQcm9maWxpbmdS
ZWFzb24pOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2Vu
dHMvSW5zcGVjdG9yVGFyZ2V0QWdlbnQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9hZ2VudHMvSW5zcGVjdG9yVGFyZ2V0QWdlbnQuY3BwCmluZGV4IDhmY2I1YTFlNTU3NTBk
MzI1YTg0ODI0ZDg2YzQ5Y2ZlNmZiMDQyNjguLjUwOGViMDJlYzk1YzUyNDA4Mzg0YTFlMmI3NzY0
OGFmZDQyNmRkOWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
YWdlbnRzL0luc3BlY3RvclRhcmdldEFnZW50LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JUYXJnZXRBZ2VudC5jcHAKQEAgLTU1LDM2ICs1
NSwzNiBAQCB2b2lkIEluc3BlY3RvclRhcmdldEFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5k
QmFja2VuZChEaXNjb25uZWN0UmVhc29uKQogICAgIG1fc2hvdWxkUGF1c2VPblN0YXJ0ID0gZmFs
c2U7CiB9CiAKLXZvaWQgSW5zcGVjdG9yVGFyZ2V0QWdlbnQ6OnNldFBhdXNlT25TdGFydChFcnJv
clN0cmluZyYsIGJvb2wgcGF1c2VPblN0YXJ0KQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9p
ZD4gSW5zcGVjdG9yVGFyZ2V0QWdlbnQ6OnNldFBhdXNlT25TdGFydChib29sIHBhdXNlT25TdGFy
dCkKIHsKICAgICBtX3Nob3VsZFBhdXNlT25TdGFydCA9IHBhdXNlT25TdGFydDsKKworICAgIHJl
dHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yVGFyZ2V0QWdlbnQ6OnJlc3VtZShFcnJvclN0
cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQpCitQcm90b2NvbDo6RXJy
b3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JUYXJnZXRBZ2VudDo6cmVzdW1lKGNvbnN0IFN0cmlu
ZyYgdGFyZ2V0SWQpCiB7CiAgICAgYXV0byogdGFyZ2V0ID0gbV90YXJnZXRzLmdldCh0YXJnZXRJ
ZCk7Ci0gICAgaWYgKCF0YXJnZXQpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWlzc2luZyB0
YXJnZXQgZm9yIGdpdmVuIHRhcmdldElkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAg
IGlmICghdGFyZ2V0KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk1pc3NpbmcgdGFy
Z2V0IGZvciBnaXZlbiB0YXJnZXRJZCJfcyk7CiAKLSAgICBpZiAoIXRhcmdldC0+aXNQYXVzZWQo
KSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJUYXJnZXQgZm9yIGdpdmVuIHRhcmdldElkIGlz
IG5vdCBwYXVzZWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKCF0YXJnZXQt
PmlzUGF1c2VkKCkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiVGFyZ2V0IGZvciBn
aXZlbiB0YXJnZXRJZCBpcyBub3QgcGF1c2VkIl9zKTsKIAogICAgIHRhcmdldC0+cmVzdW1lKCk7
CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvclRhcmdldEFnZW50OjpzZW5k
TWVzc2FnZVRvVGFyZ2V0KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiB0
YXJnZXRJZCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8
dm9pZD4gSW5zcGVjdG9yVGFyZ2V0QWdlbnQ6OnNlbmRNZXNzYWdlVG9UYXJnZXQoY29uc3QgU3Ry
aW5nJiB0YXJnZXRJZCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQogewogICAgIEluc3BlY3RvclRh
cmdldCogdGFyZ2V0ID0gbV90YXJnZXRzLmdldCh0YXJnZXRJZCk7Ci0gICAgaWYgKCF0YXJnZXQp
IHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWlzc2luZyB0YXJnZXQgZm9yIGdpdmVuIHRhcmdl
dElkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghdGFyZ2V0KQorICAgICAg
ICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk1pc3NpbmcgdGFyZ2V0IGZvciBnaXZlbiB0YXJnZXRJ
ZCJfcyk7CiAKICAgICB0YXJnZXQtPnNlbmRNZXNzYWdlVG9UYXJnZXRCYWNrZW5kKG1lc3NhZ2Up
OworCisgICAgcmV0dXJuIHsgfTsKIH0KIAogdm9pZCBJbnNwZWN0b3JUYXJnZXRBZ2VudDo6c2Vu
ZE1lc3NhZ2VGcm9tVGFyZ2V0VG9Gcm9udGVuZChjb25zdCBTdHJpbmcmIHRhcmdldElkLCBjb25z
dCBTdHJpbmcmIG1lc3NhZ2UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL2FnZW50cy9JbnNwZWN0b3JUYXJnZXRBZ2VudC5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yVGFyZ2V0QWdlbnQuaAppbmRleCBiOTI5ZGRm
ZmUyOWMzZmIwODhhYjY3MTQwODdjOTkzMDJjMjc1MjE0Li5lZGNkNDg5Yjc2ZTA4MDgyN2UwNzQx
ZjE0YmFiMDlmOWVhOTMwM2Q0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL2FnZW50cy9JbnNwZWN0b3JUYXJnZXRBZ2VudC5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclRhcmdldEFnZW50LmgKQEAgLTM1LDIz
ICszNSwyMSBAQCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAogY2xhc3MgSW5zcGVjdG9yVGFyZ2V0
OwogCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQogY2xhc3MgSlNfRVhQT1JUX1BSSVZB
VEUgSW5zcGVjdG9yVGFyZ2V0QWdlbnQgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yQWdlbnRCYXNl
LCBwdWJsaWMgVGFyZ2V0QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKICAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShJbnNwZWN0b3JUYXJnZXRBZ2VudCk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CiBwdWJsaWM6CiAgICAgSW5zcGVjdG9yVGFyZ2V0QWdlbnQoRnJvbnRlbmRSb3V0ZXIm
LCBCYWNrZW5kRGlzcGF0Y2hlciYpOwotICAgIH5JbnNwZWN0b3JUYXJnZXRBZ2VudCgpIGZpbmFs
OworICAgIH5JbnNwZWN0b3JUYXJnZXRBZ2VudCgpOwogCiAgICAgLy8gSW5zcGVjdG9yQWdlbnRC
YXNlCi0gICAgdm9pZCBkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoRnJvbnRlbmRSb3V0ZXIq
LCBCYWNrZW5kRGlzcGF0Y2hlciopIGZpbmFsOwotICAgIHZvaWQgd2lsbERlc3Ryb3lGcm9udGVu
ZEFuZEJhY2tlbmQoRGlzY29ubmVjdFJlYXNvbikgZmluYWw7CisgICAgdm9pZCBkaWRDcmVhdGVG
cm9udGVuZEFuZEJhY2tlbmQoRnJvbnRlbmRSb3V0ZXIqLCBCYWNrZW5kRGlzcGF0Y2hlciopOwor
ICAgIHZvaWQgd2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoRGlzY29ubmVjdFJlYXNvbik7
CiAKICAgICAvLyBUYXJnZXRCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIKLSAgICB2b2lkIHNldFBh
dXNlT25TdGFydChFcnJvclN0cmluZyYsIGJvb2wgcGF1c2VPblN0YXJ0KSBmaW5hbDsKLSAgICB2
b2lkIHJlc3VtZShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQpIGZpbmFsOwot
ICAgIHZvaWQgc2VuZE1lc3NhZ2VUb1RhcmdldChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYg
dGFyZ2V0SWQsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkgZmluYWw7CisgICAgUHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8dm9pZD4gc2V0UGF1c2VPblN0YXJ0KGJvb2wpOworICAgIFByb3RvY29sOjpF
cnJvclN0cmluZ09yPHZvaWQ+IHJlc3VtZShjb25zdCBTdHJpbmcmIHRhcmdldElkKTsKKyAgICBQ
cm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzZW5kTWVzc2FnZVRvVGFyZ2V0KGNvbnN0IFN0
cmluZyYgdGFyZ2V0SWQsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7CiAKICAgICAvLyBUYXJnZXQg
bGlmZWN5Y2xlLgogICAgIHZvaWQgdGFyZ2V0Q3JlYXRlZChJbnNwZWN0b3JUYXJnZXQmKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0pTR2xvYmFs
T2JqZWN0QXVkaXRBZ2VudC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2Fn
ZW50cy9KU0dsb2JhbE9iamVjdEF1ZGl0QWdlbnQuY3BwCmluZGV4IDRiZmE5ZjVhYTdmZGUxNTRi
NTMzYzhmMjNjZDdiYWU2Nzc1OGFiMDAuLjI5ZmNlYzk3YmI4ZTdmNDc3MmQ0ZDdjYzhmYWQ2Yzky
MzE3MWY4OTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdl
bnRzL0pTR2xvYmFsT2JqZWN0QXVkaXRBZ2VudC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9hZ2VudHMvSlNHbG9iYWxPYmplY3RBdWRpdEFnZW50LmNwcApAQCAtNDEs
NyArNDEsNyBAQCBKU0dsb2JhbE9iamVjdEF1ZGl0QWdlbnQ6OkpTR2xvYmFsT2JqZWN0QXVkaXRB
Z2VudChKU0FnZW50Q29udGV4dCYgY29udGV4dCkKIAogSlNHbG9iYWxPYmplY3RBdWRpdEFnZW50
Ojp+SlNHbG9iYWxPYmplY3RBdWRpdEFnZW50KCkgPSBkZWZhdWx0OwogCi1JbmplY3RlZFNjcmlw
dCBKU0dsb2JhbE9iamVjdEF1ZGl0QWdlbnQ6OmluamVjdGVkU2NyaXB0Rm9yRXZhbChFcnJvclN0
cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IGludCogZXhlY3V0aW9uQ29udGV4dElkKQorSW5qZWN0
ZWRTY3JpcHQgSlNHbG9iYWxPYmplY3RBdWRpdEFnZW50OjppbmplY3RlZFNjcmlwdEZvckV2YWwo
UHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgT3B0aW9uYWw8UHJvdG9jb2w6OlJ1
bnRpbWU6OkV4ZWN1dGlvbkNvbnRleHRJZD4mJiBleGVjdXRpb25Db250ZXh0SWQpCiB7CiAgICAg
aWYgKGV4ZWN1dGlvbkNvbnRleHRJZCkgewogICAgICAgICBlcnJvclN0cmluZyA9ICJleGVjdXRp
b25Db250ZXh0SWQgaXMgbm90IHN1cHBvcnRlZCBmb3IgSlNDb250ZXh0cyBhcyB0aGVyZSBpcyBv
bmx5IG9uZSBleGVjdXRpb24gY29udGV4dCJfczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0pTR2xvYmFsT2JqZWN0QXVkaXRBZ2VudC5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSlNHbG9iYWxPYmplY3RBdWRpdEFn
ZW50LmgKaW5kZXggN2Q0NjcwZDA0ZGM3ZmQzMzA4M2ExNTA2MWQzNzc2NWIxYTZjM2VlNi4uNTg0
ZDA1MDI2NDU4OWI0ODA1YzYxYjRjNGRiYTM4MTk5YTZmZWRlMCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSlNHbG9iYWxPYmplY3RBdWRpdEFnZW50
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSlNHbG9iYWxP
YmplY3RBdWRpdEFnZW50LmgKQEAgLTM4LDEwICszOCwxMCBAQCBjbGFzcyBKU0dsb2JhbE9iamVj
dEF1ZGl0QWdlbnQgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yQXVkaXRBZ2VudCB7CiAgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgSlNHbG9iYWxPYmplY3RBdWRpdEFn
ZW50KEpTQWdlbnRDb250ZXh0Jik7Ci0gICAgfkpTR2xvYmFsT2JqZWN0QXVkaXRBZ2VudCgpIGZp
bmFsOworICAgIH5KU0dsb2JhbE9iamVjdEF1ZGl0QWdlbnQoKTsKIAogcHJpdmF0ZToKLSAgICBJ
bmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdEZvckV2YWwoRXJyb3JTdHJpbmcmLCBjb25zdCBp
bnQqIGV4ZWN1dGlvbkNvbnRleHRJZCkgZmluYWw7CisgICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0
ZWRTY3JpcHRGb3JFdmFsKFByb3RvY29sOjpFcnJvclN0cmluZyYsIE9wdGlvbmFsPFByb3RvY29s
OjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0SWQ+JiYpOwogCiAgICAgSlNDOjpKU0dsb2JhbE9i
amVjdCYgbV9nbG9iYWxPYmplY3Q7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9hZ2VudHMvSlNHbG9iYWxPYmplY3REZWJ1Z2dlckFnZW50LmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0pTR2xvYmFsT2JqZWN0RGVidWdn
ZXJBZ2VudC5jcHAKaW5kZXggMjU1MWU3YTQyMzkzOTk1ZDZhM2VlYTljZTQ5MTc0OWEzODc4OTE4
OS4uM2I3MDI4NzhhMWNhNTE2MjQ0MDk5OWY0ZTY0YjUzZmMzNGY5NTMyZiAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSlNHbG9iYWxPYmplY3REZWJ1
Z2dlckFnZW50LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50
cy9KU0dsb2JhbE9iamVjdERlYnVnZ2VyQWdlbnQuY3BwCkBAIC00NCw3ICs0NCw3IEBAIEpTR2xv
YmFsT2JqZWN0RGVidWdnZXJBZ2VudDo6SlNHbG9iYWxPYmplY3REZWJ1Z2dlckFnZW50KEpTQWdl
bnRDb250ZXh0JiBjb250ZXh0CiAKIEpTR2xvYmFsT2JqZWN0RGVidWdnZXJBZ2VudDo6fkpTR2xv
YmFsT2JqZWN0RGVidWdnZXJBZ2VudCgpID0gZGVmYXVsdDsKIAotSW5qZWN0ZWRTY3JpcHQgSlNH
bG9iYWxPYmplY3REZWJ1Z2dlckFnZW50OjppbmplY3RlZFNjcmlwdEZvckV2YWwoRXJyb3JTdHJp
bmcmIGVycm9yU3RyaW5nLCBjb25zdCBpbnQqIGV4ZWN1dGlvbkNvbnRleHRJZCkKK0luamVjdGVk
U2NyaXB0IEpTR2xvYmFsT2JqZWN0RGVidWdnZXJBZ2VudDo6aW5qZWN0ZWRTY3JpcHRGb3JFdmFs
KFByb3RvY29sOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIE9wdGlvbmFsPFByb3RvY29sOjpS
dW50aW1lOjpFeGVjdXRpb25Db250ZXh0SWQ+JiYgZXhlY3V0aW9uQ29udGV4dElkKQogewogICAg
IGlmIChleGVjdXRpb25Db250ZXh0SWQpIHsKICAgICAgICAgZXJyb3JTdHJpbmcgPSAiZXhlY3V0
aW9uQ29udGV4dElkIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIEpTQ29udGV4dHMgYXMgdGhlcmUgaXMg
b25seSBvbmUgZXhlY3V0aW9uIGNvbnRleHQiX3M7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9KU0dsb2JhbE9iamVjdERlYnVnZ2VyQWdlbnQuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0pTR2xvYmFsT2JqZWN0RGVi
dWdnZXJBZ2VudC5oCmluZGV4IDZmNzkyNzhkNTMzMTcxZTFmZGQwYWVmZTlkZDI5YjMzYmZkMWZl
OTUuLjEwMGZiMjNlMzE1ZGYwNDdmOWY4NTZjY2M5YTVhNmY4MGU4M2Q3NzYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0pTR2xvYmFsT2JqZWN0RGVi
dWdnZXJBZ2VudC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRz
L0pTR2xvYmFsT2JqZWN0RGVidWdnZXJBZ2VudC5oCkBAIC0zNiwxOCArMzYsMTggQEAgY2xhc3Mg
SlNHbG9iYWxPYmplY3REZWJ1Z2dlckFnZW50IGZpbmFsIDogcHVibGljIEluc3BlY3RvckRlYnVn
Z2VyQWdlbnQgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIEpT
R2xvYmFsT2JqZWN0RGVidWdnZXJBZ2VudChKU0FnZW50Q29udGV4dCYsIEluc3BlY3RvckNvbnNv
bGVBZ2VudCopOwotICAgIH5KU0dsb2JhbE9iamVjdERlYnVnZ2VyQWdlbnQoKSBmaW5hbDsKKyAg
ICB+SlNHbG9iYWxPYmplY3REZWJ1Z2dlckFnZW50KCk7CiAKICAgICAvLyBKU0M6OkRlYnVnZ2Vy
OjpPYnNlcnZlcgotICAgIHZvaWQgYnJlYWtwb2ludEFjdGlvbkxvZyhKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiwgY29uc3QgU3RyaW5nJiBkYXRhKSBmaW5hbDsKKyAgICB2b2lkIGJyZWFrcG9pbnRBY3Rp
b25Mb2coSlNDOjpKU0dsb2JhbE9iamVjdCosIGNvbnN0IFN0cmluZyYgZGF0YSk7CiAKIHByaXZh
dGU6Ci0gICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHRGb3JFdmFsKEVycm9yU3RyaW5n
JiwgY29uc3QgaW50KiBleGVjdXRpb25Db250ZXh0SWQpIGZpbmFsOworICAgIEluamVjdGVkU2Ny
aXB0IGluamVjdGVkU2NyaXB0Rm9yRXZhbChQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBPcHRpb25h
bDxQcm90b2NvbDo6UnVudGltZTo6RXhlY3V0aW9uQ29udGV4dElkPiYmKTsKIAogICAgIC8vIE5P
VEU6IEphdmFTY3JpcHQgaW5zcGVjdG9yIGRvZXMgbm90IHlldCBuZWVkIHRvIG11dGUgYSBjb25z
b2xlIGJlY2F1c2Ugbm8gbWVzc2FnZXMKICAgICAvLyBhcmUgc2VudCB0byB0aGUgY29uc29sZSBv
dXRzaWRlIG9mIHRoZSBBUEkgYm91bmRhcnkgb3IgY29uc29sZSBvYmplY3QuCi0gICAgdm9pZCBt
dXRlQ29uc29sZSgpIGZpbmFsIHsgfQotICAgIHZvaWQgdW5tdXRlQ29uc29sZSgpIGZpbmFsIHsg
fQorICAgIHZvaWQgbXV0ZUNvbnNvbGUoKSB7IH0KKyAgICB2b2lkIHVubXV0ZUNvbnNvbGUoKSB7
IH0KIAogICAgIEluc3BlY3RvckNvbnNvbGVBZ2VudCogbV9jb25zb2xlQWdlbnQgeyBudWxscHRy
IH07CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2Vu
dHMvSlNHbG9iYWxPYmplY3RSdW50aW1lQWdlbnQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9hZ2VudHMvSlNHbG9iYWxPYmplY3RSdW50aW1lQWdlbnQuY3BwCmluZGV4IGM4
NjY5ZWUwYWE1YjhjYTg0ZTVkMjk0MzdmMzQ0NDcxYzFmOWEwNjAuLmUyNTQ0ODc0OGYxNGU1MGEy
ZmM1Y2RlNzZiMDY4OTAyYjAzODNiMWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3IvYWdlbnRzL0pTR2xvYmFsT2JqZWN0UnVudGltZUFnZW50LmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9KU0dsb2JhbE9iamVjdFJ1bnRp
bWVBZ2VudC5jcHAKQEAgLTQzLDkgKzQzLDEyIEBAIEpTR2xvYmFsT2JqZWN0UnVudGltZUFnZW50
OjpKU0dsb2JhbE9iamVjdFJ1bnRpbWVBZ2VudChKU0FnZW50Q29udGV4dCYgY29udGV4dCkKIAog
SlNHbG9iYWxPYmplY3RSdW50aW1lQWdlbnQ6On5KU0dsb2JhbE9iamVjdFJ1bnRpbWVBZ2VudCgp
ID0gZGVmYXVsdDsKIAotSW5qZWN0ZWRTY3JpcHQgSlNHbG9iYWxPYmplY3RSdW50aW1lQWdlbnQ6
OmluamVjdGVkU2NyaXB0Rm9yRXZhbChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IGlu
dCogZXhlY3V0aW9uQ29udGV4dElkKQorSW5qZWN0ZWRTY3JpcHQgSlNHbG9iYWxPYmplY3RSdW50
aW1lQWdlbnQ6OmluamVjdGVkU2NyaXB0Rm9yRXZhbChQcm90b2NvbDo6RXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBPcHRpb25hbDxQcm90b2NvbDo6UnVudGltZTo6RXhlY3V0aW9uQ29udGV4dElk
PiYmIGV4ZWN1dGlvbkNvbnRleHRJZCkKIHsKLSAgICBBU1NFUlRfVU5VU0VEKGV4ZWN1dGlvbkNv
bnRleHRJZCwgIWV4ZWN1dGlvbkNvbnRleHRJZCk7CisgICAgaWYgKGV4ZWN1dGlvbkNvbnRleHRJ
ZCkgeworICAgICAgICBlcnJvclN0cmluZyA9ICJleGVjdXRpb25Db250ZXh0SWQgaXMgbm90IHN1
cHBvcnRlZCBmb3IgSlNDb250ZXh0cyBhcyB0aGVyZSBpcyBvbmx5IG9uZSBleGVjdXRpb24gY29u
dGV4dCJfczsKKyAgICAgICAgcmV0dXJuIEluamVjdGVkU2NyaXB0KCk7CisgICAgfQogCiAgICAg
SW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHQgPSBpbmplY3RlZFNjcmlwdE1hbmFnZXIoKS5p
bmplY3RlZFNjcmlwdEZvcigmbV9nbG9iYWxPYmplY3QpOwogICAgIGlmIChpbmplY3RlZFNjcmlw
dC5oYXNOb1ZhbHVlKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL2FnZW50cy9KU0dsb2JhbE9iamVjdFJ1bnRpbWVBZ2VudC5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSlNHbG9iYWxPYmplY3RSdW50aW1lQWdlbnQuaAppbmRl
eCA2ZjBjZTkwNTlkNzIzMzgzNzhiMWQ0N2E3MWE3MjVjMzkyY2QyNzdhLi5iZmViZGE5MmEwOGE5
MWQzOGNlMmM1MTc1Njc5NjczMWQ1OWEyYzljIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL2FnZW50cy9KU0dsb2JhbE9iamVjdFJ1bnRpbWVBZ2VudC5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0pTR2xvYmFsT2JqZWN0UnVu
dGltZUFnZW50LmgKQEAgLTM5LDE1ICszOSwxNSBAQCBjbGFzcyBKU0dsb2JhbE9iamVjdFJ1bnRp
bWVBZ2VudCBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3JSdW50aW1lQWdlbnQgewogICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIEpTR2xvYmFsT2JqZWN0UnVudGltZUFn
ZW50KEpTQWdlbnRDb250ZXh0Jik7Ci0gICAgfkpTR2xvYmFsT2JqZWN0UnVudGltZUFnZW50KCkg
ZmluYWw7CisgICAgfkpTR2xvYmFsT2JqZWN0UnVudGltZUFnZW50KCk7CiAKIHByaXZhdGU6Ci0g
ICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHRGb3JFdmFsKEVycm9yU3RyaW5nJiwgY29u
c3QgaW50KiBleGVjdXRpb25Db250ZXh0SWQpIGZpbmFsOworICAgIEluamVjdGVkU2NyaXB0IGlu
amVjdGVkU2NyaXB0Rm9yRXZhbChQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBPcHRpb25hbDxQcm90
b2NvbDo6UnVudGltZTo6RXhlY3V0aW9uQ29udGV4dElkPiYmKTsKIAogICAgIC8vIE5PVEU6IEph
dmFTY3JpcHQgaW5zcGVjdG9yIGRvZXMgbm90IHlldCBuZWVkIHRvIG11dGUgYSBjb25zb2xlIGJl
Y2F1c2Ugbm8gbWVzc2FnZXMKICAgICAvLyBhcmUgc2VudCB0byB0aGUgY29uc29sZSBvdXRzaWRl
IG9mIHRoZSBBUEkgYm91bmRhcnkgb3IgY29uc29sZSBvYmplY3QuCi0gICAgdm9pZCBtdXRlQ29u
c29sZSgpIGZpbmFsIHsgfQotICAgIHZvaWQgdW5tdXRlQ29uc29sZSgpIGZpbmFsIHsgfQorICAg
IHZvaWQgbXV0ZUNvbnNvbGUoKSB7IH0KKyAgICB2b2lkIHVubXV0ZUNvbnNvbGUoKSB7IH0KIAog
ICAgIHN0ZDo6dW5pcXVlX3B0cjxSdW50aW1lRnJvbnRlbmREaXNwYXRjaGVyPiBtX2Zyb250ZW5k
RGlzcGF0Y2hlcjsKICAgICBSZWZQdHI8UnVudGltZUJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tl
bmREaXNwYXRjaGVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9wcm90b2NvbC9QYWdlLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3By
b3RvY29sL1BhZ2UuanNvbgppbmRleCAzYjhmYTE4YmQ3ZThkOTVkN2U4Zjk1YjQ0MmFmYzYzZTU1
MGNlNjNhLi5mZGU0ZjY5NjRkNDBlOGE1NjUxMTZiZTJiYzY5MmE0NTFjMmRhMTA2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Byb3RvY29sL1BhZ2UuanNvbgor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Byb3RvY29sL1BhZ2UuanNvbgpA
QCAtMjY3LDcgKzI2Nyw3IEBACiAgICAgICAgICAgICAiY29uZGl0aW9uIjogIihkZWZpbmVkKEVO
QUJMRV9EQVJLX01PREVfQ1NTKSAmJiBFTkFCTEVfREFSS19NT0RFX0NTUykgfHwgKGRlZmluZWQo
SEFWRV9PU19EQVJLX01PREVfU1VQUE9SVCkgJiYgSEFWRV9PU19EQVJLX01PREVfU1VQUE9SVCki
LAogICAgICAgICAgICAgInRhcmdldFR5cGVzIjogWyJwYWdlIl0sCiAgICAgICAgICAgICAicGFy
YW1ldGVycyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImFwcGVhcmFuY2UiLCAiJHJl
ZiI6ICJBcHBlYXJhbmNlIiwgImRlc2NyaXB0aW9uIjogIkFwcGVhcmFuY2UgbmFtZSB0byBmb3Jj
ZS4gRW1wdHkgc3RyaW5nIGRpc2FibGVzIHRoZSBvdmVycmlkZS4iIH0KKyAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogImFwcGVhcmFuY2UiLCAiJHJlZiI6ICJBcHBlYXJhbmNlIiwgIm9wdGlvbmFs
IjogdHJ1ZSB9CiAgICAgICAgICAgICBdCiAgICAgICAgIH0sCiAgICAgICAgIHsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcmVtb3RlL3NvY2tldC9SZW1vdGVJ
bnNwZWN0b3JDb25uZWN0aW9uQ2xpZW50LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3IvcmVtb3RlL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JDb25uZWN0aW9uQ2xpZW50LmNwcApp
bmRleCAwNjUyZTEyNzA4YmY4NjIzMGJlNDYyOWZlNjU3MjViYmJjMzViNjcwLi4xMTAwMDA0NzNk
Y2ZjYzQzNjQ3Njg0ODE3ZDk1MzhjNzE1YzcyODU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3JlbW90ZS9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yQ29ubmVjdGlv
bkNsaWVudC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9yZW1vdGUv
c29ja2V0L1JlbW90ZUluc3BlY3RvckNvbm5lY3Rpb25DbGllbnQuY3BwCkBAIC05MiwzMiArOTIs
MjQgQEAgT3B0aW9uYWw8UmVtb3RlSW5zcGVjdG9yQ29ubmVjdGlvbkNsaWVudDo6RXZlbnQ+IFJl
bW90ZUluc3BlY3RvckNvbm5lY3Rpb25DbGllbnQKIAogICAgIFN0cmluZyBqc29uRGF0YSA9IFN0
cmluZzo6ZnJvbVVURjgoZGF0YSk7CiAKLSAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IG1lc3NhZ2VW
YWx1ZTsKLSAgICBpZiAoIUpTT046OlZhbHVlOjpwYXJzZUpTT04oanNvbkRhdGEsIG1lc3NhZ2VW
YWx1ZSkpCisgICAgYXV0byBtZXNzYWdlVmFsdWUgPSBKU09OOjpWYWx1ZTo6cGFyc2VKU09OKGpz
b25EYXRhKTsKKyAgICBpZiAoIW1lc3NhZ2VWYWx1ZSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKIAotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG1lc3NhZ2VPYmplY3Q7Ci0gICAgaWYg
KCFtZXNzYWdlVmFsdWUtPmFzT2JqZWN0KG1lc3NhZ2VPYmplY3QpKQorICAgIGF1dG8gbWVzc2Fn
ZU9iamVjdCA9IG1lc3NhZ2VWYWx1ZS0+YXNPYmplY3QoKTsKKyAgICBpZiAoIW1lc3NhZ2VPYmpl
Y3QpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICBFdmVudCBldmVudDsKLSAg
ICBpZiAoIW1lc3NhZ2VPYmplY3QtPmdldFN0cmluZygiZXZlbnQiX3MsIGV2ZW50Lm1ldGhvZE5h
bWUpKQorCisgICAgZXZlbnQubWV0aG9kTmFtZSA9IG1lc3NhZ2VPYmplY3QtPmdldFN0cmluZygi
ZXZlbnQiX3MpOworICAgIGlmICghZXZlbnQubWV0aG9kTmFtZSkKICAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKIAogICAgIGV2ZW50LmNsaWVudElEID0gY2xpZW50SUQ7Ci0KLSAgICBDb25u
ZWN0aW9uSUQgY29ubmVjdGlvbklEOwotICAgIGlmIChtZXNzYWdlT2JqZWN0LT5nZXRJbnRlZ2Vy
KCJjb25uZWN0aW9uSUQiX3MsIGNvbm5lY3Rpb25JRCkpCi0gICAgICAgIGV2ZW50LmNvbm5lY3Rp
b25JRCA9IGNvbm5lY3Rpb25JRDsKLQotICAgIFRhcmdldElEIHRhcmdldElEOwotICAgIGlmICht
ZXNzYWdlT2JqZWN0LT5nZXRJbnRlZ2VyKCJ0YXJnZXRJRCJfcywgdGFyZ2V0SUQpKQotICAgICAg
ICBldmVudC50YXJnZXRJRCA9IHRhcmdldElEOwotCi0gICAgU3RyaW5nIG1lc3NhZ2U7Ci0gICAg
aWYgKG1lc3NhZ2VPYmplY3QtPmdldFN0cmluZygibWVzc2FnZSJfcywgbWVzc2FnZSkpCi0gICAg
ICAgIGV2ZW50Lm1lc3NhZ2UgPSBtZXNzYWdlOwotCisgICAgZXZlbnQuY29ubmVjdGlvbklEID0g
bWVzc2FnZU9iamVjdC0+Z2V0SW50ZWdlcigiY29ubmVjdGlvbklEIl9zKTsKKyAgICBldmVudC50
YXJnZXRJRCA9IG1lc3NhZ2VPYmplY3QtPmdldEludGVnZXIoInRhcmdldElEIl9zKTsKKyAgICBl
dmVudC5tZXNzYWdlID0gbWVzc2FnZU9iamVjdC0+Z2V0U3RyaW5nKCJtZXNzYWdlIl9zKTsKICAg
ICByZXR1cm4gZXZlbnQ7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2NwcF9nZW5lcmF0b3IucHkgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9jcHBfZ2VuZXJhdG9yLnB5CmluZGV4
IGY3MzM4ZjZkZDNmMTgxZTg5NWUxOWVlYzY2Y2EyMWQ1OWNiYmRhZmEuLjQ2YjkwNjU3YzM5ZTRk
MjUwM2I3YzcxZDJjNGNkZDM3OTc4NWM3Y2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2NwcF9nZW5lcmF0b3IucHkKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vY3BwX2dlbmVyYXRv
ci5weQpAQCAtNTUsMjc5ICs1NSwzMjkgQEAgY2xhc3MgQ3BwR2VuZXJhdG9yKEdlbmVyYXRvcik6
CiAgICAgICAgIHJldHVybiBzZWxmLm1vZGVsKCkuZnJhbWV3b3JrLnNldHRpbmcoJ2NwcF9wcm90
b2NvbF9ncm91cCcsICcnKQogCiAgICAgZGVmIGhlbHBlcnNfbmFtZXNwYWNlKHNlbGYpOgotICAg
ICAgICByZXR1cm4gJyVzSGVscGVycycgJSBzZWxmLnByb3RvY29sX25hbWUoKQorICAgICAgICBu
YW1lc3BhY2UgPSAnSGVscGVycycKKyAgICAgICAgaWYgc2VsZi5wcm90b2NvbF9uYW1lKCkgIT0g
J0luc3BlY3Rvcic6CisgICAgICAgICAgICBuYW1lc3BhY2UgPSBzZWxmLnByb3RvY29sX25hbWUo
KSArIG5hbWVzcGFjZQorICAgICAgICByZXR1cm4gbmFtZXNwYWNlCiAKICAgICAjIE1pc2NlbGxh
bmVvdXMgdGV4dCBtYW5pcHVsYXRpb24gcm91dGluZXMuCiAgICAgQHN0YXRpY21ldGhvZAogICAg
IGRlZiBjcHBfZ2V0dGVyX21ldGhvZF9mb3JfdHlwZShfdHlwZSk6Ci0gICAgICAgIGlmIGlzaW5z
dGFuY2UoX3R5cGUsIE9iamVjdFR5cGUpOgotICAgICAgICAgICAgcmV0dXJuICdnZXRPYmplY3Qn
Ci0gICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEFycmF5VHlwZSk6Ci0gICAgICAgICAgICBy
ZXR1cm4gJ2dldEFycmF5JwotICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBQcmltaXRpdmVU
eXBlKToKLSAgICAgICAgICAgIGlmIF90eXBlLnJhd19uYW1lKCkgPT0gJ2ludGVnZXInOgotICAg
ICAgICAgICAgICAgIHJldHVybiAnZ2V0SW50ZWdlcicKLSAgICAgICAgICAgIGVsaWYgX3R5cGUu
cmF3X25hbWUoKSA9PSAnbnVtYmVyJzoKLSAgICAgICAgICAgICAgICByZXR1cm4gJ2dldERvdWJs
ZScKLSAgICAgICAgICAgIGVsaWYgX3R5cGUucmF3X25hbWUoKSA9PSAnYW55JzoKLSAgICAgICAg
ICAgICAgICByZXR1cm4gJ2dldFZhbHVlJwotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAg
ICAgICByZXR1cm4gJ2dldCcgKyB1Y2ZpcnN0KF90eXBlLnJhd19uYW1lKCkpCiAgICAgICAgIGlm
IGlzaW5zdGFuY2UoX3R5cGUsIEFsaWFzZWRUeXBlKToKLSAgICAgICAgICAgIHJldHVybiBDcHBH
ZW5lcmF0b3IuY3BwX2dldHRlcl9tZXRob2RfZm9yX3R5cGUoX3R5cGUuYWxpYXNlZF90eXBlKQor
ICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5hbGlhc2VkX3R5cGUKKyAgICAgICAgICAgICMgZmFs
bHRocm91Z2gKKwogICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBFbnVtVHlwZSk6Ci0gICAg
ICAgICAgICByZXR1cm4gQ3BwR2VuZXJhdG9yLmNwcF9nZXR0ZXJfbWV0aG9kX2Zvcl90eXBlKF90
eXBlLnByaW1pdGl2ZV90eXBlKQorICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5wcmltaXRpdmVf
dHlwZQorICAgICAgICAgICAgIyBmYWxsdGhyb3VnaAorCisgICAgICAgIGlmIGlzaW5zdGFuY2Uo
X3R5cGUsIE9iamVjdFR5cGUpIG9yIF90eXBlLnF1YWxpZmllZF9uYW1lKCkgaW4gWydvYmplY3Qn
XToKKyAgICAgICAgICAgIHJldHVybiAnZ2V0T2JqZWN0JworCisgICAgICAgIGlmIGlzaW5zdGFu
Y2UoX3R5cGUsIEFycmF5VHlwZSkgb3IgX3R5cGUucXVhbGlmaWVkX25hbWUoKSBpbiBbJ2FycmF5
J106CisgICAgICAgICAgICByZXR1cm4gJ2dldEFycmF5JworCisgICAgICAgIGlmIGlzaW5zdGFu
Y2UoX3R5cGUsIFByaW1pdGl2ZVR5cGUpOgorICAgICAgICAgICAgaWYgX3R5cGUucmF3X25hbWUo
KSA9PSAnbnVtYmVyJzoKKyAgICAgICAgICAgICAgICByZXR1cm4gJ2dldERvdWJsZScKKyAgICAg
ICAgICAgIGlmIF90eXBlLnJhd19uYW1lKCkgPT0gJ2FueSc6CisgICAgICAgICAgICAgICAgcmV0
dXJuICdnZXRWYWx1ZScKKyAgICAgICAgICAgIHJldHVybiAnZ2V0JyArIHVjZmlyc3QoX3R5cGUu
cmF3X25hbWUoKSkKKworICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJ1bmtub3duIHR5cGUiKQog
CiAgICAgQHN0YXRpY21ldGhvZAogICAgIGRlZiBjcHBfc2V0dGVyX21ldGhvZF9mb3JfdHlwZShf
dHlwZSk6Ci0gICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIE9iamVjdFR5cGUpOgotICAgICAg
ICAgICAgcmV0dXJuICdzZXRPYmplY3QnCi0gICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEFy
cmF5VHlwZSk6Ci0gICAgICAgICAgICByZXR1cm4gJ3NldEFycmF5JwotICAgICAgICBpZiBpc2lu
c3RhbmNlKF90eXBlLCBQcmltaXRpdmVUeXBlKToKLSAgICAgICAgICAgIGlmIF90eXBlLnJhd19u
YW1lKCkgPT0gJ2ludGVnZXInOgotICAgICAgICAgICAgICAgIHJldHVybiAnc2V0SW50ZWdlcicK
LSAgICAgICAgICAgIGVsaWYgX3R5cGUucmF3X25hbWUoKSA9PSAnbnVtYmVyJzoKLSAgICAgICAg
ICAgICAgICByZXR1cm4gJ3NldERvdWJsZScKLSAgICAgICAgICAgIGVsaWYgX3R5cGUucmF3X25h
bWUoKSA9PSAnYW55JzoKLSAgICAgICAgICAgICAgICByZXR1cm4gJ3NldFZhbHVlJwotICAgICAg
ICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByZXR1cm4gJ3NldCcgKyB1Y2ZpcnN0KF90eXBl
LnJhd19uYW1lKCkpCiAgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEFsaWFzZWRUeXBlKToK
LSAgICAgICAgICAgIHJldHVybiBDcHBHZW5lcmF0b3IuY3BwX3NldHRlcl9tZXRob2RfZm9yX3R5
cGUoX3R5cGUuYWxpYXNlZF90eXBlKQorICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5hbGlhc2Vk
X3R5cGUKKyAgICAgICAgICAgICMgZmFsbHRocm91Z2gKKwogICAgICAgICBpZiBpc2luc3RhbmNl
KF90eXBlLCBFbnVtVHlwZSk6Ci0gICAgICAgICAgICByZXR1cm4gQ3BwR2VuZXJhdG9yLmNwcF9z
ZXR0ZXJfbWV0aG9kX2Zvcl90eXBlKF90eXBlLnByaW1pdGl2ZV90eXBlKQorICAgICAgICAgICAg
X3R5cGUgPSBfdHlwZS5wcmltaXRpdmVfdHlwZQorICAgICAgICAgICAgIyBmYWxsdGhyb3VnaAor
CisgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIE9iamVjdFR5cGUpIG9yIF90eXBlLnF1YWxp
ZmllZF9uYW1lKCkgaW4gWydvYmplY3QnXToKKyAgICAgICAgICAgIHJldHVybiAnc2V0T2JqZWN0
JworCisgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEFycmF5VHlwZSkgb3IgX3R5cGUucXVh
bGlmaWVkX25hbWUoKSBpbiBbJ2FycmF5J106CisgICAgICAgICAgICByZXR1cm4gJ3NldEFycmF5
JworCisgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIFByaW1pdGl2ZVR5cGUpOgorICAgICAg
ICAgICAgaWYgX3R5cGUucmF3X25hbWUoKSA9PSAnbnVtYmVyJzoKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gJ3NldERvdWJsZScKKyAgICAgICAgICAgIGlmIF90eXBlLnJhd19uYW1lKCkgPT0gJ2Fu
eSc6CisgICAgICAgICAgICAgICAgcmV0dXJuICdzZXRWYWx1ZScKKyAgICAgICAgICAgIHJldHVy
biAnc2V0JyArIHVjZmlyc3QoX3R5cGUucmF3X25hbWUoKSkKKworICAgICAgICByYWlzZSBWYWx1
ZUVycm9yKCJ1bmtub3duIHR5cGUiKQogCiAgICAgIyBHZW5lcmF0ZSB0eXBlIHJlcHJlc2VudGF0
aW9ucyBmb3IgdmFyaW91cyBzaXR1YXRpb25zLgogICAgIEBzdGF0aWNtZXRob2QKICAgICBkZWYg
Y3BwX3Byb3RvY29sX3R5cGVfZm9yX3R5cGUoX3R5cGUpOgogICAgICAgICBpZiBpc2luc3RhbmNl
KF90eXBlLCBBbGlhc2VkVHlwZSk6Ci0gICAgICAgICAgICBfdHlwZSA9IF90eXBlLmFsaWFzZWRf
dHlwZSAgIyBGYWxsIHRocm91Z2ggdG8gZW51bSBvciBwcmltaXRpdmUuCisgICAgICAgICAgICBf
dHlwZSA9IF90eXBlLmFsaWFzZWRfdHlwZQorICAgICAgICAgICAgIyBmYWxsdGhyb3VnaAogCi0g
ICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIE9iamVjdFR5cGUpIGFuZCBsZW4oX3R5cGUubWVt
YmVycykgPT0gMDoKLSAgICAgICAgICAgIHJldHVybiAnSlNPTjo6T2JqZWN0JwogICAgICAgICBp
ZiBpc2luc3RhbmNlKF90eXBlLCBBcnJheVR5cGUpOgotICAgICAgICAgICAgaWYgX3R5cGUucmF3
X25hbWUoKSBpcyBOb25lOiAgIyBPdGhlcndpc2UsIGZhbGwgdGhyb3VnaCBhbmQgdXNlIHR5cGVk
ZWYnZCBuYW1lLgorICAgICAgICAgICAgaWYgX3R5cGUucmF3X25hbWUoKSBpcyBOb25lOgogICAg
ICAgICAgICAgICAgIHJldHVybiAnSlNPTjo6QXJyYXlPZjwlcz4nICUgQ3BwR2VuZXJhdG9yLmNw
cF9wcm90b2NvbF90eXBlX2Zvcl90eXBlKF90eXBlLmVsZW1lbnRfdHlwZSkKKyAgICAgICAgICAg
ICMgZmFsbHRocm91Z2gKKwogICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCAoT2JqZWN0VHlw
ZSwgRW51bVR5cGUsIEFycmF5VHlwZSkpOgotICAgICAgICAgICAgcmV0dXJuICdJbnNwZWN0b3I6
OlByb3RvY29sOjolczo6JXMnICUgKF90eXBlLnR5cGVfZG9tYWluKCkuZG9tYWluX25hbWUsIF90
eXBlLnJhd19uYW1lKCkpCisgICAgICAgICAgICByZXR1cm4gJ1Byb3RvY29sOjolczo6JXMnICUg
KF90eXBlLnR5cGVfZG9tYWluKCkuZG9tYWluX25hbWUsIF90eXBlLnJhd19uYW1lKCkpCisKICAg
ICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgUHJpbWl0aXZlVHlwZSk6CiAgICAgICAgICAgICBy
ZXR1cm4gQ3BwR2VuZXJhdG9yLmNwcF9uYW1lX2Zvcl9wcmltaXRpdmVfdHlwZShfdHlwZSkKIAot
ICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgY3BwX3Byb3RvY29sX3R5cGVfZm9yX3R5cGVfbWVt
YmVyKHR5cGVfbWVtYmVyLCBvYmplY3RfZGVjbGFyYXRpb24pOgotICAgICAgICBpZiBpc2luc3Rh
bmNlKHR5cGVfbWVtYmVyLnR5cGUsIEVudW1UeXBlKSBhbmQgdHlwZV9tZW1iZXIudHlwZS5pc19h
bm9ueW1vdXM6Ci0gICAgICAgICAgICByZXR1cm4gJzo6Jy5qb2luKFtDcHBHZW5lcmF0b3IuY3Bw
X3Byb3RvY29sX3R5cGVfZm9yX3R5cGUob2JqZWN0X2RlY2xhcmF0aW9uLnR5cGUpLCB1Y2ZpcnN0
KHR5cGVfbWVtYmVyLm1lbWJlcl9uYW1lKV0pCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBy
ZXR1cm4gQ3BwR2VuZXJhdG9yLmNwcF9wcm90b2NvbF90eXBlX2Zvcl90eXBlKHR5cGVfbWVtYmVy
LnR5cGUpCisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInVua25vd24gdHlwZSIpCiAKICAgICBA
c3RhdGljbWV0aG9kCi0gICAgZGVmIGNwcF90eXBlX2Zvcl91bmNoZWNrZWRfZm9ybWFsX2luX3Bh
cmFtZXRlcihwYXJhbWV0ZXIpOgotICAgICAgICBfdHlwZSA9IHBhcmFtZXRlci50eXBlCisgICAg
ZGVmIGNwcF90eXBlX2Zvcl90eXBlX21lbWJlcl9hcmd1bWVudChfdHlwZSwgbmFtZSk6CiAgICAg
ICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEFsaWFzZWRUeXBlKToKLSAgICAgICAgICAgIF90eXBl
ID0gX3R5cGUuYWxpYXNlZF90eXBlICAjIEZhbGwgdGhyb3VnaCB0byBlbnVtIG9yIHByaW1pdGl2
ZS4KKyAgICAgICAgICAgIF90eXBlID0gX3R5cGUuYWxpYXNlZF90eXBlCisgICAgICAgICAgICAj
IGZhbGx0aHJvdWdoCiAKLSAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgRW51bVR5cGUpOgot
ICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5wcmltaXRpdmVfdHlwZSAgIyBGYWxsIHRocm91Z2gg
dG8gcHJpbWl0aXZlLgotCi0gICAgICAgICMgVGhpcyBoYW5kbGVzIHRoZSAnYW55JyB0eXBlIGFu
ZCBvYmplY3RzIHdpdGggZGVmaW5lZCBwcm9wZXJ0aWVzLgotICAgICAgICBpZiBpc2luc3RhbmNl
KF90eXBlLCBPYmplY3RUeXBlKSBvciBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpID09ICdvYmplY3Qn
OgotICAgICAgICAgICAgY3BwX25hbWUgPSAnSlNPTjo6T2JqZWN0JwotICAgICAgICAgICAgaWYg
cGFyYW1ldGVyLmlzX29wdGlvbmFsOgotICAgICAgICAgICAgICAgIHJldHVybiAnY29uc3QgJXMq
JyAlIGNwcF9uYW1lCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJldHVybiAn
Y29uc3QgJXMmJyAlIGNwcF9uYW1lCi0gICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEFycmF5
VHlwZSk6Ci0gICAgICAgICAgICBjcHBfbmFtZSA9ICdKU09OOjpBcnJheScKLSAgICAgICAgICAg
IGlmIHBhcmFtZXRlci5pc19vcHRpb25hbDoKLSAgICAgICAgICAgICAgICByZXR1cm4gJ2NvbnN0
ICVzKicgJSBjcHBfbmFtZQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByZXR1
cm4gJ2NvbnN0ICVzJicgJSBjcHBfbmFtZQotICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBQ
cmltaXRpdmVUeXBlKToKLSAgICAgICAgICAgIGNwcF9uYW1lID0gQ3BwR2VuZXJhdG9yLmNwcF9u
YW1lX2Zvcl9wcmltaXRpdmVfdHlwZShfdHlwZSkKLSAgICAgICAgICAgIGlmIHBhcmFtZXRlci5p
c19vcHRpb25hbDoKLSAgICAgICAgICAgICAgICByZXR1cm4gJ2NvbnN0ICVzKicgJSBjcHBfbmFt
ZQotICAgICAgICAgICAgZWxpZiBfdHlwZS5yYXdfbmFtZSgpIGluIFsnc3RyaW5nJ106Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuICdjb25zdCAlcyYnICUgY3BwX25hbWUKLSAgICAgICAgICAgIGVs
c2U6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGNwcF9uYW1lCi0KLSAgICAgICAgcmV0dXJuICJ1
bmtub3duX3VuY2hlY2tlZF9mb3JtYWxfaW5fcGFyYW1ldGVyX3R5cGUiCi0KLSAgICBAc3RhdGlj
bWV0aG9kCi0gICAgZGVmIGNwcF90eXBlX2Zvcl9jaGVja2VkX2Zvcm1hbF9ldmVudF9wYXJhbWV0
ZXIocGFyYW1ldGVyKToKLSAgICAgICAgcmV0dXJuIENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3Jf
dHlwZV93aXRoX25hbWUocGFyYW1ldGVyLnR5cGUsIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwg
cGFyYW1ldGVyLmlzX29wdGlvbmFsKQotCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBjcHBf
dHlwZV9mb3JfdHlwZV9tZW1iZXIobWVtYmVyKToKLSAgICAgICAgcmV0dXJuIENwcEdlbmVyYXRv
ci5jcHBfdHlwZV9mb3JfdHlwZV93aXRoX25hbWUobWVtYmVyLnR5cGUsIG1lbWJlci5tZW1iZXJf
bmFtZSwgRmFsc2UpCi0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIGNwcF90eXBlX2Zvcl90
eXBlX3dpdGhfbmFtZShfdHlwZSwgdHlwZV9uYW1lLCBpc19vcHRpb25hbCk6CiAgICAgICAgIGlm
IGlzaW5zdGFuY2UoX3R5cGUsIChBcnJheVR5cGUsIE9iamVjdFR5cGUpKToKLSAgICAgICAgICAg
IHJldHVybiAnUmVmUHRyPCVzPicgJSBDcHBHZW5lcmF0b3IuY3BwX3Byb3RvY29sX3R5cGVfZm9y
X3R5cGUoX3R5cGUpCi0gICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEFsaWFzZWRUeXBlKToK
LSAgICAgICAgICAgIGJ1aWxkZXJfdHlwZSA9IENwcEdlbmVyYXRvci5jcHBfcHJvdG9jb2xfdHlw
ZV9mb3JfdHlwZShfdHlwZSkKLSAgICAgICAgICAgIGlmIGlzX29wdGlvbmFsOgotICAgICAgICAg
ICAgICAgIHJldHVybiAnY29uc3QgJXMqJyAlIGJ1aWxkZXJfdHlwZQotICAgICAgICAgICAgZWxp
ZiBfdHlwZS5hbGlhc2VkX3R5cGUucXVhbGlmaWVkX25hbWUoKSBpbiBbJ2ludGVnZXInLCAnbnVt
YmVyJ106Ci0gICAgICAgICAgICAgICAgcmV0dXJuIENwcEdlbmVyYXRvci5jcHBfbmFtZV9mb3Jf
cHJpbWl0aXZlX3R5cGUoX3R5cGUuYWxpYXNlZF90eXBlKQotICAgICAgICAgICAgZWxpZiBfdHlw
ZS5hbGlhc2VkX3R5cGUucXVhbGlmaWVkX25hbWUoKSBpbiBbJ3N0cmluZyddOgotICAgICAgICAg
ICAgICAgIHJldHVybiAnY29uc3QgJXMmJyAlIGJ1aWxkZXJfdHlwZQotICAgICAgICAgICAgZWxz
ZToKLSAgICAgICAgICAgICAgICByZXR1cm4gYnVpbGRlcl90eXBlCi0gICAgICAgIGlmIGlzaW5z
dGFuY2UoX3R5cGUsIFByaW1pdGl2ZVR5cGUpOgotICAgICAgICAgICAgY3BwX25hbWUgPSBDcHBH
ZW5lcmF0b3IuY3BwX25hbWVfZm9yX3ByaW1pdGl2ZV90eXBlKF90eXBlKQotICAgICAgICAgICAg
aWYgX3R5cGUucXVhbGlmaWVkX25hbWUoKSBpbiBbJ29iamVjdCddOgotICAgICAgICAgICAgICAg
IHJldHVybiAnUmVmUHRyPEpTT046Ok9iamVjdD4nCi0gICAgICAgICAgICBlbGlmIF90eXBlLnF1
YWxpZmllZF9uYW1lKCkgaW4gWydhbnknXToKLSAgICAgICAgICAgICAgICByZXR1cm4gJ1JlZlB0
cjxKU09OOjpWYWx1ZT4nCi0gICAgICAgICAgICBlbGlmIGlzX29wdGlvbmFsOgotICAgICAgICAg
ICAgICAgIHJldHVybiAnY29uc3QgJXMqJyAlIGNwcF9uYW1lCi0gICAgICAgICAgICBlbGlmIF90
eXBlLnF1YWxpZmllZF9uYW1lKCkgaW4gWydzdHJpbmcnXToKLSAgICAgICAgICAgICAgICByZXR1
cm4gJ2NvbnN0ICVzJicgJSBjcHBfbmFtZQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAg
ICAgICByZXR1cm4gY3BwX25hbWUKKyAgICAgICAgICAgIHJldHVybiAnUmVmPCVzPiYmJyAlIENw
cEdlbmVyYXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZShfdHlwZSkKKworICAgICAgICBp
ZiBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpID09ICdvYmplY3QnOgorICAgICAgICAgICAgcmV0dXJu
ICdSZWY8SlNPTjo6T2JqZWN0PiYmJworCisgICAgICAgIGlmIF90eXBlLnF1YWxpZmllZF9uYW1l
KCkgPT0gJ2FycmF5JzoKKyAgICAgICAgICAgIHJldHVybiAnUmVmPEpTT046OkFycmF5PiYmJwor
CisgICAgICAgIGlmIF90eXBlLnF1YWxpZmllZF9uYW1lKCkgPT0gJ2FueSc6CisgICAgICAgICAg
ICByZXR1cm4gJ1JlZjxKU09OOjpWYWx1ZT4mJicKKworICAgICAgICBpZiBfdHlwZS5xdWFsaWZp
ZWRfbmFtZSgpID09ICdzdHJpbmcnOgorICAgICAgICAgICAgcmV0dXJuICdjb25zdCAlcyYnICUg
Q3BwR2VuZXJhdG9yLmNwcF9uYW1lX2Zvcl9wcmltaXRpdmVfdHlwZShfdHlwZSkKKwogICAgICAg
ICBpZiBpc2luc3RhbmNlKF90eXBlLCBFbnVtVHlwZSk6CiAgICAgICAgICAgICBpZiBfdHlwZS5p
c19hbm9ueW1vdXM6Ci0gICAgICAgICAgICAgICAgZW51bV90eXBlX25hbWUgPSB1Y2ZpcnN0KHR5
cGVfbmFtZSkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgZW51bV90eXBlX25h
bWUgPSAnSW5zcGVjdG9yOjpQcm90b2NvbDo6JXM6OiVzJyAlIChfdHlwZS50eXBlX2RvbWFpbigp
LmRvbWFpbl9uYW1lLCBfdHlwZS5yYXdfbmFtZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiB1
Y2ZpcnN0KG5hbWUpCisgICAgICAgICAgICByZXR1cm4gJ1Byb3RvY29sOjolczo6JXMnICUgKF90
eXBlLnR5cGVfZG9tYWluKCkuZG9tYWluX25hbWUsIF90eXBlLnJhd19uYW1lKCkpCiAKLSAgICAg
ICAgICAgIGlmIGlzX29wdGlvbmFsOgotICAgICAgICAgICAgICAgIHJldHVybiAnJXMqJyAlIGVu
dW1fdHlwZV9uYW1lCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJldHVybiAn
JXMnICUgZW51bV90eXBlX25hbWUKLQotICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgY3BwX3R5
cGVfZm9yX2Zvcm1hbF9vdXRfcGFyYW1ldGVyKHBhcmFtZXRlcik6Ci0gICAgICAgIF90eXBlID0g
cGFyYW1ldGVyLnR5cGUKLQotICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBBbGlhc2VkVHlw
ZSk6Ci0gICAgICAgICAgICBfdHlwZSA9IF90eXBlLmFsaWFzZWRfdHlwZSAgIyBGYWxsIHRocm91
Z2guCi0KLSAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgKE9iamVjdFR5cGUsIEFycmF5VHlw
ZSkpOgotICAgICAgICAgICAgcmV0dXJuICdSZWZQdHI8JXM+JicgJSBDcHBHZW5lcmF0b3IuY3Bw
X3Byb3RvY29sX3R5cGVfZm9yX3R5cGUoX3R5cGUpCiAgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5
cGUsIFByaW1pdGl2ZVR5cGUpOgotICAgICAgICAgICAgY3BwX25hbWUgPSBDcHBHZW5lcmF0b3Iu
Y3BwX25hbWVfZm9yX3ByaW1pdGl2ZV90eXBlKF90eXBlKQotICAgICAgICAgICAgaWYgcGFyYW1l
dGVyLmlzX29wdGlvbmFsOgotICAgICAgICAgICAgICAgIHJldHVybiAiT3B0aW9uYWw8JXM+JiIg
JSBjcHBfbmFtZQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByZXR1cm4gJyVz
KicgJSBjcHBfbmFtZQotICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBFbnVtVHlwZSk6Ci0g
ICAgICAgICAgICBpZiBfdHlwZS5pc19hbm9ueW1vdXM6Ci0gICAgICAgICAgICAgICAgcmV0dXJu
ICclc0JhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6JXMqJyAlIChfdHlwZS50eXBlX2RvbWFpbigp
LmRvbWFpbl9uYW1lLCB1Y2ZpcnN0KHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkpCi0gICAgICAg
ICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJldHVybiAnSW5zcGVjdG9yOjpQcm90b2NvbDo6
JXM6OiVzKicgJSAoX3R5cGUudHlwZV9kb21haW4oKS5kb21haW5fbmFtZSwgX3R5cGUucmF3X25h
bWUoKSkKKyAgICAgICAgICAgIHJldHVybiBDcHBHZW5lcmF0b3IuY3BwX25hbWVfZm9yX3ByaW1p
dGl2ZV90eXBlKF90eXBlKQogCi0gICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInVua25vd24gZm9y
bWFsIG91dCBwYXJhbWV0ZXIgdHlwZS4iKQotCi0gICAgIyBGSVhNRTogdGhpcyBpcyBvbmx5IHNs
aWdodGx5IGRpZmZlcmVudCBmcm9tIG91dCBwYXJhbWV0ZXJzOyB0aGV5IGNvdWxkIGJlIHVuaWZp
ZWQuCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBjcHBfdHlwZV9mb3JfZm9ybWFsX2FzeW5j
X3BhcmFtZXRlcihwYXJhbWV0ZXIpOgotICAgICAgICBfdHlwZSA9IHBhcmFtZXRlci50eXBlCi0g
ICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEFsaWFzZWRUeXBlKToKLSAgICAgICAgICAgIF90
eXBlID0gX3R5cGUuYWxpYXNlZF90eXBlICAjIEZhbGwgdGhyb3VnaC4KLQotICAgICAgICBpZiBp
c2luc3RhbmNlKF90eXBlLCAoT2JqZWN0VHlwZSwgQXJyYXlUeXBlKSk6Ci0gICAgICAgICAgICBy
ZXR1cm4gJ1JlZlB0cjwlcz4mJicgJSBDcHBHZW5lcmF0b3IuY3BwX3Byb3RvY29sX3R5cGVfZm9y
X3R5cGUoX3R5cGUpCi0gICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIFByaW1pdGl2ZVR5cGUp
OgotICAgICAgICAgICAgY3BwX25hbWUgPSBDcHBHZW5lcmF0b3IuY3BwX25hbWVfZm9yX3ByaW1p
dGl2ZV90eXBlKF90eXBlKQotICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgot
ICAgICAgICAgICAgICAgIHJldHVybiAiT3B0aW9uYWw8JXM+JiIgJSBjcHBfbmFtZQotICAgICAg
ICAgICAgZWxpZiBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpIGluIFsnaW50ZWdlcicsICdudW1iZXIn
XToKLSAgICAgICAgICAgICAgICByZXR1cm4gQ3BwR2VuZXJhdG9yLmNwcF9uYW1lX2Zvcl9wcmlt
aXRpdmVfdHlwZShfdHlwZSkKLSAgICAgICAgICAgIGVsaWYgX3R5cGUucXVhbGlmaWVkX25hbWUo
KSBpbiBbJ3N0cmluZyddOgotICAgICAgICAgICAgICAgIHJldHVybiAnY29uc3QgJXMmJyAlIGNw
cF9uYW1lCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJldHVybiBjcHBfbmFt
ZQotICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBFbnVtVHlwZSk6Ci0gICAgICAgICAgICBp
ZiBfdHlwZS5pc19hbm9ueW1vdXM6Ci0gICAgICAgICAgICAgICAgY3BwX25hbWUgPSAnJXNCYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXI6OiVzJyAlIChfdHlwZS50eXBlX2RvbWFpbigpLmRvbWFpbl9u
YW1lLCB1Y2ZpcnN0KHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkpCi0gICAgICAgICAgICBlbHNl
OgotICAgICAgICAgICAgICAgIGNwcF9uYW1lID0gJ0luc3BlY3Rvcjo6UHJvdG9jb2w6OiVzOjol
cycgJSAoX3R5cGUudHlwZV9kb21haW4oKS5kb21haW5fbmFtZSwgX3R5cGUucmF3X25hbWUoKSkK
LQotICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgotICAgICAgICAgICAgICAg
IHJldHVybiAiT3B0aW9uYWw8JXM+IiAlIGNwcF9uYW1lCi0gICAgICAgICAgICBlbHNlOgotICAg
ICAgICAgICAgICAgIHJldHVybiBjcHBfbmFtZQotCi0gICAgICAgIHJhaXNlIFZhbHVlRXJyb3Io
IlVua25vd24gZm9ybWFsIGFzeW5jIHBhcmFtZXRlciB0eXBlLiIpCisgICAgICAgIHJhaXNlIFZh
bHVlRXJyb3IoInVua25vd24gdHlwZSIpCiAKICAgICAjIEluLXBhcmFtZXRlcnMgZG9uJ3QgdXNl
IGJ1aWxkZXIgdHlwZXMsIGJlY2F1c2UgdGhleSBjb3VsZCBiZSBwYXNzZWQKICAgICAjICJvcGVu
IHR5cGVzIiB0aGF0IGFyZSBtYW51YWxseSBjb25zdHJ1Y3RlZCBvdXQgb2YgSW5zcGVjdG9yT2Jq
ZWN0cy4KLQotICAgICMgRklYTUU6IE9ubHkgcGFyYW1ldGVycyB0aGF0IGFyZSBhY3R1YWxseSBv
cGVuIHR5cGVzIHNob3VsZCBuZWVkIG5vbi1idWlsZGVyIHBhcmFtZXRlciB0eXBlcy4KICAgICBA
c3RhdGljbWV0aG9kCi0gICAgZGVmIGNwcF90eXBlX2Zvcl9zdGFja19pbl9wYXJhbWV0ZXIocGFy
YW1ldGVyKToKLSAgICAgICAgX3R5cGUgPSBwYXJhbWV0ZXIudHlwZQorICAgIGRlZiBjcHBfdHlw
ZV9mb3JfY29tbWFuZF9wYXJhbWV0ZXIoX3R5cGUsIGlzX29wdGlvbmFsKToKICAgICAgICAgaWYg
aXNpbnN0YW5jZShfdHlwZSwgQWxpYXNlZFR5cGUpOgotICAgICAgICAgICAgX3R5cGUgPSBfdHlw
ZS5hbGlhc2VkX3R5cGUgICMgRmFsbCB0aHJvdWdoLgorICAgICAgICAgICAgX3R5cGUgPSBfdHlw
ZS5hbGlhc2VkX3R5cGUKKyAgICAgICAgICAgICMgZmFsbHRocm91Z2gKKworICAgICAgICBpZiBp
c2luc3RhbmNlKF90eXBlLCBFbnVtVHlwZSkgYW5kIF90eXBlLmlzX2Fub255bW91czoKKyAgICAg
ICAgICAgIF90eXBlID0gX3R5cGUucHJpbWl0aXZlX3R5cGUKKyAgICAgICAgICAgICMgZmFsbHRo
cm91Z2gKKworICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBPYmplY3RUeXBlKSBvciBfdHlw
ZS5xdWFsaWZpZWRfbmFtZSgpID09ICdvYmplY3QnOgorICAgICAgICAgICAgaWYgaXNfb3B0aW9u
YWw6CisgICAgICAgICAgICAgICAgcmV0dXJuICdSZWZQdHI8SlNPTjo6T2JqZWN0PiYmJworICAg
ICAgICAgICAgcmV0dXJuICdSZWY8SlNPTjo6T2JqZWN0PiYmJworCisgICAgICAgIGlmIGlzaW5z
dGFuY2UoX3R5cGUsIEFycmF5VHlwZSkgb3IgX3R5cGUucXVhbGlmaWVkX25hbWUoKSA9PSAnYXJy
YXknOgorICAgICAgICAgICAgaWYgaXNfb3B0aW9uYWw6CisgICAgICAgICAgICAgICAgcmV0dXJu
ICdSZWZQdHI8SlNPTjo6QXJyYXk+JiYnCisgICAgICAgICAgICByZXR1cm4gJ1JlZjxKU09OOjpB
cnJheT4mJicKKworICAgICAgICBpZiBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpID09ICdhbnknOgor
ICAgICAgICAgICAgaWYgaXNfb3B0aW9uYWw6CisgICAgICAgICAgICAgICAgcmV0dXJuICdSZWZQ
dHI8SlNPTjo6VmFsdWU+JiYnCisgICAgICAgICAgICByZXR1cm4gJ1JlZjxKU09OOjpWYWx1ZT4m
JicKKworICAgICAgICBpZiBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpID09ICdzdHJpbmcnOgorICAg
ICAgICAgICAgcmV0dXJuICdjb25zdCAlcyYnICUgQ3BwR2VuZXJhdG9yLmNwcF9uYW1lX2Zvcl9w
cmltaXRpdmVfdHlwZShfdHlwZSkKIAogICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBFbnVt
VHlwZSk6Ci0gICAgICAgICAgICBfdHlwZSA9IF90eXBlLnByaW1pdGl2ZV90eXBlICAjIEZhbGwg
dGhyb3VnaC4KLQotICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBPYmplY3RUeXBlKToKLSAg
ICAgICAgICAgIHJldHVybiAiUmVmUHRyPEpTT046Ok9iamVjdD4iCi0gICAgICAgIGlmIGlzaW5z
dGFuY2UoX3R5cGUsIEFycmF5VHlwZSk6Ci0gICAgICAgICAgICByZXR1cm4gIlJlZlB0cjxKU09O
OjpBcnJheT4iCi0gICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIFByaW1pdGl2ZVR5cGUpOgor
ICAgICAgICAgICAgY3BwX25hbWUgPSAnUHJvdG9jb2w6OiVzOjolcycgJSAoX3R5cGUudHlwZV9k
b21haW4oKS5kb21haW5fbmFtZSwgX3R5cGUucmF3X25hbWUoKSkKKyAgICAgICAgZWxpZiBpc2lu
c3RhbmNlKF90eXBlLCBQcmltaXRpdmVUeXBlKToKICAgICAgICAgICAgIGNwcF9uYW1lID0gQ3Bw
R2VuZXJhdG9yLmNwcF9uYW1lX2Zvcl9wcmltaXRpdmVfdHlwZShfdHlwZSkKLSAgICAgICAgICAg
IGlmIF90eXBlLnF1YWxpZmllZF9uYW1lKCkgaW4gWydhbnknLCAnb2JqZWN0J106Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuICJSZWZQdHI8JXM+IiAlIENwcEdlbmVyYXRvci5jcHBfbmFtZV9mb3Jf
cHJpbWl0aXZlX3R5cGUoX3R5cGUpCi0gICAgICAgICAgICBlbGlmIHBhcmFtZXRlci5pc19vcHRp
b25hbCBhbmQgX3R5cGUucXVhbGlmaWVkX25hbWUoKSBub3QgaW4gWydib29sZWFuJywgJ3N0cmlu
ZycsICdpbnRlZ2VyJywgJ251bWJlciddOgotICAgICAgICAgICAgICAgIHJldHVybiAiT3B0aW9u
YWw8JXM+IiAlIGNwcF9uYW1lCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJl
dHVybiBjcHBfbmFtZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJv
cigidW5rbm93biB0eXBlIikKKworICAgICAgICBpZiBpc19vcHRpb25hbDoKKyAgICAgICAgICAg
IGNwcF9uYW1lID0gJ09wdGlvbmFsPCVzPiYmJyAlIGNwcF9uYW1lCisgICAgICAgIHJldHVybiBj
cHBfbmFtZQogCiAgICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBjcHBfdHlwZV9mb3Jfc3RhY2tf
b3V0X3BhcmFtZXRlcihwYXJhbWV0ZXIpOgotICAgICAgICBfdHlwZSA9IHBhcmFtZXRlci50eXBl
CisgICAgZGVmIGNwcF90eXBlX2Zvcl9jb21tYW5kX3JldHVybl9kZWNsYXJhdGlvbihfdHlwZSwg
aXNfb3B0aW9uYWwpOgorICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBBbGlhc2VkVHlwZSk6
CisgICAgICAgICAgICBfdHlwZSA9IF90eXBlLmFsaWFzZWRfdHlwZQorICAgICAgICAgICAgIyBm
YWxsdGhyb3VnaAorCisgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKSBhbmQg
X3R5cGUuaXNfYW5vbnltb3VzOgorICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5wcmltaXRpdmVf
dHlwZQorICAgICAgICAgICAgIyBmYWxsdGhyb3VnaAorCiAgICAgICAgIGlmIGlzaW5zdGFuY2Uo
X3R5cGUsIChBcnJheVR5cGUsIE9iamVjdFR5cGUpKToKLSAgICAgICAgICAgIHJldHVybiAnUmVm
UHRyPCVzPicgJSBDcHBHZW5lcmF0b3IuY3BwX3Byb3RvY29sX3R5cGVfZm9yX3R5cGUoX3R5cGUp
Ci0gICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEFsaWFzZWRUeXBlKToKLSAgICAgICAgICAg
IGJ1aWxkZXJfdHlwZSA9IENwcEdlbmVyYXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZShf
dHlwZSkKLSAgICAgICAgICAgIGlmIHBhcmFtZXRlci5pc19vcHRpb25hbDoKLSAgICAgICAgICAg
ICAgICByZXR1cm4gIk9wdGlvbmFsPCVzPiIgJSBidWlsZGVyX3R5cGUKLSAgICAgICAgICAgIHJl
dHVybiAnJXMnICUgYnVpbGRlcl90eXBlCi0gICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIFBy
aW1pdGl2ZVR5cGUpOgotICAgICAgICAgICAgY3BwX25hbWUgPSBDcHBHZW5lcmF0b3IuY3BwX25h
bWVfZm9yX3ByaW1pdGl2ZV90eXBlKF90eXBlKQotICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlz
X29wdGlvbmFsOgotICAgICAgICAgICAgICAgIHJldHVybiAiT3B0aW9uYWw8JXM+IiAlIGNwcF9u
YW1lCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJldHVybiBjcHBfbmFtZQor
ICAgICAgICAgICAgaWYgaXNfb3B0aW9uYWw6CisgICAgICAgICAgICAgICAgcmV0dXJuICdSZWZQ
dHI8JXM+JyAlIENwcEdlbmVyYXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZShfdHlwZSkK
KyAgICAgICAgICAgIHJldHVybiAnUmVmPCVzPicgJSBDcHBHZW5lcmF0b3IuY3BwX3Byb3RvY29s
X3R5cGVfZm9yX3R5cGUoX3R5cGUpCisKKyAgICAgICAgaWYgX3R5cGUucXVhbGlmaWVkX25hbWUo
KSA9PSAnb2JqZWN0JzoKKyAgICAgICAgICAgIGlmIGlzX29wdGlvbmFsOgorICAgICAgICAgICAg
ICAgIHJldHVybiAnUmVmUHRyPEpTT046Ok9iamVjdD4nCisgICAgICAgICAgICByZXR1cm4gJ1Jl
ZjxKU09OOjpPYmplY3Q+JworCisgICAgICAgIGlmIF90eXBlLnF1YWxpZmllZF9uYW1lKCkgPT0g
J2FycmF5JzoKKyAgICAgICAgICAgIGlmIGlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAgIHJl
dHVybiAnUmVmUHRyPEpTT046OkFycmF5PicKKyAgICAgICAgICAgIHJldHVybiAnUmVmPEpTT046
OkFycmF5PicKKworICAgICAgICBpZiBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpID09ICdhbnknOgor
ICAgICAgICAgICAgaWYgaXNfb3B0aW9uYWw6CisgICAgICAgICAgICAgICAgcmV0dXJuICdSZWZQ
dHI8SlNPTjo6VmFsdWU+JworICAgICAgICAgICAgcmV0dXJuICdSZWY8SlNPTjo6VmFsdWU+Jwor
CisgICAgICAgIGlmIF90eXBlLnF1YWxpZmllZF9uYW1lKCkgPT0gJ3N0cmluZyc6CisgICAgICAg
ICAgICByZXR1cm4gQ3BwR2VuZXJhdG9yLmNwcF9uYW1lX2Zvcl9wcmltaXRpdmVfdHlwZShfdHlw
ZSkKKwogICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBFbnVtVHlwZSk6Ci0gICAgICAgICAg
ICBpZiBfdHlwZS5pc19hbm9ueW1vdXM6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICclc0JhY2tl
bmREaXNwYXRjaGVySGFuZGxlcjo6JXMnICUgKF90eXBlLnR5cGVfZG9tYWluKCkuZG9tYWluX25h
bWUsIHVjZmlyc3QocGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKSkKLSAgICAgICAgICAgIGVsc2U6
Ci0gICAgICAgICAgICAgICAgcmV0dXJuICdJbnNwZWN0b3I6OlByb3RvY29sOjolczo6JXMnICUg
KF90eXBlLnR5cGVfZG9tYWluKCkuZG9tYWluX25hbWUsIF90eXBlLnJhd19uYW1lKCkpCisgICAg
ICAgICAgICBjcHBfbmFtZSA9ICdQcm90b2NvbDo6JXM6OiVzJyAlIChfdHlwZS50eXBlX2RvbWFp
bigpLmRvbWFpbl9uYW1lLCBfdHlwZS5yYXdfbmFtZSgpKQorICAgICAgICBlbGlmIGlzaW5zdGFu
Y2UoX3R5cGUsIFByaW1pdGl2ZVR5cGUpOgorICAgICAgICAgICAgY3BwX25hbWUgPSBDcHBHZW5l
cmF0b3IuY3BwX25hbWVfZm9yX3ByaW1pdGl2ZV90eXBlKF90eXBlKQorICAgICAgICBlbHNlOgor
ICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigidW5rbm93biB0eXBlIikKKworICAgICAgICBp
ZiBpc19vcHRpb25hbDoKKyAgICAgICAgICAgIGNwcF9uYW1lID0gJ09wdGlvbmFsPCVzPicgJSBj
cHBfbmFtZQorICAgICAgICByZXR1cm4gY3BwX25hbWUKIAogICAgIEBzdGF0aWNtZXRob2QKLSAg
ICBkZWYgY3BwX2Fzc2VydGlvbl9tZXRob2RfZm9yX3R5cGVfbWVtYmVyKHR5cGVfbWVtYmVyLCBv
YmplY3RfZGVjbGFyYXRpb24pOgorICAgIGRlZiBjcHBfdHlwZV9mb3JfY29tbWFuZF9yZXR1cm5f
YXJndW1lbnQoX3R5cGUsIGlzX29wdGlvbmFsKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlw
ZSwgQWxpYXNlZFR5cGUpOgorICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5hbGlhc2VkX3R5cGUK
KyAgICAgICAgICAgICMgZmFsbHRocm91ZwogCi0gICAgICAgIGRlZiBhc3NlcnRpb25fbWV0aG9k
X2Zvcl90eXBlKF90eXBlKToKLSAgICAgICAgICAgIHJldHVybiAnQmluZGluZ1RyYWl0czwlcz46
OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlJyAlIENwcEdlbmVyYXRvci5jcHBfcHJvdG9jb2xf
dHlwZV9mb3JfdHlwZShfdHlwZSkKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgRW51bVR5
cGUpIGFuZCBfdHlwZS5pc19hbm9ueW1vdXM6CisgICAgICAgICAgICBfdHlwZSA9IF90eXBlLnBy
aW1pdGl2ZV90eXBlCisgICAgICAgICAgICAjIGZhbGx0aHJvdWdoCiAKLSAgICAgICAgaWYgaXNp
bnN0YW5jZSh0eXBlX21lbWJlci50eXBlLCBBbGlhc2VkVHlwZSk6Ci0gICAgICAgICAgICByZXR1
cm4gYXNzZXJ0aW9uX21ldGhvZF9mb3JfdHlwZSh0eXBlX21lbWJlci50eXBlLmFsaWFzZWRfdHlw
ZSkKLSAgICAgICAgaWYgaXNpbnN0YW5jZSh0eXBlX21lbWJlci50eXBlLCBFbnVtVHlwZSkgYW5k
IHR5cGVfbWVtYmVyLnR5cGUuaXNfYW5vbnltb3VzOgotICAgICAgICAgICAgcmV0dXJuICdCaW5k
aW5nVHJhaXRzPCVzPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUnICUgQ3BwR2VuZXJhdG9y
LmNwcF9wcm90b2NvbF90eXBlX2Zvcl90eXBlX21lbWJlcih0eXBlX21lbWJlciwgb2JqZWN0X2Rl
Y2xhcmF0aW9uKQorICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCAoQXJyYXlUeXBlLCBPYmpl
Y3RUeXBlKSk6CisgICAgICAgICAgICBpZiBpc19vcHRpb25hbDoKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gJ1JlZlB0cjwlcz4mJicgJSBDcHBHZW5lcmF0b3IuY3BwX3Byb3RvY29sX3R5cGVfZm9y
X3R5cGUoX3R5cGUpCisgICAgICAgICAgICByZXR1cm4gJ1JlZjwlcz4mJicgJSBDcHBHZW5lcmF0
b3IuY3BwX3Byb3RvY29sX3R5cGVfZm9yX3R5cGUoX3R5cGUpCiAKLSAgICAgICAgcmV0dXJuIGFz
c2VydGlvbl9tZXRob2RfZm9yX3R5cGUodHlwZV9tZW1iZXIudHlwZSkKKyAgICAgICAgaWYgX3R5
cGUucXVhbGlmaWVkX25hbWUoKSA9PSAnb2JqZWN0JzoKKyAgICAgICAgICAgIGlmIGlzX29wdGlv
bmFsOgorICAgICAgICAgICAgICAgIHJldHVybiAnUmVmUHRyPEpTT046Ok9iamVjdD4mJicKKyAg
ICAgICAgICAgIHJldHVybiAnUmVmPEpTT046Ok9iamVjdD4mJicKKworICAgICAgICBpZiBfdHlw
ZS5xdWFsaWZpZWRfbmFtZSgpID09ICdhcnJheSc6CisgICAgICAgICAgICBpZiBpc19vcHRpb25h
bDoKKyAgICAgICAgICAgICAgICByZXR1cm4gJ1JlZlB0cjxKU09OOjpBcnJheT4mJicKKyAgICAg
ICAgICAgIHJldHVybiAnUmVmPEpTT046OkFycmF5PiYmJworCisgICAgICAgIGlmIF90eXBlLnF1
YWxpZmllZF9uYW1lKCkgPT0gJ2FueSc6CisgICAgICAgICAgICBpZiBpc19vcHRpb25hbDoKKyAg
ICAgICAgICAgICAgICByZXR1cm4gJ1JlZlB0cjxKU09OOjpWYWx1ZT4mJicKKyAgICAgICAgICAg
IHJldHVybiAnUmVmPEpTT046OlZhbHVlPiYmJworCisgICAgICAgIGlmIF90eXBlLnF1YWxpZmll
ZF9uYW1lKCkgPT0gJ3N0cmluZyc6CisgICAgICAgICAgICByZXR1cm4gJ2NvbnN0ICVzJicgJSBD
cHBHZW5lcmF0b3IuY3BwX25hbWVfZm9yX3ByaW1pdGl2ZV90eXBlKF90eXBlKQorCisgICAgICAg
IGlmIGlzaW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKToKKyAgICAgICAgICAgIGNwcF9uYW1lID0g
J1Byb3RvY29sOjolczo6JXMnICUgKF90eXBlLnR5cGVfZG9tYWluKCkuZG9tYWluX25hbWUsIF90
eXBlLnJhd19uYW1lKCkpCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShfdHlwZSwgUHJpbWl0aXZl
VHlwZSk6CisgICAgICAgICAgICBjcHBfbmFtZSA9IENwcEdlbmVyYXRvci5jcHBfbmFtZV9mb3Jf
cHJpbWl0aXZlX3R5cGUoX3R5cGUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBW
YWx1ZUVycm9yKCJ1bmtub3duIHR5cGUiKQorCisgICAgICAgIGlmIGlzX29wdGlvbmFsOgorICAg
ICAgICAgICAgY3BwX25hbWUgPSAnT3B0aW9uYWw8JXM+JiYnICUgY3BwX25hbWUKKyAgICAgICAg
cmV0dXJuIGNwcF9uYW1lCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGNwcF90eXBlX2Zv
cl9ldmVudF9wYXJhbWV0ZXIoX3R5cGUsIGlzX29wdGlvbmFsKToKKyAgICAgICAgaWYgaXNpbnN0
YW5jZShfdHlwZSwgQWxpYXNlZFR5cGUpOgorICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5hbGlh
c2VkX3R5cGUKKyAgICAgICAgICAgICMgZmFsbHRocm91Z2gKKworICAgICAgICBpZiBpc2luc3Rh
bmNlKF90eXBlLCBFbnVtVHlwZSkgYW5kIF90eXBlLmlzX2Fub255bW91czoKKyAgICAgICAgICAg
IF90eXBlID0gX3R5cGUucHJpbWl0aXZlX3R5cGUKKyAgICAgICAgICAgICMgZmFsbHRocm91Z2gK
KworICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCAoQXJyYXlUeXBlLCBPYmplY3RUeXBlKSk6
CisgICAgICAgICAgICBpZiBpc19vcHRpb25hbDoKKyAgICAgICAgICAgICAgICByZXR1cm4gJ1Jl
ZlB0cjwlcz4mJicgJSBDcHBHZW5lcmF0b3IuY3BwX3Byb3RvY29sX3R5cGVfZm9yX3R5cGUoX3R5
cGUpCisgICAgICAgICAgICByZXR1cm4gJ1JlZjwlcz4mJicgJSBDcHBHZW5lcmF0b3IuY3BwX3By
b3RvY29sX3R5cGVfZm9yX3R5cGUoX3R5cGUpCisKKyAgICAgICAgaWYgX3R5cGUucXVhbGlmaWVk
X25hbWUoKSA9PSAnb2JqZWN0JzoKKyAgICAgICAgICAgIGlmIGlzX29wdGlvbmFsOgorICAgICAg
ICAgICAgICAgIHJldHVybiAnUmVmUHRyPEpTT046Ok9iamVjdD4mJicKKyAgICAgICAgICAgIHJl
dHVybiAnUmVmPEpTT046Ok9iamVjdD4mJicKKworICAgICAgICBpZiBfdHlwZS5xdWFsaWZpZWRf
bmFtZSgpID09ICdhcnJheSc6CisgICAgICAgICAgICBpZiBpc19vcHRpb25hbDoKKyAgICAgICAg
ICAgICAgICByZXR1cm4gJ1JlZlB0cjxKU09OOjpBcnJheT4mJicKKyAgICAgICAgICAgIHJldHVy
biAnUmVmPEpTT046OkFycmF5PiYmJworCisgICAgICAgIGlmIF90eXBlLnF1YWxpZmllZF9uYW1l
KCkgPT0gJ2FueSc6CisgICAgICAgICAgICBpZiBpc19vcHRpb25hbDoKKyAgICAgICAgICAgICAg
ICByZXR1cm4gJ1JlZlB0cjxKU09OOjpWYWx1ZT4mJicKKyAgICAgICAgICAgIHJldHVybiAnUmVm
PEpTT046OlZhbHVlPiYmJworCisgICAgICAgIGlmIF90eXBlLnF1YWxpZmllZF9uYW1lKCkgPT0g
J3N0cmluZyc6CisgICAgICAgICAgICByZXR1cm4gJ2NvbnN0ICVzJicgJSBDcHBHZW5lcmF0b3Iu
Y3BwX25hbWVfZm9yX3ByaW1pdGl2ZV90eXBlKF90eXBlKQorCisgICAgICAgIGlmIGlzaW5zdGFu
Y2UoX3R5cGUsIEVudW1UeXBlKToKKyAgICAgICAgICAgIGNwcF9uYW1lID0gJ1Byb3RvY29sOjol
czo6JXMnICUgKF90eXBlLnR5cGVfZG9tYWluKCkuZG9tYWluX25hbWUsIF90eXBlLnJhd19uYW1l
KCkpCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShfdHlwZSwgUHJpbWl0aXZlVHlwZSk6CisgICAg
ICAgICAgICBjcHBfbmFtZSA9IENwcEdlbmVyYXRvci5jcHBfbmFtZV9mb3JfcHJpbWl0aXZlX3R5
cGUoX3R5cGUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJ1
bmtub3duIHR5cGUiKQorCisgICAgICAgIGlmIGlzX29wdGlvbmFsOgorICAgICAgICAgICAgY3Bw
X25hbWUgPSAnT3B0aW9uYWw8JXM+JiYnICUgY3BwX25hbWUKKyAgICAgICAgcmV0dXJuIGNwcF9u
YW1lCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGNwcF90eXBlX2Zvcl9lbnVtKGVudW1f
dHlwZSwgbmFtZSk6CisgICAgICAgIGlmIGVudW1fdHlwZS5pc19hbm9ueW1vdXM6CisgICAgICAg
ICAgICByZXR1cm4gJ1Byb3RvY29sOjolczo6JXMnICUgKGVudW1fdHlwZS50eXBlX2RvbWFpbigp
LmRvbWFpbl9uYW1lLCB1Y2ZpcnN0KG5hbWUpKQorICAgICAgICByZXR1cm4gJ1Byb3RvY29sOjol
czo6JXMnICUgKGVudW1fdHlwZS50eXBlX2RvbWFpbigpLmRvbWFpbl9uYW1lLCBlbnVtX3R5cGUu
cmF3X25hbWUoKSkKIAogICAgIEBzdGF0aWNtZXRob2QKICAgICBkZWYgY3BwX25hbWVfZm9yX3By
aW1pdGl2ZV90eXBlKF90eXBlKToKICAgICAgICAgcmV0dXJuIF9QUklNSVRJVkVfVE9fQ1BQX05B
TUVfTUFQLmdldChfdHlwZS5yYXdfbmFtZSgpKQogCi0gICAgIyBEZWNpZGUgd2hldGhlciBjZXJ0
YWluIGhlbHBlcnMgYXJlIG5lY2Vzc2FyeSBpbiBhIHNpdHVhdGlvbi4KICAgICBAc3RhdGljbWV0
aG9kCi0gICAgZGVmIHNob3VsZF91c2Vfd3JhcHBlcl9mb3JfcmV0dXJuX3R5cGUoX3R5cGUpOgot
ICAgICAgICByZXR1cm4gbm90IGlzaW5zdGFuY2UoX3R5cGUsIChBcnJheVR5cGUsIE9iamVjdFR5
cGUpKQorICAgIGRlZiBzaG91bGRfbW92ZV9hcmd1bWVudChfdHlwZSwgaXNfb3B0aW9uYWwpOgor
ICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBBbGlhc2VkVHlwZSk6CisgICAgICAgICAgICBf
dHlwZSA9IF90eXBlLmFsaWFzZWRfdHlwZQorICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBF
bnVtVHlwZSk6CisgICAgICAgICAgICBfdHlwZSA9IF90eXBlLnByaW1pdGl2ZV90eXBlCisKKyAg
ICAgICAgaWYgX3R5cGUucmF3X25hbWUoKSA9PSAnc3RyaW5nJzoKKyAgICAgICAgICAgIHJldHVy
biBGYWxzZQorICAgICAgICByZXR1cm4gaXNfb3B0aW9uYWwgPT0gKF90eXBlLnJhd19uYW1lKCkg
aW4gWydib29sZWFuJywgJ2ludGVnZXInLCAnbnVtYmVyJ10pCiAKICAgICBAc3RhdGljbWV0aG9k
Ci0gICAgZGVmIHNob3VsZF91c2VfcmVmZXJlbmNlc19mb3JfdHlwZShfdHlwZSk6Ci0gICAgICAg
IHJldHVybiBpc2luc3RhbmNlKF90eXBlLCAoQXJyYXlUeXBlLCBPYmplY3RUeXBlKSkgb3IgKGlz
aW5zdGFuY2UoX3R5cGUsIChQcmltaXRpdmVUeXBlKSkgYW5kIF90eXBlLnF1YWxpZmllZF9uYW1l
KCkgaW4gWyJhbnkiLCAib2JqZWN0Il0pCisgICAgZGVmIHNob3VsZF9yZWxlYXNlX2FyZ3VtZW50
KF90eXBlLCBpc19vcHRpb25hbCk6CisgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEFsaWFz
ZWRUeXBlKToKKyAgICAgICAgICAgIF90eXBlID0gX3R5cGUuYWxpYXNlZF90eXBlCisgICAgICAg
IGlmIGlzaW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKToKKyAgICAgICAgICAgIF90eXBlID0gX3R5
cGUucHJpbWl0aXZlX3R5cGUKKworICAgICAgICBpZiBfdHlwZS5yYXdfbmFtZSgpID09ICdzdHJp
bmcnOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGlmIF90eXBlLnJhd19uYW1l
KCkgaW4gWydib29sZWFuJywgJ2ludGVnZXInLCAnbnVtYmVyJ106CisgICAgICAgICAgICByZXR1
cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIGlzX29wdGlvbmFsCiAKICAgICBAc3RhdGljbWV0aG9k
Ci0gICAgZGVmIHNob3VsZF9wYXNzX2J5X2NvcHlfZm9yX3JldHVybl90eXBlKF90eXBlKToKLSAg
ICAgICAgcmV0dXJuIGlzaW5zdGFuY2UoX3R5cGUsIChBcnJheVR5cGUsIE9iamVjdFR5cGUpKSBv
ciAoaXNpbnN0YW5jZShfdHlwZSwgKFByaW1pdGl2ZVR5cGUpKSBhbmQgX3R5cGUucXVhbGlmaWVk
X25hbWUoKSA9PSAib2JqZWN0IikKKyAgICBkZWYgc2hvdWxkX2RlcmVmZXJlbmNlX2FyZ3VtZW50
KF90eXBlLCBpc19vcHRpb25hbCk6CisgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEFsaWFz
ZWRUeXBlKToKKyAgICAgICAgICAgIF90eXBlID0gX3R5cGUuYWxpYXNlZF90eXBlCisgICAgICAg
IGlmIGlzaW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKToKKyAgICAgICAgICAgIF90eXBlID0gX3R5
cGUucHJpbWl0aXZlX3R5cGUKKworICAgICAgICBpZiBfdHlwZS5yYXdfbmFtZSgpID09ICdzdHJp
bmcnOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGlmIF90eXBlLnJhd19uYW1l
KCkgbm90IGluIFsnYm9vbGVhbicsICdpbnRlZ2VyJywgJ251bWJlciddOgorICAgICAgICAgICAg
cmV0dXJuIEZhbHNlCisgICAgICAgIHJldHVybiBpc19vcHRpb25hbApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vY3BwX2dlbmVyYXRv
cl90ZW1wbGF0ZXMucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Y29kZWdlbi9jcHBfZ2VuZXJhdG9yX3RlbXBsYXRlcy5weQppbmRleCAwODJiZTMzZjE1ZGUyNWJl
ODg5NTdjYjE0MjI5MzUyMDM2ZWUyMmNmLi43Yzg0ODU3ODZlOWNkY2YxNDJlOTM5NjJhZTJjZjRk
MTA3MWUxZDg3IDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvY29kZWdlbi9jcHBfZ2VuZXJhdG9yX3RlbXBsYXRlcy5weQorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9jcHBfZ2VuZXJhdG9yX3RlbXBs
YXRlcy5weQpAQCAtOTUsNyArOTUsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgIiIiJHtjbGFzc0FuZEV4
cG9ydE1hY3JvfSAke2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMg
U3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIgewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8
JHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUoQmFja2VuZERpc3BhdGNoZXIm
LCAke2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7Ci0gICAgdm9pZCBkaXNw
YXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmpl
Y3Q+JiYgbWVzc2FnZSkgZmluYWw7CisgICAgdm9pZCBkaXNwYXRjaChsb25nIHByb3RvY29sX2Nh
bGxJZCwgY29uc3QgU3RyaW5nJiBwcm90b2NvbF9tZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYg
cHJvdG9jb2xfbWVzc2FnZSkgZmluYWw7CiAke2NvbW1hbmREZWNsYXJhdGlvbnN9CiBwcml2YXRl
OgogICAgICR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYs
ICR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKQEAgLTExNCwzMiArMTE0
LDMwIEBAIHByaXZhdGU6CiAgICAgIiIiICAgICR7Y2xhc3NBbmRFeHBvcnRNYWNyb30gJHtjYWxs
YmFja05hbWV9IDogcHVibGljIEJhY2tlbmREaXNwYXRjaGVyOjpDYWxsYmFja0Jhc2UgewogICAg
IHB1YmxpYzoKICAgICAgICAgJHtjYWxsYmFja05hbWV9KFJlZjxCYWNrZW5kRGlzcGF0Y2hlcj4m
JiwgaW50IGlkKTsKLSAgICAgICAgdm9pZCBzZW5kU3VjY2Vzcygke291dFBhcmFtZXRlcnN9KTsK
KyAgICAgICAgdm9pZCBzZW5kU3VjY2Vzcygke3JldHVybnN9KTsKICAgICB9OwotICAgIHZpcnR1
YWwgdm9pZCAke2NvbW1hbmROYW1lfSgke2luUGFyYW1ldGVyc30pID0gMDsiIiIpCisgICAgdmly
dHVhbCB2b2lkICR7Y29tbWFuZE5hbWV9KCR7cGFyYW1ldGVyc30pID0gMDsiIiIpCiAKICAgICBC
YWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uU21hbGxTd2l0Y2ggPSAoCi0gICAgIiIidm9p
ZCAke2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElk
LCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKQorICAg
ICIiInZvaWQgJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHBy
b3RvY29sX2NhbGxJZCwgY29uc3QgU3RyaW5nJiBwcm90b2NvbF9tZXRob2QsIFJlZjxKU09OOjpP
YmplY3Q+JiYgcHJvdG9jb2xfbWVzc2FnZSkKIHsKICAgICBSZWY8JHtkb21haW5OYW1lfUJhY2tl
bmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKIAotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+
IHBhcmFtZXRlcnM7Ci0gICAgbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3MsIHBhcmFtZXRl
cnMpOworICAgIGF1dG8gcHJvdG9jb2xfcGFyYW1ldGVycyA9IHByb3RvY29sX21lc3NhZ2UtPmdl
dE9iamVjdCgicGFyYW1zIl9zKTsKIAogJHtkaXNwYXRjaENhc2VzfQogCi0gICAgbV9iYWNrZW5k
RGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9k
Tm90Rm91bmQsICInJHtkb21haW5OYW1lfS4iICsgbWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIp
OworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERp
c3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJyR7ZG9tYWluTmFtZX0uIiArIHByb3RvY29sX21l
dGhvZCArICInIHdhcyBub3QgZm91bmQiKTsKIH0iIiIpCiAKICAgICBCYWNrZW5kRGlzcGF0Y2hl
ckltcGxlbWVudGF0aW9uTGFyZ2VTd2l0Y2ggPSAoCi0iIiJ2b2lkICR7ZG9tYWluTmFtZX1CYWNr
ZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0
aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpCisiIiJ2b2lkICR7ZG9tYWluTmFtZX1C
YWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyBwcm90b2NvbF9jYWxsSWQsIGNvbnN0IFN0
cmluZyYgcHJvdG9jb2xfbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX21lc3Nh
Z2UpCiB7CiAgICAgUmVmPCR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgq
dGhpcyk7CiAKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzOwotICAgIG1lc3Nh
Z2UtPmdldE9iamVjdCgicGFyYW1zIl9zLCBwYXJhbWV0ZXJzKTsKKyAgICBhdXRvIHByb3RvY29s
X3BhcmFtZXRlcnMgPSBwcm90b2NvbF9tZXNzYWdlLT5nZXRPYmplY3QoInBhcmFtcyJfcyk7CiAK
LSAgICB1c2luZyBDYWxsSGFuZGxlciA9IHZvaWQgKCR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0
Y2hlcjo6KikobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSk7
CisgICAgdXNpbmcgQ2FsbEhhbmRsZXIgPSB2b2lkICgke2RvbWFpbk5hbWV9QmFja2VuZERpc3Bh
dGNoZXI6OiopKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBy
b3RvY29sX21lc3NhZ2UpOwogICAgIHVzaW5nIERpc3BhdGNoTWFwID0gSGFzaE1hcDxTdHJpbmcs
IENhbGxIYW5kbGVyPjsKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8RGlzcGF0Y2hNYXA+IGRp
c3BhdGNoTWFwOwogICAgIGlmIChkaXNwYXRjaE1hcC5nZXQoKS5pc0VtcHR5KCkpIHsKQEAgLTE1
NCwxMyArMTUyLDEzIEBAICR7ZGlzcGF0Y2hDYXNlc30KICAgICAgICAgICAgIGRpc3BhdGNoTWFw
LmdldCgpLmFkZChjb21tYW5kc1tpXS5uYW1lLCBjb21tYW5kc1tpXS5oYW5kbGVyKTsKICAgICB9
CiAKLSAgICBhdXRvIGZpbmRSZXN1bHQgPSBkaXNwYXRjaE1hcC5nZXQoKS5maW5kKG1ldGhvZCk7
CisgICAgYXV0byBmaW5kUmVzdWx0ID0gZGlzcGF0Y2hNYXAuZ2V0KCkuZmluZChwcm90b2NvbF9t
ZXRob2QpOwogICAgIGlmIChmaW5kUmVzdWx0ID09IGRpc3BhdGNoTWFwLmdldCgpLmVuZCgpKSB7
Ci0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2Vu
ZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJyR7ZG9tYWluTmFtZX0uIiArIG1ldGhvZCAr
ICInIHdhcyBub3QgZm91bmQiKTsKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0
UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInJHtkb21h
aW5OYW1lfS4iICsgcHJvdG9jb2xfbWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgKCgqdGhpcykuKmZpbmRSZXN1bHQtPnZhbHVlKShyZXF1
ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykpOworICAgICgoKnRoaXMpLipmaW5kUmVzdWx0LT52
YWx1ZSkocHJvdG9jb2xfY2FsbElkLCBXVEZNb3ZlKHByb3RvY29sX3BhcmFtZXRlcnMpKTsKIH0i
IiIpCiAKICAgICBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uRG9tYWluQ29uc3RydWN0
b3IgPSAoCkBAIC0xNzcsNyArMTc1LDcgQEAgJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVy
Ojoke2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXIKIH0iIiIp
CiAKICAgICBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uUHJlcGFyZUNvbW1hbmRBcmd1
bWVudHMgPSAoCi0iIiIke2luUGFyYW1ldGVyRGVjbGFyYXRpb25zfQorIiIiJHtwYXJhbWV0ZXJE
ZWNsYXJhdGlvbnN9CiAgICAgaWYgKG1fYmFja2VuZERpc3BhdGNoZXItPmhhc1Byb3RvY29sRXJy
b3JzKCkpIHsKICAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJv
cihCYWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFtcywgIlNvbWUgYXJndW1lbnRzIG9mIG1l
dGhvZCBcJyR7ZG9tYWluTmFtZX0uJHtjb21tYW5kTmFtZX1cJyBjYW4ndCBiZSBwcm9jZXNzZWQi
X3MpOwogICAgICAgICByZXR1cm47CkBAIC0xODcsMTEgKzE4NSwxMSBAQCAke2RvbWFpbk5hbWV9
QmFja2VuZERpc3BhdGNoZXI6OiR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5k
RGlzcGF0Y2hlcgogICAgIEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25Bc3luY0NvbW1h
bmQgPSAoCiAiIiIke2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjoke2NhbGxi
YWNrTmFtZX06OiR7Y2FsbGJhY2tOYW1lfShSZWY8QmFja2VuZERpc3BhdGNoZXI+JiYgYmFja2Vu
ZERpc3BhdGNoZXIsIGludCBpZCkgOiBCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlKFdU
Rk1vdmUoYmFja2VuZERpc3BhdGNoZXIpLCBpZCkgeyB9CiAKLXZvaWQgJHtkb21haW5OYW1lfUJh
Y2tlbmREaXNwYXRjaGVySGFuZGxlcjo6JHtjYWxsYmFja05hbWV9OjpzZW5kU3VjY2Vzcygke2Zv
cm1hbFBhcmFtZXRlcnN9KQordm9pZCAke2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyOjoke2NhbGxiYWNrTmFtZX06OnNlbmRTdWNjZXNzKCR7Y2FsbGJhY2tQYXJhbWV0ZXJzfSkK
IHsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3Jl
YXRlKCk7Ci0ke291dFBhcmFtZXRlckFzc2lnbm1lbnRzfQotICAgIENhbGxiYWNrQmFzZTo6c2Vu
ZFN1Y2Nlc3MoV1RGTW92ZShqc29uTWVzc2FnZSkpOworICAgIGF1dG8gcHJvdG9jb2xfanNvbk1l
c3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworJHtyZXR1cm5Bc3NpZ25tZW50c30KKyAg
ICBDYWxsYmFja0Jhc2U6OnNlbmRTdWNjZXNzKFdURk1vdmUocHJvdG9jb2xfanNvbk1lc3NhZ2Up
KTsKIH0iIiIpCiAKICAgICBGcm9udGVuZERpc3BhdGNoZXJEb21haW5EaXNwYXRjaGVyRGVjbGFy
YXRpb24gPSAoCkBAIC0yNDYsMTMgKzI0NCwxMSBAQCAke2NvbnN0cnVjdG9yRXhhbXBsZX0KICAg
ICB9IiIiKQogCiAgICAgUHJvdG9jb2xPYmplY3RSdW50aW1lQ2FzdCA9ICgKLSIiIlJlZlB0cjwk
e29iamVjdFR5cGV9PiBCaW5kaW5nVHJhaXRzPCR7b2JqZWN0VHlwZX0+OjpydW50aW1lQ2FzdChS
ZWZQdHI8SlNPTjo6VmFsdWU+JiYgdmFsdWUpCisiIiJSZWY8JHtvYmplY3RUeXBlfT4gQmluZGlu
Z1RyYWl0czwke29iamVjdFR5cGV9Pjo6cnVudGltZUNhc3QoUmVmPEpTT046OlZhbHVlPiYmIHZh
bHVlKQogewotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHJlc3VsdDsKLSAgICBib29sIGNhc3RT
dWNjZWVkZWQgPSB2YWx1ZS0+YXNPYmplY3QocmVzdWx0KTsKLSAgICBBU1NFUlRfVU5VU0VEKGNh
c3RTdWNjZWVkZWQsIGNhc3RTdWNjZWVkZWQpOworICAgIGF1dG8gcmVzdWx0ID0gdmFsdWUtPmFz
T2JqZWN0KCk7CiAgICAgQmluZGluZ1RyYWl0czwke29iamVjdFR5cGV9Pjo6YXNzZXJ0VmFsdWVI
YXNFeHBlY3RlZFR5cGUocmVzdWx0LmdldCgpKTsKICAgICBDT01QSUxFX0FTU0VSVChzaXplb2Yo
JHtvYmplY3RUeXBlfSkgPT0gc2l6ZW9mKEpTT046Ok9iamVjdEJhc2UpLCB0eXBlX2Nhc3RfcHJv
YmxlbSk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PCR7b2JqZWN0VHlwZX0qPihzdGF0aWNfY2Fz
dDxKU09OOjpPYmplY3RCYXNlKj4ocmVzdWx0LmdldCgpKSk7CisgICAgcmV0dXJuIHN0YXRpY19y
ZWZlcmVuY2VfY2FzdDwke29iamVjdFR5cGV9PihzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SlNPTjo6
T2JqZWN0QmFzZT4ocmVzdWx0LnJlbGVhc2VOb25OdWxsKCkpKTsKIH0KICIiIikKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVy
YXRlX2NwcF9hbHRlcm5hdGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weSBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9hbHRl
cm5hdGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weQppbmRleCBlMWE2NjFiYTM3OWNkZWE0
MDY0YzZmNzdjNGVmY2IxMTYyYWNlZmMwLi5iOWM2NjE3NDkyMjQ0ZDAwZTBhNzQ1ZDc5NGJhYjY3
MTAyZTc0NGM1IDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfYWx0ZXJuYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9o
ZWFkZXIucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2Nv
ZGVnZW4vZ2VuZXJhdGVfY3BwX2FsdGVybmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5
CkBAIC0zMyw5ICszMywxMSBAQCBmcm9tIHN0cmluZyBpbXBvcnQgVGVtcGxhdGUKIHRyeToKICAg
ICBmcm9tIC5jcHBfZ2VuZXJhdG9yIGltcG9ydCBDcHBHZW5lcmF0b3IKICAgICBmcm9tIC5jcHBf
Z2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgQ3BwR2VuZXJhdG9yVGVtcGxhdGVzIGFzIENwcFRl
bXBsYXRlcworICAgIGZyb20gLm1vZGVscyBpbXBvcnQgRW51bVR5cGUsIEFsaWFzZWRUeXBlCiBl
eGNlcHQgVmFsdWVFcnJvcjoKICAgICBmcm9tIGNwcF9nZW5lcmF0b3IgaW1wb3J0IENwcEdlbmVy
YXRvcgogICAgIGZyb20gY3BwX2dlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IENwcEdlbmVyYXRv
clRlbXBsYXRlcyBhcyBDcHBUZW1wbGF0ZXMKKyAgICBmcm9tIG1vZGVscyBpbXBvcnQgRW51bVR5
cGUsIEFsaWFzZWRUeXBlCiAKIGxvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQogCkBA
IC02NSw3ICs2Nyw3IEBAIGNsYXNzIENwcEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVySGVhZGVy
R2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgZGVmIF9nZW5lcmF0ZV9zZWNvbmRhcnlfaGVh
ZGVyX2luY2x1ZGVzKHNlbGYpOgogICAgICAgICB0YXJnZXRfZnJhbWV3b3JrX25hbWUgPSBzZWxm
Lm1vZGVsKCkuZnJhbWV3b3JrLm5hbWUKICAgICAgICAgaGVhZGVyX2luY2x1ZGVzID0gWwotICAg
ICAgICAgICAgKFt0YXJnZXRfZnJhbWV3b3JrX25hbWVdLCAodGFyZ2V0X2ZyYW1ld29ya19uYW1l
LCAiJXNQcm90b2NvbFR5cGVzLmgiICUgc2VsZi5wcm90b2NvbF9uYW1lKCkpKSwKKyAgICAgICAg
ICAgIChbdGFyZ2V0X2ZyYW1ld29ya19uYW1lXSwgKHRhcmdldF9mcmFtZXdvcmtfbmFtZSwgIiVz
UHJvdG9jb2xPYmplY3RzLmgiICUgc2VsZi5wcm90b2NvbF9uYW1lKCkpKSwKICAgICAgICAgICAg
IChbIkphdmFTY3JpcHRDb3JlIl0sICgiSmF2YVNjcmlwdENvcmUiLCAiaW5zcGVjdG9yL0luc3Bl
Y3RvckZyb250ZW5kUm91dGVyLmgiKSksCiAgICAgICAgICAgICAoWyJKYXZhU2NyaXB0Q29yZSJd
LCAoIkphdmFTY3JpcHRDb3JlIiwgImluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
ci5oIikpLAogICAgICAgICBdCkBAIC05MSw5ICs5MywxOSBAQCBjbGFzcyBDcHBBbHRlcm5hdGVC
YWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogCiAgICAgZGVm
IF9nZW5lcmF0ZV9oYW5kbGVyX2RlY2xhcmF0aW9uX2Zvcl9jb21tYW5kKHNlbGYsIGNvbW1hbmQp
OgogICAgICAgICBsaW5lcyA9IFtdCi0gICAgICAgIHBhcmFtZXRlcnMgPSBbJ2xvbmcgY2FsbElk
J10KLSAgICAgICAgZm9yIF9wYXJhbWV0ZXIgaW4gY29tbWFuZC5jYWxsX3BhcmFtZXRlcnM6Ci0g
ICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZCgnJXMgaW5fJXMnICUgKENwcEdlbmVyYXRvci5j
cHBfdHlwZV9mb3JfdW5jaGVja2VkX2Zvcm1hbF9pbl9wYXJhbWV0ZXIoX3BhcmFtZXRlciksIF9w
YXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpKQorICAgICAgICBwYXJhbWV0ZXJzID0gWydsb25nIHBy
b3RvY29sX2NhbGxJZCddCisgICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gY29tbWFuZC5jYWxsX3Bh
cmFtZXRlcnM6CisgICAgICAgICAgICBwYXJhbWV0ZXJfdHlwZSA9IHBhcmFtZXRlci50eXBlCisg
ICAgICAgICAgICBpZiBpc2luc3RhbmNlKHBhcmFtZXRlcl90eXBlLCBBbGlhc2VkVHlwZSk6Cisg
ICAgICAgICAgICAgICAgcGFyYW1ldGVyX3R5cGUgPSBwYXJhbWV0ZXJfdHlwZS5hbGlhc2VkX3R5
cGUKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UocGFyYW1ldGVyX3R5cGUsIEVudW1UeXBlKToK
KyAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfdHlwZSA9IHBhcmFtZXRlcl90eXBlLnByaW1pdGl2
ZV90eXBlCisKKyAgICAgICAgICAgIHBhcmFtZXRlcl9uYW1lID0gcGFyYW1ldGVyLnBhcmFtZXRl
cl9uYW1lCisgICAgICAgICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6CisgICAgICAgICAg
ICAgICAgcGFyYW1ldGVyX25hbWUgPSAnb3B0XycgKyBwYXJhbWV0ZXJfbmFtZQorCisgICAgICAg
ICAgICBwYXJhbWV0ZXJzLmFwcGVuZCgnJXMgJXMnICUgKENwcEdlbmVyYXRvci5jcHBfdHlwZV9m
b3JfY29tbWFuZF9wYXJhbWV0ZXIocGFyYW1ldGVyX3R5cGUsIHBhcmFtZXRlci5pc19vcHRpb25h
bCksIHBhcmFtZXRlcl9uYW1lKSkKIAogICAgICAgICBjb21tYW5kX2FyZ3MgPSB7CiAgICAgICAg
ICAgICAnY29tbWFuZE5hbWUnOiBjb21tYW5kLmNvbW1hbmRfbmFtZSwKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2Nw
cF9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9o
ZWFkZXIucHkKaW5kZXggMTBkOGYxNGJkNWZlYmViOGExYjA2YjAxNzY3NWExNDNhOGQ0ZjczOC4u
NmQ5ZGQyYTQ4ZGMzNDY5MjA3MWMxZGJjMWI4YjNiNGU3YzczYTkxNSAxMDA3NTUKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3Bw
X2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hl
cl9oZWFkZXIucHkKQEAgLTU1LDEwICs1NSw5IEBAIGNsYXNzIENwcEJhY2tlbmREaXNwYXRjaGVy
SGVhZGVyR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAgIHJldHVybiBbZG9tYWluIGZv
ciBkb21haW4gaW4gR2VuZXJhdG9yLmRvbWFpbnNfdG9fZ2VuZXJhdGUoc2VsZikgaWYgbGVuKHNl
bGYuY29tbWFuZHNfZm9yX2RvbWFpbihkb21haW4pKSA+IDBdCiAKICAgICBkZWYgZ2VuZXJhdGVf
b3V0cHV0KHNlbGYpOgotICAgICAgICB0eXBlZGVmcyA9IFsoJ1N0cmluZycsICdFcnJvclN0cmlu
ZycpXQogICAgICAgICBoZWFkZXJfYXJncyA9IHsKICAgICAgICAgICAgICdpbmNsdWRlcyc6IHNl
bGYuX2dlbmVyYXRlX3NlY29uZGFyeV9oZWFkZXJfaW5jbHVkZXMoKSwKLSAgICAgICAgICAgICd0
eXBlZGVmcyc6ICdcbicuam9pbihbJ3R5cGVkZWYgJXMgJXM7JyAlIHR5cGVkZWYgZm9yIHR5cGVk
ZWYgaW4gdHlwZWRlZnNdKSwKKyAgICAgICAgICAgICd0eXBlZGVmcyc6ICcnLAogICAgICAgICB9
CiAKICAgICAgICAgZG9tYWlucyA9IHNlbGYuZG9tYWluc190b19nZW5lcmF0ZSgpCkBAIC03OSw5
ICs3OCwxMSBAQCBjbGFzcyBDcHBCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvcihDcHBH
ZW5lcmF0b3IpOgogICAgICAgICBoZWFkZXJfaW5jbHVkZXMgPSBbCiAgICAgICAgICAgICAoWyJK
YXZhU2NyaXB0Q29yZSIsICJXZWJLaXQiXSwgKHNlbGYubW9kZWwoKS5mcmFtZXdvcmsubmFtZSwg
IiVzUHJvdG9jb2xPYmplY3RzLmgiICUgc2VsZi5wcm90b2NvbF9uYW1lKCkpKSwKICAgICAgICAg
ICAgIChbIkphdmFTY3JpcHRDb3JlIiwgIldlYktpdCJdLCAoIkphdmFTY3JpcHRDb3JlIiwgImlu
c3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oIikpLAotICAgICAgICAgICAgKFsi
SmF2YVNjcmlwdENvcmUiLCAiV2ViS2l0Il0sICgiV1RGIiwgInd0Zi90ZXh0L1dURlN0cmluZy5o
IikpCisgICAgICAgICAgICAoWyJKYXZhU2NyaXB0Q29yZSIsICJXZWJLaXQiXSwgKCJXVEYiLCAi
d3RmL0V4cGVjdGVkLmgiKSksCisgICAgICAgICAgICAoWyJKYXZhU2NyaXB0Q29yZSIsICJXZWJL
aXQiXSwgKCJXVEYiLCAid3RmL09wdGlvbmFsLmgiKSksCisgICAgICAgICAgICAoWyJKYXZhU2Ny
aXB0Q29yZSIsICJXZWJLaXQiXSwgKCJXVEYiLCAid3RmL3RleHQvV1RGU3RyaW5nLmgiKSksCisg
ICAgICAgICAgICAoWyJKYXZhU2NyaXB0Q29yZSIsICJXZWJLaXQiXSwgKCJzdGQiLCAidHVwbGUi
KSksCiAgICAgICAgIF0KLQogICAgICAgICByZXR1cm4gJ1xuJy5qb2luKHNlbGYuZ2VuZXJhdGVf
aW5jbHVkZXNfZnJvbV9lbnRyaWVzKGhlYWRlcl9pbmNsdWRlcykpCiAKICAgICBkZWYgX2dlbmVy
YXRlX2FsdGVybmF0ZV9oYW5kbGVyX2ZvcndhcmRfZGVjbGFyYXRpb25zX2Zvcl9kb21haW5zKHNl
bGYsIGRvbWFpbnMpOgpAQCAtMTAxLDExICsxMDIsOSBAQCBjbGFzcyBDcHBCYWNrZW5kRGlzcGF0
Y2hlckhlYWRlckdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAgICBpZiBleHBvcnRNYWNy
byBpcyBub3QgTm9uZToKICAgICAgICAgICAgIGNsYXNzQ29tcG9uZW50cy5hcHBlbmQoZXhwb3J0
TWFjcm8pCiAKLSAgICAgICAgdXNlZF9lbnVtX25hbWVzID0gc2V0KCkKLQogICAgICAgICBjb21t
YW5kX2RlY2xhcmF0aW9ucyA9IFtdCiAgICAgICAgIGZvciBjb21tYW5kIGluIHNlbGYuY29tbWFu
ZHNfZm9yX2RvbWFpbihkb21haW4pOgotICAgICAgICAgICAgY29tbWFuZF9kZWNsYXJhdGlvbnMu
YXBwZW5kKHNlbGYuX2dlbmVyYXRlX2hhbmRsZXJfZGVjbGFyYXRpb25fZm9yX2NvbW1hbmQoY29t
bWFuZCwgdXNlZF9lbnVtX25hbWVzKSkKKyAgICAgICAgICAgIGNvbW1hbmRfZGVjbGFyYXRpb25z
LmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9oYW5kbGVyX2RlY2xhcmF0aW9uX2Zvcl9jb21tYW5kKGNv
bW1hbmQpKQogCiAgICAgICAgIGhhbmRsZXJfYXJncyA9IHsKICAgICAgICAgICAgICdjbGFzc0Fu
ZEV4cG9ydE1hY3JvJzogIiAiLmpvaW4oY2xhc3NDb21wb25lbnRzKSwKQEAgLTExNSw2OSArMTE0
LDU2IEBAIGNsYXNzIENwcEJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yKENwcEdlbmVy
YXRvcik6CiAKICAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRp
b24oZG9tYWluLmNvbmRpdGlvbiwgVGVtcGxhdGUoQ3BwVGVtcGxhdGVzLkJhY2tlbmREaXNwYXRj
aGVySGVhZGVyRG9tYWluSGFuZGxlckRlY2xhcmF0aW9uKS5zdWJzdGl0dXRlKE5vbmUsICoqaGFu
ZGxlcl9hcmdzKSkKIAotICAgIGRlZiBfZ2VuZXJhdGVfYW5vbnltb3VzX2VudW1fZm9yX3BhcmFt
ZXRlcihzZWxmLCBwYXJhbWV0ZXIsIGNvbW1hbmQpOgotICAgICAgICBlbnVtX2FyZ3MgPSB7Ci0g
ICAgICAgICAgICAncGFyYW1ldGVyTmFtZSc6IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwKLSAg
ICAgICAgICAgICdjb21tYW5kTmFtZSc6IGNvbW1hbmQuY29tbWFuZF9uYW1lCi0gICAgICAgIH0K
LQotICAgICAgICBsaW5lcyA9IFtdCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIC8vIE5hbWVk
IGFmdGVyIHBhcmFtZXRlciBcJyUocGFyYW1ldGVyTmFtZSlzXCcgd2hpbGUgZ2VuZXJhdGluZyBj
b21tYW5kL2V2ZW50ICUoY29tbWFuZE5hbWUpcy4nICUgZW51bV9hcmdzKQotICAgICAgICBsaW5l
cy5hcHBlbmQoJyAgICBlbnVtIGNsYXNzICVzIHsnICUgdWNmaXJzdChwYXJhbWV0ZXIucGFyYW1l
dGVyX25hbWUpKQotICAgICAgICBmb3IgZW51bV92YWx1ZSBpbiBwYXJhbWV0ZXIudHlwZS5lbnVt
X3ZhbHVlcygpOgotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgICVzID0gJWQsJyAl
IChHZW5lcmF0b3Iuc3R5bGl6ZWRfbmFtZV9mb3JfZW51bV92YWx1ZShlbnVtX3ZhbHVlKSwgc2Vs
Zi5lbmNvZGluZ19mb3JfZW51bV92YWx1ZShlbnVtX3ZhbHVlKSkpCi0gICAgICAgIGxpbmVzLmFw
cGVuZCgnICAgIH07IC8vIGVudW0gY2xhc3MgJXMnICUgdWNmaXJzdChwYXJhbWV0ZXIucGFyYW1l
dGVyX25hbWUpKQotICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQotCi0gICAgZGVmIF9n
ZW5lcmF0ZV9oYW5kbGVyX2RlY2xhcmF0aW9uX2Zvcl9jb21tYW5kKHNlbGYsIGNvbW1hbmQsIHVz
ZWRfZW51bV9uYW1lcyk6CisgICAgZGVmIF9nZW5lcmF0ZV9oYW5kbGVyX2RlY2xhcmF0aW9uX2Zv
cl9jb21tYW5kKHNlbGYsIGNvbW1hbmQpOgogICAgICAgICBpZiBjb21tYW5kLmlzX2FzeW5jOgog
ICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2dlbmVyYXRlX2FzeW5jX2hhbmRsZXJfZGVjbGFyYXRp
b25fZm9yX2NvbW1hbmQoY29tbWFuZCkKIAogICAgICAgICBsaW5lcyA9IFtdCi0gICAgICAgIHBh
cmFtZXRlcnMgPSBbJ0Vycm9yU3RyaW5nJiddCi0gICAgICAgIGZvciBfcGFyYW1ldGVyIGluIGNv
bW1hbmQuY2FsbF9wYXJhbWV0ZXJzOgotICAgICAgICAgICAgcGFyYW1ldGVyX25hbWUgPSAnaW5f
JyArIF9wYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUKLSAgICAgICAgICAgIGlmIF9wYXJhbWV0ZXIu
aXNfb3B0aW9uYWw6CisKKyAgICAgICAgcGFyYW1ldGVycyA9IFtdCisgICAgICAgIGZvciBwYXJh
bWV0ZXIgaW4gY29tbWFuZC5jYWxsX3BhcmFtZXRlcnM6CisgICAgICAgICAgICBwYXJhbWV0ZXJf
bmFtZSA9IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZQorICAgICAgICAgICAgaWYgcGFyYW1ldGVy
LmlzX29wdGlvbmFsOgogICAgICAgICAgICAgICAgIHBhcmFtZXRlcl9uYW1lID0gJ29wdF8nICsg
cGFyYW1ldGVyX25hbWUKKyAgICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKCIlcyAlcyIgJSAo
Q3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl9jb21tYW5kX3BhcmFtZXRlcihwYXJhbWV0ZXIudHlw
ZSwgcGFyYW1ldGVyLmlzX29wdGlvbmFsKSwgcGFyYW1ldGVyX25hbWUpKQogCi0gICAgICAgICAg
ICBwYXJhbWV0ZXJzLmFwcGVuZCgiJXMgJXMiICUgKENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3Jf
dW5jaGVja2VkX2Zvcm1hbF9pbl9wYXJhbWV0ZXIoX3BhcmFtZXRlciksIHBhcmFtZXRlcl9uYW1l
KSkKLQotICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShfcGFyYW1ldGVyLnR5cGUsIEVudW1UeXBl
KSBhbmQgX3BhcmFtZXRlci50eXBlLmlzX2Fub255bW91cyBhbmQgX3BhcmFtZXRlci5wYXJhbWV0
ZXJfbmFtZSBub3QgaW4gdXNlZF9lbnVtX25hbWVzOgotICAgICAgICAgICAgICAgIGxpbmVzLmFw
cGVuZChzZWxmLl9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9mb3JfcGFyYW1ldGVyKF9wYXJhbWV0
ZXIsIGNvbW1hbmQpKQotICAgICAgICAgICAgICAgIHVzZWRfZW51bV9uYW1lcy5hZGQoX3BhcmFt
ZXRlci5wYXJhbWV0ZXJfbmFtZSkKLQotICAgICAgICBmb3IgX3BhcmFtZXRlciBpbiBjb21tYW5k
LnJldHVybl9wYXJhbWV0ZXJzOgotICAgICAgICAgICAgcGFyYW1ldGVyX25hbWUgPSAnb3V0Xycg
KyBfcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lCi0gICAgICAgICAgICBpZiBfcGFyYW1ldGVyLmlz
X29wdGlvbmFsOgorICAgICAgICByZXR1cm5zID0gW10KKyAgICAgICAgZm9yIHBhcmFtZXRlciBp
biBjb21tYW5kLnJldHVybl9wYXJhbWV0ZXJzOgorICAgICAgICAgICAgcGFyYW1ldGVyX25hbWUg
PSBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUKKyAgICAgICAgICAgIGlmIHBhcmFtZXRlci5pc19v
cHRpb25hbDoKICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfbmFtZSA9ICdvcHRfJyArIHBhcmFt
ZXRlcl9uYW1lCi0gICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZCgiJXMgJXMiICUgKENwcEdl
bmVyYXRvci5jcHBfdHlwZV9mb3JfZm9ybWFsX291dF9wYXJhbWV0ZXIoX3BhcmFtZXRlciksIHBh
cmFtZXRlcl9uYW1lKSkKLQotICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShfcGFyYW1ldGVyLnR5
cGUsIEVudW1UeXBlKSBhbmQgX3BhcmFtZXRlci50eXBlLmlzX2Fub255bW91cyBhbmQgX3BhcmFt
ZXRlci5wYXJhbWV0ZXJfbmFtZSBub3QgaW4gdXNlZF9lbnVtX25hbWVzOgotICAgICAgICAgICAg
ICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9mb3JfcGFyYW1l
dGVyKF9wYXJhbWV0ZXIsIGNvbW1hbmQpKQotICAgICAgICAgICAgICAgIHVzZWRfZW51bV9uYW1l
cy5hZGQoX3BhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkKKyAgICAgICAgICAgIHJldHVybnMuYXBw
ZW5kKCclcyAvKiAlcyAqLycgJSAoQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl9jb21tYW5kX3Jl
dHVybl9kZWNsYXJhdGlvbihwYXJhbWV0ZXIudHlwZSwgcGFyYW1ldGVyLmlzX29wdGlvbmFsKSwg
cGFyYW1ldGVyX25hbWUpKQogCiAgICAgICAgIGNvbW1hbmRfYXJncyA9IHsKICAgICAgICAgICAg
ICdjb21tYW5kTmFtZSc6IGNvbW1hbmQuY29tbWFuZF9uYW1lLAotICAgICAgICAgICAgJ3BhcmFt
ZXRlcnMnOiAiLCAiLmpvaW4ocGFyYW1ldGVycykKKyAgICAgICAgICAgICdwYXJhbWV0ZXJzJzog
IiwgIi5qb2luKHBhcmFtZXRlcnMpLAorICAgICAgICAgICAgJ3JldHVybnMnOiAiLCAiLmpvaW4o
cmV0dXJucyksCiAgICAgICAgIH0KLSAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgdmlydHVhbCB2
b2lkICUoY29tbWFuZE5hbWUpcyglKHBhcmFtZXRlcnMpcykgPSAwOycgJSBjb21tYW5kX2FyZ3Mp
CisgICAgICAgIGlmIGxlbihyZXR1cm5zKSA9PSAxOgorICAgICAgICAgICAgbGluZXMuYXBwZW5k
KCcgICAgdmlydHVhbCBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjwlKHJldHVybnMpcz4gJShjb21t
YW5kTmFtZSlzKCUocGFyYW1ldGVycylzKSA9IDA7JyAlIGNvbW1hbmRfYXJncykKKyAgICAgICAg
ZWxpZiBsZW4ocmV0dXJucykgPiAxOgorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgdmly
dHVhbCBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxzdGQ6OnR1cGxlPCUocmV0dXJucylzPj4gJShj
b21tYW5kTmFtZSlzKCUocGFyYW1ldGVycylzKSA9IDA7JyAlIGNvbW1hbmRfYXJncykKKyAgICAg
ICAgZWxzZToKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIHZpcnR1YWwgUHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8dm9pZD4gJShjb21tYW5kTmFtZSlzKCUocGFyYW1ldGVycylzKSA9IDA7
JyAlIGNvbW1hbmRfYXJncykKICAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zv
cl9jb25kaXRpb24oY29tbWFuZC5jb25kaXRpb24sICdcbicuam9pbihsaW5lcykpCiAKICAgICBk
ZWYgX2dlbmVyYXRlX2FzeW5jX2hhbmRsZXJfZGVjbGFyYXRpb25fZm9yX2NvbW1hbmQoc2VsZiwg
Y29tbWFuZCk6CiAgICAgICAgIGNhbGxiYWNrTmFtZSA9ICIlc0NhbGxiYWNrIiAlIHVjZmlyc3Qo
Y29tbWFuZC5jb21tYW5kX25hbWUpCiAKLSAgICAgICAgaW5fcGFyYW1ldGVycyA9IFtdCi0gICAg
ICAgIGZvciBfcGFyYW1ldGVyIGluIGNvbW1hbmQuY2FsbF9wYXJhbWV0ZXJzOgotICAgICAgICAg
ICAgcGFyYW1ldGVyX25hbWUgPSAnaW5fJyArIF9wYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUKLSAg
ICAgICAgICAgIGlmIF9wYXJhbWV0ZXIuaXNfb3B0aW9uYWw6CisgICAgICAgIHBhcmFtZXRlcnMg
PSBbXQorICAgICAgICBmb3IgcGFyYW1ldGVyIGluIGNvbW1hbmQuY2FsbF9wYXJhbWV0ZXJzOgor
ICAgICAgICAgICAgcGFyYW1ldGVyX25hbWUgPSBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUKKyAg
ICAgICAgICAgIGlmIHBhcmFtZXRlci5pc19vcHRpb25hbDoKICAgICAgICAgICAgICAgICBwYXJh
bWV0ZXJfbmFtZSA9ICdvcHRfJyArIHBhcmFtZXRlcl9uYW1lCisgICAgICAgICAgICBwYXJhbWV0
ZXJzLmFwcGVuZCgiJXMgJXMiICUgKENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3JfY29tbWFuZF9w
YXJhbWV0ZXIocGFyYW1ldGVyLnR5cGUsIHBhcmFtZXRlci5pc19vcHRpb25hbCksIHBhcmFtZXRl
cl9uYW1lKSkKKyAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoIlJlZjwlcz4mJiIgJSBjYWxsYmFj
a05hbWUpCiAKLSAgICAgICAgICAgIGluX3BhcmFtZXRlcnMuYXBwZW5kKCIlcyAlcyIgJSAoQ3Bw
R2VuZXJhdG9yLmNwcF90eXBlX2Zvcl91bmNoZWNrZWRfZm9ybWFsX2luX3BhcmFtZXRlcihfcGFy
YW1ldGVyKSwgcGFyYW1ldGVyX25hbWUpKQotICAgICAgICBpbl9wYXJhbWV0ZXJzLmFwcGVuZCgi
UmVmPCVzPiYmIGNhbGxiYWNrIiAlIGNhbGxiYWNrTmFtZSkKLQotICAgICAgICBvdXRfcGFyYW1l
dGVycyA9IFtdCi0gICAgICAgIGZvciBfcGFyYW1ldGVyIGluIGNvbW1hbmQucmV0dXJuX3BhcmFt
ZXRlcnM6Ci0gICAgICAgICAgICBvdXRfcGFyYW1ldGVycy5hcHBlbmQoIiVzICVzIiAlIChDcHBH
ZW5lcmF0b3IuY3BwX3R5cGVfZm9yX2Zvcm1hbF9hc3luY19wYXJhbWV0ZXIoX3BhcmFtZXRlciks
IF9wYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpKQorICAgICAgICByZXR1cm5zID0gW10KKyAgICAg
ICAgZm9yIHBhcmFtZXRlciBpbiBjb21tYW5kLnJldHVybl9wYXJhbWV0ZXJzOgorICAgICAgICAg
ICAgcGFyYW1ldGVyX25hbWUgPSBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUKKyAgICAgICAgICAg
IGlmIHBhcmFtZXRlci5pc19vcHRpb25hbDoKKyAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfbmFt
ZSA9ICdvcHRfJyArIHBhcmFtZXRlcl9uYW1lCisgICAgICAgICAgICByZXR1cm5zLmFwcGVuZCgi
JXMgJXMiICUgKENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3JfY29tbWFuZF9yZXR1cm5fYXJndW1l
bnQocGFyYW1ldGVyLnR5cGUsIHBhcmFtZXRlci5pc19vcHRpb25hbCksIHBhcmFtZXRlcl9uYW1l
KSkKIAogICAgICAgICBjbGFzc19jb21wb25lbnRzID0gWydjbGFzcyddCiAgICAgICAgIGV4cG9y
dF9tYWNybyA9IHNlbGYubW9kZWwoKS5mcmFtZXdvcmsuc2V0dGluZygnZXhwb3J0X21hY3JvJywg
Tm9uZSkKQEAgLTE4OCw4ICsxNzQsOCBAQCBjbGFzcyBDcHBCYWNrZW5kRGlzcGF0Y2hlckhlYWRl
ckdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAgICAgICAgJ2NsYXNzQW5kRXhwb3J0TWFj
cm8nOiAnICcuam9pbihjbGFzc19jb21wb25lbnRzKSwKICAgICAgICAgICAgICdjYWxsYmFja05h
bWUnOiBjYWxsYmFja05hbWUsCiAgICAgICAgICAgICAnY29tbWFuZE5hbWUnOiBjb21tYW5kLmNv
bW1hbmRfbmFtZSwKLSAgICAgICAgICAgICdpblBhcmFtZXRlcnMnOiAiLCAiLmpvaW4oaW5fcGFy
YW1ldGVycyksCi0gICAgICAgICAgICAnb3V0UGFyYW1ldGVycyc6ICIsICIuam9pbihvdXRfcGFy
YW1ldGVycyksCisgICAgICAgICAgICAncGFyYW1ldGVycyc6ICIsICIuam9pbihwYXJhbWV0ZXJz
KSwKKyAgICAgICAgICAgICdyZXR1cm5zJzogIiwgIi5qb2luKHJldHVybnMpLAogICAgICAgICB9
CiAKICAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oY29t
bWFuZC5jb25kaXRpb24sIFRlbXBsYXRlKENwcFRlbXBsYXRlcy5CYWNrZW5kRGlzcGF0Y2hlckhl
YWRlckFzeW5jQ29tbWFuZERlY2xhcmF0aW9uKS5zdWJzdGl0dXRlKE5vbmUsICoqY29tbWFuZF9h
cmdzKSkKQEAgLTIyMyw0ICsyMDksNCBAQCBjbGFzcyBDcHBCYWNrZW5kRGlzcGF0Y2hlckhlYWRl
ckdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhf
Z3VhcmRfZm9yX2NvbmRpdGlvbihkb21haW4uY29uZGl0aW9uLCBUZW1wbGF0ZShDcHBUZW1wbGF0
ZXMuQmFja2VuZERpc3BhdGNoZXJIZWFkZXJEb21haW5EaXNwYXRjaGVyRGVjbGFyYXRpb24pLnN1
YnN0aXR1dGUoTm9uZSwgKipoYW5kbGVyX2FyZ3MpKQogCiAgICAgZGVmIF9nZW5lcmF0ZV9kaXNw
YXRjaGVyX2RlY2xhcmF0aW9uX2Zvcl9jb21tYW5kKHNlbGYsIGNvbW1hbmQpOgotICAgICAgICBy
ZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihjb21tYW5kLmNvbmRpdGlv
biwgIiAgICB2b2lkICVzKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBh
cmFtZXRlcnMpOyIgJSBjb21tYW5kLmNvbW1hbmRfbmFtZSkKKyAgICAgICAgcmV0dXJuIHNlbGYu
d3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oY29tbWFuZC5jb25kaXRpb24sICIgICAgdm9p
ZCAlcyhsb25nIHByb3RvY2xfY2FsbElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29s
X3BhcmFtZXRlcnMpOyIgJSBjb21tYW5kLmNvbW1hbmRfbmFtZSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9i
YWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRj
aGVyX2ltcGxlbWVudGF0aW9uLnB5CmluZGV4IGRhZjE5Yzk1MGZiMDdhYWEyZDhiMzFhMmY0OWM3
Y2FiNTA3MDJjNjAuLjhkZmIyOTRhYjlkMjZlNGU4NTVmNWUxMjlkYjgzMWU3ZjkwMWFiZGUgMTAw
NzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2Vu
L2dlbmVyYXRlX2NwcF9iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVf
Y3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQpAQCAtMzMsMTIgKzMzLDEy
IEBAIHRyeToKICAgICBmcm9tIC5jcHBfZ2VuZXJhdG9yIGltcG9ydCBDcHBHZW5lcmF0b3IKICAg
ICBmcm9tIC5jcHBfZ2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgQ3BwR2VuZXJhdG9yVGVtcGxh
dGVzIGFzIENwcFRlbXBsYXRlcwogICAgIGZyb20gLmdlbmVyYXRvciBpbXBvcnQgR2VuZXJhdG9y
LCB1Y2ZpcnN0Ci0gICAgZnJvbSAubW9kZWxzIGltcG9ydCBPYmplY3RUeXBlLCBBcnJheVR5cGUK
KyAgICBmcm9tIC5tb2RlbHMgaW1wb3J0IE9iamVjdFR5cGUsIEFycmF5VHlwZSwgQWxpYXNlZFR5
cGUsIEVudW1UeXBlCiBleGNlcHQgVmFsdWVFcnJvcjoKICAgICBmcm9tIGNwcF9nZW5lcmF0b3Ig
aW1wb3J0IENwcEdlbmVyYXRvcgogICAgIGZyb20gY3BwX2dlbmVyYXRvcl90ZW1wbGF0ZXMgaW1w
b3J0IENwcEdlbmVyYXRvclRlbXBsYXRlcyBhcyBDcHBUZW1wbGF0ZXMKICAgICBmcm9tIGdlbmVy
YXRvciBpbXBvcnQgR2VuZXJhdG9yLCB1Y2ZpcnN0Ci0gICAgZnJvbSBtb2RlbHMgaW1wb3J0IE9i
amVjdFR5cGUsIEFycmF5VHlwZQorICAgIGZyb20gbW9kZWxzIGltcG9ydCBPYmplY3RUeXBlLCBB
cnJheVR5cGUsIEFsaWFzZWRUeXBlLCBFbnVtVHlwZQogCiBsb2cgPSBsb2dnaW5nLmdldExvZ2dl
cignZ2xvYmFsJykKIApAQCAtODAsMTEgKzgwLDggQEAgY2xhc3MgQ3BwQmFja2VuZERpc3BhdGNo
ZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgIGRlZiBfZ2VuZXJh
dGVfc2Vjb25kYXJ5X2hlYWRlcl9pbmNsdWRlcyhzZWxmKToKICAgICAgICAgaGVhZGVyX2luY2x1
ZGVzID0gWwogICAgICAgICAgICAgKFsiSmF2YVNjcmlwdENvcmUiLCAiV2ViS2l0Il0sICgiSmF2
YVNjcmlwdENvcmUiLCAiaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmgiKSksCi0g
ICAgICAgICAgICAoWyJKYXZhU2NyaXB0Q29yZSIsICJXZWJLaXQiXSwgKCJXVEYiLCAid3RmL0pT
T05WYWx1ZXMuaCIpKSwKICAgICAgICAgICAgIChbIkphdmFTY3JpcHRDb3JlIiwgIldlYktpdCJd
LCAoIldURiIsICJ3dGYvTmV2ZXJEZXN0cm95ZWQuaCIpKSwKLSAgICAgICAgICAgIChbIkphdmFT
Y3JpcHRDb3JlIiwgIldlYktpdCJdLCAoIldURiIsICJ3dGYvdGV4dC9DU3RyaW5nLmgiKSkKICAg
ICAgICAgXQotCiAgICAgICAgIHJldHVybiBzZWxmLmdlbmVyYXRlX2luY2x1ZGVzX2Zyb21fZW50
cmllcyhoZWFkZXJfaW5jbHVkZXMpCiAKIApAQCAtMTIzLDggKzEyMCw4IEBAIGNsYXNzIENwcEJh
Y2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAg
ICAgICAgY2FzZXMgPSBbXQogCiAgICAgICAgIGZpcnN0X2NvbW1hbmRfc3RyaW5nID0gIlxuIi5q
b2luKFsKLSAgICAgICAgICAgICcgICAgaWYgKG1ldGhvZCA9PSAiJXMiKSB7JyAlIGNvbW1hbmRz
WzBdLmNvbW1hbmRfbmFtZSwKLSAgICAgICAgICAgICcgICAgICAgICVzKHJlcXVlc3RJZCwgV1RG
TW92ZShwYXJhbWV0ZXJzKSk7JyAlIGNvbW1hbmRzWzBdLmNvbW1hbmRfbmFtZSwKKyAgICAgICAg
ICAgICcgICAgaWYgKHByb3RvY29sX21ldGhvZCA9PSAiJXMiKSB7JyAlIGNvbW1hbmRzWzBdLmNv
bW1hbmRfbmFtZSwKKyAgICAgICAgICAgICcgICAgICAgICVzKHByb3RvY29sX2NhbGxJZCwgV1RG
TW92ZShwcm90b2NvbF9wYXJhbWV0ZXJzKSk7JyAlIGNvbW1hbmRzWzBdLmNvbW1hbmRfbmFtZSwK
ICAgICAgICAgICAgICcgICAgICAgIHJldHVybjsnLAogICAgICAgICAgICAgJyAgICB9JywKICAg
ICAgICAgXSkKQEAgLTEzMiw4ICsxMjksOCBAQCBjbGFzcyBDcHBCYWNrZW5kRGlzcGF0Y2hlcklt
cGxlbWVudGF0aW9uR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAKICAgICAgICAgZm9yIGNvbW1h
bmQgaW4gY29tbWFuZHNbMTpdOgogICAgICAgICAgICAgYWRkaXRpb25hbF9jb21tYW5kX3N0cmlu
ZyA9ICJcbiIuam9pbihbCi0gICAgICAgICAgICAgICAgJyAgICBpZiAobWV0aG9kID09ICIlcyIp
IHsnICUgY29tbWFuZC5jb21tYW5kX25hbWUsCi0gICAgICAgICAgICAgICAgJyAgICAgICAgJXMo
cmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsnICUgY29tbWFuZC5jb21tYW5kX25hbWUs
CisgICAgICAgICAgICAgICAgJyAgICBpZiAocHJvdG9jb2xfbWV0aG9kID09ICIlcyIpIHsnICUg
Y29tbWFuZC5jb21tYW5kX25hbWUsCisgICAgICAgICAgICAgICAgJyAgICAgICAgJXMocHJvdG9j
b2xfY2FsbElkLCBXVEZNb3ZlKHByb3RvY29sX3BhcmFtZXRlcnMpKTsnICUgY29tbWFuZC5jb21t
YW5kX25hbWUsCiAgICAgICAgICAgICAgICAgJyAgICAgICAgcmV0dXJuOycsCiAgICAgICAgICAg
ICAgICAgJyAgICB9JywKICAgICAgICAgICAgIF0pCkBAIC0xNjUsMTQ2ICsxNjIsMTM2IEBAIGNs
YXNzIENwcEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IoQ3BwR2VuZXJh
dG9yKToKICAgICAgICAgcmV0dXJuIFRlbXBsYXRlKENwcFRlbXBsYXRlcy5CYWNrZW5kRGlzcGF0
Y2hlckltcGxlbWVudGF0aW9uTGFyZ2VTd2l0Y2gpLnN1YnN0aXR1dGUoTm9uZSwgKipzd2l0Y2hf
YXJncykKIAogICAgIGRlZiBfZ2VuZXJhdGVfYXN5bmNfZGlzcGF0Y2hlcl9jbGFzc19mb3JfZG9t
YWluKHNlbGYsIGNvbW1hbmQsIGRvbWFpbik6Ci0gICAgICAgIG91dF9wYXJhbWV0ZXJfYXNzaWdu
bWVudHMgPSBbXQotICAgICAgICBmb3JtYWxfcGFyYW1ldGVycyA9IFtdCisgICAgICAgIHJldHVy
bl9hc3NpZ25tZW50cyA9IFtdCisgICAgICAgIGNhbGxiYWNrX3BhcmFtZXRlcnMgPSBbXQogCiAg
ICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gY29tbWFuZC5yZXR1cm5fcGFyYW1ldGVyczoKKyAgICAg
ICAgICAgIHBhcmFtZXRlcl9uYW1lID0gcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lCisgICAgICAg
ICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6CisgICAgICAgICAgICAgICAgcGFyYW1ldGVy
X25hbWUgPSAnb3B0XycgKyBwYXJhbWV0ZXJfbmFtZQorCisgICAgICAgICAgICBwYXJhbWV0ZXJf
dmFsdWUgPSBwYXJhbWV0ZXJfbmFtZQorCisgICAgICAgICAgICBfdHlwZSA9IHBhcmFtZXRlci50
eXBlCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBBbGlhc2VkVHlwZSk6CisgICAg
ICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5hbGlhc2VkX3R5cGUKKyAgICAgICAgICAgIGlmIGlz
aW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKSBhbmQgX3R5cGUuaXNfYW5vbnltb3VzOgorICAgICAg
ICAgICAgICAgIF90eXBlID0gX3R5cGUucHJpbWl0aXZlX3R5cGUKKworICAgICAgICAgICAgaWYg
X3R5cGUuaXNfZW51bSgpOgorICAgICAgICAgICAgICAgIGlmIHBhcmFtZXRlci5pc19vcHRpb25h
bDoKKyAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyX3ZhbHVlID0gJyonICsgcGFyYW1ldGVy
X3ZhbHVlCisgICAgICAgICAgICAgICAgcGFyYW1ldGVyX3ZhbHVlID0gJ1Byb3RvY29sOjolczo6
Z2V0RW51bUNvbnN0YW50VmFsdWUoJXMpJyAlIChzZWxmLmhlbHBlcnNfbmFtZXNwYWNlKCksIHBh
cmFtZXRlcl92YWx1ZSkKKyAgICAgICAgICAgIGVsaWYgQ3BwR2VuZXJhdG9yLnNob3VsZF9yZWxl
YXNlX2FyZ3VtZW50KF90eXBlLCBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwpOgorICAgICAgICAgICAg
ICAgIHBhcmFtZXRlcl92YWx1ZSA9IHBhcmFtZXRlcl92YWx1ZSArICcucmVsZWFzZU5vbk51bGwo
KScKKyAgICAgICAgICAgIGVsaWYgQ3BwR2VuZXJhdG9yLnNob3VsZF9kZXJlZmVyZW5jZV9hcmd1
bWVudChfdHlwZSwgcGFyYW1ldGVyLmlzX29wdGlvbmFsKToKKyAgICAgICAgICAgICAgICBwYXJh
bWV0ZXJfdmFsdWUgPSAnKicgKyBwYXJhbWV0ZXJfdmFsdWUKKyAgICAgICAgICAgIGVsaWYgQ3Bw
R2VuZXJhdG9yLnNob3VsZF9tb3ZlX2FyZ3VtZW50KF90eXBlLCBwYXJhbWV0ZXIuaXNfb3B0aW9u
YWwpOgorICAgICAgICAgICAgICAgIHBhcmFtZXRlcl92YWx1ZSA9ICdXVEZNb3ZlKCVzKScgJSBw
YXJhbWV0ZXJfdmFsdWUKKwogICAgICAgICAgICAgcGFyYW1fYXJncyA9IHsKLSAgICAgICAgICAg
ICAgICAna2V5ZWRTZXRNZXRob2QnOiBDcHBHZW5lcmF0b3IuY3BwX3NldHRlcl9tZXRob2RfZm9y
X3R5cGUocGFyYW1ldGVyLnR5cGUpLAorICAgICAgICAgICAgICAgICdrZXllZFNldE1ldGhvZCc6
IENwcEdlbmVyYXRvci5jcHBfc2V0dGVyX21ldGhvZF9mb3JfdHlwZShfdHlwZSksCiAgICAgICAg
ICAgICAgICAgJ3BhcmFtZXRlcktleSc6IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwKLSAgICAg
ICAgICAgICAgICAncGFyYW1ldGVyTmFtZSc6IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwKLSAg
ICAgICAgICAgICAgICAncGFyYW1ldGVyVHlwZSc6IENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3Jf
c3RhY2tfaW5fcGFyYW1ldGVyKHBhcmFtZXRlciksCi0gICAgICAgICAgICAgICAgJ2hlbHBlcnNO
YW1lc3BhY2UnOiBzZWxmLmhlbHBlcnNfbmFtZXNwYWNlKCksCisgICAgICAgICAgICAgICAgJ3Bh
cmFtZXRlck5hbWUnOiBwYXJhbWV0ZXJfbmFtZSwKKyAgICAgICAgICAgICAgICAncGFyYW1ldGVy
VmFsdWUnOiBwYXJhbWV0ZXJfdmFsdWUsCiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGZv
cm1hbF9wYXJhbWV0ZXJzLmFwcGVuZCgnJXMgJXMnICUgKENwcEdlbmVyYXRvci5jcHBfdHlwZV9m
b3JfZm9ybWFsX2FzeW5jX3BhcmFtZXRlcihwYXJhbWV0ZXIpLCBwYXJhbWV0ZXIucGFyYW1ldGVy
X25hbWUpKQorICAgICAgICAgICAgY2FsbGJhY2tfcGFyYW1ldGVycy5hcHBlbmQoJyVzICVzJyAl
IChDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX2NvbW1hbmRfcmV0dXJuX2FyZ3VtZW50KF90eXBl
LCBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwpLCBwYXJhbWV0ZXJfbmFtZSkpCiAKICAgICAgICAgICAg
IGlmIHBhcmFtZXRlci5pc19vcHRpb25hbDoKLSAgICAgICAgICAgICAgICBpZiBDcHBHZW5lcmF0
b3Iuc2hvdWxkX3VzZV93cmFwcGVyX2Zvcl9yZXR1cm5fdHlwZShwYXJhbWV0ZXIudHlwZSk6Ci0g
ICAgICAgICAgICAgICAgICAgIG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAg
aWYgKCUocGFyYW1ldGVyTmFtZSlzLmhhc1ZhbHVlKCkpJyAlIHBhcmFtX2FyZ3MpCi0gICAgICAg
ICAgICAgICAgICAgIG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAgICAgIGpz
b25NZXNzYWdlLT4lKGtleWVkU2V0TWV0aG9kKXMoIiUocGFyYW1ldGVyS2V5KXMiX3MsIColKHBh
cmFtZXRlck5hbWUpcyk7JyAlIHBhcmFtX2FyZ3MpCi0gICAgICAgICAgICAgICAgZWxzZToKLSAg
ICAgICAgICAgICAgICAgICAgb3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICBp
ZiAoJShwYXJhbWV0ZXJOYW1lKXMpJyAlIHBhcmFtX2FyZ3MpCi0gICAgICAgICAgICAgICAgICAg
IG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAgICAgIGpzb25NZXNzYWdlLT4l
KGtleWVkU2V0TWV0aG9kKXMoIiUocGFyYW1ldGVyS2V5KXMiX3MsICUocGFyYW1ldGVyTmFtZSlz
KTsnICUgcGFyYW1fYXJncykKLSAgICAgICAgICAgIGVsaWYgcGFyYW1ldGVyLnR5cGUuaXNfZW51
bSgpOgotICAgICAgICAgICAgICAgIG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcg
ICAganNvbk1lc3NhZ2UtPiUoa2V5ZWRTZXRNZXRob2QpcygiJShwYXJhbWV0ZXJLZXkpcyJfcywg
SW5zcGVjdG9yOjpQcm90b2NvbDo6JShoZWxwZXJzTmFtZXNwYWNlKXM6OmdldEVudW1Db25zdGFu
dFZhbHVlKCUocGFyYW1ldGVyTmFtZSlzKSk7JyAlIHBhcmFtX2FyZ3MpCisgICAgICAgICAgICAg
ICAgcmV0dXJuX2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAgIGlmICghISUocGFyYW1ldGVyTmFtZSlz
KScgJSBwYXJhbV9hcmdzKQorICAgICAgICAgICAgICAgIHJldHVybl9hc3NpZ25tZW50cy5hcHBl
bmQoJyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPiUoa2V5ZWRTZXRNZXRob2QpcygiJShw
YXJhbWV0ZXJLZXkpcyJfcywgJShwYXJhbWV0ZXJWYWx1ZSlzKTsnICUgcGFyYW1fYXJncykKICAg
ICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgb3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50
cy5hcHBlbmQoJyAgICBqc29uTWVzc2FnZS0+JShrZXllZFNldE1ldGhvZClzKCIlKHBhcmFtZXRl
cktleSlzIl9zLCAlKHBhcmFtZXRlck5hbWUpcyk7JyAlIHBhcmFtX2FyZ3MpCisgICAgICAgICAg
ICAgICAgcmV0dXJuX2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAgIHByb3RvY29sX2pzb25NZXNzYWdl
LT4lKGtleWVkU2V0TWV0aG9kKXMoIiUocGFyYW1ldGVyS2V5KXMiX3MsICUocGFyYW1ldGVyVmFs
dWUpcyk7JyAlIHBhcmFtX2FyZ3MpCiAKICAgICAgICAgYXN5bmNfYXJncyA9IHsKICAgICAgICAg
ICAgICdkb21haW5OYW1lJzogZG9tYWluLmRvbWFpbl9uYW1lLAogICAgICAgICAgICAgJ2NhbGxi
YWNrTmFtZSc6IHVjZmlyc3QoY29tbWFuZC5jb21tYW5kX25hbWUpICsgJ0NhbGxiYWNrJywKLSAg
ICAgICAgICAgICdmb3JtYWxQYXJhbWV0ZXJzJzogIiwgIi5qb2luKGZvcm1hbF9wYXJhbWV0ZXJz
KSwKLSAgICAgICAgICAgICdvdXRQYXJhbWV0ZXJBc3NpZ25tZW50cyc6ICJcbiIuam9pbihvdXRf
cGFyYW1ldGVyX2Fzc2lnbm1lbnRzKQorICAgICAgICAgICAgJ2NhbGxiYWNrUGFyYW1ldGVycyc6
ICIsICIuam9pbihjYWxsYmFja19wYXJhbWV0ZXJzKSwKKyAgICAgICAgICAgICdyZXR1cm5Bc3Np
Z25tZW50cyc6ICJcbiIuam9pbihyZXR1cm5fYXNzaWdubWVudHMpCiAgICAgICAgIH0KICAgICAg
ICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oY29tbWFuZC5jb25k
aXRpb24sIFRlbXBsYXRlKENwcFRlbXBsYXRlcy5CYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0
aW9uQXN5bmNDb21tYW5kKS5zdWJzdGl0dXRlKE5vbmUsICoqYXN5bmNfYXJncykpCiAKICAgICBk
ZWYgX2dlbmVyYXRlX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb25fZm9yX2NvbW1hbmQoc2VsZiwg
Y29tbWFuZCwgZG9tYWluKToKLSAgICAgICAgaW5fcGFyYW1ldGVyX2RlY2xhcmF0aW9ucyA9IFtd
Ci0gICAgICAgIG91dF9wYXJhbWV0ZXJfZGVjbGFyYXRpb25zID0gW10KLSAgICAgICAgb3V0X3Bh
cmFtZXRlcl9hc3NpZ25tZW50cyA9IFtdCi0gICAgICAgIGFsdGVybmF0ZV9kaXNwYXRjaGVyX21l
dGhvZF9wYXJhbWV0ZXJzID0gWydyZXF1ZXN0SWQnXQorICAgICAgICBwYXJhbWV0ZXJfZGVjbGFy
YXRpb25zID0gW10KKyAgICAgICAgcGFyYW1ldGVyX2VudW1fcmVzb2x1dGlvbnMgPSBbXQorICAg
ICAgICBhbHRlcm5hdGVfZGlzcGF0Y2hlcl9tZXRob2RfcGFyYW1ldGVycyA9IFsncHJvdG9jb2xf
Y2FsbElkJ10KICAgICAgICAgbWV0aG9kX3BhcmFtZXRlcnMgPSBbXQotICAgICAgICBpZiBub3Qg
Y29tbWFuZC5pc19hc3luYzoKLSAgICAgICAgICAgIG1ldGhvZF9wYXJhbWV0ZXJzLmFwcGVuZCgn
ZXJyb3InKQogCiAgICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gY29tbWFuZC5jYWxsX3BhcmFtZXRl
cnM6Ci0gICAgICAgICAgICBwYXJhbWV0ZXJfbmFtZSA9ICdpbl8nICsgcGFyYW1ldGVyLnBhcmFt
ZXRlcl9uYW1lCisgICAgICAgICAgICBwYXJhbWV0ZXJfbmFtZSA9IHBhcmFtZXRlci5wYXJhbWV0
ZXJfbmFtZQogICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgogICAgICAgICAg
ICAgICAgIHBhcmFtZXRlcl9uYW1lID0gJ29wdF8nICsgcGFyYW1ldGVyX25hbWUKKyAgICAgICAg
ICAgIHBhcmFtZXRlcl9uYW1lID0gJ2luXycgKyBwYXJhbWV0ZXJfbmFtZQogCi0gICAgICAgICAg
ICBvdXRfc3VjY2Vzc19hcmd1bWVudCA9ICdudWxscHRyJwotICAgICAgICAgICAgaWYgcGFyYW1l
dGVyLmlzX29wdGlvbmFsOgotICAgICAgICAgICAgICAgIG91dF9zdWNjZXNzX2FyZ3VtZW50ID0g
JyYlc192YWx1ZUZvdW5kJyAlIHBhcmFtZXRlcl9uYW1lCi0gICAgICAgICAgICAgICAgaW5fcGFy
YW1ldGVyX2RlY2xhcmF0aW9ucy5hcHBlbmQoJyAgICBib29sICVzX3ZhbHVlRm91bmQgPSBmYWxz
ZTsnICUgcGFyYW1ldGVyX25hbWUpCisgICAgICAgICAgICB2YXJpYWJsZV9uYW1lID0gcGFyYW1l
dGVyX25hbWUKIAotICAgICAgICAgICAgIyBOb3cgYWRkIGFwcHJvcHJpYXRlIG9wZXJhdG9ycy4K
LSAgICAgICAgICAgIHBhcmFtZXRlcl9leHByZXNzaW9uID0gcGFyYW1ldGVyX25hbWUKKyAgICAg
ICAgICAgIF90eXBlID0gcGFyYW1ldGVyLnR5cGUKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uo
X3R5cGUsIEFsaWFzZWRUeXBlKToKKyAgICAgICAgICAgICAgICBfdHlwZSA9IF90eXBlLmFsaWFz
ZWRfdHlwZQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgRW51bVR5cGUpIGFuZCBf
dHlwZS5pc19hbm9ueW1vdXM6CisgICAgICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5wcmltaXRp
dmVfdHlwZQogCi0gICAgICAgICAgICBpZiBDcHBHZW5lcmF0b3Iuc2hvdWxkX3VzZV9yZWZlcmVu
Y2VzX2Zvcl90eXBlKHBhcmFtZXRlci50eXBlKToKLSAgICAgICAgICAgICAgICBpZiBwYXJhbWV0
ZXIuaXNfb3B0aW9uYWw6Ci0gICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcl9leHByZXNzaW9u
ID0gJyVzLmdldCgpJyAlIHBhcmFtZXRlcl9leHByZXNzaW9uCi0gICAgICAgICAgICAgICAgZWxz
ZToKLSAgICAgICAgICAgICAgICAgICAgIyBUaGlzIGFzc3VtZXMgdGhhdCB3ZSBoYXZlIGFscmVh
ZHkgcHJvdmVkIHRoZSBvYmplY3QgaXMgbm9uLW51bGwuCi0gICAgICAgICAgICAgICAgICAgICMg
SWYgYSByZXF1aXJlZCBwcm9wZXJ0eSBpcyBtaXNzaW5nLCBJbnNwZWN0b3JCYWNrZW5kOjpnZXRP
YmplY3Qgd2lsbAotICAgICAgICAgICAgICAgICAgICAjIGFwcGVuZCBhIHByb3RvY29sIGVycm9y
LCBhbmQgdGhlIG1ldGhvZCBkaXNwYXRjaGVyIHdpbGwgcmV0dXJuIHdpdGhvdXQKLSAgICAgICAg
ICAgICAgICAgICAgIyBpbnZva2luZyB0aGUgYmFja2VuZCBtZXRob2QgKGFuZCBkZXJlZmVyZW5j
aW5nIHRoZSBvYmplY3QpLgotICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfZXhwcmVzc2lv
biA9ICcqJXMnICUgcGFyYW1ldGVyX2V4cHJlc3Npb24KLSAgICAgICAgICAgIGVsaWYgcGFyYW1l
dGVyLmlzX29wdGlvbmFsOgotICAgICAgICAgICAgICAgIHBhcmFtZXRlcl9leHByZXNzaW9uID0g
JyYlcycgJSBwYXJhbWV0ZXJfZXhwcmVzc2lvbgorICAgICAgICAgICAgaWYgX3R5cGUuaXNfZW51
bSgpOgorICAgICAgICAgICAgICAgIHBhcmFtZXRlcl9uYW1lID0gcGFyYW1ldGVyX25hbWUgKyAn
X2pzb24nCiAKLSAgICAgICAgICAgIHBhcmFtX2FyZ3MgPSB7Ci0gICAgICAgICAgICAgICAgJ3Bh
cmFtZXRlclR5cGUnOiBDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX3N0YWNrX2luX3BhcmFtZXRl
cihwYXJhbWV0ZXIpLAotICAgICAgICAgICAgICAgICdwYXJhbWV0ZXJLZXknOiBwYXJhbWV0ZXIu
cGFyYW1ldGVyX25hbWUsCi0gICAgICAgICAgICAgICAgJ3BhcmFtZXRlck5hbWUnOiBwYXJhbWV0
ZXJfbmFtZSwKLSAgICAgICAgICAgICAgICAncGFyYW1ldGVyRXhwcmVzc2lvbic6IHBhcmFtZXRl
cl9leHByZXNzaW9uLAotICAgICAgICAgICAgICAgICdrZXllZEdldE1ldGhvZCc6IENwcEdlbmVy
YXRvci5jcHBfZ2V0dGVyX21ldGhvZF9mb3JfdHlwZShwYXJhbWV0ZXIudHlwZSksCi0gICAgICAg
ICAgICAgICAgJ3N1Y2Nlc3NPdXRQYXJhbSc6IG91dF9zdWNjZXNzX2FyZ3VtZW50Ci0gICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgYWx0ZXJuYXRlX2Rpc3BhdGNoZXJfbWV0aG9kX3BhcmFt
ZXRlcnMuYXBwZW5kKHBhcmFtZXRlcl9uYW1lKQogCi0gICAgICAgICAgICBpbl9wYXJhbWV0ZXJf
ZGVjbGFyYXRpb25zLmFwcGVuZCgnICAgICUocGFyYW1ldGVyVHlwZSlzICUocGFyYW1ldGVyTmFt
ZSlzID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+JShrZXllZEdldE1ldGhvZClzKHBhcmFtZXRlcnMu
Z2V0KCksICIlKHBhcmFtZXRlcktleSlzIl9zLCAlKHN1Y2Nlc3NPdXRQYXJhbSlzKTsnICUgcGFy
YW1fYXJncykKLQotICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgotICAgICAg
ICAgICAgICAgIG9wdGlvbmFsX2luX3BhcmFtZXRlcl9zdHJpbmcgPSAnJShwYXJhbWV0ZXJOYW1l
KXNfdmFsdWVGb3VuZCA/ICUocGFyYW1ldGVyRXhwcmVzc2lvbilzIDogbnVsbHB0cicgJSBwYXJh
bV9hcmdzCi0gICAgICAgICAgICAgICAgYWx0ZXJuYXRlX2Rpc3BhdGNoZXJfbWV0aG9kX3BhcmFt
ZXRlcnMuYXBwZW5kKG9wdGlvbmFsX2luX3BhcmFtZXRlcl9zdHJpbmcpCi0gICAgICAgICAgICAg
ICAgbWV0aG9kX3BhcmFtZXRlcnMuYXBwZW5kKG9wdGlvbmFsX2luX3BhcmFtZXRlcl9zdHJpbmcp
Ci0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGFsdGVybmF0ZV9kaXNwYXRjaGVy
X21ldGhvZF9wYXJhbWV0ZXJzLmFwcGVuZChwYXJhbWV0ZXJfZXhwcmVzc2lvbikKLSAgICAgICAg
ICAgICAgICBtZXRob2RfcGFyYW1ldGVycy5hcHBlbmQocGFyYW1ldGVyX2V4cHJlc3Npb24pCi0K
LSAgICAgICAgaWYgY29tbWFuZC5pc19hc3luYzoKLSAgICAgICAgICAgIGFzeW5jX2FyZ3MgPSB7
Ci0gICAgICAgICAgICAgICAgJ2RvbWFpbk5hbWUnOiBkb21haW4uZG9tYWluX25hbWUsCi0gICAg
ICAgICAgICAgICAgJ2NhbGxiYWNrTmFtZSc6IHVjZmlyc3QoY29tbWFuZC5jb21tYW5kX25hbWUp
ICsgJ0NhbGxiYWNrJwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBvdXRfcGFyYW1ldGVy
X2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAgICAgICBjYWxsYmFjay0+ZGlzYWJsZSgpOycpCi0gICAg
ICAgICAgICBvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAgICAgICBtX2JhY2tl
bmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2
ZXJFcnJvciwgZXJyb3IpOycpCi0gICAgICAgICAgICBvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRz
LmFwcGVuZCgnICAgICAgICByZXR1cm47JykKLSAgICAgICAgICAgIG1ldGhvZF9wYXJhbWV0ZXJz
LmFwcGVuZCgnY2FsbGJhY2suY29weVJlZigpJykKLQotICAgICAgICBlbHNlOgotICAgICAgICAg
ICAgZm9yIHBhcmFtZXRlciBpbiBjb21tYW5kLnJldHVybl9wYXJhbWV0ZXJzOgotICAgICAgICAg
ICAgICAgIHBhcmFtX2FyZ3MgPSB7Ci0gICAgICAgICAgICAgICAgICAgICdwYXJhbWV0ZXJUeXBl
JzogQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl9zdGFja19vdXRfcGFyYW1ldGVyKHBhcmFtZXRl
ciksCi0gICAgICAgICAgICAgICAgICAgICdwYXJhbWV0ZXJLZXknOiBwYXJhbWV0ZXIucGFyYW1l
dGVyX25hbWUsCi0gICAgICAgICAgICAgICAgICAgICdwYXJhbWV0ZXJOYW1lJzogcGFyYW1ldGVy
LnBhcmFtZXRlcl9uYW1lLAotICAgICAgICAgICAgICAgICAgICAna2V5ZWRTZXRNZXRob2QnOiBD
cHBHZW5lcmF0b3IuY3BwX3NldHRlcl9tZXRob2RfZm9yX3R5cGUocGFyYW1ldGVyLnR5cGUpLAor
ICAgICAgICAgICAgICAgIGVudW1fYXJncyA9IHsKICAgICAgICAgICAgICAgICAgICAgJ2hlbHBl
cnNOYW1lc3BhY2UnOiBzZWxmLmhlbHBlcnNfbmFtZXNwYWNlKCksCisgICAgICAgICAgICAgICAg
ICAgICdwYXJhbWV0ZXJLZXknOiBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUsCisgICAgICAgICAg
ICAgICAgICAgICdlbnVtVHlwZSc6IENwcEdlbmVyYXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3Jf
dHlwZShfdHlwZSksCisgICAgICAgICAgICAgICAgICAgICdlbnVtVmFyaWFibGVOYW1lJzogdmFy
aWFibGVfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgJ3N0cmluZ1ZhcmlhYmxlTmFtZSc6IHBh
cmFtZXRlcl9uYW1lLAogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIG91dF9w
YXJhbWV0ZXJfZGVjbGFyYXRpb25zLmFwcGVuZCgnICAgICUocGFyYW1ldGVyVHlwZSlzIG91dF8l
KHBhcmFtZXRlck5hbWUpczsnICUgcGFyYW1fYXJncykKKyAgICAgICAgICAgICAgICBpZiBsZW4o
cGFyYW1ldGVyX2VudW1fcmVzb2x1dGlvbnMpOgorICAgICAgICAgICAgICAgICAgICBwYXJhbWV0
ZXJfZW51bV9yZXNvbHV0aW9ucy5hcHBlbmQoJycpCisgICAgICAgICAgICAgICAgcGFyYW1ldGVy
X2VudW1fcmVzb2x1dGlvbnMuYXBwZW5kKCcgICAgYXV0byAlKGVudW1WYXJpYWJsZU5hbWUpcyA9
IFByb3RvY29sOjolKGhlbHBlcnNOYW1lc3BhY2Upczo6cGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5n
PCUoZW51bVR5cGUpcz4oJShzdHJpbmdWYXJpYWJsZU5hbWUpcyk7JyAlIGVudW1fYXJncykKICAg
ICAgICAgICAgICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6Ci0gICAgICAgICAgICAgICAg
ICAgIGlmIENwcEdlbmVyYXRvci5zaG91bGRfdXNlX3dyYXBwZXJfZm9yX3JldHVybl90eXBlKHBh
cmFtZXRlci50eXBlKToKLSAgICAgICAgICAgICAgICAgICAgICAgIG91dF9wYXJhbWV0ZXJfYXNz
aWdubWVudHMuYXBwZW5kKCcgICAgICAgIGlmIChvdXRfJShwYXJhbWV0ZXJOYW1lKXMuaGFzVmFs
dWUoKSknICUgcGFyYW1fYXJncykKLSAgICAgICAgICAgICAgICAgICAgICAgIG91dF9wYXJhbWV0
ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAgICAgICAgICByZXN1bHQtPiUoa2V5ZWRTZXRNZXRo
b2QpcygiJShwYXJhbWV0ZXJLZXkpcyJfcywgKm91dF8lKHBhcmFtZXRlck5hbWUpcyk7JyAlIHBh
cmFtX2FyZ3MpCi0gICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAgICAgICBpZiAob3V0XyUo
cGFyYW1ldGVyTmFtZSlzKScgJSBwYXJhbV9hcmdzKQotICAgICAgICAgICAgICAgICAgICAgICAg
b3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICAgICAgICAgIHJlc3VsdC0+JShr
ZXllZFNldE1ldGhvZClzKCIlKHBhcmFtZXRlcktleSlzIl9zLCBvdXRfJShwYXJhbWV0ZXJOYW1l
KXMpOycgJSBwYXJhbV9hcmdzKQotICAgICAgICAgICAgICAgIGVsaWYgcGFyYW1ldGVyLnR5cGUu
aXNfZW51bSgpOgotICAgICAgICAgICAgICAgICAgICBvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRz
LmFwcGVuZCgnICAgICAgICByZXN1bHQtPiUoa2V5ZWRTZXRNZXRob2QpcygiJShwYXJhbWV0ZXJL
ZXkpcyJfcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6JShoZWxwZXJzTmFtZXNwYWNlKXM6OmdldEVu
dW1Db25zdGFudFZhbHVlKG91dF8lKHBhcmFtZXRlck5hbWUpcykpOycgJSBwYXJhbV9hcmdzKQor
ICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfZXhwcmVzc2lvbiA9ICdXVEZNb3ZlKCVzKScg
JSB2YXJpYWJsZV9uYW1lCiAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAg
ICAgb3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICAgICAgcmVzdWx0LT4lKGtl
eWVkU2V0TWV0aG9kKXMoIiUocGFyYW1ldGVyS2V5KXMiX3MsIG91dF8lKHBhcmFtZXRlck5hbWUp
cyk7JyAlIHBhcmFtX2FyZ3MpCisgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcl9lbnVtX3Jl
c29sdXRpb25zLmFwcGVuZCgnICAgIGlmICghJShlbnVtVmFyaWFibGVOYW1lKXMpIHsnICUgZW51
bV9hcmdzKQorICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfZW51bV9yZXNvbHV0aW9ucy5h
cHBlbmQoJyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihC
YWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIG1ha2VTdHJpbmcoIlVua25vd24gJShwYXJh
bWV0ZXJLZXkpczogIl9zLCAlKHN0cmluZ1ZhcmlhYmxlTmFtZSlzKSk7JyAlIGVudW1fYXJncykK
KyAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyX2VudW1fcmVzb2x1dGlvbnMuYXBwZW5kKCcg
ICAgICAgIHJldHVybjsnKQorICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfZW51bV9yZXNv
bHV0aW9ucy5hcHBlbmQoJyAgICB9JykKKyAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyX2V4
cHJlc3Npb24gPSAnKicgKyB2YXJpYWJsZV9uYW1lCisgICAgICAgICAgICBlbHNlOgorICAgICAg
ICAgICAgICAgIGlmIF90eXBlLnJhd19uYW1lKCkgPT0gJ3N0cmluZyc6CisgICAgICAgICAgICAg
ICAgICAgIHBhcmFtZXRlcl9leHByZXNzaW9uID0gdmFyaWFibGVfbmFtZQorICAgICAgICAgICAg
ICAgIGVsaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAgICAgICBwYXJh
bWV0ZXJfZXhwcmVzc2lvbiA9ICdXVEZNb3ZlKCVzKScgJSB2YXJpYWJsZV9uYW1lCisgICAgICAg
ICAgICAgICAgZWxpZiBfdHlwZS5yYXdfbmFtZSgpIGluIFsnYm9vbGVhbicsICdpbnRlZ2VyJywg
J251bWJlciddOgorICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfZXhwcmVzc2lvbiA9ICcq
JyArIHZhcmlhYmxlX25hbWUKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAg
ICAgICBwYXJhbWV0ZXJfZXhwcmVzc2lvbiA9IHZhcmlhYmxlX25hbWUgKyAnLnJlbGVhc2VOb25O
dWxsKCknCisgICAgICAgICAgICAgICAgYWx0ZXJuYXRlX2Rpc3BhdGNoZXJfbWV0aG9kX3BhcmFt
ZXRlcnMuYXBwZW5kKHBhcmFtZXRlcl9leHByZXNzaW9uKQorICAgICAgICAgICAgbWV0aG9kX3Bh
cmFtZXRlcnMuYXBwZW5kKHBhcmFtZXRlcl9leHByZXNzaW9uKQogCi0gICAgICAgICAgICAgICAg
aWYgQ3BwR2VuZXJhdG9yLnNob3VsZF9wYXNzX2J5X2NvcHlfZm9yX3JldHVybl90eXBlKHBhcmFt
ZXRlci50eXBlKSBvciBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwgYW5kIENwcEdlbmVyYXRvci5zaG91
bGRfdXNlX3dyYXBwZXJfZm9yX3JldHVybl90eXBlKHBhcmFtZXRlci50eXBlKToKLSAgICAgICAg
ICAgICAgICAgICAgbWV0aG9kX3BhcmFtZXRlcnMuYXBwZW5kKCdvdXRfJyArIHBhcmFtZXRlci5w
YXJhbWV0ZXJfbmFtZSkKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAg
ICBtZXRob2RfcGFyYW1ldGVycy5hcHBlbmQoJyZvdXRfJyArIHBhcmFtZXRlci5wYXJhbWV0ZXJf
bmFtZSkKKyAgICAgICAgICAgIHBhcmFtX2FyZ3MgPSB7CisgICAgICAgICAgICAgICAgJ3BhcmFt
ZXRlcktleSc6IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwKKyAgICAgICAgICAgICAgICAncGFy
YW1ldGVyTmFtZSc6IHBhcmFtZXRlcl9uYW1lLAorICAgICAgICAgICAgICAgICdrZXllZEdldE1l
dGhvZCc6IENwcEdlbmVyYXRvci5jcHBfZ2V0dGVyX21ldGhvZF9mb3JfdHlwZShfdHlwZSksCisg
ICAgICAgICAgICAgICAgJ3JlcXVpcmVkJzogJ2ZhbHNlJyBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9u
YWwgZWxzZSAndHJ1ZScsCisgICAgICAgICAgICB9CisgICAgICAgICAgICBwYXJhbWV0ZXJfZGVj
bGFyYXRpb25zLmFwcGVuZCgnICAgIGF1dG8gJShwYXJhbWV0ZXJOYW1lKXMgPSBtX2JhY2tlbmRE
aXNwYXRjaGVyLT4lKGtleWVkR2V0TWV0aG9kKXMocHJvdG9jb2xfcGFyYW1ldGVycy5nZXQoKSwg
IiUocGFyYW1ldGVyS2V5KXMiX3MsICUocmVxdWlyZWQpcyk7JyAlIHBhcmFtX2FyZ3MpCisKKyAg
ICAgICAgaWYgY29tbWFuZC5pc19hc3luYzoKKyAgICAgICAgICAgIG1ldGhvZF9wYXJhbWV0ZXJz
LmFwcGVuZCgnYWRvcHRSZWYoKm5ldyAlc0JhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6JXMobV9i
YWNrZW5kRGlzcGF0Y2hlci5jb3B5UmVmKCksIHByb3RvY29sX2NhbGxJZCkpJyAlIChkb21haW4u
ZG9tYWluX25hbWUsICclc0NhbGxiYWNrJyAlIHVjZmlyc3QoY29tbWFuZC5jb21tYW5kX25hbWUp
KSkKIAogICAgICAgICBjb21tYW5kX2FyZ3MgPSB7CiAgICAgICAgICAgICAnZG9tYWluTmFtZSc6
IGRvbWFpbi5kb21haW5fbmFtZSwKLSAgICAgICAgICAgICdjYWxsYmFja05hbWUnOiAnJXNDYWxs
YmFjaycgJSB1Y2ZpcnN0KGNvbW1hbmQuY29tbWFuZF9uYW1lKSwKICAgICAgICAgICAgICdjb21t
YW5kTmFtZSc6IGNvbW1hbmQuY29tbWFuZF9uYW1lLAotICAgICAgICAgICAgJ2luUGFyYW1ldGVy
RGVjbGFyYXRpb25zJzogJ1xuJy5qb2luKGluX3BhcmFtZXRlcl9kZWNsYXJhdGlvbnMpLAorICAg
ICAgICAgICAgJ3BhcmFtZXRlckRlY2xhcmF0aW9ucyc6ICdcbicuam9pbihwYXJhbWV0ZXJfZGVj
bGFyYXRpb25zKSwKICAgICAgICAgICAgICdpbnZvY2F0aW9uUGFyYW1ldGVycyc6ICcsICcuam9p
bihtZXRob2RfcGFyYW1ldGVycyksCiAgICAgICAgICAgICAnYWx0ZXJuYXRlSW52b2NhdGlvblBh
cmFtZXRlcnMnOiAnLCAnLmpvaW4oYWx0ZXJuYXRlX2Rpc3BhdGNoZXJfbWV0aG9kX3BhcmFtZXRl
cnMpLAogICAgICAgICB9CiAKICAgICAgICAgbGluZXMgPSBbXQogICAgICAgICBpZiBsZW4oY29t
bWFuZC5jYWxsX3BhcmFtZXRlcnMpID09IDA6Ci0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ3Zv
aWQgJShkb21haW5OYW1lKXNCYWNrZW5kRGlzcGF0Y2hlcjo6JShjb21tYW5kTmFtZSlzKGxvbmcg
cmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKScgJSBjb21tYW5kX2FyZ3MpCisgICAg
ICAgICAgICBsaW5lcy5hcHBlbmQoJ3ZvaWQgJShkb21haW5OYW1lKXNCYWNrZW5kRGlzcGF0Y2hl
cjo6JShjb21tYW5kTmFtZSlzKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiYmKScgJSBjb21tYW5kX2FyZ3MpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBsaW5l
cy5hcHBlbmQoJ3ZvaWQgJShkb21haW5OYW1lKXNCYWNrZW5kRGlzcGF0Y2hlcjo6JShjb21tYW5k
TmFtZSlzKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMp
JyAlIGNvbW1hbmRfYXJncykKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgndm9pZCAlKGRvbWFp
bk5hbWUpc0JhY2tlbmREaXNwYXRjaGVyOjolKGNvbW1hbmROYW1lKXMobG9uZyBwcm90b2NvbF9j
YWxsSWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfcGFyYW1ldGVycyknICUgY29t
bWFuZF9hcmdzKQogICAgICAgICBsaW5lcy5hcHBlbmQoJ3snKQogCiAgICAgICAgIGlmIGxlbihj
b21tYW5kLmNhbGxfcGFyYW1ldGVycykgPiAwOgpAQCAtMzE5LDMxICszMDYsNzEgQEAgY2xhc3Mg
Q3BwQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihDcHBHZW5lcmF0b3Ip
OgogICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9B
TFRFUk5BVEVfRElTUEFUQ0hFUlMpJykKICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnJykKIAor
ICAgICAgICBpZiBsZW4ocGFyYW1ldGVyX2VudW1fcmVzb2x1dGlvbnMpOgorICAgICAgICAgICAg
bGluZXMuZXh0ZW5kKHBhcmFtZXRlcl9lbnVtX3Jlc29sdXRpb25zKQorICAgICAgICAgICAgbGlu
ZXMuYXBwZW5kKCcnKQorCiAgICAgICAgIGlmIGNvbW1hbmQuaXNfYXN5bmM6Ci0gICAgICAgICAg
ICBsaW5lcy5hcHBlbmQoJyAgICBSZWY8JShkb21haW5OYW1lKXNCYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXI6OiUoY2FsbGJhY2tOYW1lKXM+IGNhbGxiYWNrID0gYWRvcHRSZWYoKm5ldyAlKGRvbWFp
bk5hbWUpc0JhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6JShjYWxsYmFja05hbWUpcyhtX2JhY2tl
bmREaXNwYXRjaGVyLmNvcHlSZWYoKSwgcmVxdWVzdElkKSk7JyAlIGNvbW1hbmRfYXJncykKKyAg
ICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIG1fYWdlbnQtPiUoY29tbWFuZE5hbWUpcyglKGlu
dm9jYXRpb25QYXJhbWV0ZXJzKXMpOycgJSBjb21tYW5kX2FyZ3MpCiAgICAgICAgIGVsc2U6Ci0g
ICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBFcnJvclN0cmluZyBlcnJvcjsnKQotICAgICAg
ICAgICAgbGluZXMuYXBwZW5kKCcgICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6
T2JqZWN0OjpjcmVhdGUoKTsnKQorICAgICAgICAgICAgcmVzdWx0X2V4dHJhY3Rpb25fbmFtZXMg
PSBbXQorICAgICAgICAgICAgcmVzdWx0X2NvbnZlcnNpb25fbGluZXMgPSBbXQorICAgICAgICAg
ICAgZm9yIHBhcmFtZXRlciBpbiBjb21tYW5kLnJldHVybl9wYXJhbWV0ZXJzOgorICAgICAgICAg
ICAgICAgIHBhcmFtZXRlcl9uYW1lID0gcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lCisgICAgICAg
ICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAgICAgICBw
YXJhbWV0ZXJfbmFtZSA9ICdvcHRfJyArIHBhcmFtZXRlcl9uYW1lCisgICAgICAgICAgICAgICAg
cGFyYW1ldGVyX25hbWUgPSAnb3V0XycgKyBwYXJhbWV0ZXJfbmFtZQogCi0gICAgICAgIGlmIGxl
bihjb21tYW5kLnJldHVybl9wYXJhbWV0ZXJzKSA+IDA6Ci0gICAgICAgICAgICBsaW5lcy5leHRl
bmQob3V0X3BhcmFtZXRlcl9kZWNsYXJhdGlvbnMpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAg
IG1fYWdlbnQtPiUoY29tbWFuZE5hbWUpcyglKGludm9jYXRpb25QYXJhbWV0ZXJzKXMpOycgJSBj
b21tYW5kX2FyZ3MpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnJykKKyAgICAgICAgICAgICAgICBy
ZXN1bHRfZXh0cmFjdGlvbl9uYW1lcy5hcHBlbmQocGFyYW1ldGVyX25hbWUpCiAKLSAgICAgICAg
aWYgbm90IGNvbW1hbmQuaXNfYXN5bmM6Ci0gICAgICAgICAgICBpZiBsZW4oY29tbWFuZC5yZXR1
cm5fcGFyYW1ldGVycykgPiAxOgotICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGlm
ICghZXJyb3IubGVuZ3RoKCkpIHsnKQotICAgICAgICAgICAgICAgIGxpbmVzLmV4dGVuZChvdXRf
cGFyYW1ldGVyX2Fzc2lnbm1lbnRzKQotICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAg
IH0nKQotICAgICAgICAgICAgZWxpZiBsZW4oY29tbWFuZC5yZXR1cm5fcGFyYW1ldGVycykgPT0g
MToKLSAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBpZiAoIWVycm9yLmxlbmd0aCgp
KScpCi0gICAgICAgICAgICAgICAgbGluZXMuZXh0ZW5kKG91dF9wYXJhbWV0ZXJfYXNzaWdubWVu
dHMpCisgICAgICAgICAgICAgICAgcGFyYW1ldGVyX3ZhbHVlID0gcGFyYW1ldGVyX25hbWUKKwor
ICAgICAgICAgICAgICAgIF90eXBlID0gcGFyYW1ldGVyLnR5cGUKKyAgICAgICAgICAgICAgICBp
ZiBpc2luc3RhbmNlKF90eXBlLCBBbGlhc2VkVHlwZSk6CisgICAgICAgICAgICAgICAgICAgIF90
eXBlID0gX3R5cGUuYWxpYXNlZF90eXBlCisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShf
dHlwZSwgRW51bVR5cGUpIGFuZCBfdHlwZS5pc19hbm9ueW1vdXM6CisgICAgICAgICAgICAgICAg
ICAgIF90eXBlID0gX3R5cGUucHJpbWl0aXZlX3R5cGUKKworICAgICAgICAgICAgICAgIGlmIF90
eXBlLmlzX2VudW0oKToKKyAgICAgICAgICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlv
bmFsOgorICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyX3ZhbHVlID0gJyonICsgcGFy
YW1ldGVyX3ZhbHVlCisgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcl92YWx1ZSA9ICdQcm90
b2NvbDo6JXM6OmdldEVudW1Db25zdGFudFZhbHVlKCVzKScgJSAoc2VsZi5oZWxwZXJzX25hbWVz
cGFjZSgpLCBwYXJhbWV0ZXJfdmFsdWUpCisgICAgICAgICAgICAgICAgZWxpZiBDcHBHZW5lcmF0
b3Iuc2hvdWxkX3JlbGVhc2VfYXJndW1lbnQoX3R5cGUsIHBhcmFtZXRlci5pc19vcHRpb25hbCk6
CisgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcl92YWx1ZSA9IHBhcmFtZXRlcl92YWx1ZSAr
ICcucmVsZWFzZU5vbk51bGwoKScKKyAgICAgICAgICAgICAgICBlbGlmIENwcEdlbmVyYXRvci5z
aG91bGRfZGVyZWZlcmVuY2VfYXJndW1lbnQoX3R5cGUsIHBhcmFtZXRlci5pc19vcHRpb25hbCk6
CisgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcl92YWx1ZSA9ICcqJyArIHBhcmFtZXRlcl92
YWx1ZQorICAgICAgICAgICAgICAgIGVsaWYgQ3BwR2VuZXJhdG9yLnNob3VsZF9tb3ZlX2FyZ3Vt
ZW50KF90eXBlLCBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwpOgorICAgICAgICAgICAgICAgICAgICBw
YXJhbWV0ZXJfdmFsdWUgPSAnV1RGTW92ZSglcyknICUgcGFyYW1ldGVyX3ZhbHVlCisKKyAgICAg
ICAgICAgICAgICBwYXJhbV9hcmdzID0geworICAgICAgICAgICAgICAgICAgICAna2V5ZWRTZXRN
ZXRob2QnOiBDcHBHZW5lcmF0b3IuY3BwX3NldHRlcl9tZXRob2RfZm9yX3R5cGUoX3R5cGUpLAor
ICAgICAgICAgICAgICAgICAgICAncGFyYW1ldGVyS2V5JzogcGFyYW1ldGVyLnBhcmFtZXRlcl9u
YW1lLAorICAgICAgICAgICAgICAgICAgICAncGFyYW1ldGVyTmFtZSc6IHBhcmFtZXRlcl9uYW1l
LAorICAgICAgICAgICAgICAgICAgICAncGFyYW1ldGVyVmFsdWUnOiBwYXJhbWV0ZXJfdmFsdWUs
CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29w
dGlvbmFsOgorICAgICAgICAgICAgICAgICAgICByZXN1bHRfY29udmVyc2lvbl9saW5lcy5hcHBl
bmQoJyAgICBpZiAoISElKHBhcmFtZXRlck5hbWUpcyknICUgcGFyYW1fYXJncykKKyAgICAgICAg
ICAgICAgICAgICAgcmVzdWx0X2NvbnZlcnNpb25fbGluZXMuYXBwZW5kKCcgICAgICAgIHByb3Rv
Y29sX2pzb25NZXNzYWdlLT4lKGtleWVkU2V0TWV0aG9kKXMoIiUocGFyYW1ldGVyS2V5KXMiX3Ms
ICUocGFyYW1ldGVyVmFsdWUpcyk7JyAlIHBhcmFtX2FyZ3MpCisgICAgICAgICAgICAgICAgZWxz
ZToKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0X2NvbnZlcnNpb25fbGluZXMuYXBwZW5kKCcg
ICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPiUoa2V5ZWRTZXRNZXRob2QpcygiJShwYXJhbWV0ZXJL
ZXkpcyJfcywgJShwYXJhbWV0ZXJWYWx1ZSlzKTsnICUgcGFyYW1fYXJncykKKworICAgICAgICAg
ICAgbGluZXMuYXBwZW5kKCcgICAgYXV0byByZXN1bHQgPSBtX2FnZW50LT4lKGNvbW1hbmROYW1l
KXMoJShpbnZvY2F0aW9uUGFyYW1ldGVycylzKTsnICUgY29tbWFuZF9hcmdzKQorICAgICAgICAg
ICAgbGluZXMuYXBwZW5kKCcgICAgaWYgKCFyZXN1bHQpIHsnKQorICAgICAgICAgICAgbGluZXMu
YXBwZW5kKCcgICAgICAgIEFTU0VSVCghcmVzdWx0LmVycm9yKCkuaXNFbXB0eSgpKTsnKQorICAg
ICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9y
dFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCByZXN1bHQuZXJy
b3IoKSk7JykKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICByZXR1cm47JykKKyAg
ICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIH0nKQorICAgICAgICAgICAgbGluZXMuYXBwZW5k
KCcnKQorICAgICAgICAgICAgaWYgbGVuKHJlc3VsdF9leHRyYWN0aW9uX25hbWVzKSA9PSAxOgor
ICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGF1dG8gJXMgPSBXVEZNb3ZlKHJlc3Vs
dC52YWx1ZSgpKTsnICUgcmVzdWx0X2V4dHJhY3Rpb25fbmFtZXNbMF0pCiAgICAgICAgICAgICAg
ICAgbGluZXMuYXBwZW5kKCcnKQotCi0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBpZiAo
IWVycm9yLmxlbmd0aCgpKScpCi0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgbV9i
YWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQp
LCBmYWxzZSk7JykKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGVsc2UnKQotICAgICAg
ICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFBy
b3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9y
KSk7JykKKyAgICAgICAgICAgIGVsaWYgbGVuKHJlc3VsdF9leHRyYWN0aW9uX25hbWVzKSA+IDE6
CisgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgYXV0byBbJXNdID0gV1RGTW92ZShy
ZXN1bHQudmFsdWUoKSk7JyAlICIsICIuam9pbihyZXN1bHRfZXh0cmFjdGlvbl9uYW1lcykpCisg
ICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcnKQorICAgICAgICAgICAgbGluZXMuYXBwZW5k
KCcgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7
JykKKyAgICAgICAgICAgIGxpbmVzLmV4dGVuZChyZXN1bHRfY29udmVyc2lvbl9saW5lcykKKyAg
ICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNw
b25zZShwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJvdG9jb2xfanNvbk1lc3NhZ2UpLCBmYWxz
ZSk7JykKIAogICAgICAgICBsaW5lcy5hcHBlbmQoJ30nKQogICAgICAgICByZXR1cm4gc2VsZi53
cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihjb21tYW5kLmNvbmRpdGlvbiwgIlxuIi5qb2lu
KGxpbmVzKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9mcm9udGVuZF9kaXNwYXRjaGVyX2hlYWRlci5weSBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRl
X2NwcF9mcm9udGVuZF9kaXNwYXRjaGVyX2hlYWRlci5weQppbmRleCAxMTlkMjNjMzhjZGYyNGNm
NTZkMGZmYzY2ZDU3YjhhM2Q0ZTJkYTQ0Li5iZWFhMTdjOTgxNTRiN2VlMjJlM2I1Yjk3NmQwMTgz
OTQwYTQ2OTEzIDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfZnJvbnRlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2Vu
ZXJhdGVfY3BwX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5CkBAIC03Myw5ICs3Myw5IEBA
IGNsYXNzIENwcEZyb250ZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvcihDcHBHZW5lcmF0b3Ip
OgogICAgICAgICBoZWFkZXJfaW5jbHVkZXMgPSBbCiAgICAgICAgICAgICAoWyJKYXZhU2NyaXB0
Q29yZSIsICJXZWJLaXQiXSwgKHNlbGYubW9kZWwoKS5mcmFtZXdvcmsubmFtZSwgIiVzUHJvdG9j
b2xPYmplY3RzLmgiICUgc2VsZi5wcm90b2NvbF9uYW1lKCkpKSwKICAgICAgICAgICAgIChbIkph
dmFTY3JpcHRDb3JlIiwgIldlYktpdCJdLCAoIldURiIsICJ3dGYvSlNPTlZhbHVlcy5oIikpLAot
ICAgICAgICAgICAgKFsiSmF2YVNjcmlwdENvcmUiLCAiV2ViS2l0Il0sICgiV1RGIiwgInd0Zi90
ZXh0L1dURlN0cmluZy5oIikpCisgICAgICAgICAgICAoWyJKYXZhU2NyaXB0Q29yZSIsICJXZWJL
aXQiXSwgKCJXVEYiLCAid3RmL09wdGlvbmFsLmgiKSksCisgICAgICAgICAgICAoWyJKYXZhU2Ny
aXB0Q29yZSIsICJXZWJLaXQiXSwgKCJXVEYiLCAid3RmL3RleHQvV1RGU3RyaW5nLmgiKSksCiAg
ICAgICAgIF0KLQogICAgICAgICByZXR1cm4gJ1xuJy5qb2luKHNlbGYuZ2VuZXJhdGVfaW5jbHVk
ZXNfZnJvbV9lbnRyaWVzKGhlYWRlcl9pbmNsdWRlcykpCiAKICAgICBkZWYgX2dlbmVyYXRlX2Fu
b255bW91c19lbnVtX2Zvcl9wYXJhbWV0ZXIoc2VsZiwgcGFyYW1ldGVyLCBldmVudCk6CkBAIC0x
MTcsOCArMTE3LDEzIEBAIGNsYXNzIENwcEZyb250ZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRv
cihDcHBHZW5lcmF0b3IpOgogICAgICAgICBmb3JtYWxfcGFyYW1ldGVycyA9IFtdCiAgICAgICAg
IGxpbmVzID0gW10KICAgICAgICAgZm9yIHBhcmFtZXRlciBpbiBldmVudC5ldmVudF9wYXJhbWV0
ZXJzOgotICAgICAgICAgICAgZm9ybWFsX3BhcmFtZXRlcnMuYXBwZW5kKCclcyAlcycgJSAoQ3Bw
R2VuZXJhdG9yLmNwcF90eXBlX2Zvcl9jaGVja2VkX2Zvcm1hbF9ldmVudF9wYXJhbWV0ZXIocGFy
YW1ldGVyKSwgcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKSkKLSAgICAgICAgICAgIGlmIGlzaW5z
dGFuY2UocGFyYW1ldGVyLnR5cGUsIEVudW1UeXBlKSBhbmQgcGFyYW1ldGVyLnBhcmFtZXRlcl9u
YW1lIG5vdCBpbiB1c2VkX2VudW1fbmFtZXM6CisgICAgICAgICAgICBwYXJhbWV0ZXJfbmFtZSA9
IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZQorICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29w
dGlvbmFsOgorICAgICAgICAgICAgICAgIHBhcmFtZXRlcl9uYW1lID0gJ29wdF8nICsgcGFyYW1l
dGVyX25hbWUKKworICAgICAgICAgICAgZm9ybWFsX3BhcmFtZXRlcnMuYXBwZW5kKCclcyAlcycg
JSAoQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl9ldmVudF9wYXJhbWV0ZXIocGFyYW1ldGVyLnR5
cGUsIHBhcmFtZXRlci5pc19vcHRpb25hbCksIHBhcmFtZXRlcl9uYW1lKSkKKworICAgICAgICAg
ICAgaWYgaXNpbnN0YW5jZShwYXJhbWV0ZXIudHlwZSwgRW51bVR5cGUpIGFuZCBwYXJhbWV0ZXIu
dHlwZS5pc19hbm9ueW1vdXMgYW5kIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSBub3QgaW4gdXNl
ZF9lbnVtX25hbWVzOgogICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0
ZV9hbm9ueW1vdXNfZW51bV9mb3JfcGFyYW1ldGVyKHBhcmFtZXRlciwgZXZlbnQpKQogICAgICAg
ICAgICAgICAgIHVzZWRfZW51bV9uYW1lcy5hZGQocGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29k
ZWdlbi9nZW5lcmF0ZV9jcHBfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRl
X2NwcF9mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5CmluZGV4IDY2ZGM2ZTE4
NWNmZTJiNjFiMWVjYTc3NTczY2UxNjc0ZTZiMzVhNDkuLjc2M2UwMWRmYjc4Y2RlYzhkNjAzMGQy
ZWRjMzUwNTQ4OTE3Njk4MGMgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9mcm9udGVuZF9kaXNwYXRjaGVyX2lt
cGxlbWVudGF0aW9uLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0
aW9uLnB5CkBAIC0zMywxMiArMzMsMTIgQEAgdHJ5OgogICAgIGZyb20gLmNwcF9nZW5lcmF0b3Ig
aW1wb3J0IENwcEdlbmVyYXRvcgogICAgIGZyb20gLmNwcF9nZW5lcmF0b3JfdGVtcGxhdGVzIGlt
cG9ydCBDcHBHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgQ3BwVGVtcGxhdGVzCiAgICAgZnJvbSAuZ2Vu
ZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IsIHVjZmlyc3QKLSAgICBmcm9tIC5tb2RlbHMgaW1wb3J0
IE9iamVjdFR5cGUsIEFycmF5VHlwZQorICAgIGZyb20gLm1vZGVscyBpbXBvcnQgT2JqZWN0VHlw
ZSwgQXJyYXlUeXBlLCBBbGlhc2VkVHlwZSwgRW51bVR5cGUKIGV4Y2VwdDoKICAgICBmcm9tIGNw
cF9nZW5lcmF0b3IgaW1wb3J0IENwcEdlbmVyYXRvcgogICAgIGZyb20gY3BwX2dlbmVyYXRvcl90
ZW1wbGF0ZXMgaW1wb3J0IENwcEdlbmVyYXRvclRlbXBsYXRlcyBhcyBDcHBUZW1wbGF0ZXMKICAg
ICBmcm9tIGdlbmVyYXRvciBpbXBvcnQgR2VuZXJhdG9yLCB1Y2ZpcnN0Ci0gICAgZnJvbSBtb2Rl
bHMgaW1wb3J0IE9iamVjdFR5cGUsIEFycmF5VHlwZQorICAgIGZyb20gbW9kZWxzIGltcG9ydCBP
YmplY3RUeXBlLCBBcnJheVR5cGUsIEFsaWFzZWRUeXBlLCBFbnVtVHlwZQogCiBsb2cgPSBsb2dn
aW5nLmdldExvZ2dlcignZ2xvYmFsJykKIApAQCAtNzEsOSArNzEsNyBAQCBjbGFzcyBDcHBGcm9u
dGVuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAg
IGRlZiBfZ2VuZXJhdGVfc2Vjb25kYXJ5X2hlYWRlcl9pbmNsdWRlcyhzZWxmKToKICAgICAgICAg
aGVhZGVyX2luY2x1ZGVzID0gWwogICAgICAgICAgICAgKFsiSmF2YVNjcmlwdENvcmUiLCAiV2Vi
S2l0Il0sICgiSmF2YVNjcmlwdENvcmUiLCAiaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kUm91
dGVyLmgiKSksCi0gICAgICAgICAgICAoWyJKYXZhU2NyaXB0Q29yZSIsICJXZWJLaXQiXSwgKCJX
VEYiLCAid3RmL3RleHQvQ1N0cmluZy5oIikpCiAgICAgICAgIF0KLQogICAgICAgICByZXR1cm4g
J1xuJy5qb2luKHNlbGYuZ2VuZXJhdGVfaW5jbHVkZXNfZnJvbV9lbnRyaWVzKGhlYWRlcl9pbmNs
dWRlcykpCiAKICAgICBkZWYgX2dlbmVyYXRlX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb25zX2Zv
cl9kb21haW4oc2VsZiwgZG9tYWluKToKQEAgLTkwLDI3ICs4OCw0MyBAQCBjbGFzcyBDcHBGcm9u
dGVuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAg
ICAgICBmb3JtYWxfcGFyYW1ldGVycyA9IFtdCiAKICAgICAgICAgZm9yIHBhcmFtZXRlciBpbiBl
dmVudC5ldmVudF9wYXJhbWV0ZXJzOgorICAgICAgICAgICAgcGFyYW1ldGVyX25hbWUgPSBwYXJh
bWV0ZXIucGFyYW1ldGVyX25hbWUKKyAgICAgICAgICAgIGlmIHBhcmFtZXRlci5pc19vcHRpb25h
bDoKKyAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfbmFtZSA9ICdvcHRfJyArIHBhcmFtZXRlcl9u
YW1lCiAKLSAgICAgICAgICAgIHBhcmFtZXRlcl92YWx1ZSA9IHBhcmFtZXRlci5wYXJhbWV0ZXJf
bmFtZQotICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsIGFuZCBub3QgQ3BwR2Vu
ZXJhdG9yLnNob3VsZF9wYXNzX2J5X2NvcHlfZm9yX3JldHVybl90eXBlKHBhcmFtZXRlci50eXBl
KToKKyAgICAgICAgICAgIHBhcmFtZXRlcl92YWx1ZSA9IHBhcmFtZXRlcl9uYW1lCisKKyAgICAg
ICAgICAgIF90eXBlID0gcGFyYW1ldGVyLnR5cGUKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uo
X3R5cGUsIEFsaWFzZWRUeXBlKToKKyAgICAgICAgICAgICAgICBfdHlwZSA9IF90eXBlLmFsaWFz
ZWRfdHlwZQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgRW51bVR5cGUpIGFuZCBf
dHlwZS5pc19hbm9ueW1vdXM6CisgICAgICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5wcmltaXRp
dmVfdHlwZQorCisgICAgICAgICAgICBpZiBfdHlwZS5pc19lbnVtKCk6CisgICAgICAgICAgICAg
ICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAgICAgICBwYXJhbWV0
ZXJfdmFsdWUgPSAnKicgKyBwYXJhbWV0ZXJfdmFsdWUKKyAgICAgICAgICAgICAgICBwYXJhbWV0
ZXJfdmFsdWUgPSAnUHJvdG9jb2w6OiVzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZSglcyknICUgKHNl
bGYuaGVscGVyc19uYW1lc3BhY2UoKSwgcGFyYW1ldGVyX3ZhbHVlKQorICAgICAgICAgICAgZWxp
ZiBDcHBHZW5lcmF0b3Iuc2hvdWxkX3JlbGVhc2VfYXJndW1lbnQoX3R5cGUsIHBhcmFtZXRlci5p
c19vcHRpb25hbCk6CisgICAgICAgICAgICAgICAgcGFyYW1ldGVyX3ZhbHVlID0gcGFyYW1ldGVy
X3ZhbHVlICsgJy5yZWxlYXNlTm9uTnVsbCgpJworICAgICAgICAgICAgZWxpZiBDcHBHZW5lcmF0
b3Iuc2hvdWxkX2RlcmVmZXJlbmNlX2FyZ3VtZW50KF90eXBlLCBwYXJhbWV0ZXIuaXNfb3B0aW9u
YWwpOgogICAgICAgICAgICAgICAgIHBhcmFtZXRlcl92YWx1ZSA9ICcqJyArIHBhcmFtZXRlcl92
YWx1ZQotICAgICAgICAgICAgaWYgcGFyYW1ldGVyLnR5cGUuaXNfZW51bSgpOgotICAgICAgICAg
ICAgICAgIHBhcmFtZXRlcl92YWx1ZSA9ICdJbnNwZWN0b3I6OlByb3RvY29sOjolczo6Z2V0RW51
bUNvbnN0YW50VmFsdWUoJXMpJyAlIChzZWxmLmhlbHBlcnNfbmFtZXNwYWNlKCksIHBhcmFtZXRl
cl92YWx1ZSkKKyAgICAgICAgICAgIGVsaWYgQ3BwR2VuZXJhdG9yLnNob3VsZF9tb3ZlX2FyZ3Vt
ZW50KF90eXBlLCBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwpOgorICAgICAgICAgICAgICAgIHBhcmFt
ZXRlcl92YWx1ZSA9ICdXVEZNb3ZlKCVzKScgJSBwYXJhbWV0ZXJfdmFsdWUKIAogICAgICAgICAg
ICAgcGFyYW1ldGVyX2FyZ3MgPSB7Ci0gICAgICAgICAgICAgICAgJ3BhcmFtZXRlclR5cGUnOiBD
cHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX3N0YWNrX291dF9wYXJhbWV0ZXIocGFyYW1ldGVyKSwK
LSAgICAgICAgICAgICAgICAncGFyYW1ldGVyTmFtZSc6IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFt
ZSwKKyAgICAgICAgICAgICAgICAncGFyYW1ldGVyS2V5JzogcGFyYW1ldGVyLnBhcmFtZXRlcl9u
YW1lLAorICAgICAgICAgICAgICAgICdwYXJhbWV0ZXJOYW1lJzogcGFyYW1ldGVyX25hbWUsCiAg
ICAgICAgICAgICAgICAgJ3BhcmFtZXRlclZhbHVlJzogcGFyYW1ldGVyX3ZhbHVlLAotICAgICAg
ICAgICAgICAgICdrZXllZFNldE1ldGhvZCc6IENwcEdlbmVyYXRvci5jcHBfc2V0dGVyX21ldGhv
ZF9mb3JfdHlwZShwYXJhbWV0ZXIudHlwZSksCisgICAgICAgICAgICAgICAgJ2tleWVkU2V0TWV0
aG9kJzogQ3BwR2VuZXJhdG9yLmNwcF9zZXR0ZXJfbWV0aG9kX2Zvcl90eXBlKF90eXBlKSwKICAg
ICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgotICAg
ICAgICAgICAgICAgIHBhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICBpZiAoJShwYXJh
bWV0ZXJOYW1lKXMpJyAlIHBhcmFtZXRlcl9hcmdzKQotICAgICAgICAgICAgICAgIHBhcmFtZXRl
cl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICAgICAgcGFyYW1zT2JqZWN0LT4lKGtleWVkU2V0TWV0
aG9kKXMoIiUocGFyYW1ldGVyTmFtZSlzIl9zLCAlKHBhcmFtZXRlclZhbHVlKXMpOycgJSBwYXJh
bWV0ZXJfYXJncykKKyAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5k
KCcgICAgaWYgKCEhJShwYXJhbWV0ZXJOYW1lKXMpJyAlIHBhcmFtZXRlcl9hcmdzKQorICAgICAg
ICAgICAgICAgIHBhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICAgICAgcHJvdG9jb2xf
cGFyYW1zT2JqZWN0LT4lKGtleWVkU2V0TWV0aG9kKXMoIiUocGFyYW1ldGVyS2V5KXMiX3MsICUo
cGFyYW1ldGVyVmFsdWUpcyk7JyAlIHBhcmFtZXRlcl9hcmdzKQogICAgICAgICAgICAgZWxzZToK
LSAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAgcGFyYW1z
T2JqZWN0LT4lKGtleWVkU2V0TWV0aG9kKXMoIiUocGFyYW1ldGVyTmFtZSlzIl9zLCAlKHBhcmFt
ZXRlclZhbHVlKXMpOycgJSBwYXJhbWV0ZXJfYXJncykKKyAgICAgICAgICAgICAgICBwYXJhbWV0
ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT4lKGtleWVk
U2V0TWV0aG9kKXMoIiUocGFyYW1ldGVyS2V5KXMiX3MsICUocGFyYW1ldGVyVmFsdWUpcyk7JyAl
IHBhcmFtZXRlcl9hcmdzKQogCi0gICAgICAgICAgICBmb3JtYWxfcGFyYW1ldGVycy5hcHBlbmQo
JyVzICVzJyAlIChDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX2NoZWNrZWRfZm9ybWFsX2V2ZW50
X3BhcmFtZXRlcihwYXJhbWV0ZXIpLCBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpKQorICAgICAg
ICAgICAgZm9ybWFsX3BhcmFtZXRlcnMuYXBwZW5kKCclcyAlcycgJSAoQ3BwR2VuZXJhdG9yLmNw
cF90eXBlX2Zvcl9ldmVudF9wYXJhbWV0ZXIoX3R5cGUsIHBhcmFtZXRlci5pc19vcHRpb25hbCks
IHBhcmFtZXRlcl9uYW1lKSkKIAogICAgICAgICBldmVudF9hcmdzID0gewogICAgICAgICAgICAg
J2RvbWFpbk5hbWUnOiBkb21haW4uZG9tYWluX25hbWUsCkBAIC0xMjAsMTUgKzEzNCwxNSBAQCBj
bGFzcyBDcHBGcm9udGVuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihDcHBHZW5l
cmF0b3IpOgogCiAgICAgICAgIGxpbmVzLmFwcGVuZCgndm9pZCAlKGRvbWFpbk5hbWUpc0Zyb250
ZW5kRGlzcGF0Y2hlcjo6JShldmVudE5hbWUpcyglKGZvcm1hbFBhcmFtZXRlcnMpcyknICUgZXZl
bnRfYXJncykKICAgICAgICAgbGluZXMuYXBwZW5kKCd7JykKLSAgICAgICAgbGluZXMuYXBwZW5k
KCcgICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0
ZSgpOycpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmco
Im1ldGhvZCJfcywgIiUoZG9tYWluTmFtZSlzLiUoZXZlbnROYW1lKXMiX3MpOycgJSBldmVudF9h
cmdzKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdl
ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsnKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBw
cm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICIlKGRvbWFpbk5hbWUp
cy4lKGV2ZW50TmFtZSlzIl9zKTsnICUgZXZlbnRfYXJncykKIAogICAgICAgICBpZiBsZW4ocGFy
YW1ldGVyX2Fzc2lnbm1lbnRzKSA+IDA6Ci0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBS
ZWY8SlNPTjo6T2JqZWN0PiBwYXJhbXNPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOycp
CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBhdXRvIHByb3RvY29sX3BhcmFtc09iamVj
dCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7JykKICAgICAgICAgICAgIGxpbmVzLmV4dGVuZChw
YXJhbWV0ZXJfYXNzaWdubWVudHMpCi0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBqc29u
TWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiX3MsIFdURk1vdmUocGFyYW1zT2JqZWN0KSk7JykK
KyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRP
YmplY3QoInBhcmFtcyJfcywgV1RGTW92ZShwcm90b2NvbF9wYXJhbXNPYmplY3QpKTsnKQogCiAg
ICAgICAgIGxpbmVzLmFwcGVuZCgnJykKLSAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgbV9mcm9u
dGVuZFJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsnKQorICAg
ICAgICBsaW5lcy5hcHBlbmQoJyAgICBtX2Zyb250ZW5kUm91dGVyLnNlbmRFdmVudChwcm90b2Nv
bF9qc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOycpCiAgICAgICAgIGxpbmVzLmFwcGVuZCgn
fScpCiAgICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGV2
ZW50LmNvbmRpdGlvbiwgIlxuIi5qb2luKGxpbmVzKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9wcm90b2Nv
bF90eXBlc19oZWFkZXIucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfcHJvdG9jb2xfdHlwZXNfaGVhZGVyLnB5CmluZGV4IDAw
MTkyNGRlMGViMDgyN2Y3NDVkM2Q3MzZjMGFiOTIwMjEyNGRiMzYuLjc4MWQwNmQ5NDA1NjZiMTcy
ZWM1NWMyZWZiZDEwMWEwMDUwZDcxYTggMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9wcm90b2NvbF90eXBlc19o
ZWFkZXIucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2Nv
ZGVnZW4vZ2VuZXJhdGVfY3BwX3Byb3RvY29sX3R5cGVzX2hlYWRlci5weQpAQCAtODUsOSArODUs
MTAgQEAgY2xhc3MgQ3BwUHJvdG9jb2xUeXBlc0hlYWRlckdlbmVyYXRvcihDcHBHZW5lcmF0b3Ip
OgogICAgIGRlZiBfZ2VuZXJhdGVfc2Vjb25kYXJ5X2hlYWRlcl9pbmNsdWRlcyhzZWxmKToKICAg
ICAgICAgaGVhZGVyX2luY2x1ZGVzID0gWwogICAgICAgICAgICAgKFsiSmF2YVNjcmlwdENvcmUi
LCAiV2ViS2l0Il0sICgiSmF2YVNjcmlwdENvcmUiLCAiaW5zcGVjdG9yL0luc3BlY3RvclByb3Rv
Y29sVHlwZXMuaCIpKSwKLSAgICAgICAgICAgIChbIkphdmFTY3JpcHRDb3JlIiwgIldlYktpdCJd
LCAoIldURiIsICJ3dGYvQXNzZXJ0aW9ucy5oIikpCisgICAgICAgICAgICAoWyJKYXZhU2NyaXB0
Q29yZSIsICJXZWJLaXQiXSwgKCJXVEYiLCAid3RmL0pTT05WYWx1ZXMuaCIpKSwKKyAgICAgICAg
ICAgIChbIkphdmFTY3JpcHRDb3JlIiwgIldlYktpdCJdLCAoIldURiIsICJ3dGYvT3B0aW9uYWwu
aCIpKSwKKyAgICAgICAgICAgIChbIkphdmFTY3JpcHRDb3JlIiwgIldlYktpdCJdLCAoIldURiIs
ICJ3dGYvdGV4dC9XVEZTdHJpbmcuaCIpKSwKICAgICAgICAgXQotCiAgICAgICAgIHJldHVybiAn
XG4nLmpvaW4oc2VsZi5nZW5lcmF0ZV9pbmNsdWRlc19mcm9tX2VudHJpZXMoaGVhZGVyX2luY2x1
ZGVzKSkKIAogICAgIGRlZiBfZ2VuZXJhdGVfdmVyc2lvbnMoc2VsZiwgZG9tYWlucyk6CkBAIC0y
MzIsOSArMjMzLDYgQEAgY2xhc3MgQ3BwUHJvdG9jb2xUeXBlc0hlYWRlckdlbmVyYXRvcihDcHBH
ZW5lcmF0b3IpOgogICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRp
dGlvbihkb21haW4uY29uZGl0aW9uLCAnXG4nLmpvaW4obGluZXMpKQogCiAgICAgZGVmIF9nZW5l
cmF0ZV9jbGFzc19mb3Jfb2JqZWN0X2RlY2xhcmF0aW9uKHNlbGYsIHR5cGVfZGVjbGFyYXRpb24s
IGRvbWFpbik6Ci0gICAgICAgIGlmIGxlbih0eXBlX2RlY2xhcmF0aW9uLnR5cGVfbWVtYmVycykg
PT0gMDoKLSAgICAgICAgICAgIHJldHVybiAnJwotCiAgICAgICAgIGVudW1fbWVtYmVycyA9IFtt
ZW1iZXIgZm9yIG1lbWJlciBpbiB0eXBlX2RlY2xhcmF0aW9uLnR5cGVfbWVtYmVycyBpZiBpc2lu
c3RhbmNlKG1lbWJlci50eXBlLCBFbnVtVHlwZSkgYW5kIG1lbWJlci50eXBlLmlzX2Fub255bW91
c10KICAgICAgICAgcmVxdWlyZWRfbWVtYmVycyA9IFttZW1iZXIgZm9yIG1lbWJlciBpbiB0eXBl
X2RlY2xhcmF0aW9uLnR5cGVfbWVtYmVycyBpZiBub3QgbWVtYmVyLmlzX29wdGlvbmFsXQogICAg
ICAgICBvcHRpb25hbF9tZW1iZXJzID0gW21lbWJlciBmb3IgbWVtYmVyIGluIHR5cGVfZGVjbGFy
YXRpb24udHlwZV9tZW1iZXJzIGlmIG1lbWJlci5pc19vcHRpb25hbF0KQEAgLTI0NiwxMSArMjQ0
LDEyIEBAIGNsYXNzIENwcFByb3RvY29sVHlwZXNIZWFkZXJHZW5lcmF0b3IoQ3BwR2VuZXJhdG9y
KToKICAgICAgICAgYmFzZV9jbGFzcyA9ICdKU09OOjpPYmplY3QnCiAgICAgICAgIGlmIG5vdCBH
ZW5lcmF0b3IudHlwZV9oYXNfb3Blbl9maWVsZHModHlwZV9kZWNsYXJhdGlvbi50eXBlKToKICAg
ICAgICAgICAgIGJhc2VfY2xhc3MgPSBiYXNlX2NsYXNzICsgJ0Jhc2UnCi0gICAgICAgIGxpbmVz
LmFwcGVuZCgnY2xhc3MgJXMgOiBwdWJsaWMgJXMgeycgJSAob2JqZWN0X25hbWUsIGJhc2VfY2xh
c3MpKQorICAgICAgICBsaW5lcy5hcHBlbmQoJ2NsYXNzICVzIGZpbmFsIDogcHVibGljICVzIHsn
ICUgKG9iamVjdF9uYW1lLCBiYXNlX2NsYXNzKSkKICAgICAgICAgbGluZXMuYXBwZW5kKCdwdWJs
aWM6JykKICAgICAgICAgZm9yIGVudW1fbWVtYmVyIGluIGVudW1fbWVtYmVyczoKICAgICAgICAg
ICAgIGxpbmVzLmFwcGVuZCgnICAgIC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5IG5hbWUgXCclc1wn
IHdoaWxlIGdlbmVyYXRpbmcgJXMuJyAlIChlbnVtX21lbWJlci5tZW1iZXJfbmFtZSwgb2JqZWN0
X25hbWUpKQogICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX3N0cnVjdF9m
b3JfYW5vbnltb3VzX2VudW1fbWVtYmVyKGVudW1fbWVtYmVyKSkKKyAgICAgICAgICAgIGxpbmVz
LmFwcGVuZCgnJykKICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2J1aWxkZXJf
c3RhdGVfZW51bSh0eXBlX2RlY2xhcmF0aW9uKSkKIAogICAgICAgICBjb25zdHJ1Y3Rvcl9leGFt
cGxlID0gW10KQEAgLTI3Nyw3ICsyNzYsNyBAQCBjbGFzcyBDcHBQcm90b2NvbFR5cGVzSGVhZGVy
R2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAgICAgICBvcGVuX21lbWJlcnMgPSBHZW5l
cmF0b3Iub3Blbl9maWVsZHModHlwZV9kZWNsYXJhdGlvbikKICAgICAgICAgICAgIGZvciB0eXBl
X21lbWJlciBpbiBvcGVuX21lbWJlcnM6CiAgICAgICAgICAgICAgICAgZXhwb3J0X21hY3JvID0g
c2VsZi5tb2RlbCgpLmZyYW1ld29yay5zZXR0aW5nKCdleHBvcnRfbWFjcm8nLCBOb25lKQotICAg
ICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICVzIHN0YXRpYyBjb25zdCBjaGFyKiAlczsn
ICUgKGV4cG9ydF9tYWNybywgdWNmaXJzdCh0eXBlX21lbWJlci5tZW1iZXJfbmFtZSkpKQorICAg
ICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICVzIHN0YXRpYyBjb25zdCBjaGFyKiAlc0tl
eTsnICUgKGV4cG9ydF9tYWNybywgdHlwZV9tZW1iZXIubWVtYmVyX25hbWUpKQogCiAgICAgICAg
IGxpbmVzLmFwcGVuZCgnfTsnKQogICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRf
Zm9yX2NvbmRpdGlvbih0eXBlX2RlY2xhcmF0aW9uLmNvbmRpdGlvbiwgJ1xuJy5qb2luKGxpbmVz
KSkKQEAgLTMyOCw0NyArMzI3LDU2IEBAIGNsYXNzIENwcFByb3RvY29sVHlwZXNIZWFkZXJHZW5l
cmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKIAog
ICAgIGRlZiBfZ2VuZXJhdGVfYnVpbGRlcl9zZXR0ZXJfZm9yX21lbWJlcihzZWxmLCB0eXBlX21l
bWJlciwgZG9tYWluKToKKyAgICAgICAgbWVtYmVyX25hbWUgPSAnaW5fJyArIHR5cGVfbWVtYmVy
Lm1lbWJlcl9uYW1lCisKKyAgICAgICAgbWVtYmVyX3ZhbHVlID0gbWVtYmVyX25hbWUKKyAgICAg
ICAgaWYgdHlwZV9tZW1iZXIudHlwZS5pc19lbnVtKCk6CisgICAgICAgICAgICBtZW1iZXJfdmFs
dWUgPSAnUHJvdG9jb2w6OiVzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZSglcyknICUgKHNlbGYuaGVs
cGVyc19uYW1lc3BhY2UoKSwgbWVtYmVyX3ZhbHVlKQorICAgICAgICBlbGlmIENwcEdlbmVyYXRv
ci5zaG91bGRfbW92ZV9hcmd1bWVudCh0eXBlX21lbWJlci50eXBlLCBGYWxzZSk6CisgICAgICAg
ICAgICBtZW1iZXJfdmFsdWUgPSAnV1RGTW92ZSglcyknICUgbWVtYmVyX3ZhbHVlCisKICAgICAg
ICAgc2V0dGVyX2FyZ3MgPSB7CiAgICAgICAgICAgICAnY2FtZWxOYW1lJzogdWNmaXJzdCh0eXBl
X21lbWJlci5tZW1iZXJfbmFtZSksCi0gICAgICAgICAgICAna2V5ZWRTZXQnOiBDcHBHZW5lcmF0
b3IuY3BwX3NldHRlcl9tZXRob2RfZm9yX3R5cGUodHlwZV9tZW1iZXIudHlwZSksCi0gICAgICAg
ICAgICAnbmFtZSc6IHR5cGVfbWVtYmVyLm1lbWJlcl9uYW1lLAotICAgICAgICAgICAgJ3BhcmFt
ZXRlclR5cGUnOiBDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX3R5cGVfbWVtYmVyKHR5cGVfbWVt
YmVyKSwKLSAgICAgICAgICAgICdoZWxwZXJzTmFtZXNwYWNlJzogc2VsZi5oZWxwZXJzX25hbWVz
cGFjZSgpLAorICAgICAgICAgICAgJ3NldHRlcic6IENwcEdlbmVyYXRvci5jcHBfc2V0dGVyX21l
dGhvZF9mb3JfdHlwZSh0eXBlX21lbWJlci50eXBlKSwKKyAgICAgICAgICAgICdtZW1iZXJUeXBl
JzogQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl90eXBlX21lbWJlcl9hcmd1bWVudCh0eXBlX21l
bWJlci50eXBlLCB0eXBlX21lbWJlci5tZW1iZXJfbmFtZSksCisgICAgICAgICAgICAnbWVtYmVy
S2V5JzogdHlwZV9tZW1iZXIubWVtYmVyX25hbWUsCisgICAgICAgICAgICAnbWVtYmVyTmFtZSc6
IG1lbWJlcl9uYW1lLAorICAgICAgICAgICAgJ21lbWJlclZhbHVlJzogbWVtYmVyX3ZhbHVlLAog
ICAgICAgICB9CiAKICAgICAgICAgbGluZXMgPSBbXQogICAgICAgICBsaW5lcy5hcHBlbmQoJycp
Ci0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBCdWlsZGVyPFNUQVRFIHwgJShjYW1lbE5h
bWUpc1NldD4mIHNldCUoY2FtZWxOYW1lKXMoJShwYXJhbWV0ZXJUeXBlKXMgdmFsdWUpJyAlIHNl
dHRlcl9hcmdzKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgQnVpbGRlcjxTVEFURSB8
ICUoY2FtZWxOYW1lKXNTZXQ+JiBzZXQlKGNhbWVsTmFtZSlzKCUobWVtYmVyVHlwZSlzICUobWVt
YmVyTmFtZSlzKScgJSBzZXR0ZXJfYXJncykKICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAg
IHsnKQotICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEo
U1RBVEUgJiAlKGNhbWVsTmFtZSlzU2V0KSwgcHJvcGVydHlfJShuYW1lKXNfYWxyZWFkeV9zZXQp
OycgJSBzZXR0ZXJfYXJncykKLQotICAgICAgICBpZiBpc2luc3RhbmNlKHR5cGVfbWVtYmVyLnR5
cGUsIEVudW1UeXBlKToKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICAgICAgbV9y
ZXN1bHQtPiUoa2V5ZWRTZXQpcygiJShuYW1lKXMiX3MsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OiUo
aGVscGVyc05hbWVzcGFjZSlzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZSh2YWx1ZSkpOycgJSBzZXR0
ZXJfYXJncykKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAg
ICAgICAgbV9yZXN1bHQtPiUoa2V5ZWRTZXQpcygiJShuYW1lKXMiX3MsIHZhbHVlKTsnICUgc2V0
dGVyX2FyZ3MpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoIShTVEFURSAmICUoY2FtZWxOYW1lKXNTZXQpLCBwcm9wZXJ0eV8lKG1lbWJlcktleSlzX2Fs
cmVhZHlfc2V0KTsnICUgc2V0dGVyX2FyZ3MpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAg
ICAgICAgbV9yZXN1bHQtPiUoc2V0dGVyKXMoIiUobWVtYmVyS2V5KXMiX3MsICUobWVtYmVyVmFs
dWUpcyk7JyAlIHNldHRlcl9hcmdzKQogICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgICAg
IHJldHVybiBjYXN0U3RhdGU8JShjYW1lbE5hbWUpc1NldD4oKTsnICUgc2V0dGVyX2FyZ3MpCiAg
ICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICB9JykKICAgICAgICAgcmV0dXJuICdcbicuam9p
bihsaW5lcykKIAogICAgIGRlZiBfZ2VuZXJhdGVfdW5jaGVja2VkX3NldHRlcl9mb3JfbWVtYmVy
KHNlbGYsIHR5cGVfbWVtYmVyLCBkb21haW4pOgorICAgICAgICBtZW1iZXJfbmFtZSA9ICdpbl9v
cHRfJyArIHR5cGVfbWVtYmVyLm1lbWJlcl9uYW1lCisKKyAgICAgICAgbWVtYmVyX3ZhbHVlID0g
bWVtYmVyX25hbWUKKyAgICAgICAgaWYgdHlwZV9tZW1iZXIudHlwZS5pc19lbnVtKCk6CisgICAg
ICAgICAgICBtZW1iZXJfdmFsdWUgPSAnUHJvdG9jb2w6OiVzOjpnZXRFbnVtQ29uc3RhbnRWYWx1
ZSglcyknICUgKHNlbGYuaGVscGVyc19uYW1lc3BhY2UoKSwgbWVtYmVyX3ZhbHVlKQorICAgICAg
ICBlbGlmIENwcEdlbmVyYXRvci5zaG91bGRfbW92ZV9hcmd1bWVudCh0eXBlX21lbWJlci50eXBl
LCBGYWxzZSk6CisgICAgICAgICAgICBtZW1iZXJfdmFsdWUgPSAnV1RGTW92ZSglcyknICUgbWVt
YmVyX3ZhbHVlCisKICAgICAgICAgc2V0dGVyX2FyZ3MgPSB7CiAgICAgICAgICAgICAnY2FtZWxO
YW1lJzogdWNmaXJzdCh0eXBlX21lbWJlci5tZW1iZXJfbmFtZSksCi0gICAgICAgICAgICAna2V5
ZWRTZXQnOiBDcHBHZW5lcmF0b3IuY3BwX3NldHRlcl9tZXRob2RfZm9yX3R5cGUodHlwZV9tZW1i
ZXIudHlwZSksCi0gICAgICAgICAgICAnbmFtZSc6IHR5cGVfbWVtYmVyLm1lbWJlcl9uYW1lLAot
ICAgICAgICAgICAgJ3BhcmFtZXRlclR5cGUnOiBDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX3R5
cGVfbWVtYmVyKHR5cGVfbWVtYmVyKSwKLSAgICAgICAgICAgICdoZWxwZXJzTmFtZXNwYWNlJzog
c2VsZi5oZWxwZXJzX25hbWVzcGFjZSgpLAorICAgICAgICAgICAgJ3NldHRlcic6IENwcEdlbmVy
YXRvci5jcHBfc2V0dGVyX21ldGhvZF9mb3JfdHlwZSh0eXBlX21lbWJlci50eXBlKSwKKyAgICAg
ICAgICAgICdtZW1iZXJLZXknOiB0eXBlX21lbWJlci5tZW1iZXJfbmFtZSwKKyAgICAgICAgICAg
ICdtZW1iZXJOYW1lJzogbWVtYmVyX25hbWUsCisgICAgICAgICAgICAnbWVtYmVyVmFsdWUnOiBt
ZW1iZXJfdmFsdWUsCisgICAgICAgICAgICAnbWVtYmVyVHlwZSc6IENwcEdlbmVyYXRvci5jcHBf
dHlwZV9mb3JfdHlwZV9tZW1iZXJfYXJndW1lbnQodHlwZV9tZW1iZXIudHlwZSwgdHlwZV9tZW1i
ZXIubWVtYmVyX25hbWUpLAogICAgICAgICB9CiAKICAgICAgICAgbGluZXMgPSBbXQogICAgICAg
ICBsaW5lcy5hcHBlbmQoJycpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIHZvaWQgc2V0JShj
YW1lbE5hbWUpcyglKHBhcmFtZXRlclR5cGUpcyB2YWx1ZSknICUgc2V0dGVyX2FyZ3MpCisgICAg
ICAgIGxpbmVzLmFwcGVuZCgnICAgIHZvaWQgc2V0JShjYW1lbE5hbWUpcyglKG1lbWJlclR5cGUp
cyAlKG1lbWJlck5hbWUpcyknICUgc2V0dGVyX2FyZ3MpCiAgICAgICAgIGxpbmVzLmFwcGVuZCgn
ICAgIHsnKQotICAgICAgICBpZiBpc2luc3RhbmNlKHR5cGVfbWVtYmVyLnR5cGUsIEVudW1UeXBl
KToKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBKU09OOjpPYmplY3RCYXNlOjol
KGtleWVkU2V0KXMoIiUobmFtZSlzIl9zLCBJbnNwZWN0b3I6OlByb3RvY29sOjolKGhlbHBlcnNO
YW1lc3BhY2Upczo6Z2V0RW51bUNvbnN0YW50VmFsdWUodmFsdWUpKTsnICUgc2V0dGVyX2FyZ3Mp
Ci0gICAgICAgIGVsaWYgQ3BwR2VuZXJhdG9yLnNob3VsZF91c2VfcmVmZXJlbmNlc19mb3JfdHlw
ZSh0eXBlX21lbWJlci50eXBlKToKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBK
U09OOjpPYmplY3RCYXNlOjolKGtleWVkU2V0KXMoIiUobmFtZSlzIl9zLCBXVEZNb3ZlKHZhbHVl
KSk7JyAlIHNldHRlcl9hcmdzKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgbGluZXMuYXBw
ZW5kKCcgICAgICAgIEpTT046Ok9iamVjdEJhc2U6OiUoa2V5ZWRTZXQpcygiJShuYW1lKXMiX3Ms
IHZhbHVlKTsnICUgc2V0dGVyX2FyZ3MpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBK
U09OOjpPYmplY3RCYXNlOjolKHNldHRlcilzKCIlKG1lbWJlcktleSlzIl9zLCAlKG1lbWJlclZh
bHVlKXMpOycgJSBzZXR0ZXJfYXJncykKICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgfScpCiAg
ICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCiAKQEAgLTM4MSwxMyArMzg5LDEzIEBAIGNs
YXNzIENwcFByb3RvY29sVHlwZXNIZWFkZXJHZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAg
ICAgICAgIGRlY2xhcmF0aW9uc190b19nZW5lcmF0ZSA9IFtkZWNsIGZvciBkZWNsIGluIHR5cGVf
ZGVjbGFyYXRpb25zIGlmIHNlbGYudHlwZV9uZWVkc19zaGFwZV9hc3NlcnRpb25zKGRlY2wudHlw
ZSldCiAKICAgICAgICAgICAgIGZvciB0eXBlX2RlY2xhcmF0aW9uIGluIGRlY2xhcmF0aW9uc190
b19nZW5lcmF0ZToKLSAgICAgICAgICAgICAgICBmb3IgdHlwZV9tZW1iZXIgaW4gdHlwZV9kZWNs
YXJhdGlvbi50eXBlX21lbWJlcnM6Ci0gICAgICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uo
dHlwZV9tZW1iZXIudHlwZSwgRW51bVR5cGUpOgotICAgICAgICAgICAgICAgICAgICAgICAgdHlw
ZV9hcmd1bWVudHMuYXBwZW5kKChzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKHR5
cGVfZGVjbGFyYXRpb24uY29uZGl0aW9uLCBDcHBHZW5lcmF0b3IuY3BwX3Byb3RvY29sX3R5cGVf
Zm9yX3R5cGVfbWVtYmVyKHR5cGVfbWVtYmVyLCB0eXBlX2RlY2xhcmF0aW9uKSksIEZhbHNlKSkK
LQogICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodHlwZV9kZWNsYXJhdGlvbi50eXBlLCBP
YmplY3RUeXBlKToKICAgICAgICAgICAgICAgICAgICAgdHlwZV9hcmd1bWVudHMuYXBwZW5kKChz
ZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKHR5cGVfZGVjbGFyYXRpb24uY29uZGl0
aW9uLCBDcHBHZW5lcmF0b3IuY3BwX3Byb3RvY29sX3R5cGVfZm9yX3R5cGUodHlwZV9kZWNsYXJh
dGlvbi50eXBlKSksIEdlbmVyYXRvci50eXBlX25lZWRzX3J1bnRpbWVfY2FzdHModHlwZV9kZWNs
YXJhdGlvbi50eXBlKSkpCiAKKyAgICAgICAgICAgICAgICBmb3IgdHlwZV9tZW1iZXIgaW4gdHlw
ZV9kZWNsYXJhdGlvbi50eXBlX21lbWJlcnM6CisgICAgICAgICAgICAgICAgICAgIGlmIGlzaW5z
dGFuY2UodHlwZV9tZW1iZXIudHlwZSwgRW51bVR5cGUpOgorICAgICAgICAgICAgICAgICAgICAg
ICAgdHlwZV9hcmd1bWVudHMuYXBwZW5kKChzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0
aW9uKHR5cGVfZGVjbGFyYXRpb24uY29uZGl0aW9uLCBDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9y
X2VudW0odHlwZV9tZW1iZXIudHlwZSwgJyVzOjolcycgJSAodHlwZV9kZWNsYXJhdGlvbi50eXBl
X25hbWUsIHVjZmlyc3QodHlwZV9tZW1iZXIubWVtYmVyX25hbWUpKSkpLCBGYWxzZSkpCisKICAg
ICAgICAgc3RydWN0X2tleXdvcmRzID0gWydzdHJ1Y3QnXQogICAgICAgICBmdW5jdGlvbl9rZXl3
b3JkcyA9IFsnc3RhdGljIHZvaWQnXQogICAgICAgICBleHBvcnRfbWFjcm8gPSBzZWxmLm1vZGVs
KCkuZnJhbWV3b3JrLnNldHRpbmcoJ2V4cG9ydF9tYWNybycsIE5vbmUpCkBAIC0zOTksNyArNDA3
LDcgQEAgY2xhc3MgQ3BwUHJvdG9jb2xUeXBlc0hlYWRlckdlbmVyYXRvcihDcHBHZW5lcmF0b3Ip
OgogICAgICAgICBmb3IgYXJndW1lbnQgaW4gdHlwZV9hcmd1bWVudHM6CiAgICAgICAgICAgICBs
aW5lcy5hcHBlbmQoJ3RlbXBsYXRlPD4gJXMgQmluZGluZ1RyYWl0czwlcz4geycgJSAoJyAnLmpv
aW4oc3RydWN0X2tleXdvcmRzKSwgYXJndW1lbnRbMF0pKQogICAgICAgICAgICAgaWYgYXJndW1l
bnRbMV06Ci0gICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCdzdGF0aWMgUmVmUHRyPCVzPiBy
dW50aW1lQ2FzdChSZWZQdHI8SlNPTjo6VmFsdWU+JiYgdmFsdWUpOycgJSBhcmd1bWVudFswXSkK
KyAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ3N0YXRpYyBSZWY8JXM+IHJ1bnRpbWVDYXN0
KFJlZjxKU09OOjpWYWx1ZT4mJiB2YWx1ZSk7JyAlIGFyZ3VtZW50WzBdKQogICAgICAgICAgICAg
bGluZXMuYXBwZW5kKCclcyBhc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShKU09OOjpWYWx1ZSop
OycgJSAnICcuam9pbihmdW5jdGlvbl9rZXl3b3JkcykpCiAgICAgICAgICAgICBsaW5lcy5hcHBl
bmQoJ307JykKICAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKQEAgLTQzOCwxMyArNDQ2
LDEzIEBAIGNsYXNzIENwcFByb3RvY29sVHlwZXNIZWFkZXJHZW5lcmF0b3IoQ3BwR2VuZXJhdG9y
KToKICAgICAgICAgICAgIGRvbWFpbl9saW5lcyA9IFtdCiAgICAgICAgICAgICBkb21haW5fbGlu
ZXMuYXBwZW5kKCIvLyBFbnVtcyBpbiB0aGUgJyVzJyBEb21haW4iICUgZG9tYWluLmRvbWFpbl9u
YW1lKQogICAgICAgICAgICAgZm9yIGVudW1fdHlwZSBpbiBlbnVtX3R5cGVzOgotICAgICAgICAg
ICAgICAgIGNwcF9wcm90b2NvbF90eXBlID0gQ3BwR2VuZXJhdG9yLmNwcF9wcm90b2NvbF90eXBl
X2Zvcl90eXBlKGVudW1fdHlwZSkKKyAgICAgICAgICAgICAgICBjcHBfcHJvdG9jb2xfdHlwZSA9
IENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3JfZW51bShlbnVtX3R5cGUsIGVudW1fdHlwZS5yYXdf
bmFtZSgpKQogICAgICAgICAgICAgICAgIGRvbWFpbl9saW5lcy5hcHBlbmQoc2VsZi53cmFwX3dp
dGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihlbnVtX3R5cGUuZGVjbGFyYXRpb24oKS5jb25kaXRpb24s
ICd0ZW1wbGF0ZTw+XG4lcyBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8JXM+KGNvbnN0IFN0cmlu
ZyYpOycgJSAocmV0dXJuX3R5cGVfd2l0aF9leHBvcnRfbWFjcm8oY3BwX3Byb3RvY29sX3R5cGUp
LCBjcHBfcHJvdG9jb2xfdHlwZSkpKQogCiAgICAgICAgICAgICBmb3Igb2JqZWN0X3R5cGUgaW4g
b2JqZWN0X3R5cGVzOgogICAgICAgICAgICAgICAgIG9iamVjdF9saW5lcyA9IFtdCiAgICAgICAg
ICAgICAgICAgZm9yIGVudW1fbWVtYmVyIGluIGZpbHRlcih0eXBlX21lbWJlcl9pc19hbm9ueW1v
dXNfZW51bV90eXBlLCBvYmplY3RfdHlwZS5tZW1iZXJzKToKLSAgICAgICAgICAgICAgICAgICAg
Y3BwX3Byb3RvY29sX3R5cGUgPSBDcHBHZW5lcmF0b3IuY3BwX3Byb3RvY29sX3R5cGVfZm9yX3R5
cGVfbWVtYmVyKGVudW1fbWVtYmVyLCBvYmplY3RfdHlwZS5kZWNsYXJhdGlvbigpKQorICAgICAg
ICAgICAgICAgICAgICBjcHBfcHJvdG9jb2xfdHlwZSA9IENwcEdlbmVyYXRvci5jcHBfdHlwZV9m
b3JfZW51bShlbnVtX21lbWJlci50eXBlLCAnJXM6OiVzJyAlIChvYmplY3RfdHlwZS5yYXdfbmFt
ZSgpLCB1Y2ZpcnN0KGVudW1fbWVtYmVyLm1lbWJlcl9uYW1lKSkpCiAgICAgICAgICAgICAgICAg
ICAgIG9iamVjdF9saW5lcy5hcHBlbmQoJ3RlbXBsYXRlPD5cbiVzIHBhcnNlRW51bVZhbHVlRnJv
bVN0cmluZzwlcz4oY29uc3QgU3RyaW5nJik7JyAlIChyZXR1cm5fdHlwZV93aXRoX2V4cG9ydF9t
YWNybyhjcHBfcHJvdG9jb2xfdHlwZSksIGNwcF9wcm90b2NvbF90eXBlKSkKICAgICAgICAgICAg
ICAgICBpZiBsZW4ob2JqZWN0X2xpbmVzKToKICAgICAgICAgICAgICAgICAgICAgZG9tYWluX2xp
bmVzLmFwcGVuZChzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKG9iamVjdF90eXBl
LmRlY2xhcmF0aW9uKCkuY29uZGl0aW9uLCAnXG4nLmpvaW4ob2JqZWN0X2xpbmVzKSkpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9n
ZW5lcmF0ZV9jcHBfcHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50YXRpb24ucHkgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfcHJvdG9j
b2xfdHlwZXNfaW1wbGVtZW50YXRpb24ucHkKaW5kZXggNWRkNTM0Njk0NDg1NTE1NDhkNjdhYTBi
NDU2YzZhMWE2NjU4ZDU5My4uMTNlNTg5NzI2ZDRjZGI3YTQ1MmM2NzBjODMyNWViMWEzOWVlNjIy
MiAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2Nv
ZGVnZW4vZ2VuZXJhdGVfY3BwX3Byb3RvY29sX3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5CisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRl
X2NwcF9wcm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbi5weQpAQCAtODIsMTAgKzgyLDggQEAg
Y2xhc3MgQ3BwUHJvdG9jb2xUeXBlc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yKENwcEdlbmVyYXRv
cik6CiAKICAgICBkZWYgX2dlbmVyYXRlX3NlY29uZGFyeV9oZWFkZXJfaW5jbHVkZXMoc2VsZik6
CiAgICAgICAgIGhlYWRlcl9pbmNsdWRlcyA9IFsKLSAgICAgICAgICAgIChbIkphdmFTY3JpcHRD
b3JlIiwgIldlYktpdCJdLCAoIldURiIsICJ3dGYvT3B0aW9uYWwuaCIpKSwKLSAgICAgICAgICAg
IChbIkphdmFTY3JpcHRDb3JlIiwgIldlYktpdCJdLCAoIldURiIsICJ3dGYvdGV4dC9DU3RyaW5n
LmgiKSksCisgICAgICAgICAgICAoWyJKYXZhU2NyaXB0Q29yZSIsICJXZWJLaXQiXSwgKCJXVEYi
LCAid3RmL0Fzc2VydGlvbnMuaCIpKSwKICAgICAgICAgXQotCiAgICAgICAgIHJldHVybiAnXG4n
LmpvaW4oc2VsZi5nZW5lcmF0ZV9pbmNsdWRlc19mcm9tX2VudHJpZXMoaGVhZGVyX2luY2x1ZGVz
KSkKIAogICAgIGRlZiBfZ2VuZXJhdGVfZW51bV9tYXBwaW5nKHNlbGYpOgpAQCAtMTQ0LDE0ICsx
NDIsMTQgQEAgY2xhc3MgQ3BwUHJvdG9jb2xUeXBlc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yKENw
cEdlbmVyYXRvcik6CiAgICAgICAgIGxpbmVzID0gW10KICAgICAgICAgbGluZXMuYXBwZW5kKCIv
LyBFbnVtcyBpbiB0aGUgJyVzJyBEb21haW4iICUgZG9tYWluLmRvbWFpbl9uYW1lKQogICAgICAg
ICBmb3IgZW51bV90eXBlIGluIGVudW1fdHlwZXM6Ci0gICAgICAgICAgICBjcHBfcHJvdG9jb2xf
dHlwZSA9IENwcEdlbmVyYXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZShlbnVtX3R5cGUp
CisgICAgICAgICAgICBjcHBfcHJvdG9jb2xfdHlwZSA9IENwcEdlbmVyYXRvci5jcHBfdHlwZV9m
b3JfZW51bShlbnVtX3R5cGUsIGVudW1fdHlwZS5yYXdfbmFtZSgpKQogICAgICAgICAgICAgbGlu
ZXMuYXBwZW5kKCcnKQogICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYud3JhcF93aXRoX2d1
YXJkX2Zvcl9jb25kaXRpb24oZW51bV90eXBlLmRlY2xhcmF0aW9uKCkuY29uZGl0aW9uLCBnZW5l
cmF0ZV9jb252ZXJzaW9uX21ldGhvZF9ib2R5KGVudW1fdHlwZSwgY3BwX3Byb3RvY29sX3R5cGUp
KSkKIAogICAgICAgICBmb3Igb2JqZWN0X3R5cGUgaW4gb2JqZWN0X3R5cGVzOgogICAgICAgICAg
ICAgb2JqZWN0X2xpbmVzID0gW10KICAgICAgICAgICAgIGZvciBlbnVtX21lbWJlciBpbiBmaWx0
ZXIodHlwZV9tZW1iZXJfaXNfYW5vbnltb3VzX2VudW1fdHlwZSwgb2JqZWN0X3R5cGUubWVtYmVy
cyk6Ci0gICAgICAgICAgICAgICAgY3BwX3Byb3RvY29sX3R5cGUgPSBDcHBHZW5lcmF0b3IuY3Bw
X3Byb3RvY29sX3R5cGVfZm9yX3R5cGVfbWVtYmVyKGVudW1fbWVtYmVyLCBvYmplY3RfdHlwZS5k
ZWNsYXJhdGlvbigpKQorICAgICAgICAgICAgICAgIGNwcF9wcm90b2NvbF90eXBlID0gQ3BwR2Vu
ZXJhdG9yLmNwcF90eXBlX2Zvcl9lbnVtKGVudW1fbWVtYmVyLnR5cGUsICclczo6JXMnICUgKG9i
amVjdF90eXBlLnJhd19uYW1lKCksIHVjZmlyc3QoZW51bV9tZW1iZXIubWVtYmVyX25hbWUpKSkK
ICAgICAgICAgICAgICAgICBvYmplY3RfbGluZXMuYXBwZW5kKGdlbmVyYXRlX2NvbnZlcnNpb25f
bWV0aG9kX2JvZHkoZW51bV9tZW1iZXIudHlwZSwgY3BwX3Byb3RvY29sX3R5cGUpKQogICAgICAg
ICAgICAgaWYgbGVuKG9iamVjdF9saW5lcyk6CiAgICAgICAgICAgICAgICAgaWYgbGVuKGxpbmVz
KToKQEAgLTE4Myw4ICsxODEsNyBAQCBjbGFzcyBDcHBQcm90b2NvbFR5cGVzSW1wbGVtZW50YXRp
b25HZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAgICAgICAgIGZvciB0eXBlX2RlY2xhcmF0
aW9uIGluIFtkZWNsIGZvciBkZWNsIGluIHR5cGVfZGVjbGFyYXRpb25zIGlmIEdlbmVyYXRvci50
eXBlX2hhc19vcGVuX2ZpZWxkcyhkZWNsLnR5cGUpXToKICAgICAgICAgICAgICAgICBvcGVuX21l
bWJlcnMgPSBHZW5lcmF0b3Iub3Blbl9maWVsZHModHlwZV9kZWNsYXJhdGlvbikKICAgICAgICAg
ICAgICAgICBmb3IgdHlwZV9tZW1iZXIgaW4gc29ydGVkKG9wZW5fbWVtYmVycywga2V5PWxhbWJk
YSBtZW1iZXI6IG1lbWJlci5tZW1iZXJfbmFtZSk6Ci0gICAgICAgICAgICAgICAgICAgIGZpZWxk
X25hbWUgPSAnOjonLmpvaW4oWydJbnNwZWN0b3InLCAnUHJvdG9jb2wnLCBkb21haW4uZG9tYWlu
X25hbWUsIHVjZmlyc3QodHlwZV9kZWNsYXJhdGlvbi50eXBlX25hbWUpLCB1Y2ZpcnN0KHR5cGVf
bWVtYmVyLm1lbWJlcl9uYW1lKV0pCi0gICAgICAgICAgICAgICAgICAgIGRvbWFpbl9saW5lcy5h
cHBlbmQoJ2NvbnN0IGNoYXIqICVzID0gIiVzIjsnICUgKGZpZWxkX25hbWUsIHR5cGVfbWVtYmVy
Lm1lbWJlcl9uYW1lKSkKKyAgICAgICAgICAgICAgICAgICAgZG9tYWluX2xpbmVzLmFwcGVuZCgn
Y29uc3QgY2hhciogUHJvdG9jb2w6OiVzOjolczo6JXNLZXkgPSAiJXMiOycgJSAoZG9tYWluLmRv
bWFpbl9uYW1lLCB1Y2ZpcnN0KHR5cGVfZGVjbGFyYXRpb24udHlwZV9uYW1lKSwgdHlwZV9tZW1i
ZXIubWVtYmVyX25hbWUsIHR5cGVfbWVtYmVyLm1lbWJlcl9uYW1lKSkKICAgICAgICAgICAgIGlm
IGxlbihkb21haW5fbGluZXMpOgogICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLndy
YXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGRvbWFpbi5jb25kaXRpb24sICdcbicuam9pbihk
b21haW5fbGluZXMpKSkKIApAQCAtMjI3LDM3ICsyMjQsNTQgQEAgY2xhc3MgQ3BwUHJvdG9jb2xU
eXBlc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAKICAgICAgICAgbGlu
ZXMuYXBwZW5kKCd2b2lkIEJpbmRpbmdUcmFpdHM8JXM+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVk
VHlwZShKU09OOjpWYWx1ZSogdmFsdWUpJyAlIChDcHBHZW5lcmF0b3IuY3BwX3Byb3RvY29sX3R5
cGVfZm9yX3R5cGUob2JqZWN0X2RlY2xhcmF0aW9uLnR5cGUpKSkKICAgICAgICAgbGluZXMuYXBw
ZW5kKCIiInsKKyAgICBBU1NFUlRfVU5VU0VEKHZhbHVlLCB2YWx1ZSk7CiAjaWYgQVNTRVJUX0VO
QUJMRUQKLSAgICBBU1NFUlRfQVJHKHZhbHVlLCB2YWx1ZSk7Ci0gICAgUmVmUHRyPEpTT046Ok9i
amVjdD4gb2JqZWN0OwotICAgIGJvb2wgY2FzdFN1Y2NlZWRlZCA9IHZhbHVlLT5hc09iamVjdChv
YmplY3QpOwotICAgIEFTU0VSVF9VTlVTRUQoY2FzdFN1Y2NlZWRlZCwgY2FzdFN1Y2NlZWRlZCk7
IiIiKQorICAgIGF1dG8gb2JqZWN0ID0gdmFsdWUtPmFzT2JqZWN0KCk7CisgICAgQVNTRVJUKG9i
amVjdCk7IiIiKQogICAgICAgICBmb3IgdHlwZV9tZW1iZXIgaW4gcmVxdWlyZWRfbWVtYmVyczoK
KyAgICAgICAgICAgIG1lbWJlcl90eXBlID0gdHlwZV9tZW1iZXIudHlwZQorICAgICAgICAgICAg
aWYgaXNpbnN0YW5jZShtZW1iZXJfdHlwZSwgQWxpYXNlZFR5cGUpOgorICAgICAgICAgICAgICAg
IG1lbWJlcl90eXBlID0gbWVtYmVyX3R5cGUuYWxpYXNlZF90eXBlCisKKyAgICAgICAgICAgIGlm
IGlzaW5zdGFuY2UobWVtYmVyX3R5cGUsIEVudW1UeXBlKToKKyAgICAgICAgICAgICAgICBtZW1i
ZXJfdHlwZSA9IENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3JfZW51bShtZW1iZXJfdHlwZSwgJyVz
OjolcycgJSAob2JqZWN0X2RlY2xhcmF0aW9uLnR5cGVfbmFtZSwgdWNmaXJzdCh0eXBlX21lbWJl
ci5tZW1iZXJfbmFtZSkpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBtZW1i
ZXJfdHlwZSA9IENwcEdlbmVyYXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZShtZW1iZXJf
dHlwZSkKKwogICAgICAgICAgICAgYXJncyA9IHsKICAgICAgICAgICAgICAgICAnbWVtYmVyTmFt
ZSc6IHR5cGVfbWVtYmVyLm1lbWJlcl9uYW1lLAotICAgICAgICAgICAgICAgICdhc3NlcnRNZXRo
b2QnOiBDcHBHZW5lcmF0b3IuY3BwX2Fzc2VydGlvbl9tZXRob2RfZm9yX3R5cGVfbWVtYmVyKHR5
cGVfbWVtYmVyLCBvYmplY3RfZGVjbGFyYXRpb24pCisgICAgICAgICAgICAgICAgJ21lbWJlclR5
cGUnOiBtZW1iZXJfdHlwZQogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBsaW5lcy5hcHBl
bmQoIiIiICAgIHsKICAgICAgICAgYXV0byAlKG1lbWJlck5hbWUpc1BvcyA9IG9iamVjdC0+Zmlu
ZCgiJShtZW1iZXJOYW1lKXMiX3MpOwogICAgICAgICBBU1NFUlQoJShtZW1iZXJOYW1lKXNQb3Mg
IT0gb2JqZWN0LT5lbmQoKSk7Ci0gICAgICAgICUoYXNzZXJ0TWV0aG9kKXMoJShtZW1iZXJOYW1l
KXNQb3MtPnZhbHVlLmdldCgpKTsKKyAgICAgICAgQmluZGluZ1RyYWl0czwlKG1lbWJlclR5cGUp
cz46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKCUobWVtYmVyTmFtZSlzUG9zLT52YWx1ZS5w
dHIoKSk7CiAgICAgfSIiIiAlIGFyZ3MpCiAKICAgICAgICAgaWYgc2hvdWxkX2NvdW50X3Byb3Bl
cnRpZXM6CiAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJycpCi0gICAgICAgICAgICBsaW5lcy5h
cHBlbmQoJyAgICBpbnQgZm91bmRQcm9wZXJ0aWVzQ291bnQgPSAlczsnICUgbGVuKHJlcXVpcmVk
X21lbWJlcnMpKQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgc2l6ZV90IGZvdW5kUHJv
cGVydGllc0NvdW50ID0gJXM7JyAlIGxlbihyZXF1aXJlZF9tZW1iZXJzKSkKIAogICAgICAgICBm
b3IgdHlwZV9tZW1iZXIgaW4gb3B0aW9uYWxfbWVtYmVyczoKKyAgICAgICAgICAgIG1lbWJlcl90
eXBlID0gdHlwZV9tZW1iZXIudHlwZQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShtZW1iZXJf
dHlwZSwgQWxpYXNlZFR5cGUpOgorICAgICAgICAgICAgICAgIG1lbWJlcl90eXBlID0gbWVtYmVy
X3R5cGUuYWxpYXNlZF90eXBlCisKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UobWVtYmVyX3R5
cGUsIEVudW1UeXBlKToKKyAgICAgICAgICAgICAgICBtZW1iZXJfdHlwZSA9IENwcEdlbmVyYXRv
ci5jcHBfdHlwZV9mb3JfZW51bShtZW1iZXJfdHlwZSwgJyVzOjolcycgJSAob2JqZWN0X2RlY2xh
cmF0aW9uLnR5cGVfbmFtZSwgdWNmaXJzdCh0eXBlX21lbWJlci5tZW1iZXJfbmFtZSkpKQorICAg
ICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBtZW1iZXJfdHlwZSA9IENwcEdlbmVyYXRv
ci5jcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZShtZW1iZXJfdHlwZSkKKwogICAgICAgICAgICAg
YXJncyA9IHsKICAgICAgICAgICAgICAgICAnbWVtYmVyTmFtZSc6IHR5cGVfbWVtYmVyLm1lbWJl
cl9uYW1lLAotICAgICAgICAgICAgICAgICdhc3NlcnRNZXRob2QnOiBDcHBHZW5lcmF0b3IuY3Bw
X2Fzc2VydGlvbl9tZXRob2RfZm9yX3R5cGVfbWVtYmVyKHR5cGVfbWVtYmVyLCBvYmplY3RfZGVj
bGFyYXRpb24pCisgICAgICAgICAgICAgICAgJ21lbWJlclR5cGUnOiBtZW1iZXJfdHlwZQogICAg
ICAgICAgICAgfQogCiAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoIiIiICAgIHsKICAgICAgICAg
YXV0byAlKG1lbWJlck5hbWUpc1BvcyA9IG9iamVjdC0+ZmluZCgiJShtZW1iZXJOYW1lKXMiX3Mp
OwogICAgICAgICBpZiAoJShtZW1iZXJOYW1lKXNQb3MgIT0gb2JqZWN0LT5lbmQoKSkgewotICAg
ICAgICAgICAgJShhc3NlcnRNZXRob2QpcyglKG1lbWJlck5hbWUpc1Bvcy0+dmFsdWUuZ2V0KCkp
OyIiIiAlIGFyZ3MpCisgICAgICAgICAgICBCaW5kaW5nVHJhaXRzPCUobWVtYmVyVHlwZSlzPjo6
YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoJShtZW1iZXJOYW1lKXNQb3MtPnZhbHVlLnB0cigp
KTsiIiIgJSBhcmdzKQogCiAgICAgICAgICAgICBpZiBzaG91bGRfY291bnRfcHJvcGVydGllczoK
ICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgICAgICsrZm91bmRQcm9wZXJ0
aWVzQ291bnQ7JykKQEAgLTI2NywyNyArMjgxLDIyIEBAIGNsYXNzIENwcFByb3RvY29sVHlwZXNJ
bXBsZW1lbnRhdGlvbkdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAgICBpZiBzaG91bGRf
Y291bnRfcHJvcGVydGllczoKICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGlmIChmb3Vu
ZFByb3BlcnRpZXNDb3VudCAhPSBvYmplY3QtPnNpemUoKSknKQogICAgICAgICAgICAgbGluZXMu
YXBwZW5kKCcgICAgICAgIEZBVEFMKCJVbmV4cGVjdGVkIHByb3BlcnRpZXMgaW4gb2JqZWN0OiAl
c1xcbiIsIG9iamVjdC0+dG9KU09OU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOycpCi0gICAgICAg
IGxpbmVzLmFwcGVuZCgnI2Vsc2UgLy8gQVNTRVJUX0VOQUJMRUQnKQotICAgICAgICBsaW5lcy5h
cHBlbmQoJyAgICBVTlVTRURfUEFSQU0odmFsdWUpOycpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgn
I2VuZGlmIC8vIEFTU0VSVF9FTkFCTEVEJykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcjZW5kaWYn
KQogICAgICAgICBsaW5lcy5hcHBlbmQoJ30nKQogICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxp
bmVzKQogCiAgICAgZGVmIF9nZW5lcmF0ZV9hc3NlcnRpb25fZm9yX2VudW0oc2VsZiwgZW51bV9t
ZW1iZXIsIG9iamVjdF9kZWNsYXJhdGlvbik6CiAgICAgICAgIGxpbmVzID0gW10KLSAgICAgICAg
bGluZXMuYXBwZW5kKCd2b2lkICVzKEpTT046OlZhbHVlKiB2YWx1ZSknICUgQ3BwR2VuZXJhdG9y
LmNwcF9hc3NlcnRpb25fbWV0aG9kX2Zvcl90eXBlX21lbWJlcihlbnVtX21lbWJlciwgb2JqZWN0
X2RlY2xhcmF0aW9uKSkKKyAgICAgICAgbGluZXMuYXBwZW5kKCd2b2lkIEJpbmRpbmdUcmFpdHM8
JXM+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShKU09OOjpWYWx1ZSogdmFsdWUpJyAlIENw
cEdlbmVyYXRvci5jcHBfdHlwZV9mb3JfZW51bShlbnVtX21lbWJlci50eXBlLCAnJXM6OiVzJyAl
IChvYmplY3RfZGVjbGFyYXRpb24udHlwZV9uYW1lLCB1Y2ZpcnN0KGVudW1fbWVtYmVyLm1lbWJl
cl9uYW1lKSkpKQogICAgICAgICBsaW5lcy5hcHBlbmQoJ3snKQorICAgICAgICBsaW5lcy5hcHBl
bmQoJyAgICBBU1NFUlRfVU5VU0VEKHZhbHVlLCB2YWx1ZSk7JykKICAgICAgICAgbGluZXMuYXBw
ZW5kKCcjaWYgQVNTRVJUX0VOQUJMRUQnKQotICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBBU1NF
UlRfQVJHKHZhbHVlLCB2YWx1ZSk7JykKLSAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgU3RyaW5n
IHJlc3VsdDsnKQotICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBib29sIGNhc3RTdWNjZWVkZWQg
PSB2YWx1ZS0+YXNTdHJpbmcocmVzdWx0KTsnKQotICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBB
U1NFUlQoY2FzdFN1Y2NlZWRlZCk7JykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgYXV0byBy
ZXN1bHQgPSB2YWx1ZS0+YXNTdHJpbmcoKTsnKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBB
U1NFUlQocmVzdWx0KTsnKQogCiAgICAgICAgIGFzc2VydF9jb25kaXRpb24gPSAnIHx8ICcuam9p
bihbJ3Jlc3VsdCA9PSAiJXMiJyAlIGVudW1fdmFsdWUgZm9yIGVudW1fdmFsdWUgaW4gZW51bV9t
ZW1iZXIudHlwZS5lbnVtX3ZhbHVlcygpXSkKICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgQVNT
RVJUKCVzKTsnICUgYXNzZXJ0X2NvbmRpdGlvbikKLSAgICAgICAgbGluZXMuYXBwZW5kKCcjZWxz
ZSAvLyBBU1NFUlRfRU5BQkxFRCcpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIFVOVVNFRF9Q
QVJBTSh2YWx1ZSk7JykKLSAgICAgICAgbGluZXMuYXBwZW5kKCcjZW5kaWYgLy8gQVNTRVJUX0VO
QUJMRUQnKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyNlbmRpZicpCiAgICAgICAgIGxpbmVzLmFw
cGVuZCgnfScpCiAKICAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRl
X29iamNfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfYmFja2VuZF9kaXNwYXRj
aGVyX2hlYWRlci5weQppbmRleCAzZTEzOTc0YWIzNjIxM2RhNzhiNzJjYTIzMmU3N2UxYTk5NGM1
NWY3Li45NmI2YjYxMjZkYzdlZDgxMzJjM2YyZTIzNWRlM2Y3MDFkY2Y4OTExIDEwMDc1NQotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0
ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19iYWNrZW5kX2Rp
c3BhdGNoZXJfaGVhZGVyLnB5CkBAIC0zMywxMyArMzMsMTMgQEAgZnJvbSBzdHJpbmcgaW1wb3J0
IFRlbXBsYXRlCiB0cnk6CiAgICAgZnJvbSAuY3BwX2dlbmVyYXRvciBpbXBvcnQgQ3BwR2VuZXJh
dG9yCiAgICAgZnJvbSAuZ2VuZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IKLSAgICBmcm9tIC5tb2Rl
bHMgaW1wb3J0IEZyYW1ld29ya3MKKyAgICBmcm9tIC5tb2RlbHMgaW1wb3J0IEVudW1UeXBlLCBB
bGlhc2VkVHlwZSwgRnJhbWV3b3JrcwogICAgIGZyb20gLm9iamNfZ2VuZXJhdG9yIGltcG9ydCBP
YmpDR2VuZXJhdG9yCiAgICAgZnJvbSAub2JqY19nZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBP
YmpDR2VuZXJhdG9yVGVtcGxhdGVzIGFzIE9iakNUZW1wbGF0ZXMKIGV4Y2VwdCBWYWx1ZUVycm9y
OgogICAgIGZyb20gY3BwX2dlbmVyYXRvciBpbXBvcnQgQ3BwR2VuZXJhdG9yCiAgICAgZnJvbSBn
ZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvcgotICAgIGZyb20gbW9kZWxzIGltcG9ydCBGcmFtZXdv
cmtzCisgICAgZnJvbSBtb2RlbHMgaW1wb3J0IEVudW1UeXBlLCBBbGlhc2VkVHlwZSwgRnJhbWV3
b3JrcwogICAgIGZyb20gb2JqY19nZW5lcmF0b3IgaW1wb3J0IE9iakNHZW5lcmF0b3IKICAgICBm
cm9tIG9iamNfZ2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgT2JqQ0dlbmVyYXRvclRlbXBsYXRl
cyBhcyBPYmpDVGVtcGxhdGVzCiAKQEAgLTEwMyw5ICsxMDMsMTkgQEAgY2xhc3MgT2JqQ0JhY2tl
bmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yKE9iakNHZW5lcmF0b3IpOgogCiAgICAgZGVmIF9n
ZW5lcmF0ZV9vYmpjX2hhbmRsZXJfZGVjbGFyYXRpb25fZm9yX2NvbW1hbmQoc2VsZiwgY29tbWFu
ZCk6CiAgICAgICAgIGxpbmVzID0gW10KLSAgICAgICAgcGFyYW1ldGVycyA9IFsnbG9uZyByZXF1
ZXN0SWQnXQotICAgICAgICBmb3IgX3BhcmFtZXRlciBpbiBjb21tYW5kLmNhbGxfcGFyYW1ldGVy
czoKLSAgICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKCclcyBpbl8lcycgJSAoQ3BwR2VuZXJh
dG9yLmNwcF90eXBlX2Zvcl91bmNoZWNrZWRfZm9ybWFsX2luX3BhcmFtZXRlcihfcGFyYW1ldGVy
KSwgX3BhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkpCisgICAgICAgIHBhcmFtZXRlcnMgPSBbJ2xv
bmcgcHJvdG9jb2xfY2FsbElkJ10KKyAgICAgICAgZm9yIHBhcmFtZXRlciBpbiBjb21tYW5kLmNh
bGxfcGFyYW1ldGVyczoKKyAgICAgICAgICAgIHBhcmFtZXRlcl90eXBlID0gcGFyYW1ldGVyLnR5
cGUKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UocGFyYW1ldGVyX3R5cGUsIEFsaWFzZWRUeXBl
KToKKyAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfdHlwZSA9IHBhcmFtZXRlcl90eXBlLmFsaWFz
ZWRfdHlwZQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShwYXJhbWV0ZXJfdHlwZSwgRW51bVR5
cGUpOgorICAgICAgICAgICAgICAgIHBhcmFtZXRlcl90eXBlID0gcGFyYW1ldGVyX3R5cGUucHJp
bWl0aXZlX3R5cGUKKworICAgICAgICAgICAgcGFyYW1ldGVyX25hbWUgPSBwYXJhbWV0ZXIucGFy
YW1ldGVyX25hbWUKKyAgICAgICAgICAgIGlmIHBhcmFtZXRlci5pc19vcHRpb25hbDoKKyAgICAg
ICAgICAgICAgICBwYXJhbWV0ZXJfbmFtZSA9ICdvcHRfJyArIHBhcmFtZXRlcl9uYW1lCisKKyAg
ICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKCclcyAlcycgJSAoQ3BwR2VuZXJhdG9yLmNwcF90
eXBlX2Zvcl9jb21tYW5kX3BhcmFtZXRlcihwYXJhbWV0ZXJfdHlwZSwgcGFyYW1ldGVyLmlzX29w
dGlvbmFsKSwgcGFyYW1ldGVyX25hbWUpKQogCiAgICAgICAgIGNvbW1hbmRfYXJncyA9IHsKICAg
ICAgICAgICAgICdjb21tYW5kTmFtZSc6IGNvbW1hbmQuY29tbWFuZF9uYW1lLApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJh
dGVfb2JqY19iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2JhY2tl
bmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQppbmRleCBmNWVlOGU1ODM5OGQ2OWJhZTRi
ZWI0YzE4NjcwNjNjY2Q1MjIwOWVjLi4xYmQ5NjM1YmQzMjUxOTkxNTFjZmQ5ODAxM2E1MTI3Mjg5
ODhkMWI5IDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlv
bi5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdl
bi9nZW5lcmF0ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQpAQCAt
OTAsOSArOTAsMjAgQEAgY2xhc3MgT2JqQ0JhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25H
ZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6CiAKICAgICBkZWYgX2dlbmVyYXRlX2hhbmRsZXJfaW1w
bGVtZW50YXRpb25fZm9yX2NvbW1hbmQoc2VsZiwgZG9tYWluLCBjb21tYW5kKToKICAgICAgICAg
bGluZXMgPSBbXQotICAgICAgICBwYXJhbWV0ZXJzID0gWydsb25nIHJlcXVlc3RJZCddCisgICAg
ICAgIHBhcmFtZXRlcnMgPSBbJ2xvbmcgcHJvdG9jb2xfY2FsbElkJ10KICAgICAgICAgZm9yIHBh
cmFtZXRlciBpbiBjb21tYW5kLmNhbGxfcGFyYW1ldGVyczoKLSAgICAgICAgICAgIHBhcmFtZXRl
cnMuYXBwZW5kKCclcyBpbl8lcycgJSAoQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl91bmNoZWNr
ZWRfZm9ybWFsX2luX3BhcmFtZXRlcihwYXJhbWV0ZXIpLCBwYXJhbWV0ZXIucGFyYW1ldGVyX25h
bWUpKQorICAgICAgICAgICAgcGFyYW1ldGVyX3R5cGUgPSBwYXJhbWV0ZXIudHlwZQorICAgICAg
ICAgICAgaWYgaXNpbnN0YW5jZShwYXJhbWV0ZXJfdHlwZSwgQWxpYXNlZFR5cGUpOgorICAgICAg
ICAgICAgICAgIHBhcmFtZXRlcl90eXBlID0gcGFyYW1ldGVyX3R5cGUuYWxpYXNlZF90eXBlCisg
ICAgICAgICAgICBpZiBpc2luc3RhbmNlKHBhcmFtZXRlcl90eXBlLCBFbnVtVHlwZSk6CisgICAg
ICAgICAgICAgICAgcGFyYW1ldGVyX3R5cGUgPSBwYXJhbWV0ZXJfdHlwZS5wcmltaXRpdmVfdHlw
ZQorCisgICAgICAgICAgICBwYXJhbWV0ZXJfbmFtZSA9IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFt
ZQorICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAg
IHBhcmFtZXRlcl9uYW1lID0gJ29wdF8nICsgcGFyYW1ldGVyX25hbWUKKyAgICAgICAgICAgIHBh
cmFtZXRlcl9uYW1lID0gJ2luXycgKyBwYXJhbWV0ZXJfbmFtZQorCisgICAgICAgICAgICBwYXJh
bWV0ZXJzLmFwcGVuZCgnJXMgJXMnICUgKENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3JfY29tbWFu
ZF9wYXJhbWV0ZXIocGFyYW1ldGVyX3R5cGUsIHBhcmFtZXRlci5pc19vcHRpb25hbCksIHBhcmFt
ZXRlcl9uYW1lKSkKIAogICAgICAgICBjb21tYW5kX2FyZ3MgPSB7CiAgICAgICAgICAgICAnZG9t
YWluTmFtZSc6IGRvbWFpbi5kb21haW5fbmFtZSwKQEAgLTExNSw0NSArMTI2LDU0IEBAIGNsYXNz
IE9iakNCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKE9iakNHZW5lcmF0
b3IpOgogICAgICAgICBpZiBjb21tYW5kLnJldHVybl9wYXJhbWV0ZXJzOgogICAgICAgICAgICAg
c3VjY2Vzc19ibG9ja19wYXJhbWV0ZXJzID0gW10KICAgICAgICAgICAgIGZvciBwYXJhbWV0ZXIg
aW4gY29tbWFuZC5yZXR1cm5fcGFyYW1ldGVyczoKKyAgICAgICAgICAgICAgICBvdXRfcGFyYW1f
bmFtZSA9IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZQorICAgICAgICAgICAgICAgIGlmIHBhcmFt
ZXRlci5pc19vcHRpb25hbDoKKyAgICAgICAgICAgICAgICAgICAgb3V0X3BhcmFtX25hbWUgPSAn
b3B0XycgKyBvdXRfcGFyYW1fbmFtZQorICAgICAgICAgICAgICAgIG91dF9wYXJhbV9uYW1lID0g
J291dF8nICsgb3V0X3BhcmFtX25hbWUKICAgICAgICAgICAgICAgICBvYmpjX3R5cGUgPSBzZWxm
Lm9iamNfdHlwZV9mb3JfcGFyYW0oZG9tYWluLCBjb21tYW5kLmNvbW1hbmRfbmFtZSwgcGFyYW1l
dGVyKQotICAgICAgICAgICAgICAgIHZhcl9uYW1lID0gT2JqQ0dlbmVyYXRvci5pZGVudGlmaWVy
X3RvX29iamNfaWRlbnRpZmllcihwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpCi0gICAgICAgICAg
ICAgICAgc3VjY2Vzc19ibG9ja19wYXJhbWV0ZXJzLmFwcGVuZChqb2luX3R5cGVfYW5kX25hbWUo
b2JqY190eXBlLCB2YXJfbmFtZSkpCisgICAgICAgICAgICAgICAgc3VjY2Vzc19ibG9ja19wYXJh
bWV0ZXJzLmFwcGVuZChqb2luX3R5cGVfYW5kX25hbWUob2JqY190eXBlLCBvdXRfcGFyYW1fbmFt
ZSkpCiAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBe
KCVzKSB7JyAlICcsICcuam9pbihzdWNjZXNzX2Jsb2NrX3BhcmFtZXRlcnMpKQogICAgICAgICBl
bHNlOgogICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0g
XnsnKQogCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBhdXRvIHByb3RvY29sX2pzb25N
ZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsnKQogICAgICAgICBpZiBjb21tYW5kLnJl
dHVybl9wYXJhbWV0ZXJzOgotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIFJlZjxK
U09OOjpPYmplY3Q+IHJlc3VsdE9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7JykKLQog
ICAgICAgICAgICAgcmVxdWlyZWRfcG9pbnRlcl9wYXJhbWV0ZXJzID0gW3BhcmFtZXRlciBmb3Ig
cGFyYW1ldGVyIGluIGNvbW1hbmQucmV0dXJuX3BhcmFtZXRlcnMgaWYgbm90IHBhcmFtZXRlci5p
c19vcHRpb25hbCBhbmQgT2JqQ0dlbmVyYXRvci5pc190eXBlX29iamNfcG9pbnRlcl90eXBlKHBh
cmFtZXRlci50eXBlKV0KICAgICAgICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gcmVxdWlyZWRfcG9p
bnRlcl9wYXJhbWV0ZXJzOgotICAgICAgICAgICAgICAgIHZhcl9uYW1lID0gT2JqQ0dlbmVyYXRv
ci5pZGVudGlmaWVyX3RvX29iamNfaWRlbnRpZmllcihwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUp
Ci0gICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9G
T1JfUkVRVUlSRURfUEFSQU1FVEVSKCVzLCBAIiVzIik7JyAlICh2YXJfbmFtZSwgdmFyX25hbWUp
KQorICAgICAgICAgICAgICAgIG91dF9wYXJhbV9uYW1lID0gcGFyYW1ldGVyLnBhcmFtZXRlcl9u
YW1lCisgICAgICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgorICAgICAgICAg
ICAgICAgICAgICBvdXRfcGFyYW1fbmFtZSA9ICdvcHRfJyArIG91dF9wYXJhbV9uYW1lCisgICAg
ICAgICAgICAgICAgb3V0X3BhcmFtX25hbWUgPSAnb3V0XycgKyBvdXRfcGFyYW1fbmFtZQorICAg
ICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JF
UVVJUkVEX1BBUkFNRVRFUiglcywgQCIlcyIpOycgJSAob3V0X3BhcmFtX25hbWUsIHBhcmFtZXRl
ci5wYXJhbWV0ZXJfbmFtZSkpCiAgICAgICAgICAgICAgICAgb2JqY19hcnJheV9jbGFzcyA9IHNl
bGYub2JqY19jbGFzc19mb3JfYXJyYXlfdHlwZShwYXJhbWV0ZXIudHlwZSkKICAgICAgICAgICAg
ICAgICBpZiBvYmpjX2FycmF5X2NsYXNzIGFuZCBvYmpjX2FycmF5X2NsYXNzLnN0YXJ0c3dpdGgo
c2VsZi5vYmpjX3ByZWZpeCgpKToKLSAgICAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcg
ICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEVfSU5fQVJSQVkoJXMsIFslcyBjbGFz
c10pOycgJSAodmFyX25hbWUsIG9iamNfYXJyYXlfY2xhc3MpKQorICAgICAgICAgICAgICAgICAg
ICBsaW5lcy5hcHBlbmQoJyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRV9JTl9B
UlJBWSglcywgWyVzIGNsYXNzXSk7JyAlIChvdXRfcGFyYW1fbmFtZSwgb2JqY19hcnJheV9jbGFz
cykpCiAKICAgICAgICAgICAgIG9wdGlvbmFsX3BvaW50ZXJfcGFyYW1ldGVycyA9IFtwYXJhbWV0
ZXIgZm9yIHBhcmFtZXRlciBpbiBjb21tYW5kLnJldHVybl9wYXJhbWV0ZXJzIGlmIHBhcmFtZXRl
ci5pc19vcHRpb25hbCBhbmQgT2JqQ0dlbmVyYXRvci5pc190eXBlX29iamNfcG9pbnRlcl90eXBl
KHBhcmFtZXRlci50eXBlKV0KICAgICAgICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gb3B0aW9uYWxf
cG9pbnRlcl9wYXJhbWV0ZXJzOgotICAgICAgICAgICAgICAgIHZhcl9uYW1lID0gT2JqQ0dlbmVy
YXRvci5pZGVudGlmaWVyX3RvX29iamNfaWRlbnRpZmllcihwYXJhbWV0ZXIucGFyYW1ldGVyX25h
bWUpCi0gICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUiglcywgQCIlcyIpOycgJSAodmFyX25hbWUsIHZh
cl9uYW1lKSkKKyAgICAgICAgICAgICAgICBvdXRfcGFyYW1fbmFtZSA9IHBhcmFtZXRlci5wYXJh
bWV0ZXJfbmFtZQorICAgICAgICAgICAgICAgIGlmIHBhcmFtZXRlci5pc19vcHRpb25hbDoKKyAg
ICAgICAgICAgICAgICAgICAgb3V0X3BhcmFtX25hbWUgPSAnb3B0XycgKyBvdXRfcGFyYW1fbmFt
ZQorICAgICAgICAgICAgICAgIG91dF9wYXJhbV9uYW1lID0gJ291dF8nICsgb3V0X3BhcmFtX25h
bWUKKyAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgVEhST1dfRVhDRVBUSU9O
X0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKCVzLCBAIiVzIik7JyAlIChvdXRfcGFyYW1fbmFt
ZSwgcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKSkKICAgICAgICAgICAgICAgICBvYmpjX2FycmF5
X2NsYXNzID0gc2VsZi5vYmpjX2NsYXNzX2Zvcl9hcnJheV90eXBlKHBhcmFtZXRlci50eXBlKQog
ICAgICAgICAgICAgICAgIGlmIG9iamNfYXJyYXlfY2xhc3MgYW5kIG9iamNfYXJyYXlfY2xhc3Mu
c3RhcnRzd2l0aChzZWxmLm9iamNfcHJlZml4KCkpOgotICAgICAgICAgICAgICAgICAgICBsaW5l
cy5hcHBlbmQoJyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRV9JTl9PUFRJT05B
TF9BUlJBWSglcywgWyVzIGNsYXNzXSk7JyAlICh2YXJfbmFtZSwgb2JqY19hcnJheV9jbGFzcykp
CisgICAgICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBUSFJPV19FWENFUFRJ
T05fRk9SX0JBRF9UWVBFX0lOX09QVElPTkFMX0FSUkFZKCVzLCBbJXMgY2xhc3NdKTsnICUgKG91
dF9wYXJhbV9uYW1lLCBvYmpjX2FycmF5X2NsYXNzKSkKIAogICAgICAgICAgICAgZm9yIHBhcmFt
ZXRlciBpbiBjb21tYW5kLnJldHVybl9wYXJhbWV0ZXJzOgorICAgICAgICAgICAgICAgIG91dF9w
YXJhbV9uYW1lID0gcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lCisgICAgICAgICAgICAgICAgaWYg
cGFyYW1ldGVyLmlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAgICAgICBvdXRfcGFyYW1fbmFt
ZSA9ICdvcHRfJyArIG91dF9wYXJhbV9uYW1lCisgICAgICAgICAgICAgICAgb3V0X3BhcmFtX25h
bWUgPSAnb3V0XycgKyBvdXRfcGFyYW1fbmFtZQogICAgICAgICAgICAgICAgIGtleWVkX3NldF9t
ZXRob2QgPSBDcHBHZW5lcmF0b3IuY3BwX3NldHRlcl9tZXRob2RfZm9yX3R5cGUocGFyYW1ldGVy
LnR5cGUpCi0gICAgICAgICAgICAgICAgdmFyX25hbWUgPSBPYmpDR2VuZXJhdG9yLmlkZW50aWZp
ZXJfdG9fb2JqY19pZGVudGlmaWVyKHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkKLSAgICAgICAg
ICAgICAgICB2YXJfZXhwcmVzc2lvbiA9ICcqJXMnICUgdmFyX25hbWUgaWYgcGFyYW1ldGVyLmlz
X29wdGlvbmFsIGVsc2UgdmFyX25hbWUKKyAgICAgICAgICAgICAgICB2YXJfZXhwcmVzc2lvbiA9
ICcqJXMnICUgb3V0X3BhcmFtX25hbWUgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsIGVsc2Ugb3V0
X3BhcmFtX25hbWUKICAgICAgICAgICAgICAgICBleHBvcnRfZXhwcmVzc2lvbiA9IHNlbGYub2Jq
Y19wcm90b2NvbF9leHBvcnRfZXhwcmVzc2lvbl9mb3JfdmFyaWFibGUocGFyYW1ldGVyLnR5cGUs
IHZhcl9leHByZXNzaW9uKQogICAgICAgICAgICAgICAgIGlmIG5vdCBwYXJhbWV0ZXIuaXNfb3B0
aW9uYWw6Ci0gICAgICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICByZXN1bHRP
YmplY3QtPiVzKCIlcyJfcywgJXMpOycgJSAoa2V5ZWRfc2V0X21ldGhvZCwgcGFyYW1ldGVyLnBh
cmFtZXRlcl9uYW1lLCBleHBvcnRfZXhwcmVzc2lvbikpCisgICAgICAgICAgICAgICAgICAgIGxp
bmVzLmFwcGVuZCgnICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+JXMoIiVzIl9zLCAlcyk7
JyAlIChrZXllZF9zZXRfbWV0aG9kLCBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUsIGV4cG9ydF9l
eHByZXNzaW9uKSkKICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBs
aW5lcy5hcHBlbmQoJyAgICAgICAgaWYgKCVzKScgJSB2YXJfbmFtZSkKLSAgICAgICAgICAgICAg
ICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgICAgICByZXN1bHRPYmplY3QtPiVzKCIlcyJfcywg
JXMpOycgJSAoa2V5ZWRfc2V0X21ldGhvZCwgcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lLCBleHBv
cnRfZXhwcmVzc2lvbikpCi0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgYmFja2Vu
ZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHRPYmpl
Y3QpLCBmYWxzZSk7JykKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgn
ICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBKU09O
OjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7JykKKyAgICAgICAgICAgICAgICAgICAgbGluZXMu
YXBwZW5kKCcgICAgICAgIGlmICghISVzKScgJSBvdXRfcGFyYW1fbmFtZSkKKyAgICAgICAgICAg
ICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+
JXMoIiVzIl9zLCAlcyk7JyAlIChrZXllZF9zZXRfbWV0aG9kLCBwYXJhbWV0ZXIucGFyYW1ldGVy
X25hbWUsIGV4cG9ydF9leHByZXNzaW9uKSkKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAg
IGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShwcm90b2NvbF9jYWxsSWQsIFdURk1v
dmUocHJvdG9jb2xfanNvbk1lc3NhZ2UpLCBmYWxzZSk7JykKIAogICAgICAgICBsaW5lcy5hcHBl
bmQoJyAgICB9OycpCiAgICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCkBAIC0xNjYsMTcg
KzE4NiwyNyBAQCBjbGFzcyBPYmpDQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVy
YXRvcihPYmpDR2VuZXJhdG9yKToKICAgICAgICAgZGVmIGluX3BhcmFtX2V4cHJlc3Npb24ocGFy
YW1fbmFtZSwgcGFyYW1ldGVyKToKICAgICAgICAgICAgIF90eXBlID0gcGFyYW1ldGVyLnR5cGUK
ICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEFsaWFzZWRUeXBlKToKLSAgICAgICAg
ICAgICAgICBfdHlwZSA9IF90eXBlLmFsaWFzZWRfdHlwZSAgIyBGYWxsIHRocm91Z2ggdG8gZW51
bSBvciBwcmltaXRpdmUuCisgICAgICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5hbGlhc2VkX3R5
cGUKICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKToKLSAgICAgICAg
ICAgICAgICBfdHlwZSA9IF90eXBlLnByaW1pdGl2ZV90eXBlICAjIEZhbGwgdGhyb3VnaCB0byBw
cmltaXRpdmUuCi0gICAgICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBQcmltaXRpdmVUeXBl
KToKLSAgICAgICAgICAgICAgICBpZiBfdHlwZS5yYXdfbmFtZSgpIGluIFsnYXJyYXknLCAnYW55
JywgJ29iamVjdCddOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gJyYlcycgJSBwYXJhbV9u
YW1lIGlmIG5vdCBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwgZWxzZSBwYXJhbV9uYW1lCi0gICAgICAg
ICAgICAgICAgcmV0dXJuICcqJXMnICUgcGFyYW1fbmFtZSBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9u
YWwgZWxzZSBwYXJhbV9uYW1lCi0gICAgICAgICAgICByZXR1cm4gJyYlcycgJSBwYXJhbV9uYW1l
IGlmIG5vdCBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwgZWxzZSBwYXJhbV9uYW1lCisgICAgICAgICAg
ICAgICAgX3R5cGUgPSBfdHlwZS5wcmltaXRpdmVfdHlwZQorCisgICAgICAgICAgICBpZiBfdHlw
ZS5pc19lbnVtKCk6CisgICAgICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgor
ICAgICAgICAgICAgICAgICAgICBwYXJhbV9uYW1lID0gJyonICsgcGFyYW1fbmFtZQorICAgICAg
ICAgICAgICAgIHJldHVybiAnUHJvdG9jb2w6OkhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVl
KCVzKScgJSBwYXJhbV9uYW1lCisgICAgICAgICAgICBpZiBDcHBHZW5lcmF0b3Iuc2hvdWxkX3Jl
bGVhc2VfYXJndW1lbnQoX3R5cGUsIHBhcmFtZXRlci5pc19vcHRpb25hbCk6CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHBhcmFtX25hbWUgKyAnLnJlbGVhc2VOb25OdWxsKCknCisgICAgICAgICAg
ICBpZiBDcHBHZW5lcmF0b3Iuc2hvdWxkX2RlcmVmZXJlbmNlX2FyZ3VtZW50KF90eXBlLCBwYXJh
bWV0ZXIuaXNfb3B0aW9uYWwpOgorICAgICAgICAgICAgICAgIHJldHVybiAnKicgKyBwYXJhbV9u
YW1lCisgICAgICAgICAgICBpZiBDcHBHZW5lcmF0b3Iuc2hvdWxkX21vdmVfYXJndW1lbnQoX3R5
cGUsIHBhcmFtZXRlci5pc19vcHRpb25hbCk6CisgICAgICAgICAgICAgICAgcmV0dXJuICdXVEZN
b3ZlKCVzKScgJSBwYXJhbV9uYW1lCisgICAgICAgICAgICByZXR1cm4gcGFyYW1fbmFtZQogCiAg
ICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gY29tbWFuZC5jYWxsX3BhcmFtZXRlcnM6Ci0gICAgICAg
ICAgICBpbl9wYXJhbV9uYW1lID0gJ2luXyVzJyAlIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZQor
ICAgICAgICAgICAgaW5fcGFyYW1fbmFtZSA9IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZQorICAg
ICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAgIGluX3Bh
cmFtX25hbWUgPSAnb3B0XycgKyBpbl9wYXJhbV9uYW1lCisgICAgICAgICAgICBpbl9wYXJhbV9u
YW1lID0gJ2luXycgKyBpbl9wYXJhbV9uYW1lCiAgICAgICAgICAgICBvYmpjX2luX3BhcmFtX25h
bWUgPSAnb18lcycgJSBpbl9wYXJhbV9uYW1lCiAgICAgICAgICAgICBvYmpjX3R5cGUgPSBzZWxm
Lm9iamNfdHlwZV9mb3JfcGFyYW0oZG9tYWluLCBjb21tYW5kLmNvbW1hbmRfbmFtZSwgcGFyYW1l
dGVyLCBGYWxzZSkKICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UocGFyYW1ldGVyLnR5cGUsIEVu
dW1UeXBlKToKQEAgLTE5NCwxMSArMjI0LDggQEAgY2xhc3MgT2JqQ0JhY2tlbmREaXNwYXRjaGVy
SW1wbGVtZW50YXRpb25HZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6CiAKICAgICAgICAgICAgIGVs
c2U6CiAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgJXM7JyAlIGpvaW5fdHlwZV9h
bmRfbmFtZShvYmpjX3R5cGUsIG9iamNfaW5fcGFyYW1fbmFtZSkpCi0gICAgICAgICAgICAgICAg
bGluZXMuYXBwZW5kKCcgICAgaWYgKCVzKScgJSBpbl9wYXJhbV9uYW1lKQorICAgICAgICAgICAg
ICAgIGxpbmVzLmFwcGVuZCgnICAgIGlmICghISVzKScgJSBpbl9wYXJhbV9uYW1lKQogICAgICAg
ICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICAlcyA9ICVzOycgJSAob2JqY19pbl9wYXJh
bV9uYW1lLCBpbXBvcnRfZXhwcmVzc2lvbikpCi0KLSAgICAgICAgaWYgbGluZXM6Ci0gICAgICAg
ICAgICBsaW5lcy5hcHBlbmQoJycpCiAgICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCiAK
ICAgICBkZWYgX2dlbmVyYXRlX2ludm9jYXRpb25fZm9yX2NvbW1hbmQoc2VsZiwgZG9tYWluLCBj
b21tYW5kKToKQEAgLTIwNiw3ICsyMzMsMTAgQEAgY2xhc3MgT2JqQ0JhY2tlbmREaXNwYXRjaGVy
SW1wbGVtZW50YXRpb25HZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6CiAgICAgICAgIHBhaXJzLmFw
cGVuZCgnV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjaycpCiAgICAgICAgIHBhaXJzLmFw
cGVuZCgnc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjaycpCiAgICAgICAgIGZvciBwYXJh
bWV0ZXIgaW4gY29tbWFuZC5jYWxsX3BhcmFtZXRlcnM6Ci0gICAgICAgICAgICBpbl9wYXJhbV9u
YW1lID0gJ2luXyVzJyAlIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZQorICAgICAgICAgICAgaW5f
cGFyYW1fbmFtZSA9IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZQorICAgICAgICAgICAgaWYgcGFy
YW1ldGVyLmlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAgIGluX3BhcmFtX25hbWUgPSAnb3B0
XycgKyBpbl9wYXJhbV9uYW1lCisgICAgICAgICAgICBpbl9wYXJhbV9uYW1lID0gJ2luXycgKyBp
bl9wYXJhbV9uYW1lCiAgICAgICAgICAgICBvYmpjX2luX3BhcmFtX2V4cHJlc3Npb24gPSAnb18l
cycgJSBpbl9wYXJhbV9uYW1lCiAgICAgICAgICAgICBpZiBub3QgcGFyYW1ldGVyLmlzX29wdGlv
bmFsOgogICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UocGFyYW1ldGVyLnR5cGUsIEVudW1U
eXBlKToKQEAgLTIxNyw2ICsyNDcsNiBAQCBjbGFzcyBPYmpDQmFja2VuZERpc3BhdGNoZXJJbXBs
ZW1lbnRhdGlvbkdlbmVyYXRvcihPYmpDR2VuZXJhdG9yKToKICAgICAgICAgICAgICAgICBpZiBp
c2luc3RhbmNlKHBhcmFtZXRlci50eXBlLCBFbnVtVHlwZSk6CiAgICAgICAgICAgICAgICAgICAg
IG9iamNfaW5fcGFyYW1fZXhwcmVzc2lvbiA9ICclcy52YWx1ZSgpJyAlIG9iamNfaW5fcGFyYW1f
ZXhwcmVzc2lvbgogCi0gICAgICAgICAgICAgICAgb3B0aW9uYWxfZXhwcmVzc2lvbiA9ICcoJXMg
PyAmJXMgOiBuaWwpJyAlIChpbl9wYXJhbV9uYW1lLCBvYmpjX2luX3BhcmFtX2V4cHJlc3Npb24p
CisgICAgICAgICAgICAgICAgb3B0aW9uYWxfZXhwcmVzc2lvbiA9ICcoISElcyA/ICYlcyA6IG5p
bCknICUgKGluX3BhcmFtX25hbWUsIG9iamNfaW5fcGFyYW1fZXhwcmVzc2lvbikKICAgICAgICAg
ICAgICAgICBwYWlycy5hcHBlbmQoJyVzOiVzJyAlIChwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUs
IG9wdGlvbmFsX2V4cHJlc3Npb24pKQogICAgICAgICByZXR1cm4gJyAgICBbbV9kZWxlZ2F0ZSAl
cyVzXTsnICUgKGNvbW1hbmQuY29tbWFuZF9uYW1lLCAnICcuam9pbihwYWlycykpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5l
cmF0ZV9vYmpjX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2Zy
b250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkKaW5kZXggZGRkYjI3YTg4YzJiYWZm
NWZjNmYyN2JjNDNhMDFlMzFlYTljZDQ5ZC4uOGQ0MTkzODEyM2Y5MDZmYmYwOTFlMmFiN2IzNmE2
MDczM2RiMzk1MiAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVu
dGF0aW9uLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9j
b2RlZ2VuL2dlbmVyYXRlX29iamNfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5w
eQpAQCAtMTI1LDExICsxMjUsMTEgQEAgY2xhc3MgT2JqQ0Zyb250ZW5kRGlzcGF0Y2hlckltcGxl
bWVudGF0aW9uR2VuZXJhdG9yKE9iakNHZW5lcmF0b3IpOgogICAgICAgICBpZiByZXF1aXJlZF9w
b2ludGVyX3BhcmFtZXRlcnMgb3Igb3B0aW9uYWxfcG9pbnRlcl9wYXJhbWV0ZXJzOgogICAgICAg
ICAgICAgbGluZXMuYXBwZW5kKCcnKQogCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIFJlZjxK
U09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsnKQotICAg
ICAgICBsaW5lcy5hcHBlbmQoJyAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3Ms
ICIlcy4lcyJfcyk7JyAlIChkb21haW4uZG9tYWluX25hbWUsIGV2ZW50LmV2ZW50X25hbWUpKQor
ICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNP
Tjo6T2JqZWN0OjpjcmVhdGUoKTsnKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBwcm90b2Nv
bF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICIlcy4lcyJfcyk7JyAlIChkb21h
aW4uZG9tYWluX25hbWUsIGV2ZW50LmV2ZW50X25hbWUpKQogICAgICAgICBpZiBldmVudC5ldmVu
dF9wYXJhbWV0ZXJzOgogICAgICAgICAgICAgbGluZXMuZXh0ZW5kKHNlbGYuX2dlbmVyYXRlX2V2
ZW50X291dF9wYXJhbWV0ZXJzKGRvbWFpbiwgZXZlbnQpKQotICAgICAgICBsaW5lcy5hcHBlbmQo
JyAgICByb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7JykKKyAg
ICAgICAgbGluZXMuYXBwZW5kKCcgICAgcm91dGVyLnNlbmRFdmVudChwcm90b2NvbF9qc29uTWVz
c2FnZS0+dG9KU09OU3RyaW5nKCkpOycpCiAgICAgICAgIGxpbmVzLmFwcGVuZCgnfScpCiAgICAg
ICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGV2ZW50LmNvbmRp
dGlvbiwgJ1xuJy5qb2luKGxpbmVzKSkKIApAQCAtMTQ1LDE2ICsxNDUsMTYgQEAgY2xhc3MgT2Jq
Q0Zyb250ZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKE9iakNHZW5lcmF0b3Ip
OgogCiAgICAgZGVmIF9nZW5lcmF0ZV9ldmVudF9vdXRfcGFyYW1ldGVycyhzZWxmLCBkb21haW4s
IGV2ZW50KToKICAgICAgICAgbGluZXMgPSBbXQotICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBS
ZWY8SlNPTjo6T2JqZWN0PiBwYXJhbXNPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOycp
CisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGF1dG8gcHJvdG9jb2xfcGFyYW1zT2JqZWN0ID0g
SlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsnKQogICAgICAgICBmb3IgcGFyYW1ldGVyIGluIGV2ZW50
LmV2ZW50X3BhcmFtZXRlcnM6CiAgICAgICAgICAgICBrZXllZF9zZXRfbWV0aG9kID0gQ3BwR2Vu
ZXJhdG9yLmNwcF9zZXR0ZXJfbWV0aG9kX2Zvcl90eXBlKHBhcmFtZXRlci50eXBlKQogICAgICAg
ICAgICAgdmFyX25hbWUgPSBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUKICAgICAgICAgICAgIHNh
ZmVfdmFyX25hbWUgPSAnKColcyknICUgdmFyX25hbWUgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFs
IGVsc2UgdmFyX25hbWUKICAgICAgICAgICAgIGV4cG9ydF9leHByZXNzaW9uID0gc2VsZi5vYmpj
X3Byb3RvY29sX2V4cG9ydF9leHByZXNzaW9uX2Zvcl92YXJpYWJsZShwYXJhbWV0ZXIudHlwZSwg
c2FmZV92YXJfbmFtZSkKICAgICAgICAgICAgIGlmIG5vdCBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6
Ci0gICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgcGFyYW1zT2JqZWN0LT4lcygiJXMi
X3MsICVzKTsnICUgKGtleWVkX3NldF9tZXRob2QsIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwg
ZXhwb3J0X2V4cHJlc3Npb24pKQorICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIHBy
b3RvY29sX3BhcmFtc09iamVjdC0+JXMoIiVzIl9zLCAlcyk7JyAlIChrZXllZF9zZXRfbWV0aG9k
LCBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUsIGV4cG9ydF9leHByZXNzaW9uKSkKICAgICAgICAg
ICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgaWYgKCVzKScgJSAo
cGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKSkKLSAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQo
JyAgICAgICAgcGFyYW1zT2JqZWN0LT4lcygiJXMiX3MsICVzKTsnICUgKGtleWVkX3NldF9tZXRo
b2QsIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwgZXhwb3J0X2V4cHJlc3Npb24pKQotICAgICAg
ICBsaW5lcy5hcHBlbmQoJyAgICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiX3MsIFdU
Rk1vdmUocGFyYW1zT2JqZWN0KSk7JykKKyAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAg
ICAgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT4lcygiJXMiX3MsICVzKTsnICUgKGtleWVkX3Nl
dF9tZXRob2QsIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwgZXhwb3J0X2V4cHJlc3Npb24pKQor
ICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0T2JqZWN0
KCJwYXJhbXMiX3MsIFdURk1vdmUocHJvdG9jb2xfcGFyYW1zT2JqZWN0KSk7JykKICAgICAgICAg
cmV0dXJuIGxpbmVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0b3IucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0b3IucHkKaW5kZXggOTRkMThkOWQ2NjE5NGQx
NTg1YzBlMTBjMDQ5NGJiNGIxYTEzYjk1NS4uMjlhMmRlYTcyNGYwYmJlY2ZlYmE2ZGI5MjA2MDgx
NzAxZTUxMGM1MSAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2NvZGVnZW4vZ2VuZXJhdG9yLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRvci5weQpAQCAtNzMsOSArNzMsNiBAQCBf
VFlQRVNfTkVFRElOR19SVU5USU1FX0NBU1RTID0gc2V0KFsKICAgICAiUnVudGltZS5Db2xsZWN0
aW9uRW50cnkiLAogICAgICJEZWJ1Z2dlci5GdW5jdGlvbkRldGFpbHMiLAogICAgICJEZWJ1Z2dl
ci5DYWxsRnJhbWUiLAotICAgICJDYW52YXMuVHJhY2VMb2ciLAotICAgICJDYW52YXMuUmVzb3Vy
Y2VJbmZvIiwKLSAgICAiQ2FudmFzLlJlc291cmNlU3RhdGUiLAogICAgICMgVGhpcyBzaG91bGQg
YmUgYSB0ZW1wb3JhcnkgaGFjay4gVGltZWxpbmVFdmVudCBzaG91bGQgYmUgY3JlYXRlZCB2aWEg
Z2VuZXJhdGVkIEMrKyBBUEkuCiAgICAgIlRpbWVsaW5lLlRpbWVsaW5lRXZlbnQiLAogICAgICMg
Rm9yIHRlc3RpbmcgcHVycG9zZXMgb25seS4KQEAgLTg1LDEwICs4MiwxOSBAQCBfVFlQRVNfTkVF
RElOR19SVU5USU1FX0NBU1RTID0gc2V0KFsKICMgRklYTUU6IFRoaXMgc2hvdWxkIGJlIGNvbnZl
cnRlZCBpbnRvIGEgcHJvcGVydHkgaW4gSlNPTi4KIF9UWVBFU19XSVRIX09QRU5fRklFTERTID0g
ewogICAgICJUaW1lbGluZS5UaW1lbGluZUV2ZW50IjogW10sCi0gICAgIyBJbnNwZWN0b3JTdHls
ZVNoZWV0IG5vdCBvbmx5IGNyZWF0ZXMgdGhpcyBwcm9wZXJ0eSBidXQgd2FudHMgdG8gcmVhZCBp
dCBhbmQgbW9kaWZ5IGl0LgotICAgICJDU1MuQ1NTUHJvcGVydHkiOiBbXSwKLSAgICAjIEluc3Bl
Y3Rvck5ldHdvcmtBZ2VudCBuZWVkcyB0byB1cGRhdGUgbWltZS10eXBlLgotICAgICJOZXR3b3Jr
LlJlc3BvbnNlIjogWyJtaW1lVHlwZSJdLAorICAgICJDU1MuQ1NTUHJvcGVydHkiOiBbInByaW9y
aXR5IiwgInBhcnNlZE9rIiwgInN0YXR1cyJdLAorICAgICJET00uSGlnaGxpZ2h0Q29uZmlnIjog
W10sCisgICAgIkRPTS5SR0JBQ29sb3IiOiBbXSwKKyAgICAiRE9NU3RvcmFnZS5TdG9yYWdlSWQi
OiBbXSwKKyAgICAiRGVidWdnZXIuQnJlYWtwb2ludEFjdGlvbiI6IFtdLAorICAgICJEZWJ1Z2dl
ci5CcmVha3BvaW50T3B0aW9ucyI6IFtdLAorICAgICJEZWJ1Z2dlci5Mb2NhdGlvbiI6IFtdLAor
ICAgICJJbmRleGVkREIuS2V5IjogW10sCisgICAgIkluZGV4ZWREQi5LZXlSYW5nZSI6IFtdLAor
ICAgICJOZXR3b3JrLlJlc3BvbnNlIjogWyJzdGF0dXMiLCAic3RhdHVzVGV4dCIsICJtaW1lVHlw
ZSIsICJzb3VyY2UiXSwKKyAgICAiUGFnZS5Db29raWUiOiBbXSwKKyAgICAiUnVudGltZS5DYWxs
QXJndW1lbnQiOiBbIm9iamVjdElkIl0sCisgICAgIlJ1bnRpbWUuVHlwZUxvY2F0aW9uIjogW10s
CiAgICAgIyBGb3IgdGVzdGluZyBwdXJwb3NlcyBvbmx5LgogICAgICJUZXN0Lk9wZW5QYXJhbWV0
ZXJzIjogWyJhbHBoYSJdLAogfQpAQCAtMTM0LDcgKzE0MCw3IEBAIGNsYXNzIEdlbmVyYXRvcjoK
ICAgICAgICAgICAgIGlmIHNlbGYubW9kZWwoKS5mcmFtZXdvcmsubmFtZSBub3QgaW4gYWxsb3dl
ZF9mcmFtZXdvcmtzOgogICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAKLSAgICAgICAgICAgIGlm
IGZyYW1ld29ya19uYW1lID09ICJXVEYiOgorICAgICAgICAgICAgaWYgZnJhbWV3b3JrX25hbWUg
PT0gIldURiIgb3IgZnJhbWV3b3JrX25hbWUgPT0gInN0ZCI6CiAgICAgICAgICAgICAgICAgaW5j
bHVkZXMuYWRkKCIjaW5jbHVkZSA8JXM+IiAlIGhlYWRlcl9wYXRoKQogICAgICAgICAgICAgZWxp
ZiBzZWxmLm1vZGVsKCkuZnJhbWV3b3JrLm5hbWUgIT0gZnJhbWV3b3JrX25hbWU6CiAgICAgICAg
ICAgICAgICAgaW5jbHVkZXMuYWRkKCIjaW5jbHVkZSA8JXMvJXM+IiAlIChmcmFtZXdvcmtfbmFt
ZSwgb3MucGF0aC5iYXNlbmFtZShoZWFkZXJfcGF0aCkpKQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vb2JqY19nZW5lcmF0b3IucHkg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9vYmpjX2dl
bmVyYXRvci5weQppbmRleCA3MzE1M2I5NTQ2NjcyYjk5MDRlN2Y1ZWI5MTg4NjVmYzhhNTE2OGI2
Li5hMmQzNzZkZjNiOTQzZGRjOTE2NzhiYmJhNWEyZWQzZjAyZTM3MGMwIDEwMDc1NQotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9vYmpjX2dlbmVy
YXRvci5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29k
ZWdlbi9vYmpjX2dlbmVyYXRvci5weQpAQCAtMjYzLDcgKzI2Myw3IEBAIGNsYXNzIE9iakNHZW5l
cmF0b3IoR2VuZXJhdG9yKToKICAgICAgICAgaWYgKGlzaW5zdGFuY2UoX3R5cGUsIEVudW1UeXBl
KSk6CiAgICAgICAgICAgICByZXR1cm4gT2JqQ0dlbmVyYXRvci5wcm90b2NvbF90eXBlX2Zvcl90
eXBlKF90eXBlLnByaW1pdGl2ZV90eXBlKQogICAgICAgICBpZiAoaXNpbnN0YW5jZShfdHlwZSwg
T2JqZWN0VHlwZSkpOgotICAgICAgICAgICAgcmV0dXJuICdJbnNwZWN0b3I6OlByb3RvY29sOjol
czo6JXMnICUgKF90eXBlLnR5cGVfZG9tYWluKCkuZG9tYWluX25hbWUsIF90eXBlLnJhd19uYW1l
KCkpCisgICAgICAgICAgICByZXR1cm4gJ1Byb3RvY29sOjolczo6JXMnICUgKF90eXBlLnR5cGVf
ZG9tYWluKCkuZG9tYWluX25hbWUsIF90eXBlLnJhd19uYW1lKCkpCiAgICAgICAgIGlmIChpc2lu
c3RhbmNlKF90eXBlLCBBcnJheVR5cGUpKToKICAgICAgICAgICAgIHN1Yl90eXBlID0gT2JqQ0dl
bmVyYXRvci5wcm90b2NvbF90eXBlX2Zvcl90eXBlKF90eXBlLmVsZW1lbnRfdHlwZSkKICAgICAg
ICAgICAgIHJldHVybiAnSlNPTjo6QXJyYXlPZjwlcz4nICUgc3ViX3R5cGUKQEAgLTM1Myw4ICsz
NTMsNiBAQCBjbGFzcyBPYmpDR2VuZXJhdG9yKEdlbmVyYXRvcik6CiAgICAgICAgIGlmIChpc2lu
c3RhbmNlKF90eXBlLCBQcmltaXRpdmVUeXBlKSk6CiAgICAgICAgICAgICByZXR1cm4gc2VsZi5v
YmpjX3R5cGVfZm9yX3Jhd19uYW1lKF90eXBlLnJhd19uYW1lKCkpCiAgICAgICAgIGlmIChpc2lu
c3RhbmNlKF90eXBlLCBFbnVtVHlwZSkpOgotICAgICAgICAgICAgaWYgX3R5cGUuaXNfYW5vbnlt
b3VzOgotICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLm9iamNfZW51bV9uYW1lX2Zvcl9hbm9u
eW1vdXNfZW51bV9wYXJhbWV0ZXIoZG9tYWluLCBldmVudF9vcl9jb21tYW5kX25hbWUsIHBhcmFt
ZXRlcikKICAgICAgICAgICAgIHJldHVybiBzZWxmLm9iamNfZW51bV9uYW1lX2Zvcl9ub25fYW5v
bnltb3VzX2VudW0oX3R5cGUpCiAgICAgICAgIGlmIChpc2luc3RhbmNlKF90eXBlLCBPYmplY3RU
eXBlKSk6CiAgICAgICAgICAgICByZXR1cm4gc2VsZi5vYmpjX25hbWVfZm9yX3R5cGUoX3R5cGUp
ICsgJyAqJwpAQCAtMzk4LDggKzM5Niw2IEBAIGNsYXNzIE9iakNHZW5lcmF0b3IoR2VuZXJhdG9y
KToKIAogICAgIGRlZiBvYmpjX3Byb3RvY29sX2ltcG9ydF9leHByZXNzaW9uX2Zvcl9wYXJhbWV0
ZXIoc2VsZiwgbmFtZSwgZG9tYWluLCBldmVudF9vcl9jb21tYW5kX25hbWUsIHBhcmFtZXRlcik6
CiAgICAgICAgIGlmIGlzaW5zdGFuY2UocGFyYW1ldGVyLnR5cGUsIEVudW1UeXBlKToKLSAgICAg
ICAgICAgIGlmIHBhcmFtZXRlci50eXBlLmlzX2Fub255bW91czoKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gJ2Zyb21Qcm90b2NvbFN0cmluZzwlcz4oJXMpJyAlIChzZWxmLm9iamNfZW51bV9uYW1l
X2Zvcl9hbm9ueW1vdXNfZW51bV9wYXJhbWV0ZXIoZG9tYWluLCBldmVudF9vcl9jb21tYW5kX25h
bWUsIHBhcmFtZXRlciksIG5hbWUpCiAgICAgICAgICAgICByZXR1cm4gJ2Zyb21Qcm90b2NvbFN0
cmluZzwlcz4oJXMpJyAlIChzZWxmLm9iamNfZW51bV9uYW1lX2Zvcl9ub25fYW5vbnltb3VzX2Vu
dW0ocGFyYW1ldGVyLnR5cGUpLCBuYW1lKQogICAgICAgICByZXR1cm4gc2VsZi5vYmpjX3Byb3Rv
Y29sX2ltcG9ydF9leHByZXNzaW9uX2Zvcl92YXJpYWJsZShwYXJhbWV0ZXIudHlwZSwgbmFtZSkK
IApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2Nv
ZGVnZW4vb2JqY19nZW5lcmF0b3JfdGVtcGxhdGVzLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vb2JqY19nZW5lcmF0b3JfdGVtcGxhdGVzLnB5Cmlu
ZGV4IDMyNmMyNjI1ZWEzNGYwNjZiMmQ0Y2M5ODQ2ZTE0YTIzNDFiODE4ODEuLmI1NmQxNDgxOTVj
NGI2NWZmZDI0M2E5OTEwYWFkMzYzMzNhMDg1MmQgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL29iamNfZ2VuZXJhdG9yX3RlbXBsYXRl
cy5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdl
bi9vYmpjX2dlbmVyYXRvcl90ZW1wbGF0ZXMucHkKQEAgLTExNCwxMyArMTE0LDEzIEBAIHByaXZh
dGU6CiAgICAgIiIidm9pZCBPYmpDSW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRj
aGVyOjoke2NvbW1hbmROYW1lfSgke3BhcmFtZXRlcnN9KQogewogICAgIGlmICghJHtyZXNwb25k
c1RvU2VsZWN0b3J9KSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3Rv
Y29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICIn
JHtkb21haW5OYW1lfS4ke2NvbW1hbmROYW1lfScgd2FzIG5vdCBmb3VuZCJfcyk7CisgICAgICAg
IGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocHJvdG9jb2xfY2FsbElk
LCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInJHtkb21haW5OYW1lfS4ke2Nv
bW1hbmROYW1lfScgd2FzIG5vdCBmb3VuZCJfcyk7CiAgICAgICAgIGJhY2tlbmREaXNwYXRjaGVy
KCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBp
ZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRj
aGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5y
ZXBvcnRQcm90b2NvbEVycm9yKHByb3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNl
cnZlckVycm9yLCBlcnJvcik7CiAgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5k
aW5nRXJyb3JzKCk7CiAgICAgfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2VudW0tdmFsdWVzLmpzb24gYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZW51bS12YWx1ZXMuanNvbgppbmRleCBj
ZGFkNjFkZjdjOWY5Yzc2ZTY5Mjg5N2MzZGZlMGIwODIzZjkwZTRkLi4yODE1NjFiOTQ4ZTE5YTQx
ZmEwYTJjODBlY2YyZTA5YWYzYThiYzQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZW51bS12YWx1ZXMuanNvbgorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZW51bS12YWx1ZXMuanNvbgpA
QCAtMyw5ICszLDkgQEAKICAgICAiZG9tYWluIjogIlR5cGVEb21haW4iLAogICAgICJ0eXBlcyI6
IFsKICAgICAgICAgewotICAgICAgICAgICAgImlkIjogIlR5cGVEb21haW5FbnVtIiwKKyAgICAg
ICAgICAgICJpZCI6ICJFbnVtIiwKICAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCi0gICAg
ICAgICAgICAiZW51bSI6IFsic2hhcmVkIiwgInJlZCIsICJncmVlbiIsICJibHVlIl0KKyAgICAg
ICAgICAgICJlbnVtIjogWyJzaGFyZWQiLCAiMSIsICIyIl0KICAgICAgICAgfQogICAgIF0KIH0s
CkBAIC0xMywxMCArMTMsMTggQEAKICAgICAiZG9tYWluIjogIkNvbW1hbmREb21haW4iLAogICAg
ICJjb21tYW5kcyI6IFsKICAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAiY29tbWFuZFdp
dGhFbnVtUmV0dXJuVmFsdWUiLAotICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbXSwKKyAgICAg
ICAgICAgICJuYW1lIjogImNvbW1hbmQiLAorICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCisg
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJlbnVtUmVxdWlyZWQiLCAiJHJlZiI6ICJUeXBlRG9t
YWluLkVudW0iIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJlbnVtT3B0aW9uYWwiLCAi
JHJlZiI6ICJUeXBlRG9tYWluLkVudW0iLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJwYXJhbWV0ZXJSZXF1aXJlZCIsICJ0eXBlIjogInN0cmluZyIsICJl
bnVtIjogWyJzaGFyZWQiLCAic2hhcmVkUmVxdWlyZWQiLCAiYmxhY2siXSB9LAorICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAicGFyYW1ldGVyT3B0aW9uYWwiLCAidHlwZSI6ICJzdHJpbmciLCAi
ZW51bSI6IFsic2hhcmVkIiwgInNoYXJlZE9wdGlvbmFsIiwgInJlZCJdLCAib3B0aW9uYWwiOiB0
cnVlIH0KKyAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAicmV0dXJucyI6IFsKLSAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogInJldHVyblZhbHVlIiwgInR5cGUiOiAic3RyaW5nIiwgImVudW0i
OiBbInNoYXJlZCIsICJjeWFuIiwgIm1hZ2VudGEiLCAieWVsbG93Il0gfQorICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAiZW51bVJlcXVpcmVkIiwgIiRyZWYiOiAiVHlwZURvbWFpbi5FbnVtIiB9
LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZW51bU9wdGlvbmFsIiwgIiRyZWYiOiAiVHlw
ZURvbWFpbi5FbnVtIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAicmV0dXJuUmVxdWlyZWQiLCAidHlwZSI6ICJzdHJpbmciLCAiZW51bSI6IFsic2hhcmVk
IiwgInNoYXJlZFJlcXVpcmVkIiwgIndoaXRlIl0gfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1l
IjogInJldHVybk9wdGlvbmFsIiwgInR5cGUiOiAic3RyaW5nIiwgImVudW0iOiBbInNoYXJlZCIs
ICJzaGFyZWRPcHRpb25hbCIsICJibHVlIl0sICJvcHRpb25hbCI6IHRydWUgfQogICAgICAgICAg
ICAgXQogICAgICAgICB9CiAgICAgXQpAQCAtMjUsOSArMzMsMTIgQEAKICAgICAiZG9tYWluIjog
IkV2ZW50RG9tYWluIiwKICAgICAiZXZlbnRzIjogWwogICAgICAgICB7Ci0gICAgICAgICAgICAi
bmFtZSI6ICJldmVudFdpdGhFbnVtUGFyYW1ldGVyIiwKKyAgICAgICAgICAgICJuYW1lIjogImV2
ZW50IiwKICAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWwotICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAicGFyYW1ldGVyIiwgInR5cGUiOiAic3RyaW5nIiwgImVudW0iOiBbInNoYXJlZCIsICJi
bGFjayIsICJ3aGl0ZSJdIH0KKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImVudW1SZXF1aXJl
ZCIsICIkcmVmIjogIlR5cGVEb21haW4uRW51bSIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1l
IjogImVudW1PcHRpb25hbCIsICIkcmVmIjogIlR5cGVEb21haW4uRW51bSIsICJvcHRpb25hbCI6
IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBhcmFtZXRlclJlcXVpcmVkIiwg
InR5cGUiOiAic3RyaW5nIiwgImVudW0iOiBbInNoYXJlZCIsICJzaGFyZWRSZXF1aXJlZCIsICJn
cmV5Il0gfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBhcmFtZXRlck9wdGlvbmFsIiwg
InR5cGUiOiAic3RyaW5nIiwgImVudW0iOiBbInNoYXJlZCIsICJzaGFyZWRPcHRpb25hbCIsICJn
cmVlbiJdLCAib3B0aW9uYWwiOiB0cnVlIH0KICAgICAgICAgICAgIF0KICAgICAgICAgfQogICAg
IF0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9leHBlY3RlZC9jb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2Fi
bGVUeXBlLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2V4cGVjdGVkL2NvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVi
dWdnYWJsZVR5cGUuanNvbi1yZXN1bHQKaW5kZXggZTljMThiZmFlNWIzMmM5NTdiYmVhZDRlMGVi
OWQwNmI2Mzk4YjA2My4uMzJkNGE4ZTgxMTQ2MDFlZmQ2NmVmOTg3OWJkY2E2Y2ZmZTcwYmM4OSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2V4cGVjdGVkL2NvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5
cGUuanNvbi1yZXN1bHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2V4cGVjdGVkL2NvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVi
dWdnYWJsZVR5cGUuanNvbi1yZXN1bHQKQEAgLTcwLDcgKzcwLDcgQEAgSW5zcGVjdG9yQmFja2Vu
ZC5hY3RpdmF0ZURvbWFpbigiRG9tYWluIiwgWyJwYWdlIl0pOwogCiAjaWYgRU5BQkxFKElOU1BF
Q1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBl
cy5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgogI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CiAKQEAgLTg4LDcgKzg4LDcgQEAgcHJp
dmF0ZToKIGNsYXNzIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyIDogcHVibGljIEFs
dGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5BbHRlcm5h
dGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlcigpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBDb21tYW5k
KGxvbmcgY2FsbElkKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIENvbW1hbmQobG9uZyBwcm90b2Nv
bF9jYWxsSWQpID0gMDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgpAQCAtMTMwLDEx
ICsxMzAsMTQgQEAgcHVibGljOgogCiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgog
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Cisj
aW5jbHVkZSA8dHVwbGU+CisjaW5jbHVkZSA8d3RmL0V4cGVjdGVkLmg+CisjaW5jbHVkZSA8d3Rm
L09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFj
ZSBJbnNwZWN0b3IgewogCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKwogCiAjaWYgRU5B
QkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiBjbGFzcyBBbHRlcm5hdGVEb21h
aW5CYWNrZW5kRGlzcGF0Y2hlcjsKQEAgLTE0Miw3ICsxNDUsNyBAQCBjbGFzcyBBbHRlcm5hdGVE
b21haW5CYWNrZW5kRGlzcGF0Y2hlcjsKIAogY2xhc3MgRG9tYWluQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyIHsKIHB1YmxpYzoKLSAgICB2aXJ0dWFsIHZvaWQgQ29tbWFuZChFcnJvclN0cmluZyYp
ID0gMDsKKyAgICB2aXJ0dWFsIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IENvbW1hbmQo
KSA9IDA7CiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB+RG9tYWluQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyKCk7CiB9OwpAQCAtMTUwLDkgKzE1Myw5IEBAIHByb3RlY3RlZDoKIGNsYXNzIERvbWFp
bkJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIFN1cHBsZW1lbnRhbEJhY2tlbmREaXNw
YXRjaGVyIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPERvbWFpbkJhY2tlbmREaXNwYXRjaGVy
PiBjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImLCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXIqKTsKLSAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1l
dGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKSBmaW5hbDsKKyAgICB2b2lkIGRpc3Bh
dGNoKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBjb25zdCBTdHJpbmcmIHByb3RvY29sX21ldGhvZCwg
UmVmPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9tZXNzYWdlKSBmaW5hbDsKIHByaXZhdGU6Ci0g
ICAgdm9pZCBDb21tYW5kKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBh
cmFtZXRlcnMpOworICAgIHZvaWQgQ29tbWFuZChsb25nIHByb3RvY2xfY2FsbElkLCBSZWZQdHI8
SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX3BhcmFtZXRlcnMpOwogI2lmIEVOQUJMRShJTlNQRUNU
T1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogcHVibGljOgogICAgIHZvaWQgc2V0QWx0ZXJuYXRl
RGlzcGF0Y2hlcihBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlciogYWx0ZXJuYXRlRGlz
cGF0Y2hlcikgeyBtX2FsdGVybmF0ZURpc3BhdGNoZXIgPSBhbHRlcm5hdGVEaXNwYXRjaGVyOyB9
CkBAIC0yMDEsOSArMjA0LDcgQEAgcHJpdmF0ZToKICNpbmNsdWRlICJUZXN0QmFja2VuZERpc3Bh
dGNoZXJzLmgiCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJv
dXRlci5oPgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVy
RGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiAjaWYgRU5BQkxF
KElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAjaW5jbHVkZSAiVGVzdEFsdGVybmF0
ZUJhY2tlbmREaXNwYXRjaGVycy5oIgpAQCAtMjI1LDM4ICsyMjYsMzggQEAgRG9tYWluQmFja2Vu
ZERpc3BhdGNoZXI6OkRvbWFpbkJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiBi
YWNrZW5kRGlzcGEKICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJG
b3JEb21haW4oIkRvbWFpbiJfcywgdGhpcyk7CiB9CiAKLXZvaWQgRG9tYWluQmFja2VuZERpc3Bh
dGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVm
PEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKQordm9pZCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6
ZGlzcGF0Y2gobG9uZyBwcm90b2NvbF9jYWxsSWQsIGNvbnN0IFN0cmluZyYgcHJvdG9jb2xfbWV0
aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX21lc3NhZ2UpCiB7CiAgICAgUmVmPERv
bWFpbkJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKIAotICAgIFJlZlB0cjxKU09O
OjpPYmplY3Q+IHBhcmFtZXRlcnM7Ci0gICAgbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3Ms
IHBhcmFtZXRlcnMpOworICAgIGF1dG8gcHJvdG9jb2xfcGFyYW1ldGVycyA9IHByb3RvY29sX21l
c3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9zKTsKIAotICAgIGlmIChtZXRob2QgPT0gIkNvbW1h
bmQiKSB7Ci0gICAgICAgIENvbW1hbmQocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsK
KyAgICBpZiAocHJvdG9jb2xfbWV0aG9kID09ICJDb21tYW5kIikgeworICAgICAgICBDb21tYW5k
KHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9wYXJhbWV0ZXJzKSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2Nv
bEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEb21haW4uIiArIG1l
dGhvZCArICInIHdhcyBub3QgZm91bmQiKTsKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBv
cnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEb21h
aW4uIiArIHByb3RvY29sX21ldGhvZCArICInIHdhcyBub3QgZm91bmQiKTsKIH0KIAotdm9pZCBE
b21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Q29tbWFuZChsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpT
T046Ok9iamVjdD4mJikKK3ZvaWQgRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkNvbW1hbmQobG9u
ZyBwcm90b2NvbF9jYWxsSWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCiB7CiAjaWYgRU5BQkxF
KElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAgICAgaWYgKG1fYWx0ZXJuYXRlRGlz
cGF0Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPkNvbW1hbmQocmVxdWVz
dElkKTsKKyAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5Db21tYW5kKHByb3RvY29sX2Nh
bGxJZCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RP
Ul9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAKLSAgICBFcnJvclN0cmluZyBlcnJvcjsKLSAgICBS
ZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIG1f
YWdlbnQtPkNvbW1hbmQoZXJyb3IpOworICAgIGF1dG8gcmVzdWx0ID0gbV9hZ2VudC0+Q29tbWFu
ZCgpOworICAgIGlmICghcmVzdWx0KSB7CisgICAgICAgIEFTU0VSVCghcmVzdWx0LmVycm9yKCku
aXNFbXB0eSgpKTsKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xF
cnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIHJlc3VsdC5lcnJvcigpKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCi0gICAgICAg
IG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVz
dWx0KSwgZmFsc2UpOwotICAgIGVsc2UKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVw
b3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUo
ZXJyb3IpKTsKKyAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0Ojpj
cmVhdGUoKTsKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocHJvdG9jb2xf
Y2FsbElkLCBXVEZNb3ZlKHByb3RvY29sX2pzb25NZXNzYWdlKSwgZmFsc2UpOwogfQogCiB9IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKQEAgLTI5Nyw2ICsyOTgsNyBAQCB2b2lkIERvbWFpbkJhY2tl
bmREaXNwYXRjaGVyOjpDb21tYW5kKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0
PiYmKQogCiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPHd0Zi9K
U09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewpAQCAtMzQ5LDE2ICszNTEs
MTUgQEAgcHJpdmF0ZToKICNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgogCiAj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNs
dWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCiB2b2lk
IERvbWFpbkZyb250ZW5kRGlzcGF0Y2hlcjo6RXZlbnQoKQogewotICAgIFJlZjxKU09OOjpPYmpl
Y3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBqc29uTWVzc2Fn
ZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJEb21haW4uRXZlbnQiX3MpOworICAgIGF1dG8gcHJv
dG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIHByb3RvY29s
X2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRvbWFpbi5FdmVudCJfcyk7CiAK
LSAgICBtX2Zyb250ZW5kUm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5n
KCkpOworICAgIG1fZnJvbnRlbmRSb3V0ZXIuc2VuZEV2ZW50KHByb3RvY29sX2pzb25NZXNzYWdl
LT50b0pTT05TdHJpbmcoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgpAQCAtMzk4
LDcgKzM5OSw5IEBAIHZvaWQgRG9tYWluRnJvbnRlbmREaXNwYXRjaGVyOjpFdmVudCgpCiAjcHJh
Z21hIG9uY2UKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlw
ZXMuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9KU09OVmFs
dWVzLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC00NTIsOCArNDU1LDcgQEAg
bmFtZXNwYWNlIFByb3RvY29sIHsKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJUZXN0
UHJvdG9jb2xPYmplY3RzLmgiCiAKLSNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KIAogbmFt
ZXNwYWNlIEluc3BlY3RvciB7CiAKQEAgLTUwOSw3ICs1MTEsNyBAQCBjbGFzcyBPYmpDSW5zcGVj
dG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgQWx0ZXJuYXRlRG9tYWlu
QmFja2VuZAogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIE9iakNJ
bnNwZWN0b3JEb21haW5CYWNrZW5kRGlzcGF0Y2hlcihpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21h
aW5IYW5kbGVyPiBoYW5kbGVyKSB7IG1fZGVsZWdhdGUgPSBoYW5kbGVyOyB9Ci0gICAgdm9pZCBD
b21tYW5kKGxvbmcgcmVxdWVzdElkKSBmaW5hbDsKKyAgICB2b2lkIENvbW1hbmQobG9uZyBwcm90
b2NvbF9jYWxsSWQpIGZpbmFsOwogcHJpdmF0ZToKICAgICBSZXRhaW5QdHI8aWQ8VGVzdFByb3Rv
Y29sRG9tYWluRG9tYWluSGFuZGxlcj4+IG1fZGVsZWdhdGU7CiB9OwpAQCAtNTU3LDIxICs1NTks
MjIgQEAgcHJpdmF0ZToKIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKLXZvaWQgT2JqQ0luc3Bl
Y3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpDb21tYW5kKGxvbmcgcmVxdWVzdElkKQordm9p
ZCBPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkNvbW1hbmQobG9uZyBwcm90
b2NvbF9jYWxsSWQpCiB7CiAgICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6
QHNlbGVjdG9yKENvbW1hbmRXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6KV0pIHsK
LSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0
SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEb21haW4uQ29tbWFuZCcg
d2FzIG5vdCBmb3VuZCJfcyk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFBy
b3RvY29sRXJyb3IocHJvdG9jb2xfY2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90
Rm91bmQsICInRG9tYWluLkNvbW1hbmQnIHdhcyBub3QgZm91bmQiX3MpOwogICAgICAgICBiYWNr
ZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCiAgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7Ci0gICAg
ICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBC
YWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxsSWQsIEJhY2tlbmRE
aXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwogICAgICAgICBiYWNrZW5kRGlzcGF0Y2hl
cigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgIH07CiAKICAgICBpZCBzdWNjZXNzQ2FsbGJh
Y2sgPSBeewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVz
dElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7CisgICAgICAgIGF1dG8gcHJvdG9j
b2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBiYWNrZW5k
RGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocHJvdG9jb2xfY2FsbElkLCBXVEZNb3ZlKHByb3Rv
Y29sX2pzb25NZXNzYWdlKSwgZmFsc2UpOwogICAgIH07CiAKICAgICBbbV9kZWxlZ2F0ZSBDb21t
YW5kV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vz
c0NhbGxiYWNrXTsKQEAgLTc3Myw5ICs3NzYsOSBAQCB1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9y
OwogewogICAgIGNvbnN0IEZyb250ZW5kUm91dGVyJiByb3V0ZXIgPSBfY29udHJvbGxlci0+ZnJv
bnRlbmRSb3V0ZXIoKTsKIAotICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNP
Tjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2Qi
X3MsICJEb21haW4uRXZlbnQiX3MpOwotICAgIHJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2Ut
PnRvSlNPTlN0cmluZygpKTsKKyAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6
T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJt
ZXRob2QiX3MsICJEb21haW4uRXZlbnQiX3MpOworICAgIHJvdXRlci5zZW5kRXZlbnQocHJvdG9j
b2xfanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKIH0KIAogQGVuZApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2Nv
bW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2NvbW1hbmRzLXdpdGgtYXN5
bmMtYXR0cmlidXRlLmpzb24tcmVzdWx0CmluZGV4IGQxYzY5YjAzMWNkYjQ3MWQxOGEyZTQ5Nzhm
MjEyN2IwZWNkNDdjNTIuLjRjZTZmYzNkMjEzNmE0ZWI0YWIyMjQ2NTFhOWJmYjE2NWU0NTMwZjYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9leHBlY3RlZC9jb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uLXJlc3VsdAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQv
Y29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbi1yZXN1bHQKQEAgLTczLDcgKzczLDcg
QEAgSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiRGF0YWJhc2UiLCBudWxsKTsKIAog
I2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogCi0jaW5jbHVkZSAi
VGVzdFByb3RvY29sVHlwZXMuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KICNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgogCkBAIC05
MSwxMCArOTEsMTAgQEAgcHJpdmF0ZToKIGNsYXNzIEFsdGVybmF0ZURhdGFiYXNlQmFja2VuZERp
c3BhdGNoZXIgOiBwdWJsaWMgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewogcHVibGljOgog
ICAgIHZpcnR1YWwgfkFsdGVybmF0ZURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIoKSB7IH0KLSAg
ICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIGNh
bGxJZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnkpID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyBj
YWxsSWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5KSA9IDA7Ci0g
ICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVTUUxTeW5jKGxvbmcgY2FsbElkLCBpbnQgaW5fZGF0YWJh
c2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBleGVj
dXRlU1FMQXN5bmMobG9uZyBjYWxsSWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcm
IGluX3F1ZXJ5KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxS
ZXR1cm5WYWx1ZXMobG9uZyBwcm90b2NvbF9jYWxsSWQsIGludCBkYXRhYmFzZUlkLCBjb25zdCBT
dHJpbmcmIHF1ZXJ5KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVTUUxBc3luY09wdGlv
bmFsUmV0dXJuVmFsdWVzKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBpbnQgZGF0YWJhc2VJZCwgY29u
c3QgU3RyaW5nJiBxdWVyeSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU1FMU3luYyhs
b25nIHByb3RvY29sX2NhbGxJZCwgaW50IGRhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgcXVlcnkp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNRTEFzeW5jKGxvbmcgcHJvdG9jb2xfY2Fs
bElkLCBpbnQgZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBxdWVyeSkgPSAwOwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgSW5zcGVjdG9yCkBAIC0xMzYsMTEgKzEzNiwxNCBAQCBwdWJsaWM6CiAKICNp
bmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx0dXBsZT4KKyNpbmNsdWRl
IDx3dGYvRXhwZWN0ZWQuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKLXR5cGVkZWYg
U3RyaW5nIEVycm9yU3RyaW5nOworCiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9E
SVNQQVRDSEVSUykKIGNsYXNzIEFsdGVybmF0ZURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI7CkBA
IC0xNDgsMjcgKzE1MSwyMCBAQCBjbGFzcyBBbHRlcm5hdGVEYXRhYmFzZUJhY2tlbmREaXNwYXRj
aGVyOwogCiBjbGFzcyBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7CiBwdWJsaWM6
Ci0gICAgLy8gTmFtZWQgYWZ0ZXIgcGFyYW1ldGVyICdwcmludENvbG9yJyB3aGlsZSBnZW5lcmF0
aW5nIGNvbW1hbmQvZXZlbnQgZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcy4KLSAg
ICBlbnVtIGNsYXNzIFByaW50Q29sb3IgewotICAgICAgICBDeWFuID0gMywKLSAgICAgICAgTWFn
ZW50YSA9IDQsCi0gICAgICAgIFllbGxvdyA9IDUsCi0gICAgICAgIEJsYWNrID0gNiwKLSAgICB9
OyAvLyBlbnVtIGNsYXNzIFByaW50Q29sb3IKLSAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNRTFN5
bmNPcHRpb25hbFJldHVyblZhbHVlcyhFcnJvclN0cmluZyYsIGludCBpbl9kYXRhYmFzZUlkLCBj
b25zdCBTdHJpbmcmIGluX3F1ZXJ5LCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiYgb3B0
X291dF9jb2x1bW5OYW1lcywgT3B0aW9uYWw8U3RyaW5nPiYgb3B0X291dF9ub3RlcywgT3B0aW9u
YWw8ZG91YmxlPiYgb3B0X291dF90aW1lc3RhbXAsIE9wdGlvbmFsPEpTT046Ok9iamVjdD4mIG9w
dF9vdXRfdmFsdWVzLCBPcHRpb25hbDxKU09OOjpWYWx1ZT4mIG9wdF9vdXRfcGF5bG9hZCwgT3B0
aW9uYWw8aW50PiYgb3B0X291dF9kYXRhYmFzZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6RGF0YWJhc2U6OkVycm9yPiYgb3B0X291dF9zcWxFcnJvciwgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMqIG9wdF9vdXRfc2NyZWVuQ29sb3IsIFJlZlB0cjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiYgb3B0X291dF9hbHRlcm5h
dGVDb2xvcnMsIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQcmludENvbG9yKiBv
cHRfb3V0X3ByaW50Q29sb3IpID0gMDsKKyAgICB2aXJ0dWFsIFByb3RvY29sOjpFcnJvclN0cmlu
Z09yPHN0ZDo6dHVwbGU8UmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4gLyogb3B0X2NvbHVt
bk5hbWVzICovLCBTdHJpbmcgLyogb3B0X25vdGVzICovLCBPcHRpb25hbDxkb3VibGU+IC8qIG9w
dF90aW1lc3RhbXAgKi8sIFJlZlB0cjxKU09OOjpPYmplY3Q+IC8qIG9wdF92YWx1ZXMgKi8sIFJl
ZlB0cjxKU09OOjpWYWx1ZT4gLyogb3B0X3BheWxvYWQgKi8sIE9wdGlvbmFsPGludD4gLyogb3B0
X2RhdGFiYXNlSWQgKi8sIFJlZlB0cjxQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiAvKiBvcHRf
c3FsRXJyb3IgKi8sIE9wdGlvbmFsPFByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4g
Lyogb3B0X3NjcmVlbkNvbG9yICovLCBSZWZQdHI8UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxp
c3Q+IC8qIG9wdF9hbHRlcm5hdGVDb2xvcnMgKi8sIFN0cmluZyAvKiBvcHRfcHJpbnRDb2xvciAq
Lz4+IGV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMoaW50IGRhdGFiYXNlSWQsIGNv
bnN0IFN0cmluZyYgcXVlcnkpID0gMDsKICAgICBjbGFzcyBFeGVjdXRlU1FMQXN5bmNPcHRpb25h
bFJldHVyblZhbHVlc0NhbGxiYWNrIDogcHVibGljIEJhY2tlbmREaXNwYXRjaGVyOjpDYWxsYmFj
a0Jhc2UgewogICAgIHB1YmxpYzoKICAgICAgICAgRXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1
cm5WYWx1ZXNDYWxsYmFjayhSZWY8QmFja2VuZERpc3BhdGNoZXI+JiYsIGludCBpZCk7Ci0gICAg
ICAgIHZvaWQgc2VuZFN1Y2Nlc3MoUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4mJiBjb2x1
bW5OYW1lcywgT3B0aW9uYWw8U3RyaW5nPiYgbm90ZXMsIE9wdGlvbmFsPGRvdWJsZT4mIHRpbWVz
dGFtcCwgT3B0aW9uYWw8SlNPTjo6T2JqZWN0PiYgdmFsdWVzLCBPcHRpb25hbDxKU09OOjpWYWx1
ZT4mIHBheWxvYWQsIE9wdGlvbmFsPGludD4mIGRhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+JiYgc3FsRXJyb3IsIE9wdGlvbmFsPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPiBzY3JlZW5Db2xvciwgUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+JiYgYWx0ZXJuYXRlQ29s
b3JzLCBPcHRpb25hbDxEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UHJpbnRDb2xv
cj4gcHJpbnRDb2xvcik7CisgICAgICAgIHZvaWQgc2VuZFN1Y2Nlc3MoUmVmUHRyPEpTT046OkFy
cmF5T2Y8U3RyaW5nPj4mJiBvcHRfY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgb3B0X25vdGVz
LCBPcHRpb25hbDxkb3VibGU+JiYgb3B0X3RpbWVzdGFtcCwgUmVmUHRyPEpTT046Ok9iamVjdD4m
JiBvcHRfdmFsdWVzLCBSZWZQdHI8SlNPTjo6VmFsdWU+JiYgb3B0X3BheWxvYWQsIE9wdGlvbmFs
PGludD4mJiBvcHRfZGF0YWJhc2VJZCwgUmVmUHRyPFByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+
JiYgb3B0X3NxbEVycm9yLCBPcHRpb25hbDxQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xv
cnM+JiYgb3B0X3NjcmVlbkNvbG9yLCBSZWZQdHI8UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxp
c3Q+JiYgb3B0X2FsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nJiBvcHRfcHJpbnRDb2xvcik7
CiAgICAgfTsKLSAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5W
YWx1ZXMoaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnksIFJlZjxFeGVj
dXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc0NhbGxiYWNrPiYmIGNhbGxiYWNrKSA9IDA7
Ci0gICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVTUUxTeW5jKEVycm9yU3RyaW5nJiwgaW50IGluX2Rh
dGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnksIFJlZlB0cjxKU09OOjpBcnJheU9mPFN0
cmluZz4+JiBvdXRfY29sdW1uTmFtZXMsIFN0cmluZyogb3V0X25vdGVzLCBkb3VibGUqIG91dF90
aW1lc3RhbXAsIEpTT046Ok9iamVjdCogb3V0X3ZhbHVlcywgSlNPTjo6VmFsdWUqIG91dF9wYXls
b2FkLCBpbnQqIG91dF9kYXRhYmFzZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0
YWJhc2U6OkVycm9yPiYgb3V0X3NxbEVycm9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
RGF0YWJhc2U6OkNvbG9yTGlzdD4mIG91dF9hbHRlcm5hdGVDb2xvcnMsIEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzKiBvdXRfc2NyZWVuQ29sb3IsIERhdGFiYXNl
QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQcmludENvbG9yKiBvdXRfcHJpbnRDb2xvcikgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhp
bnQgZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBxdWVyeSwgUmVmPEV4ZWN1dGVTUUxBc3luY09w
dGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJhY2s+JiYpID0gMDsKKyAgICB2aXJ0dWFsIFByb3RvY29s
OjpFcnJvclN0cmluZ09yPHN0ZDo6dHVwbGU8UmVmPEpTT046OkFycmF5T2Y8U3RyaW5nPj4gLyog
Y29sdW1uTmFtZXMgKi8sIFN0cmluZyAvKiBub3RlcyAqLywgZG91YmxlIC8qIHRpbWVzdGFtcCAq
LywgUmVmPEpTT046Ok9iamVjdD4gLyogdmFsdWVzICovLCBSZWY8SlNPTjo6VmFsdWU+IC8qIHBh
eWxvYWQgKi8sIGludCAvKiBkYXRhYmFzZUlkICovLCBSZWY8UHJvdG9jb2w6OkRhdGFiYXNlOjpF
cnJvcj4gLyogc3FsRXJyb3IgKi8sIFJlZjxQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4g
LyogYWx0ZXJuYXRlQ29sb3JzICovLCBQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMg
Lyogc2NyZWVuQ29sb3IgKi8sIFN0cmluZyAvKiBwcmludENvbG9yICovPj4gZXhlY3V0ZVNRTFN5
bmMoaW50IGRhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgcXVlcnkpID0gMDsKICAgICBjbGFzcyBF
eGVjdXRlU1FMQXN5bmNDYWxsYmFjayA6IHB1YmxpYyBCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJh
Y2tCYXNlIHsKICAgICBwdWJsaWM6CiAgICAgICAgIEV4ZWN1dGVTUUxBc3luY0NhbGxiYWNrKFJl
ZjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiwgaW50IGlkKTsKLSAgICAgICAgdm9pZCBzZW5kU3VjY2Vz
cyhSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiYmIGNvbHVtbk5hbWVzLCBjb25zdCBTdHJp
bmcmIG5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBKU09OOjpPYmplY3QgdmFsdWVzLCBKU09OOjpW
YWx1ZSBwYXlsb2FkLCBpbnQgZGF0YWJhc2VJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRhdGFiYXNlOjpFcnJvcj4mJiBzcWxFcnJvciwgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJh
c2U6OlByaW1hcnlDb2xvcnMgc2NyZWVuQ29sb3IsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29s
OjpEYXRhYmFzZTo6Q29sb3JMaXN0PiYmIGFsdGVybmF0ZUNvbG9ycywgRGF0YWJhc2VCYWNrZW5k
RGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3IgcHJpbnRDb2xvcik7CisgICAgICAgIHZvaWQg
c2VuZFN1Y2Nlc3MoUmVmPEpTT046OkFycmF5T2Y8U3RyaW5nPj4mJiBjb2x1bW5OYW1lcywgY29u
c3QgU3RyaW5nJiBub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgUmVmPEpTT046Ok9iamVjdD4mJiB2
YWx1ZXMsIFJlZjxKU09OOjpWYWx1ZT4mJiBwYXlsb2FkLCBpbnQgZGF0YWJhc2VJZCwgUmVmPFBy
b3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+JiYgc3FsRXJyb3IsIFByb3RvY29sOjpEYXRhYmFzZTo6
UHJpbWFyeUNvbG9ycyBzY3JlZW5Db2xvciwgUmVmPFByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JM
aXN0PiYmIGFsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nJiBwcmludENvbG9yKTsKICAgICB9
OwotICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU1FMQXN5bmMoaW50IGluX2RhdGFiYXNlSWQsIGNv
bnN0IFN0cmluZyYgaW5fcXVlcnksIFJlZjxFeGVjdXRlU1FMQXN5bmNDYWxsYmFjaz4mJiBjYWxs
YmFjaykgPSAwOworICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU1FMQXN5bmMoaW50IGRhdGFiYXNl
SWQsIGNvbnN0IFN0cmluZyYgcXVlcnksIFJlZjxFeGVjdXRlU1FMQXN5bmNDYWxsYmFjaz4mJikg
PSAwOwogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgfkRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyKCk7CiB9OwpAQCAtMTc2LDEyICsxNzIsMTIgQEAgcHJvdGVjdGVkOgogY2xhc3MgRGF0
YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5k
RGlzcGF0Y2hlciB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVyPiBjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImLCBEYXRhYmFzZUJhY2tlbmREaXNwYXRj
aGVySGFuZGxlciopOwotICAgIHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0
cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpIGZpbmFsOworICAgIHZv
aWQgZGlzcGF0Y2gobG9uZyBwcm90b2NvbF9jYWxsSWQsIGNvbnN0IFN0cmluZyYgcHJvdG9jb2xf
bWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX21lc3NhZ2UpIGZpbmFsOwogcHJp
dmF0ZToKLSAgICB2b2lkIGV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyBy
ZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7Ci0gICAgdm9pZCBl
eGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIHJlcXVlc3RJZCwgUmVmUHRy
PEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKLSAgICB2b2lkIGV4ZWN1dGVTUUxTeW5jKGxv
bmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOwotICAgIHZv
aWQgZXhlY3V0ZVNRTEFzeW5jKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYm
IHBhcmFtZXRlcnMpOworICAgIHZvaWQgZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVl
cyhsb25nIHByb3RvY2xfY2FsbElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX3Bh
cmFtZXRlcnMpOworICAgIHZvaWQgZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMo
bG9uZyBwcm90b2NsX2NhbGxJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9wYXJh
bWV0ZXJzKTsKKyAgICB2b2lkIGV4ZWN1dGVTUUxTeW5jKGxvbmcgcHJvdG9jbF9jYWxsSWQsIFJl
ZlB0cjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfcGFyYW1ldGVycyk7CisgICAgdm9pZCBleGVj
dXRlU1FMQXN5bmMobG9uZyBwcm90b2NsX2NhbGxJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBw
cm90b2NvbF9wYXJhbWV0ZXJzKTsKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQ
QVRDSEVSUykKIHB1YmxpYzoKICAgICB2b2lkIHNldEFsdGVybmF0ZURpc3BhdGNoZXIoQWx0ZXJu
YXRlRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciogYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeyBtX2Fs
dGVybmF0ZURpc3BhdGNoZXIgPSBhbHRlcm5hdGVEaXNwYXRjaGVyOyB9CkBAIC0yMzAsOSArMjI2
LDcgQEAgcHJpdmF0ZToKICNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCiAKICNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1
ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0j
aW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRF
Uk5BVEVfRElTUEFUQ0hFUlMpCiAjaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRj
aGVycy5oIgpAQCAtMjU0LDM3ICsyNDgsMzYgQEAgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6
RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZEQKICAg
ICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4oIkRhdGFi
YXNlIl9zLCB0aGlzKTsKIH0KIAotdm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpkaXNw
YXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmpl
Y3Q+JiYgbWVzc2FnZSkKK3ZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2go
bG9uZyBwcm90b2NvbF9jYWxsSWQsIGNvbnN0IFN0cmluZyYgcHJvdG9jb2xfbWV0aG9kLCBSZWY8
SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX21lc3NhZ2UpCiB7CiAgICAgUmVmPERhdGFiYXNlQmFj
a2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOwogCi0gICAgUmVmUHRyPEpTT046Ok9iamVj
dD4gcGFyYW1ldGVyczsKLSAgICBtZXNzYWdlLT5nZXRPYmplY3QoInBhcmFtcyJfcywgcGFyYW1l
dGVycyk7CisgICAgYXV0byBwcm90b2NvbF9wYXJhbWV0ZXJzID0gcHJvdG9jb2xfbWVzc2FnZS0+
Z2V0T2JqZWN0KCJwYXJhbXMiX3MpOwogCi0gICAgaWYgKG1ldGhvZCA9PSAiZXhlY3V0ZVNRTFN5
bmNPcHRpb25hbFJldHVyblZhbHVlcyIpIHsKLSAgICAgICAgZXhlY3V0ZVNRTFN5bmNPcHRpb25h
bFJldHVyblZhbHVlcyhyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykpOworICAgIGlmIChw
cm90b2NvbF9tZXRob2QgPT0gImV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMiKSB7
CisgICAgICAgIGV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMocHJvdG9jb2xfY2Fs
bElkLCBXVEZNb3ZlKHByb3RvY29sX3BhcmFtZXRlcnMpKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KLSAgICBpZiAobWV0aG9kID09ICJleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVl
cyIpIHsKLSAgICAgICAgZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMocmVxdWVz
dElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKKyAgICBpZiAocHJvdG9jb2xfbWV0aG9kID09ICJl
eGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyIpIHsKKyAgICAgICAgZXhlY3V0ZVNR
TEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMocHJvdG9jb2xfY2FsbElkLCBXVEZNb3ZlKHByb3Rv
Y29sX3BhcmFtZXRlcnMpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAobWV0aG9k
ID09ICJleGVjdXRlU1FMU3luYyIpIHsKLSAgICAgICAgZXhlY3V0ZVNRTFN5bmMocmVxdWVzdElk
LCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKKyAgICBpZiAocHJvdG9jb2xfbWV0aG9kID09ICJleGVj
dXRlU1FMU3luYyIpIHsKKyAgICAgICAgZXhlY3V0ZVNRTFN5bmMocHJvdG9jb2xfY2FsbElkLCBX
VEZNb3ZlKHByb3RvY29sX3BhcmFtZXRlcnMpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAg
ICBpZiAobWV0aG9kID09ICJleGVjdXRlU1FMQXN5bmMiKSB7Ci0gICAgICAgIGV4ZWN1dGVTUUxB
c3luYyhyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykpOworICAgIGlmIChwcm90b2NvbF9t
ZXRob2QgPT0gImV4ZWN1dGVTUUxBc3luYyIpIHsKKyAgICAgICAgZXhlY3V0ZVNRTEFzeW5jKHBy
b3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9wYXJhbWV0ZXJzKSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVy
cm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEYXRhYmFzZS4iICsgbWV0
aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9y
dFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RhdGFi
YXNlLiIgKyBwcm90b2NvbF9tZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7CiB9CiAKLXZvaWQg
RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZh
bHVlcyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKQor
dm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0
dXJuVmFsdWVzKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBy
b3RvY29sX3BhcmFtZXRlcnMpCiB7Ci0gICAgaW50IGluX2RhdGFiYXNlSWQgPSBtX2JhY2tlbmRE
aXNwYXRjaGVyLT5nZXRJbnRlZ2VyKHBhcmFtZXRlcnMuZ2V0KCksICJkYXRhYmFzZUlkIl9zLCBu
dWxscHRyKTsKLSAgICBTdHJpbmcgaW5fcXVlcnkgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRT
dHJpbmcocGFyYW1ldGVycy5nZXQoKSwgInF1ZXJ5Il9zLCBudWxscHRyKTsKKyAgICBhdXRvIGlu
X2RhdGFiYXNlSWQgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRJbnRlZ2VyKHByb3RvY29sX3Bh
cmFtZXRlcnMuZ2V0KCksICJkYXRhYmFzZUlkIl9zLCB0cnVlKTsKKyAgICBhdXRvIGluX3F1ZXJ5
ID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3RyaW5nKHByb3RvY29sX3BhcmFtZXRlcnMuZ2V0
KCksICJxdWVyeSJfcywgdHJ1ZSk7CiAgICAgaWYgKG1fYmFja2VuZERpc3BhdGNoZXItPmhhc1By
b3RvY29sRXJyb3JzKCkpIHsKICAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJv
dG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFtcywgIlNvbWUgYXJndW1l
bnRzIG9mIG1ldGhvZCAnRGF0YWJhc2UuZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVl
cycgY2FuJ3QgYmUgcHJvY2Vzc2VkIl9zKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMjkyLDg1ICsy
ODUsNzYgQEAgdm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FMU3luY09w
dGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgcmVxdWVzdEkKIAogI2lmIEVOQUJMRShJTlNQRUNUT1Jf
QUxURVJOQVRFX0RJU1BBVENIRVJTKQogICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsK
LSAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5leGVjdXRlU1FMU3luY09wdGlvbmFsUmV0
dXJuVmFsdWVzKHJlcXVlc3RJZCwgaW5fZGF0YWJhc2VJZCwgaW5fcXVlcnkpOworICAgICAgICBt
X2FsdGVybmF0ZURpc3BhdGNoZXItPmV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMo
cHJvdG9jb2xfY2FsbElkLCAqaW5fZGF0YWJhc2VJZCwgaW5fcXVlcnkpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENI
RVJTKQogCi0gICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4gcmVz
dWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBSZWZQdHI8SlNPTjo6QXJyYXlPZjxT
dHJpbmc+PiBvdXRfY29sdW1uTmFtZXM7Ci0gICAgT3B0aW9uYWw8U3RyaW5nPiBvdXRfbm90ZXM7
Ci0gICAgT3B0aW9uYWw8ZG91YmxlPiBvdXRfdGltZXN0YW1wOwotICAgIE9wdGlvbmFsPEpTT046
Ok9iamVjdD4gb3V0X3ZhbHVlczsKLSAgICBPcHRpb25hbDxKU09OOjpWYWx1ZT4gb3V0X3BheWxv
YWQ7Ci0gICAgT3B0aW9uYWw8aW50PiBvdXRfZGF0YWJhc2VJZDsKLSAgICBSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiBvdXRfc3FsRXJyb3I7Ci0gICAgSW5zcGVj
dG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMgb3V0X3NjcmVlbkNvbG9yOwot
ICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiBvdXRf
YWx0ZXJuYXRlQ29sb3JzOwotICAgIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQ
cmludENvbG9yIG91dF9wcmludENvbG9yOwotICAgIG1fYWdlbnQtPmV4ZWN1dGVTUUxTeW5jT3B0
aW9uYWxSZXR1cm5WYWx1ZXMoZXJyb3IsIGluX2RhdGFiYXNlSWQsIGluX3F1ZXJ5LCBvdXRfY29s
dW1uTmFtZXMsIG91dF9ub3Rlcywgb3V0X3RpbWVzdGFtcCwgb3V0X3ZhbHVlcywgb3V0X3BheWxv
YWQsIG91dF9kYXRhYmFzZUlkLCBvdXRfc3FsRXJyb3IsIG91dF9zY3JlZW5Db2xvciwgb3V0X2Fs
dGVybmF0ZUNvbG9ycywgb3V0X3ByaW50Q29sb3IpOwotCi0gICAgaWYgKCFlcnJvci5sZW5ndGgo
KSkgewotICAgICAgICBpZiAob3V0X2NvbHVtbk5hbWVzKQotICAgICAgICAgICAgcmVzdWx0LT5z
ZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIG91dF9jb2x1bW5OYW1lcyk7Ci0gICAgICAgIGlmIChv
dXRfbm90ZXMuaGFzVmFsdWUoKSkKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJub3Rl
cyJfcywgKm91dF9ub3Rlcyk7Ci0gICAgICAgIGlmIChvdXRfdGltZXN0YW1wLmhhc1ZhbHVlKCkp
Ci0gICAgICAgICAgICByZXN1bHQtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCAqb3V0X3RpbWVz
dGFtcCk7Ci0gICAgICAgIGlmIChvdXRfdmFsdWVzLmhhc1ZhbHVlKCkpCi0gICAgICAgICAgICBy
ZXN1bHQtPnNldE9iamVjdCgidmFsdWVzIl9zLCAqb3V0X3ZhbHVlcyk7Ci0gICAgICAgIGlmIChv
dXRfcGF5bG9hZC5oYXNWYWx1ZSgpKQotICAgICAgICAgICAgcmVzdWx0LT5zZXRWYWx1ZSgicGF5
bG9hZCJfcywgKm91dF9wYXlsb2FkKTsKLSAgICAgICAgaWYgKG91dF9kYXRhYmFzZUlkLmhhc1Zh
bHVlKCkpCi0gICAgICAgICAgICByZXN1bHQtPnNldEludGVnZXIoImRhdGFiYXNlSWQiX3MsICpv
dXRfZGF0YWJhc2VJZCk7Ci0gICAgICAgIGlmIChvdXRfc3FsRXJyb3IpCi0gICAgICAgICAgICBy
ZXN1bHQtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIG91dF9zcWxFcnJvcik7Ci0gICAgICAgIGlm
IChvdXRfc2NyZWVuQ29sb3IuaGFzVmFsdWUoKSkKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0U3Ry
aW5nKCJzY3JlZW5Db2xvciJfcywgKm91dF9zY3JlZW5Db2xvcik7Ci0gICAgICAgIGlmIChvdXRf
YWx0ZXJuYXRlQ29sb3JzKQotICAgICAgICAgICAgcmVzdWx0LT5zZXRBcnJheSgiYWx0ZXJuYXRl
Q29sb3JzIl9zLCBvdXRfYWx0ZXJuYXRlQ29sb3JzKTsKLSAgICAgICAgaWYgKG91dF9wcmludENv
bG9yLmhhc1ZhbHVlKCkpCi0gICAgICAgICAgICByZXN1bHQtPnNldFN0cmluZygicHJpbnRDb2xv
ciJfcywgKm91dF9wcmludENvbG9yKTsKKyAgICBhdXRvIHJlc3VsdCA9IG1fYWdlbnQtPmV4ZWN1
dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMoKmluX2RhdGFiYXNlSWQsIGluX3F1ZXJ5KTsK
KyAgICBpZiAoIXJlc3VsdCkgeworICAgICAgICBBU1NFUlQoIXJlc3VsdC5lcnJvcigpLmlzRW1w
dHkoKSk7CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3Io
QmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCByZXN1bHQuZXJyb3IoKSk7CisgICAgICAg
IHJldHVybjsKICAgICB9Ci0gICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKLSAgICAgICAgbV9iYWNr
ZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBm
YWxzZSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90
b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikp
OworCisgICAgYXV0byBbb3V0X29wdF9jb2x1bW5OYW1lcywgb3V0X29wdF9ub3Rlcywgb3V0X29w
dF90aW1lc3RhbXAsIG91dF9vcHRfdmFsdWVzLCBvdXRfb3B0X3BheWxvYWQsIG91dF9vcHRfZGF0
YWJhc2VJZCwgb3V0X29wdF9zcWxFcnJvciwgb3V0X29wdF9zY3JlZW5Db2xvciwgb3V0X29wdF9h
bHRlcm5hdGVDb2xvcnMsIG91dF9vcHRfcHJpbnRDb2xvcl0gPSBXVEZNb3ZlKHJlc3VsdC52YWx1
ZSgpKTsKKworICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNy
ZWF0ZSgpOworICAgIGlmICghIW91dF9vcHRfY29sdW1uTmFtZXMpCisgICAgICAgIHByb3RvY29s
X2pzb25NZXNzYWdlLT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIG91dF9vcHRfY29sdW1uTmFt
ZXMucmVsZWFzZU5vbk51bGwoKSk7CisgICAgaWYgKCEhb3V0X29wdF9ub3RlcykKKyAgICAgICAg
cHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygibm90ZXMiX3MsIG91dF9vcHRfbm90ZXMp
OworICAgIGlmICghIW91dF9vcHRfdGltZXN0YW1wKQorICAgICAgICBwcm90b2NvbF9qc29uTWVz
c2FnZS0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsICpvdXRfb3B0X3RpbWVzdGFtcCk7CisgICAg
aWYgKCEhb3V0X29wdF92YWx1ZXMpCisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRP
YmplY3QoInZhbHVlcyJfcywgb3V0X29wdF92YWx1ZXMucmVsZWFzZU5vbk51bGwoKSk7CisgICAg
aWYgKCEhb3V0X29wdF9wYXlsb2FkKQorICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0
VmFsdWUoInBheWxvYWQiX3MsIG91dF9vcHRfcGF5bG9hZC5yZWxlYXNlTm9uTnVsbCgpKTsKKyAg
ICBpZiAoISFvdXRfb3B0X2RhdGFiYXNlSWQpCisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdl
LT5zZXRJbnRlZ2VyKCJkYXRhYmFzZUlkIl9zLCAqb3V0X29wdF9kYXRhYmFzZUlkKTsKKyAgICBp
ZiAoISFvdXRfb3B0X3NxbEVycm9yKQorICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0
T2JqZWN0KCJzcWxFcnJvciJfcywgb3V0X29wdF9zcWxFcnJvci5yZWxlYXNlTm9uTnVsbCgpKTsK
KyAgICBpZiAoISFvdXRfb3B0X3NjcmVlbkNvbG9yKQorICAgICAgICBwcm90b2NvbF9qc29uTWVz
c2FnZS0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgUHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpn
ZXRFbnVtQ29uc3RhbnRWYWx1ZSgqb3V0X29wdF9zY3JlZW5Db2xvcikpOworICAgIGlmICghIW91
dF9vcHRfYWx0ZXJuYXRlQ29sb3JzKQorICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0
QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywgb3V0X29wdF9hbHRlcm5hdGVDb2xvcnMucmVsZWFz
ZU5vbk51bGwoKSk7CisgICAgaWYgKCEhb3V0X29wdF9wcmludENvbG9yKQorICAgICAgICBwcm90
b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCBvdXRfb3B0X3ByaW50
Q29sb3IpOworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShwcm90b2NvbF9j
YWxsSWQsIFdURk1vdmUocHJvdG9jb2xfanNvbk1lc3NhZ2UpLCBmYWxzZSk7CiB9CiAKIERhdGFi
YXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVy
blZhbHVlc0NhbGxiYWNrOjpFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc0NhbGxi
YWNrKFJlZjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBiYWNrZW5kRGlzcGF0Y2hlciwgaW50IGlkKSA6
IEJhY2tlbmREaXNwYXRjaGVyOjpDYWxsYmFja0Jhc2UoV1RGTW92ZShiYWNrZW5kRGlzcGF0Y2hl
ciksIGlkKSB7IH0KIAotdm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhl
Y3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNDYWxsYmFjazo6c2VuZFN1Y2Nlc3MoUmVm
UHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4mJiBjb2x1bW5OYW1lcywgT3B0aW9uYWw8U3RyaW5n
PiYgbm90ZXMsIE9wdGlvbmFsPGRvdWJsZT4mIHRpbWVzdGFtcCwgT3B0aW9uYWw8SlNPTjo6T2Jq
ZWN0PiYgdmFsdWVzLCBPcHRpb25hbDxKU09OOjpWYWx1ZT4mIHBheWxvYWQsIE9wdGlvbmFsPGlu
dD4mIGRhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJy
b3I+JiYgc3FsRXJyb3IsIE9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQ
cmltYXJ5Q29sb3JzPiBzY3JlZW5Db2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRh
dGFiYXNlOjpDb2xvckxpc3Q+JiYgYWx0ZXJuYXRlQ29sb3JzLCBPcHRpb25hbDxEYXRhYmFzZUJh
Y2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UHJpbnRDb2xvcj4gcHJpbnRDb2xvcikKK3ZvaWQgRGF0
YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0
dXJuVmFsdWVzQ2FsbGJhY2s6OnNlbmRTdWNjZXNzKFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmlu
Zz4+JiYgb3B0X2NvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIG9wdF9ub3RlcywgT3B0aW9uYWw8
ZG91YmxlPiYmIG9wdF90aW1lc3RhbXAsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgb3B0X3ZhbHVl
cywgUmVmUHRyPEpTT046OlZhbHVlPiYmIG9wdF9wYXlsb2FkLCBPcHRpb25hbDxpbnQ+JiYgb3B0
X2RhdGFiYXNlSWQsIFJlZlB0cjxQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiYmIG9wdF9zcWxF
cnJvciwgT3B0aW9uYWw8UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPiYmIG9wdF9z
Y3JlZW5Db2xvciwgUmVmUHRyPFByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiYmIG9wdF9h
bHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyYgb3B0X3ByaW50Q29sb3IpCiB7Ci0gICAgUmVm
PEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAg
IGlmIChjb2x1bW5OYW1lcykKLSAgICAgICAganNvbk1lc3NhZ2UtPnNldEFycmF5KCJjb2x1bW5O
YW1lcyJfcywgY29sdW1uTmFtZXMpOwotICAgIGlmIChub3Rlcy5oYXNWYWx1ZSgpKQotICAgICAg
ICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJub3RlcyJfcywgKm5vdGVzKTsKLSAgICBpZiAodGlt
ZXN0YW1wLmhhc1ZhbHVlKCkpCi0gICAgICAgIGpzb25NZXNzYWdlLT5zZXREb3VibGUoInRpbWVz
dGFtcCJfcywgKnRpbWVzdGFtcCk7Ci0gICAgaWYgKHZhbHVlcy5oYXNWYWx1ZSgpKQotICAgICAg
ICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsICp2YWx1ZXMpOwotICAgIGlmIChw
YXlsb2FkLmhhc1ZhbHVlKCkpCi0gICAgICAgIGpzb25NZXNzYWdlLT5zZXRWYWx1ZSgicGF5bG9h
ZCJfcywgKnBheWxvYWQpOwotICAgIGlmIChkYXRhYmFzZUlkLmhhc1ZhbHVlKCkpCi0gICAgICAg
IGpzb25NZXNzYWdlLT5zZXRJbnRlZ2VyKCJkYXRhYmFzZUlkIl9zLCAqZGF0YWJhc2VJZCk7Ci0g
ICAgaWYgKHNxbEVycm9yKQotICAgICAgICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJzcWxFcnJv
ciJfcywgc3FsRXJyb3IpOwotICAgIGlmIChzY3JlZW5Db2xvci5oYXNWYWx1ZSgpKQotICAgICAg
ICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgKnNjcmVlbkNvbG9yKTsK
LSAgICBpZiAoYWx0ZXJuYXRlQ29sb3JzKQotICAgICAgICBqc29uTWVzc2FnZS0+c2V0QXJyYXko
ImFsdGVybmF0ZUNvbG9ycyJfcywgYWx0ZXJuYXRlQ29sb3JzKTsKLSAgICBpZiAocHJpbnRDb2xv
ci5oYXNWYWx1ZSgpKQotICAgICAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJwcmludENvbG9y
Il9zLCAqcHJpbnRDb2xvcik7Ci0gICAgQ2FsbGJhY2tCYXNlOjpzZW5kU3VjY2VzcyhXVEZNb3Zl
KGpzb25NZXNzYWdlKSk7CisgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9i
amVjdDo6Y3JlYXRlKCk7CisgICAgaWYgKCEhb3B0X2NvbHVtbk5hbWVzKQorICAgICAgICBwcm90
b2NvbF9qc29uTWVzc2FnZS0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCBvcHRfY29sdW1uTmFt
ZXMucmVsZWFzZU5vbk51bGwoKSk7CisgICAgaWYgKCEhb3B0X25vdGVzKQorICAgICAgICBwcm90
b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJub3RlcyJfcywgb3B0X25vdGVzKTsKKyAgICBp
ZiAoISFvcHRfdGltZXN0YW1wKQorICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0RG91
YmxlKCJ0aW1lc3RhbXAiX3MsICpvcHRfdGltZXN0YW1wKTsKKyAgICBpZiAoISFvcHRfdmFsdWVz
KQorICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIG9w
dF92YWx1ZXMucmVsZWFzZU5vbk51bGwoKSk7CisgICAgaWYgKCEhb3B0X3BheWxvYWQpCisgICAg
ICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgb3B0X3BheWxv
YWQucmVsZWFzZU5vbk51bGwoKSk7CisgICAgaWYgKCEhb3B0X2RhdGFiYXNlSWQpCisgICAgICAg
IHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRJbnRlZ2VyKCJkYXRhYmFzZUlkIl9zLCAqb3B0X2Rh
dGFiYXNlSWQpOworICAgIGlmICghIW9wdF9zcWxFcnJvcikKKyAgICAgICAgcHJvdG9jb2xfanNv
bk1lc3NhZ2UtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIG9wdF9zcWxFcnJvci5yZWxlYXNlTm9u
TnVsbCgpKTsKKyAgICBpZiAoISFvcHRfc2NyZWVuQ29sb3IpCisgICAgICAgIHByb3RvY29sX2pz
b25NZXNzYWdlLT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCBQcm90b2NvbDo6VGVzdEhlbHBl
cnM6OmdldEVudW1Db25zdGFudFZhbHVlKCpvcHRfc2NyZWVuQ29sb3IpKTsKKyAgICBpZiAoISFv
cHRfYWx0ZXJuYXRlQ29sb3JzKQorICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0QXJy
YXkoImFsdGVybmF0ZUNvbG9ycyJfcywgb3B0X2FsdGVybmF0ZUNvbG9ycy5yZWxlYXNlTm9uTnVs
bCgpKTsKKyAgICBpZiAoISFvcHRfcHJpbnRDb2xvcikKKyAgICAgICAgcHJvdG9jb2xfanNvbk1l
c3NhZ2UtPnNldFN0cmluZygicHJpbnRDb2xvciJfcywgb3B0X3ByaW50Q29sb3IpOworICAgIENh
bGxiYWNrQmFzZTo6c2VuZFN1Y2Nlc3MoV1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSkpOwog
fQogCi12b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxBc3luY09wdGlv
bmFsUmV0dXJuVmFsdWVzKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBh
cmFtZXRlcnMpCit2b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxBc3lu
Y09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBSZWZQdHI8SlNPTjo6
T2JqZWN0PiYmIHByb3RvY29sX3BhcmFtZXRlcnMpCiB7Ci0gICAgaW50IGluX2RhdGFiYXNlSWQg
PSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRJbnRlZ2VyKHBhcmFtZXRlcnMuZ2V0KCksICJkYXRh
YmFzZUlkIl9zLCBudWxscHRyKTsKLSAgICBTdHJpbmcgaW5fcXVlcnkgPSBtX2JhY2tlbmREaXNw
YXRjaGVyLT5nZXRTdHJpbmcocGFyYW1ldGVycy5nZXQoKSwgInF1ZXJ5Il9zLCBudWxscHRyKTsK
KyAgICBhdXRvIGluX2RhdGFiYXNlSWQgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRJbnRlZ2Vy
KHByb3RvY29sX3BhcmFtZXRlcnMuZ2V0KCksICJkYXRhYmFzZUlkIl9zLCB0cnVlKTsKKyAgICBh
dXRvIGluX3F1ZXJ5ID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3RyaW5nKHByb3RvY29sX3Bh
cmFtZXRlcnMuZ2V0KCksICJxdWVyeSJfcywgdHJ1ZSk7CiAgICAgaWYgKG1fYmFja2VuZERpc3Bh
dGNoZXItPmhhc1Byb3RvY29sRXJyb3JzKCkpIHsKICAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFtcywg
IlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnRGF0YWJhc2UuZXhlY3V0ZVNRTEFzeW5jT3B0aW9u
YWxSZXR1cm5WYWx1ZXMnIGNhbid0IGJlIHByb2Nlc3NlZCJfcyk7CiAgICAgICAgIHJldHVybjsK
QEAgLTM3OCwyMCArMzYyLDE4IEBAIHZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhl
Y3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyByZXF1ZXN0CiAKICNpZiBFTkFC
TEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKICAgICBpZiAobV9hbHRlcm5hdGVE
aXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+ZXhlY3V0ZVNRTEFz
eW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMocmVxdWVzdElkLCBpbl9kYXRhYmFzZUlkLCBpbl9xdWVy
eSk7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+ZXhlY3V0ZVNRTEFzeW5jT3B0aW9u
YWxSZXR1cm5WYWx1ZXMocHJvdG9jb2xfY2FsbElkLCAqaW5fZGF0YWJhc2VJZCwgaW5fcXVlcnkp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQogCi0gICAgUmVmPERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc0NhbGxiYWNrPiBjYWxs
YmFjayA9IGFkb3B0UmVmKCpuZXcgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkV4
ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJhY2sobV9iYWNrZW5kRGlzcGF0
Y2hlci5jb3B5UmVmKCksIHJlcXVlc3RJZCkpOwotICAgIG1fYWdlbnQtPmV4ZWN1dGVTUUxBc3lu
Y09wdGlvbmFsUmV0dXJuVmFsdWVzKGluX2RhdGFiYXNlSWQsIGluX3F1ZXJ5LCBjYWxsYmFjay5j
b3B5UmVmKCkpOwotCisgICAgbV9hZ2VudC0+ZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5W
YWx1ZXMoKmluX2RhdGFiYXNlSWQsIGluX3F1ZXJ5LCBhZG9wdFJlZigqbmV3IERhdGFiYXNlQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVl
c0NhbGxiYWNrKG1fYmFja2VuZERpc3BhdGNoZXIuY29weVJlZigpLCBwcm90b2NvbF9jYWxsSWQp
KSk7CiB9CiAKLXZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTFN5bmMo
bG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycykKK3ZvaWQg
RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTFN5bmMobG9uZyBwcm90b2NvbF9j
YWxsSWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfcGFyYW1ldGVycykKIHsKLSAg
ICBpbnQgaW5fZGF0YWJhc2VJZCA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldEludGVnZXIocGFy
YW1ldGVycy5nZXQoKSwgImRhdGFiYXNlSWQiX3MsIG51bGxwdHIpOwotICAgIFN0cmluZyBpbl9x
dWVyeSA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFN0cmluZyhwYXJhbWV0ZXJzLmdldCgpLCAi
cXVlcnkiX3MsIG51bGxwdHIpOworICAgIGF1dG8gaW5fZGF0YWJhc2VJZCA9IG1fYmFja2VuZERp
c3BhdGNoZXItPmdldEludGVnZXIocHJvdG9jb2xfcGFyYW1ldGVycy5nZXQoKSwgImRhdGFiYXNl
SWQiX3MsIHRydWUpOworICAgIGF1dG8gaW5fcXVlcnkgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5n
ZXRTdHJpbmcocHJvdG9jb2xfcGFyYW1ldGVycy5nZXQoKSwgInF1ZXJ5Il9zLCB0cnVlKTsKICAg
ICBpZiAobV9iYWNrZW5kRGlzcGF0Y2hlci0+aGFzUHJvdG9jb2xFcnJvcnMoKSkgewogICAgICAg
ICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRj
aGVyOjpJbnZhbGlkUGFyYW1zLCAiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICdEYXRhYmFzZS5l
eGVjdXRlU1FMU3luYycgY2FuJ3QgYmUgcHJvY2Vzc2VkIl9zKTsKICAgICAgICAgcmV0dXJuOwpA
QCAtMzk5LDY1ICszODEsNTYgQEAgdm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVj
dXRlU1FMU3luYyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamUKIAogI2lmIEVOQUJM
RShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogICAgIGlmIChtX2FsdGVybmF0ZURp
c3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5leGVjdXRlU1FMU3lu
YyhyZXF1ZXN0SWQsIGluX2RhdGFiYXNlSWQsIGluX3F1ZXJ5KTsKKyAgICAgICAgbV9hbHRlcm5h
dGVEaXNwYXRjaGVyLT5leGVjdXRlU1FMU3luYyhwcm90b2NvbF9jYWxsSWQsICppbl9kYXRhYmFz
ZUlkLCBpbl9xdWVyeSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYgLy8gRU5BQkxF
KElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAKLSAgICBFcnJvclN0cmluZyBlcnJv
cjsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgp
OwotICAgIFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+IG91dF9jb2x1bW5OYW1lczsKLSAg
ICBTdHJpbmcgb3V0X25vdGVzOwotICAgIGRvdWJsZSBvdXRfdGltZXN0YW1wOwotICAgIEpTT046
Ok9iamVjdCBvdXRfdmFsdWVzOwotICAgIEpTT046OlZhbHVlIG91dF9wYXlsb2FkOwotICAgIGlu
dCBvdXRfZGF0YWJhc2VJZDsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJh
c2U6OkVycm9yPiBvdXRfc3FsRXJyb3I7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRhdGFiYXNlOjpDb2xvckxpc3Q+IG91dF9hbHRlcm5hdGVDb2xvcnM7Ci0gICAgSW5zcGVjdG9y
OjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMgb3V0X3NjcmVlbkNvbG9yOwotICAg
IERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQcmludENvbG9yIG91dF9wcmludENv
bG9yOwotICAgIG1fYWdlbnQtPmV4ZWN1dGVTUUxTeW5jKGVycm9yLCBpbl9kYXRhYmFzZUlkLCBp
bl9xdWVyeSwgb3V0X2NvbHVtbk5hbWVzLCAmb3V0X25vdGVzLCAmb3V0X3RpbWVzdGFtcCwgb3V0
X3ZhbHVlcywgJm91dF9wYXlsb2FkLCAmb3V0X2RhdGFiYXNlSWQsIG91dF9zcWxFcnJvciwgb3V0
X2FsdGVybmF0ZUNvbG9ycywgJm91dF9zY3JlZW5Db2xvciwgJm91dF9wcmludENvbG9yKTsKLQot
ICAgIGlmICghZXJyb3IubGVuZ3RoKCkpIHsKLSAgICAgICAgcmVzdWx0LT5zZXRBcnJheSgiY29s
dW1uTmFtZXMiX3MsIG91dF9jb2x1bW5OYW1lcyk7Ci0gICAgICAgIHJlc3VsdC0+c2V0U3RyaW5n
KCJub3RlcyJfcywgb3V0X25vdGVzKTsKLSAgICAgICAgcmVzdWx0LT5zZXREb3VibGUoInRpbWVz
dGFtcCJfcywgb3V0X3RpbWVzdGFtcCk7Ci0gICAgICAgIHJlc3VsdC0+c2V0T2JqZWN0KCJ2YWx1
ZXMiX3MsIG91dF92YWx1ZXMpOwotICAgICAgICByZXN1bHQtPnNldFZhbHVlKCJwYXlsb2FkIl9z
LCBvdXRfcGF5bG9hZCk7Ci0gICAgICAgIHJlc3VsdC0+c2V0SW50ZWdlcigiZGF0YWJhc2VJZCJf
cywgb3V0X2RhdGFiYXNlSWQpOwotICAgICAgICByZXN1bHQtPnNldE9iamVjdCgic3FsRXJyb3Ii
X3MsIG91dF9zcWxFcnJvcik7Ci0gICAgICAgIHJlc3VsdC0+c2V0QXJyYXkoImFsdGVybmF0ZUNv
bG9ycyJfcywgb3V0X2FsdGVybmF0ZUNvbG9ycyk7Ci0gICAgICAgIHJlc3VsdC0+c2V0U3RyaW5n
KCJzY3JlZW5Db2xvciJfcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVu
dW1Db25zdGFudFZhbHVlKG91dF9zY3JlZW5Db2xvcikpOwotICAgICAgICByZXN1bHQtPnNldFN0
cmluZygicHJpbnRDb2xvciJfcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6Omdl
dEVudW1Db25zdGFudFZhbHVlKG91dF9wcmludENvbG9yKSk7CisgICAgYXV0byByZXN1bHQgPSBt
X2FnZW50LT5leGVjdXRlU1FMU3luYygqaW5fZGF0YWJhc2VJZCwgaW5fcXVlcnkpOworICAgIGlm
ICghcmVzdWx0KSB7CisgICAgICAgIEFTU0VSVCghcmVzdWx0LmVycm9yKCkuaXNFbXB0eSgpKTsK
KyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5k
RGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIHJlc3VsdC5lcnJvcigpKTsKKyAgICAgICAgcmV0dXJu
OwogICAgIH0KLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQotICAgICAgICBtX2JhY2tlbmREaXNw
YXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsK
LSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJy
b3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7CisKKyAg
ICBhdXRvIFtvdXRfY29sdW1uTmFtZXMsIG91dF9ub3Rlcywgb3V0X3RpbWVzdGFtcCwgb3V0X3Zh
bHVlcywgb3V0X3BheWxvYWQsIG91dF9kYXRhYmFzZUlkLCBvdXRfc3FsRXJyb3IsIG91dF9hbHRl
cm5hdGVDb2xvcnMsIG91dF9zY3JlZW5Db2xvciwgb3V0X3ByaW50Q29sb3JdID0gV1RGTW92ZShy
ZXN1bHQudmFsdWUoKSk7CisKKyAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6
T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0QXJyYXkoImNv
bHVtbk5hbWVzIl9zLCBXVEZNb3ZlKG91dF9jb2x1bW5OYW1lcykpOworICAgIHByb3RvY29sX2pz
b25NZXNzYWdlLT5zZXRTdHJpbmcoIm5vdGVzIl9zLCBvdXRfbm90ZXMpOworICAgIHByb3RvY29s
X2pzb25NZXNzYWdlLT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywgb3V0X3RpbWVzdGFtcCk7Cisg
ICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldE9iamVjdCgidmFsdWVzIl9zLCBXVEZNb3ZlKG91
dF92YWx1ZXMpKTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0VmFsdWUoInBheWxvYWQi
X3MsIFdURk1vdmUob3V0X3BheWxvYWQpKTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0
SW50ZWdlcigiZGF0YWJhc2VJZCJfcywgb3V0X2RhdGFiYXNlSWQpOworICAgIHByb3RvY29sX2pz
b25NZXNzYWdlLT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBXVEZNb3ZlKG91dF9zcWxFcnJvcikp
OworICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9z
LCBXVEZNb3ZlKG91dF9hbHRlcm5hdGVDb2xvcnMpKTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2Fn
ZS0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgUHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRF
bnVtQ29uc3RhbnRWYWx1ZShvdXRfc2NyZWVuQ29sb3IpKTsKKyAgICBwcm90b2NvbF9qc29uTWVz
c2FnZS0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCBvdXRfcHJpbnRDb2xvcik7CisgICAgbV9i
YWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShw
cm90b2NvbF9qc29uTWVzc2FnZSksIGZhbHNlKTsKIH0KIAogRGF0YWJhc2VCYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXI6OkV4ZWN1dGVTUUxBc3luY0NhbGxiYWNrOjpFeGVjdXRlU1FMQXN5bmNDYWxs
YmFjayhSZWY8QmFja2VuZERpc3BhdGNoZXI+JiYgYmFja2VuZERpc3BhdGNoZXIsIGludCBpZCkg
OiBCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlKFdURk1vdmUoYmFja2VuZERpc3BhdGNo
ZXIpLCBpZCkgeyB9CiAKLXZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkV4
ZWN1dGVTUUxBc3luY0NhbGxiYWNrOjpzZW5kU3VjY2VzcyhSZWZQdHI8SlNPTjo6QXJyYXlPZjxT
dHJpbmc+PiYmIGNvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIG5vdGVzLCBkb3VibGUgdGltZXN0
YW1wLCBKU09OOjpPYmplY3QgdmFsdWVzLCBKU09OOjpWYWx1ZSBwYXlsb2FkLCBpbnQgZGF0YWJh
c2VJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4mJiBzcWxF
cnJvciwgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMgc2NyZWVu
Q29sb3IsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiYm
IGFsdGVybmF0ZUNvbG9ycywgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50
Q29sb3IgcHJpbnRDb2xvcikKK3ZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6
OkV4ZWN1dGVTUUxBc3luY0NhbGxiYWNrOjpzZW5kU3VjY2VzcyhSZWY8SlNPTjo6QXJyYXlPZjxT
dHJpbmc+PiYmIGNvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIG5vdGVzLCBkb3VibGUgdGltZXN0
YW1wLCBSZWY8SlNPTjo6T2JqZWN0PiYmIHZhbHVlcywgUmVmPEpTT046OlZhbHVlPiYmIHBheWxv
YWQsIGludCBkYXRhYmFzZUlkLCBSZWY8UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4mJiBzcWxF
cnJvciwgUHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzIHNjcmVlbkNvbG9yLCBSZWY8
UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+JiYgYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBT
dHJpbmcmIHByaW50Q29sb3IpCiB7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2Ug
PSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIGpzb25NZXNzYWdlLT5zZXRBcnJheSgiY29s
dW1uTmFtZXMiX3MsIGNvbHVtbk5hbWVzKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJu
b3RlcyJfcywgbm90ZXMpOwotICAgIGpzb25NZXNzYWdlLT5zZXREb3VibGUoInRpbWVzdGFtcCJf
cywgdGltZXN0YW1wKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIHZh
bHVlcyk7Ci0gICAganNvbk1lc3NhZ2UtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCBwYXlsb2FkKTsK
LSAgICBqc29uTWVzc2FnZS0+c2V0SW50ZWdlcigiZGF0YWJhc2VJZCJfcywgZGF0YWJhc2VJZCk7
Ci0gICAganNvbk1lc3NhZ2UtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIHNxbEVycm9yKTsKLSAg
ICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgSW5zcGVjdG9yOjpQcm90
b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKHNjcmVlbkNvbG9yKSk7Ci0g
ICAganNvbk1lc3NhZ2UtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIGFsdGVybmF0ZUNv
bG9ycyk7Ci0gICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygicHJpbnRDb2xvciJfcywgSW5zcGVj
dG9yOjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKHByaW50Q29s
b3IpKTsKLSAgICBDYWxsYmFja0Jhc2U6OnNlbmRTdWNjZXNzKFdURk1vdmUoanNvbk1lc3NhZ2Up
KTsKKyAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUo
KTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCBX
VEZNb3ZlKGNvbHVtbk5hbWVzKSk7CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmlu
Zygibm90ZXMiX3MsIG5vdGVzKTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0RG91Ymxl
KCJ0aW1lc3RhbXAiX3MsIHRpbWVzdGFtcCk7CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNl
dE9iamVjdCgidmFsdWVzIl9zLCBXVEZNb3ZlKHZhbHVlcykpOworICAgIHByb3RvY29sX2pzb25N
ZXNzYWdlLT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgV1RGTW92ZShwYXlsb2FkKSk7CisgICAgcHJv
dG9jb2xfanNvbk1lc3NhZ2UtPnNldEludGVnZXIoImRhdGFiYXNlSWQiX3MsIGRhdGFiYXNlSWQp
OworICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBXVEZN
b3ZlKHNxbEVycm9yKSk7CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygic2Ny
ZWVuQ29sb3IiX3MsIFByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUo
c2NyZWVuQ29sb3IpKTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0QXJyYXkoImFsdGVy
bmF0ZUNvbG9ycyJfcywgV1RGTW92ZShhbHRlcm5hdGVDb2xvcnMpKTsKKyAgICBwcm90b2NvbF9q
c29uTWVzc2FnZS0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCBwcmludENvbG9yKTsKKyAgICBD
YWxsYmFja0Jhc2U6OnNlbmRTdWNjZXNzKFdURk1vdmUocHJvdG9jb2xfanNvbk1lc3NhZ2UpKTsK
IH0KIAotdm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FMQXN5bmMobG9u
ZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycykKK3ZvaWQgRGF0
YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTEFzeW5jKGxvbmcgcHJvdG9jb2xfY2Fs
bElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX3BhcmFtZXRlcnMpCiB7Ci0gICAg
aW50IGluX2RhdGFiYXNlSWQgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRJbnRlZ2VyKHBhcmFt
ZXRlcnMuZ2V0KCksICJkYXRhYmFzZUlkIl9zLCBudWxscHRyKTsKLSAgICBTdHJpbmcgaW5fcXVl
cnkgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRTdHJpbmcocGFyYW1ldGVycy5nZXQoKSwgInF1
ZXJ5Il9zLCBudWxscHRyKTsKKyAgICBhdXRvIGluX2RhdGFiYXNlSWQgPSBtX2JhY2tlbmREaXNw
YXRjaGVyLT5nZXRJbnRlZ2VyKHByb3RvY29sX3BhcmFtZXRlcnMuZ2V0KCksICJkYXRhYmFzZUlk
Il9zLCB0cnVlKTsKKyAgICBhdXRvIGluX3F1ZXJ5ID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0
U3RyaW5nKHByb3RvY29sX3BhcmFtZXRlcnMuZ2V0KCksICJxdWVyeSJfcywgdHJ1ZSk7CiAgICAg
aWYgKG1fYmFja2VuZERpc3BhdGNoZXItPmhhc1Byb3RvY29sRXJyb3JzKCkpIHsKICAgICAgICAg
bV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hl
cjo6SW52YWxpZFBhcmFtcywgIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnRGF0YWJhc2UuZXhl
Y3V0ZVNRTEFzeW5jJyBjYW4ndCBiZSBwcm9jZXNzZWQiX3MpOwogICAgICAgICByZXR1cm47CkBA
IC00NjUsMTQgKzQzOCwxMiBAQCB2b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1
dGVTUUxBc3luYyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iagogCiAjaWYgRU5BQkxF
KElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAgICAgaWYgKG1fYWx0ZXJuYXRlRGlz
cGF0Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmV4ZWN1dGVTUUxBc3lu
YyhyZXF1ZXN0SWQsIGluX2RhdGFiYXNlSWQsIGluX3F1ZXJ5KTsKKyAgICAgICAgbV9hbHRlcm5h
dGVEaXNwYXRjaGVyLT5leGVjdXRlU1FMQXN5bmMocHJvdG9jb2xfY2FsbElkLCAqaW5fZGF0YWJh
c2VJZCwgaW5fcXVlcnkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmIC8vIEVOQUJM
RShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogCi0gICAgUmVmPERhdGFiYXNlQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNDYWxsYmFjaz4gY2FsbGJhY2sg
PSBhZG9wdFJlZigqbmV3IERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRl
U1FMQXN5bmNDYWxsYmFjayhtX2JhY2tlbmREaXNwYXRjaGVyLmNvcHlSZWYoKSwgcmVxdWVzdElk
KSk7Ci0gICAgbV9hZ2VudC0+ZXhlY3V0ZVNRTEFzeW5jKGluX2RhdGFiYXNlSWQsIGluX3F1ZXJ5
LCBjYWxsYmFjay5jb3B5UmVmKCkpOwotCisgICAgbV9hZ2VudC0+ZXhlY3V0ZVNRTEFzeW5jKCpp
bl9kYXRhYmFzZUlkLCBpbl9xdWVyeSwgYWRvcHRSZWYoKm5ldyBEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5jQ2FsbGJhY2sobV9iYWNrZW5kRGlzcGF0Y2hl
ci5jb3B5UmVmKCksIHByb3RvY29sX2NhbGxJZCkpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCkBAIC01MTMsNiArNDg0LDcgQEAgdm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVy
OjpleGVjdXRlU1FMQXN5bmMobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmoKIAogI2lu
Y2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5o
PgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKQEAgLTU1Niw3ICs1MjgsNiBAQCBjbGFzcyBG
cm9udGVuZFJvdXRlcjsKICNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgogCiAj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNs
dWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC01
OTcsNyArNTY4LDkgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiAjcHJhZ21hIG9uY2UKIAogI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KLSNpbmNsdWRl
IDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVk
ZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5h
bWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC02MTksNyArNTkyLDcgQEAgZW51bSBjbGFzcyBQcmlt
YXJ5Q29sb3JzOwogbmFtZXNwYWNlIERhdGFiYXNlIHsKIC8qIFVuaXF1ZSBpZGVudGlmaWVyIG9m
IERhdGFiYXNlIG9iamVjdC4gKi8KIHVzaW5nIERhdGFiYXNlSWQgPSBpbnQ7Ci11c2luZyBDb2xv
ckxpc3QgPSBKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmlt
YXJ5Q29sb3JzPjsKK3VzaW5nIENvbG9yTGlzdCA9IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkRh
dGFiYXNlOjpQcmltYXJ5Q29sb3JzPjsKIH0gLy8gRGF0YWJhc2UKIC8vIEVuZCBvZiB0eXBlZGVm
cy4KIApAQCAtNjQzLDcgKzYxNiw3IEBAIGVudW0gY2xhc3MgUHJpbWFyeUNvbG9ycyB7CiB9OyAv
LyBlbnVtIGNsYXNzIFByaW1hcnlDb2xvcnMKIAogLyogRGF0YWJhc2UgZXJyb3IuICovCi1jbGFz
cyBFcnJvciA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKK2NsYXNzIEVycm9yIGZpbmFsIDog
cHVibGljIEpTT046Ok9iamVjdEJhc2UgewogcHVibGljOgogICAgIGVudW0gewogICAgICAgICBO
b0ZpZWxkc1NldCA9IDAsCkBAIC02NzAsMTcgKzY0MywxNyBAQCBwdWJsaWM6CiAgICAgICAgIGZy
aWVuZCBjbGFzcyBFcnJvcjsKICAgICBwdWJsaWM6CiAKLSAgICAgICAgQnVpbGRlcjxTVEFURSB8
IE1lc3NhZ2VTZXQ+JiBzZXRNZXNzYWdlKGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgICAgIEJ1
aWxkZXI8U1RBVEUgfCBNZXNzYWdlU2V0PiYgc2V0TWVzc2FnZShjb25zdCBTdHJpbmcmIGluX21l
c3NhZ2UpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBN
ZXNzYWdlU2V0KSwgcHJvcGVydHlfbWVzc2FnZV9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBt
X3Jlc3VsdC0+c2V0U3RyaW5nKCJtZXNzYWdlIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICBtX3Jl
c3VsdC0+c2V0U3RyaW5nKCJtZXNzYWdlIl9zLCBpbl9tZXNzYWdlKTsKICAgICAgICAgICAgIHJl
dHVybiBjYXN0U3RhdGU8TWVzc2FnZVNldD4oKTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1aWxk
ZXI8U1RBVEUgfCBDb2RlU2V0PiYgc2V0Q29kZShpbnQgdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCBDb2RlU2V0PiYgc2V0Q29kZShpbnQgaW5fY29kZSkKICAgICAgICAgewogICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIENvZGVTZXQpLCBwcm9wZXJ0eV9jb2RlX2Fs
cmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRJbnRlZ2VyKCJjb2RlIl9zLCB2
YWx1ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0SW50ZWdlcigiY29kZSJfcywgaW5fY29k
ZSk7CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENvZGVTZXQ+KCk7CiAgICAgICAgIH0K
IApAQCAtNzE5LDcgKzY5Miw3IEBAIE9wdGlvbmFsPFByb3RvY29sRW51bVR5cGU+IHBhcnNlRW51
bVZhbHVlRnJvbVN0cmluZyhjb25zdCBTdHJpbmcmKTsKIAogLy8gRW51bXMgaW4gdGhlICdEYXRh
YmFzZScgRG9tYWluCiB0ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpE
YXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPihjb25zdCBTdHJpbmcmKTsKK09w
dGlvbmFsPFByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4gcGFyc2VFbnVtVmFsdWVG
cm9tU3RyaW5nPFByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4oY29uc3QgU3RyaW5n
Jik7CiAKIH0gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCiAKQEAgLTc3MSw4ICs3NDQsNyBAQCBz
dHJ1Y3QgRGVmYXVsdEhhc2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlD
b2xvcnM+IDogSW50SGFzaDxJbnNwZQogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlRl
c3RQcm90b2NvbE9iamVjdHMuaCIKIAotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogCiBu
YW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtNzk3LDE2ICs3NjksMTYgQEAgU3RyaW5nIGdldEVu
dW1Db25zdGFudFZhbHVlKGludCBjb2RlKSB7CiAvLyBFbnVtcyBpbiB0aGUgJ0RhdGFiYXNlJyBE
b21haW4KIAogdGVtcGxhdGU8PgotT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJh
c2U6OlByaW1hcnlDb2xvcnM+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlBy
b3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4oY29uc3QgU3RyaW5nJiBwcm90b2NvbFN0
cmluZykKK09wdGlvbmFsPFByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4gcGFyc2VF
bnVtVmFsdWVGcm9tU3RyaW5nPFByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4oY29u
c3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKIHsKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNv
bnN0YW50VmFsdWVzW10gPSB7Ci0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6
RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM6OlJlZCwKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6
OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9yczo6R3JlZW4sCi0gICAgICAgIChzaXpl
X3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM6OkJsdWUsCisg
ICAgICAgIChzaXplX3QpUHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzOjpSZWQsCisg
ICAgICAgIChzaXplX3QpUHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzOjpHcmVlbiwK
KyAgICAgICAgKHNpemVfdClQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM6OkJsdWUs
CiAgICAgfTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDM7ICsraSkKICAgICAgICAgaWYg
KHByb3RvY29sU3RyaW5nID09IGVudW1fY29uc3RhbnRfdmFsdWVzW2NvbnN0YW50VmFsdWVzW2ld
XSkKLSAgICAgICAgICAgIHJldHVybiAoSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlBy
aW1hcnlDb2xvcnMpY29uc3RhbnRWYWx1ZXNbaV07CisgICAgICAgICAgICByZXR1cm4gKFByb3Rv
Y29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyljb25zdGFudFZhbHVlc1tpXTsKIAogICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CiB9CkBAIC04NjMsMTAgKzgzNSwxMCBAQCBjbGFzcyBPYmpDSW5z
cGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBBbHRlcm5hdGVE
YXRhYmFzZUJhYwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIE9i
akNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKGlkPFRlc3RQcm90b2NvbERhdGFi
YXNlRG9tYWluSGFuZGxlcj4gaGFuZGxlcikgeyBtX2RlbGVnYXRlID0gaGFuZGxlcjsgfQotICAg
IHZvaWQgZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIHJlcXVlc3RJZCwg
aW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnkpIGZpbmFsOwotICAgIHZv
aWQgZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyByZXF1ZXN0SWQsIGlu
dCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5KSBmaW5hbDsKLSAgICB2b2lk
IGV4ZWN1dGVTUUxTeW5jKGxvbmcgcmVxdWVzdElkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3Qg
U3RyaW5nJiBpbl9xdWVyeSkgZmluYWw7Ci0gICAgdm9pZCBleGVjdXRlU1FMQXN5bmMobG9uZyBy
ZXF1ZXN0SWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5KSBmaW5h
bDsKKyAgICB2b2lkIGV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyBwcm90
b2NvbF9jYWxsSWQsIGludCBkYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIHF1ZXJ5KSBmaW5hbDsK
KyAgICB2b2lkIGV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgcHJvdG9j
b2xfY2FsbElkLCBpbnQgZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBxdWVyeSkgZmluYWw7Cisg
ICAgdm9pZCBleGVjdXRlU1FMU3luYyhsb25nIHByb3RvY29sX2NhbGxJZCwgaW50IGRhdGFiYXNl
SWQsIGNvbnN0IFN0cmluZyYgcXVlcnkpIGZpbmFsOworICAgIHZvaWQgZXhlY3V0ZVNRTEFzeW5j
KGxvbmcgcHJvdG9jb2xfY2FsbElkLCBpbnQgZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBxdWVy
eSkgZmluYWw7CiBwcml2YXRlOgogICAgIFJldGFpblB0cjxpZDxUZXN0UHJvdG9jb2xEYXRhYmFz
ZURvbWFpbkhhbmRsZXI+PiBtX2RlbGVnYXRlOwogfTsKQEAgLTkxNCwxODMgKzg4NiwxNzkgQEAg
cHJpdmF0ZToKIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKLXZvaWQgT2JqQ0luc3BlY3RvckRh
dGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1
ZXMobG9uZyByZXF1ZXN0SWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1
ZXJ5KQordm9pZCBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0
ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIHByb3RvY29sX2NhbGxJZCwgaW50IGlu
X2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnkpCiB7CiAgICAgaWYgKCFbbV9kZWxl
Z2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxS
ZXR1cm5WYWx1ZXNXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6ZGF0YWJhc2VJZDpx
dWVyeTopXSkgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVy
cm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RhdGFi
YXNlLmV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMnIHdhcyBub3QgZm91bmQiX3Mp
OworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHByb3Rv
Y29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RhdGFiYXNl
LmV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMnIHdhcyBub3QgZm91bmQiX3MpOwog
ICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCiAgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVy
cm9yKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3Io
cmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAg
ICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxs
SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwogICAgICAgICBiYWNr
ZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgIH07CiAKLSAgICBpZCBz
dWNjZXNzQ2FsbGJhY2sgPSBeKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKmNvbHVtbk5hbWVzLCBO
U1N0cmluZyAqKm5vdGVzLCBkb3VibGUgKnRpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0
ICoqdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKipwYXlsb2FkLCBpbnQgKmRhdGFiYXNl
SWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKipzcWxFcnJvciwgVGVzdFByb3RvY29sRGF0
YWJhc2VQcmltYXJ5Q29sb3JzICpzY3JlZW5Db2xvciwgTlNBcnJheS8qPE5TU3RyaW5nPiovICoq
YWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jT3B0aW9u
YWxSZXR1cm5WYWx1ZXNQcmludENvbG9yICpwcmludENvbG9yKSB7Ci0gICAgICAgIFJlZjxKU09O
OjpPYmplY3Q+IHJlc3VsdE9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgICAg
IFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihjb2x1bW5OYW1lcywg
QCJjb2x1bW5OYW1lcyIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05B
TF9QQVJBTUVURVIobm90ZXMsIEAibm90ZXMiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZP
Ul9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKHZhbHVlcywgQCJ2YWx1ZXMiKTsKLSAgICAgICAgVEhS
T1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKHBheWxvYWQsIEAicGF5bG9h
ZCIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIo
c3FsRXJyb3IsIEAic3FsRXJyb3IiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURf
T1BUSU9OQUxfUEFSQU1FVEVSKGFsdGVybmF0ZUNvbG9ycywgQCJhbHRlcm5hdGVDb2xvcnMiKTsK
LSAgICAgICAgaWYgKGNvbHVtbk5hbWVzKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRB
cnJheSgiY29sdW1uTmFtZXMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KCpjb2x1bW5OYW1lcykpOwot
ICAgICAgICBpZiAobm90ZXMpCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZygi
bm90ZXMiX3MsICpub3Rlcyk7Ci0gICAgICAgIGlmICh0aW1lc3RhbXApCi0gICAgICAgICAgICBy
ZXN1bHRPYmplY3QtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCAqdGltZXN0YW1wKTsKLSAgICAg
ICAgaWYgKHZhbHVlcykKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0T2JqZWN0KCJ2YWx1
ZXMiX3MsIFsqdmFsdWVzIHRvSlNPTk9iamVjdF0pOwotICAgICAgICBpZiAocGF5bG9hZCkKLSAg
ICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0VmFsdWUoInBheWxvYWQiX3MsIFsqcGF5bG9hZCB0
b0pTT05PYmplY3RdKTsKLSAgICAgICAgaWYgKGRhdGFiYXNlSWQpCi0gICAgICAgICAgICByZXN1
bHRPYmplY3QtPnNldEludGVnZXIoImRhdGFiYXNlSWQiX3MsICpkYXRhYmFzZUlkKTsKLSAgICAg
ICAgaWYgKHNxbEVycm9yKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRPYmplY3QoInNx
bEVycm9yIl9zLCBbKnNxbEVycm9yIHRvSlNPTk9iamVjdF0pOwotICAgICAgICBpZiAoc2NyZWVu
Q29sb3IpCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZygic2NyZWVuQ29sb3Ii
X3MsIHRvUHJvdG9jb2xTdHJpbmcoKnNjcmVlbkNvbG9yKSk7Ci0gICAgICAgIGlmIChhbHRlcm5h
dGVDb2xvcnMpCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldEFycmF5KCJhbHRlcm5hdGVD
b2xvcnMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KCphbHRlcm5hdGVDb2xvcnMpKTsKLSAgICAgICAg
aWYgKHByaW50Q29sb3IpCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZygicHJp
bnRDb2xvciJfcywgdG9Qcm90b2NvbFN0cmluZygqcHJpbnRDb2xvcikpOwotICAgICAgICBiYWNr
ZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdE9i
amVjdCksIGZhbHNlKTsKKyAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeKE5TQXJyYXkvKjxOU1N0
cmluZz4qLyAqKm91dF9vcHRfY29sdW1uTmFtZXMsIE5TU3RyaW5nICoqb3V0X29wdF9ub3Rlcywg
ZG91YmxlICpvdXRfb3B0X3RpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqb3V0X29w
dF92YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqKm91dF9vcHRfcGF5bG9hZCwgaW50ICpv
dXRfb3B0X2RhdGFiYXNlSWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKipvdXRfb3B0X3Nx
bEVycm9yLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgKm91dF9vcHRfc2NyZWVu
Q29sb3IsIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKm91dF9vcHRfYWx0ZXJuYXRlQ29sb3JzLCBU
ZXN0UHJvdG9jb2xEYXRhYmFzZShhbm9ueW1vdXMpICpvdXRfb3B0X3ByaW50Q29sb3IpIHsKKyAg
ICAgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7
CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihvdXRf
b3B0X2NvbHVtbk5hbWVzLCBAImNvbHVtbk5hbWVzIik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihvdXRfb3B0X25vdGVzLCBAIm5vdGVzIik7Cisg
ICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihvdXRfb3B0
X3ZhbHVlcywgQCJ2YWx1ZXMiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BU
SU9OQUxfUEFSQU1FVEVSKG91dF9vcHRfcGF5bG9hZCwgQCJwYXlsb2FkIik7CisgICAgICAgIFRI
Uk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihvdXRfb3B0X3NxbEVycm9y
LCBAInNxbEVycm9yIik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFM
X1BBUkFNRVRFUihvdXRfb3B0X2FsdGVybmF0ZUNvbG9ycywgQCJhbHRlcm5hdGVDb2xvcnMiKTsK
KyAgICAgICAgaWYgKCEhb3V0X29wdF9jb2x1bW5OYW1lcykKKyAgICAgICAgICAgIHByb3RvY29s
X2pzb25NZXNzYWdlLT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIHRvSlNPTlN0cmluZ0FycmF5
KCpvdXRfb3B0X2NvbHVtbk5hbWVzKSk7CisgICAgICAgIGlmICghIW91dF9vcHRfbm90ZXMpCisg
ICAgICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJub3RlcyJfcywgKm91
dF9vcHRfbm90ZXMpOworICAgICAgICBpZiAoISFvdXRfb3B0X3RpbWVzdGFtcCkKKyAgICAgICAg
ICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywgKm91dF9v
cHRfdGltZXN0YW1wKTsKKyAgICAgICAgaWYgKCEhb3V0X29wdF92YWx1ZXMpCisgICAgICAgICAg
ICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIFsqb3V0X29wdF92
YWx1ZXMgdG9KU09OT2JqZWN0XSk7CisgICAgICAgIGlmICghIW91dF9vcHRfcGF5bG9hZCkKKyAg
ICAgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgWypv
dXRfb3B0X3BheWxvYWQgdG9KU09OT2JqZWN0XSk7CisgICAgICAgIGlmICghIW91dF9vcHRfZGF0
YWJhc2VJZCkKKyAgICAgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRJbnRlZ2VyKCJk
YXRhYmFzZUlkIl9zLCAqb3V0X29wdF9kYXRhYmFzZUlkKTsKKyAgICAgICAgaWYgKCEhb3V0X29w
dF9zcWxFcnJvcikKKyAgICAgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRPYmplY3Qo
InNxbEVycm9yIl9zLCBbKm91dF9vcHRfc3FsRXJyb3IgdG9KU09OT2JqZWN0XSk7CisgICAgICAg
IGlmICghIW91dF9vcHRfc2NyZWVuQ29sb3IpCisgICAgICAgICAgICBwcm90b2NvbF9qc29uTWVz
c2FnZS0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgdG9Qcm90b2NvbFN0cmluZygqb3V0X29w
dF9zY3JlZW5Db2xvcikpOworICAgICAgICBpZiAoISFvdXRfb3B0X2FsdGVybmF0ZUNvbG9ycykK
KyAgICAgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29s
b3JzIl9zLCB0b0pTT05TdHJpbmdBcnJheSgqb3V0X29wdF9hbHRlcm5hdGVDb2xvcnMpKTsKKyAg
ICAgICAgaWYgKCEhb3V0X29wdF9wcmludENvbG9yKQorICAgICAgICAgICAgcHJvdG9jb2xfanNv
bk1lc3NhZ2UtPnNldFN0cmluZygicHJpbnRDb2xvciJfcywgdG9Qcm90b2NvbFN0cmluZygqb3V0
X29wdF9wcmludENvbG9yKSk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNw
b25zZShwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJvdG9jb2xfanNvbk1lc3NhZ2UpLCBmYWxz
ZSk7CiAgICAgfTsKIAogICAgIGludCBvX2luX2RhdGFiYXNlSWQgPSBpbl9kYXRhYmFzZUlkOwog
ICAgIE5TU3RyaW5nICpvX2luX3F1ZXJ5ID0gaW5fcXVlcnk7Ci0KICAgICBbbV9kZWxlZ2F0ZSBl
eGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JD
YWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrIGRhdGFiYXNlSWQ6b19pbl9k
YXRhYmFzZUlkIHF1ZXJ5Om9faW5fcXVlcnldOwogfQogCi12b2lkIE9iakNJbnNwZWN0b3JEYXRh
YmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVl
cyhsb25nIHJlcXVlc3RJZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVl
cnkpCit2b2lkIE9iakNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRl
U1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIHByb3RvY29sX2NhbGxJZCwgaW50IGlu
X2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnkpCiB7CiAgICAgaWYgKCFbbV9kZWxl
Z2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGV4ZWN1dGVTUUxBc3luY09wdGlvbmFs
UmV0dXJuVmFsdWVzV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOmRhdGFiYXNlSWQ6
cXVlcnk6KV0pIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xF
cnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEYXRh
YmFzZS5leGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcycgd2FzIG5vdCBmb3VuZCJf
cyk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocHJv
dG9jb2xfY2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRGF0YWJh
c2UuZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMnIHdhcyBub3QgZm91bmQiX3Mp
OwogICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcg
KmVycm9yKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJy
b3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAg
ICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9j
YWxsSWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwogICAgICAgICBi
YWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgIH07CiAKLSAgICBp
ZCBzdWNjZXNzQ2FsbGJhY2sgPSBeKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKmNvbHVtbk5hbWVz
LCBOU1N0cmluZyAqKm5vdGVzLCBkb3VibGUgKnRpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2Jq
ZWN0ICoqdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKipwYXlsb2FkLCBpbnQgKmRhdGFi
YXNlSWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKipzcWxFcnJvciwgVGVzdFByb3RvY29s
RGF0YWJhc2VQcmltYXJ5Q29sb3JzICpzY3JlZW5Db2xvciwgTlNBcnJheS8qPE5TU3RyaW5nPiov
ICoqYWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY09w
dGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvciAqcHJpbnRDb2xvcikgewotICAgICAgICBSZWY8
SlNPTjo6T2JqZWN0PiByZXN1bHRPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAg
ICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIoY29sdW1uTmFt
ZXMsIEAiY29sdW1uTmFtZXMiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BU
SU9OQUxfUEFSQU1FVEVSKG5vdGVzLCBAIm5vdGVzIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUih2YWx1ZXMsIEAidmFsdWVzIik7Ci0gICAgICAg
IFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihwYXlsb2FkLCBAInBh
eWxvYWQiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1F
VEVSKHNxbEVycm9yLCBAInNxbEVycm9yIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1Jf
QkFEX09QVElPTkFMX1BBUkFNRVRFUihhbHRlcm5hdGVDb2xvcnMsIEAiYWx0ZXJuYXRlQ29sb3Jz
Iik7Ci0gICAgICAgIGlmIChjb2x1bW5OYW1lcykKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+
c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCB0b0pTT05TdHJpbmdBcnJheSgqY29sdW1uTmFtZXMp
KTsKLSAgICAgICAgaWYgKG5vdGVzKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJp
bmcoIm5vdGVzIl9zLCAqbm90ZXMpOwotICAgICAgICBpZiAodGltZXN0YW1wKQotICAgICAgICAg
ICAgcmVzdWx0T2JqZWN0LT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywgKnRpbWVzdGFtcCk7Ci0g
ICAgICAgIGlmICh2YWx1ZXMpCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldE9iamVjdCgi
dmFsdWVzIl9zLCBbKnZhbHVlcyB0b0pTT05PYmplY3RdKTsKLSAgICAgICAgaWYgKHBheWxvYWQp
Ci0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCBbKnBheWxv
YWQgdG9KU09OT2JqZWN0XSk7Ci0gICAgICAgIGlmIChkYXRhYmFzZUlkKQotICAgICAgICAgICAg
cmVzdWx0T2JqZWN0LT5zZXRJbnRlZ2VyKCJkYXRhYmFzZUlkIl9zLCAqZGF0YWJhc2VJZCk7Ci0g
ICAgICAgIGlmIChzcWxFcnJvcikKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0T2JqZWN0
KCJzcWxFcnJvciJfcywgWypzcWxFcnJvciB0b0pTT05PYmplY3RdKTsKLSAgICAgICAgaWYgKHNj
cmVlbkNvbG9yKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoInNjcmVlbkNv
bG9yIl9zLCB0b1Byb3RvY29sU3RyaW5nKCpzY3JlZW5Db2xvcikpOwotICAgICAgICBpZiAoYWx0
ZXJuYXRlQ29sb3JzKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRBcnJheSgiYWx0ZXJu
YXRlQ29sb3JzIl9zLCB0b0pTT05TdHJpbmdBcnJheSgqYWx0ZXJuYXRlQ29sb3JzKSk7Ci0gICAg
ICAgIGlmIChwcmludENvbG9yKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmco
InByaW50Q29sb3IiX3MsIHRvUHJvdG9jb2xTdHJpbmcoKnByaW50Q29sb3IpKTsKLSAgICAgICAg
YmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1
bHRPYmplY3QpLCBmYWxzZSk7CisgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXihOU0FycmF5Lyo8
TlNTdHJpbmc+Ki8gKipvdXRfb3B0X2NvbHVtbk5hbWVzLCBOU1N0cmluZyAqKm91dF9vcHRfbm90
ZXMsIGRvdWJsZSAqb3V0X29wdF90aW1lc3RhbXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqKm91
dF9vcHRfdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKipvdXRfb3B0X3BheWxvYWQsIGlu
dCAqb3V0X29wdF9kYXRhYmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoqb3V0X29w
dF9zcWxFcnJvciwgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzICpvdXRfb3B0X3Nj
cmVlbkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKipvdXRfb3B0X2FsdGVybmF0ZUNvbG9y
cywgVGVzdFByb3RvY29sRGF0YWJhc2UoYW5vbnltb3VzKSAqb3V0X29wdF9wcmludENvbG9yKSB7
CisgICAgICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0
ZSgpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIo
b3V0X29wdF9jb2x1bW5OYW1lcywgQCJjb2x1bW5OYW1lcyIpOworICAgICAgICBUSFJPV19FWENF
UFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIob3V0X29wdF9ub3RlcywgQCJub3RlcyIp
OworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIob3V0
X29wdF92YWx1ZXMsIEAidmFsdWVzIik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFE
X09QVElPTkFMX1BBUkFNRVRFUihvdXRfb3B0X3BheWxvYWQsIEAicGF5bG9hZCIpOworICAgICAg
ICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIob3V0X29wdF9zcWxF
cnJvciwgQCJzcWxFcnJvciIpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJ
T05BTF9QQVJBTUVURVIob3V0X29wdF9hbHRlcm5hdGVDb2xvcnMsIEAiYWx0ZXJuYXRlQ29sb3Jz
Iik7CisgICAgICAgIGlmICghIW91dF9vcHRfY29sdW1uTmFtZXMpCisgICAgICAgICAgICBwcm90
b2NvbF9qc29uTWVzc2FnZS0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCB0b0pTT05TdHJpbmdB
cnJheSgqb3V0X29wdF9jb2x1bW5OYW1lcykpOworICAgICAgICBpZiAoISFvdXRfb3B0X25vdGVz
KQorICAgICAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygibm90ZXMiX3Ms
ICpvdXRfb3B0X25vdGVzKTsKKyAgICAgICAgaWYgKCEhb3V0X29wdF90aW1lc3RhbXApCisgICAg
ICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsICpv
dXRfb3B0X3RpbWVzdGFtcCk7CisgICAgICAgIGlmICghIW91dF9vcHRfdmFsdWVzKQorICAgICAg
ICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldE9iamVjdCgidmFsdWVzIl9zLCBbKm91dF9v
cHRfdmFsdWVzIHRvSlNPTk9iamVjdF0pOworICAgICAgICBpZiAoISFvdXRfb3B0X3BheWxvYWQp
CisgICAgICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0VmFsdWUoInBheWxvYWQiX3Ms
IFsqb3V0X29wdF9wYXlsb2FkIHRvSlNPTk9iamVjdF0pOworICAgICAgICBpZiAoISFvdXRfb3B0
X2RhdGFiYXNlSWQpCisgICAgICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0SW50ZWdl
cigiZGF0YWJhc2VJZCJfcywgKm91dF9vcHRfZGF0YWJhc2VJZCk7CisgICAgICAgIGlmICghIW91
dF9vcHRfc3FsRXJyb3IpCisgICAgICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0T2Jq
ZWN0KCJzcWxFcnJvciJfcywgWypvdXRfb3B0X3NxbEVycm9yIHRvSlNPTk9iamVjdF0pOworICAg
ICAgICBpZiAoISFvdXRfb3B0X3NjcmVlbkNvbG9yKQorICAgICAgICAgICAgcHJvdG9jb2xfanNv
bk1lc3NhZ2UtPnNldFN0cmluZygic2NyZWVuQ29sb3IiX3MsIHRvUHJvdG9jb2xTdHJpbmcoKm91
dF9vcHRfc2NyZWVuQ29sb3IpKTsKKyAgICAgICAgaWYgKCEhb3V0X29wdF9hbHRlcm5hdGVDb2xv
cnMpCisgICAgICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0QXJyYXkoImFsdGVybmF0
ZUNvbG9ycyJfcywgdG9KU09OU3RyaW5nQXJyYXkoKm91dF9vcHRfYWx0ZXJuYXRlQ29sb3JzKSk7
CisgICAgICAgIGlmICghIW91dF9vcHRfcHJpbnRDb2xvcikKKyAgICAgICAgICAgIHByb3RvY29s
X2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoInByaW50Q29sb3IiX3MsIHRvUHJvdG9jb2xTdHJpbmco
Km91dF9vcHRfcHJpbnRDb2xvcikpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5k
UmVzcG9uc2UocHJvdG9jb2xfY2FsbElkLCBXVEZNb3ZlKHByb3RvY29sX2pzb25NZXNzYWdlKSwg
ZmFsc2UpOwogICAgIH07CiAKICAgICBpbnQgb19pbl9kYXRhYmFzZUlkID0gaW5fZGF0YWJhc2VJ
ZDsKICAgICBOU1N0cmluZyAqb19pbl9xdWVyeSA9IGluX3F1ZXJ5OwotCiAgICAgW21fZGVsZWdh
dGUgZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNXaXRoRXJyb3JDYWxsYmFjazpl
cnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2sgZGF0YWJhc2VJZDpv
X2luX2RhdGFiYXNlSWQgcXVlcnk6b19pbl9xdWVyeV07CiB9CiAKLXZvaWQgT2JqQ0luc3BlY3Rv
ckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxTeW5jKGxvbmcgcmVxdWVzdElk
LCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSkKK3ZvaWQgT2JqQ0lu
c3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxTeW5jKGxvbmcgcHJv
dG9jb2xfY2FsbElkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSkK
IHsKICAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoZXhl
Y3V0ZVNRTFN5bmNXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6ZGF0YWJhc2VJZDpx
dWVyeTopXSkgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVy
cm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RhdGFi
YXNlLmV4ZWN1dGVTUUxTeW5jJyB3YXMgbm90IGZvdW5kIl9zKTsKKyAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxsSWQsIEJhY2tlbmRE
aXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEYXRhYmFzZS5leGVjdXRlU1FMU3luYycgd2Fz
IG5vdCBmb3VuZCJfcyk7CiAgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5n
RXJyb3JzKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZCBlcnJvckNhbGxiYWNr
ID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVw
b3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJv
ciwgZXJyb3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVy
cm9yKHByb3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJv
cik7CiAgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CiAg
ICAgfTsKIAotICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF4oTlNBcnJheS8qPE5TU3RyaW5nPiov
ICpjb2x1bW5OYW1lcywgTlNTdHJpbmcgKm5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBSV0lQcm90
b2NvbEpTT05PYmplY3QgKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpwYXlsb2FkLCBp
bnQgZGF0YWJhc2VJZCwgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqc3FsRXJyb3IsIE5TQXJy
YXkvKjxOU1N0cmluZz4qLyAqYWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVBy
aW1hcnlDb2xvcnMgc2NyZWVuQ29sb3IsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5
bmNQcmludENvbG9yIHByaW50Q29sb3IpIHsKLSAgICAgICAgUmVmPEpTT046Ok9iamVjdD4gcmVz
dWx0T2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICAgICAgVEhST1dfRVhDRVBU
SU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoY29sdW1uTmFtZXMsIEAiY29sdW1uTmFtZXMiKTsK
LSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIobm90ZXMsIEAi
bm90ZXMiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIo
dmFsdWVzLCBAInZhbHVlcyIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVE
X1BBUkFNRVRFUihwYXlsb2FkLCBAInBheWxvYWQiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9O
X0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoc3FsRXJyb3IsIEAic3FsRXJyb3IiKTsKLSAgICAgICAg
VEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoYWx0ZXJuYXRlQ29sb3JzLCBA
ImFsdGVybmF0ZUNvbG9ycyIpOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldEFycmF5KCJjb2x1
bW5OYW1lcyJfcywgdG9KU09OU3RyaW5nQXJyYXkoY29sdW1uTmFtZXMpKTsKLSAgICAgICAgcmVz
dWx0T2JqZWN0LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCBub3Rlcyk7Ci0gICAgICAgIHJlc3VsdE9i
amVjdC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsIHRpbWVzdGFtcCk7Ci0gICAgICAgIHJlc3Vs
dE9iamVjdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIFt2YWx1ZXMgdG9KU09OT2JqZWN0XSk7Ci0g
ICAgICAgIHJlc3VsdE9iamVjdC0+c2V0VmFsdWUoInBheWxvYWQiX3MsIFtwYXlsb2FkIHRvSlNP
Tk9iamVjdF0pOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldEludGVnZXIoImRhdGFiYXNlSWQi
X3MsIGRhdGFiYXNlSWQpOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldE9iamVjdCgic3FsRXJy
b3IiX3MsIFtzcWxFcnJvciB0b0pTT05PYmplY3RdKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5z
ZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCB0b0pTT05TdHJpbmdBcnJheShhbHRlcm5hdGVD
b2xvcnMpKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9z
LCB0b1Byb3RvY29sU3RyaW5nKHNjcmVlbkNvbG9yKSk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+
c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCB0b1Byb3RvY29sU3RyaW5nKHByaW50Q29sb3IpKTsK
LSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RG
TW92ZShyZXN1bHRPYmplY3QpLCBmYWxzZSk7CisgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXihO
U0FycmF5Lyo8TlNTdHJpbmc+Ki8gKm91dF9jb2x1bW5OYW1lcywgTlNTdHJpbmcgKm91dF9ub3Rl
cywgZG91YmxlIG91dF90aW1lc3RhbXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqb3V0X3ZhbHVl
cywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpvdXRfcGF5bG9hZCwgaW50IG91dF9kYXRhYmFzZUlk
LCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICpvdXRfc3FsRXJyb3IsIE5TQXJyYXkvKjxOU1N0
cmluZz4qLyAqb3V0X2FsdGVybmF0ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5
Q29sb3JzIG91dF9zY3JlZW5Db2xvciwgVGVzdFByb3RvY29sRGF0YWJhc2UoYW5vbnltb3VzKSBv
dXRfcHJpbnRDb2xvcikgeworICAgICAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNP
Tjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJF
RF9QQVJBTUVURVIob3V0X2NvbHVtbk5hbWVzLCBAImNvbHVtbk5hbWVzIik7CisgICAgICAgIFRI
Uk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKG91dF9ub3RlcywgQCJub3RlcyIp
OworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihvdXRfdmFs
dWVzLCBAInZhbHVlcyIpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BB
UkFNRVRFUihvdXRfcGF5bG9hZCwgQCJwYXlsb2FkIik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKG91dF9zcWxFcnJvciwgQCJzcWxFcnJvciIpOworICAg
ICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihvdXRfYWx0ZXJuYXRl
Q29sb3JzLCBAImFsdGVybmF0ZUNvbG9ycyIpOworICAgICAgICBwcm90b2NvbF9qc29uTWVzc2Fn
ZS0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCB0b0pTT05TdHJpbmdBcnJheShvdXRfY29sdW1u
TmFtZXMpKTsKKyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygibm90ZXMi
X3MsIG91dF9ub3Rlcyk7CisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXREb3VibGUo
InRpbWVzdGFtcCJfcywgb3V0X3RpbWVzdGFtcCk7CisgICAgICAgIHByb3RvY29sX2pzb25NZXNz
YWdlLT5zZXRPYmplY3QoInZhbHVlcyJfcywgW291dF92YWx1ZXMgdG9KU09OT2JqZWN0XSk7Cisg
ICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgW291dF9w
YXlsb2FkIHRvSlNPTk9iamVjdF0pOworICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0
SW50ZWdlcigiZGF0YWJhc2VJZCJfcywgb3V0X2RhdGFiYXNlSWQpOworICAgICAgICBwcm90b2Nv
bF9qc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJzcWxFcnJvciJfcywgW291dF9zcWxFcnJvciB0b0pT
T05PYmplY3RdKTsKKyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldEFycmF5KCJhbHRl
cm5hdGVDb2xvcnMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KG91dF9hbHRlcm5hdGVDb2xvcnMpKTsK
KyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygic2NyZWVuQ29sb3IiX3Ms
IHRvUHJvdG9jb2xTdHJpbmcob3V0X3NjcmVlbkNvbG9yKSk7CisgICAgICAgIHByb3RvY29sX2pz
b25NZXNzYWdlLT5zZXRTdHJpbmcoInByaW50Q29sb3IiX3MsIHRvUHJvdG9jb2xTdHJpbmcob3V0
X3ByaW50Q29sb3IpKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNl
KHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSksIGZhbHNlKTsK
ICAgICB9OwogCiAgICAgaW50IG9faW5fZGF0YWJhc2VJZCA9IGluX2RhdGFiYXNlSWQ7CiAgICAg
TlNTdHJpbmcgKm9faW5fcXVlcnkgPSBpbl9xdWVyeTsKLQogICAgIFttX2RlbGVnYXRlIGV4ZWN1
dGVTUUxTeW5jV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6
c3VjY2Vzc0NhbGxiYWNrIGRhdGFiYXNlSWQ6b19pbl9kYXRhYmFzZUlkIHF1ZXJ5Om9faW5fcXVl
cnldOwogfQogCi12b2lkIE9iakNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpl
eGVjdXRlU1FMQXN5bmMobG9uZyByZXF1ZXN0SWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBT
dHJpbmcmIGluX3F1ZXJ5KQordm9pZCBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0
Y2hlcjo6ZXhlY3V0ZVNRTEFzeW5jKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBpbnQgaW5fZGF0YWJh
c2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSkKIHsKICAgICBpZiAoIVttX2RlbGVnYXRlIHJl
c3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoZXhlY3V0ZVNRTEFzeW5jV2l0aEVycm9yQ2FsbGJh
Y2s6c3VjY2Vzc0NhbGxiYWNrOmRhdGFiYXNlSWQ6cXVlcnk6KV0pIHsKLSAgICAgICAgYmFja2Vu
ZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNw
YXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEYXRhYmFzZS5leGVjdXRlU1FMQXN5bmMnIHdhcyBu
b3QgZm91bmQiX3MpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2Nv
bEVycm9yKHByb3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5k
LCAiJ0RhdGFiYXNlLmV4ZWN1dGVTUUxBc3luYycgd2FzIG5vdCBmb3VuZCJfcyk7CiAgICAgICAg
IGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKICAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsK
LSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0
SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgICAgICBiYWNr
ZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHByb3RvY29sX2NhbGxJZCwgQmFj
a2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CiAgICAgICAgIGJhY2tlbmREaXNw
YXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgfTsKIAotICAgIGlkIHN1Y2Nlc3ND
YWxsYmFjayA9IF4oTlNBcnJheS8qPE5TU3RyaW5nPiovICpjb2x1bW5OYW1lcywgTlNTdHJpbmcg
Km5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKnZhbHVlcywg
UldJUHJvdG9jb2xKU09OT2JqZWN0ICpwYXlsb2FkLCBpbnQgZGF0YWJhc2VJZCwgVGVzdFByb3Rv
Y29sRGF0YWJhc2VFcnJvciAqc3FsRXJyb3IsIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNv
bG9ycyBzY3JlZW5Db2xvciwgTlNBcnJheS8qPE5TU3RyaW5nPiovICphbHRlcm5hdGVDb2xvcnMs
IFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jUHJpbnRDb2xvciBwcmludENvbG9y
KSB7Ci0gICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdE9iamVjdCA9IEpTT046Ok9iamVj
dDo6Y3JlYXRlKCk7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1F
VEVSKGNvbHVtbk5hbWVzLCBAImNvbHVtbk5hbWVzIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKG5vdGVzLCBAIm5vdGVzIik7Ci0gICAgICAgIFRIUk9X
X0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKHZhbHVlcywgQCJ2YWx1ZXMiKTsKLSAg
ICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIocGF5bG9hZCwgQCJw
YXlsb2FkIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVS
KHNxbEVycm9yLCBAInNxbEVycm9yIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVR
VUlSRURfUEFSQU1FVEVSKGFsdGVybmF0ZUNvbG9ycywgQCJhbHRlcm5hdGVDb2xvcnMiKTsKLSAg
ICAgICAgcmVzdWx0T2JqZWN0LT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIHRvSlNPTlN0cmlu
Z0FycmF5KGNvbHVtbk5hbWVzKSk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKCJu
b3RlcyJfcywgbm90ZXMpOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldERvdWJsZSgidGltZXN0
YW1wIl9zLCB0aW1lc3RhbXApOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldE9iamVjdCgidmFs
dWVzIl9zLCBbdmFsdWVzIHRvSlNPTk9iamVjdF0pOwotICAgICAgICByZXN1bHRPYmplY3QtPnNl
dFZhbHVlKCJwYXlsb2FkIl9zLCBbcGF5bG9hZCB0b0pTT05PYmplY3RdKTsKLSAgICAgICAgcmVz
dWx0T2JqZWN0LT5zZXRJbnRlZ2VyKCJkYXRhYmFzZUlkIl9zLCBkYXRhYmFzZUlkKTsKLSAgICAg
ICAgcmVzdWx0T2JqZWN0LT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBbc3FsRXJyb3IgdG9KU09O
T2JqZWN0XSk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJf
cywgdG9Qcm90b2NvbFN0cmluZyhzY3JlZW5Db2xvcikpOwotICAgICAgICByZXN1bHRPYmplY3Qt
PnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KGFsdGVybmF0
ZUNvbG9ycykpOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZygicHJpbnRDb2xvciJf
cywgdG9Qcm90b2NvbFN0cmluZyhwcmludENvbG9yKSk7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRj
aGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0T2JqZWN0KSwgZmFs
c2UpOworICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF4oTlNBcnJheS8qPE5TU3RyaW5nPiovICpv
dXRfY29sdW1uTmFtZXMsIE5TU3RyaW5nICpvdXRfbm90ZXMsIGRvdWJsZSBvdXRfdGltZXN0YW1w
LCBSV0lQcm90b2NvbEpTT05PYmplY3QgKm91dF92YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVj
dCAqb3V0X3BheWxvYWQsIGludCBvdXRfZGF0YWJhc2VJZCwgVGVzdFByb3RvY29sRGF0YWJhc2VF
cnJvciAqb3V0X3NxbEVycm9yLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgb3V0
X3NjcmVlbkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKm91dF9hbHRlcm5hdGVDb2xvcnMs
IFRlc3RQcm90b2NvbERhdGFiYXNlKGFub255bW91cykgb3V0X3ByaW50Q29sb3IpIHsKKyAgICAg
ICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Cisg
ICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKG91dF9jb2x1bW5O
YW1lcywgQCJjb2x1bW5OYW1lcyIpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJ
UkVEX1BBUkFNRVRFUihvdXRfbm90ZXMsIEAibm90ZXMiKTsKKyAgICAgICAgVEhST1dfRVhDRVBU
SU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIob3V0X3ZhbHVlcywgQCJ2YWx1ZXMiKTsKKyAgICAg
ICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIob3V0X3BheWxvYWQsIEAi
cGF5bG9hZCIpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRF
UihvdXRfc3FsRXJyb3IsIEAic3FsRXJyb3IiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZP
Ul9SRVFVSVJFRF9QQVJBTUVURVIob3V0X2FsdGVybmF0ZUNvbG9ycywgQCJhbHRlcm5hdGVDb2xv
cnMiKTsKKyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldEFycmF5KCJjb2x1bW5OYW1l
cyJfcywgdG9KU09OU3RyaW5nQXJyYXkob3V0X2NvbHVtbk5hbWVzKSk7CisgICAgICAgIHByb3Rv
Y29sX2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm5vdGVzIl9zLCBvdXRfbm90ZXMpOworICAgICAg
ICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsIG91dF90aW1l
c3RhbXApOworICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJ2YWx1ZXMi
X3MsIFtvdXRfdmFsdWVzIHRvSlNPTk9iamVjdF0pOworICAgICAgICBwcm90b2NvbF9qc29uTWVz
c2FnZS0+c2V0VmFsdWUoInBheWxvYWQiX3MsIFtvdXRfcGF5bG9hZCB0b0pTT05PYmplY3RdKTsK
KyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldEludGVnZXIoImRhdGFiYXNlSWQiX3Ms
IG91dF9kYXRhYmFzZUlkKTsKKyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldE9iamVj
dCgic3FsRXJyb3IiX3MsIFtvdXRfc3FsRXJyb3IgdG9KU09OT2JqZWN0XSk7CisgICAgICAgIHBy
b3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCB0b1Byb3RvY29s
U3RyaW5nKG91dF9zY3JlZW5Db2xvcikpOworICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+
c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywgdG9KU09OU3RyaW5nQXJyYXkob3V0X2FsdGVy
bmF0ZUNvbG9ycykpOworICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJw
cmludENvbG9yIl9zLCB0b1Byb3RvY29sU3RyaW5nKG91dF9wcmludENvbG9yKSk7CisgICAgICAg
IGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShwcm90b2NvbF9jYWxsSWQsIFdURk1v
dmUocHJvdG9jb2xfanNvbk1lc3NhZ2UpLCBmYWxzZSk7CiAgICAgfTsKIAogICAgIGludCBvX2lu
X2RhdGFiYXNlSWQgPSBpbl9kYXRhYmFzZUlkOwogICAgIE5TU3RyaW5nICpvX2luX3F1ZXJ5ID0g
aW5fcXVlcnk7Ci0KICAgICBbbV9kZWxlZ2F0ZSBleGVjdXRlU1FMQXN5bmNXaXRoRXJyb3JDYWxs
YmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2sgZGF0YWJh
c2VJZDpvX2luX2RhdGFiYXNlSWQgcXVlcnk6b19pbl9xdWVyeV07CiB9CiAKQEAgLTEzNDYsMTAg
KzEzMTQsMTAgQEAgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCiAKIEBw
cm90b2NvbCBUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkhhbmRsZXIgPE5TT2JqZWN0PgogQG9w
dGlvbmFsCi0tICh2b2lkKWV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNXaXRoRXJy
b3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vz
c0NhbGxiYWNrOih2b2lkKF4pKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKmNvbHVtbk5hbWVzLCBO
U1N0cmluZyAqKm5vdGVzLCBkb3VibGUgKnRpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0
ICoqdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKipwYXlsb2FkLCBpbnQgKmRhdGFiYXNl
SWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKipzcWxFcnJvciwgVGVzdFByb3RvY29sRGF0
YWJhc2VQcmltYXJ5Q29sb3JzICpzY3JlZW5Db2xvciwgTlNBcnJheS8qPE5TU3RyaW5nPiovICoq
YWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jT3B0aW9u
YWxSZXR1cm5WYWx1ZXNQcmludENvbG9yICpwcmludENvbG9yKSlzdWNjZXNzQ2FsbGJhY2sgZGF0
YWJhc2VJZDooaW50KWRhdGFiYXNlSWQgcXVlcnk6KE5TU3RyaW5nICopcXVlcnk7Ci0tICh2b2lk
KWV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzV2l0aEVycm9yQ2FsbGJhY2s6KHZv
aWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9p
ZCheKShOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKipjb2x1bW5OYW1lcywgTlNTdHJpbmcgKipub3Rl
cywgZG91YmxlICp0aW1lc3RhbXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqKnZhbHVlcywgUldJ
UHJvdG9jb2xKU09OT2JqZWN0ICoqcGF5bG9hZCwgaW50ICpkYXRhYmFzZUlkLCBUZXN0UHJvdG9j
b2xEYXRhYmFzZUVycm9yICoqc3FsRXJyb3IsIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNv
bG9ycyAqc2NyZWVuQ29sb3IsIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKmFsdGVybmF0ZUNvbG9y
cywgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVl
c1ByaW50Q29sb3IgKnByaW50Q29sb3IpKXN1Y2Nlc3NDYWxsYmFjayBkYXRhYmFzZUlkOihpbnQp
ZGF0YWJhc2VJZCBxdWVyeTooTlNTdHJpbmcgKilxdWVyeTsKLS0gKHZvaWQpZXhlY3V0ZVNRTFN5
bmNXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJh
Y2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqY29sdW1u
TmFtZXMsIE5TU3RyaW5nICpub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09O
T2JqZWN0ICp2YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqcGF5bG9hZCwgaW50IGRhdGFi
YXNlSWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKnNxbEVycm9yLCBOU0FycmF5Lyo8TlNT
dHJpbmc+Ki8gKmFsdGVybmF0ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29s
b3JzIHNjcmVlbkNvbG9yLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jUHJpbnRD
b2xvciBwcmludENvbG9yKSlzdWNjZXNzQ2FsbGJhY2sgZGF0YWJhc2VJZDooaW50KWRhdGFiYXNl
SWQgcXVlcnk6KE5TU3RyaW5nICopcXVlcnk7Ci0tICh2b2lkKWV4ZWN1dGVTUUxBc3luY1dpdGhF
cnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNj
ZXNzQ2FsbGJhY2s6KHZvaWQoXikoTlNBcnJheS8qPE5TU3RyaW5nPiovICpjb2x1bW5OYW1lcywg
TlNTdHJpbmcgKm5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05PYmplY3Qg
KnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpwYXlsb2FkLCBpbnQgZGF0YWJhc2VJZCwg
VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqc3FsRXJyb3IsIFRlc3RQcm90b2NvbERhdGFiYXNl
UHJpbWFyeUNvbG9ycyBzY3JlZW5Db2xvciwgTlNBcnJheS8qPE5TU3RyaW5nPiovICphbHRlcm5h
dGVDb2xvcnMsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jUHJpbnRDb2xvciBw
cmludENvbG9yKSlzdWNjZXNzQ2FsbGJhY2sgZGF0YWJhc2VJZDooaW50KWRhdGFiYXNlSWQgcXVl
cnk6KE5TU3RyaW5nICopcXVlcnk7CistICh2b2lkKWV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1
cm5WYWx1ZXNXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9y
Q2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAq
KmNvbHVtbk5hbWVzLCBOU1N0cmluZyAqKm5vdGVzLCBkb3VibGUgKnRpbWVzdGFtcCwgUldJUHJv
dG9jb2xKU09OT2JqZWN0ICoqdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKipwYXlsb2Fk
LCBpbnQgKmRhdGFiYXNlSWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKipzcWxFcnJvciwg
VGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzICpzY3JlZW5Db2xvciwgTlNBcnJheS8q
PE5TU3RyaW5nPiovICoqYWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZShhbm9u
eW1vdXMpICpwcmludENvbG9yKSlzdWNjZXNzQ2FsbGJhY2sgZGF0YWJhc2VJZDooaW50KWRhdGFi
YXNlSWQgcXVlcnk6KE5TU3RyaW5nICopcXVlcnk7CistICh2b2lkKWV4ZWN1dGVTUUxBc3luY09w
dGlvbmFsUmV0dXJuVmFsdWVzV2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVy
cm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKShOU0FycmF5Lyo8TlNT
dHJpbmc+Ki8gKipjb2x1bW5OYW1lcywgTlNTdHJpbmcgKipub3RlcywgZG91YmxlICp0aW1lc3Rh
bXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0
ICoqcGF5bG9hZCwgaW50ICpkYXRhYmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoq
c3FsRXJyb3IsIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyAqc2NyZWVuQ29sb3Is
IE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKmFsdGVybmF0ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0
YWJhc2UoYW5vbnltb3VzKSAqcHJpbnRDb2xvcikpc3VjY2Vzc0NhbGxiYWNrIGRhdGFiYXNlSWQ6
KGludClkYXRhYmFzZUlkIHF1ZXJ5OihOU1N0cmluZyAqKXF1ZXJ5OworLSAodm9pZClleGVjdXRl
U1FMU3luY1dpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JD
YWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikoTlNBcnJheS8qPE5TU3RyaW5nPiovICpj
b2x1bW5OYW1lcywgTlNTdHJpbmcgKm5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBSV0lQcm90b2Nv
bEpTT05PYmplY3QgKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpwYXlsb2FkLCBpbnQg
ZGF0YWJhc2VJZCwgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqc3FsRXJyb3IsIE5TQXJyYXkv
KjxOU1N0cmluZz4qLyAqYWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1h
cnlDb2xvcnMgc2NyZWVuQ29sb3IsIFRlc3RQcm90b2NvbERhdGFiYXNlKGFub255bW91cykgcHJp
bnRDb2xvcikpc3VjY2Vzc0NhbGxiYWNrIGRhdGFiYXNlSWQ6KGludClkYXRhYmFzZUlkIHF1ZXJ5
OihOU1N0cmluZyAqKXF1ZXJ5OworLSAodm9pZClleGVjdXRlU1FMQXN5bmNXaXRoRXJyb3JDYWxs
YmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxi
YWNrOih2b2lkKF4pKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqY29sdW1uTmFtZXMsIE5TU3RyaW5n
ICpub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0ICp2YWx1ZXMs
IFJXSVByb3RvY29sSlNPTk9iamVjdCAqcGF5bG9hZCwgaW50IGRhdGFiYXNlSWQsIFRlc3RQcm90
b2NvbERhdGFiYXNlRXJyb3IgKnNxbEVycm9yLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlD
b2xvcnMgc2NyZWVuQ29sb3IsIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqYWx0ZXJuYXRlQ29sb3Jz
LCBUZXN0UHJvdG9jb2xEYXRhYmFzZShhbm9ueW1vdXMpIHByaW50Q29sb3IpKXN1Y2Nlc3NDYWxs
YmFjayBkYXRhYmFzZUlkOihpbnQpZGF0YWJhc2VJZCBxdWVyeTooTlNTdHJpbmcgKilxdWVyeTsK
IEBlbmQKIAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1w
YXJhbWV0ZXJzLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2NvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4t
cGFyYW1ldGVycy5qc29uLXJlc3VsdAppbmRleCAxZjJmNDVkNzRjMzkzOTExMTIzNmE4NjdkN2Zm
ZmQyNDBlNmQ5OWM1Li4zZTQ0Mjc0ODk0YzJlZDA2NGVlOGQxOTllMWEwZTRjMTE0NGFiZmNlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
ZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpz
b24tcmVzdWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9leHBlY3RlZC9jb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRl
cnMuanNvbi1yZXN1bHQKQEAgLTcwLDcgKzcwLDcgQEAgSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0
ZURvbWFpbigiRGF0YWJhc2UiLCBudWxsKTsKIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJO
QVRFX0RJU1BBVENIRVJTKQogCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKKyNpbmNs
dWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JGcm9udGVuZFJvdXRlci5oPgogCkBAIC04OCw4ICs4OCw4IEBAIHByaXZhdGU6CiBjbGFz
cyBBbHRlcm5hdGVEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyIDogcHVibGljIEFsdGVybmF0ZUJh
Y2tlbmREaXNwYXRjaGVyIHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5BbHRlcm5hdGVEYXRhYmFz
ZUJhY2tlbmREaXNwYXRjaGVyKCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVBbGxPcHRp
b25hbFBhcmFtZXRlcnMobG9uZyBjYWxsSWQsIGNvbnN0IEpTT046OkFycmF5KiBpbl9jb2x1bW5O
YW1lcywgY29uc3QgU3RyaW5nKiBpbl9ub3RlcywgY29uc3QgZG91YmxlKiBpbl90aW1lc3RhbXAs
IGNvbnN0IEpTT046Ok9iamVjdCogaW5fdmFsdWVzLCBjb25zdCBKU09OOjpWYWx1ZSogaW5fcGF5
bG9hZCwgY29uc3QgaW50KiBpbl9kYXRhYmFzZUlkLCBjb25zdCBKU09OOjpPYmplY3QqIGluX3Nx
bEVycm9yLCBjb25zdCBTdHJpbmcqIGluX3NjcmVlbkNvbG9yLCBjb25zdCBKU09OOjpBcnJheSog
aW5fYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcqIGluX3ByaW50Q29sb3IpID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgY2FsbElkLCBj
b25zdCBKU09OOjpBcnJheSYgaW5fY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgaW5fbm90ZXMs
IGRvdWJsZSBpbl90aW1lc3RhbXAsIGNvbnN0IEpTT046Ok9iamVjdCYgaW5fdmFsdWVzLCBKU09O
OjpWYWx1ZSBpbl9wYXlsb2FkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgSlNPTjo6T2JqZWN0
JiBpbl9zcWxFcnJvciwgY29uc3QgU3RyaW5nJiBpbl9zY3JlZW5Db2xvciwgY29uc3QgSlNPTjo6
QXJyYXkmIGluX2FsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nJiBpbl9wcmludENvbG9yKSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMobG9uZyBw
cm90b2NvbF9jYWxsSWQsIFJlZlB0cjxKU09OOjpBcnJheT4mJiBvcHRfY29sdW1uTmFtZXMsIGNv
bnN0IFN0cmluZyYgb3B0X25vdGVzLCBPcHRpb25hbDxkb3VibGU+JiYgb3B0X3RpbWVzdGFtcCwg
UmVmUHRyPEpTT046Ok9iamVjdD4mJiBvcHRfdmFsdWVzLCBSZWZQdHI8SlNPTjo6VmFsdWU+JiYg
b3B0X3BheWxvYWQsIE9wdGlvbmFsPGludD4mJiBvcHRfZGF0YWJhc2VJZCwgUmVmUHRyPEpTT046
Ok9iamVjdD4mJiBvcHRfc3FsRXJyb3IsIGNvbnN0IFN0cmluZyYgb3B0X3NjcmVlbkNvbG9yLCBS
ZWZQdHI8SlNPTjo6QXJyYXk+JiYgb3B0X2FsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nJiBv
cHRfcHJpbnRDb2xvcikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlTm9PcHRpb25hbFBh
cmFtZXRlcnMobG9uZyBwcm90b2NvbF9jYWxsSWQsIFJlZjxKU09OOjpBcnJheT4mJiBjb2x1bW5O
YW1lcywgY29uc3QgU3RyaW5nJiBub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgUmVmPEpTT046Ok9i
amVjdD4mJiB2YWx1ZXMsIFJlZjxKU09OOjpWYWx1ZT4mJiBwYXlsb2FkLCBpbnQgZGF0YWJhc2VJ
ZCwgUmVmPEpTT046Ok9iamVjdD4mJiBzcWxFcnJvciwgY29uc3QgU3RyaW5nJiBzY3JlZW5Db2xv
ciwgUmVmPEpTT046OkFycmF5PiYmIGFsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nJiBwcmlu
dENvbG9yKSA9IDA7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKQEAgLTEzMSwxMSAr
MTMxLDE0IEBAIHB1YmxpYzoKIAogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2lu
Y2x1ZGUgPHR1cGxlPgorI2luY2x1ZGUgPHd0Zi9FeHBlY3RlZC5oPgorI2luY2x1ZGUgPHd0Zi9P
cHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKIAotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKIAogI2lmIEVOQUJM
RShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogY2xhc3MgQWx0ZXJuYXRlRGF0YWJh
c2VCYWNrZW5kRGlzcGF0Y2hlcjsKQEAgLTE0MywxNSArMTQ2LDggQEAgY2xhc3MgQWx0ZXJuYXRl
RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjsKIAogY2xhc3MgRGF0YWJhc2VCYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXIgewogcHVibGljOgotICAgIC8vIE5hbWVkIGFmdGVyIHBhcmFtZXRlciAncHJp
bnRDb2xvcicgd2hpbGUgZ2VuZXJhdGluZyBjb21tYW5kL2V2ZW50IGV4ZWN1dGVBbGxPcHRpb25h
bFBhcmFtZXRlcnMuCi0gICAgZW51bSBjbGFzcyBQcmludENvbG9yIHsKLSAgICAgICAgQ3lhbiA9
IDMsCi0gICAgICAgIE1hZ2VudGEgPSA0LAotICAgICAgICBZZWxsb3cgPSA1LAotICAgICAgICBC
bGFjayA9IDYsCi0gICAgfTsgLy8gZW51bSBjbGFzcyBQcmludENvbG9yCi0gICAgdmlydHVhbCB2
b2lkIGV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMoRXJyb3JTdHJpbmcmLCBjb25zdCBKU09O
OjpBcnJheSogb3B0X2luX2NvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcqIG9wdF9pbl9ub3Rlcywg
Y29uc3QgZG91YmxlKiBvcHRfaW5fdGltZXN0YW1wLCBjb25zdCBKU09OOjpPYmplY3QqIG9wdF9p
bl92YWx1ZXMsIGNvbnN0IEpTT046OlZhbHVlKiBvcHRfaW5fcGF5bG9hZCwgY29uc3QgaW50KiBv
cHRfaW5fZGF0YWJhc2VJZCwgY29uc3QgSlNPTjo6T2JqZWN0KiBvcHRfaW5fc3FsRXJyb3IsIGNv
bnN0IFN0cmluZyogb3B0X2luX3NjcmVlbkNvbG9yLCBjb25zdCBKU09OOjpBcnJheSogb3B0X2lu
X2FsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nKiBvcHRfaW5fcHJpbnRDb2xvciwgUmVmUHRy
PEpTT046OkFycmF5T2Y8U3RyaW5nPj4mIG9wdF9vdXRfY29sdW1uTmFtZXMsIE9wdGlvbmFsPFN0
cmluZz4mIG9wdF9vdXRfbm90ZXMsIE9wdGlvbmFsPGRvdWJsZT4mIG9wdF9vdXRfdGltZXN0YW1w
LCBPcHRpb25hbDxKU09OOjpPYmplY3Q+JiBvcHRfb3V0X3ZhbHVlcywgT3B0aW9uYWw8SlNPTjo6
VmFsdWU+JiBvcHRfb3V0X3BheWxvYWQsIE9wdGlvbmFsPGludD4mIG9wdF9vdXRfZGF0YWJhc2VJ
ZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4mIG9wdF9vdXRf
c3FsRXJyb3IsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzKiBv
cHRfb3V0X3NjcmVlbkNvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6
OkNvbG9yTGlzdD4mIG9wdF9vdXRfYWx0ZXJuYXRlQ29sb3JzLCBEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVySGFuZGxlcjo6UHJpbnRDb2xvciogb3B0X291dF9wcmludENvbG9yKSA9IDA7Ci0gICAg
dmlydHVhbCB2b2lkIGV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhFcnJvclN0cmluZyYsIGNv
bnN0IEpTT046OkFycmF5JiBpbl9jb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBpbl9ub3Rlcywg
ZG91YmxlIGluX3RpbWVzdGFtcCwgY29uc3QgSlNPTjo6T2JqZWN0JiBpbl92YWx1ZXMsIEpTT046
OlZhbHVlIGluX3BheWxvYWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBKU09OOjpPYmplY3Qm
IGluX3NxbEVycm9yLCBjb25zdCBTdHJpbmcmIGluX3NjcmVlbkNvbG9yLCBjb25zdCBKU09OOjpB
cnJheSYgaW5fYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcmIGluX3ByaW50Q29sb3IsIFJl
ZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+JiBvdXRfY29sdW1uTmFtZXMsIFN0cmluZyogb3V0
X25vdGVzLCBkb3VibGUqIG91dF90aW1lc3RhbXAsIEpTT046Ok9iamVjdCogb3V0X3ZhbHVlcywg
SlNPTjo6VmFsdWUqIG91dF9wYXlsb2FkLCBpbnQqIG91dF9kYXRhYmFzZUlkLCBSZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiYgb3V0X3NxbEVycm9yLCBJbnNwZWN0
b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyogb3V0X3NjcmVlbkNvbG9yLCBS
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4mIG91dF9hbHRl
cm5hdGVDb2xvcnMsIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQcmludENvbG9y
KiBvdXRfcHJpbnRDb2xvcikgPSAwOworICAgIHZpcnR1YWwgUHJvdG9jb2w6OkVycm9yU3RyaW5n
T3I8c3RkOjp0dXBsZTxSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiAvKiBvcHRfY29sdW1u
TmFtZXMgKi8sIFN0cmluZyAvKiBvcHRfbm90ZXMgKi8sIE9wdGlvbmFsPGRvdWJsZT4gLyogb3B0
X3RpbWVzdGFtcCAqLywgUmVmUHRyPEpTT046Ok9iamVjdD4gLyogb3B0X3ZhbHVlcyAqLywgUmVm
UHRyPEpTT046OlZhbHVlPiAvKiBvcHRfcGF5bG9hZCAqLywgT3B0aW9uYWw8aW50PiAvKiBvcHRf
ZGF0YWJhc2VJZCAqLywgUmVmUHRyPFByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IC8qIG9wdF9z
cWxFcnJvciAqLywgT3B0aW9uYWw8UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPiAv
KiBvcHRfc2NyZWVuQ29sb3IgKi8sIFJlZlB0cjxQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlz
dD4gLyogb3B0X2FsdGVybmF0ZUNvbG9ycyAqLywgU3RyaW5nIC8qIG9wdF9wcmludENvbG9yICov
Pj4gZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhSZWZQdHI8SlNPTjo6QXJyYXk+JiYgb3B0
X2NvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIG9wdF9ub3RlcywgT3B0aW9uYWw8ZG91YmxlPiYm
IG9wdF90aW1lc3RhbXAsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgb3B0X3ZhbHVlcywgUmVmUHRy
PEpTT046OlZhbHVlPiYmIG9wdF9wYXlsb2FkLCBPcHRpb25hbDxpbnQ+JiYgb3B0X2RhdGFiYXNl
SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgb3B0X3NxbEVycm9yLCBPcHRpb25hbDxQcm90b2Nv
bDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+JiYgb3B0X3NjcmVlbkNvbG9yLCBSZWZQdHI8SlNP
Tjo6QXJyYXk+JiYgb3B0X2FsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nJiBvcHRfcHJpbnRD
b2xvcikgPSAwOworICAgIHZpcnR1YWwgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8c3RkOjp0dXBs
ZTxSZWY8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiAvKiBjb2x1bW5OYW1lcyAqLywgU3RyaW5nIC8q
IG5vdGVzICovLCBkb3VibGUgLyogdGltZXN0YW1wICovLCBSZWY8SlNPTjo6T2JqZWN0PiAvKiB2
YWx1ZXMgKi8sIFJlZjxKU09OOjpWYWx1ZT4gLyogcGF5bG9hZCAqLywgaW50IC8qIGRhdGFiYXNl
SWQgKi8sIFJlZjxQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiAvKiBzcWxFcnJvciAqLywgUHJv
dG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzIC8qIHNjcmVlbkNvbG9yICovLCBSZWY8UHJv
dG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+IC8qIGFsdGVybmF0ZUNvbG9ycyAqLywgU3RyaW5n
IC8qIHByaW50Q29sb3IgKi8+PiBleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMoUmVmPEpTT046
OkFycmF5PiYmIGNvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIG5vdGVzLCBkb3VibGUgdGltZXN0
YW1wLCBSZWY8SlNPTjo6T2JqZWN0PiYmIHZhbHVlcywgUmVmPEpTT046OlZhbHVlPiYmIHBheWxv
YWQsIGludCBkYXRhYmFzZUlkLCBSZWY8SlNPTjo6T2JqZWN0PiYmIHNxbEVycm9yLCBQcm90b2Nv
bDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMgc2NyZWVuQ29sb3IsIFJlZjxKU09OOjpBcnJheT4m
JiBhbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyYgcHJpbnRDb2xvcikgPSAwOwogcHJvdGVj
dGVkOgogICAgIHZpcnR1YWwgfkRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCk7CiB9
OwpAQCAtMTU5LDEwICsxNTUsMTAgQEAgcHJvdGVjdGVkOgogY2xhc3MgRGF0YWJhc2VCYWNrZW5k
RGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7
CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyPiBjcmVh
dGUoQmFja2VuZERpc3BhdGNoZXImLCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciop
OwotICAgIHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9k
LCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpIGZpbmFsOworICAgIHZvaWQgZGlzcGF0Y2go
bG9uZyBwcm90b2NvbF9jYWxsSWQsIGNvbnN0IFN0cmluZyYgcHJvdG9jb2xfbWV0aG9kLCBSZWY8
SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX21lc3NhZ2UpIGZpbmFsOwogcHJpdmF0ZToKLSAgICB2
b2lkIGV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxK
U09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7Ci0gICAgdm9pZCBleGVjdXRlTm9PcHRpb25hbFBh
cmFtZXRlcnMobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVy
cyk7CisgICAgdm9pZCBleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcHJvdG9jbF9j
YWxsSWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfcGFyYW1ldGVycyk7CisgICAg
dm9pZCBleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMobG9uZyBwcm90b2NsX2NhbGxJZCwgUmVm
UHRyPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9wYXJhbWV0ZXJzKTsKICNpZiBFTkFCTEUoSU5T
UEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIHB1YmxpYzoKICAgICB2b2lkIHNldEFsdGVy
bmF0ZURpc3BhdGNoZXIoQWx0ZXJuYXRlRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciogYWx0ZXJu
YXRlRGlzcGF0Y2hlcikgeyBtX2FsdGVybmF0ZURpc3BhdGNoZXIgPSBhbHRlcm5hdGVEaXNwYXRj
aGVyOyB9CkBAIC0yMTEsOSArMjA3LDcgQEAgcHJpdmF0ZToKICNpbmNsdWRlICJUZXN0QmFja2Vu
ZERpc3BhdGNoZXJzLmgiCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9u
dGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CiAjaW5jbHVkZSA8d3Rm
L05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiAjaWYg
RU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAjaW5jbHVkZSAiVGVzdEFs
dGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgpAQCAtMjM1LDQ3ICsyMjksMzYgQEAgRGF0YWJh
c2VCYWNrZW5kRGlzcGF0Y2hlcjo6RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlz
cGF0Y2hlciYgYmFja2VuZEQKICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3Bh
dGNoZXJGb3JEb21haW4oIkRhdGFiYXNlIl9zLCB0aGlzKTsKIH0KIAotdm9pZCBEYXRhYmFzZUJh
Y2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBt
ZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkKK3ZvaWQgRGF0YWJhc2VCYWNrZW5k
RGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyBwcm90b2NvbF9jYWxsSWQsIGNvbnN0IFN0cmluZyYg
cHJvdG9jb2xfbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX21lc3NhZ2UpCiB7
CiAgICAgUmVmPERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOwogCi0g
ICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVyczsKLSAgICBtZXNzYWdlLT5nZXRPYmpl
Y3QoInBhcmFtcyJfcywgcGFyYW1ldGVycyk7CisgICAgYXV0byBwcm90b2NvbF9wYXJhbWV0ZXJz
ID0gcHJvdG9jb2xfbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3MpOwogCi0gICAgaWYgKG1l
dGhvZCA9PSAiZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyIpIHsKLSAgICAgICAgZXhlY3V0
ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykpOwor
ICAgIGlmIChwcm90b2NvbF9tZXRob2QgPT0gImV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMi
KSB7CisgICAgICAgIGV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMocHJvdG9jb2xfY2FsbElk
LCBXVEZNb3ZlKHByb3RvY29sX3BhcmFtZXRlcnMpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
LSAgICBpZiAobWV0aG9kID09ICJleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMiKSB7Ci0gICAg
ICAgIGV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1l
dGVycykpOworICAgIGlmIChwcm90b2NvbF9tZXRob2QgPT0gImV4ZWN1dGVOb09wdGlvbmFsUGFy
YW1ldGVycyIpIHsKKyAgICAgICAgZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKHByb3RvY29s
X2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9wYXJhbWV0ZXJzKSk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJh
Y2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEYXRhYmFzZS4iICsgbWV0aG9kICsg
Iicgd2FzIG5vdCBmb3VuZCIpOworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3Rv
Y29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RhdGFiYXNlLiIg
KyBwcm90b2NvbF9tZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7CiB9CiAKLXZvaWQgRGF0YWJh
c2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhsb25nIHJl
cXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKQordm9pZCBEYXRhYmFz
ZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcHJv
dG9jb2xfY2FsbElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX3BhcmFtZXRlcnMp
CiB7Ci0gICAgYm9vbCBvcHRfaW5fY29sdW1uTmFtZXNfdmFsdWVGb3VuZCA9IGZhbHNlOwotICAg
IFJlZlB0cjxKU09OOjpBcnJheT4gb3B0X2luX2NvbHVtbk5hbWVzID0gbV9iYWNrZW5kRGlzcGF0
Y2hlci0+Z2V0QXJyYXkocGFyYW1ldGVycy5nZXQoKSwgImNvbHVtbk5hbWVzIl9zLCAmb3B0X2lu
X2NvbHVtbk5hbWVzX3ZhbHVlRm91bmQpOwotICAgIGJvb2wgb3B0X2luX25vdGVzX3ZhbHVlRm91
bmQgPSBmYWxzZTsKLSAgICBTdHJpbmcgb3B0X2luX25vdGVzID0gbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+Z2V0U3RyaW5nKHBhcmFtZXRlcnMuZ2V0KCksICJub3RlcyJfcywgJm9wdF9pbl9ub3Rlc192
YWx1ZUZvdW5kKTsKLSAgICBib29sIG9wdF9pbl90aW1lc3RhbXBfdmFsdWVGb3VuZCA9IGZhbHNl
OwotICAgIGRvdWJsZSBvcHRfaW5fdGltZXN0YW1wID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0
RG91YmxlKHBhcmFtZXRlcnMuZ2V0KCksICJ0aW1lc3RhbXAiX3MsICZvcHRfaW5fdGltZXN0YW1w
X3ZhbHVlRm91bmQpOwotICAgIGJvb2wgb3B0X2luX3ZhbHVlc192YWx1ZUZvdW5kID0gZmFsc2U7
Ci0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gb3B0X2luX3ZhbHVlcyA9IG1fYmFja2VuZERpc3Bh
dGNoZXItPmdldE9iamVjdChwYXJhbWV0ZXJzLmdldCgpLCAidmFsdWVzIl9zLCAmb3B0X2luX3Zh
bHVlc192YWx1ZUZvdW5kKTsKLSAgICBib29sIG9wdF9pbl9wYXlsb2FkX3ZhbHVlRm91bmQgPSBm
YWxzZTsKLSAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IG9wdF9pbl9wYXlsb2FkID0gbV9iYWNrZW5k
RGlzcGF0Y2hlci0+Z2V0VmFsdWUocGFyYW1ldGVycy5nZXQoKSwgInBheWxvYWQiX3MsICZvcHRf
aW5fcGF5bG9hZF92YWx1ZUZvdW5kKTsKLSAgICBib29sIG9wdF9pbl9kYXRhYmFzZUlkX3ZhbHVl
Rm91bmQgPSBmYWxzZTsKLSAgICBpbnQgb3B0X2luX2RhdGFiYXNlSWQgPSBtX2JhY2tlbmREaXNw
YXRjaGVyLT5nZXRJbnRlZ2VyKHBhcmFtZXRlcnMuZ2V0KCksICJkYXRhYmFzZUlkIl9zLCAmb3B0
X2luX2RhdGFiYXNlSWRfdmFsdWVGb3VuZCk7Ci0gICAgYm9vbCBvcHRfaW5fc3FsRXJyb3JfdmFs
dWVGb3VuZCA9IGZhbHNlOwotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG9wdF9pbl9zcWxFcnJv
ciA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldE9iamVjdChwYXJhbWV0ZXJzLmdldCgpLCAic3Fs
RXJyb3IiX3MsICZvcHRfaW5fc3FsRXJyb3JfdmFsdWVGb3VuZCk7Ci0gICAgYm9vbCBvcHRfaW5f
c2NyZWVuQ29sb3JfdmFsdWVGb3VuZCA9IGZhbHNlOwotICAgIFN0cmluZyBvcHRfaW5fc2NyZWVu
Q29sb3IgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRTdHJpbmcocGFyYW1ldGVycy5nZXQoKSwg
InNjcmVlbkNvbG9yIl9zLCAmb3B0X2luX3NjcmVlbkNvbG9yX3ZhbHVlRm91bmQpOwotICAgIGJv
b2wgb3B0X2luX2FsdGVybmF0ZUNvbG9yc192YWx1ZUZvdW5kID0gZmFsc2U7Ci0gICAgUmVmUHRy
PEpTT046OkFycmF5PiBvcHRfaW5fYWx0ZXJuYXRlQ29sb3JzID0gbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+Z2V0QXJyYXkocGFyYW1ldGVycy5nZXQoKSwgImFsdGVybmF0ZUNvbG9ycyJfcywgJm9wdF9p
bl9hbHRlcm5hdGVDb2xvcnNfdmFsdWVGb3VuZCk7Ci0gICAgYm9vbCBvcHRfaW5fcHJpbnRDb2xv
cl92YWx1ZUZvdW5kID0gZmFsc2U7Ci0gICAgU3RyaW5nIG9wdF9pbl9wcmludENvbG9yID0gbV9i
YWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3RyaW5nKHBhcmFtZXRlcnMuZ2V0KCksICJwcmludENvbG9y
Il9zLCAmb3B0X2luX3ByaW50Q29sb3JfdmFsdWVGb3VuZCk7CisgICAgYXV0byBpbl9vcHRfY29s
dW1uTmFtZXMgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRBcnJheShwcm90b2NvbF9wYXJhbWV0
ZXJzLmdldCgpLCAiY29sdW1uTmFtZXMiX3MsIGZhbHNlKTsKKyAgICBhdXRvIGluX29wdF9ub3Rl
cyA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFN0cmluZyhwcm90b2NvbF9wYXJhbWV0ZXJzLmdl
dCgpLCAibm90ZXMiX3MsIGZhbHNlKTsKKyAgICBhdXRvIGluX29wdF90aW1lc3RhbXAgPSBtX2Jh
Y2tlbmREaXNwYXRjaGVyLT5nZXREb3VibGUocHJvdG9jb2xfcGFyYW1ldGVycy5nZXQoKSwgInRp
bWVzdGFtcCJfcywgZmFsc2UpOworICAgIGF1dG8gaW5fb3B0X3ZhbHVlcyA9IG1fYmFja2VuZERp
c3BhdGNoZXItPmdldE9iamVjdChwcm90b2NvbF9wYXJhbWV0ZXJzLmdldCgpLCAidmFsdWVzIl9z
LCBmYWxzZSk7CisgICAgYXV0byBpbl9vcHRfcGF5bG9hZCA9IG1fYmFja2VuZERpc3BhdGNoZXIt
PmdldFZhbHVlKHByb3RvY29sX3BhcmFtZXRlcnMuZ2V0KCksICJwYXlsb2FkIl9zLCBmYWxzZSk7
CisgICAgYXV0byBpbl9vcHRfZGF0YWJhc2VJZCA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldElu
dGVnZXIocHJvdG9jb2xfcGFyYW1ldGVycy5nZXQoKSwgImRhdGFiYXNlSWQiX3MsIGZhbHNlKTsK
KyAgICBhdXRvIGluX29wdF9zcWxFcnJvciA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldE9iamVj
dChwcm90b2NvbF9wYXJhbWV0ZXJzLmdldCgpLCAic3FsRXJyb3IiX3MsIGZhbHNlKTsKKyAgICBh
dXRvIGluX29wdF9zY3JlZW5Db2xvcl9qc29uID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3Ry
aW5nKHByb3RvY29sX3BhcmFtZXRlcnMuZ2V0KCksICJzY3JlZW5Db2xvciJfcywgZmFsc2UpOwor
ICAgIGF1dG8gaW5fb3B0X2FsdGVybmF0ZUNvbG9ycyA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdl
dEFycmF5KHByb3RvY29sX3BhcmFtZXRlcnMuZ2V0KCksICJhbHRlcm5hdGVDb2xvcnMiX3MsIGZh
bHNlKTsKKyAgICBhdXRvIGluX29wdF9wcmludENvbG9yID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+
Z2V0U3RyaW5nKHByb3RvY29sX3BhcmFtZXRlcnMuZ2V0KCksICJwcmludENvbG9yIl9zLCBmYWxz
ZSk7CiAgICAgaWYgKG1fYmFja2VuZERpc3BhdGNoZXItPmhhc1Byb3RvY29sRXJyb3JzKCkpIHsK
ICAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5k
RGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFtcywgIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnRGF0
YWJhc2UuZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycycgY2FuJ3QgYmUgcHJvY2Vzc2VkIl9z
KTsKICAgICAgICAgcmV0dXJuOwpAQCAtMjgzLDY1ICsyNjYsNTggQEAgdm9pZCBEYXRhYmFzZUJh
Y2tlbmREaXNwYXRjaGVyOjpleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcmVxdWVz
dElkLCBSZWYKIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQog
ICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVEaXNw
YXRjaGVyLT5leGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKHJlcXVlc3RJZCwgb3B0X2luX2Nv
bHVtbk5hbWVzX3ZhbHVlRm91bmQgPyBvcHRfaW5fY29sdW1uTmFtZXMuZ2V0KCkgOiBudWxscHRy
LCBvcHRfaW5fbm90ZXNfdmFsdWVGb3VuZCA/ICZvcHRfaW5fbm90ZXMgOiBudWxscHRyLCBvcHRf
aW5fdGltZXN0YW1wX3ZhbHVlRm91bmQgPyAmb3B0X2luX3RpbWVzdGFtcCA6IG51bGxwdHIsIG9w
dF9pbl92YWx1ZXNfdmFsdWVGb3VuZCA/IG9wdF9pbl92YWx1ZXMuZ2V0KCkgOiBudWxscHRyLCBv
cHRfaW5fcGF5bG9hZF92YWx1ZUZvdW5kID8gb3B0X2luX3BheWxvYWQuZ2V0KCkgOiBudWxscHRy
LCBvcHRfaW5fZGF0YWJhc2VJZF92YWx1ZUZvdW5kID8gJm9wdF9pbl9kYXRhYmFzZUlkIDogbnVs
bHB0ciwgb3B0X2luX3NxbEVycm9yX3ZhbHVlRm91bmQgPyBvcHRfaW5fc3FsRXJyb3IuZ2V0KCkg
OiBudWxscHRyLCBvcHRfaW5fc2NyZWVuQ29sb3JfdmFsdWVGb3VuZCA/ICZvcHRfaW5fc2NyZWVu
Q29sb3IgOiBudWxscHRyLCBvcHRfaW5fYWx0ZXJuYXRlQ29sb3JzX3ZhbHVlRm91bmQgPyBvcHRf
aW5fYWx0ZXJuYXRlQ29sb3JzLmdldCgpIDogbnVsbHB0ciwgb3B0X2luX3ByaW50Q29sb3JfdmFs
dWVGb3VuZCA/ICZvcHRfaW5fcHJpbnRDb2xvciA6IG51bGxwdHIpOworICAgICAgICBtX2FsdGVy
bmF0ZURpc3BhdGNoZXItPmV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMocHJvdG9jb2xfY2Fs
bElkLCBXVEZNb3ZlKGluX29wdF9jb2x1bW5OYW1lcyksIGluX29wdF9ub3RlcywgV1RGTW92ZShp
bl9vcHRfdGltZXN0YW1wKSwgV1RGTW92ZShpbl9vcHRfdmFsdWVzKSwgV1RGTW92ZShpbl9vcHRf
cGF5bG9hZCksIFdURk1vdmUoaW5fb3B0X2RhdGFiYXNlSWQpLCBXVEZNb3ZlKGluX29wdF9zcWxF
cnJvciksIGluX29wdF9zY3JlZW5Db2xvcl9qc29uLCBXVEZNb3ZlKGluX29wdF9hbHRlcm5hdGVD
b2xvcnMpLCBpbl9vcHRfcHJpbnRDb2xvcik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5k
aWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAKLSAgICBFcnJv
clN0cmluZyBlcnJvcjsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmpl
Y3Q6OmNyZWF0ZSgpOwotICAgIFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+IG91dF9jb2x1
bW5OYW1lczsKLSAgICBPcHRpb25hbDxTdHJpbmc+IG91dF9ub3RlczsKLSAgICBPcHRpb25hbDxk
b3VibGU+IG91dF90aW1lc3RhbXA7Ci0gICAgT3B0aW9uYWw8SlNPTjo6T2JqZWN0PiBvdXRfdmFs
dWVzOwotICAgIE9wdGlvbmFsPEpTT046OlZhbHVlPiBvdXRfcGF5bG9hZDsKLSAgICBPcHRpb25h
bDxpbnQ+IG91dF9kYXRhYmFzZUlkOwotICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpE
YXRhYmFzZTo6RXJyb3I+IG91dF9zcWxFcnJvcjsKLSAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpE
YXRhYmFzZTo6UHJpbWFyeUNvbG9ycyBvdXRfc2NyZWVuQ29sb3I7Ci0gICAgUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+IG91dF9hbHRlcm5hdGVDb2xvcnM7
Ci0gICAgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3Igb3V0X3By
aW50Q29sb3I7Ci0gICAgbV9hZ2VudC0+ZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhlcnJv
ciwgb3B0X2luX2NvbHVtbk5hbWVzX3ZhbHVlRm91bmQgPyBvcHRfaW5fY29sdW1uTmFtZXMuZ2V0
KCkgOiBudWxscHRyLCBvcHRfaW5fbm90ZXNfdmFsdWVGb3VuZCA/ICZvcHRfaW5fbm90ZXMgOiBu
dWxscHRyLCBvcHRfaW5fdGltZXN0YW1wX3ZhbHVlRm91bmQgPyAmb3B0X2luX3RpbWVzdGFtcCA6
IG51bGxwdHIsIG9wdF9pbl92YWx1ZXNfdmFsdWVGb3VuZCA/IG9wdF9pbl92YWx1ZXMuZ2V0KCkg
OiBudWxscHRyLCBvcHRfaW5fcGF5bG9hZF92YWx1ZUZvdW5kID8gb3B0X2luX3BheWxvYWQuZ2V0
KCkgOiBudWxscHRyLCBvcHRfaW5fZGF0YWJhc2VJZF92YWx1ZUZvdW5kID8gJm9wdF9pbl9kYXRh
YmFzZUlkIDogbnVsbHB0ciwgb3B0X2luX3NxbEVycm9yX3ZhbHVlRm91bmQgPyBvcHRfaW5fc3Fs
RXJyb3IuZ2V0KCkgOiBudWxscHRyLCBvcHRfaW5fc2NyZWVuQ29sb3JfdmFsdWVGb3VuZCA/ICZv
cHRfaW5fc2NyZWVuQ29sb3IgOiBudWxscHRyLCBvcHRfaW5fYWx0ZXJuYXRlQ29sb3JzX3ZhbHVl
Rm91bmQgPyBvcHRfaW5fYWx0ZXJuYXRlQ29sb3JzLmdldCgpIDogbnVsbHB0ciwgb3B0X2luX3By
aW50Q29sb3JfdmFsdWVGb3VuZCA/ICZvcHRfaW5fcHJpbnRDb2xvciA6IG51bGxwdHIsIG91dF9j
b2x1bW5OYW1lcywgb3V0X25vdGVzLCBvdXRfdGltZXN0YW1wLCBvdXRfdmFsdWVzLCBvdXRfcGF5
bG9hZCwgb3V0X2RhdGFiYXNlSWQsIG91dF9zcWxFcnJvciwgb3V0X3NjcmVlbkNvbG9yLCBvdXRf
YWx0ZXJuYXRlQ29sb3JzLCBvdXRfcHJpbnRDb2xvcik7CisgICAgYXV0byBpbl9vcHRfc2NyZWVu
Q29sb3IgPSBQcm90b2NvbDo6VGVzdEhlbHBlcnM6OnBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxQ
cm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+KGluX29wdF9zY3JlZW5Db2xvcl9qc29u
KTsKIAotICAgIGlmICghZXJyb3IubGVuZ3RoKCkpIHsKLSAgICAgICAgaWYgKG91dF9jb2x1bW5O
YW1lcykKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCBvdXRf
Y29sdW1uTmFtZXMpOwotICAgICAgICBpZiAob3V0X25vdGVzLmhhc1ZhbHVlKCkpCi0gICAgICAg
ICAgICByZXN1bHQtPnNldFN0cmluZygibm90ZXMiX3MsICpvdXRfbm90ZXMpOwotICAgICAgICBp
ZiAob3V0X3RpbWVzdGFtcC5oYXNWYWx1ZSgpKQotICAgICAgICAgICAgcmVzdWx0LT5zZXREb3Vi
bGUoInRpbWVzdGFtcCJfcywgKm91dF90aW1lc3RhbXApOwotICAgICAgICBpZiAob3V0X3ZhbHVl
cy5oYXNWYWx1ZSgpKQotICAgICAgICAgICAgcmVzdWx0LT5zZXRPYmplY3QoInZhbHVlcyJfcywg
Km91dF92YWx1ZXMpOwotICAgICAgICBpZiAob3V0X3BheWxvYWQuaGFzVmFsdWUoKSkKLSAgICAg
ICAgICAgIHJlc3VsdC0+c2V0VmFsdWUoInBheWxvYWQiX3MsICpvdXRfcGF5bG9hZCk7Ci0gICAg
ICAgIGlmIChvdXRfZGF0YWJhc2VJZC5oYXNWYWx1ZSgpKQotICAgICAgICAgICAgcmVzdWx0LT5z
ZXRJbnRlZ2VyKCJkYXRhYmFzZUlkIl9zLCAqb3V0X2RhdGFiYXNlSWQpOwotICAgICAgICBpZiAo
b3V0X3NxbEVycm9yKQotICAgICAgICAgICAgcmVzdWx0LT5zZXRPYmplY3QoInNxbEVycm9yIl9z
LCBvdXRfc3FsRXJyb3IpOwotICAgICAgICBpZiAob3V0X3NjcmVlbkNvbG9yLmhhc1ZhbHVlKCkp
Ci0gICAgICAgICAgICByZXN1bHQtPnNldFN0cmluZygic2NyZWVuQ29sb3IiX3MsICpvdXRfc2Ny
ZWVuQ29sb3IpOwotICAgICAgICBpZiAob3V0X2FsdGVybmF0ZUNvbG9ycykKLSAgICAgICAgICAg
IHJlc3VsdC0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywgb3V0X2FsdGVybmF0ZUNvbG9y
cyk7Ci0gICAgICAgIGlmIChvdXRfcHJpbnRDb2xvci5oYXNWYWx1ZSgpKQotICAgICAgICAgICAg
cmVzdWx0LT5zZXRTdHJpbmcoInByaW50Q29sb3IiX3MsICpvdXRfcHJpbnRDb2xvcik7CisgICAg
YXV0byByZXN1bHQgPSBtX2FnZW50LT5leGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKFdURk1v
dmUoaW5fb3B0X2NvbHVtbk5hbWVzKSwgaW5fb3B0X25vdGVzLCBXVEZNb3ZlKGluX29wdF90aW1l
c3RhbXApLCBXVEZNb3ZlKGluX29wdF92YWx1ZXMpLCBXVEZNb3ZlKGluX29wdF9wYXlsb2FkKSwg
V1RGTW92ZShpbl9vcHRfZGF0YWJhc2VJZCksIFdURk1vdmUoaW5fb3B0X3NxbEVycm9yKSwgV1RG
TW92ZShpbl9vcHRfc2NyZWVuQ29sb3IpLCBXVEZNb3ZlKGluX29wdF9hbHRlcm5hdGVDb2xvcnMp
LCBpbl9vcHRfcHJpbnRDb2xvcik7CisgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAgICAgQVNTRVJU
KCFyZXN1bHQuZXJyb3IoKS5pc0VtcHR5KCkpOworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVy
LT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgcmVz
dWx0LmVycm9yKCkpOworICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmICghZXJyb3IubGVu
Z3RoKCkpCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0
SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2UpOwotICAgIGVsc2UKLSAgICAgICAgbV9iYWNrZW5k
RGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVy
RXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKKworICAgIGF1dG8gW291dF9vcHRfY29sdW1uTmFtZXMs
IG91dF9vcHRfbm90ZXMsIG91dF9vcHRfdGltZXN0YW1wLCBvdXRfb3B0X3ZhbHVlcywgb3V0X29w
dF9wYXlsb2FkLCBvdXRfb3B0X2RhdGFiYXNlSWQsIG91dF9vcHRfc3FsRXJyb3IsIG91dF9vcHRf
c2NyZWVuQ29sb3IsIG91dF9vcHRfYWx0ZXJuYXRlQ29sb3JzLCBvdXRfb3B0X3ByaW50Q29sb3Jd
ID0gV1RGTW92ZShyZXN1bHQudmFsdWUoKSk7CisKKyAgICBhdXRvIHByb3RvY29sX2pzb25NZXNz
YWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBpZiAoISFvdXRfb3B0X2NvbHVtbk5h
bWVzKQorICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0QXJyYXkoImNvbHVtbk5hbWVz
Il9zLCBvdXRfb3B0X2NvbHVtbk5hbWVzLnJlbGVhc2VOb25OdWxsKCkpOworICAgIGlmICghIW91
dF9vcHRfbm90ZXMpCisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm5v
dGVzIl9zLCBvdXRfb3B0X25vdGVzKTsKKyAgICBpZiAoISFvdXRfb3B0X3RpbWVzdGFtcCkKKyAg
ICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCAqb3V0
X29wdF90aW1lc3RhbXApOworICAgIGlmICghIW91dF9vcHRfdmFsdWVzKQorICAgICAgICBwcm90
b2NvbF9qc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIG91dF9vcHRfdmFsdWVzLnJl
bGVhc2VOb25OdWxsKCkpOworICAgIGlmICghIW91dF9vcHRfcGF5bG9hZCkKKyAgICAgICAgcHJv
dG9jb2xfanNvbk1lc3NhZ2UtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCBvdXRfb3B0X3BheWxvYWQu
cmVsZWFzZU5vbk51bGwoKSk7CisgICAgaWYgKCEhb3V0X29wdF9kYXRhYmFzZUlkKQorICAgICAg
ICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0SW50ZWdlcigiZGF0YWJhc2VJZCJfcywgKm91dF9v
cHRfZGF0YWJhc2VJZCk7CisgICAgaWYgKCEhb3V0X29wdF9zcWxFcnJvcikKKyAgICAgICAgcHJv
dG9jb2xfanNvbk1lc3NhZ2UtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIG91dF9vcHRfc3FsRXJy
b3IucmVsZWFzZU5vbk51bGwoKSk7CisgICAgaWYgKCEhb3V0X29wdF9zY3JlZW5Db2xvcikKKyAg
ICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygic2NyZWVuQ29sb3IiX3MsIFBy
b3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUoKm91dF9vcHRfc2NyZWVu
Q29sb3IpKTsKKyAgICBpZiAoISFvdXRfb3B0X2FsdGVybmF0ZUNvbG9ycykKKyAgICAgICAgcHJv
dG9jb2xfanNvbk1lc3NhZ2UtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIG91dF9vcHRf
YWx0ZXJuYXRlQ29sb3JzLnJlbGVhc2VOb25OdWxsKCkpOworICAgIGlmICghIW91dF9vcHRfcHJp
bnRDb2xvcikKKyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygicHJpbnRD
b2xvciJfcywgb3V0X29wdF9wcmludENvbG9yKTsKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5z
ZW5kUmVzcG9uc2UocHJvdG9jb2xfY2FsbElkLCBXVEZNb3ZlKHByb3RvY29sX2pzb25NZXNzYWdl
KSwgZmFsc2UpOwogfQogCi12b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVO
b09wdGlvbmFsUGFyYW1ldGVycyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4m
JiBwYXJhbWV0ZXJzKQordm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlTm9P
cHRpb25hbFBhcmFtZXRlcnMobG9uZyBwcm90b2NvbF9jYWxsSWQsIFJlZlB0cjxKU09OOjpPYmpl
Y3Q+JiYgcHJvdG9jb2xfcGFyYW1ldGVycykKIHsKLSAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IGlu
X2NvbHVtbk5hbWVzID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0QXJyYXkocGFyYW1ldGVycy5n
ZXQoKSwgImNvbHVtbk5hbWVzIl9zLCBudWxscHRyKTsKLSAgICBTdHJpbmcgaW5fbm90ZXMgPSBt
X2JhY2tlbmREaXNwYXRjaGVyLT5nZXRTdHJpbmcocGFyYW1ldGVycy5nZXQoKSwgIm5vdGVzIl9z
LCBudWxscHRyKTsKLSAgICBkb3VibGUgaW5fdGltZXN0YW1wID0gbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+Z2V0RG91YmxlKHBhcmFtZXRlcnMuZ2V0KCksICJ0aW1lc3RhbXAiX3MsIG51bGxwdHIpOwot
ICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IGluX3ZhbHVlcyA9IG1fYmFja2VuZERpc3BhdGNoZXIt
PmdldE9iamVjdChwYXJhbWV0ZXJzLmdldCgpLCAidmFsdWVzIl9zLCBudWxscHRyKTsKLSAgICBS
ZWZQdHI8SlNPTjo6VmFsdWU+IGluX3BheWxvYWQgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRW
YWx1ZShwYXJhbWV0ZXJzLmdldCgpLCAicGF5bG9hZCJfcywgbnVsbHB0cik7Ci0gICAgaW50IGlu
X2RhdGFiYXNlSWQgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRJbnRlZ2VyKHBhcmFtZXRlcnMu
Z2V0KCksICJkYXRhYmFzZUlkIl9zLCBudWxscHRyKTsKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0
PiBpbl9zcWxFcnJvciA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldE9iamVjdChwYXJhbWV0ZXJz
LmdldCgpLCAic3FsRXJyb3IiX3MsIG51bGxwdHIpOwotICAgIFN0cmluZyBpbl9zY3JlZW5Db2xv
ciA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFN0cmluZyhwYXJhbWV0ZXJzLmdldCgpLCAic2Ny
ZWVuQ29sb3IiX3MsIG51bGxwdHIpOwotICAgIFJlZlB0cjxKU09OOjpBcnJheT4gaW5fYWx0ZXJu
YXRlQ29sb3JzID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0QXJyYXkocGFyYW1ldGVycy5nZXQo
KSwgImFsdGVybmF0ZUNvbG9ycyJfcywgbnVsbHB0cik7Ci0gICAgU3RyaW5nIGluX3ByaW50Q29s
b3IgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRTdHJpbmcocGFyYW1ldGVycy5nZXQoKSwgInBy
aW50Q29sb3IiX3MsIG51bGxwdHIpOworICAgIGF1dG8gaW5fY29sdW1uTmFtZXMgPSBtX2JhY2tl
bmREaXNwYXRjaGVyLT5nZXRBcnJheShwcm90b2NvbF9wYXJhbWV0ZXJzLmdldCgpLCAiY29sdW1u
TmFtZXMiX3MsIHRydWUpOworICAgIGF1dG8gaW5fbm90ZXMgPSBtX2JhY2tlbmREaXNwYXRjaGVy
LT5nZXRTdHJpbmcocHJvdG9jb2xfcGFyYW1ldGVycy5nZXQoKSwgIm5vdGVzIl9zLCB0cnVlKTsK
KyAgICBhdXRvIGluX3RpbWVzdGFtcCA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldERvdWJsZShw
cm90b2NvbF9wYXJhbWV0ZXJzLmdldCgpLCAidGltZXN0YW1wIl9zLCB0cnVlKTsKKyAgICBhdXRv
IGluX3ZhbHVlcyA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldE9iamVjdChwcm90b2NvbF9wYXJh
bWV0ZXJzLmdldCgpLCAidmFsdWVzIl9zLCB0cnVlKTsKKyAgICBhdXRvIGluX3BheWxvYWQgPSBt
X2JhY2tlbmREaXNwYXRjaGVyLT5nZXRWYWx1ZShwcm90b2NvbF9wYXJhbWV0ZXJzLmdldCgpLCAi
cGF5bG9hZCJfcywgdHJ1ZSk7CisgICAgYXV0byBpbl9kYXRhYmFzZUlkID0gbV9iYWNrZW5kRGlz
cGF0Y2hlci0+Z2V0SW50ZWdlcihwcm90b2NvbF9wYXJhbWV0ZXJzLmdldCgpLCAiZGF0YWJhc2VJ
ZCJfcywgdHJ1ZSk7CisgICAgYXV0byBpbl9zcWxFcnJvciA9IG1fYmFja2VuZERpc3BhdGNoZXIt
PmdldE9iamVjdChwcm90b2NvbF9wYXJhbWV0ZXJzLmdldCgpLCAic3FsRXJyb3IiX3MsIHRydWUp
OworICAgIGF1dG8gaW5fc2NyZWVuQ29sb3JfanNvbiA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdl
dFN0cmluZyhwcm90b2NvbF9wYXJhbWV0ZXJzLmdldCgpLCAic2NyZWVuQ29sb3IiX3MsIHRydWUp
OworICAgIGF1dG8gaW5fYWx0ZXJuYXRlQ29sb3JzID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0
QXJyYXkocHJvdG9jb2xfcGFyYW1ldGVycy5nZXQoKSwgImFsdGVybmF0ZUNvbG9ycyJfcywgdHJ1
ZSk7CisgICAgYXV0byBpbl9wcmludENvbG9yID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3Ry
aW5nKHByb3RvY29sX3BhcmFtZXRlcnMuZ2V0KCksICJwcmludENvbG9yIl9zLCB0cnVlKTsKICAg
ICBpZiAobV9iYWNrZW5kRGlzcGF0Y2hlci0+aGFzUHJvdG9jb2xFcnJvcnMoKSkgewogICAgICAg
ICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRj
aGVyOjpJbnZhbGlkUGFyYW1zLCAiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICdEYXRhYmFzZS5l
eGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMnIGNhbid0IGJlIHByb2Nlc3NlZCJfcyk7CiAgICAg
ICAgIHJldHVybjsKQEAgLTM0OSw0MSArMzI1LDM4IEBAIHZvaWQgRGF0YWJhc2VCYWNrZW5kRGlz
cGF0Y2hlcjo6ZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcmVxdWVzdElkLCBSZWZQ
CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKICAgICBpZiAo
bV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+
ZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKHJlcXVlc3RJZCwgKmluX2NvbHVtbk5hbWVzLCBp
bl9ub3RlcywgaW5fdGltZXN0YW1wLCAqaW5fdmFsdWVzLCAqaW5fcGF5bG9hZCwgaW5fZGF0YWJh
c2VJZCwgKmluX3NxbEVycm9yLCBpbl9zY3JlZW5Db2xvciwgKmluX2FsdGVybmF0ZUNvbG9ycywg
aW5fcHJpbnRDb2xvcik7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+ZXhlY3V0ZU5v
T3B0aW9uYWxQYXJhbWV0ZXJzKHByb3RvY29sX2NhbGxJZCwgaW5fY29sdW1uTmFtZXMucmVsZWFz
ZU5vbk51bGwoKSwgaW5fbm90ZXMsICppbl90aW1lc3RhbXAsIGluX3ZhbHVlcy5yZWxlYXNlTm9u
TnVsbCgpLCBpbl9wYXlsb2FkLnJlbGVhc2VOb25OdWxsKCksICppbl9kYXRhYmFzZUlkLCBpbl9z
cWxFcnJvci5yZWxlYXNlTm9uTnVsbCgpLCBpbl9zY3JlZW5Db2xvcl9qc29uLCBpbl9hbHRlcm5h
dGVDb2xvcnMucmVsZWFzZU5vbk51bGwoKSwgaW5fcHJpbnRDb2xvcik7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hF
UlMpCiAKLSAgICBFcnJvclN0cmluZyBlcnJvcjsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1
bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIFJlZlB0cjxKU09OOjpBcnJheU9mPFN0
cmluZz4+IG91dF9jb2x1bW5OYW1lczsKLSAgICBTdHJpbmcgb3V0X25vdGVzOwotICAgIGRvdWJs
ZSBvdXRfdGltZXN0YW1wOwotICAgIEpTT046Ok9iamVjdCBvdXRfdmFsdWVzOwotICAgIEpTT046
OlZhbHVlIG91dF9wYXlsb2FkOwotICAgIGludCBvdXRfZGF0YWJhc2VJZDsKLSAgICBSZWZQdHI8
SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiBvdXRfc3FsRXJyb3I7Ci0gICAg
SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMgb3V0X3NjcmVlbkNv
bG9yOwotICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0
PiBvdXRfYWx0ZXJuYXRlQ29sb3JzOwotICAgIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyOjpQcmludENvbG9yIG91dF9wcmludENvbG9yOwotICAgIG1fYWdlbnQtPmV4ZWN1dGVOb09w
dGlvbmFsUGFyYW1ldGVycyhlcnJvciwgKmluX2NvbHVtbk5hbWVzLCBpbl9ub3RlcywgaW5fdGlt
ZXN0YW1wLCAqaW5fdmFsdWVzLCAqaW5fcGF5bG9hZCwgaW5fZGF0YWJhc2VJZCwgKmluX3NxbEVy
cm9yLCBpbl9zY3JlZW5Db2xvciwgKmluX2FsdGVybmF0ZUNvbG9ycywgaW5fcHJpbnRDb2xvciwg
b3V0X2NvbHVtbk5hbWVzLCAmb3V0X25vdGVzLCAmb3V0X3RpbWVzdGFtcCwgb3V0X3ZhbHVlcywg
Jm91dF9wYXlsb2FkLCAmb3V0X2RhdGFiYXNlSWQsIG91dF9zcWxFcnJvciwgJm91dF9zY3JlZW5D
b2xvciwgb3V0X2FsdGVybmF0ZUNvbG9ycywgJm91dF9wcmludENvbG9yKTsKLQotICAgIGlmICgh
ZXJyb3IubGVuZ3RoKCkpIHsKLSAgICAgICAgcmVzdWx0LT5zZXRBcnJheSgiY29sdW1uTmFtZXMi
X3MsIG91dF9jb2x1bW5OYW1lcyk7Ci0gICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJub3RlcyJf
cywgb3V0X25vdGVzKTsKLSAgICAgICAgcmVzdWx0LT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywg
b3V0X3RpbWVzdGFtcCk7Ci0gICAgICAgIHJlc3VsdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIG91
dF92YWx1ZXMpOwotICAgICAgICByZXN1bHQtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCBvdXRfcGF5
bG9hZCk7Ci0gICAgICAgIHJlc3VsdC0+c2V0SW50ZWdlcigiZGF0YWJhc2VJZCJfcywgb3V0X2Rh
dGFiYXNlSWQpOwotICAgICAgICByZXN1bHQtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIG91dF9z
cWxFcnJvcik7Ci0gICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgSW5z
cGVjdG9yOjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKG91dF9z
Y3JlZW5Db2xvcikpOwotICAgICAgICByZXN1bHQtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMi
X3MsIG91dF9hbHRlcm5hdGVDb2xvcnMpOwotICAgICAgICByZXN1bHQtPnNldFN0cmluZygicHJp
bnRDb2xvciJfcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25z
dGFudFZhbHVlKG91dF9wcmludENvbG9yKSk7CisgICAgYXV0byBpbl9zY3JlZW5Db2xvciA9IFBy
b3RvY29sOjpUZXN0SGVscGVyczo6cGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPFByb3RvY29sOjpE
YXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4oaW5fc2NyZWVuQ29sb3JfanNvbik7CisgICAgaWYgKCFp
bl9zY3JlZW5Db2xvcikgeworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90
b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgbWFrZVN0cmluZygiVW5r
bm93biBzY3JlZW5Db2xvcjogIl9zLCBpbl9zY3JlZW5Db2xvcl9qc29uKSk7CisgICAgICAgIHJl
dHVybjsKICAgICB9Ci0gICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKLSAgICAgICAgbV9iYWNrZW5k
RGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxz
ZSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2Nv
bEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOwor
CisgICAgYXV0byByZXN1bHQgPSBtX2FnZW50LT5leGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMo
aW5fY29sdW1uTmFtZXMucmVsZWFzZU5vbk51bGwoKSwgaW5fbm90ZXMsICppbl90aW1lc3RhbXAs
IGluX3ZhbHVlcy5yZWxlYXNlTm9uTnVsbCgpLCBpbl9wYXlsb2FkLnJlbGVhc2VOb25OdWxsKCks
ICppbl9kYXRhYmFzZUlkLCBpbl9zcWxFcnJvci5yZWxlYXNlTm9uTnVsbCgpLCAqaW5fc2NyZWVu
Q29sb3IsIGluX2FsdGVybmF0ZUNvbG9ycy5yZWxlYXNlTm9uTnVsbCgpLCBpbl9wcmludENvbG9y
KTsKKyAgICBpZiAoIXJlc3VsdCkgeworICAgICAgICBBU1NFUlQoIXJlc3VsdC5lcnJvcigpLmlz
RW1wdHkoKSk7CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJy
b3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCByZXN1bHQuZXJyb3IoKSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBhdXRvIFtvdXRfY29sdW1uTmFtZXMsIG91dF9ub3Rl
cywgb3V0X3RpbWVzdGFtcCwgb3V0X3ZhbHVlcywgb3V0X3BheWxvYWQsIG91dF9kYXRhYmFzZUlk
LCBvdXRfc3FsRXJyb3IsIG91dF9zY3JlZW5Db2xvciwgb3V0X2FsdGVybmF0ZUNvbG9ycywgb3V0
X3ByaW50Q29sb3JdID0gV1RGTW92ZShyZXN1bHQudmFsdWUoKSk7CisKKyAgICBhdXRvIHByb3Rv
Y29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBwcm90b2NvbF9q
c29uTWVzc2FnZS0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCBXVEZNb3ZlKG91dF9jb2x1bW5O
YW1lcykpOworICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm5vdGVzIl9zLCBv
dXRfbm90ZXMpOworICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXREb3VibGUoInRpbWVzdGFt
cCJfcywgb3V0X3RpbWVzdGFtcCk7CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldE9iamVj
dCgidmFsdWVzIl9zLCBXVEZNb3ZlKG91dF92YWx1ZXMpKTsKKyAgICBwcm90b2NvbF9qc29uTWVz
c2FnZS0+c2V0VmFsdWUoInBheWxvYWQiX3MsIFdURk1vdmUob3V0X3BheWxvYWQpKTsKKyAgICBw
cm90b2NvbF9qc29uTWVzc2FnZS0+c2V0SW50ZWdlcigiZGF0YWJhc2VJZCJfcywgb3V0X2RhdGFi
YXNlSWQpOworICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRPYmplY3QoInNxbEVycm9yIl9z
LCBXVEZNb3ZlKG91dF9zcWxFcnJvcikpOworICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRT
dHJpbmcoInNjcmVlbkNvbG9yIl9zLCBQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25z
dGFudFZhbHVlKG91dF9zY3JlZW5Db2xvcikpOworICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5z
ZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCBXVEZNb3ZlKG91dF9hbHRlcm5hdGVDb2xvcnMp
KTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCBv
dXRfcHJpbnRDb2xvcik7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHBy
b3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSksIGZhbHNlKTsKIH0K
IAogfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCkBAIC00MjQsNiArMzk3LDcgQEAgdm9pZCBEYXRh
YmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMobG9uZyBy
ZXF1ZXN0SWQsIFJlZlAKIAogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNs
dWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKQEAgLTQ2
Nyw3ICs0NDEsNiBAQCBjbGFzcyBGcm9udGVuZFJvdXRlcjsKICNpbmNsdWRlICJUZXN0RnJvbnRl
bmREaXNwYXRjaGVycy5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJv
bnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKIG5hbWVzcGFj
ZSBJbnNwZWN0b3IgewogCkBAIC01MDgsNyArNDgxLDkgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7
CiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3Rv
Y29sVHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9K
U09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC01MzAsNyArNTA1
LDcgQEAgZW51bSBjbGFzcyBQcmltYXJ5Q29sb3JzOwogbmFtZXNwYWNlIERhdGFiYXNlIHsKIC8q
IFVuaXF1ZSBpZGVudGlmaWVyIG9mIERhdGFiYXNlIG9iamVjdC4gKi8KIHVzaW5nIERhdGFiYXNl
SWQgPSBpbnQ7Ci11c2luZyBDb2xvckxpc3QgPSBKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPjsKK3VzaW5nIENvbG9yTGlzdCA9IEpTT046
OkFycmF5T2Y8UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPjsKIH0gLy8gRGF0YWJh
c2UKIC8vIEVuZCBvZiB0eXBlZGVmcy4KIApAQCAtNTU0LDcgKzUyOSw3IEBAIGVudW0gY2xhc3Mg
UHJpbWFyeUNvbG9ycyB7CiB9OyAvLyBlbnVtIGNsYXNzIFByaW1hcnlDb2xvcnMKIAogLyogRGF0
YWJhc2UgZXJyb3IuICovCi1jbGFzcyBFcnJvciA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsK
K2NsYXNzIEVycm9yIGZpbmFsIDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgewogcHVibGljOgog
ICAgIGVudW0gewogICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCkBAIC01ODEsMTcgKzU1NiwxNyBA
QCBwdWJsaWM6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBFcnJvcjsKICAgICBwdWJsaWM6CiAKLSAg
ICAgICAgQnVpbGRlcjxTVEFURSB8IE1lc3NhZ2VTZXQ+JiBzZXRNZXNzYWdlKGNvbnN0IFN0cmlu
ZyYgdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBNZXNzYWdlU2V0PiYgc2V0TWVzc2Fn
ZShjb25zdCBTdHJpbmcmIGluX21lc3NhZ2UpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKCEoU1RBVEUgJiBNZXNzYWdlU2V0KSwgcHJvcGVydHlfbWVzc2FnZV9hbHJlYWR5
X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJtZXNzYWdlIl9zLCB2YWx1
ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJtZXNzYWdlIl9zLCBpbl9tZXNz
YWdlKTsKICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TWVzc2FnZVNldD4oKTsKICAgICAg
ICAgfQogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDb2RlU2V0PiYgc2V0Q29kZShpbnQgdmFs
dWUpCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDb2RlU2V0PiYgc2V0Q29kZShpbnQgaW5fY29k
ZSkKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIENvZGVT
ZXQpLCBwcm9wZXJ0eV9jb2RlX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5z
ZXRJbnRlZ2VyKCJjb2RlIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0SW50
ZWdlcigiY29kZSJfcywgaW5fY29kZSk7CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENv
ZGVTZXQ+KCk7CiAgICAgICAgIH0KIApAQCAtNjMwLDcgKzYwNSw3IEBAIE9wdGlvbmFsPFByb3Rv
Y29sRW51bVR5cGU+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZyhjb25zdCBTdHJpbmcmKTsKIAog
Ly8gRW51bXMgaW4gdGhlICdEYXRhYmFzZScgRG9tYWluCiB0ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJ
bnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4gcGFyc2VFbnVtVmFs
dWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3Jz
Pihjb25zdCBTdHJpbmcmKTsKK09wdGlvbmFsPFByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNv
bG9ycz4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPFByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFy
eUNvbG9ycz4oY29uc3QgU3RyaW5nJik7CiAKIH0gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCiAK
QEAgLTY4Miw4ICs2NTcsNyBAQCBzdHJ1Y3QgRGVmYXVsdEhhc2g8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+IDogSW50SGFzaDxJbnNwZQogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKIAotI2luY2x1ZGUgPHd0
Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3
dGYvQXNzZXJ0aW9ucy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtNzA4LDE2ICs2
ODIsMTYgQEAgU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKSB7CiAvLyBFbnVt
cyBpbiB0aGUgJ0RhdGFiYXNlJyBEb21haW4KIAogdGVtcGxhdGU8PgotT3B0aW9uYWw8SW5zcGVj
dG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+IHBhcnNlRW51bVZhbHVlRnJv
bVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4oY29u
c3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKK09wdGlvbmFsPFByb3RvY29sOjpEYXRhYmFzZTo6
UHJpbWFyeUNvbG9ycz4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPFByb3RvY29sOjpEYXRhYmFz
ZTo6UHJpbWFyeUNvbG9ycz4oY29uc3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKIHsKICAgICBz
dGF0aWMgY29uc3Qgc2l6ZV90IGNvbnN0YW50VmFsdWVzW10gPSB7Ci0gICAgICAgIChzaXplX3Qp
SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM6OlJlZCwKLSAgICAg
ICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9yczo6
R3JlZW4sCi0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlBy
aW1hcnlDb2xvcnM6OkJsdWUsCisgICAgICAgIChzaXplX3QpUHJvdG9jb2w6OkRhdGFiYXNlOjpQ
cmltYXJ5Q29sb3JzOjpSZWQsCisgICAgICAgIChzaXplX3QpUHJvdG9jb2w6OkRhdGFiYXNlOjpQ
cmltYXJ5Q29sb3JzOjpHcmVlbiwKKyAgICAgICAgKHNpemVfdClQcm90b2NvbDo6RGF0YWJhc2U6
OlByaW1hcnlDb2xvcnM6OkJsdWUsCiAgICAgfTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IDM7ICsraSkKICAgICAgICAgaWYgKHByb3RvY29sU3RyaW5nID09IGVudW1fY29uc3RhbnRfdmFs
dWVzW2NvbnN0YW50VmFsdWVzW2ldXSkKLSAgICAgICAgICAgIHJldHVybiAoSW5zcGVjdG9yOjpQ
cm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMpY29uc3RhbnRWYWx1ZXNbaV07CisgICAg
ICAgICAgICByZXR1cm4gKFByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyljb25zdGFu
dFZhbHVlc1tpXTsKIAogICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiB9CkBAIC03NzQsOCArNzQ4
LDggQEAgY2xhc3MgT2JqQ0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIgZmluYWwg
OiBwdWJsaWMgQWx0ZXJuYXRlRGF0YWJhc2VCYWMKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKIHB1YmxpYzoKICAgICBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcihp
ZDxUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkhhbmRsZXI+IGhhbmRsZXIpIHsgbV9kZWxlZ2F0
ZSA9IGhhbmRsZXI7IH0KLSAgICB2b2lkIGV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMobG9u
ZyByZXF1ZXN0SWQsIGNvbnN0IEpTT046OkFycmF5KiBpbl9jb2x1bW5OYW1lcywgY29uc3QgU3Ry
aW5nKiBpbl9ub3RlcywgY29uc3QgZG91YmxlKiBpbl90aW1lc3RhbXAsIGNvbnN0IEpTT046Ok9i
amVjdCogaW5fdmFsdWVzLCBjb25zdCBKU09OOjpWYWx1ZSogaW5fcGF5bG9hZCwgY29uc3QgaW50
KiBpbl9kYXRhYmFzZUlkLCBjb25zdCBKU09OOjpPYmplY3QqIGluX3NxbEVycm9yLCBjb25zdCBT
dHJpbmcqIGluX3NjcmVlbkNvbG9yLCBjb25zdCBKU09OOjpBcnJheSogaW5fYWx0ZXJuYXRlQ29s
b3JzLCBjb25zdCBTdHJpbmcqIGluX3ByaW50Q29sb3IpIGZpbmFsOwotICAgIHZvaWQgZXhlY3V0
ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcmVxdWVzdElkLCBjb25zdCBKU09OOjpBcnJheSYg
aW5fY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgaW5fbm90ZXMsIGRvdWJsZSBpbl90aW1lc3Rh
bXAsIGNvbnN0IEpTT046Ok9iamVjdCYgaW5fdmFsdWVzLCBKU09OOjpWYWx1ZSBpbl9wYXlsb2Fk
LCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgSlNPTjo6T2JqZWN0JiBpbl9zcWxFcnJvciwgY29u
c3QgU3RyaW5nJiBpbl9zY3JlZW5Db2xvciwgY29uc3QgSlNPTjo6QXJyYXkmIGluX2FsdGVybmF0
ZUNvbG9ycywgY29uc3QgU3RyaW5nJiBpbl9wcmludENvbG9yKSBmaW5hbDsKKyAgICB2b2lkIGV4
ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMobG9uZyBwcm90b2NvbF9jYWxsSWQsIFJlZlB0cjxK
U09OOjpBcnJheT4mJiBvcHRfY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgb3B0X25vdGVzLCBP
cHRpb25hbDxkb3VibGU+JiYgb3B0X3RpbWVzdGFtcCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBv
cHRfdmFsdWVzLCBSZWZQdHI8SlNPTjo6VmFsdWU+JiYgb3B0X3BheWxvYWQsIE9wdGlvbmFsPGlu
dD4mJiBvcHRfZGF0YWJhc2VJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBvcHRfc3FsRXJyb3Is
IGNvbnN0IFN0cmluZyYgb3B0X3NjcmVlbkNvbG9yLCBSZWZQdHI8SlNPTjo6QXJyYXk+JiYgb3B0
X2FsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nJiBvcHRfcHJpbnRDb2xvcikgZmluYWw7Cisg
ICAgdm9pZCBleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMobG9uZyBwcm90b2NvbF9jYWxsSWQs
IFJlZjxKU09OOjpBcnJheT4mJiBjb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBub3RlcywgZG91
YmxlIHRpbWVzdGFtcCwgUmVmPEpTT046Ok9iamVjdD4mJiB2YWx1ZXMsIFJlZjxKU09OOjpWYWx1
ZT4mJiBwYXlsb2FkLCBpbnQgZGF0YWJhc2VJZCwgUmVmPEpTT046Ok9iamVjdD4mJiBzcWxFcnJv
ciwgY29uc3QgU3RyaW5nJiBzY3JlZW5Db2xvciwgUmVmPEpTT046OkFycmF5PiYmIGFsdGVybmF0
ZUNvbG9ycywgY29uc3QgU3RyaW5nJiBwcmludENvbG9yKSBmaW5hbDsKIHByaXZhdGU6CiAgICAg
UmV0YWluUHRyPGlkPFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluSGFuZGxlcj4+IG1fZGVsZWdh
dGU7CiB9OwpAQCAtODIzLDEzNyArNzk3LDEzNSBAQCBwcml2YXRlOgogCiBuYW1lc3BhY2UgSW5z
cGVjdG9yIHsKIAotdm9pZCBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6
ZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhsb25nIHJlcXVlc3RJZCwgY29uc3QgSlNPTjo6
QXJyYXkqIGluX2NvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcqIGluX25vdGVzLCBjb25zdCBkb3Vi
bGUqIGluX3RpbWVzdGFtcCwgY29uc3QgSlNPTjo6T2JqZWN0KiBpbl92YWx1ZXMsIGNvbnN0IEpT
T046OlZhbHVlKiBpbl9wYXlsb2FkLCBjb25zdCBpbnQqIGluX2RhdGFiYXNlSWQsIGNvbnN0IEpT
T046Ok9iamVjdCogaW5fc3FsRXJyb3IsIGNvbnN0IFN0cmluZyogaW5fc2NyZWVuQ29sb3IsIGNv
bnN0IEpTT046OkFycmF5KiBpbl9hbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyogaW5fcHJp
bnRDb2xvcikKK3ZvaWQgT2JqQ0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4
ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMobG9uZyBwcm90b2NvbF9jYWxsSWQsIFJlZlB0cjxK
U09OOjpBcnJheT4mJiBpbl9vcHRfY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgaW5fb3B0X25v
dGVzLCBPcHRpb25hbDxkb3VibGU+JiYgaW5fb3B0X3RpbWVzdGFtcCwgUmVmUHRyPEpTT046Ok9i
amVjdD4mJiBpbl9vcHRfdmFsdWVzLCBSZWZQdHI8SlNPTjo6VmFsdWU+JiYgaW5fb3B0X3BheWxv
YWQsIE9wdGlvbmFsPGludD4mJiBpbl9vcHRfZGF0YWJhc2VJZCwgUmVmUHRyPEpTT046Ok9iamVj
dD4mJiBpbl9vcHRfc3FsRXJyb3IsIGNvbnN0IFN0cmluZyYgaW5fb3B0X3NjcmVlbkNvbG9yLCBS
ZWZQdHI8SlNPTjo6QXJyYXk+JiYgaW5fb3B0X2FsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5n
JiBpbl9vcHRfcHJpbnRDb2xvcikKIHsKICAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9T
ZWxlY3RvcjpAc2VsZWN0b3IoZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1dpdGhFcnJvckNh
bGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazpjb2x1bW5OYW1lczpub3Rlczp0aW1lc3RhbXA6dmFsdWVz
OnBheWxvYWQ6ZGF0YWJhc2VJZDpzcWxFcnJvcjpzY3JlZW5Db2xvcjphbHRlcm5hdGVDb2xvcnM6
cHJpbnRDb2xvcjopXSkgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90
b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAi
J0RhdGFiYXNlLmV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMnIHdhcyBub3QgZm91bmQiX3Mp
OworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHByb3Rv
Y29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RhdGFiYXNl
LmV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMnIHdhcyBub3QgZm91bmQiX3MpOwogICAgICAg
ICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCiAgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7
Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVz
dElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAgICAgYmFj
a2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxsSWQsIEJh
Y2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwogICAgICAgICBiYWNrZW5kRGlz
cGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgIH07CiAKLSAgICBpZCBzdWNjZXNz
Q2FsbGJhY2sgPSBeKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKmNvbHVtbk5hbWVzLCBOU1N0cmlu
ZyAqKm5vdGVzLCBkb3VibGUgKnRpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqdmFs
dWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKipwYXlsb2FkLCBpbnQgKmRhdGFiYXNlSWQsIFRl
c3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKipzcWxFcnJvciwgVGVzdFByb3RvY29sRGF0YWJhc2VQ
cmltYXJ5Q29sb3JzICpzY3JlZW5Db2xvciwgTlNBcnJheS8qPE5TU3RyaW5nPiovICoqYWx0ZXJu
YXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRl
cnNQcmludENvbG9yICpwcmludENvbG9yKSB7Ci0gICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IHJl
c3VsdE9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgICAgIFRIUk9XX0VYQ0VQ
VElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihjb2x1bW5OYW1lcywgQCJjb2x1bW5OYW1l
cyIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIo
bm90ZXMsIEAibm90ZXMiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9O
QUxfUEFSQU1FVEVSKHZhbHVlcywgQCJ2YWx1ZXMiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9O
X0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKHBheWxvYWQsIEAicGF5bG9hZCIpOwotICAgICAg
ICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIoc3FsRXJyb3IsIEAi
c3FsRXJyb3IiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFS
QU1FVEVSKGFsdGVybmF0ZUNvbG9ycywgQCJhbHRlcm5hdGVDb2xvcnMiKTsKLSAgICAgICAgaWYg
KGNvbHVtbk5hbWVzKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRBcnJheSgiY29sdW1u
TmFtZXMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KCpjb2x1bW5OYW1lcykpOwotICAgICAgICBpZiAo
bm90ZXMpCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZygibm90ZXMiX3MsICpu
b3Rlcyk7Ci0gICAgICAgIGlmICh0aW1lc3RhbXApCi0gICAgICAgICAgICByZXN1bHRPYmplY3Qt
PnNldERvdWJsZSgidGltZXN0YW1wIl9zLCAqdGltZXN0YW1wKTsKLSAgICAgICAgaWYgKHZhbHVl
cykKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIFsqdmFs
dWVzIHRvSlNPTk9iamVjdF0pOwotICAgICAgICBpZiAocGF5bG9hZCkKLSAgICAgICAgICAgIHJl
c3VsdE9iamVjdC0+c2V0VmFsdWUoInBheWxvYWQiX3MsIFsqcGF5bG9hZCB0b0pTT05PYmplY3Rd
KTsKLSAgICAgICAgaWYgKGRhdGFiYXNlSWQpCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNl
dEludGVnZXIoImRhdGFiYXNlSWQiX3MsICpkYXRhYmFzZUlkKTsKLSAgICAgICAgaWYgKHNxbEVy
cm9yKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBb
KnNxbEVycm9yIHRvSlNPTk9iamVjdF0pOwotICAgICAgICBpZiAoc2NyZWVuQ29sb3IpCi0gICAg
ICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZygic2NyZWVuQ29sb3IiX3MsIHRvUHJvdG9j
b2xTdHJpbmcoKnNjcmVlbkNvbG9yKSk7Ci0gICAgICAgIGlmIChhbHRlcm5hdGVDb2xvcnMpCi0g
ICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIHRv
SlNPTlN0cmluZ0FycmF5KCphbHRlcm5hdGVDb2xvcnMpKTsKLSAgICAgICAgaWYgKHByaW50Q29s
b3IpCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZygicHJpbnRDb2xvciJfcywg
dG9Qcm90b2NvbFN0cmluZygqcHJpbnRDb2xvcikpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hl
cigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdE9iamVjdCksIGZhbHNl
KTsKKyAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKm91
dF9vcHRfY29sdW1uTmFtZXMsIE5TU3RyaW5nICoqb3V0X29wdF9ub3RlcywgZG91YmxlICpvdXRf
b3B0X3RpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqb3V0X29wdF92YWx1ZXMsIFJX
SVByb3RvY29sSlNPTk9iamVjdCAqKm91dF9vcHRfcGF5bG9hZCwgaW50ICpvdXRfb3B0X2RhdGFi
YXNlSWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKipvdXRfb3B0X3NxbEVycm9yLCBUZXN0
UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgKm91dF9vcHRfc2NyZWVuQ29sb3IsIE5TQXJy
YXkvKjxOU1N0cmluZz4qLyAqKm91dF9vcHRfYWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xE
YXRhYmFzZShhbm9ueW1vdXMpICpvdXRfb3B0X3ByaW50Q29sb3IpIHsKKyAgICAgICAgYXV0byBw
cm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIFRI
Uk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihvdXRfb3B0X2NvbHVtbk5h
bWVzLCBAImNvbHVtbk5hbWVzIik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09Q
VElPTkFMX1BBUkFNRVRFUihvdXRfb3B0X25vdGVzLCBAIm5vdGVzIik7CisgICAgICAgIFRIUk9X
X0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihvdXRfb3B0X3ZhbHVlcywgQCJ2
YWx1ZXMiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1F
VEVSKG91dF9vcHRfcGF5bG9hZCwgQCJwYXlsb2FkIik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihvdXRfb3B0X3NxbEVycm9yLCBAInNxbEVycm9y
Iik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihv
dXRfb3B0X2FsdGVybmF0ZUNvbG9ycywgQCJhbHRlcm5hdGVDb2xvcnMiKTsKKyAgICAgICAgaWYg
KCEhb3V0X29wdF9jb2x1bW5OYW1lcykKKyAgICAgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdl
LT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KCpvdXRfb3B0X2Nv
bHVtbk5hbWVzKSk7CisgICAgICAgIGlmICghIW91dF9vcHRfbm90ZXMpCisgICAgICAgICAgICBw
cm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJub3RlcyJfcywgKm91dF9vcHRfbm90ZXMp
OworICAgICAgICBpZiAoISFvdXRfb3B0X3RpbWVzdGFtcCkKKyAgICAgICAgICAgIHByb3RvY29s
X2pzb25NZXNzYWdlLT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywgKm91dF9vcHRfdGltZXN0YW1w
KTsKKyAgICAgICAgaWYgKCEhb3V0X29wdF92YWx1ZXMpCisgICAgICAgICAgICBwcm90b2NvbF9q
c29uTWVzc2FnZS0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIFsqb3V0X29wdF92YWx1ZXMgdG9KU09O
T2JqZWN0XSk7CisgICAgICAgIGlmICghIW91dF9vcHRfcGF5bG9hZCkKKyAgICAgICAgICAgIHBy
b3RvY29sX2pzb25NZXNzYWdlLT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgWypvdXRfb3B0X3BheWxv
YWQgdG9KU09OT2JqZWN0XSk7CisgICAgICAgIGlmICghIW91dF9vcHRfZGF0YWJhc2VJZCkKKyAg
ICAgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRJbnRlZ2VyKCJkYXRhYmFzZUlkIl9z
LCAqb3V0X29wdF9kYXRhYmFzZUlkKTsKKyAgICAgICAgaWYgKCEhb3V0X29wdF9zcWxFcnJvcikK
KyAgICAgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRPYmplY3QoInNxbEVycm9yIl9z
LCBbKm91dF9vcHRfc3FsRXJyb3IgdG9KU09OT2JqZWN0XSk7CisgICAgICAgIGlmICghIW91dF9v
cHRfc2NyZWVuQ29sb3IpCisgICAgICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3Ry
aW5nKCJzY3JlZW5Db2xvciJfcywgdG9Qcm90b2NvbFN0cmluZygqb3V0X29wdF9zY3JlZW5Db2xv
cikpOworICAgICAgICBpZiAoISFvdXRfb3B0X2FsdGVybmF0ZUNvbG9ycykKKyAgICAgICAgICAg
IHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCB0b0pT
T05TdHJpbmdBcnJheSgqb3V0X29wdF9hbHRlcm5hdGVDb2xvcnMpKTsKKyAgICAgICAgaWYgKCEh
b3V0X29wdF9wcmludENvbG9yKQorICAgICAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNl
dFN0cmluZygicHJpbnRDb2xvciJfcywgdG9Qcm90b2NvbFN0cmluZygqb3V0X29wdF9wcmludENv
bG9yKSk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShwcm90b2Nv
bF9jYWxsSWQsIFdURk1vdmUocHJvdG9jb2xfanNvbk1lc3NhZ2UpLCBmYWxzZSk7CiAgICAgfTsK
IAotICAgIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqb19pbl9jb2x1bW5OYW1lczsKLSAgICBpZiAo
aW5fY29sdW1uTmFtZXMpCi0gICAgICAgIG9faW5fY29sdW1uTmFtZXMgPSB0b09iakNTdHJpbmdB
cnJheShpbl9jb2x1bW5OYW1lcyk7Ci0gICAgTlNTdHJpbmcgKm9faW5fbm90ZXM7Ci0gICAgaWYg
KGluX25vdGVzKQotICAgICAgICBvX2luX25vdGVzID0gKmluX25vdGVzOwotICAgIGRvdWJsZSBv
X2luX3RpbWVzdGFtcDsKLSAgICBpZiAoaW5fdGltZXN0YW1wKQotICAgICAgICBvX2luX3RpbWVz
dGFtcCA9ICppbl90aW1lc3RhbXA7Ci0gICAgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpvX2luX3Zh
bHVlczsKLSAgICBpZiAoaW5fdmFsdWVzKQotICAgICAgICBvX2luX3ZhbHVlcyA9IFtbW1JXSVBy
b3RvY29sSlNPTk9iamVjdCBhbGxvY10gaW5pdFdpdGhKU09OT2JqZWN0OmluX3ZhbHVlc10gYXV0
b3JlbGVhc2VdOwotICAgIFJXSVByb3RvY29sSlNPTk9iamVjdCAqb19pbl9wYXlsb2FkOwotICAg
IGlmIChpbl9wYXlsb2FkKQotICAgICAgICBvX2luX3BheWxvYWQgPSBbW1tSV0lQcm90b2NvbEpT
T05PYmplY3QgYWxsb2NdIGluaXRXaXRoSlNPTk9iamVjdDppbl9wYXlsb2FkXSBhdXRvcmVsZWFz
ZV07Ci0gICAgaW50IG9faW5fZGF0YWJhc2VJZDsKLSAgICBpZiAoaW5fZGF0YWJhc2VJZCkKLSAg
ICAgICAgb19pbl9kYXRhYmFzZUlkID0gKmluX2RhdGFiYXNlSWQ7Ci0gICAgVGVzdFByb3RvY29s
RGF0YWJhc2VFcnJvciAqb19pbl9zcWxFcnJvcjsKLSAgICBpZiAoaW5fc3FsRXJyb3IpCi0gICAg
ICAgIG9faW5fc3FsRXJyb3IgPSBbW1tUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yIGFsbG9jXSBp
bml0V2l0aEpTT05PYmplY3Q6aW5fc3FsRXJyb3JdIGF1dG9yZWxlYXNlXTsKLSAgICBPcHRpb25h
bDxUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnM+IG9faW5fc2NyZWVuQ29sb3I7Ci0g
ICAgaWYgKGluX3NjcmVlbkNvbG9yKQotICAgICAgICBvX2luX3NjcmVlbkNvbG9yID0gZnJvbVBy
b3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycz4oKmluX3NjcmVl
bkNvbG9yKTsKLSAgICBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKm9faW5fYWx0ZXJuYXRlQ29sb3Jz
OwotICAgIGlmIChpbl9hbHRlcm5hdGVDb2xvcnMpCi0gICAgICAgIG9faW5fYWx0ZXJuYXRlQ29s
b3JzID0gdG9PYmpDU3RyaW5nQXJyYXkoaW5fYWx0ZXJuYXRlQ29sb3JzKTsKLSAgICBPcHRpb25h
bDxUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENv
bG9yPiBvX2luX3ByaW50Q29sb3I7Ci0gICAgaWYgKGluX3ByaW50Q29sb3IpCi0gICAgICAgIG9f
aW5fcHJpbnRDb2xvciA9IGZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xEYXRhYmFzZUV4
ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yPigqaW5fcHJpbnRDb2xvcik7Ci0K
LSAgICBbbV9kZWxlZ2F0ZSBleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzV2l0aEVycm9yQ2Fs
bGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrIGNvbHVt
bk5hbWVzOihpbl9jb2x1bW5OYW1lcyA/ICZvX2luX2NvbHVtbk5hbWVzIDogbmlsKSBub3Rlczoo
aW5fbm90ZXMgPyAmb19pbl9ub3RlcyA6IG5pbCkgdGltZXN0YW1wOihpbl90aW1lc3RhbXAgPyAm
b19pbl90aW1lc3RhbXAgOiBuaWwpIHZhbHVlczooaW5fdmFsdWVzID8gJm9faW5fdmFsdWVzIDog
bmlsKSBwYXlsb2FkOihpbl9wYXlsb2FkID8gJm9faW5fcGF5bG9hZCA6IG5pbCkgZGF0YWJhc2VJ
ZDooaW5fZGF0YWJhc2VJZCA/ICZvX2luX2RhdGFiYXNlSWQgOiBuaWwpIHNxbEVycm9yOihpbl9z
cWxFcnJvciA/ICZvX2luX3NxbEVycm9yIDogbmlsKSBzY3JlZW5Db2xvcjooaW5fc2NyZWVuQ29s
b3IgPyAmb19pbl9zY3JlZW5Db2xvci52YWx1ZSgpIDogbmlsKSBhbHRlcm5hdGVDb2xvcnM6KGlu
X2FsdGVybmF0ZUNvbG9ycyA/ICZvX2luX2FsdGVybmF0ZUNvbG9ycyA6IG5pbCkgcHJpbnRDb2xv
cjooaW5fcHJpbnRDb2xvciA/ICZvX2luX3ByaW50Q29sb3IudmFsdWUoKSA6IG5pbCldOworICAg
IE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqb19pbl9vcHRfY29sdW1uTmFtZXM7CisgICAgaWYgKCEh
aW5fb3B0X2NvbHVtbk5hbWVzKQorICAgICAgICBvX2luX29wdF9jb2x1bW5OYW1lcyA9IHRvT2Jq
Q1N0cmluZ0FycmF5KGluX29wdF9jb2x1bW5OYW1lcy5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICBO
U1N0cmluZyAqb19pbl9vcHRfbm90ZXM7CisgICAgaWYgKCEhaW5fb3B0X25vdGVzKQorICAgICAg
ICBvX2luX29wdF9ub3RlcyA9IGluX29wdF9ub3RlczsKKyAgICBkb3VibGUgb19pbl9vcHRfdGlt
ZXN0YW1wOworICAgIGlmICghIWluX29wdF90aW1lc3RhbXApCisgICAgICAgIG9faW5fb3B0X3Rp
bWVzdGFtcCA9ICppbl9vcHRfdGltZXN0YW1wOworICAgIFJXSVByb3RvY29sSlNPTk9iamVjdCAq
b19pbl9vcHRfdmFsdWVzOworICAgIGlmICghIWluX29wdF92YWx1ZXMpCisgICAgICAgIG9faW5f
b3B0X3ZhbHVlcyA9IFtbW1JXSVByb3RvY29sSlNPTk9iamVjdCBhbGxvY10gaW5pdFdpdGhKU09O
T2JqZWN0OmluX29wdF92YWx1ZXMucmVsZWFzZU5vbk51bGwoKV0gYXV0b3JlbGVhc2VdOworICAg
IFJXSVByb3RvY29sSlNPTk9iamVjdCAqb19pbl9vcHRfcGF5bG9hZDsKKyAgICBpZiAoISFpbl9v
cHRfcGF5bG9hZCkKKyAgICAgICAgb19pbl9vcHRfcGF5bG9hZCA9IFtbW1JXSVByb3RvY29sSlNP
Tk9iamVjdCBhbGxvY10gaW5pdFdpdGhKU09OT2JqZWN0OmluX29wdF9wYXlsb2FkLnJlbGVhc2VO
b25OdWxsKCldIGF1dG9yZWxlYXNlXTsKKyAgICBpbnQgb19pbl9vcHRfZGF0YWJhc2VJZDsKKyAg
ICBpZiAoISFpbl9vcHRfZGF0YWJhc2VJZCkKKyAgICAgICAgb19pbl9vcHRfZGF0YWJhc2VJZCA9
ICppbl9vcHRfZGF0YWJhc2VJZDsKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICpvX2lu
X29wdF9zcWxFcnJvcjsKKyAgICBpZiAoISFpbl9vcHRfc3FsRXJyb3IpCisgICAgICAgIG9faW5f
b3B0X3NxbEVycm9yID0gW1tbVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciBhbGxvY10gaW5pdFdp
dGhKU09OT2JqZWN0OmluX29wdF9zcWxFcnJvci5yZWxlYXNlTm9uTnVsbCgpXSBhdXRvcmVsZWFz
ZV07CisgICAgT3B0aW9uYWw8VGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzPiBvX2lu
X29wdF9zY3JlZW5Db2xvcjsKKyAgICBpZiAoISFpbl9vcHRfc2NyZWVuQ29sb3IpCisgICAgICAg
IG9faW5fb3B0X3NjcmVlbkNvbG9yID0gZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbERh
dGFiYXNlUHJpbWFyeUNvbG9ycz4oaW5fb3B0X3NjcmVlbkNvbG9yKTsKKyAgICBOU0FycmF5Lyo8
TlNTdHJpbmc+Ki8gKm9faW5fb3B0X2FsdGVybmF0ZUNvbG9yczsKKyAgICBpZiAoISFpbl9vcHRf
YWx0ZXJuYXRlQ29sb3JzKQorICAgICAgICBvX2luX29wdF9hbHRlcm5hdGVDb2xvcnMgPSB0b09i
akNTdHJpbmdBcnJheShpbl9vcHRfYWx0ZXJuYXRlQ29sb3JzLnJlbGVhc2VOb25OdWxsKCkpOwor
ICAgIE9wdGlvbmFsPFRlc3RQcm90b2NvbERhdGFiYXNlKGFub255bW91cyk+IG9faW5fb3B0X3By
aW50Q29sb3I7CisgICAgaWYgKCEhaW5fb3B0X3ByaW50Q29sb3IpCisgICAgICAgIG9faW5fb3B0
X3ByaW50Q29sb3IgPSBmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sRGF0YWJhc2UoYW5v
bnltb3VzKT4oaW5fb3B0X3ByaW50Q29sb3IpOworICAgIFttX2RlbGVnYXRlIGV4ZWN1dGVBbGxP
cHRpb25hbFBhcmFtZXRlcnNXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3ND
YWxsYmFjazpzdWNjZXNzQ2FsbGJhY2sgY29sdW1uTmFtZXM6KCEhaW5fb3B0X2NvbHVtbk5hbWVz
ID8gJm9faW5fb3B0X2NvbHVtbk5hbWVzIDogbmlsKSBub3RlczooISFpbl9vcHRfbm90ZXMgPyAm
b19pbl9vcHRfbm90ZXMgOiBuaWwpIHRpbWVzdGFtcDooISFpbl9vcHRfdGltZXN0YW1wID8gJm9f
aW5fb3B0X3RpbWVzdGFtcCA6IG5pbCkgdmFsdWVzOighIWluX29wdF92YWx1ZXMgPyAmb19pbl9v
cHRfdmFsdWVzIDogbmlsKSBwYXlsb2FkOighIWluX29wdF9wYXlsb2FkID8gJm9faW5fb3B0X3Bh
eWxvYWQgOiBuaWwpIGRhdGFiYXNlSWQ6KCEhaW5fb3B0X2RhdGFiYXNlSWQgPyAmb19pbl9vcHRf
ZGF0YWJhc2VJZCA6IG5pbCkgc3FsRXJyb3I6KCEhaW5fb3B0X3NxbEVycm9yID8gJm9faW5fb3B0
X3NxbEVycm9yIDogbmlsKSBzY3JlZW5Db2xvcjooISFpbl9vcHRfc2NyZWVuQ29sb3IgPyAmb19p
bl9vcHRfc2NyZWVuQ29sb3IudmFsdWUoKSA6IG5pbCkgYWx0ZXJuYXRlQ29sb3JzOighIWluX29w
dF9hbHRlcm5hdGVDb2xvcnMgPyAmb19pbl9vcHRfYWx0ZXJuYXRlQ29sb3JzIDogbmlsKSBwcmlu
dENvbG9yOighIWluX29wdF9wcmludENvbG9yID8gJm9faW5fb3B0X3ByaW50Q29sb3IudmFsdWUo
KSA6IG5pbCldOwogfQogCi12b2lkIE9iakNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRj
aGVyOjpleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMobG9uZyByZXF1ZXN0SWQsIGNvbnN0IEpT
T046OkFycmF5JiBpbl9jb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBpbl9ub3RlcywgZG91Ymxl
IGluX3RpbWVzdGFtcCwgY29uc3QgSlNPTjo6T2JqZWN0JiBpbl92YWx1ZXMsIEpTT046OlZhbHVl
IGluX3BheWxvYWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBKU09OOjpPYmplY3QmIGluX3Nx
bEVycm9yLCBjb25zdCBTdHJpbmcmIGluX3NjcmVlbkNvbG9yLCBjb25zdCBKU09OOjpBcnJheSYg
aW5fYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcmIGluX3ByaW50Q29sb3IpCit2b2lkIE9i
akNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlTm9PcHRpb25hbFBh
cmFtZXRlcnMobG9uZyBwcm90b2NvbF9jYWxsSWQsIFJlZjxKU09OOjpBcnJheT4mJiBpbl9jb2x1
bW5OYW1lcywgY29uc3QgU3RyaW5nJiBpbl9ub3RlcywgZG91YmxlIGluX3RpbWVzdGFtcCwgUmVm
PEpTT046Ok9iamVjdD4mJiBpbl92YWx1ZXMsIFJlZjxKU09OOjpWYWx1ZT4mJiBpbl9wYXlsb2Fk
LCBpbnQgaW5fZGF0YWJhc2VJZCwgUmVmPEpTT046Ok9iamVjdD4mJiBpbl9zcWxFcnJvciwgY29u
c3QgU3RyaW5nJiBpbl9zY3JlZW5Db2xvciwgUmVmPEpTT046OkFycmF5PiYmIGluX2FsdGVybmF0
ZUNvbG9ycywgY29uc3QgU3RyaW5nJiBpbl9wcmludENvbG9yKQogewogICAgIGlmICghW21fZGVs
ZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihleGVjdXRlTm9PcHRpb25hbFBhcmFt
ZXRlcnNXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6Y29sdW1uTmFtZXM6bm90ZXM6
dGltZXN0YW1wOnZhbHVlczpwYXlsb2FkOmRhdGFiYXNlSWQ6c3FsRXJyb3I6c2NyZWVuQ29sb3I6
YWx0ZXJuYXRlQ29sb3JzOnByaW50Q29sb3I6KV0pIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNo
ZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpN
ZXRob2ROb3RGb3VuZCwgIidEYXRhYmFzZS5leGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMnIHdh
cyBub3QgZm91bmQiX3MpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90
b2NvbEVycm9yKHByb3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZv
dW5kLCAiJ0RhdGFiYXNlLmV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycycgd2FzIG5vdCBmb3Vu
ZCJfcyk7CiAgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0
cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9j
b2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3Ip
OworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHByb3Rv
Y29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CiAgICAg
ICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgfTsKIAot
ICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF4oTlNBcnJheS8qPE5TU3RyaW5nPiovICpjb2x1bW5O
YW1lcywgTlNTdHJpbmcgKm5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05P
YmplY3QgKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpwYXlsb2FkLCBpbnQgZGF0YWJh
c2VJZCwgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqc3FsRXJyb3IsIFRlc3RQcm90b2NvbERh
dGFiYXNlUHJpbWFyeUNvbG9ycyBzY3JlZW5Db2xvciwgTlNBcnJheS8qPE5TU3RyaW5nPiovICph
bHRlcm5hdGVDb2xvcnMsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJh
bWV0ZXJzUHJpbnRDb2xvciBwcmludENvbG9yKSB7Ci0gICAgICAgIFJlZjxKU09OOjpPYmplY3Q+
IHJlc3VsdE9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKGNvbHVtbk5hbWVzLCBAImNvbHVtbk5hbWVz
Iik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKG5vdGVz
LCBAIm5vdGVzIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1F
VEVSKHZhbHVlcywgQCJ2YWx1ZXMiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFV
SVJFRF9QQVJBTUVURVIocGF5bG9hZCwgQCJwYXlsb2FkIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQ
VElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKHNxbEVycm9yLCBAInNxbEVycm9yIik7Ci0gICAg
ICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKGFsdGVybmF0ZUNvbG9y
cywgQCJhbHRlcm5hdGVDb2xvcnMiKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRBcnJheSgi
Y29sdW1uTmFtZXMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KGNvbHVtbk5hbWVzKSk7Ci0gICAgICAg
IHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKCJub3RlcyJfcywgbm90ZXMpOwotICAgICAgICByZXN1
bHRPYmplY3QtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCB0aW1lc3RhbXApOwotICAgICAgICBy
ZXN1bHRPYmplY3QtPnNldE9iamVjdCgidmFsdWVzIl9zLCBbdmFsdWVzIHRvSlNPTk9iamVjdF0p
OwotICAgICAgICByZXN1bHRPYmplY3QtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCBbcGF5bG9hZCB0
b0pTT05PYmplY3RdKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRJbnRlZ2VyKCJkYXRhYmFz
ZUlkIl9zLCBkYXRhYmFzZUlkKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRPYmplY3QoInNx
bEVycm9yIl9zLCBbc3FsRXJyb3IgdG9KU09OT2JqZWN0XSk7Ci0gICAgICAgIHJlc3VsdE9iamVj
dC0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgdG9Qcm90b2NvbFN0cmluZyhzY3JlZW5Db2xv
cikpOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3Ms
IHRvSlNPTlN0cmluZ0FycmF5KGFsdGVybmF0ZUNvbG9ycykpOwotICAgICAgICByZXN1bHRPYmpl
Y3QtPnNldFN0cmluZygicHJpbnRDb2xvciJfcywgdG9Qcm90b2NvbFN0cmluZyhwcmludENvbG9y
KSk7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQs
IFdURk1vdmUocmVzdWx0T2JqZWN0KSwgZmFsc2UpOworICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9
IF4oTlNBcnJheS8qPE5TU3RyaW5nPiovICpvdXRfY29sdW1uTmFtZXMsIE5TU3RyaW5nICpvdXRf
bm90ZXMsIGRvdWJsZSBvdXRfdGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKm91dF92
YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqb3V0X3BheWxvYWQsIGludCBvdXRfZGF0YWJh
c2VJZCwgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqb3V0X3NxbEVycm9yLCBUZXN0UHJvdG9j
b2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgb3V0X3NjcmVlbkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJp
bmc+Ki8gKm91dF9hbHRlcm5hdGVDb2xvcnMsIFRlc3RQcm90b2NvbERhdGFiYXNlKGFub255bW91
cykgb3V0X3ByaW50Q29sb3IpIHsKKyAgICAgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9
IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVR
VUlSRURfUEFSQU1FVEVSKG91dF9jb2x1bW5OYW1lcywgQCJjb2x1bW5OYW1lcyIpOworICAgICAg
ICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihvdXRfbm90ZXMsIEAibm90
ZXMiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIob3V0
X3ZhbHVlcywgQCJ2YWx1ZXMiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJF
RF9QQVJBTUVURVIob3V0X3BheWxvYWQsIEAicGF5bG9hZCIpOworICAgICAgICBUSFJPV19FWENF
UFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihvdXRfc3FsRXJyb3IsIEAic3FsRXJyb3IiKTsK
KyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIob3V0X2FsdGVy
bmF0ZUNvbG9ycywgQCJhbHRlcm5hdGVDb2xvcnMiKTsKKyAgICAgICAgcHJvdG9jb2xfanNvbk1l
c3NhZ2UtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgdG9KU09OU3RyaW5nQXJyYXkob3V0X2Nv
bHVtbk5hbWVzKSk7CisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm5v
dGVzIl9zLCBvdXRfbm90ZXMpOworICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0RG91
YmxlKCJ0aW1lc3RhbXAiX3MsIG91dF90aW1lc3RhbXApOworICAgICAgICBwcm90b2NvbF9qc29u
TWVzc2FnZS0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIFtvdXRfdmFsdWVzIHRvSlNPTk9iamVjdF0p
OworICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0VmFsdWUoInBheWxvYWQiX3MsIFtv
dXRfcGF5bG9hZCB0b0pTT05PYmplY3RdKTsKKyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2Ut
PnNldEludGVnZXIoImRhdGFiYXNlSWQiX3MsIG91dF9kYXRhYmFzZUlkKTsKKyAgICAgICAgcHJv
dG9jb2xfanNvbk1lc3NhZ2UtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIFtvdXRfc3FsRXJyb3Ig
dG9KU09OT2JqZWN0XSk7CisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJpbmco
InNjcmVlbkNvbG9yIl9zLCB0b1Byb3RvY29sU3RyaW5nKG91dF9zY3JlZW5Db2xvcikpOworICAg
ICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywg
dG9KU09OU3RyaW5nQXJyYXkob3V0X2FsdGVybmF0ZUNvbG9ycykpOworICAgICAgICBwcm90b2Nv
bF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCB0b1Byb3RvY29sU3RyaW5n
KG91dF9wcmludENvbG9yKSk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNw
b25zZShwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJvdG9jb2xfanNvbk1lc3NhZ2UpLCBmYWxz
ZSk7CiAgICAgfTsKIAotICAgIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqb19pbl9jb2x1bW5OYW1l
cyA9IHRvT2JqQ1N0cmluZ0FycmF5KCZpbl9jb2x1bW5OYW1lcyk7CisgICAgTlNBcnJheS8qPE5T
U3RyaW5nPiovICpvX2luX2NvbHVtbk5hbWVzID0gdG9PYmpDU3RyaW5nQXJyYXkoV1RGTW92ZShp
bl9jb2x1bW5OYW1lcykpOwogICAgIE5TU3RyaW5nICpvX2luX25vdGVzID0gaW5fbm90ZXM7CiAg
ICAgZG91YmxlIG9faW5fdGltZXN0YW1wID0gaW5fdGltZXN0YW1wOwotICAgIFJXSVByb3RvY29s
SlNPTk9iamVjdCAqb19pbl92YWx1ZXMgPSBbW1tSV0lQcm90b2NvbEpTT05PYmplY3QgYWxsb2Nd
IGluaXRXaXRoSlNPTk9iamVjdDomaW5fdmFsdWVzXSBhdXRvcmVsZWFzZV07Ci0gICAgUldJUHJv
dG9jb2xKU09OT2JqZWN0ICpvX2luX3BheWxvYWQgPSBbW1tSV0lQcm90b2NvbEpTT05PYmplY3Qg
YWxsb2NdIGluaXRXaXRoSlNPTk9iamVjdDomaW5fcGF5bG9hZF0gYXV0b3JlbGVhc2VdOworICAg
IFJXSVByb3RvY29sSlNPTk9iamVjdCAqb19pbl92YWx1ZXMgPSBbW1tSV0lQcm90b2NvbEpTT05P
YmplY3QgYWxsb2NdIGluaXRXaXRoSlNPTk9iamVjdDpXVEZNb3ZlKGluX3ZhbHVlcyldIGF1dG9y
ZWxlYXNlXTsKKyAgICBSV0lQcm90b2NvbEpTT05PYmplY3QgKm9faW5fcGF5bG9hZCA9IFtbW1JX
SVByb3RvY29sSlNPTk9iamVjdCBhbGxvY10gaW5pdFdpdGhKU09OT2JqZWN0OldURk1vdmUoaW5f
cGF5bG9hZCldIGF1dG9yZWxlYXNlXTsKICAgICBpbnQgb19pbl9kYXRhYmFzZUlkID0gaW5fZGF0
YWJhc2VJZDsKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICpvX2luX3NxbEVycm9yID0g
W1tbVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciBhbGxvY10gaW5pdFdpdGhKU09OT2JqZWN0OiZp
bl9zcWxFcnJvcl0gYXV0b3JlbGVhc2VdOworICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3Ig
Km9faW5fc3FsRXJyb3IgPSBbW1tUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yIGFsbG9jXSBpbml0
V2l0aEpTT05PYmplY3Q6V1RGTW92ZShpbl9zcWxFcnJvcildIGF1dG9yZWxlYXNlXTsKICAgICBP
cHRpb25hbDxUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnM+IG9faW5fc2NyZWVuQ29s
b3IgPSBmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3Jz
Pihpbl9zY3JlZW5Db2xvcik7CiAgICAgaWYgKCFvX2luX3NjcmVlbkNvbG9yKSB7CiAgICAgICAg
IGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNo
ZXI6OkludmFsaWRQYXJhbXMsICJQYXJhbWV0ZXIgJ3NjcmVlbkNvbG9yJyBvZiBtZXRob2QgJ0Rh
dGFiYXNlLmV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycycgY2Fubm90IGJlIHByb2Nlc3NlZCJf
cyk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgTlNBcnJheS8qPE5TU3RyaW5nPiovICpv
X2luX2FsdGVybmF0ZUNvbG9ycyA9IHRvT2JqQ1N0cmluZ0FycmF5KCZpbl9hbHRlcm5hdGVDb2xv
cnMpOwotICAgIE9wdGlvbmFsPFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQ
YXJhbWV0ZXJzUHJpbnRDb2xvcj4gb19pbl9wcmludENvbG9yID0gZnJvbVByb3RvY29sU3RyaW5n
PFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xv
cj4oaW5fcHJpbnRDb2xvcik7CisgICAgTlNBcnJheS8qPE5TU3RyaW5nPiovICpvX2luX2FsdGVy
bmF0ZUNvbG9ycyA9IHRvT2JqQ1N0cmluZ0FycmF5KFdURk1vdmUoaW5fYWx0ZXJuYXRlQ29sb3Jz
KSk7CisgICAgT3B0aW9uYWw8VGVzdFByb3RvY29sRGF0YWJhc2UoYW5vbnltb3VzKT4gb19pbl9w
cmludENvbG9yID0gZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbERhdGFiYXNlKGFub255
bW91cyk+KGluX3ByaW50Q29sb3IpOwogICAgIGlmICghb19pbl9wcmludENvbG9yKSB7CiAgICAg
ICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3Bh
dGNoZXI6OkludmFsaWRQYXJhbXMsICJQYXJhbWV0ZXIgJ3ByaW50Q29sb3InIG9mIG1ldGhvZCAn
RGF0YWJhc2UuZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzJyBjYW5ub3QgYmUgcHJvY2Vzc2Vk
Il9zKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLQogICAgIFttX2RlbGVnYXRlIGV4ZWN1dGVO
b09wdGlvbmFsUGFyYW1ldGVyc1dpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vz
c0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjayBjb2x1bW5OYW1lczpvX2luX2NvbHVtbk5hbWVzIG5v
dGVzOm9faW5fbm90ZXMgdGltZXN0YW1wOm9faW5fdGltZXN0YW1wIHZhbHVlczpvX2luX3ZhbHVl
cyBwYXlsb2FkOm9faW5fcGF5bG9hZCBkYXRhYmFzZUlkOm9faW5fZGF0YWJhc2VJZCBzcWxFcnJv
cjpvX2luX3NxbEVycm9yIHNjcmVlbkNvbG9yOm9faW5fc2NyZWVuQ29sb3IudmFsdWUoKSBhbHRl
cm5hdGVDb2xvcnM6b19pbl9hbHRlcm5hdGVDb2xvcnMgcHJpbnRDb2xvcjpvX2luX3ByaW50Q29s
b3IudmFsdWUoKV07CiB9CiAKQEAgLTEyMTMsOCArMTE4NSw4IEBAIF9fYXR0cmlidXRlX18oKHZp
c2liaWxpdHkgKCJkZWZhdWx0IikpKQogCiBAcHJvdG9jb2wgVGVzdFByb3RvY29sRGF0YWJhc2VE
b21haW5IYW5kbGVyIDxOU09iamVjdD4KIEBvcHRpb25hbAotLSAodm9pZClleGVjdXRlQWxsT3B0
aW9uYWxQYXJhbWV0ZXJzV2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9y
KSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKShOU0FycmF5Lyo8TlNTdHJp
bmc+Ki8gKipjb2x1bW5OYW1lcywgTlNTdHJpbmcgKipub3RlcywgZG91YmxlICp0aW1lc3RhbXAs
IFJXSVByb3RvY29sSlNPTk9iamVjdCAqKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICoq
cGF5bG9hZCwgaW50ICpkYXRhYmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoqc3Fs
RXJyb3IsIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyAqc2NyZWVuQ29sb3IsIE5T
QXJyYXkvKjxOU1N0cmluZz4qLyAqKmFsdGVybmF0ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0YWJh
c2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvciAqcHJpbnRDb2xvcikpc3Vj
Y2Vzc0NhbGxiYWNrIGNvbHVtbk5hbWVzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiopY29sdW1u
TmFtZXMgbm90ZXM6KE5TU3RyaW5nICoqKW5vdGVzIHRpbWVzdGFtcDooZG91YmxlICopdGltZXN0
YW1wIHZhbHVlczooUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqKXZhbHVlcyBwYXlsb2FkOihSV0lQ
cm90b2NvbEpTT05PYmplY3QgKiopcGF5bG9hZCBkYXRhYmFzZUlkOihpbnQgKilkYXRhYmFzZUlk
IHNxbEVycm9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoqKXNxbEVycm9yIHNjcmVlbkNv
bG9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgKilzY3JlZW5Db2xvciBhbHRl
cm5hdGVDb2xvcnM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKilhbHRlcm5hdGVDb2xvcnMgcHJp
bnRDb2xvcjooVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJz
UHJpbnRDb2xvciAqKXByaW50Q29sb3I7Ci0tICh2b2lkKWV4ZWN1dGVOb09wdGlvbmFsUGFyYW1l
dGVyc1dpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxs
YmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikoTlNBcnJheS8qPE5TU3RyaW5nPiovICpjb2x1
bW5OYW1lcywgTlNTdHJpbmcgKm5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBSV0lQcm90b2NvbEpT
T05PYmplY3QgKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpwYXlsb2FkLCBpbnQgZGF0
YWJhc2VJZCwgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqc3FsRXJyb3IsIFRlc3RQcm90b2Nv
bERhdGFiYXNlUHJpbWFyeUNvbG9ycyBzY3JlZW5Db2xvciwgTlNBcnJheS8qPE5TU3RyaW5nPiov
ICphbHRlcm5hdGVDb2xvcnMsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQ
YXJhbWV0ZXJzUHJpbnRDb2xvciBwcmludENvbG9yKSlzdWNjZXNzQ2FsbGJhY2sgY29sdW1uTmFt
ZXM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWNvbHVtbk5hbWVzIG5vdGVzOihOU1N0cmluZyAq
KW5vdGVzIHRpbWVzdGFtcDooZG91YmxlKXRpbWVzdGFtcCB2YWx1ZXM6KFJXSVByb3RvY29sSlNP
Tk9iamVjdCAqKXZhbHVlcyBwYXlsb2FkOihSV0lQcm90b2NvbEpTT05PYmplY3QgKilwYXlsb2Fk
IGRhdGFiYXNlSWQ6KGludClkYXRhYmFzZUlkIHNxbEVycm9yOihUZXN0UHJvdG9jb2xEYXRhYmFz
ZUVycm9yICopc3FsRXJyb3Igc2NyZWVuQ29sb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFy
eUNvbG9ycylzY3JlZW5Db2xvciBhbHRlcm5hdGVDb2xvcnM6KE5TQXJyYXkvKjxOU1N0cmluZz4q
LyAqKWFsdGVybmF0ZUNvbG9ycyBwcmludENvbG9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1
dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3IpcHJpbnRDb2xvcjsKKy0gKHZvaWQpZXhl
Y3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1dpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3Ry
aW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikoTlNBcnJh
eS8qPE5TU3RyaW5nPiovICoqY29sdW1uTmFtZXMsIE5TU3RyaW5nICoqbm90ZXMsIGRvdWJsZSAq
dGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKip2YWx1ZXMsIFJXSVByb3RvY29sSlNP
Tk9iamVjdCAqKnBheWxvYWQsIGludCAqZGF0YWJhc2VJZCwgVGVzdFByb3RvY29sRGF0YWJhc2VF
cnJvciAqKnNxbEVycm9yLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgKnNjcmVl
bkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiphbHRlcm5hdGVDb2xvcnMsIFRlc3RQcm90
b2NvbERhdGFiYXNlKGFub255bW91cykgKnByaW50Q29sb3IpKXN1Y2Nlc3NDYWxsYmFjayBjb2x1
bW5OYW1lczooTlNBcnJheS8qPE5TU3RyaW5nPiovICoqKWNvbHVtbk5hbWVzIG5vdGVzOihOU1N0
cmluZyAqKilub3RlcyB0aW1lc3RhbXA6KGRvdWJsZSAqKXRpbWVzdGFtcCB2YWx1ZXM6KFJXSVBy
b3RvY29sSlNPTk9iamVjdCAqKil2YWx1ZXMgcGF5bG9hZDooUldJUHJvdG9jb2xKU09OT2JqZWN0
ICoqKXBheWxvYWQgZGF0YWJhc2VJZDooaW50ICopZGF0YWJhc2VJZCBzcWxFcnJvcjooVGVzdFBy
b3RvY29sRGF0YWJhc2VFcnJvciAqKilzcWxFcnJvciBzY3JlZW5Db2xvcjooVGVzdFByb3RvY29s
RGF0YWJhc2VQcmltYXJ5Q29sb3JzICopc2NyZWVuQ29sb3IgYWx0ZXJuYXRlQ29sb3JzOihOU0Fy
cmF5Lyo8TlNTdHJpbmc+Ki8gKiopYWx0ZXJuYXRlQ29sb3JzIHByaW50Q29sb3I6KFRlc3RQcm90
b2NvbERhdGFiYXNlKGFub255bW91cykgKilwcmludENvbG9yOworLSAodm9pZClleGVjdXRlTm9P
cHRpb25hbFBhcmFtZXRlcnNXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJy
b3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKE5TQXJyYXkvKjxOU1N0
cmluZz4qLyAqY29sdW1uTmFtZXMsIE5TU3RyaW5nICpub3RlcywgZG91YmxlIHRpbWVzdGFtcCwg
UldJUHJvdG9jb2xKU09OT2JqZWN0ICp2YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqcGF5
bG9hZCwgaW50IGRhdGFiYXNlSWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKnNxbEVycm9y
LCBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgc2NyZWVuQ29sb3IsIE5TQXJyYXkv
KjxOU1N0cmluZz4qLyAqYWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZShhbm9u
eW1vdXMpIHByaW50Q29sb3IpKXN1Y2Nlc3NDYWxsYmFjayBjb2x1bW5OYW1lczooTlNBcnJheS8q
PE5TU3RyaW5nPiovICopY29sdW1uTmFtZXMgbm90ZXM6KE5TU3RyaW5nICopbm90ZXMgdGltZXN0
YW1wOihkb3VibGUpdGltZXN0YW1wIHZhbHVlczooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopdmFs
dWVzIHBheWxvYWQ6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXBheWxvYWQgZGF0YWJhc2VJZDoo
aW50KWRhdGFiYXNlSWQgc3FsRXJyb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKilzcWxF
cnJvciBzY3JlZW5Db2xvcjooVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzKXNjcmVl
bkNvbG9yIGFsdGVybmF0ZUNvbG9yczooTlNBcnJheS8qPE5TU3RyaW5nPiovICopYWx0ZXJuYXRl
Q29sb3JzIHByaW50Q29sb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlKGFub255bW91cykpcHJpbnRD
b2xvcjsKIEBlbmQKIAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0u
anNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZXhwZWN0ZWQvZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbi1yZXN1bHQKaW5k
ZXggZDAyYmVkN2I4ZDZlMmZlMDJhNTI0MmVkMTIyZjRhMjg0ZjkwYzliOS4uYjMwZGYxNzBhYWJh
NTk3YjM2MTk2MjRiYWQ2NzkzNTE1MzNlNDQ4YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2RlZmluaXRpb25zLXdpdGgt
bWFjLXBsYXRmb3JtLmpzb24tcmVzdWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9kZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9y
bS5qc29uLXJlc3VsdApAQCAtNzYsNyArNzYsNyBAQCBJbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRl
RG9tYWluKCJOZXR3b3JrIiwgbnVsbCk7CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKIAotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVk
ZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yRnJvbnRlbmRSb3V0ZXIuaD4KIApAQCAtOTYsNyArOTYsNyBAQCBjbGFzcyBBbHRlcm5hdGVO
ZXR3b3JrQmFja2VuZERpc3BhdGNoZXIgOiBwdWJsaWMgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNo
ZXIgewogcHVibGljOgogICAgIHZpcnR1YWwgfkFsdGVybmF0ZU5ldHdvcmtCYWNrZW5kRGlzcGF0
Y2hlcigpIHsgfQogI2lmIENPTU1BTkQtTUFDCi0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJj
ZShsb25nIGNhbGxJZCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UobG9uZyBw
cm90b2NvbF9jYWxsSWQpID0gMDsKICNlbmRpZiAvLyBDT01NQU5ELU1BQwogfTsKICNlbmRpZiAv
LyBET01BSU4tTUFDCkBAIC0xNDAsMTEgKzE0MCwxNCBAQCBwdWJsaWM6CiAKICNpbmNsdWRlICJU
ZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx0dXBsZT4KKyNpbmNsdWRlIDx3dGYvRXhw
ZWN0ZWQuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKLXR5cGVkZWYgU3RyaW5nIEVy
cm9yU3RyaW5nOworCiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVS
UykKICNpZiBET01BSU4tTUFDCkBAIC0xNTYsNyArMTU5LDcgQEAgY2xhc3MgQWx0ZXJuYXRlTmV0
d29ya0JhY2tlbmREaXNwYXRjaGVyOwogY2xhc3MgTmV0d29ya0JhY2tlbmREaXNwYXRjaGVySGFu
ZGxlciB7CiBwdWJsaWM6CiAjaWYgQ09NTUFORC1NQUMKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJl
c291cmNlKEVycm9yU3RyaW5nJikgPSAwOworICAgIHZpcnR1YWwgUHJvdG9jb2w6OkVycm9yU3Ry
aW5nT3I8dm9pZD4gbG9hZFJlc291cmNlKCkgPSAwOwogI2VuZGlmIC8vIENPTU1BTkQtTUFDCiBw
cm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB+TmV0d29ya0JhY2tlbmREaXNwYXRjaGVySGFuZGxlcigp
OwpAQCAtMTY3LDEwICsxNzAsMTAgQEAgcHJvdGVjdGVkOgogY2xhc3MgTmV0d29ya0JhY2tlbmRE
aXNwYXRjaGVyIGZpbmFsIDogcHVibGljIFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIHsK
IHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRl
KEJhY2tlbmREaXNwYXRjaGVyJiwgTmV0d29ya0JhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwot
ICAgIHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBS
ZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpIGZpbmFsOworICAgIHZvaWQgZGlzcGF0Y2gobG9u
ZyBwcm90b2NvbF9jYWxsSWQsIGNvbnN0IFN0cmluZyYgcHJvdG9jb2xfbWV0aG9kLCBSZWY8SlNP
Tjo6T2JqZWN0PiYmIHByb3RvY29sX21lc3NhZ2UpIGZpbmFsOwogcHJpdmF0ZToKICNpZiBDT01N
QU5ELU1BQwotICAgIHZvaWQgbG9hZFJlc291cmNlKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNP
Tjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOworICAgIHZvaWQgbG9hZFJlc291cmNlKGxvbmcgcHJv
dG9jbF9jYWxsSWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfcGFyYW1ldGVycyk7
CiAjZW5kaWYgLy8gQ09NTUFORC1NQUMKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9E
SVNQQVRDSEVSUykKIHB1YmxpYzoKQEAgLTIyMSw5ICsyMjQsNyBAQCBwcml2YXRlOgogI2luY2x1
ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4K
ICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3Ry
aW5nLmg+CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKICNp
bmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCkBAIC0yNDgsNDEgKzI0
OSw0MSBAQCBOZXR3b3JrQmFja2VuZERpc3BhdGNoZXI6Ok5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hl
cihCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpcwogICAgIG1fYmFja2VuZERpc3BhdGNoZXIt
PnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbigiTmV0d29yayJfcywgdGhpcyk7CiB9CiAKLXZv
aWQgTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29u
c3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkKK3ZvaWQgTmV0
d29ya0JhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHByb3RvY29sX2NhbGxJZCwgY29u
c3QgU3RyaW5nJiBwcm90b2NvbF9tZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xf
bWVzc2FnZSkKIHsKICAgICBSZWY8TmV0d29ya0JhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0
aGlzKTsKIAotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnM7Ci0gICAgbWVzc2Fn
ZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3MsIHBhcmFtZXRlcnMpOworICAgIGF1dG8gcHJvdG9jb2xf
cGFyYW1ldGVycyA9IHByb3RvY29sX21lc3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9zKTsKIAog
I2lmIENPTU1BTkQtTUFDCi0gICAgaWYgKG1ldGhvZCA9PSAibG9hZFJlc291cmNlIikgewotICAg
ICAgICBsb2FkUmVzb3VyY2UocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKKyAgICBp
ZiAocHJvdG9jb2xfbWV0aG9kID09ICJsb2FkUmVzb3VyY2UiKSB7CisgICAgICAgIGxvYWRSZXNv
dXJjZShwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJvdG9jb2xfcGFyYW1ldGVycykpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmIC8vIENPTU1BTkQtTUFDCiAKLSAgICBtX2JhY2tl
bmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRo
b2ROb3RGb3VuZCwgIidOZXR3b3JrLiIgKyBtZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7Cisg
ICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0
Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29yay4iICsgcHJvdG9jb2xfbWV0aG9kICsgIicg
d2FzIG5vdCBmb3VuZCIpOwogfQogCiAjaWYgQ09NTUFORC1NQUMKLXZvaWQgTmV0d29ya0JhY2tl
bmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpP
YmplY3Q+JiYpCit2b2lkIE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlKGxv
bmcgcHJvdG9jb2xfY2FsbElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQogewogI2lmIEVOQUJM
RShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogICAgIGlmIChtX2FsdGVybmF0ZURp
c3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVzb3VyY2Uo
cmVxdWVzdElkKTsKKyAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVzb3VyY2Uo
cHJvdG9jb2xfY2FsbElkKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZiAvLyBFTkFC
TEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIAotICAgIEVycm9yU3RyaW5nIGVy
cm9yOwotICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRl
KCk7Ci0gICAgbV9hZ2VudC0+bG9hZFJlc291cmNlKGVycm9yKTsKKyAgICBhdXRvIHJlc3VsdCA9
IG1fYWdlbnQtPmxvYWRSZXNvdXJjZSgpOworICAgIGlmICghcmVzdWx0KSB7CisgICAgICAgIEFT
U0VSVCghcmVzdWx0LmVycm9yKCkuaXNFbXB0eSgpKTsKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0
Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3Is
IHJlc3VsdC5lcnJvcigpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIGlmICghZXJy
b3IubGVuZ3RoKCkpCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShy
ZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2UpOwotICAgIGVsc2UKLSAgICAgICAgbV9i
YWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6
U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKKyAgICBhdXRvIHByb3RvY29sX2pzb25NZXNz
YWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5z
ZW5kUmVzcG9uc2UocHJvdG9jb2xfY2FsbElkLCBXVEZNb3ZlKHByb3RvY29sX2pzb25NZXNzYWdl
KSwgZmFsc2UpOwogfQogI2VuZGlmIC8vIENPTU1BTkQtTUFDCiAjZW5kaWYgLy8gRE9NQUlOLU1B
QwpAQCAtMzI1LDYgKzMyNiw3IEBAIHZvaWQgTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyOjpsb2Fk
UmVzb3VyY2UobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+CiAKICNpbmNsdWRl
ICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNp
bmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
IAogbmFtZXNwYWNlIEluc3BlY3RvciB7CkBAIC0zODEsNyArMzgzLDYgQEAgcHJpdmF0ZToKICNp
bmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3Ry
aW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC0zODksMTAgKzM5MCwxMCBAQCBu
YW1lc3BhY2UgSW5zcGVjdG9yIHsKICNpZiBFVkVOVC1NQUMKIHZvaWQgTmV0d29ya0Zyb250ZW5k
RGlzcGF0Y2hlcjo6cmVzb3VyY2VMb2FkZWQoKQogewotICAgIFJlZjxKU09OOjpPYmplY3Q+IGpz
b25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0
U3RyaW5nKCJtZXRob2QiX3MsICJOZXR3b3JrLnJlc291cmNlTG9hZGVkIl9zKTsKKyAgICBhdXRv
IHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBwcm90
b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJOZXR3b3JrLnJlc291cmNl
TG9hZGVkIl9zKTsKIAotICAgIG1fZnJvbnRlbmRSb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdl
LT50b0pTT05TdHJpbmcoKSk7CisgICAgbV9mcm9udGVuZFJvdXRlci5zZW5kRXZlbnQocHJvdG9j
b2xfanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKIH0KICNlbmRpZiAvLyBFVkVOVC1NQUMK
ICNlbmRpZiAvLyBET01BSU4tTUFDCkBAIC00MzQsNyArNDM1LDkgQEAgdm9pZCBOZXR3b3JrRnJv
bnRlbmREaXNwYXRjaGVyOjpyZXNvdXJjZUxvYWRlZCgpCiAjcHJhZ21hIG9uY2UKIAogI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KLSNpbmNsdWRlIDx3
dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8
d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVz
cGFjZSBJbnNwZWN0b3IgewogCkBAIC00NjEsNyArNDY0LDcgQEAgY2xhc3MgTmV0d29ya0Vycm9y
OwogbmFtZXNwYWNlIE5ldHdvcmsgewogCiAjaWYgVFlQRS1NQUMKLWNsYXNzIE5ldHdvcmtFcnJv
ciA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKK2NsYXNzIE5ldHdvcmtFcnJvciBmaW5hbCA6
IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKIHB1YmxpYzoKICAgICBlbnVtIHsKICAgICAgICAg
Tm9GaWVsZHNTZXQgPSAwLApAQCAtNDg4LDE3ICs0OTEsMTcgQEAgcHVibGljOgogICAgICAgICBm
cmllbmQgY2xhc3MgTmV0d29ya0Vycm9yOwogICAgIHB1YmxpYzoKIAotICAgICAgICBCdWlsZGVy
PFNUQVRFIHwgTWVzc2FnZVNldD4mIHNldE1lc3NhZ2UoY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAg
ICAgICAgQnVpbGRlcjxTVEFURSB8IE1lc3NhZ2VTZXQ+JiBzZXRNZXNzYWdlKGNvbnN0IFN0cmlu
ZyYgaW5fbWVzc2FnZSkKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShT
VEFURSAmIE1lc3NhZ2VTZXQpLCBwcm9wZXJ0eV9tZXNzYWdlX2FscmVhZHlfc2V0KTsKLSAgICAg
ICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm1lc3NhZ2UiX3MsIHZhbHVlKTsKKyAgICAgICAg
ICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm1lc3NhZ2UiX3MsIGluX21lc3NhZ2UpOwogICAgICAg
ICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxNZXNzYWdlU2V0PigpOwogICAgICAgICB9CiAKLSAgICAg
ICAgQnVpbGRlcjxTVEFURSB8IENvZGVTZXQ+JiBzZXRDb2RlKGludCB2YWx1ZSkKKyAgICAgICAg
QnVpbGRlcjxTVEFURSB8IENvZGVTZXQ+JiBzZXRDb2RlKGludCBpbl9jb2RlKQogICAgICAgICB7
CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQ29kZVNldCksIHByb3BlcnR5
X2NvZGVfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldEludGVnZXIoImNv
ZGUiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRJbnRlZ2VyKCJjb2RlIl9z
LCBpbl9jb2RlKTsKICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Q29kZVNldD4oKTsKICAg
ICAgICAgfQogCkBAIC01NzAsOCArNTczLDcgQEAgcHVibGljOgogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKIAotI2luY2x1ZGUgPHd0Zi9PcHRp
b25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvQXNz
ZXJ0aW9ucy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtNjMxLDcgKzYzMyw3IEBA
IGNsYXNzIE9iakNJbnNwZWN0b3JOZXR3b3JrQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJs
aWMgQWx0ZXJuYXRlTmV0d29ya0JhY2tlCiBwdWJsaWM6CiAgICAgT2JqQ0luc3BlY3Rvck5ldHdv
cmtCYWNrZW5kRGlzcGF0Y2hlcihpZDxUZXN0UHJvdG9jb2xOZXR3b3JrRG9tYWluSGFuZGxlcj4g
aGFuZGxlcikgeyBtX2RlbGVnYXRlID0gaGFuZGxlcjsgfQogI2lmIENPTU1BTkQtTUFDCi0gICAg
dm9pZCBsb2FkUmVzb3VyY2UobG9uZyByZXF1ZXN0SWQpIGZpbmFsOworICAgIHZvaWQgbG9hZFJl
c291cmNlKGxvbmcgcHJvdG9jb2xfY2FsbElkKSBmaW5hbDsKICNlbmRpZiAvLyBDT01NQU5ELU1B
QwogcHJpdmF0ZToKICAgICBSZXRhaW5QdHI8aWQ8VGVzdFByb3RvY29sTmV0d29ya0RvbWFpbkhh
bmRsZXI+PiBtX2RlbGVnYXRlOwpAQCAtNjgzLDIxICs2ODUsMjIgQEAgbmFtZXNwYWNlIEluc3Bl
Y3RvciB7CiAKICNpZiBET01BSU4tTUFDCiAjaWYgQ09NTUFORC1NQUMKLXZvaWQgT2JqQ0luc3Bl
Y3Rvck5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlKGxvbmcgcmVxdWVzdElk
KQordm9pZCBPYmpDSW5zcGVjdG9yTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3Vy
Y2UobG9uZyBwcm90b2NvbF9jYWxsSWQpCiB7CiAgICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25k
c1RvU2VsZWN0b3I6QHNlbGVjdG9yKGxvYWRSZXNvdXJjZVdpdGhFcnJvckNhbGxiYWNrOnN1Y2Nl
c3NDYWxsYmFjazopXSkgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90
b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAi
J05ldHdvcmsubG9hZFJlc291cmNlJyB3YXMgbm90IGZvdW5kIl9zKTsKKyAgICAgICAgYmFja2Vu
ZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxsSWQsIEJhY2tl
bmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidOZXR3b3JrLmxvYWRSZXNvdXJjZScgd2Fz
IG5vdCBmb3VuZCJfcyk7CiAgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5n
RXJyb3JzKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZCBlcnJvckNhbGxiYWNr
ID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVw
b3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJv
ciwgZXJyb3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVy
cm9yKHByb3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJv
cik7CiAgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CiAg
ICAgfTsKIAogICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF57Ci0gICAgICAgIGJhY2tlbmREaXNw
YXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIEpTT046Ok9iamVjdDo6Y3JlYXRlKCks
IGZhbHNlKTsKKyAgICAgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVj
dDo6Y3JlYXRlKCk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShw
cm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJvdG9jb2xfanNvbk1lc3NhZ2UpLCBmYWxzZSk7CiAg
ICAgfTsKIAogICAgIFttX2RlbGVnYXRlIGxvYWRSZXNvdXJjZVdpdGhFcnJvckNhbGxiYWNrOmVy
cm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107CkBAIC05MTEsOSAr
OTE0LDkgQEAgdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKIHsKICAgICBjb25zdCBGcm9udGVu
ZFJvdXRlciYgcm91dGVyID0gX2NvbnRyb2xsZXItPmZyb250ZW5kUm91dGVyKCk7CiAKLSAgICBS
ZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0g
ICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiTmV0d29yay5yZXNvdXJjZUxv
YWRlZCJfcyk7Ci0gICAgcm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5n
KCkpOworICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0
ZSgpOworICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIk5l
dHdvcmsucmVzb3VyY2VMb2FkZWQiX3MpOworICAgIHJvdXRlci5zZW5kRXZlbnQocHJvdG9jb2xf
anNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKIH0KICNlbmRpZiAvLyBFVkVOVC1NQUMKIApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2V4cGVjdGVkL2RvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZG9tYWluLWRlYnVn
Z2FibGVUeXBlcy5qc29uLXJlc3VsdAppbmRleCBhNDhmNmY5YjVhMTk3OTgyYWQ2OTEwMjlhZWFh
ZGM2NzUyZjgxMzJhLi5jODc1MTQ4ZjNkYWYwNWVkMzFhY2VkOTdjMzJlYjNiYjc1NDdmOGFiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
ZXhwZWN0ZWQvZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5qc29uLXJlc3VsdAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZG9tYWluLWRl
YnVnZ2FibGVUeXBlcy5qc29uLXJlc3VsdApAQCAtNzAsNyArNzAsNyBAQCBJbnNwZWN0b3JCYWNr
ZW5kLmFjdGl2YXRlRG9tYWluKCJEb21haW4iLCBbIndlYi1wYWdlIl0pOwogCiAjaWYgRU5BQkxF
KElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAKLSNpbmNsdWRlICJUZXN0UHJvdG9j
b2xUeXBlcy5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgogI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CiAKQEAgLTg4LDcgKzg4LDcg
QEAgcHJpdmF0ZToKIGNsYXNzIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyIDogcHVi
bGljIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5B
bHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlcigpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBD
b21tYW5kKGxvbmcgY2FsbElkKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIENvbW1hbmQobG9uZyBw
cm90b2NvbF9jYWxsSWQpID0gMDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgpAQCAt
MTMwLDExICsxMzAsMTQgQEAgcHVibGljOgogCiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0
cy5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
Lmg+CisjaW5jbHVkZSA8dHVwbGU+CisjaW5jbHVkZSA8d3RmL0V4cGVjdGVkLmg+CisjaW5jbHVk
ZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5h
bWVzcGFjZSBJbnNwZWN0b3IgewogCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKwogCiAj
aWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiBjbGFzcyBBbHRlcm5h
dGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjsKQEAgLTE0Miw3ICsxNDUsNyBAQCBjbGFzcyBBbHRl
cm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjsKIAogY2xhc3MgRG9tYWluQmFja2VuZERpc3Bh
dGNoZXJIYW5kbGVyIHsKIHB1YmxpYzoKLSAgICB2aXJ0dWFsIHZvaWQgQ29tbWFuZChFcnJvclN0
cmluZyYpID0gMDsKKyAgICB2aXJ0dWFsIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IENv
bW1hbmQoKSA9IDA7CiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB+RG9tYWluQmFja2VuZERpc3Bh
dGNoZXJIYW5kbGVyKCk7CiB9OwpAQCAtMTUwLDkgKzE1Myw5IEBAIHByb3RlY3RlZDoKIGNsYXNz
IERvbWFpbkJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIFN1cHBsZW1lbnRhbEJhY2tl
bmREaXNwYXRjaGVyIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPERvbWFpbkJhY2tlbmREaXNw
YXRjaGVyPiBjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImLCBEb21haW5CYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXIqKTsKLSAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJp
bmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKSBmaW5hbDsKKyAgICB2b2lk
IGRpc3BhdGNoKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBjb25zdCBTdHJpbmcmIHByb3RvY29sX21l
dGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9tZXNzYWdlKSBmaW5hbDsKIHByaXZh
dGU6Ci0gICAgdm9pZCBDb21tYW5kKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0
PiYmIHBhcmFtZXRlcnMpOworICAgIHZvaWQgQ29tbWFuZChsb25nIHByb3RvY2xfY2FsbElkLCBS
ZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX3BhcmFtZXRlcnMpOwogI2lmIEVOQUJMRShJ
TlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogcHVibGljOgogICAgIHZvaWQgc2V0QWx0
ZXJuYXRlRGlzcGF0Y2hlcihBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlciogYWx0ZXJu
YXRlRGlzcGF0Y2hlcikgeyBtX2FsdGVybmF0ZURpc3BhdGNoZXIgPSBhbHRlcm5hdGVEaXNwYXRj
aGVyOyB9CkBAIC0yMDEsOSArMjA0LDcgQEAgcHJpdmF0ZToKICNpbmNsdWRlICJUZXN0QmFja2Vu
ZERpc3BhdGNoZXJzLmgiCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9u
dGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CiAjaW5jbHVkZSA8d3Rm
L05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiAjaWYg
RU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAjaW5jbHVkZSAiVGVzdEFs
dGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgpAQCAtMjI1LDM4ICsyMjYsMzggQEAgRG9tYWlu
QmFja2VuZERpc3BhdGNoZXI6OkRvbWFpbkJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRj
aGVyJiBiYWNrZW5kRGlzcGEKICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3Bh
dGNoZXJGb3JEb21haW4oIkRvbWFpbiJfcywgdGhpcyk7CiB9CiAKLXZvaWQgRG9tYWluQmFja2Vu
ZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhv
ZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKQordm9pZCBEb21haW5CYWNrZW5kRGlzcGF0
Y2hlcjo6ZGlzcGF0Y2gobG9uZyBwcm90b2NvbF9jYWxsSWQsIGNvbnN0IFN0cmluZyYgcHJvdG9j
b2xfbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX21lc3NhZ2UpCiB7CiAgICAg
UmVmPERvbWFpbkJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKIAotICAgIFJlZlB0
cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnM7Ci0gICAgbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJh
bXMiX3MsIHBhcmFtZXRlcnMpOworICAgIGF1dG8gcHJvdG9jb2xfcGFyYW1ldGVycyA9IHByb3Rv
Y29sX21lc3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9zKTsKIAotICAgIGlmIChtZXRob2QgPT0g
IkNvbW1hbmQiKSB7Ci0gICAgICAgIENvbW1hbmQocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRl
cnMpKTsKKyAgICBpZiAocHJvdG9jb2xfbWV0aG9kID09ICJDb21tYW5kIikgeworICAgICAgICBD
b21tYW5kKHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9wYXJhbWV0ZXJzKSk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQ
cm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEb21haW4u
IiArIG1ldGhvZCArICInIHdhcyBub3QgZm91bmQiKTsKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVy
LT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwg
IidEb21haW4uIiArIHByb3RvY29sX21ldGhvZCArICInIHdhcyBub3QgZm91bmQiKTsKIH0KIAot
dm9pZCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Q29tbWFuZChsb25nIHJlcXVlc3RJZCwgUmVm
UHRyPEpTT046Ok9iamVjdD4mJikKK3ZvaWQgRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkNvbW1h
bmQobG9uZyBwcm90b2NvbF9jYWxsSWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCiB7CiAjaWYg
RU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAgICAgaWYgKG1fYWx0ZXJu
YXRlRGlzcGF0Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPkNvbW1hbmQo
cmVxdWVzdElkKTsKKyAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5Db21tYW5kKHByb3Rv
Y29sX2NhbGxJZCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKElO
U1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAKLSAgICBFcnJvclN0cmluZyBlcnJvcjsK
LSAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwot
ICAgIG1fYWdlbnQtPkNvbW1hbmQoZXJyb3IpOworICAgIGF1dG8gcmVzdWx0ID0gbV9hZ2VudC0+
Q29tbWFuZCgpOworICAgIGlmICghcmVzdWx0KSB7CisgICAgICAgIEFTU0VSVCghcmVzdWx0LmVy
cm9yKCkuaXNFbXB0eSgpKTsKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJv
dG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIHJlc3VsdC5lcnJvcigp
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCi0g
ICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1v
dmUocmVzdWx0KSwgZmFsc2UpOwotICAgIGVsc2UKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdU
Rk1vdmUoZXJyb3IpKTsKKyAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2Jq
ZWN0OjpjcmVhdGUoKTsKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocHJv
dG9jb2xfY2FsbElkLCBXVEZNb3ZlKHByb3RvY29sX2pzb25NZXNzYWdlKSwgZmFsc2UpOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKQEAgLTI5Nyw2ICsyOTgsNyBAQCB2b2lkIERvbWFp
bkJhY2tlbmREaXNwYXRjaGVyOjpDb21tYW5kKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6
T2JqZWN0PiYmKQogCiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUg
PHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewpAQCAtMzQ5LDE2
ICszNTEsMTUgQEAgcHJpdmF0ZToKICNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5o
IgogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4K
LSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3Igewog
CiB2b2lkIERvbWFpbkZyb250ZW5kRGlzcGF0Y2hlcjo6RXZlbnQoKQogewotICAgIFJlZjxKU09O
OjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBqc29u
TWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJEb21haW4uRXZlbnQiX3MpOworICAgIGF1
dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIHBy
b3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRvbWFpbi5FdmVudCJf
cyk7CiAKLSAgICBtX2Zyb250ZW5kUm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09O
U3RyaW5nKCkpOworICAgIG1fZnJvbnRlbmRSb3V0ZXIuc2VuZEV2ZW50KHByb3RvY29sX2pzb25N
ZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgpA
QCAtMzk4LDcgKzM5OSw5IEBAIHZvaWQgRG9tYWluRnJvbnRlbmREaXNwYXRjaGVyOjpFdmVudCgp
CiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3Rv
Y29sVHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9K
U09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC00NTIsOCArNDU1
LDcgQEAgbmFtZXNwYWNlIFByb3RvY29sIHsKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRl
ICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAKLSNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KLSNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4K
IAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKQEAgLTUwOSw3ICs1MTEsNyBAQCBjbGFzcyBPYmpD
SW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgQWx0ZXJuYXRl
RG9tYWluQmFja2VuZAogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAg
IE9iakNJbnNwZWN0b3JEb21haW5CYWNrZW5kRGlzcGF0Y2hlcihpZDxUZXN0UHJvdG9jb2xEb21h
aW5Eb21haW5IYW5kbGVyPiBoYW5kbGVyKSB7IG1fZGVsZWdhdGUgPSBoYW5kbGVyOyB9Ci0gICAg
dm9pZCBDb21tYW5kKGxvbmcgcmVxdWVzdElkKSBmaW5hbDsKKyAgICB2b2lkIENvbW1hbmQobG9u
ZyBwcm90b2NvbF9jYWxsSWQpIGZpbmFsOwogcHJpdmF0ZToKICAgICBSZXRhaW5QdHI8aWQ8VGVz
dFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4+IG1fZGVsZWdhdGU7CiB9OwpAQCAtNTU3LDIx
ICs1NTksMjIgQEAgcHJpdmF0ZToKIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKLXZvaWQgT2Jq
Q0luc3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpDb21tYW5kKGxvbmcgcmVxdWVzdElk
KQordm9pZCBPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkNvbW1hbmQobG9u
ZyBwcm90b2NvbF9jYWxsSWQpCiB7CiAgICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25kc1RvU2Vs
ZWN0b3I6QHNlbGVjdG9yKENvbW1hbmRXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6
KV0pIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihy
ZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEb21haW4uQ29t
bWFuZCcgd2FzIG5vdCBmb3VuZCJfcyk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJl
cG9ydFByb3RvY29sRXJyb3IocHJvdG9jb2xfY2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0
aG9kTm90Rm91bmQsICInRG9tYWluLkNvbW1hbmQnIHdhcyBub3QgZm91bmQiX3MpOwogICAgICAg
ICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCiAgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7
Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVz
dElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAgICAgYmFj
a2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxsSWQsIEJh
Y2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwogICAgICAgICBiYWNrZW5kRGlz
cGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgIH07CiAKICAgICBpZCBzdWNjZXNz
Q2FsbGJhY2sgPSBeewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2Uo
cmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7CisgICAgICAgIGF1dG8g
cHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBi
YWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocHJvdG9jb2xfY2FsbElkLCBXVEZNb3Zl
KHByb3RvY29sX2pzb25NZXNzYWdlKSwgZmFsc2UpOwogICAgIH07CiAKICAgICBbbV9kZWxlZ2F0
ZSBDb21tYW5kV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6
c3VjY2Vzc0NhbGxiYWNrXTsKQEAgLTc3Myw5ICs3NzYsOSBAQCB1c2luZyBuYW1lc3BhY2UgSW5z
cGVjdG9yOwogewogICAgIGNvbnN0IEZyb250ZW5kUm91dGVyJiByb3V0ZXIgPSBfY29udHJvbGxl
ci0+ZnJvbnRlbmRSb3V0ZXIoKTsKIAotICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdl
ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJt
ZXRob2QiX3MsICJEb21haW4uRXZlbnQiX3MpOwotICAgIHJvdXRlci5zZW5kRXZlbnQoanNvbk1l
c3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKKyAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0g
SlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3Ry
aW5nKCJtZXRob2QiX3MsICJEb21haW4uRXZlbnQiX3MpOworICAgIHJvdXRlci5zZW5kRXZlbnQo
cHJvdG9jb2xfanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKIH0KIAogQGVuZApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVj
dGVkL2RvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29u
LXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9l
eHBlY3RlZC9kb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUu
anNvbi1yZXN1bHQKaW5kZXggYTc3ZmUzNTg5Nzg4NTM0NzUwNTYyMjNlMDE5YTFiMGZiMWQ0N2U2
OC4uOTQyZGNjYThmMjYwMWVjNjk3MmJiYzYwOTg0YmRjNzU1NzQxYzNlZiAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2Rv
bWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uLXJlc3Vs
dAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhw
ZWN0ZWQvZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpz
b24tcmVzdWx0CkBAIC03MCw3ICs3MCw3IEBAIEluc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21h
aW4oIkRvbWFpbiIsIFsicGFnZSJdKTsKIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRF
X0RJU1BBVENIRVJTKQogCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKKyNpbmNsdWRl
ICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXIuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JGcm9udGVuZFJvdXRlci5oPgogCkBAIC04OCw3ICs4OCw3IEBAIHByaXZhdGU6CiBjbGFzcyBB
bHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlciA6IHB1YmxpYyBBbHRlcm5hdGVCYWNrZW5k
RGlzcGF0Y2hlciB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+QWx0ZXJuYXRlRG9tYWluQmFja2Vu
ZERpc3BhdGNoZXIoKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgQ29tbWFuZChsb25nIGNhbGxJZCkg
PSAwOworICAgIHZpcnR1YWwgdm9pZCBDb21tYW5kKGxvbmcgcHJvdG9jb2xfY2FsbElkKSA9IDA7
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKQEAgLTEzMCwxMSArMTMwLDE0IEBAIHB1
YmxpYzoKIAogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHR1cGxl
PgorI2luY2x1ZGUgPHd0Zi9FeHBlY3RlZC5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgog
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsK
IAotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKIAogI2lmIEVOQUJMRShJTlNQRUNUT1Jf
QUxURVJOQVRFX0RJU1BBVENIRVJTKQogY2xhc3MgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3Bh
dGNoZXI7CkBAIC0xNDIsNyArMTQ1LDcgQEAgY2xhc3MgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERp
c3BhdGNoZXI7CiAKIGNsYXNzIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7CiBwdWJs
aWM6Ci0gICAgdmlydHVhbCB2b2lkIENvbW1hbmQoRXJyb3JTdHJpbmcmKSA9IDA7CisgICAgdmly
dHVhbCBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBDb21tYW5kKCkgPSAwOwogcHJvdGVj
dGVkOgogICAgIHZpcnR1YWwgfkRvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpOwogfTsK
QEAgLTE1MCw5ICsxNTMsOSBAQCBwcm90ZWN0ZWQ6CiBjbGFzcyBEb21haW5CYWNrZW5kRGlzcGF0
Y2hlciBmaW5hbCA6IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7CiBwdWJs
aWM6CiAgICAgc3RhdGljIFJlZjxEb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEJhY2tl
bmREaXNwYXRjaGVyJiwgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7Ci0gICAgdm9p
ZCBkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09O
OjpPYmplY3Q+JiYgbWVzc2FnZSkgZmluYWw7CisgICAgdm9pZCBkaXNwYXRjaChsb25nIHByb3Rv
Y29sX2NhbGxJZCwgY29uc3QgU3RyaW5nJiBwcm90b2NvbF9tZXRob2QsIFJlZjxKU09OOjpPYmpl
Y3Q+JiYgcHJvdG9jb2xfbWVzc2FnZSkgZmluYWw7CiBwcml2YXRlOgotICAgIHZvaWQgQ29tbWFu
ZChsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKKyAg
ICB2b2lkIENvbW1hbmQobG9uZyBwcm90b2NsX2NhbGxJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4m
JiBwcm90b2NvbF9wYXJhbWV0ZXJzKTsKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9E
SVNQQVRDSEVSUykKIHB1YmxpYzoKICAgICB2b2lkIHNldEFsdGVybmF0ZURpc3BhdGNoZXIoQWx0
ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIqIGFsdGVybmF0ZURpc3BhdGNoZXIpIHsgbV9h
bHRlcm5hdGVEaXNwYXRjaGVyID0gYWx0ZXJuYXRlRGlzcGF0Y2hlcjsgfQpAQCAtMjAxLDkgKzIw
NCw3IEBAIHByaXZhdGU6CiAjaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgogCiAj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNs
dWRlIDx3dGYvSlNPTlZhbHVlcy5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgot
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQogI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0
Y2hlcnMuaCIKQEAgLTIyNSwzOCArMjI2LDM4IEBAIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpE
b21haW5CYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhCiAg
ICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRjaGVyRm9yRG9tYWluKCJEb21h
aW4iX3MsIHRoaXMpOwogfQogCi12b2lkIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRj
aChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+
JiYgbWVzc2FnZSkKK3ZvaWQgRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcg
cHJvdG9jb2xfY2FsbElkLCBjb25zdCBTdHJpbmcmIHByb3RvY29sX21ldGhvZCwgUmVmPEpTT046
Ok9iamVjdD4mJiBwcm90b2NvbF9tZXNzYWdlKQogewogICAgIFJlZjxEb21haW5CYWNrZW5kRGlz
cGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7CiAKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJh
bWV0ZXJzOwotICAgIG1lc3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9zLCBwYXJhbWV0ZXJzKTsK
KyAgICBhdXRvIHByb3RvY29sX3BhcmFtZXRlcnMgPSBwcm90b2NvbF9tZXNzYWdlLT5nZXRPYmpl
Y3QoInBhcmFtcyJfcyk7CiAKLSAgICBpZiAobWV0aG9kID09ICJDb21tYW5kIikgewotICAgICAg
ICBDb21tYW5kKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7CisgICAgaWYgKHByb3Rv
Y29sX21ldGhvZCA9PSAiQ29tbWFuZCIpIHsKKyAgICAgICAgQ29tbWFuZChwcm90b2NvbF9jYWxs
SWQsIFdURk1vdmUocHJvdG9jb2xfcGFyYW1ldGVycykpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5k
RGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRG9tYWluLiIgKyBtZXRob2QgKyAiJyB3YXMg
bm90IGZvdW5kIik7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJv
cihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRG9tYWluLiIgKyBwcm90b2Nv
bF9tZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7CiB9CiAKLXZvaWQgRG9tYWluQmFja2VuZERp
c3BhdGNoZXI6OkNvbW1hbmQobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYp
Cit2b2lkIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpDb21tYW5kKGxvbmcgcHJvdG9jb2xfY2Fs
bElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQogewogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQogICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAg
ICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5Db21tYW5kKHJlcXVlc3RJZCk7CisgICAgICAg
IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+Q29tbWFuZChwcm90b2NvbF9jYWxsSWQpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJ
U1BBVENIRVJTKQogCi0gICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVmPEpTT046Ok9iamVj
dD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBtX2FnZW50LT5Db21tYW5k
KGVycm9yKTsKKyAgICBhdXRvIHJlc3VsdCA9IG1fYWdlbnQtPkNvbW1hbmQoKTsKKyAgICBpZiAo
IXJlc3VsdCkgeworICAgICAgICBBU1NFUlQoIXJlc3VsdC5lcnJvcigpLmlzRW1wdHkoKSk7Cisg
ICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERp
c3BhdGNoZXI6OlNlcnZlckVycm9yLCByZXN1bHQuZXJyb3IoKSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CiAKLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQotICAgICAgICBtX2JhY2tlbmREaXNw
YXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsK
LSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJy
b3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7CisgICAg
YXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAg
bV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHByb3RvY29sX2NhbGxJZCwgV1RGTW92
ZShwcm90b2NvbF9qc29uTWVzc2FnZSksIGZhbHNlKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCkBAIC0yOTcsNiArMjk4LDcgQEAgdm9pZCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6
Q29tbWFuZChsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikKIAogI2luY2x1
ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgor
I2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKQEAgLTM0OSwxNiArMzUxLDE1IEBAIHByaXZhdGU6
CiAjaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKIAogI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAogdm9pZCBEb21haW5Gcm9udGVu
ZERpc3BhdGNoZXI6OkV2ZW50KCkKIHsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2Fn
ZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygi
bWV0aG9kIl9zLCAiRG9tYWluLkV2ZW50Il9zKTsKKyAgICBhdXRvIHByb3RvY29sX2pzb25NZXNz
YWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+
c2V0U3RyaW5nKCJtZXRob2QiX3MsICJEb21haW4uRXZlbnQiX3MpOwogCi0gICAgbV9mcm9udGVu
ZFJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKKyAgICBtX2Zy
b250ZW5kUm91dGVyLnNlbmRFdmVudChwcm90b2NvbF9qc29uTWVzc2FnZS0+dG9KU09OU3RyaW5n
KCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKQEAgLTM5OCw3ICszOTksOSBAQCB2
b2lkIERvbWFpbkZyb250ZW5kRGlzcGF0Y2hlcjo6RXZlbnQoKQogI3ByYWdtYSBvbmNlCiAKICNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+Ci0jaW5jbHVk
ZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1
ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBu
YW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtNDUyLDggKzQ1NSw3IEBAIG5hbWVzcGFjZSBQcm90
b2NvbCB7CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0
cy5oIgogCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0
b3IgewogCkBAIC01MDksNyArNTExLDcgQEAgY2xhc3MgT2JqQ0luc3BlY3RvckRvbWFpbkJhY2tl
bmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEFsdGVybmF0ZURvbWFpbkJhY2tlbmQKICAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBPYmpDSW5zcGVjdG9yRG9tYWlu
QmFja2VuZERpc3BhdGNoZXIoaWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4gaGFu
ZGxlcikgeyBtX2RlbGVnYXRlID0gaGFuZGxlcjsgfQotICAgIHZvaWQgQ29tbWFuZChsb25nIHJl
cXVlc3RJZCkgZmluYWw7CisgICAgdm9pZCBDb21tYW5kKGxvbmcgcHJvdG9jb2xfY2FsbElkKSBm
aW5hbDsKIHByaXZhdGU6CiAgICAgUmV0YWluUHRyPGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFp
bkhhbmRsZXI+PiBtX2RlbGVnYXRlOwogfTsKQEAgLTU1NywyMSArNTU5LDIyIEBAIHByaXZhdGU6
CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCi12b2lkIE9iakNJbnNwZWN0b3JEb21haW5CYWNr
ZW5kRGlzcGF0Y2hlcjo6Q29tbWFuZChsb25nIHJlcXVlc3RJZCkKK3ZvaWQgT2JqQ0luc3BlY3Rv
ckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpDb21tYW5kKGxvbmcgcHJvdG9jb2xfY2FsbElkKQog
ewogICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihDb21t
YW5kV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7Ci0gICAgICAgIGJhY2tl
bmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlz
cGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRG9tYWluLkNvbW1hbmQnIHdhcyBub3QgZm91bmQi
X3MpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHBy
b3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RvbWFp
bi5Db21tYW5kJyB3YXMgbm90IGZvdW5kIl9zKTsKICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIo
KS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlk
IGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgewotICAgICAgICBiYWNrZW5kRGlz
cGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNo
ZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJl
cG9ydFByb3RvY29sRXJyb3IocHJvdG9jb2xfY2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2Vy
dmVyRXJyb3IsIGVycm9yKTsKICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRp
bmdFcnJvcnMoKTsKICAgICB9OwogCiAgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKLSAgICAg
ICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgSlNPTjo6T2Jq
ZWN0OjpjcmVhdGUoKSwgZmFsc2UpOworICAgICAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdl
ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+
c2VuZFJlc3BvbnNlKHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2Fn
ZSksIGZhbHNlKTsKICAgICB9OwogCiAgICAgW21fZGVsZWdhdGUgQ29tbWFuZFdpdGhFcnJvckNh
bGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107CkBA
IC03NzMsOSArNzc2LDkgQEAgdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKIHsKICAgICBjb25z
dCBGcm9udGVuZFJvdXRlciYgcm91dGVyID0gX2NvbnRyb2xsZXItPmZyb250ZW5kUm91dGVyKCk7
CiAKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3Jl
YXRlKCk7Ci0gICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiRG9tYWluLkV2
ZW50Il9zKTsKLSAgICByb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmco
KSk7CisgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRl
KCk7CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiRG9t
YWluLkV2ZW50Il9zKTsKKyAgICByb3V0ZXIuc2VuZEV2ZW50KHByb3RvY29sX2pzb25NZXNzYWdl
LT50b0pTT05TdHJpbmcoKSk7CiB9CiAKIEBlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9kb21haW4tdGFyZ2V0VHlw
ZXMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZXhwZWN0ZWQvZG9tYWluLXRhcmdldFR5cGVzLmpzb24tcmVzdWx0CmluZGV4IDBhZDZk
MDQ0NjAxYzJlYTQwODM4OGJjZjI1NGZjNjY1NDVmN2NkMDQuLjg0OWYzYjcyOWNhY2Q4YjlmMTE0
YzhiOWJmYjIxNzE5MWQyNzI5MWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9kb21haW4tdGFyZ2V0VHlwZXMuanNvbi1y
ZXN1bHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2V4cGVjdGVkL2RvbWFpbi10YXJnZXRUeXBlcy5qc29uLXJlc3VsdApAQCAtNzAsNyArNzAsNyBA
QCBJbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJEb21haW4iLCBudWxsKTsKIAogI2lm
IEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogCi0jaW5jbHVkZSAiVGVz
dFByb3RvY29sVHlwZXMuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KICNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgogCkBAIC04OCw3
ICs4OCw3IEBAIHByaXZhdGU6CiBjbGFzcyBBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hl
ciA6IHB1YmxpYyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7CiBwdWJsaWM6CiAgICAgdmly
dHVhbCB+QWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIoKSB7IH0KLSAgICB2aXJ0dWFs
IHZvaWQgQ29tbWFuZChsb25nIGNhbGxJZCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBDb21tYW5k
KGxvbmcgcHJvdG9jb2xfY2FsbElkKSA9IDA7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKQEAgLTEzMCwxMSArMTMwLDE0IEBAIHB1YmxpYzoKIAogI2luY2x1ZGUgIlRlc3RQcm90b2Nv
bE9iamVjdHMuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlci5oPgorI2luY2x1ZGUgPHR1cGxlPgorI2luY2x1ZGUgPHd0Zi9FeHBlY3RlZC5oPgor
I2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7
CisKIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogY2xhc3Mg
QWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXI7CkBAIC0xNDIsNyArMTQ1LDcgQEAgY2xh
c3MgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXI7CiAKIGNsYXNzIERvbWFpbkJhY2tl
bmREaXNwYXRjaGVySGFuZGxlciB7CiBwdWJsaWM6Ci0gICAgdmlydHVhbCB2b2lkIENvbW1hbmQo
RXJyb3JTdHJpbmcmKSA9IDA7CisgICAgdmlydHVhbCBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2
b2lkPiBDb21tYW5kKCkgPSAwOwogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgfkRvbWFpbkJhY2tl
bmREaXNwYXRjaGVySGFuZGxlcigpOwogfTsKQEAgLTE1MCw5ICsxNTMsOSBAQCBwcm90ZWN0ZWQ6
CiBjbGFzcyBEb21haW5CYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBTdXBwbGVtZW50
YWxCYWNrZW5kRGlzcGF0Y2hlciB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxEb21haW5CYWNr
ZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiwgRG9tYWluQmFja2VuZERp
c3BhdGNoZXJIYW5kbGVyKik7Ci0gICAgdm9pZCBkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29u
c3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkgZmluYWw7Cisg
ICAgdm9pZCBkaXNwYXRjaChsb25nIHByb3RvY29sX2NhbGxJZCwgY29uc3QgU3RyaW5nJiBwcm90
b2NvbF9tZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfbWVzc2FnZSkgZmluYWw7
CiBwcml2YXRlOgotICAgIHZvaWQgQ29tbWFuZChsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046
Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKKyAgICB2b2lkIENvbW1hbmQobG9uZyBwcm90b2NsX2Nh
bGxJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9wYXJhbWV0ZXJzKTsKICNpZiBF
TkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIHB1YmxpYzoKICAgICB2b2lk
IHNldEFsdGVybmF0ZURpc3BhdGNoZXIoQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIq
IGFsdGVybmF0ZURpc3BhdGNoZXIpIHsgbV9hbHRlcm5hdGVEaXNwYXRjaGVyID0gYWx0ZXJuYXRl
RGlzcGF0Y2hlcjsgfQpAQCAtMjAxLDkgKzIwNCw3IEBAIHByaXZhdGU6CiAjaW5jbHVkZSAiVGVz
dEJhY2tlbmREaXNwYXRjaGVycy5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgogI2luY2x1
ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
IAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogI2luY2x1ZGUg
IlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKQEAgLTIyNSwzOCArMjI2LDM4IEBA
IERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpEb21haW5CYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5k
RGlzcGF0Y2hlciYgYmFja2VuZERpc3BhCiAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0
ZXJEaXNwYXRjaGVyRm9yRG9tYWluKCJEb21haW4iX3MsIHRoaXMpOwogfQogCi12b2lkIERvbWFp
bkJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5n
JiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkKK3ZvaWQgRG9tYWluQmFja2Vu
ZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBjb25zdCBTdHJpbmcm
IHByb3RvY29sX21ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9tZXNzYWdlKQog
ewogICAgIFJlZjxEb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7CiAKLSAg
ICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzOwotICAgIG1lc3NhZ2UtPmdldE9iamVj
dCgicGFyYW1zIl9zLCBwYXJhbWV0ZXJzKTsKKyAgICBhdXRvIHByb3RvY29sX3BhcmFtZXRlcnMg
PSBwcm90b2NvbF9tZXNzYWdlLT5nZXRPYmplY3QoInBhcmFtcyJfcyk7CiAKLSAgICBpZiAobWV0
aG9kID09ICJDb21tYW5kIikgewotICAgICAgICBDb21tYW5kKHJlcXVlc3RJZCwgV1RGTW92ZShw
YXJhbWV0ZXJzKSk7CisgICAgaWYgKHByb3RvY29sX21ldGhvZCA9PSAiQ29tbWFuZCIpIHsKKyAg
ICAgICAgQ29tbWFuZChwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJvdG9jb2xfcGFyYW1ldGVy
cykpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+
cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICIn
RG9tYWluLiIgKyBtZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7CisgICAgbV9iYWNrZW5kRGlz
cGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90
Rm91bmQsICInRG9tYWluLiIgKyBwcm90b2NvbF9tZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7
CiB9CiAKLXZvaWQgRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkNvbW1hbmQobG9uZyByZXF1ZXN0
SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCit2b2lkIERvbWFpbkJhY2tlbmREaXNwYXRjaGVy
OjpDb21tYW5kKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQog
ewogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogICAgIGlmICht
X2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5D
b21tYW5kKHJlcXVlc3RJZCk7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+Q29tbWFu
ZChwcm90b2NvbF9jYWxsSWQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmIC8vIEVO
QUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogCi0gICAgRXJyb3JTdHJpbmcg
ZXJyb3I7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVh
dGUoKTsKLSAgICBtX2FnZW50LT5Db21tYW5kKGVycm9yKTsKKyAgICBhdXRvIHJlc3VsdCA9IG1f
YWdlbnQtPkNvbW1hbmQoKTsKKyAgICBpZiAoIXJlc3VsdCkgeworICAgICAgICBBU1NFUlQoIXJl
c3VsdC5lcnJvcigpLmlzRW1wdHkoKSk7CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJl
cG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCByZXN1bHQu
ZXJyb3IoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBpZiAoIWVycm9yLmxlbmd0
aCgpKQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElk
LCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERp
c3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVy
cm9yLCBXVEZNb3ZlKGVycm9yKSk7CisgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpT
T046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3Bv
bnNlKHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSksIGZhbHNl
KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCkBAIC0yOTcsNiArMjk4LDcgQEAgdm9p
ZCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Q29tbWFuZChsb25nIHJlcXVlc3RJZCwgUmVmUHRy
PEpTT046Ok9iamVjdD4mJikKIAogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNp
bmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKQEAg
LTM0OSwxNiArMzUxLDE1IEBAIHByaXZhdGU6CiAjaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0
Y2hlcnMuaCIKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91
dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVj
dG9yIHsKIAogdm9pZCBEb21haW5Gcm9udGVuZERpc3BhdGNoZXI6OkV2ZW50KCkKIHsKLSAgICBS
ZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0g
ICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiRG9tYWluLkV2ZW50Il9zKTsK
KyAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsK
KyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJEb21haW4u
RXZlbnQiX3MpOwogCi0gICAgbV9mcm9udGVuZFJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2Ut
PnRvSlNPTlN0cmluZygpKTsKKyAgICBtX2Zyb250ZW5kUm91dGVyLnNlbmRFdmVudChwcm90b2Nv
bF9qc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKQEAgLTM5OCw3ICszOTksOSBAQCB2b2lkIERvbWFpbkZyb250ZW5kRGlzcGF0Y2hlcjo6
RXZlbnQoKQogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JQcm90b2NvbFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRl
IDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtNDUy
LDggKzQ1NSw3IEBAIG5hbWVzcGFjZSBQcm90b2NvbCB7CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFs
Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRp
b25zLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC01MDksNyArNTExLDcgQEAgY2xh
c3MgT2JqQ0luc3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEFs
dGVybmF0ZURvbWFpbkJhY2tlbmQKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1Ymxp
YzoKICAgICBPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXIoaWQ8VGVzdFByb3Rv
Y29sRG9tYWluRG9tYWluSGFuZGxlcj4gaGFuZGxlcikgeyBtX2RlbGVnYXRlID0gaGFuZGxlcjsg
fQotICAgIHZvaWQgQ29tbWFuZChsb25nIHJlcXVlc3RJZCkgZmluYWw7CisgICAgdm9pZCBDb21t
YW5kKGxvbmcgcHJvdG9jb2xfY2FsbElkKSBmaW5hbDsKIHByaXZhdGU6CiAgICAgUmV0YWluUHRy
PGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+PiBtX2RlbGVnYXRlOwogfTsKQEAg
LTU1NywyMSArNTU5LDIyIEBAIHByaXZhdGU6CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCi12
b2lkIE9iakNJbnNwZWN0b3JEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Q29tbWFuZChsb25nIHJl
cXVlc3RJZCkKK3ZvaWQgT2JqQ0luc3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpDb21t
YW5kKGxvbmcgcHJvdG9jb2xfY2FsbElkKQogewogICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9u
ZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihDb21tYW5kV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0Nh
bGxiYWNrOildKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29s
RXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRG9t
YWluLkNvbW1hbmQnIHdhcyBub3QgZm91bmQiX3MpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hl
cigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHByb3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNo
ZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RvbWFpbi5Db21tYW5kJyB3YXMgbm90IGZvdW5kIl9zKTsK
ICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICpl
cnJvcikgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9y
KHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CisgICAg
ICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocHJvdG9jb2xfY2Fs
bElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKICAgICAgICAgYmFj
a2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKICAgICB9OwogCiAgICAgaWQg
c3VjY2Vzc0NhbGxiYWNrID0gXnsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJl
c3BvbnNlKHJlcXVlc3RJZCwgSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSwgZmFsc2UpOworICAgICAg
ICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAg
ICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHByb3RvY29sX2NhbGxJZCwg
V1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSksIGZhbHNlKTsKICAgICB9OwogCiAgICAgW21f
ZGVsZWdhdGUgQ29tbWFuZFdpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0Nh
bGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107CkBAIC03NzMsOSArNzc2LDkgQEAgdXNpbmcgbmFtZXNw
YWNlIEluc3BlY3RvcjsKIHsKICAgICBjb25zdCBGcm9udGVuZFJvdXRlciYgcm91dGVyID0gX2Nv
bnRyb2xsZXItPmZyb250ZW5kUm91dGVyKCk7CiAKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29u
TWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAganNvbk1lc3NhZ2UtPnNldFN0
cmluZygibWV0aG9kIl9zLCAiRG9tYWluLkV2ZW50Il9zKTsKLSAgICByb3V0ZXIuc2VuZEV2ZW50
KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7CisgICAgYXV0byBwcm90b2NvbF9qc29uTWVz
c2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2Ut
PnNldFN0cmluZygibWV0aG9kIl9zLCAiRG9tYWluLkV2ZW50Il9zKTsKKyAgICByb3V0ZXIuc2Vu
ZEV2ZW50KHByb3RvY29sX2pzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7CiB9CiAKIEBlbmQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9leHBlY3RlZC9kb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24tcmVzdWx0
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVk
L2RvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbi1yZXN1bHQKaW5kZXggNDc1
Yjg3YmQwYzhkYTg1MmI1Zjk5MGNiMjFjYjNjMmUwNzYwOTk4NC4uNDE5ZjkyZWRhMTNhZWMyMmQ4
ZjRhZjJhZjE3ZjA1Zjc1ZDI0MWE3OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2RvbWFpbnMtd2l0aC12YXJ5aW5nLWNv
bW1hbmQtc2l6ZXMuanNvbi1yZXN1bHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2RvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQt
c2l6ZXMuanNvbi1yZXN1bHQKQEAgLTc5LDcgKzc5LDcgQEAgSW5zcGVjdG9yQmFja2VuZC5hY3Rp
dmF0ZURvbWFpbigiTmV0d29yazMiLCBudWxsKTsKIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQogCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKKyNp
bmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9J
bnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgogCkBAIC05NywxOSArOTcsMTkgQEAgcHJpdmF0ZToK
IGNsYXNzIEFsdGVybmF0ZU5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIgOiBwdWJsaWMgQWx0ZXJu
YXRlQmFja2VuZERpc3BhdGNoZXIgewogcHVibGljOgogICAgIHZpcnR1YWwgfkFsdGVybmF0ZU5l
dHdvcmsxQmFja2VuZERpc3BhdGNoZXIoKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291
cmNlMShsb25nIGNhbGxJZCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UxKGxv
bmcgcHJvdG9jb2xfY2FsbElkKSA9IDA7CiB9OwogCiBjbGFzcyBBbHRlcm5hdGVOZXR3b3JrM0Jh
Y2tlbmREaXNwYXRjaGVyIDogcHVibGljIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKIHB1
YmxpYzoKICAgICB2aXJ0dWFsIH5BbHRlcm5hdGVOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyKCkg
eyB9Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTEobG9uZyBjYWxsSWQpID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlMihsb25nIGNhbGxJZCkgPSAwOwotICAgIHZpcnR1
YWwgdm9pZCBsb2FkUmVzb3VyY2UzKGxvbmcgY2FsbElkKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lk
IGxvYWRSZXNvdXJjZTQobG9uZyBjYWxsSWQpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJl
c291cmNlNShsb25nIGNhbGxJZCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2U2
KGxvbmcgY2FsbElkKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTcobG9uZyBj
YWxsSWQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlMShsb25nIHByb3RvY29s
X2NhbGxJZCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UyKGxvbmcgcHJvdG9j
b2xfY2FsbElkKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTMobG9uZyBwcm90
b2NvbF9jYWxsSWQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlNChsb25nIHBy
b3RvY29sX2NhbGxJZCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2U1KGxvbmcg
cHJvdG9jb2xfY2FsbElkKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTYobG9u
ZyBwcm90b2NvbF9jYWxsSWQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlNyhs
b25nIHByb3RvY29sX2NhbGxJZCkgPSAwOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
CkBAIC0xNTEsMTEgKzE1MSwxNCBAQCBwdWJsaWM6CiAKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xP
YmplY3RzLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXIuaD4KKyNpbmNsdWRlIDx0dXBsZT4KKyNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4KKyNp
bmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
IAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwor
CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIGNsYXNzIEFs
dGVybmF0ZU5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI7CkBAIC0xNjQsMjAgKzE2NywyMCBAQCBj
bGFzcyBBbHRlcm5hdGVOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOwogCiBjbGFzcyBOZXR3b3Jr
MUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7CiBwdWJsaWM6Ci0gICAgdmlydHVhbCB2b2lkIGxv
YWRSZXNvdXJjZTEoRXJyb3JTdHJpbmcmKSA9IDA7CisgICAgdmlydHVhbCBQcm90b2NvbDo6RXJy
b3JTdHJpbmdPcjx2b2lkPiBsb2FkUmVzb3VyY2UxKCkgPSAwOwogcHJvdGVjdGVkOgogICAgIHZp
cnR1YWwgfk5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCk7CiB9OwogCiBjbGFzcyBO
ZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7CiBwdWJsaWM6Ci0gICAgdmlydHVhbCB2
b2lkIGxvYWRSZXNvdXJjZTEoRXJyb3JTdHJpbmcmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGxv
YWRSZXNvdXJjZTIoRXJyb3JTdHJpbmcmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNv
dXJjZTMoRXJyb3JTdHJpbmcmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTQo
RXJyb3JTdHJpbmcmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTUoRXJyb3JT
dHJpbmcmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTYoRXJyb3JTdHJpbmcm
KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTcoRXJyb3JTdHJpbmcmKSA9IDA7
CisgICAgdmlydHVhbCBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBsb2FkUmVzb3VyY2Ux
KCkgPSAwOworICAgIHZpcnR1YWwgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gbG9hZFJl
c291cmNlMigpID0gMDsKKyAgICB2aXJ0dWFsIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+
IGxvYWRSZXNvdXJjZTMoKSA9IDA7CisgICAgdmlydHVhbCBQcm90b2NvbDo6RXJyb3JTdHJpbmdP
cjx2b2lkPiBsb2FkUmVzb3VyY2U0KCkgPSAwOworICAgIHZpcnR1YWwgUHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8dm9pZD4gbG9hZFJlc291cmNlNSgpID0gMDsKKyAgICB2aXJ0dWFsIFByb3RvY29s
OjpFcnJvclN0cmluZ09yPHZvaWQ+IGxvYWRSZXNvdXJjZTYoKSA9IDA7CisgICAgdmlydHVhbCBQ
cm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBsb2FkUmVzb3VyY2U3KCkgPSAwOwogcHJvdGVj
dGVkOgogICAgIHZpcnR1YWwgfk5ldHdvcmszQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCk7CiB9
OwpAQCAtMTg1LDkgKzE4OCw5IEBAIHByb3RlY3RlZDoKIGNsYXNzIE5ldHdvcmsxQmFja2VuZERp
c3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIgewog
cHVibGljOgogICAgIHN0YXRpYyBSZWY8TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRl
KEJhY2tlbmREaXNwYXRjaGVyJiwgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsK
LSAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwg
UmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKSBmaW5hbDsKKyAgICB2b2lkIGRpc3BhdGNoKGxv
bmcgcHJvdG9jb2xfY2FsbElkLCBjb25zdCBTdHJpbmcmIHByb3RvY29sX21ldGhvZCwgUmVmPEpT
T046Ok9iamVjdD4mJiBwcm90b2NvbF9tZXNzYWdlKSBmaW5hbDsKIHByaXZhdGU6Ci0gICAgdm9p
ZCBsb2FkUmVzb3VyY2UxKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBh
cmFtZXRlcnMpOworICAgIHZvaWQgbG9hZFJlc291cmNlMShsb25nIHByb3RvY2xfY2FsbElkLCBS
ZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX3BhcmFtZXRlcnMpOwogI2lmIEVOQUJMRShJ
TlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogcHVibGljOgogICAgIHZvaWQgc2V0QWx0
ZXJuYXRlRGlzcGF0Y2hlcihBbHRlcm5hdGVOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyKiBhbHRl
cm5hdGVEaXNwYXRjaGVyKSB7IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IGFsdGVybmF0ZURpc3Bh
dGNoZXI7IH0KQEAgLTIwMiwxNSArMjA1LDE1IEBAIHByaXZhdGU6CiBjbGFzcyBOZXR3b3JrM0Jh
Y2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRj
aGVyIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI+
IGNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYsIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyKik7Ci0gICAgdm9pZCBkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBt
ZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkgZmluYWw7CisgICAgdm9pZCBkaXNw
YXRjaChsb25nIHByb3RvY29sX2NhbGxJZCwgY29uc3QgU3RyaW5nJiBwcm90b2NvbF9tZXRob2Qs
IFJlZjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfbWVzc2FnZSkgZmluYWw7CiBwcml2YXRlOgot
ICAgIHZvaWQgbG9hZFJlc291cmNlMShsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVj
dD4mJiBwYXJhbWV0ZXJzKTsKLSAgICB2b2lkIGxvYWRSZXNvdXJjZTIobG9uZyByZXF1ZXN0SWQs
IFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7Ci0gICAgdm9pZCBsb2FkUmVzb3Vy
Y2UzKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOwot
ICAgIHZvaWQgbG9hZFJlc291cmNlNChsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVj
dD4mJiBwYXJhbWV0ZXJzKTsKLSAgICB2b2lkIGxvYWRSZXNvdXJjZTUobG9uZyByZXF1ZXN0SWQs
IFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7Ci0gICAgdm9pZCBsb2FkUmVzb3Vy
Y2U2KGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOwot
ICAgIHZvaWQgbG9hZFJlc291cmNlNyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVj
dD4mJiBwYXJhbWV0ZXJzKTsKKyAgICB2b2lkIGxvYWRSZXNvdXJjZTEobG9uZyBwcm90b2NsX2Nh
bGxJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9wYXJhbWV0ZXJzKTsKKyAgICB2
b2lkIGxvYWRSZXNvdXJjZTIobG9uZyBwcm90b2NsX2NhbGxJZCwgUmVmUHRyPEpTT046Ok9iamVj
dD4mJiBwcm90b2NvbF9wYXJhbWV0ZXJzKTsKKyAgICB2b2lkIGxvYWRSZXNvdXJjZTMobG9uZyBw
cm90b2NsX2NhbGxJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9wYXJhbWV0ZXJz
KTsKKyAgICB2b2lkIGxvYWRSZXNvdXJjZTQobG9uZyBwcm90b2NsX2NhbGxJZCwgUmVmUHRyPEpT
T046Ok9iamVjdD4mJiBwcm90b2NvbF9wYXJhbWV0ZXJzKTsKKyAgICB2b2lkIGxvYWRSZXNvdXJj
ZTUobG9uZyBwcm90b2NsX2NhbGxJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9w
YXJhbWV0ZXJzKTsKKyAgICB2b2lkIGxvYWRSZXNvdXJjZTYobG9uZyBwcm90b2NsX2NhbGxJZCwg
UmVmUHRyPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9wYXJhbWV0ZXJzKTsKKyAgICB2b2lkIGxv
YWRSZXNvdXJjZTcobG9uZyBwcm90b2NsX2NhbGxJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBw
cm90b2NvbF9wYXJhbWV0ZXJzKTsKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQ
QVRDSEVSUykKIHB1YmxpYzoKICAgICB2b2lkIHNldEFsdGVybmF0ZURpc3BhdGNoZXIoQWx0ZXJu
YXRlTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlciogYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeyBtX2Fs
dGVybmF0ZURpc3BhdGNoZXIgPSBhbHRlcm5hdGVEaXNwYXRjaGVyOyB9CkBAIC0yNTksOSArMjYy
LDcgQEAgcHJpdmF0ZToKICNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCiAKICNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1
ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0j
aW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRF
Uk5BVEVfRElTUEFUQ0hFUlMpCiAjaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRj
aGVycy5oIgpAQCAtMjg0LDM4ICsyODUsMzggQEAgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6
TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZEQKICAg
ICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4oIk5ldHdv
cmsxIl9zLCB0aGlzKTsKIH0KIAotdm9pZCBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpkaXNw
YXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmpl
Y3Q+JiYgbWVzc2FnZSkKK3ZvaWQgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2go
bG9uZyBwcm90b2NvbF9jYWxsSWQsIGNvbnN0IFN0cmluZyYgcHJvdG9jb2xfbWV0aG9kLCBSZWY8
SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX21lc3NhZ2UpCiB7CiAgICAgUmVmPE5ldHdvcmsxQmFj
a2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOwogCi0gICAgUmVmUHRyPEpTT046Ok9iamVj
dD4gcGFyYW1ldGVyczsKLSAgICBtZXNzYWdlLT5nZXRPYmplY3QoInBhcmFtcyJfcywgcGFyYW1l
dGVycyk7CisgICAgYXV0byBwcm90b2NvbF9wYXJhbWV0ZXJzID0gcHJvdG9jb2xfbWVzc2FnZS0+
Z2V0T2JqZWN0KCJwYXJhbXMiX3MpOwogCi0gICAgaWYgKG1ldGhvZCA9PSAibG9hZFJlc291cmNl
MSIpIHsKLSAgICAgICAgbG9hZFJlc291cmNlMShyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVy
cykpOworICAgIGlmIChwcm90b2NvbF9tZXRob2QgPT0gImxvYWRSZXNvdXJjZTEiKSB7CisgICAg
ICAgIGxvYWRSZXNvdXJjZTEocHJvdG9jb2xfY2FsbElkLCBXVEZNb3ZlKHByb3RvY29sX3BhcmFt
ZXRlcnMpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1fYmFja2VuZERpc3BhdGNo
ZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5k
LCAiJ05ldHdvcmsxLiIgKyBtZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7CisgICAgbV9iYWNr
ZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0
aG9kTm90Rm91bmQsICInTmV0d29yazEuIiArIHByb3RvY29sX21ldGhvZCArICInIHdhcyBub3Qg
Zm91bmQiKTsKIH0KIAotdm9pZCBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3Vy
Y2UxKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQordm9pZCBOZXR3b3Jr
MUJhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UxKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBS
ZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQogewogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRF
X0RJU1BBVENIRVJTKQogICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAg
bV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVzb3VyY2UxKHJlcXVlc3RJZCk7CisgICAgICAg
IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJlc291cmNlMShwcm90b2NvbF9jYWxsSWQpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJO
QVRFX0RJU1BBVENIRVJTKQogCi0gICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVmPEpTT046
Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBtX2FnZW50LT5s
b2FkUmVzb3VyY2UxKGVycm9yKTsKKyAgICBhdXRvIHJlc3VsdCA9IG1fYWdlbnQtPmxvYWRSZXNv
dXJjZTEoKTsKKyAgICBpZiAoIXJlc3VsdCkgeworICAgICAgICBBU1NFUlQoIXJlc3VsdC5lcnJv
cigpLmlzRW1wdHkoKSk7CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3Rv
Y29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCByZXN1bHQuZXJyb3IoKSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQotICAg
ICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3Zl
KHJlc3VsdCksIGZhbHNlKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXIt
PnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZN
b3ZlKGVycm9yKSk7CisgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVj
dDo6Y3JlYXRlKCk7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHByb3Rv
Y29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSksIGZhbHNlKTsKIH0KIAog
UmVmPE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI+IE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6
OmNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIsIE5ldHdvcmszQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKQEAgLTMzMCwxNCArMzMxLDEzIEBAIE5ldHdv
cmszQmFja2VuZERpc3BhdGNoZXI6Ok5ldHdvcmszQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERp
c3BhdGNoZXImIGJhY2tlbmRECiAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNw
YXRjaGVyRm9yRG9tYWluKCJOZXR3b3JrMyJfcywgdGhpcyk7CiB9CiAKLXZvaWQgTmV0d29yazNC
YWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYg
bWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpCit2b2lkIE5ldHdvcmszQmFja2Vu
ZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBjb25zdCBTdHJpbmcm
IHByb3RvY29sX21ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9tZXNzYWdlKQog
ewogICAgIFJlZjxOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKIAot
ICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnM7Ci0gICAgbWVzc2FnZS0+Z2V0T2Jq
ZWN0KCJwYXJhbXMiX3MsIHBhcmFtZXRlcnMpOworICAgIGF1dG8gcHJvdG9jb2xfcGFyYW1ldGVy
cyA9IHByb3RvY29sX21lc3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9zKTsKIAotICAgIHVzaW5n
IENhbGxIYW5kbGVyID0gdm9pZCAoTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6KikobG9uZyBy
ZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSk7CisgICAgdXNpbmcgQ2Fs
bEhhbmRsZXIgPSB2b2lkIChOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjoqKShsb25nIHByb3Rv
Y29sX2NhbGxJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9tZXNzYWdlKTsKICAg
ICB1c2luZyBEaXNwYXRjaE1hcCA9IEhhc2hNYXA8U3RyaW5nLCBDYWxsSGFuZGxlcj47CiAgICAg
c3RhdGljIE5ldmVyRGVzdHJveWVkPERpc3BhdGNoTWFwPiBkaXNwYXRjaE1hcDsKICAgICBpZiAo
ZGlzcGF0Y2hNYXAuZ2V0KCkuaXNFbXB0eSgpKSB7CkBAIC0zNTgsMTQ2ICszNTgsMTUzIEBAIHZv
aWQgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNv
bnN0IFN0cmluZyYgbWV0aG9kLCBSCiAgICAgICAgICAgICBkaXNwYXRjaE1hcC5nZXQoKS5hZGQo
Y29tbWFuZHNbaV0ubmFtZSwgY29tbWFuZHNbaV0uaGFuZGxlcik7CiAgICAgfQogCi0gICAgYXV0
byBmaW5kUmVzdWx0ID0gZGlzcGF0Y2hNYXAuZ2V0KCkuZmluZChtZXRob2QpOworICAgIGF1dG8g
ZmluZFJlc3VsdCA9IGRpc3BhdGNoTWFwLmdldCgpLmZpbmQocHJvdG9jb2xfbWV0aG9kKTsKICAg
ICBpZiAoZmluZFJlc3VsdCA9PSBkaXNwYXRjaE1hcC5nZXQoKS5lbmQoKSkgewotICAgICAgICBt
X2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVy
OjpNZXRob2ROb3RGb3VuZCwgIidOZXR3b3JrMy4iICsgbWV0aG9kICsgIicgd2FzIG5vdCBmb3Vu
ZCIpOworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJh
Y2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidOZXR3b3JrMy4iICsgcHJvdG9jb2xf
bWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgKCgqdGhpcykuKmZpbmRSZXN1bHQtPnZhbHVlKShyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1l
dGVycykpOworICAgICgoKnRoaXMpLipmaW5kUmVzdWx0LT52YWx1ZSkocHJvdG9jb2xfY2FsbElk
LCBXVEZNb3ZlKHByb3RvY29sX3BhcmFtZXRlcnMpKTsKIH0KIAotdm9pZCBOZXR3b3JrM0JhY2tl
bmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UxKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6
T2JqZWN0PiYmKQordm9pZCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2Ux
KGxvbmcgcHJvdG9jb2xfY2FsbElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQogewogI2lmIEVO
QUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogICAgIGlmIChtX2FsdGVybmF0
ZURpc3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVzb3Vy
Y2UxKHJlcXVlc3RJZCk7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJlc291
cmNlMShwcm90b2NvbF9jYWxsSWQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmIC8v
IEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogCi0gICAgRXJyb3JTdHJp
bmcgZXJyb3I7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0Ojpj
cmVhdGUoKTsKLSAgICBtX2FnZW50LT5sb2FkUmVzb3VyY2UxKGVycm9yKTsKKyAgICBhdXRvIHJl
c3VsdCA9IG1fYWdlbnQtPmxvYWRSZXNvdXJjZTEoKTsKKyAgICBpZiAoIXJlc3VsdCkgeworICAg
ICAgICBBU1NFUlQoIXJlc3VsdC5lcnJvcigpLmlzRW1wdHkoKSk7CisgICAgICAgIG1fYmFja2Vu
ZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZl
ckVycm9yLCByZXN1bHQuZXJyb3IoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBp
ZiAoIWVycm9yLmxlbmd0aCgpKQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVz
cG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKLSAgICBlbHNlCi0gICAg
ICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3Bh
dGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7CisgICAgYXV0byBwcm90b2NvbF9q
c29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgbV9iYWNrZW5kRGlzcGF0
Y2hlci0+c2VuZFJlc3BvbnNlKHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9qc29u
TWVzc2FnZSksIGZhbHNlKTsKIH0KIAotdm9pZCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjps
b2FkUmVzb3VyY2UyKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQordm9p
ZCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UyKGxvbmcgcHJvdG9jb2xf
Y2FsbElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQogewogI2lmIEVOQUJMRShJTlNQRUNUT1Jf
QUxURVJOQVRFX0RJU1BBVENIRVJTKQogICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsK
LSAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVzb3VyY2UyKHJlcXVlc3RJZCk7
CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJlc291cmNlMihwcm90b2NvbF9j
YWxsSWQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNU
T1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogCi0gICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAg
UmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBt
X2FnZW50LT5sb2FkUmVzb3VyY2UyKGVycm9yKTsKKyAgICBhdXRvIHJlc3VsdCA9IG1fYWdlbnQt
PmxvYWRSZXNvdXJjZTIoKTsKKyAgICBpZiAoIXJlc3VsdCkgeworICAgICAgICBBU1NFUlQoIXJl
c3VsdC5lcnJvcigpLmlzRW1wdHkoKSk7CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJl
cG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCByZXN1bHQu
ZXJyb3IoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBpZiAoIWVycm9yLmxlbmd0
aCgpKQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElk
LCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERp
c3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVy
cm9yLCBXVEZNb3ZlKGVycm9yKSk7CisgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpT
T046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3Bv
bnNlKHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSksIGZhbHNl
KTsKIH0KIAotdm9pZCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UzKGxv
bmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQordm9pZCBOZXR3b3JrM0JhY2tl
bmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UzKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBSZWZQdHI8
SlNPTjo6T2JqZWN0PiYmKQogewogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BB
VENIRVJTKQogICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRl
cm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVzb3VyY2UzKHJlcXVlc3RJZCk7CisgICAgICAgIG1fYWx0
ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJlc291cmNlMyhwcm90b2NvbF9jYWxsSWQpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJ
U1BBVENIRVJTKQogCi0gICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVmPEpTT046Ok9iamVj
dD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBtX2FnZW50LT5sb2FkUmVz
b3VyY2UzKGVycm9yKTsKKyAgICBhdXRvIHJlc3VsdCA9IG1fYWdlbnQtPmxvYWRSZXNvdXJjZTMo
KTsKKyAgICBpZiAoIXJlc3VsdCkgeworICAgICAgICBBU1NFUlQoIXJlc3VsdC5lcnJvcigpLmlz
RW1wdHkoKSk7CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJy
b3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCByZXN1bHQuZXJyb3IoKSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQotICAgICAgICBt
X2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3Vs
dCksIGZhbHNlKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9y
dFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVy
cm9yKSk7CisgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3Jl
YXRlKCk7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHByb3RvY29sX2Nh
bGxJZCwgV1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSksIGZhbHNlKTsKIH0KIAotdm9pZCBO
ZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U0KGxvbmcgcmVxdWVzdElkLCBS
ZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQordm9pZCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjps
b2FkUmVzb3VyY2U0KGxvbmcgcHJvdG9jb2xfY2FsbElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYm
KQogewogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogICAgIGlm
IChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVy
LT5sb2FkUmVzb3VyY2U0KHJlcXVlc3RJZCk7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hl
ci0+bG9hZFJlc291cmNlNChwcm90b2NvbF9jYWxsSWQpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogCi0g
ICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNP
Tjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBtX2FnZW50LT5sb2FkUmVzb3VyY2U0KGVycm9yKTsK
KyAgICBhdXRvIHJlc3VsdCA9IG1fYWdlbnQtPmxvYWRSZXNvdXJjZTQoKTsKKyAgICBpZiAoIXJl
c3VsdCkgeworICAgICAgICBBU1NFUlQoIXJlc3VsdC5lcnJvcigpLmlzRW1wdHkoKSk7CisgICAg
ICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3Bh
dGNoZXI6OlNlcnZlckVycm9yLCByZXN1bHQuZXJyb3IoKSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CiAKLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQotICAgICAgICBtX2JhY2tlbmREaXNwYXRj
aGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKLSAg
ICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3Io
QmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7CisgICAgYXV0
byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgbV9i
YWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShw
cm90b2NvbF9qc29uTWVzc2FnZSksIGZhbHNlKTsKIH0KIAotdm9pZCBOZXR3b3JrM0JhY2tlbmRE
aXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U1KGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiYmKQordm9pZCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U1KGxv
bmcgcHJvdG9jb2xfY2FsbElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQogewogI2lmIEVOQUJM
RShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogICAgIGlmIChtX2FsdGVybmF0ZURp
c3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVzb3VyY2U1
KHJlcXVlc3RJZCk7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJlc291cmNl
NShwcm90b2NvbF9jYWxsSWQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmIC8vIEVO
QUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogCi0gICAgRXJyb3JTdHJpbmcg
ZXJyb3I7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVh
dGUoKTsKLSAgICBtX2FnZW50LT5sb2FkUmVzb3VyY2U1KGVycm9yKTsKKyAgICBhdXRvIHJlc3Vs
dCA9IG1fYWdlbnQtPmxvYWRSZXNvdXJjZTUoKTsKKyAgICBpZiAoIXJlc3VsdCkgeworICAgICAg
ICBBU1NFUlQoIXJlc3VsdC5lcnJvcigpLmlzRW1wdHkoKSk7CisgICAgICAgIG1fYmFja2VuZERp
c3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVy
cm9yLCByZXN1bHQuZXJyb3IoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBpZiAo
IWVycm9yLmxlbmd0aCgpKQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9u
c2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKLSAgICBlbHNlCi0gICAgICAg
IG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNo
ZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7CisgICAgYXV0byBwcm90b2NvbF9qc29u
TWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+c2VuZFJlc3BvbnNlKHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9qc29uTWVz
c2FnZSksIGZhbHNlKTsKIH0KIAotdm9pZCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2Fk
UmVzb3VyY2U2KGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQordm9pZCBO
ZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U2KGxvbmcgcHJvdG9jb2xfY2Fs
bElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQogewogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQogICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAg
ICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVzb3VyY2U2KHJlcXVlc3RJZCk7Cisg
ICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJlc291cmNlNihwcm90b2NvbF9jYWxs
SWQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1Jf
QUxURVJOQVRFX0RJU1BBVENIRVJTKQogCi0gICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVm
PEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBtX2Fn
ZW50LT5sb2FkUmVzb3VyY2U2KGVycm9yKTsKKyAgICBhdXRvIHJlc3VsdCA9IG1fYWdlbnQtPmxv
YWRSZXNvdXJjZTYoKTsKKyAgICBpZiAoIXJlc3VsdCkgeworICAgICAgICBBU1NFUlQoIXJlc3Vs
dC5lcnJvcigpLmlzRW1wdHkoKSk7CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9y
dFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCByZXN1bHQuZXJy
b3IoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBpZiAoIWVycm9yLmxlbmd0aCgp
KQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBX
VEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3Bh
dGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9y
LCBXVEZNb3ZlKGVycm9yKSk7CisgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046
Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNl
KHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSksIGZhbHNlKTsK
IH0KIAotdm9pZCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U3KGxvbmcg
cmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQordm9pZCBOZXR3b3JrM0JhY2tlbmRE
aXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U3KGxvbmcgcHJvdG9jb2xfY2FsbElkLCBSZWZQdHI8SlNP
Tjo6T2JqZWN0PiYmKQogewogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENI
RVJTKQogICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5h
dGVEaXNwYXRjaGVyLT5sb2FkUmVzb3VyY2U3KHJlcXVlc3RJZCk7CisgICAgICAgIG1fYWx0ZXJu
YXRlRGlzcGF0Y2hlci0+bG9hZFJlc291cmNlNyhwcm90b2NvbF9jYWxsSWQpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BB
VENIRVJTKQogCi0gICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4g
cmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBtX2FnZW50LT5sb2FkUmVzb3Vy
Y2U3KGVycm9yKTsKKyAgICBhdXRvIHJlc3VsdCA9IG1fYWdlbnQtPmxvYWRSZXNvdXJjZTcoKTsK
KyAgICBpZiAoIXJlc3VsdCkgeworICAgICAgICBBU1NFUlQoIXJlc3VsdC5lcnJvcigpLmlzRW1w
dHkoKSk7CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3Io
QmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCByZXN1bHQuZXJyb3IoKSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CiAKLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQotICAgICAgICBtX2Jh
Y2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCks
IGZhbHNlKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFBy
b3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9y
KSk7CisgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRl
KCk7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHByb3RvY29sX2NhbGxJ
ZCwgV1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSksIGZhbHNlKTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgSW5zcGVjdG9yCkBAIC01MzgsNiArNTQ1LDcgQEAgdm9pZCBOZXR3b3JrM0JhY2tlbmRE
aXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U3KGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2Jq
ZWMKIAogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDx3dGYvSlNP
TlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKQEAgLTU4MSw3ICs1ODksNiBA
QCBjbGFzcyBGcm9udGVuZFJvdXRlcjsKICNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVy
cy5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIu
aD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3Ig
ewogCkBAIC02MjIsNyArNjI5LDkgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiAjcHJhZ21hIG9u
Y2UKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4K
LSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+
CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC02ODEsOCArNjkwLDcgQEAgdXNpbmcg
TG9hZGVySWQgPSBTdHJpbmc7CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGVzdFBy
b3RvY29sT2JqZWN0cy5oIgogCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8
d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAKIG5hbWVz
cGFjZSBJbnNwZWN0b3IgewogCkBAIC03MzksNyArNzQ3LDcgQEAgY2xhc3MgT2JqQ0luc3BlY3Rv
ck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgQWx0ZXJuYXRlTmV0d29y
azFCYWMKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBPYmpDSW5z
cGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcihpZDxUZXN0UHJvdG9jb2xOZXR3b3JrMURv
bWFpbkhhbmRsZXI+IGhhbmRsZXIpIHsgbV9kZWxlZ2F0ZSA9IGhhbmRsZXI7IH0KLSAgICB2b2lk
IGxvYWRSZXNvdXJjZTEobG9uZyByZXF1ZXN0SWQpIGZpbmFsOworICAgIHZvaWQgbG9hZFJlc291
cmNlMShsb25nIHByb3RvY29sX2NhbGxJZCkgZmluYWw7CiBwcml2YXRlOgogICAgIFJldGFpblB0
cjxpZDxUZXN0UHJvdG9jb2xOZXR3b3JrMURvbWFpbkhhbmRsZXI+PiBtX2RlbGVnYXRlOwogfTsK
QEAgLTc0OCwxMyArNzU2LDEzIEBAIGNsYXNzIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmRE
aXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEFsdGVybmF0ZU5ldHdvcmszQmFjCiAgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgT2JqQ0luc3BlY3Rvck5ldHdvcmszQmFj
a2VuZERpc3BhdGNoZXIoaWQ8VGVzdFByb3RvY29sTmV0d29yazNEb21haW5IYW5kbGVyPiBoYW5k
bGVyKSB7IG1fZGVsZWdhdGUgPSBoYW5kbGVyOyB9Ci0gICAgdm9pZCBsb2FkUmVzb3VyY2UxKGxv
bmcgcmVxdWVzdElkKSBmaW5hbDsKLSAgICB2b2lkIGxvYWRSZXNvdXJjZTIobG9uZyByZXF1ZXN0
SWQpIGZpbmFsOwotICAgIHZvaWQgbG9hZFJlc291cmNlMyhsb25nIHJlcXVlc3RJZCkgZmluYWw7
Ci0gICAgdm9pZCBsb2FkUmVzb3VyY2U0KGxvbmcgcmVxdWVzdElkKSBmaW5hbDsKLSAgICB2b2lk
IGxvYWRSZXNvdXJjZTUobG9uZyByZXF1ZXN0SWQpIGZpbmFsOwotICAgIHZvaWQgbG9hZFJlc291
cmNlNihsb25nIHJlcXVlc3RJZCkgZmluYWw7Ci0gICAgdm9pZCBsb2FkUmVzb3VyY2U3KGxvbmcg
cmVxdWVzdElkKSBmaW5hbDsKKyAgICB2b2lkIGxvYWRSZXNvdXJjZTEobG9uZyBwcm90b2NvbF9j
YWxsSWQpIGZpbmFsOworICAgIHZvaWQgbG9hZFJlc291cmNlMihsb25nIHByb3RvY29sX2NhbGxJ
ZCkgZmluYWw7CisgICAgdm9pZCBsb2FkUmVzb3VyY2UzKGxvbmcgcHJvdG9jb2xfY2FsbElkKSBm
aW5hbDsKKyAgICB2b2lkIGxvYWRSZXNvdXJjZTQobG9uZyBwcm90b2NvbF9jYWxsSWQpIGZpbmFs
OworICAgIHZvaWQgbG9hZFJlc291cmNlNShsb25nIHByb3RvY29sX2NhbGxJZCkgZmluYWw7Cisg
ICAgdm9pZCBsb2FkUmVzb3VyY2U2KGxvbmcgcHJvdG9jb2xfY2FsbElkKSBmaW5hbDsKKyAgICB2
b2lkIGxvYWRSZXNvdXJjZTcobG9uZyBwcm90b2NvbF9jYWxsSWQpIGZpbmFsOwogcHJpdmF0ZToK
ICAgICBSZXRhaW5QdHI8aWQ8VGVzdFByb3RvY29sTmV0d29yazNEb21haW5IYW5kbGVyPj4gbV9k
ZWxlZ2F0ZTsKIH07CkBAIC04MDIsMTYxICs4MTAsMTY5IEBAIHByaXZhdGU6CiAKIG5hbWVzcGFj
ZSBJbnNwZWN0b3IgewogCi12b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRj
aGVyOjpsb2FkUmVzb3VyY2UxKGxvbmcgcmVxdWVzdElkKQordm9pZCBPYmpDSW5zcGVjdG9yTmV0
d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMShsb25nIHByb3RvY29sX2NhbGxJ
ZCkKIHsKICAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Io
bG9hZFJlc291cmNlMVdpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazopXSkgewotICAg
ICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwg
QmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdvcmsxLmxvYWRSZXNvdXJj
ZTEnIHdhcyBub3QgZm91bmQiX3MpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBv
cnRQcm90b2NvbEVycm9yKHByb3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhv
ZE5vdEZvdW5kLCAiJ05ldHdvcmsxLmxvYWRSZXNvdXJjZTEnIHdhcyBub3QgZm91bmQiX3MpOwog
ICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCiAgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVy
cm9yKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3Io
cmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAg
ICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxs
SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwogICAgICAgICBiYWNr
ZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgIH07CiAKICAgICBpZCBz
dWNjZXNzQ2FsbGJhY2sgPSBeewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVz
cG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7CisgICAgICAg
IGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAg
ICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocHJvdG9jb2xfY2FsbElkLCBX
VEZNb3ZlKHByb3RvY29sX2pzb25NZXNzYWdlKSwgZmFsc2UpOwogICAgIH07CiAKICAgICBbbV9k
ZWxlZ2F0ZSBsb2FkUmVzb3VyY2UxV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNj
ZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsKIH0KIAotdm9pZCBPYmpDSW5zcGVjdG9yTmV0
d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMShsb25nIHJlcXVlc3RJZCkKK3Zv
aWQgT2JqQ0luc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTEo
bG9uZyBwcm90b2NvbF9jYWxsSWQpCiB7CiAgICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25kc1Rv
U2VsZWN0b3I6QHNlbGVjdG9yKGxvYWRSZXNvdXJjZTFXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNz
Q2FsbGJhY2s6KV0pIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9j
b2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidO
ZXR3b3JrMy5sb2FkUmVzb3VyY2UxJyB3YXMgbm90IGZvdW5kIl9zKTsKKyAgICAgICAgYmFja2Vu
ZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxsSWQsIEJhY2tl
bmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidOZXR3b3JrMy5sb2FkUmVzb3VyY2UxJyB3
YXMgbm90IGZvdW5kIl9zKTsKICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRp
bmdFcnJvcnMoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlkIGVycm9yQ2FsbGJh
Y2sgPSBeKE5TU3RyaW5nICplcnJvcikgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5y
ZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVy
cm9yLCBlcnJvcik7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29s
RXJyb3IocHJvdG9jb2xfY2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVy
cm9yKTsKICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsK
ICAgICB9OwogCiAgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKLSAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgSlNPTjo6T2JqZWN0OjpjcmVhdGUo
KSwgZmFsc2UpOworICAgICAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2Jq
ZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNl
KHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSksIGZhbHNlKTsK
ICAgICB9OwogCiAgICAgW21fZGVsZWdhdGUgbG9hZFJlc291cmNlMVdpdGhFcnJvckNhbGxiYWNr
OmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107CiB9CiAKLXZv
aWQgT2JqQ0luc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTIo
bG9uZyByZXF1ZXN0SWQpCit2b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRj
aGVyOjpsb2FkUmVzb3VyY2UyKGxvbmcgcHJvdG9jb2xfY2FsbElkKQogewogICAgIGlmICghW21f
ZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihsb2FkUmVzb3VyY2UyV2l0aEVy
cm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRj
aGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6
TWV0aG9kTm90Rm91bmQsICInTmV0d29yazMubG9hZFJlc291cmNlMicgd2FzIG5vdCBmb3VuZCJf
cyk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocHJv
dG9jb2xfY2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29y
azMubG9hZFJlc291cmNlMicgd2FzIG5vdCBmb3VuZCJfcyk7CiAgICAgICAgIGJhY2tlbmREaXNw
YXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
ICAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFj
a2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmRE
aXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hl
cigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHByb3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNo
ZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CiAgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNl
bmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgfTsKIAogICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF57
Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIEpT
T046Ok9iamVjdDo6Y3JlYXRlKCksIGZhbHNlKTsKKyAgICAgICAgYXV0byBwcm90b2NvbF9qc29u
TWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIGJhY2tlbmREaXNwYXRj
aGVyKCktPnNlbmRSZXNwb25zZShwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJvdG9jb2xfanNv
bk1lc3NhZ2UpLCBmYWxzZSk7CiAgICAgfTsKIAogICAgIFttX2RlbGVnYXRlIGxvYWRSZXNvdXJj
ZTJXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNz
Q2FsbGJhY2tdOwogfQogCi12b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRj
aGVyOjpsb2FkUmVzb3VyY2UzKGxvbmcgcmVxdWVzdElkKQordm9pZCBPYmpDSW5zcGVjdG9yTmV0
d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMyhsb25nIHByb3RvY29sX2NhbGxJ
ZCkKIHsKICAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Io
bG9hZFJlc291cmNlM1dpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazopXSkgewotICAg
ICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwg
QmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdvcmszLmxvYWRSZXNvdXJj
ZTMnIHdhcyBub3QgZm91bmQiX3MpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBv
cnRQcm90b2NvbEVycm9yKHByb3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhv
ZE5vdEZvdW5kLCAiJ05ldHdvcmszLmxvYWRSZXNvdXJjZTMnIHdhcyBub3QgZm91bmQiX3MpOwog
ICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCiAgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVy
cm9yKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3Io
cmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAg
ICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxs
SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwogICAgICAgICBiYWNr
ZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgIH07CiAKICAgICBpZCBz
dWNjZXNzQ2FsbGJhY2sgPSBeewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVz
cG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7CisgICAgICAg
IGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAg
ICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocHJvdG9jb2xfY2FsbElkLCBX
VEZNb3ZlKHByb3RvY29sX2pzb25NZXNzYWdlKSwgZmFsc2UpOwogICAgIH07CiAKICAgICBbbV9k
ZWxlZ2F0ZSBsb2FkUmVzb3VyY2UzV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNj
ZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsKIH0KIAotdm9pZCBPYmpDSW5zcGVjdG9yTmV0
d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNChsb25nIHJlcXVlc3RJZCkKK3Zv
aWQgT2JqQ0luc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTQo
bG9uZyBwcm90b2NvbF9jYWxsSWQpCiB7CiAgICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25kc1Rv
U2VsZWN0b3I6QHNlbGVjdG9yKGxvYWRSZXNvdXJjZTRXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNz
Q2FsbGJhY2s6KV0pIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9j
b2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidO
ZXR3b3JrMy5sb2FkUmVzb3VyY2U0JyB3YXMgbm90IGZvdW5kIl9zKTsKKyAgICAgICAgYmFja2Vu
ZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxsSWQsIEJhY2tl
bmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidOZXR3b3JrMy5sb2FkUmVzb3VyY2U0JyB3
YXMgbm90IGZvdW5kIl9zKTsKICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRp
bmdFcnJvcnMoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlkIGVycm9yQ2FsbGJh
Y2sgPSBeKE5TU3RyaW5nICplcnJvcikgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5y
ZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVy
cm9yLCBlcnJvcik7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29s
RXJyb3IocHJvdG9jb2xfY2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVy
cm9yKTsKICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsK
ICAgICB9OwogCiAgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKLSAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgSlNPTjo6T2JqZWN0OjpjcmVhdGUo
KSwgZmFsc2UpOworICAgICAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2Jq
ZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNl
KHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSksIGZhbHNlKTsK
ICAgICB9OwogCiAgICAgW21fZGVsZWdhdGUgbG9hZFJlc291cmNlNFdpdGhFcnJvckNhbGxiYWNr
OmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107CiB9CiAKLXZv
aWQgT2JqQ0luc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTUo
bG9uZyByZXF1ZXN0SWQpCit2b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRj
aGVyOjpsb2FkUmVzb3VyY2U1KGxvbmcgcHJvdG9jb2xfY2FsbElkKQogewogICAgIGlmICghW21f
ZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihsb2FkUmVzb3VyY2U1V2l0aEVy
cm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRj
aGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6
TWV0aG9kTm90Rm91bmQsICInTmV0d29yazMubG9hZFJlc291cmNlNScgd2FzIG5vdCBmb3VuZCJf
cyk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocHJv
dG9jb2xfY2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29y
azMubG9hZFJlc291cmNlNScgd2FzIG5vdCBmb3VuZCJfcyk7CiAgICAgICAgIGJhY2tlbmREaXNw
YXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
ICAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFj
a2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmRE
aXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hl
cigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHByb3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNo
ZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CiAgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNl
bmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgfTsKIAogICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF57
Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIEpT
T046Ok9iamVjdDo6Y3JlYXRlKCksIGZhbHNlKTsKKyAgICAgICAgYXV0byBwcm90b2NvbF9qc29u
TWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIGJhY2tlbmREaXNwYXRj
aGVyKCktPnNlbmRSZXNwb25zZShwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJvdG9jb2xfanNv
bk1lc3NhZ2UpLCBmYWxzZSk7CiAgICAgfTsKIAogICAgIFttX2RlbGVnYXRlIGxvYWRSZXNvdXJj
ZTVXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNz
Q2FsbGJhY2tdOwogfQogCi12b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRj
aGVyOjpsb2FkUmVzb3VyY2U2KGxvbmcgcmVxdWVzdElkKQordm9pZCBPYmpDSW5zcGVjdG9yTmV0
d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNihsb25nIHByb3RvY29sX2NhbGxJ
ZCkKIHsKICAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Io
bG9hZFJlc291cmNlNldpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazopXSkgewotICAg
ICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwg
QmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdvcmszLmxvYWRSZXNvdXJj
ZTYnIHdhcyBub3QgZm91bmQiX3MpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBv
cnRQcm90b2NvbEVycm9yKHByb3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhv
ZE5vdEZvdW5kLCAiJ05ldHdvcmszLmxvYWRSZXNvdXJjZTYnIHdhcyBub3QgZm91bmQiX3MpOwog
ICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCiAgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVy
cm9yKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3Io
cmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAg
ICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxs
SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwogICAgICAgICBiYWNr
ZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgIH07CiAKICAgICBpZCBz
dWNjZXNzQ2FsbGJhY2sgPSBeewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVz
cG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7CisgICAgICAg
IGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAg
ICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocHJvdG9jb2xfY2FsbElkLCBX
VEZNb3ZlKHByb3RvY29sX2pzb25NZXNzYWdlKSwgZmFsc2UpOwogICAgIH07CiAKICAgICBbbV9k
ZWxlZ2F0ZSBsb2FkUmVzb3VyY2U2V2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNj
ZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsKIH0KIAotdm9pZCBPYmpDSW5zcGVjdG9yTmV0
d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNyhsb25nIHJlcXVlc3RJZCkKK3Zv
aWQgT2JqQ0luc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTco
bG9uZyBwcm90b2NvbF9jYWxsSWQpCiB7CiAgICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25kc1Rv
U2VsZWN0b3I6QHNlbGVjdG9yKGxvYWRSZXNvdXJjZTdXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNz
Q2FsbGJhY2s6KV0pIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9j
b2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidO
ZXR3b3JrMy5sb2FkUmVzb3VyY2U3JyB3YXMgbm90IGZvdW5kIl9zKTsKKyAgICAgICAgYmFja2Vu
ZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxsSWQsIEJhY2tl
bmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidOZXR3b3JrMy5sb2FkUmVzb3VyY2U3JyB3
YXMgbm90IGZvdW5kIl9zKTsKICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRp
bmdFcnJvcnMoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlkIGVycm9yQ2FsbGJh
Y2sgPSBeKE5TU3RyaW5nICplcnJvcikgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5y
ZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVy
cm9yLCBlcnJvcik7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29s
RXJyb3IocHJvdG9jb2xfY2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVy
cm9yKTsKICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsK
ICAgICB9OwogCiAgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKLSAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgSlNPTjo6T2JqZWN0OjpjcmVhdGUo
KSwgZmFsc2UpOworICAgICAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2Jq
ZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNl
KHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSksIGZhbHNlKTsK
ICAgICB9OwogCiAgICAgW21fZGVsZWdhdGUgbG9hZFJlc291cmNlN1dpdGhFcnJvckNhbGxiYWNr
OmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0
ZWQvZW51bS12YWx1ZXMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZW51bS12YWx1ZXMuanNvbi1yZXN1bHQKaW5kZXgg
Nzk1M2NiZjIxODM4OGY4NDc3NzJiZDQxM2QxODAyNjI5YTdiODA1Yi4uOTkzZjlhYTI4YzcxMzY2
ZGRlZTdhZGExZjFjNjEwYzY3MWMxZmIyNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2VudW0tdmFsdWVzLmpzb24tcmVz
dWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9l
eHBlY3RlZC9lbnVtLXZhbHVlcy5qc29uLXJlc3VsdApAQCAtMzAsMTggKzMwLDE5IEBACiAKIC8v
IFR5cGVEb21haW4KIEluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW4oIlR5cGVEb21haW4i
LCBudWxsKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFbnVtKCJUeXBlRG9tYWluLlR5cGVE
b21haW5FbnVtIiwge1NoYXJlZDogInNoYXJlZCIsIFJlZDogInJlZCIsIEdyZWVuOiAiZ3JlZW4i
LCBCbHVlOiAiYmx1ZSJ9KTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFbnVtKCJUeXBlRG9t
YWluLkVudW0iLCB7U2hhcmVkOiAic2hhcmVkIiwgMTogIjEiLCAyOiAiMiJ9KTsKIEluc3BlY3Rv
ckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIlR5cGVEb21haW4iLCBudWxsKTsKIAogLy8gQ29tbWFu
ZERvbWFpbgogSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbigiQ29tbWFuZERvbWFpbiIs
IG51bGwpOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIkNvbW1hbmREb21haW4u
Y29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUiLCBudWxsLCBbXSwgWyJyZXR1cm5WYWx1ZSJdKTsK
K0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJDb21tYW5kRG9tYWluLmNvbW1hbmQi
LCBudWxsLCBbeyJuYW1lIjogImVudW1SZXF1aXJlZCIsICJ0eXBlIjogInN0cmluZyJ9LCB7Im5h
bWUiOiAiZW51bU9wdGlvbmFsIiwgInR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjogdHJ1ZX0s
IHsibmFtZSI6ICJwYXJhbWV0ZXJSZXF1aXJlZCIsICJ0eXBlIjogInN0cmluZyJ9LCB7Im5hbWUi
OiAicGFyYW1ldGVyT3B0aW9uYWwiLCAidHlwZSI6ICJzdHJpbmciLCAib3B0aW9uYWwiOiB0cnVl
fV0sIFsiZW51bVJlcXVpcmVkIiwgImVudW1PcHRpb25hbCIsICJyZXR1cm5SZXF1aXJlZCIsICJy
ZXR1cm5PcHRpb25hbCJdKTsKIEluc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIkNvbW1h
bmREb21haW4iLCBudWxsKTsKIAogLy8gRXZlbnREb21haW4KIEluc3BlY3RvckJhY2tlbmQucmVn
aXN0ZXJEb21haW4oIkV2ZW50RG9tYWluIiwgbnVsbCk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lz
dGVyRW51bSgiRXZlbnREb21haW4uRXZlbnRXaXRoRW51bVBhcmFtZXRlclBhcmFtZXRlciIsIHtT
aGFyZWQ6ICJzaGFyZWQiLCBCbGFjazogImJsYWNrIiwgV2hpdGU6ICJ3aGl0ZSJ9KTsKLUluc3Bl
Y3RvckJhY2tlbmQucmVnaXN0ZXJFdmVudCgiRXZlbnREb21haW4uZXZlbnRXaXRoRW51bVBhcmFt
ZXRlciIsIG51bGwsIFsicGFyYW1ldGVyIl0pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckVu
dW0oIkV2ZW50RG9tYWluLkV2ZW50UGFyYW1ldGVyUmVxdWlyZWQiLCB7U2hhcmVkOiAic2hhcmVk
IiwgU2hhcmVkUmVxdWlyZWQ6ICJzaGFyZWRSZXF1aXJlZCIsIEdyZXk6ICJncmV5In0pOworSW5z
cGVjdG9yQmFja2VuZC5yZWdpc3RlckVudW0oIkV2ZW50RG9tYWluLkV2ZW50UGFyYW1ldGVyT3B0
aW9uYWwiLCB7U2hhcmVkOiAic2hhcmVkIiwgU2hhcmVkT3B0aW9uYWw6ICJzaGFyZWRPcHRpb25h
bCIsIEdyZWVuOiAiZ3JlZW4ifSk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRXZlbnQoIkV2
ZW50RG9tYWluLmV2ZW50IiwgbnVsbCwgWyJlbnVtUmVxdWlyZWQiLCAiZW51bU9wdGlvbmFsIiwg
InBhcmFtZXRlclJlcXVpcmVkIiwgInBhcmFtZXRlck9wdGlvbmFsIl0pOwogSW5zcGVjdG9yQmFj
a2VuZC5yZWdpc3RlckV2ZW50RG9tYWluRGlzcGF0Y2hlciA9IEluc3BlY3RvckJhY2tlbmQucmVn
aXN0ZXJEaXNwYXRjaGVyLmJpbmQoSW5zcGVjdG9yQmFja2VuZCwgIkV2ZW50RG9tYWluIik7CiBJ
bnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJFdmVudERvbWFpbiIsIG51bGwpOwogIyMj
IEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMuaW4KQEAgLTgwLDcgKzgxLDcg
QEAgSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiRXZlbnREb21haW4iLCBudWxsKTsK
IAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogCi0jaW5jbHVk
ZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgi
CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4K
ICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgogCkBA
IC05OCw3ICs5OSw3IEBAIHByaXZhdGU6CiBjbGFzcyBBbHRlcm5hdGVDb21tYW5kRG9tYWluQmFj
a2VuZERpc3BhdGNoZXIgOiBwdWJsaWMgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewogcHVi
bGljOgogICAgIHZpcnR1YWwgfkFsdGVybmF0ZUNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hl
cigpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBjb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZShsb25n
IGNhbGxJZCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBjb21tYW5kKGxvbmcgcHJvdG9jb2xfY2Fs
bElkLCBjb25zdCBTdHJpbmcmIGVudW1SZXF1aXJlZCwgY29uc3QgU3RyaW5nJiBvcHRfZW51bU9w
dGlvbmFsLCBjb25zdCBTdHJpbmcmIHBhcmFtZXRlclJlcXVpcmVkLCBjb25zdCBTdHJpbmcmIG9w
dF9wYXJhbWV0ZXJPcHRpb25hbCkgPSAwOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
CkBAIC0xNDAsMTEgKzE0MSwxNCBAQCBwdWJsaWM6CiAKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xP
YmplY3RzLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXIuaD4KKyNpbmNsdWRlIDx0dXBsZT4KKyNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4KKyNp
bmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
IAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwor
CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIGNsYXNzIEFs
dGVybmF0ZUNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcjsKQEAgLTE1MiwxNCArMTU2LDcg
QEAgY2xhc3MgQWx0ZXJuYXRlQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOwogCiBjbGFz
cyBDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKIHB1YmxpYzoKLSAgICAv
LyBOYW1lZCBhZnRlciBwYXJhbWV0ZXIgJ3JldHVyblZhbHVlJyB3aGlsZSBnZW5lcmF0aW5nIGNv
bW1hbmQvZXZlbnQgY29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUuCi0gICAgZW51bSBjbGFzcyBS
ZXR1cm5WYWx1ZSB7Ci0gICAgICAgIFNoYXJlZCA9IDAsCi0gICAgICAgIEN5YW4gPSA2LAotICAg
ICAgICBNYWdlbnRhID0gNywKLSAgICAgICAgWWVsbG93ID0gOCwKLSAgICB9OyAvLyBlbnVtIGNs
YXNzIFJldHVyblZhbHVlCi0gICAgdmlydHVhbCB2b2lkIGNvbW1hbmRXaXRoRW51bVJldHVyblZh
bHVlKEVycm9yU3RyaW5nJiwgQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6
UmV0dXJuVmFsdWUqIG91dF9yZXR1cm5WYWx1ZSkgPSAwOworICAgIHZpcnR1YWwgUHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8c3RkOjp0dXBsZTxQcm90b2NvbDo6VHlwZURvbWFpbjo6RW51bSAvKiBl
bnVtUmVxdWlyZWQgKi8sIE9wdGlvbmFsPFByb3RvY29sOjpUeXBlRG9tYWluOjpFbnVtPiAvKiBv
cHRfZW51bU9wdGlvbmFsICovLCBTdHJpbmcgLyogcmV0dXJuUmVxdWlyZWQgKi8sIFN0cmluZyAv
KiBvcHRfcmV0dXJuT3B0aW9uYWwgKi8+PiBjb21tYW5kKFByb3RvY29sOjpUeXBlRG9tYWluOjpF
bnVtIGVudW1SZXF1aXJlZCwgT3B0aW9uYWw8UHJvdG9jb2w6OlR5cGVEb21haW46OkVudW0+JiYg
b3B0X2VudW1PcHRpb25hbCwgY29uc3QgU3RyaW5nJiBwYXJhbWV0ZXJSZXF1aXJlZCwgY29uc3Qg
U3RyaW5nJiBvcHRfcGFyYW1ldGVyT3B0aW9uYWwpID0gMDsKIHByb3RlY3RlZDoKICAgICB2aXJ0
dWFsIH5Db21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCk7CiB9OwpAQCAtMTY3
LDkgKzE2NCw5IEBAIHByb3RlY3RlZDoKIGNsYXNzIENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0
Y2hlciBmaW5hbCA6IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7CiBwdWJs
aWM6CiAgICAgc3RhdGljIFJlZjxDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0
ZShCYWNrZW5kRGlzcGF0Y2hlciYsIENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXIqKTsKLSAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1l
dGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKSBmaW5hbDsKKyAgICB2b2lkIGRpc3Bh
dGNoKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBjb25zdCBTdHJpbmcmIHByb3RvY29sX21ldGhvZCwg
UmVmPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9tZXNzYWdlKSBmaW5hbDsKIHByaXZhdGU6Ci0g
ICAgdm9pZCBjb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZShsb25nIHJlcXVlc3RJZCwgUmVmUHRy
PEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKKyAgICB2b2lkIGNvbW1hbmQobG9uZyBwcm90
b2NsX2NhbGxJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9wYXJhbWV0ZXJzKTsK
ICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIHB1YmxpYzoKICAg
ICB2b2lkIHNldEFsdGVybmF0ZURpc3BhdGNoZXIoQWx0ZXJuYXRlQ29tbWFuZERvbWFpbkJhY2tl
bmREaXNwYXRjaGVyKiBhbHRlcm5hdGVEaXNwYXRjaGVyKSB7IG1fYWx0ZXJuYXRlRGlzcGF0Y2hl
ciA9IGFsdGVybmF0ZURpc3BhdGNoZXI7IH0KQEAgLTIxOCw5ICsyMTUsNyBAQCBwcml2YXRlOgog
I2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKIAogI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0pTT05WYWx1
ZXMuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVS
UykKICNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCkBAIC0yNDIs
NDIgKzIzNyw2MyBAQCBDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkNvbW1hbmREb21h
aW5CYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlcgogICAgIG1fYmFja2VuZERpc3Bh
dGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbigiQ29tbWFuZERvbWFpbiJfcywgdGhp
cyk7CiB9CiAKLXZvaWQgQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChs
b25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYg
bWVzc2FnZSkKK3ZvaWQgQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChs
b25nIHByb3RvY29sX2NhbGxJZCwgY29uc3QgU3RyaW5nJiBwcm90b2NvbF9tZXRob2QsIFJlZjxK
U09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfbWVzc2FnZSkKIHsKICAgICBSZWY8Q29tbWFuZERvbWFp
bkJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKIAotICAgIFJlZlB0cjxKU09OOjpP
YmplY3Q+IHBhcmFtZXRlcnM7Ci0gICAgbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3MsIHBh
cmFtZXRlcnMpOworICAgIGF1dG8gcHJvdG9jb2xfcGFyYW1ldGVycyA9IHByb3RvY29sX21lc3Nh
Z2UtPmdldE9iamVjdCgicGFyYW1zIl9zKTsKIAotICAgIGlmIChtZXRob2QgPT0gImNvbW1hbmRX
aXRoRW51bVJldHVyblZhbHVlIikgewotICAgICAgICBjb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1
ZShyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykpOworICAgIGlmIChwcm90b2NvbF9tZXRo
b2QgPT0gImNvbW1hbmQiKSB7CisgICAgICAgIGNvbW1hbmQocHJvdG9jb2xfY2FsbElkLCBXVEZN
b3ZlKHByb3RvY29sX3BhcmFtZXRlcnMpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNo
ZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0NvbW1hbmREb21haW4uIiArIG1ldGhvZCArICInIHdhcyBu
b3QgZm91bmQiKTsKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9y
KEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidDb21tYW5kRG9tYWluLiIgKyBw
cm90b2NvbF9tZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7CiB9CiAKLXZvaWQgQ29tbWFuZERv
bWFpbkJhY2tlbmREaXNwYXRjaGVyOjpjb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZShsb25nIHJl
cXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikKK3ZvaWQgQ29tbWFuZERvbWFpbkJhY2tl
bmREaXNwYXRjaGVyOjpjb21tYW5kKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBSZWZQdHI8SlNPTjo6
T2JqZWN0PiYmIHByb3RvY29sX3BhcmFtZXRlcnMpCiB7CisgICAgYXV0byBpbl9lbnVtUmVxdWly
ZWRfanNvbiA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFN0cmluZyhwcm90b2NvbF9wYXJhbWV0
ZXJzLmdldCgpLCAiZW51bVJlcXVpcmVkIl9zLCB0cnVlKTsKKyAgICBhdXRvIGluX29wdF9lbnVt
T3B0aW9uYWxfanNvbiA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFN0cmluZyhwcm90b2NvbF9w
YXJhbWV0ZXJzLmdldCgpLCAiZW51bU9wdGlvbmFsIl9zLCBmYWxzZSk7CisgICAgYXV0byBpbl9w
YXJhbWV0ZXJSZXF1aXJlZCA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFN0cmluZyhwcm90b2Nv
bF9wYXJhbWV0ZXJzLmdldCgpLCAicGFyYW1ldGVyUmVxdWlyZWQiX3MsIHRydWUpOworICAgIGF1
dG8gaW5fb3B0X3BhcmFtZXRlck9wdGlvbmFsID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3Ry
aW5nKHByb3RvY29sX3BhcmFtZXRlcnMuZ2V0KCksICJwYXJhbWV0ZXJPcHRpb25hbCJfcywgZmFs
c2UpOworICAgIGlmIChtX2JhY2tlbmREaXNwYXRjaGVyLT5oYXNQcm90b2NvbEVycm9ycygpKSB7
CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2Vu
ZERpc3BhdGNoZXI6OkludmFsaWRQYXJhbXMsICJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJ0Nv
bW1hbmREb21haW4uY29tbWFuZCcgY2FuJ3QgYmUgcHJvY2Vzc2VkIl9zKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKwogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJT
KQogICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVE
aXNwYXRjaGVyLT5jb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZShyZXF1ZXN0SWQpOworICAgICAg
ICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmNvbW1hbmQocHJvdG9jb2xfY2FsbElkLCBpbl9lbnVt
UmVxdWlyZWRfanNvbiwgaW5fb3B0X2VudW1PcHRpb25hbF9qc29uLCBpbl9wYXJhbWV0ZXJSZXF1
aXJlZCwgaW5fb3B0X3BhcmFtZXRlck9wdGlvbmFsKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
ICNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIAotICAg
IEVycm9yU3RyaW5nIGVycm9yOwotICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046
Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFu
ZGxlcjo6UmV0dXJuVmFsdWUgb3V0X3JldHVyblZhbHVlOwotICAgIG1fYWdlbnQtPmNvbW1hbmRX
aXRoRW51bVJldHVyblZhbHVlKGVycm9yLCAmb3V0X3JldHVyblZhbHVlKTsKKyAgICBhdXRvIGlu
X2VudW1SZXF1aXJlZCA9IFByb3RvY29sOjpUZXN0SGVscGVyczo6cGFyc2VFbnVtVmFsdWVGcm9t
U3RyaW5nPFByb3RvY29sOjpUeXBlRG9tYWluOjpFbnVtPihpbl9lbnVtUmVxdWlyZWRfanNvbik7
CisgICAgaWYgKCFpbl9lbnVtUmVxdWlyZWQpIHsKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIG1h
a2VTdHJpbmcoIlVua25vd24gZW51bVJlcXVpcmVkOiAiX3MsIGluX2VudW1SZXF1aXJlZF9qc29u
KSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQot
ICAgICAgICByZXN1bHQtPnNldFN0cmluZygicmV0dXJuVmFsdWUiX3MsIEluc3BlY3Rvcjo6UHJv
dG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShvdXRfcmV0dXJuVmFsdWUp
KTsKKyAgICBhdXRvIGluX29wdF9lbnVtT3B0aW9uYWwgPSBQcm90b2NvbDo6VGVzdEhlbHBlcnM6
OnBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxQcm90b2NvbDo6VHlwZURvbWFpbjo6RW51bT4oaW5f
b3B0X2VudW1PcHRpb25hbF9qc29uKTsKIAotICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCi0gICAg
ICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUo
cmVzdWx0KSwgZmFsc2UpOwotICAgIGVsc2UKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+
cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1v
dmUoZXJyb3IpKTsKKyAgICBhdXRvIHJlc3VsdCA9IG1fYWdlbnQtPmNvbW1hbmQoKmluX2VudW1S
ZXF1aXJlZCwgV1RGTW92ZShpbl9vcHRfZW51bU9wdGlvbmFsKSwgaW5fcGFyYW1ldGVyUmVxdWly
ZWQsIGluX29wdF9wYXJhbWV0ZXJPcHRpb25hbCk7CisgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAg
ICAgQVNTRVJUKCFyZXN1bHQuZXJyb3IoKS5pc0VtcHR5KCkpOworICAgICAgICBtX2JhY2tlbmRE
aXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJF
cnJvciwgcmVzdWx0LmVycm9yKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYXV0
byBbb3V0X2VudW1SZXF1aXJlZCwgb3V0X29wdF9lbnVtT3B0aW9uYWwsIG91dF9yZXR1cm5SZXF1
aXJlZCwgb3V0X29wdF9yZXR1cm5PcHRpb25hbF0gPSBXVEZNb3ZlKHJlc3VsdC52YWx1ZSgpKTsK
KworICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgp
OworICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoImVudW1SZXF1aXJlZCJfcywg
UHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShvdXRfZW51bVJlcXVp
cmVkKSk7CisgICAgaWYgKCEhb3V0X29wdF9lbnVtT3B0aW9uYWwpCisgICAgICAgIHByb3RvY29s
X2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoImVudW1PcHRpb25hbCJfcywgUHJvdG9jb2w6OlRlc3RI
ZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZSgqb3V0X29wdF9lbnVtT3B0aW9uYWwpKTsKKyAg
ICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJyZXR1cm5SZXF1aXJlZCJfcywgb3V0
X3JldHVyblJlcXVpcmVkKTsKKyAgICBpZiAoISFvdXRfb3B0X3JldHVybk9wdGlvbmFsKQorICAg
ICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJyZXR1cm5PcHRpb25hbCJfcywg
b3V0X29wdF9yZXR1cm5PcHRpb25hbCk7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJl
c3BvbnNlKHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSksIGZh
bHNlKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCkBAIC0zMTgsNiArMzM0LDcgQEAg
dm9pZCBDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OmNvbW1hbmRXaXRoRW51bVJldHVy
blZhbHVlKGxvbmcgcmVxdWVzdElkLAogCiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5o
IgogI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+
CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3Ig
ewpAQCAtMzI4LDEzICszNDUsMTkgQEAgY2xhc3MgRXZlbnREb21haW5Gcm9udGVuZERpc3BhdGNo
ZXIgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIEV2ZW50RG9t
YWluRnJvbnRlbmREaXNwYXRjaGVyKEZyb250ZW5kUm91dGVyJiBmcm9udGVuZFJvdXRlcikgOiBt
X2Zyb250ZW5kUm91dGVyKGZyb250ZW5kUm91dGVyKSB7IH0KLSAgICAgICAgLy8gTmFtZWQgYWZ0
ZXIgcGFyYW1ldGVyICdwYXJhbWV0ZXInIHdoaWxlIGdlbmVyYXRpbmcgY29tbWFuZC9ldmVudCBl
dmVudFdpdGhFbnVtUGFyYW1ldGVyLgotICAgICAgICBlbnVtIGNsYXNzIFBhcmFtZXRlciB7Cisg
ICAgICAgIC8vIE5hbWVkIGFmdGVyIHBhcmFtZXRlciAncGFyYW1ldGVyUmVxdWlyZWQnIHdoaWxl
IGdlbmVyYXRpbmcgY29tbWFuZC9ldmVudCBldmVudC4KKyAgICAgICAgZW51bSBjbGFzcyBQYXJh
bWV0ZXJSZXF1aXJlZCB7CiAgICAgICAgICAgICBTaGFyZWQgPSAwLAotICAgICAgICAgICAgQmxh
Y2sgPSA0LAotICAgICAgICAgICAgV2hpdGUgPSA1LAotICAgICAgICB9OyAvLyBlbnVtIGNsYXNz
IFBhcmFtZXRlcgotICAgIHZvaWQgZXZlbnRXaXRoRW51bVBhcmFtZXRlcihQYXJhbWV0ZXIgcGFy
YW1ldGVyKTsKKyAgICAgICAgICAgIFNoYXJlZFJlcXVpcmVkID0gMywKKyAgICAgICAgICAgIEdy
ZXkgPSA0LAorICAgICAgICB9OyAvLyBlbnVtIGNsYXNzIFBhcmFtZXRlclJlcXVpcmVkCisgICAg
ICAgIC8vIE5hbWVkIGFmdGVyIHBhcmFtZXRlciAncGFyYW1ldGVyT3B0aW9uYWwnIHdoaWxlIGdl
bmVyYXRpbmcgY29tbWFuZC9ldmVudCBldmVudC4KKyAgICAgICAgZW51bSBjbGFzcyBQYXJhbWV0
ZXJPcHRpb25hbCB7CisgICAgICAgICAgICBTaGFyZWQgPSAwLAorICAgICAgICAgICAgU2hhcmVk
T3B0aW9uYWwgPSA1LAorICAgICAgICAgICAgR3JlZW4gPSA2LAorICAgICAgICB9OyAvLyBlbnVt
IGNsYXNzIFBhcmFtZXRlck9wdGlvbmFsCisgICAgdm9pZCBldmVudChQcm90b2NvbDo6VHlwZURv
bWFpbjo6RW51bSBlbnVtUmVxdWlyZWQsIE9wdGlvbmFsPFByb3RvY29sOjpUeXBlRG9tYWluOjpF
bnVtPiYmIG9wdF9lbnVtT3B0aW9uYWwsIGNvbnN0IFN0cmluZyYgcGFyYW1ldGVyUmVxdWlyZWQs
IGNvbnN0IFN0cmluZyYgb3B0X3BhcmFtZXRlck9wdGlvbmFsKTsKIHByaXZhdGU6CiAgICAgRnJv
bnRlbmRSb3V0ZXImIG1fZnJvbnRlbmRSb3V0ZXI7CiB9OwpAQCAtMzc2LDE5ICszOTksMjMgQEAg
cHJpdmF0ZToKICNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgogCiAjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3
dGYvdGV4dC9DU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCi12b2lkIEV2ZW50
RG9tYWluRnJvbnRlbmREaXNwYXRjaGVyOjpldmVudFdpdGhFbnVtUGFyYW1ldGVyKFBhcmFtZXRl
ciBwYXJhbWV0ZXIpCit2b2lkIEV2ZW50RG9tYWluRnJvbnRlbmREaXNwYXRjaGVyOjpldmVudChQ
cm90b2NvbDo6VHlwZURvbWFpbjo6RW51bSBlbnVtUmVxdWlyZWQsIE9wdGlvbmFsPFByb3RvY29s
OjpUeXBlRG9tYWluOjpFbnVtPiYmIG9wdF9lbnVtT3B0aW9uYWwsIGNvbnN0IFN0cmluZyYgcGFy
YW1ldGVyUmVxdWlyZWQsIGNvbnN0IFN0cmluZyYgb3B0X3BhcmFtZXRlck9wdGlvbmFsKQogewot
ICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUo
KTsKLSAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJFdmVudERvbWFpbi5l
dmVudFdpdGhFbnVtUGFyYW1ldGVyIl9zKTsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBwYXJhbXNP
YmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIHBhcmFtc09iamVjdC0+c2V0U3Ry
aW5nKCJwYXJhbWV0ZXIiX3MsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRF
bnVtQ29uc3RhbnRWYWx1ZShwYXJhbWV0ZXIpKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0
KCJwYXJhbXMiX3MsIFdURk1vdmUocGFyYW1zT2JqZWN0KSk7CisgICAgYXV0byBwcm90b2NvbF9q
c29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgcHJvdG9jb2xfanNvbk1l
c3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiRXZlbnREb21haW4uZXZlbnQiX3MpOworICAg
IGF1dG8gcHJvdG9jb2xfcGFyYW1zT2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAg
ICBwcm90b2NvbF9wYXJhbXNPYmplY3QtPnNldFN0cmluZygiZW51bVJlcXVpcmVkIl9zLCBQcm90
b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKGVudW1SZXF1aXJlZCkpOwor
ICAgIGlmICghIW9wdF9lbnVtT3B0aW9uYWwpCisgICAgICAgIHByb3RvY29sX3BhcmFtc09iamVj
dC0+c2V0U3RyaW5nKCJlbnVtT3B0aW9uYWwiX3MsIFByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0
RW51bUNvbnN0YW50VmFsdWUoKm9wdF9lbnVtT3B0aW9uYWwpKTsKKyAgICBwcm90b2NvbF9wYXJh
bXNPYmplY3QtPnNldFN0cmluZygicGFyYW1ldGVyUmVxdWlyZWQiX3MsIHBhcmFtZXRlclJlcXVp
cmVkKTsKKyAgICBpZiAoISFvcHRfcGFyYW1ldGVyT3B0aW9uYWwpCisgICAgICAgIHByb3RvY29s
X3BhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJwYXJhbWV0ZXJPcHRpb25hbCJfcywgb3B0X3BhcmFt
ZXRlck9wdGlvbmFsKTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJh
bXMiX3MsIFdURk1vdmUocHJvdG9jb2xfcGFyYW1zT2JqZWN0KSk7CiAKLSAgICBtX2Zyb250ZW5k
Um91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOworICAgIG1fZnJv
bnRlbmRSb3V0ZXIuc2VuZEV2ZW50KHByb3RvY29sX2pzb25NZXNzYWdlLT50b0pTT05TdHJpbmco
KSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgpAQCAtNDI4LDcgKzQ1NSw5IEBAIHZv
aWQgRXZlbnREb21haW5Gcm9udGVuZERpc3BhdGNoZXI6OmV2ZW50V2l0aEVudW1QYXJhbWV0ZXIo
UGFyYW1ldGVyIHBhcmFtZXRlcikKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25z
Lmg+CisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwu
aD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3Rv
ciB7CiAKQEAgLTQ0MCw3ICs0NjksNyBAQCBuYW1lc3BhY2UgUHJvdG9jb2wgewogCiAvLyBGb3J3
YXJkIGRlY2xhcmF0aW9ucy4KIG5hbWVzcGFjZSBUeXBlRG9tYWluIHsKLWVudW0gY2xhc3MgVHlw
ZURvbWFpbkVudW07CitlbnVtIGNsYXNzIEVudW07CiB9IC8vIFR5cGVEb21haW4KIC8vIEVuZCBv
ZiBmb3J3YXJkIGRlY2xhcmF0aW9ucy4KIApAQCAtNDYwLDEyICs0ODksMTEgQEAgdGVtcGxhdGU8
dHlwZW5hbWUgVD4gU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKFQgZW51bVZhbHVlKQogCiBu
YW1lc3BhY2UgVHlwZURvbWFpbiB7CiAKLWVudW0gY2xhc3MgVHlwZURvbWFpbkVudW0geworZW51
bSBjbGFzcyBFbnVtIHsKICAgICBTaGFyZWQgPSAwLAotICAgIFJlZCA9IDEsCi0gICAgR3JlZW4g
PSAyLAotICAgIEJsdWUgPSAzLAotfTsgLy8gZW51bSBjbGFzcyBUeXBlRG9tYWluRW51bQorICAg
IDEgPSAxLAorICAgIDIgPSAyLAorfTsgLy8gZW51bSBjbGFzcyBFbnVtCiAKIH0gLy8gVHlwZURv
bWFpbgogCkBAIC00NzgsNyArNTA2LDcgQEAgT3B0aW9uYWw8UHJvdG9jb2xFbnVtVHlwZT4gcGFy
c2VFbnVtVmFsdWVGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYpOwogCiAvLyBFbnVtcyBpbiB0aGUg
J1R5cGVEb21haW4nIERvbWFpbgogdGVtcGxhdGU8PgotT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90
b2NvbDo6VHlwZURvbWFpbjo6VHlwZURvbWFpbkVudW0+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmlu
ZzxJbnNwZWN0b3I6OlByb3RvY29sOjpUeXBlRG9tYWluOjpUeXBlRG9tYWluRW51bT4oY29uc3Qg
U3RyaW5nJik7CitPcHRpb25hbDxQcm90b2NvbDo6VHlwZURvbWFpbjo6RW51bT4gcGFyc2VFbnVt
VmFsdWVGcm9tU3RyaW5nPFByb3RvY29sOjpUeXBlRG9tYWluOjpFbnVtPihjb25zdCBTdHJpbmcm
KTsKIAogfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKIApAQCAtNDkyLDcgKzUyMCw3IEBAIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsKIAogLy8gSGFzaCBkZWNsYXJh
dGlvbnMgaW4gdGhlICdUeXBlRG9tYWluJyBEb21haW4KIHRlbXBsYXRlPD4KLXN0cnVjdCBEZWZh
dWx0SGFzaDxJbnNwZWN0b3I6OlByb3RvY29sOjpUeXBlRG9tYWluOjpUeXBlRG9tYWluRW51bT4g
OiBJbnRIYXNoPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlR5cGVEb21haW46OlR5cGVEb21haW5FbnVt
PiB7IH07CitzdHJ1Y3QgRGVmYXVsdEhhc2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6VHlwZURvbWFp
bjo6RW51bT4gOiBJbnRIYXNoPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlR5cGVEb21haW46OkVudW0+
IHsgfTsKIAogfSAvLyBuYW1lc3BhY2UgV1RGCiAjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9i
amVjdHMuaApAQCAtNTMwLDggKzU1OCw3IEBAIHN0cnVjdCBEZWZhdWx0SGFzaDxJbnNwZWN0b3I6
OlByb3RvY29sOjpUeXBlRG9tYWluOjpUeXBlRG9tYWluRW51bT4gOiBJbnRIYXNoPEluCiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogCi0jaW5j
bHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2lu
Y2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC01
NDEsMTQgKzU2OCwxNiBAQCBuYW1lc3BhY2UgVGVzdEhlbHBlcnMgewogCiBzdGF0aWMgY29uc3Qg
Y2hhciogY29uc3QgZW51bV9jb25zdGFudF92YWx1ZXNbXSA9IHsKICAgICAic2hhcmVkIiwKLSAg
ICAicmVkIiwKKyAgICAiMSIsCisgICAgIjIiLAorICAgICJzaGFyZWRSZXF1aXJlZCIsCisgICAg
ImdyZXkiLAorICAgICJzaGFyZWRPcHRpb25hbCIsCiAgICAgImdyZWVuIiwKLSAgICAiYmx1ZSIs
CiAgICAgImJsYWNrIiwKKyAgICAicmVkIiwKICAgICAid2hpdGUiLAotICAgICJjeWFuIiwKLSAg
ICAibWFnZW50YSIsCi0gICAgInllbGxvdyIsCisgICAgImJsdWUiLAogfTsKIAogU3RyaW5nIGdl
dEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKSB7CkBAIC01NTgsMTcgKzU4NywxNiBAQCBTdHJp
bmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpIHsKIC8vIEVudW1zIGluIHRoZSAnVHlw
ZURvbWFpbicgRG9tYWluCiAKIHRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlR5cGVEb21haW46OlR5cGVEb21haW5FbnVtPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8
SW5zcGVjdG9yOjpQcm90b2NvbDo6VHlwZURvbWFpbjo6VHlwZURvbWFpbkVudW0+KGNvbnN0IFN0
cmluZyYgcHJvdG9jb2xTdHJpbmcpCitPcHRpb25hbDxQcm90b2NvbDo6VHlwZURvbWFpbjo6RW51
bT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPFByb3RvY29sOjpUeXBlRG9tYWluOjpFbnVtPihj
b25zdCBTdHJpbmcmIHByb3RvY29sU3RyaW5nKQogewogICAgIHN0YXRpYyBjb25zdCBzaXplX3Qg
Y29uc3RhbnRWYWx1ZXNbXSA9IHsKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29s
OjpUeXBlRG9tYWluOjpUeXBlRG9tYWluRW51bTo6U2hhcmVkLAotICAgICAgICAoc2l6ZV90KUlu
c3BlY3Rvcjo6UHJvdG9jb2w6OlR5cGVEb21haW46OlR5cGVEb21haW5FbnVtOjpSZWQsCi0gICAg
ICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6VHlwZURvbWFpbjo6VHlwZURvbWFpbkVu
dW06OkdyZWVuLAotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlR5cGVEb21h
aW46OlR5cGVEb21haW5FbnVtOjpCbHVlLAorICAgICAgICAoc2l6ZV90KVByb3RvY29sOjpUeXBl
RG9tYWluOjpFbnVtOjpTaGFyZWQsCisgICAgICAgIChzaXplX3QpUHJvdG9jb2w6OlR5cGVEb21h
aW46OkVudW06OjEsCisgICAgICAgIChzaXplX3QpUHJvdG9jb2w6OlR5cGVEb21haW46OkVudW06
OjIsCiAgICAgfTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDQ7ICsraSkKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IDM7ICsraSkKICAgICAgICAgaWYgKHByb3RvY29sU3RyaW5nID09
IGVudW1fY29uc3RhbnRfdmFsdWVzW2NvbnN0YW50VmFsdWVzW2ldXSkKLSAgICAgICAgICAgIHJl
dHVybiAoSW5zcGVjdG9yOjpQcm90b2NvbDo6VHlwZURvbWFpbjo6VHlwZURvbWFpbkVudW0pY29u
c3RhbnRWYWx1ZXNbaV07CisgICAgICAgICAgICByZXR1cm4gKFByb3RvY29sOjpUeXBlRG9tYWlu
OjpFbnVtKWNvbnN0YW50VmFsdWVzW2ldOwogCiAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0K
QEAgLTYyNSw3ICs2NTMsNyBAQCBjbGFzcyBPYmpDSW5zcGVjdG9yQ29tbWFuZERvbWFpbkJhY2tl
bmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEFsdGVybmF0ZUNvbW1hbgogICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIE9iakNJbnNwZWN0b3JDb21tYW5kRG9tYWlu
QmFja2VuZERpc3BhdGNoZXIoaWQ8VGVzdFByb3RvY29sQ29tbWFuZERvbWFpbkRvbWFpbkhhbmRs
ZXI+IGhhbmRsZXIpIHsgbV9kZWxlZ2F0ZSA9IGhhbmRsZXI7IH0KLSAgICB2b2lkIGNvbW1hbmRX
aXRoRW51bVJldHVyblZhbHVlKGxvbmcgcmVxdWVzdElkKSBmaW5hbDsKKyAgICB2b2lkIGNvbW1h
bmQobG9uZyBwcm90b2NvbF9jYWxsSWQsIGNvbnN0IFN0cmluZyYgZW51bVJlcXVpcmVkLCBjb25z
dCBTdHJpbmcmIG9wdF9lbnVtT3B0aW9uYWwsIGNvbnN0IFN0cmluZyYgcGFyYW1ldGVyUmVxdWly
ZWQsIGNvbnN0IFN0cmluZyYgb3B0X3BhcmFtZXRlck9wdGlvbmFsKSBmaW5hbDsKIHByaXZhdGU6
CiAgICAgUmV0YWluUHRyPGlkPFRlc3RQcm90b2NvbENvbW1hbmREb21haW5Eb21haW5IYW5kbGVy
Pj4gbV9kZWxlZ2F0ZTsKIH07CkBAIC02NzMsMjYgKzcwMSw0NyBAQCBwcml2YXRlOgogCiBuYW1l
c3BhY2UgSW5zcGVjdG9yIHsKIAotdm9pZCBPYmpDSW5zcGVjdG9yQ29tbWFuZERvbWFpbkJhY2tl
bmREaXNwYXRjaGVyOjpjb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZShsb25nIHJlcXVlc3RJZCkK
K3ZvaWQgT2JqQ0luc3BlY3RvckNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Y29tbWFu
ZChsb25nIHByb3RvY29sX2NhbGxJZCwgY29uc3QgU3RyaW5nJiBpbl9lbnVtUmVxdWlyZWQsIGNv
bnN0IFN0cmluZyYgaW5fb3B0X2VudW1PcHRpb25hbCwgY29uc3QgU3RyaW5nJiBpbl9wYXJhbWV0
ZXJSZXF1aXJlZCwgY29uc3QgU3RyaW5nJiBpbl9vcHRfcGFyYW1ldGVyT3B0aW9uYWwpCiB7Ci0g
ICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGNvbW1hbmRX
aXRoRW51bVJldHVyblZhbHVlV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7
Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVz
dElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInQ29tbWFuZERvbWFpbi5j
b21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZScgd2FzIG5vdCBmb3VuZCJfcyk7CisgICAgaWYgKCFb
bV9kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGNvbW1hbmRXaXRoRXJyb3JD
YWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6ZW51bVJlcXVpcmVkOmVudW1PcHRpb25hbDpwYXJhbWV0
ZXJSZXF1aXJlZDpwYXJhbWV0ZXJPcHRpb25hbDopXSkgeworICAgICAgICBiYWNrZW5kRGlzcGF0
Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHByb3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3Bh
dGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0NvbW1hbmREb21haW4uY29tbWFuZCcgd2FzIG5vdCBm
b3VuZCJfcyk7CiAgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3Jz
KCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZCBlcnJvckNhbGxiYWNrID0gXihO
U1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJv
dG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJy
b3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHBy
b3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CiAg
ICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgfTsK
IAotICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF4oVGVzdFByb3RvY29sQ29tbWFuZERvbWFpbkNv
bW1hbmRXaXRoRW51bVJldHVyblZhbHVlUmV0dXJuVmFsdWUgcmV0dXJuVmFsdWUpIHsKLSAgICAg
ICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0T2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUo
KTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoInJldHVyblZhbHVlIl9zLCB0b1By
b3RvY29sU3RyaW5nKHJldHVyblZhbHVlKSk7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCkt
PnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0T2JqZWN0KSwgZmFsc2UpOwor
ICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF4oVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW0gb3V0
X2VudW1SZXF1aXJlZCwgVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW0gKm91dF9vcHRfZW51bU9w
dGlvbmFsLCBUZXN0UHJvdG9jb2xDb21tYW5kRG9tYWluKGFub255bW91cykgb3V0X3JldHVyblJl
cXVpcmVkLCBUZXN0UHJvdG9jb2xDb21tYW5kRG9tYWluKGFub255bW91cykgKm91dF9vcHRfcmV0
dXJuT3B0aW9uYWwpIHsKKyAgICAgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046
Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJp
bmcoImVudW1SZXF1aXJlZCJfcywgdG9Qcm90b2NvbFN0cmluZyhvdXRfZW51bVJlcXVpcmVkKSk7
CisgICAgICAgIGlmICghIW91dF9vcHRfZW51bU9wdGlvbmFsKQorICAgICAgICAgICAgcHJvdG9j
b2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygiZW51bU9wdGlvbmFsIl9zLCB0b1Byb3RvY29sU3Ry
aW5nKCpvdXRfb3B0X2VudW1PcHRpb25hbCkpOworICAgICAgICBwcm90b2NvbF9qc29uTWVzc2Fn
ZS0+c2V0U3RyaW5nKCJyZXR1cm5SZXF1aXJlZCJfcywgdG9Qcm90b2NvbFN0cmluZyhvdXRfcmV0
dXJuUmVxdWlyZWQpKTsKKyAgICAgICAgaWYgKCEhb3V0X29wdF9yZXR1cm5PcHRpb25hbCkKKyAg
ICAgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoInJldHVybk9wdGlvbmFs
Il9zLCB0b1Byb3RvY29sU3RyaW5nKCpvdXRfb3B0X3JldHVybk9wdGlvbmFsKSk7CisgICAgICAg
IGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShwcm90b2NvbF9jYWxsSWQsIFdURk1v
dmUocHJvdG9jb2xfanNvbk1lc3NhZ2UpLCBmYWxzZSk7CiAgICAgfTsKIAotICAgIFttX2RlbGVn
YXRlIGNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxs
YmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsKKyAgICBPcHRpb25hbDxUZXN0
UHJvdG9jb2xUeXBlRG9tYWluRW51bT4gb19pbl9lbnVtUmVxdWlyZWQgPSBmcm9tUHJvdG9jb2xT
dHJpbmc8VGVzdFByb3RvY29sVHlwZURvbWFpbkVudW0+KGluX2VudW1SZXF1aXJlZCk7CisgICAg
aWYgKCFvX2luX2VudW1SZXF1aXJlZCkgeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5y
ZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCAiUGFy
YW1ldGVyICdlbnVtUmVxdWlyZWQnIG9mIG1ldGhvZCAnQ29tbWFuZERvbWFpbi5jb21tYW5kJyBj
YW5ub3QgYmUgcHJvY2Vzc2VkIl9zKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBPcHRp
b25hbDxUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bT4gb19pbl9vcHRfZW51bU9wdGlvbmFsOwor
ICAgIGlmICghIWluX29wdF9lbnVtT3B0aW9uYWwpCisgICAgICAgIG9faW5fb3B0X2VudW1PcHRp
b25hbCA9IGZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bT4oaW5f
b3B0X2VudW1PcHRpb25hbCk7CisgICAgT3B0aW9uYWw8VGVzdFByb3RvY29sQ29tbWFuZERvbWFp
bihhbm9ueW1vdXMpPiBvX2luX3BhcmFtZXRlclJlcXVpcmVkID0gZnJvbVByb3RvY29sU3RyaW5n
PFRlc3RQcm90b2NvbENvbW1hbmREb21haW4oYW5vbnltb3VzKT4oaW5fcGFyYW1ldGVyUmVxdWly
ZWQpOworICAgIGlmICghb19pbl9wYXJhbWV0ZXJSZXF1aXJlZCkgeworICAgICAgICBiYWNrZW5k
RGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpJbnZh
bGlkUGFyYW1zLCAiUGFyYW1ldGVyICdwYXJhbWV0ZXJSZXF1aXJlZCcgb2YgbWV0aG9kICdDb21t
YW5kRG9tYWluLmNvbW1hbmQnIGNhbm5vdCBiZSBwcm9jZXNzZWQiX3MpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIE9wdGlvbmFsPFRlc3RQcm90b2NvbENvbW1hbmREb21haW4oYW5vbnlt
b3VzKT4gb19pbl9vcHRfcGFyYW1ldGVyT3B0aW9uYWw7CisgICAgaWYgKCEhaW5fb3B0X3BhcmFt
ZXRlck9wdGlvbmFsKQorICAgICAgICBvX2luX29wdF9wYXJhbWV0ZXJPcHRpb25hbCA9IGZyb21Q
cm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xDb21tYW5kRG9tYWluKGFub255bW91cyk+KGluX29w
dF9wYXJhbWV0ZXJPcHRpb25hbCk7CisgICAgW21fZGVsZWdhdGUgY29tbWFuZFdpdGhFcnJvckNh
bGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjayBlbnVt
UmVxdWlyZWQ6b19pbl9lbnVtUmVxdWlyZWQudmFsdWUoKSBlbnVtT3B0aW9uYWw6KCEhaW5fb3B0
X2VudW1PcHRpb25hbCA/ICZvX2luX29wdF9lbnVtT3B0aW9uYWwudmFsdWUoKSA6IG5pbCkgcGFy
YW1ldGVyUmVxdWlyZWQ6b19pbl9wYXJhbWV0ZXJSZXF1aXJlZC52YWx1ZSgpIHBhcmFtZXRlck9w
dGlvbmFsOighIWluX29wdF9wYXJhbWV0ZXJPcHRpb25hbCA/ICZvX2luX29wdF9wYXJhbWV0ZXJP
cHRpb25hbC52YWx1ZSgpIDogbmlsKV07CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgpA
QCAtODg3LDE2ICs5MzYsMjEgQEAgdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKICAgICByZXR1
cm4gc2VsZjsKIH0KIAotLSAodm9pZClldmVudFdpdGhFbnVtUGFyYW1ldGVyV2l0aFBhcmFtZXRl
cjooVGVzdFByb3RvY29sRXZlbnREb21haW5FdmVudFdpdGhFbnVtUGFyYW1ldGVyUGFyYW1ldGVy
KXBhcmFtZXRlcgorLSAodm9pZClldmVudFdpdGhFbnVtUmVxdWlyZWQ6KFRlc3RQcm90b2NvbFR5
cGVEb21haW5FbnVtKWVudW1SZXF1aXJlZCBlbnVtT3B0aW9uYWw6KFRlc3RQcm90b2NvbFR5cGVE
b21haW5FbnVtICopZW51bU9wdGlvbmFsIHBhcmFtZXRlclJlcXVpcmVkOihUZXN0UHJvdG9jb2xF
dmVudERvbWFpbihhbm9ueW1vdXMpKXBhcmFtZXRlclJlcXVpcmVkIHBhcmFtZXRlck9wdGlvbmFs
OihUZXN0UHJvdG9jb2xFdmVudERvbWFpbihhbm9ueW1vdXMpICopcGFyYW1ldGVyT3B0aW9uYWwK
IHsKICAgICBjb25zdCBGcm9udGVuZFJvdXRlciYgcm91dGVyID0gX2NvbnRyb2xsZXItPmZyb250
ZW5kUm91dGVyKCk7CiAKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046
Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9z
LCAiRXZlbnREb21haW4uZXZlbnRXaXRoRW51bVBhcmFtZXRlciJfcyk7Ci0gICAgUmVmPEpTT046
Ok9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBwYXJh
bXNPYmplY3QtPnNldFN0cmluZygicGFyYW1ldGVyIl9zLCB0b1Byb3RvY29sU3RyaW5nKHBhcmFt
ZXRlcikpOwotICAgIGpzb25NZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyJfcywgV1RGTW92ZShw
YXJhbXNPYmplY3QpKTsKLSAgICByb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05T
dHJpbmcoKSk7CisgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6
Y3JlYXRlKCk7CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9z
LCAiRXZlbnREb21haW4uZXZlbnQiX3MpOworICAgIGF1dG8gcHJvdG9jb2xfcGFyYW1zT2JqZWN0
ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBwcm90b2NvbF9wYXJhbXNPYmplY3QtPnNl
dFN0cmluZygiZW51bVJlcXVpcmVkIl9zLCB0b1Byb3RvY29sU3RyaW5nKGVudW1SZXF1aXJlZCkp
OworICAgIGlmIChlbnVtT3B0aW9uYWwpCisgICAgICAgIHByb3RvY29sX3BhcmFtc09iamVjdC0+
c2V0U3RyaW5nKCJlbnVtT3B0aW9uYWwiX3MsIHRvUHJvdG9jb2xTdHJpbmcoKCplbnVtT3B0aW9u
YWwpKSk7CisgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInBhcmFtZXRlclJl
cXVpcmVkIl9zLCB0b1Byb3RvY29sU3RyaW5nKHBhcmFtZXRlclJlcXVpcmVkKSk7CisgICAgaWYg
KHBhcmFtZXRlck9wdGlvbmFsKQorICAgICAgICBwcm90b2NvbF9wYXJhbXNPYmplY3QtPnNldFN0
cmluZygicGFyYW1ldGVyT3B0aW9uYWwiX3MsIHRvUHJvdG9jb2xTdHJpbmcoKCpwYXJhbWV0ZXJP
cHRpb25hbCkpKTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMi
X3MsIFdURk1vdmUocHJvdG9jb2xfcGFyYW1zT2JqZWN0KSk7CisgICAgcm91dGVyLnNlbmRFdmVu
dChwcm90b2NvbF9qc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwogfQogCiBAZW5kCkBAIC05
NDMsMjEgKzk5NywyMCBAQCB1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwogCiB0eXBlZGVmIE5T
X0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bSkgewogICAgIFRlc3RQ
cm90b2NvbFR5cGVEb21haW5FbnVtU2hhcmVkLAotICAgIFRlc3RQcm90b2NvbFR5cGVEb21haW5F
bnVtUmVkLAotICAgIFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtR3JlZW4sCi0gICAgVGVzdFBy
b3RvY29sVHlwZURvbWFpbkVudW1CbHVlLAorICAgIFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVt
MSwKKyAgICBUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bTIsCiB9OwogCiAKIAogQHByb3RvY29s
IFRlc3RQcm90b2NvbENvbW1hbmREb21haW5Eb21haW5IYW5kbGVyIDxOU09iamVjdD4KIEBvcHRp
b25hbAotLSAodm9pZCljb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZVdpdGhFcnJvckNhbGxiYWNr
Oih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6
KHZvaWQoXikoVGVzdFByb3RvY29sQ29tbWFuZERvbWFpbkNvbW1hbmRXaXRoRW51bVJldHVyblZh
bHVlUmV0dXJuVmFsdWUgcmV0dXJuVmFsdWUpKXN1Y2Nlc3NDYWxsYmFjazsKKy0gKHZvaWQpY29t
bWFuZFdpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxs
YmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikoVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW0g
ZW51bVJlcXVpcmVkLCBUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bSAqZW51bU9wdGlvbmFsLCBU
ZXN0UHJvdG9jb2xDb21tYW5kRG9tYWluKGFub255bW91cykgcmV0dXJuUmVxdWlyZWQsIFRlc3RQ
cm90b2NvbENvbW1hbmREb21haW4oYW5vbnltb3VzKSAqcmV0dXJuT3B0aW9uYWwpKXN1Y2Nlc3ND
YWxsYmFjayBlbnVtUmVxdWlyZWQ6KFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtKWVudW1SZXF1
aXJlZCBlbnVtT3B0aW9uYWw6KFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtICopZW51bU9wdGlv
bmFsIHBhcmFtZXRlclJlcXVpcmVkOihUZXN0UHJvdG9jb2xDb21tYW5kRG9tYWluKGFub255bW91
cykpcGFyYW1ldGVyUmVxdWlyZWQgcGFyYW1ldGVyT3B0aW9uYWw6KFRlc3RQcm90b2NvbENvbW1h
bmREb21haW4oYW5vbnltb3VzKSAqKXBhcmFtZXRlck9wdGlvbmFsOwogQGVuZAogCiBfX2F0dHJp
YnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKIEBpbnRlcmZhY2UgVGVzdFByb3RvY29s
RXZlbnREb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgOiBOU09iamVjdAotLSAodm9pZClldmVu
dFdpdGhFbnVtUGFyYW1ldGVyV2l0aFBhcmFtZXRlcjooVGVzdFByb3RvY29sRXZlbnREb21haW5F
dmVudFdpdGhFbnVtUGFyYW1ldGVyUGFyYW1ldGVyKXBhcmFtZXRlcjsKKy0gKHZvaWQpZXZlbnRX
aXRoRW51bVJlcXVpcmVkOihUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bSllbnVtUmVxdWlyZWQg
ZW51bU9wdGlvbmFsOihUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bSAqKWVudW1PcHRpb25hbCBw
YXJhbWV0ZXJSZXF1aXJlZDooVGVzdFByb3RvY29sRXZlbnREb21haW4oYW5vbnltb3VzKSlwYXJh
bWV0ZXJSZXF1aXJlZCBwYXJhbWV0ZXJPcHRpb25hbDooVGVzdFByb3RvY29sRXZlbnREb21haW4o
YW5vbnltb3VzKSAqKXBhcmFtZXRlck9wdGlvbmFsOwogQGVuZAogCiAKQEAgLTEwNTAsMTIgKzEx
MDMsMTAgQEAgaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbFR5cGVE
b21haW5FbnVtIHZhbHVlKQogICAgIHN3aXRjaCh2YWx1ZSkgewogICAgIGNhc2UgVGVzdFByb3Rv
Y29sVHlwZURvbWFpbkVudW1TaGFyZWQ6CiAgICAgICAgIHJldHVybiAic2hhcmVkIl9zOwotICAg
IGNhc2UgVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW1SZWQ6Ci0gICAgICAgIHJldHVybiAicmVk
Il9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW1HcmVlbjoKLSAgICAgICAg
cmV0dXJuICJncmVlbiJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtQmx1
ZToKLSAgICAgICAgcmV0dXJuICJibHVlIl9zOworICAgIGNhc2UgVGVzdFByb3RvY29sVHlwZURv
bWFpbkVudW0xOgorICAgICAgICByZXR1cm4gIjEiX3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xU
eXBlRG9tYWluRW51bTI6CisgICAgICAgIHJldHVybiAiMiJfczsKICAgICB9CiB9CiAKQEAgLTEw
NjQsMTIgKzExMTUsMTAgQEAgaW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbFR5cGVEb21haW5F
bnVtPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWwKIHsKICAgICBpZiAodmFs
dWUgPT0gInNoYXJlZCIpCiAgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51
bVNoYXJlZDsKLSAgICBpZiAodmFsdWUgPT0gInJlZCIpCi0gICAgICAgIHJldHVybiBUZXN0UHJv
dG9jb2xUeXBlRG9tYWluRW51bVJlZDsKLSAgICBpZiAodmFsdWUgPT0gImdyZWVuIikKLSAgICAg
ICAgcmV0dXJuIFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtR3JlZW47Ci0gICAgaWYgKHZhbHVl
ID09ICJibHVlIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtQmx1
ZTsKKyAgICBpZiAodmFsdWUgPT0gIjEiKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sVHlw
ZURvbWFpbkVudW0xOworICAgIGlmICh2YWx1ZSA9PSAiMiIpCisgICAgICAgIHJldHVybiBUZXN0
UHJvdG9jb2xUeXBlRG9tYWluRW51bTI7CiAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KIApA
QCAtMTExNywxNyArMTE2NiwxNyBAQCB1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwogCiBAaW50
ZXJmYWNlIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoVHlwZURvbWFpbkRvbWFpbikKIAot
KyAodm9pZClfcGFyc2VUeXBlRG9tYWluRW51bTooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBh
eWxvYWQ6KGlkKXBheWxvYWQ7CisrICh2b2lkKV9wYXJzZUVudW06KE5TTnVtYmVyICoqKW91dFZh
bHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwogCiBAZW5kCiAKIEBpbXBsZW1lbnRhdGlvbiBU
ZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKFR5cGVEb21haW5Eb21haW4pCiAKLSsgKHZvaWQp
X3BhcnNlVHlwZURvbWFpbkVudW06KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihp
ZClwYXlsb2FkCisrICh2b2lkKV9wYXJzZUVudW06KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21Q
YXlsb2FkOihpZClwYXlsb2FkCiB7CiAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShw
YXlsb2FkLCBbTlNTdHJpbmcgY2xhc3NdKTsKICAgICBPcHRpb25hbDxUZXN0UHJvdG9jb2xUeXBl
RG9tYWluRW51bT4gcmVzdWx0ID0gSW5zcGVjdG9yOjpmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFBy
b3RvY29sVHlwZURvbWFpbkVudW0+KHBheWxvYWQpOwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1Jf
QkFEX0VOVU1fVkFMVUUocmVzdWx0LCBAIlR5cGVEb21haW5FbnVtIik7CisgICAgVEhST1dfRVhD
RVBUSU9OX0ZPUl9CQURfRU5VTV9WQUxVRShyZXN1bHQsIEAiRW51bSIpOwogICAgICpvdXRWYWx1
ZSA9IEAocmVzdWx0LnZhbHVlKCkpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZXZlbnQtdGFyZ2V0VHlwZS1t
YXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZXZlbnQtdGFyZ2V0VHlw
ZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbi1yZXN1bHQKaW5kZXggZTJlZDlm
ODg5NGNlNzc2YjI3MmQ2MTEzZTUzNmNhYTc0NmViY2I4NS4uYmU5NGIzNTk0MDAzMmIzZTlhMzM2
ZDU0MTM0NDc3Yjk2NWNkM2E1NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2V2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmct
ZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24tcmVzdWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9ldmVudC10YXJnZXRUeXBlLW1h
dGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uLXJlc3VsdApAQCAtNzAsNyArNzAsNyBA
QCBJbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJEb21haW4iLCBbInBhZ2UiXSk7CiAK
ICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIAotI2luY2x1ZGUg
IlRlc3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgog
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CiAj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KIApAQCAt
ODgsNyArODgsNyBAQCBwcml2YXRlOgogY2xhc3MgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3Bh
dGNoZXIgOiBwdWJsaWMgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewogcHVibGljOgogICAg
IHZpcnR1YWwgfkFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyKCkgeyB9Ci0gICAgdmly
dHVhbCB2b2lkIENvbW1hbmQobG9uZyBjYWxsSWQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgQ29t
bWFuZChsb25nIHByb3RvY29sX2NhbGxJZCkgPSAwOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCkBAIC0xMzAsMTEgKzEzMCwxNCBAQCBwdWJsaWM6CiAKICNpbmNsdWRlICJUZXN0UHJv
dG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx0dXBsZT4KKyNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQu
aD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3Ry
aW5nOworCiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIGNs
YXNzIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyOwpAQCAtMTQyLDcgKzE0NSw3IEBA
IGNsYXNzIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyOwogCiBjbGFzcyBEb21haW5C
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewogcHVibGljOgotICAgIHZpcnR1YWwgdm9pZCBDb21t
YW5kKEVycm9yU3RyaW5nJikgPSAwOworICAgIHZpcnR1YWwgUHJvdG9jb2w6OkVycm9yU3RyaW5n
T3I8dm9pZD4gQ29tbWFuZCgpID0gMDsKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIH5Eb21haW5C
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKTsKIH07CkBAIC0xNTAsOSArMTUzLDkgQEAgcHJvdGVj
dGVkOgogY2xhc3MgRG9tYWluQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgU3VwcGxl
bWVudGFsQmFja2VuZERpc3BhdGNoZXIgewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8RG9tYWlu
QmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYsIERvbWFpbkJhY2tl
bmREaXNwYXRjaGVySGFuZGxlciopOwotICAgIHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQs
IGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpIGZpbmFs
OworICAgIHZvaWQgZGlzcGF0Y2gobG9uZyBwcm90b2NvbF9jYWxsSWQsIGNvbnN0IFN0cmluZyYg
cHJvdG9jb2xfbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX21lc3NhZ2UpIGZp
bmFsOwogcHJpdmF0ZToKLSAgICB2b2lkIENvbW1hbmQobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxK
U09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7CisgICAgdm9pZCBDb21tYW5kKGxvbmcgcHJvdG9j
bF9jYWxsSWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfcGFyYW1ldGVycyk7CiAj
aWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiBwdWJsaWM6CiAgICAg
dm9pZCBzZXRBbHRlcm5hdGVEaXNwYXRjaGVyKEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRj
aGVyKiBhbHRlcm5hdGVEaXNwYXRjaGVyKSB7IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IGFsdGVy
bmF0ZURpc3BhdGNoZXI7IH0KQEAgLTIwMSw5ICsyMDQsNyBAQCBwcml2YXRlOgogI2luY2x1ZGUg
IlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0lu
c3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KICNp
bmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5n
Lmg+CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKICNpbmNs
dWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCkBAIC0yMjUsMzggKzIyNiwz
OCBAQCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6RG9tYWluQmFja2VuZERpc3BhdGNoZXIoQmFj
a2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYQogICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJl
Z2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbigiRG9tYWluIl9zLCB0aGlzKTsKIH0KIAotdm9pZCBE
b21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0
cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpCit2b2lkIERvbWFpbkJh
Y2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHByb3RvY29sX2NhbGxJZCwgY29uc3QgU3Ry
aW5nJiBwcm90b2NvbF9tZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfbWVzc2Fn
ZSkKIHsKICAgICBSZWY8RG9tYWluQmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOwog
Ci0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVyczsKLSAgICBtZXNzYWdlLT5nZXRP
YmplY3QoInBhcmFtcyJfcywgcGFyYW1ldGVycyk7CisgICAgYXV0byBwcm90b2NvbF9wYXJhbWV0
ZXJzID0gcHJvdG9jb2xfbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3MpOwogCi0gICAgaWYg
KG1ldGhvZCA9PSAiQ29tbWFuZCIpIHsKLSAgICAgICAgQ29tbWFuZChyZXF1ZXN0SWQsIFdURk1v
dmUocGFyYW1ldGVycykpOworICAgIGlmIChwcm90b2NvbF9tZXRob2QgPT0gIkNvbW1hbmQiKSB7
CisgICAgICAgIENvbW1hbmQocHJvdG9jb2xfY2FsbElkLCBXVEZNb3ZlKHByb3RvY29sX3BhcmFt
ZXRlcnMpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1fYmFja2VuZERpc3BhdGNo
ZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5k
LCAiJ0RvbWFpbi4iICsgbWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOworICAgIG1fYmFja2Vu
ZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhv
ZE5vdEZvdW5kLCAiJ0RvbWFpbi4iICsgcHJvdG9jb2xfbWV0aG9kICsgIicgd2FzIG5vdCBmb3Vu
ZCIpOwogfQogCi12b2lkIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpDb21tYW5kKGxvbmcgcmVx
dWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQordm9pZCBEb21haW5CYWNrZW5kRGlzcGF0
Y2hlcjo6Q29tbWFuZChsb25nIHByb3RvY29sX2NhbGxJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4m
JikKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKICAgICBp
ZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hl
ci0+Q29tbWFuZChyZXF1ZXN0SWQpOworICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPkNv
bW1hbmQocHJvdG9jb2xfY2FsbElkKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZiAv
LyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIAotICAgIEVycm9yU3Ry
aW5nIGVycm9yOwotICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6
Y3JlYXRlKCk7Ci0gICAgbV9hZ2VudC0+Q29tbWFuZChlcnJvcik7CisgICAgYXV0byByZXN1bHQg
PSBtX2FnZW50LT5Db21tYW5kKCk7CisgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAgICAgQVNTRVJU
KCFyZXN1bHQuZXJyb3IoKS5pc0VtcHR5KCkpOworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVy
LT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgcmVz
dWx0LmVycm9yKCkpOworICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgaWYgKCFlcnJvci5s
ZW5ndGgoKSkKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVl
c3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tl
bmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2
ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOworICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2Ug
PSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRS
ZXNwb25zZShwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJvdG9jb2xfanNvbk1lc3NhZ2UpLCBm
YWxzZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgpAQCAtMjk3LDYgKzI5OCw3IEBA
IHZvaWQgRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkNvbW1hbmQobG9uZyByZXF1ZXN0SWQsIFJl
ZlB0cjxKU09OOjpPYmplY3Q+JiYpCiAKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgi
CiAjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4K
ICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7
CkBAIC0zNDksMTYgKzM1MSwxNSBAQCBwcml2YXRlOgogI2luY2x1ZGUgIlRlc3RGcm9udGVuZERp
c3BhdGNoZXJzLmgiCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVu
ZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogbmFtZXNwYWNlIElu
c3BlY3RvciB7CiAKIHZvaWQgRG9tYWluRnJvbnRlbmREaXNwYXRjaGVyOjpFdmVudCgpCiB7Ci0g
ICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgp
OwotICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRvbWFpbi5FdmVudCJf
cyk7CisgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRl
KCk7CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiRG9t
YWluLkV2ZW50Il9zKTsKIAotICAgIG1fZnJvbnRlbmRSb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNz
YWdlLT50b0pTT05TdHJpbmcoKSk7CisgICAgbV9mcm9udGVuZFJvdXRlci5zZW5kRXZlbnQocHJv
dG9jb2xfanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCkBAIC0zOTgsNyArMzk5LDkgQEAgdm9pZCBEb21haW5Gcm9udGVuZERpc3BhdGNo
ZXI6OkV2ZW50KCkKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yUHJvdG9jb2xUeXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5j
bHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKQEAg
LTQ1Miw4ICs0NTUsNyBAQCBuYW1lc3BhY2UgUHJvdG9jb2wgewogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKIAotI2luY2x1ZGUgPHd0Zi9PcHRp
b25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvQXNz
ZXJ0aW9ucy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtNTA5LDcgKzUxMSw3IEBA
IGNsYXNzIE9iakNJbnNwZWN0b3JEb21haW5CYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1Ymxp
YyBBbHRlcm5hdGVEb21haW5CYWNrZW5kCiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBw
dWJsaWM6CiAgICAgT2JqQ0luc3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyKGlkPFRlc3RQ
cm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+IGhhbmRsZXIpIHsgbV9kZWxlZ2F0ZSA9IGhhbmRs
ZXI7IH0KLSAgICB2b2lkIENvbW1hbmQobG9uZyByZXF1ZXN0SWQpIGZpbmFsOworICAgIHZvaWQg
Q29tbWFuZChsb25nIHByb3RvY29sX2NhbGxJZCkgZmluYWw7CiBwcml2YXRlOgogICAgIFJldGFp
blB0cjxpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPj4gbV9kZWxlZ2F0ZTsKIH07
CkBAIC01NTcsMjEgKzU1OSwyMiBAQCBwcml2YXRlOgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsK
IAotdm9pZCBPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkNvbW1hbmQobG9u
ZyByZXF1ZXN0SWQpCit2b2lkIE9iakNJbnNwZWN0b3JEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6
Q29tbWFuZChsb25nIHByb3RvY29sX2NhbGxJZCkKIHsKICAgICBpZiAoIVttX2RlbGVnYXRlIHJl
c3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoQ29tbWFuZFdpdGhFcnJvckNhbGxiYWNrOnN1Y2Nl
c3NDYWxsYmFjazopXSkgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90
b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAi
J0RvbWFpbi5Db21tYW5kJyB3YXMgbm90IGZvdW5kIl9zKTsKKyAgICAgICAgYmFja2VuZERpc3Bh
dGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxsSWQsIEJhY2tlbmREaXNw
YXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEb21haW4uQ29tbWFuZCcgd2FzIG5vdCBmb3VuZCJf
cyk7CiAgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmlu
ZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xF
cnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwor
ICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHByb3RvY29s
X2NhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CiAgICAgICAg
IGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgfTsKIAogICAg
IGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF57Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNl
bmRSZXNwb25zZShyZXF1ZXN0SWQsIEpTT046Ok9iamVjdDo6Y3JlYXRlKCksIGZhbHNlKTsKKyAg
ICAgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7
CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShwcm90b2NvbF9jYWxs
SWQsIFdURk1vdmUocHJvdG9jb2xfanNvbk1lc3NhZ2UpLCBmYWxzZSk7CiAgICAgfTsKIAogICAg
IFttX2RlbGVnYXRlIENvbW1hbmRXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nl
c3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOwpAQCAtNzczLDkgKzc3Niw5IEBAIHVzaW5nIG5h
bWVzcGFjZSBJbnNwZWN0b3I7CiB7CiAgICAgY29uc3QgRnJvbnRlbmRSb3V0ZXImIHJvdXRlciA9
IF9jb250cm9sbGVyLT5mcm9udGVuZFJvdXRlcigpOwogCi0gICAgUmVmPEpTT046Ok9iamVjdD4g
anNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIGpzb25NZXNzYWdlLT5z
ZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRvbWFpbi5FdmVudCJfcyk7Ci0gICAgcm91dGVyLnNlbmRF
dmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOworICAgIGF1dG8gcHJvdG9jb2xfanNv
bk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIHByb3RvY29sX2pzb25NZXNz
YWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRvbWFpbi5FdmVudCJfcyk7CisgICAgcm91dGVy
LnNlbmRFdmVudChwcm90b2NvbF9qc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwogfQogCiBA
ZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZXhwZWN0ZWQvZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uLXJlc3Vs
dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3Rl
ZC9ldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0CmluZGV4IDkwZTE0
ZThjN2JiNGYwNTE1MTNjYmQ3YzNjNmRjN2I5NmZjYzFhNzQuLjg0N2I0OTNmNzFjNTdlNDI3M2Q4
NDk2MmJhZTlmNmM5MjBmZGM5ZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9ldmVudHMtd2l0aC1vcHRpb25hbC1wYXJh
bWV0ZXJzLmpzb24tcmVzdWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9leHBlY3RlZC9ldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpz
b24tcmVzdWx0CkBAIC03MCw3ICs3MCw3IEBAIEluc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21h
aW4oIkRhdGFiYXNlIiwgbnVsbCk7CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9E
SVNQQVRDSEVSUykKIAotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVkZSAi
VGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
RnJvbnRlbmRSb3V0ZXIuaD4KIApAQCAtMTI2LDExICsxMjYsMTQgQEAgcHJpdmF0ZToKIAogI2lu
Y2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9J
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHR1cGxlPgorI2luY2x1ZGUg
PHd0Zi9FeHBlY3RlZC5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAotdHlwZWRlZiBT
dHJpbmcgRXJyb3JTdHJpbmc7CisKIAogCiAKQEAgLTE3MSw5ICsxNzQsNyBAQCB0eXBlZGVmIFN0
cmluZyBFcnJvclN0cmluZzsKICNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCiAK
ICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2lu
Y2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+
Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9B
TFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAjaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNw
YXRjaGVycy5oIgpAQCAtMjIxLDYgKzIyMiw3IEBAIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCiAj
aW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVz
Lmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewpAQCAtMjMxLDggKzIzMyw4IEBAIGNsYXNz
IERhdGFiYXNlRnJvbnRlbmREaXNwYXRjaGVyIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKIHB1YmxpYzoKICAgICBEYXRhYmFzZUZyb250ZW5kRGlzcGF0Y2hlcihGcm9udGVuZFJvdXRl
ciYgZnJvbnRlbmRSb3V0ZXIpIDogbV9mcm9udGVuZFJvdXRlcihmcm9udGVuZFJvdXRlcikgeyB9
Ci0gICAgdm9pZCBkaWRFeGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJzKFJlZlB0cjxKU09OOjpBcnJh
eU9mPFN0cmluZz4+IGNvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcqIG5vdGVzLCBjb25zdCBkb3Vi
bGUqIHRpbWVzdGFtcCwgUmVmUHRyPEpTT046Ok9iamVjdD4gdmFsdWVzLCBSZWZQdHI8SlNPTjo6
VmFsdWU+IHBheWxvYWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJy
b3I+IHNxbEVycm9yLCBjb25zdCBTdHJpbmcqIHNjcmVlbkNvbG9yLCBSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4gYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBT
dHJpbmcqIHByaW50Q29sb3IpOwotICAgIHZvaWQgZGlkRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0
ZXJzKFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+IGNvbHVtbk5hbWVzLCBjb25zdCBTdHJp
bmcmIG5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiB2YWx1ZXMs
IFJlZlB0cjxKU09OOjpWYWx1ZT4gcGF5bG9hZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRhdGFiYXNlOjpFcnJvcj4gc3FsRXJyb3IsIGNvbnN0IFN0cmluZyYgc2NyZWVuQ29sb3IsIFJl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiBhbHRlcm5hdGVD
b2xvcnMsIGNvbnN0IFN0cmluZyYgcHJpbnRDb2xvcik7CisgICAgdm9pZCBkaWRFeGVjdXRlT3B0
aW9uYWxQYXJhbWV0ZXJzKFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+JiYgb3B0X2NvbHVt
bk5hbWVzLCBjb25zdCBTdHJpbmcmIG9wdF9ub3RlcywgT3B0aW9uYWw8ZG91YmxlPiYmIG9wdF90
aW1lc3RhbXAsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgb3B0X3ZhbHVlcywgUmVmUHRyPEpTT046
OlZhbHVlPiYmIG9wdF9wYXlsb2FkLCBSZWZQdHI8UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4m
JiBvcHRfc3FsRXJyb3IsIGNvbnN0IFN0cmluZyYgb3B0X3NjcmVlbkNvbG9yLCBSZWZQdHI8UHJv
dG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+JiYgb3B0X2FsdGVybmF0ZUNvbG9ycywgY29uc3Qg
U3RyaW5nJiBvcHRfcHJpbnRDb2xvcik7CisgICAgdm9pZCBkaWRFeGVjdXRlTm9PcHRpb25hbFBh
cmFtZXRlcnMoUmVmPEpTT046OkFycmF5T2Y8U3RyaW5nPj4mJiBjb2x1bW5OYW1lcywgY29uc3Qg
U3RyaW5nJiBub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgUmVmPEpTT046Ok9iamVjdD4mJiB2YWx1
ZXMsIFJlZjxKU09OOjpWYWx1ZT4mJiBwYXlsb2FkLCBSZWY8UHJvdG9jb2w6OkRhdGFiYXNlOjpF
cnJvcj4mJiBzcWxFcnJvciwgY29uc3QgU3RyaW5nJiBzY3JlZW5Db2xvciwgUmVmPFByb3RvY29s
OjpEYXRhYmFzZTo6Q29sb3JMaXN0PiYmIGFsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nJiBw
cmludENvbG9yKTsKIHByaXZhdGU6CiAgICAgRnJvbnRlbmRSb3V0ZXImIG1fZnJvbnRlbmRSb3V0
ZXI7CiB9OwpAQCAtMjc0LDU1ICsyNzYsNTQgQEAgcHJpdmF0ZToKICNpbmNsdWRlICJUZXN0RnJv
bnRlbmREaXNwYXRjaGVycy5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
RnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKIG5hbWVz
cGFjZSBJbnNwZWN0b3IgewogCi12b2lkIERhdGFiYXNlRnJvbnRlbmREaXNwYXRjaGVyOjpkaWRF
eGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJzKFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+IGNv
bHVtbk5hbWVzLCBjb25zdCBTdHJpbmcqIG5vdGVzLCBjb25zdCBkb3VibGUqIHRpbWVzdGFtcCwg
UmVmUHRyPEpTT046Ok9iamVjdD4gdmFsdWVzLCBSZWZQdHI8SlNPTjo6VmFsdWU+IHBheWxvYWQs
IFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IHNxbEVycm9yLCBj
b25zdCBTdHJpbmcqIHNjcmVlbkNvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0
YWJhc2U6OkNvbG9yTGlzdD4gYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcqIHByaW50Q29s
b3IpCit2b2lkIERhdGFiYXNlRnJvbnRlbmREaXNwYXRjaGVyOjpkaWRFeGVjdXRlT3B0aW9uYWxQ
YXJhbWV0ZXJzKFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+JiYgb3B0X2NvbHVtbk5hbWVz
LCBjb25zdCBTdHJpbmcmIG9wdF9ub3RlcywgT3B0aW9uYWw8ZG91YmxlPiYmIG9wdF90aW1lc3Rh
bXAsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgb3B0X3ZhbHVlcywgUmVmUHRyPEpTT046OlZhbHVl
PiYmIG9wdF9wYXlsb2FkLCBSZWZQdHI8UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4mJiBvcHRf
c3FsRXJyb3IsIGNvbnN0IFN0cmluZyYgb3B0X3NjcmVlbkNvbG9yLCBSZWZQdHI8UHJvdG9jb2w6
OkRhdGFiYXNlOjpDb2xvckxpc3Q+JiYgb3B0X2FsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5n
JiBvcHRfcHJpbnRDb2xvcikKIHsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9
IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0
aG9kIl9zLCAiRGF0YWJhc2UuZGlkRXhlY3V0ZU9wdGlvbmFsUGFyYW1ldGVycyJfcyk7Ci0gICAg
UmVmPEpTT046Ok9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsK
LSAgICBpZiAoY29sdW1uTmFtZXMpCi0gICAgICAgIHBhcmFtc09iamVjdC0+c2V0QXJyYXkoImNv
bHVtbk5hbWVzIl9zLCBjb2x1bW5OYW1lcyk7Ci0gICAgaWYgKG5vdGVzKQotICAgICAgICBwYXJh
bXNPYmplY3QtPnNldFN0cmluZygibm90ZXMiX3MsICpub3Rlcyk7Ci0gICAgaWYgKHRpbWVzdGFt
cCkKLSAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywgKnRpbWVz
dGFtcCk7Ci0gICAgaWYgKHZhbHVlcykKLSAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRPYmplY3Qo
InZhbHVlcyJfcywgdmFsdWVzKTsKLSAgICBpZiAocGF5bG9hZCkKLSAgICAgICAgcGFyYW1zT2Jq
ZWN0LT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgKnBheWxvYWQpOwotICAgIGlmIChzcWxFcnJvcikK
LSAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBzcWxFcnJvcik7
Ci0gICAgaWYgKHNjcmVlbkNvbG9yKQotICAgICAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygi
c2NyZWVuQ29sb3IiX3MsICpzY3JlZW5Db2xvcik7Ci0gICAgaWYgKGFsdGVybmF0ZUNvbG9ycykK
LSAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCBhbHRl
cm5hdGVDb2xvcnMpOwotICAgIGlmIChwcmludENvbG9yKQotICAgICAgICBwYXJhbXNPYmplY3Qt
PnNldFN0cmluZygicHJpbnRDb2xvciJfcywgKnByaW50Q29sb3IpOwotICAgIGpzb25NZXNzYWdl
LT5zZXRPYmplY3QoInBhcmFtcyJfcywgV1RGTW92ZShwYXJhbXNPYmplY3QpKTsKKyAgICBhdXRv
IHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBwcm90
b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJEYXRhYmFzZS5kaWRFeGVj
dXRlT3B0aW9uYWxQYXJhbWV0ZXJzIl9zKTsKKyAgICBhdXRvIHByb3RvY29sX3BhcmFtc09iamVj
dCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgaWYgKCEhb3B0X2NvbHVtbk5hbWVzKQor
ICAgICAgICBwcm90b2NvbF9wYXJhbXNPYmplY3QtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywg
b3B0X2NvbHVtbk5hbWVzLnJlbGVhc2VOb25OdWxsKCkpOworICAgIGlmICghIW9wdF9ub3RlcykK
KyAgICAgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCBvcHRf
bm90ZXMpOworICAgIGlmICghIW9wdF90aW1lc3RhbXApCisgICAgICAgIHByb3RvY29sX3BhcmFt
c09iamVjdC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsICpvcHRfdGltZXN0YW1wKTsKKyAgICBp
ZiAoISFvcHRfdmFsdWVzKQorICAgICAgICBwcm90b2NvbF9wYXJhbXNPYmplY3QtPnNldE9iamVj
dCgidmFsdWVzIl9zLCBvcHRfdmFsdWVzLnJlbGVhc2VOb25OdWxsKCkpOworICAgIGlmICghIW9w
dF9wYXlsb2FkKQorICAgICAgICBwcm90b2NvbF9wYXJhbXNPYmplY3QtPnNldFZhbHVlKCJwYXls
b2FkIl9zLCBvcHRfcGF5bG9hZC5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICBpZiAoISFvcHRfc3Fs
RXJyb3IpCisgICAgICAgIHByb3RvY29sX3BhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJzcWxFcnJv
ciJfcywgb3B0X3NxbEVycm9yLnJlbGVhc2VOb25OdWxsKCkpOworICAgIGlmICghIW9wdF9zY3Jl
ZW5Db2xvcikKKyAgICAgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInNjcmVl
bkNvbG9yIl9zLCBvcHRfc2NyZWVuQ29sb3IpOworICAgIGlmICghIW9wdF9hbHRlcm5hdGVDb2xv
cnMpCisgICAgICAgIHByb3RvY29sX3BhcmFtc09iamVjdC0+c2V0QXJyYXkoImFsdGVybmF0ZUNv
bG9ycyJfcywgb3B0X2FsdGVybmF0ZUNvbG9ycy5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICBpZiAo
ISFvcHRfcHJpbnRDb2xvcikKKyAgICAgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRTdHJp
bmcoInByaW50Q29sb3IiX3MsIG9wdF9wcmludENvbG9yKTsKKyAgICBwcm90b2NvbF9qc29uTWVz
c2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiX3MsIFdURk1vdmUocHJvdG9jb2xfcGFyYW1zT2JqZWN0
KSk7CiAKLSAgICBtX2Zyb250ZW5kUm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09O
U3RyaW5nKCkpOworICAgIG1fZnJvbnRlbmRSb3V0ZXIuc2VuZEV2ZW50KHByb3RvY29sX2pzb25N
ZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7CiB9CiAKLXZvaWQgRGF0YWJhc2VGcm9udGVuZERpc3Bh
dGNoZXI6OmRpZEV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhSZWZQdHI8SlNPTjo6QXJyYXlP
ZjxTdHJpbmc+PiBjb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBub3RlcywgZG91YmxlIHRpbWVz
dGFtcCwgUmVmUHRyPEpTT046Ok9iamVjdD4gdmFsdWVzLCBSZWZQdHI8SlNPTjo6VmFsdWU+IHBh
eWxvYWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IHNxbEVy
cm9yLCBjb25zdCBTdHJpbmcmIHNjcmVlbkNvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4gYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcmIHBy
aW50Q29sb3IpCit2b2lkIERhdGFiYXNlRnJvbnRlbmREaXNwYXRjaGVyOjpkaWRFeGVjdXRlTm9P
cHRpb25hbFBhcmFtZXRlcnMoUmVmPEpTT046OkFycmF5T2Y8U3RyaW5nPj4mJiBjb2x1bW5OYW1l
cywgY29uc3QgU3RyaW5nJiBub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgUmVmPEpTT046Ok9iamVj
dD4mJiB2YWx1ZXMsIFJlZjxKU09OOjpWYWx1ZT4mJiBwYXlsb2FkLCBSZWY8UHJvdG9jb2w6OkRh
dGFiYXNlOjpFcnJvcj4mJiBzcWxFcnJvciwgY29uc3QgU3RyaW5nJiBzY3JlZW5Db2xvciwgUmVm
PFByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiYmIGFsdGVybmF0ZUNvbG9ycywgY29uc3Qg
U3RyaW5nJiBwcmludENvbG9yKQogewotICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdl
ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJt
ZXRob2QiX3MsICJEYXRhYmFzZS5kaWRFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMiX3MpOwot
ICAgIFJlZjxKU09OOjpPYmplY3Q+IHBhcmFtc09iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRl
KCk7Ci0gICAgcGFyYW1zT2JqZWN0LT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIGNvbHVtbk5h
bWVzKTsKLSAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygibm90ZXMiX3MsIG5vdGVzKTsKLSAg
ICBwYXJhbXNPYmplY3QtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCB0aW1lc3RhbXApOwotICAg
IHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIHZhbHVlcyk7Ci0gICAgcGFyYW1z
T2JqZWN0LT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgcGF5bG9hZCk7Ci0gICAgcGFyYW1zT2JqZWN0
LT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBzcWxFcnJvcik7Ci0gICAgcGFyYW1zT2JqZWN0LT5z
ZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCBzY3JlZW5Db2xvcik7Ci0gICAgcGFyYW1zT2JqZWN0
LT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCBhbHRlcm5hdGVDb2xvcnMpOwotICAgIHBh
cmFtc09iamVjdC0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCBwcmludENvbG9yKTsKLSAgICBq
c29uTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiX3MsIFdURk1vdmUocGFyYW1zT2JqZWN0KSk7
CisgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7
CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiRGF0YWJh
c2UuZGlkRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzIl9zKTsKKyAgICBhdXRvIHByb3RvY29s
X3BhcmFtc09iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgcHJvdG9jb2xfcGFy
YW1zT2JqZWN0LT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIFdURk1vdmUoY29sdW1uTmFtZXMp
KTsKKyAgICBwcm90b2NvbF9wYXJhbXNPYmplY3QtPnNldFN0cmluZygibm90ZXMiX3MsIG5vdGVz
KTsKKyAgICBwcm90b2NvbF9wYXJhbXNPYmplY3QtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCB0
aW1lc3RhbXApOworICAgIHByb3RvY29sX3BhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJ2YWx1ZXMi
X3MsIFdURk1vdmUodmFsdWVzKSk7CisgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRWYWx1
ZSgicGF5bG9hZCJfcywgV1RGTW92ZShwYXlsb2FkKSk7CisgICAgcHJvdG9jb2xfcGFyYW1zT2Jq
ZWN0LT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBXVEZNb3ZlKHNxbEVycm9yKSk7CisgICAgcHJv
dG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCBzY3JlZW5Db2xv
cik7CisgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3Jz
Il9zLCBXVEZNb3ZlKGFsdGVybmF0ZUNvbG9ycykpOworICAgIHByb3RvY29sX3BhcmFtc09iamVj
dC0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCBwcmludENvbG9yKTsKKyAgICBwcm90b2NvbF9q
c29uTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiX3MsIFdURk1vdmUocHJvdG9jb2xfcGFyYW1z
T2JqZWN0KSk7CiAKLSAgICBtX2Zyb250ZW5kUm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+
dG9KU09OU3RyaW5nKCkpOworICAgIG1fZnJvbnRlbmRSb3V0ZXIuc2VuZEV2ZW50KHByb3RvY29s
X2pzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEluc3Bl
Y3RvcgpAQCAtMzYyLDcgKzM2Myw5IEBAIHZvaWQgRGF0YWJhc2VGcm9udGVuZERpc3BhdGNoZXI6
OmRpZEV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhSZWZQdHI8SlNPTjo6QXJyCiAjcHJhZ21h
IG9uY2UKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMu
aD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVz
Lmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC0zOTEsNyArMzk0LDcgQEAgdXNp
bmcgQ29sb3JMaXN0ID0gSlNPTjo6QXJyYXlPZjxTdHJpbmc+OwogbmFtZXNwYWNlIERhdGFiYXNl
IHsKIAogLyogRGF0YWJhc2UgZXJyb3IuICovCi1jbGFzcyBFcnJvciA6IHB1YmxpYyBKU09OOjpP
YmplY3RCYXNlIHsKK2NsYXNzIEVycm9yIGZpbmFsIDogcHVibGljIEpTT046Ok9iamVjdEJhc2Ug
ewogcHVibGljOgogICAgIGVudW0gewogICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCkBAIC00MTgs
MTcgKzQyMSwxNyBAQCBwdWJsaWM6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBFcnJvcjsKICAgICBw
dWJsaWM6CiAKLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IE1lc3NhZ2VTZXQ+JiBzZXRNZXNzYWdl
KGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBNZXNzYWdlU2V0
PiYgc2V0TWVzc2FnZShjb25zdCBTdHJpbmcmIGluX21lc3NhZ2UpCiAgICAgICAgIHsKICAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBNZXNzYWdlU2V0KSwgcHJvcGVydHlfbWVz
c2FnZV9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJtZXNz
YWdlIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJtZXNzYWdl
Il9zLCBpbl9tZXNzYWdlKTsKICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TWVzc2FnZVNl
dD4oKTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDb2RlU2V0PiYgc2V0
Q29kZShpbnQgdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDb2RlU2V0PiYgc2V0Q29k
ZShpbnQgaW5fY29kZSkKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShT
VEFURSAmIENvZGVTZXQpLCBwcm9wZXJ0eV9jb2RlX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAg
IG1fcmVzdWx0LT5zZXRJbnRlZ2VyKCJjb2RlIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICBtX3Jl
c3VsdC0+c2V0SW50ZWdlcigiY29kZSJfcywgaW5fY29kZSk7CiAgICAgICAgICAgICByZXR1cm4g
Y2FzdFN0YXRlPENvZGVTZXQ+KCk7CiAgICAgICAgIH0KIApAQCAtNDk4LDggKzUwMSw3IEBAIHB1
YmxpYzoKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3Rz
LmgiCiAKLSNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3Ry
aW5nLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KIAogbmFtZXNwYWNlIEluc3BlY3Rv
ciB7CiAKQEAgLTc3OCwyOSArNzgwLDI5IEBAIHVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CiAg
ICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKGFsdGVybmF0ZUNv
bG9ycywgQCJhbHRlcm5hdGVDb2xvcnMiKTsKICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9P
UFRJT05BTF9QQVJBTUVURVIocHJpbnRDb2xvciwgQCJwcmludENvbG9yIik7CiAKLSAgICBSZWY8
SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAg
anNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiRGF0YWJhc2UuZGlkRXhlY3V0ZU9w
dGlvbmFsUGFyYW1ldGVycyJfcyk7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4gcGFyYW1zT2JqZWN0
ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdl
ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0
U3RyaW5nKCJtZXRob2QiX3MsICJEYXRhYmFzZS5kaWRFeGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJz
Il9zKTsKKyAgICBhdXRvIHByb3RvY29sX3BhcmFtc09iamVjdCA9IEpTT046Ok9iamVjdDo6Y3Jl
YXRlKCk7CiAgICAgaWYgKGNvbHVtbk5hbWVzKQotICAgICAgICBwYXJhbXNPYmplY3QtPnNldEFy
cmF5KCJjb2x1bW5OYW1lcyJfcywgdG9KU09OU3RyaW5nQXJyYXkoKCpjb2x1bW5OYW1lcykpKTsK
KyAgICAgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3Ms
IHRvSlNPTlN0cmluZ0FycmF5KCgqY29sdW1uTmFtZXMpKSk7CiAgICAgaWYgKG5vdGVzKQotICAg
ICAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygibm90ZXMiX3MsICgqbm90ZXMpKTsKKyAgICAg
ICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCAoKm5vdGVzKSk7
CiAgICAgaWYgKHRpbWVzdGFtcCkKLSAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXREb3VibGUoInRp
bWVzdGFtcCJfcywgKCp0aW1lc3RhbXApKTsKKyAgICAgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0
LT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywgKCp0aW1lc3RhbXApKTsKICAgICBpZiAodmFsdWVz
KQotICAgICAgICBwYXJhbXNPYmplY3QtPnNldE9iamVjdCgidmFsdWVzIl9zLCBbKCp2YWx1ZXMp
IHRvSlNPTk9iamVjdF0pOworICAgICAgICBwcm90b2NvbF9wYXJhbXNPYmplY3QtPnNldE9iamVj
dCgidmFsdWVzIl9zLCBbKCp2YWx1ZXMpIHRvSlNPTk9iamVjdF0pOwogICAgIGlmIChwYXlsb2Fk
KQotICAgICAgICBwYXJhbXNPYmplY3QtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCBbKCpwYXlsb2Fk
KSB0b0pTT05PYmplY3RdKTsKKyAgICAgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRWYWx1
ZSgicGF5bG9hZCJfcywgWygqcGF5bG9hZCkgdG9KU09OT2JqZWN0XSk7CiAgICAgaWYgKHNxbEVy
cm9yKQotICAgICAgICBwYXJhbXNPYmplY3QtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIFsoKnNx
bEVycm9yKSB0b0pTT05PYmplY3RdKTsKKyAgICAgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT5z
ZXRPYmplY3QoInNxbEVycm9yIl9zLCBbKCpzcWxFcnJvcikgdG9KU09OT2JqZWN0XSk7CiAgICAg
aWYgKHNjcmVlbkNvbG9yKQotICAgICAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygic2NyZWVu
Q29sb3IiX3MsICgqc2NyZWVuQ29sb3IpKTsKKyAgICAgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0
LT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCAoKnNjcmVlbkNvbG9yKSk7CiAgICAgaWYgKGFs
dGVybmF0ZUNvbG9ycykKLSAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRBcnJheSgiYWx0ZXJuYXRl
Q29sb3JzIl9zLCB0b0pTT05TdHJpbmdBcnJheSgoKmFsdGVybmF0ZUNvbG9ycykpKTsKKyAgICAg
ICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCB0
b0pTT05TdHJpbmdBcnJheSgoKmFsdGVybmF0ZUNvbG9ycykpKTsKICAgICBpZiAocHJpbnRDb2xv
cikKLSAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInByaW50Q29sb3IiX3MsICgqcHJp
bnRDb2xvcikpOwotICAgIGpzb25NZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyJfcywgV1RGTW92
ZShwYXJhbXNPYmplY3QpKTsKLSAgICByb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pT
T05TdHJpbmcoKSk7CisgICAgICAgIHByb3RvY29sX3BhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJw
cmludENvbG9yIl9zLCAoKnByaW50Q29sb3IpKTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+
c2V0T2JqZWN0KCJwYXJhbXMiX3MsIFdURk1vdmUocHJvdG9jb2xfcGFyYW1zT2JqZWN0KSk7Cisg
ICAgcm91dGVyLnNlbmRFdmVudChwcm90b2NvbF9qc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkp
OwogfQogCiAtICh2b2lkKWRpZEV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1dpdGhDb2x1bW5O
YW1lczooTlNBcnJheS8qPE5TU3RyaW5nPiovICopY29sdW1uTmFtZXMgbm90ZXM6KE5TU3RyaW5n
ICopbm90ZXMgdGltZXN0YW1wOihkb3VibGUpdGltZXN0YW1wIHZhbHVlczooUldJUHJvdG9jb2xK
U09OT2JqZWN0ICopdmFsdWVzIHBheWxvYWQ6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXBheWxv
YWQgc3FsRXJyb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKilzcWxFcnJvciBzY3JlZW5D
b2xvcjooTlNTdHJpbmcgKilzY3JlZW5Db2xvciBhbHRlcm5hdGVDb2xvcnM6KE5TQXJyYXkvKjxO
U1N0cmluZz4qLyAqKWFsdGVybmF0ZUNvbG9ycyBwcmludENvbG9yOihOU1N0cmluZyAqKXByaW50
Q29sb3IKQEAgLTgxNiwyMCArODE4LDIwIEBAIHVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CiAg
ICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoYWx0ZXJuYXRlQ29sb3Jz
LCBAImFsdGVybmF0ZUNvbG9ycyIpOwogICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURf
UEFSQU1FVEVSKHByaW50Q29sb3IsIEAicHJpbnRDb2xvciIpOwogCi0gICAgUmVmPEpTT046Ok9i
amVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIGpzb25NZXNz
YWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRhdGFiYXNlLmRpZEV4ZWN1dGVOb09wdGlvbmFs
UGFyYW1ldGVycyJfcyk7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSlNP
Tjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBwYXJhbXNPYmplY3QtPnNldEFycmF5KCJjb2x1bW5O
YW1lcyJfcywgdG9KU09OU3RyaW5nQXJyYXkoY29sdW1uTmFtZXMpKTsKLSAgICBwYXJhbXNPYmpl
Y3QtPnNldFN0cmluZygibm90ZXMiX3MsIG5vdGVzKTsKLSAgICBwYXJhbXNPYmplY3QtPnNldERv
dWJsZSgidGltZXN0YW1wIl9zLCB0aW1lc3RhbXApOwotICAgIHBhcmFtc09iamVjdC0+c2V0T2Jq
ZWN0KCJ2YWx1ZXMiX3MsIFt2YWx1ZXMgdG9KU09OT2JqZWN0XSk7Ci0gICAgcGFyYW1zT2JqZWN0
LT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgW3BheWxvYWQgdG9KU09OT2JqZWN0XSk7Ci0gICAgcGFy
YW1zT2JqZWN0LT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBbc3FsRXJyb3IgdG9KU09OT2JqZWN0
XSk7Ci0gICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCBzY3JlZW5D
b2xvcik7Ci0gICAgcGFyYW1zT2JqZWN0LT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCB0
b0pTT05TdHJpbmdBcnJheShhbHRlcm5hdGVDb2xvcnMpKTsKLSAgICBwYXJhbXNPYmplY3QtPnNl
dFN0cmluZygicHJpbnRDb2xvciJfcywgcHJpbnRDb2xvcik7Ci0gICAganNvbk1lc3NhZ2UtPnNl
dE9iamVjdCgicGFyYW1zIl9zLCBXVEZNb3ZlKHBhcmFtc09iamVjdCkpOwotICAgIHJvdXRlci5z
ZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKKyAgICBhdXRvIHByb3RvY29s
X2pzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBwcm90b2NvbF9qc29u
TWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJEYXRhYmFzZS5kaWRFeGVjdXRlTm9PcHRp
b25hbFBhcmFtZXRlcnMiX3MpOworICAgIGF1dG8gcHJvdG9jb2xfcGFyYW1zT2JqZWN0ID0gSlNP
Tjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBwcm90b2NvbF9wYXJhbXNPYmplY3QtPnNldEFycmF5
KCJjb2x1bW5OYW1lcyJfcywgdG9KU09OU3RyaW5nQXJyYXkoY29sdW1uTmFtZXMpKTsKKyAgICBw
cm90b2NvbF9wYXJhbXNPYmplY3QtPnNldFN0cmluZygibm90ZXMiX3MsIG5vdGVzKTsKKyAgICBw
cm90b2NvbF9wYXJhbXNPYmplY3QtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCB0aW1lc3RhbXAp
OworICAgIHByb3RvY29sX3BhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIFt2YWx1
ZXMgdG9KU09OT2JqZWN0XSk7CisgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRWYWx1ZSgi
cGF5bG9hZCJfcywgW3BheWxvYWQgdG9KU09OT2JqZWN0XSk7CisgICAgcHJvdG9jb2xfcGFyYW1z
T2JqZWN0LT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBbc3FsRXJyb3IgdG9KU09OT2JqZWN0XSk7
CisgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCBz
Y3JlZW5Db2xvcik7CisgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRBcnJheSgiYWx0ZXJu
YXRlQ29sb3JzIl9zLCB0b0pTT05TdHJpbmdBcnJheShhbHRlcm5hdGVDb2xvcnMpKTsKKyAgICBw
cm90b2NvbF9wYXJhbXNPYmplY3QtPnNldFN0cmluZygicHJpbnRDb2xvciJfcywgcHJpbnRDb2xv
cik7CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIl9zLCBXVEZN
b3ZlKHByb3RvY29sX3BhcmFtc09iamVjdCkpOworICAgIHJvdXRlci5zZW5kRXZlbnQocHJvdG9j
b2xfanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKIH0KIAogQGVuZApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2dl
bmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uLXJlc3VsdCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9nZW5lcmF0ZS1k
b21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbi1yZXN1bHQKaW5kZXggMjk0YmE5MDgxMjE4
YTM1MDJkOTZkNDU1ZDRkNjNkMmIzZjVhYWU5YS4uMzljMzY2M2FmZjJmNmZiOWMwZWE3Yjg0OWNm
MzkwYWZkYTNiZmJhYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2dlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1
YXJkcy5qc29uLXJlc3VsdAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZXhwZWN0ZWQvZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRz
Lmpzb24tcmVzdWx0CkBAIC03NCw3ICs3NCw3IEBAIEluc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVE
b21haW4oIk5ldHdvcmszIiwgbnVsbCk7CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKIAotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVk
ZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yRnJvbnRlbmRSb3V0ZXIuaD4KIApAQCAtOTIsNyArOTIsNyBAQCBwcml2YXRlOgogY2xhc3Mg
QWx0ZXJuYXRlTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlciA6IHB1YmxpYyBBbHRlcm5hdGVCYWNr
ZW5kRGlzcGF0Y2hlciB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+QWx0ZXJuYXRlTmV0d29yazFC
YWNrZW5kRGlzcGF0Y2hlcigpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UobG9u
ZyBjYWxsSWQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlKGxvbmcgcHJvdG9j
b2xfY2FsbElkKSA9IDA7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKQEAgLTEzNCwx
MSArMTM0LDE0IEBAIHB1YmxpYzoKIAogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIK
ICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgor
I2luY2x1ZGUgPHR1cGxlPgorI2luY2x1ZGUgPHd0Zi9FeHBlY3RlZC5oPgorI2luY2x1ZGUgPHd0
Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKIAotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKIAogI2lmIEVO
QUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogY2xhc3MgQWx0ZXJuYXRlTmV0
d29yazFCYWNrZW5kRGlzcGF0Y2hlcjsKQEAgLTE0Niw3ICsxNDksNyBAQCBjbGFzcyBBbHRlcm5h
dGVOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOwogCiBjbGFzcyBOZXR3b3JrMUJhY2tlbmREaXNw
YXRjaGVySGFuZGxlciB7CiBwdWJsaWM6Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZShF
cnJvclN0cmluZyYpID0gMDsKKyAgICB2aXJ0dWFsIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZv
aWQ+IGxvYWRSZXNvdXJjZSgpID0gMDsKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIH5OZXR3b3Jr
MUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpOwogfTsKQEAgLTE1NCw5ICsxNTcsOSBAQCBwcm90
ZWN0ZWQ6CiBjbGFzcyBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIFN1
cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPE5l
dHdvcmsxQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYsIE5ldHdv
cmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7Ci0gICAgdm9pZCBkaXNwYXRjaChsb25nIHJl
cXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2Fn
ZSkgZmluYWw7CisgICAgdm9pZCBkaXNwYXRjaChsb25nIHByb3RvY29sX2NhbGxJZCwgY29uc3Qg
U3RyaW5nJiBwcm90b2NvbF9tZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfbWVz
c2FnZSkgZmluYWw7CiBwcml2YXRlOgotICAgIHZvaWQgbG9hZFJlc291cmNlKGxvbmcgcmVxdWVz
dElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOworICAgIHZvaWQgbG9hZFJl
c291cmNlKGxvbmcgcHJvdG9jbF9jYWxsSWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcHJvdG9j
b2xfcGFyYW1ldGVycyk7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hF
UlMpCiBwdWJsaWM6CiAgICAgdm9pZCBzZXRBbHRlcm5hdGVEaXNwYXRjaGVyKEFsdGVybmF0ZU5l
dHdvcmsxQmFja2VuZERpc3BhdGNoZXIqIGFsdGVybmF0ZURpc3BhdGNoZXIpIHsgbV9hbHRlcm5h
dGVEaXNwYXRjaGVyID0gYWx0ZXJuYXRlRGlzcGF0Y2hlcjsgfQpAQCAtMjA1LDkgKzIwOCw3IEBA
IHByaXZhdGU6CiAjaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgogCiAjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3
dGYvSlNPTlZhbHVlcy5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRF
X0RJU1BBVENIRVJTKQogI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMu
aCIKQEAgLTIyOSwzOCArMjMwLDM4IEBAIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI6Ok5ldHdv
cmsxQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmRECiAgICAgbV9i
YWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRjaGVyRm9yRG9tYWluKCJOZXR3b3JrMSJf
cywgdGhpcyk7CiB9CiAKLXZvaWQgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2go
bG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYm
IG1lc3NhZ2UpCit2b2lkIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcg
cHJvdG9jb2xfY2FsbElkLCBjb25zdCBTdHJpbmcmIHByb3RvY29sX21ldGhvZCwgUmVmPEpTT046
Ok9iamVjdD4mJiBwcm90b2NvbF9tZXNzYWdlKQogewogICAgIFJlZjxOZXR3b3JrMUJhY2tlbmRE
aXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKIAotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBh
cmFtZXRlcnM7Ci0gICAgbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3MsIHBhcmFtZXRlcnMp
OworICAgIGF1dG8gcHJvdG9jb2xfcGFyYW1ldGVycyA9IHByb3RvY29sX21lc3NhZ2UtPmdldE9i
amVjdCgicGFyYW1zIl9zKTsKIAotICAgIGlmIChtZXRob2QgPT0gImxvYWRSZXNvdXJjZSIpIHsK
LSAgICAgICAgbG9hZFJlc291cmNlKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7Cisg
ICAgaWYgKHByb3RvY29sX21ldGhvZCA9PSAibG9hZFJlc291cmNlIikgeworICAgICAgICBsb2Fk
UmVzb3VyY2UocHJvdG9jb2xfY2FsbElkLCBXVEZNb3ZlKHByb3RvY29sX3BhcmFtZXRlcnMpKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9y
dFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdv
cmsxLiIgKyBtZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7CisgICAgbV9iYWNrZW5kRGlzcGF0
Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91
bmQsICInTmV0d29yazEuIiArIHByb3RvY29sX21ldGhvZCArICInIHdhcyBub3QgZm91bmQiKTsK
IH0KIAotdm9pZCBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UobG9uZyBy
ZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCit2b2lkIE5ldHdvcmsxQmFja2VuZERp
c3BhdGNoZXI6OmxvYWRSZXNvdXJjZShsb25nIHByb3RvY29sX2NhbGxJZCwgUmVmUHRyPEpTT046
Ok9iamVjdD4mJikKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVS
UykKICAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRl
RGlzcGF0Y2hlci0+bG9hZFJlc291cmNlKHJlcXVlc3RJZCk7CisgICAgICAgIG1fYWx0ZXJuYXRl
RGlzcGF0Y2hlci0+bG9hZFJlc291cmNlKHByb3RvY29sX2NhbGxJZCk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hF
UlMpCiAKLSAgICBFcnJvclN0cmluZyBlcnJvcjsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1
bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJjZShl
cnJvcik7CisgICAgYXV0byByZXN1bHQgPSBtX2FnZW50LT5sb2FkUmVzb3VyY2UoKTsKKyAgICBp
ZiAoIXJlc3VsdCkgeworICAgICAgICBBU1NFUlQoIXJlc3VsdC5lcnJvcigpLmlzRW1wdHkoKSk7
CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2Vu
ZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCByZXN1bHQuZXJyb3IoKSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CiAKLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQotICAgICAgICBtX2JhY2tlbmRE
aXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNl
KTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29s
RXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7Cisg
ICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Cisg
ICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHByb3RvY29sX2NhbGxJZCwgV1RG
TW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSksIGZhbHNlKTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCkBAIC0zMDEsNiArMzAyLDcgQEAgdm9pZCBOZXR3b3JrMUJhY2tlbmREaXNwYXRj
aGVyOjpsb2FkUmVzb3VyY2UobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3QKIAog
I2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDx3dGYvSlNPTlZhbHVl
cy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKQEAgLTM1MywxNiArMzU1LDE1IEBAIHBy
aXZhdGU6CiAjaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKIAogI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3Rm
L3RleHQvQ1N0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAogdm9pZCBOZXR3b3Jr
M0Zyb250ZW5kRGlzcGF0Y2hlcjo6cmVzb3VyY2VMb2FkZWQoKQogewotICAgIFJlZjxKU09OOjpP
YmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBqc29uTWVz
c2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJOZXR3b3JrMy5yZXNvdXJjZUxvYWRlZCJfcyk7
CisgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7
CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiTmV0d29y
azMucmVzb3VyY2VMb2FkZWQiX3MpOwogCi0gICAgbV9mcm9udGVuZFJvdXRlci5zZW5kRXZlbnQo
anNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKKyAgICBtX2Zyb250ZW5kUm91dGVyLnNlbmRF
dmVudChwcm90b2NvbF9qc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKQEAgLTQwMiw3ICs0MDMsOSBAQCB2b2lkIE5ldHdvcmszRnJvbnRl
bmREaXNwYXRjaGVyOjpyZXNvdXJjZUxvYWRlZCgpCiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYv
QXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3Rm
L09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFj
ZSBJbnNwZWN0b3IgewogCkBAIC00MjMsNyArNDI2LDcgQEAgY2xhc3MgTmV0d29ya0Vycm9yOwog
CiBuYW1lc3BhY2UgTmV0d29yazIgewogCi1jbGFzcyBOZXR3b3JrRXJyb3IgOiBwdWJsaWMgSlNP
Tjo6T2JqZWN0QmFzZSB7CitjbGFzcyBOZXR3b3JrRXJyb3IgZmluYWwgOiBwdWJsaWMgSlNPTjo6
T2JqZWN0QmFzZSB7CiBwdWJsaWM6CiAgICAgZW51bSB7CiAgICAgICAgIE5vRmllbGRzU2V0ID0g
MCwKQEAgLTQ1MCwxNyArNDUzLDE3IEBAIHB1YmxpYzoKICAgICAgICAgZnJpZW5kIGNsYXNzIE5l
dHdvcmtFcnJvcjsKICAgICBwdWJsaWM6CiAKLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IE1lc3Nh
Z2VTZXQ+JiBzZXRNZXNzYWdlKGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCBNZXNzYWdlU2V0PiYgc2V0TWVzc2FnZShjb25zdCBTdHJpbmcmIGluX21lc3NhZ2Up
CiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBNZXNzYWdl
U2V0KSwgcHJvcGVydHlfbWVzc2FnZV9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3Vs
dC0+c2V0U3RyaW5nKCJtZXNzYWdlIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+
c2V0U3RyaW5nKCJtZXNzYWdlIl9zLCBpbl9tZXNzYWdlKTsKICAgICAgICAgICAgIHJldHVybiBj
YXN0U3RhdGU8TWVzc2FnZVNldD4oKTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1aWxkZXI8U1RB
VEUgfCBDb2RlU2V0PiYgc2V0Q29kZShpbnQgdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8U1RBVEUg
fCBDb2RlU2V0PiYgc2V0Q29kZShpbnQgaW5fY29kZSkKICAgICAgICAgewogICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoIShTVEFURSAmIENvZGVTZXQpLCBwcm9wZXJ0eV9jb2RlX2FscmVhZHlf
c2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRJbnRlZ2VyKCJjb2RlIl9zLCB2YWx1ZSk7
CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0SW50ZWdlcigiY29kZSJfcywgaW5fY29kZSk7CiAg
ICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENvZGVTZXQ+KCk7CiAgICAgICAgIH0KIApAQCAt
NTMwLDggKzUzMyw3IEBAIHB1YmxpYzoKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJU
ZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAKLSNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNs
dWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KIAog
bmFtZXNwYWNlIEluc3BlY3RvciB7CiAKQEAgLTU4Nyw3ICs1ODksNyBAQCBjbGFzcyBPYmpDSW5z
cGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBBbHRlcm5hdGVO
ZXR3b3JrMUJhYwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIE9i
akNJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyKGlkPFRlc3RQcm90b2NvbE5ldHdv
cmsxRG9tYWluSGFuZGxlcj4gaGFuZGxlcikgeyBtX2RlbGVnYXRlID0gaGFuZGxlcjsgfQotICAg
IHZvaWQgbG9hZFJlc291cmNlKGxvbmcgcmVxdWVzdElkKSBmaW5hbDsKKyAgICB2b2lkIGxvYWRS
ZXNvdXJjZShsb25nIHByb3RvY29sX2NhbGxJZCkgZmluYWw7CiBwcml2YXRlOgogICAgIFJldGFp
blB0cjxpZDxUZXN0UHJvdG9jb2xOZXR3b3JrMURvbWFpbkhhbmRsZXI+PiBtX2RlbGVnYXRlOwog
fTsKQEAgLTYzNSwyMSArNjM3LDIyIEBAIHByaXZhdGU6CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3Ig
ewogCi12b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVz
b3VyY2UobG9uZyByZXF1ZXN0SWQpCit2b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmRE
aXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UobG9uZyBwcm90b2NvbF9jYWxsSWQpCiB7CiAgICAgaWYg
KCFbbV9kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGxvYWRSZXNvdXJjZVdp
dGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazopXSkgewotICAgICAgICBiYWNrZW5kRGlz
cGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNo
ZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdvcmsxLmxvYWRSZXNvdXJjZScgd2FzIG5vdCBmb3Vu
ZCJfcyk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3Io
cHJvdG9jb2xfY2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0
d29yazEubG9hZFJlc291cmNlJyB3YXMgbm90IGZvdW5kIl9zKTsKICAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAogICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgewotICAgICAgICBi
YWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2Vu
ZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CisgICAgICAgIGJhY2tlbmREaXNwYXRj
aGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocHJvdG9jb2xfY2FsbElkLCBCYWNrZW5kRGlzcGF0
Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+
c2VuZFBlbmRpbmdFcnJvcnMoKTsKICAgICB9OwogCiAgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0g
XnsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwg
SlNPTjo6T2JqZWN0OjpjcmVhdGUoKSwgZmFsc2UpOworICAgICAgICBhdXRvIHByb3RvY29sX2pz
b25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgYmFja2VuZERpc3Bh
dGNoZXIoKS0+c2VuZFJlc3BvbnNlKHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9q
c29uTWVzc2FnZSksIGZhbHNlKTsKICAgICB9OwogCiAgICAgW21fZGVsZWdhdGUgbG9hZFJlc291
cmNlV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vz
c0NhbGxiYWNrXTsKQEAgLTg1MSw5ICs4NTQsOSBAQCB1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9y
OwogewogICAgIGNvbnN0IEZyb250ZW5kUm91dGVyJiByb3V0ZXIgPSBfY29udHJvbGxlci0+ZnJv
bnRlbmRSb3V0ZXIoKTsKIAotICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNP
Tjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2Qi
X3MsICJOZXR3b3JrMy5yZXNvdXJjZUxvYWRlZCJfcyk7Ci0gICAgcm91dGVyLnNlbmRFdmVudChq
c29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOworICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3Nh
Z2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5z
ZXRTdHJpbmcoIm1ldGhvZCJfcywgIk5ldHdvcmszLnJlc291cmNlTG9hZGVkIl9zKTsKKyAgICBy
b3V0ZXIuc2VuZEV2ZW50KHByb3RvY29sX2pzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7CiB9
CiAKIEBlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9leHBlY3RlZC9zYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uLXJl
c3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBl
Y3RlZC9zYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uLXJlc3VsdAppbmRleCA0NTNl
ZjZlNDk0OGVhYjAyNWFiNTYxMzc4ZDJiOGFhOTRmNTVjODhkLi41NmVmNjM0ZGU5ODA2ODU4NmRi
ZGNkMDg4MWI5MWQ4NDllMmZiYTE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvc2FtZS10eXBlLWlkLWRpZmZlcmVudC1k
b21haW4uanNvbi1yZXN1bHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3NhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24t
cmVzdWx0CkBAIC02Myw3ICs2Myw3IEBACiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKIAotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVk
ZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yRnJvbnRlbmRSb3V0ZXIuaD4KIApAQCAtMTE5LDExICsxMTksMTQgQEAgcHJpdmF0ZToKIAog
I2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHR1cGxlPgorI2luY2x1
ZGUgPHd0Zi9FeHBlY3RlZC5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAotdHlwZWRl
ZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKIAogCiAKQEAgLTE2NCw5ICsxNjcsNyBAQCB0eXBlZGVm
IFN0cmluZyBFcnJvclN0cmluZzsKICNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgi
CiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgot
I2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVk
Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiAjaWYgRU5BQkxFKElOU1BFQ1RP
Ul9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAjaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmRE
aXNwYXRjaGVycy5oIgpAQCAtMjE0LDYgKzIxNSw3IEBAIG5hbWVzcGFjZSBJbnNwZWN0b3Igewog
CiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPHd0Zi9KU09OVmFs
dWVzLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewpAQCAtMjU3LDcgKzI1OSw2IEBAIGNs
YXNzIEZyb250ZW5kUm91dGVyOwogI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgi
CiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgot
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAK
QEAgLTI5OCw3ICsyOTksOSBAQCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKICNwcmFnbWEgb25jZQog
CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgotI2lu
Y2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNp
bmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
IAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKQEAgLTM2Miw4ICszNjUsNyBAQCB1c2luZyBSZW1v
dGVPYmplY3RJZCA9IFN0cmluZzsKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJUZXN0
UHJvdG9jb2xPYmplY3RzLmgiCiAKLSNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KIAogbmFt
ZXNwYWNlIEluc3BlY3RvciB7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9zaGFkb3dlZC1vcHRpb25hbC10eXBlLXNl
dHRlcnMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZXhwZWN0ZWQvc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24tcmVz
dWx0CmluZGV4IDVmMmNkNzkzMzA0MjQ3ZTc2NTVmM2U5ODFlYTcwMGY1N2M3NzBmZDkuLjhlY2Vj
YzcwMTAzNDA0ZGE3ZGMyNzhjYTk3NTE5YTJkZWJmYzAwNWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9zaGFkb3dlZC1v
cHRpb25hbC10eXBlLXNldHRlcnMuanNvbi1yZXN1bHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3NoYWRvd2VkLW9wdGlvbmFsLXR5
cGUtc2V0dGVycy5qc29uLXJlc3VsdApAQCAtNjMsNyArNjMsNyBAQAogCiAjaWYgRU5BQkxFKElO
U1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xU
eXBlcy5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgogI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CiAKQEAgLTExOSwxMSArMTE5LDE0
IEBAIHByaXZhdGU6CiAKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRl
IDx0dXBsZT4KKyNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9u
YWwuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3Bl
Y3RvciB7CiAKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCiAKIAogCkBAIC0xNjQsOSAr
MTY3LDcgQEAgdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiAjaW5jbHVkZSAiVGVzdEJhY2tl
bmREaXNwYXRjaGVycy5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJv
bnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgogI2luY2x1ZGUgPHd0
Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogI2lm
IEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogI2luY2x1ZGUgIlRlc3RB
bHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKQEAgLTIxNCw2ICsyMTUsNyBAQCBuYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKIAogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNs
dWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKQEAgLTI1
Nyw3ICsyNTksNiBAQCBjbGFzcyBGcm9udGVuZFJvdXRlcjsKICNpbmNsdWRlICJUZXN0RnJvbnRl
bmREaXNwYXRjaGVycy5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJv
bnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKIG5hbWVzcGFj
ZSBJbnNwZWN0b3IgewogCkBAIC0yOTgsNyArMjk5LDkgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7
CiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3Rv
Y29sVHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9K
U09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC0zMzEsNyArMzM0
LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKFQg
ZW51bVZhbHVlKQogbmFtZXNwYWNlIFJ1bnRpbWUgewogCiAvKiBLZXkgcGF0aC4gKi8KLWNsYXNz
IEtleVBhdGggOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7CitjbGFzcyBLZXlQYXRoIGZpbmFs
IDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgewogcHVibGljOgogICAgIC8vIE5hbWVkIGFmdGVy
IHByb3BlcnR5IG5hbWUgJ3R5cGUnIHdoaWxlIGdlbmVyYXRpbmcgS2V5UGF0aC4KICAgICBlbnVt
IGNsYXNzIFR5cGUgewpAQCAtMzM5LDYgKzM0Miw3IEBAIHB1YmxpYzoKICAgICAgICAgU3RyaW5n
ID0gMSwKICAgICAgICAgQXJyYXkgPSAyLAogICAgIH07IC8vIGVudW0gY2xhc3MgVHlwZQorCiAg
ICAgZW51bSB7CiAgICAgICAgIE5vRmllbGRzU2V0ID0gMCwKICAgICAgICAgVHlwZVNldCA9IDEg
PDwgMCwKQEAgLTM2MywxMCArMzY3LDEwIEBAIHB1YmxpYzoKICAgICAgICAgZnJpZW5kIGNsYXNz
IEtleVBhdGg7CiAgICAgcHVibGljOgogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBUeXBlU2V0
PiYgc2V0VHlwZShUeXBlIHZhbHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVHlwZVNldD4m
IHNldFR5cGUoVHlwZSBpbl90eXBlKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FT
U0VSVCghKFNUQVRFICYgVHlwZVNldCksIHByb3BlcnR5X3R5cGVfYWxyZWFkeV9zZXQpOwotICAg
ICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygidHlwZSJfcywgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKHZhbHVlKSk7CisgICAgICAgICAg
ICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ0eXBlIl9zLCBQcm90b2NvbDo6VGVzdEhlbHBlcnM6Omdl
dEVudW1Db25zdGFudFZhbHVlKGluX3R5cGUpKTsKICAgICAgICAgICAgIHJldHVybiBjYXN0U3Rh
dGU8VHlwZVNldD4oKTsKICAgICAgICAgfQogCkBAIC0zOTIsMTQgKzM5NiwxNCBAQCBwdWJsaWM6
CiAgICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihKU09OOjpPYmplY3Q6OmNyZWF0
ZSgpKTsKICAgICB9CiAKLSAgICB2b2lkIHNldFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQor
ICAgIHZvaWQgc2V0U3RyaW5nKGNvbnN0IFN0cmluZyYgaW5fb3B0X3N0cmluZykKICAgICB7Ci0g
ICAgICAgIEpTT046Ok9iamVjdEJhc2U6OnNldFN0cmluZygic3RyaW5nIl9zLCB2YWx1ZSk7Cisg
ICAgICAgIEpTT046Ok9iamVjdEJhc2U6OnNldFN0cmluZygic3RyaW5nIl9zLCBpbl9vcHRfc3Ry
aW5nKTsKICAgICB9CiAKLSAgICB2b2lkIHNldEFycmF5KFJlZlB0cjxKU09OOjpBcnJheU9mPFN0
cmluZz4+IHZhbHVlKQorICAgIHZvaWQgc2V0QXJyYXkoUmVmPEpTT046OkFycmF5T2Y8U3RyaW5n
Pj4mJiBpbl9vcHRfYXJyYXkpCiAgICAgewotICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXRB
cnJheSgiYXJyYXkiX3MsIFdURk1vdmUodmFsdWUpKTsKKyAgICAgICAgSlNPTjo6T2JqZWN0QmFz
ZTo6c2V0QXJyYXkoImFycmF5Il9zLCBXVEZNb3ZlKGluX29wdF9hcnJheSkpOwogICAgIH0KIH07
CiAKQEAgLTQxNCw3ICs0MTgsNyBAQCBPcHRpb25hbDxQcm90b2NvbEVudW1UeXBlPiBwYXJzZUVu
dW1WYWx1ZUZyb21TdHJpbmcoY29uc3QgU3RyaW5nJik7CiAKIC8vIEVudW1zIGluIHRoZSAnUnVu
dGltZScgRG9tYWluCiB0ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpS
dW50aW1lOjpLZXlQYXRoOjpUeXBlPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9y
OjpQcm90b2NvbDo6UnVudGltZTo6S2V5UGF0aDo6VHlwZT4oY29uc3QgU3RyaW5nJik7CitPcHRp
b25hbDxQcm90b2NvbDo6UnVudGltZTo6S2V5UGF0aDo6VHlwZT4gcGFyc2VFbnVtVmFsdWVGcm9t
U3RyaW5nPFByb3RvY29sOjpSdW50aW1lOjpLZXlQYXRoOjpUeXBlPihjb25zdCBTdHJpbmcmKTsK
IAogfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKIApAQCAtNDU2LDggKzQ2MCw3IEBAIE9wdGlv
bmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OktleVBhdGg6OlR5cGU+IHBhcnNlRW51
bVZhbHVlRnJvbVN0cmluZzxJCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGVzdFBy
b3RvY29sT2JqZWN0cy5oIgogCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8
d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAKIG5hbWVz
cGFjZSBJbnNwZWN0b3IgewogCkBAIC00NzgsMTYgKzQ4MSwxNiBAQCBTdHJpbmcgZ2V0RW51bUNv
bnN0YW50VmFsdWUoaW50IGNvZGUpIHsKIC8vIEVudW1zIGluIHRoZSAnUnVudGltZScgRG9tYWlu
CiAKIHRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6Oktl
eVBhdGg6OlR5cGU+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29s
OjpSdW50aW1lOjpLZXlQYXRoOjpUeXBlPihjb25zdCBTdHJpbmcmIHByb3RvY29sU3RyaW5nKQor
T3B0aW9uYWw8UHJvdG9jb2w6OlJ1bnRpbWU6OktleVBhdGg6OlR5cGU+IHBhcnNlRW51bVZhbHVl
RnJvbVN0cmluZzxQcm90b2NvbDo6UnVudGltZTo6S2V5UGF0aDo6VHlwZT4oY29uc3QgU3RyaW5n
JiBwcm90b2NvbFN0cmluZykKIHsKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNvbnN0YW50VmFs
dWVzW10gPSB7Ci0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6
S2V5UGF0aDo6VHlwZTo6TnVsbCwKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29s
OjpSdW50aW1lOjpLZXlQYXRoOjpUeXBlOjpTdHJpbmcsCi0gICAgICAgIChzaXplX3QpSW5zcGVj
dG9yOjpQcm90b2NvbDo6UnVudGltZTo6S2V5UGF0aDo6VHlwZTo6QXJyYXksCisgICAgICAgIChz
aXplX3QpUHJvdG9jb2w6OlJ1bnRpbWU6OktleVBhdGg6OlR5cGU6Ok51bGwsCisgICAgICAgIChz
aXplX3QpUHJvdG9jb2w6OlJ1bnRpbWU6OktleVBhdGg6OlR5cGU6OlN0cmluZywKKyAgICAgICAg
KHNpemVfdClQcm90b2NvbDo6UnVudGltZTo6S2V5UGF0aDo6VHlwZTo6QXJyYXksCiAgICAgfTsK
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDM7ICsraSkKICAgICAgICAgaWYgKHByb3RvY29s
U3RyaW5nID09IGVudW1fY29uc3RhbnRfdmFsdWVzW2NvbnN0YW50VmFsdWVzW2ldXSkKLSAgICAg
ICAgICAgIHJldHVybiAoSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6S2V5UGF0aDo6VHlw
ZSljb25zdGFudFZhbHVlc1tpXTsKKyAgICAgICAgICAgIHJldHVybiAoUHJvdG9jb2w6OlJ1bnRp
bWU6OktleVBhdGg6OlR5cGUpY29uc3RhbnRWYWx1ZXNbaV07CiAKICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3Nob3VsZC1zdHJpcC1jb21tZW50cy5qc29uLXJlc3VsdCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9z
aG91bGQtc3RyaXAtY29tbWVudHMuanNvbi1yZXN1bHQKaW5kZXggMzQ4YWNlOTNiYWIwOTQ3ZGFm
ODViNDVmNTljOWZjYWE2NzAyZGUwMC4uMDBhYTM2ZmEzZDAyNDkxM2M1YjhkMjczODExZGE1YTAx
NTQ4MzEyOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2V4cGVjdGVkL3Nob3VsZC1zdHJpcC1jb21tZW50cy5qc29uLXJlc3VsdAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQv
c2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpzb24tcmVzdWx0CkBAIC02Myw3ICs2Myw3IEBACiAKICNp
ZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIAotI2luY2x1ZGUgIlRl
c3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CiAjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KIApAQCAtMTE5
LDExICsxMTksMTQgQEAgcHJpdmF0ZToKIAogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMu
aCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5o
PgorI2luY2x1ZGUgPHR1cGxlPgorI2luY2x1ZGUgPHd0Zi9FeHBlY3RlZC5oPgorI2luY2x1ZGUg
PHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1l
c3BhY2UgSW5zcGVjdG9yIHsKIAotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKIAogCiAK
QEAgLTE2NCw5ICsxNjcsNyBAQCB0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKICNpbmNsdWRl
ICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9J
bnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CiAj
aW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAjaW5j
bHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgpAQCAtMjE0LDYgKzIxNSw3
IEBAIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0
cy5oIgogI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFs
Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0
b3IgewpAQCAtMjU3LDcgKzI1OSw2IEBAIGNsYXNzIEZyb250ZW5kUm91dGVyOwogI2luY2x1ZGUg
IlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9J
bnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
IAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKQEAgLTI5OCw3ICsyOTksOSBAQCBuYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yUHJvdG9jb2xUeXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5j
bHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKQEAg
LTM1Miw4ICszNTUsNyBAQCBuYW1lc3BhY2UgUHJvdG9jb2wgewogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKIAotI2luY2x1ZGUgPHd0Zi9PcHRp
b25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvQXNz
ZXJ0aW9ucy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVj
bGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0
aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbi1yZXN1bHQKaW5kZXggNzljYjk4NTQ1OWY4
ODI0NTY3N2M1ZTNjMjYwNWY3MzQ0ZTExNmJmYy4uMzRiMWFjYmJjYWVjODEyZDg0ZDE2OWZlM2Iy
YjgyNzI1NjdhYmQ0MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRp
dmUtdHlwZS5qc29uLXJlc3VsdAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2
ZS10eXBlLmpzb24tcmVzdWx0CkBAIC02Myw3ICs2Myw3IEBACiAKICNpZiBFTkFCTEUoSU5TUEVD
VE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIAotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVz
LmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KIApAQCAtMTE5LDExICsxMTksMTQgQEAg
cHJpdmF0ZToKIAogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHR1
cGxlPgorI2luY2x1ZGUgPHd0Zi9FeHBlY3RlZC5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5o
PgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9y
IHsKIAotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKIAogCiAKQEAgLTE2NCw5ICsxNjcs
NyBAQCB0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKICNpbmNsdWRlICJUZXN0QmFja2VuZERp
c3BhdGNoZXJzLmgiCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVu
ZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CiAjaW5jbHVkZSA8d3RmL05l
dmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiAjaWYgRU5B
QkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAjaW5jbHVkZSAiVGVzdEFsdGVy
bmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgpAQCAtMjE0LDYgKzIxNSw3IEBAIG5hbWVzcGFjZSBJ
bnNwZWN0b3IgewogCiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUg
PHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewpAQCAtMjU3LDcg
KzI1OSw2IEBAIGNsYXNzIEZyb250ZW5kUm91dGVyOwogI2luY2x1ZGUgIlRlc3RGcm9udGVuZERp
c3BhdGNoZXJzLmgiCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVu
ZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogbmFtZXNwYWNlIElu
c3BlY3RvciB7CiAKQEAgLTI5OCw3ICsyOTksOSBAQCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKICNw
cmFnbWEgb25jZQogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xU
eXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL0pTT05W
YWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKQEAgLTM1Nyw4ICszNjAsNyBA
QCB1c2luZyBSZW1vdGVPYmplY3RJZCA9IGludDsKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAKLSNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4K
LSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMu
aD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9u
LWFycmF5LXR5cGUuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24t
cmVzdWx0CmluZGV4IGQ4ODgwYzYzZTMzNzhjNWNmZTMwOGNhZmRmODRjYzk4NzQ5MmJiZmMuLjk0
MGYxNTgwYmRjMWQ5YmNhNDQwMTQ3NDE1MmEyM2JiMjU0YjE5MGYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRl
Y2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbi1yZXN1bHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tYXJy
YXktdHlwZS5qc29uLXJlc3VsdApAQCAtNjgsNyArNjgsNyBAQCBJbnNwZWN0b3JCYWNrZW5kLmFj
dGl2YXRlRG9tYWluKCJEZWJ1Z2dlciIsIG51bGwpOwogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9B
TFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgor
I2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CiAKQEAgLTEyNCwxMSArMTI0LDE0IEBAIHByaXZh
dGU6CiAKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx0dXBsZT4K
KyNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAK
LXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCiAKIAogCkBAIC0xNjksOSArMTcyLDcgQEAg
dHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiAjaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRj
aGVycy5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0
ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRl
c3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogI2lmIEVOQUJMRShJ
TlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVC
YWNrZW5kRGlzcGF0Y2hlcnMuaCIKQEAgLTIxOSw2ICsyMjAsNyBAQCBuYW1lc3BhY2UgSW5zcGVj
dG9yIHsKIAogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDx3dGYv
SlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKQEAgLTI2Miw3ICsyNjQs
NiBAQCBjbGFzcyBGcm9udGVuZFJvdXRlcjsKICNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRj
aGVycy5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0
ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0
b3IgewogCkBAIC0zMDMsNyArMzA0LDkgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiAjcHJhZ21h
IG9uY2UKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMu
aD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVz
Lmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC0zMzEsNyArMzM0LDcgQEAgdXNp
bmcgTHVja3lOdW1iZXJzID0gSlNPTjo6QXJyYXlPZjxpbnQ+OwogdXNpbmcgQmFieU5hbWVzID0g
SlNPTjo6QXJyYXlPZjxTdHJpbmc+OwogdXNpbmcgTmV3T2JqZWN0cyA9IEpTT046OkFycmF5T2Y8
aW50PjsKIHVzaW5nIE9sZE9iamVjdHMgPSBKU09OOjpBcnJheU9mPGludD47Ci11c2luZyBTdG9w
UmVhc29ucyA9IEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OlJl
YXNvbj47Cit1c2luZyBTdG9wUmVhc29ucyA9IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkRlYnVn
Z2VyOjpSZWFzb24+OwogfSAvLyBSdW50aW1lCiAvLyBFbmQgb2YgdHlwZWRlZnMuCiAKQEAgLTM2
NSw3ICszNjgsNyBAQCBPcHRpb25hbDxQcm90b2NvbEVudW1UeXBlPiBwYXJzZUVudW1WYWx1ZUZy
b21TdHJpbmcoY29uc3QgU3RyaW5nJik7CiAKIC8vIEVudW1zIGluIHRoZSAnRGVidWdnZXInIERv
bWFpbgogdGVtcGxhdGU8PgotT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6
OlJlYXNvbj4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRl
YnVnZ2VyOjpSZWFzb24+KGNvbnN0IFN0cmluZyYpOworT3B0aW9uYWw8UHJvdG9jb2w6OkRlYnVn
Z2VyOjpSZWFzb24+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxQcm90b2NvbDo6RGVidWdnZXI6
OlJlYXNvbj4oY29uc3QgU3RyaW5nJik7CiAKIH0gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCiAK
QEAgLTQxNyw4ICs0MjAsNyBAQCBzdHJ1Y3QgRGVmYXVsdEhhc2g8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6RGVidWdnZXI6OlJlYXNvbj4gOiBJbnRIYXNoPEluc3BlY3Rvcjo6UAogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKIAotI2luY2x1ZGUgPHd0
Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3
dGYvQXNzZXJ0aW9ucy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtNDM5LDE2ICs0
NDEsMTYgQEAgU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKSB7CiAvLyBFbnVt
cyBpbiB0aGUgJ0RlYnVnZ2VyJyBEb21haW4KIAogdGVtcGxhdGU8PgotT3B0aW9uYWw8SW5zcGVj
dG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OlJlYXNvbj4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5n
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpSZWFzb24+KGNvbnN0IFN0cmluZyYgcHJv
dG9jb2xTdHJpbmcpCitPcHRpb25hbDxQcm90b2NvbDo6RGVidWdnZXI6OlJlYXNvbj4gcGFyc2VF
bnVtVmFsdWVGcm9tU3RyaW5nPFByb3RvY29sOjpEZWJ1Z2dlcjo6UmVhc29uPihjb25zdCBTdHJp
bmcmIHByb3RvY29sU3RyaW5nKQogewogICAgIHN0YXRpYyBjb25zdCBzaXplX3QgY29uc3RhbnRW
YWx1ZXNbXSA9IHsKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dl
cjo6UmVhc29uOjpEaWVkLAotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRl
YnVnZ2VyOjpSZWFzb246OkZhaW50ZWQsCi0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90
b2NvbDo6RGVidWdnZXI6OlJlYXNvbjo6SHVuZ3J5LAorICAgICAgICAoc2l6ZV90KVByb3RvY29s
OjpEZWJ1Z2dlcjo6UmVhc29uOjpEaWVkLAorICAgICAgICAoc2l6ZV90KVByb3RvY29sOjpEZWJ1
Z2dlcjo6UmVhc29uOjpGYWludGVkLAorICAgICAgICAoc2l6ZV90KVByb3RvY29sOjpEZWJ1Z2dl
cjo6UmVhc29uOjpIdW5ncnksCiAgICAgfTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDM7
ICsraSkKICAgICAgICAgaWYgKHByb3RvY29sU3RyaW5nID09IGVudW1fY29uc3RhbnRfdmFsdWVz
W2NvbnN0YW50VmFsdWVzW2ldXSkKLSAgICAgICAgICAgIHJldHVybiAoSW5zcGVjdG9yOjpQcm90
b2NvbDo6RGVidWdnZXI6OlJlYXNvbiljb25zdGFudFZhbHVlc1tpXTsKKyAgICAgICAgICAgIHJl
dHVybiAoUHJvdG9jb2w6OkRlYnVnZ2VyOjpSZWFzb24pY29uc3RhbnRWYWx1ZXNbaV07CiAKICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tZW51
bS10eXBlLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24tcmVzdWx0
CmluZGV4IDNhMmMyMDUyODMwNDRlMDAwNmIzMzFlZTMxNWIwNDM3YTRmYTViZjkuLjk1MTE2YmM1
MGFiZjI3OTQwNjQ1OTA3MTBmY2QzZTI0NmJmMGM1OGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0
aW9uLWVudW0tdHlwZS5qc29uLXJlc3VsdAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUu
anNvbi1yZXN1bHQKQEAgLTY5LDcgKzY5LDcgQEAgSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURv
bWFpbigiUnVudGltZSIsIG51bGwpOwogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVf
RElTUEFUQ0hFUlMpCiAKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgorI2luY2x1ZGUg
IlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3Rv
ckZyb250ZW5kUm91dGVyLmg+CiAKQEAgLTEyNSwxMSArMTI1LDE0IEBAIHByaXZhdGU6CiAKICNp
bmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx0dXBsZT4KKyNpbmNsdWRl
IDx3dGYvRXhwZWN0ZWQuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKLXR5cGVkZWYg
U3RyaW5nIEVycm9yU3RyaW5nOworCiAKIAogCkBAIC0xNzAsOSArMTczLDcgQEAgdHlwZWRlZiBT
dHJpbmcgRXJyb3JTdHJpbmc7CiAjaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgog
CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNp
bmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5o
PgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogI2lmIEVOQUJMRShJTlNQRUNUT1Jf
QUxURVJOQVRFX0RJU1BBVENIRVJTKQogI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlz
cGF0Y2hlcnMuaCIKQEAgLTIyMCw2ICsyMjEsNyBAQCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAog
I2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDx3dGYvSlNPTlZhbHVl
cy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKQEAgLTI2Myw3ICsyNjUsNiBAQCBjbGFz
cyBGcm9udGVuZFJvdXRlcjsKICNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgog
CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBA
IC0zMDQsNyArMzA1LDkgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiAjcHJhZ21hIG9uY2UKIAog
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KLSNpbmNs
dWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5j
bHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAK
IG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC0zNjIsOSArMzY1LDkgQEAgT3B0aW9uYWw8UHJv
dG9jb2xFbnVtVHlwZT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYpOwog
CiAvLyBFbnVtcyBpbiB0aGUgJ1J1bnRpbWUnIERvbWFpbgogdGVtcGxhdGU8PgotT3B0aW9uYWw8
SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHM+IHBhcnNlRW51bVZhbHVl
RnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpGYXJtQW5pbWFscz4oY29u
c3QgU3RyaW5nJik7CitPcHRpb25hbDxQcm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHM+IHBh
cnNlRW51bVZhbHVlRnJvbVN0cmluZzxQcm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHM+KGNv
bnN0IFN0cmluZyYpOwogdGVtcGxhdGU8PgotT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6
UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFscz4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlR3b0xlZ2dlZEFuaW1hbHM+KGNvbnN0IFN0cmluZyYp
OworT3B0aW9uYWw8UHJvdG9jb2w6OlJ1bnRpbWU6OlR3b0xlZ2dlZEFuaW1hbHM+IHBhcnNlRW51
bVZhbHVlRnJvbVN0cmluZzxQcm90b2NvbDo6UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFscz4oY29u
c3QgU3RyaW5nJik7CiAKIH0gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCiAKQEAgLTQxOCw4ICs0
MjEsNyBAQCBzdHJ1Y3QgRGVmYXVsdEhhc2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6
VHdvTGVnZ2VkQW5pbWFscz4gOiBJbnRIYXNoPElucwogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKIAotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5o
PgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9u
cy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtNDQ0LDMzICs0NDYsMzMgQEAgU3Ry
aW5nIGdldEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKSB7CiAvLyBFbnVtcyBpbiB0aGUgJ1J1
bnRpbWUnIERvbWFpbgogCiB0ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29s
OjpSdW50aW1lOjpGYXJtQW5pbWFscz4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkZhcm1BbmltYWxzPihjb25zdCBTdHJpbmcmIHByb3RvY29s
U3RyaW5nKQorT3B0aW9uYWw8UHJvdG9jb2w6OlJ1bnRpbWU6OkZhcm1BbmltYWxzPiBwYXJzZUVu
dW1WYWx1ZUZyb21TdHJpbmc8UHJvdG9jb2w6OlJ1bnRpbWU6OkZhcm1BbmltYWxzPihjb25zdCBT
dHJpbmcmIHByb3RvY29sU3RyaW5nKQogewogICAgIHN0YXRpYyBjb25zdCBzaXplX3QgY29uc3Rh
bnRWYWx1ZXNbXSA9IHsKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50
aW1lOjpGYXJtQW5pbWFsczo6UGlncywKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3Rv
Y29sOjpSdW50aW1lOjpGYXJtQW5pbWFsczo6Q293cywKLSAgICAgICAgKHNpemVfdClJbnNwZWN0
b3I6OlByb3RvY29sOjpSdW50aW1lOjpGYXJtQW5pbWFsczo6Q2F0cywKLSAgICAgICAgKHNpemVf
dClJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpGYXJtQW5pbWFsczo6SGVucywKKyAgICAg
ICAgKHNpemVfdClQcm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHM6OlBpZ3MsCisgICAgICAg
IChzaXplX3QpUHJvdG9jb2w6OlJ1bnRpbWU6OkZhcm1BbmltYWxzOjpDb3dzLAorICAgICAgICAo
c2l6ZV90KVByb3RvY29sOjpSdW50aW1lOjpGYXJtQW5pbWFsczo6Q2F0cywKKyAgICAgICAgKHNp
emVfdClQcm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHM6OkhlbnMsCiAgICAgfTsKICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IDQ7ICsraSkKICAgICAgICAgaWYgKHByb3RvY29sU3RyaW5n
ID09IGVudW1fY29uc3RhbnRfdmFsdWVzW2NvbnN0YW50VmFsdWVzW2ldXSkKLSAgICAgICAgICAg
IHJldHVybiAoSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHMpY29uc3Rh
bnRWYWx1ZXNbaV07CisgICAgICAgICAgICByZXR1cm4gKFByb3RvY29sOjpSdW50aW1lOjpGYXJt
QW5pbWFscyljb25zdGFudFZhbHVlc1tpXTsKIAogICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiB9
CiAKIHRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlR3
b0xlZ2dlZEFuaW1hbHM+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpSdW50aW1lOjpUd29MZWdnZWRBbmltYWxzPihjb25zdCBTdHJpbmcmIHByb3RvY29sU3Ry
aW5nKQorT3B0aW9uYWw8UHJvdG9jb2w6OlJ1bnRpbWU6OlR3b0xlZ2dlZEFuaW1hbHM+IHBhcnNl
RW51bVZhbHVlRnJvbVN0cmluZzxQcm90b2NvbDo6UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFscz4o
Y29uc3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKIHsKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90
IGNvbnN0YW50VmFsdWVzW10gPSB7Ci0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2Nv
bDo6UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFsczo6RHVja3MsCi0gICAgICAgIChzaXplX3QpSW5z
cGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFsczo6SGVucywKLSAgICAg
ICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpUd29MZWdnZWRBbmltYWxz
OjpDcm93cywKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpU
d29MZWdnZWRBbmltYWxzOjpGbGFtaW5nb3MsCisgICAgICAgIChzaXplX3QpUHJvdG9jb2w6OlJ1
bnRpbWU6OlR3b0xlZ2dlZEFuaW1hbHM6OkR1Y2tzLAorICAgICAgICAoc2l6ZV90KVByb3RvY29s
OjpSdW50aW1lOjpUd29MZWdnZWRBbmltYWxzOjpIZW5zLAorICAgICAgICAoc2l6ZV90KVByb3Rv
Y29sOjpSdW50aW1lOjpUd29MZWdnZWRBbmltYWxzOjpDcm93cywKKyAgICAgICAgKHNpemVfdClQ
cm90b2NvbDo6UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFsczo6RmxhbWluZ29zLAogICAgIH07CiAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCA0OyArK2kpCiAgICAgICAgIGlmIChwcm90b2NvbFN0
cmluZyA9PSBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb25zdGFudFZhbHVlc1tpXV0pCi0gICAgICAg
ICAgICByZXR1cm4gKEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlR3b0xlZ2dlZEFuaW1h
bHMpY29uc3RhbnRWYWx1ZXNbaV07CisgICAgICAgICAgICByZXR1cm4gKFByb3RvY29sOjpSdW50
aW1lOjpUd29MZWdnZWRBbmltYWxzKWNvbnN0YW50VmFsdWVzW2ldOwogCiAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpz
b24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbi1yZXN1bHQKaW5kZXgg
MzI4ZmVkMjNkYzRjYTdmMTg4NTkwYjYzNDRkNWJmN2U0NzNkZGMwMy4uYmE5ZjE3YzYyNTBkY2Uw
NjhjZjk0NjU1OTQ3MGRkNDViNjE3NzQwNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tb2Jq
ZWN0LXR5cGUuanNvbi1yZXN1bHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNv
bi1yZXN1bHQKQEAgLTcwLDcgKzcwLDcgQEAgSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFp
bigiRGF0YWJhc2UiLCBudWxsKTsKIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJ
U1BBVENIRVJTKQogCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKKyNpbmNsdWRlICJU
ZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXIuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JG
cm9udGVuZFJvdXRlci5oPgogCkBAIC0xMjYsMTEgKzEyNiwxNCBAQCBwcml2YXRlOgogCiAjaW5j
bHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0lu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8dHVwbGU+CisjaW5jbHVkZSA8
d3RmL0V4cGVjdGVkLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCi10eXBlZGVmIFN0
cmluZyBFcnJvclN0cmluZzsKKwogCiAKIApAQCAtMTcxLDkgKzE3NCw3IEBAIHR5cGVkZWYgU3Ry
aW5nIEVycm9yU3RyaW5nOwogI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKIAog
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5j
bHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4K
LSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FM
VEVSTkFURV9ESVNQQVRDSEVSUykKICNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3Bh
dGNoZXJzLmgiCkBAIC0yMjEsNiArMjIyLDcgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKICNp
bmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMu
aD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CkBAIC0yNjQsNyArMjY2LDYgQEAgY2xhc3Mg
RnJvbnRlbmRSb3V0ZXI7CiAjaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKIAog
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5j
bHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAt
MzA1LDcgKzMwNiw5IEBAIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogI3ByYWdtYSBvbmNlCiAKICNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+Ci0jaW5jbHVk
ZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1
ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBu
YW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtMzMzLDcgKzMzNiw3IEBAIGNsYXNzIFBhcmFtZXRl
ckJ1bmRsZTsKIAogLy8gVHlwZWRlZnMuCiBuYW1lc3BhY2UgRGF0YWJhc2UgewotdXNpbmcgRXJy
b3JMaXN0ID0gSlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJy
b3I+OwordXNpbmcgRXJyb3JMaXN0ID0gSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6RGF0YWJhc2U6
OkVycm9yPjsKIH0gLy8gRGF0YWJhc2UKIC8vIEVuZCBvZiB0eXBlZGVmcy4KIApAQCAtMzUxLDcg
KzM1NCw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFN0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1
ZShUIGVudW1WYWx1ZSkKIG5hbWVzcGFjZSBEYXRhYmFzZSB7CiAKIC8qIERhdGFiYXNlIGVycm9y
LiAqLwotY2xhc3MgRXJyb3IgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7CitjbGFzcyBFcnJv
ciBmaW5hbCA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKIHB1YmxpYzoKICAgICBlbnVtIHsK
ICAgICAgICAgTm9GaWVsZHNTZXQgPSAwLApAQCAtMzc4LDE3ICszODEsMTcgQEAgcHVibGljOgog
ICAgICAgICBmcmllbmQgY2xhc3MgRXJyb3I7CiAgICAgcHVibGljOgogCi0gICAgICAgIEJ1aWxk
ZXI8U1RBVEUgfCBNZXNzYWdlU2V0PiYgc2V0TWVzc2FnZShjb25zdCBTdHJpbmcmIHZhbHVlKQor
ICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTWVzc2FnZVNldD4mIHNldE1lc3NhZ2UoY29uc3QgU3Ry
aW5nJiBpbl9tZXNzYWdlKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCgh
KFNUQVRFICYgTWVzc2FnZVNldCksIHByb3BlcnR5X21lc3NhZ2VfYWxyZWFkeV9zZXQpOwotICAg
ICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibWVzc2FnZSJfcywgdmFsdWUpOworICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibWVzc2FnZSJfcywgaW5fbWVzc2FnZSk7CiAgICAg
ICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE1lc3NhZ2VTZXQ+KCk7CiAgICAgICAgIH0KIAotICAg
ICAgICBCdWlsZGVyPFNUQVRFIHwgQ29kZVNldD4mIHNldENvZGUoaW50IHZhbHVlKQorICAgICAg
ICBCdWlsZGVyPFNUQVRFIHwgQ29kZVNldD4mIHNldENvZGUoaW50IGluX2NvZGUpCiAgICAgICAg
IHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBDb2RlU2V0KSwgcHJvcGVy
dHlfY29kZV9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0SW50ZWdlcigi
Y29kZSJfcywgdmFsdWUpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldEludGVnZXIoImNvZGUi
X3MsIGluX2NvZGUpOwogICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxDb2RlU2V0PigpOwog
ICAgICAgICB9CiAKQEAgLTQyNCwxMyArNDI3LDE0IEBAIGVudW0gY2xhc3MgTW91c2VCdXR0b24g
ewogICAgIFJpZ2h0ID0gMywKIH07IC8vIGVudW0gY2xhc3MgTW91c2VCdXR0b24KIAotY2xhc3Mg
T3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGUgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7CitjbGFz
cyBPcHRpb25hbFBhcmFtZXRlckJ1bmRsZSBmaW5hbCA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNl
IHsKIHB1YmxpYzoKICAgICAvLyBOYW1lZCBhZnRlciBwcm9wZXJ0eSBuYW1lICdkaXJlY3Rpb25h
bGl0eScgd2hpbGUgZ2VuZXJhdGluZyBPcHRpb25hbFBhcmFtZXRlckJ1bmRsZS4KICAgICBlbnVt
IGNsYXNzIERpcmVjdGlvbmFsaXR5IHsKICAgICAgICAgTFRSID0gNCwKICAgICAgICAgUlRMID0g
NSwKICAgICB9OyAvLyBlbnVtIGNsYXNzIERpcmVjdGlvbmFsaXR5CisKICAgICBlbnVtIHsKICAg
ICAgICAgTm9GaWVsZHNTZXQgPSAwLAogICAgICAgICBBbGxGaWVsZHNTZXQgPSAwCkBAIC00NzUs
NTkgKzQ3OSw2MCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0
PihKU09OOjpPYmplY3Q6OmNyZWF0ZSgpKTsKICAgICB9CiAKLSAgICB2b2lkIHNldENvbHVtbk5h
bWVzKFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+IHZhbHVlKQorICAgIHZvaWQgc2V0Q29s
dW1uTmFtZXMoUmVmPEpTT046OkFycmF5T2Y8U3RyaW5nPj4mJiBpbl9vcHRfY29sdW1uTmFtZXMp
CiAgICAgewotICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXRBcnJheSgiY29sdW1uTmFtZXMi
X3MsIFdURk1vdmUodmFsdWUpKTsKKyAgICAgICAgSlNPTjo6T2JqZWN0QmFzZTo6c2V0QXJyYXko
ImNvbHVtbk5hbWVzIl9zLCBXVEZNb3ZlKGluX29wdF9jb2x1bW5OYW1lcykpOwogICAgIH0KIAot
ICAgIHZvaWQgc2V0QnV0dG9ucyhSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpEYXRhYmFzZTo6TW91c2VCdXR0b24+PiB2YWx1ZSkKKyAgICB2b2lkIHNldEJ1dHRvbnMo
UmVmPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbj4+JiYgaW5f
b3B0X2J1dHRvbnMpCiAgICAgewotICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXRBcnJheSgi
YnV0dG9ucyJfcywgV1RGTW92ZSh2YWx1ZSkpOworICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpz
ZXRBcnJheSgiYnV0dG9ucyJfcywgV1RGTW92ZShpbl9vcHRfYnV0dG9ucykpOwogICAgIH0KIAot
ICAgIHZvaWQgc2V0RGlyZWN0aW9uYWxpdHkoRGlyZWN0aW9uYWxpdHkgdmFsdWUpCisgICAgdm9p
ZCBzZXREaXJlY3Rpb25hbGl0eShEaXJlY3Rpb25hbGl0eSBpbl9vcHRfZGlyZWN0aW9uYWxpdHkp
CiAgICAgewotICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXRTdHJpbmcoImRpcmVjdGlvbmFs
aXR5Il9zLCBJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50
VmFsdWUodmFsdWUpKTsKKyAgICAgICAgSlNPTjo6T2JqZWN0QmFzZTo6c2V0U3RyaW5nKCJkaXJl
Y3Rpb25hbGl0eSJfcywgUHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1
ZShpbl9vcHRfZGlyZWN0aW9uYWxpdHkpKTsKICAgICB9CiAKLSAgICB2b2lkIHNldE5vdGVzKGNv
bnN0IFN0cmluZyYgdmFsdWUpCisgICAgdm9pZCBzZXROb3Rlcyhjb25zdCBTdHJpbmcmIGluX29w
dF9ub3RlcykKICAgICB7Ci0gICAgICAgIEpTT046Ok9iamVjdEJhc2U6OnNldFN0cmluZygibm90
ZXMiX3MsIHZhbHVlKTsKKyAgICAgICAgSlNPTjo6T2JqZWN0QmFzZTo6c2V0U3RyaW5nKCJub3Rl
cyJfcywgaW5fb3B0X25vdGVzKTsKICAgICB9CiAKLSAgICB2b2lkIHNldFRpbWVzdGFtcChkb3Vi
bGUgdmFsdWUpCisgICAgdm9pZCBzZXRUaW1lc3RhbXAoZG91YmxlIGluX29wdF90aW1lc3RhbXAp
CiAgICAgewotICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXREb3VibGUoInRpbWVzdGFtcCJf
cywgdmFsdWUpOworICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXREb3VibGUoInRpbWVzdGFt
cCJfcywgaW5fb3B0X3RpbWVzdGFtcCk7CiAgICAgfQogCi0gICAgdm9pZCBzZXRWYWx1ZXMoUmVm
UHRyPEpTT046Ok9iamVjdD4gdmFsdWUpCisgICAgdm9pZCBzZXRWYWx1ZXMoUmVmPEpTT046Ok9i
amVjdD4mJiBpbl9vcHRfdmFsdWVzKQogICAgIHsKLSAgICAgICAgSlNPTjo6T2JqZWN0QmFzZTo6
c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIFdURk1vdmUodmFsdWUpKTsKKyAgICAgICAgSlNPTjo6T2Jq
ZWN0QmFzZTo6c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIFdURk1vdmUoaW5fb3B0X3ZhbHVlcykpOwog
ICAgIH0KIAotICAgIHZvaWQgc2V0UGF5bG9hZChSZWZQdHI8SlNPTjo6VmFsdWU+IHZhbHVlKQor
ICAgIHZvaWQgc2V0UGF5bG9hZChSZWY8SlNPTjo6VmFsdWU+JiYgaW5fb3B0X3BheWxvYWQpCiAg
ICAgewotICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXRWYWx1ZSgicGF5bG9hZCJfcywgV1RG
TW92ZSh2YWx1ZSkpOworICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXRWYWx1ZSgicGF5bG9h
ZCJfcywgV1RGTW92ZShpbl9vcHRfcGF5bG9hZCkpOwogICAgIH0KIAotICAgIHZvaWQgc2V0RXJy
b3IoUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4gdmFsdWUpCisg
ICAgdm9pZCBzZXRFcnJvcihSZWY8UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4mJiBpbl9vcHRf
ZXJyb3IpCiAgICAgewotICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXRPYmplY3QoImVycm9y
Il9zLCBXVEZNb3ZlKHZhbHVlKSk7CisgICAgICAgIEpTT046Ok9iamVjdEJhc2U6OnNldE9iamVj
dCgiZXJyb3IiX3MsIFdURk1vdmUoaW5fb3B0X2Vycm9yKSk7CiAgICAgfQogCi0gICAgdm9pZCBz
ZXRFcnJvckxpc3QoUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvckxp
c3Q+IHZhbHVlKQorICAgIHZvaWQgc2V0RXJyb3JMaXN0KFJlZjxQcm90b2NvbDo6RGF0YWJhc2U6
OkVycm9yTGlzdD4mJiBpbl9vcHRfZXJyb3JMaXN0KQogICAgIHsKLSAgICAgICAgSlNPTjo6T2Jq
ZWN0QmFzZTo6c2V0QXJyYXkoImVycm9yTGlzdCJfcywgV1RGTW92ZSh2YWx1ZSkpOworICAgICAg
ICBKU09OOjpPYmplY3RCYXNlOjpzZXRBcnJheSgiZXJyb3JMaXN0Il9zLCBXVEZNb3ZlKGluX29w
dF9lcnJvckxpc3QpKTsKICAgICB9CiB9OwogCi1jbGFzcyBQYXJhbWV0ZXJCdW5kbGUgOiBwdWJs
aWMgSlNPTjo6T2JqZWN0QmFzZSB7CitjbGFzcyBQYXJhbWV0ZXJCdW5kbGUgZmluYWwgOiBwdWJs
aWMgSlNPTjo6T2JqZWN0QmFzZSB7CiBwdWJsaWM6CiAgICAgLy8gTmFtZWQgYWZ0ZXIgcHJvcGVy
dHkgbmFtZSAnZGlyZWN0aW9uYWxpdHknIHdoaWxlIGdlbmVyYXRpbmcgUGFyYW1ldGVyQnVuZGxl
LgogICAgIGVudW0gY2xhc3MgRGlyZWN0aW9uYWxpdHkgewogICAgICAgICBMVFIgPSA0LAogICAg
ICAgICBSVEwgPSA1LAogICAgIH07IC8vIGVudW0gY2xhc3MgRGlyZWN0aW9uYWxpdHkKKwogICAg
IGVudW0gewogICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCiAgICAgICAgIENvbHVtbk5hbWVzU2V0
ID0gMSA8PCAwLApAQCAtNTYwLDY2ICs1NjUsNjYgQEAgcHVibGljOgogICAgICAgICBmcmllbmQg
Y2xhc3MgUGFyYW1ldGVyQnVuZGxlOwogICAgIHB1YmxpYzoKIAotICAgICAgICBCdWlsZGVyPFNU
QVRFIHwgQ29sdW1uTmFtZXNTZXQ+JiBzZXRDb2x1bW5OYW1lcyhSZWZQdHI8SlNPTjo6QXJyYXlP
ZjxTdHJpbmc+PiB2YWx1ZSkKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IENvbHVtbk5hbWVzU2V0
PiYgc2V0Q29sdW1uTmFtZXMoUmVmPEpTT046OkFycmF5T2Y8U3RyaW5nPj4mJiBpbl9jb2x1bW5O
YW1lcykKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIENv
bHVtbk5hbWVzU2V0KSwgcHJvcGVydHlfY29sdW1uTmFtZXNfYWxyZWFkeV9zZXQpOwotICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgdmFsdWUpOworICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgV1RGTW92ZShpbl9jb2x1
bW5OYW1lcykpOwogICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxDb2x1bW5OYW1lc1NldD4o
KTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBCdXR0b25zU2V0PiYgc2V0
QnV0dG9ucyhSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFz
ZTo6TW91c2VCdXR0b24+PiB2YWx1ZSkKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IEJ1dHRvbnNT
ZXQ+JiBzZXRCdXR0b25zKFJlZjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpEYXRhYmFzZTo6TW91
c2VCdXR0b24+PiYmIGluX2J1dHRvbnMpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKCEoU1RBVEUgJiBCdXR0b25zU2V0KSwgcHJvcGVydHlfYnV0dG9uc19hbHJlYWR5X3Nl
dCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0QXJyYXkoImJ1dHRvbnMiX3MsIHZhbHVlKTsK
KyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRBcnJheSgiYnV0dG9ucyJfcywgV1RGTW92ZShpbl9i
dXR0b25zKSk7CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEJ1dHRvbnNTZXQ+KCk7CiAg
ICAgICAgIH0KIAotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgRGlyZWN0aW9uYWxpdHlTZXQ+JiBz
ZXREaXJlY3Rpb25hbGl0eShEaXJlY3Rpb25hbGl0eSB2YWx1ZSkKKyAgICAgICAgQnVpbGRlcjxT
VEFURSB8IERpcmVjdGlvbmFsaXR5U2V0PiYgc2V0RGlyZWN0aW9uYWxpdHkoRGlyZWN0aW9uYWxp
dHkgaW5fZGlyZWN0aW9uYWxpdHkpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKCEoU1RBVEUgJiBEaXJlY3Rpb25hbGl0eVNldCksIHByb3BlcnR5X2RpcmVjdGlvbmFsaXR5
X2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoImRpcmVjdGlv
bmFsaXR5Il9zLCBJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0
YW50VmFsdWUodmFsdWUpKTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoImRpcmVj
dGlvbmFsaXR5Il9zLCBQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVl
KGluX2RpcmVjdGlvbmFsaXR5KSk7CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPERpcmVj
dGlvbmFsaXR5U2V0PigpOwogICAgICAgICB9CiAKLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IE5v
dGVzU2V0PiYgc2V0Tm90ZXMoY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICAgICAgQnVpbGRlcjxT
VEFURSB8IE5vdGVzU2V0PiYgc2V0Tm90ZXMoY29uc3QgU3RyaW5nJiBpbl9ub3RlcykKICAgICAg
ICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE5vdGVzU2V0KSwgcHJv
cGVydHlfbm90ZXNfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmlu
Zygibm90ZXMiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm5v
dGVzIl9zLCBpbl9ub3Rlcyk7CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE5vdGVzU2V0
PigpOwogICAgICAgICB9CiAKLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IFRpbWVzdGFtcFNldD4m
IHNldFRpbWVzdGFtcChkb3VibGUgdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBUaW1l
c3RhbXBTZXQ+JiBzZXRUaW1lc3RhbXAoZG91YmxlIGluX3RpbWVzdGFtcCkKICAgICAgICAgewog
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFRpbWVzdGFtcFNldCksIHByb3Bl
cnR5X3RpbWVzdGFtcF9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0RG91
YmxlKCJ0aW1lc3RhbXAiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXREb3Vi
bGUoInRpbWVzdGFtcCJfcywgaW5fdGltZXN0YW1wKTsKICAgICAgICAgICAgIHJldHVybiBjYXN0
U3RhdGU8VGltZXN0YW1wU2V0PigpOwogICAgICAgICB9CiAKLSAgICAgICAgQnVpbGRlcjxTVEFU
RSB8IFZhbHVlc1NldD4mIHNldFZhbHVlcyhSZWZQdHI8SlNPTjo6T2JqZWN0PiB2YWx1ZSkKKyAg
ICAgICAgQnVpbGRlcjxTVEFURSB8IFZhbHVlc1NldD4mIHNldFZhbHVlcyhSZWY8SlNPTjo6T2Jq
ZWN0PiYmIGluX3ZhbHVlcykKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
IShTVEFURSAmIFZhbHVlc1NldCksIHByb3BlcnR5X3ZhbHVlc19hbHJlYWR5X3NldCk7Ci0gICAg
ICAgICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIHZhbHVlKTsKKyAgICAgICAg
ICAgIG1fcmVzdWx0LT5zZXRPYmplY3QoInZhbHVlcyJfcywgV1RGTW92ZShpbl92YWx1ZXMpKTsK
ICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VmFsdWVzU2V0PigpOwogICAgICAgICB9CiAK
LSAgICAgICAgQnVpbGRlcjxTVEFURSB8IFBheWxvYWRTZXQ+JiBzZXRQYXlsb2FkKFJlZlB0cjxK
U09OOjpWYWx1ZT4gdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBQYXlsb2FkU2V0PiYg
c2V0UGF5bG9hZChSZWY8SlNPTjo6VmFsdWU+JiYgaW5fcGF5bG9hZCkKICAgICAgICAgewogICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFBheWxvYWRTZXQpLCBwcm9wZXJ0eV9w
YXlsb2FkX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRWYWx1ZSgicGF5
bG9hZCJfcywgdmFsdWUpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldFZhbHVlKCJwYXlsb2Fk
Il9zLCBXVEZNb3ZlKGluX3BheWxvYWQpKTsKICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8
UGF5bG9hZFNldD4oKTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBFcnJv
clNldD4mIHNldEVycm9yKFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJy
b3I+IHZhbHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRFIHwgRXJyb3JTZXQ+JiBzZXRFcnJvcihS
ZWY8UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4mJiBpbl9lcnJvcikKICAgICAgICAgewogICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEVycm9yU2V0KSwgcHJvcGVydHlfZXJy
b3JfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldE9iamVjdCgiZXJyb3Ii
X3MsIHZhbHVlKTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRPYmplY3QoImVycm9yIl9zLCBX
VEZNb3ZlKGluX2Vycm9yKSk7CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEVycm9yU2V0
PigpOwogICAgICAgICB9CiAKLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IEVycm9yTGlzdFNldD4m
IHNldEVycm9yTGlzdChSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9y
TGlzdD4gdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBFcnJvckxpc3RTZXQ+JiBzZXRF
cnJvckxpc3QoUmVmPFByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3JMaXN0PiYmIGluX2Vycm9yTGlz
dCkKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEVycm9y
TGlzdFNldCksIHByb3BlcnR5X2Vycm9yTGlzdF9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBt
X3Jlc3VsdC0+c2V0QXJyYXkoImVycm9yTGlzdCJfcywgdmFsdWUpOworICAgICAgICAgICAgbV9y
ZXN1bHQtPnNldEFycmF5KCJlcnJvckxpc3QiX3MsIFdURk1vdmUoaW5fZXJyb3JMaXN0KSk7CiAg
ICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEVycm9yTGlzdFNldD4oKTsKICAgICAgICAgfQog
CkBAIC02NTUsNyArNjYwLDcgQEAgcHVibGljOgogfTsKIAogLyogQ29uZmxpY3RlZCBuYW1lcyBt
YXkgY2F1c2UgZ2VuZXJhdGVkIGdldHRlcnMvc2V0dGVycyB0byBjbGFzaCB3aXRoIGJ1aWx0LWlu
IEluc3BlY3Rvck9iamVjdCBtZXRob2RzLiAqLwotY2xhc3MgT2JqZWN0V2l0aFByb3BlcnR5TmFt
ZUNvbmZsaWN0cyA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKK2NsYXNzIE9iamVjdFdpdGhQ
cm9wZXJ0eU5hbWVDb25mbGljdHMgZmluYWwgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7CiBw
dWJsaWM6CiAgICAgZW51bSB7CiAgICAgICAgIE5vRmllbGRzU2V0ID0gMCwKQEAgLTY4NSwzOCAr
NjkwLDM4IEBAIHB1YmxpYzoKICAgICAgICAgZnJpZW5kIGNsYXNzIE9iamVjdFdpdGhQcm9wZXJ0
eU5hbWVDb25mbGljdHM7CiAgICAgcHVibGljOgogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBJ
bnRlZ2VyU2V0PiYgc2V0SW50ZWdlcihjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgICAgICBCdWls
ZGVyPFNUQVRFIHwgSW50ZWdlclNldD4mIHNldEludGVnZXIoY29uc3QgU3RyaW5nJiBpbl9pbnRl
Z2VyKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgSW50
ZWdlclNldCksIHByb3BlcnR5X2ludGVnZXJfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9y
ZXN1bHQtPnNldFN0cmluZygiaW50ZWdlciJfcywgdmFsdWUpOworICAgICAgICAgICAgbV9yZXN1
bHQtPnNldFN0cmluZygiaW50ZWdlciJfcywgaW5faW50ZWdlcik7CiAgICAgICAgICAgICByZXR1
cm4gY2FzdFN0YXRlPEludGVnZXJTZXQ+KCk7CiAgICAgICAgIH0KIAotICAgICAgICBCdWlsZGVy
PFNUQVRFIHwgQXJyYXlTZXQ+JiBzZXRBcnJheShjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgICAg
ICBCdWlsZGVyPFNUQVRFIHwgQXJyYXlTZXQ+JiBzZXRBcnJheShjb25zdCBTdHJpbmcmIGluX2Fy
cmF5KQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQXJy
YXlTZXQpLCBwcm9wZXJ0eV9hcnJheV9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3Vs
dC0+c2V0U3RyaW5nKCJhcnJheSJfcywgdmFsdWUpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNl
dFN0cmluZygiYXJyYXkiX3MsIGluX2FycmF5KTsKICAgICAgICAgICAgIHJldHVybiBjYXN0U3Rh
dGU8QXJyYXlTZXQ+KCk7CiAgICAgICAgIH0KIAotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgU3Ry
aW5nU2V0PiYgc2V0U3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCBTdHJpbmdTZXQ+JiBzZXRTdHJpbmcoY29uc3QgU3RyaW5nJiBpbl9zdHJpbmcpCiAg
ICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTdHJpbmdTZXQp
LCBwcm9wZXJ0eV9zdHJpbmdfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNl
dFN0cmluZygic3RyaW5nIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3Ry
aW5nKCJzdHJpbmciX3MsIGluX3N0cmluZyk7CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRl
PFN0cmluZ1NldD4oKTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBWYWx1
ZVNldD4mIHNldFZhbHVlKGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8U1RB
VEUgfCBWYWx1ZVNldD4mIHNldFZhbHVlKGNvbnN0IFN0cmluZyYgaW5fdmFsdWUpCiAgICAgICAg
IHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBWYWx1ZVNldCksIHByb3Bl
cnR5X3ZhbHVlX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmco
InZhbHVlIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ2YWx1
ZSJfcywgaW5fdmFsdWUpOwogICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxWYWx1ZVNldD4o
KTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBPYmplY3RTZXQ+JiBzZXRP
YmplY3QoY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IE9iamVj
dFNldD4mIHNldE9iamVjdChjb25zdCBTdHJpbmcmIGluX29iamVjdCkKICAgICAgICAgewogICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE9iamVjdFNldCksIHByb3BlcnR5X29i
amVjdF9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJvYmpl
Y3QiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm9iamVjdCJf
cywgaW5fb2JqZWN0KTsKICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8T2JqZWN0U2V0Pigp
OwogICAgICAgICB9CiAKQEAgLTc0NywxNyArNzUyLDY2IEBAIHB1YmxpYzoKICAgICB9CiB9Owog
CisvKiBBbiBvcGVuIG9iamVjdCB0aGF0IGRvZXNuJ3QgaGF2ZSBhbnkgcHJlZGVmaW5lZCBmaWVs
ZHMuICovCitjbGFzcyBEdW1teU9iamVjdCBmaW5hbCA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNl
IHsKK3B1YmxpYzoKKyAgICBlbnVtIHsKKyAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAorICAgICAg
ICBBbGxGaWVsZHNTZXQgPSAwCisgICAgfTsKKworICAgIHRlbXBsYXRlPGludCBTVEFURT4KKyAg
ICBjbGFzcyBCdWlsZGVyIHsKKyAgICBwcml2YXRlOgorICAgICAgICBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiBtX3Jlc3VsdDsKKworICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFU
RSB8IFNURVA+JiBjYXN0U3RhdGUoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gKnJl
aW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CisgICAgICAgIH0K
KworICAgICAgICBCdWlsZGVyKFJlZjwvKkR1bW15T2JqZWN0Ki9KU09OOjpPYmplY3Q+JiYgb2Jq
ZWN0KQorICAgICAgICAgICAgOiBtX3Jlc3VsdChXVEZNb3ZlKG9iamVjdCkpCisgICAgICAgIHsK
KyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVy
X2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOworICAgICAgICB9CisgICAgICAgIGZyaWVuZCBj
bGFzcyBEdW1teU9iamVjdDsKKyAgICBwdWJsaWM6CisKKyAgICAgICAgUmVmPER1bW15T2JqZWN0
PiByZWxlYXNlKCkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUg
PT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKKyAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKHNpemVvZihEdW1teU9iamVjdCkgPT0gc2l6ZW9mKEpTT046Ok9iamVjdCksIGNh
bm5vdF9jYXN0KTsKKworICAgICAgICAgICAgUmVmPEpTT046Ok9iamVjdD4ganNvblJlc3VsdCA9
IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7CisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFdU
Rk1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPER1bW15T2JqZWN0Pio+KCZqc29uUmVzdWx0KSk7
CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgfTsKKworICAgIC8q
CisgICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgorICAgICAqIFJlZjxEdW1teU9iamVjdD4g
cmVzdWx0ID0gRHVtbXlPYmplY3Q6OmNyZWF0ZSgpCisgICAgICogICAgIC5yZWxlYXNlKCk7Cisg
ICAgICovCisgICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCisgICAgewor
ICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSlNPTjo6T2JqZWN0OjpjcmVhdGUo
KSk7CisgICAgfQorfTsKKwogfSAvLyBEYXRhYmFzZQogCiBuYW1lc3BhY2UgVGVzdCB7CiAKLWNs
YXNzIFBhcmFtZXRlckJ1bmRsZSA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKK2NsYXNzIFBh
cmFtZXRlckJ1bmRsZSBmaW5hbCA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKIHB1YmxpYzoK
ICAgICAvLyBOYW1lZCBhZnRlciBwcm9wZXJ0eSBuYW1lICdkaXJlY3Rpb25hbGl0eScgd2hpbGUg
Z2VuZXJhdGluZyBQYXJhbWV0ZXJCdW5kbGUuCiAgICAgZW51bSBjbGFzcyBEaXJlY3Rpb25hbGl0
eSB7CiAgICAgICAgIExUUiA9IDQsCiAgICAgICAgIFJUTCA9IDUsCiAgICAgfTsgLy8gZW51bSBj
bGFzcyBEaXJlY3Rpb25hbGl0eQorCiAgICAgZW51bSB7CiAgICAgICAgIE5vRmllbGRzU2V0ID0g
MCwKICAgICAgICAgRGlyZWN0aW9uYWxpdHlTZXQgPSAxIDw8IDAsCkBAIC03ODksNTkgKzg0Myw1
OSBAQCBwdWJsaWM6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBQYXJhbWV0ZXJCdW5kbGU7CiAgICAg
cHVibGljOgogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBEaXJlY3Rpb25hbGl0eVNldD4mIHNl
dERpcmVjdGlvbmFsaXR5KERpcmVjdGlvbmFsaXR5IHZhbHVlKQorICAgICAgICBCdWlsZGVyPFNU
QVRFIHwgRGlyZWN0aW9uYWxpdHlTZXQ+JiBzZXREaXJlY3Rpb25hbGl0eShEaXJlY3Rpb25hbGl0
eSBpbl9kaXJlY3Rpb25hbGl0eSkKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoIShTVEFURSAmIERpcmVjdGlvbmFsaXR5U2V0KSwgcHJvcGVydHlfZGlyZWN0aW9uYWxpdHlf
YWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygiZGlyZWN0aW9u
YWxpdHkiX3MsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29uc3Rh
bnRWYWx1ZSh2YWx1ZSkpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygiZGlyZWN0
aW9uYWxpdHkiX3MsIFByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUo
aW5fZGlyZWN0aW9uYWxpdHkpKTsKICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8RGlyZWN0
aW9uYWxpdHlTZXQ+KCk7CiAgICAgICAgIH0KIAotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQnV0
dG9uc1NldD4mIHNldEJ1dHRvbnMoUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90
b2NvbDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9uPj4gdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8U1RB
VEUgfCBCdXR0b25zU2V0PiYgc2V0QnV0dG9ucyhSZWY8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6
RGF0YWJhc2U6Ok1vdXNlQnV0dG9uPj4mJiBpbl9idXR0b25zKQogICAgICAgICB7CiAgICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQnV0dG9uc1NldCksIHByb3BlcnR5X2J1dHRv
bnNfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldEFycmF5KCJidXR0b25z
Il9zLCB2YWx1ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0QXJyYXkoImJ1dHRvbnMiX3Ms
IFdURk1vdmUoaW5fYnV0dG9ucykpOwogICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxCdXR0
b25zU2V0PigpOwogICAgICAgICB9CiAKLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IENvbHVtbk5h
bWVzU2V0PiYgc2V0Q29sdW1uTmFtZXMoUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4gdmFs
dWUpCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDb2x1bW5OYW1lc1NldD4mIHNldENvbHVtbk5h
bWVzKFJlZjxKU09OOjpBcnJheU9mPFN0cmluZz4+JiYgaW5fY29sdW1uTmFtZXMpCiAgICAgICAg
IHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBDb2x1bW5OYW1lc1NldCks
IHByb3BlcnR5X2NvbHVtbk5hbWVzX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0
LT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIG1fcmVzdWx0
LT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIFdURk1vdmUoaW5fY29sdW1uTmFtZXMpKTsKICAg
ICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Q29sdW1uTmFtZXNTZXQ+KCk7CiAgICAgICAgIH0K
IAotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTm90ZXNTZXQ+JiBzZXROb3Rlcyhjb25zdCBTdHJp
bmcmIHZhbHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTm90ZXNTZXQ+JiBzZXROb3Rlcyhj
b25zdCBTdHJpbmcmIGluX25vdGVzKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FT
U0VSVCghKFNUQVRFICYgTm90ZXNTZXQpLCBwcm9wZXJ0eV9ub3Rlc19hbHJlYWR5X3NldCk7Ci0g
ICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJub3RlcyJfcywgdmFsdWUpOworICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibm90ZXMiX3MsIGluX25vdGVzKTsKICAgICAgICAg
ICAgIHJldHVybiBjYXN0U3RhdGU8Tm90ZXNTZXQ+KCk7CiAgICAgICAgIH0KIAotICAgICAgICBC
dWlsZGVyPFNUQVRFIHwgVGltZXN0YW1wU2V0PiYgc2V0VGltZXN0YW1wKGRvdWJsZSB2YWx1ZSkK
KyAgICAgICAgQnVpbGRlcjxTVEFURSB8IFRpbWVzdGFtcFNldD4mIHNldFRpbWVzdGFtcChkb3Vi
bGUgaW5fdGltZXN0YW1wKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCgh
KFNUQVRFICYgVGltZXN0YW1wU2V0KSwgcHJvcGVydHlfdGltZXN0YW1wX2FscmVhZHlfc2V0KTsK
LSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywgdmFsdWUpOwor
ICAgICAgICAgICAgbV9yZXN1bHQtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCBpbl90aW1lc3Rh
bXApOwogICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxUaW1lc3RhbXBTZXQ+KCk7CiAgICAg
ICAgIH0KIAotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVmFsdWVzU2V0PiYgc2V0VmFsdWVzKFJl
ZlB0cjxKU09OOjpPYmplY3Q+IHZhbHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVmFsdWVz
U2V0PiYgc2V0VmFsdWVzKFJlZjxKU09OOjpPYmplY3Q+JiYgaW5fdmFsdWVzKQogICAgICAgICB7
CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVmFsdWVzU2V0KSwgcHJvcGVy
dHlfdmFsdWVzX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRPYmplY3Qo
InZhbHVlcyJfcywgdmFsdWUpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldE9iamVjdCgidmFs
dWVzIl9zLCBXVEZNb3ZlKGluX3ZhbHVlcykpOwogICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0
ZTxWYWx1ZXNTZXQ+KCk7CiAgICAgICAgIH0KIAotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgUGF5
bG9hZFNldD4mIHNldFBheWxvYWQoUmVmUHRyPEpTT046OlZhbHVlPiB2YWx1ZSkKKyAgICAgICAg
QnVpbGRlcjxTVEFURSB8IFBheWxvYWRTZXQ+JiBzZXRQYXlsb2FkKFJlZjxKU09OOjpWYWx1ZT4m
JiBpbl9wYXlsb2FkKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNU
QVRFICYgUGF5bG9hZFNldCksIHByb3BlcnR5X3BheWxvYWRfYWxyZWFkeV9zZXQpOwotICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCB2YWx1ZSk7CisgICAgICAgICAg
ICBtX3Jlc3VsdC0+c2V0VmFsdWUoInBheWxvYWQiX3MsIFdURk1vdmUoaW5fcGF5bG9hZCkpOwog
ICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxQYXlsb2FkU2V0PigpOwogICAgICAgICB9CiAK
LSAgICAgICAgQnVpbGRlcjxTVEFURSB8IEVycm9yU2V0PiYgc2V0RXJyb3IoUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4gdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCBFcnJvclNldD4mIHNldEVycm9yKFJlZjxQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9y
PiYmIGluX2Vycm9yKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNU
QVRFICYgRXJyb3JTZXQpLCBwcm9wZXJ0eV9lcnJvcl9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAg
ICBtX3Jlc3VsdC0+c2V0T2JqZWN0KCJlcnJvciJfcywgdmFsdWUpOworICAgICAgICAgICAgbV9y
ZXN1bHQtPnNldE9iamVjdCgiZXJyb3IiX3MsIFdURk1vdmUoaW5fZXJyb3IpKTsKICAgICAgICAg
ICAgIHJldHVybiBjYXN0U3RhdGU8RXJyb3JTZXQ+KCk7CiAgICAgICAgIH0KIApAQCAtODg2LDE1
ICs5NDAsMTUgQEAgT3B0aW9uYWw8UHJvdG9jb2xFbnVtVHlwZT4gcGFyc2VFbnVtVmFsdWVGcm9t
U3RyaW5nKGNvbnN0IFN0cmluZyYpOwogCiAvLyBFbnVtcyBpbiB0aGUgJ0RhdGFiYXNlJyBEb21h
aW4KIHRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpN
b3VzZUJ1dHRvbj4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbj4oY29uc3QgU3RyaW5nJik7CitPcHRpb25hbDxQcm90b2Nv
bDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9uPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8UHJvdG9j
b2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbj4oY29uc3QgU3RyaW5nJik7CiB0ZW1wbGF0ZTw+Ci1P
cHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6T3B0aW9uYWxQYXJhbWV0ZXJC
dW5kbGU6OkRpcmVjdGlvbmFsaXR5PiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9y
OjpQcm90b2NvbDo6RGF0YWJhc2U6Ok9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25h
bGl0eT4oY29uc3QgU3RyaW5nJik7CitPcHRpb25hbDxQcm90b2NvbDo6RGF0YWJhc2U6Ok9wdGlv
bmFsUGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eT4gcGFyc2VFbnVtVmFsdWVGcm9tU3Ry
aW5nPFByb3RvY29sOjpEYXRhYmFzZTo6T3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlv
bmFsaXR5Pihjb25zdCBTdHJpbmcmKTsKIHRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRhdGFiYXNlOjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5PiBwYXJz
ZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlBhcmFt
ZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk+KGNvbnN0IFN0cmluZyYpOworT3B0aW9uYWw8UHJv
dG9jb2w6OkRhdGFiYXNlOjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5PiBwYXJzZUVu
dW1WYWx1ZUZyb21TdHJpbmc8UHJvdG9jb2w6OkRhdGFiYXNlOjpQYXJhbWV0ZXJCdW5kbGU6OkRp
cmVjdGlvbmFsaXR5Pihjb25zdCBTdHJpbmcmKTsKIAogLy8gRW51bXMgaW4gdGhlICdUZXN0JyBE
b21haW4KIHRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlBh
cmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJ
bnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5
Pihjb25zdCBTdHJpbmcmKTsKK09wdGlvbmFsPFByb3RvY29sOjpUZXN0OjpQYXJhbWV0ZXJCdW5k
bGU6OkRpcmVjdGlvbmFsaXR5PiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8UHJvdG9jb2w6OlRl
c3Q6OlBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk+KGNvbnN0IFN0cmluZyYpOwogCiB9
IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycwogCkBAIC05NDYsOCArMTAwMCw3IEBAIHN0cnVjdCBE
ZWZhdWx0SGFzaDxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6TW91c2VCdXR0b24+IDog
SW50SGFzaDxJbnNwZWN0CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGVzdFByb3Rv
Y29sT2JqZWN0cy5oIgogCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3Rm
L3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAKIG5hbWVzcGFj
ZSBJbnNwZWN0b3IgewogCkBAIC05NzEsNDUgKzEwMjQsNDUgQEAgU3RyaW5nIGdldEVudW1Db25z
dGFudFZhbHVlKGludCBjb2RlKSB7CiAvLyBFbnVtcyBpbiB0aGUgJ0RhdGFiYXNlJyBEb21haW4K
IAogdGVtcGxhdGU8PgotT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6Ok1v
dXNlQnV0dG9uPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6
RGF0YWJhc2U6Ok1vdXNlQnV0dG9uPihjb25zdCBTdHJpbmcmIHByb3RvY29sU3RyaW5nKQorT3B0
aW9uYWw8UHJvdG9jb2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbj4gcGFyc2VFbnVtVmFsdWVGcm9t
U3RyaW5nPFByb3RvY29sOjpEYXRhYmFzZTo6TW91c2VCdXR0b24+KGNvbnN0IFN0cmluZyYgcHJv
dG9jb2xTdHJpbmcpCiB7CiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBjb25zdGFudFZhbHVlc1td
ID0gewotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpNb3Vz
ZUJ1dHRvbjo6Tm9uZSwKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRh
YmFzZTo6TW91c2VCdXR0b246OkxlZnQsCi0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90
b2NvbDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9uOjpNaWRkbGUsCi0gICAgICAgIChzaXplX3QpSW5z
cGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9uOjpSaWdodCwKKyAgICAgICAg
KHNpemVfdClQcm90b2NvbDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9uOjpOb25lLAorICAgICAgICAo
c2l6ZV90KVByb3RvY29sOjpEYXRhYmFzZTo6TW91c2VCdXR0b246OkxlZnQsCisgICAgICAgIChz
aXplX3QpUHJvdG9jb2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbjo6TWlkZGxlLAorICAgICAgICAo
c2l6ZV90KVByb3RvY29sOjpEYXRhYmFzZTo6TW91c2VCdXR0b246OlJpZ2h0LAogICAgIH07CiAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCA0OyArK2kpCiAgICAgICAgIGlmIChwcm90b2NvbFN0
cmluZyA9PSBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb25zdGFudFZhbHVlc1tpXV0pCi0gICAgICAg
ICAgICByZXR1cm4gKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbilj
b25zdGFudFZhbHVlc1tpXTsKKyAgICAgICAgICAgIHJldHVybiAoUHJvdG9jb2w6OkRhdGFiYXNl
OjpNb3VzZUJ1dHRvbiljb25zdGFudFZhbHVlc1tpXTsKIAogICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CiB9CiAKIHRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFi
YXNlOjpPcHRpb25hbFBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk+IHBhcnNlRW51bVZh
bHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6T3B0aW9uYWxQYXJh
bWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5Pihjb25zdCBTdHJpbmcmIHByb3RvY29sU3RyaW5n
KQorT3B0aW9uYWw8UHJvdG9jb2w6OkRhdGFiYXNlOjpPcHRpb25hbFBhcmFtZXRlckJ1bmRsZTo6
RGlyZWN0aW9uYWxpdHk+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxQcm90b2NvbDo6RGF0YWJh
c2U6Ok9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eT4oY29uc3QgU3RyaW5n
JiBwcm90b2NvbFN0cmluZykKIHsKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNvbnN0YW50VmFs
dWVzW10gPSB7Ci0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6
Ok9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eTo6TFRSLAotICAgICAgICAo
c2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpPcHRpb25hbFBhcmFtZXRlckJ1
bmRsZTo6RGlyZWN0aW9uYWxpdHk6OlJUTCwKKyAgICAgICAgKHNpemVfdClQcm90b2NvbDo6RGF0
YWJhc2U6Ok9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eTo6TFRSLAorICAg
ICAgICAoc2l6ZV90KVByb3RvY29sOjpEYXRhYmFzZTo6T3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU6
OkRpcmVjdGlvbmFsaXR5OjpSVEwsCiAgICAgfTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IDI7ICsraSkKICAgICAgICAgaWYgKHByb3RvY29sU3RyaW5nID09IGVudW1fY29uc3RhbnRfdmFs
dWVzW2NvbnN0YW50VmFsdWVzW2ldXSkKLSAgICAgICAgICAgIHJldHVybiAoSW5zcGVjdG9yOjpQ
cm90b2NvbDo6RGF0YWJhc2U6Ok9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0
eSljb25zdGFudFZhbHVlc1tpXTsKKyAgICAgICAgICAgIHJldHVybiAoUHJvdG9jb2w6OkRhdGFi
YXNlOjpPcHRpb25hbFBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHkpY29uc3RhbnRWYWx1
ZXNbaV07CiAKICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQogCiB0ZW1wbGF0ZTw+Ci1PcHRp
b25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UGFyYW1ldGVyQnVuZGxlOjpEaXJl
Y3Rpb25hbGl0eT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRhdGFiYXNlOjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5Pihjb25zdCBTdHJpbmcm
IHByb3RvY29sU3RyaW5nKQorT3B0aW9uYWw8UHJvdG9jb2w6OkRhdGFiYXNlOjpQYXJhbWV0ZXJC
dW5kbGU6OkRpcmVjdGlvbmFsaXR5PiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8UHJvdG9jb2w6
OkRhdGFiYXNlOjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5Pihjb25zdCBTdHJpbmcm
IHByb3RvY29sU3RyaW5nKQogewogICAgIHN0YXRpYyBjb25zdCBzaXplX3QgY29uc3RhbnRWYWx1
ZXNbXSA9IHsKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6
UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eTo6TFRSLAotICAgICAgICAoc2l6ZV90KUlu
c3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFs
aXR5OjpSVEwsCisgICAgICAgIChzaXplX3QpUHJvdG9jb2w6OkRhdGFiYXNlOjpQYXJhbWV0ZXJC
dW5kbGU6OkRpcmVjdGlvbmFsaXR5OjpMVFIsCisgICAgICAgIChzaXplX3QpUHJvdG9jb2w6OkRh
dGFiYXNlOjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5OjpSVEwsCiAgICAgfTsKICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDI7ICsraSkKICAgICAgICAgaWYgKHByb3RvY29sU3Ry
aW5nID09IGVudW1fY29uc3RhbnRfdmFsdWVzW2NvbnN0YW50VmFsdWVzW2ldXSkKLSAgICAgICAg
ICAgIHJldHVybiAoSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlBhcmFtZXRlckJ1bmRs
ZTo6RGlyZWN0aW9uYWxpdHkpY29uc3RhbnRWYWx1ZXNbaV07CisgICAgICAgICAgICByZXR1cm4g
KFByb3RvY29sOjpEYXRhYmFzZTo6UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eSljb25z
dGFudFZhbHVlc1tpXTsKIAogICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiB9CkBAIC0xMDE3LDE1
ICsxMDcwLDE1IEBAIE9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQYXJh
bWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5PiBwYXJzZUVuCiAvLyBFbnVtcyBpbiB0aGUgJ1Rl
c3QnIERvbWFpbgogCiB0ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpU
ZXN0OjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5PiBwYXJzZUVudW1WYWx1ZUZyb21T
dHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rp
b25hbGl0eT4oY29uc3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKK09wdGlvbmFsPFByb3RvY29s
OjpUZXN0OjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5PiBwYXJzZUVudW1WYWx1ZUZy
b21TdHJpbmc8UHJvdG9jb2w6OlRlc3Q6OlBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk+
KGNvbnN0IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcpCiB7CiAgICAgc3RhdGljIGNvbnN0IHNpemVf
dCBjb25zdGFudFZhbHVlc1tdID0gewotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9j
b2w6OlRlc3Q6OlBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk6OkxUUiwKLSAgICAgICAg
KHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVj
dGlvbmFsaXR5OjpSVEwsCisgICAgICAgIChzaXplX3QpUHJvdG9jb2w6OlRlc3Q6OlBhcmFtZXRl
ckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk6OkxUUiwKKyAgICAgICAgKHNpemVfdClQcm90b2NvbDo6
VGVzdDo6UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eTo6UlRMLAogICAgIH07CiAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCAyOyArK2kpCiAgICAgICAgIGlmIChwcm90b2NvbFN0cmlu
ZyA9PSBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb25zdGFudFZhbHVlc1tpXV0pCi0gICAgICAgICAg
ICByZXR1cm4gKEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlBhcmFtZXRlckJ1bmRsZTo6RGly
ZWN0aW9uYWxpdHkpY29uc3RhbnRWYWx1ZXNbaV07CisgICAgICAgICAgICByZXR1cm4gKFByb3Rv
Y29sOjpUZXN0OjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5KWNvbnN0YW50VmFsdWVz
W2ldOwogCiAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLXJlcXVp
cmluZy1ydW50aW1lLWNhc3RzLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2Fz
dHMuanNvbi1yZXN1bHQKaW5kZXggMjZiNzUwYzY2YjIwMWIwZDRlY2JmMmYzNzQ4YWI5ZjQwMzA5
YTllYy4uNGRlMDRhYjRiNmQ5MWRjOTdmMDA2MzU5YThkNmM3NjgwZDkyZjM3YyAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVk
L3R5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbi1yZXN1bHQKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtcmVxdWly
aW5nLXJ1bnRpbWUtY2FzdHMuanNvbi1yZXN1bHQKQEAgLTY5LDcgKzY5LDcgQEAgSW5zcGVjdG9y
QmFja2VuZC5hY3RpdmF0ZURvbWFpbigiVGVzdCIsIG51bGwpOwogCiAjaWYgRU5BQkxFKElOU1BF
Q1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBl
cy5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgogI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CiAKQEAgLTEyNSwxMSArMTI1LDE0IEBA
IHByaXZhdGU6CiAKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx0
dXBsZT4KKyNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwu
aD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3Rv
ciB7CiAKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCiAKIAogCkBAIC0xNzAsOSArMTcz
LDcgQEAgdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiAjaW5jbHVkZSAiVGVzdEJhY2tlbmRE
aXNwYXRjaGVycy5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRl
bmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgogI2luY2x1ZGUgPHd0Zi9O
ZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogI2lmIEVO
QUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogI2luY2x1ZGUgIlRlc3RBbHRl
cm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKQEAgLTIyMCw2ICsyMjEsNyBAQCBuYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKIAogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRl
IDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKQEAgLTI2Myw3
ICsyNjUsNiBAQCBjbGFzcyBGcm9udGVuZFJvdXRlcjsKICNpbmNsdWRlICJUZXN0RnJvbnRlbmRE
aXNwYXRjaGVycy5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRl
bmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJ
bnNwZWN0b3IgewogCkBAIC0zMDQsNyArMzA1LDkgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiAj
cHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29s
VHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9KU09O
VmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC0zNDYsNyArMzQ5LDcg
QEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKFQgZW51
bVZhbHVlKQogbmFtZXNwYWNlIFRlc3QgewogCiAvKiBBIGR1bW15IHR5cGUgdGhhdCByZXF1aXJl
cyBydW50aW1lIGNhc3RzLCBhbmQgZm9yY2VzIG5vbi1wcmltaXRpdmUgcmVmZXJlbmNlZCB0eXBl
cyB0byBhbHNvIGVtaXQgcnVudGltZSBjYXN0IGhlbHBlcnMuICovCi1jbGFzcyBUeXBlTmVlZGlu
Z0Nhc3QgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7CitjbGFzcyBUeXBlTmVlZGluZ0Nhc3Qg
ZmluYWwgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7CiBwdWJsaWM6CiAgICAgZW51bSB7CiAg
ICAgICAgIE5vRmllbGRzU2V0ID0gMCwKQEAgLTM3NiwzOCArMzc5LDM4IEBAIHB1YmxpYzoKICAg
ICAgICAgZnJpZW5kIGNsYXNzIFR5cGVOZWVkaW5nQ2FzdDsKICAgICBwdWJsaWM6CiAKLSAgICAg
ICAgQnVpbGRlcjxTVEFURSB8IFN0cmluZ1NldD4mIHNldFN0cmluZyhjb25zdCBTdHJpbmcmIHZh
bHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRFIHwgU3RyaW5nU2V0PiYgc2V0U3RyaW5nKGNvbnN0
IFN0cmluZyYgaW5fc3RyaW5nKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VS
VCghKFNUQVRFICYgU3RyaW5nU2V0KSwgcHJvcGVydHlfc3RyaW5nX2FscmVhZHlfc2V0KTsKLSAg
ICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInN0cmluZyJfcywgdmFsdWUpOworICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygic3RyaW5nIl9zLCBpbl9zdHJpbmcpOwogICAgICAg
ICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxTdHJpbmdTZXQ+KCk7CiAgICAgICAgIH0KIAotICAgICAg
ICBCdWlsZGVyPFNUQVRFIHwgTnVtYmVyU2V0PiYgc2V0TnVtYmVyKGludCB2YWx1ZSkKKyAgICAg
ICAgQnVpbGRlcjxTVEFURSB8IE51bWJlclNldD4mIHNldE51bWJlcihpbnQgaW5fbnVtYmVyKQog
ICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTnVtYmVyU2V0
KSwgcHJvcGVydHlfbnVtYmVyX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5z
ZXRJbnRlZ2VyKCJudW1iZXIiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRJ
bnRlZ2VyKCJudW1iZXIiX3MsIGluX251bWJlcik7CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0
YXRlPE51bWJlclNldD4oKTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBB
bmltYWxzU2V0PiYgc2V0QW5pbWFscyhJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRB
bmltYWxzIHZhbHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQW5pbWFsc1NldD4mIHNldEFu
aW1hbHMoUHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHMgaW5fYW5pbWFscykKICAgICAgICAg
ewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEFuaW1hbHNTZXQpLCBwcm9w
ZXJ0eV9hbmltYWxzX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJp
bmcoImFuaW1hbHMiX3MsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVt
Q29uc3RhbnRWYWx1ZSh2YWx1ZSkpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygi
YW5pbWFscyJfcywgUHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShp
bl9hbmltYWxzKSk7CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEFuaW1hbHNTZXQ+KCk7
CiAgICAgICAgIH0KIAotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgSWRTZXQ+JiBzZXRJZChpbnQg
dmFsdWUpCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBJZFNldD4mIHNldElkKGludCBpbl9pZCkK
ICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIElkU2V0KSwg
cHJvcGVydHlfaWRfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldEludGVn
ZXIoImlkIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0SW50ZWdlcigiaWQi
X3MsIGluX2lkKTsKICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8SWRTZXQ+KCk7CiAgICAg
ICAgIH0KIAotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVHJlZVNldD4mIHNldFRyZWUoUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDE+IHZhbHVlKQorICAg
ICAgICBCdWlsZGVyPFNUQVRFIHwgVHJlZVNldD4mIHNldFRyZWUoUmVmPFByb3RvY29sOjpUZXN0
OjpSZWN1cnNpdmVPYmplY3QxPiYmIGluX3RyZWUpCiAgICAgICAgIHsKICAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBUcmVlU2V0KSwgcHJvcGVydHlfdHJlZV9hbHJlYWR5X3Nl
dCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0KCJ0cmVlIl9zLCB2YWx1ZSk7Cisg
ICAgICAgICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0KCJ0cmVlIl9zLCBXVEZNb3ZlKGluX3RyZWUp
KTsKICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VHJlZVNldD4oKTsKICAgICAgICAgfQog
CkBAIC00NTIsNyArNDU1LDcgQEAgZW51bSBjbGFzcyBDYXN0ZWRBbmltYWxzIHsKICAgICBGbGFt
aW5nb3MgPSAzLAogfTsgLy8gZW51bSBjbGFzcyBDYXN0ZWRBbmltYWxzCiAKLWNsYXNzIFJlY3Vy
c2l2ZU9iamVjdDEgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7CitjbGFzcyBSZWN1cnNpdmVP
YmplY3QxIGZpbmFsIDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgewogcHVibGljOgogICAgIGVu
dW0gewogICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCkBAIC00OTgsMTMgKzUwMSwxMyBAQCBwdWJs
aWM6CiAgICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihKU09OOjpPYmplY3Q6OmNy
ZWF0ZSgpKTsKICAgICB9CiAKLSAgICB2b2lkIHNldE9iaihSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0Mj4gdmFsdWUpCisgICAgdm9pZCBzZXRPYmooUmVm
PFByb3RvY29sOjpUZXN0OjpSZWN1cnNpdmVPYmplY3QyPiYmIGluX29wdF9vYmopCiAgICAgewot
ICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXRPYmplY3QoIm9iaiJfcywgV1RGTW92ZSh2YWx1
ZSkpOworICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXRPYmplY3QoIm9iaiJfcywgV1RGTW92
ZShpbl9vcHRfb2JqKSk7CiAgICAgfQogfTsKIAotY2xhc3MgUmVjdXJzaXZlT2JqZWN0MiA6IHB1
YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKK2NsYXNzIFJlY3Vyc2l2ZU9iamVjdDIgZmluYWwgOiBw
dWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7CiBwdWJsaWM6CiAgICAgZW51bSB7CiAgICAgICAgIE5v
RmllbGRzU2V0ID0gMCwKQEAgLTU1MCwyNSArNTUzLDI1IEBAIHB1YmxpYzoKICAgICAgICAgcmV0
dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEpTT046Ok9iamVjdDo6Y3JlYXRlKCkpOwogICAgIH0K
IAotICAgIHZvaWQgc2V0T2JqKFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpSZWN1
cnNpdmVPYmplY3QxPiB2YWx1ZSkKKyAgICB2b2lkIHNldE9iaihSZWY8UHJvdG9jb2w6OlRlc3Q6
OlJlY3Vyc2l2ZU9iamVjdDE+JiYgaW5fb3B0X29iaikKICAgICB7Ci0gICAgICAgIEpTT046Ok9i
amVjdEJhc2U6OnNldE9iamVjdCgib2JqIl9zLCBXVEZNb3ZlKHZhbHVlKSk7CisgICAgICAgIEpT
T046Ok9iamVjdEJhc2U6OnNldE9iamVjdCgib2JqIl9zLCBXVEZNb3ZlKGluX29wdF9vYmopKTsK
ICAgICB9CiB9OwogCiB9IC8vIFRlc3QKIAotdGVtcGxhdGU8PiBzdHJ1Y3QgQmluZGluZ1RyYWl0
czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzPiB7Cit0ZW1wbGF0ZTw+
IHN0cnVjdCBCaW5kaW5nVHJhaXRzPFByb3RvY29sOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3Q+IHsK
K3N0YXRpYyBSZWY8UHJvdG9jb2w6OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdD4gcnVudGltZUNhc3Qo
UmVmPEpTT046OlZhbHVlPiYmIHZhbHVlKTsKIHN0YXRpYyB2b2lkIGFzc2VydFZhbHVlSGFzRXhw
ZWN0ZWRUeXBlKEpTT046OlZhbHVlKik7CiB9OwotdGVtcGxhdGU8PiBzdHJ1Y3QgQmluZGluZ1Ry
YWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3Q+IHsKLXN0YXRp
YyBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0PiBydW50
aW1lQ2FzdChSZWZQdHI8SlNPTjo6VmFsdWU+JiYgdmFsdWUpOwordGVtcGxhdGU8PiBzdHJ1Y3Qg
QmluZGluZ1RyYWl0czxQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFscz4gewogc3RhdGljIHZv
aWQgYXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoSlNPTjo6VmFsdWUqKTsKIH07Ci10ZW1wbGF0
ZTw+IHN0cnVjdCBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlJlY3Vy
c2l2ZU9iamVjdDE+IHsKK3RlbXBsYXRlPD4gc3RydWN0IEJpbmRpbmdUcmFpdHM8UHJvdG9jb2w6
OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDE+IHsKIHN0YXRpYyB2b2lkIGFzc2VydFZhbHVlSGFzRXhw
ZWN0ZWRUeXBlKEpTT046OlZhbHVlKik7CiB9OwotdGVtcGxhdGU8PiBzdHJ1Y3QgQmluZGluZ1Ry
YWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpSZWN1cnNpdmVPYmplY3QyPiB7Cit0ZW1w
bGF0ZTw+IHN0cnVjdCBCaW5kaW5nVHJhaXRzPFByb3RvY29sOjpUZXN0OjpSZWN1cnNpdmVPYmpl
Y3QyPiB7CiBzdGF0aWMgdm9pZCBhc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShKU09OOjpWYWx1
ZSopOwogfTsKIApAQCAtNTc5LDkgKzU4Miw5IEBAIE9wdGlvbmFsPFByb3RvY29sRW51bVR5cGU+
IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZyhjb25zdCBTdHJpbmcmKTsKIAogLy8gRW51bXMgaW4g
dGhlICdUZXN0JyBEb21haW4KIHRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlRlc3Q6OlVuY2FzdGVkQW5pbWFscz4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlVuY2FzdGVkQW5pbWFscz4oY29uc3QgU3RyaW5nJik7CitP
cHRpb25hbDxQcm90b2NvbDo6VGVzdDo6VW5jYXN0ZWRBbmltYWxzPiBwYXJzZUVudW1WYWx1ZUZy
b21TdHJpbmc8UHJvdG9jb2w6OlRlc3Q6OlVuY2FzdGVkQW5pbWFscz4oY29uc3QgU3RyaW5nJik7
CiB0ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRB
bmltYWxzPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVz
dDo6Q2FzdGVkQW5pbWFscz4oY29uc3QgU3RyaW5nJik7CitPcHRpb25hbDxQcm90b2NvbDo6VGVz
dDo6Q2FzdGVkQW5pbWFscz4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPFByb3RvY29sOjpUZXN0
OjpDYXN0ZWRBbmltYWxzPihjb25zdCBTdHJpbmcmKTsKIAogfSAvLyBuYW1lc3BhY2UgVGVzdEhl
bHBlcnMKIApAQCAtNjM1LDggKzYzOCw3IEBAIHN0cnVjdCBEZWZhdWx0SGFzaDxJbnNwZWN0b3I6
OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzPiA6IEludEhhc2g8SW5zcGVjdG9yCiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogCi0jaW5j
bHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2lu
Y2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC02
NjEsMzMgKzY2MywzMyBAQCBTdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpIHsK
IC8vIEVudW1zIGluIHRoZSAnVGVzdCcgRG9tYWluCiAKIHRlbXBsYXRlPD4KLU9wdGlvbmFsPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlVuY2FzdGVkQW5pbWFscz4gcGFyc2VFbnVtVmFsdWVG
cm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlVuY2FzdGVkQW5pbWFscz4oY29u
c3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKK09wdGlvbmFsPFByb3RvY29sOjpUZXN0OjpVbmNh
c3RlZEFuaW1hbHM+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxQcm90b2NvbDo6VGVzdDo6VW5j
YXN0ZWRBbmltYWxzPihjb25zdCBTdHJpbmcmIHByb3RvY29sU3RyaW5nKQogewogICAgIHN0YXRp
YyBjb25zdCBzaXplX3QgY29uc3RhbnRWYWx1ZXNbXSA9IHsKLSAgICAgICAgKHNpemVfdClJbnNw
ZWN0b3I6OlByb3RvY29sOjpUZXN0OjpVbmNhc3RlZEFuaW1hbHM6OlBpZ3MsCi0gICAgICAgIChz
aXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VW5jYXN0ZWRBbmltYWxzOjpDb3dzLAot
ICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlVuY2FzdGVkQW5pbWFs
czo6Q2F0cywKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpVbmNh
c3RlZEFuaW1hbHM6OkhlbnMsCisgICAgICAgIChzaXplX3QpUHJvdG9jb2w6OlRlc3Q6OlVuY2Fz
dGVkQW5pbWFsczo6UGlncywKKyAgICAgICAgKHNpemVfdClQcm90b2NvbDo6VGVzdDo6VW5jYXN0
ZWRBbmltYWxzOjpDb3dzLAorICAgICAgICAoc2l6ZV90KVByb3RvY29sOjpUZXN0OjpVbmNhc3Rl
ZEFuaW1hbHM6OkNhdHMsCisgICAgICAgIChzaXplX3QpUHJvdG9jb2w6OlRlc3Q6OlVuY2FzdGVk
QW5pbWFsczo6SGVucywKICAgICB9OwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgNDsgKytp
KQogICAgICAgICBpZiAocHJvdG9jb2xTdHJpbmcgPT0gZW51bV9jb25zdGFudF92YWx1ZXNbY29u
c3RhbnRWYWx1ZXNbaV1dKQotICAgICAgICAgICAgcmV0dXJuIChJbnNwZWN0b3I6OlByb3RvY29s
OjpUZXN0OjpVbmNhc3RlZEFuaW1hbHMpY29uc3RhbnRWYWx1ZXNbaV07CisgICAgICAgICAgICBy
ZXR1cm4gKFByb3RvY29sOjpUZXN0OjpVbmNhc3RlZEFuaW1hbHMpY29uc3RhbnRWYWx1ZXNbaV07
CiAKICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQogCiB0ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJ
bnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzPiBwYXJzZUVudW1WYWx1ZUZy
b21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFscz4oY29uc3Qg
U3RyaW5nJiBwcm90b2NvbFN0cmluZykKK09wdGlvbmFsPFByb3RvY29sOjpUZXN0OjpDYXN0ZWRB
bmltYWxzPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFu
aW1hbHM+KGNvbnN0IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcpCiB7CiAgICAgc3RhdGljIGNvbnN0
IHNpemVfdCBjb25zdGFudFZhbHVlc1tdID0gewotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6
UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM6OkR1Y2tzLAotICAgICAgICAoc2l6ZV90KUlu
c3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM6OkhlbnMsCi0gICAgICAgIChz
aXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFsczo6Q3Jvd3MsCi0g
ICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFsczo6
RmxhbWluZ29zLAorICAgICAgICAoc2l6ZV90KVByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxz
OjpEdWNrcywKKyAgICAgICAgKHNpemVfdClQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFsczo6
SGVucywKKyAgICAgICAgKHNpemVfdClQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFsczo6Q3Jv
d3MsCisgICAgICAgIChzaXplX3QpUHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM6OkZsYW1p
bmdvcywKICAgICB9OwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgNDsgKytpKQogICAgICAg
ICBpZiAocHJvdG9jb2xTdHJpbmcgPT0gZW51bV9jb25zdGFudF92YWx1ZXNbY29uc3RhbnRWYWx1
ZXNbaV1dKQotICAgICAgICAgICAgcmV0dXJuIChJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpD
YXN0ZWRBbmltYWxzKWNvbnN0YW50VmFsdWVzW2ldOworICAgICAgICAgICAgcmV0dXJuIChQcm90
b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFscyljb25zdGFudFZhbHVlc1tpXTsKIAogICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CiB9CkBAIC02OTYsMTE1ICs2OTgsMTAxIEBAIE9wdGlvbmFsPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM+IHBhcnNlRW51bVZhbHVlRnJvbVN0
cmluZzxJbnNwCiAKIAogCi12b2lkIEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6
VGVzdDo6Q2FzdGVkQW5pbWFscz46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKEpTT046OlZh
bHVlKiB2YWx1ZSkKK3ZvaWQgQmluZGluZ1RyYWl0czxQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5p
bWFscz46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKEpTT046OlZhbHVlKiB2YWx1ZSkKIHsK
KyAgICBBU1NFUlRfVU5VU0VEKHZhbHVlLCB2YWx1ZSk7CiAjaWYgQVNTRVJUX0VOQUJMRUQKLSAg
ICBBU1NFUlRfQVJHKHZhbHVlLCB2YWx1ZSk7Ci0gICAgU3RyaW5nIHJlc3VsdDsKLSAgICBib29s
IGNhc3RTdWNjZWVkZWQgPSB2YWx1ZS0+YXNTdHJpbmcocmVzdWx0KTsKLSAgICBBU1NFUlQoY2Fz
dFN1Y2NlZWRlZCk7CisgICAgYXV0byByZXN1bHQgPSB2YWx1ZS0+YXNTdHJpbmcoKTsKKyAgICBB
U1NFUlQocmVzdWx0KTsKICAgICBBU1NFUlQocmVzdWx0ID09ICJEdWNrcyIgfHwgcmVzdWx0ID09
ICJIZW5zIiB8fCByZXN1bHQgPT0gIkNyb3dzIiB8fCByZXN1bHQgPT0gIkZsYW1pbmdvcyIpOwot
I2Vsc2UgLy8gQVNTRVJUX0VOQUJMRUQKLSAgICBVTlVTRURfUEFSQU0odmFsdWUpOwotI2VuZGlm
IC8vIEFTU0VSVF9FTkFCTEVECisjZW5kaWYKIH0KIAotdm9pZCBCaW5kaW5nVHJhaXRzPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdD46OmFzc2VydFZhbHVlSGFzRXhw
ZWN0ZWRUeXBlKEpTT046OlZhbHVlKiB2YWx1ZSkKK3ZvaWQgQmluZGluZ1RyYWl0czxQcm90b2Nv
bDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0Pjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoSlNP
Tjo6VmFsdWUqIHZhbHVlKQogeworICAgIEFTU0VSVF9VTlVTRUQodmFsdWUsIHZhbHVlKTsKICNp
ZiBBU1NFUlRfRU5BQkxFRAotICAgIEFTU0VSVF9BUkcodmFsdWUsIHZhbHVlKTsKLSAgICBSZWZQ
dHI8SlNPTjo6T2JqZWN0PiBvYmplY3Q7Ci0gICAgYm9vbCBjYXN0U3VjY2VlZGVkID0gdmFsdWUt
PmFzT2JqZWN0KG9iamVjdCk7Ci0gICAgQVNTRVJUX1VOVVNFRChjYXN0U3VjY2VlZGVkLCBjYXN0
U3VjY2VlZGVkKTsKKyAgICBhdXRvIG9iamVjdCA9IHZhbHVlLT5hc09iamVjdCgpOworICAgIEFT
U0VSVChvYmplY3QpOwogICAgIHsKICAgICAgICAgYXV0byBzdHJpbmdQb3MgPSBvYmplY3QtPmZp
bmQoInN0cmluZyJfcyk7CiAgICAgICAgIEFTU0VSVChzdHJpbmdQb3MgIT0gb2JqZWN0LT5lbmQo
KSk7Ci0gICAgICAgIEJpbmRpbmdUcmFpdHM8U3RyaW5nPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3Rl
ZFR5cGUoc3RyaW5nUG9zLT52YWx1ZS5nZXQoKSk7CisgICAgICAgIEJpbmRpbmdUcmFpdHM8U3Ry
aW5nPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoc3RyaW5nUG9zLT52YWx1ZS5wdHIoKSk7
CiAgICAgfQogICAgIHsKICAgICAgICAgYXV0byBudW1iZXJQb3MgPSBvYmplY3QtPmZpbmQoIm51
bWJlciJfcyk7CiAgICAgICAgIEFTU0VSVChudW1iZXJQb3MgIT0gb2JqZWN0LT5lbmQoKSk7Ci0g
ICAgICAgIEJpbmRpbmdUcmFpdHM8aW50Pjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUobnVt
YmVyUG9zLT52YWx1ZS5nZXQoKSk7CisgICAgICAgIEJpbmRpbmdUcmFpdHM8aW50Pjo6YXNzZXJ0
VmFsdWVIYXNFeHBlY3RlZFR5cGUobnVtYmVyUG9zLT52YWx1ZS5wdHIoKSk7CiAgICAgfQogICAg
IHsKICAgICAgICAgYXV0byBhbmltYWxzUG9zID0gb2JqZWN0LT5maW5kKCJhbmltYWxzIl9zKTsK
ICAgICAgICAgQVNTRVJUKGFuaW1hbHNQb3MgIT0gb2JqZWN0LT5lbmQoKSk7Ci0gICAgICAgIEJp
bmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFscz46OmFz
c2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKGFuaW1hbHNQb3MtPnZhbHVlLmdldCgpKTsKKyAgICAg
ICAgQmluZGluZ1RyYWl0czxQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFscz46OmFzc2VydFZh
bHVlSGFzRXhwZWN0ZWRUeXBlKGFuaW1hbHNQb3MtPnZhbHVlLnB0cigpKTsKICAgICB9CiAgICAg
ewogICAgICAgICBhdXRvIGlkUG9zID0gb2JqZWN0LT5maW5kKCJpZCJfcyk7CiAgICAgICAgIEFT
U0VSVChpZFBvcyAhPSBvYmplY3QtPmVuZCgpKTsKLSAgICAgICAgQmluZGluZ1RyYWl0czxpbnQ+
Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShpZFBvcy0+dmFsdWUuZ2V0KCkpOworICAgICAg
ICBCaW5kaW5nVHJhaXRzPGludD46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKGlkUG9zLT52
YWx1ZS5wdHIoKSk7CiAgICAgfQogICAgIHsKICAgICAgICAgYXV0byB0cmVlUG9zID0gb2JqZWN0
LT5maW5kKCJ0cmVlIl9zKTsKICAgICAgICAgQVNTRVJUKHRyZWVQb3MgIT0gb2JqZWN0LT5lbmQo
KSk7Ci0gICAgICAgIEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UmVj
dXJzaXZlT2JqZWN0MT46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKHRyZWVQb3MtPnZhbHVl
LmdldCgpKTsKKyAgICAgICAgQmluZGluZ1RyYWl0czxQcm90b2NvbDo6VGVzdDo6UmVjdXJzaXZl
T2JqZWN0MT46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKHRyZWVQb3MtPnZhbHVlLnB0cigp
KTsKICAgICB9CiAKLSAgICBpbnQgZm91bmRQcm9wZXJ0aWVzQ291bnQgPSA1OworICAgIHNpemVf
dCBmb3VuZFByb3BlcnRpZXNDb3VudCA9IDU7CiAgICAgaWYgKGZvdW5kUHJvcGVydGllc0NvdW50
ICE9IG9iamVjdC0+c2l6ZSgpKQogICAgICAgICBGQVRBTCgiVW5leHBlY3RlZCBwcm9wZXJ0aWVz
IGluIG9iamVjdDogJXNcbiIsIG9iamVjdC0+dG9KU09OU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkp
OwotI2Vsc2UgLy8gQVNTRVJUX0VOQUJMRUQKLSAgICBVTlVTRURfUEFSQU0odmFsdWUpOwotI2Vu
ZGlmIC8vIEFTU0VSVF9FTkFCTEVECisjZW5kaWYKIH0KIAotUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdD4gQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlBy
b3RvY29sOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3Q+OjpydW50aW1lQ2FzdChSZWZQdHI8SlNPTjo6
VmFsdWU+JiYgdmFsdWUpCitSZWY8UHJvdG9jb2w6OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdD4gQmlu
ZGluZ1RyYWl0czxQcm90b2NvbDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0Pjo6cnVudGltZUNhc3Qo
UmVmPEpTT046OlZhbHVlPiYmIHZhbHVlKQogewotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHJl
c3VsdDsKLSAgICBib29sIGNhc3RTdWNjZWVkZWQgPSB2YWx1ZS0+YXNPYmplY3QocmVzdWx0KTsK
LSAgICBBU1NFUlRfVU5VU0VEKGNhc3RTdWNjZWVkZWQsIGNhc3RTdWNjZWVkZWQpOwotICAgIEJp
bmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0Pjo6
YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUocmVzdWx0LmdldCgpKTsKLSAgICBDT01QSUxFX0FT
U0VSVChzaXplb2YoSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0KSA9
PSBzaXplb2YoSlNPTjo6T2JqZWN0QmFzZSksIHR5cGVfY2FzdF9wcm9ibGVtKTsKLSAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0
Kj4oc3RhdGljX2Nhc3Q8SlNPTjo6T2JqZWN0QmFzZSo+KHJlc3VsdC5nZXQoKSkpOworICAgIGF1
dG8gcmVzdWx0ID0gdmFsdWUtPmFzT2JqZWN0KCk7CisgICAgQmluZGluZ1RyYWl0czxQcm90b2Nv
bDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0Pjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUocmVz
dWx0LmdldCgpKTsKKyAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoUHJvdG9jb2w6OlRlc3Q6OlR5
cGVOZWVkaW5nQ2FzdCkgPT0gc2l6ZW9mKEpTT046Ok9iamVjdEJhc2UpLCB0eXBlX2Nhc3RfcHJv
YmxlbSk7CisgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxQcm90b2NvbDo6VGVzdDo6
VHlwZU5lZWRpbmdDYXN0PihzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SlNPTjo6T2JqZWN0QmFzZT4o
cmVzdWx0LnJlbGVhc2VOb25OdWxsKCkpKTsKIH0KIAogCi12b2lkIEJpbmRpbmdUcmFpdHM8SW5z
cGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0MT46OmFzc2VydFZhbHVlSGFz
RXhwZWN0ZWRUeXBlKEpTT046OlZhbHVlKiB2YWx1ZSkKK3ZvaWQgQmluZGluZ1RyYWl0czxQcm90
b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0MT46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBl
KEpTT046OlZhbHVlKiB2YWx1ZSkKIHsKKyAgICBBU1NFUlRfVU5VU0VEKHZhbHVlLCB2YWx1ZSk7
CiAjaWYgQVNTRVJUX0VOQUJMRUQKLSAgICBBU1NFUlRfQVJHKHZhbHVlLCB2YWx1ZSk7Ci0gICAg
UmVmUHRyPEpTT046Ok9iamVjdD4gb2JqZWN0OwotICAgIGJvb2wgY2FzdFN1Y2NlZWRlZCA9IHZh
bHVlLT5hc09iamVjdChvYmplY3QpOwotICAgIEFTU0VSVF9VTlVTRUQoY2FzdFN1Y2NlZWRlZCwg
Y2FzdFN1Y2NlZWRlZCk7CisgICAgYXV0byBvYmplY3QgPSB2YWx1ZS0+YXNPYmplY3QoKTsKKyAg
ICBBU1NFUlQob2JqZWN0KTsKIAotICAgIGludCBmb3VuZFByb3BlcnRpZXNDb3VudCA9IDA7Cisg
ICAgc2l6ZV90IGZvdW5kUHJvcGVydGllc0NvdW50ID0gMDsKICAgICB7CiAgICAgICAgIGF1dG8g
b2JqUG9zID0gb2JqZWN0LT5maW5kKCJvYmoiX3MpOwogICAgICAgICBpZiAob2JqUG9zICE9IG9i
amVjdC0+ZW5kKCkpIHsKLSAgICAgICAgICAgIEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90
b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0Mj46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBl
KG9ialBvcy0+dmFsdWUuZ2V0KCkpOworICAgICAgICAgICAgQmluZGluZ1RyYWl0czxQcm90b2Nv
bDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0Mj46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKG9i
alBvcy0+dmFsdWUucHRyKCkpOwogICAgICAgICAgICAgKytmb3VuZFByb3BlcnRpZXNDb3VudDsK
ICAgICAgICAgfQogICAgIH0KICAgICBpZiAoZm91bmRQcm9wZXJ0aWVzQ291bnQgIT0gb2JqZWN0
LT5zaXplKCkpCiAgICAgICAgIEZBVEFMKCJVbmV4cGVjdGVkIHByb3BlcnRpZXMgaW4gb2JqZWN0
OiAlc1xuIiwgb2JqZWN0LT50b0pTT05TdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSk7Ci0jZWxzZSAv
LyBBU1NFUlRfRU5BQkxFRAotICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7Ci0jZW5kaWYgLy8gQVNT
RVJUX0VOQUJMRUQKKyNlbmRpZgogfQogCi12b2lkIEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0Mj46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRU
eXBlKEpTT046OlZhbHVlKiB2YWx1ZSkKK3ZvaWQgQmluZGluZ1RyYWl0czxQcm90b2NvbDo6VGVz
dDo6UmVjdXJzaXZlT2JqZWN0Mj46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKEpTT046OlZh
bHVlKiB2YWx1ZSkKIHsKKyAgICBBU1NFUlRfVU5VU0VEKHZhbHVlLCB2YWx1ZSk7CiAjaWYgQVNT
RVJUX0VOQUJMRUQKLSAgICBBU1NFUlRfQVJHKHZhbHVlLCB2YWx1ZSk7Ci0gICAgUmVmUHRyPEpT
T046Ok9iamVjdD4gb2JqZWN0OwotICAgIGJvb2wgY2FzdFN1Y2NlZWRlZCA9IHZhbHVlLT5hc09i
amVjdChvYmplY3QpOwotICAgIEFTU0VSVF9VTlVTRUQoY2FzdFN1Y2NlZWRlZCwgY2FzdFN1Y2Nl
ZWRlZCk7CisgICAgYXV0byBvYmplY3QgPSB2YWx1ZS0+YXNPYmplY3QoKTsKKyAgICBBU1NFUlQo
b2JqZWN0KTsKIAotICAgIGludCBmb3VuZFByb3BlcnRpZXNDb3VudCA9IDA7CisgICAgc2l6ZV90
IGZvdW5kUHJvcGVydGllc0NvdW50ID0gMDsKICAgICB7CiAgICAgICAgIGF1dG8gb2JqUG9zID0g
b2JqZWN0LT5maW5kKCJvYmoiX3MpOwogICAgICAgICBpZiAob2JqUG9zICE9IG9iamVjdC0+ZW5k
KCkpIHsKLSAgICAgICAgICAgIEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVz
dDo6UmVjdXJzaXZlT2JqZWN0MT46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKG9ialBvcy0+
dmFsdWUuZ2V0KCkpOworICAgICAgICAgICAgQmluZGluZ1RyYWl0czxQcm90b2NvbDo6VGVzdDo6
UmVjdXJzaXZlT2JqZWN0MT46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKG9ialBvcy0+dmFs
dWUucHRyKCkpOwogICAgICAgICAgICAgKytmb3VuZFByb3BlcnRpZXNDb3VudDsKICAgICAgICAg
fQogICAgIH0KICAgICBpZiAoZm91bmRQcm9wZXJ0aWVzQ291bnQgIT0gb2JqZWN0LT5zaXplKCkp
CiAgICAgICAgIEZBVEFMKCJVbmV4cGVjdGVkIHByb3BlcnRpZXMgaW4gb2JqZWN0OiAlc1xuIiwg
b2JqZWN0LT50b0pTT05TdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSk7Ci0jZWxzZSAvLyBBU1NFUlRf
RU5BQkxFRAotICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7Ci0jZW5kaWYgLy8gQVNTRVJUX0VOQUJM
RUQKKyNlbmRpZgogfQogCiB9IC8vIG5hbWVzcGFjZSBQcm90b2NvbApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUt
d2l0aC1vcGVuLXBhcmFtZXRlcnMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS13aXRoLW9wZW4tcGFyYW1ldGVy
cy5qc29uLXJlc3VsdAppbmRleCA3ZDU3NzYyYThmZjhiZTRhOWFlNDlkYzllZjU0N2I5ZDMyMTNk
YzdiLi5iOTg0Y2IwN2MyYjM3NTUxYTFmNzdjMjNiMDk0MDYyMjkxNmVlNWUxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQv
dHlwZS13aXRoLW9wZW4tcGFyYW1ldGVycy5qc29uLXJlc3VsdAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS13aXRoLW9wZW4t
cGFyYW1ldGVycy5qc29uLXJlc3VsdApAQCAtNjMsNyArNjMsNyBAQAogCiAjaWYgRU5BQkxFKElO
U1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xU
eXBlcy5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgogI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CiAKQEAgLTExOSwxMSArMTE5LDE0
IEBAIHByaXZhdGU6CiAKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRl
IDx0dXBsZT4KKyNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9u
YWwuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3Bl
Y3RvciB7CiAKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCiAKIAogCkBAIC0xNjQsOSAr
MTY3LDcgQEAgdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiAjaW5jbHVkZSAiVGVzdEJhY2tl
bmREaXNwYXRjaGVycy5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJv
bnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgogI2luY2x1ZGUgPHd0
Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogI2lm
IEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogI2luY2x1ZGUgIlRlc3RB
bHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKQEAgLTIxNCw2ICsyMTUsNyBAQCBuYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKIAogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNs
dWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKQEAgLTI1
Nyw3ICsyNTksNiBAQCBjbGFzcyBGcm9udGVuZFJvdXRlcjsKICNpbmNsdWRlICJUZXN0RnJvbnRl
bmREaXNwYXRjaGVycy5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJv
bnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKIG5hbWVzcGFj
ZSBJbnNwZWN0b3IgewogCkBAIC0yOTgsNyArMjk5LDkgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7
CiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3Rv
Y29sVHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9K
U09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC0zMjAsNyArMzIz
LDcgQEAgY2xhc3MgT3BlblBhcmFtZXRlcnM7CiAKIG5hbWVzcGFjZSBUZXN0IHsKIAotY2xhc3Mg
Tm9PcGVuUGFyYW1ldGVycyA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKK2NsYXNzIE5vT3Bl
blBhcmFtZXRlcnMgZmluYWwgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7CiBwdWJsaWM6CiAg
ICAgZW51bSB7CiAgICAgICAgIE5vRmllbGRzU2V0ID0gMCwKQEAgLTM0NywxNyArMzUwLDE3IEBA
IHB1YmxpYzoKICAgICAgICAgZnJpZW5kIGNsYXNzIE5vT3BlblBhcmFtZXRlcnM7CiAgICAgcHVi
bGljOgogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBPbmVTZXQ+JiBzZXRPbmUoZG91YmxlIHZh
bHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRFIHwgT25lU2V0PiYgc2V0T25lKGRvdWJsZSBpbl9v
bmUpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBPbmVT
ZXQpLCBwcm9wZXJ0eV9vbmVfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNl
dERvdWJsZSgib25lIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0RG91Ymxl
KCJvbmUiX3MsIGluX29uZSk7CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE9uZVNldD4o
KTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBUd29TZXQ+JiBzZXRUd28o
ZG91YmxlIHZhbHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVHdvU2V0PiYgc2V0VHdvKGRv
dWJsZSBpbl90d28pCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RB
VEUgJiBUd29TZXQpLCBwcm9wZXJ0eV90d29fYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9y
ZXN1bHQtPnNldERvdWJsZSgidHdvIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+
c2V0RG91YmxlKCJ0d28iX3MsIGluX3R3byk7CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRl
PFR3b1NldD4oKTsKICAgICAgICAgfQogCkBAIC0zODUsNyArMzg4LDcgQEAgcHVibGljOgogICAg
IH0KIH07CiAKLWNsYXNzIE9wZW5QYXJhbWV0ZXJzIDogcHVibGljIEpTT046Ok9iamVjdCB7Citj
bGFzcyBPcGVuUGFyYW1ldGVycyBmaW5hbCA6IHB1YmxpYyBKU09OOjpPYmplY3QgewogcHVibGlj
OgogICAgIGVudW0gewogICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCkBAIC00MTIsMTcgKzQxNSwx
NyBAQCBwdWJsaWM6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBPcGVuUGFyYW1ldGVyczsKICAgICBw
dWJsaWM6CiAKLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IEFscGhhU2V0PiYgc2V0QWxwaGEoZG91
YmxlIHZhbHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQWxwaGFTZXQ+JiBzZXRBbHBoYShk
b3VibGUgaW5fYWxwaGEpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEo
U1RBVEUgJiBBbHBoYVNldCksIHByb3BlcnR5X2FscGhhX2FscmVhZHlfc2V0KTsKLSAgICAgICAg
ICAgIG1fcmVzdWx0LT5zZXREb3VibGUoImFscGhhIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICBt
X3Jlc3VsdC0+c2V0RG91YmxlKCJhbHBoYSJfcywgaW5fYWxwaGEpOwogICAgICAgICAgICAgcmV0
dXJuIGNhc3RTdGF0ZTxBbHBoYVNldD4oKTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCBCZXRhU2V0PiYgc2V0QmV0YShkb3VibGUgdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCBCZXRhU2V0PiYgc2V0QmV0YShkb3VibGUgaW5fYmV0YSkKICAgICAgICAgewogICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEJldGFTZXQpLCBwcm9wZXJ0eV9iZXRh
X2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXREb3VibGUoImJldGEiX3Ms
IHZhbHVlKTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXREb3VibGUoImJldGEiX3MsIGluX2Jl
dGEpOwogICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxCZXRhU2V0PigpOwogICAgICAgICB9
CiAKQEAgLTQ1MCw3ICs0NTMsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgLy8gUHJvcGVydHkg
bmFtZXMgZm9yIHR5cGUgZ2VuZXJhdGVkIGFzIG9wZW4uCi0gICAgTm9uZSBzdGF0aWMgY29uc3Qg
Y2hhciogQWxwaGE7CisgICAgTm9uZSBzdGF0aWMgY29uc3QgY2hhciogYWxwaGFLZXk7CiB9Owog
CiB9IC8vIFRlc3QKQEAgLTQ5NSwxNCArNDk4LDEzIEBAIHB1YmxpYzoKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAKLSNpbmNsdWRlIDx3dGYv
T3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3Rm
L0Fzc2VydGlvbnMuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKIG5hbWVzcGFjZSBQcm90
b2NvbCB7CiAKLWNvbnN0IGNoYXIqIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6Ok9wZW5QYXJh
bWV0ZXJzOjpBbHBoYSA9ICJhbHBoYSI7Citjb25zdCBjaGFyKiBQcm90b2NvbDo6VGVzdDo6T3Bl
blBhcmFtZXRlcnM6OmFscGhhS2V5ID0gImFscGhhIjsKIAogfSAvLyBuYW1lc3BhY2UgUHJvdG9j
b2wKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2V4cGVjdGVkL3ZlcnNpb24uanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdmVyc2lvbi5qc29uLXJlc3VsdApp
bmRleCBlZjc3OGEwNmM3ZjI1MTFmNmMyMzQxODY3MjU1MDU2ODM3ZmJmYTNmLi5jMDRhYjU5NzNl
NzY2MTIxZTZiZTg2OTk5ODU0MWQ1YTcxMjcyZThkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdmVyc2lvbi5qc29uLXJl
c3VsdAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
ZXhwZWN0ZWQvdmVyc2lvbi5qc29uLXJlc3VsdApAQCAtNjgsNyArNjgsNyBAQCBJbnNwZWN0b3JC
YWNrZW5kLmFjdGl2YXRlRG9tYWluKCJWZXJzaW9uRG9tYWluIiwgbnVsbCk7CiAKICNpZiBFTkFC
TEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIAotI2luY2x1ZGUgIlRlc3RQcm90
b2NvbFR5cGVzLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CiAjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KIApAQCAtMTI0LDExICsx
MjQsMTQgQEAgcHJpdmF0ZToKIAogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2lu
Y2x1ZGUgPHR1cGxlPgorI2luY2x1ZGUgPHd0Zi9FeHBlY3RlZC5oPgorI2luY2x1ZGUgPHd0Zi9P
cHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKIAotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKIAogCiAKQEAgLTE2
OSw5ICsxNzIsNyBAQCB0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKICNpbmNsdWRlICJUZXN0
QmFja2VuZERpc3BhdGNoZXJzLmgiCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CiAjaW5jbHVk
ZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgog
CiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAjaW5jbHVkZSAi
VGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgpAQCAtMjE5LDYgKzIyMCw3IEBAIG5h
bWVzcGFjZSBJbnNwZWN0b3IgewogCiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgog
I2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAj
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewpA
QCAtMjYyLDcgKzI2NCw2IEBAIGNsYXNzIEZyb250ZW5kUm91dGVyOwogI2luY2x1ZGUgIlRlc3RG
cm9udGVuZERpc3BhdGNoZXJzLmgiCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogbmFt
ZXNwYWNlIEluc3BlY3RvciB7CiAKQEAgLTMwMyw3ICszMDQsOSBAQCBuYW1lc3BhY2UgSW5zcGVj
dG9yIHsKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
UHJvdG9jb2xUeXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8
d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKQEAgLTM2Miw4
ICszNjUsNyBAQCBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFZFUlNJT04gPSA0MjsKICNpbmNs
dWRlICJjb25maWcuaCIKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAKLSNpbmNs
dWRlIDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5j
bHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVTZXQuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVNldC5jcHAKaW5kZXggZDk5ZmYzMTFkYjc1NTRh
MmIwMTMwZDI3MjI0OWM3YjA0ZDA1YjhhNS4uNjVlYTM1NDU5YzQ0OTc4NDJiNThhYTNiNGQyYzE2
YWJjYzlmZTE1NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlw
ZVNldC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVNldC5jcHAK
QEAgLTUwMSwxNCArNTAxLDE0IEBAIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpT
dHJ1Y3R1cmVEZXNjcmlwdGlvbj4gU3RydWN0dXJlU2hhcGU6Omluc3BlY3RvCiAgICAgICAgIGZv
ciAoY29uc3QgYXV0byYgZmllbGQgOiBjdXJyZW50U2hhcGUtPm1fb3B0aW9uYWxGaWVsZHMpCiAg
ICAgICAgICAgICBvcHRpb25hbEZpZWxkcy0+YWRkSXRlbShmaWVsZC5nZXQoKSk7CiAKLSAgICAg
ICAgY3VycmVudE9iamVjdC0+c2V0RmllbGRzKCZmaWVsZHMuZ2V0KCkpOwotICAgICAgICBjdXJy
ZW50T2JqZWN0LT5zZXRPcHRpb25hbEZpZWxkcygmb3B0aW9uYWxGaWVsZHMuZ2V0KCkpOworICAg
ICAgICBjdXJyZW50T2JqZWN0LT5zZXRGaWVsZHMoV1RGTW92ZShmaWVsZHMpKTsKKyAgICAgICAg
Y3VycmVudE9iamVjdC0+c2V0T3B0aW9uYWxGaWVsZHMoV1RGTW92ZShvcHRpb25hbEZpZWxkcykp
OwogICAgICAgICBjdXJyZW50T2JqZWN0LT5zZXRDb25zdHJ1Y3Rvck5hbWUoY3VycmVudFNoYXBl
LT5tX2NvbnN0cnVjdG9yTmFtZSk7CiAgICAgICAgIGN1cnJlbnRPYmplY3QtPnNldElzSW1wcmVj
aXNlKGN1cnJlbnRTaGFwZS0+bV9pc0luRGljdGlvbmFyeU1vZGUpOwogCiAgICAgICAgIGlmIChj
dXJyZW50U2hhcGUtPm1fcHJvdG8pIHsKICAgICAgICAgICAgIGF1dG8gbmV4dE9iamVjdCA9IElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlN0cnVjdHVyZURlc2NyaXB0aW9uOjpjcmVhdGUo
KS5yZWxlYXNlKCk7Ci0gICAgICAgICAgICBjdXJyZW50T2JqZWN0LT5zZXRQcm90b3R5cGVTdHJ1
Y3R1cmUoJm5leHRPYmplY3QuZ2V0KCkpOworICAgICAgICAgICAgY3VycmVudE9iamVjdC0+c2V0
UHJvdG90eXBlU3RydWN0dXJlKG5leHRPYmplY3QuY29weVJlZigpKTsKICAgICAgICAgICAgIGN1
cnJlbnRPYmplY3QgPSBXVEZNb3ZlKG5leHRPYmplY3QpOwogICAgICAgICB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XVEYvd3RmL0pTT05WYWx1ZXMuY3BwIGIvU291cmNlL1dURi93dGYvSlNPTlZh
bHVlcy5jcHAKaW5kZXggNDA1MjA3OGYzZjk3YzJlOTBmYWNkMDUxZGMxOTJlYzY1MjYxNGMzNC4u
NDliM2YwY2EyZmYxZjhlNjlkMGM0ZjQzYWFhY2ZjYzZhYmRhNmI2MCAxMDA2NDQKLS0tIGEvU291
cmNlL1dURi93dGYvSlNPTlZhbHVlcy5jcHAKKysrIGIvU291cmNlL1dURi93dGYvSlNPTlZhbHVl
cy5jcHAKQEAgLTU3LDkgKzU3LDkgQEAgZW51bSBjbGFzcyBUb2tlbiB7CiAgICAgSW52YWxpZCwK
IH07CiAKLWNvbnN0IGNoYXIqIGNvbnN0IG51bGxTdHJpbmcgPSAibnVsbCI7Ci1jb25zdCBjaGFy
KiBjb25zdCB0cnVlU3RyaW5nID0gInRydWUiOwotY29uc3QgY2hhciogY29uc3QgZmFsc2VTdHJp
bmcgPSAiZmFsc2UiOworY29uc3QgY2hhciogY29uc3QgbnVsbFRva2VuID0gIm51bGwiOworY29u
c3QgY2hhciogY29uc3QgdHJ1ZVRva2VuID0gInRydWUiOworY29uc3QgY2hhciogY29uc3QgZmFs
c2VUb2tlbiA9ICJmYWxzZSI7CiAKIGJvb2wgcGFyc2VDb25zdFRva2VuKGNvbnN0IFVDaGFyKiBz
dGFydCwgY29uc3QgVUNoYXIqIGVuZCwgY29uc3QgVUNoYXIqKiB0b2tlbkVuZCwgY29uc3QgY2hh
ciogdG9rZW4pCiB7CkBAIC0yMDksMTUgKzIwOSwxNSBAQCBUb2tlbiBwYXJzZVRva2VuKGNvbnN0
IFVDaGFyKiBzdGFydCwgY29uc3QgVUNoYXIqIGVuZCwgY29uc3QgVUNoYXIqKiB0b2tlblN0YXJ0
LAogCiAgICAgc3dpdGNoICgqc3RhcnQpIHsKICAgICBjYXNlICduJzoKLSAgICAgICAgaWYgKHBh
cnNlQ29uc3RUb2tlbihzdGFydCwgZW5kLCB0b2tlbkVuZCwgbnVsbFN0cmluZykpCisgICAgICAg
IGlmIChwYXJzZUNvbnN0VG9rZW4oc3RhcnQsIGVuZCwgdG9rZW5FbmQsIG51bGxUb2tlbikpCiAg
ICAgICAgICAgICByZXR1cm4gVG9rZW46Ok51bGw7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
J3QnOgotICAgICAgICBpZiAocGFyc2VDb25zdFRva2VuKHN0YXJ0LCBlbmQsIHRva2VuRW5kLCB0
cnVlU3RyaW5nKSkKKyAgICAgICAgaWYgKHBhcnNlQ29uc3RUb2tlbihzdGFydCwgZW5kLCB0b2tl
bkVuZCwgdHJ1ZVRva2VuKSkKICAgICAgICAgICAgIHJldHVybiBUb2tlbjo6Qm9vbFRydWU7CiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgJ2YnOgotICAgICAgICBpZiAocGFyc2VDb25zdFRva2Vu
KHN0YXJ0LCBlbmQsIHRva2VuRW5kLCBmYWxzZVN0cmluZykpCisgICAgICAgIGlmIChwYXJzZUNv
bnN0VG9rZW4oc3RhcnQsIGVuZCwgdG9rZW5FbmQsIGZhbHNlVG9rZW4pKQogICAgICAgICAgICAg
cmV0dXJuIFRva2VuOjpCb29sRmFsc2U7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgJ1snOgpA
QCAtMzgwLDcgKzM4MCw3IEBAIFJlZlB0cjxKU09OOjpWYWx1ZT4gYnVpbGRWYWx1ZShjb25zdCBV
Q2hhciogc3RhcnQsIGNvbnN0IFVDaGFyKiBlbmQsIGNvbnN0IFVDaGFyCiAgICAgICAgICAgICBS
ZWZQdHI8SlNPTjo6VmFsdWU+IGFycmF5Tm9kZSA9IGJ1aWxkVmFsdWUoc3RhcnQsIGVuZCwgJnRv
a2VuRW5kLCBkZXB0aCArIDEpOwogICAgICAgICAgICAgaWYgKCFhcnJheU5vZGUpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgICAgICBhcnJheS0+cHVzaFZhbHVlKFdU
Rk1vdmUoYXJyYXlOb2RlKSk7CisgICAgICAgICAgICBhcnJheS0+cHVzaFZhbHVlKGFycmF5Tm9k
ZS5yZWxlYXNlTm9uTnVsbCgpKTsKIAogICAgICAgICAgICAgLy8gQWZ0ZXIgYSBsaXN0IHZhbHVl
LCB3ZSBleHBlY3QgYSBjb21tYSBvciB0aGUgZW5kIG9mIHRoZSBsaXN0LgogICAgICAgICAgICAg
c3RhcnQgPSB0b2tlbkVuZDsKQEAgLTQyMCw3ICs0MjAsNyBAQCBSZWZQdHI8SlNPTjo6VmFsdWU+
IGJ1aWxkVmFsdWUoY29uc3QgVUNoYXIqIHN0YXJ0LCBjb25zdCBVQ2hhciogZW5kLCBjb25zdCBV
Q2hhcgogICAgICAgICAgICAgUmVmUHRyPEpTT046OlZhbHVlPiB2YWx1ZSA9IGJ1aWxkVmFsdWUo
c3RhcnQsIGVuZCwgJnRva2VuRW5kLCBkZXB0aCArIDEpOwogICAgICAgICAgICAgaWYgKCF2YWx1
ZSkKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgICAgIG9iamVjdC0+
c2V0VmFsdWUoa2V5LCBXVEZNb3ZlKHZhbHVlKSk7CisgICAgICAgICAgICBvYmplY3QtPnNldFZh
bHVlKGtleSwgdmFsdWUucmVsZWFzZU5vbk51bGwoKSk7CiAgICAgICAgICAgICBzdGFydCA9IHRv
a2VuRW5kOwogCiAgICAgICAgICAgICAvLyBBZnRlciBhIGtleS92YWx1ZSBwYWlyLCB3ZSBleHBl
Y3QgYSBjb21tYSBvciB0aGUgZW5kIG9mIHRoZQpAQCAtNDg5LDQwICs0ODksMzggQEAgUmVmPFZh
bHVlPiBWYWx1ZTo6Y3JlYXRlKGNvbnN0IGNoYXIqIHZhbHVlKQogICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IFZhbHVlKHZhbHVlKSk7CiB9CiAKLWJvb2wgVmFsdWU6OmFzVmFsdWUoUmVmUHRyPFZh
bHVlPiYgdmFsdWUpCitSZWZQdHI8VmFsdWU+IFZhbHVlOjphc1ZhbHVlKCkKIHsKLSAgICB2YWx1
ZSA9IHRoaXM7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHRoaXM7CiB9CiAKLWJvb2wg
VmFsdWU6OmFzT2JqZWN0KFJlZlB0cjxPYmplY3Q+JikKK1JlZlB0cjxPYmplY3Q+IFZhbHVlOjph
c09iamVjdCgpCiB7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBudWxscHRyOwogfQog
Ci1ib29sIFZhbHVlOjphc0FycmF5KFJlZlB0cjxBcnJheT4mKQorUmVmUHRyPEFycmF5PiBWYWx1
ZTo6YXNBcnJheSgpCiB7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBudWxscHRyOwog
fQogCi1ib29sIFZhbHVlOjpwYXJzZUpTT04oY29uc3QgU3RyaW5nJiBqc29uSW5wdXQsIFJlZlB0
cjxWYWx1ZT4mIG91dHB1dCkKK1JlZlB0cjxWYWx1ZT4gVmFsdWU6OnBhcnNlSlNPTihjb25zdCBT
dHJpbmcmIGpzb24pCiB7CiAgICAgLy8gRklYTUU6IFRoaXMgd2hvbGUgZmlsZSBzaG91bGQganVz
dCB1c2UgU3RyaW5nVmlldyBpbnN0ZWFkIG9mIFVDaGFyL2xlbmd0aCBhbmQgYXZvaWQgdXBjb252
ZXJ0aW5nLgotICAgIGF1dG8gY2hhcmFjdGVycyA9IFN0cmluZ1ZpZXcoanNvbklucHV0KS51cGNv
bnZlcnRlZENoYXJhY3RlcnMoKTsKKyAgICBhdXRvIGNoYXJhY3RlcnMgPSBTdHJpbmdWaWV3KGpz
b24pLnVwY29udmVydGVkQ2hhcmFjdGVycygpOwogICAgIGNvbnN0IFVDaGFyKiBzdGFydCA9IGNo
YXJhY3RlcnM7Ci0gICAgY29uc3QgVUNoYXIqIGVuZCA9IHN0YXJ0ICsganNvbklucHV0Lmxlbmd0
aCgpOworICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBzdGFydCArIGpzb24ubGVuZ3RoKCk7CiAgICAg
Y29uc3QgVUNoYXIqIHRva2VuRW5kOwogICAgIGF1dG8gcmVzdWx0ID0gYnVpbGRWYWx1ZShzdGFy
dCwgZW5kLCAmdG9rZW5FbmQsIDApOwogICAgIGlmICghcmVzdWx0KQotICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgZm9yIChjb25zdCBVQ2hhciog
dmFsdWVFbmQgPSB0b2tlbkVuZDsgdmFsdWVFbmQgPCBlbmQ7ICsrdmFsdWVFbmQpIHsKICAgICAg
ICAgaWYgKCFpc1NwYWNlT3JOZXdsaW5lKCp2YWx1ZUVuZCkpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKLSAgICBvdXRwdXQg
PSBXVEZNb3ZlKHJlc3VsdCk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIAogdm9pZCBWYWx1ZTo6ZXNjYXBlU3RyaW5nKFN0cmluZ0J1aWxkZXImIGJ1aWxkZXIsIFN0
cmluZ1ZpZXcgc3RyaW5nKQpAQCAtNTczLDk0ICs1NzEsMzIgQEAgU3RyaW5nIFZhbHVlOjp0b0pT
T05TdHJpbmcoKSBjb25zdAogICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKIH0KIAotYm9v
bCBWYWx1ZTo6YXNCb29sZWFuKGJvb2wmIG91dHB1dCkgY29uc3QKK09wdGlvbmFsPGJvb2w+IFZh
bHVlOjphc0Jvb2xlYW4oKSBjb25zdAogewogICAgIGlmICh0eXBlKCkgIT0gVHlwZTo6Qm9vbGVh
bikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgb3V0cHV0ID0gbV92YWx1ZS5ib29sZWFu
OwotICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHJl
dHVybiBtX3ZhbHVlLmJvb2xlYW47CiB9CiAKLWJvb2wgVmFsdWU6OmFzRG91YmxlKGRvdWJsZSYg
b3V0cHV0KSBjb25zdAorT3B0aW9uYWw8ZG91YmxlPiBWYWx1ZTo6YXNEb3VibGUoKSBjb25zdAog
ewotICAgIGlmICh0eXBlKCkgIT0gVHlwZTo6RG91YmxlKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBvdXRwdXQgPSBtX3ZhbHVlLm51bWJlcjsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBp
ZiAodHlwZSgpICE9IFR5cGU6OkRvdWJsZSAmJiB0eXBlKCkgIT0gVHlwZTo6SW50ZWdlcikKKyAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICByZXR1cm4gbV92YWx1ZS5udW1iZXI7CiB9
CiAKLWJvb2wgVmFsdWU6OmFzRG91YmxlKGZsb2F0JiBvdXRwdXQpIGNvbnN0CitPcHRpb25hbDxp
bnQ+IFZhbHVlOjphc0ludGVnZXIoKSBjb25zdAogewotICAgIGlmICh0eXBlKCkgIT0gVHlwZTo6
RG91YmxlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBvdXRwdXQgPSBzdGF0aWNfY2Fz
dDxmbG9hdD4obV92YWx1ZS5udW1iZXIpOwotICAgIHJldHVybiB0cnVlOworICAgIGlmICh0eXBl
KCkgIT0gVHlwZTo6RG91YmxlICYmIHR5cGUoKSAhPSBUeXBlOjpJbnRlZ2VyKQorICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KG1fdmFsdWUu
bnVtYmVyKTsKIH0KIAotYm9vbCBWYWx1ZTo6YXNJbnRlZ2VyKGludCYgb3V0cHV0KSBjb25zdAot
ewotICAgIGlmICh0eXBlKCkgIT0gVHlwZTo6SW50ZWdlciAmJiB0eXBlKCkgIT0gVHlwZTo6RG91
YmxlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBvdXRwdXQgPSBzdGF0aWNfY2FzdDxp
bnQ+KG1fdmFsdWUubnVtYmVyKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBWYWx1ZTo6
YXNJbnRlZ2VyKHVuc2lnbmVkJiBvdXRwdXQpIGNvbnN0Ci17Ci0gICAgaWYgKHR5cGUoKSAhPSBU
eXBlOjpJbnRlZ2VyICYmIHR5cGUoKSAhPSBUeXBlOjpEb3VibGUpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIG91dHB1dCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX3ZhbHVlLm51bWJl
cik7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgVmFsdWU6OmFzSW50ZWdlcihsb25nJiBv
dXRwdXQpIGNvbnN0Ci17Ci0gICAgaWYgKHR5cGUoKSAhPSBUeXBlOjpJbnRlZ2VyICYmIHR5cGUo
KSAhPSBUeXBlOjpEb3VibGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIG91dHB1dCA9
IHN0YXRpY19jYXN0PGxvbmc+KG1fdmFsdWUubnVtYmVyKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotYm9vbCBWYWx1ZTo6YXNJbnRlZ2VyKGxvbmcgbG9uZyYgb3V0cHV0KSBjb25zdAotewotICAg
IGlmICh0eXBlKCkgIT0gVHlwZTo6SW50ZWdlciAmJiB0eXBlKCkgIT0gVHlwZTo6RG91YmxlKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBvdXRwdXQgPSBzdGF0aWNfY2FzdDxsb25nIGxv
bmc+KG1fdmFsdWUubnVtYmVyKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBWYWx1ZTo6
YXNJbnRlZ2VyKHVuc2lnbmVkIGxvbmcmIG91dHB1dCkgY29uc3QKLXsKLSAgICBpZiAodHlwZSgp
ICE9IFR5cGU6OkludGVnZXIgJiYgdHlwZSgpICE9IFR5cGU6OkRvdWJsZSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgb3V0cHV0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4obV92
YWx1ZS5udW1iZXIpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFZhbHVlOjphc0ludGVn
ZXIodW5zaWduZWQgbG9uZyBsb25nJiBvdXRwdXQpIGNvbnN0Ci17Ci0gICAgaWYgKHR5cGUoKSAh
PSBUeXBlOjpJbnRlZ2VyICYmIHR5cGUoKSAhPSBUeXBlOjpEb3VibGUpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIG91dHB1dCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4o
bV92YWx1ZS5udW1iZXIpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFZhbHVlOjphc1N0
cmluZyhTdHJpbmcmIG91dHB1dCkgY29uc3QKK1N0cmluZyBWYWx1ZTo6YXNTdHJpbmcoKSBjb25z
dAogewogICAgIGlmICh0eXBlKCkgIT0gVHlwZTo6U3RyaW5nKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBvdXRwdXQgPSBtX3ZhbHVlLnN0cmluZzsKLSAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgcmV0dXJuIG51bGxTdHJpbmcoKTsKKyAgICByZXR1cm4gbV92YWx1ZS5zdHJpbmc7CiB9
CiAKIHZvaWQgVmFsdWU6OndyaXRlSlNPTihTdHJpbmdCdWlsZGVyJiBvdXRwdXQpIGNvbnN0CkBA
IC03MDMsNzYgKzYzOSw3NCBAQCBPYmplY3RCYXNlOjp+T2JqZWN0QmFzZSgpCiB7CiB9CiAKLWJv
b2wgT2JqZWN0QmFzZTo6YXNPYmplY3QoUmVmUHRyPE9iamVjdD4mIG91dHB1dCkKK1JlZlB0cjxP
YmplY3Q+IE9iamVjdEJhc2U6OmFzT2JqZWN0KCkKIHsKICAgICBDT01QSUxFX0FTU0VSVChzaXpl
b2YoT2JqZWN0KSA9PSBzaXplb2YoT2JqZWN0QmFzZSksIGNhbm5vdF9jYXN0KTsKLQotICAgIG91
dHB1dCA9IHN0YXRpY19jYXN0PE9iamVjdCo+KHRoaXMpOwotICAgIHJldHVybiB0cnVlOwotfQot
Ci1PYmplY3QqIE9iamVjdEJhc2U6Om9wZW5BY2Nlc3NvcnMoKQotewotICAgIENPTVBJTEVfQVNT
RVJUKHNpemVvZihPYmplY3QpID09IHNpemVvZihPYmplY3RCYXNlKSwgY2Fubm90X2Nhc3QpOwot
CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PE9iamVjdCo+KHRoaXMpOwogfQogCiBzaXplX3QgT2Jq
ZWN0QmFzZTo6bWVtb3J5Q29zdCgpIGNvbnN0CiB7CiAgICAgc2l6ZV90IG1lbW9yeUNvc3QgPSBW
YWx1ZTo6bWVtb3J5Q29zdCgpOwotICAgIGZvciAoY29uc3QgYXV0byYgZW50cnkgOiBtX21hcCkg
ewotICAgICAgICBtZW1vcnlDb3N0ICs9IGVudHJ5LmtleS5zaXplSW5CeXRlcygpOwotICAgICAg
ICBpZiAoZW50cnkudmFsdWUpCi0gICAgICAgICAgICBtZW1vcnlDb3N0ICs9IGVudHJ5LnZhbHVl
LT5tZW1vcnlDb3N0KCk7Ci0gICAgfQorICAgIGZvciAoY29uc3QgYXV0byYgZW50cnkgOiBtX21h
cCkKKyAgICAgICAgbWVtb3J5Q29zdCArPSBlbnRyeS5rZXkuc2l6ZUluQnl0ZXMoKSArIGVudHJ5
LnZhbHVlLT5tZW1vcnlDb3N0KCk7CiAgICAgcmV0dXJuIG1lbW9yeUNvc3Q7CiB9CiAKLWJvb2wg
T2JqZWN0QmFzZTo6Z2V0Qm9vbGVhbihjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wmIG91dHB1dCkg
Y29uc3QKK09wdGlvbmFsPGJvb2w+IE9iamVjdEJhc2U6OmdldEJvb2xlYW4oY29uc3QgU3RyaW5n
JiBuYW1lKSBjb25zdAogewotICAgIFJlZlB0cjxWYWx1ZT4gdmFsdWU7Ci0gICAgaWYgKCFnZXRW
YWx1ZShuYW1lLCB2YWx1ZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB2
YWx1ZS0+YXNCb29sZWFuKG91dHB1dCk7CisgICAgYXV0byB2YWx1ZSA9IGdldFZhbHVlKG5hbWUp
OworICAgIGlmICghdmFsdWUpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgcmV0
dXJuIHZhbHVlLT5hc0Jvb2xlYW4oKTsKIH0KIAotYm9vbCBPYmplY3RCYXNlOjpnZXRTdHJpbmco
Y29uc3QgU3RyaW5nJiBuYW1lLCBTdHJpbmcmIG91dHB1dCkgY29uc3QKK09wdGlvbmFsPGRvdWJs
ZT4gT2JqZWN0QmFzZTo6Z2V0RG91YmxlKGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3QKIHsKLSAg
ICBSZWZQdHI8VmFsdWU+IHZhbHVlOwotICAgIGlmICghZ2V0VmFsdWUobmFtZSwgdmFsdWUpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gdmFsdWUtPmFzU3RyaW5nKG91dHB1
dCk7CisgICAgYXV0byB2YWx1ZSA9IGdldFZhbHVlKG5hbWUpOworICAgIGlmICghdmFsdWUpCisg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgcmV0dXJuIHZhbHVlLT5hc0RvdWJsZSgp
OwogfQogCi1ib29sIE9iamVjdEJhc2U6OmdldE9iamVjdChjb25zdCBTdHJpbmcmIG5hbWUsIFJl
ZlB0cjxPYmplY3Q+JiBvdXRwdXQpIGNvbnN0CitPcHRpb25hbDxpbnQ+IE9iamVjdEJhc2U6Omdl
dEludGVnZXIoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdAogewotICAgIFJlZlB0cjxWYWx1ZT4g
dmFsdWU7Ci0gICAgaWYgKCFnZXRWYWx1ZShuYW1lLCB2YWx1ZSkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIHJldHVybiB2YWx1ZS0+YXNPYmplY3Qob3V0cHV0KTsKKyAgICBhdXRvIHZh
bHVlID0gZ2V0VmFsdWUobmFtZSk7CisgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKKyAgICByZXR1cm4gdmFsdWUtPmFzSW50ZWdlcigpOwogfQogCi1ib29sIE9i
amVjdEJhc2U6OmdldEFycmF5KGNvbnN0IFN0cmluZyYgbmFtZSwgUmVmUHRyPEFycmF5PiYgb3V0
cHV0KSBjb25zdAorU3RyaW5nIE9iamVjdEJhc2U6OmdldFN0cmluZyhjb25zdCBTdHJpbmcmIG5h
bWUpIGNvbnN0CiB7Ci0gICAgUmVmUHRyPFZhbHVlPiB2YWx1ZTsKLSAgICBpZiAoIWdldFZhbHVl
KG5hbWUsIHZhbHVlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHZhbHVl
LT5hc0FycmF5KG91dHB1dCk7CisgICAgYXV0byB2YWx1ZSA9IGdldFZhbHVlKG5hbWUpOworICAg
IGlmICghdmFsdWUpCisgICAgICAgIHJldHVybiBudWxsU3RyaW5nKCk7CisgICAgcmV0dXJuIHZh
bHVlLT5hc1N0cmluZygpOwogfQogCi1ib29sIE9iamVjdEJhc2U6OmdldFZhbHVlKGNvbnN0IFN0
cmluZyYgbmFtZSwgUmVmUHRyPFZhbHVlPiYgb3V0cHV0KSBjb25zdAorUmVmUHRyPE9iamVjdD4g
T2JqZWN0QmFzZTo6Z2V0T2JqZWN0KGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3QKIHsKLSAgICBE
aWN0aW9uYXJ5Ojpjb25zdF9pdGVyYXRvciBmaW5kUmVzdWx0ID0gbV9tYXAuZmluZChuYW1lKTsK
KyAgICBhdXRvIHZhbHVlID0gZ2V0VmFsdWUobmFtZSk7CisgICAgaWYgKCF2YWx1ZSkKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIHZhbHVlLT5hc09iamVjdCgpOworfQorCitS
ZWZQdHI8QXJyYXk+IE9iamVjdEJhc2U6OmdldEFycmF5KGNvbnN0IFN0cmluZyYgbmFtZSkgY29u
c3QKK3sKKyAgICBhdXRvIHZhbHVlID0gZ2V0VmFsdWUobmFtZSk7CisgICAgaWYgKCF2YWx1ZSkK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIHZhbHVlLT5hc0FycmF5KCk7Cit9
CisKK1JlZlB0cjxWYWx1ZT4gT2JqZWN0QmFzZTo6Z2V0VmFsdWUoY29uc3QgU3RyaW5nJiBuYW1l
KSBjb25zdAoreworICAgIGF1dG8gZmluZFJlc3VsdCA9IG1fbWFwLmZpbmQobmFtZSk7CiAgICAg
aWYgKGZpbmRSZXN1bHQgPT0gbV9tYXAuZW5kKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIG91dHB1dCA9IGZpbmRSZXN1bHQtPnZhbHVlOwotICAgIHJldHVybiB0cnVlOworICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gZmluZFJlc3VsdC0+dmFsdWUuY29weVJlZigp
OwogfQogCiB2b2lkIE9iamVjdEJhc2U6OnJlbW92ZShjb25zdCBTdHJpbmcmIG5hbWUpCkBAIC03
OTgsOCArNzMyLDYgQEAgdm9pZCBPYmplY3RCYXNlOjp3cml0ZUpTT04oU3RyaW5nQnVpbGRlciYg
b3V0cHV0KSBjb25zdAogCiBPYmplY3RCYXNlOjpPYmplY3RCYXNlKCkKICAgICA6IFZhbHVlKFR5
cGU6Ok9iamVjdCkKLSAgICAsIG1fbWFwKCkKLSAgICAsIG1fb3JkZXIoKQogewogfQogCkBAIC04
MDcsMTcgKzczOSwxNiBAQCBBcnJheUJhc2U6On5BcnJheUJhc2UoKQogewogfQogCi1ib29sIEFy
cmF5QmFzZTo6YXNBcnJheShSZWZQdHI8QXJyYXk+JiBvdXRwdXQpCitSZWZQdHI8QXJyYXk+IEFy
cmF5QmFzZTo6YXNBcnJheSgpCiB7CiAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKEFycmF5QmFz
ZSkgPT0gc2l6ZW9mKEFycmF5KSwgY2Fubm90X2Nhc3QpOwotICAgIG91dHB1dCA9IHN0YXRpY19j
YXN0PEFycmF5Kj4odGhpcyk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHN0YXRpY19j
YXN0PEFycmF5Kj4odGhpcyk7CiB9CiAKIHZvaWQgQXJyYXlCYXNlOjp3cml0ZUpTT04oU3RyaW5n
QnVpbGRlciYgb3V0cHV0KSBjb25zdAogewogICAgIG91dHB1dC5hcHBlbmQoJ1snKTsKLSAgICBm
b3IgKFZlY3RvcjxSZWZQdHI8VmFsdWU+Pjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX21hcC5iZWdp
bigpOyBpdCAhPSBtX21hcC5lbmQoKTsgKytpdCkgeworICAgIGZvciAoYXV0byBpdCA9IG1fbWFw
LmJlZ2luKCk7IGl0ICE9IG1fbWFwLmVuZCgpOyArK2l0KSB7CiAgICAgICAgIGlmIChpdCAhPSBt
X21hcC5iZWdpbigpKQogICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgnLCcpOwogICAgICAgICAo
Kml0KS0+d3JpdGVKU09OKG91dHB1dCk7CkBAIC04MjcsMTEgKzc1OCwxMCBAQCB2b2lkIEFycmF5
QmFzZTo6d3JpdGVKU09OKFN0cmluZ0J1aWxkZXImIG91dHB1dCkgY29uc3QKIAogQXJyYXlCYXNl
OjpBcnJheUJhc2UoKQogICAgIDogVmFsdWUoVHlwZTo6QXJyYXkpCi0gICAgLCBtX21hcCgpCiB7
CiB9CiAKLVJlZlB0cjxWYWx1ZT4gQXJyYXlCYXNlOjpnZXQoc2l6ZV90IGluZGV4KSBjb25zdAor
UmVmPFZhbHVlPiBBcnJheUJhc2U6OmdldChzaXplX3QgaW5kZXgpIGNvbnN0CiB7CiAgICAgUkVM
RUFTRV9BU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihpbmRleCA8IG1fbWFwLnNpemUo
KSk7CiAgICAgcmV0dXJuIG1fbWFwW2luZGV4XTsKQEAgLTg1MCwxMCArNzgwLDggQEAgUmVmPEFy
cmF5PiBBcnJheTo6Y3JlYXRlKCkKIHNpemVfdCBBcnJheUJhc2U6Om1lbW9yeUNvc3QoKSBjb25z
dAogewogICAgIHNpemVfdCBtZW1vcnlDb3N0ID0gVmFsdWU6Om1lbW9yeUNvc3QoKTsKLSAgICBm
b3IgKGNvbnN0IGF1dG8mIGl0ZW0gOiBtX21hcCkgewotICAgICAgICBpZiAoaXRlbSkKLSAgICAg
ICAgICAgIG1lbW9yeUNvc3QgKz0gaXRlbS0+bWVtb3J5Q29zdCgpOwotICAgIH0KKyAgICBmb3Ig
KGNvbnN0IGF1dG8mIGl0ZW0gOiBtX21hcCkKKyAgICAgICAgbWVtb3J5Q29zdCArPSBpdGVtLT5t
ZW1vcnlDb3N0KCk7CiAgICAgcmV0dXJuIG1lbW9yeUNvc3Q7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XVEYvd3RmL0pTT05WYWx1ZXMuaCBiL1NvdXJjZS9XVEYvd3RmL0pTT05WYWx1ZXMuaApp
bmRleCBlYmFiYzQ0OWY4ODBiMzlkM2ZhZGU3OGNkNjFiMWM0ZDVlMGU2ODYzLi40MzA3NDUzZDlj
YzhmODhjYzE2OTljZDg4NTcyMTY4NzdmZGM5YjA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0
Zi9KU09OVmFsdWVzLmgKKysrIGIvU291cmNlL1dURi93dGYvSlNPTlZhbHVlcy5oCkBAIC05Miwy
MiArOTIsMTUgQEAgcHVibGljOgogICAgIFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlw
ZTsgfQogICAgIGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1cm4gbV90eXBlID09IFR5cGU6Ok51
bGw7IH0KIAotICAgIGJvb2wgYXNCb29sZWFuKGJvb2wmKSBjb25zdDsKLSAgICBib29sIGFzSW50
ZWdlcihpbnQmKSBjb25zdDsKLSAgICBib29sIGFzSW50ZWdlcih1bnNpZ25lZCYpIGNvbnN0Owot
ICAgIGJvb2wgYXNJbnRlZ2VyKGxvbmcmKSBjb25zdDsKLSAgICBib29sIGFzSW50ZWdlcihsb25n
IGxvbmcmKSBjb25zdDsKLSAgICBib29sIGFzSW50ZWdlcih1bnNpZ25lZCBsb25nJikgY29uc3Q7
Ci0gICAgYm9vbCBhc0ludGVnZXIodW5zaWduZWQgbG9uZyBsb25nJikgY29uc3Q7Ci0gICAgYm9v
bCBhc0RvdWJsZShkb3VibGUmKSBjb25zdDsKLSAgICBib29sIGFzRG91YmxlKGZsb2F0JikgY29u
c3Q7Ci0gICAgYm9vbCBhc1N0cmluZyhTdHJpbmcmKSBjb25zdDsKLSAgICBib29sIGFzVmFsdWUo
UmVmUHRyPFZhbHVlPiYpOworICAgIE9wdGlvbmFsPGJvb2w+IGFzQm9vbGVhbigpIGNvbnN0Owor
ICAgIE9wdGlvbmFsPGludD4gYXNJbnRlZ2VyKCkgY29uc3Q7CisgICAgT3B0aW9uYWw8ZG91Ymxl
PiBhc0RvdWJsZSgpIGNvbnN0OworICAgIFN0cmluZyBhc1N0cmluZygpIGNvbnN0OworICAgIFJl
ZlB0cjxWYWx1ZT4gYXNWYWx1ZSgpOworICAgIHZpcnR1YWwgUmVmUHRyPE9iamVjdD4gYXNPYmpl
Y3QoKTsKKyAgICB2aXJ0dWFsIFJlZlB0cjxBcnJheT4gYXNBcnJheSgpOwogCi0gICAgdmlydHVh
bCBib29sIGFzT2JqZWN0KFJlZlB0cjxPYmplY3Q+Jik7Ci0gICAgdmlydHVhbCBib29sIGFzQXJy
YXkoUmVmUHRyPEFycmF5PiYpOwotCi0gICAgc3RhdGljIGJvb2wgcGFyc2VKU09OKGNvbnN0IFN0
cmluZyYganNvbklucHV0LCBSZWZQdHI8VmFsdWU+JiBvdXRwdXQpOworICAgIHN0YXRpYyBSZWZQ
dHI8VmFsdWU+IHBhcnNlSlNPTihjb25zdCBTdHJpbmcmKTsKICAgICBzdGF0aWMgdm9pZCBlc2Nh
cGVTdHJpbmcoU3RyaW5nQnVpbGRlciYsIFN0cmluZ1ZpZXcpOwogCiAgICAgU3RyaW5nIHRvSlNP
TlN0cmluZygpIGNvbnN0OwpAQCAtMTcyLDk1ICsxNjUsNjMgQEAgcHJpdmF0ZToKIAogY2xhc3Mg
V1RGX0VYUE9SVF9QUklWQVRFIE9iamVjdEJhc2UgOiBwdWJsaWMgVmFsdWUgewogcHJpdmF0ZToK
LSAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8VmFsdWU+PiBEaWN0aW9uYXJ5Owor
ICAgIHVzaW5nIERhdGFTdG9yYWdlID0gSGFzaE1hcDxTdHJpbmcsIFJlZjxWYWx1ZT4+OworICAg
IHVzaW5nIE9yZGVyU3RvcmFnZSA9IFZlY3RvcjxTdHJpbmc+OwogCiBwdWJsaWM6Ci0gICAgdHlw
ZWRlZiBEaWN0aW9uYXJ5OjppdGVyYXRvciBpdGVyYXRvcjsKLSAgICB0eXBlZGVmIERpY3Rpb25h
cnk6OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOworICAgIHVzaW5nIGl0ZXJhdG9yID0g
RGF0YVN0b3JhZ2U6Oml0ZXJhdG9yOworICAgIHVzaW5nIGNvbnN0X2l0ZXJhdG9yID0gRGF0YVN0
b3JhZ2U6OmNvbnN0X2l0ZXJhdG9yOwogCi0gICAgT2JqZWN0KiBvcGVuQWNjZXNzb3JzKCk7Cisg
ICAgUmVmUHRyPE9iamVjdD4gYXNPYmplY3QoKSBmaW5hbDsKIAogICAgIHNpemVfdCBtZW1vcnlD
b3N0KCkgY29uc3QgZmluYWw7CiAKIHByb3RlY3RlZDoKICAgICB+T2JqZWN0QmFzZSgpIG92ZXJy
aWRlOwogCi0gICAgYm9vbCBhc09iamVjdChSZWZQdHI8T2JqZWN0PiYgb3V0cHV0KSBvdmVycmlk
ZTsKLQogICAgIC8vIEZJWE1FOiB1c2UgdGVtcGxhdGVzIHRvIHJlZHVjZSB0aGUgYW1vdW50IG9m
IGR1cGxpY2F0ZWQgc2V0KigpIG1ldGhvZHMuCiAgICAgdm9pZCBzZXRCb29sZWFuKGNvbnN0IFN0
cmluZyYgbmFtZSwgYm9vbCk7CiAgICAgdm9pZCBzZXRJbnRlZ2VyKGNvbnN0IFN0cmluZyYgbmFt
ZSwgaW50KTsKICAgICB2b2lkIHNldERvdWJsZShjb25zdCBTdHJpbmcmIG5hbWUsIGRvdWJsZSk7
CiAgICAgdm9pZCBzZXRTdHJpbmcoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmKTsK
LSAgICB2b2lkIHNldFZhbHVlKGNvbnN0IFN0cmluZyYgbmFtZSwgUmVmUHRyPFZhbHVlPiYmKTsK
LSAgICB2b2lkIHNldE9iamVjdChjb25zdCBTdHJpbmcmIG5hbWUsIFJlZlB0cjxPYmplY3RCYXNl
PiYmKTsKLSAgICB2b2lkIHNldEFycmF5KGNvbnN0IFN0cmluZyYgbmFtZSwgUmVmUHRyPEFycmF5
QmFzZT4mJik7CisgICAgdm9pZCBzZXRWYWx1ZShjb25zdCBTdHJpbmcmIG5hbWUsIFJlZjxWYWx1
ZT4mJik7CisgICAgdm9pZCBzZXRPYmplY3QoY29uc3QgU3RyaW5nJiBuYW1lLCBSZWY8T2JqZWN0
QmFzZT4mJik7CisgICAgdm9pZCBzZXRBcnJheShjb25zdCBTdHJpbmcmIG5hbWUsIFJlZjxBcnJh
eUJhc2U+JiYpOwogCiAgICAgaXRlcmF0b3IgZmluZChjb25zdCBTdHJpbmcmIG5hbWUpOwogICAg
IGNvbnN0X2l0ZXJhdG9yIGZpbmQoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdDsKIAotICAgIC8v
IEZJWE1FOiB1c2UgdGVtcGxhdGVzIHRvIHJlZHVjZSB0aGUgYW1vdW50IG9mIGR1cGxpY2F0ZWQg
Z2V0KigpIG1ldGhvZHMuCi0gICAgYm9vbCBnZXRCb29sZWFuKGNvbnN0IFN0cmluZyYgbmFtZSwg
Ym9vbCYgb3V0cHV0KSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBUPiBib29sIGdldERvdWJs
ZShjb25zdCBTdHJpbmcmIG5hbWUsIFQmIG91dHB1dCkgY29uc3QKLSAgICB7Ci0gICAgICAgIFJl
ZlB0cjxWYWx1ZT4gdmFsdWU7Ci0gICAgICAgIGlmICghZ2V0VmFsdWUobmFtZSwgdmFsdWUpKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIHJldHVybiB2YWx1ZS0+YXNEb3Vi
bGUob3V0cHV0KTsKLSAgICB9Ci0gICAgdGVtcGxhdGU8Y2xhc3MgVD4gYm9vbCBnZXRJbnRlZ2Vy
KGNvbnN0IFN0cmluZyYgbmFtZSwgVCYgb3V0cHV0KSBjb25zdAotICAgIHsKLSAgICAgICAgUmVm
UHRyPFZhbHVlPiB2YWx1ZTsKLSAgICAgICAgaWYgKCFnZXRWYWx1ZShuYW1lLCB2YWx1ZSkpCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgcmV0dXJuIHZhbHVlLT5hc0ludGVn
ZXIob3V0cHV0KTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTxjbGFzcyBUPiBPcHRpb25hbDxUPiBn
ZXROdW1iZXIoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdAotICAgIHsKLSAgICAgICAgUmVmUHRy
PFZhbHVlPiB2YWx1ZTsKLSAgICAgICAgaWYgKCFnZXRWYWx1ZShuYW1lLCB2YWx1ZSkpCi0gICAg
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgICAgIFQgcmVzdWx0OwotICAgICAg
ICBpZiAoIXZhbHVlLT5hc0RvdWJsZShyZXN1bHQpKQotICAgICAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKLQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIGJvb2wgZ2V0
U3RyaW5nKGNvbnN0IFN0cmluZyYgbmFtZSwgU3RyaW5nJiBvdXRwdXQpIGNvbnN0OwotICAgIGJv
b2wgZ2V0T2JqZWN0KGNvbnN0IFN0cmluZyYgbmFtZSwgUmVmUHRyPE9iamVjdD4mKSBjb25zdDsK
LSAgICBib29sIGdldEFycmF5KGNvbnN0IFN0cmluZyYgbmFtZSwgUmVmUHRyPEFycmF5PiYpIGNv
bnN0OwotICAgIGJvb2wgZ2V0VmFsdWUoY29uc3QgU3RyaW5nJiBuYW1lLCBSZWZQdHI8VmFsdWU+
JikgY29uc3Q7CisgICAgT3B0aW9uYWw8Ym9vbD4gZ2V0Qm9vbGVhbihjb25zdCBTdHJpbmcmIG5h
bWUpIGNvbnN0OworICAgIE9wdGlvbmFsPGRvdWJsZT4gZ2V0RG91YmxlKGNvbnN0IFN0cmluZyYg
bmFtZSkgY29uc3Q7CisgICAgT3B0aW9uYWw8aW50PiBnZXRJbnRlZ2VyKGNvbnN0IFN0cmluZyYg
bmFtZSkgY29uc3Q7CisgICAgU3RyaW5nIGdldFN0cmluZyhjb25zdCBTdHJpbmcmIG5hbWUpIGNv
bnN0OworICAgIFJlZlB0cjxPYmplY3Q+IGdldE9iamVjdChjb25zdCBTdHJpbmcmIG5hbWUpIGNv
bnN0OworICAgIFJlZlB0cjxBcnJheT4gZ2V0QXJyYXkoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25z
dDsKKyAgICBSZWZQdHI8VmFsdWU+IGdldFZhbHVlKGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3Q7
CiAKICAgICB2b2lkIHJlbW92ZShjb25zdCBTdHJpbmcmIG5hbWUpOwogCi0gICAgdm9pZCB3cml0
ZUpTT04oU3RyaW5nQnVpbGRlciYgb3V0cHV0KSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIHdy
aXRlSlNPTihTdHJpbmdCdWlsZGVyJiBvdXRwdXQpIGNvbnN0IGZpbmFsOwogCiAgICAgaXRlcmF0
b3IgYmVnaW4oKSB7IHJldHVybiBtX21hcC5iZWdpbigpOyB9CiAgICAgaXRlcmF0b3IgZW5kKCkg
eyByZXR1cm4gbV9tYXAuZW5kKCk7IH0KICAgICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0
IHsgcmV0dXJuIG1fbWFwLmJlZ2luKCk7IH0KICAgICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25z
dCB7IHJldHVybiBtX21hcC5lbmQoKTsgfQogCi0gICAgaW50IHNpemUoKSBjb25zdCB7IHJldHVy
biBtX21hcC5zaXplKCk7IH0KKyAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9t
YXAuc2l6ZSgpOyB9CiAKIHByb3RlY3RlZDoKICAgICBPYmplY3RCYXNlKCk7CiAKIHByaXZhdGU6
Ci0gICAgRGljdGlvbmFyeSBtX21hcDsKLSAgICBWZWN0b3I8U3RyaW5nPiBtX29yZGVyOworICAg
IERhdGFTdG9yYWdlIG1fbWFwOworICAgIE9yZGVyU3RvcmFnZSBtX29yZGVyOwogfTsKIAogY2xh
c3MgT2JqZWN0IDogcHVibGljIE9iamVjdEJhc2UgewogcHVibGljOgogICAgIHN0YXRpYyBXVEZf
RVhQT1JUX1BSSVZBVEUgUmVmPE9iamVjdD4gY3JlYXRlKCk7CiAKLSAgICB1c2luZyBPYmplY3RC
YXNlOjphc09iamVjdDsKLQogICAgIC8vIFRoaXMgY2xhc3MgZXhwZWN0ZWQgbm9uLWN5Y2xpYyB2
YWx1ZXMsIGFzIHdlIGNhbm5vdCBzZXJpYWxpemUgY3ljbGVzIGluIEpTT04uCiAgICAgdXNpbmcg
T2JqZWN0QmFzZTo6c2V0Qm9vbGVhbjsKICAgICB1c2luZyBPYmplY3RCYXNlOjpzZXRJbnRlZ2Vy
OwpAQCAtMjc0LDcgKzIzNSw2IEBAIHB1YmxpYzoKICAgICB1c2luZyBPYmplY3RCYXNlOjpnZXRC
b29sZWFuOwogICAgIHVzaW5nIE9iamVjdEJhc2U6OmdldEludGVnZXI7CiAgICAgdXNpbmcgT2Jq
ZWN0QmFzZTo6Z2V0RG91YmxlOwotICAgIHVzaW5nIE9iamVjdEJhc2U6OmdldE51bWJlcjsKICAg
ICB1c2luZyBPYmplY3RCYXNlOjpnZXRTdHJpbmc7CiAgICAgdXNpbmcgT2JqZWN0QmFzZTo6Z2V0
T2JqZWN0OwogICAgIHVzaW5nIE9iamVjdEJhc2U6OmdldEFycmF5OwpAQCAtMjkwLDQ5ICsyNTAs
NDkgQEAgcHVibGljOgogCiAKIGNsYXNzIFdURl9FWFBPUlRfUFJJVkFURSBBcnJheUJhc2UgOiBw
dWJsaWMgVmFsdWUgeworcHJpdmF0ZToKKyAgICB1c2luZyBEYXRhU3RvcmFnZSA9IFZlY3RvcjxS
ZWY8VmFsdWU+PjsKKwogcHVibGljOgotICAgIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxWYWx1ZT4+
OjppdGVyYXRvciBpdGVyYXRvcjsKLSAgICB0eXBlZGVmIFZlY3RvcjxSZWZQdHI8VmFsdWU+Pjo6
Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CisgICAgdXNpbmcgaXRlcmF0b3IgPSBEYXRh
U3RvcmFnZTo6aXRlcmF0b3I7CisgICAgdXNpbmcgY29uc3RfaXRlcmF0b3IgPSBEYXRhU3RvcmFn
ZTo6Y29uc3RfaXRlcmF0b3I7CiAKLSAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7IHJldHVy
biBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9tYXAuc2l6ZSgpKTsgfQorICAgIHNpemVfdCBsZW5n
dGgoKSBjb25zdCB7IHJldHVybiBtX21hcC5zaXplKCk7IH0KIAotICAgIFJlZlB0cjxWYWx1ZT4g
Z2V0KHNpemVfdCBpbmRleCkgY29uc3Q7CisgICAgUmVmPFZhbHVlPiBnZXQoc2l6ZV90IGluZGV4
KSBjb25zdDsKIAogICAgIHNpemVfdCBtZW1vcnlDb3N0KCkgY29uc3QgZmluYWw7CiAKKyAgICBS
ZWZQdHI8QXJyYXk+IGFzQXJyYXkoKSBmaW5hbDsKKwogcHJvdGVjdGVkOgogICAgIH5BcnJheUJh
c2UoKSBvdmVycmlkZTsKIAotICAgIGJvb2wgYXNBcnJheShSZWZQdHI8QXJyYXk+Jikgb3ZlcnJp
ZGU7Ci0KICAgICB2b2lkIHB1c2hCb29sZWFuKGJvb2wpOwogICAgIHZvaWQgcHVzaEludGVnZXIo
aW50KTsKICAgICB2b2lkIHB1c2hEb3VibGUoZG91YmxlKTsKICAgICB2b2lkIHB1c2hTdHJpbmco
Y29uc3QgU3RyaW5nJik7Ci0gICAgdm9pZCBwdXNoVmFsdWUoUmVmUHRyPFZhbHVlPiYmKTsKLSAg
ICB2b2lkIHB1c2hPYmplY3QoUmVmUHRyPE9iamVjdEJhc2U+JiYpOwotICAgIHZvaWQgcHVzaEFy
cmF5KFJlZlB0cjxBcnJheUJhc2U+JiYpOwotCi0gICAgdm9pZCB3cml0ZUpTT04oU3RyaW5nQnVp
bGRlciYgb3V0cHV0KSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIHB1c2hWYWx1ZShSZWY8VmFs
dWU+JiYpOworICAgIHZvaWQgcHVzaE9iamVjdChSZWY8T2JqZWN0QmFzZT4mJik7CisgICAgdm9p
ZCBwdXNoQXJyYXkoUmVmPEFycmF5QmFzZT4mJik7CiAKICAgICBpdGVyYXRvciBiZWdpbigpIHsg
cmV0dXJuIG1fbWFwLmJlZ2luKCk7IH0KICAgICBpdGVyYXRvciBlbmQoKSB7IHJldHVybiBtX21h
cC5lbmQoKTsgfQogICAgIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gbV9t
YXAuYmVnaW4oKTsgfQogICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1f
bWFwLmVuZCgpOyB9CisgICAgdm9pZCB3cml0ZUpTT04oU3RyaW5nQnVpbGRlciYgb3V0cHV0KSBj
b25zdCBmaW5hbDsKIAogcHJvdGVjdGVkOgogICAgIEFycmF5QmFzZSgpOwogCiBwcml2YXRlOgot
ICAgIFZlY3RvcjxSZWZQdHI8VmFsdWU+PiBtX21hcDsKKyAgICBEYXRhU3RvcmFnZSBtX21hcDsK
IH07CiAKLWNsYXNzIEFycmF5IDogcHVibGljIEFycmF5QmFzZSB7CitjbGFzcyBBcnJheSBmaW5h
bCA6IHB1YmxpYyBBcnJheUJhc2UgewogcHVibGljOgogICAgIHN0YXRpYyBXVEZfRVhQT1JUX1BS
SVZBVEUgUmVmPEFycmF5PiBjcmVhdGUoKTsKIAotICAgIHVzaW5nIEFycmF5QmFzZTo6YXNBcnJh
eTsKLQogICAgIC8vIFRoaXMgY2xhc3MgZXhwZWN0ZWQgbm9uLWN5Y2xpYyB2YWx1ZXMsIGFzIHdl
IGNhbm5vdCBzZXJpYWxpemUgY3ljbGVzIGluIEpTT04uCiAgICAgdXNpbmcgQXJyYXlCYXNlOjpw
dXNoQm9vbGVhbjsKICAgICB1c2luZyBBcnJheUJhc2U6OnB1c2hJbnRlZ2VyOwpAQCAtMzQ4LDcg
KzMwOCw2IEBAIHB1YmxpYzoKICAgICB1c2luZyBBcnJheUJhc2U6OmVuZDsKIH07CiAKLQogaW5s
aW5lIE9iamVjdEJhc2U6Oml0ZXJhdG9yIE9iamVjdEJhc2U6OmZpbmQoY29uc3QgU3RyaW5nJiBu
YW1lKQogewogICAgIHJldHVybiBtX21hcC5maW5kKG5hbWUpOwpAQCAtMzc5LDIzICszMzgsMjAg
QEAgaW5saW5lIHZvaWQgT2JqZWN0QmFzZTo6c2V0U3RyaW5nKGNvbnN0IFN0cmluZyYgbmFtZSwg
Y29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICBzZXRWYWx1ZShuYW1lLCBWYWx1ZTo6Y3JlYXRlKHZh
bHVlKSk7CiB9CiAKLWlubGluZSB2b2lkIE9iamVjdEJhc2U6OnNldFZhbHVlKGNvbnN0IFN0cmlu
ZyYgbmFtZSwgUmVmUHRyPFZhbHVlPiYmIHZhbHVlKQoraW5saW5lIHZvaWQgT2JqZWN0QmFzZTo6
c2V0VmFsdWUoY29uc3QgU3RyaW5nJiBuYW1lLCBSZWY8VmFsdWU+JiYgdmFsdWUpCiB7Ci0gICAg
QVNTRVJUKHZhbHVlKTsKICAgICBpZiAobV9tYXAuc2V0KG5hbWUsIFdURk1vdmUodmFsdWUpKS5p
c05ld0VudHJ5KQogICAgICAgICBtX29yZGVyLmFwcGVuZChuYW1lKTsKIH0KIAotaW5saW5lIHZv
aWQgT2JqZWN0QmFzZTo6c2V0T2JqZWN0KGNvbnN0IFN0cmluZyYgbmFtZSwgUmVmUHRyPE9iamVj
dEJhc2U+JiYgdmFsdWUpCitpbmxpbmUgdm9pZCBPYmplY3RCYXNlOjpzZXRPYmplY3QoY29uc3Qg
U3RyaW5nJiBuYW1lLCBSZWY8T2JqZWN0QmFzZT4mJiB2YWx1ZSkKIHsKLSAgICBBU1NFUlQodmFs
dWUpOwogICAgIGlmIChtX21hcC5zZXQobmFtZSwgV1RGTW92ZSh2YWx1ZSkpLmlzTmV3RW50cnkp
CiAgICAgICAgIG1fb3JkZXIuYXBwZW5kKG5hbWUpOwogfQogCi1pbmxpbmUgdm9pZCBPYmplY3RC
YXNlOjpzZXRBcnJheShjb25zdCBTdHJpbmcmIG5hbWUsIFJlZlB0cjxBcnJheUJhc2U+JiYgdmFs
dWUpCitpbmxpbmUgdm9pZCBPYmplY3RCYXNlOjpzZXRBcnJheShjb25zdCBTdHJpbmcmIG5hbWUs
IFJlZjxBcnJheUJhc2U+JiYgdmFsdWUpCiB7Ci0gICAgQVNTRVJUKHZhbHVlKTsKICAgICBpZiAo
bV9tYXAuc2V0KG5hbWUsIFdURk1vdmUodmFsdWUpKS5pc05ld0VudHJ5KQogICAgICAgICBtX29y
ZGVyLmFwcGVuZChuYW1lKTsKIH0KQEAgLTQyMCwyNiArMzc2LDIzIEBAIGlubGluZSB2b2lkIEFy
cmF5QmFzZTo6cHVzaFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgIG1fbWFwLmFwcGVu
ZChWYWx1ZTo6Y3JlYXRlKHZhbHVlKSk7CiB9CiAKLWlubGluZSB2b2lkIEFycmF5QmFzZTo6cHVz
aFZhbHVlKFJlZlB0cjxWYWx1ZT4mJiB2YWx1ZSkKK2lubGluZSB2b2lkIEFycmF5QmFzZTo6cHVz
aFZhbHVlKFJlZjxWYWx1ZT4mJiB2YWx1ZSkKIHsKLSAgICBBU1NFUlQodmFsdWUpOwogICAgIG1f
bWFwLmFwcGVuZChXVEZNb3ZlKHZhbHVlKSk7CiB9CiAKLWlubGluZSB2b2lkIEFycmF5QmFzZTo6
cHVzaE9iamVjdChSZWZQdHI8T2JqZWN0QmFzZT4mJiB2YWx1ZSkKK2lubGluZSB2b2lkIEFycmF5
QmFzZTo6cHVzaE9iamVjdChSZWY8T2JqZWN0QmFzZT4mJiB2YWx1ZSkKIHsKLSAgICBBU1NFUlQo
dmFsdWUpOwogICAgIG1fbWFwLmFwcGVuZChXVEZNb3ZlKHZhbHVlKSk7CiB9CiAKLWlubGluZSB2
b2lkIEFycmF5QmFzZTo6cHVzaEFycmF5KFJlZlB0cjxBcnJheUJhc2U+JiYgdmFsdWUpCitpbmxp
bmUgdm9pZCBBcnJheUJhc2U6OnB1c2hBcnJheShSZWY8QXJyYXlCYXNlPiYmIHZhbHVlKQogewot
ICAgIEFTU0VSVCh2YWx1ZSk7CiAgICAgbV9tYXAuYXBwZW5kKFdURk1vdmUodmFsdWUpKTsKIH0K
IAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KLWNsYXNzIEFycmF5T2YgOiBwdWJsaWMgQXJyYXlCYXNl
IHsKK2NsYXNzIEFycmF5T2YgZmluYWwgOiBwdWJsaWMgQXJyYXlCYXNlIHsKIHByaXZhdGU6CiAg
ICAgQXJyYXlPZigpIHsgfQogCkBAIC00NTAsNyArNDAzLDcgQEAgcHJpdmF0ZToKICAgICB9CiAK
IHB1YmxpYzoKLSAgICB2b2lkIGFkZEl0ZW0oUmVmUHRyPFQ+JiYgdmFsdWUpCisgICAgdm9pZCBh
ZGRJdGVtKFJlZjxUPiYmIHZhbHVlKQogICAgIHsKICAgICAgICAgY2FzdGVkQXJyYXkoKS5wdXNo
VmFsdWUoV1RGTW92ZSh2YWx1ZSkpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvYXBwbGljYXRpb25tYW5pZmVzdC9BcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXBwbGljYXRpb25tYW5pZmVzdC9BcHBsaWNhdGlv
bk1hbmlmZXN0UGFyc2VyLmNwcAppbmRleCA4ZGM3NmZhMmU1OWVhNjdlMDIxNzM4YzMxMWEzNTc3
ZjRkMzZlNjkxLi5mODhjYWRhNjYwZjM5YWRlZmEwMDZkMDk1ZWM1ODdmYjI5MzQ2MjBmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FwcGxpY2F0aW9ubWFuaWZlc3QvQXBwbGlj
YXRpb25NYW5pZmVzdFBhcnNlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBs
aWNhdGlvbm1hbmlmZXN0L0FwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXIuY3BwCkBAIC01NCwxNCAr
NTQsMTQgQEAgQXBwbGljYXRpb25NYW5pZmVzdCBBcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyOjpw
YXJzZU1hbmlmZXN0KGNvbnN0IFN0cmluZyYgdGV4dCwKIHsKICAgICBtX21hbmlmZXN0VVJMID0g
bWFuaWZlc3RVUkw7CiAKLSAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IGpzb25WYWx1ZTsKLSAgICBp
ZiAoIUpTT046OlZhbHVlOjpwYXJzZUpTT04odGV4dCwganNvblZhbHVlKSkgeworICAgIGF1dG8g
anNvblZhbHVlID0gSlNPTjo6VmFsdWU6OnBhcnNlSlNPTih0ZXh0KTsKKyAgICBpZiAoIWpzb25W
YWx1ZSkgewogICAgICAgICBsb2dEZXZlbG9wZXJXYXJuaW5nKCJUaGUgbWFuaWZlc3QgaXMgbm90
IHZhbGlkIEpTT04gZGF0YS4iX3MpOwogICAgICAgICBqc29uVmFsdWUgPSBKU09OOjpPYmplY3Q6
OmNyZWF0ZSgpOwogICAgIH0KIAotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG1hbmlmZXN0Owot
ICAgIGlmICghanNvblZhbHVlLT5hc09iamVjdChtYW5pZmVzdCkpIHsKKyAgICBhdXRvIG1hbmlm
ZXN0ID0ganNvblZhbHVlLT5hc09iamVjdCgpOworICAgIGlmICghbWFuaWZlc3QpIHsKICAgICAg
ICAgbG9nRGV2ZWxvcGVyV2FybmluZygiVGhlIG1hbmlmZXN0IGlzIG5vdCBhIEpTT04gdmFsdWUg
b2YgdHlwZSBcIm9iamVjdFwiLiJfcyk7CiAgICAgICAgIG1hbmlmZXN0ID0gSlNPTjo6T2JqZWN0
OjpjcmVhdGUoKTsKICAgICB9CkBAIC05NiwxMiArOTYsMTIgQEAgdm9pZCBBcHBsaWNhdGlvbk1h
bmlmZXN0UGFyc2VyOjpsb2dEZXZlbG9wZXJXYXJuaW5nKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkK
IAogVVJMIEFwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXI6OnBhcnNlU3RhcnRVUkwoY29uc3QgSlNP
Tjo6T2JqZWN0JiBtYW5pZmVzdCwgY29uc3QgVVJMJiBkb2N1bWVudFVSTCkKIHsKLSAgICBSZWZQ
dHI8SlNPTjo6VmFsdWU+IHZhbHVlOwotICAgIGlmICghbWFuaWZlc3QuZ2V0VmFsdWUoInN0YXJ0
X3VybCIsIHZhbHVlKSkKKyAgICBhdXRvIHZhbHVlID0gbWFuaWZlc3QuZ2V0VmFsdWUoInN0YXJ0
X3VybCJfcyk7CisgICAgaWYgKCF2YWx1ZSkKICAgICAgICAgcmV0dXJuIGRvY3VtZW50VVJMOwog
Ci0gICAgU3RyaW5nIHN0cmluZ1ZhbHVlOwotICAgIGlmICghdmFsdWUtPmFzU3RyaW5nKHN0cmlu
Z1ZhbHVlKSkgeworICAgIGF1dG8gc3RyaW5nVmFsdWUgPSB2YWx1ZS0+YXNTdHJpbmcoKTsKKyAg
ICBpZiAoIXN0cmluZ1ZhbHVlKSB7CiAgICAgICAgIGxvZ01hbmlmZXN0UHJvcGVydHlOb3RBU3Ry
aW5nKCJzdGFydF91cmwiX3MpOwogICAgICAgICByZXR1cm4gZG9jdW1lbnRVUkw7CiAgICAgfQpA
QCAtMTI3LDEyICsxMjcsMTIgQEAgVVJMIEFwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXI6OnBhcnNl
U3RhcnRVUkwoY29uc3QgSlNPTjo6T2JqZWN0JiBtYW5pZmVzdCwgY29uc3QKIAogQXBwbGljYXRp
b25NYW5pZmVzdDo6RGlzcGxheSBBcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyOjpwYXJzZURpc3Bs
YXkoY29uc3QgSlNPTjo6T2JqZWN0JiBtYW5pZmVzdCkKIHsKLSAgICBSZWZQdHI8SlNPTjo6VmFs
dWU+IHZhbHVlOwotICAgIGlmICghbWFuaWZlc3QuZ2V0VmFsdWUoImRpc3BsYXkiX3MsIHZhbHVl
KSkKKyAgICBhdXRvIHZhbHVlID0gbWFuaWZlc3QuZ2V0VmFsdWUoImRpc3BsYXkiX3MpOworICAg
IGlmICghdmFsdWUpCiAgICAgICAgIHJldHVybiBBcHBsaWNhdGlvbk1hbmlmZXN0OjpEaXNwbGF5
OjpCcm93c2VyOwogCi0gICAgU3RyaW5nIHN0cmluZ1ZhbHVlOwotICAgIGlmICghdmFsdWUtPmFz
U3RyaW5nKHN0cmluZ1ZhbHVlKSkgeworICAgIGF1dG8gc3RyaW5nVmFsdWUgPSB2YWx1ZS0+YXNT
dHJpbmcoKTsKKyAgICBpZiAoIXN0cmluZ1ZhbHVlKSB7CiAgICAgICAgIGxvZ01hbmlmZXN0UHJv
cGVydHlOb3RBU3RyaW5nKCJkaXNwbGF5Il9zKTsKICAgICAgICAgcmV0dXJuIEFwcGxpY2F0aW9u
TWFuaWZlc3Q6OkRpc3BsYXk6OkJyb3dzZXI7CiAgICAgfQpAQCAtMTk1LDEyICsxOTUsMTIgQEAg
VVJMIEFwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXI6OnBhcnNlU2NvcGUoY29uc3QgSlNPTjo6T2Jq
ZWN0JiBtYW5pZmVzdCwgY29uc3QgVVIKIHsKICAgICBVUkwgZGVmYXVsdFNjb3BlIHsgc3RhcnRV
UkwsICIuLyIgfTsKIAotICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gdmFsdWU7Ci0gICAgaWYgKCFt
YW5pZmVzdC5nZXRWYWx1ZSgic2NvcGUiLCB2YWx1ZSkpCisgICAgYXV0byB2YWx1ZSA9IG1hbmlm
ZXN0LmdldFZhbHVlKCJzY29wZSIpOworICAgIGlmICghdmFsdWUpCiAgICAgICAgIHJldHVybiBk
ZWZhdWx0U2NvcGU7CiAKLSAgICBTdHJpbmcgc3RyaW5nVmFsdWU7Ci0gICAgaWYgKCF2YWx1ZS0+
YXNTdHJpbmcoc3RyaW5nVmFsdWUpKSB7CisgICAgYXV0byBzdHJpbmdWYWx1ZSA9IHZhbHVlLT5h
c1N0cmluZygpOworICAgIGlmICghc3RyaW5nVmFsdWUpIHsKICAgICAgICAgbG9nTWFuaWZlc3RQ
cm9wZXJ0eU5vdEFTdHJpbmcoInNjb3BlIl9zKTsKICAgICAgICAgcmV0dXJuIGRlZmF1bHRTY29w
ZTsKICAgICB9CkBAIC0yMzEsMTIgKzIzMSwxMiBAQCBVUkwgQXBwbGljYXRpb25NYW5pZmVzdFBh
cnNlcjo6cGFyc2VTY29wZShjb25zdCBKU09OOjpPYmplY3QmIG1hbmlmZXN0LCBjb25zdCBVUgog
CiBTdHJpbmcgQXBwbGljYXRpb25NYW5pZmVzdFBhcnNlcjo6cGFyc2VHZW5lcmljU3RyaW5nKGNv
bnN0IEpTT046Ok9iamVjdCYgbWFuaWZlc3QsIGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKQog
ewotICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gdmFsdWU7Ci0gICAgaWYgKCFtYW5pZmVzdC5nZXRW
YWx1ZShwcm9wZXJ0eU5hbWUsIHZhbHVlKSkKKyAgICBhdXRvIHZhbHVlID0gbWFuaWZlc3QuZ2V0
VmFsdWUocHJvcGVydHlOYW1lKTsKKyAgICBpZiAoIXZhbHVlKQogICAgICAgICByZXR1cm4geyB9
OwogCi0gICAgU3RyaW5nIHN0cmluZ1ZhbHVlOwotICAgIGlmICghdmFsdWUtPmFzU3RyaW5nKHN0
cmluZ1ZhbHVlKSkgeworICAgIGF1dG8gc3RyaW5nVmFsdWUgPSB2YWx1ZS0+YXNTdHJpbmcoKTsK
KyAgICBpZiAoIXN0cmluZ1ZhbHVlKSB7CiAgICAgICAgIGxvZ01hbmlmZXN0UHJvcGVydHlOb3RB
U3RyaW5nKHByb3BlcnR5TmFtZSk7CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9Jbml0RGF0YVJlZ2lz
dHJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW5jcnlwdGVkbWVkaWEvSW5pdERhdGFS
ZWdpc3RyeS5jcHAKaW5kZXggM2IyNWQwNmIxMjNhMWE1MWEwYTJhY2ZiNGY2NTZmOGQ5NGFkYjNm
Yy4uNmFiMmY4NzhhM2Y4Y2E5OGU4MmIwZTQyZTVmMGJhYWEyMjhiMWM1YyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9Jbml0RGF0YVJlZ2lzdHJ5LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL0luaXREYXRhUmVn
aXN0cnkuY3BwCkBAIC02MiwyMiArNjIsMjIgQEAgc3RhdGljIE9wdGlvbmFsPFZlY3RvcjxSZWY8
U2hhcmVkQnVmZmVyPj4+IGV4dHJhY3RLZXlJRHNLZXlpZHMoY29uc3QgU2hhcmVkQnVmZmUKICAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICBTdHJpbmcganNvbiB7IGJ1ZmZlci5kYXRh
KCksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihidWZmZXIuc2l6ZSgpKSB9OwogCi0gICAgUmVmUHRy
PEpTT046OlZhbHVlPiB2YWx1ZTsKLSAgICBpZiAoIUpTT046OlZhbHVlOjpwYXJzZUpTT04oanNv
biwgdmFsdWUpKQorICAgIGF1dG8gdmFsdWUgPSBKU09OOjpWYWx1ZTo6cGFyc2VKU09OKGpzb24p
OworICAgIGlmICghdmFsdWUpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBS
ZWZQdHI8SlNPTjo6T2JqZWN0PiBvYmplY3Q7Ci0gICAgaWYgKCF2YWx1ZS0+YXNPYmplY3Qob2Jq
ZWN0KSkKKyAgICBhdXRvIG9iamVjdCA9IHZhbHVlLT5hc09iamVjdCgpOworICAgIGlmICghb2Jq
ZWN0KQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgUmVmUHRyPEpTT046OkFy
cmF5PiBraWRzQXJyYXk7Ci0gICAgaWYgKCFvYmplY3QtPmdldEFycmF5KCJraWRzIiwga2lkc0Fy
cmF5KSkKKyAgICBhdXRvIGtpZHNBcnJheSA9IG9iamVjdC0+Z2V0QXJyYXkoImtpZHMiX3MpOwor
ICAgIGlmICgha2lkc0FycmF5KQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAg
VmVjdG9yPFJlZjxTaGFyZWRCdWZmZXI+PiBrZXlJRHM7CiAgICAgZm9yIChhdXRvJiB2YWx1ZSA6
ICpraWRzQXJyYXkpIHsKLSAgICAgICAgU3RyaW5nIGtleUlEOwotICAgICAgICBpZiAoIXZhbHVl
LT5hc1N0cmluZyhrZXlJRCkpCisgICAgICAgIGF1dG8ga2V5SUQgPSB2YWx1ZS0+YXNTdHJpbmco
KTsKKyAgICAgICAgaWYgKCFrZXlJRCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAg
IFZlY3RvcjxjaGFyPiBrZXlJRERhdGE7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvQ29tbWFuZExpbmVBUElIb3N0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9D
b21tYW5kTGluZUFQSUhvc3QuY3BwCmluZGV4IGRjZTM1OWU3NjhlZjlhMTNhNmM2ZGUxNmQxZjhk
M2M4YmJmZjdhOTcuLjk0ZDAzZDg1ZDZkYTlmNGY4OGY4Y2QxMmU0YmZmYmQzM2I0ZGM1NjcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db21tYW5kTGluZUFQSUhvc3QuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db21tYW5kTGluZUFQSUhvc3QuY3BwCkBA
IC03Myw3ICs3Myw3IEBAIHZvaWQgQ29tbWFuZExpbmVBUElIb3N0OjpkaXNjb25uZWN0KCkKICAg
ICBtX2luc3RydW1lbnRpbmdBZ2VudHMgPSBudWxscHRyOwogfQogCi12b2lkIENvbW1hbmRMaW5l
QVBJSG9zdDo6aW5zcGVjdChKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBKU0M6OkpTVmFsdWUgdmFsdWVUb0luc3BlY3QsIEpTQzo6SlNWYWx1ZSBoaW50c1ZhbHVlKQor
dm9pZCBDb21tYW5kTGluZUFQSUhvc3Q6Omluc3BlY3QoSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4
aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIG9iamVjdCwgSlNDOjpKU1ZhbHVlIGhpbnRz
KQogewogICAgIGlmICghbV9pbnN0cnVtZW50aW5nQWdlbnRzKQogICAgICAgICByZXR1cm47CkBA
IC04MiwxMiArODIsMjAgQEAgdm9pZCBDb21tYW5kTGluZUFQSUhvc3Q6Omluc3BlY3QoSlNDOjpK
U0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjoKICAgICBpZiAoIWluc3Bl
Y3RvckFnZW50KQogICAgICAgICByZXR1cm47CiAKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBo
aW50c09iamVjdDsKLSAgICBpZiAoIUluc3BlY3Rvcjo6dG9JbnNwZWN0b3JWYWx1ZSgmbGV4aWNh
bEdsb2JhbE9iamVjdCwgaGludHNWYWx1ZSktPmFzT2JqZWN0KGhpbnRzT2JqZWN0KSkKKyAgICBh
dXRvIG9iamVjdFZhbHVlID0gSW5zcGVjdG9yOjp0b0luc3BlY3RvclZhbHVlKCZsZXhpY2FsR2xv
YmFsT2JqZWN0LCBvYmplY3QpOworICAgIGlmICghb2JqZWN0VmFsdWUpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIGF1dG8gcmVtb3RlT2JqZWN0ID0gQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlBy
b3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+OjpydW50aW1lQ2FzdChJbnNwZWN0b3I6OnRv
SW5zcGVjdG9yVmFsdWUoJmxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlVG9JbnNwZWN0KSk7Ci0g
ICAgaW5zcGVjdG9yQWdlbnQtPmluc3BlY3QoV1RGTW92ZShyZW1vdGVPYmplY3QpLCBXVEZNb3Zl
KGhpbnRzT2JqZWN0KSk7CisgICAgYXV0byBoaW50c1ZhbHVlID0gSW5zcGVjdG9yOjp0b0luc3Bl
Y3RvclZhbHVlKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCBoaW50cyk7CisgICAgaWYgKCFoaW50c1Zh
bHVlKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIGhpbnRzT2JqZWN0ID0gaGludHNWYWx1
ZS0+YXNPYmplY3QoKTsKKyAgICBpZiAoIWhpbnRzT2JqZWN0KQorICAgICAgICByZXR1cm47CisK
KyAgICBhdXRvIHJlbW90ZU9iamVjdCA9IFByb3RvY29sOjpCaW5kaW5nVHJhaXRzPFByb3RvY29s
OjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+OjpydW50aW1lQ2FzdChvYmplY3RWYWx1ZS5yZWxlYXNl
Tm9uTnVsbCgpKTsKKyAgICBpbnNwZWN0b3JBZ2VudC0+aW5zcGVjdChXVEZNb3ZlKHJlbW90ZU9i
amVjdCksIGhpbnRzT2JqZWN0LnJlbGVhc2VOb25OdWxsKCkpOwogfQogCiBDb21tYW5kTGluZUFQ
SUhvc3Q6OkV2ZW50TGlzdGVuZXJzUmVjb3JkIENvbW1hbmRMaW5lQVBJSG9zdDo6Z2V0RXZlbnRM
aXN0ZW5lcnMoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEV2ZW50VGFyZ2V0
JiB0YXJnZXQpCkBAIC0xMzYsOCArMTQ0LDcgQEAgdm9pZCBDb21tYW5kTGluZUFQSUhvc3Q6OmNs
ZWFyQ29uc29sZU1lc3NhZ2VzKCkKICAgICBpZiAoIWNvbnNvbGVBZ2VudCkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgRXJyb3JTdHJpbmcgaWdub3JlZDsKLSAgICBjb25zb2xlQWdlbnQtPmNsZWFy
TWVzc2FnZXMoaWdub3JlZCk7CisgICAgY29uc29sZUFnZW50LT5jbGVhck1lc3NhZ2VzKCk7CiB9
CiAKIHZvaWQgQ29tbWFuZExpbmVBUElIb3N0Ojpjb3B5VGV4dChjb25zdCBTdHJpbmcmIHRleHQp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQXVkaXRSZXNv
dXJjZXNPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckF1ZGl0
UmVzb3VyY2VzT2JqZWN0LmNwcAppbmRleCAwMDE0OGUwZmY0OTQ0YWJkMDkwYjgzNmVhOTMwNWVj
Zjc0OGM2ZmE0Li5iN2ZmMGUxMDRhNTUwNjkxNmNjZmE5ZDIzMGM4YjJiYmIzNjNkZjNhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQXVkaXRSZXNvdXJjZXNP
YmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBdWRpdFJl
c291cmNlc09iamVjdC5jcHAKQEAgLTEwNSw3ICsxMDUsNyBAQCBFeGNlcHRpb25PcjxJbnNwZWN0
b3JBdWRpdFJlc291cmNlc09iamVjdDo6UmVzb3VyY2VDb250ZW50PiBJbnNwZWN0b3JBdWRpdFJl
c291cgogICAgIGlmICghY2FjaGVkUmVzb3VyY2UpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24g
eyBOb3RGb3VuZEVycm9yLCBtYWtlU3RyaW5nKCJVbmtub3duIGlkZW50aWZpZXIgIl9zLCBpZCkg
fTsKIAotICAgIEVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworICAgIFByb3RvY29sOjpFcnJvclN0
cmluZyBlcnJvclN0cmluZzsKICAgICBSZXNvdXJjZUNvbnRlbnQgcmVzb3VyY2VDb250ZW50Owog
ICAgIEluc3BlY3RvclBhZ2VBZ2VudDo6cmVzb3VyY2VDb250ZW50KGVycm9yU3RyaW5nLCBmcmFt
ZSwgY2FjaGVkUmVzb3VyY2UtPnVybCgpLCAmcmVzb3VyY2VDb250ZW50LmRhdGEsICZyZXNvdXJj
ZUNvbnRlbnQuYmFzZTY0RW5jb2RlZCk7CiAgICAgaWYgKCFlcnJvclN0cmluZy5pc0VtcHR5KCkp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDYW52YXMuY3BwCmluZGV4IDVj
NTdiNjA1NzRlY2E1NzIyZDE1NDk5MmFmZGJkYzc1NWU2MzE5OWYuLmE2MWI4ZWVkYTA0MTZjZjdm
MTU0YWEwMTFjODYwY2U4ZmIwYjMyNWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JDYW52YXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JDYW52YXMuY3BwCkBAIC0zNTYsMTMgKzM1NiwxMyBAQCB2b2lkIEluc3BlY3RvckNh
bnZhczo6cmVjb3JkQWN0aW9uKGNvbnN0IFN0cmluZyYgbmFtZSwgc3RkOjppbml0aWFsaXplcl9s
aXN0PFJlYwogICAgIH0KIAogICAgIGlmICghbV9mcmFtZXMpCi0gICAgICAgIG1fZnJhbWVzID0g
SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpSZWNvcmRpbmc6OkZyYW1lPjo6Y3Jl
YXRlKCk7CisgICAgICAgIG1fZnJhbWVzID0gSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UmVjb3Jk
aW5nOjpGcmFtZT46OmNyZWF0ZSgpOwogCiAgICAgaWYgKCFtX2N1cnJlbnRBY3Rpb25zKSB7CiAg
ICAgICAgIG1fY3VycmVudEFjdGlvbnMgPSBKU09OOjpBcnJheU9mPEpTT046OlZhbHVlPjo6Y3Jl
YXRlKCk7CiAKLSAgICAgICAgYXV0byBmcmFtZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlY29y
ZGluZzo6RnJhbWU6OmNyZWF0ZSgpCi0gICAgICAgICAgICAuc2V0QWN0aW9ucyhtX2N1cnJlbnRB
Y3Rpb25zKQorICAgICAgICBhdXRvIGZyYW1lID0gUHJvdG9jb2w6OlJlY29yZGluZzo6RnJhbWU6
OmNyZWF0ZSgpCisgICAgICAgICAgICAuc2V0QWN0aW9ucygqbV9jdXJyZW50QWN0aW9ucykKICAg
ICAgICAgICAgIC5yZWxlYXNlKCk7CiAKICAgICAgICAgbV9mcmFtZXMtPmFkZEl0ZW0oV1RGTW92
ZShmcmFtZSkpOwpAQCAtMzc1LDcgKzM3NSw3IEBAIHZvaWQgSW5zcGVjdG9yQ2FudmFzOjpyZWNv
cmRBY3Rpb24oY29uc3QgU3RyaW5nJiBuYW1lLCBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8UmVjCiAK
ICAgICBtX2xhc3RSZWNvcmRlZEFjdGlvbiA9IGJ1aWxkQWN0aW9uKG5hbWUsIFdURk1vdmUocGFy
YW1ldGVycykpOwogICAgIG1fYnVmZmVyVXNlZCArPSBtX2xhc3RSZWNvcmRlZEFjdGlvbi0+bWVt
b3J5Q29zdCgpOwotICAgIG1fY3VycmVudEFjdGlvbnMtPmFkZEl0ZW0obV9sYXN0UmVjb3JkZWRB
Y3Rpb24uZ2V0KCkpOworICAgIG1fY3VycmVudEFjdGlvbnMtPmFkZEl0ZW0oKm1fbGFzdFJlY29y
ZGVkQWN0aW9uKTsKIAogICAgIGF1dG8qIGNvbnRleHQgPSBjYW52YXNDb250ZXh0KCk7CiAgICAg
QVNTRVJUKGNvbnRleHQpOwpAQCAtMzk4LDcgKzM5OCw3IEBAIHZvaWQgSW5zcGVjdG9yQ2FudmFz
OjpmaW5hbGl6ZUZyYW1lKCkKICAgICBhcHBlbmRBY3Rpb25TbmFwc2hvdElmTmVlZGVkKCk7CiAK
ICAgICBpZiAobV9mcmFtZXMgJiYgbV9mcmFtZXMtPmxlbmd0aCgpICYmICFzdGQ6OmlzbmFuKG1f
Y3VycmVudEZyYW1lU3RhcnRUaW1lKSkgewotICAgICAgICBhdXRvIGN1cnJlbnRGcmFtZSA9IHN0
YXRpY19jYXN0PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlY29yZGluZzo6RnJhbWUqPihtX2ZyYW1l
cy0+Z2V0KG1fZnJhbWVzLT5sZW5ndGgoKSAtIDEpLmdldCgpKTsKKyAgICAgICAgYXV0byBjdXJy
ZW50RnJhbWUgPSBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8UHJvdG9jb2w6OlJlY29yZGluZzo6RnJh
bWU+KG1fZnJhbWVzLT5nZXQobV9mcmFtZXMtPmxlbmd0aCgpIC0gMSkpOwogICAgICAgICBjdXJy
ZW50RnJhbWUtPnNldER1cmF0aW9uKChNb25vdG9uaWNUaW1lOjpub3coKSAtIG1fY3VycmVudEZy
YW1lU3RhcnRUaW1lKS5taWxsaXNlY29uZHMoKSk7CiAKICAgICAgICAgbV9jdXJyZW50RnJhbWVT
dGFydFRpbWUgPSBNb25vdG9uaWNUaW1lOjpuYW4oKTsKQEAgLTQxMiw3ICs0MTIsOCBAQCB2b2lk
IEluc3BlY3RvckNhbnZhczo6bWFya0N1cnJlbnRGcmFtZUluY29tcGxldGUoKQogICAgIGlmICgh
bV9jdXJyZW50QWN0aW9ucyB8fCAhbV9mcmFtZXMgfHwgIW1fZnJhbWVzLT5sZW5ndGgoKSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgc3RhdGljX2Nhc3Q8SW5zcGVjdG9yOjpQcm90b2NvbDo6UmVj
b3JkaW5nOjpGcmFtZSo+KG1fZnJhbWVzLT5nZXQobV9mcmFtZXMtPmxlbmd0aCgpIC0gMSkuZ2V0
KCkpLT5zZXRJbmNvbXBsZXRlKHRydWUpOworICAgIGF1dG8gY3VycmVudEZyYW1lID0gc3RhdGlj
X3JlZmVyZW5jZV9jYXN0PFByb3RvY29sOjpSZWNvcmRpbmc6OkZyYW1lPihtX2ZyYW1lcy0+Z2V0
KG1fZnJhbWVzLT5sZW5ndGgoKSAtIDEpKTsKKyAgICBjdXJyZW50RnJhbWUtPnNldEluY29tcGxl
dGUodHJ1ZSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ2FudmFzOjpzZXRCdWZmZXJMaW1pdChsb25n
IG1lbW9yeUxpbWl0KQpAQCAtNDM4LDI5ICs0MzksMjkgQEAgYm9vbCBJbnNwZWN0b3JDYW52YXM6
Om92ZXJGcmFtZUNvdW50KCkgY29uc3QKICAgICByZXR1cm4gbV9mcmFtZUNvdW50ICYmIG1fZnJh
bWVzQ2FwdHVyZWQgPj0gbV9mcmFtZUNvdW50LnZhbHVlKCk7CiB9CiAKLVJlZjxJbnNwZWN0b3I6
OlByb3RvY29sOjpDYW52YXM6OkNhbnZhcz4gSW5zcGVjdG9yQ2FudmFzOjpidWlsZE9iamVjdEZv
ckNhbnZhcyhib29sIGNhcHR1cmVCYWNrdHJhY2UpCitSZWY8UHJvdG9jb2w6OkNhbnZhczo6Q2Fu
dmFzPiBJbnNwZWN0b3JDYW52YXM6OmJ1aWxkT2JqZWN0Rm9yQ2FudmFzKGJvb2wgY2FwdHVyZUJh
Y2t0cmFjZSkKIHsKLSAgICB1c2luZyBDb250ZXh0VHlwZVR5cGUgPSBPcHRpb25hbDxJbnNwZWN0
b3I6OlByb3RvY29sOjpDYW52YXM6OkNvbnRleHRUeXBlPjsKKyAgICB1c2luZyBDb250ZXh0VHlw
ZVR5cGUgPSBPcHRpb25hbDxQcm90b2NvbDo6Q2FudmFzOjpDb250ZXh0VHlwZT47CiAgICAgYXV0
byBjb250ZXh0VHlwZSA9IFdURjo6c3dpdGNoT24obV9jb250ZXh0LAogICAgICAgICBbXSAoc3Rk
OjpyZWZlcmVuY2Vfd3JhcHBlcjxDYW52YXNSZW5kZXJpbmdDb250ZXh0PiBjb250ZXh0V3JhcHBl
cikgLT4gQ29udGV4dFR5cGVUeXBlIHsKICAgICAgICAgICAgIGF1dG8mIGNvbnRleHQgPSBjb250
ZXh0V3JhcHBlci5nZXQoKTsKICAgICAgICAgICAgIGlmIChpczxDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQ+KGNvbnRleHQpKQotICAgICAgICAgICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpDYW52YXM6OkNvbnRleHRUeXBlOjpDYW52YXMyRDsKKyAgICAgICAgICAgICAgICByZXR1
cm4gUHJvdG9jb2w6OkNhbnZhczo6Q29udGV4dFR5cGU6OkNhbnZhczJEOwogICAgICAgICAgICAg
aWYgKGlzPEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dD4oY29udGV4dCkpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6Q29udGV4dFR5cGU6OkJp
dG1hcFJlbmRlcmVyOworICAgICAgICAgICAgICAgIHJldHVybiBQcm90b2NvbDo6Q2FudmFzOjpD
b250ZXh0VHlwZTo6Qml0bWFwUmVuZGVyZXI7CiAjaWYgRU5BQkxFKFdFQkdMKQogICAgICAgICAg
ICAgaWYgKGlzPFdlYkdMUmVuZGVyaW5nQ29udGV4dD4oY29udGV4dCkpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6Q29udGV4dFR5cGU6OldlYkdM
OworICAgICAgICAgICAgICAgIHJldHVybiBQcm90b2NvbDo6Q2FudmFzOjpDb250ZXh0VHlwZTo6
V2ViR0w7CiAjZW5kaWYKICNpZiBFTkFCTEUoV0VCR0wyKQogICAgICAgICAgICAgaWYgKGlzPFdl
YkdMMlJlbmRlcmluZ0NvbnRleHQ+KGNvbnRleHQpKQotICAgICAgICAgICAgICAgIHJldHVybiBJ
bnNwZWN0b3I6OlByb3RvY29sOjpDYW52YXM6OkNvbnRleHRUeXBlOjpXZWJHTDI7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIFByb3RvY29sOjpDYW52YXM6OkNvbnRleHRUeXBlOjpXZWJHTDI7CiAj
ZW5kaWYKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAgIH0sCiAjaWYg
RU5BQkxFKFdFQkdQVSkKICAgICAgICAgW10gKHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8V2ViR1BV
RGV2aWNlPikgewotICAgICAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZh
czo6Q29udGV4dFR5cGU6OldlYkdQVTsKKyAgICAgICAgICAgIHJldHVybiBQcm90b2NvbDo6Q2Fu
dmFzOjpDb250ZXh0VHlwZTo6V2ViR1BVOwogICAgICAgICB9LAogI2VuZGlmCiAgICAgICAgIFtd
IChNb25vc3RhdGUpIHsKQEAgLTQ3MCwxMCArNDcxLDEwIEBAIFJlZjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpDYW52YXM6OkNhbnZhcz4gSW5zcGVjdG9yQ2FudmFzOjpidWlsZE9iamVjdEZvckNhbnZh
cyhiCiAgICAgKTsKICAgICBpZiAoIWNvbnRleHRUeXBlKSB7CiAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgICAgICBjb250ZXh0VHlwZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNh
bnZhczo6Q29udGV4dFR5cGU6OkNhbnZhczJEOworICAgICAgICBjb250ZXh0VHlwZSA9IFByb3Rv
Y29sOjpDYW52YXM6OkNvbnRleHRUeXBlOjpDYW52YXMyRDsKICAgICB9CiAKLSAgICBhdXRvIGNh
bnZhcyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6Q2FudmFzOjpjcmVhdGUoKQorICAg
IGF1dG8gY2FudmFzID0gUHJvdG9jb2w6OkNhbnZhczo6Q2FudmFzOjpjcmVhdGUoKQogICAgICAg
ICAuc2V0Q2FudmFzSWQobV9pZGVudGlmaWVyKQogICAgICAgICAuc2V0Q29udGV4dFR5cGUoY29u
dGV4dFR5cGUudmFsdWUoKSkKICAgICAgICAgLnJlbGVhc2UoKTsKQEAgLTQ4NiwxMiArNDg3LDEy
IEBAIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDYW52YXM6OkNhbnZhcz4gSW5zcGVjdG9yQ2Fu
dmFzOjpidWlsZE9iamVjdEZvckNhbnZhcyhiCiAgICAgICAgIC8vIEZJWE1FOiA8aHR0cHM6Ly93
ZWJraXQub3JnL2IvMTc4MjgyPiBXZWIgSW5zcGVjdG9yOiBzZW5kIGEgRE9NIG5vZGUgd2l0aCBl
YWNoIENhbnZhcyBwYXlsb2FkIGFuZCBlbGltaW5hdGUgQ2FudmFzLnJlcXVlc3ROb2RlCiAgICAg
fQogCi0gICAgdXNpbmcgQ29udGV4dEF0dHJpYnV0ZXNUeXBlID0gUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkNhbnZhczo6Q29udGV4dEF0dHJpYnV0ZXM+OworICAgIHVzaW5nIENvbnRleHRB
dHRyaWJ1dGVzVHlwZSA9IFJlZlB0cjxQcm90b2NvbDo6Q2FudmFzOjpDb250ZXh0QXR0cmlidXRl
cz47CiAgICAgYXV0byBjb250ZXh0QXR0cmlidXRlcyA9IFdURjo6c3dpdGNoT24obV9jb250ZXh0
LAogICAgICAgICBbXSAoc3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxDYW52YXNSZW5kZXJpbmdDb250
ZXh0PiBjb250ZXh0V3JhcHBlcikgLT4gQ29udGV4dEF0dHJpYnV0ZXNUeXBlIHsKICAgICAgICAg
ICAgIGF1dG8mIGNvbnRleHQgPSBjb250ZXh0V3JhcHBlci5nZXQoKTsKICAgICAgICAgICAgIGlm
IChpczxJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQ+KGNvbnRleHQpKSB7Ci0gICAgICAgICAg
ICAgICAgYXV0byBjb250ZXh0QXR0cmlidXRlc1BheWxvYWQgPSBJbnNwZWN0b3I6OlByb3RvY29s
OjpDYW52YXM6OkNvbnRleHRBdHRyaWJ1dGVzOjpjcmVhdGUoKQorICAgICAgICAgICAgICAgIGF1
dG8gY29udGV4dEF0dHJpYnV0ZXNQYXlsb2FkID0gUHJvdG9jb2w6OkNhbnZhczo6Q29udGV4dEF0
dHJpYnV0ZXM6OmNyZWF0ZSgpCiAgICAgICAgICAgICAgICAgICAgIC5yZWxlYXNlKCk7CiAgICAg
ICAgICAgICAgICAgY29udGV4dEF0dHJpYnV0ZXNQYXlsb2FkLT5zZXRBbHBoYShkb3duY2FzdDxJ
bWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQ+KGNvbnRleHQpLmhhc0FscGhhKCkpOwogICAgICAg
ICAgICAgICAgIHJldHVybiBjb250ZXh0QXR0cmlidXRlc1BheWxvYWQ7CkBAIC01MDAsNyArNTAx
LDcgQEAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6Q2FudmFzPiBJbnNwZWN0b3JD
YW52YXM6OmJ1aWxkT2JqZWN0Rm9yQ2FudmFzKGIKICNpZiBFTkFCTEUoV0VCR0wpCiAgICAgICAg
ICAgICBpZiAoaXM8V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZT4oY29udGV4dCkpIHsKICAgICAg
ICAgICAgICAgICBpZiAoY29uc3QgYXV0byYgYXR0cmlidXRlcyA9IGRvd25jYXN0PFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U+KGNvbnRleHQpLmdldENvbnRleHRBdHRyaWJ1dGVzKCkpIHsKLSAg
ICAgICAgICAgICAgICAgICAgYXV0byBjb250ZXh0QXR0cmlidXRlc1BheWxvYWQgPSBJbnNwZWN0
b3I6OlByb3RvY29sOjpDYW52YXM6OkNvbnRleHRBdHRyaWJ1dGVzOjpjcmVhdGUoKQorICAgICAg
ICAgICAgICAgICAgICBhdXRvIGNvbnRleHRBdHRyaWJ1dGVzUGF5bG9hZCA9IFByb3RvY29sOjpD
YW52YXM6OkNvbnRleHRBdHRyaWJ1dGVzOjpjcmVhdGUoKQogICAgICAgICAgICAgICAgICAgICAg
ICAgLnJlbGVhc2UoKTsKICAgICAgICAgICAgICAgICAgICAgY29udGV4dEF0dHJpYnV0ZXNQYXls
b2FkLT5zZXRBbHBoYShhdHRyaWJ1dGVzLT5hbHBoYSk7CiAgICAgICAgICAgICAgICAgICAgIGNv
bnRleHRBdHRyaWJ1dGVzUGF5bG9hZC0+c2V0RGVwdGgoYXR0cmlidXRlcy0+ZGVwdGgpOwpAQCAt
NTMwLDcgKzUzMSw3IEBAIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDYW52YXM6OkNhbnZhcz4g
SW5zcGVjdG9yQ2FudmFzOjpidWlsZE9iamVjdEZvckNhbnZhcyhiCiAgICAgICAgIFtdIChzdGQ6
OnJlZmVyZW5jZV93cmFwcGVyPFdlYkdQVURldmljZT4gZGV2aWNlV3JhcHBlcikgLT4gQ29udGV4
dEF0dHJpYnV0ZXNUeXBlIHsKICAgICAgICAgICAgIGF1dG8mIGRldmljZSA9IGRldmljZVdyYXBw
ZXIuZ2V0KCk7CiAgICAgICAgICAgICBpZiAoY29uc3QgYXV0byYgb3B0aW9ucyA9IGRldmljZS5h
ZGFwdGVyKCkub3B0aW9ucygpKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBjb250ZXh0QXR0cmli
dXRlc1BheWxvYWQgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpDYW52YXM6OkNvbnRleHRBdHRyaWJ1
dGVzOjpjcmVhdGUoKQorICAgICAgICAgICAgICAgIGF1dG8gY29udGV4dEF0dHJpYnV0ZXNQYXls
b2FkID0gUHJvdG9jb2w6OkNhbnZhczo6Q29udGV4dEF0dHJpYnV0ZXM6OmNyZWF0ZSgpCiAgICAg
ICAgICAgICAgICAgICAgIC5yZWxlYXNlKCk7CiAgICAgICAgICAgICAgICAgaWYgKGNvbnN0IGF1
dG8mIHBvd2VyUHJlZmVyZW5jZSA9IG9wdGlvbnMtPnBvd2VyUHJlZmVyZW5jZSkgewogICAgICAg
ICAgICAgICAgICAgICBzd2l0Y2ggKHBvd2VyUHJlZmVyZW5jZS52YWx1ZSgpKSB7CkBAIC01NTQs
NyArNTU1LDcgQEAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6Q2FudmFzPiBJbnNw
ZWN0b3JDYW52YXM6OmJ1aWxkT2JqZWN0Rm9yQ2FudmFzKGIKICAgICAgICAgfQogICAgICk7CiAg
ICAgaWYgKGNvbnRleHRBdHRyaWJ1dGVzKQotICAgICAgICBjYW52YXMtPnNldENvbnRleHRBdHRy
aWJ1dGVzKFdURk1vdmUoY29udGV4dEF0dHJpYnV0ZXMpKTsKKyAgICAgICAgY2FudmFzLT5zZXRD
b250ZXh0QXR0cmlidXRlcyhjb250ZXh0QXR0cmlidXRlcy5yZWxlYXNlTm9uTnVsbCgpKTsKIAog
ICAgIC8vIEZJWE1FOiA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMTgwODMzPiBXZWIgSW5zcGVjdG9y
OiBzdXBwb3J0IE9mZnNjcmVlbkNhbnZhcyBmb3IgQ2FudmFzIHJlbGF0ZWQgb3BlcmF0aW9ucwog
CkBAIC01NzEsNyArNTcyLDcgQEAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6Q2Fu
dmFzPiBJbnNwZWN0b3JDYW52YXM6OmJ1aWxkT2JqZWN0Rm9yQ2FudmFzKGIKICAgICByZXR1cm4g
Y2FudmFzOwogfQogCi1SZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6UmVjb3JkaW5nOjpSZWNvcmRp
bmc+IEluc3BlY3RvckNhbnZhczo6cmVsZWFzZU9iamVjdEZvclJlY29yZGluZygpCitSZWY8UHJv
dG9jb2w6OlJlY29yZGluZzo6UmVjb3JkaW5nPiBJbnNwZWN0b3JDYW52YXM6OnJlbGVhc2VPYmpl
Y3RGb3JSZWNvcmRpbmcoKQogewogICAgIEFTU0VSVCghbV9jdXJyZW50QWN0aW9ucyk7CiAgICAg
QVNTRVJUKCFtX2xhc3RSZWNvcmRlZEFjdGlvbik7CkBAIC01ODEsMjYgKzU4MiwyNiBAQCBSZWY8
SW5zcGVjdG9yOjpQcm90b2NvbDo6UmVjb3JkaW5nOjpSZWNvcmRpbmc+IEluc3BlY3RvckNhbnZh
czo6cmVsZWFzZU9iamVjdEZvcgogICAgIEFTU0VSVChjb250ZXh0KTsKICAgICAvLyBGSVhNRTog
PGh0dHBzOi8vd2Via2l0Lm9yZy9iLzIwMTY1MT4gV2ViIEluc3BlY3RvcjogQ2FudmFzOiBzdXBw
b3J0IGNhbnZhcyByZWNvcmRpbmdzIGZvciBXZWJHUFVEZXZpY2UKIAotICAgIEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlJlY29yZGluZzo6VHlwZSB0eXBlOworICAgIFByb3RvY29sOjpSZWNvcmRpbmc6
OlR5cGUgdHlwZTsKICAgICBpZiAoaXM8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPihjb250ZXh0
KSkKLSAgICAgICAgdHlwZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlY29yZGluZzo6VHlwZTo6
Q2FudmFzMkQ7CisgICAgICAgIHR5cGUgPSBQcm90b2NvbDo6UmVjb3JkaW5nOjpUeXBlOjpDYW52
YXMyRDsKICAgICBlbHNlIGlmIChpczxJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQ+KGNvbnRl
eHQpKQotICAgICAgICB0eXBlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6UmVjb3JkaW5nOjpUeXBl
OjpDYW52YXNCaXRtYXBSZW5kZXJlcjsKKyAgICAgICAgdHlwZSA9IFByb3RvY29sOjpSZWNvcmRp
bmc6OlR5cGU6OkNhbnZhc0JpdG1hcFJlbmRlcmVyOwogI2lmIEVOQUJMRShXRUJHTCkKICAgICBl
bHNlIGlmIChpczxXZWJHTFJlbmRlcmluZ0NvbnRleHQ+KGNvbnRleHQpKQotICAgICAgICB0eXBl
ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6UmVjb3JkaW5nOjpUeXBlOjpDYW52YXNXZWJHTDsKKyAg
ICAgICAgdHlwZSA9IFByb3RvY29sOjpSZWNvcmRpbmc6OlR5cGU6OkNhbnZhc1dlYkdMOwogI2Vu
ZGlmCiAjaWYgRU5BQkxFKFdFQkdMMikKICAgICBlbHNlIGlmIChpczxXZWJHTDJSZW5kZXJpbmdD
b250ZXh0Pihjb250ZXh0KSkKLSAgICAgICAgdHlwZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJl
Y29yZGluZzo6VHlwZTo6Q2FudmFzV2ViR0wyOworICAgICAgICB0eXBlID0gUHJvdG9jb2w6OlJl
Y29yZGluZzo6VHlwZTo6Q2FudmFzV2ViR0wyOwogI2VuZGlmCiAgICAgZWxzZSB7CiAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICB0eXBlID0gSW5zcGVjdG9yOjpQcm90b2Nv
bDo6UmVjb3JkaW5nOjpUeXBlOjpDYW52YXMyRDsKKyAgICAgICAgdHlwZSA9IFByb3RvY29sOjpS
ZWNvcmRpbmc6OlR5cGU6OkNhbnZhczJEOwogICAgIH0KIAotICAgIGF1dG8gcmVjb3JkaW5nID0g
SW5zcGVjdG9yOjpQcm90b2NvbDo6UmVjb3JkaW5nOjpSZWNvcmRpbmc6OmNyZWF0ZSgpCi0gICAg
ICAgIC5zZXRWZXJzaW9uKEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlY29yZGluZzo6VkVSU0lPTikK
KyAgICBhdXRvIHJlY29yZGluZyA9IFByb3RvY29sOjpSZWNvcmRpbmc6OlJlY29yZGluZzo6Y3Jl
YXRlKCkKKyAgICAgICAgLnNldFZlcnNpb24oUHJvdG9jb2w6OlJlY29yZGluZzo6VkVSU0lPTikK
ICAgICAgICAgLnNldFR5cGUodHlwZSkKICAgICAgICAgLnNldEluaXRpYWxTdGF0ZShtX2luaXRp
YWxTdGF0ZS5yZWxlYXNlTm9uTnVsbCgpKQogICAgICAgICAuc2V0RGF0YShtX3NlcmlhbGl6ZWRE
dXBsaWNhdGVEYXRhLnJlbGVhc2VOb25OdWxsKCkpCkBAIC02MTQsNyArNjE1LDcgQEAgUmVmPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlJlY29yZGluZzo6UmVjb3JkaW5nPiBJbnNwZWN0b3JDYW52YXM6
OnJlbGVhc2VPYmplY3RGb3IKICAgICByZXR1cm4gcmVjb3JkaW5nOwogfQogCi1TdHJpbmcgSW5z
cGVjdG9yQ2FudmFzOjpnZXRDYW52YXNDb250ZW50QXNEYXRhVVJMKEVycm9yU3RyaW5nJiBlcnJv
clN0cmluZykKK1N0cmluZyBJbnNwZWN0b3JDYW52YXM6OmdldENhbnZhc0NvbnRlbnRBc0RhdGFV
UkwoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZykKIHsKICAgICBhdXRvKiBub2Rl
ID0gY2FudmFzRWxlbWVudCgpOwogICAgIGlmICghbm9kZSkgewpAQCAtNjUxLDcgKzY1Miw3IEBA
IHZvaWQgSW5zcGVjdG9yQ2FudmFzOjphcHBlbmRBY3Rpb25TbmFwc2hvdElmTmVlZGVkKCkKICAg
ICBpZiAobV9jb250ZW50Q2hhbmdlZCkgewogICAgICAgICBtX2J1ZmZlclVzZWQgLT0gbV9sYXN0
UmVjb3JkZWRBY3Rpb24tPm1lbW9yeUNvc3QoKTsKIAotICAgICAgICBFcnJvclN0cmluZyBpZ25v
cmVkOworICAgICAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgaWdub3JlZDsKICAgICAgICAgbV9s
YXN0UmVjb3JkZWRBY3Rpb24tPmFkZEl0ZW0oaW5kZXhGb3JEYXRhKGdldENhbnZhc0NvbnRlbnRB
c0RhdGFVUkwoaWdub3JlZCkpKTsKIAogICAgICAgICBtX2J1ZmZlclVzZWQgKz0gbV9sYXN0UmVj
b3JkZWRBY3Rpb24tPm1lbW9yeUNvc3QoKTsKQEAgLTc3NSw3ICs3NzYsNyBAQCBpbnQgSW5zcGVj
dG9yQ2FudmFzOjppbmRleEZvckRhdGEoRHVwbGljYXRlRGF0YVZhcmlhbnQgZGF0YSkKIAogICAg
IGlmIChpdGVtKSB7CiAgICAgICAgIG1fYnVmZmVyVXNlZCArPSBpdGVtLT5tZW1vcnlDb3N0KCk7
Ci0gICAgICAgIG1fc2VyaWFsaXplZER1cGxpY2F0ZURhdGEtPmFkZEl0ZW0oV1RGTW92ZShpdGVt
KSk7CisgICAgICAgIG1fc2VyaWFsaXplZER1cGxpY2F0ZURhdGEtPmFkZEl0ZW0oaXRlbS5yZWxl
YXNlTm9uTnVsbCgpKTsKIAogICAgICAgICBtX2luZGV4ZWREdXBsaWNhdGVEYXRhLmFwcGVuZChk
YXRhKTsKICAgICAgICAgaW5kZXggPSBtX2luZGV4ZWREdXBsaWNhdGVEYXRhLnNpemUoKSAtIDE7
CkBAIC04MTAsMTMgKzgxMSwxMyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGF0aWMgUmVmPEpT
T046OkFycmF5T2Y8SlNPTjo6VmFsdWU+PiBidWlsZEFycmF5Rm9yVmVjdG9yKAogICAgIHJldHVy
biBhcnJheTsKIH0KIAotUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlY29yZGluZzo6SW5pdGlh
bFN0YXRlPiBJbnNwZWN0b3JDYW52YXM6OmJ1aWxkSW5pdGlhbFN0YXRlKCkKK1JlZjxQcm90b2Nv
bDo6UmVjb3JkaW5nOjpJbml0aWFsU3RhdGU+IEluc3BlY3RvckNhbnZhczo6YnVpbGRJbml0aWFs
U3RhdGUoKQogewogICAgIGF1dG8qIGNvbnRleHQgPSBjYW52YXNDb250ZXh0KCk7CiAgICAgQVNT
RVJUKGNvbnRleHQpOwogICAgIC8vIEZJWE1FOiA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMjAxNjUx
PiBXZWIgSW5zcGVjdG9yOiBDYW52YXM6IHN1cHBvcnQgY2FudmFzIHJlY29yZGluZ3MgZm9yIFdl
YkdQVURldmljZQogCi0gICAgYXV0byBpbml0aWFsU3RhdGVQYXlsb2FkID0gSW5zcGVjdG9yOjpQ
cm90b2NvbDo6UmVjb3JkaW5nOjpJbml0aWFsU3RhdGU6OmNyZWF0ZSgpLnJlbGVhc2UoKTsKKyAg
ICBhdXRvIGluaXRpYWxTdGF0ZVBheWxvYWQgPSBQcm90b2NvbDo6UmVjb3JkaW5nOjpJbml0aWFs
U3RhdGU6OmNyZWF0ZSgpLnJlbGVhc2UoKTsKIAogICAgIGF1dG8gYXR0cmlidXRlc1BheWxvYWQg
PSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgIGF0dHJpYnV0ZXNQYXlsb2FkLT5zZXRJbnRl
Z2VyKCJ3aWR0aCJfcywgY29udGV4dC0+Y2FudmFzQmFzZSgpLndpZHRoKCkpOwpAQCAtOTA4LDcg
KzkwOSw3IEBAIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpSZWNvcmRpbmc6OkluaXRpYWxTdGF0
ZT4gSW5zcGVjdG9yQ2FudmFzOjpidWlsZEluaXRpYWxTCiAgICAgaWYgKHBhcmFtZXRlcnNQYXls
b2FkLT5sZW5ndGgoKSkKICAgICAgICAgaW5pdGlhbFN0YXRlUGF5bG9hZC0+c2V0UGFyYW1ldGVy
cyhXVEZNb3ZlKHBhcmFtZXRlcnNQYXlsb2FkKSk7CiAKLSAgICBFcnJvclN0cmluZyBpZ25vcmVk
OworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBpZ25vcmVkOwogICAgIGluaXRpYWxTdGF0ZVBh
eWxvYWQtPnNldENvbnRlbnQoZ2V0Q2FudmFzQ29udGVudEFzRGF0YVVSTChpZ25vcmVkKSk7CiAK
ICAgICByZXR1cm4gaW5pdGlhbFN0YXRlUGF5bG9hZDsKQEAgLTk0Niw3ICs5NDcsNyBAQCBSZWY8
SlNPTjo6QXJyYXlPZjxKU09OOjpWYWx1ZT4+IEluc3BlY3RvckNhbnZhczo6YnVpbGRBY3Rpb24o
Y29uc3QgU3RyaW5nJiBuYW1lLAogICAgICAgICAgICAgICAgIGFycmF5LT5hZGRJdGVtKHZhbHVl
LmQudmFsdWVPcigxKSk7CiAgICAgICAgICAgICAgICAgYXJyYXktPmFkZEl0ZW0odmFsdWUuZS52
YWx1ZU9yKDApKTsKICAgICAgICAgICAgICAgICBhcnJheS0+YWRkSXRlbSh2YWx1ZS5mLnZhbHVl
T3IoMCkpOwotICAgICAgICAgICAgICAgIGFkZFBhcmFtZXRlcihhcnJheS5wdHIoKSwgUmVjb3Jk
aW5nU3dpenpsZVR5cGVzOjpET01NYXRyaXgpOworICAgICAgICAgICAgICAgIGFkZFBhcmFtZXRl
cihXVEZNb3ZlKGFycmF5KSwgUmVjb3JkaW5nU3dpenpsZVR5cGVzOjpET01NYXRyaXgpOwogICAg
ICAgICAgICAgfSwKICAgICAgICAgICAgIFsmXSAoY29uc3QgRWxlbWVudCogdmFsdWUpIHsKICAg
ICAgICAgICAgICAgICBpZiAodmFsdWUpIHsKQEAgLTExMDYsMTYgKzExMDcsMTYgQEAgUmVmPEpT
T046OkFycmF5T2Y8SlNPTjo6VmFsdWU+PiBJbnNwZWN0b3JDYW52YXM6OmJ1aWxkQWN0aW9uKGNv
bnN0IFN0cmluZyYgbmFtZSwKICAgICAgICAgICAgICAgICBhdXRvIGRlZHVwbGljYXRlZCA9IHZh
bHVlLm1hcChbJl0gKGNvbnN0IFN0cmluZyYgaXRlbSkgewogICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gaW5kZXhGb3JEYXRhKGl0ZW0pOwogICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAg
ICAgICAgIGFkZFBhcmFtZXRlcihidWlsZEFycmF5Rm9yVmVjdG9yKGRlZHVwbGljYXRlZCkucHRy
KCksIFJlY29yZGluZ1N3aXp6bGVUeXBlczo6U3RyaW5nKTsKKyAgICAgICAgICAgICAgICBhZGRQ
YXJhbWV0ZXIoYnVpbGRBcnJheUZvclZlY3RvcihkZWR1cGxpY2F0ZWQpLCBSZWNvcmRpbmdTd2l6
emxlVHlwZXM6OlN0cmluZyk7CiAgICAgICAgICAgICB9LAotICAgICAgICAgICAgWyZdIChjb25z
dCBWZWN0b3I8ZmxvYXQ+JiB2YWx1ZSkgeyBhZGRQYXJhbWV0ZXIoYnVpbGRBcnJheUZvclZlY3Rv
cih2YWx1ZSkucHRyKCksIFJlY29yZGluZ1N3aXp6bGVUeXBlczo6QXJyYXkpOyB9LAorICAgICAg
ICAgICAgWyZdIChjb25zdCBWZWN0b3I8ZmxvYXQ+JiB2YWx1ZSkgeyBhZGRQYXJhbWV0ZXIoYnVp
bGRBcnJheUZvclZlY3Rvcih2YWx1ZSksIFJlY29yZGluZ1N3aXp6bGVUeXBlczo6QXJyYXkpOyB9
LAogICAgICAgICAgICAgWyZdIChjb25zdCBWZWN0b3I8dWludDMyX3Q+JiB2YWx1ZSkgewogICAg
ICAgICAgICAgICAgIGF1dG8gbWFwcGVkID0gdmFsdWUubWFwKFsmXSAodWludDMyX3QgaXRlbSkg
ewogICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZG91YmxlPihpdGVtKTsK
ICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICBhZGRQYXJhbWV0ZXIoYnVpbGRB
cnJheUZvclZlY3RvcihtYXBwZWQpLnB0cigpLCBSZWNvcmRpbmdTd2l6emxlVHlwZXM6OkFycmF5
KTsKKyAgICAgICAgICAgICAgICBhZGRQYXJhbWV0ZXIoYnVpbGRBcnJheUZvclZlY3RvcihtYXBw
ZWQpLCBSZWNvcmRpbmdTd2l6emxlVHlwZXM6OkFycmF5KTsKICAgICAgICAgICAgIH0sCi0gICAg
ICAgICAgICBbJl0gKGNvbnN0IFZlY3RvcjxpbnQzMl90PiYgdmFsdWUpIHsgYWRkUGFyYW1ldGVy
KGJ1aWxkQXJyYXlGb3JWZWN0b3IodmFsdWUpLnB0cigpLCBSZWNvcmRpbmdTd2l6emxlVHlwZXM6
OkFycmF5KTsgfSwKKyAgICAgICAgICAgIFsmXSAoY29uc3QgVmVjdG9yPGludDMyX3Q+JiB2YWx1
ZSkgeyBhZGRQYXJhbWV0ZXIoYnVpbGRBcnJheUZvclZlY3Rvcih2YWx1ZSksIFJlY29yZGluZ1N3
aXp6bGVUeXBlczo6QXJyYXkpOyB9LAogI2lmIEVOQUJMRShXRUJHTCkKICAgICAgICAgICAgIFsm
XSAoY29uc3QgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6RmxvYXQzMkxpc3Q6OlZhcmlhbnRU
eXBlJiB2YWx1ZSkgewogICAgICAgICAgICAgICAgIFdURjo6dmlzaXQocGFyc2VQYXJhbWV0ZXIs
IHZhbHVlKTsKQEAgLTExNTksNyArMTE2MCw3IEBAIFJlZjxKU09OOjpBcnJheU9mPEpTT046OlZh
bHVlPj4gSW5zcGVjdG9yQ2FudmFzOjpidWlsZEFjdGlvbihjb25zdCBTdHJpbmcmIG5hbWUsCiBS
ZWY8SlNPTjo6QXJyYXlPZjxKU09OOjpWYWx1ZT4+IEluc3BlY3RvckNhbnZhczo6YnVpbGRBcnJh
eUZvckNhbnZhc0dyYWRpZW50KGNvbnN0IENhbnZhc0dyYWRpZW50JiBjYW52YXNHcmFkaWVudCkK
IHsKICAgICBBU0NJSUxpdGVyYWwgdHlwZSA9ICJsaW5lYXItZ3JhZGllbnQiX3M7Ci0gICAgYXV0
byBwYXJhbWV0ZXJzID0gSlNPTjo6QXJyYXlPZjxmbG9hdD46OmNyZWF0ZSgpOworICAgIGF1dG8g
cGFyYW1ldGVycyA9IEpTT046OkFycmF5T2Y8ZG91YmxlPjo6Y3JlYXRlKCk7CiAgICAgV1RGOjpz
d2l0Y2hPbihjYW52YXNHcmFkaWVudC5ncmFkaWVudCgpLmRhdGEoKSwKICAgICAgICAgWyZdIChj
b25zdCBHcmFkaWVudDo6TGluZWFyRGF0YSYgZGF0YSkgewogICAgICAgICAgICAgcGFyYW1ldGVy
cy0+YWRkSXRlbShkYXRhLnBvaW50MC54KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckNhbnZhcy5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckNhbnZhcy5oCmluZGV4IDc4Y2I2YThhM2I4YWI3ODBlOTVmYjNmYWVkM2FiYzU5NGQx
NDY1OTguLmIyN2JjOGQ0OTIzOTExN2JlZTUyNWQ1ZmU2YWMyNmUyZDYxNmI1YzcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDYW52YXMuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzLmgKQEAgLTU4LDggKzU4LDYgQEAg
Y2xhc3MgT2Zmc2NyZWVuQ2FudmFzOwogY2xhc3MgVHlwZWRPTUNTU0ltYWdlVmFsdWU7CiAjZW5k
aWYKIAotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7Ci0KIGNsYXNzIEluc3BlY3RvckNhbnZh
cyBmaW5hbCA6IHB1YmxpYyBSZWZDb3VudGVkPEluc3BlY3RvckNhbnZhcz4gewogcHVibGljOgog
ICAgIHN0YXRpYyBSZWY8SW5zcGVjdG9yQ2FudmFzPiBjcmVhdGUoQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dCYpOwpAQCAtMTA3LDcgKzEwNSw3IEBAIHB1YmxpYzoKICAgICBSZWY8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6Q2FudmFzOjpDYW52YXM+IGJ1aWxkT2JqZWN0Rm9yQ2FudmFzKGJvb2wgY2FwdHVy
ZUJhY2t0cmFjZSk7CiAgICAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlY29yZGluZzo6UmVj
b3JkaW5nPiByZWxlYXNlT2JqZWN0Rm9yUmVjb3JkaW5nKCk7CiAKLSAgICBTdHJpbmcgZ2V0Q2Fu
dmFzQ29udGVudEFzRGF0YVVSTChFcnJvclN0cmluZyYpOworICAgIFN0cmluZyBnZXRDYW52YXND
b250ZW50QXNEYXRhVVJMKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nJik7CiAKIHBy
aXZhdGU6CiAgICAgSW5zcGVjdG9yQ2FudmFzKENhbnZhc1JlbmRlcmluZ0NvbnRleHQmKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAppbmRl
eCAyZTkwYzExOTQ4YTdlMGViNjEwNWE4M2UyYzA4Y2I0ZjgyYThmMmZlLi42MzBkZjcxNzkwYzYz
YjZlNzU4NzM0NTFhMTc0MGY4NmY2N2UwMmRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCkBAIC00NzgsMTAgKzQ3OCw4IEBAIHZvaWQg
SW5zcGVjdG9yQ29udHJvbGxlcjo6ZnJvbnRlbmRJbml0aWFsaXplZCgpCiB7CiAgICAgaWYgKG1f
cGF1c2VBZnRlckluaXRpYWxpemF0aW9uKSB7CiAgICAgICAgIG1fcGF1c2VBZnRlckluaXRpYWxp
emF0aW9uID0gZmFsc2U7Ci0gICAgICAgIGlmIChhdXRvKiBkZWJ1Z2dlckFnZW50ID0gbV9pbnN0
cnVtZW50aW5nQWdlbnRzLT5lbmFibGVkUGFnZURlYnVnZ2VyQWdlbnQoKSkgewotICAgICAgICAg
ICAgRXJyb3JTdHJpbmcgaWdub3JlZDsKLSAgICAgICAgICAgIGRlYnVnZ2VyQWdlbnQtPnBhdXNl
KGlnbm9yZWQpOwotICAgICAgICB9CisgICAgICAgIGlmIChhdXRvKiBkZWJ1Z2dlckFnZW50ID0g
bV9pbnN0cnVtZW50aW5nQWdlbnRzLT5lbmFibGVkUGFnZURlYnVnZ2VyQWdlbnQoKSkKKyAgICAg
ICAgICAgIGRlYnVnZ2VyQWdlbnQtPnBhdXNlKCk7CiAgICAgfQogCiAjaWYgRU5BQkxFKFJFTU9U
RV9JTlNQRUNUT1IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yRnJvbnRlbmRIb3N0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JG
cm9udGVuZEhvc3QuY3BwCmluZGV4IDUwZTBjODNiYzkyMDY2MmU3NjgwMjU1Nzc1MmIzNmYyMzc1
YjAzOWMuLmE2YmI4NzdhMjJhMGFhODZiZjg5OTgzOWE3NWY1YWZmNmVmOGRlMzAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuY3BwCkBA
IC02MDcsNyArNjA3LDcgQEAgYm9vbCBJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OmRpYWdub3N0aWNM
b2dnaW5nQXZhaWxhYmxlKCkKICAgICByZXR1cm4gbV9jbGllbnQgJiYgbV9jbGllbnQtPmRpYWdu
b3N0aWNMb2dnaW5nQXZhaWxhYmxlKCk7CiB9CiAKLXN0YXRpYyBPcHRpb25hbDxEaWFnbm9zdGlj
TG9nZ2luZ0NsaWVudDo6VmFsdWVQYXlsb2FkPiB2YWx1ZVBheWxvYWRGcm9tSlNPTlZhbHVlKGNv
bnN0IFJlZlB0cjxKU09OOjpWYWx1ZT4mIHZhbHVlKQorc3RhdGljIE9wdGlvbmFsPERpYWdub3N0
aWNMb2dnaW5nQ2xpZW50OjpWYWx1ZVBheWxvYWQ+IHZhbHVlUGF5bG9hZEZyb21KU09OVmFsdWUo
UmVmPEpTT046OlZhbHVlPiYmIHZhbHVlKQogewogICAgIHN3aXRjaCAodmFsdWUtPnR5cGUoKSkg
ewogICAgIGNhc2UgSlNPTjo6VmFsdWU6OlR5cGU6OkFycmF5OgpAQCAtNjE3LDI0ICs2MTcsMTYg
QEAgc3RhdGljIE9wdGlvbmFsPERpYWdub3N0aWNMb2dnaW5nQ2xpZW50OjpWYWx1ZVBheWxvYWQ+
IHZhbHVlUGF5bG9hZEZyb21KU09OVmFsdWUKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
IAogICAgIGNhc2UgSlNPTjo6VmFsdWU6OlR5cGU6OkJvb2xlYW46Ci0gICAgICAgIGJvb2wgYm9v
bFZhbHVlOwotICAgICAgICB2YWx1ZS0+YXNCb29sZWFuKGJvb2xWYWx1ZSk7Ci0gICAgICAgIHJl
dHVybiBEaWFnbm9zdGljTG9nZ2luZ0NsaWVudDo6VmFsdWVQYXlsb2FkKGJvb2xWYWx1ZSk7Cisg
ICAgICAgIHJldHVybiBEaWFnbm9zdGljTG9nZ2luZ0NsaWVudDo6VmFsdWVQYXlsb2FkKHZhbHVl
LT5hc0Jvb2xlYW4oKS52YWx1ZU9yKGZhbHNlKSk7CiAKICAgICBjYXNlIEpTT046OlZhbHVlOjpU
eXBlOjpEb3VibGU6Ci0gICAgICAgIGRvdWJsZSBkb3VibGVWYWx1ZTsKLSAgICAgICAgdmFsdWUt
PmFzRG91YmxlKGRvdWJsZVZhbHVlKTsKLSAgICAgICAgcmV0dXJuIERpYWdub3N0aWNMb2dnaW5n
Q2xpZW50OjpWYWx1ZVBheWxvYWQoZG91YmxlVmFsdWUpOworICAgICAgICByZXR1cm4gRGlhZ25v
c3RpY0xvZ2dpbmdDbGllbnQ6OlZhbHVlUGF5bG9hZCh2YWx1ZS0+YXNEb3VibGUoKS52YWx1ZU9y
KDApKTsKIAogICAgIGNhc2UgSlNPTjo6VmFsdWU6OlR5cGU6OkludGVnZXI6Ci0gICAgICAgIGxv
bmcgbG9uZyBpbnRWYWx1ZTsKLSAgICAgICAgdmFsdWUtPmFzSW50ZWdlcihpbnRWYWx1ZSk7Ci0g
ICAgICAgIHJldHVybiBEaWFnbm9zdGljTG9nZ2luZ0NsaWVudDo6VmFsdWVQYXlsb2FkKGludFZh
bHVlKTsKKyAgICAgICAgcmV0dXJuIERpYWdub3N0aWNMb2dnaW5nQ2xpZW50OjpWYWx1ZVBheWxv
YWQoc3RhdGljX2Nhc3Q8bG9uZyBsb25nPih2YWx1ZS0+YXNJbnRlZ2VyKCkudmFsdWVPcigwKSkp
OwogCiAgICAgY2FzZSBKU09OOjpWYWx1ZTo6VHlwZTo6U3RyaW5nOgotICAgICAgICBTdHJpbmcg
c3RyaW5nVmFsdWU7Ci0gICAgICAgIHZhbHVlLT5hc1N0cmluZyhzdHJpbmdWYWx1ZSk7Ci0gICAg
ICAgIHJldHVybiBEaWFnbm9zdGljTG9nZ2luZ0NsaWVudDo6VmFsdWVQYXlsb2FkKHN0cmluZ1Zh
bHVlKTsKKyAgICAgICAgcmV0dXJuIERpYWdub3N0aWNMb2dnaW5nQ2xpZW50OjpWYWx1ZVBheWxv
YWQodmFsdWUtPmFzU3RyaW5nKCkpOwogICAgIH0KIAogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwpAQCAtNjQ2LDE3ICs2MzgsMTcgQEAgdm9pZCBJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OmxvZ0Rp
YWdub3N0aWNFdmVudChjb25zdCBTdHJpbmcmIGV2ZW50TmFtZSwgY29uc3QgU3QKICAgICBpZiAo
IXN1cHBvcnRzRGlhZ25vc3RpY0xvZ2dpbmcoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVm
UHRyPEpTT046OlZhbHVlPiBwYXlsb2FkVmFsdWU7Ci0gICAgaWYgKCFKU09OOjpWYWx1ZTo6cGFy
c2VKU09OKHBheWxvYWRTdHJpbmcsIHBheWxvYWRWYWx1ZSkpCisgICAgYXV0byBwYXlsb2FkVmFs
dWUgPSBKU09OOjpWYWx1ZTo6cGFyc2VKU09OKHBheWxvYWRTdHJpbmcpOworICAgIGlmICghcGF5
bG9hZFZhbHVlKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBw
YXlsb2FkT2JqZWN0OwotICAgIGlmICghcGF5bG9hZFZhbHVlLT5hc09iamVjdChwYXlsb2FkT2Jq
ZWN0KSkKKyAgICBhdXRvIHBheWxvYWRPYmplY3QgPSBwYXlsb2FkVmFsdWUtPmFzT2JqZWN0KCk7
CisgICAgaWYgKCFwYXlsb2FkT2JqZWN0KQogICAgICAgICByZXR1cm47CiAKICAgICBEaWFnbm9z
dGljTG9nZ2luZ0NsaWVudDo6VmFsdWVEaWN0aW9uYXJ5IGRpY3Rpb25hcnk7Ci0gICAgZm9yIChj
b25zdCBhdXRvJiBba2V5LCB2YWx1ZV0gOiAqcGF5bG9hZE9iamVjdCkgewotICAgICAgICBpZiAo
YXV0byB2YWx1ZVBheWxvYWQgPSB2YWx1ZVBheWxvYWRGcm9tSlNPTlZhbHVlKHZhbHVlKSkKKyAg
ICBmb3IgKGF1dG8mIFtrZXksIHZhbHVlXSA6ICpwYXlsb2FkT2JqZWN0KSB7CisgICAgICAgIGlm
IChhdXRvIHZhbHVlUGF5bG9hZCA9IHZhbHVlUGF5bG9hZEZyb21KU09OVmFsdWUoV1RGTW92ZSh2
YWx1ZSkpKQogICAgICAgICAgICAgZGljdGlvbmFyeS5zZXQoa2V5LCBXVEZNb3ZlKHZhbHVlUGF5
bG9hZC52YWx1ZSgpKSk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yU3R5bGVTaGVldC5jcHAKaW5kZXggYWUwZmVmNWRmZTM5YjlhNTE2ZTU1MTAzMDdl
YWJjYjY2MGQxYWJjYi4uOTc2NjllZmI2ODdkMzM1NTRkNTJiYzY4ZTE4YzY4NDFhZWI0Y2Y0ZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNw
cApAQCAtMzgwLDcgKzM4MCw3IEBAIHZvaWQgU3R5bGVTaGVldEhhbmRsZXI6Om9ic2VydmVDb21t
ZW50KHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQpCiAgICAgbV9jdXJy
ZW50UnVsZURhdGFTdGFjay5sYXN0KCktPnN0eWxlU291cmNlRGF0YS0+cHJvcGVydHlEYXRhLmFw
cGVuZChDU1NQcm9wZXJ0eVNvdXJjZURhdGEocHJvcGVydHlEYXRhLm5hbWUsIHByb3BlcnR5RGF0
YS52YWx1ZSwgZmFsc2UsIHRydWUsIHRydWUsIFNvdXJjZVJhbmdlKHN0YXJ0T2Zmc2V0IC0gdG9w
UnVsZUJvZHlSYW5nZS5zdGFydCwgZW5kT2Zmc2V0IC0gdG9wUnVsZUJvZHlSYW5nZS5zdGFydCkp
KTsKIH0KIAotc3RhdGljIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlNvdXJjZVJh
bmdlPiBidWlsZFNvdXJjZVJhbmdlT2JqZWN0KGNvbnN0IFNvdXJjZVJhbmdlJiByYW5nZSwgY29u
c3QgVmVjdG9yPHNpemVfdD4mIGxpbmVFbmRpbmdzLCBpbnQqIGVuZGluZ0xpbmUgPSBudWxscHRy
KQorc3RhdGljIFJlZlB0cjxQcm90b2NvbDo6Q1NTOjpTb3VyY2VSYW5nZT4gYnVpbGRTb3VyY2VS
YW5nZU9iamVjdChjb25zdCBTb3VyY2VSYW5nZSYgcmFuZ2UsIGNvbnN0IFZlY3RvcjxzaXplX3Q+
JiBsaW5lRW5kaW5ncywgaW50KiBlbmRpbmdMaW5lID0gbnVsbHB0cikKIHsKICAgICBpZiAobGlu
ZUVuZGluZ3MuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTM5MSw3ICsz
OTEsNyBAQCBzdGF0aWMgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U291cmNlUmFu
Z2U+IGJ1aWxkU291cmNlUmFuZ2VPYmplY3QoY29ucwogICAgIGlmIChlbmRpbmdMaW5lKQogICAg
ICAgICAqZW5kaW5nTGluZSA9IGVuZC5tX2xpbmUuemVyb0Jhc2VkSW50KCk7CiAKLSAgICByZXR1
cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTb3VyY2VSYW5nZTo6Y3JlYXRlKCkKKyAgICBy
ZXR1cm4gUHJvdG9jb2w6OkNTUzo6U291cmNlUmFuZ2U6OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRT
dGFydExpbmUoc3RhcnQubV9saW5lLnplcm9CYXNlZEludCgpKQogICAgICAgICAuc2V0U3RhcnRD
b2x1bW4oc3RhcnQubV9jb2x1bW4uemVyb0Jhc2VkSW50KCkpCiAgICAgICAgIC5zZXRFbmRMaW5l
KGVuZC5tX2xpbmUuemVyb0Jhc2VkSW50KCkpCkBAIC00MjgsMzQgKzQyOCwzNCBAQCBzdGF0aWMg
UmVmUHRyPENTU1J1bGVMaXN0PiBhc0NTU1J1bGVMaXN0KENTU1J1bGUqIHJ1bGUpCiAgICAgcmV0
dXJuIG51bGxwdHI7CiB9CiAKLXN0YXRpYyBSZWY8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpDU1M6Okdyb3VwaW5nPj4gYnVpbGRBcnJheUZvckdyb3VwaW5ncyhDU1NSdWxlJiBy
dWxlKQorc3RhdGljIFJlZjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpDU1M6Okdyb3VwaW5nPj4g
YnVpbGRBcnJheUZvckdyb3VwaW5ncyhDU1NSdWxlJiBydWxlKQogewotICAgIGF1dG8gZ3JvdXBp
bmdzUGF5bG9hZCA9IEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpHcm91
cGluZz46OmNyZWF0ZSgpOworICAgIGF1dG8gZ3JvdXBpbmdzUGF5bG9hZCA9IEpTT046OkFycmF5
T2Y8UHJvdG9jb2w6OkNTUzo6R3JvdXBpbmc+OjpjcmVhdGUoKTsKIAogICAgIGF1dG8qIHBhcmVu
dFJ1bGUgPSAmcnVsZTsKICAgICB3aGlsZSAocGFyZW50UnVsZSkgewotICAgICAgICBSZWZQdHI8
SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpHcm91cGluZz4gcnVsZUdyb3VwaW5nUGF5bG9hZDsK
KyAgICAgICAgUmVmUHRyPFByb3RvY29sOjpDU1M6Okdyb3VwaW5nPiBydWxlR3JvdXBpbmdQYXls
b2FkOwogCiAgICAgICAgIGlmIChpczxDU1NNZWRpYVJ1bGU+KHBhcmVudFJ1bGUpKSB7CiAgICAg
ICAgICAgICBhdXRvKiBtZWRpYSA9IGRvd25jYXN0PENTU01lZGlhUnVsZT4ocGFyZW50UnVsZSkt
Pm1lZGlhKCk7CiAgICAgICAgICAgICBpZiAobWVkaWEgJiYgbWVkaWEtPmxlbmd0aCgpICYmIG1l
ZGlhLT5tZWRpYVRleHQoKSAhPSAiYWxsIikgewotICAgICAgICAgICAgICAgIHJ1bGVHcm91cGlu
Z1BheWxvYWQgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6Okdyb3VwaW5nOjpjcmVhdGUoKQor
ICAgICAgICAgICAgICAgIHJ1bGVHcm91cGluZ1BheWxvYWQgPSBQcm90b2NvbDo6Q1NTOjpHcm91
cGluZzo6Y3JlYXRlKCkKICAgICAgICAgICAgICAgICAgICAgLnNldFRleHQobWVkaWEtPm1lZGlh
VGV4dCgpKQotICAgICAgICAgICAgICAgICAgICAuc2V0VHlwZShJbnNwZWN0b3I6OlByb3RvY29s
OjpDU1M6Okdyb3VwaW5nOjpUeXBlOjpNZWRpYVJ1bGUpCisgICAgICAgICAgICAgICAgICAgIC5z
ZXRUeXBlKFByb3RvY29sOjpDU1M6Okdyb3VwaW5nOjpUeXBlOjpNZWRpYVJ1bGUpCiAgICAgICAg
ICAgICAgICAgICAgIC5yZWxlYXNlKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBp
ZiAoaXM8Q1NTSW1wb3J0UnVsZT4ocGFyZW50UnVsZSkpIHsKICAgICAgICAgICAgIGF1dG8mIG1l
ZGlhID0gZG93bmNhc3Q8Q1NTSW1wb3J0UnVsZT4ocGFyZW50UnVsZSktPm1lZGlhKCk7CiAgICAg
ICAgICAgICBpZiAobWVkaWEubGVuZ3RoKCkgJiYgbWVkaWEubWVkaWFUZXh0KCkgIT0gImFsbCIp
IHsKLSAgICAgICAgICAgICAgICBydWxlR3JvdXBpbmdQYXlsb2FkID0gSW5zcGVjdG9yOjpQcm90
b2NvbDo6Q1NTOjpHcm91cGluZzo6Y3JlYXRlKCkKKyAgICAgICAgICAgICAgICBydWxlR3JvdXBp
bmdQYXlsb2FkID0gUHJvdG9jb2w6OkNTUzo6R3JvdXBpbmc6OmNyZWF0ZSgpCiAgICAgICAgICAg
ICAgICAgICAgIC5zZXRUZXh0KG1lZGlhLm1lZGlhVGV4dCgpKQotICAgICAgICAgICAgICAgICAg
ICAuc2V0VHlwZShJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6Okdyb3VwaW5nOjpUeXBlOjpNZWRp
YUltcG9ydFJ1bGUpCisgICAgICAgICAgICAgICAgICAgIC5zZXRUeXBlKFByb3RvY29sOjpDU1M6
Okdyb3VwaW5nOjpUeXBlOjpNZWRpYUltcG9ydFJ1bGUpCiAgICAgICAgICAgICAgICAgICAgIC5y
ZWxlYXNlKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAoaXM8Q1NTU3VwcG9y
dHNSdWxlPihwYXJlbnRSdWxlKSkgewotICAgICAgICAgICAgcnVsZUdyb3VwaW5nUGF5bG9hZCA9
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6R3JvdXBpbmc6OmNyZWF0ZSgpCisgICAgICAgICAg
ICBydWxlR3JvdXBpbmdQYXlsb2FkID0gUHJvdG9jb2w6OkNTUzo6R3JvdXBpbmc6OmNyZWF0ZSgp
CiAgICAgICAgICAgICAgICAgLnNldFRleHQoZG93bmNhc3Q8Q1NTU3VwcG9ydHNSdWxlPihwYXJl
bnRSdWxlKS0+Y29uZGl0aW9uVGV4dCgpKQotICAgICAgICAgICAgICAgIC5zZXRUeXBlKEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkNTUzo6R3JvdXBpbmc6OlR5cGU6OlN1cHBvcnRzUnVsZSkKKyAgICAg
ICAgICAgICAgICAuc2V0VHlwZShQcm90b2NvbDo6Q1NTOjpHcm91cGluZzo6VHlwZTo6U3VwcG9y
dHNSdWxlKQogICAgICAgICAgICAgICAgIC5yZWxlYXNlKCk7CiAgICAgICAgIH0KIApAQCAtNDcw
LDcgKzQ3MCw3IEBAIHN0YXRpYyBSZWY8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29s
OjpDU1M6Okdyb3VwaW5nPj4gYnVpbGRBcnJheUZvckdyb3VwCiAgICAgICAgICAgICAgICAgICAg
IHJ1bGVHcm91cGluZ1BheWxvYWQtPnNldFNvdXJjZVVSTChzb3VyY2VVUkwpOwogICAgICAgICAg
ICAgfQogCi0gICAgICAgICAgICBncm91cGluZ3NQYXlsb2FkLT5hZGRJdGVtKFdURk1vdmUocnVs
ZUdyb3VwaW5nUGF5bG9hZCkpOworICAgICAgICAgICAgZ3JvdXBpbmdzUGF5bG9hZC0+YWRkSXRl
bShydWxlR3JvdXBpbmdQYXlsb2FkLnJlbGVhc2VOb25OdWxsKCkpOwogICAgICAgICB9CiAKICAg
ICAgICAgaWYgKHBhcmVudFJ1bGUtPnBhcmVudFJ1bGUoKSkgewpAQCAtNDgyLDkgKzQ4Miw5IEBA
IHN0YXRpYyBSZWY8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6Okdyb3Vw
aW5nPj4gYnVpbGRBcnJheUZvckdyb3VwCiAgICAgICAgIHdoaWxlIChzdHlsZVNoZWV0KSB7CiAg
ICAgICAgICAgICBhdXRvKiBtZWRpYSA9IHN0eWxlU2hlZXQtPm1lZGlhKCk7CiAgICAgICAgICAg
ICBpZiAobWVkaWEgJiYgbWVkaWEtPmxlbmd0aCgpICYmIG1lZGlhLT5tZWRpYVRleHQoKSAhPSAi
YWxsIikgewotICAgICAgICAgICAgICAgIGF1dG8gc2hlZXRHcm91cGluZ1BheWxvYWQgPSBJbnNw
ZWN0b3I6OlByb3RvY29sOjpDU1M6Okdyb3VwaW5nOjpjcmVhdGUoKQorICAgICAgICAgICAgICAg
IGF1dG8gc2hlZXRHcm91cGluZ1BheWxvYWQgPSBQcm90b2NvbDo6Q1NTOjpHcm91cGluZzo6Y3Jl
YXRlKCkKICAgICAgICAgICAgICAgICAgICAgLnNldFRleHQobWVkaWEtPm1lZGlhVGV4dCgpKQot
ICAgICAgICAgICAgICAgICAgICAuc2V0VHlwZShpczxIVE1MU3R5bGVFbGVtZW50PihzdHlsZVNo
ZWV0LT5vd25lck5vZGUoKSkgPyBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6Okdyb3VwaW5nOjpU
eXBlOjpNZWRpYVN0eWxlTm9kZTogSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpHcm91cGluZzo6
VHlwZTo6TWVkaWFMaW5rTm9kZSkKKyAgICAgICAgICAgICAgICAgICAgLnNldFR5cGUoaXM8SFRN
TFN0eWxlRWxlbWVudD4oc3R5bGVTaGVldC0+b3duZXJOb2RlKCkpID8gUHJvdG9jb2w6OkNTUzo6
R3JvdXBpbmc6OlR5cGU6Ok1lZGlhU3R5bGVOb2RlOiBQcm90b2NvbDo6Q1NTOjpHcm91cGluZzo6
VHlwZTo6TWVkaWFMaW5rTm9kZSkKICAgICAgICAgICAgICAgICAgICAgLnJlbGVhc2UoKTsKIAog
ICAgICAgICAgICAgICAgIFN0cmluZyBzb3VyY2VVUkw7CkBAIC01MjMsMjggKzUyMywzMCBAQCBJ
bnNwZWN0b3JTdHlsZTo6SW5zcGVjdG9yU3R5bGUoY29uc3QgSW5zcGVjdG9yQ1NTSWQmIHN0eWxl
SWQsIFJlZjxDU1NTdHlsZURlY2xhcgogCiBJbnNwZWN0b3JTdHlsZTo6fkluc3BlY3RvclN0eWxl
KCkgPSBkZWZhdWx0OwogCi1SZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHls
ZT4gSW5zcGVjdG9yU3R5bGU6OmJ1aWxkT2JqZWN0Rm9yU3R5bGUoKSBjb25zdAorUmVmPFByb3Rv
Y29sOjpDU1M6OkNTU1N0eWxlPiBJbnNwZWN0b3JTdHlsZTo6YnVpbGRPYmplY3RGb3JTdHlsZSgp
IGNvbnN0CiB7Ci0gICAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+IHJl
c3VsdCA9IHN0eWxlV2l0aFByb3BlcnRpZXMoKTsKLSAgICBpZiAoIW1fc3R5bGVJZC5pc0VtcHR5
KCkpCi0gICAgICAgIHJlc3VsdC0+c2V0U3R5bGVJZChtX3N0eWxlSWQuYXNQcm90b2NvbFZhbHVl
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGVJZD4oKSk7CisgICAgUmVmPFByb3Rv
Y29sOjpDU1M6OkNTU1N0eWxlPiByZXN1bHQgPSBzdHlsZVdpdGhQcm9wZXJ0aWVzKCk7CisgICAg
aWYgKGF1dG8gc3R5bGVJZCA9IG1fc3R5bGVJZC5hc1Byb3RvY29sVmFsdWU8UHJvdG9jb2w6OkNT
Uzo6Q1NTU3R5bGVJZD4oKSkKKyAgICAgICAgcmVzdWx0LT5zZXRTdHlsZUlkKHN0eWxlSWQucmVs
ZWFzZU5vbk51bGwoKSk7CiAKICAgICByZXN1bHQtPnNldFdpZHRoKG1fc3R5bGUtPmdldFByb3Bl
cnR5VmFsdWUoIndpZHRoIikpOwogICAgIHJlc3VsdC0+c2V0SGVpZ2h0KG1fc3R5bGUtPmdldFBy
b3BlcnR5VmFsdWUoImhlaWdodCIpKTsKIAogICAgIFJlZlB0cjxDU1NSdWxlU291cmNlRGF0YT4g
c291cmNlRGF0YSA9IGV4dHJhY3RTb3VyY2VEYXRhKCk7Ci0gICAgaWYgKHNvdXJjZURhdGEpCi0g
ICAgICAgIHJlc3VsdC0+c2V0UmFuZ2UoYnVpbGRTb3VyY2VSYW5nZU9iamVjdChzb3VyY2VEYXRh
LT5ydWxlQm9keVJhbmdlLCBtX3BhcmVudFN0eWxlU2hlZXQtPmxpbmVFbmRpbmdzKCkpKTsKKyAg
ICBpZiAoc291cmNlRGF0YSkgeworICAgICAgICBpZiAoYXV0byByYW5nZSA9IGJ1aWxkU291cmNl
UmFuZ2VPYmplY3Qoc291cmNlRGF0YS0+cnVsZUJvZHlSYW5nZSwgbV9wYXJlbnRTdHlsZVNoZWV0
LT5saW5lRW5kaW5ncygpKSkKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0UmFuZ2UocmFuZ2UucmVs
ZWFzZU5vbk51bGwoKSk7CisgICAgfQogCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotUmVmPEpT
T046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NDb21wdXRlZFN0eWxlUHJv
cGVydHk+PiBJbnNwZWN0b3JTdHlsZTo6YnVpbGRBcnJheUZvckNvbXB1dGVkU3R5bGUoKSBjb25z
dAorUmVmPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkNTUzo6Q1NTQ29tcHV0ZWRTdHlsZVByb3Bl
cnR5Pj4gSW5zcGVjdG9yU3R5bGU6OmJ1aWxkQXJyYXlGb3JDb21wdXRlZFN0eWxlKCkgY29uc3QK
IHsKLSAgICBhdXRvIHJlc3VsdCA9IEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6
Q1NTOjpDU1NDb21wdXRlZFN0eWxlUHJvcGVydHk+OjpjcmVhdGUoKTsKKyAgICBhdXRvIHJlc3Vs
dCA9IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkNTUzo6Q1NTQ29tcHV0ZWRTdHlsZVByb3BlcnR5
Pjo6Y3JlYXRlKCk7CiAgICAgZm9yIChhdXRvJiBwcm9wZXJ0eSA6IGNvbGxlY3RQcm9wZXJ0aWVz
KHRydWUpKSB7CiAgICAgICAgIGNvbnN0IENTU1Byb3BlcnR5U291cmNlRGF0YSYgcHJvcGVydHlF
bnRyeSA9IHByb3BlcnR5LnNvdXJjZURhdGE7Ci0gICAgICAgIGF1dG8gZW50cnkgPSBJbnNwZWN0
b3I6OlByb3RvY29sOjpDU1M6OkNTU0NvbXB1dGVkU3R5bGVQcm9wZXJ0eTo6Y3JlYXRlKCkKKyAg
ICAgICAgYXV0byBlbnRyeSA9IFByb3RvY29sOjpDU1M6OkNTU0NvbXB1dGVkU3R5bGVQcm9wZXJ0
eTo6Y3JlYXRlKCkKICAgICAgICAgICAgIC5zZXROYW1lKHByb3BlcnR5RW50cnkubmFtZSkKICAg
ICAgICAgICAgIC5zZXRWYWx1ZShwcm9wZXJ0eUVudHJ5LnZhbHVlKQogICAgICAgICAgICAgLnJl
bGVhc2UoKTsKQEAgLTYyMywxMyArNjI1LDEzIEBAIFZlY3RvcjxJbnNwZWN0b3JTdHlsZVByb3Bl
cnR5PiBJbnNwZWN0b3JTdHlsZTo6Y29sbGVjdFByb3BlcnRpZXMoYm9vbCBpbmNsdWRlQWxsCiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NT
U3R5bGU+IEluc3BlY3RvclN0eWxlOjpzdHlsZVdpdGhQcm9wZXJ0aWVzKCkgY29uc3QKK1JlZjxQ
cm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4gSW5zcGVjdG9yU3R5bGU6OnN0eWxlV2l0aFByb3BlcnRp
ZXMoKSBjb25zdAogewogICAgIGF1dG8gcHJvcGVydGllcyA9IGNvbGxlY3RQcm9wZXJ0aWVzKGZh
bHNlKTsKIAotICAgIGF1dG8gcHJvcGVydGllc09iamVjdCA9IEpTT046OkFycmF5T2Y8SW5zcGVj
dG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0eT46OmNyZWF0ZSgpOwotICAgIGF1dG8gc2hv
cnRoYW5kRW50cmllcyA9IEFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTaG9ydGhh
bmRFbnRyeT46OmNyZWF0ZSgpOwotICAgIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0eT4+IHByb3BlcnR5TmFtZVRvUHJldmlvdXNBY3Rp
dmVQcm9wZXJ0eTsKKyAgICBhdXRvIHByb3BlcnRpZXNPYmplY3QgPSBKU09OOjpBcnJheU9mPFBy
b3RvY29sOjpDU1M6OkNTU1Byb3BlcnR5Pjo6Y3JlYXRlKCk7CisgICAgYXV0byBzaG9ydGhhbmRF
bnRyaWVzID0gQXJyYXlPZjxQcm90b2NvbDo6Q1NTOjpTaG9ydGhhbmRFbnRyeT46OmNyZWF0ZSgp
OworICAgIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8UHJvdG9jb2w6OkNTUzo6Q1NTUHJvcGVydHk+
PiBwcm9wZXJ0eU5hbWVUb1ByZXZpb3VzQWN0aXZlUHJvcGVydHk7CiAgICAgSGFzaFNldDxTdHJp
bmc+IGZvdW5kU2hvcnRoYW5kczsKICAgICBTdHJpbmcgcHJldmlvdXNQcmlvcml0eTsKICAgICBT
dHJpbmcgcHJldmlvdXNTdGF0dXM7CkBAIC02NDEsOSArNjQzLDkgQEAgUmVmPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+IEluc3BlY3RvclN0eWxlOjpzdHlsZVdpdGhQcm9wZXJ0
aWVzKCkgY28KICAgICAgICAgY29uc3QgQ1NTUHJvcGVydHlTb3VyY2VEYXRhJiBwcm9wZXJ0eUVu
dHJ5ID0gaXQtPnNvdXJjZURhdGE7CiAgICAgICAgIGNvbnN0IFN0cmluZyYgbmFtZSA9IHByb3Bl
cnR5RW50cnkubmFtZTsKIAotICAgICAgICBhdXRvIHN0YXR1cyA9IGl0LT5kaXNhYmxlZCA/IElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUHJvcGVydHlTdGF0dXM6OkRpc2FibGVkIDogSW5z
cGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0eVN0YXR1czo6QWN0aXZlOworICAgICAg
ICBhdXRvIHN0YXR1cyA9IGl0LT5kaXNhYmxlZCA/IFByb3RvY29sOjpDU1M6OkNTU1Byb3BlcnR5
U3RhdHVzOjpEaXNhYmxlZCA6IFByb3RvY29sOjpDU1M6OkNTU1Byb3BlcnR5U3RhdHVzOjpBY3Rp
dmU7CiAKLSAgICAgICAgYXV0byBwcm9wZXJ0eSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6
Q1NTUHJvcGVydHk6OmNyZWF0ZSgpCisgICAgICAgIGF1dG8gcHJvcGVydHkgPSBQcm90b2NvbDo6
Q1NTOjpDU1NQcm9wZXJ0eTo6Y3JlYXRlKCkKICAgICAgICAgICAgIC5zZXROYW1lKG5hbWUuY29u
dmVydFRvQVNDSUlMb3dlcmNhc2UoKSkKICAgICAgICAgICAgIC5zZXRWYWx1ZShwcm9wZXJ0eUVu
dHJ5LnZhbHVlKQogICAgICAgICAgICAgLnJlbGVhc2UoKTsKQEAgLTY2OSw3ICs2NzEsOCBAQCBS
ZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4gSW5zcGVjdG9yU3R5bGU6OnN0
eWxlV2l0aFByb3BlcnRpZXMoKSBjbwogICAgICAgICAgICAgU291cmNlUmFuZ2UgYWJzb2x1dGVQ
cm9wZXJ0eVJhbmdlID0gcHJvcGVydHlFbnRyeS5yYW5nZTsKICAgICAgICAgICAgIGFic29sdXRl
UHJvcGVydHlSYW5nZS5zdGFydCArPSBydWxlQm9keVJhbmdlU3RhcnQ7CiAgICAgICAgICAgICBh
YnNvbHV0ZVByb3BlcnR5UmFuZ2UuZW5kICs9IHJ1bGVCb2R5UmFuZ2VTdGFydDsKLSAgICAgICAg
ICAgIHByb3BlcnR5LT5zZXRSYW5nZShidWlsZFNvdXJjZVJhbmdlT2JqZWN0KGFic29sdXRlUHJv
cGVydHlSYW5nZSwgbGluZUVuZGluZ3MpKTsKKyAgICAgICAgICAgIGlmIChhdXRvIHJhbmdlID0g
YnVpbGRTb3VyY2VSYW5nZU9iamVjdChhYnNvbHV0ZVByb3BlcnR5UmFuZ2UsIGxpbmVFbmRpbmdz
KSkKKyAgICAgICAgICAgICAgICBwcm9wZXJ0eS0+c2V0UmFuZ2UocmFuZ2UucmVsZWFzZU5vbk51
bGwoKSk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoIWl0LT5kaXNhYmxlZCkgewpAQCAtNjgz
LDMwICs2ODYsMzUgQEAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+IElu
c3BlY3RvclN0eWxlOjpzdHlsZVdpdGhQcm9wZXJ0aWVzKCkgY28KIAogICAgICAgICAgICAgICAg
IC8vIENhbm9uaWNhbGl6ZSBwcm9wZXJ0eSBuYW1lcyB0byB0cmVhdCBub24tcHJlZml4ZWQgYW5k
IHZlbmRvci1wcmVmaXhlZCBwcm9wZXJ0eSBuYW1lcyB0aGUgc2FtZSAob3BhY2l0eSB2cy4gLXdl
YmtpdC1vcGFjaXR5KS4KICAgICAgICAgICAgICAgICBTdHJpbmcgY2Fub25pY2FsUHJvcGVydHlO
YW1lID0gcHJvcGVydHlJZCA/IGdldFByb3BlcnR5TmFtZVN0cmluZyhwcm9wZXJ0eUlkKSA6IG5h
bWU7Ci0gICAgICAgICAgICAgICAgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpDU1M6OkNTU1Byb3BlcnR5Pj46Oml0ZXJhdG9yIGFjdGl2ZUl0ID0gcHJvcGVydHlO
YW1lVG9QcmV2aW91c0FjdGl2ZVByb3BlcnR5LmZpbmQoY2Fub25pY2FsUHJvcGVydHlOYW1lKTsK
KyAgICAgICAgICAgICAgICBIYXNoTWFwPFN0cmluZywgUmVmUHRyPFByb3RvY29sOjpDU1M6OkNT
U1Byb3BlcnR5Pj46Oml0ZXJhdG9yIGFjdGl2ZUl0ID0gcHJvcGVydHlOYW1lVG9QcmV2aW91c0Fj
dGl2ZVByb3BlcnR5LmZpbmQoY2Fub25pY2FsUHJvcGVydHlOYW1lKTsKICAgICAgICAgICAgICAg
ICBpZiAoYWN0aXZlSXQgIT0gcHJvcGVydHlOYW1lVG9QcmV2aW91c0FjdGl2ZVByb3BlcnR5LmVu
ZCgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0eUVudHJ5LnBhcnNlZE9rKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBib29sIHN1Y2Nlc3NQcmlvcml0eSA9IGFjdGl2ZUl0
LT52YWx1ZS0+Z2V0U3RyaW5nKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUHJvcGVydHk6
OlByaW9yaXR5LCBwcmV2aW91c1ByaW9yaXR5KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJv
b2wgc3VjY2Vzc1N0YXR1cyA9IGFjdGl2ZUl0LT52YWx1ZS0+Z2V0U3RyaW5nKEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkNTUzo6Q1NTUHJvcGVydHk6OlN0YXR1cywgcHJldmlvdXNTdGF0dXMpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Y2Nlc3NTdGF0dXMgJiYgcHJldmlvdXNTdGF0dXMg
IT0gImluYWN0aXZlIikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0
eUVudHJ5LmltcG9ydGFudCB8fCAhc3VjY2Vzc1ByaW9yaXR5KSAvLyBQcmlvcml0eSBub3Qgc2V0
ID09ICJub3QgaW1wb3J0YW50Ii4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hv
dWxkSW5hY3RpdmF0ZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBp
ZiAoc3RhdHVzID09IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUHJvcGVydHlTdGF0dXM6
OkFjdGl2ZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJbmFjdGl2YXRl
IGEgbm9uLWltcG9ydGFudCBwcm9wZXJ0eSBmb2xsb3dpbmcgdGhlIHNhbWUtbmFtZWQgaW1wb3J0
YW50IHByb3BlcnR5LgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSBJ
bnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1Byb3BlcnR5U3RhdHVzOjpJbmFjdGl2ZTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGF1dG8gbmV3UHJpb3JpdHkgPSBhY3RpdmVJdC0+dmFsdWUt
PmdldFN0cmluZyhQcm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0eTo6cHJpb3JpdHlLZXkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCEhbmV3UHJpb3JpdHkpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcHJldmlvdXNQcmlvcml0eSA9IG5ld1ByaW9yaXR5OworCisgICAgICAgICAg
ICAgICAgICAgICAgICBhdXRvIG5ld1N0YXR1cyA9IGFjdGl2ZUl0LT52YWx1ZS0+Z2V0U3RyaW5n
KFByb3RvY29sOjpDU1M6OkNTU1Byb3BlcnR5OjpzdGF0dXNLZXkpOworICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCEhbmV3U3RhdHVzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cHJldmlvdXNTdGF0dXMgPSBuZXdTdGF0dXM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHByZXZpb3VzU3RhdHVzICE9IFByb3RvY29sOjpIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRW
YWx1ZShQcm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0eVN0YXR1czo6SW5hY3RpdmUpKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0eUVudHJ5LmltcG9ydGFudCB8
fCAhIW5ld1ByaW9yaXR5KSAvLyBQcmlvcml0eSBub3Qgc2V0ID09ICJub3QgaW1wb3J0YW50Ii4K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3VsZEluYWN0aXZhdGUgPSB0
cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChzdGF0dXMgPT0g
UHJvdG9jb2w6OkNTUzo6Q1NTUHJvcGVydHlTdGF0dXM6OkFjdGl2ZSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gSW5hY3RpdmF0ZSBhIG5vbi1pbXBvcnRhbnQgcHJv
cGVydHkgZm9sbG93aW5nIHRoZSBzYW1lLW5hbWVkIGltcG9ydGFudCBwcm9wZXJ0eS4KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IFByb3RvY29sOjpDU1M6OkNT
U1Byb3BlcnR5U3RhdHVzOjpJbmFjdGl2ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGJvb2wgcHJldmlvdXNQYXJzZWRPazsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wg
c3VjY2VzcyA9IGFjdGl2ZUl0LT52YWx1ZS0+Z2V0Qm9vbGVhbihJbnNwZWN0b3I6OlByb3RvY29s
OjpDU1M6OkNTU1Byb3BlcnR5OjpQYXJzZWRPaywgcHJldmlvdXNQYXJzZWRPayk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoc3VjY2VzcyAmJiAhcHJldmlvdXNQYXJzZWRPaykKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGF1dG8gcHJldmlvdXNQYXJzZWRPayA9IGFjdGl2ZUl0LT52YWx1
ZS0+Z2V0Qm9vbGVhbihQcm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0eTo6cGFyc2VkT2tLZXkpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByZXZpb3VzUGFyc2VkT2sgJiYgIXByZXZpb3Vz
UGFyc2VkT2spCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvdWxkSW5hY3RpdmF0ZSA9
IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9IGVsc2UKICAg
ICAgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lVG9QcmV2aW91c0FjdGl2ZVByb3BlcnR5LnNl
dChjYW5vbmljYWxQcm9wZXJ0eU5hbWUsIHByb3BlcnR5LmNvcHlSZWYoKSk7CiAKICAgICAgICAg
ICAgICAgICBpZiAoc2hvdWxkSW5hY3RpdmF0ZSkgewotICAgICAgICAgICAgICAgICAgICBhY3Rp
dmVJdC0+dmFsdWUtPnNldFN0YXR1cyhJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1Byb3Bl
cnR5U3RhdHVzOjpJbmFjdGl2ZSk7CisgICAgICAgICAgICAgICAgICAgIGFjdGl2ZUl0LT52YWx1
ZS0+c2V0U3RhdHVzKFByb3RvY29sOjpDU1M6OkNTU1Byb3BlcnR5U3RhdHVzOjpJbmFjdGl2ZSk7
CiAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZVRvUHJldmlvdXNBY3RpdmVQcm9wZXJ0
eS5zZXQoY2Fub25pY2FsUHJvcGVydHlOYW1lLCBwcm9wZXJ0eS5jb3B5UmVmKCkpOwogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSB7CkBAIC03MTQsMTMgKzcyMiwxMyBAQCBS
ZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4gSW5zcGVjdG9yU3R5bGU6OnN0
eWxlV2l0aFByb3BlcnRpZXMoKSBjbwogICAgICAgICAgICAgICAgIC8vIERlZmF1bHQgImltcGxp
Y2l0IiA9PSBmYWxzZS4KICAgICAgICAgICAgICAgICBpZiAoaW1wbGljaXQpCiAgICAgICAgICAg
ICAgICAgICAgIHByb3BlcnR5LT5zZXRJbXBsaWNpdCh0cnVlKTsKLSAgICAgICAgICAgICAgICBz
dGF0dXMgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1Byb3BlcnR5U3RhdHVzOjpTdHls
ZTsKKyAgICAgICAgICAgICAgICBzdGF0dXMgPSBQcm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0eVN0
YXR1czo6U3R5bGU7CiAKICAgICAgICAgICAgICAgICBTdHJpbmcgc2hvcnRoYW5kID0gbV9zdHls
ZS0+Z2V0UHJvcGVydHlTaG9ydGhhbmQobmFtZSk7CiAgICAgICAgICAgICAgICAgaWYgKCFzaG9y
dGhhbmQuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmICghZm91bmRTaG9ydGhh
bmRzLmNvbnRhaW5zKHNob3J0aGFuZCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5k
U2hvcnRoYW5kcy5hZGQoc2hvcnRoYW5kKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8g
ZW50cnkgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlNob3J0aGFuZEVudHJ5OjpjcmVhdGUo
KQorICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBlbnRyeSA9IFByb3RvY29sOjpDU1M6OlNo
b3J0aGFuZEVudHJ5OjpjcmVhdGUoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRO
YW1lKHNob3J0aGFuZCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0VmFsdWUoc2hv
cnRoYW5kVmFsdWUoc2hvcnRoYW5kKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVs
ZWFzZSgpOwpAQCAtNzMxLDExICs3MzksMTEgQEAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNT
Uzo6Q1NTU3R5bGU+IEluc3BlY3RvclN0eWxlOjpzdHlsZVdpdGhQcm9wZXJ0aWVzKCkgY28KICAg
ICAgICAgfQogCiAgICAgICAgIC8vIERlZmF1bHQgInN0YXR1cyIgPT0gInN0eWxlIi4KLSAgICAg
ICAgaWYgKHN0YXR1cyAhPSBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1Byb3BlcnR5U3Rh
dHVzOjpTdHlsZSkKKyAgICAgICAgaWYgKHN0YXR1cyAhPSBQcm90b2NvbDo6Q1NTOjpDU1NQcm9w
ZXJ0eVN0YXR1czo6U3R5bGUpCiAgICAgICAgICAgICBwcm9wZXJ0eS0+c2V0U3RhdHVzKHN0YXR1
cyk7CiAgICAgfQogCi0gICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5
bGU6OmNyZWF0ZSgpCisgICAgcmV0dXJuIFByb3RvY29sOjpDU1M6OkNTU1N0eWxlOjpjcmVhdGUo
KQogICAgICAgICAuc2V0Q3NzUHJvcGVydGllcyhXVEZNb3ZlKHByb3BlcnRpZXNPYmplY3QpKQog
ICAgICAgICAuc2V0U2hvcnRoYW5kRW50cmllcyhXVEZNb3ZlKHNob3J0aGFuZEVudHJpZXMpKQog
ICAgICAgICAucmVsZWFzZSgpOwpAQCAtODA1LDcgKzgxMyw3IEBAIFZlY3RvcjxTdHJpbmc+IElu
c3BlY3RvclN0eWxlOjpsb25naGFuZFByb3BlcnRpZXMoY29uc3QgU3RyaW5nJiBzaG9ydGhhbmRQ
cm9wZXJ0CiAgICAgcmV0dXJuIHByb3BlcnRpZXM7CiB9CiAKLVJlZjxJbnNwZWN0b3JTdHlsZVNo
ZWV0PiBJbnNwZWN0b3JTdHlsZVNoZWV0OjpjcmVhdGUoSW5zcGVjdG9yUGFnZUFnZW50KiBwYWdl
QWdlbnQsIGNvbnN0IFN0cmluZyYgaWQsIFJlZlB0cjxDU1NTdHlsZVNoZWV0PiYmIHBhZ2VTdHls
ZVNoZWV0LCBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW4gb3JpZ2lu
LCBjb25zdCBTdHJpbmcmIGRvY3VtZW50VVJMLCBMaXN0ZW5lciogbGlzdGVuZXIpCitSZWY8SW5z
cGVjdG9yU3R5bGVTaGVldD4gSW5zcGVjdG9yU3R5bGVTaGVldDo6Y3JlYXRlKEluc3BlY3RvclBh
Z2VBZ2VudCogcGFnZUFnZW50LCBjb25zdCBTdHJpbmcmIGlkLCBSZWZQdHI8Q1NTU3R5bGVTaGVl
dD4mJiBwYWdlU3R5bGVTaGVldCwgUHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbiBvcmln
aW4sIGNvbnN0IFN0cmluZyYgZG9jdW1lbnRVUkwsIExpc3RlbmVyKiBsaXN0ZW5lcikKIHsKICAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJbnNwZWN0b3JTdHlsZVNoZWV0KHBhZ2VBZ2VudCwgaWQs
IFdURk1vdmUocGFnZVN0eWxlU2hlZXQpLCBvcmlnaW4sIGRvY3VtZW50VVJMLCBsaXN0ZW5lcikp
OwogfQpAQCAtODE3LDcgKzgyNSw3IEBAIFN0cmluZyBJbnNwZWN0b3JTdHlsZVNoZWV0OjpzdHls
ZVNoZWV0VVJMKENTU1N0eWxlU2hlZXQqIHBhZ2VTdHlsZVNoZWV0KQogICAgIHJldHVybiBlbXB0
eVN0cmluZygpOwogfQogCi1JbnNwZWN0b3JTdHlsZVNoZWV0OjpJbnNwZWN0b3JTdHlsZVNoZWV0
KEluc3BlY3RvclBhZ2VBZ2VudCogcGFnZUFnZW50LCBjb25zdCBTdHJpbmcmIGlkLCBSZWZQdHI8
Q1NTU3R5bGVTaGVldD4mJiBwYWdlU3R5bGVTaGVldCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NT
OjpTdHlsZVNoZWV0T3JpZ2luIG9yaWdpbiwgY29uc3QgU3RyaW5nJiBkb2N1bWVudFVSTCwgTGlz
dGVuZXIqIGxpc3RlbmVyKQorSW5zcGVjdG9yU3R5bGVTaGVldDo6SW5zcGVjdG9yU3R5bGVTaGVl
dChJbnNwZWN0b3JQYWdlQWdlbnQqIHBhZ2VBZ2VudCwgY29uc3QgU3RyaW5nJiBpZCwgUmVmUHRy
PENTU1N0eWxlU2hlZXQ+JiYgcGFnZVN0eWxlU2hlZXQsIFByb3RvY29sOjpDU1M6OlN0eWxlU2hl
ZXRPcmlnaW4gb3JpZ2luLCBjb25zdCBTdHJpbmcmIGRvY3VtZW50VVJMLCBMaXN0ZW5lciogbGlz
dGVuZXIpCiAgICAgOiBtX3BhZ2VBZ2VudChwYWdlQWdlbnQpCiAgICAgLCBtX2lkKGlkKQogICAg
ICwgbV9wYWdlU3R5bGVTaGVldChXVEZNb3ZlKHBhZ2VTdHlsZVNoZWV0KSkKQEAgLTk0Nyw3ICs5
NTUsNyBAQCBFeGNlcHRpb25PcjxDU1NTdHlsZVJ1bGUqPiBJbnNwZWN0b3JTdHlsZVNoZWV0Ojph
ZGRSdWxlKGNvbnN0IFN0cmluZyYgc2VsZWN0b3IpCiAgICAgc2V0VGV4dChzdHlsZVNoZWV0VGV4
dC50b1N0cmluZygpKTsKIAogICAgIC8vIEluc3BlY3RvciBTdHlsZSBTaGVldHMgYXJlIGFsd2F5
cyB0cmVhdGVkIGFzIHRob3VnaCB0aGVpciBwYXJzZWQgZGF0YSBpcyByZWFkeS4KLSAgICBpZiAo
bV9vcmlnaW4gPT0gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luOjpJ
bnNwZWN0b3IpCisgICAgaWYgKG1fb3JpZ2luID09IFByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRP
cmlnaW46Okluc3BlY3RvcikKICAgICAgICAgZmlyZVN0eWxlU2hlZXRDaGFuZ2VkKCk7CiAgICAg
ZWxzZQogICAgICAgICByZXBhcnNlU3R5bGVTaGVldChzdHlsZVNoZWV0VGV4dC50b1N0cmluZygp
KTsKQEAgLTEwMDcsNyArMTAxNSw3IEBAIENTU1N0eWxlUnVsZSogSW5zcGVjdG9yU3R5bGVTaGVl
dDo6cnVsZUZvcklkKGNvbnN0IEluc3BlY3RvckNTU0lkJiBpZCkgY29uc3QKICAgICByZXR1cm4g
aWQub3JkaW5hbCgpID49IG1fZmxhdFJ1bGVzLnNpemUoKSA/IG51bGxwdHIgOiBtX2ZsYXRSdWxl
cy5hdChpZC5vcmRpbmFsKCkpLmdldCgpOwogfQogCi1SZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6Q1NTOjpDU1NTdHlsZVNoZWV0Qm9keT4gSW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGRPYmpl
Y3RGb3JTdHlsZVNoZWV0KCkKK1JlZlB0cjxQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZVNoZWV0Qm9k
eT4gSW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGRPYmplY3RGb3JTdHlsZVNoZWV0KCkKIHsKICAg
ICBDU1NTdHlsZVNoZWV0KiBzdHlsZVNoZWV0ID0gcGFnZVN0eWxlU2hlZXQoKTsKICAgICBpZiAo
IXN0eWxlU2hlZXQpCkBAIC0xMDE1LDcgKzEwMjMsNyBAQCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6Q1NTOjpDU1NTdHlsZVNoZWV0Qm9keT4gSW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGRP
YgogCiAgICAgUmVmUHRyPENTU1J1bGVMaXN0PiBjc3NSdWxlTGlzdCA9IGFzQ1NTUnVsZUxpc3Qo
c3R5bGVTaGVldCk7CiAKLSAgICBhdXRvIHJlc3VsdCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNT
Uzo6Q1NTU3R5bGVTaGVldEJvZHk6OmNyZWF0ZSgpCisgICAgYXV0byByZXN1bHQgPSBQcm90b2Nv
bDo6Q1NTOjpDU1NTdHlsZVNoZWV0Qm9keTo6Y3JlYXRlKCkKICAgICAgICAgLnNldFN0eWxlU2hl
ZXRJZChpZCgpKQogICAgICAgICAuc2V0UnVsZXMoYnVpbGRBcnJheUZvclJ1bGVMaXN0KGNzc1J1
bGVMaXN0LmdldCgpKSkKICAgICAgICAgLnJlbGVhc2UoKTsKQEAgLTEwMjcsNyArMTAzNSw3IEBA
IFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlU2hlZXRCb2R5PiBJbnNw
ZWN0b3JTdHlsZVNoZWV0OjpidWlsZE9iCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGVTaGVldEhlYWRlcj4gSW5zcGVjdG9y
U3R5bGVTaGVldDo6YnVpbGRPYmplY3RGb3JTdHlsZVNoZWV0SW5mbygpCitSZWZQdHI8UHJvdG9j
b2w6OkNTUzo6Q1NTU3R5bGVTaGVldEhlYWRlcj4gSW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGRP
YmplY3RGb3JTdHlsZVNoZWV0SW5mbygpCiB7CiAgICAgQ1NTU3R5bGVTaGVldCogc3R5bGVTaGVl
dCA9IHBhZ2VTdHlsZVNoZWV0KCk7CiAgICAgaWYgKCFzdHlsZVNoZWV0KQpAQCAtMTAzNSw3ICsx
MDQzLDcgQEAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGVTaGVldEhl
YWRlcj4gSW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGQKIAogICAgIERvY3VtZW50KiBkb2N1bWVu
dCA9IHN0eWxlU2hlZXQtPm93bmVyRG9jdW1lbnQoKTsKICAgICBGcmFtZSogZnJhbWUgPSBkb2N1
bWVudCA/IGRvY3VtZW50LT5mcmFtZSgpIDogbnVsbHB0cjsKLSAgICByZXR1cm4gSW5zcGVjdG9y
OjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZVNoZWV0SGVhZGVyOjpjcmVhdGUoKQorICAgIHJldHVy
biBQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZVNoZWV0SGVhZGVyOjpjcmVhdGUoKQogICAgICAgICAu
c2V0U3R5bGVTaGVldElkKGlkKCkpCiAgICAgICAgIC5zZXRPcmlnaW4obV9vcmlnaW4pCiAgICAg
ICAgIC5zZXREaXNhYmxlZChzdHlsZVNoZWV0LT5kaXNhYmxlZCgpKQpAQCAtMTA0OCw5ICsxMDU2
LDkgQEAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGVTaGVldEhlYWRl
cj4gSW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGQKICAgICAgICAgLnJlbGVhc2UoKTsKIH0KIAot
c3RhdGljIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1NlbGVjdG9yPiBidWlsZE9i
amVjdEZvclNlbGVjdG9ySGVscGVyKGNvbnN0IFN0cmluZyYgc2VsZWN0b3JUZXh0LCBjb25zdCBD
U1NTZWxlY3RvciYgc2VsZWN0b3IpCitzdGF0aWMgUmVmPFByb3RvY29sOjpDU1M6OkNTU1NlbGVj
dG9yPiBidWlsZE9iamVjdEZvclNlbGVjdG9ySGVscGVyKGNvbnN0IFN0cmluZyYgc2VsZWN0b3JU
ZXh0LCBjb25zdCBDU1NTZWxlY3RvciYgc2VsZWN0b3IpCiB7Ci0gICAgYXV0byBpbnNwZWN0b3JT
ZWxlY3RvciA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU2VsZWN0b3I6OmNyZWF0ZSgp
CisgICAgYXV0byBpbnNwZWN0b3JTZWxlY3RvciA9IFByb3RvY29sOjpDU1M6OkNTU1NlbGVjdG9y
OjpjcmVhdGUoKQogICAgICAgICAuc2V0VGV4dChzZWxlY3RvclRleHQpCiAgICAgICAgIC5yZWxl
YXNlKCk7CiAKQEAgLTEwNjUsMTEgKzEwNzMsMTEgQEAgc3RhdGljIFJlZjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpDU1M6OkNTU1NlbGVjdG9yPiBidWlsZE9iamVjdEZvclNlbGVjdG9ySGVscGVyKGMK
ICAgICByZXR1cm4gaW5zcGVjdG9yU2VsZWN0b3I7CiB9CiAKLXN0YXRpYyBSZWY8SlNPTjo6QXJy
YXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1NlbGVjdG9yPj4gc2VsZWN0b3JzRnJv
bVNvdXJjZShjb25zdCBDU1NSdWxlU291cmNlRGF0YSogc291cmNlRGF0YSwgY29uc3QgU3RyaW5n
JiBzaGVldFRleHQsIGNvbnN0IENTU1NlbGVjdG9yTGlzdCYgc2VsZWN0b3JMaXN0KQorc3RhdGlj
IFJlZjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpDU1M6OkNTU1NlbGVjdG9yPj4gc2VsZWN0b3Jz
RnJvbVNvdXJjZShjb25zdCBDU1NSdWxlU291cmNlRGF0YSogc291cmNlRGF0YSwgY29uc3QgU3Ry
aW5nJiBzaGVldFRleHQsIGNvbnN0IENTU1NlbGVjdG9yTGlzdCYgc2VsZWN0b3JMaXN0KQogewog
ICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxKU0M6OllhcnI6OlJlZ3VsYXJFeHByZXNzaW9uPiBj
b21tZW50KCIvXFwqW15dKj9cXCovIiwgSlNDOjpZYXJyOjpUZXh0Q2FzZVNlbnNpdGl2ZSwgSlND
OjpZYXJyOjpNdWx0aWxpbmVFbmFibGVkKTsKIAotICAgIGF1dG8gcmVzdWx0ID0gSlNPTjo6QXJy
YXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1NlbGVjdG9yPjo6Y3JlYXRlKCk7Cisg
ICAgYXV0byByZXN1bHQgPSBKU09OOjpBcnJheU9mPFByb3RvY29sOjpDU1M6OkNTU1NlbGVjdG9y
Pjo6Y3JlYXRlKCk7CiAgICAgY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yID0gc2VsZWN0b3JM
aXN0LmZpcnN0KCk7CiAgICAgZm9yIChhdXRvJiByYW5nZSA6IHNvdXJjZURhdGEtPnNlbGVjdG9y
UmFuZ2VzKSB7CiAgICAgICAgIC8vIElmIHdlIGRvbid0IGhhdmUgYSBzZWxlY3RvciwgdGhhdCBt
ZWFucyB0aGUgU291cmNlRGF0YSBmb3IgdGhpcyBDU1NTdHlsZVNoZWV0CkBAIC0xMDg5LDE3ICsx
MDk3LDE3IEBAIHN0YXRpYyBSZWY8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpD
U1M6OkNTU1NlbGVjdG9yPj4gc2VsZWN0b3JzRnJvbVNvCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAotUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU2VsZWN0b3I+IEluc3BlY3RvclN0
eWxlU2hlZXQ6OmJ1aWxkT2JqZWN0Rm9yU2VsZWN0b3IoY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVj
dG9yKQorUmVmPFByb3RvY29sOjpDU1M6OkNTU1NlbGVjdG9yPiBJbnNwZWN0b3JTdHlsZVNoZWV0
OjpidWlsZE9iamVjdEZvclNlbGVjdG9yKGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvcikKIHsK
ICAgICByZXR1cm4gYnVpbGRPYmplY3RGb3JTZWxlY3RvckhlbHBlcihzZWxlY3Rvci0+c2VsZWN0
b3JUZXh0KCksICpzZWxlY3Rvcik7CiB9CiAKLVJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6
OlNlbGVjdG9yTGlzdD4gSW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGRPYmplY3RGb3JTZWxlY3Rv
ckxpc3QoQ1NTU3R5bGVSdWxlKiBydWxlLCBpbnQmIGVuZGluZ0xpbmUpCitSZWY8UHJvdG9jb2w6
OkNTUzo6U2VsZWN0b3JMaXN0PiBJbnNwZWN0b3JTdHlsZVNoZWV0OjpidWlsZE9iamVjdEZvclNl
bGVjdG9yTGlzdChDU1NTdHlsZVJ1bGUqIHJ1bGUsIGludCYgZW5kaW5nTGluZSkKIHsKICAgICBS
ZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+IHNvdXJjZURhdGE7CiAgICAgaWYgKGVuc3VyZVBhcnNl
ZERhdGFSZWFkeSgpKQogICAgICAgICBzb3VyY2VEYXRhID0gcnVsZVNvdXJjZURhdGFGb3IoJnJ1
bGUtPnN0eWxlKCkpOwotICAgIFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkNTUzo6Q1NTU2VsZWN0b3I+PiBzZWxlY3RvcnM7CisgICAgUmVmUHRyPEpTT046OkFycmF5
T2Y8UHJvdG9jb2w6OkNTUzo6Q1NTU2VsZWN0b3I+PiBzZWxlY3RvcnM7CiAKICAgICAvLyBUaGlz
IGludGVudGlvbmFsbHkgZG9lcyBub3QgcmVseSBvbiB0aGUgc291cmNlIGRhdGEgdG8gYXZvaWQg
Y2F0Y2hpbmcgdGhlIHRyYWlsaW5nIGNvbW1lbnRzIChiZWZvcmUgdGhlIGRlY2xhcmF0aW9uIHN0
YXJ0aW5nICd7JykuCiAgICAgU3RyaW5nIHNlbGVjdG9yVGV4dCA9IHJ1bGUtPnNlbGVjdG9yVGV4
dCgpOwpAQCAtMTEwNyw0MSArMTExNSw0MiBAQCBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NT
OjpTZWxlY3Rvckxpc3Q+IEluc3BlY3RvclN0eWxlU2hlZXQ6OmJ1aWxkT2JqZWN0Rm9yUwogICAg
IGlmIChzb3VyY2VEYXRhKQogICAgICAgICBzZWxlY3RvcnMgPSBzZWxlY3RvcnNGcm9tU291cmNl
KHNvdXJjZURhdGEuZ2V0KCksIG1fcGFyc2VkU3R5bGVTaGVldC0+dGV4dCgpLCBydWxlLT5zdHls
ZVJ1bGUoKS5zZWxlY3Rvckxpc3QoKSk7CiAgICAgZWxzZSB7Ci0gICAgICAgIHNlbGVjdG9ycyA9
IEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTZWxlY3Rvcj46OmNy
ZWF0ZSgpOworICAgICAgICBzZWxlY3RvcnMgPSBKU09OOjpBcnJheU9mPFByb3RvY29sOjpDU1M6
OkNTU1NlbGVjdG9yPjo6Y3JlYXRlKCk7CiAgICAgICAgIGNvbnN0IENTU1NlbGVjdG9yTGlzdCYg
c2VsZWN0b3JMaXN0ID0gcnVsZS0+c3R5bGVSdWxlKCkuc2VsZWN0b3JMaXN0KCk7CiAgICAgICAg
IGZvciAoY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yID0gc2VsZWN0b3JMaXN0LmZpcnN0KCk7
IHNlbGVjdG9yOyBzZWxlY3RvciA9IENTU1NlbGVjdG9yTGlzdDo6bmV4dChzZWxlY3RvcikpCiAg
ICAgICAgICAgICBzZWxlY3RvcnMtPmFkZEl0ZW0oYnVpbGRPYmplY3RGb3JTZWxlY3RvcihzZWxl
Y3RvcikpOwogICAgIH0KLSAgICBhdXRvIHJlc3VsdCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNT
Uzo6U2VsZWN0b3JMaXN0OjpjcmVhdGUoKQotICAgICAgICAuc2V0U2VsZWN0b3JzKFdURk1vdmUo
c2VsZWN0b3JzKSkKKyAgICBhdXRvIHJlc3VsdCA9IFByb3RvY29sOjpDU1M6OlNlbGVjdG9yTGlz
dDo6Y3JlYXRlKCkKKyAgICAgICAgLnNldFNlbGVjdG9ycyhzZWxlY3RvcnMucmVsZWFzZU5vbk51
bGwoKSkKICAgICAgICAgLnNldFRleHQoc2VsZWN0b3JUZXh0KQogICAgICAgICAucmVsZWFzZSgp
OwotICAgIGlmIChzb3VyY2VEYXRhKQotICAgICAgICByZXN1bHQtPnNldFJhbmdlKGJ1aWxkU291
cmNlUmFuZ2VPYmplY3Qoc291cmNlRGF0YS0+cnVsZUhlYWRlclJhbmdlLCBsaW5lRW5kaW5ncygp
LCAmZW5kaW5nTGluZSkpOworICAgIGlmIChzb3VyY2VEYXRhKSB7CisgICAgICAgIGlmIChhdXRv
IHJhbmdlID0gYnVpbGRTb3VyY2VSYW5nZU9iamVjdChzb3VyY2VEYXRhLT5ydWxlSGVhZGVyUmFu
Z2UsIGxpbmVFbmRpbmdzKCksICZlbmRpbmdMaW5lKSkKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0
UmFuZ2UocmFuZ2UucmVsZWFzZU5vbk51bGwoKSk7CisgICAgfQogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKLVJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1J1bGU+IEluc3BlY3Rv
clN0eWxlU2hlZXQ6OmJ1aWxkT2JqZWN0Rm9yUnVsZShDU1NTdHlsZVJ1bGUqIHJ1bGUpCitSZWZQ
dHI8UHJvdG9jb2w6OkNTUzo6Q1NTUnVsZT4gSW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGRPYmpl
Y3RGb3JSdWxlKENTU1N0eWxlUnVsZSogcnVsZSkKIHsKICAgICBDU1NTdHlsZVNoZWV0KiBzdHls
ZVNoZWV0ID0gcGFnZVN0eWxlU2hlZXQoKTsKICAgICBpZiAoIXN0eWxlU2hlZXQpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwogCiAgICAgaW50IGVuZGluZ0xpbmUgPSAwOwotICAgIGF1dG8gcmVz
dWx0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NSdWxlOjpjcmVhdGUoKQorICAgIGF1
dG8gcmVzdWx0ID0gUHJvdG9jb2w6OkNTUzo6Q1NTUnVsZTo6Y3JlYXRlKCkKICAgICAgICAgLnNl
dFNlbGVjdG9yTGlzdChidWlsZE9iamVjdEZvclNlbGVjdG9yTGlzdChydWxlLCBlbmRpbmdMaW5l
KSkKICAgICAgICAgLnNldFNvdXJjZUxpbmUoZW5kaW5nTGluZSkKICAgICAgICAgLnNldE9yaWdp
bihtX29yaWdpbikKICAgICAgICAgLnNldFN0eWxlKGJ1aWxkT2JqZWN0Rm9yU3R5bGUoJnJ1bGUt
PnN0eWxlKCkpKQogICAgICAgICAucmVsZWFzZSgpOwogCi0gICAgaWYgKG1fb3JpZ2luID09IElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6QXV0aG9yIHx8IG1fb3Jp
Z2luID09IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6VXNlcikK
KyAgICBpZiAobV9vcmlnaW4gPT0gUHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6QXV0
aG9yIHx8IG1fb3JpZ2luID09IFByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW46OlVzZXIp
CiAgICAgICAgIHJlc3VsdC0+c2V0U291cmNlVVJMKGZpbmFsVVJMKCkpOwogCiAgICAgaWYgKGNh
bkJpbmQoKSkgewotICAgICAgICBJbnNwZWN0b3JDU1NJZCBpZChydWxlSWQocnVsZSkpOwotICAg
ICAgICBpZiAoIWlkLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0UnVsZUlkKGlk
LmFzUHJvdG9jb2xWYWx1ZTxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1J1bGVJZD4oKSk7
CisgICAgICAgIGlmIChhdXRvIHJ1bGVJZCA9IHRoaXMtPnJ1bGVJZChydWxlKS5hc1Byb3RvY29s
VmFsdWU8UHJvdG9jb2w6OkNTUzo6Q1NTUnVsZUlkPigpKQorICAgICAgICAgICAgcmVzdWx0LT5z
ZXRSdWxlSWQocnVsZUlkLnJlbGVhc2VOb25OdWxsKCkpOwogICAgIH0KIAogICAgIGF1dG8gZ3Jv
dXBpbmdzUGF5bG9hZCA9IGJ1aWxkQXJyYXlGb3JHcm91cGluZ3MoKnJ1bGUpOwpAQCAtMTE1MSw3
ICsxMTYwLDcgQEAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUnVsZT4gSW5z
cGVjdG9yU3R5bGVTaGVldDo6YnVpbGRPYmplY3RGb3JSdWwKICAgICByZXR1cm4gcmVzdWx0Owog
fQogCi1SZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4gSW5zcGVjdG9y
U3R5bGVTaGVldDo6YnVpbGRPYmplY3RGb3JTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHls
ZSkKK1JlZjxQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4gSW5zcGVjdG9yU3R5bGVTaGVldDo6YnVp
bGRPYmplY3RGb3JTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSkKIHsKICAgICBSZWZQ
dHI8Q1NTUnVsZVNvdXJjZURhdGE+IHNvdXJjZURhdGE7CiAgICAgaWYgKGVuc3VyZVBhcnNlZERh
dGFSZWFkeSgpKQpAQCAtMTE1OSwxMyArMTE2OCwxNSBAQCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6Q1NTOjpDU1NTdHlsZT4gSW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGRPYmplY3RGb3JT
dAogCiAgICAgSW5zcGVjdG9yQ1NTSWQgaWQgPSBydWxlT3JTdHlsZUlkKHN0eWxlKTsKICAgICBp
ZiAoaWQuaXNFbXB0eSgpKSB7Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpD
U1M6OkNTU1N0eWxlOjpjcmVhdGUoKQotICAgICAgICAgICAgLnNldENzc1Byb3BlcnRpZXMoQXJy
YXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1Byb3BlcnR5Pjo6Y3JlYXRlKCkpCi0g
ICAgICAgICAgICAuc2V0U2hvcnRoYW5kRW50cmllcyhBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkNTUzo6U2hvcnRoYW5kRW50cnk+OjpjcmVhdGUoKSkKKyAgICAgICAgcmV0dXJuIFByb3Rv
Y29sOjpDU1M6OkNTU1N0eWxlOjpjcmVhdGUoKQorICAgICAgICAgICAgLnNldENzc1Byb3BlcnRp
ZXMoQXJyYXlPZjxQcm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0eT46OmNyZWF0ZSgpKQorICAgICAg
ICAgICAgLnNldFNob3J0aGFuZEVudHJpZXMoQXJyYXlPZjxQcm90b2NvbDo6Q1NTOjpTaG9ydGhh
bmRFbnRyeT46OmNyZWF0ZSgpKQogICAgICAgICAgICAgLnJlbGVhc2UoKTsKICAgICB9CisKICAg
ICBSZWZQdHI8SW5zcGVjdG9yU3R5bGU+IGluc3BlY3RvclN0eWxlID0gaW5zcGVjdG9yU3R5bGVG
b3JJZChpZCk7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+
IHJlc3VsdCA9IGluc3BlY3RvclN0eWxlLT5idWlsZE9iamVjdEZvclN0eWxlKCk7CisKKyAgICBh
dXRvIHJlc3VsdCA9IGluc3BlY3RvclN0eWxlLT5idWlsZE9iamVjdEZvclN0eWxlKCk7CiAKICAg
ICAvLyBTdHlsZSB0ZXh0IGNhbm5vdCBiZSByZXRyaWV2ZWQgd2l0aG91dCBzdHlsZXNoZWV0LCBz
byBzZXQgY3NzVGV4dCBoZXJlLgogICAgIGlmIChzb3VyY2VEYXRhKSB7CkBAIC0xMjc0LDcgKzEy
ODUsNyBAQCBib29sIEluc3BlY3RvclN0eWxlU2hlZXQ6OnN0eWxlU2hlZXRNdXRhdGVkKCkgY29u
c3QKIAogYm9vbCBJbnNwZWN0b3JTdHlsZVNoZWV0OjplbnN1cmVQYXJzZWREYXRhUmVhZHkoKQog
ewotICAgIGJvb2wgYWxsb3dQYXJzZWREYXRhID0gbV9vcmlnaW4gPT0gSW5zcGVjdG9yOjpQcm90
b2NvbDo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luOjpJbnNwZWN0b3IgfHwgIXN0eWxlU2hlZXRNdXRh
dGVkKCk7CisgICAgYm9vbCBhbGxvd1BhcnNlZERhdGEgPSBtX29yaWdpbiA9PSBQcm90b2NvbDo6
Q1NTOjpTdHlsZVNoZWV0T3JpZ2luOjpJbnNwZWN0b3IgfHwgIXN0eWxlU2hlZXRNdXRhdGVkKCk7
CiAgICAgcmV0dXJuIGFsbG93UGFyc2VkRGF0YSAmJiBlbnN1cmVUZXh0KCkgJiYgZW5zdXJlU291
cmNlRGF0YSgpOwogfQogCkBAIC0xMzcxLDcgKzEzODIsNyBAQCBJbnNwZWN0b3JDU1NJZCBJbnNw
ZWN0b3JTdHlsZVNoZWV0OjpydWxlSWQoQ1NTU3R5bGVSdWxlKiBydWxlKSBjb25zdAogCiBib29s
IEluc3BlY3RvclN0eWxlU2hlZXQ6Om9yaWdpbmFsU3R5bGVTaGVldFRleHQoU3RyaW5nKiByZXN1
bHQpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX3BhZ2VTdHlsZVNoZWV0IHx8IG1fb3JpZ2luID09IElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6VXNlckFnZW50KQorICAg
IGlmICghbV9wYWdlU3R5bGVTaGVldCB8fCBtX29yaWdpbiA9PSBQcm90b2NvbDo6Q1NTOjpTdHls
ZVNoZWV0T3JpZ2luOjpVc2VyQWdlbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1
cm4gaW5saW5lU3R5bGVTaGVldFRleHQocmVzdWx0KSB8fCByZXNvdXJjZVN0eWxlU2hlZXRUZXh0
KHJlc3VsdCkgfHwgZXh0ZW5zaW9uU3R5bGVTaGVldFRleHQocmVzdWx0KTsKIH0KQEAgLTE0MTQs
OSArMTQyNSw5IEBAIGJvb2wgSW5zcGVjdG9yU3R5bGVTaGVldDo6ZXh0ZW5zaW9uU3R5bGVTaGVl
dFRleHQoU3RyaW5nKiByZXN1bHQpIGNvbnN0CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLVJlZjxK
U09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUnVsZT4+IEluc3BlY3Rv
clN0eWxlU2hlZXQ6OmJ1aWxkQXJyYXlGb3JSdWxlTGlzdChDU1NSdWxlTGlzdCogcnVsZUxpc3Qp
CitSZWY8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6Q1NTOjpDU1NSdWxlPj4gSW5zcGVjdG9yU3R5
bGVTaGVldDo6YnVpbGRBcnJheUZvclJ1bGVMaXN0KENTU1J1bGVMaXN0KiBydWxlTGlzdCkKIHsK
LSAgICBhdXRvIHJlc3VsdCA9IEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NT
OjpDU1NSdWxlPjo6Y3JlYXRlKCk7CisgICAgYXV0byByZXN1bHQgPSBKU09OOjpBcnJheU9mPFBy
b3RvY29sOjpDU1M6OkNTU1J1bGU+OjpjcmVhdGUoKTsKICAgICBpZiAoIXJ1bGVMaXN0KQogICAg
ICAgICByZXR1cm4gcmVzdWx0OwogCkBAIC0xNDI0LDggKzE0MzUsMTAgQEAgUmVmPEpTT046OkFy
cmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NSdWxlPj4gSW5zcGVjdG9yU3R5bGVT
aGVldDo6YnVpbGQKICAgICBDU1NTdHlsZVJ1bGVWZWN0b3IgcnVsZXM7CiAgICAgY29sbGVjdEZs
YXRSdWxlcyhXVEZNb3ZlKHJlZlJ1bGVMaXN0KSwgJnJ1bGVzKTsKIAotICAgIGZvciAoYXV0byYg
cnVsZSA6IHJ1bGVzKQotICAgICAgICByZXN1bHQtPmFkZEl0ZW0oYnVpbGRPYmplY3RGb3JSdWxl
KHJ1bGUuZ2V0KCkpKTsKKyAgICBmb3IgKGF1dG8mIHJ1bGUgOiBydWxlcykgeworICAgICAgICBp
ZiAoYXV0byBydWxlT2JqZWN0ID0gYnVpbGRPYmplY3RGb3JSdWxlKHJ1bGUuZ2V0KCkpKQorICAg
ICAgICAgICAgcmVzdWx0LT5hZGRJdGVtKHJ1bGVPYmplY3QucmVsZWFzZU5vbk51bGwoKSk7Cisg
ICAgfQogCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTE0NDgsMTIgKzE0NjEsMTIgQEAgdm9p
ZCBJbnNwZWN0b3JTdHlsZVNoZWV0Ojpjb2xsZWN0RmxhdFJ1bGVzKFJlZlB0cjxDU1NSdWxlTGlz
dD4mJiBydWxlTGlzdCwgQ1NTU3QKICAgICB9CiB9CiAKLVJlZjxJbnNwZWN0b3JTdHlsZVNoZWV0
Rm9ySW5saW5lU3R5bGU+IEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZTo6Y3JlYXRl
KEluc3BlY3RvclBhZ2VBZ2VudCogcGFnZUFnZW50LCBjb25zdCBTdHJpbmcmIGlkLCBSZWY8U3R5
bGVkRWxlbWVudD4mJiBlbGVtZW50LCBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlN0eWxlU2hl
ZXRPcmlnaW4gb3JpZ2luLCBMaXN0ZW5lciogbGlzdGVuZXIpCitSZWY8SW5zcGVjdG9yU3R5bGVT
aGVldEZvcklubGluZVN0eWxlPiBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU6OmNy
ZWF0ZShJbnNwZWN0b3JQYWdlQWdlbnQqIHBhZ2VBZ2VudCwgY29uc3QgU3RyaW5nJiBpZCwgUmVm
PFN0eWxlZEVsZW1lbnQ+JiYgZWxlbWVudCwgUHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdp
biBvcmlnaW4sIExpc3RlbmVyKiBsaXN0ZW5lcikKIHsKICAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGUocGFnZUFnZW50LCBpZCwgV1RGTW92
ZShlbGVtZW50KSwgb3JpZ2luLCBsaXN0ZW5lcikpOwogfQogCi1JbnNwZWN0b3JTdHlsZVNoZWV0
Rm9ySW5saW5lU3R5bGU6Okluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZShJbnNwZWN0
b3JQYWdlQWdlbnQqIHBhZ2VBZ2VudCwgY29uc3QgU3RyaW5nJiBpZCwgUmVmPFN0eWxlZEVsZW1l
bnQ+JiYgZWxlbWVudCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2lu
IG9yaWdpbiwgTGlzdGVuZXIqIGxpc3RlbmVyKQorSW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGlu
ZVN0eWxlOjpJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGUoSW5zcGVjdG9yUGFnZUFn
ZW50KiBwYWdlQWdlbnQsIGNvbnN0IFN0cmluZyYgaWQsIFJlZjxTdHlsZWRFbGVtZW50PiYmIGVs
ZW1lbnQsIFByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW4gb3JpZ2luLCBMaXN0ZW5lciog
bGlzdGVuZXIpCiAgICAgOiBJbnNwZWN0b3JTdHlsZVNoZWV0KHBhZ2VBZ2VudCwgaWQsIG51bGxw
dHIsIG9yaWdpbiwgU3RyaW5nKCksIGxpc3RlbmVyKQogICAgICwgbV9lbGVtZW50KFdURk1vdmUo
ZWxlbWVudCkpCiAgICAgLCBtX3J1bGVTb3VyY2VEYXRhKG51bGxwdHIpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5oIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuaAppbmRleCA3M2QzNjE4ZTVhNDhh
Mzc0NTc2MjZkZDU0OGRjZTdlMzZiMWRlMTM1Li43OGYxNGQyOTE2YmFhNWMzN2UwMTA5MzkyZjIx
ZWY2NmE2NTVmNzZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yU3R5bGVTaGVldC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JT
dHlsZVNoZWV0LmgKQEAgLTQ1LDE4ICs0NSwxOSBAQCBjbGFzcyBFbGVtZW50OwogY2xhc3MgSW5z
cGVjdG9yUGFnZUFnZW50OwogY2xhc3MgSW5zcGVjdG9yU3R5bGVTaGVldDsKIAotdHlwZWRlZiBT
dHJpbmcgRXJyb3JTdHJpbmc7Ci0KIGNsYXNzIEluc3BlY3RvckNTU0lkIHsKIHB1YmxpYzoKICAg
ICBJbnNwZWN0b3JDU1NJZCgpID0gZGVmYXVsdDsKIAogICAgIGV4cGxpY2l0IEluc3BlY3RvckNT
U0lkKGNvbnN0IEpTT046Ok9iamVjdCYgdmFsdWUpCiAgICAgewotICAgICAgICBpZiAoIXZhbHVl
LmdldFN0cmluZygic3R5bGVTaGVldElkIl9zLCBtX3N0eWxlU2hlZXRJZCkpCisgICAgICAgIG1f
c3R5bGVTaGVldElkID0gdmFsdWUuZ2V0U3RyaW5nKCJzdHlsZVNoZWV0SWQiX3MpOworICAgICAg
ICBpZiAoIW1fc3R5bGVTaGVldElkKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIGlm
ICghdmFsdWUuZ2V0SW50ZWdlcigib3JkaW5hbCJfcywgbV9vcmRpbmFsKSkKKyAgICAgICAgaWYg
KGF1dG8gb3JkaW5hbCA9IHZhbHVlLmdldEludGVnZXIoIm9yZGluYWwiX3MpKQorICAgICAgICAg
ICAgbV9vcmRpbmFsID0gKm9yZGluYWw7CisgICAgICAgIGVsc2UKICAgICAgICAgICAgIG1fc3R5
bGVTaGVldElkID0gU3RyaW5nKCk7CiAgICAgfQogCkBAIC0xMjYsNyArMTI3LDcgQEAgcHVibGlj
OgogICAgIH5JbnNwZWN0b3JTdHlsZSgpOwogCiAgICAgQ1NTU3R5bGVEZWNsYXJhdGlvbiYgY3Nz
U3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0eWxlLmdldCgpOyB9Ci0gICAgUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+IGJ1aWxkT2JqZWN0Rm9yU3R5bGUoKSBjb25z
dDsKKyAgICBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4gYnVpbGRPYmpl
Y3RGb3JTdHlsZSgpIGNvbnN0OwogICAgIFJlZjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkNTUzo6Q1NTQ29tcHV0ZWRTdHlsZVByb3BlcnR5Pj4gYnVpbGRBcnJheUZvckNvbXB1
dGVkU3R5bGUoKSBjb25zdDsKIAogICAgIEV4Y2VwdGlvbk9yPFN0cmluZz4gdGV4dCgpIGNvbnN0
OwpAQCAtMTc1LDcgKzE3Niw3IEBAIHB1YmxpYzoKICAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6Q1NTOjpDU1NTdHlsZVNoZWV0Qm9keT4gYnVpbGRPYmplY3RGb3JTdHlsZVNoZWV0KCk7
CiAgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGVTaGVldEhlYWRl
cj4gYnVpbGRPYmplY3RGb3JTdHlsZVNoZWV0SW5mbygpOwogICAgIFJlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpDU1M6OkNTU1J1bGU+IGJ1aWxkT2JqZWN0Rm9yUnVsZShDU1NTdHlsZVJ1bGUq
KTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4gYnVpbGRP
YmplY3RGb3JTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKik7CisgICAgUmVmPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+IGJ1aWxkT2JqZWN0Rm9yU3R5bGUoQ1NTU3R5bGVEZWNs
YXJhdGlvbiopOwogICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IHNldFN0eWxlVGV4dChjb25zdCBJbnNw
ZWN0b3JDU1NJZCYsIGNvbnN0IFN0cmluZyYgdGV4dCwgU3RyaW5nKiBvbGRUZXh0KTsKIAogICAg
IHZpcnR1YWwgRXhjZXB0aW9uT3I8U3RyaW5nPiB0ZXh0KCkgY29uc3Q7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvVGltZWxpbmVSZWNvcmRGYWN0b3J5LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9UaW1lbGluZVJlY29yZEZhY3RvcnkuY3BwCmluZGV4IDM2M2Qx
NjhlODA1ZWEzZjg3ZDdiYzlkODI5ZDQ2ZGU2Y2JmNTJhYWUuLmEwNzAzMzZiNzU2MWRhODVlY2I1
ZmZmNGMxNGI2MWJmZjM5NjIxMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9UaW1lbGluZVJlY29yZEZhY3RvcnkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9UaW1lbGluZVJlY29yZEZhY3RvcnkuY3BwCkBAIC0xNjEsOSArMTYxLDkgQEAgUmVmPEpTT046
Ok9iamVjdD4gVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVQYWludERhdGEoY29uc3QgRmxv
YXRRdWFkJiBxdWFkKQogICAgIHJldHVybiBkYXRhOwogfQogCi12b2lkIFRpbWVsaW5lUmVjb3Jk
RmFjdG9yeTo6YXBwZW5kTGF5b3V0Um9vdChKU09OOjpPYmplY3QqIGRhdGEsIGNvbnN0IEZsb2F0
UXVhZCYgcXVhZCkKK3ZvaWQgVGltZWxpbmVSZWNvcmRGYWN0b3J5OjphcHBlbmRMYXlvdXRSb290
KEpTT046Ok9iamVjdCYgZGF0YSwgY29uc3QgRmxvYXRRdWFkJiBxdWFkKQogewotICAgIGRhdGEt
PnNldEFycmF5KCJyb290Il9zLCBjcmVhdGVRdWFkKHF1YWQpKTsKKyAgICBkYXRhLnNldEFycmF5
KCJyb290Il9zLCBjcmVhdGVRdWFkKHF1YWQpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1RpbWVsaW5lUmVjb3JkRmFj
dG9yeS5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1RpbWVsaW5lUmVjb3JkRmFjdG9yeS5o
CmluZGV4IDQ4ZjQzMGU5YmVkOTNkMWFmZDJiYTM2ZTU5NTdlN2VmMDYxOGIzYWEuLmNhNWRiNDEw
ODk4ZGI5M2NkMGEzNWMyNjI3OTA5YzFkNDllMWMyNjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9UaW1lbGluZVJlY29yZEZhY3RvcnkuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvVGltZWxpbmVSZWNvcmRGYWN0b3J5LmgKQEAgLTU5LDcgKzU5LDcgQEAgcHVi
bGljOgogICAgIHN0YXRpYyBSZWY8SlNPTjo6T2JqZWN0PiBjcmVhdGVPYnNlcnZlckNhbGxiYWNr
RGF0YShjb25zdCBTdHJpbmcmIGNhbGxiYWNrVHlwZSk7CiAgICAgc3RhdGljIFJlZjxKU09OOjpP
YmplY3Q+IGNyZWF0ZVBhaW50RGF0YShjb25zdCBGbG9hdFF1YWQmKTsKIAotICAgIHN0YXRpYyB2
b2lkIGFwcGVuZExheW91dFJvb3QoSlNPTjo6T2JqZWN0KiBkYXRhLCBjb25zdCBGbG9hdFF1YWQm
KTsKKyAgICBzdGF0aWMgdm9pZCBhcHBlbmRMYXlvdXRSb290KEpTT046Ok9iamVjdCYgZGF0YSwg
Y29uc3QgRmxvYXRRdWFkJik7CiAKIHByaXZhdGU6CiAgICAgVGltZWxpbmVSZWNvcmRGYWN0b3J5
KCkgeyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3Bl
Y3RvckFuaW1hdGlvbkFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9yQW5pbWF0aW9uQWdlbnQuY3BwCmluZGV4IDcxMzI1ZjUyMmQzYTEyM2E1MzRmYzdm
ZjNhNTg0YjU4YmM5NGY5MzYuLjAyNTcxMmIwOTQ2NGVjNmIxNTQ3ZWNmNzA2NmUyMGJkZmFiZjQx
Y2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9y
QW5pbWF0aW9uQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9yQW5pbWF0aW9uQWdlbnQuY3BwCkBAIC03Miw0NSArNzIsNDUgQEAgc3RhdGljIE9w
dGlvbmFsPGRvdWJsZT4gcHJvdG9jb2xWYWx1ZUZvclNlY29uZHMoY29uc3QgU2Vjb25kcyYgc2Vj
b25kcykKICAgICByZXR1cm4gc2Vjb25kcy5taWxsaXNlY29uZHMoKTsKIH0KIAotc3RhdGljIE9w
dGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFuaW1hdGlvbjo6UGxheWJhY2tEaXJlY3Rpb24+
IHByb3RvY29sVmFsdWVGb3JQbGF5YmFja0RpcmVjdGlvbihQbGF5YmFja0RpcmVjdGlvbiBwbGF5
YmFja0RpcmVjdGlvbikKK3N0YXRpYyBPcHRpb25hbDxQcm90b2NvbDo6QW5pbWF0aW9uOjpQbGF5
YmFja0RpcmVjdGlvbj4gcHJvdG9jb2xWYWx1ZUZvclBsYXliYWNrRGlyZWN0aW9uKFBsYXliYWNr
RGlyZWN0aW9uIHBsYXliYWNrRGlyZWN0aW9uKQogewogICAgIHN3aXRjaCAocGxheWJhY2tEaXJl
Y3Rpb24pIHsKICAgICBjYXNlIFBsYXliYWNrRGlyZWN0aW9uOjpOb3JtYWw6Ci0gICAgICAgIHJl
dHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpBbmltYXRpb246OlBsYXliYWNrRGlyZWN0aW9uOjpO
b3JtYWw7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6QW5pbWF0aW9uOjpQbGF5YmFja0RpcmVj
dGlvbjo6Tm9ybWFsOwogICAgIGNhc2UgUGxheWJhY2tEaXJlY3Rpb246OlJldmVyc2U6Ci0gICAg
ICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpBbmltYXRpb246OlBsYXliYWNrRGlyZWN0
aW9uOjpSZXZlcnNlOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OkFuaW1hdGlvbjo6UGxheWJh
Y2tEaXJlY3Rpb246OlJldmVyc2U7CiAgICAgY2FzZSBQbGF5YmFja0RpcmVjdGlvbjo6QWx0ZXJu
YXRlOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6QW5pbWF0aW9uOjpQbGF5
YmFja0RpcmVjdGlvbjo6QWx0ZXJuYXRlOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OkFuaW1h
dGlvbjo6UGxheWJhY2tEaXJlY3Rpb246OkFsdGVybmF0ZTsKICAgICBjYXNlIFBsYXliYWNrRGly
ZWN0aW9uOjpBbHRlcm5hdGVSZXZlcnNlOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90
b2NvbDo6QW5pbWF0aW9uOjpQbGF5YmFja0RpcmVjdGlvbjo6QWx0ZXJuYXRlUmV2ZXJzZTsKKyAg
ICAgICAgcmV0dXJuIFByb3RvY29sOjpBbmltYXRpb246OlBsYXliYWNrRGlyZWN0aW9uOjpBbHRl
cm5hdGVSZXZlcnNlOwogICAgIH0KIAogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CiB9CiAKLXN0YXRpYyBPcHRpb25hbDxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpBbmltYXRpb246OkZpbGxNb2RlPiBwcm90b2NvbFZhbHVlRm9yRmlsbE1vZGUoRmlsbE1v
ZGUgZmlsbE1vZGUpCitzdGF0aWMgT3B0aW9uYWw8UHJvdG9jb2w6OkFuaW1hdGlvbjo6RmlsbE1v
ZGU+IHByb3RvY29sVmFsdWVGb3JGaWxsTW9kZShGaWxsTW9kZSBmaWxsTW9kZSkKIHsKICAgICBz
d2l0Y2ggKGZpbGxNb2RlKSB7CiAgICAgY2FzZSBGaWxsTW9kZTo6Tm9uZToKLSAgICAgICAgcmV0
dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFuaW1hdGlvbjo6RmlsbE1vZGU6Ok5vbmU7CisgICAg
ICAgIHJldHVybiBQcm90b2NvbDo6QW5pbWF0aW9uOjpGaWxsTW9kZTo6Tm9uZTsKICAgICBjYXNl
IEZpbGxNb2RlOjpGb3J3YXJkczoKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkFuaW1hdGlvbjo6RmlsbE1vZGU6OkZvcndhcmRzOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6
OkFuaW1hdGlvbjo6RmlsbE1vZGU6OkZvcndhcmRzOwogICAgIGNhc2UgRmlsbE1vZGU6OkJhY2t3
YXJkczoKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFuaW1hdGlvbjo6Rmls
bE1vZGU6OkJhY2t3YXJkczsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpBbmltYXRpb246OkZp
bGxNb2RlOjpCYWNrd2FyZHM7CiAgICAgY2FzZSBGaWxsTW9kZTo6Qm90aDoKLSAgICAgICAgcmV0
dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFuaW1hdGlvbjo6RmlsbE1vZGU6OkJvdGg7CisgICAg
ICAgIHJldHVybiBQcm90b2NvbDo6QW5pbWF0aW9uOjpGaWxsTW9kZTo6Qm90aDsKICAgICBjYXNl
IEZpbGxNb2RlOjpBdXRvOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6QW5p
bWF0aW9uOjpGaWxsTW9kZTo6QXV0bzsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpBbmltYXRp
b246OkZpbGxNb2RlOjpBdXRvOwogICAgIH0KIAogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiB9CiAKLXN0YXRpYyBSZWY8SlNPTjo6QXJyYXlPZjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpBbmltYXRpb246OktleWZyYW1lPj4gYnVpbGRPYmplY3RGb3JL
ZXlmcmFtZXMoS2V5ZnJhbWVFZmZlY3QmIGtleWZyYW1lRWZmZWN0KQorc3RhdGljIFJlZjxKU09O
OjpBcnJheU9mPFByb3RvY29sOjpBbmltYXRpb246OktleWZyYW1lPj4gYnVpbGRPYmplY3RGb3JL
ZXlmcmFtZXMoS2V5ZnJhbWVFZmZlY3QmIGtleWZyYW1lRWZmZWN0KQogewotICAgIGF1dG8ga2V5
ZnJhbWVzUGF5bG9hZCA9IEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6QW5pbWF0
aW9uOjpLZXlmcmFtZT46OmNyZWF0ZSgpOworICAgIGF1dG8ga2V5ZnJhbWVzUGF5bG9hZCA9IEpT
T046OkFycmF5T2Y8UHJvdG9jb2w6OkFuaW1hdGlvbjo6S2V5ZnJhbWU+OjpjcmVhdGUoKTsKIAog
ICAgIGNvbnN0IGF1dG8mIGJsZW5kaW5nS2V5ZnJhbWVzID0ga2V5ZnJhbWVFZmZlY3QuYmxlbmRp
bmdLZXlmcmFtZXMoKTsKICAgICBjb25zdCBhdXRvJiBwYXJzZWRLZXlmcmFtZXMgPSBrZXlmcmFt
ZUVmZmVjdC5wYXJzZWRLZXlmcmFtZXMoKTsKQEAgLTEzMCw3ICsxMzAsNyBAQCBzdGF0aWMgUmVm
PEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6QW5pbWF0aW9uOjpLZXlmcmFtZT4+
IGJ1aWxkT2JqZWN0RgogICAgICAgICAgICAgQVNTRVJUKGJsZW5kaW5nS2V5ZnJhbWUuc3R5bGUo
KSk7CiAgICAgICAgICAgICBhdXRvJiBzdHlsZSA9ICpibGVuZGluZ0tleWZyYW1lLnN0eWxlKCk7
CiAKLSAgICAgICAgICAgIGF1dG8ga2V5ZnJhbWVQYXlsb2FkID0gSW5zcGVjdG9yOjpQcm90b2Nv
bDo6QW5pbWF0aW9uOjpLZXlmcmFtZTo6Y3JlYXRlKCkKKyAgICAgICAgICAgIGF1dG8ga2V5ZnJh
bWVQYXlsb2FkID0gUHJvdG9jb2w6OkFuaW1hdGlvbjo6S2V5ZnJhbWU6OmNyZWF0ZSgpCiAgICAg
ICAgICAgICAgICAgLnNldE9mZnNldChibGVuZGluZ0tleWZyYW1lLmtleSgpKQogICAgICAgICAg
ICAgICAgIC5yZWxlYXNlKCk7CiAKQEAgLTE2Nyw3ICsxNjcsNyBAQCBzdGF0aWMgUmVmPEpTT046
OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6QW5pbWF0aW9uOjpLZXlmcmFtZT4+IGJ1aWxk
T2JqZWN0RgogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgZm9yIChjb25zdCBhdXRv
JiBwYXJzZWRLZXlmcmFtZSA6IHBhcnNlZEtleWZyYW1lcykgewotICAgICAgICAgICAgYXV0byBr
ZXlmcmFtZVBheWxvYWQgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBbmltYXRpb246OktleWZyYW1l
OjpjcmVhdGUoKQorICAgICAgICAgICAgYXV0byBrZXlmcmFtZVBheWxvYWQgPSBQcm90b2NvbDo6
QW5pbWF0aW9uOjpLZXlmcmFtZTo6Y3JlYXRlKCkKICAgICAgICAgICAgICAgICAuc2V0T2Zmc2V0
KHBhcnNlZEtleWZyYW1lLmNvbXB1dGVkT2Zmc2V0KQogICAgICAgICAgICAgICAgIC5yZWxlYXNl
KCk7CiAKQEAgLTE4Niw5ICsxODYsOSBAQCBzdGF0aWMgUmVmPEpTT046OkFycmF5T2Y8SW5zcGVj
dG9yOjpQcm90b2NvbDo6QW5pbWF0aW9uOjpLZXlmcmFtZT4+IGJ1aWxkT2JqZWN0RgogICAgIHJl
dHVybiBrZXlmcmFtZXNQYXlsb2FkOwogfQogCi1zdGF0aWMgUmVmPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkFuaW1hdGlvbjo6RWZmZWN0PiBidWlsZE9iamVjdEZvckVmZmVjdChBbmltYXRpb25FZmZl
Y3QmIGVmZmVjdCkKK3N0YXRpYyBSZWY8UHJvdG9jb2w6OkFuaW1hdGlvbjo6RWZmZWN0PiBidWls
ZE9iamVjdEZvckVmZmVjdChBbmltYXRpb25FZmZlY3QmIGVmZmVjdCkKIHsKLSAgICBhdXRvIGVm
ZmVjdFBheWxvYWQgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBbmltYXRpb246OkVmZmVjdDo6Y3Jl
YXRlKCkKKyAgICBhdXRvIGVmZmVjdFBheWxvYWQgPSBQcm90b2NvbDo6QW5pbWF0aW9uOjpFZmZl
Y3Q6OmNyZWF0ZSgpCiAgICAgICAgIC5yZWxlYXNlKCk7CiAKICAgICBpZiAoYXV0byBzdGFydERl
bGF5ID0gcHJvdG9jb2xWYWx1ZUZvclNlY29uZHMoZWZmZWN0LmRlbGF5KCkpKQpAQCAtMjM4LDIw
ICsyMzgsMTcgQEAgdm9pZCBJbnNwZWN0b3JBbmltYXRpb25BZ2VudDo6ZGlkQ3JlYXRlRnJvbnRl
bmRBbmRCYWNrZW5kKEZyb250ZW5kUm91dGVyKiwgQmFja2UKIAogdm9pZCBJbnNwZWN0b3JBbmlt
YXRpb25BZ2VudDo6d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoRGlzY29ubmVjdFJlYXNv
bikKIHsKLSAgICBFcnJvclN0cmluZyBpZ25vcmVkOwotICAgIHN0b3BUcmFja2luZyhpZ25vcmVk
KTsKLSAgICBkaXNhYmxlKGlnbm9yZWQpOworICAgIHN0b3BUcmFja2luZygpOworICAgIGRpc2Fi
bGUoKTsKIAogICAgIEFTU0VSVChtX2luc3RydW1lbnRpbmdBZ2VudHMucGVyc2lzdGVudEFuaW1h
dGlvbkFnZW50KCkgPT0gdGhpcyk7CiAgICAgbV9pbnN0cnVtZW50aW5nQWdlbnRzLnNldFBlcnNp
c3RlbnRBbmltYXRpb25BZ2VudChudWxscHRyKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JBbmltYXRp
b25BZ2VudDo6ZW5hYmxlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZykKK1Byb3RvY29sOjpFcnJv
clN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckFuaW1hdGlvbkFnZW50OjplbmFibGUoKQogewotICAg
IGlmIChtX2luc3RydW1lbnRpbmdBZ2VudHMuZW5hYmxlZEFuaW1hdGlvbkFnZW50KCkgPT0gdGhp
cykgewotICAgICAgICBlcnJvclN0cmluZyA9ICJBbmltYXRpb24gZG9tYWluIGFscmVhZHkgZW5h
YmxlZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAobV9pbnN0cnVtZW50aW5n
QWdlbnRzLmVuYWJsZWRBbmltYXRpb25BZ2VudCgpID09IHRoaXMpCisgICAgICAgIHJldHVybiBt
YWtlVW5leHBlY3RlZCgiQW5pbWF0aW9uIGRvbWFpbiBhbHJlYWR5IGVuYWJsZWQiX3MpOwogCiAg
ICAgbV9pbnN0cnVtZW50aW5nQWdlbnRzLnNldEVuYWJsZWRBbmltYXRpb25BZ2VudCh0aGlzKTsK
IApAQCAtMjcwLDQ5ICsyNjcsNTEgQEAgdm9pZCBJbnNwZWN0b3JBbmltYXRpb25BZ2VudDo6ZW5h
YmxlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZykKICAgICAgICAgICAgICAgICBiaW5kQW5pbWF0
aW9uKCphbmltYXRpb24sIGZhbHNlKTsKICAgICAgICAgfQogICAgIH0KKworICAgIHJldHVybiB7
IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yQW5pbWF0aW9uQWdlbnQ6OmRpc2FibGUoRXJyb3JTdHJp
bmcmKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yQW5pbWF0aW9uQWdl
bnQ6OmRpc2FibGUoKQogewogICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy5zZXRFbmFibGVkQW5p
bWF0aW9uQWdlbnQobnVsbHB0cik7CiAKICAgICByZXNldCgpOworCisgICAgcmV0dXJuIHsgfTsK
IH0KIAotdm9pZCBJbnNwZWN0b3JBbmltYXRpb25BZ2VudDo6cmVxdWVzdEVmZmVjdFRhcmdldChF
cnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uSWQsIGludCog
bm9kZUlkKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UHJvdG9jb2w6OkRPTTo6Tm9kZUlkPiBJ
bnNwZWN0b3JBbmltYXRpb25BZ2VudDo6cmVxdWVzdEVmZmVjdFRhcmdldChjb25zdCBQcm90b2Nv
bDo6QW5pbWF0aW9uOjpBbmltYXRpb25JZCYgYW5pbWF0aW9uSWQpCiB7CisgICAgUHJvdG9jb2w6
OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAgICAgYXV0byogYW5pbWF0aW9uID0gYXNzZXJ0
QW5pbWF0aW9uKGVycm9yU3RyaW5nLCBhbmltYXRpb25JZCk7CiAgICAgaWYgKCFhbmltYXRpb24p
Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3Ry
aW5nKTsKIAogICAgIGF1dG8qIGRvbUFnZW50ID0gbV9pbnN0cnVtZW50aW5nQWdlbnRzLnBlcnNp
c3RlbnRET01BZ2VudCgpOwotICAgIGlmICghZG9tQWdlbnQpIHsKLSAgICAgICAgZXJyb3JTdHJp
bmcgPSAiRE9NIGRvbWFpbiBtdXN0IGJlIGVuYWJsZWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9CisgICAgaWYgKCFkb21BZ2VudCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJE
T00gZG9tYWluIG11c3QgYmUgZW5hYmxlZCJfcyk7CiAKICAgICBhdXRvKiBlZmZlY3QgPSBhbmlt
YXRpb24tPmVmZmVjdCgpOwotICAgIGlmICghaXM8S2V5ZnJhbWVFZmZlY3Q+KGVmZmVjdCkpIHsK
LSAgICAgICAgZXJyb3JTdHJpbmcgPSAiQW5pbWF0aW9uIGZvciBnaXZlbiBhbmltYXRpb25JZCBk
b2VzIG5vdCBoYXZlIGFuIGVmZmVjdCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBp
ZiAoIWlzPEtleWZyYW1lRWZmZWN0PihlZmZlY3QpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoIkFuaW1hdGlvbiBmb3IgZ2l2ZW4gYW5pbWF0aW9uSWQgZG9lcyBub3QgaGF2ZSBhbiBl
ZmZlY3QiX3MpOwogCiAgICAgYXV0byYga2V5ZnJhbWVFZmZlY3QgPSBkb3duY2FzdDxLZXlmcmFt
ZUVmZmVjdD4oKmVmZmVjdCk7CiAKICAgICBhdXRvKiB0YXJnZXQgPSBrZXlmcmFtZUVmZmVjdC50
YXJnZXRFbGVtZW50T3JQc2V1ZG9FbGVtZW50KCk7Ci0gICAgaWYgKCF0YXJnZXQpIHsKLSAgICAg
ICAgZXJyb3JTdHJpbmcgPSAiQW5pbWF0aW9uIGZvciBnaXZlbiBhbmltYXRpb25JZCBkb2VzIG5v
dCBoYXZlIGEgdGFyZ2V0Il9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghdGFy
Z2V0KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkFuaW1hdGlvbiBmb3IgZ2l2ZW4g
YW5pbWF0aW9uSWQgZG9lcyBub3QgaGF2ZSBhIHRhcmdldCJfcyk7CiAKLSAgICAqbm9kZUlkID0g
ZG9tQWdlbnQtPnB1c2hOb2RlUGF0aFRvRnJvbnRlbmQoZXJyb3JTdHJpbmcsIHRhcmdldCk7Cisg
ICAgcmV0dXJuIGRvbUFnZW50LT5wdXNoTm9kZVBhdGhUb0Zyb250ZW5kKGVycm9yU3RyaW5nLCB0
YXJnZXQpOwogfQogCi12b2lkIEluc3BlY3RvckFuaW1hdGlvbkFnZW50OjpyZXNvbHZlQW5pbWF0
aW9uKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBhbmltYXRpb25JZCwg
Y29uc3QgU3RyaW5nKiBvYmplY3RHcm91cCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1
bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3VsdCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPFJl
ZjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0Pj4gSW5zcGVjdG9yQW5pbWF0aW9uQWdl
bnQ6OnJlc29sdmVBbmltYXRpb24oY29uc3QgUHJvdG9jb2w6OkFuaW1hdGlvbjo6QW5pbWF0aW9u
SWQmIGFuaW1hdGlvbklkLCBjb25zdCBTdHJpbmcmIG9iamVjdEdyb3VwKQogeworICAgIFByb3Rv
Y29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIGF1dG8qIGFuaW1hdGlvbiA9IGFz
c2VydEFuaW1hdGlvbihlcnJvclN0cmluZywgYW5pbWF0aW9uSWQpOwogICAgIGlmICghYW5pbWF0
aW9uKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJv
clN0cmluZyk7CiAKICAgICBhdXRvKiBzdGF0ZSA9IGFuaW1hdGlvbi0+c2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpLT5leGVjU3RhdGUoKTsKICAgICBhdXRvIGluamVjdGVkU2NyaXB0ID0gbV9pbmpl
Y3RlZFNjcmlwdE1hbmFnZXIuaW5qZWN0ZWRTY3JpcHRGb3Ioc3RhdGUpOwpAQCAtMzI4LDM4ICsz
MjcsNDIgQEAgdm9pZCBJbnNwZWN0b3JBbmltYXRpb25BZ2VudDo6cmVzb2x2ZUFuaW1hdGlvbihF
cnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFMKIAogICAgIGlmICghdmFsdWUpIHsKICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIkludGVy
bmFsIGVycm9yOiB1bmtub3duIEFuaW1hdGlvbiBmb3IgZ2l2ZW4gYW5pbWF0aW9uSWQiX3M7Ci0g
ICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJJbnRlcm5hbCBl
cnJvcjogdW5rbm93biBBbmltYXRpb24gZm9yIGdpdmVuIGFuaW1hdGlvbklkIl9zKTsKICAgICB9
CiAKLSAgICBTdHJpbmcgb2JqZWN0R3JvdXBOYW1lID0gb2JqZWN0R3JvdXAgPyAqb2JqZWN0R3Jv
dXAgOiBTdHJpbmcoKTsKLSAgICByZXN1bHQgPSBpbmplY3RlZFNjcmlwdC53cmFwT2JqZWN0KHZh
bHVlLCBvYmplY3RHcm91cE5hbWUpOworICAgIGF1dG8gb2JqZWN0ID0gaW5qZWN0ZWRTY3JpcHQu
d3JhcE9iamVjdCh2YWx1ZSwgb2JqZWN0R3JvdXApOworICAgIGlmICghb2JqZWN0KQorICAgICAg
ICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkludGVybmFsIGVycm9yOiB1bmFibGUgdG8gY2FzdCBB
bmltYXRpb24iKTsKKworICAgIHJldHVybiBvYmplY3QucmVsZWFzZU5vbk51bGwoKTsKIH0KIAot
dm9pZCBJbnNwZWN0b3JBbmltYXRpb25BZ2VudDo6c3RhcnRUcmFja2luZyhFcnJvclN0cmluZyYg
ZXJyb3JTdHJpbmcpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JBbmlt
YXRpb25BZ2VudDo6c3RhcnRUcmFja2luZygpCiB7Ci0gICAgaWYgKG1faW5zdHJ1bWVudGluZ0Fn
ZW50cy50cmFja2luZ0FuaW1hdGlvbkFnZW50KCkgPT0gdGhpcykgewotICAgICAgICBlcnJvclN0
cmluZyA9ICJBbmltYXRpb24gZG9tYWluIGFscmVhZHkgdHJhY2tpbmciX3M7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9CisgICAgaWYgKG1faW5zdHJ1bWVudGluZ0FnZW50cy50cmFja2luZ0FuaW1h
dGlvbkFnZW50KCkgPT0gdGhpcykKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJBbmlt
YXRpb24gZG9tYWluIGFscmVhZHkgdHJhY2tpbmciX3MpOwogCiAgICAgbV9pbnN0cnVtZW50aW5n
QWdlbnRzLnNldFRyYWNraW5nQW5pbWF0aW9uQWdlbnQodGhpcyk7CiAKICAgICBBU1NFUlQobV90
cmFja2VkRGVjbGFyYXRpdmVBbmltYXRpb25EYXRhLmlzRW1wdHkoKSk7CiAKICAgICBtX2Zyb250
ZW5kRGlzcGF0Y2hlci0+dHJhY2tpbmdTdGFydChtX2Vudmlyb25tZW50LmV4ZWN1dGlvblN0b3B3
YXRjaCgpLmVsYXBzZWRUaW1lKCkuc2Vjb25kcygpKTsKKworICAgIHJldHVybiB7IH07CiB9CiAK
LXZvaWQgSW5zcGVjdG9yQW5pbWF0aW9uQWdlbnQ6OnN0b3BUcmFja2luZyhFcnJvclN0cmluZyYp
CitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JBbmltYXRpb25BZ2VudDo6
c3RvcFRyYWNraW5nKCkKIHsKICAgICBpZiAobV9pbnN0cnVtZW50aW5nQWdlbnRzLnRyYWNraW5n
QW5pbWF0aW9uQWdlbnQoKSAhPSB0aGlzKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVy
biB7IH07CiAKICAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMuc2V0VHJhY2tpbmdBbmltYXRpb25B
Z2VudChudWxscHRyKTsKIAogICAgIG1fdHJhY2tlZERlY2xhcmF0aXZlQW5pbWF0aW9uRGF0YS5j
bGVhcigpOwogCiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPnRyYWNraW5nQ29tcGxldGUobV9l
bnZpcm9ubWVudC5leGVjdXRpb25TdG9wd2F0Y2goKS5lbGFwc2VkVGltZSgpLnNlY29uZHMoKSk7
CisKKyAgICByZXR1cm4geyB9OwogfQogCiBzdGF0aWMgYm9vbCBpc0RlbGF5ZWQoQ29tcHV0ZWRF
ZmZlY3RUaW1pbmcmIGNvbXB1dGVkVGltaW5nKQpAQCAtMzgwLDMxICszODMsMzEgQEAgdm9pZCBJ
bnNwZWN0b3JBbmltYXRpb25BZ2VudDo6d2lsbEFwcGx5S2V5ZnJhbWVFZmZlY3QoRWxlbWVudCYg
dGFyZ2V0LCBLZXlmcmFtZUUKICAgICB9KTsKICAgICBhdXRvJiB0cmFja2luZ0RhdGEgPSBlbnN1
cmVSZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwogCi0gICAgT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90
b2NvbDo6QW5pbWF0aW9uOjpBbmltYXRpb25TdGF0ZT4gYW5pbWF0aW9uQW5pbWF0aW9uU3RhdGU7
CisgICAgT3B0aW9uYWw8UHJvdG9jb2w6OkFuaW1hdGlvbjo6QW5pbWF0aW9uU3RhdGU+IGFuaW1h
dGlvbkFuaW1hdGlvblN0YXRlOwogCiAgICAgaWYgKChlbnN1cmVSZXN1bHQuaXNOZXdFbnRyeSB8
fCAhaXNEZWxheWVkKHRyYWNraW5nRGF0YS5sYXN0Q29tcHV0ZWRUaW1pbmcpKSAmJiBpc0RlbGF5
ZWQoY29tcHV0ZWRUaW1pbmcpKQotICAgICAgICBhbmltYXRpb25BbmltYXRpb25TdGF0ZSA9IElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkFuaW1hdGlvbjo6QW5pbWF0aW9uU3RhdGU6OkRlbGF5ZWQ7Cisg
ICAgICAgIGFuaW1hdGlvbkFuaW1hdGlvblN0YXRlID0gUHJvdG9jb2w6OkFuaW1hdGlvbjo6QW5p
bWF0aW9uU3RhdGU6OkRlbGF5ZWQ7CiAgICAgZWxzZSBpZiAoZW5zdXJlUmVzdWx0LmlzTmV3RW50
cnkgfHwgdHJhY2tpbmdEYXRhLmxhc3RDb21wdXRlZFRpbWluZy5waGFzZSAhPSBjb21wdXRlZFRp
bWluZy5waGFzZSkgewogICAgICAgICBzd2l0Y2ggKGNvbXB1dGVkVGltaW5nLnBoYXNlKSB7CiAg
ICAgICAgIGNhc2UgQW5pbWF0aW9uRWZmZWN0UGhhc2U6OkJlZm9yZToKLSAgICAgICAgICAgIGFu
aW1hdGlvbkFuaW1hdGlvblN0YXRlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QW5pbWF0aW9uOjpB
bmltYXRpb25TdGF0ZTo6UmVhZHk7CisgICAgICAgICAgICBhbmltYXRpb25BbmltYXRpb25TdGF0
ZSA9IFByb3RvY29sOjpBbmltYXRpb246OkFuaW1hdGlvblN0YXRlOjpSZWFkeTsKICAgICAgICAg
ICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgQW5pbWF0aW9uRWZmZWN0UGhhc2U6OkFjdGl2ZToK
LSAgICAgICAgICAgIGFuaW1hdGlvbkFuaW1hdGlvblN0YXRlID0gSW5zcGVjdG9yOjpQcm90b2Nv
bDo6QW5pbWF0aW9uOjpBbmltYXRpb25TdGF0ZTo6QWN0aXZlOworICAgICAgICAgICAgYW5pbWF0
aW9uQW5pbWF0aW9uU3RhdGUgPSBQcm90b2NvbDo6QW5pbWF0aW9uOjpBbmltYXRpb25TdGF0ZTo6
QWN0aXZlOwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBBbmltYXRpb25FZmZl
Y3RQaGFzZTo6QWZ0ZXI6Ci0gICAgICAgICAgICBhbmltYXRpb25BbmltYXRpb25TdGF0ZSA9IElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkFuaW1hdGlvbjo6QW5pbWF0aW9uU3RhdGU6OkRvbmU7CisgICAg
ICAgICAgICBhbmltYXRpb25BbmltYXRpb25TdGF0ZSA9IFByb3RvY29sOjpBbmltYXRpb246OkFu
aW1hdGlvblN0YXRlOjpEb25lOwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBB
bmltYXRpb25FZmZlY3RQaGFzZTo6SWRsZToKLSAgICAgICAgICAgIGFuaW1hdGlvbkFuaW1hdGlv
blN0YXRlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QW5pbWF0aW9uOjpBbmltYXRpb25TdGF0ZTo6
Q2FuY2VsZWQ7CisgICAgICAgICAgICBhbmltYXRpb25BbmltYXRpb25TdGF0ZSA9IFByb3RvY29s
OjpBbmltYXRpb246OkFuaW1hdGlvblN0YXRlOjpDYW5jZWxlZDsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAgICAgfSBlbHNlIGlmICh0cmFja2luZ0RhdGEubGFzdENvbXB1dGVkVGlt
aW5nLmN1cnJlbnRJdGVyYXRpb24gIT0gY29tcHV0ZWRUaW1pbmcuY3VycmVudEl0ZXJhdGlvbikg
ewogICAgICAgICAvLyBJdGVyYXRpb25zIGFyZSByZXByZXNlbnRlZCBieSBzZXF1ZW50aWFsICJh
Y3RpdmUiIHN0YXRlIGV2ZW50cy4KLSAgICAgICAgYW5pbWF0aW9uQW5pbWF0aW9uU3RhdGUgPSBJ
bnNwZWN0b3I6OlByb3RvY29sOjpBbmltYXRpb246OkFuaW1hdGlvblN0YXRlOjpBY3RpdmU7Cisg
ICAgICAgIGFuaW1hdGlvbkFuaW1hdGlvblN0YXRlID0gUHJvdG9jb2w6OkFuaW1hdGlvbjo6QW5p
bWF0aW9uU3RhdGU6OkFjdGl2ZTsKICAgICB9CiAKICAgICB0cmFja2luZ0RhdGEubGFzdENvbXB1
dGVkVGltaW5nID0gY29tcHV0ZWRUaW1pbmc7CkBAIC00MTIsNyArNDE1LDcgQEAgdm9pZCBJbnNw
ZWN0b3JBbmltYXRpb25BZ2VudDo6d2lsbEFwcGx5S2V5ZnJhbWVFZmZlY3QoRWxlbWVudCYgdGFy
Z2V0LCBLZXlmcmFtZUUKICAgICBpZiAoIWFuaW1hdGlvbkFuaW1hdGlvblN0YXRlKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBhdXRvIGV2ZW50ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QW5pbWF0
aW9uOjpUcmFja2luZ1VwZGF0ZTo6Y3JlYXRlKCkKKyAgICBhdXRvIGV2ZW50ID0gUHJvdG9jb2w6
OkFuaW1hdGlvbjo6VHJhY2tpbmdVcGRhdGU6OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRUcmFja2lu
Z0FuaW1hdGlvbklkKHRyYWNraW5nRGF0YS50cmFja2luZ0FuaW1hdGlvbklkKQogICAgICAgICAu
c2V0QW5pbWF0aW9uU3RhdGUoYW5pbWF0aW9uQW5pbWF0aW9uU3RhdGUudmFsdWUoKSkKICAgICAg
ICAgLnJlbGVhc2UoKTsKQEAgLTQ0MSw4ICs0NDQsNyBAQCB2b2lkIEluc3BlY3RvckFuaW1hdGlv
bkFnZW50OjpkaWRDaGFuZ2VXZWJBbmltYXRpb25OYW1lKFdlYkFuaW1hdGlvbiYgYW5pbWF0aW9u
KQogICAgIGlmIChhbmltYXRpb25JZC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAg
IGF1dG8gbmFtZSA9IGFuaW1hdGlvbi5pZCgpOwotICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5u
YW1lQ2hhbmdlZChhbmltYXRpb25JZCwgIW5hbWUuaXNFbXB0eSgpID8gJm5hbWUgOiBudWxscHRy
KTsKKyAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+bmFtZUNoYW5nZWQoYW5pbWF0aW9uSWQsIGFu
aW1hdGlvbi5pZCgpKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JBbmltYXRpb25BZ2VudDo6ZGlkU2V0
V2ViQW5pbWF0aW9uRWZmZWN0KFdlYkFuaW1hdGlvbiYgYW5pbWF0aW9uKQpAQCAtNTI1LDcgKzUy
Nyw3IEBAIFN0cmluZyBJbnNwZWN0b3JBbmltYXRpb25BZ2VudDo6ZmluZEFuaW1hdGlvbklkKFdl
YkFuaW1hdGlvbiYgYW5pbWF0aW9uKQogICAgIHJldHVybiBudWxsU3RyaW5nKCk7CiB9CiAKLVdl
YkFuaW1hdGlvbiogSW5zcGVjdG9yQW5pbWF0aW9uQWdlbnQ6OmFzc2VydEFuaW1hdGlvbihFcnJv
clN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uSWQpCitXZWJBbmlt
YXRpb24qIEluc3BlY3RvckFuaW1hdGlvbkFnZW50Ojphc3NlcnRBbmltYXRpb24oUHJvdG9jb2w6
OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBhbmltYXRpb25JZCkKIHsK
ICAgICBhdXRvKiBhbmltYXRpb24gPSBtX2FuaW1hdGlvbklkTWFwLmdldChhbmltYXRpb25JZCk7
CiAgICAgaWYgKCFhbmltYXRpb24pCkBAIC01MzgsNyArNTQwLDcgQEAgdm9pZCBJbnNwZWN0b3JB
bmltYXRpb25BZ2VudDo6YmluZEFuaW1hdGlvbihXZWJBbmltYXRpb24mIGFuaW1hdGlvbiwgYm9v
bCBjYXB0dXIKICAgICBhdXRvIGFuaW1hdGlvbklkID0gbWFrZVN0cmluZygiYW5pbWF0aW9uOiIg
KyBJZGVudGlmaWVyc0ZhY3Rvcnk6OmNyZWF0ZUlkZW50aWZpZXIoKSk7CiAgICAgbV9hbmltYXRp
b25JZE1hcC5zZXQoYW5pbWF0aW9uSWQsICZhbmltYXRpb24pOwogCi0gICAgYXV0byBhbmltYXRp
b25QYXlsb2FkID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QW5pbWF0aW9uOjpBbmltYXRpb246OmNy
ZWF0ZSgpCisgICAgYXV0byBhbmltYXRpb25QYXlsb2FkID0gUHJvdG9jb2w6OkFuaW1hdGlvbjo6
QW5pbWF0aW9uOjpjcmVhdGUoKQogICAgICAgICAuc2V0QW5pbWF0aW9uSWQoYW5pbWF0aW9uSWQp
CiAgICAgICAgIC5yZWxlYXNlKCk7CiAKQEAgLTYwMyw5ICs2MDUsOSBAQCB2b2lkIEluc3BlY3Rv
ckFuaW1hdGlvbkFnZW50OjpzdG9wVHJhY2tpbmdEZWNsYXJhdGl2ZUFuaW1hdGlvbihEZWNsYXJh
dGl2ZUFuaW1hdAogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoaXQtPnZhbHVlLmxhc3RDb21w
dXRlZFRpbWluZy5waGFzZSAhPSBBbmltYXRpb25FZmZlY3RQaGFzZTo6QWZ0ZXIgJiYgaXQtPnZh
bHVlLmxhc3RDb21wdXRlZFRpbWluZy5waGFzZSAhPSBBbmltYXRpb25FZmZlY3RQaGFzZTo6SWRs
ZSkgewotICAgICAgICBhdXRvIGV2ZW50ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QW5pbWF0aW9u
OjpUcmFja2luZ1VwZGF0ZTo6Y3JlYXRlKCkKKyAgICAgICAgYXV0byBldmVudCA9IFByb3RvY29s
OjpBbmltYXRpb246OlRyYWNraW5nVXBkYXRlOjpjcmVhdGUoKQogICAgICAgICAgICAgLnNldFRy
YWNraW5nQW5pbWF0aW9uSWQoaXQtPnZhbHVlLnRyYWNraW5nQW5pbWF0aW9uSWQpCi0gICAgICAg
ICAgICAuc2V0QW5pbWF0aW9uU3RhdGUoSW5zcGVjdG9yOjpQcm90b2NvbDo6QW5pbWF0aW9uOjpB
bmltYXRpb25TdGF0ZTo6Q2FuY2VsZWQpCisgICAgICAgICAgICAuc2V0QW5pbWF0aW9uU3RhdGUo
UHJvdG9jb2w6OkFuaW1hdGlvbjo6QW5pbWF0aW9uU3RhdGU6OkNhbmNlbGVkKQogICAgICAgICAg
ICAgLnJlbGVhc2UoKTsKICAgICAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPnRyYWNraW5nVXBk
YXRlKG1fZW52aXJvbm1lbnQuZXhlY3V0aW9uU3RvcHdhdGNoKCkuZWxhcHNlZFRpbWUoKS5zZWNv
bmRzKCksIFdURk1vdmUoZXZlbnQpKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckFuaW1hdGlvbkFnZW50LmggYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckFuaW1hdGlvbkFnZW50LmgKaW5kZXggOGI1
MTE2MjhjOTdhMjIyYThmOWFjZDhkM2U1YjIwMmE4ZGJiNmJlYy4uMDY0YWM0MDYzYzMwOWZkYjQx
YzcxYmZjZjZjYmQ5ZWE2NGVkOTMxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2FnZW50cy9JbnNwZWN0b3JBbmltYXRpb25BZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQW5pbWF0aW9uQWdlbnQuaApAQCAtNDQsMjYgKzQ0
LDI0IEBAIGNsYXNzIEtleWZyYW1lRWZmZWN0OwogY2xhc3MgUGFnZTsKIGNsYXNzIFdlYkFuaW1h
dGlvbjsKIAotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7Ci0KIGNsYXNzIEluc3BlY3RvckFu
aW1hdGlvbkFnZW50IGZpbmFsIDogcHVibGljIEluc3BlY3RvckFnZW50QmFzZSwgcHVibGljIElu
c3BlY3Rvcjo6QW5pbWF0aW9uQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKICAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShJbnNwZWN0b3JBbmltYXRpb25BZ2VudCk7CiAgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgSW5zcGVjdG9yQW5pbWF0aW9uQWdlbnQoUGFnZUFn
ZW50Q29udGV4dCYpOwotICAgIH5JbnNwZWN0b3JBbmltYXRpb25BZ2VudCgpIG92ZXJyaWRlOwor
ICAgIH5JbnNwZWN0b3JBbmltYXRpb25BZ2VudCgpOwogCiAgICAgLy8gSW5zcGVjdG9yQWdlbnRC
YXNlCi0gICAgdm9pZCBkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9u
dGVuZFJvdXRlciosIEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXIqKSBvdmVycmlkZTsKLSAg
ICB2b2lkIHdpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlzY29ubmVj
dFJlYXNvbikgb3ZlcnJpZGU7CisgICAgdm9pZCBkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQo
SW5zcGVjdG9yOjpGcm9udGVuZFJvdXRlciosIEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXIq
KTsKKyAgICB2b2lkIHdpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlz
Y29ubmVjdFJlYXNvbik7CiAKICAgICAvLyBBbmltYXRpb25CYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXIKLSAgICB2b2lkIGVuYWJsZShFcnJvclN0cmluZyYpIG92ZXJyaWRlOwotICAgIHZvaWQgZGlz
YWJsZShFcnJvclN0cmluZyYpIG92ZXJyaWRlOwotICAgIHZvaWQgcmVxdWVzdEVmZmVjdFRhcmdl
dChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uSWQsIGludCogbm9kZUlkKSBv
dmVycmlkZTsKLSAgICB2b2lkIHJlc29sdmVBbmltYXRpb24oRXJyb3JTdHJpbmcmLCBjb25zdCBT
dHJpbmcmIGFuaW1hdGlvbklkLCBjb25zdCBTdHJpbmcqIG9iamVjdEdyb3VwLCBSZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYpIG92ZXJyaWRlOwotICAg
IHZvaWQgc3RhcnRUcmFja2luZyhFcnJvclN0cmluZyYpIG92ZXJyaWRlOwotICAgIHZvaWQgc3Rv
cFRyYWNraW5nKEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7CisgICAgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBlbmFibGUoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29s
OjpFcnJvclN0cmluZ09yPHZvaWQ+IGRpc2FibGUoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29s
OjpFcnJvclN0cmluZ09yPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkPiByZXF1ZXN0
RWZmZWN0VGFyZ2V0KGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFuaW1hdGlvbjo6QW5pbWF0
aW9uSWQmKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+PiByZXNvbHZlQW5pbWF0aW9u
KGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFuaW1hdGlvbjo6QW5pbWF0aW9uSWQmLCBjb25z
dCBTdHJpbmcmIG9iamVjdEdyb3VwKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0
cmluZ09yPHZvaWQ+IHN0YXJ0VHJhY2tpbmcoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpF
cnJvclN0cmluZ09yPHZvaWQ+IHN0b3BUcmFja2luZygpOwogCiAgICAgLy8gSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uCiAgICAgdm9pZCB3aWxsQXBwbHlLZXlmcmFtZUVmZmVjdChFbGVtZW50Jiwg
S2V5ZnJhbWVFZmZlY3QmLCBDb21wdXRlZEVmZmVjdFRpbWluZyk7CkBAIC03Nyw3ICs3NSw3IEBA
IHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBTdHJpbmcgZmluZEFuaW1hdGlvbklkKFdlYkFuaW1h
dGlvbiYpOwotICAgIFdlYkFuaW1hdGlvbiogYXNzZXJ0QW5pbWF0aW9uKEVycm9yU3RyaW5nJiwg
Y29uc3QgU3RyaW5nJiBhbmltYXRpb25JZCk7CisgICAgV2ViQW5pbWF0aW9uKiBhc3NlcnRBbmlt
YXRpb24oSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGFu
aW1hdGlvbklkKTsKICAgICB2b2lkIGJpbmRBbmltYXRpb24oV2ViQW5pbWF0aW9uJiwgYm9vbCBj
YXB0dXJlQmFja3RyYWNlKTsKICAgICB2b2lkIHVuYmluZEFuaW1hdGlvbihjb25zdCBTdHJpbmcm
IGFuaW1hdGlvbklkKTsKICAgICB2b2lkIGFuaW1hdGlvbkRlc3Ryb3llZFRpbWVyRmlyZWQoKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQXBw
bGljYXRpb25DYWNoZUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50LmNwcAppbmRleCA5MTI5MjY0OGQ2ODJkOWMz
ODFlNTI0ZmQwOTcwMDhhNDdjMzY1MDRhLi5hZjY3Mzc4YTZkZGNkMWFlNzcyNDRlODk5NTM2Nzcz
YTcwMjdiMDNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0lu
c3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuY3BwCkBAIC01Nywz
MSArNTcsMzAgQEAgdm9pZCBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQ6OmRpZENyZWF0
ZUZyb250ZW5kQW5kQmFja2VuZChGcm9udGVuZFJvdXRlcioKIAogdm9pZCBJbnNwZWN0b3JBcHBs
aWNhdGlvbkNhY2hlQWdlbnQ6OndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rv
cjo6RGlzY29ubmVjdFJlYXNvbikKIHsKLSAgICBFcnJvclN0cmluZyBpZ25vcmVkOwotICAgIGRp
c2FibGUoaWdub3JlZCk7CisgICAgZGlzYWJsZSgpOwogfQogCi12b2lkIEluc3BlY3RvckFwcGxp
Y2F0aW9uQ2FjaGVBZ2VudDo6ZW5hYmxlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZykKK1Byb3Rv
Y29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudDo6
ZW5hYmxlKCkKIHsKLSAgICBpZiAobV9pbnN0cnVtZW50aW5nQWdlbnRzLmVuYWJsZWRBcHBsaWNh
dGlvbkNhY2hlQWdlbnQoKSA9PSB0aGlzKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIkFwcGxp
Y2F0aW9uQ2FjaGUgZG9tYWluIGFscmVhZHkgZW5hYmxlZCJfczsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KKyAgICBpZiAobV9pbnN0cnVtZW50aW5nQWdlbnRzLmVuYWJsZWRBcHBsaWNhdGlvbkNh
Y2hlQWdlbnQoKSA9PSB0aGlzKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkFwcGxp
Y2F0aW9uQ2FjaGUgZG9tYWluIGFscmVhZHkgZW5hYmxlZCJfcyk7CiAKICAgICBtX2luc3RydW1l
bnRpbmdBZ2VudHMuc2V0RW5hYmxlZEFwcGxpY2F0aW9uQ2FjaGVBZ2VudCh0aGlzKTsKIAogICAg
IC8vIFdlIG5lZWQgdG8gcGFzcyBpbml0aWFsIG5hdmlnYXRvci5vbk9ubGluZS4KICAgICBuZXR3
b3JrU3RhdGVDaGFuZ2VkKCk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3Rv
ckFwcGxpY2F0aW9uQ2FjaGVBZ2VudDo6ZGlzYWJsZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcp
CitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hl
QWdlbnQ6OmRpc2FibGUoKQogewotICAgIGlmIChtX2luc3RydW1lbnRpbmdBZ2VudHMuZW5hYmxl
ZEFwcGxpY2F0aW9uQ2FjaGVBZ2VudCgpICE9IHRoaXMpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcg
PSAiQXBwbGljYXRpb25DYWNoZSBkb21haW4gYWxyZWFkeSBkaXNhYmxlZCJfczsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KKyAgICBpZiAobV9pbnN0cnVtZW50aW5nQWdlbnRzLmVuYWJsZWRBcHBs
aWNhdGlvbkNhY2hlQWdlbnQoKSAhPSB0aGlzKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0
ZWQoIkFwcGxpY2F0aW9uQ2FjaGUgZG9tYWluIGFscmVhZHkgZGlzYWJsZWQiX3MpOwogCiAgICAg
bV9pbnN0cnVtZW50aW5nQWdlbnRzLnNldEVuYWJsZWRBcHBsaWNhdGlvbkNhY2hlQWdlbnQobnVs
bHB0cik7CisKKyAgICByZXR1cm4geyB9OwogfQogCiB2b2lkIEluc3BlY3RvckFwcGxpY2F0aW9u
Q2FjaGVBZ2VudDo6dXBkYXRlQXBwbGljYXRpb25DYWNoZVN0YXR1cyhGcmFtZSogZnJhbWUpCkBA
IC0xMDksMTYgKzEwOCwxMyBAQCB2b2lkIEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudDo6
bmV0d29ya1N0YXRlQ2hhbmdlZCgpCiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPm5ldHdvcmtT
dGF0ZVVwZGF0ZWQocGxhdGZvcm1TdHJhdGVnaWVzKCktPmxvYWRlclN0cmF0ZWd5KCktPmlzT25M
aW5lKCkpOwogfQogCi12b2lkIEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudDo6Z2V0RnJh
bWVzV2l0aE1hbmlmZXN0cyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIFJlZlB0cjxKU09OOjpB
cnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkZyYW1lV2l0aE1h
bmlmZXN0Pj4mIHJlc3VsdCkKK0V4cGVjdGVkPFJlZjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpB
cHBsaWNhdGlvbkNhY2hlOjpGcmFtZVdpdGhNYW5pZmVzdD4+LCBQcm90b2NvbDo6RXJyb3JTdHJp
bmc+IEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudDo6Z2V0RnJhbWVzV2l0aE1hbmlmZXN0
cygpCiB7CiAgICAgYXV0byogcGFnZUFnZW50ID0gbV9pbnN0cnVtZW50aW5nQWdlbnRzLmVuYWJs
ZWRQYWdlQWdlbnQoKTsKLSAgICBpZiAoIXBhZ2VBZ2VudCkgewotICAgICAgICBlcnJvclN0cmlu
ZyA9ICJQYWdlIGRvbWFpbiBtdXN0IGJlIGVuYWJsZWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICByZXN1bHQgPSBKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFw
cGxpY2F0aW9uQ2FjaGU6OkZyYW1lV2l0aE1hbmlmZXN0Pjo6Y3JlYXRlKCk7CisgICAgaWYgKCFw
YWdlQWdlbnQpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiUGFnZSBkb21haW4gbXVz
dCBiZSBlbmFibGVkIl9zKTsKIAorICAgIGF1dG8gcmVzdWx0ID0gSlNPTjo6QXJyYXlPZjxQcm90
b2NvbDo6QXBwbGljYXRpb25DYWNoZTo6RnJhbWVXaXRoTWFuaWZlc3Q+OjpjcmVhdGUoKTsKICAg
ICBmb3IgKEZyYW1lKiBmcmFtZSA9ICZtX2luc3BlY3RlZFBhZ2UubWFpbkZyYW1lKCk7IGZyYW1l
OyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsKICAgICAgICAgYXV0byog
ZG9jdW1lbnRMb2FkZXIgPSBmcmFtZS0+bG9hZGVyKCkuZG9jdW1lbnRMb2FkZXIoKTsKICAgICAg
ICAgaWYgKCFkb2N1bWVudExvYWRlcikKQEAgLTEyNywxNiArMTIzLDE3IEBAIHZvaWQgSW5zcGVj
dG9yQXBwbGljYXRpb25DYWNoZUFnZW50OjpnZXRGcmFtZXNXaXRoTWFuaWZlc3RzKEVycm9yU3Ry
aW5nJiBlcnJvclN0CiAgICAgICAgIGF1dG8mIGhvc3QgPSBkb2N1bWVudExvYWRlci0+YXBwbGlj
YXRpb25DYWNoZUhvc3QoKTsKICAgICAgICAgU3RyaW5nIG1hbmlmZXN0VVJMID0gaG9zdC5hcHBs
aWNhdGlvbkNhY2hlSW5mbygpLm1hbmlmZXN0LnN0cmluZygpOwogICAgICAgICBpZiAoIW1hbmlm
ZXN0VVJMLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgcmVzdWx0LT5hZGRJdGVtKEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkZyYW1lV2l0aE1hbmlmZXN0OjpjcmVhdGUo
KQorICAgICAgICAgICAgcmVzdWx0LT5hZGRJdGVtKFByb3RvY29sOjpBcHBsaWNhdGlvbkNhY2hl
OjpGcmFtZVdpdGhNYW5pZmVzdDo6Y3JlYXRlKCkKICAgICAgICAgICAgICAgICAuc2V0RnJhbWVJ
ZChwYWdlQWdlbnQtPmZyYW1lSWQoZnJhbWUpKQogICAgICAgICAgICAgICAgIC5zZXRNYW5pZmVz
dFVSTChtYW5pZmVzdFVSTCkKICAgICAgICAgICAgICAgICAuc2V0U3RhdHVzKHN0YXRpY19jYXN0
PGludD4oaG9zdC5zdGF0dXMoKSkpCiAgICAgICAgICAgICAgICAgLnJlbGVhc2UoKSk7CiAgICAg
ICAgIH0KICAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotRG9jdW1lbnRMb2FkZXIqIElu
c3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudDo6YXNzZXJ0RnJhbWVXaXRoRG9jdW1lbnRMb2Fk
ZXIoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGZyYW1lSWQpCitEb2N1
bWVudExvYWRlciogSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50Ojphc3NlcnRGcmFtZVdp
dGhEb2N1bWVudExvYWRlcihQcm90b2NvbDo6RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25z
dCBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpGcmFtZUlkJiBmcmFtZUlkKQogewogICAg
IGF1dG8qIHBhZ2VBZ2VudCA9IG1faW5zdHJ1bWVudGluZ0FnZW50cy5lbmFibGVkUGFnZUFnZW50
KCk7CiAgICAgaWYgKCFwYWdlQWdlbnQpIHsKQEAgLTE1MSwyOCArMTQ4LDMyIEBAIERvY3VtZW50
TG9hZGVyKiBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQ6OmFzc2VydEZyYW1lV2l0aERv
Y3VtZW50TG9hZGVyKEVyCiAgICAgcmV0dXJuIEluc3BlY3RvclBhZ2VBZ2VudDo6YXNzZXJ0RG9j
dW1lbnRMb2FkZXIoZXJyb3JTdHJpbmcsIGZyYW1lKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JBcHBs
aWNhdGlvbkNhY2hlQWdlbnQ6OmdldE1hbmlmZXN0Rm9yRnJhbWUoRXJyb3JTdHJpbmcmIGVycm9y
U3RyaW5nLCBjb25zdCBTdHJpbmcmIGZyYW1lSWQsIFN0cmluZyogbWFuaWZlc3RVUkwpCitFeHBl
Y3RlZDxTdHJpbmcsIFByb3RvY29sOjpFcnJvclN0cmluZz4gSW5zcGVjdG9yQXBwbGljYXRpb25D
YWNoZUFnZW50OjpnZXRNYW5pZmVzdEZvckZyYW1lKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6
Ok5ldHdvcms6OkZyYW1lSWQmIGZyYW1lSWQpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5n
IGVycm9yU3RyaW5nOworCiAgICAgRG9jdW1lbnRMb2FkZXIqIGRvY3VtZW50TG9hZGVyID0gYXNz
ZXJ0RnJhbWVXaXRoRG9jdW1lbnRMb2FkZXIoZXJyb3JTdHJpbmcsIGZyYW1lSWQpOwogICAgIGlm
ICghZG9jdW1lbnRMb2FkZXIpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAotICAgICptYW5pZmVzdFVSTCA9IGRvY3VtZW50TG9h
ZGVyLT5hcHBsaWNhdGlvbkNhY2hlSG9zdCgpLmFwcGxpY2F0aW9uQ2FjaGVJbmZvKCkubWFuaWZl
c3Quc3RyaW5nKCk7CisgICAgcmV0dXJuIGRvY3VtZW50TG9hZGVyLT5hcHBsaWNhdGlvbkNhY2hl
SG9zdCgpLmFwcGxpY2F0aW9uQ2FjaGVJbmZvKCkubWFuaWZlc3Quc3RyaW5nKCk7CiB9CiAKLXZv
aWQgSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50OjpnZXRBcHBsaWNhdGlvbkNhY2hlRm9y
RnJhbWUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGZyYW1lSWQsIFJl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcHBsaWNhdGlvbkNhY2hlOjpBcHBsaWNhdGlvbkNh
Y2hlPiYgYXBwbGljYXRpb25DYWNoZSkKK0V4cGVjdGVkPFJlZjxQcm90b2NvbDo6QXBwbGljYXRp
b25DYWNoZTo6QXBwbGljYXRpb25DYWNoZT4sIFByb3RvY29sOjpFcnJvclN0cmluZz4gSW5zcGVj
dG9yQXBwbGljYXRpb25DYWNoZUFnZW50OjpnZXRBcHBsaWNhdGlvbkNhY2hlRm9yRnJhbWUoY29u
c3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6RnJhbWVJZCYgZnJhbWVJZCkKIHsKKyAg
ICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBhdXRvKiBkb2N1bWVu
dExvYWRlciA9IGFzc2VydEZyYW1lV2l0aERvY3VtZW50TG9hZGVyKGVycm9yU3RyaW5nLCBmcmFt
ZUlkKTsKICAgICBpZiAoIWRvY3VtZW50TG9hZGVyKQotICAgICAgICByZXR1cm47CisgICAgICAg
IHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAgICBhdXRvJiBob3N0ID0g
ZG9jdW1lbnRMb2FkZXItPmFwcGxpY2F0aW9uQ2FjaGVIb3N0KCk7Ci0gICAgYXBwbGljYXRpb25D
YWNoZSA9IGJ1aWxkT2JqZWN0Rm9yQXBwbGljYXRpb25DYWNoZShob3N0LnJlc291cmNlTGlzdCgp
LCBob3N0LmFwcGxpY2F0aW9uQ2FjaGVJbmZvKCkpOworICAgIHJldHVybiBidWlsZE9iamVjdEZv
ckFwcGxpY2F0aW9uQ2FjaGUoaG9zdC5yZXNvdXJjZUxpc3QoKSwgaG9zdC5hcHBsaWNhdGlvbkNh
Y2hlSW5mbygpKTsKIH0KIAotUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2Fj
aGU6OkFwcGxpY2F0aW9uQ2FjaGU+IEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudDo6YnVp
bGRPYmplY3RGb3JBcHBsaWNhdGlvbkNhY2hlKGNvbnN0IFZlY3RvcjxBcHBsaWNhdGlvbkNhY2hl
SG9zdDo6UmVzb3VyY2VJbmZvPiYgYXBwbGljYXRpb25DYWNoZVJlc291cmNlcywgY29uc3QgQXBw
bGljYXRpb25DYWNoZUhvc3Q6OkNhY2hlSW5mbyYgYXBwbGljYXRpb25DYWNoZUluZm8pCitSZWY8
UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkFwcGxpY2F0aW9uQ2FjaGU+IEluc3BlY3RvckFw
cGxpY2F0aW9uQ2FjaGVBZ2VudDo6YnVpbGRPYmplY3RGb3JBcHBsaWNhdGlvbkNhY2hlKGNvbnN0
IFZlY3RvcjxBcHBsaWNhdGlvbkNhY2hlSG9zdDo6UmVzb3VyY2VJbmZvPiYgYXBwbGljYXRpb25D
YWNoZVJlc291cmNlcywgY29uc3QgQXBwbGljYXRpb25DYWNoZUhvc3Q6OkNhY2hlSW5mbyYgYXBw
bGljYXRpb25DYWNoZUluZm8pCiB7Ci0gICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFw
cGxpY2F0aW9uQ2FjaGU6OkFwcGxpY2F0aW9uQ2FjaGU6OmNyZWF0ZSgpCisgICAgcmV0dXJuIFBy
b3RvY29sOjpBcHBsaWNhdGlvbkNhY2hlOjpBcHBsaWNhdGlvbkNhY2hlOjpjcmVhdGUoKQogICAg
ICAgICAuc2V0TWFuaWZlc3RVUkwoYXBwbGljYXRpb25DYWNoZUluZm8ubWFuaWZlc3Quc3RyaW5n
KCkpCiAgICAgICAgIC5zZXRTaXplKGFwcGxpY2F0aW9uQ2FjaGVJbmZvLnNpemUpCiAgICAgICAg
IC5zZXRDcmVhdGlvblRpbWUoYXBwbGljYXRpb25DYWNoZUluZm8uY3JlYXRpb25UaW1lKQpAQCAt
MTgxLDE1ICsxODIsMTUgQEAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2Fj
aGU6OkFwcGxpY2F0aW9uQ2FjaGU+IEluc3BlY3RvckFwcGxpY2F0aW8KICAgICAgICAgLnJlbGVh
c2UoKTsKIH0KIAotUmVmPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXBwbGlj
YXRpb25DYWNoZTo6QXBwbGljYXRpb25DYWNoZVJlc291cmNlPj4gSW5zcGVjdG9yQXBwbGljYXRp
b25DYWNoZUFnZW50OjpidWlsZEFycmF5Rm9yQXBwbGljYXRpb25DYWNoZVJlc291cmNlcyhjb25z
dCBWZWN0b3I8QXBwbGljYXRpb25DYWNoZUhvc3Q6OlJlc291cmNlSW5mbz4mIGFwcGxpY2F0aW9u
Q2FjaGVSZXNvdXJjZXMpCitSZWY8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6QXBwbGljYXRpb25D
YWNoZTo6QXBwbGljYXRpb25DYWNoZVJlc291cmNlPj4gSW5zcGVjdG9yQXBwbGljYXRpb25DYWNo
ZUFnZW50OjpidWlsZEFycmF5Rm9yQXBwbGljYXRpb25DYWNoZVJlc291cmNlcyhjb25zdCBWZWN0
b3I8QXBwbGljYXRpb25DYWNoZUhvc3Q6OlJlc291cmNlSW5mbz4mIGFwcGxpY2F0aW9uQ2FjaGVS
ZXNvdXJjZXMpCiB7Ci0gICAgYXV0byByZXN1bHQgPSBKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZT46OmNy
ZWF0ZSgpOworICAgIGF1dG8gcmVzdWx0ID0gSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6QXBwbGlj
YXRpb25DYWNoZTo6QXBwbGljYXRpb25DYWNoZVJlc291cmNlPjo6Y3JlYXRlKCk7CiAgICAgZm9y
IChhdXRvJiBpbmZvIDogYXBwbGljYXRpb25DYWNoZVJlc291cmNlcykKICAgICAgICAgcmVzdWx0
LT5hZGRJdGVtKGJ1aWxkT2JqZWN0Rm9yQXBwbGljYXRpb25DYWNoZVJlc291cmNlKGluZm8pKTsK
ICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1SZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXBwbGlj
YXRpb25DYWNoZTo6QXBwbGljYXRpb25DYWNoZVJlc291cmNlPiBJbnNwZWN0b3JBcHBsaWNhdGlv
bkNhY2hlQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yQXBwbGljYXRpb25DYWNoZVJlc291cmNlKGNvbnN0
IEFwcGxpY2F0aW9uQ2FjaGVIb3N0OjpSZXNvdXJjZUluZm8mIHJlc291cmNlSW5mbykKK1JlZjxQ
cm90b2NvbDo6QXBwbGljYXRpb25DYWNoZTo6QXBwbGljYXRpb25DYWNoZVJlc291cmNlPiBJbnNw
ZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yQXBwbGljYXRpb25DYWNo
ZVJlc291cmNlKGNvbnN0IEFwcGxpY2F0aW9uQ2FjaGVIb3N0OjpSZXNvdXJjZUluZm8mIHJlc291
cmNlSW5mbykKIHsKICAgICBTdHJpbmdCdWlsZGVyIHR5cGVzOwogCkBAIC0yMDgsNyArMjA5LDcg
QEAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkFwcGxpY2F0aW9u
Q2FjaGVSZXNvdXJjZT4gSW5zcGVjdG9yQXAKICAgICBpZiAocmVzb3VyY2VJbmZvLmlzRXhwbGlj
aXQpCiAgICAgICAgIHR5cGVzLmFwcGVuZExpdGVyYWwoIkV4cGxpY2l0ICIpOwogCi0gICAgcmV0
dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkFwcGxpY2F0aW9uQ2Fj
aGVSZXNvdXJjZTo6Y3JlYXRlKCkKKyAgICByZXR1cm4gUHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2Fj
aGU6OkFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZTo6Y3JlYXRlKCkKICAgICAgICAgLnNldFVybChy
ZXNvdXJjZUluZm8ucmVzb3VyY2Uuc3RyaW5nKCkpCiAgICAgICAgIC5zZXRTaXplKHN0YXRpY19j
YXN0PGludD4ocmVzb3VyY2VJbmZvLnNpemUpKQogICAgICAgICAuc2V0VHlwZSh0eXBlcy50b1N0
cmluZygpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNw
ZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9h
Z2VudHMvSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50LmgKaW5kZXggNTE5ODhmNjE3ZGUx
MWVmMTE3MDhhN2IzOTJjZjBjZTE5NGI0ODZlYS4uODA3Njc5N2NhYjYwOWI5MjM2NzkzZTIyODFh
NTg5YzRjZDE0NjI1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50
cy9JbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5oCkBAIC0zOSwy
NSArMzksMjMgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgRnJhbWU7CiBjbGFzcyBQYWdl
OwogCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQogY2xhc3MgSW5zcGVjdG9yQXBwbGlj
YXRpb25DYWNoZUFnZW50IGZpbmFsIDogcHVibGljIEluc3BlY3RvckFnZW50QmFzZSwgcHVibGlj
IEluc3BlY3Rvcjo6QXBwbGljYXRpb25DYWNoZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7CiAg
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50KTsK
ICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBJbnNwZWN0b3JBcHBs
aWNhdGlvbkNhY2hlQWdlbnQoUGFnZUFnZW50Q29udGV4dCYpOwotICAgIH5JbnNwZWN0b3JBcHBs
aWNhdGlvbkNhY2hlQWdlbnQoKSBvdmVycmlkZTsKKyAgICB+SW5zcGVjdG9yQXBwbGljYXRpb25D
YWNoZUFnZW50KCk7CiAKICAgICAvLyBJbnNwZWN0b3JBZ2VudEJhc2UKLSAgICB2b2lkIGRpZENy
ZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kUm91dGVyKiwgSW5zcGVj
dG9yOjpCYWNrZW5kRGlzcGF0Y2hlciopIG92ZXJyaWRlOwotICAgIHZvaWQgd2lsbERlc3Ryb3lG
cm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKSBvdmVycmlkZTsK
KyAgICB2b2lkIGRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5k
Um91dGVyKiwgSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlciopOworICAgIHZvaWQgd2lsbERl
c3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKTsKIAog
ICAgIC8vIEFwcGxpY2F0aW9uQ2FjaGVCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIKLSAgICB2b2lk
IGVuYWJsZShFcnJvclN0cmluZyYpIG92ZXJyaWRlOwotICAgIHZvaWQgZGlzYWJsZShFcnJvclN0
cmluZyYpIG92ZXJyaWRlOwotICAgIHZvaWQgZ2V0RnJhbWVzV2l0aE1hbmlmZXN0cyhFcnJvclN0
cmluZyYsIFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFwcGxpY2F0
aW9uQ2FjaGU6OkZyYW1lV2l0aE1hbmlmZXN0Pj4mIHJlc3VsdCkgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBnZXRNYW5pZmVzdEZvckZyYW1lKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBmcmFtZUlk
LCBTdHJpbmcqIG1hbmlmZXN0VVJMKSBvdmVycmlkZTsKLSAgICB2b2lkIGdldEFwcGxpY2F0aW9u
Q2FjaGVGb3JGcmFtZShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgZnJhbWVJZCwgUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkFwcGxpY2F0aW9uQ2FjaGU+
Jikgb3ZlcnJpZGU7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lk
PiBlbmFibGUoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+
IGRpc2FibGUoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxK
U09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkZyYW1l
V2l0aE1hbmlmZXN0Pj4+IGdldEZyYW1lc1dpdGhNYW5pZmVzdHMoKTsKKyAgICBJbnNwZWN0b3I6
OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFN0cmluZz4gZ2V0TWFuaWZlc3RGb3JGcmFtZShjb25z
dCBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpGcmFtZUlkJik7CisgICAgSW5zcGVjdG9y
OjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXBwbGlj
YXRpb25DYWNoZTo6QXBwbGljYXRpb25DYWNoZT4+IGdldEFwcGxpY2F0aW9uQ2FjaGVGb3JGcmFt
ZShjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpGcmFtZUlkJik7CiAKICAgICAv
LyBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24KICAgICB2b2lkIHVwZGF0ZUFwcGxpY2F0aW9uQ2Fj
aGVTdGF0dXMoRnJhbWUqKTsKQEAgLTY4LDcgKzY2LDcgQEAgcHJpdmF0ZToKICAgICBSZWY8SlNP
Tjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcHBsaWNhdGlvbkNhY2hlOjpBcHBsaWNh
dGlvbkNhY2hlUmVzb3VyY2U+PiBidWlsZEFycmF5Rm9yQXBwbGljYXRpb25DYWNoZVJlc291cmNl
cyhjb25zdCBWZWN0b3I8QXBwbGljYXRpb25DYWNoZUhvc3Q6OlJlc291cmNlSW5mbz4mKTsKICAg
ICBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXBwbGljYXRpb25DYWNoZTo6QXBwbGljYXRpb25D
YWNoZVJlc291cmNlPiBidWlsZE9iamVjdEZvckFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZShjb25z
dCBBcHBsaWNhdGlvbkNhY2hlSG9zdDo6UmVzb3VyY2VJbmZvJik7CiAKLSAgICBEb2N1bWVudExv
YWRlciogYXNzZXJ0RnJhbWVXaXRoRG9jdW1lbnRMb2FkZXIoRXJyb3JTdHJpbmcmLCBjb25zdCBT
dHJpbmcmIGZyYW1lSWQpOworICAgIERvY3VtZW50TG9hZGVyKiBhc3NlcnRGcmFtZVdpdGhEb2N1
bWVudExvYWRlcihJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZyYsIGNvbnN0IEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OkZyYW1lSWQmKTsKIAogICAgIHN0ZDo6dW5pcXVlX3B0
cjxJbnNwZWN0b3I6OkFwcGxpY2F0aW9uQ2FjaGVGcm9udGVuZERpc3BhdGNoZXI+IG1fZnJvbnRl
bmREaXNwYXRjaGVyOwogICAgIFJlZlB0cjxJbnNwZWN0b3I6OkFwcGxpY2F0aW9uQ2FjaGVCYWNr
ZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ1BVUHJvZmlsZXJBZ2VudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNQVVByb2ZpbGVyQWdlbnQu
Y3BwCmluZGV4IGEwZTZmYzQ1MzE1MTZkOTg5MzIxMTViYjRiOWNhMmIyYzIzMDU2OTMuLjgyODEx
YmU1MWNmNDYzYzQxMTgwYmRlODA0NTgyMmQ0N2ZlMWU1MjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ1BVUHJvZmlsZXJBZ2VudC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDUFVQcm9maWxlckFn
ZW50LmNwcApAQCAtNTMsMTYgKzUzLDE1IEBAIHZvaWQgSW5zcGVjdG9yQ1BVUHJvZmlsZXJBZ2Vu
dDo6ZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEZyb250ZW5kUm91dGVyKiwgQmFjCiAKIHZv
aWQgSW5zcGVjdG9yQ1BVUHJvZmlsZXJBZ2VudDo6d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tl
bmQoRGlzY29ubmVjdFJlYXNvbikKIHsKLSAgICBFcnJvclN0cmluZyBpZ25vcmVkOwotICAgIHN0
b3BUcmFja2luZyhpZ25vcmVkKTsKKyAgICBzdG9wVHJhY2tpbmcoKTsKIAogICAgIG1faW5zdHJ1
bWVudGluZ0FnZW50cy5zZXRQZXJzaXN0ZW50Q1BVUHJvZmlsZXJBZ2VudChudWxscHRyKTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JDUFVQcm9maWxlckFnZW50OjpzdGFydFRyYWNraW5nKEVycm9yU3Ry
aW5nJikKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckNQVVByb2ZpbGVy
QWdlbnQ6OnN0YXJ0VHJhY2tpbmcoKQogewogICAgIGlmIChtX3RyYWNraW5nKQotICAgICAgICBy
ZXR1cm47CisgICAgICAgIHJldHVybiB7IH07CiAKICAgICBSZXNvdXJjZVVzYWdlVGhyZWFkOjph
ZGRPYnNlcnZlcih0aGlzLCBDUFUsIFt0aGlzXSAoY29uc3QgUmVzb3VyY2VVc2FnZURhdGEmIGRh
dGEpIHsKICAgICAgICAgY29sbGVjdFNhbXBsZShkYXRhKTsKQEAgLTcxLDE4ICs3MCwyMiBAQCB2
b2lkIEluc3BlY3RvckNQVVByb2ZpbGVyQWdlbnQ6OnN0YXJ0VHJhY2tpbmcoRXJyb3JTdHJpbmcm
KQogICAgIG1fdHJhY2tpbmcgPSB0cnVlOwogCiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPnRy
YWNraW5nU3RhcnQobV9lbnZpcm9ubWVudC5leGVjdXRpb25TdG9wd2F0Y2goKS5lbGFwc2VkVGlt
ZSgpLnNlY29uZHMoKSk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckNQ
VVByb2ZpbGVyQWdlbnQ6OnN0b3BUcmFja2luZyhFcnJvclN0cmluZyYpCitQcm90b2NvbDo6RXJy
b3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JDUFVQcm9maWxlckFnZW50OjpzdG9wVHJhY2tpbmco
KQogewogICAgIGlmICghbV90cmFja2luZykKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1
cm4geyB9OwogCiAgICAgUmVzb3VyY2VVc2FnZVRocmVhZDo6cmVtb3ZlT2JzZXJ2ZXIodGhpcyk7
CiAKICAgICBtX3RyYWNraW5nID0gZmFsc2U7CiAKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+
dHJhY2tpbmdDb21wbGV0ZShtX2Vudmlyb25tZW50LmV4ZWN1dGlvblN0b3B3YXRjaCgpLmVsYXBz
ZWRUaW1lKCkuc2Vjb25kcygpKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKIHN0YXRpYyBSZWY8
UHJvdG9jb2w6OkNQVVByb2ZpbGVyOjpUaHJlYWRJbmZvPiBidWlsZFRocmVhZEluZm8oY29uc3Qg
VGhyZWFkQ1BVSW5mbyYgdGhyZWFkKQpAQCAtMTEzLDcgKzExNiw3IEBAIHZvaWQgSW5zcGVjdG9y
Q1BVUHJvZmlsZXJBZ2VudDo6Y29sbGVjdFNhbXBsZShjb25zdCBSZXNvdXJjZVVzYWdlRGF0YSYg
ZGF0YSkKICAgICAgICAgLnJlbGVhc2UoKTsKIAogICAgIGlmICghZGF0YS5jcHVUaHJlYWRzLmlz
RW1wdHkoKSkgewotICAgICAgICBSZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6Q1BVUHJv
ZmlsZXI6OlRocmVhZEluZm8+PiB0aHJlYWRzID0gSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6Q1BV
UHJvZmlsZXI6OlRocmVhZEluZm8+OjpjcmVhdGUoKTsKKyAgICAgICAgYXV0byB0aHJlYWRzID0g
SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6Q1BVUHJvZmlsZXI6OlRocmVhZEluZm8+OjpjcmVhdGUo
KTsKICAgICAgICAgZm9yIChhdXRvJiB0aHJlYWRJbmZvIDogZGF0YS5jcHVUaHJlYWRzKQogICAg
ICAgICAgICAgdGhyZWFkcy0+YWRkSXRlbShidWlsZFRocmVhZEluZm8odGhyZWFkSW5mbykpOwog
ICAgICAgICBldmVudC0+c2V0VGhyZWFkcyhXVEZNb3ZlKHRocmVhZHMpKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ1BVUHJvZmlsZXJBZ2Vu
dC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDUFVQcm9maWxl
ckFnZW50LmgKaW5kZXggNGVlOGU5Nzg1M2Q3MTJkM2RhNjQzOWI5ODk3ZTg2NWE4OTZkYmZmZi4u
ZmU1ZTE4NWFiZGIxYzRmMmYxM2I0ZDhhMDdhOTJiZmQ3OWU2OWQwYiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDUFVQcm9maWxlckFnZW50LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDUFVQcm9maWxl
ckFnZW50LmgKQEAgLTM0LDIyICszNCwyMCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXR5
cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCiBjbGFzcyBJbnNwZWN0b3JDUFVQcm9maWxlckFn
ZW50IGZpbmFsIDogcHVibGljIEluc3BlY3RvckFnZW50QmFzZSwgcHVibGljIEluc3BlY3Rvcjo6
Q1BVUHJvZmlsZXJCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewogICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKEluc3BlY3RvckNQVVByb2ZpbGVyQWdlbnQpOwogICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOwogcHVibGljOgogICAgIEluc3BlY3RvckNQVVByb2ZpbGVyQWdlbnQoUGFnZUFnZW50
Q29udGV4dCYpOwotICAgIH5JbnNwZWN0b3JDUFVQcm9maWxlckFnZW50KCkgb3ZlcnJpZGU7Cisg
ICAgfkluc3BlY3RvckNQVVByb2ZpbGVyQWdlbnQoKTsKIAogICAgIC8vIEluc3BlY3RvckFnZW50
QmFzZQotICAgIHZvaWQgZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJv
bnRlbmRSb3V0ZXIqLCBJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyKikgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCB3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5l
Y3RSZWFzb24pIG92ZXJyaWRlOworICAgIHZvaWQgZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5k
KEluc3BlY3Rvcjo6RnJvbnRlbmRSb3V0ZXIqLCBJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVy
Kik7CisgICAgdm9pZCB3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkRp
c2Nvbm5lY3RSZWFzb24pOwogCiAgICAgLy8gQ1BVUHJvZmlsZXJCYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXIKLSAgICB2b2lkIHN0YXJ0VHJhY2tpbmcoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKLSAg
ICB2b2lkIHN0b3BUcmFja2luZyhFcnJvclN0cmluZyYpIG92ZXJyaWRlOworICAgIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc3RhcnRUcmFja2luZygpOworICAgIElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc3RvcFRyYWNraW5nKCk7CiAK
IHByaXZhdGU6CiAgICAgdm9pZCBjb2xsZWN0U2FtcGxlKGNvbnN0IFJlc291cmNlVXNhZ2VEYXRh
Jik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rv
ckNTU0FnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9y
Q1NTQWdlbnQuY3BwCmluZGV4IDU2NWViZTA4MmMwNzhiYjY2ODc3NDAzODllYjM3MmVlMTE5Yjc0
MWIuLjU5NGM4NDVjMThhMzI1ZDUwZDllNWUwMzgyMTA5ZjkyMmIzYmNkMjEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ1NTQWdlbnQuY3Bw
CkBAIC05MiwxMCArOTIsNyBAQCBzdGF0aWMgdW5zaWduZWQgY29tcHV0ZVBzZXVkb0NsYXNzTWFz
ayhjb25zdCBKU09OOjpBcnJheSYgcHNldWRvQ2xhc3NBcnJheSkKIAogICAgIHVuc2lnbmVkIHJl
c3VsdCA9IFBzZXVkb0NsYXNzTm9uZTsKICAgICBmb3IgKGF1dG8mIHBzZXVkb0NsYXNzVmFsdWUg
OiBwc2V1ZG9DbGFzc0FycmF5KSB7Ci0gICAgICAgIFN0cmluZyBwc2V1ZG9DbGFzczsKLSAgICAg
ICAgYm9vbCBzdWNjZXNzID0gcHNldWRvQ2xhc3NWYWx1ZS0+YXNTdHJpbmcocHNldWRvQ2xhc3Mp
OwotICAgICAgICBpZiAoIXN1Y2Nlc3MpCi0gICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
YXV0byBwc2V1ZG9DbGFzcyA9IHBzZXVkb0NsYXNzVmFsdWUtPmFzU3RyaW5nKCk7CiAgICAgICAg
IGlmIChwc2V1ZG9DbGFzcyA9PSBhY3RpdmUpCiAgICAgICAgICAgICByZXN1bHQgfD0gUHNldWRv
Q2xhc3NBY3RpdmU7CiAgICAgICAgIGVsc2UgaWYgKHBzZXVkb0NsYXNzID09IGhvdmVyKQpAQCAt
MzEyLDggKzMwOSw3IEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmRpZENyZWF0ZUZyb250ZW5k
QW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kUm91dGVyKiwKIAogdm9pZCBJbnNwZWN0b3JD
U1NBZ2VudDo6d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25u
ZWN0UmVhc29uKQogewotICAgIFN0cmluZyB1bnVzZWQ7Ci0gICAgZGlzYWJsZSh1bnVzZWQpOwor
ICAgIGRpc2FibGUoKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6cmVzZXQoKQpAQCAt
MzI3LDEwICszMjMsMTAgQEAgdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6cmVzZXQoKQogICAgIHJl
c2V0UHNldWRvU3RhdGVzKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmVuYWJsZShF
cnJvclN0cmluZyYpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JDU1NB
Z2VudDo6ZW5hYmxlKCkKIHsKICAgICBpZiAobV9pbnN0cnVtZW50aW5nQWdlbnRzLmVuYWJsZWRD
U1NBZ2VudCgpID09IHRoaXMpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHsgfTsK
IAogICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy5zZXRFbmFibGVkQ1NTQWdlbnQodGhpcyk7CiAK
QEAgLTMzOCwxMyArMzM0LDE3IEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmVuYWJsZShFcnJv
clN0cmluZyYpCiAgICAgICAgIGZvciAoYXV0byogZG9jdW1lbnQgOiBkb21BZ2VudC0+ZG9jdW1l
bnRzKCkpCiAgICAgICAgICAgICBhY3RpdmVTdHlsZVNoZWV0c1VwZGF0ZWQoKmRvY3VtZW50KTsK
ICAgICB9CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckNTU0FnZW50Ojpk
aXNhYmxlKEVycm9yU3RyaW5nJikKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3Bl
Y3RvckNTU0FnZW50OjpkaXNhYmxlKCkKIHsKICAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMuc2V0
RW5hYmxlZENTU0FnZW50KG51bGxwdHIpOwogCiAgICAgcmVzZXQoKTsKKworICAgIHJldHVybiB7
IH07CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmRvY3VtZW50RGV0YWNoZWQoRG9jdW1l
bnQmIGRvY3VtZW50KQpAQCAtMzg3LDcgKzM4Nyw3IEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6
OnNldEFjdGl2ZVN0eWxlU2hlZXRzRm9yRG9jdW1lbnQoRG9jdW1lbnQmIGRvY3VtZW50LCBWZWN0
CiAgICAgICAgIHByZXZpb3VzbHlLbm93bkFjdGl2ZVN0eWxlU2hlZXRzLnJlbW92ZShjc3NTdHls
ZVNoZWV0KTsKICAgICAgICAgUmVmUHRyPEluc3BlY3RvclN0eWxlU2hlZXQ+IGluc3BlY3RvclN0
eWxlU2hlZXQgPSBtX2Nzc1N0eWxlU2hlZXRUb0luc3BlY3RvclN0eWxlU2hlZXQuZ2V0KGNzc1N0
eWxlU2hlZXQpOwogICAgICAgICBpZiAobV9pZFRvSW5zcGVjdG9yU3R5bGVTaGVldC5jb250YWlu
cyhpbnNwZWN0b3JTdHlsZVNoZWV0LT5pZCgpKSkgewotICAgICAgICAgICAgU3RyaW5nIGlkID0g
dW5iaW5kU3R5bGVTaGVldChpbnNwZWN0b3JTdHlsZVNoZWV0LmdldCgpKTsKKyAgICAgICAgICAg
IGF1dG8gaWQgPSB1bmJpbmRTdHlsZVNoZWV0KGluc3BlY3RvclN0eWxlU2hlZXQuZ2V0KCkpOwog
ICAgICAgICAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPnN0eWxlU2hlZXRSZW1vdmVkKGlkKTsK
ICAgICAgICAgfQogICAgIH0KQEAgLTM5Niw3ICszOTYsOCBAQCB2b2lkIEluc3BlY3RvckNTU0Fn
ZW50OjpzZXRBY3RpdmVTdHlsZVNoZWV0c0ZvckRvY3VtZW50KERvY3VtZW50JiBkb2N1bWVudCwg
VmVjdAogICAgICAgICBwcmV2aW91c2x5S25vd25BY3RpdmVTdHlsZVNoZWV0cy5hZGQoY3NzU3R5
bGVTaGVldCk7CiAgICAgICAgIGlmICghbV9jc3NTdHlsZVNoZWV0VG9JbnNwZWN0b3JTdHlsZVNo
ZWV0LmNvbnRhaW5zKGNzc1N0eWxlU2hlZXQpKSB7CiAgICAgICAgICAgICBJbnNwZWN0b3JTdHls
ZVNoZWV0KiBpbnNwZWN0b3JTdHlsZVNoZWV0ID0gYmluZFN0eWxlU2hlZXQoY3NzU3R5bGVTaGVl
dCk7Ci0gICAgICAgICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+c3R5bGVTaGVldEFkZGVkKGlu
c3BlY3RvclN0eWxlU2hlZXQtPmJ1aWxkT2JqZWN0Rm9yU3R5bGVTaGVldEluZm8oKSk7CisgICAg
ICAgICAgICBpZiAoYXV0byBoZWFkZXIgPSBpbnNwZWN0b3JTdHlsZVNoZWV0LT5idWlsZE9iamVj
dEZvclN0eWxlU2hlZXRJbmZvKCkpCisgICAgICAgICAgICAgICAgbV9mcm9udGVuZERpc3BhdGNo
ZXItPnN0eWxlU2hlZXRBZGRlZChoZWFkZXIucmVsZWFzZU5vbk51bGwoKSk7CiAgICAgICAgIH0K
ICAgICB9CiB9CkBAIC00MTAsNyArNDExLDcgQEAgYm9vbCBJbnNwZWN0b3JDU1NBZ2VudDo6Zm9y
Y2VQc2V1ZG9TdGF0ZShjb25zdCBFbGVtZW50JiBlbGVtZW50LCBDU1NTZWxlY3Rvcjo6UHMKICAg
ICBpZiAoIWRvbUFnZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpbnQgbm9kZUlk
ID0gZG9tQWdlbnQtPmJvdW5kTm9kZUlkKCZlbGVtZW50KTsKKyAgICBhdXRvIG5vZGVJZCA9IGRv
bUFnZW50LT5ib3VuZE5vZGVJZCgmZWxlbWVudCk7CiAgICAgaWYgKCFub2RlSWQpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIApAQCAtNDI5LDM3ICs0MzAsMzcgQEAgYm9vbCBJbnNwZWN0b3JDU1NB
Z2VudDo6Zm9yY2VQc2V1ZG9TdGF0ZShjb25zdCBFbGVtZW50JiBlbGVtZW50LCBDU1NTZWxlY3Rv
cjo6UHMKICAgICB9CiB9CiAKLXN0YXRpYyBPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpD
U1M6OlBzZXVkb0lkPiBwcm90b2NvbFZhbHVlRm9yUHNldWRvSWQoUHNldWRvSWQgcHNldWRvSWQp
CitzdGF0aWMgT3B0aW9uYWw8UHJvdG9jb2w6OkNTUzo6UHNldWRvSWQ+IHByb3RvY29sVmFsdWVG
b3JQc2V1ZG9JZChQc2V1ZG9JZCBwc2V1ZG9JZCkKIHsKICAgICBzd2l0Y2ggKHBzZXVkb0lkKSB7
CiAgICAgY2FzZSBQc2V1ZG9JZDo6Rmlyc3RMaW5lOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9y
OjpQcm90b2NvbDo6Q1NTOjpQc2V1ZG9JZDo6Rmlyc3RMaW5lOworICAgICAgICByZXR1cm4gUHJv
dG9jb2w6OkNTUzo6UHNldWRvSWQ6OkZpcnN0TGluZTsKICAgICBjYXNlIFBzZXVkb0lkOjpGaXJz
dExldHRlcjoKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6UHNldWRv
SWQ6OkZpcnN0TGV0dGVyOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OkNTUzo6UHNldWRvSWQ6
OkZpcnN0TGV0dGVyOwogICAgIGNhc2UgUHNldWRvSWQ6Ok1hcmtlcjoKLSAgICAgICAgcmV0dXJu
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6UHNldWRvSWQ6Ok1hcmtlcjsKKyAgICAgICAgcmV0
dXJuIFByb3RvY29sOjpDU1M6OlBzZXVkb0lkOjpNYXJrZXI7CiAgICAgY2FzZSBQc2V1ZG9JZDo6
QmVmb3JlOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpQc2V1ZG9J
ZDo6QmVmb3JlOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OkNTUzo6UHNldWRvSWQ6OkJlZm9y
ZTsKICAgICBjYXNlIFBzZXVkb0lkOjpBZnRlcjoKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkNTUzo6UHNldWRvSWQ6OkFmdGVyOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6
OkNTUzo6UHNldWRvSWQ6OkFmdGVyOwogICAgIGNhc2UgUHNldWRvSWQ6OlNlbGVjdGlvbjoKLSAg
ICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6UHNldWRvSWQ6OlNlbGVjdGlv
bjsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpDU1M6OlBzZXVkb0lkOjpTZWxlY3Rpb247CiAg
ICAgY2FzZSBQc2V1ZG9JZDo6SGlnaGxpZ2h0OgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQ
cm90b2NvbDo6Q1NTOjpQc2V1ZG9JZDo6SGlnaGxpZ2h0OworICAgICAgICByZXR1cm4gUHJvdG9j
b2w6OkNTUzo6UHNldWRvSWQ6OkhpZ2hsaWdodDsKICAgICBjYXNlIFBzZXVkb0lkOjpTY3JvbGxi
YXI6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlBzZXVkb0lkOjpT
Y3JvbGxiYXI7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6Q1NTOjpQc2V1ZG9JZDo6U2Nyb2xs
YmFyOwogICAgIGNhc2UgUHNldWRvSWQ6OlNjcm9sbGJhclRodW1iOgotICAgICAgICByZXR1cm4g
SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpQc2V1ZG9JZDo6U2Nyb2xsYmFyVGh1bWI7CisgICAg
ICAgIHJldHVybiBQcm90b2NvbDo6Q1NTOjpQc2V1ZG9JZDo6U2Nyb2xsYmFyVGh1bWI7CiAgICAg
Y2FzZSBQc2V1ZG9JZDo6U2Nyb2xsYmFyQnV0dG9uOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9y
OjpQcm90b2NvbDo6Q1NTOjpQc2V1ZG9JZDo6U2Nyb2xsYmFyQnV0dG9uOworICAgICAgICByZXR1
cm4gUHJvdG9jb2w6OkNTUzo6UHNldWRvSWQ6OlNjcm9sbGJhckJ1dHRvbjsKICAgICBjYXNlIFBz
ZXVkb0lkOjpTY3JvbGxiYXJUcmFjazoKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkNTUzo6UHNldWRvSWQ6OlNjcm9sbGJhclRyYWNrOworICAgICAgICByZXR1cm4gUHJvdG9j
b2w6OkNTUzo6UHNldWRvSWQ6OlNjcm9sbGJhclRyYWNrOwogICAgIGNhc2UgUHNldWRvSWQ6OlNj
cm9sbGJhclRyYWNrUGllY2U6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpD
U1M6OlBzZXVkb0lkOjpTY3JvbGxiYXJUcmFja1BpZWNlOworICAgICAgICByZXR1cm4gUHJvdG9j
b2w6OkNTUzo6UHNldWRvSWQ6OlNjcm9sbGJhclRyYWNrUGllY2U7CiAgICAgY2FzZSBQc2V1ZG9J
ZDo6U2Nyb2xsYmFyQ29ybmVyOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6
Q1NTOjpQc2V1ZG9JZDo6U2Nyb2xsYmFyQ29ybmVyOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6
OkNTUzo6UHNldWRvSWQ6OlNjcm9sbGJhckNvcm5lcjsKICAgICBjYXNlIFBzZXVkb0lkOjpSZXNp
emVyOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpQc2V1ZG9JZDo6
UmVzaXplcjsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpDU1M6OlBzZXVkb0lkOjpSZXNpemVy
OwogCiAgICAgZGVmYXVsdDoKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC00Njcs
MzYgKzQ2OCwzNyBAQCBzdGF0aWMgT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpQ
c2V1ZG9JZD4gcHJvdG9jb2xWYWx1ZUZvclBzZXVkb0lkKFBzZQogICAgIH0KIH0KIAotdm9pZCBJ
bnNwZWN0b3JDU1NBZ2VudDo6Z2V0TWF0Y2hlZFN0eWxlc0Zvck5vZGUoRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBpbnQgbm9kZUlkLCBjb25zdCBib29sKiBpbmNsdWRlUHNldWRvLCBjb25zdCBi
b29sKiBpbmNsdWRlSW5oZXJpdGVkLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpDU1M6OlJ1bGVNYXRjaD4+JiBtYXRjaGVkQ1NTUnVsZXMsIFJlZlB0cjxKU09OOjpB
cnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6UHNldWRvSWRNYXRjaGVzPj4mIHBzZXVk
b0lkTWF0Y2hlcywgUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NT
OjpJbmhlcml0ZWRTdHlsZUVudHJ5Pj4mIGluaGVyaXRlZEVudHJpZXMpCitQcm90b2NvbDo6RXJy
b3JTdHJpbmdPcjxzdGQ6OnR1cGxlPFJlZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpDU1M6
OlJ1bGVNYXRjaD4+LCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6Q1NTOjpQc2V1ZG9J
ZE1hdGNoZXM+PiwgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkNTUzo6SW5oZXJpdGVk
U3R5bGVFbnRyeT4+Pj4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldE1hdGNoZWRTdHlsZXNGb3JOb2Rl
KFByb3RvY29sOjpET006Ok5vZGVJZCBub2RlSWQsIE9wdGlvbmFsPGJvb2w+JiYgaW5jbHVkZVBz
ZXVkbywgT3B0aW9uYWw8Ym9vbD4mJiBpbmNsdWRlSW5oZXJpdGVkKQogeworICAgIFByb3RvY29s
OjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBlbGVt
ZW50Rm9ySWQoZXJyb3JTdHJpbmcsIG5vZGVJZCk7CiAgICAgaWYgKCFlbGVtZW50KQotICAgICAg
ICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAK
ICAgICBFbGVtZW50KiBvcmlnaW5hbEVsZW1lbnQgPSBlbGVtZW50OwogICAgIFBzZXVkb0lkIGVs
ZW1lbnRQc2V1ZG9JZCA9IGVsZW1lbnQtPnBzZXVkb0lkKCk7CiAgICAgaWYgKGVsZW1lbnRQc2V1
ZG9JZCAhPSBQc2V1ZG9JZDo6Tm9uZSkgewogICAgICAgICBlbGVtZW50ID0gZG93bmNhc3Q8UHNl
dWRvRWxlbWVudD4oKmVsZW1lbnQpLmhvc3RFbGVtZW50KCk7Ci0gICAgICAgIGlmICghZWxlbWVu
dCkgewotICAgICAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWlzc2luZyBwYXJlbnQgb2YgcHNldWRv
LWVsZW1lbnQgbm9kZSBmb3IgZ2l2ZW4gbm9kZUlkIl9zOwotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB9CisgICAgICAgIGlmICghZWxlbWVudCkKKyAgICAgICAgICAgIHJldHVybiBtYWtl
VW5leHBlY3RlZCgiTWlzc2luZyBwYXJlbnQgb2YgcHNldWRvLWVsZW1lbnQgbm9kZSBmb3IgZ2l2
ZW4gbm9kZUlkIl9zKTsKICAgICB9CiAKICAgICAvLyBNYXRjaGVkIHJ1bGVzLgogICAgIGF1dG8m
IHN0eWxlUmVzb2x2ZXIgPSBlbGVtZW50LT5zdHlsZVJlc29sdmVyKCk7CiAgICAgYXV0byBtYXRj
aGVkUnVsZXMgPSBzdHlsZVJlc29sdmVyLnBzZXVkb1N0eWxlUnVsZXNGb3JFbGVtZW50KGVsZW1l
bnQsIGVsZW1lbnRQc2V1ZG9JZCwgU3R5bGU6OlJlc29sdmVyOjpBbGxDU1NSdWxlcyk7Ci0gICAg
bWF0Y2hlZENTU1J1bGVzID0gYnVpbGRBcnJheUZvck1hdGNoZWRSdWxlTGlzdChtYXRjaGVkUnVs
ZXMsIHN0eWxlUmVzb2x2ZXIsICplbGVtZW50LCBlbGVtZW50UHNldWRvSWQpOworICAgIGF1dG8g
bWF0Y2hlZENTU1J1bGVzID0gYnVpbGRBcnJheUZvck1hdGNoZWRSdWxlTGlzdChtYXRjaGVkUnVs
ZXMsIHN0eWxlUmVzb2x2ZXIsICplbGVtZW50LCBlbGVtZW50UHNldWRvSWQpOworICAgIFJlZlB0
cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpDU1M6OlBzZXVkb0lkTWF0Y2hlcz4+IHBzZXVkb0Vs
ZW1lbnRzOworICAgIFJlZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpDU1M6OkluaGVyaXRl
ZFN0eWxlRW50cnk+PiBpbmhlcml0ZWQ7CiAKICAgICBpZiAoIW9yaWdpbmFsRWxlbWVudC0+aXNQ
c2V1ZG9FbGVtZW50KCkpIHsKLSAgICAgICAgLy8gUHNldWRvIGVsZW1lbnRzLgogICAgICAgICBp
ZiAoIWluY2x1ZGVQc2V1ZG8gfHwgKmluY2x1ZGVQc2V1ZG8pIHsKLSAgICAgICAgICAgIGF1dG8g
cHNldWRvRWxlbWVudHMgPSBKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6
UHNldWRvSWRNYXRjaGVzPjo6Y3JlYXRlKCk7CisgICAgICAgICAgICBwc2V1ZG9FbGVtZW50cyA9
IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkNTUzo6UHNldWRvSWRNYXRjaGVzPjo6Y3JlYXRlKCk7
CiAgICAgICAgICAgICBmb3IgKFBzZXVkb0lkIHBzZXVkb0lkID0gUHNldWRvSWQ6OkZpcnN0UHVi
bGljUHNldWRvSWQ7IHBzZXVkb0lkIDwgUHNldWRvSWQ6OkFmdGVyTGFzdEludGVybmFsUHNldWRv
SWQ7IHBzZXVkb0lkID0gc3RhdGljX2Nhc3Q8UHNldWRvSWQ+KHN0YXRpY19jYXN0PHVuc2lnbmVk
Pihwc2V1ZG9JZCkgKyAxKSkgewogICAgICAgICAgICAgICAgIGlmIChhdXRvIHByb3RvY29sUHNl
dWRvSWQgPSBwcm90b2NvbFZhbHVlRm9yUHNldWRvSWQocHNldWRvSWQpKSB7CiAgICAgICAgICAg
ICAgICAgICAgIGF1dG8gbWF0Y2hlZFJ1bGVzID0gc3R5bGVSZXNvbHZlci5wc2V1ZG9TdHlsZVJ1
bGVzRm9yRWxlbWVudChlbGVtZW50LCBwc2V1ZG9JZCwgU3R5bGU6OlJlc29sdmVyOjpBbGxDU1NS
dWxlcyk7CiAgICAgICAgICAgICAgICAgICAgIGlmICghbWF0Y2hlZFJ1bGVzLmlzRW1wdHkoKSkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBtYXRjaGVzID0gSW5zcGVjdG9yOjpQcm90
b2NvbDo6Q1NTOjpQc2V1ZG9JZE1hdGNoZXM6OmNyZWF0ZSgpCisgICAgICAgICAgICAgICAgICAg
ICAgICBhdXRvIG1hdGNoZXMgPSBQcm90b2NvbDo6Q1NTOjpQc2V1ZG9JZE1hdGNoZXM6OmNyZWF0
ZSgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNldFBzZXVkb0lkKHByb3RvY29sUHNl
dWRvSWQudmFsdWUoKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0TWF0Y2hlcyhi
dWlsZEFycmF5Rm9yTWF0Y2hlZFJ1bGVMaXN0KG1hdGNoZWRSdWxlcywgc3R5bGVSZXNvbHZlciwg
KmVsZW1lbnQsIHBzZXVkb0lkKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVsZWFz
ZSgpOwpAQCAtNTA0LDY2ICs1MDYsNjYgQEAgdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0TWF0
Y2hlZFN0eWxlc0Zvck5vZGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgbm8KICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgcHNldWRvSWRNYXRjaGVzID0gV1RGTW92ZShwc2V1ZG9FbGVtZW50cyk7CiAgICAg
ICAgIH0KIAotICAgICAgICAvLyBJbmhlcml0ZWQgc3R5bGVzLgogICAgICAgICBpZiAoIWluY2x1
ZGVJbmhlcml0ZWQgfHwgKmluY2x1ZGVJbmhlcml0ZWQpIHsKLSAgICAgICAgICAgIGF1dG8gZW50
cmllcyA9IEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpJbmhlcml0ZWRT
dHlsZUVudHJ5Pjo6Y3JlYXRlKCk7CisgICAgICAgICAgICBpbmhlcml0ZWQgPSBKU09OOjpBcnJh
eU9mPFByb3RvY29sOjpDU1M6OkluaGVyaXRlZFN0eWxlRW50cnk+OjpjcmVhdGUoKTsKICAgICAg
ICAgICAgIGZvciAoYXV0byYgYW5jZXN0b3IgOiBhbmNlc3RvcnNPZlR5cGU8RWxlbWVudD4oKmVs
ZW1lbnQpKSB7CiAgICAgICAgICAgICAgICAgYXV0byYgcGFyZW50U3R5bGVSZXNvbHZlciA9IGFu
Y2VzdG9yLnN0eWxlUmVzb2x2ZXIoKTsKICAgICAgICAgICAgICAgICBhdXRvIHBhcmVudE1hdGNo
ZWRSdWxlcyA9IHBhcmVudFN0eWxlUmVzb2x2ZXIuc3R5bGVSdWxlc0ZvckVsZW1lbnQoJmFuY2Vz
dG9yLCBTdHlsZTo6UmVzb2x2ZXI6OkFsbENTU1J1bGVzKTsKLSAgICAgICAgICAgICAgICBhdXRv
IGVudHJ5ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpJbmhlcml0ZWRTdHlsZUVudHJ5Ojpj
cmVhdGUoKQorICAgICAgICAgICAgICAgIGF1dG8gZW50cnkgPSBQcm90b2NvbDo6Q1NTOjpJbmhl
cml0ZWRTdHlsZUVudHJ5OjpjcmVhdGUoKQogICAgICAgICAgICAgICAgICAgICAuc2V0TWF0Y2hl
ZENTU1J1bGVzKGJ1aWxkQXJyYXlGb3JNYXRjaGVkUnVsZUxpc3QocGFyZW50TWF0Y2hlZFJ1bGVz
LCBzdHlsZVJlc29sdmVyLCBhbmNlc3RvciwgUHNldWRvSWQ6Ok5vbmUpKQogICAgICAgICAgICAg
ICAgICAgICAucmVsZWFzZSgpOwogICAgICAgICAgICAgICAgIGlmIChpczxTdHlsZWRFbGVtZW50
PihhbmNlc3RvcikgJiYgZG93bmNhc3Q8U3R5bGVkRWxlbWVudD4oYW5jZXN0b3IpLmNzc29tU3R5
bGUoKS5sZW5ndGgoKSkgewogICAgICAgICAgICAgICAgICAgICBhdXRvJiBzdHlsZVNoZWV0ID0g
YXNJbnNwZWN0b3JTdHlsZVNoZWV0KGRvd25jYXN0PFN0eWxlZEVsZW1lbnQ+KGFuY2VzdG9yKSk7
CiAgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5zZXRJbmxpbmVTdHlsZShzdHlsZVNoZWV0LmJ1
aWxkT2JqZWN0Rm9yU3R5bGUoc3R5bGVTaGVldC5zdHlsZUZvcklkKEluc3BlY3RvckNTU0lkKHN0
eWxlU2hlZXQuaWQoKSwgMCkpKSk7CiAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgZW50cmllcy0+YWRkSXRlbShXVEZNb3ZlKGVudHJ5KSk7CisgICAgICAgICAgICAgICAgaW5o
ZXJpdGVkLT5hZGRJdGVtKFdURk1vdmUoZW50cnkpKTsKICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgaW5oZXJpdGVkRW50cmllcyA9IFdURk1vdmUoZW50cmllcyk7CiAgICAgICAgIH0KICAg
ICB9CisKKyAgICByZXR1cm4geyB7IFdURk1vdmUobWF0Y2hlZENTU1J1bGVzKSwgV1RGTW92ZShw
c2V1ZG9FbGVtZW50cyksIFdURk1vdmUoaW5oZXJpdGVkKSB9IH07CiB9CiAKLXZvaWQgSW5zcGVj
dG9yQ1NTQWdlbnQ6OmdldElubGluZVN0eWxlc0Zvck5vZGUoRXJyb3JTdHJpbmcmIGVycm9yU3Ry
aW5nLCBpbnQgbm9kZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHls
ZT4mIGlubGluZVN0eWxlLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHls
ZT4mIGF0dHJpYnV0ZXNTdHlsZSkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHN0ZDo6dHVwbGU8
UmVmUHRyPFByb3RvY29sOjpDU1M6OkNTU1N0eWxlPiAvKiBpbmxpbmVTdHlsZSAqLywgUmVmUHRy
PFByb3RvY29sOjpDU1M6OkNTU1N0eWxlPiAvKiBhdHRyaWJ1dGVzU3R5bGUgKi8+PiBJbnNwZWN0
b3JDU1NBZ2VudDo6Z2V0SW5saW5lU3R5bGVzRm9yTm9kZShQcm90b2NvbDo6RE9NOjpOb2RlSWQg
bm9kZUlkKQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAg
IGF1dG8qIGVsZW1lbnQgPSBlbGVtZW50Rm9ySWQoZXJyb3JTdHJpbmcsIG5vZGVJZCk7CiAgICAg
aWYgKCFpczxTdHlsZWRFbGVtZW50PihlbGVtZW50KSkKLSAgICAgICAgcmV0dXJuOworICAgICAg
ICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCiAgICAgYXV0byYgc3R5bGVk
RWxlbWVudCA9IGRvd25jYXN0PFN0eWxlZEVsZW1lbnQ+KCplbGVtZW50KTsKICAgICBhdXRvJiBz
dHlsZVNoZWV0ID0gYXNJbnNwZWN0b3JTdHlsZVNoZWV0KHN0eWxlZEVsZW1lbnQpOwotICAgIGlu
bGluZVN0eWxlID0gc3R5bGVTaGVldC5idWlsZE9iamVjdEZvclN0eWxlKCZzdHlsZWRFbGVtZW50
LmNzc29tU3R5bGUoKSk7Ci0gICAgaWYgKGF1dG8gYXR0cmlidXRlcyA9IGJ1aWxkT2JqZWN0Rm9y
QXR0cmlidXRlc1N0eWxlKHN0eWxlZEVsZW1lbnQpKQotICAgICAgICBhdHRyaWJ1dGVzU3R5bGUg
PSBXVEZNb3ZlKGF0dHJpYnV0ZXMpOwotICAgIGVsc2UKLSAgICAgICAgYXR0cmlidXRlc1N0eWxl
ID0gbnVsbHB0cjsKKyAgICByZXR1cm4geyB7IHN0eWxlU2hlZXQuYnVpbGRPYmplY3RGb3JTdHls
ZSgmc3R5bGVkRWxlbWVudC5jc3NvbVN0eWxlKCkpLCBidWlsZE9iamVjdEZvckF0dHJpYnV0ZXNT
dHlsZShzdHlsZWRFbGVtZW50KSB9IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6Omdl
dENvbXB1dGVkU3R5bGVGb3JOb2RlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJ
ZCwgUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NDb21w
dXRlZFN0eWxlUHJvcGVydHk+PiYgc3R5bGUpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8
SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6Q1NTOjpDU1NDb21wdXRlZFN0eWxlUHJvcGVydHk+Pj4g
SW5zcGVjdG9yQ1NTQWdlbnQ6OmdldENvbXB1dGVkU3R5bGVGb3JOb2RlKFByb3RvY29sOjpET006
Ok5vZGVJZCBub2RlSWQpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5n
OworCiAgICAgYXV0byogZWxlbWVudCA9IGVsZW1lbnRGb3JJZChlcnJvclN0cmluZywgbm9kZUlk
KTsKICAgICBpZiAoIWVsZW1lbnQpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1h
a2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgIGF1dG8gY29tcHV0ZWRTdHlsZUluZm8g
PSBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb246OmNyZWF0ZSgqZWxlbWVudCwgdHJ1ZSk7CiAg
ICAgYXV0byBpbnNwZWN0b3JTdHlsZSA9IEluc3BlY3RvclN0eWxlOjpjcmVhdGUoSW5zcGVjdG9y
Q1NTSWQoKSwgV1RGTW92ZShjb21wdXRlZFN0eWxlSW5mbyksIG51bGxwdHIpOwotICAgIHN0eWxl
ID0gaW5zcGVjdG9yU3R5bGUtPmJ1aWxkQXJyYXlGb3JDb21wdXRlZFN0eWxlKCk7CisgICAgcmV0
dXJuIGluc3BlY3RvclN0eWxlLT5idWlsZEFycmF5Rm9yQ29tcHV0ZWRTdHlsZSgpOwogfQogCi12
b2lkIEluc3BlY3RvckNTU0FnZW50OjpnZXRBbGxTdHlsZVNoZWV0cyhFcnJvclN0cmluZyYsIFJl
ZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGVTaGVl
dEhlYWRlcj4+JiBzdHlsZUluZm9zKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEpTT046
OkFycmF5T2Y8UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGVTaGVldEhlYWRlcj4+PiBJbnNwZWN0b3JD
U1NBZ2VudDo6Z2V0QWxsU3R5bGVTaGVldHMoKQogewotICAgIHN0eWxlSW5mb3MgPSBKU09OOjpB
cnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGVTaGVldEhlYWRlcj46OmNy
ZWF0ZSgpOworICAgIGF1dG8gaGVhZGVycyA9IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkNTUzo6
Q1NTU3R5bGVTaGVldEhlYWRlcj46OmNyZWF0ZSgpOwogCiAgICAgVmVjdG9yPEluc3BlY3RvclN0
eWxlU2hlZXQqPiBpbnNwZWN0b3JTdHlsZVNoZWV0czsKICAgICBjb2xsZWN0QWxsU3R5bGVTaGVl
dHMoaW5zcGVjdG9yU3R5bGVTaGVldHMpOwotICAgIGZvciAoYXV0byogaW5zcGVjdG9yU3R5bGVT
aGVldCA6IGluc3BlY3RvclN0eWxlU2hlZXRzKQotICAgICAgICBzdHlsZUluZm9zLT5hZGRJdGVt
KGluc3BlY3RvclN0eWxlU2hlZXQtPmJ1aWxkT2JqZWN0Rm9yU3R5bGVTaGVldEluZm8oKSk7Cisg
ICAgZm9yIChhdXRvKiBpbnNwZWN0b3JTdHlsZVNoZWV0IDogaW5zcGVjdG9yU3R5bGVTaGVldHMp
IHsKKyAgICAgICAgaWYgKGF1dG8gaGVhZGVyID0gaW5zcGVjdG9yU3R5bGVTaGVldC0+YnVpbGRP
YmplY3RGb3JTdHlsZVNoZWV0SW5mbygpKQorICAgICAgICAgICAgaGVhZGVycy0+YWRkSXRlbSho
ZWFkZXIucmVsZWFzZU5vbk51bGwoKSk7CisgICAgfQorCisgICAgcmV0dXJuIFdURk1vdmUoaGVh
ZGVycyk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmNvbGxlY3RBbGxTdHlsZVNoZWV0
cyhWZWN0b3I8SW5zcGVjdG9yU3R5bGVTaGVldCo+JiByZXN1bHQpCkBAIC01OTgsMTE2ICs2MDAs
MTI0IEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmNvbGxlY3RTdHlsZVNoZWV0cyhDU1NTdHls
ZVNoZWV0KiBzdHlsZVNoZWV0LCBWZWN0b3I8Q1NTCiAgICAgfQogfQogCi12b2lkIEluc3BlY3Rv
ckNTU0FnZW50OjpnZXRTdHlsZVNoZWV0KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3Qg
U3RyaW5nJiBzdHlsZVNoZWV0SWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNT
U1N0eWxlU2hlZXRCb2R5PiYgc3R5bGVTaGVldE9iamVjdCkKK1Byb3RvY29sOjpFcnJvclN0cmlu
Z09yPFJlZjxQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZVNoZWV0Qm9keT4+IEluc3BlY3RvckNTU0Fn
ZW50OjpnZXRTdHlsZVNoZWV0KGNvbnN0IFByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRJZCYgc3R5
bGVTaGVldElkKQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwog
ICAgIEluc3BlY3RvclN0eWxlU2hlZXQqIGluc3BlY3RvclN0eWxlU2hlZXQgPSBhc3NlcnRTdHls
ZVNoZWV0Rm9ySWQoZXJyb3JTdHJpbmcsIHN0eWxlU2hlZXRJZCk7CiAgICAgaWYgKCFpbnNwZWN0
b3JTdHlsZVNoZWV0KQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBl
Y3RlZChlcnJvclN0cmluZyk7CiAKLSAgICBzdHlsZVNoZWV0T2JqZWN0ID0gaW5zcGVjdG9yU3R5
bGVTaGVldC0+YnVpbGRPYmplY3RGb3JTdHlsZVNoZWV0KCk7CisgICAgYXV0byBzdHlsZVNoZWV0
ID0gaW5zcGVjdG9yU3R5bGVTaGVldC0+YnVpbGRPYmplY3RGb3JTdHlsZVNoZWV0KCk7CisgICAg
aWYgKCFzdHlsZVNoZWV0KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkludGVybmFs
IGVycm9yOiBtaXNzaW5nIHN0eWxlIHNoZWV0Iik7CisKKyAgICByZXR1cm4gc3R5bGVTaGVldC5y
ZWxlYXNlTm9uTnVsbCgpOwogfQogCi12b2lkIEluc3BlY3RvckNTU0FnZW50OjpnZXRTdHlsZVNo
ZWV0VGV4dChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgc3R5bGVTaGVl
dElkLCBTdHJpbmcqIHJlc3VsdCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPFN0cmluZz4gSW5z
cGVjdG9yQ1NTQWdlbnQ6OmdldFN0eWxlU2hlZXRUZXh0KGNvbnN0IFByb3RvY29sOjpDU1M6OlN0
eWxlU2hlZXRJZCYgc3R5bGVTaGVldElkKQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBl
cnJvclN0cmluZzsKKwogICAgIEluc3BlY3RvclN0eWxlU2hlZXQqIGluc3BlY3RvclN0eWxlU2hl
ZXQgPSBhc3NlcnRTdHlsZVNoZWV0Rm9ySWQoZXJyb3JTdHJpbmcsIHN0eWxlU2hlZXRJZCk7CiAg
ICAgaWYgKCFpbnNwZWN0b3JTdHlsZVNoZWV0KQotICAgICAgICByZXR1cm47CisgICAgICAgIHJl
dHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAgICBhdXRvIHRleHQgPSBpbnNw
ZWN0b3JTdHlsZVNoZWV0LT50ZXh0KCk7Ci0gICAgaWYgKCF0ZXh0Lmhhc0V4Y2VwdGlvbigpKQot
ICAgICAgICAqcmVzdWx0ID0gdGV4dC5yZWxlYXNlUmV0dXJuVmFsdWUoKTsKKyAgICBpZiAodGV4
dC5oYXNFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEluc3BlY3Rv
ckRPTUFnZW50Ojp0b0Vycm9yU3RyaW5nKHRleHQucmVsZWFzZUV4Y2VwdGlvbigpKSk7CisKKyAg
ICByZXR1cm4gdGV4dC5yZWxlYXNlUmV0dXJuVmFsdWUoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JD
U1NBZ2VudDo6c2V0U3R5bGVTaGVldFRleHQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25z
dCBTdHJpbmcmIHN0eWxlU2hlZXRJZCwgY29uc3QgU3RyaW5nJiB0ZXh0KQorUHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yQ1NTQWdlbnQ6OnNldFN0eWxlU2hlZXRUZXh0KGNv
bnN0IFByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRJZCYgc3R5bGVTaGVldElkLCBjb25zdCBTdHJp
bmcmIHRleHQpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAg
ICAgSW5zcGVjdG9yU3R5bGVTaGVldCogaW5zcGVjdG9yU3R5bGVTaGVldCA9IGFzc2VydFN0eWxl
U2hlZXRGb3JJZChlcnJvclN0cmluZywgc3R5bGVTaGVldElkKTsKICAgICBpZiAoIWluc3BlY3Rv
clN0eWxlU2hlZXQpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVj
dGVkKGVycm9yU3RyaW5nKTsKIAogICAgIGF1dG8qIGRvbUFnZW50ID0gbV9pbnN0cnVtZW50aW5n
QWdlbnRzLnBlcnNpc3RlbnRET01BZ2VudCgpOwotICAgIGlmICghZG9tQWdlbnQpIHsKLSAgICAg
ICAgZXJyb3JTdHJpbmcgPSAiRE9NIGRvbWFpbiBtdXN0IGJlIGVuYWJsZWQiX3M7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9CisgICAgaWYgKCFkb21BZ2VudCkKKyAgICAgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKCJET00gZG9tYWluIG11c3QgYmUgZW5hYmxlZCJfcyk7CiAKICAgICBhdXRvIHJl
c3VsdCA9IGRvbUFnZW50LT5oaXN0b3J5KCktPnBlcmZvcm0obWFrZVVuaXF1ZTxTZXRTdHlsZVNo
ZWV0VGV4dEFjdGlvbj4oaW5zcGVjdG9yU3R5bGVTaGVldCwgdGV4dCkpOwogICAgIGlmIChyZXN1
bHQuaGFzRXhjZXB0aW9uKCkpCi0gICAgICAgIGVycm9yU3RyaW5nID0gSW5zcGVjdG9yRE9NQWdl
bnQ6OnRvRXJyb3JTdHJpbmcocmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKSk7CisgICAgICAgIHJl
dHVybiBtYWtlVW5leHBlY3RlZChJbnNwZWN0b3JET01BZ2VudDo6dG9FcnJvclN0cmluZyhyZXN1
bHQucmVsZWFzZUV4Y2VwdGlvbigpKSk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIElu
c3BlY3RvckNTU0FnZW50OjpzZXRTdHlsZVRleHQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBj
b25zdCBKU09OOjpPYmplY3QmIGZ1bGxTdHlsZUlkLCBjb25zdCBTdHJpbmcmIHRleHQsIFJlZlB0
cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlPiYgcmVzdWx0KQorUHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8UmVmPFByb3RvY29sOjpDU1M6OkNTU1N0eWxlPj4gSW5zcGVjdG9yQ1NT
QWdlbnQ6OnNldFN0eWxlVGV4dChSZWY8SlNPTjo6T2JqZWN0PiYmIHN0eWxlSWQsIGNvbnN0IFN0
cmluZyYgdGV4dCkKIHsKLSAgICBJbnNwZWN0b3JDU1NJZCBjb21wb3VuZElkKGZ1bGxTdHlsZUlk
KTsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKKyAgICBJbnNwZWN0
b3JDU1NJZCBjb21wb3VuZElkKHN0eWxlSWQpOwogICAgIEFTU0VSVCghY29tcG91bmRJZC5pc0Vt
cHR5KCkpOwogCiAgICAgSW5zcGVjdG9yU3R5bGVTaGVldCogaW5zcGVjdG9yU3R5bGVTaGVldCA9
IGFzc2VydFN0eWxlU2hlZXRGb3JJZChlcnJvclN0cmluZywgY29tcG91bmRJZC5zdHlsZVNoZWV0
SWQoKSk7CiAgICAgaWYgKCFpbnNwZWN0b3JTdHlsZVNoZWV0KQotICAgICAgICByZXR1cm47Cisg
ICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAgICBhdXRvKiBk
b21BZ2VudCA9IG1faW5zdHJ1bWVudGluZ0FnZW50cy5wZXJzaXN0ZW50RE9NQWdlbnQoKTsKLSAg
ICBpZiAoIWRvbUFnZW50KSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIkRPTSBkb21haW4gbXVz
dCBiZSBlbmFibGVkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghZG9tQWdl
bnQpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiRE9NIGRvbWFpbiBtdXN0IGJlIGVu
YWJsZWQiX3MpOwogCiAgICAgYXV0byBwZXJmb3JtUmVzdWx0ID0gZG9tQWdlbnQtPmhpc3Rvcnko
KS0+cGVyZm9ybShtYWtlVW5pcXVlPFNldFN0eWxlVGV4dEFjdGlvbj4oaW5zcGVjdG9yU3R5bGVT
aGVldCwgY29tcG91bmRJZCwgdGV4dCkpOwotICAgIGlmIChwZXJmb3JtUmVzdWx0Lmhhc0V4Y2Vw
dGlvbigpKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gSW5zcGVjdG9yRE9NQWdlbnQ6OnRvRXJy
b3JTdHJpbmcocGVyZm9ybVJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCkpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQorICAgIGlmIChwZXJmb3JtUmVzdWx0Lmhhc0V4Y2VwdGlvbigpKQorICAgICAg
ICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoSW5zcGVjdG9yRE9NQWdlbnQ6OnRvRXJyb3JTdHJpbmco
cGVyZm9ybVJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCkpKTsKIAotICAgIHJlc3VsdCA9IGluc3Bl
Y3RvclN0eWxlU2hlZXQtPmJ1aWxkT2JqZWN0Rm9yU3R5bGUoaW5zcGVjdG9yU3R5bGVTaGVldC0+
c3R5bGVGb3JJZChjb21wb3VuZElkKSk7CisgICAgcmV0dXJuIGluc3BlY3RvclN0eWxlU2hlZXQt
PmJ1aWxkT2JqZWN0Rm9yU3R5bGUoaW5zcGVjdG9yU3R5bGVTaGVldC0+c3R5bGVGb3JJZChjb21w
b3VuZElkKSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OnNldFJ1bGVTZWxlY3RvcihF
cnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IEpTT046Ok9iamVjdCYgZnVsbFJ1bGVJZCwg
Y29uc3QgU3RyaW5nJiBzZWxlY3RvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6
Q1NTUnVsZT4mIHJlc3VsdCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxQcm90b2NvbDo6
Q1NTOjpDU1NSdWxlPj4gSW5zcGVjdG9yQ1NTQWdlbnQ6OnNldFJ1bGVTZWxlY3RvcihSZWY8SlNP
Tjo6T2JqZWN0PiYmIHJ1bGVJZCwgY29uc3QgU3RyaW5nJiBzZWxlY3RvcikKIHsKLSAgICBJbnNw
ZWN0b3JDU1NJZCBjb21wb3VuZElkKGZ1bGxSdWxlSWQpOworICAgIFByb3RvY29sOjpFcnJvclN0
cmluZyBlcnJvclN0cmluZzsKKworICAgIEluc3BlY3RvckNTU0lkIGNvbXBvdW5kSWQocnVsZUlk
KTsKICAgICBBU1NFUlQoIWNvbXBvdW5kSWQuaXNFbXB0eSgpKTsKIAogICAgIEluc3BlY3RvclN0
eWxlU2hlZXQqIGluc3BlY3RvclN0eWxlU2hlZXQgPSBhc3NlcnRTdHlsZVNoZWV0Rm9ySWQoZXJy
b3JTdHJpbmcsIGNvbXBvdW5kSWQuc3R5bGVTaGVldElkKCkpOwogICAgIGlmICghaW5zcGVjdG9y
U3R5bGVTaGVldCkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0
ZWQoZXJyb3JTdHJpbmcpOwogCiAgICAgYXV0byogZG9tQWdlbnQgPSBtX2luc3RydW1lbnRpbmdB
Z2VudHMucGVyc2lzdGVudERPTUFnZW50KCk7Ci0gICAgaWYgKCFkb21BZ2VudCkgewotICAgICAg
ICBlcnJvclN0cmluZyA9ICJET00gZG9tYWluIG11c3QgYmUgZW5hYmxlZCJfczsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KKyAgICBpZiAoIWRvbUFnZW50KQorICAgICAgICByZXR1cm4gbWFrZVVu
ZXhwZWN0ZWQoIkRPTSBkb21haW4gbXVzdCBiZSBlbmFibGVkIl9zKTsKIAogICAgIGF1dG8gcGVy
Zm9ybVJlc3VsdCA9IGRvbUFnZW50LT5oaXN0b3J5KCktPnBlcmZvcm0obWFrZVVuaXF1ZTxTZXRS
dWxlU2VsZWN0b3JBY3Rpb24+KGluc3BlY3RvclN0eWxlU2hlZXQsIGNvbXBvdW5kSWQsIHNlbGVj
dG9yKSk7Ci0gICAgaWYgKHBlcmZvcm1SZXN1bHQuaGFzRXhjZXB0aW9uKCkpIHsKLSAgICAgICAg
ZXJyb3JTdHJpbmcgPSBJbnNwZWN0b3JET01BZ2VudDo6dG9FcnJvclN0cmluZyhwZXJmb3JtUmVz
dWx0LnJlbGVhc2VFeGNlcHRpb24oKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYg
KHBlcmZvcm1SZXN1bHQuaGFzRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBl
Y3RlZChJbnNwZWN0b3JET01BZ2VudDo6dG9FcnJvclN0cmluZyhwZXJmb3JtUmVzdWx0LnJlbGVh
c2VFeGNlcHRpb24oKSkpOwogCi0gICAgcmVzdWx0ID0gaW5zcGVjdG9yU3R5bGVTaGVldC0+YnVp
bGRPYmplY3RGb3JSdWxlKGluc3BlY3RvclN0eWxlU2hlZXQtPnJ1bGVGb3JJZChjb21wb3VuZElk
KSk7CisgICAgYXV0byBydWxlID0gaW5zcGVjdG9yU3R5bGVTaGVldC0+YnVpbGRPYmplY3RGb3JS
dWxlKGluc3BlY3RvclN0eWxlU2hlZXQtPnJ1bGVGb3JJZChjb21wb3VuZElkKSk7CisgICAgaWYg
KCFydWxlKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkludGVybmFsIGVycm9yOiBt
aXNzaW5nIHN0eWxlIHNoZWV0Iik7CisKKyAgICByZXR1cm4gcnVsZS5yZWxlYXNlTm9uTnVsbCgp
OwogfQogCi12b2lkIEluc3BlY3RvckNTU0FnZW50OjpjcmVhdGVTdHlsZVNoZWV0KEVycm9yU3Ry
aW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBTdHJpbmcqIHN0eWxlU2hl
ZXRJZCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPFByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRJ
ZD4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmNyZWF0ZVN0eWxlU2hlZXQoY29uc3QgUHJvdG9jb2w6Ok5l
dHdvcms6OkZyYW1lSWQmIGZyYW1lSWQpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVy
cm9yU3RyaW5nOworCiAgICAgYXV0byogcGFnZUFnZW50ID0gbV9pbnN0cnVtZW50aW5nQWdlbnRz
LmVuYWJsZWRQYWdlQWdlbnQoKTsKLSAgICBpZiAoIXBhZ2VBZ2VudCkgewotICAgICAgICBlcnJv
clN0cmluZyA9ICJQYWdlIGRvbWFpbiBtdXN0IGJlIGVuYWJsZWQiX3M7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9CisgICAgaWYgKCFwYWdlQWdlbnQpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBl
Y3RlZCgiUGFnZSBkb21haW4gbXVzdCBiZSBlbmFibGVkIl9zKTsKIAogICAgIGF1dG8qIGZyYW1l
ID0gcGFnZUFnZW50LT5hc3NlcnRGcmFtZShlcnJvclN0cmluZywgZnJhbWVJZCk7CiAgICAgaWYg
KCFmcmFtZSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQo
ZXJyb3JTdHJpbmcpOwogCiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gZnJhbWUtPmRvY3VtZW50
KCk7Ci0gICAgaWYgKCFkb2N1bWVudCkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5n
IGRvY3VtZW50IG9mIGZyYW1lIGZvciBnaXZlbiBmcmFtZUlkIl9zOwotICAgICAgICByZXR1cm47
Ci0gICAgfQorICAgIGlmICghZG9jdW1lbnQpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3Rl
ZCgiTWlzc2luZyBkb2N1bWVudCBvZiBmcmFtZSBmb3IgZ2l2ZW4gZnJhbWVJZCJfcyk7CiAKICAg
ICBJbnNwZWN0b3JTdHlsZVNoZWV0KiBpbnNwZWN0b3JTdHlsZVNoZWV0ID0gY3JlYXRlSW5zcGVj
dG9yU3R5bGVTaGVldEZvckRvY3VtZW50KCpkb2N1bWVudCk7Ci0gICAgaWYgKCFpbnNwZWN0b3JT
dHlsZVNoZWV0KSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIkNvdWxkIG5vdCBjcmVhdGUgc3R5
bGUgc2hlZXQgZm9yIGRvY3VtZW50IG9mIGZyYW1lIGZvciBnaXZlbiBmcmFtZUlkIl9zOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghaW5zcGVjdG9yU3R5bGVTaGVldCkKKyAgICAg
ICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJDb3VsZCBub3QgY3JlYXRlIHN0eWxlIHNoZWV0IGZv
ciBkb2N1bWVudCBvZiBmcmFtZSBmb3IgZ2l2ZW4gZnJhbWVJZCJfcyk7CiAKLSAgICAqc3R5bGVT
aGVldElkID0gaW5zcGVjdG9yU3R5bGVTaGVldC0+aWQoKTsKKyAgICByZXR1cm4gaW5zcGVjdG9y
U3R5bGVTaGVldC0+aWQoKTsKIH0KIAogSW5zcGVjdG9yU3R5bGVTaGVldCogSW5zcGVjdG9yQ1NT
QWdlbnQ6OmNyZWF0ZUluc3BlY3RvclN0eWxlU2hlZXRGb3JEb2N1bWVudChEb2N1bWVudCYgZG9j
dW1lbnQpCkBAIC03NTEsNDEgKzc2MSw0MiBAQCBJbnNwZWN0b3JTdHlsZVNoZWV0KiBJbnNwZWN0
b3JDU1NBZ2VudDo6Y3JlYXRlSW5zcGVjdG9yU3R5bGVTaGVldEZvckRvY3VtZW50KERvYwogICAg
IHJldHVybiBpbnNwZWN0b3JTdHlsZVNoZWV0c0ZvckRvY3VtZW50Lmxhc3QoKS5nZXQoKTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6YWRkUnVsZShFcnJvclN0cmluZyYgZXJyb3JTdHJp
bmcsIGNvbnN0IFN0cmluZyYgc3R5bGVTaGVldElkLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yLCBS
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NSdWxlPiYgcmVzdWx0KQorUHJvdG9j
b2w6OkVycm9yU3RyaW5nT3I8UmVmPFByb3RvY29sOjpDU1M6OkNTU1J1bGU+PiBJbnNwZWN0b3JD
U1NBZ2VudDo6YWRkUnVsZShjb25zdCBQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0SWQmIHN0eWxl
U2hlZXRJZCwgY29uc3QgU3RyaW5nJiBzZWxlY3RvcikKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JT
dHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBJbnNwZWN0b3JTdHlsZVNoZWV0KiBpbnNwZWN0b3JT
dHlsZVNoZWV0ID0gYXNzZXJ0U3R5bGVTaGVldEZvcklkKGVycm9yU3RyaW5nLCBzdHlsZVNoZWV0
SWQpOwogICAgIGlmICghaW5zcGVjdG9yU3R5bGVTaGVldCkKLSAgICAgICAgcmV0dXJuOworICAg
ICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCiAgICAgYXV0byogZG9t
QWdlbnQgPSBtX2luc3RydW1lbnRpbmdBZ2VudHMucGVyc2lzdGVudERPTUFnZW50KCk7Ci0gICAg
aWYgKCFkb21BZ2VudCkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJET00gZG9tYWluIG11c3Qg
YmUgZW5hYmxlZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoIWRvbUFnZW50
KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkRPTSBkb21haW4gbXVzdCBiZSBlbmFi
bGVkIl9zKTsKIAogICAgIGF1dG8gYWN0aW9uID0gbWFrZVVuaXF1ZTxBZGRSdWxlQWN0aW9uPihp
bnNwZWN0b3JTdHlsZVNoZWV0LCBzZWxlY3Rvcik7CiAgICAgYXV0byYgcmF3QWN0aW9uID0gKmFj
dGlvbjsKICAgICBhdXRvIHBlcmZvcm1SZXN1bHQgPSBkb21BZ2VudC0+aGlzdG9yeSgpLT5wZXJm
b3JtKFdURk1vdmUoYWN0aW9uKSk7Ci0gICAgaWYgKHBlcmZvcm1SZXN1bHQuaGFzRXhjZXB0aW9u
KCkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSBJbnNwZWN0b3JET01BZ2VudDo6dG9FcnJvclN0
cmluZyhwZXJmb3JtUmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKSk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9CisgICAgaWYgKHBlcmZvcm1SZXN1bHQuaGFzRXhjZXB0aW9uKCkpCisgICAgICAgIHJl
dHVybiBtYWtlVW5leHBlY3RlZChJbnNwZWN0b3JET01BZ2VudDo6dG9FcnJvclN0cmluZyhwZXJm
b3JtUmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKSkpOwogCi0gICAgSW5zcGVjdG9yQ1NTSWQgcnVs
ZUlkID0gcmF3QWN0aW9uLm5ld1J1bGVJZCgpOwotICAgIENTU1N0eWxlUnVsZSogcnVsZSA9IGlu
c3BlY3RvclN0eWxlU2hlZXQtPnJ1bGVGb3JJZChydWxlSWQpOwotICAgIHJlc3VsdCA9IGluc3Bl
Y3RvclN0eWxlU2hlZXQtPmJ1aWxkT2JqZWN0Rm9yUnVsZShydWxlKTsKKyAgICBhdXRvIHJ1bGUg
PSBpbnNwZWN0b3JTdHlsZVNoZWV0LT5idWlsZE9iamVjdEZvclJ1bGUoaW5zcGVjdG9yU3R5bGVT
aGVldC0+cnVsZUZvcklkKHJhd0FjdGlvbi5uZXdSdWxlSWQoKSkpOworICAgIGlmICghcnVsZSkK
KyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJJbnRlcm5hbCBlcnJvcjogbWlzc2luZyBz
dHlsZSBzaGVldCIpOworCisgICAgcmV0dXJuIHJ1bGUucmVsZWFzZU5vbk51bGwoKTsKIH0KIAot
dm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0U3VwcG9ydGVkQ1NTUHJvcGVydGllcyhFcnJvclN0
cmluZyYsIFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NT
UHJvcGVydHlJbmZvPj4mIGNzc1Byb3BlcnRpZXMpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxS
ZWY8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0eUluZm8+Pj4gSW5zcGVj
dG9yQ1NTQWdlbnQ6OmdldFN1cHBvcnRlZENTU1Byb3BlcnRpZXMoKQogewotICAgIGF1dG8gcHJv
cGVydGllcyA9IEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NQcm9w
ZXJ0eUluZm8+OjpjcmVhdGUoKTsKKyAgICBhdXRvIGNzc1Byb3BlcnRpZXMgPSBKU09OOjpBcnJh
eU9mPFByb3RvY29sOjpDU1M6OkNTU1Byb3BlcnR5SW5mbz46OmNyZWF0ZSgpOworCiAgICAgZm9y
IChpbnQgaSA9IGZpcnN0Q1NTUHJvcGVydHk7IGkgPD0gbGFzdENTU1Byb3BlcnR5OyArK2kpIHsK
ICAgICAgICAgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlEID0gY29udmVydFRvQ1NTUHJvcGVydHlJ
RChpKTsKICAgICAgICAgLy8gRklYTUU6IFNob3VsZCB0YWtlIGFjY291bnQgZm9yIGZsYWdzIGlu
IHNldHRpbmdzKCkuCiAgICAgICAgIGlmIChpc0ludGVybmFsQ1NTUHJvcGVydHkocHJvcGVydHlJ
RCkgfHwgIWlzRW5hYmxlZENTU1Byb3BlcnR5KHByb3BlcnR5SUQpKQogICAgICAgICAgICAgY29u
dGludWU7CiAKLSAgICAgICAgYXV0byBwcm9wZXJ0eSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNT
Uzo6Q1NTUHJvcGVydHlJbmZvOjpjcmVhdGUoKQorICAgICAgICBhdXRvIHByb3BlcnR5ID0gUHJv
dG9jb2w6OkNTUzo6Q1NTUHJvcGVydHlJbmZvOjpjcmVhdGUoKQogICAgICAgICAgICAgLnNldE5h
bWUoZ2V0UHJvcGVydHlOYW1lU3RyaW5nKHByb3BlcnR5SUQpKQogICAgICAgICAgICAgLnJlbGVh
c2UoKTsKIApAQCAtODIxLDYzICs4MzIsNjYgQEAgdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0
U3VwcG9ydGVkQ1NTUHJvcGVydGllcyhFcnJvclN0cmluZyYsIFJlZlB0cjxKU09OOjpBcnIKICAg
ICAgICAgaWYgKENTU1Byb3BlcnR5Ojppc0luaGVyaXRlZFByb3BlcnR5KHByb3BlcnR5SUQpKQog
ICAgICAgICAgICAgcHJvcGVydHktPnNldEluaGVyaXRlZCh0cnVlKTsKIAotICAgICAgICBwcm9w
ZXJ0aWVzLT5hZGRJdGVtKFdURk1vdmUocHJvcGVydHkpKTsKKyAgICAgICAgY3NzUHJvcGVydGll
cy0+YWRkSXRlbShXVEZNb3ZlKHByb3BlcnR5KSk7CiAgICAgfQotICAgIGNzc1Byb3BlcnRpZXMg
PSBXVEZNb3ZlKHByb3BlcnRpZXMpOworCisgICAgcmV0dXJuIFdURk1vdmUoY3NzUHJvcGVydGll
cyk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldFN1cHBvcnRlZFN5c3RlbUZvbnRG
YW1pbHlOYW1lcyhFcnJvclN0cmluZyYsIFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+JiBm
b250RmFtaWx5TmFtZXMpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SlNPTjo6QXJyYXlP
ZjxTdHJpbmc+Pj4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldFN1cHBvcnRlZFN5c3RlbUZvbnRGYW1p
bHlOYW1lcygpCiB7Ci0gICAgYXV0byBmYW1pbGllcyA9IEpTT046OkFycmF5T2Y8U3RyaW5nPjo6
Y3JlYXRlKCk7CisgICAgYXV0byBmb250RmFtaWx5TmFtZXMgPSBKU09OOjpBcnJheU9mPFN0cmlu
Zz46OmNyZWF0ZSgpOwogCiAgICAgVmVjdG9yPFN0cmluZz4gc3lzdGVtRm9udEZhbWlsaWVzID0g
Rm9udENhY2hlOjpzaW5nbGV0b24oKS5zeXN0ZW1Gb250RmFtaWxpZXMoKTsKICAgICBmb3IgKGNv
bnN0IGF1dG8mIGZhbWlseU5hbWUgOiBzeXN0ZW1Gb250RmFtaWxpZXMpCi0gICAgICAgIGZhbWls
aWVzLT5hZGRJdGVtKGZhbWlseU5hbWUpOworICAgICAgICBmb250RmFtaWx5TmFtZXMtPmFkZEl0
ZW0oZmFtaWx5TmFtZSk7CiAKLSAgICBmb250RmFtaWx5TmFtZXMgPSBXVEZNb3ZlKGZhbWlsaWVz
KTsKKyAgICByZXR1cm4gV1RGTW92ZShmb250RmFtaWx5TmFtZXMpOwogfQogCi12b2lkIEluc3Bl
Y3RvckNTU0FnZW50Ojpmb3JjZVBzZXVkb1N0YXRlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywg
aW50IG5vZGVJZCwgY29uc3QgSlNPTjo6QXJyYXkmIGZvcmNlZFBzZXVkb0NsYXNzZXMpCitQcm90
b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JDU1NBZ2VudDo6Zm9yY2VQc2V1ZG9T
dGF0ZShQcm90b2NvbDo6RE9NOjpOb2RlSWQgbm9kZUlkLCBSZWY8SlNPTjo6QXJyYXk+JiYgZm9y
Y2VkUHNldWRvQ2xhc3NlcykKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJp
bmc7CisKICAgICBhdXRvKiBkb21BZ2VudCA9IG1faW5zdHJ1bWVudGluZ0FnZW50cy5wZXJzaXN0
ZW50RE9NQWdlbnQoKTsKLSAgICBpZiAoIWRvbUFnZW50KSB7Ci0gICAgICAgIGVycm9yU3RyaW5n
ID0gIkRPTSBkb21haW4gbXVzdCBiZSBlbmFibGVkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAg
fQorICAgIGlmICghZG9tQWdlbnQpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiRE9N
IGRvbWFpbiBtdXN0IGJlIGVuYWJsZWQiX3MpOwogCiAgICAgRWxlbWVudCogZWxlbWVudCA9IGRv
bUFnZW50LT5hc3NlcnRFbGVtZW50KGVycm9yU3RyaW5nLCBub2RlSWQpOwogICAgIGlmICghZWxl
bWVudCkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJy
b3JTdHJpbmcpOwogCiAgICAgLy8gUmV0dXJuIGVhcmx5IGlmIHRoZSBmb3JjZWQgcHNldWRvIHN0
YXRlIHdhcyBhbHJlYWR5IHNldCBjb3JyZWN0bHkuCiAgICAgdW5zaWduZWQgZm9yY2VkUHNldWRv
U3RhdGUgPSBjb21wdXRlUHNldWRvQ2xhc3NNYXNrKGZvcmNlZFBzZXVkb0NsYXNzZXMpOwogICAg
IGlmIChmb3JjZWRQc2V1ZG9TdGF0ZSkgewogICAgICAgICBhdXRvIGl0ZXJhdG9yID0gbV9ub2Rl
SWRUb0ZvcmNlZFBzZXVkb1N0YXRlLmFkZChub2RlSWQsIDApLml0ZXJhdG9yOwogICAgICAgICBp
ZiAoZm9yY2VkUHNldWRvU3RhdGUgPT0gaXRlcmF0b3ItPnZhbHVlKQotICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAgICAgaXRlcmF0b3ItPnZhbHVlID0g
Zm9yY2VkUHNldWRvU3RhdGU7CiAgICAgICAgIG1fZG9jdW1lbnRzV2l0aEZvcmNlZFBzZXVkb1N0
YXRlcy5hZGQoJmVsZW1lbnQtPmRvY3VtZW50KCkpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGlm
ICghbV9ub2RlSWRUb0ZvcmNlZFBzZXVkb1N0YXRlLnJlbW92ZShub2RlSWQpKQotICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAgICAgaWYgKG1fbm9kZUlk
VG9Gb3JjZWRQc2V1ZG9TdGF0ZS5pc0VtcHR5KCkpCiAgICAgICAgICAgICBtX2RvY3VtZW50c1dp
dGhGb3JjZWRQc2V1ZG9TdGF0ZXMuY2xlYXIoKTsKICAgICB9CiAKICAgICBlbGVtZW50LT5kb2N1
bWVudCgpLnN0eWxlU2NvcGUoKS5kaWRDaGFuZ2VTdHlsZVNoZWV0RW52aXJvbm1lbnQoKTsKKwor
ICAgIHJldHVybiB7IH07CiB9CiAKIEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZSYg
SW5zcGVjdG9yQ1NTQWdlbnQ6OmFzSW5zcGVjdG9yU3R5bGVTaGVldChTdHlsZWRFbGVtZW50JiBl
bGVtZW50KQogewogICAgIHJldHVybiBtX25vZGVUb0luc3BlY3RvclN0eWxlU2hlZXQuZW5zdXJl
KCZlbGVtZW50LCBbdGhpcywgJmVsZW1lbnRdIHsKICAgICAgICAgU3RyaW5nIG5ld1N0eWxlU2hl
ZXRJZCA9IFN0cmluZzo6bnVtYmVyKG1fbGFzdFN0eWxlU2hlZXRJZCsrKTsKLSAgICAgICAgYXV0
byBpbnNwZWN0b3JTdHlsZVNoZWV0ID0gSW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxl
OjpjcmVhdGUobV9pbnN0cnVtZW50aW5nQWdlbnRzLmVuYWJsZWRQYWdlQWdlbnQoKSwgbmV3U3R5
bGVTaGVldElkLCBlbGVtZW50LCBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRP
cmlnaW46OkF1dGhvciwgdGhpcyk7CisgICAgICAgIGF1dG8gaW5zcGVjdG9yU3R5bGVTaGVldCA9
IEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZTo6Y3JlYXRlKG1faW5zdHJ1bWVudGlu
Z0FnZW50cy5lbmFibGVkUGFnZUFnZW50KCksIG5ld1N0eWxlU2hlZXRJZCwgZWxlbWVudCwgUHJv
dG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6QXV0aG9yLCB0aGlzKTsKICAgICAgICAgbV9p
ZFRvSW5zcGVjdG9yU3R5bGVTaGVldC5zZXQobmV3U3R5bGVTaGVldElkLCBpbnNwZWN0b3JTdHls
ZVNoZWV0LmNvcHlSZWYoKSk7CiAgICAgICAgIHJldHVybiBpbnNwZWN0b3JTdHlsZVNoZWV0Owog
ICAgIH0pLml0ZXJhdG9yLT52YWx1ZTsKIH0KIAotRWxlbWVudCogSW5zcGVjdG9yQ1NTQWdlbnQ6
OmVsZW1lbnRGb3JJZChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQpCitFbGVt
ZW50KiBJbnNwZWN0b3JDU1NBZ2VudDo6ZWxlbWVudEZvcklkKFByb3RvY29sOjpFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcsIFByb3RvY29sOjpET006Ok5vZGVJZCBub2RlSWQpCiB7CiAgICAgYXV0
byogZG9tQWdlbnQgPSBtX2luc3RydW1lbnRpbmdBZ2VudHMucGVyc2lzdGVudERPTUFnZW50KCk7
CiAgICAgaWYgKCFkb21BZ2VudCkgewpAQCAtOTE0LDcgKzkyOCw3IEBAIEluc3BlY3RvclN0eWxl
U2hlZXQqIEluc3BlY3RvckNTU0FnZW50OjpiaW5kU3R5bGVTaGVldChDU1NTdHlsZVNoZWV0KiBz
dHlsZVNoZWV0CiAgICAgcmV0dXJuIGluc3BlY3RvclN0eWxlU2hlZXQuZ2V0KCk7CiB9CiAKLUlu
c3BlY3RvclN0eWxlU2hlZXQqIEluc3BlY3RvckNTU0FnZW50Ojphc3NlcnRTdHlsZVNoZWV0Rm9y
SWQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHN0eWxlU2hlZXRJZCkK
K0luc3BlY3RvclN0eWxlU2hlZXQqIEluc3BlY3RvckNTU0FnZW50Ojphc3NlcnRTdHlsZVNoZWV0
Rm9ySWQoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBz
dHlsZVNoZWV0SWQpCiB7CiAgICAgSWRUb0luc3BlY3RvclN0eWxlU2hlZXQ6Oml0ZXJhdG9yIGl0
ID0gbV9pZFRvSW5zcGVjdG9yU3R5bGVTaGVldC5maW5kKHN0eWxlU2hlZXRJZCk7CiAgICAgaWYg
KGl0ID09IG1faWRUb0luc3BlY3RvclN0eWxlU2hlZXQuZW5kKCkpIHsKQEAgLTkyNCwyOSArOTM4
LDI5IEBAIEluc3BlY3RvclN0eWxlU2hlZXQqIEluc3BlY3RvckNTU0FnZW50Ojphc3NlcnRTdHls
ZVNoZWV0Rm9ySWQoRXJyb3JTdHJpbmcmIGVycm9yCiAgICAgcmV0dXJuIGl0LT52YWx1ZS5nZXQo
KTsKIH0KIAotSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luIEluc3Bl
Y3RvckNTU0FnZW50OjpkZXRlY3RPcmlnaW4oQ1NTU3R5bGVTaGVldCogcGFnZVN0eWxlU2hlZXQs
IERvY3VtZW50KiBvd25lckRvY3VtZW50KQorUHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdp
biBJbnNwZWN0b3JDU1NBZ2VudDo6ZGV0ZWN0T3JpZ2luKENTU1N0eWxlU2hlZXQqIHBhZ2VTdHls
ZVNoZWV0LCBEb2N1bWVudCogb3duZXJEb2N1bWVudCkKIHsKICAgICBpZiAobV9jcmVhdGluZ1Zp
YUluc3BlY3RvclN0eWxlU2hlZXQpCi0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29s
OjpDU1M6OlN0eWxlU2hlZXRPcmlnaW46Okluc3BlY3RvcjsKKyAgICAgICAgcmV0dXJuIFByb3Rv
Y29sOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW46Okluc3BlY3RvcjsKIAogICAgIGlmIChwYWdlU3R5
bGVTaGVldCAmJiAhcGFnZVN0eWxlU2hlZXQtPm93bmVyTm9kZSgpICYmIHBhZ2VTdHlsZVNoZWV0
LT5ocmVmKCkuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6
Q1NTOjpTdHlsZVNoZWV0T3JpZ2luOjpVc2VyQWdlbnQ7CisgICAgICAgIHJldHVybiBQcm90b2Nv
bDo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luOjpVc2VyQWdlbnQ7CiAKICAgICBpZiAocGFnZVN0eWxl
U2hlZXQgJiYgcGFnZVN0eWxlU2hlZXQtPmNvbnRlbnRzKCkuaXNVc2VyU3R5bGVTaGVldCgpKQot
ICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2lu
OjpVc2VyOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6
VXNlcjsKIAogICAgIGF1dG8gaXRlcmF0b3IgPSBtX2RvY3VtZW50VG9JbnNwZWN0b3JTdHlsZVNo
ZWV0LmZpbmQob3duZXJEb2N1bWVudCk7CiAgICAgaWYgKGl0ZXJhdG9yICE9IG1fZG9jdW1lbnRU
b0luc3BlY3RvclN0eWxlU2hlZXQuZW5kKCkpIHsKICAgICAgICAgZm9yIChhdXRvJiBpbnNwZWN0
b3JTdHlsZVNoZWV0IDogaXRlcmF0b3ItPnZhbHVlKSB7CiAgICAgICAgICAgICBpZiAocGFnZVN0
eWxlU2hlZXQgPT0gaW5zcGVjdG9yU3R5bGVTaGVldC0+cGFnZVN0eWxlU2hlZXQoKSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0T3Jp
Z2luOjpJbnNwZWN0b3I7CisgICAgICAgICAgICAgICAgcmV0dXJuIFByb3RvY29sOjpDU1M6OlN0
eWxlU2hlZXRPcmlnaW46Okluc3BlY3RvcjsKICAgICAgICAgfQogICAgIH0KIAotICAgIHJldHVy
biBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW46OkF1dGhvcjsKKyAg
ICByZXR1cm4gUHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6QXV0aG9yOwogfQogCi1S
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NSdWxlPiBJbnNwZWN0b3JDU1NBZ2Vu
dDo6YnVpbGRPYmplY3RGb3JSdWxlKGNvbnN0IFN0eWxlUnVsZSogc3R5bGVSdWxlLCBTdHlsZTo6
UmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIEVsZW1lbnQmIGVsZW1lbnQpCitSZWZQdHI8UHJvdG9j
b2w6OkNTUzo6Q1NTUnVsZT4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yUnVsZShj
b25zdCBTdHlsZVJ1bGUqIHN0eWxlUnVsZSwgU3R5bGU6OlJlc29sdmVyJiBzdHlsZVJlc29sdmVy
LCBFbGVtZW50JiBlbGVtZW50KQogewogICAgIGlmICghc3R5bGVSdWxlKQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKQEAgLTk2OCw3ICs5ODIsNyBAQCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6Q1NTOjpDU1NSdWxlPiBJbnNwZWN0b3JDU1NBZ2VudDo6YnVpbGRPYmplY3RGb3JSdWxlKAog
ICAgIHJldHVybiBpbnNwZWN0b3JTdHlsZVNoZWV0ID8gaW5zcGVjdG9yU3R5bGVTaGVldC0+YnVp
bGRPYmplY3RGb3JSdWxlKGNzc29tV3JhcHBlcikgOiBudWxscHRyOwogfQogCi1SZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NSdWxlPiBJbnNwZWN0b3JDU1NBZ2VudDo6YnVpbGRP
YmplY3RGb3JSdWxlKENTU1N0eWxlUnVsZSogcnVsZSkKK1JlZlB0cjxQcm90b2NvbDo6Q1NTOjpD
U1NSdWxlPiBJbnNwZWN0b3JDU1NBZ2VudDo6YnVpbGRPYmplY3RGb3JSdWxlKENTU1N0eWxlUnVs
ZSogcnVsZSkKIHsKICAgICBpZiAoIXJ1bGUpCiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAt
OTc4LDE2ICs5OTIsMTYgQEAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUnVs
ZT4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yUnVsZSgKICAgICByZXR1cm4gaW5z
cGVjdG9yU3R5bGVTaGVldCA/IGluc3BlY3RvclN0eWxlU2hlZXQtPmJ1aWxkT2JqZWN0Rm9yUnVs
ZShydWxlKSA6IG51bGxwdHI7CiB9CiAKLVJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkNTUzo6UnVsZU1hdGNoPj4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmJ1aWxkQXJyYXlG
b3JNYXRjaGVkUnVsZUxpc3QoY29uc3QgVmVjdG9yPFJlZlB0cjxjb25zdCBTdHlsZVJ1bGU+PiYg
bWF0Y2hlZFJ1bGVzLCBTdHlsZTo6UmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIEVsZW1lbnQmIGVs
ZW1lbnQsIFBzZXVkb0lkIHBzZXVkb0lkKQorUmVmPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkNT
Uzo6UnVsZU1hdGNoPj4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmJ1aWxkQXJyYXlGb3JNYXRjaGVkUnVs
ZUxpc3QoY29uc3QgVmVjdG9yPFJlZlB0cjxjb25zdCBTdHlsZVJ1bGU+PiYgbWF0Y2hlZFJ1bGVz
LCBTdHlsZTo6UmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIEVsZW1lbnQmIGVsZW1lbnQsIFBzZXVk
b0lkIHBzZXVkb0lkKQogewotICAgIGF1dG8gcmVzdWx0ID0gSlNPTjo6QXJyYXlPZjxJbnNwZWN0
b3I6OlByb3RvY29sOjpDU1M6OlJ1bGVNYXRjaD46OmNyZWF0ZSgpOworICAgIGF1dG8gcmVzdWx0
ID0gSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6Q1NTOjpSdWxlTWF0Y2g+OjpjcmVhdGUoKTsKIAog
ICAgIFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdDb250ZXh0IGNvbnRleHQoU2VsZWN0b3JDaGVj
a2VyOjpNb2RlOjpDb2xsZWN0aW5nUnVsZXMpOwogICAgIGNvbnRleHQucHNldWRvSWQgPSBwc2V1
ZG9JZCAhPSBQc2V1ZG9JZDo6Tm9uZSA/IHBzZXVkb0lkIDogZWxlbWVudC5wc2V1ZG9JZCgpOwog
ICAgIFNlbGVjdG9yQ2hlY2tlciBzZWxlY3RvckNoZWNrZXIoZWxlbWVudC5kb2N1bWVudCgpKTsK
IAogICAgIGZvciAoYXV0byYgbWF0Y2hlZFJ1bGUgOiBtYXRjaGVkUnVsZXMpIHsKLSAgICAgICAg
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUnVsZT4gcnVsZU9iamVjdCA9IGJ1
aWxkT2JqZWN0Rm9yUnVsZShtYXRjaGVkUnVsZS5nZXQoKSwgc3R5bGVSZXNvbHZlciwgZWxlbWVu
dCk7CisgICAgICAgIFJlZlB0cjxQcm90b2NvbDo6Q1NTOjpDU1NSdWxlPiBydWxlT2JqZWN0ID0g
YnVpbGRPYmplY3RGb3JSdWxlKG1hdGNoZWRSdWxlLmdldCgpLCBzdHlsZVJlc29sdmVyLCBlbGVt
ZW50KTsKICAgICAgICAgaWYgKCFydWxlT2JqZWN0KQogICAgICAgICAgICAgY29udGludWU7CiAK
QEAgLTEwMDEsOCArMTAxNSw4IEBAIFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkNTUzo6UnVsZU1hdGNoPj4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmJ1CiAgICAgICAgICAg
ICArK2luZGV4OwogICAgICAgICB9CiAKLSAgICAgICAgYXV0byBtYXRjaCA9IEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkNTUzo6UnVsZU1hdGNoOjpjcmVhdGUoKQotICAgICAgICAgICAgLnNldFJ1bGUo
V1RGTW92ZShydWxlT2JqZWN0KSkKKyAgICAgICAgYXV0byBtYXRjaCA9IFByb3RvY29sOjpDU1M6
OlJ1bGVNYXRjaDo6Y3JlYXRlKCkKKyAgICAgICAgICAgIC5zZXRSdWxlKHJ1bGVPYmplY3QucmVs
ZWFzZU5vbk51bGwoKSkKICAgICAgICAgICAgIC5zZXRNYXRjaGluZ1NlbGVjdG9ycyhXVEZNb3Zl
KG1hdGNoaW5nU2VsZWN0b3JzKSkKICAgICAgICAgICAgIC5yZWxlYXNlKCk7CiAgICAgICAgIHJl
c3VsdC0+YWRkSXRlbShXVEZNb3ZlKG1hdGNoKSk7CkBAIC0xMDExLDcgKzEwMjUsNyBAQCBSZWZQ
dHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlJ1bGVNYXRjaD4+IElu
c3BlY3RvckNTU0FnZW50OjpidQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLVJlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlPiBJbnNwZWN0b3JDU1NBZ2VudDo6YnVpbGRP
YmplY3RGb3JBdHRyaWJ1dGVzU3R5bGUoU3R5bGVkRWxlbWVudCYgZWxlbWVudCkKK1JlZlB0cjxQ
cm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9y
QXR0cmlidXRlc1N0eWxlKFN0eWxlZEVsZW1lbnQmIGVsZW1lbnQpCiB7CiAgICAgLy8gRklYTUU6
IFVnbGluZXNzIGJlbG93LgogICAgIGF1dG8qIGF0dHJpYnV0ZVN0eWxlID0gY29uc3RfY2FzdDxT
dHlsZVByb3BlcnRpZXMqPihlbGVtZW50LnByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKCkpOwpA
QCAtMTAyMyw3ICsxMDM3LDcgQEAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NT
U3R5bGU+IEluc3BlY3RvckNTU0FnZW50OjpidWlsZE9iamVjdEZvckF0dHIKICAgICByZXR1cm4g
aW5zcGVjdG9yU3R5bGUtPmJ1aWxkT2JqZWN0Rm9yU3R5bGUoKTsKIH0KIAotdm9pZCBJbnNwZWN0
b3JDU1NBZ2VudDo6ZGlkUmVtb3ZlRE9NTm9kZShOb2RlJiBub2RlLCBpbnQgbm9kZUlkKQordm9p
ZCBJbnNwZWN0b3JDU1NBZ2VudDo6ZGlkUmVtb3ZlRE9NTm9kZShOb2RlJiBub2RlLCBQcm90b2Nv
bDo6RE9NOjpOb2RlSWQgbm9kZUlkKQogewogICAgIG1fbm9kZUlkVG9Gb3JjZWRQc2V1ZG9TdGF0
ZS5yZW1vdmUobm9kZUlkKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2FnZW50cy9JbnNwZWN0b3JDU1NBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Fn
ZW50cy9JbnNwZWN0b3JDU1NBZ2VudC5oCmluZGV4IGZhMWQ2NzFkZDgzM2IwMDNhNjFkYzI3OTY1
OTY2OTIxNjFhYWRmN2YuLmQyZmNhNzk1ZGM2ODBmOThkZTg2Y2JjYzFkNmU5MGM4Y2E3YzcwYjEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ1NT
QWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNT
U0FnZW50LmgKQEAgLTYxLDcgKzYxLDcgQEAgY2xhc3MgSW5zcGVjdG9yQ1NTQWdlbnQgZmluYWwg
OiBwdWJsaWMgSW5zcGVjdG9yQWdlbnRCYXNlICwgcHVibGljIEluc3BlY3Rvcjo6Q1MKICAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBJbnNwZWN0b3JDU1NBZ2VudChX
ZWJBZ2VudENvbnRleHQmKTsKLSAgICB+SW5zcGVjdG9yQ1NTQWdlbnQoKSBvdmVycmlkZTsKKyAg
ICB+SW5zcGVjdG9yQ1NTQWdlbnQoKTsKIAogICAgIGNsYXNzIElubGluZVN0eWxlT3ZlcnJpZGVT
Y29wZSB7CiAgICAgcHVibGljOgpAQCAtODMsMjkgKzgzLDI5IEBAIHB1YmxpYzoKICAgICBzdGF0
aWMgQ1NTU3R5bGVSdWxlKiBhc0NTU1N0eWxlUnVsZShDU1NSdWxlJik7CiAKICAgICAvLyBJbnNw
ZWN0b3JBZ2VudEJhc2UKLSAgICB2b2lkIGRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJbnNw
ZWN0b3I6OkZyb250ZW5kUm91dGVyKiwgSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlciopIG92
ZXJyaWRlOwotICAgIHZvaWQgd2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9y
OjpEaXNjb25uZWN0UmVhc29uKSBvdmVycmlkZTsKKyAgICB2b2lkIGRpZENyZWF0ZUZyb250ZW5k
QW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kUm91dGVyKiwgSW5zcGVjdG9yOjpCYWNrZW5k
RGlzcGF0Y2hlciopOworICAgIHZvaWQgd2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5z
cGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKTsKIAogICAgIC8vIENTU0JhY2tlbmREaXNwYXRjaGVy
SGFuZGxlcgotICAgIHZvaWQgZW5hYmxlKEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBkaXNhYmxlKEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBnZXRDb21wdXRlZFN0
eWxlRm9yTm9kZShFcnJvclN0cmluZyYsIGludCBub2RlSWQsIFJlZlB0cjxKU09OOjpBcnJheU9m
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTQ29tcHV0ZWRTdHlsZVByb3BlcnR5Pj4mKSBv
dmVycmlkZTsKLSAgICB2b2lkIGdldElubGluZVN0eWxlc0Zvck5vZGUoRXJyb3JTdHJpbmcmLCBp
bnQgbm9kZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4mIGlu
bGluZVN0eWxlLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4mIGF0
dHJpYnV0ZXMpIG92ZXJyaWRlOwotICAgIHZvaWQgZ2V0TWF0Y2hlZFN0eWxlc0Zvck5vZGUoRXJy
b3JTdHJpbmcmLCBpbnQgbm9kZUlkLCBjb25zdCBib29sKiBpbmNsdWRlUHNldWRvLCBjb25zdCBi
b29sKiBpbmNsdWRlSW5oZXJpdGVkLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpDU1M6OlJ1bGVNYXRjaD4+JiBtYXRjaGVkQ1NTUnVsZXMsIFJlZlB0cjxKU09OOjpB
cnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6UHNldWRvSWRNYXRjaGVzPj4mLCBSZWZQ
dHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkluaGVyaXRlZFN0eWxl
RW50cnk+PiYgaW5oZXJpdGVkRW50cmllcykgb3ZlcnJpZGU7Ci0gICAgdm9pZCBnZXRBbGxTdHls
ZVNoZWV0cyhFcnJvclN0cmluZyYsIFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkNTUzo6Q1NTU3R5bGVTaGVldEhlYWRlcj4+JiBzdHlsZVNoZWV0SW5mb3MpIG92ZXJy
aWRlOwotICAgIHZvaWQgZ2V0U3R5bGVTaGVldChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYg
c3R5bGVTaGVldElkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZVNo
ZWV0Qm9keT4mIHJlc3VsdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBnZXRTdHlsZVNoZWV0VGV4dChF
cnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgc3R5bGVTaGVldElkLCBTdHJpbmcqIHJlc3VsdCkg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRTdHlsZVNoZWV0VGV4dChFcnJvclN0cmluZyYsIGNvbnN0
IFN0cmluZyYgc3R5bGVTaGVldElkLCBjb25zdCBTdHJpbmcmIHRleHQpIG92ZXJyaWRlOwotICAg
IHZvaWQgc2V0U3R5bGVUZXh0KEVycm9yU3RyaW5nJiwgY29uc3QgSlNPTjo6T2JqZWN0JiBzdHls
ZUlkLCBjb25zdCBTdHJpbmcmIHRleHQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6
OkNTU1N0eWxlPiYgcmVzdWx0KSBvdmVycmlkZTsKLSAgICB2b2lkIHNldFJ1bGVTZWxlY3RvcihF
cnJvclN0cmluZyYsIGNvbnN0IEpTT046Ok9iamVjdCYgcnVsZUlkLCBjb25zdCBTdHJpbmcmIHNl
bGVjdG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NSdWxlPiYgcmVzdWx0
KSBvdmVycmlkZTsKLSAgICB2b2lkIGNyZWF0ZVN0eWxlU2hlZXQoRXJyb3JTdHJpbmcmLCBjb25z
dCBTdHJpbmcmIGZyYW1lSWQsIFN0cmluZyogc3R5bGVTaGVldElkKSBvdmVycmlkZTsKLSAgICB2
b2lkIGFkZFJ1bGUoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHN0eWxlU2hlZXRJZCwgY29u
c3QgU3RyaW5nJiBzZWxlY3RvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NT
UnVsZT4mIHJlc3VsdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBnZXRTdXBwb3J0ZWRDU1NQcm9wZXJ0
aWVzKEVycm9yU3RyaW5nJiwgUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6Q1NTOjpDU1NQcm9wZXJ0eUluZm8+PiYgcmVzdWx0KSBvdmVycmlkZTsKLSAgICB2b2lkIGdl
dFN1cHBvcnRlZFN5c3RlbUZvbnRGYW1pbHlOYW1lcyhFcnJvclN0cmluZyYsIFJlZlB0cjxKU09O
OjpBcnJheU9mPFN0cmluZz4+JiByZXN1bHQpIG92ZXJyaWRlOwotICAgIHZvaWQgZm9yY2VQc2V1
ZG9TdGF0ZShFcnJvclN0cmluZyYsIGludCBub2RlSWQsIGNvbnN0IEpTT046OkFycmF5JiBmb3Jj
ZWRQc2V1ZG9DbGFzc2VzKSBvdmVycmlkZTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJv
clN0cmluZ09yPHZvaWQ+IGVuYWJsZSgpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8dm9pZD4gZGlzYWJsZSgpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8UmVmPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1ND
b21wdXRlZFN0eWxlUHJvcGVydHk+Pj4gZ2V0Q29tcHV0ZWRTdHlsZUZvck5vZGUoSW5zcGVjdG9y
OjpQcm90b2NvbDo6RE9NOjpOb2RlSWQpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8c3RkOjp0dXBsZTxSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NT
dHlsZT4gLyogaW5saW5lU3R5bGUgKi8sIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6
OkNTU1N0eWxlPiAvKiBhdHRyaWJ1dGVzU3R5bGUgKi8+PiBnZXRJbmxpbmVTdHlsZXNGb3JOb2Rl
KEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkKTsKKyAgICBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpFcnJvclN0cmluZ09yPHN0ZDo6dHVwbGU8UmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVj
dG9yOjpQcm90b2NvbDo6Q1NTOjpSdWxlTWF0Y2g+PiwgUmVmUHRyPEpTT046OkFycmF5T2Y8SW5z
cGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpQc2V1ZG9JZE1hdGNoZXM+PiwgUmVmUHRyPEpTT046OkFy
cmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpJbmhlcml0ZWRTdHlsZUVudHJ5Pj4+PiBn
ZXRNYXRjaGVkU3R5bGVzRm9yTm9kZShJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZCwg
T3B0aW9uYWw8Ym9vbD4mJiBpbmNsdWRlUHNldWRvLCBPcHRpb25hbDxib29sPiYmIGluY2x1ZGVJ
bmhlcml0ZWQpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEpT
T046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZVNoZWV0SGVhZGVy
Pj4+IGdldEFsbFN0eWxlU2hlZXRzKCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JT
dHJpbmdPcjxSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZVNoZWV0Qm9keT4+
IGdldFN0eWxlU2hlZXQoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0
SWQmKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFN0cmluZz4gZ2V0
U3R5bGVTaGVldFRleHQoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0
SWQmKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHNldFN0
eWxlU2hlZXRUZXh0KGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldElk
JiwgY29uc3QgU3RyaW5nJiB0ZXh0KTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0
cmluZ09yPFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlPj4gc2V0U3R5bGVU
ZXh0KFJlZjxKU09OOjpPYmplY3Q+JiYgc3R5bGVJZCwgY29uc3QgU3RyaW5nJiB0ZXh0KTsKKyAg
ICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpDU1M6OkNTU1J1bGU+PiBzZXRSdWxlU2VsZWN0b3IoUmVmPEpTT046Ok9iamVjdD4mJiBy
dWxlSWQsIGNvbnN0IFN0cmluZyYgc2VsZWN0b3IpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0SWQ+IGNy
ZWF0ZVN0eWxlU2hlZXQoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6RnJhbWVJ
ZCYpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkNTUzo6Q1NTUnVsZT4+IGFkZFJ1bGUoY29uc3QgSW5zcGVjdG9yOjpQcm90
b2NvbDo6Q1NTOjpTdHlsZVNoZWV0SWQmLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yKTsKKyAgICBJ
bnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUHJvcGVydHlJbmZvPj4+IGdldFN1cHBvcnRlZENTU1By
b3BlcnRpZXMoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxK
U09OOjpBcnJheU9mPFN0cmluZz4+PiBnZXRTdXBwb3J0ZWRTeXN0ZW1Gb250RmFtaWx5TmFtZXMo
KTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGZvcmNlUHNl
dWRvU3RhdGUoSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQsIFJlZjxKU09OOjpBcnJh
eT4mJiBmb3JjZWRQc2V1ZG9DbGFzc2VzKTsKIAogICAgIC8vIEluc3BlY3RvclN0eWxlU2hlZXQ6
Okxpc3RlbmVyCi0gICAgdm9pZCBzdHlsZVNoZWV0Q2hhbmdlZChJbnNwZWN0b3JTdHlsZVNoZWV0
Kikgb3ZlcnJpZGU7CisgICAgdm9pZCBzdHlsZVNoZWV0Q2hhbmdlZChJbnNwZWN0b3JTdHlsZVNo
ZWV0Kik7CiAKICAgICAvLyBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24KICAgICB2b2lkIGRvY3Vt
ZW50RGV0YWNoZWQoRG9jdW1lbnQmKTsKQEAgLTExNCw3ICsxMTQsNyBAQCBwdWJsaWM6CiAgICAg
Ym9vbCBmb3JjZVBzZXVkb1N0YXRlKGNvbnN0IEVsZW1lbnQmLCBDU1NTZWxlY3Rvcjo6UHNldWRv
Q2xhc3NUeXBlKTsKIAogICAgIC8vIEluc3BlY3RvckRPTUFnZW50IGhvb2tzCi0gICAgdm9pZCBk
aWRSZW1vdmVET01Ob2RlKE5vZGUmLCBpbnQgbm9kZUlkKTsKKyAgICB2b2lkIGRpZFJlbW92ZURP
TU5vZGUoTm9kZSYsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkKTsKICAgICB2b2lk
IGRpZE1vZGlmeURPTUF0dHIoRWxlbWVudCYpOwogCiAgICAgdm9pZCByZXNldCgpOwpAQCAtMTI2
LDI4ICsxMjYsMjggQEAgcHJpdmF0ZToKICAgICBjbGFzcyBTZXRSdWxlU2VsZWN0b3JBY3Rpb247
CiAgICAgY2xhc3MgQWRkUnVsZUFjdGlvbjsKIAotICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcs
IFJlZlB0cjxJbnNwZWN0b3JTdHlsZVNoZWV0Pj4gSWRUb0luc3BlY3RvclN0eWxlU2hlZXQ7Cisg
ICAgdHlwZWRlZiBIYXNoTWFwPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldElk
LCBSZWZQdHI8SW5zcGVjdG9yU3R5bGVTaGVldD4+IElkVG9JbnNwZWN0b3JTdHlsZVNoZWV0Owog
ICAgIHR5cGVkZWYgSGFzaE1hcDxDU1NTdHlsZVNoZWV0KiwgUmVmUHRyPEluc3BlY3RvclN0eWxl
U2hlZXQ+PiBDU1NTdHlsZVNoZWV0VG9JbnNwZWN0b3JTdHlsZVNoZWV0OwogICAgIHR5cGVkZWYg
SGFzaE1hcDxSZWZQdHI8RG9jdW1lbnQ+LCBWZWN0b3I8UmVmUHRyPEluc3BlY3RvclN0eWxlU2hl
ZXQ+Pj4gRG9jdW1lbnRUb1ZpYUluc3BlY3RvclN0eWxlU2hlZXQ7IC8vICJ2aWEgaW5zcGVjdG9y
IiBzdHlsZXNoZWV0cwotICAgIHR5cGVkZWYgSGFzaE1hcDxpbnQsIHVuc2lnbmVkPiBOb2RlSWRU
b0ZvcmNlZFBzZXVkb1N0YXRlOworICAgIHR5cGVkZWYgSGFzaE1hcDxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpET006Ok5vZGVJZCwgdW5zaWduZWQ+IE5vZGVJZFRvRm9yY2VkUHNldWRvU3RhdGU7CiAK
ICAgICBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGUmIGFzSW5zcGVjdG9yU3R5bGVT
aGVldChTdHlsZWRFbGVtZW50Jik7Ci0gICAgRWxlbWVudCogZWxlbWVudEZvcklkKEVycm9yU3Ry
aW5nJiwgaW50IG5vZGVJZCk7CisgICAgRWxlbWVudCogZWxlbWVudEZvcklkKEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkVycm9yU3RyaW5nJiwgSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQp
OwogCiAgICAgdm9pZCBjb2xsZWN0QWxsU3R5bGVTaGVldHMoVmVjdG9yPEluc3BlY3RvclN0eWxl
U2hlZXQqPiYpOwogICAgIHZvaWQgY29sbGVjdEFsbERvY3VtZW50U3R5bGVTaGVldHMoRG9jdW1l
bnQmLCBWZWN0b3I8Q1NTU3R5bGVTaGVldCo+Jik7CiAgICAgdm9pZCBjb2xsZWN0U3R5bGVTaGVl
dHMoQ1NTU3R5bGVTaGVldCosIFZlY3RvcjxDU1NTdHlsZVNoZWV0Kj4mKTsKICAgICB2b2lkIHNl
dEFjdGl2ZVN0eWxlU2hlZXRzRm9yRG9jdW1lbnQoRG9jdW1lbnQmLCBWZWN0b3I8Q1NTU3R5bGVT
aGVldCo+JiBhY3RpdmVTdHlsZVNoZWV0cyk7CiAKLSAgICBTdHJpbmcgdW5iaW5kU3R5bGVTaGVl
dChJbnNwZWN0b3JTdHlsZVNoZWV0Kik7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpT
dHlsZVNoZWV0SWQgdW5iaW5kU3R5bGVTaGVldChJbnNwZWN0b3JTdHlsZVNoZWV0Kik7CiAgICAg
SW5zcGVjdG9yU3R5bGVTaGVldCogYmluZFN0eWxlU2hlZXQoQ1NTU3R5bGVTaGVldCopOwotICAg
IEluc3BlY3RvclN0eWxlU2hlZXQqIGFzc2VydFN0eWxlU2hlZXRGb3JJZChFcnJvclN0cmluZyYs
IGNvbnN0IFN0cmluZyYpOworICAgIEluc3BlY3RvclN0eWxlU2hlZXQqIGFzc2VydFN0eWxlU2hl
ZXRGb3JJZChJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZyYsIGNvbnN0IEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldElkJik7CiAgICAgSW5zcGVjdG9yU3R5bGVTaGVl
dCogY3JlYXRlSW5zcGVjdG9yU3R5bGVTaGVldEZvckRvY3VtZW50KERvY3VtZW50Jik7CiAgICAg
SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luIGRldGVjdE9yaWdpbihD
U1NTdHlsZVNoZWV0KiBwYWdlU3R5bGVTaGVldCwgRG9jdW1lbnQqIG93bmVyRG9jdW1lbnQpOwog
CiAgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUnVsZT4gYnVpbGRPYmpl
Y3RGb3JSdWxlKGNvbnN0IFN0eWxlUnVsZSosIFN0eWxlOjpSZXNvbHZlciYsIEVsZW1lbnQmKTsK
ICAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NSdWxlPiBidWlsZE9iamVj
dEZvclJ1bGUoQ1NTU3R5bGVSdWxlKik7Ci0gICAgUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVj
dG9yOjpQcm90b2NvbDo6Q1NTOjpSdWxlTWF0Y2g+PiBidWlsZEFycmF5Rm9yTWF0Y2hlZFJ1bGVM
aXN0KGNvbnN0IFZlY3RvcjxSZWZQdHI8Y29uc3QgU3R5bGVSdWxlPj4mLCBTdHlsZTo6UmVzb2x2
ZXImLCBFbGVtZW50JiwgUHNldWRvSWQpOworICAgIFJlZjxKU09OOjpBcnJheU9mPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkNTUzo6UnVsZU1hdGNoPj4gYnVpbGRBcnJheUZvck1hdGNoZWRSdWxlTGlz
dChjb25zdCBWZWN0b3I8UmVmUHRyPGNvbnN0IFN0eWxlUnVsZT4+JiwgU3R5bGU6OlJlc29sdmVy
JiwgRWxlbWVudCYsIFBzZXVkb0lkKTsKICAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
Q1NTOjpDU1NTdHlsZT4gYnVpbGRPYmplY3RGb3JBdHRyaWJ1dGVzU3R5bGUoU3R5bGVkRWxlbWVu
dCYpOwogCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5z
cGVjdG9yQ2FudmFzQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9J
bnNwZWN0b3JDYW52YXNBZ2VudC5jcHAKaW5kZXggZDA5MTY4Mjk0MDBmOTQ2ZjA4NjAwOTU4YWE0
NDNlNTcwNzNmZThhYS4uYTg1MDM4ZjVjMDY3N2U3ZDkyODE5NGRiN2QwNDA5YTk0OGJjOTZiOSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDYW52
YXNBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0
b3JDYW52YXNBZ2VudC5jcHAKQEAgLTEwMiw4ICsxMDIsNyBAQCB2b2lkIEluc3BlY3RvckNhbnZh
c0FnZW50OjpkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9udGVuZFJv
dXRlcgogCiB2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5k
QmFja2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24pCiB7Ci0gICAgRXJyb3JTdHJpbmcg
aWdub3JlZDsKLSAgICBkaXNhYmxlKGlnbm9yZWQpOworICAgIGRpc2FibGUoKTsKIH0KIAogdm9p
ZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6ZGlzY2FyZEFnZW50KCkKQEAgLTExMSwxMCArMTEwLDEw
IEBAIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmRpc2NhcmRBZ2VudCgpCiAgICAgcmVzZXQo
KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6ZW5hYmxlKEVycm9yU3RyaW5nJikK
K1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckNhbnZhc0FnZW50OjplbmFi
bGUoKQogewogICAgIGlmIChtX2luc3RydW1lbnRpbmdBZ2VudHMuZW5hYmxlZENhbnZhc0FnZW50
KCkgPT0gdGhpcykKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4geyB9OwogCiAgICAg
bV9pbnN0cnVtZW50aW5nQWdlbnRzLnNldEVuYWJsZWRDYW52YXNBZ2VudCh0aGlzKTsKIApAQCAt
MTcwLDczICsxNjksODQgQEAgdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6ZW5hYmxlKEVycm9y
U3RyaW5nJikKICAgICAgICAgfQogICAgIH0KICNlbmRpZiAvLyBFTkFCTEUoV0VCR1BVKQorCisg
ICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6ZGlzYWJsZShF
cnJvclN0cmluZyYpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JDYW52
YXNBZ2VudDo6ZGlzYWJsZSgpCiB7CiAgICAgbV9pbnN0cnVtZW50aW5nQWdlbnRzLnNldEVuYWJs
ZWRDYW52YXNBZ2VudChudWxscHRyKTsKIAogICAgIHJlc2V0KCk7CiAKICAgICBtX3JlY29yZGlu
Z0F1dG9DYXB0dXJlRnJhbWVDb3VudCA9IFdURjo6bnVsbG9wdDsKKworICAgIHJldHVybiB7IH07
CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnJlcXVlc3ROb2RlKEVycm9yU3RyaW5n
JiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBjYW52YXNJZCwgaW50KiBub2RlSWQpCitQcm90
b2NvbDo6RXJyb3JTdHJpbmdPcjxQcm90b2NvbDo6RE9NOjpOb2RlSWQ+IEluc3BlY3RvckNhbnZh
c0FnZW50OjpyZXF1ZXN0Tm9kZShjb25zdCBQcm90b2NvbDo6Q2FudmFzOjpDYW52YXNJZCYgY2Fu
dmFzSWQpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAgICAg
YXV0byBpbnNwZWN0b3JDYW52YXMgPSBhc3NlcnRJbnNwZWN0b3JDYW52YXMoZXJyb3JTdHJpbmcs
IGNhbnZhc0lkKTsKICAgICBpZiAoIWluc3BlY3RvckNhbnZhcykKLSAgICAgICAgcmV0dXJuOwor
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCiAgICAgYXV0byog
bm9kZSA9IGluc3BlY3RvckNhbnZhcy0+Y2FudmFzRWxlbWVudCgpOwotICAgIGlmICghbm9kZSkg
ewotICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIGVsZW1lbnQgb2YgY2FudmFzIGZvciBn
aXZlbiBjYW52YXNJZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoIW5vZGUp
CisgICAgICAgIG1ha2VVbmV4cGVjdGVkKCJNaXNzaW5nIGVsZW1lbnQgb2YgY2FudmFzIGZvciBn
aXZlbiBjYW52YXNJZCJfcyk7CiAKICAgICAvLyBGSVhNRTogPGh0dHBzOi8vd2Via2l0Lm9yZy9i
LzIxMzQ5OT4gV2ViIEluc3BlY3RvcjogYWxsb3cgRE9NIG5vZGVzIHRvIGJlIGluc3RydW1lbnRl
ZCBhdCBhbnkgcG9pbnQsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGUgbWFpbiBkb2N1bWVudCBo
YXMgYWxzbyBiZWVuIGluc3RydW1lbnRlZAogICAgIGludCBkb2N1bWVudE5vZGVJZCA9IG1faW5z
dHJ1bWVudGluZ0FnZW50cy5wZXJzaXN0ZW50RE9NQWdlbnQoKS0+Ym91bmROb2RlSWQoJm5vZGUt
PmRvY3VtZW50KCkpOwotICAgIGlmICghZG9jdW1lbnROb2RlSWQpIHsKLSAgICAgICAgZXJyb3JT
dHJpbmcgPSAiRG9jdW1lbnQgbXVzdCBoYXZlIGJlZW4gcmVxdWVzdGVkIl9zOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQorICAgIGlmICghZG9jdW1lbnROb2RlSWQpCisgICAgICAgIG1ha2VVbmV4
cGVjdGVkKCJEb2N1bWVudCBtdXN0IGhhdmUgYmVlbiByZXF1ZXN0ZWQiX3MpOwogCi0gICAgKm5v
ZGVJZCA9IG1faW5zdHJ1bWVudGluZ0FnZW50cy5wZXJzaXN0ZW50RE9NQWdlbnQoKS0+cHVzaE5v
ZGVUb0Zyb250ZW5kKGVycm9yU3RyaW5nLCBkb2N1bWVudE5vZGVJZCwgbm9kZSk7CisgICAgcmV0
dXJuIG1faW5zdHJ1bWVudGluZ0FnZW50cy5wZXJzaXN0ZW50RE9NQWdlbnQoKS0+cHVzaE5vZGVU
b0Zyb250ZW5kKGVycm9yU3RyaW5nLCBkb2N1bWVudE5vZGVJZCwgbm9kZSk7CiB9CiAKLXZvaWQg
SW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnJlcXVlc3RDb250ZW50KEVycm9yU3RyaW5nJiBlcnJvclN0
cmluZywgY29uc3QgU3RyaW5nJiBjYW52YXNJZCwgU3RyaW5nKiBjb250ZW50KQorUHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8U3RyaW5nPiBJbnNwZWN0b3JDYW52YXNBZ2VudDo6cmVxdWVzdENvbnRl
bnQoY29uc3QgUHJvdG9jb2w6OkNhbnZhczo6Q2FudmFzSWQmIGNhbnZhc0lkKQogeworICAgIFBy
b3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIGF1dG8gaW5zcGVjdG9yQ2Fu
dmFzID0gYXNzZXJ0SW5zcGVjdG9yQ2FudmFzKGVycm9yU3RyaW5nLCBjYW52YXNJZCk7CiAgICAg
aWYgKCFpbnNwZWN0b3JDYW52YXMpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1h
a2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAotICAgICpjb250ZW50ID0gaW5zcGVjdG9yQ2Fu
dmFzLT5nZXRDYW52YXNDb250ZW50QXNEYXRhVVJMKGVycm9yU3RyaW5nKTsKKyAgICBhdXRvIHJl
c3VsdCA9IGluc3BlY3RvckNhbnZhcy0+Z2V0Q2FudmFzQ29udGVudEFzRGF0YVVSTChlcnJvclN0
cmluZyk7CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChl
cnJvclN0cmluZyk7CisKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIEluc3BlY3RvckNh
bnZhc0FnZW50OjpyZXF1ZXN0Q2xpZW50Tm9kZXMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBj
b25zdCBTdHJpbmcmIGNhbnZhc0lkLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxpbnQ+PiYgY2xpZW50
Tm9kZUlkcykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPFByb3Rv
Y29sOjpET006Ok5vZGVJZD4+PiBJbnNwZWN0b3JDYW52YXNBZ2VudDo6cmVxdWVzdENsaWVudE5v
ZGVzKGNvbnN0IFByb3RvY29sOjpDYW52YXM6OkNhbnZhc0lkJiBjYW52YXNJZCkKIHsKKyAgICBQ
cm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBhdXRvKiBkb21BZ2VudCA9
IG1faW5zdHJ1bWVudGluZ0FnZW50cy5wZXJzaXN0ZW50RE9NQWdlbnQoKTsKLSAgICBpZiAoIWRv
bUFnZW50KSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIkRPTSBkb21haW4gbXVzdCBiZSBlbmFi
bGVkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghZG9tQWdlbnQpCisgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiRE9NIGRvbWFpbiBtdXN0IGJlIGVuYWJsZWQiX3Mp
OwogCiAgICAgYXV0byBpbnNwZWN0b3JDYW52YXMgPSBhc3NlcnRJbnNwZWN0b3JDYW52YXMoZXJy
b3JTdHJpbmcsIGNhbnZhc0lkKTsKICAgICBpZiAoIWluc3BlY3RvckNhbnZhcykKLSAgICAgICAg
cmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCi0g
ICAgY2xpZW50Tm9kZUlkcyA9IEpTT046OkFycmF5T2Y8aW50Pjo6Y3JlYXRlKCk7CisgICAgYXV0
byBjbGllbnROb2RlSWRzID0gSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6RE9NOjpOb2RlSWQ+Ojpj
cmVhdGUoKTsKICAgICBmb3IgKGF1dG8mIGNsaWVudE5vZGUgOiBpbnNwZWN0b3JDYW52YXMtPmNs
aWVudE5vZGVzKCkpIHsKICAgICAgICAgLy8gRklYTUU6IDxodHRwczovL3dlYmtpdC5vcmcvYi8y
MTM0OTk+IFdlYiBJbnNwZWN0b3I6IGFsbG93IERPTSBub2RlcyB0byBiZSBpbnN0cnVtZW50ZWQg
YXQgYW55IHBvaW50LCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlIG1haW4gZG9jdW1lbnQgaGFz
IGFsc28gYmVlbiBpbnN0cnVtZW50ZWQKICAgICAgICAgaWYgKGF1dG8gZG9jdW1lbnROb2RlSWQg
PSBkb21BZ2VudC0+Ym91bmROb2RlSWQoJmNsaWVudE5vZGUtPmRvY3VtZW50KCkpKQogICAgICAg
ICAgICAgY2xpZW50Tm9kZUlkcy0+YWRkSXRlbShkb21BZ2VudC0+cHVzaE5vZGVUb0Zyb250ZW5k
KGVycm9yU3RyaW5nLCBkb2N1bWVudE5vZGVJZCwgY2xpZW50Tm9kZSkpOwogICAgIH0KKyAgICBy
ZXR1cm4gV1RGTW92ZShjbGllbnROb2RlSWRzKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDYW52YXNB
Z2VudDo6cmVzb2x2ZUNvbnRleHQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJp
bmcmIGNhbnZhc0lkLCBjb25zdCBTdHJpbmcqIG9iamVjdEdyb3VwLCBSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0KQorUHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8UmVmPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+PiBJbnNwZWN0
b3JDYW52YXNBZ2VudDo6cmVzb2x2ZUNvbnRleHQoY29uc3QgUHJvdG9jb2w6OkNhbnZhczo6Q2Fu
dmFzSWQmIGNhbnZhc0lkLCBjb25zdCBTdHJpbmcmIG9iamVjdEdyb3VwKQogeworICAgIFByb3Rv
Y29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIGF1dG8gaW5zcGVjdG9yQ2FudmFz
ID0gYXNzZXJ0SW5zcGVjdG9yQ2FudmFzKGVycm9yU3RyaW5nLCBjYW52YXNJZCk7CiAgICAgaWYg
KCFpbnNwZWN0b3JDYW52YXMpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgIGF1dG8qIHN0YXRlID0gaW5zcGVjdG9yQ2Fu
dmFzLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmV4ZWNTdGF0ZSgpOwogICAgIGF1dG8gaW5q
ZWN0ZWRTY3JpcHQgPSBtX2luamVjdGVkU2NyaXB0TWFuYWdlci5pbmplY3RlZFNjcmlwdEZvcihz
dGF0ZSk7CkBAIC0yNDYsMTIyICsyNTYsMTI5IEBAIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6
OnJlc29sdmVDb250ZXh0KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nCiAK
ICAgICBpZiAoIXZhbHVlKSB7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAg
ICBlcnJvclN0cmluZyA9ICJJbnRlcm5hbCBlcnJvcjogdW5rbm93biBjb250ZXh0IG9mIGNhbnZh
cyBmb3IgZ2l2ZW4gY2FudmFzSWQiX3M7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJu
IG1ha2VVbmV4cGVjdGVkKCJJbnRlcm5hbCBlcnJvcjogdW5rbm93biBjb250ZXh0IG9mIGNhbnZh
cyBmb3IgZ2l2ZW4gY2FudmFzSWQiX3MpOwogICAgIH0KIAotICAgIFN0cmluZyBvYmplY3RHcm91
cE5hbWUgPSBvYmplY3RHcm91cCA/ICpvYmplY3RHcm91cCA6IFN0cmluZygpOwotICAgIHJlc3Vs
dCA9IGluamVjdGVkU2NyaXB0LndyYXBPYmplY3QodmFsdWUsIG9iamVjdEdyb3VwTmFtZSk7Cisg
ICAgYXV0byByZXN1bHQgPSBpbmplY3RlZFNjcmlwdC53cmFwT2JqZWN0KHZhbHVlLCBvYmplY3RH
cm91cCk7CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgi
SW50ZXJuYWwgZXJyb3I6IHVuYWJsZSB0byBjYXN0IENvbnRleHQiKTsKKworICAgIHJldHVybiBy
ZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6
c2V0UmVjb3JkaW5nQXV0b0NhcHR1cmVGcmFtZUNvdW50KEVycm9yU3RyaW5nJiwgaW50IGNvdW50
KQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnNl
dFJlY29yZGluZ0F1dG9DYXB0dXJlRnJhbWVDb3VudChpbnQgY291bnQpCiB7CiAgICAgaWYgKGNv
dW50ID4gMCkKICAgICAgICAgbV9yZWNvcmRpbmdBdXRvQ2FwdHVyZUZyYW1lQ291bnQgPSBjb3Vu
dDsKICAgICBlbHNlCiAgICAgICAgIG1fcmVjb3JkaW5nQXV0b0NhcHR1cmVGcmFtZUNvdW50ID0g
V1RGOjpudWxsb3B0OworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ2FudmFz
QWdlbnQ6OnN0YXJ0UmVjb3JkaW5nKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3Ry
aW5nJiBjYW52YXNJZCwgY29uc3QgaW50KiBmcmFtZUNvdW50LCBjb25zdCBpbnQqIG1lbW9yeUxp
bWl0KQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yQ2FudmFzQWdlbnQ6
OnN0YXJ0UmVjb3JkaW5nKGNvbnN0IFByb3RvY29sOjpDYW52YXM6OkNhbnZhc0lkJiBjYW52YXNJ
ZCwgT3B0aW9uYWw8aW50PiYmIGZyYW1lQ291bnQsIE9wdGlvbmFsPGludD4mJiBtZW1vcnlMaW1p
dCkKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBhdXRv
IGluc3BlY3RvckNhbnZhcyA9IGFzc2VydEluc3BlY3RvckNhbnZhcyhlcnJvclN0cmluZywgY2Fu
dmFzSWQpOwogICAgIGlmICghaW5zcGVjdG9yQ2FudmFzKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICAvLyBGSVhNRTogPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzIwMTY1MT4gV2ViIEluc3BlY3Rvcjog
Q2FudmFzOiBzdXBwb3J0IGNhbnZhcyByZWNvcmRpbmdzIGZvciBXZWJHUFVEZXZpY2UKKyAgICAg
ICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgIGF1dG8qIGNvbnRl
eHQgPSBpbnNwZWN0b3JDYW52YXMtPmNhbnZhc0NvbnRleHQoKTsKLSAgICBpZiAoIWNvbnRleHQp
Ci0gICAgICAgIHJldHVybjsKIAotICAgIGlmIChjb250ZXh0LT5jYWxsVHJhY2luZ0FjdGl2ZSgp
KSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIkFscmVhZHkgcmVjb3JkaW5nIGNhbnZhcyJfczsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICAvLyBGSVhNRTogPGh0dHBzOi8vd2Via2l0Lm9y
Zy9iLzIwMTY1MT4gV2ViIEluc3BlY3RvcjogQ2FudmFzOiBzdXBwb3J0IGNhbnZhcyByZWNvcmRp
bmdzIGZvciBXZWJHUFVEZXZpY2UKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJldHVybiBt
YWtlVW5leHBlY3RlZCgiTm90IHN1cHBvcnRlZCJfcyk7CisKKyAgICBpZiAoY29udGV4dC0+Y2Fs
bFRyYWNpbmdBY3RpdmUoKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJBbHJlYWR5
IHJlY29yZGluZyBjYW52YXMiX3MpOwogCiAgICAgUmVjb3JkaW5nT3B0aW9ucyByZWNvcmRpbmdP
cHRpb25zOwogICAgIGlmIChmcmFtZUNvdW50KQogICAgICAgICByZWNvcmRpbmdPcHRpb25zLmZy
YW1lQ291bnQgPSAqZnJhbWVDb3VudDsKICAgICBpZiAobWVtb3J5TGltaXQpCiAgICAgICAgIHJl
Y29yZGluZ09wdGlvbnMubWVtb3J5TGltaXQgPSAqbWVtb3J5TGltaXQ7Ci0gICAgc3RhcnRSZWNv
cmRpbmcoKmluc3BlY3RvckNhbnZhcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6UmVjb3JkaW5nOjpJ
bml0aWF0b3I6OkZyb250ZW5kLCBXVEZNb3ZlKHJlY29yZGluZ09wdGlvbnMpKTsKKyAgICBzdGFy
dFJlY29yZGluZygqaW5zcGVjdG9yQ2FudmFzLCBQcm90b2NvbDo6UmVjb3JkaW5nOjpJbml0aWF0
b3I6OkZyb250ZW5kLCBXVEZNb3ZlKHJlY29yZGluZ09wdGlvbnMpKTsKKworICAgIHJldHVybiB7
IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnN0b3BSZWNvcmRpbmcoRXJyb3JT
dHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGNhbnZhc0lkKQorUHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnN0b3BSZWNvcmRpbmcoY29u
c3QgUHJvdG9jb2w6OkNhbnZhczo6Q2FudmFzSWQmIGNhbnZhc0lkKQogeworICAgIFByb3RvY29s
OjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIGF1dG8gaW5zcGVjdG9yQ2FudmFzID0g
YXNzZXJ0SW5zcGVjdG9yQ2FudmFzKGVycm9yU3RyaW5nLCBjYW52YXNJZCk7CiAgICAgaWYgKCFp
bnNwZWN0b3JDYW52YXMpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEZJWE1FOiA8aHR0cHM6
Ly93ZWJraXQub3JnL2IvMjAxNjUxPiBXZWIgSW5zcGVjdG9yOiBDYW52YXM6IHN1cHBvcnQgY2Fu
dmFzIHJlY29yZGluZ3MgZm9yIFdlYkdQVURldmljZQorICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoZXJyb3JTdHJpbmcpOwogCiAgICAgYXV0byogY29udGV4dCA9IGluc3BlY3RvckNhbnZh
cy0+Y2FudmFzQ29udGV4dCgpOwotICAgIGlmICghY29udGV4dCkKLSAgICAgICAgcmV0dXJuOwog
Ci0gICAgaWYgKCFjb250ZXh0LT5jYWxsVHJhY2luZ0FjdGl2ZSgpKSB7Ci0gICAgICAgIGVycm9y
U3RyaW5nID0gIk5vdCByZWNvcmRpbmcgY2FudmFzIl9zOwotICAgICAgICByZXR1cm47Ci0gICAg
fQorICAgIC8vIEZJWE1FOiA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMjAxNjUxPiBXZWIgSW5zcGVj
dG9yOiBDYW52YXM6IHN1cHBvcnQgY2FudmFzIHJlY29yZGluZ3MgZm9yIFdlYkdQVURldmljZQor
ICAgIGlmICghY29udGV4dCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJOb3Qgc3Vw
cG9ydGVkIl9zKTsKKworICAgIGlmICghY29udGV4dC0+Y2FsbFRyYWNpbmdBY3RpdmUoKSkKKyAg
ICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJOb3QgcmVjb3JkaW5nIGNhbnZhcyJfcyk7CiAK
ICAgICBkaWRGaW5pc2hSZWNvcmRpbmdDYW52YXNGcmFtZSgqY29udGV4dCwgdHJ1ZSk7CisKKyAg
ICByZXR1cm4geyB9OwogfQogCiAjaWYgRU5BQkxFKFdFQkdMKSB8fCBFTkFCTEUoV0VCR1BVKQot
dm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6cmVxdWVzdFNoYWRlclNvdXJjZShFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgcHJvZ3JhbUlkLCBjb25zdCBTdHJpbmcmIHNo
YWRlclR5cGVTdHJpbmcsIFN0cmluZyogb3V0U291cmNlKQorUHJvdG9jb2w6OkVycm9yU3RyaW5n
T3I8U3RyaW5nPiBJbnNwZWN0b3JDYW52YXNBZ2VudDo6cmVxdWVzdFNoYWRlclNvdXJjZShjb25z
dCBQcm90b2NvbDo6Q2FudmFzOjpQcm9ncmFtSWQmIHByb2dyYW1JZCwgUHJvdG9jb2w6OkNhbnZh
czo6U2hhZGVyVHlwZSBzaGFkZXJUeXBlKQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBl
cnJvclN0cmluZzsKKwogICAgIGF1dG8gaW5zcGVjdG9yUHJvZ3JhbSA9IGFzc2VydEluc3BlY3Rv
clByb2dyYW0oZXJyb3JTdHJpbmcsIHByb2dyYW1JZCk7CiAgICAgaWYgKCFpbnNwZWN0b3JQcm9n
cmFtKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJv
clN0cmluZyk7CiAKLSAgICBhdXRvIHNoYWRlclR5cGUgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpJ
bnNwZWN0b3JIZWxwZXJzOjpwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90
b2NvbDo6Q2FudmFzOjpTaGFkZXJUeXBlPihzaGFkZXJUeXBlU3RyaW5nKTsKLSAgICBpZiAoIXNo
YWRlclR5cGUpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSBtYWtlU3RyaW5nKCJVbmtub3duIHNo
YWRlclR5cGU6ICJfcywgc2hhZGVyVHlwZVN0cmluZyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
CisgICAgYXV0byBzb3VyY2UgPSBpbnNwZWN0b3JQcm9ncmFtLT5yZXF1ZXN0U2hhZGVyU291cmNl
KHNoYWRlclR5cGUpOworICAgIGlmICghc291cmNlKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoIk1pc3Npbmcgc2hhZGVyIG9mIGdpdmVuIHNoYWRlclR5cGUgZm9yIGdpdmVuIHByb2dy
YW1JZCJfcyk7CiAKLSAgICBhdXRvIHNvdXJjZSA9IGluc3BlY3RvclByb2dyYW0tPnJlcXVlc3RT
aGFkZXJTb3VyY2Uoc2hhZGVyVHlwZS52YWx1ZSgpKTsKLSAgICBpZiAoIXNvdXJjZSkgewotICAg
ICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIHNoYWRlciBvZiBnaXZlbiBzaGFkZXJUeXBlIGZv
ciBnaXZlbiBwcm9ncmFtSWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAqb3V0
U291cmNlID0gc291cmNlOworICAgIHJldHVybiBzb3VyY2U7CiB9CiAKLXZvaWQgSW5zcGVjdG9y
Q2FudmFzQWdlbnQ6OnVwZGF0ZVNoYWRlcihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0
IFN0cmluZyYgcHJvZ3JhbUlkLCBjb25zdCBTdHJpbmcmIHNoYWRlclR5cGVTdHJpbmcsIGNvbnN0
IFN0cmluZyYgc291cmNlKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9y
Q2FudmFzQWdlbnQ6OnVwZGF0ZVNoYWRlcihjb25zdCBQcm90b2NvbDo6Q2FudmFzOjpQcm9ncmFt
SWQmIHByb2dyYW1JZCwgUHJvdG9jb2w6OkNhbnZhczo6U2hhZGVyVHlwZSBzaGFkZXJUeXBlLCBj
b25zdCBTdHJpbmcmIHNvdXJjZSkKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JT
dHJpbmc7CisKICAgICBhdXRvIGluc3BlY3RvclByb2dyYW0gPSBhc3NlcnRJbnNwZWN0b3JQcm9n
cmFtKGVycm9yU3RyaW5nLCBwcm9ncmFtSWQpOwogICAgIGlmICghaW5zcGVjdG9yUHJvZ3JhbSkK
LSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJp
bmcpOwogCi0gICAgYXV0byBzaGFkZXJUeXBlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6SW5zcGVj
dG9ySGVscGVyczo6cGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkNhbnZhczo6U2hhZGVyVHlwZT4oc2hhZGVyVHlwZVN0cmluZyk7Ci0gICAgaWYgKCFzaGFkZXJU
eXBlKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gbWFrZVN0cmluZygiVW5rbm93biBzaGFkZXJU
eXBlOiAiX3MsIHNoYWRlclR5cGVTdHJpbmcpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAg
IGlmICghaW5zcGVjdG9yUHJvZ3JhbS0+dXBkYXRlU2hhZGVyKHNoYWRlclR5cGUsIHNvdXJjZSkp
CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiRmFpbGVkIHRvIHVwZGF0ZSBzaGFkZXIg
b2YgZ2l2ZW4gc2hhZGVyVHlwZSBmb3IgZ2l2ZW4gcHJvZ3JhbUlkIl9zKTsKIAotICAgIGlmICgh
aW5zcGVjdG9yUHJvZ3JhbS0+dXBkYXRlU2hhZGVyKHNoYWRlclR5cGUudmFsdWUoKSwgc291cmNl
KSkKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiRmFpbGVkIHRvIHVwZGF0ZSBzaGFkZXIgb2YgZ2l2
ZW4gc2hhZGVyVHlwZSBmb3IgZ2l2ZW4gcHJvZ3JhbUlkIl9zOworICAgIHJldHVybiB7IH07CiB9
CiAKICNpZiBFTkFCTEUoV0VCR0wpCi12b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjpzZXRTaGFk
ZXJQcm9ncmFtRGlzYWJsZWQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcm
IHByb2dyYW1JZCwgYm9vbCBkaXNhYmxlZCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+
IEluc3BlY3RvckNhbnZhc0FnZW50OjpzZXRTaGFkZXJQcm9ncmFtRGlzYWJsZWQoY29uc3QgUHJv
dG9jb2w6OkNhbnZhczo6UHJvZ3JhbUlkJiBwcm9ncmFtSWQsIGJvb2wgZGlzYWJsZWQpCiB7Cisg
ICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAgICAgYXV0byBpbnNwZWN0
b3JQcm9ncmFtID0gYXNzZXJ0SW5zcGVjdG9yUHJvZ3JhbShlcnJvclN0cmluZywgcHJvZ3JhbUlk
KTsKICAgICBpZiAoIWluc3BlY3RvclByb2dyYW0pCi0gICAgICAgIHJldHVybjsKKyAgICAgICAg
cmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgIGluc3BlY3RvclByb2dy
YW0tPnNldERpc2FibGVkKGRpc2FibGVkKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQg
SW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnNldFNoYWRlclByb2dyYW1IaWdobGlnaHRlZChFcnJvclN0
cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgcHJvZ3JhbUlkLCBib29sIGhpZ2hsaWdo
dGVkKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yQ2FudmFzQWdlbnQ6
OnNldFNoYWRlclByb2dyYW1IaWdobGlnaHRlZChjb25zdCBQcm90b2NvbDo6Q2FudmFzOjpQcm9n
cmFtSWQmIHByb2dyYW1JZCwgYm9vbCBoaWdobGlnaHRlZCkKIHsKKyAgICBQcm90b2NvbDo6RXJy
b3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBhdXRvIGluc3BlY3RvclByb2dyYW0gPSBhc3Nl
cnRJbnNwZWN0b3JQcm9ncmFtKGVycm9yU3RyaW5nLCBwcm9ncmFtSWQpOwogICAgIGlmICghaW5z
cGVjdG9yUHJvZ3JhbSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoZXJyb3JTdHJpbmcpOwogCiAgICAgaW5zcGVjdG9yUHJvZ3JhbS0+c2V0SGlnaGxpZ2h0
ZWQoaGlnaGxpZ2h0ZWQpOworCisgICAgcmV0dXJuIHsgfTsKIH0KICNlbmRpZiAvLyBFTkFCTEUo
V0VCR0wpCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKSB8fCBFTkFCTEUoV0VCR1BVKQpAQCAtNDEz
LDcgKzQzMCw3IEBAIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmRpZENyZWF0ZUNhbnZhc1Jl
bmRlcmluZ0NvbnRleHQoQ2FudmFzUmVuZGVyaW5nQ29udGV4CiAgICAgaWYgKG1fcmVjb3JkaW5n
QXV0b0NhcHR1cmVGcmFtZUNvdW50KSB7CiAgICAgICAgIFJlY29yZGluZ09wdGlvbnMgcmVjb3Jk
aW5nT3B0aW9uczsKICAgICAgICAgcmVjb3JkaW5nT3B0aW9ucy5mcmFtZUNvdW50ID0gbV9yZWNv
cmRpbmdBdXRvQ2FwdHVyZUZyYW1lQ291bnQudmFsdWUoKTsKLSAgICAgICAgc3RhcnRSZWNvcmRp
bmcoaW5zcGVjdG9yQ2FudmFzLCBJbnNwZWN0b3I6OlByb3RvY29sOjpSZWNvcmRpbmc6OkluaXRp
YXRvcjo6QXV0b0NhcHR1cmUsIFdURk1vdmUocmVjb3JkaW5nT3B0aW9ucykpOworICAgICAgICBz
dGFydFJlY29yZGluZyhpbnNwZWN0b3JDYW52YXMsIFByb3RvY29sOjpSZWNvcmRpbmc6OkluaXRp
YXRvcjo6QXV0b0NhcHR1cmUsIFdURk1vdmUocmVjb3JkaW5nT3B0aW9ucykpOwogICAgIH0KIH0K
IApAQCAtNTczLDcgKzU5MCw3IEBAIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmNvbnNvbGVT
dGFydFJlY29yZGluZ0NhbnZhcyhDYW52YXNSZW5kZXJpbmdDb250ZXh0JiBjCiAgICAgICAgIGlm
IChKU0M6OkpTVmFsdWUgb3B0aW9uTmFtZSA9IG9wdGlvbnMtPmdldCgmZXhlYywgSlNDOjpJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAibmFtZSIpKSkKICAgICAgICAgICAgIHJlY29yZGluZ09w
dGlvbnMubmFtZSA9IG9wdGlvbk5hbWUudG9XVEZTdHJpbmcoJmV4ZWMpOwogICAgIH0KLSAgICBz
dGFydFJlY29yZGluZygqaW5zcGVjdG9yQ2FudmFzLCBJbnNwZWN0b3I6OlByb3RvY29sOjpSZWNv
cmRpbmc6OkluaXRpYXRvcjo6Q29uc29sZSwgV1RGTW92ZShyZWNvcmRpbmdPcHRpb25zKSk7Cisg
ICAgc3RhcnRSZWNvcmRpbmcoKmluc3BlY3RvckNhbnZhcywgUHJvdG9jb2w6OlJlY29yZGluZzo6
SW5pdGlhdG9yOjpDb25zb2xlLCBXVEZNb3ZlKHJlY29yZGluZ09wdGlvbnMpKTsKIH0KIAogdm9p
ZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6Y29uc29sZVN0b3BSZWNvcmRpbmdDYW52YXMoQ2FudmFz
UmVuZGVyaW5nQ29udGV4dCYgY29udGV4dCkKQEAgLTY5OCw3ICs3MTUsNyBAQCB2b2lkIEluc3Bl
Y3RvckNhbnZhc0FnZW50Ojp3aWxsRGVzdHJveVdlYkdQVVBpcGVsaW5lKFdlYkdQVVBpcGVsaW5l
JiBwaXBlbGluZSkKIH0KICNlbmRpZiAvLyBFTkFCTEUoV0VCR1BVKQogCi12b2lkIEluc3BlY3Rv
ckNhbnZhc0FnZW50OjpzdGFydFJlY29yZGluZyhJbnNwZWN0b3JDYW52YXMmIGluc3BlY3RvckNh
bnZhcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6UmVjb3JkaW5nOjpJbml0aWF0b3IgaW5pdGlhdG9y
LCBSZWNvcmRpbmdPcHRpb25zJiYgcmVjb3JkaW5nT3B0aW9ucykKK3ZvaWQgSW5zcGVjdG9yQ2Fu
dmFzQWdlbnQ6OnN0YXJ0UmVjb3JkaW5nKEluc3BlY3RvckNhbnZhcyYgaW5zcGVjdG9yQ2FudmFz
LCBQcm90b2NvbDo6UmVjb3JkaW5nOjpJbml0aWF0b3IgaW5pdGlhdG9yLCBSZWNvcmRpbmdPcHRp
b25zJiYgcmVjb3JkaW5nT3B0aW9ucykKIHsKICAgICBhdXRvKiBjb250ZXh0ID0gaW5zcGVjdG9y
Q2FudmFzLmNhbnZhc0NvbnRleHQoKTsKICAgICBBU1NFUlQoY29udGV4dCk7CkBAIC04NDAsNyAr
ODU3LDcgQEAgdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6dW5iaW5kQ2FudmFzKEluc3BlY3Rv
ckNhbnZhcyYgaW5zcGVjdG9yQ2FudmFzKQogICAgICAgICBtX2NhbnZhc0Rlc3Ryb3llZFRpbWVy
LnN0YXJ0T25lU2hvdCgwX3MpOwogfQogCi1SZWZQdHI8SW5zcGVjdG9yQ2FudmFzPiBJbnNwZWN0
b3JDYW52YXNBZ2VudDo6YXNzZXJ0SW5zcGVjdG9yQ2FudmFzKEVycm9yU3RyaW5nJiBlcnJvclN0
cmluZywgY29uc3QgU3RyaW5nJiBjYW52YXNJZCkKK1JlZlB0cjxJbnNwZWN0b3JDYW52YXM+IElu
c3BlY3RvckNhbnZhc0FnZW50Ojphc3NlcnRJbnNwZWN0b3JDYW52YXMoUHJvdG9jb2w6OkVycm9y
U3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBjYW52YXNJZCkKIHsKICAgICBhdXRv
IGluc3BlY3RvckNhbnZhcyA9IG1faWRlbnRpZmllclRvSW5zcGVjdG9yQ2FudmFzLmdldChjYW52
YXNJZCk7CiAgICAgaWYgKCFpbnNwZWN0b3JDYW52YXMpIHsKQEAgLTg4NSw3ICs5MDIsNyBAQCB2
b2lkIEluc3BlY3RvckNhbnZhc0FnZW50Ojp1bmJpbmRQcm9ncmFtKEluc3BlY3RvclNoYWRlclBy
b2dyYW0mIGluc3BlY3RvclByb2dyYQogICAgICAgICBtX3Byb2dyYW1EZXN0cm95ZWRUaW1lci5z
dGFydE9uZVNob3QoMF9zKTsKIH0KIAotUmVmUHRyPEluc3BlY3RvclNoYWRlclByb2dyYW0+IElu
c3BlY3RvckNhbnZhc0FnZW50Ojphc3NlcnRJbnNwZWN0b3JQcm9ncmFtKEVycm9yU3RyaW5nJiBl
cnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBwcm9ncmFtSWQpCitSZWZQdHI8SW5zcGVjdG9yU2hh
ZGVyUHJvZ3JhbT4gSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmFzc2VydEluc3BlY3RvclByb2dyYW0o
UHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBwcm9ncmFt
SWQpCiB7CiAgICAgYXV0byBpbnNwZWN0b3JQcm9ncmFtID0gbV9pZGVudGlmaWVyVG9JbnNwZWN0
b3JQcm9ncmFtLmdldChwcm9ncmFtSWQpOwogICAgIGlmICghaW5zcGVjdG9yUHJvZ3JhbSkgewpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDYW52
YXNBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDYW52
YXNBZ2VudC5oCmluZGV4IDBlZjFhZWZiNjQ3ZWFkOTliN2QwZWIyNDNmZDBiNDA4Y2U0NWI2MGYu
Ljg2YmRiNTEyNTY5YTMxMWY3YTI1MDg5NWU4ZmZiYzlkZDllYmNkYzAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ2FudmFzQWdlbnQuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNhbnZhc0FnZW50LmgK
QEAgLTU3LDQzICs1Nyw0MSBAQCBjbGFzcyBXZWJHUFVTd2FwQ2hhaW47CiAjZW5kaWYgLy8gRU5B
QkxFKFdFQkdQVSkKICNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpIHx8IEVOQUJMRShXRUJHUFUpCiAK
LXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCiBjbGFzcyBJbnNwZWN0b3JDYW52YXNBZ2Vu
dCBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3JBZ2VudEJhc2UsIHB1YmxpYyBJbnNwZWN0b3I6OkNh
bnZhc0JhY2tlbmREaXNwYXRjaGVySGFuZGxlciwgcHVibGljIENhbnZhc09ic2VydmVyLCBwdWJs
aWMgQ2FuTWFrZVdlYWtQdHI8SW5zcGVjdG9yQ2FudmFzQWdlbnQ+IHsKICAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShJbnNwZWN0b3JDYW52YXNBZ2VudCk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CiBwdWJsaWM6CiAgICAgSW5zcGVjdG9yQ2FudmFzQWdlbnQoUGFnZUFnZW50Q29udGV4
dCYpOwotICAgIH5JbnNwZWN0b3JDYW52YXNBZ2VudCgpIG92ZXJyaWRlOworICAgIH5JbnNwZWN0
b3JDYW52YXNBZ2VudCgpOwogCiAgICAgLy8gSW5zcGVjdG9yQWdlbnRCYXNlCi0gICAgdm9pZCBk
aWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9udGVuZFJvdXRlciosIElu
c3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXIqKSBvdmVycmlkZTsKLSAgICB2b2lkIHdpbGxEZXN0
cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlzY29ubmVjdFJlYXNvbikgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCBkaXNjYXJkQWdlbnQoKSBvdmVycmlkZTsKKyAgICB2b2lkIGRpZENyZWF0
ZUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kUm91dGVyKiwgSW5zcGVjdG9y
OjpCYWNrZW5kRGlzcGF0Y2hlciopOworICAgIHZvaWQgd2lsbERlc3Ryb3lGcm9udGVuZEFuZEJh
Y2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKTsKKyAgICB2b2lkIGRpc2NhcmRBZ2Vu
dCgpOwogCiAgICAgLy8gQ2FudmFzQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyCi0gICAgdm9pZCBl
bmFibGUoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2b2lkIGRpc2FibGUoRXJyb3JTdHJp
bmcmKSBvdmVycmlkZTsKLSAgICB2b2lkIHJlcXVlc3ROb2RlKEVycm9yU3RyaW5nJiwgY29uc3Qg
U3RyaW5nJiBjYW52YXNJZCwgaW50KiBub2RlSWQpIG92ZXJyaWRlOwotICAgIHZvaWQgcmVxdWVz
dENvbnRlbnQoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGNhbnZhc0lkLCBTdHJpbmcqIGNv
bnRlbnQpIG92ZXJyaWRlOwotICAgIHZvaWQgcmVxdWVzdENsaWVudE5vZGVzKEVycm9yU3RyaW5n
JiwgY29uc3QgU3RyaW5nJiBjYW52YXNJZCwgUmVmUHRyPEpTT046OkFycmF5T2Y8aW50Pj4mKSBv
dmVycmlkZTsKLSAgICB2b2lkIHJlc29sdmVDb250ZXh0KEVycm9yU3RyaW5nJiwgY29uc3QgU3Ry
aW5nJiBjYW52YXNJZCwgY29uc3QgU3RyaW5nKiBvYmplY3RHcm91cCwgUmVmUHRyPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mKSBvdmVycmlkZTsKLSAgICB2b2lk
IHNldFJlY29yZGluZ0F1dG9DYXB0dXJlRnJhbWVDb3VudChFcnJvclN0cmluZyYsIGludCBjb3Vu
dCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzdGFydFJlY29yZGluZyhFcnJvclN0cmluZyYsIGNvbnN0
IFN0cmluZyYgY2FudmFzSWQsIGNvbnN0IGludCogZnJhbWVDb3VudCwgY29uc3QgaW50KiBtZW1v
cnlMaW1pdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzdG9wUmVjb3JkaW5nKEVycm9yU3RyaW5nJiwg
Y29uc3QgU3RyaW5nJiBjYW52YXNJZCkgb3ZlcnJpZGU7CisgICAgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBlbmFibGUoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29s
OjpFcnJvclN0cmluZ09yPHZvaWQ+IGRpc2FibGUoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29s
OjpFcnJvclN0cmluZ09yPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkPiByZXF1ZXN0
Tm9kZShjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpDYW52YXM6OkNhbnZhc0lkJik7CisgICAg
SW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxTdHJpbmc+IHJlcXVlc3RDb250ZW50
KGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6Q2FudmFzSWQmKTsKKyAgICBJbnNw
ZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkPj4+IHJlcXVlc3RDbGllbnROb2Rlcyhjb25zdCBJbnNw
ZWN0b3I6OlByb3RvY29sOjpDYW52YXM6OkNhbnZhc0lkJik7CisgICAgSW5zcGVjdG9yOjpQcm90
b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6UmVt
b3RlT2JqZWN0Pj4gcmVzb2x2ZUNvbnRleHQoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6Q2Fu
dmFzOjpDYW52YXNJZCYsIGNvbnN0IFN0cmluZyYgb2JqZWN0R3JvdXApOworICAgIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc2V0UmVjb3JkaW5nQXV0b0NhcHR1cmVG
cmFtZUNvdW50KGludCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2
b2lkPiBzdGFydFJlY29yZGluZyhjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpDYW52YXM6OkNh
bnZhc0lkJiwgT3B0aW9uYWw8aW50PiYmIGZyYW1lQ291bnQsIE9wdGlvbmFsPGludD4mJiBtZW1v
cnlMaW1pdCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBz
dG9wUmVjb3JkaW5nKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6Q2FudmFzSWQm
KTsKICNpZiBFTkFCTEUoV0VCR0wpIHx8IEVOQUJMRShXRUJHUFUpCi0gICAgdm9pZCByZXF1ZXN0
U2hhZGVyU291cmNlKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBwcm9ncmFtSWQsIGNvbnN0
IFN0cmluZyYgc2hhZGVyVHlwZSwgU3RyaW5nKiBzb3VyY2UpIG92ZXJyaWRlOwotICAgIHZvaWQg
dXBkYXRlU2hhZGVyKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBwcm9ncmFtSWQsIGNvbnN0
IFN0cmluZyYgc2hhZGVyVHlwZSwgY29uc3QgU3RyaW5nJiBzb3VyY2UpIG92ZXJyaWRlOworICAg
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8U3RyaW5nPiByZXF1ZXN0U2hhZGVy
U291cmNlKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6UHJvZ3JhbUlkJiwgSW5z
cGVjdG9yOjpQcm90b2NvbDo6Q2FudmFzOjpTaGFkZXJUeXBlKTsKKyAgICBJbnNwZWN0b3I6OlBy
b3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHVwZGF0ZVNoYWRlcihjb25zdCBJbnNwZWN0b3I6
OlByb3RvY29sOjpDYW52YXM6OlByb2dyYW1JZCYsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZh
czo6U2hhZGVyVHlwZSwgY29uc3QgU3RyaW5nJiBzb3VyY2UpOwogI2lmIEVOQUJMRShXRUJHTCkK
LSAgICB2b2lkIHNldFNoYWRlclByb2dyYW1EaXNhYmxlZChFcnJvclN0cmluZyYsIGNvbnN0IFN0
cmluZyYgcHJvZ3JhbUlkLCBib29sIGRpc2FibGVkKSBvdmVycmlkZTsKLSAgICB2b2lkIHNldFNo
YWRlclByb2dyYW1IaWdobGlnaHRlZChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgcHJvZ3Jh
bUlkLCBib29sIGhpZ2hsaWdodGVkKSBvdmVycmlkZTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29s
OjpFcnJvclN0cmluZ09yPHZvaWQ+IHNldFNoYWRlclByb2dyYW1EaXNhYmxlZChjb25zdCBJbnNw
ZWN0b3I6OlByb3RvY29sOjpDYW52YXM6OlByb2dyYW1JZCYsIGJvb2wgZGlzYWJsZWQpOworICAg
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc2V0U2hhZGVyUHJvZ3Jh
bUhpZ2hsaWdodGVkKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6UHJvZ3JhbUlk
JiwgYm9vbCBoaWdobGlnaHRlZCk7CiAjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKQogI2VuZGlmIC8v
IEVOQUJMRShXRUJHTCkgfHwgRU5BQkxFKFdFQkdQVSkKIAogICAgIC8vIENhbnZhc09ic2VydmVy
Ci0gICAgdm9pZCBjYW52YXNDaGFuZ2VkKENhbnZhc0Jhc2UmLCBjb25zdCBGbG9hdFJlY3QmKSBv
dmVycmlkZTsKLSAgICB2b2lkIGNhbnZhc1Jlc2l6ZWQoQ2FudmFzQmFzZSYpIG92ZXJyaWRlIHsg
fQotICAgIHZvaWQgY2FudmFzRGVzdHJveWVkKENhbnZhc0Jhc2UmKSBvdmVycmlkZTsKKyAgICB2
b2lkIGNhbnZhc0NoYW5nZWQoQ2FudmFzQmFzZSYsIGNvbnN0IEZsb2F0UmVjdCYpOworICAgIHZv
aWQgY2FudmFzUmVzaXplZChDYW52YXNCYXNlJikgeyB9CisgICAgdm9pZCBjYW52YXNEZXN0cm95
ZWQoQ2FudmFzQmFzZSYpOwogCiAgICAgLy8gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uCiAgICAg
dm9pZCBmcmFtZU5hdmlnYXRlZChGcmFtZSYpOwpAQCAtMTM4LDcgKzEzNiw3IEBAIHByaXZhdGU6
CiAgICAgSW5zcGVjdG9yQ2FudmFzJiBiaW5kQ2FudmFzKFdlYkdQVURldmljZSYsIGJvb2wgY2Fw
dHVyZUJhY2t0cmFjZSk7CiAjZW5kaWYgLy8gRU5BQkxFKFdFQkdQVSkKICAgICB2b2lkIHVuYmlu
ZENhbnZhcyhJbnNwZWN0b3JDYW52YXMmKTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yQ2FudmFzPiBh
c3NlcnRJbnNwZWN0b3JDYW52YXMoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGNhbnZhc0lk
KTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yQ2FudmFzPiBhc3NlcnRJbnNwZWN0b3JDYW52YXMoSW5z
cGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGNhbnZhc0lkKTsK
ICAgICBSZWZQdHI8SW5zcGVjdG9yQ2FudmFzPiBmaW5kSW5zcGVjdG9yQ2FudmFzKENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQmKTsKICNpZiBFTkFCTEUoV0VCR1BVKQogICAgIFJlZlB0cjxJbnNwZWN0
b3JDYW52YXM+IGZpbmRJbnNwZWN0b3JDYW52YXMoV2ViR1BVRGV2aWNlJik7CkBAIC0xNDYsNyAr
MTQ0LDcgQEAgcHJpdmF0ZToKIAogI2lmIEVOQUJMRShXRUJHTCkgfHwgRU5BQkxFKFdFQkdQVSkK
ICAgICB2b2lkIHVuYmluZFByb2dyYW0oSW5zcGVjdG9yU2hhZGVyUHJvZ3JhbSYpOwotICAgIFJl
ZlB0cjxJbnNwZWN0b3JTaGFkZXJQcm9ncmFtPiBhc3NlcnRJbnNwZWN0b3JQcm9ncmFtKEVycm9y
U3RyaW5nJiwgY29uc3QgU3RyaW5nJiBwcm9ncmFtSWQpOworICAgIFJlZlB0cjxJbnNwZWN0b3JT
aGFkZXJQcm9ncmFtPiBhc3NlcnRJbnNwZWN0b3JQcm9ncmFtKEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBwcm9ncmFtSWQpOwogI2lmIEVOQUJMRShXRUJH
TCkKICAgICBSZWZQdHI8SW5zcGVjdG9yU2hhZGVyUHJvZ3JhbT4gZmluZEluc3BlY3RvclByb2dy
YW0oV2ViR0xQcm9ncmFtJik7CiAjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01BZ2VudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmNwcAppbmRl
eCA4MzlhNThiNTQ4ODU0ZGU3NTc3MGQyNjMzZDhkNTlhZjU5ZjI0MTEyLi5kYmRiODUxOGM5YTFk
YmUxYWFmNzdiMDIyZjYwYTljMTZkNDQwMzg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmNwcApAQCAtMTI5LDQwICsxMjks
MzkgQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIHN0YXRpYyBjb25zdCBzaXplX3QgbWF4
VGV4dFNpemUgPSAxMDAwMDsKIHN0YXRpYyBjb25zdCBVQ2hhciBlbGxpcHNpc1VDaGFyW10gPSB7
IDB4MjAyNiwgMCB9OwogCi1zdGF0aWMgQ29sb3IgcGFyc2VDb2xvcihjb25zdCBKU09OOjpPYmpl
Y3QqIGNvbG9yT2JqZWN0KQorc3RhdGljIENvbG9yIHBhcnNlQ29sb3IoUmVmUHRyPEpTT046Ok9i
amVjdD4mJiBjb2xvck9iamVjdCkKIHsKICAgICBpZiAoIWNvbG9yT2JqZWN0KQogICAgICAgICBy
ZXR1cm4gQ29sb3I6OnRyYW5zcGFyZW50QmxhY2s7CiAKLSAgICBpbnQgciA9IDA7Ci0gICAgaW50
IGcgPSAwOwotICAgIGludCBiID0gMDsKLSAgICBpZiAoIWNvbG9yT2JqZWN0LT5nZXRJbnRlZ2Vy
KCJyIiwgcikgfHwgIWNvbG9yT2JqZWN0LT5nZXRJbnRlZ2VyKCJnIiwgZykgfHwgIWNvbG9yT2Jq
ZWN0LT5nZXRJbnRlZ2VyKCJiIiwgYikpCisgICAgYXV0byByID0gY29sb3JPYmplY3QtPmdldElu
dGVnZXIoUHJvdG9jb2w6OkRPTTo6UkdCQUNvbG9yOjpyS2V5KTsKKyAgICBhdXRvIGcgPSBjb2xv
ck9iamVjdC0+Z2V0SW50ZWdlcihQcm90b2NvbDo6RE9NOjpSR0JBQ29sb3I6OmdLZXkpOworICAg
IGF1dG8gYiA9IGNvbG9yT2JqZWN0LT5nZXRJbnRlZ2VyKFByb3RvY29sOjpET006OlJHQkFDb2xv
cjo6YktleSk7CisgICAgaWYgKCFyIHx8ICFnIHx8ICFiKQogICAgICAgICByZXR1cm4gQ29sb3I6
OnRyYW5zcGFyZW50QmxhY2s7CiAKLSAgICBkb3VibGUgYSA9IDEuMDsKLSAgICBpZiAoIWNvbG9y
T2JqZWN0LT5nZXREb3VibGUoImEiLCBhKSkKLSAgICAgICAgcmV0dXJuIGNsYW1wVG9Db21wb25l
bnRCeXRlczxTUkdCQT4ociwgZywgYik7Ci0gICAgcmV0dXJuIGNsYW1wVG9Db21wb25lbnRCeXRl
czxTUkdCQT4ociwgZywgYiwgY29udmVydFRvQ29tcG9uZW50Qnl0ZShhKSk7CisgICAgYXV0byBh
ID0gY29sb3JPYmplY3QtPmdldERvdWJsZShQcm90b2NvbDo6RE9NOjpSR0JBQ29sb3I6OmFLZXkp
OworICAgIGlmICghYSkKKyAgICAgICAgcmV0dXJuIGNsYW1wVG9Db21wb25lbnRCeXRlczxTUkdC
QT4oKnIsICpnLCAqYik7CisgICAgcmV0dXJuIGNsYW1wVG9Db21wb25lbnRCeXRlczxTUkdCQT4o
KnIsICpnLCAqYiwgY29udmVydFRvQ29tcG9uZW50Qnl0ZSgqYSkpOwogfQogCi1zdGF0aWMgQ29s
b3IgcGFyc2VDb25maWdDb2xvcihjb25zdCBTdHJpbmcmIGZpZWxkTmFtZSwgY29uc3QgSlNPTjo6
T2JqZWN0KiBjb25maWdPYmplY3QpCitzdGF0aWMgQ29sb3IgcGFyc2VDb25maWdDb2xvcihjb25z
dCBTdHJpbmcmIGZpZWxkTmFtZSwgSlNPTjo6T2JqZWN0JiBjb25maWdPYmplY3QpCiB7Ci0gICAg
UmVmUHRyPEpTT046Ok9iamVjdD4gY29sb3JPYmplY3Q7Ci0gICAgY29uZmlnT2JqZWN0LT5nZXRP
YmplY3QoZmllbGROYW1lLCBjb2xvck9iamVjdCk7Ci0KLSAgICByZXR1cm4gcGFyc2VDb2xvcihj
b2xvck9iamVjdC5nZXQoKSk7CisgICAgcmV0dXJuIHBhcnNlQ29sb3IoY29uZmlnT2JqZWN0Lmdl
dE9iamVjdChmaWVsZE5hbWUpKTsKIH0KIAotc3RhdGljIGJvb2wgcGFyc2VRdWFkKGNvbnN0IEpT
T046OkFycmF5JiBxdWFkQXJyYXksIEZsb2F0UXVhZCogcXVhZCkKK3N0YXRpYyBib29sIHBhcnNl
UXVhZChSZWY8SlNPTjo6QXJyYXk+JiYgcXVhZEFycmF5LCBGbG9hdFF1YWQqIHF1YWQpCiB7CiAg
ICAgY29uc3Qgc2l6ZV90IGNvb3JkaW5hdGVzSW5RdWFkID0gODsKICAgICBkb3VibGUgY29vcmRp
bmF0ZXNbY29vcmRpbmF0ZXNJblF1YWRdOwotICAgIGlmIChxdWFkQXJyYXkubGVuZ3RoKCkgIT0g
Y29vcmRpbmF0ZXNJblF1YWQpCisgICAgaWYgKHF1YWRBcnJheS0+bGVuZ3RoKCkgIT0gY29vcmRp
bmF0ZXNJblF1YWQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGNvb3JkaW5hdGVzSW5RdWFkOyArK2kpIHsKLSAgICAgICAgaWYgKCFxdWFkQXJyYXku
Z2V0KGkpLT5hc0RvdWJsZSgqKGNvb3JkaW5hdGVzICsgaSkpKQorICAgICAgICBhdXRvIGNvb3Jk
aW5hdGUgPSBxdWFkQXJyYXktPmdldChpKS0+YXNEb3VibGUoKTsKKyAgICAgICAgaWYgKCFjb29y
ZGluYXRlKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBjb29yZGluYXRlc1tp
XSA9ICpjb29yZGluYXRlOwogICAgIH0KICAgICBxdWFkLT5zZXRQMShGbG9hdFBvaW50KGNvb3Jk
aW5hdGVzWzBdLCBjb29yZGluYXRlc1sxXSkpOwogICAgIHF1YWQtPnNldFAyKEZsb2F0UG9pbnQo
Y29vcmRpbmF0ZXNbMl0sIGNvb3JkaW5hdGVzWzNdKSk7CkBAIC0yNDMsNyArMjQyLDcgQEAgcHVi
bGljOgogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIGF1dG8qIG5vZGUgPSBkb3duY2Fz
dDxOb2RlPihldmVudC50YXJnZXQoKSk7Ci0gICAgICAgIGludCBub2RlSWQgPSBtX2RvbUFnZW50
LnB1c2hOb2RlUGF0aFRvRnJvbnRlbmQobm9kZSk7CisgICAgICAgIGF1dG8gbm9kZUlkID0gbV9k
b21BZ2VudC5wdXNoTm9kZVBhdGhUb0Zyb250ZW5kKG5vZGUpOwogICAgICAgICBpZiAoIW5vZGVJ
ZCkKICAgICAgICAgICAgIHJldHVybjsKIApAQCAtMzIwLDkgKzMxOSw5IEBAIHZvaWQgSW5zcGVj
dG9yRE9NQWdlbnQ6OndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlz
Y29ubmVjdFJlYXNvCiAgICAgbV9tb3VzZWRPdmVyTm9kZSA9IG51bGxwdHI7CiAgICAgbV9pbnNw
ZWN0ZWROb2RlID0gbnVsbHB0cjsKIAotICAgIEVycm9yU3RyaW5nIGlnbm9yZWQ7CisgICAgUHJv
dG9jb2w6OkVycm9yU3RyaW5nIGlnbm9yZWQ7CiAgICAgc2V0U2VhcmNoaW5nRm9yTm9kZShpZ25v
cmVkLCBmYWxzZSwgbnVsbHB0ciwgZmFsc2UpOwotICAgIGhpZGVIaWdobGlnaHQoaWdub3JlZCk7
CisgICAgaGlkZUhpZ2hsaWdodCgpOwogCiAgICAgbV9pbnN0cnVtZW50aW5nQWdlbnRzLnNldFBl
cnNpc3RlbnRET01BZ2VudChudWxscHRyKTsKICAgICBtX2RvY3VtZW50UmVxdWVzdGVkID0gZmFs
c2U7CkBAIC0zNzQsOSArMzczLDkgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6cmVsZWFzZURh
bmdsaW5nTm9kZXMoKQogICAgIG1fZGFuZ2xpbmdOb2RlVG9JZE1hcHMuY2xlYXIoKTsKIH0KIAot
aW50IEluc3BlY3RvckRPTUFnZW50OjpiaW5kKE5vZGUqIG5vZGUsIE5vZGVUb0lkTWFwKiBub2Rl
c01hcCkKK1Byb3RvY29sOjpET006Ok5vZGVJZCBJbnNwZWN0b3JET01BZ2VudDo6YmluZChOb2Rl
KiBub2RlLCBOb2RlVG9JZE1hcCogbm9kZXNNYXApCiB7Ci0gICAgaW50IGlkID0gbm9kZXNNYXAt
PmdldChub2RlKTsKKyAgICBhdXRvIGlkID0gbm9kZXNNYXAtPmdldChub2RlKTsKICAgICBpZiAo
aWQpCiAgICAgICAgIHJldHVybiBpZDsKICAgICBpZCA9IG1fbGFzdE5vZGVJZCsrOwpAQCAtMzg4
LDcgKzM4Nyw3IEBAIGludCBJbnNwZWN0b3JET01BZ2VudDo6YmluZChOb2RlKiBub2RlLCBOb2Rl
VG9JZE1hcCogbm9kZXNNYXApCiAKIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnVuYmluZChOb2Rl
KiBub2RlLCBOb2RlVG9JZE1hcCogbm9kZXNNYXApCiB7Ci0gICAgaW50IGlkID0gbm9kZXNNYXAt
PmdldChub2RlKTsKKyAgICBhdXRvIGlkID0gbm9kZXNNYXAtPmdldChub2RlKTsKICAgICBpZiAo
IWlkKQogICAgICAgICByZXR1cm47CiAKQEAgLTQyMiw3ICs0MjEsNyBAQCB2b2lkIEluc3BlY3Rv
ckRPTUFnZW50Ojp1bmJpbmQoTm9kZSogbm9kZSwgTm9kZVRvSWRNYXAqIG5vZGVzTWFwKQogICAg
IH0KIH0KIAotTm9kZSogSW5zcGVjdG9yRE9NQWdlbnQ6OmFzc2VydE5vZGUoRXJyb3JTdHJpbmcm
IGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkKQorTm9kZSogSW5zcGVjdG9yRE9NQWdlbnQ6OmFzc2Vy
dE5vZGUoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgUHJvdG9jb2w6OkRPTTo6
Tm9kZUlkIG5vZGVJZCkKIHsKICAgICBOb2RlKiBub2RlID0gbm9kZUZvcklkKG5vZGVJZCk7CiAg
ICAgaWYgKCFub2RlKSB7CkBAIC00MzIsNyArNDMxLDcgQEAgTm9kZSogSW5zcGVjdG9yRE9NQWdl
bnQ6OmFzc2VydE5vZGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkKQogICAg
IHJldHVybiBub2RlOwogfQogCi1Eb2N1bWVudCogSW5zcGVjdG9yRE9NQWdlbnQ6OmFzc2VydERv
Y3VtZW50KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJZCkKK0RvY3VtZW50KiBJ
bnNwZWN0b3JET01BZ2VudDo6YXNzZXJ0RG9jdW1lbnQoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBl
cnJvclN0cmluZywgUHJvdG9jb2w6OkRPTTo6Tm9kZUlkIG5vZGVJZCkKIHsKICAgICBOb2RlKiBu
b2RlID0gYXNzZXJ0Tm9kZShlcnJvclN0cmluZywgbm9kZUlkKTsKICAgICBpZiAoIW5vZGUpCkBA
IC00NDQsNyArNDQzLDcgQEAgRG9jdW1lbnQqIEluc3BlY3RvckRPTUFnZW50Ojphc3NlcnREb2N1
bWVudChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQKICAgICByZXR1cm4gZG93
bmNhc3Q8RG9jdW1lbnQ+KG5vZGUpOwogfQogCi1FbGVtZW50KiBJbnNwZWN0b3JET01BZ2VudDo6
YXNzZXJ0RWxlbWVudChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQpCitFbGVt
ZW50KiBJbnNwZWN0b3JET01BZ2VudDo6YXNzZXJ0RWxlbWVudChQcm90b2NvbDo6RXJyb3JTdHJp
bmcmIGVycm9yU3RyaW5nLCBQcm90b2NvbDo6RE9NOjpOb2RlSWQgbm9kZUlkKQogewogICAgIE5v
ZGUqIG5vZGUgPSBhc3NlcnROb2RlKGVycm9yU3RyaW5nLCBub2RlSWQpOwogICAgIGlmICghbm9k
ZSkKQEAgLTQ1Niw3ICs0NTUsNyBAQCBFbGVtZW50KiBJbnNwZWN0b3JET01BZ2VudDo6YXNzZXJ0
RWxlbWVudChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQpCiAgICAgcmV0dXJu
IGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpOwogfQogCi1Ob2RlKiBJbnNwZWN0b3JET01BZ2VudDo6
YXNzZXJ0RWRpdGFibGVOb2RlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJZCkK
K05vZGUqIEluc3BlY3RvckRPTUFnZW50Ojphc3NlcnRFZGl0YWJsZU5vZGUoUHJvdG9jb2w6OkVy
cm9yU3RyaW5nJiBlcnJvclN0cmluZywgUHJvdG9jb2w6OkRPTTo6Tm9kZUlkIG5vZGVJZCkKIHsK
ICAgICBOb2RlKiBub2RlID0gYXNzZXJ0Tm9kZShlcnJvclN0cmluZywgbm9kZUlkKTsKICAgICBp
ZiAoIW5vZGUpCkBAIC00NzIsNyArNDcxLDcgQEAgTm9kZSogSW5zcGVjdG9yRE9NQWdlbnQ6OmFz
c2VydEVkaXRhYmxlTm9kZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQKICAg
ICByZXR1cm4gbm9kZTsKIH0KIAotRWxlbWVudCogSW5zcGVjdG9yRE9NQWdlbnQ6OmFzc2VydEVk
aXRhYmxlRWxlbWVudChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQpCitFbGVt
ZW50KiBJbnNwZWN0b3JET01BZ2VudDo6YXNzZXJ0RWRpdGFibGVFbGVtZW50KFByb3RvY29sOjpF
cnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIFByb3RvY29sOjpET006Ok5vZGVJZCBub2RlSWQpCiB7
CiAgICAgTm9kZSogbm9kZSA9IGFzc2VydEVkaXRhYmxlTm9kZShlcnJvclN0cmluZywgbm9kZUlk
KTsKICAgICBpZiAoIW5vZGUpCkBAIC00ODQsMjcgKzQ4MywyNyBAQCBFbGVtZW50KiBJbnNwZWN0
b3JET01BZ2VudDo6YXNzZXJ0RWRpdGFibGVFbGVtZW50KEVycm9yU3RyaW5nJiBlcnJvclN0cmlu
ZywgaW50CiAgICAgcmV0dXJuIGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpOwogfQogCi12b2lkIElu
c3BlY3RvckRPTUFnZW50OjpnZXREb2N1bWVudChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIFJl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+JiByb290KQorUHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8UmVmPFByb3RvY29sOjpET006Ok5vZGU+PiBJbnNwZWN0b3JET01BZ2VudDo6
Z2V0RG9jdW1lbnQoKQogewogICAgIG1fZG9jdW1lbnRSZXF1ZXN0ZWQgPSB0cnVlOwogCi0gICAg
aWYgKCFtX2RvY3VtZW50KSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIkludGVybmFsIGVycm9y
OiBtaXNzaW5nIGRvY3VtZW50Il9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICgh
bV9kb2N1bWVudCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJJbnRlcm5hbCBlcnJv
cjogbWlzc2luZyBkb2N1bWVudCJfcyk7CiAKICAgICAvLyBSZXNldCBiYWNrZW5kIHN0YXRlLgog
ICAgIFJlZlB0cjxEb2N1bWVudD4gZG9jdW1lbnQgPSBtX2RvY3VtZW50OwogICAgIHJlc2V0KCk7
CiAgICAgbV9kb2N1bWVudCA9IGRvY3VtZW50OwogCi0gICAgcm9vdCA9IGJ1aWxkT2JqZWN0Rm9y
Tm9kZShtX2RvY3VtZW50LmdldCgpLCAyLCAmbV9kb2N1bWVudE5vZGVUb0lkTWFwKTsKKyAgICBh
dXRvIHJvb3QgPSBidWlsZE9iamVjdEZvck5vZGUobV9kb2N1bWVudC5nZXQoKSwgMiwgJm1fZG9j
dW1lbnROb2RlVG9JZE1hcCk7CiAKICAgICBpZiAobV9ub2RlVG9Gb2N1cykKICAgICAgICAgZm9j
dXNOb2RlKCk7CisKKyAgICByZXR1cm4gV1RGTW92ZShyb290KTsKIH0KIAotdm9pZCBJbnNwZWN0
b3JET01BZ2VudDo6cHVzaENoaWxkTm9kZXNUb0Zyb250ZW5kKGludCBub2RlSWQsIGludCBkZXB0
aCkKK3ZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnB1c2hDaGlsZE5vZGVzVG9Gcm9udGVuZChQcm90
b2NvbDo6RE9NOjpOb2RlSWQgbm9kZUlkLCBpbnQgZGVwdGgpCiB7CiAgICAgTm9kZSogbm9kZSA9
IG5vZGVGb3JJZChub2RlSWQpOwogICAgIGlmICghbm9kZSB8fCAobm9kZS0+bm9kZVR5cGUoKSAh
PSBOb2RlOjpFTEVNRU5UX05PREUgJiYgbm9kZS0+bm9kZVR5cGUoKSAhPSBOb2RlOjpET0NVTUVO
VF9OT0RFICYmIG5vZGUtPm5vZGVUeXBlKCkgIT0gTm9kZTo6RE9DVU1FTlRfRlJBR01FTlRfTk9E
RSkpCkBAIC01MTksNyArNTE4LDcgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6cHVzaENoaWxk
Tm9kZXNUb0Zyb250ZW5kKGludCBub2RlSWQsIGludCBkZXB0aCkKICAgICAgICAgZGVwdGgtLTsK
IAogICAgICAgICBmb3IgKG5vZGUgPSBpbm5lckZpcnN0Q2hpbGQobm9kZSk7IG5vZGU7IG5vZGUg
PSBpbm5lck5leHRTaWJsaW5nKG5vZGUpKSB7Ci0gICAgICAgICAgICBpbnQgY2hpbGROb2RlSWQg
PSBub2RlTWFwLT5nZXQobm9kZSk7CisgICAgICAgICAgICBhdXRvIGNoaWxkTm9kZUlkID0gbm9k
ZU1hcC0+Z2V0KG5vZGUpOwogICAgICAgICAgICAgQVNTRVJUKGNoaWxkTm9kZUlkKTsKICAgICAg
ICAgICAgIHB1c2hDaGlsZE5vZGVzVG9Gcm9udGVuZChjaGlsZE5vZGVJZCwgZGVwdGgpOwogICAg
ICAgICB9CkBAIC01NDEsMTggKzU0MCwxOCBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpkaXNj
YXJkQmluZGluZ3MoKQogICAgIG1fY2hpbGRyZW5SZXF1ZXN0ZWQuY2xlYXIoKTsKIH0KIAotaW50
IEluc3BlY3RvckRPTUFnZW50OjpwdXNoTm9kZVRvRnJvbnRlbmQoTm9kZSogbm9kZVRvUHVzaCkK
K1Byb3RvY29sOjpET006Ok5vZGVJZCBJbnNwZWN0b3JET01BZ2VudDo6cHVzaE5vZGVUb0Zyb250
ZW5kKE5vZGUqIG5vZGVUb1B1c2gpCiB7CiAgICAgaWYgKCFub2RlVG9QdXNoKQogICAgICAgICBy
ZXR1cm4gMDsKIAogICAgIC8vIEZJWE1FOiA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMjEzNDk5PiBX
ZWIgSW5zcGVjdG9yOiBhbGxvdyBET00gbm9kZXMgdG8gYmUgaW5zdHJ1bWVudGVkIGF0IGFueSBw
b2ludCwgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZSBtYWluIGRvY3VtZW50IGhhcyBhbHNvIGJl
ZW4gaW5zdHJ1bWVudGVkCiAKLSAgICBFcnJvclN0cmluZyBpZ25vcmVkOworICAgIFByb3RvY29s
OjpFcnJvclN0cmluZyBpZ25vcmVkOwogICAgIHJldHVybiBwdXNoTm9kZVRvRnJvbnRlbmQoaWdu
b3JlZCwgYm91bmROb2RlSWQoJm5vZGVUb1B1c2gtPmRvY3VtZW50KCkpLCBub2RlVG9QdXNoKTsK
IH0KIAotaW50IEluc3BlY3RvckRPTUFnZW50OjpwdXNoTm9kZVRvRnJvbnRlbmQoRXJyb3JTdHJp
bmcmIGVycm9yU3RyaW5nLCBpbnQgZG9jdW1lbnROb2RlSWQsIE5vZGUqIG5vZGVUb1B1c2gpCitQ
cm90b2NvbDo6RE9NOjpOb2RlSWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnB1c2hOb2RlVG9Gcm9udGVu
ZChQcm90b2NvbDo6RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBQcm90b2NvbDo6RE9NOjpOb2Rl
SWQgZG9jdW1lbnROb2RlSWQsIE5vZGUqIG5vZGVUb1B1c2gpCiB7CiAgICAgRG9jdW1lbnQqIGRv
Y3VtZW50ID0gYXNzZXJ0RG9jdW1lbnQoZXJyb3JTdHJpbmcsIGRvY3VtZW50Tm9kZUlkKTsKICAg
ICBpZiAoIWRvY3VtZW50KQpAQCAtNTY1LDcgKzU2NCw3IEBAIGludCBJbnNwZWN0b3JET01BZ2Vu
dDo6cHVzaE5vZGVUb0Zyb250ZW5kKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IGRvY3Vt
ZW50CiAgICAgcmV0dXJuIHB1c2hOb2RlUGF0aFRvRnJvbnRlbmQoZXJyb3JTdHJpbmcsIG5vZGVU
b1B1c2gpOwogfQogCi1Ob2RlKiBJbnNwZWN0b3JET01BZ2VudDo6bm9kZUZvcklkKGludCBpZCkK
K05vZGUqIEluc3BlY3RvckRPTUFnZW50Ojpub2RlRm9ySWQoUHJvdG9jb2w6OkRPTTo6Tm9kZUlk
IGlkKQogewogICAgIGlmICghbV9pZFRvTm9kZS5pc1ZhbGlkS2V5KGlkKSkKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CkBAIC01NzMsNyArNTcyLDcgQEAgTm9kZSogSW5zcGVjdG9yRE9NQWdlbnQ6
Om5vZGVGb3JJZChpbnQgaWQpCiAgICAgcmV0dXJuIG1faWRUb05vZGUuZ2V0KGlkKTsKIH0KIAot
dm9pZCBJbnNwZWN0b3JET01BZ2VudDo6cmVxdWVzdENoaWxkTm9kZXMoRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBpbnQgbm9kZUlkLCBjb25zdCBpbnQqIGRlcHRoKQorUHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yRE9NQWdlbnQ6OnJlcXVlc3RDaGlsZE5vZGVzKFByb3Rv
Y29sOjpET006Ok5vZGVJZCBub2RlSWQsIE9wdGlvbmFsPGludD4mJiBkZXB0aCkKIHsKICAgICBp
bnQgc2FuaXRpemVkRGVwdGg7CiAKQEAgLTU4Myw2NCArNTgyLDY0IEBAIHZvaWQgSW5zcGVjdG9y
RE9NQWdlbnQ6OnJlcXVlc3RDaGlsZE5vZGVzKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50
IG5vZGVJZCwKICAgICAgICAgc2FuaXRpemVkRGVwdGggPSBJTlRfTUFYOwogICAgIGVsc2UgaWYg
KCpkZXB0aCA+IDApCiAgICAgICAgIHNhbml0aXplZERlcHRoID0gKmRlcHRoOwotICAgIGVsc2Ug
ewotICAgICAgICBlcnJvclN0cmluZyA9ICJVbmV4cGVjdGVkIHZhbHVlIGJlbG93IC0xIGZvciBn
aXZlbiBkZXB0aCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBlbHNlCisgICAgICAg
IHJldHVybiBtYWtlVW5leHBlY3RlZCgiVW5leHBlY3RlZCB2YWx1ZSBiZWxvdyAtMSBmb3IgZ2l2
ZW4gZGVwdGgiX3MpOwogCiAgICAgcHVzaENoaWxkTm9kZXNUb0Zyb250ZW5kKG5vZGVJZCwgc2Fu
aXRpemVkRGVwdGgpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01B
Z2VudDo6cXVlcnlTZWxlY3RvcihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQs
IGNvbnN0IFN0cmluZyYgc2VsZWN0b3JzLCBpbnQqIGVsZW1lbnRJZCkKK1Byb3RvY29sOjpFcnJv
clN0cmluZ09yPFByb3RvY29sOjpET006Ok5vZGVJZD4gSW5zcGVjdG9yRE9NQWdlbnQ6OnF1ZXJ5
U2VsZWN0b3IoUHJvdG9jb2w6OkRPTTo6Tm9kZUlkIG5vZGVJZCwgY29uc3QgU3RyaW5nJiBzZWxl
Y3RvcikKIHsKLSAgICAqZWxlbWVudElkID0gMDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcg
ZXJyb3JTdHJpbmc7CisKICAgICBOb2RlKiBub2RlID0gYXNzZXJ0Tm9kZShlcnJvclN0cmluZywg
bm9kZUlkKTsKICAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIWlzPENv
bnRhaW5lck5vZGU+KCpub2RlKSkgewotICAgICAgICBhc3NlcnRFbGVtZW50KGVycm9yU3RyaW5n
LCBub2RlSWQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgICAgICByZXR1cm4gbWFrZVVu
ZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOworICAgIGlmICghaXM8Q29udGFpbmVyTm9kZT4oKm5vZGUp
KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk5vZGUgZm9yIGdpdmVuIG5vZGVJZCBp
cyBub3QgYSBjb250YWluZXIgbm9kZSJfcyk7CiAKLSAgICBhdXRvIHF1ZXJ5UmVzdWx0ID0gZG93
bmNhc3Q8Q29udGFpbmVyTm9kZT4oKm5vZGUpLnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3JzKTsKLSAg
ICBpZiAocXVlcnlSZXN1bHQuaGFzRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcg
PSAiRE9NIEVycm9yIHdoaWxlIHF1ZXJ5aW5nIHdpdGggZ2l2ZW4gc2VsZWN0b3JzIl9zOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQorICAgIGF1dG8gcXVlcnlSZXN1bHQgPSBkb3duY2FzdDxDb250
YWluZXJOb2RlPigqbm9kZSkucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7CisgICAgaWYgKHF1ZXJ5
UmVzdWx0Lmhhc0V4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoSW5z
cGVjdG9yRE9NQWdlbnQ6OnRvRXJyb3JTdHJpbmcocXVlcnlSZXN1bHQucmVsZWFzZUV4Y2VwdGlv
bigpKSk7CiAKLSAgICBpZiAoYXV0byogZWxlbWVudCA9IHF1ZXJ5UmVzdWx0LnJlbGVhc2VSZXR1
cm5WYWx1ZSgpKQotICAgICAgICAqZWxlbWVudElkID0gcHVzaE5vZGVQYXRoVG9Gcm9udGVuZChl
cnJvclN0cmluZywgZWxlbWVudCk7CisgICAgYXV0byByZXN1bHROb2RlSWQgPSBwdXNoTm9kZVBh
dGhUb0Zyb250ZW5kKGVycm9yU3RyaW5nLCBxdWVyeVJlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUo
KSk7CisgICAgaWYgKCFyZXN1bHROb2RlSWQpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3Rl
ZChlcnJvclN0cmluZyk7CisKKyAgICByZXR1cm4gcmVzdWx0Tm9kZUlkOwogfQogCi12b2lkIElu
c3BlY3RvckRPTUFnZW50OjpxdWVyeVNlbGVjdG9yQWxsKEVycm9yU3RyaW5nJiBlcnJvclN0cmlu
ZywgaW50IG5vZGVJZCwgY29uc3QgU3RyaW5nJiBzZWxlY3RvcnMsIFJlZlB0cjxKU09OOjpBcnJh
eU9mPGludD4+JiByZXN1bHQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SlNPTjo6QXJy
YXlPZjxQcm90b2NvbDo6RE9NOjpOb2RlSWQ+Pj4gSW5zcGVjdG9yRE9NQWdlbnQ6OnF1ZXJ5U2Vs
ZWN0b3JBbGwoUHJvdG9jb2w6OkRPTTo6Tm9kZUlkIG5vZGVJZCwgY29uc3QgU3RyaW5nJiBzZWxl
Y3RvcikKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBO
b2RlKiBub2RlID0gYXNzZXJ0Tm9kZShlcnJvclN0cmluZywgbm9kZUlkKTsKICAgICBpZiAoIW5v
ZGUpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIWlzPENvbnRhaW5lck5vZGU+KCpub2RlKSkg
ewotICAgICAgICBhc3NlcnRFbGVtZW50KGVycm9yU3RyaW5nLCBub2RlSWQpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcp
OworICAgIGlmICghaXM8Q29udGFpbmVyTm9kZT4oKm5vZGUpKQorICAgICAgICByZXR1cm4gbWFr
ZVVuZXhwZWN0ZWQoIk5vZGUgZm9yIGdpdmVuIG5vZGVJZCBpcyBub3QgYSBjb250YWluZXIgbm9k
ZSJfcyk7CiAKLSAgICBhdXRvIHF1ZXJ5UmVzdWx0ID0gZG93bmNhc3Q8Q29udGFpbmVyTm9kZT4o
Km5vZGUpLnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3JzKTsKLSAgICBpZiAocXVlcnlSZXN1bHQu
aGFzRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiRE9NIEVycm9yIHdoaWxl
IHF1ZXJ5aW5nIHdpdGggZ2l2ZW4gc2VsZWN0b3JzIl9zOwotICAgICAgICByZXR1cm47Ci0gICAg
fQorICAgIGF1dG8gcXVlcnlSZXN1bHQgPSBkb3duY2FzdDxDb250YWluZXJOb2RlPigqbm9kZSku
cXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7CisgICAgaWYgKHF1ZXJ5UmVzdWx0Lmhhc0V4Y2Vw
dGlvbigpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoSW5zcGVjdG9yRE9NQWdlbnQ6
OnRvRXJyb3JTdHJpbmcocXVlcnlSZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpKSk7CiAKICAgICBh
dXRvIG5vZGVzID0gcXVlcnlSZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCk7Ci0gICAgcmVzdWx0
ID0gSlNPTjo6QXJyYXlPZjxpbnQ+OjpjcmVhdGUoKTsKKworICAgIGF1dG8gbm9kZUlkcyA9IEpT
T046OkFycmF5T2Y8UHJvdG9jb2w6OkRPTTo6Tm9kZUlkPjo6Y3JlYXRlKCk7CiAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG5vZGVzLT5sZW5ndGgoKTsgKytpKQotICAgICAgICByZXN1bHQt
PmFkZEl0ZW0ocHVzaE5vZGVQYXRoVG9Gcm9udGVuZChub2Rlcy0+aXRlbShpKSkpOworICAgICAg
ICBub2RlSWRzLT5hZGRJdGVtKHB1c2hOb2RlUGF0aFRvRnJvbnRlbmQobm9kZXMtPml0ZW0oaSkp
KTsKKyAgICByZXR1cm4gV1RGTW92ZShub2RlSWRzKTsKIH0KIAotaW50IEluc3BlY3RvckRPTUFn
ZW50OjpwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKE5vZGUqIG5vZGVUb1B1c2gpCitQcm90b2NvbDo6
RE9NOjpOb2RlSWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnB1c2hOb2RlUGF0aFRvRnJvbnRlbmQoTm9k
ZSogbm9kZVRvUHVzaCkKIHsKLSAgICBFcnJvclN0cmluZyBpZ25vcmVkOworICAgIFByb3RvY29s
OjpFcnJvclN0cmluZyBpZ25vcmVkOwogICAgIHJldHVybiBwdXNoTm9kZVBhdGhUb0Zyb250ZW5k
KGlnbm9yZWQsIG5vZGVUb1B1c2gpOwogfQogCi1pbnQgSW5zcGVjdG9yRE9NQWdlbnQ6OnB1c2hO
b2RlUGF0aFRvRnJvbnRlbmQoRXJyb3JTdHJpbmcgZXJyb3JTdHJpbmcsIE5vZGUqIG5vZGVUb1B1
c2gpCitQcm90b2NvbDo6RE9NOjpOb2RlSWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnB1c2hOb2RlUGF0
aFRvRnJvbnRlbmQoUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nLCBOb2RlKiBub2Rl
VG9QdXNoKQogewogICAgIEFTU0VSVChub2RlVG9QdXNoKTsgIC8vIEludmFsaWQgaW5wdXQKIApA
QCAtNjU2LDggKzY1NSw3IEBAIGludCBJbnNwZWN0b3JET01BZ2VudDo6cHVzaE5vZGVQYXRoVG9G
cm9udGVuZChFcnJvclN0cmluZyBlcnJvclN0cmluZywgTm9kZSogbm9kCiAgICAgfQogCiAgICAg
Ly8gUmV0dXJuIGlkIGluIGNhc2UgdGhlIG5vZGUgaXMga25vd24uCi0gICAgaW50IHJlc3VsdCA9
IG1fZG9jdW1lbnROb2RlVG9JZE1hcC5nZXQobm9kZVRvUHVzaCk7Ci0gICAgaWYgKHJlc3VsdCkK
KyAgICBpZiAoYXV0byByZXN1bHQgPSBtX2RvY3VtZW50Tm9kZVRvSWRNYXAuZ2V0KG5vZGVUb1B1
c2gpKQogICAgICAgICByZXR1cm4gcmVzdWx0OwogCiAgICAgTm9kZSogbm9kZSA9IG5vZGVUb1B1
c2g7CkBAIC02NzEsNyArNjY5LDcgQEAgaW50IEluc3BlY3RvckRPTUFnZW50OjpwdXNoTm9kZVBh
dGhUb0Zyb250ZW5kKEVycm9yU3RyaW5nIGVycm9yU3RyaW5nLCBOb2RlKiBub2QKICAgICAgICAg
ICAgIGF1dG8gbmV3TWFwID0gbWFrZVVuaXF1ZTxOb2RlVG9JZE1hcD4oKTsKICAgICAgICAgICAg
IGRhbmdsaW5nTWFwID0gbmV3TWFwLmdldCgpOwogICAgICAgICAgICAgbV9kYW5nbGluZ05vZGVU
b0lkTWFwcy5hcHBlbmQobmV3TWFwLnJlbGVhc2UoKSk7Ci0gICAgICAgICAgICBhdXRvIGNoaWxk
cmVuID0gSlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+OjpjcmVh
dGUoKTsKKyAgICAgICAgICAgIGF1dG8gY2hpbGRyZW4gPSBKU09OOjpBcnJheU9mPFByb3RvY29s
OjpET006Ok5vZGU+OjpjcmVhdGUoKTsKICAgICAgICAgICAgIGNoaWxkcmVuLT5hZGRJdGVtKGJ1
aWxkT2JqZWN0Rm9yTm9kZShub2RlLCAwLCBkYW5nbGluZ01hcCkpOwogICAgICAgICAgICAgbV9m
cm9udGVuZERpc3BhdGNoZXItPnNldENoaWxkTm9kZXMoMCwgV1RGTW92ZShjaGlsZHJlbikpOwog
ICAgICAgICAgICAgYnJlYWs7CkBAIC02ODYsMjIxICs2ODQsMjUyIEBAIGludCBJbnNwZWN0b3JE
T01BZ2VudDo6cHVzaE5vZGVQYXRoVG9Gcm9udGVuZChFcnJvclN0cmluZyBlcnJvclN0cmluZywg
Tm9kZSogbm9kCiAKICAgICBOb2RlVG9JZE1hcCogbWFwID0gZGFuZ2xpbmdNYXAgPyBkYW5nbGlu
Z01hcCA6ICZtX2RvY3VtZW50Tm9kZVRvSWRNYXA7CiAgICAgZm9yIChpbnQgaSA9IHBhdGguc2l6
ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKLSAgICAgICAgaW50IG5vZGVJZCA9IG1hcC0+Z2V0KHBh
dGguYXQoaSkpOworICAgICAgICBhdXRvIG5vZGVJZCA9IG1hcC0+Z2V0KHBhdGguYXQoaSkpOwog
ICAgICAgICBBU1NFUlQobm9kZUlkKTsKICAgICAgICAgcHVzaENoaWxkTm9kZXNUb0Zyb250ZW5k
KG5vZGVJZCk7CiAgICAgfQogICAgIHJldHVybiBtYXAtPmdldChub2RlVG9QdXNoKTsKIH0KIAot
aW50IEluc3BlY3RvckRPTUFnZW50Ojpib3VuZE5vZGVJZChjb25zdCBOb2RlKiBub2RlKQorUHJv
dG9jb2w6OkRPTTo6Tm9kZUlkIEluc3BlY3RvckRPTUFnZW50Ojpib3VuZE5vZGVJZChjb25zdCBO
b2RlKiBub2RlKQogewogICAgIHJldHVybiBtX2RvY3VtZW50Tm9kZVRvSWRNYXAuZ2V0KGNvbnN0
X2Nhc3Q8Tm9kZSo+KG5vZGUpKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c2V0QXR0
cmlidXRlVmFsdWUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgZWxlbWVudElkLCBjb25z
dCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCitQcm90b2NvbDo6RXJyb3JTdHJp
bmdPcjx2b2lkPiBJbnNwZWN0b3JET01BZ2VudDo6c2V0QXR0cmlidXRlVmFsdWUoUHJvdG9jb2w6
OkRPTTo6Tm9kZUlkIG5vZGVJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZh
bHVlKQogewotICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBhc3NlcnRFZGl0YWJsZUVsZW1lbnQoZXJy
b3JTdHJpbmcsIGVsZW1lbnRJZCk7Ci0gICAgaWYgKCFlbGVtZW50KQotICAgICAgICByZXR1cm47
CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOwogCi0gICAgbV9kb21FZGl0
b3ItPnNldEF0dHJpYnV0ZSgqZWxlbWVudCwgbmFtZSwgdmFsdWUsIGVycm9yU3RyaW5nKTsKKyAg
ICBFbGVtZW50KiBlbGVtZW50ID0gYXNzZXJ0RWRpdGFibGVFbGVtZW50KGVycm9yU3RyaW5nLCBu
b2RlSWQpOworICAgIGlmICghZWxlbWVudCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVk
KGVycm9yU3RyaW5nKTsKKworICAgIGlmICghbV9kb21FZGl0b3ItPnNldEF0dHJpYnV0ZSgqZWxl
bWVudCwgbmFtZSwgdmFsdWUsIGVycm9yU3RyaW5nKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4
cGVjdGVkKGVycm9yU3RyaW5nKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVj
dG9yRE9NQWdlbnQ6OnNldEF0dHJpYnV0ZXNBc1RleHQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5n
LCBpbnQgZWxlbWVudElkLCBjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFN0cmluZyogbmFtZSkK
K1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRPTUFnZW50OjpzZXRBdHRy
aWJ1dGVzQXNUZXh0KFByb3RvY29sOjpET006Ok5vZGVJZCBub2RlSWQsIGNvbnN0IFN0cmluZyYg
dGV4dCwgY29uc3QgU3RyaW5nJiBuYW1lKQogewotICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBhc3Nl
cnRFZGl0YWJsZUVsZW1lbnQoZXJyb3JTdHJpbmcsIGVsZW1lbnRJZCk7CisgICAgUHJvdG9jb2w6
OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCisgICAgRWxlbWVudCogZWxlbWVudCA9IGFzc2Vy
dEVkaXRhYmxlRWxlbWVudChlcnJvclN0cmluZywgbm9kZUlkKTsKICAgICBpZiAoIWVsZW1lbnQp
Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3Ry
aW5nKTsKIAogICAgIGF1dG8gcGFyc2VkRWxlbWVudCA9IGNyZWF0ZUhUTUxFbGVtZW50KGVsZW1l
bnQtPmRvY3VtZW50KCksIHNwYW5UYWcpOwogICAgIGF1dG8gcmVzdWx0ID0gcGFyc2VkRWxlbWVu
dC5nZXQoKS5zZXRJbm5lckhUTUwoIjxzcGFuICIgKyB0ZXh0ICsgIj48L3NwYW4+Iik7Ci0gICAg
aWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkgewotICAgICAgICBlcnJvclN0cmluZyA9IHRvRXJy
b3JTdHJpbmcocmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKSk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9CisgICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKEluc3BlY3RvckRPTUFnZW50Ojp0b0Vycm9yU3RyaW5nKHJlc3VsdC5yZWxlYXNl
RXhjZXB0aW9uKCkpKTsKIAogICAgIE5vZGUqIGNoaWxkID0gcGFyc2VkRWxlbWVudC0+Zmlyc3RD
aGlsZCgpOwotICAgIGlmICghY2hpbGQpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiQ291bGQg
bm90IHBhcnNlIGdpdmVuIHRleHQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYg
KCFjaGlsZCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJDb3VsZCBub3QgcGFyc2Ug
Z2l2ZW4gdGV4dCJfcyk7CiAKICAgICBFbGVtZW50KiBjaGlsZEVsZW1lbnQgPSBkb3duY2FzdDxF
bGVtZW50PihjaGlsZCk7Ci0gICAgaWYgKCFjaGlsZEVsZW1lbnQtPmhhc0F0dHJpYnV0ZXMoKSAm
JiBuYW1lKSB7Ci0gICAgICAgIG1fZG9tRWRpdG9yLT5yZW1vdmVBdHRyaWJ1dGUoKmVsZW1lbnQs
ICpuYW1lLCBlcnJvclN0cmluZyk7Ci0gICAgICAgIHJldHVybjsKKyAgICBpZiAoIWNoaWxkRWxl
bWVudC0+aGFzQXR0cmlidXRlcygpICYmICEhbmFtZSkgeworICAgICAgICBpZiAoIW1fZG9tRWRp
dG9yLT5yZW1vdmVBdHRyaWJ1dGUoKmVsZW1lbnQsIG5hbWUsIGVycm9yU3RyaW5nKSkKKyAgICAg
ICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CisgICAgICAgIHJldHVy
biB7IH07CiAgICAgfQogCiAgICAgYm9vbCBmb3VuZE9yaWdpbmFsQXR0cmlidXRlID0gZmFsc2U7
CiAgICAgZm9yIChjb25zdCBBdHRyaWJ1dGUmIGF0dHJpYnV0ZSA6IGNoaWxkRWxlbWVudC0+YXR0
cmlidXRlc0l0ZXJhdG9yKCkpIHsKICAgICAgICAgLy8gQWRkIGF0dHJpYnV0ZSBwYWlyCi0gICAg
ICAgIGZvdW5kT3JpZ2luYWxBdHRyaWJ1dGUgPSBmb3VuZE9yaWdpbmFsQXR0cmlidXRlIHx8IChu
YW1lICYmIGF0dHJpYnV0ZS5uYW1lKCkudG9TdHJpbmcoKSA9PSAqbmFtZSk7CisgICAgICAgIGZv
dW5kT3JpZ2luYWxBdHRyaWJ1dGUgPSBmb3VuZE9yaWdpbmFsQXR0cmlidXRlIHx8IGF0dHJpYnV0
ZS5uYW1lKCkudG9TdHJpbmcoKSA9PSBuYW1lOwogICAgICAgICBpZiAoIW1fZG9tRWRpdG9yLT5z
ZXRBdHRyaWJ1dGUoKmVsZW1lbnQsIGF0dHJpYnV0ZS5uYW1lKCkudG9TdHJpbmcoKSwgYXR0cmli
dXRlLnZhbHVlKCksIGVycm9yU3RyaW5nKSkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAgICAgfQogCi0gICAgaWYg
KCFmb3VuZE9yaWdpbmFsQXR0cmlidXRlICYmIG5hbWUgJiYgIW5hbWUtPnN0cmlwV2hpdGVTcGFj
ZSgpLmlzRW1wdHkoKSkKLSAgICAgICAgbV9kb21FZGl0b3ItPnJlbW92ZUF0dHJpYnV0ZSgqZWxl
bWVudCwgKm5hbWUsIGVycm9yU3RyaW5nKTsKKyAgICBpZiAoIWZvdW5kT3JpZ2luYWxBdHRyaWJ1
dGUgJiYgIW5hbWUuc3RyaXBXaGl0ZVNwYWNlKCkuaXNFbXB0eSgpKSB7CisgICAgICAgIGlmICgh
bV9kb21FZGl0b3ItPnJlbW92ZUF0dHJpYnV0ZSgqZWxlbWVudCwgbmFtZSwgZXJyb3JTdHJpbmcp
KQorICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKKyAgICB9
CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpyZW1vdmVB
dHRyaWJ1dGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgZWxlbWVudElkLCBjb25zdCBT
dHJpbmcmIG5hbWUpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JET01B
Z2VudDo6cmVtb3ZlQXR0cmlidXRlKFByb3RvY29sOjpET006Ok5vZGVJZCBub2RlSWQsIGNvbnN0
IFN0cmluZyYgbmFtZSkKIHsKLSAgICBFbGVtZW50KiBlbGVtZW50ID0gYXNzZXJ0RWRpdGFibGVF
bGVtZW50KGVycm9yU3RyaW5nLCBlbGVtZW50SWQpOworICAgIFByb3RvY29sOjpFcnJvclN0cmlu
ZyBlcnJvclN0cmluZzsKKworICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBhc3NlcnRFZGl0YWJsZUVs
ZW1lbnQoZXJyb3JTdHJpbmcsIG5vZGVJZCk7CiAgICAgaWYgKCFlbGVtZW50KQotICAgICAgICBy
ZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKLSAg
ICBtX2RvbUVkaXRvci0+cmVtb3ZlQXR0cmlidXRlKCplbGVtZW50LCBuYW1lLCBlcnJvclN0cmlu
Zyk7CisgICAgaWYgKCFtX2RvbUVkaXRvci0+cmVtb3ZlQXR0cmlidXRlKCplbGVtZW50LCBuYW1l
LCBlcnJvclN0cmluZykpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmlu
Zyk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpyZW1v
dmVOb2RlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJZCkKK1Byb3RvY29sOjpF
cnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRPTUFnZW50OjpyZW1vdmVOb2RlKFByb3RvY29s
OjpET006Ok5vZGVJZCBub2RlSWQpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9y
U3RyaW5nOworCiAgICAgTm9kZSogbm9kZSA9IGFzc2VydEVkaXRhYmxlTm9kZShlcnJvclN0cmlu
Zywgbm9kZUlkKTsKICAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0
dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgIENvbnRhaW5lck5vZGUqIHBh
cmVudE5vZGUgPSBub2RlLT5wYXJlbnROb2RlKCk7Ci0gICAgaWYgKCFwYXJlbnROb2RlKSB7Ci0g
ICAgICAgIGVycm9yU3RyaW5nID0gIkNhbm5vdCByZW1vdmUgZGV0YWNoZWQgbm9kZSJfczsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoIXBhcmVudE5vZGUpCisgICAgICAgIHJldHVy
biBtYWtlVW5leHBlY3RlZCgiQ2Fubm90IHJlbW92ZSBkZXRhY2hlZCBub2RlIl9zKTsKIAotICAg
IG1fZG9tRWRpdG9yLT5yZW1vdmVDaGlsZCgqcGFyZW50Tm9kZSwgKm5vZGUsIGVycm9yU3RyaW5n
KTsKKyAgICBpZiAoIW1fZG9tRWRpdG9yLT5yZW1vdmVDaGlsZCgqcGFyZW50Tm9kZSwgKm5vZGUs
IGVycm9yU3RyaW5nKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5n
KTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNldE5v
ZGVOYW1lKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJZCwgY29uc3QgU3RyaW5n
JiB0YWdOYW1lLCBpbnQqIG5ld0lkKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UHJvdG9jb2w6
OkRPTTo6Tm9kZUlkPiBJbnNwZWN0b3JET01BZ2VudDo6c2V0Tm9kZU5hbWUoUHJvdG9jb2w6OkRP
TTo6Tm9kZUlkIG5vZGVJZCwgY29uc3QgU3RyaW5nJiB0YWdOYW1lKQogewotICAgICpuZXdJZCA9
IDA7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOwogCi0gICAgUmVmUHRy
PE5vZGU+IG9sZE5vZGUgPSBub2RlRm9ySWQobm9kZUlkKTsKLSAgICBpZiAoIWlzPEVsZW1lbnQ+
KG9sZE5vZGUpKQotICAgICAgICByZXR1cm47CisgICAgYXV0byBvbGROb2RlID0gYXNzZXJ0RWxl
bWVudChlcnJvclN0cmluZywgbm9kZUlkKTsKKyAgICBpZiAoIW9sZE5vZGUpCisgICAgICAgIHJl
dHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAgICBhdXRvIGNyZWF0ZUVsZW1l
bnRSZXN1bHQgPSBvbGROb2RlLT5kb2N1bWVudCgpLmNyZWF0ZUVsZW1lbnRGb3JCaW5kaW5ncyh0
YWdOYW1lKTsKICAgICBpZiAoY3JlYXRlRWxlbWVudFJlc3VsdC5oYXNFeGNlcHRpb24oKSkKLSAg
ICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoSW5zcGVjdG9yRE9N
QWdlbnQ6OnRvRXJyb3JTdHJpbmcoY3JlYXRlRWxlbWVudFJlc3VsdC5yZWxlYXNlRXhjZXB0aW9u
KCkpKTsKKwogICAgIGF1dG8gbmV3RWxlbWVudCA9IGNyZWF0ZUVsZW1lbnRSZXN1bHQucmVsZWFz
ZVJldHVyblZhbHVlKCk7CiAKICAgICAvLyBDb3B5IG92ZXIgdGhlIG9yaWdpbmFsIG5vZGUncyBh
dHRyaWJ1dGVzLgotICAgIG5ld0VsZW1lbnQtPmNsb25lQXR0cmlidXRlc0Zyb21FbGVtZW50KGRv
d25jYXN0PEVsZW1lbnQ+KCpvbGROb2RlKSk7CisgICAgbmV3RWxlbWVudC0+Y2xvbmVBdHRyaWJ1
dGVzRnJvbUVsZW1lbnQoKm9sZE5vZGUpOwogCiAgICAgLy8gQ29weSBvdmVyIHRoZSBvcmlnaW5h
bCBub2RlJ3MgY2hpbGRyZW4uCiAgICAgUmVmUHRyPE5vZGU+IGNoaWxkOwogICAgIHdoaWxlICgo
Y2hpbGQgPSBvbGROb2RlLT5maXJzdENoaWxkKCkpKSB7CiAgICAgICAgIGlmICghbV9kb21FZGl0
b3ItPmluc2VydEJlZm9yZShuZXdFbGVtZW50LCAqY2hpbGQsIDAsIGVycm9yU3RyaW5nKSkKLSAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJv
clN0cmluZyk7CiAgICAgfQogCiAgICAgLy8gUmVwbGFjZSB0aGUgb2xkIG5vZGUgd2l0aCB0aGUg
bmV3IG5vZGUKICAgICBSZWZQdHI8Q29udGFpbmVyTm9kZT4gcGFyZW50ID0gb2xkTm9kZS0+cGFy
ZW50Tm9kZSgpOwogICAgIGlmICghbV9kb21FZGl0b3ItPmluc2VydEJlZm9yZSgqcGFyZW50LCBu
ZXdFbGVtZW50LmNvcHlSZWYoKSwgb2xkTm9kZS0+bmV4dFNpYmxpbmcoKSwgZXJyb3JTdHJpbmcp
KQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0
cmluZyk7CiAgICAgaWYgKCFtX2RvbUVkaXRvci0+cmVtb3ZlQ2hpbGQoKnBhcmVudCwgKm9sZE5v
ZGUsIGVycm9yU3RyaW5nKSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVu
ZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCi0gICAgKm5ld0lkID0gcHVzaE5vZGVQYXRoVG9Gcm9u
dGVuZChlcnJvclN0cmluZywgbmV3RWxlbWVudC5wdHIoKSk7CisgICAgYXV0byByZXN1bHROb2Rl
SWQgPSBwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKGVycm9yU3RyaW5nLCBuZXdFbGVtZW50LnB0cigp
KTsKICAgICBpZiAobV9jaGlsZHJlblJlcXVlc3RlZC5jb250YWlucyhub2RlSWQpKQotICAgICAg
ICBwdXNoQ2hpbGROb2Rlc1RvRnJvbnRlbmQoKm5ld0lkKTsKKyAgICAgICAgcHVzaENoaWxkTm9k
ZXNUb0Zyb250ZW5kKHJlc3VsdE5vZGVJZCk7CisKKyAgICByZXR1cm4gcmVzdWx0Tm9kZUlkOwog
fQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpnZXRPdXRlckhUTUwoRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBpbnQgbm9kZUlkLCBXVEY6OlN0cmluZyogb3V0ZXJIVE1MKQorUHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8U3RyaW5nPiBJbnNwZWN0b3JET01BZ2VudDo6Z2V0T3V0ZXJIVE1MKFBy
b3RvY29sOjpET006Ok5vZGVJZCBub2RlSWQpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5n
IGVycm9yU3RyaW5nOworCiAgICAgTm9kZSogbm9kZSA9IGFzc2VydE5vZGUoZXJyb3JTdHJpbmcs
IG5vZGVJZCk7CiAgICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVy
biBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKLSAgICAqb3V0ZXJIVE1MID0gc2VyaWFs
aXplRnJhZ21lbnQoKm5vZGUsIFNlcmlhbGl6ZWROb2Rlczo6U3VidHJlZUluY2x1ZGluZ05vZGUp
OworICAgIHJldHVybiBzZXJpYWxpemVGcmFnbWVudCgqbm9kZSwgU2VyaWFsaXplZE5vZGVzOjpT
dWJ0cmVlSW5jbHVkaW5nTm9kZSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNldE91
dGVySFRNTChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQsIGNvbnN0IFN0cmlu
ZyYgb3V0ZXJIVE1MKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yRE9N
QWdlbnQ6OnNldE91dGVySFRNTChQcm90b2NvbDo6RE9NOjpOb2RlSWQgbm9kZUlkLCBjb25zdCBT
dHJpbmcmIG91dGVySFRNTCkKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJp
bmc7CisKICAgICBpZiAoIW5vZGVJZCkgewogICAgICAgICBET01QYXRjaFN1cHBvcnQgeyAqbV9k
b21FZGl0b3IsICptX2RvY3VtZW50IH0ucGF0Y2hEb2N1bWVudChvdXRlckhUTUwpOwotICAgICAg
ICByZXR1cm47CisgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCiAgICAgTm9kZSogbm9kZSA9
IGFzc2VydEVkaXRhYmxlTm9kZShlcnJvclN0cmluZywgbm9kZUlkKTsKICAgICBpZiAoIW5vZGUp
Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3Ry
aW5nKTsKIAogICAgIERvY3VtZW50JiBkb2N1bWVudCA9IG5vZGUtPmRvY3VtZW50KCk7Ci0gICAg
aWYgKCFkb2N1bWVudC5pc0hUTUxEb2N1bWVudCgpICYmICFkb2N1bWVudC5pc1hNTERvY3VtZW50
KCkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiRG9jdW1lbnQgb2Ygbm9kZSBmb3IgZ2l2ZW4g
bm9kZUlkIGlzIG5vdCBIVE1ML1hNTCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBp
ZiAoIWRvY3VtZW50LmlzSFRNTERvY3VtZW50KCkgJiYgIWRvY3VtZW50LmlzWE1MRG9jdW1lbnQo
KSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJEb2N1bWVudCBvZiBub2RlIGZvciBn
aXZlbiBub2RlSWQgaXMgbm90IEhUTUwvWE1MIl9zKTsKIAogICAgIE5vZGUqIG5ld05vZGUgPSBu
dWxscHRyOwogICAgIGlmICghbV9kb21FZGl0b3ItPnNldE91dGVySFRNTCgqbm9kZSwgb3V0ZXJI
VE1MLCBuZXdOb2RlLCBlcnJvclN0cmluZykpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0
dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgIGlmICghbmV3Tm9kZSkgewog
ICAgICAgICAvLyBUaGUgb25seSBjaGlsZCBub2RlIGhhcyBiZWVuIGRlbGV0ZWQuCi0gICAgICAg
IHJldHVybjsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKLSAgICBpbnQgbmV3SWQgPSBw
dXNoTm9kZVBhdGhUb0Zyb250ZW5kKGVycm9yU3RyaW5nLCBuZXdOb2RlKTsKKyAgICBhdXRvIG5l
d0lkID0gcHVzaE5vZGVQYXRoVG9Gcm9udGVuZChlcnJvclN0cmluZywgbmV3Tm9kZSk7CiAKICAg
ICBib29sIGNoaWxkcmVuUmVxdWVzdGVkID0gbV9jaGlsZHJlblJlcXVlc3RlZC5jb250YWlucyhu
b2RlSWQpOwogICAgIGlmIChjaGlsZHJlblJlcXVlc3RlZCkKICAgICAgICAgcHVzaENoaWxkTm9k
ZXNUb0Zyb250ZW5kKG5ld0lkKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVj
dG9yRE9NQWdlbnQ6Omluc2VydEFkamFjZW50SFRNTChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcs
IGludCBub2RlSWQsIGNvbnN0IFN0cmluZyYgcG9zaXRpb24sIGNvbnN0IFN0cmluZyYgaHRtbCkK
K1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRPTUFnZW50OjppbnNlcnRB
ZGphY2VudEhUTUwoUHJvdG9jb2w6OkRPTTo6Tm9kZUlkIG5vZGVJZCwgY29uc3QgU3RyaW5nJiBw
b3NpdGlvbiwgY29uc3QgU3RyaW5nJiBodG1sKQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmlu
ZyBlcnJvclN0cmluZzsKKwogICAgIE5vZGUqIG5vZGUgPSBhc3NlcnRFZGl0YWJsZU5vZGUoZXJy
b3JTdHJpbmcsIG5vZGVJZCk7CiAgICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm47CisgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKLSAgICBpZiAoIWlzPEVs
ZW1lbnQ+KG5vZGUpKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIk5vZGUgZm9yIGdpdmVuIG5v
ZGVJZCBpcyBub3QgYW4gZWxlbWVudCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBp
ZiAoIWlzPEVsZW1lbnQ+KG5vZGUpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk5v
ZGUgZm9yIGdpdmVuIG5vZGVJZCBpcyBub3QgYW4gZWxlbWVudCJfcyk7CiAKLSAgICBtX2RvbUVk
aXRvci0+aW5zZXJ0QWRqYWNlbnRIVE1MKGRvd25jYXN0PEVsZW1lbnQ+KCpub2RlKSwgcG9zaXRp
b24sIGh0bWwsIGVycm9yU3RyaW5nKTsKKyAgICBpZiAoIW1fZG9tRWRpdG9yLT5pbnNlcnRBZGph
Y2VudEhUTUwoZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUpLCBwb3NpdGlvbiwgaHRtbCwgZXJyb3JT
dHJpbmcpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOworCisg
ICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c2V0Tm9kZVZhbHVl
KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJZCwgY29uc3QgU3RyaW5nJiB2YWx1
ZSkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRPTUFnZW50OjpzZXRO
b2RlVmFsdWUoUHJvdG9jb2w6OkRPTTo6Tm9kZUlkIG5vZGVJZCwgY29uc3QgU3RyaW5nJiB2YWx1
ZSkKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBOb2Rl
KiBub2RlID0gYXNzZXJ0RWRpdGFibGVOb2RlKGVycm9yU3RyaW5nLCBub2RlSWQpOwogICAgIGlm
ICghbm9kZSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQo
ZXJyb3JTdHJpbmcpOwogCi0gICAgaWYgKCFpczxUZXh0Pigqbm9kZSkpIHsKLSAgICAgICAgZXJy
b3JTdHJpbmcgPSAiTm9kZSBmb3IgZ2l2ZW4gbm9kZUlkIGlzIG5vdCB0ZXh0Il9zOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQorICAgIGlmICghaXM8VGV4dD4oKm5vZGUpKQorICAgICAgICByZXR1
cm4gbWFrZVVuZXhwZWN0ZWQoIk5vZGUgZm9yIGdpdmVuIG5vZGVJZCBpcyBub3QgdGV4dCJfcyk7
CiAKLSAgICBtX2RvbUVkaXRvci0+cmVwbGFjZVdob2xlVGV4dChkb3duY2FzdDxUZXh0Pigqbm9k
ZSksIHZhbHVlLCBlcnJvclN0cmluZyk7CisgICAgaWYgKCFtX2RvbUVkaXRvci0+cmVwbGFjZVdo
b2xlVGV4dChkb3duY2FzdDxUZXh0Pigqbm9kZSksIHZhbHVlLCBlcnJvclN0cmluZykpCisgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CisKKyAgICByZXR1cm4geyB9
OwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpnZXRTdXBwb3J0ZWRFdmVudE5hbWVzKEVy
cm9yU3RyaW5nJiwgUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4mIGV2ZW50TmFtZXMpCitQ
cm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SlNPTjo6QXJyYXlPZjxTdHJpbmc+Pj4gSW5zcGVj
dG9yRE9NQWdlbnQ6OmdldFN1cHBvcnRlZEV2ZW50TmFtZXMoKQogewotICAgIGV2ZW50TmFtZXMg
PSBKU09OOjpBcnJheU9mPFN0cmluZz46OmNyZWF0ZSgpOworICAgIGF1dG8gZXZlbnROYW1lcyA9
IEpTT046OkFycmF5T2Y8U3RyaW5nPjo6Y3JlYXRlKCk7CiAKICNkZWZpbmUgRE9NX0VWRU5UX05B
TUVTX0FERChuYW1lKSBldmVudE5hbWVzLT5hZGRJdGVtKCNuYW1lKTsKICAgICBET01fRVZFTlRf
TkFNRVNfRk9SX0VBQ0goRE9NX0VWRU5UX05BTUVTX0FERCkKICN1bmRlZiBET01fRVZFTlRfTkFN
RVNfQURECisKKyAgICByZXR1cm4gV1RGTW92ZShldmVudE5hbWVzKTsKIH0KIAogI2lmIEVOQUJM
RShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotdm9pZCBJbnNwZWN0b3JET01BZ2Vu
dDo6Z2V0RGF0YUJpbmRpbmdzRm9yTm9kZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCAv
KiBub2RlSWQgKi8sIFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRP
TTo6RGF0YUJpbmRpbmc+PiYgLyogZGF0YUJpbmRpbmdzICovKQorUHJvdG9jb2w6OkVycm9yU3Ry
aW5nT3I8UmVmPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkRPTTo6RGF0YUJpbmRpbmc+Pj4gSW5z
cGVjdG9yRE9NQWdlbnQ6OmdldERhdGFCaW5kaW5nc0Zvck5vZGUoUHJvdG9jb2w6OkRPTTo6Tm9k
ZUlkKQogewotICAgIGVycm9yU3RyaW5nID0gIk5vdCBzdXBwb3J0ZWQiX3M7CisgICAgcmV0dXJu
IG1ha2VVbmV4cGVjdGVkKCJOb3Qgc3VwcG9ydGVkIl9zKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JE
T01BZ2VudDo6Z2V0QXNzb2NpYXRlZERhdGFGb3JOb2RlKEVycm9yU3RyaW5nJiBlcnJvclN0cmlu
ZywgaW50IC8qIG5vZGVJZCAqLywgT3B0aW9uYWw8U3RyaW5nPiYgLyogYXNzb2NpYXRlZERhdGEg
Ki8pCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxTdHJpbmc+IEluc3BlY3RvckRPTUFnZW50Ojpn
ZXRBc3NvY2lhdGVkRGF0YUZvck5vZGUoUHJvdG9jb2w6OkRPTTo6Tm9kZUlkKQogewotICAgIGVy
cm9yU3RyaW5nID0gIk5vdCBzdXBwb3J0ZWQiX3M7CisgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVk
KCJOb3Qgc3VwcG9ydGVkIl9zKTsKIH0KICNlbmRpZgogCi12b2lkIEluc3BlY3RvckRPTUFnZW50
OjpnZXRFdmVudExpc3RlbmVyc0Zvck5vZGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQg
bm9kZUlkLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkV2
ZW50TGlzdGVuZXI+PiYgbGlzdGVuZXJzQXJyYXkpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxS
ZWY8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6RE9NOjpFdmVudExpc3RlbmVyPj4+IEluc3BlY3Rv
ckRPTUFnZW50OjpnZXRFdmVudExpc3RlbmVyc0Zvck5vZGUoUHJvdG9jb2w6OkRPTTo6Tm9kZUlk
IG5vZGVJZCkKIHsKLSAgICBsaXN0ZW5lcnNBcnJheSA9IEpTT046OkFycmF5T2Y8SW5zcGVjdG9y
OjpQcm90b2NvbDo6RE9NOjpFdmVudExpc3RlbmVyPjo6Y3JlYXRlKCk7CisgICAgUHJvdG9jb2w6
OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOwogCiAgICAgYXV0byogbm9kZSA9IGFzc2VydE5vZGUo
ZXJyb3JTdHJpbmcsIG5vZGVJZCk7CiAgICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm47Cisg
ICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAgICBWZWN0b3I8
UmVmUHRyPEV2ZW50VGFyZ2V0Pj4gYW5jZXN0b3JzOwogICAgIGFuY2VzdG9ycy5hcHBlbmQobm9k
ZSk7CkBAIC05MjksOCArOTU4LDEwIEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmdldEV2ZW50
TGlzdGVuZXJzRm9yTm9kZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBuCiAgICAgICAg
IH0KICAgICB9CiAKKyAgICBhdXRvIGxpc3RlbmVycyA9IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6
OkRPTTo6RXZlbnRMaXN0ZW5lcj46OmNyZWF0ZSgpOworCiAgICAgYXV0byBhZGRMaXN0ZW5lciA9
IFsmXSAoUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXImIGxpc3RlbmVyLCBjb25zdCBFdmVudExpc3Rl
bmVySW5mbyYgaW5mbykgewotICAgICAgICBpbnQgaWRlbnRpZmllciA9IDA7CisgICAgICAgIFBy
b3RvY29sOjpET006OkV2ZW50TGlzdGVuZXJJZCBpZGVudGlmaWVyID0gMDsKICAgICAgICAgYm9v
bCBkaXNhYmxlZCA9IGZhbHNlOwogICAgICAgICBSZWZQdHI8SlNDOjpCcmVha3BvaW50PiBicmVh
a3BvaW50OwogCkBAIC05NTMsNyArOTg0LDcgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Z2V0
RXZlbnRMaXN0ZW5lcnNGb3JOb2RlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG4KICAg
ICAgICAgICAgIG1fZXZlbnRMaXN0ZW5lckVudHJpZXMuYWRkKGlkZW50aWZpZXIsIGluc3BlY3Rv
ckV2ZW50TGlzdGVuZXIpOwogICAgICAgICB9CiAKLSAgICAgICAgbGlzdGVuZXJzQXJyYXktPmFk
ZEl0ZW0oYnVpbGRPYmplY3RGb3JFdmVudExpc3RlbmVyKGxpc3RlbmVyLCBpZGVudGlmaWVyLCAq
aW5mby5ldmVudFRhcmdldCwgaW5mby5ldmVudFR5cGUsIGRpc2FibGVkLCBicmVha3BvaW50KSk7
CisgICAgICAgIGxpc3RlbmVycy0+YWRkSXRlbShidWlsZE9iamVjdEZvckV2ZW50TGlzdGVuZXIo
bGlzdGVuZXIsIGlkZW50aWZpZXIsICppbmZvLmV2ZW50VGFyZ2V0LCBpbmZvLmV2ZW50VHlwZSwg
ZGlzYWJsZWQsIGJyZWFrcG9pbnQpKTsKICAgICB9OwogCiAgICAgLy8gR2V0IENhcHR1cmluZyBM
aXN0ZW5lcnMgKGluIHRoaXMgb3JkZXIpCkBAIC05NzYsODAgKzEwMDcsODEgQEAgdm9pZCBJbnNw
ZWN0b3JET01BZ2VudDo6Z2V0RXZlbnRMaXN0ZW5lcnNGb3JOb2RlKEVycm9yU3RyaW5nJiBlcnJv
clN0cmluZywgaW50IG4KIAogICAgIGlmIChtX2luc3BlY3RlZE5vZGUgPT0gbm9kZSkKICAgICAg
ICAgbV9zdXBwcmVzc0V2ZW50TGlzdGVuZXJDaGFuZ2VkRXZlbnQgPSBmYWxzZTsKKworICAgIHJl
dHVybiBXVEZNb3ZlKGxpc3RlbmVycyk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNl
dEV2ZW50TGlzdGVuZXJEaXNhYmxlZChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBldmVu
dExpc3RlbmVySWQsIGJvb2wgZGlzYWJsZWQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lk
PiBJbnNwZWN0b3JET01BZ2VudDo6c2V0RXZlbnRMaXN0ZW5lckRpc2FibGVkKFByb3RvY29sOjpE
T006OkV2ZW50TGlzdGVuZXJJZCBldmVudExpc3RlbmVySWQsIGJvb2wgZGlzYWJsZWQpCiB7CiAg
ICAgYXV0byBpdCA9IG1fZXZlbnRMaXN0ZW5lckVudHJpZXMuZmluZChldmVudExpc3RlbmVySWQp
OwotICAgIGlmIChpdCA9PSBtX2V2ZW50TGlzdGVuZXJFbnRyaWVzLmVuZCgpKSB7Ci0gICAgICAg
IGVycm9yU3RyaW5nID0gIk1pc3NpbmcgZXZlbnQgbGlzdGVuZXIgZm9yIGdpdmVuIGV2ZW50TGlz
dGVuZXJJZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoaXQgPT0gbV9ldmVu
dExpc3RlbmVyRW50cmllcy5lbmQoKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJN
aXNzaW5nIGV2ZW50IGxpc3RlbmVyIGZvciBnaXZlbiBldmVudExpc3RlbmVySWQiX3MpOwogCiAg
ICAgaXQtPnZhbHVlLmRpc2FibGVkID0gZGlzYWJsZWQ7CisKKyAgICByZXR1cm4geyB9OwogfQog
Ci12b2lkIEluc3BlY3RvckRPTUFnZW50OjpzZXRCcmVha3BvaW50Rm9yRXZlbnRMaXN0ZW5lcihF
cnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBldmVudExpc3RlbmVySWQsIGNvbnN0IEpTT046
Ok9iamVjdCogb3B0aW9uc1BheWxvYWQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJ
bnNwZWN0b3JET01BZ2VudDo6c2V0QnJlYWtwb2ludEZvckV2ZW50TGlzdGVuZXIoUHJvdG9jb2w6
OkRPTTo6RXZlbnRMaXN0ZW5lcklkIGV2ZW50TGlzdGVuZXJJZCwgUmVmUHRyPEpTT046Ok9iamVj
dD4mJiBvcHRpb25zKQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsK
KwogICAgIGF1dG8gaXQgPSBtX2V2ZW50TGlzdGVuZXJFbnRyaWVzLmZpbmQoZXZlbnRMaXN0ZW5l
cklkKTsKLSAgICBpZiAoaXQgPT0gbV9ldmVudExpc3RlbmVyRW50cmllcy5lbmQoKSkgewotICAg
ICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIGV2ZW50IGxpc3RlbmVyIGZvciBnaXZlbiBldmVu
dExpc3RlbmVySWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKGl0ID09IG1f
ZXZlbnRMaXN0ZW5lckVudHJpZXMuZW5kKCkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3Rl
ZCgiTWlzc2luZyBldmVudCBsaXN0ZW5lciBmb3IgZ2l2ZW4gZXZlbnRMaXN0ZW5lcklkIl9zKTsK
IAotICAgIGlmIChpdC0+dmFsdWUuYnJlYWtwb2ludCkgewotICAgICAgICBlcnJvclN0cmluZyA9
ICJCcmVha3BvaW50IGZvciBnaXZlbiBldmVudExpc3RlbmVySWQgYWxyZWFkeSBleGlzdHMiX3M7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKGl0LT52YWx1ZS5icmVha3BvaW50KQor
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkJyZWFrcG9pbnQgZm9yIGdpdmVuIGV2ZW50
TGlzdGVuZXJJZCBhbHJlYWR5IGV4aXN0cyJfcyk7CiAKLSAgICBpdC0+dmFsdWUuYnJlYWtwb2lu
dCA9IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRlYnVnZ2VyQnJlYWtwb2ludEZyb21QYXlsb2Fk
KGVycm9yU3RyaW5nLCBvcHRpb25zUGF5bG9hZCk7CisgICAgaXQtPnZhbHVlLmJyZWFrcG9pbnQg
PSBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkZWJ1Z2dlckJyZWFrcG9pbnRGcm9tUGF5bG9hZChl
cnJvclN0cmluZywgV1RGTW92ZShvcHRpb25zKSk7CisgICAgaWYgKCFpdC0+dmFsdWUuYnJlYWtw
b2ludCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKKworICAg
IHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnJlbW92ZUJyZWFrcG9p
bnRGb3JFdmVudExpc3RlbmVyKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IGV2ZW50TGlz
dGVuZXJJZCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRPTUFnZW50
OjpyZW1vdmVCcmVha3BvaW50Rm9yRXZlbnRMaXN0ZW5lcihQcm90b2NvbDo6RE9NOjpFdmVudExp
c3RlbmVySWQgZXZlbnRMaXN0ZW5lcklkKQogewogICAgIGF1dG8gaXQgPSBtX2V2ZW50TGlzdGVu
ZXJFbnRyaWVzLmZpbmQoZXZlbnRMaXN0ZW5lcklkKTsKLSAgICBpZiAoaXQgPT0gbV9ldmVudExp
c3RlbmVyRW50cmllcy5lbmQoKSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIGV2
ZW50IGxpc3RlbmVyIGZvciBnaXZlbiBldmVudExpc3RlbmVySWQiX3M7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9CisgICAgaWYgKGl0ID09IG1fZXZlbnRMaXN0ZW5lckVudHJpZXMuZW5kKCkpCisg
ICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTWlzc2luZyBldmVudCBsaXN0ZW5lciBmb3Ig
Z2l2ZW4gZXZlbnRMaXN0ZW5lcklkIl9zKTsKIAogICAgIGlmICghaXQtPnZhbHVlLmJyZWFrcG9p
bnQpCi0gICAgICAgIGVycm9yU3RyaW5nID0gIkJyZWFrcG9pbnQgZm9yIGdpdmVuIGV2ZW50TGlz
dGVuZXJJZCBtaXNzaW5nIl9zOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkJyZWFr
cG9pbnQgZm9yIGdpdmVuIGV2ZW50TGlzdGVuZXJJZCBtaXNzaW5nIl9zKTsKIAogICAgIGl0LT52
YWx1ZS5icmVha3BvaW50ID0gbnVsbHB0cjsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQg
SW5zcGVjdG9yRE9NQWdlbnQ6OmdldEFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzRm9yTm9kZShFcnJv
clN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzPiYgYXhQcm9wZXJ0aWVzKQorUHJvdG9j
b2w6OkVycm9yU3RyaW5nT3I8UmVmPFByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0
aWVzPj4gSW5zcGVjdG9yRE9NQWdlbnQ6OmdldEFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzRm9yTm9k
ZShQcm90b2NvbDo6RE9NOjpOb2RlSWQgbm9kZUlkKQogeworICAgIFByb3RvY29sOjpFcnJvclN0
cmluZyBlcnJvclN0cmluZzsKKwogICAgIE5vZGUqIG5vZGUgPSBhc3NlcnROb2RlKGVycm9yU3Ry
aW5nLCBub2RlSWQpOwogICAgIGlmICghbm9kZSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICBy
ZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCi0gICAgYXhQcm9wZXJ0aWVzID0g
YnVpbGRPYmplY3RGb3JBY2Nlc3NpYmlsaXR5UHJvcGVydGllcyhub2RlKTsKKyAgICByZXR1cm4g
YnVpbGRPYmplY3RGb3JBY2Nlc3NpYmlsaXR5UHJvcGVydGllcygqbm9kZSk7CiB9CiAKLXZvaWQg
SW5zcGVjdG9yRE9NQWdlbnQ6OnBlcmZvcm1TZWFyY2goRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5n
LCBjb25zdCBTdHJpbmcmIHF1ZXJ5LCBjb25zdCBKU09OOjpBcnJheSogbm9kZUlkcywgY29uc3Qg
Ym9vbCogY2FzZVNlbnNpdGl2ZSwgU3RyaW5nKiBzZWFyY2hJZCwgaW50KiByZXN1bHRDb3VudCkK
K1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHN0ZDo6dHVwbGU8U3RyaW5nIC8qIHNlYXJjaElkICov
LCBpbnQgLyogcmVzdWx0Q291bnQgKi8+PiBJbnNwZWN0b3JET01BZ2VudDo6cGVyZm9ybVNlYXJj
aChjb25zdCBTdHJpbmcmIHF1ZXJ5LCBSZWZQdHI8SlNPTjo6QXJyYXk+JiYgbm9kZUlkcywgT3B0
aW9uYWw8Ym9vbD4mJiBjYXNlU2Vuc2l0aXZlKQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmlu
ZyBlcnJvclN0cmluZzsKKwogICAgIC8vIEZJWE1FOiBTZWFyY2ggd29ya3Mgd2l0aCBub2RlIGdy
YW51bGFyaXR5IC0gbnVtYmVyIG9mIG1hdGNoZXMgd2l0aGluIG5vZGUgaXMgbm90IGNhbGN1bGF0
ZWQuCiAgICAgSW5zcGVjdG9yTm9kZUZpbmRlciBmaW5kZXIocXVlcnksIGNhc2VTZW5zaXRpdmUg
JiYgKmNhc2VTZW5zaXRpdmUpOwogCiAgICAgaWYgKG5vZGVJZHMpIHsKICAgICAgICAgZm9yIChh
dXRvJiBub2RlVmFsdWUgOiAqbm9kZUlkcykgewotICAgICAgICAgICAgaWYgKCFub2RlVmFsdWUp
IHsKLSAgICAgICAgICAgICAgICBlcnJvclN0cmluZyA9ICJVbmV4cGVjdGVkIG5vbi1pbnRlZ2Vy
IGl0ZW0gaW4gZ2l2ZW4gbm9kZUlkcyJfczsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBpbnQgbm9kZUlkID0gMDsKLSAgICAgICAgICAgIGlmICgh
bm9kZVZhbHVlLT5hc0ludGVnZXIobm9kZUlkKSkgewotICAgICAgICAgICAgICAgIGVycm9yU3Ry
aW5nID0gIlVuZXhwZWN0ZWQgbm9uLWludGVnZXIgaXRlbSBpbiBnaXZlbiBub2RlSWRzIl9zOwot
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIE5vZGUq
IG5vZGUgPSBhc3NlcnROb2RlKGVycm9yU3RyaW5nLCBub2RlSWQpOwotICAgICAgICAgICAgaWYg
KCFub2RlKSB7Ci0gICAgICAgICAgICAgICAgLy8gYXNzZXJ0Tm9kZSBzaG91bGQgaGF2ZSBmaWxs
ZWQgdGhlIGVycm9yU3RyaW5nIGZvciB1cy4KLSAgICAgICAgICAgICAgICBBU1NFUlQoZXJyb3JT
dHJpbmcubGVuZ3RoKCkpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGF1dG8gbm9kZUlkID0gbm9kZVZhbHVlLT5hc0ludGVnZXIoKTsKKyAgICAg
ICAgICAgIGlmICghbm9kZUlkKQorICAgICAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3Rl
ZCgiVW5leHBlY3RlZCBub24taW50ZWdlciBpdGVtIGluIGdpdmVuIG5vZGVJZHMiX3MpOworCisg
ICAgICAgICAgICBOb2RlKiBub2RlID0gYXNzZXJ0Tm9kZShlcnJvclN0cmluZywgKm5vZGVJZCk7
CisgICAgICAgICAgICBpZiAoIW5vZGUpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4
cGVjdGVkKGVycm9yU3RyaW5nKTsKKwogICAgICAgICAgICAgZmluZGVyLnBlcmZvcm1TZWFyY2go
bm9kZSk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewpAQCAtMTA1OCwzNyArMTA5MCwzNiBAQCB2
b2lkIEluc3BlY3RvckRPTUFnZW50OjpwZXJmb3JtU2VhcmNoKEVycm9yU3RyaW5nJiBlcnJvclN0
cmluZywgY29uc3QgU3RyaW5nJiBxdQogICAgICAgICBmaW5kZXIucGVyZm9ybVNlYXJjaChtX2Rv
Y3VtZW50LmdldCgpKTsKICAgICB9CiAKLSAgICAqc2VhcmNoSWQgPSBJZGVudGlmaWVyc0ZhY3Rv
cnk6OmNyZWF0ZUlkZW50aWZpZXIoKTsKKyAgICBhdXRvIHNlYXJjaElkID0gSWRlbnRpZmllcnNG
YWN0b3J5OjpjcmVhdGVJZGVudGlmaWVyKCk7CiAKLSAgICBhdXRvJiByZXN1bHRzVmVjdG9yID0g
bV9zZWFyY2hSZXN1bHRzLmFkZCgqc2VhcmNoSWQsIFZlY3RvcjxSZWZQdHI8Tm9kZT4+KCkpLml0
ZXJhdG9yLT52YWx1ZTsKKyAgICBhdXRvJiByZXN1bHRzVmVjdG9yID0gbV9zZWFyY2hSZXN1bHRz
LmFkZChzZWFyY2hJZCwgVmVjdG9yPFJlZlB0cjxOb2RlPj4oKSkuaXRlcmF0b3ItPnZhbHVlOwog
ICAgIGZvciAoYXV0byYgcmVzdWx0IDogZmluZGVyLnJlc3VsdHMoKSkKICAgICAgICAgcmVzdWx0
c1ZlY3Rvci5hcHBlbmQocmVzdWx0KTsKIAotICAgICpyZXN1bHRDb3VudCA9IHJlc3VsdHNWZWN0
b3Iuc2l6ZSgpOworICAgIHJldHVybiB7IHsgc2VhcmNoSWQsIHJlc3VsdHNWZWN0b3Iuc2l6ZSgp
IH0gfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Z2V0U2VhcmNoUmVzdWx0cyhFcnJv
clN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgc2VhcmNoSWQsIGludCBmcm9tSW5k
ZXgsIGludCB0b0luZGV4LCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxpbnQ+PiYgbm9kZUlkcykKK1By
b3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpET006Ok5v
ZGVJZD4+PiBJbnNwZWN0b3JET01BZ2VudDo6Z2V0U2VhcmNoUmVzdWx0cyhjb25zdCBTdHJpbmcm
IHNlYXJjaElkLCBpbnQgZnJvbUluZGV4LCBpbnQgdG9JbmRleCkKIHsKICAgICBTZWFyY2hSZXN1
bHRzOjppdGVyYXRvciBpdCA9IG1fc2VhcmNoUmVzdWx0cy5maW5kKHNlYXJjaElkKTsKLSAgICBp
ZiAoaXQgPT0gbV9zZWFyY2hSZXN1bHRzLmVuZCgpKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0g
Ik1pc3Npbmcgc2VhcmNoIHJlc3VsdCBmb3IgZ2l2ZW4gc2VhcmNoSWQiX3M7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9CisgICAgaWYgKGl0ID09IG1fc2VhcmNoUmVzdWx0cy5lbmQoKSkKKyAgICAg
ICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJNaXNzaW5nIHNlYXJjaCByZXN1bHQgZm9yIGdpdmVu
IHNlYXJjaElkIl9zKTsKIAogICAgIGludCBzaXplID0gaXQtPnZhbHVlLnNpemUoKTsKLSAgICBp
ZiAoZnJvbUluZGV4IDwgMCB8fCB0b0luZGV4ID4gc2l6ZSB8fCBmcm9tSW5kZXggPj0gdG9JbmRl
eCkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJJbnZhbGlkIHNlYXJjaCByZXN1bHQgcmFuZ2Ug
Zm9yIGdpdmVuIGZyb21JbmRleCBhbmQgdG9JbmRleCJfczsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KKyAgICBpZiAoZnJvbUluZGV4IDwgMCB8fCB0b0luZGV4ID4gc2l6ZSB8fCBmcm9tSW5kZXgg
Pj0gdG9JbmRleCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJJbnZhbGlkIHNlYXJj
aCByZXN1bHQgcmFuZ2UgZm9yIGdpdmVuIGZyb21JbmRleCBhbmQgdG9JbmRleCJfcyk7CiAKLSAg
ICBub2RlSWRzID0gSlNPTjo6QXJyYXlPZjxpbnQ+OjpjcmVhdGUoKTsKKyAgICBhdXRvIG5vZGVJ
ZHMgPSBKU09OOjpBcnJheU9mPFByb3RvY29sOjpET006Ok5vZGVJZD46OmNyZWF0ZSgpOwogICAg
IGZvciAoaW50IGkgPSBmcm9tSW5kZXg7IGkgPCB0b0luZGV4OyArK2kpCiAgICAgICAgIG5vZGVJ
ZHMtPmFkZEl0ZW0ocHVzaE5vZGVQYXRoVG9Gcm9udGVuZCgoaXQtPnZhbHVlKVtpXS5nZXQoKSkp
OworICAgIHJldHVybiBXVEZNb3ZlKG5vZGVJZHMpOwogfQogCi12b2lkIEluc3BlY3RvckRPTUFn
ZW50OjpkaXNjYXJkU2VhcmNoUmVzdWx0cyhFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgc2Vh
cmNoSWQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JET01BZ2VudDo6
ZGlzY2FyZFNlYXJjaFJlc3VsdHMoY29uc3QgU3RyaW5nJiBzZWFyY2hJZCkKIHsKICAgICBtX3Nl
YXJjaFJlc3VsdHMucmVtb3ZlKHNlYXJjaElkKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKIGJv
b2wgSW5zcGVjdG9yRE9NQWdlbnQ6OmhhbmRsZU1vdXNlUHJlc3MoKQpAQCAtMTExNyw3ICsxMTQ4
LDcgQEAgYm9vbCBJbnNwZWN0b3JET01BZ2VudDo6aGFuZGxlVG91Y2hFdmVudChOb2RlJiBub2Rl
KQogCiB2b2lkIEluc3BlY3RvckRPTUFnZW50OjppbnNwZWN0KE5vZGUqIGluc3BlY3RlZE5vZGUp
CiB7Ci0gICAgRXJyb3JTdHJpbmcgaWdub3JlZDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcg
aWdub3JlZDsKICAgICBSZWZQdHI8Tm9kZT4gbm9kZSA9IGluc3BlY3RlZE5vZGU7CiAgICAgc2V0
U2VhcmNoaW5nRm9yTm9kZShpZ25vcmVkLCBmYWxzZSwgbnVsbHB0ciwgZmFsc2UpOwogCkBAIC0x
MTczLDcgKzEyMDQsNyBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpoaWdobGlnaHRNb3VzZWRP
dmVyTm9kZSgpCiAgICAgICAgIG1fb3ZlcmxheS0+aGlnaGxpZ2h0Tm9kZShub2RlLCAqbV9pbnNw
ZWN0TW9kZUhpZ2hsaWdodENvbmZpZyk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNl
dFNlYXJjaGluZ0Zvck5vZGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBib29sIGVuYWJsZWQs
IGNvbnN0IEpTT046Ok9iamVjdCogaGlnaGxpZ2h0SW5zcGVjdG9yT2JqZWN0LCBib29sIHNob3dS
dWxlcnMpCit2b2lkIEluc3BlY3RvckRPTUFnZW50OjpzZXRTZWFyY2hpbmdGb3JOb2RlKFByb3Rv
Y29sOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGJvb2wgZW5hYmxlZCwgUmVmUHRyPEpTT046
Ok9iamVjdD4mJiBoaWdobGlnaHRJbnNwZWN0b3JPYmplY3QsIGJvb2wgc2hvd1J1bGVycykKIHsK
ICAgICBpZiAobV9zZWFyY2hpbmdGb3JOb2RlID09IGVuYWJsZWQpCiAgICAgICAgIHJldHVybjsK
QEAgLTExODMsMTIgKzEyMTQsMTIgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c2V0U2VhcmNo
aW5nRm9yTm9kZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGJvb2wgZW5hYmwKICAgICBtX292
ZXJsYXktPnNldFNob3dSdWxlcnNEdXJpbmdFbGVtZW50U2VsZWN0aW9uKG1fc2VhcmNoaW5nRm9y
Tm9kZSAmJiBzaG93UnVsZXJzKTsKIAogICAgIGlmIChtX3NlYXJjaGluZ0Zvck5vZGUpIHsKLSAg
ICAgICAgbV9pbnNwZWN0TW9kZUhpZ2hsaWdodENvbmZpZyA9IGhpZ2hsaWdodENvbmZpZ0Zyb21J
bnNwZWN0b3JPYmplY3QoZXJyb3JTdHJpbmcsIGhpZ2hsaWdodEluc3BlY3Rvck9iamVjdCk7Cisg
ICAgICAgIG1faW5zcGVjdE1vZGVIaWdobGlnaHRDb25maWcgPSBoaWdobGlnaHRDb25maWdGcm9t
SW5zcGVjdG9yT2JqZWN0KGVycm9yU3RyaW5nLCBXVEZNb3ZlKGhpZ2hsaWdodEluc3BlY3Rvck9i
amVjdCkpOwogICAgICAgICBpZiAoIW1faW5zcGVjdE1vZGVIaWdobGlnaHRDb25maWcpCiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIGhpZ2hsaWdodE1vdXNlZE92ZXJOb2RlKCk7CiAgICAg
fSBlbHNlCi0gICAgICAgIGhpZGVIaWdobGlnaHQoZXJyb3JTdHJpbmcpOworICAgICAgICBoaWRl
SGlnaGxpZ2h0KCk7CiAKICAgICBtX292ZXJsYXktPmRpZFNldFNlYXJjaGluZ0Zvck5vZGUobV9z
ZWFyY2hpbmdGb3JOb2RlKTsKIApAQCAtMTE5Niw3ICsxMjI3LDcgQEAgdm9pZCBJbnNwZWN0b3JE
T01BZ2VudDo6c2V0U2VhcmNoaW5nRm9yTm9kZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGJv
b2wgZW5hYmwKICAgICAgICAgY2xpZW50LT5lbGVtZW50U2VsZWN0aW9uQ2hhbmdlZChtX3NlYXJj
aGluZ0Zvck5vZGUpOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8SGlnaGxpZ2h0Q29uZmlnPiBJbnNw
ZWN0b3JET01BZ2VudDo6aGlnaGxpZ2h0Q29uZmlnRnJvbUluc3BlY3Rvck9iamVjdChFcnJvclN0
cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IEpTT046Ok9iamVjdCogaGlnaGxpZ2h0SW5zcGVjdG9y
T2JqZWN0KQorc3RkOjp1bmlxdWVfcHRyPEhpZ2hsaWdodENvbmZpZz4gSW5zcGVjdG9yRE9NQWdl
bnQ6OmhpZ2hsaWdodENvbmZpZ0Zyb21JbnNwZWN0b3JPYmplY3QoUHJvdG9jb2w6OkVycm9yU3Ry
aW5nJiBlcnJvclN0cmluZywgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBoaWdobGlnaHRJbnNwZWN0
b3JPYmplY3QpCiB7CiAgICAgaWYgKCFoaWdobGlnaHRJbnNwZWN0b3JPYmplY3QpIHsKICAgICAg
ICAgZXJyb3JTdHJpbmcgPSAiSW50ZXJuYWwgZXJyb3I6IGhpZ2hsaWdodCBjb25maWd1cmF0aW9u
IHBhcmFtZXRlciBpcyBtaXNzaW5nIl9zOwpAQCAtMTIwNCw4MSArMTIzNSw5MyBAQCBzdGQ6OnVu
aXF1ZV9wdHI8SGlnaGxpZ2h0Q29uZmlnPiBJbnNwZWN0b3JET01BZ2VudDo6aGlnaGxpZ2h0Q29u
ZmlnRnJvbUluc3BlY3RvcgogICAgIH0KIAogICAgIGF1dG8gaGlnaGxpZ2h0Q29uZmlnID0gbWFr
ZVVuaXF1ZTxIaWdobGlnaHRDb25maWc+KCk7Ci0gICAgYm9vbCBzaG93SW5mbyA9IGZhbHNlOyAv
LyBEZWZhdWx0OiBmYWxzZSAoZG8gbm90IHNob3cgYSB0b29sdGlwKS4KLSAgICBoaWdobGlnaHRJ
bnNwZWN0b3JPYmplY3QtPmdldEJvb2xlYW4oInNob3dJbmZvIiwgc2hvd0luZm8pOwotICAgIGhp
Z2hsaWdodENvbmZpZy0+c2hvd0luZm8gPSBzaG93SW5mbzsKLSAgICBoaWdobGlnaHRDb25maWct
PmNvbnRlbnQgPSBwYXJzZUNvbmZpZ0NvbG9yKCJjb250ZW50Q29sb3IiLCBoaWdobGlnaHRJbnNw
ZWN0b3JPYmplY3QpOwotICAgIGhpZ2hsaWdodENvbmZpZy0+Y29udGVudE91dGxpbmUgPSBwYXJz
ZUNvbmZpZ0NvbG9yKCJjb250ZW50T3V0bGluZUNvbG9yIiwgaGlnaGxpZ2h0SW5zcGVjdG9yT2Jq
ZWN0KTsKLSAgICBoaWdobGlnaHRDb25maWctPnBhZGRpbmcgPSBwYXJzZUNvbmZpZ0NvbG9yKCJw
YWRkaW5nQ29sb3IiLCBoaWdobGlnaHRJbnNwZWN0b3JPYmplY3QpOwotICAgIGhpZ2hsaWdodENv
bmZpZy0+Ym9yZGVyID0gcGFyc2VDb25maWdDb2xvcigiYm9yZGVyQ29sb3IiLCBoaWdobGlnaHRJ
bnNwZWN0b3JPYmplY3QpOwotICAgIGhpZ2hsaWdodENvbmZpZy0+bWFyZ2luID0gcGFyc2VDb25m
aWdDb2xvcigibWFyZ2luQ29sb3IiLCBoaWdobGlnaHRJbnNwZWN0b3JPYmplY3QpOworICAgIGhp
Z2hsaWdodENvbmZpZy0+c2hvd0luZm8gPSBoaWdobGlnaHRJbnNwZWN0b3JPYmplY3QtPmdldEJv
b2xlYW4oUHJvdG9jb2w6OkRPTTo6SGlnaGxpZ2h0Q29uZmlnOjpzaG93SW5mb0tleSkudmFsdWVP
cihmYWxzZSk7CisgICAgaGlnaGxpZ2h0Q29uZmlnLT5jb250ZW50ID0gcGFyc2VDb25maWdDb2xv
cihQcm90b2NvbDo6RE9NOjpIaWdobGlnaHRDb25maWc6OmNvbnRlbnRDb2xvcktleSwgKmhpZ2hs
aWdodEluc3BlY3Rvck9iamVjdCk7CisgICAgaGlnaGxpZ2h0Q29uZmlnLT5wYWRkaW5nID0gcGFy
c2VDb25maWdDb2xvcihQcm90b2NvbDo6RE9NOjpIaWdobGlnaHRDb25maWc6OnBhZGRpbmdDb2xv
cktleSwgKmhpZ2hsaWdodEluc3BlY3Rvck9iamVjdCk7CisgICAgaGlnaGxpZ2h0Q29uZmlnLT5i
b3JkZXIgPSBwYXJzZUNvbmZpZ0NvbG9yKFByb3RvY29sOjpET006OkhpZ2hsaWdodENvbmZpZzo6
Ym9yZGVyQ29sb3JLZXksICpoaWdobGlnaHRJbnNwZWN0b3JPYmplY3QpOworICAgIGhpZ2hsaWdo
dENvbmZpZy0+bWFyZ2luID0gcGFyc2VDb25maWdDb2xvcihQcm90b2NvbDo6RE9NOjpIaWdobGln
aHRDb25maWc6Om1hcmdpbkNvbG9yS2V5LCAqaGlnaGxpZ2h0SW5zcGVjdG9yT2JqZWN0KTsKICAg
ICByZXR1cm4gaGlnaGxpZ2h0Q29uZmlnOwogfQogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkK
LXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNldEluc3BlY3RNb2RlRW5hYmxlZChFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcsIGJvb2wgZW5hYmxlZCwgY29uc3QgSlNPTjo6T2JqZWN0KiBoaWdobGln
aHRDb25maWcpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JET01BZ2Vu
dDo6c2V0SW5zcGVjdE1vZGVFbmFibGVkKGJvb2wgZW5hYmxlZCwgUmVmUHRyPEpTT046Ok9iamVj
dD4mJiBoaWdobGlnaHRDb25maWcpCiB7Ci0gICAgc2V0U2VhcmNoaW5nRm9yTm9kZShlcnJvclN0
cmluZywgZW5hYmxlZCwgaGlnaGxpZ2h0Q29uZmlnID8gaGlnaGxpZ2h0Q29uZmlnIDogbnVsbHB0
ciwgZmFsc2UpOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKworICAg
IHNldFNlYXJjaGluZ0Zvck5vZGUoZXJyb3JTdHJpbmcsIGVuYWJsZWQsIFdURk1vdmUoaGlnaGxp
Z2h0Q29uZmlnKSwgZmFsc2UpOworCisgICAgaWYgKCEhZXJyb3JTdHJpbmcpCisgICAgICAgIHJl
dHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CisKKyAgICByZXR1cm4geyB9OwogfQog
I2Vsc2UKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNldEluc3BlY3RNb2RlRW5hYmxlZChFcnJv
clN0cmluZyYgZXJyb3JTdHJpbmcsIGJvb2wgZW5hYmxlZCwgY29uc3QgSlNPTjo6T2JqZWN0KiBo
aWdobGlnaHRDb25maWcsIGNvbnN0IGJvb2wqIHNob3dSdWxlcnMpCitQcm90b2NvbDo6RXJyb3JT
dHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JET01BZ2VudDo6c2V0SW5zcGVjdE1vZGVFbmFibGVkKGJv
b2wgZW5hYmxlZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBoaWdobGlnaHRDb25maWcsIE9wdGlv
bmFsPGJvb2w+JiYgc2hvd1J1bGVycykKIHsKLSAgICBzZXRTZWFyY2hpbmdGb3JOb2RlKGVycm9y
U3RyaW5nLCBlbmFibGVkLCBoaWdobGlnaHRDb25maWcgPyBoaWdobGlnaHRDb25maWcgOiBudWxs
cHRyLCBzaG93UnVsZXJzICYmICpzaG93UnVsZXJzKTsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJp
bmcgZXJyb3JTdHJpbmc7CisKKyAgICBzZXRTZWFyY2hpbmdGb3JOb2RlKGVycm9yU3RyaW5nLCBl
bmFibGVkLCBXVEZNb3ZlKGhpZ2hsaWdodENvbmZpZyksIHNob3dSdWxlcnMgJiYgKnNob3dSdWxl
cnMpOworCisgICAgaWYgKCEhZXJyb3JTdHJpbmcpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBl
Y3RlZChlcnJvclN0cmluZyk7CisKKyAgICByZXR1cm4geyB9OwogfQogI2VuZGlmCiAKLXZvaWQg
SW5zcGVjdG9yRE9NQWdlbnQ6OmhpZ2hsaWdodFJlY3QoRXJyb3JTdHJpbmcmLCBpbnQgeCwgaW50
IHksIGludCB3aWR0aCwgaW50IGhlaWdodCwgY29uc3QgSlNPTjo6T2JqZWN0KiBjb2xvciwgY29u
c3QgSlNPTjo6T2JqZWN0KiBvdXRsaW5lQ29sb3IsIGNvbnN0IGJvb2wqIHVzZVBhZ2VDb29yZGlu
YXRlcykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRPTUFnZW50Ojpo
aWdobGlnaHRSZWN0KGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBSZWZQdHI8
SlNPTjo6T2JqZWN0PiYmIGNvbG9yLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIG91dGxpbmVDb2xv
ciwgT3B0aW9uYWw8Ym9vbD4mJiB1c2VQYWdlQ29vcmRpbmF0ZXMpCiB7CiAgICAgYXV0byBxdWFk
ID0gbWFrZVVuaXF1ZTxGbG9hdFF1YWQ+KEZsb2F0UmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KSk7
Ci0gICAgaW5uZXJIaWdobGlnaHRRdWFkKFdURk1vdmUocXVhZCksIGNvbG9yLCBvdXRsaW5lQ29s
b3IsIHVzZVBhZ2VDb29yZGluYXRlcyk7CisgICAgaW5uZXJIaWdobGlnaHRRdWFkKFdURk1vdmUo
cXVhZCksIFdURk1vdmUoY29sb3IpLCBXVEZNb3ZlKG91dGxpbmVDb2xvciksIFdURk1vdmUodXNl
UGFnZUNvb3JkaW5hdGVzKSk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3Rv
ckRPTUFnZW50OjpoaWdobGlnaHRRdWFkKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3Qg
SlNPTjo6QXJyYXkmIHF1YWRBcnJheSwgY29uc3QgSlNPTjo6T2JqZWN0KiBjb2xvciwgY29uc3Qg
SlNPTjo6T2JqZWN0KiBvdXRsaW5lQ29sb3IsIGNvbnN0IGJvb2wqIHVzZVBhZ2VDb29yZGluYXRl
cykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRPTUFnZW50OjpoaWdo
bGlnaHRRdWFkKFJlZjxKU09OOjpBcnJheT4mJiBxdWFkT2JqZWN0LCBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiYmIGNvbG9yLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIG91dGxpbmVDb2xvciwgT3B0aW9u
YWw8Ym9vbD4mJiB1c2VQYWdlQ29vcmRpbmF0ZXMpCiB7CiAgICAgYXV0byBxdWFkID0gbWFrZVVu
aXF1ZTxGbG9hdFF1YWQ+KCk7Ci0gICAgaWYgKCFwYXJzZVF1YWQocXVhZEFycmF5LCBxdWFkLmdl
dCgpKSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJVbmV4cGVjdGVkIGludmFsaWQgcXVhZEFy
cmF5Il9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlubmVySGlnaGxpZ2h0UXVhZChX
VEZNb3ZlKHF1YWQpLCBjb2xvciwgb3V0bGluZUNvbG9yLCB1c2VQYWdlQ29vcmRpbmF0ZXMpOwor
ICAgIGlmICghcGFyc2VRdWFkKFdURk1vdmUocXVhZE9iamVjdCksIHF1YWQuZ2V0KCkpKQorICAg
ICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIlVuZXhwZWN0ZWQgaW52YWxpZCBxdWFkIl9zKTsK
KworICAgIGlubmVySGlnaGxpZ2h0UXVhZChXVEZNb3ZlKHF1YWQpLCBXVEZNb3ZlKGNvbG9yKSwg
V1RGTW92ZShvdXRsaW5lQ29sb3IpLCBXVEZNb3ZlKHVzZVBhZ2VDb29yZGluYXRlcykpOworCisg
ICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6aW5uZXJIaWdobGln
aHRRdWFkKHN0ZDo6dW5pcXVlX3B0cjxGbG9hdFF1YWQ+IHF1YWQsIGNvbnN0IEpTT046Ok9iamVj
dCogY29sb3IsIGNvbnN0IEpTT046Ok9iamVjdCogb3V0bGluZUNvbG9yLCBjb25zdCBib29sKiB1
c2VQYWdlQ29vcmRpbmF0ZXMpCit2b2lkIEluc3BlY3RvckRPTUFnZW50Ojppbm5lckhpZ2hsaWdo
dFF1YWQoc3RkOjp1bmlxdWVfcHRyPEZsb2F0UXVhZD4gcXVhZCwgUmVmUHRyPEpTT046Ok9iamVj
dD4mJiBjb2xvciwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBvdXRsaW5lQ29sb3IsIE9wdGlvbmFs
PGJvb2w+JiYgdXNlUGFnZUNvb3JkaW5hdGVzKQogewogICAgIGF1dG8gaGlnaGxpZ2h0Q29uZmln
ID0gbWFrZVVuaXF1ZTxIaWdobGlnaHRDb25maWc+KCk7Ci0gICAgaGlnaGxpZ2h0Q29uZmlnLT5j
b250ZW50ID0gcGFyc2VDb2xvcihjb2xvcik7Ci0gICAgaGlnaGxpZ2h0Q29uZmlnLT5jb250ZW50
T3V0bGluZSA9IHBhcnNlQ29sb3Iob3V0bGluZUNvbG9yKTsKKyAgICBoaWdobGlnaHRDb25maWct
PmNvbnRlbnQgPSBwYXJzZUNvbG9yKFdURk1vdmUoY29sb3IpKTsKKyAgICBoaWdobGlnaHRDb25m
aWctPmNvbnRlbnRPdXRsaW5lID0gcGFyc2VDb2xvcihXVEZNb3ZlKG91dGxpbmVDb2xvcikpOwog
ICAgIGhpZ2hsaWdodENvbmZpZy0+dXNlUGFnZUNvb3JkaW5hdGVzID0gdXNlUGFnZUNvb3JkaW5h
dGVzID8gKnVzZVBhZ2VDb29yZGluYXRlcyA6IGZhbHNlOwogICAgIG1fb3ZlcmxheS0+aGlnaGxp
Z2h0UXVhZChXVEZNb3ZlKHF1YWQpLCAqaGlnaGxpZ2h0Q29uZmlnKTsKIH0KIAotdm9pZCBJbnNw
ZWN0b3JET01BZ2VudDo6aGlnaGxpZ2h0U2VsZWN0b3IoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5n
LCBjb25zdCBKU09OOjpPYmplY3QmIGhpZ2hsaWdodEluc3BlY3Rvck9iamVjdCwgY29uc3QgU3Ry
aW5nJiBzZWxlY3RvclN0cmluZywgY29uc3QgU3RyaW5nKiBmcmFtZUlkKQorUHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yRE9NQWdlbnQ6OmhpZ2hsaWdodFNlbGVjdG9yKFJl
ZjxKU09OOjpPYmplY3Q+JiYgaGlnaGxpZ2h0SW5zcGVjdG9yT2JqZWN0LCBjb25zdCBTdHJpbmcm
IHNlbGVjdG9yU3RyaW5nLCBjb25zdCBQcm90b2NvbDo6TmV0d29yazo6RnJhbWVJZCYgZnJhbWVJ
ZCkKIHsKLSAgICBhdXRvIGhpZ2hsaWdodENvbmZpZyA9IGhpZ2hsaWdodENvbmZpZ0Zyb21JbnNw
ZWN0b3JPYmplY3QoZXJyb3JTdHJpbmcsICZoaWdobGlnaHRJbnNwZWN0b3JPYmplY3QpOworICAg
IFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKworICAgIGF1dG8gaGlnaGxpZ2h0
Q29uZmlnID0gaGlnaGxpZ2h0Q29uZmlnRnJvbUluc3BlY3Rvck9iamVjdChlcnJvclN0cmluZywg
V1RGTW92ZShoaWdobGlnaHRJbnNwZWN0b3JPYmplY3QpKTsKICAgICBpZiAoIWhpZ2hsaWdodENv
bmZpZykKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJy
b3JTdHJpbmcpOwogCiAgICAgUmVmUHRyPERvY3VtZW50PiBkb2N1bWVudDsKIAotICAgIGlmIChm
cmFtZUlkKSB7CisgICAgaWYgKCEhZnJhbWVJZCkgewogICAgICAgICBhdXRvKiBwYWdlQWdlbnQg
PSBtX2luc3RydW1lbnRpbmdBZ2VudHMuZW5hYmxlZFBhZ2VBZ2VudCgpOwotICAgICAgICBpZiAo
IXBhZ2VBZ2VudCkgewotICAgICAgICAgICAgZXJyb3JTdHJpbmcgPSAiUGFnZSBkb21haW4gbXVz
dCBiZSBlbmFibGVkIl9zOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9CisgICAgICAg
IGlmICghcGFnZUFnZW50KQorICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJQYWdl
IGRvbWFpbiBtdXN0IGJlIGVuYWJsZWQiX3MpOwogCi0gICAgICAgIGF1dG8qIGZyYW1lID0gcGFn
ZUFnZW50LT5hc3NlcnRGcmFtZShlcnJvclN0cmluZywgKmZyYW1lSWQpOworICAgICAgICBhdXRv
KiBmcmFtZSA9IHBhZ2VBZ2VudC0+YXNzZXJ0RnJhbWUoZXJyb3JTdHJpbmcsIGZyYW1lSWQpOwog
ICAgICAgICBpZiAoIWZyYW1lKQotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgcmV0
dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgICAgICBkb2N1bWVudCA9IGZy
YW1lLT5kb2N1bWVudCgpOwogICAgIH0gZWxzZQogICAgICAgICBkb2N1bWVudCA9IG1fZG9jdW1l
bnQ7CiAKLSAgICBpZiAoIWRvY3VtZW50KSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIk1pc3Np
bmcgZG9jdW1lbnQgb2YgZnJhbWUgZm9yIGdpdmVuIGZyYW1lSWQiX3M7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9CisgICAgaWYgKCFkb2N1bWVudCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVj
dGVkKCJNaXNzaW5nIGRvY3VtZW50IG9mIGZyYW1lIGZvciBnaXZlbiBmcmFtZUlkIl9zKTsKIAog
ICAgIENTU1BhcnNlciBwYXJzZXIoKmRvY3VtZW50KTsKICAgICBDU1NTZWxlY3Rvckxpc3Qgc2Vs
ZWN0b3JMaXN0OwpAQCAtMTMzOSwxNTggKzEzODIsMTczIEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdl
bnQ6OmhpZ2hsaWdodFNlbGVjdG9yKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgSlNP
Tjo6CiAgICAgfQogCiAgICAgbV9vdmVybGF5LT5oaWdobGlnaHROb2RlTGlzdChTdGF0aWNOb2Rl
TGlzdDo6Y3JlYXRlKFdURk1vdmUobm9kZUxpc3QpKSwgKmhpZ2hsaWdodENvbmZpZyk7CisKKyAg
ICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpoaWdobGlnaHROb2Rl
KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgSlNPTjo6T2JqZWN0JiBoaWdobGlnaHRJ
bnNwZWN0b3JPYmplY3QsIGNvbnN0IGludCogbm9kZUlkLCBjb25zdCBTdHJpbmcqIG9iamVjdElk
KQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yRE9NQWdlbnQ6OmhpZ2hs
aWdodE5vZGUoUmVmPEpTT046Ok9iamVjdD4mJiBoaWdobGlnaHRJbnNwZWN0b3JPYmplY3QsIE9w
dGlvbmFsPFByb3RvY29sOjpET006Ok5vZGVJZD4mJiBub2RlSWQsIGNvbnN0IFByb3RvY29sOjpS
dW50aW1lOjpSZW1vdGVPYmplY3RJZCYgb2JqZWN0SWQpCiB7CisgICAgUHJvdG9jb2w6OkVycm9y
U3RyaW5nIGVycm9yU3RyaW5nOworCiAgICAgTm9kZSogbm9kZSA9IG51bGxwdHI7CiAgICAgaWYg
KG5vZGVJZCkKICAgICAgICAgbm9kZSA9IGFzc2VydE5vZGUoZXJyb3JTdHJpbmcsICpub2RlSWQp
OwotICAgIGVsc2UgaWYgKG9iamVjdElkKSB7Ci0gICAgICAgIG5vZGUgPSBub2RlRm9yT2JqZWN0
SWQoKm9iamVjdElkKTsKLSAgICAgICAgaWYgKCFub2RlKQotICAgICAgICAgICAgZXJyb3JTdHJp
bmcgPSAiTWlzc2luZyBub2RlIGZvciBnaXZlbiBvYmplY3RJZCJfczsKKyAgICBlbHNlIGlmICgh
IW9iamVjdElkKSB7CisgICAgICAgIG5vZGUgPSBub2RlRm9yT2JqZWN0SWQob2JqZWN0SWQpOwor
ICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIG5vZGUgZm9yIGdpdmVuIG9iamVjdElkIl9z
OwogICAgIH0gZWxzZQogICAgICAgICBlcnJvclN0cmluZyA9ICJFaXRoZXIgbm9kZUlkIG9yIG9i
amVjdElkIG11c3QgYmUgc3BlY2lmaWVkIl9zOwogCiAgICAgaWYgKCFub2RlKQotICAgICAgICBy
ZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKLSAg
ICBzdGQ6OnVuaXF1ZV9wdHI8SGlnaGxpZ2h0Q29uZmlnPiBoaWdobGlnaHRDb25maWcgPSBoaWdo
bGlnaHRDb25maWdGcm9tSW5zcGVjdG9yT2JqZWN0KGVycm9yU3RyaW5nLCAmaGlnaGxpZ2h0SW5z
cGVjdG9yT2JqZWN0KTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SGlnaGxpZ2h0Q29uZmlnPiBoaWdo
bGlnaHRDb25maWcgPSBoaWdobGlnaHRDb25maWdGcm9tSW5zcGVjdG9yT2JqZWN0KGVycm9yU3Ry
aW5nLCBXVEZNb3ZlKGhpZ2hsaWdodEluc3BlY3Rvck9iamVjdCkpOwogICAgIGlmICghaGlnaGxp
Z2h0Q29uZmlnKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3Rl
ZChlcnJvclN0cmluZyk7CiAKICAgICBtX292ZXJsYXktPmhpZ2hsaWdodE5vZGUobm9kZSwgKmhp
Z2hsaWdodENvbmZpZyk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckRP
TUFnZW50OjpoaWdobGlnaHROb2RlTGlzdChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0
IEpTT046OkFycmF5JiBub2RlSWRzLCBjb25zdCBKU09OOjpPYmplY3QmIGhpZ2hsaWdodEluc3Bl
Y3Rvck9iamVjdCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRPTUFn
ZW50OjpoaWdobGlnaHROb2RlTGlzdChSZWY8SlNPTjo6QXJyYXk+JiYgbm9kZUlkcywgUmVmPEpT
T046Ok9iamVjdD4mJiBoaWdobGlnaHRJbnNwZWN0b3JPYmplY3QpCiB7Ci0gICAgVmVjdG9yPFJl
ZjxOb2RlPj4gbm9kZXM7Ci0gICAgZm9yIChhdXRvJiBub2RlVmFsdWUgOiBub2RlSWRzKSB7Ci0g
ICAgICAgIGlmICghbm9kZVZhbHVlKSB7Ci0gICAgICAgICAgICBlcnJvclN0cmluZyA9ICJVbmV4
cGVjdGVkIG5vbi1pbnRlZ2VyIGl0ZW0gaW4gZ2l2ZW4gbm9kZUlkcyJfczsKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfQorICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmlu
ZzsKIAotICAgICAgICBpbnQgbm9kZUlkID0gMDsKLSAgICAgICAgaWYgKCFub2RlVmFsdWUtPmFz
SW50ZWdlcihub2RlSWQpKSB7Ci0gICAgICAgICAgICBlcnJvclN0cmluZyA9ICJVbmV4cGVjdGVk
IG5vbi1pbnRlZ2VyIGl0ZW0gaW4gZ2l2ZW4gbm9kZUlkcyJfczsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQorICAgIFZlY3RvcjxSZWY8Tm9kZT4+IG5vZGVzOworICAgIGZvciAoYXV0
byYgbm9kZUlkVmFsdWUgOiBub2RlSWRzLmdldCgpKSB7CisgICAgICAgIGF1dG8gbm9kZUlkID0g
bm9kZUlkVmFsdWUtPmFzSW50ZWdlcigpOworICAgICAgICBpZiAoIW5vZGVJZCkKKyAgICAgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiVW5leHBlY3RlZCBub24taW50ZWdlciBpdGVtIGlu
IGdpdmVuIG5vZGVJZHMiX3MpOwogCiAgICAgICAgIC8vIEluIHRoZSBjYXNlIHRoYXQgYSBub2Rl
IGlzIHJlbW92ZWQgaW4gdGhlIHRpbWUgYmV0d2VlbiB3aGVuIGhpZ2hsaWdodE5vZGVMaXN0IGlz
IGludm9rZWQKICAgICAgICAgLy8gYnkgdGhlIGZyb250ZW5kIGFuZCBpdCBpcyBleGVjdXRlZCBi
eSB0aGUgYmFja2VuZCwgd2Ugc2hvdWxkIHN0aWxsIGF0dGVtcHQgdG8gaGlnaGxpZ2h0CiAgICAg
ICAgIC8vIGFzIG1hbnkgbm9kZXMgYXMgcG9zc2libGUuIEFzIHN1Y2gsIHdlIHNob3VsZCBpZ25v
cmUgYW55IGVycm9ycyBnZW5lcmF0ZWQgd2hlbiBhdHRlbXB0aW5nCiAgICAgICAgIC8vIHRvIGdl
dCBhIE5vZGUgZnJvbSBhIGdpdmVuIG5vZGVJZC4gCi0gICAgICAgIEVycm9yU3RyaW5nIGlnbm9y
ZWQ7Ci0gICAgICAgIE5vZGUqIG5vZGUgPSBhc3NlcnROb2RlKGlnbm9yZWQsIG5vZGVJZCk7Cisg
ICAgICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBpZ25vcmVkOworICAgICAgICBOb2RlKiBub2Rl
ID0gYXNzZXJ0Tm9kZShpZ25vcmVkLCAqbm9kZUlkKTsKICAgICAgICAgaWYgKCFub2RlKQogICAg
ICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgbm9kZXMuYXBwZW5kKCpub2RlKTsKICAgICB9
CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SGlnaGxpZ2h0Q29uZmlnPiBoaWdobGlnaHRDb25maWcg
PSBoaWdobGlnaHRDb25maWdGcm9tSW5zcGVjdG9yT2JqZWN0KGVycm9yU3RyaW5nLCAmaGlnaGxp
Z2h0SW5zcGVjdG9yT2JqZWN0KTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SGlnaGxpZ2h0Q29uZmln
PiBoaWdobGlnaHRDb25maWcgPSBoaWdobGlnaHRDb25maWdGcm9tSW5zcGVjdG9yT2JqZWN0KGVy
cm9yU3RyaW5nLCBXVEZNb3ZlKGhpZ2hsaWdodEluc3BlY3Rvck9iamVjdCkpOwogICAgIGlmICgh
aGlnaGxpZ2h0Q29uZmlnKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5l
eHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAgICBtX292ZXJsYXktPmhpZ2hsaWdodE5vZGVMaXN0
KFN0YXRpY05vZGVMaXN0OjpjcmVhdGUoV1RGTW92ZShub2RlcykpLCAqaGlnaGxpZ2h0Q29uZmln
KTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmhpZ2hs
aWdodEZyYW1lKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBmcmFtZUlk
LCBjb25zdCBKU09OOjpPYmplY3QqIGNvbG9yLCBjb25zdCBKU09OOjpPYmplY3QqIG91dGxpbmVD
b2xvcikKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRPTUFnZW50Ojpo
aWdobGlnaHRGcmFtZShjb25zdCBQcm90b2NvbDo6TmV0d29yazo6RnJhbWVJZCYgZnJhbWVJZCwg
UmVmUHRyPEpTT046Ok9iamVjdD4mJiBjb2xvciwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBvdXRs
aW5lQ29sb3IpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAg
ICAgYXV0byogcGFnZUFnZW50ID0gbV9pbnN0cnVtZW50aW5nQWdlbnRzLmVuYWJsZWRQYWdlQWdl
bnQoKTsKLSAgICBpZiAoIXBhZ2VBZ2VudCkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJQYWdl
IGRvbWFpbiBtdXN0IGJlIGVuYWJsZWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAg
aWYgKCFwYWdlQWdlbnQpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiUGFnZSBkb21h
aW4gbXVzdCBiZSBlbmFibGVkIl9zKTsKIAogICAgIGF1dG8qIGZyYW1lID0gcGFnZUFnZW50LT5h
c3NlcnRGcmFtZShlcnJvclN0cmluZywgZnJhbWVJZCk7CiAgICAgaWYgKCFmcmFtZSkKLSAgICAg
ICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwog
CiAgICAgaWYgKGZyYW1lLT5vd25lckVsZW1lbnQoKSkgewogICAgICAgICBhdXRvIGhpZ2hsaWdo
dENvbmZpZyA9IG1ha2VVbmlxdWU8SGlnaGxpZ2h0Q29uZmlnPigpOwogICAgICAgICBoaWdobGln
aHRDb25maWctPnNob3dJbmZvID0gdHJ1ZTsgLy8gQWx3YXlzIHNob3cgdG9vbHRpcHMgZm9yIGZy
YW1lcy4KLSAgICAgICAgaGlnaGxpZ2h0Q29uZmlnLT5jb250ZW50ID0gcGFyc2VDb2xvcihjb2xv
cik7Ci0gICAgICAgIGhpZ2hsaWdodENvbmZpZy0+Y29udGVudE91dGxpbmUgPSBwYXJzZUNvbG9y
KG91dGxpbmVDb2xvcik7CisgICAgICAgIGhpZ2hsaWdodENvbmZpZy0+Y29udGVudCA9IHBhcnNl
Q29sb3IoV1RGTW92ZShjb2xvcikpOworICAgICAgICBoaWdobGlnaHRDb25maWctPmNvbnRlbnRP
dXRsaW5lID0gcGFyc2VDb2xvcihXVEZNb3ZlKG91dGxpbmVDb2xvcikpOwogICAgICAgICBtX292
ZXJsYXktPmhpZ2hsaWdodE5vZGUoZnJhbWUtPm93bmVyRWxlbWVudCgpLCAqaGlnaGxpZ2h0Q29u
ZmlnKTsKICAgICB9CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckRPTUFn
ZW50OjpoaWRlSGlnaGxpZ2h0KEVycm9yU3RyaW5nJikKK1Byb3RvY29sOjpFcnJvclN0cmluZ09y
PHZvaWQ+IEluc3BlY3RvckRPTUFnZW50OjpoaWRlSGlnaGxpZ2h0KCkKIHsKICAgICBtX292ZXJs
YXktPmhpZGVIaWdobGlnaHQoKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVj
dG9yRE9NQWdlbnQ6Om1vdmVUbyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQs
IGludCB0YXJnZXRFbGVtZW50SWQsIGNvbnN0IGludCogYW5jaG9yTm9kZUlkLCBpbnQqIG5ld05v
ZGVJZCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPFByb3RvY29sOjpET006Ok5vZGVJZD4gSW5z
cGVjdG9yRE9NQWdlbnQ6Om1vdmVUbyhQcm90b2NvbDo6RE9NOjpOb2RlSWQgbm9kZUlkLCBQcm90
b2NvbDo6RE9NOjpOb2RlSWQgdGFyZ2V0Tm9kZUlkLCBPcHRpb25hbDxQcm90b2NvbDo6RE9NOjpO
b2RlSWQ+JiYgaW5zZXJ0QmVmb3JlTm9kZUlkKQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmlu
ZyBlcnJvclN0cmluZzsKKwogICAgIE5vZGUqIG5vZGUgPSBhc3NlcnRFZGl0YWJsZU5vZGUoZXJy
b3JTdHJpbmcsIG5vZGVJZCk7CiAgICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm47CisgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKLSAgICBFbGVtZW50KiB0
YXJnZXRFbGVtZW50ID0gYXNzZXJ0RWRpdGFibGVFbGVtZW50KGVycm9yU3RyaW5nLCB0YXJnZXRF
bGVtZW50SWQpOworICAgIEVsZW1lbnQqIHRhcmdldEVsZW1lbnQgPSBhc3NlcnRFZGl0YWJsZUVs
ZW1lbnQoZXJyb3JTdHJpbmcsIHRhcmdldE5vZGVJZCk7CiAgICAgaWYgKCF0YXJnZXRFbGVtZW50
KQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0
cmluZyk7CiAKLSAgICBOb2RlKiBhbmNob3JOb2RlID0gMDsKLSAgICBpZiAoYW5jaG9yTm9kZUlk
ICYmICphbmNob3JOb2RlSWQpIHsKLSAgICAgICAgYW5jaG9yTm9kZSA9IGFzc2VydEVkaXRhYmxl
Tm9kZShlcnJvclN0cmluZywgKmFuY2hvck5vZGVJZCk7CisgICAgTm9kZSogYW5jaG9yTm9kZSA9
IG51bGxwdHI7CisgICAgaWYgKGluc2VydEJlZm9yZU5vZGVJZCAmJiAqaW5zZXJ0QmVmb3JlTm9k
ZUlkKSB7CisgICAgICAgIGFuY2hvck5vZGUgPSBhc3NlcnRFZGl0YWJsZU5vZGUoZXJyb3JTdHJp
bmcsICppbnNlcnRCZWZvcmVOb2RlSWQpOwogICAgICAgICBpZiAoIWFuY2hvck5vZGUpCi0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmIChhbmNob3JOb2RlLT5wYXJlbnROb2RlKCkgIT0g
dGFyZ2V0RWxlbWVudCkgewotICAgICAgICAgICAgZXJyb3JTdHJpbmcgPSAiR2l2ZW4gYW5jaG9y
Tm9kZUlkIG11c3QgYmUgYSBjaGlsZCBvZiBnaXZlbiB0YXJnZXRFbGVtZW50SWQiX3M7Ci0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBl
Y3RlZChlcnJvclN0cmluZyk7CisgICAgICAgIGlmIChhbmNob3JOb2RlLT5wYXJlbnROb2RlKCkg
IT0gdGFyZ2V0RWxlbWVudCkKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiR2l2
ZW4gaW5zZXJ0QmVmb3JlTm9kZUlkIG11c3QgYmUgYSBjaGlsZCBvZiBnaXZlbiB0YXJnZXROb2Rl
SWQiX3MpOwogICAgIH0KIAogICAgIGlmICghbV9kb21FZGl0b3ItPmluc2VydEJlZm9yZSgqdGFy
Z2V0RWxlbWVudCwgKm5vZGUsIGFuY2hvck5vZGUsIGVycm9yU3RyaW5nKSkKLSAgICAgICAgcmV0
dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCi0gICAg
Km5ld05vZGVJZCA9IHB1c2hOb2RlUGF0aFRvRnJvbnRlbmQoZXJyb3JTdHJpbmcsIG5vZGUpOwor
ICAgIHJldHVybiBwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKGVycm9yU3RyaW5nLCBub2RlKTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6dW5kbyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcp
CitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JET01BZ2VudDo6dW5kbygp
CiB7CiAgICAgYXV0byByZXN1bHQgPSBtX2hpc3RvcnktPnVuZG8oKTsKICAgICBpZiAocmVzdWx0
Lmhhc0V4Y2VwdGlvbigpKQotICAgICAgICBlcnJvclN0cmluZyA9IHRvRXJyb3JTdHJpbmcocmVz
dWx0LnJlbGVhc2VFeGNlcHRpb24oKSk7CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChJ
bnNwZWN0b3JET01BZ2VudDo6dG9FcnJvclN0cmluZyhyZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigp
KSk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpyZWRv
KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+
IEluc3BlY3RvckRPTUFnZW50OjpyZWRvKCkKIHsKICAgICBhdXRvIHJlc3VsdCA9IG1faGlzdG9y
eS0+cmVkbygpOwogICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpCi0gICAgICAgIGVycm9y
U3RyaW5nID0gdG9FcnJvclN0cmluZyhyZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpKTsKKyAgICAg
ICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEluc3BlY3RvckRPTUFnZW50Ojp0b0Vycm9yU3RyaW5n
KHJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCkpKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZv
aWQgSW5zcGVjdG9yRE9NQWdlbnQ6Om1hcmtVbmRvYWJsZVN0YXRlKEVycm9yU3RyaW5nJikKK1By
b3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRPTUFnZW50OjptYXJrVW5kb2Fi
bGVTdGF0ZSgpCiB7CiAgICAgbV9oaXN0b3J5LT5tYXJrVW5kb2FibGVTdGF0ZSgpOworCisgICAg
cmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Zm9jdXMoRXJyb3JTdHJp
bmcmIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9p
ZD4gSW5zcGVjdG9yRE9NQWdlbnQ6OmZvY3VzKFByb3RvY29sOjpET006Ok5vZGVJZCBub2RlSWQp
CiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAgICAgRWxlbWVu
dCogZWxlbWVudCA9IGFzc2VydEVsZW1lbnQoZXJyb3JTdHJpbmcsIG5vZGVJZCk7CiAgICAgaWYg
KCFlbGVtZW50KQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKCFlbGVtZW50LT5pc0ZvY3VzYWJs
ZSgpKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIkVsZW1lbnQgZm9yIGdpdmVuIG5vZGVJZCBp
cyBub3QgZm9jdXNhYmxlIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgICAgICByZXR1
cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOworICAgIGlmICghZWxlbWVudC0+aXNGb2N1
c2FibGUoKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJFbGVtZW50IGZvciBnaXZl
biBub2RlSWQgaXMgbm90IGZvY3VzYWJsZSJfcyk7CisKICAgICBlbGVtZW50LT5mb2N1cygpOwor
CisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c2V0SW5zcGVj
dGVkTm9kZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQpCitQcm90b2NvbDo6
RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JET01BZ2VudDo6c2V0SW5zcGVjdGVkTm9kZShQ
cm90b2NvbDo6RE9NOjpOb2RlSWQgbm9kZUlkKQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmlu
ZyBlcnJvclN0cmluZzsKKwogICAgIE5vZGUqIG5vZGUgPSBhc3NlcnROb2RlKGVycm9yU3RyaW5n
LCBub2RlSWQpOwogICAgIGlmICghbm9kZSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1
cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCi0gICAgaWYgKG5vZGUtPmlzSW5Vc2Vy
QWdlbnRTaGFkb3dUcmVlKCkgJiYgIW1fYWxsb3dFZGl0aW5nVXNlckFnZW50U2hhZG93VHJlZXMp
IHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiTm9kZSBmb3IgZ2l2ZW4gbm9kZUlkIGlzIGluIGEg
c2hhZG93IHRyZWUiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKG5vZGUtPmlz
SW5Vc2VyQWdlbnRTaGFkb3dUcmVlKCkgJiYgIW1fYWxsb3dFZGl0aW5nVXNlckFnZW50U2hhZG93
VHJlZXMpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTm9kZSBmb3IgZ2l2ZW4gbm9k
ZUlkIGlzIGluIGEgc2hhZG93IHRyZWUiX3MpOwogCiAgICAgbV9pbnNwZWN0ZWROb2RlID0gbm9k
ZTsKIApAQCAtMTQ5OCwzOCArMTU1Niw0OSBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpzZXRJ
bnNwZWN0ZWROb2RlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJZCkKICAgICAg
ICAgY29tbWFuZExpbmVBUElIb3N0LT5hZGRJbnNwZWN0ZWRPYmplY3QobWFrZVVuaXF1ZTxJbnNw
ZWN0YWJsZU5vZGU+KG5vZGUpKTsKIAogICAgIG1fc3VwcHJlc3NFdmVudExpc3RlbmVyQ2hhbmdl
ZEV2ZW50ID0gZmFsc2U7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckRP
TUFnZW50OjpyZXNvbHZlTm9kZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQs
IGNvbnN0IFN0cmluZyogb2JqZWN0R3JvdXAsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpS
dW50aW1lOjpSZW1vdGVPYmplY3Q+JiByZXN1bHQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxS
ZWY8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4+IEluc3BlY3RvckRPTUFnZW50Ojpy
ZXNvbHZlTm9kZShQcm90b2NvbDo6RE9NOjpOb2RlSWQgbm9kZUlkLCBjb25zdCBTdHJpbmcmIG9i
amVjdEdyb3VwKQogewotICAgIFN0cmluZyBvYmplY3RHcm91cE5hbWUgPSBvYmplY3RHcm91cCA/
ICpvYmplY3RHcm91cCA6IGVtcHR5U3RyaW5nKCk7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5n
IGVycm9yU3RyaW5nOworCiAgICAgTm9kZSogbm9kZSA9IGFzc2VydE5vZGUoZXJyb3JTdHJpbmcs
IG5vZGVJZCk7CiAgICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm47Ci0gICAgUmVmUHRyPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4gb2JqZWN0ID0gcmVzb2x2
ZU5vZGUobm9kZSwgb2JqZWN0R3JvdXBOYW1lKTsKLSAgICBpZiAoIW9iamVjdCkgewotICAgICAg
ICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIGluamVjdGVkIHNjcmlwdCBmb3IgZ2l2ZW4gbm9kZUlk
Il9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIHJlc3VsdCA9IG9iamVjdDsKKyAgICAg
ICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKKworICAgIFJlZlB0cjxQcm90
b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiBvYmplY3QgPSByZXNvbHZlTm9kZShub2RlLCBv
YmplY3RHcm91cCk7CisgICAgaWYgKCFvYmplY3QpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBl
Y3RlZCgiTWlzc2luZyBpbmplY3RlZCBzY3JpcHQgZm9yIGdpdmVuIG5vZGVJZCJfcyk7CisKKyAg
ICByZXR1cm4gb2JqZWN0LnJlbGVhc2VOb25OdWxsKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9N
QWdlbnQ6OmdldEF0dHJpYnV0ZXMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlk
LCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiYgcmVzdWx0KQorUHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8UmVmPEpTT046OkFycmF5T2Y8U3RyaW5nPj4+IEluc3BlY3RvckRPTUFnZW50Ojpn
ZXRBdHRyaWJ1dGVzKFByb3RvY29sOjpET006Ok5vZGVJZCBub2RlSWQpCiB7CisgICAgUHJvdG9j
b2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAgICAgRWxlbWVudCogZWxlbWVudCA9IGFz
c2VydEVsZW1lbnQoZXJyb3JTdHJpbmcsIG5vZGVJZCk7CiAgICAgaWYgKCFlbGVtZW50KQotICAg
ICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7
CiAKLSAgICByZXN1bHQgPSBidWlsZEFycmF5Rm9yRWxlbWVudEF0dHJpYnV0ZXMoZWxlbWVudCk7
CisgICAgcmV0dXJuIGJ1aWxkQXJyYXlGb3JFbGVtZW50QXR0cmlidXRlcyhlbGVtZW50KTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6cmVxdWVzdE5vZGUoRXJyb3JTdHJpbmcmIGVycm9y
U3RyaW5nLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBpbnQqIG5vZGVJZCkKK1Byb3RvY29sOjpF
cnJvclN0cmluZ09yPFByb3RvY29sOjpET006Ok5vZGVJZD4gSW5zcGVjdG9yRE9NQWdlbnQ6OnJl
cXVlc3ROb2RlKGNvbnN0IFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3RJZCYgb2JqZWN0
SWQpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAgICAgTm9k
ZSogbm9kZSA9IG5vZGVGb3JPYmplY3RJZChvYmplY3RJZCk7Ci0gICAgaWYgKG5vZGUpCi0gICAg
ICAgICpub2RlSWQgPSBwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKGVycm9yU3RyaW5nLCBub2RlKTsK
LSAgICBlbHNlCi0gICAgICAgICpub2RlSWQgPSAwOworICAgIGlmICghbm9kZSkKKyAgICAgICAg
cmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJNaXNzaW5nIG5vZGUgZm9yIGdpdmVuIG9iamVjdElkIl9z
KTsKKworICAgIGF1dG8gbm9kZUlkID0gcHVzaE5vZGVQYXRoVG9Gcm9udGVuZChlcnJvclN0cmlu
Zywgbm9kZSk7CisgICAgaWYgKCFub2RlSWQpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3Rl
ZChlcnJvclN0cmluZyk7CisKKyAgICByZXR1cm4gbm9kZUlkOwogfQogCiBTdHJpbmcgSW5zcGVj
dG9yRE9NQWdlbnQ6OmRvY3VtZW50VVJMU3RyaW5nKERvY3VtZW50KiBkb2N1bWVudCkKQEAgLTE1
NDQsNDQgKzE2MTMsNDQgQEAgc3RhdGljIFN0cmluZyBkb2N1bWVudEJhc2VVUkxTdHJpbmcoRG9j
dW1lbnQqIGRvY3VtZW50KQogICAgIHJldHVybiBkb2N1bWVudC0+Y29tcGxldGVVUkwoZW1wdHlT
dHJpbmcoKSkuc3RyaW5nKCk7CiB9CiAKLXN0YXRpYyBib29sIHBzZXVkb0VsZW1lbnRUeXBlKFBz
ZXVkb0lkIHBzZXVkb0lkLCBJbnNwZWN0b3I6OlByb3RvY29sOjpET006OlBzZXVkb1R5cGUqIHR5
cGUpCitzdGF0aWMgYm9vbCBwc2V1ZG9FbGVtZW50VHlwZShQc2V1ZG9JZCBwc2V1ZG9JZCwgUHJv
dG9jb2w6OkRPTTo6UHNldWRvVHlwZSogdHlwZSkKIHsKICAgICBzd2l0Y2ggKHBzZXVkb0lkKSB7
CiAgICAgY2FzZSBQc2V1ZG9JZDo6QmVmb3JlOgotICAgICAgICAqdHlwZSA9IEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRPTTo6UHNldWRvVHlwZTo6QmVmb3JlOworICAgICAgICAqdHlwZSA9IFByb3Rv
Y29sOjpET006OlBzZXVkb1R5cGU6OkJlZm9yZTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
Y2FzZSBQc2V1ZG9JZDo6QWZ0ZXI6Ci0gICAgICAgICp0eXBlID0gSW5zcGVjdG9yOjpQcm90b2Nv
bDo6RE9NOjpQc2V1ZG9UeXBlOjpBZnRlcjsKKyAgICAgICAgKnR5cGUgPSBQcm90b2NvbDo6RE9N
OjpQc2V1ZG9UeXBlOjpBZnRlcjsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgZGVmYXVsdDoK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIH0KIAotc3RhdGljIEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRPTTo6U2hhZG93Um9vdFR5cGUgc2hhZG93Um9vdFR5cGUoU2hhZG93Um9vdE1vZGUg
bW9kZSkKK3N0YXRpYyBQcm90b2NvbDo6RE9NOjpTaGFkb3dSb290VHlwZSBzaGFkb3dSb290VHlw
ZShTaGFkb3dSb290TW9kZSBtb2RlKQogewogICAgIHN3aXRjaCAobW9kZSkgewogICAgIGNhc2Ug
U2hhZG93Um9vdE1vZGU6OlVzZXJBZ2VudDoKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRPTTo6U2hhZG93Um9vdFR5cGU6OlVzZXJBZ2VudDsKKyAgICAgICAgcmV0dXJuIFBy
b3RvY29sOjpET006OlNoYWRvd1Jvb3RUeXBlOjpVc2VyQWdlbnQ7CiAgICAgY2FzZSBTaGFkb3dS
b290TW9kZTo6Q2xvc2VkOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9N
OjpTaGFkb3dSb290VHlwZTo6Q2xvc2VkOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OkRPTTo6
U2hhZG93Um9vdFR5cGU6OkNsb3NlZDsKICAgICBjYXNlIFNoYWRvd1Jvb3RNb2RlOjpPcGVuOgot
ICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpTaGFkb3dSb290VHlwZTo6
T3BlbjsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpET006OlNoYWRvd1Jvb3RUeXBlOjpPcGVu
OwogICAgIH0KIAogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBJbnNwZWN0
b3I6OlByb3RvY29sOjpET006OlNoYWRvd1Jvb3RUeXBlOjpVc2VyQWdlbnQ7CisgICAgcmV0dXJu
IFByb3RvY29sOjpET006OlNoYWRvd1Jvb3RUeXBlOjpVc2VyQWdlbnQ7CiB9CiAKLXN0YXRpYyBJ
bnNwZWN0b3I6OlByb3RvY29sOjpET006OkN1c3RvbUVsZW1lbnRTdGF0ZSBjdXN0b21FbGVtZW50
U3RhdGUoY29uc3QgRWxlbWVudCYgZWxlbWVudCkKK3N0YXRpYyBQcm90b2NvbDo6RE9NOjpDdXN0
b21FbGVtZW50U3RhdGUgY3VzdG9tRWxlbWVudFN0YXRlKGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQp
CiB7CiAgICAgaWYgKGVsZW1lbnQuaXNEZWZpbmVkQ3VzdG9tRWxlbWVudCgpKQotICAgICAgICBy
ZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpDdXN0b21FbGVtZW50U3RhdGU6OkN1c3Rv
bTsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpET006OkN1c3RvbUVsZW1lbnRTdGF0ZTo6Q3Vz
dG9tOwogICAgIGlmIChlbGVtZW50LmlzRmFpbGVkQ3VzdG9tRWxlbWVudCgpKQotICAgICAgICBy
ZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpDdXN0b21FbGVtZW50U3RhdGU6OkZhaWxl
ZDsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpET006OkN1c3RvbUVsZW1lbnRTdGF0ZTo6RmFp
bGVkOwogICAgIGlmIChlbGVtZW50LmlzVW5kZWZpbmVkQ3VzdG9tRWxlbWVudCgpIHx8IGVsZW1l
bnQuaXNDdXN0b21FbGVtZW50VXBncmFkZUNhbmRpZGF0ZSgpKQotICAgICAgICByZXR1cm4gSW5z
cGVjdG9yOjpQcm90b2NvbDo6RE9NOjpDdXN0b21FbGVtZW50U3RhdGU6OldhaXRpbmc7Ci0gICAg
cmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Q3VzdG9tRWxlbWVudFN0YXRlOjpCdWls
dGluOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OkRPTTo6Q3VzdG9tRWxlbWVudFN0YXRlOjpX
YWl0aW5nOworICAgIHJldHVybiBQcm90b2NvbDo6RE9NOjpDdXN0b21FbGVtZW50U3RhdGU6OkJ1
aWx0aW47CiB9CiAKIHN0YXRpYyBTdHJpbmcgY29tcHV0ZUNvbnRlbnRTZWN1cml0eVBvbGljeVNI
QTI1Nkhhc2goY29uc3QgRWxlbWVudCYgZWxlbWVudCkKQEAgLTE1OTcsOSArMTY2Niw5IEBAIHN0
YXRpYyBTdHJpbmcgY29tcHV0ZUNvbnRlbnRTZWN1cml0eVBvbGljeVNIQTI1Nkhhc2goY29uc3Qg
RWxlbWVudCYgZWxlbWVudCkKICAgICByZXR1cm4gbWFrZVN0cmluZygic2hhMjU2LSIsIGJhc2U2
NEVuY29kZShkaWdlc3QuZGF0YSgpLCBkaWdlc3Quc2l6ZSgpKSk7CiB9CiAKLVJlZjxJbnNwZWN0
b3I6OlByb3RvY29sOjpET006Ok5vZGU+IEluc3BlY3RvckRPTUFnZW50OjpidWlsZE9iamVjdEZv
ck5vZGUoTm9kZSogbm9kZSwgaW50IGRlcHRoLCBOb2RlVG9JZE1hcCogbm9kZXNNYXApCitSZWY8
UHJvdG9jb2w6OkRPTTo6Tm9kZT4gSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yTm9k
ZShOb2RlKiBub2RlLCBpbnQgZGVwdGgsIE5vZGVUb0lkTWFwKiBub2Rlc01hcCkKIHsKLSAgICBp
bnQgaWQgPSBiaW5kKG5vZGUsIG5vZGVzTWFwKTsKKyAgICBhdXRvIGlkID0gYmluZChub2RlLCBu
b2Rlc01hcCk7CiAgICAgU3RyaW5nIG5vZGVOYW1lOwogICAgIFN0cmluZyBsb2NhbE5hbWU7CiAg
ICAgU3RyaW5nIG5vZGVWYWx1ZTsKQEAgLTE2MzAsNyArMTY5OSw3IEBAIFJlZjxJbnNwZWN0b3I6
OlByb3RvY29sOjpET006Ok5vZGU+IEluc3BlY3RvckRPTUFnZW50OjpidWlsZE9iamVjdEZvck5v
ZGUoTm9kZSoKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgYXV0byB2YWx1ZSA9IEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZTo6Y3JlYXRlKCkKKyAgICBhdXRvIHZhbHVlID0gUHJv
dG9jb2w6OkRPTTo6Tm9kZTo6Y3JlYXRlKCkKICAgICAgICAgLnNldE5vZGVJZChpZCkKICAgICAg
ICAgLnNldE5vZGVUeXBlKHN0YXRpY19jYXN0PGludD4obm9kZS0+bm9kZVR5cGUoKSkpCiAgICAg
ICAgIC5zZXROb2RlTmFtZShub2RlTmFtZSkKQEAgLTE2NDEsNyArMTcxMCw3IEBAIFJlZjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+IEluc3BlY3RvckRPTUFnZW50OjpidWlsZE9iamVj
dEZvck5vZGUoTm9kZSoKICAgICBpZiAobm9kZS0+aXNDb250YWluZXJOb2RlKCkpIHsKICAgICAg
ICAgaW50IG5vZGVDb3VudCA9IGlubmVyQ2hpbGROb2RlQ291bnQobm9kZSk7CiAgICAgICAgIHZh
bHVlLT5zZXRDaGlsZE5vZGVDb3VudChub2RlQ291bnQpOwotICAgICAgICBSZWY8SlNPTjo6QXJy
YXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+PiBjaGlsZHJlbiA9IGJ1aWxkQXJy
YXlGb3JDb250YWluZXJDaGlsZHJlbihub2RlLCBkZXB0aCwgbm9kZXNNYXApOworICAgICAgICBS
ZWY8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6RE9NOjpOb2RlPj4gY2hpbGRyZW4gPSBidWlsZEFy
cmF5Rm9yQ29udGFpbmVyQ2hpbGRyZW4obm9kZSwgZGVwdGgsIG5vZGVzTWFwKTsKICAgICAgICAg
aWYgKGNoaWxkcmVuLT5sZW5ndGgoKSA+IDApCiAgICAgICAgICAgICB2YWx1ZS0+c2V0Q2hpbGRy
ZW4oV1RGTW92ZShjaGlsZHJlbikpOwogICAgIH0KQEAgLTE2NjEsNyArMTczMCw3IEBAIFJlZjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+IEluc3BlY3RvckRPTUFnZW50OjpidWlsZE9i
amVjdEZvck5vZGUoTm9kZSoKICAgICAgICAgfQogCiAgICAgICAgIGlmIChTaGFkb3dSb290KiBy
b290ID0gZWxlbWVudC5zaGFkb3dSb290KCkpIHsKLSAgICAgICAgICAgIGF1dG8gc2hhZG93Um9v
dHMgPSBKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZT46OmNyZWF0
ZSgpOworICAgICAgICAgICAgYXV0byBzaGFkb3dSb290cyA9IEpTT046OkFycmF5T2Y8UHJvdG9j
b2w6OkRPTTo6Tm9kZT46OmNyZWF0ZSgpOwogICAgICAgICAgICAgc2hhZG93Um9vdHMtPmFkZEl0
ZW0oYnVpbGRPYmplY3RGb3JOb2RlKHJvb3QsIDAsIG5vZGVzTWFwKSk7CiAgICAgICAgICAgICB2
YWx1ZS0+c2V0U2hhZG93Um9vdHMoV1RGTW92ZShzaGFkb3dSb290cykpOwogICAgICAgICB9CkBA
IC0xNjczLDE2ICsxNzQyLDE2IEBAIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+
IEluc3BlY3RvckRPTUFnZW50OjpidWlsZE9iamVjdEZvck5vZGUoTm9kZSoKICAgICAgICAgICAg
IHZhbHVlLT5zZXRDb250ZW50U2VjdXJpdHlQb2xpY3lIYXNoKGNvbXB1dGVDb250ZW50U2VjdXJp
dHlQb2xpY3lTSEEyNTZIYXNoKGVsZW1lbnQpKTsKIAogICAgICAgICBhdXRvIHN0YXRlID0gY3Vz
dG9tRWxlbWVudFN0YXRlKGVsZW1lbnQpOwotICAgICAgICBpZiAoc3RhdGUgIT0gSW5zcGVjdG9y
OjpQcm90b2NvbDo6RE9NOjpDdXN0b21FbGVtZW50U3RhdGU6OkJ1aWx0aW4pCisgICAgICAgIGlm
IChzdGF0ZSAhPSBQcm90b2NvbDo6RE9NOjpDdXN0b21FbGVtZW50U3RhdGU6OkJ1aWx0aW4pCiAg
ICAgICAgICAgICB2YWx1ZS0+c2V0Q3VzdG9tRWxlbWVudFN0YXRlKHN0YXRlKTsKIAogICAgICAg
ICBpZiAoZWxlbWVudC5wc2V1ZG9JZCgpICE9IFBzZXVkb0lkOjpOb25lKSB7Ci0gICAgICAgICAg
ICBJbnNwZWN0b3I6OlByb3RvY29sOjpET006OlBzZXVkb1R5cGUgcHNldWRvVHlwZTsKKyAgICAg
ICAgICAgIFByb3RvY29sOjpET006OlBzZXVkb1R5cGUgcHNldWRvVHlwZTsKICAgICAgICAgICAg
IGlmIChwc2V1ZG9FbGVtZW50VHlwZShlbGVtZW50LnBzZXVkb0lkKCksICZwc2V1ZG9UeXBlKSkK
ICAgICAgICAgICAgICAgICB2YWx1ZS0+c2V0UHNldWRvVHlwZShwc2V1ZG9UeXBlKTsKICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgIGlmIChhdXRvIHBzZXVkb0VsZW1lbnRzID0gYnVpbGRB
cnJheUZvclBzZXVkb0VsZW1lbnRzKGVsZW1lbnQsIG5vZGVzTWFwKSkKLSAgICAgICAgICAgICAg
ICB2YWx1ZS0+c2V0UHNldWRvRWxlbWVudHMoV1RGTW92ZShwc2V1ZG9FbGVtZW50cykpOworICAg
ICAgICAgICAgICAgIHZhbHVlLT5zZXRQc2V1ZG9FbGVtZW50cyhwc2V1ZG9FbGVtZW50cy5yZWxl
YXNlTm9uTnVsbCgpKTsKICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAoaXM8RG9jdW1lbnQ+KCpu
b2RlKSkgewogICAgICAgICBEb2N1bWVudCYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4o
Km5vZGUpOwpAQCAtMTcyMSw5ICsxNzkwLDkgQEAgUmVmPEpTT046OkFycmF5T2Y8U3RyaW5nPj4g
SW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkQXJyYXlGb3JFbGVtZW50QXR0cmlidXRlcyhFbGUKICAg
ICByZXR1cm4gYXR0cmlidXRlc1ZhbHVlOwogfQogCi1SZWY8SlNPTjo6QXJyYXlPZjxJbnNwZWN0
b3I6OlByb3RvY29sOjpET006Ok5vZGU+PiBJbnNwZWN0b3JET01BZ2VudDo6YnVpbGRBcnJheUZv
ckNvbnRhaW5lckNoaWxkcmVuKE5vZGUqIGNvbnRhaW5lciwgaW50IGRlcHRoLCBOb2RlVG9JZE1h
cCogbm9kZXNNYXApCitSZWY8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6RE9NOjpOb2RlPj4gSW5z
cGVjdG9yRE9NQWdlbnQ6OmJ1aWxkQXJyYXlGb3JDb250YWluZXJDaGlsZHJlbihOb2RlKiBjb250
YWluZXIsIGludCBkZXB0aCwgTm9kZVRvSWRNYXAqIG5vZGVzTWFwKQogewotICAgIGF1dG8gY2hp
bGRyZW4gPSBKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZT46OmNy
ZWF0ZSgpOworICAgIGF1dG8gY2hpbGRyZW4gPSBKU09OOjpBcnJheU9mPFByb3RvY29sOjpET006
Ok5vZGU+OjpjcmVhdGUoKTsKICAgICBpZiAoZGVwdGggPT0gMCkgewogICAgICAgICAvLyBTcGVj
aWFsLWNhc2UgdGhlIG9ubHkgdGV4dCBjaGlsZCAtIHByZXRlbmQgdGhhdCBjb250YWluZXIncyBj
aGlsZHJlbiBoYXZlIGJlZW4gcmVxdWVzdGVkLgogICAgICAgICBOb2RlKiBmaXJzdENoaWxkID0g
Y29udGFpbmVyLT5maXJzdENoaWxkKCk7CkBAIC0xNzQ1LDE0ICsxODE0LDE0IEBAIFJlZjxKU09O
OjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZT4+IEluc3BlY3RvckRPTUFn
ZW50OjpidWlsZEFycmF5CiAgICAgcmV0dXJuIGNoaWxkcmVuOwogfQogCi1SZWZQdHI8SlNPTjo6
QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+PiBJbnNwZWN0b3JET01BZ2Vu
dDo6YnVpbGRBcnJheUZvclBzZXVkb0VsZW1lbnRzKGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQsIE5v
ZGVUb0lkTWFwKiBub2Rlc01hcCkKK1JlZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpET006
Ok5vZGU+PiBJbnNwZWN0b3JET01BZ2VudDo6YnVpbGRBcnJheUZvclBzZXVkb0VsZW1lbnRzKGNv
bnN0IEVsZW1lbnQmIGVsZW1lbnQsIE5vZGVUb0lkTWFwKiBub2Rlc01hcCkKIHsKICAgICBQc2V1
ZG9FbGVtZW50KiBiZWZvcmVFbGVtZW50ID0gZWxlbWVudC5iZWZvcmVQc2V1ZG9FbGVtZW50KCk7
CiAgICAgUHNldWRvRWxlbWVudCogYWZ0ZXJFbGVtZW50ID0gZWxlbWVudC5hZnRlclBzZXVkb0Vs
ZW1lbnQoKTsKICAgICBpZiAoIWJlZm9yZUVsZW1lbnQgJiYgIWFmdGVyRWxlbWVudCkKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBhdXRvIHBzZXVkb0VsZW1lbnRzID0gSlNPTjo6QXJy
YXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+OjpjcmVhdGUoKTsKKyAgICBhdXRv
IHBzZXVkb0VsZW1lbnRzID0gSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6RE9NOjpOb2RlPjo6Y3Jl
YXRlKCk7CiAgICAgaWYgKGJlZm9yZUVsZW1lbnQpCiAgICAgICAgIHBzZXVkb0VsZW1lbnRzLT5h
ZGRJdGVtKGJ1aWxkT2JqZWN0Rm9yTm9kZShiZWZvcmVFbGVtZW50LCAwLCBub2Rlc01hcCkpOwog
ICAgIGlmIChhZnRlckVsZW1lbnQpCkBAIC0xNzYwLDcgKzE4MjksNyBAQCBSZWZQdHI8SlNPTjo6
QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+PiBJbnNwZWN0b3JET01BZ2Vu
dDo6YnVpbGRBcgogICAgIHJldHVybiBwc2V1ZG9FbGVtZW50czsKIH0KIAotUmVmPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRPTTo6RXZlbnRMaXN0ZW5lcj4gSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxk
T2JqZWN0Rm9yRXZlbnRMaXN0ZW5lcihjb25zdCBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lciYgcmVn
aXN0ZXJlZEV2ZW50TGlzdGVuZXIsIGludCBpZGVudGlmaWVyLCBFdmVudFRhcmdldCYgZXZlbnRU
YXJnZXQsIGNvbnN0IEF0b21TdHJpbmcmIGV2ZW50VHlwZSwgYm9vbCBkaXNhYmxlZCwgY29uc3Qg
UmVmUHRyPEpTQzo6QnJlYWtwb2ludD4mIGJyZWFrcG9pbnQpCitSZWY8UHJvdG9jb2w6OkRPTTo6
RXZlbnRMaXN0ZW5lcj4gSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yRXZlbnRMaXN0
ZW5lcihjb25zdCBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lciYgcmVnaXN0ZXJlZEV2ZW50TGlzdGVu
ZXIsIFByb3RvY29sOjpET006OkV2ZW50TGlzdGVuZXJJZCBpZGVudGlmaWVyLCBFdmVudFRhcmdl
dCYgZXZlbnRUYXJnZXQsIGNvbnN0IEF0b21TdHJpbmcmIGV2ZW50VHlwZSwgYm9vbCBkaXNhYmxl
ZCwgY29uc3QgUmVmUHRyPEpTQzo6QnJlYWtwb2ludD4mIGJyZWFrcG9pbnQpCiB7CiAgICAgUmVm
PEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIgPSByZWdpc3RlcmVkRXZlbnRMaXN0ZW5lci5j
YWxsYmFjaygpOwogCkBAIC0xODIyLDcgKzE4OTEsNyBAQCBSZWY8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6RE9NOjpFdmVudExpc3RlbmVyPiBJbnNwZWN0b3JET01BZ2VudDo6YnVpbGRPYmplY3RGb3JF
dgogICAgICAgICB9CiAgICAgfQogCi0gICAgYXV0byB2YWx1ZSA9IEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRPTTo6RXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKCkKKyAgICBhdXRvIHZhbHVlID0gUHJvdG9j
b2w6OkRPTTo6RXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKCkKICAgICAgICAgLnNldEV2ZW50TGlzdGVu
ZXJJZChpZGVudGlmaWVyKQogICAgICAgICAuc2V0VHlwZShldmVudFR5cGUpCiAgICAgICAgIC5z
ZXRVc2VDYXB0dXJlKHJlZ2lzdGVyZWRFdmVudExpc3RlbmVyLnVzZUNhcHR1cmUoKSkKQEAgLTE4
MzMsNyArMTkwMiw3IEBAIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkV2ZW50TGlzdGVu
ZXI+IEluc3BlY3RvckRPTUFnZW50OjpidWlsZE9iamVjdEZvckV2CiAgICAgZWxzZSBpZiAoaXM8
RE9NV2luZG93PihldmVudFRhcmdldCkpCiAgICAgICAgIHZhbHVlLT5zZXRPbldpbmRvdyh0cnVl
KTsKICAgICBpZiAoIXNjcmlwdElELmlzTnVsbCgpKSB7Ci0gICAgICAgIGF1dG8gbG9jYXRpb24g
PSBJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6TG9jYXRpb246OmNyZWF0ZSgpCisgICAg
ICAgIGF1dG8gbG9jYXRpb24gPSBQcm90b2NvbDo6RGVidWdnZXI6OkxvY2F0aW9uOjpjcmVhdGUo
KQogICAgICAgICAgICAgLnNldFNjcmlwdElkKHNjcmlwdElEKQogICAgICAgICAgICAgLnNldExp
bmVOdW1iZXIobGluZU51bWJlcikKICAgICAgICAgICAgIC5yZWxlYXNlKCk7CkBAIC0xODUzLDcg
KzE5MjIsNyBAQCBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpFdmVudExpc3RlbmVyPiBJ
bnNwZWN0b3JET01BZ2VudDo6YnVpbGRPYmplY3RGb3JFdgogICAgIHJldHVybiB2YWx1ZTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6cHJvY2Vzc0FjY2Vzc2liaWxpdHlDaGlsZHJlbihB
WENvcmVPYmplY3QmIGF4T2JqZWN0LCBKU09OOjpBcnJheU9mPGludD4mIGNoaWxkTm9kZUlkcykK
K3ZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnByb2Nlc3NBY2Nlc3NpYmlsaXR5Q2hpbGRyZW4oQVhD
b3JlT2JqZWN0JiBheE9iamVjdCwgSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6RE9NOjpOb2RlSWQ+
JiBjaGlsZE5vZGVJZHMpCiB7CiAgICAgY29uc3QgYXV0byYgY2hpbGRyZW4gPSBheE9iamVjdC5j
aGlsZHJlbigpOwogICAgIGlmICghY2hpbGRyZW4uc2l6ZSgpKQpAQCAtMTg2Nyw0MyArMTkzNiwz
OSBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50Ojpwcm9jZXNzQWNjZXNzaWJpbGl0eUNoaWxkcmVu
KEFYQ29yZU9iamVjdCYgYXhPYmplY3QsIEpTTwogICAgIH0KIH0KICAgICAKLVJlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzPiBJbnNwZWN0b3JE
T01BZ2VudDo6YnVpbGRPYmplY3RGb3JBY2Nlc3NpYmlsaXR5UHJvcGVydGllcyhOb2RlKiBub2Rl
KQorUmVmPFByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzPiBJbnNwZWN0b3JE
T01BZ2VudDo6YnVpbGRPYmplY3RGb3JBY2Nlc3NpYmlsaXR5UHJvcGVydGllcyhOb2RlJiBub2Rl
KQogewotICAgIEFTU0VSVChub2RlKTsKLSAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJldHVybiBu
dWxscHRyOwotCiAgICAgaWYgKCFXZWJDb3JlOjpBWE9iamVjdENhY2hlOjphY2Nlc3NpYmlsaXR5
RW5hYmxlZCgpKQogICAgICAgICBXZWJDb3JlOjpBWE9iamVjdENhY2hlOjplbmFibGVBY2Nlc3Np
YmlsaXR5KCk7CiAKICAgICBOb2RlKiBhY3RpdmVEZXNjZW5kYW50Tm9kZSA9IG51bGxwdHI7CiAg
ICAgYm9vbCBidXN5ID0gZmFsc2U7Ci0gICAgYXV0byBjaGVja2VkID0gSW5zcGVjdG9yOjpQcm90
b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6Q2hlY2tlZDo6RmFsc2U7Ci0gICAg
UmVmUHRyPEpTT046OkFycmF5T2Y8aW50Pj4gY2hpbGROb2RlSWRzOwotICAgIFJlZlB0cjxKU09O
OjpBcnJheU9mPGludD4+IGNvbnRyb2xsZWROb2RlSWRzOwotICAgIGF1dG8gY3VycmVudFN0YXRl
ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6Q3Vy
cmVudDo6RmFsc2U7CisgICAgYXV0byBjaGVja2VkID0gUHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJp
bGl0eVByb3BlcnRpZXM6OkNoZWNrZWQ6OkZhbHNlOworICAgIFJlZlB0cjxKU09OOjpBcnJheU9m
PFByb3RvY29sOjpET006Ok5vZGVJZD4+IGNoaWxkTm9kZUlkczsKKyAgICBSZWZQdHI8SlNPTjo6
QXJyYXlPZjxQcm90b2NvbDo6RE9NOjpOb2RlSWQ+PiBjb250cm9sbGVkTm9kZUlkczsKKyAgICBh
dXRvIGN1cnJlbnRTdGF0ZSA9IFByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVz
OjpDdXJyZW50OjpGYWxzZTsKICAgICBib29sIGV4aXN0cyA9IGZhbHNlOwogICAgIGJvb2wgZXhw
YW5kZWQgPSBmYWxzZTsKICAgICBib29sIGRpc2FibGVkID0gZmFsc2U7Ci0gICAgUmVmUHRyPEpT
T046OkFycmF5T2Y8aW50Pj4gZmxvd2VkTm9kZUlkczsKKyAgICBSZWZQdHI8SlNPTjo6QXJyYXlP
ZjxQcm90b2NvbDo6RE9NOjpOb2RlSWQ+PiBmbG93ZWROb2RlSWRzOwogICAgIGJvb2wgZm9jdXNl
ZCA9IGZhbHNlOwogICAgIGJvb2wgaWdub3JlZCA9IHRydWU7CiAgICAgYm9vbCBpZ25vcmVkQnlE
ZWZhdWx0ID0gZmFsc2U7Ci0gICAgYXV0byBpbnZhbGlkID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6
RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6SW52YWxpZDo6RmFsc2U7CisgICAgYXV0byBp
bnZhbGlkID0gUHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6OkludmFsaWQ6
OkZhbHNlOwogICAgIGJvb2wgaGlkZGVuID0gZmFsc2U7CiAgICAgU3RyaW5nIGxhYmVsOwogICAg
IGJvb2wgbGl2ZVJlZ2lvbkF0b21pYyA9IGZhbHNlOwogICAgIFJlZlB0cjxKU09OOjpBcnJheU9m
PFN0cmluZz4+IGxpdmVSZWdpb25SZWxldmFudDsKLSAgICBhdXRvIGxpdmVSZWdpb25TdGF0dXMg
PSBJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpMaXZl
UmVnaW9uU3RhdHVzOjpPZmY7CisgICAgYXV0byBsaXZlUmVnaW9uU3RhdHVzID0gUHJvdG9jb2w6
OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6OkxpdmVSZWdpb25TdGF0dXM6Ok9mZjsKICAg
ICBOb2RlKiBtb3VzZUV2ZW50Tm9kZSA9IG51bGxwdHI7Ci0gICAgUmVmUHRyPEpTT046OkFycmF5
T2Y8aW50Pj4gb3duZWROb2RlSWRzOworICAgIFJlZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29s
OjpET006Ok5vZGVJZD4+IG93bmVkTm9kZUlkczsKICAgICBOb2RlKiBwYXJlbnROb2RlID0gbnVs
bHB0cjsKICAgICBib29sIHByZXNzZWQgPSBmYWxzZTsKICAgICBib29sIHJlYWRvbmx5ID0gZmFs
c2U7CiAgICAgYm9vbCByZXF1aXJlZCA9IGZhbHNlOwogICAgIFN0cmluZyByb2xlOwogICAgIGJv
b2wgc2VsZWN0ZWQgPSBmYWxzZTsKLSAgICBSZWZQdHI8SlNPTjo6QXJyYXlPZjxpbnQ+PiBzZWxl
Y3RlZENoaWxkTm9kZUlkczsKKyAgICBSZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6RE9N
OjpOb2RlSWQ+PiBzZWxlY3RlZENoaWxkTm9kZUlkczsKICAgICBib29sIHN1cHBvcnRzQ2hlY2tl
ZCA9IGZhbHNlOwogICAgIGJvb2wgc3VwcG9ydHNFeHBhbmRlZCA9IGZhbHNlOwogICAgIGJvb2wg
c3VwcG9ydHNMaXZlUmVnaW9uID0gZmFsc2U7CkBAIC0xOTE1LDggKzE5ODAsOCBAQCBSZWZQdHI8
SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllcz4gSW5zcGVj
dG9yRE9NQWdlbnQ6OmJ1aQogICAgIHVuc2lnbmVkIGhpZXJhcmNoaWNhbExldmVsID0gMDsKICAg
ICB1bnNpZ25lZCBsZXZlbCA9IDA7CiAKLSAgICBpZiAoQVhPYmplY3RDYWNoZSogYXhPYmplY3RD
YWNoZSA9IG5vZGUtPmRvY3VtZW50KCkuYXhPYmplY3RDYWNoZSgpKSB7Ci0gICAgICAgIGlmIChB
WENvcmVPYmplY3QqIGF4T2JqZWN0ID0gYXhPYmplY3RDYWNoZS0+Z2V0T3JDcmVhdGUobm9kZSkp
IHsKKyAgICBpZiAoQVhPYmplY3RDYWNoZSogYXhPYmplY3RDYWNoZSA9IG5vZGUuZG9jdW1lbnQo
KS5heE9iamVjdENhY2hlKCkpIHsKKyAgICAgICAgaWYgKEFYQ29yZU9iamVjdCogYXhPYmplY3Qg
PSBheE9iamVjdENhY2hlLT5nZXRPckNyZWF0ZSgmbm9kZSkpIHsKIAogICAgICAgICAgICAgaWYg
KEFYQ29yZU9iamVjdCogYWN0aXZlRGVzY2VuZGFudCA9IGF4T2JqZWN0LT5hY3RpdmVEZXNjZW5k
YW50KCkpCiAgICAgICAgICAgICAgICAgYWN0aXZlRGVzY2VuZGFudE5vZGUgPSBhY3RpdmVEZXNj
ZW5kYW50LT5ub2RlKCk7CkBAIC0xOTMyLDQ3ICsxOTk3LDQ5IEBAIFJlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzPiBJbnNwZWN0b3JET01BZ2Vu
dDo6YnVpCiAgICAgICAgICAgICBpZiAoc3VwcG9ydHNDaGVja2VkKSB7CiAgICAgICAgICAgICAg
ICAgQWNjZXNzaWJpbGl0eUJ1dHRvblN0YXRlIGNoZWNrVmFsdWUgPSBheE9iamVjdC0+Y2hlY2ti
b3hPclJhZGlvVmFsdWUoKTsgLy8gRWxlbWVudCB1c2luZyBhcmlhLWNoZWNrZWQuCiAgICAgICAg
ICAgICAgICAgaWYgKGNoZWNrVmFsdWUgPT0gQWNjZXNzaWJpbGl0eUJ1dHRvblN0YXRlOjpPbikK
LSAgICAgICAgICAgICAgICAgICAgY2hlY2tlZCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6
QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6OkNoZWNrZWQ6OlRydWU7CisgICAgICAgICAgICAgICAg
ICAgIGNoZWNrZWQgPSBQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6Q2hl
Y2tlZDo6VHJ1ZTsKICAgICAgICAgICAgICAgICBlbHNlIGlmIChjaGVja1ZhbHVlID09IEFjY2Vz
c2liaWxpdHlCdXR0b25TdGF0ZTo6TWl4ZWQpCi0gICAgICAgICAgICAgICAgICAgIGNoZWNrZWQg
PSBJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpDaGVj
a2VkOjpNaXhlZDsKKyAgICAgICAgICAgICAgICAgICAgY2hlY2tlZCA9IFByb3RvY29sOjpET006
OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpDaGVja2VkOjpNaXhlZDsKICAgICAgICAgICAgICAg
ICBlbHNlIGlmIChheE9iamVjdC0+aXNDaGVja2VkKCkpIC8vIE5hdGl2ZSBjaGVja2JveC4KLSAg
ICAgICAgICAgICAgICAgICAgY2hlY2tlZCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6QWNj
ZXNzaWJpbGl0eVByb3BlcnRpZXM6OkNoZWNrZWQ6OlRydWU7CisgICAgICAgICAgICAgICAgICAg
IGNoZWNrZWQgPSBQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6Q2hlY2tl
ZDo6VHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKCFh
eE9iamVjdC0+Y2hpbGRyZW4oKS5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICBjaGlsZE5v
ZGVJZHMgPSBKU09OOjpBcnJheU9mPGludD46OmNyZWF0ZSgpOworICAgICAgICAgICAgICAgIGNo
aWxkTm9kZUlkcyA9IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkRPTTo6Tm9kZUlkPjo6Y3JlYXRl
KCk7CiAgICAgICAgICAgICAgICAgcHJvY2Vzc0FjY2Vzc2liaWxpdHlDaGlsZHJlbigqYXhPYmpl
Y3QsICpjaGlsZE5vZGVJZHMpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAg
ICAgICBWZWN0b3I8RWxlbWVudCo+IGNvbnRyb2xsZWRFbGVtZW50czsKICAgICAgICAgICAgIGF4
T2JqZWN0LT5lbGVtZW50c0Zyb21BdHRyaWJ1dGUoY29udHJvbGxlZEVsZW1lbnRzLCBhcmlhX2Nv
bnRyb2xzQXR0cik7CiAgICAgICAgICAgICBpZiAoY29udHJvbGxlZEVsZW1lbnRzLnNpemUoKSkg
ewotICAgICAgICAgICAgICAgIGNvbnRyb2xsZWROb2RlSWRzID0gSlNPTjo6QXJyYXlPZjxpbnQ+
OjpjcmVhdGUoKTsKLSAgICAgICAgICAgICAgICBmb3IgKEVsZW1lbnQqIGNvbnRyb2xsZWRFbGVt
ZW50IDogY29udHJvbGxlZEVsZW1lbnRzKQotICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVk
Tm9kZUlkcy0+YWRkSXRlbShwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKGNvbnRyb2xsZWRFbGVtZW50
KSk7CisgICAgICAgICAgICAgICAgY29udHJvbGxlZE5vZGVJZHMgPSBKU09OOjpBcnJheU9mPFBy
b3RvY29sOjpET006Ok5vZGVJZD46OmNyZWF0ZSgpOworICAgICAgICAgICAgICAgIGZvciAoRWxl
bWVudCogY29udHJvbGxlZEVsZW1lbnQgOiBjb250cm9sbGVkRWxlbWVudHMpIHsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKGF1dG8gY29udHJvbGxlZEVsZW1lbnRJZCA9IHB1c2hOb2RlUGF0aFRv
RnJvbnRlbmQoY29udHJvbGxlZEVsZW1lbnQpKQorICAgICAgICAgICAgICAgICAgICAgICAgY29u
dHJvbGxlZE5vZGVJZHMtPmFkZEl0ZW0oY29udHJvbGxlZEVsZW1lbnRJZCk7CisgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICBzd2l0Y2gg
KGF4T2JqZWN0LT5jdXJyZW50U3RhdGUoKSkgewogICAgICAgICAgICAgY2FzZSBBY2Nlc3NpYmls
aXR5Q3VycmVudFN0YXRlOjpGYWxzZToKLSAgICAgICAgICAgICAgICBjdXJyZW50U3RhdGUgPSBJ
bnNwZWN0b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpDdXJyZW50
OjpGYWxzZTsKKyAgICAgICAgICAgICAgICBjdXJyZW50U3RhdGUgPSBQcm90b2NvbDo6RE9NOjpB
Y2Nlc3NpYmlsaXR5UHJvcGVydGllczo6Q3VycmVudDo6RmFsc2U7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICBjYXNlIEFjY2Vzc2liaWxpdHlDdXJyZW50U3RhdGU6OlBhZ2U6
Ci0gICAgICAgICAgICAgICAgY3VycmVudFN0YXRlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9N
OjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6Q3VycmVudDo6UGFnZTsKKyAgICAgICAgICAgICAg
ICBjdXJyZW50U3RhdGUgPSBQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6
Q3VycmVudDo6UGFnZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2Ug
QWNjZXNzaWJpbGl0eUN1cnJlbnRTdGF0ZTo6U3RlcDoKLSAgICAgICAgICAgICAgICBjdXJyZW50
U3RhdGUgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVz
OjpDdXJyZW50OjpTdGVwOworICAgICAgICAgICAgICAgIGN1cnJlbnRTdGF0ZSA9IFByb3RvY29s
OjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpDdXJyZW50OjpTdGVwOwogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBBY2Nlc3NpYmlsaXR5Q3VycmVudFN0YXRl
OjpMb2NhdGlvbjoKLSAgICAgICAgICAgICAgICBjdXJyZW50U3RhdGUgPSBJbnNwZWN0b3I6OlBy
b3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpDdXJyZW50OjpMb2NhdGlvbjsK
KyAgICAgICAgICAgICAgICBjdXJyZW50U3RhdGUgPSBQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmls
aXR5UHJvcGVydGllczo6Q3VycmVudDo6TG9jYXRpb247CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICBjYXNlIEFjY2Vzc2liaWxpdHlDdXJyZW50U3RhdGU6OkRhdGU6Ci0gICAg
ICAgICAgICAgICAgY3VycmVudFN0YXRlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nl
c3NpYmlsaXR5UHJvcGVydGllczo6Q3VycmVudDo6RGF0ZTsKKyAgICAgICAgICAgICAgICBjdXJy
ZW50U3RhdGUgPSBQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6Q3VycmVu
dDo6RGF0ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgQWNjZXNz
aWJpbGl0eUN1cnJlbnRTdGF0ZTo6VGltZToKLSAgICAgICAgICAgICAgICBjdXJyZW50U3RhdGUg
PSBJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpDdXJy
ZW50OjpUaW1lOworICAgICAgICAgICAgICAgIGN1cnJlbnRTdGF0ZSA9IFByb3RvY29sOjpET006
OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpDdXJyZW50OjpUaW1lOwogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgY2FzZSBBY2Nlc3NpYmlsaXR5Q3VycmVudFN0YXRlOjpUcnVl
OgotICAgICAgICAgICAgICAgIGN1cnJlbnRTdGF0ZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRP
TTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6OkN1cnJlbnQ6OlRydWU7CisgICAgICAgICAgICAg
ICAgY3VycmVudFN0YXRlID0gUHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6
OkN1cnJlbnQ6OlRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAK
QEAgLTE5ODYsMTIgKzIwNTMsMTQgQEAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6
QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM+IEluc3BlY3RvckRPTUFnZW50OjpidWkKICAgICAgICAg
ICAgIFZlY3RvcjxFbGVtZW50Kj4gZmxvd2VkRWxlbWVudHM7CiAgICAgICAgICAgICBheE9iamVj
dC0+ZWxlbWVudHNGcm9tQXR0cmlidXRlKGZsb3dlZEVsZW1lbnRzLCBhcmlhX2Zsb3d0b0F0dHIp
OwogICAgICAgICAgICAgaWYgKGZsb3dlZEVsZW1lbnRzLnNpemUoKSkgewotICAgICAgICAgICAg
ICAgIGZsb3dlZE5vZGVJZHMgPSBKU09OOjpBcnJheU9mPGludD46OmNyZWF0ZSgpOwotICAgICAg
ICAgICAgICAgIGZvciAoRWxlbWVudCogZmxvd2VkRWxlbWVudCA6IGZsb3dlZEVsZW1lbnRzKQot
ICAgICAgICAgICAgICAgICAgICBmbG93ZWROb2RlSWRzLT5hZGRJdGVtKHB1c2hOb2RlUGF0aFRv
RnJvbnRlbmQoZmxvd2VkRWxlbWVudCkpOworICAgICAgICAgICAgICAgIGZsb3dlZE5vZGVJZHMg
PSBKU09OOjpBcnJheU9mPFByb3RvY29sOjpET006Ok5vZGVJZD46OmNyZWF0ZSgpOworICAgICAg
ICAgICAgICAgIGZvciAoRWxlbWVudCogZmxvd2VkRWxlbWVudCA6IGZsb3dlZEVsZW1lbnRzKSB7
CisgICAgICAgICAgICAgICAgICAgIGlmIChhdXRvIGZsb3dlZEVsZW1lbnRJZCA9IHB1c2hOb2Rl
UGF0aFRvRnJvbnRlbmQoZmxvd2VkRWxlbWVudCkpCisgICAgICAgICAgICAgICAgICAgICAgICBm
bG93ZWROb2RlSWRzLT5hZGRJdGVtKGZsb3dlZEVsZW1lbnRJZCk7CisgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoaXM8RWxlbWVu
dD4oKm5vZGUpKSB7CisgICAgICAgICAgICBpZiAoaXM8RWxlbWVudD4obm9kZSkpIHsKICAgICAg
ICAgICAgICAgICBzdXBwb3J0c0ZvY3VzZWQgPSBheE9iamVjdC0+Y2FuU2V0Rm9jdXNBdHRyaWJ1
dGUoKTsKICAgICAgICAgICAgICAgICBpZiAoc3VwcG9ydHNGb2N1c2VkKQogICAgICAgICAgICAg
ICAgICAgICBmb2N1c2VkID0gYXhPYmplY3QtPmlzRm9jdXNlZCgpOwpAQCAtMjAwMiwxMyArMjA3
MSwxMyBAQCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJv
cGVydGllcz4gSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aQogICAgICAgICAgICAgCiAgICAgICAgICAg
ICBTdHJpbmcgaW52YWxpZFZhbHVlID0gYXhPYmplY3QtPmludmFsaWRTdGF0dXMoKTsKICAgICAg
ICAgICAgIGlmIChpbnZhbGlkVmFsdWUgPT0gImZhbHNlIikKLSAgICAgICAgICAgICAgICBpbnZh
bGlkID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6
SW52YWxpZDo6RmFsc2U7CisgICAgICAgICAgICAgICAgaW52YWxpZCA9IFByb3RvY29sOjpET006
OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpJbnZhbGlkOjpGYWxzZTsKICAgICAgICAgICAgIGVs
c2UgaWYgKGludmFsaWRWYWx1ZSA9PSAiZ3JhbW1hciIpCi0gICAgICAgICAgICAgICAgaW52YWxp
ZCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6Oklu
dmFsaWQ6OkdyYW1tYXI7CisgICAgICAgICAgICAgICAgaW52YWxpZCA9IFByb3RvY29sOjpET006
OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpJbnZhbGlkOjpHcmFtbWFyOwogICAgICAgICAgICAg
ZWxzZSBpZiAoaW52YWxpZFZhbHVlID09ICJzcGVsbGluZyIpCi0gICAgICAgICAgICAgICAgaW52
YWxpZCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6
OkludmFsaWQ6OlNwZWxsaW5nOworICAgICAgICAgICAgICAgIGludmFsaWQgPSBQcm90b2NvbDo6
RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6SW52YWxpZDo6U3BlbGxpbmc7CiAgICAgICAg
ICAgICBlbHNlIC8vIEZ1dHVyZSB2ZXJzaW9ucyBvZiBBUklBIG1heSBhbGxvdyBhZGRpdGlvbmFs
IHRydXRoeSB2YWx1ZXMuIEV4LiBmb3JtYXQsIG9yZGVyLCBvciBzaXplLgotICAgICAgICAgICAg
ICAgIGludmFsaWQgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9w
ZXJ0aWVzOjpJbnZhbGlkOjpUcnVlOworICAgICAgICAgICAgICAgIGludmFsaWQgPSBQcm90b2Nv
bDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6SW52YWxpZDo6VHJ1ZTsKICAgICAgICAg
ICAgIAogICAgICAgICAgICAgaWYgKGF4T2JqZWN0LT5pc0FYSGlkZGVuKCkgfHwgYXhPYmplY3Qt
PmlzRE9NSGlkZGVuKCkpCiAgICAgICAgICAgICAgICAgaGlkZGVuID0gdHJ1ZTsKQEAgLTIwMjIs
OSArMjA5MSw5IEBAIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxp
dHlQcm9wZXJ0aWVzPiBJbnNwZWN0b3JET01BZ2VudDo6YnVpCiAgICAgICAgICAgICAgICAgU3Ry
aW5nIGFyaWFSZWxldmFudEF0dHJWYWx1ZSA9IGF4T2JqZWN0LT5saXZlUmVnaW9uUmVsZXZhbnQo
KTsKICAgICAgICAgICAgICAgICBpZiAoIWFyaWFSZWxldmFudEF0dHJWYWx1ZS5pc0VtcHR5KCkp
IHsKICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFBhc3MgZW51bSB2YWx1ZXMgcmF0aGVy
IHRoYW4gc3RyaW5ncyBvbmNlIHVuYmxvY2tlZC4gaHR0cDovL3dlYmtpdC5vcmcvYi8xMzM3MTEK
LSAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGFyaWFSZWxldmFudEFkZGl0aW9ucyA9IEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6Okluc3BlY3RvckhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6TGl2ZVJlZ2lvblJlbGV2YW50OjpBZGRpdGlvbnMpOwot
ICAgICAgICAgICAgICAgICAgICBTdHJpbmcgYXJpYVJlbGV2YW50UmVtb3ZhbHMgPSBJbnNwZWN0
b3I6OlByb3RvY29sOjpJbnNwZWN0b3JIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShJbnNw
ZWN0b3I6OlByb3RvY29sOjpET006OkxpdmVSZWdpb25SZWxldmFudDo6UmVtb3ZhbHMpOwotICAg
ICAgICAgICAgICAgICAgICBTdHJpbmcgYXJpYVJlbGV2YW50VGV4dCA9IEluc3BlY3Rvcjo6UHJv
dG9jb2w6Okluc3BlY3RvckhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRPTTo6TGl2ZVJlZ2lvblJlbGV2YW50OjpUZXh0KTsKKyAgICAgICAgICAgICAg
ICAgICAgU3RyaW5nIGFyaWFSZWxldmFudEFkZGl0aW9ucyA9IFByb3RvY29sOjpIZWxwZXJzOjpn
ZXRFbnVtQ29uc3RhbnRWYWx1ZShQcm90b2NvbDo6RE9NOjpMaXZlUmVnaW9uUmVsZXZhbnQ6OkFk
ZGl0aW9ucyk7CisgICAgICAgICAgICAgICAgICAgIFN0cmluZyBhcmlhUmVsZXZhbnRSZW1vdmFs
cyA9IFByb3RvY29sOjpIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShQcm90b2NvbDo6RE9N
OjpMaXZlUmVnaW9uUmVsZXZhbnQ6OlJlbW92YWxzKTsKKyAgICAgICAgICAgICAgICAgICAgU3Ry
aW5nIGFyaWFSZWxldmFudFRleHQgPSBQcm90b2NvbDo6SGVscGVyczo6Z2V0RW51bUNvbnN0YW50
VmFsdWUoUHJvdG9jb2w6OkRPTTo6TGl2ZVJlZ2lvblJlbGV2YW50OjpUZXh0KTsKICAgICAgICAg
ICAgICAgICAgICAgbGl2ZVJlZ2lvblJlbGV2YW50ID0gSlNPTjo6QXJyYXlPZjxTdHJpbmc+Ojpj
cmVhdGUoKTsKICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3BhY2VTcGxpdFN0cmluZyYgdmFs
dWVzID0gU3BhY2VTcGxpdFN0cmluZyhhcmlhUmVsZXZhbnRBdHRyVmFsdWUsIHRydWUpOwogICAg
ICAgICAgICAgICAgICAgICAvLyBAYXJpYS1yZWxldmFudD0iYWxsIiBpcyBleHBvc2VkIGFzIFsi
YWRkaXRpb25zIiwicmVtb3ZhbHMiLCJ0ZXh0Il0sIGluIG9yZGVyLgpAQCAtMjA0NSw5ICsyMTE0
LDkgQEAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3Bl
cnRpZXM+IEluc3BlY3RvckRPTUFnZW50OjpidWkKIAogICAgICAgICAgICAgICAgIFN0cmluZyBh
cmlhTGl2ZSA9IGF4T2JqZWN0LT5saXZlUmVnaW9uU3RhdHVzKCk7CiAgICAgICAgICAgICAgICAg
aWYgKGFyaWFMaXZlID09ICJhc3NlcnRpdmUiKQotICAgICAgICAgICAgICAgICAgICBsaXZlUmVn
aW9uU3RhdHVzID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVy
dGllczo6TGl2ZVJlZ2lvblN0YXR1czo6QXNzZXJ0aXZlOworICAgICAgICAgICAgICAgICAgICBs
aXZlUmVnaW9uU3RhdHVzID0gUHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6
OkxpdmVSZWdpb25TdGF0dXM6OkFzc2VydGl2ZTsKICAgICAgICAgICAgICAgICBlbHNlIGlmIChh
cmlhTGl2ZSA9PSAicG9saXRlIikKLSAgICAgICAgICAgICAgICAgICAgbGl2ZVJlZ2lvblN0YXR1
cyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6Okxp
dmVSZWdpb25TdGF0dXM6OlBvbGl0ZTsKKyAgICAgICAgICAgICAgICAgICAgbGl2ZVJlZ2lvblN0
YXR1cyA9IFByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpMaXZlUmVnaW9u
U3RhdHVzOjpQb2xpdGU7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChpczxBY2Nl
c3NpYmlsaXR5Tm9kZU9iamVjdD4oKmF4T2JqZWN0KSkKQEAgLTIwNTcsOSArMjEyNiwxMSBAQCBS
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllcz4g
SW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aQogICAgICAgICAgICAgICAgIFZlY3RvcjxFbGVtZW50Kj4g
b3duZWRFbGVtZW50czsKICAgICAgICAgICAgICAgICBheE9iamVjdC0+ZWxlbWVudHNGcm9tQXR0
cmlidXRlKG93bmVkRWxlbWVudHMsIGFyaWFfb3duc0F0dHIpOwogICAgICAgICAgICAgICAgIGlm
IChvd25lZEVsZW1lbnRzLnNpemUoKSkgewotICAgICAgICAgICAgICAgICAgICBvd25lZE5vZGVJ
ZHMgPSBKU09OOjpBcnJheU9mPGludD46OmNyZWF0ZSgpOwotICAgICAgICAgICAgICAgICAgICBm
b3IgKEVsZW1lbnQqIG93bmVkRWxlbWVudCA6IG93bmVkRWxlbWVudHMpCi0gICAgICAgICAgICAg
ICAgICAgICAgICBvd25lZE5vZGVJZHMtPmFkZEl0ZW0ocHVzaE5vZGVQYXRoVG9Gcm9udGVuZChv
d25lZEVsZW1lbnQpKTsKKyAgICAgICAgICAgICAgICAgICAgb3duZWROb2RlSWRzID0gSlNPTjo6
QXJyYXlPZjxQcm90b2NvbDo6RE9NOjpOb2RlSWQ+OjpjcmVhdGUoKTsKKyAgICAgICAgICAgICAg
ICAgICAgZm9yIChFbGVtZW50KiBvd25lZEVsZW1lbnQgOiBvd25lZEVsZW1lbnRzKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoYXV0byBvd25lZEVsZW1lbnRJZCA9IHB1c2hOb2RlUGF0
aFRvRnJvbnRlbmQob3duZWRFbGVtZW50KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBv
d25lZE5vZGVJZHMtPmFkZEl0ZW0ob3duZWRFbGVtZW50SWQpOworICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCkBAIC0yMDgzLDEwICsyMTU0
LDEyIEBAIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9w
ZXJ0aWVzPiBJbnNwZWN0b3JET01BZ2VudDo6YnVpCiAgICAgICAgICAgICBBWENvcmVPYmplY3Q6
OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBzZWxlY3RlZENoaWxkcmVuOwogICAgICAgICAg
ICAgYXhPYmplY3QtPnNlbGVjdGVkQ2hpbGRyZW4oc2VsZWN0ZWRDaGlsZHJlbik7CiAgICAgICAg
ICAgICBpZiAoc2VsZWN0ZWRDaGlsZHJlbi5zaXplKCkpIHsKLSAgICAgICAgICAgICAgICBzZWxl
Y3RlZENoaWxkTm9kZUlkcyA9IEpTT046OkFycmF5T2Y8aW50Pjo6Y3JlYXRlKCk7CisgICAgICAg
ICAgICAgICAgc2VsZWN0ZWRDaGlsZE5vZGVJZHMgPSBKU09OOjpBcnJheU9mPFByb3RvY29sOjpE
T006Ok5vZGVJZD46OmNyZWF0ZSgpOwogICAgICAgICAgICAgICAgIGZvciAoYXV0byYgc2VsZWN0
ZWRDaGlsZE9iamVjdCA6IHNlbGVjdGVkQ2hpbGRyZW4pIHsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKE5vZGUqIHNlbGVjdGVkQ2hpbGROb2RlID0gc2VsZWN0ZWRDaGlsZE9iamVjdC0+bm9kZSgp
KQotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRDaGlsZE5vZGVJZHMtPmFkZEl0ZW0o
cHVzaE5vZGVQYXRoVG9Gcm9udGVuZChzZWxlY3RlZENoaWxkTm9kZSkpOworICAgICAgICAgICAg
ICAgICAgICBpZiAoTm9kZSogc2VsZWN0ZWRDaGlsZE5vZGUgPSBzZWxlY3RlZENoaWxkT2JqZWN0
LT5ub2RlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhdXRvIHNlbGVjdGVkQ2hp
bGROb2RlSWQgPSBwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKHNlbGVjdGVkQ2hpbGROb2RlKSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZENoaWxkTm9kZUlkcy0+YWRkSXRlbShz
ZWxlY3RlZENoaWxkTm9kZUlkKTsKKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAtMjA5OCw1NCArMjE3MSw2MCBA
QCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGll
cz4gSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aQogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIFJl
ZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzPiB2YWx1
ZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6OmNy
ZWF0ZSgpCisgICAgUmVmPFByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzPiB2
YWx1ZSA9IFByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpjcmVhdGUoKQog
ICAgICAgICAuc2V0RXhpc3RzKGV4aXN0cykKICAgICAgICAgLnNldExhYmVsKGxhYmVsKQogICAg
ICAgICAuc2V0Um9sZShyb2xlKQotICAgICAgICAuc2V0Tm9kZUlkKHB1c2hOb2RlUGF0aFRvRnJv
bnRlbmQobm9kZSkpCisgICAgICAgIC5zZXROb2RlSWQocHVzaE5vZGVQYXRoVG9Gcm9udGVuZCgm
bm9kZSkpCiAgICAgICAgIC5yZWxlYXNlKCk7CiAKICAgICBpZiAoZXhpc3RzKSB7Ci0gICAgICAg
IGlmIChhY3RpdmVEZXNjZW5kYW50Tm9kZSkKLSAgICAgICAgICAgIHZhbHVlLT5zZXRBY3RpdmVE
ZXNjZW5kYW50Tm9kZUlkKHB1c2hOb2RlUGF0aFRvRnJvbnRlbmQoYWN0aXZlRGVzY2VuZGFudE5v
ZGUpKTsKKyAgICAgICAgaWYgKGFjdGl2ZURlc2NlbmRhbnROb2RlKSB7CisgICAgICAgICAgICBp
ZiAoYXV0byBhY3RpdmVEZXNjZW5kYW50Tm9kZUlkID0gcHVzaE5vZGVQYXRoVG9Gcm9udGVuZChh
Y3RpdmVEZXNjZW5kYW50Tm9kZSkpCisgICAgICAgICAgICAgICAgdmFsdWUtPnNldEFjdGl2ZURl
c2NlbmRhbnROb2RlSWQoYWN0aXZlRGVzY2VuZGFudE5vZGVJZCk7CisgICAgICAgIH0KICAgICAg
ICAgaWYgKGJ1c3kpCiAgICAgICAgICAgICB2YWx1ZS0+c2V0QnVzeShidXN5KTsKICAgICAgICAg
aWYgKHN1cHBvcnRzQ2hlY2tlZCkKICAgICAgICAgICAgIHZhbHVlLT5zZXRDaGVja2VkKGNoZWNr
ZWQpOwogICAgICAgICBpZiAoY2hpbGROb2RlSWRzKQotICAgICAgICAgICAgdmFsdWUtPnNldENo
aWxkTm9kZUlkcyhjaGlsZE5vZGVJZHMpOworICAgICAgICAgICAgdmFsdWUtPnNldENoaWxkTm9k
ZUlkcyhjaGlsZE5vZGVJZHMucmVsZWFzZU5vbk51bGwoKSk7CiAgICAgICAgIGlmIChjb250cm9s
bGVkTm9kZUlkcykKLSAgICAgICAgICAgIHZhbHVlLT5zZXRDb250cm9sbGVkTm9kZUlkcyhjb250
cm9sbGVkTm9kZUlkcyk7Ci0gICAgICAgIGlmIChjdXJyZW50U3RhdGUgIT0gSW5zcGVjdG9yOjpQ
cm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6Q3VycmVudDo6RmFsc2UpCisg
ICAgICAgICAgICB2YWx1ZS0+c2V0Q29udHJvbGxlZE5vZGVJZHMoY29udHJvbGxlZE5vZGVJZHMu
cmVsZWFzZU5vbk51bGwoKSk7CisgICAgICAgIGlmIChjdXJyZW50U3RhdGUgIT0gUHJvdG9jb2w6
OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6OkN1cnJlbnQ6OkZhbHNlKQogICAgICAgICAg
ICAgdmFsdWUtPnNldEN1cnJlbnQoY3VycmVudFN0YXRlKTsKICAgICAgICAgaWYgKGRpc2FibGVk
KQogICAgICAgICAgICAgdmFsdWUtPnNldERpc2FibGVkKGRpc2FibGVkKTsKICAgICAgICAgaWYg
KHN1cHBvcnRzRXhwYW5kZWQpCiAgICAgICAgICAgICB2YWx1ZS0+c2V0RXhwYW5kZWQoZXhwYW5k
ZWQpOwogICAgICAgICBpZiAoZmxvd2VkTm9kZUlkcykKLSAgICAgICAgICAgIHZhbHVlLT5zZXRG
bG93ZWROb2RlSWRzKGZsb3dlZE5vZGVJZHMpOworICAgICAgICAgICAgdmFsdWUtPnNldEZsb3dl
ZE5vZGVJZHMoZmxvd2VkTm9kZUlkcy5yZWxlYXNlTm9uTnVsbCgpKTsKICAgICAgICAgaWYgKHN1
cHBvcnRzRm9jdXNlZCkKICAgICAgICAgICAgIHZhbHVlLT5zZXRGb2N1c2VkKGZvY3VzZWQpOwog
ICAgICAgICBpZiAoaWdub3JlZCkKICAgICAgICAgICAgIHZhbHVlLT5zZXRJZ25vcmVkKGlnbm9y
ZWQpOwogICAgICAgICBpZiAoaWdub3JlZEJ5RGVmYXVsdCkKICAgICAgICAgICAgIHZhbHVlLT5z
ZXRJZ25vcmVkQnlEZWZhdWx0KGlnbm9yZWRCeURlZmF1bHQpOwotICAgICAgICBpZiAoaW52YWxp
ZCAhPSBJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpJ
bnZhbGlkOjpGYWxzZSkKKyAgICAgICAgaWYgKGludmFsaWQgIT0gUHJvdG9jb2w6OkRPTTo6QWNj
ZXNzaWJpbGl0eVByb3BlcnRpZXM6OkludmFsaWQ6OkZhbHNlKQogICAgICAgICAgICAgdmFsdWUt
PnNldEludmFsaWQoaW52YWxpZCk7CiAgICAgICAgIGlmIChoaWRkZW4pCiAgICAgICAgICAgICB2
YWx1ZS0+c2V0SGlkZGVuKGhpZGRlbik7CiAgICAgICAgIGlmIChzdXBwb3J0c0xpdmVSZWdpb24p
IHsKICAgICAgICAgICAgIHZhbHVlLT5zZXRMaXZlUmVnaW9uQXRvbWljKGxpdmVSZWdpb25BdG9t
aWMpOwogICAgICAgICAgICAgaWYgKGxpdmVSZWdpb25SZWxldmFudC0+bGVuZ3RoKCkpCi0gICAg
ICAgICAgICAgICAgdmFsdWUtPnNldExpdmVSZWdpb25SZWxldmFudChsaXZlUmVnaW9uUmVsZXZh
bnQpOworICAgICAgICAgICAgICAgIHZhbHVlLT5zZXRMaXZlUmVnaW9uUmVsZXZhbnQobGl2ZVJl
Z2lvblJlbGV2YW50LnJlbGVhc2VOb25OdWxsKCkpOwogICAgICAgICAgICAgdmFsdWUtPnNldExp
dmVSZWdpb25TdGF0dXMobGl2ZVJlZ2lvblN0YXR1cyk7CiAgICAgICAgIH0KLSAgICAgICAgaWYg
KG1vdXNlRXZlbnROb2RlKQotICAgICAgICAgICAgdmFsdWUtPnNldE1vdXNlRXZlbnROb2RlSWQo
cHVzaE5vZGVQYXRoVG9Gcm9udGVuZChtb3VzZUV2ZW50Tm9kZSkpOworICAgICAgICBpZiAobW91
c2VFdmVudE5vZGUpIHsKKyAgICAgICAgICAgIGlmIChhdXRvIG1vdXNlRXZlbnROb2RlSWQgPSBw
dXNoTm9kZVBhdGhUb0Zyb250ZW5kKG1vdXNlRXZlbnROb2RlKSkKKyAgICAgICAgICAgICAgICB2
YWx1ZS0+c2V0TW91c2VFdmVudE5vZGVJZChtb3VzZUV2ZW50Tm9kZUlkKTsKKyAgICAgICAgfQog
ICAgICAgICBpZiAob3duZWROb2RlSWRzKQotICAgICAgICAgICAgdmFsdWUtPnNldE93bmVkTm9k
ZUlkcyhvd25lZE5vZGVJZHMpOwotICAgICAgICBpZiAocGFyZW50Tm9kZSkKLSAgICAgICAgICAg
IHZhbHVlLT5zZXRQYXJlbnROb2RlSWQocHVzaE5vZGVQYXRoVG9Gcm9udGVuZChwYXJlbnROb2Rl
KSk7CisgICAgICAgICAgICB2YWx1ZS0+c2V0T3duZWROb2RlSWRzKG93bmVkTm9kZUlkcy5yZWxl
YXNlTm9uTnVsbCgpKTsKKyAgICAgICAgaWYgKHBhcmVudE5vZGUpIHsKKyAgICAgICAgICAgIGlm
IChhdXRvIHBhcmVudE5vZGVJZCA9IHB1c2hOb2RlUGF0aFRvRnJvbnRlbmQocGFyZW50Tm9kZSkp
CisgICAgICAgICAgICAgICAgdmFsdWUtPnNldFBhcmVudE5vZGVJZChwYXJlbnROb2RlSWQpOwor
ICAgICAgICB9CiAgICAgICAgIGlmIChzdXBwb3J0c1ByZXNzZWQpCiAgICAgICAgICAgICB2YWx1
ZS0+c2V0UHJlc3NlZChwcmVzc2VkKTsKICAgICAgICAgaWYgKHJlYWRvbmx5KQpAQCAtMjE1NSw3
ICsyMjM0LDcgQEAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0
eVByb3BlcnRpZXM+IEluc3BlY3RvckRPTUFnZW50OjpidWkKICAgICAgICAgaWYgKHNlbGVjdGVk
KQogICAgICAgICAgICAgdmFsdWUtPnNldFNlbGVjdGVkKHNlbGVjdGVkKTsKICAgICAgICAgaWYg
KHNlbGVjdGVkQ2hpbGROb2RlSWRzKQotICAgICAgICAgICAgdmFsdWUtPnNldFNlbGVjdGVkQ2hp
bGROb2RlSWRzKHNlbGVjdGVkQ2hpbGROb2RlSWRzKTsKKyAgICAgICAgICAgIHZhbHVlLT5zZXRT
ZWxlY3RlZENoaWxkTm9kZUlkcyhzZWxlY3RlZENoaWxkTm9kZUlkcy5yZWxlYXNlTm9uTnVsbCgp
KTsKICAgICAgICAgCiAgICAgICAgIC8vIEgxIC0tIEg2IGFsd2F5cyBoYXZlIGEgaGVhZGluZ0xl
dmVsIHByb3BlcnR5IHRoYXQgY2FuIGJlIGNvbXBsaW1lbnRlZCBieSBhIGhpZXJhcmNoaWNhbExl
dmVsCiAgICAgICAgIC8vIHByb3BlcnR5IHdoZW4gYXJpYS1sZXZlbCBpcyBzZXQgb24gdGhlIGVs
ZW1lbnQsIGluIHdoaWNoIGNhc2Ugd2Ugd2FudCB0byByZW1haW4gY2FsbGluZwpAQCAtMjIzNSwy
MiArMjMxNCwyMiBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpkaWRDb21taXRMb2FkKERvY3Vt
ZW50KiBkb2N1bWVudCkKICAgICBpZiAoIWZyYW1lT3duZXIpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIGludCBmcmFtZU93bmVySWQgPSBtX2RvY3VtZW50Tm9kZVRvSWRNYXAuZ2V0KGZyYW1lT3du
ZXIpOworICAgIGF1dG8gZnJhbWVPd25lcklkID0gbV9kb2N1bWVudE5vZGVUb0lkTWFwLmdldChm
cmFtZU93bmVyKTsKICAgICBpZiAoIWZyYW1lT3duZXJJZCkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgLy8gUmUtYWRkIGZyYW1lIG93bmVyIGVsZW1lbnQgdG9nZXRoZXIgd2l0aCBpdHMgbmV3IGNo
aWxkcmVuLgotICAgIGludCBwYXJlbnRJZCA9IG1fZG9jdW1lbnROb2RlVG9JZE1hcC5nZXQoaW5u
ZXJQYXJlbnROb2RlKGZyYW1lT3duZXIuZ2V0KCkpKTsKKyAgICBhdXRvIHBhcmVudElkID0gbV9k
b2N1bWVudE5vZGVUb0lkTWFwLmdldChpbm5lclBhcmVudE5vZGUoZnJhbWVPd25lci5nZXQoKSkp
OwogICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5jaGlsZE5vZGVSZW1vdmVkKHBhcmVudElkLCBm
cmFtZU93bmVySWQpOwogICAgIHVuYmluZChmcmFtZU93bmVyLmdldCgpLCAmbV9kb2N1bWVudE5v
ZGVUb0lkTWFwKTsKIAotICAgIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+IHZh
bHVlID0gYnVpbGRPYmplY3RGb3JOb2RlKGZyYW1lT3duZXIuZ2V0KCksIDAsICZtX2RvY3VtZW50
Tm9kZVRvSWRNYXApOworICAgIFJlZjxQcm90b2NvbDo6RE9NOjpOb2RlPiB2YWx1ZSA9IGJ1aWxk
T2JqZWN0Rm9yTm9kZShmcmFtZU93bmVyLmdldCgpLCAwLCAmbV9kb2N1bWVudE5vZGVUb0lkTWFw
KTsKICAgICBOb2RlKiBwcmV2aW91c1NpYmxpbmcgPSBpbm5lclByZXZpb3VzU2libGluZyhmcmFt
ZU93bmVyLmdldCgpKTsKLSAgICBpbnQgcHJldklkID0gcHJldmlvdXNTaWJsaW5nID8gbV9kb2N1
bWVudE5vZGVUb0lkTWFwLmdldChwcmV2aW91c1NpYmxpbmcpIDogMDsKKyAgICBhdXRvIHByZXZJ
ZCA9IHByZXZpb3VzU2libGluZyA/IG1fZG9jdW1lbnROb2RlVG9JZE1hcC5nZXQocHJldmlvdXNT
aWJsaW5nKSA6IDA7CiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPmNoaWxkTm9kZUluc2VydGVk
KHBhcmVudElkLCBwcmV2SWQsIFdURk1vdmUodmFsdWUpKTsKIH0KIAotaW50IEluc3BlY3RvckRP
TUFnZW50OjppZGVudGlmaWVyRm9yTm9kZShOb2RlJiBub2RlKQorUHJvdG9jb2w6OkRPTTo6Tm9k
ZUlkIEluc3BlY3RvckRPTUFnZW50OjppZGVudGlmaWVyRm9yTm9kZShOb2RlJiBub2RlKQogewog
ICAgIHJldHVybiBwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKCZub2RlKTsKIH0KQEAgLTIzMDcsNyAr
MjM4Niw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmRpZEluc2VydERPTU5vZGUoTm9kZSYg
bm9kZSkKICAgICBpZiAoIXBhcmVudCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaW50IHBhcmVu
dElkID0gbV9kb2N1bWVudE5vZGVUb0lkTWFwLmdldChwYXJlbnQpOworICAgIGF1dG8gcGFyZW50
SWQgPSBtX2RvY3VtZW50Tm9kZVRvSWRNYXAuZ2V0KHBhcmVudCk7CiAgICAgLy8gUmV0dXJuIGlm
IHBhcmVudCBpcyBub3QgbWFwcGVkIHlldC4KICAgICBpZiAoIXBhcmVudElkKQogICAgICAgICBy
ZXR1cm47CkBAIC0yMzE4LDggKzIzOTcsOCBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpkaWRJ
bnNlcnRET01Ob2RlKE5vZGUmIG5vZGUpCiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gQ2hpbGRy
ZW4gaGF2ZSBiZWVuIHJlcXVlc3RlZCAtPiByZXR1cm4gdmFsdWUgb2YgYSBuZXcgY2hpbGQuCiAg
ICAgICAgIE5vZGUqIHByZXZTaWJsaW5nID0gaW5uZXJQcmV2aW91c1NpYmxpbmcoJm5vZGUpOwot
ICAgICAgICBpbnQgcHJldklkID0gcHJldlNpYmxpbmcgPyBtX2RvY3VtZW50Tm9kZVRvSWRNYXAu
Z2V0KHByZXZTaWJsaW5nKSA6IDA7Ci0gICAgICAgIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpE
T006Ok5vZGU+IHZhbHVlID0gYnVpbGRPYmplY3RGb3JOb2RlKCZub2RlLCAwLCAmbV9kb2N1bWVu
dE5vZGVUb0lkTWFwKTsKKyAgICAgICAgYXV0byBwcmV2SWQgPSBwcmV2U2libGluZyA/IG1fZG9j
dW1lbnROb2RlVG9JZE1hcC5nZXQocHJldlNpYmxpbmcpIDogMDsKKyAgICAgICAgUmVmPFByb3Rv
Y29sOjpET006Ok5vZGU+IHZhbHVlID0gYnVpbGRPYmplY3RGb3JOb2RlKCZub2RlLCAwLCAmbV9k
b2N1bWVudE5vZGVUb0lkTWFwKTsKICAgICAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPmNoaWxk
Tm9kZUluc2VydGVkKHBhcmVudElkLCBwcmV2SWQsIFdURk1vdmUodmFsdWUpKTsKICAgICB9CiB9
CkBAIC0yMzM1LDcgKzI0MTQsNyBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpkaWRSZW1vdmVE
T01Ob2RlKE5vZGUmIG5vZGUpCiAgICAgaWYgKCFtX2RvY3VtZW50Tm9kZVRvSWRNYXAuY29udGFp
bnMocGFyZW50KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaW50IHBhcmVudElkID0gbV9kb2N1
bWVudE5vZGVUb0lkTWFwLmdldChwYXJlbnQpOworICAgIGF1dG8gcGFyZW50SWQgPSBtX2RvY3Vt
ZW50Tm9kZVRvSWRNYXAuZ2V0KHBhcmVudCk7CiAKICAgICBpZiAoIW1fY2hpbGRyZW5SZXF1ZXN0
ZWQuY29udGFpbnMocGFyZW50SWQpKSB7CiAgICAgICAgIC8vIE5vIGNoaWxkcmVuIGFyZSBtYXBw
ZWQgeWV0IC0+IG9ubHkgbm90aWZ5IG9uIGNoYW5nZXMgb2YgaGFzQ2hpbGRyZW4uCkBAIC0yMzU4
LDcgKzI0MzcsNyBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpkaWRNb2RpZnlET01BdHRyKEVs
ZW1lbnQmIGVsZW1lbnQsIGNvbnN0IEF0b21TdHJpbmcmIG5hbQogICAgIGlmIChzaG91bGRTdXBw
cmVzc0V2ZW50KQogICAgICAgICByZXR1cm47CiAKLSAgICBpbnQgaWQgPSBib3VuZE5vZGVJZCgm
ZWxlbWVudCk7CisgICAgYXV0byBpZCA9IGJvdW5kTm9kZUlkKCZlbGVtZW50KTsKICAgICBpZiAo
IWlkKQogICAgICAgICByZXR1cm47CiAKQEAgLTIzNzAsNyArMjQ0OSw3IEBAIHZvaWQgSW5zcGVj
dG9yRE9NQWdlbnQ6OmRpZE1vZGlmeURPTUF0dHIoRWxlbWVudCYgZWxlbWVudCwgY29uc3QgQXRv
bVN0cmluZyYgbmFtCiAKIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmRpZFJlbW92ZURPTUF0dHIo
RWxlbWVudCYgZWxlbWVudCwgY29uc3QgQXRvbVN0cmluZyYgbmFtZSkKIHsKLSAgICBpbnQgaWQg
PSBib3VuZE5vZGVJZCgmZWxlbWVudCk7CisgICAgYXV0byBpZCA9IGJvdW5kTm9kZUlkKCZlbGVt
ZW50KTsKICAgICBpZiAoIWlkKQogICAgICAgICByZXR1cm47CiAKQEAgLTIzODIsOSArMjQ2MSw5
IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmRpZFJlbW92ZURPTUF0dHIoRWxlbWVudCYgZWxl
bWVudCwgY29uc3QgQXRvbVN0cmluZyYgbmFtCiAKIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnN0
eWxlQXR0cmlidXRlSW52YWxpZGF0ZWQoY29uc3QgVmVjdG9yPEVsZW1lbnQqPiYgZWxlbWVudHMp
CiB7Ci0gICAgYXV0byBub2RlSWRzID0gSlNPTjo6QXJyYXlPZjxpbnQ+OjpjcmVhdGUoKTsKKyAg
ICBhdXRvIG5vZGVJZHMgPSBKU09OOjpBcnJheU9mPFByb3RvY29sOjpET006Ok5vZGVJZD46OmNy
ZWF0ZSgpOwogICAgIGZvciAoYXV0byYgZWxlbWVudCA6IGVsZW1lbnRzKSB7Ci0gICAgICAgIGlu
dCBpZCA9IGJvdW5kTm9kZUlkKGVsZW1lbnQpOworICAgICAgICBhdXRvIGlkID0gYm91bmROb2Rl
SWQoZWxlbWVudCk7CiAgICAgICAgIGlmICghaWQpCiAgICAgICAgICAgICBjb250aW51ZTsKIApA
QCAtMjM5OCw3ICsyNDc3LDcgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c3R5bGVBdHRyaWJ1
dGVJbnZhbGlkYXRlZChjb25zdCBWZWN0b3I8RWxlbWVudCo+JiBlbGVtZW4KIAogdm9pZCBJbnNw
ZWN0b3JET01BZ2VudDo6Y2hhcmFjdGVyRGF0YU1vZGlmaWVkKENoYXJhY3RlckRhdGEmIGNoYXJh
Y3RlckRhdGEpCiB7Ci0gICAgaW50IGlkID0gbV9kb2N1bWVudE5vZGVUb0lkTWFwLmdldCgmY2hh
cmFjdGVyRGF0YSk7CisgICAgYXV0byBpZCA9IG1fZG9jdW1lbnROb2RlVG9JZE1hcC5nZXQoJmNo
YXJhY3RlckRhdGEpOwogICAgIGlmICghaWQpIHsKICAgICAgICAgLy8gUHVzaCB0ZXh0IG5vZGUg
aWYgaXQgaXMgYmVpbmcgY3JlYXRlZC4KICAgICAgICAgZGlkSW5zZXJ0RE9NTm9kZShjaGFyYWN0
ZXJEYXRhKTsKQEAgLTI0MDksNyArMjQ4OCw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmNo
YXJhY3RlckRhdGFNb2RpZmllZChDaGFyYWN0ZXJEYXRhJiBjaGFyYWN0ZXJEYXRhKQogCiB2b2lk
IEluc3BlY3RvckRPTUFnZW50OjpkaWRJbnZhbGlkYXRlU3R5bGVBdHRyKEVsZW1lbnQmIGVsZW1l
bnQpCiB7Ci0gICAgaW50IGlkID0gbV9kb2N1bWVudE5vZGVUb0lkTWFwLmdldCgmZWxlbWVudCk7
CisgICAgYXV0byBpZCA9IG1fZG9jdW1lbnROb2RlVG9JZE1hcC5nZXQoJmVsZW1lbnQpOwogICAg
IGlmICghaWQpCiAgICAgICAgIHJldHVybjsKIApAQCAtMjQyMCwyMiArMjQ5OSwyMiBAQCB2b2lk
IEluc3BlY3RvckRPTUFnZW50OjpkaWRJbnZhbGlkYXRlU3R5bGVBdHRyKEVsZW1lbnQmIGVsZW1l
bnQpCiAKIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmRpZFB1c2hTaGFkb3dSb290KEVsZW1lbnQm
IGhvc3QsIFNoYWRvd1Jvb3QmIHJvb3QpCiB7Ci0gICAgaW50IGhvc3RJZCA9IG1fZG9jdW1lbnRO
b2RlVG9JZE1hcC5nZXQoJmhvc3QpOworICAgIGF1dG8gaG9zdElkID0gbV9kb2N1bWVudE5vZGVU
b0lkTWFwLmdldCgmaG9zdCk7CiAgICAgaWYgKGhvc3RJZCkKICAgICAgICAgbV9mcm9udGVuZERp
c3BhdGNoZXItPnNoYWRvd1Jvb3RQdXNoZWQoaG9zdElkLCBidWlsZE9iamVjdEZvck5vZGUoJnJv
b3QsIDAsICZtX2RvY3VtZW50Tm9kZVRvSWRNYXApKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JET01B
Z2VudDo6d2lsbFBvcFNoYWRvd1Jvb3QoRWxlbWVudCYgaG9zdCwgU2hhZG93Um9vdCYgcm9vdCkK
IHsKLSAgICBpbnQgaG9zdElkID0gbV9kb2N1bWVudE5vZGVUb0lkTWFwLmdldCgmaG9zdCk7Ci0g
ICAgaW50IHJvb3RJZCA9IG1fZG9jdW1lbnROb2RlVG9JZE1hcC5nZXQoJnJvb3QpOworICAgIGF1
dG8gaG9zdElkID0gbV9kb2N1bWVudE5vZGVUb0lkTWFwLmdldCgmaG9zdCk7CisgICAgYXV0byBy
b290SWQgPSBtX2RvY3VtZW50Tm9kZVRvSWRNYXAuZ2V0KCZyb290KTsKICAgICBpZiAoaG9zdElk
ICYmIHJvb3RJZCkKICAgICAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPnNoYWRvd1Jvb3RQb3Bw
ZWQoaG9zdElkLCByb290SWQpOwogfQogCiB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpkaWRDaGFu
Z2VDdXN0b21FbGVtZW50U3RhdGUoRWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICBpbnQgZWxlbWVu
dElkID0gbV9kb2N1bWVudE5vZGVUb0lkTWFwLmdldCgmZWxlbWVudCk7CisgICAgYXV0byBlbGVt
ZW50SWQgPSBtX2RvY3VtZW50Tm9kZVRvSWRNYXAuZ2V0KCZlbGVtZW50KTsKICAgICBpZiAoIWVs
ZW1lbnRJZCkKICAgICAgICAgcmV0dXJuOwogCkBAIC0yNDYyLDcgKzI1NDEsNyBAQCB2b2lkIElu
c3BlY3RvckRPTUFnZW50Ojpwc2V1ZG9FbGVtZW50Q3JlYXRlZChQc2V1ZG9FbGVtZW50JiBwc2V1
ZG9FbGVtZW50KQogICAgIGlmICghcGFyZW50KQogICAgICAgICByZXR1cm47CiAKLSAgICBpbnQg
cGFyZW50SWQgPSBtX2RvY3VtZW50Tm9kZVRvSWRNYXAuZ2V0KHBhcmVudCk7CisgICAgYXV0byBw
YXJlbnRJZCA9IG1fZG9jdW1lbnROb2RlVG9JZE1hcC5nZXQocGFyZW50KTsKICAgICBpZiAoIXBh
cmVudElkKQogICAgICAgICByZXR1cm47CiAKQEAgLTI0NzIsMTQgKzI1NTEsMTQgQEAgdm9pZCBJ
bnNwZWN0b3JET01BZ2VudDo6cHNldWRvRWxlbWVudENyZWF0ZWQoUHNldWRvRWxlbWVudCYgcHNl
dWRvRWxlbWVudCkKIAogdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6cHNldWRvRWxlbWVudERlc3Ry
b3llZChQc2V1ZG9FbGVtZW50JiBwc2V1ZG9FbGVtZW50KQogewotICAgIGludCBwc2V1ZG9FbGVt
ZW50SWQgPSBtX2RvY3VtZW50Tm9kZVRvSWRNYXAuZ2V0KCZwc2V1ZG9FbGVtZW50KTsKKyAgICBh
dXRvIHBzZXVkb0VsZW1lbnRJZCA9IG1fZG9jdW1lbnROb2RlVG9JZE1hcC5nZXQoJnBzZXVkb0Vs
ZW1lbnQpOwogICAgIGlmICghcHNldWRvRWxlbWVudElkKQogICAgICAgICByZXR1cm47CiAKICAg
ICAvLyBJZiBhIFBzZXVkb0VsZW1lbnQgaXMgYm91bmQsIGl0cyBwYXJlbnQgZWxlbWVudCBtdXN0
IGhhdmUgYmVlbiBib3VuZC4KICAgICBFbGVtZW50KiBwYXJlbnQgPSBwc2V1ZG9FbGVtZW50Lmhv
c3RFbGVtZW50KCk7CiAgICAgQVNTRVJUKHBhcmVudCk7Ci0gICAgaW50IHBhcmVudElkID0gbV9k
b2N1bWVudE5vZGVUb0lkTWFwLmdldChwYXJlbnQpOworICAgIGF1dG8gcGFyZW50SWQgPSBtX2Rv
Y3VtZW50Tm9kZVRvSWRNYXAuZ2V0KHBhcmVudCk7CiAgICAgQVNTRVJUKHBhcmVudElkKTsKIAog
ICAgIHVuYmluZCgmcHNldWRvRWxlbWVudCwgJm1fZG9jdW1lbnROb2RlVG9JZE1hcCk7CkBAIC0y
NDk1LDcgKzI1NzQsNyBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpkaWRBZGRFdmVudExpc3Rl
bmVyKEV2ZW50VGFyZ2V0JiB0YXJnZXQpCiAgICAgaWYgKCFub2RlLmNvbnRhaW5zKG1faW5zcGVj
dGVkTm9kZS5nZXQoKSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGludCBub2RlSWQgPSBib3Vu
ZE5vZGVJZCgmbm9kZSk7CisgICAgYXV0byBub2RlSWQgPSBib3VuZE5vZGVJZCgmbm9kZSk7CiAg
ICAgaWYgKCFub2RlSWQpCiAgICAgICAgIHJldHVybjsKIApAQCAtMjUxNiw3ICsyNTk1LDcgQEAg
dm9pZCBJbnNwZWN0b3JET01BZ2VudDo6d2lsbFJlbW92ZUV2ZW50TGlzdGVuZXIoRXZlbnRUYXJn
ZXQmIHRhcmdldCwgY29uc3QgQXRvbVMKICAgICBpZiAoIW5vZGUuY29udGFpbnMobV9pbnNwZWN0
ZWROb2RlLmdldCgpKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaW50IG5vZGVJZCA9IGJvdW5k
Tm9kZUlkKCZub2RlKTsKKyAgICBhdXRvIG5vZGVJZCA9IGJvdW5kTm9kZUlkKCZub2RlKTsKICAg
ICBpZiAoIW5vZGVJZCkKICAgICAgICAgcmV0dXJuOwogCkBAIC0yNTY2LDcgKzI2NDUsNyBAQCBS
ZWZQdHI8SlNDOjpCcmVha3BvaW50PiBJbnNwZWN0b3JET01BZ2VudDo6YnJlYWtwb2ludEZvckV2
ZW50TGlzdGVuZXIoRXZlbnRUYXJnZQogICAgIHJldHVybiBudWxscHRyOwogfQogCi1pbnQgSW5z
cGVjdG9yRE9NQWdlbnQ6OmlkRm9yRXZlbnRMaXN0ZW5lcihFdmVudFRhcmdldCYgdGFyZ2V0LCBj
b25zdCBBdG9tU3RyaW5nJiBldmVudFR5cGUsIEV2ZW50TGlzdGVuZXImIGxpc3RlbmVyLCBib29s
IGNhcHR1cmUpCitQcm90b2NvbDo6RE9NOjpFdmVudExpc3RlbmVySWQgSW5zcGVjdG9yRE9NQWdl
bnQ6OmlkRm9yRXZlbnRMaXN0ZW5lcihFdmVudFRhcmdldCYgdGFyZ2V0LCBjb25zdCBBdG9tU3Ry
aW5nJiBldmVudFR5cGUsIEV2ZW50TGlzdGVuZXImIGxpc3RlbmVyLCBib29sIGNhcHR1cmUpCiB7
CiAgICAgZm9yIChhdXRvJiBpbnNwZWN0b3JFdmVudExpc3RlbmVyIDogbV9ldmVudExpc3RlbmVy
RW50cmllcy52YWx1ZXMoKSkgewogICAgICAgICBpZiAoaW5zcGVjdG9yRXZlbnRMaXN0ZW5lci5t
YXRjaGVzKHRhcmdldCwgZXZlbnRUeXBlLCBsaXN0ZW5lciwgY2FwdHVyZSkpCkBAIC0yNjA0LDgg
KzI2ODMsNyBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjptZWRpYU1ldHJpY3NUaW1lckZpcmVk
KCkKICAgICAgICAgaWYgKGl0ZXJhdG9yLT52YWx1ZS5pc1Bvd2VyRWZmaWNpZW50ICE9IGlzUG93
ZXJFZmZpY2llbnQpIHsKICAgICAgICAgICAgIGl0ZXJhdG9yLT52YWx1ZS5pc1Bvd2VyRWZmaWNp
ZW50ID0gaXNQb3dlckVmZmljaWVudDsKIAotICAgICAgICAgICAgaW50IG5vZGVJZCA9IHB1c2hO
b2RlUGF0aFRvRnJvbnRlbmQobWVkaWFFbGVtZW50KTsKLSAgICAgICAgICAgIGlmIChub2RlSWQp
IHsKKyAgICAgICAgICAgIGlmIChhdXRvIG5vZGVJZCA9IHB1c2hOb2RlUGF0aFRvRnJvbnRlbmQo
bWVkaWFFbGVtZW50KSkgewogICAgICAgICAgICAgICAgIGF1dG8gdGltZXN0YW1wID0gbV9lbnZp
cm9ubWVudC5leGVjdXRpb25TdG9wd2F0Y2goKS5lbGFwc2VkVGltZSgpLnNlY29uZHMoKTsKICAg
ICAgICAgICAgICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+cG93ZXJFZmZpY2llbnRQbGF5YmFj
a1N0YXRlQ2hhbmdlZChub2RlSWQsIHRpbWVzdGFtcCwgaXRlcmF0b3ItPnZhbHVlLmlzUG93ZXJF
ZmZpY2llbnQpOwogICAgICAgICAgICAgfQpAQCAtMjY1OSw3ICsyNzM3LDcgQEAgTm9kZSogSW5z
cGVjdG9yRE9NQWdlbnQ6Om5vZGVGb3JQYXRoKGNvbnN0IFN0cmluZyYgcGF0aCkKICAgICByZXR1
cm4gbm9kZTsKIH0KIAotTm9kZSogSW5zcGVjdG9yRE9NQWdlbnQ6Om5vZGVGb3JPYmplY3RJZChj
b25zdCBTdHJpbmcmIG9iamVjdElkKQorTm9kZSogSW5zcGVjdG9yRE9NQWdlbnQ6Om5vZGVGb3JP
YmplY3RJZChjb25zdCBQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0SWQmIG9iamVjdElk
KQogewogICAgIEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0ID0gbV9pbmplY3RlZFNjcmlw
dE1hbmFnZXIuaW5qZWN0ZWRTY3JpcHRGb3JPYmplY3RJZChvYmplY3RJZCk7CiAgICAgaWYgKGlu
amVjdGVkU2NyaXB0Lmhhc05vVmFsdWUoKSkKQEAgLTI2NjgsMTUgKzI3NDYsMjAgQEAgTm9kZSog
SW5zcGVjdG9yRE9NQWdlbnQ6Om5vZGVGb3JPYmplY3RJZChjb25zdCBTdHJpbmcmIG9iamVjdElk
KQogICAgIHJldHVybiBzY3JpcHRWYWx1ZUFzTm9kZShpbmplY3RlZFNjcmlwdC5maW5kT2JqZWN0
QnlJZChvYmplY3RJZCkpOwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpwdXNoTm9kZUJ5
UGF0aFRvRnJvbnRlbmQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHBh
dGgsIGludCogbm9kZUlkKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UHJvdG9jb2w6OkRPTTo6
Tm9kZUlkPiBJbnNwZWN0b3JET01BZ2VudDo6cHVzaE5vZGVCeVBhdGhUb0Zyb250ZW5kKGNvbnN0
IFN0cmluZyYgcGF0aCkKIHsKLSAgICBpZiAoTm9kZSogbm9kZSA9IG5vZGVGb3JQYXRoKHBhdGgp
KQotICAgICAgICAqbm9kZUlkID0gcHVzaE5vZGVQYXRoVG9Gcm9udGVuZChlcnJvclN0cmluZywg
bm9kZSk7Ci0gICAgZWxzZQotICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIG5vZGUgZm9y
IGdpdmVuIHBhdGgiX3M7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOwor
CisgICAgaWYgKE5vZGUqIG5vZGUgPSBub2RlRm9yUGF0aChwYXRoKSkgeworICAgICAgICBpZiAo
YXV0byBub2RlSWQgPSBwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKGVycm9yU3RyaW5nLCBub2RlKSkK
KyAgICAgICAgICAgIHJldHVybiBub2RlSWQ7CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3Rl
ZChlcnJvclN0cmluZyk7CisgICAgfQorCisgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJNaXNz
aW5nIG5vZGUgZm9yIGdpdmVuIHBhdGgiX3MpOwogfQogCi1SZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiBJbnNwZWN0b3JET01BZ2VudDo6cmVzb2x2ZU5v
ZGUoTm9kZSogbm9kZSwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCkKK1JlZlB0cjxQcm90b2Nv
bDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiBJbnNwZWN0b3JET01BZ2VudDo6cmVzb2x2ZU5vZGUo
Tm9kZSogbm9kZSwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCkKIHsKICAgICBEb2N1bWVudCog
ZG9jdW1lbnQgPSAmbm9kZS0+ZG9jdW1lbnQoKTsKICAgICBpZiAoYXV0byogdGVtcGxhdGVIb3N0
ID0gZG9jdW1lbnQtPnRlbXBsYXRlRG9jdW1lbnRIb3N0KCkpCkBAIC0yNzA2LDkgKzI3ODksMTEg
QEAgSlNDOjpKU1ZhbHVlIEluc3BlY3RvckRPTUFnZW50Ojpub2RlQXNTY3JpcHRWYWx1ZShKU0M6
OkpTR2xvYmFsT2JqZWN0JiBzdGF0ZSwgTm8KICAgICByZXR1cm4gdG9KUygmc3RhdGUsIGRlcHJl
Y2F0ZWRHbG9iYWxPYmplY3RGb3JQcm90b3R5cGUoJnN0YXRlKSwgQmluZGluZ1NlY3VyaXR5Ojpj
aGVja1NlY3VyaXR5Rm9yTm9kZShzdGF0ZSwgbm9kZSkpOwogfQogCi12b2lkIEluc3BlY3RvckRP
TUFnZW50OjpzZXRBbGxvd0VkaXRpbmdVc2VyQWdlbnRTaGFkb3dUcmVlcyhFcnJvclN0cmluZyYs
IGJvb2wgYWxsb3cpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JET01B
Z2VudDo6c2V0QWxsb3dFZGl0aW5nVXNlckFnZW50U2hhZG93VHJlZXMoYm9vbCBhbGxvdykKIHsK
ICAgICBtX2FsbG93RWRpdGluZ1VzZXJBZ2VudFNoYWRvd1RyZWVzID0gYWxsb3c7CisKKyAgICBy
ZXR1cm4geyB9OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmggYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmgKaW5kZXggM2UzNzcw
N2FmZWNmNzhmNDIxOGFhODMwMWUxZWEyZDQxYzcyNTE3Mi4uN2YyODcyZGY0OWUwZDQwYWIwMjBj
ZDk4ODRkZWQwMDMwOGYxYTJhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2FnZW50cy9JbnNwZWN0b3JET01BZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9hZ2VudHMvSW5zcGVjdG9yRE9NQWdlbnQuaApAQCAtNzYsMTQgKzc2LDEyIEBAIGNsYXNzIFNo
YWRvd1Jvb3Q7CiAKIHN0cnVjdCBIaWdobGlnaHRDb25maWc7CiAKLXR5cGVkZWYgU3RyaW5nIEVy
cm9yU3RyaW5nOwotCiBjbGFzcyBJbnNwZWN0b3JET01BZ2VudCBmaW5hbCA6IHB1YmxpYyBJbnNw
ZWN0b3JBZ2VudEJhc2UsIHB1YmxpYyBJbnNwZWN0b3I6OkRPTUJhY2tlbmREaXNwYXRjaGVySGFu
ZGxlciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW5zcGVjdG9yRE9NQWdlbnQpOwogICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIEluc3BlY3RvckRPTUFnZW50
KFBhZ2VBZ2VudENvbnRleHQmLCBJbnNwZWN0b3JPdmVybGF5Kik7Ci0gICAgfkluc3BlY3RvckRP
TUFnZW50KCkgb3ZlcnJpZGU7CisgICAgfkluc3BlY3RvckRPTUFnZW50KCk7CiAKICAgICBzdGF0
aWMgU3RyaW5nIHRvRXJyb3JTdHJpbmcoRXhjZXB0aW9uQ29kZSk7CiAgICAgc3RhdGljIFN0cmlu
ZyB0b0Vycm9yU3RyaW5nKEV4Y2VwdGlvbiYmKTsKQEAgLTEwMiw2MiArMTAwLDYyIEBAIHB1Ymxp
YzoKICAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIG5vZGVBc1NjcmlwdFZhbHVlKEpTQzo6SlNHbG9i
YWxPYmplY3QmLCBOb2RlKik7CiAKICAgICAvLyBJbnNwZWN0b3JBZ2VudEJhc2UKLSAgICB2b2lk
IGRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kUm91dGVyKiwg
SW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlciopIG92ZXJyaWRlOwotICAgIHZvaWQgd2lsbERl
c3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKSBvdmVy
cmlkZTsKKyAgICB2b2lkIGRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkZy
b250ZW5kUm91dGVyKiwgSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlciopOworICAgIHZvaWQg
d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29u
KTsKIAogICAgIC8vIERPTUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcgotICAgIHZvaWQgcXVlcnlT
ZWxlY3RvcihFcnJvclN0cmluZyYsIGludCBub2RlSWQsIGNvbnN0IFN0cmluZyYgc2VsZWN0b3Jz
LCBpbnQqIGVsZW1lbnRJZCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBxdWVyeVNlbGVjdG9yQWxsKEVy
cm9yU3RyaW5nJiwgaW50IG5vZGVJZCwgY29uc3QgU3RyaW5nJiBzZWxlY3RvcnMsIFJlZlB0cjxK
U09OOjpBcnJheU9mPGludD4+JiByZXN1bHQpIG92ZXJyaWRlOwotICAgIHZvaWQgZ2V0RG9jdW1l
bnQoRXJyb3JTdHJpbmcmLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlPiYg
cm9vdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZXF1ZXN0Q2hpbGROb2RlcyhFcnJvclN0cmluZyYs
IGludCBub2RlSWQsIGNvbnN0IGludCogZGVwdGgpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0QXR0
cmlidXRlVmFsdWUoRXJyb3JTdHJpbmcmLCBpbnQgZWxlbWVudElkLCBjb25zdCBTdHJpbmcmIG5h
bWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0QXR0cmlidXRl
c0FzVGV4dChFcnJvclN0cmluZyYsIGludCBlbGVtZW50SWQsIGNvbnN0IFN0cmluZyYgdGV4dCwg
Y29uc3QgU3RyaW5nKiBuYW1lKSBvdmVycmlkZTsKLSAgICB2b2lkIHJlbW92ZUF0dHJpYnV0ZShF
cnJvclN0cmluZyYsIGludCBlbGVtZW50SWQsIGNvbnN0IFN0cmluZyYgbmFtZSkgb3ZlcnJpZGU7
Ci0gICAgdm9pZCByZW1vdmVOb2RlKEVycm9yU3RyaW5nJiwgaW50IG5vZGVJZCkgb3ZlcnJpZGU7
Ci0gICAgdm9pZCBzZXROb2RlTmFtZShFcnJvclN0cmluZyYsIGludCBub2RlSWQsIGNvbnN0IFN0
cmluZyYgbmFtZSwgaW50KiBuZXdJZCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBnZXRPdXRlckhUTUwo
RXJyb3JTdHJpbmcmLCBpbnQgbm9kZUlkLCBXVEY6OlN0cmluZyogb3V0ZXJIVE1MKSBvdmVycmlk
ZTsKLSAgICB2b2lkIHNldE91dGVySFRNTChFcnJvclN0cmluZyYsIGludCBub2RlSWQsIGNvbnN0
IFN0cmluZyYgb3V0ZXJIVE1MKSBvdmVycmlkZTsKLSAgICB2b2lkIGluc2VydEFkamFjZW50SFRN
TChFcnJvclN0cmluZyYsIGludCBub2RlSWQsIGNvbnN0IFN0cmluZyYgcG9zaXRpb24sIGNvbnN0
IFN0cmluZyYgaHRtbCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXROb2RlVmFsdWUoRXJyb3JTdHJp
bmcmLCBpbnQgbm9kZUlkLCBjb25zdCBTdHJpbmcmIHZhbHVlKSBvdmVycmlkZTsKLSAgICB2b2lk
IGdldFN1cHBvcnRlZEV2ZW50TmFtZXMoRXJyb3JTdHJpbmcmLCBSZWZQdHI8SlNPTjo6QXJyYXlP
ZjxTdHJpbmc+PiYgZXZlbnROYW1lcykgb3ZlcnJpZGU7CisgICAgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6RXJyb3JTdHJpbmdPcjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZD4gcXVlcnlT
ZWxlY3RvcihJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZCwgY29uc3QgU3RyaW5nJiBz
ZWxlY3Rvcik7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SlNP
Tjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZD4+PiBxdWVyeVNlbGVj
dG9yQWxsKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkLCBjb25zdCBTdHJpbmcmIHNl
bGVjdG9yKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+PiBnZXREb2N1bWVudCgpOworICAgIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gcmVxdWVzdENoaWxkTm9kZXMoSW5zcGVj
dG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQsIE9wdGlvbmFsPGludD4mJiBkZXB0aCk7CisgICAg
SW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzZXRBdHRyaWJ1dGVWYWx1
ZShJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBj
b25zdCBTdHJpbmcmIHZhbHVlKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmlu
Z09yPHZvaWQ+IHNldEF0dHJpYnV0ZXNBc1RleHQoSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpO
b2RlSWQsIGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgU3RyaW5nJiBuYW1lKTsKKyAgICBJbnNw
ZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHJlbW92ZUF0dHJpYnV0ZShJbnNw
ZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZCwgY29uc3QgU3RyaW5nJiBuYW1lKTsKKyAgICBJ
bnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHJlbW92ZU5vZGUoSW5zcGVj
dG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQ+IHNldE5vZGVOYW1l
KEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkLCBjb25zdCBTdHJpbmcmKTsKKyAgICBJ
bnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFN0cmluZz4gZ2V0T3V0ZXJIVE1MKElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29s
OjpFcnJvclN0cmluZ09yPHZvaWQ+IHNldE91dGVySFRNTChJbnNwZWN0b3I6OlByb3RvY29sOjpE
T006Ok5vZGVJZCwgY29uc3QgU3RyaW5nJik7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJy
b3JTdHJpbmdPcjx2b2lkPiBpbnNlcnRBZGphY2VudEhUTUwoSW5zcGVjdG9yOjpQcm90b2NvbDo6
RE9NOjpOb2RlSWQsIGNvbnN0IFN0cmluZyYgcG9zaXRpb24sIGNvbnN0IFN0cmluZyYgaHRtbCk7
CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzZXROb2RlVmFs
dWUoSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQsIGNvbnN0IFN0cmluZyYpOworICAg
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEpTT046OkFycmF5T2Y8U3Ry
aW5nPj4+IGdldFN1cHBvcnRlZEV2ZW50TmFtZXMoKTsKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FM
VEVSTkFURV9ESVNQQVRDSEVSUykKLSAgICB2b2lkIGdldERhdGFCaW5kaW5nc0Zvck5vZGUoRXJy
b3JTdHJpbmcmLCBpbnQgbm9kZUlkLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpET006OkRhdGFCaW5kaW5nPj4mIGRhdGFBcnJheSkgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBnZXRBc3NvY2lhdGVkRGF0YUZvck5vZGUoRXJyb3JTdHJpbmcmLCBpbnQgbm9kZUlkLCBPcHRp
b25hbDxTdHJpbmc+JiBhc3NvY2lhdGVkRGF0YSkgb3ZlcnJpZGU7CisgICAgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpET006OkRhdGFCaW5kaW5nPj4+IGdldERhdGFCaW5kaW5nc0Zvck5vZGUoSW5zcGVjdG9y
OjpQcm90b2NvbDo6RE9NOjpOb2RlSWQpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8U3RyaW5nPiBnZXRBc3NvY2lhdGVkRGF0YUZvck5vZGUoSW5zcGVjdG9yOjpQcm90
b2NvbDo6RE9NOjpOb2RlSWQpOwogI2VuZGlmCi0gICAgdm9pZCBnZXRFdmVudExpc3RlbmVyc0Zv
ck5vZGUoRXJyb3JTdHJpbmcmLCBpbnQgbm9kZUlkLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpET006OkV2ZW50TGlzdGVuZXI+PiYgbGlzdGVuZXJzQXJyYXkpIG92
ZXJyaWRlOwotICAgIHZvaWQgc2V0RXZlbnRMaXN0ZW5lckRpc2FibGVkKEVycm9yU3RyaW5nJiwg
aW50IGV2ZW50TGlzdGVuZXJJZCwgYm9vbCBkaXNhYmxlZCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBz
ZXRCcmVha3BvaW50Rm9yRXZlbnRMaXN0ZW5lcihFcnJvclN0cmluZyYsIGludCBldmVudExpc3Rl
bmVySWQsIGNvbnN0IEpTT046Ok9iamVjdCogb3B0aW9ucykgZmluYWw7Ci0gICAgdm9pZCByZW1v
dmVCcmVha3BvaW50Rm9yRXZlbnRMaXN0ZW5lcihFcnJvclN0cmluZyYsIGludCBldmVudExpc3Rl
bmVySWQpIG92ZXJyaWRlOwotICAgIHZvaWQgZ2V0QWNjZXNzaWJpbGl0eVByb3BlcnRpZXNGb3JO
b2RlKEVycm9yU3RyaW5nJiwgaW50IG5vZGVJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM+JiBheFByb3BlcnRpZXMpIG92ZXJyaWRlOwot
ICAgIHZvaWQgcGVyZm9ybVNlYXJjaChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgcXVlcnks
IGNvbnN0IEpTT046OkFycmF5KiBub2RlSWRzLCBjb25zdCBib29sKiBjYXNlU2Vuc2l0aXZlLCBT
dHJpbmcqIHNlYXJjaElkLCBpbnQqIHJlc3VsdENvdW50KSBvdmVycmlkZTsKLSAgICB2b2lkIGdl
dFNlYXJjaFJlc3VsdHMoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHNlYXJjaElkLCBpbnQg
ZnJvbUluZGV4LCBpbnQgdG9JbmRleCwgUmVmUHRyPEpTT046OkFycmF5T2Y8aW50Pj4mKSBvdmVy
cmlkZTsKLSAgICB2b2lkIGRpc2NhcmRTZWFyY2hSZXN1bHRzKEVycm9yU3RyaW5nJiwgY29uc3Qg
U3RyaW5nJiBzZWFyY2hJZCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZXNvbHZlTm9kZShFcnJvclN0
cmluZyYsIGludCBub2RlSWQsIGNvbnN0IFN0cmluZyogb2JqZWN0R3JvdXAsIFJlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiByZXN1bHQpIG92ZXJyaWRl
OwotICAgIHZvaWQgZ2V0QXR0cmlidXRlcyhFcnJvclN0cmluZyYsIGludCBub2RlSWQsIFJlZlB0
cjxKU09OOjpBcnJheU9mPFN0cmluZz4+JiByZXN1bHQpIG92ZXJyaWRlOworICAgIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6RE9NOjpFdmVudExpc3RlbmVyPj4+IGdldEV2ZW50TGlzdGVuZXJzRm9yTm9kZShJ
bnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzZXRFdmVudExpc3RlbmVyRGlzYWJsZWQoSW5zcGVjdG9y
OjpQcm90b2NvbDo6RE9NOjpFdmVudExpc3RlbmVySWQsIGJvb2wpOworICAgIEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc2V0QnJlYWtwb2ludEZvckV2ZW50TGlzdGVu
ZXIoSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpFdmVudExpc3RlbmVySWQsIFJlZlB0cjxKU09O
OjpPYmplY3Q+JiYgb3B0aW9ucyk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJp
bmdPcjx2b2lkPiByZW1vdmVCcmVha3BvaW50Rm9yRXZlbnRMaXN0ZW5lcihJbnNwZWN0b3I6OlBy
b3RvY29sOjpET006OkV2ZW50TGlzdGVuZXJJZCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6
RXJyb3JTdHJpbmdPcjxSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5
UHJvcGVydGllcz4+IGdldEFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzRm9yTm9kZShJbnNwZWN0b3I6
OlByb3RvY29sOjpET006Ok5vZGVJZCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JT
dHJpbmdPcjxzdGQ6OnR1cGxlPFN0cmluZyAvKiBzZWFyY2hJZCAqLywgaW50IC8qIHJlc3VsdENv
dW50ICovPj4gcGVyZm9ybVNlYXJjaChjb25zdCBTdHJpbmcmIHF1ZXJ5LCBSZWZQdHI8SlNPTjo6
QXJyYXk+JiYgbm9kZUlkcywgT3B0aW9uYWw8Ym9vbD4mJiBjYXNlU2Vuc2l0aXZlKTsKKyAgICBJ
bnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkPj4+IGdldFNlYXJjaFJlc3VsdHMoY29uc3QgU3Ry
aW5nJiBzZWFyY2hJZCwgaW50IGZyb21JbmRleCwgaW50IHRvSW5kZXgpOworICAgIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZGlzY2FyZFNlYXJjaFJlc3VsdHMoY29u
c3QgU3RyaW5nJiBzZWFyY2hJZCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJp
bmdPcjxSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0Pj4gcmVz
b2x2ZU5vZGUoSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQsIGNvbnN0IFN0cmluZyYg
b2JqZWN0R3JvdXApOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVm
PEpTT046OkFycmF5T2Y8U3RyaW5nPj4+IGdldEF0dHJpYnV0ZXMoSW5zcGVjdG9yOjpQcm90b2Nv
bDo6RE9NOjpOb2RlSWQpOwogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgdm9pZCBzZXRJ
bnNwZWN0TW9kZUVuYWJsZWQoRXJyb3JTdHJpbmcmLCBib29sIGVuYWJsZWQsIGNvbnN0IEpTT046
Ok9iamVjdCogaGlnaGxpZ2h0Q29uZmlnKSBvdmVycmlkZTsKKyAgICBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHNldEluc3BlY3RNb2RlRW5hYmxlZChib29sLCBSZWZQ
dHI8SlNPTjo6T2JqZWN0PiYmIGhpZ2hsaWdodENvbmZpZyk7CiAjZWxzZQotICAgIHZvaWQgc2V0
SW5zcGVjdE1vZGVFbmFibGVkKEVycm9yU3RyaW5nJiwgYm9vbCBlbmFibGVkLCBjb25zdCBKU09O
OjpPYmplY3QqIGhpZ2hsaWdodENvbmZpZywgY29uc3QgYm9vbCogc2hvd1J1bGVycykgb3ZlcnJp
ZGU7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzZXRJbnNw
ZWN0TW9kZUVuYWJsZWQoYm9vbCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBoaWdobGlnaHRDb25m
aWcsIE9wdGlvbmFsPGJvb2w+JiYgc2hvd1J1bGVycyk7CiAjZW5kaWYKLSAgICB2b2lkIHJlcXVl
c3ROb2RlKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBvYmplY3RJZCwgaW50KiBub2RlSWQp
IG92ZXJyaWRlOwotICAgIHZvaWQgcHVzaE5vZGVCeVBhdGhUb0Zyb250ZW5kKEVycm9yU3RyaW5n
JiwgY29uc3QgU3RyaW5nJiBwYXRoLCBpbnQqIG5vZGVJZCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBo
aWRlSGlnaGxpZ2h0KEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBoaWdobGlnaHRS
ZWN0KEVycm9yU3RyaW5nJiwgaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGNv
bnN0IEpTT046Ok9iamVjdCogY29sb3IsIGNvbnN0IEpTT046Ok9iamVjdCogb3V0bGluZUNvbG9y
LCBjb25zdCBib29sKiB1c2VQYWdlQ29vcmRpbmF0ZXMpIG92ZXJyaWRlOwotICAgIHZvaWQgaGln
aGxpZ2h0UXVhZChFcnJvclN0cmluZyYsIGNvbnN0IEpTT046OkFycmF5JiBxdWFkLCBjb25zdCBK
U09OOjpPYmplY3QqIGNvbG9yLCBjb25zdCBKU09OOjpPYmplY3QqIG91dGxpbmVDb2xvciwgY29u
c3QgYm9vbCogdXNlUGFnZUNvb3JkaW5hdGVzKSBvdmVycmlkZTsKLSAgICB2b2lkIGhpZ2hsaWdo
dFNlbGVjdG9yKEVycm9yU3RyaW5nJiwgY29uc3QgSlNPTjo6T2JqZWN0JiBoaWdobGlnaHRDb25m
aWcsIGNvbnN0IFN0cmluZyYgc2VsZWN0b3JTdHJpbmcsIGNvbnN0IFN0cmluZyogZnJhbWVJZCkg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBoaWdobGlnaHROb2RlKEVycm9yU3RyaW5nJiwgY29uc3QgSlNP
Tjo6T2JqZWN0JiBoaWdobGlnaHRDb25maWcsIGNvbnN0IGludCogbm9kZUlkLCBjb25zdCBTdHJp
bmcqIG9iamVjdElkKSBvdmVycmlkZTsKLSAgICB2b2lkIGhpZ2hsaWdodE5vZGVMaXN0KEVycm9y
U3RyaW5nJiwgY29uc3QgSlNPTjo6QXJyYXkmIG5vZGVJZHMsIGNvbnN0IEpTT046Ok9iamVjdCYg
aGlnaGxpZ2h0Q29uZmlnKSBvdmVycmlkZTsKLSAgICB2b2lkIGhpZ2hsaWdodEZyYW1lKEVycm9y
U3RyaW5nJiwgY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBjb25zdCBKU09OOjpPYmplY3QqIGNvbG9y
LCBjb25zdCBKU09OOjpPYmplY3QqIG91dGxpbmVDb2xvcikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBt
b3ZlVG8oRXJyb3JTdHJpbmcmLCBpbnQgbm9kZUlkLCBpbnQgdGFyZ2V0Tm9kZUlkLCBjb25zdCBp
bnQqIGFuY2hvck5vZGVJZCwgaW50KiBuZXdOb2RlSWQpIG92ZXJyaWRlOwotICAgIHZvaWQgdW5k
byhFcnJvclN0cmluZyYpIG92ZXJyaWRlOwotICAgIHZvaWQgcmVkbyhFcnJvclN0cmluZyYpIG92
ZXJyaWRlOwotICAgIHZvaWQgbWFya1VuZG9hYmxlU3RhdGUoRXJyb3JTdHJpbmcmKSBvdmVycmlk
ZTsKLSAgICB2b2lkIGZvY3VzKEVycm9yU3RyaW5nJiwgaW50IG5vZGVJZCkgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCBzZXRJbnNwZWN0ZWROb2RlKEVycm9yU3RyaW5nJiwgaW50IG5vZGVJZCkgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCBzZXRBbGxvd0VkaXRpbmdVc2VyQWdlbnRTaGFkb3dUcmVlcyhFcnJvclN0
cmluZyYsIGJvb2wgYWxsb3cpIGZpbmFsOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQ+IHJlcXVlc3ROb2RlKGNv
bnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdElkJik7CisgICAg
SW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxJbnNwZWN0b3I6OlByb3RvY29sOjpE
T006Ok5vZGVJZD4gcHVzaE5vZGVCeVBhdGhUb0Zyb250ZW5kKGNvbnN0IFN0cmluZyYgcGF0aCk7
CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBoaWRlSGlnaGxp
Z2h0KCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBoaWdo
bGlnaHRSZWN0KGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBSZWZQdHI8SlNP
Tjo6T2JqZWN0PiYmIGNvbG9yLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIG91dGxpbmVDb2xvciwg
T3B0aW9uYWw8Ym9vbD4mJiB1c2VQYWdlQ29vcmRpbmF0ZXMpOworICAgIEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gaGlnaGxpZ2h0UXVhZChSZWY8SlNPTjo6QXJyYXk+
JiYgcXVhZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBjb2xvciwgUmVmUHRyPEpTT046Ok9iamVj
dD4mJiBvdXRsaW5lQ29sb3IsIE9wdGlvbmFsPGJvb2w+JiYgdXNlUGFnZUNvb3JkaW5hdGVzKTsK
KyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGhpZ2hsaWdodFNl
bGVjdG9yKFJlZjxKU09OOjpPYmplY3Q+JiYgaGlnaGxpZ2h0Q29uZmlnLCBjb25zdCBTdHJpbmcm
IHNlbGVjdG9yU3RyaW5nLCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpGcmFt
ZUlkJik7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBoaWdo
bGlnaHROb2RlKFJlZjxKU09OOjpPYmplY3Q+JiYgaGlnaGxpZ2h0Q29uZmlnLCBPcHRpb25hbDxJ
bnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZD4mJiwgY29uc3QgSW5zcGVjdG9yOjpQcm90
b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0SWQmKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29s
OjpFcnJvclN0cmluZ09yPHZvaWQ+IGhpZ2hsaWdodE5vZGVMaXN0KFJlZjxKU09OOjpBcnJheT4m
JiBub2RlSWRzLCBSZWY8SlNPTjo6T2JqZWN0PiYmIGhpZ2hsaWdodENvbmZpZyk7CisgICAgSW5z
cGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBoaWdobGlnaHRGcmFtZShjb25z
dCBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpGcmFtZUlkJiwgUmVmUHRyPEpTT046Ok9i
amVjdD4mJiBjb2xvciwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBvdXRsaW5lQ29sb3IpOworICAg
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8SW5zcGVjdG9yOjpQcm90b2NvbDo6
RE9NOjpOb2RlSWQ+IG1vdmVUbyhJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZCBub2Rl
SWQsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkIHRhcmdldE5vZGVJZCwgT3B0aW9u
YWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQ+JiYgaW5zZXJ0QmVmb3JlTm9kZUlk
KTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHVuZG8oKTsK
KyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHJlZG8oKTsKKyAg
ICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IG1hcmtVbmRvYWJsZVN0
YXRlKCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBmb2N1
cyhJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZCk7CisgICAgSW5zcGVjdG9yOjpQcm90
b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzZXRJbnNwZWN0ZWROb2RlKEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRPTTo6Tm9kZUlkKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmlu
Z09yPHZvaWQ+IHNldEFsbG93RWRpdGluZ1VzZXJBZ2VudFNoYWRvd1RyZWVzKGJvb2wpOwogCiAg
ICAgLy8gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uCi0gICAgaW50IGlkZW50aWZpZXJGb3JOb2Rl
KE5vZGUmKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZCBpZGVudGlmaWVy
Rm9yTm9kZShOb2RlJik7CiAgICAgdm9pZCBhZGRFdmVudExpc3RlbmVyc1RvTm9kZShOb2RlJik7
CiAgICAgdm9pZCBkaWRJbnNlcnRET01Ob2RlKE5vZGUmKTsKICAgICB2b2lkIGRpZFJlbW92ZURP
TU5vZGUoTm9kZSYpOwpAQCAtMTg1LDEyICsxODMsMTIgQEAgcHVibGljOgogCiAgICAgdm9pZCBz
dHlsZUF0dHJpYnV0ZUludmFsaWRhdGVkKGNvbnN0IFZlY3RvcjxFbGVtZW50Kj4mIGVsZW1lbnRz
KTsKIAotICAgIGludCBwdXNoTm9kZVRvRnJvbnRlbmQoTm9kZSopOwotICAgIGludCBwdXNoTm9k
ZVRvRnJvbnRlbmQoRXJyb3JTdHJpbmcmLCBpbnQgZG9jdW1lbnROb2RlSWQsIE5vZGUqKTsKLSAg
ICBpbnQgcHVzaE5vZGVQYXRoVG9Gcm9udGVuZChOb2RlKik7Ci0gICAgaW50IHB1c2hOb2RlUGF0
aFRvRnJvbnRlbmQoRXJyb3JTdHJpbmcsIE5vZGUqKTsKLSAgICBOb2RlKiBub2RlRm9ySWQoaW50
IG5vZGVJZCk7Ci0gICAgaW50IGJvdW5kTm9kZUlkKGNvbnN0IE5vZGUqKTsKKyAgICBJbnNwZWN0
b3I6OlByb3RvY29sOjpET006Ok5vZGVJZCBwdXNoTm9kZVRvRnJvbnRlbmQoTm9kZSopOworICAg
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkIHB1c2hOb2RlVG9Gcm9udGVuZChJbnNw
ZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZyYsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6
Tm9kZUlkIGRvY3VtZW50Tm9kZUlkLCBOb2RlKik7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6
RE9NOjpOb2RlSWQgcHVzaE5vZGVQYXRoVG9Gcm9udGVuZChOb2RlKik7CisgICAgSW5zcGVjdG9y
OjpQcm90b2NvbDo6RE9NOjpOb2RlSWQgcHVzaE5vZGVQYXRoVG9Gcm9udGVuZChJbnNwZWN0b3I6
OlByb3RvY29sOjpFcnJvclN0cmluZywgTm9kZSopOworICAgIE5vZGUqIG5vZGVGb3JJZChJbnNw
ZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6
RE9NOjpOb2RlSWQgYm91bmROb2RlSWQoY29uc3QgTm9kZSopOwogCiAgICAgUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4gcmVzb2x2ZU5vZGUoTm9kZSos
IGNvbnN0IFN0cmluZyYgb2JqZWN0R3JvdXApOwogICAgIGJvb2wgaGFuZGxlTW91c2VQcmVzcygp
OwpAQCAtMjAyLDEyICsyMDAsMTIgQEAgcHVibGljOgogICAgIFZlY3RvcjxEb2N1bWVudCo+IGRv
Y3VtZW50cygpOwogICAgIHZvaWQgcmVzZXQoKTsKIAotICAgIE5vZGUqIGFzc2VydE5vZGUoRXJy
b3JTdHJpbmcmLCBpbnQgbm9kZUlkKTsKLSAgICBFbGVtZW50KiBhc3NlcnRFbGVtZW50KEVycm9y
U3RyaW5nJiwgaW50IG5vZGVJZCk7Ci0gICAgRG9jdW1lbnQqIGFzc2VydERvY3VtZW50KEVycm9y
U3RyaW5nJiwgaW50IG5vZGVJZCk7CisgICAgTm9kZSogYXNzZXJ0Tm9kZShJbnNwZWN0b3I6OlBy
b3RvY29sOjpFcnJvclN0cmluZyYsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkKTsK
KyAgICBFbGVtZW50KiBhc3NlcnRFbGVtZW50KEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3Ry
aW5nJiwgSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQpOworICAgIERvY3VtZW50KiBh
c3NlcnREb2N1bWVudChJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZyYsIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkKTsKIAogICAgIFJlZlB0cjxKU0M6OkJyZWFrcG9pbnQ+
IGJyZWFrcG9pbnRGb3JFdmVudExpc3RlbmVyKEV2ZW50VGFyZ2V0JiwgY29uc3QgQXRvbVN0cmlu
ZyYgZXZlbnRUeXBlLCBFdmVudExpc3RlbmVyJiwgYm9vbCBjYXB0dXJlKTsKLSAgICBpbnQgaWRG
b3JFdmVudExpc3RlbmVyKEV2ZW50VGFyZ2V0JiwgY29uc3QgQXRvbVN0cmluZyYgZXZlbnRUeXBl
LCBFdmVudExpc3RlbmVyJiwgYm9vbCBjYXB0dXJlKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29s
OjpET006OkV2ZW50TGlzdGVuZXJJZCBpZEZvckV2ZW50TGlzdGVuZXIoRXZlbnRUYXJnZXQmLCBj
b25zdCBBdG9tU3RyaW5nJiBldmVudFR5cGUsIEV2ZW50TGlzdGVuZXImLCBib29sIGNhcHR1cmUp
OwogCiBwcml2YXRlOgogI2lmIEVOQUJMRShWSURFTykKQEAgLTIxNSwzMyArMjEzLDMzIEBAIHBy
aXZhdGU6CiAjZW5kaWYKIAogICAgIHZvaWQgaGlnaGxpZ2h0TW91c2VkT3Zlck5vZGUoKTsKLSAg
ICB2b2lkIHNldFNlYXJjaGluZ0Zvck5vZGUoRXJyb3JTdHJpbmcmLCBib29sIGVuYWJsZWQsIGNv
bnN0IEpTT046Ok9iamVjdCogaGlnaGxpZ2h0Q29uZmlnLCBib29sIHNob3dSdWxlcnMpOwotICAg
IHN0ZDo6dW5pcXVlX3B0cjxIaWdobGlnaHRDb25maWc+IGhpZ2hsaWdodENvbmZpZ0Zyb21JbnNw
ZWN0b3JPYmplY3QoRXJyb3JTdHJpbmcmLCBjb25zdCBKU09OOjpPYmplY3QqIGhpZ2hsaWdodElu
c3BlY3Rvck9iamVjdCk7CisgICAgdm9pZCBzZXRTZWFyY2hpbmdGb3JOb2RlKEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkVycm9yU3RyaW5nJiwgYm9vbCBlbmFibGVkLCBSZWZQdHI8SlNPTjo6T2JqZWN0
PiYmIGhpZ2hsaWdodENvbmZpZywgYm9vbCBzaG93UnVsZXJzKTsKKyAgICBzdGQ6OnVuaXF1ZV9w
dHI8SGlnaGxpZ2h0Q29uZmlnPiBoaWdobGlnaHRDb25maWdGcm9tSW5zcGVjdG9yT2JqZWN0KElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nJiwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBo
aWdobGlnaHRJbnNwZWN0b3JPYmplY3QpOwogCiAgICAgLy8gTm9kZS1yZWxhdGVkIG1ldGhvZHMu
Ci0gICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxOb2RlPiwgaW50PiBOb2RlVG9JZE1hcDsKLSAg
ICBpbnQgYmluZChOb2RlKiwgTm9kZVRvSWRNYXAqKTsKKyAgICB0eXBlZGVmIEhhc2hNYXA8UmVm
UHRyPE5vZGU+LCBJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZD4gTm9kZVRvSWRNYXA7
CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQgYmluZChOb2RlKiwgTm9kZVRv
SWRNYXAqKTsKICAgICB2b2lkIHVuYmluZChOb2RlKiwgTm9kZVRvSWRNYXAqKTsKIAotICAgIE5v
ZGUqIGFzc2VydEVkaXRhYmxlTm9kZShFcnJvclN0cmluZyYsIGludCBub2RlSWQpOwotICAgIEVs
ZW1lbnQqIGFzc2VydEVkaXRhYmxlRWxlbWVudChFcnJvclN0cmluZyYsIGludCBub2RlSWQpOwor
ICAgIE5vZGUqIGFzc2VydEVkaXRhYmxlTm9kZShJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0
cmluZyYsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkKTsKKyAgICBFbGVtZW50KiBh
c3NlcnRFZGl0YWJsZUVsZW1lbnQoSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBJ
bnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZCk7CiAKLSAgICB2b2lkIHB1c2hDaGlsZE5v
ZGVzVG9Gcm9udGVuZChpbnQgbm9kZUlkLCBpbnQgZGVwdGggPSAxKTsKKyAgICB2b2lkIHB1c2hD
aGlsZE5vZGVzVG9Gcm9udGVuZChJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZCwgaW50
IGRlcHRoID0gMSk7CiAKICAgICBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlPiBi
dWlsZE9iamVjdEZvck5vZGUoTm9kZSosIGludCBkZXB0aCwgTm9kZVRvSWRNYXAqKTsKICAgICBS
ZWY8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiBidWlsZEFycmF5Rm9yRWxlbWVudEF0dHJpYnV0ZXMo
RWxlbWVudCopOwogICAgIFJlZjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRP
TTo6Tm9kZT4+IGJ1aWxkQXJyYXlGb3JDb250YWluZXJDaGlsZHJlbihOb2RlKiBjb250YWluZXIs
IGludCBkZXB0aCwgTm9kZVRvSWRNYXAqIG5vZGVzTWFwKTsKICAgICBSZWZQdHI8SlNPTjo6QXJy
YXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+PiBidWlsZEFycmF5Rm9yUHNldWRv
RWxlbWVudHMoY29uc3QgRWxlbWVudCYsIE5vZGVUb0lkTWFwKiBub2Rlc01hcCk7Ci0gICAgUmVm
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6RXZlbnRMaXN0ZW5lcj4gYnVpbGRPYmplY3RGb3JF
dmVudExpc3RlbmVyKGNvbnN0IFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyJiwgaW50IGlkZW50aWZp
ZXIsIEV2ZW50VGFyZ2V0JiwgY29uc3QgQXRvbVN0cmluZyYgZXZlbnRUeXBlLCBib29sIGRpc2Fi
bGVkLCBjb25zdCBSZWZQdHI8SlNDOjpCcmVha3BvaW50PiYpOwotICAgIFJlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzPiBidWlsZE9iamVjdEZv
ckFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzKE5vZGUqKTsKLSAgICB2b2lkIHByb2Nlc3NBY2Nlc3Np
YmlsaXR5Q2hpbGRyZW4oQVhDb3JlT2JqZWN0JiwgSlNPTjo6QXJyYXlPZjxpbnQ+Jik7CisgICAg
UmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6RXZlbnRMaXN0ZW5lcj4gYnVpbGRPYmplY3RG
b3JFdmVudExpc3RlbmVyKGNvbnN0IFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyJiwgSW5zcGVjdG9y
OjpQcm90b2NvbDo6RE9NOjpFdmVudExpc3RlbmVySWQgaWRlbnRpZmllciwgRXZlbnRUYXJnZXQm
LCBjb25zdCBBdG9tU3RyaW5nJiBldmVudFR5cGUsIGJvb2wgZGlzYWJsZWQsIGNvbnN0IFJlZlB0
cjxKU0M6OkJyZWFrcG9pbnQ+Jik7CisgICAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6
QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM+IGJ1aWxkT2JqZWN0Rm9yQWNjZXNzaWJpbGl0eVByb3Bl
cnRpZXMoTm9kZSYpOworICAgIHZvaWQgcHJvY2Vzc0FjY2Vzc2liaWxpdHlDaGlsZHJlbihBWENv
cmVPYmplY3QmLCBKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlk
PiYpOwogICAgIAogICAgIE5vZGUqIG5vZGVGb3JQYXRoKGNvbnN0IFN0cmluZyYgcGF0aCk7Ci0g
ICAgTm9kZSogbm9kZUZvck9iamVjdElkKGNvbnN0IFN0cmluZyYgb2JqZWN0SWQpOworICAgIE5v
ZGUqIG5vZGVGb3JPYmplY3RJZChjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpS
ZW1vdGVPYmplY3RJZCYpOwogCiAgICAgdm9pZCBkaXNjYXJkQmluZGluZ3MoKTsKIAotICAgIHZv
aWQgaW5uZXJIaWdobGlnaHRRdWFkKHN0ZDo6dW5pcXVlX3B0cjxGbG9hdFF1YWQ+LCBjb25zdCBK
U09OOjpPYmplY3QqIGNvbG9yLCBjb25zdCBKU09OOjpPYmplY3QqIG91dGxpbmVDb2xvciwgY29u
c3QgYm9vbCogdXNlUGFnZUNvb3JkaW5hdGVzKTsKKyAgICB2b2lkIGlubmVySGlnaGxpZ2h0UXVh
ZChzdGQ6OnVuaXF1ZV9wdHI8RmxvYXRRdWFkPiwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBjb2xv
ciwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBvdXRsaW5lQ29sb3IsIE9wdGlvbmFsPGJvb2w+JiYg
dXNlUGFnZUNvb3JkaW5hdGVzKTsKIAogICAgIEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHRNYW5h
Z2VyJiBtX2luamVjdGVkU2NyaXB0TWFuYWdlcjsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW5zcGVj
dG9yOjpET01Gcm9udGVuZERpc3BhdGNoZXI+IG1fZnJvbnRlbmREaXNwYXRjaGVyOwpAQCAtMjUx
LDEwICsyNDksMTAgQEAgcHJpdmF0ZToKICAgICBOb2RlVG9JZE1hcCBtX2RvY3VtZW50Tm9kZVRv
SWRNYXA7CiAgICAgLy8gT3ducyBub2RlIG1hcHBpbmdzIGZvciBkYW5nbGluZyBub2Rlcy4KICAg
ICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPE5vZGVUb0lkTWFwPj4gbV9kYW5nbGluZ05vZGVUb0lk
TWFwczsKLSAgICBIYXNoTWFwPGludCwgTm9kZSo+IG1faWRUb05vZGU7Ci0gICAgSGFzaE1hcDxp
bnQsIE5vZGVUb0lkTWFwKj4gbV9pZFRvTm9kZXNNYXA7Ci0gICAgSGFzaFNldDxpbnQ+IG1fY2hp
bGRyZW5SZXF1ZXN0ZWQ7Ci0gICAgaW50IG1fbGFzdE5vZGVJZCB7IDEgfTsKKyAgICBIYXNoTWFw
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkLCBOb2RlKj4gbV9pZFRvTm9kZTsKKyAg
ICBIYXNoTWFwPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkLCBOb2RlVG9JZE1hcCo+
IG1faWRUb05vZGVzTWFwOworICAgIEhhc2hTZXQ8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpO
b2RlSWQ+IG1fY2hpbGRyZW5SZXF1ZXN0ZWQ7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9N
OjpOb2RlSWQgbV9sYXN0Tm9kZUlkIHsgMSB9OwogICAgIFJlZlB0cjxEb2N1bWVudD4gbV9kb2N1
bWVudDsKICAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBWZWN0b3I8UmVmUHRyPE5vZGU+Pj4g
U2VhcmNoUmVzdWx0czsKICAgICBTZWFyY2hSZXN1bHRzIG1fc2VhcmNoUmVzdWx0czsKQEAgLTI4
NSw3ICsyODMsNyBAQCBwcml2YXRlOgogI2VuZGlmCiAKICAgICBzdHJ1Y3QgSW5zcGVjdG9yRXZl
bnRMaXN0ZW5lciB7Ci0gICAgICAgIGludCBpZGVudGlmaWVyIHsgMSB9OworICAgICAgICBJbnNw
ZWN0b3I6OlByb3RvY29sOjpET006OkV2ZW50TGlzdGVuZXJJZCBpZGVudGlmaWVyIHsgMSB9Owog
ICAgICAgICBSZWZQdHI8RXZlbnRUYXJnZXQ+IGV2ZW50VGFyZ2V0OwogICAgICAgICBSZWZQdHI8
RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcjsKICAgICAgICAgQXRvbVN0cmluZyBldmVudFR5
cGU7CkBAIC0yOTUsNyArMjkzLDcgQEAgcHJpdmF0ZToKIAogICAgICAgICBJbnNwZWN0b3JFdmVu
dExpc3RlbmVyKCkgeyB9CiAKLSAgICAgICAgSW5zcGVjdG9yRXZlbnRMaXN0ZW5lcihpbnQgaWRl
bnRpZmllciwgRXZlbnRUYXJnZXQmIHRhcmdldCwgY29uc3QgQXRvbVN0cmluZyYgdHlwZSwgRXZl
bnRMaXN0ZW5lciYgbGlzdGVuZXIsIGJvb2wgY2FwdHVyZSkKKyAgICAgICAgSW5zcGVjdG9yRXZl
bnRMaXN0ZW5lcihJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkV2ZW50TGlzdGVuZXJJZCBpZGVu
dGlmaWVyLCBFdmVudFRhcmdldCYgdGFyZ2V0LCBjb25zdCBBdG9tU3RyaW5nJiB0eXBlLCBFdmVu
dExpc3RlbmVyJiBsaXN0ZW5lciwgYm9vbCBjYXB0dXJlKQogICAgICAgICAgICAgOiBpZGVudGlm
aWVyKGlkZW50aWZpZXIpCiAgICAgICAgICAgICAsIGV2ZW50VGFyZ2V0KCZ0YXJnZXQpCiAgICAg
ICAgICAgICAsIGV2ZW50TGlzdGVuZXIoJmxpc3RlbmVyKQpAQCAtMzIxLDggKzMxOSw4IEBAIHBy
aXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEV2ZW50RmlyZWRDYWxsYmFjazsKIAogICAgIEhhc2hT
ZXQ8Y29uc3QgRXZlbnQqPiBtX2Rpc3BhdGNoZWRFdmVudHM7Ci0gICAgSGFzaE1hcDxpbnQsIElu
c3BlY3RvckV2ZW50TGlzdGVuZXI+IG1fZXZlbnRMaXN0ZW5lckVudHJpZXM7Ci0gICAgaW50IG1f
bGFzdEV2ZW50TGlzdGVuZXJJZCB7IDEgfTsKKyAgICBIYXNoTWFwPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRPTTo6RXZlbnRMaXN0ZW5lcklkLCBJbnNwZWN0b3JFdmVudExpc3RlbmVyPiBtX2V2ZW50
TGlzdGVuZXJFbnRyaWVzOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6RXZlbnRMaXN0
ZW5lcklkIG1fbGFzdEV2ZW50TGlzdGVuZXJJZCB7IDEgfTsKIAogICAgIGJvb2wgbV9zZWFyY2hp
bmdGb3JOb2RlIHsgZmFsc2UgfTsKICAgICBib29sIG1fc3VwcHJlc3NBdHRyaWJ1dGVNb2RpZmll
ZEV2ZW50IHsgZmFsc2UgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9h
Z2VudHMvSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQuY3BwCmluZGV4IDA3OWExMTY4
NmU0OThiODQ3OTk1NTljZjNjZDhhZjJmN2MwOTE4MTcuLmMzMmU1YTM5MTRlNzlmMzBiYzE0ZTY4
ZGQ2Y2ZiZDMxYjAwNTQ5ZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9h
Z2VudHMvSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50LmNwcApAQCAtMTI4LDEw
OSArMTI4LDk0IEBAIHZvaWQgSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudDo6bWFpbkZyYW1lTmF2
aWdhdGVkKCkKICAgICAgICAgbV9wYXVzZU9uQWxsVGltZW91dHNCcmVha3BvaW50LT5yZXNldEhp
dENvdW50KCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudDo6c2V0RXZlbnRC
cmVha3BvaW50KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBicmVha3Bv
aW50VHlwZVN0cmluZywgY29uc3QgU3RyaW5nKiBldmVudE5hbWUsIGNvbnN0IEpTT046Ok9iamVj
dCogb3B0aW9uc1BheWxvYWQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0
b3JET01EZWJ1Z2dlckFnZW50OjpzZXRFdmVudEJyZWFrcG9pbnQoUHJvdG9jb2w6OkRPTURlYnVn
Z2VyOjpFdmVudEJyZWFrcG9pbnRUeXBlIGJyZWFrcG9pbnRUeXBlLCBjb25zdCBTdHJpbmcmIGV2
ZW50TmFtZSwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBvcHRpb25zKQogewotICAgIGlmIChicmVh
a3BvaW50VHlwZVN0cmluZy5pc0VtcHR5KCkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiYnJl
YWtwb2ludFR5cGUgaXMgZW1wdHkiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgUHJv
dG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOwogCi0gICAgYXV0byBicmVha3BvaW50VHlw
ZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6Okluc3BlY3RvckhlbHBlcnM6OnBhcnNlRW51bVZhbHVl
RnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpET01EZWJ1Z2dlcjo6RXZlbnRCcmVha3Bv
aW50VHlwZT4oYnJlYWtwb2ludFR5cGVTdHJpbmcpOwotICAgIGlmICghYnJlYWtwb2ludFR5cGUp
IHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSBtYWtlU3RyaW5nKCJVbmtub3duIGJyZWFrcG9pbnRU
eXBlOiAiX3MsIGJyZWFrcG9pbnRUeXBlU3RyaW5nKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIGF1dG8gYnJlYWtwb2ludCA9IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRlYnVnZ2Vy
QnJlYWtwb2ludEZyb21QYXlsb2FkKGVycm9yU3RyaW5nLCBvcHRpb25zUGF5bG9hZCk7CisgICAg
YXV0byBicmVha3BvaW50ID0gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGVidWdnZXJCcmVha3Bv
aW50RnJvbVBheWxvYWQoZXJyb3JTdHJpbmcsIFdURk1vdmUob3B0aW9ucykpOwogICAgIGlmICgh
YnJlYWtwb2ludCkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0
ZWQoZXJyb3JTdHJpbmcpOwogCi0gICAgaWYgKGV2ZW50TmFtZSAmJiAhZXZlbnROYW1lLT5pc0Vt
cHR5KCkpIHsKLSAgICAgICAgaWYgKGJyZWFrcG9pbnRUeXBlLnZhbHVlKCkgPT0gSW5zcGVjdG9y
OjpQcm90b2NvbDo6RE9NRGVidWdnZXI6OkV2ZW50QnJlYWtwb2ludFR5cGU6Okxpc3RlbmVyKSB7
Ci0gICAgICAgICAgICBpZiAoIW1fbGlzdGVuZXJCcmVha3BvaW50cy5hZGQoKmV2ZW50TmFtZSwg
YnJlYWtwb2ludC5yZWxlYXNlTm9uTnVsbCgpKSkKLSAgICAgICAgICAgICAgICBlcnJvclN0cmlu
ZyA9ICJCcmVha3BvaW50IHdpdGggZXZlbnROYW1lIGFscmVhZHkgZXhpc3RzIl9zOwotICAgICAg
ICAgICAgcmV0dXJuOworICAgIGlmICghZXZlbnROYW1lLmlzRW1wdHkoKSkgeworICAgICAgICBp
ZiAoYnJlYWtwb2ludFR5cGUgPT0gUHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpFdmVudEJyZWFrcG9p
bnRUeXBlOjpMaXN0ZW5lcikgeworICAgICAgICAgICAgaWYgKCFtX2xpc3RlbmVyQnJlYWtwb2lu
dHMuYWRkKGV2ZW50TmFtZSwgYnJlYWtwb2ludC5yZWxlYXNlTm9uTnVsbCgpKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkJyZWFrcG9pbnQgd2l0aCBldmVudE5hbWUg
YWxyZWFkeSBleGlzdHMiX3MpOworICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAgICAgfQog
Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIlVuZXhwZWN0ZWQgZXZlbnROYW1lIl9zOwotICAgICAg
ICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiVW5leHBlY3RlZCBldmVu
dE5hbWUiX3MpOwogICAgIH0KIAotICAgIHN3aXRjaCAoYnJlYWtwb2ludFR5cGUudmFsdWUoKSkg
ewotICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NRGVidWdnZXI6OkV2ZW50QnJlYWtw
b2ludFR5cGU6OkFuaW1hdGlvbkZyYW1lOgotICAgICAgICBzZXRBbmltYXRpb25GcmFtZUJyZWFr
cG9pbnQoZXJyb3JTdHJpbmcsIFdURk1vdmUoYnJlYWtwb2ludCkpOwotICAgICAgICBicmVhazsK
KyAgICBzd2l0Y2ggKGJyZWFrcG9pbnRUeXBlKSB7CisgICAgY2FzZSBQcm90b2NvbDo6RE9NRGVi
dWdnZXI6OkV2ZW50QnJlYWtwb2ludFR5cGU6OkFuaW1hdGlvbkZyYW1lOgorICAgICAgICBpZiAo
IXNldEFuaW1hdGlvbkZyYW1lQnJlYWtwb2ludChlcnJvclN0cmluZywgV1RGTW92ZShicmVha3Bv
aW50KSkpCisgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwor
ICAgICAgICByZXR1cm4geyB9OwogCi0gICAgY2FzZSBJbnNwZWN0b3I6OlByb3RvY29sOjpET01E
ZWJ1Z2dlcjo6RXZlbnRCcmVha3BvaW50VHlwZTo6SW50ZXJ2YWw6Ci0gICAgICAgIGlmICghbV9w
YXVzZU9uQWxsSW50ZXJ2YWxzQnJlYWtwb2ludCkKLSAgICAgICAgICAgIG1fcGF1c2VPbkFsbElu
dGVydmFsc0JyZWFrcG9pbnQgPSBXVEZNb3ZlKGJyZWFrcG9pbnQpOwotICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBlcnJvclN0cmluZyA9ICJCcmVha3BvaW50IGZvciBJbnRlcnZhbCBhbHJlYWR5
IGV4aXN0cyJfczsKLSAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQcm90b2NvbDo6RE9NRGVidWdn
ZXI6OkV2ZW50QnJlYWtwb2ludFR5cGU6OkludGVydmFsOgorICAgICAgICBpZiAobV9wYXVzZU9u
QWxsSW50ZXJ2YWxzQnJlYWtwb2ludCkKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3Rl
ZCgiQnJlYWtwb2ludCBmb3IgSW50ZXJ2YWwgYWxyZWFkeSBleGlzdHMiX3MpOworICAgICAgICBt
X3BhdXNlT25BbGxJbnRlcnZhbHNCcmVha3BvaW50ID0gV1RGTW92ZShicmVha3BvaW50KTsKKyAg
ICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NRGVi
dWdnZXI6OkV2ZW50QnJlYWtwb2ludFR5cGU6Okxpc3RlbmVyOgotICAgICAgICBpZiAoIW1fcGF1
c2VPbkFsbExpc3RlbmVyc0JyZWFrcG9pbnQpCi0gICAgICAgICAgICBtX3BhdXNlT25BbGxMaXN0
ZW5lcnNCcmVha3BvaW50ID0gV1RGTW92ZShicmVha3BvaW50KTsKLSAgICAgICAgZWxzZQotICAg
ICAgICAgICAgZXJyb3JTdHJpbmcgPSAiQnJlYWtwb2ludCBmb3IgTGlzdGVuZXIgYWxyZWFkeSBl
eGlzdHMiX3M7Ci0gICAgICAgIGJyZWFrOworICAgIGNhc2UgUHJvdG9jb2w6OkRPTURlYnVnZ2Vy
OjpFdmVudEJyZWFrcG9pbnRUeXBlOjpMaXN0ZW5lcjoKKyAgICAgICAgaWYgKG1fcGF1c2VPbkFs
bExpc3RlbmVyc0JyZWFrcG9pbnQpCisgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQo
IkJyZWFrcG9pbnQgZm9yIExpc3RlbmVyIGFscmVhZHkgZXhpc3RzIl9zKTsKKyAgICAgICAgbV9w
YXVzZU9uQWxsTGlzdGVuZXJzQnJlYWtwb2ludCA9IFdURk1vdmUoYnJlYWtwb2ludCk7CisgICAg
ICAgIHJldHVybiB7IH07CiAKLSAgICBjYXNlIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTURlYnVn
Z2VyOjpFdmVudEJyZWFrcG9pbnRUeXBlOjpUaW1lb3V0OgotICAgICAgICBpZiAoIW1fcGF1c2VP
bkFsbFRpbWVvdXRzQnJlYWtwb2ludCkKLSAgICAgICAgICAgIG1fcGF1c2VPbkFsbFRpbWVvdXRz
QnJlYWtwb2ludCA9IFdURk1vdmUoYnJlYWtwb2ludCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIGVycm9yU3RyaW5nID0gIkJyZWFrcG9pbnQgZm9yIFRpbWVvdXQgYWxyZWFkeSBleGlzdHMi
X3M7Ci0gICAgICAgIGJyZWFrOworICAgIGNhc2UgUHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpFdmVu
dEJyZWFrcG9pbnRUeXBlOjpUaW1lb3V0OgorICAgICAgICBpZiAobV9wYXVzZU9uQWxsVGltZW91
dHNCcmVha3BvaW50KQorICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJCcmVha3Bv
aW50IGZvciBUaW1lb3V0IGFscmVhZHkgZXhpc3RzIl9zKTsKKyAgICAgICAgbV9wYXVzZU9uQWxs
VGltZW91dHNCcmVha3BvaW50ID0gV1RGTW92ZShicmVha3BvaW50KTsKKyAgICAgICAgcmV0dXJu
IHsgfTsKICAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gbWFr
ZVVuZXhwZWN0ZWQoIk5vdCBzdXBwb3J0ZWQiKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01EZWJ1
Z2dlckFnZW50OjpyZW1vdmVFdmVudEJyZWFrcG9pbnQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5n
LCBjb25zdCBTdHJpbmcmIGJyZWFrcG9pbnRUeXBlU3RyaW5nLCBjb25zdCBTdHJpbmcqIGV2ZW50
TmFtZSkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRPTURlYnVnZ2Vy
QWdlbnQ6OnJlbW92ZUV2ZW50QnJlYWtwb2ludChQcm90b2NvbDo6RE9NRGVidWdnZXI6OkV2ZW50
QnJlYWtwb2ludFR5cGUgYnJlYWtwb2ludFR5cGUsIGNvbnN0IFN0cmluZyYgZXZlbnROYW1lKQog
ewotICAgIGlmIChicmVha3BvaW50VHlwZVN0cmluZy5pc0VtcHR5KCkpIHsKLSAgICAgICAgZXJy
b3JTdHJpbmcgPSAiYnJlYWtwb2ludFR5cGUgaXMgZW1wdHkiX3M7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOwogCi0gICAgYXV0
byBicmVha3BvaW50VHlwZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6Okluc3BlY3RvckhlbHBlcnM6
OnBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpET01EZWJ1Z2dl
cjo6RXZlbnRCcmVha3BvaW50VHlwZT4oYnJlYWtwb2ludFR5cGVTdHJpbmcpOwotICAgIGlmICgh
YnJlYWtwb2ludFR5cGUpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSBtYWtlU3RyaW5nKCJVbmtu
b3duIGJyZWFrcG9pbnRUeXBlOiAiX3MsIGJyZWFrcG9pbnRUeXBlU3RyaW5nKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIGlmIChldmVudE5hbWUgJiYgIWV2ZW50TmFtZS0+aXNFbXB0
eSgpKSB7Ci0gICAgICAgIGlmIChicmVha3BvaW50VHlwZS52YWx1ZSgpID09IEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpFdmVudEJyZWFrcG9pbnRUeXBlOjpMaXN0ZW5lcikgewot
ICAgICAgICAgICAgaWYgKCFtX2xpc3RlbmVyQnJlYWtwb2ludHMucmVtb3ZlKCpldmVudE5hbWUp
KQotICAgICAgICAgICAgICAgIGVycm9yU3RyaW5nID0gIkJyZWFrcG9pbnQgZm9yIGdpdmVuIGV2
ZW50TmFtZSBtaXNzaW5nIl9zOwotICAgICAgICAgICAgcmV0dXJuOworICAgIGlmICghZXZlbnRO
YW1lLmlzRW1wdHkoKSkgeworICAgICAgICBpZiAoYnJlYWtwb2ludFR5cGUgPT0gUHJvdG9jb2w6
OkRPTURlYnVnZ2VyOjpFdmVudEJyZWFrcG9pbnRUeXBlOjpMaXN0ZW5lcikgeworICAgICAgICAg
ICAgaWYgKCFtX2xpc3RlbmVyQnJlYWtwb2ludHMucmVtb3ZlKGV2ZW50TmFtZSkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJCcmVha3BvaW50IGZvciBnaXZlbiBldmVu
dE5hbWUgbWlzc2luZyJfcyk7CisgICAgICAgICAgICByZXR1cm4geyB9OwogICAgICAgICB9CiAK
LSAgICAgICAgZXJyb3JTdHJpbmcgPSAiVW5leHBlY3RlZCBldmVudE5hbWUiX3M7Ci0gICAgICAg
IHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJVbmV4cGVjdGVkIGV2ZW50
TmFtZSJfcyk7CiAgICAgfQogCi0gICAgc3dpdGNoIChicmVha3BvaW50VHlwZS52YWx1ZSgpKSB7
Ci0gICAgY2FzZSBJbnNwZWN0b3I6OlByb3RvY29sOjpET01EZWJ1Z2dlcjo6RXZlbnRCcmVha3Bv
aW50VHlwZTo6QW5pbWF0aW9uRnJhbWU6Ci0gICAgICAgIHNldEFuaW1hdGlvbkZyYW1lQnJlYWtw
b2ludChlcnJvclN0cmluZywgbnVsbHB0cik7Ci0gICAgICAgIGJyZWFrOworICAgIHN3aXRjaCAo
YnJlYWtwb2ludFR5cGUpIHsKKyAgICBjYXNlIFByb3RvY29sOjpET01EZWJ1Z2dlcjo6RXZlbnRC
cmVha3BvaW50VHlwZTo6QW5pbWF0aW9uRnJhbWU6CisgICAgICAgIGlmICghc2V0QW5pbWF0aW9u
RnJhbWVCcmVha3BvaW50KGVycm9yU3RyaW5nLCBudWxscHRyKSkKKyAgICAgICAgICAgIHJldHVy
biBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CisgICAgICAgIHJldHVybiB7IH07CiAKLSAg
ICBjYXNlIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpFdmVudEJyZWFrcG9pbnRU
eXBlOjpJbnRlcnZhbDoKKyAgICBjYXNlIFByb3RvY29sOjpET01EZWJ1Z2dlcjo6RXZlbnRCcmVh
a3BvaW50VHlwZTo6SW50ZXJ2YWw6CiAgICAgICAgIGlmICghbV9wYXVzZU9uQWxsSW50ZXJ2YWxz
QnJlYWtwb2ludCkKLSAgICAgICAgICAgIGVycm9yU3RyaW5nID0gIkJyZWFrcG9pbnQgZm9yIElu
dGVydmFscyBtaXNzaW5nIl9zOworICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJC
cmVha3BvaW50IGZvciBJbnRlcnZhbHMgbWlzc2luZyJfcyk7CiAgICAgICAgIG1fcGF1c2VPbkFs
bEludGVydmFsc0JyZWFrcG9pbnQgPSBudWxscHRyOwotICAgICAgICBicmVhazsKKyAgICAgICAg
cmV0dXJuIHsgfTsKIAotICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NRGVidWdnZXI6
OkV2ZW50QnJlYWtwb2ludFR5cGU6Okxpc3RlbmVyOgorICAgIGNhc2UgUHJvdG9jb2w6OkRPTURl
YnVnZ2VyOjpFdmVudEJyZWFrcG9pbnRUeXBlOjpMaXN0ZW5lcjoKICAgICAgICAgaWYgKCFtX3Bh
dXNlT25BbGxMaXN0ZW5lcnNCcmVha3BvaW50KQotICAgICAgICAgICAgZXJyb3JTdHJpbmcgPSAi
QnJlYWtwb2ludCBmb3IgTGlzdGVuZXJzIG1pc3NpbmciX3M7CisgICAgICAgICAgICByZXR1cm4g
bWFrZVVuZXhwZWN0ZWQoIkJyZWFrcG9pbnQgZm9yIExpc3RlbmVycyBtaXNzaW5nIl9zKTsKICAg
ICAgICAgbV9wYXVzZU9uQWxsTGlzdGVuZXJzQnJlYWtwb2ludCA9IG51bGxwdHI7Ci0gICAgICAg
IGJyZWFrOworICAgICAgICByZXR1cm4geyB9OwogCi0gICAgY2FzZSBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpET01EZWJ1Z2dlcjo6RXZlbnRCcmVha3BvaW50VHlwZTo6VGltZW91dDoKKyAgICBjYXNl
IFByb3RvY29sOjpET01EZWJ1Z2dlcjo6RXZlbnRCcmVha3BvaW50VHlwZTo6VGltZW91dDoKICAg
ICAgICAgaWYgKCFtX3BhdXNlT25BbGxUaW1lb3V0c0JyZWFrcG9pbnQpCi0gICAgICAgICAgICBl
cnJvclN0cmluZyA9ICJCcmVha3BvaW50IGZvciBUaW1lb3V0cyBtaXNzaW5nIl9zOworICAgICAg
ICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJCcmVha3BvaW50IGZvciBUaW1lb3V0cyBtaXNz
aW5nIl9zKTsKICAgICAgICAgbV9wYXVzZU9uQWxsVGltZW91dHNCcmVha3BvaW50ID0gbnVsbHB0
cjsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybiB7IH07CiAgICAgfQorCisgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJOb3Qgc3VwcG9y
dGVkIik7CiB9CiAKIHZvaWQgSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudDo6d2lsbEhhbmRsZUV2
ZW50KEV2ZW50JiBldmVudCwgY29uc3QgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXImIHJlZ2lzdGVy
ZWRFdmVudExpc3RlbmVyKQpAQCAtMzI5LDQ1ICszMTQsNTAgQEAgdm9pZCBJbnNwZWN0b3JET01E
ZWJ1Z2dlckFnZW50OjpkaWRGaXJlVGltZXIoYm9vbCBvbmVTaG90KQogICAgIG1fZGVidWdnZXJB
Z2VudC0+Y2FuY2VsUGF1c2VGb3JTcGVjaWFsQnJlYWtwb2ludCgqYnJlYWtwb2ludCk7CiB9CiAK
LXZvaWQgSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudDo6c2V0VVJMQnJlYWtwb2ludChFcnJvclN0
cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBib29sKiBvcHRpb25h
bElzUmVnZXgsIGNvbnN0IEpTT046Ok9iamVjdCogb3B0aW9uc1BheWxvYWQpCitQcm90b2NvbDo6
RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50OjpzZXRVUkxCcmVh
a3BvaW50KGNvbnN0IFN0cmluZyYgdXJsLCBPcHRpb25hbDxib29sPiYmIGlzUmVnZXgsIFJlZlB0
cjxKU09OOjpPYmplY3Q+JiYgb3B0aW9ucykKIHsKLSAgICBhdXRvIGJyZWFrcG9pbnQgPSBJbnNw
ZWN0b3JEZWJ1Z2dlckFnZW50OjpkZWJ1Z2dlckJyZWFrcG9pbnRGcm9tUGF5bG9hZChlcnJvclN0
cmluZywgb3B0aW9uc1BheWxvYWQpOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0
cmluZzsKKworICAgIGF1dG8gYnJlYWtwb2ludCA9IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRl
YnVnZ2VyQnJlYWtwb2ludEZyb21QYXlsb2FkKGVycm9yU3RyaW5nLCBXVEZNb3ZlKG9wdGlvbnMp
KTsKICAgICBpZiAoIWJyZWFrcG9pbnQpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJu
IG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgIGlmICh1cmwuaXNFbXB0eSgpKSB7
Ci0gICAgICAgIGlmICghbV9wYXVzZU9uQWxsVVJMc0JyZWFrcG9pbnQpCi0gICAgICAgICAgICBt
X3BhdXNlT25BbGxVUkxzQnJlYWtwb2ludCA9IFdURk1vdmUoYnJlYWtwb2ludCk7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIGVycm9yU3RyaW5nID0gIkJyZWFrcG9pbnQgZm9yIGFsbCBVUkxz
IGFscmVhZHkgZXhpc3RzIl9zOwotICAgICAgICByZXR1cm47CisgICAgICAgIGlmIChtX3BhdXNl
T25BbGxVUkxzQnJlYWtwb2ludCkKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgi
QnJlYWtwb2ludCBmb3IgYWxsIFVSTHMgYWxyZWFkeSBleGlzdHMiX3MpOworICAgICAgICBtX3Bh
dXNlT25BbGxVUkxzQnJlYWtwb2ludCA9IFdURk1vdmUoYnJlYWtwb2ludCk7CisgICAgICAgIHJl
dHVybiB7IH07CiAgICAgfQogCi0gICAgaWYgKG9wdGlvbmFsSXNSZWdleCAmJiAqb3B0aW9uYWxJ
c1JlZ2V4KSB7CisgICAgaWYgKGlzUmVnZXggJiYgKmlzUmVnZXgpIHsKICAgICAgICAgaWYgKCFt
X3VybFJlZ2V4QnJlYWtwb2ludHMuYWRkKHVybCwgYnJlYWtwb2ludC5yZWxlYXNlTm9uTnVsbCgp
KSkKLSAgICAgICAgICAgIGVycm9yU3RyaW5nID0gIkJyZWFrcG9pbnQgZm9yIGdpdmVuIHJlZ2V4
IGFscmVhZHkgZXhpc3RzIl9zOworICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJC
cmVha3BvaW50IGZvciBnaXZlbiByZWdleCBhbHJlYWR5IGV4aXN0cyJfcyk7CiAgICAgfSBlbHNl
IHsKICAgICAgICAgaWYgKCFtX3VybFRleHRCcmVha3BvaW50cy5hZGQodXJsLCBicmVha3BvaW50
LnJlbGVhc2VOb25OdWxsKCkpKQotICAgICAgICAgICAgZXJyb3JTdHJpbmcgPSAiQnJlYWtwb2lu
dCBmb3IgZ2l2ZW4gVVJMIGFscmVhZHkgZXhpc3RzIl9zOworICAgICAgICAgICAgcmV0dXJuIG1h
a2VVbmV4cGVjdGVkKCJCcmVha3BvaW50IGZvciBnaXZlbiBVUkwgYWxyZWFkeSBleGlzdHMiX3Mp
OwogICAgIH0KKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NRGVidWdn
ZXJBZ2VudDo6cmVtb3ZlVVJMQnJlYWtwb2ludChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNv
bnN0IFN0cmluZyYgdXJsLCBjb25zdCBib29sKiBvcHRpb25hbElzUmVnZXgpCitQcm90b2NvbDo6
RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50OjpyZW1vdmVVUkxC
cmVha3BvaW50KGNvbnN0IFN0cmluZyYgdXJsLCBPcHRpb25hbDxib29sPiYmIGlzUmVnZXgpCiB7
CiAgICAgaWYgKHVybC5pc0VtcHR5KCkpIHsKICAgICAgICAgaWYgKCFtX3BhdXNlT25BbGxVUkxz
QnJlYWtwb2ludCkKLSAgICAgICAgICAgIGVycm9yU3RyaW5nID0gIkJyZWFrcG9pbnQgZm9yIGFs
bCBVUkxzIG1pc3NpbmciX3M7CisgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkJy
ZWFrcG9pbnQgZm9yIGFsbCBVUkxzIG1pc3NpbmciX3MpOwogICAgICAgICBtX3BhdXNlT25BbGxV
UkxzQnJlYWtwb2ludCA9IG51bGxwdHI7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJu
IHsgfTsKICAgICB9CiAKLSAgICBpZiAob3B0aW9uYWxJc1JlZ2V4ICYmICpvcHRpb25hbElzUmVn
ZXgpIHsKKyAgICBpZiAoaXNSZWdleCAmJiAqaXNSZWdleCkgewogICAgICAgICBpZiAoIW1fdXJs
UmVnZXhCcmVha3BvaW50cy5yZW1vdmUodXJsKSkKLSAgICAgICAgICAgIGVycm9yU3RyaW5nID0g
Ik1pc3NpbmcgYnJlYWtwb2ludCBmb3IgZ2l2ZW4gcmVnZXgiX3M7CisgICAgICAgICAgICByZXR1
cm4gbWFrZVVuZXhwZWN0ZWQoIk1pc3NpbmcgYnJlYWtwb2ludCBmb3IgZ2l2ZW4gcmVnZXgiX3Mp
OwogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmICghbV91cmxUZXh0QnJlYWtwb2ludHMucmVtb3Zl
KHVybCkpCi0gICAgICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIGJyZWFrcG9pbnQgZm9y
IGdpdmVuIFVSTCJfczsKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTWlzc2lu
ZyBicmVha3BvaW50IGZvciBnaXZlbiBVUkwiX3MpOwogICAgIH0KKworICAgIHJldHVybiB7IH07
CiB9CiAKIHZvaWQgSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudDo6YnJlYWtPblVSTElmTmVlZGVk
KGNvbnN0IFN0cmluZyYgdXJsLCBVUkxCcmVha3BvaW50U291cmNlIHNvdXJjZSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NRGVidWdnZXJB
Z2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01EZWJ1
Z2dlckFnZW50LmgKaW5kZXggNGVjMGYwOGM5YjVhMWMyN2RkNDNlYTg1NDA0ZWNlNjJjOTM2ZjFm
YS4uODk2MDllY2ZjMGQ4Nzk2NzQxZDQ1NWEwM2U3ZGFjMDkxZThkY2M4ZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01EZWJ1
Z2dlckFnZW50LmgKQEAgLTUwLDggKzUwLDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3Mg
RXZlbnQ7CiBjbGFzcyBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lcjsKIAotdHlwZWRlZiBTdHJpbmcg
RXJyb3JTdHJpbmc7Ci0KIGNsYXNzIEluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQgOiBwdWJsaWMg
SW5zcGVjdG9yQWdlbnRCYXNlLCBwdWJsaWMgSW5zcGVjdG9yOjpET01EZWJ1Z2dlckJhY2tlbmRE
aXNwYXRjaGVySGFuZGxlciwgcHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yRGVidWdnZXJBZ2Vu
dDo6TGlzdGVuZXIgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEluc3BlY3RvckRPTURlYnVn
Z2VyQWdlbnQpOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwpAQCAtNjUsMTAgKzYzLDEw
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgZW5hYmxlZCgpIGNvbnN0OwogCiAgICAgLy8g
RE9NRGVidWdnZXJCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIKLSAgICB2b2lkIHNldFVSTEJyZWFr
cG9pbnQoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgYm9vbCogaXNSZWdl
eCwgY29uc3QgSlNPTjo6T2JqZWN0KiBvcHRpb25zKSBmaW5hbDsKLSAgICB2b2lkIHJlbW92ZVVS
TEJyZWFrcG9pbnQoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgYm9vbCog
aXNSZWdleCkgZmluYWw7Ci0gICAgdm9pZCBzZXRFdmVudEJyZWFrcG9pbnQoRXJyb3JTdHJpbmcm
LCBjb25zdCBTdHJpbmcmIGJyZWFrcG9pbnRUeXBlLCBjb25zdCBTdHJpbmcqIGV2ZW50TmFtZSwg
Y29uc3QgSlNPTjo6T2JqZWN0KiBvcHRpb25zKSBmaW5hbDsKLSAgICB2b2lkIHJlbW92ZUV2ZW50
QnJlYWtwb2ludChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgYnJlYWtwb2ludFR5cGUsIGNv
bnN0IFN0cmluZyogZXZlbnROYW1lKSBmaW5hbDsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpF
cnJvclN0cmluZ09yPHZvaWQ+IHNldFVSTEJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiB1cmwsIE9w
dGlvbmFsPGJvb2w+JiYgaXNSZWdleCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBvcHRpb25zKSBm
aW5hbDsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHJlbW92
ZVVSTEJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiB1cmwsIE9wdGlvbmFsPGJvb2w+JiYgaXNSZWdl
eCkgZmluYWw7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBz
ZXRFdmVudEJyZWFrcG9pbnQoSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NRGVidWdnZXI6OkV2ZW50
QnJlYWtwb2ludFR5cGUsIGNvbnN0IFN0cmluZyYgZXZlbnROYW1lLCBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiYmIG9wdGlvbnMpIGZpbmFsOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3Ry
aW5nT3I8dm9pZD4gcmVtb3ZlRXZlbnRCcmVha3BvaW50KEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRP
TURlYnVnZ2VyOjpFdmVudEJyZWFrcG9pbnRUeXBlLCBjb25zdCBTdHJpbmcmIGV2ZW50TmFtZSkg
ZmluYWw7CiAKICAgICAvLyBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpMaXN0ZW5lcgogICAgIHZv
aWQgZGVidWdnZXJXYXNFbmFibGVkKCkgb3ZlcnJpZGU7CkBAIC04OCw3ICs4Niw3IEBAIHByb3Rl
Y3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgZW5hYmxlKCk7CiAgICAgdmlydHVhbCB2b2lkIGRpc2Fi
bGUoKTsKIAotICAgIHZpcnR1YWwgdm9pZCBzZXRBbmltYXRpb25GcmFtZUJyZWFrcG9pbnQoRXJy
b3JTdHJpbmcmLCBSZWZQdHI8SlNDOjpCcmVha3BvaW50PiYmKSA9IDA7CisgICAgdmlydHVhbCBi
b29sIHNldEFuaW1hdGlvbkZyYW1lQnJlYWtwb2ludChJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJv
clN0cmluZyYsIFJlZlB0cjxKU0M6OkJyZWFrcG9pbnQ+JiYpID0gMDsKIAogICAgIEluc3BlY3Rv
cjo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudCogbV9kZWJ1Z2dlckFnZW50IHsgbnVsbHB0ciB9Owog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRP
TVN0b3JhZ2VBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3Bl
Y3RvckRPTVN0b3JhZ2VBZ2VudC5jcHAKaW5kZXggZTU5MWU5MTY5ZGYzMDQ1NDU2MjBiNTQwMzJi
NjJmYTJiYWRlY2I2ZS4uMDNhN2ZkMDhkMjA1N2MyMmNhY2RjZjg1MDU4ZjFlNGRmMDRkZDdmMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01T
dG9yYWdlQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5z
cGVjdG9yRE9NU3RvcmFnZUFnZW50LmNwcApAQCAtNzAsNDEgKzcwLDM5IEBAIHZvaWQgSW5zcGVj
dG9yRE9NU3RvcmFnZUFnZW50OjpkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9y
OjpGcm9udGVuZFJvCiAKIHZvaWQgSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50Ojp3aWxsRGVzdHJv
eUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24pCiB7Ci0gICAg
RXJyb3JTdHJpbmcgaWdub3JlZDsKLSAgICBkaXNhYmxlKGlnbm9yZWQpOworICAgIGRpc2FibGUo
KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OmVuYWJsZShFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JE
T01TdG9yYWdlQWdlbnQ6OmVuYWJsZSgpCiB7Ci0gICAgaWYgKG1faW5zdHJ1bWVudGluZ0FnZW50
cy5lbmFibGVkRE9NU3RvcmFnZUFnZW50KCkgPT0gdGhpcykgewotICAgICAgICBlcnJvclN0cmlu
ZyA9ICJET01TdG9yYWdlIGRvbWFpbiBhbHJlYWR5IGVuYWJsZWQiX3M7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9CisgICAgaWYgKG1faW5zdHJ1bWVudGluZ0FnZW50cy5lbmFibGVkRE9NU3RvcmFn
ZUFnZW50KCkgPT0gdGhpcykKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJET01TdG9y
YWdlIGRvbWFpbiBhbHJlYWR5IGVuYWJsZWQiX3MpOwogCiAgICAgbV9pbnN0cnVtZW50aW5nQWdl
bnRzLnNldEVuYWJsZWRET01TdG9yYWdlQWdlbnQodGhpcyk7CisKKyAgICByZXR1cm4geyB9Owog
fQogCi12b2lkIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6ZGlzYWJsZShFcnJvclN0cmluZyYg
ZXJyb3JTdHJpbmcpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JET01T
dG9yYWdlQWdlbnQ6OmRpc2FibGUoKQogewotICAgIGlmIChtX2luc3RydW1lbnRpbmdBZ2VudHMu
ZW5hYmxlZERPTVN0b3JhZ2VBZ2VudCgpICE9IHRoaXMpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcg
PSAiRE9NU3RvcmFnZSBkb21haW4gYWxyZWFkeSBkaXNhYmxlZCJfczsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KKyAgICBpZiAobV9pbnN0cnVtZW50aW5nQWdlbnRzLmVuYWJsZWRET01TdG9yYWdl
QWdlbnQoKSAhPSB0aGlzKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkRPTVN0b3Jh
Z2UgZG9tYWluIGFscmVhZHkgZGlzYWJsZWQiX3MpOwogCiAgICAgbV9pbnN0cnVtZW50aW5nQWdl
bnRzLnNldEVuYWJsZWRET01TdG9yYWdlQWdlbnQobnVsbHB0cik7CisKKyAgICByZXR1cm4geyB9
OwogfQogCi12b2lkIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6Z2V0RE9NU3RvcmFnZUl0ZW1z
KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgSlNPTjo6T2JqZWN0JiBzdG9yYWdlSWQs
IFJlZlB0cjxKU09OOjpBcnJheU9mPEpTT046OkFycmF5T2Y8U3RyaW5nPj4+JiBpdGVtcykKK1By
b3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpET01TdG9y
YWdlOjpJdGVtPj4+IEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6Z2V0RE9NU3RvcmFnZUl0ZW1z
KFJlZjxKU09OOjpPYmplY3Q+JiYgc3RvcmFnZUlkKQogeworICAgIFByb3RvY29sOjpFcnJvclN0
cmluZyBlcnJvclN0cmluZzsKKwogICAgIEZyYW1lKiBmcmFtZTsKLSAgICBSZWZQdHI8U3RvcmFn
ZUFyZWE+IHN0b3JhZ2VBcmVhID0gZmluZFN0b3JhZ2VBcmVhKGVycm9yU3RyaW5nLCBzdG9yYWdl
SWQsIGZyYW1lKTsKLSAgICBpZiAoIXN0b3JhZ2VBcmVhKSB7Ci0gICAgICAgIGVycm9yU3RyaW5n
ID0gIk1pc3Npbmcgc3RvcmFnZSBmb3IgZ2l2ZW4gc3RvcmFnZUlkIl9zOwotICAgICAgICByZXR1
cm47Ci0gICAgfQorICAgIFJlZlB0cjxTdG9yYWdlQXJlYT4gc3RvcmFnZUFyZWEgPSBmaW5kU3Rv
cmFnZUFyZWEoZXJyb3JTdHJpbmcsIFdURk1vdmUoc3RvcmFnZUlkKSwgZnJhbWUpOworICAgIGlm
ICghc3RvcmFnZUFyZWEpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmlu
Zyk7CiAKICAgICBhdXRvIHN0b3JhZ2VJdGVtcyA9IEpTT046OkFycmF5T2Y8SlNPTjo6QXJyYXlP
ZjxTdHJpbmc+Pjo6Y3JlYXRlKCk7Ci0KICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3Rv
cmFnZUFyZWEtPmxlbmd0aCgpOyArK2kpIHsKICAgICAgICAgU3RyaW5nIGtleSA9IHN0b3JhZ2VB
cmVhLT5rZXkoaSk7CiAgICAgICAgIFN0cmluZyB2YWx1ZSA9IHN0b3JhZ2VBcmVhLT5pdGVtKGtl
eSk7CkBAIC0xMTQsNDcgKzExMiw1MiBAQCB2b2lkIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6
Z2V0RE9NU3RvcmFnZUl0ZW1zKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29ucwogICAgICAg
ICBlbnRyeS0+YWRkSXRlbSh2YWx1ZSk7CiAgICAgICAgIHN0b3JhZ2VJdGVtcy0+YWRkSXRlbShX
VEZNb3ZlKGVudHJ5KSk7CiAgICAgfQotCi0gICAgaXRlbXMgPSBXVEZNb3ZlKHN0b3JhZ2VJdGVt
cyk7CisgICAgcmV0dXJuIFdURk1vdmUoc3RvcmFnZUl0ZW1zKTsKIH0KIAotdm9pZCBJbnNwZWN0
b3JET01TdG9yYWdlQWdlbnQ6OnNldERPTVN0b3JhZ2VJdGVtKEVycm9yU3RyaW5nJiBlcnJvclN0
cmluZywgY29uc3QgSlNPTjo6T2JqZWN0JiBzdG9yYWdlSWQsIGNvbnN0IFN0cmluZyYga2V5LCBj
b25zdCBTdHJpbmcmIHZhbHVlKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVj
dG9yRE9NU3RvcmFnZUFnZW50OjpzZXRET01TdG9yYWdlSXRlbShSZWY8SlNPTjo6T2JqZWN0PiYm
IHN0b3JhZ2VJZCwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7Cisg
ICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAgICAgRnJhbWUqIGZyYW1l
OwotICAgIFJlZlB0cjxTdG9yYWdlQXJlYT4gc3RvcmFnZUFyZWEgPSBmaW5kU3RvcmFnZUFyZWEo
ZXJyb3JTdHJpbmcsIHN0b3JhZ2VJZCwgZnJhbWUpOwotICAgIGlmICghc3RvcmFnZUFyZWEpIHsK
LSAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWlzc2luZyBzdG9yYWdlIGZvciBnaXZlbiBzdG9yYWdl
SWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgUmVmUHRyPFN0b3JhZ2VBcmVhPiBz
dG9yYWdlQXJlYSA9IGZpbmRTdG9yYWdlQXJlYShlcnJvclN0cmluZywgV1RGTW92ZShzdG9yYWdl
SWQpLCBmcmFtZSk7CisgICAgaWYgKCFzdG9yYWdlQXJlYSkKKyAgICAgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgIGJvb2wgcXVvdGFFeGNlcHRpb24gPSBmYWxz
ZTsKICAgICBzdG9yYWdlQXJlYS0+c2V0SXRlbShmcmFtZSwga2V5LCB2YWx1ZSwgcXVvdGFFeGNl
cHRpb24pOwogICAgIGlmIChxdW90YUV4Y2VwdGlvbikKLSAgICAgICAgZXJyb3JTdHJpbmcgPSBE
T01FeGNlcHRpb246Om5hbWUoUXVvdGFFeGNlZWRlZEVycm9yKTsKKyAgICAgICAgcmV0dXJuIG1h
a2VVbmV4cGVjdGVkKERPTUV4Y2VwdGlvbjo6bmFtZShRdW90YUV4Y2VlZGVkRXJyb3IpKTsKKwor
ICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjpyZW1v
dmVET01TdG9yYWdlSXRlbShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IEpTT046Ok9i
amVjdCYgc3RvcmFnZUlkLCBjb25zdCBTdHJpbmcmIGtleSkKK1Byb3RvY29sOjpFcnJvclN0cmlu
Z09yPHZvaWQ+IEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6cmVtb3ZlRE9NU3RvcmFnZUl0ZW0o
UmVmPEpTT046Ok9iamVjdD4mJiBzdG9yYWdlSWQsIGNvbnN0IFN0cmluZyYga2V5KQogeworICAg
IFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIEZyYW1lKiBmcmFtZTsK
LSAgICBSZWZQdHI8U3RvcmFnZUFyZWE+IHN0b3JhZ2VBcmVhID0gZmluZFN0b3JhZ2VBcmVhKGVy
cm9yU3RyaW5nLCBzdG9yYWdlSWQsIGZyYW1lKTsKLSAgICBpZiAoIXN0b3JhZ2VBcmVhKSB7Ci0g
ICAgICAgIGVycm9yU3RyaW5nID0gIk1pc3Npbmcgc3RvcmFnZSBmb3IgZ2l2ZW4gc3RvcmFnZUlk
Il9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIFJlZlB0cjxTdG9yYWdlQXJlYT4gc3Rv
cmFnZUFyZWEgPSBmaW5kU3RvcmFnZUFyZWEoZXJyb3JTdHJpbmcsIFdURk1vdmUoc3RvcmFnZUlk
KSwgZnJhbWUpOworICAgIGlmICghc3RvcmFnZUFyZWEpCisgICAgICAgIHJldHVybiBtYWtlVW5l
eHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAgICBzdG9yYWdlQXJlYS0+cmVtb3ZlSXRlbShmcmFt
ZSwga2V5KTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NU3RvcmFn
ZUFnZW50OjpjbGVhckRPTVN0b3JhZ2VJdGVtcyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNv
bnN0IEpTT046Ok9iamVjdCYgc3RvcmFnZUlkKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9p
ZD4gSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjpjbGVhckRPTVN0b3JhZ2VJdGVtcyhSZWY8SlNP
Tjo6T2JqZWN0PiYmIHN0b3JhZ2VJZCkKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJy
b3JTdHJpbmc7CisKICAgICBGcmFtZSogZnJhbWU7Ci0gICAgYXV0byBzdG9yYWdlQXJlYSA9IGZp
bmRTdG9yYWdlQXJlYShlcnJvclN0cmluZywgc3RvcmFnZUlkLCBmcmFtZSk7Ci0gICAgaWYgKCFz
dG9yYWdlQXJlYSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIHN0b3JhZ2UgZm9y
IGdpdmVuIHN0b3JhZ2VJZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBhdXRvIHN0
b3JhZ2VBcmVhID0gZmluZFN0b3JhZ2VBcmVhKGVycm9yU3RyaW5nLCBXVEZNb3ZlKHN0b3JhZ2VJ
ZCksIGZyYW1lKTsKKyAgICBpZiAoIXN0b3JhZ2VBcmVhKQorICAgICAgICByZXR1cm4gbWFrZVVu
ZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCiAgICAgc3RvcmFnZUFyZWEtPmNsZWFyKGZyYW1lKTsK
KworICAgIHJldHVybiB7IH07CiB9CiAKIFN0cmluZyBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6
OnN0b3JhZ2VJZChTdG9yYWdlJiBzdG9yYWdlKQpAQCAtMTY4LDkgKzE3MSw5IEBAIFN0cmluZyBJ
bnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OnN0b3JhZ2VJZChTdG9yYWdlJiBzdG9yYWdlKQogICAg
IHJldHVybiBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OnN0b3JhZ2VJZChzZWN1cml0eU9yaWdp
bi5wdHIoKSwgaXNMb2NhbFN0b3JhZ2UpLT50b0pTT05TdHJpbmcoKTsKIH0KIAotUmVmUHRyPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkRPTVN0b3JhZ2U6OlN0b3JhZ2VJZD4gSW5zcGVjdG9yRE9NU3Rv
cmFnZUFnZW50OjpzdG9yYWdlSWQoU2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2luLCBib29s
IGlzTG9jYWxTdG9yYWdlKQorUmVmPFByb3RvY29sOjpET01TdG9yYWdlOjpTdG9yYWdlSWQ+IElu
c3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6c3RvcmFnZUlkKFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0
eU9yaWdpbiwgYm9vbCBpc0xvY2FsU3RvcmFnZSkKIHsKLSAgICByZXR1cm4gSW5zcGVjdG9yOjpQ
cm90b2NvbDo6RE9NU3RvcmFnZTo6U3RvcmFnZUlkOjpjcmVhdGUoKQorICAgIHJldHVybiBQcm90
b2NvbDo6RE9NU3RvcmFnZTo6U3RvcmFnZUlkOjpjcmVhdGUoKQogICAgICAgICAuc2V0U2VjdXJp
dHlPcmlnaW4oc2VjdXJpdHlPcmlnaW4tPnRvUmF3U3RyaW5nKCkpCiAgICAgICAgIC5zZXRJc0xv
Y2FsU3RvcmFnZShpc0xvY2FsU3RvcmFnZSkKICAgICAgICAgLnJlbGVhc2UoKTsKQEAgLTE3OCwy
OCArMTgxLDI4IEBAIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpET01TdG9yYWdlOjpTdG9y
YWdlSWQ+IEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6c3RvCiAKIHZvaWQgSW5zcGVjdG9yRE9N
U3RvcmFnZUFnZW50OjpkaWREaXNwYXRjaERPTVN0b3JhZ2VFdmVudChjb25zdCBTdHJpbmcmIGtl
eSwgY29uc3QgU3RyaW5nJiBvbGRWYWx1ZSwgY29uc3QgU3RyaW5nJiBuZXdWYWx1ZSwgU3RvcmFn
ZVR5cGUgc3RvcmFnZVR5cGUsIFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbikKIHsKLSAg
ICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NU3RvcmFnZTo6U3RvcmFnZUlkPiBpZCA9
IEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6c3RvcmFnZUlkKHNlY3VyaXR5T3JpZ2luLCBzdG9y
YWdlVHlwZSA9PSBTdG9yYWdlVHlwZTo6TG9jYWwpOworICAgIGF1dG8gaWQgPSBJbnNwZWN0b3JE
T01TdG9yYWdlQWdlbnQ6OnN0b3JhZ2VJZChzZWN1cml0eU9yaWdpbiwgc3RvcmFnZVR5cGUgPT0g
U3RvcmFnZVR5cGU6OkxvY2FsKTsKIAogICAgIGlmIChrZXkuaXNOdWxsKCkpCi0gICAgICAgIG1f
ZnJvbnRlbmREaXNwYXRjaGVyLT5kb21TdG9yYWdlSXRlbXNDbGVhcmVkKGlkKTsKKyAgICAgICAg
bV9mcm9udGVuZERpc3BhdGNoZXItPmRvbVN0b3JhZ2VJdGVtc0NsZWFyZWQoV1RGTW92ZShpZCkp
OwogICAgIGVsc2UgaWYgKG5ld1ZhbHVlLmlzTnVsbCgpKQotICAgICAgICBtX2Zyb250ZW5kRGlz
cGF0Y2hlci0+ZG9tU3RvcmFnZUl0ZW1SZW1vdmVkKGlkLCBrZXkpOworICAgICAgICBtX2Zyb250
ZW5kRGlzcGF0Y2hlci0+ZG9tU3RvcmFnZUl0ZW1SZW1vdmVkKFdURk1vdmUoaWQpLCBrZXkpOwog
ICAgIGVsc2UgaWYgKG9sZFZhbHVlLmlzTnVsbCgpKQotICAgICAgICBtX2Zyb250ZW5kRGlzcGF0
Y2hlci0+ZG9tU3RvcmFnZUl0ZW1BZGRlZChpZCwga2V5LCBuZXdWYWx1ZSk7CisgICAgICAgIG1f
ZnJvbnRlbmREaXNwYXRjaGVyLT5kb21TdG9yYWdlSXRlbUFkZGVkKFdURk1vdmUoaWQpLCBrZXks
IG5ld1ZhbHVlKTsKICAgICBlbHNlCi0gICAgICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5kb21T
dG9yYWdlSXRlbVVwZGF0ZWQoaWQsIGtleSwgb2xkVmFsdWUsIG5ld1ZhbHVlKTsKKyAgICAgICAg
bV9mcm9udGVuZERpc3BhdGNoZXItPmRvbVN0b3JhZ2VJdGVtVXBkYXRlZChXVEZNb3ZlKGlkKSwg
a2V5LCBvbGRWYWx1ZSwgbmV3VmFsdWUpOwogfQogCi1SZWZQdHI8U3RvcmFnZUFyZWE+IEluc3Bl
Y3RvckRPTVN0b3JhZ2VBZ2VudDo6ZmluZFN0b3JhZ2VBcmVhKEVycm9yU3RyaW5nJiBlcnJvclN0
cmluZywgY29uc3QgSlNPTjo6T2JqZWN0JiBzdG9yYWdlSWQsIEZyYW1lKiYgdGFyZ2V0RnJhbWUp
CitSZWZQdHI8U3RvcmFnZUFyZWE+IEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6ZmluZFN0b3Jh
Z2VBcmVhKFByb3RvY29sOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIFJlZjxKU09OOjpPYmpl
Y3Q+JiYgc3RvcmFnZUlkLCBGcmFtZSomIHRhcmdldEZyYW1lKQogewotICAgIFN0cmluZyBzZWN1
cml0eU9yaWdpbjsKLSAgICBpZiAoIXN0b3JhZ2VJZC5nZXRTdHJpbmcoInNlY3VyaXR5T3JpZ2lu
Il9zLCBzZWN1cml0eU9yaWdpbikpIHsKKyAgICBhdXRvIHNlY3VyaXR5T3JpZ2luID0gc3RvcmFn
ZUlkLT5nZXRTdHJpbmcoUHJvdG9jb2w6OkRPTVN0b3JhZ2U6OlN0b3JhZ2VJZDo6c2VjdXJpdHlP
cmlnaW5LZXkpOworICAgIGlmICghc2VjdXJpdHlPcmlnaW4pIHsKICAgICAgICAgZXJyb3JTdHJp
bmcgPSAiTWlzc2luZyBzZWN1cml0eU9yaWdpbiBpbiBnaXZlbiBzdG9yYWdlSWQiOwogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKLSAgICBib29sIGlzTG9jYWxTdG9yYWdlID0gZmFs
c2U7Ci0gICAgaWYgKCFzdG9yYWdlSWQuZ2V0Qm9vbGVhbigiaXNMb2NhbFN0b3JhZ2UiX3MsIGlz
TG9jYWxTdG9yYWdlKSkgeworICAgIGF1dG8gaXNMb2NhbFN0b3JhZ2UgPSBzdG9yYWdlSWQtPmdl
dEJvb2xlYW4oUHJvdG9jb2w6OkRPTVN0b3JhZ2U6OlN0b3JhZ2VJZDo6aXNMb2NhbFN0b3JhZ2VL
ZXkpOworICAgIGlmICghaXNMb2NhbFN0b3JhZ2UpIHsKICAgICAgICAgZXJyb3JTdHJpbmcgPSAi
TWlzc2luZyBpc0xvY2FsU3RvcmFnZSBpbiBnaXZlbiBzdG9yYWdlSWQiOwogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKICAgICB9CkBAIC0yMTAsNyArMjEzLDcgQEAgUmVmUHRyPFN0b3JhZ2VBcmVh
PiBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OmZpbmRTdG9yYWdlQXJlYShFcnJvclN0cmluZyYg
ZXJyb3IKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCi0gICAgaWYgKCFpc0xvY2Fs
U3RvcmFnZSkKKyAgICBpZiAoISppc0xvY2FsU3RvcmFnZSkKICAgICAgICAgcmV0dXJuIG1faW5z
cGVjdGVkUGFnZS5zZXNzaW9uU3RvcmFnZSgpLT5zdG9yYWdlQXJlYSh0YXJnZXRGcmFtZS0+ZG9j
dW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKS5kYXRhKCkpOwogICAgIHJldHVybiBtX2luc3BlY3Rl
ZFBhZ2Uuc3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyKCkubG9jYWxTdG9yYWdlQXJlYSgqdGFyZ2V0
RnJhbWUtPmRvY3VtZW50KCkpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2FnZW50cy9JbnNwZWN0b3JET01TdG9yYWdlQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50LmgKaW5kZXggZGRiYjVkNTM0
N2YzYmVhYmUzY2ZhYjIwMWQ2ODM4Yzg5NmQyMWUzOS4uMzM4NmNiODc5ZjExNzhjMWI5NjM1Nzc1
YzlhMGU4NjRmNWI5NGM1MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Fn
ZW50cy9JbnNwZWN0b3JET01TdG9yYWdlQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTVN0b3JhZ2VBZ2VudC5oCkBAIC00NSwzNiArNDUsMzQg
QEAgY2xhc3MgUGFnZTsKIGNsYXNzIFNlY3VyaXR5T3JpZ2luOwogY2xhc3MgU3RvcmFnZTsKIAot
dHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7Ci0KIGNsYXNzIEluc3BlY3RvckRPTVN0b3JhZ2VB
Z2VudCBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3JBZ2VudEJhc2UsIHB1YmxpYyBJbnNwZWN0b3I6
OkRPTVN0b3JhZ2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewogICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudCk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CiBwdWJsaWM6CiAgICAgSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50KFBhZ2VBZ2VudENv
bnRleHQmKTsKLSAgICB+SW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50KCkgb3ZlcnJpZGU7CisgICAg
fkluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudCgpOwogCiAgICAgLy8gSW5zcGVjdG9yQWdlbnRCYXNl
Ci0gICAgdm9pZCBkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9udGVu
ZFJvdXRlciosIEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXIqKSBvdmVycmlkZTsKLSAgICB2
b2lkIHdpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlzY29ubmVjdFJl
YXNvbikgb3ZlcnJpZGU7CisgICAgdm9pZCBkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5z
cGVjdG9yOjpGcm9udGVuZFJvdXRlciosIEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXIqKTsK
KyAgICB2b2lkIHdpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlzY29u
bmVjdFJlYXNvbik7CiAKICAgICAvLyBET01TdG9yYWdlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVy
Ci0gICAgdm9pZCBlbmFibGUoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2b2lkIGRpc2Fi
bGUoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2b2lkIGdldERPTVN0b3JhZ2VJdGVtcyhF
cnJvclN0cmluZyYsIGNvbnN0IEpTT046Ok9iamVjdCYgc3RvcmFnZUlkLCBSZWZQdHI8SlNPTjo6
QXJyYXlPZjxKU09OOjpBcnJheU9mPFN0cmluZz4+PiYgaXRlbXMpIG92ZXJyaWRlOwotICAgIHZv
aWQgc2V0RE9NU3RvcmFnZUl0ZW0oRXJyb3JTdHJpbmcmLCBjb25zdCBKU09OOjpPYmplY3QmIHN0
b3JhZ2VJZCwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUpIG92ZXJyaWRl
OwotICAgIHZvaWQgcmVtb3ZlRE9NU3RvcmFnZUl0ZW0oRXJyb3JTdHJpbmcmLCBjb25zdCBKU09O
OjpPYmplY3QmIHN0b3JhZ2VJZCwgY29uc3QgU3RyaW5nJiBrZXkpIG92ZXJyaWRlOwotICAgIHZv
aWQgY2xlYXJET01TdG9yYWdlSXRlbXMoRXJyb3JTdHJpbmcmLCBjb25zdCBKU09OOjpPYmplY3Qm
IHN0b3JhZ2VJZCkgb3ZlcnJpZGU7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJp
bmdPcjx2b2lkPiBlbmFibGUoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmlu
Z09yPHZvaWQ+IGRpc2FibGUoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmlu
Z09yPFJlZjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTVN0b3JhZ2U6Okl0
ZW0+Pj4gZ2V0RE9NU3RvcmFnZUl0ZW1zKFJlZjxKU09OOjpPYmplY3Q+JiYgc3RvcmFnZUlkKTsK
KyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHNldERPTVN0b3Jh
Z2VJdGVtKFJlZjxKU09OOjpPYmplY3Q+JiYgc3RvcmFnZUlkLCBjb25zdCBTdHJpbmcmIGtleSwg
Y29uc3QgU3RyaW5nJiB2YWx1ZSk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJp
bmdPcjx2b2lkPiByZW1vdmVET01TdG9yYWdlSXRlbShSZWY8SlNPTjo6T2JqZWN0PiYmIHN0b3Jh
Z2VJZCwgY29uc3QgU3RyaW5nJiBrZXkpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8dm9pZD4gY2xlYXJET01TdG9yYWdlSXRlbXMoUmVmPEpTT046Ok9iamVjdD4mJiBz
dG9yYWdlSWQpOwogCiAgICAgLy8gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uCiAgICAgdm9pZCBk
aWREaXNwYXRjaERPTVN0b3JhZ2VFdmVudChjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5n
JiBvbGRWYWx1ZSwgY29uc3QgU3RyaW5nJiBuZXdWYWx1ZSwgU3RvcmFnZVR5cGUsIFNlY3VyaXR5
T3JpZ2luKik7CiAKICAgICAvLyBDb21tYW5kTGluZUFQSQogICAgIHN0YXRpYyBTdHJpbmcgc3Rv
cmFnZUlkKFN0b3JhZ2UmKTsKLSAgICBzdGF0aWMgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRPTVN0b3JhZ2U6OlN0b3JhZ2VJZD4gc3RvcmFnZUlkKFNlY3VyaXR5T3JpZ2luKiwgYm9vbCBp
c0xvY2FsU3RvcmFnZSk7CisgICAgc3RhdGljIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET01T
dG9yYWdlOjpTdG9yYWdlSWQ+IHN0b3JhZ2VJZChTZWN1cml0eU9yaWdpbiosIGJvb2wgaXNMb2Nh
bFN0b3JhZ2UpOwogCiBwcml2YXRlOgotICAgIFJlZlB0cjxTdG9yYWdlQXJlYT4gZmluZFN0b3Jh
Z2VBcmVhKEVycm9yU3RyaW5nJiwgY29uc3QgSlNPTjo6T2JqZWN0JiwgRnJhbWUqJik7CisgICAg
UmVmUHRyPFN0b3JhZ2VBcmVhPiBmaW5kU3RvcmFnZUFyZWEoSW5zcGVjdG9yOjpQcm90b2NvbDo6
RXJyb3JTdHJpbmcmLCBSZWY8SlNPTjo6T2JqZWN0PiYmIHN0b3JhZ2VJZCwgRnJhbWUqJik7CiAK
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW5zcGVjdG9yOjpET01TdG9yYWdlRnJvbnRlbmREaXNwYXRj
aGVyPiBtX2Zyb250ZW5kRGlzcGF0Y2hlcjsKICAgICBSZWZQdHI8SW5zcGVjdG9yOjpET01TdG9y
YWdlQmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRhdGFiYXNlQWdlbnQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JEYXRhYmFzZUFnZW50
LmNwcAppbmRleCA0YjlhNTVkZTU1N2JlOTQ2NzE2ZjVlMDIxMTE0NDM3MTE4MmQ2ZDUyLi4yOWMx
MTRmMjY3NjgzZDI1MDY1MjdhZDdjZjlkNTdmYmIxZTkyZjNjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRhdGFiYXNlQWdlbnQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5j
cHAKQEAgLTU5LDcgKzU5LDcgQEAgbmFtZXNwYWNlIHsKIAogdm9pZCByZXBvcnRUcmFuc2FjdGlv
bkZhaWxlZChFeGVjdXRlU1FMQ2FsbGJhY2smIHJlcXVlc3RDYWxsYmFjaywgU1FMRXJyb3ImIGVy
cm9yKQogewotICAgIGF1dG8gZXJyb3JPYmplY3QgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRh
YmFzZTo6RXJyb3I6OmNyZWF0ZSgpCisgICAgYXV0byBlcnJvck9iamVjdCA9IFByb3RvY29sOjpE
YXRhYmFzZTo6RXJyb3I6OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRNZXNzYWdlKGVycm9yLm1lc3Nh
Z2VJc29sYXRlZENvcHkoKSkKICAgICAgICAgLnNldENvZGUoZXJyb3IuY29kZSgpKQogICAgICAg
ICAucmVsZWFzZSgpOwpAQCAtMjMwLDUxICsyMzAsNDggQEAgdm9pZCBJbnNwZWN0b3JEYXRhYmFz
ZUFnZW50OjpkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9udGVuZFJv
dXQKIAogdm9pZCBJbnNwZWN0b3JEYXRhYmFzZUFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5k
QmFja2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24pCiB7Ci0gICAgRXJyb3JTdHJpbmcg
aWdub3JlZDsKLSAgICBkaXNhYmxlKGlnbm9yZWQpOworICAgIGRpc2FibGUoKTsKIH0KIAotdm9p
ZCBJbnNwZWN0b3JEYXRhYmFzZUFnZW50OjplbmFibGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5n
KQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yRGF0YWJhc2VBZ2VudDo6
ZW5hYmxlKCkKIHsKLSAgICBpZiAobV9pbnN0cnVtZW50aW5nQWdlbnRzLmVuYWJsZWREYXRhYmFz
ZUFnZW50KCkgPT0gdGhpcykgewotICAgICAgICBlcnJvclN0cmluZyA9ICJEYXRhYmFzZSBkb21h
aW4gYWxyZWFkeSBlbmFibGVkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICht
X2luc3RydW1lbnRpbmdBZ2VudHMuZW5hYmxlZERhdGFiYXNlQWdlbnQoKSA9PSB0aGlzKQorICAg
ICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkRhdGFiYXNlIGRvbWFpbiBhbHJlYWR5IGVuYWJs
ZWQiX3MpOwogCiAgICAgbV9pbnN0cnVtZW50aW5nQWdlbnRzLnNldEVuYWJsZWREYXRhYmFzZUFn
ZW50KHRoaXMpOwogCiAgICAgZm9yIChhdXRvJiBkYXRhYmFzZSA6IERhdGFiYXNlVHJhY2tlcjo6
c2luZ2xldG9uKCkub3BlbkRhdGFiYXNlcygpKQogICAgICAgICBkaWRPcGVuRGF0YWJhc2UoZGF0
YWJhc2UuZ2V0KCkpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JEYXRh
YmFzZUFnZW50OjpkaXNhYmxlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZykKK1Byb3RvY29sOjpF
cnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRhdGFiYXNlQWdlbnQ6OmRpc2FibGUoKQogewot
ICAgIGlmIChtX2luc3RydW1lbnRpbmdBZ2VudHMuZW5hYmxlZERhdGFiYXNlQWdlbnQoKSAhPSB0
aGlzKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIkRhdGFiYXNlIGRvbWFpbiBhbHJlYWR5IGRp
c2FibGVkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmIChtX2luc3RydW1lbnRp
bmdBZ2VudHMuZW5hYmxlZERhdGFiYXNlQWdlbnQoKSAhPSB0aGlzKQorICAgICAgICByZXR1cm4g
bWFrZVVuZXhwZWN0ZWQoIkRhdGFiYXNlIGRvbWFpbiBhbHJlYWR5IGRpc2FibGVkIl9zKTsKIAog
ICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy5zZXRFbmFibGVkRGF0YWJhc2VBZ2VudChudWxscHRy
KTsKIAogICAgIG1fcmVzb3VyY2VzLmNsZWFyKCk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12
b2lkIEluc3BlY3RvckRhdGFiYXNlQWdlbnQ6OmdldERhdGFiYXNlVGFibGVOYW1lcyhFcnJvclN0
cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VJZCwgUmVmUHRyPEpTT046
OkFycmF5T2Y8U3RyaW5nPj4mIG5hbWVzKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEpT
T046OkFycmF5T2Y8U3RyaW5nPj4+IEluc3BlY3RvckRhdGFiYXNlQWdlbnQ6OmdldERhdGFiYXNl
VGFibGVOYW1lcyhjb25zdCBQcm90b2NvbDo6RGF0YWJhc2U6OkRhdGFiYXNlSWQmIGRhdGFiYXNl
SWQpCiB7Ci0gICAgaWYgKG1faW5zdHJ1bWVudGluZ0FnZW50cy5lbmFibGVkRGF0YWJhc2VBZ2Vu
dCgpICE9IHRoaXMpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiRGF0YWJhc2UgZG9tYWluIG11
c3QgYmUgZW5hYmxlZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG5hbWVzID0g
SlNPTjo6QXJyYXlPZjxTdHJpbmc+OjpjcmVhdGUoKTsKKyAgICBpZiAobV9pbnN0cnVtZW50aW5n
QWdlbnRzLmVuYWJsZWREYXRhYmFzZUFnZW50KCkgIT0gdGhpcykKKyAgICAgICAgcmV0dXJuIG1h
a2VVbmV4cGVjdGVkKCJEYXRhYmFzZSBkb21haW4gbXVzdCBiZSBlbmFibGVkIl9zKTsKIAorICAg
IGF1dG8gbmFtZXMgPSBKU09OOjpBcnJheU9mPFN0cmluZz46OmNyZWF0ZSgpOwogICAgIGlmIChh
dXRvKiBkYXRhYmFzZSA9IGRhdGFiYXNlRm9ySWQoZGF0YWJhc2VJZCkpIHsKICAgICAgICAgZm9y
IChhdXRvJiB0YWJsZU5hbWUgOiBkYXRhYmFzZS0+dGFibGVOYW1lcygpKQogICAgICAgICAgICAg
bmFtZXMtPmFkZEl0ZW0odGFibGVOYW1lKTsKICAgICB9CisgICAgcmV0dXJuIFdURk1vdmUobmFt
ZXMpOwogfQogCi12b2lkIEluc3BlY3RvckRhdGFiYXNlQWdlbnQ6OmV4ZWN1dGVTUUwoY29uc3Qg
U3RyaW5nJiBkYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIHF1ZXJ5LCBSZWY8RXhlY3V0ZVNRTENh
bGxiYWNrPiYmIHJlcXVlc3RDYWxsYmFjaykKK3ZvaWQgSW5zcGVjdG9yRGF0YWJhc2VBZ2VudDo6
ZXhlY3V0ZVNRTChjb25zdCBQcm90b2NvbDo6RGF0YWJhc2U6OkRhdGFiYXNlSWQmIGRhdGFiYXNl
SWQsIGNvbnN0IFN0cmluZyYgcXVlcnksIFJlZjxFeGVjdXRlU1FMQ2FsbGJhY2s+JiYgcmVxdWVz
dENhbGxiYWNrKQogewogICAgIGlmIChtX2luc3RydW1lbnRpbmdBZ2VudHMuZW5hYmxlZERhdGFi
YXNlQWdlbnQoKSAhPSB0aGlzKSB7CiAgICAgICAgIHJlcXVlc3RDYWxsYmFjay0+c2VuZEZhaWx1
cmUoIkRhdGFiYXNlIGRvbWFpbiBtdXN0IGJlIGVuYWJsZWQiX3MpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JEYXRhYmFzZUFnZW50LmggYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRhdGFiYXNlQWdlbnQuaApp
bmRleCA0MzA1MDMxOTFjZGNiOTg3OWZkYjY1NTEzOWMxNGJiNzdhNzM3NDJmLi4wMWNlZjQzOWI0
YWM2ZGFkMmU0MTI2YjU0MzQxNmM1Mzk0MzJjYmM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRhdGFiYXNlQWdlbnQuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRhdGFiYXNlQWdlbnQuaApAQCAtNDEs
MjQgKzQxLDIyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIERhdGFiYXNlOwogY2xhc3Mg
SW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZTsKIAotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7
Ci0KIGNsYXNzIEluc3BlY3RvckRhdGFiYXNlQWdlbnQgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9y
QWdlbnRCYXNlLCBwdWJsaWMgSW5zcGVjdG9yOjpEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFu
ZGxlciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW5zcGVjdG9yRGF0YWJhc2VBZ2VudCk7
CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgSW5zcGVjdG9yRGF0
YWJhc2VBZ2VudChXZWJBZ2VudENvbnRleHQmKTsKLSAgICB+SW5zcGVjdG9yRGF0YWJhc2VBZ2Vu
dCgpIG92ZXJyaWRlOworICAgIH5JbnNwZWN0b3JEYXRhYmFzZUFnZW50KCk7CiAKICAgICAvLyBJ
bnNwZWN0b3JBZ2VudEJhc2UKLSAgICB2b2lkIGRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJ
bnNwZWN0b3I6OkZyb250ZW5kUm91dGVyKiwgSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlciop
IG92ZXJyaWRlOwotICAgIHZvaWQgd2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVj
dG9yOjpEaXNjb25uZWN0UmVhc29uKSBvdmVycmlkZTsKKyAgICB2b2lkIGRpZENyZWF0ZUZyb250
ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kUm91dGVyKiwgSW5zcGVjdG9yOjpCYWNr
ZW5kRGlzcGF0Y2hlciopOworICAgIHZvaWQgd2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQo
SW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKTsKIAogICAgIC8vIERhdGFiYXNlQmFja2VuZERp
c3BhdGNoZXJIYW5kbGVyCi0gICAgdm9pZCBlbmFibGUoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsK
LSAgICB2b2lkIGRpc2FibGUoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2b2lkIGdldERh
dGFiYXNlVGFibGVOYW1lcyhFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VJZCwg
UmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4mIG5hbWVzKSBvdmVycmlkZTsKLSAgICB2b2lk
IGV4ZWN1dGVTUUwoY29uc3QgU3RyaW5nJiBkYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIHF1ZXJ5
LCBSZWY8RXhlY3V0ZVNRTENhbGxiYWNrPiYmKSBvdmVycmlkZTsKKyAgICBJbnNwZWN0b3I6OlBy
b3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGVuYWJsZSgpOworICAgIEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZGlzYWJsZSgpOworICAgIEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEpTT046OkFycmF5T2Y8U3RyaW5nPj4+IGdldERhdGFi
YXNlVGFibGVOYW1lcyhjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RGF0YWJh
c2VJZCYpOworICAgIHZvaWQgZXhlY3V0ZVNRTChjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpE
YXRhYmFzZTo6RGF0YWJhc2VJZCYsIGNvbnN0IFN0cmluZyYgcXVlcnksIFJlZjxFeGVjdXRlU1FM
Q2FsbGJhY2s+JiYpOwogCiAgICAgLy8gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uCiAgICAgdm9p
ZCBkaWRDb21taXRMb2FkKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
YWdlbnRzL0luc3BlY3RvckluZGV4ZWREQkFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9hZ2VudHMvSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQuY3BwCmluZGV4IGZmOGYzMGY0MDNm
ODVjN2RkYmUzMWIxMGUwM2NlZjVmY2RmN2YwMDYuLmExNDVlMDRlYjIxOGRlOGE0MmZmODk4Mjk4
YjhiZWE2ODJjNGVkZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2Vu
dHMvSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9hZ2VudHMvSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQuY3BwCkBAIC03MCwyNiArNzAsNiBA
QAogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdDb25j
YXRlbmF0ZU51bWJlcnMuaD4KIAotdXNpbmcgSlNPTjo6QXJyYXlPZjsKLXVzaW5nIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkluZGV4ZWREQjo6RGF0YWJhc2VXaXRoT2JqZWN0U3RvcmVzOwotdXNpbmcg
SW5zcGVjdG9yOjpQcm90b2NvbDo6SW5kZXhlZERCOjpEYXRhRW50cnk7Ci11c2luZyBJbnNwZWN0
b3I6OlByb3RvY29sOjpJbmRleGVkREI6OktleTsKLXVzaW5nIEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkluZGV4ZWREQjo6S2V5UGF0aDsKLXVzaW5nIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkluZGV4ZWRE
Qjo6S2V5UmFuZ2U7Ci11c2luZyBJbnNwZWN0b3I6OlByb3RvY29sOjpJbmRleGVkREI6Ok9iamVj
dFN0b3JlOwotdXNpbmcgSW5zcGVjdG9yOjpQcm90b2NvbDo6SW5kZXhlZERCOjpPYmplY3RTdG9y
ZUluZGV4OwotCi10eXBlZGVmIEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNr
QmFzZSBSZXF1ZXN0Q2FsbGJhY2s7Ci10eXBlZGVmIEluc3BlY3Rvcjo6SW5kZXhlZERCQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyOjpSZXF1ZXN0RGF0YWJhc2VOYW1lc0NhbGxiYWNrIFJlcXVlc3RE
YXRhYmFzZU5hbWVzQ2FsbGJhY2s7Ci10eXBlZGVmIEluc3BlY3Rvcjo6SW5kZXhlZERCQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyOjpSZXF1ZXN0RGF0YWJhc2VDYWxsYmFjayBSZXF1ZXN0RGF0YWJh
c2VDYWxsYmFjazsKLXR5cGVkZWYgSW5zcGVjdG9yOjpJbmRleGVkREJCYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXI6OlJlcXVlc3REYXRhQ2FsbGJhY2sgUmVxdWVzdERhdGFDYWxsYmFjazsKLXR5cGVk
ZWYgSW5zcGVjdG9yOjpJbmRleGVkREJCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkNsZWFyT2Jq
ZWN0U3RvcmVDYWxsYmFjayBDbGVhck9iamVjdFN0b3JlQ2FsbGJhY2s7Ci0KLXR5cGVkZWYgU3Ry
aW5nIEVycm9yU3RyaW5nOwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLXVzaW5nIEVycm9yU3Ry
aW5nT3IgPSBFeHBlY3RlZDxULCBFcnJvclN0cmluZz47Ci0KIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKQEAgLTEwMyw3ICs4Myw3IEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIH5FeGVjdXRhYmxlV2l0aERhdGFiYXNlKCkgPSBkZWZhdWx0OwogICAgIHZv
aWQgc3RhcnQoSURCRmFjdG9yeSosIFNlY3VyaXR5T3JpZ2luKiwgY29uc3QgU3RyaW5nJiBkYXRh
YmFzZU5hbWUpOwogICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlKElEQkRhdGFiYXNlJikgPSAwOwot
ICAgIHZpcnR1YWwgUmVxdWVzdENhbGxiYWNrJiByZXF1ZXN0Q2FsbGJhY2soKSA9IDA7CisgICAg
dmlydHVhbCBCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlJiByZXF1ZXN0Q2FsbGJhY2so
KSA9IDA7CiAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCgpIGNvbnN0IHsgcmV0
dXJuIG1fY29udGV4dDsgfQogcHJpdmF0ZToKICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBt
X2NvbnRleHQ7CkBAIC0xNzEsMjAgKzE1MSwyMCBAQCB2b2lkIEV4ZWN1dGFibGVXaXRoRGF0YWJh
c2U6OnN0YXJ0KElEQkZhY3RvcnkqIGlkYkZhY3RvcnksIFNlY3VyaXR5T3JpZ2luKiwgY29ucwog
fQogCiAKLXN0YXRpYyBSZWZQdHI8S2V5UGF0aD4ga2V5UGF0aEZyb21JREJLZXlQYXRoKGNvbnN0
IE9wdGlvbmFsPElEQktleVBhdGg+JiBpZGJLZXlQYXRoKQorc3RhdGljIFJlZjxQcm90b2NvbDo6
SW5kZXhlZERCOjpLZXlQYXRoPiBrZXlQYXRoRnJvbUlEQktleVBhdGgoY29uc3QgT3B0aW9uYWw8
SURCS2V5UGF0aD4mIGlkYktleVBhdGgpCiB7CiAgICAgaWYgKCFpZGJLZXlQYXRoKQotICAgICAg
ICByZXR1cm4gS2V5UGF0aDo6Y3JlYXRlKCkuc2V0VHlwZShLZXlQYXRoOjpUeXBlOjpOdWxsKS5y
ZWxlYXNlKCk7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6SW5kZXhlZERCOjpLZXlQYXRoOjpj
cmVhdGUoKS5zZXRUeXBlKFByb3RvY29sOjpJbmRleGVkREI6OktleVBhdGg6OlR5cGU6Ok51bGwp
LnJlbGVhc2UoKTsKIAogICAgIGF1dG8gdmlzaXRvciA9IFdURjo6bWFrZVZpc2l0b3IoW10oY29u
c3QgU3RyaW5nJiBzdHJpbmcpIHsKLSAgICAgICAgYXV0byBrZXlQYXRoID0gS2V5UGF0aDo6Y3Jl
YXRlKCkuc2V0VHlwZShLZXlQYXRoOjpUeXBlOjpTdHJpbmcpLnJlbGVhc2UoKTsKKyAgICAgICAg
YXV0byBrZXlQYXRoID0gUHJvdG9jb2w6OkluZGV4ZWREQjo6S2V5UGF0aDo6Y3JlYXRlKCkuc2V0
VHlwZShQcm90b2NvbDo6SW5kZXhlZERCOjpLZXlQYXRoOjpUeXBlOjpTdHJpbmcpLnJlbGVhc2Uo
KTsKICAgICAgICAga2V5UGF0aC0+c2V0U3RyaW5nKHN0cmluZyk7CiAgICAgICAgIHJldHVybiBr
ZXlQYXRoOwogICAgIH0sIFtdKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiB2ZWN0b3IpIHsKICAgICAg
ICAgYXV0byBhcnJheSA9IEpTT046OkFycmF5T2Y8U3RyaW5nPjo6Y3JlYXRlKCk7CiAgICAgICAg
IGZvciAoYXV0byYgc3RyaW5nIDogdmVjdG9yKQogICAgICAgICAgICAgYXJyYXktPmFkZEl0ZW0o
c3RyaW5nKTsKLSAgICAgICAgYXV0byBrZXlQYXRoID0gS2V5UGF0aDo6Y3JlYXRlKCkuc2V0VHlw
ZShLZXlQYXRoOjpUeXBlOjpBcnJheSkucmVsZWFzZSgpOworICAgICAgICBhdXRvIGtleVBhdGgg
PSBQcm90b2NvbDo6SW5kZXhlZERCOjpLZXlQYXRoOjpjcmVhdGUoKS5zZXRUeXBlKFByb3RvY29s
OjpJbmRleGVkREI6OktleVBhdGg6OlR5cGU6OkFycmF5KS5yZWxlYXNlKCk7CiAgICAgICAgIGtl
eVBhdGgtPnNldEFycmF5KFdURk1vdmUoYXJyYXkpKTsKICAgICAgICAgcmV0dXJuIGtleVBhdGg7
CiAgICAgfSk7CkBAIC0yMTcsNyArMTk3LDcgQEAgc3RhdGljIFJlZlB0cjxJREJJbmRleD4gaW5k
ZXhGb3JPYmplY3RTdG9yZShJREJPYmplY3RTdG9yZSogaWRiT2JqZWN0U3RvcmUsIGNvbnMKIAog
Y2xhc3MgRGF0YWJhc2VMb2FkZXIgZmluYWwgOiBwdWJsaWMgRXhlY3V0YWJsZVdpdGhEYXRhYmFz
ZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxEYXRhYmFzZUxvYWRlcj4gY3JlYXRlKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFJlZjxSZXF1ZXN0RGF0YWJhc2VDYWxsYmFjaz4m
JiByZXF1ZXN0Q2FsbGJhY2spCisgICAgc3RhdGljIFJlZjxEYXRhYmFzZUxvYWRlcj4gY3JlYXRl
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFJlZjxJbmRleGVkREJCYWNrZW5kRGlz
cGF0Y2hlckhhbmRsZXI6OlJlcXVlc3REYXRhYmFzZUNhbGxiYWNrPiYmIHJlcXVlc3RDYWxsYmFj
aykKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERhdGFiYXNlTG9hZGVyKGNv
bnRleHQsIFdURk1vdmUocmVxdWVzdENhbGxiYWNrKSkpOwogICAgIH0KQEAgLTIzMCwxNyArMjEw
LDE3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybjsKICAgICAKICAgICAgICAgYXV0byYg
ZGF0YWJhc2VJbmZvID0gZGF0YWJhc2UuaW5mbygpOwotICAgICAgICBhdXRvIG9iamVjdFN0b3Jl
cyA9IEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6SW5kZXhlZERCOjpPYmplY3RT
dG9yZT46OmNyZWF0ZSgpOworICAgICAgICBhdXRvIG9iamVjdFN0b3JlcyA9IEpTT046OkFycmF5
T2Y8UHJvdG9jb2w6OkluZGV4ZWREQjo6T2JqZWN0U3RvcmU+OjpjcmVhdGUoKTsKICAgICAgICAg
YXV0byBvYmplY3RTdG9yZU5hbWVzID0gZGF0YWJhc2VJbmZvLm9iamVjdFN0b3JlTmFtZXMoKTsK
ICAgICAgICAgZm9yIChhdXRvJiBuYW1lIDogb2JqZWN0U3RvcmVOYW1lcykgewogICAgICAgICAg
ICAgYXV0byogb2JqZWN0U3RvcmVJbmZvID0gZGF0YWJhc2VJbmZvLmluZm9Gb3JFeGlzdGluZ09i
amVjdFN0b3JlKG5hbWUpOwogICAgICAgICAgICAgaWYgKCFvYmplY3RTdG9yZUluZm8pCiAgICAg
ICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgICAgIGF1dG8gaW5kZXhlcyA9IEpTT046
OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6SW5kZXhlZERCOjpPYmplY3RTdG9yZUluZGV4
Pjo6Y3JlYXRlKCk7CisgICAgICAgICAgICBhdXRvIGluZGV4ZXMgPSBKU09OOjpBcnJheU9mPFBy
b3RvY29sOjpJbmRleGVkREI6Ok9iamVjdFN0b3JlSW5kZXg+OjpjcmVhdGUoKTsKICAgICAKICAg
ICAgICAgICAgIGZvciAoYXV0byYgaW5kZXhJbmZvIDogb2JqZWN0U3RvcmVJbmZvLT5pbmRleE1h
cCgpLnZhbHVlcygpKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBvYmplY3RTdG9yZUluZGV4ID0g
T2JqZWN0U3RvcmVJbmRleDo6Y3JlYXRlKCkKKyAgICAgICAgICAgICAgICBhdXRvIG9iamVjdFN0
b3JlSW5kZXggPSBQcm90b2NvbDo6SW5kZXhlZERCOjpPYmplY3RTdG9yZUluZGV4OjpjcmVhdGUo
KQogICAgICAgICAgICAgICAgICAgICAuc2V0TmFtZShpbmRleEluZm8ubmFtZSgpKQogICAgICAg
ICAgICAgICAgICAgICAuc2V0S2V5UGF0aChrZXlQYXRoRnJvbUlEQktleVBhdGgoaW5kZXhJbmZv
LmtleVBhdGgoKSkpCiAgICAgICAgICAgICAgICAgICAgIC5zZXRVbmlxdWUoaW5kZXhJbmZvLnVu
aXF1ZSgpKQpAQCAtMjQ5LDcgKzIyOSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBpbmRl
eGVzLT5hZGRJdGVtKFdURk1vdmUob2JqZWN0U3RvcmVJbmRleCkpOwogICAgICAgICAgICAgfQog
ICAgIAotICAgICAgICAgICAgYXV0byBvYmplY3RTdG9yZSA9IE9iamVjdFN0b3JlOjpjcmVhdGUo
KQorICAgICAgICAgICAgYXV0byBvYmplY3RTdG9yZSA9IFByb3RvY29sOjpJbmRleGVkREI6Ok9i
amVjdFN0b3JlOjpjcmVhdGUoKQogICAgICAgICAgICAgICAgIC5zZXROYW1lKG9iamVjdFN0b3Jl
SW5mby0+bmFtZSgpKQogICAgICAgICAgICAgICAgIC5zZXRLZXlQYXRoKGtleVBhdGhGcm9tSURC
S2V5UGF0aChvYmplY3RTdG9yZUluZm8tPmtleVBhdGgoKSkpCiAgICAgICAgICAgICAgICAgLnNl
dEF1dG9JbmNyZW1lbnQob2JqZWN0U3RvcmVJbmZvLT5hdXRvSW5jcmVtZW50KCkpCkBAIC0yNTgs
NyArMjM4LDcgQEAgcHVibGljOgogICAgICAgICAgICAgb2JqZWN0U3RvcmVzLT5hZGRJdGVtKFdU
Rk1vdmUob2JqZWN0U3RvcmUpKTsKICAgICAgICAgfQogICAgIAotICAgICAgICBhdXRvIHJlc3Vs
dCA9IERhdGFiYXNlV2l0aE9iamVjdFN0b3Jlczo6Y3JlYXRlKCkKKyAgICAgICAgYXV0byByZXN1
bHQgPSBQcm90b2NvbDo6SW5kZXhlZERCOjpEYXRhYmFzZVdpdGhPYmplY3RTdG9yZXM6OmNyZWF0
ZSgpCiAgICAgICAgICAgICAuc2V0TmFtZShkYXRhYmFzZUluZm8ubmFtZSgpKQogICAgICAgICAg
ICAgLnNldFZlcnNpb24oZGF0YWJhc2VJbmZvLnZlcnNpb24oKSkKICAgICAgICAgICAgIC5zZXRP
YmplY3RTdG9yZXMoV1RGTW92ZShvYmplY3RTdG9yZXMpKQpAQCAtMjY2LDkyICsyNDYsOTYgQEAg
cHVibGljOgogICAgICAgICBtX3JlcXVlc3RDYWxsYmFjay0+c2VuZFN1Y2Nlc3MoV1RGTW92ZShy
ZXN1bHQpKTsKICAgICB9CiAKLSAgICBSZXF1ZXN0Q2FsbGJhY2smIHJlcXVlc3RDYWxsYmFjaygp
IG92ZXJyaWRlIHsgcmV0dXJuIG1fcmVxdWVzdENhbGxiYWNrLmdldCgpOyB9CisgICAgQmFja2Vu
ZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZSYgcmVxdWVzdENhbGxiYWNrKCkgb3ZlcnJpZGUgeyBy
ZXR1cm4gbV9yZXF1ZXN0Q2FsbGJhY2suZ2V0KCk7IH0KIHByaXZhdGU6Ci0gICAgRGF0YWJhc2VM
b2FkZXIoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUmVmPFJlcXVlc3REYXRhYmFz
ZUNhbGxiYWNrPiYmIHJlcXVlc3RDYWxsYmFjaykKKyAgICBEYXRhYmFzZUxvYWRlcihTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBSZWY8SW5kZXhlZERCQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyOjpSZXF1ZXN0RGF0YWJhc2VDYWxsYmFjaz4mJiByZXF1ZXN0Q2FsbGJhY2spCiAgICAg
ICAgIDogRXhlY3V0YWJsZVdpdGhEYXRhYmFzZShjb250ZXh0KQogICAgICAgICAsIG1fcmVxdWVz
dENhbGxiYWNrKFdURk1vdmUocmVxdWVzdENhbGxiYWNrKSkgeyB9Ci0gICAgUmVmPFJlcXVlc3RE
YXRhYmFzZUNhbGxiYWNrPiBtX3JlcXVlc3RDYWxsYmFjazsKKyAgICBSZWY8SW5kZXhlZERCQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyOjpSZXF1ZXN0RGF0YWJhc2VDYWxsYmFjaz4gbV9yZXF1ZXN0
Q2FsbGJhY2s7CiB9OwogCi1zdGF0aWMgUmVmUHRyPElEQktleT4gaWRiS2V5RnJvbUluc3BlY3Rv
ck9iamVjdChKU09OOjpPYmplY3QqIGtleSkKK3N0YXRpYyBSZWZQdHI8SURCS2V5PiBpZGJLZXlG
cm9tSW5zcGVjdG9yT2JqZWN0KFJlZjxKU09OOjpPYmplY3Q+JiYga2V5KQogewotICAgIFN0cmlu
ZyB0eXBlOwotICAgIGlmICgha2V5LT5nZXRTdHJpbmcoInR5cGUiLCB0eXBlKSkKKyAgICBhdXRv
IHR5cGVTdHJpbmcgPSBrZXktPmdldFN0cmluZyhQcm90b2NvbDo6SW5kZXhlZERCOjpLZXk6OnR5
cGVLZXkpOworICAgIGlmICghdHlwZVN0cmluZykKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAK
LSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiBudW1iZXJUeXBlKE1BS0Vf
U1RBVElDX1NUUklOR19JTVBMKCJudW1iZXIiKSk7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVk
PGNvbnN0IFN0cmluZz4gc3RyaW5nVHlwZShNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgic3RyaW5n
IikpOwotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IGRhdGVUeXBlKE1B
S0VfU1RBVElDX1NUUklOR19JTVBMKCJkYXRlIikpOwotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxjb25zdCBTdHJpbmc+IGFycmF5VHlwZShNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgiYXJyYXki
KSk7CisgICAgYXV0byB0eXBlID0gUHJvdG9jb2w6OkhlbHBlcnM6OnBhcnNlRW51bVZhbHVlRnJv
bVN0cmluZzxQcm90b2NvbDo6SW5kZXhlZERCOjpLZXk6OlR5cGU+KHR5cGVTdHJpbmcpOworICAg
IGlmICghdHlwZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBSZWZQdHI8SURCS2V5
PiBpZGJLZXk7Ci0gICAgaWYgKHR5cGUgPT0gbnVtYmVyVHlwZSkgewotICAgICAgICBkb3VibGUg
bnVtYmVyOwotICAgICAgICBpZiAoIWtleS0+Z2V0RG91YmxlKCJudW1iZXIiLCBudW1iZXIpKQor
ICAgIHN3aXRjaCAoKnR5cGUpIHsKKyAgICBjYXNlIFByb3RvY29sOjpJbmRleGVkREI6OktleTo6
VHlwZTo6TnVtYmVyOiB7CisgICAgICAgIGF1dG8gbnVtYmVyID0ga2V5LT5nZXREb3VibGUoUHJv
dG9jb2w6OkluZGV4ZWREQjo6S2V5OjpudW1iZXJLZXkpOworICAgICAgICBpZiAoIW51bWJlcikK
ICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICBpZGJLZXkgPSBJREJLZXk6OmNy
ZWF0ZU51bWJlcihudW1iZXIpOwotICAgIH0gZWxzZSBpZiAodHlwZSA9PSBzdHJpbmdUeXBlKSB7
Ci0gICAgICAgIFN0cmluZyBzdHJpbmc7Ci0gICAgICAgIGlmICgha2V5LT5nZXRTdHJpbmcoInN0
cmluZyIsIHN0cmluZykpCisgICAgICAgIHJldHVybiBJREJLZXk6OmNyZWF0ZU51bWJlcigqbnVt
YmVyKTsKKyAgICB9CisKKyAgICBjYXNlIFByb3RvY29sOjpJbmRleGVkREI6OktleTo6VHlwZTo6
U3RyaW5nOiB7CisgICAgICAgIGF1dG8gc3RyaW5nID0ga2V5LT5nZXRTdHJpbmcoUHJvdG9jb2w6
OkluZGV4ZWREQjo6S2V5OjpzdHJpbmdLZXkpOworICAgICAgICBpZiAoIXN0cmluZykKICAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICBpZGJLZXkgPSBJREJLZXk6OmNyZWF0ZVN0
cmluZyhzdHJpbmcpOwotICAgIH0gZWxzZSBpZiAodHlwZSA9PSBkYXRlVHlwZSkgewotICAgICAg
ICBkb3VibGUgZGF0ZTsKLSAgICAgICAgaWYgKCFrZXktPmdldERvdWJsZSgiZGF0ZSIsIGRhdGUp
KQorICAgICAgICByZXR1cm4gSURCS2V5OjpjcmVhdGVTdHJpbmcoc3RyaW5nKTsKKyAgICB9CisK
KyAgICBjYXNlIFByb3RvY29sOjpJbmRleGVkREI6OktleTo6VHlwZTo6RGF0ZTogeworICAgICAg
ICBhdXRvIGRhdGUgPSBrZXktPmdldERvdWJsZShQcm90b2NvbDo6SW5kZXhlZERCOjpLZXk6OmRh
dGVLZXkpOworICAgICAgICBpZiAoIWRhdGUpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICAgICAgaWRiS2V5ID0gSURCS2V5OjpjcmVhdGVEYXRlKGRhdGUpOwotICAgIH0gZWxzZSBp
ZiAodHlwZSA9PSBhcnJheVR5cGUpIHsKKyAgICAgICAgcmV0dXJuIElEQktleTo6Y3JlYXRlRGF0
ZSgqZGF0ZSk7CisgICAgfQorCisgICAgY2FzZSBQcm90b2NvbDo6SW5kZXhlZERCOjpLZXk6OlR5
cGU6OkFycmF5OiB7CisgICAgICAgIGF1dG8gYXJyYXkgPSBrZXktPmdldEFycmF5KFByb3RvY29s
OjpJbmRleGVkREI6OktleTo6YXJyYXlLZXkpOworICAgICAgICBpZiAoIWFycmF5KQorICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisKICAgICAgICAgVmVjdG9yPFJlZlB0cjxJREJLZXk+PiBr
ZXlBcnJheTsKLSAgICAgICAgUmVmUHRyPEpTT046OkFycmF5PiBhcnJheTsKLSAgICAgICAgaWYg
KCFrZXktPmdldEFycmF5KCJhcnJheSIsIGFycmF5KSkKLSAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFycmF5LT5sZW5ndGgoKTsgKytp
KSB7Ci0gICAgICAgICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHZhbHVlID0gYXJyYXktPmdldChp
KTsKLSAgICAgICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG9iamVjdDsKLSAgICAgICAgICAg
IGlmICghdmFsdWUtPmFzT2JqZWN0KG9iamVjdCkpCisgICAgICAgICAgICBhdXRvIG9iamVjdCA9
IGFycmF5LT5nZXQoaSktPmFzT2JqZWN0KCk7CisgICAgICAgICAgICBpZiAoIW9iamVjdCkKICAg
ICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgICAgIGtleUFycmF5LmFwcGVu
ZChpZGJLZXlGcm9tSW5zcGVjdG9yT2JqZWN0KG9iamVjdC5nZXQoKSkpOworICAgICAgICAgICAg
a2V5QXJyYXkuYXBwZW5kKGlkYktleUZyb21JbnNwZWN0b3JPYmplY3Qob2JqZWN0LnJlbGVhc2VO
b25OdWxsKCkpKTsKICAgICAgICAgfQotICAgICAgICBpZGJLZXkgPSBJREJLZXk6OmNyZWF0ZUFy
cmF5KGtleUFycmF5KTsKLSAgICB9IGVsc2UKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
ICAgIHJldHVybiBJREJLZXk6OmNyZWF0ZUFycmF5KGtleUFycmF5KTsKKyAgICB9CisgICAgfQog
Ci0gICAgcmV0dXJuIGlkYktleTsKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1
cm4gbnVsbHB0cjsKIH0KIAotc3RhdGljIFJlZlB0cjxJREJLZXlSYW5nZT4gaWRiS2V5UmFuZ2VG
cm9tS2V5UmFuZ2UoY29uc3QgSlNPTjo6T2JqZWN0KiBrZXlSYW5nZSkKK3N0YXRpYyBSZWZQdHI8
SURCS2V5UmFuZ2U+IGlkYktleVJhbmdlRnJvbUtleVJhbmdlKEpTT046Ok9iamVjdCYga2V5UmFu
Z2UpCiB7CiAgICAgUmVmUHRyPElEQktleT4gaWRiTG93ZXI7Ci0gICAgUmVmUHRyPEpTT046Ok9i
amVjdD4gbG93ZXI7Ci0gICAgaWYgKGtleVJhbmdlLT5nZXRPYmplY3QoImxvd2VyIl9zLCBsb3dl
cikpIHsKLSAgICAgICAgaWRiTG93ZXIgPSBpZGJLZXlGcm9tSW5zcGVjdG9yT2JqZWN0KGxvd2Vy
LmdldCgpKTsKKyAgICBpZiAoYXV0byBsb3dlciA9IGtleVJhbmdlLmdldE9iamVjdChQcm90b2Nv
bDo6SW5kZXhlZERCOjpLZXlSYW5nZTo6bG93ZXJLZXkpKSB7CisgICAgICAgIGlkYkxvd2VyID0g
aWRiS2V5RnJvbUluc3BlY3Rvck9iamVjdChsb3dlci5yZWxlYXNlTm9uTnVsbCgpKTsKICAgICAg
ICAgaWYgKCFpZGJMb3dlcikKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAog
ICAgIFJlZlB0cjxJREJLZXk+IGlkYlVwcGVyOwotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHVw
cGVyOwotICAgIGlmIChrZXlSYW5nZS0+Z2V0T2JqZWN0KCJ1cHBlciJfcywgdXBwZXIpKSB7Ci0g
ICAgICAgIGlkYlVwcGVyID0gaWRiS2V5RnJvbUluc3BlY3Rvck9iamVjdCh1cHBlci5nZXQoKSk7
CisgICAgaWYgKGF1dG8gdXBwZXIgPSBrZXlSYW5nZS5nZXRPYmplY3QoUHJvdG9jb2w6OkluZGV4
ZWREQjo6S2V5UmFuZ2U6OnVwcGVyS2V5KSkgeworICAgICAgICBpZGJVcHBlciA9IGlkYktleUZy
b21JbnNwZWN0b3JPYmplY3QodXBwZXIucmVsZWFzZU5vbk51bGwoKSk7CiAgICAgICAgIGlmICgh
aWRiVXBwZXIpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKLSAgICBib29s
IGxvd2VyT3BlbjsKLSAgICBpZiAoIWtleVJhbmdlLT5nZXRCb29sZWFuKCJsb3dlck9wZW4iX3Ms
IGxvd2VyT3BlbikpCisgICAgYXV0byBsb3dlck9wZW4gPSBrZXlSYW5nZS5nZXRCb29sZWFuKFBy
b3RvY29sOjpJbmRleGVkREI6OktleVJhbmdlOjpsb3dlck9wZW5LZXkpOworICAgIGlmICghbG93
ZXJPcGVuKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIGJvb2wgdXBwZXJPcGVuOwot
ICAgIGlmICgha2V5UmFuZ2UtPmdldEJvb2xlYW4oInVwcGVyT3BlbiJfcywgdXBwZXJPcGVuKSkK
KyAgICBhdXRvIHVwcGVyT3BlbiA9IGtleVJhbmdlLmdldEJvb2xlYW4oUHJvdG9jb2w6OkluZGV4
ZWREQjo6S2V5UmFuZ2U6OnVwcGVyT3BlbktleSk7CisgICAgaWYgKCF1cHBlck9wZW4pCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJuIElEQktleVJhbmdlOjpjcmVhdGUoV1RG
TW92ZShpZGJMb3dlciksIFdURk1vdmUoaWRiVXBwZXIpLCBsb3dlck9wZW4sIHVwcGVyT3Blbik7
CisgICAgcmV0dXJuIElEQktleVJhbmdlOjpjcmVhdGUoV1RGTW92ZShpZGJMb3dlciksIFdURk1v
dmUoaWRiVXBwZXIpLCAqbG93ZXJPcGVuLCAqdXBwZXJPcGVuKTsKIH0KIAogY2xhc3MgT3BlbkN1
cnNvckNhbGxiYWNrIGZpbmFsIDogcHVibGljIEV2ZW50TGlzdGVuZXIgewogcHVibGljOgotICAg
IHN0YXRpYyBSZWY8T3BlbkN1cnNvckNhbGxiYWNrPiBjcmVhdGUoSW5qZWN0ZWRTY3JpcHQgaW5q
ZWN0ZWRTY3JpcHQsIFJlZjxSZXF1ZXN0RGF0YUNhbGxiYWNrPiYmIHJlcXVlc3RDYWxsYmFjaywg
aW50IHNraXBDb3VudCwgdW5zaWduZWQgcGFnZVNpemUpCisgICAgc3RhdGljIFJlZjxPcGVuQ3Vy
c29yQ2FsbGJhY2s+IGNyZWF0ZShJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdCwgUmVmPElu
ZGV4ZWREQkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UmVxdWVzdERhdGFDYWxsYmFjaz4mJiBy
ZXF1ZXN0Q2FsbGJhY2ssIGludCBza2lwQ291bnQsIHVuc2lnbmVkIHBhZ2VTaXplKQogICAgIHsK
ICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgT3BlbkN1cnNvckNhbGxiYWNrKGluamVjdGVk
U2NyaXB0LCBXVEZNb3ZlKHJlcXVlc3RDYWxsYmFjayksIHNraXBDb3VudCwgcGFnZVNpemUpKTsK
ICAgICB9CkBAIC00MDUsMTMgKzM4OSwyMyBAQCBwdWJsaWM6CiAgICAgICAgIH0KIAogICAgICAg
ICBhdXRvKiBsZXhpY2FsR2xvYmFsT2JqZWN0ID0gY29udGV4dC5leGVjU3RhdGUoKTsKLSAgICAg
ICAgYXV0byBrZXkgPSAgdG9KUygqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmxleGljYWxHbG9iYWxP
YmplY3QsIGN1cnNvci0+a2V5KCkpOwotICAgICAgICBhdXRvIHByaW1hcnlLZXkgPSB0b0pTKCps
ZXhpY2FsR2xvYmFsT2JqZWN0LCAqbGV4aWNhbEdsb2JhbE9iamVjdCwgY3Vyc29yLT5wcmltYXJ5
S2V5KCkpOwotICAgICAgICBhdXRvIHZhbHVlID0gZGVzZXJpYWxpemVJREJWYWx1ZVRvSlNWYWx1
ZSgqbGV4aWNhbEdsb2JhbE9iamVjdCwgY3Vyc29yLT52YWx1ZSgpKTsKLSAgICAgICAgYXV0byBk
YXRhRW50cnkgPSBEYXRhRW50cnk6OmNyZWF0ZSgpCi0gICAgICAgICAgICAuc2V0S2V5KG1faW5q
ZWN0ZWRTY3JpcHQud3JhcE9iamVjdChrZXksIFN0cmluZygpLCB0cnVlKSkKLSAgICAgICAgICAg
IC5zZXRQcmltYXJ5S2V5KG1faW5qZWN0ZWRTY3JpcHQud3JhcE9iamVjdChwcmltYXJ5S2V5LCBT
dHJpbmcoKSwgdHJ1ZSkpCi0gICAgICAgICAgICAuc2V0VmFsdWUobV9pbmplY3RlZFNjcmlwdC53
cmFwT2JqZWN0KHZhbHVlLCBTdHJpbmcoKSwgdHJ1ZSkpCisKKyAgICAgICAgYXV0byBrZXkgPSBt
X2luamVjdGVkU2NyaXB0LndyYXBPYmplY3QodG9KUygqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmxl
eGljYWxHbG9iYWxPYmplY3QsIGN1cnNvci0+a2V5KCkpLCBTdHJpbmcoKSwgdHJ1ZSk7CisgICAg
ICAgIGlmICgha2V5KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGF1dG8gcHJpbWFy
eUtleSA9IG1faW5qZWN0ZWRTY3JpcHQud3JhcE9iamVjdCh0b0pTKCpsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCAqbGV4aWNhbEdsb2JhbE9iamVjdCwgY3Vyc29yLT5wcmltYXJ5S2V5KCkpLCBTdHJpbmco
KSwgdHJ1ZSk7CisgICAgICAgIGlmICghcHJpbWFyeUtleSkKKyAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICBhdXRvIHZhbHVlID0gbV9pbmplY3RlZFNjcmlwdC53cmFwT2JqZWN0KGRlc2Vy
aWFsaXplSURCVmFsdWVUb0pTVmFsdWUoKmxleGljYWxHbG9iYWxPYmplY3QsIGN1cnNvci0+dmFs
dWUoKSksIFN0cmluZygpLCB0cnVlKTsKKyAgICAgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgICAg
IHJldHVybjsKKworICAgICAgICBhdXRvIGRhdGFFbnRyeSA9IFByb3RvY29sOjpJbmRleGVkREI6
OkRhdGFFbnRyeTo6Y3JlYXRlKCkKKyAgICAgICAgICAgIC5zZXRLZXkoa2V5LnJlbGVhc2VOb25O
dWxsKCkpCisgICAgICAgICAgICAuc2V0UHJpbWFyeUtleShwcmltYXJ5S2V5LnJlbGVhc2VOb25O
dWxsKCkpCisgICAgICAgICAgICAuc2V0VmFsdWUodmFsdWUucmVsZWFzZU5vbk51bGwoKSkKICAg
ICAgICAgICAgIC5yZWxlYXNlKCk7CiAgICAgICAgIG1fcmVzdWx0LT5hZGRJdGVtKFdURk1vdmUo
ZGF0YUVudHJ5KSk7CiAgICAgfQpAQCAtNDI0LDI1ICs0MTgsMjUgQEAgcHVibGljOgogICAgIH0K
IAogcHJpdmF0ZToKLSAgICBPcGVuQ3Vyc29yQ2FsbGJhY2soSW5qZWN0ZWRTY3JpcHQgaW5qZWN0
ZWRTY3JpcHQsIFJlZjxSZXF1ZXN0RGF0YUNhbGxiYWNrPiYmIHJlcXVlc3RDYWxsYmFjaywgaW50
IHNraXBDb3VudCwgdW5zaWduZWQgcGFnZVNpemUpCisgICAgT3BlbkN1cnNvckNhbGxiYWNrKElu
amVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0LCBSZWY8SW5kZXhlZERCQmFja2VuZERpc3BhdGNo
ZXJIYW5kbGVyOjpSZXF1ZXN0RGF0YUNhbGxiYWNrPiYmIHJlcXVlc3RDYWxsYmFjaywgaW50IHNr
aXBDb3VudCwgdW5zaWduZWQgcGFnZVNpemUpCiAgICAgICAgIDogRXZlbnRMaXN0ZW5lcihFdmVu
dExpc3RlbmVyOjpDUFBFdmVudExpc3RlbmVyVHlwZSkKICAgICAgICAgLCBtX2luamVjdGVkU2Ny
aXB0KGluamVjdGVkU2NyaXB0KQogICAgICAgICAsIG1fcmVxdWVzdENhbGxiYWNrKFdURk1vdmUo
cmVxdWVzdENhbGxiYWNrKSkKLSAgICAgICAgLCBtX3Jlc3VsdChKU09OOjpBcnJheU9mPERhdGFF
bnRyeT46OmNyZWF0ZSgpKQorICAgICAgICAsIG1fcmVzdWx0KEpTT046OkFycmF5T2Y8UHJvdG9j
b2w6OkluZGV4ZWREQjo6RGF0YUVudHJ5Pjo6Y3JlYXRlKCkpCiAgICAgICAgICwgbV9za2lwQ291
bnQoc2tpcENvdW50KQogICAgICAgICAsIG1fcGFnZVNpemUocGFnZVNpemUpCiAgICAgewogICAg
IH0KICAgICBJbmplY3RlZFNjcmlwdCBtX2luamVjdGVkU2NyaXB0OwotICAgIFJlZjxSZXF1ZXN0
RGF0YUNhbGxiYWNrPiBtX3JlcXVlc3RDYWxsYmFjazsKLSAgICBSZWY8SlNPTjo6QXJyYXlPZjxE
YXRhRW50cnk+PiBtX3Jlc3VsdDsKKyAgICBSZWY8SW5kZXhlZERCQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyOjpSZXF1ZXN0RGF0YUNhbGxiYWNrPiBtX3JlcXVlc3RDYWxsYmFjazsKKyAgICBSZWY8
SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6SW5kZXhlZERCOjpEYXRhRW50cnk+PiBtX3Jlc3VsdDsK
ICAgICBpbnQgbV9za2lwQ291bnQ7CiAgICAgdW5zaWduZWQgbV9wYWdlU2l6ZTsKIH07CiAKIGNs
YXNzIERhdGFMb2FkZXIgZmluYWwgOiBwdWJsaWMgRXhlY3V0YWJsZVdpdGhEYXRhYmFzZSB7CiBw
dWJsaWM6Ci0gICAgc3RhdGljIFJlZjxEYXRhTG9hZGVyPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogY29udGV4dCwgUmVmPFJlcXVlc3REYXRhQ2FsbGJhY2s+JiYgcmVxdWVzdENhbGxi
YWNrLCBjb25zdCBJbmplY3RlZFNjcmlwdCYgaW5qZWN0ZWRTY3JpcHQsIGNvbnN0IFN0cmluZyYg
b2JqZWN0U3RvcmVOYW1lLCBjb25zdCBTdHJpbmcmIGluZGV4TmFtZSwgUmVmUHRyPElEQktleVJh
bmdlPiYmIGlkYktleVJhbmdlLCBpbnQgc2tpcENvdW50LCB1bnNpZ25lZCBwYWdlU2l6ZSkKKyAg
ICBzdGF0aWMgUmVmPERhdGFMb2FkZXI+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBj
b250ZXh0LCBSZWY8SW5kZXhlZERCQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpSZXF1ZXN0RGF0
YUNhbGxiYWNrPiYmIHJlcXVlc3RDYWxsYmFjaywgY29uc3QgSW5qZWN0ZWRTY3JpcHQmIGluamVj
dGVkU2NyaXB0LCBjb25zdCBTdHJpbmcmIG9iamVjdFN0b3JlTmFtZSwgY29uc3QgU3RyaW5nJiBp
bmRleE5hbWUsIFJlZlB0cjxJREJLZXlSYW5nZT4mJiBpZGJLZXlSYW5nZSwgaW50IHNraXBDb3Vu
dCwgdW5zaWduZWQgcGFnZVNpemUpCiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBEYXRhTG9hZGVyKGNvbnRleHQsIFdURk1vdmUocmVxdWVzdENhbGxiYWNrKSwgaW5qZWN0ZWRT
Y3JpcHQsIG9iamVjdFN0b3JlTmFtZSwgaW5kZXhOYW1lLCBXVEZNb3ZlKGlkYktleVJhbmdlKSwg
c2tpcENvdW50LCBwYWdlU2l6ZSkpOwogICAgIH0KQEAgLTQ5OCw4ICs0OTIsOCBAQCBwdWJsaWM6
CiAgICAgICAgIGlkYlJlcXVlc3QtPmFkZEV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLnN1Y2Nl
c3NFdmVudCwgV1RGTW92ZShvcGVuQ3Vyc29yQ2FsbGJhY2spLCBmYWxzZSk7CiAgICAgfQogCi0g
ICAgUmVxdWVzdENhbGxiYWNrJiByZXF1ZXN0Q2FsbGJhY2soKSBvdmVycmlkZSB7IHJldHVybiBt
X3JlcXVlc3RDYWxsYmFjay5nZXQoKTsgfQotICAgIERhdGFMb2FkZXIoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgUmVmPFJlcXVlc3REYXRhQ2FsbGJhY2s+
JiYgcmVxdWVzdENhbGxiYWNrLCBjb25zdCBJbmplY3RlZFNjcmlwdCYgaW5qZWN0ZWRTY3JpcHQs
IGNvbnN0IFN0cmluZyYgb2JqZWN0U3RvcmVOYW1lLCBjb25zdCBTdHJpbmcmIGluZGV4TmFtZSwg
UmVmUHRyPElEQktleVJhbmdlPiBpZGJLZXlSYW5nZSwgaW50IHNraXBDb3VudCwgdW5zaWduZWQg
cGFnZVNpemUpCisgICAgQmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZSYgcmVxdWVzdENh
bGxiYWNrKCkgb3ZlcnJpZGUgeyByZXR1cm4gbV9yZXF1ZXN0Q2FsbGJhY2suZ2V0KCk7IH0KKyAg
ICBEYXRhTG9hZGVyKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQsIFJlZjxJbmRleGVkREJCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlJlcXVlc3REYXRhQ2Fs
bGJhY2s+JiYgcmVxdWVzdENhbGxiYWNrLCBjb25zdCBJbmplY3RlZFNjcmlwdCYgaW5qZWN0ZWRT
Y3JpcHQsIGNvbnN0IFN0cmluZyYgb2JqZWN0U3RvcmVOYW1lLCBjb25zdCBTdHJpbmcmIGluZGV4
TmFtZSwgUmVmUHRyPElEQktleVJhbmdlPiBpZGJLZXlSYW5nZSwgaW50IHNraXBDb3VudCwgdW5z
aWduZWQgcGFnZVNpemUpCiAgICAgICAgIDogRXhlY3V0YWJsZVdpdGhEYXRhYmFzZShzY3JpcHRF
eGVjdXRpb25Db250ZXh0KQogICAgICAgICAsIG1fcmVxdWVzdENhbGxiYWNrKFdURk1vdmUocmVx
dWVzdENhbGxiYWNrKSkKICAgICAgICAgLCBtX2luamVjdGVkU2NyaXB0KGluamVjdGVkU2NyaXB0
KQpAQCAtNTA4LDcgKzUwMiw3IEBAIHB1YmxpYzoKICAgICAgICAgLCBtX2lkYktleVJhbmdlKFdU
Rk1vdmUoaWRiS2V5UmFuZ2UpKQogICAgICAgICAsIG1fc2tpcENvdW50KHNraXBDb3VudCkKICAg
ICAgICAgLCBtX3BhZ2VTaXplKHBhZ2VTaXplKSB7IH0KLSAgICBSZWY8UmVxdWVzdERhdGFDYWxs
YmFjaz4gbV9yZXF1ZXN0Q2FsbGJhY2s7CisgICAgUmVmPEluZGV4ZWREQkJhY2tlbmREaXNwYXRj
aGVySGFuZGxlcjo6UmVxdWVzdERhdGFDYWxsYmFjaz4gbV9yZXF1ZXN0Q2FsbGJhY2s7CiAgICAg
SW5qZWN0ZWRTY3JpcHQgbV9pbmplY3RlZFNjcmlwdDsKICAgICBTdHJpbmcgbV9vYmplY3RTdG9y
ZU5hbWU7CiAgICAgU3RyaW5nIG1faW5kZXhOYW1lOwpAQCAtNTM1LDE5ICs1MjksMjAgQEAgdm9p
ZCBJbnNwZWN0b3JJbmRleGVkREJBZ2VudDo6ZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKElu
c3BlY3Rvcjo6RnJvbnRlbmRSb3UKIAogdm9pZCBJbnNwZWN0b3JJbmRleGVkREJBZ2VudDo6d2ls
bERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKQog
ewotICAgIEVycm9yU3RyaW5nIGlnbm9yZWQ7Ci0gICAgZGlzYWJsZShpZ25vcmVkKTsKKyAgICBk
aXNhYmxlKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQ6OmVuYWJsZShFcnJv
clN0cmluZyYpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JJbmRleGVk
REJBZ2VudDo6ZW5hYmxlKCkKIHsKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3Rv
ckluZGV4ZWREQkFnZW50OjpkaXNhYmxlKEVycm9yU3RyaW5nJikKK1Byb3RvY29sOjpFcnJvclN0
cmluZ09yPHZvaWQ+IEluc3BlY3RvckluZGV4ZWREQkFnZW50OjpkaXNhYmxlKCkKIHsKKyAgICBy
ZXR1cm4geyB9OwogfQogCi1zdGF0aWMgRXJyb3JTdHJpbmdPcjxEb2N1bWVudCo+IGRvY3VtZW50
RnJvbUZyYW1lKEZyYW1lKiBmcmFtZSkKK3N0YXRpYyBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxE
b2N1bWVudCo+IGRvY3VtZW50RnJvbUZyYW1lKEZyYW1lKiBmcmFtZSkKIHsKICAgICBEb2N1bWVu
dCogZG9jdW1lbnQgPSBmcmFtZSA/IGZyYW1lLT5kb2N1bWVudCgpIDogbnVsbHB0cjsKICAgICBp
ZiAoIWRvY3VtZW50KQpAQCAtNTU2LDcgKzU1MSw3IEBAIHN0YXRpYyBFcnJvclN0cmluZ09yPERv
Y3VtZW50Kj4gZG9jdW1lbnRGcm9tRnJhbWUoRnJhbWUqIGZyYW1lKQogICAgIHJldHVybiBkb2N1
bWVudDsKIH0KIAotc3RhdGljIEVycm9yU3RyaW5nT3I8SURCRmFjdG9yeSo+IElEQkZhY3RvcnlG
cm9tRG9jdW1lbnQoRG9jdW1lbnQqIGRvY3VtZW50KQorc3RhdGljIFByb3RvY29sOjpFcnJvclN0
cmluZ09yPElEQkZhY3RvcnkqPiBJREJGYWN0b3J5RnJvbURvY3VtZW50KERvY3VtZW50KiBkb2N1
bWVudCkKIHsKICAgICBET01XaW5kb3cqIGRvbVdpbmRvdyA9IGRvY3VtZW50LT5kb21XaW5kb3co
KTsKICAgICBpZiAoIWRvbVdpbmRvdykKQEAgLTU3MSwxMyArNTY2LDEzIEBAIHN0YXRpYyBFcnJv
clN0cmluZ09yPElEQkZhY3RvcnkqPiBJREJGYWN0b3J5RnJvbURvY3VtZW50KERvY3VtZW50KiBk
b2N1bWVudCkKIAogc3RhdGljIGJvb2wgZ2V0RG9jdW1lbnRBbmRJREJGYWN0b3J5RnJvbUZyYW1l
T3JTZW5kRmFpbHVyZShGcmFtZSogZnJhbWUsIERvY3VtZW50KiYgb3V0X2RvY3VtZW50LCBJREJG
YWN0b3J5KiYgb3V0X2lkYkZhY3RvcnksIEJhY2tlbmREaXNwYXRjaGVyOjpDYWxsYmFja0Jhc2Um
IGNhbGxiYWNrKQogewotICAgIEVycm9yU3RyaW5nT3I8RG9jdW1lbnQqPiBkb2N1bWVudCA9IGRv
Y3VtZW50RnJvbUZyYW1lKGZyYW1lKTsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxEb2N1
bWVudCo+IGRvY3VtZW50ID0gZG9jdW1lbnRGcm9tRnJhbWUoZnJhbWUpOwogICAgIGlmICghZG9j
dW1lbnQuaGFzX3ZhbHVlKCkpIHsKICAgICAgICAgY2FsbGJhY2suc2VuZEZhaWx1cmUoZG9jdW1l
bnQuZXJyb3IoKSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBFcnJvclN0
cmluZ09yPElEQkZhY3RvcnkqPiBpZGJGYWN0b3J5ID0gSURCRmFjdG9yeUZyb21Eb2N1bWVudChk
b2N1bWVudC52YWx1ZSgpKTsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxJREJGYWN0b3J5
Kj4gaWRiRmFjdG9yeSA9IElEQkZhY3RvcnlGcm9tRG9jdW1lbnQoZG9jdW1lbnQudmFsdWUoKSk7
CiAgICAgaWYgKCFpZGJGYWN0b3J5Lmhhc192YWx1ZSgpKSB7CiAgICAgICAgIGNhbGxiYWNrLnNl
bmRGYWlsdXJlKGlkYkZhY3RvcnkuZXJyb3IoKSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAg
LTYyMCw3ICs2MTUsNyBAQCB2b2lkIEluc3BlY3RvckluZGV4ZWREQkFnZW50OjpyZXF1ZXN0RGF0
YWJhc2UoY29uc3QgU3RyaW5nJiBzZWN1cml0eU9yaWdpbiwgY29ucwogICAgIGRhdGFiYXNlTG9h
ZGVyLT5zdGFydChpZGJGYWN0b3J5LCAmZG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luKCksIGRhdGFi
YXNlTmFtZSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQ6OnJlcXVlc3REYXRh
KGNvbnN0IFN0cmluZyYgc2VjdXJpdHlPcmlnaW4sIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VOYW1l
LCBjb25zdCBTdHJpbmcmIG9iamVjdFN0b3JlTmFtZSwgY29uc3QgU3RyaW5nJiBpbmRleE5hbWUs
IGludCBza2lwQ291bnQsIGludCBwYWdlU2l6ZSwgY29uc3QgSlNPTjo6T2JqZWN0KiBrZXlSYW5n
ZSwgUmVmPFJlcXVlc3REYXRhQ2FsbGJhY2s+JiYgY2FsbGJhY2spCit2b2lkIEluc3BlY3Rvcklu
ZGV4ZWREQkFnZW50OjpyZXF1ZXN0RGF0YShjb25zdCBTdHJpbmcmIHNlY3VyaXR5T3JpZ2luLCBj
b25zdCBTdHJpbmcmIGRhdGFiYXNlTmFtZSwgY29uc3QgU3RyaW5nJiBvYmplY3RTdG9yZU5hbWUs
IGNvbnN0IFN0cmluZyYgaW5kZXhOYW1lLCBpbnQgc2tpcENvdW50LCBpbnQgcGFnZVNpemUsIFJl
ZlB0cjxKU09OOjpPYmplY3Q+JiYga2V5UmFuZ2UsIFJlZjxSZXF1ZXN0RGF0YUNhbGxiYWNrPiYm
IGNhbGxiYWNrKQogewogICAgIGF1dG8qIGZyYW1lID0gSW5zcGVjdG9yUGFnZUFnZW50OjpmaW5k
RnJhbWVXaXRoU2VjdXJpdHlPcmlnaW4obV9pbnNwZWN0ZWRQYWdlLCBzZWN1cml0eU9yaWdpbik7
CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50OwpAQCAtNjI5LDcgKzYyNCw3IEBAIHZvaWQgSW5zcGVj
dG9ySW5kZXhlZERCQWdlbnQ6OnJlcXVlc3REYXRhKGNvbnN0IFN0cmluZyYgc2VjdXJpdHlPcmln
aW4sIGNvbnN0IFN0CiAgICAgICAgIHJldHVybjsKIAogICAgIEluamVjdGVkU2NyaXB0IGluamVj
dGVkU2NyaXB0ID0gbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIuaW5qZWN0ZWRTY3JpcHRGb3IobWFp
bldvcmxkRXhlY1N0YXRlKGZyYW1lKSk7Ci0gICAgUmVmUHRyPElEQktleVJhbmdlPiBpZGJLZXlS
YW5nZSA9IGtleVJhbmdlID8gaWRiS2V5UmFuZ2VGcm9tS2V5UmFuZ2Uoa2V5UmFuZ2UpIDogbnVs
bHB0cjsKKyAgICBSZWZQdHI8SURCS2V5UmFuZ2U+IGlkYktleVJhbmdlID0ga2V5UmFuZ2UgPyBp
ZGJLZXlSYW5nZUZyb21LZXlSYW5nZSgqa2V5UmFuZ2UpIDogbnVsbHB0cjsKICAgICBpZiAoa2V5
UmFuZ2UgJiYgIWlkYktleVJhbmdlKSB7CiAgICAgICAgIGNhbGxiYWNrLT5zZW5kRmFpbHVyZSgi
Q291bGQgbm90IHBhcnNlIGtleSByYW5nZS4iX3MpOwogICAgICAgICByZXR1cm47CkBAIC02NDQs
NyArNjM5LDcgQEAgbmFtZXNwYWNlIHsKIGNsYXNzIENsZWFyT2JqZWN0U3RvcmVMaXN0ZW5lciBm
aW5hbCA6IHB1YmxpYyBFdmVudExpc3RlbmVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShD
bGVhck9iamVjdFN0b3JlTGlzdGVuZXIpOwogcHVibGljOgotICAgIHN0YXRpYyBSZWY8Q2xlYXJP
YmplY3RTdG9yZUxpc3RlbmVyPiBjcmVhdGUoUmVmPENsZWFyT2JqZWN0U3RvcmVDYWxsYmFjaz4g
cmVxdWVzdENhbGxiYWNrKQorICAgIHN0YXRpYyBSZWY8Q2xlYXJPYmplY3RTdG9yZUxpc3RlbmVy
PiBjcmVhdGUoUmVmPEluZGV4ZWREQkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6Q2xlYXJPYmpl
Y3RTdG9yZUNhbGxiYWNrPiByZXF1ZXN0Q2FsbGJhY2spCiAgICAgewogICAgICAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBDbGVhck9iamVjdFN0b3JlTGlzdGVuZXIoV1RGTW92ZShyZXF1ZXN0Q2Fs
bGJhY2spKSk7CiAgICAgfQpAQCAtNjY4LDIzICs2NjMsMjMgQEAgcHVibGljOgogICAgICAgICBt
X3JlcXVlc3RDYWxsYmFjay0+c2VuZFN1Y2Nlc3MoKTsKICAgICB9CiBwcml2YXRlOgotICAgIENs
ZWFyT2JqZWN0U3RvcmVMaXN0ZW5lcihSZWY8Q2xlYXJPYmplY3RTdG9yZUNhbGxiYWNrPiYmIHJl
cXVlc3RDYWxsYmFjaykKKyAgICBDbGVhck9iamVjdFN0b3JlTGlzdGVuZXIoUmVmPEluZGV4ZWRE
QkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6Q2xlYXJPYmplY3RTdG9yZUNhbGxiYWNrPiYmIHJl
cXVlc3RDYWxsYmFjaykKICAgICAgICAgOiBFdmVudExpc3RlbmVyKEV2ZW50TGlzdGVuZXI6OkNQ
UEV2ZW50TGlzdGVuZXJUeXBlKQogICAgICAgICAsIG1fcmVxdWVzdENhbGxiYWNrKFdURk1vdmUo
cmVxdWVzdENhbGxiYWNrKSkKICAgICB7CiAgICAgfQogCi0gICAgUmVmPENsZWFyT2JqZWN0U3Rv
cmVDYWxsYmFjaz4gbV9yZXF1ZXN0Q2FsbGJhY2s7CisgICAgUmVmPEluZGV4ZWREQkJhY2tlbmRE
aXNwYXRjaGVySGFuZGxlcjo6Q2xlYXJPYmplY3RTdG9yZUNhbGxiYWNrPiBtX3JlcXVlc3RDYWxs
YmFjazsKIH07CiAKIGNsYXNzIENsZWFyT2JqZWN0U3RvcmUgZmluYWwgOiBwdWJsaWMgRXhlY3V0
YWJsZVdpdGhEYXRhYmFzZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxDbGVhck9iamVjdFN0
b3JlPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5n
JiBvYmplY3RTdG9yZU5hbWUsIFJlZjxDbGVhck9iamVjdFN0b3JlQ2FsbGJhY2s+JiYgcmVxdWVz
dENhbGxiYWNrKQorICAgIHN0YXRpYyBSZWY8Q2xlYXJPYmplY3RTdG9yZT4gY3JlYXRlKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgb2JqZWN0U3RvcmVOYW1l
LCBSZWY8SW5kZXhlZERCQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpDbGVhck9iamVjdFN0b3Jl
Q2FsbGJhY2s+JiYgcmVxdWVzdENhbGxiYWNrKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgQ2xlYXJPYmplY3RTdG9yZShjb250ZXh0LCBvYmplY3RTdG9yZU5hbWUsIFdURk1v
dmUocmVxdWVzdENhbGxiYWNrKSkpOwogICAgIH0KIAotICAgIENsZWFyT2JqZWN0U3RvcmUoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiBvYmplY3RTdG9yZU5h
bWUsIFJlZjxDbGVhck9iamVjdFN0b3JlQ2FsbGJhY2s+JiYgcmVxdWVzdENhbGxiYWNrKQorICAg
IENsZWFyT2JqZWN0U3RvcmUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3Qg
U3RyaW5nJiBvYmplY3RTdG9yZU5hbWUsIFJlZjxJbmRleGVkREJCYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXI6OkNsZWFyT2JqZWN0U3RvcmVDYWxsYmFjaz4mJiByZXF1ZXN0Q2FsbGJhY2spCiAgICAg
ICAgIDogRXhlY3V0YWJsZVdpdGhEYXRhYmFzZShjb250ZXh0KQogICAgICAgICAsIG1fb2JqZWN0
U3RvcmVOYW1lKG9iamVjdFN0b3JlTmFtZSkKICAgICAgICAgLCBtX3JlcXVlc3RDYWxsYmFjayhX
VEZNb3ZlKHJlcXVlc3RDYWxsYmFjaykpCkBAIC03MjMsMTAgKzcxOCwxMCBAQCBwdWJsaWM6CiAg
ICAgICAgIGlkYlRyYW5zYWN0aW9uLT5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5jb21w
bGV0ZUV2ZW50LCBDbGVhck9iamVjdFN0b3JlTGlzdGVuZXI6OmNyZWF0ZShtX3JlcXVlc3RDYWxs
YmFjay5jb3B5UmVmKCkpLCBmYWxzZSk7CiAgICAgfQogCi0gICAgUmVxdWVzdENhbGxiYWNrJiBy
ZXF1ZXN0Q2FsbGJhY2soKSBvdmVycmlkZSB7IHJldHVybiBtX3JlcXVlc3RDYWxsYmFjay5nZXQo
KTsgfQorICAgIEJhY2tlbmREaXNwYXRjaGVyOjpDYWxsYmFja0Jhc2UmIHJlcXVlc3RDYWxsYmFj
aygpIG92ZXJyaWRlIHsgcmV0dXJuIG1fcmVxdWVzdENhbGxiYWNrLmdldCgpOyB9CiBwcml2YXRl
OgogICAgIGNvbnN0IFN0cmluZyBtX29iamVjdFN0b3JlTmFtZTsKLSAgICBSZWY8Q2xlYXJPYmpl
Y3RTdG9yZUNhbGxiYWNrPiBtX3JlcXVlc3RDYWxsYmFjazsKKyAgICBSZWY8SW5kZXhlZERCQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyOjpDbGVhck9iamVjdFN0b3JlQ2FsbGJhY2s+IG1fcmVxdWVz
dENhbGxiYWNrOwogfTsKIAogfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckluZGV4ZWREQkFnZW50Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckluZGV4ZWREQkFnZW50
LmgKaW5kZXggZGIyOTdiZDljZGE4ZGE2YzA0N2FiODJmZjM1MGEyZjRmNTc0OGZlOS4uZTU0NGY5
YzZmMjUzOWM0MTE3MmQ1YzY5MmU0ZDI4MGU1NDMwMjM5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JJbmRleGVkREJBZ2VudC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQuaApA
QCAtNDUsMjYgKzQ1LDI0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgUGFnZTsKIAot
dHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7Ci0KIGNsYXNzIEluc3BlY3RvckluZGV4ZWREQkFn
ZW50IGZpbmFsIDogcHVibGljIEluc3BlY3RvckFnZW50QmFzZSwgcHVibGljIEluc3BlY3Rvcjo6
SW5kZXhlZERCQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShJbnNwZWN0b3JJbmRleGVkREJBZ2VudCk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CiBwdWJsaWM6CiAgICAgSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQoUGFnZUFnZW50Q29udGV4
dCYpOwotICAgIH5JbnNwZWN0b3JJbmRleGVkREJBZ2VudCgpIG92ZXJyaWRlOworICAgIH5JbnNw
ZWN0b3JJbmRleGVkREJBZ2VudCgpOwogCiAgICAgLy8gSW5zcGVjdG9yQWdlbnRCYXNlCi0gICAg
dm9pZCBkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9udGVuZFJvdXRl
ciosIEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXIqKSBvdmVycmlkZTsKLSAgICB2b2lkIHdp
bGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlzY29ubmVjdFJlYXNvbikg
b3ZlcnJpZGU7CisgICAgdm9pZCBkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9y
OjpGcm9udGVuZFJvdXRlciosIEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXIqKTsKKyAgICB2
b2lkIHdpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlzY29ubmVjdFJl
YXNvbik7CiAKICAgICAvLyBJbmRleGVkREJCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIKLSAgICB2
b2lkIGVuYWJsZShFcnJvclN0cmluZyYpIG92ZXJyaWRlOwotICAgIHZvaWQgZGlzYWJsZShFcnJv
clN0cmluZyYpIG92ZXJyaWRlOwotICAgIHZvaWQgcmVxdWVzdERhdGFiYXNlTmFtZXMoY29uc3Qg
U3RyaW5nJiBzZWN1cml0eU9yaWdpbiwgUmVmPFJlcXVlc3REYXRhYmFzZU5hbWVzQ2FsbGJhY2s+
JiYpIG92ZXJyaWRlOwotICAgIHZvaWQgcmVxdWVzdERhdGFiYXNlKGNvbnN0IFN0cmluZyYgc2Vj
dXJpdHlPcmlnaW4sIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VOYW1lLCBSZWY8UmVxdWVzdERhdGFi
YXNlQ2FsbGJhY2s+JiYpIG92ZXJyaWRlOwotICAgIHZvaWQgcmVxdWVzdERhdGEoY29uc3QgU3Ry
aW5nJiBzZWN1cml0eU9yaWdpbiwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZU5hbWUsIGNvbnN0IFN0
cmluZyYgb2JqZWN0U3RvcmVOYW1lLCBjb25zdCBTdHJpbmcmIGluZGV4TmFtZSwgaW50IHNraXBD
b3VudCwgaW50IHBhZ2VTaXplLCBjb25zdCBKU09OOjpPYmplY3QqIGtleVJhbmdlLCBSZWY8UmVx
dWVzdERhdGFDYWxsYmFjaz4mJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjbGVhck9iamVjdFN0b3Jl
KGNvbnN0IFN0cmluZyYgc2VjdXJpdHlPcmlnaW4sIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VOYW1l
LCBjb25zdCBTdHJpbmcmIG9iamVjdFN0b3JlTmFtZSwgUmVmPENsZWFyT2JqZWN0U3RvcmVDYWxs
YmFjaz4mJikgb3ZlcnJpZGU7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdP
cjx2b2lkPiBlbmFibGUoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09y
PHZvaWQ+IGRpc2FibGUoKTsKKyAgICB2b2lkIHJlcXVlc3REYXRhYmFzZU5hbWVzKGNvbnN0IFN0
cmluZyYgc2VjdXJpdHlPcmlnaW4sIFJlZjxSZXF1ZXN0RGF0YWJhc2VOYW1lc0NhbGxiYWNrPiYm
KTsKKyAgICB2b2lkIHJlcXVlc3REYXRhYmFzZShjb25zdCBTdHJpbmcmIHNlY3VyaXR5T3JpZ2lu
LCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlTmFtZSwgUmVmPFJlcXVlc3REYXRhYmFzZUNhbGxiYWNr
PiYmKTsKKyAgICB2b2lkIHJlcXVlc3REYXRhKGNvbnN0IFN0cmluZyYgc2VjdXJpdHlPcmlnaW4s
IGNvbnN0IFN0cmluZyYgZGF0YWJhc2VOYW1lLCBjb25zdCBTdHJpbmcmIG9iamVjdFN0b3JlTmFt
ZSwgY29uc3QgU3RyaW5nJiBpbmRleE5hbWUsIGludCBza2lwQ291bnQsIGludCBwYWdlU2l6ZSwg
UmVmUHRyPEpTT046Ok9iamVjdD4mJiBrZXlSYW5nZSwgUmVmPFJlcXVlc3REYXRhQ2FsbGJhY2s+
JiYpOworICAgIHZvaWQgY2xlYXJPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIHNlY3VyaXR5T3Jp
Z2luLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlTmFtZSwgY29uc3QgU3RyaW5nJiBvYmplY3RTdG9y
ZU5hbWUsIFJlZjxDbGVhck9iamVjdFN0b3JlQ2FsbGJhY2s+JiYpOwogCiBwcml2YXRlOgogICAg
IEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHRNYW5hZ2VyJiBtX2luamVjdGVkU2NyaXB0TWFuYWdl
cjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9y
TGF5ZXJUcmVlQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNw
ZWN0b3JMYXllclRyZWVBZ2VudC5jcHAKaW5kZXggYmI5OTRiZjk5ZmMyNTE2NjlmOGQ3M2E0ZGYw
YjU1ZWMwZjU2YzYxMy4uNTJkM2ZkNzBmNmEyOTlkOWFmMDQ2OTI0ZjRiYWUzZGQ1ZDYwYjExYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JMYXll
clRyZWVBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNw
ZWN0b3JMYXllclRyZWVBZ2VudC5jcHAKQEAgLTYxLDggKzYxLDcgQEAgdm9pZCBJbnNwZWN0b3JM
YXllclRyZWVBZ2VudDo6ZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJv
bnRlbmRSb3UKIAogdm9pZCBJbnNwZWN0b3JMYXllclRyZWVBZ2VudDo6d2lsbERlc3Ryb3lGcm9u
dGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKQogewotICAgIEVycm9y
U3RyaW5nIGlnbm9yZWQ7Ci0gICAgZGlzYWJsZShpZ25vcmVkKTsKKyAgICBkaXNhYmxlKCk7CiB9
CiAKIHZvaWQgSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OnJlc2V0KCkKQEAgLTc0LDE2ICs3Mywy
MCBAQCB2b2lkIEluc3BlY3RvckxheWVyVHJlZUFnZW50OjpyZXNldCgpCiAgICAgbV9zdXBwcmVz
c0xheWVyQ2hhbmdlRXZlbnRzID0gZmFsc2U7CiB9CiAKLXZvaWQgSW5zcGVjdG9yTGF5ZXJUcmVl
QWdlbnQ6OmVuYWJsZShFcnJvclN0cmluZyYpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lk
PiBJbnNwZWN0b3JMYXllclRyZWVBZ2VudDo6ZW5hYmxlKCkKIHsKICAgICBtX2luc3RydW1lbnRp
bmdBZ2VudHMuc2V0RW5hYmxlZExheWVyVHJlZUFnZW50KHRoaXMpOworCisgICAgcmV0dXJuIHsg
fTsKIH0KIAotdm9pZCBJbnNwZWN0b3JMYXllclRyZWVBZ2VudDo6ZGlzYWJsZShFcnJvclN0cmlu
ZyYpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JMYXllclRyZWVBZ2Vu
dDo6ZGlzYWJsZSgpCiB7CiAgICAgbV9pbnN0cnVtZW50aW5nQWdlbnRzLnNldEVuYWJsZWRMYXll
clRyZWVBZ2VudChudWxscHRyKTsKIAogICAgIHJlc2V0KCk7CisKKyAgICByZXR1cm4geyB9Owog
fQogCiB2b2lkIEluc3BlY3RvckxheWVyVHJlZUFnZW50OjpsYXllclRyZWVEaWRDaGFuZ2UoKQpA
QCAtMTA2LDUxICsxMDksNDkgQEAgdm9pZCBJbnNwZWN0b3JMYXllclRyZWVBZ2VudDo6cHNldWRv
RWxlbWVudERlc3Ryb3llZChQc2V1ZG9FbGVtZW50JiBwc2V1ZG9FbGVtZW4KICAgICB1bmJpbmRQ
c2V1ZG9FbGVtZW50KCZwc2V1ZG9FbGVtZW50KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JMYXllclRy
ZWVBZ2VudDo6bGF5ZXJzRm9yTm9kZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2Rl
SWQsIFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkxheWVyVHJlZTo6
TGF5ZXI+PiYgbGF5ZXJzKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEpTT046OkFycmF5
T2Y8UHJvdG9jb2w6OkxheWVyVHJlZTo6TGF5ZXI+Pj4gSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6
OmxheWVyc0Zvck5vZGUoUHJvdG9jb2w6OkRPTTo6Tm9kZUlkIG5vZGVJZCkKIHsKLSAgICBsYXll
cnMgPSBKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkxheWVyVHJlZTo6TGF5ZXI+
OjpjcmVhdGUoKTsKLQogICAgIGF1dG8qIG5vZGUgPSBtX2luc3RydW1lbnRpbmdBZ2VudHMucGVy
c2lzdGVudERPTUFnZW50KCktPm5vZGVGb3JJZChub2RlSWQpOwotICAgIGlmICghbm9kZSkgewot
ICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIG5vZGUgZm9yIGdpdmVuIG5vZGVJZCJfczsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybiBt
YWtlVW5leHBlY3RlZCgiTWlzc2luZyBub2RlIGZvciBnaXZlbiBub2RlSWQiX3MpOwogCiAgICAg
YXV0byogcmVuZGVyZXIgPSBub2RlLT5yZW5kZXJlcigpOwotICAgIGlmICghcmVuZGVyZXIpIHsK
LSAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWlzc2luZyByZW5kZXJlciBvZiBub2RlIGZvciBnaXZl
biBub2RlSWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKCFyZW5kZXJlcikK
KyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJNaXNzaW5nIHJlbmRlcmVyIG9mIG5vZGUg
Zm9yIGdpdmVuIG5vZGVJZCJfcyk7CiAKICAgICBpZiAoIWlzPFJlbmRlckVsZW1lbnQ+KCpyZW5k
ZXJlcikpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJN
aXNzaW5nIHJlbmRlcmVyIG9mIGVsZW1lbnQgZm9yIGdpdmVuIG5vZGVJZCJfcyk7CiAKLSAgICBn
YXRoZXJMYXllcnNVc2luZ1JlbmRlck9iamVjdEhpZXJhcmNoeShlcnJvclN0cmluZywgZG93bmNh
c3Q8UmVuZGVyRWxlbWVudD4oKnJlbmRlcmVyKSwgbGF5ZXJzKTsKKyAgICBhdXRvIGxheWVycyA9
IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkxheWVyVHJlZTo6TGF5ZXI+OjpjcmVhdGUoKTsKKwor
ICAgIGdhdGhlckxheWVyc1VzaW5nUmVuZGVyT2JqZWN0SGllcmFyY2h5KGRvd25jYXN0PFJlbmRl
ckVsZW1lbnQ+KCpyZW5kZXJlciksIGxheWVycyk7CiAKICAgICBtX3N1cHByZXNzTGF5ZXJDaGFu
Z2VFdmVudHMgPSBmYWxzZTsKKworICAgIHJldHVybiBXVEZNb3ZlKGxheWVycyk7CiB9CiAKLXZv
aWQgSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OmdhdGhlckxheWVyc1VzaW5nUmVuZGVyT2JqZWN0
SGllcmFyY2h5KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgUmVuZGVyRWxlbWVudCYgcmVuZGVy
ZXIsIFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkxheWVyVHJlZTo6
TGF5ZXI+PiYgbGF5ZXJzKQordm9pZCBJbnNwZWN0b3JMYXllclRyZWVBZ2VudDo6Z2F0aGVyTGF5
ZXJzVXNpbmdSZW5kZXJPYmplY3RIaWVyYXJjaHkoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIEpT
T046OkFycmF5T2Y8UHJvdG9jb2w6OkxheWVyVHJlZTo6TGF5ZXI+JiBsYXllcnMpCiB7CiAgICAg
aWYgKHJlbmRlcmVyLmhhc0xheWVyKCkpIHsKLSAgICAgICAgZ2F0aGVyTGF5ZXJzVXNpbmdSZW5k
ZXJMYXllckhpZXJhcmNoeShlcnJvclN0cmluZywgZG93bmNhc3Q8UmVuZGVyTGF5ZXJNb2RlbE9i
amVjdD4ocmVuZGVyZXIpLmxheWVyKCksIGxheWVycyk7CisgICAgICAgIGdhdGhlckxheWVyc1Vz
aW5nUmVuZGVyTGF5ZXJIaWVyYXJjaHkoZG93bmNhc3Q8UmVuZGVyTGF5ZXJNb2RlbE9iamVjdD4o
cmVuZGVyZXIpLmxheWVyKCksIGxheWVycyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAg
ICBmb3IgKGF1dG8mIGNoaWxkIDogY2hpbGRyZW5PZlR5cGU8UmVuZGVyRWxlbWVudD4ocmVuZGVy
ZXIpKQotICAgICAgICBnYXRoZXJMYXllcnNVc2luZ1JlbmRlck9iamVjdEhpZXJhcmNoeShlcnJv
clN0cmluZywgY2hpbGQsIGxheWVycyk7CisgICAgICAgIGdhdGhlckxheWVyc1VzaW5nUmVuZGVy
T2JqZWN0SGllcmFyY2h5KGNoaWxkLCBsYXllcnMpOwogfQogCi12b2lkIEluc3BlY3RvckxheWVy
VHJlZUFnZW50OjpnYXRoZXJMYXllcnNVc2luZ1JlbmRlckxheWVySGllcmFyY2h5KEVycm9yU3Ry
aW5nJiBlcnJvclN0cmluZywgUmVuZGVyTGF5ZXIqIHJlbmRlckxheWVyLCBSZWZQdHI8SlNPTjo6
QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpMYXllclRyZWU6OkxheWVyPj4mIGxheWVycykK
K3ZvaWQgSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OmdhdGhlckxheWVyc1VzaW5nUmVuZGVyTGF5
ZXJIaWVyYXJjaHkoUmVuZGVyTGF5ZXIqIHJlbmRlckxheWVyLCBKU09OOjpBcnJheU9mPFByb3Rv
Y29sOjpMYXllclRyZWU6OkxheWVyPiYgbGF5ZXJzKQogewogICAgIGlmIChyZW5kZXJMYXllci0+
aXNDb21wb3NpdGVkKCkpCi0gICAgICAgIGxheWVycy0+YWRkSXRlbShidWlsZE9iamVjdEZvckxh
eWVyKGVycm9yU3RyaW5nLCByZW5kZXJMYXllcikpOworICAgICAgICBsYXllcnMuYWRkSXRlbShi
dWlsZE9iamVjdEZvckxheWVyKHJlbmRlckxheWVyKSk7CiAKICAgICBmb3IgKHJlbmRlckxheWVy
ID0gcmVuZGVyTGF5ZXItPmZpcnN0Q2hpbGQoKTsgcmVuZGVyTGF5ZXI7IHJlbmRlckxheWVyID0g
cmVuZGVyTGF5ZXItPm5leHRTaWJsaW5nKCkpCi0gICAgICAgIGdhdGhlckxheWVyc1VzaW5nUmVu
ZGVyTGF5ZXJIaWVyYXJjaHkoZXJyb3JTdHJpbmcsIHJlbmRlckxheWVyLCBsYXllcnMpOworICAg
ICAgICBnYXRoZXJMYXllcnNVc2luZ1JlbmRlckxheWVySGllcmFyY2h5KHJlbmRlckxheWVyLCBs
YXllcnMpOwogfQogCi1SZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6TGF5ZXJUcmVlOjpMYXllcj4g
SW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yTGF5ZXIoRXJyb3JTdHJpbmcm
IGVycm9yU3RyaW5nLCBSZW5kZXJMYXllciogcmVuZGVyTGF5ZXIpCitSZWY8UHJvdG9jb2w6Okxh
eWVyVHJlZTo6TGF5ZXI+IEluc3BlY3RvckxheWVyVHJlZUFnZW50OjpidWlsZE9iamVjdEZvckxh
eWVyKFJlbmRlckxheWVyKiByZW5kZXJMYXllcikKIHsKICAgICBSZW5kZXJPYmplY3QqIHJlbmRl
cmVyID0gJnJlbmRlckxheWVyLT5yZW5kZXJlcigpOwogICAgIFJlbmRlckxheWVyQmFja2luZyog
YmFja2luZyA9IHJlbmRlckxheWVyLT5iYWNraW5nKCk7CkBAIC0xNzAsOSArMTcxLDkgQEAgUmVm
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkxheWVyVHJlZTo6TGF5ZXI+IEluc3BlY3RvckxheWVyVHJl
ZUFnZW50OjpidWlsZE9iamVjdEYKICAgICAgICAgbm9kZSA9IHJlbmRlcmVyLT5wYXJlbnQoKS0+
ZWxlbWVudCgpOwogCiAgICAgLy8gQmFzaWMgc2V0IG9mIHByb3BlcnRpZXMuCi0gICAgYXV0byBs
YXllck9iamVjdCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkxheWVyVHJlZTo6TGF5ZXI6OmNyZWF0
ZSgpCisgICAgYXV0byBsYXllck9iamVjdCA9IFByb3RvY29sOjpMYXllclRyZWU6OkxheWVyOjpj
cmVhdGUoKQogICAgICAgICAuc2V0TGF5ZXJJZChiaW5kKHJlbmRlckxheWVyKSkKLSAgICAgICAg
LnNldE5vZGVJZChpZEZvck5vZGUoZXJyb3JTdHJpbmcsIG5vZGUpKQorICAgICAgICAuc2V0Tm9k
ZUlkKGlkRm9yTm9kZShub2RlKSkKICAgICAgICAgLnNldEJvdW5kcyhidWlsZE9iamVjdEZvcklu
dFJlY3QocmVuZGVyZXItPmFic29sdXRlQm91bmRpbmdCb3hSZWN0KCkpKQogICAgICAgICAuc2V0
TWVtb3J5KGJhY2tpbmctPmJhY2tpbmdTdG9yZU1lbW9yeUVzdGltYXRlKCkpCiAgICAgICAgIC5z
ZXRDb21wb3NpdGVkQm91bmRzKGJ1aWxkT2JqZWN0Rm9ySW50UmVjdChlbmNsb3NpbmdJbnRSZWN0
KGJhY2tpbmctPmNvbXBvc2l0ZWRCb3VuZHMoKSkpKQpAQCAtMjA5LDI1ICsyMTAsMjUgQEAgUmVm
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkxheWVyVHJlZTo6TGF5ZXI+IEluc3BlY3RvckxheWVyVHJl
ZUFnZW50OjpidWlsZE9iamVjdEYKICAgICByZXR1cm4gbGF5ZXJPYmplY3Q7CiB9CiAKLWludCBJ
bnNwZWN0b3JMYXllclRyZWVBZ2VudDo6aWRGb3JOb2RlKEVycm9yU3RyaW5nJiBlcnJvclN0cmlu
ZywgTm9kZSogbm9kZSkKK1Byb3RvY29sOjpET006Ok5vZGVJZCBJbnNwZWN0b3JMYXllclRyZWVB
Z2VudDo6aWRGb3JOb2RlKE5vZGUqIG5vZGUpCiB7CiAgICAgaWYgKCFub2RlKQogICAgICAgICBy
ZXR1cm4gMDsKIAogICAgIEluc3BlY3RvckRPTUFnZW50KiBkb21BZ2VudCA9IG1faW5zdHJ1bWVu
dGluZ0FnZW50cy5wZXJzaXN0ZW50RE9NQWdlbnQoKTsKICAgICAKLSAgICBpbnQgbm9kZUlkID0g
ZG9tQWdlbnQtPmJvdW5kTm9kZUlkKG5vZGUpOworICAgIGF1dG8gbm9kZUlkID0gZG9tQWdlbnQt
PmJvdW5kTm9kZUlkKG5vZGUpOwogICAgIGlmICghbm9kZUlkKSB7CiAgICAgICAgIC8vIEZJWE1F
OiA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMjEzNDk5PiBXZWIgSW5zcGVjdG9yOiBhbGxvdyBET00g
bm9kZXMgdG8gYmUgaW5zdHJ1bWVudGVkIGF0IGFueSBwb2ludCwgcmVnYXJkbGVzcyBvZiB3aGV0
aGVyIHRoZSBtYWluIGRvY3VtZW50IGhhcyBhbHNvIGJlZW4gaW5zdHJ1bWVudGVkCi0gICAgICAg
IG5vZGVJZCA9IGRvbUFnZW50LT5wdXNoTm9kZVRvRnJvbnRlbmQoZXJyb3JTdHJpbmcsIGRvbUFn
ZW50LT5ib3VuZE5vZGVJZCgmbm9kZS0+ZG9jdW1lbnQoKSksIG5vZGUpOworICAgICAgICBub2Rl
SWQgPSBkb21BZ2VudC0+cHVzaE5vZGVUb0Zyb250ZW5kKG5vZGUpOwogICAgIH0KIAogICAgIHJl
dHVybiBub2RlSWQ7CiB9CiAKLVJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpMYXllclRyZWU6Oklu
dFJlY3Q+IEluc3BlY3RvckxheWVyVHJlZUFnZW50OjpidWlsZE9iamVjdEZvckludFJlY3QoY29u
c3QgSW50UmVjdCYgcmVjdCkKK1JlZjxQcm90b2NvbDo6TGF5ZXJUcmVlOjpJbnRSZWN0PiBJbnNw
ZWN0b3JMYXllclRyZWVBZ2VudDo6YnVpbGRPYmplY3RGb3JJbnRSZWN0KGNvbnN0IEludFJlY3Qm
IHJlY3QpCiB7Ci0gICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkxheWVyVHJlZTo6SW50
UmVjdDo6Y3JlYXRlKCkKKyAgICByZXR1cm4gUHJvdG9jb2w6OkxheWVyVHJlZTo6SW50UmVjdDo6
Y3JlYXRlKCkKICAgICAgICAgLnNldFgocmVjdC54KCkpCiAgICAgICAgIC5zZXRZKHJlY3QueSgp
KQogICAgICAgICAuc2V0V2lkdGgocmVjdC53aWR0aCgpKQpAQCAtMjM1LDE3ICsyMzYsMTUgQEAg
UmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkxheWVyVHJlZTo6SW50UmVjdD4gSW5zcGVjdG9yTGF5
ZXJUcmVlQWdlbnQ6OmJ1aWxkT2JqZWMKICAgICAgICAgLnJlbGVhc2UoKTsKIH0KIAotdm9pZCBJ
bnNwZWN0b3JMYXllclRyZWVBZ2VudDo6cmVhc29uc0ZvckNvbXBvc2l0aW5nTGF5ZXIoRXJyb3JT
dHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGxheWVySWQsIFJlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpMYXllclRyZWU6OkNvbXBvc2l0aW5nUmVhc29ucz4mIGNvbXBvc2l0aW5n
UmVhc29uc1Jlc3VsdCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxQcm90b2NvbDo6TGF5
ZXJUcmVlOjpDb21wb3NpdGluZ1JlYXNvbnM+PiBJbnNwZWN0b3JMYXllclRyZWVBZ2VudDo6cmVh
c29uc0ZvckNvbXBvc2l0aW5nTGF5ZXIoY29uc3QgUHJvdG9jb2w6OkxheWVyVHJlZTo6TGF5ZXJJ
ZCYgbGF5ZXJJZCkKIHsKICAgICBjb25zdCBSZW5kZXJMYXllciogcmVuZGVyTGF5ZXIgPSBtX2lk
VG9MYXllci5nZXQobGF5ZXJJZCk7CiAKLSAgICBpZiAoIXJlbmRlckxheWVyKSB7Ci0gICAgICAg
IGVycm9yU3RyaW5nID0gIk1pc3NpbmcgcmVuZGVyIGxheWVyIGZvciBnaXZlbiBsYXllcklkIl9z
OwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghcmVuZGVyTGF5ZXIpCisgICAgICAg
IHJldHVybiBtYWtlVW5leHBlY3RlZCgiTWlzc2luZyByZW5kZXIgbGF5ZXIgZm9yIGdpdmVuIGxh
eWVySWQiX3MpOwogCiAgICAgT3B0aW9uU2V0PENvbXBvc2l0aW5nUmVhc29uPiByZWFzb25zID0g
cmVuZGVyTGF5ZXItPmNvbXBvc2l0b3IoKS5yZWFzb25zRm9yQ29tcG9zaXRpbmcoKnJlbmRlckxh
eWVyKTsKLSAgICBhdXRvIGNvbXBvc2l0aW5nUmVhc29ucyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkxheWVyVHJlZTo6Q29tcG9zaXRpbmdSZWFzb25zOjpjcmVhdGUoKS5yZWxlYXNlKCk7CisgICAg
YXV0byBjb21wb3NpdGluZ1JlYXNvbnMgPSBQcm90b2NvbDo6TGF5ZXJUcmVlOjpDb21wb3NpdGlu
Z1JlYXNvbnM6OmNyZWF0ZSgpLnJlbGVhc2UoKTsKIAogICAgIGlmIChyZWFzb25zLmNvbnRhaW5z
KENvbXBvc2l0aW5nUmVhc29uOjpUcmFuc2Zvcm0zRCkpCiAgICAgICAgIGNvbXBvc2l0aW5nUmVh
c29ucy0+c2V0VHJhbnNmb3JtM0QodHJ1ZSk7CkBAIC0zMjQsNyArMzIzLDcgQEAgdm9pZCBJbnNw
ZWN0b3JMYXllclRyZWVBZ2VudDo6cmVhc29uc0ZvckNvbXBvc2l0aW5nTGF5ZXIoRXJyb3JTdHJp
bmcmIGVycm9yU3RyaW4KICAgICBpZiAocmVhc29ucy5jb250YWlucyhDb21wb3NpdGluZ1JlYXNv
bjo6Um9vdCkpCiAgICAgICAgIGNvbXBvc2l0aW5nUmVhc29ucy0+c2V0Um9vdCh0cnVlKTsKIAot
ICAgIGNvbXBvc2l0aW5nUmVhc29uc1Jlc3VsdCA9IFdURk1vdmUoY29tcG9zaXRpbmdSZWFzb25z
KTsKKyAgICByZXR1cm4gV1RGTW92ZShjb21wb3NpdGluZ1JlYXNvbnMpOwogfQogCiBTdHJpbmcg
SW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OmJpbmQoY29uc3QgUmVuZGVyTGF5ZXIqIGxheWVyKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JMYXll
clRyZWVBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JM
YXllclRyZWVBZ2VudC5oCmluZGV4IDg3MjM1ODBjNjUzMDEwZTFlZWE2MGQ0MGU5Y2Q5ZDczMjM1
OGQ5ZmIuLjVmMTE1MzFjYzY0NDQyOWY0OGQxZDZkODE1NTFkZDg0YjlmOTRjY2MgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yTGF5ZXJUcmVlQWdl
bnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckxheWVy
VHJlZUFnZW50LmgKQEAgLTQyLDI0ICs0MiwyMiBAQCBjbGFzcyBQc2V1ZG9FbGVtZW50OwogY2xh
c3MgUmVuZGVyRWxlbWVudDsKIGNsYXNzIFJlbmRlckxheWVyOwogCi10eXBlZGVmIFN0cmluZyBF
cnJvclN0cmluZzsKLQogY2xhc3MgSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQgZmluYWwgOiBwdWJs
aWMgSW5zcGVjdG9yQWdlbnRCYXNlLCBwdWJsaWMgSW5zcGVjdG9yOjpMYXllclRyZWVCYWNrZW5k
RGlzcGF0Y2hlckhhbmRsZXIgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEluc3BlY3Rvckxh
eWVyVHJlZUFnZW50KTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAg
ICBJbnNwZWN0b3JMYXllclRyZWVBZ2VudChXZWJBZ2VudENvbnRleHQmKTsKLSAgICB+SW5zcGVj
dG9yTGF5ZXJUcmVlQWdlbnQoKSBvdmVycmlkZTsKKyAgICB+SW5zcGVjdG9yTGF5ZXJUcmVlQWdl
bnQoKTsKIAogICAgIC8vIEluc3BlY3RvckFnZW50QmFzZQotICAgIHZvaWQgZGlkQ3JlYXRlRnJv
bnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRSb3V0ZXIqLCBJbnNwZWN0b3I6OkJh
Y2tlbmREaXNwYXRjaGVyKikgb3ZlcnJpZGU7Ci0gICAgdm9pZCB3aWxsRGVzdHJveUZyb250ZW5k
QW5kQmFja2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24pIG92ZXJyaWRlOworICAgIHZv
aWQgZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRSb3V0ZXIq
LCBJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyKik7CisgICAgdm9pZCB3aWxsRGVzdHJveUZy
b250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24pOwogCiAgICAgLy8g
TGF5ZXJUcmVlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyCi0gICAgdm9pZCBlbmFibGUoRXJyb3JT
dHJpbmcmKSBvdmVycmlkZTsKLSAgICB2b2lkIGRpc2FibGUoRXJyb3JTdHJpbmcmKSBvdmVycmlk
ZTsKLSAgICB2b2lkIGxheWVyc0Zvck5vZGUoRXJyb3JTdHJpbmcmLCBpbnQgbm9kZUlkLCBSZWZQ
dHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpMYXllclRyZWU6OkxheWVyPj4m
KSBvdmVycmlkZTsKLSAgICB2b2lkIHJlYXNvbnNGb3JDb21wb3NpdGluZ0xheWVyKEVycm9yU3Ry
aW5nJiwgY29uc3QgU3RyaW5nJiBsYXllcklkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
TGF5ZXJUcmVlOjpDb21wb3NpdGluZ1JlYXNvbnM+Jikgb3ZlcnJpZGU7CisgICAgSW5zcGVjdG9y
OjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBlbmFibGUoKTsKKyAgICBJbnNwZWN0b3I6
OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGRpc2FibGUoKTsKKyAgICBJbnNwZWN0b3I6
OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkxheWVyVHJlZTo6TGF5ZXI+Pj4gbGF5ZXJzRm9yTm9kZShJbnNwZWN0b3I6OlByb3Rv
Y29sOjpET006Ok5vZGVJZCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdP
cjxSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6TGF5ZXJUcmVlOjpDb21wb3NpdGluZ1JlYXNvbnM+
PiByZWFzb25zRm9yQ29tcG9zaXRpbmdMYXllcihjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpM
YXllclRyZWU6OkxheWVySWQmKTsKIAogICAgIC8vIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbgog
ICAgIHZvaWQgbGF5ZXJUcmVlRGlkQ2hhbmdlKCk7CkBAIC03MiwxMyArNzAsMTMgQEAgcHJpdmF0
ZToKICAgICBTdHJpbmcgYmluZChjb25zdCBSZW5kZXJMYXllciopOwogICAgIHZvaWQgdW5iaW5k
KGNvbnN0IFJlbmRlckxheWVyKik7CiAKLSAgICB2b2lkIGdhdGhlckxheWVyc1VzaW5nUmVuZGVy
T2JqZWN0SGllcmFyY2h5KEVycm9yU3RyaW5nJiwgUmVuZGVyRWxlbWVudCYsIFJlZlB0cjxKU09O
OjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkxheWVyVHJlZTo6TGF5ZXI+PiYpOwotICAg
IHZvaWQgZ2F0aGVyTGF5ZXJzVXNpbmdSZW5kZXJMYXllckhpZXJhcmNoeShFcnJvclN0cmluZyYs
IFJlbmRlckxheWVyKiwgUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6
TGF5ZXJUcmVlOjpMYXllcj4+Jik7CisgICAgdm9pZCBnYXRoZXJMYXllcnNVc2luZ1JlbmRlck9i
amVjdEhpZXJhcmNoeShSZW5kZXJFbGVtZW50JiwgSlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpMYXllclRyZWU6OkxheWVyPiYpOworICAgIHZvaWQgZ2F0aGVyTGF5ZXJzVXNpbmdS
ZW5kZXJMYXllckhpZXJhcmNoeShSZW5kZXJMYXllciosIEpTT046OkFycmF5T2Y8SW5zcGVjdG9y
OjpQcm90b2NvbDo6TGF5ZXJUcmVlOjpMYXllcj4mKTsKIAotICAgIFJlZjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpMYXllclRyZWU6OkxheWVyPiBidWlsZE9iamVjdEZvckxheWVyKEVycm9yU3RyaW5n
JiwgUmVuZGVyTGF5ZXIqKTsKKyAgICBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6TGF5ZXJUcmVl
OjpMYXllcj4gYnVpbGRPYmplY3RGb3JMYXllcihSZW5kZXJMYXllciopOwogICAgIFJlZjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpMYXllclRyZWU6OkludFJlY3Q+IGJ1aWxkT2JqZWN0Rm9ySW50UmVj
dChjb25zdCBJbnRSZWN0Jik7CiAKLSAgICBpbnQgaWRGb3JOb2RlKEVycm9yU3RyaW5nJiwgTm9k
ZSopOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkIGlkRm9yTm9kZShOb2Rl
Kik7CiAKICAgICBTdHJpbmcgYmluZFBzZXVkb0VsZW1lbnQoUHNldWRvRWxlbWVudCopOwogICAg
IHZvaWQgdW5iaW5kUHNldWRvRWxlbWVudChQc2V1ZG9FbGVtZW50Kik7CkBAIC04NiwxMSArODQs
MTEgQEAgcHJpdmF0ZToKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW5zcGVjdG9yOjpMYXllclRyZWVG
cm9udGVuZERpc3BhdGNoZXI+IG1fZnJvbnRlbmREaXNwYXRjaGVyOwogICAgIFJlZlB0cjxJbnNw
ZWN0b3I6OkxheWVyVHJlZUJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOwog
Ci0gICAgSGFzaE1hcDxjb25zdCBSZW5kZXJMYXllciosIFN0cmluZz4gbV9kb2N1bWVudExheWVy
VG9JZE1hcDsKLSAgICBIYXNoTWFwPFN0cmluZywgY29uc3QgUmVuZGVyTGF5ZXIqPiBtX2lkVG9M
YXllcjsKKyAgICBIYXNoTWFwPGNvbnN0IFJlbmRlckxheWVyKiwgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6TGF5ZXJUcmVlOjpMYXllcklkPiBtX2RvY3VtZW50TGF5ZXJUb0lkTWFwOworICAgIEhhc2hN
YXA8SW5zcGVjdG9yOjpQcm90b2NvbDo6TGF5ZXJUcmVlOjpMYXllcklkLCBjb25zdCBSZW5kZXJM
YXllcio+IG1faWRUb0xheWVyOwogCi0gICAgSGFzaE1hcDxQc2V1ZG9FbGVtZW50KiwgU3RyaW5n
PiBtX3BzZXVkb0VsZW1lbnRUb0lkTWFwOwotICAgIEhhc2hNYXA8U3RyaW5nLCBQc2V1ZG9FbGVt
ZW50Kj4gbV9pZFRvUHNldWRvRWxlbWVudDsKKyAgICBIYXNoTWFwPFBzZXVkb0VsZW1lbnQqLCBJ
bnNwZWN0b3I6OlByb3RvY29sOjpMYXllclRyZWU6OlBzZXVkb0VsZW1lbnRJZD4gbV9wc2V1ZG9F
bGVtZW50VG9JZE1hcDsKKyAgICBIYXNoTWFwPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkxheWVyVHJl
ZTo6UHNldWRvRWxlbWVudElkLCBQc2V1ZG9FbGVtZW50Kj4gbV9pZFRvUHNldWRvRWxlbWVudDsK
IAogICAgIGJvb2wgbV9zdXBwcmVzc0xheWVyQ2hhbmdlRXZlbnRzIHsgZmFsc2UgfTsKIH07CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rvck1lbW9y
eUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yTWVt
b3J5QWdlbnQuY3BwCmluZGV4IGQwZThhYTY4ODMzNjU5ZTY0YWZlNTUzNDdjYjU2Zjc3M2ViN2Q3
YTUuLjE0Y2U2NzA5NmEyNDI0NDk0YzU5MjQ2NjA4NmExZDFlMjg3NzQxMDkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yTWVtb3J5QWdlbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yTWVtb3J5QWdl
bnQuY3BwCkBAIC01NCw0MCArNTQsMzkgQEAgdm9pZCBJbnNwZWN0b3JNZW1vcnlBZ2VudDo6ZGlk
Q3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEZyb250ZW5kUm91dGVyKiwgQmFja2VuZEQKIAogdm9p
ZCBJbnNwZWN0b3JNZW1vcnlBZ2VudDo6d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoRGlz
Y29ubmVjdFJlYXNvbikKIHsKLSAgICBFcnJvclN0cmluZyBpZ25vcmVkOwotICAgIGRpc2FibGUo
aWdub3JlZCk7CisgICAgZGlzYWJsZSgpOwogCiAgICAgbV9pbnN0cnVtZW50aW5nQWdlbnRzLnNl
dFBlcnNpc3RlbnRNZW1vcnlBZ2VudChudWxscHRyKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JNZW1v
cnlBZ2VudDo6ZW5hYmxlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZykKK1Byb3RvY29sOjpFcnJv
clN0cmluZ09yPHZvaWQ+IEluc3BlY3Rvck1lbW9yeUFnZW50OjplbmFibGUoKQogewotICAgIGlm
IChtX2luc3RydW1lbnRpbmdBZ2VudHMuZW5hYmxlZE1lbW9yeUFnZW50KCkgPT0gdGhpcykgewot
ICAgICAgICBlcnJvclN0cmluZyA9ICJNZW1vcnkgZG9tYWluIGFscmVhZHkgZW5hYmxlZCJfczsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAobV9pbnN0cnVtZW50aW5nQWdlbnRzLmVu
YWJsZWRNZW1vcnlBZ2VudCgpID09IHRoaXMpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3Rl
ZCgiTWVtb3J5IGRvbWFpbiBhbHJlYWR5IGVuYWJsZWQiX3MpOwogCiAgICAgbV9pbnN0cnVtZW50
aW5nQWdlbnRzLnNldEVuYWJsZWRNZW1vcnlBZ2VudCh0aGlzKTsKKworICAgIHJldHVybiB7IH07
CiB9CiAKLXZvaWQgSW5zcGVjdG9yTWVtb3J5QWdlbnQ6OmRpc2FibGUoRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yTWVtb3J5
QWdlbnQ6OmRpc2FibGUoKQogewotICAgIGlmIChtX2luc3RydW1lbnRpbmdBZ2VudHMuZW5hYmxl
ZE1lbW9yeUFnZW50KCkgIT0gdGhpcykgewotICAgICAgICBlcnJvclN0cmluZyA9ICJNZW1vcnkg
ZG9tYWluIGFscmVhZHkgZGlzYWJsZWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAg
aWYgKG1faW5zdHJ1bWVudGluZ0FnZW50cy5lbmFibGVkTWVtb3J5QWdlbnQoKSAhPSB0aGlzKQor
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk1lbW9yeSBkb21haW4gYWxyZWFkeSBkaXNh
YmxlZCJfcyk7CiAKICAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMuc2V0RW5hYmxlZE1lbW9yeUFn
ZW50KG51bGxwdHIpOwogCiAgICAgbV90cmFja2luZyA9IGZhbHNlOwogCiAgICAgUmVzb3VyY2VV
c2FnZVRocmVhZDo6cmVtb3ZlT2JzZXJ2ZXIodGhpcyk7CisKKyAgICByZXR1cm4geyB9OwogfQog
Ci12b2lkIEluc3BlY3Rvck1lbW9yeUFnZW50OjpzdGFydFRyYWNraW5nKEVycm9yU3RyaW5nJikK
K1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3Rvck1lbW9yeUFnZW50OjpzdGFy
dFRyYWNraW5nKCkKIHsKICAgICBpZiAobV90cmFja2luZykKLSAgICAgICAgcmV0dXJuOworICAg
ICAgICByZXR1cm4geyB9OwogCiAgICAgUmVzb3VyY2VVc2FnZVRocmVhZDo6YWRkT2JzZXJ2ZXIo
dGhpcywgTWVtb3J5LCBbdGhpc10gKGNvbnN0IFJlc291cmNlVXNhZ2VEYXRhJiBkYXRhKSB7CiAg
ICAgICAgIGNvbGxlY3RTYW1wbGUoZGF0YSk7CkBAIC05NiwyNCArOTUsMjggQEAgdm9pZCBJbnNw
ZWN0b3JNZW1vcnlBZ2VudDo6c3RhcnRUcmFja2luZyhFcnJvclN0cmluZyYpCiAgICAgbV90cmFj
a2luZyA9IHRydWU7CiAKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+dHJhY2tpbmdTdGFydCht
X2Vudmlyb25tZW50LmV4ZWN1dGlvblN0b3B3YXRjaCgpLmVsYXBzZWRUaW1lKCkuc2Vjb25kcygp
KTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yTWVtb3J5QWdlbnQ6OnN0
b3BUcmFja2luZyhFcnJvclN0cmluZyYpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJ
bnNwZWN0b3JNZW1vcnlBZ2VudDo6c3RvcFRyYWNraW5nKCkKIHsKICAgICBpZiAoIW1fdHJhY2tp
bmcpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIFJlc291cmNl
VXNhZ2VUaHJlYWQ6OnJlbW92ZU9ic2VydmVyKHRoaXMpOwogCiAgICAgbV90cmFja2luZyA9IGZh
bHNlOwogCiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPnRyYWNraW5nQ29tcGxldGUobV9lbnZp
cm9ubWVudC5leGVjdXRpb25TdG9wd2F0Y2goKS5lbGFwc2VkVGltZSgpLnNlY29uZHMoKSk7CisK
KyAgICByZXR1cm4geyB9OwogfQogCiB2b2lkIEluc3BlY3Rvck1lbW9yeUFnZW50OjpkaWRIYW5k
bGVNZW1vcnlQcmVzc3VyZShDcml0aWNhbCBjcml0aWNhbCkKIHsKICAgICBNZW1vcnlGcm9udGVu
ZERpc3BhdGNoZXI6OlNldmVyaXR5IHNldmVyaXR5ID0gY3JpdGljYWwgPT0gQ3JpdGljYWw6Olll
cyA/IE1lbW9yeUZyb250ZW5kRGlzcGF0Y2hlcjo6U2V2ZXJpdHk6OkNyaXRpY2FsIDogTWVtb3J5
RnJvbnRlbmREaXNwYXRjaGVyOjpTZXZlcml0eTo6Tm9uQ3JpdGljYWw7Ci0gICAgbV9mcm9udGVu
ZERpc3BhdGNoZXItPm1lbW9yeVByZXNzdXJlKG1fZW52aXJvbm1lbnQuZXhlY3V0aW9uU3RvcHdh
dGNoKCkuZWxhcHNlZFRpbWUoKS5zZWNvbmRzKCksIHNldmVyaXR5KTsKKyAgICBtX2Zyb250ZW5k
RGlzcGF0Y2hlci0+bWVtb3J5UHJlc3N1cmUobV9lbnZpcm9ubWVudC5leGVjdXRpb25TdG9wd2F0
Y2goKS5lbGFwc2VkVGltZSgpLnNlY29uZHMoKSwgUHJvdG9jb2w6OkhlbHBlcnM6OmdldEVudW1D
b25zdGFudFZhbHVlKHNldmVyaXR5KSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yTWVtb3J5QWdlbnQ6
OmNvbGxlY3RTYW1wbGUoY29uc3QgUmVzb3VyY2VVc2FnZURhdGEmIGRhdGEpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rvck1lbW9yeUFnZW50Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rvck1lbW9yeUFnZW50LmgK
aW5kZXggYzQ0NzcyZGJlYWJmOTExNGNmYTQ0N2ZlOTZlODRlM2QyYjUyNjI4ZS4uMWE3NjQwOGVm
OTNjOTYxYjVhMDBhYWMxZjkyNWE4OTM2NDMyOTQ3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JNZW1vcnlBZ2VudC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yTWVtb3J5QWdlbnQuaApAQCAtMzUsMjQg
KzM1LDIyIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdHlwZWRlZiBTdHJpbmcgRXJyb3JT
dHJpbmc7Ci0KIGNsYXNzIEluc3BlY3Rvck1lbW9yeUFnZW50IGZpbmFsIDogcHVibGljIEluc3Bl
Y3RvckFnZW50QmFzZSwgcHVibGljIEluc3BlY3Rvcjo6TWVtb3J5QmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbnNwZWN0b3JNZW1vcnlBZ2VudCk7
CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgSW5zcGVjdG9yTWVt
b3J5QWdlbnQoUGFnZUFnZW50Q29udGV4dCYpOwotICAgIH5JbnNwZWN0b3JNZW1vcnlBZ2VudCgp
IG92ZXJyaWRlOworICAgIH5JbnNwZWN0b3JNZW1vcnlBZ2VudCgpOwogCiAgICAgLy8gSW5zcGVj
dG9yQWdlbnRCYXNlCi0gICAgdm9pZCBkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVj
dG9yOjpGcm9udGVuZFJvdXRlciosIEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXIqKSBvdmVy
cmlkZTsKLSAgICB2b2lkIHdpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6
RGlzY29ubmVjdFJlYXNvbikgb3ZlcnJpZGU7CisgICAgdm9pZCBkaWRDcmVhdGVGcm9udGVuZEFu
ZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9udGVuZFJvdXRlciosIEluc3BlY3Rvcjo6QmFja2VuZERp
c3BhdGNoZXIqKTsKKyAgICB2b2lkIHdpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3Bl
Y3Rvcjo6RGlzY29ubmVjdFJlYXNvbik7CiAKICAgICAvLyBNZW1vcnlCYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXIKLSAgICB2b2lkIGVuYWJsZShFcnJvclN0cmluZyYpIG92ZXJyaWRlOwotICAgIHZv
aWQgZGlzYWJsZShFcnJvclN0cmluZyYpIG92ZXJyaWRlOwotICAgIHZvaWQgc3RhcnRUcmFja2lu
ZyhFcnJvclN0cmluZyYpIG92ZXJyaWRlOwotICAgIHZvaWQgc3RvcFRyYWNraW5nKEVycm9yU3Ry
aW5nJikgb3ZlcnJpZGU7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2
b2lkPiBlbmFibGUoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZv
aWQ+IGRpc2FibGUoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZv
aWQ+IHN0YXJ0VHJhY2tpbmcoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmlu
Z09yPHZvaWQ+IHN0b3BUcmFja2luZygpOwogCiAgICAgLy8gSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uCiAgICAgdm9pZCBkaWRIYW5kbGVNZW1vcnlQcmVzc3VyZShDcml0aWNhbCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rvck5ldHdvcmtBZ2Vu
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rvck5ldHdvcmtB
Z2VudC5jcHAKaW5kZXggMDlmMjc3ZjE5NWQzNTZjZjZkMzE0ZmJmNzJjZmNiZWFkNjY3ZTE1Yy4u
MDllNmM2ZDRjOTZkNjQ0MTgyM2RkMDUxMGJmOWRjOTI2ODQ5NzAzNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JOZXR3b3JrQWdlbnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yTmV0d29ya0FnZW50
LmNwcApAQCAtMTcyLDkgKzE3Miw5IEBAIHByaXZhdGU6CiAgICAgaW50IG1fc3RhdHVzQ29kZTsK
IH07CiAKLVJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpXZWJTb2NrZXRGcmFtZT4g
YnVpbGRXZWJTb2NrZXRNZXNzYWdlKGNvbnN0IFdlYlNvY2tldEZyYW1lJiBmcmFtZSkKK1JlZjxQ
cm90b2NvbDo6TmV0d29yazo6V2ViU29ja2V0RnJhbWU+IGJ1aWxkV2ViU29ja2V0TWVzc2FnZShj
b25zdCBXZWJTb2NrZXRGcmFtZSYgZnJhbWUpCiB7Ci0gICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJv
dG9jb2w6Ok5ldHdvcms6OldlYlNvY2tldEZyYW1lOjpjcmVhdGUoKQorICAgIHJldHVybiBQcm90
b2NvbDo6TmV0d29yazo6V2ViU29ja2V0RnJhbWU6OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRPcGNv
ZGUoZnJhbWUub3BDb2RlKQogICAgICAgICAuc2V0TWFzayhmcmFtZS5tYXNrZWQpCiAgICAgICAg
IC5zZXRQYXlsb2FkRGF0YShmcmFtZS5vcENvZGUgPT0gMSA/IFN0cmluZzo6ZnJvbVVURjhXaXRo
TGF0aW4xRmFsbGJhY2soZnJhbWUucGF5bG9hZCwgZnJhbWUucGF5bG9hZExlbmd0aCkgOiBiYXNl
NjRFbmNvZGUoZnJhbWUucGF5bG9hZCwgZnJhbWUucGF5bG9hZExlbmd0aCkpCkBAIC0yMDEsMjAg
KzIwMSwyMSBAQCB2b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6ZGlkQ3JlYXRlRnJvbnRlbmRB
bmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRSb3V0ZQogCiB2b2lkIEluc3BlY3Rvck5ldHdv
cmtBZ2VudDo6d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25u
ZWN0UmVhc29uKQogewotICAgIEVycm9yU3RyaW5nIGlnbm9yZWQ7Ci0gICAgZGlzYWJsZShpZ25v
cmVkKTsKKyAgICBkaXNhYmxlKCk7CiB9CiAKLXN0YXRpYyBSZWY8SlNPTjo6T2JqZWN0PiBidWls
ZE9iamVjdEZvckhlYWRlcnMoY29uc3QgSFRUUEhlYWRlck1hcCYgaGVhZGVycykKK3N0YXRpYyBS
ZWY8UHJvdG9jb2w6Ok5ldHdvcms6OkhlYWRlcnM+IGJ1aWxkT2JqZWN0Rm9ySGVhZGVycyhjb25z
dCBIVFRQSGVhZGVyTWFwJiBoZWFkZXJzKQogewotICAgIFJlZjxKU09OOjpPYmplY3Q+IGhlYWRl
cnNPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGF1dG8gaGVhZGVyc1ZhbHVl
ID0gUHJvdG9jb2w6Ok5ldHdvcms6OkhlYWRlcnM6OmNyZWF0ZSgpLnJlbGVhc2UoKTsKIAorICAg
IGF1dG8gaGVhZGVyc09iamVjdCA9IGhlYWRlcnNWYWx1ZS0+YXNPYmplY3QoKTsKICAgICBmb3Ig
KGNvbnN0IGF1dG8mIGhlYWRlciA6IGhlYWRlcnMpCiAgICAgICAgIGhlYWRlcnNPYmplY3QtPnNl
dFN0cmluZyhoZWFkZXIua2V5LCBoZWFkZXIudmFsdWUpOwotICAgIHJldHVybiBoZWFkZXJzT2Jq
ZWN0OworCisgICAgcmV0dXJuIGhlYWRlcnNWYWx1ZTsKIH0KIAotUmVmPEluc3BlY3Rvcjo6UHJv
dG9jb2w6Ok5ldHdvcms6OlJlc291cmNlVGltaW5nPiBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmJ1
aWxkT2JqZWN0Rm9yVGltaW5nKGNvbnN0IE5ldHdvcmtMb2FkTWV0cmljcyogdGltaW5nLCBSZXNv
dXJjZUxvYWRlciYgcmVzb3VyY2VMb2FkZXIpCitSZWY8UHJvdG9jb2w6Ok5ldHdvcms6OlJlc291
cmNlVGltaW5nPiBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yVGltaW5nKGNv
bnN0IE5ldHdvcmtMb2FkTWV0cmljcyogdGltaW5nLCBSZXNvdXJjZUxvYWRlciYgcmVzb3VyY2VM
b2FkZXIpCiB7CiAgICAgYXV0byYgbG9hZFRpbWluZyA9IHJlc291cmNlTG9hZGVyLmxvYWRUaW1p
bmcoKTsKIApAQCAtMjI3LDcgKzIyOCw3IEBAIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3
b3JrOjpSZXNvdXJjZVRpbWluZz4gSW5zcGVjdG9yTmV0d29ya0FnZW50OjpidWlsZE9iCiAgICAg
ICAgIHRpbWluZyA9ICZlbXB0eS52YWx1ZSgpOwogICAgIH0KIAotICAgIHJldHVybiBJbnNwZWN0
b3I6OlByb3RvY29sOjpOZXR3b3JrOjpSZXNvdXJjZVRpbWluZzo6Y3JlYXRlKCkKKyAgICByZXR1
cm4gUHJvdG9jb2w6Ok5ldHdvcms6OlJlc291cmNlVGltaW5nOjpjcmVhdGUoKQogICAgICAgICAu
c2V0U3RhcnRUaW1lKGVsYXBzZWRUaW1lU2luY2UobG9hZFRpbWluZy5zdGFydFRpbWUoKSkpCiAg
ICAgICAgIC5zZXRSZWRpcmVjdFN0YXJ0KGVsYXBzZWRUaW1lU2luY2UobG9hZFRpbWluZy5yZWRp
cmVjdFN0YXJ0KCkpKQogICAgICAgICAuc2V0UmVkaXJlY3RFbmQoZWxhcHNlZFRpbWVTaW5jZShs
b2FkVGltaW5nLnJlZGlyZWN0RW5kKCkpKQpAQCAtMjQzLDI2ICsyNDQsMjYgQEAgUmVmPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OlJlc291cmNlVGltaW5nPiBJbnNwZWN0b3JOZXR3b3Jr
QWdlbnQ6OmJ1aWxkT2IKICAgICAgICAgLnJlbGVhc2UoKTsKIH0KIAotc3RhdGljIEluc3BlY3Rv
cjo6UHJvdG9jb2w6Ok5ldHdvcms6Ok1ldHJpY3M6OlByaW9yaXR5IHRvUHJvdG9jb2woTmV0d29y
a0xvYWRQcmlvcml0eSBwcmlvcml0eSkKK3N0YXRpYyBQcm90b2NvbDo6TmV0d29yazo6TWV0cmlj
czo6UHJpb3JpdHkgdG9Qcm90b2NvbChOZXR3b3JrTG9hZFByaW9yaXR5IHByaW9yaXR5KQogewog
ICAgIHN3aXRjaCAocHJpb3JpdHkpIHsKICAgICBjYXNlIE5ldHdvcmtMb2FkUHJpb3JpdHk6Okxv
dzoKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6Ok1ldHJpY3M6
OlByaW9yaXR5OjpMb3c7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6TmV0d29yazo6TWV0cmlj
czo6UHJpb3JpdHk6OkxvdzsKICAgICBjYXNlIE5ldHdvcmtMb2FkUHJpb3JpdHk6Ok1lZGl1bToK
LSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6Ok1ldHJpY3M6OlBy
aW9yaXR5OjpNZWRpdW07CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6TmV0d29yazo6TWV0cmlj
czo6UHJpb3JpdHk6Ok1lZGl1bTsKICAgICBjYXNlIE5ldHdvcmtMb2FkUHJpb3JpdHk6OkhpZ2g6
Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpNZXRyaWNzOjpQ
cmlvcml0eTo6SGlnaDsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpOZXR3b3JrOjpNZXRyaWNz
OjpQcmlvcml0eTo6SGlnaDsKICAgICBjYXNlIE5ldHdvcmtMb2FkUHJpb3JpdHk6OlVua25vd246
CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAg
IHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpNZXRyaWNzOjpQcmlvcml0eTo6
TWVkaXVtOworICAgIHJldHVybiBQcm90b2NvbDo6TmV0d29yazo6TWV0cmljczo6UHJpb3JpdHk6
Ok1lZGl1bTsKIH0KIAotUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6Ok1ldHJpY3M+
IEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6YnVpbGRPYmplY3RGb3JNZXRyaWNzKGNvbnN0IE5ldHdv
cmtMb2FkTWV0cmljcyYgbmV0d29ya0xvYWRNZXRyaWNzKQorUmVmPFByb3RvY29sOjpOZXR3b3Jr
OjpNZXRyaWNzPiBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yTWV0cmljcyhj
b25zdCBOZXR3b3JrTG9hZE1ldHJpY3MmIG5ldHdvcmtMb2FkTWV0cmljcykKIHsKLSAgICBhdXRv
IG1ldHJpY3MgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpNZXRyaWNzOjpjcmVhdGUo
KS5yZWxlYXNlKCk7CisgICAgYXV0byBtZXRyaWNzID0gUHJvdG9jb2w6Ok5ldHdvcms6Ok1ldHJp
Y3M6OmNyZWF0ZSgpLnJlbGVhc2UoKTsKIAogICAgIGlmICghbmV0d29ya0xvYWRNZXRyaWNzLnBy
b3RvY29sLmlzTnVsbCgpKQogICAgICAgICBtZXRyaWNzLT5zZXRQcm90b2NvbChuZXR3b3JrTG9h
ZE1ldHJpY3MucHJvdG9jb2wpOwpAQCAtMjg2LDcgKzI4Nyw3IEBAIFJlZjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpOZXR3b3JrOjpNZXRyaWNzPiBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmJ1aWxkT2Jq
ZWN0Rm9yCiAgICAgaWYgKG5ldHdvcmtMb2FkTWV0cmljcy5yZXNwb25zZUJvZHlEZWNvZGVkU2l6
ZSAhPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQ2NF90Pjo6bWF4KCkpCiAgICAgICAgIG1ldHJp
Y3MtPnNldFJlc3BvbnNlQm9keURlY29kZWRTaXplKG5ldHdvcmtMb2FkTWV0cmljcy5yZXNwb25z
ZUJvZHlEZWNvZGVkU2l6ZSk7CiAKLSAgICBhdXRvIGNvbm5lY3Rpb25QYXlsb2FkID0gSW5zcGVj
dG9yOjpQcm90b2NvbDo6U2VjdXJpdHk6OkNvbm5lY3Rpb246OmNyZWF0ZSgpCisgICAgYXV0byBj
b25uZWN0aW9uUGF5bG9hZCA9IFByb3RvY29sOjpTZWN1cml0eTo6Q29ubmVjdGlvbjo6Y3JlYXRl
KCkKICAgICAgICAgLnJlbGVhc2UoKTsKIAogICAgIGlmICghbmV0d29ya0xvYWRNZXRyaWNzLnRs
c1Byb3RvY29sLmlzRW1wdHkoKSkKQEAgLTMwMCw5ICszMDEsOSBAQCBSZWY8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6TmV0d29yazo6TWV0cmljcz4gSW5zcGVjdG9yTmV0d29ya0FnZW50OjpidWlsZE9i
amVjdEZvcgogICAgIHJldHVybiBtZXRyaWNzOwogfQogCi1zdGF0aWMgUmVmPEluc3BlY3Rvcjo6
UHJvdG9jb2w6Ok5ldHdvcms6OlJlcXVlc3Q+IGJ1aWxkT2JqZWN0Rm9yUmVzb3VyY2VSZXF1ZXN0
KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKK3N0YXRpYyBSZWY8UHJvdG9jb2w6Ok5l
dHdvcms6OlJlcXVlc3Q+IGJ1aWxkT2JqZWN0Rm9yUmVzb3VyY2VSZXF1ZXN0KGNvbnN0IFJlc291
cmNlUmVxdWVzdCYgcmVxdWVzdCkKIHsKLSAgICBhdXRvIHJlcXVlc3RPYmplY3QgPSBJbnNwZWN0
b3I6OlByb3RvY29sOjpOZXR3b3JrOjpSZXF1ZXN0OjpjcmVhdGUoKQorICAgIGF1dG8gcmVxdWVz
dE9iamVjdCA9IFByb3RvY29sOjpOZXR3b3JrOjpSZXF1ZXN0OjpjcmVhdGUoKQogICAgICAgICAu
c2V0VXJsKHJlcXVlc3QudXJsKCkuc3RyaW5nKCkpCiAgICAgICAgIC5zZXRNZXRob2QocmVxdWVz
dC5odHRwTWV0aG9kKCkpCiAgICAgICAgIC5zZXRIZWFkZXJzKGJ1aWxkT2JqZWN0Rm9ySGVhZGVy
cyhyZXF1ZXN0Lmh0dHBIZWFkZXJGaWVsZHMoKSkpCkBAIC0zMTQsNDQgKzMxNSw0MiBAQCBzdGF0
aWMgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OlJlcXVlc3Q+IGJ1aWxkT2JqZWN0
Rm9yUmVzb3VyY2VSZXF1ZXN0KAogICAgIHJldHVybiByZXF1ZXN0T2JqZWN0OwogfQogCi1zdGF0
aWMgSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6UmVzcG9uc2U6OlNvdXJjZSByZXNwb25z
ZVNvdXJjZShSZXNvdXJjZVJlc3BvbnNlOjpTb3VyY2Ugc291cmNlKQorc3RhdGljIFByb3RvY29s
OjpOZXR3b3JrOjpSZXNwb25zZTo6U291cmNlIHJlc3BvbnNlU291cmNlKFJlc291cmNlUmVzcG9u
c2U6OlNvdXJjZSBzb3VyY2UpCiB7CiAgICAgc3dpdGNoIChzb3VyY2UpIHsKICAgICBjYXNlIFJl
c291cmNlUmVzcG9uc2U6OlNvdXJjZTo6RE9NQ2FjaGU6CiAgICAgY2FzZSBSZXNvdXJjZVJlc3Bv
bnNlOjpTb3VyY2U6OkFwcGxpY2F0aW9uQ2FjaGU6CiAgICAgICAgIC8vIEZJWE1FOiBBZGQgc3Vw
cG9ydCBmb3IgQXBwbGljYXRpb25DYWNoZSBpbiBpbnNwZWN0b3IuCiAgICAgY2FzZSBSZXNvdXJj
ZVJlc3BvbnNlOjpTb3VyY2U6OlVua25vd246Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlBy
b3RvY29sOjpOZXR3b3JrOjpSZXNwb25zZTo6U291cmNlOjpVbmtub3duOworICAgICAgICByZXR1
cm4gUHJvdG9jb2w6Ok5ldHdvcms6OlJlc3BvbnNlOjpTb3VyY2U6OlVua25vd247CiAgICAgY2Fz
ZSBSZXNvdXJjZVJlc3BvbnNlOjpTb3VyY2U6Ok5ldHdvcms6Ci0gICAgICAgIHJldHVybiBJbnNw
ZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpSZXNwb25zZTo6U291cmNlOjpOZXR3b3JrOworICAg
ICAgICByZXR1cm4gUHJvdG9jb2w6Ok5ldHdvcms6OlJlc3BvbnNlOjpTb3VyY2U6Ok5ldHdvcms7
CiAgICAgY2FzZSBSZXNvdXJjZVJlc3BvbnNlOjpTb3VyY2U6Ok1lbW9yeUNhY2hlOgogICAgIGNh
c2UgUmVzb3VyY2VSZXNwb25zZTo6U291cmNlOjpNZW1vcnlDYWNoZUFmdGVyVmFsaWRhdGlvbjoK
LSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OlJlc3BvbnNlOjpT
b3VyY2U6Ok1lbW9yeUNhY2hlOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6Ok5ldHdvcms6OlJl
c3BvbnNlOjpTb3VyY2U6Ok1lbW9yeUNhY2hlOwogICAgIGNhc2UgUmVzb3VyY2VSZXNwb25zZTo6
U291cmNlOjpEaXNrQ2FjaGU6CiAgICAgY2FzZSBSZXNvdXJjZVJlc3BvbnNlOjpTb3VyY2U6OkRp
c2tDYWNoZUFmdGVyVmFsaWRhdGlvbjoKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9j
b2w6Ok5ldHdvcms6OlJlc3BvbnNlOjpTb3VyY2U6OkRpc2tDYWNoZTsKKyAgICAgICAgcmV0dXJu
IFByb3RvY29sOjpOZXR3b3JrOjpSZXNwb25zZTo6U291cmNlOjpEaXNrQ2FjaGU7CiAgICAgY2Fz
ZSBSZXNvdXJjZVJlc3BvbnNlOjpTb3VyY2U6OlNlcnZpY2VXb3JrZXI6Ci0gICAgICAgIHJldHVy
biBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpSZXNwb25zZTo6U291cmNlOjpTZXJ2aWNl
V29ya2VyOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6Ok5ldHdvcms6OlJlc3BvbnNlOjpTb3Vy
Y2U6OlNlcnZpY2VXb3JrZXI7CiAgICAgY2FzZSBSZXNvdXJjZVJlc3BvbnNlOjpTb3VyY2U6Oklu
c3BlY3Rvck92ZXJyaWRlOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0
d29yazo6UmVzcG9uc2U6OlNvdXJjZTo6SW5zcGVjdG9yT3ZlcnJpZGU7CisgICAgICAgIHJldHVy
biBQcm90b2NvbDo6TmV0d29yazo6UmVzcG9uc2U6OlNvdXJjZTo6SW5zcGVjdG9yT3ZlcnJpZGU7
CiAgICAgfQogCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIEluc3BlY3Rv
cjo6UHJvdG9jb2w6Ok5ldHdvcms6OlJlc3BvbnNlOjpTb3VyY2U6OlVua25vd247CisgICAgcmV0
dXJuIFByb3RvY29sOjpOZXR3b3JrOjpSZXNwb25zZTo6U291cmNlOjpVbmtub3duOwogfQogCi1S
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6UmVzcG9uc2U+IEluc3BlY3Rvck5l
dHdvcmtBZ2VudDo6YnVpbGRPYmplY3RGb3JSZXNvdXJjZVJlc3BvbnNlKGNvbnN0IFJlc291cmNl
UmVzcG9uc2UmIHJlc3BvbnNlLCBSZXNvdXJjZUxvYWRlciogcmVzb3VyY2VMb2FkZXIpCitSZWZQ
dHI8UHJvdG9jb2w6Ok5ldHdvcms6OlJlc3BvbnNlPiBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmJ1
aWxkT2JqZWN0Rm9yUmVzb3VyY2VSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNw
b25zZSwgUmVzb3VyY2VMb2FkZXIqIHJlc291cmNlTG9hZGVyKQogewogICAgIGlmIChyZXNwb25z
ZS5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBSZWY8SlNPTjo6T2Jq
ZWN0PiBoZWFkZXJzID0gYnVpbGRPYmplY3RGb3JIZWFkZXJzKHJlc3BvbnNlLmh0dHBIZWFkZXJG
aWVsZHMoKSk7Ci0KLSAgICBhdXRvIHJlc3BvbnNlT2JqZWN0ID0gSW5zcGVjdG9yOjpQcm90b2Nv
bDo6TmV0d29yazo6UmVzcG9uc2U6OmNyZWF0ZSgpCisgICAgYXV0byByZXNwb25zZU9iamVjdCA9
IFByb3RvY29sOjpOZXR3b3JrOjpSZXNwb25zZTo6Y3JlYXRlKCkKICAgICAgICAgLnNldFVybChy
ZXNwb25zZS51cmwoKS5zdHJpbmcoKSkKICAgICAgICAgLnNldFN0YXR1cyhyZXNwb25zZS5odHRw
U3RhdHVzQ29kZSgpKQogICAgICAgICAuc2V0U3RhdHVzVGV4dChyZXNwb25zZS5odHRwU3RhdHVz
VGV4dCgpKQotICAgICAgICAuc2V0SGVhZGVycyhXVEZNb3ZlKGhlYWRlcnMpKQorICAgICAgICAu
c2V0SGVhZGVycyhidWlsZE9iamVjdEZvckhlYWRlcnMocmVzcG9uc2UuaHR0cEhlYWRlckZpZWxk
cygpKSkKICAgICAgICAgLnNldE1pbWVUeXBlKHJlc3BvbnNlLm1pbWVUeXBlKCkpCiAgICAgICAg
IC5zZXRTb3VyY2UocmVzcG9uc2VTb3VyY2UocmVzcG9uc2Uuc291cmNlKCkpKQogICAgICAgICAu
cmVsZWFzZSgpOwpAQCAtMzYwLDExICszNTksMTEgQEAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9j
b2w6Ok5ldHdvcms6OlJlc3BvbnNlPiBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmJ1aWxkT2JqZWMK
ICAgICAgICAgcmVzcG9uc2VPYmplY3QtPnNldFRpbWluZyhidWlsZE9iamVjdEZvclRpbWluZyhy
ZXNwb25zZS5kZXByZWNhdGVkTmV0d29ya0xvYWRNZXRyaWNzT3JOdWxsKCksICpyZXNvdXJjZUxv
YWRlcikpOwogCiAgICAgaWYgKGF1dG8mIGNlcnRpZmljYXRlSW5mbyA9IHJlc3BvbnNlLmNlcnRp
ZmljYXRlSW5mbygpKSB7Ci0gICAgICAgIGF1dG8gc2VjdXJpdHlQYXlsb2FkID0gSW5zcGVjdG9y
OjpQcm90b2NvbDo6U2VjdXJpdHk6OlNlY3VyaXR5OjpjcmVhdGUoKQorICAgICAgICBhdXRvIHNl
Y3VyaXR5UGF5bG9hZCA9IFByb3RvY29sOjpTZWN1cml0eTo6U2VjdXJpdHk6OmNyZWF0ZSgpCiAg
ICAgICAgICAgICAucmVsZWFzZSgpOwogCiAgICAgICAgIGlmIChhdXRvIGNlcnRpZmljYXRlU3Vt
bWFyeUluZm8gPSBjZXJ0aWZpY2F0ZUluZm8udmFsdWUoKS5zdW1tYXJ5KCkpIHsKLSAgICAgICAg
ICAgIGF1dG8gY2VydGlmaWNhdGVQYXlsb2FkID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6U2VjdXJp
dHk6OkNlcnRpZmljYXRlOjpjcmVhdGUoKQorICAgICAgICAgICAgYXV0byBjZXJ0aWZpY2F0ZVBh
eWxvYWQgPSBQcm90b2NvbDo6U2VjdXJpdHk6OkNlcnRpZmljYXRlOjpjcmVhdGUoKQogICAgICAg
ICAgICAgICAgIC5yZWxlYXNlKCk7CiAKICAgICAgICAgICAgIGNlcnRpZmljYXRlUGF5bG9hZC0+
c2V0U3ViamVjdChjZXJ0aWZpY2F0ZVN1bW1hcnlJbmZvLnZhbHVlKCkuc3ViamVjdCk7CkBAIC0z
OTYsMTYgKzM5NSwxNiBAQCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6UmVz
cG9uc2U+IEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6YnVpbGRPYmplYwogICAgIHJldHVybiByZXNw
b25zZU9iamVjdDsKIH0KIAotUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OkNhY2hl
ZFJlc291cmNlPiBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yQ2FjaGVkUmVz
b3VyY2UoQ2FjaGVkUmVzb3VyY2UqIGNhY2hlZFJlc291cmNlKQorUmVmPFByb3RvY29sOjpOZXR3
b3JrOjpDYWNoZWRSZXNvdXJjZT4gSW5zcGVjdG9yTmV0d29ya0FnZW50OjpidWlsZE9iamVjdEZv
ckNhY2hlZFJlc291cmNlKENhY2hlZFJlc291cmNlKiBjYWNoZWRSZXNvdXJjZSkKIHsKLSAgICBh
dXRvIHJlc291cmNlT2JqZWN0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6Q2FjaGVk
UmVzb3VyY2U6OmNyZWF0ZSgpCisgICAgYXV0byByZXNvdXJjZU9iamVjdCA9IFByb3RvY29sOjpO
ZXR3b3JrOjpDYWNoZWRSZXNvdXJjZTo6Y3JlYXRlKCkKICAgICAgICAgLnNldFVybChjYWNoZWRS
ZXNvdXJjZS0+dXJsKCkuc3RyaW5nKCkpCiAgICAgICAgIC5zZXRUeXBlKEluc3BlY3RvclBhZ2VB
Z2VudDo6Y2FjaGVkUmVzb3VyY2VUeXBlSlNPTigqY2FjaGVkUmVzb3VyY2UpKQogICAgICAgICAu
c2V0Qm9keVNpemUoY2FjaGVkUmVzb3VyY2UtPmVuY29kZWRTaXplKCkpCiAgICAgICAgIC5yZWxl
YXNlKCk7CiAKLSAgICBhdXRvIHJlc291cmNlUmVzcG9uc2UgPSBidWlsZE9iamVjdEZvclJlc291
cmNlUmVzcG9uc2UoY2FjaGVkUmVzb3VyY2UtPnJlc3BvbnNlKCksIGNhY2hlZFJlc291cmNlLT5s
b2FkZXIoKSk7Ci0gICAgcmVzb3VyY2VPYmplY3QtPnNldFJlc3BvbnNlKFdURk1vdmUocmVzb3Vy
Y2VSZXNwb25zZSkpOworICAgIGlmIChhdXRvIHJlc291cmNlUmVzcG9uc2UgPSBidWlsZE9iamVj
dEZvclJlc291cmNlUmVzcG9uc2UoY2FjaGVkUmVzb3VyY2UtPnJlc3BvbnNlKCksIGNhY2hlZFJl
c291cmNlLT5sb2FkZXIoKSkpCisgICAgICAgIHJlc291cmNlT2JqZWN0LT5zZXRSZXNwb25zZShy
ZXNvdXJjZVJlc3BvbnNlLnJlbGVhc2VOb25OdWxsKCkpOwogCiAgICAgU3RyaW5nIHNvdXJjZU1h
cHBpbmdVUkwgPSBJbnNwZWN0b3JQYWdlQWdlbnQ6OnNvdXJjZU1hcFVSTEZvclJlc291cmNlKGNh
Y2hlZFJlc291cmNlKTsKICAgICBpZiAoIXNvdXJjZU1hcHBpbmdVUkwuaXNFbXB0eSgpKQpAQCAt
NDI5LDkgKzQyOCw5IEBAIHZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50Ojp3aWxsU2VuZFJlcXVl
c3QodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBEb2N1bWVudExvCiAgICAgZG91YmxlIHNlbmRU
aW1lc3RhbXAgPSB0aW1lc3RhbXAoKTsKICAgICBXYWxsVGltZSB3YWxsdGltZSA9IFdhbGxUaW1l
Ojpub3coKTsKIAotICAgIFN0cmluZyByZXF1ZXN0SWQgPSBJZGVudGlmaWVyc0ZhY3Rvcnk6OnJl
cXVlc3RJZChpZGVudGlmaWVyKTsKLSAgICBTdHJpbmcgZnJhbWVJZCA9IGZyYW1lSWRlbnRpZmll
cihsb2FkZXIpOwotICAgIFN0cmluZyBsb2FkZXJJZCA9IGxvYWRlcklkZW50aWZpZXIobG9hZGVy
KTsKKyAgICBhdXRvIHJlcXVlc3RJZCA9IElkZW50aWZpZXJzRmFjdG9yeTo6cmVxdWVzdElkKGlk
ZW50aWZpZXIpOworICAgIGF1dG8gZnJhbWVJZCA9IGZyYW1lSWRlbnRpZmllcihsb2FkZXIpOwor
ICAgIGF1dG8gbG9hZGVySWQgPSBsb2FkZXJJZGVudGlmaWVyKGxvYWRlcik7CiAgICAgU3RyaW5n
IHRhcmdldElkID0gcmVxdWVzdC5pbml0aWF0b3JJZGVudGlmaWVyKCk7CiAKICAgICBpZiAodHlw
ZSA9PSBJbnNwZWN0b3JQYWdlQWdlbnQ6Ok90aGVyUmVzb3VyY2UpIHsKQEAgLTQ2Miw3ICs0NjEs
MTAgQEAgdm9pZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OndpbGxTZW5kUmVxdWVzdCh1bnNpZ25l
ZCBsb25nIGlkZW50aWZpZXIsIERvY3VtZW50TG8KICAgICBhdXRvIGluaXRpYXRvck9iamVjdCA9
IGJ1aWxkSW5pdGlhdG9yT2JqZWN0KGRvY3VtZW50LCAmcmVxdWVzdCk7CiAKICAgICBTdHJpbmcg
dXJsID0gbG9hZGVyID8gbG9hZGVyLT51cmwoKS5zdHJpbmcoKSA6IHJlcXVlc3QudXJsKCkuc3Ry
aW5nKCk7Ci0gICAgbV9mcm9udGVuZERpc3BhdGNoZXItPnJlcXVlc3RXaWxsQmVTZW50KHJlcXVl
c3RJZCwgZnJhbWVJZCwgbG9hZGVySWQsIHVybCwgYnVpbGRPYmplY3RGb3JSZXNvdXJjZVJlcXVl
c3QocmVxdWVzdCksIHNlbmRUaW1lc3RhbXAsIHdhbGx0aW1lLnNlY29uZHNTaW5jZUVwb2NoKCku
c2Vjb25kcygpLCBpbml0aWF0b3JPYmplY3QsIGJ1aWxkT2JqZWN0Rm9yUmVzb3VyY2VSZXNwb25z
ZShyZWRpcmVjdFJlc3BvbnNlLCBudWxscHRyKSwgdHlwZSAhPSBJbnNwZWN0b3JQYWdlQWdlbnQ6
Ok90aGVyUmVzb3VyY2UgPyAmcHJvdG9jb2xSZXNvdXJjZVR5cGUgOiBudWxscHRyLCB0YXJnZXRJ
ZC5pc0VtcHR5KCkgPyBudWxscHRyIDogJnRhcmdldElkKTsKKyAgICBPcHRpb25hbDxQcm90b2Nv
bDo6UGFnZTo6UmVzb3VyY2VUeXBlPiB0eXBlUGF5bG9hZDsKKyAgICBpZiAodHlwZSAhPSBJbnNw
ZWN0b3JQYWdlQWdlbnQ6Ok90aGVyUmVzb3VyY2UpCisgICAgICAgIHR5cGVQYXlsb2FkID0gcHJv
dG9jb2xSZXNvdXJjZVR5cGU7CisgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPnJlcXVlc3RXaWxs
QmVTZW50KHJlcXVlc3RJZCwgZnJhbWVJZCwgbG9hZGVySWQsIHVybCwgYnVpbGRPYmplY3RGb3JS
ZXNvdXJjZVJlcXVlc3QocmVxdWVzdCksIHNlbmRUaW1lc3RhbXAsIHdhbGx0aW1lLnNlY29uZHNT
aW5jZUVwb2NoKCkuc2Vjb25kcygpLCBXVEZNb3ZlKGluaXRpYXRvck9iamVjdCksIGJ1aWxkT2Jq
ZWN0Rm9yUmVzb3VyY2VSZXNwb25zZShyZWRpcmVjdFJlc3BvbnNlLCBudWxscHRyKSwgV1RGTW92
ZSh0eXBlUGF5bG9hZCksIHRhcmdldElkKTsKIH0KIAogc3RhdGljIEluc3BlY3RvclBhZ2VBZ2Vu
dDo6UmVzb3VyY2VUeXBlIHJlc291cmNlVHlwZUZvckNhY2hlZFJlc291cmNlKENhY2hlZFJlc291
cmNlKiByZXNvdXJjZSkKQEAgLTUxNCw3ICs1MTYsOCBAQCB2b2lkIEluc3BlY3Rvck5ldHdvcmtB
Z2VudDo6ZGlkUmVjZWl2ZVJlc3BvbnNlKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgRG9jdW1l
bgogICAgICAgICB9KTsKICAgICB9CiAKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
TmV0d29yazo6UmVzcG9uc2U+IHJlc291cmNlUmVzcG9uc2UgPSBidWlsZE9iamVjdEZvclJlc291
cmNlUmVzcG9uc2UocmVhbFJlc3BvbnNlID8gKnJlYWxSZXNwb25zZSA6IHJlc3BvbnNlLCByZXNv
dXJjZUxvYWRlcik7CisgICAgUmVmUHRyPFByb3RvY29sOjpOZXR3b3JrOjpSZXNwb25zZT4gcmVz
b3VyY2VSZXNwb25zZSA9IGJ1aWxkT2JqZWN0Rm9yUmVzb3VyY2VSZXNwb25zZShyZWFsUmVzcG9u
c2UgPyAqcmVhbFJlc3BvbnNlIDogcmVzcG9uc2UsIHJlc291cmNlTG9hZGVyKTsKKyAgICBBU1NF
UlQocmVzb3VyY2VSZXNwb25zZSk7CiAKICAgICBib29sIGlzTm90TW9kaWZpZWQgPSByZXNwb25z
ZS5odHRwU3RhdHVzQ29kZSgpID09IDMwNDsKIApAQCAtNTI3LDcgKzUzMCw3IEBAIHZvaWQgSW5z
cGVjdG9yTmV0d29ya0FnZW50OjpkaWRSZWNlaXZlUmVzcG9uc2UodW5zaWduZWQgbG9uZyBpZGVu
dGlmaWVyLCBEb2N1bWVuCiAgICAgaWYgKGNhY2hlZFJlc291cmNlKSB7CiAgICAgICAgIC8vIFVz
ZSBtaW1lIHR5cGUgZnJvbSBjYWNoZWQgcmVzb3VyY2UgaW4gY2FzZSB0aGUgb25lIGluIHJlc3Bv
bnNlIGlzIGVtcHR5LgogICAgICAgICBpZiAocmVzb3VyY2VSZXNwb25zZSAmJiByZXNwb25zZS5t
aW1lVHlwZSgpLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJlc291cmNlUmVzcG9uc2UtPnNldFN0
cmluZyhJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpSZXNwb25zZTo6TWltZVR5cGUsIGNh
Y2hlZFJlc291cmNlLT5yZXNwb25zZSgpLm1pbWVUeXBlKCkpOworICAgICAgICAgICAgcmVzb3Vy
Y2VSZXNwb25zZS0+c2V0U3RyaW5nKFByb3RvY29sOjpOZXR3b3JrOjpSZXNwb25zZTo6bWltZVR5
cGVLZXksIGNhY2hlZFJlc291cmNlLT5yZXNwb25zZSgpLm1pbWVUeXBlKCkpOwogICAgICAgICBt
X3Jlc291cmNlc0RhdGEtPmFkZENhY2hlZFJlc291cmNlKHJlcXVlc3RJZCwgY2FjaGVkUmVzb3Vy
Y2UpOwogICAgIH0KIApAQCAtNTQ5LDIxICs1NTIsMjEgQEAgdm9pZCBJbnNwZWN0b3JOZXR3b3Jr
QWdlbnQ6OmRpZFJlY2VpdmVSZXNwb25zZSh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIERvY3Vt
ZW4KICAgICAgICAgICAgICAgICBtX3Jlc291cmNlc0RhdGEtPm1heWJlQWRkUmVzb3VyY2VEYXRh
KHJlcXVlc3RJZCwgcHJldmlvdXNCdWZmZXItPmRhdGEoKSwgcHJldmlvdXNCdWZmZXItPnNpemUo
KSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIHJlc291cmNlUmVz
cG9uc2UtPnNldFN0cmluZygibWltZVR5cGUiX3MsIHByZXZpb3VzUmVzb3VyY2VEYXRhLT5taW1l
VHlwZSgpKTsKKyAgICAgICAgICAgIHJlc291cmNlUmVzcG9uc2UtPnNldFN0cmluZyhQcm90b2Nv
bDo6TmV0d29yazo6UmVzcG9uc2U6Om1pbWVUeXBlS2V5LCBwcmV2aW91c1Jlc291cmNlRGF0YS0+
bWltZVR5cGUoKSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIHJlc291cmNlUmVzcG9uc2Ut
PnNldEludGVnZXIoInN0YXR1cyJfcywgcHJldmlvdXNSZXNvdXJjZURhdGEtPmh0dHBTdGF0dXND
b2RlKCkpOwotICAgICAgICAgICAgcmVzb3VyY2VSZXNwb25zZS0+c2V0U3RyaW5nKCJzdGF0dXNU
ZXh0Il9zLCBwcmV2aW91c1Jlc291cmNlRGF0YS0+aHR0cFN0YXR1c1RleHQoKSk7CisgICAgICAg
ICAgICByZXNvdXJjZVJlc3BvbnNlLT5zZXRJbnRlZ2VyKFByb3RvY29sOjpOZXR3b3JrOjpSZXNw
b25zZTo6c3RhdHVzS2V5LCBwcmV2aW91c1Jlc291cmNlRGF0YS0+aHR0cFN0YXR1c0NvZGUoKSk7
CisgICAgICAgICAgICByZXNvdXJjZVJlc3BvbnNlLT5zZXRTdHJpbmcoUHJvdG9jb2w6Ok5ldHdv
cms6OlJlc3BvbnNlOjpzdGF0dXNUZXh0S2V5LCBwcmV2aW91c1Jlc291cmNlRGF0YS0+aHR0cFN0
YXR1c1RleHQoKSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIHJlc291cmNlUmVzcG9uc2Ut
PnNldFN0cmluZygic291cmNlIl9zLCBJbnNwZWN0b3I6OlByb3RvY29sOjpJbnNwZWN0b3JIZWxw
ZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpS
ZXNwb25zZTo6U291cmNlOjpEaXNrQ2FjaGUpKTsKKyAgICAgICAgICAgIHJlc291cmNlUmVzcG9u
c2UtPnNldFN0cmluZyhQcm90b2NvbDo6TmV0d29yazo6UmVzcG9uc2U6OnNvdXJjZUtleSwgUHJv
dG9jb2w6OkhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKFByb3RvY29sOjpOZXR3b3JrOjpS
ZXNwb25zZTo6U291cmNlOjpEaXNrQ2FjaGUpKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIFN0
cmluZyBmcmFtZUlkID0gZnJhbWVJZGVudGlmaWVyKGxvYWRlcik7Ci0gICAgU3RyaW5nIGxvYWRl
cklkID0gbG9hZGVySWRlbnRpZmllcihsb2FkZXIpOworICAgIFByb3RvY29sOjpOZXR3b3JrOjpG
cmFtZUlkIGZyYW1lSWQgPSBmcmFtZUlkZW50aWZpZXIobG9hZGVyKTsKKyAgICBQcm90b2NvbDo6
TmV0d29yazo6TG9hZGVySWQgbG9hZGVySWQgPSBsb2FkZXJJZGVudGlmaWVyKGxvYWRlcik7CiAK
ICAgICBtX3Jlc291cmNlc0RhdGEtPnJlc3BvbnNlUmVjZWl2ZWQocmVxdWVzdElkLCBmcmFtZUlk
LCByZXNwb25zZSwgdHlwZSwgc2hvdWxkRm9yY2VCdWZmZXJpbmdOZXR3b3JrUmVzb3VyY2VEYXRh
KCkpOwogCi0gICAgbV9mcm9udGVuZERpc3BhdGNoZXItPnJlc3BvbnNlUmVjZWl2ZWQocmVxdWVz
dElkLCBmcmFtZUlkLCBsb2FkZXJJZCwgdGltZXN0YW1wKCksIEluc3BlY3RvclBhZ2VBZ2VudDo6
cmVzb3VyY2VUeXBlSlNPTih0eXBlKSwgcmVzb3VyY2VSZXNwb25zZSk7CisgICAgbV9mcm9udGVu
ZERpc3BhdGNoZXItPnJlc3BvbnNlUmVjZWl2ZWQocmVxdWVzdElkLCBmcmFtZUlkLCBsb2FkZXJJ
ZCwgdGltZXN0YW1wKCksIEluc3BlY3RvclBhZ2VBZ2VudDo6cmVzb3VyY2VUeXBlSlNPTih0eXBl
KSwgcmVzb3VyY2VSZXNwb25zZS5yZWxlYXNlTm9uTnVsbCgpKTsKIAogICAgIC8vIElmIHdlIHJl
dmFsaWRhdGVkIHRoZSByZXNvdXJjZSBhbmQgZ290IE5vdCBtb2RpZmllZCwgc2VuZCBjb250ZW50
IGxlbmd0aCBmb2xsb3dpbmcgZGlkUmVjZWl2ZVJlc3BvbnNlCiAgICAgLy8gYXMgdGhlcmUgd2ls
bCBiZSBubyBjYWxscyB0byBkaWRSZWNlaXZlRGF0YSBmcm9tIHRoZSBuZXR3b3JrIHN0YWNrLgpA
QCAtNjIxLDkgKzYyNCw5IEBAIHZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50OjpkaWRGaW5pc2hM
b2FkaW5nKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgRG9jdW1lbnRMCiAgICAgICAgICAgICBy
ZWFsTWV0cmljcyA9IHBsYXRmb3JtU3RyYXRlZ2llcygpLT5sb2FkZXJTdHJhdGVneSgpLT5uZXR3
b3JrTWV0cmljc0Zyb21SZXNvdXJjZUxvYWRJZGVudGlmaWVyKGlkZW50aWZpZXIpLmlzb2xhdGVk
Q29weSgpOwogICAgICAgICB9KTsKICAgICB9Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9j
b2w6Ok5ldHdvcms6Ok1ldHJpY3M+IG1ldHJpY3MgPSBidWlsZE9iamVjdEZvck1ldHJpY3MocmVh
bE1ldHJpY3MgPyAqcmVhbE1ldHJpY3MgOiBuZXR3b3JrTG9hZE1ldHJpY3MpOworICAgIFJlZlB0
cjxQcm90b2NvbDo6TmV0d29yazo6TWV0cmljcz4gbWV0cmljcyA9IGJ1aWxkT2JqZWN0Rm9yTWV0
cmljcyhyZWFsTWV0cmljcyA/ICpyZWFsTWV0cmljcyA6IG5ldHdvcmtMb2FkTWV0cmljcyk7CiAK
LSAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+bG9hZGluZ0ZpbmlzaGVkKHJlcXVlc3RJZCwgZWxh
cHNlZEZpbmlzaFRpbWUsICFzb3VyY2VNYXBwaW5nVVJMLmlzRW1wdHkoKSA/ICZzb3VyY2VNYXBw
aW5nVVJMIDogbnVsbHB0ciwgbWV0cmljcyk7CisgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPmxv
YWRpbmdGaW5pc2hlZChyZXF1ZXN0SWQsIGVsYXBzZWRGaW5pc2hUaW1lLCBzb3VyY2VNYXBwaW5n
VVJMLCBXVEZNb3ZlKG1ldHJpY3MpKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6
OmRpZEZhaWxMb2FkaW5nKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgRG9jdW1lbnRMb2FkZXIq
IGxvYWRlciwgY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCkBAIC02NDIsOCArNjQ1LDcgQEAg
dm9pZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmRpZEZhaWxMb2FkaW5nKHVuc2lnbmVkIGxvbmcg
aWRlbnRpZmllciwgRG9jdW1lbnRMb2EKICAgICAgICAgfQogICAgIH0KIAotICAgIGJvb2wgY2Fu
Y2VsZWQgPSBlcnJvci5pc0NhbmNlbGxhdGlvbigpOwotICAgIG1fZnJvbnRlbmREaXNwYXRjaGVy
LT5sb2FkaW5nRmFpbGVkKHJlcXVlc3RJZCwgdGltZXN0YW1wKCksIGVycm9yLmxvY2FsaXplZERl
c2NyaXB0aW9uKCksIGNhbmNlbGVkID8gJmNhbmNlbGVkIDogbnVsbHB0cik7CisgICAgbV9mcm9u
dGVuZERpc3BhdGNoZXItPmxvYWRpbmdGYWlsZWQocmVxdWVzdElkLCB0aW1lc3RhbXAoKSwgZXJy
b3IubG9jYWxpemVkRGVzY3JpcHRpb24oKSwgZXJyb3IuaXNDYW5jZWxsYXRpb24oKSk7CiB9CiAK
IHZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50OjpkaWRMb2FkUmVzb3VyY2VGcm9tTWVtb3J5Q2Fj
aGUoRG9jdW1lbnRMb2FkZXIqIGxvYWRlciwgQ2FjaGVkUmVzb3VyY2UmIHJlc291cmNlKQpAQCAt
NjU0LDggKzY1Niw4IEBAIHZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50OjpkaWRMb2FkUmVzb3Vy
Y2VGcm9tTWVtb3J5Q2FjaGUoRG9jdW1lbnRMb2FkZXIqIGxvYWRlCiAKICAgICB1bnNpZ25lZCBs
b25nIGlkZW50aWZpZXIgPSBsb2FkZXItPmZyYW1lKCktPnBhZ2UoKS0+cHJvZ3Jlc3MoKS5jcmVh
dGVVbmlxdWVJZGVudGlmaWVyKCk7CiAgICAgU3RyaW5nIHJlcXVlc3RJZCA9IElkZW50aWZpZXJz
RmFjdG9yeTo6cmVxdWVzdElkKGlkZW50aWZpZXIpOwotICAgIFN0cmluZyBsb2FkZXJJZCA9IGxv
YWRlcklkZW50aWZpZXIobG9hZGVyKTsKLSAgICBTdHJpbmcgZnJhbWVJZCA9IGZyYW1lSWRlbnRp
Zmllcihsb2FkZXIpOworICAgIFByb3RvY29sOjpOZXR3b3JrOjpMb2FkZXJJZCBsb2FkZXJJZCA9
IGxvYWRlcklkZW50aWZpZXIobG9hZGVyKTsKKyAgICBQcm90b2NvbDo6TmV0d29yazo6RnJhbWVJ
ZCBmcmFtZUlkID0gZnJhbWVJZGVudGlmaWVyKGxvYWRlcik7CiAKICAgICBtX3Jlc291cmNlc0Rh
dGEtPnJlc291cmNlQ3JlYXRlZChyZXF1ZXN0SWQsIGxvYWRlcklkLCByZXNvdXJjZSk7CiAKQEAg
LTY2NSw3ICs2NjcsNyBAQCB2b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6ZGlkTG9hZFJlc291
cmNlRnJvbU1lbW9yeUNhY2hlKERvY3VtZW50TG9hZGVyKiBsb2FkZQogICAgIC8vIGluc3RlYWQg
b2Ygd2hhdGV2ZXIgUmVzb3VyY2VSZXNwb25zZTo6U291cmNlIHRoZSBDYWNoZWRSZXNvdXJjZXMn
cyByZXNwb25zZSBoYXMuCiAgICAgLy8gVGhlIGZyb250ZW5kIGFscmVhZHkga25vd3MgZm9yIGNl
cnRhaW4gdGhhdCB0aGlzIHdhcyBzZXJ2ZWQgZnJvbSB0aGUgbWVtb3J5IGNhY2hlLgogCi0gICAg
bV9mcm9udGVuZERpc3BhdGNoZXItPnJlcXVlc3RTZXJ2ZWRGcm9tTWVtb3J5Q2FjaGUocmVxdWVz
dElkLCBmcmFtZUlkLCBsb2FkZXJJZCwgbG9hZGVyLT51cmwoKS5zdHJpbmcoKSwgdGltZXN0YW1w
KCksIGluaXRpYXRvck9iamVjdCwgYnVpbGRPYmplY3RGb3JDYWNoZWRSZXNvdXJjZSgmcmVzb3Vy
Y2UpKTsKKyAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+cmVxdWVzdFNlcnZlZEZyb21NZW1vcnlD
YWNoZShyZXF1ZXN0SWQsIGZyYW1lSWQsIGxvYWRlcklkLCBsb2FkZXItPnVybCgpLnN0cmluZygp
LCB0aW1lc3RhbXAoKSwgV1RGTW92ZShpbml0aWF0b3JPYmplY3QpLCBidWlsZE9iamVjdEZvckNh
Y2hlZFJlc291cmNlKCZyZXNvdXJjZSkpOwogfQogCiB2b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2Vu
dDo6c2V0SW5pdGlhbFNjcmlwdENvbnRlbnQodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25z
dCBTdHJpbmcmIHNvdXJjZVN0cmluZykKQEAgLTcyOSwyNiArNzMxLDI2IEBAIHZvaWQgSW5zcGVj
dG9yTmV0d29ya0FnZW50OjpkaWRTY2hlZHVsZVN0eWxlUmVjYWxjdWxhdGlvbihEb2N1bWVudCYg
ZG9jdW1lbnQpCiAgICAgICAgIG1fc3R5bGVSZWNhbGN1bGF0aW9uSW5pdGlhdG9yID0gYnVpbGRJ
bml0aWF0b3JPYmplY3QoJmRvY3VtZW50KTsKIH0KIAotUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9j
b2w6Ok5ldHdvcms6OkluaXRpYXRvcj4gSW5zcGVjdG9yTmV0d29ya0FnZW50OjpidWlsZEluaXRp
YXRvck9iamVjdChEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCogcmVz
b3VyY2VSZXF1ZXN0KQorUmVmPFByb3RvY29sOjpOZXR3b3JrOjpJbml0aWF0b3I+IEluc3BlY3Rv
ck5ldHdvcmtBZ2VudDo6YnVpbGRJbml0aWF0b3JPYmplY3QoRG9jdW1lbnQqIGRvY3VtZW50LCBj
b25zdCBSZXNvdXJjZVJlcXVlc3QqIHJlc291cmNlUmVxdWVzdCkKIHsKICAgICAvLyBGSVhNRTog
V29ya2VyIHN1cHBvcnQuCiAgICAgaWYgKCFpc01haW5UaHJlYWQoKSkgewotICAgICAgICByZXR1
cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6SW5pdGlhdG9yOjpjcmVhdGUoKQotICAg
ICAgICAgICAgLnNldFR5cGUoSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6SW5pdGlhdG9y
OjpUeXBlOjpPdGhlcikKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpOZXR3b3JrOjpJbml0aWF0
b3I6OmNyZWF0ZSgpCisgICAgICAgICAgICAuc2V0VHlwZShQcm90b2NvbDo6TmV0d29yazo6SW5p
dGlhdG9yOjpUeXBlOjpPdGhlcikKICAgICAgICAgICAgIC5yZWxlYXNlKCk7CiAgICAgfQogCi0g
ICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OkluaXRpYXRvcj4gaW5pdGlh
dG9yT2JqZWN0OworICAgIFJlZlB0cjxQcm90b2NvbDo6TmV0d29yazo6SW5pdGlhdG9yPiBpbml0
aWF0b3JPYmplY3Q7CiAKICAgICBSZWY8U2NyaXB0Q2FsbFN0YWNrPiBzdGFja1RyYWNlID0gY3Jl
YXRlU2NyaXB0Q2FsbFN0YWNrKEpTRXhlY1N0YXRlOjpjdXJyZW50U3RhdGUoKSk7CiAgICAgaWYg
KHN0YWNrVHJhY2UtPnNpemUoKSA+IDApIHsKLSAgICAgICAgaW5pdGlhdG9yT2JqZWN0ID0gSW5z
cGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6SW5pdGlhdG9yOjpjcmVhdGUoKQotICAgICAgICAg
ICAgLnNldFR5cGUoSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6SW5pdGlhdG9yOjpUeXBl
OjpTY3JpcHQpCisgICAgICAgIGluaXRpYXRvck9iamVjdCA9IFByb3RvY29sOjpOZXR3b3JrOjpJ
bml0aWF0b3I6OmNyZWF0ZSgpCisgICAgICAgICAgICAuc2V0VHlwZShQcm90b2NvbDo6TmV0d29y
azo6SW5pdGlhdG9yOjpUeXBlOjpTY3JpcHQpCiAgICAgICAgICAgICAucmVsZWFzZSgpOwogICAg
ICAgICBpbml0aWF0b3JPYmplY3QtPnNldFN0YWNrVHJhY2Uoc3RhY2tUcmFjZS0+YnVpbGRJbnNw
ZWN0b3JBcnJheSgpKTsKICAgICB9IGVsc2UgaWYgKGRvY3VtZW50ICYmIGRvY3VtZW50LT5zY3Jp
cHRhYmxlRG9jdW1lbnRQYXJzZXIoKSkgewotICAgICAgICBpbml0aWF0b3JPYmplY3QgPSBJbnNw
ZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpJbml0aWF0b3I6OmNyZWF0ZSgpCi0gICAgICAgICAg
ICAuc2V0VHlwZShJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpJbml0aWF0b3I6OlR5cGU6
OlBhcnNlcikKKyAgICAgICAgaW5pdGlhdG9yT2JqZWN0ID0gUHJvdG9jb2w6Ok5ldHdvcms6Oklu
aXRpYXRvcjo6Y3JlYXRlKCkKKyAgICAgICAgICAgIC5zZXRUeXBlKFByb3RvY29sOjpOZXR3b3Jr
OjpJbml0aWF0b3I6OlR5cGU6OlBhcnNlcikKICAgICAgICAgICAgIC5yZWxlYXNlKCk7CiAgICAg
ICAgIGluaXRpYXRvck9iamVjdC0+c2V0VXJsKGRvY3VtZW50LT51cmwoKS5zdHJpbmcoKSk7CiAg
ICAgICAgIGluaXRpYXRvck9iamVjdC0+c2V0TGluZU51bWJlcihkb2N1bWVudC0+c2NyaXB0YWJs
ZURvY3VtZW50UGFyc2VyKCktPnRleHRQb3NpdGlvbigpLm1fbGluZS5vbmVCYXNlZEludCgpKTsK
QEAgLTc1OCw4ICs3NjAsOCBAQCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6
SW5pdGlhdG9yPiBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmJ1aWxkSW5pdAogICAgIGlmIChkb21B
Z2VudCAmJiByZXNvdXJjZVJlcXVlc3QpIHsKICAgICAgICAgaWYgKGF1dG8gaW5zcGVjdG9ySW5p
dGlhdG9yTm9kZUlkZW50aWZpZXIgPSByZXNvdXJjZVJlcXVlc3QtPmluc3BlY3RvckluaXRpYXRv
ck5vZGVJZGVudGlmaWVyKCkpIHsKICAgICAgICAgICAgIGlmICghaW5pdGlhdG9yT2JqZWN0KSB7
Ci0gICAgICAgICAgICAgICAgaW5pdGlhdG9yT2JqZWN0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6
TmV0d29yazo6SW5pdGlhdG9yOjpjcmVhdGUoKQotICAgICAgICAgICAgICAgICAgICAuc2V0VHlw
ZShJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpJbml0aWF0b3I6OlR5cGU6Ok90aGVyKQor
ICAgICAgICAgICAgICAgIGluaXRpYXRvck9iamVjdCA9IFByb3RvY29sOjpOZXR3b3JrOjpJbml0
aWF0b3I6OmNyZWF0ZSgpCisgICAgICAgICAgICAgICAgICAgIC5zZXRUeXBlKFByb3RvY29sOjpO
ZXR3b3JrOjpJbml0aWF0b3I6OlR5cGU6Ok90aGVyKQogICAgICAgICAgICAgICAgICAgICAucmVs
ZWFzZSgpOwogICAgICAgICAgICAgfQogCkBAIC03NjgsMTMgKzc3MCwxMyBAQCBSZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6SW5pdGlhdG9yPiBJbnNwZWN0b3JOZXR3b3JrQWdl
bnQ6OmJ1aWxkSW5pdAogICAgIH0KIAogICAgIGlmIChpbml0aWF0b3JPYmplY3QpCi0gICAgICAg
IHJldHVybiBpbml0aWF0b3JPYmplY3Q7CisgICAgICAgIHJldHVybiBpbml0aWF0b3JPYmplY3Qu
cmVsZWFzZU5vbk51bGwoKTsKIAogICAgIGlmIChtX2lzUmVjYWxjdWxhdGluZ1N0eWxlICYmIG1f
c3R5bGVSZWNhbGN1bGF0aW9uSW5pdGlhdG9yKQotICAgICAgICByZXR1cm4gbV9zdHlsZVJlY2Fs
Y3VsYXRpb25Jbml0aWF0b3I7CisgICAgICAgIHJldHVybiAqbV9zdHlsZVJlY2FsY3VsYXRpb25J
bml0aWF0b3I7CiAKLSAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6SW5p
dGlhdG9yOjpjcmVhdGUoKQotICAgICAgICAuc2V0VHlwZShJbnNwZWN0b3I6OlByb3RvY29sOjpO
ZXR3b3JrOjpJbml0aWF0b3I6OlR5cGU6Ok90aGVyKQorICAgIHJldHVybiBQcm90b2NvbDo6TmV0
d29yazo6SW5pdGlhdG9yOjpjcmVhdGUoKQorICAgICAgICAuc2V0VHlwZShQcm90b2NvbDo6TmV0
d29yazo6SW5pdGlhdG9yOjpUeXBlOjpPdGhlcikKICAgICAgICAgLnJlbGVhc2UoKTsKIH0KIApA
QCAtNzg1LDcgKzc4Nyw3IEBAIHZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50OjpkaWRDcmVhdGVX
ZWJTb2NrZXQodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBVCiAKIHZvaWQgSW5zcGVj
dG9yTmV0d29ya0FnZW50Ojp3aWxsU2VuZFdlYlNvY2tldEhhbmRzaGFrZVJlcXVlc3QodW5zaWdu
ZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCiB7Ci0g
ICAgYXV0byByZXF1ZXN0T2JqZWN0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6V2Vi
U29ja2V0UmVxdWVzdDo6Y3JlYXRlKCkKKyAgICBhdXRvIHJlcXVlc3RPYmplY3QgPSBQcm90b2Nv
bDo6TmV0d29yazo6V2ViU29ja2V0UmVxdWVzdDo6Y3JlYXRlKCkKICAgICAgICAgLnNldEhlYWRl
cnMoYnVpbGRPYmplY3RGb3JIZWFkZXJzKHJlcXVlc3QuaHR0cEhlYWRlckZpZWxkcygpKSkKICAg
ICAgICAgLnJlbGVhc2UoKTsKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+d2ViU29ja2V0V2ls
bFNlbmRIYW5kc2hha2VSZXF1ZXN0KElkZW50aWZpZXJzRmFjdG9yeTo6cmVxdWVzdElkKGlkZW50
aWZpZXIpLCB0aW1lc3RhbXAoKSwgV2FsbFRpbWU6Om5vdygpLnNlY29uZHNTaW5jZUVwb2NoKCku
c2Vjb25kcygpLCBXVEZNb3ZlKHJlcXVlc3RPYmplY3QpKTsKQEAgLTc5Myw3ICs3OTUsNyBAQCB2
b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6d2lsbFNlbmRXZWJTb2NrZXRIYW5kc2hha2VSZXF1
ZXN0KHVuc2lnbmVkIGxvbmcgaWRlbgogCiB2b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6ZGlk
UmVjZWl2ZVdlYlNvY2tldEhhbmRzaGFrZVJlc3BvbnNlKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmll
ciwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCiB7Ci0gICAgYXV0byByZXNwb25z
ZU9iamVjdCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OldlYlNvY2tldFJlc3BvbnNl
OjpjcmVhdGUoKQorICAgIGF1dG8gcmVzcG9uc2VPYmplY3QgPSBQcm90b2NvbDo6TmV0d29yazo6
V2ViU29ja2V0UmVzcG9uc2U6OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRTdGF0dXMocmVzcG9uc2Uu
aHR0cFN0YXR1c0NvZGUoKSkKICAgICAgICAgLnNldFN0YXR1c1RleHQocmVzcG9uc2UuaHR0cFN0
YXR1c1RleHQoKSkKICAgICAgICAgLnNldEhlYWRlcnMoYnVpbGRPYmplY3RGb3JIZWFkZXJzKHJl
c3BvbnNlLmh0dHBIZWFkZXJGaWVsZHMoKSkpCkBAIC04MjAsMTIgKzgyMiw3IEBAIHZvaWQgSW5z
cGVjdG9yTmV0d29ya0FnZW50OjpkaWRSZWNlaXZlV2ViU29ja2V0RnJhbWVFcnJvcih1bnNpZ25l
ZCBsb25nIGlkZW50aWZpCiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPndlYlNvY2tldEZyYW1l
RXJyb3IoSWRlbnRpZmllcnNGYWN0b3J5OjpyZXF1ZXN0SWQoaWRlbnRpZmllciksIHRpbWVzdGFt
cCgpLCBlcnJvck1lc3NhZ2UpOwogfQogCi12b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6ZW5h
YmxlKEVycm9yU3RyaW5nJikKLXsKLSAgICBlbmFibGUoKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JO
ZXR3b3JrQWdlbnQ6OmVuYWJsZSgpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNw
ZWN0b3JOZXR3b3JrQWdlbnQ6OmVuYWJsZSgpCiB7CiAgICAgbV9lbmFibGVkID0gdHJ1ZTsKICAg
ICBtX2luc3RydW1lbnRpbmdBZ2VudHMuc2V0RW5hYmxlZE5ldHdvcmtBZ2VudCh0aGlzKTsKQEAg
LTg1Nyw5ICs4NTQsMTEgQEAgdm9pZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmVuYWJsZSgpCiAg
ICAgICAgICAgICAgICAgZGlkQ2xvc2VXZWJTb2NrZXQoaWRlbnRpZmllcik7CiAgICAgICAgIH0K
ICAgICB9CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2Vu
dDo6ZGlzYWJsZShFcnJvclN0cmluZyYpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJ
bnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmRpc2FibGUoKQogewogICAgIG1fZW5hYmxlZCA9IGZhbHNl
OwogICAgIG1faW50ZXJjZXB0aW9uRW5hYmxlZCA9IGZhbHNlOwpAQCAtODcyLDkgKzg3MSwxMSBA
QCB2b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6ZGlzYWJsZShFcnJvclN0cmluZyYpCiAgICAg
Y29udGludWVQZW5kaW5nUmVzcG9uc2VzKCk7CiAKICAgICBzZXRSZXNvdXJjZUNhY2hpbmdEaXNh
YmxlZChmYWxzZSk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi1ib29sIEluc3BlY3Rvck5ldHdv
cmtBZ2VudDo6c2hvdWxkSW50ZXJjZXB0KFVSTCB1cmwsIE5ldHdvcmtTdGFnZSBuZXR3b3JrU3Rh
Z2UpCitib29sIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6c2hvdWxkSW50ZXJjZXB0KFVSTCB1cmws
IFByb3RvY29sOjpOZXR3b3JrOjpOZXR3b3JrU3RhZ2UgbmV0d29ya1N0YWdlKQogewogICAgIHVy
bC5yZW1vdmVGcmFnbWVudElkZW50aWZpZXIoKTsKIApAQCAtOTExLDU2ICs5MTIsNTUgQEAgdm9p
ZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmNvbnRpbnVlUGVuZGluZ1Jlc3BvbnNlcygpCiAgICAg
bV9wZW5kaW5nSW50ZXJjZXB0UmVzcG9uc2VzLmNsZWFyKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9y
TmV0d29ya0FnZW50OjpzZXRFeHRyYUhUVFBIZWFkZXJzKEVycm9yU3RyaW5nJiwgY29uc3QgSlNP
Tjo6T2JqZWN0JiBoZWFkZXJzKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVj
dG9yTmV0d29ya0FnZW50OjpzZXRFeHRyYUhUVFBIZWFkZXJzKFJlZjxKU09OOjpPYmplY3Q+JiYg
aGVhZGVycykKIHsKLSAgICBmb3IgKGF1dG8mIGVudHJ5IDogaGVhZGVycykgewotICAgICAgICBT
dHJpbmcgc3RyaW5nVmFsdWU7Ci0gICAgICAgIGlmIChlbnRyeS52YWx1ZS0+YXNTdHJpbmcoc3Ry
aW5nVmFsdWUpKQorICAgIGZvciAoYXV0byYgZW50cnkgOiBoZWFkZXJzLmdldCgpKSB7CisgICAg
ICAgIGF1dG8gc3RyaW5nVmFsdWUgPSBlbnRyeS52YWx1ZS0+YXNTdHJpbmcoKTsKKyAgICAgICAg
aWYgKCEhc3RyaW5nVmFsdWUpCiAgICAgICAgICAgICBtX2V4dHJhUmVxdWVzdEhlYWRlcnMuc2V0
KGVudHJ5LmtleSwgc3RyaW5nVmFsdWUpOwogICAgIH0KKworICAgIHJldHVybiB7IH07CiB9CiAK
LXZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50OjpnZXRSZXNwb25zZUJvZHkoRXJyb3JTdHJpbmcm
IGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgU3RyaW5nKiBjb250ZW50LCBi
b29sKiBiYXNlNjRFbmNvZGVkKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8c3RkOjp0dXBsZTxT
dHJpbmcsIGJvb2wgLyogYmFzZTY0RW5jb2RlZCAqLz4+IEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6
Z2V0UmVzcG9uc2VCb2R5KGNvbnN0IFByb3RvY29sOjpOZXR3b3JrOjpSZXF1ZXN0SWQmIHJlcXVl
c3RJZCkKIHsKICAgICBOZXR3b3JrUmVzb3VyY2VzRGF0YTo6UmVzb3VyY2VEYXRhIGNvbnN0KiBy
ZXNvdXJjZURhdGEgPSBtX3Jlc291cmNlc0RhdGEtPmRhdGEocmVxdWVzdElkKTsKLSAgICBpZiAo
IXJlc291cmNlRGF0YSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIHJlc291cmNl
IGZvciBnaXZlbiByZXF1ZXN0SWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYg
KCFyZXNvdXJjZURhdGEpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTWlzc2luZyBy
ZXNvdXJjZSBmb3IgZ2l2ZW4gcmVxdWVzdElkIl9zKTsKIAotICAgIGlmIChyZXNvdXJjZURhdGEt
Pmhhc0NvbnRlbnQoKSkgewotICAgICAgICAqYmFzZTY0RW5jb2RlZCA9IHJlc291cmNlRGF0YS0+
YmFzZTY0RW5jb2RlZCgpOwotICAgICAgICAqY29udGVudCA9IHJlc291cmNlRGF0YS0+Y29udGVu
dCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmIChyZXNvdXJjZURhdGEtPmhhc0Nv
bnRlbnQoKSkKKyAgICAgICAgcmV0dXJuIHsgeyByZXNvdXJjZURhdGEtPmNvbnRlbnQoKSwgcmVz
b3VyY2VEYXRhLT5iYXNlNjRFbmNvZGVkKCkgfSB9OwogCi0gICAgaWYgKHJlc291cmNlRGF0YS0+
aXNDb250ZW50RXZpY3RlZCgpKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIlJlc291cmNlIGNv
bnRlbnQgd2FzIGV2aWN0ZWQgZnJvbSBpbnNwZWN0b3IgY2FjaGUiX3M7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9CisgICAgaWYgKHJlc291cmNlRGF0YS0+aXNDb250ZW50RXZpY3RlZCgpKQorICAg
ICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIlJlc291cmNlIGNvbnRlbnQgd2FzIGV2aWN0ZWQg
ZnJvbSBpbnNwZWN0b3IgY2FjaGUiX3MpOwogCiAgICAgaWYgKHJlc291cmNlRGF0YS0+YnVmZmVy
KCkgJiYgIXJlc291cmNlRGF0YS0+dGV4dEVuY29kaW5nTmFtZSgpLmlzTnVsbCgpKSB7Ci0gICAg
ICAgICpiYXNlNjRFbmNvZGVkID0gZmFsc2U7Ci0gICAgICAgIGlmIChJbnNwZWN0b3JQYWdlQWdl
bnQ6OnNoYXJlZEJ1ZmZlckNvbnRlbnQocmVzb3VyY2VEYXRhLT5idWZmZXIoKSwgcmVzb3VyY2VE
YXRhLT50ZXh0RW5jb2RpbmdOYW1lKCksICpiYXNlNjRFbmNvZGVkLCBjb250ZW50KSkKLSAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgU3RyaW5nIGJvZHk7CisgICAgICAgIGlmIChJbnNwZWN0
b3JQYWdlQWdlbnQ6OnNoYXJlZEJ1ZmZlckNvbnRlbnQocmVzb3VyY2VEYXRhLT5idWZmZXIoKSwg
cmVzb3VyY2VEYXRhLT50ZXh0RW5jb2RpbmdOYW1lKCksIGZhbHNlLCAmYm9keSkpCisgICAgICAg
ICAgICByZXR1cm4geyB7IGJvZHksIGZhbHNlIH0gfTsKICAgICB9CiAKICAgICBpZiAocmVzb3Vy
Y2VEYXRhLT5jYWNoZWRSZXNvdXJjZSgpKSB7Ci0gICAgICAgIGlmIChJbnNwZWN0b3JOZXR3b3Jr
QWdlbnQ6OmNhY2hlZFJlc291cmNlQ29udGVudCgqcmVzb3VyY2VEYXRhLT5jYWNoZWRSZXNvdXJj
ZSgpLCBjb250ZW50LCBiYXNlNjRFbmNvZGVkKSkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgU3RyaW5nIGJvZHk7CisgICAgICAgIGJvb2wgYmFzZTY0RW5jb2RlZDsKKyAgICAgICAgaWYg
KEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6Y2FjaGVkUmVzb3VyY2VDb250ZW50KCpyZXNvdXJjZURh
dGEtPmNhY2hlZFJlc291cmNlKCksICZib2R5LCAmYmFzZTY0RW5jb2RlZCkpCisgICAgICAgICAg
ICByZXR1cm4geyB7IGJvZHksIGJhc2U2NEVuY29kZWQgfSB9OwogICAgIH0KIAotICAgIGVycm9y
U3RyaW5nID0gIk1pc3NpbmcgY29udGVudCBvZiByZXNvdXJjZSBmb3IgZ2l2ZW4gcmVxdWVzdElk
Il9zOworICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTWlzc2luZyBjb250ZW50IG9mIHJlc291
cmNlIGZvciBnaXZlbiByZXF1ZXN0SWQiX3MpOwogfQogCi12b2lkIEluc3BlY3Rvck5ldHdvcmtB
Z2VudDo6c2V0UmVzb3VyY2VDYWNoaW5nRGlzYWJsZWQoRXJyb3JTdHJpbmcmLCBib29sIGRpc2Fi
bGVkKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yTmV0d29ya0FnZW50
OjpzZXRSZXNvdXJjZUNhY2hpbmdEaXNhYmxlZChib29sIGRpc2FibGVkKQogewotICAgIHNldFJl
c291cmNlQ2FjaGluZ0Rpc2FibGVkKGRpc2FibGVkKTsKKyAgICBzZXRSZXNvdXJjZUNhY2hpbmdE
aXNhYmxlZEludGVyYWwoZGlzYWJsZWQpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJ
bnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmxvYWRSZXNvdXJjZShjb25zdCBTdHJpbmcmIGZyYW1lSWQs
IGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nLCBSZWY8TG9hZFJlc291cmNlQ2FsbGJhY2s+JiYgY2Fs
bGJhY2spCit2b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6bG9hZFJlc291cmNlKGNvbnN0IFBy
b3RvY29sOjpOZXR3b3JrOjpGcmFtZUlkJiBmcmFtZUlkLCBjb25zdCBTdHJpbmcmIHVybFN0cmlu
ZywgUmVmPExvYWRSZXNvdXJjZUNhbGxiYWNrPiYmIGNhbGxiYWNrKQogewotICAgIEVycm9yU3Ry
aW5nIGVycm9yU3RyaW5nOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsK
ICAgICBhdXRvKiBjb250ZXh0ID0gc2NyaXB0RXhlY3V0aW9uQ29udGV4dChlcnJvclN0cmluZywg
ZnJhbWVJZCk7CiAgICAgaWYgKCFjb250ZXh0KSB7CiAgICAgICAgIGNhbGxiYWNrLT5zZW5kRmFp
bHVyZShlcnJvclN0cmluZyk7CkBAIC05OTQsMjYgKzk5NCwyMiBAQCB2b2lkIEluc3BlY3Rvck5l
dHdvcmtBZ2VudDo6bG9hZFJlc291cmNlKGNvbnN0IFN0cmluZyYgZnJhbWVJZCwgY29uc3QgU3Ry
aW5nJiB1cgogICAgIGluc3BlY3RvclRocmVhZGFibGVMb2FkZXJDbGllbnQtPnNldExvYWRlcihX
VEZNb3ZlKGxvYWRlcikpOwogfQogCi12b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6Z2V0U2Vy
aWFsaXplZENlcnRpZmljYXRlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5n
JiByZXF1ZXN0SWQsIFN0cmluZyogc2VyaWFsaXplZENlcnRpZmljYXRlKQorUHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8U3RyaW5nPiBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmdldFNlcmlhbGl6ZWRD
ZXJ0aWZpY2F0ZShjb25zdCBQcm90b2NvbDo6TmV0d29yazo6UmVxdWVzdElkJiByZXF1ZXN0SWQp
CiB7CiAgICAgYXV0byogcmVzb3VyY2VEYXRhID0gbV9yZXNvdXJjZXNEYXRhLT5kYXRhKHJlcXVl
c3RJZCk7Ci0gICAgaWYgKCFyZXNvdXJjZURhdGEpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAi
TWlzc2luZyByZXNvdXJjZSBmb3IgZ2l2ZW4gcmVxdWVzdElkIl9zOwotICAgICAgICByZXR1cm47
Ci0gICAgfQorICAgIGlmICghcmVzb3VyY2VEYXRhKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoIk1pc3NpbmcgcmVzb3VyY2UgZm9yIGdpdmVuIHJlcXVlc3RJZCJfcyk7CiAKICAgICBh
dXRvJiBjZXJ0aWZpY2F0ZSA9IHJlc291cmNlRGF0YS0+Y2VydGlmaWNhdGVJbmZvKCk7Ci0gICAg
aWYgKCFjZXJ0aWZpY2F0ZSB8fCBjZXJ0aWZpY2F0ZS52YWx1ZSgpLmlzRW1wdHkoKSkgewotICAg
ICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIGNlcnRpZmljYXRlIG9mIHJlc291cmNlIGZvciBn
aXZlbiByZXF1ZXN0SWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKCFjZXJ0
aWZpY2F0ZSB8fCBjZXJ0aWZpY2F0ZS52YWx1ZSgpLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJu
IG1ha2VVbmV4cGVjdGVkKCJNaXNzaW5nIGNlcnRpZmljYXRlIG9mIHJlc291cmNlIGZvciBnaXZl
biByZXF1ZXN0SWQiX3MpOwogCiAgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2RlciBlbmNvZGVy
OwogICAgIFdURjo6UGVyc2lzdGVuY2U6OkNvZGVyPFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbz46
OmVuY29kZShlbmNvZGVyLCBjZXJ0aWZpY2F0ZS52YWx1ZSgpKTsKLSAgICAqc2VyaWFsaXplZENl
cnRpZmljYXRlID0gYmFzZTY0RW5jb2RlKGVuY29kZXIuYnVmZmVyKCksIGVuY29kZXIuYnVmZmVy
U2l6ZSgpKTsKKyAgICByZXR1cm4gYmFzZTY0RW5jb2RlKGVuY29kZXIuYnVmZmVyKCksIGVuY29k
ZXIuYnVmZmVyU2l6ZSgpKTsKIH0KIAotV2ViU29ja2V0KiBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6
OndlYlNvY2tldEZvclJlcXVlc3RJZChjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCkKK1dlYlNvY2tl
dCogSW5zcGVjdG9yTmV0d29ya0FnZW50Ojp3ZWJTb2NrZXRGb3JSZXF1ZXN0SWQoY29uc3QgUHJv
dG9jb2w6Ok5ldHdvcms6OlJlcXVlc3RJZCYgcmVxdWVzdElkKQogewogICAgIExvY2tIb2xkZXIg
bG9jayhXZWJTb2NrZXQ6OmFsbEFjdGl2ZVdlYlNvY2tldHNNdXRleCgpKTsKIApAQCAtMTAzMSwz
OSArMTAyNywzNiBAQCBzdGF0aWMgSlNDOjpKU1ZhbHVlIHdlYlNvY2tldEFzU2NyaXB0VmFsdWUo
SlNDOjpKU0dsb2JhbE9iamVjdCYgc3RhdGUsIFdlYlNvY2tldAogICAgIHJldHVybiB0b0pTKCZz
dGF0ZSwgZGVwcmVjYXRlZEdsb2JhbE9iamVjdEZvclByb3RvdHlwZSgmc3RhdGUpLCB3ZWJTb2Nr
ZXQpOwogfQogCi12b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6cmVzb2x2ZVdlYlNvY2tldChF
cnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBjb25zdCBT
dHJpbmcqIG9iamVjdEdyb3VwLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6
UmVtb3RlT2JqZWN0PiYgcmVzdWx0KQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPFByb3Rv
Y29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+PiBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OnJlc29s
dmVXZWJTb2NrZXQoY29uc3QgUHJvdG9jb2w6Ok5ldHdvcms6OlJlcXVlc3RJZCYgcmVxdWVzdElk
LCBjb25zdCBTdHJpbmcmIG9iamVjdEdyb3VwKQogewogICAgIFdlYlNvY2tldCogd2ViU29ja2V0
ID0gd2ViU29ja2V0Rm9yUmVxdWVzdElkKHJlcXVlc3RJZCk7Ci0gICAgaWYgKCF3ZWJTb2NrZXQp
IHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWlzc2luZyB3ZWIgc29ja2V0IGZvciBnaXZlbiBy
ZXF1ZXN0SWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKCF3ZWJTb2NrZXQp
CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTWlzc2luZyB3ZWIgc29ja2V0IGZvciBn
aXZlbiByZXF1ZXN0SWQiX3MpOwogCiAgICAgLy8gRklYTUU6IDxodHRwczovL3dlYmtpdC5vcmcv
Yi8xNjg0NzU+IFdlYiBJbnNwZWN0b3I6IENvcnJlY3RseSBkaXNwbGF5IGlmcmFtZSdzIGFuZCB3
b3JrZXIncyBXZWJTb2NrZXRzCiAgICAgaWYgKCFpczxEb2N1bWVudD4od2ViU29ja2V0LT5zY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCkpKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBt
YWtlVW5leHBlY3RlZCgiTm90IHN1cHBvcnRlZCIpOwogCiAgICAgYXV0byogZG9jdW1lbnQgPSBk
b3duY2FzdDxEb2N1bWVudD4od2ViU29ja2V0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOwog
ICAgIGF1dG8qIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSkgewot
ICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIGZyYW1lIG9mIHdlYiBzb2NrZXQgZm9yIGdp
dmVuIHJlcXVlc3RJZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoIWZyYW1l
KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk1pc3NpbmcgZnJhbWUgb2Ygd2ViIHNv
Y2tldCBmb3IgZ2l2ZW4gcmVxdWVzdElkIl9zKTsKIAogICAgIGF1dG8mIHN0YXRlID0gKm1haW5X
b3JsZEV4ZWNTdGF0ZShmcmFtZSk7CiAgICAgYXV0byBpbmplY3RlZFNjcmlwdCA9IG1faW5qZWN0
ZWRTY3JpcHRNYW5hZ2VyLmluamVjdGVkU2NyaXB0Rm9yKCZzdGF0ZSk7CiAgICAgQVNTRVJUKCFp
bmplY3RlZFNjcmlwdC5oYXNOb1ZhbHVlKCkpOwogCi0gICAgU3RyaW5nIG9iamVjdEdyb3VwTmFt
ZSA9IG9iamVjdEdyb3VwID8gKm9iamVjdEdyb3VwIDogU3RyaW5nKCk7Ci0gICAgcmVzdWx0ID0g
aW5qZWN0ZWRTY3JpcHQud3JhcE9iamVjdCh3ZWJTb2NrZXRBc1NjcmlwdFZhbHVlKHN0YXRlLCB3
ZWJTb2NrZXQpLCBvYmplY3RHcm91cE5hbWUpOworICAgIGF1dG8gb2JqZWN0ID0gaW5qZWN0ZWRT
Y3JpcHQud3JhcE9iamVjdCh3ZWJTb2NrZXRBc1NjcmlwdFZhbHVlKHN0YXRlLCB3ZWJTb2NrZXQp
LCBvYmplY3RHcm91cCk7CisgICAgaWYgKCFvYmplY3QpCisgICAgICAgIHJldHVybiBtYWtlVW5l
eHBlY3RlZCgiSW50ZXJuYWwgZXJyb3I6IHVuYWJsZSB0byBjYXN0IFdlYlNvY2tldCIpOworCisg
ICAgcmV0dXJuIG9iamVjdC5yZWxlYXNlTm9uTnVsbCgpOwogfQogCi12b2lkIEluc3BlY3Rvck5l
dHdvcmtBZ2VudDo6c2V0SW50ZXJjZXB0aW9uRW5hYmxlZChFcnJvclN0cmluZyYgZXJyb3JTdHJp
bmcsIGJvb2wgZW5hYmxlZCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3Rv
ck5ldHdvcmtBZ2VudDo6c2V0SW50ZXJjZXB0aW9uRW5hYmxlZChib29sIGVuYWJsZWQpCiB7Ci0g
ICAgaWYgKG1faW50ZXJjZXB0aW9uRW5hYmxlZCA9PSBlbmFibGVkKSB7Ci0gICAgICAgIGVycm9y
U3RyaW5nID0gbV9pbnRlcmNlcHRpb25FbmFibGVkID8gIkludGVyY2VwdGlvbiBhbHJlYWR5IGVu
YWJsZWQiX3MgOiAiSW50ZXJjZXB0aW9uIGFscmVhZHkgZGlzYWJsZWQiX3M7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9CisgICAgaWYgKG1faW50ZXJjZXB0aW9uRW5hYmxlZCA9PSBlbmFibGVkKQor
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQobV9pbnRlcmNlcHRpb25FbmFibGVkID8gIklu
dGVyY2VwdGlvbiBhbHJlYWR5IGVuYWJsZWQiX3MgOiAiSW50ZXJjZXB0aW9uIGFscmVhZHkgZGlz
YWJsZWQiX3MpOwogCiAgICAgbV9pbnRlcmNlcHRpb25FbmFibGVkID0gZW5hYmxlZDsKIApAQCAt
MTA3MSw0NiArMTA2NCw0MCBAQCB2b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6c2V0SW50ZXJj
ZXB0aW9uRW5hYmxlZChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGJvbwogICAgICAgICBjb250
aW51ZVBlbmRpbmdSZXF1ZXN0cygpOwogICAgICAgICBjb250aW51ZVBlbmRpbmdSZXNwb25zZXMo
KTsKICAgICB9CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3Rvck5ldHdvcmtB
Z2VudDo6YWRkSW50ZXJjZXB0aW9uKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3Ry
aW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgbmV0d29ya1N0YWdlU3RyaW5nLCBjb25zdCBib29sKiBv
cHRpb25hbENhc2VTZW5zaXRpdmUsIGNvbnN0IGJvb2wqIG9wdGlvbmFsSXNSZWdleCkKK1Byb3Rv
Y29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6YWRkSW50ZXJj
ZXB0aW9uKGNvbnN0IFN0cmluZyYgdXJsLCBQcm90b2NvbDo6TmV0d29yazo6TmV0d29ya1N0YWdl
IG5ldHdvcmtTdGFnZSwgT3B0aW9uYWw8Ym9vbD4mJiBjYXNlU2Vuc2l0aXZlLCBPcHRpb25hbDxi
b29sPiYmIGlzUmVnZXgpCiB7Ci0gICAgYXV0byBuZXR3b3JrU3RhZ2UgPSBJbnNwZWN0b3I6OlBy
b3RvY29sOjpJbnNwZWN0b3JIZWxwZXJzOjpwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVj
dG9yOjpQcm90b2NvbDo6TmV0d29yazo6TmV0d29ya1N0YWdlPihuZXR3b3JrU3RhZ2VTdHJpbmcp
OwotICAgIGlmICghbmV0d29ya1N0YWdlKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gbWFrZVN0
cmluZygiVW5rbm93biBuZXR3b3JrU3RhZ2U6ICJfcywgbmV0d29ya1N0YWdlU3RyaW5nKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIEludGVyY2VwdCBpbnRlcmNlcHQ7CiAgICAgaW50
ZXJjZXB0LnVybCA9IHVybDsKLSAgICBpZiAob3B0aW9uYWxDYXNlU2Vuc2l0aXZlKQotICAgICAg
ICBpbnRlcmNlcHQuY2FzZVNlbnNpdGl2ZSA9ICpvcHRpb25hbENhc2VTZW5zaXRpdmU7Ci0gICAg
aWYgKG9wdGlvbmFsSXNSZWdleCkKLSAgICAgICAgaW50ZXJjZXB0LmlzUmVnZXggPSAqb3B0aW9u
YWxJc1JlZ2V4OwotICAgIGludGVyY2VwdC5uZXR3b3JrU3RhZ2UgPSBuZXR3b3JrU3RhZ2UudmFs
dWUoKTsKKyAgICBpZiAoY2FzZVNlbnNpdGl2ZSkKKyAgICAgICAgaW50ZXJjZXB0LmNhc2VTZW5z
aXRpdmUgPSAqY2FzZVNlbnNpdGl2ZTsKKyAgICBpZiAoaXNSZWdleCkKKyAgICAgICAgaW50ZXJj
ZXB0LmlzUmVnZXggPSAqaXNSZWdleDsKKyAgICBpbnRlcmNlcHQubmV0d29ya1N0YWdlID0gbmV0
d29ya1N0YWdlOwogCiAgICAgaWYgKCFtX2ludGVyY2VwdHMuYXBwZW5kSWZOb3RDb250YWlucyhp
bnRlcmNlcHQpKQotICAgICAgICBlcnJvclN0cmluZyA9ICJJbnRlcmNlcHQgZm9yIGdpdmVuIHVy
bCwgZ2l2ZW4gaXNSZWdleCwgYW5kIGdpdmVuIHN0YWdlIGFscmVhZHkgZXhpc3RzIl9zOworICAg
ICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkludGVyY2VwdCBmb3IgZ2l2ZW4gdXJsLCBnaXZl
biBpc1JlZ2V4LCBhbmQgZ2l2ZW4gc3RhZ2UgYWxyZWFkeSBleGlzdHMiX3MpOworCisgICAgcmV0
dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OnJlbW92ZUludGVyY2Vw
dGlvbihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBT
dHJpbmcmIG5ldHdvcmtTdGFnZVN0cmluZywgY29uc3QgYm9vbCogb3B0aW9uYWxDYXNlU2Vuc2l0
aXZlLCBjb25zdCBib29sKiBvcHRpb25hbElzUmVnZXgpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdP
cjx2b2lkPiBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OnJlbW92ZUludGVyY2VwdGlvbihjb25zdCBT
dHJpbmcmIHVybCwgUHJvdG9jb2w6Ok5ldHdvcms6Ok5ldHdvcmtTdGFnZSBuZXR3b3JrU3RhZ2Us
IE9wdGlvbmFsPGJvb2w+JiYgY2FzZVNlbnNpdGl2ZSwgT3B0aW9uYWw8Ym9vbD4mJiBpc1JlZ2V4
KQogewotICAgIGF1dG8gbmV0d29ya1N0YWdlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6SW5zcGVj
dG9ySGVscGVyczo6cGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6
Ok5ldHdvcms6Ok5ldHdvcmtTdGFnZT4obmV0d29ya1N0YWdlU3RyaW5nKTsKLSAgICBpZiAoIW5l
dHdvcmtTdGFnZSkgewotICAgICAgICBlcnJvclN0cmluZyA9IG1ha2VTdHJpbmcoIlVua25vd24g
bmV0d29ya1N0YWdlOiAiX3MsIG5ldHdvcmtTdGFnZVN0cmluZyk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KICAgICBJbnRlcmNlcHQgaW50ZXJjZXB0OwogICAgIGludGVyY2VwdC51cmwgPSB1
cmw7Ci0gICAgaWYgKG9wdGlvbmFsQ2FzZVNlbnNpdGl2ZSkKLSAgICAgICAgaW50ZXJjZXB0LmNh
c2VTZW5zaXRpdmUgPSAqb3B0aW9uYWxDYXNlU2Vuc2l0aXZlOwotICAgIGlmIChvcHRpb25hbElz
UmVnZXgpCi0gICAgICAgIGludGVyY2VwdC5pc1JlZ2V4ID0gKm9wdGlvbmFsSXNSZWdleDsKLSAg
ICBpbnRlcmNlcHQubmV0d29ya1N0YWdlID0gbmV0d29ya1N0YWdlLnZhbHVlKCk7CisgICAgaWYg
KGNhc2VTZW5zaXRpdmUpCisgICAgICAgIGludGVyY2VwdC5jYXNlU2Vuc2l0aXZlID0gKmNhc2VT
ZW5zaXRpdmU7CisgICAgaWYgKGlzUmVnZXgpCisgICAgICAgIGludGVyY2VwdC5pc1JlZ2V4ID0g
KmlzUmVnZXg7CisgICAgaW50ZXJjZXB0Lm5ldHdvcmtTdGFnZSA9IG5ldHdvcmtTdGFnZTsKIAog
ICAgIGlmICghbV9pbnRlcmNlcHRzLnJlbW92ZUFsbChpbnRlcmNlcHQpKQotICAgICAgICBlcnJv
clN0cmluZyA9ICJNaXNzaW5nIGludGVyY2VwdCBmb3IgZ2l2ZW4gdXJsLCBnaXZlbiBpc1JlZ2V4
LCBhbmQgZ2l2ZW4gc3RhZ2UiX3M7CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTWlz
c2luZyBpbnRlcmNlcHQgZm9yIGdpdmVuIHVybCwgZ2l2ZW4gaXNSZWdleCwgYW5kIGdpdmVuIHN0
YWdlIl9zKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKIGJvb2wgSW5zcGVjdG9yTmV0d29ya0Fn
ZW50Ojp3aWxsSW50ZXJjZXB0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKQEAgLTEx
MTgsOCArMTEwNSw4IEBAIGJvb2wgSW5zcGVjdG9yTmV0d29ya0FnZW50Ojp3aWxsSW50ZXJjZXB0
KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKICAgICBpZiAoIW1faW50ZXJjZXB0aW9u
RW5hYmxlZCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmV0dXJuIHNob3VsZEludGVy
Y2VwdChyZXF1ZXN0LnVybCgpLCBOZXR3b3JrU3RhZ2U6OlJlcXVlc3QpCi0gICAgICAgIHx8IHNo
b3VsZEludGVyY2VwdChyZXF1ZXN0LnVybCgpLCBOZXR3b3JrU3RhZ2U6OlJlc3BvbnNlKTsKKyAg
ICByZXR1cm4gc2hvdWxkSW50ZXJjZXB0KHJlcXVlc3QudXJsKCksIFByb3RvY29sOjpOZXR3b3Jr
OjpOZXR3b3JrU3RhZ2U6OlJlcXVlc3QpCisgICAgICAgIHx8IHNob3VsZEludGVyY2VwdChyZXF1
ZXN0LnVybCgpLCBQcm90b2NvbDo6TmV0d29yazo6TmV0d29ya1N0YWdlOjpSZXNwb25zZSk7CiB9
CiAKIGJvb2wgSW5zcGVjdG9yTmV0d29ya0FnZW50OjpzaG91bGRJbnRlcmNlcHRSZXF1ZXN0KGNv
bnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKQEAgLTExMjcsNyArMTExNCw3IEBAIGJvb2wg
SW5zcGVjdG9yTmV0d29ya0FnZW50OjpzaG91bGRJbnRlcmNlcHRSZXF1ZXN0KGNvbnN0IFJlc291
cmNlUmVxdWVzdCYgcmVxdWVzCiAgICAgaWYgKCFtX2ludGVyY2VwdGlvbkVuYWJsZWQpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiBzaG91bGRJbnRlcmNlcHQocmVxdWVzdC51
cmwoKSwgTmV0d29ya1N0YWdlOjpSZXF1ZXN0KTsKKyAgICByZXR1cm4gc2hvdWxkSW50ZXJjZXB0
KHJlcXVlc3QudXJsKCksIFByb3RvY29sOjpOZXR3b3JrOjpOZXR3b3JrU3RhZ2U6OlJlcXVlc3Qp
OwogfQogCiBib29sIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6c2hvdWxkSW50ZXJjZXB0UmVzcG9u
c2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCkBAIC0xMTM1LDcgKzExMjIsNyBA
QCBib29sIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6c2hvdWxkSW50ZXJjZXB0UmVzcG9uc2UoY29u
c3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcAogICAgIGlmICghbV9pbnRlcmNlcHRpb25FbmFibGVk
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gc2hvdWxkSW50ZXJjZXB0KHJl
c3BvbnNlLnVybCgpLCBOZXR3b3JrU3RhZ2U6OlJlc3BvbnNlKTsKKyAgICByZXR1cm4gc2hvdWxk
SW50ZXJjZXB0KHJlc3BvbnNlLnVybCgpLCBQcm90b2NvbDo6TmV0d29yazo6TmV0d29ya1N0YWdl
OjpSZXNwb25zZSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50OjppbnRlcmNlcHRS
ZXF1ZXN0KFJlc291cmNlTG9hZGVyJiBsb2FkZXIsIEZ1bmN0aW9uPHZvaWQoY29uc3QgUmVzb3Vy
Y2VSZXF1ZXN0Jik+JiYgaGFuZGxlcikKQEAgLTExNjYsOTIgKzExNTMsODkgQEAgdm9pZCBJbnNw
ZWN0b3JOZXR3b3JrQWdlbnQ6OmludGVyY2VwdFJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9u
c2UmIHJlc3BvbnNlLAogCiAgICAgbV9wZW5kaW5nSW50ZXJjZXB0UmVzcG9uc2VzLnNldChyZXF1
ZXN0SWQsIG1ha2VVbmlxdWU8UGVuZGluZ0ludGVyY2VwdFJlc3BvbnNlPihyZXNwb25zZSwgV1RG
TW92ZShoYW5kbGVyKSkpOwogCi0gICAgbV9mcm9udGVuZERpc3BhdGNoZXItPnJlc3BvbnNlSW50
ZXJjZXB0ZWQocmVxdWVzdElkLCBidWlsZE9iamVjdEZvclJlc291cmNlUmVzcG9uc2UocmVzcG9u
c2UsIG51bGxwdHIpKTsKKyAgICBhdXRvIHJlc291cmNlUmVzcG9uc2UgPSBidWlsZE9iamVjdEZv
clJlc291cmNlUmVzcG9uc2UocmVzcG9uc2UsIG51bGxwdHIpOworICAgIGlmICghcmVzb3VyY2VS
ZXNwb25zZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPnJl
c3BvbnNlSW50ZXJjZXB0ZWQocmVxdWVzdElkLCByZXNvdXJjZVJlc3BvbnNlLnJlbGVhc2VOb25O
dWxsKCkpOwogfQogCi12b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6aW50ZXJjZXB0Q29udGlu
dWUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgY29u
c3QgU3RyaW5nJiBuZXR3b3JrU3RhZ2VTdHJpbmcpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2
b2lkPiBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmludGVyY2VwdENvbnRpbnVlKGNvbnN0IFByb3Rv
Y29sOjpOZXR3b3JrOjpSZXF1ZXN0SWQmIHJlcXVlc3RJZCwgUHJvdG9jb2w6Ok5ldHdvcms6Ok5l
dHdvcmtTdGFnZSBuZXR3b3JrU3RhZ2UpCiB7Ci0gICAgYXV0byBuZXR3b3JrU3RhZ2UgPSBJbnNw
ZWN0b3I6OlByb3RvY29sOjpJbnNwZWN0b3JIZWxwZXJzOjpwYXJzZUVudW1WYWx1ZUZyb21TdHJp
bmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6TmV0d29ya1N0YWdlPihuZXR3b3JrU3Rh
Z2VTdHJpbmcpOwotICAgIGlmICghbmV0d29ya1N0YWdlKSB7Ci0gICAgICAgIGVycm9yU3RyaW5n
ID0gbWFrZVN0cmluZygiVW5rbm93biBuZXR3b3JrU3RhZ2U6ICJfcywgbmV0d29ya1N0YWdlU3Ry
aW5nKTsKLSAgICAgICAgcmV0dXJuOworICAgIHN3aXRjaCAobmV0d29ya1N0YWdlKSB7CisgICAg
Y2FzZSBQcm90b2NvbDo6TmV0d29yazo6TmV0d29ya1N0YWdlOjpSZXF1ZXN0OgorICAgICAgICBp
ZiAoYXV0byBwZW5kaW5nSW50ZXJjZXB0UmVxdWVzdCA9IG1fcGVuZGluZ0ludGVyY2VwdFJlcXVl
c3RzLnRha2UocmVxdWVzdElkKSkgeworICAgICAgICAgICAgcGVuZGluZ0ludGVyY2VwdFJlcXVl
c3QtPmNvbnRpbnVlV2l0aE9yaWdpbmFsUmVxdWVzdCgpOworICAgICAgICAgICAgcmV0dXJuIHsg
fTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk1pc3NpbmcgcGVu
ZGluZyBpbnRlcmNlcHQgcmVxdWVzdCBmb3IgZ2l2ZW4gcmVxdWVzdElkIl9zKTsKKworICAgIGNh
c2UgUHJvdG9jb2w6Ok5ldHdvcms6Ok5ldHdvcmtTdGFnZTo6UmVzcG9uc2U6CisgICAgICAgIGlm
IChhdXRvIHBlbmRpbmdJbnRlcmNlcHRSZXNwb25zZSA9IG1fcGVuZGluZ0ludGVyY2VwdFJlc3Bv
bnNlcy50YWtlKHJlcXVlc3RJZCkpIHsKKyAgICAgICAgICAgIHBlbmRpbmdJbnRlcmNlcHRSZXNw
b25zZS0+cmVzcG9uZFdpdGhPcmlnaW5hbFJlc3BvbnNlKCk7CisgICAgICAgICAgICByZXR1cm4g
eyB9OworICAgICAgICB9CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTWlzc2luZyBw
ZW5kaW5nIGludGVyY2VwdCByZXNwb25zZSBmb3IgZ2l2ZW4gcmVxdWVzdElkIl9zKTsKICAgICB9
CiAKLSAgICBzd2l0Y2ggKG5ldHdvcmtTdGFnZS52YWx1ZSgpKSB7Ci0gICAgY2FzZSBOZXR3b3Jr
U3RhZ2U6OlJlcXVlc3Q6Ci0gICAgICAgIGlmIChhdXRvIHBlbmRpbmdJbnRlcmNlcHRSZXF1ZXN0
ID0gbV9wZW5kaW5nSW50ZXJjZXB0UmVxdWVzdHMudGFrZShyZXF1ZXN0SWQpKQotICAgICAgICAg
ICAgcGVuZGluZ0ludGVyY2VwdFJlcXVlc3QtPmNvbnRpbnVlV2l0aE9yaWdpbmFsUmVxdWVzdCgp
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIHBlbmRp
bmcgaW50ZXJjZXB0IHJlcXVlc3QgZm9yIGdpdmVuIHJlcXVlc3RJZCJfczsKLSAgICAgICAgcmV0
dXJuOwotICAgIGNhc2UgTmV0d29ya1N0YWdlOjpSZXNwb25zZToKLSAgICAgICAgaWYgKGF1dG8g
cGVuZGluZ0ludGVyY2VwdFJlc3BvbnNlID0gbV9wZW5kaW5nSW50ZXJjZXB0UmVzcG9uc2VzLnRh
a2UocmVxdWVzdElkKSkKLSAgICAgICAgICAgIHBlbmRpbmdJbnRlcmNlcHRSZXNwb25zZS0+cmVz
cG9uZFdpdGhPcmlnaW5hbFJlc3BvbnNlKCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGVy
cm9yU3RyaW5nID0gIk1pc3NpbmcgcGVuZGluZyBpbnRlcmNlcHQgcmVzcG9uc2UgZm9yIGdpdmVu
IHJlcXVlc3RJZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2Vu
dDo6aW50ZXJjZXB0V2l0aFJlcXVlc3QoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBT
dHJpbmcmIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nKiB1cmwsIGNvbnN0IFN0cmluZyogbWV0aG9k
LCBjb25zdCBKU09OOjpPYmplY3QqIGhlYWRlcnMsIGNvbnN0IFN0cmluZyogcG9zdERhdGEpCitQ
cm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmludGVy
Y2VwdFdpdGhSZXF1ZXN0KGNvbnN0IFByb3RvY29sOjpOZXR3b3JrOjpSZXF1ZXN0SWQmIHJlcXVl
c3RJZCwgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWZQdHI8SlNP
Tjo6T2JqZWN0PiYmIGhlYWRlcnMsIGNvbnN0IFN0cmluZyYgcG9zdERhdGEpCiB7CiAgICAgYXV0
byBwZW5kaW5nUmVxdWVzdCA9IG1fcGVuZGluZ0ludGVyY2VwdFJlcXVlc3RzLnRha2UocmVxdWVz
dElkKTsKLSAgICBpZiAoIXBlbmRpbmdSZXF1ZXN0KSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0g
Ik1pc3NpbmcgcGVuZGluZyBpbnRlcmNlcHQgcmVxdWVzdCBmb3IgZ2l2ZW4gcmVxdWVzdElkIl9z
OwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghcGVuZGluZ1JlcXVlc3QpCisgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTWlzc2luZyBwZW5kaW5nIGludGVyY2VwdCByZXF1
ZXN0IGZvciBnaXZlbiByZXF1ZXN0SWQiX3MpOwogCiAgICAgYXV0byYgbG9hZGVyID0gKnBlbmRp
bmdSZXF1ZXN0LT5tX2xvYWRlcjsKICAgICBSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdCA9IGxvYWRl
ci5yZXF1ZXN0KCk7Ci0gICAgaWYgKHVybCkKLSAgICAgICAgcmVxdWVzdC5zZXRVUkwoVVJMKHsg
fSwgKnVybCkpOwotICAgIGlmIChtZXRob2QpCi0gICAgICAgIHJlcXVlc3Quc2V0SFRUUE1ldGhv
ZCgqbWV0aG9kKTsKKyAgICBpZiAoISF1cmwpCisgICAgICAgIHJlcXVlc3Quc2V0VVJMKFVSTCh7
IH0sIHVybCkpOworICAgIGlmICghIW1ldGhvZCkKKyAgICAgICAgcmVxdWVzdC5zZXRIVFRQTWV0
aG9kKG1ldGhvZCk7CiAgICAgaWYgKGhlYWRlcnMpIHsKICAgICAgICAgSFRUUEhlYWRlck1hcCBl
eHBsaWNpdEhlYWRlcnM7CiAgICAgICAgIGZvciAoYXV0byYgaGVhZGVyIDogKmhlYWRlcnMpIHsK
LSAgICAgICAgICAgIFN0cmluZyBoZWFkZXJWYWx1ZTsKLSAgICAgICAgICAgIGlmIChoZWFkZXIu
dmFsdWUtPmFzU3RyaW5nKGhlYWRlclZhbHVlKSkKKyAgICAgICAgICAgIGF1dG8gaGVhZGVyVmFs
dWUgPSBoZWFkZXIudmFsdWUtPmFzU3RyaW5nKCk7CisgICAgICAgICAgICBpZiAoISFoZWFkZXJW
YWx1ZSkKICAgICAgICAgICAgICAgICBleHBsaWNpdEhlYWRlcnMuYWRkKGhlYWRlci5rZXksIGhl
YWRlclZhbHVlKTsKICAgICAgICAgfQogICAgICAgICByZXF1ZXN0LnNldEhUVFBIZWFkZXJGaWVs
ZHMoV1RGTW92ZShleHBsaWNpdEhlYWRlcnMpKTsKICAgICB9Ci0gICAgaWYgKHBvc3REYXRhKSB7
CisgICAgaWYgKCEhcG9zdERhdGEpIHsKICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGJ1ZmZlcjsK
LSAgICAgICAgaWYgKCFiYXNlNjREZWNvZGUoKnBvc3REYXRhLCBidWZmZXIpKSB7Ci0gICAgICAg
ICAgICBlcnJvclN0cmluZyA9ICJVbmFibGUgdG8gZGVjb2RlIGdpdmVuIHBvc3REYXRhIl9zOwot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9CisgICAgICAgIGlmICghYmFzZTY0RGVjb2Rl
KHBvc3REYXRhLCBidWZmZXIpKQorICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJV
bmFibGUgdG8gZGVjb2RlIGdpdmVuIHBvc3REYXRhIl9zKTsKIAogICAgICAgICByZXF1ZXN0LnNl
dEhUVFBCb2R5KEZvcm1EYXRhOjpjcmVhdGUoYnVmZmVyKSk7CiAgICAgfQogICAgIC8vIEZJWE1F
OiBmaWd1cmUgb3V0IGhvdyB0byBpZGVudGlmeSB3aGVuIGEgcmVxdWVzdCBoYXMgYmVlbiBvdmVy
cmlkZGVuIHdoZW4gd2UgYWRkIHRoaXMgdG8gdGhlIGZyb250ZW5kLgogICAgIHBlbmRpbmdSZXF1
ZXN0LT5jb250aW51ZVdpdGhSZXF1ZXN0KHJlcXVlc3QpOworCisgICAgcmV0dXJuIHsgfTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmludGVyY2VwdFdpdGhSZXNwb25zZShFcnJv
clN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBjb25zdCBTdHJp
bmcmIGNvbnRlbnQsIGJvb2wgYmFzZTY0RW5jb2RlZCwgY29uc3QgU3RyaW5nKiBtaW1lVHlwZSwg
Y29uc3QgaW50KiBzdGF0dXMsIGNvbnN0IFN0cmluZyogc3RhdHVzVGV4dCwgY29uc3QgSlNPTjo6
T2JqZWN0KiBoZWFkZXJzKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9y
TmV0d29ya0FnZW50OjppbnRlcmNlcHRXaXRoUmVzcG9uc2UoY29uc3QgUHJvdG9jb2w6Ok5ldHdv
cms6OlJlcXVlc3RJZCYgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQsIGJvb2wgYmFz
ZTY0RW5jb2RlZCwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8aW50PiYmIHN0YXR1
cywgY29uc3QgU3RyaW5nJiBzdGF0dXNUZXh0LCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIGhlYWRl
cnMpCiB7CiAgICAgYXV0byBwZW5kaW5nSW50ZXJjZXB0UmVzcG9uc2UgPSBtX3BlbmRpbmdJbnRl
cmNlcHRSZXNwb25zZXMudGFrZShyZXF1ZXN0SWQpOwotICAgIGlmICghcGVuZGluZ0ludGVyY2Vw
dFJlc3BvbnNlKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIk1pc3NpbmcgcGVuZGluZyBpbnRl
cmNlcHQgcmVzcG9uc2UgZm9yIGdpdmVuIHJlcXVlc3RJZCJfczsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KKyAgICBpZiAoIXBlbmRpbmdJbnRlcmNlcHRSZXNwb25zZSkKKyAgICAgICAgcmV0dXJu
IG1ha2VVbmV4cGVjdGVkKCJNaXNzaW5nIHBlbmRpbmcgaW50ZXJjZXB0IHJlc3BvbnNlIGZvciBn
aXZlbiByZXF1ZXN0SWQiX3MpOwogCiAgICAgUmVzb3VyY2VSZXNwb25zZSBvdmVycmlkZVJlc3Bv
bnNlKHBlbmRpbmdJbnRlcmNlcHRSZXNwb25zZS0+b3JpZ2luYWxSZXNwb25zZSgpKTsKICAgICBv
dmVycmlkZVJlc3BvbnNlLnNldFNvdXJjZShSZXNvdXJjZVJlc3BvbnNlOjpTb3VyY2U6Okluc3Bl
Y3Rvck92ZXJyaWRlKTsKIAogICAgIGlmIChzdGF0dXMpCiAgICAgICAgIG92ZXJyaWRlUmVzcG9u
c2Uuc2V0SFRUUFN0YXR1c0NvZGUoKnN0YXR1cyk7Ci0gICAgaWYgKHN0YXR1c1RleHQpCi0gICAg
ICAgIG92ZXJyaWRlUmVzcG9uc2Uuc2V0SFRUUFN0YXR1c1RleHQoKnN0YXR1c1RleHQpOwotICAg
IGlmIChtaW1lVHlwZSkKLSAgICAgICAgb3ZlcnJpZGVSZXNwb25zZS5zZXRNaW1lVHlwZSgqbWlt
ZVR5cGUpOworICAgIGlmICghIXN0YXR1c1RleHQpCisgICAgICAgIG92ZXJyaWRlUmVzcG9uc2Uu
c2V0SFRUUFN0YXR1c1RleHQoc3RhdHVzVGV4dCk7CisgICAgaWYgKCEhbWltZVR5cGUpCisgICAg
ICAgIG92ZXJyaWRlUmVzcG9uc2Uuc2V0TWltZVR5cGUobWltZVR5cGUpOwogICAgIGlmIChoZWFk
ZXJzKSB7CiAgICAgICAgIEhUVFBIZWFkZXJNYXAgZXhwbGljaXRIZWFkZXJzOwogICAgICAgICBm
b3IgKGF1dG8mIGhlYWRlciA6ICpoZWFkZXJzKSB7Ci0gICAgICAgICAgICBTdHJpbmcgaGVhZGVy
VmFsdWU7Ci0gICAgICAgICAgICBpZiAoaGVhZGVyLnZhbHVlLT5hc1N0cmluZyhoZWFkZXJWYWx1
ZSkpCisgICAgICAgICAgICBhdXRvIGhlYWRlclZhbHVlID0gaGVhZGVyLnZhbHVlLT5hc1N0cmlu
ZygpOworICAgICAgICAgICAgaWYgKCEhaGVhZGVyVmFsdWUpCiAgICAgICAgICAgICAgICAgZXhw
bGljaXRIZWFkZXJzLmFkZChoZWFkZXIua2V5LCBoZWFkZXJWYWx1ZSk7CiAgICAgICAgIH0KICAg
ICAgICAgb3ZlcnJpZGVSZXNwb25zZS5zZXRIVFRQSGVhZGVyRmllbGRzKFdURk1vdmUoZXhwbGlj
aXRIZWFkZXJzKSk7CkBAIC0xMjYxLDQxICsxMjQ1LDM0IEBAIHZvaWQgSW5zcGVjdG9yTmV0d29y
a0FnZW50OjppbnRlcmNlcHRXaXRoUmVzcG9uc2UoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBj
b25zCiAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gb3ZlcnJpZGVEYXRhOwogICAgIGlmIChiYXNl
NjRFbmNvZGVkKSB7CiAgICAgICAgIFZlY3Rvcjx1aW50OF90PiBidWZmZXI7Ci0gICAgICAgIGlm
ICghYmFzZTY0RGVjb2RlKGNvbnRlbnQsIGJ1ZmZlcikpIHsKLSAgICAgICAgICAgIGVycm9yU3Ry
aW5nID0gIlVuYWJsZSB0byBkZWNvZGUgZ2l2ZW4gY29udGVudCJfczsKLSAgICAgICAgICAgIHBl
bmRpbmdJbnRlcmNlcHRSZXNwb25zZS0+cmVzcG9uZFdpdGhPcmlnaW5hbFJlc3BvbnNlKCk7Ci0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKCFiYXNlNjREZWNvZGUo
Y29udGVudCwgYnVmZmVyKSkKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiVW5h
YmxlIHRvIGRlY29kZSBnaXZlbiBjb250ZW50Il9zKTsKIAogICAgICAgICBvdmVycmlkZURhdGEg
PSBTaGFyZWRCdWZmZXI6OmNyZWF0ZShXVEZNb3ZlKGJ1ZmZlcikpOwogICAgIH0gZWxzZQogICAg
ICAgICBvdmVycmlkZURhdGEgPSBTaGFyZWRCdWZmZXI6OmNyZWF0ZShjb250ZW50LnV0ZjgoKS5k
YXRhKCksIGNvbnRlbnQudXRmOCgpLmxlbmd0aCgpKTsKIAogICAgIHBlbmRpbmdJbnRlcmNlcHRS
ZXNwb25zZS0+cmVzcG9uZChvdmVycmlkZVJlc3BvbnNlLCBvdmVycmlkZURhdGEpOworCisgICAg
cmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmludGVyY2VwdFJl
cXVlc3RXaXRoUmVzcG9uc2UoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcm
IHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBjb250ZW50LCBib29sIGJhc2U2NEVuY29kZWQsIGNv
bnN0IFN0cmluZyYgbWltZVR5cGUsIGludCBzdGF0dXMsIGNvbnN0IFN0cmluZyYgc3RhdHVzVGV4
dCwgY29uc3QgSlNPTjo6T2JqZWN0JiBoZWFkZXJzKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8
dm9pZD4gSW5zcGVjdG9yTmV0d29ya0FnZW50OjppbnRlcmNlcHRSZXF1ZXN0V2l0aFJlc3BvbnNl
KGNvbnN0IFByb3RvY29sOjpOZXR3b3JrOjpSZXF1ZXN0SWQmIHJlcXVlc3RJZCwgY29uc3QgU3Ry
aW5nJiBjb250ZW50LCBib29sIGJhc2U2NEVuY29kZWQsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUs
IGludCBzdGF0dXMsIGNvbnN0IFN0cmluZyYgc3RhdHVzVGV4dCwgUmVmPEpTT046Ok9iamVjdD4m
JiBoZWFkZXJzKQogewogICAgIGF1dG8gcGVuZGluZ1JlcXVlc3QgPSBtX3BlbmRpbmdJbnRlcmNl
cHRSZXF1ZXN0cy50YWtlKHJlcXVlc3RJZCk7Ci0gICAgaWYgKCFwZW5kaW5nUmVxdWVzdCkgewot
ICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIHBlbmRpbmcgaW50ZXJjZXB0IHJlcXVlc3Qg
Zm9yIGdpdmVuIHJlcXVlc3RJZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAo
IXBlbmRpbmdSZXF1ZXN0KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk1pc3Npbmcg
cGVuZGluZyBpbnRlcmNlcHQgcmVxdWVzdCBmb3IgZ2l2ZW4gcmVxdWVzdElkIl9zKTsKIAogICAg
IC8vIExvYWRlciB3aWxsIGJlIHJldGFpbmVkIGluIHRoZSBkaWRSZWNlaXZlUmVzcG9uc2UgbGFt
YmRhIGJlbG93LgogICAgIFJlZlB0cjxSZXNvdXJjZUxvYWRlcj4gbG9hZGVyID0gcGVuZGluZ1Jl
cXVlc3QtPm1fbG9hZGVyLmdldCgpOwotICAgIGlmIChsb2FkZXItPnJlYWNoZWRUZXJtaW5hbFN0
YXRlKCkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiVW5hYmxlIHRvIGZ1bGZpbGwgcmVxdWVz
dCwgaXQgaGFzIGFscmVhZHkgYmVlbiBwcm9jZXNzZWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9CisgICAgaWYgKGxvYWRlci0+cmVhY2hlZFRlcm1pbmFsU3RhdGUoKSkKKyAgICAgICAgcmV0
dXJuIG1ha2VVbmV4cGVjdGVkKCJVbmFibGUgdG8gZnVsZmlsbCByZXF1ZXN0LCBpdCBoYXMgYWxy
ZWFkeSBiZWVuIHByb2Nlc3NlZCJfcyk7CiAKICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBkYXRh
OwogICAgIGlmIChiYXNlNjRFbmNvZGVkKSB7CiAgICAgICAgIFZlY3Rvcjx1aW50OF90PiBidWZm
ZXI7Ci0gICAgICAgIGlmICghYmFzZTY0RGVjb2RlKGNvbnRlbnQsIGJ1ZmZlcikpIHsKLSAgICAg
ICAgICAgIGVycm9yU3RyaW5nID0gIlVuYWJsZSB0byBkZWNvZGUgZ2l2ZW4gY29udGVudCJfczsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQorICAgICAgICBpZiAoIWJhc2U2NERlY29k
ZShjb250ZW50LCBidWZmZXIpKQorICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJV
bmFibGUgdG8gZGVjb2RlIGdpdmVuIGNvbnRlbnQiX3MpOwogCiAgICAgICAgIGRhdGEgPSBTaGFy
ZWRCdWZmZXI6OmNyZWF0ZShXVEZNb3ZlKGJ1ZmZlcikpOwogICAgIH0gZWxzZQpAQCAtMTMwNyw5
ICsxMjg0LDkgQEAgdm9pZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmludGVyY2VwdFJlcXVlc3RX
aXRoUmVzcG9uc2UoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW4KICAgICByZXNwb25zZS5zZXRIVFRQ
U3RhdHVzQ29kZShzdGF0dXMpOwogICAgIHJlc3BvbnNlLnNldEhUVFBTdGF0dXNUZXh0KHN0YXR1
c1RleHQpOwogICAgIEhUVFBIZWFkZXJNYXAgZXhwbGljaXRIZWFkZXJzOwotICAgIGZvciAoYXV0
byYgaGVhZGVyIDogaGVhZGVycykgewotICAgICAgICBTdHJpbmcgaGVhZGVyVmFsdWU7Ci0gICAg
ICAgIGlmIChoZWFkZXIudmFsdWUtPmFzU3RyaW5nKGhlYWRlclZhbHVlKSkKKyAgICBmb3IgKGF1
dG8mIGhlYWRlciA6IGhlYWRlcnMuZ2V0KCkpIHsKKyAgICAgICAgYXV0byBoZWFkZXJWYWx1ZSA9
IGhlYWRlci52YWx1ZS0+YXNTdHJpbmcoKTsKKyAgICAgICAgaWYgKCEhaGVhZGVyVmFsdWUpCiAg
ICAgICAgICAgICBleHBsaWNpdEhlYWRlcnMuYWRkKGhlYWRlci5rZXksIGhlYWRlclZhbHVlKTsK
ICAgICB9CiAgICAgcmVzcG9uc2Uuc2V0SFRUUEhlYWRlckZpZWxkcyhXVEZNb3ZlKGV4cGxpY2l0
SGVhZGVycykpOwpAQCAtMTMxOSw0NCArMTI5Niw0MCBAQCB2b2lkIEluc3BlY3Rvck5ldHdvcmtB
Z2VudDo6aW50ZXJjZXB0UmVxdWVzdFdpdGhSZXNwb25zZShFcnJvclN0cmluZyYgZXJyb3JTdHJp
bgogICAgICAgICAgICAgbG9hZGVyLT5kaWRSZWNlaXZlQnVmZmVyKFdURk1vdmUoYnVmZmVyKSwg
YnVmZmVyLT5zaXplKCksIERhdGFQYXlsb2FkV2hvbGVSZXNvdXJjZSk7CiAgICAgICAgIGxvYWRl
ci0+ZGlkRmluaXNoTG9hZGluZyhOZXR3b3JrTG9hZE1ldHJpY3MoKSk7CiAgICAgfSk7CisKKyAg
ICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6aW50ZXJjZXB0
UmVxdWVzdFdpdGhFcnJvcihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYg
cmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIGVycm9yVHlwZVN0cmluZykKK1Byb3RvY29sOjpFcnJv
clN0cmluZ09yPHZvaWQ+IEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6aW50ZXJjZXB0UmVxdWVzdFdp
dGhFcnJvcihjb25zdCBQcm90b2NvbDo6TmV0d29yazo6UmVxdWVzdElkJiByZXF1ZXN0SWQsIFBy
b3RvY29sOjpOZXR3b3JrOjpSZXNvdXJjZUVycm9yVHlwZSBlcnJvclR5cGUpCiB7CiAgICAgYXV0
byBwZW5kaW5nUmVxdWVzdCA9IG1fcGVuZGluZ0ludGVyY2VwdFJlcXVlc3RzLnRha2UocmVxdWVz
dElkKTsKLSAgICBpZiAoIXBlbmRpbmdSZXF1ZXN0KSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0g
Ik1pc3NpbmcgcGVuZGluZyBpbnRlcmNlcHQgcmVxdWVzdCBmb3IgZ2l2ZW4gcmVxdWVzdElkIl9z
OwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghcGVuZGluZ1JlcXVlc3QpCisgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTWlzc2luZyBwZW5kaW5nIGludGVyY2VwdCByZXF1
ZXN0IGZvciBnaXZlbiByZXF1ZXN0SWQiX3MpOwogCiAgICAgYXV0byYgbG9hZGVyID0gKnBlbmRp
bmdSZXF1ZXN0LT5tX2xvYWRlcjsKLSAgICBpZiAobG9hZGVyLnJlYWNoZWRUZXJtaW5hbFN0YXRl
KCkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiVW5hYmxlIHRvIGFib3J0IHJlcXVlc3QsIGl0
IGhhcyBhbHJlYWR5IGJlZW4gcHJvY2Vzc2VkIl9zOwotICAgICAgICByZXR1cm47CisgICAgaWYg
KGxvYWRlci5yZWFjaGVkVGVybWluYWxTdGF0ZSgpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoIlVuYWJsZSB0byBhYm9ydCByZXF1ZXN0LCBpdCBoYXMgYWxyZWFkeSBiZWVuIHByb2Nl
c3NlZCJfcyk7CisKKyAgICBzd2l0Y2ggKGVycm9yVHlwZSkgeworICAgIGNhc2UgUHJvdG9jb2w6
Ok5ldHdvcms6OlJlc291cmNlRXJyb3JUeXBlOjpHZW5lcmFsOgorICAgICAgICBsb2FkZXIuZGlk
RmFpbChSZXNvdXJjZUVycm9yKGVycm9yRG9tYWluV2ViS2l0SW50ZXJuYWwsIDAsIGxvYWRlci51
cmwoKSwgIlJlcXVlc3QgaW50ZXJjZXB0ZWQiX3MsIFJlc291cmNlRXJyb3I6OlR5cGU6OkdlbmVy
YWwpKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIGNhc2UgUHJvdG9jb2w6Ok5ldHdvcms6
OlJlc291cmNlRXJyb3JUeXBlOjpBY2Nlc3NDb250cm9sOgorICAgICAgICBsb2FkZXIuZGlkRmFp
bChSZXNvdXJjZUVycm9yKGVycm9yRG9tYWluV2ViS2l0SW50ZXJuYWwsIDAsIGxvYWRlci51cmwo
KSwgIkFjY2VzcyBkZW5pZWQiX3MsIFJlc291cmNlRXJyb3I6OlR5cGU6OkFjY2Vzc0NvbnRyb2wp
KTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIGNhc2UgUHJvdG9jb2w6Ok5ldHdvcms6OlJl
c291cmNlRXJyb3JUeXBlOjpDYW5jZWxsYXRpb246CisgICAgICAgIGxvYWRlci5kaWRGYWlsKFJl
c291cmNlRXJyb3IoZXJyb3JEb21haW5XZWJLaXRJbnRlcm5hbCwgMCwgbG9hZGVyLnVybCgpLCAi
UmVxdWVzdCBjYW5jZWxlZCJfcywgUmVzb3VyY2VFcnJvcjo6VHlwZTo6Q2FuY2VsbGF0aW9uKSk7
CisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBjYXNlIFByb3RvY29sOjpOZXR3b3JrOjpSZXNv
dXJjZUVycm9yVHlwZTo6VGltZW91dDoKKyAgICAgICAgbG9hZGVyLmRpZEZhaWwoUmVzb3VyY2VF
cnJvcihlcnJvckRvbWFpbldlYktpdEludGVybmFsLCAwLCBsb2FkZXIudXJsKCksICJSZXF1ZXN0
IHRpbWVkIG91dCJfcywgUmVzb3VyY2VFcnJvcjo6VHlwZTo6VGltZW91dCkpOworICAgICAgICBy
ZXR1cm4geyB9OwogICAgIH0KIAotICAgIGF1dG8gZXJyb3JUeXBlID0gSW5zcGVjdG9yOjpQcm90
b2NvbDo6SW5zcGVjdG9ySGVscGVyczo6cGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rv
cjo6UHJvdG9jb2w6Ok5ldHdvcms6OlJlc291cmNlRXJyb3JUeXBlPihlcnJvclR5cGVTdHJpbmcp
OwotICAgIGlmICghZXJyb3JUeXBlKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gbWFrZVN0cmlu
ZygiVW5rbm93biBlcnJvclR5cGU6ICJfcywgZXJyb3JUeXBlU3RyaW5nKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIFJlc291cmNlRXJyb3IgZXJyb3I7Ci0gICAgc3dpdGNoIChlcnJv
clR5cGUudmFsdWUoKSkgewotICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6
UmVzb3VyY2VFcnJvclR5cGU6OkdlbmVyYWw6Ci0gICAgICAgIGVycm9yID0gUmVzb3VyY2VFcnJv
cihlcnJvckRvbWFpbldlYktpdEludGVybmFsLCAwLCBsb2FkZXIudXJsKCksICJSZXF1ZXN0IGlu
dGVyY2VwdGVkIl9zLCBSZXNvdXJjZUVycm9yOjpUeXBlOjpHZW5lcmFsKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpSZXNvdXJjZUVycm9y
VHlwZTo6QWNjZXNzQ29udHJvbDoKLSAgICAgICAgZXJyb3IgPSBSZXNvdXJjZUVycm9yKGVycm9y
RG9tYWluV2ViS2l0SW50ZXJuYWwsIDAsIGxvYWRlci51cmwoKSwgIkFjY2VzcyBkZW5pZWQiX3Ms
IFJlc291cmNlRXJyb3I6OlR5cGU6OkFjY2Vzc0NvbnRyb2wpOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OlJlc291cmNlRXJyb3JUeXBlOjpD
YW5jZWxsYXRpb246Ci0gICAgICAgIGVycm9yID0gUmVzb3VyY2VFcnJvcihlcnJvckRvbWFpbldl
YktpdEludGVybmFsLCAwLCBsb2FkZXIudXJsKCksICJSZXF1ZXN0IGNhbmNlbGVkIl9zLCBSZXNv
dXJjZUVycm9yOjpUeXBlOjpDYW5jZWxsYXRpb24pOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OlJlc291cmNlRXJyb3JUeXBlOjpUaW1lb3V0
OgotICAgICAgICBlcnJvciA9IFJlc291cmNlRXJyb3IoZXJyb3JEb21haW5XZWJLaXRJbnRlcm5h
bCwgMCwgbG9hZGVyLnVybCgpLCAiUmVxdWVzdCB0aW1lZCBvdXQiX3MsIFJlc291cmNlRXJyb3I6
OlR5cGU6OlRpbWVvdXQpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgbG9hZGVyLmRpZEZh
aWwoZXJyb3IpOworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiB7IH07CiB9
CiAKIGJvb2wgSW5zcGVjdG9yTmV0d29ya0FnZW50OjpzaG91bGRUcmVhdEFzVGV4dChjb25zdCBT
dHJpbmcmIG1pbWVUeXBlKQpAQCAtMTQzOSw5ICsxNDEyLDkgQEAgYm9vbCBJbnNwZWN0b3JOZXR3
b3JrQWdlbnQ6OmNhY2hlZFJlc291cmNlQ29udGVudChDYWNoZWRSZXNvdXJjZSYgcmVzb3VyY2Us
IFN0cmkKICAgICB9CiB9CiAKLXN0YXRpYyBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6
U2VhcmNoUmVzdWx0PiBidWlsZE9iamVjdEZvclNlYXJjaFJlc3VsdChjb25zdCBTdHJpbmcmIHJl
cXVlc3RJZCwgY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBjb25zdCBTdHJpbmcmIHVybCwgaW50IG1h
dGNoZXNDb3VudCkKK3N0YXRpYyBSZWY8UHJvdG9jb2w6OlBhZ2U6OlNlYXJjaFJlc3VsdD4gYnVp
bGRPYmplY3RGb3JTZWFyY2hSZXN1bHQoY29uc3QgUHJvdG9jb2w6Ok5ldHdvcms6OlJlcXVlc3RJ
ZCYgcmVxdWVzdElkLCBjb25zdCBQcm90b2NvbDo6TmV0d29yazo6RnJhbWVJZCYgZnJhbWVJZCwg
Y29uc3QgU3RyaW5nJiB1cmwsIGludCBtYXRjaGVzQ291bnQpCiB7Ci0gICAgYXV0byBzZWFyY2hS
ZXN1bHQgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpTZWFyY2hSZXN1bHQ6OmNyZWF0ZSgp
CisgICAgYXV0byBzZWFyY2hSZXN1bHQgPSBQcm90b2NvbDo6UGFnZTo6U2VhcmNoUmVzdWx0Ojpj
cmVhdGUoKQogICAgICAgICAuc2V0VXJsKHVybCkKICAgICAgICAgLnNldEZyYW1lSWQoZnJhbWVJ
ZCkKICAgICAgICAgLnNldE1hdGNoZXNDb3VudChtYXRjaGVzQ291bnQpCkBAIC0xNDYxLDcgKzE0
MzQsNyBAQCBzdGF0aWMgT3B0aW9uYWw8U3RyaW5nPiB0ZXh0Q29udGVudEZvclJlc291cmNlRGF0
YShjb25zdCBOZXR3b3JrUmVzb3VyY2VzRGF0YTo6UgogICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CiB9CiAKLXZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50OjpzZWFyY2hPdGhlclJlcXVlc3RzKGNv
bnN0IEpTQzo6WWFycjo6UmVndWxhckV4cHJlc3Npb24mIHJlZ2V4LCBSZWZQdHI8SlNPTjo6QXJy
YXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpTZWFyY2hSZXN1bHQ+PiYgcmVzdWx0KQor
dm9pZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OnNlYXJjaE90aGVyUmVxdWVzdHMoY29uc3QgSlND
OjpZYXJyOjpSZWd1bGFyRXhwcmVzc2lvbiYgcmVnZXgsIFJlZjxKU09OOjpBcnJheU9mPFByb3Rv
Y29sOjpQYWdlOjpTZWFyY2hSZXN1bHQ+PiYgcmVzdWx0KQogewogICAgIFZlY3RvcjxOZXR3b3Jr
UmVzb3VyY2VzRGF0YTo6UmVzb3VyY2VEYXRhKj4gcmVzb3VyY2VzID0gbV9yZXNvdXJjZXNEYXRh
LT5yZXNvdXJjZXMoKTsKICAgICBmb3IgKGF1dG8qIHJlc291cmNlRGF0YSA6IHJlc291cmNlcykg
ewpAQCAtMTQ3Myw3ICsxNDQ2LDcgQEAgdm9pZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OnNlYXJj
aE90aGVyUmVxdWVzdHMoY29uc3QgSlNDOjpZYXJyOjpSZWd1bGFyRXhwcmVzc2kKICAgICB9CiB9
CiAKLXZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50OjpzZWFyY2hJblJlcXVlc3QoRXJyb3JTdHJp
bmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBx
dWVyeSwgYm9vbCBjYXNlU2Vuc2l0aXZlLCBib29sIGlzUmVnZXgsIFJlZlB0cjxKU09OOjpBcnJh
eU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkdlbmVyaWNUeXBlczo6U2VhcmNoTWF0Y2g+PiYgcmVz
dWx0cykKK3ZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50OjpzZWFyY2hJblJlcXVlc3QoUHJvdG9j
b2w6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgUHJvdG9jb2w6Ok5ldHdvcms6OlJl
cXVlc3RJZCYgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIHF1ZXJ5LCBib29sIGNhc2VTZW5zaXRp
dmUsIGJvb2wgaXNSZWdleCwgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkdlbmVyaWNU
eXBlczo6U2VhcmNoTWF0Y2g+PiYgcmVzdWx0cykKIHsKICAgICBOZXR3b3JrUmVzb3VyY2VzRGF0
YTo6UmVzb3VyY2VEYXRhIGNvbnN0KiByZXNvdXJjZURhdGEgPSBtX3Jlc291cmNlc0RhdGEtPmRh
dGEocmVxdWVzdElkKTsKICAgICBpZiAoIXJlc291cmNlRGF0YSkgewpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JOZXR3b3JrQWdlbnQuaCBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yTmV0d29ya0FnZW50LmgKaW5k
ZXggMzQ0MGU3MWE1ZWQ1ZWYzODQ2MjBhOWY2MjgwMzc1MWU5ODNkYjViMS4uNDBlMjNjNDNhNzBl
NzliMGMyYzBiMWQ2YTE1M2VkZTM5NTgwMmFhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JOZXR3b3JrQWdlbnQuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rvck5ldHdvcmtBZ2VudC5oCkBAIC02MSw4ICs2
MSw2IEBAIGNsYXNzIFdlYlNvY2tldDsKIAogc3RydWN0IFdlYlNvY2tldEZyYW1lOwogCi10eXBl
ZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQogY2xhc3MgSW5zcGVjdG9yTmV0d29ya0FnZW50IDog
cHVibGljIEluc3BlY3RvckFnZW50QmFzZSwgcHVibGljIEluc3BlY3Rvcjo6TmV0d29ya0JhY2tl
bmREaXNwYXRjaGVySGFuZGxlciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW5zcGVjdG9y
TmV0d29ya0FnZW50KTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKQEAgLTc5LDIyICs3
NywyMiBAQCBwdWJsaWM6CiAgICAgdm9pZCB3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJ
bnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24pIGZpbmFsOwogCiAgICAgLy8gTmV0d29ya0JhY2tl
bmREaXNwYXRjaGVySGFuZGxlcgotICAgIHZvaWQgZW5hYmxlKEVycm9yU3RyaW5nJikgZmluYWw7
Ci0gICAgdm9pZCBkaXNhYmxlKEVycm9yU3RyaW5nJikgZmluYWw7Ci0gICAgdm9pZCBzZXRFeHRy
YUhUVFBIZWFkZXJzKEVycm9yU3RyaW5nJiwgY29uc3QgSlNPTjo6T2JqZWN0JiBoZWFkZXJzKSBm
aW5hbDsKLSAgICB2b2lkIGdldFJlc3BvbnNlQm9keShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmlu
ZyYgcmVxdWVzdElkLCBTdHJpbmcqIGNvbnRlbnQsIGJvb2wqIGJhc2U2NEVuY29kZWQpIGZpbmFs
OwotICAgIHZvaWQgc2V0UmVzb3VyY2VDYWNoaW5nRGlzYWJsZWQoRXJyb3JTdHJpbmcmLCBib29s
IGRpc2FibGVkKSBmaW5hbDsKLSAgICB2b2lkIGxvYWRSZXNvdXJjZShjb25zdCBTdHJpbmcmIGZy
YW1lSWQsIGNvbnN0IFN0cmluZyYgdXJsLCBSZWY8TG9hZFJlc291cmNlQ2FsbGJhY2s+JiYpIGZp
bmFsOwotICAgIHZvaWQgZ2V0U2VyaWFsaXplZENlcnRpZmljYXRlKEVycm9yU3RyaW5nJiwgY29u
c3QgU3RyaW5nJiByZXF1ZXN0SWQsIFN0cmluZyogc2VyaWFsaXplZENlcnRpZmljYXRlKSBmaW5h
bDsKLSAgICB2b2lkIHJlc29sdmVXZWJTb2NrZXQoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcm
IHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nKiBvYmplY3RHcm91cCwgUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mKSBmaW5hbDsKLSAgICB2b2lkIHNldElu
dGVyY2VwdGlvbkVuYWJsZWQoRXJyb3JTdHJpbmcmLCBib29sIGVuYWJsZWQpIGZpbmFsOwotICAg
IHZvaWQgYWRkSW50ZXJjZXB0aW9uKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiB1cmwsIGNv
bnN0IFN0cmluZyYgbmV0d29ya1N0YWdlU3RyaW5nLCBjb25zdCBib29sKiBjYXNlU2Vuc2l0aXZl
LCBjb25zdCBib29sKiBpc1JlZ2V4KSBmaW5hbDsKLSAgICB2b2lkIHJlbW92ZUludGVyY2VwdGlv
bihFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIG5ldHdvcmtT
dGFnZVN0cmluZywgY29uc3QgYm9vbCogY2FzZVNlbnNpdGl2ZSwgY29uc3QgYm9vbCogaXNSZWdl
eCkgZmluYWw7Ci0gICAgdm9pZCBpbnRlcmNlcHRDb250aW51ZShFcnJvclN0cmluZyYsIGNvbnN0
IFN0cmluZyYgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG5ldHdvcmtTdGFnZVN0cmluZykgZmlu
YWw7Ci0gICAgdm9pZCBpbnRlcmNlcHRXaXRoUmVxdWVzdChFcnJvclN0cmluZyYsIGNvbnN0IFN0
cmluZyYgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcqIHVybCwgY29uc3QgU3RyaW5nKiBtZXRob2Qs
IGNvbnN0IEpTT046Ok9iamVjdCogaGVhZGVycywgY29uc3QgU3RyaW5nKiBwb3N0RGF0YSkgZmlu
YWw7Ci0gICAgdm9pZCBpbnRlcmNlcHRXaXRoUmVzcG9uc2UoRXJyb3JTdHJpbmcmLCBjb25zdCBT
dHJpbmcmIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBjb250ZW50LCBib29sIGJhc2U2NEVuY29k
ZWQsIGNvbnN0IFN0cmluZyogbWltZVR5cGUsIGNvbnN0IGludCogc3RhdHVzLCBjb25zdCBTdHJp
bmcqIHN0YXR1c1RleHQsIGNvbnN0IEpTT046Ok9iamVjdCogaGVhZGVycykgZmluYWw7Ci0gICAg
dm9pZCBpbnRlcmNlcHRSZXF1ZXN0V2l0aFJlc3BvbnNlKEVycm9yU3RyaW5nJiwgY29uc3QgU3Ry
aW5nJiByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgY29udGVudCwgYm9vbCBiYXNlNjRFbmNvZGVk
LCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBpbnQgc3RhdHVzLCBjb25zdCBTdHJpbmcmIHN0YXR1
c1RleHQsIGNvbnN0IEpTT046Ok9iamVjdCYgaGVhZGVycykgZmluYWw7Ci0gICAgdm9pZCBpbnRl
cmNlcHRSZXF1ZXN0V2l0aEVycm9yKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiByZXF1ZXN0
SWQsIGNvbnN0IFN0cmluZyYgZXJyb3JUeXBlKSBmaW5hbDsKKyAgICBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGVuYWJsZSgpIGZpbmFsOworICAgIEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZGlzYWJsZSgpIGZpbmFsOworICAgIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc2V0RXh0cmFIVFRQSGVhZGVycyhS
ZWY8SlNPTjo6T2JqZWN0PiYmKSBmaW5hbDsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJv
clN0cmluZ09yPHN0ZDo6dHVwbGU8U3RyaW5nLCBib29sIC8qIGJhc2U2NEVuY29kZWQgKi8+PiBn
ZXRSZXNwb25zZUJvZHkoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6UmVxdWVz
dElkJikgZmluYWw7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lk
PiBzZXRSZXNvdXJjZUNhY2hpbmdEaXNhYmxlZChib29sKSBmaW5hbDsKKyAgICB2b2lkIGxvYWRS
ZXNvdXJjZShjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpGcmFtZUlkJiwgY29u
c3QgU3RyaW5nJiB1cmwsIFJlZjxMb2FkUmVzb3VyY2VDYWxsYmFjaz4mJikgZmluYWw7CisgICAg
SW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxTdHJpbmc+IGdldFNlcmlhbGl6ZWRD
ZXJ0aWZpY2F0ZShjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpSZXF1ZXN0SWQm
KSBmaW5hbDsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+PiByZXNvbHZlV2ViU29ja2V0
KGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OlJlcXVlc3RJZCYsIGNvbnN0IFN0
cmluZyYgb2JqZWN0R3JvdXApIGZpbmFsOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8dm9pZD4gc2V0SW50ZXJjZXB0aW9uRW5hYmxlZChib29sKSBmaW5hbDsKKyAgICBJ
bnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGFkZEludGVyY2VwdGlvbihj
b25zdCBTdHJpbmcmIHVybCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6TmV0d29ya1N0
YWdlLCBPcHRpb25hbDxib29sPiYmIGNhc2VTZW5zaXRpdmUsIE9wdGlvbmFsPGJvb2w+JiYgaXNS
ZWdleCkgZmluYWw7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lk
PiByZW1vdmVJbnRlcmNlcHRpb24oY29uc3QgU3RyaW5nJiB1cmwsIEluc3BlY3Rvcjo6UHJvdG9j
b2w6Ok5ldHdvcms6Ok5ldHdvcmtTdGFnZSwgT3B0aW9uYWw8Ym9vbD4mJiBjYXNlU2Vuc2l0aXZl
LCBPcHRpb25hbDxib29sPiYmIGlzUmVnZXgpIGZpbmFsOworICAgIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gaW50ZXJjZXB0Q29udGludWUoY29uc3QgSW5zcGVjdG9y
OjpQcm90b2NvbDo6TmV0d29yazo6UmVxdWVzdElkJiwgSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0
d29yazo6TmV0d29ya1N0YWdlKSBmaW5hbDsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJv
clN0cmluZ09yPHZvaWQ+IGludGVyY2VwdFdpdGhSZXF1ZXN0KGNvbnN0IEluc3BlY3Rvcjo6UHJv
dG9jb2w6Ok5ldHdvcms6OlJlcXVlc3RJZCYsIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJp
bmcmIG1ldGhvZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBoZWFkZXJzLCBjb25zdCBTdHJpbmcm
IHBvc3REYXRhKSBmaW5hbDsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09y
PHZvaWQ+IGludGVyY2VwdFdpdGhSZXNwb25zZShjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpO
ZXR3b3JrOjpSZXF1ZXN0SWQmLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQsIGJvb2wgYmFzZTY0RW5j
b2RlZCwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8aW50PiYmIHN0YXR1cywgY29u
c3QgU3RyaW5nJiBzdGF0dXNUZXh0LCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIGhlYWRlcnMpIGZp
bmFsOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gaW50ZXJj
ZXB0UmVxdWVzdFdpdGhSZXNwb25zZShjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3Jr
OjpSZXF1ZXN0SWQmLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQsIGJvb2wgYmFzZTY0RW5jb2RlZCwg
Y29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgaW50IHN0YXR1cywgY29uc3QgU3RyaW5nJiBzdGF0dXNU
ZXh0LCBSZWY8SlNPTjo6T2JqZWN0PiYmIGhlYWRlcnMpIGZpbmFsOworICAgIEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gaW50ZXJjZXB0UmVxdWVzdFdpdGhFcnJvcihj
b25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpSZXF1ZXN0SWQmLCBJbnNwZWN0b3I6
OlByb3RvY29sOjpOZXR3b3JrOjpSZXNvdXJjZUVycm9yVHlwZSkgZmluYWw7CiAKICAgICAvLyBJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb24KICAgICB2b2lkIHdpbGxSZWNhbGN1bGF0ZVN0eWxlKCk7
CkBAIC0xMjcsMzIgKzEyNSwyOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBpbnRlcmNlcHRSZXNwb25z
ZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmLCBSZWZQdHI8U2hhcmVk
QnVmZmVyPik+JiYpOwogICAgIHZvaWQgaW50ZXJjZXB0UmVxdWVzdChSZXNvdXJjZUxvYWRlciYs
IEZ1bmN0aW9uPHZvaWQoY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jik+JiYpOwogCi0gICAgdm9pZCBz
ZWFyY2hPdGhlclJlcXVlc3RzKGNvbnN0IEpTQzo6WWFycjo6UmVndWxhckV4cHJlc3Npb24mLCBS
ZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpTZWFyY2hSZXN1
bHQ+PiYpOwotICAgIHZvaWQgc2VhcmNoSW5SZXF1ZXN0KEVycm9yU3RyaW5nJiwgY29uc3QgU3Ry
aW5nJiByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgcXVlcnksIGJvb2wgY2FzZVNlbnNpdGl2ZSwg
Ym9vbCBpc1JlZ2V4LCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpH
ZW5lcmljVHlwZXM6OlNlYXJjaE1hdGNoPj4mKTsKKyAgICB2b2lkIHNlYXJjaE90aGVyUmVxdWVz
dHMoY29uc3QgSlNDOjpZYXJyOjpSZWd1bGFyRXhwcmVzc2lvbiYsIFJlZjxKU09OOjpBcnJheU9m
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OlNlYXJjaFJlc3VsdD4+Jik7CisgICAgdm9pZCBz
ZWFyY2hJblJlcXVlc3QoSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBjb25zdCBJ
bnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpSZXF1ZXN0SWQmLCBjb25zdCBTdHJpbmcmIHF1
ZXJ5LCBib29sIGNhc2VTZW5zaXRpdmUsIGJvb2wgaXNSZWdleCwgUmVmUHRyPEpTT046OkFycmF5
T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6R2VuZXJpY1R5cGVzOjpTZWFyY2hNYXRjaD4+Jik7CiAK
IHByb3RlY3RlZDoKICAgICBJbnNwZWN0b3JOZXR3b3JrQWdlbnQoV2ViQWdlbnRDb250ZXh0Jik7
CiAKLSAgICB2aXJ0dWFsIFN0cmluZyBsb2FkZXJJZGVudGlmaWVyKERvY3VtZW50TG9hZGVyKikg
PSAwOwotICAgIHZpcnR1YWwgU3RyaW5nIGZyYW1lSWRlbnRpZmllcihEb2N1bWVudExvYWRlciop
ID0gMDsKKyAgICB2aXJ0dWFsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OkxvYWRlcklk
IGxvYWRlcklkZW50aWZpZXIoRG9jdW1lbnRMb2FkZXIqKSA9IDA7CisgICAgdmlydHVhbCBJbnNw
ZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpGcmFtZUlkIGZyYW1lSWRlbnRpZmllcihEb2N1bWVu
dExvYWRlciopID0gMDsKICAgICB2aXJ0dWFsIFZlY3RvcjxXZWJTb2NrZXQqPiBhY3RpdmVXZWJT
b2NrZXRzKGNvbnN0IExvY2tIb2xkZXImKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldFJlc291
cmNlQ2FjaGluZ0Rpc2FibGVkKGJvb2wpID0gMDsKLSAgICB2aXJ0dWFsIFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJp
bmcmIGZyYW1lSWQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0UmVzb3VyY2VDYWNoaW5nRGlz
YWJsZWRJbnRlcmFsKGJvb2wpID0gMDsKKyAgICB2aXJ0dWFsIFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJp
bmcmLCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpGcmFtZUlkJikgPSAwOwog
ICAgIHZpcnR1YWwgYm9vbCBzaG91bGRGb3JjZUJ1ZmZlcmluZ05ldHdvcmtSZXNvdXJjZURhdGEo
KSBjb25zdCA9IDA7CiAKIHByaXZhdGU6Ci0gICAgdm9pZCBlbmFibGUoKTsKLQogICAgIHZvaWQg
d2lsbFNlbmRSZXF1ZXN0KHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgRG9jdW1lbnRMb2FkZXIq
LCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZWRpcmVjdFJlc3Bv
bnNlLCBJbnNwZWN0b3JQYWdlQWdlbnQ6OlJlc291cmNlVHlwZSk7CiAKLSAgICB1c2luZyBOZXR3
b3JrU3RhZ2UgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpOZXR3b3JrU3RhZ2U7Ci0g
ICAgYm9vbCBzaG91bGRJbnRlcmNlcHQoVVJMLCBOZXR3b3JrU3RhZ2UpOworICAgIGJvb2wgc2hv
dWxkSW50ZXJjZXB0KFVSTCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6TmV0d29ya1N0
YWdlKTsKICAgICB2b2lkIGNvbnRpbnVlUGVuZGluZ1JlcXVlc3RzKCk7CiAgICAgdm9pZCBjb250
aW51ZVBlbmRpbmdSZXNwb25zZXMoKTsKIAotICAgIFdlYlNvY2tldCogd2ViU29ja2V0Rm9yUmVx
dWVzdElkKGNvbnN0IFN0cmluZyYgcmVxdWVzdElkKTsKKyAgICBXZWJTb2NrZXQqIHdlYlNvY2tl
dEZvclJlcXVlc3RJZChjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpSZXF1ZXN0
SWQmKTsKIAotICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpJbml0aWF0
b3I+IGJ1aWxkSW5pdGlhdG9yT2JqZWN0KERvY3VtZW50KiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0
KiA9IG51bGxwdHIpOworICAgIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpJbml0
aWF0b3I+IGJ1aWxkSW5pdGlhdG9yT2JqZWN0KERvY3VtZW50KiwgY29uc3QgUmVzb3VyY2VSZXF1
ZXN0KiA9IG51bGxwdHIpOwogICAgIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpS
ZXNvdXJjZVRpbWluZz4gYnVpbGRPYmplY3RGb3JUaW1pbmcoY29uc3QgTmV0d29ya0xvYWRNZXRy
aWNzKiwgUmVzb3VyY2VMb2FkZXImKTsKICAgICBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0
d29yazo6TWV0cmljcz4gYnVpbGRPYmplY3RGb3JNZXRyaWNzKGNvbnN0IE5ldHdvcmtMb2FkTWV0
cmljcyYpOwogICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpSZXNwb25z
ZT4gYnVpbGRPYmplY3RGb3JSZXNvdXJjZVJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2Um
LCBSZXNvdXJjZUxvYWRlciopOwpAQCAtMjM2LDcgKzIzMSw3IEBAIHByaXZhdGU6CiAgICAgICAg
IFN0cmluZyB1cmw7CiAgICAgICAgIGJvb2wgY2FzZVNlbnNpdGl2ZSB7IHRydWUgfTsKICAgICAg
ICAgYm9vbCBpc1JlZ2V4IHsgZmFsc2UgfTsKLSAgICAgICAgTmV0d29ya1N0YWdlIG5ldHdvcmtT
dGFnZSB7IE5ldHdvcmtTdGFnZTo6UmVzcG9uc2UgfTsKKyAgICAgICAgSW5zcGVjdG9yOjpQcm90
b2NvbDo6TmV0d29yazo6TmV0d29ya1N0YWdlIG5ldHdvcmtTdGFnZSB7IEluc3BlY3Rvcjo6UHJv
dG9jb2w6Ok5ldHdvcms6Ok5ldHdvcmtTdGFnZTo6UmVzcG9uc2UgfTsKIAogICAgICAgICBpbmxp
bmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEludGVyY2VwdCYgb3RoZXIpIGNvbnN0CiAgICAgICAg
IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9y
UGFnZUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9y
UGFnZUFnZW50LmNwcAppbmRleCA1MzllODEwNWI2NmU3YjJhNmEwNTU3MWExZTFjOGNkNmJkZjI3
YzkwLi44YmY3YWUxZTBkMDVhMjY0OWMxM2FiYjBkMTRkMjA4NDM3NzU4MDk5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JQYWdlQWdlbnQu
Y3BwCkBAIC0xNTEsNyArMTUxLDcgQEAgVmVjdG9yPENhY2hlZFJlc291cmNlKj4gSW5zcGVjdG9y
UGFnZUFnZW50OjpjYWNoZWRSZXNvdXJjZXNGb3JGcmFtZShGcmFtZSogZnJhbWUKICAgICByZXR1
cm4gcmVzdWx0OwogfQogCi12b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6cmVzb3VyY2VDb250ZW50
KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgRnJhbWUqIGZyYW1lLCBjb25zdCBVUkwmIHVybCwg
U3RyaW5nKiByZXN1bHQsIGJvb2wqIGJhc2U2NEVuY29kZWQpCit2b2lkIEluc3BlY3RvclBhZ2VB
Z2VudDo6cmVzb3VyY2VDb250ZW50KFByb3RvY29sOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcs
IEZyYW1lKiBmcmFtZSwgY29uc3QgVVJMJiB1cmwsIFN0cmluZyogcmVzdWx0LCBib29sKiBiYXNl
NjRFbmNvZGVkKQogewogICAgIERvY3VtZW50TG9hZGVyKiBsb2FkZXIgPSBhc3NlcnREb2N1bWVu
dExvYWRlcihlcnJvclN0cmluZywgZnJhbWUpOwogICAgIGlmICghbG9hZGVyKQpAQCAtMjEzLDM3
ICsyMTMsMzcgQEAgQ2FjaGVkUmVzb3VyY2UqIEluc3BlY3RvclBhZ2VBZ2VudDo6Y2FjaGVkUmVz
b3VyY2UoRnJhbWUqIGZyYW1lLCBjb25zdCBVUkwmIHVybCkKICAgICByZXR1cm4gY2FjaGVkUmVz
b3VyY2U7CiB9CiAKLUluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OlJlc291cmNlVHlwZSBJbnNw
ZWN0b3JQYWdlQWdlbnQ6OnJlc291cmNlVHlwZUpTT04oSW5zcGVjdG9yUGFnZUFnZW50OjpSZXNv
dXJjZVR5cGUgcmVzb3VyY2VUeXBlKQorUHJvdG9jb2w6OlBhZ2U6OlJlc291cmNlVHlwZSBJbnNw
ZWN0b3JQYWdlQWdlbnQ6OnJlc291cmNlVHlwZUpTT04oSW5zcGVjdG9yUGFnZUFnZW50OjpSZXNv
dXJjZVR5cGUgcmVzb3VyY2VUeXBlKQogewogICAgIHN3aXRjaCAocmVzb3VyY2VUeXBlKSB7CiAg
ICAgY2FzZSBEb2N1bWVudFJlc291cmNlOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90
b2NvbDo6UGFnZTo6UmVzb3VyY2VUeXBlOjpEb2N1bWVudDsKKyAgICAgICAgcmV0dXJuIFByb3Rv
Y29sOjpQYWdlOjpSZXNvdXJjZVR5cGU6OkRvY3VtZW50OwogICAgIGNhc2UgSW1hZ2VSZXNvdXJj
ZToKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OlJlc291cmNlVHlw
ZTo6SW1hZ2U7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6UGFnZTo6UmVzb3VyY2VUeXBlOjpJ
bWFnZTsKICAgICBjYXNlIEZvbnRSZXNvdXJjZToKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlBhZ2U6OlJlc291cmNlVHlwZTo6Rm9udDsKKyAgICAgICAgcmV0dXJuIFByb3Rv
Y29sOjpQYWdlOjpSZXNvdXJjZVR5cGU6OkZvbnQ7CiAgICAgY2FzZSBTdHlsZVNoZWV0UmVzb3Vy
Y2U6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpSZXNvdXJjZVR5
cGU6OlN0eWxlU2hlZXQ7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6UGFnZTo6UmVzb3VyY2VU
eXBlOjpTdHlsZVNoZWV0OwogICAgIGNhc2UgU2NyaXB0UmVzb3VyY2U6Ci0gICAgICAgIHJldHVy
biBJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpSZXNvdXJjZVR5cGU6OlNjcmlwdDsKKyAgICAg
ICAgcmV0dXJuIFByb3RvY29sOjpQYWdlOjpSZXNvdXJjZVR5cGU6OlNjcmlwdDsKICAgICBjYXNl
IFhIUlJlc291cmNlOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6
UmVzb3VyY2VUeXBlOjpYSFI7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6UGFnZTo6UmVzb3Vy
Y2VUeXBlOjpYSFI7CiAgICAgY2FzZSBGZXRjaFJlc291cmNlOgotICAgICAgICByZXR1cm4gSW5z
cGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6UmVzb3VyY2VUeXBlOjpGZXRjaDsKKyAgICAgICAgcmV0
dXJuIFByb3RvY29sOjpQYWdlOjpSZXNvdXJjZVR5cGU6OkZldGNoOwogICAgIGNhc2UgUGluZ1Jl
c291cmNlOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6UmVzb3Vy
Y2VUeXBlOjpQaW5nOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OlBhZ2U6OlJlc291cmNlVHlw
ZTo6UGluZzsKICAgICBjYXNlIEJlYWNvblJlc291cmNlOgotICAgICAgICByZXR1cm4gSW5zcGVj
dG9yOjpQcm90b2NvbDo6UGFnZTo6UmVzb3VyY2VUeXBlOjpCZWFjb247CisgICAgICAgIHJldHVy
biBQcm90b2NvbDo6UGFnZTo6UmVzb3VyY2VUeXBlOjpCZWFjb247CiAgICAgY2FzZSBXZWJTb2Nr
ZXRSZXNvdXJjZToKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OlJl
c291cmNlVHlwZTo6V2ViU29ja2V0OworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OlBhZ2U6OlJl
c291cmNlVHlwZTo6V2ViU29ja2V0OwogICAgIGNhc2UgT3RoZXJSZXNvdXJjZToKLSAgICAgICAg
cmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OlJlc291cmNlVHlwZTo6T3RoZXI7Cisg
ICAgICAgIHJldHVybiBQcm90b2NvbDo6UGFnZTo6UmVzb3VyY2VUeXBlOjpPdGhlcjsKICNpZiBF
TkFCTEUoQVBQTElDQVRJT05fTUFOSUZFU1QpCiAgICAgY2FzZSBBcHBsaWNhdGlvbk1hbmlmZXN0
UmVzb3VyY2U6CiAgICAgICAgIGJyZWFrOwogI2VuZGlmCiAgICAgfQotICAgIHJldHVybiBJbnNw
ZWN0b3I6OlByb3RvY29sOjpQYWdlOjpSZXNvdXJjZVR5cGU6Ok90aGVyOworICAgIHJldHVybiBQ
cm90b2NvbDo6UGFnZTo6UmVzb3VyY2VUeXBlOjpPdGhlcjsKIH0KIAogSW5zcGVjdG9yUGFnZUFn
ZW50OjpSZXNvdXJjZVR5cGUgSW5zcGVjdG9yUGFnZUFnZW50OjppbnNwZWN0b3JSZXNvdXJjZVR5
cGUoQ2FjaGVkUmVzb3VyY2U6OlR5cGUgdHlwZSkKQEAgLTI5Nyw3ICsyOTcsNyBAQCBJbnNwZWN0
b3JQYWdlQWdlbnQ6OlJlc291cmNlVHlwZSBJbnNwZWN0b3JQYWdlQWdlbnQ6Omluc3BlY3RvclJl
c291cmNlVHlwZShjb25zdAogICAgIHJldHVybiBpbnNwZWN0b3JSZXNvdXJjZVR5cGUoY2FjaGVk
UmVzb3VyY2UudHlwZSgpKTsKIH0KIAotSW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6UmVzb3Vy
Y2VUeXBlIEluc3BlY3RvclBhZ2VBZ2VudDo6Y2FjaGVkUmVzb3VyY2VUeXBlSlNPTihjb25zdCBD
YWNoZWRSZXNvdXJjZSYgY2FjaGVkUmVzb3VyY2UpCitQcm90b2NvbDo6UGFnZTo6UmVzb3VyY2VU
eXBlIEluc3BlY3RvclBhZ2VBZ2VudDo6Y2FjaGVkUmVzb3VyY2VUeXBlSlNPTihjb25zdCBDYWNo
ZWRSZXNvdXJjZSYgY2FjaGVkUmVzb3VyY2UpCiB7CiAgICAgcmV0dXJuIHJlc291cmNlVHlwZUpT
T04oaW5zcGVjdG9yUmVzb3VyY2VUeXBlKGNhY2hlZFJlc291cmNlKSk7CiB9CkBAIC0zMTEsNyAr
MzExLDcgQEAgRnJhbWUqIEluc3BlY3RvclBhZ2VBZ2VudDo6ZmluZEZyYW1lV2l0aFNlY3VyaXR5
T3JpZ2luKFBhZ2UmIHBhZ2UsIGNvbnN0IFN0cmluZyYKICAgICByZXR1cm4gbnVsbHB0cjsKIH0K
IAotRG9jdW1lbnRMb2FkZXIqIEluc3BlY3RvclBhZ2VBZ2VudDo6YXNzZXJ0RG9jdW1lbnRMb2Fk
ZXIoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBGcmFtZSogZnJhbWUpCitEb2N1bWVudExvYWRl
ciogSW5zcGVjdG9yUGFnZUFnZW50Ojphc3NlcnREb2N1bWVudExvYWRlcihQcm90b2NvbDo6RXJy
b3JTdHJpbmcmIGVycm9yU3RyaW5nLCBGcmFtZSogZnJhbWUpCiB7CiAgICAgRnJhbWVMb2FkZXIm
IGZyYW1lTG9hZGVyID0gZnJhbWUtPmxvYWRlcigpOwogICAgIERvY3VtZW50TG9hZGVyKiBkb2N1
bWVudExvYWRlciA9IGZyYW1lTG9hZGVyLmRvY3VtZW50TG9hZGVyKCk7CkBAIC0zMzgsMTYgKzMz
OCwxMyBAQCB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6ZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNr
ZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRSb3V0ZXIqLAogCiB2b2lkIEluc3BlY3RvclBhZ2VBZ2Vu
dDo6d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVh
c29uKQogewotICAgIEVycm9yU3RyaW5nIHVudXNlZDsKLSAgICBkaXNhYmxlKHVudXNlZCk7Cisg
ICAgZGlzYWJsZSgpOwogfQogCi12b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6ZW5hYmxlKEVycm9y
U3RyaW5nJiBlcnJvclN0cmluZykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3Bl
Y3RvclBhZ2VBZ2VudDo6ZW5hYmxlKCkKIHsKLSAgICBpZiAobV9pbnN0cnVtZW50aW5nQWdlbnRz
LmVuYWJsZWRQYWdlQWdlbnQoKSA9PSB0aGlzKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIlBh
Z2UgZG9tYWluIGFscmVhZHkgZW5hYmxlZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAg
ICBpZiAobV9pbnN0cnVtZW50aW5nQWdlbnRzLmVuYWJsZWRQYWdlQWdlbnQoKSA9PSB0aGlzKQor
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIlBhZ2UgZG9tYWluIGFscmVhZHkgZW5hYmxl
ZCJfcyk7CiAKICAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMuc2V0RW5hYmxlZFBhZ2VBZ2VudCh0
aGlzKTsKIApAQCAtMzU4LDIxICszNTUsMjIgQEAgdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmVu
YWJsZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCiAjaWYgRU5BQkxFKERBUktfTU9ERV9DU1Mp
IHx8IEhBVkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCiAgICAgZGVmYXVsdEFwcGVhcmFuY2VEaWRD
aGFuZ2UobV9pbnNwZWN0ZWRQYWdlLmRlZmF1bHRVc2VEYXJrQXBwZWFyYW5jZSgpKTsKICNlbmRp
ZgorCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmRpc2Fi
bGUoRXJyb3JTdHJpbmcmKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9y
UGFnZUFnZW50OjpkaXNhYmxlKCkKIHsKICAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMuc2V0RW5h
YmxlZFBhZ2VBZ2VudChudWxscHRyKTsKIAotICAgIEVycm9yU3RyaW5nIHVudXNlZDsKLSAgICBz
ZXRTaG93UGFpbnRSZWN0cyh1bnVzZWQsIGZhbHNlKTsKKyAgICBzZXRTaG93UGFpbnRSZWN0cyhm
YWxzZSk7CiAjaWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgc2V0U2hvd1J1bGVycyh1bnVz
ZWQsIGZhbHNlKTsKKyAgICBzZXRTaG93UnVsZXJzKGZhbHNlKTsKICNlbmRpZgotICAgIG92ZXJy
aWRlVXNlckFnZW50KHVudXNlZCwgbnVsbHB0cik7Ci0gICAgc2V0RW11bGF0ZWRNZWRpYSh1bnVz
ZWQsIGVtcHR5U3RyaW5nKCkpOworICAgIG92ZXJyaWRlVXNlckFnZW50KG51bGxTdHJpbmcoKSk7
CisgICAgc2V0RW11bGF0ZWRNZWRpYShlbXB0eVN0cmluZygpKTsKICNpZiBFTkFCTEUoREFSS19N
T0RFX0NTUykgfHwgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKLSAgICBzZXRGb3JjZWRBcHBl
YXJhbmNlKHVudXNlZCwgZW1wdHlTdHJpbmcoKSk7CisgICAgc2V0Rm9yY2VkQXBwZWFyYW5jZShX
VEY6Om51bGxvcHQpOwogI2VuZGlmCiAKICAgICBhdXRvJiBpbnNwZWN0ZWRQYWdlU2V0dGluZ3Mg
PSBtX2luc3BlY3RlZFBhZ2Uuc2V0dGluZ3MoKTsKQEAgLTM5MSw2ICszODksOCBAQCB2b2lkIElu
c3BlY3RvclBhZ2VBZ2VudDo6ZGlzYWJsZShFcnJvclN0cmluZyYpCiAgICAgbV9jbGllbnQtPnNl
dERldmVsb3BlclByZWZlcmVuY2VPdmVycmlkZShJbnNwZWN0b3JDbGllbnQ6OkRldmVsb3BlclBy
ZWZlcmVuY2U6OkFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZUVuYWJsZWQsIFdURjo6bnVsbG9w
dCk7CiAgICAgbV9jbGllbnQtPnNldERldmVsb3BlclByZWZlcmVuY2VPdmVycmlkZShJbnNwZWN0
b3JDbGllbnQ6OkRldmVsb3BlclByZWZlcmVuY2U6OklUUERlYnVnTW9kZUVuYWJsZWQsIFdURjo6
bnVsbG9wdCk7CiAgICAgbV9jbGllbnQtPnNldERldmVsb3BlclByZWZlcmVuY2VPdmVycmlkZShJ
bnNwZWN0b3JDbGllbnQ6OkRldmVsb3BlclByZWZlcmVuY2U6Ok1vY2tDYXB0dXJlRGV2aWNlc0Vu
YWJsZWQsIFdURjo6bnVsbG9wdCk7CisKKyAgICByZXR1cm4geyB9OwogfQogCiBkb3VibGUgSW5z
cGVjdG9yUGFnZUFnZW50Ojp0aW1lc3RhbXAoKQpAQCAtMzk4LDIxICszOTgsMTkgQEAgZG91Ymxl
IEluc3BlY3RvclBhZ2VBZ2VudDo6dGltZXN0YW1wKCkKICAgICByZXR1cm4gbV9lbnZpcm9ubWVu
dC5leGVjdXRpb25TdG9wd2F0Y2goKS5lbGFwc2VkVGltZSgpLnNlY29uZHMoKTsKIH0KIAotdm9p
ZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OnJlbG9hZChFcnJvclN0cmluZyYsIGNvbnN0IGJvb2wqIG9w
dGlvbmFsUmVsb2FkRnJvbU9yaWdpbiwgY29uc3QgYm9vbCogb3B0aW9uYWxSZXZhbGlkYXRlQWxs
UmVzb3VyY2VzKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yUGFnZUFn
ZW50OjpyZWxvYWQoT3B0aW9uYWw8Ym9vbD4mJiBpZ25vcmVDYWNoZSwgT3B0aW9uYWw8Ym9vbD4m
JiByZXZhbGlkYXRlQWxsUmVzb3VyY2VzKQogewotICAgIGJvb2wgcmVsb2FkRnJvbU9yaWdpbiA9
IG9wdGlvbmFsUmVsb2FkRnJvbU9yaWdpbiAmJiAqb3B0aW9uYWxSZWxvYWRGcm9tT3JpZ2luOwot
ICAgIGJvb2wgcmV2YWxpZGF0ZUFsbFJlc291cmNlcyA9IG9wdGlvbmFsUmV2YWxpZGF0ZUFsbFJl
c291cmNlcyAmJiAqb3B0aW9uYWxSZXZhbGlkYXRlQWxsUmVzb3VyY2VzOwotCiAgICAgT3B0aW9u
U2V0PFJlbG9hZE9wdGlvbj4gcmVsb2FkT3B0aW9uczsKLSAgICBpZiAocmVsb2FkRnJvbU9yaWdp
bikKKyAgICBpZiAoaWdub3JlQ2FjaGUgJiYgKmlnbm9yZUNhY2hlKQogICAgICAgICByZWxvYWRP
cHRpb25zLmFkZChSZWxvYWRPcHRpb246OkZyb21PcmlnaW4pOwotICAgIGlmICghcmV2YWxpZGF0
ZUFsbFJlc291cmNlcykKKyAgICBpZiAoIXJldmFsaWRhdGVBbGxSZXNvdXJjZXMgfHwgISpyZXZh
bGlkYXRlQWxsUmVzb3VyY2VzKQogICAgICAgICByZWxvYWRPcHRpb25zLmFkZChSZWxvYWRPcHRp
b246OkV4cGlyZWRPbmx5KTsKLQogICAgIG1faW5zcGVjdGVkUGFnZS5tYWluRnJhbWUoKS5sb2Fk
ZXIoKS5yZWxvYWQocmVsb2FkT3B0aW9ucyk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lk
IEluc3BlY3RvclBhZ2VBZ2VudDo6bmF2aWdhdGUoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcm
IHVybCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvclBhZ2VBZ2VudDo6
bmF2aWdhdGUoY29uc3QgU3RyaW5nJiB1cmwpCiB7CiAgICAgVXNlckdlc3R1cmVJbmRpY2F0b3Ig
aW5kaWNhdG9yIHsgUHJvY2Vzc2luZ1VzZXJHZXN0dXJlIH07CiAgICAgRnJhbWUmIGZyYW1lID0g
bV9pbnNwZWN0ZWRQYWdlLm1haW5GcmFtZSgpOwpAQCAtNDIxLDExMSArNDE5LDk3IEBAIHZvaWQg
SW5zcGVjdG9yUGFnZUFnZW50OjpuYXZpZ2F0ZShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYg
dXJsKQogICAgIEZyYW1lTG9hZFJlcXVlc3QgZnJhbWVMb2FkUmVxdWVzdCB7ICpmcmFtZS5kb2N1
bWVudCgpLCBmcmFtZS5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLCBXVEZNb3ZlKHJlc291
cmNlUmVxdWVzdCksICJfc2VsZiJfcywgSW5pdGlhdGVkQnlNYWluRnJhbWU6OlVua25vd24gfTsK
ICAgICBmcmFtZUxvYWRSZXF1ZXN0LmRpc2FibGVOYXZpZ2F0aW9uVG9JbnZhbGlkVVJMKCk7CiAg
ICAgZnJhbWUubG9hZGVyKCkuY2hhbmdlTG9jYXRpb24oV1RGTW92ZShmcmFtZUxvYWRSZXF1ZXN0
KSk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6b3Zl
cnJpZGVVc2VyQWdlbnQoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcqIHZhbHVlKQorUHJvdG9j
b2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yUGFnZUFnZW50OjpvdmVycmlkZVVzZXJB
Z2VudChjb25zdCBTdHJpbmcmIHZhbHVlKQogewotICAgIG1fdXNlckFnZW50T3ZlcnJpZGUgPSB2
YWx1ZSA/ICp2YWx1ZSA6IFN0cmluZygpOworICAgIG1fdXNlckFnZW50T3ZlcnJpZGUgPSB2YWx1
ZTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXN0YXRpYyBpbmxpbmUgT3B0aW9uYWw8Ym9vbD4g
YXNPcHRpb25hbEJvb2woY29uc3QgYm9vbCogdmFsdWUpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdP
cjx2b2lkPiBJbnNwZWN0b3JQYWdlQWdlbnQ6Om92ZXJyaWRlU2V0dGluZyhQcm90b2NvbDo6UGFn
ZTo6U2V0dGluZyBzZXR0aW5nLCBPcHRpb25hbDxib29sPiYmIHZhbHVlKQogewotICAgIGlmICgh
dmFsdWUpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgcmV0dXJuICp2YWx1ZTsK
LX0KLQotdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6Om92ZXJyaWRlU2V0dGluZyhFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgc2V0dGluZ1N0cmluZywgY29uc3QgYm9vbCog
dmFsdWUpCi17Ci0gICAgaWYgKHNldHRpbmdTdHJpbmcuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGVy
cm9yU3RyaW5nID0gInNldHRpbmdTdHJpbmcgaXMgZW1wdHkiX3M7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBhdXRvIHNldHRpbmcgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpJbnNwZWN0
b3JIZWxwZXJzOjpwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6
UGFnZTo6U2V0dGluZz4oc2V0dGluZ1N0cmluZyk7Ci0gICAgaWYgKCFzZXR0aW5nKSB7Ci0gICAg
ICAgIGVycm9yU3RyaW5nID0gbWFrZVN0cmluZygiVW5rbm93biBzZXR0aW5nU3RyaW5nOiAiX3Ms
IHNldHRpbmdTdHJpbmcpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgYXV0byYgaW5z
cGVjdGVkUGFnZVNldHRpbmdzID0gbV9pbnNwZWN0ZWRQYWdlLnNldHRpbmdzKCk7CiAKLSAgICBh
dXRvIG92ZXJyaWRlVmFsdWUgPSBhc09wdGlvbmFsQm9vbCh2YWx1ZSk7Ci0gICAgc3dpdGNoIChz
ZXR0aW5nLnZhbHVlKCkpIHsKLSAgICBjYXNlIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OlNl
dHRpbmc6OkFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZUVuYWJsZWQ6Ci0gICAgICAgIG1fY2xp
ZW50LT5zZXREZXZlbG9wZXJQcmVmZXJlbmNlT3ZlcnJpZGUoSW5zcGVjdG9yQ2xpZW50OjpEZXZl
bG9wZXJQcmVmZXJlbmNlOjpBZENsaWNrQXR0cmlidXRpb25EZWJ1Z01vZGVFbmFibGVkLCBvdmVy
cmlkZVZhbHVlKTsKLSAgICAgICAgcmV0dXJuOworICAgIHN3aXRjaCAoc2V0dGluZykgeworICAg
IGNhc2UgUHJvdG9jb2w6OlBhZ2U6OlNldHRpbmc6OkFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9k
ZUVuYWJsZWQ6CisgICAgICAgIG1fY2xpZW50LT5zZXREZXZlbG9wZXJQcmVmZXJlbmNlT3ZlcnJp
ZGUoSW5zcGVjdG9yQ2xpZW50OjpEZXZlbG9wZXJQcmVmZXJlbmNlOjpBZENsaWNrQXR0cmlidXRp
b25EZWJ1Z01vZGVFbmFibGVkLCB2YWx1ZSk7CisgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBj
YXNlIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OlNldHRpbmc6OkF1dGhvckFuZFVzZXJTdHls
ZXNFbmFibGVkOgotICAgICAgICBpbnNwZWN0ZWRQYWdlU2V0dGluZ3Muc2V0QXV0aG9yQW5kVXNl
clN0eWxlc0VuYWJsZWRJbnNwZWN0b3JPdmVycmlkZShvdmVycmlkZVZhbHVlKTsKLSAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgUHJvdG9jb2w6OlBhZ2U6OlNldHRpbmc6OkF1dGhvckFuZFVzZXJT
dHlsZXNFbmFibGVkOgorICAgICAgICBpbnNwZWN0ZWRQYWdlU2V0dGluZ3Muc2V0QXV0aG9yQW5k
VXNlclN0eWxlc0VuYWJsZWRJbnNwZWN0b3JPdmVycmlkZSh2YWx1ZSk7CisgICAgICAgIHJldHVy
biB7IH07CiAKLSAgICBjYXNlIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OlNldHRpbmc6OklD
RUNhbmRpZGF0ZUZpbHRlcmluZ0VuYWJsZWQ6Ci0gICAgICAgIGluc3BlY3RlZFBhZ2VTZXR0aW5n
cy5zZXRJQ0VDYW5kaWRhdGVGaWx0ZXJpbmdFbmFibGVkSW5zcGVjdG9yT3ZlcnJpZGUob3ZlcnJp
ZGVWYWx1ZSk7Ci0gICAgICAgIHJldHVybjsKKyAgICBjYXNlIFByb3RvY29sOjpQYWdlOjpTZXR0
aW5nOjpJQ0VDYW5kaWRhdGVGaWx0ZXJpbmdFbmFibGVkOgorICAgICAgICBpbnNwZWN0ZWRQYWdl
U2V0dGluZ3Muc2V0SUNFQ2FuZGlkYXRlRmlsdGVyaW5nRW5hYmxlZEluc3BlY3Rvck92ZXJyaWRl
KHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90
b2NvbDo6UGFnZTo6U2V0dGluZzo6SVRQRGVidWdNb2RlRW5hYmxlZDoKLSAgICAgICAgbV9jbGll
bnQtPnNldERldmVsb3BlclByZWZlcmVuY2VPdmVycmlkZShJbnNwZWN0b3JDbGllbnQ6OkRldmVs
b3BlclByZWZlcmVuY2U6OklUUERlYnVnTW9kZUVuYWJsZWQsIG92ZXJyaWRlVmFsdWUpOwotICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBQcm90b2NvbDo6UGFnZTo6U2V0dGluZzo6SVRQRGVidWdN
b2RlRW5hYmxlZDoKKyAgICAgICAgbV9jbGllbnQtPnNldERldmVsb3BlclByZWZlcmVuY2VPdmVy
cmlkZShJbnNwZWN0b3JDbGllbnQ6OkRldmVsb3BlclByZWZlcmVuY2U6OklUUERlYnVnTW9kZUVu
YWJsZWQsIHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGNhc2UgSW5zcGVjdG9y
OjpQcm90b2NvbDo6UGFnZTo6U2V0dGluZzo6SW1hZ2VzRW5hYmxlZDoKLSAgICAgICAgaW5zcGVj
dGVkUGFnZVNldHRpbmdzLnNldEltYWdlc0VuYWJsZWRJbnNwZWN0b3JPdmVycmlkZShvdmVycmlk
ZVZhbHVlKTsKLSAgICAgICAgcmV0dXJuOworICAgIGNhc2UgUHJvdG9jb2w6OlBhZ2U6OlNldHRp
bmc6OkltYWdlc0VuYWJsZWQ6CisgICAgICAgIGluc3BlY3RlZFBhZ2VTZXR0aW5ncy5zZXRJbWFn
ZXNFbmFibGVkSW5zcGVjdG9yT3ZlcnJpZGUodmFsdWUpOworICAgICAgICByZXR1cm4geyB9Owog
Ci0gICAgY2FzZSBJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpTZXR0aW5nOjpNZWRpYUNhcHR1
cmVSZXF1aXJlc1NlY3VyZUNvbm5lY3Rpb246Ci0gICAgICAgIGluc3BlY3RlZFBhZ2VTZXR0aW5n
cy5zZXRNZWRpYUNhcHR1cmVSZXF1aXJlc1NlY3VyZUNvbm5lY3Rpb25JbnNwZWN0b3JPdmVycmlk
ZShvdmVycmlkZVZhbHVlKTsKLSAgICAgICAgcmV0dXJuOworICAgIGNhc2UgUHJvdG9jb2w6OlBh
Z2U6OlNldHRpbmc6Ok1lZGlhQ2FwdHVyZVJlcXVpcmVzU2VjdXJlQ29ubmVjdGlvbjoKKyAgICAg
ICAgaW5zcGVjdGVkUGFnZVNldHRpbmdzLnNldE1lZGlhQ2FwdHVyZVJlcXVpcmVzU2VjdXJlQ29u
bmVjdGlvbkluc3BlY3Rvck92ZXJyaWRlKHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAot
ICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6U2V0dGluZzo6TW9ja0NhcHR1cmVE
ZXZpY2VzRW5hYmxlZDoKLSAgICAgICAgaW5zcGVjdGVkUGFnZVNldHRpbmdzLnNldE1vY2tDYXB0
dXJlRGV2aWNlc0VuYWJsZWRJbnNwZWN0b3JPdmVycmlkZShvdmVycmlkZVZhbHVlKTsKLSAgICAg
ICAgbV9jbGllbnQtPnNldERldmVsb3BlclByZWZlcmVuY2VPdmVycmlkZShJbnNwZWN0b3JDbGll
bnQ6OkRldmVsb3BlclByZWZlcmVuY2U6Ok1vY2tDYXB0dXJlRGV2aWNlc0VuYWJsZWQsIG92ZXJy
aWRlVmFsdWUpOwotICAgICAgICByZXR1cm47CisgICAgY2FzZSBQcm90b2NvbDo6UGFnZTo6U2V0
dGluZzo6TW9ja0NhcHR1cmVEZXZpY2VzRW5hYmxlZDoKKyAgICAgICAgaW5zcGVjdGVkUGFnZVNl
dHRpbmdzLnNldE1vY2tDYXB0dXJlRGV2aWNlc0VuYWJsZWRJbnNwZWN0b3JPdmVycmlkZSh2YWx1
ZSk7CisgICAgICAgIG1fY2xpZW50LT5zZXREZXZlbG9wZXJQcmVmZXJlbmNlT3ZlcnJpZGUoSW5z
cGVjdG9yQ2xpZW50OjpEZXZlbG9wZXJQcmVmZXJlbmNlOjpNb2NrQ2FwdHVyZURldmljZXNFbmFi
bGVkLCB2YWx1ZSk7CisgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBjYXNlIEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlBhZ2U6OlNldHRpbmc6Ok5lZWRzU2l0ZVNwZWNpZmljUXVpcmtzOgotICAgICAg
ICBpbnNwZWN0ZWRQYWdlU2V0dGluZ3Muc2V0TmVlZHNTaXRlU3BlY2lmaWNRdWlya3NJbnNwZWN0
b3JPdmVycmlkZShvdmVycmlkZVZhbHVlKTsKLSAgICAgICAgcmV0dXJuOworICAgIGNhc2UgUHJv
dG9jb2w6OlBhZ2U6OlNldHRpbmc6Ok5lZWRzU2l0ZVNwZWNpZmljUXVpcmtzOgorICAgICAgICBp
bnNwZWN0ZWRQYWdlU2V0dGluZ3Muc2V0TmVlZHNTaXRlU3BlY2lmaWNRdWlya3NJbnNwZWN0b3JP
dmVycmlkZSh2YWx1ZSk7CisgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBjYXNlIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlBhZ2U6OlNldHRpbmc6OlNjcmlwdEVuYWJsZWQ6Ci0gICAgICAgIGluc3Bl
Y3RlZFBhZ2VTZXR0aW5ncy5zZXRTY3JpcHRFbmFibGVkSW5zcGVjdG9yT3ZlcnJpZGUob3ZlcnJp
ZGVWYWx1ZSk7Ci0gICAgICAgIHJldHVybjsKKyAgICBjYXNlIFByb3RvY29sOjpQYWdlOjpTZXR0
aW5nOjpTY3JpcHRFbmFibGVkOgorICAgICAgICBpbnNwZWN0ZWRQYWdlU2V0dGluZ3Muc2V0U2Ny
aXB0RW5hYmxlZEluc3BlY3Rvck92ZXJyaWRlKHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHsgfTsK
IAotICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6U2V0dGluZzo6U2hvd0RlYnVn
Qm9yZGVyczoKLSAgICAgICAgaW5zcGVjdGVkUGFnZVNldHRpbmdzLnNldFNob3dEZWJ1Z0JvcmRl
cnNJbnNwZWN0b3JPdmVycmlkZShvdmVycmlkZVZhbHVlKTsKLSAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgUHJvdG9jb2w6OlBhZ2U6OlNldHRpbmc6OlNob3dEZWJ1Z0JvcmRlcnM6CisgICAgICAg
IGluc3BlY3RlZFBhZ2VTZXR0aW5ncy5zZXRTaG93RGVidWdCb3JkZXJzSW5zcGVjdG9yT3ZlcnJp
ZGUodmFsdWUpOworICAgICAgICByZXR1cm4geyB9OwogCi0gICAgY2FzZSBJbnNwZWN0b3I6OlBy
b3RvY29sOjpQYWdlOjpTZXR0aW5nOjpTaG93UmVwYWludENvdW50ZXI6Ci0gICAgICAgIGluc3Bl
Y3RlZFBhZ2VTZXR0aW5ncy5zZXRTaG93UmVwYWludENvdW50ZXJJbnNwZWN0b3JPdmVycmlkZShv
dmVycmlkZVZhbHVlKTsKLSAgICAgICAgcmV0dXJuOworICAgIGNhc2UgUHJvdG9jb2w6OlBhZ2U6
OlNldHRpbmc6OlNob3dSZXBhaW50Q291bnRlcjoKKyAgICAgICAgaW5zcGVjdGVkUGFnZVNldHRp
bmdzLnNldFNob3dSZXBhaW50Q291bnRlckluc3BlY3Rvck92ZXJyaWRlKHZhbHVlKTsKKyAgICAg
ICAgcmV0dXJuIHsgfTsKIAotICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6U2V0
dGluZzo6V2ViUlRDRW5jcnlwdGlvbkVuYWJsZWQ6Ci0gICAgICAgIGluc3BlY3RlZFBhZ2VTZXR0
aW5ncy5zZXRXZWJSVENFbmNyeXB0aW9uRW5hYmxlZEluc3BlY3Rvck92ZXJyaWRlKG92ZXJyaWRl
VmFsdWUpOwotICAgICAgICByZXR1cm47CisgICAgY2FzZSBQcm90b2NvbDo6UGFnZTo6U2V0dGlu
Zzo6V2ViUlRDRW5jcnlwdGlvbkVuYWJsZWQ6CisgICAgICAgIGluc3BlY3RlZFBhZ2VTZXR0aW5n
cy5zZXRXZWJSVENFbmNyeXB0aW9uRW5hYmxlZEluc3BlY3Rvck92ZXJyaWRlKHZhbHVlKTsKKyAg
ICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6
U2V0dGluZzo6V2ViU2VjdXJpdHlFbmFibGVkOgotICAgICAgICBpbnNwZWN0ZWRQYWdlU2V0dGlu
Z3Muc2V0V2ViU2VjdXJpdHlFbmFibGVkSW5zcGVjdG9yT3ZlcnJpZGUob3ZlcnJpZGVWYWx1ZSk7
Ci0gICAgICAgIHJldHVybjsKKyAgICBjYXNlIFByb3RvY29sOjpQYWdlOjpTZXR0aW5nOjpXZWJT
ZWN1cml0eUVuYWJsZWQ6CisgICAgICAgIGluc3BlY3RlZFBhZ2VTZXR0aW5ncy5zZXRXZWJTZWN1
cml0eUVuYWJsZWRJbnNwZWN0b3JPdmVycmlkZSh2YWx1ZSk7CisgICAgICAgIHJldHVybiB7IH07
CiAgICAgfQogCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIHsgfTsKIH0K
IAotc3RhdGljIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkNvb2tpZVNhbWVTaXRlUG9saWN5
IGNvb2tpZVNhbWVTaXRlUG9saWN5SlNPTihDb29raWU6OlNhbWVTaXRlUG9saWN5IHBvbGljeSkK
K3N0YXRpYyBQcm90b2NvbDo6UGFnZTo6Q29va2llU2FtZVNpdGVQb2xpY3kgY29va2llU2FtZVNp
dGVQb2xpY3lKU09OKENvb2tpZTo6U2FtZVNpdGVQb2xpY3kgcG9saWN5KQogewogICAgIHN3aXRj
aCAocG9saWN5KSB7CiAgICAgY2FzZSBDb29raWU6OlNhbWVTaXRlUG9saWN5OjpOb25lOgotICAg
ICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6Q29va2llU2FtZVNpdGVQb2xp
Y3k6Ok5vbmU7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6UGFnZTo6Q29va2llU2FtZVNpdGVQ
b2xpY3k6Ok5vbmU7CiAgICAgY2FzZSBDb29raWU6OlNhbWVTaXRlUG9saWN5OjpMYXg6Ci0gICAg
ICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpDb29raWVTYW1lU2l0ZVBvbGlj
eTo6TGF4OworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OlBhZ2U6OkNvb2tpZVNhbWVTaXRlUG9s
aWN5OjpMYXg7CiAgICAgY2FzZSBDb29raWU6OlNhbWVTaXRlUG9saWN5OjpTdHJpY3Q6Ci0gICAg
ICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpDb29raWVTYW1lU2l0ZVBvbGlj
eTo6U3RyaWN0OworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OlBhZ2U6OkNvb2tpZVNhbWVTaXRl
UG9saWN5OjpTdHJpY3Q7CiAgICAgfQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJl
dHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpDb29raWVTYW1lU2l0ZVBvbGljeTo6Tm9u
ZTsKKyAgICByZXR1cm4gUHJvdG9jb2w6OlBhZ2U6OkNvb2tpZVNhbWVTaXRlUG9saWN5OjpOb25l
OwogfQogCi1zdGF0aWMgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkNvb2tpZT4gYnVp
bGRPYmplY3RGb3JDb29raWUoY29uc3QgQ29va2llJiBjb29raWUpCitzdGF0aWMgUmVmPFByb3Rv
Y29sOjpQYWdlOjpDb29raWU+IGJ1aWxkT2JqZWN0Rm9yQ29va2llKGNvbnN0IENvb2tpZSYgY29v
a2llKQogewotICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpDb29raWU6OmNy
ZWF0ZSgpCisgICAgcmV0dXJuIFByb3RvY29sOjpQYWdlOjpDb29raWU6OmNyZWF0ZSgpCiAgICAg
ICAgIC5zZXROYW1lKGNvb2tpZS5uYW1lKQogICAgICAgICAuc2V0VmFsdWUoY29va2llLnZhbHVl
KQogICAgICAgICAuc2V0RG9tYWluKGNvb2tpZS5kb21haW4pCkBAIC01MzgsOSArNTIyLDkgQEAg
c3RhdGljIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpDb29raWU+IGJ1aWxkT2JqZWN0
Rm9yQ29va2llKGNvbnN0IENvb2tpZSYKICAgICAgICAgLnJlbGVhc2UoKTsKIH0KIAotc3RhdGlj
IFJlZjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkNvb2tpZT4+IGJ1
aWxkQXJyYXlGb3JDb29raWVzKExpc3RIYXNoU2V0PENvb2tpZT4mIGNvb2tpZXNMaXN0KQorc3Rh
dGljIFJlZjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpQYWdlOjpDb29raWU+PiBidWlsZEFycmF5
Rm9yQ29va2llcyhMaXN0SGFzaFNldDxDb29raWU+JiBjb29raWVzTGlzdCkKIHsKLSAgICBhdXRv
IGNvb2tpZXMgPSBKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkNvb2tp
ZT46OmNyZWF0ZSgpOworICAgIGF1dG8gY29va2llcyA9IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6
OlBhZ2U6OkNvb2tpZT46OmNyZWF0ZSgpOwogCiAgICAgZm9yIChjb25zdCBhdXRvJiBjb29raWUg
OiBjb29raWVzTGlzdCkKICAgICAgICAgY29va2llcy0+YWRkSXRlbShidWlsZE9iamVjdEZvckNv
b2tpZShjb29raWUpKTsKQEAgLTU2MCw3ICs1NDQsNyBAQCBzdGF0aWMgVmVjdG9yPFVSTD4gYWxs
UmVzb3VyY2VzVVJMc0ZvckZyYW1lKEZyYW1lKiBmcmFtZSkKICAgICByZXR1cm4gcmVzdWx0Owog
fQogCi12b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6Z2V0Q29va2llcyhFcnJvclN0cmluZyYsIFJl
ZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkNvb2tpZT4+JiBj
b29raWVzKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEpTT046OkFycmF5T2Y8UHJvdG9j
b2w6OlBhZ2U6OkNvb2tpZT4+PiBJbnNwZWN0b3JQYWdlQWdlbnQ6OmdldENvb2tpZXMoKQogewog
ICAgIExpc3RIYXNoU2V0PENvb2tpZT4gYWxsUmF3Q29va2llczsKIApAQCAtNTc5LDcyICs1NjMs
ODQgQEAgdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmdldENvb2tpZXMoRXJyb3JTdHJpbmcmLCBS
ZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3IKICAgICAgICAgfQogICAgIH0KIAotICAgIGNv
b2tpZXMgPSBidWlsZEFycmF5Rm9yQ29va2llcyhhbGxSYXdDb29raWVzKTsKKyAgICByZXR1cm4g
YnVpbGRBcnJheUZvckNvb2tpZXMoYWxsUmF3Q29va2llcyk7CiB9CiAKLXN0YXRpYyBPcHRpb25h
bDxDb29raWU+IHBhcnNlQ29va2llT2JqZWN0KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29u
c3QgSlNPTjo6T2JqZWN0JiBjb29raWVPYmplY3QpCitzdGF0aWMgT3B0aW9uYWw8Q29va2llPiBw
YXJzZUNvb2tpZU9iamVjdChQcm90b2NvbDo6RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBSZWY8
SlNPTjo6T2JqZWN0PiYmIGNvb2tpZU9iamVjdCkKIHsKICAgICBDb29raWUgY29va2llOwogCi0g
ICAgaWYgKCFjb29raWVPYmplY3QuZ2V0U3RyaW5nKCJuYW1lIl9zLCBjb29raWUubmFtZSkpIHsK
KyAgICBjb29raWUubmFtZSA9IGNvb2tpZU9iamVjdC0+Z2V0U3RyaW5nKFByb3RvY29sOjpQYWdl
OjpDb29raWU6Om5hbWVLZXkpOworICAgIGlmICghY29va2llLm5hbWUpIHsKICAgICAgICAgZXJy
b3JTdHJpbmcgPSAiSW52YWxpZCB2YWx1ZSBmb3Iga2V5IG5hbWUgaW4gZ2l2ZW4gY29va2llIjsK
ICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICB9CiAKLSAgICBpZiAoIWNvb2tpZU9i
amVjdC5nZXRTdHJpbmcoInZhbHVlIl9zLCBjb29raWUudmFsdWUpKSB7CisgICAgY29va2llLnZh
bHVlID0gY29va2llT2JqZWN0LT5nZXRTdHJpbmcoUHJvdG9jb2w6OlBhZ2U6OkNvb2tpZTo6dmFs
dWVLZXkpOworICAgIGlmICghY29va2llLnZhbHVlKSB7CiAgICAgICAgIGVycm9yU3RyaW5nID0g
IkludmFsaWQgdmFsdWUgZm9yIGtleSB2YWx1ZSBpbiBnaXZlbiBjb29raWUiOwogICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIH0KIAotICAgIGlmICghY29va2llT2JqZWN0LmdldFN0
cmluZygiZG9tYWluIl9zLCBjb29raWUuZG9tYWluKSkgeworICAgIGNvb2tpZS5kb21haW4gPSBj
b29raWVPYmplY3QtPmdldFN0cmluZyhQcm90b2NvbDo6UGFnZTo6Q29va2llOjpkb21haW5LZXkp
OworICAgIGlmICghY29va2llLmRvbWFpbikgewogICAgICAgICBlcnJvclN0cmluZyA9ICJJbnZh
bGlkIHZhbHVlIGZvciBrZXkgZG9tYWluIGluIGdpdmVuIGNvb2tpZSI7CiAgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CiAgICAgfQogCi0gICAgaWYgKCFjb29raWVPYmplY3QuZ2V0U3RyaW5n
KCJwYXRoIl9zLCBjb29raWUucGF0aCkpIHsKKyAgICBjb29raWUucGF0aCA9IGNvb2tpZU9iamVj
dC0+Z2V0U3RyaW5nKFByb3RvY29sOjpQYWdlOjpDb29raWU6OnBhdGhLZXkpOworICAgIGlmICgh
Y29va2llLnBhdGgpIHsKICAgICAgICAgZXJyb3JTdHJpbmcgPSAiSW52YWxpZCB2YWx1ZSBmb3Ig
a2V5IHBhdGggaW4gZ2l2ZW4gY29va2llIjsKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
ICAgICB9CiAKLSAgICBpZiAoIWNvb2tpZU9iamVjdC5nZXRCb29sZWFuKCJodHRwT25seSJfcywg
Y29va2llLmh0dHBPbmx5KSkgeworICAgIGF1dG8gaHR0cE9ubHkgPSBjb29raWVPYmplY3QtPmdl
dEJvb2xlYW4oUHJvdG9jb2w6OlBhZ2U6OkNvb2tpZTo6aHR0cE9ubHlLZXkpOworICAgIGlmICgh
aHR0cE9ubHkpIHsKICAgICAgICAgZXJyb3JTdHJpbmcgPSAiSW52YWxpZCB2YWx1ZSBmb3Iga2V5
IGh0dHBPbmx5IGluIGdpdmVuIGNvb2tpZSI7CiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CiAgICAgfQogCi0gICAgaWYgKCFjb29raWVPYmplY3QuZ2V0Qm9vbGVhbigic2VjdXJlIl9zLCBj
b29raWUuc2VjdXJlKSkgeworICAgIGNvb2tpZS5odHRwT25seSA9ICpodHRwT25seTsKKworICAg
IGF1dG8gc2VjdXJlID0gY29va2llT2JqZWN0LT5nZXRCb29sZWFuKFByb3RvY29sOjpQYWdlOjpD
b29raWU6OnNlY3VyZUtleSk7CisgICAgaWYgKCFzZWN1cmUpIHsKICAgICAgICAgZXJyb3JTdHJp
bmcgPSAiSW52YWxpZCB2YWx1ZSBmb3Iga2V5IHNlY3VyZSBpbiBnaXZlbiBjb29raWUiOwogICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIH0KIAotICAgIGJvb2wgdmFsaWRTZXNzaW9u
ID0gY29va2llT2JqZWN0LmdldEJvb2xlYW4oInNlc3Npb24iX3MsIGNvb2tpZS5zZXNzaW9uKTsK
LSAgICBjb29raWUuZXhwaXJlcyA9IGNvb2tpZU9iamVjdC5nZXROdW1iZXI8ZG91YmxlPigiZXhw
aXJlcyJfcyk7Ci0gICAgaWYgKCF2YWxpZFNlc3Npb24gJiYgIWNvb2tpZS5leHBpcmVzKSB7Cisg
ICAgY29va2llLnNlY3VyZSA9ICpzZWN1cmU7CisKKyAgICBhdXRvIHNlc3Npb24gPSBjb29raWVP
YmplY3QtPmdldEJvb2xlYW4oUHJvdG9jb2w6OlBhZ2U6OkNvb2tpZTo6c2Vzc2lvbktleSk7Cisg
ICAgY29va2llLmV4cGlyZXMgPSBjb29raWVPYmplY3QtPmdldERvdWJsZShQcm90b2NvbDo6UGFn
ZTo6Q29va2llOjpleHBpcmVzS2V5KTsKKyAgICBpZiAoIXNlc3Npb24gJiYgIWNvb2tpZS5leHBp
cmVzKSB7CiAgICAgICAgIGVycm9yU3RyaW5nID0gIkludmFsaWQgdmFsdWUgZm9yIGtleSBleHBp
cmVzIGluIGdpdmVuIGNvb2tpZSI7CiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAg
fQogCi0gICAgU3RyaW5nIHNhbWVTaXRlU3RyaW5nOwotICAgIGlmICghY29va2llT2JqZWN0Lmdl
dFN0cmluZygic2FtZVNpdGUiX3MsIHNhbWVTaXRlU3RyaW5nKSkgeworICAgIGNvb2tpZS5zZXNz
aW9uID0gKnNlc3Npb247CisKKyAgICBhdXRvIHNhbWVTaXRlU3RyaW5nID0gY29va2llT2JqZWN0
LT5nZXRTdHJpbmcoUHJvdG9jb2w6OlBhZ2U6OkNvb2tpZTo6c2FtZVNpdGVLZXkpOworICAgIGlm
ICghc2FtZVNpdGVTdHJpbmcpIHsKICAgICAgICAgZXJyb3JTdHJpbmcgPSAiSW52YWxpZCB2YWx1
ZSBmb3Iga2V5IHNhbWVTaXRlIGluIGdpdmVuIGNvb2tpZSI7CiAgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CiAgICAgfQogCi0gICAgYXV0byBzYW1lU2l0ZSA9IEluc3BlY3Rvcjo6UHJvdG9j
b2w6Okluc3BlY3RvckhlbHBlcnM6OnBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6
OlByb3RvY29sOjpQYWdlOjpDb29raWVTYW1lU2l0ZVBvbGljeT4oc2FtZVNpdGVTdHJpbmcpOwor
ICAgIGF1dG8gc2FtZVNpdGUgPSBQcm90b2NvbDo6SGVscGVyczo6cGFyc2VFbnVtVmFsdWVGcm9t
U3RyaW5nPFByb3RvY29sOjpQYWdlOjpDb29raWVTYW1lU2l0ZVBvbGljeT4oc2FtZVNpdGVTdHJp
bmcpOwogICAgIGlmICghc2FtZVNpdGUpIHsKICAgICAgICAgZXJyb3JTdHJpbmcgPSAiSW52YWxp
ZCB2YWx1ZSBmb3Iga2V5IHNhbWVTaXRlIGluIGdpdmVuIGNvb2tpZSI7CiAgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CiAgICAgfQogCiAgICAgc3dpdGNoIChzYW1lU2l0ZS52YWx1ZSgpKSB7
Ci0gICAgY2FzZSBJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpDb29raWVTYW1lU2l0ZVBvbGlj
eTo6Tm9uZToKKyAgICBjYXNlIFByb3RvY29sOjpQYWdlOjpDb29raWVTYW1lU2l0ZVBvbGljeTo6
Tm9uZToKICAgICAgICAgY29va2llLnNhbWVTaXRlID0gQ29va2llOjpTYW1lU2l0ZVBvbGljeTo6
Tm9uZTsKLQogICAgICAgICBicmVhazsKLSAgICBjYXNlIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBh
Z2U6OkNvb2tpZVNhbWVTaXRlUG9saWN5OjpMYXg6CisKKyAgICBjYXNlIFByb3RvY29sOjpQYWdl
OjpDb29raWVTYW1lU2l0ZVBvbGljeTo6TGF4OgogICAgICAgICBjb29raWUuc2FtZVNpdGUgPSBD
b29raWU6OlNhbWVTaXRlUG9saWN5OjpMYXg7Ci0KICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJ
bnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpDb29raWVTYW1lU2l0ZVBvbGljeTo6U3RyaWN0Ogor
CisgICAgY2FzZSBQcm90b2NvbDo6UGFnZTo6Q29va2llU2FtZVNpdGVQb2xpY3k6OlN0cmljdDoK
ICAgICAgICAgY29va2llLnNhbWVTaXRlID0gQ29va2llOjpTYW1lU2l0ZVBvbGljeTo6U3RyaWN0
OwogICAgICAgICBicmVhazsKICAgICB9CkBAIC02NTIsMTEgKzY0OCwxMyBAQCBzdGF0aWMgT3B0
aW9uYWw8Q29va2llPiBwYXJzZUNvb2tpZU9iamVjdChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcs
IGNvbnN0IEpTT046OgogICAgIHJldHVybiBjb29raWU7CiB9CiAKLXZvaWQgSW5zcGVjdG9yUGFn
ZUFnZW50OjpzZXRDb29raWUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBKU09OOjpP
YmplY3QmIGNvb2tpZU9iamVjdCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3Bl
Y3RvclBhZ2VBZ2VudDo6c2V0Q29va2llKFJlZjxKU09OOjpPYmplY3Q+JiYgY29va2llT2JqZWN0
KQogewotICAgIGF1dG8gY29va2llID0gcGFyc2VDb29raWVPYmplY3QoZXJyb3JTdHJpbmcsIGNv
b2tpZU9iamVjdCk7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCisg
ICAgYXV0byBjb29raWUgPSBwYXJzZUNvb2tpZU9iamVjdChlcnJvclN0cmluZywgV1RGTW92ZShj
b29raWVPYmplY3QpKTsKICAgICBpZiAoIWNvb2tpZSkKLSAgICAgICAgcmV0dXJuOworICAgICAg
ICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCiAgICAgZm9yIChhdXRvKiBm
cmFtZSA9ICZtX2luc3BlY3RlZFBhZ2UubWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1l
LT50cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsKICAgICAgICAgaWYgKGF1dG8qIGRvY3VtZW50ID0g
ZnJhbWUtPmRvY3VtZW50KCkpIHsKQEAgLTY2NCw5ICs2NjIsMTEgQEAgdm9pZCBJbnNwZWN0b3JQ
YWdlQWdlbnQ6OnNldENvb2tpZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IEpTT046
Ok9iamVjdCYKICAgICAgICAgICAgICAgICBwYWdlLT5jb29raWVKYXIoKS5zZXRSYXdDb29raWUo
KmRvY3VtZW50LCBjb29raWUudmFsdWUoKSk7CiAgICAgICAgIH0KICAgICB9CisKKyAgICByZXR1
cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6ZGVsZXRlQ29va2llKEVycm9y
U3RyaW5nJiwgY29uc3QgU3RyaW5nJiBjb29raWVOYW1lLCBjb25zdCBTdHJpbmcmIHVybCkKK1By
b3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvclBhZ2VBZ2VudDo6ZGVsZXRlQ29v
a2llKGNvbnN0IFN0cmluZyYgY29va2llTmFtZSwgY29uc3QgU3RyaW5nJiB1cmwpCiB7CiAgICAg
VVJMIHBhcnNlZFVSTCh7IH0sIHVybCk7CiAgICAgZm9yIChGcmFtZSogZnJhbWUgPSAmbV9pbnNw
ZWN0ZWRQYWdlLm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZl
cnNlTmV4dCgpKSB7CkBAIC02NzUsNDggKzY3NSw1OSBAQCB2b2lkIEluc3BlY3RvclBhZ2VBZ2Vu
dDo6ZGVsZXRlQ29va2llKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBjb29raWVOYW1lLCBj
bwogICAgICAgICAgICAgICAgIHBhZ2UtPmNvb2tpZUphcigpLmRlbGV0ZUNvb2tpZSgqZG9jdW1l
bnQsIHBhcnNlZFVSTCwgY29va2llTmFtZSk7CiAgICAgICAgIH0KICAgICB9CisKKyAgICByZXR1
cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6Z2V0UmVzb3VyY2VUcmVlKEVy
cm9yU3RyaW5nJiwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkZyYW1lUmVzb3Vy
Y2VUcmVlPiYgb2JqZWN0KQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPFByb3RvY29sOjpQ
YWdlOjpGcmFtZVJlc291cmNlVHJlZT4+IEluc3BlY3RvclBhZ2VBZ2VudDo6Z2V0UmVzb3VyY2VU
cmVlKCkKIHsKLSAgICBvYmplY3QgPSBidWlsZE9iamVjdEZvckZyYW1lVHJlZSgmbV9pbnNwZWN0
ZWRQYWdlLm1haW5GcmFtZSgpKTsKKyAgICByZXR1cm4gYnVpbGRPYmplY3RGb3JGcmFtZVRyZWUo
Jm1faW5zcGVjdGVkUGFnZS5tYWluRnJhbWUoKSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yUGFnZUFn
ZW50OjpnZXRSZXNvdXJjZUNvbnRlbnQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBT
dHJpbmcmIGZyYW1lSWQsIGNvbnN0IFN0cmluZyYgdXJsLCBTdHJpbmcqIGNvbnRlbnQsIGJvb2wq
IGJhc2U2NEVuY29kZWQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxzdGQ6OnR1cGxlPFN0cmlu
ZywgYm9vbCAvKiBiYXNlNjRFbmNvZGVkICovPj4gSW5zcGVjdG9yUGFnZUFnZW50OjpnZXRSZXNv
dXJjZUNvbnRlbnQoY29uc3QgUHJvdG9jb2w6Ok5ldHdvcms6OkZyYW1lSWQmIGZyYW1lSWQsIGNv
bnN0IFN0cmluZyYgdXJsKQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmlu
ZzsKKwogICAgIEZyYW1lKiBmcmFtZSA9IGFzc2VydEZyYW1lKGVycm9yU3RyaW5nLCBmcmFtZUlk
KTsKICAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtl
VW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKLSAgICByZXNvdXJjZUNvbnRlbnQoZXJyb3JTdHJp
bmcsIGZyYW1lLCBVUkwoeyB9LCB1cmwpLCBjb250ZW50LCBiYXNlNjRFbmNvZGVkKTsKKyAgICBT
dHJpbmcgY29udGVudDsKKyAgICBib29sIGJhc2U2NEVuY29kZWQ7CisKKyAgICByZXNvdXJjZUNv
bnRlbnQoZXJyb3JTdHJpbmcsIGZyYW1lLCBVUkwoeyB9LCB1cmwpLCAmY29udGVudCwgJmJhc2U2
NEVuY29kZWQpOworCisgICAgcmV0dXJuIHsgeyBjb250ZW50LCBiYXNlNjRFbmNvZGVkIH0gfTsK
IH0KIAotdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OnNldEJvb3RzdHJhcFNjcmlwdChFcnJvclN0
cmluZyYsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxTb3VyY2UpCitQcm90b2NvbDo6RXJyb3JTdHJp
bmdPcjx2b2lkPiBJbnNwZWN0b3JQYWdlQWdlbnQ6OnNldEJvb3RzdHJhcFNjcmlwdChjb25zdCBT
dHJpbmcmIHNvdXJjZSkKIHsKLSAgICBtX2Jvb3RzdHJhcFNjcmlwdCA9IG9wdGlvbmFsU291cmNl
ID8gKm9wdGlvbmFsU291cmNlIDogbnVsbFN0cmluZygpOworICAgIG1fYm9vdHN0cmFwU2NyaXB0
ID0gc291cmNlOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JQYWdlQWdl
bnQ6OnNlYXJjaEluUmVzb3VyY2UoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJp
bmcmIGZyYW1lSWQsIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIHF1ZXJ5LCBjb25z
dCBib29sKiBvcHRpb25hbENhc2VTZW5zaXRpdmUsIGNvbnN0IGJvb2wqIG9wdGlvbmFsSXNSZWdl
eCwgY29uc3QgU3RyaW5nKiBvcHRpb25hbFJlcXVlc3RJZCwgUmVmUHRyPEpTT046OkFycmF5T2Y8
SW5zcGVjdG9yOjpQcm90b2NvbDo6R2VuZXJpY1R5cGVzOjpTZWFyY2hNYXRjaD4+JiByZXN1bHRz
KQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6Okdl
bmVyaWNUeXBlczo6U2VhcmNoTWF0Y2g+Pj4gSW5zcGVjdG9yUGFnZUFnZW50OjpzZWFyY2hJblJl
c291cmNlKGNvbnN0IFByb3RvY29sOjpOZXR3b3JrOjpGcmFtZUlkJiBmcmFtZUlkLCBjb25zdCBT
dHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBxdWVyeSwgT3B0aW9uYWw8Ym9vbD4mJiBjYXNlU2Vu
c2l0aXZlLCBPcHRpb25hbDxib29sPiYmIGlzUmVnZXgsIGNvbnN0IFByb3RvY29sOjpOZXR3b3Jr
OjpSZXF1ZXN0SWQmIHJlcXVlc3RJZCkKIHsKLSAgICByZXN1bHRzID0gSlNPTjo6QXJyYXlPZjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpHZW5lcmljVHlwZXM6OlNlYXJjaE1hdGNoPjo6Y3JlYXRlKCk7
CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOwogCi0gICAgYm9vbCBpc1Jl
Z2V4ID0gb3B0aW9uYWxJc1JlZ2V4ID8gKm9wdGlvbmFsSXNSZWdleCA6IGZhbHNlOwotICAgIGJv
b2wgY2FzZVNlbnNpdGl2ZSA9IG9wdGlvbmFsQ2FzZVNlbnNpdGl2ZSA/ICpvcHRpb25hbENhc2VT
ZW5zaXRpdmUgOiBmYWxzZTsKLQotICAgIGlmIChvcHRpb25hbFJlcXVlc3RJZCkgeworICAgIGlm
ICghIXJlcXVlc3RJZCkgewogICAgICAgICBpZiAoYXV0byogbmV0d29ya0FnZW50ID0gbV9pbnN0
cnVtZW50aW5nQWdlbnRzLmVuYWJsZWROZXR3b3JrQWdlbnQoKSkgewotICAgICAgICAgICAgbmV0
d29ya0FnZW50LT5zZWFyY2hJblJlcXVlc3QoZXJyb3JTdHJpbmcsICpvcHRpb25hbFJlcXVlc3RJ
ZCwgcXVlcnksIGNhc2VTZW5zaXRpdmUsIGlzUmVnZXgsIHJlc3VsdHMpOwotICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkdlbmVy
aWNUeXBlczo6U2VhcmNoTWF0Y2g+PiByZXN1bHQ7CisgICAgICAgICAgICBuZXR3b3JrQWdlbnQt
PnNlYXJjaEluUmVxdWVzdChlcnJvclN0cmluZywgcmVxdWVzdElkLCBxdWVyeSwgY2FzZVNlbnNp
dGl2ZSAmJiAqY2FzZVNlbnNpdGl2ZSwgaXNSZWdleCAmJiAqaXNSZWdleCwgcmVzdWx0KTsKKyAg
ICAgICAgICAgIGlmICghcmVzdWx0KQorICAgICAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBl
Y3RlZChlcnJvclN0cmluZyk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2VOb25O
dWxsKCk7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBGcmFtZSogZnJhbWUgPSBhc3NlcnRGcmFt
ZShlcnJvclN0cmluZywgZnJhbWVJZCk7CiAgICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJu
OworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCiAgICAgRG9j
dW1lbnRMb2FkZXIqIGxvYWRlciA9IGFzc2VydERvY3VtZW50TG9hZGVyKGVycm9yU3RyaW5nLCBm
cmFtZSk7CiAgICAgaWYgKCFsb2FkZXIpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJu
IG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgIFVSTCBrdXJsKHsgfSwgdXJsKTsK
IApAQCAtNzM1LDI5ICs3NDYsMjYgQEAgdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OnNlYXJjaElu
UmVzb3VyY2UoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcKICAgICB9CiAK
ICAgICBpZiAoIXN1Y2Nlc3MpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIEpTT046
OkFycmF5T2Y8UHJvdG9jb2w6OkdlbmVyaWNUeXBlczo6U2VhcmNoTWF0Y2g+OjpjcmVhdGUoKTsK
IAotICAgIHJlc3VsdHMgPSBDb250ZW50U2VhcmNoVXRpbGl0aWVzOjpzZWFyY2hJblRleHRCeUxp
bmVzKGNvbnRlbnQsIHF1ZXJ5LCBjYXNlU2Vuc2l0aXZlLCBpc1JlZ2V4KTsKKyAgICByZXR1cm4g
Q29udGVudFNlYXJjaFV0aWxpdGllczo6c2VhcmNoSW5UZXh0QnlMaW5lcyhjb250ZW50LCBxdWVy
eSwgY2FzZVNlbnNpdGl2ZSAmJiAqY2FzZVNlbnNpdGl2ZSwgaXNSZWdleCAmJiAqaXNSZWdleCk7
CiB9CiAKLXN0YXRpYyBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6U2VhcmNoUmVzdWx0
PiBidWlsZE9iamVjdEZvclNlYXJjaFJlc3VsdChjb25zdCBTdHJpbmcmIGZyYW1lSWQsIGNvbnN0
IFN0cmluZyYgdXJsLCBpbnQgbWF0Y2hlc0NvdW50KQorc3RhdGljIFJlZjxQcm90b2NvbDo6UGFn
ZTo6U2VhcmNoUmVzdWx0PiBidWlsZE9iamVjdEZvclNlYXJjaFJlc3VsdChjb25zdCBQcm90b2Nv
bDo6TmV0d29yazo6RnJhbWVJZCYgZnJhbWVJZCwgY29uc3QgU3RyaW5nJiB1cmwsIGludCBtYXRj
aGVzQ291bnQpCiB7Ci0gICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OlNlYXJj
aFJlc3VsdDo6Y3JlYXRlKCkKKyAgICByZXR1cm4gUHJvdG9jb2w6OlBhZ2U6OlNlYXJjaFJlc3Vs
dDo6Y3JlYXRlKCkKICAgICAgICAgLnNldFVybCh1cmwpCiAgICAgICAgIC5zZXRGcmFtZUlkKGZy
YW1lSWQpCiAgICAgICAgIC5zZXRNYXRjaGVzQ291bnQobWF0Y2hlc0NvdW50KQogICAgICAgICAu
cmVsZWFzZSgpOwogfQogCi12b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6c2VhcmNoSW5SZXNvdXJj
ZXMoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IGJvb2wqIG9wdGlvbmFs
Q2FzZVNlbnNpdGl2ZSwgY29uc3QgYm9vbCogb3B0aW9uYWxJc1JlZ2V4LCBSZWZQdHI8SlNPTjo6
QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpTZWFyY2hSZXN1bHQ+PiYgcmVzdWx0
KQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlBh
Z2U6OlNlYXJjaFJlc3VsdD4+PiBJbnNwZWN0b3JQYWdlQWdlbnQ6OnNlYXJjaEluUmVzb3VyY2Vz
KGNvbnN0IFN0cmluZyYgdGV4dCwgT3B0aW9uYWw8Ym9vbD4mJiBjYXNlU2Vuc2l0aXZlLCBPcHRp
b25hbDxib29sPiYmIGlzUmVnZXgpCiB7Ci0gICAgcmVzdWx0ID0gSlNPTjo6QXJyYXlPZjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpQYWdlOjpTZWFyY2hSZXN1bHQ+OjpjcmVhdGUoKTsKKyAgICBhdXRv
IHJlc3VsdCA9IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlBhZ2U6OlNlYXJjaFJlc3VsdD46OmNy
ZWF0ZSgpOwogCi0gICAgYm9vbCBjYXNlU2Vuc2l0aXZlID0gb3B0aW9uYWxDYXNlU2Vuc2l0aXZl
ID8gKm9wdGlvbmFsQ2FzZVNlbnNpdGl2ZSA6IGZhbHNlOwotICAgIGJvb2wgaXNSZWdleCA9IG9w
dGlvbmFsSXNSZWdleCA/ICpvcHRpb25hbElzUmVnZXggOiBmYWxzZTsKLQotICAgIGF1dG8gc2Vh
cmNoU3RyaW5nVHlwZSA9IGlzUmVnZXggPyBDb250ZW50U2VhcmNoVXRpbGl0aWVzOjpTZWFyY2hT
dHJpbmdUeXBlOjpSZWdleCA6IENvbnRlbnRTZWFyY2hVdGlsaXRpZXM6OlNlYXJjaFN0cmluZ1R5
cGU6OkNvbnRhaW5zU3RyaW5nOwotICAgIGF1dG8gcmVnZXggPSBDb250ZW50U2VhcmNoVXRpbGl0
aWVzOjpjcmVhdGVSZWd1bGFyRXhwcmVzc2lvbkZvclNlYXJjaFN0cmluZyh0ZXh0LCBjYXNlU2Vu
c2l0aXZlLCBzZWFyY2hTdHJpbmdUeXBlKTsKKyAgICBhdXRvIHNlYXJjaFN0cmluZ1R5cGUgPSAo
aXNSZWdleCAmJiAqaXNSZWdleCkgPyBDb250ZW50U2VhcmNoVXRpbGl0aWVzOjpTZWFyY2hTdHJp
bmdUeXBlOjpSZWdleCA6IENvbnRlbnRTZWFyY2hVdGlsaXRpZXM6OlNlYXJjaFN0cmluZ1R5cGU6
OkNvbnRhaW5zU3RyaW5nOworICAgIGF1dG8gcmVnZXggPSBDb250ZW50U2VhcmNoVXRpbGl0aWVz
OjpjcmVhdGVSZWd1bGFyRXhwcmVzc2lvbkZvclNlYXJjaFN0cmluZyh0ZXh0LCBjYXNlU2Vuc2l0
aXZlICYmICpjYXNlU2Vuc2l0aXZlLCBzZWFyY2hTdHJpbmdUeXBlKTsKIAogICAgIGZvciAoRnJh
bWUqIGZyYW1lID0gJm1faW5zcGVjdGVkUGFnZS5tYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0g
ZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoKSkgewogICAgICAgICBmb3IgKGF1dG8qIGNhY2hl
ZFJlc291cmNlIDogY2FjaGVkUmVzb3VyY2VzRm9yRnJhbWUoZnJhbWUpKSB7CkBAIC03NzEsMjQg
Kzc3OSwzMCBAQCB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6c2VhcmNoSW5SZXNvdXJjZXMoRXJy
b3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHRleHQsIGNvbgogCiAgICAgaWYgKGF1dG8qIG5ldHdv
cmtBZ2VudCA9IG1faW5zdHJ1bWVudGluZ0FnZW50cy5lbmFibGVkTmV0d29ya0FnZW50KCkpCiAg
ICAgICAgIG5ldHdvcmtBZ2VudC0+c2VhcmNoT3RoZXJSZXF1ZXN0cyhyZWdleCwgcmVzdWx0KTsK
KworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKICNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKLXZv
aWQgSW5zcGVjdG9yUGFnZUFnZW50OjpzZXRTaG93UnVsZXJzKEVycm9yU3RyaW5nJiwgYm9vbCBz
aG93UnVsZXJzKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yUGFnZUFn
ZW50OjpzZXRTaG93UnVsZXJzKGJvb2wgc2hvd1J1bGVycykKIHsKICAgICBtX292ZXJsYXktPnNl
dFNob3dSdWxlcnMoc2hvd1J1bGVycyk7CisKKyAgICByZXR1cm4geyB9OwogfQogI2VuZGlmCiAK
LXZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpzZXRTaG93UGFpbnRSZWN0cyhFcnJvclN0cmluZyYs
IGJvb2wgc2hvdykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvclBhZ2VB
Z2VudDo6c2V0U2hvd1BhaW50UmVjdHMoYm9vbCBzaG93KQogewogICAgIG1fc2hvd1BhaW50UmVj
dHMgPSBzaG93OwogICAgIG1fY2xpZW50LT5zZXRTaG93UGFpbnRSZWN0cyhzaG93KTsKIAogICAg
IGlmIChtX2NsaWVudC0+b3ZlcnJpZGVzU2hvd1BhaW50UmVjdHMoKSkKLSAgICAgICAgcmV0dXJu
OworICAgICAgICByZXR1cm4geyB9OwogCiAgICAgbV9vdmVybGF5LT5zZXRTaG93UGFpbnRSZWN0
cyhzaG93KTsKKworICAgIHJldHVybiB7IH07CiB9CiAKIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50
Ojpkb21Db250ZW50RXZlbnRGaXJlZCgpCkBAIC04MTYsNyArODMwLDcgQEAgdm9pZCBJbnNwZWN0
b3JQYWdlQWdlbnQ6OmZyYW1lRGV0YWNoZWQoRnJhbWUmIGZyYW1lKQogICAgIG1faWRlbnRpZmll
clRvRnJhbWUucmVtb3ZlKGlkZW50aWZpZXIpOwogfQogCi1GcmFtZSogSW5zcGVjdG9yUGFnZUFn
ZW50OjpmcmFtZUZvcklkKGNvbnN0IFN0cmluZyYgZnJhbWVJZCkKK0ZyYW1lKiBJbnNwZWN0b3JQ
YWdlQWdlbnQ6OmZyYW1lRm9ySWQoY29uc3QgUHJvdG9jb2w6Ok5ldHdvcms6OkZyYW1lSWQmIGZy
YW1lSWQpCiB7CiAgICAgcmV0dXJuIGZyYW1lSWQuaXNFbXB0eSgpID8gbnVsbHB0ciA6IG1faWRl
bnRpZmllclRvRnJhbWUuZ2V0KGZyYW1lSWQpOwogfQpAQCAtODQxLDcgKzg1NSw3IEBAIFN0cmlu
ZyBJbnNwZWN0b3JQYWdlQWdlbnQ6OmxvYWRlcklkKERvY3VtZW50TG9hZGVyKiBsb2FkZXIpCiAg
ICAgfSkuaXRlcmF0b3ItPnZhbHVlOwogfQogCi1GcmFtZSogSW5zcGVjdG9yUGFnZUFnZW50Ojph
c3NlcnRGcmFtZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgZnJhbWVJ
ZCkKK0ZyYW1lKiBJbnNwZWN0b3JQYWdlQWdlbnQ6OmFzc2VydEZyYW1lKFByb3RvY29sOjpFcnJv
clN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFByb3RvY29sOjpOZXR3b3JrOjpGcmFtZUlkJiBm
cmFtZUlkKQogewogICAgIEZyYW1lKiBmcmFtZSA9IGZyYW1lRm9ySWQoZnJhbWVJZCk7CiAgICAg
aWYgKCFmcmFtZSkKQEAgLTg3Nyw3ICs4OTEsNyBAQCB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6
ZnJhbWVDbGVhcmVkU2NoZWR1bGVkTmF2aWdhdGlvbihGcmFtZSYgZnJhbWUpCiAjaWYgRU5BQkxF
KERBUktfTU9ERV9DU1MpIHx8IEhBVkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCiB2b2lkIEluc3Bl
Y3RvclBhZ2VBZ2VudDo6ZGVmYXVsdEFwcGVhcmFuY2VEaWRDaGFuZ2UoYm9vbCB1c2VEYXJrQXBw
ZWFyYW5jZSkKIHsKLSAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+ZGVmYXVsdEFwcGVhcmFuY2VE
aWRDaGFuZ2UodXNlRGFya0FwcGVhcmFuY2UgPyBJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpB
cHBlYXJhbmNlOjpEYXJrIDogSW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6QXBwZWFyYW5jZTo6
TGlnaHQpOworICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5kZWZhdWx0QXBwZWFyYW5jZURpZENo
YW5nZSh1c2VEYXJrQXBwZWFyYW5jZSA/IFByb3RvY29sOjpQYWdlOjpBcHBlYXJhbmNlOjpEYXJr
IDogUHJvdG9jb2w6OlBhZ2U6OkFwcGVhcmFuY2U6OkxpZ2h0KTsKIH0KICNlbmRpZgogCkBAIC05
MzMsMTEgKzk0NywxMSBAQCB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6ZGlkUmVjYWxjdWxhdGVT
dHlsZSgpCiAgICAgbV9vdmVybGF5LT51cGRhdGUoKTsKIH0KIAotUmVmPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OlBhZ2U6OkZyYW1lPiBJbnNwZWN0b3JQYWdlQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yRnJh
bWUoRnJhbWUqIGZyYW1lKQorUmVmPFByb3RvY29sOjpQYWdlOjpGcmFtZT4gSW5zcGVjdG9yUGFn
ZUFnZW50OjpidWlsZE9iamVjdEZvckZyYW1lKEZyYW1lKiBmcmFtZSkKIHsKICAgICBBU1NFUlRf
QVJHKGZyYW1lLCBmcmFtZSk7CiAKLSAgICBhdXRvIGZyYW1lT2JqZWN0ID0gSW5zcGVjdG9yOjpQ
cm90b2NvbDo6UGFnZTo6RnJhbWU6OmNyZWF0ZSgpCisgICAgYXV0byBmcmFtZU9iamVjdCA9IFBy
b3RvY29sOjpQYWdlOjpGcmFtZTo6Y3JlYXRlKCkKICAgICAgICAgLnNldElkKGZyYW1lSWQoZnJh
bWUpKQogICAgICAgICAuc2V0TG9hZGVySWQobG9hZGVySWQoZnJhbWUtPmxvYWRlcigpLmRvY3Vt
ZW50TG9hZGVyKCkpKQogICAgICAgICAuc2V0VXJsKGZyYW1lLT5kb2N1bWVudCgpLT51cmwoKS5z
dHJpbmcoKSkKQEAgLTk1NiwxOSArOTcwLDE5IEBAIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpQ
YWdlOjpGcmFtZT4gSW5zcGVjdG9yUGFnZUFnZW50OjpidWlsZE9iamVjdEZvckZyYW1lKEZyCiAg
ICAgcmV0dXJuIGZyYW1lT2JqZWN0OwogfQogCi1SZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFn
ZTo6RnJhbWVSZXNvdXJjZVRyZWU+IEluc3BlY3RvclBhZ2VBZ2VudDo6YnVpbGRPYmplY3RGb3JG
cmFtZVRyZWUoRnJhbWUqIGZyYW1lKQorUmVmPFByb3RvY29sOjpQYWdlOjpGcmFtZVJlc291cmNl
VHJlZT4gSW5zcGVjdG9yUGFnZUFnZW50OjpidWlsZE9iamVjdEZvckZyYW1lVHJlZShGcmFtZSog
ZnJhbWUpCiB7CiAgICAgQVNTRVJUX0FSRyhmcmFtZSwgZnJhbWUpOwogCi0gICAgUmVmPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkZyYW1lPiBmcmFtZU9iamVjdCA9IGJ1aWxkT2JqZWN0Rm9y
RnJhbWUoZnJhbWUpOwotICAgIGF1dG8gc3VicmVzb3VyY2VzID0gSlNPTjo6QXJyYXlPZjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpQYWdlOjpGcmFtZVJlc291cmNlPjo6Y3JlYXRlKCk7Ci0gICAgYXV0
byByZXN1bHQgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpGcmFtZVJlc291cmNlVHJlZTo6
Y3JlYXRlKCkKKyAgICBSZWY8UHJvdG9jb2w6OlBhZ2U6OkZyYW1lPiBmcmFtZU9iamVjdCA9IGJ1
aWxkT2JqZWN0Rm9yRnJhbWUoZnJhbWUpOworICAgIGF1dG8gc3VicmVzb3VyY2VzID0gSlNPTjo6
QXJyYXlPZjxQcm90b2NvbDo6UGFnZTo6RnJhbWVSZXNvdXJjZT46OmNyZWF0ZSgpOworICAgIGF1
dG8gcmVzdWx0ID0gUHJvdG9jb2w6OlBhZ2U6OkZyYW1lUmVzb3VyY2VUcmVlOjpjcmVhdGUoKQog
ICAgICAgICAuc2V0RnJhbWUoV1RGTW92ZShmcmFtZU9iamVjdCkpCiAgICAgICAgIC5zZXRSZXNv
dXJjZXMoc3VicmVzb3VyY2VzLmNvcHlSZWYoKSkKICAgICAgICAgLnJlbGVhc2UoKTsKIAogICAg
IGZvciAoYXV0byogY2FjaGVkUmVzb3VyY2UgOiBjYWNoZWRSZXNvdXJjZXNGb3JGcmFtZShmcmFt
ZSkpIHsKLSAgICAgICAgYXV0byByZXNvdXJjZU9iamVjdCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlBhZ2U6OkZyYW1lUmVzb3VyY2U6OmNyZWF0ZSgpCisgICAgICAgIGF1dG8gcmVzb3VyY2VPYmpl
Y3QgPSBQcm90b2NvbDo6UGFnZTo6RnJhbWVSZXNvdXJjZTo6Y3JlYXRlKCkKICAgICAgICAgICAg
IC5zZXRVcmwoY2FjaGVkUmVzb3VyY2UtPnVybCgpLnN0cmluZygpKQogICAgICAgICAgICAgLnNl
dFR5cGUoY2FjaGVkUmVzb3VyY2VUeXBlSlNPTigqY2FjaGVkUmVzb3VyY2UpKQogICAgICAgICAg
ICAgLnNldE1pbWVUeXBlKGNhY2hlZFJlc291cmNlLT5yZXNwb25zZSgpLm1pbWVUeXBlKCkpCkBA
IC05ODYsMjEgKzEwMDAsMjEgQEAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkZyYW1l
UmVzb3VyY2VUcmVlPiBJbnNwZWN0b3JQYWdlQWdlbnQ6OmJ1aWxkT2JqZWMKICAgICAgICAgc3Vi
cmVzb3VyY2VzLT5hZGRJdGVtKFdURk1vdmUocmVzb3VyY2VPYmplY3QpKTsKICAgICB9CiAKLSAg
ICBSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpGcmFtZVJl
c291cmNlVHJlZT4+IGNoaWxkcmVuQXJyYXk7CisgICAgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJv
dG9jb2w6OlBhZ2U6OkZyYW1lUmVzb3VyY2VUcmVlPj4gY2hpbGRyZW5BcnJheTsKICAgICBmb3Ig
KEZyYW1lKiBjaGlsZCA9IGZyYW1lLT50cmVlKCkuZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQg
PSBjaGlsZC0+dHJlZSgpLm5leHRTaWJsaW5nKCkpIHsKICAgICAgICAgaWYgKCFjaGlsZHJlbkFy
cmF5KSB7Ci0gICAgICAgICAgICBjaGlsZHJlbkFycmF5ID0gSlNPTjo6QXJyYXlPZjxJbnNwZWN0
b3I6OlByb3RvY29sOjpQYWdlOjpGcmFtZVJlc291cmNlVHJlZT46OmNyZWF0ZSgpOwotICAgICAg
ICAgICAgcmVzdWx0LT5zZXRDaGlsZEZyYW1lcyhjaGlsZHJlbkFycmF5KTsKKyAgICAgICAgICAg
IGNoaWxkcmVuQXJyYXkgPSBKU09OOjpBcnJheU9mPFByb3RvY29sOjpQYWdlOjpGcmFtZVJlc291
cmNlVHJlZT46OmNyZWF0ZSgpOworICAgICAgICAgICAgcmVzdWx0LT5zZXRDaGlsZEZyYW1lcygq
Y2hpbGRyZW5BcnJheSk7CiAgICAgICAgIH0KICAgICAgICAgY2hpbGRyZW5BcnJheS0+YWRkSXRl
bShidWlsZE9iamVjdEZvckZyYW1lVHJlZShjaGlsZCkpOwogICAgIH0KICAgICByZXR1cm4gcmVz
dWx0OwogfQogCi12b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6c2V0RW11bGF0ZWRNZWRpYShFcnJv
clN0cmluZyYsIGNvbnN0IFN0cmluZyYgbWVkaWEpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2
b2lkPiBJbnNwZWN0b3JQYWdlQWdlbnQ6OnNldEVtdWxhdGVkTWVkaWEoY29uc3QgU3RyaW5nJiBt
ZWRpYSkKIHsKICAgICBpZiAobWVkaWEgPT0gbV9lbXVsYXRlZE1lZGlhKQotICAgICAgICByZXR1
cm47CisgICAgICAgIHJldHVybiB7IH07CiAKICAgICBtX2VtdWxhdGVkTWVkaWEgPSBtZWRpYTsK
IApAQCAtMTAwOSwyMSArMTAyMywzNCBAQCB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6c2V0RW11
bGF0ZWRNZWRpYShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgbWVkaWEpCiAKICAgICBhdXRv
IGRvY3VtZW50ID0gbWFrZVJlZlB0cihtX2luc3BlY3RlZFBhZ2UubWFpbkZyYW1lKCkuZG9jdW1l
bnQoKSk7CiAgICAgaWYgKCFkb2N1bWVudCkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1
cm4geyB9OwogCiAgICAgZG9jdW1lbnQtPnVwZGF0ZUxheW91dCgpOwogICAgIGRvY3VtZW50LT5l
dmFsdWF0ZU1lZGlhUXVlcmllc0FuZFJlcG9ydENoYW5nZXMoKTsKKworICAgIHJldHVybiB7IH07
CiB9CiAKICNpZiBFTkFCTEUoREFSS19NT0RFX0NTUykgfHwgSEFWRShPU19EQVJLX01PREVfU1VQ
UE9SVCkKLXZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpzZXRGb3JjZWRBcHBlYXJhbmNlKEVycm9y
U3RyaW5nJiwgY29uc3QgU3RyaW5nJiBhcHBlYXJhbmNlKQorUHJvdG9jb2w6OkVycm9yU3RyaW5n
T3I8dm9pZD4gSW5zcGVjdG9yUGFnZUFnZW50OjpzZXRGb3JjZWRBcHBlYXJhbmNlKE9wdGlvbmFs
PFByb3RvY29sOjpQYWdlOjpBcHBlYXJhbmNlPiYmIGFwcGVhcmFuY2UpCiB7Ci0gICAgaWYgKGFw
cGVhcmFuY2UgPT0gIkxpZ2h0Il9zKQotICAgICAgICBtX2luc3BlY3RlZFBhZ2Uuc2V0VXNlRGFy
a0FwcGVhcmFuY2VPdmVycmlkZShmYWxzZSk7Ci0gICAgZWxzZSBpZiAoYXBwZWFyYW5jZSA9PSAi
RGFyayJfcykKLSAgICAgICAgbV9pbnNwZWN0ZWRQYWdlLnNldFVzZURhcmtBcHBlYXJhbmNlT3Zl
cnJpZGUodHJ1ZSk7Ci0gICAgZWxzZQorICAgIGlmICghYXBwZWFyYW5jZSkgewogICAgICAgICBt
X2luc3BlY3RlZFBhZ2Uuc2V0VXNlRGFya0FwcGVhcmFuY2VPdmVycmlkZShXVEY6Om51bGxvcHQp
OworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIHN3aXRjaCAoKmFwcGVhcmFuY2Up
IHsKKyAgICBjYXNlIFByb3RvY29sOjpQYWdlOjpBcHBlYXJhbmNlOjpMaWdodDoKKyAgICAgICAg
bV9pbnNwZWN0ZWRQYWdlLnNldFVzZURhcmtBcHBlYXJhbmNlT3ZlcnJpZGUoZmFsc2UpOworICAg
ICAgICByZXR1cm4geyB9OworCisgICAgY2FzZSBQcm90b2NvbDo6UGFnZTo6QXBwZWFyYW5jZTo6
RGFyazoKKyAgICAgICAgbV9pbnNwZWN0ZWRQYWdlLnNldFVzZURhcmtBcHBlYXJhbmNlT3ZlcnJp
ZGUodHJ1ZSk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgcmV0dXJuIHsgfTsKIH0KICNlbmRpZgogCkBAIC0xMDM5LDUxICsxMDY2
LDQ3IEBAIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjphcHBseUVtdWxhdGVkTWVkaWEoU3RyaW5n
JiBtZWRpYSkKICAgICAgICAgbWVkaWEgPSBtX2VtdWxhdGVkTWVkaWE7CiB9CiAKLXZvaWQgSW5z
cGVjdG9yUGFnZUFnZW50OjpzbmFwc2hvdE5vZGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBp
bnQgbm9kZUlkLCBTdHJpbmcqIG91dERhdGFVUkwpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxT
dHJpbmc+IEluc3BlY3RvclBhZ2VBZ2VudDo6c25hcHNob3ROb2RlKFByb3RvY29sOjpET006Ok5v
ZGVJZCBub2RlSWQpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOwor
CiAgICAgSW5zcGVjdG9yRE9NQWdlbnQqIGRvbUFnZW50ID0gbV9pbnN0cnVtZW50aW5nQWdlbnRz
LnBlcnNpc3RlbnRET01BZ2VudCgpOwogICAgIEFTU0VSVChkb21BZ2VudCk7CiAgICAgTm9kZSog
bm9kZSA9IGRvbUFnZW50LT5hc3NlcnROb2RlKGVycm9yU3RyaW5nLCBub2RlSWQpOwogICAgIGlm
ICghbm9kZSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQo
ZXJyb3JTdHJpbmcpOwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBzbmFwc2hv
dCA9IFdlYkNvcmU6OnNuYXBzaG90Tm9kZShtX2luc3BlY3RlZFBhZ2UubWFpbkZyYW1lKCksICpu
b2RlKTsKLSAgICBpZiAoIXNuYXBzaG90KSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIkNvdWxk
IG5vdCBjYXB0dXJlIHNuYXBzaG90Il9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlm
ICghc25hcHNob3QpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiQ291bGQgbm90IGNh
cHR1cmUgc25hcHNob3QiX3MpOwogCi0gICAgKm91dERhdGFVUkwgPSBzbmFwc2hvdC0+dG9EYXRh
VVJMKCJpbWFnZS9wbmciX3MsIFdURjo6bnVsbG9wdCwgUHJlc2VydmVSZXNvbHV0aW9uOjpZZXMp
OworICAgIHJldHVybiBzbmFwc2hvdC0+dG9EYXRhVVJMKCJpbWFnZS9wbmciX3MsIFdURjo6bnVs
bG9wdCwgUHJlc2VydmVSZXNvbHV0aW9uOjpZZXMpOwogfQogCi12b2lkIEluc3BlY3RvclBhZ2VB
Z2VudDo6c25hcHNob3RSZWN0KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IHgsIGludCB5
LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGNvbnN0IFN0cmluZyYgY29vcmRpbmF0ZVN5c3RlbSwg
U3RyaW5nKiBvdXREYXRhVVJMKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8U3RyaW5nPiBJbnNw
ZWN0b3JQYWdlQWdlbnQ6OnNuYXBzaG90UmVjdChpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50
IGhlaWdodCwgUHJvdG9jb2w6OlBhZ2U6OkNvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3Rl
bSkKIHsKICAgICBTbmFwc2hvdE9wdGlvbnMgb3B0aW9ucyA9IFNuYXBzaG90T3B0aW9uc05vbmU7
Ci0gICAgaWYgKGNvb3JkaW5hdGVTeXN0ZW0gPT0gIlZpZXdwb3J0IikKKyAgICBpZiAoY29vcmRp
bmF0ZVN5c3RlbSA9PSBQcm90b2NvbDo6UGFnZTo6Q29vcmRpbmF0ZVN5c3RlbTo6Vmlld3BvcnQp
CiAgICAgICAgIG9wdGlvbnMgfD0gU25hcHNob3RPcHRpb25zSW5WaWV3Q29vcmRpbmF0ZXM7CiAK
ICAgICBJbnRSZWN0IHJlY3RhbmdsZSh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKICAgICBzdGQ6OnVu
aXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IHNuYXBzaG90ID0gc25hcHNob3RGcmFtZVJlY3QobV9pbnNw
ZWN0ZWRQYWdlLm1haW5GcmFtZSgpLCByZWN0YW5nbGUsIG9wdGlvbnMpOwogCi0gICAgaWYgKCFz
bmFwc2hvdCkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJDb3VsZCBub3QgY2FwdHVyZSBzbmFw
c2hvdCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoIXNuYXBzaG90KQorICAg
ICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkNvdWxkIG5vdCBjYXB0dXJlIHNuYXBzaG90Il9z
KTsKIAotICAgICpvdXREYXRhVVJMID0gc25hcHNob3QtPnRvRGF0YVVSTCgiaW1hZ2UvcG5nIl9z
LCBXVEY6Om51bGxvcHQsIFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKTsKKyAgICByZXR1cm4gc25h
cHNob3QtPnRvRGF0YVVSTCgiaW1hZ2UvcG5nIl9zLCBXVEY6Om51bGxvcHQsIFByZXNlcnZlUmVz
b2x1dGlvbjo6WWVzKTsKIH0KIAogI2lmIEVOQUJMRShXRUJfQVJDSElWRSkgJiYgVVNFKENGKQot
dm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmFyY2hpdmUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5n
LCBTdHJpbmcqIGRhdGEpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxTdHJpbmc+IEluc3BlY3Rv
clBhZ2VBZ2VudDo6YXJjaGl2ZSgpCiB7CiAgICAgYXV0byBhcmNoaXZlID0gTGVnYWN5V2ViQXJj
aGl2ZTo6Y3JlYXRlKG1faW5zcGVjdGVkUGFnZS5tYWluRnJhbWUoKSk7Ci0gICAgaWYgKCFhcmNo
aXZlKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIkNvdWxkIG5vdCBjcmVhdGUgd2ViIGFyY2hp
dmUgZm9yIG1haW4gZnJhbWUiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKCFh
cmNoaXZlKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkNvdWxkIG5vdCBjcmVhdGUg
d2ViIGFyY2hpdmUgZm9yIG1haW4gZnJhbWUiX3MpOwogCiAgICAgUmV0YWluUHRyPENGRGF0YVJl
Zj4gYnVmZmVyID0gYXJjaGl2ZS0+cmF3RGF0YVJlcHJlc2VudGF0aW9uKCk7Ci0gICAgKmRhdGEg
PSBiYXNlNjRFbmNvZGUoQ0ZEYXRhR2V0Qnl0ZVB0cihidWZmZXIuZ2V0KCkpLCBDRkRhdGFHZXRM
ZW5ndGgoYnVmZmVyLmdldCgpKSk7CisgICAgcmV0dXJuIGJhc2U2NEVuY29kZShDRkRhdGFHZXRC
eXRlUHRyKGJ1ZmZlci5nZXQoKSksIENGRGF0YUdldExlbmd0aChidWZmZXIuZ2V0KCkpKTsKIH0K
ICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0lu
c3BlY3RvclBhZ2VBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNw
ZWN0b3JQYWdlQWdlbnQuaAppbmRleCAzYmNkMDQ4N2NmYzg3NjZiYWEwMWM3ODA0MTczYTE1NzQ3
YjQ3YjJkLi5kMmIwNjVlMTM2NTFmYWZlNzQ3MzI1ZjAyZTc3MDFmYmYxZThlNDVlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclBhZ2VBZ2VudC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUGFnZUFnZW50
LmgKQEAgLTUxLDE0ICs1MSwxMiBAQCBjbGFzcyBQYWdlOwogY2xhc3MgUmVuZGVyT2JqZWN0Owog
Y2xhc3MgU2hhcmVkQnVmZmVyOwogCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQogY2xh
c3MgSW5zcGVjdG9yUGFnZUFnZW50IGZpbmFsIDogcHVibGljIEluc3BlY3RvckFnZW50QmFzZSwg
cHVibGljIEluc3BlY3Rvcjo6UGFnZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7CiAgICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoSW5zcGVjdG9yUGFnZUFnZW50KTsKICAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBJbnNwZWN0b3JQYWdlQWdlbnQoUGFnZUFnZW50Q29u
dGV4dCYsIEluc3BlY3RvckNsaWVudCosIEluc3BlY3Rvck92ZXJsYXkqKTsKLSAgICB+SW5zcGVj
dG9yUGFnZUFnZW50KCkgb3ZlcnJpZGU7CisgICAgfkluc3BlY3RvclBhZ2VBZ2VudCgpOwogCiAg
ICAgZW51bSBSZXNvdXJjZVR5cGUgewogICAgICAgICBEb2N1bWVudFJlc291cmNlLApAQCAtNzks
NyArNzcsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgYm9vbCBzaGFyZWRCdWZmZXJDb250ZW50
KFJlZlB0cjxTaGFyZWRCdWZmZXI+JiYsIGNvbnN0IFN0cmluZyYgdGV4dEVuY29kaW5nTmFtZSwg
Ym9vbCB3aXRoQmFzZTY0RW5jb2RlLCBTdHJpbmcqIHJlc3VsdCk7CiAgICAgc3RhdGljIFZlY3Rv
cjxDYWNoZWRSZXNvdXJjZSo+IGNhY2hlZFJlc291cmNlc0ZvckZyYW1lKEZyYW1lKik7Ci0gICAg
c3RhdGljIHZvaWQgcmVzb3VyY2VDb250ZW50KEVycm9yU3RyaW5nJiwgRnJhbWUqLCBjb25zdCBV
UkwmLCBTdHJpbmcqIHJlc3VsdCwgYm9vbCogYmFzZTY0RW5jb2RlZCk7CisgICAgc3RhdGljIHZv
aWQgcmVzb3VyY2VDb250ZW50KEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nJiwgRnJh
bWUqLCBjb25zdCBVUkwmLCBTdHJpbmcqIHJlc3VsdCwgYm9vbCogYmFzZTY0RW5jb2RlZCk7CiAg
ICAgc3RhdGljIFN0cmluZyBzb3VyY2VNYXBVUkxGb3JSZXNvdXJjZShDYWNoZWRSZXNvdXJjZSop
OwogICAgIHN0YXRpYyBDYWNoZWRSZXNvdXJjZSogY2FjaGVkUmVzb3VyY2UoRnJhbWUqLCBjb25z
dCBVUkwmKTsKICAgICBzdGF0aWMgSW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6UmVzb3VyY2VU
eXBlIHJlc291cmNlVHlwZUpTT04oUmVzb3VyY2VUeXBlKTsKQEAgLTg3LDM5ICs4NSwzOSBAQCBw
dWJsaWM6CiAgICAgc3RhdGljIFJlc291cmNlVHlwZSBpbnNwZWN0b3JSZXNvdXJjZVR5cGUoY29u
c3QgQ2FjaGVkUmVzb3VyY2UmKTsKICAgICBzdGF0aWMgSW5zcGVjdG9yOjpQcm90b2NvbDo6UGFn
ZTo6UmVzb3VyY2VUeXBlIGNhY2hlZFJlc291cmNlVHlwZUpTT04oY29uc3QgQ2FjaGVkUmVzb3Vy
Y2UmKTsKICAgICBzdGF0aWMgRnJhbWUqIGZpbmRGcmFtZVdpdGhTZWN1cml0eU9yaWdpbihQYWdl
JiwgY29uc3QgU3RyaW5nJiBvcmlnaW5SYXdTdHJpbmcpOwotICAgIHN0YXRpYyBEb2N1bWVudExv
YWRlciogYXNzZXJ0RG9jdW1lbnRMb2FkZXIoRXJyb3JTdHJpbmcmLCBGcmFtZSopOworICAgIHN0
YXRpYyBEb2N1bWVudExvYWRlciogYXNzZXJ0RG9jdW1lbnRMb2FkZXIoSW5zcGVjdG9yOjpQcm90
b2NvbDo6RXJyb3JTdHJpbmcmLCBGcmFtZSopOwogCiAgICAgLy8gSW5zcGVjdG9yQWdlbnRCYXNl
Ci0gICAgdm9pZCBkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9udGVu
ZFJvdXRlciosIEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXIqKSBvdmVycmlkZTsKLSAgICB2
b2lkIHdpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlzY29ubmVjdFJl
YXNvbikgb3ZlcnJpZGU7CisgICAgdm9pZCBkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5z
cGVjdG9yOjpGcm9udGVuZFJvdXRlciosIEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXIqKTsK
KyAgICB2b2lkIHdpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlzY29u
bmVjdFJlYXNvbik7CiAKICAgICAvLyBQYWdlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyCi0gICAg
dm9pZCBlbmFibGUoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2b2lkIGRpc2FibGUoRXJy
b3JTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2b2lkIHJlbG9hZChFcnJvclN0cmluZyYsIGNvbnN0
IGJvb2wqIG9wdGlvbmFsUmVsb2FkRnJvbU9yaWdpbiwgY29uc3QgYm9vbCogb3B0aW9uYWxSZXZh
bGlkYXRlQWxsUmVzb3VyY2VzKSBvdmVycmlkZTsKLSAgICB2b2lkIG5hdmlnYXRlKEVycm9yU3Ry
aW5nJiwgY29uc3QgU3RyaW5nJiB1cmwpIG92ZXJyaWRlOwotICAgIHZvaWQgb3ZlcnJpZGVVc2Vy
QWdlbnQoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcqIHZhbHVlKSBvdmVycmlkZTsKLSAgICB2
b2lkIG92ZXJyaWRlU2V0dGluZyhFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgc2V0dGluZywg
Y29uc3QgYm9vbCogdmFsdWUpIG92ZXJyaWRlOwotICAgIHZvaWQgZ2V0Q29va2llcyhFcnJvclN0
cmluZyYsIFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkNv
b2tpZT4+JiBjb29raWVzKSBvdmVycmlkZTsKLSAgICB2b2lkIHNldENvb2tpZShFcnJvclN0cmlu
ZyYsIGNvbnN0IEpTT046Ok9iamVjdCYgY29va2llT2JqZWN0KSBvdmVycmlkZTsKLSAgICB2b2lk
IGRlbGV0ZUNvb2tpZShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgY29va2llTmFtZSwgY29u
c3QgU3RyaW5nJiB1cmwpIG92ZXJyaWRlOwotICAgIHZvaWQgZ2V0UmVzb3VyY2VUcmVlKEVycm9y
U3RyaW5nJiwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkZyYW1lUmVzb3VyY2VU
cmVlPiYpIG92ZXJyaWRlOwotICAgIHZvaWQgZ2V0UmVzb3VyY2VDb250ZW50KEVycm9yU3RyaW5n
JiwgY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBjb25zdCBTdHJpbmcmIHVybCwgU3RyaW5nKiBjb250
ZW50LCBib29sKiBiYXNlNjRFbmNvZGVkKSBvdmVycmlkZTsKLSAgICB2b2lkIHNldEJvb3RzdHJh
cFNjcmlwdChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxTb3VyY2UpIGZpbmFs
OwotICAgIHZvaWQgc2VhcmNoSW5SZXNvdXJjZShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYg
ZnJhbWVJZCwgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgcXVlcnksIGNvbnN0IGJv
b2wqIG9wdGlvbmFsQ2FzZVNlbnNpdGl2ZSwgY29uc3QgYm9vbCogb3B0aW9uYWxJc1JlZ2V4LCBj
b25zdCBTdHJpbmcqIG9wdGlvbmFsUmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpHZW5lcmljVHlwZXM6OlNlYXJjaE1hdGNoPj4mKSBvdmVycmlkZTsK
LSAgICB2b2lkIHNlYXJjaEluUmVzb3VyY2VzKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwg
Y29uc3QgYm9vbCogY2FzZVNlbnNpdGl2ZSwgY29uc3QgYm9vbCogaXNSZWdleCwgUmVmUHRyPEpT
T046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6U2VhcmNoUmVzdWx0Pj4mKSBv
dmVycmlkZTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGVu
YWJsZSgpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZGlz
YWJsZSgpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gcmVs
b2FkKE9wdGlvbmFsPGJvb2w+JiYgaWdub3JlQ2FjaGUsIE9wdGlvbmFsPGJvb2w+JiYgcmV2YWxp
ZGF0ZUFsbFJlc291cmNlcyk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdP
cjx2b2lkPiBuYXZpZ2F0ZShjb25zdCBTdHJpbmcmIHVybCk7CisgICAgSW5zcGVjdG9yOjpQcm90
b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBvdmVycmlkZVVzZXJBZ2VudChjb25zdCBTdHJpbmcm
KTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IG92ZXJyaWRl
U2V0dGluZyhJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpTZXR0aW5nLCBPcHRpb25hbDxib29s
PiYmIHZhbHVlKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxK
U09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkNvb2tpZT4+PiBnZXRDb29r
aWVzKCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzZXRD
b29raWUoUmVmPEpTT046Ok9iamVjdD4mJik7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJy
b3JTdHJpbmdPcjx2b2lkPiBkZWxldGVDb29raWUoY29uc3QgU3RyaW5nJiBjb29raWVOYW1lLCBj
b25zdCBTdHJpbmcmIHVybCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdP
cjxSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6RnJhbWVSZXNvdXJjZVRyZWU+PiBnZXRS
ZXNvdXJjZVRyZWUoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHN0
ZDo6dHVwbGU8U3RyaW5nLCBib29sIC8qIGJhc2U2NEVuY29kZWQgKi8+PiBnZXRSZXNvdXJjZUNv
bnRlbnQoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6RnJhbWVJZCYsIGNvbnN0
IFN0cmluZyYgdXJsKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZv
aWQ+IHNldEJvb3RzdHJhcFNjcmlwdChjb25zdCBTdHJpbmcmIHNvdXJjZSk7CisgICAgSW5zcGVj
dG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6
OlByb3RvY29sOjpHZW5lcmljVHlwZXM6OlNlYXJjaE1hdGNoPj4+IHNlYXJjaEluUmVzb3VyY2Uo
Y29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6RnJhbWVJZCYsIGNvbnN0IFN0cmlu
ZyYgdXJsLCBjb25zdCBTdHJpbmcmIHF1ZXJ5LCBPcHRpb25hbDxib29sPiYmIGNhc2VTZW5zaXRp
dmUsIE9wdGlvbmFsPGJvb2w+JiYgaXNSZWdleCwgY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6
TmV0d29yazo6UmVxdWVzdElkJik7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJp
bmdPcjxSZWY8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpTZWFyY2hS
ZXN1bHQ+Pj4gc2VhcmNoSW5SZXNvdXJjZXMoY29uc3QgU3RyaW5nJiwgT3B0aW9uYWw8Ym9vbD4m
JiBjYXNlU2Vuc2l0aXZlLCBPcHRpb25hbDxib29sPiYmIGlzUmVnZXgpOwogI2lmICFQTEFURk9S
TShJT1NfRkFNSUxZKQotICAgIHZvaWQgc2V0U2hvd1J1bGVycyhFcnJvclN0cmluZyYsIGJvb2wp
IG92ZXJyaWRlOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4g
c2V0U2hvd1J1bGVycyhib29sKTsKICNlbmRpZgotICAgIHZvaWQgc2V0U2hvd1BhaW50UmVjdHMo
RXJyb3JTdHJpbmcmLCBib29sIHNob3cpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0RW11bGF0ZWRN
ZWRpYShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlOworICAgIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc2V0U2hvd1BhaW50UmVjdHMoYm9vbCk7
CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzZXRFbXVsYXRl
ZE1lZGlhKGNvbnN0IFN0cmluZyYpOwogI2lmIEVOQUJMRShEQVJLX01PREVfQ1NTKSB8fCBIQVZF
KE9TX0RBUktfTU9ERV9TVVBQT1JUKQotICAgIHZvaWQgc2V0Rm9yY2VkQXBwZWFyYW5jZShFcnJv
clN0cmluZyYsIGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlOworICAgIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc2V0Rm9yY2VkQXBwZWFyYW5jZShPcHRpb25hbDxJbnNw
ZWN0b3I6OlByb3RvY29sOjpQYWdlOjpBcHBlYXJhbmNlPiYmKTsKICNlbmRpZgotICAgIHZvaWQg
c25hcHNob3ROb2RlKEVycm9yU3RyaW5nJiwgaW50IG5vZGVJZCwgU3RyaW5nKiBvdXREYXRhVVJM
KSBvdmVycmlkZTsKLSAgICB2b2lkIHNuYXBzaG90UmVjdChFcnJvclN0cmluZyYsIGludCB4LCBp
bnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBjb25zdCBTdHJpbmcmIGNvb3JkaW5hdGVTeXN0
ZW0sIFN0cmluZyogb3V0RGF0YVVSTCkgb3ZlcnJpZGU7CisgICAgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6RXJyb3JTdHJpbmdPcjxTdHJpbmc+IHNuYXBzaG90Tm9kZShJbnNwZWN0b3I6OlByb3RvY29s
OjpET006Ok5vZGVJZCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxT
dHJpbmc+IHNuYXBzaG90UmVjdChpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCwg
SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6Q29vcmRpbmF0ZVN5c3RlbSk7CiAjaWYgRU5BQkxF
KFdFQl9BUkNISVZFKSAmJiBVU0UoQ0YpCi0gICAgdm9pZCBhcmNoaXZlKEVycm9yU3RyaW5nJiwg
U3RyaW5nKiBkYXRhKSBvdmVycmlkZTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0
cmluZ09yPFN0cmluZz4gYXJjaGl2ZSgpOwogI2VuZGlmCiAKICAgICAvLyBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb24KQEAgLTE0MywxMCArMTQxLDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIGRpZFNj
cm9sbCgpOwogICAgIHZvaWQgZGlkUmVjYWxjdWxhdGVTdHlsZSgpOwogCi0gICAgRnJhbWUqIGZy
YW1lRm9ySWQoY29uc3QgU3RyaW5nJiBmcmFtZUlkKTsKKyAgICBGcmFtZSogZnJhbWVGb3JJZChj
b25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpGcmFtZUlkJik7CiAgICAgV0VCQ09S
RV9FWFBPUlQgU3RyaW5nIGZyYW1lSWQoRnJhbWUqKTsKICAgICBTdHJpbmcgbG9hZGVySWQoRG9j
dW1lbnRMb2FkZXIqKTsKLSAgICBGcmFtZSogYXNzZXJ0RnJhbWUoRXJyb3JTdHJpbmcmLCBjb25z
dCBTdHJpbmcmIGZyYW1lSWQpOworICAgIEZyYW1lKiBhc3NlcnRGcmFtZShJbnNwZWN0b3I6OlBy
b3RvY29sOjpFcnJvclN0cmluZyYsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6
OkZyYW1lSWQmKTsKIAogcHJpdmF0ZToKICAgICBkb3VibGUgdGltZXN0YW1wKCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclRpbWVsaW5lQWdl
bnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JUaW1lbGlu
ZUFnZW50LmNwcAppbmRleCAwYjQ2NjA2OGQ5MGZlMTQ5NWE4NDI5Yjc2MzlmMzEzNWJkNDMzZjQ4
Li4wZGY5NTA1NzAzZDBiMzgxODExMjVlNTMwMWUyMDQxMTI3ZmMzYjU1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclRpbWVsaW5lQWdlbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yVGltZWxpbmVB
Z2VudC5jcHAKQEAgLTEwMiw4MCArMTAyLDgyIEBAIHZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2Vu
dDo6ZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRSb3V0CiAK
IHZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tl
bmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKQogewotICAgIEVycm9yU3RyaW5nIGlnbm9y
ZWQ7Ci0gICAgZGlzYWJsZShpZ25vcmVkKTsKKyAgICBkaXNhYmxlKCk7CiB9CiAKLXZvaWQgSW5z
cGVjdG9yVGltZWxpbmVBZ2VudDo6ZW5hYmxlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZykKK1By
b3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OmVuYWJs
ZSgpCiB7Ci0gICAgaWYgKG1faW5zdHJ1bWVudGluZ0FnZW50cy5lbmFibGVkVGltZWxpbmVBZ2Vu
dCgpID09IHRoaXMpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiVGltZWxpbmUgZG9tYWluIGFs
cmVhZHkgZW5hYmxlZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAobV9pbnN0
cnVtZW50aW5nQWdlbnRzLmVuYWJsZWRUaW1lbGluZUFnZW50KCkgPT0gdGhpcykKKyAgICAgICAg
cmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJUaW1lbGluZSBkb21haW4gYWxyZWFkeSBlbmFibGVkIl9z
KTsKIAogICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy5zZXRFbmFibGVkVGltZWxpbmVBZ2VudCh0
aGlzKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2Vu
dDo6ZGlzYWJsZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCitQcm90b2NvbDo6RXJyb3JTdHJp
bmdPcjx2b2lkPiBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpkaXNhYmxlKCkKIHsKLSAgICBpZiAo
bV9pbnN0cnVtZW50aW5nQWdlbnRzLmVuYWJsZWRUaW1lbGluZUFnZW50KCkgIT0gdGhpcykgewot
ICAgICAgICBlcnJvclN0cmluZyA9ICJUaW1lbGluZSBkb21haW4gYWxyZWFkeSBkaXNhYmxlZCJf
czsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAobV9pbnN0cnVtZW50aW5nQWdlbnRz
LmVuYWJsZWRUaW1lbGluZUFnZW50KCkgIT0gdGhpcykKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4
cGVjdGVkKCJUaW1lbGluZSBkb21haW4gYWxyZWFkeSBkaXNhYmxlZCJfcyk7CiAKICAgICBtX2lu
c3RydW1lbnRpbmdBZ2VudHMuc2V0RW5hYmxlZFRpbWVsaW5lQWdlbnQobnVsbHB0cik7CiAKLSAg
ICBFcnJvclN0cmluZyBpZ25vcmVkOwotICAgIHN0b3AoaWdub3JlZCk7CisgICAgc3RvcCgpOwog
CiAgICAgbV9hdXRvQ2FwdHVyZUVuYWJsZWQgPSBmYWxzZTsKICAgICBtX2luc3RydW1lbnRzLmNs
ZWFyKCk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvclRpbWVsaW5lQWdl
bnQ6OnN0YXJ0KEVycm9yU3RyaW5nJiwgY29uc3QgaW50KiBtYXhDYWxsU3RhY2tEZXB0aCkKK1By
b3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OnN0YXJ0
KE9wdGlvbmFsPGludD4mJiBtYXhDYWxsU3RhY2tEZXB0aCkKIHsKICAgICBtX3RyYWNraW5nRnJv
bUZyb250ZW5kID0gdHJ1ZTsKIAotICAgIGludGVybmFsU3RhcnQobWF4Q2FsbFN0YWNrRGVwdGgp
OworICAgIGludGVybmFsU3RhcnQoV1RGTW92ZShtYXhDYWxsU3RhY2tEZXB0aCkpOworCisgICAg
cmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpzdG9wKEVycm9y
U3RyaW5nJikKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvclRpbWVsaW5l
QWdlbnQ6OnN0b3AoKQogewogICAgIGludGVybmFsU3RvcCgpOwogCiAgICAgbV90cmFja2luZ0Zy
b21Gcm9udGVuZCA9IGZhbHNlOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0
b3JUaW1lbGluZUFnZW50OjpzZXRBdXRvQ2FwdHVyZUVuYWJsZWQoRXJyb3JTdHJpbmcmLCBib29s
IGVuYWJsZWQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JUaW1lbGlu
ZUFnZW50OjpzZXRBdXRvQ2FwdHVyZUVuYWJsZWQoYm9vbCBlbmFibGVkKQogewogICAgIG1fYXV0
b0NhcHR1cmVFbmFibGVkID0gZW5hYmxlZDsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQg
SW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6c2V0SW5zdHJ1bWVudHMoRXJyb3JTdHJpbmcmIGVycm9y
U3RyaW5nLCBjb25zdCBKU09OOjpBcnJheSYgaW5zdHJ1bWVudHMpCitQcm90b2NvbDo6RXJyb3JT
dHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpzZXRJbnN0cnVtZW50cyhSZWY8
SlNPTjo6QXJyYXk+JiYgaW5zdHJ1bWVudHMpCiB7CiAgICAgVmVjdG9yPFByb3RvY29sOjpUaW1l
bGluZTo6SW5zdHJ1bWVudD4gbmV3SW5zdHJ1bWVudHM7Ci0gICAgbmV3SW5zdHJ1bWVudHMucmVz
ZXJ2ZUNhcGFjaXR5KGluc3RydW1lbnRzLmxlbmd0aCgpKTsKKyAgICBuZXdJbnN0cnVtZW50cy5y
ZXNlcnZlQ2FwYWNpdHkoaW5zdHJ1bWVudHMtPmxlbmd0aCgpKTsKIAotICAgIGZvciAoY29uc3Qg
YXV0byYgaW5zdHJ1bWVudFZhbHVlIDogaW5zdHJ1bWVudHMpIHsKLSAgICAgICAgU3RyaW5nIGVu
dW1WYWx1ZVN0cmluZzsKLSAgICAgICAgaWYgKCFpbnN0cnVtZW50VmFsdWUtPmFzU3RyaW5nKGVu
dW1WYWx1ZVN0cmluZykpIHsKLSAgICAgICAgICAgIGVycm9yU3RyaW5nID0gIlVuZXhwZWN0ZWQg
bm9uLXN0cmluZyB2YWx1ZSBpbiBnaXZlbiBpbnN0cnVtZW50cyJfczsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQorICAgIGZvciAoY29uc3QgYXV0byYgaW5zdHJ1bWVudFZhbHVlIDog
aW5zdHJ1bWVudHMuZ2V0KCkpIHsKKyAgICAgICAgYXV0byBpbnN0cnVtZW50U3RyaW5nID0gaW5z
dHJ1bWVudFZhbHVlLT5hc1N0cmluZygpOworICAgICAgICBpZiAoIWluc3RydW1lbnRTdHJpbmcp
CisgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIlVuZXhwZWN0ZWQgbm9uLXN0cmlu
ZyB2YWx1ZSBpbiBnaXZlbiBpbnN0cnVtZW50cyJfcyk7CiAKLSAgICAgICAgT3B0aW9uYWw8UHJv
dG9jb2w6OlRpbWVsaW5lOjpJbnN0cnVtZW50PiBpbnN0cnVtZW50VHlwZSA9IFByb3RvY29sOjpJ
bnNwZWN0b3JIZWxwZXJzOjpwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8UHJvdG9jb2w6OlRpbWVs
aW5lOjpJbnN0cnVtZW50PihlbnVtVmFsdWVTdHJpbmcpOwotICAgICAgICBpZiAoIWluc3RydW1l
bnRUeXBlKSB7Ci0gICAgICAgICAgICBlcnJvclN0cmluZyA9IG1ha2VTdHJpbmcoIlVua25vd24g
aXRlbSBpbiBnaXZlbiBpbnN0cnVtZW50czogIiwgZW51bVZhbHVlU3RyaW5nKTsKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQorICAgICAgICBhdXRvIGluc3RydW1lbnQgPSBQcm90b2Nv
bDo6SGVscGVyczo6cGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPFByb3RvY29sOjpUaW1lbGluZTo6
SW5zdHJ1bWVudD4oaW5zdHJ1bWVudFN0cmluZyk7CisgICAgICAgIGlmICghaW5zdHJ1bWVudCkK
KyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChtYWtlU3RyaW5nKCJVbmtub3duIGlu
c3RydW1lbnQ6ICIsIGluc3RydW1lbnRTdHJpbmcpKTsKIAotICAgICAgICBuZXdJbnN0cnVtZW50
cy51bmNoZWNrZWRBcHBlbmQoKmluc3RydW1lbnRUeXBlKTsKKyAgICAgICAgbmV3SW5zdHJ1bWVu
dHMudW5jaGVja2VkQXBwZW5kKCppbnN0cnVtZW50KTsKICAgICB9CiAKICAgICBtX2luc3RydW1l
bnRzLnN3YXAobmV3SW5zdHJ1bWVudHMpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJ
bnNwZWN0b3JUaW1lbGluZUFnZW50OjppbnRlcm5hbFN0YXJ0KGNvbnN0IGludCogbWF4Q2FsbFN0
YWNrRGVwdGgpCit2b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OmludGVybmFsU3RhcnQoT3B0
aW9uYWw8aW50PiYmIG1heENhbGxTdGFja0RlcHRoKQogewogICAgIGlmIChtX3RyYWNraW5nKQog
ICAgICAgICByZXR1cm47CkBAIC0yOTIsOCArMjk0LDcgQEAgdm9pZCBJbnNwZWN0b3JUaW1lbGlu
ZUFnZW50OjpzdGFydEZyb21Db25zb2xlKEpTQzo6SlNHbG9iYWxPYmplY3QqIGV4ZWMsIGNvbnN0
IFMKICAgICAvLyBBbGxvdyBkdXBsaWNhdGUgdW5uYW1lZCBwcm9maWxlcy4gRGlzYWxsb3cgZHVw
bGljYXRlIG5hbWVkIHByb2ZpbGVzLgogICAgIGlmICghdGl0bGUuaXNFbXB0eSgpKSB7CiAgICAg
ICAgIGZvciAoY29uc3QgVGltZWxpbmVSZWNvcmRFbnRyeSYgcmVjb3JkIDogbV9wZW5kaW5nQ29u
c29sZVByb2ZpbGVSZWNvcmRzKSB7Ci0gICAgICAgICAgICBTdHJpbmcgcmVjb3JkVGl0bGU7Ci0g
ICAgICAgICAgICByZWNvcmQuZGF0YS0+Z2V0U3RyaW5nKCJ0aXRsZSJfcywgcmVjb3JkVGl0bGUp
OworICAgICAgICAgICAgYXV0byByZWNvcmRUaXRsZSA9IHJlY29yZC5kYXRhLT5nZXRTdHJpbmco
InRpdGxlIl9zKTsKICAgICAgICAgICAgIGlmIChyZWNvcmRUaXRsZSA9PSB0aXRsZSkgewogICAg
ICAgICAgICAgICAgIGlmIChhdXRvKiBjb25zb2xlQWdlbnQgPSBtX2luc3RydW1lbnRpbmdBZ2Vu
dHMud2ViQ29uc29sZUFnZW50KCkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFNl
bmQgYW4gZW51bSB0byB0aGUgZnJvbnRlbmQgZm9yIGxvY2FsaXphdGlvbj8KQEAgLTMxOCw4ICsz
MTksNyBAQCB2b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OnN0b3BGcm9tQ29uc29sZShKU0M6
OkpTR2xvYmFsT2JqZWN0KiwgY29uc3QgU3RyaW5nJgogICAgIGZvciAoaW50IGkgPSBtX3BlbmRp
bmdDb25zb2xlUHJvZmlsZVJlY29yZHMuc2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKICAgICAg
ICAgY29uc3QgVGltZWxpbmVSZWNvcmRFbnRyeSYgcmVjb3JkID0gbV9wZW5kaW5nQ29uc29sZVBy
b2ZpbGVSZWNvcmRzW2ldOwogCi0gICAgICAgIFN0cmluZyByZWNvcmRUaXRsZTsKLSAgICAgICAg
cmVjb3JkLmRhdGEtPmdldFN0cmluZygidGl0bGUiX3MsIHJlY29yZFRpdGxlKTsKKyAgICAgICAg
YXV0byByZWNvcmRUaXRsZSA9IHJlY29yZC5kYXRhLT5nZXRTdHJpbmcoInRpdGxlIl9zKTsKICAg
ICAgICAgaWYgKHRpdGxlLmlzRW1wdHkoKSB8fCByZWNvcmRUaXRsZSA9PSB0aXRsZSkgewogICAg
ICAgICAgICAgZGlkQ29tcGxldGVSZWNvcmRFbnRyeShyZWNvcmQpOwogICAgICAgICAgICAgbV9w
ZW5kaW5nQ29uc29sZVByb2ZpbGVSZWNvcmRzLnJlbW92ZShpKTsKQEAgLTQ5NiwxMCArNDk2LDgg
QEAgdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjptYWluRnJhbWVTdGFydGVkTG9hZGluZygp
CiAgICAgbV9hdXRvQ2FwdHVyZVBoYXNlID0gQXV0b0NhcHR1cmVQaGFzZTo6QmVmb3JlTG9hZDsK
IAogICAgIC8vIFByZS1lbXB0aXZlbHkgZGlzYWJsZSBicmVha3BvaW50cy4gVGhlIGZyb250ZW5k
IG11c3QgcmUtZW5hYmxlIHRoZW0uCi0gICAgaWYgKGF1dG8qIHdlYkRlYnVnZ2VyQWdlbnQgPSBt
X2luc3RydW1lbnRpbmdBZ2VudHMuZW5hYmxlZFdlYkRlYnVnZ2VyQWdlbnQoKSkgewotICAgICAg
ICBFcnJvclN0cmluZyBpZ25vcmVkOwotICAgICAgICB3ZWJEZWJ1Z2dlckFnZW50LT5zZXRCcmVh
a3BvaW50c0FjdGl2ZShpZ25vcmVkLCBmYWxzZSk7Ci0gICAgfQorICAgIGlmIChhdXRvKiB3ZWJE
ZWJ1Z2dlckFnZW50ID0gbV9pbnN0cnVtZW50aW5nQWdlbnRzLmVuYWJsZWRXZWJEZWJ1Z2dlckFn
ZW50KCkpCisgICAgICAgIHdlYkRlYnVnZ2VyQWdlbnQtPnNldEJyZWFrcG9pbnRzQWN0aXZlKGZh
bHNlKTsKIAogICAgIC8vIEluZm9ybSB0aGUgZnJvbnRlbmQgd2Ugc3RhcnRlZCBhbiBhdXRvIGNh
cHR1cmUuIFRoZSBmcm9udGVuZCBtdXN0IHN0b3AgY2FwdHVyZS4KICAgICBtX2Zyb250ZW5kRGlz
cGF0Y2hlci0+YXV0b0NhcHR1cmVTdGFydGVkKCk7CkBAIC01MjMsMTAgKzUyMSw4IEBAIHZvaWQg
SW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6c3RhcnRQcm9ncmFtbWF0aWNDYXB0dXJlKCkKICAgICAv
LyBEaXNhYmxlIGJyZWFrcG9pbnRzIGR1cmluZyBwcm9ncmFtbWF0aWMgY2FwdHVyZS4KICAgICBp
ZiAoYXV0byogd2ViRGVidWdnZXJBZ2VudCA9IG1faW5zdHJ1bWVudGluZ0FnZW50cy5lbmFibGVk
V2ViRGVidWdnZXJBZ2VudCgpKSB7CiAgICAgICAgIG1fcHJvZ3JhbW1hdGljQ2FwdHVyZVJlc3Rv
cmVCcmVha3BvaW50QWN0aXZlVmFsdWUgPSB3ZWJEZWJ1Z2dlckFnZW50LT5icmVha3BvaW50c0Fj
dGl2ZSgpOwotICAgICAgICBpZiAobV9wcm9ncmFtbWF0aWNDYXB0dXJlUmVzdG9yZUJyZWFrcG9p
bnRBY3RpdmVWYWx1ZSkgewotICAgICAgICAgICAgRXJyb3JTdHJpbmcgaWdub3JlZDsKLSAgICAg
ICAgICAgIHdlYkRlYnVnZ2VyQWdlbnQtPnNldEJyZWFrcG9pbnRzQWN0aXZlKGlnbm9yZWQsIGZh
bHNlKTsKLSAgICAgICAgfQorICAgICAgICBpZiAobV9wcm9ncmFtbWF0aWNDYXB0dXJlUmVzdG9y
ZUJyZWFrcG9pbnRBY3RpdmVWYWx1ZSkKKyAgICAgICAgICAgIHdlYkRlYnVnZ2VyQWdlbnQtPnNl
dEJyZWFrcG9pbnRzQWN0aXZlKGZhbHNlKTsKICAgICB9IGVsc2UKICAgICAgICAgbV9wcm9ncmFt
bWF0aWNDYXB0dXJlUmVzdG9yZUJyZWFrcG9pbnRBY3RpdmVWYWx1ZSA9IGZhbHNlOwogCkBAIC01
NDYsMTAgKzU0Miw4IEBAIHZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6c3RvcFByb2dyYW1t
YXRpY0NhcHR1cmUoKQogCiAgICAgLy8gUmUtZW5hYmxlIGJyZWFrcG9pbnRzIGlmIHRoZXkgd2Vy
ZSBlbmFibGVkLgogICAgIGlmIChtX3Byb2dyYW1tYXRpY0NhcHR1cmVSZXN0b3JlQnJlYWtwb2lu
dEFjdGl2ZVZhbHVlKSB7Ci0gICAgICAgIGlmIChhdXRvKiB3ZWJEZWJ1Z2dlckFnZW50ID0gbV9p
bnN0cnVtZW50aW5nQWdlbnRzLmVuYWJsZWRXZWJEZWJ1Z2dlckFnZW50KCkpIHsKLSAgICAgICAg
ICAgIEVycm9yU3RyaW5nIGlnbm9yZWQ7Ci0gICAgICAgICAgICB3ZWJEZWJ1Z2dlckFnZW50LT5z
ZXRCcmVha3BvaW50c0FjdGl2ZShpZ25vcmVkLCB0cnVlKTsKLSAgICAgICAgfQorICAgICAgICBp
ZiAoYXV0byogd2ViRGVidWdnZXJBZ2VudCA9IG1faW5zdHJ1bWVudGluZ0FnZW50cy5lbmFibGVk
V2ViRGVidWdnZXJBZ2VudCgpKQorICAgICAgICAgICAgd2ViRGVidWdnZXJBZ2VudC0+c2V0QnJl
YWtwb2ludHNBY3RpdmUodHJ1ZSk7CiAgICAgfQogfQogCkBAIC01NTcsMjYgKzU1MSwyNiBAQCB2
b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OnRvZ2dsZUluc3RydW1lbnRzKEluc3RydW1lbnRT
dGF0ZSBzdGF0ZSkKIHsKICAgICBmb3IgKGF1dG8gaW5zdHJ1bWVudFR5cGUgOiBtX2luc3RydW1l
bnRzKSB7CiAgICAgICAgIHN3aXRjaCAoaW5zdHJ1bWVudFR5cGUpIHsKLSAgICAgICAgY2FzZSBJ
bnNwZWN0b3I6OlByb3RvY29sOjpUaW1lbGluZTo6SW5zdHJ1bWVudDo6U2NyaXB0UHJvZmlsZXI6
IHsKKyAgICAgICAgY2FzZSBQcm90b2NvbDo6VGltZWxpbmU6Okluc3RydW1lbnQ6OlNjcmlwdFBy
b2ZpbGVyOiB7CiAgICAgICAgICAgICB0b2dnbGVTY3JpcHRQcm9maWxlckluc3RydW1lbnQoc3Rh
dGUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgY2FzZSBJbnNwZWN0
b3I6OlByb3RvY29sOjpUaW1lbGluZTo6SW5zdHJ1bWVudDo6SGVhcDogeworICAgICAgICBjYXNl
IFByb3RvY29sOjpUaW1lbGluZTo6SW5zdHJ1bWVudDo6SGVhcDogewogICAgICAgICAgICAgdG9n
Z2xlSGVhcEluc3RydW1lbnQoc3RhdGUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
LSAgICAgICAgY2FzZSBJbnNwZWN0b3I6OlByb3RvY29sOjpUaW1lbGluZTo6SW5zdHJ1bWVudDo6
Q1BVOiB7CisgICAgICAgIGNhc2UgUHJvdG9jb2w6OlRpbWVsaW5lOjpJbnN0cnVtZW50OjpDUFU6
IHsKICAgICAgICAgICAgIHRvZ2dsZUNQVUluc3RydW1lbnQoc3RhdGUpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgY2FzZSBJbnNwZWN0b3I6OlByb3RvY29sOjpUaW1l
bGluZTo6SW5zdHJ1bWVudDo6TWVtb3J5OiB7CisgICAgICAgIGNhc2UgUHJvdG9jb2w6OlRpbWVs
aW5lOjpJbnN0cnVtZW50OjpNZW1vcnk6IHsKICAgICAgICAgICAgIHRvZ2dsZU1lbW9yeUluc3Ry
dW1lbnQoc3RhdGUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgY2Fz
ZSBJbnNwZWN0b3I6OlByb3RvY29sOjpUaW1lbGluZTo6SW5zdHJ1bWVudDo6VGltZWxpbmU6Cisg
ICAgICAgIGNhc2UgUHJvdG9jb2w6OlRpbWVsaW5lOjpJbnN0cnVtZW50OjpUaW1lbGluZToKICAg
ICAgICAgICAgIHRvZ2dsZVRpbWVsaW5lSW5zdHJ1bWVudChzdGF0ZSk7CiAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBJbnNwZWN0b3I6OlByb3RvY29sOjpUaW1lbGluZTo6SW5zdHJ1
bWVudDo6QW5pbWF0aW9uOgorICAgICAgICBjYXNlIFByb3RvY29sOjpUaW1lbGluZTo6SW5zdHJ1
bWVudDo6QW5pbWF0aW9uOgogICAgICAgICAgICAgdG9nZ2xlQW5pbWF0aW9uSW5zdHJ1bWVudChz
dGF0ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtNTg2LDI0ICs1ODAsMjEg
QEAgdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50Ojp0b2dnbGVJbnN0cnVtZW50cyhJbnN0cnVt
ZW50U3RhdGUgc3RhdGUpCiB2b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OnRvZ2dsZVNjcmlw
dFByb2ZpbGVySW5zdHJ1bWVudChJbnN0cnVtZW50U3RhdGUgc3RhdGUpCiB7CiAgICAgaWYgKGF1
dG8qIHNjcmlwdFByb2ZpbGVyQWdlbnQgPSBtX2luc3RydW1lbnRpbmdBZ2VudHMucGVyc2lzdGVu
dFNjcmlwdFByb2ZpbGVyQWdlbnQoKSkgewotICAgICAgICBFcnJvclN0cmluZyBpZ25vcmVkOwot
ICAgICAgICBpZiAoc3RhdGUgPT0gSW5zdHJ1bWVudFN0YXRlOjpTdGFydCkgewotICAgICAgICAg
ICAgY29uc3QgYm9vbCBpbmNsdWRlU2FtcGxlcyA9IHRydWU7Ci0gICAgICAgICAgICBzY3JpcHRQ
cm9maWxlckFnZW50LT5zdGFydFRyYWNraW5nKGlnbm9yZWQsICZpbmNsdWRlU2FtcGxlcyk7Ci0g
ICAgICAgIH0gZWxzZQotICAgICAgICAgICAgc2NyaXB0UHJvZmlsZXJBZ2VudC0+c3RvcFRyYWNr
aW5nKGlnbm9yZWQpOworICAgICAgICBpZiAoc3RhdGUgPT0gSW5zdHJ1bWVudFN0YXRlOjpTdGFy
dCkKKyAgICAgICAgICAgIHNjcmlwdFByb2ZpbGVyQWdlbnQtPnN0YXJ0VHJhY2tpbmcodHJ1ZSk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNjcmlwdFByb2ZpbGVyQWdlbnQtPnN0b3BUcmFj
a2luZygpOwogICAgIH0KIH0KIAogdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50Ojp0b2dnbGVI
ZWFwSW5zdHJ1bWVudChJbnN0cnVtZW50U3RhdGUgc3RhdGUpCiB7CiAgICAgaWYgKGF1dG8qIGhl
YXBBZ2VudCA9IG1faW5zdHJ1bWVudGluZ0FnZW50cy5lbmFibGVkUGFnZUhlYXBBZ2VudCgpKSB7
Ci0gICAgICAgIEVycm9yU3RyaW5nIGlnbm9yZWQ7CiAgICAgICAgIGlmIChzdGF0ZSA9PSBJbnN0
cnVtZW50U3RhdGU6OlN0YXJ0KSB7CiAgICAgICAgICAgICBpZiAobV9hdXRvQ2FwdHVyZVBoYXNl
ID09IEF1dG9DYXB0dXJlUGhhc2U6Ok5vbmUgfHwgbV9hdXRvQ2FwdHVyZVBoYXNlID09IEF1dG9D
YXB0dXJlUGhhc2U6OkZpcnN0TmF2aWdhdGlvbikKLSAgICAgICAgICAgICAgICBoZWFwQWdlbnQt
PnN0YXJ0VHJhY2tpbmcoaWdub3JlZCk7CisgICAgICAgICAgICAgICAgaGVhcEFnZW50LT5zdGFy
dFRyYWNraW5nKCk7CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgaGVhcEFnZW50LT5zdG9w
VHJhY2tpbmcoaWdub3JlZCk7CisgICAgICAgICAgICBoZWFwQWdlbnQtPnN0b3BUcmFja2luZygp
OwogICAgIH0KIH0KIApAQCAtNjExLDExICs2MDIsMTAgQEAgdm9pZCBJbnNwZWN0b3JUaW1lbGlu
ZUFnZW50Ojp0b2dnbGVDUFVJbnN0cnVtZW50KEluc3RydW1lbnRTdGF0ZSBzdGF0ZSkKIHsKICNp
ZiBFTkFCTEUoUkVTT1VSQ0VfVVNBR0UpCiAgICAgaWYgKGF1dG8qIGNwdVByb2ZpbGVyQWdlbnQg
PSBtX2luc3RydW1lbnRpbmdBZ2VudHMucGVyc2lzdGVudENQVVByb2ZpbGVyQWdlbnQoKSkgewot
ICAgICAgICBFcnJvclN0cmluZyBpZ25vcmVkOwogICAgICAgICBpZiAoc3RhdGUgPT0gSW5zdHJ1
bWVudFN0YXRlOjpTdGFydCkKLSAgICAgICAgICAgIGNwdVByb2ZpbGVyQWdlbnQtPnN0YXJ0VHJh
Y2tpbmcoaWdub3JlZCk7CisgICAgICAgICAgICBjcHVQcm9maWxlckFnZW50LT5zdGFydFRyYWNr
aW5nKCk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNwdVByb2ZpbGVyQWdlbnQtPnN0b3BU
cmFja2luZyhpZ25vcmVkKTsKKyAgICAgICAgICAgIGNwdVByb2ZpbGVyQWdlbnQtPnN0b3BUcmFj
a2luZygpOwogICAgIH0KICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTYyNiwx
MSArNjE2LDEwIEBAIHZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6dG9nZ2xlTWVtb3J5SW5z
dHJ1bWVudChJbnN0cnVtZW50U3RhdGUgc3RhdGUpCiB7CiAjaWYgRU5BQkxFKFJFU09VUkNFX1VT
QUdFKQogICAgIGlmIChhdXRvKiBtZW1vcnlBZ2VudCA9IG1faW5zdHJ1bWVudGluZ0FnZW50cy5w
ZXJzaXN0ZW50TWVtb3J5QWdlbnQoKSkgewotICAgICAgICBFcnJvclN0cmluZyBpZ25vcmVkOwog
ICAgICAgICBpZiAoc3RhdGUgPT0gSW5zdHJ1bWVudFN0YXRlOjpTdGFydCkKLSAgICAgICAgICAg
IG1lbW9yeUFnZW50LT5zdGFydFRyYWNraW5nKGlnbm9yZWQpOworICAgICAgICAgICAgbWVtb3J5
QWdlbnQtPnN0YXJ0VHJhY2tpbmcoKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbWVtb3J5
QWdlbnQtPnN0b3BUcmFja2luZyhpZ25vcmVkKTsKKyAgICAgICAgICAgIG1lbW9yeUFnZW50LT5z
dG9wVHJhY2tpbmcoKTsKICAgICB9CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBA
IC02NDAsNyArNjI5LDcgQEAgdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50Ojp0b2dnbGVNZW1v
cnlJbnN0cnVtZW50KEluc3RydW1lbnRTdGF0ZSBzdGF0ZSkKIHZvaWQgSW5zcGVjdG9yVGltZWxp
bmVBZ2VudDo6dG9nZ2xlVGltZWxpbmVJbnN0cnVtZW50KEluc3RydW1lbnRTdGF0ZSBzdGF0ZSkK
IHsKICAgICBpZiAoc3RhdGUgPT0gSW5zdHJ1bWVudFN0YXRlOjpTdGFydCkKLSAgICAgICAgaW50
ZXJuYWxTdGFydCgpOworICAgICAgICBpbnRlcm5hbFN0YXJ0KFdURjo6bnVsbG9wdCk7CiAgICAg
ZWxzZQogICAgICAgICBpbnRlcm5hbFN0b3AoKTsKIH0KQEAgLTY0OCwxMSArNjM3LDEwIEBAIHZv
aWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6dG9nZ2xlVGltZWxpbmVJbnN0cnVtZW50KEluc3Ry
dW1lbnRTdGF0ZSBzdGF0ZSkKIHZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6dG9nZ2xlQW5p
bWF0aW9uSW5zdHJ1bWVudChJbnN0cnVtZW50U3RhdGUgc3RhdGUpCiB7CiAgICAgaWYgKGF1dG8q
IGFuaW1hdGlvbkFnZW50ID0gbV9pbnN0cnVtZW50aW5nQWdlbnRzLnBlcnNpc3RlbnRBbmltYXRp
b25BZ2VudCgpKSB7Ci0gICAgICAgIEVycm9yU3RyaW5nIGlnbm9yZWQ7CiAgICAgICAgIGlmIChz
dGF0ZSA9PSBJbnN0cnVtZW50U3RhdGU6OlN0YXJ0KQotICAgICAgICAgICAgYW5pbWF0aW9uQWdl
bnQtPnN0YXJ0VHJhY2tpbmcoaWdub3JlZCk7CisgICAgICAgICAgICBhbmltYXRpb25BZ2VudC0+
c3RhcnRUcmFja2luZygpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBhbmltYXRpb25BZ2Vu
dC0+c3RvcFRyYWNraW5nKGlnbm9yZWQpOworICAgICAgICAgICAgYW5pbWF0aW9uQWdlbnQtPnN0
b3BUcmFja2luZygpOwogICAgIH0KIH0KIApAQCAtNjkxLDcxICs2NzksNzEgQEAgdm9pZCBJbnNw
ZWN0b3JUaW1lbGluZUFnZW50OjpicmVha3BvaW50QWN0aW9uUHJvYmUoSlNDOjpKU0dsb2JhbE9i
amVjdCogbGV4aWNhbEcKICAgICBhcHBlbmRSZWNvcmQoVGltZWxpbmVSZWNvcmRGYWN0b3J5Ojpj
cmVhdGVQcm9iZVNhbXBsZURhdGEoYWN0aW9uSUQsIHNhbXBsZUlkKSwgVGltZWxpbmVSZWNvcmRU
eXBlOjpQcm9iZVNhbXBsZSwgZmFsc2UsIGZyYW1lRnJvbUV4ZWNTdGF0ZShsZXhpY2FsR2xvYmFs
T2JqZWN0KSk7CiB9CiAKLXN0YXRpYyBJbnNwZWN0b3I6OlByb3RvY29sOjpUaW1lbGluZTo6RXZl
bnRUeXBlIHRvUHJvdG9jb2woVGltZWxpbmVSZWNvcmRUeXBlIHR5cGUpCitzdGF0aWMgUHJvdG9j
b2w6OlRpbWVsaW5lOjpFdmVudFR5cGUgdG9Qcm90b2NvbChUaW1lbGluZVJlY29yZFR5cGUgdHlw
ZSkKIHsKICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICBjYXNlIFRpbWVsaW5lUmVjb3JkVHlwZTo6
RXZlbnREaXNwYXRjaDoKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRpbWVs
aW5lOjpFdmVudFR5cGU6OkV2ZW50RGlzcGF0Y2g7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6
VGltZWxpbmU6OkV2ZW50VHlwZTo6RXZlbnREaXNwYXRjaDsKICAgICBjYXNlIFRpbWVsaW5lUmVj
b3JkVHlwZTo6U2NoZWR1bGVTdHlsZVJlY2FsY3VsYXRpb246Ci0gICAgICAgIHJldHVybiBJbnNw
ZWN0b3I6OlByb3RvY29sOjpUaW1lbGluZTo6RXZlbnRUeXBlOjpTY2hlZHVsZVN0eWxlUmVjYWxj
dWxhdGlvbjsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpUaW1lbGluZTo6RXZlbnRUeXBlOjpT
Y2hlZHVsZVN0eWxlUmVjYWxjdWxhdGlvbjsKICAgICBjYXNlIFRpbWVsaW5lUmVjb3JkVHlwZTo6
UmVjYWxjdWxhdGVTdHlsZXM6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpU
aW1lbGluZTo6RXZlbnRUeXBlOjpSZWNhbGN1bGF0ZVN0eWxlczsKKyAgICAgICAgcmV0dXJuIFBy
b3RvY29sOjpUaW1lbGluZTo6RXZlbnRUeXBlOjpSZWNhbGN1bGF0ZVN0eWxlczsKICAgICBjYXNl
IFRpbWVsaW5lUmVjb3JkVHlwZTo6SW52YWxpZGF0ZUxheW91dDoKLSAgICAgICAgcmV0dXJuIElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlRpbWVsaW5lOjpFdmVudFR5cGU6OkludmFsaWRhdGVMYXlvdXQ7
CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6VGltZWxpbmU6OkV2ZW50VHlwZTo6SW52YWxpZGF0
ZUxheW91dDsKICAgICBjYXNlIFRpbWVsaW5lUmVjb3JkVHlwZTo6TGF5b3V0OgotICAgICAgICBy
ZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6VGltZWxpbmU6OkV2ZW50VHlwZTo6TGF5b3V0Owor
ICAgICAgICByZXR1cm4gUHJvdG9jb2w6OlRpbWVsaW5lOjpFdmVudFR5cGU6OkxheW91dDsKICAg
ICBjYXNlIFRpbWVsaW5lUmVjb3JkVHlwZTo6UGFpbnQ6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0
b3I6OlByb3RvY29sOjpUaW1lbGluZTo6RXZlbnRUeXBlOjpQYWludDsKKyAgICAgICAgcmV0dXJu
IFByb3RvY29sOjpUaW1lbGluZTo6RXZlbnRUeXBlOjpQYWludDsKICAgICBjYXNlIFRpbWVsaW5l
UmVjb3JkVHlwZTo6Q29tcG9zaXRlOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2Nv
bDo6VGltZWxpbmU6OkV2ZW50VHlwZTo6Q29tcG9zaXRlOworICAgICAgICByZXR1cm4gUHJvdG9j
b2w6OlRpbWVsaW5lOjpFdmVudFR5cGU6OkNvbXBvc2l0ZTsKICAgICBjYXNlIFRpbWVsaW5lUmVj
b3JkVHlwZTo6UmVuZGVyaW5nRnJhbWU6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpUaW1lbGluZTo6RXZlbnRUeXBlOjpSZW5kZXJpbmdGcmFtZTsKKyAgICAgICAgcmV0dXJu
IFByb3RvY29sOjpUaW1lbGluZTo6RXZlbnRUeXBlOjpSZW5kZXJpbmdGcmFtZTsKIAogICAgIGNh
c2UgVGltZWxpbmVSZWNvcmRUeXBlOjpUaW1lckluc3RhbGw6Ci0gICAgICAgIHJldHVybiBJbnNw
ZWN0b3I6OlByb3RvY29sOjpUaW1lbGluZTo6RXZlbnRUeXBlOjpUaW1lckluc3RhbGw7CisgICAg
ICAgIHJldHVybiBQcm90b2NvbDo6VGltZWxpbmU6OkV2ZW50VHlwZTo6VGltZXJJbnN0YWxsOwog
ICAgIGNhc2UgVGltZWxpbmVSZWNvcmRUeXBlOjpUaW1lclJlbW92ZToKLSAgICAgICAgcmV0dXJu
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRpbWVsaW5lOjpFdmVudFR5cGU6OlRpbWVyUmVtb3ZlOwor
ICAgICAgICByZXR1cm4gUHJvdG9jb2w6OlRpbWVsaW5lOjpFdmVudFR5cGU6OlRpbWVyUmVtb3Zl
OwogICAgIGNhc2UgVGltZWxpbmVSZWNvcmRUeXBlOjpUaW1lckZpcmU6Ci0gICAgICAgIHJldHVy
biBJbnNwZWN0b3I6OlByb3RvY29sOjpUaW1lbGluZTo6RXZlbnRUeXBlOjpUaW1lckZpcmU7Cisg
ICAgICAgIHJldHVybiBQcm90b2NvbDo6VGltZWxpbmU6OkV2ZW50VHlwZTo6VGltZXJGaXJlOwog
CiAgICAgY2FzZSBUaW1lbGluZVJlY29yZFR5cGU6OkV2YWx1YXRlU2NyaXB0OgotICAgICAgICBy
ZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6VGltZWxpbmU6OkV2ZW50VHlwZTo6RXZhbHVhdGVT
Y3JpcHQ7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6VGltZWxpbmU6OkV2ZW50VHlwZTo6RXZh
bHVhdGVTY3JpcHQ7CiAKICAgICBjYXNlIFRpbWVsaW5lUmVjb3JkVHlwZTo6VGltZVN0YW1wOgot
ICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6VGltZWxpbmU6OkV2ZW50VHlwZTo6
VGltZVN0YW1wOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OlRpbWVsaW5lOjpFdmVudFR5cGU6
OlRpbWVTdGFtcDsKICAgICBjYXNlIFRpbWVsaW5lUmVjb3JkVHlwZTo6VGltZToKLSAgICAgICAg
cmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRpbWVsaW5lOjpFdmVudFR5cGU6OlRpbWU7Cisg
ICAgICAgIHJldHVybiBQcm90b2NvbDo6VGltZWxpbmU6OkV2ZW50VHlwZTo6VGltZTsKICAgICBj
YXNlIFRpbWVsaW5lUmVjb3JkVHlwZTo6VGltZUVuZDoKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlRpbWVsaW5lOjpFdmVudFR5cGU6OlRpbWVFbmQ7CisgICAgICAgIHJldHVy
biBQcm90b2NvbDo6VGltZWxpbmU6OkV2ZW50VHlwZTo6VGltZUVuZDsKIAogICAgIGNhc2UgVGlt
ZWxpbmVSZWNvcmRUeXBlOjpGdW5jdGlvbkNhbGw6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6
OlByb3RvY29sOjpUaW1lbGluZTo6RXZlbnRUeXBlOjpGdW5jdGlvbkNhbGw7CisgICAgICAgIHJl
dHVybiBQcm90b2NvbDo6VGltZWxpbmU6OkV2ZW50VHlwZTo6RnVuY3Rpb25DYWxsOwogICAgIGNh
c2UgVGltZWxpbmVSZWNvcmRUeXBlOjpQcm9iZVNhbXBsZToKLSAgICAgICAgcmV0dXJuIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlRpbWVsaW5lOjpFdmVudFR5cGU6OlByb2JlU2FtcGxlOworICAgICAg
ICByZXR1cm4gUHJvdG9jb2w6OlRpbWVsaW5lOjpFdmVudFR5cGU6OlByb2JlU2FtcGxlOwogICAg
IGNhc2UgVGltZWxpbmVSZWNvcmRUeXBlOjpDb25zb2xlUHJvZmlsZToKLSAgICAgICAgcmV0dXJu
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRpbWVsaW5lOjpFdmVudFR5cGU6OkNvbnNvbGVQcm9maWxl
OworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OlRpbWVsaW5lOjpFdmVudFR5cGU6OkNvbnNvbGVQ
cm9maWxlOwogCiAgICAgY2FzZSBUaW1lbGluZVJlY29yZFR5cGU6OlJlcXVlc3RBbmltYXRpb25G
cmFtZToKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRpbWVsaW5lOjpFdmVu
dFR5cGU6OlJlcXVlc3RBbmltYXRpb25GcmFtZTsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpU
aW1lbGluZTo6RXZlbnRUeXBlOjpSZXF1ZXN0QW5pbWF0aW9uRnJhbWU7CiAgICAgY2FzZSBUaW1l
bGluZVJlY29yZFR5cGU6OkNhbmNlbEFuaW1hdGlvbkZyYW1lOgotICAgICAgICByZXR1cm4gSW5z
cGVjdG9yOjpQcm90b2NvbDo6VGltZWxpbmU6OkV2ZW50VHlwZTo6Q2FuY2VsQW5pbWF0aW9uRnJh
bWU7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6VGltZWxpbmU6OkV2ZW50VHlwZTo6Q2FuY2Vs
QW5pbWF0aW9uRnJhbWU7CiAgICAgY2FzZSBUaW1lbGluZVJlY29yZFR5cGU6OkZpcmVBbmltYXRp
b25GcmFtZToKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRpbWVsaW5lOjpF
dmVudFR5cGU6OkZpcmVBbmltYXRpb25GcmFtZTsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpU
aW1lbGluZTo6RXZlbnRUeXBlOjpGaXJlQW5pbWF0aW9uRnJhbWU7CiAKICAgICBjYXNlIFRpbWVs
aW5lUmVjb3JkVHlwZTo6T2JzZXJ2ZXJDYWxsYmFjazoKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlRpbWVsaW5lOjpFdmVudFR5cGU6Ok9ic2VydmVyQ2FsbGJhY2s7CisgICAg
ICAgIHJldHVybiBQcm90b2NvbDo6VGltZWxpbmU6OkV2ZW50VHlwZTo6T2JzZXJ2ZXJDYWxsYmFj
azsKICAgICB9CiAKLSAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6VGltZWxpbmU6OkV2
ZW50VHlwZTo6VGltZVN0YW1wOworICAgIHJldHVybiBQcm90b2NvbDo6VGltZWxpbmU6OkV2ZW50
VHlwZTo6VGltZVN0YW1wOwogfQogCi12b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OmFkZFJl
Y29yZFRvVGltZWxpbmUoUmVmUHRyPEpTT046Ok9iamVjdD4mJiByZWNvcmQsIFRpbWVsaW5lUmVj
b3JkVHlwZSB0eXBlKQordm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjphZGRSZWNvcmRUb1Rp
bWVsaW5lKFJlZjxKU09OOjpPYmplY3Q+JiYgcmVjb3JkLCBUaW1lbGluZVJlY29yZFR5cGUgdHlw
ZSkKIHsKLSAgICBBU1NFUlRfQVJHKHJlY29yZCwgcmVjb3JkKTsKLSAgICByZWNvcmQtPnNldFN0
cmluZygidHlwZSIsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Okluc3BlY3RvckhlbHBlcnM6OmdldEVu
dW1Db25zdGFudFZhbHVlKHRvUHJvdG9jb2wodHlwZSkpKTsKKyAgICByZWNvcmQtPnNldFN0cmlu
ZyhQcm90b2NvbDo6VGltZWxpbmU6OlRpbWVsaW5lRXZlbnQ6OnR5cGVLZXksIFByb3RvY29sOjpI
ZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZSh0b1Byb3RvY29sKHR5cGUpKSk7CiAKICAgICBp
ZiAobV9yZWNvcmRTdGFjay5pc0VtcHR5KCkpIHsKLSAgICAgICAgYXV0byByZWNvcmRPYmplY3Qg
PSBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRpbWVsaW5lOjpUaW1lbGluZUV2
ZW50Pjo6cnVudGltZUNhc3QoV1RGTW92ZShyZWNvcmQpKTsKKyAgICAgICAgLy8gRklYTUU6IHJ1
bnRpbWVDYXN0IGlzIGEgaGFjay4gV2UgZG8gaXQgYmVjYXVzZSB3ZSBjYW4ndCBidWlsZCBUaW1l
bGluZUV2ZW50IGRpcmVjdGx5IG5vdy4KKyAgICAgICAgYXV0byByZWNvcmRPYmplY3QgPSBQcm90
b2NvbDo6QmluZGluZ1RyYWl0czxQcm90b2NvbDo6VGltZWxpbmU6OlRpbWVsaW5lRXZlbnQ+Ojpy
dW50aW1lQ2FzdChXVEZNb3ZlKHJlY29yZCkpOwogICAgICAgICBzZW5kRXZlbnQoV1RGTW92ZShy
ZWNvcmRPYmplY3QpKTsKICAgICB9IGVsc2UgewogICAgICAgICBjb25zdCBUaW1lbGluZVJlY29y
ZEVudHJ5JiBwYXJlbnQgPSBtX3JlY29yZFN0YWNrLmxhc3QoKTsKQEAgLTc4MSw4ICs3NjksOSBA
QCB2b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OnNldEZyYW1lSWRlbnRpZmllcihKU09OOjpP
YmplY3QqIHJlY29yZCwgRnJhbWUqIGZyYQogCiB2b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6
OmRpZENvbXBsZXRlUmVjb3JkRW50cnkoY29uc3QgVGltZWxpbmVSZWNvcmRFbnRyeSYgZW50cnkp
CiB7Ci0gICAgZW50cnkucmVjb3JkLT5zZXRPYmplY3QoImRhdGEiX3MsIGVudHJ5LmRhdGEpOwot
ICAgIGVudHJ5LnJlY29yZC0+c2V0QXJyYXkoImNoaWxkcmVuIl9zLCBlbnRyeS5jaGlsZHJlbik7
CisgICAgZW50cnkucmVjb3JkLT5zZXRPYmplY3QoUHJvdG9jb2w6OlRpbWVsaW5lOjpUaW1lbGlu
ZUV2ZW50OjpkYXRhS2V5LCBlbnRyeS5kYXRhLmNvcHlSZWYoKSk7CisgICAgaWYgKGVudHJ5LmNo
aWxkcmVuKQorICAgICAgICBlbnRyeS5yZWNvcmQtPnNldEFycmF5KFByb3RvY29sOjpUaW1lbGlu
ZTo6VGltZWxpbmVFdmVudDo6Y2hpbGRyZW5LZXksICplbnRyeS5jaGlsZHJlbik7CiAgICAgZW50
cnkucmVjb3JkLT5zZXREb3VibGUoImVuZFRpbWUiX3MsIHRpbWVzdGFtcCgpKTsKICAgICBhZGRS
ZWNvcmRUb1RpbWVsaW5lKGVudHJ5LnJlY29yZC5jb3B5UmVmKCksIGVudHJ5LnR5cGUpOwogfQpA
QCAtODA0LDI5ICs3OTMsMjkgQEAgdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpkaWRDb21w
bGV0ZUN1cnJlbnRSZWNvcmQoVGltZWxpbmVSZWNvcmRUeXBlIHR5cGUpCiAgICAgfQogfQogCi12
b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OmFwcGVuZFJlY29yZChSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiYmIGRhdGEsIFRpbWVsaW5lUmVjb3JkVHlwZSB0eXBlLCBib29sIGNhcHR1cmVDYWxsU3Rh
Y2ssIEZyYW1lKiBmcmFtZSkKK3ZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6YXBwZW5kUmVj
b3JkKFJlZjxKU09OOjpPYmplY3Q+JiYgZGF0YSwgVGltZWxpbmVSZWNvcmRUeXBlIHR5cGUsIGJv
b2wgY2FwdHVyZUNhbGxTdGFjaywgRnJhbWUqIGZyYW1lKQogewogICAgIFJlZjxKU09OOjpPYmpl
Y3Q+IHJlY29yZCA9IFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlR2VuZXJpY1JlY29yZCh0
aW1lc3RhbXAoKSwgY2FwdHVyZUNhbGxTdGFjayA/IG1fbWF4Q2FsbFN0YWNrRGVwdGggOiAwKTsK
LSAgICByZWNvcmQtPnNldE9iamVjdCgiZGF0YSIsIFdURk1vdmUoZGF0YSkpOworICAgIHJlY29y
ZC0+c2V0T2JqZWN0KFByb3RvY29sOjpUaW1lbGluZTo6VGltZWxpbmVFdmVudDo6ZGF0YUtleSwg
V1RGTW92ZShkYXRhKSk7CiAgICAgc2V0RnJhbWVJZGVudGlmaWVyKCZyZWNvcmQuZ2V0KCksIGZy
YW1lKTsKICAgICBhZGRSZWNvcmRUb1RpbWVsaW5lKFdURk1vdmUocmVjb3JkKSwgdHlwZSk7CiB9
CiAKLXZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6c2VuZEV2ZW50KFJlZlB0cjxKU09OOjpP
YmplY3Q+JiYgZXZlbnQpCit2b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OnNlbmRFdmVudChS
ZWY8SlNPTjo6T2JqZWN0PiYmIGV2ZW50KQogewogICAgIC8vIEZJWE1FOiBydW50aW1lQ2FzdCBp
cyBhIGhhY2suIFdlIGRvIGl0IGJlY2F1c2Ugd2UgY2FuJ3QgYnVpbGQgVGltZWxpbmVFdmVudCBk
aXJlY3RseSBub3cuCi0gICAgYXV0byByZWNvcmRDaGVja2VkID0gQmluZGluZ1RyYWl0czxJbnNw
ZWN0b3I6OlByb3RvY29sOjpUaW1lbGluZTo6VGltZWxpbmVFdmVudD46OnJ1bnRpbWVDYXN0KFdU
Rk1vdmUoZXZlbnQpKTsKKyAgICBhdXRvIHJlY29yZENoZWNrZWQgPSBQcm90b2NvbDo6QmluZGlu
Z1RyYWl0czxQcm90b2NvbDo6VGltZWxpbmU6OlRpbWVsaW5lRXZlbnQ+OjpydW50aW1lQ2FzdChX
VEZNb3ZlKGV2ZW50KSk7CiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPmV2ZW50UmVjb3JkZWQo
V1RGTW92ZShyZWNvcmRDaGVja2VkKSk7CiB9CiAKLUluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OlRp
bWVsaW5lUmVjb3JkRW50cnkgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6Y3JlYXRlUmVjb3JkRW50
cnkoUmVmUHRyPEpTT046Ok9iamVjdD4mJiBkYXRhLCBUaW1lbGluZVJlY29yZFR5cGUgdHlwZSwg
Ym9vbCBjYXB0dXJlQ2FsbFN0YWNrLCBGcmFtZSogZnJhbWUpCitJbnNwZWN0b3JUaW1lbGluZUFn
ZW50OjpUaW1lbGluZVJlY29yZEVudHJ5IEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OmNyZWF0ZVJl
Y29yZEVudHJ5KFJlZjxKU09OOjpPYmplY3Q+JiYgZGF0YSwgVGltZWxpbmVSZWNvcmRUeXBlIHR5
cGUsIGJvb2wgY2FwdHVyZUNhbGxTdGFjaywgRnJhbWUqIGZyYW1lKQogewogICAgIFJlZjxKU09O
OjpPYmplY3Q+IHJlY29yZCA9IFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlR2VuZXJpY1Jl
Y29yZCh0aW1lc3RhbXAoKSwgY2FwdHVyZUNhbGxTdGFjayA/IG1fbWF4Q2FsbFN0YWNrRGVwdGgg
OiAwKTsKICAgICBzZXRGcmFtZUlkZW50aWZpZXIoJnJlY29yZC5nZXQoKSwgZnJhbWUpOwogICAg
IHJldHVybiBUaW1lbGluZVJlY29yZEVudHJ5KFdURk1vdmUocmVjb3JkKSwgV1RGTW92ZShkYXRh
KSwgSlNPTjo6QXJyYXk6OmNyZWF0ZSgpLCB0eXBlKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JUaW1l
bGluZUFnZW50OjpwdXNoQ3VycmVudFJlY29yZChSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIGRhdGEs
IFRpbWVsaW5lUmVjb3JkVHlwZSB0eXBlLCBib29sIGNhcHR1cmVDYWxsU3RhY2ssIEZyYW1lKiBm
cmFtZSkKK3ZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6cHVzaEN1cnJlbnRSZWNvcmQoUmVm
PEpTT046Ok9iamVjdD4mJiBkYXRhLCBUaW1lbGluZVJlY29yZFR5cGUgdHlwZSwgYm9vbCBjYXB0
dXJlQ2FsbFN0YWNrLCBGcmFtZSogZnJhbWUpCiB7CiAgICAgcHVzaEN1cnJlbnRSZWNvcmQoY3Jl
YXRlUmVjb3JkRW50cnkoV1RGTW92ZShkYXRhKSwgdHlwZSwgY2FwdHVyZUNhbGxTdGFjaywgZnJh
bWUpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5z
cGVjdG9yVGltZWxpbmVBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9J
bnNwZWN0b3JUaW1lbGluZUFnZW50LmgKaW5kZXggYWU3NTc5YTE1ZjA1NzJiNTJmOWFhZTFhZmJl
ZTA5MmZiODI0YzgxOS4uZmU3NWU0MGI0MzRmODVkOTczYWVkYmI0Mjk3YTk0YmFlMThmYmIyYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JUaW1l
bGluZUFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0
b3JUaW1lbGluZUFnZW50LmgKQEAgLTUwLDggKzUwLDYgQEAgY2xhc3MgRnJhbWU7CiBjbGFzcyBS
ZW5kZXJPYmplY3Q7CiBjbGFzcyBSdW5Mb29wT2JzZXJ2ZXI7CiAKLXR5cGVkZWYgU3RyaW5nIEVy
cm9yU3RyaW5nOwotCiBlbnVtIGNsYXNzIFRpbWVsaW5lUmVjb3JkVHlwZSB7CiAgICAgRXZlbnRE
aXNwYXRjaCwKICAgICBTY2hlZHVsZVN0eWxlUmVjYWxjdWxhdGlvbiwKQEAgLTg4LDIyICs4Niwy
MiBAQCBjbGFzcyBJbnNwZWN0b3JUaW1lbGluZUFnZW50IGZpbmFsIDogcHVibGljIEluc3BlY3Rv
ckFnZW50QmFzZSAsIHB1YmxpYyBJbnNwZWN0bwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OwogcHVibGljOgogICAgIEluc3BlY3RvclRpbWVsaW5lQWdlbnQoUGFnZUFnZW50Q29udGV4dCYp
OwotICAgIH5JbnNwZWN0b3JUaW1lbGluZUFnZW50KCkgb3ZlcnJpZGU7CisgICAgfkluc3BlY3Rv
clRpbWVsaW5lQWdlbnQoKTsKIAogICAgIC8vIEluc3BlY3RvckFnZW50QmFzZQotICAgIHZvaWQg
ZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRSb3V0ZXIqLCBJ
bnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyKikgb3ZlcnJpZGU7Ci0gICAgdm9pZCB3aWxsRGVz
dHJveUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24pIG92ZXJy
aWRlOworICAgIHZvaWQgZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJv
bnRlbmRSb3V0ZXIqLCBJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyKik7CisgICAgdm9pZCB3
aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24p
OwogCiAgICAgLy8gVGltZWxpbmVCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIKLSAgICB2b2lkIGVu
YWJsZShFcnJvclN0cmluZyYpIG92ZXJyaWRlOwotICAgIHZvaWQgZGlzYWJsZShFcnJvclN0cmlu
ZyYpIG92ZXJyaWRlOwotICAgIHZvaWQgc3RhcnQoRXJyb3JTdHJpbmcmLCBjb25zdCBpbnQqIG1h
eENhbGxTdGFja0RlcHRoID0gbnVsbHB0cikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzdG9wKEVycm9y
U3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRBdXRvQ2FwdHVyZUVuYWJsZWQoRXJyb3JT
dHJpbmcmLCBib29sKSBvdmVycmlkZTsKLSAgICB2b2lkIHNldEluc3RydW1lbnRzKEVycm9yU3Ry
aW5nJiwgY29uc3QgSlNPTjo6QXJyYXkmKSBvdmVycmlkZTsKKyAgICBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGVuYWJsZSgpOworICAgIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZGlzYWJsZSgpOworICAgIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc3RhcnQoT3B0aW9uYWw8aW50PiYmIG1heENhbGxTdGFj
a0RlcHRoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHN0
b3AoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHNldEF1
dG9DYXB0dXJlRW5hYmxlZChib29sKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0
cmluZ09yPHZvaWQ+IHNldEluc3RydW1lbnRzKFJlZjxKU09OOjpBcnJheT4mJik7CiAKICAgICAv
LyBKU0M6OkRlYnVnZ2VyOjpPYnNlcnZlcgotICAgIHZvaWQgYnJlYWtwb2ludEFjdGlvblByb2Jl
KEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkJyZWFrcG9pbnRBY3Rpb25JRCwgdW5zaWduZWQg
YmF0Y2hJZCwgdW5zaWduZWQgc2FtcGxlSWQsIEpTQzo6SlNWYWx1ZSByZXN1bHQpIGZpbmFsOwor
ICAgIHZvaWQgYnJlYWtwb2ludEFjdGlvblByb2JlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6
OkJyZWFrcG9pbnRBY3Rpb25JRCwgdW5zaWduZWQgYmF0Y2hJZCwgdW5zaWduZWQgc2FtcGxlSWQs
IEpTQzo6SlNWYWx1ZSByZXN1bHQpOwogCiAgICAgLy8gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
CiAgICAgdm9pZCBkaWRJbnN0YWxsVGltZXIoaW50IHRpbWVySWQsIFNlY29uZHMgdGltZW91dCwg
Ym9vbCBzaW5nbGVTaG90LCBGcmFtZSopOwpAQCAtMTYwLDkgKzE1OCw3IEBAIHByaXZhdGU6CiAg
ICAgZnJpZW5kIGNsYXNzIFRpbWVsaW5lUmVjb3JkU3RhY2s7CiAKICAgICBzdHJ1Y3QgVGltZWxp
bmVSZWNvcmRFbnRyeSB7Ci0gICAgICAgIFRpbWVsaW5lUmVjb3JkRW50cnkoKQotICAgICAgICAg
ICAgOiB0eXBlKFRpbWVsaW5lUmVjb3JkVHlwZTo6RXZlbnREaXNwYXRjaCkgeyB9Ci0gICAgICAg
IFRpbWVsaW5lUmVjb3JkRW50cnkoUmVmUHRyPEpTT046Ok9iamVjdD4mJiByZWNvcmQsIFJlZlB0
cjxKU09OOjpPYmplY3Q+JiYgZGF0YSwgUmVmUHRyPEpTT046OkFycmF5PiYmIGNoaWxkcmVuLCBU
aW1lbGluZVJlY29yZFR5cGUgdHlwZSkKKyAgICAgICAgVGltZWxpbmVSZWNvcmRFbnRyeShSZWY8
SlNPTjo6T2JqZWN0PiYmIHJlY29yZCwgUmVmPEpTT046Ok9iamVjdD4mJiBkYXRhLCBSZWZQdHI8
SlNPTjo6QXJyYXk+JiYgY2hpbGRyZW4sIFRpbWVsaW5lUmVjb3JkVHlwZSB0eXBlKQogICAgICAg
ICAgICAgOiByZWNvcmQoV1RGTW92ZShyZWNvcmQpKQogICAgICAgICAgICAgLCBkYXRhKFdURk1v
dmUoZGF0YSkpCiAgICAgICAgICAgICAsIGNoaWxkcmVuKFdURk1vdmUoY2hpbGRyZW4pKQpAQCAt
MTcwLDI5ICsxNjYsMjkgQEAgcHJpdmF0ZToKICAgICAgICAgewogICAgICAgICB9CiAKLSAgICAg
ICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcmVjb3JkOwotICAgICAgICBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiBkYXRhOworICAgICAgICBSZWY8SlNPTjo6T2JqZWN0PiByZWNvcmQ7CisgICAgICAgIFJl
ZjxKU09OOjpPYmplY3Q+IGRhdGE7CiAgICAgICAgIFJlZlB0cjxKU09OOjpBcnJheT4gY2hpbGRy
ZW47CiAgICAgICAgIFRpbWVsaW5lUmVjb3JkVHlwZSB0eXBlOwogICAgIH07CiAKLSAgICB2b2lk
IGludGVybmFsU3RhcnQoY29uc3QgaW50KiBtYXhDYWxsU3RhY2tEZXB0aCA9IG51bGxwdHIpOwor
ICAgIHZvaWQgaW50ZXJuYWxTdGFydChPcHRpb25hbDxpbnQ+JiYgbWF4Q2FsbFN0YWNrRGVwdGgp
OwogICAgIHZvaWQgaW50ZXJuYWxTdG9wKCk7CiAgICAgZG91YmxlIHRpbWVzdGFtcCgpOwogCi0g
ICAgdm9pZCBzZW5kRXZlbnQoUmVmUHRyPEpTT046Ok9iamVjdD4mJik7Ci0gICAgdm9pZCBhcHBl
bmRSZWNvcmQoUmVmUHRyPEpTT046Ok9iamVjdD4mJiBkYXRhLCBUaW1lbGluZVJlY29yZFR5cGUs
IGJvb2wgY2FwdHVyZUNhbGxTdGFjaywgRnJhbWUqKTsKLSAgICB2b2lkIHB1c2hDdXJyZW50UmVj
b3JkKFJlZlB0cjxKU09OOjpPYmplY3Q+JiYsIFRpbWVsaW5lUmVjb3JkVHlwZSwgYm9vbCBjYXB0
dXJlQ2FsbFN0YWNrLCBGcmFtZSopOworICAgIHZvaWQgc2VuZEV2ZW50KFJlZjxKU09OOjpPYmpl
Y3Q+JiYpOworICAgIHZvaWQgYXBwZW5kUmVjb3JkKFJlZjxKU09OOjpPYmplY3Q+JiYgZGF0YSwg
VGltZWxpbmVSZWNvcmRUeXBlLCBib29sIGNhcHR1cmVDYWxsU3RhY2ssIEZyYW1lKik7CisgICAg
dm9pZCBwdXNoQ3VycmVudFJlY29yZChSZWY8SlNPTjo6T2JqZWN0PiYmLCBUaW1lbGluZVJlY29y
ZFR5cGUsIGJvb2wgY2FwdHVyZUNhbGxTdGFjaywgRnJhbWUqKTsKICAgICB2b2lkIHB1c2hDdXJy
ZW50UmVjb3JkKGNvbnN0IFRpbWVsaW5lUmVjb3JkRW50cnkmIHJlY29yZCkgeyBtX3JlY29yZFN0
YWNrLmFwcGVuZChyZWNvcmQpOyB9CiAKLSAgICBUaW1lbGluZVJlY29yZEVudHJ5IGNyZWF0ZVJl
Y29yZEVudHJ5KFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgZGF0YSwgVGltZWxpbmVSZWNvcmRUeXBl
LCBib29sIGNhcHR1cmVDYWxsU3RhY2ssIEZyYW1lKik7CisgICAgVGltZWxpbmVSZWNvcmRFbnRy
eSBjcmVhdGVSZWNvcmRFbnRyeShSZWY8SlNPTjo6T2JqZWN0PiYmIGRhdGEsIFRpbWVsaW5lUmVj
b3JkVHlwZSwgYm9vbCBjYXB0dXJlQ2FsbFN0YWNrLCBGcmFtZSopOwogCiAgICAgdm9pZCBzZXRG
cmFtZUlkZW50aWZpZXIoSlNPTjo6T2JqZWN0KiByZWNvcmQsIEZyYW1lKik7CiAKICAgICB2b2lk
IGRpZENvbXBsZXRlUmVjb3JkRW50cnkoY29uc3QgVGltZWxpbmVSZWNvcmRFbnRyeSYpOwogICAg
IHZvaWQgZGlkQ29tcGxldGVDdXJyZW50UmVjb3JkKFRpbWVsaW5lUmVjb3JkVHlwZSk7CiAKLSAg
ICB2b2lkIGFkZFJlY29yZFRvVGltZWxpbmUoUmVmUHRyPEpTT046Ok9iamVjdD4mJiwgVGltZWxp
bmVSZWNvcmRUeXBlKTsKKyAgICB2b2lkIGFkZFJlY29yZFRvVGltZWxpbmUoUmVmPEpTT046Ok9i
amVjdD4mJiwgVGltZWxpbmVSZWNvcmRUeXBlKTsKIAogICAgIHZvaWQgbG9jYWxUb1BhZ2VRdWFk
KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IExheW91dFJlY3QmLCBGbG9hdFF1YWQqKTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JXb3Jr
ZXJBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rvcldv
cmtlckFnZW50LmNwcAppbmRleCA5MDljNDY2Zjg3ZTliZmE4YzRjMTcyOGM0NmFkNmU3ZTU5MDdi
NDZlLi4zM2NhYTBhYTIwNzlhZDQwODFjYzI5NjA1YTUzNTM3YzI0ZDY2YmVmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvcldvcmtlckFnZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvcldvcmtlckFn
ZW50LmNwcApAQCAtNTMsNTUgKzUzLDU2IEBAIHZvaWQgSW5zcGVjdG9yV29ya2VyQWdlbnQ6Ondp
bGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKERpc2Nvbm5lY3RSZWFzb24pCiB7CiAgICAgbV9p
bnN0cnVtZW50aW5nQWdlbnRzLnNldFBlcnNpc3RlbnRXb3JrZXJBZ2VudChudWxscHRyKTsKIAot
ICAgIEVycm9yU3RyaW5nIGlnbm9yZWQ7Ci0gICAgZGlzYWJsZShpZ25vcmVkKTsKKyAgICBkaXNh
YmxlKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yV29ya2VyQWdlbnQ6OmVuYWJsZShFcnJvclN0cmlu
ZyYpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JXb3JrZXJBZ2VudDo6
ZW5hYmxlKCkKIHsKICAgICBpZiAobV9lbmFibGVkKQotICAgICAgICByZXR1cm47CisgICAgICAg
IHJldHVybiB7IH07CiAKICAgICBtX2VuYWJsZWQgPSB0cnVlOwogCiAgICAgY29ubmVjdFRvQWxs
V29ya2VySW5zcGVjdG9yUHJveGllc0ZvclBhZ2UoKTsKKworICAgIHJldHVybiB7IH07CiB9CiAK
LXZvaWQgSW5zcGVjdG9yV29ya2VyQWdlbnQ6OmRpc2FibGUoRXJyb3JTdHJpbmcmKQorUHJvdG9j
b2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yV29ya2VyQWdlbnQ6OmRpc2FibGUoKQog
ewogICAgIGlmICghbV9lbmFibGVkKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB7
IH07CiAKICAgICBtX2VuYWJsZWQgPSBmYWxzZTsKIAogICAgIGRpc2Nvbm5lY3RGcm9tQWxsV29y
a2VySW5zcGVjdG9yUHJveGllcygpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNw
ZWN0b3JXb3JrZXJBZ2VudDo6aW5pdGlhbGl6ZWQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBj
b25zdCBTdHJpbmcmIHdvcmtlcklkKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5z
cGVjdG9yV29ya2VyQWdlbnQ6OmluaXRpYWxpemVkKGNvbnN0IFN0cmluZyYgd29ya2VySWQpCiB7
CiAgICAgV29ya2VySW5zcGVjdG9yUHJveHkqIHByb3h5ID0gbV9jb25uZWN0ZWRQcm94aWVzLmdl
dCh3b3JrZXJJZCk7Ci0gICAgaWYgKCFwcm94eSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJN
aXNzaW5nIHdvcmtlciBmb3IgZ2l2ZW4gd29ya2VySWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9CisgICAgaWYgKCFwcm94eSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJNaXNz
aW5nIHdvcmtlciBmb3IgZ2l2ZW4gd29ya2VySWQiX3MpOwogCiAgICAgcHJveHktPnJlc3VtZVdv
cmtlcklmUGF1c2VkKCk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3Rvcldv
cmtlckFnZW50OjpzZW5kTWVzc2FnZVRvV29ya2VyKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywg
Y29uc3QgU3RyaW5nJiB3b3JrZXJJZCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQorUHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yV29ya2VyQWdlbnQ6OnNlbmRNZXNzYWdlVG9X
b3JrZXIoY29uc3QgU3RyaW5nJiB3b3JrZXJJZCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQogewot
ICAgIGlmICghbV9lbmFibGVkKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIldvcmtlciBkb21h
aW4gbXVzdCBiZSBlbmFibGVkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICgh
bV9lbmFibGVkKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIldvcmtlciBkb21haW4g
bXVzdCBiZSBlbmFibGVkIl9zKTsKIAogICAgIFdvcmtlckluc3BlY3RvclByb3h5KiBwcm94eSA9
IG1fY29ubmVjdGVkUHJveGllcy5nZXQod29ya2VySWQpOwotICAgIGlmICghcHJveHkpIHsKLSAg
ICAgICAgZXJyb3JTdHJpbmcgPSAiTWlzc2luZyB3b3JrZXIgZm9yIGdpdmVuIHdvcmtlcklkIl9z
OwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghcHJveHkpCisgICAgICAgIHJldHVy
biBtYWtlVW5leHBlY3RlZCgiTWlzc2luZyB3b3JrZXIgZm9yIGdpdmVuIHdvcmtlcklkIl9zKTsK
IAogICAgIHByb3h5LT5zZW5kTWVzc2FnZVRvV29ya2VySW5zcGVjdG9yQ29udHJvbGxlcihtZXNz
YWdlKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKIHZvaWQgSW5zcGVjdG9yV29ya2VyQWdlbnQ6
OnNlbmRNZXNzYWdlRnJvbVdvcmtlclRvRnJvbnRlbmQoV29ya2VySW5zcGVjdG9yUHJveHkmIHBy
b3h5LCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvcldvcmtlckFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvcldvcmtlckFnZW50LmgKaW5kZXggMTdkMWJlYWU5MDEw
ZjMyMDAxYWM2NGRkOWQ4OTJhOTNmMTBhN2Q1Ni4uNjM2YmM4MWRkNWE1MGFlZTA1M2MyZTA0ZTY4
Njk5ZDNmYTZiNjRlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50
cy9JbnNwZWN0b3JXb3JrZXJBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9h
Z2VudHMvSW5zcGVjdG9yV29ya2VyQWdlbnQuaApAQCAtMzUsMjcgKzM1LDI1IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogY2xhc3MgUGFnZTsKIAotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7
Ci0KIGNsYXNzIEluc3BlY3RvcldvcmtlckFnZW50IGZpbmFsIDogcHVibGljIEluc3BlY3RvckFn
ZW50QmFzZSwgcHVibGljIEluc3BlY3Rvcjo6V29ya2VyQmFja2VuZERpc3BhdGNoZXJIYW5kbGVy
LCBwdWJsaWMgV29ya2VySW5zcGVjdG9yUHJveHk6OlBhZ2VDaGFubmVsIHsKICAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShJbnNwZWN0b3JXb3JrZXJBZ2VudCk7CiAgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgSW5zcGVjdG9yV29ya2VyQWdlbnQoUGFnZUFnZW50Q29u
dGV4dCYpOwotICAgIH5JbnNwZWN0b3JXb3JrZXJBZ2VudCgpIG92ZXJyaWRlOworICAgIH5JbnNw
ZWN0b3JXb3JrZXJBZ2VudCgpOwogCiAgICAgLy8gSW5zcGVjdG9yQWdlbnRCYXNlCi0gICAgdm9p
ZCBkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9udGVuZFJvdXRlcios
IEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXIqKSBvdmVycmlkZTsKLSAgICB2b2lkIHdpbGxE
ZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlzY29ubmVjdFJlYXNvbikgb3Zl
cnJpZGU7CisgICAgdm9pZCBkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpG
cm9udGVuZFJvdXRlciosIEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXIqKTsKKyAgICB2b2lk
IHdpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlzY29ubmVjdFJlYXNv
bik7CiAKICAgICAvLyBXb3JrZXJCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIKLSAgICB2b2lkIGVu
YWJsZShFcnJvclN0cmluZyYpIG92ZXJyaWRlOwotICAgIHZvaWQgZGlzYWJsZShFcnJvclN0cmlu
ZyYpIG92ZXJyaWRlOwotICAgIHZvaWQgaW5pdGlhbGl6ZWQoRXJyb3JTdHJpbmcmLCBjb25zdCBT
dHJpbmcmIHdvcmtlcklkKSBvdmVycmlkZTsKLSAgICB2b2lkIHNlbmRNZXNzYWdlVG9Xb3JrZXIo
RXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHdvcmtlcklkLCBjb25zdCBTdHJpbmcmIG1lc3Nh
Z2UpIG92ZXJyaWRlOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9p
ZD4gZW5hYmxlKCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lk
PiBkaXNhYmxlKCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lk
PiBpbml0aWFsaXplZChjb25zdCBTdHJpbmcmIHdvcmtlcklkKTsKKyAgICBJbnNwZWN0b3I6OlBy
b3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHNlbmRNZXNzYWdlVG9Xb3JrZXIoY29uc3QgU3Ry
aW5nJiB3b3JrZXJJZCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKIAogICAgIC8vIFdvcmtlcklu
c3BlY3RvclByb3h5OjpQYWdlQ2hhbm5lbAotICAgIHZvaWQgc2VuZE1lc3NhZ2VGcm9tV29ya2Vy
VG9Gcm9udGVuZChXb3JrZXJJbnNwZWN0b3JQcm94eSYsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkg
b3ZlcnJpZGU7CisgICAgdm9pZCBzZW5kTWVzc2FnZUZyb21Xb3JrZXJUb0Zyb250ZW5kKFdvcmtl
ckluc3BlY3RvclByb3h5JiwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKIAogICAgIC8vIEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbgogICAgIGJvb2wgc2hvdWxkV2FpdEZvckRlYnVnZ2VyT25TdGFy
dCgpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9X
ZWJDb25zb2xlQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvV2ViQ29u
c29sZUFnZW50LmgKaW5kZXggZjdkODI3ODA3MGZlNDcwMjk5ZjJkZDZiYWI2NjQ2MmQ1ODU4ODkw
NS4uMGI4ZjIwZWFjMzQzYjY2ODE3YWM5ZjBmMGM2YzhjYjIwYzliYWM3YiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9XZWJDb25zb2xlQWdlbnQuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL1dlYkNvbnNvbGVBZ2VudC5oCkBAIC0zMyw3
ICszMyw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIERPTVdpbmRvdzsKIGNsYXNzIFJl
c291cmNlRXJyb3I7CiBjbGFzcyBSZXNvdXJjZVJlc3BvbnNlOwotdHlwZWRlZiBTdHJpbmcgRXJy
b3JTdHJpbmc7CiAKIGNsYXNzIFdlYkNvbnNvbGVBZ2VudCA6IHB1YmxpYyBJbnNwZWN0b3I6Oklu
c3BlY3RvckNvbnNvbGVBZ2VudCB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoV2ViQ29uc29s
ZUFnZW50KTsKQEAgLTQ2LDggKzQ1LDYgQEAgcHVibGljOgogICAgIHZvaWQgZnJhbWVXaW5kb3dE
aXNjYXJkZWQoRE9NV2luZG93Kik7CiAgICAgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UodW5zaWdu
ZWQgbG9uZyByZXF1ZXN0SWRlbnRpZmllciwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOwogICAg
IHZvaWQgZGlkRmFpbExvYWRpbmcodW5zaWduZWQgbG9uZyByZXF1ZXN0SWRlbnRpZmllciwgY29u
c3QgUmVzb3VyY2VFcnJvciYpOwotCi1wcm90ZWN0ZWQ6CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL1dlYkRl
YnVnZ2VyQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9XZWJEZWJ1
Z2dlckFnZW50LmNwcAppbmRleCBiOTNhODFmYmY0ZjUwNjQ2NmFkYjNlMTNiYmU4OGNjNTM5MjM1
YjdlLi4xYzYxMzU3YWZkY2UzNTBhZTIzYWJjMjA3ZjIyNzA0Yzk0ZWJmNGYzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL1dlYkRlYnVnZ2VyQWdlbnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvV2ViRGVidWdnZXJBZ2VudC5jcHAK
QEAgLTQ5LDE4ICs0OSwxOCBAQCBib29sIFdlYkRlYnVnZ2VyQWdlbnQ6OmVuYWJsZWQoKSBjb25z
dAogICAgIHJldHVybiBtX2luc3RydW1lbnRpbmdBZ2VudHMuZW5hYmxlZFdlYkRlYnVnZ2VyQWdl
bnQoKSA9PSB0aGlzICYmIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmVuYWJsZWQoKTsKIH0KIAot
dm9pZCBXZWJEZWJ1Z2dlckFnZW50OjplbmFibGUoKQordm9pZCBXZWJEZWJ1Z2dlckFnZW50Ojpp
bnRlcm5hbEVuYWJsZSgpCiB7CiAgICAgbV9pbnN0cnVtZW50aW5nQWdlbnRzLnNldEVuYWJsZWRX
ZWJEZWJ1Z2dlckFnZW50KHRoaXMpOwogCi0gICAgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZW5h
YmxlKCk7CisgICAgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6aW50ZXJuYWxFbmFibGUoKTsKIH0K
IAotdm9pZCBXZWJEZWJ1Z2dlckFnZW50OjpkaXNhYmxlKGJvb2wgaXNCZWluZ0Rlc3Ryb3llZCkK
K3ZvaWQgV2ViRGVidWdnZXJBZ2VudDo6aW50ZXJuYWxEaXNhYmxlKGJvb2wgaXNCZWluZ0Rlc3Ry
b3llZCkKIHsKICAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMuc2V0RW5hYmxlZFdlYkRlYnVnZ2Vy
QWdlbnQobnVsbHB0cik7CiAKLSAgICBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkaXNhYmxlKGlz
QmVpbmdEZXN0cm95ZWQpOworICAgIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmludGVybmFsRGlz
YWJsZShpc0JlaW5nRGVzdHJveWVkKTsKIH0KIAogdm9pZCBXZWJEZWJ1Z2dlckFnZW50OjpkaWRB
ZGRFdmVudExpc3RlbmVyKEV2ZW50VGFyZ2V0JiB0YXJnZXQsIGNvbnN0IEF0b21TdHJpbmcmIGV2
ZW50VHlwZSwgRXZlbnRMaXN0ZW5lciYgbGlzdGVuZXIsIGJvb2wgY2FwdHVyZSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvV2ViRGVidWdnZXJBZ2VudC5oIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9XZWJEZWJ1Z2dlckFnZW50LmgKaW5kZXgg
MTBiOTY0ODg4MWFhMDE1NjRmY2JlNzJlNzRmZmJhYzc5Njg0NTc2Mi4uYTkyMzcxZGE1ZDIzYWEw
NWVkYjY4OTg3NTllYTQxMWVlNzVhNjk4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2FnZW50cy9XZWJEZWJ1Z2dlckFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2FnZW50cy9XZWJEZWJ1Z2dlckFnZW50LmgKQEAgLTM1LDcgKzM1LDYgQEAgY2xhc3Mg
RXZlbnRUYXJnZXQ7CiBjbGFzcyBJbnN0cnVtZW50aW5nQWdlbnRzOwogY2xhc3MgUmVnaXN0ZXJl
ZEV2ZW50TGlzdGVuZXI7CiBjbGFzcyBUaW1lckJhc2U7Ci10eXBlZGVmIFN0cmluZyBFcnJvclN0
cmluZzsKIAogY2xhc3MgV2ViRGVidWdnZXJBZ2VudCA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3Bl
Y3RvckRlYnVnZ2VyQWdlbnQgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFdlYkRlYnVnZ2Vy
QWdlbnQpOwpAQCAtNTYsOCArNTUsOCBAQCBwdWJsaWM6CiAKIHByb3RlY3RlZDoKICAgICBXZWJE
ZWJ1Z2dlckFnZW50KFdlYkFnZW50Q29udGV4dCYpOwotICAgIHZvaWQgZW5hYmxlKCkgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCBkaXNhYmxlKGJvb2wgaXNCZWluZ0Rlc3Ryb3llZCkgb3ZlcnJpZGU7Cisg
ICAgdm9pZCBpbnRlcm5hbEVuYWJsZSgpIG92ZXJyaWRlOworICAgIHZvaWQgaW50ZXJuYWxEaXNh
YmxlKGJvb2wgaXNCZWluZ0Rlc3Ryb3llZCkgb3ZlcnJpZGU7CiAKICAgICB2b2lkIGRpZENsZWFy
QXN5bmNTdGFja1RyYWNlRGF0YSgpIGZpbmFsOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvYWdlbnRzL1dlYkhlYXBBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvYWdlbnRzL1dlYkhlYXBBZ2VudC5jcHAKaW5kZXggNWFhNzQ1M2QwOTU2MDc2Mjc4ZWIw
MzBmODA4ZGRmMDE0ZGFiZmI4NS4uOTI3NWU4Zjc5ZDAwZmUxYTExODIxZWQ4YTg2OWMwZTE3YjQw
ODAyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9XZWJIZWFw
QWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvV2ViSGVhcEFn
ZW50LmNwcApAQCAtMzUsNyArMzUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1l
c3BhY2UgSW5zcGVjdG9yOwogCiBzdHJ1Y3QgR2FyYmFnZUNvbGxlY3Rpb25EYXRhIHsKLSAgICBJ
bnNwZWN0b3I6OlByb3RvY29sOjpIZWFwOjpHYXJiYWdlQ29sbGVjdGlvbjo6VHlwZSB0eXBlOwor
ICAgIFByb3RvY29sOjpIZWFwOjpHYXJiYWdlQ29sbGVjdGlvbjo6VHlwZSB0eXBlOwogICAgIFNl
Y29uZHMgc3RhcnRUaW1lOwogICAgIFNlY29uZHMgZW5kVGltZTsKIH07CkBAIC0xMDMsMjUgKzEw
MywyNyBAQCBXZWJIZWFwQWdlbnQ6OldlYkhlYXBBZ2VudChXZWJBZ2VudENvbnRleHQmIGNvbnRl
eHQpCiAKIFdlYkhlYXBBZ2VudDo6fldlYkhlYXBBZ2VudCgpID0gZGVmYXVsdDsKIAotdm9pZCBX
ZWJIZWFwQWdlbnQ6OmVuYWJsZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCitQcm90b2NvbDo6
RXJyb3JTdHJpbmdPcjx2b2lkPiBXZWJIZWFwQWdlbnQ6OmVuYWJsZSgpCiB7Ci0gICAgSW5zcGVj
dG9ySGVhcEFnZW50OjplbmFibGUoZXJyb3JTdHJpbmcpOworICAgIGF1dG8gcmVzdWx0ID0gSW5z
cGVjdG9ySGVhcEFnZW50OjplbmFibGUoKTsKIAogICAgIGlmIChhdXRvKiBjb25zb2xlQWdlbnQg
PSBtX2luc3RydW1lbnRpbmdBZ2VudHMud2ViQ29uc29sZUFnZW50KCkpCiAgICAgICAgIGNvbnNv
bGVBZ2VudC0+c2V0SGVhcEFnZW50KHRoaXMpOworCisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAot
dm9pZCBXZWJIZWFwQWdlbnQ6OmRpc2FibGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nKQorUHJv
dG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gV2ViSGVhcEFnZW50OjpkaXNhYmxlKCkKIHsKICAg
ICBtX3NlbmRHYXJiYWdlQ29sbGVjdGlvbkV2ZW50c1Rhc2stPnJlc2V0KCk7CiAKICAgICBpZiAo
YXV0byogY29uc29sZUFnZW50ID0gbV9pbnN0cnVtZW50aW5nQWdlbnRzLndlYkNvbnNvbGVBZ2Vu
dCgpKQogICAgICAgICBjb25zb2xlQWdlbnQtPnNldEhlYXBBZ2VudChudWxscHRyKTsKIAotICAg
IEluc3BlY3RvckhlYXBBZ2VudDo6ZGlzYWJsZShlcnJvclN0cmluZyk7CisgICAgcmV0dXJuIElu
c3BlY3RvckhlYXBBZ2VudDo6ZGlzYWJsZSgpOwogfQogCi12b2lkIFdlYkhlYXBBZ2VudDo6ZGlz
cGF0Y2hHYXJiYWdlQ29sbGVjdGVkRXZlbnQoSW5zcGVjdG9yOjpQcm90b2NvbDo6SGVhcDo6R2Fy
YmFnZUNvbGxlY3Rpb246OlR5cGUgdHlwZSwgU2Vjb25kcyBzdGFydFRpbWUsIFNlY29uZHMgZW5k
VGltZSkKK3ZvaWQgV2ViSGVhcEFnZW50OjpkaXNwYXRjaEdhcmJhZ2VDb2xsZWN0ZWRFdmVudChQ
cm90b2NvbDo6SGVhcDo6R2FyYmFnZUNvbGxlY3Rpb246OlR5cGUgdHlwZSwgU2Vjb25kcyBzdGFy
dFRpbWUsIFNlY29uZHMgZW5kVGltZSkKIHsKICAgICAvLyBEaXNwYXRjaCB0aGUgZXZlbnQgYXN5
bmNocm9ub3VzbHkgYmVjYXVzZSB0aGlzIG1ldGhvZCBtYXkgYmUKICAgICAvLyBjYWxsZWQgYmV0
d2VlbiBjb2xsZWN0aW9uIGFuZCBzd2VlcGluZyBhbmQgd2UgZG9uJ3Qgd2FudCB0bwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9XZWJIZWFwQWdlbnQuaCBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvV2ViSGVhcEFnZW50LmgKaW5kZXggMGJjOGU2
NGFmNWE4NmE3MmQ1ZjgwNDQwZmRiMTE2M2ZlMTdlMTU3My4uYTM1ZTU3Y2M3YTcxZjhhZjQxMzg2
Mzc4N2NlZjM2YmVlNDE2ZjZiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2FnZW50cy9XZWJIZWFwQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdl
bnRzL1dlYkhlYXBBZ2VudC5oCkBAIC0zMyw3ICszMyw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogY2xhc3MgU2VuZEdhcmJhZ2VDb2xsZWN0aW9uRXZlbnRzVGFzazsKIHN0cnVjdCBHYXJiYWdl
Q29sbGVjdGlvbkRhdGE7Ci10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKIAogY2xhc3MgV2Vi
SGVhcEFnZW50IDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9ySGVhcEFnZW50IHsKICAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShXZWJIZWFwQWdlbnQpOwpAQCAtNDQsOCArNDMsOCBAQCBwdWJs
aWM6CiAgICAgfldlYkhlYXBBZ2VudCgpIG92ZXJyaWRlOwogCiAgICAgLy8gSGVhcEJhY2tlbmRE
aXNwYXRjaGVySGFuZGxlcgotICAgIHZvaWQgZW5hYmxlKEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7
Ci0gICAgdm9pZCBkaXNhYmxlKEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7CisgICAgSW5zcGVjdG9y
OjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBlbmFibGUoKSBvdmVycmlkZTsKKyAgICBJ
bnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGRpc2FibGUoKSBvdmVycmlk
ZTsKIAogcHJvdGVjdGVkOgogICAgIHZvaWQgZGlzcGF0Y2hHYXJiYWdlQ29sbGVjdGVkRXZlbnQo
SW5zcGVjdG9yOjpQcm90b2NvbDo6SGVhcDo6R2FyYmFnZUNvbGxlY3Rpb246OlR5cGUsIFNlY29u
ZHMgc3RhcnRUaW1lLCBTZWNvbmRzIGVuZFRpbWUpIGZpbmFsOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VBdWRpdEFnZW50LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlQXVkaXRBZ2VudC5jcHAKaW5kZXgg
ZGRkNTNiYTVkZmJjYTU1MzdiYmI2YjdiZTA2NTA1N2Q3MmZiYWJkOC4uOWFjZmU0ZGQ0YjE2MGVl
OWIzODkxMGNjOWM3NWEyNDEyNGNlZmVkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VBdWRpdEFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZUF1ZGl0QWdlbnQuY3BwCkBAIC01Niw3ICs1Niw3
IEBAIFBhZ2VBdWRpdEFnZW50OjpQYWdlQXVkaXRBZ2VudChQYWdlQWdlbnRDb250ZXh0JiBjb250
ZXh0KQogCiBQYWdlQXVkaXRBZ2VudDo6flBhZ2VBdWRpdEFnZW50KCkgPSBkZWZhdWx0OwogCi1J
bmplY3RlZFNjcmlwdCBQYWdlQXVkaXRBZ2VudDo6aW5qZWN0ZWRTY3JpcHRGb3JFdmFsKGNvbnN0
IGludCogZXhlY3V0aW9uQ29udGV4dElkKQorSW5qZWN0ZWRTY3JpcHQgUGFnZUF1ZGl0QWdlbnQ6
OmluamVjdGVkU2NyaXB0Rm9yRXZhbChPcHRpb25hbDxQcm90b2NvbDo6UnVudGltZTo6RXhlY3V0
aW9uQ29udGV4dElkPiYmIGV4ZWN1dGlvbkNvbnRleHRJZCkKIHsKICAgICBpZiAoZXhlY3V0aW9u
Q29udGV4dElkKQogICAgICAgICByZXR1cm4gaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKCkuaW5qZWN0
ZWRTY3JpcHRGb3JJZCgqZXhlY3V0aW9uQ29udGV4dElkKTsKQEAgLTY1LDkgKzY1LDkgQEAgSW5q
ZWN0ZWRTY3JpcHQgUGFnZUF1ZGl0QWdlbnQ6OmluamVjdGVkU2NyaXB0Rm9yRXZhbChjb25zdCBp
bnQqIGV4ZWN1dGlvbkNvbnRleHQKICAgICByZXR1cm4gaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKCku
aW5qZWN0ZWRTY3JpcHRGb3Ioc2NyaXB0U3RhdGUpOwogfQogCi1JbmplY3RlZFNjcmlwdCBQYWdl
QXVkaXRBZ2VudDo6aW5qZWN0ZWRTY3JpcHRGb3JFdmFsKEVycm9yU3RyaW5nJiBlcnJvclN0cmlu
ZywgY29uc3QgaW50KiBleGVjdXRpb25Db250ZXh0SWQpCitJbmplY3RlZFNjcmlwdCBQYWdlQXVk
aXRBZ2VudDo6aW5qZWN0ZWRTY3JpcHRGb3JFdmFsKFByb3RvY29sOjpFcnJvclN0cmluZyYgZXJy
b3JTdHJpbmcsIE9wdGlvbmFsPFByb3RvY29sOjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0SWQ+
JiYgZXhlY3V0aW9uQ29udGV4dElkKQogewotICAgIEluamVjdGVkU2NyaXB0IGluamVjdGVkU2Ny
aXB0ID0gaW5qZWN0ZWRTY3JpcHRGb3JFdmFsKGV4ZWN1dGlvbkNvbnRleHRJZCk7CisgICAgSW5q
ZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHQgPSBpbmplY3RlZFNjcmlwdEZvckV2YWwoV1RGTW92
ZShleGVjdXRpb25Db250ZXh0SWQpKTsKICAgICBpZiAoaW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1
ZSgpKSB7CiAgICAgICAgIGlmIChleGVjdXRpb25Db250ZXh0SWQpCiAgICAgICAgICAgICBlcnJv
clN0cmluZyA9ICJNaXNzaW5nIGluamVjdGVkIHNjcmlwdCBmb3IgZ2l2ZW4gZXhlY3V0aW9uQ29u
dGV4dElkIl9zOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9w
YWdlL1BhZ2VBdWRpdEFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3Bh
Z2UvUGFnZUF1ZGl0QWdlbnQuaAppbmRleCBkZGVjNDY1MTdlMWEwNWNiZjViZjhmZmQ3ZDFhYzg4
OGEwODk0Zjc5Li42OTNmYWMzMjc0NjlhOTA0NGQ4NzAxNzZmYWEyYTFkNDlmYmExYjM5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZUF1ZGl0QWdl
bnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZUF1ZGl0
QWdlbnQuaApAQCAtMzcsMTYgKzM3LDE2IEBAIGNsYXNzIFBhZ2VBdWRpdEFnZW50IGZpbmFsIDog
cHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yQXVkaXRBZ2VudCB7CiAgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgUGFnZUF1ZGl0QWdlbnQoUGFnZUFnZW50Q29udGV4
dCYpOwotICAgIH5QYWdlQXVkaXRBZ2VudCgpIG92ZXJyaWRlOworICAgIH5QYWdlQXVkaXRBZ2Vu
dCgpOwogCiBwcml2YXRlOgotICAgIEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRT
Y3JpcHRGb3JFdmFsKGNvbnN0IGludCogZXhlY3V0aW9uQ29udGV4dElkKTsKLSAgICBJbnNwZWN0
b3I6OkluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0Rm9yRXZhbChJbnNwZWN0b3I6OkVycm9y
U3RyaW5nJiwgY29uc3QgaW50KiBleGVjdXRpb25Db250ZXh0SWQpIG92ZXJyaWRlOworICAgIElu
c3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHRGb3JFdmFsKE9wdGlvbmFsPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkV4ZWN1dGlvbkNvbnRleHRJZD4mJik7CisgICAg
SW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdEZvckV2YWwoSW5zcGVjdG9y
OjpQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpS
dW50aW1lOjpFeGVjdXRpb25Db250ZXh0SWQ+JiYpOwogCi0gICAgdm9pZCBwb3B1bGF0ZUF1ZGl0
T2JqZWN0KEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlN0cm9uZzxKU0M6OkpTT2JqZWN0PiYg
YXVkaXRPYmplY3QpIG92ZXJyaWRlOworICAgIHZvaWQgcG9wdWxhdGVBdWRpdE9iamVjdChKU0M6
OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJvbmc8SlNDOjpKU09iamVjdD4mIGF1ZGl0T2JqZWN0
KTsKIAotICAgIHZvaWQgbXV0ZUNvbnNvbGUoKSBvdmVycmlkZTsKLSAgICB2b2lkIHVubXV0ZUNv
bnNvbGUoKSBvdmVycmlkZTsKKyAgICB2b2lkIG11dGVDb25zb2xlKCk7CisgICAgdm9pZCB1bm11
dGVDb25zb2xlKCk7CiAKICAgICBQYWdlJiBtX2luc3BlY3RlZFBhZ2U7CiB9OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VDb25zb2xlQWdlbnQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VDb25zb2xlQWdl
bnQuY3BwCmluZGV4IDEzZmQxZDdkYWJhYTk5ZDBiYjBjNDlmZjdiYjVlNTJmNTRjNjYzZDMuLjEy
MTJiODY2ZDllMjg5OTY3N2E5M2ZkNzE2YzFlODY4ZDNjMWZmZmIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlQ29uc29sZUFnZW50LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZUNvbnNvbGVBZ2VudC5j
cHAKQEAgLTU0LDc5ICs1NCw4MyBAQCBQYWdlQ29uc29sZUFnZW50OjpQYWdlQ29uc29sZUFnZW50
KFBhZ2VBZ2VudENvbnRleHQmIGNvbnRleHQpCiAKIFBhZ2VDb25zb2xlQWdlbnQ6On5QYWdlQ29u
c29sZUFnZW50KCkgPSBkZWZhdWx0OwogCi12b2lkIFBhZ2VDb25zb2xlQWdlbnQ6OmNsZWFyTWVz
c2FnZXMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8
dm9pZD4gUGFnZUNvbnNvbGVBZ2VudDo6Y2xlYXJNZXNzYWdlcygpCiB7CiAgICAgaWYgKGF1dG8q
IGRvbUFnZW50ID0gbV9pbnN0cnVtZW50aW5nQWdlbnRzLnBlcnNpc3RlbnRET01BZ2VudCgpKQog
ICAgICAgICBkb21BZ2VudC0+cmVsZWFzZURhbmdsaW5nTm9kZXMoKTsKIAotICAgIFdlYkNvbnNv
bGVBZ2VudDo6Y2xlYXJNZXNzYWdlcyhlcnJvclN0cmluZyk7CisgICAgcmV0dXJuIFdlYkNvbnNv
bGVBZ2VudDo6Y2xlYXJNZXNzYWdlcygpOwogfQogCi12b2lkIFBhZ2VDb25zb2xlQWdlbnQ6Omdl
dExvZ2dpbmdDaGFubmVscyhFcnJvclN0cmluZyYsIFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWw+PiYgY2hhbm5lbHMpCitQcm90b2NvbDo6
RXJyb3JTdHJpbmdPcjxSZWY8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6Q29uc29sZTo6Q2hhbm5l
bD4+PiBQYWdlQ29uc29sZUFnZW50OjpnZXRMb2dnaW5nQ2hhbm5lbHMoKQogewotICAgIHN0YXRp
YyBjb25zdCBzdHJ1Y3QgQ2hhbm5lbFRhYmxlIHsKLSAgICAgICAgTmV2ZXJEZXN0cm95ZWQ8U3Ry
aW5nPiBuYW1lOwotICAgICAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpDb25zb2xlOjpDaGFubmVs
U291cmNlIHNvdXJjZTsKLSAgICB9IGNoYW5uZWxUYWJsZVtdID0gewotICAgICAgICB7IE1BS0Vf
U1RBVElDX1NUUklOR19JTVBMKCJXZWJSVEMiKSwgSW5zcGVjdG9yOjpQcm90b2NvbDo6Q29uc29s
ZTo6Q2hhbm5lbFNvdXJjZTo6V2ViUlRDIH0sCi0gICAgICAgIHsgTUFLRV9TVEFUSUNfU1RSSU5H
X0lNUEwoIk1lZGlhIiksIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWxTb3Vy
Y2U6Ok1lZGlhIH0sCi0gICAgICAgIHsgTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwoIk1lZGlhU291
cmNlIiksIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWxTb3VyY2U6Ok1lZGlh
U291cmNlIH0sCi0gICAgfTsKKyAgICBhdXRvIGNoYW5uZWxzID0gSlNPTjo6QXJyYXlPZjxQcm90
b2NvbDo6Q29uc29sZTo6Q2hhbm5lbD46OmNyZWF0ZSgpOwogCi0gICAgY2hhbm5lbHMgPSBKU09O
OjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWw+OjpjcmVhdGUo
KTsKLQotICAgIHNpemVfdCBsZW5ndGggPSBXVEZfQVJSQVlfTEVOR1RIKGNoYW5uZWxUYWJsZSk7
Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICBhdXRv
KiBsb2dDaGFubmVsID0gZ2V0TG9nQ2hhbm5lbChjaGFubmVsVGFibGVbaV0ubmFtZSk7CisgICAg
YXV0byBhZGRMb2dDaGFubmVsID0gWyZdIChQcm90b2NvbDo6Q29uc29sZTo6Q2hhbm5lbFNvdXJj
ZSBzb3VyY2UpIHsKKyAgICAgICAgYXV0byogbG9nQ2hhbm5lbCA9IGdldExvZ0NoYW5uZWwoUHJv
dG9jb2w6OkhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKHNvdXJjZSkpOwogICAgICAgICBp
ZiAoIWxvZ0NoYW5uZWwpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgYXV0byBsZXZl
bCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWxMZXZlbDo6T2ZmOworICAg
ICAgICBhdXRvIGxldmVsID0gUHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWxMZXZlbDo6T2ZmOwog
ICAgICAgICBpZiAobG9nQ2hhbm5lbC0+c3RhdGUgIT0gV1RGTG9nQ2hhbm5lbFN0YXRlOjpPZmYp
IHsKICAgICAgICAgICAgIHN3aXRjaCAobG9nQ2hhbm5lbC0+bGV2ZWwpIHsKICAgICAgICAgICAg
IGNhc2UgV1RGTG9nTGV2ZWw6OkFsd2F5czoKICAgICAgICAgICAgIGNhc2UgV1RGTG9nTGV2ZWw6
OkVycm9yOgogICAgICAgICAgICAgY2FzZSBXVEZMb2dMZXZlbDo6V2FybmluZzoKICAgICAgICAg
ICAgIGNhc2UgV1RGTG9nTGV2ZWw6OkluZm86Ci0gICAgICAgICAgICAgICAgbGV2ZWwgPSBJbnNw
ZWN0b3I6OlByb3RvY29sOjpDb25zb2xlOjpDaGFubmVsTGV2ZWw6OkJhc2ljOworICAgICAgICAg
ICAgICAgIGxldmVsID0gUHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWxMZXZlbDo6QmFzaWM7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CisKICAgICAgICAgICAgIGNhc2UgV1RGTG9nTGV2ZWw6OkRl
YnVnOgotICAgICAgICAgICAgICAgIGxldmVsID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q29uc29s
ZTo6Q2hhbm5lbExldmVsOjpWZXJib3NlOworICAgICAgICAgICAgICAgIGxldmVsID0gUHJvdG9j
b2w6OkNvbnNvbGU6OkNoYW5uZWxMZXZlbDo6VmVyYm9zZTsKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIGF1dG8gY2hhbm5lbCA9IElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWw6OmNyZWF0ZSgpCi0gICAgICAgICAg
ICAuc2V0U291cmNlKGNoYW5uZWxUYWJsZVtpXS5zb3VyY2UpCisgICAgICAgIGF1dG8gY2hhbm5l
bCA9IFByb3RvY29sOjpDb25zb2xlOjpDaGFubmVsOjpjcmVhdGUoKQorICAgICAgICAgICAgLnNl
dFNvdXJjZShzb3VyY2UpCiAgICAgICAgICAgICAuc2V0TGV2ZWwobGV2ZWwpCiAgICAgICAgICAg
ICAucmVsZWFzZSgpOwogICAgICAgICBjaGFubmVscy0+YWRkSXRlbShXVEZNb3ZlKGNoYW5uZWwp
KTsKLSAgICB9CisgICAgfTsKKyAgICBhZGRMb2dDaGFubmVsKFByb3RvY29sOjpDb25zb2xlOjpD
aGFubmVsU291cmNlOjpYTUwpOworICAgIGFkZExvZ0NoYW5uZWwoUHJvdG9jb2w6OkNvbnNvbGU6
OkNoYW5uZWxTb3VyY2U6OkphdmFTY3JpcHQpOworICAgIGFkZExvZ0NoYW5uZWwoUHJvdG9jb2w6
OkNvbnNvbGU6OkNoYW5uZWxTb3VyY2U6Ok5ldHdvcmspOworICAgIGFkZExvZ0NoYW5uZWwoUHJv
dG9jb2w6OkNvbnNvbGU6OkNoYW5uZWxTb3VyY2U6OkNvbnNvbGVBUEkpOworICAgIGFkZExvZ0No
YW5uZWwoUHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWxTb3VyY2U6OlN0b3JhZ2UpOworICAgIGFk
ZExvZ0NoYW5uZWwoUHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWxTb3VyY2U6OkFwcGNhY2hlKTsK
KyAgICBhZGRMb2dDaGFubmVsKFByb3RvY29sOjpDb25zb2xlOjpDaGFubmVsU291cmNlOjpSZW5k
ZXJpbmcpOworICAgIGFkZExvZ0NoYW5uZWwoUHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWxTb3Vy
Y2U6OkNTUyk7CisgICAgYWRkTG9nQ2hhbm5lbChQcm90b2NvbDo6Q29uc29sZTo6Q2hhbm5lbFNv
dXJjZTo6U2VjdXJpdHkpOworICAgIGFkZExvZ0NoYW5uZWwoUHJvdG9jb2w6OkNvbnNvbGU6OkNo
YW5uZWxTb3VyY2U6OkNvbnRlbnRCbG9ja2VyKTsKKyAgICBhZGRMb2dDaGFubmVsKFByb3RvY29s
OjpDb25zb2xlOjpDaGFubmVsU291cmNlOjpNZWRpYSk7CisgICAgYWRkTG9nQ2hhbm5lbChQcm90
b2NvbDo6Q29uc29sZTo6Q2hhbm5lbFNvdXJjZTo6TWVkaWFTb3VyY2UpOworICAgIGFkZExvZ0No
YW5uZWwoUHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWxTb3VyY2U6OldlYlJUQyk7CisgICAgYWRk
TG9nQ2hhbm5lbChQcm90b2NvbDo6Q29uc29sZTo6Q2hhbm5lbFNvdXJjZTo6SVRQRGVidWcpOwor
ICAgIGFkZExvZ0NoYW5uZWwoUHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWxTb3VyY2U6OkFkQ2xp
Y2tBdHRyaWJ1dGlvbik7CisgICAgYWRkTG9nQ2hhbm5lbChQcm90b2NvbDo6Q29uc29sZTo6Q2hh
bm5lbFNvdXJjZTo6T3RoZXIpOworCisgICAgcmV0dXJuIFdURk1vdmUoY2hhbm5lbHMpOwogfQog
Ci1zdGF0aWMgT3B0aW9uYWw8c3RkOjpwYWlyPFdURkxvZ0NoYW5uZWxTdGF0ZSwgV1RGTG9nTGV2
ZWw+PiBjaGFubmVsQ29uZmlndXJhdGlvbkZvclN0cmluZyhjb25zdCBTdHJpbmcmIGxldmVsU3Ry
aW5nKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gUGFnZUNvbnNvbGVBZ2VudDo6c2V0
TG9nZ2luZ0NoYW5uZWxMZXZlbChQcm90b2NvbDo6Q29uc29sZTo6Q2hhbm5lbFNvdXJjZSBzb3Vy
Y2UsIFByb3RvY29sOjpDb25zb2xlOjpDaGFubmVsTGV2ZWwgbGV2ZWwpCiB7Ci0gICAgaWYgKGVx
dWFsSWdub3JpbmdBU0NJSUNhc2UobGV2ZWxTdHJpbmcsICJvZmYiKSkKLSAgICAgICAgcmV0dXJu
IHsgeyBXVEZMb2dDaGFubmVsU3RhdGU6Ok9mZiwgV1RGTG9nTGV2ZWw6OkVycm9yIH0gfTsKKyAg
ICBzd2l0Y2ggKGxldmVsKSB7CisgICAgY2FzZSBQcm90b2NvbDo6Q29uc29sZTo6Q2hhbm5lbExl
dmVsOjpPZmY6CisgICAgICAgIG1faW5zcGVjdGVkUGFnZS5jb25maWd1cmVMb2dnaW5nQ2hhbm5l
bChQcm90b2NvbDo6SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUoc291cmNlKSwgV1RGTG9n
Q2hhbm5lbFN0YXRlOjpPZmYsIFdURkxvZ0xldmVsOjpFcnJvcik7CisgICAgICAgIHJldHVybiB7
IH07CiAKLSAgICBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShsZXZlbFN0cmluZywgImJhc2lj
IikpCi0gICAgICAgIHJldHVybiB7IHsgV1RGTG9nQ2hhbm5lbFN0YXRlOjpPbiwgV1RGTG9nTGV2
ZWw6OkluZm8gfSB9OworICAgIGNhc2UgUHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWxMZXZlbDo6
QmFzaWM6CisgICAgICAgIG1faW5zcGVjdGVkUGFnZS5jb25maWd1cmVMb2dnaW5nQ2hhbm5lbChQ
cm90b2NvbDo6SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUoc291cmNlKSwgV1RGTG9nQ2hh
bm5lbFN0YXRlOjpPbiwgV1RGTG9nTGV2ZWw6OkluZm8pOworICAgICAgICByZXR1cm4geyB9Owog
Ci0gICAgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UobGV2ZWxTdHJpbmcsICJ2ZXJib3NlIikp
Ci0gICAgICAgIHJldHVybiB7IHsgV1RGTG9nQ2hhbm5lbFN0YXRlOjpPbiwgV1RGTG9nTGV2ZWw6
OkRlYnVnIH0gfTsKLQotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLXZvaWQgUGFnZUNv
bnNvbGVBZ2VudDo6c2V0TG9nZ2luZ0NoYW5uZWxMZXZlbChFcnJvclN0cmluZyYgZXJyb3JTdHJp
bmcsIGNvbnN0IFN0cmluZyYgY2hhbm5lbE5hbWUsIGNvbnN0IFN0cmluZyYgY2hhbm5lbExldmVs
KQotewotICAgIGF1dG8gY29uZmlndXJhdGlvbiA9IGNoYW5uZWxDb25maWd1cmF0aW9uRm9yU3Ry
aW5nKGNoYW5uZWxMZXZlbCk7Ci0gICAgaWYgKCFjb25maWd1cmF0aW9uKSB7Ci0gICAgICAgIGVy
cm9yU3RyaW5nID0gbWFrZVN0cmluZygiVW5rbm93biBjaGFubmVsTGV2ZWw6ICJfcywgY2hhbm5l
bExldmVsKTsKLSAgICAgICAgcmV0dXJuOworICAgIGNhc2UgUHJvdG9jb2w6OkNvbnNvbGU6OkNo
YW5uZWxMZXZlbDo6VmVyYm9zZToKKyAgICAgICAgbV9pbnNwZWN0ZWRQYWdlLmNvbmZpZ3VyZUxv
Z2dpbmdDaGFubmVsKFByb3RvY29sOjpIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShzb3Vy
Y2UpLCBXVEZMb2dDaGFubmVsU3RhdGU6Ok9uLCBXVEZMb2dMZXZlbDo6RGVidWcpOworICAgICAg
ICByZXR1cm4geyB9OwogICAgIH0KIAotICAgIG1faW5zcGVjdGVkUGFnZS5jb25maWd1cmVMb2dn
aW5nQ2hhbm5lbChjaGFubmVsTmFtZSwgY29uZmlndXJhdGlvbi52YWx1ZSgpLmZpcnN0LCBjb25m
aWd1cmF0aW9uLnZhbHVlKCkuc2Vjb25kKTsKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICByZXR1cm4geyB9OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZUNvbnNvbGVBZ2VudC5oIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VDb25zb2xlQWdlbnQuaApp
bmRleCA0YzQ1ZjJkYWQwZjdjMWI0MDQ1MzlmZTRmNTdlNWE4NmRiMjA2MzE4Li40MWZlNzZkMDMy
MDcwZTBkNDEwM2U0MGEyYzE0NGNlMzc5ODFjODMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZUNvbnNvbGVBZ2VudC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlQ29uc29sZUFnZW50LmgKQEAgLTQxLDEy
ICs0MSwxMiBAQCBjbGFzcyBQYWdlQ29uc29sZUFnZW50IGZpbmFsIDogcHVibGljIFdlYkNvbnNv
bGVBZ2VudCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgUGFn
ZUNvbnNvbGVBZ2VudChQYWdlQWdlbnRDb250ZXh0Jik7Ci0gICAgflBhZ2VDb25zb2xlQWdlbnQo
KSBvdmVycmlkZTsKKyAgICB+UGFnZUNvbnNvbGVBZ2VudCgpOwogCiAgICAgLy8gQ29uc29sZUJh
Y2tlbmREaXNwYXRjaGVySGFuZGxlcgotICAgIHZvaWQgY2xlYXJNZXNzYWdlcyhFcnJvclN0cmlu
ZyYpIG92ZXJyaWRlOwotICAgIHZvaWQgZ2V0TG9nZ2luZ0NoYW5uZWxzKEVycm9yU3RyaW5nJiwg
UmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q29uc29sZTo6Q2hhbm5l
bD4+Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRMb2dnaW5nQ2hhbm5lbExldmVsKEVycm9yU3Ry
aW5nJiwgY29uc3QgU3RyaW5nJiBjaGFubmVsLCBjb25zdCBTdHJpbmcmIGxldmVsKSBvdmVycmlk
ZTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGNsZWFyTWVz
c2FnZXMoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxKU09O
OjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWw+Pj4gZ2V0TG9n
Z2luZ0NoYW5uZWxzKCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2
b2lkPiBzZXRMb2dnaW5nQ2hhbm5lbExldmVsKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNvbnNvbGU6
OkNoYW5uZWxTb3VyY2UsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWxMZXZl
bCk7CiAKIHByaXZhdGU6CiAgICAgSW5zdHJ1bWVudGluZ0FnZW50cyYgbV9pbnN0cnVtZW50aW5n
QWdlbnRzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdl
L1BhZ2VET01EZWJ1Z2dlckFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2Vu
dHMvcGFnZS9QYWdlRE9NRGVidWdnZXJBZ2VudC5jcHAKaW5kZXggN2M1ZmZhNGUzODNmNTJjYWI1
ZTJhMjdmZDkxNTkwOWZiY2VmNTE0Yy4uYzg4YmJkYzAzZDI1NDEwZmI2OTU4YjBmMDlhZmM1YmYx
ODhkYjI1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdl
L1BhZ2VET01EZWJ1Z2dlckFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
YWdlbnRzL3BhZ2UvUGFnZURPTURlYnVnZ2VyQWdlbnQuY3BwCkBAIC02OSw4NCArNjksNzQgQEAg
dm9pZCBQYWdlRE9NRGVidWdnZXJBZ2VudDo6ZGlzYWJsZSgpCiAgICAgSW5zcGVjdG9yRE9NRGVi
dWdnZXJBZ2VudDo6ZGlzYWJsZSgpOwogfQogCi12b2lkIFBhZ2VET01EZWJ1Z2dlckFnZW50Ojpz
ZXRET01CcmVha3BvaW50KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJZCwgY29u
c3QgU3RyaW5nJiB0eXBlU3RyaW5nLCBjb25zdCBKU09OOjpPYmplY3QqIG9wdGlvbnNQYXlsb2Fk
KQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gUGFnZURPTURlYnVnZ2VyQWdlbnQ6OnNl
dERPTUJyZWFrcG9pbnQoUHJvdG9jb2w6OkRPTTo6Tm9kZUlkIG5vZGVJZCwgUHJvdG9jb2w6OkRP
TURlYnVnZ2VyOjpET01CcmVha3BvaW50VHlwZSB0eXBlLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYm
IG9wdGlvbnMpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAg
ICAgYXV0byogZG9tQWdlbnQgPSBtX2luc3RydW1lbnRpbmdBZ2VudHMucGVyc2lzdGVudERPTUFn
ZW50KCk7Ci0gICAgaWYgKCFkb21BZ2VudCkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJET00g
ZG9tYWluIG11c3QgYmUgZW5hYmxlZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBp
ZiAoIWRvbUFnZW50KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkRPTSBkb21haW4g
bXVzdCBiZSBlbmFibGVkIl9zKTsKIAogICAgIE5vZGUqIG5vZGUgPSBkb21BZ2VudC0+YXNzZXJ0
Tm9kZShlcnJvclN0cmluZywgbm9kZUlkKTsKICAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJldHVy
bjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAotICAgIGF1
dG8gdHlwZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6Okluc3BlY3RvckhlbHBlcnM6OnBhcnNlRW51
bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpET01EZWJ1Z2dlcjo6RE9NQnJl
YWtwb2ludFR5cGU+KHR5cGVTdHJpbmcpOwotICAgIGlmICghdHlwZSkgewotICAgICAgICBlcnJv
clN0cmluZyA9IG1ha2VTdHJpbmcoIlVua25vd24gdHlwZTogIl9zLCB0eXBlU3RyaW5nKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8gYnJlYWtwb2ludCA9IEluc3BlY3RvckRl
YnVnZ2VyQWdlbnQ6OmRlYnVnZ2VyQnJlYWtwb2ludEZyb21QYXlsb2FkKGVycm9yU3RyaW5nLCBv
cHRpb25zUGF5bG9hZCk7CisgICAgYXV0byBicmVha3BvaW50ID0gSW5zcGVjdG9yRGVidWdnZXJB
Z2VudDo6ZGVidWdnZXJCcmVha3BvaW50RnJvbVBheWxvYWQoZXJyb3JTdHJpbmcsIFdURk1vdmUo
b3B0aW9ucykpOwogICAgIGlmICghYnJlYWtwb2ludCkKLSAgICAgICAgcmV0dXJuOworICAgICAg
ICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCi0gICAgc3dpdGNoICgqdHlw
ZSkgewotICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NRGVidWdnZXI6OkRPTUJyZWFr
cG9pbnRUeXBlOjpTdWJ0cmVlTW9kaWZpZWQ6CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2Fz
ZSBQcm90b2NvbDo6RE9NRGVidWdnZXI6OkRPTUJyZWFrcG9pbnRUeXBlOjpTdWJ0cmVlTW9kaWZp
ZWQ6CiAgICAgICAgIGlmICghbV9kb21TdWJ0cmVlTW9kaWZpZWRCcmVha3BvaW50cy5hZGQobm9k
ZSwgYnJlYWtwb2ludC5yZWxlYXNlTm9uTnVsbCgpKSkKLSAgICAgICAgICAgIGVycm9yU3RyaW5n
ID0gIkJyZWFrcG9pbnQgZm9yIGdpdmVuIG5vZGUgYW5kIGdpdmVuIHR5cGUgYWxyZWFkeSBleGlz
dHMiX3M7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3Rl
ZCgiQnJlYWtwb2ludCBmb3IgZ2l2ZW4gbm9kZSBhbmQgZ2l2ZW4gdHlwZSBhbHJlYWR5IGV4aXN0
cyJfcyk7CisgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBjYXNlIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRPTURlYnVnZ2VyOjpET01CcmVha3BvaW50VHlwZTo6QXR0cmlidXRlTW9kaWZpZWQ6Cisg
ICAgY2FzZSBQcm90b2NvbDo6RE9NRGVidWdnZXI6OkRPTUJyZWFrcG9pbnRUeXBlOjpBdHRyaWJ1
dGVNb2RpZmllZDoKICAgICAgICAgaWYgKCFtX2RvbUF0dHJpYnV0ZU1vZGlmaWVkQnJlYWtwb2lu
dHMuYWRkKG5vZGUsIGJyZWFrcG9pbnQucmVsZWFzZU5vbk51bGwoKSkpCi0gICAgICAgICAgICBl
cnJvclN0cmluZyA9ICJCcmVha3BvaW50IGZvciBnaXZlbiBub2RlIGFuZCBnaXZlbiB0eXBlIGFs
cmVhZHkgZXhpc3RzIl9zOwotICAgICAgICByZXR1cm47CisgICAgICAgICAgICByZXR1cm4gbWFr
ZVVuZXhwZWN0ZWQoIkJyZWFrcG9pbnQgZm9yIGdpdmVuIG5vZGUgYW5kIGdpdmVuIHR5cGUgYWxy
ZWFkeSBleGlzdHMiX3MpOworICAgICAgICByZXR1cm4geyB9OwogCi0gICAgY2FzZSBJbnNwZWN0
b3I6OlByb3RvY29sOjpET01EZWJ1Z2dlcjo6RE9NQnJlYWtwb2ludFR5cGU6Ok5vZGVSZW1vdmVk
OgorICAgIGNhc2UgUHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpET01CcmVha3BvaW50VHlwZTo6Tm9k
ZVJlbW92ZWQ6CiAgICAgICAgIGlmICghbV9kb21Ob2RlUmVtb3ZlZEJyZWFrcG9pbnRzLmFkZChu
b2RlLCBicmVha3BvaW50LnJlbGVhc2VOb25OdWxsKCkpKQotICAgICAgICAgICAgZXJyb3JTdHJp
bmcgPSAiQnJlYWtwb2ludCBmb3IgZ2l2ZW4gbm9kZSBhbmQgZ2l2ZW4gdHlwZSBhbHJlYWR5IGV4
aXN0cyJfczsKLSAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVj
dGVkKCJCcmVha3BvaW50IGZvciBnaXZlbiBub2RlIGFuZCBnaXZlbiB0eXBlIGFscmVhZHkgZXhp
c3RzIl9zKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk5vdCBzdXBwb3J0ZWQiKTsKIH0K
IAotdm9pZCBQYWdlRE9NRGVidWdnZXJBZ2VudDo6cmVtb3ZlRE9NQnJlYWtwb2ludChFcnJvclN0
cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQsIGNvbnN0IFN0cmluZyYgdHlwZVN0cmluZykK
K1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IFBhZ2VET01EZWJ1Z2dlckFnZW50OjpyZW1v
dmVET01CcmVha3BvaW50KFByb3RvY29sOjpET006Ok5vZGVJZCBub2RlSWQsIFByb3RvY29sOjpE
T01EZWJ1Z2dlcjo6RE9NQnJlYWtwb2ludFR5cGUgdHlwZSkKIHsKKyAgICBQcm90b2NvbDo6RXJy
b3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBhdXRvKiBkb21BZ2VudCA9IG1faW5zdHJ1bWVu
dGluZ0FnZW50cy5wZXJzaXN0ZW50RE9NQWdlbnQoKTsKLSAgICBpZiAoIWRvbUFnZW50KSB7Ci0g
ICAgICAgIGVycm9yU3RyaW5nID0gIkRPTSBkb21haW4gbXVzdCBiZSBlbmFibGVkIl9zOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghZG9tQWdlbnQpCisgICAgICAgIHJldHVybiBt
YWtlVW5leHBlY3RlZCgiRE9NIGRvbWFpbiBtdXN0IGJlIGVuYWJsZWQiX3MpOwogCiAgICAgTm9k
ZSogbm9kZSA9IGRvbUFnZW50LT5hc3NlcnROb2RlKGVycm9yU3RyaW5nLCBub2RlSWQpOwogICAg
IGlmICghbm9kZSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0
ZWQoZXJyb3JTdHJpbmcpOwogCi0gICAgYXV0byB0eXBlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6
SW5zcGVjdG9ySGVscGVyczo6cGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRPTURlYnVnZ2VyOjpET01CcmVha3BvaW50VHlwZT4odHlwZVN0cmluZyk7Ci0gICAg
aWYgKCF0eXBlKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gbWFrZVN0cmluZygiVW5rbm93biB0
eXBlOiAiX3MsIHR5cGVTdHJpbmcpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgc3dp
dGNoICgqdHlwZSkgewotICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NRGVidWdnZXI6
OkRPTUJyZWFrcG9pbnRUeXBlOjpTdWJ0cmVlTW9kaWZpZWQ6CisgICAgc3dpdGNoICh0eXBlKSB7
CisgICAgY2FzZSBQcm90b2NvbDo6RE9NRGVidWdnZXI6OkRPTUJyZWFrcG9pbnRUeXBlOjpTdWJ0
cmVlTW9kaWZpZWQ6CiAgICAgICAgIGlmICghbV9kb21TdWJ0cmVlTW9kaWZpZWRCcmVha3BvaW50
cy5yZW1vdmUobm9kZSkpCi0gICAgICAgICAgICBlcnJvclN0cmluZyA9ICJCcmVha3BvaW50IGZv
ciBnaXZlbiBub2RlIGFuZCBnaXZlbiB0eXBlIG1pc3NpbmciX3M7Ci0gICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiQnJlYWtwb2ludCBmb3IgZ2l2ZW4g
bm9kZSBhbmQgZ2l2ZW4gdHlwZSBtaXNzaW5nIl9zKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAot
ICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NRGVidWdnZXI6OkRPTUJyZWFrcG9pbnRU
eXBlOjpBdHRyaWJ1dGVNb2RpZmllZDoKKyAgICBjYXNlIFByb3RvY29sOjpET01EZWJ1Z2dlcjo6
RE9NQnJlYWtwb2ludFR5cGU6OkF0dHJpYnV0ZU1vZGlmaWVkOgogICAgICAgICBpZiAoIW1fZG9t
QXR0cmlidXRlTW9kaWZpZWRCcmVha3BvaW50cy5yZW1vdmUobm9kZSkpCi0gICAgICAgICAgICBl
cnJvclN0cmluZyA9ICJCcmVha3BvaW50IGZvciBnaXZlbiBub2RlIGFuZCBnaXZlbiB0eXBlIG1p
c3NpbmciX3M7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBl
Y3RlZCgiQnJlYWtwb2ludCBmb3IgZ2l2ZW4gbm9kZSBhbmQgZ2l2ZW4gdHlwZSBtaXNzaW5nIl9z
KTsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6
RE9NRGVidWdnZXI6OkRPTUJyZWFrcG9pbnRUeXBlOjpOb2RlUmVtb3ZlZDoKKyAgICBjYXNlIFBy
b3RvY29sOjpET01EZWJ1Z2dlcjo6RE9NQnJlYWtwb2ludFR5cGU6Ok5vZGVSZW1vdmVkOgogICAg
ICAgICBpZiAoIW1fZG9tTm9kZVJlbW92ZWRCcmVha3BvaW50cy5yZW1vdmUobm9kZSkpCi0gICAg
ICAgICAgICBlcnJvclN0cmluZyA9ICJCcmVha3BvaW50IGZvciBnaXZlbiBub2RlIGFuZCBnaXZl
biB0eXBlIG1pc3NpbmciX3M7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVybiBt
YWtlVW5leHBlY3RlZCgiQnJlYWtwb2ludCBmb3IgZ2l2ZW4gbm9kZSBhbmQgZ2l2ZW4gdHlwZSBt
aXNzaW5nIl9zKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk5vdCBzdXBwb3J0ZWQiKTsK
IH0KIAogdm9pZCBQYWdlRE9NRGVidWdnZXJBZ2VudDo6bWFpbkZyYW1lTmF2aWdhdGVkKCkKQEAg
LTIxMyw3ICsyMDMsNyBAQCB2b2lkIFBhZ2VET01EZWJ1Z2dlckFnZW50Ojp3aWxsSW5zZXJ0RE9N
Tm9kZShOb2RlJiBwYXJlbnQpCiAKICAgICBBU1NFUlQoY2xvc2VzdEJyZWFrcG9pbnRPd25lcik7
CiAKLSAgICBhdXRvIHBhdXNlRGF0YSA9IGJ1aWxkUGF1c2VEYXRhRm9yRE9NQnJlYWtwb2ludChJ
bnNwZWN0b3I6OlByb3RvY29sOjpET01EZWJ1Z2dlcjo6RE9NQnJlYWtwb2ludFR5cGU6OlN1YnRy
ZWVNb2RpZmllZCwgKmNsb3Nlc3RCcmVha3BvaW50T3duZXIpOworICAgIGF1dG8gcGF1c2VEYXRh
ID0gYnVpbGRQYXVzZURhdGFGb3JET01CcmVha3BvaW50KFByb3RvY29sOjpET01EZWJ1Z2dlcjo6
RE9NQnJlYWtwb2ludFR5cGU6OlN1YnRyZWVNb2RpZmllZCwgKmNsb3Nlc3RCcmVha3BvaW50T3du
ZXIpOwogICAgIHBhdXNlRGF0YS0+c2V0Qm9vbGVhbigiaW5zZXJ0aW9uIiwgdHJ1ZSk7CiAgICAg
Ly8gRklYTUU6IDxodHRwczovL3dlYmtpdC5vcmcvYi8yMTM0OTk+IFdlYiBJbnNwZWN0b3I6IGFs
bG93IERPTSBub2RlcyB0byBiZSBpbnN0cnVtZW50ZWQgYXQgYW55IHBvaW50LCByZWdhcmRsZXNz
IG9mIHdoZXRoZXIgdGhlIG1haW4gZG9jdW1lbnQgaGFzIGFsc28gYmVlbiBpbnN0cnVtZW50ZWQK
ICAgICAvLyBJbmNsdWRlIHRoZSBuZXcgY2hpbGQgbm9kZSBJRCBzbyB0aGUgZnJvbnRlbmQgY2Fu
IHNob3cgdGhlIG5vZGUgdGhhdCdzIGFib3V0IHRvIGJlIGluc2VydGVkLgpAQCAtMjMwLDcgKzIy
MCw3IEBAIHZvaWQgUGFnZURPTURlYnVnZ2VyQWdlbnQ6OndpbGxSZW1vdmVET01Ob2RlKE5vZGUm
IG5vZGUpCiAKICAgICBPcHRpb25hbDxzaXplX3Q+IGNsb3Nlc3REaXN0YW5jZTsKICAgICBSZWZQ
dHI8SlNDOjpCcmVha3BvaW50PiBjbG9zZXN0QnJlYWtwb2ludDsKLSAgICBPcHRpb25hbDxJbnNw
ZWN0b3I6OlByb3RvY29sOjpET01EZWJ1Z2dlcjo6RE9NQnJlYWtwb2ludFR5cGU+IGNsb3Nlc3RC
cmVha3BvaW50VHlwZTsKKyAgICBPcHRpb25hbDxQcm90b2NvbDo6RE9NRGVidWdnZXI6OkRPTUJy
ZWFrcG9pbnRUeXBlPiBjbG9zZXN0QnJlYWtwb2ludFR5cGU7CiAgICAgTm9kZSogY2xvc2VzdEJy
ZWFrcG9pbnRPd25lciA9IG51bGxwdHI7CiAKICAgICBmb3IgKGF1dG8gW2JyZWFrcG9pbnRPd25l
ciwgYnJlYWtwb2ludF0gOiBtX2RvbU5vZGVSZW1vdmVkQnJlYWtwb2ludHMpIHsKQEAgLTI0MSw3
ICsyMzEsNyBAQCB2b2lkIFBhZ2VET01EZWJ1Z2dlckFnZW50Ojp3aWxsUmVtb3ZlRE9NTm9kZShO
b2RlJiBub2RlKQogICAgICAgICBpZiAoIWNsb3Nlc3REaXN0YW5jZSB8fCBkaXN0YW5jZSA8IGNs
b3Nlc3REaXN0YW5jZSkgewogICAgICAgICAgICAgY2xvc2VzdERpc3RhbmNlID0gZGlzdGFuY2U7
CiAgICAgICAgICAgICBjbG9zZXN0QnJlYWtwb2ludCA9IGJyZWFrcG9pbnQuY29weVJlZigpOwot
ICAgICAgICAgICAgY2xvc2VzdEJyZWFrcG9pbnRUeXBlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6
RE9NRGVidWdnZXI6OkRPTUJyZWFrcG9pbnRUeXBlOjpOb2RlUmVtb3ZlZDsKKyAgICAgICAgICAg
IGNsb3Nlc3RCcmVha3BvaW50VHlwZSA9IFByb3RvY29sOjpET01EZWJ1Z2dlcjo6RE9NQnJlYWtw
b2ludFR5cGU6Ok5vZGVSZW1vdmVkOwogICAgICAgICAgICAgY2xvc2VzdEJyZWFrcG9pbnRPd25l
ciA9IGJyZWFrcG9pbnRPd25lcjsKICAgICAgICAgfQogICAgIH0KQEAgLTI1NSw3ICsyNDUsNyBA
QCB2b2lkIFBhZ2VET01EZWJ1Z2dlckFnZW50Ojp3aWxsUmVtb3ZlRE9NTm9kZShOb2RlJiBub2Rl
KQogICAgICAgICAgICAgaWYgKCFjbG9zZXN0RGlzdGFuY2UgfHwgZGlzdGFuY2UgPCBjbG9zZXN0
RGlzdGFuY2UpIHsKICAgICAgICAgICAgICAgICBjbG9zZXN0RGlzdGFuY2UgPSBkaXN0YW5jZTsK
ICAgICAgICAgICAgICAgICBjbG9zZXN0QnJlYWtwb2ludCA9IGJyZWFrcG9pbnQuY29weVJlZigp
OwotICAgICAgICAgICAgICAgIGNsb3Nlc3RCcmVha3BvaW50VHlwZSA9IEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRPTURlYnVnZ2VyOjpET01CcmVha3BvaW50VHlwZTo6U3VidHJlZU1vZGlmaWVkOwor
ICAgICAgICAgICAgICAgIGNsb3Nlc3RCcmVha3BvaW50VHlwZSA9IFByb3RvY29sOjpET01EZWJ1
Z2dlcjo6RE9NQnJlYWtwb2ludFR5cGU6OlN1YnRyZWVNb2RpZmllZDsKICAgICAgICAgICAgICAg
ICBjbG9zZXN0QnJlYWtwb2ludE93bmVyID0gYnJlYWtwb2ludE93bmVyOwogICAgICAgICAgICAg
fQogICAgICAgICB9CkBAIC0yOTYsNyArMjg2LDcgQEAgdm9pZCBQYWdlRE9NRGVidWdnZXJBZ2Vu
dDo6d2lsbE1vZGlmeURPTUF0dHIoRWxlbWVudCYgZWxlbWVudCkKICAgICBpZiAoaXQgPT0gbV9k
b21BdHRyaWJ1dGVNb2RpZmllZEJyZWFrcG9pbnRzLmVuZCgpKQogICAgICAgICByZXR1cm47CiAK
LSAgICBhdXRvIHBhdXNlRGF0YSA9IGJ1aWxkUGF1c2VEYXRhRm9yRE9NQnJlYWtwb2ludChJbnNw
ZWN0b3I6OlByb3RvY29sOjpET01EZWJ1Z2dlcjo6RE9NQnJlYWtwb2ludFR5cGU6OkF0dHJpYnV0
ZU1vZGlmaWVkLCBlbGVtZW50KTsKKyAgICBhdXRvIHBhdXNlRGF0YSA9IGJ1aWxkUGF1c2VEYXRh
Rm9yRE9NQnJlYWtwb2ludChQcm90b2NvbDo6RE9NRGVidWdnZXI6OkRPTUJyZWFrcG9pbnRUeXBl
OjpBdHRyaWJ1dGVNb2RpZmllZCwgZWxlbWVudCk7CiAgICAgbV9kZWJ1Z2dlckFnZW50LT5icmVh
a1Byb2dyYW0oSW5zcGVjdG9yOjpEZWJ1Z2dlckZyb250ZW5kRGlzcGF0Y2hlcjo6UmVhc29uOjpE
T00sIFdURk1vdmUocGF1c2VEYXRhKSwgaXQtPnZhbHVlLmNvcHlSZWYoKSk7CiB9CiAKQEAgLTMz
MywyNyArMzIzLDI4IEBAIHZvaWQgUGFnZURPTURlYnVnZ2VyQWdlbnQ6OndpbGxJbnZhbGlkYXRl
U3R5bGVBdHRyKEVsZW1lbnQmIGVsZW1lbnQpCiAgICAgaWYgKGl0ID09IG1fZG9tQXR0cmlidXRl
TW9kaWZpZWRCcmVha3BvaW50cy5lbmQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byBw
YXVzZURhdGEgPSBidWlsZFBhdXNlRGF0YUZvckRPTUJyZWFrcG9pbnQoSW5zcGVjdG9yOjpQcm90
b2NvbDo6RE9NRGVidWdnZXI6OkRPTUJyZWFrcG9pbnRUeXBlOjpBdHRyaWJ1dGVNb2RpZmllZCwg
ZWxlbWVudCk7CisgICAgYXV0byBwYXVzZURhdGEgPSBidWlsZFBhdXNlRGF0YUZvckRPTUJyZWFr
cG9pbnQoUHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpET01CcmVha3BvaW50VHlwZTo6QXR0cmlidXRl
TW9kaWZpZWQsIGVsZW1lbnQpOwogICAgIG1fZGVidWdnZXJBZ2VudC0+YnJlYWtQcm9ncmFtKElu
c3BlY3Rvcjo6RGVidWdnZXJGcm9udGVuZERpc3BhdGNoZXI6OlJlYXNvbjo6RE9NLCBXVEZNb3Zl
KHBhdXNlRGF0YSksIGl0LT52YWx1ZS5jb3B5UmVmKCkpOwogfQogCi12b2lkIFBhZ2VET01EZWJ1
Z2dlckFnZW50OjpzZXRBbmltYXRpb25GcmFtZUJyZWFrcG9pbnQoRXJyb3JTdHJpbmcmIGVycm9y
U3RyaW5nLCBSZWZQdHI8SlNDOjpCcmVha3BvaW50PiYmIGJyZWFrcG9pbnQpCitib29sIFBhZ2VE
T01EZWJ1Z2dlckFnZW50OjpzZXRBbmltYXRpb25GcmFtZUJyZWFrcG9pbnQoUHJvdG9jb2w6OkVy
cm9yU3RyaW5nJiBlcnJvclN0cmluZywgUmVmUHRyPEpTQzo6QnJlYWtwb2ludD4mJiBicmVha3Bv
aW50KQogewogICAgIGlmICghbV9wYXVzZU9uQWxsQW5pbWF0aW9uRnJhbWVzQnJlYWtwb2ludCA9
PSAhYnJlYWtwb2ludCkgewogICAgICAgICBlcnJvclN0cmluZyA9IG1fcGF1c2VPbkFsbEFuaW1h
dGlvbkZyYW1lc0JyZWFrcG9pbnQgPyAiQnJlYWtwb2ludCBmb3IgQW5pbWF0aW9uRnJhbWUgYWxy
ZWFkeSBleGlzdHMiX3MgOiAiQnJlYWtwb2ludCBmb3IgQW5pbWF0aW9uRnJhbWUgbWlzc2luZyJf
czsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAg
bV9wYXVzZU9uQWxsQW5pbWF0aW9uRnJhbWVzQnJlYWtwb2ludCA9IFdURk1vdmUoYnJlYWtwb2lu
dCk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKLVJlZjxKU09OOjpPYmplY3Q+IFBhZ2VET01EZWJ1
Z2dlckFnZW50OjpidWlsZFBhdXNlRGF0YUZvckRPTUJyZWFrcG9pbnQoSW5zcGVjdG9yOjpQcm90
b2NvbDo6RE9NRGVidWdnZXI6OkRPTUJyZWFrcG9pbnRUeXBlIGJyZWFrcG9pbnRUeXBlLCBOb2Rl
JiBicmVha3BvaW50T3duZXIpCitSZWY8SlNPTjo6T2JqZWN0PiBQYWdlRE9NRGVidWdnZXJBZ2Vu
dDo6YnVpbGRQYXVzZURhdGFGb3JET01CcmVha3BvaW50KFByb3RvY29sOjpET01EZWJ1Z2dlcjo6
RE9NQnJlYWtwb2ludFR5cGUgYnJlYWtwb2ludFR5cGUsIE5vZGUmIGJyZWFrcG9pbnRPd25lcikK
IHsKICAgICBBU1NFUlQobV9kZWJ1Z2dlckFnZW50LT5icmVha3BvaW50c0FjdGl2ZSgpKTsKICAg
ICBBU1NFUlQobV9kb21TdWJ0cmVlTW9kaWZpZWRCcmVha3BvaW50cy5jb250YWlucygmYnJlYWtw
b2ludE93bmVyKSB8fCBtX2RvbUF0dHJpYnV0ZU1vZGlmaWVkQnJlYWtwb2ludHMuY29udGFpbnMo
JmJyZWFrcG9pbnRPd25lcikgfHwgbV9kb21Ob2RlUmVtb3ZlZEJyZWFrcG9pbnRzLmNvbnRhaW5z
KCZicmVha3BvaW50T3duZXIpKTsKIAogICAgIGF1dG8gcGF1c2VEYXRhID0gSlNPTjo6T2JqZWN0
OjpjcmVhdGUoKTsKLSAgICBwYXVzZURhdGEtPnNldFN0cmluZygidHlwZSIsIEluc3BlY3Rvcjo6
UHJvdG9jb2w6Okluc3BlY3RvckhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKGJyZWFrcG9p
bnRUeXBlKSk7CisgICAgcGF1c2VEYXRhLT5zZXRTdHJpbmcoInR5cGUiLCBQcm90b2NvbDo6SGVs
cGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUoYnJlYWtwb2ludFR5cGUpKTsKICAgICBpZiAoYXV0
byogZG9tQWdlbnQgPSBtX2luc3RydW1lbnRpbmdBZ2VudHMucGVyc2lzdGVudERPTUFnZW50KCkp
IHsKICAgICAgICAgaWYgKGF1dG8gYnJlYWtwb2ludE93bmVyTm9kZUlkID0gZG9tQWdlbnQtPnB1
c2hOb2RlVG9Gcm9udGVuZCgmYnJlYWtwb2ludE93bmVyKSkKICAgICAgICAgICAgIHBhdXNlRGF0
YS0+c2V0SW50ZWdlcigibm9kZUlkIiwgYnJlYWtwb2ludE93bmVyTm9kZUlkKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlRE9NRGVidWdnZXJB
Z2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VET01EZWJ1
Z2dlckFnZW50LmgKaW5kZXggYWQwMWM2NzdlNWQyMjI1YTA2NWNmMDEwNDUxNTY5YjE3OTRkNjlh
OS4uZDg3MjgyOTI1ZWM2OTMxMGUwYmMwZTc4ODNjZGNhNTA4ZDEwMzUyMiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VET01EZWJ1Z2dlckFnZW50
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VET01EZWJ1
Z2dlckFnZW50LmgKQEAgLTM2LDIxICszNiwxOSBAQCBjbGFzcyBFbGVtZW50OwogY2xhc3MgRnJh
bWU7CiBjbGFzcyBOb2RlOwogCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQogY2xhc3Mg
UGFnZURPTURlYnVnZ2VyQWdlbnQgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yRE9NRGVidWdnZXJB
Z2VudCB7CiBwdWJsaWM6CiAgICAgUGFnZURPTURlYnVnZ2VyQWdlbnQoUGFnZUFnZW50Q29udGV4
dCYsIEluc3BlY3Rvcjo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudCopOwotICAgIH5QYWdlRE9NRGVi
dWdnZXJBZ2VudCgpIG92ZXJyaWRlOworICAgIH5QYWdlRE9NRGVidWdnZXJBZ2VudCgpOwogCi0g
ICAgYm9vbCBlbmFibGVkKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBlbmFibGVkKCkgY29u
c3Q7CiAKICAgICAvLyBET01EZWJ1Z2dlckJhY2tlbmREaXNwYXRjaGVySGFuZGxlcgotICAgIHZv
aWQgc2V0RE9NQnJlYWtwb2ludChFcnJvclN0cmluZyYsIGludCBub2RlSWQsIGNvbnN0IFN0cmlu
ZyYgdHlwZSwgY29uc3QgSlNPTjo6T2JqZWN0KiBvcHRpb25zKSBvdmVycmlkZTsKLSAgICB2b2lk
IHJlbW92ZURPTUJyZWFrcG9pbnQoRXJyb3JTdHJpbmcmLCBpbnQgbm9kZUlkLCBjb25zdCBTdHJp
bmcmIHR5cGUpIG92ZXJyaWRlOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5n
T3I8dm9pZD4gc2V0RE9NQnJlYWtwb2ludChJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJ
ZCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NRGVidWdnZXI6OkRPTUJyZWFrcG9pbnRUeXBlLCBS
ZWZQdHI8SlNPTjo6T2JqZWN0PiYmIG9wdGlvbnMpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8dm9pZD4gcmVtb3ZlRE9NQnJlYWtwb2ludChJbnNwZWN0b3I6OlByb3Rv
Y29sOjpET006Ok5vZGVJZCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NRGVidWdnZXI6OkRPTUJy
ZWFrcG9pbnRUeXBlKTsKIAogICAgIC8vIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbgotICAgIHZv
aWQgbWFpbkZyYW1lTmF2aWdhdGVkKCkgZmluYWw7CisgICAgdm9pZCBtYWluRnJhbWVOYXZpZ2F0
ZWQoKTsKICAgICB2b2lkIGZyYW1lRG9jdW1lbnRVcGRhdGVkKEZyYW1lJik7CiAgICAgdm9pZCB3
aWxsSW5zZXJ0RE9NTm9kZShOb2RlJiBwYXJlbnQpOwogICAgIHZvaWQgd2lsbFJlbW92ZURPTU5v
ZGUoTm9kZSYpOwpAQCAtNjEsMTAgKzU5LDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIGRpZEZpcmVB
bmltYXRpb25GcmFtZSgpOwogCiBwcml2YXRlOgotICAgIHZvaWQgZW5hYmxlKCkgb3ZlcnJpZGU7
Ci0gICAgdm9pZCBkaXNhYmxlKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBlbmFibGUoKTsKKyAgICB2
b2lkIGRpc2FibGUoKTsKIAotICAgIHZvaWQgc2V0QW5pbWF0aW9uRnJhbWVCcmVha3BvaW50KEVy
cm9yU3RyaW5nJiwgUmVmUHRyPEpTQzo6QnJlYWtwb2ludD4mJikgb3ZlcnJpZGU7CisgICAgYm9v
bCBzZXRBbmltYXRpb25GcmFtZUJyZWFrcG9pbnQoSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JT
dHJpbmcmLCBSZWZQdHI8SlNDOjpCcmVha3BvaW50PiYmKTsKIAogICAgIFJlZjxKU09OOjpPYmpl
Y3Q+IGJ1aWxkUGF1c2VEYXRhRm9yRE9NQnJlYWtwb2ludChJbnNwZWN0b3I6OlByb3RvY29sOjpE
T01EZWJ1Z2dlcjo6RE9NQnJlYWtwb2ludFR5cGUsIE5vZGUmIGJyZWFrcG9pbnRPd25lcik7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlRGVi
dWdnZXJBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFn
ZURlYnVnZ2VyQWdlbnQuY3BwCmluZGV4IDBjMjAzOTgyNzMzYjRlZThiYWJkMDU1OGZhMzNiMmEx
ZGM0ZjhmMjUuLjYxODcyNjhiZDI3NTE4MWU5OGY0NWVlMGZhN2UxNmE3NTA5YmMxNjAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlRGVidWdnZXJB
Z2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VE
ZWJ1Z2dlckFnZW50LmNwcApAQCAtNjgsMjYgKzY4LDI1IEBAIGJvb2wgUGFnZURlYnVnZ2VyQWdl
bnQ6OmVuYWJsZWQoKSBjb25zdAogICAgIHJldHVybiBtX2luc3RydW1lbnRpbmdBZ2VudHMuZW5h
YmxlZFBhZ2VEZWJ1Z2dlckFnZW50KCkgPT0gdGhpcyAmJiBXZWJEZWJ1Z2dlckFnZW50OjplbmFi
bGVkKCk7CiB9CiAKLXZvaWQgUGFnZURlYnVnZ2VyQWdlbnQ6OmV2YWx1YXRlT25DYWxsRnJhbWUo
RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGNhbGxGcmFtZUlkLCBjb25z
dCBTdHJpbmcmIGV4cHJlc3Npb24sIGNvbnN0IFN0cmluZyogb2JqZWN0R3JvdXAsIGNvbnN0IGJv
b2wqIGluY2x1ZGVDb21tYW5kTGluZUFQSSwgY29uc3QgYm9vbCogZG9Ob3RQYXVzZU9uRXhjZXB0
aW9uc0FuZE11dGVDb25zb2xlLCBjb25zdCBib29sKiByZXR1cm5CeVZhbHVlLCBjb25zdCBib29s
KiBnZW5lcmF0ZVByZXZpZXcsIGNvbnN0IGJvb2wqIHNhdmVSZXN1bHQsIGNvbnN0IGJvb2wqIGVt
dWxhdGVVc2VyR2VzdHVyZSwgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+
JiByZXN1bHQsIE9wdGlvbmFsPGJvb2w+JiB3YXNUaHJvd24sIE9wdGlvbmFsPGludD4mIHNhdmVk
UmVzdWx0SW5kZXgpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxzdGQ6OnR1cGxlPFJlZjxQcm90
b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiwgT3B0aW9uYWw8Ym9vbD4gLyogd2FzVGhyb3du
ICovLCBPcHRpb25hbDxpbnQ+IC8qIHNhdmVkUmVzdWx0SW5kZXggKi8+PiBQYWdlRGVidWdnZXJB
Z2VudDo6ZXZhbHVhdGVPbkNhbGxGcmFtZShjb25zdCBQcm90b2NvbDo6RGVidWdnZXI6OkNhbGxG
cmFtZUlkJiBjYWxsRnJhbWVJZCwgY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBjb25zdCBTdHJp
bmcmIG9iamVjdEdyb3VwLCBPcHRpb25hbDxib29sPiYmIGluY2x1ZGVDb21tYW5kTGluZUFQSSwg
T3B0aW9uYWw8Ym9vbD4mJiBkb05vdFBhdXNlT25FeGNlcHRpb25zQW5kTXV0ZUNvbnNvbGUsIE9w
dGlvbmFsPGJvb2w+JiYgcmV0dXJuQnlWYWx1ZSwgT3B0aW9uYWw8Ym9vbD4mJiBnZW5lcmF0ZVBy
ZXZpZXcsIE9wdGlvbmFsPGJvb2w+JiYgc2F2ZVJlc3VsdCwgT3B0aW9uYWw8Ym9vbD4mJiBlbXVs
YXRlVXNlckdlc3R1cmUpCiB7Ci0gICAgYXV0byBzaG91bGRFbXVsYXRlVXNlckdlc3R1cmUgPSBl
bXVsYXRlVXNlckdlc3R1cmUgJiYgKmVtdWxhdGVVc2VyR2VzdHVyZTsKLSAgICBVc2VyR2VzdHVy
ZUVtdWxhdGlvblNjb3BlIHVzZXJHZXN0dXJlU2NvcGUobV9pbnNwZWN0ZWRQYWdlLCBzaG91bGRF
bXVsYXRlVXNlckdlc3R1cmUpOworICAgIFVzZXJHZXN0dXJlRW11bGF0aW9uU2NvcGUgdXNlckdl
c3R1cmVTY29wZShtX2luc3BlY3RlZFBhZ2UsIGVtdWxhdGVVc2VyR2VzdHVyZSAmJiAqZW11bGF0
ZVVzZXJHZXN0dXJlKTsKIAotICAgIFdlYkRlYnVnZ2VyQWdlbnQ6OmV2YWx1YXRlT25DYWxsRnJh
bWUoZXJyb3JTdHJpbmcsIGNhbGxGcmFtZUlkLCBleHByZXNzaW9uLCBvYmplY3RHcm91cCwgaW5j
bHVkZUNvbW1hbmRMaW5lQVBJLCBkb05vdFBhdXNlT25FeGNlcHRpb25zQW5kTXV0ZUNvbnNvbGUs
IHJldHVybkJ5VmFsdWUsIGdlbmVyYXRlUHJldmlldywgc2F2ZVJlc3VsdCwgZW11bGF0ZVVzZXJH
ZXN0dXJlLCByZXN1bHQsIHdhc1Rocm93biwgc2F2ZWRSZXN1bHRJbmRleCk7CisgICAgcmV0dXJu
IFdlYkRlYnVnZ2VyQWdlbnQ6OmV2YWx1YXRlT25DYWxsRnJhbWUoY2FsbEZyYW1lSWQsIGV4cHJl
c3Npb24sIG9iamVjdEdyb3VwLCBXVEZNb3ZlKGluY2x1ZGVDb21tYW5kTGluZUFQSSksIFdURk1v
dmUoZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xlKSwgV1RGTW92ZShyZXR1cm5C
eVZhbHVlKSwgV1RGTW92ZShnZW5lcmF0ZVByZXZpZXcpLCBXVEZNb3ZlKHNhdmVSZXN1bHQpLCBX
VEZNb3ZlKGVtdWxhdGVVc2VyR2VzdHVyZSkpOwogfQogCi12b2lkIFBhZ2VEZWJ1Z2dlckFnZW50
OjplbmFibGUoKQordm9pZCBQYWdlRGVidWdnZXJBZ2VudDo6aW50ZXJuYWxFbmFibGUoKQogewog
ICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy5zZXRFbmFibGVkUGFnZURlYnVnZ2VyQWdlbnQodGhp
cyk7CiAKLSAgICBXZWJEZWJ1Z2dlckFnZW50OjplbmFibGUoKTsKKyAgICBXZWJEZWJ1Z2dlckFn
ZW50OjppbnRlcm5hbEVuYWJsZSgpOwogfQogCi12b2lkIFBhZ2VEZWJ1Z2dlckFnZW50OjpkaXNh
YmxlKGJvb2wgaXNCZWluZ0Rlc3Ryb3llZCkKK3ZvaWQgUGFnZURlYnVnZ2VyQWdlbnQ6OmludGVy
bmFsRGlzYWJsZShib29sIGlzQmVpbmdEZXN0cm95ZWQpCiB7CiAgICAgbV9pbnN0cnVtZW50aW5n
QWdlbnRzLnNldEVuYWJsZWRQYWdlRGVidWdnZXJBZ2VudChudWxscHRyKTsKIAotICAgIFdlYkRl
YnVnZ2VyQWdlbnQ6OmRpc2FibGUoaXNCZWluZ0Rlc3Ryb3llZCk7CisgICAgV2ViRGVidWdnZXJB
Z2VudDo6aW50ZXJuYWxEaXNhYmxlKGlzQmVpbmdEZXN0cm95ZWQpOwogfQogCiBTdHJpbmcgUGFn
ZURlYnVnZ2VyQWdlbnQ6OnNvdXJjZU1hcFVSTEZvclNjcmlwdChjb25zdCBKU0M6OkRlYnVnZ2Vy
OjpTY3JpcHQmIHNjcmlwdCkKQEAgLTEyNiw3ICsxMjUsNyBAQCB2b2lkIFBhZ2VEZWJ1Z2dlckFn
ZW50OjpicmVha3BvaW50QWN0aW9uTG9nKEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9i
YWxPYgogICAgIG1faW5zcGVjdGVkUGFnZS5jb25zb2xlKCkuYWRkTWVzc2FnZShNZXNzYWdlU291
cmNlOjpKUywgTWVzc2FnZUxldmVsOjpMb2csIG1lc3NhZ2UsIGNyZWF0ZVNjcmlwdENhbGxTdGFj
ayhsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CiB9CiAKLUluamVjdGVkU2NyaXB0IFBhZ2VEZWJ1Z2dl
ckFnZW50OjppbmplY3RlZFNjcmlwdEZvckV2YWwoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBj
b25zdCBpbnQqIGV4ZWN1dGlvbkNvbnRleHRJZCkKK0luamVjdGVkU2NyaXB0IFBhZ2VEZWJ1Z2dl
ckFnZW50OjppbmplY3RlZFNjcmlwdEZvckV2YWwoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJv
clN0cmluZywgT3B0aW9uYWw8UHJvdG9jb2w6OlJ1bnRpbWU6OkV4ZWN1dGlvbkNvbnRleHRJZD4m
JiBleGVjdXRpb25Db250ZXh0SWQpCiB7CiAgICAgaWYgKCFleGVjdXRpb25Db250ZXh0SWQpIHsK
ICAgICAgICAgSlNDOjpKU0dsb2JhbE9iamVjdCogc2NyaXB0U3RhdGUgPSBtYWluV29ybGRFeGVj
U3RhdGUoJm1faW5zcGVjdGVkUGFnZS5tYWluRnJhbWUoKSk7CkBAIC0xNTMsOCArMTUyLDcgQEAg
dm9pZCBQYWdlRGVidWdnZXJBZ2VudDo6bWFpbkZyYW1lU3RhcnRlZExvYWRpbmcoKQogICAgIGlm
IChpc1BhdXNlZCgpKSB7CiAgICAgICAgIHNldFN1cHByZXNzQWxsUGF1c2VzKHRydWUpOwogCi0g
ICAgICAgIEVycm9yU3RyaW5nIGlnbm9yZWQ7Ci0gICAgICAgIHJlc3VtZShpZ25vcmVkKTsKKyAg
ICAgICAgcmVzdW1lKCk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZURlYnVnZ2VyQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlRGVidWdnZXJBZ2VudC5oCmluZGV4IDRjMjdkZDFj
NzRiMTJlODU3YjZjZjY1MTBmODk5NzYwN2ExNjYyMDcuLmJmZWJlOTM2MmM0OTM1ZTEwMWUxYTFm
MTNjN2EwMmJlMTUzYzllYjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9h
Z2VudHMvcGFnZS9QYWdlRGVidWdnZXJBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9hZ2VudHMvcGFnZS9QYWdlRGVidWdnZXJBZ2VudC5oCkBAIC00NSwxNCArNDUsMTQgQEAg
Y2xhc3MgUGFnZURlYnVnZ2VyQWdlbnQgZmluYWwgOiBwdWJsaWMgV2ViRGVidWdnZXJBZ2VudCB7
CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgUGFnZURlYnVnZ2Vy
QWdlbnQoUGFnZUFnZW50Q29udGV4dCYpOwotICAgIH5QYWdlRGVidWdnZXJBZ2VudCgpIG92ZXJy
aWRlOwotICAgIGJvb2wgZW5hYmxlZCgpIGNvbnN0IGZpbmFsOworICAgIH5QYWdlRGVidWdnZXJB
Z2VudCgpOworICAgIGJvb2wgZW5hYmxlZCgpIGNvbnN0OwogCiAgICAgLy8gRGVidWdnZXJCYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXIKLSAgICB2b2lkIGV2YWx1YXRlT25DYWxsRnJhbWUoRXJyb3JT
dHJpbmcmLCBjb25zdCBTdHJpbmcmIGNhbGxGcmFtZUlkLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Np
b24sIGNvbnN0IFN0cmluZyogb2JqZWN0R3JvdXAsIGNvbnN0IGJvb2wqIGluY2x1ZGVDb21tYW5k
TGluZUFQSSwgY29uc3QgYm9vbCogZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xl
LCBjb25zdCBib29sKiByZXR1cm5CeVZhbHVlLCBjb25zdCBib29sKiBnZW5lcmF0ZVByZXZpZXcs
IGNvbnN0IGJvb2wqIHNhdmVSZXN1bHQsIGNvbnN0IGJvb2wqIGVtdWxhdGVVc2VyR2VzdHVyZSwg
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3Vs
dCwgT3B0aW9uYWw8Ym9vbD4mIHdhc1Rocm93biwgT3B0aW9uYWw8aW50PiYgc2F2ZWRSZXN1bHRJ
bmRleCkgb3ZlcnJpZGU7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxz
dGQ6OnR1cGxlPFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+
LCBPcHRpb25hbDxib29sPiAvKiB3YXNUaHJvd24gKi8sIE9wdGlvbmFsPGludD4gLyogc2F2ZWRS
ZXN1bHRJbmRleCAqLz4+IGV2YWx1YXRlT25DYWxsRnJhbWUoY29uc3QgSW5zcGVjdG9yOjpQcm90
b2NvbDo6RGVidWdnZXI6OkNhbGxGcmFtZUlkJiwgY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBj
b25zdCBTdHJpbmcmIG9iamVjdEdyb3VwLCBPcHRpb25hbDxib29sPiYmIGluY2x1ZGVDb21tYW5k
TGluZUFQSSwgT3B0aW9uYWw8Ym9vbD4mJiBkb05vdFBhdXNlT25FeGNlcHRpb25zQW5kTXV0ZUNv
bnNvbGUsIE9wdGlvbmFsPGJvb2w+JiYgcmV0dXJuQnlWYWx1ZSwgT3B0aW9uYWw8Ym9vbD4mJiBn
ZW5lcmF0ZVByZXZpZXcsIE9wdGlvbmFsPGJvb2w+JiYgc2F2ZVJlc3VsdCwgT3B0aW9uYWw8Ym9v
bD4mJiBlbXVsYXRlVXNlckdlc3R1cmUpOwogCiAgICAgLy8gSlNDOjpEZWJ1Z2dlcjo6T2JzZXJ2
ZXIKLSAgICB2b2lkIGJyZWFrcG9pbnRBY3Rpb25Mb2coSlNDOjpKU0dsb2JhbE9iamVjdCosIGNv
bnN0IFN0cmluZyYgZGF0YSkgZmluYWw7CisgICAgdm9pZCBicmVha3BvaW50QWN0aW9uTG9nKEpT
Qzo6SlNHbG9iYWxPYmplY3QqLCBjb25zdCBTdHJpbmcmIGRhdGEpOwogCiAgICAgLy8gSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uCiAgICAgdm9pZCBkaWRDbGVhcldpbmRvd09iamVjdEluV29ybGQo
RnJhbWUmLCBET01XcmFwcGVyV29ybGQmKTsKQEAgLTY0LDE1ICs2NCwxNSBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBkaWRDYW5jZWxBbmltYXRpb25GcmFtZShpbnQgY2FsbGJhY2tJZCk7CiAKIHByaXZh
dGU6Ci0gICAgdm9pZCBlbmFibGUoKSBvdmVycmlkZTsKLSAgICB2b2lkIGRpc2FibGUoYm9vbCBp
c0JlaW5nRGVzdHJveWVkKSBvdmVycmlkZTsKKyAgICB2b2lkIGludGVybmFsRW5hYmxlKCk7Cisg
ICAgdm9pZCBpbnRlcm5hbERpc2FibGUoYm9vbCBpc0JlaW5nRGVzdHJveWVkKTsKIAotICAgIFN0
cmluZyBzb3VyY2VNYXBVUkxGb3JTY3JpcHQoY29uc3QgSlNDOjpEZWJ1Z2dlcjo6U2NyaXB0Jikg
b3ZlcnJpZGU7CisgICAgU3RyaW5nIHNvdXJjZU1hcFVSTEZvclNjcmlwdChjb25zdCBKU0M6OkRl
YnVnZ2VyOjpTY3JpcHQmKTsKIAotICAgIHZvaWQgbXV0ZUNvbnNvbGUoKSBvdmVycmlkZTsKLSAg
ICB2b2lkIHVubXV0ZUNvbnNvbGUoKSBvdmVycmlkZTsKKyAgICB2b2lkIG11dGVDb25zb2xlKCk7
CisgICAgdm9pZCB1bm11dGVDb25zb2xlKCk7CiAKLSAgICBJbnNwZWN0b3I6OkluamVjdGVkU2Ny
aXB0IGluamVjdGVkU2NyaXB0Rm9yRXZhbChFcnJvclN0cmluZyYsIGNvbnN0IGludCogZXhlY3V0
aW9uQ29udGV4dElkKSBvdmVycmlkZTsKKyAgICBJbnNwZWN0b3I6OkluamVjdGVkU2NyaXB0IGlu
amVjdGVkU2NyaXB0Rm9yRXZhbChJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZyYsIE9w
dGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkV4ZWN1dGlvbkNvbnRleHRJZD4m
Jik7CiAKICAgICBQYWdlJiBtX2luc3BlY3RlZFBhZ2U7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VIZWFwQWdlbnQuY3BwIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VIZWFwQWdlbnQuY3BwCmluZGV4IDQ5
MjE4ZWYxMjgzZWJkNGRkNzU0MjExMzY5YjM0OWE0ODI1MjJkOTguLjQwMzZhMjNjNjg1MDdlNTk0
YWIyZTk3NGY1YjYyZGI4NjdjNzg3NjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9hZ2VudHMvcGFnZS9QYWdlSGVhcEFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZUhlYXBBZ2VudC5jcHAKQEAgLTM5LDE2ICszOSwyMCBA
QCBQYWdlSGVhcEFnZW50OjpQYWdlSGVhcEFnZW50KFBhZ2VBZ2VudENvbnRleHQmIGNvbnRleHQp
CiAKIFBhZ2VIZWFwQWdlbnQ6On5QYWdlSGVhcEFnZW50KCkgPSBkZWZhdWx0OwogCi12b2lkIFBh
Z2VIZWFwQWdlbnQ6OmVuYWJsZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCitQcm90b2NvbDo6
RXJyb3JTdHJpbmdPcjx2b2lkPiBQYWdlSGVhcEFnZW50OjplbmFibGUoKQogewotICAgIFdlYkhl
YXBBZ2VudDo6ZW5hYmxlKGVycm9yU3RyaW5nKTsKKyAgICBhdXRvIHJlc3VsdCA9IFdlYkhlYXBB
Z2VudDo6ZW5hYmxlKCk7CisKICAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMuc2V0RW5hYmxlZFBh
Z2VIZWFwQWdlbnQodGhpcyk7CisKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIFBhZ2VI
ZWFwQWdlbnQ6OmRpc2FibGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nKQorUHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8dm9pZD4gUGFnZUhlYXBBZ2VudDo6ZGlzYWJsZSgpCiB7CiAgICAgbV9pbnN0
cnVtZW50aW5nQWdlbnRzLnNldEVuYWJsZWRQYWdlSGVhcEFnZW50KG51bGxwdHIpOwotICAgIFdl
YkhlYXBBZ2VudDo6ZGlzYWJsZShlcnJvclN0cmluZyk7CisKKyAgICByZXR1cm4gV2ViSGVhcEFn
ZW50OjpkaXNhYmxlKCk7CiB9CiAKIHZvaWQgUGFnZUhlYXBBZ2VudDo6bWFpbkZyYW1lTmF2aWdh
dGVkKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9Q
YWdlSGVhcEFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFn
ZUhlYXBBZ2VudC5oCmluZGV4IDFiZDZjYTBmYzllZjE1YTFkN2EyNTI4NDI5NWE4ZTE5ZTg1ZjEw
ZGUuLmYyNmZmODRiMzhiOTRjOTcyZDlmNDZjYzljNGE3NGVhZmY3NGM3YWIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlSGVhcEFnZW50LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VIZWFwQWdlbnQuaApA
QCAtMzEsMTggKzMxLDE2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdHlwZWRlZiBTdHJp
bmcgRXJyb3JTdHJpbmc7Ci0KIGNsYXNzIFBhZ2VIZWFwQWdlbnQgZmluYWwgOiBwdWJsaWMgV2Vi
SGVhcEFnZW50IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShQYWdlSGVhcEFnZW50KTsKICAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBQYWdlSGVhcEFnZW50KFBh
Z2VBZ2VudENvbnRleHQmKTsKLSAgICB+UGFnZUhlYXBBZ2VudCgpIG92ZXJyaWRlOworICAgIH5Q
YWdlSGVhcEFnZW50KCk7CiAKICAgICAvLyBIZWFwQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyCi0g
ICAgdm9pZCBlbmFibGUoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2b2lkIGRpc2FibGUo
RXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0
cmluZ09yPHZvaWQ+IGVuYWJsZSgpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3Ry
aW5nT3I8dm9pZD4gZGlzYWJsZSgpOwogCiAgICAgLy8gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
CiAgICAgdm9pZCBtYWluRnJhbWVOYXZpZ2F0ZWQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlTmV0d29ya0FnZW50LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlTmV0d29ya0FnZW50LmNwcAppbmRleCAy
YzY1YjgxMDQ5NGJiZWI3M2Q1MzRlNjYyYWMzMTE5M2Y0MGMzYzY4Li45ZmUxMzk5YzNiNzI2MjM1
NTJiNDIzYjAwMzNlMzNmOTgxYzNiM2Q0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZU5ldHdvcmtBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VOZXR3b3JrQWdlbnQuY3BwCkBAIC00Nyw3ICs0
Nyw3IEBAIFBhZ2VOZXR3b3JrQWdlbnQ6OlBhZ2VOZXR3b3JrQWdlbnQoUGFnZUFnZW50Q29udGV4
dCYgY29udGV4dCkKIAogUGFnZU5ldHdvcmtBZ2VudDo6flBhZ2VOZXR3b3JrQWdlbnQoKSA9IGRl
ZmF1bHQ7CiAKLVN0cmluZyBQYWdlTmV0d29ya0FnZW50Ojpsb2FkZXJJZGVudGlmaWVyKERvY3Vt
ZW50TG9hZGVyKiBsb2FkZXIpCitQcm90b2NvbDo6TmV0d29yazo6TG9hZGVySWQgUGFnZU5ldHdv
cmtBZ2VudDo6bG9hZGVySWRlbnRpZmllcihEb2N1bWVudExvYWRlciogbG9hZGVyKQogewogICAg
IGlmIChsb2FkZXIpIHsKICAgICAgICAgaWYgKGF1dG8qIHBhZ2VBZ2VudCA9IG1faW5zdHJ1bWVu
dGluZ0FnZW50cy5lbmFibGVkUGFnZUFnZW50KCkpCkBAIC01Niw3ICs1Niw3IEBAIFN0cmluZyBQ
YWdlTmV0d29ya0FnZW50Ojpsb2FkZXJJZGVudGlmaWVyKERvY3VtZW50TG9hZGVyKiBsb2FkZXIp
CiAgICAgcmV0dXJuIHsgfTsKIH0KIAotU3RyaW5nIFBhZ2VOZXR3b3JrQWdlbnQ6OmZyYW1lSWRl
bnRpZmllcihEb2N1bWVudExvYWRlciogbG9hZGVyKQorUHJvdG9jb2w6Ok5ldHdvcms6OkZyYW1l
SWQgUGFnZU5ldHdvcmtBZ2VudDo6ZnJhbWVJZGVudGlmaWVyKERvY3VtZW50TG9hZGVyKiBsb2Fk
ZXIpCiB7CiAgICAgaWYgKGxvYWRlcikgewogICAgICAgICBpZiAoYXV0byogcGFnZUFnZW50ID0g
bV9pbnN0cnVtZW50aW5nQWdlbnRzLmVuYWJsZWRQYWdlQWdlbnQoKSkKQEAgLTkxLDEyICs5MSwx
MiBAQCBWZWN0b3I8V2ViU29ja2V0Kj4gUGFnZU5ldHdvcmtBZ2VudDo6YWN0aXZlV2ViU29ja2V0
cyhjb25zdCBMb2NrSG9sZGVyJiBsb2NrKQogICAgIHJldHVybiB3ZWJTb2NrZXRzOwogfQogCi12
b2lkIFBhZ2VOZXR3b3JrQWdlbnQ6OnNldFJlc291cmNlQ2FjaGluZ0Rpc2FibGVkKGJvb2wgZGlz
YWJsZWQpCit2b2lkIFBhZ2VOZXR3b3JrQWdlbnQ6OnNldFJlc291cmNlQ2FjaGluZ0Rpc2FibGVk
SW50ZXJhbChib29sIGRpc2FibGVkKQogewogICAgIG1faW5zcGVjdGVkUGFnZS5zZXRSZXNvdXJj
ZUNhY2hpbmdEaXNhYmxlZEJ5V2ViSW5zcGVjdG9yKGRpc2FibGVkKTsKIH0KIAotU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogUGFnZU5ldHdvcmtBZ2VudDo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dChF
cnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgZnJhbWVJZCkKK1NjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIFBhZ2VOZXR3b3JrQWdlbnQ6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
UHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgUHJvdG9jb2w6Ok5ldHdv
cms6OkZyYW1lSWQmIGZyYW1lSWQpCiB7CiAgICAgYXV0byogcGFnZUFnZW50ID0gbV9pbnN0cnVt
ZW50aW5nQWdlbnRzLmVuYWJsZWRQYWdlQWdlbnQoKTsKICAgICBpZiAoIXBhZ2VBZ2VudCkgewpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VOZXR3
b3JrQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlTmV0
d29ya0FnZW50LmgKaW5kZXggYmVkY2UzZThkYmI3YzlkMjJiMmUxYjk3MmQyMmIyYTViY2U0MGFj
YS4uMDJkNGJlYjIxYzUyZmMxYjM0NjcyZGNlYWEzNzUwNDUxYmU1MjQxZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VOZXR3b3JrQWdlbnQuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZU5ldHdvcmtBZ2Vu
dC5oCkBAIC0zNiwxNSArMzYsMTUgQEAgY2xhc3MgUGFnZU5ldHdvcmtBZ2VudCBmaW5hbCA6IHB1
YmxpYyBJbnNwZWN0b3JOZXR3b3JrQWdlbnQgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OwogcHVibGljOgogICAgIFBhZ2VOZXR3b3JrQWdlbnQoUGFnZUFnZW50Q29udGV4dCYpOwotICAg
IH5QYWdlTmV0d29ya0FnZW50KCkgb3ZlcnJpZGU7CisgICAgflBhZ2VOZXR3b3JrQWdlbnQoKTsK
IAogcHJpdmF0ZToKLSAgICBTdHJpbmcgbG9hZGVySWRlbnRpZmllcihEb2N1bWVudExvYWRlciop
IG92ZXJyaWRlOwotICAgIFN0cmluZyBmcmFtZUlkZW50aWZpZXIoRG9jdW1lbnRMb2FkZXIqKSBv
dmVycmlkZTsKLSAgICBWZWN0b3I8V2ViU29ja2V0Kj4gYWN0aXZlV2ViU29ja2V0cyhjb25zdCBM
b2NrSG9sZGVyJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRSZXNvdXJjZUNhY2hpbmdEaXNhYmxl
ZChib29sKSBvdmVycmlkZTsKLSAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVj
dXRpb25Db250ZXh0KEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBmcmFtZUlkKSBvdmVycmlk
ZTsKLSAgICBib29sIHNob3VsZEZvcmNlQnVmZmVyaW5nTmV0d29ya1Jlc291cmNlRGF0YSgpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6
TmV0d29yazo6TG9hZGVySWQgbG9hZGVySWRlbnRpZmllcihEb2N1bWVudExvYWRlciopOworICAg
IEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OkZyYW1lSWQgZnJhbWVJZGVudGlmaWVyKERv
Y3VtZW50TG9hZGVyKik7CisgICAgVmVjdG9yPFdlYlNvY2tldCo+IGFjdGl2ZVdlYlNvY2tldHMo
Y29uc3QgTG9ja0hvbGRlciYpOworICAgIHZvaWQgc2V0UmVzb3VyY2VDYWNoaW5nRGlzYWJsZWRJ
bnRlcmFsKGJvb2wpOworICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBjb25zdCBJbnNwZWN0
b3I6OlByb3RvY29sOjpOZXR3b3JrOjpGcmFtZUlkJik7CisgICAgYm9vbCBzaG91bGRGb3JjZUJ1
ZmZlcmluZ05ldHdvcmtSZXNvdXJjZURhdGEoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCiAg
ICAgUGFnZSYgbV9pbnNwZWN0ZWRQYWdlOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlUnVudGltZUFnZW50LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlUnVudGltZUFnZW50LmNwcAppbmRleCBlOGFi
NWY0Yzg5YWRlNGZjODVjMDQyYjQzNDMzYjcyNjU2M2FiZGQyLi4wMGU2OWYxYWEyZTNmOGVhMmY0
NDVlOGRkNDQ2ZGQxNmVhNjM2M2RmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvYWdlbnRzL3BhZ2UvUGFnZVJ1bnRpbWVBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VSdW50aW1lQWdlbnQuY3BwCkBAIC01MiwxMSArNTIs
NiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CiAK
LXN0YXRpYyBib29sIGFzQm9vbChjb25zdCBib29sKiBiKQotewotICAgIHJldHVybiBiICYmICpi
OwotfQotCiBQYWdlUnVudGltZUFnZW50OjpQYWdlUnVudGltZUFnZW50KFBhZ2VBZ2VudENvbnRl
eHQmIGNvbnRleHQpCiAgICAgOiBJbnNwZWN0b3JSdW50aW1lQWdlbnQoY29udGV4dCkKICAgICAs
IG1fZnJvbnRlbmREaXNwYXRjaGVyKG1ha2VVbmlxdWU8SW5zcGVjdG9yOjpSdW50aW1lRnJvbnRl
bmREaXNwYXRjaGVyPihjb250ZXh0LmZyb250ZW5kUm91dGVyKSkKQEAgLTY4LDI3ICs2MywyOSBA
QCBQYWdlUnVudGltZUFnZW50OjpQYWdlUnVudGltZUFnZW50KFBhZ2VBZ2VudENvbnRleHQmIGNv
bnRleHQpCiAKIFBhZ2VSdW50aW1lQWdlbnQ6On5QYWdlUnVudGltZUFnZW50KCkgPSBkZWZhdWx0
OwogCi12b2lkIFBhZ2VSdW50aW1lQWdlbnQ6OmVuYWJsZShFcnJvclN0cmluZyYgZXJyb3JTdHJp
bmcpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBQYWdlUnVudGltZUFnZW50OjplbmFi
bGUoKQogewogICAgIGlmIChtX2luc3RydW1lbnRpbmdBZ2VudHMuZW5hYmxlZFBhZ2VSdW50aW1l
QWdlbnQoKSA9PSB0aGlzKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB7IH07CiAK
LSAgICBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmVuYWJsZShlcnJvclN0cmluZyk7Ci0gICAgaWYg
KCFlcnJvclN0cmluZy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKKyAgICBhdXRvIHJlc3Vs
dCA9IEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6ZW5hYmxlKCk7CisgICAgaWYgKCFyZXN1bHQpCisg
ICAgICAgIHJldHVybiByZXN1bHQ7CiAKICAgICAvLyBSZXBvcnQgaW5pdGlhbCBjb250ZXh0cyBi
ZWZvcmUgZW5hYmxpbmcgaW5zdHJ1bWVudGF0aW9uIGFzIHRoZSByZXBvcnRpbmcKICAgICAvLyBj
YW4gZm9yY2UgY3JlYXRpb24gb2Ygc2NyaXB0IHN0YXRlIHdoaWNoIGNvdWxkIHJlc3VsdCBpbiBk
dXBsaWNhdGUgbm90aWZpY2F0aW9ucy4KICAgICByZXBvcnRFeGVjdXRpb25Db250ZXh0Q3JlYXRp
b24oKTsKIAogICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy5zZXRFbmFibGVkUGFnZVJ1bnRpbWVB
Z2VudCh0aGlzKTsKKworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgUGFnZVJ1bnRpbWVB
Z2VudDo6ZGlzYWJsZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCitQcm90b2NvbDo6RXJyb3JT
dHJpbmdPcjx2b2lkPiBQYWdlUnVudGltZUFnZW50OjpkaXNhYmxlKCkKIHsKICAgICBtX2luc3Ry
dW1lbnRpbmdBZ2VudHMuc2V0RW5hYmxlZFBhZ2VSdW50aW1lQWdlbnQobnVsbHB0cik7CiAKLSAg
ICBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmRpc2FibGUoZXJyb3JTdHJpbmcpOworICAgIHJldHVy
biBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmRpc2FibGUoKTsKIH0KIAogdm9pZCBQYWdlUnVudGlt
ZUFnZW50OjpmcmFtZU5hdmlnYXRlZChGcmFtZSYgZnJhbWUpCkBAIC0xMDYsNyArMTAzLDcgQEAg
dm9pZCBQYWdlUnVudGltZUFnZW50OjpkaWRDbGVhcldpbmRvd09iamVjdEluV29ybGQoRnJhbWUm
IGZyYW1lLCBET01XcmFwcGVyV29ybGQKICAgICBub3RpZnlDb250ZXh0Q3JlYXRlZChwYWdlQWdl
bnQtPmZyYW1lSWQoJmZyYW1lKSwgZnJhbWUuc2NyaXB0KCkuZ2xvYmFsT2JqZWN0KHdvcmxkKSwg
d29ybGQpOwogfQogCi1JbmplY3RlZFNjcmlwdCBQYWdlUnVudGltZUFnZW50OjppbmplY3RlZFNj
cmlwdEZvckV2YWwoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBpbnQqIGV4ZWN1dGlv
bkNvbnRleHRJZCkKK0luamVjdGVkU2NyaXB0IFBhZ2VSdW50aW1lQWdlbnQ6OmluamVjdGVkU2Ny
aXB0Rm9yRXZhbChQcm90b2NvbDo6RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBPcHRpb25hbDxQ
cm90b2NvbDo6UnVudGltZTo6RXhlY3V0aW9uQ29udGV4dElkPiYmIGV4ZWN1dGlvbkNvbnRleHRJ
ZCkKIHsKICAgICBpZiAoIWV4ZWN1dGlvbkNvbnRleHRJZCkgewogICAgICAgICBKU0M6OkpTR2xv
YmFsT2JqZWN0KiBzY3JpcHRTdGF0ZSA9IG1haW5Xb3JsZEV4ZWNTdGF0ZSgmbV9pbnNwZWN0ZWRQ
YWdlLm1haW5GcmFtZSgpKTsKQEAgLTE1OSwyMiArMTU2LDIyIEBAIHZvaWQgUGFnZVJ1bnRpbWVB
Z2VudDo6cmVwb3J0RXhlY3V0aW9uQ29udGV4dENyZWF0aW9uKCkKICAgICB9CiB9CiAKLXN0YXRp
YyBJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0VHlwZSB0b1By
b3RvY29sKERPTVdyYXBwZXJXb3JsZDo6VHlwZSB0eXBlKQorc3RhdGljIFByb3RvY29sOjpSdW50
aW1lOjpFeGVjdXRpb25Db250ZXh0VHlwZSB0b1Byb3RvY29sKERPTVdyYXBwZXJXb3JsZDo6VHlw
ZSB0eXBlKQogewogICAgIHN3aXRjaCAodHlwZSkgewogICAgIGNhc2UgRE9NV3JhcHBlcldvcmxk
OjpUeXBlOjpOb3JtYWw6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50
aW1lOjpFeGVjdXRpb25Db250ZXh0VHlwZTo6Tm9ybWFsOworICAgICAgICByZXR1cm4gUHJvdG9j
b2w6OlJ1bnRpbWU6OkV4ZWN1dGlvbkNvbnRleHRUeXBlOjpOb3JtYWw7CiAgICAgY2FzZSBET01X
cmFwcGVyV29ybGQ6OlR5cGU6OlVzZXI6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0VHlwZTo6VXNlcjsKKyAgICAgICAgcmV0dXJu
IFByb3RvY29sOjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0VHlwZTo6VXNlcjsKICAgICBjYXNl
IERPTVdyYXBwZXJXb3JsZDo6VHlwZTo6SW50ZXJuYWw6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0
b3I6OlByb3RvY29sOjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0VHlwZTo6SW50ZXJuYWw7Cisg
ICAgICAgIHJldHVybiBQcm90b2NvbDo6UnVudGltZTo6RXhlY3V0aW9uQ29udGV4dFR5cGU6Oklu
dGVybmFsOwogICAgIH0KIAogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBJ
bnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0VHlwZTo6SW50ZXJu
YWw7CisgICAgcmV0dXJuIFByb3RvY29sOjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0VHlwZTo6
SW50ZXJuYWw7CiB9CiAKLXZvaWQgUGFnZVJ1bnRpbWVBZ2VudDo6bm90aWZ5Q29udGV4dENyZWF0
ZWQoY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIGNvbnN0IERPTVdyYXBwZXJXb3JsZCYgd29ybGQsIFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0
eU9yaWdpbikKK3ZvaWQgUGFnZVJ1bnRpbWVBZ2VudDo6bm90aWZ5Q29udGV4dENyZWF0ZWQoY29u
c3QgUHJvdG9jb2w6Ok5ldHdvcms6OkZyYW1lSWQmIGZyYW1lSWQsIEpTQzo6SlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgY29uc3QgRE9NV3JhcHBlcldvcmxkJiB3b3JsZCwgU2VjdXJpdHlP
cmlnaW4qIHNlY3VyaXR5T3JpZ2luKQogewogICAgIGF1dG8gaW5qZWN0ZWRTY3JpcHQgPSBpbmpl
Y3RlZFNjcmlwdE1hbmFnZXIoKS5pbmplY3RlZFNjcmlwdEZvcihnbG9iYWxPYmplY3QpOwogICAg
IGlmIChpbmplY3RlZFNjcmlwdC5oYXNOb1ZhbHVlKCkpCkBAIC0xODQsNyArMTgxLDcgQEAgdm9p
ZCBQYWdlUnVudGltZUFnZW50Ojpub3RpZnlDb250ZXh0Q3JlYXRlZChjb25zdCBTdHJpbmcmIGZy
YW1lSWQsIEpTQzo6SlNHbG9iYWwKICAgICBpZiAobmFtZS5pc0VtcHR5KCkgJiYgc2VjdXJpdHlP
cmlnaW4pCiAgICAgICAgIG5hbWUgPSBzZWN1cml0eU9yaWdpbi0+dG9SYXdTdHJpbmcoKTsKIAot
ICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5leGVjdXRpb25Db250ZXh0Q3JlYXRlZChJbnNwZWN0
b3I6OlByb3RvY29sOjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0RGVzY3JpcHRpb246OmNyZWF0
ZSgpCisgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPmV4ZWN1dGlvbkNvbnRleHRDcmVhdGVkKFBy
b3RvY29sOjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0RGVzY3JpcHRpb246OmNyZWF0ZSgpCiAg
ICAgICAgIC5zZXRJZChpbmplY3RlZFNjcmlwdE1hbmFnZXIoKS5pbmplY3RlZFNjcmlwdElkRm9y
KGdsb2JhbE9iamVjdCkpCiAgICAgICAgIC5zZXRUeXBlKHRvUHJvdG9jb2wod29ybGQudHlwZSgp
KSkKICAgICAgICAgLnNldE5hbWUobmFtZSkKQEAgLTE5MiwxNiArMTg5LDE2IEBAIHZvaWQgUGFn
ZVJ1bnRpbWVBZ2VudDo6bm90aWZ5Q29udGV4dENyZWF0ZWQoY29uc3QgU3RyaW5nJiBmcmFtZUlk
LCBKU0M6OkpTR2xvYmFsCiAgICAgICAgIC5yZWxlYXNlKCkpOwogfQogCi12b2lkIFBhZ2VSdW50
aW1lQWdlbnQ6OmV2YWx1YXRlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5n
JiBleHByZXNzaW9uLCBjb25zdCBTdHJpbmcqIG9iamVjdEdyb3VwLCBjb25zdCBib29sKiBpbmNs
dWRlQ29tbWFuZExpbmVBUEksIGNvbnN0IGJvb2wqIGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRN
dXRlQ29uc29sZSwgY29uc3QgaW50KiBleGVjdXRpb25Db250ZXh0SWQsIGNvbnN0IGJvb2wqIHJl
dHVybkJ5VmFsdWUsIGNvbnN0IGJvb2wqIGdlbmVyYXRlUHJldmlldywgY29uc3QgYm9vbCogc2F2
ZVJlc3VsdCwgY29uc3QgYm9vbCogZW11bGF0ZVVzZXJHZXN0dXJlLCBSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0LCBPcHRpb25hbDxib29s
PiYgd2FzVGhyb3duLCBPcHRpb25hbDxpbnQ+JiBzYXZlZFJlc3VsdEluZGV4KQorUHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8c3RkOjp0dXBsZTxSZWY8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9i
amVjdD4sIE9wdGlvbmFsPGJvb2w+IC8qIHdhc1Rocm93biAqLywgT3B0aW9uYWw8aW50PiAvKiBz
YXZlZFJlc3VsdEluZGV4ICovPj4gUGFnZVJ1bnRpbWVBZ2VudDo6ZXZhbHVhdGUoY29uc3QgU3Ry
aW5nJiBleHByZXNzaW9uLCBjb25zdCBTdHJpbmcmIG9iamVjdEdyb3VwLCBPcHRpb25hbDxib29s
PiYmIGluY2x1ZGVDb21tYW5kTGluZUFQSSwgT3B0aW9uYWw8Ym9vbD4mJiBkb05vdFBhdXNlT25F
eGNlcHRpb25zQW5kTXV0ZUNvbnNvbGUsIE9wdGlvbmFsPFByb3RvY29sOjpSdW50aW1lOjpFeGVj
dXRpb25Db250ZXh0SWQ+JiYgZXhlY3V0aW9uQ29udGV4dElkLCBPcHRpb25hbDxib29sPiYmIHJl
dHVybkJ5VmFsdWUsIE9wdGlvbmFsPGJvb2w+JiYgZ2VuZXJhdGVQcmV2aWV3LCBPcHRpb25hbDxi
b29sPiYmIHNhdmVSZXN1bHQsIE9wdGlvbmFsPGJvb2w+JiYgZW11bGF0ZVVzZXJHZXN0dXJlKQog
ewotICAgIFVzZXJHZXN0dXJlRW11bGF0aW9uU2NvcGUgdXNlckdlc3R1cmVTY29wZShtX2luc3Bl
Y3RlZFBhZ2UsIGFzQm9vbChlbXVsYXRlVXNlckdlc3R1cmUpKTsKLSAgICBJbnNwZWN0b3JSdW50
aW1lQWdlbnQ6OmV2YWx1YXRlKGVycm9yU3RyaW5nLCBleHByZXNzaW9uLCBvYmplY3RHcm91cCwg
aW5jbHVkZUNvbW1hbmRMaW5lQVBJLCBkb05vdFBhdXNlT25FeGNlcHRpb25zQW5kTXV0ZUNvbnNv
bGUsIGV4ZWN1dGlvbkNvbnRleHRJZCwgcmV0dXJuQnlWYWx1ZSwgZ2VuZXJhdGVQcmV2aWV3LCBz
YXZlUmVzdWx0LCBlbXVsYXRlVXNlckdlc3R1cmUsIHJlc3VsdCwgd2FzVGhyb3duLCBzYXZlZFJl
c3VsdEluZGV4KTsKKyAgICBVc2VyR2VzdHVyZUVtdWxhdGlvblNjb3BlIHVzZXJHZXN0dXJlU2Nv
cGUobV9pbnNwZWN0ZWRQYWdlLCBlbXVsYXRlVXNlckdlc3R1cmUgJiYgKmVtdWxhdGVVc2VyR2Vz
dHVyZSk7CisgICAgcmV0dXJuIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6ZXZhbHVhdGUoZXhwcmVz
c2lvbiwgb2JqZWN0R3JvdXAsIFdURk1vdmUoaW5jbHVkZUNvbW1hbmRMaW5lQVBJKSwgV1RGTW92
ZShkb05vdFBhdXNlT25FeGNlcHRpb25zQW5kTXV0ZUNvbnNvbGUpLCBXVEZNb3ZlKGV4ZWN1dGlv
bkNvbnRleHRJZCksIFdURk1vdmUocmV0dXJuQnlWYWx1ZSksIFdURk1vdmUoZ2VuZXJhdGVQcmV2
aWV3KSwgV1RGTW92ZShzYXZlUmVzdWx0KSwgV1RGTW92ZShlbXVsYXRlVXNlckdlc3R1cmUpKTsK
IH0KIAotdm9pZCBQYWdlUnVudGltZUFnZW50OjpjYWxsRnVuY3Rpb25PbihFcnJvclN0cmluZyYg
ZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgb2JqZWN0SWQsIGNvbnN0IFN0cmluZyYgZXhwcmVz
c2lvbiwgY29uc3QgSlNPTjo6QXJyYXkqIG9wdGlvbmFsQXJndW1lbnRzLCBjb25zdCBib29sKiBk
b05vdFBhdXNlT25FeGNlcHRpb25zQW5kTXV0ZUNvbnNvbGUsIGNvbnN0IGJvb2wqIHJldHVybkJ5
VmFsdWUsIGNvbnN0IGJvb2wqIGdlbmVyYXRlUHJldmlldywgY29uc3QgYm9vbCogZW11bGF0ZVVz
ZXJHZXN0dXJlLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2Jq
ZWN0PiYgcmVzdWx0LCBPcHRpb25hbDxib29sPiYgd2FzVGhyb3duKQorUHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8c3RkOjp0dXBsZTxSZWY8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4s
IE9wdGlvbmFsPGJvb2w+IC8qIHdhc1Rocm93biAqLz4+IFBhZ2VSdW50aW1lQWdlbnQ6OmNhbGxG
dW5jdGlvbk9uKGNvbnN0IFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3RJZCYgb2JqZWN0
SWQsIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgUmVmUHRyPEpTT046OkFycmF5PiYmIG9wdGlv
bmFsQXJndW1lbnRzLCBPcHRpb25hbDxib29sPiYmIGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRN
dXRlQ29uc29sZSwgT3B0aW9uYWw8Ym9vbD4mJiByZXR1cm5CeVZhbHVlLCBPcHRpb25hbDxib29s
PiYmIGdlbmVyYXRlUHJldmlldywgT3B0aW9uYWw8Ym9vbD4mJiBlbXVsYXRlVXNlckdlc3R1cmUp
CiB7Ci0gICAgVXNlckdlc3R1cmVFbXVsYXRpb25TY29wZSB1c2VyR2VzdHVyZVNjb3BlKG1faW5z
cGVjdGVkUGFnZSwgYXNCb29sKGVtdWxhdGVVc2VyR2VzdHVyZSkpOwotICAgIEluc3BlY3RvclJ1
bnRpbWVBZ2VudDo6Y2FsbEZ1bmN0aW9uT24oZXJyb3JTdHJpbmcsIG9iamVjdElkLCBleHByZXNz
aW9uLCBvcHRpb25hbEFyZ3VtZW50cywgZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25z
b2xlLCByZXR1cm5CeVZhbHVlLCBnZW5lcmF0ZVByZXZpZXcsIGVtdWxhdGVVc2VyR2VzdHVyZSwg
cmVzdWx0LCB3YXNUaHJvd24pOworICAgIFVzZXJHZXN0dXJlRW11bGF0aW9uU2NvcGUgdXNlckdl
c3R1cmVTY29wZShtX2luc3BlY3RlZFBhZ2UsIGVtdWxhdGVVc2VyR2VzdHVyZSAmJiAqZW11bGF0
ZVVzZXJHZXN0dXJlKTsKKyAgICByZXR1cm4gSW5zcGVjdG9yUnVudGltZUFnZW50OjpjYWxsRnVu
Y3Rpb25PbihvYmplY3RJZCwgZXhwcmVzc2lvbiwgV1RGTW92ZShvcHRpb25hbEFyZ3VtZW50cyks
IFdURk1vdmUoZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xlKSwgV1RGTW92ZShy
ZXR1cm5CeVZhbHVlKSwgV1RGTW92ZShnZW5lcmF0ZVByZXZpZXcpLCBXVEZNb3ZlKGVtdWxhdGVV
c2VyR2VzdHVyZSkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZVJ1bnRpbWVBZ2VudC5oIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VSdW50aW1lQWdlbnQuaApp
bmRleCAyYWYzNzM5YjdmZTdjMTZmYWE3ZDhkMjc5N2NlNmQwMTAyMTUzOThkLi4yOTg0NjVjNTJi
NDI0NjRjMjczMzY1OWUwN2YzZjc2MDE3NGE5NWViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZVJ1bnRpbWVBZ2VudC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlUnVudGltZUFnZW50LmgKQEAgLTQ1LDMx
ICs0NSwzMCBAQCBjbGFzcyBET01XcmFwcGVyV29ybGQ7CiBjbGFzcyBGcmFtZTsKIGNsYXNzIFBh
Z2U7CiBjbGFzcyBTZWN1cml0eU9yaWdpbjsKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwog
CiBjbGFzcyBQYWdlUnVudGltZUFnZW50IGZpbmFsIDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVj
dG9yUnVudGltZUFnZW50IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShQYWdlUnVudGltZUFn
ZW50KTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBQYWdlUnVu
dGltZUFnZW50KFBhZ2VBZ2VudENvbnRleHQmKTsKLSAgICB+UGFnZVJ1bnRpbWVBZ2VudCgpIG92
ZXJyaWRlOworICAgIH5QYWdlUnVudGltZUFnZW50KCk7CiAKICAgICAvLyBSdW50aW1lQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyCi0gICAgdm9pZCBlbmFibGUoRXJyb3JTdHJpbmcmKSBvdmVycmlk
ZTsKLSAgICB2b2lkIGRpc2FibGUoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2b2lkIGV2
YWx1YXRlKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBjb25zdCBTdHJp
bmcqIG9iamVjdEdyb3VwLCBjb25zdCBib29sKiBpbmNsdWRlQ29tbWFuZExpbmVBUEksIGNvbnN0
IGJvb2wqIGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29sZSwgY29uc3QgaW50KiBl
eGVjdXRpb25Db250ZXh0SWQsIGNvbnN0IGJvb2wqIHJldHVybkJ5VmFsdWUsIGNvbnN0IGJvb2wq
IGdlbmVyYXRlUHJldmlldywgY29uc3QgYm9vbCogc2F2ZVJlc3VsdCwgY29uc3QgYm9vbCogZW11
bGF0ZVVzZXJHZXN0dXJlLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6UmVt
b3RlT2JqZWN0PiYgcmVzdWx0LCBPcHRpb25hbDxib29sPiYgd2FzVGhyb3duLCBPcHRpb25hbDxp
bnQ+JiBzYXZlZFJlc3VsdEluZGV4KSBvdmVycmlkZTsKLSAgICB2b2lkIGNhbGxGdW5jdGlvbk9u
KEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBvYmplY3RJZCwgY29uc3QgU3RyaW5nJiBleHBy
ZXNzaW9uLCBjb25zdCBKU09OOjpBcnJheSogb3B0aW9uYWxBcmd1bWVudHMsIGNvbnN0IGJvb2wq
IGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29sZSwgY29uc3QgYm9vbCogcmV0dXJu
QnlWYWx1ZSwgY29uc3QgYm9vbCogZ2VuZXJhdGVQcmV2aWV3LCBjb25zdCBib29sKiBlbXVsYXRl
VXNlckdlc3R1cmUsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVP
YmplY3Q+JiByZXN1bHQsIE9wdGlvbmFsPGJvb2w+JiB3YXNUaHJvd24pIG92ZXJyaWRlOworICAg
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZW5hYmxlKCk7CisgICAg
SW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBkaXNhYmxlKCk7CisgICAg
SW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxzdGQ6OnR1cGxlPFJlZjxJbnNwZWN0
b3I6OlByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+LCBPcHRpb25hbDxib29sPiAvKiB3
YXNUaHJvd24gKi8sIE9wdGlvbmFsPGludD4gLyogc2F2ZWRSZXN1bHRJbmRleCAqLz4+IGV2YWx1
YXRlKGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCwg
T3B0aW9uYWw8Ym9vbD4mJiBpbmNsdWRlQ29tbWFuZExpbmVBUEksIE9wdGlvbmFsPGJvb2w+JiYg
ZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xlLCBPcHRpb25hbDxJbnNwZWN0b3I6
OlByb3RvY29sOjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0SWQ+JiYsIE9wdGlvbmFsPGJvb2w+
JiYgcmV0dXJuQnlWYWx1ZSwgT3B0aW9uYWw8Ym9vbD4mJiBnZW5lcmF0ZVByZXZpZXcsIE9wdGlv
bmFsPGJvb2w+JiYgc2F2ZVJlc3VsdCwgT3B0aW9uYWw8Ym9vbD4mJiBlbXVsYXRlVXNlckdlc3R1
cmUpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8c3RkOjp0dXBsZTxS
ZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiwgT3B0aW9uYWw8
Ym9vbD4gLyogd2FzVGhyb3duICovPj4gY2FsbEZ1bmN0aW9uT24oY29uc3QgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0SWQmLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Np
b24sIFJlZlB0cjxKU09OOjpBcnJheT4mJiBhcmd1bWVudHMsIE9wdGlvbmFsPGJvb2w+JiYgZG9O
b3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xlLCBPcHRpb25hbDxib29sPiYmIHJldHVy
bkJ5VmFsdWUsIE9wdGlvbmFsPGJvb2w+JiYgZ2VuZXJhdGVQcmV2aWV3LCBPcHRpb25hbDxib29s
PiYmIGVtdWxhdGVVc2VyR2VzdHVyZSk7CiAKICAgICAvLyBJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b24KICAgICB2b2lkIGZyYW1lTmF2aWdhdGVkKEZyYW1lJik7CiAgICAgdm9pZCBkaWRDbGVhcldp
bmRvd09iamVjdEluV29ybGQoRnJhbWUmLCBET01XcmFwcGVyV29ybGQmKTsKIAogcHJpdmF0ZToK
LSAgICBJbnNwZWN0b3I6OkluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0Rm9yRXZhbChFcnJv
clN0cmluZyYsIGNvbnN0IGludCogZXhlY3V0aW9uQ29udGV4dElkKSBvdmVycmlkZTsKLSAgICB2
b2lkIG11dGVDb25zb2xlKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCB1bm11dGVDb25zb2xlKCkgb3Zl
cnJpZGU7CisgICAgSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdEZvckV2
YWwoSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBPcHRpb25hbDxJbnNwZWN0b3I6
OlByb3RvY29sOjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0SWQ+JiYpOworICAgIHZvaWQgbXV0
ZUNvbnNvbGUoKTsKKyAgICB2b2lkIHVubXV0ZUNvbnNvbGUoKTsKICAgICB2b2lkIHJlcG9ydEV4
ZWN1dGlvbkNvbnRleHRDcmVhdGlvbigpOwotICAgIHZvaWQgbm90aWZ5Q29udGV4dENyZWF0ZWQo
Y29uc3QgU3RyaW5nJiBmcmFtZUlkLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgY29uc3QgRE9NV3Jh
cHBlcldvcmxkJiwgU2VjdXJpdHlPcmlnaW4qID0gbnVsbHB0cik7CisgICAgdm9pZCBub3RpZnlD
b250ZXh0Q3JlYXRlZChjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpGcmFtZUlk
JiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIGNvbnN0IERPTVdyYXBwZXJXb3JsZCYsIFNlY3VyaXR5
T3JpZ2luKiA9IG51bGxwdHIpOwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPEluc3BlY3Rvcjo6UnVu
dGltZUZyb250ZW5kRGlzcGF0Y2hlcj4gbV9mcm9udGVuZERpc3BhdGNoZXI7CiAgICAgUmVmUHRy
PEluc3BlY3Rvcjo6UnVudGltZUJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVy
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvU2Vy
dmljZVdvcmtlckFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29y
a2VyL1NlcnZpY2VXb3JrZXJBZ2VudC5jcHAKaW5kZXggMThhNjBjM2MxY2IyZmExMTMzZTg5NDE5
MTI2MzlmOTM3MmVmZjJhNi4uYmJlMmNjMDNkNjQ1ZmMxMjkwODRkYmVlOWRkODA0MjJiYmQ2M2Zk
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvU2Vy
dmljZVdvcmtlckFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRz
L3dvcmtlci9TZXJ2aWNlV29ya2VyQWdlbnQuY3BwCkBAIC01NCw5ICs1NCw5IEBAIHZvaWQgU2Vy
dmljZVdvcmtlckFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6
OkRpc2Nvbm5lY3RSZWFzCiB7CiB9CiAKLXZvaWQgU2VydmljZVdvcmtlckFnZW50OjpnZXRJbml0
aWFsaXphdGlvbkluZm8oRXJyb3JTdHJpbmcmLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
U2VydmljZVdvcmtlcjo6Q29uZmlndXJhdGlvbj4mIGluZm8pCitQcm90b2NvbDo6RXJyb3JTdHJp
bmdPcjxSZWY8UHJvdG9jb2w6OlNlcnZpY2VXb3JrZXI6OkNvbmZpZ3VyYXRpb24+PiBTZXJ2aWNl
V29ya2VyQWdlbnQ6OmdldEluaXRpYWxpemF0aW9uSW5mbygpCiB7Ci0gICAgaW5mbyA9IEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlNlcnZpY2VXb3JrZXI6OkNvbmZpZ3VyYXRpb246OmNyZWF0ZSgpCisg
ICAgcmV0dXJuIFByb3RvY29sOjpTZXJ2aWNlV29ya2VyOjpDb25maWd1cmF0aW9uOjpjcmVhdGUo
KQogICAgICAgICAuc2V0VGFyZ2V0SWQobV9zZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGUuaWRlbnRp
ZmllcigpKQogICAgICAgICAuc2V0U2VjdXJpdHlPcmlnaW4obV9zZXJ2aWNlV29ya2VyR2xvYmFs
U2NvcGUuc2VjdXJpdHlPcmlnaW4oKS0+dG9SYXdTdHJpbmcoKSkKICAgICAgICAgLnNldFVybCht
X3NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZS50aHJlYWQoKS5jb250ZXh0RGF0YSgpLnNjcmlwdFVS
TC5zdHJpbmcoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMv
d29ya2VyL1NlcnZpY2VXb3JrZXJBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Fn
ZW50cy93b3JrZXIvU2VydmljZVdvcmtlckFnZW50LmgKaW5kZXggODE0OWZmM2RhYzM1NzhmYzA0
OGI2NThlNjMxN2RlMzJiMTk3ZDQwMC4uMGJhNWNjNWNjN2YzM2Q2MTFiNDVhMDQ5ODc0NTA1NWI4
ZjI5ZmZjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93b3Jr
ZXIvU2VydmljZVdvcmtlckFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Fn
ZW50cy93b3JrZXIvU2VydmljZVdvcmtlckFnZW50LmgKQEAgLTM0LDIxICszNCwxOSBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFNlcnZpY2VXb3JrZXJHbG9iYWxTY29wZTsKIAotdHlw
ZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7Ci0KIGNsYXNzIFNlcnZpY2VXb3JrZXJBZ2VudCBmaW5h
bCA6IHB1YmxpYyBJbnNwZWN0b3JBZ2VudEJhc2UsIHB1YmxpYyBJbnNwZWN0b3I6OlNlcnZpY2VX
b3JrZXJCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KFNlcnZpY2VXb3JrZXJBZ2VudCk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJs
aWM6CiAgICAgU2VydmljZVdvcmtlckFnZW50KFdvcmtlckFnZW50Q29udGV4dCYpOwotICAgIH5T
ZXJ2aWNlV29ya2VyQWdlbnQoKSBvdmVycmlkZTsKKyAgICB+U2VydmljZVdvcmtlckFnZW50KCk7
CiAKICAgICAvLyBJbnNwZWN0b3JBZ2VudEJhc2UKLSAgICB2b2lkIGRpZENyZWF0ZUZyb250ZW5k
QW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kUm91dGVyKiwgSW5zcGVjdG9yOjpCYWNrZW5k
RGlzcGF0Y2hlciopIG92ZXJyaWRlOwotICAgIHZvaWQgd2lsbERlc3Ryb3lGcm9udGVuZEFuZEJh
Y2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKSBvdmVycmlkZTsKKyAgICB2b2lkIGRp
ZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kUm91dGVyKiwgSW5z
cGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlciopOworICAgIHZvaWQgd2lsbERlc3Ryb3lGcm9udGVu
ZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKTsKIAogICAgIC8vIFNlcnZp
Y2VXb3JrZXJCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIKLSAgICB2b2lkIGdldEluaXRpYWxpemF0
aW9uSW5mbyhFcnJvclN0cmluZyYsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpTZXJ2aWNl
V29ya2VyOjpDb25maWd1cmF0aW9uPiYpIG92ZXJyaWRlOworICAgIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkVycm9yU3RyaW5nT3I8UmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlNlcnZpY2VXb3JrZXI6
OkNvbmZpZ3VyYXRpb24+PiBnZXRJbml0aWFsaXphdGlvbkluZm8oKTsKIAogcHJpdmF0ZToKICAg
ICBTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGUmIG1fc2VydmljZVdvcmtlckdsb2JhbFNjb3BlOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2Vy
QXVkaXRBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9X
b3JrZXJBdWRpdEFnZW50LmNwcAppbmRleCBjMTJiNWFhNDEzMmY4OWFjNTgyZGViOWY3MmYxODUx
YTllZWY5NTNmLi44OTI0MTkwZWU2MjBmMTU1MTRhMjUwZDc2MmUyYmU0YTE5MzMwNjNkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJBdWRp
dEFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9X
b3JrZXJBdWRpdEFnZW50LmNwcApAQCAtNDgsNyArNDgsNyBAQCBXb3JrZXJBdWRpdEFnZW50OjpX
b3JrZXJBdWRpdEFnZW50KFdvcmtlckFnZW50Q29udGV4dCYgY29udGV4dCkKIAogV29ya2VyQXVk
aXRBZ2VudDo6fldvcmtlckF1ZGl0QWdlbnQoKSA9IGRlZmF1bHQ7CiAKLUluamVjdGVkU2NyaXB0
IFdvcmtlckF1ZGl0QWdlbnQ6OmluamVjdGVkU2NyaXB0Rm9yRXZhbChFcnJvclN0cmluZyYgZXJy
b3JTdHJpbmcsIGNvbnN0IGludCogZXhlY3V0aW9uQ29udGV4dElkKQorSW5qZWN0ZWRTY3JpcHQg
V29ya2VyQXVkaXRBZ2VudDo6aW5qZWN0ZWRTY3JpcHRGb3JFdmFsKFByb3RvY29sOjpFcnJvclN0
cmluZyYgZXJyb3JTdHJpbmcsIE9wdGlvbmFsPFByb3RvY29sOjpSdW50aW1lOjpFeGVjdXRpb25D
b250ZXh0SWQ+JiYgZXhlY3V0aW9uQ29udGV4dElkKQogewogICAgIGlmIChleGVjdXRpb25Db250
ZXh0SWQpIHsKICAgICAgICAgZXJyb3JTdHJpbmcgPSAiZXhlY3V0aW9uQ29udGV4dElkIGlzIG5v
dCBzdXBwb3J0ZWQgZm9yIHdvcmtlcnMgYXMgdGhlcmUgaXMgb25seSBvbmUgZXhlY3V0aW9uIGNv
bnRleHQiX3M7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dv
cmtlci9Xb3JrZXJBdWRpdEFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRz
L3dvcmtlci9Xb3JrZXJBdWRpdEFnZW50LmgKaW5kZXggZDZhY2RjMGVhM2U4OWYwZmFkMzFjY2Iy
ZDc2OGUwZTE0NmJkMzIzNS4uZDI1OWM2YTc2YzJlY2IwZWViOGVkZDczMzllYzA0NTliZDM3MmIz
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29y
a2VyQXVkaXRBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29y
a2VyL1dvcmtlckF1ZGl0QWdlbnQuaApAQCAtMzcsMTAgKzM3LDEwIEBAIGNsYXNzIFdvcmtlckF1
ZGl0QWdlbnQgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JBdWRpdEFnZW50IHsK
ICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBXb3JrZXJBdWRpdEFn
ZW50KFdvcmtlckFnZW50Q29udGV4dCYpOwotICAgIH5Xb3JrZXJBdWRpdEFnZW50KCkgb3ZlcnJp
ZGU7CisgICAgfldvcmtlckF1ZGl0QWdlbnQoKTsKIAogcHJpdmF0ZToKLSAgICBJbnNwZWN0b3I6
OkluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0Rm9yRXZhbChJbnNwZWN0b3I6OkVycm9yU3Ry
aW5nJiwgY29uc3QgaW50KiBleGVjdXRpb25Db250ZXh0SWQpIG92ZXJyaWRlOworICAgIEluc3Bl
Y3Rvcjo6SW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHRGb3JFdmFsKEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkVycm9yU3RyaW5nJiwgT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGlt
ZTo6RXhlY3V0aW9uQ29udGV4dElkPiYmKTsKIAogICAgIFdvcmtlckdsb2JhbFNjb3BlJiBtX3dv
cmtlckdsb2JhbFNjb3BlOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9hZ2VudHMvd29ya2VyL1dvcmtlckNvbnNvbGVBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2VyQ29uc29sZUFnZW50LmgKaW5kZXggYjdiNTVkMDA2
NTkwZWZiMDgzZmViYjk0ZTQzYjQxMmQ2M2NlYWZkMC4uNTcxNTk5MTI0N2NhZmI5ZDY3ZWYzMzE3
MWFkZmQxYzk2YzdlNDgyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Fn
ZW50cy93b3JrZXIvV29ya2VyQ29uc29sZUFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2VyQ29uc29sZUFnZW50LmgKQEAgLTM1LDcgKzM1LDcg
QEAgY2xhc3MgV29ya2VyQ29uc29sZUFnZW50IGZpbmFsIDogcHVibGljIFdlYkNvbnNvbGVBZ2Vu
dCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgV29ya2VyQ29u
c29sZUFnZW50KFdvcmtlckFnZW50Q29udGV4dCYpOwotICAgIH5Xb3JrZXJDb25zb2xlQWdlbnQo
KSBvdmVycmlkZTsKKyAgICB+V29ya2VyQ29uc29sZUFnZW50KCk7CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRz
L3dvcmtlci9Xb3JrZXJET01EZWJ1Z2dlckFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlckRPTURlYnVnZ2VyQWdlbnQuY3BwCmluZGV4IGJkNWQ4
YTgzNGVhZTg2MzMwZmNiOTcyYzU5MmQ1ZjcwYTdlNzMwNGMuLjkyMjc0MzUwYzYzNzE0NjA1MWQ3
NDk5YzliZmI3NDYwNzAzMjIxMTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9hZ2VudHMvd29ya2VyL1dvcmtlckRPTURlYnVnZ2VyQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlckRPTURlYnVnZ2VyQWdlbnQuY3Bw
CkBAIC0zNywxOSArMzcsMjAgQEAgV29ya2VyRE9NRGVidWdnZXJBZ2VudDo6V29ya2VyRE9NRGVi
dWdnZXJBZ2VudChXb3JrZXJBZ2VudENvbnRleHQmIGNvbnRleHQsIEluc3AKIAogV29ya2VyRE9N
RGVidWdnZXJBZ2VudDo6fldvcmtlckRPTURlYnVnZ2VyQWdlbnQoKSA9IGRlZmF1bHQ7CiAKLXZv
aWQgV29ya2VyRE9NRGVidWdnZXJBZ2VudDo6c2V0RE9NQnJlYWtwb2ludChFcnJvclN0cmluZyYg
ZXJyb3JTdHJpbmcsIGludCAvKiBub2RlSWQgKi8sIGNvbnN0IFN0cmluZyYgLyogdHlwZVN0cmlu
ZyAqLywgY29uc3QgSlNPTjo6T2JqZWN0KiAvKiBvcHRpb25zUGF5bG9hZCAqLykKK1Byb3RvY29s
OjpFcnJvclN0cmluZ09yPHZvaWQ+IFdvcmtlckRPTURlYnVnZ2VyQWdlbnQ6OnNldERPTUJyZWFr
cG9pbnQoUHJvdG9jb2w6OkRPTTo6Tm9kZUlkLCBQcm90b2NvbDo6RE9NRGVidWdnZXI6OkRPTUJy
ZWFrcG9pbnRUeXBlLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIC8qIG9wdGlvbnMgKi8pCiB7Ci0g
ICAgZXJyb3JTdHJpbmcgPSAiTm90IHN1cHBvcnRlZCJfczsKKyAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoIk5vdCBzdXBwb3J0ZWQiX3MpOwogfQogCi12b2lkIFdvcmtlckRPTURlYnVnZ2VyQWdl
bnQ6OnJlbW92ZURPTUJyZWFrcG9pbnQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgLyog
bm9kZUlkICovLCBjb25zdCBTdHJpbmcmIC8qIHR5cGVTdHJpbmcgKi8pCitQcm90b2NvbDo6RXJy
b3JTdHJpbmdPcjx2b2lkPiBXb3JrZXJET01EZWJ1Z2dlckFnZW50OjpyZW1vdmVET01CcmVha3Bv
aW50KFByb3RvY29sOjpET006Ok5vZGVJZCwgUHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpET01CcmVh
a3BvaW50VHlwZSkKIHsKLSAgICBlcnJvclN0cmluZyA9ICJOb3Qgc3VwcG9ydGVkIl9zOworICAg
IHJldHVybiBtYWtlVW5leHBlY3RlZCgiTm90IHN1cHBvcnRlZCJfcyk7CiB9CiAKLXZvaWQgV29y
a2VyRE9NRGVidWdnZXJBZ2VudDo6c2V0QW5pbWF0aW9uRnJhbWVCcmVha3BvaW50KEVycm9yU3Ry
aW5nJiBlcnJvclN0cmluZywgUmVmUHRyPEpTQzo6QnJlYWtwb2ludD4mJikKK2Jvb2wgV29ya2Vy
RE9NRGVidWdnZXJBZ2VudDo6c2V0QW5pbWF0aW9uRnJhbWVCcmVha3BvaW50KFByb3RvY29sOjpF
cnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIFJlZlB0cjxKU0M6OkJyZWFrcG9pbnQ+JiYpCiB7CiAg
ICAgZXJyb3JTdHJpbmcgPSAiTm90IHN1cHBvcnRlZCJfczsKKyAgICByZXR1cm4gZmFsc2U7CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlckRPTURlYnVnZ2VyQWdlbnQuaCBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlckRPTURlYnVnZ2VyQWdlbnQuaApp
bmRleCA4NmViOTNmNWUxOTc1NTFiYmQyMDk2OTY1NzljNzA4OTRkNThjMjFjLi41NmY1YTA5MGEz
MzA4NjAxZGJkYmE5YzRmMmI0ZDNmN2MxMTMzZDE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJET01EZWJ1Z2dlckFnZW50LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2VyRE9NRGVidWdnZXJB
Z2VudC5oCkBAIC0zMSwxOSArMzEsMTcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi10eXBl
ZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQogY2xhc3MgV29ya2VyRE9NRGVidWdnZXJBZ2VudCBm
aW5hbCA6IHB1YmxpYyBJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50IHsKIHB1YmxpYzoKICAgICBX
b3JrZXJET01EZWJ1Z2dlckFnZW50KFdvcmtlckFnZW50Q29udGV4dCYsIEluc3BlY3Rvcjo6SW5z
cGVjdG9yRGVidWdnZXJBZ2VudCopOwotICAgIH5Xb3JrZXJET01EZWJ1Z2dlckFnZW50KCkgb3Zl
cnJpZGU7CisgICAgfldvcmtlckRPTURlYnVnZ2VyQWdlbnQoKTsKIAogICAgIC8vIERPTURlYnVn
Z2VyQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyCi0gICAgdm9pZCBzZXRET01CcmVha3BvaW50KEVy
cm9yU3RyaW5nJiwgaW50IG5vZGVJZCwgY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBKU09OOjpP
YmplY3QqIG9wdGlvbnMpIG92ZXJyaWRlOwotICAgIHZvaWQgcmVtb3ZlRE9NQnJlYWtwb2ludChF
cnJvclN0cmluZyYsIGludCBub2RlSWQsIGNvbnN0IFN0cmluZyYgdHlwZSkgb3ZlcnJpZGU7Cisg
ICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzZXRET01CcmVha3Bv
aW50KEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkLCBJbnNwZWN0b3I6OlByb3RvY29s
OjpET01EZWJ1Z2dlcjo6RE9NQnJlYWtwb2ludFR5cGUsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYg
b3B0aW9ucyk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBy
ZW1vdmVET01CcmVha3BvaW50KEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkLCBJbnNw
ZWN0b3I6OlByb3RvY29sOjpET01EZWJ1Z2dlcjo6RE9NQnJlYWtwb2ludFR5cGUpOwogCiBwcml2
YXRlOgotICAgIHZvaWQgc2V0QW5pbWF0aW9uRnJhbWVCcmVha3BvaW50KEVycm9yU3RyaW5nJiwg
UmVmUHRyPEpTQzo6QnJlYWtwb2ludD4mJikgb3ZlcnJpZGU7CisgICAgYm9vbCBzZXRBbmltYXRp
b25GcmFtZUJyZWFrcG9pbnQoSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBSZWZQ
dHI8SlNDOjpCcmVha3BvaW50PiYmKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlckRl
YnVnZ2VyQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93b3JrZXIv
V29ya2VyRGVidWdnZXJBZ2VudC5jcHAKaW5kZXggY2JjNjIwNTIyMTk0ZjI5YTk0MTg3YThhMjdh
YzEyYjQxOWQzNTllMC4uN2FhNzJiNmE0YzY0Y2E5ZjY3ODE1MGQwNmEzMmQwMjk0YzUwODgyNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2Vy
RGVidWdnZXJBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93
b3JrZXIvV29ya2VyRGVidWdnZXJBZ2VudC5jcHAKQEAgLTUzLDcgKzUzLDcgQEAgdm9pZCBXb3Jr
ZXJEZWJ1Z2dlckFnZW50OjpicmVha3BvaW50QWN0aW9uTG9nKEpTR2xvYmFsT2JqZWN0KiBsZXhp
Y2FsR2xvYmFsT2JqZWMKICAgICBtX3dvcmtlckdsb2JhbFNjb3BlLmFkZENvbnNvbGVNZXNzYWdl
KG1ha2VVbmlxdWU8Q29uc29sZU1lc3NhZ2U+KE1lc3NhZ2VTb3VyY2U6OkpTLCBNZXNzYWdlVHlw
ZTo6TG9nLCBNZXNzYWdlTGV2ZWw6OkxvZywgbWVzc2FnZSwgY3JlYXRlU2NyaXB0Q2FsbFN0YWNr
KGxleGljYWxHbG9iYWxPYmplY3QpKSk7CiB9CiAKLUluamVjdGVkU2NyaXB0IFdvcmtlckRlYnVn
Z2VyQWdlbnQ6OmluamVjdGVkU2NyaXB0Rm9yRXZhbChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcs
IGNvbnN0IGludCogZXhlY3V0aW9uQ29udGV4dElkKQorSW5qZWN0ZWRTY3JpcHQgV29ya2VyRGVi
dWdnZXJBZ2VudDo6aW5qZWN0ZWRTY3JpcHRGb3JFdmFsKFByb3RvY29sOjpFcnJvclN0cmluZyYg
ZXJyb3JTdHJpbmcsIE9wdGlvbmFsPFByb3RvY29sOjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0
SWQ+JiYgZXhlY3V0aW9uQ29udGV4dElkKQogewogICAgIGlmIChleGVjdXRpb25Db250ZXh0SWQp
IHsKICAgICAgICAgZXJyb3JTdHJpbmcgPSAiZXhlY3V0aW9uQ29udGV4dElkIGlzIG5vdCBzdXBw
b3J0ZWQgZm9yIHdvcmtlcnMgYXMgdGhlcmUgaXMgb25seSBvbmUgZXhlY3V0aW9uIGNvbnRleHQi
X3M7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9X
b3JrZXJEZWJ1Z2dlckFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dv
cmtlci9Xb3JrZXJEZWJ1Z2dlckFnZW50LmgKaW5kZXggNGFjMDdkNmNjMzdjMjI4MDMzMzhlYjgw
ZDM0MjE5NTIxYjk2ZjNkZS4uN2NhNjRlNDAxM2E1NGI0MThkNTNlNDc0ODAyZTczMmJmMTkwOGM5
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29y
a2VyRGVidWdnZXJBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMv
d29ya2VyL1dvcmtlckRlYnVnZ2VyQWdlbnQuaApAQCAtMzYsMTcgKzM2LDE3IEBAIGNsYXNzIFdv
cmtlckRlYnVnZ2VyQWdlbnQgZmluYWwgOiBwdWJsaWMgV2ViRGVidWdnZXJBZ2VudCB7CiAgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgV29ya2VyRGVidWdnZXJBZ2Vu
dChXb3JrZXJBZ2VudENvbnRleHQmKTsKLSAgICB+V29ya2VyRGVidWdnZXJBZ2VudCgpIG92ZXJy
aWRlOworICAgIH5Xb3JrZXJEZWJ1Z2dlckFnZW50KCk7CiAKICAgICAvLyBKU0M6OkRlYnVnZ2Vy
OjpPYnNlcnZlcgotICAgIHZvaWQgYnJlYWtwb2ludEFjdGlvbkxvZyhKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiwgY29uc3QgU3RyaW5nJiBkYXRhKSBmaW5hbDsKKyAgICB2b2lkIGJyZWFrcG9pbnRBY3Rp
b25Mb2coSlNDOjpKU0dsb2JhbE9iamVjdCosIGNvbnN0IFN0cmluZyYgZGF0YSk7CiAKIHByaXZh
dGU6CiAgICAgLy8gV2UgZG9uJ3QgbmVlZCB0byBtdXRlIGNvbnNvbGUgZm9yIHdvcmtlcnMuCi0g
ICAgdm9pZCBtdXRlQ29uc29sZSgpIG92ZXJyaWRlIHsgfQotICAgIHZvaWQgdW5tdXRlQ29uc29s
ZSgpIG92ZXJyaWRlIHsgfQorICAgIHZvaWQgbXV0ZUNvbnNvbGUoKSB7IH0KKyAgICB2b2lkIHVu
bXV0ZUNvbnNvbGUoKSB7IH0KIAotICAgIEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHQgaW5qZWN0
ZWRTY3JpcHRGb3JFdmFsKEVycm9yU3RyaW5nJiwgY29uc3QgaW50KiBleGVjdXRpb25Db250ZXh0
SWQpIG92ZXJyaWRlOworICAgIEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3Jp
cHRGb3JFdmFsKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nJiwgT3B0aW9uYWw8SW5z
cGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RXhlY3V0aW9uQ29udGV4dElkPiYmKTsKIAogICAg
IFdvcmtlckdsb2JhbFNjb3BlJiBtX3dvcmtlckdsb2JhbFNjb3BlOwogfTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlck5ldHdvcmtBZ2Vu
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJOZXR3
b3JrQWdlbnQuY3BwCmluZGV4IDUzZmE4ODNhZDk3MTg4Njg0Y2I5NGMwOTBlNzk2MTY5MDgxYjZi
NGQuLjJiMTY4ZTZkM2E3YTFiZTE0NjgzNjljMzBjYzJlYjZjOWIzOWQyNzcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlck5ldHdvcmtBZ2Vu
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2Vy
TmV0d29ya0FnZW50LmNwcApAQCAtNDMsMTIgKzQzLDEyIEBAIFdvcmtlck5ldHdvcmtBZ2VudDo6
V29ya2VyTmV0d29ya0FnZW50KFdvcmtlckFnZW50Q29udGV4dCYgY29udGV4dCkKIAogV29ya2Vy
TmV0d29ya0FnZW50Ojp+V29ya2VyTmV0d29ya0FnZW50KCkgPSBkZWZhdWx0OwogCi1TdHJpbmcg
V29ya2VyTmV0d29ya0FnZW50Ojpsb2FkZXJJZGVudGlmaWVyKERvY3VtZW50TG9hZGVyKikKK1By
b3RvY29sOjpOZXR3b3JrOjpMb2FkZXJJZCBXb3JrZXJOZXR3b3JrQWdlbnQ6OmxvYWRlcklkZW50
aWZpZXIoRG9jdW1lbnRMb2FkZXIqKQogewogICAgIHJldHVybiB7IH07CiB9CiAKLVN0cmluZyBX
b3JrZXJOZXR3b3JrQWdlbnQ6OmZyYW1lSWRlbnRpZmllcihEb2N1bWVudExvYWRlciopCitQcm90
b2NvbDo6TmV0d29yazo6RnJhbWVJZCBXb3JrZXJOZXR3b3JrQWdlbnQ6OmZyYW1lSWRlbnRpZmll
cihEb2N1bWVudExvYWRlciopCiB7CiAgICAgcmV0dXJuIHsgfTsKIH0KQEAgLTU5LDEyICs1OSwx
MiBAQCBWZWN0b3I8V2ViU29ja2V0Kj4gV29ya2VyTmV0d29ya0FnZW50OjphY3RpdmVXZWJTb2Nr
ZXRzKGNvbnN0IExvY2tIb2xkZXImKQogICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgV29ya2Vy
TmV0d29ya0FnZW50OjpzZXRSZXNvdXJjZUNhY2hpbmdEaXNhYmxlZChib29sIGRpc2FibGVkKQor
dm9pZCBXb3JrZXJOZXR3b3JrQWdlbnQ6OnNldFJlc291cmNlQ2FjaGluZ0Rpc2FibGVkSW50ZXJh
bChib29sIGRpc2FibGVkKQogewogICAgIG1fd29ya2VyR2xvYmFsU2NvcGUudGhyZWFkKCkud29y
a2VyRGVidWdnZXJQcm94eSgpLnNldFJlc291cmNlQ2FjaGluZ0Rpc2FibGVkQnlXZWJJbnNwZWN0
b3IoZGlzYWJsZWQpOwogfQogCi1TY3JpcHRFeGVjdXRpb25Db250ZXh0KiBXb3JrZXJOZXR3b3Jr
QWdlbnQ6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcm
KQorU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogV29ya2VyTmV0d29ya0FnZW50OjpzY3JpcHRFeGVj
dXRpb25Db250ZXh0KFByb3RvY29sOjpFcnJvclN0cmluZyYsIGNvbnN0IFByb3RvY29sOjpOZXR3
b3JrOjpGcmFtZUlkJikKIHsKICAgICByZXR1cm4gJm1fd29ya2VyR2xvYmFsU2NvcGU7CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJO
ZXR3b3JrQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dv
cmtlck5ldHdvcmtBZ2VudC5oCmluZGV4IDg5OWYwYTU2ZmQxYjdkYTk0M2E0NTUzYjhjOTRjZjNj
N2JmYjBiOTQuLjkxYjA1YjljMjMwZWM3Y2QzNWE0NmNlNTdjNTY2MzkyNzIyMmRmZjMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlck5ldHdv
cmtBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dv
cmtlck5ldHdvcmtBZ2VudC5oCkBAIC0zNCwxNSArMzQsMTUgQEAgY2xhc3MgV29ya2VyTmV0d29y
a0FnZW50IGZpbmFsIDogcHVibGljIEluc3BlY3Rvck5ldHdvcmtBZ2VudCB7CiAgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgV29ya2VyTmV0d29ya0FnZW50KFdvcmtl
ckFnZW50Q29udGV4dCYpOwotICAgIH5Xb3JrZXJOZXR3b3JrQWdlbnQoKSBvdmVycmlkZTsKKyAg
ICB+V29ya2VyTmV0d29ya0FnZW50KCk7CiAKIHByaXZhdGU6Ci0gICAgU3RyaW5nIGxvYWRlcklk
ZW50aWZpZXIoRG9jdW1lbnRMb2FkZXIqKSBvdmVycmlkZTsKLSAgICBTdHJpbmcgZnJhbWVJZGVu
dGlmaWVyKERvY3VtZW50TG9hZGVyKikgb3ZlcnJpZGU7Ci0gICAgVmVjdG9yPFdlYlNvY2tldCo+
IGFjdGl2ZVdlYlNvY2tldHMoY29uc3QgTG9ja0hvbGRlciYpIG92ZXJyaWRlOwotICAgIHZvaWQg
c2V0UmVzb3VyY2VDYWNoaW5nRGlzYWJsZWQoYm9vbCkgb3ZlcnJpZGU7Ci0gICAgU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dChFcnJvclN0cmluZyYsIGNvbnN0
IFN0cmluZyYgZnJhbWVJZCkgb3ZlcnJpZGU7Ci0gICAgYm9vbCBzaG91bGRGb3JjZUJ1ZmZlcmlu
Z05ldHdvcmtSZXNvdXJjZURhdGEoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9Cisg
ICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6TG9hZGVySWQgbG9hZGVySWRlbnRpZmll
cihEb2N1bWVudExvYWRlciopOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OkZy
YW1lSWQgZnJhbWVJZGVudGlmaWVyKERvY3VtZW50TG9hZGVyKik7CisgICAgVmVjdG9yPFdlYlNv
Y2tldCo+IGFjdGl2ZVdlYlNvY2tldHMoY29uc3QgTG9ja0hvbGRlciYpOworICAgIHZvaWQgc2V0
UmVzb3VyY2VDYWNoaW5nRGlzYWJsZWRJbnRlcmFsKGJvb2wpOworICAgIFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJy
b3JTdHJpbmcmLCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpGcmFtZUlkJik7
CisgICAgYm9vbCBzaG91bGRGb3JjZUJ1ZmZlcmluZ05ldHdvcmtSZXNvdXJjZURhdGEoKSBjb25z
dCB7IHJldHVybiB0cnVlOyB9CiAKICAgICBXb3JrZXJHbG9iYWxTY29wZSYgbV93b3JrZXJHbG9i
YWxTY29wZTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRz
L3dvcmtlci9Xb3JrZXJSdW50aW1lQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2FnZW50cy93b3JrZXIvV29ya2VyUnVudGltZUFnZW50LmNwcAppbmRleCBkOTIzMDgxYzUxZTNi
ZDI3NTIxYWEyNDFjN2NhYzhmYjQwZDNlMjgzLi5mZmZkM2NlYTIxNTM1OWZlNmYwZWQxZWRkNzcy
ZDE2YjcwOTUxZGViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRz
L3dvcmtlci9Xb3JrZXJSdW50aW1lQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlclJ1bnRpbWVBZ2VudC5jcHAKQEAgLTUxLDcgKzUxLDcg
QEAgV29ya2VyUnVudGltZUFnZW50OjpXb3JrZXJSdW50aW1lQWdlbnQoV29ya2VyQWdlbnRDb250
ZXh0JiBjb250ZXh0KQogCiBXb3JrZXJSdW50aW1lQWdlbnQ6On5Xb3JrZXJSdW50aW1lQWdlbnQo
KSA9IGRlZmF1bHQ7CiAKLUluamVjdGVkU2NyaXB0IFdvcmtlclJ1bnRpbWVBZ2VudDo6aW5qZWN0
ZWRTY3JpcHRGb3JFdmFsKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgaW50KiBleGVj
dXRpb25Db250ZXh0SWQpCitJbmplY3RlZFNjcmlwdCBXb3JrZXJSdW50aW1lQWdlbnQ6OmluamVj
dGVkU2NyaXB0Rm9yRXZhbChQcm90b2NvbDo6RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBPcHRp
b25hbDxQcm90b2NvbDo6UnVudGltZTo6RXhlY3V0aW9uQ29udGV4dElkPiYmIGV4ZWN1dGlvbkNv
bnRleHRJZCkKIHsKICAgICBpZiAoZXhlY3V0aW9uQ29udGV4dElkKSB7CiAgICAgICAgIGVycm9y
U3RyaW5nID0gImV4ZWN1dGlvbkNvbnRleHRJZCBpcyBub3Qgc3VwcG9ydGVkIGZvciB3b3JrZXJz
IGFzIHRoZXJlIGlzIG9ubHkgb25lIGV4ZWN1dGlvbiBjb250ZXh0Il9zOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2VyUnVudGltZUFnZW50
LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJSdW50aW1l
QWdlbnQuaAppbmRleCA1MzA4ZWI0Mzg4ZDRkMTA1MmVjNzQ1ODUwNDdhMWU4OGU3ZDQzYjRiLi42
Yjk5OGY0ZDE3MzE4NTFmOTliNjdlZTE1YTVkMjAwMTU4N2Y0ZDA2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJSdW50aW1lQWdlbnQuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJSdW50aW1l
QWdlbnQuaApAQCAtMzcsMjEgKzM3LDIwIEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNz
IFdvcmtlckdsb2JhbFNjb3BlOwotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiAKIGNsYXNz
IFdvcmtlclJ1bnRpbWVBZ2VudCBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3BlY3RvclJ1
bnRpbWVBZ2VudCB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoV29ya2VyUnVudGltZUFnZW50
KTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBXb3JrZXJSdW50
aW1lQWdlbnQoV29ya2VyQWdlbnRDb250ZXh0Jik7Ci0gICAgfldvcmtlclJ1bnRpbWVBZ2VudCgp
IG92ZXJyaWRlOworICAgIH5Xb3JrZXJSdW50aW1lQWdlbnQoKTsKIAogcHJpdmF0ZToKLSAgICBJ
bnNwZWN0b3I6OkluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0Rm9yRXZhbChFcnJvclN0cmlu
ZyYsIGNvbnN0IGludCogZXhlY3V0aW9uQ29udGV4dElkKSBvdmVycmlkZTsKKyAgICBJbnNwZWN0
b3I6OkluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0Rm9yRXZhbChJbnNwZWN0b3I6OlByb3Rv
Y29sOjpFcnJvclN0cmluZyYsIE9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6
OkV4ZWN1dGlvbkNvbnRleHRJZD4mJik7CiAKICAgICAvLyBXZSBkb24ndCBuZWVkIHRvIG11dGUg
Y29uc29sZSBmb3Igd29ya2Vycy4KLSAgICB2b2lkIG11dGVDb25zb2xlKCkgb3ZlcnJpZGUgeyB9
Ci0gICAgdm9pZCB1bm11dGVDb25zb2xlKCkgb3ZlcnJpZGUgeyB9CisgICAgdm9pZCBtdXRlQ29u
c29sZSgpIHsgfQorICAgIHZvaWQgdW5tdXRlQ29uc29sZSgpIHsgfQogCiAgICAgUmVmUHRyPElu
c3BlY3Rvcjo6UnVudGltZUJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOwog
ICAgIFdvcmtlckdsb2JhbFNjb3BlJiBtX3dvcmtlckdsb2JhbFNjb3BlOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNVXRpbGl0aWVzLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NETVV0aWxpdGllcy5jcHAK
aW5kZXggNWU4ODVhZDZlNTg2OTA5YzBlZDIxNWJlZTViZThlOGVmN2MyN2FmOC4uNWJlYmNiNDlh
YThlYjlhMmJiMDcxMWVhZTA4MGYzNzdlMjJiOTgzNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNVXRpbGl0aWVzLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1VdGlsaXRpZXMuY3BwCkBAIC00Nywx
MiArNDcsMTIgQEAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyc2VKU09OT2JqZWN0KGNvbnN0IFNo
YXJlZEJ1ZmZlciYgYnVmZmVyKQogCiAgICAgLy8gUGFyc2UgdGhlIGJ1ZmZlciBjb250ZW50cyBh
cyBKU09OLCByZXR1cm5pbmcgdGhlIHJvb3Qgb2JqZWN0IChpZiBhbnkpLgogICAgIFN0cmluZyBq
c29uIHsgYnVmZmVyLmRhdGEoKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHNpemUpIH07Ci0gICAg
UmVmUHRyPEpTT046OlZhbHVlPiB2YWx1ZTsKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBvYmpl
Y3Q7Ci0gICAgaWYgKCFKU09OOjpWYWx1ZTo6cGFyc2VKU09OKGpzb24sIHZhbHVlKSB8fCAhdmFs
dWUtPmFzT2JqZWN0KG9iamVjdCkpCisKKyAgICBhdXRvIHZhbHVlID0gSlNPTjo6VmFsdWU6OnBh
cnNlSlNPTihqc29uKTsKKyAgICBpZiAoIXZhbHVlKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
IAotICAgIHJldHVybiBvYmplY3Q7CisgICAgcmV0dXJuIHZhbHVlLT5hc09iamVjdCgpOwogfQog
CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEv
Y2xlYXJrZXkvQ0RNQ2xlYXJLZXkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlw
dGVkbWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJLZXkuY3BwCmluZGV4IGU2Y2MyMmQ5MGM3YWMzOWI1
NmZkODJhMTZiMDc2NWVjMWUxY2ZhODcuLjVhMTgyZmRmNDUyNjQyYWE4ZWY0NjBiNzc0YWM5ZTdi
NDBjMmVjNTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1l
ZGlhL2NsZWFya2V5L0NETUNsZWFyS2V5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9lbmNyeXB0ZWRtZWRpYS9jbGVhcmtleS9DRE1DbGVhcktleS5jcHAKQEAgLTU1LDIzICs1NSwy
NyBAQCBzdGF0aWMgT3B0aW9uYWw8VmVjdG9yPFJlZlB0cjxLZXlIYW5kbGU+Pj4gcGFyc2VMaWNl
bnNlRm9ybWF0KGNvbnN0IEpTT046Ok9iamVjdAogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OwogCiAgICAgLy8gUmV0cmlldmUgdGhlIGtleXMgYXJyYXkuCi0gICAgUmVmUHRyPEpTT046OkFy
cmF5PiBrZXlzQXJyYXk7Ci0gICAgaWYgKCFpdC0+dmFsdWUtPmFzQXJyYXkoa2V5c0FycmF5KSkK
KyAgICBhdXRvIGtleXNBcnJheSA9IGl0LT52YWx1ZS0+YXNBcnJheSgpOworICAgIGlmICgha2V5
c0FycmF5KQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgVmVjdG9yPFJlZlB0
cjxLZXlIYW5kbGU+PiBkZWNvZGVkS2V5czsKICAgICBib29sIHZhbGlkRm9ybWF0ID0gc3RkOjph
bGxfb2Yoa2V5c0FycmF5LT5iZWdpbigpLCBrZXlzQXJyYXktPmVuZCgpLAogICAgICAgICBbJmRl
Y29kZWRLZXlzXSAoY29uc3QgYXV0byYgdmFsdWUpIHsKLSAgICAgICAgICAgIFJlZlB0cjxKU09O
OjpPYmplY3Q+IGtleU9iamVjdDsKLSAgICAgICAgICAgIGlmICghdmFsdWUtPmFzT2JqZWN0KGtl
eU9iamVjdCkpCisgICAgICAgICAgICBhdXRvIGtleU9iamVjdCA9IHZhbHVlLT5hc09iamVjdCgp
OworICAgICAgICAgICAgaWYgKCFrZXlPYmplY3QpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgICAgICAgICBTdHJpbmcga2V5VHlwZTsKLSAgICAgICAgICAgIGlmICgha2V5
T2JqZWN0LT5nZXRTdHJpbmcoImt0eSIsIGtleVR5cGUpIHx8ICFlcXVhbExldHRlcnNJZ25vcmlu
Z0FTQ0lJQ2FzZShrZXlUeXBlLCAib2N0IikpCisgICAgICAgICAgICBhdXRvIGtleVR5cGUgPSBr
ZXlPYmplY3QtPmdldFN0cmluZygia3R5Iik7CisgICAgICAgICAgICBpZiAoIWtleVR5cGUgfHwg
IWVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGtleVR5cGUsICJvY3QiKSkKICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgICAgIFN0cmluZyBrZXlJRCwga2V5VmFs
dWU7Ci0gICAgICAgICAgICBpZiAoIWtleU9iamVjdC0+Z2V0U3RyaW5nKCJraWQiLCBrZXlJRCkg
fHwgIWtleU9iamVjdC0+Z2V0U3RyaW5nKCJrIiwga2V5VmFsdWUpKQorICAgICAgICAgICAgYXV0
byBrZXlJRCA9IGtleU9iamVjdC0+Z2V0U3RyaW5nKCJraWQiKTsKKyAgICAgICAgICAgIGlmICgh
a2V5SUQpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICBhdXRv
IGtleVZhbHVlID0ga2V5T2JqZWN0LT5nZXRTdHJpbmcoImsiKTsKKyAgICAgICAgICAgIGlmICgh
a2V5VmFsdWUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgICAgICBL
ZXlJRFR5cGUga2V5SUREYXRhOwpAQCAtOTYsOCArMTAwLDggQEAgc3RhdGljIGJvb2wgcGFyc2VM
aWNlbnNlUmVsZWFzZUFja25vd2xlZGdlbWVudEZvcm1hdChjb25zdCBKU09OOjpPYmplY3QmIHJv
b3QpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIFJldHJpZXZlIHRoZSBraWRzIGFy
cmF5LgotICAgIFJlZlB0cjxKU09OOjpBcnJheT4ga2lkc0FycmF5OwotICAgIGlmICghaXQtPnZh
bHVlLT5hc0FycmF5KGtpZHNBcnJheSkpCisgICAgYXV0byBraWRzQXJyYXkgPSBpdC0+dmFsdWUt
PmFzQXJyYXkoKTsKKyAgICBpZiAoIWtpZHNBcnJheSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CiAgICAgLy8gRklYTUU6IFJldHVybiB0aGUga2V5IElEcyBhbmQgdmFsaWRhdGUgdGhlbS4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9D
RE1GYWlyUGxheVN0cmVhbWluZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9hdmZvdW5kYXRpb24vQ0RNRmFpclBsYXlTdHJlYW1pbmcuY3BwCmluZGV4IDhhYzQ4ZWM1ZGM2
OWIzMTQ5NTdiYTQzM2Y5NzEwMWVhMjc3Njk2NDQuLjRmNDJjNDkzY2MzNTcwZGRjNmFmMDhkZTM5
MDVkMGNjODQ5ZDlhNzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2F2Zm91bmRhdGlvbi9DRE1GYWlyUGxheVN0cmVhbWluZy5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0NETUZhaXJQbGF5U3RyZWFtaW5n
LmNwcApAQCAtOTIsMjQgKzkyLDI0IEBAIHN0YXRpYyBWZWN0b3I8UmVmPFNoYXJlZEJ1ZmZlcj4+
IGV4dHJhY3RTaW5mRGF0YShjb25zdCBTaGFyZWRCdWZmZXImIGJ1ZmZlcikKICAgICAgICAgcmV0
dXJuIHsgfTsKICAgICBTdHJpbmcganNvbiB7IGJ1ZmZlci5kYXRhKCksIHN0YXRpY19jYXN0PHVu
c2lnbmVkPihidWZmZXIuc2l6ZSgpKSB9OwogCi0gICAgUmVmUHRyPEpTT046OlZhbHVlPiB2YWx1
ZTsKLSAgICBpZiAoIUpTT046OlZhbHVlOjpwYXJzZUpTT04oanNvbiwgdmFsdWUpKQorICAgIGF1
dG8gdmFsdWUgPSBKU09OOjpWYWx1ZTo6cGFyc2VKU09OKGpzb24pOworICAgIGlmICghdmFsdWUp
CiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBvYmplY3Q7
Ci0gICAgaWYgKCF2YWx1ZS0+YXNPYmplY3Qob2JqZWN0KSkKKyAgICBhdXRvIG9iamVjdCA9IHZh
bHVlLT5hc09iamVjdCgpOworICAgIGlmICghb2JqZWN0KQogICAgICAgICByZXR1cm4geyB9Owog
Ci0gICAgUmVmUHRyPEpTT046OkFycmF5PiBzaW5mQXJyYXk7Ci0gICAgaWYgKCFvYmplY3QtPmdl
dEFycmF5KENETVByaXZhdGVGYWlyUGxheVN0cmVhbWluZzo6c2luZk5hbWUoKSwgc2luZkFycmF5
KSkKKyAgICBhdXRvIHNpbmZBcnJheSA9IG9iamVjdC0+Z2V0QXJyYXkoQ0RNUHJpdmF0ZUZhaXJQ
bGF5U3RyZWFtaW5nOjpzaW5mTmFtZSgpKTsKKyAgICBpZiAoIXNpbmZBcnJheSkKICAgICAgICAg
cmV0dXJuIHsgfTsKIAogICAgIFZlY3RvcjxSZWY8U2hhcmVkQnVmZmVyPj4gc2luZnM7CiAgICAg
c2luZnMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShzaW5mQXJyYXktPmxlbmd0aCgpKTsKIAogICAg
IGZvciAoYXV0byYgdmFsdWUgOiAqc2luZkFycmF5KSB7Ci0gICAgICAgIFN0cmluZyBrZXlJRDsK
LSAgICAgICAgaWYgKCF2YWx1ZS0+YXNTdHJpbmcoa2V5SUQpKQorICAgICAgICBhdXRvIGtleUlE
ID0gdmFsdWUtPmFzU3RyaW5nKCk7CisgICAgICAgIGlmICgha2V5SUQpCiAgICAgICAgICAgICBj
b250aW51ZTsKIAogICAgICAgICBWZWN0b3I8Y2hhcj4gc2luZkRhdGE7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1JbnN0
YW5jZUZhaXJQbGF5U3RyZWFtaW5nQVZGT2JqQy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NETUluc3RhbmNlRmFpclBsYXlTdHJlYW1pbmdB
VkZPYmpDLm1tCmluZGV4IGMwNTE5YThjMjIxOTMwZjVjNjFhMGE4MGU5ZWMzYTFlOTljOGYxZDQu
LjFjNDlmODg3NTNhOTRjOTA3YmRmNmRiMDE5ZjIxOTViODQ3YjQ4M2QgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NETUluc3Rh
bmNlRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NETUluc3RhbmNlRmFpclBsYXlTdHJlYW1p
bmdBVkZPYmpDLm1tCkBAIC0zMTIsMTEgKzMxMiw4IEBAIHN0YXRpYyBSZWZQdHI8SlNPTjo6VmFs
dWU+IHBhcnNlSlNPTlZhbHVlKGNvbnN0IFNoYXJlZEJ1ZmZlciYgYnVmZmVyKQogCiAgICAgLy8g
UGFyc2UgdGhlIGJ1ZmZlciBjb250ZW50cyBhcyBKU09OLCByZXR1cm5pbmcgdGhlIHJvb3Qgb2Jq
ZWN0IChpZiBhbnkpLgogICAgIFN0cmluZyBqc29uIHsgYnVmZmVyLmRhdGEoKSwgc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KHNpemUpIH07Ci0gICAgUmVmUHRyPEpTT046OlZhbHVlPiB2YWx1ZTsKLSAg
ICBpZiAoIUpTT046OlZhbHVlOjpwYXJzZUpTT04oanNvbiwgdmFsdWUpKQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiB2YWx1ZTsKKyAgICByZXR1cm4gSlNPTjo6VmFsdWU6
OnBhcnNlSlNPTihqc29uKTsKIH0KIAogYm9vbCBDRE1JbnN0YW5jZUZhaXJQbGF5U3RyZWFtaW5n
QVZGT2JqQzo6c3VwcG9ydHNQZXJzaXN0YWJsZVN0YXRlKCkKQEAgLTgwNCwxOSArODAxLDI0IEBA
IHZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9uRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDOjp1cGRhdGVM
aWNlbnNlKGNvbnN0IFN0cmluZyYsIExpCiAgICAgICAgIH0pOwogCiAgICAgICAgIGF1dG8gcm9v
dCA9IHBhcnNlSlNPTlZhbHVlKHJlc3BvbnNlRGF0YSk7Ci0gICAgICAgIFJlZlB0cjxKU09OOjpB
cnJheT4gYXJyYXk7Ci0gICAgICAgIGlmICghcm9vdCB8fCAhcm9vdC0+YXNBcnJheShhcnJheSkp
IHsKKyAgICAgICAgaWYgKCFyb290KSB7CiAgICAgICAgICAgICBjYWxsYmFjayhmYWxzZSwgV1RG
OjpudWxsb3B0LCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCwgRmFpbGVkKTsKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIGF1dG8gcGFyc2VSZXNwb25zZSA9IFsm
XShSZWZQdHI8SlNPTjo6VmFsdWU+JiB2YWx1ZSkgLT4gYm9vbCB7Ci0gICAgICAgICAgICBSZWZQ
dHI8SlNPTjo6T2JqZWN0PiBvYmplY3Q7Ci0gICAgICAgICAgICBpZiAoIXZhbHVlLT5hc09iamVj
dChvYmplY3QpKQorICAgICAgICBhdXRvIGFycmF5ID0gcm9vdC0+YXNBcnJheSgpOworICAgICAg
ICBpZiAoIWFycmF5KSB7CisgICAgICAgICAgICBjYWxsYmFjayhmYWxzZSwgV1RGOjpudWxsb3B0
LCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCwgRmFpbGVkKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorCisgICAgICAgIGF1dG8gcGFyc2VSZXNwb25zZSA9IFsmXShSZWY8SlNP
Tjo6VmFsdWU+JiYgdmFsdWUpIC0+IGJvb2wgeworICAgICAgICAgICAgYXV0byBvYmplY3QgPSB2
YWx1ZS0+YXNPYmplY3QoKTsKKyAgICAgICAgICAgIGlmICghb2JqZWN0KQogICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICAgICAgU3RyaW5nIGtleUlEU3RyaW5nOwotICAg
ICAgICAgICAgaWYgKCFvYmplY3QtPmdldFN0cmluZygia2V5SUQiLCBrZXlJRFN0cmluZykpCisg
ICAgICAgICAgICBhdXRvIGtleUlEU3RyaW5nID0gb2JqZWN0LT5nZXRTdHJpbmcoImtleUlEIik7
CisgICAgICAgICAgICBpZiAoIWtleUlEU3RyaW5nKQogICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKIAogICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGtleUlEVmVjdG9yOwpAQCAtODQz
LDE0ICs4NDUsMTQgQEAgdm9pZCBDRE1JbnN0YW5jZVNlc3Npb25GYWlyUGxheVN0cmVhbWluZ0FW
Rk9iakM6OnVwZGF0ZUxpY2Vuc2UoY29uc3QgU3RyaW5nJiwgTGkKICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKICAgICAgICAgICAgIGlmIChoYXNFcnJvcikgewotICAgICAgICAgICAg
ICAgIE5TSW50ZWdlciBlcnJvckNvZGU7Ci0gICAgICAgICAgICAgICAgaWYgKCFlcnJvckZpbmRS
ZXN1bHRzLT52YWx1ZS0+YXNJbnRlZ2VyKGVycm9yQ29kZSkpCisgICAgICAgICAgICAgICAgYXV0
byBlcnJvckNvZGUgPSBlcnJvckZpbmRSZXN1bHRzLT52YWx1ZS0+YXNJbnRlZ2VyKCk7CisgICAg
ICAgICAgICAgICAgaWYgKCFlcnJvckNvZGUpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgICAgICAgICBhdXRvIGVycm9yID0gYWRvcHROUyhbW05TRXJyb3IgYWxs
b2NdIGluaXRXaXRoRG9tYWluOkAib3JnLndlYmtpdC5lbWUiIGNvZGU6ZXJyb3JDb2RlIHVzZXJJ
bmZvOm5pbF0pOworICAgICAgICAgICAgICAgIGF1dG8gZXJyb3IgPSBhZG9wdE5TKFtbTlNFcnJv
ciBhbGxvY10gaW5pdFdpdGhEb21haW46QCJvcmcud2Via2l0LmVtZSIgY29kZToqZXJyb3JDb2Rl
IHVzZXJJbmZvOm5pbF0pOwogICAgICAgICAgICAgICAgIFtyZXF1ZXN0IHByb2Nlc3NDb250ZW50
S2V5UmVzcG9uc2VFcnJvcjplcnJvci5nZXQoKV07CiAgICAgICAgICAgICB9IGVsc2UgaWYgKGhh
c1BheWxvYWQpIHsKLSAgICAgICAgICAgICAgICBTdHJpbmcgcGF5bG9hZFN0cmluZzsKLSAgICAg
ICAgICAgICAgICBpZiAoIXBheWxvYWRGaW5kUmVzdWx0cy0+dmFsdWUtPmFzU3RyaW5nKHBheWxv
YWRTdHJpbmcpKQorICAgICAgICAgICAgICAgIGF1dG8gcGF5bG9hZFN0cmluZyA9IHBheWxvYWRG
aW5kUmVzdWx0cy0+dmFsdWUtPmFzU3RyaW5nKCk7CisgICAgICAgICAgICAgICAgaWYgKCFwYXls
b2FkU3RyaW5nKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAg
ICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHBheWxvYWRWZWN0b3I7CiAgICAgICAgICAgICAgICAgaWYg
KCFiYXNlNjREZWNvZGUocGF5bG9hZFN0cmluZywgcGF5bG9hZFZlY3RvcikpCkBAIC04NjEsNyAr
ODYzLDcgQEAgdm9pZCBDRE1JbnN0YW5jZVNlc3Npb25GYWlyUGxheVN0cmVhbWluZ0FWRk9iakM6
OnVwZGF0ZUxpY2Vuc2UoY29uc3QgU3RyaW5nJiwgTGkKICAgICAgICAgICAgIHJldHVybiB0cnVl
OwogICAgICAgICB9OwogICAgICAgICBmb3IgKGF1dG8gdmFsdWUgOiAqYXJyYXkpIHsKLSAgICAg
ICAgICAgIGlmICghcGFyc2VSZXNwb25zZSh2YWx1ZSkpIHsKKyAgICAgICAgICAgIGlmICghcGFy
c2VSZXNwb25zZShXVEZNb3ZlKHZhbHVlKSkpIHsKICAgICAgICAgICAgICAgICBERUJVR19MT0df
SUZfUE9TU0lCTEUoTE9HSURFTlRJRklFUiwgIidjZW5jJyBpbml0RGF0YSwgRmFpbGVkLCBjb3Vs
ZCBub3QgcGFyc2UgcmVzcG9uc2UiKTsKICAgICAgICAgICAgICAgICBjYWxsYmFjayhmYWxzZSwg
V1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCwgRmFpbGVkKTsKICAgICAg
ICAgICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViRHJpdmVyL0NvbW1hbmRS
ZXN1bHQuY3BwIGIvU291cmNlL1dlYkRyaXZlci9Db21tYW5kUmVzdWx0LmNwcAppbmRleCBhNzIw
NzA5OTA4OTNkYjE1NmQ3ZmQ2ZmUzMDdhNTNmMjBjYjIzNTBhLi43MzRmYjJjM2NjNWNhNGFiZDQw
YTdmMzUwM2FmYmIyYjQ1Yzk2NTMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViRHJpdmVyL0NvbW1h
bmRSZXN1bHQuY3BwCisrKyBiL1NvdXJjZS9XZWJEcml2ZXIvQ29tbWFuZFJlc3VsdC5jcHAKQEAg
LTQ5LDE1ICs0OSwxNiBAQCBDb21tYW5kUmVzdWx0OjpDb21tYW5kUmVzdWx0KFJlZlB0cjxKU09O
OjpWYWx1ZT4mJiByZXN1bHQsIE9wdGlvbmFsPEVycm9yQ29kZT4gZQogICAgIGlmICghcmVzdWx0
KQogICAgICAgICByZXR1cm47CiAKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBlcnJvck9iamVj
dDsKLSAgICBpZiAoIXJlc3VsdC0+YXNPYmplY3QoZXJyb3JPYmplY3QpKQorICAgIGF1dG8gZXJy
b3JPYmplY3QgPSByZXN1bHQtPmFzT2JqZWN0KCk7CisgICAgaWYgKCFlcnJvck9iamVjdCkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgaW50IGVycm9yOwotICAgIGlmICghZXJyb3JPYmplY3QtPmdl
dEludGVnZXIoImNvZGUiLCBlcnJvcikpCisgICAgYXV0byBlcnJvciA9IGVycm9yT2JqZWN0LT5n
ZXRJbnRlZ2VyKCJjb2RlIik7CisgICAgaWYgKCFlcnJvcikKICAgICAgICAgcmV0dXJuOwotICAg
IFN0cmluZyBlcnJvck1lc3NhZ2U7Ci0gICAgaWYgKCFlcnJvck9iamVjdC0+Z2V0U3RyaW5nKCJt
ZXNzYWdlIiwgZXJyb3JNZXNzYWdlKSkKKworICAgIGF1dG8gZXJyb3JNZXNzYWdlID0gZXJyb3JP
YmplY3QtPmdldFN0cmluZygibWVzc2FnZSIpOworICAgIGlmICghZXJyb3JNZXNzYWdlKQogICAg
ICAgICByZXR1cm47CiAKICAgICBzd2l0Y2ggKGVycm9yKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViRHJpdmVyL1Nlc3Npb24uY3BwIGIvU291cmNlL1dlYkRyaXZlci9TZXNzaW9uLmNwcAppbmRl
eCBhNTVmYTQ5MzgwYzQ5NTEzMGZlMzFhOTZjODRlMDg5Yjc2ZDFjYWM4Li5jNjhkOTRjYTA2MGUz
NzlmOGE0M2ZkYzE1YWM0YTMzODM4Zjc2MjRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViRHJpdmVy
L1Nlc3Npb24uY3BwCisrKyBiL1NvdXJjZS9XZWJEcml2ZXIvU2Vzc2lvbi5jcHAKQEAgLTgzLDEx
ICs4MywxMCBAQCBib29sIFNlc3Npb246OmlzQ29ubmVjdGVkKCkgY29uc3QKIAogc3RhdGljIE9w
dGlvbmFsPFN0cmluZz4gZmlyc3RXaW5kb3dIYW5kbGVJblJlc3VsdChKU09OOjpWYWx1ZSYgcmVz
dWx0KQogewotICAgIFJlZlB0cjxKU09OOjpBcnJheT4gaGFuZGxlczsKLSAgICBpZiAocmVzdWx0
LmFzQXJyYXkoaGFuZGxlcykgJiYgaGFuZGxlcy0+bGVuZ3RoKCkpIHsKLSAgICAgICAgYXV0byBo
YW5kbGVWYWx1ZSA9IGhhbmRsZXMtPmdldCgwKTsKLSAgICAgICAgU3RyaW5nIGhhbmRsZTsKLSAg
ICAgICAgaWYgKGhhbmRsZVZhbHVlLT5hc1N0cmluZyhoYW5kbGUpKQorICAgIGF1dG8gaGFuZGxl
cyA9IHJlc3VsdC5hc0FycmF5KCk7CisgICAgaWYgKGhhbmRsZXMgJiYgaGFuZGxlcy0+bGVuZ3Ro
KCkpIHsKKyAgICAgICAgYXV0byBoYW5kbGUgPSBoYW5kbGVzLT5nZXQoMCktPmFzU3RyaW5nKCk7
CisgICAgICAgIGlmICghIWhhbmRsZSkKICAgICAgICAgICAgIHJldHVybiBoYW5kbGU7CiAgICAg
fQogICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CkBAIC0xMjYsNyArMTI1LDcgQEAgdm9pZCBTZXNz
aW9uOjpjbG9zZShGdW5jdGlvbjx2b2lkIChDb21tYW5kUmVzdWx0JiYpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQogCiB2b2lkIFNlc3Npb246OmdldFRpbWVvdXRzKEZ1bmN0aW9uPHZvaWQgKENvbW1h
bmRSZXN1bHQmJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgUmVmUHRyPEpTT046Ok9i
amVjdD4gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgYXV0byBwYXJh
bWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICBpZiAobV9zY3JpcHRUaW1lb3V0
ID09IHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6aW5maW5pdHkoKSkKICAgICAgICAgcGFy
YW1ldGVycy0+c2V0VmFsdWUoInNjcmlwdCJfcywgSlNPTjo6VmFsdWU6Om51bGwoKSk7CiAgICAg
ZWxzZQpAQCAtMTg3LDExICsxODYsMTMgQEAgdm9pZCBTZXNzaW9uOjpjcmVhdGVUb3BMZXZlbEJy
b3dzaW5nQ29udGV4dChGdW5jdGlvbjx2b2lkIChDb21tYW5kUmVzdWx0JiYpPiYmIGMKICAgICAg
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoV1RGTW92ZShyZXNw
b25zZS5yZXNwb25zZU9iamVjdCkpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQot
ICAgICAgICBTdHJpbmcgaGFuZGxlOwotICAgICAgICBpZiAoIXJlc3BvbnNlLnJlc3BvbnNlT2Jq
ZWN0LT5nZXRTdHJpbmcoImhhbmRsZSJfcywgaGFuZGxlKSkgeworCisgICAgICAgIGF1dG8gaGFu
ZGxlID0gcmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdldFN0cmluZygiaGFuZGxlIl9zKTsKKyAg
ICAgICAgaWYgKCFoYW5kbGUpIHsKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1h
bmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQorCiAgICAgICAgIHN3aXRjaFRvVG9wTGV2
ZWxCcm93c2luZ0NvbnRleHQoaGFuZGxlKTsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29t
bWFuZFJlc3VsdDo6c3VjY2VzcygpKTsKICAgICB9KTsKQEAgLTE5OSwxNSArMjAwLDE2IEBAIHZv
aWQgU2Vzc2lvbjo6Y3JlYXRlVG9wTGV2ZWxCcm93c2luZ0NvbnRleHQoRnVuY3Rpb248dm9pZCAo
Q29tbWFuZFJlc3VsdCYmKT4mJiBjCiAKIHZvaWQgU2Vzc2lvbjo6aGFuZGxlVXNlclByb21wdHMo
RnVuY3Rpb248dm9pZCAoQ29tbWFuZFJlc3VsdCYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsK
LSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVh
dGUoKTsKKyAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAg
IHBhcmFtZXRlcnMtPnNldFN0cmluZygiYnJvd3NpbmdDb250ZXh0SGFuZGxlIl9zLCBtX3RvcGxl
dmVsQnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwogICAgIG1faG9zdC0+c2VuZENvbW1hbmRUb0Jh
Y2tlbmQoImlzU2hvd2luZ0phdmFTY3JpcHREaWFsb2ciX3MsIFdURk1vdmUocGFyYW1ldGVycyks
IFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVy
ID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKFNlc3Npb25Ib3N0OjpDb21tYW5kUmVzcG9u
c2UmJiByZXNwb25zZSkgbXV0YWJsZSB7CiAgICAgICAgIGlmIChyZXNwb25zZS5pc0Vycm9yIHx8
ICFyZXNwb25zZS5yZXNwb25zZU9iamVjdCkgewogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChXVEZNb3ZlKHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0KSkp
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIGJvb2wgaXNTaG93aW5n
SmF2YVNjcmlwdERpYWxvZzsKLSAgICAgICAgaWYgKCFyZXNwb25zZS5yZXNwb25zZU9iamVjdC0+
Z2V0Qm9vbGVhbigicmVzdWx0IiwgaXNTaG93aW5nSmF2YVNjcmlwdERpYWxvZykpIHsKKworICAg
ICAgICBhdXRvIGlzU2hvd2luZ0phdmFTY3JpcHREaWFsb2cgPSByZXNwb25zZS5yZXNwb25zZU9i
amVjdC0+Z2V0Qm9vbGVhbigicmVzdWx0Iik7CisgICAgICAgIGlmICghaXNTaG93aW5nSmF2YVNj
cmlwdERpYWxvZykgewogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3Vs
dDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikpOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC0yNzMsMTMgKzI3NSwxMyBAQCB2b2lkIFNlc3Np
b246OnJlcG9ydFVuZXhwZWN0ZWRBbGVydE9wZW4oRnVuY3Rpb248dm9pZCAoQ29tbWFuZFJlc3Vs
dCYmKT4mJiBjb21wbAogICAgIGdldEFsZXJ0VGV4dChbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oQ29tbWFuZFJlc3VsdCYmIHJlc3VsdCkgewogICAgICAg
ICBPcHRpb25hbDxTdHJpbmc+IGFsZXJ0VGV4dDsKICAgICAgICAgaWYgKCFyZXN1bHQuaXNFcnJv
cigpKSB7Ci0gICAgICAgICAgICBTdHJpbmcgdmFsdWVTdHJpbmc7Ci0gICAgICAgICAgICBpZiAo
cmVzdWx0LnJlc3VsdCgpLT5hc1N0cmluZyh2YWx1ZVN0cmluZykpCisgICAgICAgICAgICBhdXRv
IHZhbHVlU3RyaW5nID0gcmVzdWx0LnJlc3VsdCgpLT5hc1N0cmluZygpOworICAgICAgICAgICAg
aWYgKCEhdmFsdWVTdHJpbmcpCiAgICAgICAgICAgICAgICAgYWxlcnRUZXh0ID0gdmFsdWVTdHJp
bmc7CiAgICAgICAgIH0KICAgICAgICAgYXV0byBlcnJvclJlc3VsdCA9IENvbW1hbmRSZXN1bHQ6
OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmV4cGVjdGVkQWxlcnRPcGVuKTsKICAg
ICAgICAgaWYgKGFsZXJ0VGV4dCkgewotICAgICAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4g
YWRkaXRvbmFsRGF0YSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgICAgICBhdXRv
IGFkZGl0b25hbERhdGEgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICAgICAgYWRk
aXRvbmFsRGF0YS0+c2V0U3RyaW5nKCJ0ZXh0Il9zLCBhbGVydFRleHQudmFsdWUoKSk7CiAgICAg
ICAgICAgICBlcnJvclJlc3VsdC5zZXRBZGRpdGlvbmFsRXJyb3JEYXRhKFdURk1vdmUoYWRkaXRv
bmFsRGF0YSkpOwogICAgICAgICB9CkBAIC0zMDAsNyArMzAyLDcgQEAgdm9pZCBTZXNzaW9uOjpn
byhjb25zdCBTdHJpbmcmIHVybCwgRnVuY3Rpb248dm9pZCAoQ29tbWFuZFJlc3VsdCYmKT4mJiBj
b21wbGV0aW8KICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIFJlZlB0
cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAg
ICAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICBw
YXJhbWV0ZXJzLT5zZXRTdHJpbmcoImhhbmRsZSJfcywgbV90b3BsZXZlbEJyb3dzaW5nQ29udGV4
dC52YWx1ZSgpKTsKICAgICAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJ1cmwiX3MsIHVybCk7
CiAgICAgICAgIHBhcmFtZXRlcnMtPnNldERvdWJsZSgicGFnZUxvYWRUaW1lb3V0Il9zLCBtX3Bh
Z2VMb2FkVGltZW91dCk7CkBAIC0zMzAsMjMgKzMzMiwyNiBAQCB2b2lkIFNlc3Npb246OmdldEN1
cnJlbnRVUkwoRnVuY3Rpb248dm9pZCAoQ29tbWFuZFJlc3VsdCYmKT4mJiBjb21wbGV0aW9uSGFu
ZGxlcgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgUmVmUHRyPEpT
T046Ok9iamVjdD4gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAg
IGF1dG8gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgIHBhcmFt
ZXRlcnMtPnNldFN0cmluZygiaGFuZGxlIl9zLCBtX3RvcGxldmVsQnJvd3NpbmdDb250ZXh0LnZh
bHVlKCkpOwogICAgICAgICBtX2hvc3QtPnNlbmRDb21tYW5kVG9CYWNrZW5kKCJnZXRCcm93c2lu
Z0NvbnRleHQiX3MsIFdURk1vdmUocGFyYW1ldGVycyksIFtwcm90ZWN0ZWRUaGlzLCBjb21wbGV0
aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXShTZXNzaW9uSG9zdDo6Q29t
bWFuZFJlc3BvbnNlJiYgcmVzcG9uc2UpIHsKICAgICAgICAgICAgIGlmIChyZXNwb25zZS5pc0Vy
cm9yIHx8ICFyZXNwb25zZS5yZXNwb25zZU9iamVjdCkgewogICAgICAgICAgICAgICAgIGNvbXBs
ZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoV1RGTW92ZShyZXNwb25zZS5yZXNwb25z
ZU9iamVjdCkpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBicm93c2luZ0NvbnRleHQ7Ci0gICAgICAgICAg
ICBpZiAoIXJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRPYmplY3QoImNvbnRleHQiLCBicm93
c2luZ0NvbnRleHQpKSB7CisKKyAgICAgICAgICAgIGF1dG8gYnJvd3NpbmdDb250ZXh0ID0gcmVz
cG9uc2UucmVzcG9uc2VPYmplY3QtPmdldE9iamVjdCgiY29udGV4dCIpOworICAgICAgICAgICAg
aWYgKCFicm93c2luZ0NvbnRleHQpIHsKICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVy
cm9yKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQotICAgICAgICAg
ICAgU3RyaW5nIHVybDsKLSAgICAgICAgICAgIGlmICghYnJvd3NpbmdDb250ZXh0LT5nZXRTdHJp
bmcoInVybCIsIHVybCkpIHsKKworICAgICAgICAgICAgYXV0byB1cmwgPSBicm93c2luZ0NvbnRl
eHQtPmdldFN0cmluZygidXJsIik7CisgICAgICAgICAgICBpZiAoIXVybCkgewogICAgICAgICAg
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3Vs
dDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgICAgICB9CisKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1
bHQ6OnN1Y2Nlc3MoSlNPTjo6VmFsdWU6OmNyZWF0ZSh1cmwpKSk7CiAgICAgICAgIH0pOwogICAg
IH0pOwpAQCAtMzY0LDcgKzM2OSw3IEBAIHZvaWQgU2Vzc2lvbjo6YmFjayhGdW5jdGlvbjx2b2lk
IChDb21tYW5kUmVzdWx0JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogICAgICAgICAgICAgY29t
cGxldGlvbkhhbmRsZXIoV1RGTW92ZShyZXN1bHQpKTsKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQotICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzID0gSlNPTjo6
T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgYXV0byBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0
OjpjcmVhdGUoKTsKICAgICAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJoYW5kbGUiX3MsIG1f
dG9wbGV2ZWxCcm93c2luZ0NvbnRleHQudmFsdWUoKSk7CiAgICAgICAgIHBhcmFtZXRlcnMtPnNl
dERvdWJsZSgicGFnZUxvYWRUaW1lb3V0Il9zLCBtX3BhZ2VMb2FkVGltZW91dCk7CiAgICAgICAg
IGlmIChhdXRvIHBhZ2VMb2FkU3RyYXRlZ3kgPSBwYWdlTG9hZFN0cmF0ZWd5U3RyaW5nKCkpCkBA
IC0zOTIsNyArMzk3LDcgQEAgdm9pZCBTZXNzaW9uOjpmb3J3YXJkKEZ1bmN0aW9uPHZvaWQgKENv
bW1hbmRSZXN1bHQmJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiAgICAgICAgICAgICBjb21wbGV0
aW9uSGFuZGxlcihXVEZNb3ZlKHJlc3VsdCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9Ci0gICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnMgPSBKU09OOjpPYmpl
Y3Q6OmNyZWF0ZSgpOworICAgICAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNy
ZWF0ZSgpOwogICAgICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoImhhbmRsZSJfcywgbV90b3Bs
ZXZlbEJyb3dzaW5nQ29udGV4dC52YWx1ZSgpKTsKICAgICAgICAgcGFyYW1ldGVycy0+c2V0RG91
YmxlKCJwYWdlTG9hZFRpbWVvdXQiX3MsIG1fcGFnZUxvYWRUaW1lb3V0KTsKICAgICAgICAgaWYg
KGF1dG8gcGFnZUxvYWRTdHJhdGVneSA9IHBhZ2VMb2FkU3RyYXRlZ3lTdHJpbmcoKSkKQEAgLTQy
MCw3ICs0MjUsNyBAQCB2b2lkIFNlc3Npb246OnJlZnJlc2goRnVuY3Rpb248dm9pZCAoQ29tbWFu
ZFJlc3VsdCYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKICAgICAgICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKFdURk1vdmUocmVzdWx0KSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
LSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6
Y3JlYXRlKCk7CisgICAgICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRl
KCk7CiAgICAgICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiaGFuZGxlIl9zLCBtX3RvcGxldmVs
QnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwogICAgICAgICBwYXJhbWV0ZXJzLT5zZXREb3VibGUo
InBhZ2VMb2FkVGltZW91dCJfcywgbV9wYWdlTG9hZFRpbWVvdXQpOwogICAgICAgICBpZiAoYXV0
byBwYWdlTG9hZFN0cmF0ZWd5ID0gcGFnZUxvYWRTdHJhdGVneVN0cmluZygpKQpAQCAtNDQ4LDcg
KzQ1Myw3IEBAIHZvaWQgU2Vzc2lvbjo6Z2V0VGl0bGUoRnVuY3Rpb248dm9pZCAoQ29tbWFuZFJl
c3VsdCYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5k
bGVyKFdURk1vdmUocmVzdWx0KSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAg
ICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3Jl
YXRlKCk7CisgICAgICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7
CiAgICAgICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiYnJvd3NpbmdDb250ZXh0SGFuZGxlIl9z
LCBtX3RvcGxldmVsQnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwogICAgICAgICBwYXJhbWV0ZXJz
LT5zZXRTdHJpbmcoImZ1bmN0aW9uIl9zLCAiZnVuY3Rpb24oKSB7IHJldHVybiBkb2N1bWVudC50
aXRsZTsgfSJfcyk7CiAgICAgICAgIHBhcmFtZXRlcnMtPnNldEFycmF5KCJhcmd1bWVudHMiX3Ms
IEpTT046OkFycmF5OjpjcmVhdGUoKSk7CkBAIC00NTcsMTYgKzQ2MiwxOSBAQCB2b2lkIFNlc3Np
b246OmdldFRpdGxlKEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSZXN1bHQmJik+JiYgY29tcGxldGlv
bkhhbmRsZXIpCiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3Vs
dDo6ZmFpbChXVEZNb3ZlKHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0KSkpOwogICAgICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFN0cmluZyB2YWx1ZVN0cmlu
ZzsKLSAgICAgICAgICAgIGlmICghcmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdldFN0cmluZygi
cmVzdWx0Il9zLCB2YWx1ZVN0cmluZykpIHsKKworICAgICAgICAgICAgYXV0byB2YWx1ZVN0cmlu
ZyA9IHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRTdHJpbmcoInJlc3VsdCJfcyk7CisgICAg
ICAgICAgICBpZiAoIXZhbHVlU3RyaW5nKSB7CiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhh
bmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OlVua25v
d25FcnJvcikpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gcmVzdWx0VmFsdWU7Ci0gICAgICAgICAgICBpZiAo
IUpTT046OlZhbHVlOjpwYXJzZUpTT04odmFsdWVTdHJpbmcsIHJlc3VsdFZhbHVlKSkgeworCisg
ICAgICAgICAgICBhdXRvIHJlc3VsdFZhbHVlID0gSlNPTjo6VmFsdWU6OnBhcnNlSlNPTih2YWx1
ZVN0cmluZyk7CisgICAgICAgICAgICBpZiAoIXJlc3VsdFZhbHVlKSB7CiAgICAgICAgICAgICAg
ICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpF
cnJvckNvZGU6OlVua25vd25FcnJvcikpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgICAgIH0KKwogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6
c3VjY2VzcyhXVEZNb3ZlKHJlc3VsdFZhbHVlKSkpOwogICAgICAgICB9KTsKICAgICB9KTsKQEAg
LTQ3OSwzMCArNDg3LDMzIEBAIHZvaWQgU2Vzc2lvbjo6Z2V0V2luZG93SGFuZGxlKEZ1bmN0aW9u
PHZvaWQgKENvbW1hbmRSZXN1bHQmJik+JiYgY29tcGxldGlvbkhhbmRsCiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzID0gSlNPTjo6
T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNy
ZWF0ZSgpOwogICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiaGFuZGxlIl9zLCBtX3RvcGxldmVs
QnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwogICAgIG1faG9zdC0+c2VuZENvbW1hbmRUb0JhY2tl
bmQoImdldEJyb3dzaW5nQ29udGV4dCJfcywgV1RGTW92ZShwYXJhbWV0ZXJzKSwgW3Byb3RlY3Rl
ZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKV0oU2Vzc2lvbkhvc3Q6OkNvbW1hbmRSZXNwb25zZSYmIHJlc3BvbnNlKSB7
CiAgICAgICAgIGlmIChyZXNwb25zZS5pc0Vycm9yIHx8ICFyZXNwb25zZS5yZXNwb25zZU9iamVj
dCkgewogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChX
VEZNb3ZlKHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0KSkpOwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9Ci0gICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IGJyb3dzaW5nQ29udGV4dDsK
LSAgICAgICAgaWYgKCFyZXNwb25zZS5yZXNwb25zZU9iamVjdC0+Z2V0T2JqZWN0KCJjb250ZXh0
Il9zLCBicm93c2luZ0NvbnRleHQpKSB7CisKKyAgICAgICAgYXV0byBicm93c2luZ0NvbnRleHQg
PSByZXNwb25zZS5yZXNwb25zZU9iamVjdC0+Z2V0T2JqZWN0KCJjb250ZXh0Il9zKTsKKyAgICAg
ICAgaWYgKCFicm93c2luZ0NvbnRleHQpIHsKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVy
KENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtub3duRXJy
b3IpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBTdHJpbmcgaGFu
ZGxlOwotICAgICAgICBpZiAoIWJyb3dzaW5nQ29udGV4dC0+Z2V0U3RyaW5nKCJoYW5kbGUiX3Ms
IGhhbmRsZSkpIHsKKworICAgICAgICBhdXRvIGhhbmRsZSA9IGJyb3dzaW5nQ29udGV4dC0+Z2V0
U3RyaW5nKCJoYW5kbGUiX3MpOworICAgICAgICBpZiAoIWhhbmRsZSkgewogICAgICAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJv
ckNvZGU6OlVua25vd25FcnJvcikpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CisK
ICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6c3VjY2VzcyhKU09OOjpW
YWx1ZTo6Y3JlYXRlKGhhbmRsZSkpKTsKICAgICB9KTsKIH0KIAogdm9pZCBTZXNzaW9uOjpjbG9z
ZVRvcExldmVsQnJvd3NpbmdDb250ZXh0KGNvbnN0IFN0cmluZyYgdG9wbGV2ZWxCcm93c2luZ0Nv
bnRleHQsIEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSZXN1bHQmJik+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCiB7Ci0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVycyA9IEpTT046Ok9iamVj
dDo6Y3JlYXRlKCk7CisgICAgYXV0byBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUo
KTsKICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoImhhbmRsZSJfcywgdG9wbGV2ZWxCcm93c2lu
Z0NvbnRleHQpOwogICAgIG1faG9zdC0+c2VuZENvbW1hbmRUb0JhY2tlbmQoImNsb3NlQnJvd3Np
bmdDb250ZXh0Il9zLCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9
IG1ha2VSZWYoKnRoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpXShTZXNzaW9uSG9zdDo6Q29tbWFuZFJlc3BvbnNlJiYgcmVzcG9uc2UpIG11dGFibGUg
ewogICAgICAgICBpZiAoIW1faG9zdC0+aXNDb25uZWN0ZWQoKSkgewpAQCAtNTQ1LDcgKzU1Niw3
IEBAIHZvaWQgU2Vzc2lvbjo6Y2xvc2VXaW5kb3coRnVuY3Rpb248dm9pZCAoQ29tbWFuZFJlc3Vs
dCYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIAogdm9pZCBTZXNzaW9uOjpzd2l0Y2hUb1dpbmRv
dyhjb25zdCBTdHJpbmcmIHdpbmRvd0hhbmRsZSwgRnVuY3Rpb248dm9pZCAoQ29tbWFuZFJlc3Vs
dCYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBw
YXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBhdXRvIHBhcmFtZXRlcnMg
PSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiYnJv
d3NpbmdDb250ZXh0SGFuZGxlIl9zLCB3aW5kb3dIYW5kbGUpOwogICAgIG1faG9zdC0+c2VuZENv
bW1hbmRUb0JhY2tlbmQoInN3aXRjaFRvQnJvd3NpbmdDb250ZXh0Il9zLCBXVEZNb3ZlKHBhcmFt
ZXRlcnMpLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCB3aW5kb3dIYW5k
bGUsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKFNlc3Np
b25Ib3N0OjpDb21tYW5kUmVzcG9uc2UmJiByZXNwb25zZSkgewogICAgICAgICBpZiAocmVzcG9u
c2UuaXNFcnJvcikgewpAQCAtNTY0LDIyICs1NzUsMjMgQEAgdm9pZCBTZXNzaW9uOjpnZXRXaW5k
b3dIYW5kbGVzKEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSZXN1bHQmJik+JiYgY29tcGxldGlvbkhh
bmQKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoV1RG
TW92ZShyZXNwb25zZS5yZXNwb25zZU9iamVjdCkpKTsKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQotICAgICAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IGJyb3dzaW5nQ29udGV4dEFycmF5
OwotICAgICAgICBpZiAoIXJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRBcnJheSgiY29udGV4
dHMiX3MsIGJyb3dzaW5nQ29udGV4dEFycmF5KSkgeworCisgICAgICAgIGF1dG8gYnJvd3NpbmdD
b250ZXh0QXJyYXkgPSByZXNwb25zZS5yZXNwb25zZU9iamVjdC0+Z2V0QXJyYXkoImNvbnRleHRz
Il9zKTsKKyAgICAgICAgaWYgKCFicm93c2luZ0NvbnRleHRBcnJheSkgewogICAgICAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJv
ckNvZGU6OlVua25vd25FcnJvcikpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0g
ICAgICAgIFJlZlB0cjxKU09OOjpBcnJheT4gd2luZG93SGFuZGxlcyA9IEpTT046OkFycmF5Ojpj
cmVhdGUoKTsKKworICAgICAgICBhdXRvIHdpbmRvd0hhbmRsZXMgPSBKU09OOjpBcnJheTo6Y3Jl
YXRlKCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBicm93c2luZ0NvbnRleHRB
cnJheS0+bGVuZ3RoKCk7ICsraSkgewotICAgICAgICAgICAgUmVmUHRyPEpTT046OlZhbHVlPiBi
cm93c2luZ0NvbnRleHRWYWx1ZSA9IGJyb3dzaW5nQ29udGV4dEFycmF5LT5nZXQoaSk7Ci0gICAg
ICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBicm93c2luZ0NvbnRleHQ7Ci0gICAgICAgICAg
ICBpZiAoIWJyb3dzaW5nQ29udGV4dFZhbHVlLT5hc09iamVjdChicm93c2luZ0NvbnRleHQpKSB7
CisgICAgICAgICAgICBhdXRvIGJyb3dzaW5nQ29udGV4dCA9IGJyb3dzaW5nQ29udGV4dEFycmF5
LT5nZXQoaSktPmFzT2JqZWN0KCk7CisgICAgICAgICAgICBpZiAoIWJyb3dzaW5nQ29udGV4dCkg
ewogICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwo
Q29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKICAgICAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIFN0cmluZyBoYW5kbGU7Ci0g
ICAgICAgICAgICBpZiAoIWJyb3dzaW5nQ29udGV4dC0+Z2V0U3RyaW5nKCJoYW5kbGUiX3MsIGhh
bmRsZSkpIHsKKyAgICAgICAgICAgIGF1dG8gaGFuZGxlID0gYnJvd3NpbmdDb250ZXh0LT5nZXRT
dHJpbmcoImhhbmRsZSJfcyk7CisgICAgICAgICAgICBpZiAoIWhhbmRsZSkgewogICAgICAgICAg
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3Vs
dDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgICAgICB9CkBAIC02MTMsMTcgKzYyNSwyMCBAQCB2b2lkIFNlc3Npb246Om5ld1dpbmRv
dyhPcHRpb25hbDxTdHJpbmc+IHR5cGVIaW50LCBGdW5jdGlvbjx2b2lkIChDb21tYW5kUmVzdWx0
JgogICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwo
V1RGTW92ZShyZXNwb25zZS5yZXNwb25zZU9iamVjdCkpKTsKICAgICAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBTdHJpbmcgaGFuZGxlOwotICAgICAgICAg
ICAgaWYgKCFyZXNwb25zZS5yZXNwb25zZU9iamVjdC0+Z2V0U3RyaW5nKCJoYW5kbGUiX3MsIGhh
bmRsZSkpIHsKKworICAgICAgICAgICAgYXV0byBoYW5kbGUgPSByZXNwb25zZS5yZXNwb25zZU9i
amVjdC0+Z2V0U3RyaW5nKCJoYW5kbGUiX3MpOworICAgICAgICAgICAgaWYgKCFoYW5kbGUpIHsK
ICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENv
bW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVycm9yKSk7CiAgICAgICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgU3RyaW5nIHByZXNlbnRhdGlvbjsK
LSAgICAgICAgICAgIGlmICghcmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdldFN0cmluZygicHJl
c2VudGF0aW9uIl9zLCBwcmVzZW50YXRpb24pKSB7CisKKyAgICAgICAgICAgIGF1dG8gcHJlc2Vu
dGF0aW9uID0gcmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdldFN0cmluZygicHJlc2VudGF0aW9u
Il9zKTsKKyAgICAgICAgICAgIGlmICghcHJlc2VudGF0aW9uKSB7CiAgICAgICAgICAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJv
ckNvZGU6OlVua25vd25FcnJvcikpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9i
amVjdDo6Y3JlYXRlKCk7CisKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gSlNPTjo6T2JqZWN0
OjpjcmVhdGUoKTsKICAgICAgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJoYW5kbGUiX3MsIGhh
bmRsZSk7CiAgICAgICAgICAgICByZXN1bHQtPnNldFN0cmluZygidHlwZSJfcywgcHJlc2VudGF0
aW9uID09ICJXaW5kb3ciX3MgPyAid2luZG93Il9zIDogInRhYiJfcyk7CiAgICAgICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpzdWNjZXNzKFdURk1vdmUocmVzdWx0KSkp
OwpAQCAtNjQ5LDE1ICs2NjQsMTQgQEAgdm9pZCBTZXNzaW9uOjpzd2l0Y2hUb0ZyYW1lKFJlZlB0
cjxKU09OOjpWYWx1ZT4mJiBmcmFtZUlELCBGdW5jdGlvbjx2b2lkIChDb21tYW4KICAgICAgICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUocmVzdWx0KSk7CiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KLSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVycyA9
IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTT046
Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiYnJvd3Np
bmdDb250ZXh0SGFuZGxlIl9zLCBtX3RvcGxldmVsQnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwog
ICAgICAgICBpZiAobV9jdXJyZW50QnJvd3NpbmdDb250ZXh0KQogICAgICAgICAgICAgcGFyYW1l
dGVycy0+c2V0U3RyaW5nKCJmcmFtZUhhbmRsZSJfcywgbV9jdXJyZW50QnJvd3NpbmdDb250ZXh0
LnZhbHVlKCkpOwogCi0gICAgICAgIGludCBmcmFtZUluZGV4OwotICAgICAgICBpZiAoZnJhbWVJ
RC0+YXNJbnRlZ2VyKGZyYW1lSW5kZXgpKSB7CisgICAgICAgIGlmIChhdXRvIGZyYW1lSW5kZXgg
PSBmcmFtZUlELT5hc0ludGVnZXIoKSkgewogICAgICAgICAgICAgQVNTRVJUKGZyYW1lSW5kZXgg
Pj0gMCAmJiBmcmFtZUluZGV4IDwgc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZCBzaG9ydD46
Om1heCgpKTsKLSAgICAgICAgICAgIHBhcmFtZXRlcnMtPnNldEludGVnZXIoIm9yZGluYWwiX3Ms
IGZyYW1lSW5kZXgpOworICAgICAgICAgICAgcGFyYW1ldGVycy0+c2V0SW50ZWdlcigib3JkaW5h
bCJfcywgKmZyYW1lSW5kZXgpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgU3RyaW5n
IGZyYW1lRWxlbWVudElEID0gZXh0cmFjdEVsZW1lbnRJRCgqZnJhbWVJRCk7CiAgICAgICAgICAg
ICBBU1NFUlQoIWZyYW1lRWxlbWVudElELmlzRW1wdHkoKSk7CkBAIC02NjksMTEgKzY4MywxMyBA
QCB2b2lkIFNlc3Npb246OnN3aXRjaFRvRnJhbWUoUmVmUHRyPEpTT046OlZhbHVlPiYmIGZyYW1l
SUQsIEZ1bmN0aW9uPHZvaWQgKENvbW1hbgogICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5k
bGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoV1RGTW92ZShyZXNwb25zZS5yZXNwb25zZU9iamVjdCkp
KTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBT
dHJpbmcgZnJhbWVIYW5kbGU7Ci0gICAgICAgICAgICBpZiAoIXJlc3BvbnNlLnJlc3BvbnNlT2Jq
ZWN0LT5nZXRTdHJpbmcoInJlc3VsdCJfcywgZnJhbWVIYW5kbGUpKSB7CisKKyAgICAgICAgICAg
IGF1dG8gZnJhbWVIYW5kbGUgPSByZXNwb25zZS5yZXNwb25zZU9iamVjdC0+Z2V0U3RyaW5nKCJy
ZXN1bHQiX3MpOworICAgICAgICAgICAgaWYgKCFmcmFtZUhhbmRsZSkgewogICAgICAgICAgICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6
RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgICAgICB9CisKICAgICAgICAgICAgIHN3aXRjaFRvQnJvd3NpbmdDb250ZXh0KGZyYW1lSGFu
ZGxlKTsKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OnN1Y2Nl
c3MoKSk7CiAgICAgICAgIH0pOwpAQCAtNjk3LDcgKzcxMyw3IEBAIHZvaWQgU2Vzc2lvbjo6c3dp
dGNoVG9QYXJlbnRGcmFtZShGdW5jdGlvbjx2b2lkIChDb21tYW5kUmVzdWx0JiYpPiYmIGNvbXBs
ZXRpb25ICiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKHJlc3VsdCkpOwog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIFJlZlB0cjxKU09OOjpPYmpl
Y3Q+IHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBhdXRvIHBh
cmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICBwYXJhbWV0ZXJzLT5z
ZXRTdHJpbmcoImJyb3dzaW5nQ29udGV4dEhhbmRsZSJfcywgbV90b3BsZXZlbEJyb3dzaW5nQ29u
dGV4dC52YWx1ZSgpKTsKICAgICAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJmcmFtZUhhbmRs
ZSJfcywgbV9jdXJyZW50QnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwogICAgICAgICBtX2hvc3Qt
PnNlbmRDb21tYW5kVG9CYWNrZW5kKCJyZXNvbHZlUGFyZW50RnJhbWVIYW5kbGUiX3MsIFdURk1v
dmUocGFyYW1ldGVycyksIFt0aGlzLCBwcm90ZWN0ZWRUaGlzLCBjb21wbGV0aW9uSGFuZGxlciA9
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXShTZXNzaW9uSG9zdDo6Q29tbWFuZFJlc3BvbnNl
JiYgcmVzcG9uc2UpIHsKQEAgLTcwNSwxMSArNzIxLDEzIEBAIHZvaWQgU2Vzc2lvbjo6c3dpdGNo
VG9QYXJlbnRGcmFtZShGdW5jdGlvbjx2b2lkIChDb21tYW5kUmVzdWx0JiYpPiYmIGNvbXBsZXRp
b25ICiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFp
bChXVEZNb3ZlKHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0KSkpOwogICAgICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFN0cmluZyBmcmFtZUhhbmRsZTsKLSAg
ICAgICAgICAgIGlmICghcmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdldFN0cmluZygicmVzdWx0
Il9zLCBmcmFtZUhhbmRsZSkpIHsKKworICAgICAgICAgICAgYXV0byBmcmFtZUhhbmRsZSA9IHJl
c3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRTdHJpbmcoInJlc3VsdCJfcyk7CisgICAgICAgICAg
ICBpZiAoIWZyYW1lSGFuZGxlKSB7CiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIo
Q29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OlVua25vd25FcnJv
cikpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KKwogICAgICAgICAg
ICAgc3dpdGNoVG9Ccm93c2luZ0NvbnRleHQoZnJhbWVIYW5kbGUpOwogICAgICAgICAgICAgY29t
cGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6c3VjY2VzcygpKTsKICAgICAgICAgfSk7CkBA
IC03MTgsMzkgKzczNiw2MSBAQCB2b2lkIFNlc3Npb246OnN3aXRjaFRvUGFyZW50RnJhbWUoRnVu
Y3Rpb248dm9pZCAoQ29tbWFuZFJlc3VsdCYmKT4mJiBjb21wbGV0aW9uSAogCiB2b2lkIFNlc3Np
b246OmdldFRvcGxldmVsQnJvd3NpbmdDb250ZXh0UmVjdChGdW5jdGlvbjx2b2lkIChDb21tYW5k
UmVzdWx0JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIFJlZlB0cjxKU09OOjpPYmpl
Y3Q+IHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGF1dG8gcGFyYW1l
dGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5n
KCJoYW5kbGUiX3MsIG1fdG9wbGV2ZWxCcm93c2luZ0NvbnRleHQudmFsdWUoKSk7CiAgICAgbV9o
b3N0LT5zZW5kQ29tbWFuZFRvQmFja2VuZCgiZ2V0QnJvd3NpbmdDb250ZXh0Il9zLCBXVEZNb3Zl
KHBhcmFtZXRlcnMpLCBbcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjb21wbGV0aW9u
SGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXShTZXNzaW9uSG9zdDo6Q29tbWFu
ZFJlc3BvbnNlJiYgcmVzcG9uc2UpIHsKICAgICAgICAgaWYgKHJlc3BvbnNlLmlzRXJyb3IgfHwg
IXJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0KSB7CiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cihDb21tYW5kUmVzdWx0OjpmYWlsKFdURk1vdmUocmVzcG9uc2UucmVzcG9uc2VPYmplY3QpKSk7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgUmVmUHRyPEpTT046Ok9i
amVjdD4gYnJvd3NpbmdDb250ZXh0OwotICAgICAgICBpZiAoIXJlc3BvbnNlLnJlc3BvbnNlT2Jq
ZWN0LT5nZXRPYmplY3QoImNvbnRleHQiX3MsIGJyb3dzaW5nQ29udGV4dCkpIHsKKworICAgICAg
ICBhdXRvIGJyb3dzaW5nQ29udGV4dCA9IHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRPYmpl
Y3QoImNvbnRleHQiX3MpOworICAgICAgICBpZiAoIWJyb3dzaW5nQ29udGV4dCkgewogICAgICAg
ICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0
OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9Ci0gICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHdpbmRvd09yaWdpbjsKLSAgICAgICAg
ZG91YmxlIHggPSAwLCB5ID0gMDsKLSAgICAgICAgaWYgKCFicm93c2luZ0NvbnRleHQtPmdldE9i
amVjdCgid2luZG93T3JpZ2luIl9zLCB3aW5kb3dPcmlnaW4pCi0gICAgICAgICAgICB8fCAhd2lu
ZG93T3JpZ2luLT5nZXREb3VibGUoIngiX3MsIHgpCi0gICAgICAgICAgICB8fCAhd2luZG93T3Jp
Z2luLT5nZXREb3VibGUoInkiX3MsIHkpKSB7CisKKyAgICAgICAgYXV0byB3aW5kb3dPcmlnaW4g
PSBicm93c2luZ0NvbnRleHQtPmdldE9iamVjdCgid2luZG93T3JpZ2luIl9zKTsKKyAgICAgICAg
aWYgKCF3aW5kb3dPcmlnaW4pIHsKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1h
bmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiB3aW5kb3dTaXplOwotICAgICAgICBkb3VibGUgd2lkdGggPSAwLCBoZWlnaHQgPSAwOwot
ICAgICAgICBpZiAoIWJyb3dzaW5nQ29udGV4dC0+Z2V0T2JqZWN0KCJ3aW5kb3dTaXplIl9zLCB3
aW5kb3dTaXplKQotICAgICAgICAgICAgfHwgIXdpbmRvd1NpemUtPmdldERvdWJsZSgid2lkdGgi
X3MsIHdpZHRoKQotICAgICAgICAgICAgfHwgIXdpbmRvd1NpemUtPmdldERvdWJsZSgiaGVpZ2h0
Il9zLCBoZWlnaHQpKSB7CisKKyAgICAgICAgYXV0byB4ID0gd2luZG93T3JpZ2luLT5nZXREb3Vi
bGUoIngiX3MpOworICAgICAgICBpZiAoIXgpIHsKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5k
bGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtub3du
RXJyb3IpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQorCisgICAgICAgIGF1dG8g
eSA9IHdpbmRvd09yaWdpbi0+Z2V0RG91YmxlKCJ5Il9zKTsKKyAgICAgICAgaWYgKCF5KSB7Cisg
ICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRS
ZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVycm9yKSk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKworICAgICAgICBhdXRvIHdpbmRvd1NpemUgPSBicm93c2luZ0NvbnRleHQtPmdl
dE9iamVjdCgid2luZG93U2l6ZSJfcyk7CisgICAgICAgIGlmICghd2luZG93U2l6ZSkgeworICAg
ICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVz
dWx0OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisKKyAgICAgICAgYXV0byB3aWR0aCA9IHdpbmRvd1NpemUtPmdldERvdWJsZSgid2lk
dGgiX3MpOworICAgICAgICBpZiAoIXdpZHRoKSB7CisgICAgICAgICAgICBjb21wbGV0aW9uSGFu
ZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93
bkVycm9yKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBhdXRv
IGhlaWdodCA9IHdpbmRvd1NpemUtPmdldERvdWJsZSgiaGVpZ2h0Il9zKTsKKyAgICAgICAgaWYg
KCFoZWlnaHQpIHsKKyAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6
OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorCiAgICAgICAgIGF1dG8gd2luZG93UmVjdCA9IEpTT046
Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgICAgIHdpbmRvd1JlY3QtPnNldERvdWJsZSgieCJfcywg
eCk7Ci0gICAgICAgIHdpbmRvd1JlY3QtPnNldERvdWJsZSgieSJfcywgeSk7Ci0gICAgICAgIHdp
bmRvd1JlY3QtPnNldERvdWJsZSgid2lkdGgiX3MsIHdpZHRoKTsKLSAgICAgICAgd2luZG93UmVj
dC0+c2V0RG91YmxlKCJoZWlnaHQiX3MsIGhlaWdodCk7CisgICAgICAgIHdpbmRvd1JlY3QtPnNl
dERvdWJsZSgieCJfcywgKngpOworICAgICAgICB3aW5kb3dSZWN0LT5zZXREb3VibGUoInkiX3Ms
ICp5KTsKKyAgICAgICAgd2luZG93UmVjdC0+c2V0RG91YmxlKCJ3aWR0aCJfcywgKndpZHRoKTsK
KyAgICAgICAgd2luZG93UmVjdC0+c2V0RG91YmxlKCJoZWlnaHQiX3MsICpoZWlnaHQpOwogICAg
ICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpzdWNjZXNzKFdURk1vdmUod2lu
ZG93UmVjdCkpKTsKICAgICB9KTsKIH0KQEAgLTc4NCwxNiArODI0LDE2IEBAIHZvaWQgU2Vzc2lv
bjo6c2V0V2luZG93UmVjdChPcHRpb25hbDxkb3VibGU+IHgsIE9wdGlvbmFsPGRvdWJsZT4geSwg
T3B0aW9uYWw8ZG91CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBS
ZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsK
KyAgICAgICAgYXV0byBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICAg
ICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJoYW5kbGUiX3MsIG1fdG9wbGV2ZWxCcm93c2luZ0Nv
bnRleHQudmFsdWUoKSk7CiAgICAgICAgIGlmICh4ICYmIHkpIHsKLSAgICAgICAgICAgIFJlZlB0
cjxKU09OOjpPYmplY3Q+IHdpbmRvd09yaWdpbiA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Cisg
ICAgICAgICAgICBhdXRvIHdpbmRvd09yaWdpbiA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAg
ICAgICAgICAgICB3aW5kb3dPcmlnaW4tPnNldERvdWJsZSgieCIsIHgudmFsdWUoKSk7CiAgICAg
ICAgICAgICB3aW5kb3dPcmlnaW4tPnNldERvdWJsZSgieSIsIHkudmFsdWUoKSk7CiAgICAgICAg
ICAgICBwYXJhbWV0ZXJzLT5zZXRPYmplY3QoIm9yaWdpbiJfcywgV1RGTW92ZSh3aW5kb3dPcmln
aW4pKTsKICAgICAgICAgfQogICAgICAgICBpZiAod2lkdGggJiYgaGVpZ2h0KSB7Ci0gICAgICAg
ICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiB3aW5kb3dTaXplID0gSlNPTjo6T2JqZWN0OjpjcmVh
dGUoKTsKKyAgICAgICAgICAgIGF1dG8gd2luZG93U2l6ZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRl
KCk7CiAgICAgICAgICAgICB3aW5kb3dTaXplLT5zZXREb3VibGUoIndpZHRoIiwgd2lkdGgudmFs
dWUoKSk7CiAgICAgICAgICAgICB3aW5kb3dTaXplLT5zZXREb3VibGUoImhlaWdodCIsIGhlaWdo
dC52YWx1ZSgpKTsKICAgICAgICAgICAgIHBhcmFtZXRlcnMtPnNldE9iamVjdCgic2l6ZSJfcywg
V1RGTW92ZSh3aW5kb3dTaXplKSk7CkBAIC04MjEsNyArODYxLDcgQEAgdm9pZCBTZXNzaW9uOjpt
YXhpbWl6ZVdpbmRvdyhGdW5jdGlvbjx2b2lkIChDb21tYW5kUmVzdWx0JiYpPiYmIGNvbXBsZXRp
b25IYW5kbGUKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIFJlZlB0
cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAg
ICAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICBw
YXJhbWV0ZXJzLT5zZXRTdHJpbmcoImhhbmRsZSJfcywgbV90b3BsZXZlbEJyb3dzaW5nQ29udGV4
dC52YWx1ZSgpKTsKICAgICAgICAgbV9ob3N0LT5zZW5kQ29tbWFuZFRvQmFja2VuZCgibWF4aW1p
emVXaW5kb3dPZkJyb3dzaW5nQ29udGV4dCJfcywgV1RGTW92ZShwYXJhbWV0ZXJzKSwgW3RoaXMs
IHByb3RlY3RlZFRoaXMsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcildIChTZXNzaW9uSG9zdDo6Q29tbWFuZFJlc3BvbnNlJiYgcmVzcG9uc2UpIG11dGFibGUg
ewogICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmlzRXJyb3IpIHsKQEAgLTg0Niw3ICs4ODYsNyBA
QCB2b2lkIFNlc3Npb246Om1pbmltaXplV2luZG93KEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSZXN1
bHQmJik+JiYgY29tcGxldGlvbkhhbmRsZQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CiAKLSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVycyA9IEpTT046Ok9iamVj
dDo6Y3JlYXRlKCk7CisgICAgICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3Jl
YXRlKCk7CiAgICAgICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiaGFuZGxlIl9zLCBtX3RvcGxl
dmVsQnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwogICAgICAgICBtX2hvc3QtPnNlbmRDb21tYW5k
VG9CYWNrZW5kKCJoaWRlV2luZG93T2ZCcm93c2luZ0NvbnRleHQiX3MsIFdURk1vdmUocGFyYW1l
dGVycyksIFt0aGlzLCBwcm90ZWN0ZWRUaGlzLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpXSAoU2Vzc2lvbkhvc3Q6OkNvbW1hbmRSZXNwb25zZSYmIHJlc3Bv
bnNlKSBtdXRhYmxlIHsKICAgICAgICAgICAgIGlmIChyZXNwb25zZS5pc0Vycm9yKSB7CkBAIC04
NzEsNyArOTExLDcgQEAgdm9pZCBTZXNzaW9uOjpmdWxsc2NyZWVuV2luZG93KEZ1bmN0aW9uPHZv
aWQgKENvbW1hbmRSZXN1bHQmJik+JiYgY29tcGxldGlvbkhhbmQKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQogCi0gICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnMg
PSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU09O
OjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoImJyb3dz
aW5nQ29udGV4dEhhbmRsZSJfcywgbV90b3BsZXZlbEJyb3dzaW5nQ29udGV4dC52YWx1ZSgpKTsK
ICAgICAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJmdW5jdGlvbiJfcywgU3RyaW5nKEVudGVy
RnVsbHNjcmVlbkphdmFTY3JpcHQsIHNpemVvZihFbnRlckZ1bGxzY3JlZW5KYXZhU2NyaXB0KSkp
OwogICAgICAgICBwYXJhbWV0ZXJzLT5zZXRBcnJheSgiYXJndW1lbnRzIl9zLCBKU09OOjpBcnJh
eTo6Y3JlYXRlKCkpOwpAQCAtODgyLDEzICs5MjIsMTQgQEAgdm9pZCBTZXNzaW9uOjpmdWxsc2Ny
ZWVuV2luZG93KEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSZXN1bHQmJik+JiYgY29tcGxldGlvbkhh
bmQKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
IFN0cmluZyB2YWx1ZVN0cmluZzsKLSAgICAgICAgICAgIGlmICghcmVzcG9uc2UucmVzcG9uc2VP
YmplY3QtPmdldFN0cmluZygicmVzdWx0Il9zLCB2YWx1ZVN0cmluZykpIHsKKyAgICAgICAgICAg
IGF1dG8gdmFsdWVTdHJpbmcgPSByZXNwb25zZS5yZXNwb25zZU9iamVjdC0+Z2V0U3RyaW5nKCJy
ZXN1bHQiX3MpOworICAgICAgICAgICAgaWYgKCF2YWx1ZVN0cmluZykgewogICAgICAgICAgICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6
RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHJlc3VsdFZhbHVlOwot
ICAgICAgICAgICAgaWYgKCFKU09OOjpWYWx1ZTo6cGFyc2VKU09OKHZhbHVlU3RyaW5nLCByZXN1
bHRWYWx1ZSkpIHsKKworICAgICAgICAgICAgYXV0byByZXN1bHRWYWx1ZSA9IEpTT046OlZhbHVl
OjpwYXJzZUpTT04odmFsdWVTdHJpbmcpOworICAgICAgICAgICAgaWYgKCFyZXN1bHRWYWx1ZSkg
ewogICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwo
Q29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKICAgICAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgICAgICB9CkBAIC05MDAsMjIgKzk0MSwyNSBAQCB2b2lkIFNlc3Np
b246OmZ1bGxzY3JlZW5XaW5kb3coRnVuY3Rpb248dm9pZCAoQ29tbWFuZFJlc3VsdCYmKT4mJiBj
b21wbGV0aW9uSGFuZAogCiBSZWZQdHI8SlNPTjo6T2JqZWN0PiBTZXNzaW9uOjpjcmVhdGVFbGVt
ZW50KFJlZlB0cjxKU09OOjpWYWx1ZT4mJiB2YWx1ZSkKIHsKLSAgICBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiB2YWx1ZU9iamVjdDsKLSAgICBpZiAoIXZhbHVlLT5hc09iamVjdCh2YWx1ZU9iamVjdCkp
CisgICAgaWYgKCF2YWx1ZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBTdHJpbmcg
ZWxlbWVudElEOwotICAgIGlmICghdmFsdWVPYmplY3QtPmdldFN0cmluZygic2Vzc2lvbi1ub2Rl
LSIgKyBpZCgpLCBlbGVtZW50SUQpKQorICAgIGF1dG8gdmFsdWVPYmplY3QgPSB2YWx1ZS0+YXNP
YmplY3QoKTsKKyAgICBpZiAoIXZhbHVlT2JqZWN0KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
IAotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IGVsZW1lbnRPYmplY3QgPSBKU09OOjpPYmplY3Q6
OmNyZWF0ZSgpOworICAgIGF1dG8gZWxlbWVudElEID0gdmFsdWVPYmplY3QtPmdldFN0cmluZygi
c2Vzc2lvbi1ub2RlLSIgKyBpZCgpKTsKKyAgICBpZiAoIWVsZW1lbnRJRCkKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisKKyAgICBhdXRvIGVsZW1lbnRPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNy
ZWF0ZSgpOwogICAgIGVsZW1lbnRPYmplY3QtPnNldFN0cmluZyh3ZWJFbGVtZW50SWRlbnRpZmll
cigpLCBlbGVtZW50SUQpOwogICAgIHJldHVybiBlbGVtZW50T2JqZWN0OwogfQogCi1SZWZQdHI8
SlNPTjo6T2JqZWN0PiBTZXNzaW9uOjpjcmVhdGVFbGVtZW50KGNvbnN0IFN0cmluZyYgZWxlbWVu
dElEKQorUmVmPEpTT046Ok9iamVjdD4gU2Vzc2lvbjo6Y3JlYXRlRWxlbWVudChjb25zdCBTdHJp
bmcmIGVsZW1lbnRJRCkKIHsKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBlbGVtZW50T2JqZWN0
ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBhdXRvIGVsZW1lbnRPYmplY3QgPSBKU09O
OjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgIGVsZW1lbnRPYmplY3QtPnNldFN0cmluZygic2Vzc2lv
bi1ub2RlLSIgKyBpZCgpLCBlbGVtZW50SUQpOwogICAgIHJldHVybiBlbGVtZW50T2JqZWN0Owog
fQpAQCAtOTI4LDEyICs5NzIsMTIgQEAgUmVmUHRyPEpTT046Ok9iamVjdD4gU2Vzc2lvbjo6ZXh0
cmFjdEVsZW1lbnQoSlNPTjo6VmFsdWUmIHZhbHVlKQogCiBTdHJpbmcgU2Vzc2lvbjo6ZXh0cmFj
dEVsZW1lbnRJRChKU09OOjpWYWx1ZSYgdmFsdWUpCiB7Ci0gICAgUmVmUHRyPEpTT046Ok9iamVj
dD4gdmFsdWVPYmplY3Q7Ci0gICAgaWYgKCF2YWx1ZS5hc09iamVjdCh2YWx1ZU9iamVjdCkpCisg
ICAgYXV0byB2YWx1ZU9iamVjdCA9IHZhbHVlLmFzT2JqZWN0KCk7CisgICAgaWYgKCF2YWx1ZU9i
amVjdCkKICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CiAKLSAgICBTdHJpbmcgZWxlbWVu
dElEOwotICAgIGlmICghdmFsdWVPYmplY3QtPmdldFN0cmluZyh3ZWJFbGVtZW50SWRlbnRpZmll
cigpLCBlbGVtZW50SUQpKQorICAgIGF1dG8gZWxlbWVudElEID0gdmFsdWVPYmplY3QtPmdldFN0
cmluZyh3ZWJFbGVtZW50SWRlbnRpZmllcigpKTsKKyAgICBpZiAoIWVsZW1lbnRJRCkKICAgICAg
ICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CiAKICAgICByZXR1cm4gZWxlbWVudElEOwpAQCAtOTQz
LDcgKzk4Nyw3IEBAIHZvaWQgU2Vzc2lvbjo6Y29tcHV0ZUVsZW1lbnRMYXlvdXQoY29uc3QgU3Ry
aW5nJiBlbGVtZW50SUQsIE9wdGlvblNldDxFbGVtZW50TGF5CiB7CiAgICAgQVNTRVJUKG1fdG9w
bGV2ZWxCcm93c2luZ0NvbnRleHQudmFsdWUoKSk7CiAKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0
PiBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBhdXRvIHBhcmFtZXRl
cnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygi
YnJvd3NpbmdDb250ZXh0SGFuZGxlIl9zLCBtX3RvcGxldmVsQnJvd3NpbmdDb250ZXh0LnZhbHVl
KCkpOwogICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiZnJhbWVIYW5kbGUiX3MsIG1fY3VycmVu
dEJyb3dzaW5nQ29udGV4dC52YWx1ZU9yKGVtcHR5U3RyaW5nKCkpKTsKICAgICBwYXJhbWV0ZXJz
LT5zZXRTdHJpbmcoIm5vZGVIYW5kbGUiX3MsIGVsZW1lbnRJRCk7CkBAIC05NTQsNTkgKzk5OCw2
MCBAQCB2b2lkIFNlc3Npb246OmNvbXB1dGVFbGVtZW50TGF5b3V0KGNvbnN0IFN0cmluZyYgZWxl
bWVudElELCBPcHRpb25TZXQ8RWxlbWVudExheQogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIoV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQsIGZhbHNlLCBXVEZNb3ZlKHJlc3BvbnNlLnJl
c3BvbnNlT2JqZWN0KSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAg
UmVmUHRyPEpTT046Ok9iamVjdD4gcmVjdE9iamVjdDsKLSAgICAgICAgaWYgKCFyZXNwb25zZS5y
ZXNwb25zZU9iamVjdC0+Z2V0T2JqZWN0KCJyZWN0Il9zLCByZWN0T2JqZWN0KSkgeworCisgICAg
ICAgIGF1dG8gcmVjdE9iamVjdCA9IHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRPYmplY3Qo
InJlY3QiX3MpOworICAgICAgICBpZiAoIXJlY3RPYmplY3QpIHsKICAgICAgICAgICAgIGNvbXBs
ZXRpb25IYW5kbGVyKFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0LCBmYWxzZSwgbnVsbHB0cik7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KKwogICAgICAgICBPcHRpb25hbDxpbnQ+
IGVsZW1lbnRYOwogICAgICAgICBPcHRpb25hbDxpbnQ+IGVsZW1lbnRZOwotICAgICAgICBSZWZQ
dHI8SlNPTjo6T2JqZWN0PiBlbGVtZW50UG9zaXRpb247Ci0gICAgICAgIGlmIChyZWN0T2JqZWN0
LT5nZXRPYmplY3QoIm9yaWdpbiJfcywgZWxlbWVudFBvc2l0aW9uKSkgewotICAgICAgICAgICAg
aW50IHgsIHk7Ci0gICAgICAgICAgICBpZiAoZWxlbWVudFBvc2l0aW9uLT5nZXRJbnRlZ2VyKCJ4
Il9zLCB4KSAmJiBlbGVtZW50UG9zaXRpb24tPmdldEludGVnZXIoInkiX3MsIHkpKSB7Ci0gICAg
ICAgICAgICAgICAgZWxlbWVudFggPSB4OwotICAgICAgICAgICAgICAgIGVsZW1lbnRZID0geTsK
LSAgICAgICAgICAgIH0KKyAgICAgICAgYXV0byBlbGVtZW50UG9zaXRpb24gPSByZWN0T2JqZWN0
LT5nZXRPYmplY3QoIm9yaWdpbiJfcyk7CisgICAgICAgIGlmIChlbGVtZW50UG9zaXRpb24pIHsK
KyAgICAgICAgICAgIGVsZW1lbnRYID0gZWxlbWVudFBvc2l0aW9uLT5nZXRJbnRlZ2VyKCJ4Il9z
KTsKKyAgICAgICAgICAgIGVsZW1lbnRZID0gZWxlbWVudFBvc2l0aW9uLT5nZXRJbnRlZ2VyKCJ5
Il9zKTsKICAgICAgICAgfQogICAgICAgICBpZiAoIWVsZW1lbnRYIHx8ICFlbGVtZW50WSkgewog
ICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQs
IGZhbHNlLCBudWxscHRyKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQorCiAgICAg
ICAgIE9wdGlvbmFsPGludD4gZWxlbWVudFdpZHRoOwogICAgICAgICBPcHRpb25hbDxpbnQ+IGVs
ZW1lbnRIZWlnaHQ7Ci0gICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IGVsZW1lbnRTaXplOwot
ICAgICAgICBpZiAocmVjdE9iamVjdC0+Z2V0T2JqZWN0KCJzaXplIl9zLCBlbGVtZW50U2l6ZSkp
IHsKLSAgICAgICAgICAgIGludCB3aWR0aCwgaGVpZ2h0OwotICAgICAgICAgICAgaWYgKGVsZW1l
bnRTaXplLT5nZXRJbnRlZ2VyKCJ3aWR0aCJfcywgd2lkdGgpICYmIGVsZW1lbnRTaXplLT5nZXRJ
bnRlZ2VyKCJoZWlnaHQiX3MsIGhlaWdodCkpIHsKLSAgICAgICAgICAgICAgICBlbGVtZW50V2lk
dGggPSB3aWR0aDsKLSAgICAgICAgICAgICAgICBlbGVtZW50SGVpZ2h0ID0gaGVpZ2h0OwotICAg
ICAgICAgICAgfQorICAgICAgICBhdXRvIGVsZW1lbnRTaXplID0gcmVjdE9iamVjdC0+Z2V0T2Jq
ZWN0KCJzaXplIl9zKTsKKyAgICAgICAgaWYgKGVsZW1lbnRTaXplKSB7CisgICAgICAgICAgICBl
bGVtZW50V2lkdGggPSBlbGVtZW50U2l6ZS0+Z2V0SW50ZWdlcigid2lkdGgiX3MpOworICAgICAg
ICAgICAgZWxlbWVudEhlaWdodCA9IGVsZW1lbnRTaXplLT5nZXRJbnRlZ2VyKCJoZWlnaHQiX3Mp
OwogICAgICAgICB9CiAgICAgICAgIGlmICghZWxlbWVudFdpZHRoIHx8ICFlbGVtZW50SGVpZ2h0
KSB7CiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEY6Om51bGxvcHQsIFdURjo6bnVs
bG9wdCwgZmFsc2UsIG51bGxwdHIpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CisK
ICAgICAgICAgUmVjdCByZWN0ID0geyB7IGVsZW1lbnRYLnZhbHVlKCksIGVsZW1lbnRZLnZhbHVl
KCkgfSwgeyBlbGVtZW50V2lkdGgudmFsdWUoKSwgZWxlbWVudEhlaWdodC52YWx1ZSgpIH0gfTsK
IAotICAgICAgICBib29sIGlzT2JzY3VyZWQ7Ci0gICAgICAgIGlmICghcmVzcG9uc2UucmVzcG9u
c2VPYmplY3QtPmdldEJvb2xlYW4oImlzT2JzY3VyZWQiX3MsIGlzT2JzY3VyZWQpKSB7CisgICAg
ICAgIGF1dG8gaXNPYnNjdXJlZCA9IHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRCb29sZWFu
KCJpc09ic2N1cmVkIl9zKTsKKyAgICAgICAgaWYgKCFpc09ic2N1cmVkKSB7CiAgICAgICAgICAg
ICBjb21wbGV0aW9uSGFuZGxlcihXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCwgZmFsc2UsIG51
bGxwdHIpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIFJlZlB0cjxK
U09OOjpPYmplY3Q+IGluVmlld0NlbnRlclBvaW50T2JqZWN0OwotICAgICAgICBpZiAoIXJlc3Bv
bnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRPYmplY3QoImluVmlld0NlbnRlclBvaW50Il9zLCBpblZp
ZXdDZW50ZXJQb2ludE9iamVjdCkpIHsKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHJl
Y3QsIFdURjo6bnVsbG9wdCwgaXNPYnNjdXJlZCwgbnVsbHB0cik7CisKKyAgICAgICAgYXV0byBp
blZpZXdDZW50ZXJQb2ludE9iamVjdCA9IHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRPYmpl
Y3QoImluVmlld0NlbnRlclBvaW50Il9zKTsKKyAgICAgICAgaWYgKCFpblZpZXdDZW50ZXJQb2lu
dE9iamVjdCkgeworICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIocmVjdCwgV1RGOjpudWxs
b3B0LCAqaXNPYnNjdXJlZCwgbnVsbHB0cik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KLSAgICAgICAgaW50IGluVmlld0NlbnRlclBvaW50WCA9IDAsIGluVmlld0NlbnRlclBvaW50
WSA9IDA7Ci0gICAgICAgIGlmICghaW5WaWV3Q2VudGVyUG9pbnRPYmplY3QtPmdldEludGVnZXIo
IngiX3MsIGluVmlld0NlbnRlclBvaW50WCkKLSAgICAgICAgICAgIHx8ICFpblZpZXdDZW50ZXJQ
b2ludE9iamVjdC0+Z2V0SW50ZWdlcigieSJfcywgaW5WaWV3Q2VudGVyUG9pbnRZKSkgewotICAg
ICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQsIGlz
T2JzY3VyZWQsIG51bGxwdHIpOworCisgICAgICAgIGF1dG8gaW5WaWV3Q2VudGVyUG9pbnRYID0g
aW5WaWV3Q2VudGVyUG9pbnRPYmplY3QtPmdldEludGVnZXIoIngiX3MpOworICAgICAgICBhdXRv
IGluVmlld0NlbnRlclBvaW50WSA9IGluVmlld0NlbnRlclBvaW50T2JqZWN0LT5nZXRJbnRlZ2Vy
KCJ5Il9zKTsKKyAgICAgICAgaWYgKCFpblZpZXdDZW50ZXJQb2ludFggfHwgIWluVmlld0NlbnRl
clBvaW50WSkgeworICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGOjpudWxsb3B0LCBX
VEY6Om51bGxvcHQsICppc09ic2N1cmVkLCBudWxscHRyKTsKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQotICAgICAgICBQb2ludCBpblZpZXdDZW50ZXJQb2ludCA9IHsgaW5WaWV3Q2Vu
dGVyUG9pbnRYLCBpblZpZXdDZW50ZXJQb2ludFkgfTsKLSAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIocmVjdCwgaW5WaWV3Q2VudGVyUG9pbnQsIGlzT2JzY3VyZWQsIG51bGxwdHIpOworCisgICAg
ICAgIFBvaW50IGluVmlld0NlbnRlclBvaW50ID0geyAqaW5WaWV3Q2VudGVyUG9pbnRYLCAqaW5W
aWV3Q2VudGVyUG9pbnRZIH07CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHJlY3QsIGluVmll
d0NlbnRlclBvaW50LCAqaXNPYnNjdXJlZCwgbnVsbHB0cik7CiAgICAgfSk7CiB9CiAKQEAgLTEw
MjIsNyArMTA2Nyw3IEBAIHZvaWQgU2Vzc2lvbjo6ZmluZEVsZW1lbnRzKGNvbnN0IFN0cmluZyYg
c3RyYXRlZ3ksIGNvbnN0IFN0cmluZyYgc2VsZWN0b3IsIEZpbmRFCiAgICAgICAgICAgICBjb21w
bGV0aW9uSGFuZGxlcihXVEZNb3ZlKHJlc3VsdCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9Ci0gICAgICAgIFJlZlB0cjxKU09OOjpBcnJheT4gYXJndW1lbnRzID0gSlNPTjo6QXJy
YXk6OmNyZWF0ZSgpOworICAgICAgICBhdXRvIGFyZ3VtZW50cyA9IEpTT046OkFycmF5OjpjcmVh
dGUoKTsKICAgICAgICAgYXJndW1lbnRzLT5wdXNoU3RyaW5nKEpTT046OlZhbHVlOjpjcmVhdGUo
c3RyYXRlZ3kpLT50b0pTT05TdHJpbmcoKSk7CiAgICAgICAgIGlmIChyb290RWxlbWVudElELmlz
RW1wdHkoKSkKICAgICAgICAgICAgIGFyZ3VtZW50cy0+cHVzaFN0cmluZyhKU09OOjpWYWx1ZTo6
bnVsbCgpLT50b0pTT05TdHJpbmcoKSk7CkBAIC0xMDMyLDcgKzEwNzcsNyBAQCB2b2lkIFNlc3Np
b246OmZpbmRFbGVtZW50cyhjb25zdCBTdHJpbmcmIHN0cmF0ZWd5LCBjb25zdCBTdHJpbmcmIHNl
bGVjdG9yLCBGaW5kRQogICAgICAgICBhcmd1bWVudHMtPnB1c2hTdHJpbmcoSlNPTjo6VmFsdWU6
OmNyZWF0ZShtb2RlID09IEZpbmRFbGVtZW50c01vZGU6OlNpbmdsZSktPnRvSlNPTlN0cmluZygp
KTsKICAgICAgICAgYXJndW1lbnRzLT5wdXNoU3RyaW5nKEpTT046OlZhbHVlOjpjcmVhdGUobV9p
bXBsaWNpdFdhaXRUaW1lb3V0KS0+dG9KU09OU3RyaW5nKCkpOwogCi0gICAgICAgIFJlZlB0cjxK
U09OOjpPYmplY3Q+IHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgICAg
ICBhdXRvIHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICBwYXJh
bWV0ZXJzLT5zZXRTdHJpbmcoImJyb3dzaW5nQ29udGV4dEhhbmRsZSJfcywgbV90b3BsZXZlbEJy
b3dzaW5nQ29udGV4dC52YWx1ZSgpKTsKICAgICAgICAgaWYgKG1fY3VycmVudEJyb3dzaW5nQ29u
dGV4dCkKICAgICAgICAgICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiZnJhbWVIYW5kbGUiX3Ms
IG1fY3VycmVudEJyb3dzaW5nQ29udGV4dC52YWx1ZSgpKTsKQEAgLTEwNDgsMjAgKzEwOTMsMjMg
QEAgdm9pZCBTZXNzaW9uOjpmaW5kRWxlbWVudHMoY29uc3QgU3RyaW5nJiBzdHJhdGVneSwgY29u
c3QgU3RyaW5nJiBzZWxlY3RvciwgRmluZEUKICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFu
ZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKFdURk1vdmUocmVzcG9uc2UucmVzcG9uc2VPYmplY3Qp
KSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQotICAgICAgICAgICAg
U3RyaW5nIHZhbHVlU3RyaW5nOwotICAgICAgICAgICAgaWYgKCFyZXNwb25zZS5yZXNwb25zZU9i
amVjdC0+Z2V0U3RyaW5nKCJyZXN1bHQiX3MsIHZhbHVlU3RyaW5nKSkgewotICAgICAgICAgICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6
RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHJlc3VsdFZhbHVlOwot
ICAgICAgICAgICAgaWYgKCFKU09OOjpWYWx1ZTo6cGFyc2VKU09OKHZhbHVlU3RyaW5nLCByZXN1
bHRWYWx1ZSkpIHsKKworICAgICAgICAgICAgYXV0byB2YWx1ZVN0cmluZyA9IHJlc3BvbnNlLnJl
c3BvbnNlT2JqZWN0LT5nZXRTdHJpbmcoInJlc3VsdCJfcyk7CisgICAgICAgICAgICBpZiAoIXZh
bHVlU3RyaW5nKSB7CiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJl
c3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikpOwogICAg
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KIAorICAgICAgICAgICAgYXV0byBy
ZXN1bHRWYWx1ZSA9IEpTT046OlZhbHVlOjpwYXJzZUpTT04odmFsdWVTdHJpbmcpOworICAgICAg
ICAgICAgaWYgKCFyZXN1bHRWYWx1ZSkgeworICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5k
bGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtub3du
RXJyb3IpKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKwogICAg
ICAgICAgICAgc3dpdGNoIChtb2RlKSB7CiAgICAgICAgICAgICBjYXNlIEZpbmRFbGVtZW50c01v
ZGU6OlNpbmdsZTogewotICAgICAgICAgICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IGVsZW1l
bnRPYmplY3QgPSBjcmVhdGVFbGVtZW50KFdURk1vdmUocmVzdWx0VmFsdWUpKTsKKyAgICAgICAg
ICAgICAgICBhdXRvIGVsZW1lbnRPYmplY3QgPSBjcmVhdGVFbGVtZW50KFdURk1vdmUocmVzdWx0
VmFsdWUpKTsKICAgICAgICAgICAgICAgICBpZiAoIWVsZW1lbnRPYmplY3QpIHsKICAgICAgICAg
ICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5k
UmVzdWx0OjpFcnJvckNvZGU6Ok5vU3VjaEVsZW1lbnQpKTsKICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuOwpAQCAtMTA3MCwxMiArMTExOCwxMyBAQCB2b2lkIFNlc3Npb246OmZpbmRFbGVtZW50
cyhjb25zdCBTdHJpbmcmIHN0cmF0ZWd5LCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yLCBGaW5kRQog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgY2FzZSBG
aW5kRWxlbWVudHNNb2RlOjpNdWx0aXBsZTogewotICAgICAgICAgICAgICAgIFJlZlB0cjxKU09O
OjpBcnJheT4gZWxlbWVudHNBcnJheTsKLSAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdFZhbHVl
LT5hc0FycmF5KGVsZW1lbnRzQXJyYXkpKSB7CisgICAgICAgICAgICAgICAgYXV0byBlbGVtZW50
c0FycmF5ID0gcmVzdWx0VmFsdWUtPmFzQXJyYXkoKTsKKyAgICAgICAgICAgICAgICBpZiAoIWVs
ZW1lbnRzQXJyYXkpIHsKICAgICAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29t
bWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6Ok5vU3VjaEVsZW1lbnQp
KTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IGVsZW1lbnRPYmplY3RzQXJyYXkgPSBKU09O
OjpBcnJheTo6Y3JlYXRlKCk7CisKKyAgICAgICAgICAgICAgICBhdXRvIGVsZW1lbnRPYmplY3Rz
QXJyYXkgPSBKU09OOjpBcnJheTo6Y3JlYXRlKCk7CiAgICAgICAgICAgICAgICAgdW5zaWduZWQg
ZWxlbWVudHNBcnJheUxlbmd0aCA9IGVsZW1lbnRzQXJyYXktPmxlbmd0aCgpOwogICAgICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBlbGVtZW50c0FycmF5TGVuZ3RoOyArK2kp
IHsKICAgICAgICAgICAgICAgICAgICAgaWYgKGF1dG8gZWxlbWVudE9iamVjdCA9IGNyZWF0ZUVs
ZW1lbnQoZWxlbWVudHNBcnJheS0+Z2V0KGkpKSkKQEAgLTExMDEsNyArMTE1MCw3IEBAIHZvaWQg
U2Vzc2lvbjo6Z2V0QWN0aXZlRWxlbWVudChGdW5jdGlvbjx2b2lkIChDb21tYW5kUmVzdWx0JiYp
PiYmIGNvbXBsZXRpb25IYW5kCiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3Zl
KHJlc3VsdCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIFJlZlB0
cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAg
ICAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICBw
YXJhbWV0ZXJzLT5zZXRTdHJpbmcoImJyb3dzaW5nQ29udGV4dEhhbmRsZSJfcywgbV90b3BsZXZl
bEJyb3dzaW5nQ29udGV4dC52YWx1ZSgpKTsKICAgICAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5n
KCJmdW5jdGlvbiJfcywgImZ1bmN0aW9uKCkgeyByZXR1cm4gZG9jdW1lbnQuYWN0aXZlRWxlbWVu
dDsgfSJfcyk7CiAgICAgICAgIHBhcmFtZXRlcnMtPnNldEFycmF5KCJhcmd1bWVudHMiX3MsIEpT
T046OkFycmF5OjpjcmVhdGUoKSk7CkBAIC0xMTEwLDE3ICsxMTU5LDIwIEBAIHZvaWQgU2Vzc2lv
bjo6Z2V0QWN0aXZlRWxlbWVudChGdW5jdGlvbjx2b2lkIChDb21tYW5kUmVzdWx0JiYpPiYmIGNv
bXBsZXRpb25IYW5kCiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJl
c3VsdDo6ZmFpbChXVEZNb3ZlKHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0KSkpOwogICAgICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFN0cmluZyB2YWx1ZVN0
cmluZzsKLSAgICAgICAgICAgIGlmICghcmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdldFN0cmlu
ZygicmVzdWx0Il9zLCB2YWx1ZVN0cmluZykpIHsKKworICAgICAgICAgICAgYXV0byB2YWx1ZVN0
cmluZyA9IHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRTdHJpbmcoInJlc3VsdCJfcyk7Cisg
ICAgICAgICAgICBpZiAoIXZhbHVlU3RyaW5nKSB7CiAgICAgICAgICAgICAgICAgY29tcGxldGlv
bkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OlVu
a25vd25FcnJvcikpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gcmVzdWx0VmFsdWU7Ci0gICAgICAgICAgICBp
ZiAoIUpTT046OlZhbHVlOjpwYXJzZUpTT04odmFsdWVTdHJpbmcsIHJlc3VsdFZhbHVlKSkgewor
CisgICAgICAgICAgICBhdXRvIHJlc3VsdFZhbHVlID0gSlNPTjo6VmFsdWU6OnBhcnNlSlNPTih2
YWx1ZVN0cmluZyk7CisgICAgICAgICAgICBpZiAoIXJlc3VsdFZhbHVlKSB7CiAgICAgICAgICAg
ICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0
OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IGVsZW1lbnRPYmpl
Y3QgPSBjcmVhdGVFbGVtZW50KFdURk1vdmUocmVzdWx0VmFsdWUpKTsKKworICAgICAgICAgICAg
YXV0byBlbGVtZW50T2JqZWN0ID0gY3JlYXRlRWxlbWVudChXVEZNb3ZlKHJlc3VsdFZhbHVlKSk7
CiAgICAgICAgICAgICBpZiAoIWVsZW1lbnRPYmplY3QpIHsKICAgICAgICAgICAgICAgICBjb21w
bGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29k
ZTo6Tm9TdWNoRWxlbWVudCkpOwogICAgICAgICAgICAgICAgIHJldHVybjsKQEAgLTExNDIsMTEg
KzExOTQsMTEgQEAgdm9pZCBTZXNzaW9uOjppc0VsZW1lbnRTZWxlY3RlZChjb25zdCBTdHJpbmcm
IGVsZW1lbnRJRCwgRnVuY3Rpb248dm9pZCAoQ29tbWFuZFIKICAgICAgICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKFdURk1vdmUocmVzdWx0KSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KLSAgICAgICAgUmVmUHRyPEpTT046OkFycmF5PiBhcmd1bWVudHMgPSBKU09OOjpBcnJheTo6
Y3JlYXRlKCk7CisgICAgICAgIGF1dG8gYXJndW1lbnRzID0gSlNPTjo6QXJyYXk6OmNyZWF0ZSgp
OwogICAgICAgICBhcmd1bWVudHMtPnB1c2hTdHJpbmcoY3JlYXRlRWxlbWVudChlbGVtZW50SUQp
LT50b0pTT05TdHJpbmcoKSk7CiAgICAgICAgIGFyZ3VtZW50cy0+cHVzaFN0cmluZyhKU09OOjpW
YWx1ZTo6Y3JlYXRlKCJzZWxlY3RlZCIpLT50b0pTT05TdHJpbmcoKSk7CiAKLSAgICAgICAgUmVm
UHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Cisg
ICAgICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAg
IHBhcmFtZXRlcnMtPnNldFN0cmluZygiYnJvd3NpbmdDb250ZXh0SGFuZGxlIl9zLCBtX3RvcGxl
dmVsQnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwogICAgICAgICBpZiAobV9jdXJyZW50QnJvd3Np
bmdDb250ZXh0KQogICAgICAgICAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJmcmFtZUhhbmRs
ZSJfcywgbV9jdXJyZW50QnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwpAQCAtMTE1NywyNSArMTIw
OSwzMCBAQCB2b2lkIFNlc3Npb246OmlzRWxlbWVudFNlbGVjdGVkKGNvbnN0IFN0cmluZyYgZWxl
bWVudElELCBGdW5jdGlvbjx2b2lkIChDb21tYW5kUgogICAgICAgICAgICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoV1RGTW92ZShyZXNwb25zZS5yZXNwb25zZU9i
amVjdCkpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBTdHJpbmcgdmFsdWVTdHJpbmc7Ci0gICAgICAgICAgICBpZiAoIXJlc3BvbnNlLnJlc3Bv
bnNlT2JqZWN0LT5nZXRTdHJpbmcoInJlc3VsdCJfcywgdmFsdWVTdHJpbmcpKSB7CisKKyAgICAg
ICAgICAgIGF1dG8gdmFsdWVTdHJpbmcgPSByZXNwb25zZS5yZXNwb25zZU9iamVjdC0+Z2V0U3Ry
aW5nKCJyZXN1bHQiX3MpOworICAgICAgICAgICAgaWYgKCF2YWx1ZVN0cmluZykgewogICAgICAg
ICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJl
c3VsdDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKICAgICAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHJlc3VsdFZh
bHVlOwotICAgICAgICAgICAgaWYgKCFKU09OOjpWYWx1ZTo6cGFyc2VKU09OKHZhbHVlU3RyaW5n
LCByZXN1bHRWYWx1ZSkpIHsKKworICAgICAgICAgICAgYXV0byByZXN1bHRWYWx1ZSA9IEpTT046
OlZhbHVlOjpwYXJzZUpTT04odmFsdWVTdHJpbmcpOworICAgICAgICAgICAgaWYgKCFyZXN1bHRW
YWx1ZSkgewogICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6
OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKICAgICAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CisKICAgICAgICAgICAgIGlmIChyZXN1bHRW
YWx1ZS0+aXNOdWxsKCkpIHsKICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21t
YW5kUmVzdWx0OjpzdWNjZXNzKEpTT046OlZhbHVlOjpjcmVhdGUoZmFsc2UpKSk7CiAgICAgICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgU3RyaW5nIGJvb2xl
YW5SZXN1bHQ7Ci0gICAgICAgICAgICBpZiAoIXJlc3VsdFZhbHVlLT5hc1N0cmluZyhib29sZWFu
UmVzdWx0KSB8fCBib29sZWFuUmVzdWx0ICE9ICJ0cnVlIikgeworCisgICAgICAgICAgICBhdXRv
IGJvb2xlYW5SZXN1bHQgPSByZXN1bHRWYWx1ZS0+YXNTdHJpbmcoKTsKKyAgICAgICAgICAgIGlm
ICghYm9vbGVhblJlc3VsdCB8fCBib29sZWFuUmVzdWx0ICE9ICJ0cnVlIikgewogICAgICAgICAg
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3Vs
dDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgICAgICB9CisKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1
bHQ6OnN1Y2Nlc3MoSlNPTjo6VmFsdWU6OmNyZWF0ZSh0cnVlKSkpOwogICAgICAgICB9KTsKICAg
ICB9KTsKQEAgLTExOTMsMTAgKzEyNTAsMTAgQEAgdm9pZCBTZXNzaW9uOjpnZXRFbGVtZW50VGV4
dChjb25zdCBTdHJpbmcmIGVsZW1lbnRJRCwgRnVuY3Rpb248dm9pZCAoQ29tbWFuZFJlc3UKICAg
ICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUocmVzdWx0KSk7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgUmVmUHRyPEpTT046OkFycmF5PiBhcmd1bWVu
dHMgPSBKU09OOjpBcnJheTo6Y3JlYXRlKCk7CisgICAgICAgIGF1dG8gYXJndW1lbnRzID0gSlNP
Tjo6QXJyYXk6OmNyZWF0ZSgpOwogICAgICAgICBhcmd1bWVudHMtPnB1c2hTdHJpbmcoY3JlYXRl
RWxlbWVudChlbGVtZW50SUQpLT50b0pTT05TdHJpbmcoKSk7CiAKLSAgICAgICAgUmVmUHRyPEpT
T046Ok9iamVjdD4gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAg
IGF1dG8gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgIHBhcmFt
ZXRlcnMtPnNldFN0cmluZygiYnJvd3NpbmdDb250ZXh0SGFuZGxlIl9zLCBtX3RvcGxldmVsQnJv
d3NpbmdDb250ZXh0LnZhbHVlKCkpOwogICAgICAgICBpZiAobV9jdXJyZW50QnJvd3NpbmdDb250
ZXh0KQogICAgICAgICAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJmcmFtZUhhbmRsZSJfcywg
bV9jdXJyZW50QnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwpAQCAtMTIwOCwxNiArMTI2NSwxOSBA
QCB2b2lkIFNlc3Npb246OmdldEVsZW1lbnRUZXh0KGNvbnN0IFN0cmluZyYgZWxlbWVudElELCBG
dW5jdGlvbjx2b2lkIChDb21tYW5kUmVzdQogICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5k
bGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoV1RGTW92ZShyZXNwb25zZS5yZXNwb25zZU9iamVjdCkp
KTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBT
dHJpbmcgdmFsdWVTdHJpbmc7Ci0gICAgICAgICAgICBpZiAoIXJlc3BvbnNlLnJlc3BvbnNlT2Jq
ZWN0LT5nZXRTdHJpbmcoInJlc3VsdCJfcywgdmFsdWVTdHJpbmcpKSB7CisKKyAgICAgICAgICAg
IGF1dG8gdmFsdWVTdHJpbmcgPSByZXNwb25zZS5yZXNwb25zZU9iamVjdC0+Z2V0U3RyaW5nKCJy
ZXN1bHQiX3MpOworICAgICAgICAgICAgaWYgKCF2YWx1ZVN0cmluZykgewogICAgICAgICAgICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6
RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHJlc3VsdFZhbHVlOwot
ICAgICAgICAgICAgaWYgKCFKU09OOjpWYWx1ZTo6cGFyc2VKU09OKHZhbHVlU3RyaW5nLCByZXN1
bHRWYWx1ZSkpIHsKKworICAgICAgICAgICAgYXV0byByZXN1bHRWYWx1ZSA9IEpTT046OlZhbHVl
OjpwYXJzZUpTT04odmFsdWVTdHJpbmcpOworICAgICAgICAgICAgaWYgKCFyZXN1bHRWYWx1ZSkg
ewogICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwo
Q29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKICAgICAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgICAgICB9CisKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVy
KENvbW1hbmRSZXN1bHQ6OnN1Y2Nlc3MoV1RGTW92ZShyZXN1bHRWYWx1ZSkpKTsKICAgICAgICAg
fSk7CiAgICAgfSk7CkBAIC0xMjM1LDEwICsxMjk1LDEwIEBAIHZvaWQgU2Vzc2lvbjo6Z2V0RWxl
bWVudFRhZ05hbWUoY29uc3QgU3RyaW5nJiBlbGVtZW50SUQsIEZ1bmN0aW9uPHZvaWQgKENvbW1h
bmRSCiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKHJlc3VsdCkpOwogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIFJlZlB0cjxKU09OOjpBcnJheT4g
YXJndW1lbnRzID0gSlNPTjo6QXJyYXk6OmNyZWF0ZSgpOworICAgICAgICBhdXRvIGFyZ3VtZW50
cyA9IEpTT046OkFycmF5OjpjcmVhdGUoKTsKICAgICAgICAgYXJndW1lbnRzLT5wdXNoU3RyaW5n
KGNyZWF0ZUVsZW1lbnQoZWxlbWVudElEKS0+dG9KU09OU3RyaW5nKCkpOwogCi0gICAgICAgIFJl
ZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwor
ICAgICAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAg
ICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoImJyb3dzaW5nQ29udGV4dEhhbmRsZSJfcywgbV90b3Bs
ZXZlbEJyb3dzaW5nQ29udGV4dC52YWx1ZSgpKTsKICAgICAgICAgaWYgKG1fY3VycmVudEJyb3dz
aW5nQ29udGV4dCkKICAgICAgICAgICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiZnJhbWVIYW5k
bGUiX3MsIG1fY3VycmVudEJyb3dzaW5nQ29udGV4dC52YWx1ZSgpKTsKQEAgLTEyNDksMTYgKzEz
MDksMTkgQEAgdm9pZCBTZXNzaW9uOjpnZXRFbGVtZW50VGFnTmFtZShjb25zdCBTdHJpbmcmIGVs
ZW1lbnRJRCwgRnVuY3Rpb248dm9pZCAoQ29tbWFuZFIKICAgICAgICAgICAgICAgICBjb21wbGV0
aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKFdURk1vdmUocmVzcG9uc2UucmVzcG9uc2VP
YmplY3QpKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQotICAgICAg
ICAgICAgU3RyaW5nIHZhbHVlU3RyaW5nOwotICAgICAgICAgICAgaWYgKCFyZXNwb25zZS5yZXNw
b25zZU9iamVjdC0+Z2V0U3RyaW5nKCJyZXN1bHQiX3MsIHZhbHVlU3RyaW5nKSkgeworCisgICAg
ICAgICAgICBhdXRvIHZhbHVlU3RyaW5nID0gcmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdldFN0
cmluZygicmVzdWx0Il9zKTsKKyAgICAgICAgICAgIGlmICghdmFsdWVTdHJpbmcpIHsKICAgICAg
ICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRS
ZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVycm9yKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICAgICAgfQotICAgICAgICAgICAgUmVmUHRyPEpTT046OlZhbHVlPiByZXN1bHRW
YWx1ZTsKLSAgICAgICAgICAgIGlmICghSlNPTjo6VmFsdWU6OnBhcnNlSlNPTih2YWx1ZVN0cmlu
ZywgcmVzdWx0VmFsdWUpKSB7CisKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0VmFsdWUgPSBKU09O
OjpWYWx1ZTo6cGFyc2VKU09OKHZhbHVlU3RyaW5nKTsKKyAgICAgICAgICAgIGlmICghcmVzdWx0
VmFsdWUpIHsKICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0
OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVycm9yKSk7CiAgICAgICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBjb21wbGV0aW9u
SGFuZGxlcihDb21tYW5kUmVzdWx0OjpzdWNjZXNzKFdURk1vdmUocmVzdWx0VmFsdWUpKSk7CiAg
ICAgICAgIH0pOwogICAgIH0pOwpAQCAtMTI4MSw3ICsxMzQ0LDcgQEAgdm9pZCBTZXNzaW9uOjpn
ZXRFbGVtZW50UmVjdChjb25zdCBTdHJpbmcmIGVsZW1lbnRJRCwgRnVuY3Rpb248dm9pZCAoQ29t
bWFuZFJlc3UKICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0
OjpmYWlsKFdURk1vdmUoZXJyb3IpKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICAgICAgfQotICAgICAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcmVjdE9iamVjdCA9IEpT
T046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgICAgICBhdXRvIHJlY3RPYmplY3QgPSBKU09O
OjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICAgICAgcmVjdE9iamVjdC0+c2V0SW50ZWdlcigi
eCJfcywgcmVjdC52YWx1ZSgpLm9yaWdpbi54KTsKICAgICAgICAgICAgIHJlY3RPYmplY3QtPnNl
dEludGVnZXIoInkiX3MsIHJlY3QudmFsdWUoKS5vcmlnaW4ueSk7CiAgICAgICAgICAgICByZWN0
T2JqZWN0LT5zZXRJbnRlZ2VyKCJ3aWR0aCJfcywgcmVjdC52YWx1ZSgpLnNpemUud2lkdGgpOwpA
QCAtMTMwMywxMCArMTM2NiwxMCBAQCB2b2lkIFNlc3Npb246OmlzRWxlbWVudEVuYWJsZWQoY29u
c3QgU3RyaW5nJiBlbGVtZW50SUQsIEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSZQogICAgICAgICAg
ICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShyZXN1bHQpKTsKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQotICAgICAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IGFyZ3VtZW50cyA9IEpT
T046OkFycmF5OjpjcmVhdGUoKTsKKyAgICAgICAgYXV0byBhcmd1bWVudHMgPSBKU09OOjpBcnJh
eTo6Y3JlYXRlKCk7CiAgICAgICAgIGFyZ3VtZW50cy0+cHVzaFN0cmluZyhjcmVhdGVFbGVtZW50
KGVsZW1lbnRJRCktPnRvSlNPTlN0cmluZygpKTsKIAotICAgICAgICBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgYXV0byBw
YXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICAgcGFyYW1ldGVycy0+
c2V0U3RyaW5nKCJicm93c2luZ0NvbnRleHRIYW5kbGUiX3MsIG1fdG9wbGV2ZWxCcm93c2luZ0Nv
bnRleHQudmFsdWUoKSk7CiAgICAgICAgIGlmIChtX2N1cnJlbnRCcm93c2luZ0NvbnRleHQpCiAg
ICAgICAgICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoImZyYW1lSGFuZGxlIl9zLCBtX2N1cnJl
bnRCcm93c2luZ0NvbnRleHQudmFsdWUoKSk7CkBAIC0xMzE3LDE2ICsxMzgwLDE5IEBAIHZvaWQg
U2Vzc2lvbjo6aXNFbGVtZW50RW5hYmxlZChjb25zdCBTdHJpbmcmIGVsZW1lbnRJRCwgRnVuY3Rp
b248dm9pZCAoQ29tbWFuZFJlCiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29t
bWFuZFJlc3VsdDo6ZmFpbChXVEZNb3ZlKHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0KSkpOwogICAg
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFN0cmluZyB2
YWx1ZVN0cmluZzsKLSAgICAgICAgICAgIGlmICghcmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdl
dFN0cmluZygicmVzdWx0Il9zLCB2YWx1ZVN0cmluZykpIHsKKworICAgICAgICAgICAgYXV0byB2
YWx1ZVN0cmluZyA9IHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRTdHJpbmcoInJlc3VsdCJf
cyk7CisgICAgICAgICAgICBpZiAoIXZhbHVlU3RyaW5nKSB7CiAgICAgICAgICAgICAgICAgY29t
cGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNv
ZGU6OlVua25vd25FcnJvcikpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gcmVzdWx0VmFsdWU7Ci0gICAgICAg
ICAgICBpZiAoIUpTT046OlZhbHVlOjpwYXJzZUpTT04odmFsdWVTdHJpbmcsIHJlc3VsdFZhbHVl
KSkgeworCisgICAgICAgICAgICBhdXRvIHJlc3VsdFZhbHVlID0gSlNPTjo6VmFsdWU6OnBhcnNl
SlNPTih2YWx1ZVN0cmluZyk7CisgICAgICAgICAgICBpZiAoIXJlc3VsdFZhbHVlKSB7CiAgICAg
ICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5k
UmVzdWx0OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikpOwogICAgICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFu
ZFJlc3VsdDo6c3VjY2VzcyhXVEZNb3ZlKHJlc3VsdFZhbHVlKSkpOwogICAgICAgICB9KTsKICAg
ICB9KTsKQEAgLTEzNDQsMTAgKzE0MTAsMTAgQEAgdm9pZCBTZXNzaW9uOjppc0VsZW1lbnREaXNw
bGF5ZWQoY29uc3QgU3RyaW5nJiBlbGVtZW50SUQsIEZ1bmN0aW9uPHZvaWQgKENvbW1hbmQKICAg
ICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUocmVzdWx0KSk7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgUmVmUHRyPEpTT046OkFycmF5PiBhcmd1bWVu
dHMgPSBKU09OOjpBcnJheTo6Y3JlYXRlKCk7CisgICAgICAgIGF1dG8gYXJndW1lbnRzID0gSlNP
Tjo6QXJyYXk6OmNyZWF0ZSgpOwogICAgICAgICBhcmd1bWVudHMtPnB1c2hTdHJpbmcoY3JlYXRl
RWxlbWVudChlbGVtZW50SUQpLT50b0pTT05TdHJpbmcoKSk7CiAKLSAgICAgICAgUmVmUHRyPEpT
T046Ok9iamVjdD4gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAg
IGF1dG8gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgIHBhcmFt
ZXRlcnMtPnNldFN0cmluZygiYnJvd3NpbmdDb250ZXh0SGFuZGxlIl9zLCBtX3RvcGxldmVsQnJv
d3NpbmdDb250ZXh0LnZhbHVlKCkpOwogICAgICAgICBpZiAobV9jdXJyZW50QnJvd3NpbmdDb250
ZXh0KQogICAgICAgICAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJmcmFtZUhhbmRsZSJfcywg
bV9jdXJyZW50QnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwpAQCAtMTM1OCwxNiArMTQyNCwxOSBA
QCB2b2lkIFNlc3Npb246OmlzRWxlbWVudERpc3BsYXllZChjb25zdCBTdHJpbmcmIGVsZW1lbnRJ
RCwgRnVuY3Rpb248dm9pZCAoQ29tbWFuZAogICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5k
bGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoV1RGTW92ZShyZXNwb25zZS5yZXNwb25zZU9iamVjdCkp
KTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBT
dHJpbmcgdmFsdWVTdHJpbmc7Ci0gICAgICAgICAgICBpZiAoIXJlc3BvbnNlLnJlc3BvbnNlT2Jq
ZWN0LT5nZXRTdHJpbmcoInJlc3VsdCJfcywgdmFsdWVTdHJpbmcpKSB7CisKKyAgICAgICAgICAg
IGF1dG8gdmFsdWVTdHJpbmcgPSByZXNwb25zZS5yZXNwb25zZU9iamVjdC0+Z2V0U3RyaW5nKCJy
ZXN1bHQiX3MpOworICAgICAgICAgICAgaWYgKCF2YWx1ZVN0cmluZykgewogICAgICAgICAgICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6
RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHJlc3VsdFZhbHVlOwot
ICAgICAgICAgICAgaWYgKCFKU09OOjpWYWx1ZTo6cGFyc2VKU09OKHZhbHVlU3RyaW5nLCByZXN1
bHRWYWx1ZSkpIHsKKworICAgICAgICAgICAgYXV0byByZXN1bHRWYWx1ZSA9IEpTT046OlZhbHVl
OjpwYXJzZUpTT04odmFsdWVTdHJpbmcpOworICAgICAgICAgICAgaWYgKCFyZXN1bHRWYWx1ZSkg
ewogICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwo
Q29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKICAgICAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgICAgICB9CisKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVy
KENvbW1hbmRSZXN1bHQ6OnN1Y2Nlc3MoV1RGTW92ZShyZXN1bHRWYWx1ZSkpKTsKICAgICAgICAg
fSk7CiAgICAgfSk7CkBAIC0xMzg1LDExICsxNDU0LDExIEBAIHZvaWQgU2Vzc2lvbjo6Z2V0RWxl
bWVudEF0dHJpYnV0ZShjb25zdCBTdHJpbmcmIGVsZW1lbnRJRCwgY29uc3QgU3RyaW5nJiBhdHRy
aWJ1CiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKHJlc3VsdCkpOwogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIFJlZlB0cjxKU09OOjpBcnJheT4g
YXJndW1lbnRzID0gSlNPTjo6QXJyYXk6OmNyZWF0ZSgpOworICAgICAgICBhdXRvIGFyZ3VtZW50
cyA9IEpTT046OkFycmF5OjpjcmVhdGUoKTsKICAgICAgICAgYXJndW1lbnRzLT5wdXNoU3RyaW5n
KGNyZWF0ZUVsZW1lbnQoZWxlbWVudElEKS0+dG9KU09OU3RyaW5nKCkpOwogICAgICAgICBhcmd1
bWVudHMtPnB1c2hTdHJpbmcoSlNPTjo6VmFsdWU6OmNyZWF0ZShhdHRyaWJ1dGUpLT50b0pTT05T
dHJpbmcoKSk7CiAKLSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVycyA9IEpT
T046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTT046Ok9i
amVjdDo6Y3JlYXRlKCk7CiAgICAgICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiYnJvd3NpbmdD
b250ZXh0SGFuZGxlIl9zLCBtX3RvcGxldmVsQnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwogICAg
ICAgICBpZiAobV9jdXJyZW50QnJvd3NpbmdDb250ZXh0KQogICAgICAgICAgICAgcGFyYW1ldGVy
cy0+c2V0U3RyaW5nKCJmcmFtZUhhbmRsZSJfcywgbV9jdXJyZW50QnJvd3NpbmdDb250ZXh0LnZh
bHVlKCkpOwpAQCAtMTQwMCwxNiArMTQ2OSwxOSBAQCB2b2lkIFNlc3Npb246OmdldEVsZW1lbnRB
dHRyaWJ1dGUoY29uc3QgU3RyaW5nJiBlbGVtZW50SUQsIGNvbnN0IFN0cmluZyYgYXR0cmlidQog
ICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoV1RG
TW92ZShyZXNwb25zZS5yZXNwb25zZU9iamVjdCkpKTsKICAgICAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBTdHJpbmcgdmFsdWVTdHJpbmc7Ci0gICAgICAg
ICAgICBpZiAoIXJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRTdHJpbmcoInJlc3VsdCJfcywg
dmFsdWVTdHJpbmcpKSB7CisKKyAgICAgICAgICAgIGF1dG8gdmFsdWVTdHJpbmcgPSByZXNwb25z
ZS5yZXNwb25zZU9iamVjdC0+Z2V0U3RyaW5nKCJyZXN1bHQiX3MpOworICAgICAgICAgICAgaWYg
KCF2YWx1ZVN0cmluZykgewogICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1h
bmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsK
ICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBSZWZQ
dHI8SlNPTjo6VmFsdWU+IHJlc3VsdFZhbHVlOwotICAgICAgICAgICAgaWYgKCFKU09OOjpWYWx1
ZTo6cGFyc2VKU09OKHZhbHVlU3RyaW5nLCByZXN1bHRWYWx1ZSkpIHsKKworICAgICAgICAgICAg
YXV0byByZXN1bHRWYWx1ZSA9IEpTT046OlZhbHVlOjpwYXJzZUpTT04odmFsdWVTdHJpbmcpOwor
ICAgICAgICAgICAgaWYgKCFyZXN1bHRWYWx1ZSkgewogICAgICAgICAgICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpV
bmtub3duRXJyb3IpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CisK
ICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OnN1Y2Nlc3MoV1RG
TW92ZShyZXN1bHRWYWx1ZSkpKTsKICAgICAgICAgfSk7CiAgICAgfSk7CkBAIC0xNDI3LDEwICsx
NDk5LDEwIEBAIHZvaWQgU2Vzc2lvbjo6Z2V0RWxlbWVudFByb3BlcnR5KGNvbnN0IFN0cmluZyYg
ZWxlbWVudElELCBjb25zdCBTdHJpbmcmIHByb3BlcnR5CiAgICAgICAgICAgICBjb21wbGV0aW9u
SGFuZGxlcihXVEZNb3ZlKHJlc3VsdCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
Ci0gICAgICAgIFJlZlB0cjxKU09OOjpBcnJheT4gYXJndW1lbnRzID0gSlNPTjo6QXJyYXk6OmNy
ZWF0ZSgpOworICAgICAgICBhdXRvIGFyZ3VtZW50cyA9IEpTT046OkFycmF5OjpjcmVhdGUoKTsK
ICAgICAgICAgYXJndW1lbnRzLT5wdXNoU3RyaW5nKGNyZWF0ZUVsZW1lbnQoZWxlbWVudElEKS0+
dG9KU09OU3RyaW5nKCkpOwogCi0gICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRl
cnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBhdXRvIHBhcmFtZXRlcnMgPSBK
U09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoImJy
b3dzaW5nQ29udGV4dEhhbmRsZSJfcywgbV90b3BsZXZlbEJyb3dzaW5nQ29udGV4dC52YWx1ZSgp
KTsKICAgICAgICAgaWYgKG1fY3VycmVudEJyb3dzaW5nQ29udGV4dCkKICAgICAgICAgICAgIHBh
cmFtZXRlcnMtPnNldFN0cmluZygiZnJhbWVIYW5kbGUiX3MsIG1fY3VycmVudEJyb3dzaW5nQ29u
dGV4dC52YWx1ZSgpKTsKQEAgLTE0NDEsMTYgKzE1MTMsMTkgQEAgdm9pZCBTZXNzaW9uOjpnZXRF
bGVtZW50UHJvcGVydHkoY29uc3QgU3RyaW5nJiBlbGVtZW50SUQsIGNvbnN0IFN0cmluZyYgcHJv
cGVydHkKICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0Ojpm
YWlsKFdURk1vdmUocmVzcG9uc2UucmVzcG9uc2VPYmplY3QpKSk7CiAgICAgICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgU3RyaW5nIHZhbHVlU3RyaW5nOwot
ICAgICAgICAgICAgaWYgKCFyZXNwb25zZS5yZXNwb25zZU9iamVjdC0+Z2V0U3RyaW5nKCJyZXN1
bHQiX3MsIHZhbHVlU3RyaW5nKSkgeworCisgICAgICAgICAgICBhdXRvIHZhbHVlU3RyaW5nID0g
cmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdldFN0cmluZygicmVzdWx0Il9zKTsKKyAgICAgICAg
ICAgIGlmICghdmFsdWVTdHJpbmcpIHsKICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVy
cm9yKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQotICAgICAgICAg
ICAgUmVmUHRyPEpTT046OlZhbHVlPiByZXN1bHRWYWx1ZTsKLSAgICAgICAgICAgIGlmICghSlNP
Tjo6VmFsdWU6OnBhcnNlSlNPTih2YWx1ZVN0cmluZywgcmVzdWx0VmFsdWUpKSB7CisKKyAgICAg
ICAgICAgIGF1dG8gcmVzdWx0VmFsdWUgPSBKU09OOjpWYWx1ZTo6cGFyc2VKU09OKHZhbHVlU3Ry
aW5nKTsKKyAgICAgICAgICAgIGlmICghcmVzdWx0VmFsdWUpIHsKICAgICAgICAgICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9y
Q29kZTo6VW5rbm93bkVycm9yKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAg
ICAgfQorCiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpzdWNj
ZXNzKFdURk1vdmUocmVzdWx0VmFsdWUpKSk7CiAgICAgICAgIH0pOwogICAgIH0pOwpAQCAtMTQ2
OCwxMCArMTU0MywxMCBAQCB2b2lkIFNlc3Npb246OmdldEVsZW1lbnRDU1NWYWx1ZShjb25zdCBT
dHJpbmcmIGVsZW1lbnRJRCwgY29uc3QgU3RyaW5nJiBjc3NQcm9wZQogICAgICAgICAgICAgY29t
cGxldGlvbkhhbmRsZXIoV1RGTW92ZShyZXN1bHQpKTsKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQotICAgICAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IGFyZ3VtZW50cyA9IEpTT046OkFy
cmF5OjpjcmVhdGUoKTsKKyAgICAgICAgYXV0byBhcmd1bWVudHMgPSBKU09OOjpBcnJheTo6Y3Jl
YXRlKCk7CiAgICAgICAgIGFyZ3VtZW50cy0+cHVzaFN0cmluZyhjcmVhdGVFbGVtZW50KGVsZW1l
bnRJRCktPnRvSlNPTlN0cmluZygpKTsKIAotICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBw
YXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgYXV0byBwYXJhbWV0
ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICAgcGFyYW1ldGVycy0+c2V0U3Ry
aW5nKCJicm93c2luZ0NvbnRleHRIYW5kbGUiX3MsIG1fdG9wbGV2ZWxCcm93c2luZ0NvbnRleHQu
dmFsdWUoKSk7CiAgICAgICAgIGlmIChtX2N1cnJlbnRCcm93c2luZ0NvbnRleHQpCiAgICAgICAg
ICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoImZyYW1lSGFuZGxlIl9zLCBtX2N1cnJlbnRCcm93
c2luZ0NvbnRleHQudmFsdWUoKSk7CkBAIC0xNDgyLDE2ICsxNTU3LDE5IEBAIHZvaWQgU2Vzc2lv
bjo6Z2V0RWxlbWVudENTU1ZhbHVlKGNvbnN0IFN0cmluZyYgZWxlbWVudElELCBjb25zdCBTdHJp
bmcmIGNzc1Byb3BlCiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJl
c3VsdDo6ZmFpbChXVEZNb3ZlKHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0KSkpOwogICAgICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFN0cmluZyB2YWx1ZVN0
cmluZzsKLSAgICAgICAgICAgIGlmICghcmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdldFN0cmlu
ZygicmVzdWx0Il9zLCB2YWx1ZVN0cmluZykpIHsKKworICAgICAgICAgICAgYXV0byB2YWx1ZVN0
cmluZyA9IHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRTdHJpbmcoInJlc3VsdCJfcyk7Cisg
ICAgICAgICAgICBpZiAoIXZhbHVlU3RyaW5nKSB7CiAgICAgICAgICAgICAgICAgY29tcGxldGlv
bkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OlVu
a25vd25FcnJvcikpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gcmVzdWx0VmFsdWU7Ci0gICAgICAgICAgICBp
ZiAoIUpTT046OlZhbHVlOjpwYXJzZUpTT04odmFsdWVTdHJpbmcsIHJlc3VsdFZhbHVlKSkgewor
CisgICAgICAgICAgICBhdXRvIHJlc3VsdFZhbHVlID0gSlNPTjo6VmFsdWU6OnBhcnNlSlNPTih2
YWx1ZVN0cmluZyk7CisgICAgICAgICAgICBpZiAoIXJlc3VsdFZhbHVlKSB7CiAgICAgICAgICAg
ICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0
OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgICAgIH0KKwogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3Vs
dDo6c3VjY2VzcyhXVEZNb3ZlKHJlc3VsdFZhbHVlKSkpOwogICAgICAgICB9KTsKICAgICB9KTsK
QEAgLTE1MDQsNyArMTU4Miw3IEBAIHZvaWQgU2Vzc2lvbjo6d2FpdEZvck5hdmlnYXRpb25Ub0Nv
bXBsZXRlKEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSZXN1bHQmJik+JiYgY29tCiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzID0gSlNP
Tjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6
OmNyZWF0ZSgpOwogICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiYnJvd3NpbmdDb250ZXh0SGFu
ZGxlIl9zLCBtX3RvcGxldmVsQnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwogICAgIGlmIChtX2N1
cnJlbnRCcm93c2luZ0NvbnRleHQpCiAgICAgICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiZnJh
bWVIYW5kbGUiX3MsIG1fY3VycmVudEJyb3dzaW5nQ29udGV4dC52YWx1ZSgpKTsKQEAgLTE1MzQs
NyArMTYxMiw3IEBAIHZvaWQgU2Vzc2lvbjo6d2FpdEZvck5hdmlnYXRpb25Ub0NvbXBsZXRlKEZ1
bmN0aW9uPHZvaWQgKENvbW1hbmRSZXN1bHQmJik+JiYgY29tCiAKIHZvaWQgU2Vzc2lvbjo6ZWxl
bWVudElzRmlsZVVwbG9hZChjb25zdCBTdHJpbmcmIGVsZW1lbnRJRCwgRnVuY3Rpb248dm9pZCAo
Q29tbWFuZFJlc3VsdCYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBSZWZQdHI8SlNP
Tjo6QXJyYXk+IGFyZ3VtZW50cyA9IEpTT046OkFycmF5OjpjcmVhdGUoKTsKKyAgICBhdXRvIGFy
Z3VtZW50cyA9IEpTT046OkFycmF5OjpjcmVhdGUoKTsKICAgICBhcmd1bWVudHMtPnB1c2hTdHJp
bmcoY3JlYXRlRWxlbWVudChlbGVtZW50SUQpLT50b0pTT05TdHJpbmcoKSk7CiAKICAgICBzdGF0
aWMgY29uc3QgY2hhciBpc0ZpbGVVcGxvYWRTY3JpcHRbXSA9CkBAIC0xNTQ0LDcgKzE2MjIsNyBA
QCB2b2lkIFNlc3Npb246OmVsZW1lbnRJc0ZpbGVVcGxvYWQoY29uc3QgU3RyaW5nJiBlbGVtZW50
SUQsIEZ1bmN0aW9uPHZvaWQgKENvbW1hbgogICAgICAgICAiICAgIHJldHVybiB7ICdmaWxlVXBs
b2FkJzogZmFsc2UgfTsiCiAgICAgICAgICJ9IjsKIAotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+
IHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGF1dG8gcGFyYW1ldGVy
cyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJi
cm93c2luZ0NvbnRleHRIYW5kbGUiX3MsIG1fdG9wbGV2ZWxCcm93c2luZ0NvbnRleHQudmFsdWUo
KSk7CiAgICAgaWYgKG1fY3VycmVudEJyb3dzaW5nQ29udGV4dCkKICAgICAgICAgcGFyYW1ldGVy
cy0+c2V0U3RyaW5nKCJmcmFtZUhhbmRsZSJfcywgbV9jdXJyZW50QnJvd3NpbmdDb250ZXh0LnZh
bHVlKCkpOwpAQCAtMTU1NSwzMiArMTYzMywzOCBAQCB2b2lkIFNlc3Npb246OmVsZW1lbnRJc0Zp
bGVVcGxvYWQoY29uc3QgU3RyaW5nJiBlbGVtZW50SUQsIEZ1bmN0aW9uPHZvaWQgKENvbW1hbgog
ICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChXVEZNb3Zl
KHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0KSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9Ci0gICAgICAgIFN0cmluZyB2YWx1ZVN0cmluZzsKLSAgICAgICAgaWYgKCFyZXNwb25zZS5y
ZXNwb25zZU9iamVjdC0+Z2V0U3RyaW5nKCJyZXN1bHQiX3MsIHZhbHVlU3RyaW5nKSkgeworCisg
ICAgICAgIGF1dG8gdmFsdWVTdHJpbmcgPSByZXNwb25zZS5yZXNwb25zZU9iamVjdC0+Z2V0U3Ry
aW5nKCJyZXN1bHQiX3MpOworICAgICAgICBpZiAoIXZhbHVlU3RyaW5nKSB7CiAgICAgICAgICAg
ICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVy
cm9yQ29kZTo6VW5rbm93bkVycm9yKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
LSAgICAgICAgUmVmUHRyPEpTT046OlZhbHVlPiByZXN1bHRWYWx1ZTsKLSAgICAgICAgaWYgKCFK
U09OOjpWYWx1ZTo6cGFyc2VKU09OKHZhbHVlU3RyaW5nLCByZXN1bHRWYWx1ZSkpIHsKKworICAg
ICAgICBhdXRvIHJlc3VsdFZhbHVlID0gSlNPTjo6VmFsdWU6OnBhcnNlSlNPTih2YWx1ZVN0cmlu
Zyk7CisgICAgICAgIGlmICghcmVzdWx0VmFsdWUpIHsKICAgICAgICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtu
b3duRXJyb3IpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQorCiAgICAgICAgIGNv
bXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OnN1Y2Nlc3MoV1RGTW92ZShyZXN1bHRWYWx1
ZSkpKTsKICAgICB9KTsKIH0KIAogT3B0aW9uYWw8U2Vzc2lvbjo6RmlsZVVwbG9hZFR5cGU+IFNl
c3Npb246OnBhcnNlRWxlbWVudElzRmlsZVVwbG9hZFJlc3VsdChjb25zdCBSZWZQdHI8SlNPTjo6
VmFsdWU+JiByZXN1bHRWYWx1ZSkKIHsKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiByZXN1bHQ7
Ci0gICAgaWYgKCFyZXN1bHRWYWx1ZS0+YXNPYmplY3QocmVzdWx0KSkKKyAgICBpZiAoIXJlc3Vs
dFZhbHVlKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgYm9vbCBpc0ZpbGVV
cGxvYWQ7Ci0gICAgaWYgKCFyZXN1bHQtPmdldEJvb2xlYW4oImZpbGVVcGxvYWQiX3MsIGlzRmls
ZVVwbG9hZCkgfHwgIWlzRmlsZVVwbG9hZCkKKyAgICBhdXRvIHJlc3VsdCA9IHJlc3VsdFZhbHVl
LT5hc09iamVjdCgpOworICAgIGlmICghcmVzdWx0KQogICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwogCi0gICAgYm9vbCBtdWx0aXBsZTsKLSAgICBpZiAoIXJlc3VsdC0+Z2V0Qm9vbGVhbigi
bXVsdGlwbGUiX3MsIG11bHRpcGxlKSB8fCAhbXVsdGlwbGUpCisgICAgYXV0byBpc0ZpbGVVcGxv
YWQgPSByZXN1bHQtPmdldEJvb2xlYW4oImZpbGVVcGxvYWQiX3MpOworICAgIGlmICghaXNGaWxl
VXBsb2FkIHx8ICEqaXNGaWxlVXBsb2FkKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owor
CisgICAgYXV0byBtdWx0aXBsZSA9IHJlc3VsdC0+Z2V0Qm9vbGVhbigibXVsdGlwbGUiX3MpOwor
ICAgIGlmICghbXVsdGlwbGUgfHwgISptdWx0aXBsZSkKICAgICAgICAgcmV0dXJuIEZpbGVVcGxv
YWRUeXBlOjpTaW5nbGU7CiAKICAgICByZXR1cm4gRmlsZVVwbG9hZFR5cGU6Ok11bHRpcGxlOwpA
QCAtMTU4OCw3ICsxNjcyLDcgQEAgT3B0aW9uYWw8U2Vzc2lvbjo6RmlsZVVwbG9hZFR5cGU+IFNl
c3Npb246OnBhcnNlRWxlbWVudElzRmlsZVVwbG9hZFJlc3VsdChjb25zdAogCiB2b2lkIFNlc3Np
b246OnNlbGVjdE9wdGlvbkVsZW1lbnQoY29uc3QgU3RyaW5nJiBlbGVtZW50SUQsIEZ1bmN0aW9u
PHZvaWQgKENvbW1hbmRSZXN1bHQmJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgUmVm
UHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Cisg
ICAgYXV0byBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICBwYXJhbWV0
ZXJzLT5zZXRTdHJpbmcoImJyb3dzaW5nQ29udGV4dEhhbmRsZSJfcywgbV90b3BsZXZlbEJyb3dz
aW5nQ29udGV4dC52YWx1ZSgpKTsKICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoImZyYW1lSGFu
ZGxlIl9zLCBtX2N1cnJlbnRCcm93c2luZ0NvbnRleHQudmFsdWVPcihlbXB0eVN0cmluZygpKSk7
CiAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJub2RlSGFuZGxlIl9zLCBlbGVtZW50SUQpOwpA
QCAtMTY0MSw4ICsxNzI1LDggQEAgdm9pZCBTZXNzaW9uOjplbGVtZW50Q2xpY2soY29uc3QgU3Ry
aW5nJiBlbGVtZW50SUQsIEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSZXN1bHQKICAgICAgICAgICAg
ICAgICBnZXRFbGVtZW50VGFnTmFtZShlbGVtZW50SUQsIFt0aGlzLCBlbGVtZW50SUQsIGluVmll
d0NlbnRlciA9IFdURk1vdmUoaW5WaWV3Q2VudGVyKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oQ29tbWFuZFJlc3VsdCYmIHJlc3VsdCkgbXV0YWJsZSB7
CiAgICAgICAgICAgICAgICAgICAgIGJvb2wgaXNPcHRpb25FbGVtZW50ID0gZmFsc2U7CiAgICAg
ICAgICAgICAgICAgICAgIGlmICghcmVzdWx0LmlzRXJyb3IoKSkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgU3RyaW5nIHRhZ05hbWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVz
dWx0LnJlc3VsdCgpLT5hc1N0cmluZyh0YWdOYW1lKSkKKyAgICAgICAgICAgICAgICAgICAgICAg
IGF1dG8gdGFnTmFtZSA9IHJlc3VsdC5yZXN1bHQoKS0+YXNTdHJpbmcoKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICghIXRhZ05hbWUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aXNPcHRpb25FbGVtZW50ID0gdGFnTmFtZSA9PSAib3B0aW9uIjsKICAgICAgICAgICAgICAgICAg
ICAgfQogCkBAIC0xNjY2LDcgKzE3NTAsNyBAQCB2b2lkIFNlc3Npb246OmVsZW1lbnRDbGljayhj
b25zdCBTdHJpbmcmIGVsZW1lbnRJRCwgRnVuY3Rpb248dm9pZCAoQ29tbWFuZFJlc3VsdAogCiB2
b2lkIFNlc3Npb246OmVsZW1lbnRJc0VkaXRhYmxlKGNvbnN0IFN0cmluZyYgZWxlbWVudElELCBG
dW5jdGlvbjx2b2lkIChDb21tYW5kUmVzdWx0JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewot
ICAgIFJlZlB0cjxKU09OOjpBcnJheT4gYXJndW1lbnRzID0gSlNPTjo6QXJyYXk6OmNyZWF0ZSgp
OworICAgIGF1dG8gYXJndW1lbnRzID0gSlNPTjo6QXJyYXk6OmNyZWF0ZSgpOwogICAgIGFyZ3Vt
ZW50cy0+cHVzaFN0cmluZyhjcmVhdGVFbGVtZW50KGVsZW1lbnRJRCktPnRvSlNPTlN0cmluZygp
KTsKIAogICAgIHN0YXRpYyBjb25zdCBjaGFyIGlzRWRpdGFibGVTY3JpcHRbXSA9CkBAIC0xNjg2
LDcgKzE3NzAsNyBAQCB2b2lkIFNlc3Npb246OmVsZW1lbnRJc0VkaXRhYmxlKGNvbnN0IFN0cmlu
ZyYgZWxlbWVudElELCBGdW5jdGlvbjx2b2lkIChDb21tYW5kUgogICAgICAgICAiICAgIHJldHVy
biBmYWxzZTsiCiAgICAgICAgICJ9IjsKIAotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFt
ZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGF1dG8gcGFyYW1ldGVycyA9IEpT
T046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJicm93c2lu
Z0NvbnRleHRIYW5kbGUiX3MsIG1fdG9wbGV2ZWxCcm93c2luZ0NvbnRleHQudmFsdWUoKSk7CiAg
ICAgaWYgKG1fY3VycmVudEJyb3dzaW5nQ29udGV4dCkKICAgICAgICAgcGFyYW1ldGVycy0+c2V0
U3RyaW5nKCJmcmFtZUhhbmRsZSJfcywgbV9jdXJyZW50QnJvd3NpbmdDb250ZXh0LnZhbHVlKCkp
OwpAQCAtMTY5NywxNiArMTc4MSwxOSBAQCB2b2lkIFNlc3Npb246OmVsZW1lbnRJc0VkaXRhYmxl
KGNvbnN0IFN0cmluZyYgZWxlbWVudElELCBGdW5jdGlvbjx2b2lkIChDb21tYW5kUgogICAgICAg
ICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChXVEZNb3ZlKHJlc3Bv
bnNlLnJlc3BvbnNlT2JqZWN0KSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0g
ICAgICAgIFN0cmluZyB2YWx1ZVN0cmluZzsKLSAgICAgICAgaWYgKCFyZXNwb25zZS5yZXNwb25z
ZU9iamVjdC0+Z2V0U3RyaW5nKCJyZXN1bHQiX3MsIHZhbHVlU3RyaW5nKSkgeworCisgICAgICAg
IGF1dG8gdmFsdWVTdHJpbmcgPSByZXNwb25zZS5yZXNwb25zZU9iamVjdC0+Z2V0U3RyaW5nKCJy
ZXN1bHQiX3MpOworICAgICAgICBpZiAoIXZhbHVlU3RyaW5nKSB7CiAgICAgICAgICAgICBjb21w
bGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29k
ZTo6VW5rbm93bkVycm9yKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAg
ICAgUmVmUHRyPEpTT046OlZhbHVlPiByZXN1bHRWYWx1ZTsKLSAgICAgICAgaWYgKCFKU09OOjpW
YWx1ZTo6cGFyc2VKU09OKHZhbHVlU3RyaW5nLCByZXN1bHRWYWx1ZSkpIHsKKworICAgICAgICBh
dXRvIHJlc3VsdFZhbHVlID0gSlNPTjo6VmFsdWU6OnBhcnNlSlNPTih2YWx1ZVN0cmluZyk7Cisg
ICAgICAgIGlmICghcmVzdWx0VmFsdWUpIHsKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVy
KENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtub3duRXJy
b3IpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQorCiAgICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OnN1Y2Nlc3MoV1RGTW92ZShyZXN1bHRWYWx1ZSkpKTsK
ICAgICB9KTsKIH0KQEAgLTE3MzAsOCArMTgxNyw4IEBAIHZvaWQgU2Vzc2lvbjo6ZWxlbWVudENs
ZWFyKGNvbnN0IFN0cmluZyYgZWxlbWVudElELCBGdW5jdGlvbjx2b2lkIChDb21tYW5kUmVzdWx0
CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBi
b29sIGlzRWRpdGFibGU7Ci0gICAgICAgICAgICBpZiAoIXJlc3VsdC5yZXN1bHQoKS0+YXNCb29s
ZWFuKGlzRWRpdGFibGUpIHx8ICFpc0VkaXRhYmxlKSB7CisgICAgICAgICAgICBhdXRvIGlzRWRp
dGFibGUgPSByZXN1bHQucmVzdWx0KCktPmFzQm9vbGVhbigpOworICAgICAgICAgICAgaWYgKCFp
c0VkaXRhYmxlIHx8ICEqaXNFZGl0YWJsZSkgewogICAgICAgICAgICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpJbnZh
bGlkRWxlbWVudFN0YXRlKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAg
fQpAQCAtMTc0NiwxMCArMTgzMywxMCBAQCB2b2lkIFNlc3Npb246OmVsZW1lbnRDbGVhcihjb25z
dCBTdHJpbmcmIGVsZW1lbnRJRCwgRnVuY3Rpb248dm9pZCAoQ29tbWFuZFJlc3VsdAogICAgICAg
ICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1h
bmRSZXN1bHQ6OkVycm9yQ29kZTo6RWxlbWVudE5vdEludGVyYWN0YWJsZSkpOwogICAgICAgICAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIFJl
ZlB0cjxKU09OOjpBcnJheT4gYXJndW1lbnRzID0gSlNPTjo6QXJyYXk6OmNyZWF0ZSgpOworICAg
ICAgICAgICAgICAgIGF1dG8gYXJndW1lbnRzID0gSlNPTjo6QXJyYXk6OmNyZWF0ZSgpOwogICAg
ICAgICAgICAgICAgIGFyZ3VtZW50cy0+cHVzaFN0cmluZyhjcmVhdGVFbGVtZW50KGVsZW1lbnRJ
RCktPnRvSlNPTlN0cmluZygpKTsKIAotICAgICAgICAgICAgICAgIFJlZlB0cjxKU09OOjpPYmpl
Y3Q+IHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICAgICAgICAg
IGF1dG8gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgICAgICAg
ICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJicm93c2luZ0NvbnRleHRIYW5kbGUiX3MsIG1fdG9w
bGV2ZWxCcm93c2luZ0NvbnRleHQudmFsdWUoKSk7CiAgICAgICAgICAgICAgICAgaWYgKG1fY3Vy
cmVudEJyb3dzaW5nQ29udGV4dCkKICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVycy0+c2V0
U3RyaW5nKCJmcmFtZUhhbmRsZSJfcywgbV9jdXJyZW50QnJvd3NpbmdDb250ZXh0LnZhbHVlKCkp
OwpAQCAtMTc4MCw3ICsxODY3LDcgQEAgdm9pZCBTZXNzaW9uOjpzZXRJbnB1dEZpbGVVcGxvYWRG
aWxlcyhjb25zdCBTdHJpbmcmIGVsZW1lbnRJRCwgY29uc3QgU3RyaW5nJiB0ZXgKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAotICAgIFJlZlB0cjxKU09OOjpBcnJheT4gZmlsZW5hbWVzID0gSlNP
Tjo6QXJyYXk6OmNyZWF0ZSgpOworICAgIGF1dG8gZmlsZW5hbWVzID0gSlNPTjo6QXJyYXk6OmNy
ZWF0ZSgpOwogICAgIGZvciAoY29uc3QgYXV0byYgZmlsZSA6IGZpbGVzKSB7CiAgICAgICAgIGlm
ICghRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyhmaWxlKSkgewogICAgICAgICAgICAgY29tcGxldGlv
bkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6Oklu
dmFsaWRBcmd1bWVudCkpOwpAQCAtMTc4OSw3ICsxODc2LDcgQEAgdm9pZCBTZXNzaW9uOjpzZXRJ
bnB1dEZpbGVVcGxvYWRGaWxlcyhjb25zdCBTdHJpbmcmIGVsZW1lbnRJRCwgY29uc3QgU3RyaW5n
JiB0ZXgKICAgICAgICAgZmlsZW5hbWVzLT5wdXNoU3RyaW5nKGZpbGUpOwogICAgIH0KIAotICAg
IFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgp
OworICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgcGFy
YW1ldGVycy0+c2V0U3RyaW5nKCJicm93c2luZ0NvbnRleHRIYW5kbGUiX3MsIG1fdG9wbGV2ZWxC
cm93c2luZ0NvbnRleHQudmFsdWUoKSk7CiAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJmcmFt
ZUhhbmRsZSJfcywgbV9jdXJyZW50QnJvd3NpbmdDb250ZXh0LnZhbHVlT3IoZW1wdHlTdHJpbmco
KSkpOwogICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygibm9kZUhhbmRsZSJfcywgZWxlbWVudElE
KTsKQEAgLTE5ODAsOSArMjA2Nyw5IEBAIHZvaWQgU2Vzc2lvbjo6ZWxlbWVudFNlbmRLZXlzKGNv
bnN0IFN0cmluZyYgZWxlbWVudElELCBjb25zdCBTdHJpbmcmIHRleHQsIEZ1bmN0CiAgICAgICAg
ICAgICAgICAgICAgICIgICAgICAgIHRocm93IHtuYW1lOiAnRWxlbWVudE5vdEludGVyYWN0YWJs
ZScsIG1lc3NhZ2U6ICdFbGVtZW50IGlzIG5vdCBmb2N1c2FibGUuJ307IgogICAgICAgICAgICAg
ICAgICAgICAifSI7CiAKLSAgICAgICAgICAgICAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IGFyZ3Vt
ZW50cyA9IEpTT046OkFycmF5OjpjcmVhdGUoKTsKKyAgICAgICAgICAgICAgICBhdXRvIGFyZ3Vt
ZW50cyA9IEpTT046OkFycmF5OjpjcmVhdGUoKTsKICAgICAgICAgICAgICAgICBhcmd1bWVudHMt
PnB1c2hTdHJpbmcoY3JlYXRlRWxlbWVudChlbGVtZW50SUQpLT50b0pTT05TdHJpbmcoKSk7Ci0g
ICAgICAgICAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVycyA9IEpTT046Ok9i
amVjdDo6Y3JlYXRlKCk7CisgICAgICAgICAgICAgICAgYXV0byBwYXJhbWV0ZXJzID0gSlNPTjo6
T2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmco
ImJyb3dzaW5nQ29udGV4dEhhbmRsZSJfcywgbV90b3BsZXZlbEJyb3dzaW5nQ29udGV4dC52YWx1
ZSgpKTsKICAgICAgICAgICAgICAgICBpZiAobV9jdXJyZW50QnJvd3NpbmdDb250ZXh0KQogICAg
ICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoImZyYW1lSGFuZGxlIl9zLCBt
X2N1cnJlbnRCcm93c2luZ0NvbnRleHQudmFsdWUoKSk7CkBAIC0yMDU2LDcgKzIxNDMsNyBAQCB2
b2lkIFNlc3Npb246OmdldFBhZ2VTb3VyY2UoRnVuY3Rpb248dm9pZCAoQ29tbWFuZFJlc3VsdCYm
KT4mJiBjb21wbGV0aW9uSGFuZGxlcgogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RG
TW92ZShyZXN1bHQpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBS
ZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsK
KyAgICAgICAgYXV0byBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICAg
ICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJicm93c2luZ0NvbnRleHRIYW5kbGUiX3MsIG1fdG9w
bGV2ZWxCcm93c2luZ0NvbnRleHQudmFsdWUoKSk7CiAgICAgICAgIHBhcmFtZXRlcnMtPnNldFN0
cmluZygiZnVuY3Rpb24iX3MsICJmdW5jdGlvbigpIHsgcmV0dXJuIGRvY3VtZW50LmRvY3VtZW50
RWxlbWVudC5vdXRlckhUTUw7IH0iX3MpOwogICAgICAgICBwYXJhbWV0ZXJzLT5zZXRBcnJheSgi
YXJndW1lbnRzIl9zLCBKU09OOjpBcnJheTo6Y3JlYXRlKCkpOwpAQCAtMjA2NSwzOCArMjE1Miwz
OSBAQCB2b2lkIFNlc3Npb246OmdldFBhZ2VTb3VyY2UoRnVuY3Rpb248dm9pZCAoQ29tbWFuZFJl
c3VsdCYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcgogICAgICAgICAgICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoV1RGTW92ZShyZXNwb25zZS5yZXNwb25zZU9iamVj
dCkpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBTdHJpbmcgdmFsdWVTdHJpbmc7Ci0gICAgICAgICAgICBpZiAoIXJlc3BvbnNlLnJlc3BvbnNl
T2JqZWN0LT5nZXRTdHJpbmcoInJlc3VsdCJfcywgdmFsdWVTdHJpbmcpKSB7CisKKyAgICAgICAg
ICAgIGF1dG8gdmFsdWVTdHJpbmcgPSByZXNwb25zZS5yZXNwb25zZU9iamVjdC0+Z2V0U3RyaW5n
KCJyZXN1bHQiX3MpOworICAgICAgICAgICAgaWYgKCF2YWx1ZVN0cmluZykgewogICAgICAgICAg
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3Vs
dDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHJlc3VsdFZhbHVl
OwotICAgICAgICAgICAgaWYgKCFKU09OOjpWYWx1ZTo6cGFyc2VKU09OKHZhbHVlU3RyaW5nLCBy
ZXN1bHRWYWx1ZSkpIHsKKworICAgICAgICAgICAgYXV0byByZXN1bHRWYWx1ZSA9IEpTT046OlZh
bHVlOjpwYXJzZUpTT04odmFsdWVTdHJpbmcpOworICAgICAgICAgICAgaWYgKCFyZXN1bHRWYWx1
ZSkgewogICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZh
aWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKICAgICAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgICAgICB9CisKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5k
bGVyKENvbW1hbmRSZXN1bHQ6OnN1Y2Nlc3MoV1RGTW92ZShyZXN1bHRWYWx1ZSkpKTsKICAgICAg
ICAgfSk7CiAgICAgfSk7CiB9CiAKLVJlZlB0cjxKU09OOjpWYWx1ZT4gU2Vzc2lvbjo6aGFuZGxl
U2NyaXB0UmVzdWx0KFJlZlB0cjxKU09OOjpWYWx1ZT4mJiByZXN1bHRWYWx1ZSkKK1JlZjxKU09O
OjpWYWx1ZT4gU2Vzc2lvbjo6aGFuZGxlU2NyaXB0UmVzdWx0KFJlZjxKU09OOjpWYWx1ZT4mJiBy
ZXN1bHRWYWx1ZSkKIHsKLSAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IHJlc3VsdEFycmF5OwotICAg
IGlmIChyZXN1bHRWYWx1ZS0+YXNBcnJheShyZXN1bHRBcnJheSkpIHsKLSAgICAgICAgUmVmUHRy
PEpTT046OkFycmF5PiByZXR1cm5WYWx1ZUFycmF5ID0gSlNPTjo6QXJyYXk6OmNyZWF0ZSgpOwor
ICAgIGlmIChhdXRvIHJlc3VsdEFycmF5ID0gcmVzdWx0VmFsdWUtPmFzQXJyYXkoKSkgeworICAg
ICAgICBhdXRvIHJldHVyblZhbHVlQXJyYXkgPSBKU09OOjpBcnJheTo6Y3JlYXRlKCk7CiAgICAg
ICAgIHVuc2lnbmVkIHJlc3VsdEFycmF5TGVuZ3RoID0gcmVzdWx0QXJyYXktPmxlbmd0aCgpOwog
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVzdWx0QXJyYXlMZW5ndGg7ICsraSkK
LSAgICAgICAgICAgIHJldHVyblZhbHVlQXJyYXktPnB1c2hWYWx1ZShoYW5kbGVTY3JpcHRSZXN1
bHQocmVzdWx0QXJyYXktPmdldChpKSkpOworICAgICAgICAgICAgcmV0dXJuVmFsdWVBcnJheS0+
cHVzaFZhbHVlKGhhbmRsZVNjcmlwdFJlc3VsdChXVEZNb3ZlKHJlc3VsdEFycmF5LT5nZXQoaSkp
KSk7CiAgICAgICAgIHJldHVybiByZXR1cm5WYWx1ZUFycmF5OwogICAgIH0KIAogICAgIGlmIChh
dXRvIGVsZW1lbnQgPSBjcmVhdGVFbGVtZW50KFJlZlB0cjxKU09OOjpWYWx1ZT4ocmVzdWx0VmFs
dWUpKSkKICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CiAKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0
PiByZXN1bHRPYmplY3Q7Ci0gICAgaWYgKHJlc3VsdFZhbHVlLT5hc09iamVjdChyZXN1bHRPYmpl
Y3QpKSB7Ci0gICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHJldHVyblZhbHVlT2JqZWN0ID0g
SlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBpZiAoYXV0byByZXN1bHRPYmplY3QgPSByZXN1
bHRWYWx1ZS0+YXNPYmplY3QoKSkgeworICAgICAgICBhdXRvIHJldHVyblZhbHVlT2JqZWN0ID0g
SlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICAgYXV0byBlbmQgPSByZXN1bHRPYmplY3Qt
PmVuZCgpOwogICAgICAgICBmb3IgKGF1dG8gaXQgPSByZXN1bHRPYmplY3QtPmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkKICAgICAgICAgICAgIHJldHVyblZhbHVlT2JqZWN0LT5zZXRWYWx1ZShp
dC0+a2V5LCBoYW5kbGVTY3JpcHRSZXN1bHQoV1RGTW92ZShpdC0+dmFsdWUpKSk7CkBAIC0yMTE4
LDE4ICsyMjA2LDE3IEBAIHZvaWQgU2Vzc2lvbjo6ZXhlY3V0ZVNjcmlwdChjb25zdCBTdHJpbmcm
IHNjcmlwdCwgUmVmUHRyPEpTT046OkFycmF5PiYmIGFyZ3VtZW50CiAgICAgICAgICAgICBjb21w
bGV0aW9uSGFuZGxlcihXVEZNb3ZlKHJlc3VsdCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9Ci0gICAgICAgIFJlZlB0cjxKU09OOjpBcnJheT4gYXJndW1lbnRzID0gSlNPTjo6QXJy
YXk6OmNyZWF0ZSgpOworICAgICAgICBhdXRvIGFyZ3VtZW50cyA9IEpTT046OkFycmF5OjpjcmVh
dGUoKTsKICAgICAgICAgdW5zaWduZWQgYXJndW1lbnRzTGVuZ3RoID0gYXJndW1lbnRzQXJyYXkt
Pmxlbmd0aCgpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXJndW1lbnRzTGVu
Z3RoOyArK2kpIHsKLSAgICAgICAgICAgIGlmIChhdXRvIGFyZ3VtZW50ID0gYXJndW1lbnRzQXJy
YXktPmdldChpKSkgewotICAgICAgICAgICAgICAgIGlmIChhdXRvIGVsZW1lbnQgPSBleHRyYWN0
RWxlbWVudCgqYXJndW1lbnQpKQotICAgICAgICAgICAgICAgICAgICBhcmd1bWVudHMtPnB1c2hT
dHJpbmcoZWxlbWVudC0+dG9KU09OU3RyaW5nKCkpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICAgICAgYXJndW1lbnRzLT5wdXNoU3RyaW5nKGFyZ3VtZW50LT50b0pTT05T
dHJpbmcoKSk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBhdXRvIGFyZ3VtZW50ID0gYXJn
dW1lbnRzQXJyYXktPmdldChpKTsKKyAgICAgICAgICAgIGlmIChhdXRvIGVsZW1lbnQgPSBleHRy
YWN0RWxlbWVudChhcmd1bWVudCkpCisgICAgICAgICAgICAgICAgYXJndW1lbnRzLT5wdXNoU3Ry
aW5nKGVsZW1lbnQtPnRvSlNPTlN0cmluZygpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICBhcmd1bWVudHMtPnB1c2hTdHJpbmcoYXJndW1lbnQtPnRvSlNPTlN0cmluZygpKTsK
ICAgICAgICAgfQogCi0gICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnMgPSBK
U09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU09OOjpP
YmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoImJyb3dzaW5n
Q29udGV4dEhhbmRsZSJfcywgbV90b3BsZXZlbEJyb3dzaW5nQ29udGV4dC52YWx1ZSgpKTsKICAg
ICAgICAgaWYgKG1fY3VycmVudEJyb3dzaW5nQ29udGV4dCkKICAgICAgICAgICAgIHBhcmFtZXRl
cnMtPnNldFN0cmluZygiZnJhbWVIYW5kbGUiX3MsIG1fY3VycmVudEJyb3dzaW5nQ29udGV4dC52
YWx1ZSgpKTsKQEAgLTIxNDgsMTYgKzIyMzUsMTkgQEAgdm9pZCBTZXNzaW9uOjpleGVjdXRlU2Ny
aXB0KGNvbnN0IFN0cmluZyYgc2NyaXB0LCBSZWZQdHI8SlNPTjo6QXJyYXk+JiYgYXJndW1lbnQK
ICAgICAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShyZXN1bHQpKTsK
ICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBTdHJp
bmcgdmFsdWVTdHJpbmc7Ci0gICAgICAgICAgICBpZiAoIXJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0
LT5nZXRTdHJpbmcoInJlc3VsdCJfcywgdmFsdWVTdHJpbmcpKSB7CisKKyAgICAgICAgICAgIGF1
dG8gdmFsdWVTdHJpbmcgPSByZXNwb25zZS5yZXNwb25zZU9iamVjdC0+Z2V0U3RyaW5nKCJyZXN1
bHQiX3MpOworICAgICAgICAgICAgaWYgKCF2YWx1ZVN0cmluZykgewogICAgICAgICAgICAgICAg
IGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJy
b3JDb2RlOjpVbmtub3duRXJyb3IpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHJlc3VsdFZhbHVlOwotICAg
ICAgICAgICAgaWYgKCFKU09OOjpWYWx1ZTo6cGFyc2VKU09OKHZhbHVlU3RyaW5nLCByZXN1bHRW
YWx1ZSkpIHsKKworICAgICAgICAgICAgYXV0byByZXN1bHRWYWx1ZSA9IEpTT046OlZhbHVlOjpw
YXJzZUpTT04odmFsdWVTdHJpbmcpOworICAgICAgICAgICAgaWYgKCFyZXN1bHRWYWx1ZSkgewog
ICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29t
bWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKICAgICAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgICAgICB9CisKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENv
bW1hbmRSZXN1bHQ6OnN1Y2Nlc3MoaGFuZGxlU2NyaXB0UmVzdWx0KFdURk1vdmUocmVzdWx0VmFs
dWUpKSkpOwogICAgICAgICB9KTsKICAgICB9KTsKQEAgLTIxODEsOSArMjI3MSw5IEBAIHN0YXRp
YyBTdHJpbmcgbW91c2VCdXR0b25Gb3JBdXRvbWF0aW9uKE1vdXNlQnV0dG9uIGJ1dHRvbikKIAog
dm9pZCBTZXNzaW9uOjpwZXJmb3JtTW91c2VJbnRlcmFjdGlvbihpbnQgeCwgaW50IHksIE1vdXNl
QnV0dG9uIGJ1dHRvbiwgTW91c2VJbnRlcmFjdGlvbiBpbnRlcmFjdGlvbiwgRnVuY3Rpb248dm9p
ZCAoQ29tbWFuZFJlc3VsdCYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBSZWZQdHI8
SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBh
dXRvIHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgIHBhcmFtZXRlcnMt
PnNldFN0cmluZygiaGFuZGxlIl9zLCBtX3RvcGxldmVsQnJvd3NpbmdDb250ZXh0LnZhbHVlKCkp
OwotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBvc2l0aW9uID0gSlNPTjo6T2JqZWN0OjpjcmVh
dGUoKTsKKyAgICBhdXRvIHBvc2l0aW9uID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICBw
b3NpdGlvbi0+c2V0SW50ZWdlcigieCJfcywgeCk7CiAgICAgcG9zaXRpb24tPnNldEludGVnZXIo
InkiX3MsIHkpOwogICAgIHBhcmFtZXRlcnMtPnNldE9iamVjdCgicG9zaXRpb24iX3MsIFdURk1v
dmUocG9zaXRpb24pKTsKQEAgLTIyMTcsMTEgKzIzMDcsMTEgQEAgdm9pZCBTZXNzaW9uOjpwZXJm
b3JtTW91c2VJbnRlcmFjdGlvbihpbnQgeCwgaW50IHksIE1vdXNlQnV0dG9uIGJ1dHRvbiwgTW91
c2VJbnQKIAogdm9pZCBTZXNzaW9uOjpwZXJmb3JtS2V5Ym9hcmRJbnRlcmFjdGlvbnMoVmVjdG9y
PEtleWJvYXJkSW50ZXJhY3Rpb24+JiYgaW50ZXJhY3Rpb25zLCBGdW5jdGlvbjx2b2lkIChDb21t
YW5kUmVzdWx0JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIFJlZlB0cjxKU09OOjpP
YmplY3Q+IHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGF1dG8gcGFy
YW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgcGFyYW1ldGVycy0+c2V0U3Ry
aW5nKCJoYW5kbGUiX3MsIG1fdG9wbGV2ZWxCcm93c2luZ0NvbnRleHQudmFsdWUoKSk7Ci0gICAg
UmVmUHRyPEpTT046OkFycmF5PiBpbnRlcmFjdGlvbnNBcnJheSA9IEpTT046OkFycmF5OjpjcmVh
dGUoKTsKKyAgICBhdXRvIGludGVyYWN0aW9uc0FycmF5ID0gSlNPTjo6QXJyYXk6OmNyZWF0ZSgp
OwogICAgIGZvciAoY29uc3QgYXV0byYgaW50ZXJhY3Rpb24gOiBpbnRlcmFjdGlvbnMpIHsKLSAg
ICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gaW50ZXJhY3Rpb25PYmplY3QgPSBKU09OOjpPYmpl
Y3Q6OmNyZWF0ZSgpOworICAgICAgICBhdXRvIGludGVyYWN0aW9uT2JqZWN0ID0gSlNPTjo6T2Jq
ZWN0OjpjcmVhdGUoKTsKICAgICAgICAgc3dpdGNoIChpbnRlcmFjdGlvbi50eXBlKSB7CiAgICAg
ICAgIGNhc2UgS2V5Ym9hcmRJbnRlcmFjdGlvblR5cGU6OktleVByZXNzOgogICAgICAgICAgICAg
aW50ZXJhY3Rpb25PYmplY3QtPnNldFN0cmluZygidHlwZSJfcywgIktleVByZXNzIl9zKTsKQEAg
LTIyNTIsMzcgKzIzNDIsNDMgQEAgdm9pZCBTZXNzaW9uOjpwZXJmb3JtS2V5Ym9hcmRJbnRlcmFj
dGlvbnMoVmVjdG9yPEtleWJvYXJkSW50ZXJhY3Rpb24+JiYgaW50ZXJhY3QKIHN0YXRpYyBPcHRp
b25hbDxTZXNzaW9uOjpDb29raWU+IHBhcnNlQXV0b21hdGlvbkNvb2tpZShjb25zdCBKU09OOjpP
YmplY3QmIGNvb2tpZU9iamVjdCkKIHsKICAgICBTZXNzaW9uOjpDb29raWUgY29va2llOwotICAg
IGlmICghY29va2llT2JqZWN0LmdldFN0cmluZygibmFtZSJfcywgY29va2llLm5hbWUpKQotICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIGlmICghY29va2llT2JqZWN0LmdldFN0cmlu
ZygidmFsdWUiX3MsIGNvb2tpZS52YWx1ZSkpCisKKyAgICBjb29raWUubmFtZSA9IGNvb2tpZU9i
amVjdC5nZXRTdHJpbmcoIm5hbWUiX3MpOworICAgIGlmICghY29va2llLm5hbWUpCiAgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBTdHJpbmcgcGF0aDsKLSAgICBpZiAoY29va2ll
T2JqZWN0LmdldFN0cmluZygicGF0aCJfcywgcGF0aCkpCisgICAgY29va2llLnZhbHVlID0gY29v
a2llT2JqZWN0LmdldFN0cmluZygidmFsdWUiX3MpOworICAgIGlmICghY29va2llLnZhbHVlKQor
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgYXV0byBwYXRoID0gY29va2llT2Jq
ZWN0LmdldFN0cmluZygicGF0aCJfcyk7CisgICAgaWYgKCEhcGF0aCkKICAgICAgICAgY29va2ll
LnBhdGggPSBwYXRoOwotICAgIFN0cmluZyBkb21haW47Ci0gICAgaWYgKGNvb2tpZU9iamVjdC5n
ZXRTdHJpbmcoImRvbWFpbiJfcywgZG9tYWluKSkKKworICAgIGF1dG8gZG9tYWluID0gY29va2ll
T2JqZWN0LmdldFN0cmluZygiZG9tYWluIl9zKTsKKyAgICBpZiAoISFkb21haW4pCiAgICAgICAg
IGNvb2tpZS5kb21haW4gPSBkb21haW47Ci0gICAgYm9vbCBzZWN1cmU7Ci0gICAgaWYgKGNvb2tp
ZU9iamVjdC5nZXRCb29sZWFuKCJzZWN1cmUiX3MsIHNlY3VyZSkpCi0gICAgICAgIGNvb2tpZS5z
ZWN1cmUgPSBzZWN1cmU7Ci0gICAgYm9vbCBodHRwT25seTsKLSAgICBpZiAoY29va2llT2JqZWN0
LmdldEJvb2xlYW4oImh0dHBPbmx5Il9zLCBodHRwT25seSkpCi0gICAgICAgIGNvb2tpZS5odHRw
T25seSA9IGh0dHBPbmx5OwotICAgIGJvb2wgc2Vzc2lvbiA9IGZhbHNlOwotICAgIGNvb2tpZU9i
amVjdC5nZXRCb29sZWFuKCJzZXNzaW9uIl9zLCBzZXNzaW9uKTsKKworICAgIGF1dG8gc2VjdXJl
ID0gY29va2llT2JqZWN0LmdldEJvb2xlYW4oInNlY3VyZSJfcyk7CisgICAgaWYgKHNlY3VyZSkK
KyAgICAgICAgY29va2llLnNlY3VyZSA9ICpzZWN1cmU7CisKKyAgICBhdXRvIGh0dHBPbmx5ID0g
Y29va2llT2JqZWN0LmdldEJvb2xlYW4oImh0dHBPbmx5Il9zKTsKKyAgICBpZiAoaHR0cE9ubHkp
CisgICAgICAgIGNvb2tpZS5odHRwT25seSA9ICpodHRwT25seTsKKworICAgIGF1dG8gc2Vzc2lv
biA9IGNvb2tpZU9iamVjdC5nZXRCb29sZWFuKCJzZXNzaW9uIl9zKTsKICAgICBpZiAoIXNlc3Np
b24pIHsKLSAgICAgICAgZG91YmxlIGV4cGlyeTsKLSAgICAgICAgaWYgKGNvb2tpZU9iamVjdC5n
ZXREb3VibGUoImV4cGlyZXMiX3MsIGV4cGlyeSkpCi0gICAgICAgICAgICBjb29raWUuZXhwaXJ5
ID0gZXhwaXJ5OworICAgICAgICBpZiAoYXV0byBleHBpcnkgPSBjb29raWVPYmplY3QuZ2V0RG91
YmxlKCJleHBpcmVzIl9zKSkKKyAgICAgICAgICAgIGNvb2tpZS5leHBpcnkgPSAqZXhwaXJ5Owog
ICAgIH0KIAogICAgIHJldHVybiBjb29raWU7CiB9CiAKLXN0YXRpYyBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiBidWlsdEF1dG9tYXRpb25Db29raWUoY29uc3QgU2Vzc2lvbjo6Q29va2llJiBjb29raWUp
CitzdGF0aWMgUmVmPEpTT046Ok9iamVjdD4gYnVpbHRBdXRvbWF0aW9uQ29va2llKGNvbnN0IFNl
c3Npb246OkNvb2tpZSYgY29va2llKQogewotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IGNvb2tp
ZU9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgYXV0byBjb29raWVPYmplY3Qg
PSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgIGNvb2tpZU9iamVjdC0+c2V0U3RyaW5nKCJu
YW1lIl9zLCBjb29raWUubmFtZSk7CiAgICAgY29va2llT2JqZWN0LT5zZXRTdHJpbmcoInZhbHVl
Il9zLCBjb29raWUudmFsdWUpOwogICAgIGNvb2tpZU9iamVjdC0+c2V0U3RyaW5nKCJwYXRoIl9z
LCBjb29raWUucGF0aC52YWx1ZU9yKCIvIikpOwpAQCAtMjI5NCw5ICsyMzkwLDkgQEAgc3RhdGlj
IFJlZlB0cjxKU09OOjpPYmplY3Q+IGJ1aWx0QXV0b21hdGlvbkNvb2tpZShjb25zdCBTZXNzaW9u
OjpDb29raWUmIGNvb2tpZSkKICAgICByZXR1cm4gY29va2llT2JqZWN0OwogfQogCi1zdGF0aWMg
UmVmUHRyPEpTT046Ok9iamVjdD4gc2VyaWFsaXplQ29va2llKGNvbnN0IFNlc3Npb246OkNvb2tp
ZSYgY29va2llKQorc3RhdGljIFJlZjxKU09OOjpPYmplY3Q+IHNlcmlhbGl6ZUNvb2tpZShjb25z
dCBTZXNzaW9uOjpDb29raWUmIGNvb2tpZSkKIHsKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBj
b29raWVPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGF1dG8gY29va2llT2Jq
ZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICBjb29raWVPYmplY3QtPnNldFN0cmlu
ZygibmFtZSJfcywgY29va2llLm5hbWUpOwogICAgIGNvb2tpZU9iamVjdC0+c2V0U3RyaW5nKCJ2
YWx1ZSJfcywgY29va2llLnZhbHVlKTsKICAgICBpZiAoY29va2llLnBhdGgpCkBAIC0yMzI1LDIz
ICsyNDIxLDI0IEBAIHZvaWQgU2Vzc2lvbjo6Z2V0QWxsQ29va2llcyhGdW5jdGlvbjx2b2lkIChD
b21tYW5kUmVzdWx0JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyCiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KIAotICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzID0g
SlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgYXV0byBwYXJhbWV0ZXJzID0gSlNPTjo6
T2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJicm93c2lu
Z0NvbnRleHRIYW5kbGUiX3MsIG1fdG9wbGV2ZWxCcm93c2luZ0NvbnRleHQudmFsdWUoKSk7CiAg
ICAgICAgIG1faG9zdC0+c2VuZENvbW1hbmRUb0JhY2tlbmQoImdldEFsbENvb2tpZXMiX3MsIFdU
Rk1vdmUocGFyYW1ldGVycyksIFtwcm90ZWN0ZWRUaGlzLCBjb21wbGV0aW9uSGFuZGxlciA9IFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXShTZXNzaW9uSG9zdDo6Q29tbWFuZFJlc3BvbnNlJiYg
cmVzcG9uc2UpIG11dGFibGUgewogICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmlzRXJyb3IgfHwg
IXJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0KSB7CiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhh
bmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChXVEZNb3ZlKHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0
KSkpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IFJlZlB0cjxKU09OOjpBcnJheT4gY29va2llc0FycmF5OwotICAgICAgICAgICAgaWYgKCFyZXNw
b25zZS5yZXNwb25zZU9iamVjdC0+Z2V0QXJyYXkoImNvb2tpZXMiX3MsIGNvb2tpZXNBcnJheSkp
IHsKKworICAgICAgICAgICAgYXV0byBjb29raWVzQXJyYXkgPSByZXNwb25zZS5yZXNwb25zZU9i
amVjdC0+Z2V0QXJyYXkoImNvb2tpZXMiX3MpOworICAgICAgICAgICAgaWYgKCFjb29raWVzQXJy
YXkpIHsKICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0Ojpm
YWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVycm9yKSk7CiAgICAgICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgUmVmUHRyPEpTT046OkFy
cmF5PiBjb29raWVzID0gSlNPTjo6QXJyYXk6OmNyZWF0ZSgpOworCisgICAgICAgICAgICBhdXRv
IGNvb2tpZXMgPSBKU09OOjpBcnJheTo6Y3JlYXRlKCk7CiAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgY29va2llc0FycmF5LT5sZW5ndGgoKTsgKytpKSB7Ci0gICAgICAgICAg
ICAgICAgUmVmUHRyPEpTT046OlZhbHVlPiBjb29raWVWYWx1ZSA9IGNvb2tpZXNBcnJheS0+Z2V0
KGkpOwotICAgICAgICAgICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IGNvb2tpZU9iamVjdDsK
LSAgICAgICAgICAgICAgICBpZiAoIWNvb2tpZVZhbHVlLT5hc09iamVjdChjb29raWVPYmplY3Qp
KSB7CisgICAgICAgICAgICAgICAgYXV0byBjb29raWVPYmplY3QgPSBjb29raWVzQXJyYXktPmdl
dChpKS0+YXNPYmplY3QoKTsKKyAgICAgICAgICAgICAgICBpZiAoIWNvb2tpZU9iamVjdCkgewog
ICAgICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWls
KENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVycm9yKSk7CiAgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9CkBAIC0yMzY1LDE0ICsyNDYyLDExIEBA
IHZvaWQgU2Vzc2lvbjo6Z2V0TmFtZWRDb29raWUoY29uc3QgU3RyaW5nJiBuYW1lLCBGdW5jdGlv
bjx2b2lkIChDb21tYW5kUmVzdWx0JiYpCiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihX
VEZNb3ZlKHJlc3VsdCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAg
IFJlZlB0cjxKU09OOjpBcnJheT4gY29va2llc0FycmF5OwotICAgICAgICByZXN1bHQucmVzdWx0
KCktPmFzQXJyYXkoY29va2llc0FycmF5KTsKKworICAgICAgICBhdXRvIGNvb2tpZXNBcnJheSA9
IHJlc3VsdC5yZXN1bHQoKS0+YXNBcnJheSgpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgY29va2llc0FycmF5LT5sZW5ndGgoKTsgKytpKSB7Ci0gICAgICAgICAgICBSZWZQdHI8
SlNPTjo6VmFsdWU+IGNvb2tpZVZhbHVlID0gY29va2llc0FycmF5LT5nZXQoaSk7Ci0gICAgICAg
ICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBjb29raWVPYmplY3Q7Ci0gICAgICAgICAgICBjb29r
aWVWYWx1ZS0+YXNPYmplY3QoY29va2llT2JqZWN0KTsKLSAgICAgICAgICAgIFN0cmluZyBjb29r
aWVOYW1lOwotICAgICAgICAgICAgY29va2llT2JqZWN0LT5nZXRTdHJpbmcoIm5hbWUiX3MsIGNv
b2tpZU5hbWUpOworICAgICAgICAgICAgYXV0byBjb29raWVPYmplY3QgPSBjb29raWVzQXJyYXkt
PmdldChpKS0+YXNPYmplY3QoKTsKKyAgICAgICAgICAgIGF1dG8gY29va2llTmFtZSA9IGNvb2tp
ZU9iamVjdC0+Z2V0U3RyaW5nKCJuYW1lIl9zKTsKICAgICAgICAgICAgIGlmIChjb29raWVOYW1l
ID09IG5hbWUpIHsKICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVz
dWx0OjpzdWNjZXNzKFdURk1vdmUoY29va2llT2JqZWN0KSkpOwogICAgICAgICAgICAgICAgIHJl
dHVybjsKQEAgLTIzOTQsNyArMjQ4OCw3IEBAIHZvaWQgU2Vzc2lvbjo6YWRkQ29va2llKGNvbnN0
IENvb2tpZSYgY29va2llLCBGdW5jdGlvbjx2b2lkIChDb21tYW5kUmVzdWx0JiYpPiYmCiAgICAg
ICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKHJlc3VsdCkpOwogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRl
cnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBhdXRvIHBhcmFtZXRlcnMgPSBK
U09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoImJy
b3dzaW5nQ29udGV4dEhhbmRsZSJfcywgbV90b3BsZXZlbEJyb3dzaW5nQ29udGV4dC52YWx1ZSgp
KTsKICAgICAgICAgcGFyYW1ldGVycy0+c2V0T2JqZWN0KCJjb29raWUiX3MsIFdURk1vdmUoY29v
a2llKSk7CiAgICAgICAgIG1faG9zdC0+c2VuZENvbW1hbmRUb0JhY2tlbmQoImFkZFNpbmdsZUNv
b2tpZSJfcywgV1RGTW92ZShwYXJhbWV0ZXJzKSwgW3Byb3RlY3RlZFRoaXMsIGNvbXBsZXRpb25I
YW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKFNlc3Npb25Ib3N0OjpDb21tYW5k
UmVzcG9uc2UmJiByZXNwb25zZSkgewpAQCAtMjQxOSw3ICsyNTEzLDcgQEAgdm9pZCBTZXNzaW9u
OjpkZWxldGVDb29raWUoY29uc3QgU3RyaW5nJiBuYW1lLCBGdW5jdGlvbjx2b2lkIChDb21tYW5k
UmVzdWx0JiYpPiYKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUocmVzdWx0
KSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgUmVmUHRyPEpTT046
Ok9iamVjdD4gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIGF1
dG8gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgIHBhcmFtZXRl
cnMtPnNldFN0cmluZygiYnJvd3NpbmdDb250ZXh0SGFuZGxlIl9zLCBtX3RvcGxldmVsQnJvd3Np
bmdDb250ZXh0LnZhbHVlKCkpOwogICAgICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoImNvb2tp
ZU5hbWUiX3MsIG5hbWUpOwogICAgICAgICBtX2hvc3QtPnNlbmRDb21tYW5kVG9CYWNrZW5kKCJk
ZWxldGVTaW5nbGVDb29raWUiX3MsIFdURk1vdmUocGFyYW1ldGVycyksIFtwcm90ZWN0ZWRUaGlz
LCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXShTZXNzaW9u
SG9zdDo6Q29tbWFuZFJlc3BvbnNlJiYgcmVzcG9uc2UpIHsKQEAgLTI0NDQsNyArMjUzOCw3IEBA
IHZvaWQgU2Vzc2lvbjo6ZGVsZXRlQWxsQ29va2llcyhGdW5jdGlvbjx2b2lkIChDb21tYW5kUmVz
dWx0JiYpPiYmIGNvbXBsZXRpb25IYW5kCiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihX
VEZNb3ZlKHJlc3VsdCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAg
IFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgp
OworICAgICAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAg
ICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoImJyb3dzaW5nQ29udGV4dEhhbmRsZSJfcywgbV90
b3BsZXZlbEJyb3dzaW5nQ29udGV4dC52YWx1ZSgpKTsKICAgICAgICAgbV9ob3N0LT5zZW5kQ29t
bWFuZFRvQmFja2VuZCgiZGVsZXRlQWxsQ29va2llcyJfcywgV1RGTW92ZShwYXJhbWV0ZXJzKSwg
W3Byb3RlY3RlZFRoaXMsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcildKFNlc3Npb25Ib3N0OjpDb21tYW5kUmVzcG9uc2UmJiByZXNwb25zZSkgewogICAgICAg
ICAgICAgaWYgKHJlc3BvbnNlLmlzRXJyb3IpIHsKQEAgLTI1MTcsMjMgKzI2MTEsMjMgQEAgdm9p
ZCBTZXNzaW9uOjpwZXJmb3JtQWN0aW9ucyhWZWN0b3I8VmVjdG9yPEFjdGlvbj4+JiYgYWN0aW9u
c0J5VGljaywgRnVuY3Rpb248dm8KICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0g
ICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNy
ZWF0ZSgpOworICAgICAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgp
OwogICAgICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoImhhbmRsZSJfcywgbV90b3BsZXZlbEJy
b3dzaW5nQ29udGV4dC52YWx1ZSgpKTsKICAgICAgICAgaWYgKG1fY3VycmVudEJyb3dzaW5nQ29u
dGV4dCkKICAgICAgICAgICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiZnJhbWVIYW5kbGUiX3Ms
IG1fY3VycmVudEJyb3dzaW5nQ29udGV4dC52YWx1ZSgpKTsKLSAgICAgICAgUmVmUHRyPEpTT046
OkFycmF5PiBpbnB1dFNvdXJjZXMgPSBKU09OOjpBcnJheTo6Y3JlYXRlKCk7CisgICAgICAgIGF1
dG8gaW5wdXRTb3VyY2VzID0gSlNPTjo6QXJyYXk6OmNyZWF0ZSgpOwogICAgICAgICBmb3IgKGNv
bnN0IGF1dG8mIGlucHV0U291cmNlIDogbV9hY3RpdmVJbnB1dFNvdXJjZXMpIHsKLSAgICAgICAg
ICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IGlucHV0U291cmNlT2JqZWN0ID0gSlNPTjo6T2JqZWN0
OjpjcmVhdGUoKTsKKyAgICAgICAgICAgIGF1dG8gaW5wdXRTb3VyY2VPYmplY3QgPSBKU09OOjpP
YmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICAgICAgaW5wdXRTb3VyY2VPYmplY3QtPnNldFN0cmlu
Zygic291cmNlSWQiX3MsIGlucHV0U291cmNlLmtleSk7CiAgICAgICAgICAgICBpbnB1dFNvdXJj
ZU9iamVjdC0+c2V0U3RyaW5nKCJzb3VyY2VUeXBlIl9zLCBhdXRvbWF0aW9uU291cmNlVHlwZShp
bnB1dFNvdXJjZS52YWx1ZS50eXBlKSk7CiAgICAgICAgICAgICBpbnB1dFNvdXJjZXMtPnB1c2hP
YmplY3QoV1RGTW92ZShpbnB1dFNvdXJjZU9iamVjdCkpOwogICAgICAgICB9CiAgICAgICAgIHBh
cmFtZXRlcnMtPnNldEFycmF5KCJpbnB1dFNvdXJjZXMiX3MsIFdURk1vdmUoaW5wdXRTb3VyY2Vz
KSk7Ci0gICAgICAgIFJlZlB0cjxKU09OOjpBcnJheT4gc3RlcHMgPSBKU09OOjpBcnJheTo6Y3Jl
YXRlKCk7CisgICAgICAgIGF1dG8gc3RlcHMgPSBKU09OOjpBcnJheTo6Y3JlYXRlKCk7CiAgICAg
ICAgIGZvciAoY29uc3QgYXV0byYgdGljayA6IGFjdGlvbnNCeVRpY2spIHsKLSAgICAgICAgICAg
IFJlZlB0cjxKU09OOjpBcnJheT4gc3RhdGVzID0gSlNPTjo6QXJyYXk6OmNyZWF0ZSgpOworICAg
ICAgICAgICAgYXV0byBzdGF0ZXMgPSBKU09OOjpBcnJheTo6Y3JlYXRlKCk7CiAgICAgICAgICAg
ICBmb3IgKGNvbnN0IGF1dG8mIGFjdGlvbiA6IHRpY2spIHsKLSAgICAgICAgICAgICAgICBSZWZQ
dHI8SlNPTjo6T2JqZWN0PiBzdGF0ZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAg
ICAgICAgICAgYXV0byBzdGF0ZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgICAg
ICAgICAgYXV0byYgY3VycmVudFN0YXRlID0gaW5wdXRTb3VyY2VTdGF0ZShhY3Rpb24uaWQpOwog
ICAgICAgICAgICAgICAgIHN0YXRlLT5zZXRTdHJpbmcoInNvdXJjZUlkIl9zLCBhY3Rpb24uaWQp
OwogICAgICAgICAgICAgICAgIHN3aXRjaCAoYWN0aW9uLnR5cGUpIHsKQEAgLTI1NTEsNyArMjY0
NSw3IEBAIHZvaWQgU2Vzc2lvbjo6cGVyZm9ybUFjdGlvbnMoVmVjdG9yPFZlY3RvcjxBY3Rpb24+
PiYmIGFjdGlvbnNCeVRpY2ssIEZ1bmN0aW9uPHZvCiAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICAgICAgY2FzZSBBY3Rpb246OlN1YnR5cGU6OlBvaW50ZXJN
b3ZlOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+c2V0U3RyaW5nKCJvcmlnaW4i
X3MsIGF1dG9tYXRpb25PcmlnaW5UeXBlKGFjdGlvbi5vcmlnaW4tPnR5cGUpKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IGxvY2F0aW9uID0gSlNPTjo6T2Jq
ZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gbG9jYXRpb24gPSBK
U09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb24t
PnNldEludGVnZXIoIngiX3MsIGFjdGlvbi54LnZhbHVlKCkpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgbG9jYXRpb24tPnNldEludGVnZXIoInkiX3MsIGFjdGlvbi55LnZhbHVlKCkpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgc3RhdGUtPnNldE9iamVjdCgibG9jYXRpb24iX3MsIFdURk1v
dmUobG9jYXRpb24pKTsKQEAgLTI2MTcsNyArMjcxMSw3IEBAIHZvaWQgU2Vzc2lvbjo6cGVyZm9y
bUFjdGlvbnMoVmVjdG9yPFZlY3RvcjxBY3Rpb24+PiYmIGFjdGlvbnNCeVRpY2ssIEZ1bmN0aW9u
PHZvCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHN0YXRlcy0+cHVzaE9iamVj
dChXVEZNb3ZlKHN0YXRlKSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBSZWZQdHI8SlNP
Tjo6T2JqZWN0PiBzdGVwU3RhdGVzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAg
ICAgIGF1dG8gc3RlcFN0YXRlcyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgICAg
ICBzdGVwU3RhdGVzLT5zZXRBcnJheSgic3RhdGVzIl9zLCBXVEZNb3ZlKHN0YXRlcykpOwogICAg
ICAgICAgICAgc3RlcHMtPnB1c2hPYmplY3QoV1RGTW92ZShzdGVwU3RhdGVzKSk7CiAgICAgICAg
IH0KQEAgLTI2NDMsNyArMjczNyw3IEBAIHZvaWQgU2Vzc2lvbjo6cmVsZWFzZUFjdGlvbnMoRnVu
Y3Rpb248dm9pZCAoQ29tbWFuZFJlc3VsdCYmKT4mJiBjb21wbGV0aW9uSGFuZGxlCiAgICAgbV9h
Y3RpdmVJbnB1dFNvdXJjZXMuY2xlYXIoKTsKICAgICBtX2lucHV0U3RhdGVUYWJsZS5jbGVhcigp
OwogCi0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6
Y3JlYXRlKCk7CisgICAgYXV0byBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsK
ICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoImhhbmRsZSJfcywgbV90b3BsZXZlbEJyb3dzaW5n
Q29udGV4dC52YWx1ZSgpKTsKICAgICBtX2hvc3QtPnNlbmRDb21tYW5kVG9CYWNrZW5kKCJjYW5j
ZWxJbnRlcmFjdGlvblNlcXVlbmNlIl9zLCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBbcHJvdGVjdGVk
VGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpXShTZXNzaW9uSG9zdDo6Q29tbWFuZFJlc3BvbnNlJiYgcmVzcG9uc2UpIHsK
ICAgICAgICAgaWYgKHJlc3BvbnNlLmlzRXJyb3IpIHsKQEAgLTI2NjEsNyArMjc1NSw3IEBAIHZv
aWQgU2Vzc2lvbjo6ZGlzbWlzc0FsZXJ0KEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSZXN1bHQmJik+
JiYgY29tcGxldGlvbkhhbmRsZXIpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBSZWZQ
dHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAg
ICBhdXRvIHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgIHBhcmFtZXRl
cnMtPnNldFN0cmluZygiYnJvd3NpbmdDb250ZXh0SGFuZGxlIl9zLCBtX3RvcGxldmVsQnJvd3Np
bmdDb250ZXh0LnZhbHVlKCkpOwogICAgIG1faG9zdC0+c2VuZENvbW1hbmRUb0JhY2tlbmQoImRp
c21pc3NDdXJyZW50SmF2YVNjcmlwdERpYWxvZyJfcywgV1RGTW92ZShwYXJhbWV0ZXJzKSwgW3By
b3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKV0oU2Vzc2lvbkhvc3Q6OkNvbW1hbmRSZXNwb25zZSYmIHJlc3Bv
bnNlKSB7CiAgICAgICAgIGlmIChyZXNwb25zZS5pc0Vycm9yKSB7CkBAIC0yNjc5LDcgKzI3NzMs
NyBAQCB2b2lkIFNlc3Npb246OmFjY2VwdEFsZXJ0KEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSZXN1
bHQmJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAg
ICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUo
KTsKKyAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgIHBh
cmFtZXRlcnMtPnNldFN0cmluZygiYnJvd3NpbmdDb250ZXh0SGFuZGxlIl9zLCBtX3RvcGxldmVs
QnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwogICAgIG1faG9zdC0+c2VuZENvbW1hbmRUb0JhY2tl
bmQoImFjY2VwdEN1cnJlbnRKYXZhU2NyaXB0RGlhbG9nIl9zLCBXVEZNb3ZlKHBhcmFtZXRlcnMp
LCBbcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXShTZXNzaW9uSG9zdDo6Q29tbWFuZFJlc3BvbnNlJiYg
cmVzcG9uc2UpIHsKICAgICAgICAgaWYgKHJlc3BvbnNlLmlzRXJyb3IpIHsKQEAgLTI2OTcsMTgg
KzI3OTEsMjAgQEAgdm9pZCBTZXNzaW9uOjpnZXRBbGVydFRleHQoRnVuY3Rpb248dm9pZCAoQ29t
bWFuZFJlc3VsdCYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6
OmNyZWF0ZSgpOworICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7
CiAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJicm93c2luZ0NvbnRleHRIYW5kbGUiX3MsIG1f
dG9wbGV2ZWxCcm93c2luZ0NvbnRleHQudmFsdWUoKSk7CiAgICAgbV9ob3N0LT5zZW5kQ29tbWFu
ZFRvQmFja2VuZCgibWVzc2FnZU9mQ3VycmVudEphdmFTY3JpcHREaWFsb2ciX3MsIFdURk1vdmUo
cGFyYW1ldGVycyksIFtwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNvbXBsZXRpb25I
YW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKFNlc3Npb25Ib3N0OjpDb21tYW5k
UmVzcG9uc2UmJiByZXNwb25zZSkgewogICAgICAgICBpZiAocmVzcG9uc2UuaXNFcnJvciB8fCAh
cmVzcG9uc2UucmVzcG9uc2VPYmplY3QpIHsKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVy
KENvbW1hbmRSZXN1bHQ6OmZhaWwoV1RGTW92ZShyZXNwb25zZS5yZXNwb25zZU9iamVjdCkpKTsK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBTdHJpbmcgdmFsdWVTdHJp
bmc7Ci0gICAgICAgIGlmICghcmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdldFN0cmluZygibWVz
c2FnZSJfcywgdmFsdWVTdHJpbmcpKSB7CisKKyAgICAgICAgYXV0byB2YWx1ZVN0cmluZyA9IHJl
c3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRTdHJpbmcoIm1lc3NhZ2UiX3MpOworICAgICAgICBp
ZiAoIXZhbHVlU3RyaW5nKSB7CiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5k
UmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVycm9yKSk7CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KKwogICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cihDb21tYW5kUmVzdWx0OjpzdWNjZXNzKEpTT046OlZhbHVlOjpjcmVhdGUodmFsdWVTdHJpbmcp
KSk7CiAgICAgfSk7CiB9CkBAIC0yNzIwLDcgKzI4MTYsNyBAQCB2b2lkIFNlc3Npb246OnNlbmRB
bGVydFRleHQoY29uc3QgU3RyaW5nJiB0ZXh0LCBGdW5jdGlvbjx2b2lkIChDb21tYW5kUmVzdWx0
JiYpPgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4g
cGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgYXV0byBwYXJhbWV0ZXJz
ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoImJy
b3dzaW5nQ29udGV4dEhhbmRsZSJfcywgbV90b3BsZXZlbEJyb3dzaW5nQ29udGV4dC52YWx1ZSgp
KTsKICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoInVzZXJJbnB1dCJfcywgdGV4dCk7CiAgICAg
bV9ob3N0LT5zZW5kQ29tbWFuZFRvQmFja2VuZCgic2V0VXNlcklucHV0Rm9yQ3VycmVudEphdmFT
Y3JpcHRQcm9tcHQiX3MsIFdURk1vdmUocGFyYW1ldGVycyksIFtwcm90ZWN0ZWRUaGlzID0gbWFr
ZVJlZigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cildKFNlc3Npb25Ib3N0OjpDb21tYW5kUmVzcG9uc2UmJiByZXNwb25zZSkgewpAQCAtMjc0NCw3
ICsyODQwLDcgQEAgdm9pZCBTZXNzaW9uOjp0YWtlU2NyZWVuc2hvdChPcHRpb25hbDxTdHJpbmc+
IGVsZW1lbnRJRCwgT3B0aW9uYWw8Ym9vbD4gc2Nyb2xsSW4KICAgICAgICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKFdURk1vdmUocmVzdWx0KSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KLSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVycyA9IEpTT046Ok9iamVj
dDo6Y3JlYXRlKCk7CisgICAgICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3Jl
YXRlKCk7CiAgICAgICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiaGFuZGxlIl9zLCBtX3RvcGxl
dmVsQnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwogICAgICAgICBpZiAobV9jdXJyZW50QnJvd3Np
bmdDb250ZXh0KQogICAgICAgICAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJmcmFtZUhhbmRs
ZSJfcywgbV9jdXJyZW50QnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwpAQCAtMjc1OCwxMSArMjg1
NCwxMyBAQCB2b2lkIFNlc3Npb246OnRha2VTY3JlZW5zaG90KE9wdGlvbmFsPFN0cmluZz4gZWxl
bWVudElELCBPcHRpb25hbDxib29sPiBzY3JvbGxJbgogICAgICAgICAgICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoV1RGTW92ZShyZXNwb25zZS5yZXNwb25zZU9i
amVjdCkpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBTdHJpbmcgZGF0YTsKLSAgICAgICAgICAgIGlmICghcmVzcG9uc2UucmVzcG9uc2VPYmpl
Y3QtPmdldFN0cmluZygiZGF0YSJfcywgZGF0YSkpIHsKKworICAgICAgICAgICAgYXV0byBkYXRh
ID0gcmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdldFN0cmluZygiZGF0YSJfcyk7CisgICAgICAg
ICAgICBpZiAoIWRhdGEpIHsKICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21t
YW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVycm9yKSk7
CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpzdWNjZXNzKEpTT046OlZhbHVlOjpjcmVh
dGUoZGF0YSkpKTsKICAgICAgICAgfSk7CiAgICAgfSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
RHJpdmVyL1Nlc3Npb24uaCBiL1NvdXJjZS9XZWJEcml2ZXIvU2Vzc2lvbi5oCmluZGV4IDg0NDlh
YTg5ODhiNzc5Mzc0Zjg4MmZlZDdkMmZjZGNkMzQ0NzM0ZTIuLjhlMzRiZWNjNTkzM2UyZDg4ODhk
ZTVhNWQ2ZGIwZjZmMTkyNGI0MjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJEcml2ZXIvU2Vzc2lv
bi5oCisrKyBiL1NvdXJjZS9XZWJEcml2ZXIvU2Vzc2lvbi5oCkBAIC0xNDMsMTAgKzE0MywxMCBA
QCBwcml2YXRlOgogICAgIHZvaWQgcmVwb3J0VW5leHBlY3RlZEFsZXJ0T3BlbihGdW5jdGlvbjx2
b2lkIChDb21tYW5kUmVzdWx0JiYpPiYmKTsKIAogICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IGNy
ZWF0ZUVsZW1lbnQoUmVmUHRyPEpTT046OlZhbHVlPiYmKTsKLSAgICBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiBjcmVhdGVFbGVtZW50KGNvbnN0IFN0cmluZyYgZWxlbWVudElEKTsKKyAgICBSZWY8SlNP
Tjo6T2JqZWN0PiBjcmVhdGVFbGVtZW50KGNvbnN0IFN0cmluZyYgZWxlbWVudElEKTsKICAgICBS
ZWZQdHI8SlNPTjo6T2JqZWN0PiBleHRyYWN0RWxlbWVudChKU09OOjpWYWx1ZSYpOwogICAgIFN0
cmluZyBleHRyYWN0RWxlbWVudElEKEpTT046OlZhbHVlJik7Ci0gICAgUmVmUHRyPEpTT046OlZh
bHVlPiBoYW5kbGVTY3JpcHRSZXN1bHQoUmVmUHRyPEpTT046OlZhbHVlPiYmKTsKKyAgICBSZWZQ
dHI8SlNPTjo6VmFsdWU+IGhhbmRsZVNjcmlwdFJlc3VsdChSZWY8SlNPTjo6VmFsdWU+JiYpOwog
ICAgIHZvaWQgZWxlbWVudElzRWRpdGFibGUoY29uc3QgU3RyaW5nJiBlbGVtZW50SUQsIEZ1bmN0
aW9uPHZvaWQgKENvbW1hbmRSZXN1bHQmJik+JiYpOwogCiAgICAgc3RydWN0IFBvaW50IHsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJEcml2ZXIvU2Vzc2lvbkhvc3QuY3BwIGIvU291cmNlL1dlYkRy
aXZlci9TZXNzaW9uSG9zdC5jcHAKaW5kZXggZDE2OWI5NWM0YjZjZWU0Mjg5ZDhjODg5ZTU1M2Rm
NzYzOTU1YWFiYy4uNDcyZWJkZmFmNGE2MmI2YjIwMGI0ZDFlYzdiMjFiZTU5MTE4NWUwMSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkRyaXZlci9TZXNzaW9uSG9zdC5jcHAKKysrIGIvU291cmNlL1dl
YkRyaXZlci9TZXNzaW9uSG9zdC5jcHAKQEAgLTYyLDMxICs2MiwyNyBAQCBsb25nIFNlc3Npb25I
b3N0OjpzZW5kQ29tbWFuZFRvQmFja2VuZChjb25zdCBTdHJpbmcmIGNvbW1hbmQsIFJlZlB0cjxK
U09OOjpPYmplYwogCiB2b2lkIFNlc3Npb25Ib3N0OjpkaXNwYXRjaE1lc3NhZ2UoY29uc3QgU3Ry
aW5nJiBtZXNzYWdlKQogewotICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gbWVzc2FnZVZhbHVlOwot
ICAgIGlmICghSlNPTjo6VmFsdWU6OnBhcnNlSlNPTihtZXNzYWdlLCBtZXNzYWdlVmFsdWUpKQor
ICAgIGF1dG8gbWVzc2FnZVZhbHVlID0gSlNPTjo6VmFsdWU6OnBhcnNlSlNPTihtZXNzYWdlKTsK
KyAgICBpZiAoIW1lc3NhZ2VWYWx1ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVmUHRyPEpT
T046Ok9iamVjdD4gbWVzc2FnZU9iamVjdDsKLSAgICBpZiAoIW1lc3NhZ2VWYWx1ZS0+YXNPYmpl
Y3QobWVzc2FnZU9iamVjdCkpCisgICAgYXV0byBtZXNzYWdlT2JqZWN0ID0gbWVzc2FnZVZhbHVl
LT5hc09iamVjdCgpOworICAgIGlmICghbWVzc2FnZU9iamVjdCkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgbG9uZyBzZXF1ZW5jZUlEOwotICAgIGlmICghbWVzc2FnZU9iamVjdC0+Z2V0SW50ZWdl
cigiaWQiX3MsIHNlcXVlbmNlSUQpKQorICAgIGF1dG8gc2VxdWVuY2VJRCA9IG1lc3NhZ2VPYmpl
Y3QtPmdldEludGVnZXIoImlkIl9zKTsKKyAgICBpZiAoIXNlcXVlbmNlSUQpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIGF1dG8gcmVzcG9uc2VIYW5kbGVyID0gbV9jb21tYW5kUmVxdWVzdHMudGFr
ZShzZXF1ZW5jZUlEKTsKKyAgICBhdXRvIHJlc3BvbnNlSGFuZGxlciA9IG1fY29tbWFuZFJlcXVl
c3RzLnRha2UoKnNlcXVlbmNlSUQpOwogICAgIEFTU0VSVChyZXNwb25zZUhhbmRsZXIpOwogCiAg
ICAgQ29tbWFuZFJlc3BvbnNlIHJlc3BvbnNlOwotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IGVy
cm9yT2JqZWN0OwotICAgIGlmIChtZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoImVycm9yIl9zLCBl
cnJvck9iamVjdCkpIHsKKyAgICBpZiAoYXV0byBlcnJvck9iamVjdCA9IG1lc3NhZ2VPYmplY3Qt
PmdldE9iamVjdCgiZXJyb3IiX3MpKSB7CiAgICAgICAgIHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0
ID0gV1RGTW92ZShlcnJvck9iamVjdCk7CiAgICAgICAgIHJlc3BvbnNlLmlzRXJyb3IgPSB0cnVl
OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHJlc3VsdE9iamVj
dDsKLSAgICAgICAgaWYgKG1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgicmVzdWx0Il9zLCByZXN1
bHRPYmplY3QpICYmIHJlc3VsdE9iamVjdC0+c2l6ZSgpKQotICAgICAgICAgICAgcmVzcG9uc2Uu
cmVzcG9uc2VPYmplY3QgPSBXVEZNb3ZlKHJlc3VsdE9iamVjdCk7Ci0gICAgfQorICAgIH0gZWxz
ZSBpZiAoYXV0byByZXN1bHRPYmplY3QgPSBtZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoInJlc3Vs
dCJfcykpCisgICAgICAgIHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0ID0gV1RGTW92ZShyZXN1bHRP
YmplY3QpOwogCiAgICAgcmVzcG9uc2VIYW5kbGVyKFdURk1vdmUocmVzcG9uc2UpKTsKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJEcml2ZXIvV2ViRHJpdmVyU2VydmljZS5jcHAgYi9Tb3VyY2Uv
V2ViRHJpdmVyL1dlYkRyaXZlclNlcnZpY2UuY3BwCmluZGV4IDliYjk3NmQ5ZjBjNWUzYjQ4OWIy
MDlmM2RiODUwZGMzMjFiNjBmNGUuLjI0NmY3NzJhZDRhNDgwZjM2YTJkMTQ0MTc1NDMyMDU0NWMy
ZGY0ZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJEcml2ZXIvV2ViRHJpdmVyU2VydmljZS5jcHAK
KysrIGIvU291cmNlL1dlYkRyaXZlci9XZWJEcml2ZXJTZXJ2aWNlLmNwcApAQCAtMjM5LDEzICsy
MzksMTQgQEAgdm9pZCBXZWJEcml2ZXJTZXJ2aWNlOjpoYW5kbGVSZXF1ZXN0KEhUVFBSZXF1ZXN0
SGFuZGxlcjo6UmVxdWVzdCYmIHJlcXVlc3QsIEZ1bmMKIAogICAgIFJlZlB0cjxKU09OOjpPYmpl
Y3Q+IHBhcmFtZXRlcnNPYmplY3Q7CiAgICAgaWYgKG1ldGhvZC52YWx1ZSgpID09IEhUVFBNZXRo
b2Q6OlBvc3QpIHsKLSAgICAgICAgUmVmUHRyPEpTT046OlZhbHVlPiBtZXNzYWdlVmFsdWU7Ci0g
ICAgICAgIGlmICghSlNPTjo6VmFsdWU6OnBhcnNlSlNPTihTdHJpbmc6OmZyb21VVEY4KHJlcXVl
c3QuZGF0YSwgcmVxdWVzdC5kYXRhTGVuZ3RoKSwgbWVzc2FnZVZhbHVlKSkgeworICAgICAgICBh
dXRvIG1lc3NhZ2VWYWx1ZSA9IEpTT046OlZhbHVlOjpwYXJzZUpTT04oU3RyaW5nOjpmcm9tVVRG
OChyZXF1ZXN0LmRhdGEsIHJlcXVlc3QuZGF0YUxlbmd0aCkpOworICAgICAgICBpZiAoIW1lc3Nh
Z2VWYWx1ZSkgewogICAgICAgICAgICAgc2VuZFJlc3BvbnNlKFdURk1vdmUocmVwbHlIYW5kbGVy
KSwgQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OkludmFsaWRB
cmd1bWVudCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgaWYg
KCFtZXNzYWdlVmFsdWUtPmFzT2JqZWN0KHBhcmFtZXRlcnNPYmplY3QpKSB7CisgICAgICAgIHBh
cmFtZXRlcnNPYmplY3QgPSBtZXNzYWdlVmFsdWUtPmFzT2JqZWN0KCk7CisgICAgICAgIGlmICgh
cGFyYW1ldGVyc09iamVjdCkgewogICAgICAgICAgICAgc2VuZFJlc3BvbnNlKFdURk1vdmUocmVw
bHlIYW5kbGVyKSwgQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6
OkludmFsaWRBcmd1bWVudCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC0y
NzQsNyArMjc1LDcgQEAgdm9pZCBXZWJEcml2ZXJTZXJ2aWNlOjpzZW5kUmVzcG9uc2UoRnVuY3Rp
b248dm9pZCAoSFRUUFJlcXVlc3RIYW5kbGVyOjpSZXNwb25zZSYKICAgICAgICAgZXJyb3JPYmpl
Y3QtPnNldFN0cmluZygic3RhY2t0cmFjZSJfcywgZW1wdHlTdHJpbmcoKSk7CiAgICAgICAgIC8v
IElmIHRoZSBlcnJvciBkYXRhIGRpY3Rpb25hcnkgY29udGFpbnMgYW55IGVudHJpZXMsIHNldCB0
aGUgImRhdGEiIGZpZWxkIG9uIGJvZHkgdG8gYSBuZXcgSlNPTiBPYmplY3QgcG9wdWxhdGVkIHdp
dGggdGhlIGRpY3Rpb25hcnkuCiAgICAgICAgIGlmIChhdXRvJiBhZGRpdGlvbmFsRGF0YSA9IHJl
c3VsdC5hZGRpdGlvbmFsRXJyb3JEYXRhKCkpCi0gICAgICAgICAgICBlcnJvck9iamVjdC0+c2V0
T2JqZWN0KCJkYXRhIl9zLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiB7IGFkZGl0aW9uYWxEYXRhIH0p
OworICAgICAgICAgICAgZXJyb3JPYmplY3QtPnNldE9iamVjdCgiZGF0YSJfcywgKmFkZGl0aW9u
YWxEYXRhKTsKICAgICAgICAgLy8gU2VuZCBhIHJlc3BvbnNlIHdpdGggc3RhdHVzIGFuZCBib2R5
IGFzIGFyZ3VtZW50cy4KICAgICAgICAgcmVzdWx0VmFsdWUgPSBXVEZNb3ZlKGVycm9yT2JqZWN0
KTsKICAgICB9IGVsc2UgaWYgKGF1dG8gdmFsdWUgPSByZXN1bHQucmVzdWx0KCkpCkBAIC0yODQs
MjQgKzI4NSwyNCBAQCB2b2lkIFdlYkRyaXZlclNlcnZpY2U6OnNlbmRSZXNwb25zZShGdW5jdGlv
bjx2b2lkIChIVFRQUmVxdWVzdEhhbmRsZXI6OlJlc3BvbnNlJgogCiAgICAgLy8gV2hlbiByZXF1
aXJlZCB0byBzZW5kIGEgcmVzcG9uc2UuCiAgICAgLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dl
YmRyaXZlci93ZWJkcml2ZXItc3BlYy5odG1sI2Rmbi1zZW5kLWEtcmVzcG9uc2UKLSAgICBSZWZQ
dHI8SlNPTjo6T2JqZWN0PiByZXNwb25zZU9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7
Ci0gICAgcmVzcG9uc2VPYmplY3QtPnNldFZhbHVlKCJ2YWx1ZSJfcywgV1RGTW92ZShyZXN1bHRW
YWx1ZSkpOworICAgIGF1dG8gcmVzcG9uc2VPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgp
OworICAgIHJlc3BvbnNlT2JqZWN0LT5zZXRWYWx1ZSgidmFsdWUiX3MsIHJlc3VsdFZhbHVlLnJl
bGVhc2VOb25OdWxsKCkpOwogICAgIHJlcGx5SGFuZGxlcih7IHJlc3VsdC5odHRwU3RhdHVzQ29k
ZSgpLCByZXNwb25zZU9iamVjdC0+dG9KU09OU3RyaW5nKCkudXRmOCgpLCAiYXBwbGljYXRpb24v
anNvbjsgY2hhcnNldD11dGYtOCJfcyB9KTsKIH0KIAogc3RhdGljIE9wdGlvbmFsPGRvdWJsZT4g
dmFsdWVBc051bWJlckluUmFuZ2UoY29uc3QgSlNPTjo6VmFsdWUmIHZhbHVlLCBkb3VibGUgbWlu
QWxsb3dlZCA9IDAsIGRvdWJsZSBtYXhBbGxvd2VkID0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+
OjptYXgoKSkKIHsKLSAgICBkb3VibGUgbnVtYmVyOwotICAgIGlmICghdmFsdWUuYXNEb3VibGUo
bnVtYmVyKSkKKyAgICBhdXRvIG51bWJlciA9IHZhbHVlLmFzRG91YmxlKCk7CisgICAgaWYgKCFu
dW1iZXIpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBpZiAoc3RkOjppc25h
bihudW1iZXIpIHx8IHN0ZDo6aXNpbmYobnVtYmVyKSkKKyAgICBpZiAoc3RkOjppc25hbigqbnVt
YmVyKSB8fCBzdGQ6OmlzaW5mKCpudW1iZXIpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OwogCi0gICAgaWYgKG51bWJlciA8IG1pbkFsbG93ZWQgfHwgbnVtYmVyID4gbWF4QWxsb3dlZCkK
KyAgICBpZiAoKm51bWJlciA8IG1pbkFsbG93ZWQgfHwgKm51bWJlciA+IG1heEFsbG93ZWQpCiAg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICByZXR1cm4gbnVtYmVyOworICAgIHJl
dHVybiAqbnVtYmVyOwogfQogCiBzdGF0aWMgT3B0aW9uYWw8dWludDY0X3Q+IHVuc2lnbmVkVmFs
dWUoSlNPTjo6VmFsdWUmIHZhbHVlKQpAQCAtMzM4LDcgKzMzOSw3IEBAIHN0YXRpYyBPcHRpb25h
bDxUaW1lb3V0cz4gZGVzZXJpYWxpemVUaW1lb3V0cyhKU09OOjpPYmplY3QmIHRpbWVvdXRzT2Jq
ZWN0LCBJZ25vCiAgICAgICAgIH0KIAogICAgICAgICAvLyBJZiB2YWx1ZSBpcyBub3QgYW4gaW50
ZWdlciwgb3IgaXQgaXMgbGVzcyB0aGFuIDAgb3IgZ3JlYXRlciB0aGFuIHRoZSBtYXhpbXVtIHNh
ZmUgaW50ZWdlciwgcmV0dXJuIGVycm9yIHdpdGggZXJyb3IgY29kZSBpbnZhbGlkIGFyZ3VtZW50
LgotICAgICAgICBhdXRvIHRpbWVvdXRNUyA9IHVuc2lnbmVkVmFsdWUoKml0LT52YWx1ZSk7Cisg
ICAgICAgIGF1dG8gdGltZW91dE1TID0gdW5zaWduZWRWYWx1ZShpdC0+dmFsdWUpOwogICAgICAg
ICBpZiAoIXRpbWVvdXRNUykKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKQEAg
LTM1OSw2MSArMzYwLDYxIEBAIHN0YXRpYyBPcHRpb25hbDxQcm94eT4gZGVzZXJpYWxpemVQcm94
eShKU09OOjpPYmplY3QmIHByb3h5T2JqZWN0KQogICAgIC8vIMKnNy4xIFByb3h5LgogICAgIC8v
IGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJkcml2ZXIvI3Byb3h5CiAgICAgUHJveHkgcHJveHk7
Ci0gICAgaWYgKCFwcm94eU9iamVjdC5nZXRTdHJpbmcoInByb3h5VHlwZSJfcywgcHJveHkudHlw
ZSkpCisKKyAgICBwcm94eS50eXBlID0gcHJveHlPYmplY3QuZ2V0U3RyaW5nKCJwcm94eVR5cGUi
X3MpOworICAgIGlmICghcHJveHkudHlwZSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
IAogICAgIGlmIChwcm94eS50eXBlID09ICJkaXJlY3QiIHx8IHByb3h5LnR5cGUgPT0gImF1dG9k
ZXRlY3QiIHx8IHByb3h5LnR5cGUgPT0gInN5c3RlbSIpCiAgICAgICAgIHJldHVybiBwcm94eTsK
IAogICAgIGlmIChwcm94eS50eXBlID09ICJwYWMiKSB7Ci0gICAgICAgIFN0cmluZyBhdXRvY29u
ZmlnVVJMOwotICAgICAgICBpZiAoIXByb3h5T2JqZWN0LmdldFN0cmluZygicHJveHlBdXRvY29u
ZmlnVXJsIl9zLCBhdXRvY29uZmlnVVJMKSkKKyAgICAgICAgcHJveHkuYXV0b2NvbmZpZ1VSTCA9
IHByb3h5T2JqZWN0LmdldFN0cmluZygicHJveHlBdXRvY29uZmlnVXJsIl9zKTsKKyAgICAgICAg
aWYgKCFwcm94eS5hdXRvY29uZmlnVVJMKQogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKIAotICAgICAgICBwcm94eS5hdXRvY29uZmlnVVJMID0gYXV0b2NvbmZpZ1VSTDsKICAgICAg
ICAgcmV0dXJuIHByb3h5OwogICAgIH0KIAogICAgIGlmIChwcm94eS50eXBlID09ICJtYW51YWwi
KSB7Ci0gICAgICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gdmFsdWU7Ci0gICAgICAgIGlmIChwcm94
eU9iamVjdC5nZXRWYWx1ZSgiZnRwUHJveHkiX3MsIHZhbHVlKSkgewotICAgICAgICAgICAgU3Ry
aW5nIGZ0cFByb3h5OwotICAgICAgICAgICAgaWYgKCF2YWx1ZS0+YXNTdHJpbmcoZnRwUHJveHkp
KQorICAgICAgICBpZiAoYXV0byB2YWx1ZSA9IHByb3h5T2JqZWN0LmdldFZhbHVlKCJmdHBQcm94
eSJfcykpIHsKKyAgICAgICAgICAgIGF1dG8gZnRwUHJveHkgPSB2YWx1ZS0+YXNTdHJpbmcoKTsK
KyAgICAgICAgICAgIGlmICghZnRwUHJveHkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKIAogICAgICAgICAgICAgcHJveHkuZnRwVVJMID0gVVJMKHsgfSwgbWFrZVN0cmlu
ZygiZnRwOi8vIiwgZnRwUHJveHkpKTsKICAgICAgICAgICAgIGlmICghcHJveHkuZnRwVVJMLT5p
c1ZhbGlkKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAgICAg
fQotICAgICAgICBpZiAocHJveHlPYmplY3QuZ2V0VmFsdWUoImh0dHBQcm94eSJfcywgdmFsdWUp
KSB7Ci0gICAgICAgICAgICBTdHJpbmcgaHR0cFByb3h5OwotICAgICAgICAgICAgaWYgKCF2YWx1
ZS0+YXNTdHJpbmcoaHR0cFByb3h5KSkKKyAgICAgICAgaWYgKGF1dG8gdmFsdWUgPSBwcm94eU9i
amVjdC5nZXRWYWx1ZSgiaHR0cFByb3h5Il9zKSkgeworICAgICAgICAgICAgYXV0byBodHRwUHJv
eHkgPSB2YWx1ZS0+YXNTdHJpbmcoKTsKKyAgICAgICAgICAgIGlmICghaHR0cFByb3h5KQogICAg
ICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICAgICAgICAgIHByb3h5Lmh0
dHBVUkwgPSBVUkwoeyB9LCBtYWtlU3RyaW5nKCJodHRwOi8vIiwgaHR0cFByb3h5KSk7CiAgICAg
ICAgICAgICBpZiAoIXByb3h5Lmh0dHBVUkwtPmlzVmFsaWQoKSkKICAgICAgICAgICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAgICB9Ci0gICAgICAgIGlmIChwcm94eU9iamVjdC5n
ZXRWYWx1ZSgic3NsUHJveHkiX3MsIHZhbHVlKSkgewotICAgICAgICAgICAgU3RyaW5nIHNzbFBy
b3h5OwotICAgICAgICAgICAgaWYgKCF2YWx1ZS0+YXNTdHJpbmcoc3NsUHJveHkpKQorICAgICAg
ICBpZiAoYXV0byB2YWx1ZSA9IHByb3h5T2JqZWN0LmdldFZhbHVlKCJzc2xQcm94eSJfcykpIHsK
KyAgICAgICAgICAgIGF1dG8gc3NsUHJveHkgPSB2YWx1ZS0+YXNTdHJpbmcoKTsKKyAgICAgICAg
ICAgIGlmICghc3NsUHJveHkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
IAogICAgICAgICAgICAgcHJveHkuaHR0cHNVUkwgPSBVUkwoeyB9LCBtYWtlU3RyaW5nKCJodHRw
czovLyIsIHNzbFByb3h5KSk7CiAgICAgICAgICAgICBpZiAoIXByb3h5Lmh0dHBzVVJMLT5pc1Zh
bGlkKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAgICAgfQot
ICAgICAgICBpZiAocHJveHlPYmplY3QuZ2V0VmFsdWUoInNvY2tzUHJveHkiLCB2YWx1ZSkpIHsK
LSAgICAgICAgICAgIFN0cmluZyBzb2Nrc1Byb3h5OwotICAgICAgICAgICAgaWYgKCF2YWx1ZS0+
YXNTdHJpbmcoc29ja3NQcm94eSkpCisgICAgICAgIGlmIChhdXRvIHZhbHVlID0gcHJveHlPYmpl
Y3QuZ2V0VmFsdWUoInNvY2tzUHJveHkiKSkgeworICAgICAgICAgICAgYXV0byBzb2Nrc1Byb3h5
ID0gdmFsdWUtPmFzU3RyaW5nKCk7CisgICAgICAgICAgICBpZiAoIXNvY2tzUHJveHkpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgICAgICAgICAgcHJveHkuc29j
a3NVUkwgPSBVUkwoeyB9LCBtYWtlU3RyaW5nKCJzb2NrczovLyIsIHNvY2tzUHJveHkpKTsKICAg
ICAgICAgICAgIGlmICghcHJveHkuc29ja3NVUkwtPmlzVmFsaWQoKSkKICAgICAgICAgICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgICAgICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+
IHNvY2tzVmVyc2lvblZhbHVlOwotICAgICAgICAgICAgaWYgKCFwcm94eU9iamVjdC5nZXRWYWx1
ZSgic29ja3NWZXJzaW9uIiwgc29ja3NWZXJzaW9uVmFsdWUpKQorICAgICAgICAgICAgYXV0byBz
b2Nrc1ZlcnNpb25WYWx1ZSA9IHByb3h5T2JqZWN0LmdldFZhbHVlKCJzb2Nrc1ZlcnNpb24iKTsK
KyAgICAgICAgICAgIGlmICghc29ja3NWZXJzaW9uVmFsdWUpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKIAogICAgICAgICAgICAgYXV0byBzb2Nrc1ZlcnNpb24gPSB1bnNp
Z25lZFZhbHVlKCpzb2Nrc1ZlcnNpb25WYWx1ZSk7CkBAIC00MjEsMTggKzQyMiwxNyBAQCBzdGF0
aWMgT3B0aW9uYWw8UHJveHk+IGRlc2VyaWFsaXplUHJveHkoSlNPTjo6T2JqZWN0JiBwcm94eU9i
amVjdCkKICAgICAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAgICAgICAg
cHJveHkuc29ja3NWZXJzaW9uID0gc29ja3NWZXJzaW9uLnZhbHVlKCk7CiAgICAgICAgIH0KLSAg
ICAgICAgaWYgKHByb3h5T2JqZWN0LmdldFZhbHVlKCJub1Byb3h5Il9zLCB2YWx1ZSkpIHsKLSAg
ICAgICAgICAgIFJlZlB0cjxKU09OOjpBcnJheT4gbm9Qcm94eTsKLSAgICAgICAgICAgIGlmICgh
dmFsdWUtPmFzQXJyYXkobm9Qcm94eSkpCisgICAgICAgIGlmIChhdXRvIHZhbHVlID0gcHJveHlP
YmplY3QuZ2V0VmFsdWUoIm5vUHJveHkiX3MpKSB7CisgICAgICAgICAgICBhdXRvIG5vUHJveHkg
PSB2YWx1ZS0+YXNBcnJheSgpOworICAgICAgICAgICAgaWYgKCFub1Byb3h5KQogICAgICAgICAg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICAgICAgICAgIGF1dG8gbm9Qcm94eUxl
bmd0aCA9IG5vUHJveHktPmxlbmd0aCgpOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG5vUHJveHlMZW5ndGg7ICsraSkgewotICAgICAgICAgICAgICAgIFJlZlB0cjxKU09O
OjpWYWx1ZT4gYWRkcmVzc1ZhbHVlID0gbm9Qcm94eS0+Z2V0KGkpOwotICAgICAgICAgICAgICAg
IFN0cmluZyBhZGRyZXNzOwotICAgICAgICAgICAgICAgIGlmICghYWRkcmVzc1ZhbHVlLT5hc1N0
cmluZyhhZGRyZXNzKSkKKyAgICAgICAgICAgICAgICBhdXRvIGFkZHJlc3MgPSBub1Byb3h5LT5n
ZXQoaSktPmFzU3RyaW5nKCk7CisgICAgICAgICAgICAgICAgaWYgKCFhZGRyZXNzKQogICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgICAgICAgICAgICAgIHByb3h5
Lmlnbm9yZUFkZHJlc3NMaXN0LmFwcGVuZChXVEZNb3ZlKGFkZHJlc3MpKTsKKyAgICAgICAgICAg
ICAgICBwcm94eS5pZ25vcmVBZGRyZXNzTGlzdC5hcHBlbmQoYWRkcmVzcyk7CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KIApAQCAtNDcxLDQzICs0NzEsNTMgQEAgc3RhdGljIE9wdGlvbmFsPFVu
aGFuZGxlZFByb21wdEJlaGF2aW9yPiBkZXNlcmlhbGl6ZVVuaGFuZGxlZFByb21wdEJlaGF2aW9y
KGNvbnMKIHZvaWQgV2ViRHJpdmVyU2VydmljZTo6cGFyc2VDYXBhYmlsaXRpZXMoY29uc3QgSlNP
Tjo6T2JqZWN0JiBtYXRjaGVkQ2FwYWJpbGl0aWVzLCBDYXBhYmlsaXRpZXMmIGNhcGFiaWxpdGll
cykgY29uc3QKIHsKICAgICAvLyBNYXRjaGVkIGNhcGFiaWxpdGllcyBoYXZlIGFscmVhZHkgYmVl
biB2YWxpZGF0ZWQuCi0gICAgYm9vbCBhY2NlcHRJbnNlY3VyZUNlcnRzOwotICAgIGlmIChtYXRj
aGVkQ2FwYWJpbGl0aWVzLmdldEJvb2xlYW4oImFjY2VwdEluc2VjdXJlQ2VydHMiX3MsIGFjY2Vw
dEluc2VjdXJlQ2VydHMpKQotICAgICAgICBjYXBhYmlsaXRpZXMuYWNjZXB0SW5zZWN1cmVDZXJ0
cyA9IGFjY2VwdEluc2VjdXJlQ2VydHM7Ci0gICAgYm9vbCBzZXRXaW5kb3dSZWN0OwotICAgIGlm
IChtYXRjaGVkQ2FwYWJpbGl0aWVzLmdldEJvb2xlYW4oInNldFdpbmRvd1JlY3QiX3MsIHNldFdp
bmRvd1JlY3QpKQotICAgICAgICBjYXBhYmlsaXRpZXMuc2V0V2luZG93UmVjdCA9IHNldFdpbmRv
d1JlY3Q7Ci0gICAgU3RyaW5nIGJyb3dzZXJOYW1lOwotICAgIGlmIChtYXRjaGVkQ2FwYWJpbGl0
aWVzLmdldFN0cmluZygiYnJvd3Nlck5hbWUiX3MsIGJyb3dzZXJOYW1lKSkKKyAgICBhdXRvIGFj
Y2VwdEluc2VjdXJlQ2VydHMgPSBtYXRjaGVkQ2FwYWJpbGl0aWVzLmdldEJvb2xlYW4oImFjY2Vw
dEluc2VjdXJlQ2VydHMiX3MpOworICAgIGlmIChhY2NlcHRJbnNlY3VyZUNlcnRzKQorICAgICAg
ICBjYXBhYmlsaXRpZXMuYWNjZXB0SW5zZWN1cmVDZXJ0cyA9ICphY2NlcHRJbnNlY3VyZUNlcnRz
OworCisgICAgYXV0byBzZXRXaW5kb3dSZWN0ID0gbWF0Y2hlZENhcGFiaWxpdGllcy5nZXRCb29s
ZWFuKCJzZXRXaW5kb3dSZWN0Il9zKTsKKyAgICBpZiAoc2V0V2luZG93UmVjdCkKKyAgICAgICAg
Y2FwYWJpbGl0aWVzLnNldFdpbmRvd1JlY3QgPSAqc2V0V2luZG93UmVjdDsKKworICAgIGF1dG8g
YnJvd3Nlck5hbWUgPSBtYXRjaGVkQ2FwYWJpbGl0aWVzLmdldFN0cmluZygiYnJvd3Nlck5hbWUi
X3MpOworICAgIGlmICghIWJyb3dzZXJOYW1lKQogICAgICAgICBjYXBhYmlsaXRpZXMuYnJvd3Nl
ck5hbWUgPSBicm93c2VyTmFtZTsKLSAgICBTdHJpbmcgYnJvd3NlclZlcnNpb247Ci0gICAgaWYg
KG1hdGNoZWRDYXBhYmlsaXRpZXMuZ2V0U3RyaW5nKCJicm93c2VyVmVyc2lvbiJfcywgYnJvd3Nl
clZlcnNpb24pKQorCisgICAgYXV0byBicm93c2VyVmVyc2lvbiA9IG1hdGNoZWRDYXBhYmlsaXRp
ZXMuZ2V0U3RyaW5nKCJicm93c2VyVmVyc2lvbiJfcyk7CisgICAgaWYgKCEhYnJvd3NlclZlcnNp
b24pCiAgICAgICAgIGNhcGFiaWxpdGllcy5icm93c2VyVmVyc2lvbiA9IGJyb3dzZXJWZXJzaW9u
OwotICAgIFN0cmluZyBwbGF0Zm9ybU5hbWU7Ci0gICAgaWYgKG1hdGNoZWRDYXBhYmlsaXRpZXMu
Z2V0U3RyaW5nKCJwbGF0Zm9ybU5hbWUiX3MsIHBsYXRmb3JtTmFtZSkpCisKKyAgICBhdXRvIHBs
YXRmb3JtTmFtZSA9IG1hdGNoZWRDYXBhYmlsaXRpZXMuZ2V0U3RyaW5nKCJwbGF0Zm9ybU5hbWUi
X3MpOworICAgIGlmICghIXBsYXRmb3JtTmFtZSkKICAgICAgICAgY2FwYWJpbGl0aWVzLnBsYXRm
b3JtTmFtZSA9IHBsYXRmb3JtTmFtZTsKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwcm94eTsK
LSAgICBpZiAobWF0Y2hlZENhcGFiaWxpdGllcy5nZXRPYmplY3QoInByb3h5Il9zLCBwcm94eSkp
CisKKyAgICBhdXRvIHByb3h5ID0gbWF0Y2hlZENhcGFiaWxpdGllcy5nZXRPYmplY3QoInByb3h5
Il9zKTsKKyAgICBpZiAocHJveHkpCiAgICAgICAgIGNhcGFiaWxpdGllcy5wcm94eSA9IGRlc2Vy
aWFsaXplUHJveHkoKnByb3h5KTsKLSAgICBib29sIHN0cmljdEZpbGVJbnRlcmFjdGFiaWxpdHk7
Ci0gICAgaWYgKG1hdGNoZWRDYXBhYmlsaXRpZXMuZ2V0Qm9vbGVhbigic3RyaWN0RmlsZUludGVy
YWN0YWJpbGl0eSJfcywgc3RyaWN0RmlsZUludGVyYWN0YWJpbGl0eSkpCi0gICAgICAgIGNhcGFi
aWxpdGllcy5zdHJpY3RGaWxlSW50ZXJhY3RhYmlsaXR5ID0gc3RyaWN0RmlsZUludGVyYWN0YWJp
bGl0eTsKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiB0aW1lb3V0czsKLSAgICBpZiAobWF0Y2hl
ZENhcGFiaWxpdGllcy5nZXRPYmplY3QoInRpbWVvdXRzIl9zLCB0aW1lb3V0cykpCisKKyAgICBh
dXRvIHN0cmljdEZpbGVJbnRlcmFjdGFiaWxpdHkgPSBtYXRjaGVkQ2FwYWJpbGl0aWVzLmdldEJv
b2xlYW4oInN0cmljdEZpbGVJbnRlcmFjdGFiaWxpdHkiX3MpOworICAgIGlmIChzdHJpY3RGaWxl
SW50ZXJhY3RhYmlsaXR5KQorICAgICAgICBjYXBhYmlsaXRpZXMuc3RyaWN0RmlsZUludGVyYWN0
YWJpbGl0eSA9ICpzdHJpY3RGaWxlSW50ZXJhY3RhYmlsaXR5OworCisgICAgYXV0byB0aW1lb3V0
cyA9IG1hdGNoZWRDYXBhYmlsaXRpZXMuZ2V0T2JqZWN0KCJ0aW1lb3V0cyJfcyk7CisgICAgaWYg
KHRpbWVvdXRzKQogICAgICAgICBjYXBhYmlsaXRpZXMudGltZW91dHMgPSBkZXNlcmlhbGl6ZVRp
bWVvdXRzKCp0aW1lb3V0cywgSWdub3JlVW5rbm93blRpbWVvdXQ6Ok5vKTsKLSAgICBTdHJpbmcg
cGFnZUxvYWRTdHJhdGVneTsKLSAgICBpZiAobWF0Y2hlZENhcGFiaWxpdGllcy5nZXRTdHJpbmco
InBhZ2VMb2FkU3RyYXRlZ3kiX3MsIHBhZ2VMb2FkU3RyYXRlZ3kpKQorCisgICAgYXV0byBwYWdl
TG9hZFN0cmF0ZWd5ID0gbWF0Y2hlZENhcGFiaWxpdGllcy5nZXRTdHJpbmcoInBhZ2VMb2FkU3Ry
YXRlZ3kiX3MpOworICAgIGlmICghIXBhZ2VMb2FkU3RyYXRlZ3kpCiAgICAgICAgIGNhcGFiaWxp
dGllcy5wYWdlTG9hZFN0cmF0ZWd5ID0gZGVzZXJpYWxpemVQYWdlTG9hZFN0cmF0ZWd5KHBhZ2VM
b2FkU3RyYXRlZ3kpOwotICAgIFN0cmluZyB1bmhhbmRsZWRQcm9tcHRCZWhhdmlvcjsKLSAgICBp
ZiAobWF0Y2hlZENhcGFiaWxpdGllcy5nZXRTdHJpbmcoInVuaGFuZGxlZFByb21wdEJlaGF2aW9y
Il9zLCB1bmhhbmRsZWRQcm9tcHRCZWhhdmlvcikpCisKKyAgICBhdXRvIHVuaGFuZGxlZFByb21w
dEJlaGF2aW9yID0gbWF0Y2hlZENhcGFiaWxpdGllcy5nZXRTdHJpbmcoInVuaGFuZGxlZFByb21w
dEJlaGF2aW9yIl9zKTsKKyAgICBpZiAoISF1bmhhbmRsZWRQcm9tcHRCZWhhdmlvcikKICAgICAg
ICAgY2FwYWJpbGl0aWVzLnVuaGFuZGxlZFByb21wdEJlaGF2aW9yID0gZGVzZXJpYWxpemVVbmhh
bmRsZWRQcm9tcHRCZWhhdmlvcih1bmhhbmRsZWRQcm9tcHRCZWhhdmlvcik7CisKICAgICBwbGF0
Zm9ybVBhcnNlQ2FwYWJpbGl0aWVzKG1hdGNoZWRDYXBhYmlsaXRpZXMsIGNhcGFiaWxpdGllcyk7
CiB9CiAKIGJvb2wgV2ViRHJpdmVyU2VydmljZTo6ZmluZFNlc3Npb25PckNvbXBsZXRlV2l0aEVy
cm9yKEpTT046Ok9iamVjdCYgcGFyYW1ldGVycywgRnVuY3Rpb248dm9pZCAoQ29tbWFuZFJlc3Vs
dCYmKT4mIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIFN0cmluZyBzZXNzaW9uSUQ7Ci0gICAg
aWYgKCFwYXJhbWV0ZXJzLmdldFN0cmluZygic2Vzc2lvbklkIl9zLCBzZXNzaW9uSUQpKSB7Cisg
ICAgYXV0byBzZXNzaW9uSUQgPSBwYXJhbWV0ZXJzLmdldFN0cmluZygic2Vzc2lvbklkIl9zKTsK
KyAgICBpZiAoIXNlc3Npb25JRCkgewogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5k
UmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6SW52YWxpZEFyZ3VtZW50KSk7
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CkBAIC01MzAsNTAgKzU0MCw1MCBAQCBSZWZQ
dHI8SlNPTjo6T2JqZWN0PiBXZWJEcml2ZXJTZXJ2aWNlOjp2YWxpZGF0ZWRDYXBhYmlsaXRpZXMo
Y29uc3QgSlNPTjo6T2JqZWN0JgogewogICAgIC8vIMKnNy4yIFByb2Nlc3NpbmcgQ2FwYWJpbGl0
aWVzLgogICAgIC8vIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJkcml2ZXIvd2ViZHJpdmVyLXNw
ZWMuaHRtbCNkZm4tdmFsaWRhdGUtY2FwYWJpbGl0aWVzCi0gICAgUmVmUHRyPEpTT046Ok9iamVj
dD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBhdXRvIHJlc3VsdCA9IEpT
T046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgYXV0byBlbmQgPSBjYXBhYmlsaXRpZXMuZW5kKCk7
CiAgICAgZm9yIChhdXRvIGl0ID0gY2FwYWJpbGl0aWVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkgewogICAgICAgICBpZiAoaXQtPnZhbHVlLT5pc051bGwoKSkKICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICBpZiAoaXQtPmtleSA9PSAiYWNjZXB0SW5zZWN1cmVDZXJ0cyIpIHsKLSAg
ICAgICAgICAgIGJvb2wgYWNjZXB0SW5zZWN1cmVDZXJ0czsKLSAgICAgICAgICAgIGlmICghaXQt
PnZhbHVlLT5hc0Jvb2xlYW4oYWNjZXB0SW5zZWN1cmVDZXJ0cykpCisgICAgICAgICAgICBhdXRv
IGFjY2VwdEluc2VjdXJlQ2VydHMgPSBpdC0+dmFsdWUtPmFzQm9vbGVhbigpOworICAgICAgICAg
ICAgaWYgKCFhY2NlcHRJbnNlY3VyZUNlcnRzKQogICAgICAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOwotICAgICAgICAgICAgcmVzdWx0LT5zZXRCb29sZWFuKGl0LT5rZXksIGFjY2VwdEluc2Vj
dXJlQ2VydHMpOworICAgICAgICAgICAgcmVzdWx0LT5zZXRCb29sZWFuKGl0LT5rZXksICphY2Nl
cHRJbnNlY3VyZUNlcnRzKTsKICAgICAgICAgfSBlbHNlIGlmIChpdC0+a2V5ID09ICJicm93c2Vy
TmFtZSIgfHwgaXQtPmtleSA9PSAiYnJvd3NlclZlcnNpb24iIHx8IGl0LT5rZXkgPT0gInBsYXRm
b3JtTmFtZSIpIHsKLSAgICAgICAgICAgIFN0cmluZyBzdHJpbmdWYWx1ZTsKLSAgICAgICAgICAg
IGlmICghaXQtPnZhbHVlLT5hc1N0cmluZyhzdHJpbmdWYWx1ZSkpCisgICAgICAgICAgICBhdXRv
IHN0cmluZ1ZhbHVlID0gaXQtPnZhbHVlLT5hc1N0cmluZygpOworICAgICAgICAgICAgaWYgKCFz
dHJpbmdWYWx1ZSkKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgICAg
IHJlc3VsdC0+c2V0U3RyaW5nKGl0LT5rZXksIHN0cmluZ1ZhbHVlKTsKICAgICAgICAgfSBlbHNl
IGlmIChpdC0+a2V5ID09ICJwYWdlTG9hZFN0cmF0ZWd5IikgewotICAgICAgICAgICAgU3RyaW5n
IHBhZ2VMb2FkU3RyYXRlZ3k7Ci0gICAgICAgICAgICBpZiAoIWl0LT52YWx1ZS0+YXNTdHJpbmco
cGFnZUxvYWRTdHJhdGVneSkgfHwgIWRlc2VyaWFsaXplUGFnZUxvYWRTdHJhdGVneShwYWdlTG9h
ZFN0cmF0ZWd5KSkKKyAgICAgICAgICAgIGF1dG8gcGFnZUxvYWRTdHJhdGVneSA9IGl0LT52YWx1
ZS0+YXNTdHJpbmcoKTsKKyAgICAgICAgICAgIGlmICghcGFnZUxvYWRTdHJhdGVneSB8fCAhZGVz
ZXJpYWxpemVQYWdlTG9hZFN0cmF0ZWd5KHBhZ2VMb2FkU3RyYXRlZ3kpKQogICAgICAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOwogICAgICAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoaXQtPmtl
eSwgcGFnZUxvYWRTdHJhdGVneSk7CiAgICAgICAgIH0gZWxzZSBpZiAoaXQtPmtleSA9PSAicHJv
eHkiKSB7Ci0gICAgICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwcm94eTsKLSAgICAgICAg
ICAgIGlmICghaXQtPnZhbHVlLT5hc09iamVjdChwcm94eSkgfHwgIWRlc2VyaWFsaXplUHJveHko
KnByb3h5KSkKKyAgICAgICAgICAgIGF1dG8gcHJveHkgPSBpdC0+dmFsdWUtPmFzT2JqZWN0KCk7
CisgICAgICAgICAgICBpZiAoIXByb3h5IHx8ICFkZXNlcmlhbGl6ZVByb3h5KCpwcm94eSkpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgICAgICByZXN1bHQtPnNldFZh
bHVlKGl0LT5rZXksIFJlZlB0cjxKU09OOjpWYWx1ZT4oaXQtPnZhbHVlKSk7CisgICAgICAgICAg
ICByZXN1bHQtPnNldFZhbHVlKGl0LT5rZXksICpwcm94eSk7CiAgICAgICAgIH0gZWxzZSBpZiAo
aXQtPmtleSA9PSAic3RyaWN0RmlsZUludGVyYWN0YWJpbGl0eSIpIHsKLSAgICAgICAgICAgIGJv
b2wgc3RyaWN0RmlsZUludGVyYWN0YWJpbGl0eTsKLSAgICAgICAgICAgIGlmICghaXQtPnZhbHVl
LT5hc0Jvb2xlYW4oc3RyaWN0RmlsZUludGVyYWN0YWJpbGl0eSkpCisgICAgICAgICAgICBhdXRv
IHN0cmljdEZpbGVJbnRlcmFjdGFiaWxpdHkgPSBpdC0+dmFsdWUtPmFzQm9vbGVhbigpOworICAg
ICAgICAgICAgaWYgKCFzdHJpY3RGaWxlSW50ZXJhY3RhYmlsaXR5KQogICAgICAgICAgICAgICAg
IHJldHVybiBudWxscHRyOwotICAgICAgICAgICAgcmVzdWx0LT5zZXRCb29sZWFuKGl0LT5rZXks
IHN0cmljdEZpbGVJbnRlcmFjdGFiaWxpdHkpOworICAgICAgICAgICAgcmVzdWx0LT5zZXRCb29s
ZWFuKGl0LT5rZXksICpzdHJpY3RGaWxlSW50ZXJhY3RhYmlsaXR5KTsKICAgICAgICAgfSBlbHNl
IGlmIChpdC0+a2V5ID09ICJ0aW1lb3V0cyIpIHsKLSAgICAgICAgICAgIFJlZlB0cjxKU09OOjpP
YmplY3Q+IHRpbWVvdXRzOwotICAgICAgICAgICAgaWYgKCFpdC0+dmFsdWUtPmFzT2JqZWN0KHRp
bWVvdXRzKSB8fCAhZGVzZXJpYWxpemVUaW1lb3V0cygqdGltZW91dHMsIElnbm9yZVVua25vd25U
aW1lb3V0OjpObykpCisgICAgICAgICAgICBhdXRvIHRpbWVvdXRzID0gaXQtPnZhbHVlLT5hc09i
amVjdCgpOworICAgICAgICAgICAgaWYgKCF0aW1lb3V0cyB8fCAhZGVzZXJpYWxpemVUaW1lb3V0
cygqdGltZW91dHMsIElnbm9yZVVua25vd25UaW1lb3V0OjpObykpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0gICAgICAgICAgICByZXN1bHQtPnNldFZhbHVlKGl0LT5rZXksIFJl
ZlB0cjxKU09OOjpWYWx1ZT4oaXQtPnZhbHVlKSk7CisgICAgICAgICAgICByZXN1bHQtPnNldFZh
bHVlKGl0LT5rZXksICp0aW1lb3V0cyk7CiAgICAgICAgIH0gZWxzZSBpZiAoaXQtPmtleSA9PSAi
dW5oYW5kbGVkUHJvbXB0QmVoYXZpb3IiKSB7Ci0gICAgICAgICAgICBTdHJpbmcgdW5oYW5kbGVk
UHJvbXB0QmVoYXZpb3I7Ci0gICAgICAgICAgICBpZiAoIWl0LT52YWx1ZS0+YXNTdHJpbmcodW5o
YW5kbGVkUHJvbXB0QmVoYXZpb3IpIHx8ICFkZXNlcmlhbGl6ZVVuaGFuZGxlZFByb21wdEJlaGF2
aW9yKHVuaGFuZGxlZFByb21wdEJlaGF2aW9yKSkKKyAgICAgICAgICAgIGF1dG8gdW5oYW5kbGVk
UHJvbXB0QmVoYXZpb3IgPSBpdC0+dmFsdWUtPmFzU3RyaW5nKCk7CisgICAgICAgICAgICBpZiAo
IXVuaGFuZGxlZFByb21wdEJlaGF2aW9yIHx8ICFkZXNlcmlhbGl6ZVVuaGFuZGxlZFByb21wdEJl
aGF2aW9yKHVuaGFuZGxlZFByb21wdEJlaGF2aW9yKSkKICAgICAgICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKICAgICAgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKGl0LT5rZXksIHVuaGFuZGxl
ZFByb21wdEJlaGF2aW9yKTsKICAgICAgICAgfSBlbHNlIGlmIChpdC0+a2V5LmZpbmQoIjoiKSAh
PSBub3RGb3VuZCkgewogICAgICAgICAgICAgaWYgKCFwbGF0Zm9ybVZhbGlkYXRlQ2FwYWJpbGl0
eShpdC0+a2V5LCBpdC0+dmFsdWUpKQogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwot
ICAgICAgICAgICAgcmVzdWx0LT5zZXRWYWx1ZShpdC0+a2V5LCBSZWZQdHI8SlNPTjo6VmFsdWU+
KGl0LT52YWx1ZSkpOworICAgICAgICAgICAgcmVzdWx0LT5zZXRWYWx1ZShpdC0+a2V5LCBpdC0+
dmFsdWUuY29weVJlZigpKTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKICAgICB9CkBAIC01ODQsMTQgKzU5NCwxNCBAQCBSZWZQdHI8SlNPTjo6T2JqZWN0PiBX
ZWJEcml2ZXJTZXJ2aWNlOjptZXJnZUNhcGFiaWxpdGllcyhjb25zdCBKU09OOjpPYmplY3QmIHJl
cQogewogICAgIC8vIMKnNy4yIFByb2Nlc3NpbmcgQ2FwYWJpbGl0aWVzLgogICAgIC8vIGh0dHBz
Oi8vdzNjLmdpdGh1Yi5pby93ZWJkcml2ZXIvd2ViZHJpdmVyLXNwZWMuaHRtbCNkZm4tbWVyZ2lu
Zy1jYXBhYmlsaXRpZXMKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpP
YmplY3Q6OmNyZWF0ZSgpOworICAgIGF1dG8gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUo
KTsKICAgICBhdXRvIHJlcXVpcmVkRW5kID0gcmVxdWlyZWRDYXBhYmlsaXRpZXMuZW5kKCk7CiAg
ICAgZm9yIChhdXRvIGl0ID0gcmVxdWlyZWRDYXBhYmlsaXRpZXMuYmVnaW4oKTsgaXQgIT0gcmVx
dWlyZWRFbmQ7ICsraXQpCi0gICAgICAgIHJlc3VsdC0+c2V0VmFsdWUoaXQtPmtleSwgUmVmUHRy
PEpTT046OlZhbHVlPihpdC0+dmFsdWUpKTsKKyAgICAgICAgcmVzdWx0LT5zZXRWYWx1ZShpdC0+
a2V5LCBpdC0+dmFsdWUuY29weVJlZigpKTsKIAogICAgIGF1dG8gZmlyc3RNYXRjaEVuZCA9IGZp
cnN0TWF0Y2hDYXBhYmlsaXRpZXMuZW5kKCk7CiAgICAgZm9yIChhdXRvIGl0ID0gZmlyc3RNYXRj
aENhcGFiaWxpdGllcy5iZWdpbigpOyBpdCAhPSBmaXJzdE1hdGNoRW5kOyArK2l0KQotICAgICAg
ICByZXN1bHQtPnNldFZhbHVlKGl0LT5rZXksIFJlZlB0cjxKU09OOjpWYWx1ZT4oaXQtPnZhbHVl
KSk7CisgICAgICAgIHJlc3VsdC0+c2V0VmFsdWUoaXQtPmtleSwgaXQtPnZhbHVlLmNvcHlSZWYo
KSk7CiAKICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAtNjA0LDcgKzYxNCw3IEBAIFJlZlB0cjxK
U09OOjpPYmplY3Q+IFdlYkRyaXZlclNlcnZpY2U6Om1hdGNoQ2FwYWJpbGl0aWVzKGNvbnN0IEpT
T046Ok9iamVjdCYgbWVyCiAKICAgICAvLyBTb21lIGNhcGFiaWxpdGllcyBsaWtlIGJyb3dzZXIg
bmFtZSBhbmQgdmVyc2lvbiBtaWdodCBuZWVkIHRvIGxhdW5jaCB0aGUgYnJvd3NlciwKICAgICAv
LyBzbyB3ZSBvbmx5IHJlamVjdCB0aGUga25vd24gY2FwYWJpbGl0aWVzIHRoYXQgZG9uJ3QgbWF0
Y2guCi0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gbWF0Y2hlZENhcGFiaWxpdGllcyA9IEpTT046
Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgYXV0byBtYXRjaGVkQ2FwYWJpbGl0aWVzID0gSlNPTjo6
T2JqZWN0OjpjcmVhdGUoKTsKICAgICBpZiAocGxhdGZvcm1DYXBhYmlsaXRpZXMuYnJvd3Nlck5h
bWUpCiAgICAgICAgIG1hdGNoZWRDYXBhYmlsaXRpZXMtPnNldFN0cmluZygiYnJvd3Nlck5hbWUi
X3MsIHBsYXRmb3JtQ2FwYWJpbGl0aWVzLmJyb3dzZXJOYW1lLnZhbHVlKCkpOwogICAgIGlmIChw
bGF0Zm9ybUNhcGFiaWxpdGllcy5icm93c2VyVmVyc2lvbikKQEAgLTYyMSwzNSArNjMxLDI4IEBA
IFJlZlB0cjxKU09OOjpPYmplY3Q+IFdlYkRyaXZlclNlcnZpY2U6Om1hdGNoQ2FwYWJpbGl0aWVz
KGNvbnN0IEpTT046Ok9iamVjdCYgbWVyCiAgICAgYXV0byBlbmQgPSBtZXJnZWRDYXBhYmlsaXRp
ZXMuZW5kKCk7CiAgICAgZm9yIChhdXRvIGl0ID0gbWVyZ2VkQ2FwYWJpbGl0aWVzLmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICBpZiAoaXQtPmtleSA9PSAiYnJvd3Nlck5hbWUi
ICYmIHBsYXRmb3JtQ2FwYWJpbGl0aWVzLmJyb3dzZXJOYW1lKSB7Ci0gICAgICAgICAgICBTdHJp
bmcgYnJvd3Nlck5hbWU7Ci0gICAgICAgICAgICBpdC0+dmFsdWUtPmFzU3RyaW5nKGJyb3dzZXJO
YW1lKTsKKyAgICAgICAgICAgIGF1dG8gYnJvd3Nlck5hbWUgPSBpdC0+dmFsdWUtPmFzU3RyaW5n
KCk7CiAgICAgICAgICAgICBpZiAoIWVxdWFsSWdub3JpbmdBU0NJSUNhc2UocGxhdGZvcm1DYXBh
YmlsaXRpZXMuYnJvd3Nlck5hbWUudmFsdWUoKSwgYnJvd3Nlck5hbWUpKQogICAgICAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOwogICAgICAgICB9IGVsc2UgaWYgKGl0LT5rZXkgPT0gImJyb3dz
ZXJWZXJzaW9uIiAmJiBwbGF0Zm9ybUNhcGFiaWxpdGllcy5icm93c2VyVmVyc2lvbikgewotICAg
ICAgICAgICAgU3RyaW5nIGJyb3dzZXJWZXJzaW9uOwotICAgICAgICAgICAgaXQtPnZhbHVlLT5h
c1N0cmluZyhicm93c2VyVmVyc2lvbik7CisgICAgICAgICAgICBhdXRvIGJyb3dzZXJWZXJzaW9u
ID0gaXQtPnZhbHVlLT5hc1N0cmluZygpOwogICAgICAgICAgICAgaWYgKCFwbGF0Zm9ybUNvbXBh
cmVCcm93c2VyVmVyc2lvbnMoYnJvd3NlclZlcnNpb24sIHBsYXRmb3JtQ2FwYWJpbGl0aWVzLmJy
b3dzZXJWZXJzaW9uLnZhbHVlKCkpKQogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwog
ICAgICAgICB9IGVsc2UgaWYgKGl0LT5rZXkgPT0gInBsYXRmb3JtTmFtZSIgJiYgcGxhdGZvcm1D
YXBhYmlsaXRpZXMucGxhdGZvcm1OYW1lKSB7Ci0gICAgICAgICAgICBTdHJpbmcgcGxhdGZvcm1O
YW1lOwotICAgICAgICAgICAgaXQtPnZhbHVlLT5hc1N0cmluZyhwbGF0Zm9ybU5hbWUpOworICAg
ICAgICAgICAgYXV0byBwbGF0Zm9ybU5hbWUgPSBpdC0+dmFsdWUtPmFzU3RyaW5nKCk7CiAgICAg
ICAgICAgICBpZiAoIWVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHBsYXRmb3JtTmFtZSwg
ImFueSIpICYmIHBsYXRmb3JtQ2FwYWJpbGl0aWVzLnBsYXRmb3JtTmFtZS52YWx1ZSgpICE9IHBs
YXRmb3JtTmFtZSkKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgfSBl
bHNlIGlmIChpdC0+a2V5ID09ICJhY2NlcHRJbnNlY3VyZUNlcnRzIiAmJiBwbGF0Zm9ybUNhcGFi
aWxpdGllcy5hY2NlcHRJbnNlY3VyZUNlcnRzKSB7Ci0gICAgICAgICAgICBib29sIGFjY2VwdElu
c2VjdXJlQ2VydHM7Ci0gICAgICAgICAgICBpdC0+dmFsdWUtPmFzQm9vbGVhbihhY2NlcHRJbnNl
Y3VyZUNlcnRzKTsKKyAgICAgICAgICAgIGF1dG8gYWNjZXB0SW5zZWN1cmVDZXJ0cyA9IGl0LT52
YWx1ZS0+YXNCb29sZWFuKCk7CiAgICAgICAgICAgICBpZiAoYWNjZXB0SW5zZWN1cmVDZXJ0cyAm
JiAhcGxhdGZvcm1DYXBhYmlsaXRpZXMuYWNjZXB0SW5zZWN1cmVDZXJ0cy52YWx1ZSgpKQogICAg
ICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICB9IGVsc2UgaWYgKGl0LT5rZXkg
PT0gInByb3h5IikgewotICAgICAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcHJveHk7Ci0g
ICAgICAgICAgICBpdC0+dmFsdWUtPmFzT2JqZWN0KHByb3h5KTsKLSAgICAgICAgICAgIFN0cmlu
ZyBwcm94eVR5cGU7Ci0gICAgICAgICAgICBwcm94eS0+Z2V0U3RyaW5nKCJwcm94eVR5cGUiX3Ms
IHByb3h5VHlwZSk7CisgICAgICAgICAgICBhdXRvIHByb3h5VHlwZSA9IGl0LT52YWx1ZS0+YXNP
YmplY3QoKS0+Z2V0U3RyaW5nKCJwcm94eVR5cGUiX3MpOwogICAgICAgICAgICAgaWYgKCFwbGF0
Zm9ybVN1cHBvcnRQcm94eVR5cGUocHJveHlUeXBlKSkKICAgICAgICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKICAgICAgICAgfSBlbHNlIGlmICghcGxhdGZvcm1NYXRjaENhcGFiaWxpdHkoaXQt
PmtleSwgaXQtPnZhbHVlKSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICBt
YXRjaGVkQ2FwYWJpbGl0aWVzLT5zZXRWYWx1ZShpdC0+a2V5LCBSZWZQdHI8SlNPTjo6VmFsdWU+
KGl0LT52YWx1ZSkpOworICAgICAgICBtYXRjaGVkQ2FwYWJpbGl0aWVzLT5zZXRWYWx1ZShpdC0+
a2V5LCBpdC0+dmFsdWUuY29weVJlZigpKTsKICAgICB9CiAKICAgICByZXR1cm4gbWF0Y2hlZENh
cGFiaWxpdGllczsKQEAgLTY2MSwxOSArNjY0LDE5IEBAIFZlY3RvcjxDYXBhYmlsaXRpZXM+IFdl
YkRyaXZlclNlcnZpY2U6OnByb2Nlc3NDYXBhYmlsaXRpZXMoY29uc3QgSlNPTjo6T2JqZWN0JiBw
CiAgICAgLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmRyaXZlci93ZWJkcml2ZXItc3BlYy5o
dG1sI3Byb2Nlc3NpbmctY2FwYWJpbGl0aWVzCiAKICAgICAvLyAxLiBMZXQgY2FwYWJpbGl0aWVz
IHJlcXVlc3QgYmUgdGhlIHJlc3VsdCBvZiBnZXR0aW5nIHRoZSBwcm9wZXJ0eSAiY2FwYWJpbGl0
aWVzIiBmcm9tIHBhcmFtZXRlcnMuCi0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gY2FwYWJpbGl0
aWVzT2JqZWN0OwotICAgIGlmICghcGFyYW1ldGVycy5nZXRPYmplY3QoImNhcGFiaWxpdGllcyJf
cywgY2FwYWJpbGl0aWVzT2JqZWN0KSkgeworICAgIGF1dG8gY2FwYWJpbGl0aWVzT2JqZWN0ID0g
cGFyYW1ldGVycy5nZXRPYmplY3QoImNhcGFiaWxpdGllcyJfcyk7CisgICAgaWYgKCFjYXBhYmls
aXRpZXNPYmplY3QpIHsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6
ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OkludmFsaWRBcmd1bWVudCkpOwogICAgICAg
ICByZXR1cm4geyB9OwogICAgIH0KIAogICAgIC8vIDIuIExldCByZXF1aXJlZCBjYXBhYmlsaXRp
ZXMgYmUgdGhlIHJlc3VsdCBvZiBnZXR0aW5nIHRoZSBwcm9wZXJ0eSAiYWx3YXlzTWF0Y2giIGZy
b20gY2FwYWJpbGl0aWVzIHJlcXVlc3QuCi0gICAgUmVmUHRyPEpTT046OlZhbHVlPiByZXF1aXJl
ZENhcGFiaWxpdGllc1ZhbHVlOwogICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHJlcXVpcmVkQ2Fw
YWJpbGl0aWVzOwotICAgIGlmICghY2FwYWJpbGl0aWVzT2JqZWN0LT5nZXRWYWx1ZSgiYWx3YXlz
TWF0Y2giX3MsIHJlcXVpcmVkQ2FwYWJpbGl0aWVzVmFsdWUpKQorICAgIGF1dG8gcmVxdWlyZWRD
YXBhYmlsaXRpZXNWYWx1ZSA9IGNhcGFiaWxpdGllc09iamVjdC0+Z2V0VmFsdWUoImFsd2F5c01h
dGNoIl9zKTsKKyAgICBpZiAoIXJlcXVpcmVkQ2FwYWJpbGl0aWVzVmFsdWUpIHsKICAgICAgICAg
Ly8gMi4xLiBJZiByZXF1aXJlZCBjYXBhYmlsaXRpZXMgaXMgdW5kZWZpbmVkLCBzZXQgdGhlIHZh
bHVlIHRvIGFuIGVtcHR5IEpTT04gT2JqZWN0LgogICAgICAgICByZXF1aXJlZENhcGFiaWxpdGll
cyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgZWxzZSBpZiAoIXJlcXVpcmVkQ2FwYWJp
bGl0aWVzVmFsdWUtPmFzT2JqZWN0KHJlcXVpcmVkQ2FwYWJpbGl0aWVzKSkgeworICAgIH0gZWxz
ZSBpZiAoIShyZXF1aXJlZENhcGFiaWxpdGllcyA9IHJlcXVpcmVkQ2FwYWJpbGl0aWVzVmFsdWUt
PmFzT2JqZWN0KCkpKSB7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6
OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpJbnZhbGlkQXJndW1lbnQsIFN0cmluZygi
YWx3YXlzTWF0Y2ggaXMgaW52YWxpZCBpbiBjYXBhYmlsaXRpZXMiKSkpOwogICAgICAgICByZXR1
cm4geyB9OwogICAgIH0KQEAgLTY4NiwxMyArNjg5LDEzIEBAIFZlY3RvcjxDYXBhYmlsaXRpZXM+
IFdlYkRyaXZlclNlcnZpY2U6OnByb2Nlc3NDYXBhYmlsaXRpZXMoY29uc3QgSlNPTjo6T2JqZWN0
JiBwCiAgICAgfQogCiAgICAgLy8gMy4gTGV0IGFsbCBmaXJzdCBtYXRjaCBjYXBhYmlsaXRpZXMg
YmUgdGhlIHJlc3VsdCBvZiBnZXR0aW5nIHRoZSBwcm9wZXJ0eSAiZmlyc3RNYXRjaCIgZnJvbSBj
YXBhYmlsaXRpZXMgcmVxdWVzdC4KLSAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IGZpcnN0TWF0Y2hD
YXBhYmlsaXRpZXNWYWx1ZTsKICAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IGZpcnN0TWF0Y2hDYXBh
YmlsaXRpZXNMaXN0OwotICAgIGlmICghY2FwYWJpbGl0aWVzT2JqZWN0LT5nZXRWYWx1ZSgiZmly
c3RNYXRjaCJfcywgZmlyc3RNYXRjaENhcGFiaWxpdGllc1ZhbHVlKSkgeworICAgIGF1dG8gZmly
c3RNYXRjaENhcGFiaWxpdGllc1ZhbHVlID0gY2FwYWJpbGl0aWVzT2JqZWN0LT5nZXRWYWx1ZSgi
Zmlyc3RNYXRjaCJfcyk7CisgICAgaWYgKCFmaXJzdE1hdGNoQ2FwYWJpbGl0aWVzVmFsdWUpIHsK
ICAgICAgICAgLy8gMy4xLiBJZiBhbGwgZmlyc3QgbWF0Y2ggY2FwYWJpbGl0aWVzIGlzIHVuZGVm
aW5lZCwgc2V0IHRoZSB2YWx1ZSB0byBhIEpTT04gTGlzdCB3aXRoIGEgc2luZ2xlIGVudHJ5IG9m
IGFuIGVtcHR5IEpTT04gT2JqZWN0LgogICAgICAgICBmaXJzdE1hdGNoQ2FwYWJpbGl0aWVzTGlz
dCA9IEpTT046OkFycmF5OjpjcmVhdGUoKTsKICAgICAgICAgZmlyc3RNYXRjaENhcGFiaWxpdGll
c0xpc3QtPnB1c2hPYmplY3QoSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSk7Ci0gICAgfSBlbHNlIGlm
ICghZmlyc3RNYXRjaENhcGFiaWxpdGllc1ZhbHVlLT5hc0FycmF5KGZpcnN0TWF0Y2hDYXBhYmls
aXRpZXNMaXN0KSkgeworICAgIH0gZWxzZSBpZiAoIShmaXJzdE1hdGNoQ2FwYWJpbGl0aWVzTGlz
dCA9IGZpcnN0TWF0Y2hDYXBhYmlsaXRpZXNWYWx1ZS0+YXNBcnJheSgpKSkgewogICAgICAgICAv
LyAzLjIuIElmIGFsbCBmaXJzdCBtYXRjaCBjYXBhYmlsaXRpZXMgaXMgbm90IGEgSlNPTiBMaXN0
LCByZXR1cm4gZXJyb3Igd2l0aCBlcnJvciBjb2RlIGludmFsaWQgYXJndW1lbnQuCiAgICAgICAg
IGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJy
b3JDb2RlOjpJbnZhbGlkQXJndW1lbnQsIFN0cmluZygiZmlyc3RNYXRjaCBpcyBpbnZhbGlkIGlu
IGNhcGFiaWxpdGllcyIpKSk7CiAgICAgICAgIHJldHVybiB7IH07CkBAIC03MDQsOSArNzA3LDgg
QEAgVmVjdG9yPENhcGFiaWxpdGllcz4gV2ViRHJpdmVyU2VydmljZTo6cHJvY2Vzc0NhcGFiaWxp
dGllcyhjb25zdCBKU09OOjpPYmplY3QmIHAKICAgICB2YWxpZGF0ZWRGaXJzdE1hdGNoQ2FwYWJp
bGl0aWVzTGlzdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGZpcnN0TWF0Y2hDYXBhYmlsaXRpZXNM
aXN0TGVuZ3RoKTsKICAgICAvLyA1LiBGb3IgZWFjaCBmaXJzdCBtYXRjaCBjYXBhYmlsaXRpZXMg
Y29ycmVzcG9uZGluZyB0byBhbiBpbmRleGVkIHByb3BlcnR5IGluIGFsbCBmaXJzdCBtYXRjaCBj
YXBhYmlsaXRpZXMuCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZpcnN0TWF0Y2hDYXBh
YmlsaXRpZXNMaXN0TGVuZ3RoOyArK2kpIHsKLSAgICAgICAgUmVmUHRyPEpTT046OlZhbHVlPiBm
aXJzdE1hdGNoQ2FwYWJpbGl0aWVzVmFsdWUgPSBmaXJzdE1hdGNoQ2FwYWJpbGl0aWVzTGlzdC0+
Z2V0KGkpOwotICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBmaXJzdE1hdGNoQ2FwYWJpbGl0
aWVzOwotICAgICAgICBpZiAoIWZpcnN0TWF0Y2hDYXBhYmlsaXRpZXNWYWx1ZS0+YXNPYmplY3Qo
Zmlyc3RNYXRjaENhcGFiaWxpdGllcykpIHsKKyAgICAgICAgYXV0byBmaXJzdE1hdGNoQ2FwYWJp
bGl0aWVzID0gZmlyc3RNYXRjaENhcGFiaWxpdGllc0xpc3QtPmdldChpKS0+YXNPYmplY3QoKTsK
KyAgICAgICAgaWYgKCFmaXJzdE1hdGNoQ2FwYWJpbGl0aWVzKSB7CiAgICAgICAgICAgICBjb21w
bGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29k
ZTo6SW52YWxpZEFyZ3VtZW50LCBTdHJpbmcoIkludmFsaWQgY2FwYWJpbGl0aWVzIGZvdW5kIGlu
IGZpcnN0TWF0Y2giKSkpOwogICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAgICAgfQpAQCAt
ODE1LDkgKzgxNyw5IEBAIHZvaWQgV2ViRHJpdmVyU2VydmljZTo6Y3JlYXRlU2Vzc2lvbihWZWN0
b3I8Q2FwYWJpbGl0aWVzPiYmIGNhcGFiaWxpdGllc0xpc3QsIHN0CiAKICAgICAgICAgICAgIG1f
c2Vzc2lvbiA9IFdURk1vdmUoc2Vzc2lvbik7CiAKLSAgICAgICAgICAgIFJlZlB0cjxKU09OOjpP
YmplY3Q+IHJlc3VsdE9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgICAg
ICBhdXRvIHJlc3VsdE9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgICAg
ICByZXN1bHRPYmplY3QtPnNldFN0cmluZygic2Vzc2lvbklkIl9zLCBtX3Nlc3Npb24tPmlkKCkp
OwotICAgICAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gY2FwYWJpbGl0aWVzT2JqZWN0ID0g
SlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgICAgIGF1dG8gY2FwYWJpbGl0aWVzT2Jq
ZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICAgICAgIGNvbnN0IGF1dG8mIGNh
cGFiaWxpdGllcyA9IG1fc2Vzc2lvbi0+Y2FwYWJpbGl0aWVzKCk7CiAgICAgICAgICAgICBjYXBh
YmlsaXRpZXNPYmplY3QtPnNldFN0cmluZygiYnJvd3Nlck5hbWUiX3MsIGNhcGFiaWxpdGllcy5i
cm93c2VyTmFtZS52YWx1ZU9yKGVtcHR5U3RyaW5nKCkpKTsKICAgICAgICAgICAgIGNhcGFiaWxp
dGllc09iamVjdC0+c2V0U3RyaW5nKCJicm93c2VyVmVyc2lvbiJfcywgY2FwYWJpbGl0aWVzLmJy
b3dzZXJWZXJzaW9uLnZhbHVlT3IoZW1wdHlTdHJpbmcoKSkpOwpAQCAtODU1LDcgKzg1Nyw3IEBA
IHZvaWQgV2ViRHJpdmVyU2VydmljZTo6Y3JlYXRlU2Vzc2lvbihWZWN0b3I8Q2FwYWJpbGl0aWVz
PiYmIGNhcGFiaWxpdGllc0xpc3QsIHN0CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAo
IWNhcGFiaWxpdGllcy5wcm94eSkKICAgICAgICAgICAgICAgICBjYXBhYmlsaXRpZXNPYmplY3Qt
PnNldE9iamVjdCgicHJveHkiX3MsIEpTT046Ok9iamVjdDo6Y3JlYXRlKCkpOwotICAgICAgICAg
ICAgUmVmUHRyPEpTT046Ok9iamVjdD4gdGltZW91dHNPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNy
ZWF0ZSgpOworICAgICAgICAgICAgYXV0byB0aW1lb3V0c09iamVjdCA9IEpTT046Ok9iamVjdDo6
Y3JlYXRlKCk7CiAgICAgICAgICAgICBpZiAobV9zZXNzaW9uLT5zY3JpcHRUaW1lb3V0KCkgPT0g
c3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjppbmZpbml0eSgpKQogICAgICAgICAgICAgICAg
IHRpbWVvdXRzT2JqZWN0LT5zZXRWYWx1ZSgic2NyaXB0Il9zLCBKU09OOjpWYWx1ZTo6bnVsbCgp
KTsKICAgICAgICAgICAgIGVsc2UKQEAgLTg3NCw4ICs4NzYsOCBAQCB2b2lkIFdlYkRyaXZlclNl
cnZpY2U6OmRlbGV0ZVNlc3Npb24oUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzLCBG
dW5jdGlvbgogewogICAgIC8vIMKnOC4yIERlbGV0ZSBTZXNzaW9uLgogICAgIC8vIGh0dHBzOi8v
d3d3LnczLm9yZy9UUi93ZWJkcml2ZXIvI2RlbGV0ZS1zZXNzaW9uCi0gICAgU3RyaW5nIHNlc3Np
b25JRDsKLSAgICBpZiAoIXBhcmFtZXRlcnMtPmdldFN0cmluZygic2Vzc2lvbklkIl9zLCBzZXNz
aW9uSUQpKSB7CisgICAgYXV0byBzZXNzaW9uSUQgPSBwYXJhbWV0ZXJzLT5nZXRTdHJpbmcoInNl
c3Npb25JZCJfcyk7CisgICAgaWYgKCFzZXNzaW9uSUQpIHsKICAgICAgICAgY29tcGxldGlvbkhh
bmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OkludmFs
aWRBcmd1bWVudCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtOTM4LDggKzk0MCw4IEBA
IHZvaWQgV2ViRHJpdmVyU2VydmljZTo6Z28oUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0
ZXJzLCBGdW5jdGlvbjx2b2lkIChDb21tCiAgICAgaWYgKCFmaW5kU2Vzc2lvbk9yQ29tcGxldGVX
aXRoRXJyb3IoKnBhcmFtZXRlcnMsIGNvbXBsZXRpb25IYW5kbGVyKSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgU3RyaW5nIHVybDsKLSAgICBpZiAoIXBhcmFtZXRlcnMtPmdldFN0cmluZygidXJs
Il9zLCB1cmwpKSB7CisgICAgYXV0byB1cmwgPSBwYXJhbWV0ZXJzLT5nZXRTdHJpbmcoInVybCJf
cyk7CisgICAgaWYgKCF1cmwpIHsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJl
c3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OkludmFsaWRBcmd1bWVudCkpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTA1Myw5ICsxMDU1LDggQEAgdm9pZCBXZWJEcml2
ZXJTZXJ2aWNlOjpzZXRXaW5kb3dSZWN0KFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVy
cywgRnVuY3Rpb24KIHsKICAgICAvLyDCpzEwLjcuMiBTZXQgV2luZG93IFJlY3QuCiAgICAgLy8g
aHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmRyaXZlci93ZWJkcml2ZXItc3BlYy5odG1sI3NldC13
aW5kb3ctcmVjdAotICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gdmFsdWU7CiAgICAgT3B0aW9uYWw8
ZG91YmxlPiB3aWR0aDsKLSAgICBpZiAocGFyYW1ldGVycy0+Z2V0VmFsdWUoIndpZHRoIl9zLCB2
YWx1ZSkpIHsKKyAgICBpZiAoYXV0byB2YWx1ZSA9IHBhcmFtZXRlcnMtPmdldFZhbHVlKCJ3aWR0
aCJfcykpIHsKICAgICAgICAgaWYgKGF1dG8gbnVtYmVyID0gdmFsdWVBc051bWJlckluUmFuZ2Uo
KnZhbHVlKSkKICAgICAgICAgICAgIHdpZHRoID0gbnVtYmVyOwogICAgICAgICBlbHNlIGlmICgh
dmFsdWUtPmlzTnVsbCgpKSB7CkBAIC0xMDY0LDcgKzEwNjUsNyBAQCB2b2lkIFdlYkRyaXZlclNl
cnZpY2U6OnNldFdpbmRvd1JlY3QoUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzLCBG
dW5jdGlvbgogICAgICAgICB9CiAgICAgfQogICAgIE9wdGlvbmFsPGRvdWJsZT4gaGVpZ2h0Owot
ICAgIGlmIChwYXJhbWV0ZXJzLT5nZXRWYWx1ZSgiaGVpZ2h0Il9zLCB2YWx1ZSkpIHsKKyAgICBp
ZiAoYXV0byB2YWx1ZSA9IHBhcmFtZXRlcnMtPmdldFZhbHVlKCJoZWlnaHQiX3MpKSB7CiAgICAg
ICAgIGlmIChhdXRvIG51bWJlciA9IHZhbHVlQXNOdW1iZXJJblJhbmdlKCp2YWx1ZSkpCiAgICAg
ICAgICAgICBoZWlnaHQgPSBudW1iZXI7CiAgICAgICAgIGVsc2UgaWYgKCF2YWx1ZS0+aXNOdWxs
KCkpIHsKQEAgLTEwNzMsNyArMTA3NCw3IEBAIHZvaWQgV2ViRHJpdmVyU2VydmljZTo6c2V0V2lu
ZG93UmVjdChSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMsIEZ1bmN0aW9uCiAgICAg
ICAgIH0KICAgICB9CiAgICAgT3B0aW9uYWw8ZG91YmxlPiB4OwotICAgIGlmIChwYXJhbWV0ZXJz
LT5nZXRWYWx1ZSgieCJfcywgdmFsdWUpKSB7CisgICAgaWYgKGF1dG8gdmFsdWUgPSBwYXJhbWV0
ZXJzLT5nZXRWYWx1ZSgieCJfcykpIHsKICAgICAgICAgaWYgKGF1dG8gbnVtYmVyID0gdmFsdWVB
c051bWJlckluUmFuZ2UoKnZhbHVlLCBJTlRfTUlOKSkKICAgICAgICAgICAgIHggPSBudW1iZXI7
CiAgICAgICAgIGVsc2UgaWYgKCF2YWx1ZS0+aXNOdWxsKCkpIHsKQEAgLTEwODIsNyArMTA4Myw3
IEBAIHZvaWQgV2ViRHJpdmVyU2VydmljZTo6c2V0V2luZG93UmVjdChSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiYmIHBhcmFtZXRlcnMsIEZ1bmN0aW9uCiAgICAgICAgIH0KICAgICB9CiAgICAgT3B0aW9u
YWw8ZG91YmxlPiB5OwotICAgIGlmIChwYXJhbWV0ZXJzLT5nZXRWYWx1ZSgieSJfcywgdmFsdWUp
KSB7CisgICAgaWYgKGF1dG8gdmFsdWUgPSBwYXJhbWV0ZXJzLT5nZXRWYWx1ZSgieSJfcykpIHsK
ICAgICAgICAgaWYgKGF1dG8gbnVtYmVyID0gdmFsdWVBc051bWJlckluUmFuZ2UoKnZhbHVlLCBJ
TlRfTUlOKSkKICAgICAgICAgICAgIHkgPSBudW1iZXI7CiAgICAgICAgIGVsc2UgaWYgKCF2YWx1
ZS0+aXNOdWxsKCkpIHsKQEAgLTExMzUsOCArMTEzNiw4IEBAIHZvaWQgV2ViRHJpdmVyU2Vydmlj
ZTo6Y2xvc2VXaW5kb3coUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzLCBGdW5jdGlv
bjx2CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBSZWZQdHI8SlNP
Tjo6QXJyYXk+IGhhbmRsZXM7Ci0gICAgICAgIGlmIChyZXN1bHQucmVzdWx0KCktPmFzQXJyYXko
aGFuZGxlcykgJiYgIWhhbmRsZXMtPmxlbmd0aCgpKQorICAgICAgICBhdXRvIGhhbmRsZXMgPSBy
ZXN1bHQucmVzdWx0KCktPmFzQXJyYXkoKTsKKyAgICAgICAgaWYgKGhhbmRsZXMgJiYgIWhhbmRs
ZXMtPmxlbmd0aCgpKQogICAgICAgICAgICAgbV9zZXNzaW9uID0gbnVsbHB0cjsKIAogICAgICAg
ICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKHJlc3VsdCkpOwpAQCAtMTE1MCw4ICsxMTUxLDgg
QEAgdm9pZCBXZWJEcml2ZXJTZXJ2aWNlOjpzd2l0Y2hUb1dpbmRvdyhSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiYmIHBhcmFtZXRlcnMsIEZ1bmN0aW8KICAgICBpZiAoIWZpbmRTZXNzaW9uT3JDb21wbGV0
ZVdpdGhFcnJvcigqcGFyYW1ldGVycywgY29tcGxldGlvbkhhbmRsZXIpKQogICAgICAgICByZXR1
cm47CiAKLSAgICBTdHJpbmcgaGFuZGxlOwotICAgIGlmICghcGFyYW1ldGVycy0+Z2V0U3RyaW5n
KCJoYW5kbGUiX3MsIGhhbmRsZSkpIHsKKyAgICBhdXRvIGhhbmRsZSA9IHBhcmFtZXRlcnMtPmdl
dFN0cmluZygiaGFuZGxlIl9zKTsKKyAgICBpZiAoIWhhbmRsZSkgewogICAgICAgICBjb21wbGV0
aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6
SW52YWxpZEFyZ3VtZW50KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xMTc1LDEzICsx
MTc2LDExIEBAIHZvaWQgV2ViRHJpdmVyU2VydmljZTo6bmV3V2luZG93KFJlZlB0cjxKU09OOjpP
YmplY3Q+JiYgcGFyYW1ldGVycywgRnVuY3Rpb248dm9pCiAgICAgICAgIHJldHVybjsKIAogICAg
IE9wdGlvbmFsPFN0cmluZz4gdHlwZUhpbnQ7Ci0gICAgUmVmUHRyPEpTT046OlZhbHVlPiB2YWx1
ZTsKLSAgICBpZiAocGFyYW1ldGVycy0+Z2V0VmFsdWUoInR5cGUiX3MsIHZhbHVlKSkgewotICAg
ICAgICBTdHJpbmcgdmFsdWVTdHJpbmc7Ci0gICAgICAgIGlmICh2YWx1ZS0+YXNTdHJpbmcodmFs
dWVTdHJpbmcpKSB7Ci0gICAgICAgICAgICBpZiAodmFsdWVTdHJpbmcgPT0gIndpbmRvdyIgfHwg
dmFsdWVTdHJpbmcgPT0gInRhYiIpCi0gICAgICAgICAgICAgICAgdHlwZUhpbnQgPSB2YWx1ZVN0
cmluZzsKLSAgICAgICAgfSBlbHNlIGlmICghdmFsdWUtPmlzTnVsbCgpKSB7CisgICAgaWYgKGF1
dG8gdmFsdWUgPSBwYXJhbWV0ZXJzLT5nZXRWYWx1ZSgidHlwZSJfcykpIHsKKyAgICAgICAgYXV0
byB2YWx1ZVN0cmluZyA9IHZhbHVlLT5hc1N0cmluZygpOworICAgICAgICBpZiAodmFsdWVTdHJp
bmcgPT0gIndpbmRvdyIgfHwgdmFsdWVTdHJpbmcgPT0gInRhYiIpCisgICAgICAgICAgICB0eXBl
SGludCA9IHZhbHVlU3RyaW5nOworICAgICAgICBlbHNlIGlmICghdmFsdWUtPmlzTnVsbCgpKSB7
CiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1h
bmRSZXN1bHQ6OkVycm9yQ29kZTo6SW52YWxpZEFyZ3VtZW50KSk7CiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KQEAgLTExOTcsOCArMTE5Niw4IEBAIHZvaWQgV2ViRHJpdmVyU2Vydmlj
ZTo6c3dpdGNoVG9GcmFtZShSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMsIEZ1bmN0
aW9uCiAgICAgaWYgKCFmaW5kU2Vzc2lvbk9yQ29tcGxldGVXaXRoRXJyb3IoKnBhcmFtZXRlcnMs
IGNvbXBsZXRpb25IYW5kbGVyKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVmUHRyPEpTT046
OlZhbHVlPiBmcmFtZUlEOwotICAgIGlmICghcGFyYW1ldGVycy0+Z2V0VmFsdWUoImlkIl9zLCBm
cmFtZUlEKSkgeworICAgIGF1dG8gZnJhbWVJRCA9IHBhcmFtZXRlcnMtPmdldFZhbHVlKCJpZCJf
cyk7CisgICAgaWYgKCFmcmFtZUlEKSB7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1h
bmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpJbnZhbGlkQXJndW1lbnQp
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTEyMTQsOCArMTIxMyw3IEBAIHZvaWQgV2Vi
RHJpdmVyU2VydmljZTo6c3dpdGNoVG9GcmFtZShSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFt
ZXRlcnMsIEZ1bmN0aW9uCiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBKU09O
OjpWYWx1ZTo6VHlwZTo6T2JqZWN0OiB7Ci0gICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IGZy
YW1lSURPYmplY3Q7Ci0gICAgICAgIGZyYW1lSUQtPmFzT2JqZWN0KGZyYW1lSURPYmplY3QpOwor
ICAgICAgICBhdXRvIGZyYW1lSURPYmplY3QgPSBmcmFtZUlELT5hc09iamVjdCgpOwogICAgICAg
ICBpZiAoZnJhbWVJRE9iamVjdC0+ZmluZChTZXNzaW9uOjp3ZWJFbGVtZW50SWRlbnRpZmllcigp
KSA9PSBmcmFtZUlET2JqZWN0LT5lbmQoKSkgewogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OkludmFsaWRB
cmd1bWVudCkpOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTI1Niw4ICsxMjU0LDggQEAgdm9p
ZCBXZWJEcml2ZXJTZXJ2aWNlOjpzd2l0Y2hUb1BhcmVudEZyYW1lKFJlZlB0cjxKU09OOjpPYmpl
Y3Q+JiYgcGFyYW1ldGVycywgRnUKIAogc3RhdGljIE9wdGlvbmFsPFN0cmluZz4gZmluZEVsZW1l
bnRPckNvbXBsZXRlV2l0aEVycm9yKEpTT046Ok9iamVjdCYgcGFyYW1ldGVycywgRnVuY3Rpb248
dm9pZCAoQ29tbWFuZFJlc3VsdCYmKT4mIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIFN0cmlu
ZyBlbGVtZW50SUQ7Ci0gICAgaWYgKCFwYXJhbWV0ZXJzLmdldFN0cmluZygiZWxlbWVudElkIl9z
LCBlbGVtZW50SUQpIHx8IGVsZW1lbnRJRC5pc0VtcHR5KCkpIHsKKyAgICBhdXRvIGVsZW1lbnRJ
RCA9IHBhcmFtZXRlcnMuZ2V0U3RyaW5nKCJlbGVtZW50SWQiX3MpOworICAgIGlmIChlbGVtZW50
SUQuaXNFbXB0eSgpKSB7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6
OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpJbnZhbGlkQXJndW1lbnQpKTsKICAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICB9CkBAIC0xMjc3LDExICsxMjc1LDEzIEBAIHN0
YXRpYyBpbmxpbmUgYm9vbCBpc1ZhbGlkU3RyYXRlZ3koY29uc3QgU3RyaW5nJiBzdHJhdGVneSkK
IAogc3RhdGljIGJvb2wgZmluZFN0cmF0ZWd5QW5kU2VsZWN0b3JPckNvbXBsZXRlV2l0aEVycm9y
KEpTT046Ok9iamVjdCYgcGFyYW1ldGVycywgRnVuY3Rpb248dm9pZCAoQ29tbWFuZFJlc3VsdCYm
KT4mIGNvbXBsZXRpb25IYW5kbGVyLCBTdHJpbmcmIHN0cmF0ZWd5LCBTdHJpbmcmIHNlbGVjdG9y
KQogewotICAgIGlmICghcGFyYW1ldGVycy5nZXRTdHJpbmcoInVzaW5nIl9zLCBzdHJhdGVneSkg
fHwgIWlzVmFsaWRTdHJhdGVneShzdHJhdGVneSkpIHsKKyAgICBzdHJhdGVneSA9IHBhcmFtZXRl
cnMuZ2V0U3RyaW5nKCJ1c2luZyJfcyk7CisgICAgaWYgKCFpc1ZhbGlkU3RyYXRlZ3koc3RyYXRl
Z3kpKSB7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29t
bWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpJbnZhbGlkQXJndW1lbnQpKTsKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIH0KLSAgICBpZiAoIXBhcmFtZXRlcnMuZ2V0U3RyaW5nKCJ2YWx1ZSJfcywg
c2VsZWN0b3IpKSB7CisgICAgc2VsZWN0b3IgPSBwYXJhbWV0ZXJzLmdldFN0cmluZygidmFsdWUi
X3MpOworICAgIGlmICghc2VsZWN0b3IpIHsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29t
bWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OkludmFsaWRBcmd1bWVu
dCkpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQpAQCAtMTQwNSw4ICsxNDA1LDggQEAg
dm9pZCBXZWJEcml2ZXJTZXJ2aWNlOjpnZXRFbGVtZW50QXR0cmlidXRlKFJlZlB0cjxKU09OOjpP
YmplY3Q+JiYgcGFyYW1ldGVycywgRnUKICAgICBpZiAoIWVsZW1lbnRJRCkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgU3RyaW5nIGF0dHJpYnV0ZTsKLSAgICBpZiAoIXBhcmFtZXRlcnMtPmdldFN0
cmluZygibmFtZSJfcywgYXR0cmlidXRlKSkgeworICAgIGF1dG8gYXR0cmlidXRlID0gcGFyYW1l
dGVycy0+Z2V0U3RyaW5nKCJuYW1lIl9zKTsKKyAgICBpZiAoIWF0dHJpYnV0ZSkgewogICAgICAg
ICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVy
cm9yQ29kZTo6SW52YWxpZEFyZ3VtZW50KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0x
NDI1LDggKzE0MjUsOCBAQCB2b2lkIFdlYkRyaXZlclNlcnZpY2U6OmdldEVsZW1lbnRQcm9wZXJ0
eShSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMsIEZ1bgogICAgIGlmICghZWxlbWVu
dElEKQogICAgICAgICByZXR1cm47CiAKLSAgICBTdHJpbmcgYXR0cmlidXRlOwotICAgIGlmICgh
cGFyYW1ldGVycy0+Z2V0U3RyaW5nKCJuYW1lIl9zLCBhdHRyaWJ1dGUpKSB7CisgICAgYXV0byBh
dHRyaWJ1dGUgPSBwYXJhbWV0ZXJzLT5nZXRTdHJpbmcoIm5hbWUiX3MpOworICAgIGlmICghYXR0
cmlidXRlKSB7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwo
Q29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpJbnZhbGlkQXJndW1lbnQpKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KQEAgLTE0NDUsOCArMTQ0NSw4IEBAIHZvaWQgV2ViRHJpdmVyU2VydmljZTo6
Z2V0RWxlbWVudENTU1ZhbHVlKFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycywgRnVu
CiAgICAgaWYgKCFlbGVtZW50SUQpCiAgICAgICAgIHJldHVybjsKIAotICAgIFN0cmluZyBjc3NQ
cm9wZXJ0eTsKLSAgICBpZiAoIXBhcmFtZXRlcnMtPmdldFN0cmluZygibmFtZSJfcywgY3NzUHJv
cGVydHkpKSB7CisgICAgYXV0byBjc3NQcm9wZXJ0eSA9IHBhcmFtZXRlcnMtPmdldFN0cmluZygi
bmFtZSJfcyk7CisgICAgaWYgKCFjc3NQcm9wZXJ0eSkgewogICAgICAgICBjb21wbGV0aW9uSGFu
ZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6SW52YWxp
ZEFyZ3VtZW50KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xNTYzLDggKzE1NjMsOCBA
QCB2b2lkIFdlYkRyaXZlclNlcnZpY2U6OmVsZW1lbnRTZW5kS2V5cyhSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiYmIHBhcmFtZXRlcnMsIEZ1bmN0aQogICAgIGlmICghZWxlbWVudElEKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBTdHJpbmcgdGV4dDsKLSAgICBpZiAoIXBhcmFtZXRlcnMtPmdldFN0cmlu
ZygidGV4dCJfcywgdGV4dCkgfHwgdGV4dC5pc0VtcHR5KCkpIHsKKyAgICBhdXRvIHRleHQgPSBw
YXJhbWV0ZXJzLT5nZXRTdHJpbmcoInRleHQiX3MpOworICAgIGlmICh0ZXh0LmlzRW1wdHkoKSkg
ewogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRS
ZXN1bHQ6OkVycm9yQ29kZTo6SW52YWxpZEFyZ3VtZW50KSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CkBAIC0xNTg0LDExICsxNTg0LDEzIEBAIHZvaWQgV2ViRHJpdmVyU2VydmljZTo6Z2V0UGFn
ZVNvdXJjZShSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMsIEZ1bmN0aW9uCiAKIHN0
YXRpYyBib29sIGZpbmRTY3JpcHRBbmRBcmd1bWVudHNPckNvbXBsZXRlV2l0aEVycm9yKEpTT046
Ok9iamVjdCYgcGFyYW1ldGVycywgRnVuY3Rpb248dm9pZCAoQ29tbWFuZFJlc3VsdCYmKT4mIGNv
bXBsZXRpb25IYW5kbGVyLCBTdHJpbmcmIHNjcmlwdCwgUmVmUHRyPEpTT046OkFycmF5PiYgYXJn
dW1lbnRzKQogewotICAgIGlmICghcGFyYW1ldGVycy5nZXRTdHJpbmcoInNjcmlwdCJfcywgc2Ny
aXB0KSkgeworICAgIHNjcmlwdCA9IHBhcmFtZXRlcnMuZ2V0U3RyaW5nKCJzY3JpcHQiX3MpOwor
ICAgIGlmICghc2NyaXB0KSB7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1
bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpJbnZhbGlkQXJndW1lbnQpKTsKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICBpZiAoIXBhcmFtZXRlcnMuZ2V0QXJyYXko
ImFyZ3MiX3MsIGFyZ3VtZW50cykpIHsKKyAgICBhcmd1bWVudHMgPSBwYXJhbWV0ZXJzLmdldEFy
cmF5KCJhcmdzIl9zKTsKKyAgICBpZiAoIWFyZ3VtZW50cykgewogICAgICAgICBjb21wbGV0aW9u
SGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6SW52
YWxpZEFyZ3VtZW50KSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CkBAIC0xNjYwLDgg
KzE2NjIsOCBAQCB2b2lkIFdlYkRyaXZlclNlcnZpY2U6OmdldE5hbWVkQ29va2llKFJlZlB0cjxK
U09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycywgRnVuY3RpbwogICAgIGlmICghZmluZFNlc3Npb25P
ckNvbXBsZXRlV2l0aEVycm9yKCpwYXJhbWV0ZXJzLCBjb21wbGV0aW9uSGFuZGxlcikpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIFN0cmluZyBuYW1lOwotICAgIGlmICghcGFyYW1ldGVycy0+Z2V0
U3RyaW5nKCJuYW1lIl9zLCBuYW1lKSkgeworICAgIGF1dG8gbmFtZSA9IHBhcmFtZXRlcnMtPmdl
dFN0cmluZygibmFtZSJfcyk7CisgICAgaWYgKCFuYW1lKSB7CiAgICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpJbnZh
bGlkQXJndW1lbnQpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTE2NzgsMzcgKzE2ODAs
NDAgQEAgdm9pZCBXZWJEcml2ZXJTZXJ2aWNlOjpnZXROYW1lZENvb2tpZShSZWZQdHI8SlNPTjo6
T2JqZWN0PiYmIHBhcmFtZXRlcnMsIEZ1bmN0aW8KIHN0YXRpYyBPcHRpb25hbDxTZXNzaW9uOjpD
b29raWU+IGRlc2VyaWFsaXplQ29va2llKEpTT046Ok9iamVjdCYgY29va2llT2JqZWN0KQogewog
ICAgIFNlc3Npb246OkNvb2tpZSBjb29raWU7Ci0gICAgaWYgKCFjb29raWVPYmplY3QuZ2V0U3Ry
aW5nKCJuYW1lIl9zLCBjb29raWUubmFtZSkgfHwgY29va2llLm5hbWUuaXNFbXB0eSgpKQotICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIGlmICghY29va2llT2JqZWN0LmdldFN0cmlu
ZygidmFsdWUiX3MsIGNvb2tpZS52YWx1ZSkgfHwgY29va2llLnZhbHVlLmlzRW1wdHkoKSkKKwor
ICAgIGNvb2tpZS5uYW1lID0gY29va2llT2JqZWN0LmdldFN0cmluZygibmFtZSJfcyk7CisgICAg
aWYgKGNvb2tpZS5uYW1lLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
IAotICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gdmFsdWU7Ci0gICAgaWYgKGNvb2tpZU9iamVjdC5n
ZXRWYWx1ZSgicGF0aCJfcywgdmFsdWUpKSB7Ci0gICAgICAgIFN0cmluZyBwYXRoOwotICAgICAg
ICBpZiAoIXZhbHVlLT5hc1N0cmluZyhwYXRoKSkKKyAgICBjb29raWUudmFsdWUgPSBjb29raWVP
YmplY3QuZ2V0U3RyaW5nKCJ2YWx1ZSJfcyk7CisgICAgaWYgKGNvb2tpZS52YWx1ZS5pc0VtcHR5
KCkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBpZiAoYXV0byB2YWx1ZSA9
IGNvb2tpZU9iamVjdC5nZXRWYWx1ZSgicGF0aCJfcykpIHsKKyAgICAgICAgYXV0byBwYXRoID0g
dmFsdWUtPmFzU3RyaW5nKCk7CisgICAgICAgIGlmICghcGF0aCkKICAgICAgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CiAgICAgICAgIGNvb2tpZS5wYXRoID0gcGF0aDsKICAgICB9Ci0gICAg
aWYgKGNvb2tpZU9iamVjdC5nZXRWYWx1ZSgiZG9tYWluIl9zLCB2YWx1ZSkpIHsKLSAgICAgICAg
U3RyaW5nIGRvbWFpbjsKLSAgICAgICAgaWYgKCF2YWx1ZS0+YXNTdHJpbmcoZG9tYWluKSkKKyAg
ICBpZiAoYXV0byB2YWx1ZSA9IGNvb2tpZU9iamVjdC5nZXRWYWx1ZSgiZG9tYWluIl9zKSkgewor
ICAgICAgICBhdXRvIGRvbWFpbiA9IHZhbHVlLT5hc1N0cmluZygpOworICAgICAgICBpZiAoIWRv
bWFpbikKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAgIGNvb2tpZS5k
b21haW4gPSBkb21haW47CiAgICAgfQotICAgIGlmIChjb29raWVPYmplY3QuZ2V0VmFsdWUoInNl
Y3VyZSJfcywgdmFsdWUpKSB7Ci0gICAgICAgIGJvb2wgc2VjdXJlOwotICAgICAgICBpZiAoIXZh
bHVlLT5hc0Jvb2xlYW4oc2VjdXJlKSkKKyAgICBpZiAoYXV0byB2YWx1ZSA9IGNvb2tpZU9iamVj
dC5nZXRWYWx1ZSgic2VjdXJlIl9zKSkgeworICAgICAgICBhdXRvIHNlY3VyZSA9IHZhbHVlLT5h
c0Jvb2xlYW4oKTsKKyAgICAgICAgaWYgKCFzZWN1cmUpCiAgICAgICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwogICAgICAgICBjb29raWUuc2VjdXJlID0gc2VjdXJlOwogICAgIH0KLSAgICBp
ZiAoY29va2llT2JqZWN0LmdldFZhbHVlKCJodHRwT25seSJfcywgdmFsdWUpKSB7Ci0gICAgICAg
IGJvb2wgaHR0cE9ubHk7Ci0gICAgICAgIGlmICghdmFsdWUtPmFzQm9vbGVhbihodHRwT25seSkp
CisgICAgaWYgKGF1dG8gdmFsdWUgPSBjb29raWVPYmplY3QuZ2V0VmFsdWUoImh0dHBPbmx5Il9z
KSkgeworICAgICAgICBhdXRvIGh0dHBPbmx5ID0gdmFsdWUtPmFzQm9vbGVhbigpOworICAgICAg
ICBpZiAoIWh0dHBPbmx5KQogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAg
ICAgY29va2llLmh0dHBPbmx5ID0gaHR0cE9ubHk7CiAgICAgfQotICAgIGlmIChjb29raWVPYmpl
Y3QuZ2V0VmFsdWUoImV4cGlyeSJfcywgdmFsdWUpKSB7CisgICAgaWYgKGF1dG8gdmFsdWUgPSBj
b29raWVPYmplY3QuZ2V0VmFsdWUoImV4cGlyeSJfcykpIHsKICAgICAgICAgYXV0byBleHBpcnkg
PSB1bnNpZ25lZFZhbHVlKCp2YWx1ZSk7CiAgICAgICAgIGlmICghZXhwaXJ5KQogICAgICAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKQEAgLTE3MjUsOCArMTczMCw4IEBAIHZvaWQgV2ViRHJp
dmVyU2VydmljZTo6YWRkQ29va2llKFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycywg
RnVuY3Rpb248dm9pCiAgICAgaWYgKCFmaW5kU2Vzc2lvbk9yQ29tcGxldGVXaXRoRXJyb3IoKnBh
cmFtZXRlcnMsIGNvbXBsZXRpb25IYW5kbGVyKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVm
UHRyPEpTT046Ok9iamVjdD4gY29va2llT2JqZWN0OwotICAgIGlmICghcGFyYW1ldGVycy0+Z2V0
T2JqZWN0KCJjb29raWUiX3MsIGNvb2tpZU9iamVjdCkpIHsKKyAgICBhdXRvIGNvb2tpZU9iamVj
dCA9IHBhcmFtZXRlcnMtPmdldE9iamVjdCgiY29va2llIl9zKTsKKyAgICBpZiAoIWNvb2tpZU9i
amVjdCkgewogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENv
bW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6SW52YWxpZEFyZ3VtZW50KSk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CkBAIC0xNzUzLDggKzE3NTgsOCBAQCB2b2lkIFdlYkRyaXZlclNlcnZpY2U6OmRl
bGV0ZUNvb2tpZShSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMsIEZ1bmN0aW9uPAog
ICAgIGlmICghZmluZFNlc3Npb25PckNvbXBsZXRlV2l0aEVycm9yKCpwYXJhbWV0ZXJzLCBjb21w
bGV0aW9uSGFuZGxlcikpCiAgICAgICAgIHJldHVybjsKIAotICAgIFN0cmluZyBuYW1lOwotICAg
IGlmICghcGFyYW1ldGVycy0+Z2V0U3RyaW5nKCJuYW1lIl9zLCBuYW1lKSkgeworYXV0byBuYW1l
ID0gcGFyYW1ldGVycy0+Z2V0U3RyaW5nKCJuYW1lIl9zKTsKKyAgICBpZiAoIW5hbWUpIHsKICAg
ICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0
OjpFcnJvckNvZGU6OkludmFsaWRBcmd1bWVudCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQpA
QCAtMTc4Niw4ICsxNzkxLDggQEAgdm9pZCBXZWJEcml2ZXJTZXJ2aWNlOjpkZWxldGVBbGxDb29r
aWVzKFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycywgRnVuY3QKIAogc3RhdGljIGJv
b2wgcHJvY2Vzc1BhdXNlQWN0aW9uKEpTT046Ok9iamVjdCYgYWN0aW9uSXRlbSwgQWN0aW9uJiBh
Y3Rpb24sIE9wdGlvbmFsPFN0cmluZz4mIGVycm9yTWVzc2FnZSkKIHsKLSAgICBSZWZQdHI8SlNP
Tjo6VmFsdWU+IGR1cmF0aW9uVmFsdWU7Ci0gICAgaWYgKCFhY3Rpb25JdGVtLmdldFZhbHVlKCJk
dXJhdGlvbiJfcywgZHVyYXRpb25WYWx1ZSkpCisgICAgYXV0byBkdXJhdGlvblZhbHVlID0gYWN0
aW9uSXRlbS5nZXRWYWx1ZSgiZHVyYXRpb24iX3MpOworICAgIGlmICghZHVyYXRpb25WYWx1ZSkK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBhdXRvIGR1cmF0aW9uID0gdW5zaWduZWRWYWx1
ZSgqZHVyYXRpb25WYWx1ZSk7CkBAIC0xODAyLDggKzE4MDcsNyBAQCBzdGF0aWMgYm9vbCBwcm9j
ZXNzUGF1c2VBY3Rpb24oSlNPTjo6T2JqZWN0JiBhY3Rpb25JdGVtLCBBY3Rpb24mIGFjdGlvbiwg
T3B0aW9uYQogCiBzdGF0aWMgT3B0aW9uYWw8QWN0aW9uPiBwcm9jZXNzTnVsbEFjdGlvbihjb25z
dCBTdHJpbmcmIGlkLCBKU09OOjpPYmplY3QmIGFjdGlvbkl0ZW0sIE9wdGlvbmFsPFN0cmluZz4m
IGVycm9yTWVzc2FnZSkKIHsKLSAgICBTdHJpbmcgc3VidHlwZTsKLSAgICBhY3Rpb25JdGVtLmdl
dFN0cmluZygidHlwZSJfcywgc3VidHlwZSk7CisgICAgYXV0byBzdWJ0eXBlID0gYWN0aW9uSXRl
bS5nZXRTdHJpbmcoInR5cGUiX3MpOwogICAgIGlmIChzdWJ0eXBlICE9ICJwYXVzZSIpIHsKICAg
ICAgICAgZXJyb3JNZXNzYWdlID0gU3RyaW5nKCJUaGUgcGFyYW1ldGVyICd0eXBlJyBpbiBudWxs
IGFjdGlvbiBpcyBpbnZhbGlkIG9yIG1pc3NpbmciKTsKICAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKQEAgLTE4MTksOCArMTgyMyw3IEBAIHN0YXRpYyBPcHRpb25hbDxBY3Rpb24+IHByb2Nl
c3NOdWxsQWN0aW9uKGNvbnN0IFN0cmluZyYgaWQsIEpTT046Ok9iamVjdCYgYWN0aW9uCiBzdGF0
aWMgT3B0aW9uYWw8QWN0aW9uPiBwcm9jZXNzS2V5QWN0aW9uKGNvbnN0IFN0cmluZyYgaWQsIEpT
T046Ok9iamVjdCYgYWN0aW9uSXRlbSwgT3B0aW9uYWw8U3RyaW5nPiYgZXJyb3JNZXNzYWdlKQog
ewogICAgIEFjdGlvbjo6U3VidHlwZSBhY3Rpb25TdWJ0eXBlOwotICAgIFN0cmluZyBzdWJ0eXBl
OwotICAgIGFjdGlvbkl0ZW0uZ2V0U3RyaW5nKCJ0eXBlIl9zLCBzdWJ0eXBlKTsKKyAgICBhdXRv
IHN1YnR5cGUgPSBhY3Rpb25JdGVtLmdldFN0cmluZygidHlwZSJfcyk7CiAgICAgaWYgKHN1YnR5
cGUgPT0gInBhdXNlIikKICAgICAgICAgYWN0aW9uU3VidHlwZSA9IEFjdGlvbjo6U3VidHlwZTo6
UGF1c2U7CiAgICAgZWxzZSBpZiAoc3VidHlwZSA9PSAia2V5VXAiKQpAQCAtMTg0MSwxMyArMTg0
NCwxMyBAQCBzdGF0aWMgT3B0aW9uYWw8QWN0aW9uPiBwcm9jZXNzS2V5QWN0aW9uKGNvbnN0IFN0
cmluZyYgaWQsIEpTT046Ok9iamVjdCYgYWN0aW9uSQogICAgICAgICBicmVhazsKICAgICBjYXNl
IEFjdGlvbjo6U3VidHlwZTo6S2V5VXA6CiAgICAgY2FzZSBBY3Rpb246OlN1YnR5cGU6OktleURv
d246IHsKLSAgICAgICAgUmVmUHRyPEpTT046OlZhbHVlPiBrZXlWYWx1ZTsKLSAgICAgICAgaWYg
KCFhY3Rpb25JdGVtLmdldFZhbHVlKCJ2YWx1ZSJfcywga2V5VmFsdWUpKSB7CisgICAgICAgIGF1
dG8ga2V5VmFsdWUgPSBhY3Rpb25JdGVtLmdldFZhbHVlKCJ2YWx1ZSJfcyk7CisgICAgICAgIGlm
ICgha2V5VmFsdWUpIHsKICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IFN0cmluZygiVGhlIHBh
cmFtYXRlciAndmFsdWUnIGlzIG1pc3NpbmcgZm9yIGtleSB1cC9kb3duIGFjdGlvbiIpOwogICAg
ICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAgICAgfQotICAgICAgICBTdHJpbmcg
a2V5OwotICAgICAgICBpZiAoIWtleVZhbHVlLT5hc1N0cmluZyhrZXkpIHx8IGtleS5pc0VtcHR5
KCkpIHsKKyAgICAgICAgYXV0byBrZXkgPSBrZXlWYWx1ZS0+YXNTdHJpbmcoKTsKKyAgICAgICAg
aWYgKCFrZXkuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBTdHJpbmco
IlRoZSBwYXJhbWF0ZXIgJ3ZhbHVlJyBpcyBpbnZhbGlkIGZvciBrZXkgdXAvZG93biBhY3Rpb24i
KTsKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAgIH0KQEAgLTE4ODQs
OCArMTg4Nyw3IEBAIHN0YXRpYyBNb3VzZUJ1dHRvbiBhY3Rpb25Nb3VzZUJ1dHRvbih1bnNpZ25l
ZCBidXR0b24pCiBzdGF0aWMgT3B0aW9uYWw8QWN0aW9uPiBwcm9jZXNzUG9pbnRlckFjdGlvbihj
b25zdCBTdHJpbmcmIGlkLCBQb2ludGVyUGFyYW1ldGVycyYgcGFyYW1ldGVycywgSlNPTjo6T2Jq
ZWN0JiBhY3Rpb25JdGVtLCBPcHRpb25hbDxTdHJpbmc+JiBlcnJvck1lc3NhZ2UpCiB7CiAgICAg
QWN0aW9uOjpTdWJ0eXBlIGFjdGlvblN1YnR5cGU7Ci0gICAgU3RyaW5nIHN1YnR5cGU7Ci0gICAg
YWN0aW9uSXRlbS5nZXRTdHJpbmcoInR5cGUiX3MsIHN1YnR5cGUpOworICAgIGF1dG8gc3VidHlw
ZSA9IGFjdGlvbkl0ZW0uZ2V0U3RyaW5nKCJ0eXBlIl9zKTsKICAgICBpZiAoc3VidHlwZSA9PSAi
cGF1c2UiKQogICAgICAgICBhY3Rpb25TdWJ0eXBlID0gQWN0aW9uOjpTdWJ0eXBlOjpQYXVzZTsK
ICAgICBlbHNlIGlmIChzdWJ0eXBlID09ICJwb2ludGVyVXAiKQpAQCAtMTkxMSw4ICsxOTEzLDgg
QEAgc3RhdGljIE9wdGlvbmFsPEFjdGlvbj4gcHJvY2Vzc1BvaW50ZXJBY3Rpb24oY29uc3QgU3Ry
aW5nJiBpZCwgUG9pbnRlclBhcmFtZXRlcnMKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBBY3Rp
b246OlN1YnR5cGU6OlBvaW50ZXJVcDoKICAgICBjYXNlIEFjdGlvbjo6U3VidHlwZTo6UG9pbnRl
ckRvd246IHsKLSAgICAgICAgUmVmUHRyPEpTT046OlZhbHVlPiBidXR0b25WYWx1ZTsKLSAgICAg
ICAgaWYgKCFhY3Rpb25JdGVtLmdldFZhbHVlKCJidXR0b24iX3MsIGJ1dHRvblZhbHVlKSkgewor
ICAgICAgICBhdXRvIGJ1dHRvblZhbHVlID0gYWN0aW9uSXRlbS5nZXRWYWx1ZSgiYnV0dG9uIl9z
KTsKKyAgICAgICAgaWYgKCFidXR0b25WYWx1ZSkgewogICAgICAgICAgICAgZXJyb3JNZXNzYWdl
ID0gU3RyaW5nKCJUaGUgcGFyYW1hdGVyICdidXR0b24nIGlzIG1pc3NpbmcgZm9yIHBvaW50ZXIg
dXAvZG93biBhY3Rpb24iKTsKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAg
ICAgIH0KQEAgLTE5MjUsOCArMTkyNyw3IEBAIHN0YXRpYyBPcHRpb25hbDxBY3Rpb24+IHByb2Nl
c3NQb2ludGVyQWN0aW9uKGNvbnN0IFN0cmluZyYgaWQsIFBvaW50ZXJQYXJhbWV0ZXJzCiAgICAg
ICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIEFjdGlvbjo6U3VidHlwZTo6UG9pbnRlck1vdmU6
IHsKLSAgICAgICAgUmVmUHRyPEpTT046OlZhbHVlPiBkdXJhdGlvblZhbHVlOwotICAgICAgICBp
ZiAoYWN0aW9uSXRlbS5nZXRWYWx1ZSgiZHVyYXRpb24iX3MsIGR1cmF0aW9uVmFsdWUpKSB7Cisg
ICAgICAgIGlmIChhdXRvIGR1cmF0aW9uVmFsdWUgPSBhY3Rpb25JdGVtLmdldFZhbHVlKCJkdXJh
dGlvbiJfcykpIHsKICAgICAgICAgICAgIGF1dG8gZHVyYXRpb24gPSB1bnNpZ25lZFZhbHVlKCpk
dXJhdGlvblZhbHVlKTsKICAgICAgICAgICAgIGlmICghZHVyYXRpb24pIHsKICAgICAgICAgICAg
ICAgICBlcnJvck1lc3NhZ2UgPSBTdHJpbmcoIlRoZSBwYXJhbWV0ZXIgJ2R1cmF0aW9uJyBpcyBp
bnZhbGlkIGluIHBvaW50ZXIgbW92ZSBhY3Rpb24iKTsKQEAgLTE5MzUsMjAgKzE5MzYsMTYgQEAg
c3RhdGljIE9wdGlvbmFsPEFjdGlvbj4gcHJvY2Vzc1BvaW50ZXJBY3Rpb24oY29uc3QgU3RyaW5n
JiBpZCwgUG9pbnRlclBhcmFtZXRlcnMKICAgICAgICAgICAgIGFjdGlvbi5kdXJhdGlvbiA9IGR1
cmF0aW9uLnZhbHVlKCk7CiAgICAgICAgIH0KIAotICAgICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+
IG9yaWdpblZhbHVlOwotICAgICAgICBpZiAoYWN0aW9uSXRlbS5nZXRWYWx1ZSgib3JpZ2luIl9z
LCBvcmlnaW5WYWx1ZSkpIHsKLSAgICAgICAgICAgIGlmIChvcmlnaW5WYWx1ZS0+dHlwZSgpID09
IEpTT046OlZhbHVlOjpUeXBlOjpPYmplY3QpIHsKLSAgICAgICAgICAgICAgICBSZWZQdHI8SlNP
Tjo6T2JqZWN0PiBvcmlnaW5PYmplY3Q7Ci0gICAgICAgICAgICAgICAgb3JpZ2luVmFsdWUtPmFz
T2JqZWN0KG9yaWdpbk9iamVjdCk7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIGVsZW1lbnRJRDsK
LSAgICAgICAgICAgICAgICBpZiAoIW9yaWdpbk9iamVjdC0+Z2V0U3RyaW5nKFNlc3Npb246Ondl
YkVsZW1lbnRJZGVudGlmaWVyKCksIGVsZW1lbnRJRCkpIHsKKyAgICAgICAgaWYgKGF1dG8gb3Jp
Z2luVmFsdWUgPSBhY3Rpb25JdGVtLmdldFZhbHVlKCJvcmlnaW4iX3MpKSB7CisgICAgICAgICAg
ICBpZiAoYXV0byBvcmlnaW5PYmplY3QgPSBvcmlnaW5WYWx1ZS0+YXNPYmplY3QoKSkgeworICAg
ICAgICAgICAgICAgIGF1dG8gZWxlbWVudElEID0gb3JpZ2luT2JqZWN0LT5nZXRTdHJpbmcoU2Vz
c2lvbjo6d2ViRWxlbWVudElkZW50aWZpZXIoKSk7CisgICAgICAgICAgICAgICAgaWYgKCFlbGVt
ZW50SUQpIHsKICAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gU3RyaW5nKCJUaGUg
cGFyYW1ldGVyICdvcmlnaW4nIGlzIG5vdCBhIHZhbGlkIHdlYiBlbGVtZW50IG9iamVjdCBpbiBw
b2ludGVyIG1vdmUgYWN0aW9uIik7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGFjdGlvbi5vcmlnaW4g
PSBQb2ludGVyT3JpZ2luIHsgUG9pbnRlck9yaWdpbjo6VHlwZTo6RWxlbWVudCwgZWxlbWVudElE
IH07CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIFN0cmluZyBvcmlnaW47
Ci0gICAgICAgICAgICAgICAgb3JpZ2luVmFsdWUtPmFzU3RyaW5nKG9yaWdpbik7CisgICAgICAg
ICAgICAgICAgYXV0byBvcmlnaW4gPSBvcmlnaW5WYWx1ZS0+YXNTdHJpbmcoKTsKICAgICAgICAg
ICAgICAgICBpZiAob3JpZ2luID09ICJ2aWV3cG9ydCIpCiAgICAgICAgICAgICAgICAgICAgIGFj
dGlvbi5vcmlnaW4gPSBQb2ludGVyT3JpZ2luIHsgUG9pbnRlck9yaWdpbjo6VHlwZTo6Vmlld3Bv
cnQsIFdURjo6bnVsbG9wdCB9OwogICAgICAgICAgICAgICAgIGVsc2UgaWYgKG9yaWdpbiA9PSAi
cG9pbnRlciIpCkBAIC0xOTYxLDggKzE5NTgsNyBAQCBzdGF0aWMgT3B0aW9uYWw8QWN0aW9uPiBw
cm9jZXNzUG9pbnRlckFjdGlvbihjb25zdCBTdHJpbmcmIGlkLCBQb2ludGVyUGFyYW1ldGVycwog
ICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIGFjdGlvbi5vcmlnaW4gPSBQb2ludGVyT3JpZ2lu
IHsgUG9pbnRlck9yaWdpbjo6VHlwZTo6Vmlld3BvcnQsIFdURjo6bnVsbG9wdCB9OwogCi0gICAg
ICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4geFZhbHVlOwotICAgICAgICBpZiAoYWN0aW9uSXRlbS5n
ZXRWYWx1ZSgieCJfcywgeFZhbHVlKSkgeworICAgICAgICBpZiAoYXV0byB4VmFsdWUgPSBhY3Rp
b25JdGVtLmdldFZhbHVlKCJ4Il9zKSkgewogICAgICAgICAgICAgYXV0byB4ID0gdmFsdWVBc051
bWJlckluUmFuZ2UoKnhWYWx1ZSwgSU5UX01JTik7CiAgICAgICAgICAgICBpZiAoIXgpIHsKICAg
ICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBTdHJpbmcoIlRoZSBwYXJhbWF0ZXIgJ3gnIGlz
IGludmFsaWQgZm9yIHBvaW50ZXIgbW92ZSBhY3Rpb24iKTsKQEAgLTE5NzEsOCArMTk2Nyw3IEBA
IHN0YXRpYyBPcHRpb25hbDxBY3Rpb24+IHByb2Nlc3NQb2ludGVyQWN0aW9uKGNvbnN0IFN0cmlu
ZyYgaWQsIFBvaW50ZXJQYXJhbWV0ZXJzCiAgICAgICAgICAgICBhY3Rpb24ueCA9IHgudmFsdWUo
KTsKICAgICAgICAgfQogCi0gICAgICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4geVZhbHVlOwotICAg
ICAgICBpZiAoYWN0aW9uSXRlbS5nZXRWYWx1ZSgieSJfcywgeVZhbHVlKSkgeworICAgICAgICBp
ZiAoYXV0byB5VmFsdWUgPSBhY3Rpb25JdGVtLmdldFZhbHVlKCJ5Il9zKSkgewogICAgICAgICAg
ICAgYXV0byB5ID0gdmFsdWVBc051bWJlckluUmFuZ2UoKnlWYWx1ZSwgSU5UX01JTik7CiAgICAg
ICAgICAgICBpZiAoIXkpIHsKICAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBTdHJpbmco
IlRoZSBwYXJhbWF0ZXIgJ3knIGlzIGludmFsaWQgZm9yIHBvaW50ZXIgbW92ZSBhY3Rpb24iKTsK
QEAgLTE5OTUsMTggKzE5OTAsMTkgQEAgc3RhdGljIE9wdGlvbmFsPEFjdGlvbj4gcHJvY2Vzc1Bv
aW50ZXJBY3Rpb24oY29uc3QgU3RyaW5nJiBpZCwgUG9pbnRlclBhcmFtZXRlcnMKIHN0YXRpYyBP
cHRpb25hbDxQb2ludGVyUGFyYW1ldGVycz4gcHJvY2Vzc1BvaW50ZXJQYXJhbWV0ZXJzKEpTT046
Ok9iamVjdCYgYWN0aW9uU2VxdWVuY2UsIE9wdGlvbmFsPFN0cmluZz4mIGVycm9yTWVzc2FnZSkK
IHsKICAgICBQb2ludGVyUGFyYW1ldGVycyBwYXJhbWV0ZXJzOwotICAgIFJlZlB0cjxKU09OOjpW
YWx1ZT4gcGFyYW1ldGVyc0RhdGFWYWx1ZTsKLSAgICBpZiAoIWFjdGlvblNlcXVlbmNlLmdldFZh
bHVlKCJwYXJhbWV0ZXJzIl9zLCBwYXJhbWV0ZXJzRGF0YVZhbHVlKSkKKworICAgIGF1dG8gcGFy
YW1ldGVyc0RhdGFWYWx1ZSA9IGFjdGlvblNlcXVlbmNlLmdldFZhbHVlKCJwYXJhbWV0ZXJzIl9z
KTsKKyAgICBpZiAoIXBhcmFtZXRlcnNEYXRhVmFsdWUpCiAgICAgICAgIHJldHVybiBwYXJhbWV0
ZXJzOwogCi0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVyc0RhdGE7Ci0gICAgaWYg
KCFwYXJhbWV0ZXJzRGF0YVZhbHVlLT5hc09iamVjdChwYXJhbWV0ZXJzRGF0YSkpIHsKKyAgICBh
dXRvIHBhcmFtZXRlcnNEYXRhID0gcGFyYW1ldGVyc0RhdGFWYWx1ZS0+YXNPYmplY3QoKTsKKyAg
ICBpZiAoIXBhcmFtZXRlcnNEYXRhKSB7CiAgICAgICAgIGVycm9yTWVzc2FnZSA9IFN0cmluZygi
QWN0aW9uIHNlcXVlbmNlIHBvaW50ZXIgcGFyYW1ldGVycyBpcyBub3QgYW4gb2JqZWN0Iik7CiAg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgfQogCi0gICAgU3RyaW5nIHBvaW50ZXJU
eXBlOwotICAgIGlmICghcGFyYW1ldGVyc0RhdGEtPmdldFN0cmluZygicG9pbnRlclR5cGUiX3Ms
IHBvaW50ZXJUeXBlKSkKKyAgICBhdXRvIHBvaW50ZXJUeXBlID0gcGFyYW1ldGVyc0RhdGEtPmdl
dFN0cmluZygicG9pbnRlclR5cGUiX3MpOworICAgIGlmICghcG9pbnRlclR5cGUpCiAgICAgICAg
IHJldHVybiBwYXJhbWV0ZXJzOwogCiAgICAgaWYgKHBvaW50ZXJUeXBlID09ICJtb3VzZSIpCkBA
IC0yMDI1LDE0ICsyMDIxLDEzIEBAIHN0YXRpYyBPcHRpb25hbDxQb2ludGVyUGFyYW1ldGVycz4g
cHJvY2Vzc1BvaW50ZXJQYXJhbWV0ZXJzKEpTT046Ok9iamVjdCYgYWN0aW9uCiAKIHN0YXRpYyBP
cHRpb25hbDxWZWN0b3I8QWN0aW9uPj4gcHJvY2Vzc0lucHV0QWN0aW9uU2VxdWVuY2UoU2Vzc2lv
biYgc2Vzc2lvbiwgSlNPTjo6VmFsdWUmIGFjdGlvblNlcXVlbmNlVmFsdWUsIE9wdGlvbmFsPFN0
cmluZz4mIGVycm9yTWVzc2FnZSkKIHsKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBhY3Rpb25T
ZXF1ZW5jZTsKLSAgICBpZiAoIWFjdGlvblNlcXVlbmNlVmFsdWUuYXNPYmplY3QoYWN0aW9uU2Vx
dWVuY2UpKSB7CisgICAgYXV0byBhY3Rpb25TZXF1ZW5jZSA9IGFjdGlvblNlcXVlbmNlVmFsdWUu
YXNPYmplY3QoKTsKKyAgICBpZiAoIWFjdGlvblNlcXVlbmNlKSB7CiAgICAgICAgIGVycm9yTWVz
c2FnZSA9IFN0cmluZygiVGhlIGFjdGlvbiBzZXF1ZW5jZSBpcyBub3QgYW4gb2JqZWN0Iik7CiAg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgfQogCi0gICAgU3RyaW5nIHR5cGU7Ci0g
ICAgYWN0aW9uU2VxdWVuY2UtPmdldFN0cmluZygidHlwZSJfcywgdHlwZSk7CisgICAgYXV0byB0
eXBlID0gYWN0aW9uU2VxdWVuY2UtPmdldFN0cmluZygidHlwZSJfcyk7CiAgICAgSW5wdXRTb3Vy
Y2U6OlR5cGUgaW5wdXRTb3VyY2VUeXBlOwogICAgIGlmICh0eXBlID09ICJrZXkiKQogICAgICAg
ICBpbnB1dFNvdXJjZVR5cGUgPSBJbnB1dFNvdXJjZTo6VHlwZTo6S2V5OwpAQCAtMjA0NSw4ICsy
MDQwLDggQEAgc3RhdGljIE9wdGlvbmFsPFZlY3RvcjxBY3Rpb24+PiBwcm9jZXNzSW5wdXRBY3Rp
b25TZXF1ZW5jZShTZXNzaW9uJiBzZXNzaW9uLCBKU08KICAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKICAgICB9CiAKLSAgICBTdHJpbmcgaWQ7Ci0gICAgaWYgKCFhY3Rpb25TZXF1ZW5jZS0+
Z2V0U3RyaW5nKCJpZCJfcywgaWQpKSB7CisgICAgYXV0byBpZCA9IGFjdGlvblNlcXVlbmNlLT5n
ZXRTdHJpbmcoImlkIl9zKTsKKyAgICBpZiAoIWlkKSB7CiAgICAgICAgIGVycm9yTWVzc2FnZSA9
IFN0cmluZygiVGhlIHBhcmFtZXRlciAnaWQnIGlzIGludmFsaWQgb3IgbWlzc2luZyBpbiBhY3Rp
b24gc2VxdWVuY2UiKTsKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICB9CkBAIC0y
MDcyLDggKzIwNjcsOCBAQCBzdGF0aWMgT3B0aW9uYWw8VmVjdG9yPEFjdGlvbj4+IHByb2Nlc3NJ
bnB1dEFjdGlvblNlcXVlbmNlKFNlc3Npb24mIHNlc3Npb24sIEpTTwogICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwogICAgIH0KIAotICAgIFJlZlB0cjxKU09OOjpBcnJheT4gYWN0aW9uSXRl
bXM7Ci0gICAgaWYgKCFhY3Rpb25TZXF1ZW5jZS0+Z2V0QXJyYXkoImFjdGlvbnMiX3MsIGFjdGlv
bkl0ZW1zKSkgeworICAgIGF1dG8gYWN0aW9uSXRlbXMgPSBhY3Rpb25TZXF1ZW5jZS0+Z2V0QXJy
YXkoImFjdGlvbnMiX3MpOworICAgIGlmICghYWN0aW9uSXRlbXMpIHsKICAgICAgICAgZXJyb3JN
ZXNzYWdlID0gU3RyaW5nKCJUaGUgcGFyYW1ldGVyICdhY3Rpb25zJyBpcyBpbnZhbGlkIG9yIG5v
dCBwcmVzZW50IGluIGFjdGlvbiBzZXF1ZW5jZSIpOwogICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwogICAgIH0KQEAgLTIwODEsOSArMjA3Niw4IEBAIHN0YXRpYyBPcHRpb25hbDxWZWN0b3I8
QWN0aW9uPj4gcHJvY2Vzc0lucHV0QWN0aW9uU2VxdWVuY2UoU2Vzc2lvbiYgc2Vzc2lvbiwgSlNP
CiAgICAgVmVjdG9yPEFjdGlvbj4gYWN0aW9uczsKICAgICB1bnNpZ25lZCBhY3Rpb25JdGVtc0xl
bmd0aCA9IGFjdGlvbkl0ZW1zLT5sZW5ndGgoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgYWN0aW9uSXRlbXNMZW5ndGg7ICsraSkgewotICAgICAgICBhdXRvIGFjdGlvbkl0ZW1WYWx1
ZSA9IGFjdGlvbkl0ZW1zLT5nZXQoaSk7Ci0gICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IGFj
dGlvbkl0ZW07Ci0gICAgICAgIGlmICghYWN0aW9uSXRlbVZhbHVlLT5hc09iamVjdChhY3Rpb25J
dGVtKSkgeworICAgICAgICBhdXRvIGFjdGlvbkl0ZW0gPSBhY3Rpb25JdGVtcy0+Z2V0KGkpLT5h
c09iamVjdCgpOworICAgICAgICBpZiAoIWFjdGlvbkl0ZW0pIHsKICAgICAgICAgICAgIGVycm9y
TWVzc2FnZSA9IFN0cmluZygiQW4gYWN0aW9uIGluIGFjdGlvbiBzZXF1ZW5jZSBpcyBub3QgYW4g
b2JqZWN0Iik7CiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAgICB9CkBA
IC0yMTExLDggKzIxMDUsOCBAQCB2b2lkIFdlYkRyaXZlclNlcnZpY2U6OnBlcmZvcm1BY3Rpb25z
KFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycywgRnVuY3RpbwogICAgIGlmICghZmlu
ZFNlc3Npb25PckNvbXBsZXRlV2l0aEVycm9yKCpwYXJhbWV0ZXJzLCBjb21wbGV0aW9uSGFuZGxl
cikpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlZlB0cjxKU09OOjpBcnJheT4gYWN0aW9uc0Fy
cmF5OwotICAgIGlmICghcGFyYW1ldGVycy0+Z2V0QXJyYXkoImFjdGlvbnMiX3MsIGFjdGlvbnNB
cnJheSkpIHsKKyAgICBhdXRvIGFjdGlvbnNBcnJheSA9IHBhcmFtZXRlcnMtPmdldEFycmF5KCJh
Y3Rpb25zIl9zKTsKKyAgICBpZiAoIWFjdGlvbnNBcnJheSkgewogICAgICAgICBjb21wbGV0aW9u
SGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6SW52
YWxpZEFyZ3VtZW50LCBTdHJpbmcoIlRoZSBwYXJhbWF0ZXIgJ2FjdGlvbnMnIGlzIGludmFsaWQg
b3Igbm90IHByZXNlbnQiKSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMjEyMiw3ICsy
MTE2LDcgQEAgdm9pZCBXZWJEcml2ZXJTZXJ2aWNlOjpwZXJmb3JtQWN0aW9ucyhSZWZQdHI8SlNP
Tjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMsIEZ1bmN0aW8KICAgICB1bnNpZ25lZCBhY3Rpb25zQXJy
YXlMZW5ndGggPSBhY3Rpb25zQXJyYXktPmxlbmd0aCgpOwogICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBhY3Rpb25zQXJyYXlMZW5ndGg7ICsraSkgewogICAgICAgICBhdXRvIGFjdGlvblNl
cXVlbmNlID0gYWN0aW9uc0FycmF5LT5nZXQoaSk7Ci0gICAgICAgIGF1dG8gaW5wdXRTb3VyY2VB
Y3Rpb25zID0gcHJvY2Vzc0lucHV0QWN0aW9uU2VxdWVuY2UoKm1fc2Vzc2lvbiwgKmFjdGlvblNl
cXVlbmNlLCBlcnJvck1lc3NhZ2UpOworICAgICAgICBhdXRvIGlucHV0U291cmNlQWN0aW9ucyA9
IHByb2Nlc3NJbnB1dEFjdGlvblNlcXVlbmNlKCptX3Nlc3Npb24sIGFjdGlvblNlcXVlbmNlLCBl
cnJvck1lc3NhZ2UpOwogICAgICAgICBpZiAoIWlucHV0U291cmNlQWN0aW9ucykgewogICAgICAg
ICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0
OjpFcnJvckNvZGU6OkludmFsaWRBcmd1bWVudCwgZXJyb3JNZXNzYWdlLnZhbHVlKCkpKTsKICAg
ICAgICAgICAgIHJldHVybjsKQEAgLTIyMDIsOCArMjE5Niw4IEBAIHZvaWQgV2ViRHJpdmVyU2Vy
dmljZTo6c2VuZEFsZXJ0VGV4dChSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMsIEZ1
bmN0aW9uCiAgICAgaWYgKCFmaW5kU2Vzc2lvbk9yQ29tcGxldGVXaXRoRXJyb3IoKnBhcmFtZXRl
cnMsIGNvbXBsZXRpb25IYW5kbGVyKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgU3RyaW5nIHRl
eHQ7Ci0gICAgaWYgKCFwYXJhbWV0ZXJzLT5nZXRTdHJpbmcoInRleHQiX3MsIHRleHQpKSB7Cisg
ICAgYXV0byB0ZXh0ID0gcGFyYW1ldGVycy0+Z2V0U3RyaW5nKCJ0ZXh0Il9zKTsKKyAgICBpZiAo
IXRleHQpIHsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChD
b21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OkludmFsaWRBcmd1bWVudCkpOwogICAgICAgICByZXR1
cm47CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkRyaXZlci9XZWJEcml2ZXJTZXJ2aWNl
LmggYi9Tb3VyY2UvV2ViRHJpdmVyL1dlYkRyaXZlclNlcnZpY2UuaAppbmRleCBhMzRiZWI4ZjBk
ZDNkNjQwNGNjOTY3NmRmMjBiNDBiODIwMTk1ODBiLi5lZDlkYjA4ODU3Yjk0NzQ5ZjRlN2E0OGU4
ZjBhOTZmNGI0NDMyYjM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViRHJpdmVyL1dlYkRyaXZlclNl
cnZpY2UuaAorKysgYi9Tb3VyY2UvV2ViRHJpdmVyL1dlYkRyaXZlclNlcnZpY2UuaApAQCAtMTIy
LDggKzEyMiw4IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gdmFsaWRhdGVk
Q2FwYWJpbGl0aWVzKGNvbnN0IEpTT046Ok9iamVjdCYpIGNvbnN0OwogICAgIFJlZlB0cjxKU09O
OjpPYmplY3Q+IG1lcmdlQ2FwYWJpbGl0aWVzKGNvbnN0IEpTT046Ok9iamVjdCYsIGNvbnN0IEpT
T046Ok9iamVjdCYpIGNvbnN0OwogICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG1hdGNoQ2FwYWJp
bGl0aWVzKGNvbnN0IEpTT046Ok9iamVjdCYpIGNvbnN0OwotICAgIGJvb2wgcGxhdGZvcm1WYWxp
ZGF0ZUNhcGFiaWxpdHkoY29uc3QgU3RyaW5nJiwgY29uc3QgUmVmUHRyPEpTT046OlZhbHVlPiYp
IGNvbnN0OwotICAgIGJvb2wgcGxhdGZvcm1NYXRjaENhcGFiaWxpdHkoY29uc3QgU3RyaW5nJiwg
Y29uc3QgUmVmUHRyPEpTT046OlZhbHVlPiYpIGNvbnN0OworICAgIGJvb2wgcGxhdGZvcm1WYWxp
ZGF0ZUNhcGFiaWxpdHkoY29uc3QgU3RyaW5nJiwgY29uc3QgUmVmPEpTT046OlZhbHVlPiYpIGNv
bnN0OworICAgIGJvb2wgcGxhdGZvcm1NYXRjaENhcGFiaWxpdHkoY29uc3QgU3RyaW5nJiwgY29u
c3QgUmVmPEpTT046OlZhbHVlPiYpIGNvbnN0OwogICAgIGJvb2wgcGxhdGZvcm1TdXBwb3J0UHJv
eHlUeXBlKGNvbnN0IFN0cmluZyYpIGNvbnN0OwogICAgIHZvaWQgcGFyc2VDYXBhYmlsaXRpZXMo
Y29uc3QgSlNPTjo6T2JqZWN0JiBkZXNpcmVkQ2FwYWJpbGl0aWVzLCBDYXBhYmlsaXRpZXMmKSBj
b25zdDsKICAgICB2b2lkIHBsYXRmb3JtUGFyc2VDYXBhYmlsaXRpZXMoY29uc3QgSlNPTjo6T2Jq
ZWN0JiBkZXNpcmVkQ2FwYWJpbGl0aWVzLCBDYXBhYmlsaXRpZXMmKSBjb25zdDsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJEcml2ZXIvZ3RrL1dlYkRyaXZlclNlcnZpY2VHdGsuY3BwIGIvU291cmNl
L1dlYkRyaXZlci9ndGsvV2ViRHJpdmVyU2VydmljZUd0ay5jcHAKaW5kZXggMjRkMWJkZDAxNGEw
NzBiNTk3NjQ0YjU1MzY3ZDQzNzQwN2UyYzE5NC4uNGFiNWU0ZmUzMGIwYWM5YTM0M2MxMmQ2OGRj
N2QzYjIxODA1NWU0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkRyaXZlci9ndGsvV2ViRHJpdmVy
U2VydmljZUd0ay5jcHAKKysrIGIvU291cmNlL1dlYkRyaXZlci9ndGsvV2ViRHJpdmVyU2Vydmlj
ZUd0ay5jcHAKQEAgLTQwLDY0ICs0MCw0OCBAQCBDYXBhYmlsaXRpZXMgV2ViRHJpdmVyU2Vydmlj
ZTo6cGxhdGZvcm1DYXBhYmlsaXRpZXMoKQogICAgIHJldHVybiBjYXBhYmlsaXRpZXM7CiB9CiAK
LWJvb2wgV2ViRHJpdmVyU2VydmljZTo6cGxhdGZvcm1WYWxpZGF0ZUNhcGFiaWxpdHkoY29uc3Qg
U3RyaW5nJiBuYW1lLCBjb25zdCBSZWZQdHI8SlNPTjo6VmFsdWU+JiB2YWx1ZSkgY29uc3QKK2Jv
b2wgV2ViRHJpdmVyU2VydmljZTo6cGxhdGZvcm1WYWxpZGF0ZUNhcGFiaWxpdHkoY29uc3QgU3Ry
aW5nJiBuYW1lLCBjb25zdCBSZWY8SlNPTjo6VmFsdWU+JiB2YWx1ZSkgY29uc3QKIHsKICAgICBp
ZiAobmFtZSAhPSAid2Via2l0Z3RrOmJyb3dzZXJPcHRpb25zIikKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBicm93c2VyT3B0aW9uczsKLSAgICBpZiAo
IXZhbHVlLT5hc09iamVjdChicm93c2VyT3B0aW9ucykpCisgICAgYXV0byBicm93c2VyT3B0aW9u
cyA9IHZhbHVlLT5hc09iamVjdCgpOworICAgIGlmICghYnJvd3Nlck9wdGlvbnMpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAogICAgIGlmIChicm93c2VyT3B0aW9ucy0+aXNOdWxsKCkpCiAgICAg
ICAgIHJldHVybiB0cnVlOwogCi0gICAgUmVmUHRyPEpTT046OlZhbHVlPiBiaW5hcnlWYWx1ZTsK
LSAgICBTdHJpbmcgYmluYXJ5OwotICAgIGlmIChicm93c2VyT3B0aW9ucy0+Z2V0VmFsdWUoImJp
bmFyeSJfcywgYmluYXJ5VmFsdWUpICYmICFiaW5hcnlWYWx1ZS0+YXNTdHJpbmcoYmluYXJ5KSkK
KyAgICBhdXRvIGJpbmFyeSA9IGJyb3dzZXJPcHRpb25zLT5nZXRTdHJpbmcoImJpbmFyeSJfcyk7
CisgICAgaWYgKCFiaW5hcnkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIFJlZlB0cjxK
U09OOjpWYWx1ZT4gdXNlT3ZlcmxheVNjcm9sbGJhcnNWYWx1ZTsKLSAgICBib29sIHVzZU92ZXJs
YXlTY3JvbGxiYXJzOwotICAgIGlmIChicm93c2VyT3B0aW9ucy0+Z2V0VmFsdWUoInVzZU92ZXJs
YXlTY3JvbGxiYXJzIl9zLCB1c2VPdmVybGF5U2Nyb2xsYmFyc1ZhbHVlKSAmJiAhdXNlT3Zlcmxh
eVNjcm9sbGJhcnNWYWx1ZS0+YXNCb29sZWFuKHVzZU92ZXJsYXlTY3JvbGxiYXJzKSkKKyAgICBh
dXRvIHVzZU92ZXJsYXlTY3JvbGxiYXJzID0gYnJvd3Nlck9wdGlvbnMtPmdldEJvb2xlYW4oInVz
ZU92ZXJsYXlTY3JvbGxiYXJzIl9zKTsKKyAgICBpZiAoIXVzZU92ZXJsYXlTY3JvbGxiYXJzKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IGJyb3dzZXJB
cmd1bWVudHNWYWx1ZTsKLSAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IGJyb3dzZXJBcmd1bWVudHM7
Ci0gICAgaWYgKGJyb3dzZXJPcHRpb25zLT5nZXRWYWx1ZSgiYXJncyJfcywgYnJvd3NlckFyZ3Vt
ZW50c1ZhbHVlKSkgewotICAgICAgICBpZiAoIWJyb3dzZXJBcmd1bWVudHNWYWx1ZS0+YXNBcnJh
eShicm93c2VyQXJndW1lbnRzKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQorICAgIGlm
IChhdXRvIGJyb3dzZXJBcmd1bWVudHMgPSBicm93c2VyT3B0aW9ucy0+Z2V0QXJyYXkoImFyZ3Mi
X3MpKSB7CiAgICAgICAgIHVuc2lnbmVkIGJyb3dzZXJBcmd1bWVudHNMZW5ndGggPSBicm93c2Vy
QXJndW1lbnRzLT5sZW5ndGgoKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJy
b3dzZXJBcmd1bWVudHNMZW5ndGg7ICsraSkgewotICAgICAgICAgICAgUmVmUHRyPEpTT046OlZh
bHVlPiB2YWx1ZSA9IGJyb3dzZXJBcmd1bWVudHMtPmdldChpKTsKLSAgICAgICAgICAgIFN0cmlu
ZyBhcmd1bWVudDsKLSAgICAgICAgICAgIGlmICghdmFsdWUtPmFzU3RyaW5nKGFyZ3VtZW50KSkK
KyAgICAgICAgICAgIGF1dG8gYXJndW1lbnQgPSBicm93c2VyQXJndW1lbnRzLT5nZXQoaSktPmFz
U3RyaW5nKCk7CisgICAgICAgICAgICBpZiAoIWFyZ3VtZW50KQogICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgfQogICAgIH0KIAotICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4g
Y2VydGlmaWNhdGVzVmFsdWU7Ci0gICAgaWYgKGJyb3dzZXJPcHRpb25zLT5nZXRWYWx1ZSgiY2Vy
dGlmaWNhdGVzIl9zLCBjZXJ0aWZpY2F0ZXNWYWx1ZSkpIHsKLSAgICAgICAgUmVmUHRyPEpTT046
OkFycmF5PiBjZXJ0aWZpY2F0ZXM7Ci0gICAgICAgIGlmICghY2VydGlmaWNhdGVzVmFsdWUtPmFz
QXJyYXkoY2VydGlmaWNhdGVzKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQorICAgIGlm
IChhdXRvIGNlcnRpZmljYXRlcyA9IGJyb3dzZXJPcHRpb25zLT5nZXRBcnJheSgiY2VydGlmaWNh
dGVzIl9zKSkgewogICAgICAgICB1bnNpZ25lZCBjZXJ0aWZpY2F0ZXNMZW5ndGggPSBjZXJ0aWZp
Y2F0ZXMtPmxlbmd0aCgpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY2VydGlm
aWNhdGVzTGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gY2Vy
dGlmaWNhdGVWYWx1ZSA9IGNlcnRpZmljYXRlcy0+Z2V0KGkpOwotICAgICAgICAgICAgUmVmUHRy
PEpTT046Ok9iamVjdD4gY2VydGlmaWNhdGU7Ci0gICAgICAgICAgICBpZiAoIWNlcnRpZmljYXRl
VmFsdWUtPmFzT2JqZWN0KGNlcnRpZmljYXRlKSkKKyAgICAgICAgICAgIGF1dG8gY2VydGlmaWNh
dGUgPSBjZXJ0aWZpY2F0ZXMtPmdldChpKS0+YXNPYmplY3QoKTsKKyAgICAgICAgICAgIGlmICgh
Y2VydGlmaWNhdGUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgICAg
ICBSZWZQdHI8SlNPTjo6VmFsdWU+IGhvc3RWYWx1ZTsKLSAgICAgICAgICAgIFN0cmluZyBob3N0
OwotICAgICAgICAgICAgaWYgKCFjZXJ0aWZpY2F0ZS0+Z2V0VmFsdWUoImhvc3QiX3MsIGhvc3RW
YWx1ZSkgfHwgIWhvc3RWYWx1ZS0+YXNTdHJpbmcoaG9zdCkpCisgICAgICAgICAgICBhdXRvIGhv
c3QgPSBjZXJ0aWZpY2F0ZS0+Z2V0U3RyaW5nKCJob3N0Il9zKTsKKyAgICAgICAgICAgIGlmICgh
aG9zdCkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgICAgIFJlZlB0
cjxKU09OOjpWYWx1ZT4gY2VydGlmaWNhdGVGaWxlVmFsdWU7Ci0gICAgICAgICAgICBTdHJpbmcg
Y2VydGlmaWNhdGVGaWxlOwotICAgICAgICAgICAgaWYgKCFjZXJ0aWZpY2F0ZS0+Z2V0VmFsdWUo
ImNlcnRpZmljYXRlRmlsZSJfcywgY2VydGlmaWNhdGVGaWxlVmFsdWUpIHx8ICFjZXJ0aWZpY2F0
ZUZpbGVWYWx1ZS0+YXNTdHJpbmcoY2VydGlmaWNhdGVGaWxlKSkKKyAgICAgICAgICAgIGF1dG8g
Y2VydGlmaWNhdGVGaWxlID0gY2VydGlmaWNhdGUtPmdldFN0cmluZygiY2VydGlmaWNhdGVGaWxl
Il9zKTsKKyAgICAgICAgICAgIGlmICghY2VydGlmaWNhdGVGaWxlKQogICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgIH0KQEAgLTEwNSw3ICs4OSw3IEBAIGJvb2wg
V2ViRHJpdmVyU2VydmljZTo6cGxhdGZvcm1WYWxpZGF0ZUNhcGFiaWxpdHkoY29uc3QgU3RyaW5n
JiBuYW1lLCBjb25zdCBSZWZQCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgV2ViRHJpdmVy
U2VydmljZTo6cGxhdGZvcm1NYXRjaENhcGFiaWxpdHkoY29uc3QgU3RyaW5nJiwgY29uc3QgUmVm
UHRyPEpTT046OlZhbHVlPiYpIGNvbnN0Citib29sIFdlYkRyaXZlclNlcnZpY2U6OnBsYXRmb3Jt
TWF0Y2hDYXBhYmlsaXR5KGNvbnN0IFN0cmluZyYsIGNvbnN0IFJlZjxKU09OOjpWYWx1ZT4mKSBj
b25zdAogewogICAgIHJldHVybiB0cnVlOwogfQpAQCAtMTE2LDEyICsxMDAsMTIgQEAgdm9pZCBX
ZWJEcml2ZXJTZXJ2aWNlOjpwbGF0Zm9ybVBhcnNlQ2FwYWJpbGl0aWVzKGNvbnN0IEpTT046Ok9i
amVjdCYgbWF0Y2hlZENhcGEKICAgICBjYXBhYmlsaXRpZXMuYnJvd3NlckFyZ3VtZW50cyA9IFZl
Y3RvcjxTdHJpbmc+IHsgIi0tYXV0b21hdGlvbiJfcyB9OwogICAgIGNhcGFiaWxpdGllcy51c2VP
dmVybGF5U2Nyb2xsYmFycyA9IHRydWU7CiAKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBicm93
c2VyT3B0aW9uczsKLSAgICBpZiAoIW1hdGNoZWRDYXBhYmlsaXRpZXMuZ2V0T2JqZWN0KCJ3ZWJr
aXRndGs6YnJvd3Nlck9wdGlvbnMiX3MsIGJyb3dzZXJPcHRpb25zKSkKKyAgICBhdXRvIGJyb3dz
ZXJPcHRpb25zID0gbWF0Y2hlZENhcGFiaWxpdGllcy5nZXRPYmplY3QoIndlYmtpdGd0azpicm93
c2VyT3B0aW9ucyJfcyk7CisgICAgaWYgKCFicm93c2VyT3B0aW9ucykKICAgICAgICAgcmV0dXJu
OwogCi0gICAgU3RyaW5nIGJyb3dzZXJCaW5hcnk7Ci0gICAgaWYgKGJyb3dzZXJPcHRpb25zLT5n
ZXRTdHJpbmcoImJpbmFyeSJfcywgYnJvd3NlckJpbmFyeSkpIHsKKyAgICBhdXRvIGJyb3dzZXJC
aW5hcnkgPSBicm93c2VyT3B0aW9ucy0+Z2V0U3RyaW5nKCJiaW5hcnkiX3MpOworICAgIGlmICgh
IWJyb3dzZXJCaW5hcnkpIHsKICAgICAgICAgY2FwYWJpbGl0aWVzLmJyb3dzZXJCaW5hcnkgPSBi
cm93c2VyQmluYXJ5OwogICAgICAgICBjYXBhYmlsaXRpZXMuYnJvd3NlckFyZ3VtZW50cyA9IFdU
Rjo6bnVsbG9wdDsKICAgICB9CkBAIC0xMzIsMzcgKzExNiwzMCBAQCB2b2lkIFdlYkRyaXZlclNl
cnZpY2U6OnBsYXRmb3JtUGFyc2VDYXBhYmlsaXRpZXMoY29uc3QgSlNPTjo6T2JqZWN0JiBtYXRj
aGVkQ2FwYQogICAgICAgICBjYXBhYmlsaXRpZXMuYnJvd3NlckFyZ3VtZW50cyA9IFZlY3RvcjxT
dHJpbmc+KCk7CiAgICAgICAgIGNhcGFiaWxpdGllcy5icm93c2VyQXJndW1lbnRzLT5yZXNlcnZl
SW5pdGlhbENhcGFjaXR5KGJyb3dzZXJBcmd1bWVudHNMZW5ndGgpOwogICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgYnJvd3NlckFyZ3VtZW50c0xlbmd0aDsgKytpKSB7Ci0gICAgICAg
ICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHZhbHVlID0gYnJvd3NlckFyZ3VtZW50cy0+Z2V0KGkp
OwotICAgICAgICAgICAgU3RyaW5nIGFyZ3VtZW50OwotICAgICAgICAgICAgdmFsdWUtPmFzU3Ry
aW5nKGFyZ3VtZW50KTsKKyAgICAgICAgICAgIGF1dG8gYXJndW1lbnQgPSBicm93c2VyQXJndW1l
bnRzLT5nZXQoaSktPmFzU3RyaW5nKCk7CiAgICAgICAgICAgICBBU1NFUlQoIWFyZ3VtZW50Lmlz
TnVsbCgpKTsKICAgICAgICAgICAgIGNhcGFiaWxpdGllcy5icm93c2VyQXJndW1lbnRzLT51bmNo
ZWNrZWRBcHBlbmQoV1RGTW92ZShhcmd1bWVudCkpOwogICAgICAgICB9CiAgICAgfQogCi0gICAg
Ym9vbCB1c2VPdmVybGF5U2Nyb2xsYmFyczsKLSAgICBpZiAoYnJvd3Nlck9wdGlvbnMtPmdldEJv
b2xlYW4oInVzZU92ZXJsYXlTY3JvbGxiYXJzIl9zLCB1c2VPdmVybGF5U2Nyb2xsYmFycykpCisg
ICAgaWYgKGF1dG8gdXNlT3ZlcmxheVNjcm9sbGJhcnMgPSBicm93c2VyT3B0aW9ucy0+Z2V0Qm9v
bGVhbigidXNlT3ZlcmxheVNjcm9sbGJhcnMiX3MpKQogICAgICAgICBjYXBhYmlsaXRpZXMudXNl
T3ZlcmxheVNjcm9sbGJhcnMgPSB1c2VPdmVybGF5U2Nyb2xsYmFyczsKICAgICBlbHNlCiAgICAg
ICAgIGNhcGFiaWxpdGllcy51c2VPdmVybGF5U2Nyb2xsYmFycyA9IHRydWU7CiAKLSAgICBSZWZQ
dHI8SlNPTjo6QXJyYXk+IGNlcnRpZmljYXRlczsKLSAgICBpZiAoYnJvd3Nlck9wdGlvbnMtPmdl
dEFycmF5KCJjZXJ0aWZpY2F0ZXMiX3MsIGNlcnRpZmljYXRlcykgJiYgY2VydGlmaWNhdGVzLT5s
ZW5ndGgoKSkgeworICAgIGF1dG8gY2VydGlmaWNhdGVzID0gYnJvd3Nlck9wdGlvbnMtPmdldEFy
cmF5KCJjZXJ0aWZpY2F0ZXMiX3MpOworICAgIGlmIChjZXJ0aWZpY2F0ZXMgJiYgY2VydGlmaWNh
dGVzLT5sZW5ndGgoKSkgewogICAgICAgICB1bnNpZ25lZCBjZXJ0aWZpY2F0ZXNMZW5ndGggPSBj
ZXJ0aWZpY2F0ZXMtPmxlbmd0aCgpOwogICAgICAgICBjYXBhYmlsaXRpZXMuY2VydGlmaWNhdGVz
ID0gVmVjdG9yPHN0ZDo6cGFpcjxTdHJpbmcsIFN0cmluZz4+KCk7CiAgICAgICAgIGNhcGFiaWxp
dGllcy5jZXJ0aWZpY2F0ZXMtPnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoY2VydGlmaWNhdGVzTGVu
Z3RoKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNlcnRpZmljYXRlc0xlbmd0
aDsgKytpKSB7Ci0gICAgICAgICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHZhbHVlID0gY2VydGlm
aWNhdGVzLT5nZXQoaSk7Ci0gICAgICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBjZXJ0aWZp
Y2F0ZTsKLSAgICAgICAgICAgIHZhbHVlLT5hc09iamVjdChjZXJ0aWZpY2F0ZSk7CisgICAgICAg
ICAgICBhdXRvIGNlcnRpZmljYXRlID0gY2VydGlmaWNhdGVzLT5nZXQoaSktPmFzT2JqZWN0KCk7
CiAgICAgICAgICAgICBBU1NFUlQoY2VydGlmaWNhdGUpOwogCi0gICAgICAgICAgICBTdHJpbmcg
aG9zdDsKLSAgICAgICAgICAgIGNlcnRpZmljYXRlLT5nZXRTdHJpbmcoImhvc3QiX3MsIGhvc3Qp
OworICAgICAgICAgICAgYXV0byBob3N0ID0gY2VydGlmaWNhdGUtPmdldFN0cmluZygiaG9zdCJf
cyk7CiAgICAgICAgICAgICBBU1NFUlQoIWhvc3QuaXNOdWxsKCkpOwogCi0gICAgICAgICAgICBT
dHJpbmcgY2VydGlmaWNhdGVGaWxlOwotICAgICAgICAgICAgY2VydGlmaWNhdGUtPmdldFN0cmlu
ZygiY2VydGlmaWNhdGVGaWxlIl9zLCBjZXJ0aWZpY2F0ZUZpbGUpOworICAgICAgICAgICAgYXV0
byBjZXJ0aWZpY2F0ZUZpbGUgPSBjZXJ0aWZpY2F0ZS0+Z2V0U3RyaW5nKCJjZXJ0aWZpY2F0ZUZp
bGUiX3MpOwogICAgICAgICAgICAgQVNTRVJUKCFjZXJ0aWZpY2F0ZUZpbGUuaXNOdWxsKCkpOwog
CiAgICAgICAgICAgICBjYXBhYmlsaXRpZXMuY2VydGlmaWNhdGVzLT51bmNoZWNrZWRBcHBlbmQo
eyBXVEZNb3ZlKGhvc3QpLCBXVEZNb3ZlKGNlcnRpZmljYXRlRmlsZSkgfSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViRHJpdmVyL3dpbi9XZWJEcml2ZXJTZXJ2aWNlV2luLmNwcCBiL1NvdXJjZS9X
ZWJEcml2ZXIvd2luL1dlYkRyaXZlclNlcnZpY2VXaW4uY3BwCmluZGV4IGVjZmU0Y2QxMDUyNmVh
YTFlY2NhY2EwNDM5ODhjZDYzMzA0ZDM4NGQuLjlhOTYwZjBiYmYyZGEzODhhOTZmNjlmNGFmNzQx
N2VlNjBlZDM3MzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJEcml2ZXIvd2luL1dlYkRyaXZlclNl
cnZpY2VXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJEcml2ZXIvd2luL1dlYkRyaXZlclNlcnZpY2VX
aW4uY3BwCkBAIC00NCwxMiArNDQsMTIgQEAgYm9vbCBXZWJEcml2ZXJTZXJ2aWNlOjpwbGF0Zm9y
bUNvbXBhcmVCcm93c2VyVmVyc2lvbnMoY29uc3QgU3RyaW5nJiByZXF1aXJlZFZlcnMKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBXZWJEcml2ZXJTZXJ2aWNlOjpwbGF0Zm9ybVZhbGlkYXRl
Q2FwYWJpbGl0eShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFJlZlB0cjxKU09OOjpWYWx1ZT4m
IHZhbHVlKSBjb25zdAorYm9vbCBXZWJEcml2ZXJTZXJ2aWNlOjpwbGF0Zm9ybVZhbGlkYXRlQ2Fw
YWJpbGl0eShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFJlZjxKU09OOjpWYWx1ZT4mIHZhbHVl
KSBjb25zdAogewogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFdlYkRyaXZlclNlcnZpY2U6
OnBsYXRmb3JtTWF0Y2hDYXBhYmlsaXR5KGNvbnN0IFN0cmluZyYsIGNvbnN0IFJlZlB0cjxKU09O
OjpWYWx1ZT4mKSBjb25zdAorYm9vbCBXZWJEcml2ZXJTZXJ2aWNlOjpwbGF0Zm9ybU1hdGNoQ2Fw
YWJpbGl0eShjb25zdCBTdHJpbmcmLCBjb25zdCBSZWY8SlNPTjo6VmFsdWU+JikgY29uc3QKIHsK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJEcml2ZXIvd3BlL1dl
YkRyaXZlclNlcnZpY2VXUEUuY3BwIGIvU291cmNlL1dlYkRyaXZlci93cGUvV2ViRHJpdmVyU2Vy
dmljZVdQRS5jcHAKaW5kZXggMDZkM2E1YzJhODI1MjkxOGU3NGYxMDNlYmM4OWNiNTIzNzllOTAz
Ny4uMzhhYzJlNDUxYzhhMjM2Mjg2NjNlYTIzZjNiY2ZjZGJmMTZmNmUzYSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkRyaXZlci93cGUvV2ViRHJpdmVyU2VydmljZVdQRS5jcHAKKysrIGIvU291cmNl
L1dlYkRyaXZlci93cGUvV2ViRHJpdmVyU2VydmljZVdQRS5jcHAKQEAgLTQwLDU3ICs0MCw0NyBA
QCBDYXBhYmlsaXRpZXMgV2ViRHJpdmVyU2VydmljZTo6cGxhdGZvcm1DYXBhYmlsaXRpZXMoKQog
ICAgIHJldHVybiBjYXBhYmlsaXRpZXM7CiB9CiAKLWJvb2wgV2ViRHJpdmVyU2VydmljZTo6cGxh
dGZvcm1WYWxpZGF0ZUNhcGFiaWxpdHkoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBSZWZQdHI8
SlNPTjo6VmFsdWU+JiB2YWx1ZSkgY29uc3QKK2Jvb2wgV2ViRHJpdmVyU2VydmljZTo6cGxhdGZv
cm1WYWxpZGF0ZUNhcGFiaWxpdHkoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBSZWY8SlNPTjo6
VmFsdWU+JiB2YWx1ZSkgY29uc3QKIHsKICAgICBpZiAobmFtZSAhPSAid3BlOmJyb3dzZXJPcHRp
b25zIikKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBi
cm93c2VyT3B0aW9uczsKLSAgICBpZiAoIXZhbHVlLT5hc09iamVjdChicm93c2VyT3B0aW9ucykp
CisgICAgYXV0byBicm93c2VyT3B0aW9ucyA9IHZhbHVlLT5hc09iamVjdCgpOworICAgIGlmICgh
YnJvd3Nlck9wdGlvbnMpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChicm93c2Vy
T3B0aW9ucy0+aXNOdWxsKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgLy8gSWYgYnJv
d3NlciBvcHRpb25zIGFyZSBwcm92aWRlZCwgYmluYXJ5IGlzIHJlcXVpcmVkLgotICAgIFN0cmlu
ZyBiaW5hcnk7Ci0gICAgaWYgKCFicm93c2VyT3B0aW9ucy0+Z2V0U3RyaW5nKCJiaW5hcnkiX3Ms
IGJpbmFyeSkpCisgICAgYXV0byBiaW5hcnkgPSBicm93c2VyT3B0aW9ucy0+Z2V0U3RyaW5nKCJi
aW5hcnkiX3MpOworICAgIGlmICghYmluYXJ5KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAg
ICBSZWZQdHI8SlNPTjo6VmFsdWU+IGJyb3dzZXJBcmd1bWVudHNWYWx1ZTsKLSAgICBSZWZQdHI8
SlNPTjo6QXJyYXk+IGJyb3dzZXJBcmd1bWVudHM7Ci0gICAgaWYgKGJyb3dzZXJPcHRpb25zLT5n
ZXRWYWx1ZSgiYXJncyJfcywgYnJvd3NlckFyZ3VtZW50c1ZhbHVlKSAmJiAhYnJvd3NlckFyZ3Vt
ZW50c1ZhbHVlLT5hc0FycmF5KGJyb3dzZXJBcmd1bWVudHMpKQorICAgIGF1dG8gYnJvd3NlckFy
Z3VtZW50cyA9IGJyb3dzZXJPcHRpb25zLT5nZXRBcnJheSgiYXJncyJfcyk7CisgICAgaWYgKCFi
cm93c2VyQXJndW1lbnRzKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICB1bnNpZ25lZCBi
cm93c2VyQXJndW1lbnRzTGVuZ3RoID0gYnJvd3NlckFyZ3VtZW50cy0+bGVuZ3RoKCk7CiAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJyb3dzZXJBcmd1bWVudHNMZW5ndGg7ICsraSkgewot
ICAgICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHZhbHVlID0gYnJvd3NlckFyZ3VtZW50cy0+Z2V0
KGkpOwotICAgICAgICBTdHJpbmcgYXJndW1lbnQ7Ci0gICAgICAgIGlmICghdmFsdWUtPmFzU3Ry
aW5nKGFyZ3VtZW50KSkKKyAgICAgICAgYXV0byBhcmd1bWVudCA9IGJyb3dzZXJBcmd1bWVudHMt
PmdldChpKS0+YXNTdHJpbmcoKTsKKyAgICAgICAgaWYgKCFhcmd1bWVudCkKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IGNlcnRpZmlj
YXRlc1ZhbHVlOwotICAgIGlmIChicm93c2VyT3B0aW9ucy0+Z2V0VmFsdWUoImNlcnRpZmljYXRl
cyJfcywgY2VydGlmaWNhdGVzVmFsdWUpKSB7Ci0gICAgICAgIFJlZlB0cjxKU09OOjpBcnJheT4g
Y2VydGlmaWNhdGVzOwotICAgICAgICBpZiAoIWNlcnRpZmljYXRlc1ZhbHVlLT5hc0FycmF5KGNl
cnRpZmljYXRlcykpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KKyAgICBpZiAoYXV0byBj
ZXJ0aWZpY2F0ZXMgPSBicm93c2VyT3B0aW9ucy0+Z2V0YXJyYXkoImNlcnRpZmljYXRlcyJfcykp
IHsKICAgICAgICAgdW5zaWduZWQgY2VydGlmaWNhdGVzTGVuZ3RoID0gY2VydGlmaWNhdGVzLT5s
ZW5ndGgoKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNlcnRpZmljYXRlc0xl
bmd0aDsgKytpKSB7Ci0gICAgICAgICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IGNlcnRpZmljYXRl
VmFsdWUgPSBjZXJ0aWZpY2F0ZXMtPmdldChpKTsKLSAgICAgICAgICAgIFJlZlB0cjxKU09OOjpP
YmplY3Q+IGNlcnRpZmljYXRlOwotICAgICAgICAgICAgaWYgKCFjZXJ0aWZpY2F0ZVZhbHVlLT5h
c09iamVjdChjZXJ0aWZpY2F0ZSkpCisgICAgICAgICAgICBhdXRvIGNlcnRpZmljYXRlID0gY2Vy
dGlmaWNhdGVzLT5nZXQoaSktPmFzT2JqZWN0KCk7CisgICAgICAgICAgICBpZiAoIWNlcnRpZmlj
YXRlKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICAgICAgUmVmUHRy
PEpTT046OlZhbHVlPiBob3N0VmFsdWU7Ci0gICAgICAgICAgICBTdHJpbmcgaG9zdDsKLSAgICAg
ICAgICAgIGlmICghY2VydGlmaWNhdGUtPmdldFZhbHVlKCJob3N0Il9zLCBob3N0VmFsdWUpIHx8
ICFob3N0VmFsdWUtPmFzU3RyaW5nKGhvc3QpKQorICAgICAgICAgICAgYXV0byBob3N0ID0gY2Vy
dGlmaWNhdGUtPmdldFN0cmluZygiaG9zdCJfcyk7CisgICAgICAgICAgICBpZiAoIWhvc3QpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgICAgICBSZWZQdHI8SlNPTjo6
VmFsdWU+IGNlcnRpZmljYXRlRmlsZVZhbHVlOwotICAgICAgICAgICAgU3RyaW5nIGNlcnRpZmlj
YXRlRmlsZTsKLSAgICAgICAgICAgIGlmICghY2VydGlmaWNhdGUtPmdldFZhbHVlKCJjZXJ0aWZp
Y2F0ZUZpbGUiX3MsIGNlcnRpZmljYXRlRmlsZVZhbHVlKSB8fCAhY2VydGlmaWNhdGVGaWxlVmFs
dWUtPmFzU3RyaW5nKGNlcnRpZmljYXRlRmlsZSkpCisgICAgICAgICAgICBhdXRvIGNlcnRpZmlj
YXRlRmlsZSA9IGNlcnRpZmljYXRlLT5nZXRTdHJpbmcoImNlcnRpZmljYXRlRmlsZSJfcyk7Cisg
ICAgICAgICAgICBpZiAoIWNlcnRpZmljYXRlRmlsZSkKICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgIH0KICAgICB9CkBAIC05OCw3ICs4OCw3IEBAIGJvb2wgV2ViRHJpdmVy
U2VydmljZTo6cGxhdGZvcm1WYWxpZGF0ZUNhcGFiaWxpdHkoY29uc3QgU3RyaW5nJiBuYW1lLCBj
b25zdCBSZWZQCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgV2ViRHJpdmVyU2VydmljZTo6
cGxhdGZvcm1NYXRjaENhcGFiaWxpdHkoY29uc3QgU3RyaW5nJiwgY29uc3QgUmVmUHRyPEpTT046
OlZhbHVlPiYpIGNvbnN0Citib29sIFdlYkRyaXZlclNlcnZpY2U6OnBsYXRmb3JtTWF0Y2hDYXBh
YmlsaXR5KGNvbnN0IFN0cmluZyYsIGNvbnN0IFJlZjxKU09OOjpWYWx1ZT4mKSBjb25zdAogewog
ICAgIHJldHVybiB0cnVlOwogfQpAQCAtMTA4LDQ3ICs5OCw0MSBAQCB2b2lkIFdlYkRyaXZlclNl
cnZpY2U6OnBsYXRmb3JtUGFyc2VDYXBhYmlsaXRpZXMoY29uc3QgSlNPTjo6T2JqZWN0JiBtYXRj
aGVkQ2FwYQogICAgIGNhcGFiaWxpdGllcy5icm93c2VyQmluYXJ5ID0gU3RyaW5nKCJNaW5pQnJv
d3NlciIpOwogICAgIGNhcGFiaWxpdGllcy5icm93c2VyQXJndW1lbnRzID0gVmVjdG9yPFN0cmlu
Zz4geyAiLS1hdXRvbWF0aW9uIl9zIH07CiAKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBicm93
c2VyT3B0aW9uczsKLSAgICBpZiAoIW1hdGNoZWRDYXBhYmlsaXRpZXMuZ2V0T2JqZWN0KCJ3cGU6
YnJvd3Nlck9wdGlvbnMiX3MsIGJyb3dzZXJPcHRpb25zKSkKKyAgICBhdXRvIGJyb3dzZXJPcHRp
b25zID0gbWF0Y2hlZENhcGFiaWxpdGllcy5nZXRPYmplY3QoIndwZTpicm93c2VyT3B0aW9ucyJf
cyk7CisgICAgaWYgKCFicm93c2VyT3B0aW9ucykKICAgICAgICAgcmV0dXJuOwogCi0gICAgU3Ry
aW5nIGJyb3dzZXJCaW5hcnk7Ci0gICAgaWYgKGJyb3dzZXJPcHRpb25zLT5nZXRTdHJpbmcoImJp
bmFyeSJfcywgYnJvd3NlckJpbmFyeSkpIHsKKyAgICBhdXRvIGJyb3dzZXJCaW5hcnkgPSBicm93
c2VyT3B0aW9ucy0+Z2V0U3RyaW5nKCJiaW5hcnkiX3MpOworICAgIGlmICghIWJyb3dzZXJCaW5h
cnkpIHsKICAgICAgICAgY2FwYWJpbGl0aWVzLmJyb3dzZXJCaW5hcnkgPSBicm93c2VyQmluYXJ5
OwogICAgICAgICBjYXBhYmlsaXRpZXMuYnJvd3NlckFyZ3VtZW50cyA9IFdURjo6bnVsbG9wdDsK
ICAgICB9CiAKLSAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IGJyb3dzZXJBcmd1bWVudHM7Ci0gICAg
aWYgKGJyb3dzZXJPcHRpb25zLT5nZXRBcnJheSgiYXJncyJfcywgYnJvd3NlckFyZ3VtZW50cykg
JiYgYnJvd3NlckFyZ3VtZW50cy0+bGVuZ3RoKCkpIHsKKyAgICBhdXRvIGJyb3dzZXJBcmd1bWVu
dHMgPSBicm93c2VyT3B0aW9ucy0+Z2V0QXJyYXkoImFyZ3MiX3MpOworICAgIGlmIChicm93c2Vy
QXJndW1lbnRzICYmIGJyb3dzZXJBcmd1bWVudHMtPmxlbmd0aCgpKSB7CiAgICAgICAgIHVuc2ln
bmVkIGJyb3dzZXJBcmd1bWVudHNMZW5ndGggPSBicm93c2VyQXJndW1lbnRzLT5sZW5ndGgoKTsK
ICAgICAgICAgY2FwYWJpbGl0aWVzLmJyb3dzZXJBcmd1bWVudHMgPSBWZWN0b3I8U3RyaW5nPigp
OwogICAgICAgICBjYXBhYmlsaXRpZXMuYnJvd3NlckFyZ3VtZW50cy0+cmVzZXJ2ZUluaXRpYWxD
YXBhY2l0eShicm93c2VyQXJndW1lbnRzTGVuZ3RoKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGJyb3dzZXJBcmd1bWVudHNMZW5ndGg7ICsraSkgewotICAgICAgICAgICAgUmVm
UHRyPEpTT046OlZhbHVlPiB2YWx1ZSA9IGJyb3dzZXJBcmd1bWVudHMtPmdldChpKTsKLSAgICAg
ICAgICAgIFN0cmluZyBhcmd1bWVudDsKLSAgICAgICAgICAgIHZhbHVlLT5hc1N0cmluZyhhcmd1
bWVudCk7CisgICAgICAgICAgICBhdXRvIGFyZ3VtZW50ID0gYnJvd3NlckFyZ3VtZW50cy0+Z2V0
KGkpLT5hc1N0cmluZygpOwogICAgICAgICAgICAgQVNTRVJUKCFhcmd1bWVudC5pc051bGwoKSk7
CiAgICAgICAgICAgICBjYXBhYmlsaXRpZXMuYnJvd3NlckFyZ3VtZW50cy0+dW5jaGVja2VkQXBw
ZW5kKFdURk1vdmUoYXJndW1lbnQpKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIFJlZlB0cjxK
U09OOjpBcnJheT4gY2VydGlmaWNhdGVzOwotICAgIGlmIChicm93c2VyT3B0aW9ucy0+Z2V0QXJy
YXkoImNlcnRpZmljYXRlcyJfcywgY2VydGlmaWNhdGVzKSAmJiBjZXJ0aWZpY2F0ZXMtPmxlbmd0
aCgpKSB7CisgICAgYXV0byBjZXJ0aWZpY2F0ZXMgPSBicm93c2VyT3B0aW9ucy0+Z2V0QXJyYXko
ImNlcnRpZmljYXRlcyJfcyk7CisgICAgaWYgKGNlcnRpZmljYXRlcyAmJiBjZXJ0aWZpY2F0ZXMt
Pmxlbmd0aCgpKSB7CiAgICAgICAgIHVuc2lnbmVkIGNlcnRpZmljYXRlc0xlbmd0aCA9IGNlcnRp
ZmljYXRlcy0+bGVuZ3RoKCk7CiAgICAgICAgIGNhcGFiaWxpdGllcy5jZXJ0aWZpY2F0ZXMgPSBW
ZWN0b3I8c3RkOjpwYWlyPFN0cmluZywgU3RyaW5nPj4oKTsKICAgICAgICAgY2FwYWJpbGl0aWVz
LmNlcnRpZmljYXRlcy0+cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShjZXJ0aWZpY2F0ZXNMZW5ndGgp
OwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY2VydGlmaWNhdGVzTGVuZ3RoOyAr
K2kpIHsKLSAgICAgICAgICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gdmFsdWUgPSBjZXJ0aWZpY2F0
ZXMtPmdldChpKTsKLSAgICAgICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IGNlcnRpZmljYXRl
OwotICAgICAgICAgICAgdmFsdWUtPmFzT2JqZWN0KGNlcnRpZmljYXRlKTsKKyAgICAgICAgICAg
IGF1dG8gY2VydGlmaWNhdGUgPSBjZXJ0aWZpY2F0ZXMtPmdldChpKS0+YXNPYmplY3QoKTsKICAg
ICAgICAgICAgIEFTU0VSVChjZXJ0aWZpY2F0ZSk7CiAKLSAgICAgICAgICAgIFN0cmluZyBob3N0
OwotICAgICAgICAgICAgY2VydGlmaWNhdGUtPmdldFN0cmluZygiaG9zdCJfcywgaG9zdCk7Cisg
ICAgICAgICAgICBhdXRvIGhvc3QgPSBjZXJ0aWZpY2F0ZS0+Z2V0U3RyaW5nKCJob3N0Il9zKTsK
ICAgICAgICAgICAgIEFTU0VSVCghaG9zdC5pc051bGwoKSk7CiAKLSAgICAgICAgICAgIFN0cmlu
ZyBjZXJ0aWZpY2F0ZUZpbGU7Ci0gICAgICAgICAgICBjZXJ0aWZpY2F0ZS0+Z2V0U3RyaW5nKCJj
ZXJ0aWZpY2F0ZUZpbGUiX3MsIGNlcnRpZmljYXRlRmlsZSk7CisgICAgICAgICAgICBhdXRvIGNl
cnRpZmljYXRlRmlsZSA9IGNlcnRpZmljYXRlLT5nZXRTdHJpbmcoImNlcnRpZmljYXRlRmlsZSJf
cyk7CiAgICAgICAgICAgICBBU1NFUlQoIWNlcnRpZmljYXRlRmlsZS5pc051bGwoKSk7CiAKICAg
ICAgICAgICAgIGNhcGFiaWxpdGllcy5jZXJ0aWZpY2F0ZXMtPnVuY2hlY2tlZEFwcGVuZCh7IFdU
Rk1vdmUoaG9zdCksIFdURk1vdmUoY2VydGlmaWNhdGVGaWxlKSB9KTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0NTU01hbmFnZXIu
anMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9DU1NN
YW5hZ2VyLmpzCmluZGV4IDY4YWVhYTk3ODcwMjhlZThkMTg1OGExZDI3MDc1MDMzNjBiZDRlOTIu
LjE1YjYyMzFhZjMzYjRjZjdlZWI4ZDI5MDk4NzNiNGRhNGE1YmE3YTQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0NTU01hbmFnZXIu
anMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMv
Q1NTTWFuYWdlci5qcwpAQCAtMjAzLDMyICsyMDMsMzQgQEAgV0kuQ1NTTWFuYWdlciA9IGNsYXNz
IENTU01hbmFnZXIgZXh0ZW5kcyBXSS5PYmplY3QKICAgICAgICAgaWYgKCF0aGlzLmNhbkZvcmNl
QXBwZWFyYW5jZSgpKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIGxldCBwcm90b2Nv
bE5hbWUgPSAiIjsKKyAgICAgICAgbGV0IGNvbW1hbmRBcmd1bWVudHMgPSB7fTsKIAogICAgICAg
ICBzd2l0Y2ggKG5hbWUpIHsKICAgICAgICAgY2FzZSBXSS5DU1NNYW5hZ2VyLkFwcGVhcmFuY2Uu
TGlnaHQ6Ci0gICAgICAgICAgICBwcm90b2NvbE5hbWUgPSBJbnNwZWN0b3JCYWNrZW5kLkVudW0u
UGFnZS5BcHBlYXJhbmNlLkxpZ2h0OworICAgICAgICAgICAgY29tbWFuZEFyZ3VtZW50cy5hcHBl
YXJhbmNlID0gSW5zcGVjdG9yQmFja2VuZC5FbnVtLlBhZ2UuQXBwZWFyYW5jZS5MaWdodDsKICAg
ICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgV0kuQ1NTTWFuYWdlci5BcHBlYXJhbmNl
LkRhcms6Ci0gICAgICAgICAgICBwcm90b2NvbE5hbWUgPSBJbnNwZWN0b3JCYWNrZW5kLkVudW0u
UGFnZS5BcHBlYXJhbmNlLkRhcms7CisgICAgICAgICAgICBjb21tYW5kQXJndW1lbnRzLmFwcGVh
cmFuY2UgPSBJbnNwZWN0b3JCYWNrZW5kLkVudW0uUGFnZS5BcHBlYXJhbmNlLkRhcms7CiAgICAg
ICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIG51bGw6Ci0gICAgICAgIGNhc2UgdW5kZWZp
bmVkOgotICAgICAgICBjYXNlICIiOgotICAgICAgICAgICAgcHJvdG9jb2xOYW1lID0gIiI7Cisg
ICAgICAgICAgICAvLyBDT01QQVRJQklMSVRZIChpT1MgMTQpOiB0aGUgYGFwcGVhcmFuY2VgYCBw
YXJhbWV0ZXIgb2YgYFBhZ2Uuc2V0Rm9yY2VkQXBwZWFyYW5jZWAgd2FzIG5vdCBvcHRpb25hbC4K
KyAgICAgICAgICAgIC8vIFNpbmNlIHN1cHBvcnQgY2FuJ3QgYmUgdGVzdGVkIGRpcmVjdGx5LCBj
aGVjayBmb3IgdGhlIGBvcHRpb25zYGAgcGFyYW1ldGVyIG9mIGBET01EZWJ1Z2dlci5zZXRET01C
cmVha3BvaW50YCAoaU9TIDE0LjArKS4KKyAgICAgICAgICAgIC8vIEZJWE1FOiBVc2UgZXhwbGlj
aXQgdmVyc2lvbiBjaGVja2luZyBvbmNlIGh0dHBzOi8vd2Via2l0Lm9yZy9iLzE0ODY4MCBpcyBm
aXhlZC4KKyAgICAgICAgICAgIGlmICghSW5zcGVjdG9yQmFja2VuZC5oYXNDb21tYW5kKCJET01E
ZWJ1Z2dlci5zZXRET01CcmVha3BvaW50IiwgIm9wdGlvbnMiKSkKKyAgICAgICAgICAgICAgICBj
b21tYW5kQXJndW1lbnRzLmFwcGVhcmFuY2UgPSAiIjsKICAgICAgICAgICAgIGJyZWFrOwogCiAg
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAvLyBBYm9ydCBmb3IgdW5rbm93biB2YWx1ZXMu
CisgICAgICAgICAgICBjb25zb2xlLmFzc2VydChmYWxzZSwgIlVua25vd24gYXBwZWFyYW5jZSIs
IG5hbWUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgdGhpcy5f
Zm9yY2VkQXBwZWFyYW5jZSA9IG5hbWUgfHwgbnVsbDsKIAogICAgICAgICBsZXQgdGFyZ2V0ID0g
V0kuYXNzdW1pbmdNYWluVGFyZ2V0KCk7Ci0gICAgICAgIHRhcmdldC5QYWdlQWdlbnQuc2V0Rm9y
Y2VkQXBwZWFyYW5jZShwcm90b2NvbE5hbWUpLnRoZW4oKCkgPT4geworICAgICAgICB0YXJnZXQu
UGFnZUFnZW50LnNldEZvcmNlZEFwcGVhcmFuY2UuaW52b2tlKGNvbW1hbmRBcmd1bWVudHMpLnRo
ZW4oKCkgPT4gewogICAgICAgICAgICAgdGhpcy5tZWRpYVF1ZXJ5UmVzdWx0Q2hhbmdlZCgpOwog
ICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV0kuQ1NTTWFuYWdlci5F
dmVudC5Gb3JjZWRBcHBlYXJhbmNlRGlkQ2hhbmdlLCB7YXBwZWFyYW5jZTogdGhpcy5fZm9yY2Vk
QXBwZWFyYW5jZX0pOwogICAgICAgICB9KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0
b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1NldHRpbmdzVGFiQ29udGVudFZpZXcuanMgYi9Tb3Vy
Y2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9TZXR0aW5nc1RhYkNvbnRlbnRW
aWV3LmpzCmluZGV4IDQ4MmUxNDJhZTExZDYzYzAwMTVmOTZjNzRiY2IyZGVhMmZlNTA2OWQuLjkx
ODM2ZWNjNzY5Nzc1NmE5NjZlZmVhNzEwM2M5MmQzNDA4ZTQ0NjEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1NldHRpbmdzVGFiQ29udGVudFZp
ZXcuanMKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvU2V0
dGluZ3NUYWJDb250ZW50Vmlldy5qcwpAQCAtMzQ2LDE0ICszNDYsMTggQEAgV0kuU2V0dGluZ3NU
YWJDb250ZW50VmlldyA9IGNsYXNzIFNldHRpbmdzVGFiQ29udGVudFZpZXcgZXh0ZW5kcyBXSS5U
YWJDb250ZW50VmkKICAgICAgICAgICAgICAgICBbV0kuTG9nZ2luZ0NoYW5uZWwuTGV2ZWwuVmVy
Ym9zZSwgV0kuVUlTdHJpbmcoIlZlcmJvc2UiKV0sCiAgICAgICAgICAgICBdOwogICAgICAgICAg
ICAgY29uc3QgZWRpdG9yTGFiZWxzID0gewotICAgICAgICAgICAgICAgIG1lZGlhOiBXSS5VSVN0
cmluZygiTWVkaWEgTG9nZ2luZzoiKSwKLSAgICAgICAgICAgICAgICBtZWRpYXNvdXJjZTogV0ku
VUlTdHJpbmcoIk1TRSBMb2dnaW5nOiIpLAotICAgICAgICAgICAgICAgIHdlYnJ0YzogV0kuVUlT
dHJpbmcoIldlYlJUQyBMb2dnaW5nOiIpLAorICAgICAgICAgICAgICAgIFtXSS5Db25zb2xlTWVz
c2FnZS5NZXNzYWdlU291cmNlLk1lZGlhXTogV0kuVUlTdHJpbmcoIk1lZGlhIExvZ2dpbmc6Iiks
CisgICAgICAgICAgICAgICAgW1dJLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VTb3VyY2UuTWVkaWFT
b3VyY2VdOiBXSS5VSVN0cmluZygiTVNFIExvZ2dpbmc6IiksCisgICAgICAgICAgICAgICAgW1dJ
LkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VTb3VyY2UuV2ViUlRDXTogV0kuVUlTdHJpbmcoIldlYlJU
QyBMb2dnaW5nOiIpLAogICAgICAgICAgICAgfTsKIAogICAgICAgICAgICAgbGV0IGNoYW5uZWxz
ID0gV0kuY29uc29sZU1hbmFnZXIuY3VzdG9tTG9nZ2luZ0NoYW5uZWxzOwogICAgICAgICAgICAg
Zm9yIChsZXQgY2hhbm5lbCBvZiBjaGFubmVscykgewotICAgICAgICAgICAgICAgIGxldCBsb2dF
ZGl0b3IgPSBjb25zb2xlU2V0dGluZ3NWaWV3LmFkZEdyb3VwV2l0aEN1c3RvbVNldHRpbmcoZWRp
dG9yTGFiZWxzW2NoYW5uZWwuc291cmNlXSwgV0kuU2V0dGluZ0VkaXRvci5UeXBlLlNlbGVjdCwg
e3ZhbHVlczogbG9nTGV2ZWxzfSk7CisgICAgICAgICAgICAgICAgbGV0IGxhYmVsID0gZWRpdG9y
TGFiZWxzW2NoYW5uZWwuc291cmNlXTsKKyAgICAgICAgICAgICAgICBpZiAoIWxhYmVsKQorICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgICAgIGxldCBsb2dFZGl0
b3IgPSBjb25zb2xlU2V0dGluZ3NWaWV3LmFkZEdyb3VwV2l0aEN1c3RvbVNldHRpbmcobGFiZWws
IFdJLlNldHRpbmdFZGl0b3IuVHlwZS5TZWxlY3QsIHt2YWx1ZXM6IGxvZ0xldmVsc30pOwogICAg
ICAgICAgICAgICAgIGxvZ0VkaXRvci52YWx1ZSA9IGNoYW5uZWwubGV2ZWw7CiAgICAgICAgICAg
ICAgICAgbG9nRWRpdG9yLmFkZEV2ZW50TGlzdGVuZXIoV0kuU2V0dGluZ0VkaXRvci5FdmVudC5W
YWx1ZURpZENoYW5nZSwgKCkgPT4gewogICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCB0YXJn
ZXQgb2YgV0kudGFyZ2V0cykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1
dG9tYXRpb24vQXV0b21hdGlvbi5qc29uIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21h
dGlvbi9BdXRvbWF0aW9uLmpzb24KaW5kZXggM2RjYjIxNDFlYjBkMjc5NDcwN2RlMjg0Yzg3MDcx
MGU4NzcyMWMzOS4uZWIzY2RiNWY4NjZjNWY5M2E4ODIyOTgzYTQ5ZDkxNmYzZTZlYWZlNSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9BdXRvbWF0aW9uLmpz
b24KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9BdXRvbWF0aW9uLmpz
b24KQEAgLTMyLDcgKzMyLDggQEAKICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJUaGUgY29v
cmRpbmF0ZSBzeXN0ZW0gaW4gd2hpY2ggcmVjdHMsIHBvaW50cywgYW5kIHNpemVzIGFyZSB0byBi
ZSBpbnRlcnByZXRlZC4iLAogICAgICAgICAgICAgImVudW0iOiBbCiAgICAgICAgICAgICAgICAg
IlBhZ2UiLAotICAgICAgICAgICAgICAgICJWaWV3cG9ydCIKKyAgICAgICAgICAgICAgICAiVmll
d3BvcnQiLAorICAgICAgICAgICAgICAgICJMYXlvdXRWaWV3cG9ydCIKICAgICAgICAgICAgIF0K
ICAgICAgICAgfSwKICAgICAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbi5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmNwcAppbmRleCBkODdhNGRm
ZWM3OTRmMzFkY2I2NGU1ZTllZjRiY2U0YjE4YzE5MmEyLi4zZjdlNDBlNThkNGFkODFhZjc0MjA4
YmNhNjEwYmE5ZjhmNTE3Nzg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
dXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmNwcApAQCAtMzA1LDcgKzMw
NSw3IEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OmdldEJyb3dzaW5nQ29udGV4dHMoUmVm
PEdldEJyb3dzaW5nQ29udGV4dHNDYWxsYmFjaz4mCiAgICAgZ2V0TmV4dENvbnRleHQobWFrZVJl
ZigqdGhpcyksIFdURk1vdmUocGFnZXMpLCBKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dD46OmNyZWF0ZSgpLCBXVEZNb3ZlKGNhbGxi
YWNrKSk7CiB9CiAKLXZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OmdldEJyb3dzaW5nQ29udGV4
dChjb25zdCBTdHJpbmcmIGhhbmRsZSwgUmVmPEdldEJyb3dzaW5nQ29udGV4dENhbGxiYWNrPiYm
IGNhbGxiYWNrKQordm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6Z2V0QnJvd3NpbmdDb250ZXh0
KGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhh
bmRsZSYgaGFuZGxlLCBSZWY8R2V0QnJvd3NpbmdDb250ZXh0Q2FsbGJhY2s+JiYgY2FsbGJhY2sp
CiB7CiAgICAgV2ViUGFnZVByb3h5KiBwYWdlID0gd2ViUGFnZVByb3h5Rm9ySGFuZGxlKGhhbmRs
ZSk7CiAgICAgaWYgKCFwYWdlKQpAQCAtMzI4LDcgKzMyOCw3IEBAIHN0YXRpYyBJbnNwZWN0b3I6
OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRQcmVzZW50YXRpb24gdG9Qcm90
b2NvbChBCiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAotdm9pZCBXZWJB
dXRvbWF0aW9uU2Vzc2lvbjo6Y3JlYXRlQnJvd3NpbmdDb250ZXh0KGNvbnN0IFN0cmluZyogb3B0
aW9uYWxQcmVzZW50YXRpb25IaW50LCBSZWY8Q3JlYXRlQnJvd3NpbmdDb250ZXh0Q2FsbGJhY2s+
JiYgY2FsbGJhY2spCit2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpjcmVhdGVCcm93c2luZ0Nv
bnRleHQoT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdD
b250ZXh0UHJlc2VudGF0aW9uPiYmIHByZXNlbnRhdGlvbkhpbnQsIFJlZjxDcmVhdGVCcm93c2lu
Z0NvbnRleHRDYWxsYmFjaz4mJiBjYWxsYmFjaykKIHsKICAgICBBU1NFUlQobV9jbGllbnQpOwog
ICAgIGlmICghbV9jbGllbnQpCkBAIC0zMzYsMTEgKzMzNiw4IEBAIHZvaWQgV2ViQXV0b21hdGlv
blNlc3Npb246OmNyZWF0ZUJyb3dzaW5nQ29udGV4dChjb25zdCBTdHJpbmcqIG9wdGlvbmFsUHJl
c2VudGF0CiAKICAgICB1aW50MTZfdCBvcHRpb25zID0gMDsKIAotICAgIGlmIChvcHRpb25hbFBy
ZXNlbnRhdGlvbkhpbnQpIHsKLSAgICAgICAgYXV0byBwYXJzZWRQcmVzZW50YXRpb25IaW50ID0g
SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbkhlbHBlcnM6OnBhcnNlRW51bVZhbHVlRnJv
bVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRQ
cmVzZW50YXRpb24+KCpvcHRpb25hbFByZXNlbnRhdGlvbkhpbnQpOwotICAgICAgICBpZiAocGFy
c2VkUHJlc2VudGF0aW9uSGludC5oYXNWYWx1ZSgpICYmIHBhcnNlZFByZXNlbnRhdGlvbkhpbnQu
dmFsdWUoKSA9PSBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRl
eHRQcmVzZW50YXRpb246OlRhYikKLSAgICAgICAgICAgIG9wdGlvbnMgfD0gQVBJOjpBdXRvbWF0
aW9uU2Vzc2lvbkJyb3dzaW5nQ29udGV4dE9wdGlvbnNQcmVmZXJOZXdUYWI7Ci0gICAgfQorICAg
IGlmIChwcmVzZW50YXRpb25IaW50ID09IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246
OkJyb3dzaW5nQ29udGV4dFByZXNlbnRhdGlvbjo6VGFiKQorICAgICAgICBvcHRpb25zIHw9IEFQ
STo6QXV0b21hdGlvblNlc3Npb25Ccm93c2luZ0NvbnRleHRPcHRpb25zUHJlZmVyTmV3VGFiOwog
CiAgICAgbV9jbGllbnQtPnJlcXVlc3ROZXdQYWdlV2l0aE9wdGlvbnMoKnRoaXMsIHN0YXRpY19j
YXN0PEFQSTo6QXV0b21hdGlvblNlc3Npb25Ccm93c2luZ0NvbnRleHRPcHRpb25zPihvcHRpb25z
KSwgW3Byb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNh
bGxiYWNrKV0oV2ViUGFnZVByb3h5KiBwYWdlKSB7CiAgICAgICAgIGlmICghcGFnZSkKQEAgLTM1
MiwyMyArMzQ5LDI1IEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OmNyZWF0ZUJyb3dzaW5n
Q29udGV4dChjb25zdCBTdHJpbmcqIG9wdGlvbmFsUHJlc2VudGF0CiAgICAgfSk7CiB9CiAKLXZv
aWQgV2ViQXV0b21hdGlvblNlc3Npb246OmNsb3NlQnJvd3NpbmdDb250ZXh0KEluc3BlY3Rvcjo6
RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGhhbmRsZSkKK0luc3BlY3Rv
cjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gV2ViQXV0b21hdGlvblNlc3Npb246OmNs
b3NlQnJvd3NpbmdDb250ZXh0KGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246
OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYgaGFuZGxlKQogewogICAgIFdlYlBhZ2VQcm94eSogcGFn
ZSA9IHdlYlBhZ2VQcm94eUZvckhhbmRsZShoYW5kbGUpOwogICAgIGlmICghcGFnZSkKICAgICAg
ICAgU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUihXaW5kb3dOb3RGb3VuZCk7CiAKICAg
ICBwYWdlLT5jbG9zZVBhZ2UoKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgV2ViQXV0
b21hdGlvblNlc3Npb246OnN3aXRjaFRvQnJvd3NpbmdDb250ZXh0KGNvbnN0IFN0cmluZyYgYnJv
d3NpbmdDb250ZXh0SGFuZGxlLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsRnJhbWVIYW5kbGUsIFJl
ZjxTd2l0Y2hUb0Jyb3dzaW5nQ29udGV4dENhbGxiYWNrPiYmIGNhbGxiYWNrKQordm9pZCBXZWJB
dXRvbWF0aW9uU2Vzc2lvbjo6c3dpdGNoVG9Ccm93c2luZ0NvbnRleHQoY29uc3QgSW5zcGVjdG9y
OjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJiBicm93c2luZ0Nv
bnRleHRIYW5kbGUsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkZyYW1l
SGFuZGxlJiBmcmFtZUhhbmRsZSwgUmVmPFN3aXRjaFRvQnJvd3NpbmdDb250ZXh0Q2FsbGJhY2s+
JiYgY2FsbGJhY2spCiB7CiAgICAgV2ViUGFnZVByb3h5KiBwYWdlID0gd2ViUGFnZVByb3h5Rm9y
SGFuZGxlKGJyb3dzaW5nQ29udGV4dEhhbmRsZSk7CiAgICAgaWYgKCFwYWdlKQogICAgICAgICBB
U1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUihXaW5kb3dOb3RGb3VuZCk7CiAKICAgICBi
b29sIGZyYW1lTm90Rm91bmQgPSBmYWxzZTsKLSAgICBhdXRvIGZyYW1lSUQgPSB3ZWJGcmFtZUlE
Rm9ySGFuZGxlKG9wdGlvbmFsRnJhbWVIYW5kbGUgPyAqb3B0aW9uYWxGcmFtZUhhbmRsZSA6IGVt
cHR5U3RyaW5nKCksIGZyYW1lTm90Rm91bmQpOworICAgIGF1dG8gZnJhbWVJRCA9IHdlYkZyYW1l
SURGb3JIYW5kbGUoZnJhbWVIYW5kbGUsIGZyYW1lTm90Rm91bmQpOwogICAgIGlmIChmcmFtZU5v
dEZvdW5kKQogICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUihGcmFtZU5v
dEZvdW5kKTsKIApAQCAtMzgxLDI1ICszODAsMjUgQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lv
bjo6c3dpdGNoVG9Ccm93c2luZ0NvbnRleHQoY29uc3QgU3RyaW5nJiBicm93c2luZ0NvbnRleHQK
ICAgICB9KTsKIH0KIAotdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6c2V0V2luZG93RnJhbWVP
ZkJyb3dzaW5nQ29udGV4dChjb25zdCBTdHJpbmcmIGhhbmRsZSwgY29uc3QgSlNPTjo6T2JqZWN0
KiBvcHRpb25hbE9yaWdpbk9iamVjdCwgY29uc3QgSlNPTjo6T2JqZWN0KiBvcHRpb25hbFNpemVP
YmplY3QsIFJlZjxTZXRXaW5kb3dGcmFtZU9mQnJvd3NpbmdDb250ZXh0Q2FsbGJhY2s+JiYgY2Fs
bGJhY2spCit2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpzZXRXaW5kb3dGcmFtZU9mQnJvd3Np
bmdDb250ZXh0KGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5n
Q29udGV4dEhhbmRsZSYgaGFuZGxlLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIG9yaWdpbiwgUmVm
UHRyPEpTT046Ok9iamVjdD4mJiBzaXplLCBSZWY8U2V0V2luZG93RnJhbWVPZkJyb3dzaW5nQ29u
dGV4dENhbGxiYWNrPiYmIGNhbGxiYWNrKQogewotICAgIE9wdGlvbmFsPGZsb2F0PiB4OwotICAg
IE9wdGlvbmFsPGZsb2F0PiB5OwotICAgIGlmIChvcHRpb25hbE9yaWdpbk9iamVjdCkgewotICAg
ICAgICBpZiAoISh4ID0gb3B0aW9uYWxPcmlnaW5PYmplY3QtPmdldE51bWJlcjxmbG9hdD4oIngi
X3MpKSkKKyAgICBPcHRpb25hbDxkb3VibGU+IHg7CisgICAgT3B0aW9uYWw8ZG91YmxlPiB5Owor
ICAgIGlmIChvcmlnaW4pIHsKKyAgICAgICAgaWYgKCEoeCA9IG9yaWdpbi0+Z2V0RG91YmxlKCJ4
Il9zKSkpCiAgICAgICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUl9BTkRf
REVUQUlMUyhNaXNzaW5nUGFyYW1ldGVyLCAiVGhlICd4JyBwYXJhbWV0ZXIgd2FzIG5vdCBmb3Vu
ZCBvciBpbnZhbGlkLiIpOwogCi0gICAgICAgIGlmICghKHkgPSBvcHRpb25hbE9yaWdpbk9iamVj
dC0+Z2V0TnVtYmVyPGZsb2F0PigieSJfcykpKQorICAgICAgICBpZiAoISh5ID0gb3JpZ2luLT5n
ZXREb3VibGUoInkiX3MpKSkKICAgICAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVE
X0VSUk9SX0FORF9ERVRBSUxTKE1pc3NpbmdQYXJhbWV0ZXIsICJUaGUgJ3knIHBhcmFtZXRlciB3
YXMgbm90IGZvdW5kIG9yIGludmFsaWQuIik7CiAgICAgfQogCi0gICAgT3B0aW9uYWw8ZmxvYXQ+
IHdpZHRoOwotICAgIE9wdGlvbmFsPGZsb2F0PiBoZWlnaHQ7Ci0gICAgaWYgKG9wdGlvbmFsU2l6
ZU9iamVjdCkgewotICAgICAgICBpZiAoISh3aWR0aCA9IG9wdGlvbmFsU2l6ZU9iamVjdC0+Z2V0
TnVtYmVyPGZsb2F0Pigid2lkdGgiX3MpKSkKKyAgICBPcHRpb25hbDxkb3VibGU+IHdpZHRoOwor
ICAgIE9wdGlvbmFsPGRvdWJsZT4gaGVpZ2h0OworICAgIGlmIChzaXplKSB7CisgICAgICAgIGlm
ICghKHdpZHRoID0gc2l6ZS0+Z2V0RG91YmxlKCJ3aWR0aCJfcykpKQogICAgICAgICAgICAgQVNZ
TkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoTWlzc2luZ1BhcmFtZXRl
ciwgIlRoZSAnd2lkdGgnIHBhcmFtZXRlciB3YXMgbm90IGZvdW5kIG9yIGludmFsaWQuIik7CiAK
LSAgICAgICAgaWYgKCEoaGVpZ2h0ID0gb3B0aW9uYWxTaXplT2JqZWN0LT5nZXROdW1iZXI8Zmxv
YXQ+KCJoZWlnaHQiX3MpKSkKKyAgICAgICAgaWYgKCEoaGVpZ2h0ID0gc2l6ZS0+Z2V0RG91Ymxl
KCJoZWlnaHQiX3MpKSkKICAgICAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VS
Uk9SX0FORF9ERVRBSUxTKE1pc3NpbmdQYXJhbWV0ZXIsICJUaGUgJ2hlaWdodCcgcGFyYW1ldGVy
IHdhcyBub3QgZm91bmQgb3IgaW52YWxpZC4iKTsKIAogICAgICAgICBpZiAod2lkdGgudmFsdWUo
KSA8IDApCkBAIC00MjgsMjYgKzQyNywxOCBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpz
ZXRXaW5kb3dGcmFtZU9mQnJvd3NpbmdDb250ZXh0KGNvbnN0IFN0cmluZyYgaGFuZGxlLAogICAg
IH0pOwogfQogCi1zdGF0aWMgT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlv
bjo6UGFnZUxvYWRTdHJhdGVneT4gcGFnZUxvYWRTdHJhdGVneUZyb21TdHJpbmdQYXJhbWV0ZXIo
Y29uc3QgU3RyaW5nKiBvcHRpb25hbFBhZ2VMb2FkU3RyYXRlZ3lTdHJpbmcpCitzdGF0aWMgSW5z
cGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6UGFnZUxvYWRTdHJhdGVneSBwYWdlTG9hZFN0
cmF0ZWd5RnJvbVBhcmFtZXRlcihPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0
aW9uOjpQYWdlTG9hZFN0cmF0ZWd5PiYmIG9wdGlvbmFsUGFnZUxvYWRTdHJhdGVneSkKIHsKLSAg
ICBpZiAoIW9wdGlvbmFsUGFnZUxvYWRTdHJhdGVneVN0cmluZykKLSAgICAgICAgcmV0dXJuIGRl
ZmF1bHRQYWdlTG9hZFN0cmF0ZWd5OwotCi0gICAgYXV0byBwYXJzZWRQYWdlTG9hZFN0cmF0ZWd5
ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbkhlbHBlcnM6OnBhcnNlRW51bVZhbHVl
RnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpQYWdlTG9hZFN0cmF0
ZWd5Pigqb3B0aW9uYWxQYWdlTG9hZFN0cmF0ZWd5U3RyaW5nKTsKLSAgICBpZiAoIXBhcnNlZFBh
Z2VMb2FkU3RyYXRlZ3kpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgcmV0dXJu
IHBhcnNlZFBhZ2VMb2FkU3RyYXRlZ3k7CisgICAgcmV0dXJuIG9wdGlvbmFsUGFnZUxvYWRTdHJh
dGVneS52YWx1ZU9yKGRlZmF1bHRQYWdlTG9hZFN0cmF0ZWd5KTsKIH0KIAotdm9pZCBXZWJBdXRv
bWF0aW9uU2Vzc2lvbjo6d2FpdEZvck5hdmlnYXRpb25Ub0NvbXBsZXRlKGNvbnN0IFN0cmluZyYg
YnJvd3NpbmdDb250ZXh0SGFuZGxlLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsRnJhbWVIYW5kbGUs
IGNvbnN0IFN0cmluZyogb3B0aW9uYWxQYWdlTG9hZFN0cmF0ZWd5U3RyaW5nLCBjb25zdCBkb3Vi
bGUqIG9wdGlvbmFsUGFnZUxvYWRUaW1lb3V0LCBSZWY8V2FpdEZvck5hdmlnYXRpb25Ub0NvbXBs
ZXRlQ2FsbGJhY2s+JiYgY2FsbGJhY2spCit2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjp3YWl0
Rm9yTmF2aWdhdGlvblRvQ29tcGxldGUoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21h
dGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJiBicm93c2luZ0NvbnRleHRIYW5kbGUsIGNvbnN0
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkZyYW1lSGFuZGxlJiBvcHRpb25hbEZy
YW1lSGFuZGxlLCBPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpQYWdl
TG9hZFN0cmF0ZWd5PiYmIG9wdGlvbmFsUGFnZUxvYWRTdHJhdGVneSwgT3B0aW9uYWw8ZG91Ymxl
PiYmIG9wdGlvbmFsUGFnZUxvYWRUaW1lb3V0LCBSZWY8V2FpdEZvck5hdmlnYXRpb25Ub0NvbXBs
ZXRlQ2FsbGJhY2s+JiYgY2FsbGJhY2spCiB7CiAgICAgV2ViUGFnZVByb3h5KiBwYWdlID0gd2Vi
UGFnZVByb3h5Rm9ySGFuZGxlKGJyb3dzaW5nQ29udGV4dEhhbmRsZSk7CiAgICAgaWYgKCFwYWdl
KQogICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUihXaW5kb3dOb3RGb3Vu
ZCk7CiAKLSAgICBhdXRvIHBhZ2VMb2FkU3RyYXRlZ3kgPSBwYWdlTG9hZFN0cmF0ZWd5RnJvbVN0
cmluZ1BhcmFtZXRlcihvcHRpb25hbFBhZ2VMb2FkU3RyYXRlZ3lTdHJpbmcpOwotICAgIGlmICgh
cGFnZUxvYWRTdHJhdGVneSkKLSAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJS
T1JfQU5EX0RFVEFJTFMoSW52YWxpZFBhcmFtZXRlciwgIlRoZSBwYXJhbWV0ZXIgJ3BhZ2VMb2Fk
U3RyYXRlZ3knIGlzIGludmFsaWQuIik7CisgICAgYXV0byBwYWdlTG9hZFN0cmF0ZWd5ID0gcGFn
ZUxvYWRTdHJhdGVneUZyb21QYXJhbWV0ZXIoV1RGTW92ZShvcHRpb25hbFBhZ2VMb2FkU3RyYXRl
Z3kpKTsKICAgICBhdXRvIHBhZ2VMb2FkVGltZW91dCA9IG9wdGlvbmFsUGFnZUxvYWRUaW1lb3V0
ID8gU2Vjb25kczo6ZnJvbU1pbGxpc2Vjb25kcygqb3B0aW9uYWxQYWdlTG9hZFRpbWVvdXQpIDog
ZGVmYXVsdFBhZ2VMb2FkVGltZW91dDsKIAogICAgIC8vIElmIHBhZ2UgaXMgbG9hZGluZyBhbmQg
dGhlcmUncyBhbiBhY3RpdmUgSmF2YVNjcmlwdCBkaWFsb2cgaXMgcHJvYmFibHkgYmVjYXVzZSB0
aGUKQEAgLTQ1NSwyMiArNDQ2LDIyIEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OndhaXRG
b3JOYXZpZ2F0aW9uVG9Db21wbGV0ZShjb25zdCBTdHJpbmcmIGJyb3dzaW5nQ29uCiAgICAgLy8g
bG9hZCB3aWxsIG5vdCBmaW5pc2ggdW50aWwgdGhlIGRpYWxvZyBpcyBkaXNtaXNzZWQuIEluc3Rl
YWQgb2Ygd2FpdGluZyBmb3IgdGhlIHRpbWVvdXQsCiAgICAgLy8gd2UgcmV0dXJuIHdpdGhvdXQg
d2FpdGluZyBzaW5jZSB3ZSBrbm93IGl0IHdpbGwgdGltZW91dCBmb3Igc3VyZS4gV2Ugd2FudCB0
byBjaGVjawogICAgIC8vIGFyZ3VtZW50cyBmaXJzdCwgdGhvdWdoLgotICAgIGJvb2wgc2hvdWxk
VGltZW91dER1ZVRvVW5leHBlY3RlZEFsZXJ0ID0gcGFnZUxvYWRTdHJhdGVneS52YWx1ZSgpID09
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OlBhZ2VMb2FkU3RyYXRlZ3k6Ok5vcm1h
bAorICAgIGJvb2wgc2hvdWxkVGltZW91dER1ZVRvVW5leHBlY3RlZEFsZXJ0ID0gcGFnZUxvYWRT
dHJhdGVneSA9PSBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpQYWdlTG9hZFN0cmF0
ZWd5OjpOb3JtYWwKICAgICAgICAgJiYgcGFnZS0+cGFnZUxvYWRTdGF0ZSgpLmlzTG9hZGluZygp
ICYmIG1fY2xpZW50LT5pc1Nob3dpbmdKYXZhU2NyaXB0RGlhbG9nT25QYWdlKCp0aGlzLCAqcGFn
ZSk7CiAKLSAgICBpZiAob3B0aW9uYWxGcmFtZUhhbmRsZSAmJiAhb3B0aW9uYWxGcmFtZUhhbmRs
ZS0+aXNFbXB0eSgpKSB7CisgICAgaWYgKCFvcHRpb25hbEZyYW1lSGFuZGxlLmlzRW1wdHkoKSkg
ewogICAgICAgICBib29sIGZyYW1lTm90Rm91bmQgPSBmYWxzZTsKLSAgICAgICAgYXV0byBmcmFt
ZUlEID0gd2ViRnJhbWVJREZvckhhbmRsZSgqb3B0aW9uYWxGcmFtZUhhbmRsZSwgZnJhbWVOb3RG
b3VuZCk7CisgICAgICAgIGF1dG8gZnJhbWVJRCA9IHdlYkZyYW1lSURGb3JIYW5kbGUob3B0aW9u
YWxGcmFtZUhhbmRsZSwgZnJhbWVOb3RGb3VuZCk7CiAgICAgICAgIGlmIChmcmFtZU5vdEZvdW5k
KQogICAgICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1IoRnJhbWVOb3RG
b3VuZCk7CiAgICAgICAgIFdlYkZyYW1lUHJveHkqIGZyYW1lID0gcGFnZS0+cHJvY2VzcygpLndl
YkZyYW1lKGZyYW1lSUQudmFsdWUoKSk7CiAgICAgICAgIGlmICghZnJhbWUpCiAgICAgICAgICAg
ICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUihGcmFtZU5vdEZvdW5kKTsKICAgICAg
ICAgaWYgKCFzaG91bGRUaW1lb3V0RHVlVG9VbmV4cGVjdGVkQWxlcnQpCi0gICAgICAgICAgICB3
YWl0Rm9yTmF2aWdhdGlvblRvQ29tcGxldGVPbkZyYW1lKCpmcmFtZSwgcGFnZUxvYWRTdHJhdGVn
eS52YWx1ZSgpLCBwYWdlTG9hZFRpbWVvdXQsIFdURk1vdmUoY2FsbGJhY2spKTsKKyAgICAgICAg
ICAgIHdhaXRGb3JOYXZpZ2F0aW9uVG9Db21wbGV0ZU9uRnJhbWUoKmZyYW1lLCBwYWdlTG9hZFN0
cmF0ZWd5LCBwYWdlTG9hZFRpbWVvdXQsIFdURk1vdmUoY2FsbGJhY2spKTsKICAgICB9IGVsc2Ug
ewogICAgICAgICBpZiAoIXNob3VsZFRpbWVvdXREdWVUb1VuZXhwZWN0ZWRBbGVydCkKLSAgICAg
ICAgICAgIHdhaXRGb3JOYXZpZ2F0aW9uVG9Db21wbGV0ZU9uUGFnZSgqcGFnZSwgcGFnZUxvYWRT
dHJhdGVneS52YWx1ZSgpLCBwYWdlTG9hZFRpbWVvdXQsIFdURk1vdmUoY2FsbGJhY2spKTsKKyAg
ICAgICAgICAgIHdhaXRGb3JOYXZpZ2F0aW9uVG9Db21wbGV0ZU9uUGFnZSgqcGFnZSwgcGFnZUxv
YWRTdHJhdGVneSwgcGFnZUxvYWRUaW1lb3V0LCBXVEZNb3ZlKGNhbGxiYWNrKSk7CiAgICAgfQog
CiAgICAgaWYgKHNob3VsZFRpbWVvdXREdWVUb1VuZXhwZWN0ZWRBbGVydCkgewpAQCAtNTI3LDcg
KzUxOCw3IEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OndhaXRGb3JOYXZpZ2F0aW9uVG9D
b21wbGV0ZU9uRnJhbWUoV2ViRnJhbWVQcm94eSYgZnJhCiAKIHZvaWQgV2ViQXV0b21hdGlvblNl
c3Npb246OnJlc3BvbmRUb1BlbmRpbmdQYWdlTmF2aWdhdGlvbkNhbGxiYWNrc1dpdGhUaW1lb3V0
KEhhc2hNYXA8V2ViUGFnZVByb3h5SWRlbnRpZmllciwgUmVmUHRyPEluc3BlY3Rvcjo6QmFja2Vu
ZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZT4+JiBtYXApCiB7Ci0gICAgSW5zcGVjdG9yOjpFcnJv
clN0cmluZyB0aW1lb3V0RXJyb3IgPSBTVFJJTkdfRk9SX1BSRURFRklORURfRVJST1JfTkFNRShU
aW1lb3V0KTsKKyAgICBhdXRvIHRpbWVvdXRFcnJvciA9IFNUUklOR19GT1JfUFJFREVGSU5FRF9F
UlJPUl9OQU1FKFRpbWVvdXQpOwogICAgIGZvciAoYXV0byBpZCA6IGNvcHlUb1ZlY3RvcihtYXAu
a2V5cygpKSkgewogICAgICAgICBhdXRvIHBhZ2UgPSBXZWJQcm9jZXNzUHJveHk6OndlYlBhZ2Uo
aWQpOwogICAgICAgICBhdXRvIGNhbGxiYWNrID0gbWFwLnRha2UoaWQpOwpAQCAtNTQ5LDcgKzU0
MCw3IEBAIHN0YXRpYyBXZWJQYWdlUHJveHkqIGZpbmRQYWdlRm9yRnJhbWVJRChjb25zdCBXZWJQ
cm9jZXNzUG9vbCYgcHJvY2Vzc1Bvb2wsIEZyYW1lCiAKIHZvaWQgV2ViQXV0b21hdGlvblNlc3Np
b246OnJlc3BvbmRUb1BlbmRpbmdGcmFtZU5hdmlnYXRpb25DYWxsYmFja3NXaXRoVGltZW91dChI
YXNoTWFwPEZyYW1lSWRlbnRpZmllciwgUmVmUHRyPEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNo
ZXI6OkNhbGxiYWNrQmFzZT4+JiBtYXApCiB7Ci0gICAgSW5zcGVjdG9yOjpFcnJvclN0cmluZyB0
aW1lb3V0RXJyb3IgPSBTVFJJTkdfRk9SX1BSRURFRklORURfRVJST1JfTkFNRShUaW1lb3V0KTsK
KyAgICBhdXRvIHRpbWVvdXRFcnJvciA9IFNUUklOR19GT1JfUFJFREVGSU5FRF9FUlJPUl9OQU1F
KFRpbWVvdXQpOwogICAgIGZvciAoYXV0byBpZCA6IGNvcHlUb1ZlY3RvcihtYXAua2V5cygpKSkg
ewogICAgICAgICBhdXRvKiBwYWdlID0gZmluZFBhZ2VGb3JGcmFtZUlEKCptX3Byb2Nlc3NQb29s
LCBpZCk7CiAgICAgICAgIGF1dG8gY2FsbGJhY2sgPSBtYXAudGFrZShpZCk7CkBAIC01NjgsNyAr
NTU5LDcgQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6bG9hZFRpbWVyRmlyZWQoKQogICAg
IHJlc3BvbmRUb1BlbmRpbmdQYWdlTmF2aWdhdGlvbkNhbGxiYWNrc1dpdGhUaW1lb3V0KG1fcGVu
ZGluZ0VhZ2VyTmF2aWdhdGlvbkluQnJvd3NpbmdDb250ZXh0Q2FsbGJhY2tzUGVyUGFnZSk7CiB9
CiAKLXZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246Om1heGltaXplV2luZG93T2ZCcm93c2luZ0Nv
bnRleHQoY29uc3QgU3RyaW5nJiBicm93c2luZ0NvbnRleHRIYW5kbGUsIFJlZjxNYXhpbWl6ZVdp
bmRvd09mQnJvd3NpbmdDb250ZXh0Q2FsbGJhY2s+JiYgY2FsbGJhY2spCit2b2lkIFdlYkF1dG9t
YXRpb25TZXNzaW9uOjptYXhpbWl6ZVdpbmRvd09mQnJvd3NpbmdDb250ZXh0KGNvbnN0IEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYgYnJvd3Np
bmdDb250ZXh0SGFuZGxlLCBSZWY8TWF4aW1pemVXaW5kb3dPZkJyb3dzaW5nQ29udGV4dENhbGxi
YWNrPiYmIGNhbGxiYWNrKQogewogICAgIGF1dG8qIHBhZ2UgPSB3ZWJQYWdlUHJveHlGb3JIYW5k
bGUoYnJvd3NpbmdDb250ZXh0SGFuZGxlKTsKICAgICBpZiAoIXBhZ2UpCkBAIC01ODQsNyArNTc1
LDcgQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6bWF4aW1pemVXaW5kb3dPZkJyb3dzaW5n
Q29udGV4dChjb25zdCBTdHJpbmcmIGJyb3dzaW4KICAgICB9KTsKIH0KIAotdm9pZCBXZWJBdXRv
bWF0aW9uU2Vzc2lvbjo6aGlkZVdpbmRvd09mQnJvd3NpbmdDb250ZXh0KGNvbnN0IFN0cmluZyYg
YnJvd3NpbmdDb250ZXh0SGFuZGxlLCBSZWY8SGlkZVdpbmRvd09mQnJvd3NpbmdDb250ZXh0Q2Fs
bGJhY2s+JiYgY2FsbGJhY2spCit2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpoaWRlV2luZG93
T2ZCcm93c2luZ0NvbnRleHQoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6
QnJvd3NpbmdDb250ZXh0SGFuZGxlJiBicm93c2luZ0NvbnRleHRIYW5kbGUsIFJlZjxIaWRlV2lu
ZG93T2ZCcm93c2luZ0NvbnRleHRDYWxsYmFjaz4mJiBjYWxsYmFjaykKIHsKICAgICBXZWJQYWdl
UHJveHkqIHBhZ2UgPSB3ZWJQYWdlUHJveHlGb3JIYW5kbGUoYnJvd3NpbmdDb250ZXh0SGFuZGxl
KTsKICAgICBpZiAoIXBhZ2UpCkBAIC02OTMsNjQgKzY4NCw1NiBAQCB2b2lkIFdlYkF1dG9tYXRp
b25TZXNzaW9uOjpkaWRFeGl0RnVsbFNjcmVlbkZvclBhZ2UoY29uc3QgV2ViUGFnZVByb3h5JikK
ICAgICAgICAgbV93aW5kb3dTdGF0ZVRyYW5zaXRpb25DYWxsYmFjayhXaW5kb3dUcmFuc2l0aW9u
ZWRUb1N0YXRlOjpVbmZ1bGxzY3JlZW4pOwogfQogCi12b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9u
OjpuYXZpZ2F0ZUJyb3dzaW5nQ29udGV4dChjb25zdCBTdHJpbmcmIGhhbmRsZSwgY29uc3QgU3Ry
aW5nJiB1cmwsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxQYWdlTG9hZFN0cmF0ZWd5U3RyaW5nLCBj
b25zdCBkb3VibGUqIG9wdGlvbmFsUGFnZUxvYWRUaW1lb3V0LCBSZWY8TmF2aWdhdGVCcm93c2lu
Z0NvbnRleHRDYWxsYmFjaz4mJiBjYWxsYmFjaykKK3ZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246
Om5hdmlnYXRlQnJvd3NpbmdDb250ZXh0KGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9t
YXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYgaGFuZGxlLCBjb25zdCBTdHJpbmcmIHVybCwg
T3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6UGFnZUxvYWRTdHJhdGVn
eT4mJiBvcHRpb25hbFBhZ2VMb2FkU3RyYXRlZ3ksIE9wdGlvbmFsPGRvdWJsZT4mJiBvcHRpb25h
bFBhZ2VMb2FkVGltZW91dCwgUmVmPE5hdmlnYXRlQnJvd3NpbmdDb250ZXh0Q2FsbGJhY2s+JiYg
Y2FsbGJhY2spCiB7CiAgICAgV2ViUGFnZVByb3h5KiBwYWdlID0gd2ViUGFnZVByb3h5Rm9ySGFu
ZGxlKGhhbmRsZSk7CiAgICAgaWYgKCFwYWdlKQogICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJF
REVGSU5FRF9FUlJPUihXaW5kb3dOb3RGb3VuZCk7CiAKLSAgICBhdXRvIHBhZ2VMb2FkU3RyYXRl
Z3kgPSBwYWdlTG9hZFN0cmF0ZWd5RnJvbVN0cmluZ1BhcmFtZXRlcihvcHRpb25hbFBhZ2VMb2Fk
U3RyYXRlZ3lTdHJpbmcpOwotICAgIGlmICghcGFnZUxvYWRTdHJhdGVneSkKLSAgICAgICAgQVNZ
TkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoSW52YWxpZFBhcmFtZXRl
ciwgIlRoZSBwYXJhbWV0ZXIgJ3BhZ2VMb2FkU3RyYXRlZ3knIGlzIGludmFsaWQuIik7CisgICAg
YXV0byBwYWdlTG9hZFN0cmF0ZWd5ID0gcGFnZUxvYWRTdHJhdGVneUZyb21QYXJhbWV0ZXIoV1RG
TW92ZShvcHRpb25hbFBhZ2VMb2FkU3RyYXRlZ3kpKTsKICAgICBhdXRvIHBhZ2VMb2FkVGltZW91
dCA9IG9wdGlvbmFsUGFnZUxvYWRUaW1lb3V0ID8gU2Vjb25kczo6ZnJvbU1pbGxpc2Vjb25kcygq
b3B0aW9uYWxQYWdlTG9hZFRpbWVvdXQpIDogZGVmYXVsdFBhZ2VMb2FkVGltZW91dDsKIAogICAg
IHBhZ2UtPmxvYWRSZXF1ZXN0KFVSTChVUkwoKSwgdXJsKSk7Ci0gICAgd2FpdEZvck5hdmlnYXRp
b25Ub0NvbXBsZXRlT25QYWdlKCpwYWdlLCBwYWdlTG9hZFN0cmF0ZWd5LnZhbHVlKCksIHBhZ2VM
b2FkVGltZW91dCwgV1RGTW92ZShjYWxsYmFjaykpOworICAgIHdhaXRGb3JOYXZpZ2F0aW9uVG9D
b21wbGV0ZU9uUGFnZSgqcGFnZSwgcGFnZUxvYWRTdHJhdGVneSwgcGFnZUxvYWRUaW1lb3V0LCBX
VEZNb3ZlKGNhbGxiYWNrKSk7CiB9CiAKLXZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OmdvQmFj
a0luQnJvd3NpbmdDb250ZXh0KGNvbnN0IFN0cmluZyYgaGFuZGxlLCBjb25zdCBTdHJpbmcqIG9w
dGlvbmFsUGFnZUxvYWRTdHJhdGVneVN0cmluZywgY29uc3QgZG91YmxlKiBvcHRpb25hbFBhZ2VM
b2FkVGltZW91dCwgUmVmPEdvQmFja0luQnJvd3NpbmdDb250ZXh0Q2FsbGJhY2s+JiYgY2FsbGJh
Y2spCit2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpnb0JhY2tJbkJyb3dzaW5nQ29udGV4dChj
b25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRIYW5k
bGUmIGhhbmRsZSwgT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6UGFn
ZUxvYWRTdHJhdGVneT4mJiBvcHRpb25hbFBhZ2VMb2FkU3RyYXRlZ3ksIE9wdGlvbmFsPGRvdWJs
ZT4mJiBvcHRpb25hbFBhZ2VMb2FkVGltZW91dCwgUmVmPEdvQmFja0luQnJvd3NpbmdDb250ZXh0
Q2FsbGJhY2s+JiYgY2FsbGJhY2spCiB7CiAgICAgV2ViUGFnZVByb3h5KiBwYWdlID0gd2ViUGFn
ZVByb3h5Rm9ySGFuZGxlKGhhbmRsZSk7CiAgICAgaWYgKCFwYWdlKQogICAgICAgICBBU1lOQ19G
QUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUihXaW5kb3dOb3RGb3VuZCk7CiAKLSAgICBhdXRvIHBh
Z2VMb2FkU3RyYXRlZ3kgPSBwYWdlTG9hZFN0cmF0ZWd5RnJvbVN0cmluZ1BhcmFtZXRlcihvcHRp
b25hbFBhZ2VMb2FkU3RyYXRlZ3lTdHJpbmcpOwotICAgIGlmICghcGFnZUxvYWRTdHJhdGVneSkK
LSAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoSW52
YWxpZFBhcmFtZXRlciwgIlRoZSBwYXJhbWV0ZXIgJ3BhZ2VMb2FkU3RyYXRlZ3knIGlzIGludmFs
aWQuIik7CisgICAgYXV0byBwYWdlTG9hZFN0cmF0ZWd5ID0gcGFnZUxvYWRTdHJhdGVneUZyb21Q
YXJhbWV0ZXIoV1RGTW92ZShvcHRpb25hbFBhZ2VMb2FkU3RyYXRlZ3kpKTsKICAgICBhdXRvIHBh
Z2VMb2FkVGltZW91dCA9IG9wdGlvbmFsUGFnZUxvYWRUaW1lb3V0ID8gU2Vjb25kczo6ZnJvbU1p
bGxpc2Vjb25kcygqb3B0aW9uYWxQYWdlTG9hZFRpbWVvdXQpIDogZGVmYXVsdFBhZ2VMb2FkVGlt
ZW91dDsKIAogICAgIHBhZ2UtPmdvQmFjaygpOwotICAgIHdhaXRGb3JOYXZpZ2F0aW9uVG9Db21w
bGV0ZU9uUGFnZSgqcGFnZSwgcGFnZUxvYWRTdHJhdGVneS52YWx1ZSgpLCBwYWdlTG9hZFRpbWVv
dXQsIFdURk1vdmUoY2FsbGJhY2spKTsKKyAgICB3YWl0Rm9yTmF2aWdhdGlvblRvQ29tcGxldGVP
blBhZ2UoKnBhZ2UsIHBhZ2VMb2FkU3RyYXRlZ3ksIHBhZ2VMb2FkVGltZW91dCwgV1RGTW92ZShj
YWxsYmFjaykpOwogfQogCi12b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpnb0ZvcndhcmRJbkJy
b3dzaW5nQ29udGV4dChjb25zdCBTdHJpbmcmIGhhbmRsZSwgY29uc3QgU3RyaW5nKiBvcHRpb25h
bFBhZ2VMb2FkU3RyYXRlZ3lTdHJpbmcsIGNvbnN0IGRvdWJsZSogb3B0aW9uYWxQYWdlTG9hZFRp
bWVvdXQsIFJlZjxHb0ZvcndhcmRJbkJyb3dzaW5nQ29udGV4dENhbGxiYWNrPiYmIGNhbGxiYWNr
KQordm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6Z29Gb3J3YXJkSW5Ccm93c2luZ0NvbnRleHQo
Y29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFu
ZGxlJiBoYW5kbGUsIE9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OlBh
Z2VMb2FkU3RyYXRlZ3k+JiYgb3B0aW9uYWxQYWdlTG9hZFN0cmF0ZWd5LCBPcHRpb25hbDxkb3Vi
bGU+JiYgb3B0aW9uYWxQYWdlTG9hZFRpbWVvdXQsIFJlZjxHb0ZvcndhcmRJbkJyb3dzaW5nQ29u
dGV4dENhbGxiYWNrPiYmIGNhbGxiYWNrKQogewogICAgIFdlYlBhZ2VQcm94eSogcGFnZSA9IHdl
YlBhZ2VQcm94eUZvckhhbmRsZShoYW5kbGUpOwogICAgIGlmICghcGFnZSkKICAgICAgICAgQVNZ
TkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1IoV2luZG93Tm90Rm91bmQpOwogCi0gICAgYXV0
byBwYWdlTG9hZFN0cmF0ZWd5ID0gcGFnZUxvYWRTdHJhdGVneUZyb21TdHJpbmdQYXJhbWV0ZXIo
b3B0aW9uYWxQYWdlTG9hZFN0cmF0ZWd5U3RyaW5nKTsKLSAgICBpZiAoIXBhZ2VMb2FkU3RyYXRl
Z3kpCi0gICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxT
KEludmFsaWRQYXJhbWV0ZXIsICJUaGUgcGFyYW1ldGVyICdwYWdlTG9hZFN0cmF0ZWd5JyBpcyBp
bnZhbGlkLiIpOworICAgIGF1dG8gcGFnZUxvYWRTdHJhdGVneSA9IHBhZ2VMb2FkU3RyYXRlZ3lG
cm9tUGFyYW1ldGVyKFdURk1vdmUob3B0aW9uYWxQYWdlTG9hZFN0cmF0ZWd5KSk7CiAgICAgYXV0
byBwYWdlTG9hZFRpbWVvdXQgPSBvcHRpb25hbFBhZ2VMb2FkVGltZW91dCA/IFNlY29uZHM6OmZy
b21NaWxsaXNlY29uZHMoKm9wdGlvbmFsUGFnZUxvYWRUaW1lb3V0KSA6IGRlZmF1bHRQYWdlTG9h
ZFRpbWVvdXQ7CiAKICAgICBwYWdlLT5nb0ZvcndhcmQoKTsKLSAgICB3YWl0Rm9yTmF2aWdhdGlv
blRvQ29tcGxldGVPblBhZ2UoKnBhZ2UsIHBhZ2VMb2FkU3RyYXRlZ3kudmFsdWUoKSwgcGFnZUxv
YWRUaW1lb3V0LCBXVEZNb3ZlKGNhbGxiYWNrKSk7CisgICAgd2FpdEZvck5hdmlnYXRpb25Ub0Nv
bXBsZXRlT25QYWdlKCpwYWdlLCBwYWdlTG9hZFN0cmF0ZWd5LCBwYWdlTG9hZFRpbWVvdXQsIFdU
Rk1vdmUoY2FsbGJhY2spKTsKIH0KIAotdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6cmVsb2Fk
QnJvd3NpbmdDb250ZXh0KGNvbnN0IFN0cmluZyYgaGFuZGxlLCBjb25zdCBTdHJpbmcqIG9wdGlv
bmFsUGFnZUxvYWRTdHJhdGVneVN0cmluZywgY29uc3QgZG91YmxlKiBvcHRpb25hbFBhZ2VMb2Fk
VGltZW91dCwgUmVmPFJlbG9hZEJyb3dzaW5nQ29udGV4dENhbGxiYWNrPiYmIGNhbGxiYWNrKQor
dm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6cmVsb2FkQnJvd3NpbmdDb250ZXh0KGNvbnN0IElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYgaGFu
ZGxlLCBPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpQYWdlTG9hZFN0
cmF0ZWd5PiYmIG9wdGlvbmFsUGFnZUxvYWRTdHJhdGVneSwgT3B0aW9uYWw8ZG91YmxlPiYmIG9w
dGlvbmFsUGFnZUxvYWRUaW1lb3V0LCBSZWY8UmVsb2FkQnJvd3NpbmdDb250ZXh0Q2FsbGJhY2s+
JiYgY2FsbGJhY2spCiB7CiAgICAgV2ViUGFnZVByb3h5KiBwYWdlID0gd2ViUGFnZVByb3h5Rm9y
SGFuZGxlKGhhbmRsZSk7CiAgICAgaWYgKCFwYWdlKQogICAgICAgICBBU1lOQ19GQUlMX1dJVEhf
UFJFREVGSU5FRF9FUlJPUihXaW5kb3dOb3RGb3VuZCk7CiAKLSAgICBhdXRvIHBhZ2VMb2FkU3Ry
YXRlZ3kgPSBwYWdlTG9hZFN0cmF0ZWd5RnJvbVN0cmluZ1BhcmFtZXRlcihvcHRpb25hbFBhZ2VM
b2FkU3RyYXRlZ3lTdHJpbmcpOwotICAgIGlmICghcGFnZUxvYWRTdHJhdGVneSkKLSAgICAgICAg
QVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoSW52YWxpZFBhcmFt
ZXRlciwgIlRoZSBwYXJhbWV0ZXIgJ3BhZ2VMb2FkU3RyYXRlZ3knIGlzIGludmFsaWQuIik7Cisg
ICAgYXV0byBwYWdlTG9hZFN0cmF0ZWd5ID0gcGFnZUxvYWRTdHJhdGVneUZyb21QYXJhbWV0ZXIo
V1RGTW92ZShvcHRpb25hbFBhZ2VMb2FkU3RyYXRlZ3kpKTsKICAgICBhdXRvIHBhZ2VMb2FkVGlt
ZW91dCA9IG9wdGlvbmFsUGFnZUxvYWRUaW1lb3V0ID8gU2Vjb25kczo6ZnJvbU1pbGxpc2Vjb25k
cygqb3B0aW9uYWxQYWdlTG9hZFRpbWVvdXQpIDogZGVmYXVsdFBhZ2VMb2FkVGltZW91dDsKIAog
ICAgIHBhZ2UtPnJlbG9hZCh7IH0pOwotICAgIHdhaXRGb3JOYXZpZ2F0aW9uVG9Db21wbGV0ZU9u
UGFnZSgqcGFnZSwgcGFnZUxvYWRTdHJhdGVneS52YWx1ZSgpLCBwYWdlTG9hZFRpbWVvdXQsIFdU
Rk1vdmUoY2FsbGJhY2spKTsKKyAgICB3YWl0Rm9yTmF2aWdhdGlvblRvQ29tcGxldGVPblBhZ2Uo
KnBhZ2UsIHBhZ2VMb2FkU3RyYXRlZ3ksIHBhZ2VMb2FkVGltZW91dCwgV1RGTW92ZShjYWxsYmFj
aykpOwogfQogCiB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpuYXZpZ2F0aW9uT2NjdXJyZWRG
b3JGcmFtZShjb25zdCBXZWJGcmFtZVByb3h5JiBmcmFtZSkKQEAgLTkyMiwzNSArOTA1LDI3IEBA
IHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OmhhbmRsZVJ1bk9wZW5QYW5lbChjb25zdCBXZWJQ
YWdlUHJveHkmIHBhZ2UsIGNvbnN0IFdlCiAgICAgbV9kb21haW5Ob3RpZmllci0+ZmlsZUNob29z
ZXJEaXNtaXNzZWQoYnJvd3NpbmdDb250ZXh0SGFuZGxlLCBmYWxzZSk7CiB9CiAKLXZvaWQgV2Vi
QXV0b21hdGlvblNlc3Npb246OmV2YWx1YXRlSmF2YVNjcmlwdEZ1bmN0aW9uKGNvbnN0IFN0cmlu
ZyYgYnJvd3NpbmdDb250ZXh0SGFuZGxlLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsRnJhbWVIYW5k
bGUsIGNvbnN0IFN0cmluZyYgZnVuY3Rpb24sIGNvbnN0IEpTT046OkFycmF5JiBhcmd1bWVudHMs
IGNvbnN0IGJvb2wqIG9wdGlvbmFsRXhwZWN0c0ltcGxpY2l0Q2FsbGJhY2tBcmd1bWVudCwgY29u
c3QgZG91YmxlKiBvcHRpb25hbENhbGxiYWNrVGltZW91dCwgUmVmPEV2YWx1YXRlSmF2YVNjcmlw
dEZ1bmN0aW9uQ2FsbGJhY2s+JiYgY2FsbGJhY2spCit2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9u
OjpldmFsdWF0ZUphdmFTY3JpcHRGdW5jdGlvbihjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpB
dXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRIYW5kbGUmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSwg
Y29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6RnJhbWVIYW5kbGUmIGZyYW1l
SGFuZGxlLCBjb25zdCBTdHJpbmcmIGZ1bmN0aW9uLCBSZWY8SlNPTjo6QXJyYXk+JiYgYXJndW1l
bnRzLCBPcHRpb25hbDxib29sPiYmIGV4cGVjdHNJbXBsaWNpdENhbGxiYWNrQXJndW1lbnQsIE9w
dGlvbmFsPGRvdWJsZT4mJiBjYWxsYmFja1RpbWVvdXQsIFJlZjxFdmFsdWF0ZUphdmFTY3JpcHRG
dW5jdGlvbkNhbGxiYWNrPiYmIGNhbGxiYWNrKQogewogICAgIFdlYlBhZ2VQcm94eSogcGFnZSA9
IHdlYlBhZ2VQcm94eUZvckhhbmRsZShicm93c2luZ0NvbnRleHRIYW5kbGUpOwogICAgIGlmICgh
cGFnZSkKICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1IoV2luZG93Tm90
Rm91bmQpOwogCiAgICAgYm9vbCBmcmFtZU5vdEZvdW5kID0gZmFsc2U7Ci0gICAgYXV0byBmcmFt
ZUlEID0gd2ViRnJhbWVJREZvckhhbmRsZShvcHRpb25hbEZyYW1lSGFuZGxlID8gKm9wdGlvbmFs
RnJhbWVIYW5kbGUgOiBlbXB0eVN0cmluZygpLCBmcmFtZU5vdEZvdW5kKTsKKyAgICBhdXRvIGZy
YW1lSUQgPSB3ZWJGcmFtZUlERm9ySGFuZGxlKGZyYW1lSGFuZGxlLCBmcmFtZU5vdEZvdW5kKTsK
ICAgICBpZiAoZnJhbWVOb3RGb3VuZCkKICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklO
RURfRVJST1IoRnJhbWVOb3RGb3VuZCk7CiAKICAgICBWZWN0b3I8U3RyaW5nPiBhcmd1bWVudHNW
ZWN0b3I7Ci0gICAgYXJndW1lbnRzVmVjdG9yLnJlc2VydmVDYXBhY2l0eShhcmd1bWVudHMubGVu
Z3RoKCkpOworICAgIGFyZ3VtZW50c1ZlY3Rvci5yZXNlcnZlQ2FwYWNpdHkoYXJndW1lbnRzLT5s
ZW5ndGgoKSk7CiAKLSAgICBmb3IgKGF1dG8mIGFyZ3VtZW50IDogYXJndW1lbnRzKSB7Ci0gICAg
ICAgIFN0cmluZyBhcmd1bWVudFN0cmluZzsKLSAgICAgICAgYXJndW1lbnQtPmFzU3RyaW5nKGFy
Z3VtZW50U3RyaW5nKTsKLSAgICAgICAgYXJndW1lbnRzVmVjdG9yLnVuY2hlY2tlZEFwcGVuZChh
cmd1bWVudFN0cmluZyk7Ci0gICAgfQotCi0gICAgYm9vbCBleHBlY3RzSW1wbGljaXRDYWxsYmFj
a0FyZ3VtZW50ID0gb3B0aW9uYWxFeHBlY3RzSW1wbGljaXRDYWxsYmFja0FyZ3VtZW50ID8gKm9w
dGlvbmFsRXhwZWN0c0ltcGxpY2l0Q2FsbGJhY2tBcmd1bWVudCA6IGZhbHNlOwotICAgIE9wdGlv
bmFsPGRvdWJsZT4gY2FsbGJhY2tUaW1lb3V0OwotICAgIGlmIChvcHRpb25hbENhbGxiYWNrVGlt
ZW91dCkKLSAgICAgICAgY2FsbGJhY2tUaW1lb3V0ID0gKm9wdGlvbmFsQ2FsbGJhY2tUaW1lb3V0
OworICAgIGZvciAoY29uc3QgYXV0byYgYXJndW1lbnQgOiBhcmd1bWVudHMuZ2V0KCkpCisgICAg
ICAgIGFyZ3VtZW50c1ZlY3Rvci51bmNoZWNrZWRBcHBlbmQoYXJndW1lbnQtPmFzU3RyaW5nKCkp
OwogCiAgICAgdWludDY0X3QgY2FsbGJhY2tJRCA9IG1fbmV4dEV2YWx1YXRlSmF2YVNjcmlwdENh
bGxiYWNrSUQrKzsKICAgICBtX2V2YWx1YXRlSmF2YVNjcmlwdEZ1bmN0aW9uQ2FsbGJhY2tzLnNl
dChjYWxsYmFja0lELCBXVEZNb3ZlKGNhbGxiYWNrKSk7CiAKLSAgICBwYWdlLT5wcm9jZXNzKCku
c2VuZChNZXNzYWdlczo6V2ViQXV0b21hdGlvblNlc3Npb25Qcm94eTo6RXZhbHVhdGVKYXZhU2Ny
aXB0RnVuY3Rpb24ocGFnZS0+d2ViUGFnZUlEKCksIGZyYW1lSUQsIGZ1bmN0aW9uLCBhcmd1bWVu
dHNWZWN0b3IsIGV4cGVjdHNJbXBsaWNpdENhbGxiYWNrQXJndW1lbnQsIGNhbGxiYWNrVGltZW91
dCwgY2FsbGJhY2tJRCksIDApOworICAgIHBhZ2UtPnByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpX
ZWJBdXRvbWF0aW9uU2Vzc2lvblByb3h5OjpFdmFsdWF0ZUphdmFTY3JpcHRGdW5jdGlvbihwYWdl
LT53ZWJQYWdlSUQoKSwgZnJhbWVJRCwgZnVuY3Rpb24sIGFyZ3VtZW50c1ZlY3RvciwgZXhwZWN0
c0ltcGxpY2l0Q2FsbGJhY2tBcmd1bWVudC52YWx1ZU9yKGZhbHNlKSwgV1RGTW92ZShjYWxsYmFj
a1RpbWVvdXQpLCBjYWxsYmFja0lEKSwgMCk7CiB9CiAKIHZvaWQgV2ViQXV0b21hdGlvblNlc3Np
b246OmRpZEV2YWx1YXRlSmF2YVNjcmlwdEZ1bmN0aW9uKHVpbnQ2NF90IGNhbGxiYWNrSUQsIGNv
bnN0IFN0cmluZyYgcmVzdWx0LCBjb25zdCBTdHJpbmcmIGVycm9yVHlwZSkKQEAgLTk2NSw3ICs5
NDAsNyBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpkaWRFdmFsdWF0ZUphdmFTY3JpcHRG
dW5jdGlvbih1aW50NjRfdCBjYWxsYmFja0lELCBjbwogICAgICAgICBjYWxsYmFjay0+c2VuZFN1
Y2Nlc3MocmVzdWx0KTsKIH0KIAotdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6cmVzb2x2ZUNo
aWxkRnJhbWVIYW5kbGUoY29uc3QgU3RyaW5nJiBicm93c2luZ0NvbnRleHRIYW5kbGUsIGNvbnN0
IFN0cmluZyogb3B0aW9uYWxGcmFtZUhhbmRsZSwgY29uc3QgaW50KiBvcHRpb25hbE9yZGluYWws
IGNvbnN0IFN0cmluZyogb3B0aW9uYWxOYW1lLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsTm9kZUhh
bmRsZSwgUmVmPFJlc29sdmVDaGlsZEZyYW1lSGFuZGxlQ2FsbGJhY2s+JiYgY2FsbGJhY2spCit2
b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpyZXNvbHZlQ2hpbGRGcmFtZUhhbmRsZShjb25zdCBJ
bnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRIYW5kbGUmIGJy
b3dzaW5nQ29udGV4dEhhbmRsZSwgY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlv
bjo6RnJhbWVIYW5kbGUmIGZyYW1lSGFuZGxlLCBPcHRpb25hbDxpbnQ+JiYgb3B0aW9uYWxPcmRp
bmFsLCBjb25zdCBTdHJpbmcmIG9wdGlvbmFsTmFtZSwgY29uc3QgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6QXV0b21hdGlvbjo6Tm9kZUhhbmRsZSYgb3B0aW9uYWxOb2RlSGFuZGxlLCBSZWY8UmVzb2x2
ZUNoaWxkRnJhbWVIYW5kbGVDYWxsYmFjaz4mJiBjYWxsYmFjaykKIHsKICAgICBpZiAoIW9wdGlv
bmFsT3JkaW5hbCAmJiAhb3B0aW9uYWxOYW1lICYmICFvcHRpb25hbE5vZGVIYW5kbGUpCiAgICAg
ICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxTKE1pc3NpbmdQ
YXJhbWV0ZXIsICJDb21tYW5kIG11c3Qgc3BlY2lmeSBhIGNoaWxkIGZyYW1lIGJ5IG9yZGluYWws
IG5hbWUsIG9yIGVsZW1lbnQgaGFuZGxlLiIpOwpAQCAtOTc1LDcgKzk1MCw3IEBAIHZvaWQgV2Vi
QXV0b21hdGlvblNlc3Npb246OnJlc29sdmVDaGlsZEZyYW1lSGFuZGxlKGNvbnN0IFN0cmluZyYg
YnJvd3NpbmdDb250ZXh0CiAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9S
KFdpbmRvd05vdEZvdW5kKTsKIAogICAgIGJvb2wgZnJhbWVOb3RGb3VuZCA9IGZhbHNlOwotICAg
IGF1dG8gZnJhbWVJRCA9IHdlYkZyYW1lSURGb3JIYW5kbGUob3B0aW9uYWxGcmFtZUhhbmRsZSA/
ICpvcHRpb25hbEZyYW1lSGFuZGxlIDogZW1wdHlTdHJpbmcoKSwgZnJhbWVOb3RGb3VuZCk7Cisg
ICAgYXV0byBmcmFtZUlEID0gd2ViRnJhbWVJREZvckhhbmRsZShmcmFtZUhhbmRsZSwgZnJhbWVO
b3RGb3VuZCk7CiAgICAgaWYgKGZyYW1lTm90Rm91bmQpCiAgICAgICAgIEFTWU5DX0ZBSUxfV0lU
SF9QUkVERUZJTkVEX0VSUk9SKEZyYW1lTm90Rm91bmQpOwogCkBAIC05ODgsMTMgKzk2MywxMyBA
QCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpyZXNvbHZlQ2hpbGRGcmFtZUhhbmRsZShjb25z
dCBTdHJpbmcmIGJyb3dzaW5nQ29udGV4dAogICAgICAgICBjYWxsYmFjay0+c2VuZFN1Y2Nlc3Mo
aGFuZGxlRm9yV2ViRnJhbWVJRChmcmFtZUlEKSk7CiAgICAgfTsKIAotICAgIGlmIChvcHRpb25h
bE5vZGVIYW5kbGUpIHsKLSAgICAgICAgcGFnZS0+cHJvY2VzcygpLnNlbmRXaXRoQXN5bmNSZXBs
eShNZXNzYWdlczo6V2ViQXV0b21hdGlvblNlc3Npb25Qcm94eTo6UmVzb2x2ZUNoaWxkRnJhbWVX
aXRoTm9kZUhhbmRsZShwYWdlLT53ZWJQYWdlSUQoKSwgZnJhbWVJRCwgKm9wdGlvbmFsTm9kZUhh
bmRsZSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICBpZiAoISFvcHRpb25hbE5v
ZGVIYW5kbGUpIHsKKyAgICAgICAgcGFnZS0+cHJvY2VzcygpLnNlbmRXaXRoQXN5bmNSZXBseShN
ZXNzYWdlczo6V2ViQXV0b21hdGlvblNlc3Npb25Qcm94eTo6UmVzb2x2ZUNoaWxkRnJhbWVXaXRo
Tm9kZUhhbmRsZShwYWdlLT53ZWJQYWdlSUQoKSwgZnJhbWVJRCwgb3B0aW9uYWxOb2RlSGFuZGxl
KSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
Ci0gICAgaWYgKG9wdGlvbmFsTmFtZSkgewotICAgICAgICBwYWdlLT5wcm9jZXNzKCkuc2VuZFdp
dGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJBdXRvbWF0aW9uU2Vzc2lvblByb3h5OjpSZXNvbHZl
Q2hpbGRGcmFtZVdpdGhOYW1lKHBhZ2UtPndlYlBhZ2VJRCgpLCBmcmFtZUlELCAqb3B0aW9uYWxO
YW1lKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAgIGlmICghIW9wdGlvbmFsTmFt
ZSkgeworICAgICAgICBwYWdlLT5wcm9jZXNzKCkuc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2Vz
OjpXZWJBdXRvbWF0aW9uU2Vzc2lvblByb3h5OjpSZXNvbHZlQ2hpbGRGcmFtZVdpdGhOYW1lKHBh
Z2UtPndlYlBhZ2VJRCgpLCBmcmFtZUlELCBvcHRpb25hbE5hbWUpLCBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTEwMDYsNyArOTgxLDcg
QEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6cmVzb2x2ZUNoaWxkRnJhbWVIYW5kbGUoY29u
c3QgU3RyaW5nJiBicm93c2luZ0NvbnRleHQKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0K
IAotdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6cmVzb2x2ZVBhcmVudEZyYW1lSGFuZGxlKGNv
bnN0IFN0cmluZyYgYnJvd3NpbmdDb250ZXh0SGFuZGxlLCBjb25zdCBTdHJpbmcmIGZyYW1lSGFu
ZGxlLCBSZWY8UmVzb2x2ZVBhcmVudEZyYW1lSGFuZGxlQ2FsbGJhY2s+JiYgY2FsbGJhY2spCit2
b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpyZXNvbHZlUGFyZW50RnJhbWVIYW5kbGUoY29uc3Qg
SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJiBi
cm93c2luZ0NvbnRleHRIYW5kbGUsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRp
b246OkZyYW1lSGFuZGxlJiBmcmFtZUhhbmRsZSwgUmVmPFJlc29sdmVQYXJlbnRGcmFtZUhhbmRs
ZUNhbGxiYWNrPiYmIGNhbGxiYWNrKQogewogICAgIFdlYlBhZ2VQcm94eSogcGFnZSA9IHdlYlBh
Z2VQcm94eUZvckhhbmRsZShicm93c2luZ0NvbnRleHRIYW5kbGUpOwogICAgIGlmICghcGFnZSkK
QEAgLTEwMjksMTYgKzEwMDQsMjIgQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6cmVzb2x2
ZVBhcmVudEZyYW1lSGFuZGxlKGNvbnN0IFN0cmluZyYgYnJvd3NpbmdDb250ZXgKICAgICBwYWdl
LT5wcm9jZXNzKCkuc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJBdXRvbWF0aW9uU2Vz
c2lvblByb3h5OjpSZXNvbHZlUGFyZW50RnJhbWUocGFnZS0+d2ViUGFnZUlEKCksIGZyYW1lSUQp
LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKLXN0YXRpYyBPcHRpb25hbDxDb29y
ZGluYXRlU3lzdGVtPiBwcm90b2NvbFN0cmluZ1RvQ29vcmRpbmF0ZVN5c3RlbShjb25zdCBTdHJp
bmcmIGNvb3JkaW5hdGVTeXN0ZW1TdHJpbmcpCitzdGF0aWMgT3B0aW9uYWw8Q29vcmRpbmF0ZVN5
c3RlbT4gcHJvdG9jb2xTdHJpbmdUb0Nvb3JkaW5hdGVTeXN0ZW0oSW5zcGVjdG9yOjpQcm90b2Nv
bDo6QXV0b21hdGlvbjo6Q29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtKQogewotICAg
IGlmIChjb29yZGluYXRlU3lzdGVtU3RyaW5nID09ICJQYWdlIikKKyAgICBzd2l0Y2ggKGNvb3Jk
aW5hdGVTeXN0ZW0pIHsKKyAgICBjYXNlIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246
OkNvb3JkaW5hdGVTeXN0ZW06OlBhZ2U6CiAgICAgICAgIHJldHVybiBDb29yZGluYXRlU3lzdGVt
OjpQYWdlOwotICAgIGlmIChjb29yZGluYXRlU3lzdGVtU3RyaW5nID09ICJMYXlvdXRWaWV3cG9y
dCIpCisKKyAgICBjYXNlIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkNvb3JkaW5h
dGVTeXN0ZW06OlZpZXdwb3J0OgorICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21h
dGlvbjo6Q29vcmRpbmF0ZVN5c3RlbTo6TGF5b3V0Vmlld3BvcnQ6CiAgICAgICAgIHJldHVybiBD
b29yZGluYXRlU3lzdGVtOjpMYXlvdXRWaWV3cG9ydDsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQogCi12b2lkIFdlYkF1dG9t
YXRpb25TZXNzaW9uOjpjb21wdXRlRWxlbWVudExheW91dChjb25zdCBTdHJpbmcmIGJyb3dzaW5n
Q29udGV4dEhhbmRsZSwgY29uc3QgU3RyaW5nJiBmcmFtZUhhbmRsZSwgY29uc3QgU3RyaW5nJiBu
b2RlSGFuZGxlLCBjb25zdCBib29sKiBvcHRpb25hbFNjcm9sbEludG9WaWV3SWZOZWVkZWQsIGNv
bnN0IFN0cmluZyYgY29vcmRpbmF0ZVN5c3RlbVN0cmluZywgUmVmPENvbXB1dGVFbGVtZW50TGF5
b3V0Q2FsbGJhY2s+JiYgY2FsbGJhY2spCit2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpjb21w
dXRlRWxlbWVudExheW91dChjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpC
cm93c2luZ0NvbnRleHRIYW5kbGUmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSwgY29uc3QgSW5zcGVj
dG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6RnJhbWVIYW5kbGUmIGZyYW1lSGFuZGxlLCBjb25z
dCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpOb2RlSGFuZGxlJiBub2RlSGFuZGxl
LCBPcHRpb25hbDxib29sPiYmIG9wdGlvbmFsU2Nyb2xsSW50b1ZpZXdJZk5lZWRlZCwgSW5zcGVj
dG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6Q29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lz
dGVtVmFsdWUsIFJlZjxDb21wdXRlRWxlbWVudExheW91dENhbGxiYWNrPiYmIGNhbGxiYWNrKQog
ewogICAgIFdlYlBhZ2VQcm94eSogcGFnZSA9IHdlYlBhZ2VQcm94eUZvckhhbmRsZShicm93c2lu
Z0NvbnRleHRIYW5kbGUpOwogICAgIGlmICghcGFnZSkKQEAgLTEwNDksNyArMTAzMCw3IEBAIHZv
aWQgV2ViQXV0b21hdGlvblNlc3Npb246OmNvbXB1dGVFbGVtZW50TGF5b3V0KGNvbnN0IFN0cmlu
ZyYgYnJvd3NpbmdDb250ZXh0SGFuCiAgICAgaWYgKGZyYW1lTm90Rm91bmQpCiAgICAgICAgIEFT
WU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SKEZyYW1lTm90Rm91bmQpOwogCi0gICAgT3B0
aW9uYWw8Q29vcmRpbmF0ZVN5c3RlbT4gY29vcmRpbmF0ZVN5c3RlbSA9IHByb3RvY29sU3RyaW5n
VG9Db29yZGluYXRlU3lzdGVtKGNvb3JkaW5hdGVTeXN0ZW1TdHJpbmcpOworICAgIE9wdGlvbmFs
PENvb3JkaW5hdGVTeXN0ZW0+IGNvb3JkaW5hdGVTeXN0ZW0gPSBwcm90b2NvbFN0cmluZ1RvQ29v
cmRpbmF0ZVN5c3RlbShjb29yZGluYXRlU3lzdGVtVmFsdWUpOwogICAgIGlmICghY29vcmRpbmF0
ZVN5c3RlbSkKICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RF
VEFJTFMoSW52YWxpZFBhcmFtZXRlciwgIlRoZSBwYXJhbWV0ZXIgJ2Nvb3JkaW5hdGVTeXN0ZW0n
IGlzIGludmFsaWQuIik7CiAKQEAgLTEwOTEsNyArMTA3Miw3IEBAIHZvaWQgV2ViQXV0b21hdGlv
blNlc3Npb246OmNvbXB1dGVFbGVtZW50TGF5b3V0KGNvbnN0IFN0cmluZyYgYnJvd3NpbmdDb250
ZXh0SGFuCiAgICAgcGFnZS0+cHJvY2VzcygpLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6
V2ViQXV0b21hdGlvblNlc3Npb25Qcm94eTo6Q29tcHV0ZUVsZW1lbnRMYXlvdXQocGFnZS0+d2Vi
UGFnZUlEKCksIGZyYW1lSUQsIG5vZGVIYW5kbGUsIHNjcm9sbEludG9WaWV3SWZOZWVkZWQsIGNv
b3JkaW5hdGVTeXN0ZW0udmFsdWUoKSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0K
IAotdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6c2VsZWN0T3B0aW9uRWxlbWVudChjb25zdCBT
dHJpbmcmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSwgY29uc3QgU3RyaW5nJiBmcmFtZUhhbmRsZSwg
Y29uc3QgU3RyaW5nJiBub2RlSGFuZGxlLCBSZWY8U2VsZWN0T3B0aW9uRWxlbWVudENhbGxiYWNr
PiYmIGNhbGxiYWNrKQordm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6c2VsZWN0T3B0aW9uRWxl
bWVudChjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRl
eHRIYW5kbGUmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSwgY29uc3QgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6QXV0b21hdGlvbjo6RnJhbWVIYW5kbGUmIGZyYW1lSGFuZGxlLCBjb25zdCBJbnNwZWN0b3I6
OlByb3RvY29sOjpBdXRvbWF0aW9uOjpOb2RlSGFuZGxlJiBub2RlSGFuZGxlLCBSZWY8U2VsZWN0
T3B0aW9uRWxlbWVudENhbGxiYWNrPiYmIGNhbGxiYWNrKQogewogICAgIFdlYlBhZ2VQcm94eSog
cGFnZSA9IHdlYlBhZ2VQcm94eUZvckhhbmRsZShicm93c2luZ0NvbnRleHRIYW5kbGUpOwogICAg
IGlmICghcGFnZSkKQEAgLTExMTQsNyArMTA5NSw3IEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Np
b246OnNlbGVjdE9wdGlvbkVsZW1lbnQoY29uc3QgU3RyaW5nJiBicm93c2luZ0NvbnRleHRIYW5k
CiAgICAgcGFnZS0+cHJvY2VzcygpLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQXV0
b21hdGlvblNlc3Npb25Qcm94eTo6U2VsZWN0T3B0aW9uRWxlbWVudChwYWdlLT53ZWJQYWdlSUQo
KSwgZnJhbWVJRCwgbm9kZUhhbmRsZSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0K
IAotdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6aXNTaG93aW5nSmF2YVNjcmlwdERpYWxvZyhJ
bnNwZWN0b3I6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBicm93c2lu
Z0NvbnRleHRIYW5kbGUsIGJvb2wqIHJlc3VsdCkKK0luc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8Ym9vbD4gV2ViQXV0b21hdGlvblNlc3Npb246OmlzU2hvd2luZ0phdmFTY3JpcHRE
aWFsb2coY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250
ZXh0SGFuZGxlJiBicm93c2luZ0NvbnRleHRIYW5kbGUpCiB7CiAgICAgQVNTRVJUKG1fY2xpZW50
KTsKICAgICBpZiAoIW1fY2xpZW50KQpAQCAtMTEyNCwxMCArMTEwNSwxMCBAQCB2b2lkIFdlYkF1
dG9tYXRpb25TZXNzaW9uOjppc1Nob3dpbmdKYXZhU2NyaXB0RGlhbG9nKEluc3BlY3Rvcjo6RXJy
b3JTdHJpbmcmIGVycgogICAgIGlmICghcGFnZSkKICAgICAgICAgU1lOQ19GQUlMX1dJVEhfUFJF
REVGSU5FRF9FUlJPUihXaW5kb3dOb3RGb3VuZCk7CiAKLSAgICAqcmVzdWx0ID0gbV9jbGllbnQt
PmlzU2hvd2luZ0phdmFTY3JpcHREaWFsb2dPblBhZ2UoKnRoaXMsICpwYWdlKTsKKyAgICByZXR1
cm4gbV9jbGllbnQtPmlzU2hvd2luZ0phdmFTY3JpcHREaWFsb2dPblBhZ2UoKnRoaXMsICpwYWdl
KTsKIH0KIAotdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6ZGlzbWlzc0N1cnJlbnRKYXZhU2Ny
aXB0RGlhbG9nKEluc3BlY3Rvcjo6RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJp
bmcmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSkKK0luc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3Ry
aW5nT3I8dm9pZD4gV2ViQXV0b21hdGlvblNlc3Npb246OmRpc21pc3NDdXJyZW50SmF2YVNjcmlw
dERpYWxvZyhjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0Nv
bnRleHRIYW5kbGUmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSkKIHsKICAgICBBU1NFUlQobV9jbGll
bnQpOwogICAgIGlmICghbV9jbGllbnQpCkBAIC0xMTQxLDkgKzExMjIsMTEgQEAgdm9pZCBXZWJB
dXRvbWF0aW9uU2Vzc2lvbjo6ZGlzbWlzc0N1cnJlbnRKYXZhU2NyaXB0RGlhbG9nKEluc3BlY3Rv
cjo6RXJyb3JTdHJpbmcKICAgICAgICAgU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUihO
b0phdmFTY3JpcHREaWFsb2cpOwogCiAgICAgbV9jbGllbnQtPmRpc21pc3NDdXJyZW50SmF2YVNj
cmlwdERpYWxvZ09uUGFnZSgqdGhpcywgKnBhZ2UpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAot
dm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6YWNjZXB0Q3VycmVudEphdmFTY3JpcHREaWFsb2co
SW5zcGVjdG9yOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgYnJvd3Np
bmdDb250ZXh0SGFuZGxlKQorSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lk
PiBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6YWNjZXB0Q3VycmVudEphdmFTY3JpcHREaWFsb2coY29u
c3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxl
JiBicm93c2luZ0NvbnRleHRIYW5kbGUpCiB7CiAgICAgQVNTRVJUKG1fY2xpZW50KTsKICAgICBp
ZiAoIW1fY2xpZW50KQpAQCAtMTE1Nyw5ICsxMTQwLDExIEBAIHZvaWQgV2ViQXV0b21hdGlvblNl
c3Npb246OmFjY2VwdEN1cnJlbnRKYXZhU2NyaXB0RGlhbG9nKEluc3BlY3Rvcjo6RXJyb3JTdHJp
bmcmCiAgICAgICAgIFNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1IoTm9KYXZhU2NyaXB0
RGlhbG9nKTsKIAogICAgIG1fY2xpZW50LT5hY2NlcHRDdXJyZW50SmF2YVNjcmlwdERpYWxvZ09u
UGFnZSgqdGhpcywgKnBhZ2UpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBXZWJBdXRv
bWF0aW9uU2Vzc2lvbjo6bWVzc2FnZU9mQ3VycmVudEphdmFTY3JpcHREaWFsb2coSW5zcGVjdG9y
OjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgYnJvd3NpbmdDb250ZXh0
SGFuZGxlLCBTdHJpbmcqIHRleHQpCitJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09y
PFN0cmluZz4gV2ViQXV0b21hdGlvblNlc3Npb246Om1lc3NhZ2VPZkN1cnJlbnRKYXZhU2NyaXB0
RGlhbG9nKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29u
dGV4dEhhbmRsZSYgYnJvd3NpbmdDb250ZXh0SGFuZGxlKQogewogICAgIEFTU0VSVChtX2NsaWVu
dCk7CiAgICAgaWYgKCFtX2NsaWVudCkKQEAgLTExNzIsMTAgKzExNTcsMTAgQEAgdm9pZCBXZWJB
dXRvbWF0aW9uU2Vzc2lvbjo6bWVzc2FnZU9mQ3VycmVudEphdmFTY3JpcHREaWFsb2coSW5zcGVj
dG9yOjpFcnJvclN0cmkKICAgICBpZiAoIW1fY2xpZW50LT5pc1Nob3dpbmdKYXZhU2NyaXB0RGlh
bG9nT25QYWdlKCp0aGlzLCAqcGFnZSkpCiAgICAgICAgIFNZTkNfRkFJTF9XSVRIX1BSRURFRklO
RURfRVJST1IoTm9KYXZhU2NyaXB0RGlhbG9nKTsKIAotICAgICp0ZXh0ID0gbV9jbGllbnQtPm1l
c3NhZ2VPZkN1cnJlbnRKYXZhU2NyaXB0RGlhbG9nT25QYWdlKCp0aGlzLCAqcGFnZSk7CisgICAg
cmV0dXJuIG1fY2xpZW50LT5tZXNzYWdlT2ZDdXJyZW50SmF2YVNjcmlwdERpYWxvZ09uUGFnZSgq
dGhpcywgKnBhZ2UpOwogfQogCi12b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpzZXRVc2VySW5w
dXRGb3JDdXJyZW50SmF2YVNjcmlwdFByb21wdChJbnNwZWN0b3I6OkVycm9yU3RyaW5nJiBlcnJv
clN0cmluZywgY29uc3QgU3RyaW5nJiBicm93c2luZ0NvbnRleHRIYW5kbGUsIGNvbnN0IFN0cmlu
ZyYgcHJvbXB0VmFsdWUpCitJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+
IFdlYkF1dG9tYXRpb25TZXNzaW9uOjpzZXRVc2VySW5wdXRGb3JDdXJyZW50SmF2YVNjcmlwdFBy
b21wdChjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRl
eHRIYW5kbGUmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSwgY29uc3QgU3RyaW5nJiBwcm9tcHRWYWx1
ZSkKIHsKICAgICBBU1NFUlQobV9jbGllbnQpOwogICAgIGlmICghbV9jbGllbnQpCkBAIC0xMjA3
LDE5ICsxMTkyLDIxIEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OnNldFVzZXJJbnB1dEZv
ckN1cnJlbnRKYXZhU2NyaXB0UHJvbXB0KEluc3BlY3Rvcjo6RXJyCiAgICAgfQogCiAgICAgbV9j
bGllbnQtPnNldFVzZXJJbnB1dEZvckN1cnJlbnRKYXZhU2NyaXB0UHJvbXB0T25QYWdlKCp0aGlz
LCAqcGFnZSwgcHJvbXB0VmFsdWUpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBXZWJB
dXRvbWF0aW9uU2Vzc2lvbjo6c2V0RmlsZXNUb1NlbGVjdEZvckZpbGVVcGxvYWQoRXJyb3JTdHJp
bmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSwgY29u
c3QgSlNPTjo6QXJyYXkmIGZpbGVuYW1lcywgY29uc3QgSlNPTjo6QXJyYXkqIGZpbGVDb250ZW50
cykKK0luc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gV2ViQXV0b21hdGlv
blNlc3Npb246OnNldEZpbGVzVG9TZWxlY3RGb3JGaWxlVXBsb2FkKGNvbnN0IEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYgYnJvd3NpbmdDb250
ZXh0SGFuZGxlLCBSZWY8SlNPTjo6QXJyYXk+JiYgZmlsZW5hbWVzLCBSZWZQdHI8SlNPTjo6QXJy
YXk+JiYgZmlsZUNvbnRlbnRzKQogewogICAgIFZlY3RvcjxTdHJpbmc+IG5ld0ZpbGVMaXN0Owot
ICAgIG5ld0ZpbGVMaXN0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoZmlsZW5hbWVzLmxlbmd0aCgp
KTsKKyAgICBuZXdGaWxlTGlzdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGZpbGVuYW1lcy0+bGVu
Z3RoKCkpOwogCi0gICAgaWYgKGZpbGVDb250ZW50cyAmJiBmaWxlQ29udGVudHMtPmxlbmd0aCgp
ICE9IGZpbGVuYW1lcy5sZW5ndGgoKSkKKyAgICBpZiAoZmlsZUNvbnRlbnRzICYmIGZpbGVDb250
ZW50cy0+bGVuZ3RoKCkgIT0gZmlsZW5hbWVzLT5sZW5ndGgoKSkKICAgICAgICAgU1lOQ19GQUlM
X1dJVEhfUFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhJbnRlcm5hbEVycm9yLCAiVGhlIHBh
cmFtZXRlcnMgJ2ZpbGVuYW1lcycgYW5kICdmaWxlQ29udGVudHMnIG11c3QgaGF2ZSBlcXVhbCBs
ZW5ndGguIik7CiAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZpbGVuYW1lcy5sZW5ndGgo
KTsgKytpKSB7Ci0gICAgICAgIFN0cmluZyBmaWxlbmFtZTsKLSAgICAgICAgaWYgKCFmaWxlbmFt
ZXMuZ2V0KGkpLT5hc1N0cmluZyhmaWxlbmFtZSkpCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBmaWxlbmFtZXMtPmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgYXV0byBmaWxlbmFtZSA9IGZp
bGVuYW1lcy0+Z2V0KGkpLT5hc1N0cmluZygpOworICAgICAgICBpZiAoIWZpbGVuYW1lKQogICAg
ICAgICAgICAgU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhJbnRl
cm5hbEVycm9yLCAiVGhlIHBhcmFtZXRlciAnZmlsZW5hbWVzJyBjb250YWlucyBhIG5vbi1zdHJp
bmcgdmFsdWUuIik7CiAKICAgICAgICAgaWYgKCFmaWxlQ29udGVudHMpIHsKQEAgLTEyMjcsOCAr
MTIxNCw4IEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OnNldEZpbGVzVG9TZWxlY3RGb3JG
aWxlVXBsb2FkKEVycm9yU3RyaW5nJiBlcnJvclN0cmluCiAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgfQogCi0gICAgICAgIFN0cmluZyBmaWxlRGF0YTsKLSAgICAgICAgaWYgKCFmaWxl
Q29udGVudHMtPmdldChpKS0+YXNTdHJpbmcoZmlsZURhdGEpKQorICAgICAgICBhdXRvIGZpbGVE
YXRhID0gZmlsZUNvbnRlbnRzLT5nZXQoaSktPmFzU3RyaW5nKCk7CisgICAgICAgIGlmICghZmls
ZURhdGEpCiAgICAgICAgICAgICBTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9E
RVRBSUxTKEludGVybmFsRXJyb3IsICJUaGUgcGFyYW1ldGVyICdmaWxlQ29udGVudHMnIGNvbnRh
aW5zIGEgbm9uLXN0cmluZyB2YWx1ZS4iKTsKIAogICAgICAgICBPcHRpb25hbDxTdHJpbmc+IGxv
Y2FsRmlsZVBhdGggPSBwbGF0Zm9ybUdlbmVyYXRlTG9jYWxGaWxlUGF0aEZvclJlbW90ZUZpbGUo
ZmlsZW5hbWUsIGZpbGVEYXRhKTsKQEAgLTEyMzksOSArMTIyNiwxMSBAQCB2b2lkIFdlYkF1dG9t
YXRpb25TZXNzaW9uOjpzZXRGaWxlc1RvU2VsZWN0Rm9yRmlsZVVwbG9hZChFcnJvclN0cmluZyYg
ZXJyb3JTdHJpbgogICAgIH0KIAogICAgIG1fZmlsZXNUb1NlbGVjdEZvckZpbGVVcGxvYWQuc3dh
cChuZXdGaWxlTGlzdCk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIFdlYkF1dG9tYXRp
b25TZXNzaW9uOjpzZXRGaWxlc0ZvcklucHV0RmlsZVVwbG9hZChjb25zdCBTdHJpbmcmIGJyb3dz
aW5nQ29udGV4dEhhbmRsZSwgY29uc3QgU3RyaW5nJiBmcmFtZUhhbmRsZSwgY29uc3QgU3RyaW5n
JiBub2RlSGFuZGxlLCBjb25zdCBKU09OOjpBcnJheSYgZmlsZW5hbWVzLCBSZWY8U2V0RmlsZXNG
b3JJbnB1dEZpbGVVcGxvYWRDYWxsYmFjaz4mJiBjYWxsYmFjaykKK3ZvaWQgV2ViQXV0b21hdGlv
blNlc3Npb246OnNldEZpbGVzRm9ySW5wdXRGaWxlVXBsb2FkKGNvbnN0IEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYgYnJvd3NpbmdDb250ZXh0
SGFuZGxlLCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpGcmFtZUhhbmRs
ZSYgZnJhbWVIYW5kbGUsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246Ok5v
ZGVIYW5kbGUmIG5vZGVIYW5kbGUsIFJlZjxKU09OOjpBcnJheT4mJiBmaWxlbmFtZXMsIFJlZjxT
ZXRGaWxlc0ZvcklucHV0RmlsZVVwbG9hZENhbGxiYWNrPiYmIGNhbGxiYWNrKQogewogICAgIFdl
YlBhZ2VQcm94eSogcGFnZSA9IHdlYlBhZ2VQcm94eUZvckhhbmRsZShicm93c2luZ0NvbnRleHRI
YW5kbGUpOwogICAgIGlmICghcGFnZSkKQEAgLTEyNTMsMTAgKzEyNDIsMTAgQEAgdm9pZCBXZWJB
dXRvbWF0aW9uU2Vzc2lvbjo6c2V0RmlsZXNGb3JJbnB1dEZpbGVVcGxvYWQoY29uc3QgU3RyaW5n
JiBicm93c2luZ0NvbnQKICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1Io
RnJhbWVOb3RGb3VuZCk7CiAKICAgICBWZWN0b3I8U3RyaW5nPiBuZXdGaWxlTGlzdDsKLSAgICBu
ZXdGaWxlTGlzdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGZpbGVuYW1lcy5sZW5ndGgoKSk7Ci0g
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaWxlbmFtZXMubGVuZ3RoKCk7ICsraSkgewotICAg
ICAgICBTdHJpbmcgZmlsZW5hbWU7Ci0gICAgICAgIGlmICghZmlsZW5hbWVzLmdldChpKS0+YXNT
dHJpbmcoZmlsZW5hbWUpKQorICAgIG5ld0ZpbGVMaXN0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHko
ZmlsZW5hbWVzLT5sZW5ndGgoKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaWxlbmFt
ZXMtPmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgYXV0byBmaWxlbmFtZSA9IGZpbGVuYW1lcy0+
Z2V0KGkpLT5hc1N0cmluZygpOworICAgICAgICBpZiAoIWZpbGVuYW1lKQogICAgICAgICAgICAg
QVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoSW50ZXJuYWxFcnJv
ciwgIlRoZSBwYXJhbWV0ZXIgJ2ZpbGVuYW1lcycgY29udGFpbnMgYSBub24tc3RyaW5nIHZhbHVl
LiIpOwogCiAgICAgICAgIG5ld0ZpbGVMaXN0LmFwcGVuZChmaWxlbmFtZSk7CkBAIC0xMjk5LDcg
KzEyODgsNyBAQCBzdGF0aWMgUmVmPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6
QXV0b21hdGlvbjo6Q29va2llPj4gYnVpbGRBcnJheUZvcgogICAgIHJldHVybiBjb29raWVzOwog
fQogCi12b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpnZXRBbGxDb29raWVzKGNvbnN0IFN0cmlu
ZyYgYnJvd3NpbmdDb250ZXh0SGFuZGxlLCBSZWY8R2V0QWxsQ29va2llc0NhbGxiYWNrPiYmIGNh
bGxiYWNrKQordm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6Z2V0QWxsQ29va2llcyhjb25zdCBJ
bnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRIYW5kbGUmIGJy
b3dzaW5nQ29udGV4dEhhbmRsZSwgUmVmPEdldEFsbENvb2tpZXNDYWxsYmFjaz4mJiBjYWxsYmFj
aykKIHsKICAgICBXZWJQYWdlUHJveHkqIHBhZ2UgPSB3ZWJQYWdlUHJveHlGb3JIYW5kbGUoYnJv
d3NpbmdDb250ZXh0SGFuZGxlKTsKICAgICBpZiAoIXBhZ2UpCkBAIC0xMzE3LDcgKzEzMDYsNyBA
QCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpnZXRBbGxDb29raWVzKGNvbnN0IFN0cmluZyYg
YnJvd3NpbmdDb250ZXh0SGFuZGxlLCBSZQogICAgIHBhZ2UtPnByb2Nlc3MoKS5zZW5kV2l0aEFz
eW5jUmVwbHkoTWVzc2FnZXM6OldlYkF1dG9tYXRpb25TZXNzaW9uUHJveHk6OkdldENvb2tpZXNG
b3JGcmFtZShwYWdlLT53ZWJQYWdlSUQoKSwgV1RGOjpudWxsb3B0KSwgV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpOwogfQogCi12b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpkZWxldGVTaW5n
bGVDb29raWUoY29uc3QgU3RyaW5nJiBicm93c2luZ0NvbnRleHRIYW5kbGUsIGNvbnN0IFN0cmlu
ZyYgY29va2llTmFtZSwgUmVmPERlbGV0ZVNpbmdsZUNvb2tpZUNhbGxiYWNrPiYmIGNhbGxiYWNr
KQordm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6ZGVsZXRlU2luZ2xlQ29va2llKGNvbnN0IElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYgYnJv
d3NpbmdDb250ZXh0SGFuZGxlLCBjb25zdCBTdHJpbmcmIGNvb2tpZU5hbWUsIFJlZjxEZWxldGVT
aW5nbGVDb29raWVDYWxsYmFjaz4mJiBjYWxsYmFjaykKIHsKICAgICBXZWJQYWdlUHJveHkqIHBh
Z2UgPSB3ZWJQYWdlUHJveHlGb3JIYW5kbGUoYnJvd3NpbmdDb250ZXh0SGFuZGxlKTsKICAgICBp
ZiAoIXBhZ2UpCkBAIC0xMzQ3LDcgKzEzMzYsNyBAQCBzdGF0aWMgU3RyaW5nIGRvbWFpbkJ5QWRk
aW5nRG90UHJlZml4SWZOZWVkZWQoU3RyaW5nIGRvbWFpbikKICAgICByZXR1cm4gZG9tYWluOwog
fQogICAgIAotdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6YWRkU2luZ2xlQ29va2llKGNvbnN0
IFN0cmluZyYgYnJvd3NpbmdDb250ZXh0SGFuZGxlLCBjb25zdCBKU09OOjpPYmplY3QmIGNvb2tp
ZU9iamVjdCwgUmVmPEFkZFNpbmdsZUNvb2tpZUNhbGxiYWNrPiYmIGNhbGxiYWNrKQordm9pZCBX
ZWJBdXRvbWF0aW9uU2Vzc2lvbjo6YWRkU2luZ2xlQ29va2llKGNvbnN0IEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYgYnJvd3NpbmdDb250ZXh0
SGFuZGxlLCBSZWY8SlNPTjo6T2JqZWN0PiYmIGNvb2tpZU9iamVjdCwgUmVmPEFkZFNpbmdsZUNv
b2tpZUNhbGxiYWNrPiYmIGNhbGxiYWNrKQogewogICAgIFdlYlBhZ2VQcm94eSogcGFnZSA9IHdl
YlBhZ2VQcm94eUZvckhhbmRsZShicm93c2luZ0NvbnRleHRIYW5kbGUpOwogICAgIGlmICghcGFn
ZSkKQEAgLTEzNTgsMTQgKzEzNDcsMTYgQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6YWRk
U2luZ2xlQ29va2llKGNvbnN0IFN0cmluZyYgYnJvd3NpbmdDb250ZXh0SGFuZGxlLAogCiAgICAg
V2ViQ29yZTo6Q29va2llIGNvb2tpZTsKIAotICAgIGlmICghY29va2llT2JqZWN0LmdldFN0cmlu
ZygibmFtZSJfcywgY29va2llLm5hbWUpKQorICAgIGNvb2tpZS5uYW1lID0gY29va2llT2JqZWN0
LT5nZXRTdHJpbmcoIm5hbWUiX3MpOworICAgIGlmICghY29va2llLm5hbWUpCiAgICAgICAgIEFT
WU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxTKE1pc3NpbmdQYXJhbWV0
ZXIsICJUaGUgcGFyYW1ldGVyICduYW1lJyB3YXMgbm90IGZvdW5kLiIpOwogCi0gICAgaWYgKCFj
b29raWVPYmplY3QuZ2V0U3RyaW5nKCJ2YWx1ZSJfcywgY29va2llLnZhbHVlKSkKKyAgICBjb29r
aWUudmFsdWUgPSBjb29raWVPYmplY3QtPmdldFN0cmluZygidmFsdWUiX3MpOworICAgIGlmICgh
Y29va2llLnZhbHVlKQogICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUl9B
TkRfREVUQUlMUyhNaXNzaW5nUGFyYW1ldGVyLCAiVGhlIHBhcmFtZXRlciAndmFsdWUnIHdhcyBu
b3QgZm91bmQuIik7CiAKLSAgICBTdHJpbmcgZG9tYWluOwotICAgIGlmICghY29va2llT2JqZWN0
LmdldFN0cmluZygiZG9tYWluIl9zLCBkb21haW4pKQorICAgIGF1dG8gZG9tYWluID0gY29va2ll
T2JqZWN0LT5nZXRTdHJpbmcoImRvbWFpbiJfcyk7CisgICAgaWYgKCFkb21haW4pCiAgICAgICAg
IEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxTKE1pc3NpbmdQYXJh
bWV0ZXIsICJUaGUgcGFyYW1ldGVyICdkb21haW4nIHdhcyBub3QgZm91bmQuIik7CiAKICAgICAv
LyBJbmhlcml0IHRoZSBkb21haW4vaG9zdCBmcm9tIHRoZSBtYWluIGZyYW1lJ3MgVVJMIGlmIGl0
IGlzIG5vdCBleHBsaWNpdGx5IHNldC4KQEAgLTEzNzQsMzEgKzEzNjUsNDEgQEAgdm9pZCBXZWJB
dXRvbWF0aW9uU2Vzc2lvbjo6YWRkU2luZ2xlQ29va2llKGNvbnN0IFN0cmluZyYgYnJvd3NpbmdD
b250ZXh0SGFuZGxlLAogICAgIGVsc2UKICAgICAgICAgY29va2llLmRvbWFpbiA9IGRvbWFpbkJ5
QWRkaW5nRG90UHJlZml4SWZOZWVkZWQoZG9tYWluKTsKIAotICAgIGlmICghY29va2llT2JqZWN0
LmdldFN0cmluZygicGF0aCJfcywgY29va2llLnBhdGgpKQorICAgIGNvb2tpZS5wYXRoID0gY29v
a2llT2JqZWN0LT5nZXRTdHJpbmcoInBhdGgiX3MpOworICAgIGlmICghY29va2llLnBhdGgpCiAg
ICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxTKE1pc3Np
bmdQYXJhbWV0ZXIsICJUaGUgcGFyYW1ldGVyICdwYXRoJyB3YXMgbm90IGZvdW5kLiIpOwogCi0g
ICAgZG91YmxlIGV4cGlyZXM7Ci0gICAgaWYgKCFjb29raWVPYmplY3QuZ2V0RG91YmxlKCJleHBp
cmVzIl9zLCBleHBpcmVzKSkKKyAgICBhdXRvIGV4cGlyZXMgPSBjb29raWVPYmplY3QtPmdldERv
dWJsZSgiZXhwaXJlcyJfcyk7CisgICAgaWYgKCFleHBpcmVzKQogICAgICAgICBBU1lOQ19GQUlM
X1dJVEhfUFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhNaXNzaW5nUGFyYW1ldGVyLCAiVGhl
IHBhcmFtZXRlciAnZXhwaXJlcycgd2FzIG5vdCBmb3VuZC4iKTsKIAotICAgIGNvb2tpZS5leHBp
cmVzID0gZXhwaXJlcyAqIDEwMDAuMDsKKyAgICBjb29raWUuZXhwaXJlcyA9ICpleHBpcmVzICog
MTAwMC4wOwogCi0gICAgaWYgKCFjb29raWVPYmplY3QuZ2V0Qm9vbGVhbigic2VjdXJlIl9zLCBj
b29raWUuc2VjdXJlKSkKKyAgICBhdXRvIHNlY3VyZSA9IGNvb2tpZU9iamVjdC0+Z2V0Qm9vbGVh
bigic2VjdXJlIl9zKTsKKyAgICBpZiAoIXNlY3VyZSkKICAgICAgICAgQVNZTkNfRkFJTF9XSVRI
X1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoTWlzc2luZ1BhcmFtZXRlciwgIlRoZSBwYXJh
bWV0ZXIgJ3NlY3VyZScgd2FzIG5vdCBmb3VuZC4iKTsKIAotICAgIGlmICghY29va2llT2JqZWN0
LmdldEJvb2xlYW4oInNlc3Npb24iX3MsIGNvb2tpZS5zZXNzaW9uKSkKKyAgICBjb29raWUuc2Vj
dXJlID0gKnNlY3VyZTsKKworICAgIGF1dG8gc2Vzc2lvbiA9IGNvb2tpZU9iamVjdC0+Z2V0Qm9v
bGVhbigic2Vzc2lvbiJfcyk7CisgICAgaWYgKCFzZXNzaW9uKQogICAgICAgICBBU1lOQ19GQUlM
X1dJVEhfUFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhNaXNzaW5nUGFyYW1ldGVyLCAiVGhl
IHBhcmFtZXRlciAnc2Vzc2lvbicgd2FzIG5vdCBmb3VuZC4iKTsKIAotICAgIGlmICghY29va2ll
T2JqZWN0LmdldEJvb2xlYW4oImh0dHBPbmx5Il9zLCBjb29raWUuaHR0cE9ubHkpKQorICAgIGNv
b2tpZS5zZXNzaW9uID0gKnNlc3Npb247CisKKyAgICBhdXRvIGh0dHBPbmx5ID0gY29va2llT2Jq
ZWN0LT5nZXRCb29sZWFuKCJodHRwT25seSJfcyk7CisgICAgaWYgKCFodHRwT25seSkKICAgICAg
ICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoTWlzc2luZ1Bh
cmFtZXRlciwgIlRoZSBwYXJhbWV0ZXIgJ2h0dHBPbmx5JyB3YXMgbm90IGZvdW5kLiIpOwogCisg
ICAgY29va2llLmh0dHBPbmx5ID0gKmh0dHBPbmx5OworCiAgICAgV2ViQ29va2llTWFuYWdlclBy
b3h5KiBjb29raWVNYW5hZ2VyID0gbV9wcm9jZXNzUG9vbC0+c3VwcGxlbWVudDxXZWJDb29raWVN
YW5hZ2VyUHJveHk+KCk7CiAgICAgY29va2llTWFuYWdlci0+c2V0Q29va2llcyhwYWdlLT53ZWJz
aXRlRGF0YVN0b3JlKCkuc2Vzc2lvbklEKCksIHsgY29va2llIH0sIFtjYWxsYmFja10oKSB7CiAg
ICAgICAgIGNhbGxiYWNrLT5zZW5kU3VjY2VzcygpOwogICAgIH0pOwogfQogCi12b2lkIFdlYkF1
dG9tYXRpb25TZXNzaW9uOjpkZWxldGVBbGxDb29raWVzKEVycm9yU3RyaW5nJiBlcnJvclN0cmlu
ZywgY29uc3QgU3RyaW5nJiBicm93c2luZ0NvbnRleHRIYW5kbGUpCitJbnNwZWN0b3I6OlByb3Rv
Y29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IFdlYkF1dG9tYXRpb25TZXNzaW9uOjpkZWxldGVBbGxD
b29raWVzKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29u
dGV4dEhhbmRsZSYgYnJvd3NpbmdDb250ZXh0SGFuZGxlKQogewogICAgIFdlYlBhZ2VQcm94eSog
cGFnZSA9IHdlYlBhZ2VQcm94eUZvckhhbmRsZShicm93c2luZ0NvbnRleHRIYW5kbGUpOwogICAg
IGlmICghcGFnZSkKQEAgLTE0MTEsOSArMTQxMiwxMSBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNz
aW9uOjpkZWxldGVBbGxDb29raWVzKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3Ry
aQogCiAgICAgV2ViQ29va2llTWFuYWdlclByb3h5KiBjb29raWVNYW5hZ2VyID0gbV9wcm9jZXNz
UG9vbC0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7CiAgICAgY29va2llTWFu
YWdlci0+ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lcyhwYWdlLT53ZWJzaXRlRGF0YVN0b3JlKCku
c2Vzc2lvbklEKCksIHsgaG9zdCwgZG9tYWluQnlBZGRpbmdEb3RQcmVmaXhJZk5lZWRlZChob3N0
KSB9KTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246
OmdldFNlc3Npb25QZXJtaXNzaW9ucyhFcnJvclN0cmluZyYsIFJlZlB0cjxKU09OOjpBcnJheU9m
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OlNlc3Npb25QZXJtaXNzaW9uRGF0YT4+
JiBvdXRfcGVybWlzc2lvbnMpCitJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFJl
ZjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OlNlc3Npb25Q
ZXJtaXNzaW9uRGF0YT4+PiBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6Z2V0U2Vzc2lvblBlcm1pc3Np
b25zKCkKIHsKICAgICBhdXRvIHBlcm1pc3Npb25zT2JqZWN0QXJyYXkgPSBKU09OOjpBcnJheU9m
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OlNlc3Npb25QZXJtaXNzaW9uRGF0YT46
OmNyZWF0ZSgpOwogICAgIGF1dG8gZ2V0VXNlck1lZGlhUGVybWlzc2lvbk9iamVjdCA9IEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OlNlc3Npb25QZXJtaXNzaW9uRGF0YTo6Y3JlYXRl
KCkKQEAgLTE0MjIsMzQgKzE0MjUsMzYgQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6Z2V0
U2Vzc2lvblBlcm1pc3Npb25zKEVycm9yU3RyaW5nJiwgUmVmUHRyPEpTT046OkFycmEKICAgICAg
ICAgLnJlbGVhc2UoKTsKIAogICAgIHBlcm1pc3Npb25zT2JqZWN0QXJyYXktPmFkZEl0ZW0oV1RG
TW92ZShnZXRVc2VyTWVkaWFQZXJtaXNzaW9uT2JqZWN0KSk7Ci0gICAgb3V0X3Blcm1pc3Npb25z
ID0gV1RGTW92ZShwZXJtaXNzaW9uc09iamVjdEFycmF5KTsKKyAgICByZXR1cm4gV1RGTW92ZShw
ZXJtaXNzaW9uc09iamVjdEFycmF5KTsKIH0KIAotdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6
c2V0U2Vzc2lvblBlcm1pc3Npb25zKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgSlNP
Tjo6QXJyYXkmIHBlcm1pc3Npb25zKQorSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdP
cjx2b2lkPiBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6c2V0U2Vzc2lvblBlcm1pc3Npb25zKFJlZjxK
U09OOjpBcnJheT4mJiBwZXJtaXNzaW9ucykKIHsKLSAgICBmb3IgKGF1dG8gaXQgPSBwZXJtaXNz
aW9ucy5iZWdpbigpOyBpdCAhPSBwZXJtaXNzaW9ucy5lbmQoKTsgKytpdCkgewotICAgICAgICBS
ZWZQdHI8SlNPTjo6T2JqZWN0PiBwZXJtaXNzaW9uOwotICAgICAgICBpZiAoIWl0LT5nZXQoKS0+
YXNPYmplY3QocGVybWlzc2lvbikpCisgICAgZm9yIChhdXRvIGl0ID0gcGVybWlzc2lvbnMtPmJl
Z2luKCk7IGl0ICE9IHBlcm1pc3Npb25zLT5lbmQoKTsgKytpdCkgeworICAgICAgICBhdXRvIHBl
cm1pc3Npb24gPSBpdC0+Z2V0KCkuYXNPYmplY3QoKTsKKyAgICAgICAgaWYgKCFwZXJtaXNzaW9u
KQogICAgICAgICAgICAgU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlM
UyhJbnZhbGlkUGFyYW1ldGVyLCAiVGhlIHBhcmFtZXRlciAncGVybWlzc2lvbnMnIGlzIGludmFs
aWQuIik7CiAKLSAgICAgICAgU3RyaW5nIHBlcm1pc3Npb25OYW1lOwotICAgICAgICBpZiAoIXBl
cm1pc3Npb24tPmdldFN0cmluZygicGVybWlzc2lvbiJfcywgcGVybWlzc2lvbk5hbWUpKQorICAg
ICAgICBhdXRvIHBlcm1pc3Npb25OYW1lID0gcGVybWlzc2lvbi0+Z2V0U3RyaW5nKCJwZXJtaXNz
aW9uIl9zKTsKKyAgICAgICAgaWYgKCFwZXJtaXNzaW9uTmFtZSkKICAgICAgICAgICAgIFNZTkNf
RkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoSW52YWxpZFBhcmFtZXRlciwg
IlRoZSBwYXJhbWV0ZXIgJ3Blcm1pc3Npb24nIGlzIG1pc3Npbmcgb3IgaW52YWxpZC4iKTsKIAog
ICAgICAgICBhdXRvIHBhcnNlZFBlcm1pc3Npb25OYW1lID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6
QXV0b21hdGlvbkhlbHBlcnM6OnBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlBy
b3RvY29sOjpBdXRvbWF0aW9uOjpTZXNzaW9uUGVybWlzc2lvbj4ocGVybWlzc2lvbk5hbWUpOwog
ICAgICAgICBpZiAoIXBhcnNlZFBlcm1pc3Npb25OYW1lKQogICAgICAgICAgICAgU1lOQ19GQUlM
X1dJVEhfUFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhJbnZhbGlkUGFyYW1ldGVyLCAiVGhl
IHBhcmFtZXRlciAncGVybWlzc2lvbicgaGFzIGFuIHVua25vd24gdmFsdWUuIik7CiAKLSAgICAg
ICAgYm9vbCBwZXJtaXNzaW9uVmFsdWU7Ci0gICAgICAgIGlmICghcGVybWlzc2lvbi0+Z2V0Qm9v
bGVhbigidmFsdWUiX3MsIHBlcm1pc3Npb25WYWx1ZSkpCisgICAgICAgIGF1dG8gcGVybWlzc2lv
blZhbHVlID0gcGVybWlzc2lvbi0+Z2V0Qm9vbGVhbigidmFsdWUiX3MpOworICAgICAgICBpZiAo
IXBlcm1pc3Npb25WYWx1ZSkKICAgICAgICAgICAgIFNZTkNfRkFJTF9XSVRIX1BSRURFRklORURf
RVJST1JfQU5EX0RFVEFJTFMoSW52YWxpZFBhcmFtZXRlciwgIlRoZSBwYXJhbWV0ZXIgJ3ZhbHVl
JyBpcyBtaXNzaW5nIG9yIGludmFsaWQuIik7CiAKICAgICAgICAgc3dpdGNoIChwYXJzZWRQZXJt
aXNzaW9uTmFtZS52YWx1ZSgpKSB7CiAgICAgICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6
QXV0b21hdGlvbjo6U2Vzc2lvblBlcm1pc3Npb246OkdldFVzZXJNZWRpYToKLSAgICAgICAgICAg
IG1fcGVybWlzc2lvbkZvckdldFVzZXJNZWRpYSA9IHBlcm1pc3Npb25WYWx1ZTsKKyAgICAgICAg
ICAgIG1fcGVybWlzc2lvbkZvckdldFVzZXJNZWRpYSA9ICpwZXJtaXNzaW9uVmFsdWU7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KKworICAgIHJldHVybiB7IH07CiB9CiAK
IGJvb2wgV2ViQXV0b21hdGlvblNlc3Npb246OnNob3VsZEFsbG93R2V0VXNlck1lZGlhRm9yUGFn
ZShjb25zdCBXZWJQYWdlUHJveHkmKSBjb25zdApAQCAtMTQ5NCw3ICsxNDk5LDcgQEAgU2ltdWxh
dGVkSW5wdXRTb3VyY2UqIFdlYkF1dG9tYXRpb25TZXNzaW9uOjppbnB1dFNvdXJjZUZvclR5cGUo
U2ltdWxhdGVkSW5wdXRTb3UKIH0KIAogLy8gTUFSSzogU2ltdWxhdGVkSW5wdXREaXNwYXRjaGVy
OjpDbGllbnQgQVBJCi12b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjp2aWV3cG9ydEluVmlld0Nl
bnRlclBvaW50T2ZFbGVtZW50KFdlYlBhZ2VQcm94eSYgcGFnZSwgT3B0aW9uYWw8RnJhbWVJZGVu
dGlmaWVyPiBmcmFtZUlELCBjb25zdCBTdHJpbmcmIG5vZGVIYW5kbGUsIEZ1bmN0aW9uPHZvaWQg
KE9wdGlvbmFsPFdlYkNvcmU6OkludFBvaW50PiwgT3B0aW9uYWw8QXV0b21hdGlvbkNvbW1hbmRF
cnJvcj4pPiYmIGNvbXBsZXRpb25IYW5kbGVyKQordm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6
dmlld3BvcnRJblZpZXdDZW50ZXJQb2ludE9mRWxlbWVudChXZWJQYWdlUHJveHkmIHBhZ2UsIE9w
dGlvbmFsPEZyYW1lSWRlbnRpZmllcj4gZnJhbWVJRCwgY29uc3QgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6QXV0b21hdGlvbjo6Tm9kZUhhbmRsZSYgbm9kZUhhbmRsZSwgRnVuY3Rpb248dm9pZChPcHRp
b25hbDxXZWJDb3JlOjpJbnRQb2ludD4sIE9wdGlvbmFsPEF1dG9tYXRpb25Db21tYW5kRXJyb3I+
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBXVEY6OkNvbXBsZXRpb25IYW5kbGVyPHZv
aWQoT3B0aW9uYWw8U3RyaW5nPiwgV2ViQ29yZTo6SW50UmVjdCwgT3B0aW9uYWw8V2ViQ29yZTo6
SW50UG9pbnQ+LCBib29sKT4gZGlkQ29tcHV0ZUVsZW1lbnRMYXlvdXRIYW5kbGVyID0gW2NvbXBs
ZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKE9wdGlvbmFsPFN0cmlu
Zz4gZXJyb3JUeXBlLCBXZWJDb3JlOjpJbnRSZWN0LCBPcHRpb25hbDxXZWJDb3JlOjpJbnRQb2lu
dD4gaW5WaWV3Q2VudGVyUG9pbnQsIGJvb2wpIG11dGFibGUgewogICAgICAgICBpZiAoZXJyb3JU
eXBlKSB7CkBAIC0xNjM1LDcgKzE2NDAsNyBAQCBzdGF0aWMgV2ViRXZlbnQ6Ok1vZGlmaWVyIHBy
b3RvY29sTW9kaWZpZXJUb1dlYkV2ZW50TW9kaWZpZXIoSW5zcGVjdG9yOjpQcm90b2NvbAogfQog
I2VuZGlmIC8vIEVOQUJMRShXRUJEUklWRVJfTU9VU0VfSU5URVJBQ1RJT05TKQogCi12b2lkIFdl
YkF1dG9tYXRpb25TZXNzaW9uOjpwZXJmb3JtTW91c2VJbnRlcmFjdGlvbihjb25zdCBTdHJpbmcm
IGhhbmRsZSwgY29uc3QgSlNPTjo6T2JqZWN0JiByZXF1ZXN0ZWRQb3NpdGlvbk9iamVjdCwgY29u
c3QgU3RyaW5nJiBtb3VzZUJ1dHRvblN0cmluZywgY29uc3QgU3RyaW5nJiBtb3VzZUludGVyYWN0
aW9uU3RyaW5nLCBjb25zdCBKU09OOjpBcnJheSYga2V5TW9kaWZpZXJTdHJpbmdzLCBSZWY8UGVy
Zm9ybU1vdXNlSW50ZXJhY3Rpb25DYWxsYmFjaz4mJiBjYWxsYmFjaykKK3ZvaWQgV2ViQXV0b21h
dGlvblNlc3Npb246OnBlcmZvcm1Nb3VzZUludGVyYWN0aW9uKGNvbnN0IEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYgaGFuZGxlLCBSZWY8SlNP
Tjo6T2JqZWN0PiYmIHJlcXVlc3RlZFBvc2l0aW9uLCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRv
bWF0aW9uOjpNb3VzZUJ1dHRvbiBtb3VzZUJ1dHRvbiwgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0
b21hdGlvbjo6TW91c2VJbnRlcmFjdGlvbiBtb3VzZUludGVyYWN0aW9uLCBSZWY8SlNPTjo6QXJy
YXk+JiYga2V5TW9kaWZpZXJTdHJpbmdzLCBSZWY8UGVyZm9ybU1vdXNlSW50ZXJhY3Rpb25DYWxs
YmFjaz4mJiBjYWxsYmFjaykKIHsKICNpZiAhRU5BQkxFKFdFQkRSSVZFUl9NT1VTRV9JTlRFUkFD
VElPTlMpCiAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1IoTm90SW1wbGVtZW50
ZWQpOwpAQCAtMTY0NCw0OCArMTY0OSw0NCBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpw
ZXJmb3JtTW91c2VJbnRlcmFjdGlvbihjb25zdCBTdHJpbmcmIGhhbmRsZSwgY29uc3QgSgogICAg
IGlmICghcGFnZSkKICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1IoV2lu
ZG93Tm90Rm91bmQpOwogCi0gICAgZmxvYXQgeDsKLSAgICBpZiAoIXJlcXVlc3RlZFBvc2l0aW9u
T2JqZWN0LmdldERvdWJsZSgieCJfcywgeCkpCisgICAgYXV0byB4ID0gcmVxdWVzdGVkUG9zaXRp
b24tPmdldERvdWJsZSgieCJfcyk7CisgICAgaWYgKCF4KQogICAgICAgICBBU1lOQ19GQUlMX1dJ
VEhfUFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhNaXNzaW5nUGFyYW1ldGVyLCAiVGhlIHBh
cmFtZXRlciAneCcgd2FzIG5vdCBmb3VuZC4iKTsKIAotICAgIGZsb2F0IHk7Ci0gICAgaWYgKCFy
ZXF1ZXN0ZWRQb3NpdGlvbk9iamVjdC5nZXREb3VibGUoInkiX3MsIHkpKQorICAgIGF1dG8gZmxv
YXRYID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KCp4KTsKKworICAgIGF1dG8geSA9IHJlcXVlc3RlZFBv
c2l0aW9uLT5nZXREb3VibGUoInkiX3MpOworICAgIGlmICgheSkKICAgICAgICAgQVNZTkNfRkFJ
TF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoTWlzc2luZ1BhcmFtZXRlciwgIlRo
ZSBwYXJhbWV0ZXIgJ3knIHdhcyBub3QgZm91bmQuIik7CiAKKyAgICBhdXRvIGZsb2F0WSA9IHN0
YXRpY19jYXN0PGZsb2F0PigqeSk7CisKICAgICBPcHRpb25TZXQ8V2ViRXZlbnQ6Ok1vZGlmaWVy
PiBrZXlNb2RpZmllcnM7Ci0gICAgZm9yIChhdXRvIGl0ID0ga2V5TW9kaWZpZXJTdHJpbmdzLmJl
Z2luKCk7IGl0ICE9IGtleU1vZGlmaWVyU3RyaW5ncy5lbmQoKTsgKytpdCkgewotICAgICAgICBT
dHJpbmcgbW9kaWZpZXJTdHJpbmc7Ci0gICAgICAgIGlmICghaXQtPmdldCgpLT5hc1N0cmluZyht
b2RpZmllclN0cmluZykpCisgICAgZm9yIChhdXRvIGl0ID0ga2V5TW9kaWZpZXJTdHJpbmdzLT5i
ZWdpbigpOyBpdCAhPSBrZXlNb2RpZmllclN0cmluZ3MtPmVuZCgpOyArK2l0KSB7CisgICAgICAg
IGF1dG8gbW9kaWZpZXJTdHJpbmcgPSBpdC0+Z2V0KCkuYXNTdHJpbmcoKTsKKyAgICAgICAgaWYg
KCFtb2RpZmllclN0cmluZykKICAgICAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVE
X0VSUk9SX0FORF9ERVRBSUxTKEludmFsaWRQYXJhbWV0ZXIsICJUaGUgcGFyYW1ldGVyICdtb2Rp
ZmllcnMnIGlzIGludmFsaWQuIik7CiAKICAgICAgICAgYXV0byBwYXJzZWRNb2RpZmllciA9IElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb25IZWxwZXJzOjpwYXJzZUVudW1WYWx1ZUZyb21T
dHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6S2V5TW9kaWZpZXI+KG1vZGlm
aWVyU3RyaW5nKTsKICAgICAgICAgaWYgKCFwYXJzZWRNb2RpZmllcikKICAgICAgICAgICAgIEFT
WU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxTKEludmFsaWRQYXJhbWV0
ZXIsICJBIG1vZGlmaWVyIGluIHRoZSAnbW9kaWZpZXJzJyBhcnJheSBpcyBpbnZhbGlkLiIpOwor
CiAgICAgICAgIGtleU1vZGlmaWVycy5hZGQocHJvdG9jb2xNb2RpZmllclRvV2ViRXZlbnRNb2Rp
ZmllcihwYXJzZWRNb2RpZmllci52YWx1ZSgpKSk7CiAgICAgfQogCi0gICAgcGFnZS0+Z2V0V2lu
ZG93RnJhbWVXaXRoQ2FsbGJhY2soW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlz
KSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgcGFnZSA9IG1ha2VSZWYoKnBhZ2UpLCB4
LCB5LCBtb3VzZUludGVyYWN0aW9uU3RyaW5nLCBtb3VzZUJ1dHRvblN0cmluZywga2V5TW9kaWZp
ZXJzXShXZWJDb3JlOjpGbG9hdFJlY3Qgd2luZG93RnJhbWUpIG11dGFibGUgeworICAgIHBhZ2Ut
PmdldFdpbmRvd0ZyYW1lV2l0aENhbGxiYWNrKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJl
ZigqdGhpcyksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIHBhZ2UgPSBtYWtlUmVmKCpw
YWdlKSwgZmxvYXRYLCBmbG9hdFksIG1vdXNlSW50ZXJhY3Rpb24sIG1vdXNlQnV0dG9uLCBrZXlN
b2RpZmllcnNdKFdlYkNvcmU6OkZsb2F0UmVjdCB3aW5kb3dGcmFtZSkgbXV0YWJsZSB7CisgICAg
ICAgIGZsb2F0WCA9IHN0ZDo6bWluKHN0ZDo6bWF4KDAuMGYsIGZsb2F0WCksIHdpbmRvd0ZyYW1l
LnNpemUoKS53aWR0aCgpKTsKKyAgICAgICAgZmxvYXRZID0gc3RkOjptaW4oc3RkOjptYXgoMC4w
ZiwgZmxvYXRZKSwgd2luZG93RnJhbWUuc2l6ZSgpLmhlaWdodCgpKTsKIAotICAgICAgICB4ID0g
c3RkOjptaW4oc3RkOjptYXgoMC4wZiwgeCksIHdpbmRvd0ZyYW1lLnNpemUoKS53aWR0aCgpKTsK
LSAgICAgICAgeSA9IHN0ZDo6bWluKHN0ZDo6bWF4KDAuMGYsIHkpLCB3aW5kb3dGcmFtZS5zaXpl
KCkuaGVpZ2h0KCkpOworICAgICAgICBXZWJDb3JlOjpJbnRQb2ludCBsb2NhdGlvbkluVmlld3Bv
cnQgPSBXZWJDb3JlOjpJbnRQb2ludChzdGF0aWNfY2FzdDxpbnQ+KGZsb2F0WCksIHN0YXRpY19j
YXN0PGludD4oZmxvYXRZKSk7CiAKLSAgICAgICAgV2ViQ29yZTo6SW50UG9pbnQgbG9jYXRpb25J
blZpZXdwb3J0ID0gV2ViQ29yZTo6SW50UG9pbnQoc3RhdGljX2Nhc3Q8aW50Pih4KSwgc3RhdGlj
X2Nhc3Q8aW50Pih5KSk7Ci0KLSAgICAgICAgYXV0byBwYXJzZWRJbnRlcmFjdGlvbiA9IEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb25IZWxwZXJzOjpwYXJzZUVudW1WYWx1ZUZyb21TdHJp
bmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6TW91c2VJbnRlcmFjdGlvbj4obW91
c2VJbnRlcmFjdGlvblN0cmluZyk7Ci0gICAgICAgIGlmICghcGFyc2VkSW50ZXJhY3Rpb24pCi0g
ICAgICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhJ
bnZhbGlkUGFyYW1ldGVyLCAiVGhlIHBhcmFtZXRlciAnaW50ZXJhY3Rpb24nIGlzIGludmFsaWQu
Iik7Ci0KLSAgICAgICAgYXV0byBwYXJzZWRCdXR0b24gPSBJbnNwZWN0b3I6OlByb3RvY29sOjpB
dXRvbWF0aW9uSGVscGVyczo6cGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkF1dG9tYXRpb246Ok1vdXNlQnV0dG9uPihtb3VzZUJ1dHRvblN0cmluZyk7Ci0gICAg
ICAgIGlmICghcGFyc2VkQnV0dG9uKQotICAgICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURF
RklORURfRVJST1JfQU5EX0RFVEFJTFMoSW52YWxpZFBhcmFtZXRlciwgIlRoZSBwYXJhbWV0ZXIg
J2J1dHRvbicgaXMgaW52YWxpZC4iKTsKLQotICAgICAgICBhdXRvIG1vdXNlRXZlbnRzRmx1c2hl
ZENhbGxiYWNrID0gW3Byb3RlY3RlZFRoaXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRoaXMpLCBjYWxs
YmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBwYWdlLCB4LCB5XShPcHRpb25hbDxBdXRvbWF0aW9u
Q29tbWFuZEVycm9yPiBlcnJvcikgeworICAgICAgICBhdXRvIG1vdXNlRXZlbnRzRmx1c2hlZENh
bGxiYWNrID0gW3Byb3RlY3RlZFRoaXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRoaXMpLCBjYWxsYmFj
ayA9IFdURk1vdmUoY2FsbGJhY2spLCBwYWdlLCBmbG9hdFgsIGZsb2F0WV0oT3B0aW9uYWw8QXV0
b21hdGlvbkNvbW1hbmRFcnJvcj4gZXJyb3IpIHsKICAgICAgICAgICAgIGlmIChlcnJvcikKICAg
ICAgICAgICAgICAgICBjYWxsYmFjay0+c2VuZEZhaWx1cmUoZXJyb3IudmFsdWUoKS50b1Byb3Rv
Y29sU3RyaW5nKCkpOwogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgY2FsbGJh
Y2stPnNlbmRTdWNjZXNzKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OlBvaW50Ojpj
cmVhdGUoKQotICAgICAgICAgICAgICAgICAgICAuc2V0WCh4KQotICAgICAgICAgICAgICAgICAg
ICAuc2V0WSh5IC0gcGFnZS0+dG9wQ29udGVudEluc2V0KCkpCisgICAgICAgICAgICAgICAgICAg
IC5zZXRYKGZsb2F0WCkKKyAgICAgICAgICAgICAgICAgICAgLnNldFkoZmxvYXRZIC0gcGFnZS0+
dG9wQ29udGVudEluc2V0KCkpCiAgICAgICAgICAgICAgICAgICAgIC5yZWxlYXNlKCkpOwogICAg
ICAgICAgICAgfQogICAgICAgICB9OwpAQCAtMTY5NSw3ICsxNjk2LDcgQEAgdm9pZCBXZWJBdXRv
bWF0aW9uU2Vzc2lvbjo6cGVyZm9ybU1vdXNlSW50ZXJhY3Rpb24oY29uc3QgU3RyaW5nJiBoYW5k
bGUsIGNvbnN0IEoKICAgICAgICAgICAgIGNhbGxiYWNrSW5NYXAoQVVUT01BVElPTl9DT01NQU5E
X0VSUk9SX1dJVEhfTkFNRShUaW1lb3V0KSk7CiAgICAgICAgIGNhbGxiYWNrSW5NYXAgPSBXVEZN
b3ZlKG1vdXNlRXZlbnRzRmx1c2hlZENhbGxiYWNrKTsKIAotICAgICAgICBwbGF0Zm9ybVNpbXVs
YXRlTW91c2VJbnRlcmFjdGlvbihwYWdlLCBwYXJzZWRJbnRlcmFjdGlvbi52YWx1ZSgpLCBwYXJz
ZWRCdXR0b24udmFsdWUoKSwgbG9jYXRpb25JblZpZXdwb3J0LCBrZXlNb2RpZmllcnMpOworICAg
ICAgICBwbGF0Zm9ybVNpbXVsYXRlTW91c2VJbnRlcmFjdGlvbihwYWdlLCBtb3VzZUludGVyYWN0
aW9uLCBtb3VzZUJ1dHRvbiwgbG9jYXRpb25JblZpZXdwb3J0LCBrZXlNb2RpZmllcnMpOwogCiAg
ICAgICAgIC8vIElmIHRoZSBldmVudCBsb2NhdGlvbiB3YXMgcHJldmlvdXNseSBjbGlwcGVkIGFu
ZCBkb2VzIG5vdCBoaXQgdGVzdCBhbnl0aGluZyBpbiB0aGUgd2luZG93LCB0aGVuIGl0IHdpbGwg
bm90IGJlIHByb2Nlc3NlZC4KICAgICAgICAgLy8gRm9yIGNvbXBhdGliaWxpdHkgd2l0aCBwcmUt
VzNDIGRyaXZlciBpbXBsZW1lbnRhdGlvbnMsIGRvbid0IG1ha2UgdGhpcyBhIGhhcmQgZXJyb3I7
IGp1c3QgZG8gbm90aGluZyBzaWxlbnRseS4KQEAgLTE3MDgsNyArMTcwOSw3IEBAIHZvaWQgV2Vi
QXV0b21hdGlvblNlc3Npb246OnBlcmZvcm1Nb3VzZUludGVyYWN0aW9uKGNvbnN0IFN0cmluZyYg
aGFuZGxlLCBjb25zdCBKCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkRSSVZFUl9NT1VTRV9JTlRFUkFD
VElPTlMpCiB9CiAKLXZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OnBlcmZvcm1LZXlib2FyZElu
dGVyYWN0aW9ucyhjb25zdCBTdHJpbmcmIGhhbmRsZSwgY29uc3QgSlNPTjo6QXJyYXkmIGludGVy
YWN0aW9ucywgUmVmPFBlcmZvcm1LZXlib2FyZEludGVyYWN0aW9uc0NhbGxiYWNrPiYmIGNhbGxi
YWNrKQordm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6cGVyZm9ybUtleWJvYXJkSW50ZXJhY3Rp
b25zKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4
dEhhbmRsZSYgaGFuZGxlLCBSZWY8SlNPTjo6QXJyYXk+JiYgaW50ZXJhY3Rpb25zLCBSZWY8UGVy
Zm9ybUtleWJvYXJkSW50ZXJhY3Rpb25zQ2FsbGJhY2s+JiYgY2FsbGJhY2spCiB7CiAjaWYgIUVO
QUJMRShXRUJEUklWRVJfS0VZQk9BUkRfSU5URVJBQ1RJT05TKQogICAgIEFTWU5DX0ZBSUxfV0lU
SF9QUkVERUZJTkVEX0VSUk9SKE5vdEltcGxlbWVudGVkKTsKQEAgLTE3MTcsMjggKzE3MTgsMjcg
QEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6cGVyZm9ybUtleWJvYXJkSW50ZXJhY3Rpb25z
KGNvbnN0IFN0cmluZyYgaGFuZGxlLCBjb24KICAgICBpZiAoIXBhZ2UpCiAgICAgICAgIEFTWU5D
X0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SKFdpbmRvd05vdEZvdW5kKTsKIAotICAgIGlmICgh
aW50ZXJhY3Rpb25zLmxlbmd0aCgpKQorICAgIGlmICghaW50ZXJhY3Rpb25zLT5sZW5ndGgoKSkK
ICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoSW52
YWxpZFBhcmFtZXRlciwgIlRoZSBwYXJhbWV0ZXIgJ2ludGVyYWN0aW9ucycgd2FzIG5vdCBmb3Vu
ZCBvciBlbXB0eS4iKTsKIAogICAgIC8vIFZhbGlkYXRlIGFsbCBvZiB0aGUgcGFyYW1ldGVycyBi
ZWZvcmUgcGVyZm9ybWluZyBhbnkgaW50ZXJhY3Rpb25zIHdpdGggdGhlIGJyb3dzaW5nIGNvbnRl
eHQgdW5kZXIgdGVzdC4KICAgICBWZWN0b3I8V1RGOjpGdW5jdGlvbjx2b2lkKCk+PiBhY3Rpb25z
VG9QZXJmb3JtOwotICAgIGFjdGlvbnNUb1BlcmZvcm0ucmVzZXJ2ZUNhcGFjaXR5KGludGVyYWN0
aW9ucy5sZW5ndGgoKSk7CisgICAgYWN0aW9uc1RvUGVyZm9ybS5yZXNlcnZlQ2FwYWNpdHkoaW50
ZXJhY3Rpb25zLT5sZW5ndGgoKSk7CiAKLSAgICBmb3IgKGNvbnN0IGF1dG8mIGludGVyYWN0aW9u
IDogaW50ZXJhY3Rpb25zKSB7Ci0gICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IGludGVyYWN0
aW9uT2JqZWN0OwotICAgICAgICBpZiAoIWludGVyYWN0aW9uLT5hc09iamVjdChpbnRlcmFjdGlv
bk9iamVjdCkpCisgICAgZm9yIChjb25zdCBhdXRvJiBpbnRlcmFjdGlvblZhbHVlIDogaW50ZXJh
Y3Rpb25zLmdldCgpKSB7CisgICAgICAgIGF1dG8gaW50ZXJhY3Rpb25PYmplY3QgPSBpbnRlcmFj
dGlvblZhbHVlLT5hc09iamVjdCgpOworICAgICAgICBpZiAoIWludGVyYWN0aW9uT2JqZWN0KQog
ICAgICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMo
SW52YWxpZFBhcmFtZXRlciwgIkFuIGludGVyYWN0aW9uIGluIHRoZSAnaW50ZXJhY3Rpb25zJyBw
YXJhbWV0ZXIgd2FzIGludmFsaWQuIik7CiAKLSAgICAgICAgU3RyaW5nIGludGVyYWN0aW9uVHlw
ZVN0cmluZzsKLSAgICAgICAgaWYgKCFpbnRlcmFjdGlvbk9iamVjdC0+Z2V0U3RyaW5nKCJ0eXBl
Il9zLCBpbnRlcmFjdGlvblR5cGVTdHJpbmcpKQorICAgICAgICBhdXRvIGludGVyYWN0aW9uVHlw
ZVN0cmluZyA9IGludGVyYWN0aW9uT2JqZWN0LT5nZXRTdHJpbmcoInR5cGUiX3MpOworICAgICAg
ICBpZiAoIWludGVyYWN0aW9uVHlwZVN0cmluZykKICAgICAgICAgICAgIEFTWU5DX0ZBSUxfV0lU
SF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxTKEludmFsaWRQYXJhbWV0ZXIsICJBbiBpbnRl
cmFjdGlvbiBpbiB0aGUgJ2ludGVyYWN0aW9ucycgcGFyYW1ldGVyIGlzIG1pc3NpbmcgdGhlICd0
eXBlJyBrZXkuIik7CiAgICAgICAgIGF1dG8gaW50ZXJhY3Rpb25UeXBlID0gSW5zcGVjdG9yOjpQ
cm90b2NvbDo6QXV0b21hdGlvbkhlbHBlcnM6OnBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNw
ZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpLZXlib2FyZEludGVyYWN0aW9uVHlwZT4oaW50
ZXJhY3Rpb25UeXBlU3RyaW5nKTsKICAgICAgICAgaWYgKCFpbnRlcmFjdGlvblR5cGUpCiAgICAg
ICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhJbnZh
bGlkUGFyYW1ldGVyLCAiQW4gaW50ZXJhY3Rpb24gaW4gdGhlICdpbnRlcmFjdGlvbnMnIHBhcmFt
ZXRlciBoYXMgYW4gaW52YWxpZCAndHlwZScga2V5LiIpOwogCi0gICAgICAgIFN0cmluZyB2aXJ0
dWFsS2V5U3RyaW5nOwotICAgICAgICBib29sIGZvdW5kVmlydHVhbEtleSA9IGludGVyYWN0aW9u
T2JqZWN0LT5nZXRTdHJpbmcoImtleSJfcywgdmlydHVhbEtleVN0cmluZyk7Ci0gICAgICAgIGlm
IChmb3VuZFZpcnR1YWxLZXkpIHsKKyAgICAgICAgYXV0byB2aXJ0dWFsS2V5U3RyaW5nID0gaW50
ZXJhY3Rpb25PYmplY3QtPmdldFN0cmluZygia2V5Il9zKTsKKyAgICAgICAgaWYgKCEhdmlydHVh
bEtleVN0cmluZykgewogICAgICAgICAgICAgT3B0aW9uYWw8VmlydHVhbEtleT4gdmlydHVhbEtl
eSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb25IZWxwZXJzOjpwYXJzZUVudW1WYWx1
ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6VmlydHVhbEtleT4o
dmlydHVhbEtleVN0cmluZyk7CiAgICAgICAgICAgICBpZiAoIXZpcnR1YWxLZXkpCiAgICAgICAg
ICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoSW52
YWxpZFBhcmFtZXRlciwgIkFuIGludGVyYWN0aW9uIGluIHRoZSAnaW50ZXJhY3Rpb25zJyBwYXJh
bWV0ZXIgaGFzIGFuIGludmFsaWQgJ2tleScgdmFsdWUuIik7CkBAIC0xNzQ4LDkgKzE3NDgsOCBA
QCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpwZXJmb3JtS2V5Ym9hcmRJbnRlcmFjdGlvbnMo
Y29uc3QgU3RyaW5nJiBoYW5kbGUsIGNvbgogICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KIAot
ICAgICAgICBTdHJpbmcga2V5U2VxdWVuY2U7Ci0gICAgICAgIGJvb2wgZm91bmRLZXlTZXF1ZW5j
ZSA9IGludGVyYWN0aW9uT2JqZWN0LT5nZXRTdHJpbmcoInRleHQiX3MsIGtleVNlcXVlbmNlKTsK
LSAgICAgICAgaWYgKGZvdW5kS2V5U2VxdWVuY2UpIHsKKyAgICAgICAgYXV0byBrZXlTZXF1ZW5j
ZSA9IGludGVyYWN0aW9uT2JqZWN0LT5nZXRTdHJpbmcoInRleHQiX3MpOworICAgICAgICBpZiAo
ISFrZXlTZXF1ZW5jZSkgewogICAgICAgICAgICAgc3dpdGNoIChpbnRlcmFjdGlvblR5cGUudmFs
dWUoKSkgewogICAgICAgICAgICAgY2FzZSBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9u
OjpLZXlib2FyZEludGVyYWN0aW9uVHlwZTo6S2V5UHJlc3M6CiAgICAgICAgICAgICBjYXNlIElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OktleWJvYXJkSW50ZXJhY3Rpb25UeXBlOjpL
ZXlSZWxlYXNlOgpAQCAtMTc2NSw3ICsxNzY0LDcgQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lv
bjo6cGVyZm9ybUtleWJvYXJkSW50ZXJhY3Rpb25zKGNvbnN0IFN0cmluZyYgaGFuZGxlLCBjb24K
ICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIGlmICghZm91bmRWaXJ0dWFsS2V5
ICYmICFmb3VuZEtleVNlcXVlbmNlKQorICAgICAgICBpZiAoIXZpcnR1YWxLZXlTdHJpbmcgJiYg
IWtleVNlcXVlbmNlKQogICAgICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJS
T1JfQU5EX0RFVEFJTFMoTWlzc2luZ1BhcmFtZXRlciwgIkFuIGludGVyYWN0aW9uIGluIHRoZSAn
aW50ZXJhY3Rpb25zJyBwYXJhbWV0ZXIgaXMgbWlzc2luZyBib3RoICdrZXknIGFuZCAndGV4dCcu
IE9uZSBtdXN0IGJlIHByb3ZpZGVkLiIpOwogICAgIH0KIApAQCAtMTgwOCw3ICsxODA3LDcgQEAg
c3RhdGljIFNpbXVsYXRlZElucHV0U291cmNlVHlwZSBzaW11bGF0ZWRJbnB1dFNvdXJjZVR5cGVG
cm9tUHJvdG9jb2xTb3VyY2VUeXBlKEkKIH0KICNlbmRpZiAvLyBFTkFCTEUoV0VCRFJJVkVSX0FD
VElPTlNfQVBJKQogCi12b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpwZXJmb3JtSW50ZXJhY3Rp
b25TZXF1ZW5jZShjb25zdCBTdHJpbmcmIGhhbmRsZSwgY29uc3QgU3RyaW5nKiBvcHRpb25hbEZy
YW1lSGFuZGxlLCBjb25zdCBKU09OOjpBcnJheSYgaW5wdXRTb3VyY2VzLCBjb25zdCBKU09OOjpB
cnJheSYgc3RlcHMsIFJlZjxXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6UGVyZm9ybUludGVyYWN0aW9u
U2VxdWVuY2VDYWxsYmFjaz4mJiBjYWxsYmFjaykKK3ZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246
OnBlcmZvcm1JbnRlcmFjdGlvblNlcXVlbmNlKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1
dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYgaGFuZGxlLCBjb25zdCBJbnNwZWN0b3I6
OlByb3RvY29sOjpBdXRvbWF0aW9uOjpGcmFtZUhhbmRsZSYgZnJhbWVIYW5kbGUsIFJlZjxKU09O
OjpBcnJheT4mJiBpbnB1dFNvdXJjZXMsIFJlZjxKU09OOjpBcnJheT4mJiBzdGVwcywgUmVmPFdl
YkF1dG9tYXRpb25TZXNzaW9uOjpQZXJmb3JtSW50ZXJhY3Rpb25TZXF1ZW5jZUNhbGxiYWNrPiYm
IGNhbGxiYWNrKQogewogICAgIC8vIFRoaXMgY29tbWFuZCBpbXBsZW1lbnRzIFdlYktpdCBzdXBw
b3J0IGZvciDCpzE3LjUgUGVyZm9ybSBBY3Rpb25zLgogCkBAIC0xODIwLDcgKzE4MTksNyBAQCB2
b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpwZXJmb3JtSW50ZXJhY3Rpb25TZXF1ZW5jZShjb25z
dCBTdHJpbmcmIGhhbmRsZSwgY29ucwogICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5F
RF9FUlJPUihXaW5kb3dOb3RGb3VuZCk7CiAKICAgICBib29sIGZyYW1lTm90Rm91bmQgPSBmYWxz
ZTsKLSAgICBhdXRvIGZyYW1lSUQgPSB3ZWJGcmFtZUlERm9ySGFuZGxlKG9wdGlvbmFsRnJhbWVI
YW5kbGUgPyAqb3B0aW9uYWxGcmFtZUhhbmRsZSA6IGVtcHR5U3RyaW5nKCksIGZyYW1lTm90Rm91
bmQpOworICAgIGF1dG8gZnJhbWVJRCA9IHdlYkZyYW1lSURGb3JIYW5kbGUoZnJhbWVIYW5kbGUs
IGZyYW1lTm90Rm91bmQpOwogICAgIGlmIChmcmFtZU5vdEZvdW5kKQogICAgICAgICBBU1lOQ19G
QUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUihGcmFtZU5vdEZvdW5kKTsKIApAQCAtMTgyOSwyMCAr
MTgyOCwyMCBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpwZXJmb3JtSW50ZXJhY3Rpb25T
ZXF1ZW5jZShjb25zdCBTdHJpbmcmIGhhbmRsZSwgY29ucwogCiAgICAgLy8gUGFyc2UgYW5kIHZh
bGlkYXRlIEF1dG9tYXRpb24gcHJvdG9jb2wgYXJndW1lbnRzLiBCeSB0aGlzIHBvaW50LCB0aGUg
ZHJpdmVyIGhhcwogICAgIC8vIGFscmVhZHkgcGVyZm9ybWVkIHRoZSBzdGVwcyBpbiDCpzE3LjMg
UHJvY2Vzc2luZyBBY3Rpb25zIFJlcXVlc3RzLgotICAgIGlmICghaW5wdXRTb3VyY2VzLmxlbmd0
aCgpKQorICAgIGlmICghaW5wdXRTb3VyY2VzLT5sZW5ndGgoKSkKICAgICAgICAgQVNZTkNfRkFJ
TF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoSW52YWxpZFBhcmFtZXRlciwgIlRo
ZSBwYXJhbWV0ZXIgJ2lucHV0U291cmNlcycgd2FzIG5vdCBmb3VuZCBvciBlbXB0eS4iKTsKIAot
ICAgIGZvciAoY29uc3QgYXV0byYgaW5wdXRTb3VyY2UgOiBpbnB1dFNvdXJjZXMpIHsKLSAgICAg
ICAgUmVmUHRyPEpTT046Ok9iamVjdD4gaW5wdXRTb3VyY2VPYmplY3Q7Ci0gICAgICAgIGlmICgh
aW5wdXRTb3VyY2UtPmFzT2JqZWN0KGlucHV0U291cmNlT2JqZWN0KSkKKyAgICBmb3IgKGNvbnN0
IGF1dG8mIGlucHV0U291cmNlVmFsdWUgOiBpbnB1dFNvdXJjZXMuZ2V0KCkpIHsKKyAgICAgICAg
YXV0byBpbnB1dFNvdXJjZU9iamVjdCA9IGlucHV0U291cmNlVmFsdWUtPmFzT2JqZWN0KCk7Cisg
ICAgICAgIGlmICghaW5wdXRTb3VyY2VPYmplY3QpCiAgICAgICAgICAgICBBU1lOQ19GQUlMX1dJ
VEhfUFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhJbnZhbGlkUGFyYW1ldGVyLCAiQW4gaW5w
dXQgc291cmNlIGluIHRoZSAnaW5wdXRTb3VyY2VzJyBwYXJhbWV0ZXIgd2FzIGludmFsaWQuIik7
Ci0gICAgICAgIAotICAgICAgICBTdHJpbmcgc291cmNlSWQ7Ci0gICAgICAgIGlmICghaW5wdXRT
b3VyY2VPYmplY3QtPmdldFN0cmluZygic291cmNlSWQiX3MsIHNvdXJjZUlkKSkKKworICAgICAg
ICBhdXRvIHNvdXJjZUlkID0gaW5wdXRTb3VyY2VPYmplY3QtPmdldFN0cmluZygic291cmNlSWQi
X3MpOworICAgICAgICBpZiAoIXNvdXJjZUlkKQogICAgICAgICAgICAgQVNZTkNfRkFJTF9XSVRI
X1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoSW52YWxpZFBhcmFtZXRlciwgIkFuIGlucHV0
IHNvdXJjZSBpbiB0aGUgJ2lucHV0U291cmNlcycgcGFyYW1ldGVyIGlzIG1pc3NpbmcgYSAnc291
cmNlSWQnLiIpOwogCi0gICAgICAgIFN0cmluZyBzb3VyY2VUeXBlOwotICAgICAgICBpZiAoIWlu
cHV0U291cmNlT2JqZWN0LT5nZXRTdHJpbmcoInNvdXJjZVR5cGUiX3MsIHNvdXJjZVR5cGUpKQor
ICAgICAgICBhdXRvIHNvdXJjZVR5cGUgPSBpbnB1dFNvdXJjZU9iamVjdC0+Z2V0U3RyaW5nKCJz
b3VyY2VUeXBlIl9zKTsKKyAgICAgICAgaWYgKCFzb3VyY2VUeXBlKQogICAgICAgICAgICAgQVNZ
TkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoSW52YWxpZFBhcmFtZXRl
ciwgIkFuIGlucHV0IHNvdXJjZSBpbiB0aGUgJ2lucHV0U291cmNlcycgcGFyYW1ldGVyIGlzIG1p
c3NpbmcgYSAnc291cmNlVHlwZScuIik7CiAKICAgICAgICAgYXV0byBwYXJzZWRJbnB1dFNvdXJj
ZVR5cGUgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uSGVscGVyczo6cGFyc2VFbnVt
VmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OklucHV0U291
cmNlVHlwZT4oc291cmNlVHlwZSk7CkBAIC0xODgxLDI4ICsxODgwLDI4IEBAIHZvaWQgV2ViQXV0
b21hdGlvblNlc3Npb246OnBlcmZvcm1JbnRlcmFjdGlvblNlcXVlbmNlKGNvbnN0IFN0cmluZyYg
aGFuZGxlLCBjb25zCiAKICAgICBWZWN0b3I8U2ltdWxhdGVkSW5wdXRLZXlGcmFtZT4ga2V5RnJh
bWVzOwogCi0gICAgaWYgKCFzdGVwcy5sZW5ndGgoKSkKKyAgICBpZiAoIXN0ZXBzLT5sZW5ndGgo
KSkKICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMo
SW52YWxpZFBhcmFtZXRlciwgIlRoZSBwYXJhbWV0ZXIgJ3N0ZXBzJyB3YXMgbm90IGZvdW5kIG9y
IGVtcHR5LiIpOwogCi0gICAgZm9yIChjb25zdCBhdXRvJiBzdGVwIDogc3RlcHMpIHsKLSAgICAg
ICAgUmVmUHRyPEpTT046Ok9iamVjdD4gc3RlcE9iamVjdDsKLSAgICAgICAgaWYgKCFzdGVwLT5h
c09iamVjdChzdGVwT2JqZWN0KSkKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHN0ZXBWYWx1ZSA6IHN0
ZXBzLmdldCgpKSB7CisgICAgICAgIGF1dG8gc3RlcE9iamVjdCA9IHN0ZXBWYWx1ZS0+YXNPYmpl
Y3QoKTsKKyAgICAgICAgaWYgKCFzdGVwT2JqZWN0KQogICAgICAgICAgICAgQVNZTkNfRkFJTF9X
SVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoSW52YWxpZFBhcmFtZXRlciwgIkEgc3Rl
cCBpbiB0aGUgJ3N0ZXBzJyBwYXJhbWV0ZXIgd2FzIG5vdCBhbiBvYmplY3QuIik7CiAKLSAgICAg
ICAgUmVmUHRyPEpTT046OkFycmF5PiBzdGVwU3RhdGVzOwotICAgICAgICBpZiAoIXN0ZXBPYmpl
Y3QtPmdldEFycmF5KCJzdGF0ZXMiX3MsIHN0ZXBTdGF0ZXMpKQorICAgICAgICBhdXRvIHN0ZXBT
dGF0ZXMgPSBzdGVwT2JqZWN0LT5nZXRBcnJheSgic3RhdGVzIl9zKTsKKyAgICAgICAgaWYgKCFz
dGVwU3RhdGVzKQogICAgICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1Jf
QU5EX0RFVEFJTFMoSW52YWxpZFBhcmFtZXRlciwgIkEgc3RlcCBpcyBtaXNzaW5nIHRoZSAnc3Rh
dGVzJyBwcm9wZXJ0eS4iKTsKIAogICAgICAgICBWZWN0b3I8U2ltdWxhdGVkSW5wdXRLZXlGcmFt
ZTo6U3RhdGVFbnRyeT4gZW50cmllczsKICAgICAgICAgZW50cmllcy5yZXNlcnZlQ2FwYWNpdHko
c3RlcFN0YXRlcy0+bGVuZ3RoKCkpOwogCi0gICAgICAgIGZvciAoY29uc3QgYXV0byYgc3RhdGUg
OiAqc3RlcFN0YXRlcykgewotICAgICAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gc3RhdGVP
YmplY3Q7Ci0gICAgICAgICAgICBpZiAoIXN0YXRlLT5hc09iamVjdChzdGF0ZU9iamVjdCkpCisg
ICAgICAgIGZvciAoY29uc3QgYXV0byYgc3RhdGVWYWx1ZSA6ICpzdGVwU3RhdGVzKSB7CisgICAg
ICAgICAgICBhdXRvIHN0YXRlT2JqZWN0ID0gc3RhdGVWYWx1ZS0+YXNPYmplY3QoKTsKKyAgICAg
ICAgICAgIGlmICghc3RhdGVPYmplY3QpCiAgICAgICAgICAgICAgICAgQVNZTkNfRkFJTF9XSVRI
X1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoSW52YWxpZFBhcmFtZXRlciwgIkVuY291bnRl
cmVkIGEgbm9uLW9iamVjdCBzdGVwIHN0YXRlLiIpOwogCi0gICAgICAgICAgICBTdHJpbmcgc291
cmNlSWQ7Ci0gICAgICAgICAgICBpZiAoIXN0YXRlT2JqZWN0LT5nZXRTdHJpbmcoInNvdXJjZUlk
Il9zLCBzb3VyY2VJZCkpCisgICAgICAgICAgICBhdXRvIHNvdXJjZUlkID0gc3RhdGVPYmplY3Qt
PmdldFN0cmluZygic291cmNlSWQiX3MpOworICAgICAgICAgICAgaWYgKCFzb3VyY2VJZCkKICAg
ICAgICAgICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlM
UyhJbnZhbGlkUGFyYW1ldGVyLCAiU3RlcCBzdGF0ZSBsYWNrcyByZXF1aXJlZCAnc291cmNlSWQn
IHByb3BlcnR5LiIpOwogCiAgICAgICAgICAgICBpZiAoIXNvdXJjZUlkVG9JbnB1dFNvdXJjZU1h
cC5jb250YWlucyhzb3VyY2VJZCkpCkBAIC0xOTExLDE3ICsxOTEwLDE2IEBAIHZvaWQgV2ViQXV0
b21hdGlvblNlc3Npb246OnBlcmZvcm1JbnRlcmFjdGlvblNlcXVlbmNlKGNvbnN0IFN0cmluZyYg
aGFuZGxlLCBjb25zCiAgICAgICAgICAgICBTaW11bGF0ZWRJbnB1dFNvdXJjZSYgaW5wdXRTb3Vy
Y2UgPSAqc291cmNlSWRUb0lucHV0U291cmNlTWFwLmdldChzb3VyY2VJZCk7CiAgICAgICAgICAg
ICBTaW11bGF0ZWRJbnB1dFNvdXJjZVN0YXRlIHNvdXJjZVN0YXRlIHsgfTsKIAotICAgICAgICAg
ICAgU3RyaW5nIHByZXNzZWRDaGFyS2V5U3RyaW5nOwotICAgICAgICAgICAgaWYgKHN0YXRlT2Jq
ZWN0LT5nZXRTdHJpbmcoInByZXNzZWRDaGFyS2V5Il9zLCBwcmVzc2VkQ2hhcktleVN0cmluZykp
CisgICAgICAgICAgICBhdXRvIHByZXNzZWRDaGFyS2V5U3RyaW5nID0gc3RhdGVPYmplY3QtPmdl
dFN0cmluZygicHJlc3NlZENoYXJLZXkiX3MpOworICAgICAgICAgICAgaWYgKCEhcHJlc3NlZENo
YXJLZXlTdHJpbmcpCiAgICAgICAgICAgICAgICAgc291cmNlU3RhdGUucHJlc3NlZENoYXJLZXkg
PSBwcmVzc2VkQ2hhcktleVN0cmluZy5jaGFyYWN0ZXJBdCgwKTsKIAotICAgICAgICAgICAgUmVm
UHRyPEpTT046OkFycmF5PiBwcmVzc2VkVmlydHVhbEtleXNBcnJheTsKLSAgICAgICAgICAgIGlm
IChzdGF0ZU9iamVjdC0+Z2V0QXJyYXkoInByZXNzZWRWaXJ0dWFsS2V5cyJfcywgcHJlc3NlZFZp
cnR1YWxLZXlzQXJyYXkpKSB7CisgICAgICAgICAgICBpZiAoYXV0byBwcmVzc2VkVmlydHVhbEtl
eXNBcnJheSA9IHN0YXRlT2JqZWN0LT5nZXRBcnJheSgicHJlc3NlZFZpcnR1YWxLZXlzIl9zKSkg
ewogICAgICAgICAgICAgICAgIFZpcnR1YWxLZXlTZXQgcHJlc3NlZFZpcnR1YWxLZXlzIHsgfTsK
IAogICAgICAgICAgICAgICAgIGZvciAoYXV0byBpdCA9IHByZXNzZWRWaXJ0dWFsS2V5c0FycmF5
LT5iZWdpbigpOyBpdCAhPSBwcmVzc2VkVmlydHVhbEtleXNBcnJheS0+ZW5kKCk7ICsraXQpIHsK
LSAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHByZXNzZWRWaXJ0dWFsS2V5U3RyaW5nOwotICAg
ICAgICAgICAgICAgICAgICBpZiAoISgqaXQpLT5hc1N0cmluZyhwcmVzc2VkVmlydHVhbEtleVN0
cmluZykpCisgICAgICAgICAgICAgICAgICAgIGF1dG8gcHJlc3NlZFZpcnR1YWxLZXlTdHJpbmcg
PSAoKml0KS0+YXNTdHJpbmcoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFwcmVzc2VkVmly
dHVhbEtleVN0cmluZykKICAgICAgICAgICAgICAgICAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9Q
UkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxTKEludmFsaWRQYXJhbWV0ZXIsICJFbmNvdW50ZXJl
ZCBhIG5vbi1zdHJpbmcgdmlydHVhbCBrZXkgdmFsdWUuIik7CiAKICAgICAgICAgICAgICAgICAg
ICAgT3B0aW9uYWw8VmlydHVhbEtleT4gcGFyc2VkVmlydHVhbEtleSA9IEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkF1dG9tYXRpb25IZWxwZXJzOjpwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVj
dG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6VmlydHVhbEtleT4ocHJlc3NlZFZpcnR1YWxLZXlT
dHJpbmcpOwpAQCAtMTkzNCwzMyArMTkzMiwzMiBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9u
OjpwZXJmb3JtSW50ZXJhY3Rpb25TZXF1ZW5jZShjb25zdCBTdHJpbmcmIGhhbmRsZSwgY29ucwog
ICAgICAgICAgICAgICAgIHNvdXJjZVN0YXRlLnByZXNzZWRWaXJ0dWFsS2V5cyA9IHByZXNzZWRW
aXJ0dWFsS2V5czsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgU3RyaW5nIHByZXNzZWRC
dXR0b25TdHJpbmc7Ci0gICAgICAgICAgICBpZiAoc3RhdGVPYmplY3QtPmdldFN0cmluZygicHJl
c3NlZEJ1dHRvbiJfcywgcHJlc3NlZEJ1dHRvblN0cmluZykpIHsKKyAgICAgICAgICAgIGF1dG8g
cHJlc3NlZEJ1dHRvblN0cmluZyA9IHN0YXRlT2JqZWN0LT5nZXRTdHJpbmcoInByZXNzZWRCdXR0
b24iX3MpOworICAgICAgICAgICAgaWYgKCEhcHJlc3NlZEJ1dHRvblN0cmluZykgewogICAgICAg
ICAgICAgICAgIGF1dG8gcHJvdG9jb2xCdXR0b24gPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRv
bWF0aW9uSGVscGVyczo6cGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkF1dG9tYXRpb246Ok1vdXNlQnV0dG9uPihwcmVzc2VkQnV0dG9uU3RyaW5nKTsKICAgICAg
ICAgICAgICAgICBzb3VyY2VTdGF0ZS5wcmVzc2VkTW91c2VCdXR0b24gPSBwcm90b2NvbEJ1dHRv
bi52YWx1ZU9yKE1vdXNlQnV0dG9uOjpOb25lKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAg
ICAgU3RyaW5nIG9yaWdpblN0cmluZzsKLSAgICAgICAgICAgIGlmIChzdGF0ZU9iamVjdC0+Z2V0
U3RyaW5nKCJvcmlnaW4iX3MsIG9yaWdpblN0cmluZykpCisgICAgICAgICAgICBhdXRvIG9yaWdp
blN0cmluZyA9IHN0YXRlT2JqZWN0LT5nZXRTdHJpbmcoIm9yaWdpbiJfcyk7CisgICAgICAgICAg
ICBpZiAoISFvcmlnaW5TdHJpbmcpCiAgICAgICAgICAgICAgICAgc291cmNlU3RhdGUub3JpZ2lu
ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbkhlbHBlcnM6OnBhcnNlRW51bVZhbHVl
RnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpNb3VzZU1vdmVPcmln
aW4+KG9yaWdpblN0cmluZyk7CiAKICAgICAgICAgICAgIGlmIChzb3VyY2VTdGF0ZS5vcmlnaW4g
JiYgc291cmNlU3RhdGUub3JpZ2luLnZhbHVlKCkgPT0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0
b21hdGlvbjo6TW91c2VNb3ZlT3JpZ2luOjpFbGVtZW50KSB7Ci0gICAgICAgICAgICAgICAgU3Ry
aW5nIG5vZGVIYW5kbGVTdHJpbmc7Ci0gICAgICAgICAgICAgICAgaWYgKCFzdGF0ZU9iamVjdC0+
Z2V0U3RyaW5nKCJub2RlSGFuZGxlIl9zLCBub2RlSGFuZGxlU3RyaW5nKSkKKyAgICAgICAgICAg
ICAgICBhdXRvIG5vZGVIYW5kbGVTdHJpbmcgPSBzdGF0ZU9iamVjdC0+Z2V0U3RyaW5nKCJub2Rl
SGFuZGxlIl9zKTsKKyAgICAgICAgICAgICAgICBpZiAoIW5vZGVIYW5kbGVTdHJpbmcpCiAgICAg
ICAgICAgICAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRB
SUxTKEludmFsaWRQYXJhbWV0ZXIsICJOb2RlIGhhbmRsZSBub3QgcHJvdmlkZWQgZm9yICdFbGVt
ZW50JyBvcmlnaW4iKTsKICAgICAgICAgICAgICAgICBzb3VyY2VTdGF0ZS5ub2RlSGFuZGxlID0g
bm9kZUhhbmRsZVN0cmluZzsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgUmVmUHRyPEpT
T046Ok9iamVjdD4gbG9jYXRpb25PYmplY3Q7Ci0gICAgICAgICAgICBpZiAoc3RhdGVPYmplY3Qt
PmdldE9iamVjdCgibG9jYXRpb24iX3MsIGxvY2F0aW9uT2JqZWN0KSkgewotICAgICAgICAgICAg
ICAgIGludCB4ID0gMCwgeSA9IDA7Ci0gICAgICAgICAgICAgICAgaWYgKGxvY2F0aW9uT2JqZWN0
LT5nZXRJbnRlZ2VyKCJ4Il9zLCB4KSAmJiBsb2NhdGlvbk9iamVjdC0+Z2V0SW50ZWdlcigieSJf
cywgeSkpCi0gICAgICAgICAgICAgICAgICAgIHNvdXJjZVN0YXRlLmxvY2F0aW9uID0gV2ViQ29y
ZTo6SW50UG9pbnQoeCwgeSk7CisgICAgICAgICAgICBpZiAoYXV0byBsb2NhdGlvbk9iamVjdCA9
IHN0YXRlT2JqZWN0LT5nZXRPYmplY3QoImxvY2F0aW9uIl9zKSkgeworICAgICAgICAgICAgICAg
IGF1dG8geCA9IGxvY2F0aW9uT2JqZWN0LT5nZXRJbnRlZ2VyKCJ4Il9zKTsKKyAgICAgICAgICAg
ICAgICBhdXRvIHkgPSBsb2NhdGlvbk9iamVjdC0+Z2V0SW50ZWdlcigieSJfcyk7CisgICAgICAg
ICAgICAgICAgaWYgKHggJiYgeSkKKyAgICAgICAgICAgICAgICAgICAgc291cmNlU3RhdGUubG9j
YXRpb24gPSBXZWJDb3JlOjpJbnRQb2ludCgqeCwgKnkpOwogICAgICAgICAgICAgfQogCi0gICAg
ICAgICAgICBpbnQgcGFyc2VkRHVyYXRpb247Ci0gICAgICAgICAgICBpZiAoc3RhdGVPYmplY3Qt
PmdldEludGVnZXIoImR1cmF0aW9uIl9zLCBwYXJzZWREdXJhdGlvbikpCi0gICAgICAgICAgICAg
ICAgc291cmNlU3RhdGUuZHVyYXRpb24gPSBTZWNvbmRzOjpmcm9tTWlsbGlzZWNvbmRzKHBhcnNl
ZER1cmF0aW9uKTsKKyAgICAgICAgICAgIGlmIChhdXRvIGR1cmF0aW9uID0gc3RhdGVPYmplY3Qt
PmdldEludGVnZXIoImR1cmF0aW9uIl9zKSkKKyAgICAgICAgICAgICAgICBzb3VyY2VTdGF0ZS5k
dXJhdGlvbiA9IFNlY29uZHM6OmZyb21NaWxsaXNlY29uZHMoKmR1cmF0aW9uKTsKIAogICAgICAg
ICAgICAgZW50cmllcy51bmNoZWNrZWRBcHBlbmQoc3RkOjpwYWlyPFNpbXVsYXRlZElucHV0U291
cmNlJiwgU2ltdWxhdGVkSW5wdXRTb3VyY2VTdGF0ZT4geyBpbnB1dFNvdXJjZSwgc291cmNlU3Rh
dGUgfSk7CiAgICAgICAgIH0KQEAgLTE5ODQsNyArMTk4MSw3IEBAIHZvaWQgV2ViQXV0b21hdGlv
blNlc3Npb246OnBlcmZvcm1JbnRlcmFjdGlvblNlcXVlbmNlKGNvbnN0IFN0cmluZyYgaGFuZGxl
LCBjb25zCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkRSSVZFUl9BQ1RJT05TX0FQSSkKIH0KIAotdm9p
ZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6Y2FuY2VsSW50ZXJhY3Rpb25TZXF1ZW5jZShjb25zdCBT
dHJpbmcmIGhhbmRsZSwgY29uc3QgU3RyaW5nKiBvcHRpb25hbEZyYW1lSGFuZGxlLCBSZWY8Q2Fu
Y2VsSW50ZXJhY3Rpb25TZXF1ZW5jZUNhbGxiYWNrPiYmIGNhbGxiYWNrKQordm9pZCBXZWJBdXRv
bWF0aW9uU2Vzc2lvbjo6Y2FuY2VsSW50ZXJhY3Rpb25TZXF1ZW5jZShjb25zdCBJbnNwZWN0b3I6
OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRIYW5kbGUmIGhhbmRsZSwgY29u
c3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6RnJhbWVIYW5kbGUmIGZyYW1lSGFu
ZGxlLCBSZWY8Q2FuY2VsSW50ZXJhY3Rpb25TZXF1ZW5jZUNhbGxiYWNrPiYmIGNhbGxiYWNrKQog
ewogICAgIC8vIFRoaXMgY29tbWFuZCBpbXBsZW1lbnRzIFdlYktpdCBzdXBwb3J0IGZvciDCpzE3
LjYgUmVsZWFzZSBBY3Rpb25zLgogCkBAIC0xOTk2LDcgKzE5OTMsNyBAQCB2b2lkIFdlYkF1dG9t
YXRpb25TZXNzaW9uOjpjYW5jZWxJbnRlcmFjdGlvblNlcXVlbmNlKGNvbnN0IFN0cmluZyYgaGFu
ZGxlLCBjb25zdAogICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUihXaW5k
b3dOb3RGb3VuZCk7CiAKICAgICBib29sIGZyYW1lTm90Rm91bmQgPSBmYWxzZTsKLSAgICBhdXRv
IGZyYW1lSUQgPSB3ZWJGcmFtZUlERm9ySGFuZGxlKG9wdGlvbmFsRnJhbWVIYW5kbGUgPyAqb3B0
aW9uYWxGcmFtZUhhbmRsZSA6IGVtcHR5U3RyaW5nKCksIGZyYW1lTm90Rm91bmQpOworICAgIGF1
dG8gZnJhbWVJRCA9IHdlYkZyYW1lSURGb3JIYW5kbGUoZnJhbWVIYW5kbGUsIGZyYW1lTm90Rm91
bmQpOwogICAgIGlmIChmcmFtZU5vdEZvdW5kKQogICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJF
REVGSU5FRF9FUlJPUihGcmFtZU5vdEZvdW5kKTsKIApAQCAtMjAxMywxOSArMjAxMCwxOCBAQCB2
b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpjYW5jZWxJbnRlcmFjdGlvblNlcXVlbmNlKGNvbnN0
IFN0cmluZyYgaGFuZGxlLCBjb25zdAogI2VuZGlmIC8vIEVOQUJMRShXRUJEUklWRVJfQUNUSU9O
U19BUEkpCiB9CiAKLXZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OnRha2VTY3JlZW5zaG90KGNv
bnN0IFN0cmluZyYgaGFuZGxlLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsRnJhbWVIYW5kbGUsIGNv
bnN0IFN0cmluZyogb3B0aW9uYWxOb2RlSGFuZGxlLCBjb25zdCBib29sKiBvcHRpb25hbFNjcm9s
bEludG9WaWV3SWZOZWVkZWQsIGNvbnN0IGJvb2wqIG9wdGlvbmFsQ2xpcFRvVmlld3BvcnQsIFJl
ZjxUYWtlU2NyZWVuc2hvdENhbGxiYWNrPiYmIGNhbGxiYWNrKQordm9pZCBXZWJBdXRvbWF0aW9u
U2Vzc2lvbjo6dGFrZVNjcmVlbnNob3QoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21h
dGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJiBoYW5kbGUsIGNvbnN0IEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkF1dG9tYXRpb246OkZyYW1lSGFuZGxlJiBmcmFtZUhhbmRsZSwgY29uc3QgSW5zcGVj
dG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6Tm9kZUhhbmRsZSYgbm9kZUhhbmRsZSwgT3B0aW9u
YWw8Ym9vbD4mJiBvcHRpb25hbFNjcm9sbEludG9WaWV3SWZOZWVkZWQsIE9wdGlvbmFsPGJvb2w+
JiYgb3B0aW9uYWxDbGlwVG9WaWV3cG9ydCwgUmVmPFRha2VTY3JlZW5zaG90Q2FsbGJhY2s+JiYg
Y2FsbGJhY2spCiB7CiAgICAgV2ViUGFnZVByb3h5KiBwYWdlID0gd2ViUGFnZVByb3h5Rm9ySGFu
ZGxlKGhhbmRsZSk7CiAgICAgaWYgKCFwYWdlKQogICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJF
REVGSU5FRF9FUlJPUihXaW5kb3dOb3RGb3VuZCk7CiAKICAgICBib29sIGZyYW1lTm90Rm91bmQg
PSBmYWxzZTsKLSAgICBhdXRvIGZyYW1lSUQgPSB3ZWJGcmFtZUlERm9ySGFuZGxlKG9wdGlvbmFs
RnJhbWVIYW5kbGUgPyAqb3B0aW9uYWxGcmFtZUhhbmRsZSA6IGVtcHR5U3RyaW5nKCksIGZyYW1l
Tm90Rm91bmQpOworICAgIGF1dG8gZnJhbWVJRCA9IHdlYkZyYW1lSURGb3JIYW5kbGUoZnJhbWVI
YW5kbGUsIGZyYW1lTm90Rm91bmQpOwogICAgIGlmIChmcmFtZU5vdEZvdW5kKQogICAgICAgICBB
U1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUihGcmFtZU5vdEZvdW5kKTsKIAogICAgIGJv
b2wgc2Nyb2xsSW50b1ZpZXdJZk5lZWRlZCA9IG9wdGlvbmFsU2Nyb2xsSW50b1ZpZXdJZk5lZWRl
ZCA/ICpvcHRpb25hbFNjcm9sbEludG9WaWV3SWZOZWVkZWQgOiBmYWxzZTsKLSAgICBTdHJpbmcg
bm9kZUhhbmRsZSA9IG9wdGlvbmFsTm9kZUhhbmRsZSA/ICpvcHRpb25hbE5vZGVIYW5kbGUgOiBl
bXB0eVN0cmluZygpOwogICAgIGJvb2wgY2xpcFRvVmlld3BvcnQgPSBvcHRpb25hbENsaXBUb1Zp
ZXdwb3J0ID8gKm9wdGlvbmFsQ2xpcFRvVmlld3BvcnQgOiBmYWxzZTsKIAogI2lmIFBMQVRGT1JN
KEdUSykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vV2Vi
QXV0b21hdGlvblNlc3Npb24uaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24v
V2ViQXV0b21hdGlvblNlc3Npb24uaAppbmRleCAzNjI3NjYwMzk1Y2I1ZjQ0ZTc3YTlmODYxZDQy
ZTk3MWRiYTFiYmZjLi44ZDkwODkyYTRiMTM0MjY0YTRlODViZTRmNjVkZmEyMGZjMDEzYTJlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRp
b25TZXNzaW9uLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9XZWJB
dXRvbWF0aW9uU2Vzc2lvbi5oCkBAIC0xMzUsMTAgKzEzNSwxMCBAQCBwdWJsaWM6CiAKICNpZiBF
TkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKICAgICAvLyBJbnNwZWN0b3I6OlJlbW90ZUF1dG9tYXRp
b25UYXJnZXQgQVBJCi0gICAgU3RyaW5nIG5hbWUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBt
X3Nlc3Npb25JZGVudGlmaWVyOyB9Ci0gICAgdm9pZCBkaXNwYXRjaE1lc3NhZ2VGcm9tUmVtb3Rl
KGNvbnN0IFN0cmluZyYgbWVzc2FnZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjb25uZWN0KEluc3Bl
Y3Rvcjo6RnJvbnRlbmRDaGFubmVsJiwgYm9vbCBpc0F1dG9tYXRpY0Nvbm5lY3Rpb24gPSBmYWxz
ZSwgYm9vbCBpbW1lZGlhdGVseVBhdXNlID0gZmFsc2UpIG92ZXJyaWRlOwotICAgIHZvaWQgZGlz
Y29ubmVjdChJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbCYpIG92ZXJyaWRlOworICAgIFN0cmlu
ZyBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9zZXNzaW9uSWRlbnRpZmllcjsgfQorICAgIHZvaWQg
ZGlzcGF0Y2hNZXNzYWdlRnJvbVJlbW90ZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOworICAgIHZv
aWQgY29ubmVjdChJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbCYsIGJvb2wgaXNBdXRvbWF0aWND
b25uZWN0aW9uID0gZmFsc2UsIGJvb2wgaW1tZWRpYXRlbHlQYXVzZSA9IGZhbHNlKTsKKyAgICB2
b2lkIGRpc2Nvbm5lY3QoSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWwmKTsKICNlbmRpZgogICAg
IHZvaWQgdGVybWluYXRlKCk7CiAKQEAgLTE0NiwxNSArMTQ2LDE1IEBAIHB1YmxpYzoKIAogICAg
IC8vIFNpbXVsYXRlZElucHV0RGlzcGF0Y2hlcjo6Q2xpZW50IEFQSQogI2lmIEVOQUJMRShXRUJE
UklWRVJfTU9VU0VfSU5URVJBQ1RJT05TKQotICAgIHZvaWQgc2ltdWxhdGVNb3VzZUludGVyYWN0
aW9uKFdlYlBhZ2VQcm94eSYsIE1vdXNlSW50ZXJhY3Rpb24sIE1vdXNlQnV0dG9uLCBjb25zdCBX
ZWJDb3JlOjpJbnRQb2ludCYgbG9jYXRpb25JblZpZXcsIEF1dG9tYXRpb25Db21wbGV0aW9uSGFu
ZGxlciYmKSBmaW5hbDsKKyAgICB2b2lkIHNpbXVsYXRlTW91c2VJbnRlcmFjdGlvbihXZWJQYWdl
UHJveHkmLCBNb3VzZUludGVyYWN0aW9uLCBNb3VzZUJ1dHRvbiwgY29uc3QgV2ViQ29yZTo6SW50
UG9pbnQmIGxvY2F0aW9uSW5WaWV3LCBBdXRvbWF0aW9uQ29tcGxldGlvbkhhbmRsZXImJik7CiAj
ZW5kaWYKICNpZiBFTkFCTEUoV0VCRFJJVkVSX1RPVUNIX0lOVEVSQUNUSU9OUykKLSAgICB2b2lk
IHNpbXVsYXRlVG91Y2hJbnRlcmFjdGlvbihXZWJQYWdlUHJveHkmLCBUb3VjaEludGVyYWN0aW9u
LCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgbG9jYXRpb25JblZpZXcsIE9wdGlvbmFsPFNlY29u
ZHM+IGR1cmF0aW9uLCBBdXRvbWF0aW9uQ29tcGxldGlvbkhhbmRsZXImJikgZmluYWw7CisgICAg
dm9pZCBzaW11bGF0ZVRvdWNoSW50ZXJhY3Rpb24oV2ViUGFnZVByb3h5JiwgVG91Y2hJbnRlcmFj
dGlvbiwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGxvY2F0aW9uSW5WaWV3LCBPcHRpb25hbDxT
ZWNvbmRzPiBkdXJhdGlvbiwgQXV0b21hdGlvbkNvbXBsZXRpb25IYW5kbGVyJiYpOwogI2VuZGlm
CiAjaWYgRU5BQkxFKFdFQkRSSVZFUl9LRVlCT0FSRF9JTlRFUkFDVElPTlMpCi0gICAgdm9pZCBz
aW11bGF0ZUtleWJvYXJkSW50ZXJhY3Rpb24oV2ViUGFnZVByb3h5JiwgS2V5Ym9hcmRJbnRlcmFj
dGlvbiwgV1RGOjpWYXJpYW50PFZpcnR1YWxLZXksIENoYXJLZXk+JiYsIEF1dG9tYXRpb25Db21w
bGV0aW9uSGFuZGxlciYmKSBmaW5hbDsKKyAgICB2b2lkIHNpbXVsYXRlS2V5Ym9hcmRJbnRlcmFj
dGlvbihXZWJQYWdlUHJveHkmLCBLZXlib2FyZEludGVyYWN0aW9uLCBXVEY6OlZhcmlhbnQ8Vmly
dHVhbEtleSwgQ2hhcktleT4mJiwgQXV0b21hdGlvbkNvbXBsZXRpb25IYW5kbGVyJiYpOwogI2Vu
ZGlmCi0gICAgdm9pZCB2aWV3cG9ydEluVmlld0NlbnRlclBvaW50T2ZFbGVtZW50KFdlYlBhZ2VQ
cm94eSYsIE9wdGlvbmFsPFdlYkNvcmU6OkZyYW1lSWRlbnRpZmllcj4sIGNvbnN0IFN0cmluZyYg
bm9kZUhhbmRsZSwgRnVuY3Rpb248dm9pZCAoT3B0aW9uYWw8V2ViQ29yZTo6SW50UG9pbnQ+LCBP
cHRpb25hbDxBdXRvbWF0aW9uQ29tbWFuZEVycm9yPik+JiYpIGZpbmFsOworICAgIHZvaWQgdmll
d3BvcnRJblZpZXdDZW50ZXJQb2ludE9mRWxlbWVudChXZWJQYWdlUHJveHkmLCBPcHRpb25hbDxX
ZWJDb3JlOjpGcmFtZUlkZW50aWZpZXI+LCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRv
bWF0aW9uOjpOb2RlSGFuZGxlJiwgRnVuY3Rpb248dm9pZChPcHRpb25hbDxXZWJDb3JlOjpJbnRQ
b2ludD4sIE9wdGlvbmFsPEF1dG9tYXRpb25Db21tYW5kRXJyb3I+KT4mJik7CiAKICNlbmRpZiAv
LyBFTkFCTEUoV0VCRFJJVkVSX0FDVElPTlNfQVBJKQogCkBAIC0xNjMsNDUgKzE2Myw0NSBAQCBw
dWJsaWM6CiAgICAgLy8gYW5kIHRoZSAtLXBsYXRmb3JtIGFyZ3VtZW50IHBhc3NlZCB0byB0aGUg
cHJvdG9jb2wgYmluZGluZ3MgZ2VuZXJhdG9yLgogCiAgICAgLy8gUGxhdGZvcm06IEdlbmVyaWMK
LSAgICB2b2lkIGdldEJyb3dzaW5nQ29udGV4dHMoUmVmPEdldEJyb3dzaW5nQ29udGV4dHNDYWxs
YmFjaz4mJikgZmluYWw7Ci0gICAgdm9pZCBnZXRCcm93c2luZ0NvbnRleHQoY29uc3QgU3RyaW5n
JiwgUmVmPEdldEJyb3dzaW5nQ29udGV4dENhbGxiYWNrPiYmKSBmaW5hbDsKLSAgICB2b2lkIGNy
ZWF0ZUJyb3dzaW5nQ29udGV4dChjb25zdCBTdHJpbmcqIG9wdGlvbmFsUHJlc2VudGF0aW9uSGlu
dCwgUmVmPENyZWF0ZUJyb3dzaW5nQ29udGV4dENhbGxiYWNrPiYmKSBmaW5hbDsKLSAgICB2b2lk
IGNsb3NlQnJvd3NpbmdDb250ZXh0KEluc3BlY3Rvcjo6RXJyb3JTdHJpbmcmLCBjb25zdCBTdHJp
bmcmKSBmaW5hbDsKLSAgICB2b2lkIHN3aXRjaFRvQnJvd3NpbmdDb250ZXh0KGNvbnN0IFN0cmlu
ZyYgYnJvd3NpbmdDb250ZXh0SGFuZGxlLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsRnJhbWVIYW5k
bGUsIFJlZjxTd2l0Y2hUb0Jyb3dzaW5nQ29udGV4dENhbGxiYWNrPiYmKSBmaW5hbDsKLSAgICB2
b2lkIHNldFdpbmRvd0ZyYW1lT2ZCcm93c2luZ0NvbnRleHQoY29uc3QgU3RyaW5nJiBoYW5kbGUs
IGNvbnN0IEpTT046Ok9iamVjdCogb3JpZ2luLCBjb25zdCBKU09OOjpPYmplY3QqIHNpemUsIFJl
ZjxTZXRXaW5kb3dGcmFtZU9mQnJvd3NpbmdDb250ZXh0Q2FsbGJhY2s+JiYpIGZpbmFsOwotICAg
IHZvaWQgbWF4aW1pemVXaW5kb3dPZkJyb3dzaW5nQ29udGV4dChjb25zdCBTdHJpbmcmIGhhbmRs
ZSwgUmVmPE1heGltaXplV2luZG93T2ZCcm93c2luZ0NvbnRleHRDYWxsYmFjaz4mJikgZmluYWw7
Ci0gICAgdm9pZCBoaWRlV2luZG93T2ZCcm93c2luZ0NvbnRleHQoY29uc3QgU3RyaW5nJiBoYW5k
bGUsIFJlZjxIaWRlV2luZG93T2ZCcm93c2luZ0NvbnRleHRDYWxsYmFjaz4mJikgZmluYWw7Ci0g
ICAgdm9pZCBuYXZpZ2F0ZUJyb3dzaW5nQ29udGV4dChjb25zdCBTdHJpbmcmIGhhbmRsZSwgY29u
c3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxQYWdlTG9hZFN0cmF0ZWd5U3Ry
aW5nLCBjb25zdCBkb3VibGUqIG9wdGlvbmFsUGFnZUxvYWRUaW1lb3V0LCBSZWY8TmF2aWdhdGVC
cm93c2luZ0NvbnRleHRDYWxsYmFjaz4mJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBnb0JhY2tJbkJy
b3dzaW5nQ29udGV4dChjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsUGFnZUxv
YWRTdHJhdGVneVN0cmluZywgY29uc3QgZG91YmxlKiBvcHRpb25hbFBhZ2VMb2FkVGltZW91dCwg
UmVmPEdvQmFja0luQnJvd3NpbmdDb250ZXh0Q2FsbGJhY2s+JiYpIG92ZXJyaWRlOwotICAgIHZv
aWQgZ29Gb3J3YXJkSW5Ccm93c2luZ0NvbnRleHQoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5n
KiBvcHRpb25hbFBhZ2VMb2FkU3RyYXRlZ3lTdHJpbmcsIGNvbnN0IGRvdWJsZSogb3B0aW9uYWxQ
YWdlTG9hZFRpbWVvdXQsIFJlZjxHb0ZvcndhcmRJbkJyb3dzaW5nQ29udGV4dENhbGxiYWNrPiYm
KSBvdmVycmlkZTsKLSAgICB2b2lkIHJlbG9hZEJyb3dzaW5nQ29udGV4dChjb25zdCBTdHJpbmcm
LCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsUGFnZUxvYWRTdHJhdGVneVN0cmluZywgY29uc3QgZG91
YmxlKiBvcHRpb25hbFBhZ2VMb2FkVGltZW91dCwgUmVmPFJlbG9hZEJyb3dzaW5nQ29udGV4dENh
bGxiYWNrPiYmKSBvdmVycmlkZTsKLSAgICB2b2lkIHdhaXRGb3JOYXZpZ2F0aW9uVG9Db21wbGV0
ZShjb25zdCBTdHJpbmcmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSwgY29uc3QgU3RyaW5nKiBvcHRp
b25hbEZyYW1lSGFuZGxlLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsUGFnZUxvYWRTdHJhdGVneVN0
cmluZywgY29uc3QgZG91YmxlKiBvcHRpb25hbFBhZ2VMb2FkVGltZW91dCwgUmVmPFdhaXRGb3JO
YXZpZ2F0aW9uVG9Db21wbGV0ZUNhbGxiYWNrPiYmKSBvdmVycmlkZTsKLSAgICB2b2lkIGV2YWx1
YXRlSmF2YVNjcmlwdEZ1bmN0aW9uKGNvbnN0IFN0cmluZyYgYnJvd3NpbmdDb250ZXh0SGFuZGxl
LCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsRnJhbWVIYW5kbGUsIGNvbnN0IFN0cmluZyYgZnVuY3Rp
b24sIGNvbnN0IEpTT046OkFycmF5JiBhcmd1bWVudHMsIGNvbnN0IGJvb2wqIG9wdGlvbmFsRXhw
ZWN0c0ltcGxpY2l0Q2FsbGJhY2tBcmd1bWVudCwgY29uc3QgZG91YmxlKiBvcHRpb25hbENhbGxi
YWNrVGltZW91dCwgUmVmPEluc3BlY3Rvcjo6QXV0b21hdGlvbkJhY2tlbmREaXNwYXRjaGVySGFu
ZGxlcjo6RXZhbHVhdGVKYXZhU2NyaXB0RnVuY3Rpb25DYWxsYmFjaz4mJikgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCBwZXJmb3JtTW91c2VJbnRlcmFjdGlvbihjb25zdCBTdHJpbmcmIGhhbmRsZSwgY29u
c3QgSlNPTjo6T2JqZWN0JiByZXF1ZXN0ZWRQb3NpdGlvbiwgY29uc3QgU3RyaW5nJiBtb3VzZUJ1
dHRvbiwgY29uc3QgU3RyaW5nJiBtb3VzZUludGVyYWN0aW9uLCBjb25zdCBKU09OOjpBcnJheSYg
a2V5TW9kaWZpZXJzLCBSZWY8UGVyZm9ybU1vdXNlSW50ZXJhY3Rpb25DYWxsYmFjaz4mJikgZmlu
YWw7Ci0gICAgdm9pZCBwZXJmb3JtS2V5Ym9hcmRJbnRlcmFjdGlvbnMoY29uc3QgU3RyaW5nJiBo
YW5kbGUsIGNvbnN0IEpTT046OkFycmF5JiBpbnRlcmFjdGlvbnMsIFJlZjxQZXJmb3JtS2V5Ym9h
cmRJbnRlcmFjdGlvbnNDYWxsYmFjaz4mJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBwZXJmb3JtSW50
ZXJhY3Rpb25TZXF1ZW5jZShjb25zdCBTdHJpbmcmIGhhbmRsZSwgY29uc3QgU3RyaW5nKiBvcHRp
b25hbEZyYW1lSGFuZGxlLCBjb25zdCBKU09OOjpBcnJheSYgc291cmNlcywgY29uc3QgSlNPTjo6
QXJyYXkmIHN0ZXBzLCBSZWY8UGVyZm9ybUludGVyYWN0aW9uU2VxdWVuY2VDYWxsYmFjaz4mJikg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBjYW5jZWxJbnRlcmFjdGlvblNlcXVlbmNlKGNvbnN0IFN0cmlu
ZyYgaGFuZGxlLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsRnJhbWVIYW5kbGUsIFJlZjxDYW5jZWxJ
bnRlcmFjdGlvblNlcXVlbmNlQ2FsbGJhY2s+JiYpIG92ZXJyaWRlOwotICAgIHZvaWQgdGFrZVNj
cmVlbnNob3QoY29uc3QgU3RyaW5nJiBoYW5kbGUsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxGcmFt
ZUhhbmRsZSwgY29uc3QgU3RyaW5nKiBvcHRpb25hbE5vZGVIYW5kbGUsIGNvbnN0IGJvb2wqIG9w
dGlvbmFsU2Nyb2xsSW50b1ZpZXdJZk5lZWRlZCwgY29uc3QgYm9vbCogb3B0aW9uYWxDbGlwVG9W
aWV3cG9ydCwgUmVmPFRha2VTY3JlZW5zaG90Q2FsbGJhY2s+JiYpIG92ZXJyaWRlOwotICAgIHZv
aWQgcmVzb2x2ZUNoaWxkRnJhbWVIYW5kbGUoY29uc3QgU3RyaW5nJiBicm93c2luZ0NvbnRleHRI
YW5kbGUsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxGcmFtZUhhbmRsZSwgY29uc3QgaW50KiBvcHRp
b25hbE9yZGluYWwsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxOYW1lLCBjb25zdCBTdHJpbmcqIG9w
dGlvbmFsTm9kZUhhbmRsZSwgUmVmPFJlc29sdmVDaGlsZEZyYW1lSGFuZGxlQ2FsbGJhY2s+JiYp
IG92ZXJyaWRlOwotICAgIHZvaWQgcmVzb2x2ZVBhcmVudEZyYW1lSGFuZGxlKGNvbnN0IFN0cmlu
ZyYgYnJvd3NpbmdDb250ZXh0SGFuZGxlLCBjb25zdCBTdHJpbmcmIGZyYW1lSGFuZGxlLCBSZWY8
UmVzb2x2ZVBhcmVudEZyYW1lSGFuZGxlQ2FsbGJhY2s+JiYpIG92ZXJyaWRlOwotICAgIHZvaWQg
Y29tcHV0ZUVsZW1lbnRMYXlvdXQoY29uc3QgU3RyaW5nJiBicm93c2luZ0NvbnRleHRIYW5kbGUs
IGNvbnN0IFN0cmluZyYgZnJhbWVIYW5kbGUsIGNvbnN0IFN0cmluZyYgbm9kZUhhbmRsZSwgY29u
c3QgYm9vbCogb3B0aW9uYWxTY3JvbGxJbnRvVmlld0lmTmVlZGVkLCBjb25zdCBTdHJpbmcmIGNv
b3JkaW5hdGVTeXN0ZW0sIFJlZjxJbnNwZWN0b3I6OkF1dG9tYXRpb25CYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXI6OkNvbXB1dGVFbGVtZW50TGF5b3V0Q2FsbGJhY2s+JiYpIG92ZXJyaWRlOwotICAg
IHZvaWQgc2VsZWN0T3B0aW9uRWxlbWVudChjb25zdCBTdHJpbmcmIGJyb3dzaW5nQ29udGV4dEhh
bmRsZSwgY29uc3QgU3RyaW5nJiBmcmFtZUhhbmRsZSwgY29uc3QgU3RyaW5nJiBub2RlSGFuZGxl
LCBSZWY8SW5zcGVjdG9yOjpBdXRvbWF0aW9uQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpTZWxl
Y3RPcHRpb25FbGVtZW50Q2FsbGJhY2s+JiYpIG92ZXJyaWRlOwotICAgIHZvaWQgaXNTaG93aW5n
SmF2YVNjcmlwdERpYWxvZyhJbnNwZWN0b3I6OkVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBi
cm93c2luZ0NvbnRleHRIYW5kbGUsIGJvb2wqIHJlc3VsdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBk
aXNtaXNzQ3VycmVudEphdmFTY3JpcHREaWFsb2coSW5zcGVjdG9yOjpFcnJvclN0cmluZyYsIGNv
bnN0IFN0cmluZyYgYnJvd3NpbmdDb250ZXh0SGFuZGxlKSBvdmVycmlkZTsKLSAgICB2b2lkIGFj
Y2VwdEN1cnJlbnRKYXZhU2NyaXB0RGlhbG9nKEluc3BlY3Rvcjo6RXJyb3JTdHJpbmcmLCBjb25z
dCBTdHJpbmcmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBtZXNz
YWdlT2ZDdXJyZW50SmF2YVNjcmlwdERpYWxvZyhJbnNwZWN0b3I6OkVycm9yU3RyaW5nJiwgY29u
c3QgU3RyaW5nJiBicm93c2luZ0NvbnRleHRIYW5kbGUsIFN0cmluZyogdGV4dCkgb3ZlcnJpZGU7
Ci0gICAgdm9pZCBzZXRVc2VySW5wdXRGb3JDdXJyZW50SmF2YVNjcmlwdFByb21wdChJbnNwZWN0
b3I6OkVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBicm93c2luZ0NvbnRleHRIYW5kbGUsIGNv
bnN0IFN0cmluZyYgdGV4dCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRGaWxlc1RvU2VsZWN0Rm9y
RmlsZVVwbG9hZChJbnNwZWN0b3I6OkVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBicm93c2lu
Z0NvbnRleHRIYW5kbGUsIGNvbnN0IEpTT046OkFycmF5JiBmaWxlbmFtZXMsIGNvbnN0IEpTT046
OkFycmF5KiBvcHRpb25hbEZpbGVDb250ZW50cykgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRGaWxl
c0ZvcklucHV0RmlsZVVwbG9hZChjb25zdCBTdHJpbmcmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSwg
Y29uc3QgU3RyaW5nJiBmcmFtZUhhbmRsZSwgY29uc3QgU3RyaW5nJiBub2RlSGFuZGxlLCBjb25z
dCBKU09OOjpBcnJheSYgZmlsZW5hbWVzLCBSZWY8U2V0RmlsZXNGb3JJbnB1dEZpbGVVcGxvYWRD
YWxsYmFjaz4mJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBnZXRBbGxDb29raWVzKGNvbnN0IFN0cmlu
ZyYgYnJvd3NpbmdDb250ZXh0SGFuZGxlLCBSZWY8R2V0QWxsQ29va2llc0NhbGxiYWNrPiYmKSBv
dmVycmlkZTsKLSAgICB2b2lkIGRlbGV0ZVNpbmdsZUNvb2tpZShjb25zdCBTdHJpbmcmIGJyb3dz
aW5nQ29udGV4dEhhbmRsZSwgY29uc3QgU3RyaW5nJiBjb29raWVOYW1lLCBSZWY8RGVsZXRlU2lu
Z2xlQ29va2llQ2FsbGJhY2s+JiYpIG92ZXJyaWRlOwotICAgIHZvaWQgYWRkU2luZ2xlQ29va2ll
KGNvbnN0IFN0cmluZyYgYnJvd3NpbmdDb250ZXh0SGFuZGxlLCBjb25zdCBKU09OOjpPYmplY3Qm
IGNvb2tpZSwgUmVmPEFkZFNpbmdsZUNvb2tpZUNhbGxiYWNrPiYmKSBvdmVycmlkZTsKLSAgICB2
b2lkIGRlbGV0ZUFsbENvb2tpZXMoSW5zcGVjdG9yOjpFcnJvclN0cmluZyYsIGNvbnN0IFN0cmlu
ZyYgYnJvd3NpbmdDb250ZXh0SGFuZGxlKSBvdmVycmlkZTsKLSAgICB2b2lkIGdldFNlc3Npb25Q
ZXJtaXNzaW9ucyhJbnNwZWN0b3I6OkVycm9yU3RyaW5nJiwgUmVmUHRyPEpTT046OkFycmF5T2Y8
SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6U2Vzc2lvblBlcm1pc3Npb25EYXRhPj4m
IG91dF9wZXJtaXNzaW9ucykgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRTZXNzaW9uUGVybWlzc2lv
bnMoSW5zcGVjdG9yOjpFcnJvclN0cmluZyYsIGNvbnN0IEpTT046OkFycmF5JiBpbl9wZXJtaXNz
aW9ucykgb3ZlcnJpZGU7CisgICAgdm9pZCBnZXRCcm93c2luZ0NvbnRleHRzKFJlZjxHZXRCcm93
c2luZ0NvbnRleHRzQ2FsbGJhY2s+JiYpOworICAgIHZvaWQgZ2V0QnJvd3NpbmdDb250ZXh0KGNv
bnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRs
ZSYsIFJlZjxHZXRCcm93c2luZ0NvbnRleHRDYWxsYmFjaz4mJik7CisgICAgdm9pZCBjcmVhdGVC
cm93c2luZ0NvbnRleHQoT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6
QnJvd3NpbmdDb250ZXh0UHJlc2VudGF0aW9uPiYmLCBSZWY8Q3JlYXRlQnJvd3NpbmdDb250ZXh0
Q2FsbGJhY2s+JiYpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9p
ZD4gY2xvc2VCcm93c2luZ0NvbnRleHQoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21h
dGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJik7CisgICAgdm9pZCBzd2l0Y2hUb0Jyb3dzaW5n
Q29udGV4dChjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0Nv
bnRleHRIYW5kbGUmLCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpGcmFt
ZUhhbmRsZSYsIFJlZjxTd2l0Y2hUb0Jyb3dzaW5nQ29udGV4dENhbGxiYWNrPiYmKTsKKyAgICB2
b2lkIHNldFdpbmRvd0ZyYW1lT2ZCcm93c2luZ0NvbnRleHQoY29uc3QgSW5zcGVjdG9yOjpQcm90
b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJiwgUmVmUHRyPEpTT046Ok9i
amVjdD4mJiBvcmlnaW4sIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgc2l6ZSwgUmVmPFNldFdpbmRv
d0ZyYW1lT2ZCcm93c2luZ0NvbnRleHRDYWxsYmFjaz4mJik7CisgICAgdm9pZCBtYXhpbWl6ZVdp
bmRvd09mQnJvd3NpbmdDb250ZXh0KGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRp
b246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYsIFJlZjxNYXhpbWl6ZVdpbmRvd09mQnJvd3NpbmdD
b250ZXh0Q2FsbGJhY2s+JiYpOworICAgIHZvaWQgaGlkZVdpbmRvd09mQnJvd3NpbmdDb250ZXh0
KGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhh
bmRsZSYsIFJlZjxIaWRlV2luZG93T2ZCcm93c2luZ0NvbnRleHRDYWxsYmFjaz4mJik7CisgICAg
dm9pZCBuYXZpZ2F0ZUJyb3dzaW5nQ29udGV4dChjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpB
dXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRIYW5kbGUmLCBjb25zdCBTdHJpbmcmIHVybCwgT3B0
aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6UGFnZUxvYWRTdHJhdGVneT4m
JiwgT3B0aW9uYWw8ZG91YmxlPiYmIHBhZ2VMb2FkVGltZW91dCwgUmVmPE5hdmlnYXRlQnJvd3Np
bmdDb250ZXh0Q2FsbGJhY2s+JiYpOworICAgIHZvaWQgZ29CYWNrSW5Ccm93c2luZ0NvbnRleHQo
Y29uc3QgU3RyaW5nJiwgT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6
UGFnZUxvYWRTdHJhdGVneT4mJiwgT3B0aW9uYWw8ZG91YmxlPiYmIHBhZ2VMb2FkVGltZW91dCwg
UmVmPEdvQmFja0luQnJvd3NpbmdDb250ZXh0Q2FsbGJhY2s+JiYpOworICAgIHZvaWQgZ29Gb3J3
YXJkSW5Ccm93c2luZ0NvbnRleHQoY29uc3QgU3RyaW5nJiwgT3B0aW9uYWw8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6QXV0b21hdGlvbjo6UGFnZUxvYWRTdHJhdGVneT4mJiwgT3B0aW9uYWw8ZG91Ymxl
PiYmIHBhZ2VMb2FkVGltZW91dCwgUmVmPEdvRm9yd2FyZEluQnJvd3NpbmdDb250ZXh0Q2FsbGJh
Y2s+JiYpOworICAgIHZvaWQgcmVsb2FkQnJvd3NpbmdDb250ZXh0KGNvbnN0IFN0cmluZyYsIE9w
dGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OlBhZ2VMb2FkU3RyYXRlZ3k+
JiYsIE9wdGlvbmFsPGRvdWJsZT4mJiBwYWdlTG9hZFRpbWVvdXQsIFJlZjxSZWxvYWRCcm93c2lu
Z0NvbnRleHRDYWxsYmFjaz4mJik7CisgICAgdm9pZCB3YWl0Rm9yTmF2aWdhdGlvblRvQ29tcGxl
dGUoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0
SGFuZGxlJiwgY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6RnJhbWVIYW5k
bGUmLCBPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpQYWdlTG9hZFN0
cmF0ZWd5PiYmLCBPcHRpb25hbDxkb3VibGU+JiYgcGFnZUxvYWRUaW1lb3V0LCBSZWY8V2FpdEZv
ck5hdmlnYXRpb25Ub0NvbXBsZXRlQ2FsbGJhY2s+JiYpOworICAgIHZvaWQgZXZhbHVhdGVKYXZh
U2NyaXB0RnVuY3Rpb24oY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJv
d3NpbmdDb250ZXh0SGFuZGxlJiwgY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlv
bjo6RnJhbWVIYW5kbGUmLCBjb25zdCBTdHJpbmcmIGZ1bmN0aW9uLCBSZWY8SlNPTjo6QXJyYXk+
JiYgYXJndW1lbnRzLCBPcHRpb25hbDxib29sPiYmIGV4cGVjdHNJbXBsaWNpdENhbGxiYWNrQXJn
dW1lbnQsIE9wdGlvbmFsPGRvdWJsZT4mJiBjYWxsYmFja1RpbWVvdXQsIFJlZjxFdmFsdWF0ZUph
dmFTY3JpcHRGdW5jdGlvbkNhbGxiYWNrPiYmKTsKKyAgICB2b2lkIHBlcmZvcm1Nb3VzZUludGVy
YWN0aW9uKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29u
dGV4dEhhbmRsZSYsIFJlZjxKU09OOjpPYmplY3Q+JiYgcmVxdWVzdGVkUG9zaXRpb24sIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246Ok1vdXNlQnV0dG9uLCBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpBdXRvbWF0aW9uOjpNb3VzZUludGVyYWN0aW9uLCBSZWY8SlNPTjo6QXJyYXk+JiYga2V5
TW9kaWZpZXJzLCBSZWY8UGVyZm9ybU1vdXNlSW50ZXJhY3Rpb25DYWxsYmFjaz4mJik7CisgICAg
dm9pZCBwZXJmb3JtS2V5Ym9hcmRJbnRlcmFjdGlvbnMoY29uc3QgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJiwgUmVmPEpTT046OkFycmF5PiYm
IGludGVyYWN0aW9ucywgUmVmPFBlcmZvcm1LZXlib2FyZEludGVyYWN0aW9uc0NhbGxiYWNrPiYm
KTsKKyAgICB2b2lkIHBlcmZvcm1JbnRlcmFjdGlvblNlcXVlbmNlKGNvbnN0IEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYsIGNvbnN0IEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkZyYW1lSGFuZGxlJiwgUmVmPEpTT046OkFycmF5
PiYmIHNvdXJjZXMsIFJlZjxKU09OOjpBcnJheT4mJiBzdGVwcywgUmVmPFBlcmZvcm1JbnRlcmFj
dGlvblNlcXVlbmNlQ2FsbGJhY2s+JiYpOworICAgIHZvaWQgY2FuY2VsSW50ZXJhY3Rpb25TZXF1
ZW5jZShjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRl
eHRIYW5kbGUmLCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpGcmFtZUhh
bmRsZSYsIFJlZjxDYW5jZWxJbnRlcmFjdGlvblNlcXVlbmNlQ2FsbGJhY2s+JiYpOworICAgIHZv
aWQgdGFrZVNjcmVlbnNob3QoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6
QnJvd3NpbmdDb250ZXh0SGFuZGxlJiwgY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21h
dGlvbjo6RnJhbWVIYW5kbGUmLCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9u
OjpOb2RlSGFuZGxlJiwgT3B0aW9uYWw8Ym9vbD4mJiBzY3JvbGxJbnRvVmlld0lmTmVlZGVkLCBP
cHRpb25hbDxib29sPiYmIGNsaXBUb1ZpZXdwb3J0LCBSZWY8VGFrZVNjcmVlbnNob3RDYWxsYmFj
az4mJik7CisgICAgdm9pZCByZXNvbHZlQ2hpbGRGcmFtZUhhbmRsZShjb25zdCBJbnNwZWN0b3I6
OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRIYW5kbGUmLCBjb25zdCBJbnNw
ZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpGcmFtZUhhbmRsZSYsIE9wdGlvbmFsPGludD4m
JiBvcmRpbmFsLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkF1dG9tYXRpb246Ok5vZGVIYW5kbGUmLCBSZWY8UmVzb2x2ZUNoaWxkRnJhbWVIYW5kbGVDYWxs
YmFjaz4mJik7CisgICAgdm9pZCByZXNvbHZlUGFyZW50RnJhbWVIYW5kbGUoY29uc3QgSW5zcGVj
dG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJiwgY29uc3Qg
SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6RnJhbWVIYW5kbGUmLCBSZWY8UmVzb2x2
ZVBhcmVudEZyYW1lSGFuZGxlQ2FsbGJhY2s+JiYpOworICAgIHZvaWQgY29tcHV0ZUVsZW1lbnRM
YXlvdXQoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250
ZXh0SGFuZGxlJiwgY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6RnJhbWVI
YW5kbGUmLCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpOb2RlSGFuZGxl
JiwgT3B0aW9uYWw8Ym9vbD4mJiBzY3JvbGxJbnRvVmlld0lmTmVlZGVkLCBJbnNwZWN0b3I6OlBy
b3RvY29sOjpBdXRvbWF0aW9uOjpDb29yZGluYXRlU3lzdGVtLCBSZWY8Q29tcHV0ZUVsZW1lbnRM
YXlvdXRDYWxsYmFjaz4mJik7CisgICAgdm9pZCBzZWxlY3RPcHRpb25FbGVtZW50KGNvbnN0IElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYsIGNv
bnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkZyYW1lSGFuZGxlJiwgY29uc3Qg
SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6Tm9kZUhhbmRsZSYsIFJlZjxTZWxlY3RP
cHRpb25FbGVtZW50Q2FsbGJhY2s+JiYpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8Ym9vbD4gaXNTaG93aW5nSmF2YVNjcmlwdERpYWxvZyhjb25zdCBJbnNwZWN0b3I6
OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRIYW5kbGUmKTsKKyAgICBJbnNw
ZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGRpc21pc3NDdXJyZW50SmF2YVNj
cmlwdERpYWxvZyhjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2lu
Z0NvbnRleHRIYW5kbGUmKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09y
PHZvaWQ+IGFjY2VwdEN1cnJlbnRKYXZhU2NyaXB0RGlhbG9nKGNvbnN0IEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYpOworICAgIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8U3RyaW5nPiBtZXNzYWdlT2ZDdXJyZW50SmF2YVNj
cmlwdERpYWxvZyhjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2lu
Z0NvbnRleHRIYW5kbGUmKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09y
PHZvaWQ+IHNldFVzZXJJbnB1dEZvckN1cnJlbnRKYXZhU2NyaXB0UHJvbXB0KGNvbnN0IEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYsIGNvbnN0
IFN0cmluZyYgdGV4dCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2
b2lkPiBzZXRGaWxlc1RvU2VsZWN0Rm9yRmlsZVVwbG9hZChjb25zdCBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRIYW5kbGUmLCBSZWY8SlNPTjo6QXJyYXk+
JiYgZmlsZW5hbWVzLCBSZWZQdHI8SlNPTjo6QXJyYXk+JiYgZmlsZUNvbnRlbnRzKTsKKyAgICB2
b2lkIHNldEZpbGVzRm9ySW5wdXRGaWxlVXBsb2FkKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYsIGNvbnN0IEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkF1dG9tYXRpb246OkZyYW1lSGFuZGxlJiwgY29uc3QgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6QXV0b21hdGlvbjo6Tm9kZUhhbmRsZSYsIFJlZjxKU09OOjpBcnJheT4mJiBmaWxlbmFtZXMs
IFJlZjxTZXRGaWxlc0ZvcklucHV0RmlsZVVwbG9hZENhbGxiYWNrPiYmKTsKKyAgICB2b2lkIGdl
dEFsbENvb2tpZXMoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3Np
bmdDb250ZXh0SGFuZGxlJiwgUmVmPEdldEFsbENvb2tpZXNDYWxsYmFjaz4mJik7CisgICAgdm9p
ZCBkZWxldGVTaW5nbGVDb29raWUoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlv
bjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJiwgY29uc3QgU3RyaW5nJiBjb29raWVOYW1lLCBSZWY8
RGVsZXRlU2luZ2xlQ29va2llQ2FsbGJhY2s+JiYpOworICAgIHZvaWQgYWRkU2luZ2xlQ29va2ll
KGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhh
bmRsZSYsIFJlZjxKU09OOjpPYmplY3Q+JiYgY29va2llLCBSZWY8QWRkU2luZ2xlQ29va2llQ2Fs
bGJhY2s+JiYpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4g
ZGVsZXRlQWxsQ29va2llcyhjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpC
cm93c2luZ0NvbnRleHRIYW5kbGUmKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0
cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246
OlNlc3Npb25QZXJtaXNzaW9uRGF0YT4+PiBnZXRTZXNzaW9uUGVybWlzc2lvbnMoKTsKKyAgICBJ
bnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHNldFNlc3Npb25QZXJtaXNz
aW9ucyhSZWY8SlNPTjo6QXJyYXk+JiYpOwogCiAjaWYgUExBVEZPUk0oTUFDKQotICAgIHZvaWQg
aW5zcGVjdEJyb3dzaW5nQ29udGV4dChjb25zdCBTdHJpbmcmLCBjb25zdCBib29sKiBvcHRpb25h
bEVuYWJsZUF1dG9DYXB0dXJpbmcsIFJlZjxJbnNwZWN0QnJvd3NpbmdDb250ZXh0Q2FsbGJhY2s+
JiYpIG92ZXJyaWRlOworICAgIHZvaWQgaW5zcGVjdEJyb3dzaW5nQ29udGV4dChjb25zdCBJbnNw
ZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRIYW5kbGUmLCBPcHRp
b25hbDxib29sPiYmIGVuYWJsZUF1dG9DYXB0dXJpbmcsIFJlZjxJbnNwZWN0QnJvd3NpbmdDb250
ZXh0Q2FsbGJhY2s+JiYpOwogI2VuZGlmCiAKICAgICAvLyBFdmVudCBTaW11bGF0aW9uIFN1cHBv
cnQuCkBAIC0yMzgsNyArMjM4LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGhpZGVXaW5kb3dGb3JQ
YWdlKFdlYlBhZ2VQcm94eSYsIFdURjo6Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKIAog
ICAgIC8vIElQQzo6TWVzc2FnZVJlY2VpdmVyIChJbXBsZW1lbnRlZCBieSBnZW5lcmF0ZWQgY29k
ZSBpbiBXZWJBdXRvbWF0aW9uU2Vzc2lvbk1lc3NhZ2VSZWNlaXZlci5jcHApLgotICAgIHZvaWQg
ZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgb3ZlcnJp
ZGU7CisgICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRl
Y29kZXImKTsKIAogICAgIC8vIENhbGxlZCBieSBXZWJBdXRvbWF0aW9uU2Vzc2lvbiBtZXNzYWdl
cy4KICAgICB2b2lkIGRpZEV2YWx1YXRlSmF2YVNjcmlwdEZ1bmN0aW9uKHVpbnQ2NF90IGNhbGxi
YWNrSUQsIGNvbnN0IFN0cmluZyYgcmVzdWx0LCBjb25zdCBTdHJpbmcmIGVycm9yVHlwZSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRp
b25TZXNzaW9uTWFjcm9zLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL1dl
YkF1dG9tYXRpb25TZXNzaW9uTWFjcm9zLmgKaW5kZXggOTNhZjVhYmM3MDhiZDU5OGYwZjQwYmNj
Mjk0ODUyYTM3MDUyOTdhZS4uNGQzNmQ2NGZkNDBmNDNmM2U3ODFkNWU1OTVhM2JlODRjY2VlZDY1
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRv
bWF0aW9uU2Vzc2lvbk1hY3Jvcy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9t
YXRpb24vV2ViQXV0b21hdGlvblNlc3Npb25NYWNyb3MuaApAQCAtNDQsMTQgKzQ0LDEyIEBACiAv
LyBDb252ZW5pZW5jZSBtYWNyb3MgZm9yIGZpbGxpbmcgaW4gdGhlIGVycm9yIHN0cmluZyBvZiBz
eW5jaHJvbm91cyBjb21tYW5kcyBpbiBiYWlsb3V0IGJyYW5jaGVzLgogI2RlZmluZSBTWU5DX0ZB
SUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SKGVycm9yTmFtZSkgXAogZG8geyBcCi0gICAgZXJyb3JT
dHJpbmcgPSBTVFJJTkdfRk9SX1BSRURFRklORURfRVJST1JfTkFNRShlcnJvck5hbWUpOyBcCi0g
ICAgcmV0dXJuOyBcCisgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKFNUUklOR19GT1JfUFJFREVG
SU5FRF9FUlJPUl9OQU1FKGVycm9yTmFtZSkpOyBcCiB9IHdoaWxlIChmYWxzZSkKIAogI2RlZmlu
ZSBTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxTKGVycm9yTmFtZSwg
ZGV0YWlsc1N0cmluZykgXAogZG8geyBcCi0gICAgZXJyb3JTdHJpbmcgPSBTVFJJTkdfRk9SX1BS
RURFRklORURfRVJST1JfTkFNRV9BTkRfREVUQUlMUyhlcnJvck5hbWUsIGRldGFpbHNTdHJpbmcp
OyBcCi0gICAgcmV0dXJuOyBcCisgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKFNUUklOR19GT1Jf
UFJFREVGSU5FRF9FUlJPUl9OQU1FX0FORF9ERVRBSUxTKGVycm9yTmFtZSwgZGV0YWlsc1N0cmlu
ZykpOyBcCiB9IHdoaWxlIChmYWxzZSkKIAogI2RlZmluZSBBU1lOQ19GQUlMX1dJVEhfUFJFREVG
SU5FRF9FUlJPUihlcnJvck5hbWUpIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0F1dG9tYXRpb24vbWFjL1dlYkF1dG9tYXRpb25TZXNzaW9uTWFjLm1tIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9tYWMvV2ViQXV0b21hdGlvblNlc3Npb25NYWMubW0K
aW5kZXggM2NhZWNjMzM3ZDA5OTc5NTM0ZTdmY2JmNWUxZTEwYmQ4MzVmNzZjZC4uOWRiZjJlMDc4
N2FhOTk3MDZjNmYyOTA3NTRhOTEzOTBhYmYxZjcwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQXV0b21hdGlvbi9tYWMvV2ViQXV0b21hdGlvblNlc3Npb25NYWMubW0KKysr
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9tYWMvV2ViQXV0b21hdGlvblNl
c3Npb25NYWMubW0KQEAgLTQ0LDcgKzQ0LDcgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAK
ICNwcmFnbWEgbWFyayBDb21tYW5kcyBmb3IgJ1BMQVRGT1JNKE1BQyknCiAKLXZvaWQgV2ViQXV0
b21hdGlvblNlc3Npb246Omluc3BlY3RCcm93c2luZ0NvbnRleHQoY29uc3QgU3RyaW5nJiBoYW5k
bGUsIGNvbnN0IGJvb2wqIG9wdGlvbmFsRW5hYmxlQXV0b0NhcHR1cmluZywgUmVmPEluc3BlY3RC
cm93c2luZ0NvbnRleHRDYWxsYmFjaz4mJiBjYWxsYmFjaykKK3ZvaWQgV2ViQXV0b21hdGlvblNl
c3Npb246Omluc3BlY3RCcm93c2luZ0NvbnRleHQoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6
QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJiBoYW5kbGUsIE9wdGlvbmFsPGJvb2w+
JiYgZW5hYmxlQXV0b0NhcHR1cmluZywgUmVmPEluc3BlY3RCcm93c2luZ0NvbnRleHRDYWxsYmFj
az4mJiBjYWxsYmFjaykKIHsKICAgICBXZWJQYWdlUHJveHkqIHBhZ2UgPSB3ZWJQYWdlUHJveHlG
b3JIYW5kbGUoaGFuZGxlKTsKICAgICBpZiAoIXBhZ2UpCkBAIC02MCw3ICs2MCw3IEBAIHZvaWQg
V2ViQXV0b21hdGlvblNlc3Npb246Omluc3BlY3RCcm93c2luZ0NvbnRleHQoY29uc3QgU3RyaW5n
JiBoYW5kbGUsIGNvbnN0IGJvCiAgICAgICAgIHBhZ2UtPmluc3BlY3RvcigpLT5zaG93KCk7CiAK
ICAgICAgICAgLy8gU3RhcnQgY29sbGVjdGluZyBwcm9maWxlIGluZm9ybWF0aW9uIGltbWVkaWF0
ZWx5IHNvIHRoZSBlbnRpcmUgc2Vzc2lvbiBpcyBjYXB0dXJlZC4KLSAgICAgICAgaWYgKG9wdGlv
bmFsRW5hYmxlQXV0b0NhcHR1cmluZyAmJiAqb3B0aW9uYWxFbmFibGVBdXRvQ2FwdHVyaW5nKQor
ICAgICAgICBpZiAoZW5hYmxlQXV0b0NhcHR1cmluZyAmJiAqZW5hYmxlQXV0b0NhcHR1cmluZykK
ICAgICAgICAgICAgIHBhZ2UtPmluc3BlY3RvcigpLT50b2dnbGVQYWdlUHJvZmlsaW5nKCk7CiAg
ICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL0Fn
ZW50cy9JbnNwZWN0b3JCcm93c2VyQWdlbnQuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
SW5zcGVjdG9yL0FnZW50cy9JbnNwZWN0b3JCcm93c2VyQWdlbnQuY3BwCmluZGV4IGMxZmZhNmNm
NjE0NjY2ZTRjOGI1ZWM1YjQzY2M2NGY4MDcwZTY1OTkuLmRmNGExMGE0MGY4YjAyZmM1ZDc1MDll
OTZjNTk0ZWJiYzVhYzlmMTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0lu
c3BlY3Rvci9BZ2VudHMvSW5zcGVjdG9yQnJvd3NlckFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvQWdlbnRzL0luc3BlY3RvckJyb3dzZXJBZ2VudC5jcHAK
QEAgLTYwLDM1ICs2MCwzNCBAQCB2b2lkIEluc3BlY3RvckJyb3dzZXJBZ2VudDo6ZGlkQ3JlYXRl
RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRSb3V0ZQogCiB2b2lkIEluc3Bl
Y3RvckJyb3dzZXJBZ2VudDo6d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9y
OjpEaXNjb25uZWN0UmVhc29uKQogewotICAgIEVycm9yU3RyaW5nIGlnbm9yZWQ7Ci0gICAgZGlz
YWJsZShpZ25vcmVkKTsKKyAgICBkaXNhYmxlKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQnJvd3Nl
ckFnZW50OjplbmFibGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nKQorSW5zcGVjdG9yOjpQcm90
b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JCcm93c2VyQWdlbnQ6OmVuYWJsZSgp
CiB7Ci0gICAgaWYgKGVuYWJsZWQoKSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJCcm93c2Vy
IGRvbWFpbiBhbHJlYWR5IGVuYWJsZWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAg
aWYgKGVuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJCcm93c2VyIGRv
bWFpbiBhbHJlYWR5IGVuYWJsZWQiX3MpOwogCiAgICAgbV9pbnNwZWN0ZWRQYWdlLmluc3BlY3Rv
ckNvbnRyb2xsZXIoKS5zZXRFbmFibGVkQnJvd3NlckFnZW50KHRoaXMpOwogCiAgICAgYXV0byog
aW5zcGVjdG9yID0gbV9pbnNwZWN0ZWRQYWdlLmluc3BlY3RvcigpOwogICAgIEFTU0VSVChpbnNw
ZWN0b3IpOwogICAgIG1faW5zcGVjdGVkUGFnZS5pbnNwZWN0b3JDbGllbnQoKS5icm93c2VyRG9t
YWluRW5hYmxlZChtX2luc3BlY3RlZFBhZ2UsICppbnNwZWN0b3IpOworCisgICAgcmV0dXJuIHsg
fTsKIH0KIAotdm9pZCBJbnNwZWN0b3JCcm93c2VyQWdlbnQ6OmRpc2FibGUoRXJyb3JTdHJpbmcm
IGVycm9yU3RyaW5nKQorSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJ
bnNwZWN0b3JCcm93c2VyQWdlbnQ6OmRpc2FibGUoKQogewotICAgIGlmICghZW5hYmxlZCgpKSB7
Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIkJyb3dzZXIgZG9tYWluIGFscmVhZHkgZGlzYWJsZWQi
X3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKCFlbmFibGVkKCkpCisgICAgICAg
IHJldHVybiBtYWtlVW5leHBlY3RlZCgiQnJvd3NlciBkb21haW4gYWxyZWFkeSBkaXNhYmxlZCJf
cyk7CiAKICAgICBtX2luc3BlY3RlZFBhZ2UuaW5zcGVjdG9yQ29udHJvbGxlcigpLnNldEVuYWJs
ZWRCcm93c2VyQWdlbnQobnVsbHB0cik7CiAKICAgICBpZiAoYXV0byogaW5zcGVjdG9yID0gbV9p
bnNwZWN0ZWRQYWdlLmluc3BlY3RvcigpKQogICAgICAgICBtX2luc3BlY3RlZFBhZ2UuaW5zcGVj
dG9yQ2xpZW50KCkuYnJvd3NlckRvbWFpbkRpc2FibGVkKG1faW5zcGVjdGVkUGFnZSwgKmluc3Bl
Y3Rvcik7CisKKyAgICByZXR1cm4geyB9OwogfQogCiB2b2lkIEluc3BlY3RvckJyb3dzZXJBZ2Vu
dDo6ZXh0ZW5zaW9uc0VuYWJsZWQoSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mJiBleHRlbnNpb25J
RFRvTmFtZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9B
Z2VudHMvSW5zcGVjdG9yQnJvd3NlckFnZW50LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9J
bnNwZWN0b3IvQWdlbnRzL0luc3BlY3RvckJyb3dzZXJBZ2VudC5oCmluZGV4IGExMzk1ODNjZDhk
ODQyMzI5ZjRiM2YzNTIxYjM2MjQwZWFiNTM5MTEuLjMzMWJmYWJiNTU3NDRlZTk4YTdmZjBmN2Rh
NzY5NTMxYWM0YzcyNzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3Bl
Y3Rvci9BZ2VudHMvSW5zcGVjdG9yQnJvd3NlckFnZW50LmgKKysrIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvSW5zcGVjdG9yL0FnZW50cy9JbnNwZWN0b3JCcm93c2VyQWdlbnQuaApAQCAtMzMs
MjMgKzMzLDIyIEBACiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgV2ViUGFnZVByb3h5Owot
dHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiAKIGNsYXNzIEluc3BlY3RvckJyb3dzZXJBZ2Vu
dCBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3JBZ2VudEJhc2UsIHB1YmxpYyBJbnNwZWN0b3I6OkJy
b3dzZXJCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KEluc3BlY3RvckJyb3dzZXJBZ2VudCk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBw
dWJsaWM6CiAgICAgSW5zcGVjdG9yQnJvd3NlckFnZW50KFdlYlBhZ2VBZ2VudENvbnRleHQmKTsK
LSAgICB+SW5zcGVjdG9yQnJvd3NlckFnZW50KCkgb3ZlcnJpZGU7CisgICAgfkluc3BlY3RvckJy
b3dzZXJBZ2VudCgpOwogICAgIGJvb2wgZW5hYmxlZCgpIGNvbnN0OwogCiAgICAgLy8gSW5zcGVj
dG9yQWdlbnRCYXNlCi0gICAgdm9pZCBkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVj
dG9yOjpGcm9udGVuZFJvdXRlciosIEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXIqKSBvdmVy
cmlkZTsKLSAgICB2b2lkIHdpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6
RGlzY29ubmVjdFJlYXNvbikgb3ZlcnJpZGU7CisgICAgdm9pZCBkaWRDcmVhdGVGcm9udGVuZEFu
ZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9udGVuZFJvdXRlciosIEluc3BlY3Rvcjo6QmFja2VuZERp
c3BhdGNoZXIqKTsKKyAgICB2b2lkIHdpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3Bl
Y3Rvcjo6RGlzY29ubmVjdFJlYXNvbik7CiAKICAgICAvLyBCcm93c2VyQmFja2VuZERpc3BhdGNo
ZXJIYW5kbGVyCi0gICAgdm9pZCBlbmFibGUoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2
b2lkIGRpc2FibGUoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKKyAgICBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGVuYWJsZSgpOworICAgIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZGlzYWJsZSgpOwogCiAgICAgdm9pZCBleHRlbnNpb25z
RW5hYmxlZChIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYmKTsKICAgICB2b2lkIGV4dGVuc2lvbnNE
aXNhYmxlZChIYXNoU2V0PFN0cmluZz4mJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9JbnNwZWN0b3Ivc29ja2V0L1JlbW90ZUluc3BlY3RvckNsaWVudC5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3Ivc29ja2V0L1JlbW90ZUluc3BlY3RvckNsaWVu
dC5jcHAKaW5kZXggZmJlZTVjZGZmMzhiM2M3NzlhMjYyNzM4YzQxOTUxNWI0NDU4YjlkZC4uNWY1
MTdmMTBhNDg3NzBkOWNiODljZjg4ZjlkNjAzNzhiYmQ1MmFkNCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JDbGllbnQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9zb2NrZXQvUmVtb3Rl
SW5zcGVjdG9yQ2xpZW50LmNwcApAQCAtMjA2LDI1ICsyMDYsMzggQEAgdm9pZCBSZW1vdGVJbnNw
ZWN0b3JDbGllbnQ6OnNldFRhcmdldExpc3QoY29uc3QgRXZlbnQmIGV2ZW50KQogICAgIGlmICgh
ZXZlbnQuY29ubmVjdGlvbklEIHx8ICFldmVudC5tZXNzYWdlKQogICAgICAgICByZXR1cm47CiAK
LSAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IG1lc3NhZ2VWYWx1ZTsKLSAgICBpZiAoIUpTT046OlZh
bHVlOjpwYXJzZUpTT04oZXZlbnQubWVzc2FnZS52YWx1ZSgpLCBtZXNzYWdlVmFsdWUpKQorICAg
IGF1dG8gbWVzc2FnZVZhbHVlID0gSlNPTjo6VmFsdWU6OnBhcnNlSlNPTihldmVudC5tZXNzYWdl
LnZhbHVlKCkpOworICAgIGlmICghbWVzc2FnZVZhbHVlKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBSZWZQdHI8SlNPTjo6QXJyYXk+IG1lc3NhZ2VBcnJheTsKLSAgICBpZiAoIW1lc3NhZ2VWYWx1
ZS0+YXNBcnJheShtZXNzYWdlQXJyYXkpKQorICAgIGF1dG8gbWVzc2FnZUFycmF5ID0gbWVzc2Fn
ZVZhbHVlLT5hc0FycmF5KCk7CisgICAgaWYgKCFtZXNzYWdlQXJyYXkpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIFZlY3RvcjxUYXJnZXQ+IHRhcmdldExpc3Q7CiAgICAgZm9yIChhdXRvJiBpdGVt
VmFsdWUgOiAqbWVzc2FnZUFycmF5KSB7Ci0gICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IGl0
ZW1PYmplY3Q7Ci0gICAgICAgIGlmICghaXRlbVZhbHVlLT5hc09iamVjdChpdGVtT2JqZWN0KSkK
KyAgICAgICAgYXV0byBpdGVtT2JqZWN0ID0gaXRlbVZhbHVlLT5hc09iamVjdCgpOworICAgICAg
ICBpZiAoIWl0ZW1PYmplY3QpCiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBUYXJn
ZXQgdGFyZ2V0OwotICAgICAgICBpZiAoIWl0ZW1PYmplY3QtPmdldEludGVnZXIoInRhcmdldElE
Il9zLCB0YXJnZXQuaWQpCi0gICAgICAgICAgICB8fCAhaXRlbU9iamVjdC0+Z2V0U3RyaW5nKCJu
YW1lIl9zLCB0YXJnZXQubmFtZSkKLSAgICAgICAgICAgIHx8ICFpdGVtT2JqZWN0LT5nZXRTdHJp
bmcoInVybCJfcywgdGFyZ2V0LnVybCkKLSAgICAgICAgICAgIHx8ICFpdGVtT2JqZWN0LT5nZXRT
dHJpbmcoInR5cGUiX3MsIHRhcmdldC50eXBlKSkKKworICAgICAgICBhdXRvIHRhcmdldElEID0g
aXRlbU9iamVjdC0+Z2V0SW50ZWdlcigidGFyZ2V0SUQiX3MpOworICAgICAgICBpZiAoIXRhcmdl
dElEKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgdGFyZ2V0LnRhcmdldElEID0g
KnRhcmdldElEOworCisgICAgICAgIHRhcmdldC5uYW1lID0gaXRlbU9iamVjdC0+Z2V0U3RyaW5n
KCJuYW1lIl9zKTsKKyAgICAgICAgaWYgKCF0YXJnZXQubmFtZSkKKyAgICAgICAgICAgIGNvbnRp
bnVlOworCisgICAgICAgIHRhcmdldC51cmwgPSBpdGVtT2JqZWN0LT5nZXRTdHJpbmcoInVybCJf
cyk7CisgICAgICAgIGlmICghdGFyZ2V0LnVybCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisg
ICAgICAgIHRhcmdldC50eXBlID0gaXRlbU9iamVjdC0+Z2V0U3RyaW5nKCJ0eXBlIl9zKTsKKyAg
ICAgICAgaWYgKCF0YXJnZXQudHlwZSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAg
IHRhcmdldExpc3QuYXBwZW5kKFdURk1vdmUodGFyZ2V0KSk7CmRpZmYgLS1naXQgYS9Ub29scy9D
aGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZTg4Yjk4MWM4N2M5YmEyYTFiODg0MmQ4
NjkzMmE3YjZlM2VhNTJlMi4uNmU3ODkxMzc4N2RlOTRlZmNlZDYxNWU1MTRjNzA5ZTc1N2I0OTE2
OCAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDEzIEBACisyMDIwLTA5LTA4ICBEZXZpbiBSb3Vzc28gIDxkcm91c3NvQGFwcGxlLmNv
bT4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBtb2Rlcm5pemUgZ2VuZXJhdGVkIGJhY2tlbmQg
cHJvdG9jb2wgY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjE2MzAyCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS82ODU0NzY0OT4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkv
VGVzdHMvV1RGL0pTT05WYWx1ZS5jcHA6CisKIDIwMjAtMDktMDQgIEFsZXggQ2hyaXN0ZW5zZW4g
IDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBNb3ZlIFBERiBoZWFkcy11cCBk
aXNwbGF5IHRvIFVJIHByb2Nlc3Mgb24gbWFjT1MKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV1RGL0pTT05WYWx1ZS5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dURi9KU09OVmFsdWUuY3BwCmluZGV4IDkxZWM0MWMzYjdkNDE2MmQyM2VjNDVlNGRiMzYzN2E5
M2NkY2JiNDUuLmMzODA2Mjc2NDRkZjY5MTY2NDAxNmZkYzZjMTE0OTA4ZmE4ZjgyMTUgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0pTT05WYWx1ZS5jcHAKKysrIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvSlNPTlZhbHVlLmNwcApAQCAtNDIsODIgKzQy
LDY4IEBAIFRFU1QoSlNPTlZhbHVlLCBDb25zdHJ1Y3QpCiAgICAgewogICAgICAgICBSZWY8SlNP
Tjo6VmFsdWU+IHZhbHVlID0gSlNPTjo6VmFsdWU6OmNyZWF0ZSh0cnVlKTsKICAgICAgICAgRVhQ
RUNUX1RSVUUodmFsdWUtPnR5cGUoKSA9PSBKU09OOjpWYWx1ZTo6VHlwZTo6Qm9vbGVhbik7Ci0g
ICAgICAgIGJvb2wgYm9vbGVhblZhbHVlOwotICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+YXNC
b29sZWFuKGJvb2xlYW5WYWx1ZSkpOwotICAgICAgICBFWFBFQ1RfRVEoYm9vbGVhblZhbHVlLCB0
cnVlKTsKKyAgICAgICAgYXV0byBib29sZWFuVmFsdWUgPSB2YWx1ZS0+YXNCb29sZWFuKCk7Cisg
ICAgICAgIEVYUEVDVF9UUlVFKGJvb2xlYW5WYWx1ZSk7CisgICAgICAgIEVYUEVDVF9FUSgqYm9v
bGVhblZhbHVlLCB0cnVlKTsKIAogICAgICAgICB2YWx1ZSA9IEpTT046OlZhbHVlOjpjcmVhdGUo
ZmFsc2UpOwogICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+dHlwZSgpID09IEpTT046OlZhbHVl
OjpUeXBlOjpCb29sZWFuKTsKLSAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUtPmFzQm9vbGVhbihi
b29sZWFuVmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX0VRKGJvb2xlYW5WYWx1ZSwgZmFsc2UpOwor
ICAgICAgICBib29sZWFuVmFsdWUgPSB2YWx1ZS0+YXNCb29sZWFuKCk7CisgICAgICAgIEVYUEVD
VF9UUlVFKGJvb2xlYW5WYWx1ZSk7CisgICAgICAgIEVYUEVDVF9FUSgqYm9vbGVhblZhbHVlLCBm
YWxzZSk7CiAgICAgfQogCiAgICAgewogICAgICAgICBSZWY8SlNPTjo6VmFsdWU+IHZhbHVlID0g
SlNPTjo6VmFsdWU6OmNyZWF0ZSgxKTsKICAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUtPnR5cGUo
KSA9PSBKU09OOjpWYWx1ZTo6VHlwZTo6SW50ZWdlcik7Ci0gICAgICAgIGludCBpbnRlZ2VyVmFs
dWU7Ci0gICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlLT5hc0ludGVnZXIoaW50ZWdlclZhbHVlKSk7
Ci0gICAgICAgIEVYUEVDVF9FUShpbnRlZ2VyVmFsdWUsIDEpOworICAgICAgICBhdXRvIGludGVn
ZXJWYWx1ZSA9IHZhbHVlLT5hc0ludGVnZXIoKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoaW50ZWdl
clZhbHVlKTsKKyAgICAgICAgRVhQRUNUX0VRKCppbnRlZ2VyVmFsdWUsIDEpOwogCi0gICAgICAg
IC8vIERvdWJsZXMgY2FuIGJlIGdldCBhcyBpbnRlZ2VycywgYnV0IG5vdCB0aGUgb3RoZXIgd2F5
IGFyb3VuZC4KLSAgICAgICAgZmxvYXQgZmxvYXRWYWx1ZTsKLSAgICAgICAgRVhQRUNUX0ZBTFNF
KHZhbHVlLT5hc0RvdWJsZShmbG9hdFZhbHVlKSk7CisgICAgICAgIC8vIEludGVnZXJzIGNhbiBi
ZSBnZXQgYXMgZG91Ymxlcy4KKyAgICAgICAgYXV0byBkb3VibGVWYWx1ZSA9IHZhbHVlLT5hc0Rv
dWJsZSgpOworICAgICAgICBFWFBFQ1RfVFJVRShkb3VibGVWYWx1ZSk7CisgICAgICAgIEVYUEVD
VF9FUSgqZG91YmxlVmFsdWUsIDEpOwogCiAgICAgICAgIHZhbHVlID0gSlNPTjo6VmFsdWU6OmNy
ZWF0ZShzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpKTsKLSAgICAgICAgRVhQRUNUX1RS
VUUodmFsdWUtPmFzSW50ZWdlcihpbnRlZ2VyVmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX0VRKGlu
dGVnZXJWYWx1ZSwgc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSk7Ci0gICAgICAgIHVu
c2lnbmVkIHVuc2lnbmVkVmFsdWU7Ci0gICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlLT5hc0ludGVn
ZXIodW5zaWduZWRWYWx1ZSkpOwotICAgICAgICBsb25nIGxvbmdWYWx1ZTsKLSAgICAgICAgRVhQ
RUNUX1RSVUUodmFsdWUtPmFzSW50ZWdlcihsb25nVmFsdWUpKTsKLSAgICAgICAgbG9uZyBsb25n
IGxvbmdMb25nVmFsdWU7Ci0gICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlLT5hc0ludGVnZXIobG9u
Z0xvbmdWYWx1ZSkpOwotICAgICAgICB1bnNpZ25lZCBsb25nIHVuc2lnbmVkTG9uZ1ZhbHVlOwot
ICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+YXNJbnRlZ2VyKHVuc2lnbmVkTG9uZ1ZhbHVlKSk7
Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyB1bnNpZ25lZExvbmdMb25nVmFsdWU7Ci0gICAg
ICAgIEVYUEVDVF9UUlVFKHZhbHVlLT5hc0ludGVnZXIodW5zaWduZWRMb25nTG9uZ1ZhbHVlKSk7
CisgICAgICAgIGludGVnZXJWYWx1ZSA9IHZhbHVlLT5hc0ludGVnZXIoKTsKKyAgICAgICAgRVhQ
RUNUX1RSVUUoaW50ZWdlclZhbHVlKTsKKyAgICAgICAgRVhQRUNUX0VRKCppbnRlZ2VyVmFsdWUs
IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpOwogICAgIH0KIAogICAgIHsKICAgICAg
ICAgUmVmPEpTT046OlZhbHVlPiB2YWx1ZSA9IEpTT046OlZhbHVlOjpjcmVhdGUoMS41KTsKICAg
ICAgICAgRVhQRUNUX1RSVUUodmFsdWUtPnR5cGUoKSA9PSBKU09OOjpWYWx1ZTo6VHlwZTo6RG91
YmxlKTsKLSAgICAgICAgZG91YmxlIGRvdWJsZVZhbHVlOwotICAgICAgICBFWFBFQ1RfVFJVRSh2
YWx1ZS0+YXNEb3VibGUoZG91YmxlVmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX0VRKGRvdWJsZVZh
bHVlLCAxLjUpOwogCi0gICAgICAgIGZsb2F0IGZsb2F0VmFsdWU7Ci0gICAgICAgIEVYUEVDVF9U
UlVFKHZhbHVlLT5hc0RvdWJsZShmbG9hdFZhbHVlKSk7CisgICAgICAgIGF1dG8gZG91YmxlVmFs
dWUgPSB2YWx1ZS0+YXNEb3VibGUoKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoZG91YmxlVmFsdWUp
OworICAgICAgICBFWFBFQ1RfRVEoKmRvdWJsZVZhbHVlLCAxLjUpOwogCi0gICAgICAgIGludCBp
bnRlZ2VyVmFsdWU7Ci0gICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlLT5hc0ludGVnZXIoaW50ZWdl
clZhbHVlKSk7Ci0gICAgICAgIEVYUEVDVF9FUShpbnRlZ2VyVmFsdWUsIHN0YXRpY19jYXN0PGlu
dD4oMS41KSk7Ci0KLSAgICAgICAgdW5zaWduZWQgdW5zaWduZWRWYWx1ZTsKLSAgICAgICAgRVhQ
RUNUX1RSVUUodmFsdWUtPmFzSW50ZWdlcih1bnNpZ25lZFZhbHVlKSk7Ci0gICAgICAgIGxvbmcg
bG9uZ1ZhbHVlOwotICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+YXNJbnRlZ2VyKGxvbmdWYWx1
ZSkpOwotICAgICAgICBsb25nIGxvbmcgbG9uZ0xvbmdWYWx1ZTsKLSAgICAgICAgRVhQRUNUX1RS
VUUodmFsdWUtPmFzSW50ZWdlcihsb25nTG9uZ1ZhbHVlKSk7Ci0gICAgICAgIHVuc2lnbmVkIGxv
bmcgdW5zaWduZWRMb25nVmFsdWU7Ci0gICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlLT5hc0ludGVn
ZXIodW5zaWduZWRMb25nVmFsdWUpKTsKLSAgICAgICAgdW5zaWduZWQgbG9uZyBsb25nIHVuc2ln
bmVkTG9uZ0xvbmdWYWx1ZTsKLSAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUtPmFzSW50ZWdlcih1
bnNpZ25lZExvbmdMb25nVmFsdWUpKTsKKyAgICAgICAgLy8gRG91YmxlcyBjYW4gYmUgZ2V0IGFz
IGludGVnZXJzLgorICAgICAgICBhdXRvIGludGVnZXJWYWx1ZSA9IHZhbHVlLT5hc0ludGVnZXIo
KTsKKyAgICAgICAgRVhQRUNUX1RSVUUoaW50ZWdlclZhbHVlKTsKKyAgICAgICAgRVhQRUNUX0VR
KCppbnRlZ2VyVmFsdWUsIHN0YXRpY19jYXN0PGludD4oMS41KSk7CiAgICAgfQogCiAgICAgewog
ICAgICAgICBSZWY8SlNPTjo6VmFsdWU+IHZhbHVlID0gSlNPTjo6VmFsdWU6OmNyZWF0ZSgid2Vi
a2l0Iik7CiAgICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlLT50eXBlKCkgPT0gSlNPTjo6VmFsdWU6
OlR5cGU6OlN0cmluZyk7Ci0gICAgICAgIFN0cmluZyBzdHJpbmdWYWx1ZTsKLSAgICAgICAgRVhQ
RUNUX1RSVUUodmFsdWUtPmFzU3RyaW5nKHN0cmluZ1ZhbHVlKSk7CisgICAgICAgIGF1dG8gc3Ry
aW5nVmFsdWUgPSB2YWx1ZS0+YXNTdHJpbmcoKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoISFzdHJp
bmdWYWx1ZSk7CiAgICAgICAgIEVYUEVDVF9FUShzdHJpbmdWYWx1ZSwgIndlYmtpdCIpOwogCiAg
ICAgICAgIFN0cmluZyBudWxsU3RyaW5nOwogICAgICAgICB2YWx1ZSA9IEpTT046OlZhbHVlOjpj
cmVhdGUobnVsbFN0cmluZyk7Ci0gICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlLT5hc1N0cmluZyhz
dHJpbmdWYWx1ZSkpOworICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+dHlwZSgpID09IEpTT046
OlZhbHVlOjpUeXBlOjpTdHJpbmcpOworICAgICAgICBzdHJpbmdWYWx1ZSA9IHZhbHVlLT5hc1N0
cmluZygpOworICAgICAgICBFWFBFQ1RfRkFMU0UoISFzdHJpbmdWYWx1ZSk7CiAgICAgICAgIEVY
UEVDVF9UUlVFKHN0cmluZ1ZhbHVlLmlzTnVsbCgpKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoc3Ry
aW5nVmFsdWUuaXNFbXB0eSgpKTsKIAogICAgICAgICB2YWx1ZSA9IEpTT046OlZhbHVlOjpjcmVh
dGUoZW1wdHlTdHJpbmcoKSk7Ci0gICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlLT5hc1N0cmluZyhz
dHJpbmdWYWx1ZSkpOworICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+dHlwZSgpID09IEpTT046
OlZhbHVlOjpUeXBlOjpTdHJpbmcpOworICAgICAgICBzdHJpbmdWYWx1ZSA9IHZhbHVlLT5hc1N0
cmluZygpOworICAgICAgICBFWFBFQ1RfVFJVRSghIXN0cmluZ1ZhbHVlKTsKICAgICAgICAgRVhQ
RUNUX0ZBTFNFKHN0cmluZ1ZhbHVlLmlzTnVsbCgpKTsKICAgICAgICAgRVhQRUNUX1RSVUUoc3Ry
aW5nVmFsdWUuaXNFbXB0eSgpKTsKICAgICB9CkBAIC0xMzEsNyArMTE3LDcgQEAgVEVTVChKU09O
VmFsdWUsIENvbnN0cnVjdCkKICAgICB7CiAgICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IG9iamVj
dCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgIEVYUEVDVF9UUlVFKG9iamVjdC0+
dHlwZSgpID09IEpTT046OlZhbHVlOjpUeXBlOjpPYmplY3QpOwotICAgICAgICBFWFBFQ1RfRVEo
b2JqZWN0LT5zaXplKCksIDApOworICAgICAgICBFWFBFQ1RfRVEob2JqZWN0LT5zaXplKCksIDBV
KTsKICAgICB9CiAKICAgICB7CkBAIC0xNTQsNDggKzE0MCw0OCBAQCBURVNUKEpTT05BcnJheSwg
QmFzaWMpCiAgICAgRVhQRUNUX0VRKGFycmF5LT5sZW5ndGgoKSwgMlUpOwogICAgIHZhbHVlID0g
YXJyYXktPmdldCgxKTsKICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+dHlwZSgpID09IEpTT046OlZh
bHVlOjpUeXBlOjpCb29sZWFuKTsKLSAgICBib29sIGJvb2xlYW5WYWx1ZTsKLSAgICBFWFBFQ1Rf
VFJVRSh2YWx1ZS0+YXNCb29sZWFuKGJvb2xlYW5WYWx1ZSkpOwotICAgIEVYUEVDVF9FUShib29s
ZWFuVmFsdWUsIHRydWUpOworICAgIGF1dG8gYm9vbGVhblZhbHVlID0gdmFsdWUtPmFzQm9vbGVh
bigpOworICAgIEVYUEVDVF9UUlVFKGJvb2xlYW5WYWx1ZSk7CisgICAgRVhQRUNUX0VRKCpib29s
ZWFuVmFsdWUsIHRydWUpOwogCiAgICAgYXJyYXktPnB1c2hJbnRlZ2VyKDEpOwogICAgIEVYUEVD
VF9FUShhcnJheS0+bGVuZ3RoKCksIDNVKTsKICAgICB2YWx1ZSA9IGFycmF5LT5nZXQoMik7CiAg
ICAgRVhQRUNUX1RSVUUodmFsdWUtPnR5cGUoKSA9PSBKU09OOjpWYWx1ZTo6VHlwZTo6SW50ZWdl
cik7Ci0gICAgaW50IGludGVnZXJWYWx1ZTsKLSAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+YXNJbnRl
Z2VyKGludGVnZXJWYWx1ZSkpOwotICAgIEVYUEVDVF9FUShpbnRlZ2VyVmFsdWUsIDEpOworICAg
IGF1dG8gaW50ZWdlclZhbHVlID0gdmFsdWUtPmFzSW50ZWdlcigpOworICAgIEVYUEVDVF9UUlVF
KGludGVnZXJWYWx1ZSk7CisgICAgRVhQRUNUX0VRKCppbnRlZ2VyVmFsdWUsIDEpOwogCiAgICAg
YXJyYXktPnB1c2hEb3VibGUoMS41KTsKICAgICBFWFBFQ1RfRVEoYXJyYXktPmxlbmd0aCgpLCA0
VSk7CiAgICAgdmFsdWUgPSBhcnJheS0+Z2V0KDMpOwogICAgIEVYUEVDVF9UUlVFKHZhbHVlLT50
eXBlKCkgPT0gSlNPTjo6VmFsdWU6OlR5cGU6OkRvdWJsZSk7Ci0gICAgZG91YmxlIGRvdWJsZVZh
bHVlOwotICAgIEVYUEVDVF9UUlVFKHZhbHVlLT5hc0RvdWJsZShkb3VibGVWYWx1ZSkpOwotICAg
IEVYUEVDVF9FUShkb3VibGVWYWx1ZSwgMS41KTsKKyAgICBhdXRvIGRvdWJsZVZhbHVlID0gdmFs
dWUtPmFzRG91YmxlKCk7CisgICAgRVhQRUNUX1RSVUUoZG91YmxlVmFsdWUpOworICAgIEVYUEVD
VF9FUSgqZG91YmxlVmFsdWUsIDEuNSk7CiAKICAgICBhcnJheS0+cHVzaFN0cmluZygid2Via2l0
Iik7CiAgICAgRVhQRUNUX0VRKGFycmF5LT5sZW5ndGgoKSwgNVUpOwogICAgIHZhbHVlID0gYXJy
YXktPmdldCg0KTsKICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+dHlwZSgpID09IEpTT046OlZhbHVl
OjpUeXBlOjpTdHJpbmcpOwotICAgIFN0cmluZyBzdHJpbmdWYWx1ZTsKLSAgICBFWFBFQ1RfVFJV
RSh2YWx1ZS0+YXNTdHJpbmcoc3RyaW5nVmFsdWUpKTsKKyAgICBhdXRvIHN0cmluZ1ZhbHVlID0g
dmFsdWUtPmFzU3RyaW5nKCk7CisgICAgRVhQRUNUX1RSVUUoISFzdHJpbmdWYWx1ZSk7CiAgICAg
RVhQRUNUX0VRKHN0cmluZ1ZhbHVlLCAid2Via2l0Iik7CiAKICAgICBhcnJheS0+cHVzaE9iamVj
dChKU09OOjpPYmplY3Q6OmNyZWF0ZSgpKTsKICAgICBFWFBFQ1RfRVEoYXJyYXktPmxlbmd0aCgp
LCA2VSk7CiAgICAgdmFsdWUgPSBhcnJheS0+Z2V0KDUpOwogICAgIEVYUEVDVF9UUlVFKHZhbHVl
LT50eXBlKCkgPT0gSlNPTjo6VmFsdWU6OlR5cGU6Ok9iamVjdCk7Ci0gICAgUmVmUHRyPEpTT046
Ok9iamVjdD4gb2JqZWN0VmFsdWU7Ci0gICAgRVhQRUNUX1RSVUUodmFsdWUtPmFzT2JqZWN0KG9i
amVjdFZhbHVlKSk7Ci0gICAgRVhQRUNUX0VRKG9iamVjdFZhbHVlLT5zaXplKCksIDApOworICAg
IGF1dG8gb2JqZWN0VmFsdWUgPSB2YWx1ZS0+YXNPYmplY3QoKTsKKyAgICBFWFBFQ1RfVFJVRShv
YmplY3RWYWx1ZSk7CisgICAgRVhQRUNUX0VRKG9iamVjdFZhbHVlLT5zaXplKCksIDBVKTsKIAog
ICAgIGFycmF5LT5wdXNoQXJyYXkoSlNPTjo6QXJyYXk6OmNyZWF0ZSgpKTsKICAgICBFWFBFQ1Rf
RVEoYXJyYXktPmxlbmd0aCgpLCA3VSk7CiAgICAgdmFsdWUgPSBhcnJheS0+Z2V0KDYpOwogICAg
IEVYUEVDVF9UUlVFKHZhbHVlLT50eXBlKCkgPT0gSlNPTjo6VmFsdWU6OlR5cGU6OkFycmF5KTsK
LSAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IGFycmF5VmFsdWU7Ci0gICAgRVhQRUNUX1RSVUUodmFs
dWUtPmFzQXJyYXkoYXJyYXlWYWx1ZSkpOworICAgIGF1dG8gYXJyYXlWYWx1ZSA9IHZhbHVlLT5h
c0FycmF5KCk7CisgICAgRVhQRUNUX1RSVUUoYXJyYXlWYWx1ZSk7CiAgICAgRVhQRUNUX0VRKGFy
cmF5VmFsdWUtPmxlbmd0aCgpLCAwVSk7CiAKICAgICBhdXRvIGl0ID0gYXJyYXktPmJlZ2luKCk7
CkBAIC0yNTEsNDAgKzIzNyw0MCBAQCBURVNUKEpTT05BcnJheU9mLCBCYXNpYykKICAgICBFWFBF
Q1RfRVEoYXJyYXktPmxlbmd0aCgpLCAyVSk7CiAgICAgdmFsdWUgPSBhcnJheS0+Z2V0KDEpOwog
ICAgIEVYUEVDVF9UUlVFKHZhbHVlLT50eXBlKCkgPT0gSlNPTjo6VmFsdWU6OlR5cGU6OkludGVn
ZXIpOwotICAgIGludCBpbnRlZ2VyVmFsdWU7Ci0gICAgRVhQRUNUX1RSVUUodmFsdWUtPmFzSW50
ZWdlcihpbnRlZ2VyVmFsdWUpKTsKLSAgICBFWFBFQ1RfRVEoaW50ZWdlclZhbHVlLCAxKTsKKyAg
ICBhdXRvIGludGVnZXJWYWx1ZSA9IHZhbHVlLT5hc0ludGVnZXIoKTsKKyAgICBFWFBFQ1RfVFJV
RShpbnRlZ2VyVmFsdWUpOworICAgIEVYUEVDVF9FUSgqaW50ZWdlclZhbHVlLCAxKTsKIAogICAg
IGFycmF5LT5hZGRJdGVtKDEuNSk7CiAgICAgRVhQRUNUX0VRKGFycmF5LT5sZW5ndGgoKSwgM1Up
OwogICAgIHZhbHVlID0gYXJyYXktPmdldCgyKTsKICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+dHlw
ZSgpID09IEpTT046OlZhbHVlOjpUeXBlOjpEb3VibGUpOwotICAgIGRvdWJsZSBkb3VibGVWYWx1
ZTsKLSAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+YXNEb3VibGUoZG91YmxlVmFsdWUpKTsKLSAgICBF
WFBFQ1RfRVEoZG91YmxlVmFsdWUsIDEuNSk7CisgICAgYXV0byBkb3VibGVWYWx1ZSA9IHZhbHVl
LT5hc0RvdWJsZSgpOworICAgIEVYUEVDVF9UUlVFKGRvdWJsZVZhbHVlKTsKKyAgICBFWFBFQ1Rf
RVEoKmRvdWJsZVZhbHVlLCAxLjUpOwogCiAgICAgYXJyYXktPmFkZEl0ZW0oIndlYmtpdCIpOwog
ICAgIEVYUEVDVF9FUShhcnJheS0+bGVuZ3RoKCksIDRVKTsKICAgICB2YWx1ZSA9IGFycmF5LT5n
ZXQoMyk7CiAgICAgRVhQRUNUX1RSVUUodmFsdWUtPnR5cGUoKSA9PSBKU09OOjpWYWx1ZTo6VHlw
ZTo6U3RyaW5nKTsKLSAgICBTdHJpbmcgc3RyaW5nVmFsdWU7Ci0gICAgRVhQRUNUX1RSVUUodmFs
dWUtPmFzU3RyaW5nKHN0cmluZ1ZhbHVlKSk7CisgICAgYXV0byBzdHJpbmdWYWx1ZSA9IHZhbHVl
LT5hc1N0cmluZygpOworICAgIEVYUEVDVF9UUlVFKCEhc3RyaW5nVmFsdWUpOwogICAgIEVYUEVD
VF9FUShzdHJpbmdWYWx1ZSwgIndlYmtpdCIpOwogCiAgICAgYXJyYXktPmFkZEl0ZW0oSlNPTjo6
T2JqZWN0OjpjcmVhdGUoKSk7CiAgICAgRVhQRUNUX0VRKGFycmF5LT5sZW5ndGgoKSwgNVUpOwog
ICAgIHZhbHVlID0gYXJyYXktPmdldCg0KTsKICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+dHlwZSgp
ID09IEpTT046OlZhbHVlOjpUeXBlOjpPYmplY3QpOwotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+
IG9iamVjdFZhbHVlOwotICAgIEVYUEVDVF9UUlVFKHZhbHVlLT5hc09iamVjdChvYmplY3RWYWx1
ZSkpOwotICAgIEVYUEVDVF9FUShvYmplY3RWYWx1ZS0+c2l6ZSgpLCAwKTsKKyAgICBhdXRvIG9i
amVjdFZhbHVlID0gdmFsdWUtPmFzT2JqZWN0KCk7CisgICAgRVhQRUNUX1RSVUUob2JqZWN0VmFs
dWUpOworICAgIEVYUEVDVF9FUShvYmplY3RWYWx1ZS0+c2l6ZSgpLCAwVSk7CiAKICAgICBhcnJh
eS0+YWRkSXRlbShKU09OOjpBcnJheTo6Y3JlYXRlKCkpOwogICAgIEVYUEVDVF9FUShhcnJheS0+
bGVuZ3RoKCksIDZVKTsKICAgICB2YWx1ZSA9IGFycmF5LT5nZXQoNSk7CiAgICAgRVhQRUNUX1RS
VUUodmFsdWUtPnR5cGUoKSA9PSBKU09OOjpWYWx1ZTo6VHlwZTo6QXJyYXkpOwotICAgIFJlZlB0
cjxKU09OOjpBcnJheT4gYXJyYXlWYWx1ZTsKLSAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+YXNBcnJh
eShhcnJheVZhbHVlKSk7CisgICAgYXV0byBhcnJheVZhbHVlID0gdmFsdWUtPmFzQXJyYXkoKTsK
KyAgICBFWFBFQ1RfVFJVRShhcnJheVZhbHVlKTsKICAgICBFWFBFQ1RfRVEoYXJyYXlWYWx1ZS0+
bGVuZ3RoKCksIDBVKTsKIAogICAgIGF1dG8gaXQgPSBhcnJheS0+YmVnaW4oKTsKQEAgLTMyNCw0
NSArMzEwLDQ1IEBAIFRFU1QoSlNPTk9iamVjdCwgQmFzaWMpCiAgICAgUmVmPEpTT046Ok9iamVj
dD4gb2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKIAogICAgIG9iamVjdC0+c2V0VmFs
dWUoIm51bGwiLCBKU09OOjpWYWx1ZTo6bnVsbCgpKTsKLSAgICBFWFBFQ1RfRVEob2JqZWN0LT5z
aXplKCksIDEpOwotICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gdmFsdWU7Ci0gICAgRVhQRUNUX1RS
VUUob2JqZWN0LT5nZXRWYWx1ZSgibnVsbCIsIHZhbHVlKSk7CisgICAgRVhQRUNUX0VRKG9iamVj
dC0+c2l6ZSgpLCAxVSk7CisgICAgYXV0byB2YWx1ZSA9IG9iamVjdC0+Z2V0VmFsdWUoIm51bGwi
KTsKKyAgICBFWFBFQ1RfVFJVRSh2YWx1ZSk7CiAgICAgRVhQRUNUX1RSVUUodmFsdWUtPmlzTnVs
bCgpKTsKIAogICAgIG9iamVjdC0+c2V0Qm9vbGVhbigiYm9vbGVhbiIsIHRydWUpOwotICAgIEVY
UEVDVF9FUShvYmplY3QtPnNpemUoKSwgMik7Ci0gICAgYm9vbCBib29sZWFuVmFsdWU7Ci0gICAg
RVhQRUNUX1RSVUUob2JqZWN0LT5nZXRCb29sZWFuKCJib29sZWFuIiwgYm9vbGVhblZhbHVlKSk7
Ci0gICAgRVhQRUNUX0VRKGJvb2xlYW5WYWx1ZSwgdHJ1ZSk7CisgICAgRVhQRUNUX0VRKG9iamVj
dC0+c2l6ZSgpLCAyVSk7CisgICAgYXV0byBib29sZWFuVmFsdWUgPSBvYmplY3QtPmdldEJvb2xl
YW4oImJvb2xlYW4iKTsKKyAgICBFWFBFQ1RfVFJVRShib29sZWFuVmFsdWUpOworICAgIEVYUEVD
VF9FUSgqYm9vbGVhblZhbHVlLCB0cnVlKTsKIAogICAgIG9iamVjdC0+c2V0SW50ZWdlcigiaW50
ZWdlciIsIDEpOwotICAgIEVYUEVDVF9FUShvYmplY3QtPnNpemUoKSwgMyk7Ci0gICAgaW50IGlu
dGVnZXJWYWx1ZTsKLSAgICBFWFBFQ1RfVFJVRShvYmplY3QtPmdldEludGVnZXIoImludGVnZXIi
LCBpbnRlZ2VyVmFsdWUpKTsKLSAgICBFWFBFQ1RfRVEoaW50ZWdlclZhbHVlLCAxKTsKKyAgICBF
WFBFQ1RfRVEob2JqZWN0LT5zaXplKCksIDNVKTsKKyAgICBhdXRvIGludGVnZXJWYWx1ZSA9IG9i
amVjdC0+Z2V0SW50ZWdlcigiaW50ZWdlciIpOworICAgIEVYUEVDVF9UUlVFKGludGVnZXJWYWx1
ZSk7CisgICAgRVhQRUNUX0VRKCppbnRlZ2VyVmFsdWUsIDEpOwogCiAgICAgb2JqZWN0LT5zZXRE
b3VibGUoImRvdWJsZSIsIDEuNSk7Ci0gICAgRVhQRUNUX0VRKG9iamVjdC0+c2l6ZSgpLCA0KTsK
LSAgICBkb3VibGUgZG91YmxlVmFsdWU7Ci0gICAgRVhQRUNUX1RSVUUob2JqZWN0LT5nZXREb3Vi
bGUoImRvdWJsZSIsIGRvdWJsZVZhbHVlKSk7Ci0gICAgRVhQRUNUX0VRKGRvdWJsZVZhbHVlLCAx
LjUpOworICAgIEVYUEVDVF9FUShvYmplY3QtPnNpemUoKSwgNFUpOworICAgIGF1dG8gZG91Ymxl
VmFsdWUgPSBvYmplY3QtPmdldERvdWJsZSgiZG91YmxlIik7CisgICAgRVhQRUNUX1RSVUUoZG91
YmxlVmFsdWUpOworICAgIEVYUEVDVF9FUSgqZG91YmxlVmFsdWUsIDEuNSk7CiAKICAgICBvYmpl
Y3QtPnNldFN0cmluZygic3RyaW5nIiwgIndlYmtpdCIpOwotICAgIEVYUEVDVF9FUShvYmplY3Qt
PnNpemUoKSwgNSk7Ci0gICAgU3RyaW5nIHN0cmluZ1ZhbHVlOwotICAgIEVYUEVDVF9UUlVFKG9i
amVjdC0+Z2V0U3RyaW5nKCJzdHJpbmciLCBzdHJpbmdWYWx1ZSkpOworICAgIEVYUEVDVF9FUShv
YmplY3QtPnNpemUoKSwgNVUpOworICAgIGF1dG8gc3RyaW5nVmFsdWUgPSBvYmplY3QtPmdldFN0
cmluZygic3RyaW5nIik7CisgICAgRVhQRUNUX1RSVUUoISFzdHJpbmdWYWx1ZSk7CiAgICAgRVhQ
RUNUX0VRKHN0cmluZ1ZhbHVlLCAid2Via2l0Iik7CiAKICAgICBvYmplY3QtPnNldE9iamVjdCgi
b2JqZWN0IiwgSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSk7Ci0gICAgRVhQRUNUX0VRKG9iamVjdC0+
c2l6ZSgpLCA2KTsKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBvYmplY3RWYWx1ZTsKLSAgICBF
WFBFQ1RfVFJVRShvYmplY3QtPmdldE9iamVjdCgib2JqZWN0Iiwgb2JqZWN0VmFsdWUpKTsKLSAg
ICBFWFBFQ1RfRVEob2JqZWN0VmFsdWUtPnNpemUoKSwgMCk7CisgICAgRVhQRUNUX0VRKG9iamVj
dC0+c2l6ZSgpLCA2VSk7CisgICAgYXV0byBvYmplY3RWYWx1ZSA9IG9iamVjdC0+Z2V0T2JqZWN0
KCJvYmplY3QiKTsKKyAgICBFWFBFQ1RfVFJVRShvYmplY3RWYWx1ZSk7CisgICAgRVhQRUNUX0VR
KG9iamVjdFZhbHVlLT5zaXplKCksIDBVKTsKIAogICAgIG9iamVjdC0+c2V0QXJyYXkoImFycmF5
IiwgSlNPTjo6QXJyYXk6OmNyZWF0ZSgpKTsKLSAgICBFWFBFQ1RfRVEob2JqZWN0LT5zaXplKCks
IDcpOwotICAgIFJlZlB0cjxKU09OOjpBcnJheT4gYXJyYXlWYWx1ZTsKLSAgICBFWFBFQ1RfVFJV
RShvYmplY3QtPmdldEFycmF5KCJhcnJheSIsIGFycmF5VmFsdWUpKTsKKyAgICBFWFBFQ1RfRVEo
b2JqZWN0LT5zaXplKCksIDdVKTsKKyAgICBhdXRvIGFycmF5VmFsdWUgPSBvYmplY3QtPmdldEFy
cmF5KCJhcnJheSIpOworICAgIEVYUEVDVF9UUlVFKGFycmF5VmFsdWUpOwogICAgIEVYUEVDVF9F
UShhcnJheVZhbHVlLT5sZW5ndGgoKSwgMFUpOwogCiAgICAgVmVjdG9yPGNvbnN0IGNoYXIqPiBr
ZXlzID0geyAibnVsbCIsICJib29sZWFuIiwgImludGVnZXIiLCAiZG91YmxlIiwgInN0cmluZyIs
ICJvYmplY3QiLCAiYXJyYXkiIH07CkBAIC0zNzYsMzEgKzM2MiwzMSBAQCBURVNUKEpTT05PYmpl
Y3QsIEJhc2ljKQogICAgIEVYUEVDVF9UUlVFKGtleXMuaXNFbXB0eSgpKTsKIAogICAgIG9iamVj
dC0+cmVtb3ZlKCJudWxsIik7Ci0gICAgRVhQRUNUX0VRKG9iamVjdC0+c2l6ZSgpLCA2KTsKKyAg
ICBFWFBFQ1RfRVEob2JqZWN0LT5zaXplKCksIDZVKTsKICAgICBFWFBFQ1RfVFJVRShvYmplY3Qt
PmZpbmQoIm51bGwiKSA9PSBvYmplY3QtPmVuZCgpKTsKIAogICAgIG9iamVjdC0+cmVtb3ZlKCJi
b29sZWFuIik7Ci0gICAgRVhQRUNUX0VRKG9iamVjdC0+c2l6ZSgpLCA1KTsKKyAgICBFWFBFQ1Rf
RVEob2JqZWN0LT5zaXplKCksIDVVKTsKICAgICBFWFBFQ1RfVFJVRShvYmplY3QtPmZpbmQoImJv
b2xlYW4iKSA9PSBvYmplY3QtPmVuZCgpKTsKIAogICAgIG9iamVjdC0+cmVtb3ZlKCJpbnRlZ2Vy
Iik7Ci0gICAgRVhQRUNUX0VRKG9iamVjdC0+c2l6ZSgpLCA0KTsKKyAgICBFWFBFQ1RfRVEob2Jq
ZWN0LT5zaXplKCksIDRVKTsKICAgICBFWFBFQ1RfVFJVRShvYmplY3QtPmZpbmQoImludGVnZXIi
KSA9PSBvYmplY3QtPmVuZCgpKTsKIAogICAgIG9iamVjdC0+cmVtb3ZlKCJkb3VibGUiKTsKLSAg
ICBFWFBFQ1RfRVEob2JqZWN0LT5zaXplKCksIDMpOworICAgIEVYUEVDVF9FUShvYmplY3QtPnNp
emUoKSwgM1UpOwogICAgIEVYUEVDVF9UUlVFKG9iamVjdC0+ZmluZCgiZG91YmxlIikgPT0gb2Jq
ZWN0LT5lbmQoKSk7CiAKICAgICBvYmplY3QtPnJlbW92ZSgic3RyaW5nIik7Ci0gICAgRVhQRUNU
X0VRKG9iamVjdC0+c2l6ZSgpLCAyKTsKKyAgICBFWFBFQ1RfRVEob2JqZWN0LT5zaXplKCksIDJV
KTsKICAgICBFWFBFQ1RfVFJVRShvYmplY3QtPmZpbmQoInN0cmluZyIpID09IG9iamVjdC0+ZW5k
KCkpOwogCiAgICAgb2JqZWN0LT5yZW1vdmUoIm9iamVjdCIpOwotICAgIEVYUEVDVF9FUShvYmpl
Y3QtPnNpemUoKSwgMSk7CisgICAgRVhQRUNUX0VRKG9iamVjdC0+c2l6ZSgpLCAxVSk7CiAgICAg
RVhQRUNUX1RSVUUob2JqZWN0LT5maW5kKCJvYmplY3QiKSA9PSBvYmplY3QtPmVuZCgpKTsKIAog
ICAgIG9iamVjdC0+cmVtb3ZlKCJhcnJheSIpOwotICAgIEVYUEVDVF9FUShvYmplY3QtPnNpemUo
KSwgMCk7CisgICAgRVhQRUNUX0VRKG9iamVjdC0+c2l6ZSgpLCAwVSk7CiAgICAgRVhQRUNUX1RS
VUUob2JqZWN0LT5maW5kKCJhcnJheSIpID09IG9iamVjdC0+ZW5kKCkpOwogfQogCkBAIC00Nzks
MjAxICs0NjUsMjA0IEBAIFRFU1QoSlNPTlZhbHVlLCBUb0pTT05TdHJpbmcpCiBURVNUKEpTT05W
YWx1ZSwgUGFyc2VKU09OKQogewogICAgIHsKLSAgICAgICAgUmVmUHRyPEpTT046OlZhbHVlPiB2
YWx1ZTsKLSAgICAgICAgRVhQRUNUX1RSVUUoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigibnVsbCIs
IHZhbHVlKSk7CisgICAgICAgIGF1dG8gdmFsdWUgPSBKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJu
dWxsIik7CisgICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlKTsKICAgICAgICAgRVhQRUNUX1RSVUUo
dmFsdWUtPmlzTnVsbCgpKTsKICAgICB9CiAKICAgICB7Ci0gICAgICAgIFJlZlB0cjxKU09OOjpW
YWx1ZT4gdmFsdWU7Ci0gICAgICAgIEVYUEVDVF9UUlVFKEpTT046OlZhbHVlOjpwYXJzZUpTT04o
InRydWUiLCB2YWx1ZSkpOworICAgICAgICBhdXRvIHZhbHVlID0gSlNPTjo6VmFsdWU6OnBhcnNl
SlNPTigidHJ1ZSIpOworICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1ZSk7CiAgICAgICAgIEVYUEVD
VF9UUlVFKHZhbHVlLT50eXBlKCkgPT0gSlNPTjo6VmFsdWU6OlR5cGU6OkJvb2xlYW4pOwotICAg
ICAgICBib29sIGJvb2xlYW5WYWx1ZTsKLSAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUtPmFzQm9v
bGVhbihib29sZWFuVmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX0VRKGJvb2xlYW5WYWx1ZSwgdHJ1
ZSk7CisgICAgICAgIGF1dG8gYm9vbGVhblZhbHVlID0gdmFsdWUtPmFzQm9vbGVhbigpOworICAg
ICAgICBFWFBFQ1RfVFJVRShib29sZWFuVmFsdWUpOworICAgICAgICBFWFBFQ1RfRVEoKmJvb2xl
YW5WYWx1ZSwgdHJ1ZSk7CiAKLSAgICAgICAgRVhQRUNUX1RSVUUoSlNPTjo6VmFsdWU6OnBhcnNl
SlNPTigiZmFsc2UiLCB2YWx1ZSkpOworICAgICAgICB2YWx1ZSA9IEpTT046OlZhbHVlOjpwYXJz
ZUpTT04oImZhbHNlIik7CisgICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlKTsKICAgICAgICAgRVhQ
RUNUX1RSVUUodmFsdWUtPnR5cGUoKSA9PSBKU09OOjpWYWx1ZTo6VHlwZTo6Qm9vbGVhbik7Ci0g
ICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlLT5hc0Jvb2xlYW4oYm9vbGVhblZhbHVlKSk7Ci0gICAg
ICAgIEVYUEVDVF9FUShib29sZWFuVmFsdWUsIGZhbHNlKTsKKyAgICAgICAgYm9vbGVhblZhbHVl
ID0gdmFsdWUtPmFzQm9vbGVhbigpOworICAgICAgICBFWFBFQ1RfVFJVRShib29sZWFuVmFsdWUp
OworICAgICAgICBFWFBFQ1RfRVEoKmJvb2xlYW5WYWx1ZSwgZmFsc2UpOwogICAgIH0KIAogICAg
IHsKLSAgICAgICAgUmVmUHRyPEpTT046OlZhbHVlPiB2YWx1ZTsKLSAgICAgICAgRVhQRUNUX1RS
VUUoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiMSIsIHZhbHVlKSk7CisgICAgICAgIGF1dG8gdmFs
dWUgPSBKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCIxIik7CisgICAgICAgIEVYUEVDVF9UUlVFKHZh
bHVlKTsKICAgICAgICAgLy8gTnVtYmVycyBhcmUgYWx3YXlzIHBhcnNlZCBhcyBkb3VibGUuCiAg
ICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlLT50eXBlKCkgPT0gSlNPTjo6VmFsdWU6OlR5cGU6OkRv
dWJsZSk7Ci0gICAgICAgIGRvdWJsZSBkb3VibGVWYWx1ZTsKLSAgICAgICAgRVhQRUNUX1RSVUUo
dmFsdWUtPmFzRG91YmxlKGRvdWJsZVZhbHVlKSk7Ci0gICAgICAgIEVYUEVDVF9FUShkb3VibGVW
YWx1ZSwgMS4wKTsKKyAgICAgICAgYXV0byBkb3VibGVWYWx1ZSA9IHZhbHVlLT5hc0RvdWJsZSgp
OworICAgICAgICBFWFBFQ1RfVFJVRShkb3VibGVWYWx1ZSk7CisgICAgICAgIEVYUEVDVF9FUSgq
ZG91YmxlVmFsdWUsIDEuMCk7CiAKLSAgICAgICAgRVhQRUNUX1RSVUUoSlNPTjo6VmFsdWU6OnBh
cnNlSlNPTigiMS41IiwgdmFsdWUpKTsKKyAgICAgICAgdmFsdWUgPSBKU09OOjpWYWx1ZTo6cGFy
c2VKU09OKCIxLjUiKTsKKyAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUpOwogICAgICAgICBFWFBF
Q1RfVFJVRSh2YWx1ZS0+dHlwZSgpID09IEpTT046OlZhbHVlOjpUeXBlOjpEb3VibGUpOwotICAg
ICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+YXNEb3VibGUoZG91YmxlVmFsdWUpKTsKLSAgICAgICAg
RVhQRUNUX0VRKGRvdWJsZVZhbHVlLCAxLjUpOworICAgICAgICBkb3VibGVWYWx1ZSA9IHZhbHVl
LT5hc0RvdWJsZSgpOworICAgICAgICBFWFBFQ1RfVFJVRShkb3VibGVWYWx1ZSk7CisgICAgICAg
IEVYUEVDVF9FUSgqZG91YmxlVmFsdWUsIDEuNSk7CiAgICAgfQogCiAgICAgewotICAgICAgICBS
ZWZQdHI8SlNPTjo6VmFsdWU+IHZhbHVlOwotICAgICAgICBFWFBFQ1RfVFJVRShKU09OOjpWYWx1
ZTo6cGFyc2VKU09OKCJcInN0cmluZ1wiIiwgdmFsdWUpKTsKKyAgICAgICAgYXV0byB2YWx1ZSA9
IEpTT046OlZhbHVlOjpwYXJzZUpTT04oIlwic3RyaW5nXCIiKTsKKyAgICAgICAgRVhQRUNUX1RS
VUUodmFsdWUpOwogICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+dHlwZSgpID09IEpTT046OlZh
bHVlOjpUeXBlOjpTdHJpbmcpOwotICAgICAgICBTdHJpbmcgc3RyaW5nVmFsdWU7Ci0gICAgICAg
IEVYUEVDVF9UUlVFKHZhbHVlLT5hc1N0cmluZyhzdHJpbmdWYWx1ZSkpOworICAgICAgICBhdXRv
IHN0cmluZ1ZhbHVlID0gdmFsdWUtPmFzU3RyaW5nKCk7CisgICAgICAgIEVYUEVDVF9UUlVFKCEh
c3RyaW5nVmFsdWUpOwogICAgICAgICBFWFBFQ1RfRVEoc3RyaW5nVmFsdWUsICJzdHJpbmciKTsK
ICAgICB9CiAKICAgICB7Ci0gICAgICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gdmFsdWU7Ci0gICAg
ICAgIEVYUEVDVF9UUlVFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIltdIiwgdmFsdWUpKTsKKyAg
ICAgICAgYXV0byB2YWx1ZSA9IEpTT046OlZhbHVlOjpwYXJzZUpTT04oIltdIik7CisgICAgICAg
IEVYUEVDVF9UUlVFKHZhbHVlKTsKICAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUtPnR5cGUoKSA9
PSBKU09OOjpWYWx1ZTo6VHlwZTo6QXJyYXkpOwotICAgICAgICBSZWZQdHI8SlNPTjo6QXJyYXk+
IGFycmF5VmFsdWU7Ci0gICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlLT5hc0FycmF5KGFycmF5VmFs
dWUpKTsKKyAgICAgICAgYXV0byBhcnJheVZhbHVlID0gdmFsdWUtPmFzQXJyYXkoKTsKKyAgICAg
ICAgRVhQRUNUX1RSVUUoYXJyYXlWYWx1ZSk7CiAgICAgICAgIEVYUEVDVF9FUShhcnJheVZhbHVl
LT5sZW5ndGgoKSwgMFUpOwogCi0gICAgICAgIEVYUEVDVF9UUlVFKEpTT046OlZhbHVlOjpwYXJz
ZUpTT04oIltudWxsLCAxICwyLjUsW3tcImZvb1wiOlwiYmFyXCJ9LHtcImJhelwiOmZhbHNlfV0s
XCJ3ZWJraXRcIl0iLCB2YWx1ZSkpOworICAgICAgICB2YWx1ZSA9IEpTT046OlZhbHVlOjpwYXJz
ZUpTT04oIltudWxsLCAxICwyLjUsW3tcImZvb1wiOlwiYmFyXCJ9LHtcImJhelwiOmZhbHNlfV0s
XCJ3ZWJraXRcIl0iKTsKKyAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUpOwogICAgICAgICBFWFBF
Q1RfVFJVRSh2YWx1ZS0+dHlwZSgpID09IEpTT046OlZhbHVlOjpUeXBlOjpBcnJheSk7Ci0gICAg
ICAgIEVYUEVDVF9UUlVFKHZhbHVlLT5hc0FycmF5KGFycmF5VmFsdWUpKTsKKyAgICAgICAgYXJy
YXlWYWx1ZSA9IHZhbHVlLT5hc0FycmF5KCk7CisgICAgICAgIEVYUEVDVF9UUlVFKGFycmF5VmFs
dWUpOwogICAgICAgICBFWFBFQ1RfRVEoYXJyYXlWYWx1ZS0+bGVuZ3RoKCksIDVVKTsKICAgICAg
ICAgYXV0byBpdCA9IGFycmF5VmFsdWUtPmJlZ2luKCk7Ci0gICAgICAgIFJlZlB0cjxKU09OOjpW
YWx1ZT4gaXRlbVZhbHVlID0gaXQtPmdldCgpOwotICAgICAgICBFWFBFQ1RfVFJVRShpdGVtVmFs
dWUtPnR5cGUoKSA9PSBKU09OOjpWYWx1ZTo6VHlwZTo6TnVsbCk7CisgICAgICAgIEVYUEVDVF9U
UlVFKCgqaXQpLT50eXBlKCkgPT0gSlNPTjo6VmFsdWU6OlR5cGU6Ok51bGwpOwogICAgICAgICAr
K2l0OwogICAgICAgICBFWFBFQ1RfRkFMU0UoaXQgPT0gYXJyYXlWYWx1ZS0+ZW5kKCkpOwogCi0g
ICAgICAgIGl0ZW1WYWx1ZSA9IGl0LT5nZXQoKTsKLSAgICAgICAgRVhQRUNUX1RSVUUoaXRlbVZh
bHVlLT50eXBlKCkgPT0gSlNPTjo6VmFsdWU6OlR5cGU6OkRvdWJsZSk7Ci0gICAgICAgIGludCBp
bnRlZ2VyVmFsdWU7Ci0gICAgICAgIEVYUEVDVF9UUlVFKGl0ZW1WYWx1ZS0+YXNJbnRlZ2VyKGlu
dGVnZXJWYWx1ZSkpOwotICAgICAgICBFWFBFQ1RfRVEoaW50ZWdlclZhbHVlLCAxKTsKKyAgICAg
ICAgRVhQRUNUX1RSVUUoKCppdCktPnR5cGUoKSA9PSBKU09OOjpWYWx1ZTo6VHlwZTo6RG91Ymxl
KTsKKyAgICAgICAgYXV0byBpbnRlZ2VyVmFsdWUgPSAoKml0KS0+YXNJbnRlZ2VyKCk7CisgICAg
ICAgIEVYUEVDVF9UUlVFKGludGVnZXJWYWx1ZSk7CisgICAgICAgIEVYUEVDVF9FUSgqaW50ZWdl
clZhbHVlLCAxKTsKICAgICAgICAgKytpdDsKICAgICAgICAgRVhQRUNUX0ZBTFNFKGl0ID09IGFy
cmF5VmFsdWUtPmVuZCgpKTsKIAotICAgICAgICBpdGVtVmFsdWUgPSBpdC0+Z2V0KCk7Ci0gICAg
ICAgIEVYUEVDVF9UUlVFKGl0ZW1WYWx1ZS0+dHlwZSgpID09IEpTT046OlZhbHVlOjpUeXBlOjpE
b3VibGUpOwotICAgICAgICBkb3VibGUgZG91YmxlVmFsdWU7Ci0gICAgICAgIEVYUEVDVF9UUlVF
KGl0ZW1WYWx1ZS0+YXNEb3VibGUoZG91YmxlVmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX0VRKGRv
dWJsZVZhbHVlLCAyLjUpOworICAgICAgICBFWFBFQ1RfVFJVRSgoKml0KS0+dHlwZSgpID09IEpT
T046OlZhbHVlOjpUeXBlOjpEb3VibGUpOworICAgICAgICBhdXRvIGRvdWJsZVZhbHVlID0gKCpp
dCktPmFzRG91YmxlKCk7CisgICAgICAgIEVYUEVDVF9UUlVFKGRvdWJsZVZhbHVlKTsKKyAgICAg
ICAgRVhQRUNUX0VRKCpkb3VibGVWYWx1ZSwgMi41KTsKICAgICAgICAgKytpdDsKICAgICAgICAg
RVhQRUNUX0ZBTFNFKGl0ID09IGFycmF5VmFsdWUtPmVuZCgpKTsKIAotICAgICAgICBpdGVtVmFs
dWUgPSBpdC0+Z2V0KCk7Ci0gICAgICAgIEVYUEVDVF9UUlVFKGl0ZW1WYWx1ZS0+dHlwZSgpID09
IEpTT046OlZhbHVlOjpUeXBlOjpBcnJheSk7Ci0gICAgICAgIFJlZlB0cjxKU09OOjpBcnJheT4g
c3ViQXJyYXlWYWx1ZTsKLSAgICAgICAgRVhQRUNUX1RSVUUoaXRlbVZhbHVlLT5hc0FycmF5KHN1
YkFycmF5VmFsdWUpKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoKCppdCktPnR5cGUoKSA9PSBKU09O
OjpWYWx1ZTo6VHlwZTo6QXJyYXkpOworICAgICAgICBhdXRvIHN1YkFycmF5VmFsdWUgPSAoKml0
KS0+YXNBcnJheSgpOworICAgICAgICBFWFBFQ1RfVFJVRShzdWJBcnJheVZhbHVlKTsKICAgICAg
ICAgRVhQRUNUX0VRKHN1YkFycmF5VmFsdWUtPmxlbmd0aCgpLCAyVSk7Ci0gICAgICAgIFJlZlB0
cjxKU09OOjpWYWx1ZT4gb2JqZWN0VmFsdWUgPSBzdWJBcnJheVZhbHVlLT5nZXQoMCk7CisgICAg
ICAgIGF1dG8gb2JqZWN0VmFsdWUgPSBzdWJBcnJheVZhbHVlLT5nZXQoMCk7CiAgICAgICAgIEVY
UEVDVF9UUlVFKG9iamVjdFZhbHVlLT50eXBlKCkgPT0gSlNPTjo6VmFsdWU6OlR5cGU6Ok9iamVj
dCk7Ci0gICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG9iamVjdDsKLSAgICAgICAgRVhQRUNU
X1RSVUUob2JqZWN0VmFsdWUtPmFzT2JqZWN0KG9iamVjdCkpOwotICAgICAgICBFWFBFQ1RfRVEo
b2JqZWN0LT5zaXplKCksIDEpOwotICAgICAgICBTdHJpbmcgc3RyaW5nVmFsdWU7Ci0gICAgICAg
IEVYUEVDVF9UUlVFKG9iamVjdC0+Z2V0U3RyaW5nKCJmb28iLCBzdHJpbmdWYWx1ZSkpOworICAg
ICAgICBhdXRvIG9iamVjdCA9IG9iamVjdFZhbHVlLT5hc09iamVjdCgpOworICAgICAgICBFWFBF
Q1RfVFJVRShvYmplY3QpOworICAgICAgICBFWFBFQ1RfRVEob2JqZWN0LT5zaXplKCksIDFVKTsK
KyAgICAgICAgYXV0byBzdHJpbmdWYWx1ZSA9IG9iamVjdC0+Z2V0U3RyaW5nKCJmb28iKTsKKyAg
ICAgICAgRVhQRUNUX1RSVUUoISFzdHJpbmdWYWx1ZSk7CiAgICAgICAgIEVYUEVDVF9FUShzdHJp
bmdWYWx1ZSwgImJhciIpOwogICAgICAgICBvYmplY3RWYWx1ZSA9IHN1YkFycmF5VmFsdWUtPmdl
dCgxKTsKICAgICAgICAgRVhQRUNUX1RSVUUob2JqZWN0VmFsdWUtPnR5cGUoKSA9PSBKU09OOjpW
YWx1ZTo6VHlwZTo6T2JqZWN0KTsKLSAgICAgICAgRVhQRUNUX1RSVUUob2JqZWN0VmFsdWUtPmFz
T2JqZWN0KG9iamVjdCkpOwotICAgICAgICBFWFBFQ1RfRVEob2JqZWN0LT5zaXplKCksIDEpOwot
ICAgICAgICBib29sIGJvb2xlYW5WYWx1ZTsKLSAgICAgICAgRVhQRUNUX1RSVUUob2JqZWN0LT5n
ZXRCb29sZWFuKCJiYXoiLCBib29sZWFuVmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX0VRKGJvb2xl
YW5WYWx1ZSwgZmFsc2UpOworICAgICAgICBvYmplY3QgPW9iamVjdFZhbHVlLT5hc09iamVjdCgp
OworICAgICAgICBFWFBFQ1RfVFJVRShvYmplY3QpOworICAgICAgICBFWFBFQ1RfRVEob2JqZWN0
LT5zaXplKCksIDFVKTsKKyAgICAgICAgYXV0byBib29sZWFuVmFsdWUgPSBvYmplY3QtPmdldEJv
b2xlYW4oImJheiIpOworICAgICAgICBFWFBFQ1RfVFJVRShib29sZWFuVmFsdWUpOworICAgICAg
ICBFWFBFQ1RfRVEoKmJvb2xlYW5WYWx1ZSwgZmFsc2UpOwogICAgICAgICArK2l0OwogICAgICAg
ICBFWFBFQ1RfRkFMU0UoaXQgPT0gYXJyYXlWYWx1ZS0+ZW5kKCkpOwogCi0gICAgICAgIGl0ZW1W
YWx1ZSA9IGl0LT5nZXQoKTsKLSAgICAgICAgRVhQRUNUX1RSVUUoaXRlbVZhbHVlLT50eXBlKCkg
PT0gSlNPTjo6VmFsdWU6OlR5cGU6OlN0cmluZyk7Ci0gICAgICAgIEVYUEVDVF9UUlVFKGl0ZW1W
YWx1ZS0+YXNTdHJpbmcoc3RyaW5nVmFsdWUpKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoKCppdCkt
PnR5cGUoKSA9PSBKU09OOjpWYWx1ZTo6VHlwZTo6U3RyaW5nKTsKKyAgICAgICAgc3RyaW5nVmFs
dWUgPSAoKml0KS0+YXNTdHJpbmcoKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoISFzdHJpbmdWYWx1
ZSk7CiAgICAgICAgIEVYUEVDVF9FUShzdHJpbmdWYWx1ZSwgIndlYmtpdCIpOwogICAgICAgICAr
K2l0OwogICAgICAgICBFWFBFQ1RfVFJVRShpdCA9PSBhcnJheVZhbHVlLT5lbmQoKSk7CiAgICAg
fQogCiAgICAgewotICAgICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHZhbHVlOwotICAgICAgICBF
WFBFQ1RfVFJVRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJ7fSIsIHZhbHVlKSk7CisgICAgICAg
IGF1dG8gdmFsdWUgPSBKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJ7fSIpOworICAgICAgICBFWFBF
Q1RfVFJVRSh2YWx1ZSk7CiAgICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlLT50eXBlKCkgPT0gSlNP
Tjo6VmFsdWU6OlR5cGU6Ok9iamVjdCk7Ci0gICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG9i
amVjdFZhbHVlOwotICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+YXNPYmplY3Qob2JqZWN0VmFs
dWUpKTsKLSAgICAgICAgRVhQRUNUX0VRKG9iamVjdFZhbHVlLT5zaXplKCksIDApOworICAgICAg
ICBhdXRvIG9iamVjdFZhbHVlID0gdmFsdWUtPmFzT2JqZWN0KCk7CisgICAgICAgIEVYUEVDVF9U
UlVFKG9iamVjdFZhbHVlKTsKKyAgICAgICAgRVhQRUNUX0VRKG9iamVjdFZhbHVlLT5zaXplKCks
IDBVKTsKIAotICAgICAgICBFWFBFQ1RfVFJVRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJ7XCJm
b29cIjogXCJiYXJcIiwgXCJiYXpcIjoge1wic3ViXCI6W251bGwsZmFsc2VdfX0iLCB2YWx1ZSkp
OworICAgICAgICB2YWx1ZSA9IEpTT046OlZhbHVlOjpwYXJzZUpTT04oIntcImZvb1wiOiBcImJh
clwiLCBcImJhelwiOiB7XCJzdWJcIjpbbnVsbCxmYWxzZV19fSIpOworICAgICAgICBFWFBFQ1Rf
VFJVRSh2YWx1ZSk7CiAgICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlLT50eXBlKCkgPT0gSlNPTjo6
VmFsdWU6OlR5cGU6Ok9iamVjdCk7Ci0gICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlLT5hc09iamVj
dChvYmplY3RWYWx1ZSkpOwotICAgICAgICBFWFBFQ1RfRVEob2JqZWN0VmFsdWUtPnNpemUoKSwg
Mik7CisgICAgICAgIG9iamVjdFZhbHVlID0gdmFsdWUtPmFzT2JqZWN0KCk7CisgICAgICAgIEVY
UEVDVF9UUlVFKG9iamVjdFZhbHVlKTsKKyAgICAgICAgRVhQRUNUX0VRKG9iamVjdFZhbHVlLT5z
aXplKCksIDJVKTsKIAotICAgICAgICBTdHJpbmcgc3RyaW5nVmFsdWU7Ci0gICAgICAgIEVYUEVD
VF9UUlVFKG9iamVjdFZhbHVlLT5nZXRTdHJpbmcoImZvbyIsIHN0cmluZ1ZhbHVlKSk7CisgICAg
ICAgIGF1dG8gc3RyaW5nVmFsdWUgPSBvYmplY3RWYWx1ZS0+Z2V0U3RyaW5nKCJmb28iKTsKKyAg
ICAgICAgRVhQRUNUX1RSVUUoISFzdHJpbmdWYWx1ZSk7CiAgICAgICAgIEVYUEVDVF9FUShzdHJp
bmdWYWx1ZSwgImJhciIpOwogCi0gICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG9iamVjdDsK
LSAgICAgICAgRVhQRUNUX1RSVUUob2JqZWN0VmFsdWUtPmdldE9iamVjdCgiYmF6Iiwgb2JqZWN0
KSk7Ci0gICAgICAgIEVYUEVDVF9FUShvYmplY3QtPnNpemUoKSwgMSk7Ci0gICAgICAgIFJlZlB0
cjxKU09OOjpBcnJheT4gYXJyYXk7Ci0gICAgICAgIEVYUEVDVF9UUlVFKG9iamVjdC0+Z2V0QXJy
YXkoInN1YiIsIGFycmF5KSk7CisgICAgICAgIGF1dG8gb2JqZWN0ID0gb2JqZWN0VmFsdWUtPmdl
dE9iamVjdCgiYmF6Iik7CisgICAgICAgIEVYUEVDVF9UUlVFKG9iamVjdCk7CisgICAgICAgIEVY
UEVDVF9FUShvYmplY3QtPnNpemUoKSwgMVUpOworICAgICAgICBhdXRvIGFycmF5ID0gb2JqZWN0
LT5nZXRBcnJheSgic3ViIik7CisgICAgICAgIEVYUEVDVF9UUlVFKGFycmF5KTsKICAgICAgICAg
RVhQRUNUX0VRKGFycmF5LT5sZW5ndGgoKSwgMlUpOwogICAgIH0KIAogICAgIHsKLSAgICAgICAg
UmVmUHRyPEpTT046OlZhbHVlPiB2YWx1ZTsKLSAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZh
bHVlOjpwYXJzZUpTT04oIiwiLCB2YWx1ZSkpOwotICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6
VmFsdWU6OnBhcnNlSlNPTigiXCJmb28iLCB2YWx1ZSkpOwotICAgICAgICBFWFBFQ1RfRkFMU0Uo
SlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiZm9vXCIiLCB2YWx1ZSkpOwotICAgICAgICBFWFBFQ1Rf
RkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiVHJVZSIsIHZhbHVlKSk7Ci0gICAgICAgIEVY
UEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJGYWxzZSIsIHZhbHVlKSk7Ci0gICAg
ICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCIxLmQiLCB2YWx1ZSkpOwot
ICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiWzEsXSIsIHZhbHVl
KSk7Ci0gICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCIxLDJdIiwg
dmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIlsx
LDIiLCB2YWx1ZSkpOwotICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNP
TigiWzEgMl0iLCB2YWx1ZSkpOwotICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBh
cnNlSlNPTigiWzEsMl1dIiwgdmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZh
bHVlOjpwYXJzZUpTT04oIlsxLDJdLCIsIHZhbHVlKSk7Ci0gICAgICAgIEVYUEVDVF9GQUxTRShK
U09OOjpWYWx1ZTo6cGFyc2VKU09OKCJ7Zm9vOlwiYmFyXCJ9IiwgdmFsdWUpKTsKLSAgICAgICAg
RVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIntcImZvb1wiOmJhcn0iLCB2YWx1
ZSkpOwotICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigie1wiZm9v
OlwiYmFyXCJ9IiwgdmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpw
YXJzZUpTT04oIntmb29cIjpcImJhclwifSIsIHZhbHVlKSk7Ci0gICAgICAgIEVYUEVDVF9GQUxT
RShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJ7e1wiZm9vXCI6XCJiYXJcIn19IiwgdmFsdWUpKTsK
LSAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIntcImZvb1wiOlwi
YmFyXCJ9LCIsIHZhbHVlKSk7Ci0gICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFy
c2VKU09OKCJbe1wiZm9vXCI6XCJiYXJcIn0se1wiYmF6XCI6ZmFsc2V9LF0iLCB2YWx1ZSkpOwot
ICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiW3tcImZvb1wiOntc
ImJhelwiOmZhbHNlfV0iLCB2YWx1ZSkpOworICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFs
dWU6OnBhcnNlSlNPTigiLCIpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpw
YXJzZUpTT04oIlwiZm9vIikpOworICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBh
cnNlSlNPTigiZm9vXCIiKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFy
c2VKU09OKCJUclVlIikpOworICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNl
SlNPTigiRmFsc2UiKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VK
U09OKCIxLmQiKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09O
KCJbMSxdIikpOworICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigi
MSwyXSIpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIlsx
LDIiKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJbMSAy
XSIpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIlsxLDJd
XSIpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIlsxLDJd
LCIpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIntmb286
XCJiYXJcIn0iKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09O
KCJ7XCJmb29cIjpiYXJ9IikpOworICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBh
cnNlSlNPTigie1wiZm9vOlwiYmFyXCJ9IikpOworICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6
VmFsdWU6OnBhcnNlSlNPTigie2Zvb1wiOlwiYmFyXCJ9IikpOworICAgICAgICBFWFBFQ1RfRkFM
U0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigie3tcImZvb1wiOlwiYmFyXCJ9fSIpKTsKKyAgICAg
ICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIntcImZvb1wiOlwiYmFyXCJ9
LCIpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIlt7XCJm
b29cIjpcImJhclwifSx7XCJiYXpcIjpmYWxzZX0sXSIpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNF
KEpTT046OlZhbHVlOjpwYXJzZUpTT04oIlt7XCJmb29cIjp7XCJiYXpcIjpmYWxzZX1dIikpOwog
ICAgIH0KIAogICAgIHsKLSAgICAgICAgUmVmUHRyPEpTT046OlZhbHVlPiB2YWx1ZTsKLSAgICAg
ICAgRVhQRUNUX1RSVUUoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiIFwiZm9vXCIgXG4iLCB2YWx1
ZSkpOwotICAgICAgICBTdHJpbmcgc3RyaW5nVmFsdWU7Ci0gICAgICAgIEVYUEVDVF9UUlVFKHZh
bHVlLT5hc1N0cmluZyhzdHJpbmdWYWx1ZSkpOworICAgICAgICBhdXRvIHZhbHVlID0gSlNPTjo6
VmFsdWU6OnBhcnNlSlNPTigiIFwiZm9vXCIgXG4iKTsKKyAgICAgICAgRVhQRUNUX1RSVUUodmFs
dWUpOworICAgICAgICBhdXRvIHN0cmluZ1ZhbHVlID0gdmFsdWUtPmFzU3RyaW5nKCk7CisgICAg
ICAgIEVYUEVDVF9UUlVFKCEhc3RyaW5nVmFsdWUpOwogICAgICAgICBFWFBFQ1RfRVEoImZvbyIs
IHN0cmluZ1ZhbHVlKTsKICAgICB9CiAKICAgICB7Ci0gICAgICAgIFJlZlB0cjxKU09OOjpWYWx1
ZT4gdmFsdWU7Ci0gICAgICAgIEVYUEVDVF9UUlVFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIiAx
IiwgdmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX1RSVUUoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigi
XHQxIiwgdmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX1RSVUUoSlNPTjo6VmFsdWU6OnBhcnNlSlNP
TigiXG4xIiwgdmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX1RSVUUoSlNPTjo6VmFsdWU6OnBhcnNl
SlNPTigiMSAiLCB2YWx1ZSkpOwotICAgICAgICBFWFBFQ1RfVFJVRShKU09OOjpWYWx1ZTo6cGFy
c2VKU09OKCIxXHQiLCB2YWx1ZSkpOwotICAgICAgICBFWFBFQ1RfVFJVRShKU09OOjpWYWx1ZTo6
cGFyc2VKU09OKCIxXG4iLCB2YWx1ZSkpOwotICAgICAgICBFWFBFQ1RfVFJVRShKU09OOjpWYWx1
ZTo6cGFyc2VKU09OKCIgMSAiLCB2YWx1ZSkpOwotICAgICAgICBFWFBFQ1RfVFJVRShKU09OOjpW
YWx1ZTo6cGFyc2VKU09OKCIge30gIiwgdmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX1RSVUUoSlNP
Tjo6VmFsdWU6OnBhcnNlSlNPTigiIFtdICIsIHZhbHVlKSk7Ci0gICAgICAgIEVYUEVDVF9UUlVF
KEpTT046OlZhbHVlOjpwYXJzZUpTT04oIlwiXFx4RkZcIiIsIHZhbHVlKSk7Ci0gICAgICAgIEVY
UEVDVF9UUlVFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIlwiXFx1MTIzNFwiIiwgdmFsdWUpKTsK
KyAgICAgICAgRVhQRUNUX1RSVUUoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiIDEiKSk7CisgICAg
ICAgIEVYUEVDVF9UUlVFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIlx0MSIpKTsKKyAgICAgICAg
RVhQRUNUX1RSVUUoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiXG4xIikpOworICAgICAgICBFWFBF
Q1RfVFJVRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCIxICIpKTsKKyAgICAgICAgRVhQRUNUX1RS
VUUoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiMVx0IikpOworICAgICAgICBFWFBFQ1RfVFJVRShK
U09OOjpWYWx1ZTo6cGFyc2VKU09OKCIxXG4iKSk7CisgICAgICAgIEVYUEVDVF9UUlVFKEpTT046
OlZhbHVlOjpwYXJzZUpTT04oIiAxICIpKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoSlNPTjo6VmFs
dWU6OnBhcnNlSlNPTigiIHt9ICIpKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoSlNPTjo6VmFsdWU6
OnBhcnNlSlNPTigiIFtdICIpKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoSlNPTjo6VmFsdWU6OnBh
cnNlSlNPTigiXCJcXHhGRlwiIikpOworICAgICAgICBFWFBFQ1RfVFJVRShKU09OOjpWYWx1ZTo6
cGFyc2VKU09OKCJcIlxcdTEyMzRcIiIpKTsKIAotICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6
VmFsdWU6OnBhcnNlSlNPTigiMSAxIiwgdmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX0ZBTFNFKEpT
T046OlZhbHVlOjpwYXJzZUpTT04oInt9IHt9IiwgdmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX0ZB
TFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIltdIFtdIiwgdmFsdWUpKTsKLSAgICAgICAgRVhQ
RUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIlwiXFwiLCB2YWx1ZSkpOwotICAgICAg
ICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiXCJcXHhGIiwgdmFsdWUpKTsK
LSAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIlwiXFx4RlwiIiwg
dmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIlwi
XFx4RiBcIiIsIHZhbHVlKSk7Ci0gICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFy
c2VKU09OKCJcIlxcdTEiLCB2YWx1ZSkpOwotICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFs
dWU6OnBhcnNlSlNPTigiXCJcXHUxXCIiLCB2YWx1ZSkpOwotICAgICAgICBFWFBFQ1RfRkFMU0Uo
SlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiXCJcXHUxICAgXCIiLCB2YWx1ZSkpOwotICAgICAgICBF
WFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiXCJcXHUxMiIsIHZhbHVlKSk7Ci0g
ICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJcIlxcdTEyXCIiLCB2
YWx1ZSkpOwotICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiXCJc
XHUxMiAgXCIiLCB2YWx1ZSkpOwotICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBh
cnNlSlNPTigiXCJcXHUxMjMiLCB2YWx1ZSkpOwotICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6
VmFsdWU6OnBhcnNlSlNPTigiXCJcXHUxMjNcIiIsIHZhbHVlKSk7Ci0gICAgICAgIEVYUEVDVF9G
QUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJcIlxcdTEyMyBcIiIsIHZhbHVlKSk7CisgICAg
ICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCIxIDEiKSk7CisgICAgICAg
IEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJ7fSB7fSIpKTsKKyAgICAgICAg
RVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIltdIFtdIikpOworICAgICAgICBF
WFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiXCJcXCIpKTsKKyAgICAgICAgRVhQ
RUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIlwiXFx4RiIpKTsKKyAgICAgICAgRVhQ
RUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIlwiXFx4RlwiIikpOworICAgICAgICBF
WFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiXCJcXHhGIFwiIikpOworICAgICAg
ICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiXCJcXHUxIikpOworICAgICAg
ICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiXCJcXHUxXCIiKSk7CisgICAg
ICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJcIlxcdTEgICBcIiIpKTsK
KyAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIlwiXFx1MTIiKSk7
CisgICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJcIlxcdTEyXCIi
KSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJcIlxcdTEy
ICBcIiIpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIlwi
XFx1MTIzIikpOworICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigi
XCJcXHUxMjNcIiIpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpT
T04oIlwiXFx1MTIzIFwiIikpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDdiZWE4YWQwZDMxNjNkY2Iz
NTllY2JiZWJhNzVkMTY5YmI0Mzc0NzYuLjQ0MjIzNGYzNzgwN2FiM2IyYTI4M2YzODQxMzU4ZWJm
ZDNkZmRjN2MgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAyMC0wOS0wOCAgRGV2aW4gUm91c3Nv
ICA8ZHJvdXNzb0BhcHBsZS5jb20+CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogbW9kZXJuaXpl
IGdlbmVyYXRlZCBiYWNrZW5kIHByb3RvY29sIGNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNjMwMgorICAgICAgICA8cmRhcjovL3Byb2JsZW0v
Njg1NDc2NDk+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBpbnNwZWN0b3IvY2FudmFzL3JlcXVlc3RTaGFkZXJTb3VyY2UtZXhwZWN0ZWQudHh0Ogor
ICAgICAgICAqIGluc3BlY3Rvci9jYW52YXMvdXBkYXRlU2hhZGVyLWV4cGVjdGVkLnR4dDoKKyAg
ICAgICAgKiBpbnNwZWN0b3IvY29uc29sZS93ZWJjb3JlLWxvZ2dpbmctZXhwZWN0ZWQudHh0Ogor
ICAgICAgICAqIGluc3BlY3Rvci9kb20vaGlnaGxpZ2h0UXVhZC1leHBlY3RlZC50eHQ6CisgICAg
ICAgICogaW5zcGVjdG9yL3dvcmtlci9kb20tZGVidWdnZXItZG9tLWJyZWFrcG9pbnRzLWV4cGVj
dGVkLnR4dDoKKwogMjAyMC0wOS0wNSAgRGV2aW4gUm91c3NvICA8ZHJvdXNzb0BhcHBsZS5jb20+
CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogYWxsb3cgRE9NIGJyZWFrcG9pbnRzIHRvIGJlIGNv
bmZpZ3VyZWQKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9jYW52YXMvcmVxdWVz
dFNoYWRlclNvdXJjZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvY2FudmFz
L3JlcXVlc3RTaGFkZXJTb3VyY2UtZXhwZWN0ZWQudHh0CmluZGV4IGY5MmY0OTVkMzhjZTY4NTNh
M2E1MzU0YWE1ODEzZTBiYzRjZTE1NWUuLjJjNWRjZTgzMjA0MTI1ZDBhZTBkMGJmYTBjMjMzOThl
NjUzZDRkMzEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9jYW52YXMvcmVxdWVz
dFNoYWRlclNvdXJjZS1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2Nh
bnZhcy9yZXF1ZXN0U2hhZGVyU291cmNlLWV4cGVjdGVkLnR4dApAQCAtNCw1ICs0LDUgQEAgQ29t
bW9uIHRlc3RzIGZvciBDYW52YXMucmVxdWVzdFNoYWRlclNvdXJjZSBjb21tYW5kLgogPT0gUnVu
bmluZyB0ZXN0IHN1aXRlOiBDYW52YXMucmVxdWVzdFNoYWRlclNvdXJjZQogLS0gUnVubmluZyB0
ZXN0IGNhc2U6IENhbnZhcy5yZXF1ZXN0U2hhZGVyU291cmNlLlByb2dyYW1JZC5JbnZhbGlkCiBQ
QVNTOiBTaG91bGQgcHJvZHVjZSBhbiBlcnJvci4KLUVycm9yOiBNaXNzaW5nIHByb2dyYW0gZm9y
IGdpdmVuIHByb2dyYW1JZAorRXJyb3I6IFVua25vd24gc2hhZGVyVHlwZTogSU5WQUxJRF9TSEFE
RVJfVFlQRQogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvY2FudmFzL3VwZGF0
ZVNoYWRlci1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvY2FudmFzL3VwZGF0
ZVNoYWRlci1leHBlY3RlZC50eHQKaW5kZXggY2UzN2U4ZTZhOWM4MDBlZmM4ZjdmMDZlY2M0NTJj
YTQzMWNiMTAxNy4uMzRmMWJkMmY5MjEyNjlkNzBmNjJiYjdmYWZiOGQwMjY0MzQyYTgwYiAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2NhbnZhcy91cGRhdGVTaGFkZXItZXhwZWN0
ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9jYW52YXMvdXBkYXRlU2hhZGVyLWV4
cGVjdGVkLnR4dApAQCAtNCw1ICs0LDUgQEAgQ29tbW9uIHRlc3RzIGZvciBDYW52YXMudXBkYXRl
U2hhZGVyIGNvbW1hbmQuCiA9PSBSdW5uaW5nIHRlc3Qgc3VpdGU6IENhbnZhcy51cGRhdGVTaGFk
ZXIKIC0tIFJ1bm5pbmcgdGVzdCBjYXNlOiBDYW52YXMudXBkYXRlU2hhZGVyLlByb2dyYW1JZC5J
bnZhbGlkCiBQQVNTOiBTaG91bGQgcHJvZHVjZSBhbiBlcnJvci4KLUVycm9yOiBNaXNzaW5nIHBy
b2dyYW0gZm9yIGdpdmVuIHByb2dyYW1JZAorRXJyb3I6IFVua25vd24gc2hhZGVyVHlwZTogSU5W
QUxJRF9TSEFERVJfVFlQRQogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvY29u
c29sZS93ZWJjb3JlLWxvZ2dpbmctZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9y
L2NvbnNvbGUvd2ViY29yZS1sb2dnaW5nLWV4cGVjdGVkLnR4dAppbmRleCA1YjUyZTJhNzJjYTgx
YzcwMmNiYmY1ZmU1OWMzYzZiMGZhMjc1N2EzLi41Mjg0YzkyMDZiZmU4OTNhMjQwMDBlN2Q3MWJj
ODBjNWE1MzhkYTQwIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvY29uc29sZS93
ZWJjb3JlLWxvZ2dpbmctZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9j
b25zb2xlL3dlYmNvcmUtbG9nZ2luZy1leHBlY3RlZC50eHQKQEAgLTE1LDkgKzE1LDEzIEBAIFBB
U1M6IExvZyBjaGFubmVsIGhhcyBrbm93biBzb3VyY2UuCiBQQVNTOiBMb2cgY2hhbm5lbCBkaXNh
YmxlZCBieSBkZWZhdWx0LgogUEFTUzogTG9nIGNoYW5uZWwgaGFzIGtub3duIHNvdXJjZS4KIFBB
U1M6IExvZyBjaGFubmVsIGRpc2FibGVkIGJ5IGRlZmF1bHQuCitQQVNTOiBMb2cgY2hhbm5lbCBo
YXMga25vd24gc291cmNlLgorUEFTUzogTG9nIGNoYW5uZWwgZGlzYWJsZWQgYnkgZGVmYXVsdC4K
K1BBU1M6IExvZyBjaGFubmVsIGhhcyBrbm93biBzb3VyY2UuCitQQVNTOiBMb2cgY2hhbm5lbCBk
aXNhYmxlZCBieSBkZWZhdWx0LgogCiAtLSBSdW5uaW5nIHRlc3QgY2FzZTogQ29uc29sZS5Mb2dn
aW5nLkludmFsaWRMZXZlbAotUEFTUzogVW5rbm93biBjaGFubmVsTGV2ZWw6IERPRVNfTk9UX0VY
SVNUCitQQVNTOiBVbmtub3duIGxldmVsOiBET0VTX05PVF9FWElTVAogCiAtLSBSdW5uaW5nIHRl
c3QgY2FzZTogQ29uc29sZS5Mb2dnaW5nLk5vTG9nZ2luZwogUEFTUzogTWVkaWEgbG9nZ2luZyBk
aXNhYmxlZC4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9kb20vaGlnaGxpZ2h0
UXVhZC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZG9tL2hpZ2hsaWdodFF1
YWQtZXhwZWN0ZWQudHh0CmluZGV4IGU3ODExN2EzYTUwZmFjOTc1OWI0ZjM0ZTFlODI1Y2UwN2Vk
MTFhODUuLmExZjNiMmZlNzY1ODI3YmZiMTRhYTJiYjA2ZDBhZDg2NDY3NDY2NTUgMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9kb20vaGlnaGxpZ2h0UXVhZC1leHBlY3RlZC50eHQK
KysrIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RvbS9oaWdobGlnaHRRdWFkLWV4cGVjdGVkLnR4
dApAQCAtMzEsNSArMzEsNSBAQCBIaWdobGlnaHQgUmVjdDogeyJ4IjotMTAsInkiOi0xMCwid2lk
dGgiOjEwMDAsImhlaWdodCI6MjAwMCwidG9wIjotMTAsInJpZ2h0Ijo5OQogCiAtLSBSdW5uaW5n
IHRlc3QgY2FzZTogQmFkUXVhZFNob3VsZEVycm9yCiBQQVNTOiBTaG91bGQgcHJvZHVjZSBhbiBl
cnJvci4KLUVycm9yOiBVbmV4cGVjdGVkIGludmFsaWQgcXVhZEFycmF5CitFcnJvcjogVW5leHBl
Y3RlZCBpbnZhbGlkIHF1YWQKIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3dv
cmtlci9kb20tZGVidWdnZXItZG9tLWJyZWFrcG9pbnRzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRl
c3RzL2luc3BlY3Rvci93b3JrZXIvZG9tLWRlYnVnZ2VyLWRvbS1icmVha3BvaW50cy1leHBlY3Rl
ZC50eHQKaW5kZXggZmE4ZTc2MmFhMzJjZTVhZTFjZmU4NTFmOTc0OGIzNTM5ZjUxZTI0Zi4uM2Rm
MjI4ODZlMzEyYmVmNTY5YjEzOTRjNGE0NGM4MzNlYzNiNTY0MyAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvaW5zcGVjdG9yL3dvcmtlci9kb20tZGVidWdnZXItZG9tLWJyZWFrcG9pbnRzLWV4cGVj
dGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3Ivd29ya2VyL2RvbS1kZWJ1Z2dlci1k
b20tYnJlYWtwb2ludHMtZXhwZWN0ZWQudHh0CkBAIC00LDkgKzQsOSBAQCBUZXN0cyBmb3IgRE9N
IGJyZWFrcG9pbnQgZnVuY3Rpb25hbGl0eSAoRE9NRGVidWdnZXIpIGluIGEgV29ya2VyLgogPT0g
UnVubmluZyB0ZXN0IHN1aXRlOiBXb3JrZXIuRE9NRGVidWdnZXIuRE9NQnJlYWtwb2ludAogLS0g
UnVubmluZyB0ZXN0IGNhc2U6IFdvcmtlci5ET01EZWJ1Z2dlci5ET01CcmVha3BvaW50LnNldERP
TUJyZWFrcG9pbnQKIFBBU1M6IFNob3VsZCBwcm9kdWNlIGFuIGV4Y2VwdGlvbi4KLUVycm9yOiBO
b3Qgc3VwcG9ydGVkCitFcnJvcjogVW5rbm93biB0eXBlOiBJTlZBTElECiAKIC0tIFJ1bm5pbmcg
dGVzdCBjYXNlOiBXb3JrZXIuRE9NRGVidWdnZXIuRE9NQnJlYWtwb2ludC5yZW1vdmVET01CcmVh
a3BvaW50CiBQQVNTOiBTaG91bGQgcHJvZHVjZSBhbiBleGNlcHRpb24uCi1FcnJvcjogTm90IHN1
cHBvcnRlZAorRXJyb3I6IFVua25vd24gdHlwZTogSU5WQUxJRAogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>408314</attachid>
            <date>2020-09-08 23:51:49 -0700</date>
            <delta_ts>2020-09-08 23:58:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216302-20200908235148.patch</filename>
            <type>text/plain</type>
            <size>1526095</size>
            <attacher name="Devin Rousso">hi</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDdhMGViNGY4YTlhMTBhMTkyZjg2MGNjMTc1MjI4
ZDNkMWRhMzQ0NDEuLjM1Y2IwMThmMTA5ZDk4MTRiODk3MmE2MDcwM2M4ZTliYTY3YmU4ODYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyOCBAQAorMjAyMC0wOS0wOCAgRGV2
aW4gUm91c3NvICA8ZHJvdXNzb0BhcHBsZS5jb20+CisKKyAgICAgICAgV2ViIEluc3BlY3Rvcjog
bW9kZXJuaXplIGdlbmVyYXRlZCBiYWNrZW5kIHByb3RvY29sIGNvZGUKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNjMwMgorICAgICAgICA8cmRhcjov
L3Byb2JsZW0vNjg1NDc2NDk+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgUHJldmlvdXNseSwgdGhlIGluc3BlY3RvciBwcm90b2NvbCB3YXMgZXhwcmVz
c2VkIGluIGNvZGUgaW4gYSBzb21ld2hhdCBjb25mdXNpbmcgd2F5OgorICAgICAgICAgLSB0aGUg
ZXJyb3Igc3RyaW5nIHdhcyB0aGUgZmlyc3QgYXJndW1lbnQKKyAgICAgICAgIC0gcmVxdWlyZWQg
cGFyYW1ldGVycyB3ZXJlIGBUYCBvciBgY29uc3QgVCZgCisgICAgICAgICAtIG9wdGlvbmFsIHBh
cmFtZXRlcnMgd2VyZSBgY29uc3QgVCpgCisgICAgICAgICAtIGVudW0gcGFyYW1ldGVycyB3ZXJl
IHRoZSB1bmRlcmx5aW5nIHR5cGUgcmVxdWlyaW5nIHRoZSBiYWNrZW5kIGRpc3BhdGNoZXIgaGFu
ZGxlciB0bworICAgICAgICAgICBwcm9jZXNzIGl0IGluc3RlYWQgb2YgaXQgYmVpbmcgcHJlcHJv
Y2Vzc2VkCisgICAgICAgICAtIHJlcXVpcmVkIHJldHVybnMgd2VyZSBgVCZgCisgICAgICAgICAt
IG9wdGlvbmFsIHJldHVybnMgd2VyZSBgVCpgCisgICAgICAgIFRoaXMgZG9lc24ndCByZWFsbHkg
bWFrZSBmb3IgZWFzeS9vYnZpb3VzIHJlYWRpbmcgb2YgY29kZSBzaW5jZSB0aGUgb3JkZXIgb2Yg
YXJndW1lbnRzIGlzCisgICAgICAgIG5vdCB3ZWlyZCAoZS5nLiBlcnJvciBzdHJpbmcgZmlyc3Qp
LCBhbmQgdGhhdCB0aGVyZSBhcmUgcmVmZXJlbmNlcy9wb2ludGVycyB0byBwcmltaXRpdmUKKyAg
ICAgICAgdHlwZXMuCisKKyAgICAgICAgVGhpcyBwYXRjaCBjbGVhbnMgdXAgdGhlIGdlbmVyYXRl
ZCBpbnNwZWN0b3IgcHJvdG9jb2wgY29kZSB0byBiZToKKyAgICAgICAgIC0gcmVxdWlyZWQgcGFy
YW1ldGVycyBhcmUgYFRgIG9yIGBSZWY8VD4mJmAKKyAgICAgICAgIC0gb3B0aW9uYWwgcGFyYW1l
dGVycyBhcmUgYE9wdGlvbmFsPFQ+JiZgIG9yIGBSZWZQdHI8VD4mJmAKKyAgICAgICAgIC0gZW51
bSBwYXJhbWV0ZXJzIGFyZSBwcmVwcm9jZXNzZWQgYW5kIHBhc3NlZCB0byB0aGUgYmFja2VuZCBk
aXNwYXRjaGVyIGhhbmRsZXIgaWYgdmFsaWQKKyAgICAgICAgIC0gc3luY2hyb25vdXMgY29tbWFu
ZHMgcmV0dXJuIGBFeHBlY3RlZDxYLCBFcnJvclN0cmluZz5gIHVzaW5nIHRoZSBzYW1lIHR5cGVz
L3J1bGVzIGFib3ZlCisgICAgICAgICAgIHdoZXJlIGBYYCBpcyBlaXRoZXIgYSBzaW5nbGUgcmV0
dXJuIG9yIGEgYHN0ZDo6dHVwbGVgIG9mIG11bHRpcGxlIHJldHVybnMKKworICAgICAgICBUaGUg
b25lIGV4Y2VwdGlvbiB0byB0aGUgYWJvdmUgaXMgYFN0cmluZ2AsIHdoaWNoIGlzIGFscmVhZHkg
YSB0cmktc3RhdGUgb2YgYG51bGxTdHJpbmcoKWAsCisgICAgICAgIGBlbXB0eVN0cmluZygpYCwg
YW5kIHNvbWV0aGluZyBzZXQsIHNvIHRoZXJlJ3Mgbm8gbmVlZCB0byB1c2UgYE9wdGlvbmFsPFN0
cmluZz5gLgorCisgICAgICAgIEFsc28gdXNlIGBQcm90b2NvbGAgb2JqZWN0cy9gdHlwZWRlZnNg
IHdoZXJldmVyIHBvc3NpYmxlIHRvIGZ1cnRoZXIgcmVsYXRlIHRoZSBwcm90b2NvbAorICAgICAg
ICBKU09OIGFuZCB0aGUgYWN0dWFsIGJhY2tlbmQgZGlzcGF0Y2hlciBoYW5kbGVyIGltcGxlbWVu
dGF0aW9uLgorCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0b3Iu
cHk6CisgICAgICAgIChHZW5lcmF0b3IuZ2VuZXJhdGVfaW5jbHVkZXNfZnJvbV9lbnRyaWVzKToK
KyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2NwcF9nZW5lcmF0b3JfdGVtcGxh
dGVzLnB5OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vY3BwX2dlbmVyYXRv
ci5weToKKyAgICAgICAgKENwcEdlbmVyYXRvci5oZWxwZXJzX25hbWVzcGFjZSk6CisgICAgICAg
IChDcHBHZW5lcmF0b3IuY3BwX2dldHRlcl9tZXRob2RfZm9yX3R5cGUpOgorICAgICAgICAoQ3Bw
R2VuZXJhdG9yLmNwcF9zZXR0ZXJfbWV0aG9kX2Zvcl90eXBlKToKKyAgICAgICAgKENwcEdlbmVy
YXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZSk6CisgICAgICAgIChDcHBHZW5lcmF0b3Iu
Y3BwX3R5cGVfZm9yX3R5cGVfbWVtYmVyX2FyZ3VtZW50KTogQWRkZWQuCisgICAgICAgIChDcHBH
ZW5lcmF0b3IuY3BwX3R5cGVfZm9yX2NvbW1hbmRfcGFyYW1ldGVyKTogQWRkZWQuCisgICAgICAg
IChDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX2NvbW1hbmRfcmV0dXJuX2RlY2xhcmF0aW9uKTog
QWRkZWQuCisgICAgICAgIChDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX2NvbW1hbmRfcmV0dXJu
X2FyZ3VtZW50KTogQWRkZWQuCisgICAgICAgIChDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX2V2
ZW50X3BhcmFtZXRlcik6IEFkZGVkLgorICAgICAgICAoQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zv
cl9lbnVtKTogQWRkZWQuCisgICAgICAgIChDcHBHZW5lcmF0b3Iuc2hvdWxkX21vdmVfYXJndW1l
bnQpOiBBZGRlZC4KKyAgICAgICAgKENwcEdlbmVyYXRvci5zaG91bGRfcmVsZWFzZV9hcmd1bWVu
dCk6IEFkZGVkLgorICAgICAgICAoQ3BwR2VuZXJhdG9yLnNob3VsZF9kZXJlZmVyZW5jZV9hcmd1
bWVudCk6IEFkZGVkLgorICAgICAgICAoQ3BwR2VuZXJhdG9yLmNwcF9wcm90b2NvbF90eXBlX2Zv
cl90eXBlX21lbWJlcik6IERlbGV0ZWQuCisgICAgICAgIChDcHBHZW5lcmF0b3IuY3BwX3R5cGVf
Zm9yX3VuY2hlY2tlZF9mb3JtYWxfaW5fcGFyYW1ldGVyKTogRGVsZXRlZC4KKyAgICAgICAgKENw
cEdlbmVyYXRvci5jcHBfdHlwZV9mb3JfY2hlY2tlZF9mb3JtYWxfZXZlbnRfcGFyYW1ldGVyKTog
RGVsZXRlZC4KKyAgICAgICAgKENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3JfdHlwZV9tZW1iZXIp
OiBEZWxldGVkLgorICAgICAgICAoQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl90eXBlX3dpdGhf
bmFtZSk6IERlbGV0ZWQuCisgICAgICAgIChDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX2Zvcm1h
bF9vdXRfcGFyYW1ldGVyKTogRGVsZXRlZC4KKyAgICAgICAgKENwcEdlbmVyYXRvci5jcHBfdHlw
ZV9mb3JfZm9ybWFsX2FzeW5jX3BhcmFtZXRlcik6IERlbGV0ZWQuCisgICAgICAgIChDcHBHZW5l
cmF0b3IuY3BwX3R5cGVfZm9yX3N0YWNrX2luX3BhcmFtZXRlcik6IERlbGV0ZWQuCisgICAgICAg
IChDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX3N0YWNrX291dF9wYXJhbWV0ZXIpOiBEZWxldGVk
LgorICAgICAgICAoQ3BwR2VuZXJhdG9yLmNwcF9hc3NlcnRpb25fbWV0aG9kX2Zvcl90eXBlX21l
bWJlcik6IERlbGV0ZWQuCisgICAgICAgIChDcHBHZW5lcmF0b3IuY3BwX2Fzc2VydGlvbl9tZXRo
b2RfZm9yX3R5cGVfbWVtYmVyLmFzc2VydGlvbl9tZXRob2RfZm9yX3R5cGUpOiBEZWxldGVkLgor
ICAgICAgICAoQ3BwR2VuZXJhdG9yLnNob3VsZF91c2Vfd3JhcHBlcl9mb3JfcmV0dXJuX3R5cGUp
OiBEZWxldGVkLgorICAgICAgICAoQ3BwR2VuZXJhdG9yLnNob3VsZF91c2VfcmVmZXJlbmNlc19m
b3JfdHlwZSk6IERlbGV0ZWQuCisgICAgICAgIChDcHBHZW5lcmF0b3Iuc2hvdWxkX3Bhc3NfYnlf
Y29weV9mb3JfcmV0dXJuX3R5cGUpOiBEZWxldGVkLgorICAgICAgICAqIGluc3BlY3Rvci9zY3Jp
cHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2FsdGVybmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVh
ZGVyLnB5OgorICAgICAgICAoQ3BwQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5l
cmF0b3IuX2dlbmVyYXRlX3NlY29uZGFyeV9oZWFkZXJfaW5jbHVkZXMpOgorICAgICAgICAoQ3Bw
QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRlX2hhbmRs
ZXJfZGVjbGFyYXRpb25fZm9yX2NvbW1hbmQpOgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRz
L2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHk6CisgICAg
ICAgIChDcHBCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvci5nZW5lcmF0ZV9vdXRwdXQp
OgorICAgICAgICAoQ3BwQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRl
X3NlY29uZGFyeV9oZWFkZXJfaW5jbHVkZXMpOgorICAgICAgICAoQ3BwQmFja2VuZERpc3BhdGNo
ZXJIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRlX2hhbmRsZXJfZGVjbGFyYXRpb25zX2Zvcl9kb21h
aW4pOgorICAgICAgICAoQ3BwQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IuX2dlbmVy
YXRlX2hhbmRsZXJfZGVjbGFyYXRpb25fZm9yX2NvbW1hbmQpOgorICAgICAgICAoQ3BwQmFja2Vu
ZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRlX2FzeW5jX2hhbmRsZXJfZGVjbGFy
YXRpb25fZm9yX2NvbW1hbmQpOgorICAgICAgICAoQ3BwQmFja2VuZERpc3BhdGNoZXJIZWFkZXJH
ZW5lcmF0b3IuX2dlbmVyYXRlX2Rpc3BhdGNoZXJfZGVjbGFyYXRpb25fZm9yX2NvbW1hbmQpOgor
ICAgICAgICAoQ3BwQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRlX2Fu
b255bW91c19lbnVtX2Zvcl9wYXJhbWV0ZXIpOiBEZWxldGVkLgorICAgICAgICAqIGluc3BlY3Rv
ci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1l
bnRhdGlvbi5weToKKyAgICAgICAgKENwcEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25H
ZW5lcmF0b3IuX2dlbmVyYXRlX3NlY29uZGFyeV9oZWFkZXJfaW5jbHVkZXMpOgorICAgICAgICAo
Q3BwQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfc21h
bGxfZGlzcGF0Y2hlcl9zd2l0Y2hfaW1wbGVtZW50YXRpb25fZm9yX2RvbWFpbik6CisgICAgICAg
IChDcHBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9h
c3luY19kaXNwYXRjaGVyX2NsYXNzX2Zvcl9kb21haW4pOgorICAgICAgICAoQ3BwQmFja2VuZERp
c3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfZGlzcGF0Y2hlcl9pbXBs
ZW1lbnRhdGlvbl9mb3JfY29tbWFuZCk6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29k
ZWdlbi9nZW5lcmF0ZV9jcHBfZnJvbnRlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHk6CisgICAgICAg
IChDcHBGcm9udGVuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRlX3NlY29uZGFy
eV9oZWFkZXJfaW5jbHVkZXMpOgorICAgICAgICAoQ3BwRnJvbnRlbmREaXNwYXRjaGVySGVhZGVy
R2VuZXJhdG9yLl9nZW5lcmF0ZV9kaXNwYXRjaGVyX2RlY2xhcmF0aW9uX2Zvcl9ldmVudCk6Cisg
ICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfZnJvbnRlbmRf
ZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weToKKyAgICAgICAgKENwcEZyb250ZW5kRGlzcGF0
Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9zZWNvbmRhcnlfaGVhZGVyX2lu
Y2x1ZGVzKToKKyAgICAgICAgKENwcEZyb250ZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2Vu
ZXJhdG9yLl9nZW5lcmF0ZV9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uX2Zvcl9ldmVudCk6Cisg
ICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfcHJvdG9jb2xf
dHlwZXNfaGVhZGVyLnB5OgorICAgICAgICAoQ3BwUHJvdG9jb2xUeXBlc0hlYWRlckdlbmVyYXRv
ci5fZ2VuZXJhdGVfc2Vjb25kYXJ5X2hlYWRlcl9pbmNsdWRlcyk6CisgICAgICAgICogaW5zcGVj
dG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfcHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50
YXRpb24ucHk6CisgICAgICAgIChDcHBQcm90b2NvbFR5cGVzSW1wbGVtZW50YXRpb25HZW5lcmF0
b3IuX2dlbmVyYXRlX3NlY29uZGFyeV9oZWFkZXJfaW5jbHVkZXMpOgorICAgICAgICAoQ3BwUHJv
dG9jb2xUeXBlc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9lbnVtX2NvbnZlcnNp
b25fbWV0aG9kc19mb3JfZG9tYWluKToKKyAgICAgICAgKENwcFByb3RvY29sVHlwZXNJbXBsZW1l
bnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfb3Blbl9maWVsZF9uYW1lcyk6CisgICAgICAgIChD
cHBQcm90b2NvbFR5cGVzSW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX2Fzc2VydGlv
bl9mb3JfZW51bSk6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0
ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHk6CisgICAgICAgIChPYmpDQmFja2Vu
ZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRlX29iamNfaGFuZGxlcl9kZWNsYXJh
dGlvbl9mb3JfY29tbWFuZCk6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9n
ZW5lcmF0ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weToKKyAgICAg
ICAgKE9iakNCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0
ZV9oYW5kbGVyX2ltcGxlbWVudGF0aW9uX2Zvcl9jb21tYW5kKToKKyAgICAgICAgKE9iakNCYWNr
ZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9zdWNjZXNzX2Js
b2NrX2Zvcl9jb21tYW5kKToKKyAgICAgICAgKE9iakNCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVu
dGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9zdWNjZXNzX2Jsb2NrX2Zvcl9jb21tYW5kLmFuZCk6
CisgICAgICAgIChPYmpDQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5f
Z2VuZXJhdGVfY29udmVyc2lvbnNfZm9yX2NvbW1hbmQuaW5fcGFyYW1fZXhwcmVzc2lvbik6Cisg
ICAgICAgIChPYmpDQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2Vu
ZXJhdGVfY29udmVyc2lvbnNfZm9yX2NvbW1hbmQpOgorICAgICAgICAoT2JqQ0JhY2tlbmREaXNw
YXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX2ludm9jYXRpb25fZm9yX2Nv
bW1hbmQpOgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2Jq
Y19mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5OgorICAgICAgICAoT2JqQ0Zy
b250ZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9ldmVudCk6
CisgICAgICAgIChPYmpDRnJvbnRlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3Iu
X2dlbmVyYXRlX2V2ZW50X291dF9wYXJhbWV0ZXJzKToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2Ny
aXB0cy9jb2RlZ2VuL29iamNfZ2VuZXJhdG9yX3RlbXBsYXRlcy5weToKKyAgICAgICAgKiBpbnNw
ZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL29iamNfZ2VuZXJhdG9yLnB5OgorICAgICAgICAoT2JqQ0dl
bmVyYXRvci5wcm90b2NvbF90eXBlX2Zvcl90eXBlKToKKyAgICAgICAgKE9iakNHZW5lcmF0b3Iu
b2JqY190eXBlX2Zvcl9wYXJhbV9pbnRlcm5hbCk6CisgICAgICAgIChPYmpDR2VuZXJhdG9yLm9i
amNfcHJvdG9jb2xfaW1wb3J0X2V4cHJlc3Npb25fZm9yX3BhcmFtZXRlcik6CisKKyAgICAgICAg
KiBpbnNwZWN0b3IvcHJvdG9jb2wvUGFnZS5qc29uOgorICAgICAgICBOb3cgdGhhdCBlbnVtcyBh
cmUgcHJvY2Vzc2VkIGJlZm9yZSBiZWluZyBwYXNzZWQgdG8gYmFja2VuZCBkaXNwYWNoZXIgaGFu
ZGxlcnMsIHRoZQorICAgICAgICBgYXBwZWFyYW5jZWAgcGFyYW1ldGVyIG9mIGBQYWdlLnNldEZv
cmNlZEFwcGVhcmFuY2VgIG11c3QgYmUgbWFya2VkIGBvcHRpb25hbGAgYXMKKyAgICAgICAgdGhl
cmUncyBubyB3YXkgZm9yIGl0IHRvIGFjY2VwdCBhbiBlbXB0eSBzdHJpbmcsIGFzIHRoYXQncyBu
b3QgcG9zc2libGUgZm9yIGFuIGVudW0uCisKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0lu
c3BlY3RvckFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBZ2Vu
dC5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBdWRpdEFnZW50Lmg6
CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBdWRpdEFnZW50LmNwcDoKKyAg
ICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNvbnNvbGVBZ2VudC5oOgorICAgICAg
ICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ29uc29sZUFnZW50LmNwcDoKKyAgICAgICAg
KiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuaDoKKyAgICAgICAgKiBp
bnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwOgorICAgICAgICAqIGlu
c3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9ySGVhcEFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9y
L2FnZW50cy9JbnNwZWN0b3JIZWFwQWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2Vu
dHMvSW5zcGVjdG9yUnVudGltZUFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9J
bnNwZWN0b3JSdW50aW1lQWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5z
cGVjdG9yU2NyaXB0UHJvZmlsZXJBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9yU2NyaXB0UHJvZmlsZXJBZ2VudC5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL2Fn
ZW50cy9JbnNwZWN0b3JUYXJnZXRBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9yVGFyZ2V0QWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSlNH
bG9iYWxPYmplY3RBdWRpdEFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9KU0ds
b2JhbE9iamVjdEF1ZGl0QWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSlNH
bG9iYWxPYmplY3REZWJ1Z2dlckFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9K
U0dsb2JhbE9iamVjdERlYnVnZ2VyQWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2Vu
dHMvSlNHbG9iYWxPYmplY3RSdW50aW1lQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdl
bnRzL0pTR2xvYmFsT2JqZWN0UnVudGltZUFnZW50LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3Iv
SlNHbG9iYWxPYmplY3RDb25zb2xlQ2xpZW50LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSlNH
bG9iYWxPYmplY3RJbnNwZWN0b3JDb250cm9sbGVyLmNwcDoKKyAgICAgICAgRWxpZGVkIGJhY2tl
bmQgZGlzcGF0Y2hlciBoYW5kbGVyIGNoYW5nZXMgZGVzY3JpYmUgYWJvdmUuCisKKyAgICAgICAg
KiBiaW5kaW5ncy9TY3JpcHRWYWx1ZS5jcHA6CisgICAgICAgIChJbnNwZWN0b3I6OmpzVG9JbnNw
ZWN0b3JWYWx1ZSk6CisgICAgICAgICogaW5zcGVjdG9yL0FzeW5jU3RhY2tUcmFjZS5oOgorICAg
ICAgICAqIGluc3BlY3Rvci9Bc3luY1N0YWNrVHJhY2UuY3BwOgorICAgICAgICAoSW5zcGVjdG9y
OjpBc3luY1N0YWNrVHJhY2U6OmJ1aWxkSW5zcGVjdG9yT2JqZWN0IGNvbnN0KToKKyAgICAgICAg
KiBpbnNwZWN0b3IvQ29uc29sZU1lc3NhZ2UuY3BwOgorICAgICAgICAoSW5zcGVjdG9yOjpDb25z
b2xlTWVzc2FnZTo6YWRkVG9Gcm9udGVuZCk6CisgICAgICAgICogaW5zcGVjdG9yL0luamVjdGVk
U2NyaXB0QmFzZS5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbmplY3RlZFNjcmlwdEJhc2UuY3Bw
OgorICAgICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdEJhc2U6Om1ha2VFdmFsQ2FsbCk6
CisgICAgICAgIChJbnNwZWN0b3I6OkluamVjdGVkU2NyaXB0QmFzZTo6Y2hlY2tDYWxsUmVzdWx0
KToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHRCYXNlOjpjaGVja0FzeW5jQ2Fs
bFJlc3VsdCk6CisgICAgICAgICogaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0Lmg6CisgICAgICAg
ICogaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0LmNwcDoKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5q
ZWN0ZWRTY3JpcHQ6OmV4ZWN1dGUpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlw
dDo6ZXZhbHVhdGUpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdDo6Y2FsbEZ1
bmN0aW9uT24pOgorICAgICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdDo6ZXZhbHVhdGVP
bkNhbGxGcmFtZSk6CisgICAgICAgIChJbnNwZWN0b3I6OkluamVjdGVkU2NyaXB0OjpnZXRGdW5j
dGlvbkRldGFpbHMpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdDo6ZnVuY3Rp
b25EZXRhaWxzKToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHQ6OmdldFByZXZp
ZXcpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdDo6Z2V0UHJvcGVydGllcyk6
CisgICAgICAgIChJbnNwZWN0b3I6OkluamVjdGVkU2NyaXB0OjpnZXREaXNwbGF5YWJsZVByb3Bl
cnRpZXMpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdDo6Z2V0SW50ZXJuYWxQ
cm9wZXJ0aWVzKToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHQ6OmdldENvbGxl
Y3Rpb25FbnRyaWVzKToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHQ6OnNhdmVS
ZXN1bHQpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdDo6d3JhcENhbGxGcmFt
ZXMgY29uc3QpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdDo6d3JhcE9iamVj
dCBjb25zdCk6CisgICAgICAgIChJbnNwZWN0b3I6OkluamVjdGVkU2NyaXB0Ojp3cmFwSlNPTlN0
cmluZyBjb25zdCk6CisgICAgICAgIChJbnNwZWN0b3I6OkluamVjdGVkU2NyaXB0Ojp3cmFwVGFi
bGUgY29uc3QpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdDo6cHJldmlld1Zh
bHVlIGNvbnN0KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmNw
cDoKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOjppbmplY3RlZFNj
cmlwdEZvck9iamVjdElkKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXIuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXIuY3BwOgorICAgICAgICAoSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tC
YXNlOjpzZW5kU3VjY2Vzcyk6CisgICAgICAgIChJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVy
OjpkaXNwYXRjaCk6CisgICAgICAgIChJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyOjpzZW5k
UmVzcG9uc2UpOgorICAgICAgICAoSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0UHJv
cGVydHlWYWx1ZSk6CisgICAgICAgIChJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyOjpnZXRC
b29sZWFuKToKKyAgICAgICAgKEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXI6OmdldEludGVn
ZXIpOgorICAgICAgICAoSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0RG91YmxlKToK
KyAgICAgICAgKEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXI6OmdldFN0cmluZyk6CisgICAg
ICAgIChJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyOjpnZXRWYWx1ZSk6CisgICAgICAgIChJ
bnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyOjpnZXRPYmplY3QpOgorICAgICAgICAoSW5zcGVj
dG9yOjpCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0QXJyYXkpOgorICAgICAgICAoSW5zcGVjdG9yOjpj
YXN0VG9JbnRlZ2VyKTogRGVsZXRlZC4KKyAgICAgICAgKEluc3BlY3Rvcjo6Y2FzdFRvTnVtYmVy
KTogRGVsZXRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5o
OgorICAgICAgICAoSW5zcGVjdG9yOjpQcm90b2NvbDo6QmluZGluZ1RyYWl0czxKU09OOjpBcnJh
eU9mPFQ+Pjo6cnVudGltZUNhc3QpOgorICAgICAgICAoSW5zcGVjdG9yOjpQcm90b2NvbDo6Qmlu
ZGluZ1RyYWl0czxKU09OOjpBcnJheU9mPFQ+Pjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUp
OgorICAgICAgICAqIGluc3BlY3Rvci9yZW1vdGUvc29ja2V0L1JlbW90ZUluc3BlY3RvckNvbm5l
Y3Rpb25DbGllbnQuY3BwOgorICAgICAgICAoSW5zcGVjdG9yOjpSZW1vdGVJbnNwZWN0b3JDb25u
ZWN0aW9uQ2xpZW50OjpleHRyYWN0RXZlbnQpOgorICAgICAgICAqIHJ1bnRpbWUvVHlwZVNldC5j
cHA6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVNoYXBlOjppbnNwZWN0b3JSZXByZXNlbnRhdGlv
bik6CisgICAgICAgIGBKU09OYCBjbGFzc2VzIG5vdyB1c2UgYFJlZiYmYCB3aGVyZXZlciBwb3Nz
aWJsZSBhbmQgYE9wdGlvbmFsYCBpbnN0ZWFkIG9mIGFuIG91dCBwYXJhbWV0ZXIKKyAgICAgICAg
Zm9yIGBnZXQqYC9gYXMqYCBzbyB0aGF0IHZhbHVlcyBjYW4gYmUgbW9yZSBlYXNpbHkgbWFuaXB1
bGF0ZWQgYW5kIGNhbiBiZSBjb25maWRlbnRseSBrbm93bgorICAgICAgICB0byBleGlzdC4KKwor
ICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2VudW0tdmFsdWVzLmpzb246CisgICAg
ICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvY29tbWFuZC10YXJnZXRUeXBl
LW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uLXJlc3VsdDoKKyAgICAgICAgKiBp
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9jb21tYW5kcy13aXRoLWFzeW5jLWF0dHJp
YnV0ZS5qc29uLXJlc3VsdDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBl
Y3RlZC9jb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbi1y
ZXN1bHQ6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZGVmaW5p
dGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbi1yZXN1bHQ6CisgICAgICAgICogaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5qc29uLXJlc3Vs
dDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9kb21haW4tdGFy
Z2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbi1yZXN1bHQ6CisgICAg
ICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZG9tYWluLXRhcmdldFR5cGVz
Lmpzb24tcmVzdWx0OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVk
L2RvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbi1yZXN1bHQ6CisgICAgICAg
ICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZW51bS12YWx1ZXMuanNvbi1yZXN1
bHQ6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZXZlbnQtdGFy
Z2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbi1yZXN1bHQ6CisgICAg
ICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZXZlbnRzLXdpdGgtb3B0aW9u
YWwtcGFyYW1ldGVycy5qc29uLXJlc3VsdDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9leHBlY3RlZC9nZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbi1y
ZXN1bHQ6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvc2FtZS10
eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbi1yZXN1bHQ6CisgICAgICAgICogaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpz
b24tcmVzdWx0OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3No
b3VsZC1zdHJpcC1jb21tZW50cy5qc29uLXJlc3VsdDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5
cGUuanNvbi1yZXN1bHQ6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0
ZWQvdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24tcmVzdWx0OgorICAgICAgICAqIGlu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tZW51bS10eXBl
Lmpzb24tcmVzdWx0OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVk
L3R5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbi1yZXN1bHQ6CisgICAgICAgICogaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0
cy5qc29uLXJlc3VsdDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3Rl
ZC90eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0OgorICAgICAgICAqIGluc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3ZlcnNpb24uanNvbi1yZXN1bHQ6CisKIDIwMjAt
MDktMDUgIERldmluIFJvdXNzbyAgPGRyb3Vzc29AYXBwbGUuY29tPgogCiAgICAgICAgIFdlYiBJ
bnNwZWN0b3I6IGFsbG93IERPTSBicmVha3BvaW50cyB0byBiZSBjb25maWd1cmVkCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGQw
YjUxZWRiODA2MDg2MGI3YmIxM2MwNjJhNTAzMTFmYTQyNGYxZGEuLjIwMzZiZDMyOWQzMTAxMzk3
Yjg5YmFkNjQyYjhiOTYwNTkwNDZlNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTIgQEAKKzIwMjAtMDktMDgg
IERldmluIFJvdXNzbyAgPGRyb3Vzc29AYXBwbGUuY29tPgorCisgICAgICAgIFdlYiBJbnNwZWN0
b3I6IG1vZGVybml6ZSBnZW5lcmF0ZWQgYmFja2VuZCBwcm90b2NvbCBjb2RlCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTYzMDIKKyAgICAgICAgPHJk
YXI6Ly9wcm9ibGVtLzY4NTQ3NjQ5PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogd3RmL0pTT05WYWx1ZXMuaDoKKyAgICAgICAgKFdURjo6SlNPTklt
cGw6Ok9iamVjdEJhc2U6OnNldFZhbHVlKToKKyAgICAgICAgKFdURjo6SlNPTkltcGw6Ok9iamVj
dEJhc2U6OnNldE9iamVjdCk6CisgICAgICAgIChXVEY6OkpTT05JbXBsOjpPYmplY3RCYXNlOjpz
ZXRBcnJheSk6CisgICAgICAgIChXVEY6OkpTT05JbXBsOjpBcnJheUJhc2U6OnB1c2hWYWx1ZSk6
CisgICAgICAgIChXVEY6OkpTT05JbXBsOjpBcnJheUJhc2U6OnB1c2hPYmplY3QpOgorICAgICAg
ICAoV1RGOjpKU09OSW1wbDo6QXJyYXlCYXNlOjpwdXNoQXJyYXkpOgorICAgICAgICAoV1RGOjpK
U09OSW1wbDo6QXJyYXlPZjo6QXJyYXlPZik6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OkpTT05J
bXBsOjpBcnJheU9mOjpjYXN0ZWRBcnJheSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OkpTT05J
bXBsOjpBcnJheU9mOjphZGRJdGVtKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6SlNPTkltcGw6
OkFycmF5T2Y6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgICogd3RmL0pTT05WYWx1ZXMuY3Bw
OgorICAgICAgICAoV1RGOjpKU09OSW1wbDo6VmFsdWU6OmFzVmFsdWUpOgorICAgICAgICAoV1RG
OjpKU09OSW1wbDo6VmFsdWU6OmFzT2JqZWN0KToKKyAgICAgICAgKFdURjo6SlNPTkltcGw6OlZh
bHVlOjphc0FycmF5KToKKyAgICAgICAgKFdURjo6SlNPTkltcGw6OlZhbHVlOjpwYXJzZUpTT04p
OgorICAgICAgICAoV1RGOjpKU09OSW1wbDo6VmFsdWU6OmFzQm9vbGVhbiBjb25zdCk6CisgICAg
ICAgIChXVEY6OkpTT05JbXBsOjpWYWx1ZTo6YXNEb3VibGUgY29uc3QpOgorICAgICAgICAoV1RG
OjpKU09OSW1wbDo6VmFsdWU6OmFzSW50ZWdlciBjb25zdCk6CisgICAgICAgIChXVEY6OkpTT05J
bXBsOjpWYWx1ZTo6YXNTdHJpbmcgY29uc3QpOgorICAgICAgICAoV1RGOjpKU09OSW1wbDo6T2Jq
ZWN0QmFzZTo6YXNPYmplY3QpOgorICAgICAgICAoV1RGOjpKU09OSW1wbDo6T2JqZWN0QmFzZTo6
bWVtb3J5Q29zdCBjb25zdCk6CisgICAgICAgIChXVEY6OkpTT05JbXBsOjpPYmplY3RCYXNlOjpn
ZXRCb29sZWFuIGNvbnN0KToKKyAgICAgICAgKFdURjo6SlNPTkltcGw6Ok9iamVjdEJhc2U6Omdl
dERvdWJsZSBjb25zdCk6CisgICAgICAgIChXVEY6OkpTT05JbXBsOjpPYmplY3RCYXNlOjpnZXRJ
bnRlZ2VyIGNvbnN0KToKKyAgICAgICAgKFdURjo6SlNPTkltcGw6Ok9iamVjdEJhc2U6OmdldFN0
cmluZyBjb25zdCk6CisgICAgICAgIChXVEY6OkpTT05JbXBsOjpPYmplY3RCYXNlOjpnZXRPYmpl
Y3QgY29uc3QpOgorICAgICAgICAoV1RGOjpKU09OSW1wbDo6T2JqZWN0QmFzZTo6Z2V0QXJyYXkg
Y29uc3QpOgorICAgICAgICAoV1RGOjpKU09OSW1wbDo6T2JqZWN0QmFzZTo6Z2V0VmFsdWUgY29u
c3QpOgorICAgICAgICAoV1RGOjpKU09OSW1wbDo6T2JqZWN0QmFzZTo6T2JqZWN0QmFzZSk6Cisg
ICAgICAgIChXVEY6OkpTT05JbXBsOjpBcnJheUJhc2U6OmFzQXJyYXkpOgorICAgICAgICAoV1RG
OjpKU09OSW1wbDo6QXJyYXlCYXNlOjp3cml0ZUpTT04gY29uc3QpOgorICAgICAgICAoV1RGOjpK
U09OSW1wbDo6QXJyYXlCYXNlOjpBcnJheUJhc2UpOgorICAgICAgICAoV1RGOjpKU09OSW1wbDo6
QXJyYXlCYXNlOjpnZXQgY29uc3QpOgorICAgICAgICAoV1RGOjpKU09OSW1wbDo6QXJyYXlCYXNl
OjptZW1vcnlDb3N0IGNvbnN0KToKKyAgICAgICAgKFdURjo6SlNPTkltcGw6Ok9iamVjdEJhc2U6
Om9wZW5BY2Nlc3NvcnMpOiBEZWxldGVkLgorICAgICAgICBVc2UgYFJlZiYmYCB3aGVyZXZlciBw
b3NzaWJsZSBhbmQgYE9wdGlvbmFsYCBpbnN0ZWFkIG9mIGFuIG91dCBwYXJhbWV0ZXIgZm9yIGBn
ZXQqYC9gYXMqYAorICAgICAgICBzbyB0aGF0IHZhbHVlcyBjYW4gYmUgbW9yZSBlYXNpbHkgbWFu
aXB1bGF0ZWQgYW5kIGNhbiBiZSBjb25maWRlbnRseSBhc3N1bWVkIHRvIGV4aXN0LgorICAgICAg
ICBSZW1vdmUgdW51c2VkIG92ZXJsb2FkcyBhbmQgYWxsb3cgc3ViY2xhc3NlcyB0byBjYWxsIGBh
cypgIGluc3RlYWQgb2YgYG9wZW5BY2Nlc3NvcnNgIGFzCisgICAgICAgIHRoZXkncmUgZWZmZWN0
aXZlbHkgdGhlIHNhbWUgdGhpbmcuCisKIDIwMjAtMDktMDUgIE15bGVzIEMuIE1heGZpZWxkICA8
bW1heGZpZWxkQGFwcGxlLmNvbT4KIAogICAgICAgICBbQ29jb2FdIENURm9udElzU3lzdGVtVUlG
b250KCkgaXMgZmFzdGVyIHRoYW4gQ1RGb250RGVzY3JpcHRvcklzU3lzdGVtVUlGb250KCkvQ1RG
b250Q29weUZvbnREZXNjcmlwdG9yKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAwN2E1MzVkNGQ4NGMzZTlhYmY4
YjI1ZjBlYWE2ZDI4YmVlMzIzYjlkLi40NGUwOWNiMmU5Y2MxMjE0NGEzZWEyYzdjNzFjYzU1NTBh
YTc0MzgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTM5IEBACisyMDIwLTA5LTA4ICBEZXZpbiBS
b3Vzc28gIDxkcm91c3NvQGFwcGxlLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBtb2Rl
cm5pemUgZ2VuZXJhdGVkIGJhY2tlbmQgcHJvdG9jb2wgY29kZQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE2MzAyCisgICAgICAgIDxyZGFyOi8vcHJv
YmxlbS82ODU0NzY0OT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBQcmV2aW91c2x5LCB0aGUgaW5zcGVjdG9yIHByb3RvY29sIHdhcyBleHByZXNzZWQg
aW4gY29kZSBpbiBhIHNvbWV3aGF0IGNvbmZ1c2luZyB3YXk6CisgICAgICAgICAtIHRoZSBlcnJv
ciBzdHJpbmcgd2FzIHRoZSBmaXJzdCBhcmd1bWVudAorICAgICAgICAgLSByZXF1aXJlZCBwYXJh
bWV0ZXJzIHdlcmUgYFRgIG9yIGBjb25zdCBUJmAKKyAgICAgICAgIC0gb3B0aW9uYWwgcGFyYW1l
dGVycyB3ZXJlIGBjb25zdCBUKmAKKyAgICAgICAgIC0gZW51bSBwYXJhbWV0ZXJzIHdlcmUgdGhl
IHVuZGVybHlpbmcgdHlwZSByZXF1aXJpbmcgdGhlIGJhY2tlbmQgZGlzcGF0Y2hlciBoYW5kbGVy
IHRvCisgICAgICAgICAgIHByb2Nlc3MgaXQgaW5zdGVhZCBvZiBpdCBiZWluZyBwcmVwcm9jZXNz
ZWQKKyAgICAgICAgIC0gcmVxdWlyZWQgcmV0dXJucyB3ZXJlIGBUJmAKKyAgICAgICAgIC0gb3B0
aW9uYWwgcmV0dXJucyB3ZXJlIGBUKmAKKyAgICAgICAgVGhpcyBkb2Vzbid0IHJlYWxseSBtYWtl
IGZvciBlYXN5L29idmlvdXMgcmVhZGluZyBvZiBjb2RlIHNpbmNlIHRoZSBvcmRlciBvZiBhcmd1
bWVudHMgaXMKKyAgICAgICAgbm90IHdlaXJkIChlLmcuIGVycm9yIHN0cmluZyBmaXJzdCksIGFu
ZCB0aGF0IHRoZXJlIGFyZSByZWZlcmVuY2VzL3BvaW50ZXJzIHRvIHByaW1pdGl2ZQorICAgICAg
ICB0eXBlcy4KKworICAgICAgICBUaGlzIHBhdGNoIGNsZWFucyB1cCB0aGUgZ2VuZXJhdGVkIGlu
c3BlY3RvciBwcm90b2NvbCBjb2RlIHRvIGJlOgorICAgICAgICAgLSByZXF1aXJlZCBwYXJhbWV0
ZXJzIGFyZSBgVGAgb3IgYFJlZjxUPiYmYAorICAgICAgICAgLSBvcHRpb25hbCBwYXJhbWV0ZXJz
IGFyZSBgT3B0aW9uYWw8VD4mJmAgb3IgYFJlZlB0cjxUPiYmYAorICAgICAgICAgLSBlbnVtIHBh
cmFtZXRlcnMgYXJlIHByZXByb2Nlc3NlZCBhbmQgcGFzc2VkIHRvIHRoZSBiYWNrZW5kIGRpc3Bh
dGNoZXIgaGFuZGxlciBpZiB2YWxpZAorICAgICAgICAgLSBzeW5jaHJvbm91cyBjb21tYW5kcyBy
ZXR1cm4gYEV4cGVjdGVkPFgsIEVycm9yU3RyaW5nPmAgdXNpbmcgdGhlIHNhbWUgdHlwZXMvcnVs
ZXMgYWJvdmUKKyAgICAgICAgICAgd2hlcmUgYFhgIGlzIGVpdGhlciBhIHNpbmdsZSByZXR1cm4g
b3IgYSBgc3RkOjp0dXBsZWAgb2YgbXVsdGlwbGUgcmV0dXJucworCisgICAgICAgIFRoZSBvbmUg
ZXhjZXB0aW9uIHRvIHRoZSBhYm92ZSBpcyBgU3RyaW5nYCwgd2hpY2ggaXMgYWxyZWFkeSBhIHRy
aS1zdGF0ZSBvZiBgbnVsbFN0cmluZygpYCwKKyAgICAgICAgYGVtcHR5U3RyaW5nKClgLCBhbmQg
c29tZXRoaW5nIHNldCwgc28gdGhlcmUncyBubyBuZWVkIHRvIHVzZSBgT3B0aW9uYWw8U3RyaW5n
PmAuCisKKyAgICAgICAgQWxzbyB1c2UgYFByb3RvY29sYCBvYmplY3RzL2B0eXBlZGVmc2Agd2hl
cmV2ZXIgcG9zc2libGUgdG8gZnVydGhlciByZWxhdGUgdGhlIHByb3RvY29sCisgICAgICAgIEpT
T04gYW5kIHRoZSBhY3R1YWwgYmFja2VuZCBkaXNwYXRjaGVyIGhhbmRsZXIgaW1wbGVtZW50YXRp
b24uCisKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQXVkaXRSZXNvdXJjZXNPYmplY3Qu
Y3BwOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDYW52YXMuaDoKKyAgICAgICAgKiBp
bnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzLmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVj
dG9yQ29udHJvbGxlci5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hl
ZXQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHA6CisgICAg
ICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBbmltYXRpb25BZ2VudC5oOgorICAgICAg
ICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQW5pbWF0aW9uQWdlbnQuY3BwOgorICAgICAg
ICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50Lmg6Cisg
ICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQu
Y3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ1BVUHJvZmlsZXJBZ2Vu
dC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ1BVUHJvZmlsZXJBZ2Vu
dC5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDU1NBZ2VudC5oOgor
ICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwOgorICAgICAg
ICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ2FudmFzQWdlbnQuaDoKKyAgICAgICAgKiBp
bnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNhbnZhc0FnZW50LmNwcDoKKyAgICAgICAgKiBpbnNw
ZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2Fn
ZW50cy9JbnNwZWN0b3JET01BZ2VudC5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9J
bnNwZWN0b3JET01EZWJ1Z2dlckFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9J
bnNwZWN0b3JET01EZWJ1Z2dlckFnZW50LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRz
L0luc3BlY3RvckRPTVN0b3JhZ2VBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRz
L0luc3BlY3RvckRhdGFiYXNlQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0lu
c3BlY3RvckRhdGFiYXNlQWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5z
cGVjdG9ySW5kZXhlZERCQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3Bl
Y3RvckluZGV4ZWREQkFnZW50LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3Bl
Y3RvckxheWVyVHJlZUFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0
b3JMYXllclRyZWVBZ2VudC5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0
b3JNZW1vcnlBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yTWVt
b3J5QWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yTmV0d29y
a0FnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JOZXR3b3JrQWdl
bnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUGFnZUFnZW50Lmg6
CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwOgorICAg
ICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5oOgorICAgICAg
ICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5jcHA6CisgICAgICAg
ICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JXb3JrZXJBZ2VudC5oOgorICAgICAgICAqIGlu
c3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yV29ya2VyQWdlbnQuY3BwOgorICAgICAgICAqIGluc3Bl
Y3Rvci9hZ2VudHMvV2ViQ29uc29sZUFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50
cy9XZWJEZWJ1Z2dlckFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9XZWJEZWJ1
Z2dlckFnZW50LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL1dlYkhlYXBBZ2VudC5o
OgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvV2ViSGVhcEFnZW50LmNwcDoKKyAgICAgICAg
KiBpbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZUF1ZGl0QWdlbnQuaDoKKyAgICAgICAgKiBpbnNw
ZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZUF1ZGl0QWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rv
ci9hZ2VudHMvcGFnZS9QYWdlQ29uc29sZUFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2Fn
ZW50cy9wYWdlL1BhZ2VDb25zb2xlQWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2Vu
dHMvcGFnZS9QYWdlRE9NRGVidWdnZXJBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2Vu
dHMvcGFnZS9QYWdlRE9NRGVidWdnZXJBZ2VudC5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL2Fn
ZW50cy9wYWdlL1BhZ2VEZWJ1Z2dlckFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50
cy9wYWdlL1BhZ2VEZWJ1Z2dlckFnZW50LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRz
L3BhZ2UvUGFnZUhlYXBBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvcGFnZS9Q
YWdlSGVhcEFnZW50LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZU5l
dHdvcmtBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlTmV0d29y
a0FnZW50LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZVJ1bnRpbWVB
Z2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlUnVudGltZUFnZW50
LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9TZXJ2aWNlV29ya2VyQWdl
bnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9TZXJ2aWNlV29ya2VyQWdl
bnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlckF1ZGl0QWdl
bnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJDb25zb2xlQWdl
bnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJBdWRpdEFnZW50
LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJET01EZWJ1Z2dl
ckFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2VyRE9NRGVi
dWdnZXJBZ2VudC5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2Vy
RGVidWdnZXJBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtl
ckRlYnVnZ2VyQWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dv
cmtlck5ldHdvcmtBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dv
cmtlck5ldHdvcmtBZ2VudC5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy93b3JrZXIv
V29ya2VyUnVudGltZUFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy93b3JrZXIv
V29ya2VyUnVudGltZUFnZW50LmNwcDoKKyAgICAgICAgRWxpZGVkIGJhY2tlbmQgZGlzcGF0Y2hl
ciBoYW5kbGVyIGNoYW5nZXMgZGVzY3JpYmUgYWJvdmUuCisKKyAgICAgICAgKiBpbnNwZWN0b3Iv
Q29tbWFuZExpbmVBUElIb3N0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbW1hbmRMaW5lQVBJ
SG9zdDo6aW5zcGVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDb21tYW5kTGluZUFQSUhvc3Q6OmNs
ZWFyQ29uc29sZU1lc3NhZ2VzKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRl
bmRIb3N0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnZhbHVlUGF5bG9hZEZyb21KU09OVmFsdWUp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRIb3N0Ojpsb2dEaWFnbm9zdGlj
RXZlbnQpOgorICAgICAgICAqIGluc3BlY3Rvci9UaW1lbGluZVJlY29yZEZhY3RvcnkuaDoKKyAg
ICAgICAgKiBpbnNwZWN0b3IvVGltZWxpbmVSZWNvcmRGYWN0b3J5LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6YXBwZW5kTGF5b3V0Um9vdCk6CisgICAgICAg
ICogTW9kdWxlcy9hcHBsaWNhdGlvbm1hbmlmZXN0L0FwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25NYW5pZmVzdFBhcnNlcjo6cGFyc2VN
YW5pZmVzdCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyOjpw
YXJzZVN0YXJ0VVJMKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uTWFuaWZlc3RQYXJz
ZXI6OnBhcnNlRGlzcGxheSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbk1hbmlmZXN0
UGFyc2VyOjpwYXJzZVNjb3BlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uTWFuaWZl
c3RQYXJzZXI6OnBhcnNlR2VuZXJpY1N0cmluZyk6CisgICAgICAgICogTW9kdWxlcy9lbmNyeXB0
ZWRtZWRpYS9Jbml0RGF0YVJlZ2lzdHJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmV4dHJhY3RL
ZXlJRHNLZXlpZHMpOgorICAgICAgICAqIHBsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NETVV0aWxp
dGllcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDRE1VdGlsaXRpZXM6OnBhcnNlSlNPTk9iamVj
dCk6CisgICAgICAgICogcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJL
ZXkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VMaWNlbnNlRm9ybWF0KToKKyAgICAgICAg
KFdlYkNvcmU6OnBhcnNlTGljZW5zZVJlbGVhc2VBY2tub3dsZWRnZW1lbnRGb3JtYXQpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9DRE1GYWlyUGxheVN0cmVhbWlu
Zy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpleHRyYWN0U2luZkRhdGEpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NETUluc3RhbmNlRmFpclBsYXlTdHJl
YW1pbmdBVkZPYmpDLm1tOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VKU09OVmFsdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VTZXNzaW9uRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpD
Ojp1cGRhdGVMaWNlbnNlKToKKyAgICAgICAgYEpTT05gIGNsYXNzZXMgbm93IHVzZSBgUmVmJiZg
IHdoZXJldmVyIHBvc3NpYmxlIGFuZCBgT3B0aW9uYWxgIGluc3RlYWQgb2YgYW4gb3V0IHBhcmFt
ZXRlcgorICAgICAgICBmb3IgYGdldCpgL2BhcypgIHNvIHRoYXQgdmFsdWVzIGNhbiBiZSBtb3Jl
IGVhc2lseSBtYW5pcHVsYXRlZCBhbmQgY2FuIGJlIGNvbmZpZGVudGx5IGtub3duCisgICAgICAg
IHRvIGV4aXN0LgorCiAyMDIwLTA5LTA1ICBEZXZpbiBSb3Vzc28gIDxkcm91c3NvQGFwcGxlLmNv
bT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBhbGxvdyBET00gYnJlYWtwb2ludHMgdG8gYmUg
Y29uZmlndXJlZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkRyaXZlci9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViRHJpdmVyL0NoYW5nZUxvZwppbmRleCBkYTNiNjRjYWQ1ZWUxNDk1NjY0YzdmOGNiMGY3
ODQ4OTlmNTc4ODk0Li5mMWM5ZjBlNjI0MzYzMWExOTNmMWUyN2MyZmY5OGU1ZTBiNzg1Y2EyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViRHJpdmVyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViRHJp
dmVyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzNyBAQAorMjAyMC0wOS0wOCAgRGV2aW4gUm91c3Nv
ICA8ZHJvdXNzb0BhcHBsZS5jb20+CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogbW9kZXJuaXpl
IGdlbmVyYXRlZCBiYWNrZW5kIHByb3RvY29sIGNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNjMwMgorICAgICAgICA8cmRhcjovL3Byb2JsZW0v
Njg1NDc2NDk+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBDb21tYW5kUmVzdWx0LmNwcDoKKyAgICAgICAgKFdlYkRyaXZlcjo6Q29tbWFuZFJlc3Vs
dDo6Q29tbWFuZFJlc3VsdCk6CisgICAgICAgICogU2Vzc2lvbi5jcHA6CisgICAgICAgIChXZWJE
cml2ZXI6OmZpcnN0V2luZG93SGFuZGxlSW5SZXN1bHQpOgorICAgICAgICAoV2ViRHJpdmVyOjpT
ZXNzaW9uOjpnZXRUaW1lb3V0cyk6CisgICAgICAgIChXZWJEcml2ZXI6OlNlc3Npb246OmNyZWF0
ZVRvcExldmVsQnJvd3NpbmdDb250ZXh0KToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6
aGFuZGxlVXNlclByb21wdHMpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjpyZXBvcnRV
bmV4cGVjdGVkQWxlcnRPcGVuKToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6Z28pOgor
ICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjpnZXRDdXJyZW50VVJMKToKKyAgICAgICAgKFdl
YkRyaXZlcjo6U2Vzc2lvbjo6YmFjayk6CisgICAgICAgIChXZWJEcml2ZXI6OlNlc3Npb246OmZv
cndhcmQpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjpyZWZyZXNoKToKKyAgICAgICAg
KFdlYkRyaXZlcjo6U2Vzc2lvbjo6Z2V0VGl0bGUpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNz
aW9uOjpnZXRXaW5kb3dIYW5kbGUpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjpjbG9z
ZVRvcExldmVsQnJvd3NpbmdDb250ZXh0KToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6
c3dpdGNoVG9XaW5kb3cpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjpnZXRXaW5kb3dI
YW5kbGVzKToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6bmV3V2luZG93KToKKyAgICAg
ICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6c3dpdGNoVG9GcmFtZSk6CisgICAgICAgIChXZWJEcml2
ZXI6OlNlc3Npb246OnN3aXRjaFRvUGFyZW50RnJhbWUpOgorICAgICAgICAoV2ViRHJpdmVyOjpT
ZXNzaW9uOjpnZXRUb3BsZXZlbEJyb3dzaW5nQ29udGV4dFJlY3QpOgorICAgICAgICAoV2ViRHJp
dmVyOjpTZXNzaW9uOjpzZXRXaW5kb3dSZWN0KToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lv
bjo6bWF4aW1pemVXaW5kb3cpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjptaW5pbWl6
ZVdpbmRvdyk6CisgICAgICAgIChXZWJEcml2ZXI6OlNlc3Npb246OmZ1bGxzY3JlZW5XaW5kb3cp
OgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjpjcmVhdGVFbGVtZW50KToKKyAgICAgICAg
KFdlYkRyaXZlcjo6U2Vzc2lvbjo6ZXh0cmFjdEVsZW1lbnRJRCk6CisgICAgICAgIChXZWJEcml2
ZXI6OlNlc3Npb246OmNvbXB1dGVFbGVtZW50TGF5b3V0KToKKyAgICAgICAgKFdlYkRyaXZlcjo6
U2Vzc2lvbjo6ZmluZEVsZW1lbnRzKToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6Z2V0
QWN0aXZlRWxlbWVudCk6CisgICAgICAgIChXZWJEcml2ZXI6OlNlc3Npb246OmlzRWxlbWVudFNl
bGVjdGVkKToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6Z2V0RWxlbWVudFRleHQpOgor
ICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjpnZXRFbGVtZW50VGFnTmFtZSk6CisgICAgICAg
IChXZWJEcml2ZXI6OlNlc3Npb246OmdldEVsZW1lbnRSZWN0KToKKyAgICAgICAgKFdlYkRyaXZl
cjo6U2Vzc2lvbjo6aXNFbGVtZW50RW5hYmxlZCk6CisgICAgICAgIChXZWJEcml2ZXI6OlNlc3Np
b246OmlzRWxlbWVudERpc3BsYXllZCk6CisgICAgICAgIChXZWJEcml2ZXI6OlNlc3Npb246Omdl
dEVsZW1lbnRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjpnZXRFbGVt
ZW50UHJvcGVydHkpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjpnZXRFbGVtZW50Q1NT
VmFsdWUpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjp3YWl0Rm9yTmF2aWdhdGlvblRv
Q29tcGxldGUpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjplbGVtZW50SXNGaWxlVXBs
b2FkKToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6cGFyc2VFbGVtZW50SXNGaWxlVXBs
b2FkUmVzdWx0KToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6c2VsZWN0T3B0aW9uRWxl
bWVudCk6CisgICAgICAgIChXZWJEcml2ZXI6OlNlc3Npb246OmVsZW1lbnRDbGljayk6CisgICAg
ICAgIChXZWJEcml2ZXI6OlNlc3Npb246OmVsZW1lbnRJc0VkaXRhYmxlKToKKyAgICAgICAgKFdl
YkRyaXZlcjo6U2Vzc2lvbjo6ZWxlbWVudENsZWFyKToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vz
c2lvbjo6c2V0SW5wdXRGaWxlVXBsb2FkRmlsZXMpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNz
aW9uOjplbGVtZW50U2VuZEtleXMpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjpnZXRQ
YWdlU291cmNlKToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6aGFuZGxlU2NyaXB0UmVz
dWx0KToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6ZXhlY3V0ZVNjcmlwdCk6CisgICAg
ICAgIChXZWJEcml2ZXI6OlNlc3Npb246OnBlcmZvcm1Nb3VzZUludGVyYWN0aW9uKToKKyAgICAg
ICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6cGVyZm9ybUtleWJvYXJkSW50ZXJhY3Rpb25zKToKKyAg
ICAgICAgKFdlYkRyaXZlcjo6YnVpbHRBdXRvbWF0aW9uQ29va2llKToKKyAgICAgICAgKFdlYkRy
aXZlcjo6c2VyaWFsaXplQ29va2llKToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6Z2V0
QWxsQ29va2llcyk6CisgICAgICAgIChXZWJEcml2ZXI6OlNlc3Npb246OmdldE5hbWVkQ29va2ll
KToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6YWRkQ29va2llKToKKyAgICAgICAgKFdl
YkRyaXZlcjo6U2Vzc2lvbjo6ZGVsZXRlQ29va2llKToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vz
c2lvbjo6ZGVsZXRlQWxsQ29va2llcyk6CisgICAgICAgIChXZWJEcml2ZXI6OlNlc3Npb246OnBl
cmZvcm1BY3Rpb25zKToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6cmVsZWFzZUFjdGlv
bnMpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjpkaXNtaXNzQWxlcnQpOgorICAgICAg
ICAoV2ViRHJpdmVyOjpTZXNzaW9uOjphY2NlcHRBbGVydCk6CisgICAgICAgIChXZWJEcml2ZXI6
OlNlc3Npb246OmdldEFsZXJ0VGV4dCk6CisgICAgICAgIChXZWJEcml2ZXI6OlNlc3Npb246OnNl
bmRBbGVydFRleHQpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjp0YWtlU2NyZWVuc2hv
dCk6CisgICAgICAgICogU2Vzc2lvbkhvc3QuY3BwOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNz
aW9uSG9zdDo6ZGlzcGF0Y2hNZXNzYWdlKToKKyAgICAgICAgKiBXZWJEcml2ZXJTZXJ2aWNlLmg6
CisgICAgICAgICogV2ViRHJpdmVyU2VydmljZS5jcHA6CisgICAgICAgIChXZWJEcml2ZXI6Oldl
YkRyaXZlclNlcnZpY2U6OmhhbmRsZVJlcXVlc3QpOgorICAgICAgICAoV2ViRHJpdmVyOjpXZWJE
cml2ZXJTZXJ2aWNlOjpzZW5kUmVzcG9uc2UgY29uc3QpOgorICAgICAgICAoV2ViRHJpdmVyOjp2
YWx1ZUFzTnVtYmVySW5SYW5nZSk6CisgICAgICAgIChXZWJEcml2ZXI6OmRlc2VyaWFsaXplVGlt
ZW91dHMpOgorICAgICAgICAoV2ViRHJpdmVyOjpkZXNlcmlhbGl6ZVByb3h5KToKKyAgICAgICAg
KFdlYkRyaXZlcjo6V2ViRHJpdmVyU2VydmljZTo6cGFyc2VDYXBhYmlsaXRpZXMgY29uc3QpOgor
ICAgICAgICAoV2ViRHJpdmVyOjpXZWJEcml2ZXJTZXJ2aWNlOjpmaW5kU2Vzc2lvbk9yQ29tcGxl
dGVXaXRoRXJyb3IpOgorICAgICAgICAoV2ViRHJpdmVyOjpXZWJEcml2ZXJTZXJ2aWNlOjp2YWxp
ZGF0ZWRDYXBhYmlsaXRpZXMgY29uc3QpOgorICAgICAgICAoV2ViRHJpdmVyOjpXZWJEcml2ZXJT
ZXJ2aWNlOjptZXJnZUNhcGFiaWxpdGllcyBjb25zdCk6CisgICAgICAgIChXZWJEcml2ZXI6Oldl
YkRyaXZlclNlcnZpY2U6Om1hdGNoQ2FwYWJpbGl0aWVzIGNvbnN0KToKKyAgICAgICAgKFdlYkRy
aXZlcjo6V2ViRHJpdmVyU2VydmljZTo6cHJvY2Vzc0NhcGFiaWxpdGllcyBjb25zdCk6CisgICAg
ICAgIChXZWJEcml2ZXI6OldlYkRyaXZlclNlcnZpY2U6OmNyZWF0ZVNlc3Npb24pOgorICAgICAg
ICAoV2ViRHJpdmVyOjpXZWJEcml2ZXJTZXJ2aWNlOjpkZWxldGVTZXNzaW9uKToKKyAgICAgICAg
KFdlYkRyaXZlcjo6V2ViRHJpdmVyU2VydmljZTo6Z28pOgorICAgICAgICAoV2ViRHJpdmVyOjpX
ZWJEcml2ZXJTZXJ2aWNlOjpzZXRXaW5kb3dSZWN0KToKKyAgICAgICAgKFdlYkRyaXZlcjo6V2Vi
RHJpdmVyU2VydmljZTo6Y2xvc2VXaW5kb3cpOgorICAgICAgICAoV2ViRHJpdmVyOjpXZWJEcml2
ZXJTZXJ2aWNlOjpzd2l0Y2hUb1dpbmRvdyk6CisgICAgICAgIChXZWJEcml2ZXI6OldlYkRyaXZl
clNlcnZpY2U6Om5ld1dpbmRvdyk6CisgICAgICAgIChXZWJEcml2ZXI6OldlYkRyaXZlclNlcnZp
Y2U6OnN3aXRjaFRvRnJhbWUpOgorICAgICAgICAoV2ViRHJpdmVyOjpmaW5kRWxlbWVudE9yQ29t
cGxldGVXaXRoRXJyb3IpOgorICAgICAgICAoV2ViRHJpdmVyOjpmaW5kU3RyYXRlZ3lBbmRTZWxl
Y3Rvck9yQ29tcGxldGVXaXRoRXJyb3IpOgorICAgICAgICAoV2ViRHJpdmVyOjpXZWJEcml2ZXJT
ZXJ2aWNlOjpnZXRFbGVtZW50QXR0cmlidXRlKToKKyAgICAgICAgKFdlYkRyaXZlcjo6V2ViRHJp
dmVyU2VydmljZTo6Z2V0RWxlbWVudFByb3BlcnR5KToKKyAgICAgICAgKFdlYkRyaXZlcjo6V2Vi
RHJpdmVyU2VydmljZTo6Z2V0RWxlbWVudENTU1ZhbHVlKToKKyAgICAgICAgKFdlYkRyaXZlcjo6
V2ViRHJpdmVyU2VydmljZTo6ZWxlbWVudFNlbmRLZXlzKToKKyAgICAgICAgKFdlYkRyaXZlcjo6
ZmluZFNjcmlwdEFuZEFyZ3VtZW50c09yQ29tcGxldGVXaXRoRXJyb3IpOgorICAgICAgICAoV2Vi
RHJpdmVyOjpXZWJEcml2ZXJTZXJ2aWNlOjpnZXROYW1lZENvb2tpZSk6CisgICAgICAgIChXZWJE
cml2ZXI6OmRlc2VyaWFsaXplQ29va2llKToKKyAgICAgICAgKFdlYkRyaXZlcjo6V2ViRHJpdmVy
U2VydmljZTo6YWRkQ29va2llKToKKyAgICAgICAgKFdlYkRyaXZlcjo6V2ViRHJpdmVyU2Vydmlj
ZTo6ZGVsZXRlQ29va2llKToKKyAgICAgICAgKFdlYkRyaXZlcjo6cHJvY2Vzc1BhdXNlQWN0aW9u
KToKKyAgICAgICAgKFdlYkRyaXZlcjo6cHJvY2Vzc051bGxBY3Rpb24pOgorICAgICAgICAoV2Vi
RHJpdmVyOjpwcm9jZXNzS2V5QWN0aW9uKToKKyAgICAgICAgKFdlYkRyaXZlcjo6cHJvY2Vzc1Bv
aW50ZXJBY3Rpb24pOgorICAgICAgICAoV2ViRHJpdmVyOjpwcm9jZXNzUG9pbnRlclBhcmFtZXRl
cnMpOgorICAgICAgICAoV2ViRHJpdmVyOjpwcm9jZXNzSW5wdXRBY3Rpb25TZXF1ZW5jZSk6Cisg
ICAgICAgIChXZWJEcml2ZXI6OldlYkRyaXZlclNlcnZpY2U6OnBlcmZvcm1BY3Rpb25zKToKKyAg
ICAgICAgKFdlYkRyaXZlcjo6V2ViRHJpdmVyU2VydmljZTo6c2VuZEFsZXJ0VGV4dCk6CisgICAg
ICAgICogV2ViRHJpdmVyL2d0ay9XZWJEcml2ZXJTZXJ2aWNlR3RrLmNwcDoKKyAgICAgICAgKFdl
YkRyaXZlcjo6V2ViRHJpdmVyU2VydmljZTo6cGxhdGZvcm1NYXRjaENhcGFiaWxpdHkpOgorICAg
ICAgICAoV2ViRHJpdmVyOjpXZWJEcml2ZXJTZXJ2aWNlOjpwbGF0Zm9ybVZhbGlkYXRlQ2FwYWJp
bGl0eSk6CisgICAgICAgIChXZWJEcml2ZXI6OldlYkRyaXZlclNlcnZpY2U6OnBsYXRmb3JtUGFy
c2VDYXBhYmlsaXRpZXMpOgorICAgICAgICAqIFdlYkRyaXZlci93aW4vV2ViRHJpdmVyU2Vydmlj
ZVdpbi5jcHA6CisgICAgICAgIChXZWJEcml2ZXI6OldlYkRyaXZlclNlcnZpY2U6OnBsYXRmb3Jt
TWF0Y2hDYXBhYmlsaXR5KToKKyAgICAgICAgKFdlYkRyaXZlcjo6V2ViRHJpdmVyU2VydmljZTo6
cGxhdGZvcm1WYWxpZGF0ZUNhcGFiaWxpdHkpOgorICAgICAgICAoV2ViRHJpdmVyOjpXZWJEcml2
ZXJTZXJ2aWNlOjpwbGF0Zm9ybVBhcnNlQ2FwYWJpbGl0aWVzKToKKyAgICAgICAgKiBXZWJEcml2
ZXIvd3BlL1dlYkRyaXZlclNlcnZpY2VXUEUuY3BwOgorICAgICAgICAoV2ViRHJpdmVyOjpXZWJE
cml2ZXJTZXJ2aWNlOjpwbGF0Zm9ybU1hdGNoQ2FwYWJpbGl0eSk6CisgICAgICAgIChXZWJEcml2
ZXI6OldlYkRyaXZlclNlcnZpY2U6OnBsYXRmb3JtVmFsaWRhdGVDYXBhYmlsaXR5KToKKyAgICAg
ICAgKFdlYkRyaXZlcjo6V2ViRHJpdmVyU2VydmljZTo6cGxhdGZvcm1QYXJzZUNhcGFiaWxpdGll
cyk6CisgICAgICAgIGBKU09OYCBjbGFzc2VzIG5vdyB1c2UgYFJlZiYmYCB3aGVyZXZlciBwb3Nz
aWJsZSBhbmQgYE9wdGlvbmFsYCBpbnN0ZWFkIG9mIGFuIG91dCBwYXJhbWV0ZXIKKyAgICAgICAg
Zm9yIGBnZXQqYC9gYXMqYCBzbyB0aGF0IHZhbHVlcyBjYW4gYmUgbW9yZSBlYXNpbHkgbWFuaXB1
bGF0ZWQgYW5kIGNhbiBiZSBjb25maWRlbnRseSBrbm93bgorICAgICAgICB0byBleGlzdC4KKwog
MjAyMC0wNy0xNSAgRnVqaWkgSGlyb25vcmkgIDxIaXJvbm9yaS5GdWppaUBzb255LmNvbT4KIAog
ICAgICAgICBbQ01ha2VdW1dlYkRyaXZlcl0gR2VuZXJhdGluZyBXZWJEcml2ZXJBdG9tcy5jcHAg
aXMgcmFyZWx5IGZhaWxpbmcgYXMgIkltcG9ydEVycm9yOiBObyBtb2R1bGUgbmFtZWQganNtaW4i
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvQ2hhbmdlTG9nIGIvU291cmNlL1dl
Ykluc3BlY3RvclVJL0NoYW5nZUxvZwppbmRleCA5OWNjMWM3MDFiMTNlYjhlYmZmNGI4MjQ2OTll
NTQ4MDgwZTA5NmNkLi40Y2U4OTQ5Mjg1ODZjMzE4MjhlYzJhNjUwMTUyMTlmYTdlZWJjZjA0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNCBAQAorMjAyMC0wOS0wOCAgRGV2
aW4gUm91c3NvICA8ZHJvdXNzb0BhcHBsZS5jb20+CisKKyAgICAgICAgV2ViIEluc3BlY3Rvcjog
bW9kZXJuaXplIGdlbmVyYXRlZCBiYWNrZW5kIHByb3RvY29sIGNvZGUKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNjMwMgorICAgICAgICA8cmRhcjov
L3Byb2JsZW0vNjg1NDc2NDk+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0NTU01hbmFnZXIuanM6Cisg
ICAgICAgIChXSS5DU1NNYW5hZ2VyLnByb3RvdHlwZS5zZXQgZm9yY2VkQXBwZWFyYW5jZSk6Cisg
ICAgICAgIE5vdyB0aGF0IGVudW1zIGFyZSBwcm9jZXNzZWQgYmVmb3JlIGJlaW5nIHBhc3NlZCB0
byBiYWNrZW5kIGRpc3BhY2hlciBoYW5kbGVycywgdGhlCisgICAgICAgIGBhcHBlYXJhbmNlYCBw
YXJhbWV0ZXIgb2YgYFBhZ2Uuc2V0Rm9yY2VkQXBwZWFyYW5jZWAgbXVzdCBiZSBtYXJrZWQgYG9w
dGlvbmFsYCBhcworICAgICAgICB0aGVyZSdzIG5vIHdheSBmb3IgaXQgdG8gYWNjZXB0IGFuIGVt
cHR5IHN0cmluZywgYXMgdGhhdCdzIG5vdCBwb3NzaWJsZSBmb3IgYW4gZW51bS4KKyAgICAgICAg
QXMgc3VjaCwgcmV3b3JrIHRoZSBmcm9udGVuZCBsb2dpYyBmb3IgaW52b2tpbmcgYFBhZ2Uuc2V0
Rm9yY2VkQXBwZWFyYW5jZWAgdG8gaW5zdGVhZAorICAgICAgICBub3QgcHJvdmlkZSBhbiBgYXBw
ZWFyYW5jZWAgcGFyYW1ldGVyIGF0IGFsbCB3aGVuIHdhbnRpbmcgdG8gInVuc2V0IiBpdC4KKwor
ICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVmlld3MvU2V0dGluZ3NUYWJDb250ZW50Vmlldy5qczoK
KyAgICAgICAgKFdJLlNldHRpbmdzVGFiQ29udGVudFZpZXcucHJvdG90eXBlLl9jcmVhdGVDb25z
b2xlU2V0dGluZ3NWaWV3KToKKyAgICAgICAgTm93IHRoYXQgYWxsIGxvZ2dpbmcgY2hhbm5lbHMg
bWF0Y2hpbmcgYSBgQ29uc29sZS5DaGFubmVsU291cmNlYCBhcmUgcmV0dXJuZWQgaW5zdGVhZCBv
ZgorICAgICAgICBqdXN0IHRoZSBoYXJkY29kZWQgbGlzdCwgY2hlY2sgZm9yIGEgbWF0Y2hpbmcg
YFdJLlVJU3RyaW5nYCBiZWZvcmUgc2hvd2luZyBhIGA8c2VsZWN0PmAuCisKIDIwMjAtMDktMDUg
IERldmluIFJvdXNzbyAgPGRyb3Vzc29AYXBwbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0
b3I6IGFsbG93IERPTSBicmVha3BvaW50cyB0byBiZSBjb25maWd1cmVkCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDFj
ODc4MDc4MzQzYTMyMzdjZGM3YjgxNDJkOTRjMjU5NzJkYjlkNzcuLjJkMzk1ZTlkOWRiMmQ0OTNk
NzgyOTEzZjM1MTc4ODYyODEzODA4YmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdl
TG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTUgQEAKKzIwMjAt
MDktMDggIERldmluIFJvdXNzbyAgPGRyb3Vzc29AYXBwbGUuY29tPgorCisgICAgICAgIFdlYiBJ
bnNwZWN0b3I6IG1vZGVybml6ZSBnZW5lcmF0ZWQgYmFja2VuZCBwcm90b2NvbCBjb2RlCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTYzMDIKKyAgICAg
ICAgPHJkYXI6Ly9wcm9ibGVtLzY4NTQ3NjQ5PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFByZXZpb3VzbHksIHRoZSBpbnNwZWN0b3IgcHJvdG9jb2wg
d2FzIGV4cHJlc3NlZCBpbiBjb2RlIGluIGEgc29tZXdoYXQgY29uZnVzaW5nIHdheToKKyAgICAg
ICAgIC0gdGhlIGVycm9yIHN0cmluZyB3YXMgdGhlIGZpcnN0IGFyZ3VtZW50CisgICAgICAgICAt
IHJlcXVpcmVkIHBhcmFtZXRlcnMgd2VyZSBgVGAgb3IgYGNvbnN0IFQmYAorICAgICAgICAgLSBv
cHRpb25hbCBwYXJhbWV0ZXJzIHdlcmUgYGNvbnN0IFQqYAorICAgICAgICAgLSBlbnVtIHBhcmFt
ZXRlcnMgd2VyZSB0aGUgdW5kZXJseWluZyB0eXBlIHJlcXVpcmluZyB0aGUgYmFja2VuZCBkaXNw
YXRjaGVyIGhhbmRsZXIgdG8KKyAgICAgICAgICAgcHJvY2VzcyBpdCBpbnN0ZWFkIG9mIGl0IGJl
aW5nIHByZXByb2Nlc3NlZAorICAgICAgICAgLSByZXF1aXJlZCByZXR1cm5zIHdlcmUgYFQmYAor
ICAgICAgICAgLSBvcHRpb25hbCByZXR1cm5zIHdlcmUgYFQqYAorICAgICAgICBUaGlzIGRvZXNu
J3QgcmVhbGx5IG1ha2UgZm9yIGVhc3kvb2J2aW91cyByZWFkaW5nIG9mIGNvZGUgc2luY2UgdGhl
IG9yZGVyIG9mIGFyZ3VtZW50cyBpcworICAgICAgICBub3Qgd2VpcmQgKGUuZy4gZXJyb3Igc3Ry
aW5nIGZpcnN0KSwgYW5kIHRoYXQgdGhlcmUgYXJlIHJlZmVyZW5jZXMvcG9pbnRlcnMgdG8gcHJp
bWl0aXZlCisgICAgICAgIHR5cGVzLgorCisgICAgICAgIFRoaXMgcGF0Y2ggY2xlYW5zIHVwIHRo
ZSBnZW5lcmF0ZWQgaW5zcGVjdG9yIHByb3RvY29sIGNvZGUgdG8gYmU6CisgICAgICAgICAtIHJl
cXVpcmVkIHBhcmFtZXRlcnMgYXJlIGBUYCBvciBgUmVmPFQ+JiZgCisgICAgICAgICAtIG9wdGlv
bmFsIHBhcmFtZXRlcnMgYXJlIGBPcHRpb25hbDxUPiYmYCBvciBgUmVmUHRyPFQ+JiZgCisgICAg
ICAgICAtIGVudW0gcGFyYW1ldGVycyBhcmUgcHJlcHJvY2Vzc2VkIGFuZCBwYXNzZWQgdG8gdGhl
IGJhY2tlbmQgZGlzcGF0Y2hlciBoYW5kbGVyIGlmIHZhbGlkCisgICAgICAgICAtIHN5bmNocm9u
b3VzIGNvbW1hbmRzIHJldHVybiBgRXhwZWN0ZWQ8WCwgRXJyb3JTdHJpbmc+YCB1c2luZyB0aGUg
c2FtZSB0eXBlcy9ydWxlcyBhYm92ZQorICAgICAgICAgICB3aGVyZSBgWGAgaXMgZWl0aGVyIGEg
c2luZ2xlIHJldHVybiBvciBhIGBzdGQ6OnR1cGxlYCBvZiBtdWx0aXBsZSByZXR1cm5zCisKKyAg
ICAgICAgVGhlIG9uZSBleGNlcHRpb24gdG8gdGhlIGFib3ZlIGlzIGBTdHJpbmdgLCB3aGljaCBp
cyBhbHJlYWR5IGEgdHJpLXN0YXRlIG9mIGBudWxsU3RyaW5nKClgLAorICAgICAgICBgZW1wdHlT
dHJpbmcoKWAsIGFuZCBzb21ldGhpbmcgc2V0LCBzbyB0aGVyZSdzIG5vIG5lZWQgdG8gdXNlIGBP
cHRpb25hbDxTdHJpbmc+YC4KKworICAgICAgICBBbHNvIHVzZSBgUHJvdG9jb2xgIG9iamVjdHMv
YHR5cGVkZWZzYCB3aGVyZXZlciBwb3NzaWJsZSB0byBmdXJ0aGVyIHJlbGF0ZSB0aGUgcHJvdG9j
b2wKKyAgICAgICAgSlNPTiBhbmQgdGhlIGFjdHVhbCBiYWNrZW5kIGRpc3BhdGNoZXIgaGFuZGxl
ciBpbXBsZW1lbnRhdGlvbi4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BdXRvbWF0aW9uL0F1dG9t
YXRpb24uanNvbjoKKyAgICAgICAgYENvb3JkaW5hdGVTeXN0ZW1gIGhhcyBgUGFnZWAgYW5kIGBW
aWV3cG9ydGAgZW51bSB2YWx1ZXMsIGJ1dCBgV2ViQXV0b21hdGlvblNlc3Npb25gIGNoZWNrcwor
ICAgICAgICBmb3IgYCJQYWdlImAgYW5kIGAiTGF5b3V0Vmlld3BvcnQiYC4gQWRkIGEgYExheW91
dFZpZXdwb3J0YCBlbnVtIHZhbHVlIG5vdyB0aGF0IGVudW1zIGFyZQorICAgICAgICBwcm9jZXNz
ZWQgYmVmb3JlIGJlaW5nIHBhc3NlZCB0byBiYWNrZW5kIGRpc3BhY2hlciBoYW5kbGVycyB0byBw
cmVzZXJ2ZSBmdW5jdGlvbmFsaXR5LgorCisgICAgICAgICogVUlQcm9jZXNzL0luc3BlY3Rvci9B
Z2VudHMvSW5zcGVjdG9yQnJvd3NlckFnZW50Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0luc3Bl
Y3Rvci9BZ2VudHMvSW5zcGVjdG9yQnJvd3NlckFnZW50LmNwcDoKKyAgICAgICAgKiBVSVByb2Nl
c3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbk1hY3Jvcy5oOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmg6CisgICAgICAgICogVUlQ
cm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9BdXRvbWF0aW9uL21hYy9XZWJBdXRvbWF0aW9uU2Vzc2lvbk1hYy5tbToKKyAgICAg
ICAgRWxpZGVkIGJhY2tlbmQgZGlzcGF0Y2hlciBoYW5kbGVyIGNoYW5nZXMgZGVzY3JpYmUgYWJv
dmUuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yL3NvY2tldC9SZW1vdGVJbnNwZWN0
b3JDbGllbnQuY3BwOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbnNwZWN0b3JDbGllbnQ6OnNl
dFRhcmdldExpc3QpOgorICAgICAgICBgSlNPTmAgY2xhc3NlcyBub3cgdXNlIGBSZWYmJmAgd2hl
cmV2ZXIgcG9zc2libGUgYW5kIGBPcHRpb25hbGAgaW5zdGVhZCBvZiBhbiBvdXQgcGFyYW1ldGVy
CisgICAgICAgIGZvciBgZ2V0KmAvYGFzKmAgc28gdGhhdCB2YWx1ZXMgY2FuIGJlIG1vcmUgZWFz
aWx5IG1hbmlwdWxhdGVkIGFuZCBjYW4gYmUgY29uZmlkZW50bHkga25vd24KKyAgICAgICAgdG8g
ZXhpc3QuCisKIDIwMjAtMDktMDUgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgogCiAg
ICAgICAgIFtXZWJJRExdIFJlYWxpZ24gb3VyIElETCBleHRlbmRlZCBhdHRyaWJ1dGUgbmFtZXMg
d2l0aCB0aG9zZSBzcGVjaWZpZWQgaW4gV2ViSURMCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYmluZGluZ3MvU2NyaXB0VmFsdWUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2JpbmRpbmdzL1NjcmlwdFZhbHVlLmNwcAppbmRleCA2Yjg1M2M5MzFmMWRjZTkyNTNiYmFjMDZh
OTVlNmFhYzUyN2NmMjVhLi43OTY4YjkwYTczYjI4MmRmNTk4MjI1NmE2ZWRjYjJkNmU1NzQzOTZl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvU2NyaXB0VmFsdWUu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9TY3JpcHRWYWx1ZS5jcHAK
QEAgLTY5LDcgKzY5LDcgQEAgc3RhdGljIFJlZlB0cjxKU09OOjpWYWx1ZT4ganNUb0luc3BlY3Rv
clZhbHVlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmEKICAgICAgICAgICAgICAg
ICBhdXRvIGVsZW1lbnRWYWx1ZSA9IGpzVG9JbnNwZWN0b3JWYWx1ZShnbG9iYWxPYmplY3QsIGFy
cmF5LmdldEluZGV4KGdsb2JhbE9iamVjdCwgaSksIG1heERlcHRoKTsKICAgICAgICAgICAgICAg
ICBpZiAoIWVsZW1lbnRWYWx1ZSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0gICAgICAgICAgICAgICAgaW5zcGVjdG9yQXJyYXktPnB1c2hWYWx1ZShXVEZNb3ZlKGVsZW1l
bnRWYWx1ZSkpOworICAgICAgICAgICAgICAgIGluc3BlY3RvckFycmF5LT5wdXNoVmFsdWUoZWxl
bWVudFZhbHVlLnJlbGVhc2VOb25OdWxsKCkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAg
cmV0dXJuIGluc3BlY3RvckFycmF5OwogICAgICAgICB9CkBAIC04Miw3ICs4Miw3IEBAIHN0YXRp
YyBSZWZQdHI8SlNPTjo6VmFsdWU+IGpzVG9JbnNwZWN0b3JWYWx1ZShKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU1ZhCiAgICAgICAgICAgICBhdXRvIGluc3BlY3RvclZhbHVlID0ganNU
b0luc3BlY3RvclZhbHVlKGdsb2JhbE9iamVjdCwgb2JqZWN0LmdldChnbG9iYWxPYmplY3QsIG5h
bWUpLCBtYXhEZXB0aCk7CiAgICAgICAgICAgICBpZiAoIWluc3BlY3RvclZhbHVlKQogICAgICAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICAgICAgaW5zcGVjdG9yT2JqZWN0LT5z
ZXRWYWx1ZShuYW1lLnN0cmluZygpLCBXVEZNb3ZlKGluc3BlY3RvclZhbHVlKSk7CisgICAgICAg
ICAgICBpbnNwZWN0b3JPYmplY3QtPnNldFZhbHVlKG5hbWUuc3RyaW5nKCksIGluc3BlY3RvclZh
bHVlLnJlbGVhc2VOb25OdWxsKCkpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBpbnNwZWN0
b3JPYmplY3Q7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9Bc3luY1N0YWNrVHJhY2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9Bc3luY1N0YWNrVHJhY2UuY3BwCmluZGV4IDU0NTBlMmYzYzAwOWM2MDE4Y2Y5YzUzMGEwMzZj
M2RiN2E2MzQ1MGUuLmE1OTYzOTVjYmVhNzkxZTcwYmUzZTIzNjJmZTU3ZjQzODM0YTU5NGEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvQXN5bmNTdGFja1RyYWNl
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0FzeW5jU3RhY2tUcmFj
ZS5jcHAKQEAgLTk3LDcgKzk3LDcgQEAgdm9pZCBBc3luY1N0YWNrVHJhY2U6OmRpZENhbmNlbEFz
eW5jQ2FsbCgpCiAgICAgbV9zdGF0ZSA9IFN0YXRlOjpDYW5jZWxlZDsKIH0KIAotUmVmUHRyPFBy
b3RvY29sOjpDb25zb2xlOjpTdGFja1RyYWNlPiBBc3luY1N0YWNrVHJhY2U6OmJ1aWxkSW5zcGVj
dG9yT2JqZWN0KCkgY29uc3QKK1JlZjxQcm90b2NvbDo6Q29uc29sZTo6U3RhY2tUcmFjZT4gQXN5
bmNTdGFja1RyYWNlOjpidWlsZEluc3BlY3Rvck9iamVjdCgpIGNvbnN0CiB7CiAgICAgUmVmUHRy
PFByb3RvY29sOjpDb25zb2xlOjpTdGFja1RyYWNlPiB0b3BTdGFja1RyYWNlOwogICAgIFJlZlB0
cjxQcm90b2NvbDo6Q29uc29sZTo6U3RhY2tUcmFjZT4gcHJldmlvdXNTdGFja1RyYWNlOwpAQCAt
MTIwLDEzICsxMjAsMTMgQEAgUmVmUHRyPFByb3RvY29sOjpDb25zb2xlOjpTdGFja1RyYWNlPiBB
c3luY1N0YWNrVHJhY2U6OmJ1aWxkSW5zcGVjdG9yT2JqZWN0KCkgY28KICAgICAgICAgICAgIHRv
cFN0YWNrVHJhY2UgPSBwcm90b2NvbE9iamVjdC5wdHIoKTsKIAogICAgICAgICBpZiAocHJldmlv
dXNTdGFja1RyYWNlKQotICAgICAgICAgICAgcHJldmlvdXNTdGFja1RyYWNlLT5zZXRQYXJlbnRT
dGFja1RyYWNlKHByb3RvY29sT2JqZWN0LnB0cigpKTsKKyAgICAgICAgICAgIHByZXZpb3VzU3Rh
Y2tUcmFjZS0+c2V0UGFyZW50U3RhY2tUcmFjZShwcm90b2NvbE9iamVjdC5jb3B5UmVmKCkpOwog
CiAgICAgICAgIHByZXZpb3VzU3RhY2tUcmFjZSA9IFdURk1vdmUocHJvdG9jb2xPYmplY3QpOwog
ICAgICAgICBzdGFja1RyYWNlID0gc3RhY2tUcmFjZS0+bV9wYXJlbnQuZ2V0KCk7CiAgICAgfQog
Ci0gICAgcmV0dXJuIHRvcFN0YWNrVHJhY2U7CisgICAgcmV0dXJuIHRvcFN0YWNrVHJhY2UucmVs
ZWFzZU5vbk51bGwoKTsKIH0KIAogdm9pZCBBc3luY1N0YWNrVHJhY2U6OnRydW5jYXRlKHNpemVf
dCBtYXhEZXB0aCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
QXN5bmNTdGFja1RyYWNlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0FzeW5j
U3RhY2tUcmFjZS5oCmluZGV4IDZlZGU2YzQyNWFiY2FhMmQ2MWU1YmI3YjFiYTE5ZTMyZTU3MjNi
NmMuLjQ5OWExZTA1ZmQ1OTQzZjlmYWVkYzMwZTBiZDNkMjBlMGM1ZGRiZWEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvQXN5bmNTdGFja1RyYWNlLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9Bc3luY1N0YWNrVHJhY2UuaApAQCAtNTEs
NyArNTEsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBkaWREaXNwYXRjaEFzeW5jQ2FsbCgpOwogICAg
IHZvaWQgZGlkQ2FuY2VsQXN5bmNDYWxsKCk7CiAKLSAgICBSZWZQdHI8UHJvdG9jb2w6OkNvbnNv
bGU6OlN0YWNrVHJhY2U+IGJ1aWxkSW5zcGVjdG9yT2JqZWN0KCkgY29uc3Q7CisgICAgUmVmPFBy
b3RvY29sOjpDb25zb2xlOjpTdGFja1RyYWNlPiBidWlsZEluc3BlY3Rvck9iamVjdCgpIGNvbnN0
OwogCiAgICAgfkFzeW5jU3RhY2tUcmFjZSgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL0NvbnNvbGVNZXNzYWdlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3IvQ29uc29sZU1lc3NhZ2UuY3BwCmluZGV4IDU0MmM3YzdiMzdlZmIyZTRh
NzZhMzJhMDA4ZDA2M2RiYzgwNWNkZDAuLjkwYTFkZDk2MDQ3MGE1NGVkM2IxNDY2Y2VjZmRlZmE4
MzQ5NDU4MGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvQ29u
c29sZU1lc3NhZ2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvQ29u
c29sZU1lc3NhZ2UuY3BwCkBAIC0yNjEsOSArMjYxLDExIEBAIHZvaWQgQ29uc29sZU1lc3NhZ2U6
OmFkZFRvRnJvbnRlbmQoQ29uc29sZUZyb250ZW5kRGlzcGF0Y2hlciYgY29uc29sZUZyb250ZW5k
RGlzCiAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICBhcmd1bWVudHNPYmplY3QtPmFkZEl0ZW0oV1RGTW92ZShpbnNwZWN0b3JW
YWx1ZSkpOwotICAgICAgICAgICAgICAgICAgICBpZiAobV9hcmd1bWVudHMtPmFyZ3VtZW50Q291
bnQoKSA+IDEpCi0gICAgICAgICAgICAgICAgICAgICAgICBhcmd1bWVudHNPYmplY3QtPmFkZEl0
ZW0oaW5qZWN0ZWRTY3JpcHQud3JhcE9iamVjdChjb2x1bW5zLCAiY29uc29sZSJfcywgdHJ1ZSkp
OworICAgICAgICAgICAgICAgICAgICBhcmd1bWVudHNPYmplY3QtPmFkZEl0ZW0oaW5zcGVjdG9y
VmFsdWUucmVsZWFzZU5vbk51bGwoKSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChtX2FyZ3Vt
ZW50cy0+YXJndW1lbnRDb3VudCgpID4gMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KGF1dG8gaW5zcGVjdG9yT2JqZWN0ID0gaW5qZWN0ZWRTY3JpcHQud3JhcE9iamVjdChjb2x1bW5z
LCAiY29uc29sZSJfcywgdHJ1ZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJndW1l
bnRzT2JqZWN0LT5hZGRJdGVtKGluc3BlY3Rvck9iamVjdC5yZWxlYXNlTm9uTnVsbCgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2FyZ3VtZW50cy0+YXJndW1lbnRD
b3VudCgpOyArK2kpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gaW5zcGVjdG9yVmFs
dWUgPSBpbmplY3RlZFNjcmlwdC53cmFwT2JqZWN0KG1fYXJndW1lbnRzLT5hcmd1bWVudEF0KGkp
LCAiY29uc29sZSJfcywgZ2VuZXJhdGVQcmV2aWV3KTsKQEAgLTI3MSw3ICsyNzMsNyBAQCB2b2lk
IENvbnNvbGVNZXNzYWdlOjphZGRUb0Zyb250ZW5kKENvbnNvbGVGcm9udGVuZERpc3BhdGNoZXIm
IGNvbnNvbGVGcm9udGVuZERpcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50c09i
amVjdC0+YWRkSXRlbShXVEZNb3ZlKGluc3BlY3RvclZhbHVlKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBhcmd1bWVudHNPYmplY3QtPmFkZEl0ZW0oaW5zcGVjdG9yVmFsdWUucmVsZWFzZU5v
bk51bGwoKSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICB9CkBAIC0yODQsNyArMjg2LDcgQEAgdm9pZCBDb25zb2xlTWVzc2FnZTo6YWRkVG9G
cm9udGVuZChDb25zb2xlRnJvbnRlbmREaXNwYXRjaGVyJiBjb25zb2xlRnJvbnRlbmREaXMKICAg
ICAgICAgICAgICAgICAgICAgaWYgKCFpbnNwZWN0b3JWYWx1ZSkKICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50c09iamVjdC0+
YWRkSXRlbShXVEZNb3ZlKGluc3BlY3RvclZhbHVlKSk7CisgICAgICAgICAgICAgICAgICAgIGFy
Z3VtZW50c09iamVjdC0+YWRkSXRlbShpbnNwZWN0b3JWYWx1ZS5yZWxlYXNlTm9uTnVsbCgpKTsK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHQuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdC5jcHAKaW5kZXggY2M4NDlmMDUxZmE0
MDUxOGE5ZDFhMDM0MjliYzJiNGRiY2ZiMzEwMi4uNjkwOWEzMzllYTJlM2RlNjAwZjU1ZmQ2ZmU0
NjgzNjQ2MTcxZTBhNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9JbmplY3RlZFNjcmlwdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9JbmplY3RlZFNjcmlwdC5jcHAKQEAgLTU2LDcgKzU2LDcgQEAgSW5qZWN0ZWRTY3JpcHQ6On5J
bmplY3RlZFNjcmlwdCgpCiB7CiB9CiAKLXZvaWQgSW5qZWN0ZWRTY3JpcHQ6OmV4ZWN1dGUoRXJy
b3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGZ1bmN0aW9uU3RyaW5nLCBFeGVj
dXRlT3B0aW9ucyYmIG9wdGlvbnMsIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2Jq
ZWN0PiYgcmVzdWx0LCBPcHRpb25hbDxib29sPiYgd2FzVGhyb3duLCBPcHRpb25hbDxpbnQ+JiBz
YXZlZFJlc3VsdEluZGV4KQordm9pZCBJbmplY3RlZFNjcmlwdDo6ZXhlY3V0ZShQcm90b2NvbDo6
RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGZ1bmN0aW9uU3RyaW5nLCBF
eGVjdXRlT3B0aW9ucyYmIG9wdGlvbnMsIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3Rl
T2JqZWN0PiYgcmVzdWx0LCBPcHRpb25hbDxib29sPiYgd2FzVGhyb3duLCBPcHRpb25hbDxpbnQ+
JiBzYXZlZFJlc3VsdEluZGV4KQogewogICAgIERlcHJlY2F0ZWQ6OlNjcmlwdEZ1bmN0aW9uQ2Fs
bCBmdW5jdGlvbihpbmplY3RlZFNjcmlwdE9iamVjdCgpLCAiZXhlY3V0ZSJfcywgaW5zcGVjdG9y
RW52aXJvbm1lbnQoKS0+ZnVuY3Rpb25DYWxsSGFuZGxlcigpKTsKICAgICBmdW5jdGlvbi5hcHBl
bmRBcmd1bWVudChmdW5jdGlvblN0cmluZyk7CkBAIC02OSw3ICs2OSw3IEBAIHZvaWQgSW5qZWN0
ZWRTY3JpcHQ6OmV4ZWN1dGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcm
IGZ1bmN0aW9uU3RyCiAgICAgbWFrZUV2YWxDYWxsKGVycm9yU3RyaW5nLCBmdW5jdGlvbiwgcmVz
dWx0LCB3YXNUaHJvd24sIHNhdmVkUmVzdWx0SW5kZXgpOwogfQogCi12b2lkIEluamVjdGVkU2Ny
aXB0OjpldmFsdWF0ZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgZXhw
cmVzc2lvbiwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCwgYm9vbCBpbmNsdWRlQ29tbWFuZExp
bmVBUEksIGJvb2wgcmV0dXJuQnlWYWx1ZSwgYm9vbCBnZW5lcmF0ZVByZXZpZXcsIGJvb2wgc2F2
ZVJlc3VsdCwgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiByZXN1bHQs
IE9wdGlvbmFsPGJvb2w+JiB3YXNUaHJvd24sIE9wdGlvbmFsPGludD4mIHNhdmVkUmVzdWx0SW5k
ZXgpCit2b2lkIEluamVjdGVkU2NyaXB0OjpldmFsdWF0ZShQcm90b2NvbDo6RXJyb3JTdHJpbmcm
IGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIGNvbnN0IFN0cmluZyYgb2Jq
ZWN0R3JvdXAsIGJvb2wgaW5jbHVkZUNvbW1hbmRMaW5lQVBJLCBib29sIHJldHVybkJ5VmFsdWUs
IGJvb2wgZ2VuZXJhdGVQcmV2aWV3LCBib29sIHNhdmVSZXN1bHQsIFJlZlB0cjxQcm90b2NvbDo6
UnVudGltZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0LCBPcHRpb25hbDxib29sPiYgd2FzVGhyb3du
LCBPcHRpb25hbDxpbnQ+JiBzYXZlZFJlc3VsdEluZGV4KQogewogICAgIERlcHJlY2F0ZWQ6OlNj
cmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihpbmplY3RlZFNjcmlwdE9iamVjdCgpLCAiZXZhbHVh
dGUiX3MsIGluc3BlY3RvckVudmlyb25tZW50KCktPmZ1bmN0aW9uQ2FsbEhhbmRsZXIoKSk7CiAg
ICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoZXhwcmVzc2lvbik7CkBAIC05MSw3ICs5MSw3IEBA
IHZvaWQgSW5qZWN0ZWRTY3JpcHQ6OmF3YWl0UHJvbWlzZShjb25zdCBTdHJpbmcmIHByb21pc2VP
YmplY3RJZCwgYm9vbCByZXR1cm5CeVZhCiAgICAgbWFrZUFzeW5jQ2FsbChmdW5jdGlvbiwgV1RG
TW92ZShjYWxsYmFjaykpOwogfQogCi12b2lkIEluamVjdGVkU2NyaXB0OjpjYWxsRnVuY3Rpb25P
bihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgb2JqZWN0SWQsIGNvbnN0
IFN0cmluZyYgZXhwcmVzc2lvbiwgY29uc3QgU3RyaW5nJiBhcmd1bWVudHMsIGJvb2wgcmV0dXJu
QnlWYWx1ZSwgYm9vbCBnZW5lcmF0ZVByZXZpZXcsIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6
UmVtb3RlT2JqZWN0PiYgcmVzdWx0LCBPcHRpb25hbDxib29sPiYgd2FzVGhyb3duKQordm9pZCBJ
bmplY3RlZFNjcmlwdDo6Y2FsbEZ1bmN0aW9uT24oUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJv
clN0cmluZywgY29uc3QgU3RyaW5nJiBvYmplY3RJZCwgY29uc3QgU3RyaW5nJiBleHByZXNzaW9u
LCBjb25zdCBTdHJpbmcmIGFyZ3VtZW50cywgYm9vbCByZXR1cm5CeVZhbHVlLCBib29sIGdlbmVy
YXRlUHJldmlldywgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiByZXN1
bHQsIE9wdGlvbmFsPGJvb2w+JiB3YXNUaHJvd24pCiB7CiAgICAgRGVwcmVjYXRlZDo6U2NyaXB0
RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKGluamVjdGVkU2NyaXB0T2JqZWN0KCksICJjYWxsRnVuY3Rp
b25PbiJfcywgaW5zcGVjdG9yRW52aXJvbm1lbnQoKS0+ZnVuY3Rpb25DYWxsSGFuZGxlcigpKTsK
ICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChvYmplY3RJZCk7CkBAIC0xMDUsNyArMTA1LDcg
QEAgdm9pZCBJbmplY3RlZFNjcmlwdDo6Y2FsbEZ1bmN0aW9uT24oRXJyb3JTdHJpbmcmIGVycm9y
U3RyaW5nLCBjb25zdCBTdHJpbmcmIG9iamUKICAgICBBU1NFUlQoIXNhdmVkUmVzdWx0SW5kZXgp
OwogfQogCi12b2lkIEluamVjdGVkU2NyaXB0OjpldmFsdWF0ZU9uQ2FsbEZyYW1lKEVycm9yU3Ry
aW5nJiBlcnJvclN0cmluZywgSlNDOjpKU1ZhbHVlIGNhbGxGcmFtZXMsIGNvbnN0IFN0cmluZyYg
Y2FsbEZyYW1lSWQsIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgY29uc3QgU3RyaW5nJiBvYmpl
Y3RHcm91cCwgYm9vbCBpbmNsdWRlQ29tbWFuZExpbmVBUEksIGJvb2wgcmV0dXJuQnlWYWx1ZSwg
Ym9vbCBnZW5lcmF0ZVByZXZpZXcsIGJvb2wgc2F2ZVJlc3VsdCwgUmVmUHRyPFByb3RvY29sOjpS
dW50aW1lOjpSZW1vdGVPYmplY3Q+JiByZXN1bHQsIE9wdGlvbmFsPGJvb2w+JiB3YXNUaHJvd24s
IE9wdGlvbmFsPGludD4mIHNhdmVkUmVzdWx0SW5kZXgpCit2b2lkIEluamVjdGVkU2NyaXB0Ojpl
dmFsdWF0ZU9uQ2FsbEZyYW1lKFByb3RvY29sOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIEpT
Qzo6SlNWYWx1ZSBjYWxsRnJhbWVzLCBjb25zdCBTdHJpbmcmIGNhbGxGcmFtZUlkLCBjb25zdCBT
dHJpbmcmIGV4cHJlc3Npb24sIGNvbnN0IFN0cmluZyYgb2JqZWN0R3JvdXAsIGJvb2wgaW5jbHVk
ZUNvbW1hbmRMaW5lQVBJLCBib29sIHJldHVybkJ5VmFsdWUsIGJvb2wgZ2VuZXJhdGVQcmV2aWV3
LCBib29sIHNhdmVSZXN1bHQsIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0
PiYgcmVzdWx0LCBPcHRpb25hbDxib29sPiYgd2FzVGhyb3duLCBPcHRpb25hbDxpbnQ+JiBzYXZl
ZFJlc3VsdEluZGV4KQogewogICAgIERlcHJlY2F0ZWQ6OlNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5j
dGlvbihpbmplY3RlZFNjcmlwdE9iamVjdCgpLCAiZXZhbHVhdGVPbkNhbGxGcmFtZSJfcywgaW5z
cGVjdG9yRW52aXJvbm1lbnQoKS0+ZnVuY3Rpb25DYWxsSGFuZGxlcigpKTsKICAgICBmdW5jdGlv
bi5hcHBlbmRBcmd1bWVudChjYWxsRnJhbWVzKTsKQEAgLTExOSw1MiArMTE5LDU1IEBAIHZvaWQg
SW5qZWN0ZWRTY3JpcHQ6OmV2YWx1YXRlT25DYWxsRnJhbWUoRXJyb3JTdHJpbmcmIGVycm9yU3Ry
aW5nLCBKU0M6OkpTVmFsdWUKICAgICBtYWtlRXZhbENhbGwoZXJyb3JTdHJpbmcsIGZ1bmN0aW9u
LCByZXN1bHQsIHdhc1Rocm93biwgc2F2ZWRSZXN1bHRJbmRleCk7CiB9CiAKLXZvaWQgSW5qZWN0
ZWRTY3JpcHQ6OmdldEZ1bmN0aW9uRGV0YWlscyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNv
bnN0IFN0cmluZyYgZnVuY3Rpb25JZCwgUmVmUHRyPFByb3RvY29sOjpEZWJ1Z2dlcjo6RnVuY3Rp
b25EZXRhaWxzPiYgcmVzdWx0KQordm9pZCBJbmplY3RlZFNjcmlwdDo6Z2V0RnVuY3Rpb25EZXRh
aWxzKFByb3RvY29sOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgZnVu
Y3Rpb25JZCwgUmVmUHRyPFByb3RvY29sOjpEZWJ1Z2dlcjo6RnVuY3Rpb25EZXRhaWxzPiYgcmVz
dWx0KQogewogICAgIERlcHJlY2F0ZWQ6OlNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihpbmpl
Y3RlZFNjcmlwdE9iamVjdCgpLCAiZ2V0RnVuY3Rpb25EZXRhaWxzIl9zLCBpbnNwZWN0b3JFbnZp
cm9ubWVudCgpLT5mdW5jdGlvbkNhbGxIYW5kbGVyKCkpOwogICAgIGZ1bmN0aW9uLmFwcGVuZEFy
Z3VtZW50KGZ1bmN0aW9uSWQpOwogCiAgICAgUmVmUHRyPEpTT046OlZhbHVlPiByZXN1bHRWYWx1
ZSA9IG1ha2VDYWxsKGZ1bmN0aW9uKTsKICAgICBpZiAoIXJlc3VsdFZhbHVlIHx8IHJlc3VsdFZh
bHVlLT50eXBlKCkgIT0gSlNPTjo6VmFsdWU6OlR5cGU6Ok9iamVjdCkgewotICAgICAgICBpZiAo
IXJlc3VsdFZhbHVlLT5hc1N0cmluZyhlcnJvclN0cmluZykpCisgICAgICAgIGVycm9yU3RyaW5n
ID0gcmVzdWx0VmFsdWUtPmFzU3RyaW5nKCk7CisgICAgICAgIGlmICghZXJyb3JTdHJpbmcpCiAg
ICAgICAgICAgICBlcnJvclN0cmluZyA9ICJJbnRlcm5hbCBlcnJvciJfczsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAotICAgIHJlc3VsdCA9IEJpbmRpbmdUcmFpdHM8UHJvdG9jb2w6OkRlYnVn
Z2VyOjpGdW5jdGlvbkRldGFpbHM+OjpydW50aW1lQ2FzdChXVEZNb3ZlKHJlc3VsdFZhbHVlKSk7
CisgICAgcmVzdWx0ID0gUHJvdG9jb2w6OkJpbmRpbmdUcmFpdHM8UHJvdG9jb2w6OkRlYnVnZ2Vy
OjpGdW5jdGlvbkRldGFpbHM+OjpydW50aW1lQ2FzdChyZXN1bHRWYWx1ZS5yZWxlYXNlTm9uTnVs
bCgpKTsKIH0KIAotdm9pZCBJbmplY3RlZFNjcmlwdDo6ZnVuY3Rpb25EZXRhaWxzKEVycm9yU3Ry
aW5nJiBlcnJvclN0cmluZywgSlNDOjpKU1ZhbHVlIHZhbHVlLCBSZWZQdHI8UHJvdG9jb2w6OkRl
YnVnZ2VyOjpGdW5jdGlvbkRldGFpbHM+JiByZXN1bHQpCit2b2lkIEluamVjdGVkU2NyaXB0Ojpm
dW5jdGlvbkRldGFpbHMoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgSlNDOjpK
U1ZhbHVlIHZhbHVlLCBSZWZQdHI8UHJvdG9jb2w6OkRlYnVnZ2VyOjpGdW5jdGlvbkRldGFpbHM+
JiByZXN1bHQpCiB7CiAgICAgRGVwcmVjYXRlZDo6U2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9u
KGluamVjdGVkU2NyaXB0T2JqZWN0KCksICJmdW5jdGlvbkRldGFpbHMiX3MsIGluc3BlY3RvckVu
dmlyb25tZW50KCktPmZ1bmN0aW9uQ2FsbEhhbmRsZXIoKSk7CiAgICAgZnVuY3Rpb24uYXBwZW5k
QXJndW1lbnQodmFsdWUpOwogCiAgICAgUmVmUHRyPEpTT046OlZhbHVlPiByZXN1bHRWYWx1ZSA9
IG1ha2VDYWxsKGZ1bmN0aW9uKTsKICAgICBpZiAoIXJlc3VsdFZhbHVlIHx8IHJlc3VsdFZhbHVl
LT50eXBlKCkgIT0gSlNPTjo6VmFsdWU6OlR5cGU6Ok9iamVjdCkgewotICAgICAgICBpZiAoIXJl
c3VsdFZhbHVlLT5hc1N0cmluZyhlcnJvclN0cmluZykpCisgICAgICAgIGVycm9yU3RyaW5nID0g
cmVzdWx0VmFsdWUtPmFzU3RyaW5nKCk7CisgICAgICAgIGlmICghZXJyb3JTdHJpbmcpCiAgICAg
ICAgICAgICBlcnJvclN0cmluZyA9ICJJbnRlcm5hbCBlcnJvciJfczsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIHJlc3VsdCA9IEJpbmRpbmdUcmFpdHM8UHJvdG9jb2w6OkRlYnVnZ2Vy
OjpGdW5jdGlvbkRldGFpbHM+OjpydW50aW1lQ2FzdChXVEZNb3ZlKHJlc3VsdFZhbHVlKSk7Cisg
ICAgcmVzdWx0ID0gUHJvdG9jb2w6OkJpbmRpbmdUcmFpdHM8UHJvdG9jb2w6OkRlYnVnZ2VyOjpG
dW5jdGlvbkRldGFpbHM+OjpydW50aW1lQ2FzdChyZXN1bHRWYWx1ZS5yZWxlYXNlTm9uTnVsbCgp
KTsKIH0KIAotdm9pZCBJbmplY3RlZFNjcmlwdDo6Z2V0UHJldmlldyhFcnJvclN0cmluZyYgZXJy
b3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgb2JqZWN0SWQsIFJlZlB0cjxQcm90b2NvbDo6UnVudGlt
ZTo6T2JqZWN0UHJldmlldz4mIHJlc3VsdCkKK3ZvaWQgSW5qZWN0ZWRTY3JpcHQ6OmdldFByZXZp
ZXcoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBvYmpl
Y3RJZCwgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpPYmplY3RQcmV2aWV3PiYgcmVzdWx0KQog
ewogICAgIERlcHJlY2F0ZWQ6OlNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihpbmplY3RlZFNj
cmlwdE9iamVjdCgpLCAiZ2V0UHJldmlldyJfcywgaW5zcGVjdG9yRW52aXJvbm1lbnQoKS0+ZnVu
Y3Rpb25DYWxsSGFuZGxlcigpKTsKICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChvYmplY3RJ
ZCk7CiAKICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHJlc3VsdFZhbHVlID0gbWFrZUNhbGwoZnVu
Y3Rpb24pOwogICAgIGlmICghcmVzdWx0VmFsdWUgfHwgcmVzdWx0VmFsdWUtPnR5cGUoKSAhPSBK
U09OOjpWYWx1ZTo6VHlwZTo6T2JqZWN0KSB7Ci0gICAgICAgIGlmICghcmVzdWx0VmFsdWUtPmFz
U3RyaW5nKGVycm9yU3RyaW5nKSkKKyAgICAgICAgZXJyb3JTdHJpbmcgPSByZXN1bHRWYWx1ZS0+
YXNTdHJpbmcoKTsKKyAgICAgICAgaWYgKCFlcnJvclN0cmluZykKICAgICAgICAgICAgIGVycm9y
U3RyaW5nID0gIkludGVybmFsIGVycm9yIl9zOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgcmVzdWx0ID0gQmluZGluZ1RyYWl0czxQcm90b2NvbDo6UnVudGltZTo6T2JqZWN0UHJldmll
dz46OnJ1bnRpbWVDYXN0KFdURk1vdmUocmVzdWx0VmFsdWUpKTsKKyAgICByZXN1bHQgPSBQcm90
b2NvbDo6QmluZGluZ1RyYWl0czxQcm90b2NvbDo6UnVudGltZTo6T2JqZWN0UHJldmlldz46OnJ1
bnRpbWVDYXN0KHJlc3VsdFZhbHVlLnJlbGVhc2VOb25OdWxsKCkpOwogfQogCi12b2lkIEluamVj
dGVkU2NyaXB0OjpnZXRQcm9wZXJ0aWVzKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3Qg
U3RyaW5nJiBvYmplY3RJZCwgYm9vbCBvd25Qcm9wZXJ0aWVzLCBpbnQgZmV0Y2hTdGFydCwgaW50
IGZldGNoQ291bnQsIGJvb2wgZ2VuZXJhdGVQcmV2aWV3LCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxQ
cm90b2NvbDo6UnVudGltZTo6UHJvcGVydHlEZXNjcmlwdG9yPj4mIHByb3BlcnRpZXMpCit2b2lk
IEluamVjdGVkU2NyaXB0OjpnZXRQcm9wZXJ0aWVzKFByb3RvY29sOjpFcnJvclN0cmluZyYgZXJy
b3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgb2JqZWN0SWQsIGJvb2wgb3duUHJvcGVydGllcywgaW50
IGZldGNoU3RhcnQsIGludCBmZXRjaENvdW50LCBib29sIGdlbmVyYXRlUHJldmlldywgUmVmUHRy
PEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OlByb3BlcnR5RGVzY3JpcHRvcj4+JiBw
cm9wZXJ0aWVzKQogewogICAgIEFTU0VSVChmZXRjaFN0YXJ0ID49IDApOwogICAgIEFTU0VSVChm
ZXRjaENvdW50ID49IDApOwpAQCAtMTgyLDEwICsxODUsMTAgQEAgdm9pZCBJbmplY3RlZFNjcmlw
dDo6Z2V0UHJvcGVydGllcyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYg
b2JqZWMKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHByb3BlcnRpZXMgPSBCaW5kaW5n
VHJhaXRzPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OlByb3BlcnR5RGVzY3JpcHRv
cj4+OjpydW50aW1lQ2FzdChXVEZNb3ZlKHJlc3VsdCkpOworICAgIHByb3BlcnRpZXMgPSBQcm90
b2NvbDo6QmluZGluZ1RyYWl0czxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpQcm9w
ZXJ0eURlc2NyaXB0b3I+Pjo6cnVudGltZUNhc3QocmVzdWx0LnJlbGVhc2VOb25OdWxsKCkpOwog
fQogCi12b2lkIEluamVjdGVkU2NyaXB0OjpnZXREaXNwbGF5YWJsZVByb3BlcnRpZXMoRXJyb3JT
dHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBpbnQgZmV0Y2hTdGFy
dCwgaW50IGZldGNoQ291bnQsIGJvb2wgZ2VuZXJhdGVQcmV2aWV3LCBSZWZQdHI8SlNPTjo6QXJy
YXlPZjxQcm90b2NvbDo6UnVudGltZTo6UHJvcGVydHlEZXNjcmlwdG9yPj4mIHByb3BlcnRpZXMp
Cit2b2lkIEluamVjdGVkU2NyaXB0OjpnZXREaXNwbGF5YWJsZVByb3BlcnRpZXMoUHJvdG9jb2w6
OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBvYmplY3RJZCwgaW50IGZl
dGNoU3RhcnQsIGludCBmZXRjaENvdW50LCBib29sIGdlbmVyYXRlUHJldmlldywgUmVmUHRyPEpT
T046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OlByb3BlcnR5RGVzY3JpcHRvcj4+JiBwcm9w
ZXJ0aWVzKQogewogICAgIEFTU0VSVChmZXRjaFN0YXJ0ID49IDApOwogICAgIEFTU0VSVChmZXRj
aENvdW50ID49IDApOwpAQCAtMjAyLDEwICsyMDUsMTAgQEAgdm9pZCBJbmplY3RlZFNjcmlwdDo6
Z2V0RGlzcGxheWFibGVQcm9wZXJ0aWVzKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3Qg
U3QKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHByb3BlcnRpZXMgPSBCaW5kaW5nVHJh
aXRzPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OlByb3BlcnR5RGVzY3JpcHRvcj4+
OjpydW50aW1lQ2FzdChXVEZNb3ZlKHJlc3VsdCkpOworICAgIHByb3BlcnRpZXMgPSBQcm90b2Nv
bDo6QmluZGluZ1RyYWl0czxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpQcm9wZXJ0
eURlc2NyaXB0b3I+Pjo6cnVudGltZUNhc3QocmVzdWx0LnJlbGVhc2VOb25OdWxsKCkpOwogfQog
Ci12b2lkIEluamVjdGVkU2NyaXB0OjpnZXRJbnRlcm5hbFByb3BlcnRpZXMoRXJyb3JTdHJpbmcm
IGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBib29sIGdlbmVyYXRlUHJldmll
dywgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OkludGVybmFsUHJvcGVy
dHlEZXNjcmlwdG9yPj4mIHByb3BlcnRpZXMpCit2b2lkIEluamVjdGVkU2NyaXB0OjpnZXRJbnRl
cm5hbFByb3BlcnRpZXMoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3Qg
U3RyaW5nJiBvYmplY3RJZCwgYm9vbCBnZW5lcmF0ZVByZXZpZXcsIFJlZlB0cjxKU09OOjpBcnJh
eU9mPFByb3RvY29sOjpSdW50aW1lOjpJbnRlcm5hbFByb3BlcnR5RGVzY3JpcHRvcj4+JiBwcm9w
ZXJ0aWVzKQogewogICAgIERlcHJlY2F0ZWQ6OlNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihp
bmplY3RlZFNjcmlwdE9iamVjdCgpLCAiZ2V0SW50ZXJuYWxQcm9wZXJ0aWVzIl9zLCBpbnNwZWN0
b3JFbnZpcm9ubWVudCgpLT5mdW5jdGlvbkNhbGxIYW5kbGVyKCkpOwogICAgIGZ1bmN0aW9uLmFw
cGVuZEFyZ3VtZW50KG9iamVjdElkKTsKQEAgLTIxNywxMSArMjIwLDEyIEBAIHZvaWQgSW5qZWN0
ZWRTY3JpcHQ6OmdldEludGVybmFsUHJvcGVydGllcyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcs
IGNvbnN0IFN0cmluCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvIGFycmF5ID0g
QmluZGluZ1RyYWl0czxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpJbnRlcm5hbFBy
b3BlcnR5RGVzY3JpcHRvcj4+OjpydW50aW1lQ2FzdChXVEZNb3ZlKHJlc3VsdCkpOwotICAgIHBy
b3BlcnRpZXMgPSBhcnJheS0+bGVuZ3RoKCkgPiAwID8gYXJyYXkgOiBudWxscHRyOworICAgIGF1
dG8gYXJyYXkgPSBQcm90b2NvbDo6QmluZGluZ1RyYWl0czxKU09OOjpBcnJheU9mPFByb3RvY29s
OjpSdW50aW1lOjpJbnRlcm5hbFByb3BlcnR5RGVzY3JpcHRvcj4+OjpydW50aW1lQ2FzdChyZXN1
bHQucmVsZWFzZU5vbk51bGwoKSk7CisgICAgaWYgKGFycmF5LT5sZW5ndGgoKSkKKyAgICAgICAg
cHJvcGVydGllcyA9IFdURk1vdmUoYXJyYXkpOwogfQogCi12b2lkIEluamVjdGVkU2NyaXB0Ojpn
ZXRDb2xsZWN0aW9uRW50cmllcyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmlu
ZyYgb2JqZWN0SWQsIGNvbnN0IFN0cmluZyYgb2JqZWN0R3JvdXAsIGludCBmZXRjaFN0YXJ0LCBp
bnQgZmV0Y2hDb3VudCwgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OkNv
bGxlY3Rpb25FbnRyeT4+JiBlbnRyaWVzKQordm9pZCBJbmplY3RlZFNjcmlwdDo6Z2V0Q29sbGVj
dGlvbkVudHJpZXMoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3Ry
aW5nJiBvYmplY3RJZCwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCwgaW50IGZldGNoU3RhcnQs
IGludCBmZXRjaENvdW50LCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UnVudGltZTo6
Q29sbGVjdGlvbkVudHJ5Pj4mIGVudHJpZXMpCiB7CiAgICAgQVNTRVJUKGZldGNoU3RhcnQgPj0g
MCk7CiAgICAgQVNTRVJUKGZldGNoQ291bnQgPj0gMCk7CkBAIC0yMzgsMTAgKzI0MiwxMCBAQCB2
b2lkIEluamVjdGVkU2NyaXB0OjpnZXRDb2xsZWN0aW9uRW50cmllcyhFcnJvclN0cmluZyYgZXJy
b3JTdHJpbmcsIGNvbnN0IFN0cmluZwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgZW50
cmllcyA9IEJpbmRpbmdUcmFpdHM8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UnVudGltZTo6Q29s
bGVjdGlvbkVudHJ5Pj46OnJ1bnRpbWVDYXN0KFdURk1vdmUocmVzdWx0KSk7CisgICAgZW50cmll
cyA9IFByb3RvY29sOjpCaW5kaW5nVHJhaXRzPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRp
bWU6OkNvbGxlY3Rpb25FbnRyeT4+OjpydW50aW1lQ2FzdChyZXN1bHQucmVsZWFzZU5vbk51bGwo
KSk7CiB9CiAKLXZvaWQgSW5qZWN0ZWRTY3JpcHQ6OnNhdmVSZXN1bHQoRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGNhbGxBcmd1bWVudEpTT04sIE9wdGlvbmFsPGludD4m
IHNhdmVkUmVzdWx0SW5kZXgpCit2b2lkIEluamVjdGVkU2NyaXB0OjpzYXZlUmVzdWx0KFByb3Rv
Y29sOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgY2FsbEFyZ3VtZW50
SlNPTiwgT3B0aW9uYWw8aW50PiYgc2F2ZWRSZXN1bHRJbmRleCkKIHsKICAgICBEZXByZWNhdGVk
OjpTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24oaW5qZWN0ZWRTY3JpcHRPYmplY3QoKSwgInNh
dmVSZXN1bHQiX3MsIGluc3BlY3RvckVudmlyb25tZW50KCktPmZ1bmN0aW9uQ2FsbEhhbmRsZXIo
KSk7CiAgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoY2FsbEFyZ3VtZW50SlNPTik7CkBAIC0y
NTIsOSArMjU2LDcgQEAgdm9pZCBJbmplY3RlZFNjcmlwdDo6c2F2ZVJlc3VsdChFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgY2FsbEFyZ3UKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIGludCByZXN1bHRJbmRleCA9IDA7Ci0gICAgaWYgKHJlc3VsdC0+YXNJbnRl
Z2VyKHJlc3VsdEluZGV4KSAmJiByZXN1bHRJbmRleCA+IDApCi0gICAgICAgIHNhdmVkUmVzdWx0
SW5kZXggPSByZXN1bHRJbmRleDsKKyAgICBzYXZlZFJlc3VsdEluZGV4ID0gcmVzdWx0LT5hc0lu
dGVnZXIoKTsKIH0KIAogUmVmPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkRlYnVnZ2VyOjpDYWxs
RnJhbWU+PiBJbmplY3RlZFNjcmlwdDo6d3JhcENhbGxGcmFtZXMoSlNDOjpKU1ZhbHVlIGNhbGxG
cmFtZXMpIGNvbnN0CkBAIC0yNjksOCArMjcxLDggQEAgUmVmPEpTT046OkFycmF5T2Y8UHJvdG9j
b2w6OkRlYnVnZ2VyOjpDYWxsRnJhbWU+PiBJbmplY3RlZFNjcmlwdDo6d3JhcENhbGxGcmFtZXMK
ICAgICAgICAgcmV0dXJuIEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkRlYnVnZ2VyOjpDYWxsRnJh
bWU+OjpjcmVhdGUoKTsKIAogICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gcmVzdWx0ID0gdG9JbnNw
ZWN0b3JWYWx1ZShnbG9iYWxPYmplY3QoKSwgY2FsbFJlc3VsdC52YWx1ZSgpKTsKLSAgICBpZiAo
cmVzdWx0LT50eXBlKCkgPT0gSlNPTjo6VmFsdWU6OlR5cGU6OkFycmF5KQotICAgICAgICByZXR1
cm4gQmluZGluZ1RyYWl0czxKU09OOjpBcnJheU9mPFByb3RvY29sOjpEZWJ1Z2dlcjo6Q2FsbEZy
YW1lPj46OnJ1bnRpbWVDYXN0KFdURk1vdmUocmVzdWx0KSkucmVsZWFzZU5vbk51bGwoKTsKKyAg
ICBpZiAocmVzdWx0ICYmIHJlc3VsdC0+dHlwZSgpID09IEpTT046OlZhbHVlOjpUeXBlOjpBcnJh
eSkKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpCaW5kaW5nVHJhaXRzPEpTT046OkFycmF5T2Y8
UHJvdG9jb2w6OkRlYnVnZ2VyOjpDYWxsRnJhbWU+Pjo6cnVudGltZUNhc3QocmVzdWx0LnJlbGVh
c2VOb25OdWxsKCkpOwogCiAgICAgcmV0dXJuIEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkRlYnVn
Z2VyOjpDYWxsRnJhbWU+OjpjcmVhdGUoKTsKIH0KQEAgLTI4OCwxMSArMjkwLDE1IEBAIFJlZlB0
cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiBJbmplY3RlZFNjcmlwdDo6d3JhcE9i
amVjdChKU0M6OkpTVmFsdWUKICAgICBpZiAoIWNhbGxSZXN1bHQpCiAgICAgICAgIHJldHVybiBu
dWxscHRyOwogCi0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcmVzdWx0T2JqZWN0OwotICAgIGJv
b2wgY2FzdFN1Y2NlZWRlZCA9IHRvSW5zcGVjdG9yVmFsdWUoZ2xvYmFsT2JqZWN0KCksIGNhbGxS
ZXN1bHQudmFsdWUoKSktPmFzT2JqZWN0KHJlc3VsdE9iamVjdCk7Ci0gICAgQVNTRVJUX1VOVVNF
RChjYXN0U3VjY2VlZGVkLCBjYXN0U3VjY2VlZGVkKTsKKyAgICBhdXRvIHJlc3VsdFZhbHVlID0g
dG9JbnNwZWN0b3JWYWx1ZShnbG9iYWxPYmplY3QoKSwgY2FsbFJlc3VsdC52YWx1ZSgpKTsKKyAg
ICBpZiAoIXJlc3VsdFZhbHVlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVy
biBCaW5kaW5nVHJhaXRzPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+OjpydW50aW1l
Q2FzdChyZXN1bHRPYmplY3QpOworICAgIGF1dG8gcmVzdWx0T2JqZWN0ID0gcmVzdWx0VmFsdWUt
PmFzT2JqZWN0KCk7CisgICAgaWYgKCFyZXN1bHRPYmplY3QpCisgICAgICAgIHJldHVybiBudWxs
cHRyOworCisgICAgcmV0dXJuIFByb3RvY29sOjpCaW5kaW5nVHJhaXRzPFByb3RvY29sOjpSdW50
aW1lOjpSZW1vdGVPYmplY3Q+OjpydW50aW1lQ2FzdChyZXN1bHRPYmplY3QucmVsZWFzZU5vbk51
bGwoKSk7CiB9CiAKIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiBJbmpl
Y3RlZFNjcmlwdDo6d3JhcEpTT05TdHJpbmcoY29uc3QgU3RyaW5nJiBqc29uLCBjb25zdCBTdHJp
bmcmIGdyb3VwTmFtZSwgYm9vbCBnZW5lcmF0ZVByZXZpZXcpIGNvbnN0CkBAIC0zMTAsMTEgKzMx
NiwxNSBAQCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4gSW5qZWN0ZWRT
Y3JpcHQ6OndyYXBKU09OU3RyaW5nKGNvbnN0IFN0cgogICAgIGlmIChjYWxsUmVzdWx0LnZhbHVl
KCkuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgUmVmUHRyPEpTT046
Ok9iamVjdD4gcmVzdWx0T2JqZWN0OwotICAgIGJvb2wgY2FzdFN1Y2NlZWRlZCA9IHRvSW5zcGVj
dG9yVmFsdWUoZ2xvYmFsT2JqZWN0KCksIGNhbGxSZXN1bHQudmFsdWUoKSktPmFzT2JqZWN0KHJl
c3VsdE9iamVjdCk7Ci0gICAgQVNTRVJUX1VOVVNFRChjYXN0U3VjY2VlZGVkLCBjYXN0U3VjY2Vl
ZGVkKTsKKyAgICBhdXRvIHJlc3VsdFZhbHVlID0gdG9JbnNwZWN0b3JWYWx1ZShnbG9iYWxPYmpl
Y3QoKSwgY2FsbFJlc3VsdC52YWx1ZSgpKTsKKyAgICBpZiAoIXJlc3VsdFZhbHVlKQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiBCaW5kaW5nVHJhaXRzPFByb3RvY29sOjpS
dW50aW1lOjpSZW1vdGVPYmplY3Q+OjpydW50aW1lQ2FzdChyZXN1bHRPYmplY3QpOworICAgIGF1
dG8gcmVzdWx0T2JqZWN0ID0gcmVzdWx0VmFsdWUtPmFzT2JqZWN0KCk7CisgICAgaWYgKCFyZXN1
bHRPYmplY3QpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuIFByb3RvY29s
OjpCaW5kaW5nVHJhaXRzPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+OjpydW50aW1l
Q2FzdChyZXN1bHRPYmplY3QucmVsZWFzZU5vbk51bGwoKSk7CiB9CiAKIFJlZlB0cjxQcm90b2Nv
bDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiBJbmplY3RlZFNjcmlwdDo6d3JhcFRhYmxlKEpTQzo6
SlNWYWx1ZSB0YWJsZSwgSlNDOjpKU1ZhbHVlIGNvbHVtbnMpIGNvbnN0CkBAIC0zMzIsMTEgKzM0
MiwxNSBAQCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4gSW5qZWN0ZWRT
Y3JpcHQ6OndyYXBUYWJsZShKU0M6OkpTVmFsdWUgdAogICAgIGlmICghY2FsbFJlc3VsdCkKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiByZXN1bHRP
YmplY3Q7Ci0gICAgYm9vbCBjYXN0U3VjY2VlZGVkID0gdG9JbnNwZWN0b3JWYWx1ZShnbG9iYWxP
YmplY3QoKSwgY2FsbFJlc3VsdC52YWx1ZSgpKS0+YXNPYmplY3QocmVzdWx0T2JqZWN0KTsKLSAg
ICBBU1NFUlRfVU5VU0VEKGNhc3RTdWNjZWVkZWQsIGNhc3RTdWNjZWVkZWQpOworICAgIGF1dG8g
cmVzdWx0VmFsdWUgPSB0b0luc3BlY3RvclZhbHVlKGdsb2JhbE9iamVjdCgpLCBjYWxsUmVzdWx0
LnZhbHVlKCkpOworICAgIGlmICghcmVzdWx0VmFsdWUpCisgICAgICAgIHJldHVybiBudWxscHRy
OwogCi0gICAgcmV0dXJuIEJpbmRpbmdUcmFpdHM8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9i
amVjdD46OnJ1bnRpbWVDYXN0KHJlc3VsdE9iamVjdCk7CisgICAgYXV0byByZXN1bHRPYmplY3Qg
PSByZXN1bHRWYWx1ZS0+YXNPYmplY3QoKTsKKyAgICBpZiAoIXJlc3VsdE9iamVjdCkKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gUHJvdG9jb2w6OkJpbmRpbmdUcmFpdHM8
UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD46OnJ1bnRpbWVDYXN0KHJlc3VsdE9iamVj
dC5yZWxlYXNlTm9uTnVsbCgpKTsKIH0KIAogUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpPYmpl
Y3RQcmV2aWV3PiBJbmplY3RlZFNjcmlwdDo6cHJldmlld1ZhbHVlKEpTQzo6SlNWYWx1ZSB2YWx1
ZSkgY29uc3QKQEAgLTM0OSwxMSArMzYzLDE1IEBAIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6
T2JqZWN0UHJldmlldz4gSW5qZWN0ZWRTY3JpcHQ6OnByZXZpZXdWYWx1ZShKU0M6OkpTVmFsCiAg
ICAgaWYgKCFjYWxsUmVzdWx0KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIFJlZlB0
cjxKU09OOjpPYmplY3Q+IHJlc3VsdE9iamVjdDsKLSAgICBib29sIGNhc3RTdWNjZWVkZWQgPSB0
b0luc3BlY3RvclZhbHVlKGdsb2JhbE9iamVjdCgpLCBjYWxsUmVzdWx0LnZhbHVlKCkpLT5hc09i
amVjdChyZXN1bHRPYmplY3QpOwotICAgIEFTU0VSVF9VTlVTRUQoY2FzdFN1Y2NlZWRlZCwgY2Fz
dFN1Y2NlZWRlZCk7CisgICAgYXV0byByZXN1bHRWYWx1ZSA9IHRvSW5zcGVjdG9yVmFsdWUoZ2xv
YmFsT2JqZWN0KCksIGNhbGxSZXN1bHQudmFsdWUoKSk7CisgICAgaWYgKCFyZXN1bHRWYWx1ZSkK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gQmluZGluZ1RyYWl0czxQcm90
b2NvbDo6UnVudGltZTo6T2JqZWN0UHJldmlldz46OnJ1bnRpbWVDYXN0KHJlc3VsdE9iamVjdCk7
CisgICAgYXV0byByZXN1bHRPYmplY3QgPSByZXN1bHRWYWx1ZS0+YXNPYmplY3QoKTsKKyAgICBp
ZiAoIXJlc3VsdE9iamVjdCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4g
UHJvdG9jb2w6OkJpbmRpbmdUcmFpdHM8UHJvdG9jb2w6OlJ1bnRpbWU6Ok9iamVjdFByZXZpZXc+
OjpydW50aW1lQ2FzdChyZXN1bHRPYmplY3QucmVsZWFzZU5vbk51bGwoKSk7CiB9CiAKIHZvaWQg
SW5qZWN0ZWRTY3JpcHQ6OnNldEV2ZW50VmFsdWUoSlNDOjpKU1ZhbHVlIHZhbHVlKQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdC5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdC5oCmluZGV4IGNk
ZWU0NWYyZDZiMzM3N2YxZTA1MjNjZmU0MDFhZTI4YmNmMmRmNmYuLmQ2M2FlZjAyNTk5NjQ4ODQ2
YzY4MzYxNWNiNTZjNjQzYzM4OWIxYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL0luamVjdGVkU2NyaXB0LmgKQEAgLTU5LDIwICs1OSwyMCBAQCBwdWJsaWM6CiAg
ICAgICAgIGJvb2wgc2F2ZVJlc3VsdCB7IGZhbHNlIH07CiAgICAgICAgIFZlY3RvcjxKU0M6OkpT
VmFsdWU+IGFyZ3M7CiAgICAgfTsKLSAgICB2b2lkIGV4ZWN1dGUoRXJyb3JTdHJpbmcmLCBjb25z
dCBTdHJpbmcmIGZ1bmN0aW9uU3RyaW5nLCBFeGVjdXRlT3B0aW9ucyYmLCBSZWZQdHI8UHJvdG9j
b2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3VsdCwgT3B0aW9uYWw8Ym9vbD4mIHdhc1Ro
cm93biwgT3B0aW9uYWw8aW50PiYgc2F2ZWRSZXN1bHRJbmRleCk7CisgICAgdm9pZCBleGVjdXRl
KFByb3RvY29sOjpFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgZnVuY3Rpb25TdHJpbmcsIEV4
ZWN1dGVPcHRpb25zJiYsIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYg
cmVzdWx0LCBPcHRpb25hbDxib29sPiYgd2FzVGhyb3duLCBPcHRpb25hbDxpbnQ+JiBzYXZlZFJl
c3VsdEluZGV4KTsKIAotICAgIHZvaWQgZXZhbHVhdGUoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJp
bmcmIGV4cHJlc3Npb24sIGNvbnN0IFN0cmluZyYgb2JqZWN0R3JvdXAsIGJvb2wgaW5jbHVkZUNv
bW1hbmRMaW5lQVBJLCBib29sIHJldHVybkJ5VmFsdWUsIGJvb2wgZ2VuZXJhdGVQcmV2aWV3LCBi
b29sIHNhdmVSZXN1bHQsIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYg
cmVzdWx0LCBPcHRpb25hbDxib29sPiYgd2FzVGhyb3duLCBPcHRpb25hbDxpbnQ+JiBzYXZlZFJl
c3VsdEluZGV4KTsKKyAgICB2b2lkIGV2YWx1YXRlKFByb3RvY29sOjpFcnJvclN0cmluZyYsIGNv
bnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCwgYm9vbCBp
bmNsdWRlQ29tbWFuZExpbmVBUEksIGJvb2wgcmV0dXJuQnlWYWx1ZSwgYm9vbCBnZW5lcmF0ZVBy
ZXZpZXcsIGJvb2wgc2F2ZVJlc3VsdCwgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVP
YmplY3Q+JiByZXN1bHQsIE9wdGlvbmFsPGJvb2w+JiB3YXNUaHJvd24sIE9wdGlvbmFsPGludD4m
IHNhdmVkUmVzdWx0SW5kZXgpOwogICAgIHZvaWQgYXdhaXRQcm9taXNlKGNvbnN0IFN0cmluZyYg
cHJvbWlzZU9iamVjdElkLCBib29sIHJldHVybkJ5VmFsdWUsIGJvb2wgZ2VuZXJhdGVQcmV2aWV3
LCBib29sIHNhdmVSZXN1bHQsIEFzeW5jQ2FsbENhbGxiYWNrJiYpOwotICAgIHZvaWQgZXZhbHVh
dGVPbkNhbGxGcmFtZShFcnJvclN0cmluZyYsIEpTQzo6SlNWYWx1ZSBjYWxsRnJhbWVzLCBjb25z
dCBTdHJpbmcmIGNhbGxGcmFtZUlkLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIGNvbnN0IFN0
cmluZyYgb2JqZWN0R3JvdXAsIGJvb2wgaW5jbHVkZUNvbW1hbmRMaW5lQVBJLCBib29sIHJldHVy
bkJ5VmFsdWUsIGJvb2wgZ2VuZXJhdGVQcmV2aWV3LCBib29sIHNhdmVSZXN1bHQsIFJlZlB0cjxQ
cm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0LCBPcHRpb25hbDxib29sPiYg
d2FzVGhyb3duLCBPcHRpb25hbDxpbnQ+JiBzYXZlZFJlc3VsdEluZGV4KTsKLSAgICB2b2lkIGNh
bGxGdW5jdGlvbk9uKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBvYmplY3RJZCwgY29uc3Qg
U3RyaW5nJiBleHByZXNzaW9uLCBjb25zdCBTdHJpbmcmIGFyZ3VtZW50cywgYm9vbCByZXR1cm5C
eVZhbHVlLCBib29sIGdlbmVyYXRlUHJldmlldywgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpS
ZW1vdGVPYmplY3Q+JiByZXN1bHQsIE9wdGlvbmFsPGJvb2w+JiB3YXNUaHJvd24pOwotICAgIHZv
aWQgZ2V0RnVuY3Rpb25EZXRhaWxzKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBmdW5jdGlv
bklkLCBSZWZQdHI8UHJvdG9jb2w6OkRlYnVnZ2VyOjpGdW5jdGlvbkRldGFpbHM+JiByZXN1bHQp
OwotICAgIHZvaWQgZnVuY3Rpb25EZXRhaWxzKEVycm9yU3RyaW5nJiwgSlNDOjpKU1ZhbHVlLCBS
ZWZQdHI8UHJvdG9jb2w6OkRlYnVnZ2VyOjpGdW5jdGlvbkRldGFpbHM+JiByZXN1bHQpOwotICAg
IHZvaWQgZ2V0UHJldmlldyhFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgb2JqZWN0SWQsIFJl
ZlB0cjxQcm90b2NvbDo6UnVudGltZTo6T2JqZWN0UHJldmlldz4mIHJlc3VsdCk7Ci0gICAgdm9p
ZCBnZXRQcm9wZXJ0aWVzKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBvYmplY3RJZCwgYm9v
bCBvd25Qcm9wZXJ0aWVzLCBpbnQgZmV0Y2hTdGFydCwgaW50IGZldGNoQ291bnQsIGJvb2wgZ2Vu
ZXJhdGVQcmV2aWV3LCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UnVudGltZTo6UHJv
cGVydHlEZXNjcmlwdG9yPj4mIHJlc3VsdCk7Ci0gICAgdm9pZCBnZXREaXNwbGF5YWJsZVByb3Bl
cnRpZXMoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBpbnQgZmV0Y2hTdGFy
dCwgaW50IGZldGNoQ291bnQsIGJvb2wgZ2VuZXJhdGVQcmV2aWV3LCBSZWZQdHI8SlNPTjo6QXJy
YXlPZjxQcm90b2NvbDo6UnVudGltZTo6UHJvcGVydHlEZXNjcmlwdG9yPj4mIHJlc3VsdCk7Ci0g
ICAgdm9pZCBnZXRJbnRlcm5hbFByb3BlcnRpZXMoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcm
IG9iamVjdElkLCBib29sIGdlbmVyYXRlUHJldmlldywgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJv
dG9jb2w6OlJ1bnRpbWU6OkludGVybmFsUHJvcGVydHlEZXNjcmlwdG9yPj4mIHJlc3VsdCk7Ci0g
ICAgdm9pZCBnZXRDb2xsZWN0aW9uRW50cmllcyhFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYg
b2JqZWN0SWQsIGNvbnN0IFN0cmluZyYgb2JqZWN0R3JvdXAsIGludCBmZXRjaFN0YXJ0LCBpbnQg
ZmV0Y2hDb3VudCwgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OkNvbGxl
Y3Rpb25FbnRyeT4+JiBlbnRyaWVzKTsKLSAgICB2b2lkIHNhdmVSZXN1bHQoRXJyb3JTdHJpbmcm
LCBjb25zdCBTdHJpbmcmIGNhbGxBcmd1bWVudEpTT04sIE9wdGlvbmFsPGludD4mIHNhdmVkUmVz
dWx0SW5kZXgpOworICAgIHZvaWQgZXZhbHVhdGVPbkNhbGxGcmFtZShQcm90b2NvbDo6RXJyb3JT
dHJpbmcmLCBKU0M6OkpTVmFsdWUgY2FsbEZyYW1lcywgY29uc3QgU3RyaW5nJiBjYWxsRnJhbWVJ
ZCwgY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBjb25zdCBTdHJpbmcmIG9iamVjdEdyb3VwLCBi
b29sIGluY2x1ZGVDb21tYW5kTGluZUFQSSwgYm9vbCByZXR1cm5CeVZhbHVlLCBib29sIGdlbmVy
YXRlUHJldmlldywgYm9vbCBzYXZlUmVzdWx0LCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJl
bW90ZU9iamVjdD4mIHJlc3VsdCwgT3B0aW9uYWw8Ym9vbD4mIHdhc1Rocm93biwgT3B0aW9uYWw8
aW50PiYgc2F2ZWRSZXN1bHRJbmRleCk7CisgICAgdm9pZCBjYWxsRnVuY3Rpb25PbihQcm90b2Nv
bDo6RXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBjb25zdCBTdHJpbmcmIGV4
cHJlc3Npb24sIGNvbnN0IFN0cmluZyYgYXJndW1lbnRzLCBib29sIHJldHVybkJ5VmFsdWUsIGJv
b2wgZ2VuZXJhdGVQcmV2aWV3LCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVj
dD4mIHJlc3VsdCwgT3B0aW9uYWw8Ym9vbD4mIHdhc1Rocm93bik7CisgICAgdm9pZCBnZXRGdW5j
dGlvbkRldGFpbHMoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBmdW5jdGlv
bklkLCBSZWZQdHI8UHJvdG9jb2w6OkRlYnVnZ2VyOjpGdW5jdGlvbkRldGFpbHM+JiByZXN1bHQp
OworICAgIHZvaWQgZnVuY3Rpb25EZXRhaWxzKFByb3RvY29sOjpFcnJvclN0cmluZyYsIEpTQzo6
SlNWYWx1ZSwgUmVmUHRyPFByb3RvY29sOjpEZWJ1Z2dlcjo6RnVuY3Rpb25EZXRhaWxzPiYgcmVz
dWx0KTsKKyAgICB2b2lkIGdldFByZXZpZXcoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiwgY29uc3Qg
U3RyaW5nJiBvYmplY3RJZCwgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpPYmplY3RQcmV2aWV3
PiYgcmVzdWx0KTsKKyAgICB2b2lkIGdldFByb3BlcnRpZXMoUHJvdG9jb2w6OkVycm9yU3RyaW5n
JiwgY29uc3QgU3RyaW5nJiBvYmplY3RJZCwgYm9vbCBvd25Qcm9wZXJ0aWVzLCBpbnQgZmV0Y2hT
dGFydCwgaW50IGZldGNoQ291bnQsIGJvb2wgZ2VuZXJhdGVQcmV2aWV3LCBSZWZQdHI8SlNPTjo6
QXJyYXlPZjxQcm90b2NvbDo6UnVudGltZTo6UHJvcGVydHlEZXNjcmlwdG9yPj4mIHJlc3VsdCk7
CisgICAgdm9pZCBnZXREaXNwbGF5YWJsZVByb3BlcnRpZXMoUHJvdG9jb2w6OkVycm9yU3RyaW5n
JiwgY29uc3QgU3RyaW5nJiBvYmplY3RJZCwgaW50IGZldGNoU3RhcnQsIGludCBmZXRjaENvdW50
LCBib29sIGdlbmVyYXRlUHJldmlldywgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1
bnRpbWU6OlByb3BlcnR5RGVzY3JpcHRvcj4+JiByZXN1bHQpOworICAgIHZvaWQgZ2V0SW50ZXJu
YWxQcm9wZXJ0aWVzKFByb3RvY29sOjpFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgb2JqZWN0
SWQsIGJvb2wgZ2VuZXJhdGVQcmV2aWV3LCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6
UnVudGltZTo6SW50ZXJuYWxQcm9wZXJ0eURlc2NyaXB0b3I+PiYgcmVzdWx0KTsKKyAgICB2b2lk
IGdldENvbGxlY3Rpb25FbnRyaWVzKFByb3RvY29sOjpFcnJvclN0cmluZyYsIGNvbnN0IFN0cmlu
ZyYgb2JqZWN0SWQsIGNvbnN0IFN0cmluZyYgb2JqZWN0R3JvdXAsIGludCBmZXRjaFN0YXJ0LCBp
bnQgZmV0Y2hDb3VudCwgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OkNv
bGxlY3Rpb25FbnRyeT4+JiBlbnRyaWVzKTsKKyAgICB2b2lkIHNhdmVSZXN1bHQoUHJvdG9jb2w6
OkVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBjYWxsQXJndW1lbnRKU09OLCBPcHRpb25hbDxp
bnQ+JiBzYXZlZFJlc3VsdEluZGV4KTsKIAogICAgIFJlZjxKU09OOjpBcnJheU9mPFByb3RvY29s
OjpEZWJ1Z2dlcjo6Q2FsbEZyYW1lPj4gd3JhcENhbGxGcmFtZXMoSlNDOjpKU1ZhbHVlKSBjb25z
dDsKICAgICBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4gd3JhcE9iamVj
dChKU0M6OkpTVmFsdWUsIGNvbnN0IFN0cmluZyYgZ3JvdXBOYW1lLCBib29sIGdlbmVyYXRlUHJl
dmlldyA9IGZhbHNlKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRCYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRCYXNlLmNwcAppbmRleCA3NTY5ZjViNWQ5NzU4MDg4MjRm
NjRlYjJlZjBhNDA2YjY0YTRkOTM5Li4wOTAxNjZhOTFmYzY2YWQxY2RlNzE4MTk1M2NmNDc3M2Zm
NjZmMDhmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luamVj
dGVkU2NyaXB0QmFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9J
bmplY3RlZFNjcmlwdEJhc2UuY3BwCkBAIC0xMDAsNyArMTAwLDcgQEAgUmVmPEpTT046OlZhbHVl
PiBJbmplY3RlZFNjcmlwdEJhc2U6Om1ha2VDYWxsKERlcHJlY2F0ZWQ6OlNjcmlwdEZ1bmN0aW9u
Q2FsbCYgZnUKICAgICByZXR1cm4gcmVzdWx0SlNPTlZhbHVlLnJlbGVhc2VOb25OdWxsKCk7CiB9
CiAKLXZvaWQgSW5qZWN0ZWRTY3JpcHRCYXNlOjptYWtlRXZhbENhbGwoRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBEZXByZWNhdGVkOjpTY3JpcHRGdW5jdGlvbkNhbGwmIGZ1bmN0aW9uLCBSZWZQ
dHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIG91dF9yZXN1bHRPYmplY3QsIE9w
dGlvbmFsPGJvb2w+JiBvdXRfd2FzVGhyb3duLCBPcHRpb25hbDxpbnQ+JiBvdXRfc2F2ZWRSZXN1
bHRJbmRleCkKK3ZvaWQgSW5qZWN0ZWRTY3JpcHRCYXNlOjptYWtlRXZhbENhbGwoUHJvdG9jb2w6
OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgRGVwcmVjYXRlZDo6U2NyaXB0RnVuY3Rpb25DYWxs
JiBmdW5jdGlvbiwgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiBvdXRf
cmVzdWx0T2JqZWN0LCBPcHRpb25hbDxib29sPiYgb3V0X3dhc1Rocm93biwgT3B0aW9uYWw8aW50
PiYgb3V0X3NhdmVkUmVzdWx0SW5kZXgpCiB7CiAgICAgY2hlY2tDYWxsUmVzdWx0KGVycm9yU3Ry
aW5nLCBtYWtlQ2FsbChmdW5jdGlvbiksIG91dF9yZXN1bHRPYmplY3QsIG91dF93YXNUaHJvd24s
IG91dF9zYXZlZFJlc3VsdEluZGV4KTsKIH0KQEAgLTE0Myw3ICsxNDMsNyBAQCB2b2lkIEluamVj
dGVkU2NyaXB0QmFzZTo6bWFrZUFzeW5jQ2FsbChEZXByZWNhdGVkOjpTY3JpcHRGdW5jdGlvbkNh
bGwmIGZ1bmN0aW9uLAogICAgIH0KIH0KIAotdm9pZCBJbmplY3RlZFNjcmlwdEJhc2U6OmNoZWNr
Q2FsbFJlc3VsdChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIFJlZlB0cjxKU09OOjpWYWx1ZT4g
cmVzdWx0LCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIG91dF9yZXN1
bHRPYmplY3QsIE9wdGlvbmFsPGJvb2w+JiBvdXRfd2FzVGhyb3duLCBPcHRpb25hbDxpbnQ+JiBv
dXRfc2F2ZWRSZXN1bHRJbmRleCkKK3ZvaWQgSW5qZWN0ZWRTY3JpcHRCYXNlOjpjaGVja0NhbGxS
ZXN1bHQoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgUmVmUHRyPEpTT046OlZh
bHVlPiByZXN1bHQsIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYgb3V0
X3Jlc3VsdE9iamVjdCwgT3B0aW9uYWw8Ym9vbD4mIG91dF93YXNUaHJvd24sIE9wdGlvbmFsPGlu
dD4mIG91dF9zYXZlZFJlc3VsdEluZGV4KQogewogICAgIGlmICghcmVzdWx0KSB7CiAgICAgICAg
IGVycm9yU3RyaW5nID0gIkludGVybmFsIGVycm9yOiByZXN1bHQgdmFsdWUgaXMgZW1wdHkiX3M7
CkBAIC0xNTEsNDkgKzE1MSw0MiBAQCB2b2lkIEluamVjdGVkU2NyaXB0QmFzZTo6Y2hlY2tDYWxs
UmVzdWx0KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgUmVmUHRyPEpTT046OgogICAgIH0KIAog
ICAgIGlmIChyZXN1bHQtPnR5cGUoKSA9PSBKU09OOjpWYWx1ZTo6VHlwZTo6U3RyaW5nKSB7Ci0g
ICAgICAgIHJlc3VsdC0+YXNTdHJpbmcoZXJyb3JTdHJpbmcpOwotICAgICAgICBBU1NFUlQoZXJy
b3JTdHJpbmcubGVuZ3RoKCkpOworICAgICAgICBlcnJvclN0cmluZyA9IHJlc3VsdC0+YXNTdHJp
bmcoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+
IHJlc3VsdFR1cGxlOwotICAgIGlmICghcmVzdWx0LT5hc09iamVjdChyZXN1bHRUdXBsZSkpIHsK
KyAgICBhdXRvIHJlc3VsdFR1cGxlID0gcmVzdWx0LT5hc09iamVjdCgpOworICAgIGlmICghcmVz
dWx0VHVwbGUpIHsKICAgICAgICAgZXJyb3JTdHJpbmcgPSAiSW50ZXJuYWwgZXJyb3I6IHJlc3Vs
dCBpcyBub3QgYW4gT2JqZWN0Il9zOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgUmVm
UHRyPEpTT046Ok9iamVjdD4gcmVzdWx0T2JqZWN0OwotICAgIGlmICghcmVzdWx0VHVwbGUtPmdl
dE9iamVjdCgicmVzdWx0Il9zLCByZXN1bHRPYmplY3QpKSB7CisgICAgYXV0byByZXN1bHRPYmpl
Y3QgPSByZXN1bHRUdXBsZS0+Z2V0T2JqZWN0KCJyZXN1bHQiX3MpOworICAgIGlmICghcmVzdWx0
T2JqZWN0KSB7CiAgICAgICAgIGVycm9yU3RyaW5nID0gIkludGVybmFsIGVycm9yOiByZXN1bHQg
aXMgbm90IGEgcGFpciBvZiB2YWx1ZSBhbmQgd2FzVGhyb3duIGZsYWciX3M7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSAgICBib29sIHdhc1Rocm93biA9IGZhbHNlOwotICAgIGlmICghcmVz
dWx0VHVwbGUtPmdldEJvb2xlYW4oIndhc1Rocm93biJfcywgd2FzVGhyb3duKSkgeworICAgIG91
dF93YXNUaHJvd24gPSByZXN1bHRUdXBsZS0+Z2V0Qm9vbGVhbigid2FzVGhyb3duIl9zKTsKKyAg
ICBpZiAoIW91dF93YXNUaHJvd24pIHsKICAgICAgICAgZXJyb3JTdHJpbmcgPSAiSW50ZXJuYWwg
ZXJyb3I6IHJlc3VsdCBpcyBub3QgYSBwYWlyIG9mIHZhbHVlIGFuZCB3YXNUaHJvd24gZmxhZyJf
czsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG91dF9yZXN1bHRPYmplY3QgPSBCaW5k
aW5nVHJhaXRzPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+OjpydW50aW1lQ2FzdChy
ZXN1bHRPYmplY3QpOwotCi0gICAgaWYgKHdhc1Rocm93bikKLSAgICAgICAgb3V0X3dhc1Rocm93
biA9IHdhc1Rocm93bjsKLQotICAgIGludCBzYXZlZFJlc3VsdEluZGV4OwotICAgIGlmIChyZXN1
bHRUdXBsZS0+Z2V0SW50ZWdlcigic2F2ZWRSZXN1bHRJbmRleCJfcywgc2F2ZWRSZXN1bHRJbmRl
eCkpCi0gICAgICAgIG91dF9zYXZlZFJlc3VsdEluZGV4ID0gc2F2ZWRSZXN1bHRJbmRleDsKKyAg
ICBvdXRfcmVzdWx0T2JqZWN0ID0gUHJvdG9jb2w6OkJpbmRpbmdUcmFpdHM8UHJvdG9jb2w6OlJ1
bnRpbWU6OlJlbW90ZU9iamVjdD46OnJ1bnRpbWVDYXN0KHJlc3VsdE9iamVjdC5yZWxlYXNlTm9u
TnVsbCgpKTsKKyAgICBvdXRfc2F2ZWRSZXN1bHRJbmRleCA9IHJlc3VsdFR1cGxlLT5nZXRJbnRl
Z2VyKCJzYXZlZFJlc3VsdEluZGV4Il9zKTsKIH0KIAogdm9pZCBJbmplY3RlZFNjcmlwdEJhc2U6
OmNoZWNrQXN5bmNDYWxsUmVzdWx0KFJlZlB0cjxKU09OOjpWYWx1ZT4gcmVzdWx0LCBjb25zdCBB
c3luY0NhbGxDYWxsYmFjayYgY2FsbGJhY2spCiB7Ci0gICAgRXJyb3JTdHJpbmcgZXJyb3JTdHJp
bmc7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOwogICAgIFJlZlB0cjxQ
cm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiByZXN1bHRPYmplY3Q7CiAgICAgT3B0aW9u
YWw8Ym9vbD4gd2FzVGhyb3duOwogICAgIE9wdGlvbmFsPGludD4gc2F2ZWRSZXN1bHRJbmRleDsK
IAogICAgIGNoZWNrQ2FsbFJlc3VsdChlcnJvclN0cmluZywgcmVzdWx0LCByZXN1bHRPYmplY3Qs
IHdhc1Rocm93biwgc2F2ZWRSZXN1bHRJbmRleCk7CiAKLSAgICBjYWxsYmFjayhlcnJvclN0cmlu
ZywgV1RGTW92ZShyZXN1bHRPYmplY3QpLCB3YXNUaHJvd24sIHNhdmVkUmVzdWx0SW5kZXgpOwor
ICAgIGNhbGxiYWNrKGVycm9yU3RyaW5nLCBXVEZNb3ZlKHJlc3VsdE9iamVjdCksIFdURk1vdmUo
d2FzVGhyb3duKSwgV1RGTW92ZShzYXZlZFJlc3VsdEluZGV4KSk7CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIEluc3BlY3RvcgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9JbmplY3RlZFNjcmlwdEJhc2UuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
SW5qZWN0ZWRTY3JpcHRCYXNlLmgKaW5kZXggODEyM2YxZDY2ZTliMTNhZDRhZDBlY2IxYTNjYWQz
M2Y1OTc2ZDVkNy4uZjRlNmEwZmVlYTQxMWNkMDU4NTk4NGJkNzRhY2M0YjI0YWE4ZWQwZiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdEJh
c2UuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0
QmFzZS5oCkBAIC00Nyw4ICs0Nyw3IEBAIGNsYXNzIFNjcmlwdEZ1bmN0aW9uQ2FsbDsKIAogbmFt
ZXNwYWNlIEluc3BlY3RvciB7CiAKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotdHlwZWRl
ZiBXVEY6OkZ1bmN0aW9uPHZvaWQoRXJyb3JTdHJpbmcmLCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRp
bWU6OlJlbW90ZU9iamVjdD4mJiwgT3B0aW9uYWw8Ym9vbD4mLCBPcHRpb25hbDxpbnQ+Jik+IEFz
eW5jQ2FsbENhbGxiYWNrOwordXNpbmcgQXN5bmNDYWxsQ2FsbGJhY2sgPSBXVEY6OkZ1bmN0aW9u
PHZvaWQoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiwgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpS
ZW1vdGVPYmplY3Q+JiYsIE9wdGlvbmFsPGJvb2w+JiYsIE9wdGlvbmFsPGludD4mJik+OwogCiBj
bGFzcyBKU19FWFBPUlRfUFJJVkFURSBJbmplY3RlZFNjcmlwdEJhc2UgewogcHVibGljOgpAQCAt
NjksMTEgKzY4LDExIEBAIHByb3RlY3RlZDoKICAgICBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRP
YmplY3QmIGluamVjdGVkU2NyaXB0T2JqZWN0KCkgY29uc3Q7CiAgICAgRXhwZWN0ZWQ8SlNDOjpK
U1ZhbHVlLCBOYWtlZFB0cjxKU0M6OkV4Y2VwdGlvbj4+IGNhbGxGdW5jdGlvbldpdGhFdmFsRW5h
YmxlZChEZXByZWNhdGVkOjpTY3JpcHRGdW5jdGlvbkNhbGwmKSBjb25zdDsKICAgICBSZWY8SlNP
Tjo6VmFsdWU+IG1ha2VDYWxsKERlcHJlY2F0ZWQ6OlNjcmlwdEZ1bmN0aW9uQ2FsbCYpOwotICAg
IHZvaWQgbWFrZUV2YWxDYWxsKEVycm9yU3RyaW5nJiwgRGVwcmVjYXRlZDo6U2NyaXB0RnVuY3Rp
b25DYWxsJiwgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiByZXN1bHRP
YmplY3QsIE9wdGlvbmFsPGJvb2w+JiB3YXNUaHJvd24sIE9wdGlvbmFsPGludD4mIHNhdmVkUmVz
dWx0SW5kZXgpOworICAgIHZvaWQgbWFrZUV2YWxDYWxsKFByb3RvY29sOjpFcnJvclN0cmluZyYs
IERlcHJlY2F0ZWQ6OlNjcmlwdEZ1bmN0aW9uQ2FsbCYsIFJlZlB0cjxQcm90b2NvbDo6UnVudGlt
ZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0T2JqZWN0LCBPcHRpb25hbDxib29sPiYgd2FzVGhyb3du
LCBPcHRpb25hbDxpbnQ+JiBzYXZlZFJlc3VsdEluZGV4KTsKICAgICB2b2lkIG1ha2VBc3luY0Nh
bGwoRGVwcmVjYXRlZDo6U2NyaXB0RnVuY3Rpb25DYWxsJiwgQXN5bmNDYWxsQ2FsbGJhY2smJik7
CiAKIHByaXZhdGU6Ci0gICAgdm9pZCBjaGVja0NhbGxSZXN1bHQoRXJyb3JTdHJpbmcmLCBSZWZQ
dHI8SlNPTjo6VmFsdWU+IHJlc3VsdCwgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVP
YmplY3Q+JiByZXN1bHRPYmplY3QsIE9wdGlvbmFsPGJvb2w+JiB3YXNUaHJvd24sIE9wdGlvbmFs
PGludD4mIHNhdmVkUmVzdWx0SW5kZXgpOworICAgIHZvaWQgY2hlY2tDYWxsUmVzdWx0KFByb3Rv
Y29sOjpFcnJvclN0cmluZyYsIFJlZlB0cjxKU09OOjpWYWx1ZT4gcmVzdWx0LCBSZWZQdHI8UHJv
dG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3VsdE9iamVjdCwgT3B0aW9uYWw8Ym9v
bD4mIHdhc1Rocm93biwgT3B0aW9uYWw8aW50PiYgc2F2ZWRSZXN1bHRJbmRleCk7CiAgICAgdm9p
ZCBjaGVja0FzeW5jQ2FsbFJlc3VsdChSZWZQdHI8SlNPTjo6VmFsdWU+IHJlc3VsdCwgY29uc3Qg
QXN5bmNDYWxsQ2FsbGJhY2smKTsKIAogICAgIFN0cmluZyBtX25hbWU7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0TWFuYWdlci5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0TWFuYWdlci5j
cHAKaW5kZXggOTBhZjdhOGYzYTMzMDU2MTZiNDk1ZTViM2NhZGYwNTMzMTFlMjM1MC4uZmNjYzhl
ZjE5ODZkODg2ZDc1NjAwZjczNjEwMGE3ZWIzOTZiNTAwNSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdE1hbmFnZXIuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmNwcApA
QCAtMTAyLDE5ICsxMDIsMTkgQEAgaW50IEluamVjdGVkU2NyaXB0TWFuYWdlcjo6aW5qZWN0ZWRT
Y3JpcHRJZEZvcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogCiBJbmplY3RlZFNjcmlw
dCBJbmplY3RlZFNjcmlwdE1hbmFnZXI6OmluamVjdGVkU2NyaXB0Rm9yT2JqZWN0SWQoY29uc3Qg
U3RyaW5nJiBvYmplY3RJZCkKIHsKLSAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHBhcnNlZE9iamVj
dElkOwotICAgIGlmICghSlNPTjo6VmFsdWU6OnBhcnNlSlNPTihvYmplY3RJZCwgcGFyc2VkT2Jq
ZWN0SWQpKQorICAgIGF1dG8gcGFyc2VkT2JqZWN0SWQgPSBKU09OOjpWYWx1ZTo6cGFyc2VKU09O
KG9iamVjdElkKTsKKyAgICBpZiAoIXBhcnNlZE9iamVjdElkKQogICAgICAgICByZXR1cm4gSW5q
ZWN0ZWRTY3JpcHQoKTsKIAotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHJlc3VsdE9iamVjdDsK
LSAgICBpZiAoIXBhcnNlZE9iamVjdElkLT5hc09iamVjdChyZXN1bHRPYmplY3QpKQorICAgIGF1
dG8gcmVzdWx0T2JqZWN0ID0gcGFyc2VkT2JqZWN0SWQtPmFzT2JqZWN0KCk7CisgICAgaWYgKCFy
ZXN1bHRPYmplY3QpCiAgICAgICAgIHJldHVybiBJbmplY3RlZFNjcmlwdCgpOwogCi0gICAgbG9u
ZyBpbmplY3RlZFNjcmlwdElkID0gMDsKLSAgICBpZiAoIXJlc3VsdE9iamVjdC0+Z2V0SW50ZWdl
cigiaW5qZWN0ZWRTY3JpcHRJZCJfcywgaW5qZWN0ZWRTY3JpcHRJZCkpCisgICAgYXV0byBpbmpl
Y3RlZFNjcmlwdElkID0gcmVzdWx0T2JqZWN0LT5nZXRJbnRlZ2VyKCJpbmplY3RlZFNjcmlwdElk
Il9zKTsKKyAgICBpZiAoIWluamVjdGVkU2NyaXB0SWQpCiAgICAgICAgIHJldHVybiBJbmplY3Rl
ZFNjcmlwdCgpOwogCi0gICAgcmV0dXJuIG1faWRUb0luamVjdGVkU2NyaXB0LmdldChpbmplY3Rl
ZFNjcmlwdElkKTsKKyAgICByZXR1cm4gbV9pZFRvSW5qZWN0ZWRTY3JpcHQuZ2V0KCppbmplY3Rl
ZFNjcmlwdElkKTsKIH0KIAogdm9pZCBJbmplY3RlZFNjcmlwdE1hbmFnZXI6OnJlbGVhc2VPYmpl
Y3RHcm91cChjb25zdCBTdHJpbmcmIG9iamVjdEdyb3VwKQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
LmNwcAppbmRleCA2OTNlOGIyNWM3Mzc3ODM0MGU4Mzk0MDQ2Nzg2ZDkzMThhOGEwOTI0Li5kYmEx
N2Q0YTY1YTcwZDM1ODUxYzhjNTE5YWQxZWNiZDU3MTc1MmRkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyLmNwcApAQCAtNjgsNyArNjgsNyBAQCB2b2lkIEJhY2tlbmREaXNwYXRjaGVyOjpDYWxs
YmFja0Jhc2U6OnNlbmRGYWlsdXJlKGNvbnN0IEVycm9yU3RyaW5nJiBlcnJvcikKICAgICBtX2Jh
Y2tlbmREaXNwYXRjaGVyLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogfQogCi12b2lkIEJhY2tlbmRE
aXNwYXRjaGVyOjpDYWxsYmFja0Jhc2U6OnNlbmRTdWNjZXNzKFJlZlB0cjxKU09OOjpPYmplY3Q+
JiYgcGFydGlhbE1lc3NhZ2UpCit2b2lkIEJhY2tlbmREaXNwYXRjaGVyOjpDYWxsYmFja0Jhc2U6
OnNlbmRTdWNjZXNzKFJlZjxKU09OOjpPYmplY3Q+JiYgcGFydGlhbE1lc3NhZ2UpCiB7CiAgICAg
aWYgKG1fYWxyZWFkeVNlbnQpCiAgICAgICAgIHJldHVybjsKQEAgLTEwNyw3ICsxMDcsNyBAQCB2
b2lkIEJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCiAK
ICAgICBBU1NFUlQoIW1fcHJvdG9jb2xFcnJvcnMuc2l6ZSgpKTsKIAotICAgIGxvbmcgcmVxdWVz
dElkID0gMDsKKyAgICBpbnQgcmVxdWVzdElkID0gMDsKICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0
PiBtZXNzYWdlT2JqZWN0OwogCiAgICAgewpAQCAtMTE1LDQ2ICsxMTUsNTAgQEAgdm9pZCBCYWNr
ZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2goY29uc3QgU3RyaW5nJiBtZXNzYWdlKQogICAgICAgICAv
LyB0aGUgb3V0ZXIgcmVxdWVzdCdzIGlkIGp1c3QgYmVjYXVzZSB0aGUgaW5uZXIgcmVxdWVzdCBp
cyBib2d1cy4KICAgICAgICAgU2V0Rm9yU2NvcGU8T3B0aW9uYWw8bG9uZz4+IHNjb3BlZFJlcXVl
c3RJZChtX2N1cnJlbnRSZXF1ZXN0SWQsIFdURjo6bnVsbG9wdCk7CiAKLSAgICAgICAgUmVmUHRy
PEpTT046OlZhbHVlPiBwYXJzZWRNZXNzYWdlOwotICAgICAgICBpZiAoIUpTT046OlZhbHVlOjpw
YXJzZUpTT04obWVzc2FnZSwgcGFyc2VkTWVzc2FnZSkpIHsKKyAgICAgICAgYXV0byBwYXJzZWRN
ZXNzYWdlID0gSlNPTjo6VmFsdWU6OnBhcnNlSlNPTihtZXNzYWdlKTsKKyAgICAgICAgaWYgKCFw
YXJzZWRNZXNzYWdlKSB7CiAgICAgICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKFBhcnNlRXJy
b3IsICJNZXNzYWdlIG11c3QgYmUgaW4gSlNPTiBmb3JtYXQiX3MpOwogICAgICAgICAgICAgc2Vu
ZFBlbmRpbmdFcnJvcnMoKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAg
ICAgIGlmICghcGFyc2VkTWVzc2FnZS0+YXNPYmplY3QobWVzc2FnZU9iamVjdCkpIHsKKyAgICAg
ICAgbWVzc2FnZU9iamVjdCA9IHBhcnNlZE1lc3NhZ2UtPmFzT2JqZWN0KCk7CisgICAgICAgIGlm
ICghbWVzc2FnZU9iamVjdCkgewogICAgICAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihJbnZh
bGlkUmVxdWVzdCwgIk1lc3NhZ2UgbXVzdCBiZSBhIEpTT05pZmllZCBvYmplY3QiX3MpOwogICAg
ICAgICAgICAgc2VuZFBlbmRpbmdFcnJvcnMoKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQogCi0gICAgICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gcmVxdWVzdElkVmFsdWU7Ci0gICAg
ICAgIGlmICghbWVzc2FnZU9iamVjdC0+Z2V0VmFsdWUoImlkIl9zLCByZXF1ZXN0SWRWYWx1ZSkp
IHsKKyAgICAgICAgYXV0byByZXF1ZXN0SWRWYWx1ZSA9IG1lc3NhZ2VPYmplY3QtPmdldFZhbHVl
KCJpZCJfcyk7CisgICAgICAgIGlmICghcmVxdWVzdElkVmFsdWUpIHsKICAgICAgICAgICAgIHJl
cG9ydFByb3RvY29sRXJyb3IoSW52YWxpZFJlcXVlc3QsICInaWQnIHByb3BlcnR5IHdhcyBub3Qg
Zm91bmQiX3MpOwogICAgICAgICAgICAgc2VuZFBlbmRpbmdFcnJvcnMoKTsKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIGlmICghcmVxdWVzdElkVmFsdWUtPmFzSW50
ZWdlcihyZXF1ZXN0SWQpKSB7CisgICAgICAgIGF1dG8gcmVxdWVzdElkSW50ID0gcmVxdWVzdElk
VmFsdWUtPmFzSW50ZWdlcigpOworICAgICAgICBpZiAoIXJlcXVlc3RJZEludCkgewogICAgICAg
ICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihJbnZhbGlkUmVxdWVzdCwgIlRoZSB0eXBlIG9mICdp
ZCcgcHJvcGVydHkgbXVzdCBiZSBpbnRlZ2VyIl9zKTsKICAgICAgICAgICAgIHNlbmRQZW5kaW5n
RXJyb3JzKCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KKworICAgICAgICByZXF1
ZXN0SWQgPSAqcmVxdWVzdElkSW50OwogICAgIH0KIAogICAgIHsKICAgICAgICAgLy8gV2UgY291
bGQgYmUgY2FsbGVkIHJlLWVudHJhbnRseSBmcm9tIGEgbmVzdGVkIHJ1biBsb29wLCBzbyByZXN0
b3JlIHRoZSBwcmV2aW91cyBpZC4KICAgICAgICAgU2V0Rm9yU2NvcGU8T3B0aW9uYWw8bG9uZz4+
IHNjb3BlZFJlcXVlc3RJZChtX2N1cnJlbnRSZXF1ZXN0SWQsIHJlcXVlc3RJZCk7CiAKLSAgICAg
ICAgUmVmUHRyPEpTT046OlZhbHVlPiBtZXRob2RWYWx1ZTsKLSAgICAgICAgaWYgKCFtZXNzYWdl
T2JqZWN0LT5nZXRWYWx1ZSgibWV0aG9kIl9zLCBtZXRob2RWYWx1ZSkpIHsKKyAgICAgICAgYXV0
byBtZXRob2RWYWx1ZSA9IG1lc3NhZ2VPYmplY3QtPmdldFZhbHVlKCJtZXRob2QiX3MpOworICAg
ICAgICBpZiAoIW1ldGhvZFZhbHVlKSB7CiAgICAgICAgICAgICByZXBvcnRQcm90b2NvbEVycm9y
KEludmFsaWRSZXF1ZXN0LCAiJ21ldGhvZCcgcHJvcGVydHkgd2Fzbid0IGZvdW5kIl9zKTsKICAg
ICAgICAgICAgIHNlbmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KIAotICAgICAgICBTdHJpbmcgbWV0aG9kU3RyaW5nOwotICAgICAgICBpZiAoIW1ldGhv
ZFZhbHVlLT5hc1N0cmluZyhtZXRob2RTdHJpbmcpKSB7CisgICAgICAgIGF1dG8gbWV0aG9kU3Ry
aW5nID0gbWV0aG9kVmFsdWUtPmFzU3RyaW5nKCk7CisgICAgICAgIGlmICghbWV0aG9kU3RyaW5n
KSB7CiAgICAgICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKEludmFsaWRSZXF1ZXN0LCAiVGhl
IHR5cGUgb2YgJ21ldGhvZCcgcHJvcGVydHkgbXVzdCBiZSBzdHJpbmciX3MpOwogICAgICAgICAg
ICAgc2VuZFBlbmRpbmdFcnJvcnMoKTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTE4NCwxMiAr
MTg4LDEyIEBAIHZvaWQgQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGNvbnN0IFN0cmluZyYg
bWVzc2FnZSkKIH0KIAogLy8gRklYTUU6IHJlbW92ZSB0aGlzIGZ1bmN0aW9uIHdoZW4gbGVnYWN5
IEluc3BlY3Rvck9iamVjdCBzeW1ib2xzIGFyZSBubyBsb25nZXIgbmVlZGVkIDxodHRwOi8vd2Vi
a2l0Lm9yZy9iLzE3OTg0Nz4uCi12b2lkIEJhY2tlbmREaXNwYXRjaGVyOjpzZW5kUmVzcG9uc2Uo
bG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcmVzdWx0KQordm9pZCBCYWNr
ZW5kRGlzcGF0Y2hlcjo6c2VuZFJlc3BvbnNlKGxvbmcgcmVxdWVzdElkLCBSZWY8SlNPTjo6T2Jq
ZWN0PiYmIHJlc3VsdCkKIHsKICAgICBzZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJl
c3VsdCksIGZhbHNlKTsKIH0KIAotdm9pZCBCYWNrZW5kRGlzcGF0Y2hlcjo6c2VuZFJlc3BvbnNl
KGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHJlc3VsdCwgYm9vbCkKK3Zv
aWQgQmFja2VuZERpc3BhdGNoZXI6OnNlbmRSZXNwb25zZShsb25nIHJlcXVlc3RJZCwgUmVmPEpT
T046Ok9iamVjdD4mJiByZXN1bHQsIGJvb2wpCiB7CiAgICAgQVNTRVJUKCFtX3Byb3RvY29sRXJy
b3JzLnNpemUoKSk7CiAKQEAgLTI3MCw3NCArMjc0LDY0IEBAIHZvaWQgQmFja2VuZERpc3BhdGNo
ZXI6OnJlcG9ydFByb3RvY29sRXJyb3IoT3B0aW9uYWw8bG9uZz4gcmVsYXRlZFJlcXVlc3RJZCwg
Q29tCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1UIEJhY2tlbmREaXNwYXRjaGVyOjpnZXRQ
cm9wZXJ0eVZhbHVlKEpTT046Ok9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJv
b2wqIG91dF9vcHRpb25hbFZhbHVlRm91bmQsIFQgZGVmYXVsdFZhbHVlLCBzdGQ6OmZ1bmN0aW9u
PGJvb2woSlNPTjo6VmFsdWUmLCBUJik+IGFzTWV0aG9kLCBjb25zdCBjaGFyKiB0eXBlTmFtZSkK
K1QgQmFja2VuZERpc3BhdGNoZXI6OmdldFByb3BlcnR5VmFsdWUoSlNPTjo6T2JqZWN0KiBvYmpl
Y3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCByZXF1aXJlZCwgc3RkOjpmdW5jdGlvbjxUKEpT
T046OlZhbHVlJik+IGNvbnZlcnRlciwgY29uc3QgY2hhciogdHlwZU5hbWUpCiB7Ci0gICAgVCBy
ZXN1bHQoZGVmYXVsdFZhbHVlKTsKLSAgICAvLyBvdXRfb3B0aW9uYWxWYWx1ZUZvdW5kIHNpZ25h
bHMgdG8gdGhlIGNhbGxlciB3aGV0aGVyIGFuIG9wdGlvbmFsIHByb3BlcnR5IHdhcyBmb3VuZC4K
LSAgICAvLyBpZiBvdXRfb3B0aW9uYWxWYWx1ZUZvdW5kID09IG51bGxwdHIsIHRoZW4gdGhpcyBp
cyBhIHJlcXVpcmVkIHByb3BlcnR5LgotICAgIGlmIChvdXRfb3B0aW9uYWxWYWx1ZUZvdW5kKQot
ICAgICAgICAqb3V0X29wdGlvbmFsVmFsdWVGb3VuZCA9IGZhbHNlOworICAgIFQgcmVzdWx0Owog
CiAgICAgaWYgKCFvYmplY3QpIHsKLSAgICAgICAgaWYgKCFvdXRfb3B0aW9uYWxWYWx1ZUZvdW5k
KQorICAgICAgICBpZiAocmVxdWlyZWQpCiAgICAgICAgICAgICByZXBvcnRQcm90b2NvbEVycm9y
KEJhY2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCBtYWtlU3RyaW5nKCIncGFyYW1zJyBv
YmplY3QgbXVzdCBjb250YWluIHJlcXVpcmVkIHBhcmFtZXRlciAnIiwgbmFtZSwgIicgd2l0aCB0
eXBlICciLCB0eXBlTmFtZSwgIicuIikpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0K
IAogICAgIGF1dG8gZmluZFJlc3VsdCA9IG9iamVjdC0+ZmluZChuYW1lKTsKICAgICBpZiAoZmlu
ZFJlc3VsdCA9PSBvYmplY3QtPmVuZCgpKSB7Ci0gICAgICAgIGlmICghb3V0X29wdGlvbmFsVmFs
dWVGb3VuZCkKKyAgICAgICAgaWYgKHJlcXVpcmVkKQogICAgICAgICAgICAgcmVwb3J0UHJvdG9j
b2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFtcywgbWFrZVN0cmluZygiUGFy
YW1ldGVyICciLCBuYW1lLCAiJyB3aXRoIHR5cGUgJyIsIHR5cGVOYW1lLCAiJyB3YXMgbm90IGZv
dW5kLiIpKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKLSAgICBpZiAoIWFzTWV0
aG9kKCpmaW5kUmVzdWx0LT52YWx1ZSwgcmVzdWx0KSkgewotICAgICAgICByZXBvcnRQcm90b2Nv
bEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCBtYWtlU3RyaW5nKCJQYXJh
bWV0ZXIgJyIsIG5hbWUsICInIGhhcyB3cm9uZyB0eXBlLiBJdCBtdXN0IGJlICciLCB0eXBlTmFt
ZSwgIicuIikpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KKyAgICByZXN1bHQgPSBj
b252ZXJ0ZXIoZmluZFJlc3VsdC0+dmFsdWUpOwogCi0gICAgaWYgKG91dF9vcHRpb25hbFZhbHVl
Rm91bmQpCi0gICAgICAgICpvdXRfb3B0aW9uYWxWYWx1ZUZvdW5kID0gdHJ1ZTsKKyAgICBpZiAo
IXJlc3VsdCkKKyAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6
SW52YWxpZFBhcmFtcywgbWFrZVN0cmluZygiUGFyYW1ldGVyICciLCBuYW1lLCAiJyBoYXMgd3Jv
bmcgdHlwZS4gSXQgbXVzdCBiZSAnIiwgdHlwZU5hbWUsICInLiIpKTsKIAogICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKLXN0YXRpYyBib29sIGNhc3RUb0ludGVnZXIoSlNPTjo6VmFsdWUmIHZhbHVl
LCBpbnQmIHJlc3VsdCkgeyByZXR1cm4gdmFsdWUuYXNJbnRlZ2VyKHJlc3VsdCk7IH0KLXN0YXRp
YyBib29sIGNhc3RUb051bWJlcihKU09OOjpWYWx1ZSYgdmFsdWUsIGRvdWJsZSYgcmVzdWx0KSB7
IHJldHVybiB2YWx1ZS5hc0RvdWJsZShyZXN1bHQpOyB9Ci0KLWludCBCYWNrZW5kRGlzcGF0Y2hl
cjo6Z2V0SW50ZWdlcihKU09OOjpPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBi
b29sKiB2YWx1ZUZvdW5kKQorT3B0aW9uYWw8Ym9vbD4gQmFja2VuZERpc3BhdGNoZXI6OmdldEJv
b2xlYW4oSlNPTjo6T2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCByZXF1
aXJlZCkKIHsKLSAgICByZXR1cm4gZ2V0UHJvcGVydHlWYWx1ZTxpbnQ+KG9iamVjdCwgbmFtZSwg
dmFsdWVGb3VuZCwgMCwgJmNhc3RUb0ludGVnZXIsICJJbnRlZ2VyIik7CisgICAgcmV0dXJuIGdl
dFByb3BlcnR5VmFsdWU8T3B0aW9uYWw8Ym9vbD4+KG9iamVjdCwgbmFtZSwgcmVxdWlyZWQsICZK
U09OOjpWYWx1ZTo6YXNCb29sZWFuLCAiQm9vbGVhbiIpOwogfQogCi1kb3VibGUgQmFja2VuZERp
c3BhdGNoZXI6OmdldERvdWJsZShKU09OOjpPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBu
YW1lLCBib29sKiB2YWx1ZUZvdW5kKQorT3B0aW9uYWw8aW50PiBCYWNrZW5kRGlzcGF0Y2hlcjo6
Z2V0SW50ZWdlcihKU09OOjpPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29s
IHJlcXVpcmVkKQogewotICAgIHJldHVybiBnZXRQcm9wZXJ0eVZhbHVlPGRvdWJsZT4ob2JqZWN0
LCBuYW1lLCB2YWx1ZUZvdW5kLCAwLCAmY2FzdFRvTnVtYmVyLCAiTnVtYmVyIik7CisgICAgcmV0
dXJuIGdldFByb3BlcnR5VmFsdWU8T3B0aW9uYWw8aW50Pj4ob2JqZWN0LCBuYW1lLCByZXF1aXJl
ZCwgJkpTT046OlZhbHVlOjphc0ludGVnZXIsICJJbnRlZ2VyIik7CiB9CiAKLVN0cmluZyBCYWNr
ZW5kRGlzcGF0Y2hlcjo6Z2V0U3RyaW5nKEpTT046Ok9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJp
bmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQpCitPcHRpb25hbDxkb3VibGU+IEJhY2tlbmREaXNw
YXRjaGVyOjpnZXREb3VibGUoSlNPTjo6T2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFt
ZSwgYm9vbCByZXF1aXJlZCkKIHsKLSAgICByZXR1cm4gZ2V0UHJvcGVydHlWYWx1ZTxTdHJpbmc+
KG9iamVjdCwgbmFtZSwgdmFsdWVGb3VuZCwgIiIsICZKU09OOjpWYWx1ZTo6YXNTdHJpbmcsICJT
dHJpbmciKTsKKyAgICByZXR1cm4gZ2V0UHJvcGVydHlWYWx1ZTxPcHRpb25hbDxkb3VibGU+Pihv
YmplY3QsIG5hbWUsIHJlcXVpcmVkLCAmSlNPTjo6VmFsdWU6OmFzRG91YmxlLCAiTnVtYmVyIik7
CiB9CiAKLWJvb2wgQmFja2VuZERpc3BhdGNoZXI6OmdldEJvb2xlYW4oSlNPTjo6T2JqZWN0KiBv
YmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCkKK1N0cmluZyBCYWNr
ZW5kRGlzcGF0Y2hlcjo6Z2V0U3RyaW5nKEpTT046Ok9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJp
bmcmIG5hbWUsIGJvb2wgcmVxdWlyZWQpCiB7Ci0gICAgcmV0dXJuIGdldFByb3BlcnR5VmFsdWU8
Ym9vbD4ob2JqZWN0LCBuYW1lLCB2YWx1ZUZvdW5kLCBmYWxzZSwgJkpTT046OlZhbHVlOjphc0Jv
b2xlYW4sICJCb29sZWFuIik7CisgICAgcmV0dXJuIGdldFByb3BlcnR5VmFsdWU8U3RyaW5nPihv
YmplY3QsIG5hbWUsIHJlcXVpcmVkLCAmSlNPTjo6VmFsdWU6OmFzU3RyaW5nLCAiU3RyaW5nIik7
CiB9CiAKLVJlZlB0cjxKU09OOjpPYmplY3Q+IEJhY2tlbmREaXNwYXRjaGVyOjpnZXRPYmplY3Qo
SlNPTjo6T2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3Vu
ZCkKK1JlZlB0cjxKU09OOjpWYWx1ZT4gQmFja2VuZERpc3BhdGNoZXI6OmdldFZhbHVlKEpTT046
Ok9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wgcmVxdWlyZWQpCiB7Ci0g
ICAgcmV0dXJuIGdldFByb3BlcnR5VmFsdWU8UmVmUHRyPEpTT046Ok9iamVjdD4+KG9iamVjdCwg
bmFtZSwgdmFsdWVGb3VuZCwgbnVsbHB0ciwgJkpTT046OlZhbHVlOjphc09iamVjdCwgIk9iamVj
dCIpOworICAgIHJldHVybiBnZXRQcm9wZXJ0eVZhbHVlPFJlZlB0cjxKU09OOjpWYWx1ZT4+KG9i
amVjdCwgbmFtZSwgcmVxdWlyZWQsICZKU09OOjpWYWx1ZTo6YXNWYWx1ZSwgIlZhbHVlIik7CiB9
CiAKLVJlZlB0cjxKU09OOjpBcnJheT4gQmFja2VuZERpc3BhdGNoZXI6OmdldEFycmF5KEpTT046
Ok9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQpCitS
ZWZQdHI8SlNPTjo6T2JqZWN0PiBCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0T2JqZWN0KEpTT046Ok9i
amVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wgcmVxdWlyZWQpCiB7Ci0gICAg
cmV0dXJuIGdldFByb3BlcnR5VmFsdWU8UmVmUHRyPEpTT046OkFycmF5Pj4ob2JqZWN0LCBuYW1l
LCB2YWx1ZUZvdW5kLCBudWxscHRyLCAmSlNPTjo6VmFsdWU6OmFzQXJyYXksICJBcnJheSIpOwor
ICAgIHJldHVybiBnZXRQcm9wZXJ0eVZhbHVlPFJlZlB0cjxKU09OOjpPYmplY3Q+PihvYmplY3Qs
IG5hbWUsIHJlcXVpcmVkLCAmSlNPTjo6VmFsdWU6OmFzT2JqZWN0LCAiT2JqZWN0Iik7CiB9CiAK
LVJlZlB0cjxKU09OOjpWYWx1ZT4gQmFja2VuZERpc3BhdGNoZXI6OmdldFZhbHVlKEpTT046Ok9i
amVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQpCitSZWZQ
dHI8SlNPTjo6QXJyYXk+IEJhY2tlbmREaXNwYXRjaGVyOjpnZXRBcnJheShKU09OOjpPYmplY3Qq
IG9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sIHJlcXVpcmVkKQogewotICAgIHJldHVy
biBnZXRQcm9wZXJ0eVZhbHVlPFJlZlB0cjxKU09OOjpWYWx1ZT4+KG9iamVjdCwgbmFtZSwgdmFs
dWVGb3VuZCwgbnVsbHB0ciwgJkpTT046OlZhbHVlOjphc1ZhbHVlLCAiVmFsdWUiKTsKKyAgICBy
ZXR1cm4gZ2V0UHJvcGVydHlWYWx1ZTxSZWZQdHI8SlNPTjo6QXJyYXk+PihvYmplY3QsIG5hbWUs
IHJlcXVpcmVkLCAmSlNPTjo6VmFsdWU6OmFzQXJyYXksICJBcnJheSIpOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaAppbmRleCA5NWQ5ZDgxMTg4
ZTczNWU4ZjFiNzBjYzBkZWVlMjY4MmNiNjcxNGYwLi4wMmM5NmQ3MjYzOGMyMjJmMDMwZDE0OTFj
YzliOTI2MmIwOGJlY2JhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oCkBAIC0yOSw4ICsyOSwx
MCBAQAogI2luY2x1ZGUgIkluc3BlY3RvckZyb250ZW5kUm91dGVyLmgiCiAjaW5jbHVkZSAiSW5z
cGVjdG9yUHJvdG9jb2xUeXBlcy5oIgogI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CisjaW5jbHVkZSA8
d3RmL0Z1bmN0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3Rm
L1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewpAQCAtNTksNyArNjEsNyBA
QCBwdWJsaWM6CiAgICAgICAgIGJvb2wgaXNBY3RpdmUoKSBjb25zdDsKICAgICAgICAgdm9pZCBk
aXNhYmxlKCkgeyBtX2FscmVhZHlTZW50ID0gdHJ1ZTsgfQogCi0gICAgICAgIHZvaWQgc2VuZFN1
Y2Nlc3MoUmVmUHRyPEpTT046Ok9iamVjdD4mJik7CisgICAgICAgIHZvaWQgc2VuZFN1Y2Nlc3Mo
UmVmPEpTT046Ok9iamVjdD4mJik7CiAgICAgICAgIHZvaWQgc2VuZEZhaWx1cmUoY29uc3QgRXJy
b3JTdHJpbmcmKTsKIAogICAgIHByaXZhdGU6CkBAIC04NywyOCArODksMjcgQEAgcHVibGljOgog
ICAgIC8vIE5vdGUgdGhhdCAndW51c2VkJyBpcyBhIHdvcmthcm91bmQgc28gdGhlIGNvbXBpbGVy
IGNhbiBwaWNrIHRoZSByaWdodCBzZW5kUmVzcG9uc2UgYmFzZWQgb24gYXJpdHkuCiAgICAgLy8g
V2hlbiA8aHR0cDovL3dlYmtpdC5vcmcvYi8xNzk4NDc+IGlzIGZpeGVkIG9yIHRoaXMgY2xhc3Mg
aXMgcmVuYW1lZCBmb3IgdGhlIEpTT046Ok9iamVjdCBjYXNlLAogICAgIC8vIHRoZW4gdGhpcyBh
bHRlcm5hdGUgbWV0aG9kIHdpdGggYSBkdW1teSBwYXJhbWV0ZXIgY2FuIGJlIHJlbW92ZWQgaW4g
ZmF2b3Igb2YgdGhlIG9uZSB3aXRob3V0IGl0LgotICAgIHZvaWQgc2VuZFJlc3BvbnNlKGxvbmcg
cmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHJlc3VsdCwgYm9vbCB1bnVzZWQpOwot
ICAgIHZvaWQgc2VuZFJlc3BvbnNlKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0
PiYmIHJlc3VsdCk7CisgICAgdm9pZCBzZW5kUmVzcG9uc2UobG9uZyByZXF1ZXN0SWQsIFJlZjxK
U09OOjpPYmplY3Q+JiYgcmVzdWx0LCBib29sIHVudXNlZCk7CisgICAgdm9pZCBzZW5kUmVzcG9u
c2UobG9uZyByZXF1ZXN0SWQsIFJlZjxKU09OOjpPYmplY3Q+JiYgcmVzdWx0KTsKICAgICB2b2lk
IHNlbmRQZW5kaW5nRXJyb3JzKCk7CiAKICAgICB2b2lkIHJlcG9ydFByb3RvY29sRXJyb3IoQ29t
bW9uRXJyb3JDb2RlLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSk7CiAgICAgdm9pZCByZXBv
cnRQcm90b2NvbEVycm9yKE9wdGlvbmFsPGxvbmc+IHJlbGF0ZWRSZXF1ZXN0SWQsIENvbW1vbkVy
cm9yQ29kZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UpOwogCi0gICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVD4KLSAgICBXVEZfSU5URVJOQUwKLSAgICBUIGdldFByb3BlcnR5VmFsdWUoSlNPTjo6
T2JqZWN0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiBvdXRfb3B0aW9uYWxWYWx1ZUZvdW5k
LCBUIGRlZmF1bHRWYWx1ZSwgc3RkOjpmdW5jdGlvbjxib29sKEpTT046OlZhbHVlJiwgVCYpPiwg
Y29uc3QgY2hhciogdHlwZU5hbWUpOwotCi0gICAgaW50IGdldEludGVnZXIoSlNPTjo6T2JqZWN0
KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kKTsKLSAgICBkb3VibGUgZ2V0
RG91YmxlKEpTT046Ok9iamVjdCosIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3Vu
ZCk7Ci0gICAgU3RyaW5nIGdldFN0cmluZyhKU09OOjpPYmplY3QqLCBjb25zdCBTdHJpbmcmIG5h
bWUsIGJvb2wqIHZhbHVlRm91bmQpOwotICAgIGJvb2wgZ2V0Qm9vbGVhbihKU09OOjpPYmplY3Qq
LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQpOwotICAgIFJlZlB0cjxKU09O
OjpWYWx1ZT4gZ2V0VmFsdWUoSlNPTjo6T2JqZWN0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29s
KiB2YWx1ZUZvdW5kKTsKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBnZXRPYmplY3QoSlNPTjo6
T2JqZWN0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kKTsKLSAgICBSZWZQ
dHI8SlNPTjo6QXJyYXk+IGdldEFycmF5KEpTT046Ok9iamVjdCosIGNvbnN0IFN0cmluZyYgbmFt
ZSwgYm9vbCogdmFsdWVGb3VuZCk7CisgICAgT3B0aW9uYWw8Ym9vbD4gZ2V0Qm9vbGVhbihKU09O
OjpPYmplY3QqLCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wgcmVxdWlyZWQpOworICAgIE9wdGlv
bmFsPGludD4gZ2V0SW50ZWdlcihKU09OOjpPYmplY3QqLCBjb25zdCBTdHJpbmcmIG5hbWUsIGJv
b2wgcmVxdWlyZWQpOworICAgIE9wdGlvbmFsPGRvdWJsZT4gZ2V0RG91YmxlKEpTT046Ok9iamVj
dCosIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCByZXF1aXJlZCk7CisgICAgU3RyaW5nIGdldFN0
cmluZyhKU09OOjpPYmplY3QqLCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wgcmVxdWlyZWQpOwor
ICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gZ2V0VmFsdWUoSlNPTjo6T2JqZWN0KiwgY29uc3QgU3Ry
aW5nJiBuYW1lLCBib29sIHJlcXVpcmVkKTsKKyAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBnZXRP
YmplY3QoSlNPTjo6T2JqZWN0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sIHJlcXVpcmVkKTsK
KyAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IGdldEFycmF5KEpTT046Ok9iamVjdCosIGNvbnN0IFN0
cmluZyYgbmFtZSwgYm9vbCByZXF1aXJlZCk7CiAKIHByaXZhdGU6CiAgICAgQmFja2VuZERpc3Bh
dGNoZXIoUmVmPEZyb250ZW5kUm91dGVyPiYmKTsKIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
CisgICAgVCBnZXRQcm9wZXJ0eVZhbHVlKEpTT046Ok9iamVjdCosIGNvbnN0IFN0cmluZyYgbmFt
ZSwgYm9vbCByZXF1aXJlZCwgc3RkOjpmdW5jdGlvbjxUKEpTT046OlZhbHVlJik+IGNvbnZlcnRl
ciwgY29uc3QgY2hhciogdHlwZU5hbWUpOworCiAgICAgUmVmPEZyb250ZW5kUm91dGVyPiBtX2Zy
b250ZW5kUm91dGVyOwogICAgIEhhc2hNYXA8U3RyaW5nLCBTdXBwbGVtZW50YWxCYWNrZW5kRGlz
cGF0Y2hlcio+IG1fZGlzcGF0Y2hlcnM7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmgKaW5kZXggZDcwMTBhNWM2
MmU4NjMzYTRkZDAxYjJjMDA2MDViYWFjYzljOGM3OS4uNTg3N2UwZDc0MTA4MmY3MTFhNWZmZWQ0
MzVjZWZjMGYyMTMxMzM1ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmgKQEAgLTI3LDEyICsyNywxOSBAQAog
I3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0
Zi9FeHBlY3RlZC5oPgogI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCiBuYW1lc3BhY2Ug
UHJvdG9jb2wgewogCit1c2luZyBFcnJvclN0cmluZyA9IFN0cmluZzsKKwordGVtcGxhdGUgPHR5
cGVuYW1lIFQ+Cit1c2luZyBFcnJvclN0cmluZ09yID0gRXhwZWN0ZWQ8VCwgRXJyb3JTdHJpbmc+
OworCiB0ZW1wbGF0ZTx0eXBlbmFtZT4gc3RydWN0IEJpbmRpbmdUcmFpdHM7CiAKIHRlbXBsYXRl
PEpTT046OlZhbHVlOjpUeXBlIHR5cGU+IHN0cnVjdCBQcmltaXRpdmVCaW5kaW5nVHJhaXRzIHsK
QEAgLTQ0LDI5ICs1MSwyMyBAQCB0ZW1wbGF0ZTxKU09OOjpWYWx1ZTo6VHlwZSB0eXBlPiBzdHJ1
Y3QgUHJpbWl0aXZlQmluZGluZ1RyYWl0cyB7CiB9OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBz
dHJ1Y3QgQmluZGluZ1RyYWl0czxKU09OOjpBcnJheU9mPFQ+PiB7Ci0gICAgc3RhdGljIFJlZlB0
cjxKU09OOjpBcnJheU9mPFQ+PiBydW50aW1lQ2FzdChSZWZQdHI8SlNPTjo6VmFsdWU+JiYgdmFs
dWUpCisgICAgc3RhdGljIFJlZjxKU09OOjpBcnJheU9mPFQ+PiBydW50aW1lQ2FzdChSZWY8SlNP
Tjo6VmFsdWU+JiYgdmFsdWUpCiAgICAgewotICAgICAgICBBU1NFUlRfQVJHKHZhbHVlLCB2YWx1
ZSk7Ci0gICAgICAgIFJlZlB0cjxKU09OOjpBcnJheT4gYXJyYXk7Ci0gICAgICAgIGJvb2wgY2Fz
dFN1Y2NlZWRlZCA9IHZhbHVlLT5hc0FycmF5KGFycmF5KTsKLSAgICAgICAgQVNTRVJUX1VOVVNF
RChjYXN0U3VjY2VlZGVkLCBjYXN0U3VjY2VlZGVkKTsKLSAgICAgICAgYXNzZXJ0VmFsdWVIYXNF
eHBlY3RlZFR5cGUoYXJyYXkuZ2V0KCkpOworICAgICAgICBhdXRvIGFycmF5ID0gdmFsdWUtPmFz
QXJyYXkoKTsKKyAgICAgICAgQmluZGluZ1RyYWl0czxKU09OOjpBcnJheU9mPFQ+Pjo6YXNzZXJ0
VmFsdWVIYXNFeHBlY3RlZFR5cGUoYXJyYXkuZ2V0KCkpOwogICAgICAgICBDT01QSUxFX0FTU0VS
VChzaXplb2YoSlNPTjo6QXJyYXlPZjxUPikgPT0gc2l6ZW9mKEpTT046OkFycmF5KSwgdHlwZV9j
YXN0X3Byb2JsZW0pOwotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SlNPTjo6QXJyYXlPZjxU
Pio+KHN0YXRpY19jYXN0PEpTT046OkFycmF5QmFzZSo+KGFycmF5LmdldCgpKSk7CisgICAgICAg
IHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SlNPTjo6QXJyYXlPZjxUPj4oc3RhdGljX3Jl
ZmVyZW5jZV9jYXN0PEpTT046OkFycmF5QmFzZT4oYXJyYXkucmVsZWFzZU5vbk51bGwoKSkpOwog
ICAgIH0KIAogICAgIHN0YXRpYyB2b2lkIGFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKEpTT046
OlZhbHVlKiB2YWx1ZSkKICAgICB7CisgICAgICAgIEFTU0VSVF9VTlVTRUQodmFsdWUsIHZhbHVl
KTsKICNpZiBBU1NFUlRfRU5BQkxFRAotICAgICAgICBBU1NFUlRfQVJHKHZhbHVlLCB2YWx1ZSk7
Ci0gICAgICAgIFJlZlB0cjxKU09OOjpBcnJheT4gYXJyYXk7Ci0gICAgICAgIGJvb2wgY2FzdFN1
Y2NlZWRlZCA9IHZhbHVlLT5hc0FycmF5KGFycmF5KTsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChj
YXN0U3VjY2VlZGVkLCBjYXN0U3VjY2VlZGVkKTsKKyAgICAgICAgYXV0byBhcnJheSA9IHZhbHVl
LT5hc0FycmF5KCk7CisgICAgICAgIEFTU0VSVChhcnJheSk7CiAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBhcnJheS0+bGVuZ3RoKCk7IGkrKykKLSAgICAgICAgICAgIEJpbmRpbmdU
cmFpdHM8VD46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKGFycmF5LT5nZXQoaSkuZ2V0KCkp
OwotI2Vsc2UKLSAgICAgICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKLSNlbmRpZiAvLyBBU1NFUlRf
RU5BQkxFRAorICAgICAgICAgICAgQmluZGluZ1RyYWl0czxUPjo6YXNzZXJ0VmFsdWVIYXNFeHBl
Y3RlZFR5cGUoYXJyYXktPmdldChpKS5wdHIoKSk7CisjZW5kaWYKICAgICB9CiB9OwogCkBAIC04
NSw2ICs4Niw0IEBAIHRlbXBsYXRlPD4gc3RydWN0IEJpbmRpbmdUcmFpdHM8aW50PiA6IFByaW1p
dGl2ZUJpbmRpbmdUcmFpdHM8SlNPTjo6VmFsdWU6OlR5cGU6CiAKIH0KIAotdXNpbmcgUHJvdG9j
b2w6OkJpbmRpbmdUcmFpdHM7Ci0KIH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0dsb2JhbE9iamVjdENvbnNvbGVD
bGllbnQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0dsb2JhbE9iamVj
dENvbnNvbGVDbGllbnQuY3BwCmluZGV4IDQ2ZDBiNjk0MzI4ZWUwNDE3NjY1MDNmZTU2ZjlkNmMy
Mjk5NzU3YzYuLmJjNjM2OWEwYzM5ZDliYjY0MDk1ZjVkODcwNDRkNjA3NTNjZDQ4N2QgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNHbG9iYWxPYmplY3RDb25z
b2xlQ2xpZW50LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTR2xv
YmFsT2JqZWN0Q29uc29sZUNsaWVudC5jcHAKQEAgLTEzNiwyOCArMTM2LDIyIEBAIHZvaWQgSlNH
bG9iYWxPYmplY3RDb25zb2xlQ2xpZW50Ojpwcm9maWxlRW5kKEpTQzo6SlNHbG9iYWxPYmplY3Qq
LCBjb25zdCBTdHJpbmcmCiAKIHZvaWQgSlNHbG9iYWxPYmplY3RDb25zb2xlQ2xpZW50OjpzdGFy
dENvbnNvbGVQcm9maWxlKCkKIHsKLSAgICBFcnJvclN0cmluZyBpZ25vcmVkOwotCiAgICAgaWYg
KG1fZGVidWdnZXJBZ2VudCkgewogICAgICAgICBtX3Byb2ZpbGVSZXN0b3JlQnJlYWtwb2ludEFj
dGl2ZVZhbHVlID0gbV9kZWJ1Z2dlckFnZW50LT5icmVha3BvaW50c0FjdGl2ZSgpOwotICAgICAg
ICBtX2RlYnVnZ2VyQWdlbnQtPnNldEJyZWFrcG9pbnRzQWN0aXZlKGlnbm9yZWQsIGZhbHNlKTsK
KyAgICAgICAgbV9kZWJ1Z2dlckFnZW50LT5zZXRCcmVha3BvaW50c0FjdGl2ZShmYWxzZSk7CiAg
ICAgfQogCi0gICAgaWYgKG1fc2NyaXB0UHJvZmlsZXJBZ2VudCkgewotICAgICAgICBjb25zdCBi
b29sIGluY2x1ZGVTYW1wbGVzID0gdHJ1ZTsKLSAgICAgICAgbV9zY3JpcHRQcm9maWxlckFnZW50
LT5zdGFydFRyYWNraW5nKGlnbm9yZWQsICZpbmNsdWRlU2FtcGxlcyk7Ci0gICAgfQorICAgIGlm
IChtX3NjcmlwdFByb2ZpbGVyQWdlbnQpCisgICAgICAgIG1fc2NyaXB0UHJvZmlsZXJBZ2VudC0+
c3RhcnRUcmFja2luZyh0cnVlKTsKIH0KIAogdm9pZCBKU0dsb2JhbE9iamVjdENvbnNvbGVDbGll
bnQ6OnN0b3BDb25zb2xlUHJvZmlsZSgpCiB7Ci0gICAgRXJyb3JTdHJpbmcgaWdub3JlZDsKLQog
ICAgIGlmIChtX3NjcmlwdFByb2ZpbGVyQWdlbnQpCi0gICAgICAgIG1fc2NyaXB0UHJvZmlsZXJB
Z2VudC0+c3RvcFRyYWNraW5nKGlnbm9yZWQpOworICAgICAgICBtX3NjcmlwdFByb2ZpbGVyQWdl
bnQtPnN0b3BUcmFja2luZygpOwogCiAgICAgaWYgKG1fZGVidWdnZXJBZ2VudCkKLSAgICAgICAg
bV9kZWJ1Z2dlckFnZW50LT5zZXRCcmVha3BvaW50c0FjdGl2ZShpZ25vcmVkLCBtX3Byb2ZpbGVS
ZXN0b3JlQnJlYWtwb2ludEFjdGl2ZVZhbHVlKTsKKyAgICAgICAgbV9kZWJ1Z2dlckFnZW50LT5z
ZXRCcmVha3BvaW50c0FjdGl2ZShtX3Byb2ZpbGVSZXN0b3JlQnJlYWtwb2ludEFjdGl2ZVZhbHVl
KTsKIH0KIAogdm9pZCBKU0dsb2JhbE9iamVjdENvbnNvbGVDbGllbnQ6OnRha2VIZWFwU25hcHNo
b3QoSlNDOjpKU0dsb2JhbE9iamVjdCosIGNvbnN0IFN0cmluZyYgdGl0bGUpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTR2xvYmFsT2JqZWN0SW5zcGVjdG9y
Q29udHJvbGxlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTR2xvYmFs
T2JqZWN0SW5zcGVjdG9yQ29udHJvbGxlci5jcHAKaW5kZXggZDRkYjU2M2ViZDc2NTMyNjYwNGY1
MTJjMzFlOWRiMjg2ZDEwODNmNC4uYTYwZjI1ZDQzN2ZiZTlmZGZjZTZiYTU4ZDNlODJjMjZkZDU2
ZDYzZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0dsb2Jh
bE9iamVjdEluc3BlY3RvckNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3IvSlNHbG9iYWxPYmplY3RJbnNwZWN0b3JDb250cm9sbGVyLmNwcApAQCAtMjMx
LDkgKzIzMSw4IEBAIHZvaWQgSlNHbG9iYWxPYmplY3RJbnNwZWN0b3JDb250cm9sbGVyOjpmcm9u
dGVuZEluaXRpYWxpemVkKCkKICAgICBpZiAobV9wYXVzZUFmdGVySW5pdGlhbGl6YXRpb24pIHsK
ICAgICAgICAgbV9wYXVzZUFmdGVySW5pdGlhbGl6YXRpb24gPSBmYWxzZTsKIAotICAgICAgICBF
cnJvclN0cmluZyBpZ25vcmVkOwotICAgICAgICBlbnN1cmVEZWJ1Z2dlckFnZW50KCkuZW5hYmxl
KGlnbm9yZWQpOwotICAgICAgICBlbnN1cmVEZWJ1Z2dlckFnZW50KCkucGF1c2UoaWdub3JlZCk7
CisgICAgICAgIGVuc3VyZURlYnVnZ2VyQWdlbnQoKS5lbmFibGUoKTsKKyAgICAgICAgZW5zdXJl
RGVidWdnZXJBZ2VudCgpLnBhdXNlKCk7CiAgICAgfQogCiAjaWYgRU5BQkxFKFJFTU9URV9JTlNQ
RUNUT1IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50
cy9JbnNwZWN0b3JBZ2VudC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2Fn
ZW50cy9JbnNwZWN0b3JBZ2VudC5jcHAKaW5kZXggNWI5YTcxNTQwODUwODY0MWNhMDYxYWVjZjhm
MDExODQ2ZjcxMDQ0OC4uODY4NmQ2OTQxYjc4NDc5OTViMmRmZmRkNjc4YjY2ZDNiNDgxZGRiNSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVj
dG9yQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRz
L0luc3BlY3RvckFnZW50LmNwcApAQCAtNTQsNDQgKzU0LDQ5IEBAIHZvaWQgSW5zcGVjdG9yQWdl
bnQ6OndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKERpc2Nvbm5lY3RSZWFzb24pCiB7CiAg
ICAgbV9wZW5kaW5nRXZhbHVhdGVUZXN0Q29tbWFuZHMuY2xlYXIoKTsKIAotICAgIEVycm9yU3Ry
aW5nIGlnbm9yZWQ7Ci0gICAgZGlzYWJsZShpZ25vcmVkKTsKKyAgICBkaXNhYmxlKCk7CiB9CiAK
LXZvaWQgSW5zcGVjdG9yQWdlbnQ6OmVuYWJsZShFcnJvclN0cmluZyYpCitQcm90b2NvbDo6RXJy
b3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JBZ2VudDo6ZW5hYmxlKCkKIHsKICAgICBtX2VuYWJs
ZWQgPSB0cnVlOwogCiAgICAgaWYgKG1fcGVuZGluZ0luc3BlY3REYXRhLmZpcnN0KQotICAgICAg
ICBpbnNwZWN0KG1fcGVuZGluZ0luc3BlY3REYXRhLmZpcnN0LmNvcHlSZWYoKSwgbV9wZW5kaW5n
SW5zcGVjdERhdGEuc2Vjb25kLmNvcHlSZWYoKSk7CisgICAgICAgIGluc3BlY3QobV9wZW5kaW5n
SW5zcGVjdERhdGEuZmlyc3QucmVsZWFzZU5vbk51bGwoKSwgbV9wZW5kaW5nSW5zcGVjdERhdGEu
c2Vjb25kLnJlbGVhc2VOb25OdWxsKCkpOwogCiAgICAgZm9yIChhdXRvJiB0ZXN0Q29tbWFuZCA6
IG1fcGVuZGluZ0V2YWx1YXRlVGVzdENvbW1hbmRzKQogICAgICAgICBtX2Zyb250ZW5kRGlzcGF0
Y2hlci0+ZXZhbHVhdGVGb3JUZXN0SW5Gcm9udGVuZCh0ZXN0Q29tbWFuZCk7CiAKICAgICBtX3Bl
bmRpbmdFdmFsdWF0ZVRlc3RDb21tYW5kcy5jbGVhcigpOworCisgICAgcmV0dXJuIHsgfTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JBZ2VudDo6ZGlzYWJsZShFcnJvclN0cmluZyYpCitQcm90b2NvbDo6
RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JBZ2VudDo6ZGlzYWJsZSgpCiB7CiAgICAgbV9l
bmFibGVkID0gZmFsc2U7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckFn
ZW50Ojppbml0aWFsaXplZChFcnJvclN0cmluZyYpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2
b2lkPiBJbnNwZWN0b3JBZ2VudDo6aW5pdGlhbGl6ZWQoKQogewogICAgIG1fZW52aXJvbm1lbnQu
ZnJvbnRlbmRJbml0aWFsaXplZCgpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNw
ZWN0b3JBZ2VudDo6aW5zcGVjdChSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVj
dD4mJiBvYmplY3RUb0luc3BlY3QsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgaGludHMpCit2b2lk
IEluc3BlY3RvckFnZW50OjppbnNwZWN0KFJlZjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2Jq
ZWN0PiYmIG9iamVjdCwgUmVmPEpTT046Ok9iamVjdD4mJiBoaW50cykKIHsKICAgICBpZiAobV9l
bmFibGVkKSB7Ci0gICAgICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5pbnNwZWN0KG9iamVjdFRv
SW5zcGVjdCwgaGludHMpOworICAgICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+aW5zcGVjdChX
VEZNb3ZlKG9iamVjdCksIFdURk1vdmUoaGludHMpKTsKICAgICAgICAgbV9wZW5kaW5nSW5zcGVj
dERhdGEuZmlyc3QgPSBudWxscHRyOwogICAgICAgICBtX3BlbmRpbmdJbnNwZWN0RGF0YS5zZWNv
bmQgPSBudWxscHRyOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbV9wZW5kaW5nSW5z
cGVjdERhdGEuZmlyc3QgPSBvYmplY3RUb0luc3BlY3Q7Ci0gICAgbV9wZW5kaW5nSW5zcGVjdERh
dGEuc2Vjb25kID0gaGludHM7CisgICAgbV9wZW5kaW5nSW5zcGVjdERhdGEuZmlyc3QgPSBXVEZN
b3ZlKG9iamVjdCk7CisgICAgbV9wZW5kaW5nSW5zcGVjdERhdGEuc2Vjb25kID0gV1RGTW92ZSho
aW50cyk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQWdlbnQ6OmV2YWx1YXRlRm9yVGVzdEluRnJvbnRl
bmQoY29uc3QgU3RyaW5nJiBzY3JpcHQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBZ2VudC5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQWdlbnQuaAppbmRleCA4NThjNjlhYzJlYjg2
ZGMxODI4YTJmM2UxMjY3MTU4MDllODlmMzVhLi41OTRjZWU3MTc0MDYwNTk5Yzg5OTM2ZDBjMjcz
NmExNTNhYTI3M2Q0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L2FnZW50cy9JbnNwZWN0b3JBZ2VudC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3IvYWdlbnRzL0luc3BlY3RvckFnZW50LmgKQEAgLTQwLDI2ICs0MCwyNCBAQCBuYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKIGNsYXNzIEJhY2tlbmREaXNwYXRjaGVyOwogY2xhc3MgSW5zcGVjdG9y
RW52aXJvbm1lbnQ7CiAKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCiBjbGFzcyBKU19F
WFBPUlRfUFJJVkFURSBJbnNwZWN0b3JBZ2VudCBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3JBZ2Vu
dEJhc2UsIHB1YmxpYyBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewogICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKEluc3BlY3RvckFnZW50KTsKICAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKIHB1YmxpYzoKICAgICBJbnNwZWN0b3JBZ2VudChBZ2VudENvbnRleHQmKTsKLSAg
ICB+SW5zcGVjdG9yQWdlbnQoKSBmaW5hbDsKKyAgICB+SW5zcGVjdG9yQWdlbnQoKTsKIAogICAg
IC8vIEluc3BlY3RvckFnZW50QmFzZQotICAgIHZvaWQgZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNr
ZW5kKEZyb250ZW5kUm91dGVyKiwgQmFja2VuZERpc3BhdGNoZXIqKSBmaW5hbDsKLSAgICB2b2lk
IHdpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKERpc2Nvbm5lY3RSZWFzb24pIGZpbmFsOwor
ICAgIHZvaWQgZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEZyb250ZW5kUm91dGVyKiwgQmFj
a2VuZERpc3BhdGNoZXIqKTsKKyAgICB2b2lkIHdpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5k
KERpc2Nvbm5lY3RSZWFzb24pOwogCiAgICAgLy8gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyCi0gICAgdm9pZCBlbmFibGUoRXJyb3JTdHJpbmcmKSBmaW5hbDsKLSAgICB2b2lkIGRp
c2FibGUoRXJyb3JTdHJpbmcmKSBmaW5hbDsKLSAgICB2b2lkIGluaXRpYWxpemVkKEVycm9yU3Ry
aW5nJikgZmluYWw7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZW5hYmxlKCk7
CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZGlzYWJsZSgpOworICAgIFByb3Rv
Y29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGluaXRpYWxpemVkKCk7CiAKICAgICAvLyBDb21tYW5k
TGluZUFQSQotICAgIHZvaWQgaW5zcGVjdChSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90
ZU9iamVjdD4mJiBvYmplY3RUb0luc3BlY3QsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgaGludHMp
OworICAgIHZvaWQgaW5zcGVjdChSZWY8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4m
JiwgUmVmPEpTT046Ok9iamVjdD4mJiBoaW50cyk7CiAKICAgICB2b2lkIGV2YWx1YXRlRm9yVGVz
dEluRnJvbnRlbmQoY29uc3QgU3RyaW5nJiBzY3JpcHQpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBdWRpdEFnZW50LmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckF1ZGl0QWdl
bnQuY3BwCmluZGV4IDAwYjFlY2MxYWY0ODA3MGVmZWRjNzY2YTNiYTZmZjViNmY0YmE3MDAuLjJm
OWY4ZjA1OWNiMTM5MTNhZmEzMGY2NDk3N2UwMzNiNTM0Yzk0OTMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckF1ZGl0QWdlbnQuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckF1
ZGl0QWdlbnQuY3BwCkBAIC01Nyw0MSArNTcsNDEgQEAgdm9pZCBJbnNwZWN0b3JBdWRpdEFnZW50
Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChEaXNjb25uZWN0UmVhc29uKQogewogfQog
Ci12b2lkIEluc3BlY3RvckF1ZGl0QWdlbnQ6OnNldHVwKEVycm9yU3RyaW5nJiBlcnJvclN0cmlu
ZywgY29uc3QgaW50KiBleGVjdXRpb25Db250ZXh0SWQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdP
cjx2b2lkPiBJbnNwZWN0b3JBdWRpdEFnZW50OjpzZXR1cChPcHRpb25hbDxQcm90b2NvbDo6UnVu
dGltZTo6RXhlY3V0aW9uQ29udGV4dElkPiYmIGV4ZWN1dGlvbkNvbnRleHRJZCkKIHsKLSAgICBp
ZiAoaGFzQWN0aXZlQXVkaXQoKSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJNdXN0IGNhbGwg
dGVhcmRvd24gYmVmb3JlIGNhbGxpbmcgc2V0dXAgYWdhaW4iX3M7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOwogCi0gICAgSW5q
ZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHQgPSBpbmplY3RlZFNjcmlwdEZvckV2YWwoZXJyb3JT
dHJpbmcsIGV4ZWN1dGlvbkNvbnRleHRJZCk7CisgICAgaWYgKGhhc0FjdGl2ZUF1ZGl0KCkpCisg
ICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTXVzdCBjYWxsIHRlYXJkb3duIGJlZm9yZSBj
YWxsaW5nIHNldHVwIGFnYWluIl9zKTsKKworICAgIEluamVjdGVkU2NyaXB0IGluamVjdGVkU2Ny
aXB0ID0gaW5qZWN0ZWRTY3JpcHRGb3JFdmFsKGVycm9yU3RyaW5nLCBXVEZNb3ZlKGV4ZWN1dGlv
bkNvbnRleHRJZCkpOwogICAgIGlmIChpbmplY3RlZFNjcmlwdC5oYXNOb1ZhbHVlKCkpCi0gICAg
ICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsK
IAogICAgIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGluamVjdGVkU2NyaXB0
Lmdsb2JhbE9iamVjdCgpOwotICAgIGlmICghZ2xvYmFsT2JqZWN0KSB7Ci0gICAgICAgIGVycm9y
U3RyaW5nID0gIk1pc3NpbmcgZXhlY3V0aW9uIHN0YXRlIG9mIGluamVjdGVkIHNjcmlwdCBmb3Ig
Z2l2ZW4gZXhlY3V0aW9uQ29udGV4dElkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAg
IGlmICghZ2xvYmFsT2JqZWN0KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk1pc3Np
bmcgZXhlY3V0aW9uIHN0YXRlIG9mIGluamVjdGVkIHNjcmlwdCBmb3IgZ2l2ZW4gZXhlY3V0aW9u
Q29udGV4dElkIl9zKTsKIAogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKIAogICAg
IEpTQzo6SlNMb2NrSG9sZGVyIGxvY2soZ2xvYmFsT2JqZWN0KTsKIAogICAgIG1faW5qZWN0ZWRX
ZWJJbnNwZWN0b3JBdWRpdFZhbHVlLnNldCh2bSwgY29uc3RydWN0RW1wdHlPYmplY3QoZ2xvYmFs
T2JqZWN0KSk7Ci0gICAgaWYgKCFtX2luamVjdGVkV2ViSW5zcGVjdG9yQXVkaXRWYWx1ZSkgewot
ICAgICAgICBlcnJvclN0cmluZyA9ICJVbmFibGUgdG8gY29uc3RydWN0IGluamVjdGVkIFdlYklu
c3BlY3RvckF1ZGl0IG9iamVjdC4iX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYg
KCFtX2luamVjdGVkV2ViSW5zcGVjdG9yQXVkaXRWYWx1ZSkKKyAgICAgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKCJVbmFibGUgdG8gY29uc3RydWN0IGluamVjdGVkIFdlYkluc3BlY3RvckF1ZGl0
IG9iamVjdC4iX3MpOwogCiAgICAgcG9wdWxhdGVBdWRpdE9iamVjdChnbG9iYWxPYmplY3QsIG1f
aW5qZWN0ZWRXZWJJbnNwZWN0b3JBdWRpdFZhbHVlKTsKKworICAgIHJldHVybiB7IH07CiB9CiAK
LXZvaWQgSW5zcGVjdG9yQXVkaXRBZ2VudDo6cnVuKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywg
Y29uc3QgU3RyaW5nJiB0ZXN0LCBjb25zdCBpbnQqIGV4ZWN1dGlvbkNvbnRleHRJZCwgUmVmUHRy
PFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiByZXN1bHQsIE9wdGlvbmFsPGJvb2w+
JiB3YXNUaHJvd24pCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxzdGQ6OnR1cGxlPFJlZjxQcm90
b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiwgT3B0aW9uYWw8Ym9vbD4gLyogd2FzVGhyb3du
ICovPj4gSW5zcGVjdG9yQXVkaXRBZ2VudDo6cnVuKGNvbnN0IFN0cmluZyYgdGVzdCwgT3B0aW9u
YWw8UHJvdG9jb2w6OlJ1bnRpbWU6OkV4ZWN1dGlvbkNvbnRleHRJZD4mJiBleGVjdXRpb25Db250
ZXh0SWQpCiB7Ci0gICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHQgPSBpbmplY3RlZFNj
cmlwdEZvckV2YWwoZXJyb3JTdHJpbmcsIGV4ZWN1dGlvbkNvbnRleHRJZCk7CisgICAgUHJvdG9j
b2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCisgICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0
ZWRTY3JpcHQgPSBpbmplY3RlZFNjcmlwdEZvckV2YWwoZXJyb3JTdHJpbmcsIFdURk1vdmUoZXhl
Y3V0aW9uQ29udGV4dElkKSk7CiAgICAgaWYgKGluamVjdGVkU2NyaXB0Lmhhc05vVmFsdWUoKSkK
LSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJp
bmcpOwogCiAgICAgU3RyaW5nQnVpbGRlciBmdW5jdGlvblN0cmluZzsKICAgICBmdW5jdGlvblN0
cmluZy5hcHBlbmRMaXRlcmFsKCIoZnVuY3Rpb24oV2ViSW5zcGVjdG9yQXVkaXQpIHsgXCJ1c2Ug
c3RyaWN0XCI7IHJldHVybiBldmFsKGAoIik7CkBAIC0xMDMsNiArMTAzLDggQEAgdm9pZCBJbnNw
ZWN0b3JBdWRpdEFnZW50OjpydW4oRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJp
bmcmIHRlc3QsIGNvbnMKICAgICBpZiAobV9pbmplY3RlZFdlYkluc3BlY3RvckF1ZGl0VmFsdWUp
CiAgICAgICAgIG9wdGlvbnMuYXJncyA9IHsgbV9pbmplY3RlZFdlYkluc3BlY3RvckF1ZGl0VmFs
dWUuZ2V0KCkgfTsKIAorICAgIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0
PiByZXN1bHQ7CisgICAgT3B0aW9uYWw8Ym9vbD4gd2FzVGhyb3duOwogICAgIE9wdGlvbmFsPGlu
dD4gc2F2ZWRSZXN1bHRJbmRleDsKIAogICAgIEpTQzo6RGVidWdnZXI6OlRlbXBvcmFyaWx5RGlz
YWJsZUV4Y2VwdGlvbkJyZWFrcG9pbnRzIHRlbXBvcmFyaWx5RGlzYWJsZUV4Y2VwdGlvbkJyZWFr
cG9pbnRzKG1fZGVidWdnZXIpOwpAQCAtMTEzLDE2ICsxMTUsMjEgQEAgdm9pZCBJbnNwZWN0b3JB
dWRpdEFnZW50OjpydW4oRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHRl
c3QsIGNvbnMKICAgICBpbmplY3RlZFNjcmlwdC5leGVjdXRlKGVycm9yU3RyaW5nLCBmdW5jdGlv
blN0cmluZy50b1N0cmluZygpLCBXVEZNb3ZlKG9wdGlvbnMpLCByZXN1bHQsIHdhc1Rocm93biwg
c2F2ZWRSZXN1bHRJbmRleCk7CiAKICAgICB1bm11dGVDb25zb2xlKCk7CisKKyAgICBpZiAoIXJl
c3VsdCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKKworICAg
IHJldHVybiB7IHsgcmVzdWx0LnJlbGVhc2VOb25OdWxsKCksIFdURk1vdmUod2FzVGhyb3duKSB9
IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yQXVkaXRBZ2VudDo6dGVhcmRvd24oRXJyb3JTdHJpbmcm
IGVycm9yU3RyaW5nKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yQXVk
aXRBZ2VudDo6dGVhcmRvd24oKQogewotICAgIGlmICghaGFzQWN0aXZlQXVkaXQoKSkgewotICAg
ICAgICBlcnJvclN0cmluZyA9ICJNdXN0IGNhbGwgc2V0dXAgYmVmb3JlIGNhbGxpbmcgdGVhcmRv
d24iX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKCFoYXNBY3RpdmVBdWRpdCgp
KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk11c3QgY2FsbCBzZXR1cCBiZWZvcmUg
Y2FsbGluZyB0ZWFyZG93biJfcyk7CiAKICAgICBtX2luamVjdGVkV2ViSW5zcGVjdG9yQXVkaXRW
YWx1ZS5jbGVhcigpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAogYm9vbCBJbnNwZWN0b3JBdWRp
dEFnZW50OjpoYXNBY3RpdmVBdWRpdCgpIGNvbnN0CkBAIC0xMzksNyArMTQ2LDcgQEAgdm9pZCBJ
bnNwZWN0b3JBdWRpdEFnZW50Ojpwb3B1bGF0ZUF1ZGl0T2JqZWN0KEpTQzo6SlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwKICAgICBKU0M6OlZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsK
ICAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKHZtKTsKIAotICAgIGF1ZGl0T2JqZWN0LT5wdXRE
aXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIlZlcnNpb24iKSwgSlND
OjpKU1ZhbHVlKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1ZGl0OjpWRVJTSU9OKSk7CisgICAgYXVk
aXRPYmplY3QtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAi
VmVyc2lvbiIpLCBKU0M6OkpTVmFsdWUoUHJvdG9jb2w6OkF1ZGl0OjpWRVJTSU9OKSk7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQXVkaXRBZ2VudC5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQXVkaXRBZ2VudC5oCmluZGV4IDVi
NmQ4YWFiNzIyNjNmMThhYTY0MTA3ODVjMDFjOWJhOGM0ZDMwZjguLmJmNTA2YzM2ZDJkZmYzZjZm
Y2E1OTlmNjdlNTg1NGEyNjhhN2IxZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckF1ZGl0QWdlbnQuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBdWRpdEFnZW50LmgKQEAgLTQw
LDcgKzQwLDYgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKIGNsYXNzIEluamVjdGVkU2NyaXB0
OwogY2xhc3MgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOwotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJp
bmc7CiAKIGNsYXNzIEpTX0VYUE9SVF9QUklWQVRFIEluc3BlY3RvckF1ZGl0QWdlbnQgOiBwdWJs
aWMgSW5zcGVjdG9yQWdlbnRCYXNlLCBwdWJsaWMgQXVkaXRCYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXIgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEluc3BlY3RvckF1ZGl0QWdlbnQpOwpAQCAt
NTMsOSArNTIsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCB3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFj
a2VuZChEaXNjb25uZWN0UmVhc29uKSBmaW5hbDsKIAogICAgIC8vIEF1ZGl0QmFja2VuZERpc3Bh
dGNoZXJIYW5kbGVyCi0gICAgdm9pZCBzZXR1cChFcnJvclN0cmluZyYsIGNvbnN0IGludCogZXhl
Y3V0aW9uQ29udGV4dElkKSBmaW5hbDsKLSAgICB2b2lkIHJ1bihFcnJvclN0cmluZyYsIGNvbnN0
IFN0cmluZyYgdGVzdCwgY29uc3QgaW50KiBleGVjdXRpb25Db250ZXh0SWQsIFJlZlB0cjxQcm90
b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0LCBPcHRpb25hbDxib29sPiYgd2Fz
VGhyb3duKSBmaW5hbDsKLSAgICB2b2lkIHRlYXJkb3duKEVycm9yU3RyaW5nJikgZmluYWw7Cisg
ICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc2V0dXAoT3B0aW9uYWw8UHJvdG9jb2w6
OlJ1bnRpbWU6OkV4ZWN1dGlvbkNvbnRleHRJZD4mJikgZmluYWw7CisgICAgUHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8c3RkOjp0dXBsZTxSZWY8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVj
dD4sIE9wdGlvbmFsPGJvb2w+IC8qIHdhc1Rocm93biAqLz4+IHJ1bihjb25zdCBTdHJpbmcmIHRl
c3QsIE9wdGlvbmFsPFByb3RvY29sOjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0SWQ+JiYpIGZp
bmFsOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHRlYXJkb3duKCkgZmluYWw7
CiAKICAgICBib29sIGhhc0FjdGl2ZUF1ZGl0KCkgY29uc3Q7CiAKQEAgLTY0LDcgKzYzLDcgQEAg
cHJvdGVjdGVkOgogCiAgICAgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyJiBpbmplY3RlZFNjcmlwdE1h
bmFnZXIoKSB7IHJldHVybiBtX2luamVjdGVkU2NyaXB0TWFuYWdlcjsgfQogCi0gICAgdmlydHVh
bCBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdEZvckV2YWwoRXJyb3JTdHJpbmcmLCBjb25z
dCBpbnQqIGV4ZWN1dGlvbkNvbnRleHRJZCkgPSAwOworICAgIHZpcnR1YWwgSW5qZWN0ZWRTY3Jp
cHQgaW5qZWN0ZWRTY3JpcHRGb3JFdmFsKFByb3RvY29sOjpFcnJvclN0cmluZyYsIE9wdGlvbmFs
PFByb3RvY29sOjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0SWQ+JiYpID0gMDsKIAogICAgIHZp
cnR1YWwgdm9pZCBwb3B1bGF0ZUF1ZGl0T2JqZWN0KEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6
OlN0cm9uZzxKU0M6OkpTT2JqZWN0PiYgYXVkaXRPYmplY3QpOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDb25zb2xlQWdlbnQu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ29u
c29sZUFnZW50LmNwcAppbmRleCAxMDVmZTZmYzZjMjIwOGVmNzYzNzFlYWVkZGJmYTQ3MzFmYmZi
NjU0Li4xM2I2MjM0ZDFmNTMyODUwZTMwMDUyNzk3M2MyMTViNzJlMzZhZTE3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDb25zb2xl
QWdlbnQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0lu
c3BlY3RvckNvbnNvbGVBZ2VudC5jcHAKQEAgLTUzLDggKzUzLDcgQEAgdm9pZCBJbnNwZWN0b3JD
b25zb2xlQWdlbnQ6OmRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChGcm9udGVuZFJvdXRlcios
IEJhY2tlbmQKIAogdm9pZCBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OndpbGxEZXN0cm95RnJvbnRl
bmRBbmRCYWNrZW5kKERpc2Nvbm5lY3RSZWFzb24pCiB7Ci0gICAgU3RyaW5nIGVycm9yU3RyaW5n
OwotICAgIGRpc2FibGUoZXJyb3JTdHJpbmcpOworICAgIGRpc2FibGUoKTsKIH0KIAogdm9pZCBJ
bnNwZWN0b3JDb25zb2xlQWdlbnQ6OmRpc2NhcmRWYWx1ZXMoKQpAQCAtNjMsMTAgKzYyLDEwIEBA
IHZvaWQgSW5zcGVjdG9yQ29uc29sZUFnZW50OjpkaXNjYXJkVmFsdWVzKCkKICAgICBtX2V4cGly
ZWRDb25zb2xlTWVzc2FnZUNvdW50ID0gMDsKIH0KIAotdm9pZCBJbnNwZWN0b3JDb25zb2xlQWdl
bnQ6OmVuYWJsZShFcnJvclN0cmluZyYpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJ
bnNwZWN0b3JDb25zb2xlQWdlbnQ6OmVuYWJsZSgpCiB7CiAgICAgaWYgKG1fZW5hYmxlZCkKLSAg
ICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4geyB9OwogCiAgICAgbV9lbmFibGVkID0gdHJ1
ZTsKIApAQCAtODAsMTcgKzc5LDIxIEBAIHZvaWQgSW5zcGVjdG9yQ29uc29sZUFnZW50OjplbmFi
bGUoRXJyb3JTdHJpbmcmKQogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtZXNzYWdlcy5z
aXplKCk7ICsraSkKICAgICAgICAgbWVzc2FnZXNbaV0tPmFkZFRvRnJvbnRlbmQoKm1fZnJvbnRl
bmREaXNwYXRjaGVyLCBtX2luamVjdGVkU2NyaXB0TWFuYWdlciwgZmFsc2UpOworCisgICAgcmV0
dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OmRpc2FibGUoRXJyb3JT
dHJpbmcmKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yQ29uc29sZUFn
ZW50OjpkaXNhYmxlKCkKIHsKICAgICBpZiAoIW1fZW5hYmxlZCkKLSAgICAgICAgcmV0dXJuOwor
ICAgICAgICByZXR1cm4geyB9OwogCiAgICAgbV9lbmFibGVkID0gZmFsc2U7CisKKyAgICByZXR1
cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckNvbnNvbGVBZ2VudDo6Y2xlYXJNZXNzYWdlcyhF
cnJvclN0cmluZyYpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JDb25z
b2xlQWdlbnQ6OmNsZWFyTWVzc2FnZXMoKQogewogICAgIG1fY29uc29sZU1lc3NhZ2VzLmNsZWFy
KCk7CiAgICAgbV9leHBpcmVkQ29uc29sZU1lc3NhZ2VDb3VudCA9IDA7CkBAIC05OSw2ICsxMDIs
OCBAQCB2b2lkIEluc3BlY3RvckNvbnNvbGVBZ2VudDo6Y2xlYXJNZXNzYWdlcyhFcnJvclN0cmlu
ZyYpCiAKICAgICBpZiAobV9lbmFibGVkKQogICAgICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+
bWVzc2FnZXNDbGVhcmVkKCk7CisKKyAgICByZXR1cm4geyB9OwogfQogCiBib29sIEluc3BlY3Rv
ckNvbnNvbGVBZ2VudDo6ZGV2ZWxvcGVyRXh0cmFzRW5hYmxlZCgpIGNvbnN0CkBAIC0xMDgsOCAr
MTEzLDcgQEAgYm9vbCBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OmRldmVsb3BlckV4dHJhc0VuYWJs
ZWQoKSBjb25zdAogCiB2b2lkIEluc3BlY3RvckNvbnNvbGVBZ2VudDo6cmVzZXQoKQogewotICAg
IEVycm9yU3RyaW5nIGlnbm9yZWQ7Ci0gICAgY2xlYXJNZXNzYWdlcyhpZ25vcmVkKTsKKyAgICBj
bGVhck1lc3NhZ2VzKCk7CiAKICAgICBtX3RpbWVzLmNsZWFyKCk7CiAgICAgbV9jb3VudHMuY2xl
YXIoKTsKQEAgLTExNywxMCArMTIxLDggQEAgdm9pZCBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OnJl
c2V0KCkKIAogdm9pZCBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OmFkZE1lc3NhZ2VUb0NvbnNvbGUo
c3RkOjp1bmlxdWVfcHRyPENvbnNvbGVNZXNzYWdlPiBtZXNzYWdlKQogewotICAgIGlmIChtZXNz
YWdlLT50eXBlKCkgPT0gTWVzc2FnZVR5cGU6OkNsZWFyKSB7Ci0gICAgICAgIEVycm9yU3RyaW5n
IGlnbm9yZWQ7Ci0gICAgICAgIGNsZWFyTWVzc2FnZXMoaWdub3JlZCk7Ci0gICAgfQorICAgIGlm
IChtZXNzYWdlLT50eXBlKCkgPT0gTWVzc2FnZVR5cGU6OkNsZWFyKQorICAgICAgICBjbGVhck1l
c3NhZ2VzKCk7CiAKICAgICBhZGRDb25zb2xlTWVzc2FnZShXVEZNb3ZlKG1lc3NhZ2UpKTsKIH0K
QEAgLTE5MSwxMiArMTkzLDEyIEBAIHZvaWQgSW5zcGVjdG9yQ29uc29sZUFnZW50Ojp0YWtlSGVh
cFNuYXBzaG90KGNvbnN0IFN0cmluZyYgdGl0bGUpCiAgICAgaWYgKCFtX2hlYXBBZ2VudCkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgRXJyb3JTdHJpbmcgaWdub3JlZDsKLSAgICBkb3VibGUgdGlt
ZXN0YW1wOwotICAgIFN0cmluZyBzbmFwc2hvdERhdGE7Ci0gICAgbV9oZWFwQWdlbnQtPnNuYXBz
aG90KGlnbm9yZWQsICZ0aW1lc3RhbXAsICZzbmFwc2hvdERhdGEpOworICAgIGF1dG8gcmVzdWx0
ID0gbV9oZWFwQWdlbnQtPnNuYXBzaG90KCk7CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJl
dHVybjsKIAotICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5oZWFwU25hcHNob3QodGltZXN0YW1w
LCBzbmFwc2hvdERhdGEsIHRpdGxlLmlzRW1wdHkoKSA/IG51bGxwdHIgOiAmdGl0bGUpOworICAg
IGF1dG8gW3RpbWVzdGFtcCwgc25hcHNob3REYXRhXSA9IFdURk1vdmUocmVzdWx0LnZhbHVlKCkp
OworICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5oZWFwU25hcHNob3QodGltZXN0YW1wLCBzbmFw
c2hvdERhdGEsIHRpdGxlKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OmNvdW50
KEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgU3RyaW5nJiBsYWJlbCkK
QEAgLTI1NiwxNSArMjU4LDE1IEBAIHZvaWQgSW5zcGVjdG9yQ29uc29sZUFnZW50OjphZGRDb25z
b2xlTWVzc2FnZShzdGQ6OnVuaXF1ZV9wdHI8Q29uc29sZU1lc3NhZ2U+IGNvCiAgICAgfQogfQog
Ci12b2lkIEluc3BlY3RvckNvbnNvbGVBZ2VudDo6Z2V0TG9nZ2luZ0NoYW5uZWxzKEVycm9yU3Ry
aW5nJiwgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWw+PiYg
Y2hhbm5lbHMpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SlNPTjo6QXJyYXlPZjxQcm90
b2NvbDo6Q29uc29sZTo6Q2hhbm5lbD4+PiBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OmdldExvZ2dp
bmdDaGFubmVscygpCiB7CiAgICAgLy8gRGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBoYXMgbm8gbG9n
Z2luZyBjaGFubmVscy4KLSAgICBjaGFubmVscyA9IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkNv
bnNvbGU6OkNoYW5uZWw+OjpjcmVhdGUoKTsKKyAgICByZXR1cm4gSlNPTjo6QXJyYXlPZjxQcm90
b2NvbDo6Q29uc29sZTo6Q2hhbm5lbD46OmNyZWF0ZSgpOwogfQogCi12b2lkIEluc3BlY3RvckNv
bnNvbGVBZ2VudDo6c2V0TG9nZ2luZ0NoYW5uZWxMZXZlbChFcnJvclN0cmluZyYgZXJyb3JTdHJp
bmcsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdP
cjx2b2lkPiBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OnNldExvZ2dpbmdDaGFubmVsTGV2ZWwoUHJv
dG9jb2w6OkNvbnNvbGU6OkNoYW5uZWxTb3VyY2UsIFByb3RvY29sOjpDb25zb2xlOjpDaGFubmVs
TGV2ZWwpCiB7Ci0gICAgZXJyb3JTdHJpbmcgPSAiTm90IHN1cHBvcnRlZCJfczsKKyAgICByZXR1
cm4gbWFrZVVuZXhwZWN0ZWQoIk5vdCBzdXBwb3J0ZWQiX3MpOwogfQogCiB9IC8vIG5hbWVzcGFj
ZSBJbnNwZWN0b3IKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
YWdlbnRzL0luc3BlY3RvckNvbnNvbGVBZ2VudC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ29uc29sZUFnZW50LmgKaW5kZXggNzhjYWYxYWQwOGFl
NTdiMWUwNzg1YzlhZGQ1MTY3NTM2YWZiZjI5Ni4uZWQ4ZTFmNjk5YTVkMGM5MWNkMDU2NjkxYTdk
YjIxOTgwZjIzNWQyMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9hZ2VudHMvSW5zcGVjdG9yQ29uc29sZUFnZW50LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ29uc29sZUFnZW50LmgKQEAgLTQ2LDcgKzQ2
LDYgQEAgY2xhc3MgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOwogY2xhc3MgSW5zcGVjdG9ySGVhcEFn
ZW50OwogY2xhc3MgU2NyaXB0QXJndW1lbnRzOwogY2xhc3MgU2NyaXB0Q2FsbFN0YWNrOwotdHlw
ZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiAKIGNsYXNzIEpTX0VYUE9SVF9QUklWQVRFIEluc3Bl
Y3RvckNvbnNvbGVBZ2VudCA6IHB1YmxpYyBJbnNwZWN0b3JBZ2VudEJhc2UsIHB1YmxpYyBDb25z
b2xlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJ
bnNwZWN0b3JDb25zb2xlQWdlbnQpOwpAQCAtNjEsMTEgKzYwLDExIEBAIHB1YmxpYzoKICAgICB2
b2lkIGRpc2NhcmRWYWx1ZXMoKSBmaW5hbDsKIAogICAgIC8vIENvbnNvbGVCYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXIKLSAgICB2b2lkIGVuYWJsZShFcnJvclN0cmluZyYpIGZpbmFsOwotICAgIHZv
aWQgZGlzYWJsZShFcnJvclN0cmluZyYpIGZpbmFsOwotICAgIHZvaWQgY2xlYXJNZXNzYWdlcyhF
cnJvclN0cmluZyYpIG92ZXJyaWRlOwotICAgIHZvaWQgZ2V0TG9nZ2luZ0NoYW5uZWxzKEVycm9y
U3RyaW5nJiwgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWw+
PiYpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0TG9nZ2luZ0NoYW5uZWxMZXZlbChFcnJvclN0cmlu
ZyYsIGNvbnN0IFN0cmluZyYgY2hhbm5lbCwgY29uc3QgU3RyaW5nJiBsZXZlbCkgb3ZlcnJpZGU7
CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZW5hYmxlKCkgZmluYWw7CisgICAg
UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZGlzYWJsZSgpIGZpbmFsOworICAgIFByb3Rv
Y29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGNsZWFyTWVzc2FnZXMoKSBvdmVycmlkZTsKKyAgICBQ
cm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6Q29uc29s
ZTo6Q2hhbm5lbD4+PiBnZXRMb2dnaW5nQ2hhbm5lbHMoKSBvdmVycmlkZTsKKyAgICBQcm90b2Nv
bDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzZXRMb2dnaW5nQ2hhbm5lbExldmVsKFByb3RvY29sOjpD
b25zb2xlOjpDaGFubmVsU291cmNlLCBQcm90b2NvbDo6Q29uc29sZTo6Q2hhbm5lbExldmVsKSBv
dmVycmlkZTsKIAogICAgIHZvaWQgc2V0SGVhcEFnZW50KEluc3BlY3RvckhlYXBBZ2VudCogYWdl
bnQpIHsgbV9oZWFwQWdlbnQgPSBhZ2VudDsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRlYnVnZ2VyQWdl
bnQuY3BwCmluZGV4IDEzZmMyYzUzYjVhYzQ2NWU2ZTNkNjZhYmUwNTVjMGVlNmQ0ZGMwNzAuLjQx
ZjRiYTQyN2VhNGY3OWRjMTQ0N2ZlYTU5NjRhZDgwNjNjYmRmNzIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQuY3BwCkBAIC02NCwyNSArNjQsMjUgQEAgc3RhdGljIGJvb2wgaXNXZWJL
aXRJbmplY3RlZFNjcmlwdChjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCkKICAgICByZXR1cm4gc291
cmNlVVJMLnN0YXJ0c1dpdGgoIl9fSW5qZWN0ZWRTY3JpcHRfIikgJiYgc291cmNlVVJMLmVuZHNX
aXRoKCIuanMiKTsKIH0KIAotc3RhdGljIE9wdGlvbmFsPEpTQzo6QnJlYWtwb2ludDo6QWN0aW9u
OjpUeXBlPiBicmVha3BvaW50QWN0aW9uVHlwZUZvclN0cmluZyhFcnJvclN0cmluZyYgZXJyb3JT
dHJpbmcsIGNvbnN0IFN0cmluZyYgdHlwZVN0cmluZykKK3N0YXRpYyBPcHRpb25hbDxKU0M6OkJy
ZWFrcG9pbnQ6OkFjdGlvbjo6VHlwZT4gYnJlYWtwb2ludEFjdGlvblR5cGVGb3JTdHJpbmcoUHJv
dG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiB0eXBlU3RyaW5n
KQogewotICAgIGF1dG8gdHlwZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6Okluc3BlY3RvckhlbHBl
cnM6OnBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dl
cjo6QnJlYWtwb2ludEFjdGlvbjo6VHlwZT4odHlwZVN0cmluZyk7CisgICAgYXV0byB0eXBlID0g
UHJvdG9jb2w6OkhlbHBlcnM6OnBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxQcm90b2NvbDo6RGVi
dWdnZXI6OkJyZWFrcG9pbnRBY3Rpb246OlR5cGU+KHR5cGVTdHJpbmcpOwogICAgIGlmICghdHlw
ZSkgewogICAgICAgICBlcnJvclN0cmluZyA9IG1ha2VTdHJpbmcoIlVua25vd24gYnJlYWtwb2lu
dCBhY3Rpb24gdHlwZTogIl9zLCB0eXBlU3RyaW5nKTsKICAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKICAgICB9CiAKICAgICBzd2l0Y2ggKCp0eXBlKSB7Ci0gICAgY2FzZSBJbnNwZWN0b3I6
OlByb3RvY29sOjpEZWJ1Z2dlcjo6QnJlYWtwb2ludEFjdGlvbjo6VHlwZTo6TG9nOgorICAgIGNh
c2UgUHJvdG9jb2w6OkRlYnVnZ2VyOjpCcmVha3BvaW50QWN0aW9uOjpUeXBlOjpMb2c6CiAgICAg
ICAgIHJldHVybiBKU0M6OkJyZWFrcG9pbnQ6OkFjdGlvbjo6VHlwZTo6TG9nOwogCi0gICAgY2Fz
ZSBJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6QnJlYWtwb2ludEFjdGlvbjo6VHlwZTo6
RXZhbHVhdGU6CisgICAgY2FzZSBQcm90b2NvbDo6RGVidWdnZXI6OkJyZWFrcG9pbnRBY3Rpb246
OlR5cGU6OkV2YWx1YXRlOgogICAgICAgICByZXR1cm4gSlNDOjpCcmVha3BvaW50OjpBY3Rpb246
OlR5cGU6OkV2YWx1YXRlOwogCi0gICAgY2FzZSBJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dl
cjo6QnJlYWtwb2ludEFjdGlvbjo6VHlwZTo6U291bmQ6CisgICAgY2FzZSBQcm90b2NvbDo6RGVi
dWdnZXI6OkJyZWFrcG9pbnRBY3Rpb246OlR5cGU6OlNvdW5kOgogICAgICAgICByZXR1cm4gSlND
OjpCcmVha3BvaW50OjpBY3Rpb246OlR5cGU6OlNvdW5kOwogCi0gICAgY2FzZSBJbnNwZWN0b3I6
OlByb3RvY29sOjpEZWJ1Z2dlcjo6QnJlYWtwb2ludEFjdGlvbjo6VHlwZTo6UHJvYmU6CisgICAg
Y2FzZSBQcm90b2NvbDo6RGVidWdnZXI6OkJyZWFrcG9pbnRBY3Rpb246OlR5cGU6OlByb2JlOgog
ICAgICAgICByZXR1cm4gSlNDOjpCcmVha3BvaW50OjpBY3Rpb246OlR5cGU6OlByb2JlOwogICAg
IH0KIApAQCAtOTEsMzAgKzkxLDI5IEBAIHN0YXRpYyBPcHRpb25hbDxKU0M6OkJyZWFrcG9pbnQ6
OkFjdGlvbjo6VHlwZT4gYnJlYWtwb2ludEFjdGlvblR5cGVGb3JTdHJpbmcoRXJyCiB9CiAKIHRl
bXBsYXRlIDx0eXBlbmFtZSBUPgotc3RhdGljIFQgcGFyc2VCcmVha3BvaW50T3B0aW9ucyhFcnJv
clN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IEpTT046Ok9iamVjdCogb3B0aW9uc1BheWxvYWQs
IEZ1bmN0aW9uPFQoY29uc3QgU3RyaW5nJiwgSlNDOjpCcmVha3BvaW50OjpBY3Rpb25zVmVjdG9y
JiYsIGJvb2wsIHNpemVfdCk+IGNhbGxiYWNrKQorc3RhdGljIFQgcGFyc2VCcmVha3BvaW50T3B0
aW9ucyhQcm90b2NvbDo6RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiYmIG9wdGlvbnMsIEZ1bmN0aW9uPFQoY29uc3QgU3RyaW5nJiwgSlNDOjpCcmVha3BvaW50
OjpBY3Rpb25zVmVjdG9yJiYsIGJvb2wsIHNpemVfdCk+IGNhbGxiYWNrKQogewogICAgIFN0cmlu
ZyBjb25kaXRpb247CiAgICAgSlNDOjpCcmVha3BvaW50OjpBY3Rpb25zVmVjdG9yIGFjdGlvbnM7
CiAgICAgYm9vbCBhdXRvQ29udGludWUgPSBmYWxzZTsKICAgICBzaXplX3QgaWdub3JlQ291bnQg
PSAwOwogCi0gICAgaWYgKG9wdGlvbnNQYXlsb2FkKSB7Ci0gICAgICAgIG9wdGlvbnNQYXlsb2Fk
LT5nZXRTdHJpbmcoImNvbmRpdGlvbiJfcywgY29uZGl0aW9uKTsKKyAgICBpZiAob3B0aW9ucykg
eworICAgICAgICBjb25kaXRpb24gPSBvcHRpb25zLT5nZXRTdHJpbmcoUHJvdG9jb2w6OkRlYnVn
Z2VyOjpCcmVha3BvaW50T3B0aW9uczo6Y29uZGl0aW9uS2V5KTsKIAotICAgICAgICBSZWZQdHI8
SlNPTjo6QXJyYXk+IGFjdGlvbnNQYXlsb2FkOwotICAgICAgICBvcHRpb25zUGF5bG9hZC0+Z2V0
QXJyYXkoImFjdGlvbnMiX3MsIGFjdGlvbnNQYXlsb2FkKTsKKyAgICAgICAgYXV0byBhY3Rpb25z
UGF5bG9hZCA9IG9wdGlvbnMtPmdldEFycmF5KFByb3RvY29sOjpEZWJ1Z2dlcjo6QnJlYWtwb2lu
dE9wdGlvbnM6OmFjdGlvbnNLZXkpOwogICAgICAgICBpZiAoYXV0byBjb3VudCA9IGFjdGlvbnNQ
YXlsb2FkID8gYWN0aW9uc1BheWxvYWQtPmxlbmd0aCgpIDogMCkgewogICAgICAgICAgICAgYWN0
aW9ucy5yZXNlcnZlQ2FwYWNpdHkoY291bnQpOwogCiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewotICAgICAgICAgICAgICAgIFJlZlB0cjxKU09OOjpP
YmplY3Q+IGFjdGlvbk9iamVjdDsKLSAgICAgICAgICAgICAgICBpZiAoIWFjdGlvbnNQYXlsb2Fk
LT5nZXQoaSktPmFzT2JqZWN0KGFjdGlvbk9iamVjdCkpIHsKKyAgICAgICAgICAgICAgICBhdXRv
IGFjdGlvbk9iamVjdCA9IGFjdGlvbnNQYXlsb2FkLT5nZXQoaSktPmFzT2JqZWN0KCk7CisgICAg
ICAgICAgICAgICAgaWYgKCFhY3Rpb25PYmplY3QpIHsKICAgICAgICAgICAgICAgICAgICAgZXJy
b3JTdHJpbmcgPSAiVW5leHBlY3RlZCBub24tb2JqZWN0IGl0ZW0gaW4gZ2l2ZW4gYWN0aW9ucyJf
czsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgICAgICBTdHJpbmcgYWN0aW9uVHlwZVN0cmluZzsKLSAgICAgICAgICAgICAg
ICBpZiAoIWFjdGlvbk9iamVjdC0+Z2V0U3RyaW5nKCJ0eXBlIl9zLCBhY3Rpb25UeXBlU3RyaW5n
KSkgeworICAgICAgICAgICAgICAgIGF1dG8gYWN0aW9uVHlwZVN0cmluZyA9IGFjdGlvbk9iamVj
dC0+Z2V0U3RyaW5nKFByb3RvY29sOjpEZWJ1Z2dlcjo6QnJlYWtwb2ludEFjdGlvbjo6dHlwZUtl
eSk7CisgICAgICAgICAgICAgICAgaWYgKCFhY3Rpb25UeXBlU3RyaW5nKSB7CiAgICAgICAgICAg
ICAgICAgICAgIGVycm9yU3RyaW5nID0gIk1pc3NpbmcgdHlwZSBmb3IgaXRlbSBpbiBnaXZlbiBh
Y3Rpb25zIl9zOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4geyB9OwogICAgICAgICAgICAg
ICAgIH0KQEAgLTEyNSwzMyArMTI0LDMzIEBAIHN0YXRpYyBUIHBhcnNlQnJlYWtwb2ludE9wdGlv
bnMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBKU09OOjpPYmplY3QqIG9wCiAKICAg
ICAgICAgICAgICAgICBKU0M6OkJyZWFrcG9pbnQ6OkFjdGlvbiBhY3Rpb24oKmFjdGlvblR5cGUp
OwogCi0gICAgICAgICAgICAgICAgYWN0aW9uT2JqZWN0LT5nZXRTdHJpbmcoImRhdGEiX3MsIGFj
dGlvbi5kYXRhKTsKKyAgICAgICAgICAgICAgICBhY3Rpb24uZGF0YSA9IGFjdGlvbk9iamVjdC0+
Z2V0U3RyaW5nKFByb3RvY29sOjpEZWJ1Z2dlcjo6QnJlYWtwb2ludEFjdGlvbjo6ZGF0YUtleSk7
CiAKICAgICAgICAgICAgICAgICAvLyBTcGVjaWZ5aW5nIGFuIGlkZW50aWZpZXIgaXMgb3B0aW9u
YWwuIFRoZXkgYXJlIHVzZWQgdG8gY29ycmVsYXRlIHByb2JlIHNhbXBsZXMKICAgICAgICAgICAg
ICAgICAvLyBpbiB0aGUgZnJvbnRlbmQgYWNyb3NzIG11bHRpcGxlIGJhY2tlbmQgcHJvYmUgYWN0
aW9ucyBhbmQgc2VncmVnYXRlIG9iamVjdCBncm91cHMuCi0gICAgICAgICAgICAgICAgYWN0aW9u
T2JqZWN0LT5nZXRJbnRlZ2VyKCJpZCJfcywgYWN0aW9uLmlkKTsKKyAgICAgICAgICAgICAgICBh
Y3Rpb24uaWQgPSBhY3Rpb25PYmplY3QtPmdldEludGVnZXIoUHJvdG9jb2w6OkRlYnVnZ2VyOjpC
cmVha3BvaW50QWN0aW9uOjppZEtleSkudmFsdWVPcihKU0M6Om5vQnJlYWtwb2ludEFjdGlvbklE
KTsKIAogICAgICAgICAgICAgICAgIGFjdGlvbnMuYXBwZW5kKFdURk1vdmUoYWN0aW9uKSk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBvcHRpb25zUGF5bG9hZC0+Z2V0Qm9v
bGVhbigiYXV0b0NvbnRpbnVlIl9zLCBhdXRvQ29udGludWUpOwotICAgICAgICBvcHRpb25zUGF5
bG9hZC0+Z2V0SW50ZWdlcigiaWdub3JlQ291bnQiX3MsIGlnbm9yZUNvdW50KTsKKyAgICAgICAg
YXV0b0NvbnRpbnVlID0gb3B0aW9ucy0+Z2V0Qm9vbGVhbihQcm90b2NvbDo6RGVidWdnZXI6OkJy
ZWFrcG9pbnRPcHRpb25zOjphdXRvQ29udGludWVLZXkpLnZhbHVlT3IoZmFsc2UpOworICAgICAg
ICBpZ25vcmVDb3VudCA9IG9wdGlvbnMtPmdldEludGVnZXIoUHJvdG9jb2w6OkRlYnVnZ2VyOjpC
cmVha3BvaW50T3B0aW9uczo6aWdub3JlQ291bnRLZXkpLnZhbHVlT3IoMCk7CiAgICAgfQogCiAg
ICAgcmV0dXJuIGNhbGxiYWNrKGNvbmRpdGlvbiwgV1RGTW92ZShhY3Rpb25zKSwgYXV0b0NvbnRp
bnVlLCBpZ25vcmVDb3VudCk7CiB9CiAKLU9wdGlvbmFsPEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6
OlByb3RvY29sQnJlYWtwb2ludD4gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6UHJvdG9jb2xCcmVh
a3BvaW50Ojpmcm9tUGF5bG9hZChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIEpTQzo6U291cmNl
SUQgc291cmNlSUQsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIHVuc2lnbmVkIGNvbHVtbk51bWJlciwg
Y29uc3QgSlNPTjo6T2JqZWN0KiBvcHRpb25zUGF5bG9hZCkKK09wdGlvbmFsPEluc3BlY3RvckRl
YnVnZ2VyQWdlbnQ6OlByb3RvY29sQnJlYWtwb2ludD4gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6
UHJvdG9jb2xCcmVha3BvaW50Ojpmcm9tUGF5bG9hZChQcm90b2NvbDo6RXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBKU0M6OlNvdXJjZUlEIHNvdXJjZUlELCB1bnNpZ25lZCBsaW5lTnVtYmVyLCB1
bnNpZ25lZCBjb2x1bW5OdW1iZXIsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgb3B0aW9ucykKIHsK
LSAgICByZXR1cm4gcGFyc2VCcmVha3BvaW50T3B0aW9uczxPcHRpb25hbDxQcm90b2NvbEJyZWFr
cG9pbnQ+PihlcnJvclN0cmluZywgb3B0aW9uc1BheWxvYWQsIFsmXSAoY29uc3QgU3RyaW5nJiBj
b25kaXRpb24sIEpTQzo6QnJlYWtwb2ludDo6QWN0aW9uc1ZlY3RvciYmIGFjdGlvbnMsIGJvb2wg
YXV0b0NvbnRpbnVlLCBzaXplX3QgaWdub3JlQ291bnQpIC0+IE9wdGlvbmFsPFByb3RvY29sQnJl
YWtwb2ludD4geworICAgIHJldHVybiBwYXJzZUJyZWFrcG9pbnRPcHRpb25zPE9wdGlvbmFsPFBy
b3RvY29sQnJlYWtwb2ludD4+KGVycm9yU3RyaW5nLCBXVEZNb3ZlKG9wdGlvbnMpLCBbJl0gKGNv
bnN0IFN0cmluZyYgY29uZGl0aW9uLCBKU0M6OkJyZWFrcG9pbnQ6OkFjdGlvbnNWZWN0b3ImJiBh
Y3Rpb25zLCBib29sIGF1dG9Db250aW51ZSwgc2l6ZV90IGlnbm9yZUNvdW50KSAtPiBPcHRpb25h
bDxQcm90b2NvbEJyZWFrcG9pbnQ+IHsKICAgICAgICAgcmV0dXJuIFByb3RvY29sQnJlYWtwb2lu
dChzb3VyY2VJRCwgbGluZU51bWJlciwgY29sdW1uTnVtYmVyLCBjb25kaXRpb24sIFdURk1vdmUo
YWN0aW9ucyksIGF1dG9Db250aW51ZSwgaWdub3JlQ291bnQpOwogICAgIH0pOwogfQogCi1PcHRp
b25hbDxJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpQcm90b2NvbEJyZWFrcG9pbnQ+IEluc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQ6OlByb3RvY29sQnJlYWtwb2ludDo6ZnJvbVBheWxvYWQoRXJyb3JTdHJp
bmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHVybCwgYm9vbCBpc1JlZ2V4LCB1bnNpZ25l
ZCBsaW5lTnVtYmVyLCB1bnNpZ25lZCBjb2x1bW5OdW1iZXIsIGNvbnN0IEpTT046Ok9iamVjdCog
b3B0aW9uc1BheWxvYWQpCitPcHRpb25hbDxJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpQcm90b2Nv
bEJyZWFrcG9pbnQ+IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OlByb3RvY29sQnJlYWtwb2ludDo6
ZnJvbVBheWxvYWQoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3Ry
aW5nJiB1cmwsIGJvb2wgaXNSZWdleCwgdW5zaWduZWQgbGluZU51bWJlciwgdW5zaWduZWQgY29s
dW1uTnVtYmVyLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIG9wdGlvbnMpCiB7Ci0gICAgcmV0dXJu
IHBhcnNlQnJlYWtwb2ludE9wdGlvbnM8T3B0aW9uYWw8UHJvdG9jb2xCcmVha3BvaW50Pj4oZXJy
b3JTdHJpbmcsIG9wdGlvbnNQYXlsb2FkLCBbJl0gKGNvbnN0IFN0cmluZyYgY29uZGl0aW9uLCBK
U0M6OkJyZWFrcG9pbnQ6OkFjdGlvbnNWZWN0b3ImJiBhY3Rpb25zLCBib29sIGF1dG9Db250aW51
ZSwgc2l6ZV90IGlnbm9yZUNvdW50KSAtPiBPcHRpb25hbDxQcm90b2NvbEJyZWFrcG9pbnQ+IHsK
KyAgICByZXR1cm4gcGFyc2VCcmVha3BvaW50T3B0aW9uczxPcHRpb25hbDxQcm90b2NvbEJyZWFr
cG9pbnQ+PihlcnJvclN0cmluZywgV1RGTW92ZShvcHRpb25zKSwgWyZdIChjb25zdCBTdHJpbmcm
IGNvbmRpdGlvbiwgSlNDOjpCcmVha3BvaW50OjpBY3Rpb25zVmVjdG9yJiYgYWN0aW9ucywgYm9v
bCBhdXRvQ29udGludWUsIHNpemVfdCBpZ25vcmVDb3VudCkgLT4gT3B0aW9uYWw8UHJvdG9jb2xC
cmVha3BvaW50PiB7CiAgICAgICAgIHJldHVybiBQcm90b2NvbEJyZWFrcG9pbnQodXJsLCBpc1Jl
Z2V4LCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIsIGNvbmRpdGlvbiwgV1RGTW92ZShhY3Rpb25z
KSwgYXV0b0NvbnRpbnVlLCBpZ25vcmVDb3VudCk7CiAgICAgfSk7CiB9CkBAIC0yMDcsOSArMjA2
LDkgQEAgYm9vbCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpQcm90b2NvbEJyZWFrcG9pbnQ6Om1h
dGNoZXNTY3JpcHRVUkwoY29uc3QgU3RyaW5nJgogICAgIHJldHVybiBtX3VybCA9PSBzY3JpcHRV
Ukw7CiB9CiAKLVJlZlB0cjxKU0M6OkJyZWFrcG9pbnQ+IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6
OmRlYnVnZ2VyQnJlYWtwb2ludEZyb21QYXlsb2FkKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywg
Y29uc3QgSlNPTjo6T2JqZWN0KiBvcHRpb25zUGF5bG9hZCkKK1JlZlB0cjxKU0M6OkJyZWFrcG9p
bnQ+IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRlYnVnZ2VyQnJlYWtwb2ludEZyb21QYXlsb2Fk
KFByb3RvY29sOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIFJlZlB0cjxKU09OOjpPYmplY3Q+
JiYgb3B0aW9ucykKIHsKLSAgICByZXR1cm4gcGFyc2VCcmVha3BvaW50T3B0aW9uczxSZWZQdHI8
SlNDOjpCcmVha3BvaW50Pj4oZXJyb3JTdHJpbmcsIG9wdGlvbnNQYXlsb2FkLCBbXSAoY29uc3Qg
U3RyaW5nJiBjb25kaXRpb24sIEpTQzo6QnJlYWtwb2ludDo6QWN0aW9uc1ZlY3RvciYmIGFjdGlv
bnMsIGJvb2wgYXV0b0NvbnRpbnVlLCBzaXplX3QgaWdub3JlQ291bnQpIHsKKyAgICByZXR1cm4g
cGFyc2VCcmVha3BvaW50T3B0aW9uczxSZWZQdHI8SlNDOjpCcmVha3BvaW50Pj4oZXJyb3JTdHJp
bmcsIFdURk1vdmUob3B0aW9ucyksIFtdIChjb25zdCBTdHJpbmcmIGNvbmRpdGlvbiwgSlNDOjpC
cmVha3BvaW50OjpBY3Rpb25zVmVjdG9yJiYgYWN0aW9ucywgYm9vbCBhdXRvQ29udGludWUsIHNp
emVfdCBpZ25vcmVDb3VudCkgewogICAgICAgICByZXR1cm4gSlNDOjpCcmVha3BvaW50OjpjcmVh
dGUoSlNDOjpub0JyZWFrcG9pbnRJRCwgY29uZGl0aW9uLCBXVEZNb3ZlKGFjdGlvbnMpLCBhdXRv
Q29udGludWUsIGlnbm9yZUNvdW50KTsKICAgICB9KTsKIH0KQEAgLTIzNCwxMCArMjMzLDEwIEBA
IHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5k
KEZyb250ZW5kUm91dGVyKiwgQmFja2VuCiB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6Ondp
bGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKERpc2Nvbm5lY3RSZWFzb24gcmVhc29uKQogewog
ICAgIGlmIChlbmFibGVkKCkpCi0gICAgICAgIGRpc2FibGUocmVhc29uID09IERpc2Nvbm5lY3RS
ZWFzb246Okluc3BlY3RlZFRhcmdldERlc3Ryb3llZCk7CisgICAgICAgIGludGVybmFsRGlzYWJs
ZShyZWFzb24gPT0gRGlzY29ubmVjdFJlYXNvbjo6SW5zcGVjdGVkVGFyZ2V0RGVzdHJveWVkKTsK
IH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjplbmFibGUoKQordm9pZCBJbnNwZWN0
b3JEZWJ1Z2dlckFnZW50OjppbnRlcm5hbEVuYWJsZSgpCiB7CiAgICAgbV9lbmFibGVkID0gdHJ1
ZTsKIApAQCAtMjU3LDcgKzI1Niw3IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZW5h
YmxlKCkKICAgICB9CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlzYWJsZShi
b29sIGlzQmVpbmdEZXN0cm95ZWQpCit2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmludGVy
bmFsRGlzYWJsZShib29sIGlzQmVpbmdEZXN0cm95ZWQpCiB7CiAgICAgZm9yIChhdXRvKiBsaXN0
ZW5lciA6IGNvcHlUb1ZlY3RvcihtX2xpc3RlbmVycykpCiAgICAgICAgIGxpc3RlbmVyLT5kZWJ1
Z2dlcldhc0Rpc2FibGVkKCk7CkBAIC0yNzcsMTkgKzI3NiwyMSBAQCB2b2lkIEluc3BlY3RvckRl
YnVnZ2VyQWdlbnQ6OmRpc2FibGUoYm9vbCBpc0JlaW5nRGVzdHJveWVkKQogICAgIG1fZW5hYmxl
ZCA9IGZhbHNlOwogfQogCi12b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmVuYWJsZShFcnJv
clN0cmluZyYgZXJyb3JTdHJpbmcpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNw
ZWN0b3JEZWJ1Z2dlckFnZW50OjplbmFibGUoKQogewotICAgIGlmIChlbmFibGVkKCkpIHsKLSAg
ICAgICAgZXJyb3JTdHJpbmcgPSAiRGVidWdnZXIgZG9tYWluIGFscmVhZHkgZW5hYmxlZCJfczsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoZW5hYmxlZCgpKQorICAgICAgICByZXR1
cm4gbWFrZVVuZXhwZWN0ZWQoIkRlYnVnZ2VyIGRvbWFpbiBhbHJlYWR5IGVuYWJsZWQiX3MpOwog
Ci0gICAgZW5hYmxlKCk7CisgICAgaW50ZXJuYWxFbmFibGUoKTsKKworICAgIHJldHVybiB7IH07
CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlzYWJsZShFcnJvclN0cmluZyYp
CitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojpk
aXNhYmxlKCkKIHsKLSAgICBkaXNhYmxlKGZhbHNlKTsKKyAgICBpbnRlcm5hbERpc2FibGUoZmFs
c2UpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAogYm9vbCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50
OjpicmVha3BvaW50c0FjdGl2ZSgpIGNvbnN0CkBAIC0yOTcsMjggKzI5OCwzMCBAQCBib29sIElu
c3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmJyZWFrcG9pbnRzQWN0aXZlKCkgY29uc3QKICAgICByZXR1
cm4gbV9kZWJ1Z2dlci5icmVha3BvaW50c0FjdGl2ZSgpOwogfQogCi12b2lkIEluc3BlY3RvckRl
YnVnZ2VyQWdlbnQ6OnNldEFzeW5jU3RhY2tUcmFjZURlcHRoKEVycm9yU3RyaW5nJiBlcnJvclN0
cmluZywgaW50IGRlcHRoKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9y
RGVidWdnZXJBZ2VudDo6c2V0QXN5bmNTdGFja1RyYWNlRGVwdGgoaW50IGRlcHRoKQogewogICAg
IGlmIChtX2FzeW5jU3RhY2tUcmFjZURlcHRoID09IGRlcHRoKQotICAgICAgICByZXR1cm47Cisg
ICAgICAgIHJldHVybiB7IH07CiAKLSAgICBpZiAoZGVwdGggPCAwKSB7Ci0gICAgICAgIGVycm9y
U3RyaW5nID0gIlVuZXhwZWN0ZWQgbmVnYXRpdmUgZGVwdGgiX3M7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9CisgICAgaWYgKGRlcHRoIDwgMCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVk
KCJVbmV4cGVjdGVkIG5lZ2F0aXZlIGRlcHRoIl9zKTsKIAogICAgIG1fYXN5bmNTdGFja1RyYWNl
RGVwdGggPSBkZXB0aDsKIAogICAgIGlmICghbV9hc3luY1N0YWNrVHJhY2VEZXB0aCkKICAgICAg
ICAgY2xlYXJBc3luY1N0YWNrVHJhY2VEYXRhKCk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12
b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldEJyZWFrcG9pbnRzQWN0aXZlKEVycm9yU3Ry
aW5nJiwgYm9vbCBhY3RpdmUpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0
b3JEZWJ1Z2dlckFnZW50OjpzZXRCcmVha3BvaW50c0FjdGl2ZShib29sIGFjdGl2ZSkKIHsKICAg
ICBpZiAoYWN0aXZlKQogICAgICAgICBtX2RlYnVnZ2VyLmFjdGl2YXRlQnJlYWtwb2ludHMoKTsK
ICAgICBlbHNlCiAgICAgICAgIG1fZGVidWdnZXIuZGVhY3RpdmF0ZUJyZWFrcG9pbnRzKCk7CisK
KyAgICByZXR1cm4geyB9OwogfQogCiBib29sIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmlzUGF1
c2VkKCkgY29uc3QKQEAgLTM0MiwyMCArMzQ1LDIwIEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJB
Z2VudDo6dXBkYXRlUGF1c2VSZWFzb25BbmREYXRhKERlYnVnZ2VyRnJvbnRlbmREaXNwYXRjaGVy
CiAgICAgbV9wYXVzZURhdGEgPSBXVEZNb3ZlKGRhdGEpOwogfQogCi1zdGF0aWMgUmVmUHRyPEpT
T046Ok9iamVjdD4gYnVpbGRBc3NlcnRQYXVzZVJlYXNvbihjb25zdCBTdHJpbmcmIG1lc3NhZ2Up
CitzdGF0aWMgUmVmPEpTT046Ok9iamVjdD4gYnVpbGRBc3NlcnRQYXVzZVJlYXNvbihjb25zdCBT
dHJpbmcmIG1lc3NhZ2UpCiB7CiAgICAgYXV0byByZWFzb24gPSBQcm90b2NvbDo6RGVidWdnZXI6
OkFzc2VydFBhdXNlUmVhc29uOjpjcmVhdGUoKS5yZWxlYXNlKCk7CiAgICAgaWYgKCFtZXNzYWdl
LmlzTnVsbCgpKQogICAgICAgICByZWFzb24tPnNldE1lc3NhZ2UobWVzc2FnZSk7Ci0gICAgcmV0
dXJuIHJlYXNvbi0+b3BlbkFjY2Vzc29ycygpOworICAgIHJldHVybiAqcmVhc29uLT5hc09iamVj
dCgpOwogfQogCi1zdGF0aWMgUmVmUHRyPEpTT046Ok9iamVjdD4gYnVpbGRDU1BWaW9sYXRpb25Q
YXVzZVJlYXNvbihjb25zdCBTdHJpbmcmIGRpcmVjdGl2ZVRleHQpCitzdGF0aWMgUmVmPEpTT046
Ok9iamVjdD4gYnVpbGRDU1BWaW9sYXRpb25QYXVzZVJlYXNvbihjb25zdCBTdHJpbmcmIGRpcmVj
dGl2ZVRleHQpCiB7CiAgICAgYXV0byByZWFzb24gPSBQcm90b2NvbDo6RGVidWdnZXI6OkNTUFZp
b2xhdGlvblBhdXNlUmVhc29uOjpjcmVhdGUoKQogICAgICAgICAuc2V0RGlyZWN0aXZlKGRpcmVj
dGl2ZVRleHQpCiAgICAgICAgIC5yZWxlYXNlKCk7Ci0gICAgcmV0dXJuIHJlYXNvbi0+b3BlbkFj
Y2Vzc29ycygpOworICAgIHJldHVybiAqcmVhc29uLT5hc09iamVjdCgpOwogfQogCiBSZWZQdHI8
SlNPTjo6T2JqZWN0PiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpidWlsZEJyZWFrcG9pbnRQYXVz
ZVJlYXNvbihKU0M6OkJyZWFrcG9pbnRJRCBkZWJ1Z2dlckJyZWFrcG9pbnRJRCkKQEAgLTM2OCw3
ICszNzEsNyBAQCBSZWZQdHI8SlNPTjo6T2JqZWN0PiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojpi
dWlsZEJyZWFrcG9pbnRQYXVzZVJlYXNvbihKU0M6OkJyZQogICAgICAgICAgICAgICAgIGF1dG8g
cmVhc29uID0gUHJvdG9jb2w6OkRlYnVnZ2VyOjpCcmVha3BvaW50UGF1c2VSZWFzb246OmNyZWF0
ZSgpCiAgICAgICAgICAgICAgICAgICAgIC5zZXRCcmVha3BvaW50SWQocHJvdG9jb2xCcmVha3Bv
aW50SUQpCiAgICAgICAgICAgICAgICAgICAgIC5yZWxlYXNlKCk7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIHJlYXNvbi0+b3BlbkFjY2Vzc29ycygpOworICAgICAgICAgICAgICAgIHJldHVybiBy
ZWFzb24tPmFzT2JqZWN0KCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC0z
ODYsNyArMzg5LDExIEBAIFJlZlB0cjxKU09OOjpPYmplY3Q+IEluc3BlY3RvckRlYnVnZ2VyQWdl
bnQ6OmJ1aWxkRXhjZXB0aW9uUGF1c2VSZWFzb24oSlNDOjpKU1ZhCiAgICAgaWYgKGluamVjdGVk
U2NyaXB0Lmhhc05vVmFsdWUoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1
cm4gaW5qZWN0ZWRTY3JpcHQud3JhcE9iamVjdChleGNlcHRpb24sIEluc3BlY3RvckRlYnVnZ2Vy
QWdlbnQ6OmJhY2t0cmFjZU9iamVjdEdyb3VwKS0+b3BlbkFjY2Vzc29ycygpOworICAgIGF1dG8g
ZXhjZXB0aW9uVmFsdWUgPSBpbmplY3RlZFNjcmlwdC53cmFwT2JqZWN0KGV4Y2VwdGlvbiwgSW5z
cGVjdG9yRGVidWdnZXJBZ2VudDo6YmFja3RyYWNlT2JqZWN0R3JvdXApOworICAgIGlmICghZXhj
ZXB0aW9uVmFsdWUpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuIGV4Y2Vw
dGlvblZhbHVlLT5hc09iamVjdCgpOwogfQogCiB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6
OmhhbmRsZUNvbnNvbGVBc3NlcnQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQpAQCAtNDkyLDcgKzQ5
OSw3IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlkRGlzcGF0Y2hBc3luY0NhbGwo
KQogICAgICAgICBtX3BlbmRpbmdBc3luY0NhbGxzLnJlbW92ZShpZGVudGlmaWVyKTsKIH0KIAot
c3RhdGljIFJlZlB0cjxQcm90b2NvbDo6RGVidWdnZXI6OkxvY2F0aW9uPiBidWlsZERlYnVnZ2Vy
TG9jYXRpb24oY29uc3QgSlNDOjpCcmVha3BvaW50JiBkZWJ1Z2dlckJyZWFrcG9pbnQpCitzdGF0
aWMgUmVmPFByb3RvY29sOjpEZWJ1Z2dlcjo6TG9jYXRpb24+IGJ1aWxkRGVidWdnZXJMb2NhdGlv
bihjb25zdCBKU0M6OkJyZWFrcG9pbnQmIGRlYnVnZ2VyQnJlYWtwb2ludCkKIHsKICAgICBBU1NF
UlQoZGVidWdnZXJCcmVha3BvaW50LmlzUmVzb2x2ZWQoKSk7CiAKQEAgLTUwMSw1MCArNTA4LDQ5
IEBAIHN0YXRpYyBSZWZQdHI8UHJvdG9jb2w6OkRlYnVnZ2VyOjpMb2NhdGlvbj4gYnVpbGREZWJ1
Z2dlckxvY2F0aW9uKGNvbnN0IEpTQzo6QnJlCiAgICAgICAgIC5zZXRMaW5lTnVtYmVyKGRlYnVn
Z2VyQnJlYWtwb2ludC5saW5lTnVtYmVyKCkpCiAgICAgICAgIC5yZWxlYXNlKCk7CiAgICAgbG9j
YXRpb24tPnNldENvbHVtbk51bWJlcihkZWJ1Z2dlckJyZWFrcG9pbnQuY29sdW1uTnVtYmVyKCkp
OwotCiAgICAgcmV0dXJuIGxvY2F0aW9uOwogfQogCi1zdGF0aWMgYm9vbCBwYXJzZUxvY2F0aW9u
KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgSlNPTjo6T2JqZWN0JiBsb2NhdGlvbiwg
SlNDOjpTb3VyY2VJRCYgc291cmNlSUQsIHVuc2lnbmVkJiBsaW5lTnVtYmVyLCB1bnNpZ25lZCYg
Y29sdW1uTnVtYmVyKQorc3RhdGljIGJvb2wgcGFyc2VMb2NhdGlvbihQcm90b2NvbDo6RXJyb3JT
dHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBKU09OOjpPYmplY3QmIGxvY2F0aW9uLCBKU0M6OlNv
dXJjZUlEJiBzb3VyY2VJRCwgdW5zaWduZWQmIGxpbmVOdW1iZXIsIHVuc2lnbmVkJiBjb2x1bW5O
dW1iZXIpCiB7Ci0gICAgaWYgKCFsb2NhdGlvbi5nZXRJbnRlZ2VyKCJsaW5lTnVtYmVyIl9zLCBs
aW5lTnVtYmVyKSkgeworICAgIGF1dG8gbGluZU51bWJlclZhbHVlID0gbG9jYXRpb24uZ2V0SW50
ZWdlcihQcm90b2NvbDo6RGVidWdnZXI6OkxvY2F0aW9uOjpsaW5lTnVtYmVyS2V5KTsKKyAgICBp
ZiAoIWxpbmVOdW1iZXJWYWx1ZSkgewogICAgICAgICBlcnJvclN0cmluZyA9ICJVbmV4cGVjdGVk
IG5vbi1pbnRlZ2VyIGxpbmVOdW1iZXIgaW4gZ2l2ZW4gbG9jYXRpb24iX3M7CiAgICAgICAgIHNv
dXJjZUlEID0gSlNDOjpub1NvdXJjZUlEOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQog
Ci0gICAgU3RyaW5nIHNjcmlwdElEU3RyOwotICAgIGlmICghbG9jYXRpb24uZ2V0U3RyaW5nKCJz
Y3JpcHRJZCJfcywgc2NyaXB0SURTdHIpKSB7CisgICAgbGluZU51bWJlciA9ICpsaW5lTnVtYmVy
VmFsdWU7CisKKyAgICBhdXRvIHNjcmlwdElEU3RyID0gbG9jYXRpb24uZ2V0U3RyaW5nKFByb3Rv
Y29sOjpEZWJ1Z2dlcjo6TG9jYXRpb246OnNjcmlwdElkS2V5KTsKKyAgICBpZiAoIXNjcmlwdElE
U3RyKSB7CiAgICAgICAgIHNvdXJjZUlEID0gSlNDOjpub1NvdXJjZUlEOwogICAgICAgICBlcnJv
clN0cmluZyA9ICJVbmV4ZXBjdGVkIG5vbi1zdHJpbmcgc2NyaXB0SWQgaW4gZ2l2ZW4gbG9jYXRp
b24iX3M7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKICAgICBzb3VyY2VJRCA9IHNj
cmlwdElEU3RyLnRvSW50UHRyKCk7Ci0gICAgY29sdW1uTnVtYmVyID0gMDsKLSAgICBsb2NhdGlv
bi5nZXRJbnRlZ2VyKCJjb2x1bW5OdW1iZXIiX3MsIGNvbHVtbk51bWJlcik7CisgICAgY29sdW1u
TnVtYmVyID0gbG9jYXRpb24uZ2V0SW50ZWdlcihQcm90b2NvbDo6RGVidWdnZXI6OkxvY2F0aW9u
Ojpjb2x1bW5OdW1iZXJLZXkpLnZhbHVlT3IoMCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZv
aWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0QnJlYWtwb2ludEJ5VXJsKEVycm9yU3RyaW5n
JiBlcnJvclN0cmluZywgaW50IGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxVUkws
IGNvbnN0IFN0cmluZyogb3B0aW9uYWxVUkxSZWdleCwgY29uc3QgaW50KiBvcHRpb25hbENvbHVt
bk51bWJlciwgY29uc3QgSlNPTjo6T2JqZWN0KiBvcHRpb25zUGF5bG9hZCwgUHJvdG9jb2w6OkRl
YnVnZ2VyOjpCcmVha3BvaW50SWQqIG91dEJyZWFrcG9pbnRJZCwgUmVmUHRyPEpTT046OkFycmF5
T2Y8UHJvdG9jb2w6OkRlYnVnZ2VyOjpMb2NhdGlvbj4+JiBvdXRMb2NhdGlvbnMpCitQcm90b2Nv
bDo6RXJyb3JTdHJpbmdPcjxzdGQ6OnR1cGxlPFByb3RvY29sOjpEZWJ1Z2dlcjo6QnJlYWtwb2lu
dElkLCBSZWY8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6RGVidWdnZXI6OkxvY2F0aW9uPj4+PiBJ
bnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZXRCcmVha3BvaW50QnlVcmwoaW50IGxpbmVOdW1iZXIs
IGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIHVybFJlZ2V4LCBPcHRpb25hbDxpbnQ+
JiYgY29sdW1uTnVtYmVyLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIG9wdGlvbnMpCiB7Ci0gICAg
aWYgKCFvcHRpb25hbFVSTCA9PSAhb3B0aW9uYWxVUkxSZWdleCkgewotICAgICAgICBlcnJvclN0
cmluZyA9ICJFaXRoZXIgdXJsIG9yIHVybFJlZ2V4IG11c3QgYmUgc3BlY2lmaWVkIl9zOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghdXJsID09ICF1cmxSZWdleCkKKyAgICAgICAg
cmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJFaXRoZXIgdXJsIG9yIHVybFJlZ2V4IG11c3QgYmUgc3Bl
Y2lmaWVkIl9zKTsKIAotICAgIGF1dG8gcHJvdG9jb2xCcmVha3BvaW50ID0gUHJvdG9jb2xCcmVh
a3BvaW50Ojpmcm9tUGF5bG9hZChlcnJvclN0cmluZywgb3B0aW9uYWxVUkwgPyAqb3B0aW9uYWxV
UkwgOiAqb3B0aW9uYWxVUkxSZWdleCwgISFvcHRpb25hbFVSTFJlZ2V4LCBsaW5lTnVtYmVyLCBv
cHRpb25hbENvbHVtbk51bWJlciA/ICpvcHRpb25hbENvbHVtbk51bWJlciA6IDAsIG9wdGlvbnNQ
YXlsb2FkKTsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKKyAgICBh
dXRvIHByb3RvY29sQnJlYWtwb2ludCA9IFByb3RvY29sQnJlYWtwb2ludDo6ZnJvbVBheWxvYWQo
ZXJyb3JTdHJpbmcsICEhdXJsID8gdXJsIDogdXJsUmVnZXgsICEhdXJsUmVnZXgsIGxpbmVOdW1i
ZXIsIGNvbHVtbk51bWJlci52YWx1ZU9yKDApLCBXVEZNb3ZlKG9wdGlvbnMpKTsKICAgICBpZiAo
IXByb3RvY29sQnJlYWtwb2ludCkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFr
ZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCi0gICAgaWYgKG1fcHJvdG9jb2xCcmVha3BvaW50
Rm9yUHJvdG9jb2xCcmVha3BvaW50SUQuY29udGFpbnMocHJvdG9jb2xCcmVha3BvaW50LT5pZCgp
KSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJCcmVha3BvaW50IGZvciBnaXZlbiBsb2NhdGlv
biBhbHJlYWR5IGV4aXN0cy4iX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKG1f
cHJvdG9jb2xCcmVha3BvaW50Rm9yUHJvdG9jb2xCcmVha3BvaW50SUQuY29udGFpbnMocHJvdG9j
b2xCcmVha3BvaW50LT5pZCgpKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJCcmVh
a3BvaW50IGZvciBnaXZlbiBsb2NhdGlvbiBhbHJlYWR5IGV4aXN0cy4iX3MpOwogCiAgICAgbV9w
cm90b2NvbEJyZWFrcG9pbnRGb3JQcm90b2NvbEJyZWFrcG9pbnRJRC5zZXQocHJvdG9jb2xCcmVh
a3BvaW50LT5pZCgpLCAqcHJvdG9jb2xCcmVha3BvaW50KTsKIAotICAgIG91dExvY2F0aW9ucyA9
IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkRlYnVnZ2VyOjpMb2NhdGlvbj46OmNyZWF0ZSgpOwor
ICAgIGF1dG8gbG9jYXRpb25zID0gSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6RGVidWdnZXI6Okxv
Y2F0aW9uPjo6Y3JlYXRlKCk7CiAKICAgICBmb3IgKGF1dG8mIFtzb3VyY2VJRCwgc2NyaXB0XSA6
IG1fc2NyaXB0cykgewogICAgICAgICBTdHJpbmcgc2NyaXB0VVJMRm9yQnJlYWtwb2ludHMgPSAh
c2NyaXB0LnNvdXJjZVVSTC5pc0VtcHR5KCkgPyBzY3JpcHQuc291cmNlVVJMIDogc2NyaXB0LnVy
bDsKQEAgLTU2MSwyOSArNTY3LDI5IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0
QnJlYWtwb2ludEJ5VXJsKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IGxpCiAKICAgICAg
ICAgZGlkU2V0QnJlYWtwb2ludCgqcHJvdG9jb2xCcmVha3BvaW50LCBkZWJ1Z2dlckJyZWFrcG9p
bnQpOwogCi0gICAgICAgIG91dExvY2F0aW9ucy0+YWRkSXRlbShidWlsZERlYnVnZ2VyTG9jYXRp
b24oZGVidWdnZXJCcmVha3BvaW50KSk7CisgICAgICAgIGxvY2F0aW9ucy0+YWRkSXRlbShidWls
ZERlYnVnZ2VyTG9jYXRpb24oZGVidWdnZXJCcmVha3BvaW50KSk7CiAgICAgfQogCi0gICAgKm91
dEJyZWFrcG9pbnRJZCA9IHByb3RvY29sQnJlYWtwb2ludC0+aWQoKTsKKyAgICByZXR1cm4geyB7
IHByb3RvY29sQnJlYWtwb2ludC0+aWQoKSwgV1RGTW92ZShsb2NhdGlvbnMpIH0gfTsKIH0KIAot
dm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZXRCcmVha3BvaW50KEVycm9yU3RyaW5nJiBl
cnJvclN0cmluZywgY29uc3QgSlNPTjo6T2JqZWN0JiBsb2NhdGlvbiwgY29uc3QgSlNPTjo6T2Jq
ZWN0KiBvcHRpb25zUGF5bG9hZCwgUHJvdG9jb2w6OkRlYnVnZ2VyOjpCcmVha3BvaW50SWQqIG91
dEJyZWFrcG9pbnRJZCwgUmVmUHRyPFByb3RvY29sOjpEZWJ1Z2dlcjo6TG9jYXRpb24+JiBvdXRB
Y3R1YWxMb2NhdGlvbikKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHN0ZDo6dHVwbGU8UHJvdG9j
b2w6OkRlYnVnZ2VyOjpCcmVha3BvaW50SWQsIFJlZjxQcm90b2NvbDo6RGVidWdnZXI6OkxvY2F0
aW9uPj4+IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldEJyZWFrcG9pbnQoUmVmPEpTT046Ok9i
amVjdD4mJiBsb2NhdGlvbiwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBvcHRpb25zKQogeworICAg
IFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIEpTQzo6U291cmNlSUQg
c291cmNlSUQ7CiAgICAgdW5zaWduZWQgbGluZU51bWJlcjsKICAgICB1bnNpZ25lZCBjb2x1bW5O
dW1iZXI7CiAgICAgaWYgKCFwYXJzZUxvY2F0aW9uKGVycm9yU3RyaW5nLCBsb2NhdGlvbiwgc291
cmNlSUQsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlcikpCi0gICAgICAgIHJldHVybjsKKyAgICAg
ICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgIGF1dG8gc2NyaXB0
SXRlcmF0b3IgPSBtX3NjcmlwdHMuZmluZChzb3VyY2VJRCk7Ci0gICAgaWYgKHNjcmlwdEl0ZXJh
dG9yID09IG1fc2NyaXB0cy5lbmQoKSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5n
IHNjcmlwdCBmb3Igc2NyaXB0SWQgaW4gZ2l2ZW4gbG9jYXRpb24iX3M7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9CisgICAgaWYgKHNjcmlwdEl0ZXJhdG9yID09IG1fc2NyaXB0cy5lbmQoKSkKKyAg
ICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJNaXNzaW5nIHNjcmlwdCBmb3Igc2NyaXB0SWQg
aW4gZ2l2ZW4gbG9jYXRpb24iX3MpOwogCi0gICAgYXV0byBwcm90b2NvbEJyZWFrcG9pbnQgPSBQ
cm90b2NvbEJyZWFrcG9pbnQ6OmZyb21QYXlsb2FkKGVycm9yU3RyaW5nLCBzb3VyY2VJRCwgbGlu
ZU51bWJlciwgY29sdW1uTnVtYmVyLCBvcHRpb25zUGF5bG9hZCk7CisgICAgYXV0byBwcm90b2Nv
bEJyZWFrcG9pbnQgPSBQcm90b2NvbEJyZWFrcG9pbnQ6OmZyb21QYXlsb2FkKGVycm9yU3RyaW5n
LCBzb3VyY2VJRCwgbGluZU51bWJlciwgY29sdW1uTnVtYmVyLCBXVEZNb3ZlKG9wdGlvbnMpKTsK
ICAgICBpZiAoIXByb3RvY29sQnJlYWtwb2ludCkKLSAgICAgICAgcmV0dXJuOworICAgICAgICBy
ZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCiAgICAgLy8gRG9uJ3Qgc2F2ZSBg
cHJvdG9jb2xCcmVha3BvaW50YCBpbiBgbV9wcm90b2NvbEJyZWFrcG9pbnRGb3JQcm90b2NvbEJy
ZWFrcG9pbnRJRGAgYmVjYXVzZSBpdAogICAgIC8vIHdhcyBzZXQgc3BlY2lmaWNhbGx5IGZvciB0
aGUgZ2l2ZW4gYHNvdXJjZUlEYCwgd2hpY2ggaXMgdW5pcXVlLCBtZWFuaW5nIHRoYXQgaXQgd2ls
bCBuZXZlcgpAQCAtNTkxLDIwICs1OTcsMTUgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50
OjpzZXRCcmVha3BvaW50KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgSlNPTjoKIAog
ICAgIGF1dG8gZGVidWdnZXJCcmVha3BvaW50ID0gcHJvdG9jb2xCcmVha3BvaW50LT5jcmVhdGVE
ZWJ1Z2dlckJyZWFrcG9pbnQobV9uZXh0RGVidWdnZXJCcmVha3BvaW50SUQrKywgc291cmNlSUQp
OwogCi0gICAgaWYgKCFyZXNvbHZlQnJlYWtwb2ludChzY3JpcHRJdGVyYXRvci0+dmFsdWUsIGRl
YnVnZ2VyQnJlYWtwb2ludCkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiQ291bGQgbm90IHJl
c29sdmUgYnJlYWtwb2ludCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoIXJl
c29sdmVCcmVha3BvaW50KHNjcmlwdEl0ZXJhdG9yLT52YWx1ZSwgZGVidWdnZXJCcmVha3BvaW50
KSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJDb3VsZCBub3QgcmVzb2x2ZSBicmVh
a3BvaW50Il9zKTsKIAotICAgIGlmICghc2V0QnJlYWtwb2ludChkZWJ1Z2dlckJyZWFrcG9pbnQp
KSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIkJyZWFrcG9pbnQgZm9yIGdpdmVuIGxvY2F0aW9u
IGFscmVhZHkgZXhpc3RzIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghc2V0
QnJlYWtwb2ludChkZWJ1Z2dlckJyZWFrcG9pbnQpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoIkJyZWFrcG9pbnQgZm9yIGdpdmVuIGxvY2F0aW9uIGFscmVhZHkgZXhpc3RzIl9zKTsK
IAogICAgIGRpZFNldEJyZWFrcG9pbnQoKnByb3RvY29sQnJlYWtwb2ludCwgZGVidWdnZXJCcmVh
a3BvaW50KTsKIAotICAgIG91dEFjdHVhbExvY2F0aW9uID0gYnVpbGREZWJ1Z2dlckxvY2F0aW9u
KGRlYnVnZ2VyQnJlYWtwb2ludCk7Ci0gICAgKm91dEJyZWFrcG9pbnRJZCA9IHByb3RvY29sQnJl
YWtwb2ludC0+aWQoKTsKKyAgICByZXR1cm4geyB7IHByb3RvY29sQnJlYWtwb2ludC0+aWQoKSwg
YnVpbGREZWJ1Z2dlckxvY2F0aW9uKGRlYnVnZ2VyQnJlYWtwb2ludCkgfSB9OwogfQogCiB2b2lk
IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpZFNldEJyZWFrcG9pbnQoUHJvdG9jb2xCcmVha3Bv
aW50JiBwcm90b2NvbEJyZWFrcG9pbnQsIEpTQzo6QnJlYWtwb2ludCYgZGVidWdnZXJCcmVha3Bv
aW50KQpAQCAtNjMwLDcgKzYzMSw3IEBAIGJvb2wgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0
QnJlYWtwb2ludChKU0M6OkJyZWFrcG9pbnQmIGRlYnVnZ2VyQnJlYWtwb2ludCkKICAgICByZXR1
cm4gbV9kZWJ1Z2dlci5zZXRCcmVha3BvaW50KGRlYnVnZ2VyQnJlYWtwb2ludCk7CiB9CiAKLXZv
aWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6cmVtb3ZlQnJlYWtwb2ludChFcnJvclN0cmluZyYs
IGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpCcmVha3BvaW50SWQmIHByb3Rv
Y29sQnJlYWtwb2ludElEKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9y
RGVidWdnZXJBZ2VudDo6cmVtb3ZlQnJlYWtwb2ludChjb25zdCBQcm90b2NvbDo6RGVidWdnZXI6
OkJyZWFrcG9pbnRJZCYgcHJvdG9jb2xCcmVha3BvaW50SUQpCiB7CiAgICAgbV9wcm90b2NvbEJy
ZWFrcG9pbnRGb3JQcm90b2NvbEJyZWFrcG9pbnRJRC5yZW1vdmUocHJvdG9jb2xCcmVha3BvaW50
SUQpOwogCkBAIC02NDEsMjQgKzY0MiwzNCBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6
OnJlbW92ZUJyZWFrcG9pbnQoRXJyb3JTdHJpbmcmLCBjb25zdCBJbnNwZWN0b3I6OlBybwogICAg
ICAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrZXIobV9kZWJ1Z2dlci52bSgpKTsKICAgICAgICAg
bV9kZWJ1Z2dlci5yZW1vdmVCcmVha3BvaW50KGRlYnVnZ2VyQnJlYWtwb2ludCk7CiAgICAgfQor
CisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojpjb250
aW51ZVVudGlsTmV4dFJ1bkxvb3AoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nKQorUHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6Y29udGludWVVbnRp
bE5leHRSdW5Mb29wKCkKIHsKLSAgICBpZiAoIWFzc2VydFBhdXNlZChlcnJvclN0cmluZykpCi0g
ICAgICAgIHJldHVybjsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CiAK
LSAgICByZXN1bWUoZXJyb3JTdHJpbmcpOworICAgIGlmICghYXNzZXJ0UGF1c2VkKGVycm9yU3Ry
aW5nKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKKworICAg
IGF1dG8gcmVzdW1lUmVzdWx0ID0gcmVzdW1lKCk7CisgICAgaWYgKCFyZXN1bWVSZXN1bHQpCisg
ICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChyZXN1bWVSZXN1bHQuZXJyb3IoKSk7CiAKICAg
ICBtX2VuYWJsZVBhdXNlV2hlbklkbGUgPSB0cnVlOwogCiAgICAgcmVnaXN0ZXJJZGxlSGFuZGxl
cigpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50
Ojpjb250aW51ZVRvTG9jYXRpb24oRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBKU09O
OjpPYmplY3QmIGxvY2F0aW9uKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVj
dG9yRGVidWdnZXJBZ2VudDo6Y29udGludWVUb0xvY2F0aW9uKFJlZjxKU09OOjpPYmplY3Q+JiYg
bG9jYXRpb24pCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAg
ICAgaWYgKCFhc3NlcnRQYXVzZWQoZXJyb3JTdHJpbmcpKQotICAgICAgICByZXR1cm47CisgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAgICBpZiAobV9jb250
aW51ZVRvTG9jYXRpb25EZWJ1Z2dlckJyZWFrcG9pbnQpIHsKICAgICAgICAgbV9kZWJ1Z2dlci5y
ZW1vdmVCcmVha3BvaW50KCptX2NvbnRpbnVlVG9Mb2NhdGlvbkRlYnVnZ2VyQnJlYWtwb2ludCk7
CkBAIC02NjksMTkgKzY4MCwxOCBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmNvbnRp
bnVlVG9Mb2NhdGlvbihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0CiAgICAgdW5zaWdu
ZWQgbGluZU51bWJlcjsKICAgICB1bnNpZ25lZCBjb2x1bW5OdW1iZXI7CiAgICAgaWYgKCFwYXJz
ZUxvY2F0aW9uKGVycm9yU3RyaW5nLCBsb2NhdGlvbiwgc291cmNlSUQsIGxpbmVOdW1iZXIsIGNv
bHVtbk51bWJlcikpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVj
dGVkKGVycm9yU3RyaW5nKTsKIAogICAgIGF1dG8gc2NyaXB0SXRlcmF0b3IgPSBtX3NjcmlwdHMu
ZmluZChzb3VyY2VJRCk7CiAgICAgaWYgKHNjcmlwdEl0ZXJhdG9yID09IG1fc2NyaXB0cy5lbmQo
KSkgewogICAgICAgICBtX2RlYnVnZ2VyLmNvbnRpbnVlUHJvZ3JhbSgpOwogICAgICAgICBtX2Zy
b250ZW5kRGlzcGF0Y2hlci0+cmVzdW1lZCgpOwotICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNz
aW5nIHNjcmlwdCBmb3Igc2NyaXB0SWQgaW4gZ2l2ZW4gbG9jYXRpb24iX3M7Ci0gICAgICAgIHJl
dHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJNaXNzaW5nIHNjcmlwdCBmb3Ig
c2NyaXB0SWQgaW4gZ2l2ZW4gbG9jYXRpb24iX3MpOwogICAgIH0KIAogICAgIGF1dG8gcHJvdG9j
b2xCcmVha3BvaW50ID0gUHJvdG9jb2xCcmVha3BvaW50Ojpmcm9tUGF5bG9hZChlcnJvclN0cmlu
Zywgc291cmNlSUQsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlcik7CiAgICAgaWYgKCFwcm90b2Nv
bEJyZWFrcG9pbnQpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVj
dGVkKGVycm9yU3RyaW5nKTsKIAogICAgIC8vIERvbid0IHNhdmUgYHByb3RvY29sQnJlYWtwb2lu
dGAgaW4gYG1fcHJvdG9jb2xCcmVha3BvaW50Rm9yUHJvdG9jb2xCcmVha3BvaW50SURgIGJlY2F1
c2UgaXQKICAgICAvLyBpcyBhIHRlbXBvcmFyeSBicmVha3BvaW50IHRoYXQgd2lsbCBiZSByZW1v
dmVkIGFzIHNvb24gYXMgYGxvY2F0aW9uYCBpcyByZWFjaGVkLgpAQCAtNjkxLDggKzcwMSw3IEBA
IHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6Y29udGludWVUb0xvY2F0aW9uKEVycm9yU3Ry
aW5nJiBlcnJvclN0cmluZywgY29uc3QKICAgICBpZiAoIXJlc29sdmVCcmVha3BvaW50KHNjcmlw
dEl0ZXJhdG9yLT52YWx1ZSwgZGVidWdnZXJCcmVha3BvaW50KSkgewogICAgICAgICBtX2RlYnVn
Z2VyLmNvbnRpbnVlUHJvZ3JhbSgpOwogICAgICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+cmVz
dW1lZCgpOwotICAgICAgICBlcnJvclN0cmluZyA9ICJDb3VsZCBub3QgcmVzb2x2ZSBicmVha3Bv
aW50Il9zOwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgi
Q291bGQgbm90IHJlc29sdmUgYnJlYWtwb2ludCJfcyk7CiAgICAgfQogCiAgICAgaWYgKCFzZXRC
cmVha3BvaW50KGRlYnVnZ2VyQnJlYWtwb2ludCkpIHsKQEAgLTcwMSw3ICs3MTAsNyBAQCB2b2lk
IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmNvbnRpbnVlVG9Mb2NhdGlvbihFcnJvclN0cmluZyYg
ZXJyb3JTdHJpbmcsIGNvbnN0CiAgICAgICAgIC8vIGhpdCB0aGlzIG5ldyBicmVha3BvaW50IG9y
IG5vdC4KICAgICAgICAgbV9kZWJ1Z2dlci5jb250aW51ZVByb2dyYW0oKTsKICAgICAgICAgbV9m
cm9udGVuZERpc3BhdGNoZXItPnJlc3VtZWQoKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICBy
ZXR1cm4geyB9OwogICAgIH0KIAogICAgIG1fY29udGludWVUb0xvY2F0aW9uRGVidWdnZXJCcmVh
a3BvaW50ID0gV1RGTW92ZShkZWJ1Z2dlckJyZWFrcG9pbnQpOwpAQCAtNzEwLDQxICs3MTksNDIg
QEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojpjb250aW51ZVRvTG9jYXRpb24oRXJyb3JT
dHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdAogICAgIC8vIFNvIGRvbid0IGlzc3VlIGEgcmVzdW1l
ZCBldmVudCB1bmxlc3Mgd2UgZXhpdCB0aGUgVk0gd2l0aG91dCBwYXVzaW5nLgogICAgIHdpbGxT
dGVwQW5kTWF5QmVjb21lSWRsZSgpOwogICAgIG1fZGVidWdnZXIuY29udGludWVQcm9ncmFtKCk7
CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNl
YXJjaEluQ29udGVudChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgc2Ny
aXB0SURTdHIsIGNvbnN0IFN0cmluZyYgcXVlcnksIGNvbnN0IGJvb2wqIG9wdGlvbmFsQ2FzZVNl
bnNpdGl2ZSwgY29uc3QgYm9vbCogb3B0aW9uYWxJc1JlZ2V4LCBSZWZQdHI8SlNPTjo6QXJyYXlP
ZjxQcm90b2NvbDo6R2VuZXJpY1R5cGVzOjpTZWFyY2hNYXRjaD4+JiByZXN1bHRzKQorUHJvdG9j
b2w6OkVycm9yU3RyaW5nT3I8UmVmPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkdlbmVyaWNUeXBl
czo6U2VhcmNoTWF0Y2g+Pj4gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2VhcmNoSW5Db250ZW50
KGNvbnN0IFByb3RvY29sOjpEZWJ1Z2dlcjo6U2NyaXB0SWQmIHNjcmlwdElkLCBjb25zdCBTdHJp
bmcmIHF1ZXJ5LCBPcHRpb25hbDxib29sPiYmIGNhc2VTZW5zaXRpdmUsIE9wdGlvbmFsPGJvb2w+
JiYgaXNSZWdleCkKIHsKLSAgICBKU0M6OlNvdXJjZUlEIHNvdXJjZUlEID0gc2NyaXB0SURTdHIu
dG9JbnRQdHIoKTsKLSAgICBhdXRvIGl0ID0gbV9zY3JpcHRzLmZpbmQoc291cmNlSUQpOwotICAg
IGlmIChpdCA9PSBtX3NjcmlwdHMuZW5kKCkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWlz
c2luZyBzY3JpcHQgZm9yIGdpdmVuIHNjcmlwdElkIjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
KyAgICBhdXRvIGl0ID0gbV9zY3JpcHRzLmZpbmQoc2NyaXB0SWQudG9JbnRQdHIoKSk7CisgICAg
aWYgKGl0ID09IG1fc2NyaXB0cy5lbmQoKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVk
KCJNaXNzaW5nIHNjcmlwdCBmb3IgZ2l2ZW4gc2NyaXB0SWQiX3MpOwogCi0gICAgYm9vbCBpc1Jl
Z2V4ID0gb3B0aW9uYWxJc1JlZ2V4ID8gKm9wdGlvbmFsSXNSZWdleCA6IGZhbHNlOwotICAgIGJv
b2wgY2FzZVNlbnNpdGl2ZSA9IG9wdGlvbmFsQ2FzZVNlbnNpdGl2ZSA/ICpvcHRpb25hbENhc2VT
ZW5zaXRpdmUgOiBmYWxzZTsKLSAgICByZXN1bHRzID0gQ29udGVudFNlYXJjaFV0aWxpdGllczo6
c2VhcmNoSW5UZXh0QnlMaW5lcyhpdC0+dmFsdWUuc291cmNlLCBxdWVyeSwgY2FzZVNlbnNpdGl2
ZSwgaXNSZWdleCk7CisgICAgcmV0dXJuIENvbnRlbnRTZWFyY2hVdGlsaXRpZXM6OnNlYXJjaElu
VGV4dEJ5TGluZXMoaXQtPnZhbHVlLnNvdXJjZSwgcXVlcnksIGNhc2VTZW5zaXRpdmUudmFsdWVP
cihmYWxzZSksIGlzUmVnZXgudmFsdWVPcihmYWxzZSkpOwogfQogCi12b2lkIEluc3BlY3RvckRl
YnVnZ2VyQWdlbnQ6OmdldFNjcmlwdFNvdXJjZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNv
bnN0IFN0cmluZyYgc2NyaXB0SURTdHIsIFN0cmluZyogc2NyaXB0U291cmNlKQorUHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8U3RyaW5nPiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpnZXRTY3JpcHRT
b3VyY2UoY29uc3QgUHJvdG9jb2w6OkRlYnVnZ2VyOjpTY3JpcHRJZCYgc2NyaXB0SWQpCiB7Ci0g
ICAgSlNDOjpTb3VyY2VJRCBzb3VyY2VJRCA9IHNjcmlwdElEU3RyLnRvSW50UHRyKCk7Ci0gICAg
YXV0byBpdCA9IG1fc2NyaXB0cy5maW5kKHNvdXJjZUlEKTsKLSAgICBpZiAoaXQgIT0gbV9zY3Jp
cHRzLmVuZCgpKQotICAgICAgICAqc2NyaXB0U291cmNlID0gaXQtPnZhbHVlLnNvdXJjZTsKLSAg
ICBlbHNlCi0gICAgICAgIGVycm9yU3RyaW5nID0gIk1pc3Npbmcgc2NyaXB0IGZvciBnaXZlbiBz
Y3JpcHRJZCI7CisgICAgYXV0byBpdCA9IG1fc2NyaXB0cy5maW5kKHNjcmlwdElkLnRvSW50UHRy
KCkpOworICAgIGlmIChpdCA9PSBtX3NjcmlwdHMuZW5kKCkpCisgICAgICAgIHJldHVybiBtYWtl
VW5leHBlY3RlZCgiTWlzc2luZyBzY3JpcHQgZm9yIGdpdmVuIHNjcmlwdElkIik7CisKKyAgICBy
ZXR1cm4gaXQtPnZhbHVlLnNvdXJjZTsKIH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50
OjpnZXRGdW5jdGlvbkRldGFpbHMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJp
bmcmIGZ1bmN0aW9uSWQsIFJlZlB0cjxQcm90b2NvbDo6RGVidWdnZXI6OkZ1bmN0aW9uRGV0YWls
cz4mIGRldGFpbHMpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8UHJvdG9jb2w6OkRlYnVn
Z2VyOjpGdW5jdGlvbkRldGFpbHM+PiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpnZXRGdW5jdGlv
bkRldGFpbHMoY29uc3QgU3RyaW5nJiBmdW5jdGlvbklkKQogeworICAgIFByb3RvY29sOjpFcnJv
clN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0
ID0gbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIuaW5qZWN0ZWRTY3JpcHRGb3JPYmplY3RJZChmdW5j
dGlvbklkKTsKLSAgICBpZiAoaW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKSB7Ci0gICAgICAg
IGVycm9yU3RyaW5nID0gIk1pc3NpbmcgaW5qZWN0ZWQgc2NyaXB0IGZvciBnaXZlbiBmdW5jdGlv
bklkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmIChpbmplY3RlZFNjcmlwdC5o
YXNOb1ZhbHVlKCkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTWlzc2luZyBpbmpl
Y3RlZCBzY3JpcHQgZm9yIGdpdmVuIGZ1bmN0aW9uSWQiX3MpOwogCisgICAgUmVmUHRyPFByb3Rv
Y29sOjpEZWJ1Z2dlcjo6RnVuY3Rpb25EZXRhaWxzPiBkZXRhaWxzOwogICAgIGluamVjdGVkU2Ny
aXB0LmdldEZ1bmN0aW9uRGV0YWlscyhlcnJvclN0cmluZywgZnVuY3Rpb25JZCwgZGV0YWlscyk7
CisgICAgaWYgKCFkZXRhaWxzKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JT
dHJpbmcpOworCisgICAgcmV0dXJuIGRldGFpbHMucmVsZWFzZU5vbk51bGwoKTsKIH0KIAogdm9p
ZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzY2hlZHVsZVBhdXNlQXROZXh0T3Bwb3J0dW5pdHko
RGVidWdnZXJGcm9udGVuZERpc3BhdGNoZXI6OlJlYXNvbiByZWFzb24sIFJlZlB0cjxKU09OOjpP
YmplY3Q+JiYgZGF0YSkKQEAgLTc5Miw1NyArODAyLDc1IEBAIGJvb2wgSW5zcGVjdG9yRGVidWdn
ZXJBZ2VudDo6Y2FuY2VsUGF1c2VGb3JTcGVjaWFsQnJlYWtwb2ludChKU0M6OkJyZWFrcG9pbnQm
IGJyCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6
cGF1c2UoRXJyb3JTdHJpbmcmKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVj
dG9yRGVidWdnZXJBZ2VudDo6cGF1c2UoKQogewogICAgIHNjaGVkdWxlUGF1c2VBdE5leHRPcHBv
cnR1bml0eShEZWJ1Z2dlckZyb250ZW5kRGlzcGF0Y2hlcjo6UmVhc29uOjpQYXVzZU9uTmV4dFN0
YXRlbWVudCk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckRlYnVnZ2Vy
QWdlbnQ6OnJlc3VtZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCitQcm90b2NvbDo6RXJyb3JT
dHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpyZXN1bWUoKQogewotICAgIGlm
ICghbV9wYXVzZWRHbG9iYWxPYmplY3QgJiYgIW1famF2YVNjcmlwdFBhdXNlU2NoZWR1bGVkKSB7
Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIk11c3QgYmUgcGF1c2VkIG9yIHdhaXRpbmcgdG8gcGF1
c2UiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKCFtX3BhdXNlZEdsb2JhbE9i
amVjdCAmJiAhbV9qYXZhU2NyaXB0UGF1c2VTY2hlZHVsZWQpCisgICAgICAgIHJldHVybiBtYWtl
VW5leHBlY3RlZCgiTXVzdCBiZSBwYXVzZWQgb3Igd2FpdGluZyB0byBwYXVzZSJfcyk7CiAKICAg
ICBjYW5jZWxQYXVzZUF0TmV4dE9wcG9ydHVuaXR5KCk7CiAgICAgbV9kZWJ1Z2dlci5jb250aW51
ZVByb2dyYW0oKTsKICAgICBtX2NvbmRpdGlvblRvRGlzcGF0Y2hSZXN1bWVkID0gU2hvdWxkRGlz
cGF0Y2hSZXN1bWVkOjpXaGVuQ29udGludWVkOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9p
ZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzdGVwTmV4dChFcnJvclN0cmluZyYgZXJyb3JTdHJp
bmcpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50
OjpzdGVwTmV4dCgpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOwor
CiAgICAgaWYgKCFhc3NlcnRQYXVzZWQoZXJyb3JTdHJpbmcpKQotICAgICAgICByZXR1cm47Cisg
ICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAgICB3aWxsU3Rl
cEFuZE1heUJlY29tZUlkbGUoKTsKICAgICBtX2RlYnVnZ2VyLnN0ZXBOZXh0RXhwcmVzc2lvbigp
OworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojpz
dGVwT3ZlcihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdP
cjx2b2lkPiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzdGVwT3ZlcigpCiB7CisgICAgUHJvdG9j
b2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAgICAgaWYgKCFhc3NlcnRQYXVzZWQoZXJy
b3JTdHJpbmcpKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3Rl
ZChlcnJvclN0cmluZyk7CiAKICAgICB3aWxsU3RlcEFuZE1heUJlY29tZUlkbGUoKTsKICAgICBt
X2RlYnVnZ2VyLnN0ZXBPdmVyU3RhdGVtZW50KCk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12
b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnN0ZXBJbnRvKEVycm9yU3RyaW5nJiBlcnJvclN0
cmluZykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRlYnVnZ2VyQWdl
bnQ6OnN0ZXBJbnRvKCkKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7
CisKICAgICBpZiAoIWFzc2VydFBhdXNlZChlcnJvclN0cmluZykpCi0gICAgICAgIHJldHVybjsK
KyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgIHdpbGxT
dGVwQW5kTWF5QmVjb21lSWRsZSgpOwogICAgIG1fZGVidWdnZXIuc3RlcEludG9TdGF0ZW1lbnQo
KTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6
c3RlcE91dChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdP
cjx2b2lkPiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzdGVwT3V0KCkKIHsKKyAgICBQcm90b2Nv
bDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBpZiAoIWFzc2VydFBhdXNlZChlcnJv
clN0cmluZykpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVk
KGVycm9yU3RyaW5nKTsKIAogICAgIHdpbGxTdGVwQW5kTWF5QmVjb21lSWRsZSgpOwogICAgIG1f
ZGVidWdnZXIuc3RlcE91dE9mRnVuY3Rpb24oKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKIHZv
aWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6cmVnaXN0ZXJJZGxlSGFuZGxlcigpCkBAIC04Nzcs
ODYgKzkwNSw5OCBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpZEJlY29tZUlkbGUo
KQogCiAgICAgbV9jb25kaXRpb25Ub0Rpc3BhdGNoUmVzdW1lZCA9IFNob3VsZERpc3BhdGNoUmVz
dW1lZDo6Tm87CiAKLSAgICBpZiAobV9lbmFibGVQYXVzZVdoZW5JZGxlKSB7Ci0gICAgICAgIEVy
cm9yU3RyaW5nIGlnbm9yZWQ7Ci0gICAgICAgIHBhdXNlKGlnbm9yZWQpOwotICAgIH0KKyAgICBp
ZiAobV9lbmFibGVQYXVzZVdoZW5JZGxlKQorICAgICAgICBwYXVzZSgpOwogfQogCi12b2lkIElu
c3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldFBhdXNlT25EZWJ1Z2dlclN0YXRlbWVudHMoRXJyb3JT
dHJpbmcmIGVycm9yU3RyaW5nLCBib29sIGVuYWJsZWQsIGNvbnN0IEpTT046Ok9iamVjdCogb3B0
aW9uc1BheWxvYWQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JEZWJ1
Z2dlckFnZW50OjpzZXRQYXVzZU9uRGVidWdnZXJTdGF0ZW1lbnRzKGJvb2wgZW5hYmxlZCwgUmVm
UHRyPEpTT046Ok9iamVjdD4mJiBvcHRpb25zKQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmlu
ZyBlcnJvclN0cmluZzsKKwogICAgIGlmICghZW5hYmxlZCkgewogICAgICAgICBtX2RlYnVnZ2Vy
LnNldFBhdXNlT25EZWJ1Z2dlclN0YXRlbWVudHNCcmVha3BvaW50KG51bGxwdHIpOwotICAgICAg
ICByZXR1cm47CisgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCi0gICAgYXV0byBicmVha3Bv
aW50ID0gZGVidWdnZXJCcmVha3BvaW50RnJvbVBheWxvYWQoZXJyb3JTdHJpbmcsIG9wdGlvbnNQ
YXlsb2FkKTsKKyAgICBhdXRvIGJyZWFrcG9pbnQgPSBkZWJ1Z2dlckJyZWFrcG9pbnRGcm9tUGF5
bG9hZChlcnJvclN0cmluZywgV1RGTW92ZShvcHRpb25zKSk7CiAgICAgaWYgKCFicmVha3BvaW50
KQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0
cmluZyk7CiAKICAgICBtX2RlYnVnZ2VyLnNldFBhdXNlT25EZWJ1Z2dlclN0YXRlbWVudHNCcmVh
a3BvaW50KFdURk1vdmUoYnJlYWtwb2ludCkpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9p
ZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZXRQYXVzZU9uRXhjZXB0aW9ucyhFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgc3RhdGVTdHJpbmcsIGNvbnN0IEpTT046Ok9i
amVjdCogb3B0aW9uc1BheWxvYWQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNw
ZWN0b3JEZWJ1Z2dlckFnZW50OjpzZXRQYXVzZU9uRXhjZXB0aW9ucyhjb25zdCBTdHJpbmcmIHN0
YXRlU3RyaW5nLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIG9wdGlvbnMpCiB7CisgICAgUHJvdG9j
b2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAgICAgUmVmUHRyPEpTQzo6QnJlYWtwb2lu
dD4gYWxsRXhjZXB0aW9uc0JyZWFrcG9pbnQ7CiAgICAgUmVmUHRyPEpTQzo6QnJlYWtwb2ludD4g
dW5jYXVnaHRFeGNlcHRpb25zQnJlYWtwb2ludDsKIAogICAgIGlmIChzdGF0ZVN0cmluZyA9PSAi
YWxsIikgewotICAgICAgICBhbGxFeGNlcHRpb25zQnJlYWtwb2ludCA9IGRlYnVnZ2VyQnJlYWtw
b2ludEZyb21QYXlsb2FkKGVycm9yU3RyaW5nLCBvcHRpb25zUGF5bG9hZCk7CisgICAgICAgIGFs
bEV4Y2VwdGlvbnNCcmVha3BvaW50ID0gZGVidWdnZXJCcmVha3BvaW50RnJvbVBheWxvYWQoZXJy
b3JTdHJpbmcsIFdURk1vdmUob3B0aW9ucykpOwogICAgICAgICBpZiAoIWFsbEV4Y2VwdGlvbnNC
cmVha3BvaW50KQotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKICAgICB9IGVsc2UgaWYgKHN0YXRlU3RyaW5nID09ICJ1
bmNhdWdodCIpIHsKLSAgICAgICAgdW5jYXVnaHRFeGNlcHRpb25zQnJlYWtwb2ludCA9IGRlYnVn
Z2VyQnJlYWtwb2ludEZyb21QYXlsb2FkKGVycm9yU3RyaW5nLCBvcHRpb25zUGF5bG9hZCk7Cisg
ICAgICAgIHVuY2F1Z2h0RXhjZXB0aW9uc0JyZWFrcG9pbnQgPSBkZWJ1Z2dlckJyZWFrcG9pbnRG
cm9tUGF5bG9hZChlcnJvclN0cmluZywgV1RGTW92ZShvcHRpb25zKSk7CiAgICAgICAgIGlmICgh
dW5jYXVnaHRFeGNlcHRpb25zQnJlYWtwb2ludCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9
IGVsc2UgaWYgKHN0YXRlU3RyaW5nICE9ICJub25lIikgewotICAgICAgICBlcnJvclN0cmluZyA9
IG1ha2VTdHJpbmcoIlVua25vd24gc3RhdGU6ICJfcywgc3RhdGVTdHJpbmcpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQorICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3Ry
aW5nKTsKKyAgICB9IGVsc2UgaWYgKHN0YXRlU3RyaW5nICE9ICJub25lIikKKyAgICAgICAgcmV0
dXJuIG1ha2VVbmV4cGVjdGVkKG1ha2VTdHJpbmcoIlVua25vd24gc3RhdGU6ICJfcywgc3RhdGVT
dHJpbmcpKTsKIAogICAgIG1fZGVidWdnZXIuc2V0UGF1c2VPbkFsbEV4Y2VwdGlvbnNCcmVha3Bv
aW50KFdURk1vdmUoYWxsRXhjZXB0aW9uc0JyZWFrcG9pbnQpKTsKICAgICBtX2RlYnVnZ2VyLnNl
dFBhdXNlT25VbmNhdWdodEV4Y2VwdGlvbnNCcmVha3BvaW50KFdURk1vdmUodW5jYXVnaHRFeGNl
cHRpb25zQnJlYWtwb2ludCkpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0
b3JEZWJ1Z2dlckFnZW50OjpzZXRQYXVzZU9uQXNzZXJ0aW9ucyhFcnJvclN0cmluZyYgZXJyb3JT
dHJpbmcsIGJvb2wgZW5hYmxlZCwgY29uc3QgSlNPTjo6T2JqZWN0KiBvcHRpb25zUGF5bG9hZCkK
K1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNl
dFBhdXNlT25Bc3NlcnRpb25zKGJvb2wgZW5hYmxlZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBv
cHRpb25zKQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAg
IGlmICghZW5hYmxlZCkgewogICAgICAgICBtX3BhdXNlT25Bc3NlcnRpb25zQnJlYWtwb2ludCA9
IG51bGxwdHI7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAK
LSAgICBhdXRvIGJyZWFrcG9pbnQgPSBkZWJ1Z2dlckJyZWFrcG9pbnRGcm9tUGF5bG9hZChlcnJv
clN0cmluZywgb3B0aW9uc1BheWxvYWQpOworICAgIGF1dG8gYnJlYWtwb2ludCA9IGRlYnVnZ2Vy
QnJlYWtwb2ludEZyb21QYXlsb2FkKGVycm9yU3RyaW5nLCBXVEZNb3ZlKG9wdGlvbnMpKTsKICAg
ICBpZiAoIWJyZWFrcG9pbnQpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgIG1fcGF1c2VPbkFzc2VydGlvbnNCcmVha3Bv
aW50ID0gV1RGTW92ZShicmVha3BvaW50KTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQg
SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0UGF1c2VPbk1pY3JvdGFza3MoRXJyb3JTdHJpbmcm
IGVycm9yU3RyaW5nLCBib29sIGVuYWJsZWQsIGNvbnN0IEpTT046Ok9iamVjdCogb3B0aW9uc1Bh
eWxvYWQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JEZWJ1Z2dlckFn
ZW50OjpzZXRQYXVzZU9uTWljcm90YXNrcyhib29sIGVuYWJsZWQsIFJlZlB0cjxKU09OOjpPYmpl
Y3Q+JiYgb3B0aW9ucykKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7
CisKICAgICBpZiAoIWVuYWJsZWQpIHsKICAgICAgICAgbV9wYXVzZU9uTWljcm90YXNrc0JyZWFr
cG9pbnQgPSBudWxscHRyOwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB7IH07CiAg
ICAgfQogCi0gICAgYXV0byBicmVha3BvaW50ID0gZGVidWdnZXJCcmVha3BvaW50RnJvbVBheWxv
YWQoZXJyb3JTdHJpbmcsIG9wdGlvbnNQYXlsb2FkKTsKKyAgICBhdXRvIGJyZWFrcG9pbnQgPSBk
ZWJ1Z2dlckJyZWFrcG9pbnRGcm9tUGF5bG9hZChlcnJvclN0cmluZywgV1RGTW92ZShvcHRpb25z
KSk7CiAgICAgaWYgKCFicmVha3BvaW50KQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVy
biBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAgICBtX3BhdXNlT25NaWNyb3Rhc2tz
QnJlYWtwb2ludCA9IFdURk1vdmUoYnJlYWtwb2ludCk7CisKKyAgICByZXR1cm4geyB9OwogfQog
Ci12b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmV2YWx1YXRlT25DYWxsRnJhbWUoRXJyb3JT
dHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGNhbGxGcmFtZUlkLCBjb25zdCBTdHJp
bmcmIGV4cHJlc3Npb24sIGNvbnN0IFN0cmluZyogb2JqZWN0R3JvdXAsIGNvbnN0IGJvb2wqIGlu
Y2x1ZGVDb21tYW5kTGluZUFQSSwgY29uc3QgYm9vbCogZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0Fu
ZE11dGVDb25zb2xlLCBjb25zdCBib29sKiByZXR1cm5CeVZhbHVlLCBjb25zdCBib29sKiBnZW5l
cmF0ZVByZXZpZXcsIGNvbnN0IGJvb2wqIHNhdmVSZXN1bHQsIGNvbnN0IGJvb2wqIC8qIGVtdWxh
dGVVc2VyR2VzdHVyZSAqLywgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+
JiByZXN1bHQsIE9wdGlvbmFsPGJvb2w+JiB3YXNUaHJvd24sIE9wdGlvbmFsPGludD4mIHNhdmVk
UmVzdWx0SW5kZXgpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxzdGQ6OnR1cGxlPFJlZjxQcm90
b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiwgT3B0aW9uYWw8Ym9vbD4gLyogd2FzVGhyb3du
ICovLCBPcHRpb25hbDxpbnQ+IC8qIHNhdmVkUmVzdWx0SW5kZXggKi8+PiBJbnNwZWN0b3JEZWJ1
Z2dlckFnZW50OjpldmFsdWF0ZU9uQ2FsbEZyYW1lKGNvbnN0IFByb3RvY29sOjpEZWJ1Z2dlcjo6
Q2FsbEZyYW1lSWQmIGNhbGxGcmFtZUlkLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIGNvbnN0
IFN0cmluZyYgb2JqZWN0R3JvdXAsIE9wdGlvbmFsPGJvb2w+JiYgaW5jbHVkZUNvbW1hbmRMaW5l
QVBJLCBPcHRpb25hbDxib29sPiYmIGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29s
ZSwgT3B0aW9uYWw8Ym9vbD4mJiByZXR1cm5CeVZhbHVlLCBPcHRpb25hbDxib29sPiYmIGdlbmVy
YXRlUHJldmlldywgT3B0aW9uYWw8Ym9vbD4mJiBzYXZlUmVzdWx0LCBPcHRpb25hbDxib29sPiYm
ICAvKiBlbXVsYXRlVXNlckdlc3R1cmUgKi8pCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5n
IGVycm9yU3RyaW5nOworCiAgICAgaWYgKCFhc3NlcnRQYXVzZWQoZXJyb3JTdHJpbmcpKQotICAg
ICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7
CiAKICAgICBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdCA9IG1faW5qZWN0ZWRTY3JpcHRN
YW5hZ2VyLmluamVjdGVkU2NyaXB0Rm9yT2JqZWN0SWQoY2FsbEZyYW1lSWQpOwotICAgIGlmIChp
bmplY3RlZFNjcmlwdC5oYXNOb1ZhbHVlKCkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWlz
c2luZyBpbmplY3RlZCBzY3JpcHQgZm9yIGdpdmVuIGNhbGxGcmFtZUlkIl9zOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQorICAgIGlmIChpbmplY3RlZFNjcmlwdC5oYXNOb1ZhbHVlKCkpCisgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTWlzc2luZyBpbmplY3RlZCBzY3JpcHQgZm9yIGdp
dmVuIGNhbGxGcmFtZUlkIl9zKTsKIAogICAgIEpTQzo6RGVidWdnZXI6OlRlbXBvcmFyaWx5RGlz
YWJsZUV4Y2VwdGlvbkJyZWFrcG9pbnRzIHRlbXBvcmFyaWx5RGlzYWJsZUV4Y2VwdGlvbkJyZWFr
cG9pbnRzKG1fZGVidWdnZXIpOwogCkBAIC05NjYsMjggKzEwMDYsMzEgQEAgdm9pZCBJbnNwZWN0
b3JEZWJ1Z2dlckFnZW50OjpldmFsdWF0ZU9uQ2FsbEZyYW1lKEVycm9yU3RyaW5nJiBlcnJvclN0
cmluZywgY29uc3QKICAgICAgICAgbXV0ZUNvbnNvbGUoKTsKICAgICB9CiAKLSAgICBpbmplY3Rl
ZFNjcmlwdC5ldmFsdWF0ZU9uQ2FsbEZyYW1lKGVycm9yU3RyaW5nLCBtX2N1cnJlbnRDYWxsU3Rh
Y2suZ2V0KCksIGNhbGxGcmFtZUlkLCBleHByZXNzaW9uLAotICAgICAgICBvYmplY3RHcm91cCA/
ICpvYmplY3RHcm91cCA6IGVtcHR5U3RyaW5nKCksIGluY2x1ZGVDb21tYW5kTGluZUFQSSAmJiAq
aW5jbHVkZUNvbW1hbmRMaW5lQVBJLCByZXR1cm5CeVZhbHVlICYmICpyZXR1cm5CeVZhbHVlLCBn
ZW5lcmF0ZVByZXZpZXcgJiYgKmdlbmVyYXRlUHJldmlldywgc2F2ZVJlc3VsdCAmJiAqc2F2ZVJl
c3VsdCwKLSAgICAgICAgcmVzdWx0LCB3YXNUaHJvd24sIHNhdmVkUmVzdWx0SW5kZXgpOworICAg
IFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiByZXN1bHQ7CisgICAgT3B0
aW9uYWw8Ym9vbD4gd2FzVGhyb3duOworICAgIE9wdGlvbmFsPGludD4gc2F2ZWRSZXN1bHRJbmRl
eDsKKworICAgIGluamVjdGVkU2NyaXB0LmV2YWx1YXRlT25DYWxsRnJhbWUoZXJyb3JTdHJpbmcs
IG1fY3VycmVudENhbGxTdGFjay5nZXQoKSwgY2FsbEZyYW1lSWQsIGV4cHJlc3Npb24sIG9iamVj
dEdyb3VwLCBpbmNsdWRlQ29tbWFuZExpbmVBUEkudmFsdWVPcihmYWxzZSksIHJldHVybkJ5VmFs
dWUudmFsdWVPcihmYWxzZSksIGdlbmVyYXRlUHJldmlldy52YWx1ZU9yKGZhbHNlKSwgc2F2ZVJl
c3VsdC52YWx1ZU9yKGZhbHNlKSwgcmVzdWx0LCB3YXNUaHJvd24sIHNhdmVkUmVzdWx0SW5kZXgp
OwogCiAgICAgaWYgKHBhdXNlQW5kTXV0ZSkKICAgICAgICAgdW5tdXRlQ29uc29sZSgpOworCisg
ICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmlu
Zyk7CisKKyAgICByZXR1cm4geyB7IHJlc3VsdC5yZWxlYXNlTm9uTnVsbCgpLCBXVEZNb3ZlKHdh
c1Rocm93biksIFdURk1vdmUoc2F2ZWRSZXN1bHRJbmRleCkgfSB9OwogfQogCi12b2lkIEluc3Bl
Y3RvckRlYnVnZ2VyQWdlbnQ6OnNldFNob3VsZEJsYWNrYm94VVJMKEVycm9yU3RyaW5nJiBlcnJv
clN0cmluZywgY29uc3QgU3RyaW5nJiB1cmwsIGJvb2wgc2hvdWxkQmxhY2tib3gsIGNvbnN0IGJv
b2wqIG9wdGlvbmFsQ2FzZVNlbnNpdGl2ZSwgY29uc3QgYm9vbCogb3B0aW9uYWxJc1JlZ2V4KQor
UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0
U2hvdWxkQmxhY2tib3hVUkwoY29uc3QgU3RyaW5nJiB1cmwsIGJvb2wgc2hvdWxkQmxhY2tib3gs
IE9wdGlvbmFsPGJvb2w+JiYgb3B0aW9uYWxDYXNlU2Vuc2l0aXZlLCBPcHRpb25hbDxib29sPiYm
IG9wdGlvbmFsSXNSZWdleCkKIHsKLSAgICBpZiAodXJsLmlzRW1wdHkoKSkgewotICAgICAgICBl
cnJvclN0cmluZyA9ICJVUkwgbXVzdCBub3QgYmUgZW1wdHkiX3M7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9CisgICAgaWYgKHVybC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBl
Y3RlZCgiVVJMIG11c3Qgbm90IGJlIGVtcHR5Il9zKTsKIAotICAgIGJvb2wgY2FzZVNlbnNpdGl2
ZSA9IG9wdGlvbmFsQ2FzZVNlbnNpdGl2ZSAmJiAqb3B0aW9uYWxDYXNlU2Vuc2l0aXZlOwotICAg
IGJvb2wgaXNSZWdleCA9IG9wdGlvbmFsSXNSZWdleCAmJiAqb3B0aW9uYWxJc1JlZ2V4OworICAg
IGJvb2wgY2FzZVNlbnNpdGl2ZSA9IG9wdGlvbmFsQ2FzZVNlbnNpdGl2ZS52YWx1ZU9yKGZhbHNl
KTsKKyAgICBib29sIGlzUmVnZXggPSBvcHRpb25hbElzUmVnZXgudmFsdWVPcihmYWxzZSk7CiAK
LSAgICBpZiAoIWNhc2VTZW5zaXRpdmUgJiYgIWlzUmVnZXggJiYgaXNXZWJLaXRJbmplY3RlZFNj
cmlwdCh1cmwpKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIkJsYWNrYm94aW5nIG9mIGludGVy
bmFsIHNjcmlwdHMgaXMgY29udHJvbGxlZCBieSAnRGVidWdnZXIuc2V0UGF1c2VGb3JJbnRlcm5h
bFNjcmlwdHMnIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghY2FzZVNlbnNp
dGl2ZSAmJiAhaXNSZWdleCAmJiBpc1dlYktpdEluamVjdGVkU2NyaXB0KHVybCkpCisgICAgICAg
IHJldHVybiBtYWtlVW5leHBlY3RlZCgiQmxhY2tib3hpbmcgb2YgaW50ZXJuYWwgc2NyaXB0cyBp
cyBjb250cm9sbGVkIGJ5ICdEZWJ1Z2dlci5zZXRQYXVzZUZvckludGVybmFsU2NyaXB0cyciX3Mp
OwogCiAgICAgQmxhY2tib3hDb25maWcgY29uZmlnIHsgdXJsLCBjYXNlU2Vuc2l0aXZlLCBpc1Jl
Z2V4IH07CiAgICAgaWYgKHNob3VsZEJsYWNrYm94KQpAQCAtMTAwNCw2ICsxMDQ3LDggQEAgdm9p
ZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZXRTaG91bGRCbGFja2JveFVSTChFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcsIGNvbnMKICAgICAgICAgICAgIGJsYWNrYm94VHlwZSA9IEpTQzo6RGVi
dWdnZXI6OkJsYWNrYm94VHlwZTo6RGVmZXJyZWQ7CiAgICAgICAgIG1fZGVidWdnZXIuc2V0Qmxh
Y2tib3hUeXBlKHNvdXJjZUlELCBibGFja2JveFR5cGUpOwogICAgIH0KKworICAgIHJldHVybiB7
IH07CiB9CiAKIGJvb2wgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2hvdWxkQmxhY2tib3hVUkwo
Y29uc3QgU3RyaW5nJiB1cmwpIGNvbnN0CkBAIC0xMDM5LDEwICsxMDg0LDEwIEBAIFN0cmluZyBJ
bnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojpzb3VyY2VNYXBVUkxGb3JTY3JpcHQoY29uc3QgSlNDOjpE
ZWJ1Z2dlcjo6U2NyaXB0CiAgICAgcmV0dXJuIHNjcmlwdC5zb3VyY2VNYXBwaW5nVVJMOwogfQog
Ci12b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldFBhdXNlRm9ySW50ZXJuYWxTY3JpcHRz
KEVycm9yU3RyaW5nJiwgYm9vbCBzaG91bGRQYXVzZSkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09y
PHZvaWQ+IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldFBhdXNlRm9ySW50ZXJuYWxTY3JpcHRz
KGJvb2wgc2hvdWxkUGF1c2UpCiB7CiAgICAgaWYgKHNob3VsZFBhdXNlID09IG1fcGF1c2VGb3JJ
bnRlcm5hbFNjcmlwdHMpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAog
ICAgIG1fcGF1c2VGb3JJbnRlcm5hbFNjcmlwdHMgPSBzaG91bGRQYXVzZTsKIApAQCAtMTA1Miw2
ICsxMDk3LDggQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZXRQYXVzZUZvckludGVy
bmFsU2NyaXB0cyhFcnJvclN0cmluZyYsIGJvb2wgc2hvdWwKICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICBtX2RlYnVnZ2VyLnNldEJsYWNrYm94VHlwZShzb3VyY2VJRCwgYmxhY2tib3hU
eXBlKTsKICAgICB9CisKKyAgICByZXR1cm4geyB9OwogfQogCiB2b2lkIEluc3BlY3RvckRlYnVn
Z2VyQWdlbnQ6OmRpZFBhcnNlU291cmNlKEpTQzo6U291cmNlSUQgc291cmNlSUQsIGNvbnN0IEpT
Qzo6RGVidWdnZXI6OlNjcmlwdCYgc2NyaXB0KQpAQCAtMTA2MSwxMiArMTEwOCw3IEBAIHZvaWQg
SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlkUGFyc2VTb3VyY2UoSlNDOjpTb3VyY2VJRCBzb3Vy
Y2VJRCwgY29uc3QgSlNDOjpECiAgICAgU3RyaW5nIHNvdXJjZVVSTCA9IHNjcmlwdC5zb3VyY2VV
Ukw7CiAgICAgU3RyaW5nIHNvdXJjZU1hcHBpbmdVUkwgPSBzb3VyY2VNYXBVUkxGb3JTY3JpcHQo
c2NyaXB0KTsKIAotICAgIGNvbnN0IGJvb2wgaXNNb2R1bGUgPSBzY3JpcHQuc291cmNlUHJvdmlk
ZXItPnNvdXJjZVR5cGUoKSA9PSBKU0M6OlNvdXJjZVByb3ZpZGVyU291cmNlVHlwZTo6TW9kdWxl
OwotICAgIGNvbnN0IGJvb2wqIGlzQ29udGVudFNjcmlwdCA9IHNjcmlwdC5pc0NvbnRlbnRTY3Jp
cHQgPyAmc2NyaXB0LmlzQ29udGVudFNjcmlwdCA6IG51bGxwdHI7Ci0gICAgU3RyaW5nKiBzb3Vy
Y2VVUkxQYXJhbSA9IGhhc1NvdXJjZVVSTCA/ICZzb3VyY2VVUkwgOiBudWxscHRyOwotICAgIFN0
cmluZyogc291cmNlTWFwVVJMUGFyYW0gPSBzb3VyY2VNYXBwaW5nVVJMLmlzRW1wdHkoKSA/IG51
bGxwdHIgOiAmc291cmNlTWFwcGluZ1VSTDsKLQotICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5z
Y3JpcHRQYXJzZWQoc2NyaXB0SURTdHIsIHNjcmlwdC51cmwsIHNjcmlwdC5zdGFydExpbmUsIHNj
cmlwdC5zdGFydENvbHVtbiwgc2NyaXB0LmVuZExpbmUsIHNjcmlwdC5lbmRDb2x1bW4sIGlzQ29u
dGVudFNjcmlwdCwgc291cmNlVVJMUGFyYW0sIHNvdXJjZU1hcFVSTFBhcmFtLCBpc01vZHVsZSA/
ICZpc01vZHVsZSA6IG51bGxwdHIpOworICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5zY3JpcHRQ
YXJzZWQoc2NyaXB0SURTdHIsIHNjcmlwdC51cmwsIHNjcmlwdC5zdGFydExpbmUsIHNjcmlwdC5z
dGFydENvbHVtbiwgc2NyaXB0LmVuZExpbmUsIHNjcmlwdC5lbmRDb2x1bW4sIHNjcmlwdC5pc0Nv
bnRlbnRTY3JpcHQsIHNvdXJjZVVSTCwgc291cmNlTWFwcGluZ1VSTCwgc2NyaXB0LnNvdXJjZVBy
b3ZpZGVyLT5zb3VyY2VUeXBlKCkgPT0gSlNDOjpTb3VyY2VQcm92aWRlclNvdXJjZVR5cGU6Ok1v
ZHVsZSk7CiAKICAgICBtX3NjcmlwdHMuc2V0KHNvdXJjZUlELCBzY3JpcHQpOwogCkBAIC0xMTgw
LDEyICsxMjIyLDEzIEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlkUGF1c2UoSlND
OjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkRlCiAgICAgICAgIGlmIChhdXRv
IGRlYnVnZ2VyQnJlYWtwb2ludElkID0gbV9kZWJ1Z2dlci5wYXVzaW5nQnJlYWtwb2ludElEKCkp
IHsKICAgICAgICAgICAgIEFTU0VSVCghbV9jb250aW51ZVRvTG9jYXRpb25EZWJ1Z2dlckJyZWFr
cG9pbnQgfHwgZGVidWdnZXJCcmVha3BvaW50SWQgIT0gbV9jb250aW51ZVRvTG9jYXRpb25EZWJ1
Z2dlckJyZWFrcG9pbnQtPmlkKCkpOwogICAgICAgICAgICAgZGF0YSA9IEpTT046Ok9iamVjdDo6
Y3JlYXRlKCk7Ci0gICAgICAgICAgICBkYXRhLT5zZXRTdHJpbmcoIm9yaWdpbmFsUmVhc29uIl9z
LCBQcm90b2NvbDo6SW5zcGVjdG9ySGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUoRGVidWdn
ZXJGcm9udGVuZERpc3BhdGNoZXI6OlJlYXNvbjo6QnJlYWtwb2ludCkpOwotICAgICAgICAgICAg
ZGF0YS0+c2V0VmFsdWUoIm9yaWdpbmFsRGF0YSJfcywgYnVpbGRCcmVha3BvaW50UGF1c2VSZWFz
b24oZGVidWdnZXJCcmVha3BvaW50SWQpKTsKKyAgICAgICAgICAgIGRhdGEtPnNldFN0cmluZygi
b3JpZ2luYWxSZWFzb24iX3MsIFByb3RvY29sOjpIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1
ZShEZWJ1Z2dlckZyb250ZW5kRGlzcGF0Y2hlcjo6UmVhc29uOjpCcmVha3BvaW50KSk7CisgICAg
ICAgICAgICBpZiAoYXV0byBwYXVzZVJlYXNvbiA9IGJ1aWxkQnJlYWtwb2ludFBhdXNlUmVhc29u
KGRlYnVnZ2VyQnJlYWtwb2ludElkKSkKKyAgICAgICAgICAgICAgICBkYXRhLT5zZXRWYWx1ZSgi
b3JpZ2luYWxEYXRhIl9zLCBwYXVzZVJlYXNvbi5yZWxlYXNlTm9uTnVsbCgpKTsKICAgICAgICAg
fSBlbHNlIGlmIChtX3ByZUJsYWNrYm94UGF1c2VEYXRhKSB7CiAgICAgICAgICAgICBkYXRhID0g
SlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICAgICAgICAgIGRhdGEtPnNldFN0cmluZygib3Jp
Z2luYWxSZWFzb24iX3MsIFByb3RvY29sOjpJbnNwZWN0b3JIZWxwZXJzOjpnZXRFbnVtQ29uc3Rh
bnRWYWx1ZShtX3ByZUJsYWNrYm94UGF1c2VSZWFzb24pKTsKLSAgICAgICAgICAgIGRhdGEtPnNl
dFZhbHVlKCJvcmlnaW5hbERhdGEiX3MsIG1fcHJlQmxhY2tib3hQYXVzZURhdGEpOworICAgICAg
ICAgICAgZGF0YS0+c2V0U3RyaW5nKCJvcmlnaW5hbFJlYXNvbiJfcywgUHJvdG9jb2w6OkhlbHBl
cnM6OmdldEVudW1Db25zdGFudFZhbHVlKG1fcHJlQmxhY2tib3hQYXVzZVJlYXNvbikpOworICAg
ICAgICAgICAgZGF0YS0+c2V0VmFsdWUoIm9yaWdpbmFsRGF0YSJfcywgbV9wcmVCbGFja2JveFBh
dXNlRGF0YS5yZWxlYXNlTm9uTnVsbCgpKTsKICAgICAgICAgfQogICAgICAgICB1cGRhdGVQYXVz
ZVJlYXNvbkFuZERhdGEoRGVidWdnZXJGcm9udGVuZERpc3BhdGNoZXI6OlJlYXNvbjo6QmxhY2ti
b3hlZFNjcmlwdCwgV1RGTW92ZShkYXRhKSk7CiAgICAgfQpAQCAtMTIwNiw3ICsxMjQ5LDcgQEAg
dm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkaWRQYXVzZShKU0M6OkpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTQzo6RGUKICAgICAgICAgICAgIGFzeW5jU3RhY2tUcmFjZSA9IGl0
LT52YWx1ZS0+YnVpbGRJbnNwZWN0b3JPYmplY3QoKTsKICAgICB9CiAKLSAgICBtX2Zyb250ZW5k
RGlzcGF0Y2hlci0+cGF1c2VkKGN1cnJlbnRDYWxsRnJhbWVzKGluamVjdGVkU2NyaXB0KSwgbV9w
YXVzZVJlYXNvbiwgbV9wYXVzZURhdGEsIGFzeW5jU3RhY2tUcmFjZSk7CisgICAgbV9mcm9udGVu
ZERpc3BhdGNoZXItPnBhdXNlZChjdXJyZW50Q2FsbEZyYW1lcyhpbmplY3RlZFNjcmlwdCksIFBy
b3RvY29sOjpIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShtX3BhdXNlUmVhc29uKSwgbV9w
YXVzZURhdGEuY29weVJlZigpLCBXVEZNb3ZlKGFzeW5jU3RhY2tUcmFjZSkpOwogCiAgICAgbV9q
YXZhU2NyaXB0UGF1c2VTY2hlZHVsZWQgPSBmYWxzZTsKIApAQCAtMTIzMSwxMiArMTI3NCwxNSBA
QCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmJyZWFrcG9pbnRBY3Rpb25Qcm9iZShKU0M6
OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYgogewogICAgIEluamVjdGVkU2NyaXB0IGluamVjdGVk
U2NyaXB0ID0gbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIuaW5qZWN0ZWRTY3JpcHRGb3IoZ2xvYmFs
T2JqZWN0KTsKICAgICBhdXRvIHBheWxvYWQgPSBpbmplY3RlZFNjcmlwdC53cmFwT2JqZWN0KHNh
bXBsZSwgb2JqZWN0R3JvdXBGb3JCcmVha3BvaW50QWN0aW9uKGFjdGlvbklEKSwgdHJ1ZSk7Cisg
ICAgaWYgKCFwYXlsb2FkKQorICAgICAgICByZXR1cm47CisKICAgICBhdXRvIHJlc3VsdCA9IFBy
b3RvY29sOjpEZWJ1Z2dlcjo6UHJvYmVTYW1wbGU6OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRQcm9i
ZUlkKGFjdGlvbklEKQogICAgICAgICAuc2V0QmF0Y2hJZChiYXRjaElkKQogICAgICAgICAuc2V0
U2FtcGxlSWQoc2FtcGxlSWQpCiAgICAgICAgIC5zZXRUaW1lc3RhbXAobV9pbmplY3RlZFNjcmlw
dE1hbmFnZXIuaW5zcGVjdG9yRW52aXJvbm1lbnQoKS5leGVjdXRpb25TdG9wd2F0Y2goKS5lbGFw
c2VkVGltZSgpLnNlY29uZHMoKSkKLSAgICAgICAgLnNldFBheWxvYWQoV1RGTW92ZShwYXlsb2Fk
KSkKKyAgICAgICAgLnNldFBheWxvYWQocGF5bG9hZC5yZWxlYXNlTm9uTnVsbCgpKQogICAgICAg
ICAucmVsZWFzZSgpOwogICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5kaWRTYW1wbGVQcm9iZShX
VEZNb3ZlKHJlc3VsdCkpOwogfQpAQCAtMTI2Nyw5ICsxMzEzLDggQEAgdm9pZCBJbnNwZWN0b3JE
ZWJ1Z2dlckFnZW50OjpicmVha1Byb2dyYW0oRGVidWdnZXJGcm9udGVuZERpc3BhdGNoZXI6OlJl
YXNvbiByZWEKIAogdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpjbGVhckluc3BlY3RvckJy
ZWFrcG9pbnRTdGF0ZSgpCiB7Ci0gICAgRXJyb3JTdHJpbmcgaWdub3JlZDsKICAgICBmb3IgKGF1
dG8mIHByb3RvY29sQnJlYWtwb2ludElEIDogY29weVRvVmVjdG9yKG1fZGVidWdnZXJCcmVha3Bv
aW50c0ZvclByb3RvY29sQnJlYWtwb2ludElELmtleXMoKSkpCi0gICAgICAgIHJlbW92ZUJyZWFr
cG9pbnQoaWdub3JlZCwgcHJvdG9jb2xCcmVha3BvaW50SUQpOworICAgICAgICByZW1vdmVCcmVh
a3BvaW50KHByb3RvY29sQnJlYWtwb2ludElEKTsKIAogICAgIG1fcHJvdG9jb2xCcmVha3BvaW50
Rm9yUHJvdG9jb2xCcmVha3BvaW50SUQuY2xlYXIoKTsKIApAQCAtMTMxNyw3ICsxMzYyLDcgQEAg
dm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkaWRDbGVhckdsb2JhbE9iamVjdCgpCiAgICAg
bV9mcm9udGVuZERpc3BhdGNoZXItPmdsb2JhbE9iamVjdENsZWFyZWQoKTsKIH0KIAotYm9vbCBJ
bnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojphc3NlcnRQYXVzZWQoRXJyb3JTdHJpbmcmIGVycm9yU3Ry
aW5nKQorYm9vbCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojphc3NlcnRQYXVzZWQoUHJvdG9jb2w6
OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZykKIHsKICAgICBpZiAoIW1fcGF1c2VkR2xvYmFsT2Jq
ZWN0KSB7CiAgICAgICAgIGVycm9yU3RyaW5nID0gIk11c3QgYmUgcGF1c2VkIl9zOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRGVi
dWdnZXJBZ2VudC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5z
cGVjdG9yRGVidWdnZXJBZ2VudC5oCmluZGV4IDMwZmY5ZjNjMjZkMWFlMDQ2NmE3MWE1YmY2MzY2
MTgyOTU0ZmEyZDguLjRmYzNmODRhNmUyMTJiODg1YjZhMmYzMjhmODFlZGY3NWY5MGE0NmMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2Fn
ZW50cy9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmgKQEAgLTQ4LDcgKzQ4LDYgQEAgbmFtZXNwYWNl
IEluc3BlY3RvciB7CiBjbGFzcyBBc3luY1N0YWNrVHJhY2U7CiBjbGFzcyBJbmplY3RlZFNjcmlw
dDsKIGNsYXNzIEluamVjdGVkU2NyaXB0TWFuYWdlcjsKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3Ry
aW5nOwogCiBjbGFzcyBKU19FWFBPUlRfUFJJVkFURSBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50IDog
cHVibGljIEluc3BlY3RvckFnZW50QmFzZSwgcHVibGljIERlYnVnZ2VyQmFja2VuZERpc3BhdGNo
ZXJIYW5kbGVyLCBwdWJsaWMgSlNDOjpEZWJ1Z2dlcjo6T2JzZXJ2ZXIgewogICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKEluc3BlY3RvckRlYnVnZ2VyQWdlbnQpOwpAQCAtNTYsNyArNTUsNyBAQCBj
bGFzcyBKU19FWFBPUlRfUFJJVkFURSBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50IDogcHVibGljIElu
c3BlY3RvckFnZW50QmFzZSwgcHVibAogcHVibGljOgogICAgIH5JbnNwZWN0b3JEZWJ1Z2dlckFn
ZW50KCkgb3ZlcnJpZGU7CiAKLSAgICBzdGF0aWMgUmVmUHRyPEpTQzo6QnJlYWtwb2ludD4gZGVi
dWdnZXJCcmVha3BvaW50RnJvbVBheWxvYWQoRXJyb3JTdHJpbmcmLCBjb25zdCBKU09OOjpPYmpl
Y3QqIG9wdGlvbnNQYXlsb2FkKTsKKyAgICBzdGF0aWMgUmVmUHRyPEpTQzo6QnJlYWtwb2ludD4g
ZGVidWdnZXJCcmVha3BvaW50RnJvbVBheWxvYWQoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiwgUmVm
UHRyPEpTT046Ok9iamVjdD4mJiBvcHRpb25zKTsKIAogICAgIHN0YXRpYyBjb25zdCBjaGFyKiBj
b25zdCBiYWNrdHJhY2VPYmplY3RHcm91cDsKIApAQCAtNjYsMzEgKzY1LDMxIEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIGJvb2wgZW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZW5hYmxlZDsgfQog
CiAgICAgLy8gRGVidWdnZXJCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIKLSAgICB2b2lkIGVuYWJs
ZShFcnJvclN0cmluZyYpIGZpbmFsOwotICAgIHZvaWQgZGlzYWJsZShFcnJvclN0cmluZyYpIGZp
bmFsOwotICAgIHZvaWQgc2V0QXN5bmNTdGFja1RyYWNlRGVwdGgoRXJyb3JTdHJpbmcmLCBpbnQg
ZGVwdGgpIGZpbmFsOwotICAgIHZvaWQgc2V0QnJlYWtwb2ludHNBY3RpdmUoRXJyb3JTdHJpbmcm
LCBib29sIGFjdGl2ZSkgZmluYWw7Ci0gICAgdm9pZCBzZXRCcmVha3BvaW50QnlVcmwoRXJyb3JT
dHJpbmcmLCBpbnQgbGluZU51bWJlciwgY29uc3QgU3RyaW5nKiBvcHRpb25hbFVSTCwgY29uc3Qg
U3RyaW5nKiBvcHRpb25hbFVSTFJlZ2V4LCBjb25zdCBpbnQqIG9wdGlvbmFsQ29sdW1uTnVtYmVy
LCBjb25zdCBKU09OOjpPYmplY3QqIG9wdGlvbnMsIFByb3RvY29sOjpEZWJ1Z2dlcjo6QnJlYWtw
b2ludElkKiwgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkRlYnVnZ2VyOjpMb2NhdGlv
bj4+JiBsb2NhdGlvbnMpIGZpbmFsOwotICAgIHZvaWQgc2V0QnJlYWtwb2ludChFcnJvclN0cmlu
ZyYsIGNvbnN0IEpTT046Ok9iamVjdCYgbG9jYXRpb24sIGNvbnN0IEpTT046Ok9iamVjdCogb3B0
aW9ucywgUHJvdG9jb2w6OkRlYnVnZ2VyOjpCcmVha3BvaW50SWQqIG91dEJyZWFrcG9pbnRJZCwg
UmVmUHRyPFByb3RvY29sOjpEZWJ1Z2dlcjo6TG9jYXRpb24+JiBvdXRBY3R1YWxMb2NhdGlvbikg
ZmluYWw7Ci0gICAgdm9pZCByZW1vdmVCcmVha3BvaW50KEVycm9yU3RyaW5nJiwgY29uc3QgU3Ry
aW5nJiBicmVha3BvaW50SWRlbnRpZmllcikgZmluYWw7Ci0gICAgdm9pZCBjb250aW51ZVVudGls
TmV4dFJ1bkxvb3AoRXJyb3JTdHJpbmcmKSBmaW5hbDsKLSAgICB2b2lkIGNvbnRpbnVlVG9Mb2Nh
dGlvbihFcnJvclN0cmluZyYsIGNvbnN0IEpTT046Ok9iamVjdCYgbG9jYXRpb24pIGZpbmFsOwot
ICAgIHZvaWQgc3RlcE5leHQoRXJyb3JTdHJpbmcmKSBmaW5hbDsKLSAgICB2b2lkIHN0ZXBPdmVy
KEVycm9yU3RyaW5nJikgZmluYWw7Ci0gICAgdm9pZCBzdGVwSW50byhFcnJvclN0cmluZyYpIGZp
bmFsOwotICAgIHZvaWQgc3RlcE91dChFcnJvclN0cmluZyYpIGZpbmFsOwotICAgIHZvaWQgcGF1
c2UoRXJyb3JTdHJpbmcmKSBmaW5hbDsKLSAgICB2b2lkIHJlc3VtZShFcnJvclN0cmluZyYpIGZp
bmFsOwotICAgIHZvaWQgc2VhcmNoSW5Db250ZW50KEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5n
JiBzY3JpcHRJRCwgY29uc3QgU3RyaW5nJiBxdWVyeSwgY29uc3QgYm9vbCogb3B0aW9uYWxDYXNl
U2Vuc2l0aXZlLCBjb25zdCBib29sKiBvcHRpb25hbElzUmVnZXgsIFJlZlB0cjxKU09OOjpBcnJh
eU9mPFByb3RvY29sOjpHZW5lcmljVHlwZXM6OlNlYXJjaE1hdGNoPj4mKSBmaW5hbDsKLSAgICB2
b2lkIGdldFNjcmlwdFNvdXJjZShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgc2NyaXB0SUQs
IFN0cmluZyogc2NyaXB0U291cmNlKSBmaW5hbDsKLSAgICB2b2lkIGdldEZ1bmN0aW9uRGV0YWls
cyhFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgZnVuY3Rpb25JZCwgUmVmUHRyPFByb3RvY29s
OjpEZWJ1Z2dlcjo6RnVuY3Rpb25EZXRhaWxzPiYpIGZpbmFsOwotICAgIHZvaWQgc2V0UGF1c2VP
bkRlYnVnZ2VyU3RhdGVtZW50cyhFcnJvclN0cmluZyYsIGJvb2wgZW5hYmxlZCwgY29uc3QgSlNP
Tjo6T2JqZWN0KiBvcHRpb25zKSBmaW5hbDsKLSAgICB2b2lkIHNldFBhdXNlT25FeGNlcHRpb25z
KEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBwYXVzZVN0YXRlLCBjb25zdCBKU09OOjpPYmpl
Y3QqIG9wdGlvbnMpIGZpbmFsOwotICAgIHZvaWQgc2V0UGF1c2VPbkFzc2VydGlvbnMoRXJyb3JT
dHJpbmcmLCBib29sIGVuYWJsZWQsIGNvbnN0IEpTT046Ok9iamVjdCogb3B0aW9ucykgZmluYWw7
Ci0gICAgdm9pZCBzZXRQYXVzZU9uTWljcm90YXNrcyhFcnJvclN0cmluZyYsIGJvb2wgZW5hYmxl
ZCwgY29uc3QgSlNPTjo6T2JqZWN0KiBvcHRpb25zKSBmaW5hbDsKLSAgICB2b2lkIHNldFBhdXNl
Rm9ySW50ZXJuYWxTY3JpcHRzKEVycm9yU3RyaW5nJiwgYm9vbCBzaG91bGRQYXVzZSkgZmluYWw7
Ci0gICAgdm9pZCBldmFsdWF0ZU9uQ2FsbEZyYW1lKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5n
JiBjYWxsRnJhbWVJZCwgY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBjb25zdCBTdHJpbmcqIG9i
amVjdEdyb3VwLCBjb25zdCBib29sKiBpbmNsdWRlQ29tbWFuZExpbmVBUEksIGNvbnN0IGJvb2wq
IGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29sZSwgY29uc3QgYm9vbCogcmV0dXJu
QnlWYWx1ZSwgY29uc3QgYm9vbCogZ2VuZXJhdGVQcmV2aWV3LCBjb25zdCBib29sKiBzYXZlUmVz
dWx0LCBjb25zdCBib29sKiBlbXVsYXRlVXNlckdlc3R1cmUsIFJlZlB0cjxQcm90b2NvbDo6UnVu
dGltZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0LCBPcHRpb25hbDxib29sPiYgd2FzVGhyb3duLCBP
cHRpb25hbDxpbnQ+JiBzYXZlZFJlc3VsdEluZGV4KSBvdmVycmlkZTsKLSAgICB2b2lkIHNldFNo
b3VsZEJsYWNrYm94VVJMKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiB1cmwsIGJvb2wgc2hv
dWxkQmxhY2tib3gsIGNvbnN0IGJvb2wqIGNhc2VTZW5zaXRpdmUsIGNvbnN0IGJvb2wqIGlzUmVn
ZXgpIGZpbmFsOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGVuYWJsZSgpIGZp
bmFsOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGRpc2FibGUoKSBmaW5hbDsK
KyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzZXRBc3luY1N0YWNrVHJhY2VEZXB0
aChpbnQpIGZpbmFsOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHNldEJyZWFr
cG9pbnRzQWN0aXZlKGJvb2wpIGZpbmFsOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHN0
ZDo6dHVwbGU8UHJvdG9jb2w6OkRlYnVnZ2VyOjpCcmVha3BvaW50SWQsIFJlZjxKU09OOjpBcnJh
eU9mPFByb3RvY29sOjpEZWJ1Z2dlcjo6TG9jYXRpb24+Pj4+IHNldEJyZWFrcG9pbnRCeVVybChp
bnQgbGluZU51bWJlciwgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgdXJsUmVnZXgs
IE9wdGlvbmFsPGludD4mJiBjb2x1bW5OdW1iZXIsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgb3B0
aW9ucykgZmluYWw7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8c3RkOjp0dXBsZTxQcm90
b2NvbDo6RGVidWdnZXI6OkJyZWFrcG9pbnRJZCwgUmVmPFByb3RvY29sOjpEZWJ1Z2dlcjo6TG9j
YXRpb24+Pj4gc2V0QnJlYWtwb2ludChSZWY8SlNPTjo6T2JqZWN0PiYmIGxvY2F0aW9uLCBSZWZQ
dHI8SlNPTjo6T2JqZWN0PiYmIG9wdGlvbnMpIGZpbmFsOworICAgIFByb3RvY29sOjpFcnJvclN0
cmluZ09yPHZvaWQ+IHJlbW92ZUJyZWFrcG9pbnQoY29uc3QgUHJvdG9jb2w6OkRlYnVnZ2VyOjpC
cmVha3BvaW50SWQmKSBmaW5hbDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBj
b250aW51ZVVudGlsTmV4dFJ1bkxvb3AoKSBmaW5hbDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJp
bmdPcjx2b2lkPiBjb250aW51ZVRvTG9jYXRpb24oUmVmPEpTT046Ok9iamVjdD4mJiBsb2NhdGlv
bikgZmluYWw7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc3RlcE5leHQoKSBm
aW5hbDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzdGVwT3ZlcigpIGZpbmFs
OworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHN0ZXBJbnRvKCkgZmluYWw7Cisg
ICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc3RlcE91dCgpIGZpbmFsOworICAgIFBy
b3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHBhdXNlKCkgZmluYWw7CisgICAgUHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8dm9pZD4gcmVzdW1lKCkgZmluYWw7CisgICAgUHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8UmVmPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkdlbmVyaWNUeXBlczo6U2VhcmNo
TWF0Y2g+Pj4gc2VhcmNoSW5Db250ZW50KGNvbnN0IFByb3RvY29sOjpEZWJ1Z2dlcjo6U2NyaXB0
SWQmLCBjb25zdCBTdHJpbmcmIHF1ZXJ5LCBPcHRpb25hbDxib29sPiYmIGNhc2VTZW5zaXRpdmUs
IE9wdGlvbmFsPGJvb2w+JiYgaXNSZWdleCkgZmluYWw7CisgICAgUHJvdG9jb2w6OkVycm9yU3Ry
aW5nT3I8U3RyaW5nPiBnZXRTY3JpcHRTb3VyY2UoY29uc3QgUHJvdG9jb2w6OkRlYnVnZ2VyOjpT
Y3JpcHRJZCYpIGZpbmFsOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxQcm90b2Nv
bDo6RGVidWdnZXI6OkZ1bmN0aW9uRGV0YWlscz4+IGdldEZ1bmN0aW9uRGV0YWlscyhjb25zdCBT
dHJpbmcmIGZ1bmN0aW9uSWQpIGZpbmFsOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZv
aWQ+IHNldFBhdXNlT25EZWJ1Z2dlclN0YXRlbWVudHMoYm9vbCBlbmFibGVkLCBSZWZQdHI8SlNP
Tjo6T2JqZWN0PiYmIG9wdGlvbnMpIGZpbmFsOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09y
PHZvaWQ+IHNldFBhdXNlT25FeGNlcHRpb25zKGNvbnN0IFN0cmluZyYgc3RhdGUsIFJlZlB0cjxK
U09OOjpPYmplY3Q+JiYgb3B0aW9ucykgZmluYWw7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5n
T3I8dm9pZD4gc2V0UGF1c2VPbkFzc2VydGlvbnMoYm9vbCBlbmFibGVkLCBSZWZQdHI8SlNPTjo6
T2JqZWN0PiYmIG9wdGlvbnMpIGZpbmFsOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZv
aWQ+IHNldFBhdXNlT25NaWNyb3Rhc2tzKGJvb2wgZW5hYmxlZCwgUmVmUHRyPEpTT046Ok9iamVj
dD4mJiBvcHRpb25zKSBmaW5hbDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBz
ZXRQYXVzZUZvckludGVybmFsU2NyaXB0cyhib29sIHNob3VsZFBhdXNlKSBmaW5hbDsKKyAgICBQ
cm90b2NvbDo6RXJyb3JTdHJpbmdPcjxzdGQ6OnR1cGxlPFJlZjxQcm90b2NvbDo6UnVudGltZTo6
UmVtb3RlT2JqZWN0PiwgT3B0aW9uYWw8Ym9vbD4gLyogd2FzVGhyb3duICovLCBPcHRpb25hbDxp
bnQ+IC8qIHNhdmVkUmVzdWx0SW5kZXggKi8+PiBldmFsdWF0ZU9uQ2FsbEZyYW1lKGNvbnN0IFBy
b3RvY29sOjpEZWJ1Z2dlcjo6Q2FsbEZyYW1lSWQmLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24s
IGNvbnN0IFN0cmluZyYgb2JqZWN0R3JvdXAsIE9wdGlvbmFsPGJvb2w+JiYgaW5jbHVkZUNvbW1h
bmRMaW5lQVBJLCBPcHRpb25hbDxib29sPiYmIGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRl
Q29uc29sZSwgT3B0aW9uYWw8Ym9vbD4mJiByZXR1cm5CeVZhbHVlLCBPcHRpb25hbDxib29sPiYm
IGdlbmVyYXRlUHJldmlldywgT3B0aW9uYWw8Ym9vbD4mJiBzYXZlUmVzdWx0LCBPcHRpb25hbDxi
b29sPiYmIGVtdWxhdGVVc2VyR2VzdHVyZSkgb3ZlcnJpZGU7CisgICAgUHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8dm9pZD4gc2V0U2hvdWxkQmxhY2tib3hVUkwoY29uc3QgU3RyaW5nJiB1cmwsIGJv
b2wgc2hvdWxkQmxhY2tib3gsIE9wdGlvbmFsPGJvb2w+JiYgY2FzZVNlbnNpdGl2ZSwgT3B0aW9u
YWw8Ym9vbD4mJiBpc1JlZ2V4KSBmaW5hbDsKIAogICAgIC8vIEpTQzo6RGVidWdnZXI6Ok9ic2Vy
dmVyCiAgICAgdm9pZCBkaWRQYXJzZVNvdXJjZShKU0M6OlNvdXJjZUlELCBjb25zdCBKU0M6OkRl
YnVnZ2VyOjpTY3JpcHQmKSBmaW5hbDsKQEAgLTE0MiwxMSArMTQxLDExIEBAIHB1YmxpYzoKIAog
cHJvdGVjdGVkOgogICAgIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQoQWdlbnRDb250ZXh0Jik7Ci0g
ICAgdmlydHVhbCB2b2lkIGVuYWJsZSgpOwotICAgIHZpcnR1YWwgdm9pZCBkaXNhYmxlKGJvb2wg
aXNCZWluZ0Rlc3Ryb3llZCk7CisgICAgdmlydHVhbCB2b2lkIGludGVybmFsRW5hYmxlKCk7Cisg
ICAgdmlydHVhbCB2b2lkIGludGVybmFsRGlzYWJsZShib29sIGlzQmVpbmdEZXN0cm95ZWQpOwog
CiAgICAgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyJiBpbmplY3RlZFNjcmlwdE1hbmFnZXIoKSBjb25z
dCB7IHJldHVybiBtX2luamVjdGVkU2NyaXB0TWFuYWdlcjsgfQotICAgIHZpcnR1YWwgSW5qZWN0
ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHRGb3JFdmFsKEVycm9yU3RyaW5nJiwgY29uc3QgaW50KiBl
eGVjdXRpb25Db250ZXh0SWQpID0gMDsKKyAgICB2aXJ0dWFsIEluamVjdGVkU2NyaXB0IGluamVj
dGVkU2NyaXB0Rm9yRXZhbChQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBPcHRpb25hbDxQcm90b2Nv
bDo6UnVudGltZTo6RXhlY3V0aW9uQ29udGV4dElkPiYmKSA9IDA7CiAKICAgICBKU0M6OkRlYnVn
Z2VyJiBkZWJ1Z2dlcigpIHsgcmV0dXJuIG1fZGVidWdnZXI7IH0KIApAQCAtMTY2LDggKzE2NSw4
IEBAIHByaXZhdGU6CiAgICAgY2xhc3MgUHJvdG9jb2xCcmVha3BvaW50IHsKICAgICAgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgcHVibGljOgotICAgICAgICBzdGF0aWMgT3B0aW9u
YWw8UHJvdG9jb2xCcmVha3BvaW50PiBmcm9tUGF5bG9hZChFcnJvclN0cmluZyYsIEpTQzo6U291
cmNlSUQsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIHVuc2lnbmVkIGNvbHVtbk51bWJlciwgY29uc3Qg
SlNPTjo6T2JqZWN0KiBvcHRpb25zUGF5bG9hZCA9IG51bGxwdHIpOwotICAgICAgICBzdGF0aWMg
T3B0aW9uYWw8UHJvdG9jb2xCcmVha3BvaW50PiBmcm9tUGF5bG9hZChFcnJvclN0cmluZyYsIGNv
bnN0IFN0cmluZyYgdXJsLCBib29sIGlzUmVnZXgsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIHVuc2ln
bmVkIGNvbHVtbk51bWJlciwgY29uc3QgSlNPTjo6T2JqZWN0KiBvcHRpb25zUGF5bG9hZCA9IG51
bGxwdHIpOworICAgICAgICBzdGF0aWMgT3B0aW9uYWw8UHJvdG9jb2xCcmVha3BvaW50PiBmcm9t
UGF5bG9hZChQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBKU0M6OlNvdXJjZUlELCB1bnNpZ25lZCBs
aW5lTnVtYmVyLCB1bnNpZ25lZCBjb2x1bW5OdW1iZXIsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYg
b3B0aW9ucyA9IG51bGxwdHIpOworICAgICAgICBzdGF0aWMgT3B0aW9uYWw8UHJvdG9jb2xCcmVh
a3BvaW50PiBmcm9tUGF5bG9hZChQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcm
IHVybCwgYm9vbCBpc1JlZ2V4LCB1bnNpZ25lZCBsaW5lTnVtYmVyLCB1bnNpZ25lZCBjb2x1bW5O
dW1iZXIsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgb3B0aW9ucyA9IG51bGxwdHIpOwogCiAgICAg
ICAgIFByb3RvY29sQnJlYWtwb2ludCgpOwogICAgICAgICBQcm90b2NvbEJyZWFrcG9pbnQoSlND
OjpTb3VyY2VJRCwgdW5zaWduZWQgbGluZU51bWJlciwgdW5zaWduZWQgY29sdW1uTnVtYmVyLCBj
b25zdCBTdHJpbmcmIGNvbmRpdGlvbiA9IG51bGxTdHJpbmcoKSwgSlNDOjpCcmVha3BvaW50OjpB
Y3Rpb25zVmVjdG9yJiYgYWN0aW9ucyA9IHsgfSwgYm9vbCBhdXRvQ29udGludWUgPSBmYWxzZSwg
c2l6ZV90IGlnbm9yZUNvdW50ID0gMCk7CkBAIC0xNzUsMTIgKzE3NCwxMiBAQCBwcml2YXRlOgog
CiAgICAgICAgIFJlZjxKU0M6OkJyZWFrcG9pbnQ+IGNyZWF0ZURlYnVnZ2VyQnJlYWtwb2ludChK
U0M6OkJyZWFrcG9pbnRJRCwgSlNDOjpTb3VyY2VJRCkgY29uc3Q7CiAKLSAgICAgICAgY29uc3Qg
SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OkJyZWFrcG9pbnRJZCYgaWQoKSBjb25zdCB7
IHJldHVybiBtX2lkOyB9CisgICAgICAgIGNvbnN0IFByb3RvY29sOjpEZWJ1Z2dlcjo6QnJlYWtw
b2ludElkJiBpZCgpIGNvbnN0IHsgcmV0dXJuIG1faWQ7IH0KIAogICAgICAgICBib29sIG1hdGNo
ZXNTY3JpcHRVUkwoY29uc3QgU3RyaW5nJikgY29uc3Q7CiAKICAgICBwcml2YXRlOgotICAgICAg
ICBJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6QnJlYWtwb2ludElkIG1faWQ7CisgICAg
ICAgIFByb3RvY29sOjpEZWJ1Z2dlcjo6QnJlYWtwb2ludElkIG1faWQ7CiAKICNpZiBBU1NFUlRf
RU5BQkxFRAogICAgICAgICBKU0M6OlNvdXJjZUlEIG1fc291cmNlSUQgeyBKU0M6Om5vU291cmNl
SUQgfTsKQEAgLTIwMiw3ICsyMDEsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgc2V0QnJlYWtwb2lu
dChKU0M6OkJyZWFrcG9pbnQmKTsKICAgICB2b2lkIGRpZFNldEJyZWFrcG9pbnQoUHJvdG9jb2xC
cmVha3BvaW50JiwgSlNDOjpCcmVha3BvaW50Jik7CiAKLSAgICBib29sIGFzc2VydFBhdXNlZChF
cnJvclN0cmluZyYpOworICAgIGJvb2wgYXNzZXJ0UGF1c2VkKFByb3RvY29sOjpFcnJvclN0cmlu
ZyYpOwogICAgIHZvaWQgY2xlYXJEZWJ1Z2dlckJyZWFrcG9pbnRTdGF0ZSgpOwogICAgIHZvaWQg
Y2xlYXJJbnNwZWN0b3JCcmVha3BvaW50U3RhdGUoKTsKICAgICB2b2lkIGNsZWFyUGF1c2VEZXRh
aWxzKCk7CkBAIC0yNDgsOCArMjQ3LDggQEAgcHJpdmF0ZToKICAgICBKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiBtX3BhdXNlZEdsb2JhbE9iamVjdCB7IG51bGxwdHIgfTsKICAgICBKU0M6OlN0cm9uZzxK
U0M6OlVua25vd24+IG1fY3VycmVudENhbGxTdGFjazsKIAotICAgIEhhc2hNYXA8SW5zcGVjdG9y
OjpQcm90b2NvbDo6RGVidWdnZXI6OkJyZWFrcG9pbnRJZCwgUHJvdG9jb2xCcmVha3BvaW50PiBt
X3Byb3RvY29sQnJlYWtwb2ludEZvclByb3RvY29sQnJlYWtwb2ludElEOwotICAgIEhhc2hNYXA8
SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OkJyZWFrcG9pbnRJZCwgSlNDOjpCcmVha3Bv
aW50c1ZlY3Rvcj4gbV9kZWJ1Z2dlckJyZWFrcG9pbnRzRm9yUHJvdG9jb2xCcmVha3BvaW50SUQ7
CisgICAgSGFzaE1hcDxQcm90b2NvbDo6RGVidWdnZXI6OkJyZWFrcG9pbnRJZCwgUHJvdG9jb2xC
cmVha3BvaW50PiBtX3Byb3RvY29sQnJlYWtwb2ludEZvclByb3RvY29sQnJlYWtwb2ludElEOwor
ICAgIEhhc2hNYXA8UHJvdG9jb2w6OkRlYnVnZ2VyOjpCcmVha3BvaW50SWQsIEpTQzo6QnJlYWtw
b2ludHNWZWN0b3I+IG1fZGVidWdnZXJCcmVha3BvaW50c0ZvclByb3RvY29sQnJlYWtwb2ludElE
OwogICAgIEpTQzo6QnJlYWtwb2ludElEIG1fbmV4dERlYnVnZ2VyQnJlYWtwb2ludElEIHsgSlND
Ojpub0JyZWFrcG9pbnRJRCArIDEgfTsKIAogICAgIFJlZlB0cjxKU0M6OkJyZWFrcG9pbnQ+IG1f
Y29udGludWVUb0xvY2F0aW9uRGVidWdnZXJCcmVha3BvaW50OwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9ySGVhcEFnZW50LmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckhlYXBBZ2Vu
dC5jcHAKaW5kZXggOGM2MjFhZDQxYzRkYTUwMDQzZDMwMjIwMGE0NmZhZTllZmM5NzE4Yy4uODVj
ZWQ5ZjNkZjYyMjMwMWI5NWUzM2U0OTM1Y2JiZjE2MmI3ZTMzMCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9ySGVhcEFnZW50LmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JIZWFw
QWdlbnQuY3BwCkBAIC01NiwyOCArNTYsMjUgQEAgdm9pZCBJbnNwZWN0b3JIZWFwQWdlbnQ6OmRp
ZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChGcm9udGVuZFJvdXRlciosIEJhY2tlbmREaXMKIAog
dm9pZCBJbnNwZWN0b3JIZWFwQWdlbnQ6OndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKERp
c2Nvbm5lY3RSZWFzb24pCiB7Ci0gICAgRXJyb3JTdHJpbmcgaWdub3JlZDsKLSAgICBkaXNhYmxl
KGlnbm9yZWQpOworICAgIGRpc2FibGUoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JIZWFwQWdlbnQ6
OmVuYWJsZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdP
cjx2b2lkPiBJbnNwZWN0b3JIZWFwQWdlbnQ6OmVuYWJsZSgpCiB7Ci0gICAgaWYgKG1fZW5hYmxl
ZCkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJIZWFwIGRvbWFpbiBhbHJlYWR5IGVuYWJsZWQi
X3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKG1fZW5hYmxlZCkKKyAgICAgICAg
cmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJIZWFwIGRvbWFpbiBhbHJlYWR5IGVuYWJsZWQiX3MpOwog
CiAgICAgbV9lbmFibGVkID0gdHJ1ZTsKIAogICAgIG1fZW52aXJvbm1lbnQudm0oKS5oZWFwLmFk
ZE9ic2VydmVyKHRoaXMpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JI
ZWFwQWdlbnQ6OmRpc2FibGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nKQorUHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9ySGVhcEFnZW50OjpkaXNhYmxlKCkKIHsKLSAgICBp
ZiAoIW1fZW5hYmxlZCkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJIZWFwIGRvbWFpbiBhbHJl
YWR5IGRpc2FibGVkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghbV9lbmFi
bGVkKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkhlYXAgZG9tYWluIGFscmVhZHkg
ZGlzYWJsZWQiX3MpOwogCiAgICAgbV9lbmFibGVkID0gZmFsc2U7CiAgICAgbV90cmFja2luZyA9
IGZhbHNlOwpAQCAtODUsMTcgKzgyLDIxIEBAIHZvaWQgSW5zcGVjdG9ySGVhcEFnZW50OjpkaXNh
YmxlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZykKICAgICBtX2Vudmlyb25tZW50LnZtKCkuaGVh
cC5yZW1vdmVPYnNlcnZlcih0aGlzKTsKIAogICAgIGNsZWFySGVhcFNuYXBzaG90cygpOworCisg
ICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JIZWFwQWdlbnQ6OmdjKEVycm9yU3Ry
aW5nJikKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckhlYXBBZ2VudDo6
Z2MoKQogewogICAgIFZNJiB2bSA9IG1fZW52aXJvbm1lbnQudm0oKTsKICAgICBKU0xvY2tIb2xk
ZXIgbG9jayh2bSk7CiAgICAgc2FuaXRpemVTdGFja0ZvclZNKHZtKTsKICAgICB2bS5oZWFwLmNv
bGxlY3ROb3coU3luYywgQ29sbGVjdGlvblNjb3BlOjpGdWxsKTsKKworICAgIHJldHVybiB7IH07
CiB9CiAKLXZvaWQgSW5zcGVjdG9ySGVhcEFnZW50OjpzbmFwc2hvdChFcnJvclN0cmluZyYsIGRv
dWJsZSogdGltZXN0YW1wLCBTdHJpbmcqIHNuYXBzaG90RGF0YSkKK1Byb3RvY29sOjpFcnJvclN0
cmluZ09yPHN0ZDo6dHVwbGU8ZG91YmxlLCBQcm90b2NvbDo6SGVhcDo6SGVhcFNuYXBzaG90RGF0
YT4+IEluc3BlY3RvckhlYXBBZ2VudDo6c25hcHNob3QoKQogewogICAgIFZNJiB2bSA9IG1fZW52
aXJvbm1lbnQudm0oKTsKICAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CkBAIC0xMDMsOCArMTA0
LDggQEAgdm9pZCBJbnNwZWN0b3JIZWFwQWdlbnQ6OnNuYXBzaG90KEVycm9yU3RyaW5nJiwgZG91
YmxlKiB0aW1lc3RhbXAsIFN0cmluZyogc25hcHMKICAgICBIZWFwU25hcHNob3RCdWlsZGVyIHNu
YXBzaG90QnVpbGRlcih2bS5lbnN1cmVIZWFwUHJvZmlsZXIoKSk7CiAgICAgc25hcHNob3RCdWls
ZGVyLmJ1aWxkU25hcHNob3QoKTsKIAotICAgICp0aW1lc3RhbXAgPSBtX2Vudmlyb25tZW50LmV4
ZWN1dGlvblN0b3B3YXRjaCgpLmVsYXBzZWRUaW1lKCkuc2Vjb25kcygpOwotICAgICpzbmFwc2hv
dERhdGEgPSBzbmFwc2hvdEJ1aWxkZXIuanNvbihbJl0gKGNvbnN0IEhlYXBTbmFwc2hvdE5vZGUm
IG5vZGUpIHsKKyAgICBhdXRvIHRpbWVzdGFtcCA9IG1fZW52aXJvbm1lbnQuZXhlY3V0aW9uU3Rv
cHdhdGNoKCkuZWxhcHNlZFRpbWUoKS5zZWNvbmRzKCk7CisgICAgYXV0byBzbmFwc2hvdERhdGEg
PSBzbmFwc2hvdEJ1aWxkZXIuanNvbihbJl0gKGNvbnN0IEhlYXBTbmFwc2hvdE5vZGUmIG5vZGUp
IHsKICAgICAgICAgaWYgKFN0cnVjdHVyZSogc3RydWN0dXJlID0gbm9kZS5jZWxsLT5zdHJ1Y3R1
cmUodm0pKSB7CiAgICAgICAgICAgICBpZiAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9
IHN0cnVjdHVyZS0+Z2xvYmFsT2JqZWN0KCkpIHsKICAgICAgICAgICAgICAgICBpZiAoIW1fZW52
aXJvbm1lbnQuY2FuQWNjZXNzSW5zcGVjdGVkU2NyaXB0U3RhdGUoZ2xvYmFsT2JqZWN0KSkKQEAg
LTExMywzNyArMTE0LDQ1IEBAIHZvaWQgSW5zcGVjdG9ySGVhcEFnZW50OjpzbmFwc2hvdChFcnJv
clN0cmluZyYsIGRvdWJsZSogdGltZXN0YW1wLCBTdHJpbmcqIHNuYXBzCiAgICAgICAgIH0KICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfSk7CisKKyAgICByZXR1cm4geyB7IHRpbWVzdGFtcCwg
c25hcHNob3REYXRhIH0gfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JIZWFwQWdlbnQ6OnN0YXJ0VHJh
Y2tpbmcoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8
dm9pZD4gSW5zcGVjdG9ySGVhcEFnZW50OjpzdGFydFRyYWNraW5nKCkKIHsKICAgICBpZiAobV90
cmFja2luZykKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4geyB9OwogCiAgICAgbV90
cmFja2luZyA9IHRydWU7CiAKLSAgICBkb3VibGUgdGltZXN0YW1wOwotICAgIFN0cmluZyBzbmFw
c2hvdERhdGE7Ci0gICAgc25hcHNob3QoZXJyb3JTdHJpbmcsICZ0aW1lc3RhbXAsICZzbmFwc2hv
dERhdGEpOworICAgIGF1dG8gcmVzdWx0ID0gc25hcHNob3QoKTsKKyAgICBpZiAoIXJlc3VsdCkK
KyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKFdURk1vdmUocmVzdWx0LmVycm9yKCkpKTsK
IAorICAgIGF1dG8gW3RpbWVzdGFtcCwgc25hcHNob3REYXRhXSA9IFdURk1vdmUocmVzdWx0LnZh
bHVlKCkpOwogICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT50cmFja2luZ1N0YXJ0KHRpbWVzdGFt
cCwgc25hcHNob3REYXRhKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9y
SGVhcEFnZW50OjpzdG9wVHJhY2tpbmcoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nKQorUHJvdG9j
b2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9ySGVhcEFnZW50OjpzdG9wVHJhY2tpbmco
KQogewogICAgIGlmICghbV90cmFja2luZykKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1
cm4geyB9OwogCiAgICAgbV90cmFja2luZyA9IGZhbHNlOwogCi0gICAgZG91YmxlIHRpbWVzdGFt
cDsKLSAgICBTdHJpbmcgc25hcHNob3REYXRhOwotICAgIHNuYXBzaG90KGVycm9yU3RyaW5nLCAm
dGltZXN0YW1wLCAmc25hcHNob3REYXRhKTsKKyAgICBhdXRvIHJlc3VsdCA9IHNuYXBzaG90KCk7
CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChXVEZNb3Zl
KHJlc3VsdC5lcnJvcigpKSk7CiAKKyAgICBhdXRvIFt0aW1lc3RhbXAsIHNuYXBzaG90RGF0YV0g
PSBXVEZNb3ZlKHJlc3VsdC52YWx1ZSgpKTsKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+dHJh
Y2tpbmdDb21wbGV0ZSh0aW1lc3RhbXAsIHNuYXBzaG90RGF0YSk7CisKKyAgICByZXR1cm4geyB9
OwogfQogCi1PcHRpb25hbDxIZWFwU25hcHNob3ROb2RlPiBJbnNwZWN0b3JIZWFwQWdlbnQ6Om5v
ZGVGb3JIZWFwT2JqZWN0SWRlbnRpZmllcihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIHVuc2ln
bmVkIGhlYXBPYmplY3RJZGVudGlmaWVyKQorT3B0aW9uYWw8SGVhcFNuYXBzaG90Tm9kZT4gSW5z
cGVjdG9ySGVhcEFnZW50Ojpub2RlRm9ySGVhcE9iamVjdElkZW50aWZpZXIoUHJvdG9jb2w6OkVy
cm9yU3RyaW5nJiBlcnJvclN0cmluZywgdW5zaWduZWQgaGVhcE9iamVjdElkZW50aWZpZXIpCiB7
CiAgICAgSGVhcFByb2ZpbGVyKiBoZWFwUHJvZmlsZXIgPSBtX2Vudmlyb25tZW50LnZtKCkuaGVh
cFByb2ZpbGVyKCk7CiAgICAgaWYgKCFoZWFwUHJvZmlsZXIpIHsKQEAgLTE2Niw4ICsxNzUsMTAg
QEAgT3B0aW9uYWw8SGVhcFNuYXBzaG90Tm9kZT4gSW5zcGVjdG9ySGVhcEFnZW50Ojpub2RlRm9y
SGVhcE9iamVjdElkZW50aWZpZXIoRXJyb3IKICAgICByZXR1cm4gb3B0aW9uYWxOb2RlOwogfQog
Ci12b2lkIEluc3BlY3RvckhlYXBBZ2VudDo6Z2V0UHJldmlldyhFcnJvclN0cmluZyYgZXJyb3JT
dHJpbmcsIGludCBoZWFwT2JqZWN0SWQsIE9wdGlvbmFsPFN0cmluZz4mIHJlc3VsdFN0cmluZywg
UmVmUHRyPFByb3RvY29sOjpEZWJ1Z2dlcjo6RnVuY3Rpb25EZXRhaWxzPiYgZnVuY3Rpb25EZXRh
aWxzLCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6Ok9iamVjdFByZXZpZXc+JiBvYmplY3RQcmV2
aWV3KQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8c3RkOjp0dXBsZTxTdHJpbmcsIFJlZlB0cjxQ
cm90b2NvbDo6RGVidWdnZXI6OkZ1bmN0aW9uRGV0YWlscz4sIFJlZlB0cjxQcm90b2NvbDo6UnVu
dGltZTo6T2JqZWN0UHJldmlldz4+PiBJbnNwZWN0b3JIZWFwQWdlbnQ6OmdldFByZXZpZXcoaW50
IGhlYXBPYmplY3RJZCkKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7
CisKICAgICAvLyBQcmV2ZW50IHRoZSBjZWxsIGZyb20gZ2V0dGluZyBjb2xsZWN0ZWQgYXMgd2Ug
bG9vayBpdCB1cC4KICAgICBWTSYgdm0gPSBtX2Vudmlyb25tZW50LnZtKCk7CiAgICAgSlNMb2Nr
SG9sZGVyIGxvY2sodm0pOwpAQCAtMTc2LDUzICsxODcsNDggQEAgdm9pZCBJbnNwZWN0b3JIZWFw
QWdlbnQ6OmdldFByZXZpZXcoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgaGVhcE9iamVj
dElkLAogICAgIHVuc2lnbmVkIGhlYXBPYmplY3RJZGVudGlmaWVyID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KGhlYXBPYmplY3RJZCk7CiAgICAgY29uc3QgT3B0aW9uYWw8SGVhcFNuYXBzaG90Tm9k
ZT4gb3B0aW9uYWxOb2RlID0gbm9kZUZvckhlYXBPYmplY3RJZGVudGlmaWVyKGVycm9yU3RyaW5n
LCBoZWFwT2JqZWN0SWRlbnRpZmllcik7CiAgICAgaWYgKCFvcHRpb25hbE5vZGUpCi0gICAgICAg
IHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAog
ICAgIC8vIFN0cmluZyBwcmV2aWV3LgogICAgIEpTQ2VsbCogY2VsbCA9IG9wdGlvbmFsTm9kZS0+
Y2VsbDsKLSAgICBpZiAoY2VsbC0+aXNTdHJpbmcoKSkgewotICAgICAgICByZXN1bHRTdHJpbmcg
PSBhc1N0cmluZyhjZWxsKS0+dHJ5R2V0VmFsdWUoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
KyAgICBpZiAoY2VsbC0+aXNTdHJpbmcoKSkKKyAgICAgICAgcmV0dXJuIHsgeyBhc1N0cmluZyhj
ZWxsKS0+dHJ5R2V0VmFsdWUoKSwgbnVsbHB0ciwgbnVsbHB0ciB9IH07CiAKICAgICAvLyBCaWdJ
bnQgcHJldmlldy4KLSAgICBpZiAoY2VsbC0+aXNIZWFwQmlnSW50KCkpIHsKLSAgICAgICAgcmVz
dWx0U3RyaW5nID0gSlNCaWdJbnQ6OnRyeUdldFN0cmluZyh2bSwgYXNIZWFwQmlnSW50KGNlbGwp
LCAxMCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKGNlbGwtPmlzSGVhcEJpZ0lu
dCgpKQorICAgICAgICByZXR1cm4geyB7IEpTQmlnSW50Ojp0cnlHZXRTdHJpbmcodm0sIGFzSGVh
cEJpZ0ludChjZWxsKSwgMTApLCBudWxscHRyLCBudWxscHRyIH0gfTsKIAogICAgIC8vIEZJWE1F
OiBQcm92aWRlIHByZXZpZXcgaW5mb3JtYXRpb24gZm9yIEludGVybmFsIE9iamVjdHM/IENvZGVC
bG9jaywgRXhlY3V0YWJsZSwgZXRjLgogCiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBjZWxs
LT5zdHJ1Y3R1cmUodm0pOwotICAgIGlmICghc3RydWN0dXJlKSB7Ci0gICAgICAgIGVycm9yU3Ry
aW5nID0gIlVuYWJsZSB0byBnZXQgb2JqZWN0IGRldGFpbHMgLSBTdHJ1Y3R1cmUiX3M7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKCFzdHJ1Y3R1cmUpCisgICAgICAgIHJldHVybiBt
YWtlVW5leHBlY3RlZCgiVW5hYmxlIHRvIGdldCBvYmplY3QgZGV0YWlscyAtIFN0cnVjdHVyZSJf
cyk7CiAKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gc3RydWN0dXJlLT5nbG9i
YWxPYmplY3QoKTsKLSAgICBpZiAoIWdsb2JhbE9iamVjdCkgewotICAgICAgICBlcnJvclN0cmlu
ZyA9ICJVbmFibGUgdG8gZ2V0IG9iamVjdCBkZXRhaWxzIC0gR2xvYmFsT2JqZWN0Il9zOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghZ2xvYmFsT2JqZWN0KQorICAgICAgICByZXR1
cm4gbWFrZVVuZXhwZWN0ZWQoIlVuYWJsZSB0byBnZXQgb2JqZWN0IGRldGFpbHMgLSBHbG9iYWxP
YmplY3QiX3MpOwogCiAgICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHQgPSBtX2luamVj
dGVkU2NyaXB0TWFuYWdlci5pbmplY3RlZFNjcmlwdEZvcihnbG9iYWxPYmplY3QpOwotICAgIGlm
IChpbmplY3RlZFNjcmlwdC5oYXNOb1ZhbHVlKCkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAi
VW5hYmxlIHRvIGdldCBvYmplY3QgZGV0YWlscyAtIEluamVjdGVkU2NyaXB0Il9zOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQorICAgIGlmIChpbmplY3RlZFNjcmlwdC5oYXNOb1ZhbHVlKCkpCisg
ICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiVW5hYmxlIHRvIGdldCBvYmplY3QgZGV0YWls
cyAtIEluamVjdGVkU2NyaXB0Il9zKTsKIAogICAgIC8vIEZ1bmN0aW9uIHByZXZpZXcuCiAgICAg
aWYgKGNlbGwtPmluaGVyaXRzPEpTRnVuY3Rpb24+KHZtKSkgeworICAgICAgICBSZWZQdHI8UHJv
dG9jb2w6OkRlYnVnZ2VyOjpGdW5jdGlvbkRldGFpbHM+IGZ1bmN0aW9uRGV0YWlsczsKICAgICAg
ICAgaW5qZWN0ZWRTY3JpcHQuZnVuY3Rpb25EZXRhaWxzKGVycm9yU3RyaW5nLCBjZWxsLCBmdW5j
dGlvbkRldGFpbHMpOwotICAgICAgICByZXR1cm47CisgICAgICAgIGlmICghZnVuY3Rpb25EZXRh
aWxzKQorICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKKyAg
ICAgICAgcmV0dXJuIHsgeyBudWxsU3RyaW5nKCksIGZ1bmN0aW9uRGV0YWlscywgbnVsbHB0ciB9
IH07CiAgICAgfQogCiAgICAgLy8gT2JqZWN0IHByZXZpZXcuCi0gICAgb2JqZWN0UHJldmlldyA9
IGluamVjdGVkU2NyaXB0LnByZXZpZXdWYWx1ZShjZWxsKTsKKyAgICByZXR1cm4geyB7IG51bGxT
dHJpbmcoKSwgbnVsbHB0ciwgaW5qZWN0ZWRTY3JpcHQucHJldmlld1ZhbHVlKGNlbGwpIH0gfTsK
IH0KIAotdm9pZCBJbnNwZWN0b3JIZWFwQWdlbnQ6OmdldFJlbW90ZU9iamVjdChFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcsIGludCBoZWFwT2JqZWN0SWQsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxP
YmplY3RHcm91cCwgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiByZXN1
bHQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90
ZU9iamVjdD4+IEluc3BlY3RvckhlYXBBZ2VudDo6Z2V0UmVtb3RlT2JqZWN0KGludCBoZWFwT2Jq
ZWN0SWQsIGNvbnN0IFN0cmluZyYgb2JqZWN0R3JvdXApCiB7CisgICAgUHJvdG9jb2w6OkVycm9y
U3RyaW5nIGVycm9yU3RyaW5nOworCiAgICAgLy8gUHJldmVudCB0aGUgY2VsbCBmcm9tIGdldHRp
bmcgY29sbGVjdGVkIGFzIHdlIGxvb2sgaXQgdXAuCiAgICAgVk0mIHZtID0gbV9lbnZpcm9ubWVu
dC52bSgpOwogICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKQEAgLTIzMSwyOSArMjM3LDI2IEBA
IHZvaWQgSW5zcGVjdG9ySGVhcEFnZW50OjpnZXRSZW1vdGVPYmplY3QoRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBpbnQgaGVhcE9iamVjCiAgICAgdW5zaWduZWQgaGVhcE9iamVjdElkZW50aWZp
ZXIgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaGVhcE9iamVjdElkKTsKICAgICBjb25zdCBPcHRp
b25hbDxIZWFwU25hcHNob3ROb2RlPiBvcHRpb25hbE5vZGUgPSBub2RlRm9ySGVhcE9iamVjdElk
ZW50aWZpZXIoZXJyb3JTdHJpbmcsIGhlYXBPYmplY3RJZGVudGlmaWVyKTsKICAgICBpZiAoIW9w
dGlvbmFsTm9kZSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0
ZWQoZXJyb3JTdHJpbmcpOwogCiAgICAgSlNDZWxsKiBjZWxsID0gb3B0aW9uYWxOb2RlLT5jZWxs
OwogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gY2VsbC0+c3RydWN0dXJlKHZtKTsKLSAgICBp
ZiAoIXN0cnVjdHVyZSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJVbmFibGUgdG8gZ2V0IG9i
amVjdCBkZXRhaWxzIC0gU3RydWN0dXJlIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAg
IGlmICghc3RydWN0dXJlKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIlVuYWJsZSB0
byBnZXQgb2JqZWN0IGRldGFpbHMgLSBTdHJ1Y3R1cmUiX3MpOwogCiAgICAgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCA9IHN0cnVjdHVyZS0+Z2xvYmFsT2JqZWN0KCk7Ci0gICAgaWYgKCFn
bG9iYWxPYmplY3QpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiVW5hYmxlIHRvIGdldCBvYmpl
Y3QgZGV0YWlscyAtIEdsb2JhbE9iamVjdCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAg
ICBpZiAoIWdsb2JhbE9iamVjdCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJVbmFi
bGUgdG8gZ2V0IG9iamVjdCBkZXRhaWxzIC0gR2xvYmFsT2JqZWN0Il9zKTsKIAogICAgIEluamVj
dGVkU2NyaXB0IGluamVjdGVkU2NyaXB0ID0gbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIuaW5qZWN0
ZWRTY3JpcHRGb3IoZ2xvYmFsT2JqZWN0KTsKLSAgICBpZiAoaW5qZWN0ZWRTY3JpcHQuaGFzTm9W
YWx1ZSgpKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIlVuYWJsZSB0byBnZXQgb2JqZWN0IGRl
dGFpbHMgLSBJbmplY3RlZFNjcmlwdCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBp
ZiAoaW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoIlVuYWJsZSB0byBnZXQgb2JqZWN0IGRldGFpbHMgLSBJbmplY3RlZFNjcmlwdCJfcyk7
CiAKLSAgICBTdHJpbmcgb2JqZWN0R3JvdXAgPSBvcHRpb25hbE9iamVjdEdyb3VwID8gKm9wdGlv
bmFsT2JqZWN0R3JvdXAgOiBTdHJpbmcoKTsKLSAgICByZXN1bHQgPSBpbmplY3RlZFNjcmlwdC53
cmFwT2JqZWN0KGNlbGwsIG9iamVjdEdyb3VwLCB0cnVlKTsKKyAgICBhdXRvIG9iamVjdCA9IGlu
amVjdGVkU2NyaXB0LndyYXBPYmplY3QoY2VsbCwgb2JqZWN0R3JvdXAsIHRydWUpOworICAgIGlm
ICghb2JqZWN0KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkludGVybmFsIGVycm9y
OiB1bmFibGUgdG8gY2FzdCBPYmplY3QiKTsKKworICAgIHJldHVybiBvYmplY3QucmVsZWFzZU5v
bk51bGwoKTsKIH0KIAogc3RhdGljIFByb3RvY29sOjpIZWFwOjpHYXJiYWdlQ29sbGVjdGlvbjo6
VHlwZSBwcm90b2NvbFR5cGVGb3JIZWFwT3BlcmF0aW9uKENvbGxlY3Rpb25TY29wZSBzY29wZSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3Bl
Y3RvckhlYXBBZ2VudC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9ySGVhcEFnZW50LmgKaW5kZXggZGVmNmFjZGU5NDYwZTcxMjgwMDQxZGFhNjVmY2Nk
Njg1ZTBmN2MwZi4uY2FhNTEyZDBhYjJlMTBhODhlMGVlNjBjMmUzMmQ3NDM5NDIyMjdhZCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9y
SGVhcEFnZW50LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9ySGVhcEFnZW50LmgKQEAgLTQwLDcgKzQwLDYgQEAgc3RydWN0IEhlYXBTbmFwc2hv
dE5vZGU7CiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAogY2xhc3MgSW5qZWN0ZWRTY3JpcHRNYW5h
Z2VyOwotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiAKIGNsYXNzIEpTX0VYUE9SVF9QUklW
QVRFIEluc3BlY3RvckhlYXBBZ2VudCA6IHB1YmxpYyBJbnNwZWN0b3JBZ2VudEJhc2UsIHB1Ymxp
YyBIZWFwQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyLCBwdWJsaWMgSlNDOjpIZWFwT2JzZXJ2ZXIg
ewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEluc3BlY3RvckhlYXBBZ2VudCk7CkBAIC01NCwx
NCArNTMsMTQgQEAgcHVibGljOgogICAgIHZvaWQgd2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tl
bmQoRGlzY29ubmVjdFJlYXNvbikgZmluYWw7CiAKICAgICAvLyBIZWFwQmFja2VuZERpc3BhdGNo
ZXJIYW5kbGVyCi0gICAgdm9pZCBlbmFibGUoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2
b2lkIGRpc2FibGUoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2b2lkIGdjKEVycm9yU3Ry
aW5nJikgZmluYWw7Ci0gICAgdm9pZCBzbmFwc2hvdChFcnJvclN0cmluZyYsIGRvdWJsZSogdGlt
ZXN0YW1wLCBTdHJpbmcqIHNuYXBzaG90RGF0YSkgZmluYWw7Ci0gICAgdm9pZCBzdGFydFRyYWNr
aW5nKEVycm9yU3RyaW5nJikgZmluYWw7Ci0gICAgdm9pZCBzdG9wVHJhY2tpbmcoRXJyb3JTdHJp
bmcmKSBmaW5hbDsKLSAgICB2b2lkIGdldFByZXZpZXcoRXJyb3JTdHJpbmcmLCBpbnQgaGVhcE9i
amVjdElkLCBPcHRpb25hbDxTdHJpbmc+JiByZXN1bHRTdHJpbmcsIFJlZlB0cjxQcm90b2NvbDo6
RGVidWdnZXI6OkZ1bmN0aW9uRGV0YWlscz4mLCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6Ok9i
amVjdFByZXZpZXc+JikgZmluYWw7Ci0gICAgdm9pZCBnZXRSZW1vdGVPYmplY3QoRXJyb3JTdHJp
bmcmLCBpbnQgaGVhcE9iamVjdElkLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsT2JqZWN0R3JvdXAs
IFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0KSBmaW5hbDsK
KyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBlbmFibGUoKSBvdmVycmlkZTsKKyAg
ICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBkaXNhYmxlKCkgb3ZlcnJpZGU7CisgICAg
UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZ2MoKSBmaW5hbDsKKyAgICBQcm90b2NvbDo6
RXJyb3JTdHJpbmdPcjxzdGQ6OnR1cGxlPGRvdWJsZSwgUHJvdG9jb2w6OkhlYXA6OkhlYXBTbmFw
c2hvdERhdGE+PiBzbmFwc2hvdCgpIGZpbmFsOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09y
PHZvaWQ+IHN0YXJ0VHJhY2tpbmcoKSBmaW5hbDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdP
cjx2b2lkPiBzdG9wVHJhY2tpbmcoKSBmaW5hbDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdP
cjxzdGQ6OnR1cGxlPFN0cmluZywgUmVmUHRyPFByb3RvY29sOjpEZWJ1Z2dlcjo6RnVuY3Rpb25E
ZXRhaWxzPiwgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpPYmplY3RQcmV2aWV3Pj4+IGdldFBy
ZXZpZXcoaW50IGhlYXBPYmplY3RJZCkgZmluYWw7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5n
T3I8UmVmPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+PiBnZXRSZW1vdGVPYmplY3Qo
aW50IGhlYXBPYmplY3RJZCwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCkgZmluYWw7CiAKICAg
ICAvLyBKU0M6OkhlYXBPYnNlcnZlcgogICAgIHZvaWQgd2lsbEdhcmJhZ2VDb2xsZWN0KCkgZmlu
YWw7CkBAIC03Myw3ICs3Miw3IEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0
Y2hHYXJiYWdlQ29sbGVjdGVkRXZlbnQoUHJvdG9jb2w6OkhlYXA6OkdhcmJhZ2VDb2xsZWN0aW9u
OjpUeXBlLCBTZWNvbmRzIHN0YXJ0VGltZSwgU2Vjb25kcyBlbmRUaW1lKTsKIAogcHJpdmF0ZToK
LSAgICBPcHRpb25hbDxKU0M6OkhlYXBTbmFwc2hvdE5vZGU+IG5vZGVGb3JIZWFwT2JqZWN0SWRl
bnRpZmllcihFcnJvclN0cmluZyYsIHVuc2lnbmVkIGhlYXBPYmplY3RJZGVudGlmaWVyKTsKKyAg
ICBPcHRpb25hbDxKU0M6OkhlYXBTbmFwc2hvdE5vZGU+IG5vZGVGb3JIZWFwT2JqZWN0SWRlbnRp
ZmllcihQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCB1bnNpZ25lZCBoZWFwT2JqZWN0SWRlbnRpZmll
cik7CiAKICAgICBJbmplY3RlZFNjcmlwdE1hbmFnZXImIG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2Vy
OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxIZWFwRnJvbnRlbmREaXNwYXRjaGVyPiBtX2Zyb250ZW5k
RGlzcGF0Y2hlcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
YWdlbnRzL0luc3BlY3RvclJ1bnRpbWVBZ2VudC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JSdW50aW1lQWdlbnQuY3BwCmluZGV4IDlhYjFhZjc0
ZDQzMzYzNzFmNjQ5MjliZjYwNjVhNDJjZTFiOTlmODQuLjA1MWM5ZjMzNjgyOGJkZTI5OTQwMmQz
Y2E2OTIxZTZlOTIyOTM4MGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3IvYWdlbnRzL0luc3BlY3RvclJ1bnRpbWVBZ2VudC5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUnVudGltZUFnZW50LmNwcApAQCAt
NDksMTggKzQ5LDYgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKIHVzaW5nIG5hbWVzcGFjZSBK
U0M7CiAKLXN0YXRpYyBib29sIGFzQm9vbChjb25zdCBib29sKiBiKQotewotICAgIHJldHVybiBi
ICYmICpiOwotfQotCi1zdGF0aWMgaW50IGFzSW50KGNvbnN0IGludCogaSkKLXsKLSAgICBpZiAo
aSkKLSAgICAgICAgcmV0dXJuICppOwotICAgIHJldHVybiAwOwotfQotCiBJbnNwZWN0b3JSdW50
aW1lQWdlbnQ6Okluc3BlY3RvclJ1bnRpbWVBZ2VudChBZ2VudENvbnRleHQmIGNvbnRleHQpCiAg
ICAgOiBJbnNwZWN0b3JBZ2VudEJhc2UoIlJ1bnRpbWUiX3MpCiAgICAgLCBtX2luamVjdGVkU2Ny
aXB0TWFuYWdlcihjb250ZXh0LmluamVjdGVkU2NyaXB0TWFuYWdlcikKQEAgLTgxLDI1ICs2OSw0
NiBAQCBzdGF0aWMgUmVmPFByb3RvY29sOjpSdW50aW1lOjpFcnJvclJhbmdlPiBidWlsZEVycm9y
UmFuZ2VPYmplY3QoY29uc3QgSlNUb2tlbkxvYwogICAgICAgICAucmVsZWFzZSgpOwogfQogCi12
b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6cGFyc2UoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJp
bmcmIGV4cHJlc3Npb24sIFByb3RvY29sOjpSdW50aW1lOjpTeW50YXhFcnJvclR5cGUqIHJlc3Vs
dCwgT3B0aW9uYWw8U3RyaW5nPiYgbWVzc2FnZSwgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpF
cnJvclJhbmdlPiYgcmFuZ2UpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0
b3JSdW50aW1lQWdlbnQ6OmVuYWJsZSgpCit7CisgICAgbV9lbmFibGVkID0gdHJ1ZTsKKworICAg
IHJldHVybiB7IH07Cit9CisKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3Rv
clJ1bnRpbWVBZ2VudDo6ZGlzYWJsZSgpCit7CisgICAgbV9lbmFibGVkID0gZmFsc2U7CisKKyAg
ICByZXR1cm4geyB9OworfQorCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxzdGQ6OnR1cGxlPFBy
b3RvY29sOjpSdW50aW1lOjpTeW50YXhFcnJvclR5cGUsIFN0cmluZyAvKiBtZXNzYWdlICovLCBS
ZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OkVycm9yUmFuZ2U+Pj4gSW5zcGVjdG9yUnVudGltZUFn
ZW50OjpwYXJzZShjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24pCiB7CiAgICAgSlNMb2NrSG9sZGVy
IGxvY2sobV92bSk7CiAKICAgICBQYXJzZXJFcnJvciBlcnJvcjsKICAgICBjaGVja1N5bnRheCht
X3ZtLCBKU0M6Om1ha2VTb3VyY2UoZXhwcmVzc2lvbiwgeyB9KSwgZXJyb3IpOwogCisgICAgT3B0
aW9uYWw8UHJvdG9jb2w6OlJ1bnRpbWU6OlN5bnRheEVycm9yVHlwZT4gcmVzdWx0OworICAgIFN0
cmluZyBtZXNzYWdlOworICAgIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6RXJyb3JSYW5nZT4g
cmFuZ2U7CisKICAgICBzd2l0Y2ggKGVycm9yLnN5bnRheEVycm9yVHlwZSgpKSB7CiAgICAgY2Fz
ZSBQYXJzZXJFcnJvcjo6U3ludGF4RXJyb3JOb25lOgotICAgICAgICAqcmVzdWx0ID0gUHJvdG9j
b2w6OlJ1bnRpbWU6OlN5bnRheEVycm9yVHlwZTo6Tm9uZTsKKyAgICAgICAgcmVzdWx0ID0gUHJv
dG9jb2w6OlJ1bnRpbWU6OlN5bnRheEVycm9yVHlwZTo6Tm9uZTsKICAgICAgICAgYnJlYWs7CisK
ICAgICBjYXNlIFBhcnNlckVycm9yOjpTeW50YXhFcnJvcklycmVjb3ZlcmFibGU6Ci0gICAgICAg
ICpyZXN1bHQgPSBQcm90b2NvbDo6UnVudGltZTo6U3ludGF4RXJyb3JUeXBlOjpJcnJlY292ZXJh
YmxlOworICAgICAgICByZXN1bHQgPSBQcm90b2NvbDo6UnVudGltZTo6U3ludGF4RXJyb3JUeXBl
OjpJcnJlY292ZXJhYmxlOwogICAgICAgICBicmVhazsKKwogICAgIGNhc2UgUGFyc2VyRXJyb3I6
OlN5bnRheEVycm9yVW50ZXJtaW5hdGVkTGl0ZXJhbDoKLSAgICAgICAgKnJlc3VsdCA9IFByb3Rv
Y29sOjpSdW50aW1lOjpTeW50YXhFcnJvclR5cGU6OlVudGVybWluYXRlZExpdGVyYWw7CisgICAg
ICAgIHJlc3VsdCA9IFByb3RvY29sOjpSdW50aW1lOjpTeW50YXhFcnJvclR5cGU6OlVudGVybWlu
YXRlZExpdGVyYWw7CiAgICAgICAgIGJyZWFrOworCiAgICAgY2FzZSBQYXJzZXJFcnJvcjo6U3lu
dGF4RXJyb3JSZWNvdmVyYWJsZToKLSAgICAgICAgKnJlc3VsdCA9IFByb3RvY29sOjpSdW50aW1l
OjpTeW50YXhFcnJvclR5cGU6OlJlY292ZXJhYmxlOworICAgICAgICByZXN1bHQgPSBQcm90b2Nv
bDo6UnVudGltZTo6U3ludGF4RXJyb3JUeXBlOjpSZWNvdmVyYWJsZTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQogCkBAIC0xMDcsMjkgKzExNiw0MiBAQCB2b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2Vu
dDo6cGFyc2UoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIFByb3RvYwog
ICAgICAgICBtZXNzYWdlID0gZXJyb3IubWVzc2FnZSgpOwogICAgICAgICByYW5nZSA9IGJ1aWxk
RXJyb3JSYW5nZU9iamVjdChlcnJvci50b2tlbigpLm1fbG9jYXRpb24pOwogICAgIH0KKworICAg
IHJldHVybiB7IHsgKnJlc3VsdCwgbWVzc2FnZSwgV1RGTW92ZShyYW5nZSkgfSB9OwogfQogCi12
b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6ZXZhbHVhdGUoRXJyb3JTdHJpbmcmIGVycm9yU3Ry
aW5nLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIGNvbnN0IFN0cmluZyogb2JqZWN0R3JvdXAs
IGNvbnN0IGJvb2wqIGluY2x1ZGVDb21tYW5kTGluZUFQSSwgY29uc3QgYm9vbCogZG9Ob3RQYXVz
ZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xlLCBjb25zdCBpbnQqIGV4ZWN1dGlvbkNvbnRleHRJ
ZCwgY29uc3QgYm9vbCogcmV0dXJuQnlWYWx1ZSwgY29uc3QgYm9vbCogZ2VuZXJhdGVQcmV2aWV3
LCBjb25zdCBib29sKiBzYXZlUmVzdWx0LCBjb25zdCBib29sKiAvKiBlbXVsYXRlVXNlckdlc3R1
cmUgKi8sIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0LCBP
cHRpb25hbDxib29sPiYgd2FzVGhyb3duLCBPcHRpb25hbDxpbnQ+JiBzYXZlZFJlc3VsdEluZGV4
KQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8c3RkOjp0dXBsZTxSZWY8UHJvdG9jb2w6OlJ1bnRp
bWU6OlJlbW90ZU9iamVjdD4sIE9wdGlvbmFsPGJvb2w+IC8qIHdhc1Rocm93biAqLywgT3B0aW9u
YWw8aW50PiAvKiBzYXZlZFJlc3VsdEluZGV4ICovPj4gSW5zcGVjdG9yUnVudGltZUFnZW50Ojpl
dmFsdWF0ZShjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIGNvbnN0IFN0cmluZyYgb2JqZWN0R3Jv
dXAsIE9wdGlvbmFsPGJvb2w+JiYgaW5jbHVkZUNvbW1hbmRMaW5lQVBJLCBPcHRpb25hbDxib29s
PiYmIGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29sZSwgT3B0aW9uYWw8UHJvdG9j
b2w6OlJ1bnRpbWU6OkV4ZWN1dGlvbkNvbnRleHRJZD4mJiBleGVjdXRpb25Db250ZXh0SWQsIE9w
dGlvbmFsPGJvb2w+JiYgcmV0dXJuQnlWYWx1ZSwgT3B0aW9uYWw8Ym9vbD4mJiBnZW5lcmF0ZVBy
ZXZpZXcsIE9wdGlvbmFsPGJvb2w+JiYgc2F2ZVJlc3VsdCwgT3B0aW9uYWw8Ym9vbD4mJiAvKiBl
bXVsYXRlVXNlckdlc3R1cmUgKi8pCiB7Ci0gICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3Jp
cHQgPSBpbmplY3RlZFNjcmlwdEZvckV2YWwoZXJyb3JTdHJpbmcsIGV4ZWN1dGlvbkNvbnRleHRJ
ZCk7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCisgICAgSW5qZWN0
ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHQgPSBpbmplY3RlZFNjcmlwdEZvckV2YWwoZXJyb3JTdHJp
bmcsIFdURk1vdmUoZXhlY3V0aW9uQ29udGV4dElkKSk7CiAgICAgaWYgKGluamVjdGVkU2NyaXB0
Lmhhc05vVmFsdWUoKSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoZXJyb3JTdHJpbmcpOworCisgICAgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1v
dGVPYmplY3Q+IHJlc3VsdDsKKyAgICBPcHRpb25hbDxib29sPiB3YXNUaHJvd247CisgICAgT3B0
aW9uYWw8aW50PiBzYXZlZFJlc3VsdEluZGV4OwogCiAgICAgSlNDOjpEZWJ1Z2dlcjo6VGVtcG9y
YXJpbHlEaXNhYmxlRXhjZXB0aW9uQnJlYWtwb2ludHMgdGVtcG9yYXJpbHlEaXNhYmxlRXhjZXB0
aW9uQnJlYWtwb2ludHMobV9kZWJ1Z2dlcik7CiAKLSAgICBib29sIHBhdXNlQW5kTXV0ZSA9IGFz
Qm9vbChkb05vdFBhdXNlT25FeGNlcHRpb25zQW5kTXV0ZUNvbnNvbGUpOworICAgIGJvb2wgcGF1
c2VBbmRNdXRlID0gZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xlLnZhbHVlT3Io
ZmFsc2UpOwogICAgIGlmIChwYXVzZUFuZE11dGUpIHsKICAgICAgICAgdGVtcG9yYXJpbHlEaXNh
YmxlRXhjZXB0aW9uQnJlYWtwb2ludHMucmVwbGFjZSgpOwogICAgICAgICBtdXRlQ29uc29sZSgp
OwogICAgIH0KIAotICAgIGluamVjdGVkU2NyaXB0LmV2YWx1YXRlKGVycm9yU3RyaW5nLCBleHBy
ZXNzaW9uLCBvYmplY3RHcm91cCA/ICpvYmplY3RHcm91cCA6IFN0cmluZygpLCBhc0Jvb2woaW5j
bHVkZUNvbW1hbmRMaW5lQVBJKSwgYXNCb29sKHJldHVybkJ5VmFsdWUpLCBhc0Jvb2woZ2VuZXJh
dGVQcmV2aWV3KSwgYXNCb29sKHNhdmVSZXN1bHQpLCByZXN1bHQsIHdhc1Rocm93biwgc2F2ZWRS
ZXN1bHRJbmRleCk7CisgICAgaW5qZWN0ZWRTY3JpcHQuZXZhbHVhdGUoZXJyb3JTdHJpbmcsIGV4
cHJlc3Npb24sIG9iamVjdEdyb3VwLCBpbmNsdWRlQ29tbWFuZExpbmVBUEkudmFsdWVPcihmYWxz
ZSksIHJldHVybkJ5VmFsdWUudmFsdWVPcihmYWxzZSksIGdlbmVyYXRlUHJldmlldy52YWx1ZU9y
KGZhbHNlKSwgc2F2ZVJlc3VsdC52YWx1ZU9yKGZhbHNlKSwgcmVzdWx0LCB3YXNUaHJvd24sIHNh
dmVkUmVzdWx0SW5kZXgpOwogCiAgICAgaWYgKHBhdXNlQW5kTXV0ZSkKICAgICAgICAgdW5tdXRl
Q29uc29sZSgpOworCisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBl
Y3RlZChlcnJvclN0cmluZyk7CisKKyAgICByZXR1cm4geyB7cmVzdWx0LnJlbGVhc2VOb25OdWxs
KCksIFdURk1vdmUod2FzVGhyb3duKSwgV1RGTW92ZShzYXZlZFJlc3VsdEluZGV4KSB9IH07CiB9
CiAKLXZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50Ojphd2FpdFByb21pc2UoY29uc3QgU3RyaW5n
JiBwcm9taXNlT2JqZWN0SWQsIGNvbnN0IGJvb2wqIHJldHVybkJ5VmFsdWUsIGNvbnN0IGJvb2wq
IGdlbmVyYXRlUHJldmlldywgY29uc3QgYm9vbCogc2F2ZVJlc3VsdCwgUmVmPEF3YWl0UHJvbWlz
ZUNhbGxiYWNrPiYmIGNhbGxiYWNrKQordm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmF3YWl0
UHJvbWlzZShjb25zdCBQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0SWQmIHByb21pc2VP
YmplY3RJZCwgT3B0aW9uYWw8Ym9vbD4mJiByZXR1cm5CeVZhbHVlLCBPcHRpb25hbDxib29sPiYm
IGdlbmVyYXRlUHJldmlldywgT3B0aW9uYWw8Ym9vbD4mJiBzYXZlUmVzdWx0LCBSZWY8QXdhaXRQ
cm9taXNlQ2FsbGJhY2s+JiYgY2FsbGJhY2spCiB7CiAgICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0
ZWRTY3JpcHQgPSBtX2luamVjdGVkU2NyaXB0TWFuYWdlci5pbmplY3RlZFNjcmlwdEZvck9iamVj
dElkKHByb21pc2VPYmplY3RJZCk7CiAgICAgaWYgKGluamVjdGVkU2NyaXB0Lmhhc05vVmFsdWUo
KSkgewpAQCAtMTM3LDIxOSArMTU5LDI0NCBAQCB2b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6
YXdhaXRQcm9taXNlKGNvbnN0IFN0cmluZyYgcHJvbWlzZU9iamVjdElkLCBjb25zdCBibwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaW5qZWN0ZWRTY3JpcHQuYXdhaXRQcm9taXNlKHBy
b21pc2VPYmplY3RJZCwgYXNCb29sKHJldHVybkJ5VmFsdWUpLCBhc0Jvb2woZ2VuZXJhdGVQcmV2
aWV3KSwgYXNCb29sKHNhdmVSZXN1bHQpLCBbY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0g
KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1v
dGVPYmplY3Q+JiYgcmVzdWx0LCBPcHRpb25hbDxib29sPiYgd2FzVGhyb3duLCBPcHRpb25hbDxp
bnQ+JiBzYXZlZFJlc3VsdEluZGV4KSB7Ci0gICAgICAgIGlmICghZXJyb3JTdHJpbmcuaXNFbXB0
eSgpKQorICAgIGluamVjdGVkU2NyaXB0LmF3YWl0UHJvbWlzZShwcm9taXNlT2JqZWN0SWQsIHJl
dHVybkJ5VmFsdWUudmFsdWVPcihmYWxzZSksIGdlbmVyYXRlUHJldmlldy52YWx1ZU9yKGZhbHNl
KSwgc2F2ZVJlc3VsdC52YWx1ZU9yKGZhbHNlKSwgW2NhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFj
ayldIChQcm90b2NvbDo6RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBSZWZQdHI8UHJvdG9jb2w6
OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mJiByZXN1bHQsIE9wdGlvbmFsPGJvb2w+JiYgd2FzVGhy
b3duLCBPcHRpb25hbDxpbnQ+JiYgc2F2ZWRSZXN1bHRJbmRleCkgeworICAgICAgICBpZiAoIXJl
c3VsdCkKICAgICAgICAgICAgIGNhbGxiYWNrLT5zZW5kRmFpbHVyZShlcnJvclN0cmluZyk7CiAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNhbGxiYWNrLT5zZW5kU3VjY2VzcyhXVEZNb3ZlKHJl
c3VsdCksIHdhc1Rocm93biwgc2F2ZWRSZXN1bHRJbmRleCk7CisgICAgICAgICAgICBjYWxsYmFj
ay0+c2VuZFN1Y2Nlc3MocmVzdWx0LnJlbGVhc2VOb25OdWxsKCksIFdURk1vdmUod2FzVGhyb3du
KSwgV1RGTW92ZShzYXZlZFJlc3VsdEluZGV4KSk7CiAgICAgfSk7CiB9CiAKLXZvaWQgSW5zcGVj
dG9yUnVudGltZUFnZW50OjpjYWxsRnVuY3Rpb25PbihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcs
IGNvbnN0IFN0cmluZyYgb2JqZWN0SWQsIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgY29uc3Qg
SlNPTjo6QXJyYXkqIG9wdGlvbmFsQXJndW1lbnRzLCBjb25zdCBib29sKiBkb05vdFBhdXNlT25F
eGNlcHRpb25zQW5kTXV0ZUNvbnNvbGUsIGNvbnN0IGJvb2wqIHJldHVybkJ5VmFsdWUsIGNvbnN0
IGJvb2wqIGdlbmVyYXRlUHJldmlldywgY29uc3QgYm9vbCogLyogZW11bGF0ZVVzZXJHZXN0dXJl
ICovLCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3VsdCwgT3B0
aW9uYWw8Ym9vbD4mIHdhc1Rocm93bikKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHN0ZDo6dHVw
bGU8UmVmPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+LCBPcHRpb25hbDxib29sPiAv
KiB3YXNUaHJvd24gKi8+PiBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmNhbGxGdW5jdGlvbk9uKGNv
bnN0IFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3RJZCYgb2JqZWN0SWQsIGNvbnN0IFN0
cmluZyYgZnVuY3Rpb25EZWNsYXJhdGlvbiwgUmVmUHRyPEpTT046OkFycmF5PiYmIGFyZ3VtZW50
cywgT3B0aW9uYWw8Ym9vbD4mJiBkb05vdFBhdXNlT25FeGNlcHRpb25zQW5kTXV0ZUNvbnNvbGUs
IE9wdGlvbmFsPGJvb2w+JiYgcmV0dXJuQnlWYWx1ZSwgT3B0aW9uYWw8Ym9vbD4mJiBnZW5lcmF0
ZVByZXZpZXcsIE9wdGlvbmFsPGJvb2w+JiYgLyogZW11bGF0ZVVzZXJHZXN0dXJlICovKQogewot
ICAgIEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0ID0gbV9pbmplY3RlZFNjcmlwdE1hbmFn
ZXIuaW5qZWN0ZWRTY3JpcHRGb3JPYmplY3RJZChvYmplY3RJZCk7Ci0gICAgaWYgKGluamVjdGVk
U2NyaXB0Lmhhc05vVmFsdWUoKSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIGlu
amVjdGVkIHNjcmlwdCBmb3IgZ2l2ZW4gb2JqZWN0SWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOwogCi0gICAgU3RyaW5n
IGFyZ3VtZW50czsKLSAgICBpZiAob3B0aW9uYWxBcmd1bWVudHMpCi0gICAgICAgIGFyZ3VtZW50
cyA9IG9wdGlvbmFsQXJndW1lbnRzLT50b0pTT05TdHJpbmcoKTsKKyAgICBJbmplY3RlZFNjcmlw
dCBpbmplY3RlZFNjcmlwdCA9IG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmluamVjdGVkU2NyaXB0
Rm9yT2JqZWN0SWQob2JqZWN0SWQpOworICAgIGlmIChpbmplY3RlZFNjcmlwdC5oYXNOb1ZhbHVl
KCkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTWlzc2luZyBpbmplY3RlZCBzY3Jp
cHQgZm9yIGdpdmVuIG9iamVjdElkIl9zKTsKKworICAgIFJlZlB0cjxQcm90b2NvbDo6UnVudGlt
ZTo6UmVtb3RlT2JqZWN0PiByZXN1bHQ7CisgICAgT3B0aW9uYWw8Ym9vbD4gd2FzVGhyb3duOwog
CiAgICAgSlNDOjpEZWJ1Z2dlcjo6VGVtcG9yYXJpbHlEaXNhYmxlRXhjZXB0aW9uQnJlYWtwb2lu
dHMgdGVtcG9yYXJpbHlEaXNhYmxlRXhjZXB0aW9uQnJlYWtwb2ludHMobV9kZWJ1Z2dlcik7CiAK
LSAgICBib29sIHBhdXNlQW5kTXV0ZSA9IGFzQm9vbChkb05vdFBhdXNlT25FeGNlcHRpb25zQW5k
TXV0ZUNvbnNvbGUpOworICAgIGJvb2wgcGF1c2VBbmRNdXRlID0gZG9Ob3RQYXVzZU9uRXhjZXB0
aW9uc0FuZE11dGVDb25zb2xlLnZhbHVlT3IoZmFsc2UpOwogICAgIGlmIChwYXVzZUFuZE11dGUp
IHsKICAgICAgICAgdGVtcG9yYXJpbHlEaXNhYmxlRXhjZXB0aW9uQnJlYWtwb2ludHMucmVwbGFj
ZSgpOwogICAgICAgICBtdXRlQ29uc29sZSgpOwogICAgIH0KIAotICAgIGluamVjdGVkU2NyaXB0
LmNhbGxGdW5jdGlvbk9uKGVycm9yU3RyaW5nLCBvYmplY3RJZCwgZXhwcmVzc2lvbiwgYXJndW1l
bnRzLCBhc0Jvb2wocmV0dXJuQnlWYWx1ZSksIGFzQm9vbChnZW5lcmF0ZVByZXZpZXcpLCByZXN1
bHQsIHdhc1Rocm93bik7CisgICAgaW5qZWN0ZWRTY3JpcHQuY2FsbEZ1bmN0aW9uT24oZXJyb3JT
dHJpbmcsIG9iamVjdElkLCBmdW5jdGlvbkRlY2xhcmF0aW9uLCBhcmd1bWVudHMgPyBhcmd1bWVu
dHMtPnRvSlNPTlN0cmluZygpIDogbnVsbFN0cmluZygpLCByZXR1cm5CeVZhbHVlLnZhbHVlT3Io
ZmFsc2UpLCBnZW5lcmF0ZVByZXZpZXcudmFsdWVPcihmYWxzZSksIHJlc3VsdCwgd2FzVGhyb3du
KTsKIAogICAgIGlmIChwYXVzZUFuZE11dGUpCiAgICAgICAgIHVubXV0ZUNvbnNvbGUoKTsKKwor
ICAgIGlmICghcmVzdWx0KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJp
bmcpOworCisgICAgcmV0dXJuIHsgeyByZXN1bHQucmVsZWFzZU5vbk51bGwoKSwgV1RGTW92ZSh3
YXNUaHJvd24pIH0gfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmdldFByZXZp
ZXcoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBSZWZQ
dHI8UHJvdG9jb2w6OlJ1bnRpbWU6Ok9iamVjdFByZXZpZXc+JiBwcmV2aWV3KQorUHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8UmVmPFByb3RvY29sOjpSdW50aW1lOjpPYmplY3RQcmV2aWV3Pj4gSW5z
cGVjdG9yUnVudGltZUFnZW50OjpnZXRQcmV2aWV3KGNvbnN0IFByb3RvY29sOjpSdW50aW1lOjpS
ZW1vdGVPYmplY3RJZCYgb2JqZWN0SWQpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVy
cm9yU3RyaW5nOworCiAgICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHQgPSBtX2luamVj
dGVkU2NyaXB0TWFuYWdlci5pbmplY3RlZFNjcmlwdEZvck9iamVjdElkKG9iamVjdElkKTsKLSAg
ICBpZiAoaW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKSB7Ci0gICAgICAgIGVycm9yU3RyaW5n
ID0gIk1pc3NpbmcgaW5qZWN0ZWQgc2NyaXB0IGZvciBnaXZlbiBvYmplY3RJZCJfczsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoaW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKQor
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk1pc3NpbmcgaW5qZWN0ZWQgc2NyaXB0IGZv
ciBnaXZlbiBvYmplY3RJZCJfcyk7CiAKICAgICBKU0M6OkRlYnVnZ2VyOjpUZW1wb3JhcmlseURp
c2FibGVFeGNlcHRpb25CcmVha3BvaW50cyB0ZW1wb3JhcmlseURpc2FibGVFeGNlcHRpb25CcmVh
a3BvaW50cyhtX2RlYnVnZ2VyKTsKICAgICB0ZW1wb3JhcmlseURpc2FibGVFeGNlcHRpb25CcmVh
a3BvaW50cy5yZXBsYWNlKCk7CiAKKyAgICBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6Ok9iamVj
dFByZXZpZXc+IHByZXZpZXc7CisKICAgICBtdXRlQ29uc29sZSgpOwogCiAgICAgaW5qZWN0ZWRT
Y3JpcHQuZ2V0UHJldmlldyhlcnJvclN0cmluZywgb2JqZWN0SWQsIHByZXZpZXcpOwogCiAgICAg
dW5tdXRlQ29uc29sZSgpOworCisgICAgaWYgKCFwcmV2aWV3KQorICAgICAgICByZXR1cm4gbWFr
ZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOworCisgICAgcmV0dXJuIHByZXZpZXcucmVsZWFzZU5v
bk51bGwoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmdldFByb3BlcnRpZXMo
RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBjb25zdCBi
b29sKiBvd25Qcm9wZXJ0aWVzLCBjb25zdCBpbnQqIGZldGNoU3RhcnQsIGNvbnN0IGludCogZmV0
Y2hDb3VudCwgY29uc3QgYm9vbCogZ2VuZXJhdGVQcmV2aWV3LCBSZWZQdHI8SlNPTjo6QXJyYXlP
ZjxQcm90b2NvbDo6UnVudGltZTo6UHJvcGVydHlEZXNjcmlwdG9yPj4mIHByb3BlcnRpZXMsIFJl
ZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpJbnRlcm5hbFByb3BlcnR5RGVz
Y3JpcHRvcj4+JiBpbnRlcm5hbFByb3BlcnRpZXMpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxz
dGQ6OnR1cGxlPFJlZjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpQcm9wZXJ0eURl
c2NyaXB0b3I+PiwgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OkludGVy
bmFsUHJvcGVydHlEZXNjcmlwdG9yPj4+PiBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmdldFByb3Bl
cnRpZXMoY29uc3QgUHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdElkJiBvYmplY3RJZCwg
T3B0aW9uYWw8Ym9vbD4mJiBvd25Qcm9wZXJ0aWVzLCBPcHRpb25hbDxpbnQ+JiYgZmV0Y2hTdGFy
dCwgT3B0aW9uYWw8aW50PiYmIGZldGNoQ291bnQsIE9wdGlvbmFsPGJvb2w+JiYgZ2VuZXJhdGVQ
cmV2aWV3KQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAg
IEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0ID0gbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIu
aW5qZWN0ZWRTY3JpcHRGb3JPYmplY3RJZChvYmplY3RJZCk7Ci0gICAgaWYgKGluamVjdGVkU2Ny
aXB0Lmhhc05vVmFsdWUoKSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIGluamVj
dGVkIHNjcmlwdCBmb3IgZ2l2ZW4gb2JqZWN0SWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
CisgICAgaWYgKGluamVjdGVkU2NyaXB0Lmhhc05vVmFsdWUoKSkKKyAgICAgICAgcmV0dXJuIG1h
a2VVbmV4cGVjdGVkKCJNaXNzaW5nIGluamVjdGVkIHNjcmlwdCBmb3IgZ2l2ZW4gb2JqZWN0SWQi
X3MpOwogCi0gICAgaW50IHN0YXJ0ID0gYXNJbnQoZmV0Y2hTdGFydCk7Ci0gICAgaWYgKHN0YXJ0
IDwgMCkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJmZXRjaFN0YXJ0IGNhbm5vdCBiZSBuZWdh
dGl2ZSJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpbnQgc3RhcnQgPSBmZXRjaFN0
YXJ0LnZhbHVlT3IoMCk7CisgICAgaWYgKHN0YXJ0IDwgMCkKKyAgICAgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKCJmZXRjaFN0YXJ0IGNhbm5vdCBiZSBuZWdhdGl2ZSJfcyk7CiAKLSAgICBpbnQg
Y291bnQgPSBhc0ludChmZXRjaENvdW50KTsKLSAgICBpZiAoY291bnQgPCAwKSB7Ci0gICAgICAg
IGVycm9yU3RyaW5nID0gImZldGNoQ291bnQgY2Fubm90IGJlIG5lZ2F0aXZlIl9zOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQorICAgIGludCBjb3VudCA9IGZldGNoQ291bnQudmFsdWVPcigwKTsK
KyAgICBpZiAoY291bnQgPCAwKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoImZldGNo
Q291bnQgY2Fubm90IGJlIG5lZ2F0aXZlIl9zKTsKKworICAgIFJlZlB0cjxKU09OOjpBcnJheU9m
PFByb3RvY29sOjpSdW50aW1lOjpQcm9wZXJ0eURlc2NyaXB0b3I+PiBwcm9wZXJ0aWVzOworICAg
IFJlZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpJbnRlcm5hbFByb3BlcnR5
RGVzY3JpcHRvcj4+IGludGVybmFsUHJvcGVydGllczsKIAogICAgIEpTQzo6RGVidWdnZXI6OlRl
bXBvcmFyaWx5RGlzYWJsZUV4Y2VwdGlvbkJyZWFrcG9pbnRzIHRlbXBvcmFyaWx5RGlzYWJsZUV4
Y2VwdGlvbkJyZWFrcG9pbnRzKG1fZGVidWdnZXIpOwogICAgIHRlbXBvcmFyaWx5RGlzYWJsZUV4
Y2VwdGlvbkJyZWFrcG9pbnRzLnJlcGxhY2UoKTsKIAogICAgIG11dGVDb25zb2xlKCk7CiAKLSAg
ICBpbmplY3RlZFNjcmlwdC5nZXRQcm9wZXJ0aWVzKGVycm9yU3RyaW5nLCBvYmplY3RJZCwgYXNC
b29sKG93blByb3BlcnRpZXMpLCBzdGFydCwgY291bnQsIGFzQm9vbChnZW5lcmF0ZVByZXZpZXcp
LCBwcm9wZXJ0aWVzKTsKKyAgICBpbmplY3RlZFNjcmlwdC5nZXRQcm9wZXJ0aWVzKGVycm9yU3Ry
aW5nLCBvYmplY3RJZCwgb3duUHJvcGVydGllcy52YWx1ZU9yKGZhbHNlKSwgc3RhcnQsIGNvdW50
LCBnZW5lcmF0ZVByZXZpZXcudmFsdWVPcihmYWxzZSksIHByb3BlcnRpZXMpOwogCiAgICAgLy8g
T25seSBpbmNsdWRlIGludGVybmFsIHByb3BlcnRpZXMgZm9yIHRoZSBmaXJzdCBmZXRjaC4KICAg
ICBpZiAoIXN0YXJ0KQotICAgICAgICBpbmplY3RlZFNjcmlwdC5nZXRJbnRlcm5hbFByb3BlcnRp
ZXMoZXJyb3JTdHJpbmcsIG9iamVjdElkLCBhc0Jvb2woZ2VuZXJhdGVQcmV2aWV3KSwgaW50ZXJu
YWxQcm9wZXJ0aWVzKTsKKyAgICAgICAgaW5qZWN0ZWRTY3JpcHQuZ2V0SW50ZXJuYWxQcm9wZXJ0
aWVzKGVycm9yU3RyaW5nLCBvYmplY3RJZCwgZ2VuZXJhdGVQcmV2aWV3LnZhbHVlT3IoZmFsc2Up
LCBpbnRlcm5hbFByb3BlcnRpZXMpOwogCiAgICAgdW5tdXRlQ29uc29sZSgpOworCisgICAgaWYg
KCFwcm9wZXJ0aWVzKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcp
OworCisgICAgcmV0dXJuIHsgeyBwcm9wZXJ0aWVzLnJlbGVhc2VOb25OdWxsKCksIFdURk1vdmUo
aW50ZXJuYWxQcm9wZXJ0aWVzKSB9IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50
OjpnZXREaXNwbGF5YWJsZVByb3BlcnRpZXMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25z
dCBTdHJpbmcmIG9iamVjdElkLCBjb25zdCBpbnQqIGZldGNoU3RhcnQsIGNvbnN0IGludCogZmV0
Y2hDb3VudCwgY29uc3QgYm9vbCogZ2VuZXJhdGVQcmV2aWV3LCBSZWZQdHI8SlNPTjo6QXJyYXlP
ZjxQcm90b2NvbDo6UnVudGltZTo6UHJvcGVydHlEZXNjcmlwdG9yPj4mIHByb3BlcnRpZXMsIFJl
ZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpJbnRlcm5hbFByb3BlcnR5RGVz
Y3JpcHRvcj4+JiBpbnRlcm5hbFByb3BlcnRpZXMpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxz
dGQ6OnR1cGxlPFJlZjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpQcm9wZXJ0eURl
c2NyaXB0b3I+PiwgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OkludGVy
bmFsUHJvcGVydHlEZXNjcmlwdG9yPj4+PiBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmdldERpc3Bs
YXlhYmxlUHJvcGVydGllcyhjb25zdCBQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0SWQm
IG9iamVjdElkLCBPcHRpb25hbDxpbnQ+JiYgZmV0Y2hTdGFydCwgT3B0aW9uYWw8aW50PiYmIGZl
dGNoQ291bnQsIE9wdGlvbmFsPGJvb2w+JiYgZ2VuZXJhdGVQcmV2aWV3KQogeworICAgIFByb3Rv
Y29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIEluamVjdGVkU2NyaXB0IGluamVj
dGVkU2NyaXB0ID0gbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIuaW5qZWN0ZWRTY3JpcHRGb3JPYmpl
Y3RJZChvYmplY3RJZCk7Ci0gICAgaWYgKGluamVjdGVkU2NyaXB0Lmhhc05vVmFsdWUoKSkgewot
ICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIGluamVjdGVkIHNjcmlwdCBmb3IgZ2l2ZW4g
b2JqZWN0SWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKGluamVjdGVkU2Ny
aXB0Lmhhc05vVmFsdWUoKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJNaXNzaW5n
IGluamVjdGVkIHNjcmlwdCBmb3IgZ2l2ZW4gb2JqZWN0SWQiX3MpOwogCi0gICAgaW50IHN0YXJ0
ID0gYXNJbnQoZmV0Y2hTdGFydCk7Ci0gICAgaWYgKHN0YXJ0IDwgMCkgewotICAgICAgICBlcnJv
clN0cmluZyA9ICJmZXRjaFN0YXJ0IGNhbm5vdCBiZSBuZWdhdGl2ZSJfczsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KKyAgICBpbnQgc3RhcnQgPSBmZXRjaFN0YXJ0LnZhbHVlT3IoMCk7CisgICAg
aWYgKHN0YXJ0IDwgMCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJmZXRjaFN0YXJ0
IGNhbm5vdCBiZSBuZWdhdGl2ZSJfcyk7CiAKLSAgICBpbnQgY291bnQgPSBhc0ludChmZXRjaENv
dW50KTsKLSAgICBpZiAoY291bnQgPCAwKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gImZldGNo
Q291bnQgY2Fubm90IGJlIG5lZ2F0aXZlIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAg
IGludCBjb3VudCA9IGZldGNoQ291bnQudmFsdWVPcigwKTsKKyAgICBpZiAoY291bnQgPCAwKQor
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoImZldGNoQ291bnQgY2Fubm90IGJlIG5lZ2F0
aXZlIl9zKTsKKworICAgIFJlZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpQ
cm9wZXJ0eURlc2NyaXB0b3I+PiBwcm9wZXJ0aWVzOworICAgIFJlZlB0cjxKU09OOjpBcnJheU9m
PFByb3RvY29sOjpSdW50aW1lOjpJbnRlcm5hbFByb3BlcnR5RGVzY3JpcHRvcj4+IGludGVybmFs
UHJvcGVydGllczsKIAogICAgIEpTQzo6RGVidWdnZXI6OlRlbXBvcmFyaWx5RGlzYWJsZUV4Y2Vw
dGlvbkJyZWFrcG9pbnRzIHRlbXBvcmFyaWx5RGlzYWJsZUV4Y2VwdGlvbkJyZWFrcG9pbnRzKG1f
ZGVidWdnZXIpOwogICAgIHRlbXBvcmFyaWx5RGlzYWJsZUV4Y2VwdGlvbkJyZWFrcG9pbnRzLnJl
cGxhY2UoKTsKIAogICAgIG11dGVDb25zb2xlKCk7CiAKLSAgICBpbmplY3RlZFNjcmlwdC5nZXRE
aXNwbGF5YWJsZVByb3BlcnRpZXMoZXJyb3JTdHJpbmcsIG9iamVjdElkLCBzdGFydCwgY291bnQs
IGFzQm9vbChnZW5lcmF0ZVByZXZpZXcpLCBwcm9wZXJ0aWVzKTsKKyAgICBpbmplY3RlZFNjcmlw
dC5nZXREaXNwbGF5YWJsZVByb3BlcnRpZXMoZXJyb3JTdHJpbmcsIG9iamVjdElkLCBzdGFydCwg
Y291bnQsIGdlbmVyYXRlUHJldmlldy52YWx1ZU9yKGZhbHNlKSwgcHJvcGVydGllcyk7CiAKICAg
ICAvLyBPbmx5IGluY2x1ZGUgaW50ZXJuYWwgcHJvcGVydGllcyBmb3IgdGhlIGZpcnN0IGZldGNo
LgogICAgIGlmICghc3RhcnQpCi0gICAgICAgIGluamVjdGVkU2NyaXB0LmdldEludGVybmFsUHJv
cGVydGllcyhlcnJvclN0cmluZywgb2JqZWN0SWQsIGFzQm9vbChnZW5lcmF0ZVByZXZpZXcpLCBp
bnRlcm5hbFByb3BlcnRpZXMpOworICAgICAgICBpbmplY3RlZFNjcmlwdC5nZXRJbnRlcm5hbFBy
b3BlcnRpZXMoZXJyb3JTdHJpbmcsIG9iamVjdElkLCBnZW5lcmF0ZVByZXZpZXcudmFsdWVPcihm
YWxzZSksIGludGVybmFsUHJvcGVydGllcyk7CiAKICAgICB1bm11dGVDb25zb2xlKCk7CisKKyAg
ICBpZiAoIXByb3BlcnRpZXMpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0
cmluZyk7CisKKyAgICByZXR1cm4geyB7IHByb3BlcnRpZXMucmVsZWFzZU5vbk51bGwoKSwgV1RG
TW92ZShpbnRlcm5hbFByb3BlcnRpZXMpIH0gfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSdW50aW1l
QWdlbnQ6OmdldENvbGxlY3Rpb25FbnRyaWVzKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29u
c3QgU3RyaW5nJiBvYmplY3RJZCwgY29uc3QgU3RyaW5nKiBvYmplY3RHcm91cCwgY29uc3QgaW50
KiBmZXRjaFN0YXJ0LCBjb25zdCBpbnQqIGZldGNoQ291bnQsIFJlZlB0cjxKU09OOjpBcnJheU9m
PFByb3RvY29sOjpSdW50aW1lOjpDb2xsZWN0aW9uRW50cnk+PiYgZW50cmllcykKK1Byb3RvY29s
OjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpDb2xs
ZWN0aW9uRW50cnk+Pj4gSW5zcGVjdG9yUnVudGltZUFnZW50OjpnZXRDb2xsZWN0aW9uRW50cmll
cyhjb25zdCBQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0SWQmIG9iamVjdElkLCBjb25z
dCBTdHJpbmcmIG9iamVjdEdyb3VwLCBPcHRpb25hbDxpbnQ+JiYgZmV0Y2hTdGFydCwgT3B0aW9u
YWw8aW50PiYmIGZldGNoQ291bnQpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9y
U3RyaW5nOworCiAgICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHQgPSBtX2luamVjdGVk
U2NyaXB0TWFuYWdlci5pbmplY3RlZFNjcmlwdEZvck9iamVjdElkKG9iamVjdElkKTsKLSAgICBp
ZiAoaW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0g
Ik1pc3NpbmcgaW5qZWN0ZWQgc2NyaXB0IGZvciBnaXZlbiBvYmplY3RJZCJfczsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KKyAgICBpZiAoaW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKQorICAg
ICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk1pc3NpbmcgaW5qZWN0ZWQgc2NyaXB0IGZvciBn
aXZlbiBvYmplY3RJZCJfcyk7CiAKLSAgICBpbnQgc3RhcnQgPSBhc0ludChmZXRjaFN0YXJ0KTsK
LSAgICBpZiAoc3RhcnQgPCAwKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gImZldGNoU3RhcnQg
Y2Fubm90IGJlIG5lZ2F0aXZlIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGludCBz
dGFydCA9IGZldGNoU3RhcnQudmFsdWVPcigwKTsKKyAgICBpZiAoc3RhcnQgPCAwKQorICAgICAg
ICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoImZldGNoU3RhcnQgY2Fubm90IGJlIG5lZ2F0aXZlIl9z
KTsKIAotICAgIGludCBjb3VudCA9IGFzSW50KGZldGNoQ291bnQpOwotICAgIGlmIChjb3VudCA8
IDApIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiZmV0Y2hDb3VudCBjYW5ub3QgYmUgbmVnYXRp
dmUiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaW50IGNvdW50ID0gZmV0Y2hDb3Vu
dC52YWx1ZU9yKDApOworICAgIGlmIChjb3VudCA8IDApCisgICAgICAgIHJldHVybiBtYWtlVW5l
eHBlY3RlZCgiZmV0Y2hDb3VudCBjYW5ub3QgYmUgbmVnYXRpdmUiX3MpOwogCi0gICAgaW5qZWN0
ZWRTY3JpcHQuZ2V0Q29sbGVjdGlvbkVudHJpZXMoZXJyb3JTdHJpbmcsIG9iamVjdElkLCBvYmpl
Y3RHcm91cCA/ICpvYmplY3RHcm91cCA6IFN0cmluZygpLCBzdGFydCwgY291bnQsIGVudHJpZXMp
OworICAgIFJlZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpDb2xsZWN0aW9u
RW50cnk+PiBlbnRyaWVzOworCisgICAgaW5qZWN0ZWRTY3JpcHQuZ2V0Q29sbGVjdGlvbkVudHJp
ZXMoZXJyb3JTdHJpbmcsIG9iamVjdElkLCBvYmplY3RHcm91cCwgc3RhcnQsIGNvdW50LCBlbnRy
aWVzKTsKKworICAgIGlmICghZW50cmllcykKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVk
KGVycm9yU3RyaW5nKTsKKworICAgIHJldHVybiBlbnRyaWVzLnJlbGVhc2VOb25OdWxsKCk7CiB9
CiAKLXZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50OjpzYXZlUmVzdWx0KEVycm9yU3RyaW5nJiBl
cnJvclN0cmluZywgY29uc3QgSlNPTjo6T2JqZWN0JiBjYWxsQXJndW1lbnQsIGNvbnN0IGludCog
ZXhlY3V0aW9uQ29udGV4dElkLCBPcHRpb25hbDxpbnQ+JiBzYXZlZFJlc3VsdEluZGV4KQorUHJv
dG9jb2w6OkVycm9yU3RyaW5nT3I8T3B0aW9uYWw8aW50PiAvKiBzYXZlUmVzdWx0SW5kZXggKi8+
IEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6c2F2ZVJlc3VsdChSZWY8SlNPTjo6T2JqZWN0PiYmIGNh
bGxBcmd1bWVudCwgT3B0aW9uYWw8UHJvdG9jb2w6OlJ1bnRpbWU6OkV4ZWN1dGlvbkNvbnRleHRJ
ZD4mJiBleGVjdXRpb25Db250ZXh0SWQpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVy
cm9yU3RyaW5nOworCiAgICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHQ7CiAKLSAgICBT
dHJpbmcgb2JqZWN0SWQ7Ci0gICAgaWYgKGNhbGxBcmd1bWVudC5nZXRTdHJpbmcoIm9iamVjdElk
Il9zLCBvYmplY3RJZCkpIHsKLSAgICAgICAgaW5qZWN0ZWRTY3JpcHQgPSBtX2luamVjdGVkU2Ny
aXB0TWFuYWdlci5pbmplY3RlZFNjcmlwdEZvck9iamVjdElkKG9iamVjdElkKTsKLSAgICAgICAg
aWYgKGluamVjdGVkU2NyaXB0Lmhhc05vVmFsdWUoKSkgewotICAgICAgICAgICAgZXJyb3JTdHJp
bmcgPSAiTWlzc2luZyBpbmplY3RlZCBzY3JpcHQgZm9yIGdpdmVuIG9iamVjdElkIl9zOwotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaW5qZWN0
ZWRTY3JpcHQgPSBpbmplY3RlZFNjcmlwdEZvckV2YWwoZXJyb3JTdHJpbmcsIGV4ZWN1dGlvbkNv
bnRleHRJZCk7CisgICAgYXV0byBvYmplY3RJZCA9IGNhbGxBcmd1bWVudC0+Z2V0U3RyaW5nKFBy
b3RvY29sOjpSdW50aW1lOjpDYWxsQXJndW1lbnQ6Om9iamVjdElkS2V5KTsKKyAgICBpZiAoIW9i
amVjdElkKSB7CisgICAgICAgIGluamVjdGVkU2NyaXB0ID0gaW5qZWN0ZWRTY3JpcHRGb3JFdmFs
KGVycm9yU3RyaW5nLCBXVEZNb3ZlKGV4ZWN1dGlvbkNvbnRleHRJZCkpOwogICAgICAgICBpZiAo
aW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKQotICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBpbmplY3RlZFNjcmlwdCA9IG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmluamVjdGVk
U2NyaXB0Rm9yT2JqZWN0SWQob2JqZWN0SWQpOworICAgICAgICBpZiAoaW5qZWN0ZWRTY3JpcHQu
aGFzTm9WYWx1ZSgpKQorICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJNaXNzaW5n
IGluamVjdGVkIHNjcmlwdCBmb3IgZ2l2ZW4gb2JqZWN0SWQiX3MpOwogICAgIH0KLSAgICAKLSAg
ICBpbmplY3RlZFNjcmlwdC5zYXZlUmVzdWx0KGVycm9yU3RyaW5nLCBjYWxsQXJndW1lbnQudG9K
U09OU3RyaW5nKCksIHNhdmVkUmVzdWx0SW5kZXgpOworCisgICAgT3B0aW9uYWw8aW50PiBzYXZl
ZFJlc3VsdEluZGV4OworCisgICAgaW5qZWN0ZWRTY3JpcHQuc2F2ZVJlc3VsdChlcnJvclN0cmlu
ZywgY2FsbEFyZ3VtZW50LT50b0pTT05TdHJpbmcoKSwgc2F2ZWRSZXN1bHRJbmRleCk7CisKKyAg
ICBpZiAoIXNhdmVkUmVzdWx0SW5kZXgpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChl
cnJvclN0cmluZyk7CisKKyAgICByZXR1cm4gV1RGTW92ZShzYXZlZFJlc3VsdEluZGV4KTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OnNldFNhdmVkUmVzdWx0QWxpYXMoRXJyb3JT
dHJpbmcmLCBjb25zdCBTdHJpbmcqIGFsaWFzKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9p
ZD4gSW5zcGVjdG9yUnVudGltZUFnZW50OjpzZXRTYXZlZFJlc3VsdEFsaWFzKGNvbnN0IFN0cmlu
ZyYgc2F2ZWRSZXN1bHRBbGlhcykKIHsKLSAgICBPcHRpb25hbDxTdHJpbmc+IHNhdmVkUmVzdWx0
QWxpYXM7Ci0gICAgaWYgKGFsaWFzICYmICFhbGlhcy0+aXNFbXB0eSgpKQotICAgICAgICBzYXZl
ZFJlc3VsdEFsaWFzID0gKmFsaWFzOwogICAgIG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmluamVj
dGVkU2NyaXB0SG9zdCgpLnNldFNhdmVkUmVzdWx0QWxpYXMoc2F2ZWRSZXN1bHRBbGlhcyk7CisK
KyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6cmVsZWFz
ZU9iamVjdChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgb2JqZWN0SWQpCitQcm90b2NvbDo6
RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OnJlbGVhc2VPYmplY3Qo
Y29uc3QgUHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdElkJiBvYmplY3RJZCkKIHsKICAg
ICBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdCA9IG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2Vy
LmluamVjdGVkU2NyaXB0Rm9yT2JqZWN0SWQob2JqZWN0SWQpOwogICAgIGlmICghaW5qZWN0ZWRT
Y3JpcHQuaGFzTm9WYWx1ZSgpKQogICAgICAgICBpbmplY3RlZFNjcmlwdC5yZWxlYXNlT2JqZWN0
KG9iamVjdElkKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yUnVudGlt
ZUFnZW50OjpyZWxlYXNlT2JqZWN0R3JvdXAoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIG9i
amVjdEdyb3VwKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yUnVudGlt
ZUFnZW50OjpyZWxlYXNlT2JqZWN0R3JvdXAoY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCkKIHsK
ICAgICBtX2luamVjdGVkU2NyaXB0TWFuYWdlci5yZWxlYXNlT2JqZWN0R3JvdXAob2JqZWN0R3Jv
dXApOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6
OmdldFJ1bnRpbWVUeXBlc0ZvclZhcmlhYmxlc0F0T2Zmc2V0cyhFcnJvclN0cmluZyYgZXJyb3JT
dHJpbmcsIGNvbnN0IEpTT046OkFycmF5JiBsb2NhdGlvbnMsIFJlZlB0cjxKU09OOjpBcnJheU9m
PFByb3RvY29sOjpSdW50aW1lOjpUeXBlRGVzY3JpcHRpb24+PiYgdHlwZURlc2NyaXB0aW9ucykK
K1Byb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50
aW1lOjpUeXBlRGVzY3JpcHRpb24+Pj4gSW5zcGVjdG9yUnVudGltZUFnZW50OjpnZXRSdW50aW1l
VHlwZXNGb3JWYXJpYWJsZXNBdE9mZnNldHMoUmVmPEpTT046OkFycmF5PiYmIGxvY2F0aW9ucykK
IHsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogCi0gICAgdHlw
ZURlc2NyaXB0aW9ucyA9IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OlR5cGVEZXNj
cmlwdGlvbj46OmNyZWF0ZSgpOwotICAgIGlmICghbV92bS50eXBlUHJvZmlsZXIoKSkgewotICAg
ICAgICBlcnJvclN0cmluZyA9ICJWTSBoYXMgbm8gdHlwZSBpbmZvcm1hdGlvbiJfczsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoIW1fdm0udHlwZVByb2ZpbGVyKCkpCisgICAgICAg
IHJldHVybiBtYWtlVW5leHBlY3RlZCgiVk0gaGFzIG5vIHR5cGUgaW5mb3JtYXRpb24iX3MpOwor
CisgICAgYXV0byB0eXBlcyA9IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OlR5cGVE
ZXNjcmlwdGlvbj46OmNyZWF0ZSgpOwogCiAgICAgTW9ub3RvbmljVGltZSBzdGFydCA9IE1vbm90
b25pY1RpbWU6Om5vdygpOwogICAgIG1fdm0udHlwZVByb2ZpbGVyTG9nKCktPnByb2Nlc3NMb2dF
bnRyaWVzKG1fdm0sICJVc2VyIFF1ZXJ5Il9zKTsKIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbG9jYXRpb25zLmxlbmd0aCgpOyBpKyspIHsKLSAgICAgICAgUmVmUHRyPEpTT046OlZhbHVl
PiB2YWx1ZSA9IGxvY2F0aW9ucy5nZXQoaSk7Ci0gICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+
IGxvY2F0aW9uOwotICAgICAgICBpZiAoIXZhbHVlLT5hc09iamVjdChsb2NhdGlvbikpIHsKLSAg
ICAgICAgICAgIGVycm9yU3RyaW5nID0gIlVuZXhwZWN0ZWQgbm9uLW9iamVjdCBpdGVtIGluIGxv
Y2F0aW9ucyJfczsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQorICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbG9jYXRpb25zLT5sZW5ndGgoKTsgaSsrKSB7CisgICAgICAgIGF1dG8g
bG9jYXRpb24gPSBsb2NhdGlvbnMtPmdldChpKS0+YXNPYmplY3QoKTsKKyAgICAgICAgaWYgKCFs
b2NhdGlvbikKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiVW5leHBlY3RlZCBu
b24tb2JqZWN0IGl0ZW0gaW4gbG9jYXRpb25zIl9zKTsKIAotICAgICAgICBpbnQgZGVzY3JpcHRv
cjsKLSAgICAgICAgU3RyaW5nIHNvdXJjZUlEQXNTdHJpbmc7Ci0gICAgICAgIGludCBkaXZvdDsK
LSAgICAgICAgbG9jYXRpb24tPmdldEludGVnZXIoInR5cGVJbmZvcm1hdGlvbkRlc2NyaXB0b3Ii
X3MsIGRlc2NyaXB0b3IpOwotICAgICAgICBsb2NhdGlvbi0+Z2V0U3RyaW5nKCJzb3VyY2VJRCJf
cywgc291cmNlSURBc1N0cmluZyk7Ci0gICAgICAgIGxvY2F0aW9uLT5nZXRJbnRlZ2VyKCJkaXZv
dCJfcywgZGl2b3QpOworICAgICAgICBhdXRvIGRlc2NyaXB0b3IgPSBsb2NhdGlvbi0+Z2V0SW50
ZWdlcihQcm90b2NvbDo6UnVudGltZTo6VHlwZUxvY2F0aW9uOjp0eXBlSW5mb3JtYXRpb25EZXNj
cmlwdG9yS2V5KS52YWx1ZU9yKFR5cGVQcm9maWxlclNlYXJjaERlc2NyaXB0b3JOb3JtYWwpOwor
ICAgICAgICBhdXRvIHNvdXJjZUlEU3RyaW5nID0gbG9jYXRpb24tPmdldFN0cmluZyhQcm90b2Nv
bDo6UnVudGltZTo6VHlwZUxvY2F0aW9uOjpzb3VyY2VJREtleSk7CisgICAgICAgIGF1dG8gZGl2
b3QgPSBsb2NhdGlvbi0+Z2V0SW50ZWdlcihQcm90b2NvbDo6UnVudGltZTo6VHlwZUxvY2F0aW9u
OjpkaXZvdEtleSkudmFsdWVPcigwKTsKIAogICAgICAgICBib29sIG9rYXk7Ci0gICAgICAgIFR5
cGVMb2NhdGlvbiogdHlwZUxvY2F0aW9uID0gbV92bS50eXBlUHJvZmlsZXIoKS0+ZmluZExvY2F0
aW9uKGRpdm90LCBzb3VyY2VJREFzU3RyaW5nLnRvSW50UHRyU3RyaWN0KCZva2F5KSwgc3RhdGlj
X2Nhc3Q8VHlwZVByb2ZpbGVyU2VhcmNoRGVzY3JpcHRvcj4oZGVzY3JpcHRvciksIG1fdm0pOwor
ICAgICAgICBUeXBlTG9jYXRpb24qIHR5cGVMb2NhdGlvbiA9IG1fdm0udHlwZVByb2ZpbGVyKCkt
PmZpbmRMb2NhdGlvbihkaXZvdCwgc291cmNlSURTdHJpbmcudG9JbnRQdHJTdHJpY3QoJm9rYXkp
LCBzdGF0aWNfY2FzdDxUeXBlUHJvZmlsZXJTZWFyY2hEZXNjcmlwdG9yPihkZXNjcmlwdG9yKSwg
bV92bSk7CiAgICAgICAgIEFTU0VSVChva2F5KTsKIAogICAgICAgICBSZWZQdHI8VHlwZVNldD4g
dHlwZVNldDsKQEAgLTM3MiwxMiArNDE5LDE0IEBAIHZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50
OjpnZXRSdW50aW1lVHlwZXNGb3JWYXJpYWJsZXNBdE9mZnNldHMoRXJyb3JTdHJpbmcmIGVyCiAg
ICAgICAgICAgICBkZXNjcmlwdGlvbi0+c2V0SXNUcnVuY2F0ZWQodHlwZVNldC0+aXNPdmVyZmxv
d24oKSk7CiAgICAgICAgIH0KIAotICAgICAgICB0eXBlRGVzY3JpcHRpb25zLT5hZGRJdGVtKFdU
Rk1vdmUoZGVzY3JpcHRpb24pKTsKKyAgICAgICAgdHlwZXMtPmFkZEl0ZW0oV1RGTW92ZShkZXNj
cmlwdGlvbikpOwogICAgIH0KIAogICAgIE1vbm90b25pY1RpbWUgZW5kID0gTW9ub3RvbmljVGlt
ZTo6bm93KCk7CiAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgIGRhdGFMb2dGKCJJbnNwZWN0b3I6
OmdldFJ1bnRpbWVUeXBlc0ZvclZhcmlhYmxlc0F0T2Zmc2V0cyB0b29rICVsZm1zXG4iLCAoZW5k
IC0gc3RhcnQpLm1pbGxpc2Vjb25kcygpKTsKKworICAgIHJldHVybiBXVEZNb3ZlKHR5cGVzKTsK
IH0KIAogdm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmRpZENyZWF0ZUZyb250ZW5kQW5kQmFj
a2VuZChJbnNwZWN0b3I6OkZyb250ZW5kUm91dGVyKiwgSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0
Y2hlciopCkBAIC0zODksMjggKzQzOCwzNSBAQCB2b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6
d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoRGlzY29ubmVjdFJlYXNvbiByZWFzbwogICAg
IGlmIChyZWFzb24gIT0gRGlzY29ubmVjdFJlYXNvbjo6SW5zcGVjdGVkVGFyZ2V0RGVzdHJveWVk
ICYmIG1faXNUeXBlUHJvZmlsaW5nRW5hYmxlZCkKICAgICAgICAgc2V0VHlwZVByb2ZpbGVyRW5h
YmxlZFN0YXRlKGZhbHNlKTsKIAotICAgIFN0cmluZyB1bnVzZWQ7Ci0gICAgZGlzYWJsZSh1bnVz
ZWQpOworICAgIGRpc2FibGUoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmVu
YWJsZVR5cGVQcm9maWxlcihFcnJvclN0cmluZyYpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2
b2lkPiBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmVuYWJsZVR5cGVQcm9maWxlcigpCiB7CiAgICAg
c2V0VHlwZVByb2ZpbGVyRW5hYmxlZFN0YXRlKHRydWUpOworCisgICAgcmV0dXJuIHsgfTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmRpc2FibGVUeXBlUHJvZmlsZXIoRXJyb3JT
dHJpbmcmKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yUnVudGltZUFn
ZW50OjpkaXNhYmxlVHlwZVByb2ZpbGVyKCkKIHsKICAgICBzZXRUeXBlUHJvZmlsZXJFbmFibGVk
U3RhdGUoZmFsc2UpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSdW50
aW1lQWdlbnQ6OmVuYWJsZUNvbnRyb2xGbG93UHJvZmlsZXIoRXJyb3JTdHJpbmcmKQorUHJvdG9j
b2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yUnVudGltZUFnZW50OjplbmFibGVDb250
cm9sRmxvd1Byb2ZpbGVyKCkKIHsKICAgICBzZXRDb250cm9sRmxvd1Byb2ZpbGVyRW5hYmxlZFN0
YXRlKHRydWUpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSdW50aW1l
QWdlbnQ6OmRpc2FibGVDb250cm9sRmxvd1Byb2ZpbGVyKEVycm9yU3RyaW5nJikKK1Byb3RvY29s
OjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6ZGlzYWJsZUNvbnRy
b2xGbG93UHJvZmlsZXIoKQogewogICAgIHNldENvbnRyb2xGbG93UHJvZmlsZXJFbmFibGVkU3Rh
dGUoZmFsc2UpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAogdm9pZCBJbnNwZWN0b3JSdW50aW1l
QWdlbnQ6OnNldFR5cGVQcm9maWxlckVuYWJsZWRTdGF0ZShib29sIGlzVHlwZVByb2ZpbGluZ0Vu
YWJsZWQpCkBAIC00NDIsMTkgKzQ5OCwxMyBAQCB2b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6
c2V0Q29udHJvbEZsb3dQcm9maWxlckVuYWJsZWRTdGF0ZShib29sIGlzQ29udHJvbEZsbwogICAg
IH0pOwogfQogCi12b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6Z2V0QmFzaWNCbG9ja3MoRXJy
b3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHNvdXJjZUlEQXNTdHJpbmcsIFJl
ZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpCYXNpY0Jsb2NrPj4mIGJhc2lj
QmxvY2tzKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEpTT046OkFycmF5T2Y8UHJvdG9j
b2w6OlJ1bnRpbWU6OkJhc2ljQmxvY2s+Pj4gSW5zcGVjdG9yUnVudGltZUFnZW50OjpnZXRCYXNp
Y0Jsb2Nrcyhjb25zdCBTdHJpbmcmIHNvdXJjZUlEKQogewotICAgIGlmICghbV92bS5jb250cm9s
Rmxvd1Byb2ZpbGVyKCkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiVk0gaGFzIG5vIGNvbnRy
b2wgZmxvdyBpbmZvcm1hdGlvbiJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAo
IW1fdm0uY29udHJvbEZsb3dQcm9maWxlcigpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0
ZWQoIlZNIGhhcyBubyBjb250cm9sIGZsb3cgaW5mb3JtYXRpb24iX3MpOwogCi0gICAgYm9vbCBv
a2F5OwotICAgIGludHB0cl90IHNvdXJjZUlEID0gc291cmNlSURBc1N0cmluZy50b0ludFB0clN0
cmljdCgmb2theSk7Ci0gICAgQVNTRVJUKG9rYXkpOwotICAgIGNvbnN0IFZlY3RvcjxCYXNpY0Js
b2NrUmFuZ2U+JiBiYXNpY0Jsb2NrUmFuZ2VzID0gbV92bS5jb250cm9sRmxvd1Byb2ZpbGVyKCkt
PmdldEJhc2ljQmxvY2tzRm9yU291cmNlSUQoc291cmNlSUQsIG1fdm0pOwotICAgIGJhc2ljQmxv
Y2tzID0gSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UnVudGltZTo6QmFzaWNCbG9jaz46OmNyZWF0
ZSgpOwotICAgIGZvciAoY29uc3QgQmFzaWNCbG9ja1JhbmdlJiBibG9jayA6IGJhc2ljQmxvY2tS
YW5nZXMpIHsKKyAgICBhdXRvIGJhc2ljQmxvY2tzID0gSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6
UnVudGltZTo6QmFzaWNCbG9jaz46OmNyZWF0ZSgpOworICAgIGZvciAoY29uc3QgYXV0byYgYmxv
Y2sgOiBtX3ZtLmNvbnRyb2xGbG93UHJvZmlsZXIoKS0+Z2V0QmFzaWNCbG9ja3NGb3JTb3VyY2VJ
RChzb3VyY2VJRC50b0ludFB0cigpLCBtX3ZtKSkgewogICAgICAgICBhdXRvIGxvY2F0aW9uID0g
UHJvdG9jb2w6OlJ1bnRpbWU6OkJhc2ljQmxvY2s6OmNyZWF0ZSgpCiAgICAgICAgICAgICAuc2V0
U3RhcnRPZmZzZXQoYmxvY2subV9zdGFydE9mZnNldCkKICAgICAgICAgICAgIC5zZXRFbmRPZmZz
ZXQoYmxvY2subV9lbmRPZmZzZXQpCkBAIC00NjMsNiArNTEzLDcgQEAgdm9pZCBJbnNwZWN0b3JS
dW50aW1lQWdlbnQ6OmdldEJhc2ljQmxvY2tzKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29u
c3QgU3RyaW4KICAgICAgICAgICAgIC5yZWxlYXNlKCk7CiAgICAgICAgIGJhc2ljQmxvY2tzLT5h
ZGRJdGVtKFdURk1vdmUobG9jYXRpb24pKTsKICAgICB9CisgICAgcmV0dXJuIFdURk1vdmUoYmFz
aWNCbG9ja3MpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclJ1bnRpbWVBZ2Vu
dC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUnVu
dGltZUFnZW50LmgKaW5kZXggMTc1NjE1MTFhZjk3OWIzYjJiNzkxYzc0ZGQ3MjdkNGFlMzEyNGVj
ZS4uZjQwMjk0NmZmNmRhYTg4YzQ4NWQwOTdhYWM2MWMxZDllYmZjMDlhYSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUnVudGltZUFn
ZW50LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVj
dG9yUnVudGltZUFnZW50LmgKQEAgLTQ1LDcgKzQ1LDYgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7
CiAKIGNsYXNzIEluamVjdGVkU2NyaXB0OwogY2xhc3MgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOwot
dHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiAKIGNsYXNzIEpTX0VYUE9SVF9QUklWQVRFIElu
c3BlY3RvclJ1bnRpbWVBZ2VudCA6IHB1YmxpYyBJbnNwZWN0b3JBZ2VudEJhc2UsIHB1YmxpYyBS
dW50aW1lQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShJbnNwZWN0b3JSdW50aW1lQWdlbnQpOwpAQCAtNTgsMzMgKzU3LDMzIEBAIHB1YmxpYzoKICAg
ICB2b2lkIHdpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKERpc2Nvbm5lY3RSZWFzb24pIGZp
bmFsOwogCiAgICAgLy8gUnVudGltZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcgotICAgIHZvaWQg
ZW5hYmxlKEVycm9yU3RyaW5nJikgb3ZlcnJpZGUgeyBtX2VuYWJsZWQgPSB0cnVlOyB9Ci0gICAg
dm9pZCBkaXNhYmxlKEVycm9yU3RyaW5nJikgb3ZlcnJpZGUgeyBtX2VuYWJsZWQgPSBmYWxzZTsg
fQotICAgIHZvaWQgcGFyc2UoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24s
IFByb3RvY29sOjpSdW50aW1lOjpTeW50YXhFcnJvclR5cGUqIHJlc3VsdCwgT3B0aW9uYWw8U3Ry
aW5nPiYgbWVzc2FnZSwgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpFcnJvclJhbmdlPiYpIGZp
bmFsOwotICAgIHZvaWQgZXZhbHVhdGUoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGV4cHJl
c3Npb24sIGNvbnN0IFN0cmluZyogb2JqZWN0R3JvdXAsIGNvbnN0IGJvb2wqIGluY2x1ZGVDb21t
YW5kTGluZUFQSSwgY29uc3QgYm9vbCogZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25z
b2xlLCBjb25zdCBpbnQqIGV4ZWN1dGlvbkNvbnRleHRJZCwgY29uc3QgYm9vbCogcmV0dXJuQnlW
YWx1ZSwgY29uc3QgYm9vbCogZ2VuZXJhdGVQcmV2aWV3LCBjb25zdCBib29sKiBzYXZlUmVzdWx0
LCBjb25zdCBib29sKiBlbXVsYXRlVXNlckdlc3R1cmUsIFJlZlB0cjxQcm90b2NvbDo6UnVudGlt
ZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0LCBPcHRpb25hbDxib29sPiYgd2FzVGhyb3duLCBPcHRp
b25hbDxpbnQ+JiBzYXZlZFJlc3VsdEluZGV4KSBvdmVycmlkZTsKLSAgICB2b2lkIGF3YWl0UHJv
bWlzZShjb25zdCBTdHJpbmcmIHByb21pc2VPYmplY3RJZCwgY29uc3QgYm9vbCogcmV0dXJuQnlW
YWx1ZSwgY29uc3QgYm9vbCogZ2VuZXJhdGVQcmV2aWV3LCBjb25zdCBib29sKiBzYXZlUmVzdWx0
LCBSZWY8QXdhaXRQcm9taXNlQ2FsbGJhY2s+JiYpIGZpbmFsOwotICAgIHZvaWQgY2FsbEZ1bmN0
aW9uT24oRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBjb25zdCBTdHJpbmcm
IGV4cHJlc3Npb24sIGNvbnN0IEpTT046OkFycmF5KiBvcHRpb25hbEFyZ3VtZW50cywgY29uc3Qg
Ym9vbCogZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xlLCBjb25zdCBib29sKiBy
ZXR1cm5CeVZhbHVlLCBjb25zdCBib29sKiBnZW5lcmF0ZVByZXZpZXcsIGNvbnN0IGJvb2wqIGVt
dWxhdGVVc2VyR2VzdHVyZSwgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+
JiByZXN1bHQsIE9wdGlvbmFsPGJvb2w+JiB3YXNUaHJvd24pIG92ZXJyaWRlOwotICAgIHZvaWQg
cmVsZWFzZU9iamVjdChFcnJvclN0cmluZyYsIGNvbnN0IEVycm9yU3RyaW5nJiBvYmplY3RJZCkg
ZmluYWw7Ci0gICAgdm9pZCBnZXRQcmV2aWV3KEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBv
YmplY3RJZCwgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpPYmplY3RQcmV2aWV3PiYpIGZpbmFs
OwotICAgIHZvaWQgZ2V0UHJvcGVydGllcyhFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgb2Jq
ZWN0SWQsIGNvbnN0IGJvb2wqIG93blByb3BlcnRpZXMsIGNvbnN0IGludCogZmV0Y2hTdGFydCwg
Y29uc3QgaW50KiBmZXRjaENvdW50LCBjb25zdCBib29sKiBnZW5lcmF0ZVByZXZpZXcsIFJlZlB0
cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpQcm9wZXJ0eURlc2NyaXB0b3I+PiYg
cHJvcGVydGllcywgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OkludGVy
bmFsUHJvcGVydHlEZXNjcmlwdG9yPj4mIGludGVybmFsUHJvcGVydGllcykgZmluYWw7Ci0gICAg
dm9pZCBnZXREaXNwbGF5YWJsZVByb3BlcnRpZXMoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcm
IG9iamVjdElkLCBjb25zdCBpbnQqIGZldGNoU3RhcnQsIGNvbnN0IGludCogZmV0Y2hDb3VudCwg
Y29uc3QgYm9vbCogZ2VuZXJhdGVQcmV2aWV3LCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90b2Nv
bDo6UnVudGltZTo6UHJvcGVydHlEZXNjcmlwdG9yPj4mIHByb3BlcnRpZXMsIFJlZlB0cjxKU09O
OjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpJbnRlcm5hbFByb3BlcnR5RGVzY3JpcHRvcj4+
JiBpbnRlcm5hbFByb3BlcnRpZXMpIGZpbmFsOwotICAgIHZvaWQgZ2V0Q29sbGVjdGlvbkVudHJp
ZXMoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBjb25zdCBTdHJpbmcqIG9i
amVjdEdyb3VwLCBjb25zdCBpbnQqIGZldGNoU3RhcnQsIGNvbnN0IGludCogZmV0Y2hDb3VudCwg
UmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OkNvbGxlY3Rpb25FbnRyeT4+
JiBlbnRyaWVzKSBmaW5hbDsKLSAgICB2b2lkIHNhdmVSZXN1bHQoRXJyb3JTdHJpbmcmLCBjb25z
dCBKU09OOjpPYmplY3QmIGNhbGxBcmd1bWVudCwgY29uc3QgaW50KiBleGVjdXRpb25Db250ZXh0
SWQsIE9wdGlvbmFsPGludD4mIHNhdmVkUmVzdWx0SW5kZXgpIGZpbmFsOwotICAgIHZvaWQgc2V0
U2F2ZWRSZXN1bHRBbGlhcyhFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyogYWxpYXMpIGZpbmFs
OwotICAgIHZvaWQgcmVsZWFzZU9iamVjdEdyb3VwKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5n
JiBvYmplY3RHcm91cCkgZmluYWw7Ci0gICAgdm9pZCBnZXRSdW50aW1lVHlwZXNGb3JWYXJpYWJs
ZXNBdE9mZnNldHMoRXJyb3JTdHJpbmcmLCBjb25zdCBKU09OOjpBcnJheSYgbG9jYXRpb25zLCBS
ZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UnVudGltZTo6VHlwZURlc2NyaXB0aW9uPj4m
KSBmaW5hbDsKLSAgICB2b2lkIGVuYWJsZVR5cGVQcm9maWxlcihFcnJvclN0cmluZyYpIGZpbmFs
OwotICAgIHZvaWQgZGlzYWJsZVR5cGVQcm9maWxlcihFcnJvclN0cmluZyYpIGZpbmFsOwotICAg
IHZvaWQgZW5hYmxlQ29udHJvbEZsb3dQcm9maWxlcihFcnJvclN0cmluZyYpIGZpbmFsOwotICAg
IHZvaWQgZGlzYWJsZUNvbnRyb2xGbG93UHJvZmlsZXIoRXJyb3JTdHJpbmcmKSBmaW5hbDsKLSAg
ICB2b2lkIGdldEJhc2ljQmxvY2tzKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBpbl9zb3Vy
Y2VJRCwgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OkJhc2ljQmxvY2s+
PiYgb3V0X2Jhc2ljQmxvY2tzKSBmaW5hbDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2
b2lkPiBlbmFibGUoKSBvdmVycmlkZTsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lk
PiBkaXNhYmxlKCkgb3ZlcnJpZGU7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8c3RkOjp0
dXBsZTxQcm90b2NvbDo6UnVudGltZTo6U3ludGF4RXJyb3JUeXBlLCBTdHJpbmcgLyogbWVzc2Fn
ZSAqLywgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpFcnJvclJhbmdlPj4+IHBhcnNlKGNvbnN0
IFN0cmluZyYgZXhwcmVzc2lvbikgZmluYWw7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8
c3RkOjp0dXBsZTxSZWY8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4sIE9wdGlvbmFs
PGJvb2w+IC8qIHdhc1Rocm93biAqLywgT3B0aW9uYWw8aW50PiAvKiBzYXZlZFJlc3VsdEluZGV4
ICovPj4gZXZhbHVhdGUoY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBjb25zdCBTdHJpbmcmIG9i
amVjdEdyb3VwLCBPcHRpb25hbDxib29sPiYmIGluY2x1ZGVDb21tYW5kTGluZUFQSSwgT3B0aW9u
YWw8Ym9vbD4mJiBkb05vdFBhdXNlT25FeGNlcHRpb25zQW5kTXV0ZUNvbnNvbGUsIE9wdGlvbmFs
PFByb3RvY29sOjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0SWQ+JiYsIE9wdGlvbmFsPGJvb2w+
JiYgcmV0dXJuQnlWYWx1ZSwgT3B0aW9uYWw8Ym9vbD4mJiBnZW5lcmF0ZVByZXZpZXcsIE9wdGlv
bmFsPGJvb2w+JiYgc2F2ZVJlc3VsdCwgT3B0aW9uYWw8Ym9vbD4mJiBlbXVsYXRlVXNlckdlc3R1
cmUpIG92ZXJyaWRlOworICAgIHZvaWQgYXdhaXRQcm9taXNlKGNvbnN0IFByb3RvY29sOjpSdW50
aW1lOjpSZW1vdGVPYmplY3RJZCYsIE9wdGlvbmFsPGJvb2w+JiYgcmV0dXJuQnlWYWx1ZSwgT3B0
aW9uYWw8Ym9vbD4mJiBnZW5lcmF0ZVByZXZpZXcsIE9wdGlvbmFsPGJvb2w+JiYgc2F2ZVJlc3Vs
dCwgUmVmPEF3YWl0UHJvbWlzZUNhbGxiYWNrPiYmKSBmaW5hbDsKKyAgICBQcm90b2NvbDo6RXJy
b3JTdHJpbmdPcjxzdGQ6OnR1cGxlPFJlZjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0
PiwgT3B0aW9uYWw8Ym9vbD4gLyogd2FzVGhyb3duICovPj4gY2FsbEZ1bmN0aW9uT24oY29uc3Qg
UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdElkJiwgY29uc3QgU3RyaW5nJiBmdW5jdGlv
bkRlY2xhcmF0aW9uLCBSZWZQdHI8SlNPTjo6QXJyYXk+JiYgYXJndW1lbnRzLCBPcHRpb25hbDxi
b29sPiYmIGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29sZSwgT3B0aW9uYWw8Ym9v
bD4mJiByZXR1cm5CeVZhbHVlLCBPcHRpb25hbDxib29sPiYmIGdlbmVyYXRlUHJldmlldywgT3B0
aW9uYWw8Ym9vbD4mJiBlbXVsYXRlVXNlckdlc3R1cmUpIG92ZXJyaWRlOworICAgIFByb3RvY29s
OjpFcnJvclN0cmluZ09yPHZvaWQ+IHJlbGVhc2VPYmplY3QoY29uc3QgUHJvdG9jb2w6OlJ1bnRp
bWU6OlJlbW90ZU9iamVjdElkJikgZmluYWw7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8
UmVmPFByb3RvY29sOjpSdW50aW1lOjpPYmplY3RQcmV2aWV3Pj4gZ2V0UHJldmlldyhjb25zdCBQ
cm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0SWQmKSBmaW5hbDsKKyAgICBQcm90b2NvbDo6
RXJyb3JTdHJpbmdPcjxzdGQ6OnR1cGxlPFJlZjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50
aW1lOjpQcm9wZXJ0eURlc2NyaXB0b3I+PiwgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6
OlJ1bnRpbWU6OkludGVybmFsUHJvcGVydHlEZXNjcmlwdG9yPj4+PiBnZXRQcm9wZXJ0aWVzKGNv
bnN0IFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3RJZCYsIE9wdGlvbmFsPGJvb2w+JiYg
b3duUHJvcGVydGllcywgT3B0aW9uYWw8aW50PiYmIGZldGNoU3RhcnQsIE9wdGlvbmFsPGludD4m
JiBmZXRjaENvdW50LCBPcHRpb25hbDxib29sPiYmIGdlbmVyYXRlUHJldmlldykgZmluYWw7Cisg
ICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8c3RkOjp0dXBsZTxSZWY8SlNPTjo6QXJyYXlPZjxQ
cm90b2NvbDo6UnVudGltZTo6UHJvcGVydHlEZXNjcmlwdG9yPj4sIFJlZlB0cjxKU09OOjpBcnJh
eU9mPFByb3RvY29sOjpSdW50aW1lOjpJbnRlcm5hbFByb3BlcnR5RGVzY3JpcHRvcj4+Pj4gZ2V0
RGlzcGxheWFibGVQcm9wZXJ0aWVzKGNvbnN0IFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmpl
Y3RJZCYsIE9wdGlvbmFsPGludD4mJiBmZXRjaFN0YXJ0LCBPcHRpb25hbDxpbnQ+JiYgZmV0Y2hD
b3VudCwgT3B0aW9uYWw8Ym9vbD4mJiBnZW5lcmF0ZVByZXZpZXcpIGZpbmFsOworICAgIFByb3Rv
Y29sOjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpD
b2xsZWN0aW9uRW50cnk+Pj4gZ2V0Q29sbGVjdGlvbkVudHJpZXMoY29uc3QgUHJvdG9jb2w6OlJ1
bnRpbWU6OlJlbW90ZU9iamVjdElkJiwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCwgT3B0aW9u
YWw8aW50PiYmIGZldGNoU3RhcnQsIE9wdGlvbmFsPGludD4mJiBmZXRjaENvdW50KSBmaW5hbDsK
KyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxPcHRpb25hbDxpbnQ+IC8qIHNhdmVSZXN1bHRJ
bmRleCAqLz4gc2F2ZVJlc3VsdChSZWY8SlNPTjo6T2JqZWN0PiYmIGNhbGxBcmd1bWVudCwgT3B0
aW9uYWw8UHJvdG9jb2w6OlJ1bnRpbWU6OkV4ZWN1dGlvbkNvbnRleHRJZD4mJikgZmluYWw7Cisg
ICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc2V0U2F2ZWRSZXN1bHRBbGlhcyhjb25z
dCBTdHJpbmcmKSBmaW5hbDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiByZWxl
YXNlT2JqZWN0R3JvdXAoY29uc3QgU3RyaW5nJikgZmluYWw7CisgICAgUHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8UmVmPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OlR5cGVEZXNjcmlw
dGlvbj4+PiBnZXRSdW50aW1lVHlwZXNGb3JWYXJpYWJsZXNBdE9mZnNldHMoUmVmPEpTT046OkFy
cmF5PiYmIGxvY2F0aW9ucykgZmluYWw7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9p
ZD4gZW5hYmxlVHlwZVByb2ZpbGVyKCkgZmluYWw7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5n
T3I8dm9pZD4gZGlzYWJsZVR5cGVQcm9maWxlcigpIGZpbmFsOworICAgIFByb3RvY29sOjpFcnJv
clN0cmluZ09yPHZvaWQ+IGVuYWJsZUNvbnRyb2xGbG93UHJvZmlsZXIoKSBmaW5hbDsKKyAgICBQ
cm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBkaXNhYmxlQ29udHJvbEZsb3dQcm9maWxlcigp
IGZpbmFsOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPFBy
b3RvY29sOjpSdW50aW1lOjpCYXNpY0Jsb2NrPj4+IGdldEJhc2ljQmxvY2tzKGNvbnN0IFN0cmlu
ZyYgc291cmNlSUQpIGZpbmFsOwogCiBwcm90ZWN0ZWQ6CiAgICAgSW5zcGVjdG9yUnVudGltZUFn
ZW50KEFnZW50Q29udGV4dCYpOwogCiAgICAgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyJiBpbmplY3Rl
ZFNjcmlwdE1hbmFnZXIoKSB7IHJldHVybiBtX2luamVjdGVkU2NyaXB0TWFuYWdlcjsgfQogCi0g
ICAgdmlydHVhbCBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdEZvckV2YWwoRXJyb3JTdHJp
bmcmLCBjb25zdCBpbnQqIGV4ZWN1dGlvbkNvbnRleHRJZCkgPSAwOworICAgIHZpcnR1YWwgSW5q
ZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHRGb3JFdmFsKFByb3RvY29sOjpFcnJvclN0cmluZyYs
IE9wdGlvbmFsPFByb3RvY29sOjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0SWQ+JiYpID0gMDsK
IAogICAgIHZpcnR1YWwgdm9pZCBtdXRlQ29uc29sZSgpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQg
dW5tdXRlQ29uc29sZSgpID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclNjcmlwdFByb2ZpbGVyQWdlbnQuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yU2NyaXB0UHJvZmlsZXJB
Z2VudC5jcHAKaW5kZXggNjgxM2UwNzVhOTRiMzYzMWZiNTJlYWRkOWNlNzk5YjljN2RjZDhkZS4u
N2ViNTFhZjMwZmRhODAyY2E4MWE4YjEwZWNkN2U2ZWJlZTIyMTE3YyAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yU2NyaXB0UHJvZmls
ZXJBZ2VudC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9yU2NyaXB0UHJvZmlsZXJBZ2VudC5jcHAKQEAgLTY0LDEwICs2NCwxMCBAQCB2b2lk
IEluc3BlY3RvclNjcmlwdFByb2ZpbGVyQWdlbnQ6OndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNr
ZW5kKERpc2Nvbm5lY3RSZWFzbwogICAgIH0KIH0KIAotdm9pZCBJbnNwZWN0b3JTY3JpcHRQcm9m
aWxlckFnZW50OjpzdGFydFRyYWNraW5nKEVycm9yU3RyaW5nJiwgY29uc3QgYm9vbCogaW5jbHVk
ZVNhbXBsZXMpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JTY3JpcHRQ
cm9maWxlckFnZW50OjpzdGFydFRyYWNraW5nKE9wdGlvbmFsPGJvb2w+JiYgaW5jbHVkZVNhbXBs
ZXMpCiB7CiAgICAgaWYgKG1fdHJhY2tpbmcpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0
dXJuIHsgfTsKIAogICAgIG1fdHJhY2tpbmcgPSB0cnVlOwogCkBAIC05MSwxMiArOTEsMTQgQEAg
dm9pZCBJbnNwZWN0b3JTY3JpcHRQcm9maWxlckFnZW50OjpzdGFydFRyYWNraW5nKEVycm9yU3Ry
aW5nJiwgY29uc3QgYm9vbCogaW5jbHUKICAgICBtX2Vudmlyb25tZW50LmRlYnVnZ2VyKCkuc2V0
UHJvZmlsaW5nQ2xpZW50KHRoaXMpOwogCiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPnRyYWNr
aW5nU3RhcnQoc3RvcHdhdGNoLmVsYXBzZWRUaW1lKCkuc2Vjb25kcygpKTsKKworICAgIHJldHVy
biB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yU2NyaXB0UHJvZmlsZXJBZ2VudDo6c3RvcFRyYWNr
aW5nKEVycm9yU3RyaW5nJikKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3Rv
clNjcmlwdFByb2ZpbGVyQWdlbnQ6OnN0b3BUcmFja2luZygpCiB7CiAgICAgaWYgKCFtX3RyYWNr
aW5nKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB7IH07CiAKICAgICBtX3RyYWNr
aW5nID0gZmFsc2U7CiAgICAgbV9hY3RpdmVFdmFsdWF0ZVNjcmlwdCA9IGZhbHNlOwpAQCAtMTA0
LDYgKzEwNiw4IEBAIHZvaWQgSW5zcGVjdG9yU2NyaXB0UHJvZmlsZXJBZ2VudDo6c3RvcFRyYWNr
aW5nKEVycm9yU3RyaW5nJikKICAgICBtX2Vudmlyb25tZW50LmRlYnVnZ2VyKCkuc2V0UHJvZmls
aW5nQ2xpZW50KG51bGxwdHIpOwogCiAgICAgdHJhY2tpbmdDb21wbGV0ZSgpOworCisgICAgcmV0
dXJuIHsgfTsKIH0KIAogYm9vbCBJbnNwZWN0b3JTY3JpcHRQcm9maWxlckFnZW50Ojppc0FscmVh
ZHlQcm9maWxpbmcoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yU2NyaXB0UHJvZmlsZXJBZ2VudC5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yU2NyaXB0UHJvZmlsZXJBZ2Vu
dC5oCmluZGV4IDdlN2NkYzlmOTc1MDY3NzY2Mjk3NDBhYWRjYjU0ZmI0ZGEwMGQwOGYuLjI4ZjU0
ODhkMGFmYzA2M2IyOWRkMGZmN2NkZDUwZTVkNTBhNjQ3ODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclNjcmlwdFByb2ZpbGVyQWdl
bnQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0
b3JTY3JpcHRQcm9maWxlckFnZW50LmgKQEAgLTM3LDI3ICszNywyNSBAQCBjbGFzcyBQcm9maWxl
OwogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7
Ci0KIGNsYXNzIEpTX0VYUE9SVF9QUklWQVRFIEluc3BlY3RvclNjcmlwdFByb2ZpbGVyQWdlbnQg
ZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yQWdlbnRCYXNlLCBwdWJsaWMgU2NyaXB0UHJvZmlsZXJC
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIsIHB1YmxpYyBKU0M6OkRlYnVnZ2VyOjpQcm9maWxpbmdD
bGllbnQgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEluc3BlY3RvclNjcmlwdFByb2ZpbGVy
QWdlbnQpOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIEluc3Bl
Y3RvclNjcmlwdFByb2ZpbGVyQWdlbnQoQWdlbnRDb250ZXh0Jik7Ci0gICAgfkluc3BlY3RvclNj
cmlwdFByb2ZpbGVyQWdlbnQoKSBmaW5hbDsKKyAgICB+SW5zcGVjdG9yU2NyaXB0UHJvZmlsZXJB
Z2VudCgpOwogCiAgICAgLy8gSW5zcGVjdG9yQWdlbnRCYXNlCi0gICAgdm9pZCBkaWRDcmVhdGVG
cm9udGVuZEFuZEJhY2tlbmQoRnJvbnRlbmRSb3V0ZXIqLCBCYWNrZW5kRGlzcGF0Y2hlciopIGZp
bmFsOwotICAgIHZvaWQgd2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoRGlzY29ubmVjdFJl
YXNvbikgZmluYWw7CisgICAgdm9pZCBkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoRnJvbnRl
bmRSb3V0ZXIqLCBCYWNrZW5kRGlzcGF0Y2hlciopOworICAgIHZvaWQgd2lsbERlc3Ryb3lGcm9u
dGVuZEFuZEJhY2tlbmQoRGlzY29ubmVjdFJlYXNvbik7CiAKICAgICAvLyBTY3JpcHRQcm9maWxl
ckJhY2tlbmREaXNwYXRjaGVySGFuZGxlcgotICAgIHZvaWQgc3RhcnRUcmFja2luZyhFcnJvclN0
cmluZyYsIGNvbnN0IGJvb2wqIGluY2x1ZGVTYW1wbGVzKSBmaW5hbDsKLSAgICB2b2lkIHN0b3BU
cmFja2luZyhFcnJvclN0cmluZyYpIGZpbmFsOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09y
PHZvaWQ+IHN0YXJ0VHJhY2tpbmcoT3B0aW9uYWw8Ym9vbD4mJiBpbmNsdWRlU2FtcGxlcyk7Cisg
ICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc3RvcFRyYWNraW5nKCk7CiAKICAgICAv
LyBKU0M6OkRlYnVnZ2VyOjpQcm9maWxpbmdDbGllbnQKLSAgICBib29sIGlzQWxyZWFkeVByb2Zp
bGluZygpIGNvbnN0IGZpbmFsOwotICAgIFNlY29uZHMgd2lsbEV2YWx1YXRlU2NyaXB0KCkgZmlu
YWw7Ci0gICAgdm9pZCBkaWRFdmFsdWF0ZVNjcmlwdChTZWNvbmRzLCBKU0M6OlByb2ZpbGluZ1Jl
YXNvbikgZmluYWw7CisgICAgYm9vbCBpc0FscmVhZHlQcm9maWxpbmcoKSBjb25zdDsKKyAgICBT
ZWNvbmRzIHdpbGxFdmFsdWF0ZVNjcmlwdCgpOworICAgIHZvaWQgZGlkRXZhbHVhdGVTY3JpcHQo
U2Vjb25kcywgSlNDOjpQcm9maWxpbmdSZWFzb24pOwogCiBwcml2YXRlOgogICAgIHZvaWQgYWRk
RXZlbnQoU2Vjb25kcyBzdGFydFRpbWUsIFNlY29uZHMgZW5kVGltZSwgSlNDOjpQcm9maWxpbmdS
ZWFzb24pOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2Vu
dHMvSW5zcGVjdG9yVGFyZ2V0QWdlbnQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9hZ2VudHMvSW5zcGVjdG9yVGFyZ2V0QWdlbnQuY3BwCmluZGV4IDhmY2I1YTFlNTU3NTBk
MzI1YTg0ODI0ZDg2YzQ5Y2ZlNmZiMDQyNjguLjUwOGViMDJlYzk1YzUyNDA4Mzg0YTFlMmI3NzY0
OGFmZDQyNmRkOWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
YWdlbnRzL0luc3BlY3RvclRhcmdldEFnZW50LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JUYXJnZXRBZ2VudC5jcHAKQEAgLTU1LDM2ICs1
NSwzNiBAQCB2b2lkIEluc3BlY3RvclRhcmdldEFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5k
QmFja2VuZChEaXNjb25uZWN0UmVhc29uKQogICAgIG1fc2hvdWxkUGF1c2VPblN0YXJ0ID0gZmFs
c2U7CiB9CiAKLXZvaWQgSW5zcGVjdG9yVGFyZ2V0QWdlbnQ6OnNldFBhdXNlT25TdGFydChFcnJv
clN0cmluZyYsIGJvb2wgcGF1c2VPblN0YXJ0KQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9p
ZD4gSW5zcGVjdG9yVGFyZ2V0QWdlbnQ6OnNldFBhdXNlT25TdGFydChib29sIHBhdXNlT25TdGFy
dCkKIHsKICAgICBtX3Nob3VsZFBhdXNlT25TdGFydCA9IHBhdXNlT25TdGFydDsKKworICAgIHJl
dHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yVGFyZ2V0QWdlbnQ6OnJlc3VtZShFcnJvclN0
cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQpCitQcm90b2NvbDo6RXJy
b3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JUYXJnZXRBZ2VudDo6cmVzdW1lKGNvbnN0IFN0cmlu
ZyYgdGFyZ2V0SWQpCiB7CiAgICAgYXV0byogdGFyZ2V0ID0gbV90YXJnZXRzLmdldCh0YXJnZXRJ
ZCk7Ci0gICAgaWYgKCF0YXJnZXQpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWlzc2luZyB0
YXJnZXQgZm9yIGdpdmVuIHRhcmdldElkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAg
IGlmICghdGFyZ2V0KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk1pc3NpbmcgdGFy
Z2V0IGZvciBnaXZlbiB0YXJnZXRJZCJfcyk7CiAKLSAgICBpZiAoIXRhcmdldC0+aXNQYXVzZWQo
KSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJUYXJnZXQgZm9yIGdpdmVuIHRhcmdldElkIGlz
IG5vdCBwYXVzZWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKCF0YXJnZXQt
PmlzUGF1c2VkKCkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiVGFyZ2V0IGZvciBn
aXZlbiB0YXJnZXRJZCBpcyBub3QgcGF1c2VkIl9zKTsKIAogICAgIHRhcmdldC0+cmVzdW1lKCk7
CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvclRhcmdldEFnZW50OjpzZW5k
TWVzc2FnZVRvVGFyZ2V0KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiB0
YXJnZXRJZCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8
dm9pZD4gSW5zcGVjdG9yVGFyZ2V0QWdlbnQ6OnNlbmRNZXNzYWdlVG9UYXJnZXQoY29uc3QgU3Ry
aW5nJiB0YXJnZXRJZCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQogewogICAgIEluc3BlY3RvclRh
cmdldCogdGFyZ2V0ID0gbV90YXJnZXRzLmdldCh0YXJnZXRJZCk7Ci0gICAgaWYgKCF0YXJnZXQp
IHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWlzc2luZyB0YXJnZXQgZm9yIGdpdmVuIHRhcmdl
dElkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghdGFyZ2V0KQorICAgICAg
ICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk1pc3NpbmcgdGFyZ2V0IGZvciBnaXZlbiB0YXJnZXRJ
ZCJfcyk7CiAKICAgICB0YXJnZXQtPnNlbmRNZXNzYWdlVG9UYXJnZXRCYWNrZW5kKG1lc3NhZ2Up
OworCisgICAgcmV0dXJuIHsgfTsKIH0KIAogdm9pZCBJbnNwZWN0b3JUYXJnZXRBZ2VudDo6c2Vu
ZE1lc3NhZ2VGcm9tVGFyZ2V0VG9Gcm9udGVuZChjb25zdCBTdHJpbmcmIHRhcmdldElkLCBjb25z
dCBTdHJpbmcmIG1lc3NhZ2UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL2FnZW50cy9JbnNwZWN0b3JUYXJnZXRBZ2VudC5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yVGFyZ2V0QWdlbnQuaAppbmRleCBiOTI5ZGRm
ZmUyOWMzZmIwODhhYjY3MTQwODdjOTkzMDJjMjc1MjE0Li5lZGNkNDg5Yjc2ZTA4MDgyN2UwNzQx
ZjE0YmFiMDlmOWVhOTMwM2Q0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL2FnZW50cy9JbnNwZWN0b3JUYXJnZXRBZ2VudC5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclRhcmdldEFnZW50LmgKQEAgLTM1LDIz
ICszNSwyMSBAQCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAogY2xhc3MgSW5zcGVjdG9yVGFyZ2V0
OwogCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQogY2xhc3MgSlNfRVhQT1JUX1BSSVZB
VEUgSW5zcGVjdG9yVGFyZ2V0QWdlbnQgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yQWdlbnRCYXNl
LCBwdWJsaWMgVGFyZ2V0QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKICAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShJbnNwZWN0b3JUYXJnZXRBZ2VudCk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CiBwdWJsaWM6CiAgICAgSW5zcGVjdG9yVGFyZ2V0QWdlbnQoRnJvbnRlbmRSb3V0ZXIm
LCBCYWNrZW5kRGlzcGF0Y2hlciYpOwotICAgIH5JbnNwZWN0b3JUYXJnZXRBZ2VudCgpIGZpbmFs
OworICAgIH5JbnNwZWN0b3JUYXJnZXRBZ2VudCgpOwogCiAgICAgLy8gSW5zcGVjdG9yQWdlbnRC
YXNlCi0gICAgdm9pZCBkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoRnJvbnRlbmRSb3V0ZXIq
LCBCYWNrZW5kRGlzcGF0Y2hlciopIGZpbmFsOwotICAgIHZvaWQgd2lsbERlc3Ryb3lGcm9udGVu
ZEFuZEJhY2tlbmQoRGlzY29ubmVjdFJlYXNvbikgZmluYWw7CisgICAgdm9pZCBkaWRDcmVhdGVG
cm9udGVuZEFuZEJhY2tlbmQoRnJvbnRlbmRSb3V0ZXIqLCBCYWNrZW5kRGlzcGF0Y2hlciopOwor
ICAgIHZvaWQgd2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoRGlzY29ubmVjdFJlYXNvbik7
CiAKICAgICAvLyBUYXJnZXRCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIKLSAgICB2b2lkIHNldFBh
dXNlT25TdGFydChFcnJvclN0cmluZyYsIGJvb2wgcGF1c2VPblN0YXJ0KSBmaW5hbDsKLSAgICB2
b2lkIHJlc3VtZShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQpIGZpbmFsOwot
ICAgIHZvaWQgc2VuZE1lc3NhZ2VUb1RhcmdldChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYg
dGFyZ2V0SWQsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkgZmluYWw7CisgICAgUHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8dm9pZD4gc2V0UGF1c2VPblN0YXJ0KGJvb2wpOworICAgIFByb3RvY29sOjpF
cnJvclN0cmluZ09yPHZvaWQ+IHJlc3VtZShjb25zdCBTdHJpbmcmIHRhcmdldElkKTsKKyAgICBQ
cm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzZW5kTWVzc2FnZVRvVGFyZ2V0KGNvbnN0IFN0
cmluZyYgdGFyZ2V0SWQsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7CiAKICAgICAvLyBUYXJnZXQg
bGlmZWN5Y2xlLgogICAgIHZvaWQgdGFyZ2V0Q3JlYXRlZChJbnNwZWN0b3JUYXJnZXQmKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0pTR2xvYmFs
T2JqZWN0QXVkaXRBZ2VudC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2Fn
ZW50cy9KU0dsb2JhbE9iamVjdEF1ZGl0QWdlbnQuY3BwCmluZGV4IDRiZmE5ZjVhYTdmZGUxNTRi
NTMzYzhmMjNjZDdiYWU2Nzc1OGFiMDAuLjI5ZmNlYzk3YmI4ZTdmNDc3MmQ0ZDdjYzhmYWQ2Yzky
MzE3MWY4OTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdl
bnRzL0pTR2xvYmFsT2JqZWN0QXVkaXRBZ2VudC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9hZ2VudHMvSlNHbG9iYWxPYmplY3RBdWRpdEFnZW50LmNwcApAQCAtNDEs
NyArNDEsNyBAQCBKU0dsb2JhbE9iamVjdEF1ZGl0QWdlbnQ6OkpTR2xvYmFsT2JqZWN0QXVkaXRB
Z2VudChKU0FnZW50Q29udGV4dCYgY29udGV4dCkKIAogSlNHbG9iYWxPYmplY3RBdWRpdEFnZW50
Ojp+SlNHbG9iYWxPYmplY3RBdWRpdEFnZW50KCkgPSBkZWZhdWx0OwogCi1JbmplY3RlZFNjcmlw
dCBKU0dsb2JhbE9iamVjdEF1ZGl0QWdlbnQ6OmluamVjdGVkU2NyaXB0Rm9yRXZhbChFcnJvclN0
cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IGludCogZXhlY3V0aW9uQ29udGV4dElkKQorSW5qZWN0
ZWRTY3JpcHQgSlNHbG9iYWxPYmplY3RBdWRpdEFnZW50OjppbmplY3RlZFNjcmlwdEZvckV2YWwo
UHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgT3B0aW9uYWw8UHJvdG9jb2w6OlJ1
bnRpbWU6OkV4ZWN1dGlvbkNvbnRleHRJZD4mJiBleGVjdXRpb25Db250ZXh0SWQpCiB7CiAgICAg
aWYgKGV4ZWN1dGlvbkNvbnRleHRJZCkgewogICAgICAgICBlcnJvclN0cmluZyA9ICJleGVjdXRp
b25Db250ZXh0SWQgaXMgbm90IHN1cHBvcnRlZCBmb3IgSlNDb250ZXh0cyBhcyB0aGVyZSBpcyBv
bmx5IG9uZSBleGVjdXRpb24gY29udGV4dCJfczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0pTR2xvYmFsT2JqZWN0QXVkaXRBZ2VudC5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSlNHbG9iYWxPYmplY3RBdWRpdEFn
ZW50LmgKaW5kZXggN2Q0NjcwZDA0ZGM3ZmQzMzA4M2ExNTA2MWQzNzc2NWIxYTZjM2VlNi4uNTg0
ZDA1MDI2NDU4OWI0ODA1YzYxYjRjNGRiYTM4MTk5YTZmZWRlMCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSlNHbG9iYWxPYmplY3RBdWRpdEFnZW50
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSlNHbG9iYWxP
YmplY3RBdWRpdEFnZW50LmgKQEAgLTM4LDEwICszOCwxMCBAQCBjbGFzcyBKU0dsb2JhbE9iamVj
dEF1ZGl0QWdlbnQgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yQXVkaXRBZ2VudCB7CiAgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgSlNHbG9iYWxPYmplY3RBdWRpdEFn
ZW50KEpTQWdlbnRDb250ZXh0Jik7Ci0gICAgfkpTR2xvYmFsT2JqZWN0QXVkaXRBZ2VudCgpIGZp
bmFsOworICAgIH5KU0dsb2JhbE9iamVjdEF1ZGl0QWdlbnQoKTsKIAogcHJpdmF0ZToKLSAgICBJ
bmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdEZvckV2YWwoRXJyb3JTdHJpbmcmLCBjb25zdCBp
bnQqIGV4ZWN1dGlvbkNvbnRleHRJZCkgZmluYWw7CisgICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0
ZWRTY3JpcHRGb3JFdmFsKFByb3RvY29sOjpFcnJvclN0cmluZyYsIE9wdGlvbmFsPFByb3RvY29s
OjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0SWQ+JiYpOwogCiAgICAgSlNDOjpKU0dsb2JhbE9i
amVjdCYgbV9nbG9iYWxPYmplY3Q7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9hZ2VudHMvSlNHbG9iYWxPYmplY3REZWJ1Z2dlckFnZW50LmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0pTR2xvYmFsT2JqZWN0RGVidWdn
ZXJBZ2VudC5jcHAKaW5kZXggMjU1MWU3YTQyMzkzOTk1ZDZhM2VlYTljZTQ5MTc0OWEzODc4OTE4
OS4uM2I3MDI4NzhhMWNhNTE2MjQ0MDk5OWY0ZTY0YjUzZmMzNGY5NTMyZiAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSlNHbG9iYWxPYmplY3REZWJ1
Z2dlckFnZW50LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50
cy9KU0dsb2JhbE9iamVjdERlYnVnZ2VyQWdlbnQuY3BwCkBAIC00NCw3ICs0NCw3IEBAIEpTR2xv
YmFsT2JqZWN0RGVidWdnZXJBZ2VudDo6SlNHbG9iYWxPYmplY3REZWJ1Z2dlckFnZW50KEpTQWdl
bnRDb250ZXh0JiBjb250ZXh0CiAKIEpTR2xvYmFsT2JqZWN0RGVidWdnZXJBZ2VudDo6fkpTR2xv
YmFsT2JqZWN0RGVidWdnZXJBZ2VudCgpID0gZGVmYXVsdDsKIAotSW5qZWN0ZWRTY3JpcHQgSlNH
bG9iYWxPYmplY3REZWJ1Z2dlckFnZW50OjppbmplY3RlZFNjcmlwdEZvckV2YWwoRXJyb3JTdHJp
bmcmIGVycm9yU3RyaW5nLCBjb25zdCBpbnQqIGV4ZWN1dGlvbkNvbnRleHRJZCkKK0luamVjdGVk
U2NyaXB0IEpTR2xvYmFsT2JqZWN0RGVidWdnZXJBZ2VudDo6aW5qZWN0ZWRTY3JpcHRGb3JFdmFs
KFByb3RvY29sOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIE9wdGlvbmFsPFByb3RvY29sOjpS
dW50aW1lOjpFeGVjdXRpb25Db250ZXh0SWQ+JiYgZXhlY3V0aW9uQ29udGV4dElkKQogewogICAg
IGlmIChleGVjdXRpb25Db250ZXh0SWQpIHsKICAgICAgICAgZXJyb3JTdHJpbmcgPSAiZXhlY3V0
aW9uQ29udGV4dElkIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIEpTQ29udGV4dHMgYXMgdGhlcmUgaXMg
b25seSBvbmUgZXhlY3V0aW9uIGNvbnRleHQiX3M7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9KU0dsb2JhbE9iamVjdERlYnVnZ2VyQWdlbnQuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0pTR2xvYmFsT2JqZWN0RGVi
dWdnZXJBZ2VudC5oCmluZGV4IDZmNzkyNzhkNTMzMTcxZTFmZGQwYWVmZTlkZDI5YjMzYmZkMWZl
OTUuLjEwMGZiMjNlMzE1ZGYwNDdmOWY4NTZjY2M5YTVhNmY4MGU4M2Q3NzYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0pTR2xvYmFsT2JqZWN0RGVi
dWdnZXJBZ2VudC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRz
L0pTR2xvYmFsT2JqZWN0RGVidWdnZXJBZ2VudC5oCkBAIC0zNiwxOCArMzYsMTggQEAgY2xhc3Mg
SlNHbG9iYWxPYmplY3REZWJ1Z2dlckFnZW50IGZpbmFsIDogcHVibGljIEluc3BlY3RvckRlYnVn
Z2VyQWdlbnQgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIEpT
R2xvYmFsT2JqZWN0RGVidWdnZXJBZ2VudChKU0FnZW50Q29udGV4dCYsIEluc3BlY3RvckNvbnNv
bGVBZ2VudCopOwotICAgIH5KU0dsb2JhbE9iamVjdERlYnVnZ2VyQWdlbnQoKSBmaW5hbDsKKyAg
ICB+SlNHbG9iYWxPYmplY3REZWJ1Z2dlckFnZW50KCk7CiAKICAgICAvLyBKU0M6OkRlYnVnZ2Vy
OjpPYnNlcnZlcgotICAgIHZvaWQgYnJlYWtwb2ludEFjdGlvbkxvZyhKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiwgY29uc3QgU3RyaW5nJiBkYXRhKSBmaW5hbDsKKyAgICB2b2lkIGJyZWFrcG9pbnRBY3Rp
b25Mb2coSlNDOjpKU0dsb2JhbE9iamVjdCosIGNvbnN0IFN0cmluZyYgZGF0YSk7CiAKIHByaXZh
dGU6Ci0gICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHRGb3JFdmFsKEVycm9yU3RyaW5n
JiwgY29uc3QgaW50KiBleGVjdXRpb25Db250ZXh0SWQpIGZpbmFsOworICAgIEluamVjdGVkU2Ny
aXB0IGluamVjdGVkU2NyaXB0Rm9yRXZhbChQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBPcHRpb25h
bDxQcm90b2NvbDo6UnVudGltZTo6RXhlY3V0aW9uQ29udGV4dElkPiYmKTsKIAogICAgIC8vIE5P
VEU6IEphdmFTY3JpcHQgaW5zcGVjdG9yIGRvZXMgbm90IHlldCBuZWVkIHRvIG11dGUgYSBjb25z
b2xlIGJlY2F1c2Ugbm8gbWVzc2FnZXMKICAgICAvLyBhcmUgc2VudCB0byB0aGUgY29uc29sZSBv
dXRzaWRlIG9mIHRoZSBBUEkgYm91bmRhcnkgb3IgY29uc29sZSBvYmplY3QuCi0gICAgdm9pZCBt
dXRlQ29uc29sZSgpIGZpbmFsIHsgfQotICAgIHZvaWQgdW5tdXRlQ29uc29sZSgpIGZpbmFsIHsg
fQorICAgIHZvaWQgbXV0ZUNvbnNvbGUoKSB7IH0KKyAgICB2b2lkIHVubXV0ZUNvbnNvbGUoKSB7
IH0KIAogICAgIEluc3BlY3RvckNvbnNvbGVBZ2VudCogbV9jb25zb2xlQWdlbnQgeyBudWxscHRy
IH07CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2Vu
dHMvSlNHbG9iYWxPYmplY3RSdW50aW1lQWdlbnQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9hZ2VudHMvSlNHbG9iYWxPYmplY3RSdW50aW1lQWdlbnQuY3BwCmluZGV4IGM4
NjY5ZWUwYWE1YjhjYTg0ZTVkMjk0MzdmMzQ0NDcxYzFmOWEwNjAuLmUyNTQ0ODc0OGYxNGU1MGEy
ZmM1Y2RlNzZiMDY4OTAyYjAzODNiMWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3IvYWdlbnRzL0pTR2xvYmFsT2JqZWN0UnVudGltZUFnZW50LmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9KU0dsb2JhbE9iamVjdFJ1bnRp
bWVBZ2VudC5jcHAKQEAgLTQzLDkgKzQzLDEyIEBAIEpTR2xvYmFsT2JqZWN0UnVudGltZUFnZW50
OjpKU0dsb2JhbE9iamVjdFJ1bnRpbWVBZ2VudChKU0FnZW50Q29udGV4dCYgY29udGV4dCkKIAog
SlNHbG9iYWxPYmplY3RSdW50aW1lQWdlbnQ6On5KU0dsb2JhbE9iamVjdFJ1bnRpbWVBZ2VudCgp
ID0gZGVmYXVsdDsKIAotSW5qZWN0ZWRTY3JpcHQgSlNHbG9iYWxPYmplY3RSdW50aW1lQWdlbnQ6
OmluamVjdGVkU2NyaXB0Rm9yRXZhbChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IGlu
dCogZXhlY3V0aW9uQ29udGV4dElkKQorSW5qZWN0ZWRTY3JpcHQgSlNHbG9iYWxPYmplY3RSdW50
aW1lQWdlbnQ6OmluamVjdGVkU2NyaXB0Rm9yRXZhbChQcm90b2NvbDo6RXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBPcHRpb25hbDxQcm90b2NvbDo6UnVudGltZTo6RXhlY3V0aW9uQ29udGV4dElk
PiYmIGV4ZWN1dGlvbkNvbnRleHRJZCkKIHsKLSAgICBBU1NFUlRfVU5VU0VEKGV4ZWN1dGlvbkNv
bnRleHRJZCwgIWV4ZWN1dGlvbkNvbnRleHRJZCk7CisgICAgaWYgKGV4ZWN1dGlvbkNvbnRleHRJ
ZCkgeworICAgICAgICBlcnJvclN0cmluZyA9ICJleGVjdXRpb25Db250ZXh0SWQgaXMgbm90IHN1
cHBvcnRlZCBmb3IgSlNDb250ZXh0cyBhcyB0aGVyZSBpcyBvbmx5IG9uZSBleGVjdXRpb24gY29u
dGV4dCJfczsKKyAgICAgICAgcmV0dXJuIEluamVjdGVkU2NyaXB0KCk7CisgICAgfQogCiAgICAg
SW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHQgPSBpbmplY3RlZFNjcmlwdE1hbmFnZXIoKS5p
bmplY3RlZFNjcmlwdEZvcigmbV9nbG9iYWxPYmplY3QpOwogICAgIGlmIChpbmplY3RlZFNjcmlw
dC5oYXNOb1ZhbHVlKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL2FnZW50cy9KU0dsb2JhbE9iamVjdFJ1bnRpbWVBZ2VudC5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSlNHbG9iYWxPYmplY3RSdW50aW1lQWdlbnQuaAppbmRl
eCA2ZjBjZTkwNTlkNzIzMzgzNzhiMWQ0N2E3MWE3MjVjMzkyY2QyNzdhLi5iZmViZGE5MmEwOGE5
MWQzOGNlMmM1MTc1Njc5NjczMWQ1OWEyYzljIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL2FnZW50cy9KU0dsb2JhbE9iamVjdFJ1bnRpbWVBZ2VudC5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0pTR2xvYmFsT2JqZWN0UnVu
dGltZUFnZW50LmgKQEAgLTM5LDE1ICszOSwxNSBAQCBjbGFzcyBKU0dsb2JhbE9iamVjdFJ1bnRp
bWVBZ2VudCBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3JSdW50aW1lQWdlbnQgewogICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIEpTR2xvYmFsT2JqZWN0UnVudGltZUFn
ZW50KEpTQWdlbnRDb250ZXh0Jik7Ci0gICAgfkpTR2xvYmFsT2JqZWN0UnVudGltZUFnZW50KCkg
ZmluYWw7CisgICAgfkpTR2xvYmFsT2JqZWN0UnVudGltZUFnZW50KCk7CiAKIHByaXZhdGU6Ci0g
ICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHRGb3JFdmFsKEVycm9yU3RyaW5nJiwgY29u
c3QgaW50KiBleGVjdXRpb25Db250ZXh0SWQpIGZpbmFsOworICAgIEluamVjdGVkU2NyaXB0IGlu
amVjdGVkU2NyaXB0Rm9yRXZhbChQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBPcHRpb25hbDxQcm90
b2NvbDo6UnVudGltZTo6RXhlY3V0aW9uQ29udGV4dElkPiYmKTsKIAogICAgIC8vIE5PVEU6IEph
dmFTY3JpcHQgaW5zcGVjdG9yIGRvZXMgbm90IHlldCBuZWVkIHRvIG11dGUgYSBjb25zb2xlIGJl
Y2F1c2Ugbm8gbWVzc2FnZXMKICAgICAvLyBhcmUgc2VudCB0byB0aGUgY29uc29sZSBvdXRzaWRl
IG9mIHRoZSBBUEkgYm91bmRhcnkgb3IgY29uc29sZSBvYmplY3QuCi0gICAgdm9pZCBtdXRlQ29u
c29sZSgpIGZpbmFsIHsgfQotICAgIHZvaWQgdW5tdXRlQ29uc29sZSgpIGZpbmFsIHsgfQorICAg
IHZvaWQgbXV0ZUNvbnNvbGUoKSB7IH0KKyAgICB2b2lkIHVubXV0ZUNvbnNvbGUoKSB7IH0KIAog
ICAgIHN0ZDo6dW5pcXVlX3B0cjxSdW50aW1lRnJvbnRlbmREaXNwYXRjaGVyPiBtX2Zyb250ZW5k
RGlzcGF0Y2hlcjsKICAgICBSZWZQdHI8UnVudGltZUJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tl
bmREaXNwYXRjaGVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9wcm90b2NvbC9QYWdlLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3By
b3RvY29sL1BhZ2UuanNvbgppbmRleCAzYjhmYTE4YmQ3ZThkOTVkN2U4Zjk1YjQ0MmFmYzYzZTU1
MGNlNjNhLi5mZGU0ZjY5NjRkNDBlOGE1NjUxMTZiZTJiYzY5MmE0NTFjMmRhMTA2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Byb3RvY29sL1BhZ2UuanNvbgor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Byb3RvY29sL1BhZ2UuanNvbgpA
QCAtMjY3LDcgKzI2Nyw3IEBACiAgICAgICAgICAgICAiY29uZGl0aW9uIjogIihkZWZpbmVkKEVO
QUJMRV9EQVJLX01PREVfQ1NTKSAmJiBFTkFCTEVfREFSS19NT0RFX0NTUykgfHwgKGRlZmluZWQo
SEFWRV9PU19EQVJLX01PREVfU1VQUE9SVCkgJiYgSEFWRV9PU19EQVJLX01PREVfU1VQUE9SVCki
LAogICAgICAgICAgICAgInRhcmdldFR5cGVzIjogWyJwYWdlIl0sCiAgICAgICAgICAgICAicGFy
YW1ldGVycyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImFwcGVhcmFuY2UiLCAiJHJl
ZiI6ICJBcHBlYXJhbmNlIiwgImRlc2NyaXB0aW9uIjogIkFwcGVhcmFuY2UgbmFtZSB0byBmb3Jj
ZS4gRW1wdHkgc3RyaW5nIGRpc2FibGVzIHRoZSBvdmVycmlkZS4iIH0KKyAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogImFwcGVhcmFuY2UiLCAiJHJlZiI6ICJBcHBlYXJhbmNlIiwgIm9wdGlvbmFs
IjogdHJ1ZSB9CiAgICAgICAgICAgICBdCiAgICAgICAgIH0sCiAgICAgICAgIHsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcmVtb3RlL3NvY2tldC9SZW1vdGVJ
bnNwZWN0b3JDb25uZWN0aW9uQ2xpZW50LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3IvcmVtb3RlL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JDb25uZWN0aW9uQ2xpZW50LmNwcApp
bmRleCAwNjUyZTEyNzA4YmY4NjIzMGJlNDYyOWZlNjU3MjViYmJjMzViNjcwLi4xMTAwMDA0NzNk
Y2ZjYzQzNjQ3Njg0ODE3ZDk1MzhjNzE1YzcyODU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3JlbW90ZS9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yQ29ubmVjdGlv
bkNsaWVudC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9yZW1vdGUv
c29ja2V0L1JlbW90ZUluc3BlY3RvckNvbm5lY3Rpb25DbGllbnQuY3BwCkBAIC05MiwzMiArOTIs
MjQgQEAgT3B0aW9uYWw8UmVtb3RlSW5zcGVjdG9yQ29ubmVjdGlvbkNsaWVudDo6RXZlbnQ+IFJl
bW90ZUluc3BlY3RvckNvbm5lY3Rpb25DbGllbnQKIAogICAgIFN0cmluZyBqc29uRGF0YSA9IFN0
cmluZzo6ZnJvbVVURjgoZGF0YSk7CiAKLSAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IG1lc3NhZ2VW
YWx1ZTsKLSAgICBpZiAoIUpTT046OlZhbHVlOjpwYXJzZUpTT04oanNvbkRhdGEsIG1lc3NhZ2VW
YWx1ZSkpCisgICAgYXV0byBtZXNzYWdlVmFsdWUgPSBKU09OOjpWYWx1ZTo6cGFyc2VKU09OKGpz
b25EYXRhKTsKKyAgICBpZiAoIW1lc3NhZ2VWYWx1ZSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKIAotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG1lc3NhZ2VPYmplY3Q7Ci0gICAgaWYg
KCFtZXNzYWdlVmFsdWUtPmFzT2JqZWN0KG1lc3NhZ2VPYmplY3QpKQorICAgIGF1dG8gbWVzc2Fn
ZU9iamVjdCA9IG1lc3NhZ2VWYWx1ZS0+YXNPYmplY3QoKTsKKyAgICBpZiAoIW1lc3NhZ2VPYmpl
Y3QpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICBFdmVudCBldmVudDsKLSAg
ICBpZiAoIW1lc3NhZ2VPYmplY3QtPmdldFN0cmluZygiZXZlbnQiX3MsIGV2ZW50Lm1ldGhvZE5h
bWUpKQorCisgICAgZXZlbnQubWV0aG9kTmFtZSA9IG1lc3NhZ2VPYmplY3QtPmdldFN0cmluZygi
ZXZlbnQiX3MpOworICAgIGlmICghZXZlbnQubWV0aG9kTmFtZSkKICAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKIAogICAgIGV2ZW50LmNsaWVudElEID0gY2xpZW50SUQ7Ci0KLSAgICBDb25u
ZWN0aW9uSUQgY29ubmVjdGlvbklEOwotICAgIGlmIChtZXNzYWdlT2JqZWN0LT5nZXRJbnRlZ2Vy
KCJjb25uZWN0aW9uSUQiX3MsIGNvbm5lY3Rpb25JRCkpCi0gICAgICAgIGV2ZW50LmNvbm5lY3Rp
b25JRCA9IGNvbm5lY3Rpb25JRDsKLQotICAgIFRhcmdldElEIHRhcmdldElEOwotICAgIGlmICht
ZXNzYWdlT2JqZWN0LT5nZXRJbnRlZ2VyKCJ0YXJnZXRJRCJfcywgdGFyZ2V0SUQpKQotICAgICAg
ICBldmVudC50YXJnZXRJRCA9IHRhcmdldElEOwotCi0gICAgU3RyaW5nIG1lc3NhZ2U7Ci0gICAg
aWYgKG1lc3NhZ2VPYmplY3QtPmdldFN0cmluZygibWVzc2FnZSJfcywgbWVzc2FnZSkpCi0gICAg
ICAgIGV2ZW50Lm1lc3NhZ2UgPSBtZXNzYWdlOwotCisgICAgZXZlbnQuY29ubmVjdGlvbklEID0g
bWVzc2FnZU9iamVjdC0+Z2V0SW50ZWdlcigiY29ubmVjdGlvbklEIl9zKTsKKyAgICBldmVudC50
YXJnZXRJRCA9IG1lc3NhZ2VPYmplY3QtPmdldEludGVnZXIoInRhcmdldElEIl9zKTsKKyAgICBl
dmVudC5tZXNzYWdlID0gbWVzc2FnZU9iamVjdC0+Z2V0U3RyaW5nKCJtZXNzYWdlIl9zKTsKICAg
ICByZXR1cm4gZXZlbnQ7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2NwcF9nZW5lcmF0b3IucHkgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9jcHBfZ2VuZXJhdG9yLnB5CmluZGV4
IGY3MzM4ZjZkZDNmMTgxZTg5NWUxOWVlYzY2Y2EyMWQ1OWNiYmRhZmEuLjQ2YjkwNjU3YzM5ZTRk
MjUwM2I3YzcxZDJjNGNkZDM3OTc4NWM3Y2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2NwcF9nZW5lcmF0b3IucHkKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vY3BwX2dlbmVyYXRv
ci5weQpAQCAtNTUsMjc5ICs1NSwzMjkgQEAgY2xhc3MgQ3BwR2VuZXJhdG9yKEdlbmVyYXRvcik6
CiAgICAgICAgIHJldHVybiBzZWxmLm1vZGVsKCkuZnJhbWV3b3JrLnNldHRpbmcoJ2NwcF9wcm90
b2NvbF9ncm91cCcsICcnKQogCiAgICAgZGVmIGhlbHBlcnNfbmFtZXNwYWNlKHNlbGYpOgotICAg
ICAgICByZXR1cm4gJyVzSGVscGVycycgJSBzZWxmLnByb3RvY29sX25hbWUoKQorICAgICAgICBu
YW1lc3BhY2UgPSAnSGVscGVycycKKyAgICAgICAgaWYgc2VsZi5wcm90b2NvbF9uYW1lKCkgIT0g
J0luc3BlY3Rvcic6CisgICAgICAgICAgICBuYW1lc3BhY2UgPSBzZWxmLnByb3RvY29sX25hbWUo
KSArIG5hbWVzcGFjZQorICAgICAgICByZXR1cm4gbmFtZXNwYWNlCiAKICAgICAjIE1pc2NlbGxh
bmVvdXMgdGV4dCBtYW5pcHVsYXRpb24gcm91dGluZXMuCiAgICAgQHN0YXRpY21ldGhvZAogICAg
IGRlZiBjcHBfZ2V0dGVyX21ldGhvZF9mb3JfdHlwZShfdHlwZSk6Ci0gICAgICAgIGlmIGlzaW5z
dGFuY2UoX3R5cGUsIE9iamVjdFR5cGUpOgotICAgICAgICAgICAgcmV0dXJuICdnZXRPYmplY3Qn
Ci0gICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEFycmF5VHlwZSk6Ci0gICAgICAgICAgICBy
ZXR1cm4gJ2dldEFycmF5JwotICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBQcmltaXRpdmVU
eXBlKToKLSAgICAgICAgICAgIGlmIF90eXBlLnJhd19uYW1lKCkgPT0gJ2ludGVnZXInOgotICAg
ICAgICAgICAgICAgIHJldHVybiAnZ2V0SW50ZWdlcicKLSAgICAgICAgICAgIGVsaWYgX3R5cGUu
cmF3X25hbWUoKSA9PSAnbnVtYmVyJzoKLSAgICAgICAgICAgICAgICByZXR1cm4gJ2dldERvdWJs
ZScKLSAgICAgICAgICAgIGVsaWYgX3R5cGUucmF3X25hbWUoKSA9PSAnYW55JzoKLSAgICAgICAg
ICAgICAgICByZXR1cm4gJ2dldFZhbHVlJwotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAg
ICAgICByZXR1cm4gJ2dldCcgKyB1Y2ZpcnN0KF90eXBlLnJhd19uYW1lKCkpCiAgICAgICAgIGlm
IGlzaW5zdGFuY2UoX3R5cGUsIEFsaWFzZWRUeXBlKToKLSAgICAgICAgICAgIHJldHVybiBDcHBH
ZW5lcmF0b3IuY3BwX2dldHRlcl9tZXRob2RfZm9yX3R5cGUoX3R5cGUuYWxpYXNlZF90eXBlKQor
ICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5hbGlhc2VkX3R5cGUKKyAgICAgICAgICAgICMgZmFs
bHRocm91Z2gKKwogICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBFbnVtVHlwZSk6Ci0gICAg
ICAgICAgICByZXR1cm4gQ3BwR2VuZXJhdG9yLmNwcF9nZXR0ZXJfbWV0aG9kX2Zvcl90eXBlKF90
eXBlLnByaW1pdGl2ZV90eXBlKQorICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5wcmltaXRpdmVf
dHlwZQorICAgICAgICAgICAgIyBmYWxsdGhyb3VnaAorCisgICAgICAgIGlmIGlzaW5zdGFuY2Uo
X3R5cGUsIE9iamVjdFR5cGUpIG9yIF90eXBlLnF1YWxpZmllZF9uYW1lKCkgaW4gWydvYmplY3Qn
XToKKyAgICAgICAgICAgIHJldHVybiAnZ2V0T2JqZWN0JworCisgICAgICAgIGlmIGlzaW5zdGFu
Y2UoX3R5cGUsIEFycmF5VHlwZSkgb3IgX3R5cGUucXVhbGlmaWVkX25hbWUoKSBpbiBbJ2FycmF5
J106CisgICAgICAgICAgICByZXR1cm4gJ2dldEFycmF5JworCisgICAgICAgIGlmIGlzaW5zdGFu
Y2UoX3R5cGUsIFByaW1pdGl2ZVR5cGUpOgorICAgICAgICAgICAgaWYgX3R5cGUucmF3X25hbWUo
KSA9PSAnbnVtYmVyJzoKKyAgICAgICAgICAgICAgICByZXR1cm4gJ2dldERvdWJsZScKKyAgICAg
ICAgICAgIGlmIF90eXBlLnJhd19uYW1lKCkgPT0gJ2FueSc6CisgICAgICAgICAgICAgICAgcmV0
dXJuICdnZXRWYWx1ZScKKyAgICAgICAgICAgIHJldHVybiAnZ2V0JyArIHVjZmlyc3QoX3R5cGUu
cmF3X25hbWUoKSkKKworICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJ1bmtub3duIHR5cGUiKQog
CiAgICAgQHN0YXRpY21ldGhvZAogICAgIGRlZiBjcHBfc2V0dGVyX21ldGhvZF9mb3JfdHlwZShf
dHlwZSk6Ci0gICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIE9iamVjdFR5cGUpOgotICAgICAg
ICAgICAgcmV0dXJuICdzZXRPYmplY3QnCi0gICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEFy
cmF5VHlwZSk6Ci0gICAgICAgICAgICByZXR1cm4gJ3NldEFycmF5JwotICAgICAgICBpZiBpc2lu
c3RhbmNlKF90eXBlLCBQcmltaXRpdmVUeXBlKToKLSAgICAgICAgICAgIGlmIF90eXBlLnJhd19u
YW1lKCkgPT0gJ2ludGVnZXInOgotICAgICAgICAgICAgICAgIHJldHVybiAnc2V0SW50ZWdlcicK
LSAgICAgICAgICAgIGVsaWYgX3R5cGUucmF3X25hbWUoKSA9PSAnbnVtYmVyJzoKLSAgICAgICAg
ICAgICAgICByZXR1cm4gJ3NldERvdWJsZScKLSAgICAgICAgICAgIGVsaWYgX3R5cGUucmF3X25h
bWUoKSA9PSAnYW55JzoKLSAgICAgICAgICAgICAgICByZXR1cm4gJ3NldFZhbHVlJwotICAgICAg
ICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByZXR1cm4gJ3NldCcgKyB1Y2ZpcnN0KF90eXBl
LnJhd19uYW1lKCkpCiAgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEFsaWFzZWRUeXBlKToK
LSAgICAgICAgICAgIHJldHVybiBDcHBHZW5lcmF0b3IuY3BwX3NldHRlcl9tZXRob2RfZm9yX3R5
cGUoX3R5cGUuYWxpYXNlZF90eXBlKQorICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5hbGlhc2Vk
X3R5cGUKKyAgICAgICAgICAgICMgZmFsbHRocm91Z2gKKwogICAgICAgICBpZiBpc2luc3RhbmNl
KF90eXBlLCBFbnVtVHlwZSk6Ci0gICAgICAgICAgICByZXR1cm4gQ3BwR2VuZXJhdG9yLmNwcF9z
ZXR0ZXJfbWV0aG9kX2Zvcl90eXBlKF90eXBlLnByaW1pdGl2ZV90eXBlKQorICAgICAgICAgICAg
X3R5cGUgPSBfdHlwZS5wcmltaXRpdmVfdHlwZQorICAgICAgICAgICAgIyBmYWxsdGhyb3VnaAor
CisgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIE9iamVjdFR5cGUpIG9yIF90eXBlLnF1YWxp
ZmllZF9uYW1lKCkgaW4gWydvYmplY3QnXToKKyAgICAgICAgICAgIHJldHVybiAnc2V0T2JqZWN0
JworCisgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEFycmF5VHlwZSkgb3IgX3R5cGUucXVh
bGlmaWVkX25hbWUoKSBpbiBbJ2FycmF5J106CisgICAgICAgICAgICByZXR1cm4gJ3NldEFycmF5
JworCisgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIFByaW1pdGl2ZVR5cGUpOgorICAgICAg
ICAgICAgaWYgX3R5cGUucmF3X25hbWUoKSA9PSAnbnVtYmVyJzoKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gJ3NldERvdWJsZScKKyAgICAgICAgICAgIGlmIF90eXBlLnJhd19uYW1lKCkgPT0gJ2Fu
eSc6CisgICAgICAgICAgICAgICAgcmV0dXJuICdzZXRWYWx1ZScKKyAgICAgICAgICAgIHJldHVy
biAnc2V0JyArIHVjZmlyc3QoX3R5cGUucmF3X25hbWUoKSkKKworICAgICAgICByYWlzZSBWYWx1
ZUVycm9yKCJ1bmtub3duIHR5cGUiKQogCiAgICAgIyBHZW5lcmF0ZSB0eXBlIHJlcHJlc2VudGF0
aW9ucyBmb3IgdmFyaW91cyBzaXR1YXRpb25zLgogICAgIEBzdGF0aWNtZXRob2QKICAgICBkZWYg
Y3BwX3Byb3RvY29sX3R5cGVfZm9yX3R5cGUoX3R5cGUpOgogICAgICAgICBpZiBpc2luc3RhbmNl
KF90eXBlLCBBbGlhc2VkVHlwZSk6Ci0gICAgICAgICAgICBfdHlwZSA9IF90eXBlLmFsaWFzZWRf
dHlwZSAgIyBGYWxsIHRocm91Z2ggdG8gZW51bSBvciBwcmltaXRpdmUuCisgICAgICAgICAgICBf
dHlwZSA9IF90eXBlLmFsaWFzZWRfdHlwZQorICAgICAgICAgICAgIyBmYWxsdGhyb3VnaAogCi0g
ICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIE9iamVjdFR5cGUpIGFuZCBsZW4oX3R5cGUubWVt
YmVycykgPT0gMDoKLSAgICAgICAgICAgIHJldHVybiAnSlNPTjo6T2JqZWN0JwogICAgICAgICBp
ZiBpc2luc3RhbmNlKF90eXBlLCBBcnJheVR5cGUpOgotICAgICAgICAgICAgaWYgX3R5cGUucmF3
X25hbWUoKSBpcyBOb25lOiAgIyBPdGhlcndpc2UsIGZhbGwgdGhyb3VnaCBhbmQgdXNlIHR5cGVk
ZWYnZCBuYW1lLgorICAgICAgICAgICAgaWYgX3R5cGUucmF3X25hbWUoKSBpcyBOb25lOgogICAg
ICAgICAgICAgICAgIHJldHVybiAnSlNPTjo6QXJyYXlPZjwlcz4nICUgQ3BwR2VuZXJhdG9yLmNw
cF9wcm90b2NvbF90eXBlX2Zvcl90eXBlKF90eXBlLmVsZW1lbnRfdHlwZSkKKyAgICAgICAgICAg
ICMgZmFsbHRocm91Z2gKKwogICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCAoT2JqZWN0VHlw
ZSwgRW51bVR5cGUsIEFycmF5VHlwZSkpOgotICAgICAgICAgICAgcmV0dXJuICdJbnNwZWN0b3I6
OlByb3RvY29sOjolczo6JXMnICUgKF90eXBlLnR5cGVfZG9tYWluKCkuZG9tYWluX25hbWUsIF90
eXBlLnJhd19uYW1lKCkpCisgICAgICAgICAgICByZXR1cm4gJ1Byb3RvY29sOjolczo6JXMnICUg
KF90eXBlLnR5cGVfZG9tYWluKCkuZG9tYWluX25hbWUsIF90eXBlLnJhd19uYW1lKCkpCisKICAg
ICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgUHJpbWl0aXZlVHlwZSk6CiAgICAgICAgICAgICBy
ZXR1cm4gQ3BwR2VuZXJhdG9yLmNwcF9uYW1lX2Zvcl9wcmltaXRpdmVfdHlwZShfdHlwZSkKIAot
ICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgY3BwX3Byb3RvY29sX3R5cGVfZm9yX3R5cGVfbWVt
YmVyKHR5cGVfbWVtYmVyLCBvYmplY3RfZGVjbGFyYXRpb24pOgotICAgICAgICBpZiBpc2luc3Rh
bmNlKHR5cGVfbWVtYmVyLnR5cGUsIEVudW1UeXBlKSBhbmQgdHlwZV9tZW1iZXIudHlwZS5pc19h
bm9ueW1vdXM6Ci0gICAgICAgICAgICByZXR1cm4gJzo6Jy5qb2luKFtDcHBHZW5lcmF0b3IuY3Bw
X3Byb3RvY29sX3R5cGVfZm9yX3R5cGUob2JqZWN0X2RlY2xhcmF0aW9uLnR5cGUpLCB1Y2ZpcnN0
KHR5cGVfbWVtYmVyLm1lbWJlcl9uYW1lKV0pCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBy
ZXR1cm4gQ3BwR2VuZXJhdG9yLmNwcF9wcm90b2NvbF90eXBlX2Zvcl90eXBlKHR5cGVfbWVtYmVy
LnR5cGUpCisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInVua25vd24gdHlwZSIpCiAKICAgICBA
c3RhdGljbWV0aG9kCi0gICAgZGVmIGNwcF90eXBlX2Zvcl91bmNoZWNrZWRfZm9ybWFsX2luX3Bh
cmFtZXRlcihwYXJhbWV0ZXIpOgotICAgICAgICBfdHlwZSA9IHBhcmFtZXRlci50eXBlCisgICAg
ZGVmIGNwcF90eXBlX2Zvcl90eXBlX21lbWJlcl9hcmd1bWVudChfdHlwZSwgbmFtZSk6CiAgICAg
ICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEFsaWFzZWRUeXBlKToKLSAgICAgICAgICAgIF90eXBl
ID0gX3R5cGUuYWxpYXNlZF90eXBlICAjIEZhbGwgdGhyb3VnaCB0byBlbnVtIG9yIHByaW1pdGl2
ZS4KKyAgICAgICAgICAgIF90eXBlID0gX3R5cGUuYWxpYXNlZF90eXBlCisgICAgICAgICAgICAj
IGZhbGx0aHJvdWdoCiAKLSAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgRW51bVR5cGUpOgot
ICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5wcmltaXRpdmVfdHlwZSAgIyBGYWxsIHRocm91Z2gg
dG8gcHJpbWl0aXZlLgotCi0gICAgICAgICMgVGhpcyBoYW5kbGVzIHRoZSAnYW55JyB0eXBlIGFu
ZCBvYmplY3RzIHdpdGggZGVmaW5lZCBwcm9wZXJ0aWVzLgotICAgICAgICBpZiBpc2luc3RhbmNl
KF90eXBlLCBPYmplY3RUeXBlKSBvciBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpID09ICdvYmplY3Qn
OgotICAgICAgICAgICAgY3BwX25hbWUgPSAnSlNPTjo6T2JqZWN0JwotICAgICAgICAgICAgaWYg
cGFyYW1ldGVyLmlzX29wdGlvbmFsOgotICAgICAgICAgICAgICAgIHJldHVybiAnY29uc3QgJXMq
JyAlIGNwcF9uYW1lCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJldHVybiAn
Y29uc3QgJXMmJyAlIGNwcF9uYW1lCi0gICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEFycmF5
VHlwZSk6Ci0gICAgICAgICAgICBjcHBfbmFtZSA9ICdKU09OOjpBcnJheScKLSAgICAgICAgICAg
IGlmIHBhcmFtZXRlci5pc19vcHRpb25hbDoKLSAgICAgICAgICAgICAgICByZXR1cm4gJ2NvbnN0
ICVzKicgJSBjcHBfbmFtZQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByZXR1
cm4gJ2NvbnN0ICVzJicgJSBjcHBfbmFtZQotICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBQ
cmltaXRpdmVUeXBlKToKLSAgICAgICAgICAgIGNwcF9uYW1lID0gQ3BwR2VuZXJhdG9yLmNwcF9u
YW1lX2Zvcl9wcmltaXRpdmVfdHlwZShfdHlwZSkKLSAgICAgICAgICAgIGlmIHBhcmFtZXRlci5p
c19vcHRpb25hbDoKLSAgICAgICAgICAgICAgICByZXR1cm4gJ2NvbnN0ICVzKicgJSBjcHBfbmFt
ZQotICAgICAgICAgICAgZWxpZiBfdHlwZS5yYXdfbmFtZSgpIGluIFsnc3RyaW5nJ106Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuICdjb25zdCAlcyYnICUgY3BwX25hbWUKLSAgICAgICAgICAgIGVs
c2U6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGNwcF9uYW1lCi0KLSAgICAgICAgcmV0dXJuICJ1
bmtub3duX3VuY2hlY2tlZF9mb3JtYWxfaW5fcGFyYW1ldGVyX3R5cGUiCi0KLSAgICBAc3RhdGlj
bWV0aG9kCi0gICAgZGVmIGNwcF90eXBlX2Zvcl9jaGVja2VkX2Zvcm1hbF9ldmVudF9wYXJhbWV0
ZXIocGFyYW1ldGVyKToKLSAgICAgICAgcmV0dXJuIENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3Jf
dHlwZV93aXRoX25hbWUocGFyYW1ldGVyLnR5cGUsIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwg
cGFyYW1ldGVyLmlzX29wdGlvbmFsKQotCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBjcHBf
dHlwZV9mb3JfdHlwZV9tZW1iZXIobWVtYmVyKToKLSAgICAgICAgcmV0dXJuIENwcEdlbmVyYXRv
ci5jcHBfdHlwZV9mb3JfdHlwZV93aXRoX25hbWUobWVtYmVyLnR5cGUsIG1lbWJlci5tZW1iZXJf
bmFtZSwgRmFsc2UpCi0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIGNwcF90eXBlX2Zvcl90
eXBlX3dpdGhfbmFtZShfdHlwZSwgdHlwZV9uYW1lLCBpc19vcHRpb25hbCk6CiAgICAgICAgIGlm
IGlzaW5zdGFuY2UoX3R5cGUsIChBcnJheVR5cGUsIE9iamVjdFR5cGUpKToKLSAgICAgICAgICAg
IHJldHVybiAnUmVmUHRyPCVzPicgJSBDcHBHZW5lcmF0b3IuY3BwX3Byb3RvY29sX3R5cGVfZm9y
X3R5cGUoX3R5cGUpCi0gICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEFsaWFzZWRUeXBlKToK
LSAgICAgICAgICAgIGJ1aWxkZXJfdHlwZSA9IENwcEdlbmVyYXRvci5jcHBfcHJvdG9jb2xfdHlw
ZV9mb3JfdHlwZShfdHlwZSkKLSAgICAgICAgICAgIGlmIGlzX29wdGlvbmFsOgotICAgICAgICAg
ICAgICAgIHJldHVybiAnY29uc3QgJXMqJyAlIGJ1aWxkZXJfdHlwZQotICAgICAgICAgICAgZWxp
ZiBfdHlwZS5hbGlhc2VkX3R5cGUucXVhbGlmaWVkX25hbWUoKSBpbiBbJ2ludGVnZXInLCAnbnVt
YmVyJ106Ci0gICAgICAgICAgICAgICAgcmV0dXJuIENwcEdlbmVyYXRvci5jcHBfbmFtZV9mb3Jf
cHJpbWl0aXZlX3R5cGUoX3R5cGUuYWxpYXNlZF90eXBlKQotICAgICAgICAgICAgZWxpZiBfdHlw
ZS5hbGlhc2VkX3R5cGUucXVhbGlmaWVkX25hbWUoKSBpbiBbJ3N0cmluZyddOgotICAgICAgICAg
ICAgICAgIHJldHVybiAnY29uc3QgJXMmJyAlIGJ1aWxkZXJfdHlwZQotICAgICAgICAgICAgZWxz
ZToKLSAgICAgICAgICAgICAgICByZXR1cm4gYnVpbGRlcl90eXBlCi0gICAgICAgIGlmIGlzaW5z
dGFuY2UoX3R5cGUsIFByaW1pdGl2ZVR5cGUpOgotICAgICAgICAgICAgY3BwX25hbWUgPSBDcHBH
ZW5lcmF0b3IuY3BwX25hbWVfZm9yX3ByaW1pdGl2ZV90eXBlKF90eXBlKQotICAgICAgICAgICAg
aWYgX3R5cGUucXVhbGlmaWVkX25hbWUoKSBpbiBbJ29iamVjdCddOgotICAgICAgICAgICAgICAg
IHJldHVybiAnUmVmUHRyPEpTT046Ok9iamVjdD4nCi0gICAgICAgICAgICBlbGlmIF90eXBlLnF1
YWxpZmllZF9uYW1lKCkgaW4gWydhbnknXToKLSAgICAgICAgICAgICAgICByZXR1cm4gJ1JlZlB0
cjxKU09OOjpWYWx1ZT4nCi0gICAgICAgICAgICBlbGlmIGlzX29wdGlvbmFsOgotICAgICAgICAg
ICAgICAgIHJldHVybiAnY29uc3QgJXMqJyAlIGNwcF9uYW1lCi0gICAgICAgICAgICBlbGlmIF90
eXBlLnF1YWxpZmllZF9uYW1lKCkgaW4gWydzdHJpbmcnXToKLSAgICAgICAgICAgICAgICByZXR1
cm4gJ2NvbnN0ICVzJicgJSBjcHBfbmFtZQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAg
ICAgICByZXR1cm4gY3BwX25hbWUKKyAgICAgICAgICAgIHJldHVybiAnUmVmPCVzPiYmJyAlIENw
cEdlbmVyYXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZShfdHlwZSkKKworICAgICAgICBp
ZiBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpID09ICdvYmplY3QnOgorICAgICAgICAgICAgcmV0dXJu
ICdSZWY8SlNPTjo6T2JqZWN0PiYmJworCisgICAgICAgIGlmIF90eXBlLnF1YWxpZmllZF9uYW1l
KCkgPT0gJ2FycmF5JzoKKyAgICAgICAgICAgIHJldHVybiAnUmVmPEpTT046OkFycmF5PiYmJwor
CisgICAgICAgIGlmIF90eXBlLnF1YWxpZmllZF9uYW1lKCkgPT0gJ2FueSc6CisgICAgICAgICAg
ICByZXR1cm4gJ1JlZjxKU09OOjpWYWx1ZT4mJicKKworICAgICAgICBpZiBfdHlwZS5xdWFsaWZp
ZWRfbmFtZSgpID09ICdzdHJpbmcnOgorICAgICAgICAgICAgcmV0dXJuICdjb25zdCAlcyYnICUg
Q3BwR2VuZXJhdG9yLmNwcF9uYW1lX2Zvcl9wcmltaXRpdmVfdHlwZShfdHlwZSkKKwogICAgICAg
ICBpZiBpc2luc3RhbmNlKF90eXBlLCBFbnVtVHlwZSk6CiAgICAgICAgICAgICBpZiBfdHlwZS5p
c19hbm9ueW1vdXM6Ci0gICAgICAgICAgICAgICAgZW51bV90eXBlX25hbWUgPSB1Y2ZpcnN0KHR5
cGVfbmFtZSkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgZW51bV90eXBlX25h
bWUgPSAnSW5zcGVjdG9yOjpQcm90b2NvbDo6JXM6OiVzJyAlIChfdHlwZS50eXBlX2RvbWFpbigp
LmRvbWFpbl9uYW1lLCBfdHlwZS5yYXdfbmFtZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiB1
Y2ZpcnN0KG5hbWUpCisgICAgICAgICAgICByZXR1cm4gJ1Byb3RvY29sOjolczo6JXMnICUgKF90
eXBlLnR5cGVfZG9tYWluKCkuZG9tYWluX25hbWUsIF90eXBlLnJhd19uYW1lKCkpCiAKLSAgICAg
ICAgICAgIGlmIGlzX29wdGlvbmFsOgotICAgICAgICAgICAgICAgIHJldHVybiAnJXMqJyAlIGVu
dW1fdHlwZV9uYW1lCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJldHVybiAn
JXMnICUgZW51bV90eXBlX25hbWUKLQotICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgY3BwX3R5
cGVfZm9yX2Zvcm1hbF9vdXRfcGFyYW1ldGVyKHBhcmFtZXRlcik6Ci0gICAgICAgIF90eXBlID0g
cGFyYW1ldGVyLnR5cGUKLQotICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBBbGlhc2VkVHlw
ZSk6Ci0gICAgICAgICAgICBfdHlwZSA9IF90eXBlLmFsaWFzZWRfdHlwZSAgIyBGYWxsIHRocm91
Z2guCi0KLSAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgKE9iamVjdFR5cGUsIEFycmF5VHlw
ZSkpOgotICAgICAgICAgICAgcmV0dXJuICdSZWZQdHI8JXM+JicgJSBDcHBHZW5lcmF0b3IuY3Bw
X3Byb3RvY29sX3R5cGVfZm9yX3R5cGUoX3R5cGUpCiAgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5
cGUsIFByaW1pdGl2ZVR5cGUpOgotICAgICAgICAgICAgY3BwX25hbWUgPSBDcHBHZW5lcmF0b3Iu
Y3BwX25hbWVfZm9yX3ByaW1pdGl2ZV90eXBlKF90eXBlKQotICAgICAgICAgICAgaWYgcGFyYW1l
dGVyLmlzX29wdGlvbmFsOgotICAgICAgICAgICAgICAgIHJldHVybiAiT3B0aW9uYWw8JXM+JiIg
JSBjcHBfbmFtZQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByZXR1cm4gJyVz
KicgJSBjcHBfbmFtZQotICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBFbnVtVHlwZSk6Ci0g
ICAgICAgICAgICBpZiBfdHlwZS5pc19hbm9ueW1vdXM6Ci0gICAgICAgICAgICAgICAgcmV0dXJu
ICclc0JhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6JXMqJyAlIChfdHlwZS50eXBlX2RvbWFpbigp
LmRvbWFpbl9uYW1lLCB1Y2ZpcnN0KHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkpCi0gICAgICAg
ICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJldHVybiAnSW5zcGVjdG9yOjpQcm90b2NvbDo6
JXM6OiVzKicgJSAoX3R5cGUudHlwZV9kb21haW4oKS5kb21haW5fbmFtZSwgX3R5cGUucmF3X25h
bWUoKSkKKyAgICAgICAgICAgIHJldHVybiBDcHBHZW5lcmF0b3IuY3BwX25hbWVfZm9yX3ByaW1p
dGl2ZV90eXBlKF90eXBlKQogCi0gICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInVua25vd24gZm9y
bWFsIG91dCBwYXJhbWV0ZXIgdHlwZS4iKQotCi0gICAgIyBGSVhNRTogdGhpcyBpcyBvbmx5IHNs
aWdodGx5IGRpZmZlcmVudCBmcm9tIG91dCBwYXJhbWV0ZXJzOyB0aGV5IGNvdWxkIGJlIHVuaWZp
ZWQuCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBjcHBfdHlwZV9mb3JfZm9ybWFsX2FzeW5j
X3BhcmFtZXRlcihwYXJhbWV0ZXIpOgotICAgICAgICBfdHlwZSA9IHBhcmFtZXRlci50eXBlCi0g
ICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEFsaWFzZWRUeXBlKToKLSAgICAgICAgICAgIF90
eXBlID0gX3R5cGUuYWxpYXNlZF90eXBlICAjIEZhbGwgdGhyb3VnaC4KLQotICAgICAgICBpZiBp
c2luc3RhbmNlKF90eXBlLCAoT2JqZWN0VHlwZSwgQXJyYXlUeXBlKSk6Ci0gICAgICAgICAgICBy
ZXR1cm4gJ1JlZlB0cjwlcz4mJicgJSBDcHBHZW5lcmF0b3IuY3BwX3Byb3RvY29sX3R5cGVfZm9y
X3R5cGUoX3R5cGUpCi0gICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIFByaW1pdGl2ZVR5cGUp
OgotICAgICAgICAgICAgY3BwX25hbWUgPSBDcHBHZW5lcmF0b3IuY3BwX25hbWVfZm9yX3ByaW1p
dGl2ZV90eXBlKF90eXBlKQotICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgot
ICAgICAgICAgICAgICAgIHJldHVybiAiT3B0aW9uYWw8JXM+JiIgJSBjcHBfbmFtZQotICAgICAg
ICAgICAgZWxpZiBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpIGluIFsnaW50ZWdlcicsICdudW1iZXIn
XToKLSAgICAgICAgICAgICAgICByZXR1cm4gQ3BwR2VuZXJhdG9yLmNwcF9uYW1lX2Zvcl9wcmlt
aXRpdmVfdHlwZShfdHlwZSkKLSAgICAgICAgICAgIGVsaWYgX3R5cGUucXVhbGlmaWVkX25hbWUo
KSBpbiBbJ3N0cmluZyddOgotICAgICAgICAgICAgICAgIHJldHVybiAnY29uc3QgJXMmJyAlIGNw
cF9uYW1lCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJldHVybiBjcHBfbmFt
ZQotICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBFbnVtVHlwZSk6Ci0gICAgICAgICAgICBp
ZiBfdHlwZS5pc19hbm9ueW1vdXM6Ci0gICAgICAgICAgICAgICAgY3BwX25hbWUgPSAnJXNCYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXI6OiVzJyAlIChfdHlwZS50eXBlX2RvbWFpbigpLmRvbWFpbl9u
YW1lLCB1Y2ZpcnN0KHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkpCi0gICAgICAgICAgICBlbHNl
OgotICAgICAgICAgICAgICAgIGNwcF9uYW1lID0gJ0luc3BlY3Rvcjo6UHJvdG9jb2w6OiVzOjol
cycgJSAoX3R5cGUudHlwZV9kb21haW4oKS5kb21haW5fbmFtZSwgX3R5cGUucmF3X25hbWUoKSkK
LQotICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgotICAgICAgICAgICAgICAg
IHJldHVybiAiT3B0aW9uYWw8JXM+IiAlIGNwcF9uYW1lCi0gICAgICAgICAgICBlbHNlOgotICAg
ICAgICAgICAgICAgIHJldHVybiBjcHBfbmFtZQotCi0gICAgICAgIHJhaXNlIFZhbHVlRXJyb3Io
IlVua25vd24gZm9ybWFsIGFzeW5jIHBhcmFtZXRlciB0eXBlLiIpCisgICAgICAgIHJhaXNlIFZh
bHVlRXJyb3IoInVua25vd24gdHlwZSIpCiAKICAgICAjIEluLXBhcmFtZXRlcnMgZG9uJ3QgdXNl
IGJ1aWxkZXIgdHlwZXMsIGJlY2F1c2UgdGhleSBjb3VsZCBiZSBwYXNzZWQKICAgICAjICJvcGVu
IHR5cGVzIiB0aGF0IGFyZSBtYW51YWxseSBjb25zdHJ1Y3RlZCBvdXQgb2YgSW5zcGVjdG9yT2Jq
ZWN0cy4KLQotICAgICMgRklYTUU6IE9ubHkgcGFyYW1ldGVycyB0aGF0IGFyZSBhY3R1YWxseSBv
cGVuIHR5cGVzIHNob3VsZCBuZWVkIG5vbi1idWlsZGVyIHBhcmFtZXRlciB0eXBlcy4KICAgICBA
c3RhdGljbWV0aG9kCi0gICAgZGVmIGNwcF90eXBlX2Zvcl9zdGFja19pbl9wYXJhbWV0ZXIocGFy
YW1ldGVyKToKLSAgICAgICAgX3R5cGUgPSBwYXJhbWV0ZXIudHlwZQorICAgIGRlZiBjcHBfdHlw
ZV9mb3JfY29tbWFuZF9wYXJhbWV0ZXIoX3R5cGUsIGlzX29wdGlvbmFsKToKICAgICAgICAgaWYg
aXNpbnN0YW5jZShfdHlwZSwgQWxpYXNlZFR5cGUpOgotICAgICAgICAgICAgX3R5cGUgPSBfdHlw
ZS5hbGlhc2VkX3R5cGUgICMgRmFsbCB0aHJvdWdoLgorICAgICAgICAgICAgX3R5cGUgPSBfdHlw
ZS5hbGlhc2VkX3R5cGUKKyAgICAgICAgICAgICMgZmFsbHRocm91Z2gKKworICAgICAgICBpZiBp
c2luc3RhbmNlKF90eXBlLCBFbnVtVHlwZSkgYW5kIF90eXBlLmlzX2Fub255bW91czoKKyAgICAg
ICAgICAgIF90eXBlID0gX3R5cGUucHJpbWl0aXZlX3R5cGUKKyAgICAgICAgICAgICMgZmFsbHRo
cm91Z2gKKworICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBPYmplY3RUeXBlKSBvciBfdHlw
ZS5xdWFsaWZpZWRfbmFtZSgpID09ICdvYmplY3QnOgorICAgICAgICAgICAgaWYgaXNfb3B0aW9u
YWw6CisgICAgICAgICAgICAgICAgcmV0dXJuICdSZWZQdHI8SlNPTjo6T2JqZWN0PiYmJworICAg
ICAgICAgICAgcmV0dXJuICdSZWY8SlNPTjo6T2JqZWN0PiYmJworCisgICAgICAgIGlmIGlzaW5z
dGFuY2UoX3R5cGUsIEFycmF5VHlwZSkgb3IgX3R5cGUucXVhbGlmaWVkX25hbWUoKSA9PSAnYXJy
YXknOgorICAgICAgICAgICAgaWYgaXNfb3B0aW9uYWw6CisgICAgICAgICAgICAgICAgcmV0dXJu
ICdSZWZQdHI8SlNPTjo6QXJyYXk+JiYnCisgICAgICAgICAgICByZXR1cm4gJ1JlZjxKU09OOjpB
cnJheT4mJicKKworICAgICAgICBpZiBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpID09ICdhbnknOgor
ICAgICAgICAgICAgaWYgaXNfb3B0aW9uYWw6CisgICAgICAgICAgICAgICAgcmV0dXJuICdSZWZQ
dHI8SlNPTjo6VmFsdWU+JiYnCisgICAgICAgICAgICByZXR1cm4gJ1JlZjxKU09OOjpWYWx1ZT4m
JicKKworICAgICAgICBpZiBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpID09ICdzdHJpbmcnOgorICAg
ICAgICAgICAgcmV0dXJuICdjb25zdCAlcyYnICUgQ3BwR2VuZXJhdG9yLmNwcF9uYW1lX2Zvcl9w
cmltaXRpdmVfdHlwZShfdHlwZSkKIAogICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBFbnVt
VHlwZSk6Ci0gICAgICAgICAgICBfdHlwZSA9IF90eXBlLnByaW1pdGl2ZV90eXBlICAjIEZhbGwg
dGhyb3VnaC4KLQotICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBPYmplY3RUeXBlKToKLSAg
ICAgICAgICAgIHJldHVybiAiUmVmUHRyPEpTT046Ok9iamVjdD4iCi0gICAgICAgIGlmIGlzaW5z
dGFuY2UoX3R5cGUsIEFycmF5VHlwZSk6Ci0gICAgICAgICAgICByZXR1cm4gIlJlZlB0cjxKU09O
OjpBcnJheT4iCi0gICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIFByaW1pdGl2ZVR5cGUpOgor
ICAgICAgICAgICAgY3BwX25hbWUgPSAnUHJvdG9jb2w6OiVzOjolcycgJSAoX3R5cGUudHlwZV9k
b21haW4oKS5kb21haW5fbmFtZSwgX3R5cGUucmF3X25hbWUoKSkKKyAgICAgICAgZWxpZiBpc2lu
c3RhbmNlKF90eXBlLCBQcmltaXRpdmVUeXBlKToKICAgICAgICAgICAgIGNwcF9uYW1lID0gQ3Bw
R2VuZXJhdG9yLmNwcF9uYW1lX2Zvcl9wcmltaXRpdmVfdHlwZShfdHlwZSkKLSAgICAgICAgICAg
IGlmIF90eXBlLnF1YWxpZmllZF9uYW1lKCkgaW4gWydhbnknLCAnb2JqZWN0J106Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuICJSZWZQdHI8JXM+IiAlIENwcEdlbmVyYXRvci5jcHBfbmFtZV9mb3Jf
cHJpbWl0aXZlX3R5cGUoX3R5cGUpCi0gICAgICAgICAgICBlbGlmIHBhcmFtZXRlci5pc19vcHRp
b25hbCBhbmQgX3R5cGUucXVhbGlmaWVkX25hbWUoKSBub3QgaW4gWydib29sZWFuJywgJ3N0cmlu
ZycsICdpbnRlZ2VyJywgJ251bWJlciddOgotICAgICAgICAgICAgICAgIHJldHVybiAiT3B0aW9u
YWw8JXM+IiAlIGNwcF9uYW1lCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJl
dHVybiBjcHBfbmFtZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJv
cigidW5rbm93biB0eXBlIikKKworICAgICAgICBpZiBpc19vcHRpb25hbDoKKyAgICAgICAgICAg
IGNwcF9uYW1lID0gJ09wdGlvbmFsPCVzPiYmJyAlIGNwcF9uYW1lCisgICAgICAgIHJldHVybiBj
cHBfbmFtZQogCiAgICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBjcHBfdHlwZV9mb3Jfc3RhY2tf
b3V0X3BhcmFtZXRlcihwYXJhbWV0ZXIpOgotICAgICAgICBfdHlwZSA9IHBhcmFtZXRlci50eXBl
CisgICAgZGVmIGNwcF90eXBlX2Zvcl9jb21tYW5kX3JldHVybl9kZWNsYXJhdGlvbihfdHlwZSwg
aXNfb3B0aW9uYWwpOgorICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBBbGlhc2VkVHlwZSk6
CisgICAgICAgICAgICBfdHlwZSA9IF90eXBlLmFsaWFzZWRfdHlwZQorICAgICAgICAgICAgIyBm
YWxsdGhyb3VnaAorCisgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKSBhbmQg
X3R5cGUuaXNfYW5vbnltb3VzOgorICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5wcmltaXRpdmVf
dHlwZQorICAgICAgICAgICAgIyBmYWxsdGhyb3VnaAorCiAgICAgICAgIGlmIGlzaW5zdGFuY2Uo
X3R5cGUsIChBcnJheVR5cGUsIE9iamVjdFR5cGUpKToKLSAgICAgICAgICAgIHJldHVybiAnUmVm
UHRyPCVzPicgJSBDcHBHZW5lcmF0b3IuY3BwX3Byb3RvY29sX3R5cGVfZm9yX3R5cGUoX3R5cGUp
Ci0gICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEFsaWFzZWRUeXBlKToKLSAgICAgICAgICAg
IGJ1aWxkZXJfdHlwZSA9IENwcEdlbmVyYXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZShf
dHlwZSkKLSAgICAgICAgICAgIGlmIHBhcmFtZXRlci5pc19vcHRpb25hbDoKLSAgICAgICAgICAg
ICAgICByZXR1cm4gIk9wdGlvbmFsPCVzPiIgJSBidWlsZGVyX3R5cGUKLSAgICAgICAgICAgIHJl
dHVybiAnJXMnICUgYnVpbGRlcl90eXBlCi0gICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIFBy
aW1pdGl2ZVR5cGUpOgotICAgICAgICAgICAgY3BwX25hbWUgPSBDcHBHZW5lcmF0b3IuY3BwX25h
bWVfZm9yX3ByaW1pdGl2ZV90eXBlKF90eXBlKQotICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlz
X29wdGlvbmFsOgotICAgICAgICAgICAgICAgIHJldHVybiAiT3B0aW9uYWw8JXM+IiAlIGNwcF9u
YW1lCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJldHVybiBjcHBfbmFtZQor
ICAgICAgICAgICAgaWYgaXNfb3B0aW9uYWw6CisgICAgICAgICAgICAgICAgcmV0dXJuICdSZWZQ
dHI8JXM+JyAlIENwcEdlbmVyYXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZShfdHlwZSkK
KyAgICAgICAgICAgIHJldHVybiAnUmVmPCVzPicgJSBDcHBHZW5lcmF0b3IuY3BwX3Byb3RvY29s
X3R5cGVfZm9yX3R5cGUoX3R5cGUpCisKKyAgICAgICAgaWYgX3R5cGUucXVhbGlmaWVkX25hbWUo
KSA9PSAnb2JqZWN0JzoKKyAgICAgICAgICAgIGlmIGlzX29wdGlvbmFsOgorICAgICAgICAgICAg
ICAgIHJldHVybiAnUmVmUHRyPEpTT046Ok9iamVjdD4nCisgICAgICAgICAgICByZXR1cm4gJ1Jl
ZjxKU09OOjpPYmplY3Q+JworCisgICAgICAgIGlmIF90eXBlLnF1YWxpZmllZF9uYW1lKCkgPT0g
J2FycmF5JzoKKyAgICAgICAgICAgIGlmIGlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAgIHJl
dHVybiAnUmVmUHRyPEpTT046OkFycmF5PicKKyAgICAgICAgICAgIHJldHVybiAnUmVmPEpTT046
OkFycmF5PicKKworICAgICAgICBpZiBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpID09ICdhbnknOgor
ICAgICAgICAgICAgaWYgaXNfb3B0aW9uYWw6CisgICAgICAgICAgICAgICAgcmV0dXJuICdSZWZQ
dHI8SlNPTjo6VmFsdWU+JworICAgICAgICAgICAgcmV0dXJuICdSZWY8SlNPTjo6VmFsdWU+Jwor
CisgICAgICAgIGlmIF90eXBlLnF1YWxpZmllZF9uYW1lKCkgPT0gJ3N0cmluZyc6CisgICAgICAg
ICAgICByZXR1cm4gQ3BwR2VuZXJhdG9yLmNwcF9uYW1lX2Zvcl9wcmltaXRpdmVfdHlwZShfdHlw
ZSkKKwogICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBFbnVtVHlwZSk6Ci0gICAgICAgICAg
ICBpZiBfdHlwZS5pc19hbm9ueW1vdXM6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICclc0JhY2tl
bmREaXNwYXRjaGVySGFuZGxlcjo6JXMnICUgKF90eXBlLnR5cGVfZG9tYWluKCkuZG9tYWluX25h
bWUsIHVjZmlyc3QocGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKSkKLSAgICAgICAgICAgIGVsc2U6
Ci0gICAgICAgICAgICAgICAgcmV0dXJuICdJbnNwZWN0b3I6OlByb3RvY29sOjolczo6JXMnICUg
KF90eXBlLnR5cGVfZG9tYWluKCkuZG9tYWluX25hbWUsIF90eXBlLnJhd19uYW1lKCkpCisgICAg
ICAgICAgICBjcHBfbmFtZSA9ICdQcm90b2NvbDo6JXM6OiVzJyAlIChfdHlwZS50eXBlX2RvbWFp
bigpLmRvbWFpbl9uYW1lLCBfdHlwZS5yYXdfbmFtZSgpKQorICAgICAgICBlbGlmIGlzaW5zdGFu
Y2UoX3R5cGUsIFByaW1pdGl2ZVR5cGUpOgorICAgICAgICAgICAgY3BwX25hbWUgPSBDcHBHZW5l
cmF0b3IuY3BwX25hbWVfZm9yX3ByaW1pdGl2ZV90eXBlKF90eXBlKQorICAgICAgICBlbHNlOgor
ICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigidW5rbm93biB0eXBlIikKKworICAgICAgICBp
ZiBpc19vcHRpb25hbDoKKyAgICAgICAgICAgIGNwcF9uYW1lID0gJ09wdGlvbmFsPCVzPicgJSBj
cHBfbmFtZQorICAgICAgICByZXR1cm4gY3BwX25hbWUKIAogICAgIEBzdGF0aWNtZXRob2QKLSAg
ICBkZWYgY3BwX2Fzc2VydGlvbl9tZXRob2RfZm9yX3R5cGVfbWVtYmVyKHR5cGVfbWVtYmVyLCBv
YmplY3RfZGVjbGFyYXRpb24pOgorICAgIGRlZiBjcHBfdHlwZV9mb3JfY29tbWFuZF9yZXR1cm5f
YXJndW1lbnQoX3R5cGUsIGlzX29wdGlvbmFsKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlw
ZSwgQWxpYXNlZFR5cGUpOgorICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5hbGlhc2VkX3R5cGUK
KyAgICAgICAgICAgICMgZmFsbHRocm91ZwogCi0gICAgICAgIGRlZiBhc3NlcnRpb25fbWV0aG9k
X2Zvcl90eXBlKF90eXBlKToKLSAgICAgICAgICAgIHJldHVybiAnQmluZGluZ1RyYWl0czwlcz46
OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlJyAlIENwcEdlbmVyYXRvci5jcHBfcHJvdG9jb2xf
dHlwZV9mb3JfdHlwZShfdHlwZSkKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgRW51bVR5
cGUpIGFuZCBfdHlwZS5pc19hbm9ueW1vdXM6CisgICAgICAgICAgICBfdHlwZSA9IF90eXBlLnBy
aW1pdGl2ZV90eXBlCisgICAgICAgICAgICAjIGZhbGx0aHJvdWdoCiAKLSAgICAgICAgaWYgaXNp
bnN0YW5jZSh0eXBlX21lbWJlci50eXBlLCBBbGlhc2VkVHlwZSk6Ci0gICAgICAgICAgICByZXR1
cm4gYXNzZXJ0aW9uX21ldGhvZF9mb3JfdHlwZSh0eXBlX21lbWJlci50eXBlLmFsaWFzZWRfdHlw
ZSkKLSAgICAgICAgaWYgaXNpbnN0YW5jZSh0eXBlX21lbWJlci50eXBlLCBFbnVtVHlwZSkgYW5k
IHR5cGVfbWVtYmVyLnR5cGUuaXNfYW5vbnltb3VzOgotICAgICAgICAgICAgcmV0dXJuICdCaW5k
aW5nVHJhaXRzPCVzPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUnICUgQ3BwR2VuZXJhdG9y
LmNwcF9wcm90b2NvbF90eXBlX2Zvcl90eXBlX21lbWJlcih0eXBlX21lbWJlciwgb2JqZWN0X2Rl
Y2xhcmF0aW9uKQorICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCAoQXJyYXlUeXBlLCBPYmpl
Y3RUeXBlKSk6CisgICAgICAgICAgICBpZiBpc19vcHRpb25hbDoKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gJ1JlZlB0cjwlcz4mJicgJSBDcHBHZW5lcmF0b3IuY3BwX3Byb3RvY29sX3R5cGVfZm9y
X3R5cGUoX3R5cGUpCisgICAgICAgICAgICByZXR1cm4gJ1JlZjwlcz4mJicgJSBDcHBHZW5lcmF0
b3IuY3BwX3Byb3RvY29sX3R5cGVfZm9yX3R5cGUoX3R5cGUpCiAKLSAgICAgICAgcmV0dXJuIGFz
c2VydGlvbl9tZXRob2RfZm9yX3R5cGUodHlwZV9tZW1iZXIudHlwZSkKKyAgICAgICAgaWYgX3R5
cGUucXVhbGlmaWVkX25hbWUoKSA9PSAnb2JqZWN0JzoKKyAgICAgICAgICAgIGlmIGlzX29wdGlv
bmFsOgorICAgICAgICAgICAgICAgIHJldHVybiAnUmVmUHRyPEpTT046Ok9iamVjdD4mJicKKyAg
ICAgICAgICAgIHJldHVybiAnUmVmPEpTT046Ok9iamVjdD4mJicKKworICAgICAgICBpZiBfdHlw
ZS5xdWFsaWZpZWRfbmFtZSgpID09ICdhcnJheSc6CisgICAgICAgICAgICBpZiBpc19vcHRpb25h
bDoKKyAgICAgICAgICAgICAgICByZXR1cm4gJ1JlZlB0cjxKU09OOjpBcnJheT4mJicKKyAgICAg
ICAgICAgIHJldHVybiAnUmVmPEpTT046OkFycmF5PiYmJworCisgICAgICAgIGlmIF90eXBlLnF1
YWxpZmllZF9uYW1lKCkgPT0gJ2FueSc6CisgICAgICAgICAgICBpZiBpc19vcHRpb25hbDoKKyAg
ICAgICAgICAgICAgICByZXR1cm4gJ1JlZlB0cjxKU09OOjpWYWx1ZT4mJicKKyAgICAgICAgICAg
IHJldHVybiAnUmVmPEpTT046OlZhbHVlPiYmJworCisgICAgICAgIGlmIF90eXBlLnF1YWxpZmll
ZF9uYW1lKCkgPT0gJ3N0cmluZyc6CisgICAgICAgICAgICByZXR1cm4gJ2NvbnN0ICVzJicgJSBD
cHBHZW5lcmF0b3IuY3BwX25hbWVfZm9yX3ByaW1pdGl2ZV90eXBlKF90eXBlKQorCisgICAgICAg
IGlmIGlzaW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKToKKyAgICAgICAgICAgIGNwcF9uYW1lID0g
J1Byb3RvY29sOjolczo6JXMnICUgKF90eXBlLnR5cGVfZG9tYWluKCkuZG9tYWluX25hbWUsIF90
eXBlLnJhd19uYW1lKCkpCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShfdHlwZSwgUHJpbWl0aXZl
VHlwZSk6CisgICAgICAgICAgICBjcHBfbmFtZSA9IENwcEdlbmVyYXRvci5jcHBfbmFtZV9mb3Jf
cHJpbWl0aXZlX3R5cGUoX3R5cGUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBW
YWx1ZUVycm9yKCJ1bmtub3duIHR5cGUiKQorCisgICAgICAgIGlmIGlzX29wdGlvbmFsOgorICAg
ICAgICAgICAgY3BwX25hbWUgPSAnT3B0aW9uYWw8JXM+JiYnICUgY3BwX25hbWUKKyAgICAgICAg
cmV0dXJuIGNwcF9uYW1lCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGNwcF90eXBlX2Zv
cl9ldmVudF9wYXJhbWV0ZXIoX3R5cGUsIGlzX29wdGlvbmFsKToKKyAgICAgICAgaWYgaXNpbnN0
YW5jZShfdHlwZSwgQWxpYXNlZFR5cGUpOgorICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5hbGlh
c2VkX3R5cGUKKyAgICAgICAgICAgICMgZmFsbHRocm91Z2gKKworICAgICAgICBpZiBpc2luc3Rh
bmNlKF90eXBlLCBFbnVtVHlwZSkgYW5kIF90eXBlLmlzX2Fub255bW91czoKKyAgICAgICAgICAg
IF90eXBlID0gX3R5cGUucHJpbWl0aXZlX3R5cGUKKyAgICAgICAgICAgICMgZmFsbHRocm91Z2gK
KworICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCAoQXJyYXlUeXBlLCBPYmplY3RUeXBlKSk6
CisgICAgICAgICAgICBpZiBpc19vcHRpb25hbDoKKyAgICAgICAgICAgICAgICByZXR1cm4gJ1Jl
ZlB0cjwlcz4mJicgJSBDcHBHZW5lcmF0b3IuY3BwX3Byb3RvY29sX3R5cGVfZm9yX3R5cGUoX3R5
cGUpCisgICAgICAgICAgICByZXR1cm4gJ1JlZjwlcz4mJicgJSBDcHBHZW5lcmF0b3IuY3BwX3By
b3RvY29sX3R5cGVfZm9yX3R5cGUoX3R5cGUpCisKKyAgICAgICAgaWYgX3R5cGUucXVhbGlmaWVk
X25hbWUoKSA9PSAnb2JqZWN0JzoKKyAgICAgICAgICAgIGlmIGlzX29wdGlvbmFsOgorICAgICAg
ICAgICAgICAgIHJldHVybiAnUmVmUHRyPEpTT046Ok9iamVjdD4mJicKKyAgICAgICAgICAgIHJl
dHVybiAnUmVmPEpTT046Ok9iamVjdD4mJicKKworICAgICAgICBpZiBfdHlwZS5xdWFsaWZpZWRf
bmFtZSgpID09ICdhcnJheSc6CisgICAgICAgICAgICBpZiBpc19vcHRpb25hbDoKKyAgICAgICAg
ICAgICAgICByZXR1cm4gJ1JlZlB0cjxKU09OOjpBcnJheT4mJicKKyAgICAgICAgICAgIHJldHVy
biAnUmVmPEpTT046OkFycmF5PiYmJworCisgICAgICAgIGlmIF90eXBlLnF1YWxpZmllZF9uYW1l
KCkgPT0gJ2FueSc6CisgICAgICAgICAgICBpZiBpc19vcHRpb25hbDoKKyAgICAgICAgICAgICAg
ICByZXR1cm4gJ1JlZlB0cjxKU09OOjpWYWx1ZT4mJicKKyAgICAgICAgICAgIHJldHVybiAnUmVm
PEpTT046OlZhbHVlPiYmJworCisgICAgICAgIGlmIF90eXBlLnF1YWxpZmllZF9uYW1lKCkgPT0g
J3N0cmluZyc6CisgICAgICAgICAgICByZXR1cm4gJ2NvbnN0ICVzJicgJSBDcHBHZW5lcmF0b3Iu
Y3BwX25hbWVfZm9yX3ByaW1pdGl2ZV90eXBlKF90eXBlKQorCisgICAgICAgIGlmIGlzaW5zdGFu
Y2UoX3R5cGUsIEVudW1UeXBlKToKKyAgICAgICAgICAgIGNwcF9uYW1lID0gJ1Byb3RvY29sOjol
czo6JXMnICUgKF90eXBlLnR5cGVfZG9tYWluKCkuZG9tYWluX25hbWUsIF90eXBlLnJhd19uYW1l
KCkpCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShfdHlwZSwgUHJpbWl0aXZlVHlwZSk6CisgICAg
ICAgICAgICBjcHBfbmFtZSA9IENwcEdlbmVyYXRvci5jcHBfbmFtZV9mb3JfcHJpbWl0aXZlX3R5
cGUoX3R5cGUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJ1
bmtub3duIHR5cGUiKQorCisgICAgICAgIGlmIGlzX29wdGlvbmFsOgorICAgICAgICAgICAgY3Bw
X25hbWUgPSAnT3B0aW9uYWw8JXM+JiYnICUgY3BwX25hbWUKKyAgICAgICAgcmV0dXJuIGNwcF9u
YW1lCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGNwcF90eXBlX2Zvcl9lbnVtKGVudW1f
dHlwZSwgbmFtZSk6CisgICAgICAgIGlmIGVudW1fdHlwZS5pc19hbm9ueW1vdXM6CisgICAgICAg
ICAgICByZXR1cm4gJ1Byb3RvY29sOjolczo6JXMnICUgKGVudW1fdHlwZS50eXBlX2RvbWFpbigp
LmRvbWFpbl9uYW1lLCB1Y2ZpcnN0KG5hbWUpKQorICAgICAgICByZXR1cm4gJ1Byb3RvY29sOjol
czo6JXMnICUgKGVudW1fdHlwZS50eXBlX2RvbWFpbigpLmRvbWFpbl9uYW1lLCBlbnVtX3R5cGUu
cmF3X25hbWUoKSkKIAogICAgIEBzdGF0aWNtZXRob2QKICAgICBkZWYgY3BwX25hbWVfZm9yX3By
aW1pdGl2ZV90eXBlKF90eXBlKToKICAgICAgICAgcmV0dXJuIF9QUklNSVRJVkVfVE9fQ1BQX05B
TUVfTUFQLmdldChfdHlwZS5yYXdfbmFtZSgpKQogCi0gICAgIyBEZWNpZGUgd2hldGhlciBjZXJ0
YWluIGhlbHBlcnMgYXJlIG5lY2Vzc2FyeSBpbiBhIHNpdHVhdGlvbi4KICAgICBAc3RhdGljbWV0
aG9kCi0gICAgZGVmIHNob3VsZF91c2Vfd3JhcHBlcl9mb3JfcmV0dXJuX3R5cGUoX3R5cGUpOgot
ICAgICAgICByZXR1cm4gbm90IGlzaW5zdGFuY2UoX3R5cGUsIChBcnJheVR5cGUsIE9iamVjdFR5
cGUpKQorICAgIGRlZiBzaG91bGRfbW92ZV9hcmd1bWVudChfdHlwZSwgaXNfb3B0aW9uYWwpOgor
ICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBBbGlhc2VkVHlwZSk6CisgICAgICAgICAgICBf
dHlwZSA9IF90eXBlLmFsaWFzZWRfdHlwZQorICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBF
bnVtVHlwZSk6CisgICAgICAgICAgICBfdHlwZSA9IF90eXBlLnByaW1pdGl2ZV90eXBlCisKKyAg
ICAgICAgaWYgX3R5cGUucmF3X25hbWUoKSA9PSAnc3RyaW5nJzoKKyAgICAgICAgICAgIHJldHVy
biBGYWxzZQorICAgICAgICByZXR1cm4gaXNfb3B0aW9uYWwgPT0gKF90eXBlLnJhd19uYW1lKCkg
aW4gWydib29sZWFuJywgJ2ludGVnZXInLCAnbnVtYmVyJ10pCiAKICAgICBAc3RhdGljbWV0aG9k
Ci0gICAgZGVmIHNob3VsZF91c2VfcmVmZXJlbmNlc19mb3JfdHlwZShfdHlwZSk6Ci0gICAgICAg
IHJldHVybiBpc2luc3RhbmNlKF90eXBlLCAoQXJyYXlUeXBlLCBPYmplY3RUeXBlKSkgb3IgKGlz
aW5zdGFuY2UoX3R5cGUsIChQcmltaXRpdmVUeXBlKSkgYW5kIF90eXBlLnF1YWxpZmllZF9uYW1l
KCkgaW4gWyJhbnkiLCAib2JqZWN0Il0pCisgICAgZGVmIHNob3VsZF9yZWxlYXNlX2FyZ3VtZW50
KF90eXBlLCBpc19vcHRpb25hbCk6CisgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEFsaWFz
ZWRUeXBlKToKKyAgICAgICAgICAgIF90eXBlID0gX3R5cGUuYWxpYXNlZF90eXBlCisgICAgICAg
IGlmIGlzaW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKToKKyAgICAgICAgICAgIF90eXBlID0gX3R5
cGUucHJpbWl0aXZlX3R5cGUKKworICAgICAgICBpZiBfdHlwZS5yYXdfbmFtZSgpID09ICdzdHJp
bmcnOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGlmIF90eXBlLnJhd19uYW1l
KCkgaW4gWydib29sZWFuJywgJ2ludGVnZXInLCAnbnVtYmVyJ106CisgICAgICAgICAgICByZXR1
cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIGlzX29wdGlvbmFsCiAKICAgICBAc3RhdGljbWV0aG9k
Ci0gICAgZGVmIHNob3VsZF9wYXNzX2J5X2NvcHlfZm9yX3JldHVybl90eXBlKF90eXBlKToKLSAg
ICAgICAgcmV0dXJuIGlzaW5zdGFuY2UoX3R5cGUsIChBcnJheVR5cGUsIE9iamVjdFR5cGUpKSBv
ciAoaXNpbnN0YW5jZShfdHlwZSwgKFByaW1pdGl2ZVR5cGUpKSBhbmQgX3R5cGUucXVhbGlmaWVk
X25hbWUoKSA9PSAib2JqZWN0IikKKyAgICBkZWYgc2hvdWxkX2RlcmVmZXJlbmNlX2FyZ3VtZW50
KF90eXBlLCBpc19vcHRpb25hbCk6CisgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEFsaWFz
ZWRUeXBlKToKKyAgICAgICAgICAgIF90eXBlID0gX3R5cGUuYWxpYXNlZF90eXBlCisgICAgICAg
IGlmIGlzaW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKToKKyAgICAgICAgICAgIF90eXBlID0gX3R5
cGUucHJpbWl0aXZlX3R5cGUKKworICAgICAgICBpZiBfdHlwZS5yYXdfbmFtZSgpID09ICdzdHJp
bmcnOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGlmIF90eXBlLnJhd19uYW1l
KCkgbm90IGluIFsnYm9vbGVhbicsICdpbnRlZ2VyJywgJ251bWJlciddOgorICAgICAgICAgICAg
cmV0dXJuIEZhbHNlCisgICAgICAgIHJldHVybiBpc19vcHRpb25hbApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vY3BwX2dlbmVyYXRv
cl90ZW1wbGF0ZXMucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Y29kZWdlbi9jcHBfZ2VuZXJhdG9yX3RlbXBsYXRlcy5weQppbmRleCAwODJiZTMzZjE1ZGUyNWJl
ODg5NTdjYjE0MjI5MzUyMDM2ZWUyMmNmLi43Yzg0ODU3ODZlOWNkY2YxNDJlOTM5NjJhZTJjZjRk
MTA3MWUxZDg3IDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvY29kZWdlbi9jcHBfZ2VuZXJhdG9yX3RlbXBsYXRlcy5weQorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9jcHBfZ2VuZXJhdG9yX3RlbXBs
YXRlcy5weQpAQCAtOTUsNyArOTUsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgIiIiJHtjbGFzc0FuZEV4
cG9ydE1hY3JvfSAke2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMg
U3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIgewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8
JHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUoQmFja2VuZERpc3BhdGNoZXIm
LCAke2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7Ci0gICAgdm9pZCBkaXNw
YXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmpl
Y3Q+JiYgbWVzc2FnZSkgZmluYWw7CisgICAgdm9pZCBkaXNwYXRjaChsb25nIHByb3RvY29sX2Nh
bGxJZCwgY29uc3QgU3RyaW5nJiBwcm90b2NvbF9tZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYg
cHJvdG9jb2xfbWVzc2FnZSkgZmluYWw7CiAke2NvbW1hbmREZWNsYXJhdGlvbnN9CiBwcml2YXRl
OgogICAgICR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYs
ICR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKQEAgLTExNCwzMiArMTE0
LDMwIEBAIHByaXZhdGU6CiAgICAgIiIiICAgICR7Y2xhc3NBbmRFeHBvcnRNYWNyb30gJHtjYWxs
YmFja05hbWV9IDogcHVibGljIEJhY2tlbmREaXNwYXRjaGVyOjpDYWxsYmFja0Jhc2UgewogICAg
IHB1YmxpYzoKICAgICAgICAgJHtjYWxsYmFja05hbWV9KFJlZjxCYWNrZW5kRGlzcGF0Y2hlcj4m
JiwgaW50IGlkKTsKLSAgICAgICAgdm9pZCBzZW5kU3VjY2Vzcygke291dFBhcmFtZXRlcnN9KTsK
KyAgICAgICAgdm9pZCBzZW5kU3VjY2Vzcygke3JldHVybnN9KTsKICAgICB9OwotICAgIHZpcnR1
YWwgdm9pZCAke2NvbW1hbmROYW1lfSgke2luUGFyYW1ldGVyc30pID0gMDsiIiIpCisgICAgdmly
dHVhbCB2b2lkICR7Y29tbWFuZE5hbWV9KCR7cGFyYW1ldGVyc30pID0gMDsiIiIpCiAKICAgICBC
YWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uU21hbGxTd2l0Y2ggPSAoCi0gICAgIiIidm9p
ZCAke2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElk
LCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKQorICAg
ICIiInZvaWQgJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHBy
b3RvY29sX2NhbGxJZCwgY29uc3QgU3RyaW5nJiBwcm90b2NvbF9tZXRob2QsIFJlZjxKU09OOjpP
YmplY3Q+JiYgcHJvdG9jb2xfbWVzc2FnZSkKIHsKICAgICBSZWY8JHtkb21haW5OYW1lfUJhY2tl
bmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKIAotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+
IHBhcmFtZXRlcnM7Ci0gICAgbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3MsIHBhcmFtZXRl
cnMpOworICAgIGF1dG8gcHJvdG9jb2xfcGFyYW1ldGVycyA9IHByb3RvY29sX21lc3NhZ2UtPmdl
dE9iamVjdCgicGFyYW1zIl9zKTsKIAogJHtkaXNwYXRjaENhc2VzfQogCi0gICAgbV9iYWNrZW5k
RGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9k
Tm90Rm91bmQsICInJHtkb21haW5OYW1lfS4iICsgbWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIp
OworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERp
c3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJyR7ZG9tYWluTmFtZX0uIiArIHByb3RvY29sX21l
dGhvZCArICInIHdhcyBub3QgZm91bmQiKTsKIH0iIiIpCiAKICAgICBCYWNrZW5kRGlzcGF0Y2hl
ckltcGxlbWVudGF0aW9uTGFyZ2VTd2l0Y2ggPSAoCi0iIiJ2b2lkICR7ZG9tYWluTmFtZX1CYWNr
ZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0
aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpCisiIiJ2b2lkICR7ZG9tYWluTmFtZX1C
YWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyBwcm90b2NvbF9jYWxsSWQsIGNvbnN0IFN0
cmluZyYgcHJvdG9jb2xfbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX21lc3Nh
Z2UpCiB7CiAgICAgUmVmPCR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgq
dGhpcyk7CiAKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzOwotICAgIG1lc3Nh
Z2UtPmdldE9iamVjdCgicGFyYW1zIl9zLCBwYXJhbWV0ZXJzKTsKKyAgICBhdXRvIHByb3RvY29s
X3BhcmFtZXRlcnMgPSBwcm90b2NvbF9tZXNzYWdlLT5nZXRPYmplY3QoInBhcmFtcyJfcyk7CiAK
LSAgICB1c2luZyBDYWxsSGFuZGxlciA9IHZvaWQgKCR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0
Y2hlcjo6KikobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSk7
CisgICAgdXNpbmcgQ2FsbEhhbmRsZXIgPSB2b2lkICgke2RvbWFpbk5hbWV9QmFja2VuZERpc3Bh
dGNoZXI6OiopKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBy
b3RvY29sX21lc3NhZ2UpOwogICAgIHVzaW5nIERpc3BhdGNoTWFwID0gSGFzaE1hcDxTdHJpbmcs
IENhbGxIYW5kbGVyPjsKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8RGlzcGF0Y2hNYXA+IGRp
c3BhdGNoTWFwOwogICAgIGlmIChkaXNwYXRjaE1hcC5nZXQoKS5pc0VtcHR5KCkpIHsKQEAgLTE1
NCwxMyArMTUyLDEzIEBAICR7ZGlzcGF0Y2hDYXNlc30KICAgICAgICAgICAgIGRpc3BhdGNoTWFw
LmdldCgpLmFkZChjb21tYW5kc1tpXS5uYW1lLCBjb21tYW5kc1tpXS5oYW5kbGVyKTsKICAgICB9
CiAKLSAgICBhdXRvIGZpbmRSZXN1bHQgPSBkaXNwYXRjaE1hcC5nZXQoKS5maW5kKG1ldGhvZCk7
CisgICAgYXV0byBmaW5kUmVzdWx0ID0gZGlzcGF0Y2hNYXAuZ2V0KCkuZmluZChwcm90b2NvbF9t
ZXRob2QpOwogICAgIGlmIChmaW5kUmVzdWx0ID09IGRpc3BhdGNoTWFwLmdldCgpLmVuZCgpKSB7
Ci0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2Vu
ZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJyR7ZG9tYWluTmFtZX0uIiArIG1ldGhvZCAr
ICInIHdhcyBub3QgZm91bmQiKTsKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0
UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInJHtkb21h
aW5OYW1lfS4iICsgcHJvdG9jb2xfbWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgKCgqdGhpcykuKmZpbmRSZXN1bHQtPnZhbHVlKShyZXF1
ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykpOworICAgICgoKnRoaXMpLipmaW5kUmVzdWx0LT52
YWx1ZSkocHJvdG9jb2xfY2FsbElkLCBXVEZNb3ZlKHByb3RvY29sX3BhcmFtZXRlcnMpKTsKIH0i
IiIpCiAKICAgICBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uRG9tYWluQ29uc3RydWN0
b3IgPSAoCkBAIC0xNzcsNyArMTc1LDcgQEAgJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVy
Ojoke2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXIKIH0iIiIp
CiAKICAgICBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uUHJlcGFyZUNvbW1hbmRBcmd1
bWVudHMgPSAoCi0iIiIke2luUGFyYW1ldGVyRGVjbGFyYXRpb25zfQorIiIiJHtwYXJhbWV0ZXJE
ZWNsYXJhdGlvbnN9CiAgICAgaWYgKG1fYmFja2VuZERpc3BhdGNoZXItPmhhc1Byb3RvY29sRXJy
b3JzKCkpIHsKICAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJv
cihCYWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFtcywgIlNvbWUgYXJndW1lbnRzIG9mIG1l
dGhvZCBcJyR7ZG9tYWluTmFtZX0uJHtjb21tYW5kTmFtZX1cJyBjYW4ndCBiZSBwcm9jZXNzZWQi
X3MpOwogICAgICAgICByZXR1cm47CkBAIC0xODcsMTEgKzE4NSwxMSBAQCAke2RvbWFpbk5hbWV9
QmFja2VuZERpc3BhdGNoZXI6OiR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5k
RGlzcGF0Y2hlcgogICAgIEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25Bc3luY0NvbW1h
bmQgPSAoCiAiIiIke2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjoke2NhbGxi
YWNrTmFtZX06OiR7Y2FsbGJhY2tOYW1lfShSZWY8QmFja2VuZERpc3BhdGNoZXI+JiYgYmFja2Vu
ZERpc3BhdGNoZXIsIGludCBpZCkgOiBCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlKFdU
Rk1vdmUoYmFja2VuZERpc3BhdGNoZXIpLCBpZCkgeyB9CiAKLXZvaWQgJHtkb21haW5OYW1lfUJh
Y2tlbmREaXNwYXRjaGVySGFuZGxlcjo6JHtjYWxsYmFja05hbWV9OjpzZW5kU3VjY2Vzcygke2Zv
cm1hbFBhcmFtZXRlcnN9KQordm9pZCAke2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyOjoke2NhbGxiYWNrTmFtZX06OnNlbmRTdWNjZXNzKCR7Y2FsbGJhY2tQYXJhbWV0ZXJzfSkK
IHsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3Jl
YXRlKCk7Ci0ke291dFBhcmFtZXRlckFzc2lnbm1lbnRzfQotICAgIENhbGxiYWNrQmFzZTo6c2Vu
ZFN1Y2Nlc3MoV1RGTW92ZShqc29uTWVzc2FnZSkpOworICAgIGF1dG8gcHJvdG9jb2xfanNvbk1l
c3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworJHtyZXR1cm5Bc3NpZ25tZW50c30KKyAg
ICBDYWxsYmFja0Jhc2U6OnNlbmRTdWNjZXNzKFdURk1vdmUocHJvdG9jb2xfanNvbk1lc3NhZ2Up
KTsKIH0iIiIpCiAKICAgICBGcm9udGVuZERpc3BhdGNoZXJEb21haW5EaXNwYXRjaGVyRGVjbGFy
YXRpb24gPSAoCkBAIC0yNDYsMTMgKzI0NCwxMSBAQCAke2NvbnN0cnVjdG9yRXhhbXBsZX0KICAg
ICB9IiIiKQogCiAgICAgUHJvdG9jb2xPYmplY3RSdW50aW1lQ2FzdCA9ICgKLSIiIlJlZlB0cjwk
e29iamVjdFR5cGV9PiBCaW5kaW5nVHJhaXRzPCR7b2JqZWN0VHlwZX0+OjpydW50aW1lQ2FzdChS
ZWZQdHI8SlNPTjo6VmFsdWU+JiYgdmFsdWUpCisiIiJSZWY8JHtvYmplY3RUeXBlfT4gQmluZGlu
Z1RyYWl0czwke29iamVjdFR5cGV9Pjo6cnVudGltZUNhc3QoUmVmPEpTT046OlZhbHVlPiYmIHZh
bHVlKQogewotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHJlc3VsdDsKLSAgICBib29sIGNhc3RT
dWNjZWVkZWQgPSB2YWx1ZS0+YXNPYmplY3QocmVzdWx0KTsKLSAgICBBU1NFUlRfVU5VU0VEKGNh
c3RTdWNjZWVkZWQsIGNhc3RTdWNjZWVkZWQpOworICAgIGF1dG8gcmVzdWx0ID0gdmFsdWUtPmFz
T2JqZWN0KCk7CiAgICAgQmluZGluZ1RyYWl0czwke29iamVjdFR5cGV9Pjo6YXNzZXJ0VmFsdWVI
YXNFeHBlY3RlZFR5cGUocmVzdWx0LmdldCgpKTsKICAgICBDT01QSUxFX0FTU0VSVChzaXplb2Yo
JHtvYmplY3RUeXBlfSkgPT0gc2l6ZW9mKEpTT046Ok9iamVjdEJhc2UpLCB0eXBlX2Nhc3RfcHJv
YmxlbSk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PCR7b2JqZWN0VHlwZX0qPihzdGF0aWNfY2Fz
dDxKU09OOjpPYmplY3RCYXNlKj4ocmVzdWx0LmdldCgpKSk7CisgICAgcmV0dXJuIHN0YXRpY19y
ZWZlcmVuY2VfY2FzdDwke29iamVjdFR5cGV9PihzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SlNPTjo6
T2JqZWN0QmFzZT4ocmVzdWx0LnJlbGVhc2VOb25OdWxsKCkpKTsKIH0KICIiIikKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVy
YXRlX2NwcF9hbHRlcm5hdGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weSBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9hbHRl
cm5hdGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weQppbmRleCBlMWE2NjFiYTM3OWNkZWE0
MDY0YzZmNzdjNGVmY2IxMTYyYWNlZmMwLi5iOWM2NjE3NDkyMjQ0ZDAwZTBhNzQ1ZDc5NGJhYjY3
MTAyZTc0NGM1IDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfYWx0ZXJuYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9o
ZWFkZXIucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2Nv
ZGVnZW4vZ2VuZXJhdGVfY3BwX2FsdGVybmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5
CkBAIC0zMyw5ICszMywxMSBAQCBmcm9tIHN0cmluZyBpbXBvcnQgVGVtcGxhdGUKIHRyeToKICAg
ICBmcm9tIC5jcHBfZ2VuZXJhdG9yIGltcG9ydCBDcHBHZW5lcmF0b3IKICAgICBmcm9tIC5jcHBf
Z2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgQ3BwR2VuZXJhdG9yVGVtcGxhdGVzIGFzIENwcFRl
bXBsYXRlcworICAgIGZyb20gLm1vZGVscyBpbXBvcnQgRW51bVR5cGUsIEFsaWFzZWRUeXBlCiBl
eGNlcHQgVmFsdWVFcnJvcjoKICAgICBmcm9tIGNwcF9nZW5lcmF0b3IgaW1wb3J0IENwcEdlbmVy
YXRvcgogICAgIGZyb20gY3BwX2dlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IENwcEdlbmVyYXRv
clRlbXBsYXRlcyBhcyBDcHBUZW1wbGF0ZXMKKyAgICBmcm9tIG1vZGVscyBpbXBvcnQgRW51bVR5
cGUsIEFsaWFzZWRUeXBlCiAKIGxvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQogCkBA
IC02NSw3ICs2Nyw3IEBAIGNsYXNzIENwcEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVySGVhZGVy
R2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgZGVmIF9nZW5lcmF0ZV9zZWNvbmRhcnlfaGVh
ZGVyX2luY2x1ZGVzKHNlbGYpOgogICAgICAgICB0YXJnZXRfZnJhbWV3b3JrX25hbWUgPSBzZWxm
Lm1vZGVsKCkuZnJhbWV3b3JrLm5hbWUKICAgICAgICAgaGVhZGVyX2luY2x1ZGVzID0gWwotICAg
ICAgICAgICAgKFt0YXJnZXRfZnJhbWV3b3JrX25hbWVdLCAodGFyZ2V0X2ZyYW1ld29ya19uYW1l
LCAiJXNQcm90b2NvbFR5cGVzLmgiICUgc2VsZi5wcm90b2NvbF9uYW1lKCkpKSwKKyAgICAgICAg
ICAgIChbdGFyZ2V0X2ZyYW1ld29ya19uYW1lXSwgKHRhcmdldF9mcmFtZXdvcmtfbmFtZSwgIiVz
UHJvdG9jb2xPYmplY3RzLmgiICUgc2VsZi5wcm90b2NvbF9uYW1lKCkpKSwKICAgICAgICAgICAg
IChbIkphdmFTY3JpcHRDb3JlIl0sICgiSmF2YVNjcmlwdENvcmUiLCAiaW5zcGVjdG9yL0luc3Bl
Y3RvckZyb250ZW5kUm91dGVyLmgiKSksCiAgICAgICAgICAgICAoWyJKYXZhU2NyaXB0Q29yZSJd
LCAoIkphdmFTY3JpcHRDb3JlIiwgImluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
ci5oIikpLAogICAgICAgICBdCkBAIC05MSw5ICs5MywxOSBAQCBjbGFzcyBDcHBBbHRlcm5hdGVC
YWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogCiAgICAgZGVm
IF9nZW5lcmF0ZV9oYW5kbGVyX2RlY2xhcmF0aW9uX2Zvcl9jb21tYW5kKHNlbGYsIGNvbW1hbmQp
OgogICAgICAgICBsaW5lcyA9IFtdCi0gICAgICAgIHBhcmFtZXRlcnMgPSBbJ2xvbmcgY2FsbElk
J10KLSAgICAgICAgZm9yIF9wYXJhbWV0ZXIgaW4gY29tbWFuZC5jYWxsX3BhcmFtZXRlcnM6Ci0g
ICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZCgnJXMgaW5fJXMnICUgKENwcEdlbmVyYXRvci5j
cHBfdHlwZV9mb3JfdW5jaGVja2VkX2Zvcm1hbF9pbl9wYXJhbWV0ZXIoX3BhcmFtZXRlciksIF9w
YXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpKQorICAgICAgICBwYXJhbWV0ZXJzID0gWydsb25nIHBy
b3RvY29sX2NhbGxJZCddCisgICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gY29tbWFuZC5jYWxsX3Bh
cmFtZXRlcnM6CisgICAgICAgICAgICBwYXJhbWV0ZXJfdHlwZSA9IHBhcmFtZXRlci50eXBlCisg
ICAgICAgICAgICBpZiBpc2luc3RhbmNlKHBhcmFtZXRlcl90eXBlLCBBbGlhc2VkVHlwZSk6Cisg
ICAgICAgICAgICAgICAgcGFyYW1ldGVyX3R5cGUgPSBwYXJhbWV0ZXJfdHlwZS5hbGlhc2VkX3R5
cGUKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UocGFyYW1ldGVyX3R5cGUsIEVudW1UeXBlKToK
KyAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfdHlwZSA9IHBhcmFtZXRlcl90eXBlLnByaW1pdGl2
ZV90eXBlCisKKyAgICAgICAgICAgIHBhcmFtZXRlcl9uYW1lID0gcGFyYW1ldGVyLnBhcmFtZXRl
cl9uYW1lCisgICAgICAgICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6CisgICAgICAgICAg
ICAgICAgcGFyYW1ldGVyX25hbWUgPSAnb3B0XycgKyBwYXJhbWV0ZXJfbmFtZQorCisgICAgICAg
ICAgICBwYXJhbWV0ZXJzLmFwcGVuZCgnJXMgJXMnICUgKENwcEdlbmVyYXRvci5jcHBfdHlwZV9m
b3JfY29tbWFuZF9wYXJhbWV0ZXIocGFyYW1ldGVyX3R5cGUsIHBhcmFtZXRlci5pc19vcHRpb25h
bCksIHBhcmFtZXRlcl9uYW1lKSkKIAogICAgICAgICBjb21tYW5kX2FyZ3MgPSB7CiAgICAgICAg
ICAgICAnY29tbWFuZE5hbWUnOiBjb21tYW5kLmNvbW1hbmRfbmFtZSwKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2Nw
cF9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9o
ZWFkZXIucHkKaW5kZXggMTBkOGYxNGJkNWZlYmViOGExYjA2YjAxNzY3NWExNDNhOGQ0ZjczOC4u
NmQ5ZGQyYTQ4ZGMzNDY5MjA3MWMxZGJjMWI4YjNiNGU3YzczYTkxNSAxMDA3NTUKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3Bw
X2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hl
cl9oZWFkZXIucHkKQEAgLTU1LDEwICs1NSw5IEBAIGNsYXNzIENwcEJhY2tlbmREaXNwYXRjaGVy
SGVhZGVyR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAgIHJldHVybiBbZG9tYWluIGZv
ciBkb21haW4gaW4gR2VuZXJhdG9yLmRvbWFpbnNfdG9fZ2VuZXJhdGUoc2VsZikgaWYgbGVuKHNl
bGYuY29tbWFuZHNfZm9yX2RvbWFpbihkb21haW4pKSA+IDBdCiAKICAgICBkZWYgZ2VuZXJhdGVf
b3V0cHV0KHNlbGYpOgotICAgICAgICB0eXBlZGVmcyA9IFsoJ1N0cmluZycsICdFcnJvclN0cmlu
ZycpXQogICAgICAgICBoZWFkZXJfYXJncyA9IHsKICAgICAgICAgICAgICdpbmNsdWRlcyc6IHNl
bGYuX2dlbmVyYXRlX3NlY29uZGFyeV9oZWFkZXJfaW5jbHVkZXMoKSwKLSAgICAgICAgICAgICd0
eXBlZGVmcyc6ICdcbicuam9pbihbJ3R5cGVkZWYgJXMgJXM7JyAlIHR5cGVkZWYgZm9yIHR5cGVk
ZWYgaW4gdHlwZWRlZnNdKSwKKyAgICAgICAgICAgICd0eXBlZGVmcyc6ICcnLAogICAgICAgICB9
CiAKICAgICAgICAgZG9tYWlucyA9IHNlbGYuZG9tYWluc190b19nZW5lcmF0ZSgpCkBAIC03OSw5
ICs3OCwxMSBAQCBjbGFzcyBDcHBCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvcihDcHBH
ZW5lcmF0b3IpOgogICAgICAgICBoZWFkZXJfaW5jbHVkZXMgPSBbCiAgICAgICAgICAgICAoWyJK
YXZhU2NyaXB0Q29yZSIsICJXZWJLaXQiXSwgKHNlbGYubW9kZWwoKS5mcmFtZXdvcmsubmFtZSwg
IiVzUHJvdG9jb2xPYmplY3RzLmgiICUgc2VsZi5wcm90b2NvbF9uYW1lKCkpKSwKICAgICAgICAg
ICAgIChbIkphdmFTY3JpcHRDb3JlIiwgIldlYktpdCJdLCAoIkphdmFTY3JpcHRDb3JlIiwgImlu
c3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oIikpLAotICAgICAgICAgICAgKFsi
SmF2YVNjcmlwdENvcmUiLCAiV2ViS2l0Il0sICgiV1RGIiwgInd0Zi90ZXh0L1dURlN0cmluZy5o
IikpCisgICAgICAgICAgICAoWyJKYXZhU2NyaXB0Q29yZSIsICJXZWJLaXQiXSwgKCJXVEYiLCAi
d3RmL0V4cGVjdGVkLmgiKSksCisgICAgICAgICAgICAoWyJKYXZhU2NyaXB0Q29yZSIsICJXZWJL
aXQiXSwgKCJXVEYiLCAid3RmL09wdGlvbmFsLmgiKSksCisgICAgICAgICAgICAoWyJKYXZhU2Ny
aXB0Q29yZSIsICJXZWJLaXQiXSwgKCJXVEYiLCAid3RmL3RleHQvV1RGU3RyaW5nLmgiKSksCisg
ICAgICAgICAgICAoWyJKYXZhU2NyaXB0Q29yZSIsICJXZWJLaXQiXSwgKCJzdGQiLCAidHVwbGUi
KSksCiAgICAgICAgIF0KLQogICAgICAgICByZXR1cm4gJ1xuJy5qb2luKHNlbGYuZ2VuZXJhdGVf
aW5jbHVkZXNfZnJvbV9lbnRyaWVzKGhlYWRlcl9pbmNsdWRlcykpCiAKICAgICBkZWYgX2dlbmVy
YXRlX2FsdGVybmF0ZV9oYW5kbGVyX2ZvcndhcmRfZGVjbGFyYXRpb25zX2Zvcl9kb21haW5zKHNl
bGYsIGRvbWFpbnMpOgpAQCAtMTAxLDExICsxMDIsOSBAQCBjbGFzcyBDcHBCYWNrZW5kRGlzcGF0
Y2hlckhlYWRlckdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAgICBpZiBleHBvcnRNYWNy
byBpcyBub3QgTm9uZToKICAgICAgICAgICAgIGNsYXNzQ29tcG9uZW50cy5hcHBlbmQoZXhwb3J0
TWFjcm8pCiAKLSAgICAgICAgdXNlZF9lbnVtX25hbWVzID0gc2V0KCkKLQogICAgICAgICBjb21t
YW5kX2RlY2xhcmF0aW9ucyA9IFtdCiAgICAgICAgIGZvciBjb21tYW5kIGluIHNlbGYuY29tbWFu
ZHNfZm9yX2RvbWFpbihkb21haW4pOgotICAgICAgICAgICAgY29tbWFuZF9kZWNsYXJhdGlvbnMu
YXBwZW5kKHNlbGYuX2dlbmVyYXRlX2hhbmRsZXJfZGVjbGFyYXRpb25fZm9yX2NvbW1hbmQoY29t
bWFuZCwgdXNlZF9lbnVtX25hbWVzKSkKKyAgICAgICAgICAgIGNvbW1hbmRfZGVjbGFyYXRpb25z
LmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9oYW5kbGVyX2RlY2xhcmF0aW9uX2Zvcl9jb21tYW5kKGNv
bW1hbmQpKQogCiAgICAgICAgIGhhbmRsZXJfYXJncyA9IHsKICAgICAgICAgICAgICdjbGFzc0Fu
ZEV4cG9ydE1hY3JvJzogIiAiLmpvaW4oY2xhc3NDb21wb25lbnRzKSwKQEAgLTExNSw2OSArMTE0
LDU2IEBAIGNsYXNzIENwcEJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yKENwcEdlbmVy
YXRvcik6CiAKICAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRp
b24oZG9tYWluLmNvbmRpdGlvbiwgVGVtcGxhdGUoQ3BwVGVtcGxhdGVzLkJhY2tlbmREaXNwYXRj
aGVySGVhZGVyRG9tYWluSGFuZGxlckRlY2xhcmF0aW9uKS5zdWJzdGl0dXRlKE5vbmUsICoqaGFu
ZGxlcl9hcmdzKSkKIAotICAgIGRlZiBfZ2VuZXJhdGVfYW5vbnltb3VzX2VudW1fZm9yX3BhcmFt
ZXRlcihzZWxmLCBwYXJhbWV0ZXIsIGNvbW1hbmQpOgotICAgICAgICBlbnVtX2FyZ3MgPSB7Ci0g
ICAgICAgICAgICAncGFyYW1ldGVyTmFtZSc6IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwKLSAg
ICAgICAgICAgICdjb21tYW5kTmFtZSc6IGNvbW1hbmQuY29tbWFuZF9uYW1lCi0gICAgICAgIH0K
LQotICAgICAgICBsaW5lcyA9IFtdCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIC8vIE5hbWVk
IGFmdGVyIHBhcmFtZXRlciBcJyUocGFyYW1ldGVyTmFtZSlzXCcgd2hpbGUgZ2VuZXJhdGluZyBj
b21tYW5kL2V2ZW50ICUoY29tbWFuZE5hbWUpcy4nICUgZW51bV9hcmdzKQotICAgICAgICBsaW5l
cy5hcHBlbmQoJyAgICBlbnVtIGNsYXNzICVzIHsnICUgdWNmaXJzdChwYXJhbWV0ZXIucGFyYW1l
dGVyX25hbWUpKQotICAgICAgICBmb3IgZW51bV92YWx1ZSBpbiBwYXJhbWV0ZXIudHlwZS5lbnVt
X3ZhbHVlcygpOgotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgICVzID0gJWQsJyAl
IChHZW5lcmF0b3Iuc3R5bGl6ZWRfbmFtZV9mb3JfZW51bV92YWx1ZShlbnVtX3ZhbHVlKSwgc2Vs
Zi5lbmNvZGluZ19mb3JfZW51bV92YWx1ZShlbnVtX3ZhbHVlKSkpCi0gICAgICAgIGxpbmVzLmFw
cGVuZCgnICAgIH07IC8vIGVudW0gY2xhc3MgJXMnICUgdWNmaXJzdChwYXJhbWV0ZXIucGFyYW1l
dGVyX25hbWUpKQotICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQotCi0gICAgZGVmIF9n
ZW5lcmF0ZV9oYW5kbGVyX2RlY2xhcmF0aW9uX2Zvcl9jb21tYW5kKHNlbGYsIGNvbW1hbmQsIHVz
ZWRfZW51bV9uYW1lcyk6CisgICAgZGVmIF9nZW5lcmF0ZV9oYW5kbGVyX2RlY2xhcmF0aW9uX2Zv
cl9jb21tYW5kKHNlbGYsIGNvbW1hbmQpOgogICAgICAgICBpZiBjb21tYW5kLmlzX2FzeW5jOgog
ICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2dlbmVyYXRlX2FzeW5jX2hhbmRsZXJfZGVjbGFyYXRp
b25fZm9yX2NvbW1hbmQoY29tbWFuZCkKIAogICAgICAgICBsaW5lcyA9IFtdCi0gICAgICAgIHBh
cmFtZXRlcnMgPSBbJ0Vycm9yU3RyaW5nJiddCi0gICAgICAgIGZvciBfcGFyYW1ldGVyIGluIGNv
bW1hbmQuY2FsbF9wYXJhbWV0ZXJzOgotICAgICAgICAgICAgcGFyYW1ldGVyX25hbWUgPSAnaW5f
JyArIF9wYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUKLSAgICAgICAgICAgIGlmIF9wYXJhbWV0ZXIu
aXNfb3B0aW9uYWw6CisKKyAgICAgICAgcGFyYW1ldGVycyA9IFtdCisgICAgICAgIGZvciBwYXJh
bWV0ZXIgaW4gY29tbWFuZC5jYWxsX3BhcmFtZXRlcnM6CisgICAgICAgICAgICBwYXJhbWV0ZXJf
bmFtZSA9IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZQorICAgICAgICAgICAgaWYgcGFyYW1ldGVy
LmlzX29wdGlvbmFsOgogICAgICAgICAgICAgICAgIHBhcmFtZXRlcl9uYW1lID0gJ29wdF8nICsg
cGFyYW1ldGVyX25hbWUKKyAgICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKCIlcyAlcyIgJSAo
Q3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl9jb21tYW5kX3BhcmFtZXRlcihwYXJhbWV0ZXIudHlw
ZSwgcGFyYW1ldGVyLmlzX29wdGlvbmFsKSwgcGFyYW1ldGVyX25hbWUpKQogCi0gICAgICAgICAg
ICBwYXJhbWV0ZXJzLmFwcGVuZCgiJXMgJXMiICUgKENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3Jf
dW5jaGVja2VkX2Zvcm1hbF9pbl9wYXJhbWV0ZXIoX3BhcmFtZXRlciksIHBhcmFtZXRlcl9uYW1l
KSkKLQotICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShfcGFyYW1ldGVyLnR5cGUsIEVudW1UeXBl
KSBhbmQgX3BhcmFtZXRlci50eXBlLmlzX2Fub255bW91cyBhbmQgX3BhcmFtZXRlci5wYXJhbWV0
ZXJfbmFtZSBub3QgaW4gdXNlZF9lbnVtX25hbWVzOgotICAgICAgICAgICAgICAgIGxpbmVzLmFw
cGVuZChzZWxmLl9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9mb3JfcGFyYW1ldGVyKF9wYXJhbWV0
ZXIsIGNvbW1hbmQpKQotICAgICAgICAgICAgICAgIHVzZWRfZW51bV9uYW1lcy5hZGQoX3BhcmFt
ZXRlci5wYXJhbWV0ZXJfbmFtZSkKLQotICAgICAgICBmb3IgX3BhcmFtZXRlciBpbiBjb21tYW5k
LnJldHVybl9wYXJhbWV0ZXJzOgotICAgICAgICAgICAgcGFyYW1ldGVyX25hbWUgPSAnb3V0Xycg
KyBfcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lCi0gICAgICAgICAgICBpZiBfcGFyYW1ldGVyLmlz
X29wdGlvbmFsOgorICAgICAgICByZXR1cm5zID0gW10KKyAgICAgICAgZm9yIHBhcmFtZXRlciBp
biBjb21tYW5kLnJldHVybl9wYXJhbWV0ZXJzOgorICAgICAgICAgICAgcGFyYW1ldGVyX25hbWUg
PSBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUKKyAgICAgICAgICAgIGlmIHBhcmFtZXRlci5pc19v
cHRpb25hbDoKICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfbmFtZSA9ICdvcHRfJyArIHBhcmFt
ZXRlcl9uYW1lCi0gICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZCgiJXMgJXMiICUgKENwcEdl
bmVyYXRvci5jcHBfdHlwZV9mb3JfZm9ybWFsX291dF9wYXJhbWV0ZXIoX3BhcmFtZXRlciksIHBh
cmFtZXRlcl9uYW1lKSkKLQotICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShfcGFyYW1ldGVyLnR5
cGUsIEVudW1UeXBlKSBhbmQgX3BhcmFtZXRlci50eXBlLmlzX2Fub255bW91cyBhbmQgX3BhcmFt
ZXRlci5wYXJhbWV0ZXJfbmFtZSBub3QgaW4gdXNlZF9lbnVtX25hbWVzOgotICAgICAgICAgICAg
ICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9mb3JfcGFyYW1l
dGVyKF9wYXJhbWV0ZXIsIGNvbW1hbmQpKQotICAgICAgICAgICAgICAgIHVzZWRfZW51bV9uYW1l
cy5hZGQoX3BhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkKKyAgICAgICAgICAgIHJldHVybnMuYXBw
ZW5kKCclcyAvKiAlcyAqLycgJSAoQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl9jb21tYW5kX3Jl
dHVybl9kZWNsYXJhdGlvbihwYXJhbWV0ZXIudHlwZSwgcGFyYW1ldGVyLmlzX29wdGlvbmFsKSwg
cGFyYW1ldGVyX25hbWUpKQogCiAgICAgICAgIGNvbW1hbmRfYXJncyA9IHsKICAgICAgICAgICAg
ICdjb21tYW5kTmFtZSc6IGNvbW1hbmQuY29tbWFuZF9uYW1lLAotICAgICAgICAgICAgJ3BhcmFt
ZXRlcnMnOiAiLCAiLmpvaW4ocGFyYW1ldGVycykKKyAgICAgICAgICAgICdwYXJhbWV0ZXJzJzog
IiwgIi5qb2luKHBhcmFtZXRlcnMpLAorICAgICAgICAgICAgJ3JldHVybnMnOiAiLCAiLmpvaW4o
cmV0dXJucyksCiAgICAgICAgIH0KLSAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgdmlydHVhbCB2
b2lkICUoY29tbWFuZE5hbWUpcyglKHBhcmFtZXRlcnMpcykgPSAwOycgJSBjb21tYW5kX2FyZ3Mp
CisgICAgICAgIGlmIGxlbihyZXR1cm5zKSA9PSAxOgorICAgICAgICAgICAgbGluZXMuYXBwZW5k
KCcgICAgdmlydHVhbCBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjwlKHJldHVybnMpcz4gJShjb21t
YW5kTmFtZSlzKCUocGFyYW1ldGVycylzKSA9IDA7JyAlIGNvbW1hbmRfYXJncykKKyAgICAgICAg
ZWxpZiBsZW4ocmV0dXJucykgPiAxOgorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgdmly
dHVhbCBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxzdGQ6OnR1cGxlPCUocmV0dXJucylzPj4gJShj
b21tYW5kTmFtZSlzKCUocGFyYW1ldGVycylzKSA9IDA7JyAlIGNvbW1hbmRfYXJncykKKyAgICAg
ICAgZWxzZToKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIHZpcnR1YWwgUHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8dm9pZD4gJShjb21tYW5kTmFtZSlzKCUocGFyYW1ldGVycylzKSA9IDA7
JyAlIGNvbW1hbmRfYXJncykKICAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zv
cl9jb25kaXRpb24oY29tbWFuZC5jb25kaXRpb24sICdcbicuam9pbihsaW5lcykpCiAKICAgICBk
ZWYgX2dlbmVyYXRlX2FzeW5jX2hhbmRsZXJfZGVjbGFyYXRpb25fZm9yX2NvbW1hbmQoc2VsZiwg
Y29tbWFuZCk6CiAgICAgICAgIGNhbGxiYWNrTmFtZSA9ICIlc0NhbGxiYWNrIiAlIHVjZmlyc3Qo
Y29tbWFuZC5jb21tYW5kX25hbWUpCiAKLSAgICAgICAgaW5fcGFyYW1ldGVycyA9IFtdCi0gICAg
ICAgIGZvciBfcGFyYW1ldGVyIGluIGNvbW1hbmQuY2FsbF9wYXJhbWV0ZXJzOgotICAgICAgICAg
ICAgcGFyYW1ldGVyX25hbWUgPSAnaW5fJyArIF9wYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUKLSAg
ICAgICAgICAgIGlmIF9wYXJhbWV0ZXIuaXNfb3B0aW9uYWw6CisgICAgICAgIHBhcmFtZXRlcnMg
PSBbXQorICAgICAgICBmb3IgcGFyYW1ldGVyIGluIGNvbW1hbmQuY2FsbF9wYXJhbWV0ZXJzOgor
ICAgICAgICAgICAgcGFyYW1ldGVyX25hbWUgPSBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUKKyAg
ICAgICAgICAgIGlmIHBhcmFtZXRlci5pc19vcHRpb25hbDoKICAgICAgICAgICAgICAgICBwYXJh
bWV0ZXJfbmFtZSA9ICdvcHRfJyArIHBhcmFtZXRlcl9uYW1lCisgICAgICAgICAgICBwYXJhbWV0
ZXJzLmFwcGVuZCgiJXMgJXMiICUgKENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3JfY29tbWFuZF9w
YXJhbWV0ZXIocGFyYW1ldGVyLnR5cGUsIHBhcmFtZXRlci5pc19vcHRpb25hbCksIHBhcmFtZXRl
cl9uYW1lKSkKKyAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoIlJlZjwlcz4mJiIgJSBjYWxsYmFj
a05hbWUpCiAKLSAgICAgICAgICAgIGluX3BhcmFtZXRlcnMuYXBwZW5kKCIlcyAlcyIgJSAoQ3Bw
R2VuZXJhdG9yLmNwcF90eXBlX2Zvcl91bmNoZWNrZWRfZm9ybWFsX2luX3BhcmFtZXRlcihfcGFy
YW1ldGVyKSwgcGFyYW1ldGVyX25hbWUpKQotICAgICAgICBpbl9wYXJhbWV0ZXJzLmFwcGVuZCgi
UmVmPCVzPiYmIGNhbGxiYWNrIiAlIGNhbGxiYWNrTmFtZSkKLQotICAgICAgICBvdXRfcGFyYW1l
dGVycyA9IFtdCi0gICAgICAgIGZvciBfcGFyYW1ldGVyIGluIGNvbW1hbmQucmV0dXJuX3BhcmFt
ZXRlcnM6Ci0gICAgICAgICAgICBvdXRfcGFyYW1ldGVycy5hcHBlbmQoIiVzICVzIiAlIChDcHBH
ZW5lcmF0b3IuY3BwX3R5cGVfZm9yX2Zvcm1hbF9hc3luY19wYXJhbWV0ZXIoX3BhcmFtZXRlciks
IF9wYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpKQorICAgICAgICByZXR1cm5zID0gW10KKyAgICAg
ICAgZm9yIHBhcmFtZXRlciBpbiBjb21tYW5kLnJldHVybl9wYXJhbWV0ZXJzOgorICAgICAgICAg
ICAgcGFyYW1ldGVyX25hbWUgPSBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUKKyAgICAgICAgICAg
IGlmIHBhcmFtZXRlci5pc19vcHRpb25hbDoKKyAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfbmFt
ZSA9ICdvcHRfJyArIHBhcmFtZXRlcl9uYW1lCisgICAgICAgICAgICByZXR1cm5zLmFwcGVuZCgi
JXMgJXMiICUgKENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3JfY29tbWFuZF9yZXR1cm5fYXJndW1l
bnQocGFyYW1ldGVyLnR5cGUsIHBhcmFtZXRlci5pc19vcHRpb25hbCksIHBhcmFtZXRlcl9uYW1l
KSkKIAogICAgICAgICBjbGFzc19jb21wb25lbnRzID0gWydjbGFzcyddCiAgICAgICAgIGV4cG9y
dF9tYWNybyA9IHNlbGYubW9kZWwoKS5mcmFtZXdvcmsuc2V0dGluZygnZXhwb3J0X21hY3JvJywg
Tm9uZSkKQEAgLTE4OCw4ICsxNzQsOCBAQCBjbGFzcyBDcHBCYWNrZW5kRGlzcGF0Y2hlckhlYWRl
ckdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAgICAgICAgJ2NsYXNzQW5kRXhwb3J0TWFj
cm8nOiAnICcuam9pbihjbGFzc19jb21wb25lbnRzKSwKICAgICAgICAgICAgICdjYWxsYmFja05h
bWUnOiBjYWxsYmFja05hbWUsCiAgICAgICAgICAgICAnY29tbWFuZE5hbWUnOiBjb21tYW5kLmNv
bW1hbmRfbmFtZSwKLSAgICAgICAgICAgICdpblBhcmFtZXRlcnMnOiAiLCAiLmpvaW4oaW5fcGFy
YW1ldGVycyksCi0gICAgICAgICAgICAnb3V0UGFyYW1ldGVycyc6ICIsICIuam9pbihvdXRfcGFy
YW1ldGVycyksCisgICAgICAgICAgICAncGFyYW1ldGVycyc6ICIsICIuam9pbihwYXJhbWV0ZXJz
KSwKKyAgICAgICAgICAgICdyZXR1cm5zJzogIiwgIi5qb2luKHJldHVybnMpLAogICAgICAgICB9
CiAKICAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oY29t
bWFuZC5jb25kaXRpb24sIFRlbXBsYXRlKENwcFRlbXBsYXRlcy5CYWNrZW5kRGlzcGF0Y2hlckhl
YWRlckFzeW5jQ29tbWFuZERlY2xhcmF0aW9uKS5zdWJzdGl0dXRlKE5vbmUsICoqY29tbWFuZF9h
cmdzKSkKQEAgLTIyMyw0ICsyMDksNCBAQCBjbGFzcyBDcHBCYWNrZW5kRGlzcGF0Y2hlckhlYWRl
ckdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhf
Z3VhcmRfZm9yX2NvbmRpdGlvbihkb21haW4uY29uZGl0aW9uLCBUZW1wbGF0ZShDcHBUZW1wbGF0
ZXMuQmFja2VuZERpc3BhdGNoZXJIZWFkZXJEb21haW5EaXNwYXRjaGVyRGVjbGFyYXRpb24pLnN1
YnN0aXR1dGUoTm9uZSwgKipoYW5kbGVyX2FyZ3MpKQogCiAgICAgZGVmIF9nZW5lcmF0ZV9kaXNw
YXRjaGVyX2RlY2xhcmF0aW9uX2Zvcl9jb21tYW5kKHNlbGYsIGNvbW1hbmQpOgotICAgICAgICBy
ZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihjb21tYW5kLmNvbmRpdGlv
biwgIiAgICB2b2lkICVzKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBh
cmFtZXRlcnMpOyIgJSBjb21tYW5kLmNvbW1hbmRfbmFtZSkKKyAgICAgICAgcmV0dXJuIHNlbGYu
d3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oY29tbWFuZC5jb25kaXRpb24sICIgICAgdm9p
ZCAlcyhsb25nIHByb3RvY2xfY2FsbElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29s
X3BhcmFtZXRlcnMpOyIgJSBjb21tYW5kLmNvbW1hbmRfbmFtZSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9i
YWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRj
aGVyX2ltcGxlbWVudGF0aW9uLnB5CmluZGV4IGRhZjE5Yzk1MGZiMDdhYWEyZDhiMzFhMmY0OWM3
Y2FiNTA3MDJjNjAuLjhkZmIyOTRhYjlkMjZlNGU4NTVmNWUxMjlkYjgzMWU3ZjkwMWFiZGUgMTAw
NzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2Vu
L2dlbmVyYXRlX2NwcF9iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVf
Y3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQpAQCAtMzMsMTIgKzMzLDEy
IEBAIHRyeToKICAgICBmcm9tIC5jcHBfZ2VuZXJhdG9yIGltcG9ydCBDcHBHZW5lcmF0b3IKICAg
ICBmcm9tIC5jcHBfZ2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgQ3BwR2VuZXJhdG9yVGVtcGxh
dGVzIGFzIENwcFRlbXBsYXRlcwogICAgIGZyb20gLmdlbmVyYXRvciBpbXBvcnQgR2VuZXJhdG9y
LCB1Y2ZpcnN0Ci0gICAgZnJvbSAubW9kZWxzIGltcG9ydCBPYmplY3RUeXBlLCBBcnJheVR5cGUK
KyAgICBmcm9tIC5tb2RlbHMgaW1wb3J0IE9iamVjdFR5cGUsIEFycmF5VHlwZSwgQWxpYXNlZFR5
cGUsIEVudW1UeXBlCiBleGNlcHQgVmFsdWVFcnJvcjoKICAgICBmcm9tIGNwcF9nZW5lcmF0b3Ig
aW1wb3J0IENwcEdlbmVyYXRvcgogICAgIGZyb20gY3BwX2dlbmVyYXRvcl90ZW1wbGF0ZXMgaW1w
b3J0IENwcEdlbmVyYXRvclRlbXBsYXRlcyBhcyBDcHBUZW1wbGF0ZXMKICAgICBmcm9tIGdlbmVy
YXRvciBpbXBvcnQgR2VuZXJhdG9yLCB1Y2ZpcnN0Ci0gICAgZnJvbSBtb2RlbHMgaW1wb3J0IE9i
amVjdFR5cGUsIEFycmF5VHlwZQorICAgIGZyb20gbW9kZWxzIGltcG9ydCBPYmplY3RUeXBlLCBB
cnJheVR5cGUsIEFsaWFzZWRUeXBlLCBFbnVtVHlwZQogCiBsb2cgPSBsb2dnaW5nLmdldExvZ2dl
cignZ2xvYmFsJykKIApAQCAtODAsMTEgKzgwLDggQEAgY2xhc3MgQ3BwQmFja2VuZERpc3BhdGNo
ZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgIGRlZiBfZ2VuZXJh
dGVfc2Vjb25kYXJ5X2hlYWRlcl9pbmNsdWRlcyhzZWxmKToKICAgICAgICAgaGVhZGVyX2luY2x1
ZGVzID0gWwogICAgICAgICAgICAgKFsiSmF2YVNjcmlwdENvcmUiLCAiV2ViS2l0Il0sICgiSmF2
YVNjcmlwdENvcmUiLCAiaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmgiKSksCi0g
ICAgICAgICAgICAoWyJKYXZhU2NyaXB0Q29yZSIsICJXZWJLaXQiXSwgKCJXVEYiLCAid3RmL0pT
T05WYWx1ZXMuaCIpKSwKICAgICAgICAgICAgIChbIkphdmFTY3JpcHRDb3JlIiwgIldlYktpdCJd
LCAoIldURiIsICJ3dGYvTmV2ZXJEZXN0cm95ZWQuaCIpKSwKLSAgICAgICAgICAgIChbIkphdmFT
Y3JpcHRDb3JlIiwgIldlYktpdCJdLCAoIldURiIsICJ3dGYvdGV4dC9DU3RyaW5nLmgiKSkKICAg
ICAgICAgXQotCiAgICAgICAgIHJldHVybiBzZWxmLmdlbmVyYXRlX2luY2x1ZGVzX2Zyb21fZW50
cmllcyhoZWFkZXJfaW5jbHVkZXMpCiAKIApAQCAtMTIzLDggKzEyMCw4IEBAIGNsYXNzIENwcEJh
Y2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAg
ICAgICAgY2FzZXMgPSBbXQogCiAgICAgICAgIGZpcnN0X2NvbW1hbmRfc3RyaW5nID0gIlxuIi5q
b2luKFsKLSAgICAgICAgICAgICcgICAgaWYgKG1ldGhvZCA9PSAiJXMiKSB7JyAlIGNvbW1hbmRz
WzBdLmNvbW1hbmRfbmFtZSwKLSAgICAgICAgICAgICcgICAgICAgICVzKHJlcXVlc3RJZCwgV1RG
TW92ZShwYXJhbWV0ZXJzKSk7JyAlIGNvbW1hbmRzWzBdLmNvbW1hbmRfbmFtZSwKKyAgICAgICAg
ICAgICcgICAgaWYgKHByb3RvY29sX21ldGhvZCA9PSAiJXMiKSB7JyAlIGNvbW1hbmRzWzBdLmNv
bW1hbmRfbmFtZSwKKyAgICAgICAgICAgICcgICAgICAgICVzKHByb3RvY29sX2NhbGxJZCwgV1RG
TW92ZShwcm90b2NvbF9wYXJhbWV0ZXJzKSk7JyAlIGNvbW1hbmRzWzBdLmNvbW1hbmRfbmFtZSwK
ICAgICAgICAgICAgICcgICAgICAgIHJldHVybjsnLAogICAgICAgICAgICAgJyAgICB9JywKICAg
ICAgICAgXSkKQEAgLTEzMiw4ICsxMjksOCBAQCBjbGFzcyBDcHBCYWNrZW5kRGlzcGF0Y2hlcklt
cGxlbWVudGF0aW9uR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAKICAgICAgICAgZm9yIGNvbW1h
bmQgaW4gY29tbWFuZHNbMTpdOgogICAgICAgICAgICAgYWRkaXRpb25hbF9jb21tYW5kX3N0cmlu
ZyA9ICJcbiIuam9pbihbCi0gICAgICAgICAgICAgICAgJyAgICBpZiAobWV0aG9kID09ICIlcyIp
IHsnICUgY29tbWFuZC5jb21tYW5kX25hbWUsCi0gICAgICAgICAgICAgICAgJyAgICAgICAgJXMo
cmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsnICUgY29tbWFuZC5jb21tYW5kX25hbWUs
CisgICAgICAgICAgICAgICAgJyAgICBpZiAocHJvdG9jb2xfbWV0aG9kID09ICIlcyIpIHsnICUg
Y29tbWFuZC5jb21tYW5kX25hbWUsCisgICAgICAgICAgICAgICAgJyAgICAgICAgJXMocHJvdG9j
b2xfY2FsbElkLCBXVEZNb3ZlKHByb3RvY29sX3BhcmFtZXRlcnMpKTsnICUgY29tbWFuZC5jb21t
YW5kX25hbWUsCiAgICAgICAgICAgICAgICAgJyAgICAgICAgcmV0dXJuOycsCiAgICAgICAgICAg
ICAgICAgJyAgICB9JywKICAgICAgICAgICAgIF0pCkBAIC0xNjUsMTQ2ICsxNjIsMTM2IEBAIGNs
YXNzIENwcEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IoQ3BwR2VuZXJh
dG9yKToKICAgICAgICAgcmV0dXJuIFRlbXBsYXRlKENwcFRlbXBsYXRlcy5CYWNrZW5kRGlzcGF0
Y2hlckltcGxlbWVudGF0aW9uTGFyZ2VTd2l0Y2gpLnN1YnN0aXR1dGUoTm9uZSwgKipzd2l0Y2hf
YXJncykKIAogICAgIGRlZiBfZ2VuZXJhdGVfYXN5bmNfZGlzcGF0Y2hlcl9jbGFzc19mb3JfZG9t
YWluKHNlbGYsIGNvbW1hbmQsIGRvbWFpbik6Ci0gICAgICAgIG91dF9wYXJhbWV0ZXJfYXNzaWdu
bWVudHMgPSBbXQotICAgICAgICBmb3JtYWxfcGFyYW1ldGVycyA9IFtdCisgICAgICAgIHJldHVy
bl9hc3NpZ25tZW50cyA9IFtdCisgICAgICAgIGNhbGxiYWNrX3BhcmFtZXRlcnMgPSBbXQogCiAg
ICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gY29tbWFuZC5yZXR1cm5fcGFyYW1ldGVyczoKKyAgICAg
ICAgICAgIHBhcmFtZXRlcl9uYW1lID0gcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lCisgICAgICAg
ICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6CisgICAgICAgICAgICAgICAgcGFyYW1ldGVy
X25hbWUgPSAnb3B0XycgKyBwYXJhbWV0ZXJfbmFtZQorCisgICAgICAgICAgICBwYXJhbWV0ZXJf
dmFsdWUgPSBwYXJhbWV0ZXJfbmFtZQorCisgICAgICAgICAgICBfdHlwZSA9IHBhcmFtZXRlci50
eXBlCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBBbGlhc2VkVHlwZSk6CisgICAg
ICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5hbGlhc2VkX3R5cGUKKyAgICAgICAgICAgIGlmIGlz
aW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKSBhbmQgX3R5cGUuaXNfYW5vbnltb3VzOgorICAgICAg
ICAgICAgICAgIF90eXBlID0gX3R5cGUucHJpbWl0aXZlX3R5cGUKKworICAgICAgICAgICAgaWYg
X3R5cGUuaXNfZW51bSgpOgorICAgICAgICAgICAgICAgIGlmIHBhcmFtZXRlci5pc19vcHRpb25h
bDoKKyAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyX3ZhbHVlID0gJyonICsgcGFyYW1ldGVy
X3ZhbHVlCisgICAgICAgICAgICAgICAgcGFyYW1ldGVyX3ZhbHVlID0gJ1Byb3RvY29sOjolczo6
Z2V0RW51bUNvbnN0YW50VmFsdWUoJXMpJyAlIChzZWxmLmhlbHBlcnNfbmFtZXNwYWNlKCksIHBh
cmFtZXRlcl92YWx1ZSkKKyAgICAgICAgICAgIGVsaWYgQ3BwR2VuZXJhdG9yLnNob3VsZF9yZWxl
YXNlX2FyZ3VtZW50KF90eXBlLCBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwpOgorICAgICAgICAgICAg
ICAgIHBhcmFtZXRlcl92YWx1ZSA9IHBhcmFtZXRlcl92YWx1ZSArICcucmVsZWFzZU5vbk51bGwo
KScKKyAgICAgICAgICAgIGVsaWYgQ3BwR2VuZXJhdG9yLnNob3VsZF9kZXJlZmVyZW5jZV9hcmd1
bWVudChfdHlwZSwgcGFyYW1ldGVyLmlzX29wdGlvbmFsKToKKyAgICAgICAgICAgICAgICBwYXJh
bWV0ZXJfdmFsdWUgPSAnKicgKyBwYXJhbWV0ZXJfdmFsdWUKKyAgICAgICAgICAgIGVsaWYgQ3Bw
R2VuZXJhdG9yLnNob3VsZF9tb3ZlX2FyZ3VtZW50KF90eXBlLCBwYXJhbWV0ZXIuaXNfb3B0aW9u
YWwpOgorICAgICAgICAgICAgICAgIHBhcmFtZXRlcl92YWx1ZSA9ICdXVEZNb3ZlKCVzKScgJSBw
YXJhbWV0ZXJfdmFsdWUKKwogICAgICAgICAgICAgcGFyYW1fYXJncyA9IHsKLSAgICAgICAgICAg
ICAgICAna2V5ZWRTZXRNZXRob2QnOiBDcHBHZW5lcmF0b3IuY3BwX3NldHRlcl9tZXRob2RfZm9y
X3R5cGUocGFyYW1ldGVyLnR5cGUpLAorICAgICAgICAgICAgICAgICdrZXllZFNldE1ldGhvZCc6
IENwcEdlbmVyYXRvci5jcHBfc2V0dGVyX21ldGhvZF9mb3JfdHlwZShfdHlwZSksCiAgICAgICAg
ICAgICAgICAgJ3BhcmFtZXRlcktleSc6IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwKLSAgICAg
ICAgICAgICAgICAncGFyYW1ldGVyTmFtZSc6IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwKLSAg
ICAgICAgICAgICAgICAncGFyYW1ldGVyVHlwZSc6IENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3Jf
c3RhY2tfaW5fcGFyYW1ldGVyKHBhcmFtZXRlciksCi0gICAgICAgICAgICAgICAgJ2hlbHBlcnNO
YW1lc3BhY2UnOiBzZWxmLmhlbHBlcnNfbmFtZXNwYWNlKCksCisgICAgICAgICAgICAgICAgJ3Bh
cmFtZXRlck5hbWUnOiBwYXJhbWV0ZXJfbmFtZSwKKyAgICAgICAgICAgICAgICAncGFyYW1ldGVy
VmFsdWUnOiBwYXJhbWV0ZXJfdmFsdWUsCiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGZv
cm1hbF9wYXJhbWV0ZXJzLmFwcGVuZCgnJXMgJXMnICUgKENwcEdlbmVyYXRvci5jcHBfdHlwZV9m
b3JfZm9ybWFsX2FzeW5jX3BhcmFtZXRlcihwYXJhbWV0ZXIpLCBwYXJhbWV0ZXIucGFyYW1ldGVy
X25hbWUpKQorICAgICAgICAgICAgY2FsbGJhY2tfcGFyYW1ldGVycy5hcHBlbmQoJyVzICVzJyAl
IChDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX2NvbW1hbmRfcmV0dXJuX2FyZ3VtZW50KF90eXBl
LCBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwpLCBwYXJhbWV0ZXJfbmFtZSkpCiAKICAgICAgICAgICAg
IGlmIHBhcmFtZXRlci5pc19vcHRpb25hbDoKLSAgICAgICAgICAgICAgICBpZiBDcHBHZW5lcmF0
b3Iuc2hvdWxkX3VzZV93cmFwcGVyX2Zvcl9yZXR1cm5fdHlwZShwYXJhbWV0ZXIudHlwZSk6Ci0g
ICAgICAgICAgICAgICAgICAgIG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAg
aWYgKCUocGFyYW1ldGVyTmFtZSlzLmhhc1ZhbHVlKCkpJyAlIHBhcmFtX2FyZ3MpCi0gICAgICAg
ICAgICAgICAgICAgIG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAgICAgIGpz
b25NZXNzYWdlLT4lKGtleWVkU2V0TWV0aG9kKXMoIiUocGFyYW1ldGVyS2V5KXMiX3MsIColKHBh
cmFtZXRlck5hbWUpcyk7JyAlIHBhcmFtX2FyZ3MpCi0gICAgICAgICAgICAgICAgZWxzZToKLSAg
ICAgICAgICAgICAgICAgICAgb3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICBp
ZiAoJShwYXJhbWV0ZXJOYW1lKXMpJyAlIHBhcmFtX2FyZ3MpCi0gICAgICAgICAgICAgICAgICAg
IG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAgICAgIGpzb25NZXNzYWdlLT4l
KGtleWVkU2V0TWV0aG9kKXMoIiUocGFyYW1ldGVyS2V5KXMiX3MsICUocGFyYW1ldGVyTmFtZSlz
KTsnICUgcGFyYW1fYXJncykKLSAgICAgICAgICAgIGVsaWYgcGFyYW1ldGVyLnR5cGUuaXNfZW51
bSgpOgotICAgICAgICAgICAgICAgIG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcg
ICAganNvbk1lc3NhZ2UtPiUoa2V5ZWRTZXRNZXRob2QpcygiJShwYXJhbWV0ZXJLZXkpcyJfcywg
SW5zcGVjdG9yOjpQcm90b2NvbDo6JShoZWxwZXJzTmFtZXNwYWNlKXM6OmdldEVudW1Db25zdGFu
dFZhbHVlKCUocGFyYW1ldGVyTmFtZSlzKSk7JyAlIHBhcmFtX2FyZ3MpCisgICAgICAgICAgICAg
ICAgcmV0dXJuX2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAgIGlmICghISUocGFyYW1ldGVyTmFtZSlz
KScgJSBwYXJhbV9hcmdzKQorICAgICAgICAgICAgICAgIHJldHVybl9hc3NpZ25tZW50cy5hcHBl
bmQoJyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPiUoa2V5ZWRTZXRNZXRob2QpcygiJShw
YXJhbWV0ZXJLZXkpcyJfcywgJShwYXJhbWV0ZXJWYWx1ZSlzKTsnICUgcGFyYW1fYXJncykKICAg
ICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgb3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50
cy5hcHBlbmQoJyAgICBqc29uTWVzc2FnZS0+JShrZXllZFNldE1ldGhvZClzKCIlKHBhcmFtZXRl
cktleSlzIl9zLCAlKHBhcmFtZXRlck5hbWUpcyk7JyAlIHBhcmFtX2FyZ3MpCisgICAgICAgICAg
ICAgICAgcmV0dXJuX2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAgIHByb3RvY29sX2pzb25NZXNzYWdl
LT4lKGtleWVkU2V0TWV0aG9kKXMoIiUocGFyYW1ldGVyS2V5KXMiX3MsICUocGFyYW1ldGVyVmFs
dWUpcyk7JyAlIHBhcmFtX2FyZ3MpCiAKICAgICAgICAgYXN5bmNfYXJncyA9IHsKICAgICAgICAg
ICAgICdkb21haW5OYW1lJzogZG9tYWluLmRvbWFpbl9uYW1lLAogICAgICAgICAgICAgJ2NhbGxi
YWNrTmFtZSc6IHVjZmlyc3QoY29tbWFuZC5jb21tYW5kX25hbWUpICsgJ0NhbGxiYWNrJywKLSAg
ICAgICAgICAgICdmb3JtYWxQYXJhbWV0ZXJzJzogIiwgIi5qb2luKGZvcm1hbF9wYXJhbWV0ZXJz
KSwKLSAgICAgICAgICAgICdvdXRQYXJhbWV0ZXJBc3NpZ25tZW50cyc6ICJcbiIuam9pbihvdXRf
cGFyYW1ldGVyX2Fzc2lnbm1lbnRzKQorICAgICAgICAgICAgJ2NhbGxiYWNrUGFyYW1ldGVycyc6
ICIsICIuam9pbihjYWxsYmFja19wYXJhbWV0ZXJzKSwKKyAgICAgICAgICAgICdyZXR1cm5Bc3Np
Z25tZW50cyc6ICJcbiIuam9pbihyZXR1cm5fYXNzaWdubWVudHMpCiAgICAgICAgIH0KICAgICAg
ICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oY29tbWFuZC5jb25k
aXRpb24sIFRlbXBsYXRlKENwcFRlbXBsYXRlcy5CYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0
aW9uQXN5bmNDb21tYW5kKS5zdWJzdGl0dXRlKE5vbmUsICoqYXN5bmNfYXJncykpCiAKICAgICBk
ZWYgX2dlbmVyYXRlX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb25fZm9yX2NvbW1hbmQoc2VsZiwg
Y29tbWFuZCwgZG9tYWluKToKLSAgICAgICAgaW5fcGFyYW1ldGVyX2RlY2xhcmF0aW9ucyA9IFtd
Ci0gICAgICAgIG91dF9wYXJhbWV0ZXJfZGVjbGFyYXRpb25zID0gW10KLSAgICAgICAgb3V0X3Bh
cmFtZXRlcl9hc3NpZ25tZW50cyA9IFtdCi0gICAgICAgIGFsdGVybmF0ZV9kaXNwYXRjaGVyX21l
dGhvZF9wYXJhbWV0ZXJzID0gWydyZXF1ZXN0SWQnXQorICAgICAgICBwYXJhbWV0ZXJfZGVjbGFy
YXRpb25zID0gW10KKyAgICAgICAgcGFyYW1ldGVyX2VudW1fcmVzb2x1dGlvbnMgPSBbXQorICAg
ICAgICBhbHRlcm5hdGVfZGlzcGF0Y2hlcl9tZXRob2RfcGFyYW1ldGVycyA9IFsncHJvdG9jb2xf
Y2FsbElkJ10KICAgICAgICAgbWV0aG9kX3BhcmFtZXRlcnMgPSBbXQotICAgICAgICBpZiBub3Qg
Y29tbWFuZC5pc19hc3luYzoKLSAgICAgICAgICAgIG1ldGhvZF9wYXJhbWV0ZXJzLmFwcGVuZCgn
ZXJyb3InKQogCiAgICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gY29tbWFuZC5jYWxsX3BhcmFtZXRl
cnM6Ci0gICAgICAgICAgICBwYXJhbWV0ZXJfbmFtZSA9ICdpbl8nICsgcGFyYW1ldGVyLnBhcmFt
ZXRlcl9uYW1lCisgICAgICAgICAgICBwYXJhbWV0ZXJfbmFtZSA9IHBhcmFtZXRlci5wYXJhbWV0
ZXJfbmFtZQogICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgogICAgICAgICAg
ICAgICAgIHBhcmFtZXRlcl9uYW1lID0gJ29wdF8nICsgcGFyYW1ldGVyX25hbWUKKyAgICAgICAg
ICAgIHBhcmFtZXRlcl9uYW1lID0gJ2luXycgKyBwYXJhbWV0ZXJfbmFtZQogCi0gICAgICAgICAg
ICBvdXRfc3VjY2Vzc19hcmd1bWVudCA9ICdudWxscHRyJwotICAgICAgICAgICAgaWYgcGFyYW1l
dGVyLmlzX29wdGlvbmFsOgotICAgICAgICAgICAgICAgIG91dF9zdWNjZXNzX2FyZ3VtZW50ID0g
JyYlc192YWx1ZUZvdW5kJyAlIHBhcmFtZXRlcl9uYW1lCi0gICAgICAgICAgICAgICAgaW5fcGFy
YW1ldGVyX2RlY2xhcmF0aW9ucy5hcHBlbmQoJyAgICBib29sICVzX3ZhbHVlRm91bmQgPSBmYWxz
ZTsnICUgcGFyYW1ldGVyX25hbWUpCisgICAgICAgICAgICB2YXJpYWJsZV9uYW1lID0gcGFyYW1l
dGVyX25hbWUKIAotICAgICAgICAgICAgIyBOb3cgYWRkIGFwcHJvcHJpYXRlIG9wZXJhdG9ycy4K
LSAgICAgICAgICAgIHBhcmFtZXRlcl9leHByZXNzaW9uID0gcGFyYW1ldGVyX25hbWUKKyAgICAg
ICAgICAgIF90eXBlID0gcGFyYW1ldGVyLnR5cGUKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uo
X3R5cGUsIEFsaWFzZWRUeXBlKToKKyAgICAgICAgICAgICAgICBfdHlwZSA9IF90eXBlLmFsaWFz
ZWRfdHlwZQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgRW51bVR5cGUpIGFuZCBf
dHlwZS5pc19hbm9ueW1vdXM6CisgICAgICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5wcmltaXRp
dmVfdHlwZQogCi0gICAgICAgICAgICBpZiBDcHBHZW5lcmF0b3Iuc2hvdWxkX3VzZV9yZWZlcmVu
Y2VzX2Zvcl90eXBlKHBhcmFtZXRlci50eXBlKToKLSAgICAgICAgICAgICAgICBpZiBwYXJhbWV0
ZXIuaXNfb3B0aW9uYWw6Ci0gICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcl9leHByZXNzaW9u
ID0gJyVzLmdldCgpJyAlIHBhcmFtZXRlcl9leHByZXNzaW9uCi0gICAgICAgICAgICAgICAgZWxz
ZToKLSAgICAgICAgICAgICAgICAgICAgIyBUaGlzIGFzc3VtZXMgdGhhdCB3ZSBoYXZlIGFscmVh
ZHkgcHJvdmVkIHRoZSBvYmplY3QgaXMgbm9uLW51bGwuCi0gICAgICAgICAgICAgICAgICAgICMg
SWYgYSByZXF1aXJlZCBwcm9wZXJ0eSBpcyBtaXNzaW5nLCBJbnNwZWN0b3JCYWNrZW5kOjpnZXRP
YmplY3Qgd2lsbAotICAgICAgICAgICAgICAgICAgICAjIGFwcGVuZCBhIHByb3RvY29sIGVycm9y
LCBhbmQgdGhlIG1ldGhvZCBkaXNwYXRjaGVyIHdpbGwgcmV0dXJuIHdpdGhvdXQKLSAgICAgICAg
ICAgICAgICAgICAgIyBpbnZva2luZyB0aGUgYmFja2VuZCBtZXRob2QgKGFuZCBkZXJlZmVyZW5j
aW5nIHRoZSBvYmplY3QpLgotICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfZXhwcmVzc2lv
biA9ICcqJXMnICUgcGFyYW1ldGVyX2V4cHJlc3Npb24KLSAgICAgICAgICAgIGVsaWYgcGFyYW1l
dGVyLmlzX29wdGlvbmFsOgotICAgICAgICAgICAgICAgIHBhcmFtZXRlcl9leHByZXNzaW9uID0g
JyYlcycgJSBwYXJhbWV0ZXJfZXhwcmVzc2lvbgorICAgICAgICAgICAgaWYgX3R5cGUuaXNfZW51
bSgpOgorICAgICAgICAgICAgICAgIHBhcmFtZXRlcl9uYW1lID0gcGFyYW1ldGVyX25hbWUgKyAn
X2pzb24nCiAKLSAgICAgICAgICAgIHBhcmFtX2FyZ3MgPSB7Ci0gICAgICAgICAgICAgICAgJ3Bh
cmFtZXRlclR5cGUnOiBDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX3N0YWNrX2luX3BhcmFtZXRl
cihwYXJhbWV0ZXIpLAotICAgICAgICAgICAgICAgICdwYXJhbWV0ZXJLZXknOiBwYXJhbWV0ZXIu
cGFyYW1ldGVyX25hbWUsCi0gICAgICAgICAgICAgICAgJ3BhcmFtZXRlck5hbWUnOiBwYXJhbWV0
ZXJfbmFtZSwKLSAgICAgICAgICAgICAgICAncGFyYW1ldGVyRXhwcmVzc2lvbic6IHBhcmFtZXRl
cl9leHByZXNzaW9uLAotICAgICAgICAgICAgICAgICdrZXllZEdldE1ldGhvZCc6IENwcEdlbmVy
YXRvci5jcHBfZ2V0dGVyX21ldGhvZF9mb3JfdHlwZShwYXJhbWV0ZXIudHlwZSksCi0gICAgICAg
ICAgICAgICAgJ3N1Y2Nlc3NPdXRQYXJhbSc6IG91dF9zdWNjZXNzX2FyZ3VtZW50Ci0gICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgYWx0ZXJuYXRlX2Rpc3BhdGNoZXJfbWV0aG9kX3BhcmFt
ZXRlcnMuYXBwZW5kKHBhcmFtZXRlcl9uYW1lKQogCi0gICAgICAgICAgICBpbl9wYXJhbWV0ZXJf
ZGVjbGFyYXRpb25zLmFwcGVuZCgnICAgICUocGFyYW1ldGVyVHlwZSlzICUocGFyYW1ldGVyTmFt
ZSlzID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+JShrZXllZEdldE1ldGhvZClzKHBhcmFtZXRlcnMu
Z2V0KCksICIlKHBhcmFtZXRlcktleSlzIl9zLCAlKHN1Y2Nlc3NPdXRQYXJhbSlzKTsnICUgcGFy
YW1fYXJncykKLQotICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgotICAgICAg
ICAgICAgICAgIG9wdGlvbmFsX2luX3BhcmFtZXRlcl9zdHJpbmcgPSAnJShwYXJhbWV0ZXJOYW1l
KXNfdmFsdWVGb3VuZCA/ICUocGFyYW1ldGVyRXhwcmVzc2lvbilzIDogbnVsbHB0cicgJSBwYXJh
bV9hcmdzCi0gICAgICAgICAgICAgICAgYWx0ZXJuYXRlX2Rpc3BhdGNoZXJfbWV0aG9kX3BhcmFt
ZXRlcnMuYXBwZW5kKG9wdGlvbmFsX2luX3BhcmFtZXRlcl9zdHJpbmcpCi0gICAgICAgICAgICAg
ICAgbWV0aG9kX3BhcmFtZXRlcnMuYXBwZW5kKG9wdGlvbmFsX2luX3BhcmFtZXRlcl9zdHJpbmcp
Ci0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGFsdGVybmF0ZV9kaXNwYXRjaGVy
X21ldGhvZF9wYXJhbWV0ZXJzLmFwcGVuZChwYXJhbWV0ZXJfZXhwcmVzc2lvbikKLSAgICAgICAg
ICAgICAgICBtZXRob2RfcGFyYW1ldGVycy5hcHBlbmQocGFyYW1ldGVyX2V4cHJlc3Npb24pCi0K
LSAgICAgICAgaWYgY29tbWFuZC5pc19hc3luYzoKLSAgICAgICAgICAgIGFzeW5jX2FyZ3MgPSB7
Ci0gICAgICAgICAgICAgICAgJ2RvbWFpbk5hbWUnOiBkb21haW4uZG9tYWluX25hbWUsCi0gICAg
ICAgICAgICAgICAgJ2NhbGxiYWNrTmFtZSc6IHVjZmlyc3QoY29tbWFuZC5jb21tYW5kX25hbWUp
ICsgJ0NhbGxiYWNrJwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBvdXRfcGFyYW1ldGVy
X2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAgICAgICBjYWxsYmFjay0+ZGlzYWJsZSgpOycpCi0gICAg
ICAgICAgICBvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAgICAgICBtX2JhY2tl
bmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2
ZXJFcnJvciwgZXJyb3IpOycpCi0gICAgICAgICAgICBvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRz
LmFwcGVuZCgnICAgICAgICByZXR1cm47JykKLSAgICAgICAgICAgIG1ldGhvZF9wYXJhbWV0ZXJz
LmFwcGVuZCgnY2FsbGJhY2suY29weVJlZigpJykKLQotICAgICAgICBlbHNlOgotICAgICAgICAg
ICAgZm9yIHBhcmFtZXRlciBpbiBjb21tYW5kLnJldHVybl9wYXJhbWV0ZXJzOgotICAgICAgICAg
ICAgICAgIHBhcmFtX2FyZ3MgPSB7Ci0gICAgICAgICAgICAgICAgICAgICdwYXJhbWV0ZXJUeXBl
JzogQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl9zdGFja19vdXRfcGFyYW1ldGVyKHBhcmFtZXRl
ciksCi0gICAgICAgICAgICAgICAgICAgICdwYXJhbWV0ZXJLZXknOiBwYXJhbWV0ZXIucGFyYW1l
dGVyX25hbWUsCi0gICAgICAgICAgICAgICAgICAgICdwYXJhbWV0ZXJOYW1lJzogcGFyYW1ldGVy
LnBhcmFtZXRlcl9uYW1lLAotICAgICAgICAgICAgICAgICAgICAna2V5ZWRTZXRNZXRob2QnOiBD
cHBHZW5lcmF0b3IuY3BwX3NldHRlcl9tZXRob2RfZm9yX3R5cGUocGFyYW1ldGVyLnR5cGUpLAor
ICAgICAgICAgICAgICAgIGVudW1fYXJncyA9IHsKICAgICAgICAgICAgICAgICAgICAgJ2hlbHBl
cnNOYW1lc3BhY2UnOiBzZWxmLmhlbHBlcnNfbmFtZXNwYWNlKCksCisgICAgICAgICAgICAgICAg
ICAgICdwYXJhbWV0ZXJLZXknOiBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUsCisgICAgICAgICAg
ICAgICAgICAgICdlbnVtVHlwZSc6IENwcEdlbmVyYXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3Jf
dHlwZShfdHlwZSksCisgICAgICAgICAgICAgICAgICAgICdlbnVtVmFyaWFibGVOYW1lJzogdmFy
aWFibGVfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgJ3N0cmluZ1ZhcmlhYmxlTmFtZSc6IHBh
cmFtZXRlcl9uYW1lLAogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIG91dF9w
YXJhbWV0ZXJfZGVjbGFyYXRpb25zLmFwcGVuZCgnICAgICUocGFyYW1ldGVyVHlwZSlzIG91dF8l
KHBhcmFtZXRlck5hbWUpczsnICUgcGFyYW1fYXJncykKKyAgICAgICAgICAgICAgICBpZiBsZW4o
cGFyYW1ldGVyX2VudW1fcmVzb2x1dGlvbnMpOgorICAgICAgICAgICAgICAgICAgICBwYXJhbWV0
ZXJfZW51bV9yZXNvbHV0aW9ucy5hcHBlbmQoJycpCisgICAgICAgICAgICAgICAgcGFyYW1ldGVy
X2VudW1fcmVzb2x1dGlvbnMuYXBwZW5kKCcgICAgYXV0byAlKGVudW1WYXJpYWJsZU5hbWUpcyA9
IFByb3RvY29sOjolKGhlbHBlcnNOYW1lc3BhY2Upczo6cGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5n
PCUoZW51bVR5cGUpcz4oJShzdHJpbmdWYXJpYWJsZU5hbWUpcyk7JyAlIGVudW1fYXJncykKICAg
ICAgICAgICAgICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6Ci0gICAgICAgICAgICAgICAg
ICAgIGlmIENwcEdlbmVyYXRvci5zaG91bGRfdXNlX3dyYXBwZXJfZm9yX3JldHVybl90eXBlKHBh
cmFtZXRlci50eXBlKToKLSAgICAgICAgICAgICAgICAgICAgICAgIG91dF9wYXJhbWV0ZXJfYXNz
aWdubWVudHMuYXBwZW5kKCcgICAgICAgIGlmIChvdXRfJShwYXJhbWV0ZXJOYW1lKXMuaGFzVmFs
dWUoKSknICUgcGFyYW1fYXJncykKLSAgICAgICAgICAgICAgICAgICAgICAgIG91dF9wYXJhbWV0
ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAgICAgICAgICByZXN1bHQtPiUoa2V5ZWRTZXRNZXRo
b2QpcygiJShwYXJhbWV0ZXJLZXkpcyJfcywgKm91dF8lKHBhcmFtZXRlck5hbWUpcyk7JyAlIHBh
cmFtX2FyZ3MpCi0gICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAgICAgICBpZiAob3V0XyUo
cGFyYW1ldGVyTmFtZSlzKScgJSBwYXJhbV9hcmdzKQotICAgICAgICAgICAgICAgICAgICAgICAg
b3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICAgICAgICAgIHJlc3VsdC0+JShr
ZXllZFNldE1ldGhvZClzKCIlKHBhcmFtZXRlcktleSlzIl9zLCBvdXRfJShwYXJhbWV0ZXJOYW1l
KXMpOycgJSBwYXJhbV9hcmdzKQotICAgICAgICAgICAgICAgIGVsaWYgcGFyYW1ldGVyLnR5cGUu
aXNfZW51bSgpOgotICAgICAgICAgICAgICAgICAgICBvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRz
LmFwcGVuZCgnICAgICAgICByZXN1bHQtPiUoa2V5ZWRTZXRNZXRob2QpcygiJShwYXJhbWV0ZXJL
ZXkpcyJfcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6JShoZWxwZXJzTmFtZXNwYWNlKXM6OmdldEVu
dW1Db25zdGFudFZhbHVlKG91dF8lKHBhcmFtZXRlck5hbWUpcykpOycgJSBwYXJhbV9hcmdzKQor
ICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfZXhwcmVzc2lvbiA9ICdXVEZNb3ZlKCVzKScg
JSB2YXJpYWJsZV9uYW1lCiAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAg
ICAgb3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICAgICAgcmVzdWx0LT4lKGtl
eWVkU2V0TWV0aG9kKXMoIiUocGFyYW1ldGVyS2V5KXMiX3MsIG91dF8lKHBhcmFtZXRlck5hbWUp
cyk7JyAlIHBhcmFtX2FyZ3MpCisgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcl9lbnVtX3Jl
c29sdXRpb25zLmFwcGVuZCgnICAgIGlmICghJShlbnVtVmFyaWFibGVOYW1lKXMpIHsnICUgZW51
bV9hcmdzKQorICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfZW51bV9yZXNvbHV0aW9ucy5h
cHBlbmQoJyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihC
YWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIG1ha2VTdHJpbmcoIlVua25vd24gJShwYXJh
bWV0ZXJLZXkpczogIl9zLCAlKHN0cmluZ1ZhcmlhYmxlTmFtZSlzKSk7JyAlIGVudW1fYXJncykK
KyAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyX2VudW1fcmVzb2x1dGlvbnMuYXBwZW5kKCcg
ICAgICAgIHJldHVybjsnKQorICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfZW51bV9yZXNv
bHV0aW9ucy5hcHBlbmQoJyAgICB9JykKKyAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyX2V4
cHJlc3Npb24gPSAnKicgKyB2YXJpYWJsZV9uYW1lCisgICAgICAgICAgICBlbHNlOgorICAgICAg
ICAgICAgICAgIGlmIF90eXBlLnJhd19uYW1lKCkgPT0gJ3N0cmluZyc6CisgICAgICAgICAgICAg
ICAgICAgIHBhcmFtZXRlcl9leHByZXNzaW9uID0gdmFyaWFibGVfbmFtZQorICAgICAgICAgICAg
ICAgIGVsaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAgICAgICBwYXJh
bWV0ZXJfZXhwcmVzc2lvbiA9ICdXVEZNb3ZlKCVzKScgJSB2YXJpYWJsZV9uYW1lCisgICAgICAg
ICAgICAgICAgZWxpZiBfdHlwZS5yYXdfbmFtZSgpIGluIFsnYm9vbGVhbicsICdpbnRlZ2VyJywg
J251bWJlciddOgorICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfZXhwcmVzc2lvbiA9ICcq
JyArIHZhcmlhYmxlX25hbWUKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAg
ICAgICBwYXJhbWV0ZXJfZXhwcmVzc2lvbiA9IHZhcmlhYmxlX25hbWUgKyAnLnJlbGVhc2VOb25O
dWxsKCknCisgICAgICAgICAgICAgICAgYWx0ZXJuYXRlX2Rpc3BhdGNoZXJfbWV0aG9kX3BhcmFt
ZXRlcnMuYXBwZW5kKHBhcmFtZXRlcl9leHByZXNzaW9uKQorICAgICAgICAgICAgbWV0aG9kX3Bh
cmFtZXRlcnMuYXBwZW5kKHBhcmFtZXRlcl9leHByZXNzaW9uKQogCi0gICAgICAgICAgICAgICAg
aWYgQ3BwR2VuZXJhdG9yLnNob3VsZF9wYXNzX2J5X2NvcHlfZm9yX3JldHVybl90eXBlKHBhcmFt
ZXRlci50eXBlKSBvciBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwgYW5kIENwcEdlbmVyYXRvci5zaG91
bGRfdXNlX3dyYXBwZXJfZm9yX3JldHVybl90eXBlKHBhcmFtZXRlci50eXBlKToKLSAgICAgICAg
ICAgICAgICAgICAgbWV0aG9kX3BhcmFtZXRlcnMuYXBwZW5kKCdvdXRfJyArIHBhcmFtZXRlci5w
YXJhbWV0ZXJfbmFtZSkKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAg
ICBtZXRob2RfcGFyYW1ldGVycy5hcHBlbmQoJyZvdXRfJyArIHBhcmFtZXRlci5wYXJhbWV0ZXJf
bmFtZSkKKyAgICAgICAgICAgIHBhcmFtX2FyZ3MgPSB7CisgICAgICAgICAgICAgICAgJ3BhcmFt
ZXRlcktleSc6IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwKKyAgICAgICAgICAgICAgICAncGFy
YW1ldGVyTmFtZSc6IHBhcmFtZXRlcl9uYW1lLAorICAgICAgICAgICAgICAgICdrZXllZEdldE1l
dGhvZCc6IENwcEdlbmVyYXRvci5jcHBfZ2V0dGVyX21ldGhvZF9mb3JfdHlwZShfdHlwZSksCisg
ICAgICAgICAgICAgICAgJ3JlcXVpcmVkJzogJ2ZhbHNlJyBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9u
YWwgZWxzZSAndHJ1ZScsCisgICAgICAgICAgICB9CisgICAgICAgICAgICBwYXJhbWV0ZXJfZGVj
bGFyYXRpb25zLmFwcGVuZCgnICAgIGF1dG8gJShwYXJhbWV0ZXJOYW1lKXMgPSBtX2JhY2tlbmRE
aXNwYXRjaGVyLT4lKGtleWVkR2V0TWV0aG9kKXMocHJvdG9jb2xfcGFyYW1ldGVycy5nZXQoKSwg
IiUocGFyYW1ldGVyS2V5KXMiX3MsICUocmVxdWlyZWQpcyk7JyAlIHBhcmFtX2FyZ3MpCisKKyAg
ICAgICAgaWYgY29tbWFuZC5pc19hc3luYzoKKyAgICAgICAgICAgIG1ldGhvZF9wYXJhbWV0ZXJz
LmFwcGVuZCgnYWRvcHRSZWYoKm5ldyAlc0JhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6JXMobV9i
YWNrZW5kRGlzcGF0Y2hlci5jb3B5UmVmKCksIHByb3RvY29sX2NhbGxJZCkpJyAlIChkb21haW4u
ZG9tYWluX25hbWUsICclc0NhbGxiYWNrJyAlIHVjZmlyc3QoY29tbWFuZC5jb21tYW5kX25hbWUp
KSkKIAogICAgICAgICBjb21tYW5kX2FyZ3MgPSB7CiAgICAgICAgICAgICAnZG9tYWluTmFtZSc6
IGRvbWFpbi5kb21haW5fbmFtZSwKLSAgICAgICAgICAgICdjYWxsYmFja05hbWUnOiAnJXNDYWxs
YmFjaycgJSB1Y2ZpcnN0KGNvbW1hbmQuY29tbWFuZF9uYW1lKSwKICAgICAgICAgICAgICdjb21t
YW5kTmFtZSc6IGNvbW1hbmQuY29tbWFuZF9uYW1lLAotICAgICAgICAgICAgJ2luUGFyYW1ldGVy
RGVjbGFyYXRpb25zJzogJ1xuJy5qb2luKGluX3BhcmFtZXRlcl9kZWNsYXJhdGlvbnMpLAorICAg
ICAgICAgICAgJ3BhcmFtZXRlckRlY2xhcmF0aW9ucyc6ICdcbicuam9pbihwYXJhbWV0ZXJfZGVj
bGFyYXRpb25zKSwKICAgICAgICAgICAgICdpbnZvY2F0aW9uUGFyYW1ldGVycyc6ICcsICcuam9p
bihtZXRob2RfcGFyYW1ldGVycyksCiAgICAgICAgICAgICAnYWx0ZXJuYXRlSW52b2NhdGlvblBh
cmFtZXRlcnMnOiAnLCAnLmpvaW4oYWx0ZXJuYXRlX2Rpc3BhdGNoZXJfbWV0aG9kX3BhcmFtZXRl
cnMpLAogICAgICAgICB9CiAKICAgICAgICAgbGluZXMgPSBbXQogICAgICAgICBpZiBsZW4oY29t
bWFuZC5jYWxsX3BhcmFtZXRlcnMpID09IDA6Ci0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ3Zv
aWQgJShkb21haW5OYW1lKXNCYWNrZW5kRGlzcGF0Y2hlcjo6JShjb21tYW5kTmFtZSlzKGxvbmcg
cmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKScgJSBjb21tYW5kX2FyZ3MpCisgICAg
ICAgICAgICBsaW5lcy5hcHBlbmQoJ3ZvaWQgJShkb21haW5OYW1lKXNCYWNrZW5kRGlzcGF0Y2hl
cjo6JShjb21tYW5kTmFtZSlzKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiYmKScgJSBjb21tYW5kX2FyZ3MpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBsaW5l
cy5hcHBlbmQoJ3ZvaWQgJShkb21haW5OYW1lKXNCYWNrZW5kRGlzcGF0Y2hlcjo6JShjb21tYW5k
TmFtZSlzKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMp
JyAlIGNvbW1hbmRfYXJncykKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgndm9pZCAlKGRvbWFp
bk5hbWUpc0JhY2tlbmREaXNwYXRjaGVyOjolKGNvbW1hbmROYW1lKXMobG9uZyBwcm90b2NvbF9j
YWxsSWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfcGFyYW1ldGVycyknICUgY29t
bWFuZF9hcmdzKQogICAgICAgICBsaW5lcy5hcHBlbmQoJ3snKQogCiAgICAgICAgIGlmIGxlbihj
b21tYW5kLmNhbGxfcGFyYW1ldGVycykgPiAwOgpAQCAtMzE5LDMxICszMDYsNzEgQEAgY2xhc3Mg
Q3BwQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihDcHBHZW5lcmF0b3Ip
OgogICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9B
TFRFUk5BVEVfRElTUEFUQ0hFUlMpJykKICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnJykKIAor
ICAgICAgICBpZiBsZW4ocGFyYW1ldGVyX2VudW1fcmVzb2x1dGlvbnMpOgorICAgICAgICAgICAg
bGluZXMuZXh0ZW5kKHBhcmFtZXRlcl9lbnVtX3Jlc29sdXRpb25zKQorICAgICAgICAgICAgbGlu
ZXMuYXBwZW5kKCcnKQorCiAgICAgICAgIGlmIGNvbW1hbmQuaXNfYXN5bmM6Ci0gICAgICAgICAg
ICBsaW5lcy5hcHBlbmQoJyAgICBSZWY8JShkb21haW5OYW1lKXNCYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXI6OiUoY2FsbGJhY2tOYW1lKXM+IGNhbGxiYWNrID0gYWRvcHRSZWYoKm5ldyAlKGRvbWFp
bk5hbWUpc0JhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6JShjYWxsYmFja05hbWUpcyhtX2JhY2tl
bmREaXNwYXRjaGVyLmNvcHlSZWYoKSwgcmVxdWVzdElkKSk7JyAlIGNvbW1hbmRfYXJncykKKyAg
ICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIG1fYWdlbnQtPiUoY29tbWFuZE5hbWUpcyglKGlu
dm9jYXRpb25QYXJhbWV0ZXJzKXMpOycgJSBjb21tYW5kX2FyZ3MpCiAgICAgICAgIGVsc2U6Ci0g
ICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBFcnJvclN0cmluZyBlcnJvcjsnKQotICAgICAg
ICAgICAgbGluZXMuYXBwZW5kKCcgICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6
T2JqZWN0OjpjcmVhdGUoKTsnKQorICAgICAgICAgICAgcmVzdWx0X2V4dHJhY3Rpb25fbmFtZXMg
PSBbXQorICAgICAgICAgICAgcmVzdWx0X2NvbnZlcnNpb25fbGluZXMgPSBbXQorICAgICAgICAg
ICAgZm9yIHBhcmFtZXRlciBpbiBjb21tYW5kLnJldHVybl9wYXJhbWV0ZXJzOgorICAgICAgICAg
ICAgICAgIHBhcmFtZXRlcl9uYW1lID0gcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lCisgICAgICAg
ICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAgICAgICBw
YXJhbWV0ZXJfbmFtZSA9ICdvcHRfJyArIHBhcmFtZXRlcl9uYW1lCisgICAgICAgICAgICAgICAg
cGFyYW1ldGVyX25hbWUgPSAnb3V0XycgKyBwYXJhbWV0ZXJfbmFtZQogCi0gICAgICAgIGlmIGxl
bihjb21tYW5kLnJldHVybl9wYXJhbWV0ZXJzKSA+IDA6Ci0gICAgICAgICAgICBsaW5lcy5leHRl
bmQob3V0X3BhcmFtZXRlcl9kZWNsYXJhdGlvbnMpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAg
IG1fYWdlbnQtPiUoY29tbWFuZE5hbWUpcyglKGludm9jYXRpb25QYXJhbWV0ZXJzKXMpOycgJSBj
b21tYW5kX2FyZ3MpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnJykKKyAgICAgICAgICAgICAgICBy
ZXN1bHRfZXh0cmFjdGlvbl9uYW1lcy5hcHBlbmQocGFyYW1ldGVyX25hbWUpCiAKLSAgICAgICAg
aWYgbm90IGNvbW1hbmQuaXNfYXN5bmM6Ci0gICAgICAgICAgICBpZiBsZW4oY29tbWFuZC5yZXR1
cm5fcGFyYW1ldGVycykgPiAxOgotICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGlm
ICghZXJyb3IubGVuZ3RoKCkpIHsnKQotICAgICAgICAgICAgICAgIGxpbmVzLmV4dGVuZChvdXRf
cGFyYW1ldGVyX2Fzc2lnbm1lbnRzKQotICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAg
IH0nKQotICAgICAgICAgICAgZWxpZiBsZW4oY29tbWFuZC5yZXR1cm5fcGFyYW1ldGVycykgPT0g
MToKLSAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBpZiAoIWVycm9yLmxlbmd0aCgp
KScpCi0gICAgICAgICAgICAgICAgbGluZXMuZXh0ZW5kKG91dF9wYXJhbWV0ZXJfYXNzaWdubWVu
dHMpCisgICAgICAgICAgICAgICAgcGFyYW1ldGVyX3ZhbHVlID0gcGFyYW1ldGVyX25hbWUKKwor
ICAgICAgICAgICAgICAgIF90eXBlID0gcGFyYW1ldGVyLnR5cGUKKyAgICAgICAgICAgICAgICBp
ZiBpc2luc3RhbmNlKF90eXBlLCBBbGlhc2VkVHlwZSk6CisgICAgICAgICAgICAgICAgICAgIF90
eXBlID0gX3R5cGUuYWxpYXNlZF90eXBlCisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShf
dHlwZSwgRW51bVR5cGUpIGFuZCBfdHlwZS5pc19hbm9ueW1vdXM6CisgICAgICAgICAgICAgICAg
ICAgIF90eXBlID0gX3R5cGUucHJpbWl0aXZlX3R5cGUKKworICAgICAgICAgICAgICAgIGlmIF90
eXBlLmlzX2VudW0oKToKKyAgICAgICAgICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlv
bmFsOgorICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyX3ZhbHVlID0gJyonICsgcGFy
YW1ldGVyX3ZhbHVlCisgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcl92YWx1ZSA9ICdQcm90
b2NvbDo6JXM6OmdldEVudW1Db25zdGFudFZhbHVlKCVzKScgJSAoc2VsZi5oZWxwZXJzX25hbWVz
cGFjZSgpLCBwYXJhbWV0ZXJfdmFsdWUpCisgICAgICAgICAgICAgICAgZWxpZiBDcHBHZW5lcmF0
b3Iuc2hvdWxkX3JlbGVhc2VfYXJndW1lbnQoX3R5cGUsIHBhcmFtZXRlci5pc19vcHRpb25hbCk6
CisgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcl92YWx1ZSA9IHBhcmFtZXRlcl92YWx1ZSAr
ICcucmVsZWFzZU5vbk51bGwoKScKKyAgICAgICAgICAgICAgICBlbGlmIENwcEdlbmVyYXRvci5z
aG91bGRfZGVyZWZlcmVuY2VfYXJndW1lbnQoX3R5cGUsIHBhcmFtZXRlci5pc19vcHRpb25hbCk6
CisgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcl92YWx1ZSA9ICcqJyArIHBhcmFtZXRlcl92
YWx1ZQorICAgICAgICAgICAgICAgIGVsaWYgQ3BwR2VuZXJhdG9yLnNob3VsZF9tb3ZlX2FyZ3Vt
ZW50KF90eXBlLCBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwpOgorICAgICAgICAgICAgICAgICAgICBw
YXJhbWV0ZXJfdmFsdWUgPSAnV1RGTW92ZSglcyknICUgcGFyYW1ldGVyX3ZhbHVlCisKKyAgICAg
ICAgICAgICAgICBwYXJhbV9hcmdzID0geworICAgICAgICAgICAgICAgICAgICAna2V5ZWRTZXRN
ZXRob2QnOiBDcHBHZW5lcmF0b3IuY3BwX3NldHRlcl9tZXRob2RfZm9yX3R5cGUoX3R5cGUpLAor
ICAgICAgICAgICAgICAgICAgICAncGFyYW1ldGVyS2V5JzogcGFyYW1ldGVyLnBhcmFtZXRlcl9u
YW1lLAorICAgICAgICAgICAgICAgICAgICAncGFyYW1ldGVyTmFtZSc6IHBhcmFtZXRlcl9uYW1l
LAorICAgICAgICAgICAgICAgICAgICAncGFyYW1ldGVyVmFsdWUnOiBwYXJhbWV0ZXJfdmFsdWUs
CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29w
dGlvbmFsOgorICAgICAgICAgICAgICAgICAgICByZXN1bHRfY29udmVyc2lvbl9saW5lcy5hcHBl
bmQoJyAgICBpZiAoISElKHBhcmFtZXRlck5hbWUpcyknICUgcGFyYW1fYXJncykKKyAgICAgICAg
ICAgICAgICAgICAgcmVzdWx0X2NvbnZlcnNpb25fbGluZXMuYXBwZW5kKCcgICAgICAgIHByb3Rv
Y29sX2pzb25NZXNzYWdlLT4lKGtleWVkU2V0TWV0aG9kKXMoIiUocGFyYW1ldGVyS2V5KXMiX3Ms
ICUocGFyYW1ldGVyVmFsdWUpcyk7JyAlIHBhcmFtX2FyZ3MpCisgICAgICAgICAgICAgICAgZWxz
ZToKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0X2NvbnZlcnNpb25fbGluZXMuYXBwZW5kKCcg
ICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPiUoa2V5ZWRTZXRNZXRob2QpcygiJShwYXJhbWV0ZXJL
ZXkpcyJfcywgJShwYXJhbWV0ZXJWYWx1ZSlzKTsnICUgcGFyYW1fYXJncykKKworICAgICAgICAg
ICAgbGluZXMuYXBwZW5kKCcgICAgYXV0byByZXN1bHQgPSBtX2FnZW50LT4lKGNvbW1hbmROYW1l
KXMoJShpbnZvY2F0aW9uUGFyYW1ldGVycylzKTsnICUgY29tbWFuZF9hcmdzKQorICAgICAgICAg
ICAgbGluZXMuYXBwZW5kKCcgICAgaWYgKCFyZXN1bHQpIHsnKQorICAgICAgICAgICAgbGluZXMu
YXBwZW5kKCcgICAgICAgIEFTU0VSVCghcmVzdWx0LmVycm9yKCkuaXNFbXB0eSgpKTsnKQorICAg
ICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9y
dFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCByZXN1bHQuZXJy
b3IoKSk7JykKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICByZXR1cm47JykKKyAg
ICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIH0nKQorICAgICAgICAgICAgbGluZXMuYXBwZW5k
KCcnKQorICAgICAgICAgICAgaWYgbGVuKHJlc3VsdF9leHRyYWN0aW9uX25hbWVzKSA9PSAxOgor
ICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGF1dG8gJXMgPSBXVEZNb3ZlKHJlc3Vs
dC52YWx1ZSgpKTsnICUgcmVzdWx0X2V4dHJhY3Rpb25fbmFtZXNbMF0pCiAgICAgICAgICAgICAg
ICAgbGluZXMuYXBwZW5kKCcnKQotCi0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBpZiAo
IWVycm9yLmxlbmd0aCgpKScpCi0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgbV9i
YWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQp
LCBmYWxzZSk7JykKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGVsc2UnKQotICAgICAg
ICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFBy
b3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9y
KSk7JykKKyAgICAgICAgICAgIGVsaWYgbGVuKHJlc3VsdF9leHRyYWN0aW9uX25hbWVzKSA+IDE6
CisgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgYXV0byBbJXNdID0gV1RGTW92ZShy
ZXN1bHQudmFsdWUoKSk7JyAlICIsICIuam9pbihyZXN1bHRfZXh0cmFjdGlvbl9uYW1lcykpCisg
ICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcnKQorICAgICAgICAgICAgbGluZXMuYXBwZW5k
KCcgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7
JykKKyAgICAgICAgICAgIGxpbmVzLmV4dGVuZChyZXN1bHRfY29udmVyc2lvbl9saW5lcykKKyAg
ICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNw
b25zZShwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJvdG9jb2xfanNvbk1lc3NhZ2UpLCBmYWxz
ZSk7JykKIAogICAgICAgICBsaW5lcy5hcHBlbmQoJ30nKQogICAgICAgICByZXR1cm4gc2VsZi53
cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihjb21tYW5kLmNvbmRpdGlvbiwgIlxuIi5qb2lu
KGxpbmVzKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9mcm9udGVuZF9kaXNwYXRjaGVyX2hlYWRlci5weSBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRl
X2NwcF9mcm9udGVuZF9kaXNwYXRjaGVyX2hlYWRlci5weQppbmRleCAxMTlkMjNjMzhjZGYyNGNm
NTZkMGZmYzY2ZDU3YjhhM2Q0ZTJkYTQ0Li5iZWFhMTdjOTgxNTRiN2VlMjJlM2I1Yjk3NmQwMTgz
OTQwYTQ2OTEzIDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfZnJvbnRlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2Vu
ZXJhdGVfY3BwX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5CkBAIC03Myw5ICs3Myw5IEBA
IGNsYXNzIENwcEZyb250ZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvcihDcHBHZW5lcmF0b3Ip
OgogICAgICAgICBoZWFkZXJfaW5jbHVkZXMgPSBbCiAgICAgICAgICAgICAoWyJKYXZhU2NyaXB0
Q29yZSIsICJXZWJLaXQiXSwgKHNlbGYubW9kZWwoKS5mcmFtZXdvcmsubmFtZSwgIiVzUHJvdG9j
b2xPYmplY3RzLmgiICUgc2VsZi5wcm90b2NvbF9uYW1lKCkpKSwKICAgICAgICAgICAgIChbIkph
dmFTY3JpcHRDb3JlIiwgIldlYktpdCJdLCAoIldURiIsICJ3dGYvSlNPTlZhbHVlcy5oIikpLAot
ICAgICAgICAgICAgKFsiSmF2YVNjcmlwdENvcmUiLCAiV2ViS2l0Il0sICgiV1RGIiwgInd0Zi90
ZXh0L1dURlN0cmluZy5oIikpCisgICAgICAgICAgICAoWyJKYXZhU2NyaXB0Q29yZSIsICJXZWJL
aXQiXSwgKCJXVEYiLCAid3RmL09wdGlvbmFsLmgiKSksCisgICAgICAgICAgICAoWyJKYXZhU2Ny
aXB0Q29yZSIsICJXZWJLaXQiXSwgKCJXVEYiLCAid3RmL3RleHQvV1RGU3RyaW5nLmgiKSksCiAg
ICAgICAgIF0KLQogICAgICAgICByZXR1cm4gJ1xuJy5qb2luKHNlbGYuZ2VuZXJhdGVfaW5jbHVk
ZXNfZnJvbV9lbnRyaWVzKGhlYWRlcl9pbmNsdWRlcykpCiAKICAgICBkZWYgX2dlbmVyYXRlX2Fu
b255bW91c19lbnVtX2Zvcl9wYXJhbWV0ZXIoc2VsZiwgcGFyYW1ldGVyLCBldmVudCk6CkBAIC0x
MTcsOCArMTE3LDEzIEBAIGNsYXNzIENwcEZyb250ZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRv
cihDcHBHZW5lcmF0b3IpOgogICAgICAgICBmb3JtYWxfcGFyYW1ldGVycyA9IFtdCiAgICAgICAg
IGxpbmVzID0gW10KICAgICAgICAgZm9yIHBhcmFtZXRlciBpbiBldmVudC5ldmVudF9wYXJhbWV0
ZXJzOgotICAgICAgICAgICAgZm9ybWFsX3BhcmFtZXRlcnMuYXBwZW5kKCclcyAlcycgJSAoQ3Bw
R2VuZXJhdG9yLmNwcF90eXBlX2Zvcl9jaGVja2VkX2Zvcm1hbF9ldmVudF9wYXJhbWV0ZXIocGFy
YW1ldGVyKSwgcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKSkKLSAgICAgICAgICAgIGlmIGlzaW5z
dGFuY2UocGFyYW1ldGVyLnR5cGUsIEVudW1UeXBlKSBhbmQgcGFyYW1ldGVyLnBhcmFtZXRlcl9u
YW1lIG5vdCBpbiB1c2VkX2VudW1fbmFtZXM6CisgICAgICAgICAgICBwYXJhbWV0ZXJfbmFtZSA9
IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZQorICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29w
dGlvbmFsOgorICAgICAgICAgICAgICAgIHBhcmFtZXRlcl9uYW1lID0gJ29wdF8nICsgcGFyYW1l
dGVyX25hbWUKKworICAgICAgICAgICAgZm9ybWFsX3BhcmFtZXRlcnMuYXBwZW5kKCclcyAlcycg
JSAoQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl9ldmVudF9wYXJhbWV0ZXIocGFyYW1ldGVyLnR5
cGUsIHBhcmFtZXRlci5pc19vcHRpb25hbCksIHBhcmFtZXRlcl9uYW1lKSkKKworICAgICAgICAg
ICAgaWYgaXNpbnN0YW5jZShwYXJhbWV0ZXIudHlwZSwgRW51bVR5cGUpIGFuZCBwYXJhbWV0ZXIu
dHlwZS5pc19hbm9ueW1vdXMgYW5kIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSBub3QgaW4gdXNl
ZF9lbnVtX25hbWVzOgogICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0
ZV9hbm9ueW1vdXNfZW51bV9mb3JfcGFyYW1ldGVyKHBhcmFtZXRlciwgZXZlbnQpKQogICAgICAg
ICAgICAgICAgIHVzZWRfZW51bV9uYW1lcy5hZGQocGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29k
ZWdlbi9nZW5lcmF0ZV9jcHBfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRl
X2NwcF9mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5CmluZGV4IDY2ZGM2ZTE4
NWNmZTJiNjFiMWVjYTc3NTczY2UxNjc0ZTZiMzVhNDkuLjc2M2UwMWRmYjc4Y2RlYzhkNjAzMGQy
ZWRjMzUwNTQ4OTE3Njk4MGMgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9mcm9udGVuZF9kaXNwYXRjaGVyX2lt
cGxlbWVudGF0aW9uLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0
aW9uLnB5CkBAIC0zMywxMiArMzMsMTIgQEAgdHJ5OgogICAgIGZyb20gLmNwcF9nZW5lcmF0b3Ig
aW1wb3J0IENwcEdlbmVyYXRvcgogICAgIGZyb20gLmNwcF9nZW5lcmF0b3JfdGVtcGxhdGVzIGlt
cG9ydCBDcHBHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgQ3BwVGVtcGxhdGVzCiAgICAgZnJvbSAuZ2Vu
ZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IsIHVjZmlyc3QKLSAgICBmcm9tIC5tb2RlbHMgaW1wb3J0
IE9iamVjdFR5cGUsIEFycmF5VHlwZQorICAgIGZyb20gLm1vZGVscyBpbXBvcnQgT2JqZWN0VHlw
ZSwgQXJyYXlUeXBlLCBBbGlhc2VkVHlwZSwgRW51bVR5cGUKIGV4Y2VwdDoKICAgICBmcm9tIGNw
cF9nZW5lcmF0b3IgaW1wb3J0IENwcEdlbmVyYXRvcgogICAgIGZyb20gY3BwX2dlbmVyYXRvcl90
ZW1wbGF0ZXMgaW1wb3J0IENwcEdlbmVyYXRvclRlbXBsYXRlcyBhcyBDcHBUZW1wbGF0ZXMKICAg
ICBmcm9tIGdlbmVyYXRvciBpbXBvcnQgR2VuZXJhdG9yLCB1Y2ZpcnN0Ci0gICAgZnJvbSBtb2Rl
bHMgaW1wb3J0IE9iamVjdFR5cGUsIEFycmF5VHlwZQorICAgIGZyb20gbW9kZWxzIGltcG9ydCBP
YmplY3RUeXBlLCBBcnJheVR5cGUsIEFsaWFzZWRUeXBlLCBFbnVtVHlwZQogCiBsb2cgPSBsb2dn
aW5nLmdldExvZ2dlcignZ2xvYmFsJykKIApAQCAtNzEsOSArNzEsNyBAQCBjbGFzcyBDcHBGcm9u
dGVuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAg
IGRlZiBfZ2VuZXJhdGVfc2Vjb25kYXJ5X2hlYWRlcl9pbmNsdWRlcyhzZWxmKToKICAgICAgICAg
aGVhZGVyX2luY2x1ZGVzID0gWwogICAgICAgICAgICAgKFsiSmF2YVNjcmlwdENvcmUiLCAiV2Vi
S2l0Il0sICgiSmF2YVNjcmlwdENvcmUiLCAiaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kUm91
dGVyLmgiKSksCi0gICAgICAgICAgICAoWyJKYXZhU2NyaXB0Q29yZSIsICJXZWJLaXQiXSwgKCJX
VEYiLCAid3RmL3RleHQvQ1N0cmluZy5oIikpCiAgICAgICAgIF0KLQogICAgICAgICByZXR1cm4g
J1xuJy5qb2luKHNlbGYuZ2VuZXJhdGVfaW5jbHVkZXNfZnJvbV9lbnRyaWVzKGhlYWRlcl9pbmNs
dWRlcykpCiAKICAgICBkZWYgX2dlbmVyYXRlX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb25zX2Zv
cl9kb21haW4oc2VsZiwgZG9tYWluKToKQEAgLTkwLDI3ICs4OCw0MyBAQCBjbGFzcyBDcHBGcm9u
dGVuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAg
ICAgICBmb3JtYWxfcGFyYW1ldGVycyA9IFtdCiAKICAgICAgICAgZm9yIHBhcmFtZXRlciBpbiBl
dmVudC5ldmVudF9wYXJhbWV0ZXJzOgorICAgICAgICAgICAgcGFyYW1ldGVyX25hbWUgPSBwYXJh
bWV0ZXIucGFyYW1ldGVyX25hbWUKKyAgICAgICAgICAgIGlmIHBhcmFtZXRlci5pc19vcHRpb25h
bDoKKyAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfbmFtZSA9ICdvcHRfJyArIHBhcmFtZXRlcl9u
YW1lCiAKLSAgICAgICAgICAgIHBhcmFtZXRlcl92YWx1ZSA9IHBhcmFtZXRlci5wYXJhbWV0ZXJf
bmFtZQotICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsIGFuZCBub3QgQ3BwR2Vu
ZXJhdG9yLnNob3VsZF9wYXNzX2J5X2NvcHlfZm9yX3JldHVybl90eXBlKHBhcmFtZXRlci50eXBl
KToKKyAgICAgICAgICAgIHBhcmFtZXRlcl92YWx1ZSA9IHBhcmFtZXRlcl9uYW1lCisKKyAgICAg
ICAgICAgIF90eXBlID0gcGFyYW1ldGVyLnR5cGUKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uo
X3R5cGUsIEFsaWFzZWRUeXBlKToKKyAgICAgICAgICAgICAgICBfdHlwZSA9IF90eXBlLmFsaWFz
ZWRfdHlwZQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgRW51bVR5cGUpIGFuZCBf
dHlwZS5pc19hbm9ueW1vdXM6CisgICAgICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5wcmltaXRp
dmVfdHlwZQorCisgICAgICAgICAgICBpZiBfdHlwZS5pc19lbnVtKCk6CisgICAgICAgICAgICAg
ICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAgICAgICBwYXJhbWV0
ZXJfdmFsdWUgPSAnKicgKyBwYXJhbWV0ZXJfdmFsdWUKKyAgICAgICAgICAgICAgICBwYXJhbWV0
ZXJfdmFsdWUgPSAnUHJvdG9jb2w6OiVzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZSglcyknICUgKHNl
bGYuaGVscGVyc19uYW1lc3BhY2UoKSwgcGFyYW1ldGVyX3ZhbHVlKQorICAgICAgICAgICAgZWxp
ZiBDcHBHZW5lcmF0b3Iuc2hvdWxkX3JlbGVhc2VfYXJndW1lbnQoX3R5cGUsIHBhcmFtZXRlci5p
c19vcHRpb25hbCk6CisgICAgICAgICAgICAgICAgcGFyYW1ldGVyX3ZhbHVlID0gcGFyYW1ldGVy
X3ZhbHVlICsgJy5yZWxlYXNlTm9uTnVsbCgpJworICAgICAgICAgICAgZWxpZiBDcHBHZW5lcmF0
b3Iuc2hvdWxkX2RlcmVmZXJlbmNlX2FyZ3VtZW50KF90eXBlLCBwYXJhbWV0ZXIuaXNfb3B0aW9u
YWwpOgogICAgICAgICAgICAgICAgIHBhcmFtZXRlcl92YWx1ZSA9ICcqJyArIHBhcmFtZXRlcl92
YWx1ZQotICAgICAgICAgICAgaWYgcGFyYW1ldGVyLnR5cGUuaXNfZW51bSgpOgotICAgICAgICAg
ICAgICAgIHBhcmFtZXRlcl92YWx1ZSA9ICdJbnNwZWN0b3I6OlByb3RvY29sOjolczo6Z2V0RW51
bUNvbnN0YW50VmFsdWUoJXMpJyAlIChzZWxmLmhlbHBlcnNfbmFtZXNwYWNlKCksIHBhcmFtZXRl
cl92YWx1ZSkKKyAgICAgICAgICAgIGVsaWYgQ3BwR2VuZXJhdG9yLnNob3VsZF9tb3ZlX2FyZ3Vt
ZW50KF90eXBlLCBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwpOgorICAgICAgICAgICAgICAgIHBhcmFt
ZXRlcl92YWx1ZSA9ICdXVEZNb3ZlKCVzKScgJSBwYXJhbWV0ZXJfdmFsdWUKIAogICAgICAgICAg
ICAgcGFyYW1ldGVyX2FyZ3MgPSB7Ci0gICAgICAgICAgICAgICAgJ3BhcmFtZXRlclR5cGUnOiBD
cHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX3N0YWNrX291dF9wYXJhbWV0ZXIocGFyYW1ldGVyKSwK
LSAgICAgICAgICAgICAgICAncGFyYW1ldGVyTmFtZSc6IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFt
ZSwKKyAgICAgICAgICAgICAgICAncGFyYW1ldGVyS2V5JzogcGFyYW1ldGVyLnBhcmFtZXRlcl9u
YW1lLAorICAgICAgICAgICAgICAgICdwYXJhbWV0ZXJOYW1lJzogcGFyYW1ldGVyX25hbWUsCiAg
ICAgICAgICAgICAgICAgJ3BhcmFtZXRlclZhbHVlJzogcGFyYW1ldGVyX3ZhbHVlLAotICAgICAg
ICAgICAgICAgICdrZXllZFNldE1ldGhvZCc6IENwcEdlbmVyYXRvci5jcHBfc2V0dGVyX21ldGhv
ZF9mb3JfdHlwZShwYXJhbWV0ZXIudHlwZSksCisgICAgICAgICAgICAgICAgJ2tleWVkU2V0TWV0
aG9kJzogQ3BwR2VuZXJhdG9yLmNwcF9zZXR0ZXJfbWV0aG9kX2Zvcl90eXBlKF90eXBlKSwKICAg
ICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgotICAg
ICAgICAgICAgICAgIHBhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICBpZiAoJShwYXJh
bWV0ZXJOYW1lKXMpJyAlIHBhcmFtZXRlcl9hcmdzKQotICAgICAgICAgICAgICAgIHBhcmFtZXRl
cl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICAgICAgcGFyYW1zT2JqZWN0LT4lKGtleWVkU2V0TWV0
aG9kKXMoIiUocGFyYW1ldGVyTmFtZSlzIl9zLCAlKHBhcmFtZXRlclZhbHVlKXMpOycgJSBwYXJh
bWV0ZXJfYXJncykKKyAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5k
KCcgICAgaWYgKCEhJShwYXJhbWV0ZXJOYW1lKXMpJyAlIHBhcmFtZXRlcl9hcmdzKQorICAgICAg
ICAgICAgICAgIHBhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICAgICAgcHJvdG9jb2xf
cGFyYW1zT2JqZWN0LT4lKGtleWVkU2V0TWV0aG9kKXMoIiUocGFyYW1ldGVyS2V5KXMiX3MsICUo
cGFyYW1ldGVyVmFsdWUpcyk7JyAlIHBhcmFtZXRlcl9hcmdzKQogICAgICAgICAgICAgZWxzZToK
LSAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAgcGFyYW1z
T2JqZWN0LT4lKGtleWVkU2V0TWV0aG9kKXMoIiUocGFyYW1ldGVyTmFtZSlzIl9zLCAlKHBhcmFt
ZXRlclZhbHVlKXMpOycgJSBwYXJhbWV0ZXJfYXJncykKKyAgICAgICAgICAgICAgICBwYXJhbWV0
ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT4lKGtleWVk
U2V0TWV0aG9kKXMoIiUocGFyYW1ldGVyS2V5KXMiX3MsICUocGFyYW1ldGVyVmFsdWUpcyk7JyAl
IHBhcmFtZXRlcl9hcmdzKQogCi0gICAgICAgICAgICBmb3JtYWxfcGFyYW1ldGVycy5hcHBlbmQo
JyVzICVzJyAlIChDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX2NoZWNrZWRfZm9ybWFsX2V2ZW50
X3BhcmFtZXRlcihwYXJhbWV0ZXIpLCBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpKQorICAgICAg
ICAgICAgZm9ybWFsX3BhcmFtZXRlcnMuYXBwZW5kKCclcyAlcycgJSAoQ3BwR2VuZXJhdG9yLmNw
cF90eXBlX2Zvcl9ldmVudF9wYXJhbWV0ZXIoX3R5cGUsIHBhcmFtZXRlci5pc19vcHRpb25hbCks
IHBhcmFtZXRlcl9uYW1lKSkKIAogICAgICAgICBldmVudF9hcmdzID0gewogICAgICAgICAgICAg
J2RvbWFpbk5hbWUnOiBkb21haW4uZG9tYWluX25hbWUsCkBAIC0xMjAsMTUgKzEzNCwxNSBAQCBj
bGFzcyBDcHBGcm9udGVuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihDcHBHZW5l
cmF0b3IpOgogCiAgICAgICAgIGxpbmVzLmFwcGVuZCgndm9pZCAlKGRvbWFpbk5hbWUpc0Zyb250
ZW5kRGlzcGF0Y2hlcjo6JShldmVudE5hbWUpcyglKGZvcm1hbFBhcmFtZXRlcnMpcyknICUgZXZl
bnRfYXJncykKICAgICAgICAgbGluZXMuYXBwZW5kKCd7JykKLSAgICAgICAgbGluZXMuYXBwZW5k
KCcgICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0
ZSgpOycpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmco
Im1ldGhvZCJfcywgIiUoZG9tYWluTmFtZSlzLiUoZXZlbnROYW1lKXMiX3MpOycgJSBldmVudF9h
cmdzKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdl
ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsnKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBw
cm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICIlKGRvbWFpbk5hbWUp
cy4lKGV2ZW50TmFtZSlzIl9zKTsnICUgZXZlbnRfYXJncykKIAogICAgICAgICBpZiBsZW4ocGFy
YW1ldGVyX2Fzc2lnbm1lbnRzKSA+IDA6Ci0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBS
ZWY8SlNPTjo6T2JqZWN0PiBwYXJhbXNPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOycp
CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBhdXRvIHByb3RvY29sX3BhcmFtc09iamVj
dCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7JykKICAgICAgICAgICAgIGxpbmVzLmV4dGVuZChw
YXJhbWV0ZXJfYXNzaWdubWVudHMpCi0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBqc29u
TWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiX3MsIFdURk1vdmUocGFyYW1zT2JqZWN0KSk7JykK
KyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRP
YmplY3QoInBhcmFtcyJfcywgV1RGTW92ZShwcm90b2NvbF9wYXJhbXNPYmplY3QpKTsnKQogCiAg
ICAgICAgIGxpbmVzLmFwcGVuZCgnJykKLSAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgbV9mcm9u
dGVuZFJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsnKQorICAg
ICAgICBsaW5lcy5hcHBlbmQoJyAgICBtX2Zyb250ZW5kUm91dGVyLnNlbmRFdmVudChwcm90b2Nv
bF9qc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOycpCiAgICAgICAgIGxpbmVzLmFwcGVuZCgn
fScpCiAgICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGV2
ZW50LmNvbmRpdGlvbiwgIlxuIi5qb2luKGxpbmVzKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9wcm90b2Nv
bF90eXBlc19oZWFkZXIucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfcHJvdG9jb2xfdHlwZXNfaGVhZGVyLnB5CmluZGV4IDAw
MTkyNGRlMGViMDgyN2Y3NDVkM2Q3MzZjMGFiOTIwMjEyNGRiMzYuLjc4MWQwNmQ5NDA1NjZiMTcy
ZWM1NWMyZWZiZDEwMWEwMDUwZDcxYTggMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9wcm90b2NvbF90eXBlc19o
ZWFkZXIucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2Nv
ZGVnZW4vZ2VuZXJhdGVfY3BwX3Byb3RvY29sX3R5cGVzX2hlYWRlci5weQpAQCAtODUsOSArODUs
MTAgQEAgY2xhc3MgQ3BwUHJvdG9jb2xUeXBlc0hlYWRlckdlbmVyYXRvcihDcHBHZW5lcmF0b3Ip
OgogICAgIGRlZiBfZ2VuZXJhdGVfc2Vjb25kYXJ5X2hlYWRlcl9pbmNsdWRlcyhzZWxmKToKICAg
ICAgICAgaGVhZGVyX2luY2x1ZGVzID0gWwogICAgICAgICAgICAgKFsiSmF2YVNjcmlwdENvcmUi
LCAiV2ViS2l0Il0sICgiSmF2YVNjcmlwdENvcmUiLCAiaW5zcGVjdG9yL0luc3BlY3RvclByb3Rv
Y29sVHlwZXMuaCIpKSwKLSAgICAgICAgICAgIChbIkphdmFTY3JpcHRDb3JlIiwgIldlYktpdCJd
LCAoIldURiIsICJ3dGYvQXNzZXJ0aW9ucy5oIikpCisgICAgICAgICAgICAoWyJKYXZhU2NyaXB0
Q29yZSIsICJXZWJLaXQiXSwgKCJXVEYiLCAid3RmL0pTT05WYWx1ZXMuaCIpKSwKKyAgICAgICAg
ICAgIChbIkphdmFTY3JpcHRDb3JlIiwgIldlYktpdCJdLCAoIldURiIsICJ3dGYvT3B0aW9uYWwu
aCIpKSwKKyAgICAgICAgICAgIChbIkphdmFTY3JpcHRDb3JlIiwgIldlYktpdCJdLCAoIldURiIs
ICJ3dGYvdGV4dC9XVEZTdHJpbmcuaCIpKSwKICAgICAgICAgXQotCiAgICAgICAgIHJldHVybiAn
XG4nLmpvaW4oc2VsZi5nZW5lcmF0ZV9pbmNsdWRlc19mcm9tX2VudHJpZXMoaGVhZGVyX2luY2x1
ZGVzKSkKIAogICAgIGRlZiBfZ2VuZXJhdGVfdmVyc2lvbnMoc2VsZiwgZG9tYWlucyk6CkBAIC0y
MzIsOSArMjMzLDYgQEAgY2xhc3MgQ3BwUHJvdG9jb2xUeXBlc0hlYWRlckdlbmVyYXRvcihDcHBH
ZW5lcmF0b3IpOgogICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRp
dGlvbihkb21haW4uY29uZGl0aW9uLCAnXG4nLmpvaW4obGluZXMpKQogCiAgICAgZGVmIF9nZW5l
cmF0ZV9jbGFzc19mb3Jfb2JqZWN0X2RlY2xhcmF0aW9uKHNlbGYsIHR5cGVfZGVjbGFyYXRpb24s
IGRvbWFpbik6Ci0gICAgICAgIGlmIGxlbih0eXBlX2RlY2xhcmF0aW9uLnR5cGVfbWVtYmVycykg
PT0gMDoKLSAgICAgICAgICAgIHJldHVybiAnJwotCiAgICAgICAgIGVudW1fbWVtYmVycyA9IFtt
ZW1iZXIgZm9yIG1lbWJlciBpbiB0eXBlX2RlY2xhcmF0aW9uLnR5cGVfbWVtYmVycyBpZiBpc2lu
c3RhbmNlKG1lbWJlci50eXBlLCBFbnVtVHlwZSkgYW5kIG1lbWJlci50eXBlLmlzX2Fub255bW91
c10KICAgICAgICAgcmVxdWlyZWRfbWVtYmVycyA9IFttZW1iZXIgZm9yIG1lbWJlciBpbiB0eXBl
X2RlY2xhcmF0aW9uLnR5cGVfbWVtYmVycyBpZiBub3QgbWVtYmVyLmlzX29wdGlvbmFsXQogICAg
ICAgICBvcHRpb25hbF9tZW1iZXJzID0gW21lbWJlciBmb3IgbWVtYmVyIGluIHR5cGVfZGVjbGFy
YXRpb24udHlwZV9tZW1iZXJzIGlmIG1lbWJlci5pc19vcHRpb25hbF0KQEAgLTI0NiwxMSArMjQ0
LDEyIEBAIGNsYXNzIENwcFByb3RvY29sVHlwZXNIZWFkZXJHZW5lcmF0b3IoQ3BwR2VuZXJhdG9y
KToKICAgICAgICAgYmFzZV9jbGFzcyA9ICdKU09OOjpPYmplY3QnCiAgICAgICAgIGlmIG5vdCBH
ZW5lcmF0b3IudHlwZV9oYXNfb3Blbl9maWVsZHModHlwZV9kZWNsYXJhdGlvbi50eXBlKToKICAg
ICAgICAgICAgIGJhc2VfY2xhc3MgPSBiYXNlX2NsYXNzICsgJ0Jhc2UnCi0gICAgICAgIGxpbmVz
LmFwcGVuZCgnY2xhc3MgJXMgOiBwdWJsaWMgJXMgeycgJSAob2JqZWN0X25hbWUsIGJhc2VfY2xh
c3MpKQorICAgICAgICBsaW5lcy5hcHBlbmQoJ2NsYXNzICVzIGZpbmFsIDogcHVibGljICVzIHsn
ICUgKG9iamVjdF9uYW1lLCBiYXNlX2NsYXNzKSkKICAgICAgICAgbGluZXMuYXBwZW5kKCdwdWJs
aWM6JykKICAgICAgICAgZm9yIGVudW1fbWVtYmVyIGluIGVudW1fbWVtYmVyczoKICAgICAgICAg
ICAgIGxpbmVzLmFwcGVuZCgnICAgIC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5IG5hbWUgXCclc1wn
IHdoaWxlIGdlbmVyYXRpbmcgJXMuJyAlIChlbnVtX21lbWJlci5tZW1iZXJfbmFtZSwgb2JqZWN0
X25hbWUpKQogICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX3N0cnVjdF9m
b3JfYW5vbnltb3VzX2VudW1fbWVtYmVyKGVudW1fbWVtYmVyKSkKKyAgICAgICAgICAgIGxpbmVz
LmFwcGVuZCgnJykKICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2J1aWxkZXJf
c3RhdGVfZW51bSh0eXBlX2RlY2xhcmF0aW9uKSkKIAogICAgICAgICBjb25zdHJ1Y3Rvcl9leGFt
cGxlID0gW10KQEAgLTI3Nyw3ICsyNzYsNyBAQCBjbGFzcyBDcHBQcm90b2NvbFR5cGVzSGVhZGVy
R2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAgICAgICBvcGVuX21lbWJlcnMgPSBHZW5l
cmF0b3Iub3Blbl9maWVsZHModHlwZV9kZWNsYXJhdGlvbikKICAgICAgICAgICAgIGZvciB0eXBl
X21lbWJlciBpbiBvcGVuX21lbWJlcnM6CiAgICAgICAgICAgICAgICAgZXhwb3J0X21hY3JvID0g
c2VsZi5tb2RlbCgpLmZyYW1ld29yay5zZXR0aW5nKCdleHBvcnRfbWFjcm8nLCBOb25lKQotICAg
ICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICVzIHN0YXRpYyBjb25zdCBjaGFyKiAlczsn
ICUgKGV4cG9ydF9tYWNybywgdWNmaXJzdCh0eXBlX21lbWJlci5tZW1iZXJfbmFtZSkpKQorICAg
ICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICVzIHN0YXRpYyBjb25zdCBjaGFyKiAlc0tl
eTsnICUgKGV4cG9ydF9tYWNybywgdHlwZV9tZW1iZXIubWVtYmVyX25hbWUpKQogCiAgICAgICAg
IGxpbmVzLmFwcGVuZCgnfTsnKQogICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRf
Zm9yX2NvbmRpdGlvbih0eXBlX2RlY2xhcmF0aW9uLmNvbmRpdGlvbiwgJ1xuJy5qb2luKGxpbmVz
KSkKQEAgLTMyOCw0NyArMzI3LDU2IEBAIGNsYXNzIENwcFByb3RvY29sVHlwZXNIZWFkZXJHZW5l
cmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKIAog
ICAgIGRlZiBfZ2VuZXJhdGVfYnVpbGRlcl9zZXR0ZXJfZm9yX21lbWJlcihzZWxmLCB0eXBlX21l
bWJlciwgZG9tYWluKToKKyAgICAgICAgbWVtYmVyX25hbWUgPSAnaW5fJyArIHR5cGVfbWVtYmVy
Lm1lbWJlcl9uYW1lCisKKyAgICAgICAgbWVtYmVyX3ZhbHVlID0gbWVtYmVyX25hbWUKKyAgICAg
ICAgaWYgdHlwZV9tZW1iZXIudHlwZS5pc19lbnVtKCk6CisgICAgICAgICAgICBtZW1iZXJfdmFs
dWUgPSAnUHJvdG9jb2w6OiVzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZSglcyknICUgKHNlbGYuaGVs
cGVyc19uYW1lc3BhY2UoKSwgbWVtYmVyX3ZhbHVlKQorICAgICAgICBlbGlmIENwcEdlbmVyYXRv
ci5zaG91bGRfbW92ZV9hcmd1bWVudCh0eXBlX21lbWJlci50eXBlLCBGYWxzZSk6CisgICAgICAg
ICAgICBtZW1iZXJfdmFsdWUgPSAnV1RGTW92ZSglcyknICUgbWVtYmVyX3ZhbHVlCisKICAgICAg
ICAgc2V0dGVyX2FyZ3MgPSB7CiAgICAgICAgICAgICAnY2FtZWxOYW1lJzogdWNmaXJzdCh0eXBl
X21lbWJlci5tZW1iZXJfbmFtZSksCi0gICAgICAgICAgICAna2V5ZWRTZXQnOiBDcHBHZW5lcmF0
b3IuY3BwX3NldHRlcl9tZXRob2RfZm9yX3R5cGUodHlwZV9tZW1iZXIudHlwZSksCi0gICAgICAg
ICAgICAnbmFtZSc6IHR5cGVfbWVtYmVyLm1lbWJlcl9uYW1lLAotICAgICAgICAgICAgJ3BhcmFt
ZXRlclR5cGUnOiBDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX3R5cGVfbWVtYmVyKHR5cGVfbWVt
YmVyKSwKLSAgICAgICAgICAgICdoZWxwZXJzTmFtZXNwYWNlJzogc2VsZi5oZWxwZXJzX25hbWVz
cGFjZSgpLAorICAgICAgICAgICAgJ3NldHRlcic6IENwcEdlbmVyYXRvci5jcHBfc2V0dGVyX21l
dGhvZF9mb3JfdHlwZSh0eXBlX21lbWJlci50eXBlKSwKKyAgICAgICAgICAgICdtZW1iZXJUeXBl
JzogQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl90eXBlX21lbWJlcl9hcmd1bWVudCh0eXBlX21l
bWJlci50eXBlLCB0eXBlX21lbWJlci5tZW1iZXJfbmFtZSksCisgICAgICAgICAgICAnbWVtYmVy
S2V5JzogdHlwZV9tZW1iZXIubWVtYmVyX25hbWUsCisgICAgICAgICAgICAnbWVtYmVyTmFtZSc6
IG1lbWJlcl9uYW1lLAorICAgICAgICAgICAgJ21lbWJlclZhbHVlJzogbWVtYmVyX3ZhbHVlLAog
ICAgICAgICB9CiAKICAgICAgICAgbGluZXMgPSBbXQogICAgICAgICBsaW5lcy5hcHBlbmQoJycp
Ci0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBCdWlsZGVyPFNUQVRFIHwgJShjYW1lbE5h
bWUpc1NldD4mIHNldCUoY2FtZWxOYW1lKXMoJShwYXJhbWV0ZXJUeXBlKXMgdmFsdWUpJyAlIHNl
dHRlcl9hcmdzKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgQnVpbGRlcjxTVEFURSB8
ICUoY2FtZWxOYW1lKXNTZXQ+JiBzZXQlKGNhbWVsTmFtZSlzKCUobWVtYmVyVHlwZSlzICUobWVt
YmVyTmFtZSlzKScgJSBzZXR0ZXJfYXJncykKICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAg
IHsnKQotICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEo
U1RBVEUgJiAlKGNhbWVsTmFtZSlzU2V0KSwgcHJvcGVydHlfJShuYW1lKXNfYWxyZWFkeV9zZXQp
OycgJSBzZXR0ZXJfYXJncykKLQotICAgICAgICBpZiBpc2luc3RhbmNlKHR5cGVfbWVtYmVyLnR5
cGUsIEVudW1UeXBlKToKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICAgICAgbV9y
ZXN1bHQtPiUoa2V5ZWRTZXQpcygiJShuYW1lKXMiX3MsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OiUo
aGVscGVyc05hbWVzcGFjZSlzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZSh2YWx1ZSkpOycgJSBzZXR0
ZXJfYXJncykKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAg
ICAgICAgbV9yZXN1bHQtPiUoa2V5ZWRTZXQpcygiJShuYW1lKXMiX3MsIHZhbHVlKTsnICUgc2V0
dGVyX2FyZ3MpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoIShTVEFURSAmICUoY2FtZWxOYW1lKXNTZXQpLCBwcm9wZXJ0eV8lKG1lbWJlcktleSlzX2Fs
cmVhZHlfc2V0KTsnICUgc2V0dGVyX2FyZ3MpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAg
ICAgICAgbV9yZXN1bHQtPiUoc2V0dGVyKXMoIiUobWVtYmVyS2V5KXMiX3MsICUobWVtYmVyVmFs
dWUpcyk7JyAlIHNldHRlcl9hcmdzKQogICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgICAg
IHJldHVybiBjYXN0U3RhdGU8JShjYW1lbE5hbWUpc1NldD4oKTsnICUgc2V0dGVyX2FyZ3MpCiAg
ICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICB9JykKICAgICAgICAgcmV0dXJuICdcbicuam9p
bihsaW5lcykKIAogICAgIGRlZiBfZ2VuZXJhdGVfdW5jaGVja2VkX3NldHRlcl9mb3JfbWVtYmVy
KHNlbGYsIHR5cGVfbWVtYmVyLCBkb21haW4pOgorICAgICAgICBtZW1iZXJfbmFtZSA9ICdpbl9v
cHRfJyArIHR5cGVfbWVtYmVyLm1lbWJlcl9uYW1lCisKKyAgICAgICAgbWVtYmVyX3ZhbHVlID0g
bWVtYmVyX25hbWUKKyAgICAgICAgaWYgdHlwZV9tZW1iZXIudHlwZS5pc19lbnVtKCk6CisgICAg
ICAgICAgICBtZW1iZXJfdmFsdWUgPSAnUHJvdG9jb2w6OiVzOjpnZXRFbnVtQ29uc3RhbnRWYWx1
ZSglcyknICUgKHNlbGYuaGVscGVyc19uYW1lc3BhY2UoKSwgbWVtYmVyX3ZhbHVlKQorICAgICAg
ICBlbGlmIENwcEdlbmVyYXRvci5zaG91bGRfbW92ZV9hcmd1bWVudCh0eXBlX21lbWJlci50eXBl
LCBGYWxzZSk6CisgICAgICAgICAgICBtZW1iZXJfdmFsdWUgPSAnV1RGTW92ZSglcyknICUgbWVt
YmVyX3ZhbHVlCisKICAgICAgICAgc2V0dGVyX2FyZ3MgPSB7CiAgICAgICAgICAgICAnY2FtZWxO
YW1lJzogdWNmaXJzdCh0eXBlX21lbWJlci5tZW1iZXJfbmFtZSksCi0gICAgICAgICAgICAna2V5
ZWRTZXQnOiBDcHBHZW5lcmF0b3IuY3BwX3NldHRlcl9tZXRob2RfZm9yX3R5cGUodHlwZV9tZW1i
ZXIudHlwZSksCi0gICAgICAgICAgICAnbmFtZSc6IHR5cGVfbWVtYmVyLm1lbWJlcl9uYW1lLAot
ICAgICAgICAgICAgJ3BhcmFtZXRlclR5cGUnOiBDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX3R5
cGVfbWVtYmVyKHR5cGVfbWVtYmVyKSwKLSAgICAgICAgICAgICdoZWxwZXJzTmFtZXNwYWNlJzog
c2VsZi5oZWxwZXJzX25hbWVzcGFjZSgpLAorICAgICAgICAgICAgJ3NldHRlcic6IENwcEdlbmVy
YXRvci5jcHBfc2V0dGVyX21ldGhvZF9mb3JfdHlwZSh0eXBlX21lbWJlci50eXBlKSwKKyAgICAg
ICAgICAgICdtZW1iZXJLZXknOiB0eXBlX21lbWJlci5tZW1iZXJfbmFtZSwKKyAgICAgICAgICAg
ICdtZW1iZXJOYW1lJzogbWVtYmVyX25hbWUsCisgICAgICAgICAgICAnbWVtYmVyVmFsdWUnOiBt
ZW1iZXJfdmFsdWUsCisgICAgICAgICAgICAnbWVtYmVyVHlwZSc6IENwcEdlbmVyYXRvci5jcHBf
dHlwZV9mb3JfdHlwZV9tZW1iZXJfYXJndW1lbnQodHlwZV9tZW1iZXIudHlwZSwgdHlwZV9tZW1i
ZXIubWVtYmVyX25hbWUpLAogICAgICAgICB9CiAKICAgICAgICAgbGluZXMgPSBbXQogICAgICAg
ICBsaW5lcy5hcHBlbmQoJycpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIHZvaWQgc2V0JShj
YW1lbE5hbWUpcyglKHBhcmFtZXRlclR5cGUpcyB2YWx1ZSknICUgc2V0dGVyX2FyZ3MpCisgICAg
ICAgIGxpbmVzLmFwcGVuZCgnICAgIHZvaWQgc2V0JShjYW1lbE5hbWUpcyglKG1lbWJlclR5cGUp
cyAlKG1lbWJlck5hbWUpcyknICUgc2V0dGVyX2FyZ3MpCiAgICAgICAgIGxpbmVzLmFwcGVuZCgn
ICAgIHsnKQotICAgICAgICBpZiBpc2luc3RhbmNlKHR5cGVfbWVtYmVyLnR5cGUsIEVudW1UeXBl
KToKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBKU09OOjpPYmplY3RCYXNlOjol
KGtleWVkU2V0KXMoIiUobmFtZSlzIl9zLCBJbnNwZWN0b3I6OlByb3RvY29sOjolKGhlbHBlcnNO
YW1lc3BhY2Upczo6Z2V0RW51bUNvbnN0YW50VmFsdWUodmFsdWUpKTsnICUgc2V0dGVyX2FyZ3Mp
Ci0gICAgICAgIGVsaWYgQ3BwR2VuZXJhdG9yLnNob3VsZF91c2VfcmVmZXJlbmNlc19mb3JfdHlw
ZSh0eXBlX21lbWJlci50eXBlKToKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBK
U09OOjpPYmplY3RCYXNlOjolKGtleWVkU2V0KXMoIiUobmFtZSlzIl9zLCBXVEZNb3ZlKHZhbHVl
KSk7JyAlIHNldHRlcl9hcmdzKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgbGluZXMuYXBw
ZW5kKCcgICAgICAgIEpTT046Ok9iamVjdEJhc2U6OiUoa2V5ZWRTZXQpcygiJShuYW1lKXMiX3Ms
IHZhbHVlKTsnICUgc2V0dGVyX2FyZ3MpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBK
U09OOjpPYmplY3RCYXNlOjolKHNldHRlcilzKCIlKG1lbWJlcktleSlzIl9zLCAlKG1lbWJlclZh
bHVlKXMpOycgJSBzZXR0ZXJfYXJncykKICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgfScpCiAg
ICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCiAKQEAgLTM4MSwxMyArMzg5LDEzIEBAIGNs
YXNzIENwcFByb3RvY29sVHlwZXNIZWFkZXJHZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAg
ICAgICAgIGRlY2xhcmF0aW9uc190b19nZW5lcmF0ZSA9IFtkZWNsIGZvciBkZWNsIGluIHR5cGVf
ZGVjbGFyYXRpb25zIGlmIHNlbGYudHlwZV9uZWVkc19zaGFwZV9hc3NlcnRpb25zKGRlY2wudHlw
ZSldCiAKICAgICAgICAgICAgIGZvciB0eXBlX2RlY2xhcmF0aW9uIGluIGRlY2xhcmF0aW9uc190
b19nZW5lcmF0ZToKLSAgICAgICAgICAgICAgICBmb3IgdHlwZV9tZW1iZXIgaW4gdHlwZV9kZWNs
YXJhdGlvbi50eXBlX21lbWJlcnM6Ci0gICAgICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uo
dHlwZV9tZW1iZXIudHlwZSwgRW51bVR5cGUpOgotICAgICAgICAgICAgICAgICAgICAgICAgdHlw
ZV9hcmd1bWVudHMuYXBwZW5kKChzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKHR5
cGVfZGVjbGFyYXRpb24uY29uZGl0aW9uLCBDcHBHZW5lcmF0b3IuY3BwX3Byb3RvY29sX3R5cGVf
Zm9yX3R5cGVfbWVtYmVyKHR5cGVfbWVtYmVyLCB0eXBlX2RlY2xhcmF0aW9uKSksIEZhbHNlKSkK
LQogICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodHlwZV9kZWNsYXJhdGlvbi50eXBlLCBP
YmplY3RUeXBlKToKICAgICAgICAgICAgICAgICAgICAgdHlwZV9hcmd1bWVudHMuYXBwZW5kKChz
ZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKHR5cGVfZGVjbGFyYXRpb24uY29uZGl0
aW9uLCBDcHBHZW5lcmF0b3IuY3BwX3Byb3RvY29sX3R5cGVfZm9yX3R5cGUodHlwZV9kZWNsYXJh
dGlvbi50eXBlKSksIEdlbmVyYXRvci50eXBlX25lZWRzX3J1bnRpbWVfY2FzdHModHlwZV9kZWNs
YXJhdGlvbi50eXBlKSkpCiAKKyAgICAgICAgICAgICAgICBmb3IgdHlwZV9tZW1iZXIgaW4gdHlw
ZV9kZWNsYXJhdGlvbi50eXBlX21lbWJlcnM6CisgICAgICAgICAgICAgICAgICAgIGlmIGlzaW5z
dGFuY2UodHlwZV9tZW1iZXIudHlwZSwgRW51bVR5cGUpOgorICAgICAgICAgICAgICAgICAgICAg
ICAgdHlwZV9hcmd1bWVudHMuYXBwZW5kKChzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0
aW9uKHR5cGVfZGVjbGFyYXRpb24uY29uZGl0aW9uLCBDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9y
X2VudW0odHlwZV9tZW1iZXIudHlwZSwgJyVzOjolcycgJSAodHlwZV9kZWNsYXJhdGlvbi50eXBl
X25hbWUsIHVjZmlyc3QodHlwZV9tZW1iZXIubWVtYmVyX25hbWUpKSkpLCBGYWxzZSkpCisKICAg
ICAgICAgc3RydWN0X2tleXdvcmRzID0gWydzdHJ1Y3QnXQogICAgICAgICBmdW5jdGlvbl9rZXl3
b3JkcyA9IFsnc3RhdGljIHZvaWQnXQogICAgICAgICBleHBvcnRfbWFjcm8gPSBzZWxmLm1vZGVs
KCkuZnJhbWV3b3JrLnNldHRpbmcoJ2V4cG9ydF9tYWNybycsIE5vbmUpCkBAIC0zOTksNyArNDA3
LDcgQEAgY2xhc3MgQ3BwUHJvdG9jb2xUeXBlc0hlYWRlckdlbmVyYXRvcihDcHBHZW5lcmF0b3Ip
OgogICAgICAgICBmb3IgYXJndW1lbnQgaW4gdHlwZV9hcmd1bWVudHM6CiAgICAgICAgICAgICBs
aW5lcy5hcHBlbmQoJ3RlbXBsYXRlPD4gJXMgQmluZGluZ1RyYWl0czwlcz4geycgJSAoJyAnLmpv
aW4oc3RydWN0X2tleXdvcmRzKSwgYXJndW1lbnRbMF0pKQogICAgICAgICAgICAgaWYgYXJndW1l
bnRbMV06Ci0gICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCdzdGF0aWMgUmVmUHRyPCVzPiBy
dW50aW1lQ2FzdChSZWZQdHI8SlNPTjo6VmFsdWU+JiYgdmFsdWUpOycgJSBhcmd1bWVudFswXSkK
KyAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ3N0YXRpYyBSZWY8JXM+IHJ1bnRpbWVDYXN0
KFJlZjxKU09OOjpWYWx1ZT4mJiB2YWx1ZSk7JyAlIGFyZ3VtZW50WzBdKQogICAgICAgICAgICAg
bGluZXMuYXBwZW5kKCclcyBhc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShKU09OOjpWYWx1ZSop
OycgJSAnICcuam9pbihmdW5jdGlvbl9rZXl3b3JkcykpCiAgICAgICAgICAgICBsaW5lcy5hcHBl
bmQoJ307JykKICAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKQEAgLTQzOCwxMyArNDQ2
LDEzIEBAIGNsYXNzIENwcFByb3RvY29sVHlwZXNIZWFkZXJHZW5lcmF0b3IoQ3BwR2VuZXJhdG9y
KToKICAgICAgICAgICAgIGRvbWFpbl9saW5lcyA9IFtdCiAgICAgICAgICAgICBkb21haW5fbGlu
ZXMuYXBwZW5kKCIvLyBFbnVtcyBpbiB0aGUgJyVzJyBEb21haW4iICUgZG9tYWluLmRvbWFpbl9u
YW1lKQogICAgICAgICAgICAgZm9yIGVudW1fdHlwZSBpbiBlbnVtX3R5cGVzOgotICAgICAgICAg
ICAgICAgIGNwcF9wcm90b2NvbF90eXBlID0gQ3BwR2VuZXJhdG9yLmNwcF9wcm90b2NvbF90eXBl
X2Zvcl90eXBlKGVudW1fdHlwZSkKKyAgICAgICAgICAgICAgICBjcHBfcHJvdG9jb2xfdHlwZSA9
IENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3JfZW51bShlbnVtX3R5cGUsIGVudW1fdHlwZS5yYXdf
bmFtZSgpKQogICAgICAgICAgICAgICAgIGRvbWFpbl9saW5lcy5hcHBlbmQoc2VsZi53cmFwX3dp
dGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihlbnVtX3R5cGUuZGVjbGFyYXRpb24oKS5jb25kaXRpb24s
ICd0ZW1wbGF0ZTw+XG4lcyBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8JXM+KGNvbnN0IFN0cmlu
ZyYpOycgJSAocmV0dXJuX3R5cGVfd2l0aF9leHBvcnRfbWFjcm8oY3BwX3Byb3RvY29sX3R5cGUp
LCBjcHBfcHJvdG9jb2xfdHlwZSkpKQogCiAgICAgICAgICAgICBmb3Igb2JqZWN0X3R5cGUgaW4g
b2JqZWN0X3R5cGVzOgogICAgICAgICAgICAgICAgIG9iamVjdF9saW5lcyA9IFtdCiAgICAgICAg
ICAgICAgICAgZm9yIGVudW1fbWVtYmVyIGluIGZpbHRlcih0eXBlX21lbWJlcl9pc19hbm9ueW1v
dXNfZW51bV90eXBlLCBvYmplY3RfdHlwZS5tZW1iZXJzKToKLSAgICAgICAgICAgICAgICAgICAg
Y3BwX3Byb3RvY29sX3R5cGUgPSBDcHBHZW5lcmF0b3IuY3BwX3Byb3RvY29sX3R5cGVfZm9yX3R5
cGVfbWVtYmVyKGVudW1fbWVtYmVyLCBvYmplY3RfdHlwZS5kZWNsYXJhdGlvbigpKQorICAgICAg
ICAgICAgICAgICAgICBjcHBfcHJvdG9jb2xfdHlwZSA9IENwcEdlbmVyYXRvci5jcHBfdHlwZV9m
b3JfZW51bShlbnVtX21lbWJlci50eXBlLCAnJXM6OiVzJyAlIChvYmplY3RfdHlwZS5yYXdfbmFt
ZSgpLCB1Y2ZpcnN0KGVudW1fbWVtYmVyLm1lbWJlcl9uYW1lKSkpCiAgICAgICAgICAgICAgICAg
ICAgIG9iamVjdF9saW5lcy5hcHBlbmQoJ3RlbXBsYXRlPD5cbiVzIHBhcnNlRW51bVZhbHVlRnJv
bVN0cmluZzwlcz4oY29uc3QgU3RyaW5nJik7JyAlIChyZXR1cm5fdHlwZV93aXRoX2V4cG9ydF9t
YWNybyhjcHBfcHJvdG9jb2xfdHlwZSksIGNwcF9wcm90b2NvbF90eXBlKSkKICAgICAgICAgICAg
ICAgICBpZiBsZW4ob2JqZWN0X2xpbmVzKToKICAgICAgICAgICAgICAgICAgICAgZG9tYWluX2xp
bmVzLmFwcGVuZChzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKG9iamVjdF90eXBl
LmRlY2xhcmF0aW9uKCkuY29uZGl0aW9uLCAnXG4nLmpvaW4ob2JqZWN0X2xpbmVzKSkpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9n
ZW5lcmF0ZV9jcHBfcHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50YXRpb24ucHkgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfcHJvdG9j
b2xfdHlwZXNfaW1wbGVtZW50YXRpb24ucHkKaW5kZXggNWRkNTM0Njk0NDg1NTE1NDhkNjdhYTBi
NDU2YzZhMWE2NjU4ZDU5My4uMTNlNTg5NzI2ZDRjZGI3YTQ1MmM2NzBjODMyNWViMWEzOWVlNjIy
MiAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2Nv
ZGVnZW4vZ2VuZXJhdGVfY3BwX3Byb3RvY29sX3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5CisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRl
X2NwcF9wcm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbi5weQpAQCAtODIsMTAgKzgyLDggQEAg
Y2xhc3MgQ3BwUHJvdG9jb2xUeXBlc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yKENwcEdlbmVyYXRv
cik6CiAKICAgICBkZWYgX2dlbmVyYXRlX3NlY29uZGFyeV9oZWFkZXJfaW5jbHVkZXMoc2VsZik6
CiAgICAgICAgIGhlYWRlcl9pbmNsdWRlcyA9IFsKLSAgICAgICAgICAgIChbIkphdmFTY3JpcHRD
b3JlIiwgIldlYktpdCJdLCAoIldURiIsICJ3dGYvT3B0aW9uYWwuaCIpKSwKLSAgICAgICAgICAg
IChbIkphdmFTY3JpcHRDb3JlIiwgIldlYktpdCJdLCAoIldURiIsICJ3dGYvdGV4dC9DU3RyaW5n
LmgiKSksCisgICAgICAgICAgICAoWyJKYXZhU2NyaXB0Q29yZSIsICJXZWJLaXQiXSwgKCJXVEYi
LCAid3RmL0Fzc2VydGlvbnMuaCIpKSwKICAgICAgICAgXQotCiAgICAgICAgIHJldHVybiAnXG4n
LmpvaW4oc2VsZi5nZW5lcmF0ZV9pbmNsdWRlc19mcm9tX2VudHJpZXMoaGVhZGVyX2luY2x1ZGVz
KSkKIAogICAgIGRlZiBfZ2VuZXJhdGVfZW51bV9tYXBwaW5nKHNlbGYpOgpAQCAtMTQ0LDE0ICsx
NDIsMTQgQEAgY2xhc3MgQ3BwUHJvdG9jb2xUeXBlc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yKENw
cEdlbmVyYXRvcik6CiAgICAgICAgIGxpbmVzID0gW10KICAgICAgICAgbGluZXMuYXBwZW5kKCIv
LyBFbnVtcyBpbiB0aGUgJyVzJyBEb21haW4iICUgZG9tYWluLmRvbWFpbl9uYW1lKQogICAgICAg
ICBmb3IgZW51bV90eXBlIGluIGVudW1fdHlwZXM6Ci0gICAgICAgICAgICBjcHBfcHJvdG9jb2xf
dHlwZSA9IENwcEdlbmVyYXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZShlbnVtX3R5cGUp
CisgICAgICAgICAgICBjcHBfcHJvdG9jb2xfdHlwZSA9IENwcEdlbmVyYXRvci5jcHBfdHlwZV9m
b3JfZW51bShlbnVtX3R5cGUsIGVudW1fdHlwZS5yYXdfbmFtZSgpKQogICAgICAgICAgICAgbGlu
ZXMuYXBwZW5kKCcnKQogICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYud3JhcF93aXRoX2d1
YXJkX2Zvcl9jb25kaXRpb24oZW51bV90eXBlLmRlY2xhcmF0aW9uKCkuY29uZGl0aW9uLCBnZW5l
cmF0ZV9jb252ZXJzaW9uX21ldGhvZF9ib2R5KGVudW1fdHlwZSwgY3BwX3Byb3RvY29sX3R5cGUp
KSkKIAogICAgICAgICBmb3Igb2JqZWN0X3R5cGUgaW4gb2JqZWN0X3R5cGVzOgogICAgICAgICAg
ICAgb2JqZWN0X2xpbmVzID0gW10KICAgICAgICAgICAgIGZvciBlbnVtX21lbWJlciBpbiBmaWx0
ZXIodHlwZV9tZW1iZXJfaXNfYW5vbnltb3VzX2VudW1fdHlwZSwgb2JqZWN0X3R5cGUubWVtYmVy
cyk6Ci0gICAgICAgICAgICAgICAgY3BwX3Byb3RvY29sX3R5cGUgPSBDcHBHZW5lcmF0b3IuY3Bw
X3Byb3RvY29sX3R5cGVfZm9yX3R5cGVfbWVtYmVyKGVudW1fbWVtYmVyLCBvYmplY3RfdHlwZS5k
ZWNsYXJhdGlvbigpKQorICAgICAgICAgICAgICAgIGNwcF9wcm90b2NvbF90eXBlID0gQ3BwR2Vu
ZXJhdG9yLmNwcF90eXBlX2Zvcl9lbnVtKGVudW1fbWVtYmVyLnR5cGUsICclczo6JXMnICUgKG9i
amVjdF90eXBlLnJhd19uYW1lKCksIHVjZmlyc3QoZW51bV9tZW1iZXIubWVtYmVyX25hbWUpKSkK
ICAgICAgICAgICAgICAgICBvYmplY3RfbGluZXMuYXBwZW5kKGdlbmVyYXRlX2NvbnZlcnNpb25f
bWV0aG9kX2JvZHkoZW51bV9tZW1iZXIudHlwZSwgY3BwX3Byb3RvY29sX3R5cGUpKQogICAgICAg
ICAgICAgaWYgbGVuKG9iamVjdF9saW5lcyk6CiAgICAgICAgICAgICAgICAgaWYgbGVuKGxpbmVz
KToKQEAgLTE4Myw4ICsxODEsNyBAQCBjbGFzcyBDcHBQcm90b2NvbFR5cGVzSW1wbGVtZW50YXRp
b25HZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAgICAgICAgIGZvciB0eXBlX2RlY2xhcmF0
aW9uIGluIFtkZWNsIGZvciBkZWNsIGluIHR5cGVfZGVjbGFyYXRpb25zIGlmIEdlbmVyYXRvci50
eXBlX2hhc19vcGVuX2ZpZWxkcyhkZWNsLnR5cGUpXToKICAgICAgICAgICAgICAgICBvcGVuX21l
bWJlcnMgPSBHZW5lcmF0b3Iub3Blbl9maWVsZHModHlwZV9kZWNsYXJhdGlvbikKICAgICAgICAg
ICAgICAgICBmb3IgdHlwZV9tZW1iZXIgaW4gc29ydGVkKG9wZW5fbWVtYmVycywga2V5PWxhbWJk
YSBtZW1iZXI6IG1lbWJlci5tZW1iZXJfbmFtZSk6Ci0gICAgICAgICAgICAgICAgICAgIGZpZWxk
X25hbWUgPSAnOjonLmpvaW4oWydJbnNwZWN0b3InLCAnUHJvdG9jb2wnLCBkb21haW4uZG9tYWlu
X25hbWUsIHVjZmlyc3QodHlwZV9kZWNsYXJhdGlvbi50eXBlX25hbWUpLCB1Y2ZpcnN0KHR5cGVf
bWVtYmVyLm1lbWJlcl9uYW1lKV0pCi0gICAgICAgICAgICAgICAgICAgIGRvbWFpbl9saW5lcy5h
cHBlbmQoJ2NvbnN0IGNoYXIqICVzID0gIiVzIjsnICUgKGZpZWxkX25hbWUsIHR5cGVfbWVtYmVy
Lm1lbWJlcl9uYW1lKSkKKyAgICAgICAgICAgICAgICAgICAgZG9tYWluX2xpbmVzLmFwcGVuZCgn
Y29uc3QgY2hhciogUHJvdG9jb2w6OiVzOjolczo6JXNLZXkgPSAiJXMiOycgJSAoZG9tYWluLmRv
bWFpbl9uYW1lLCB1Y2ZpcnN0KHR5cGVfZGVjbGFyYXRpb24udHlwZV9uYW1lKSwgdHlwZV9tZW1i
ZXIubWVtYmVyX25hbWUsIHR5cGVfbWVtYmVyLm1lbWJlcl9uYW1lKSkKICAgICAgICAgICAgIGlm
IGxlbihkb21haW5fbGluZXMpOgogICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLndy
YXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGRvbWFpbi5jb25kaXRpb24sICdcbicuam9pbihk
b21haW5fbGluZXMpKSkKIApAQCAtMjI3LDM3ICsyMjQsNTQgQEAgY2xhc3MgQ3BwUHJvdG9jb2xU
eXBlc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAKICAgICAgICAgbGlu
ZXMuYXBwZW5kKCd2b2lkIEJpbmRpbmdUcmFpdHM8JXM+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVk
VHlwZShKU09OOjpWYWx1ZSogdmFsdWUpJyAlIChDcHBHZW5lcmF0b3IuY3BwX3Byb3RvY29sX3R5
cGVfZm9yX3R5cGUob2JqZWN0X2RlY2xhcmF0aW9uLnR5cGUpKSkKICAgICAgICAgbGluZXMuYXBw
ZW5kKCIiInsKKyAgICBBU1NFUlRfVU5VU0VEKHZhbHVlLCB2YWx1ZSk7CiAjaWYgQVNTRVJUX0VO
QUJMRUQKLSAgICBBU1NFUlRfQVJHKHZhbHVlLCB2YWx1ZSk7Ci0gICAgUmVmUHRyPEpTT046Ok9i
amVjdD4gb2JqZWN0OwotICAgIGJvb2wgY2FzdFN1Y2NlZWRlZCA9IHZhbHVlLT5hc09iamVjdChv
YmplY3QpOwotICAgIEFTU0VSVF9VTlVTRUQoY2FzdFN1Y2NlZWRlZCwgY2FzdFN1Y2NlZWRlZCk7
IiIiKQorICAgIGF1dG8gb2JqZWN0ID0gdmFsdWUtPmFzT2JqZWN0KCk7CisgICAgQVNTRVJUKG9i
amVjdCk7IiIiKQogICAgICAgICBmb3IgdHlwZV9tZW1iZXIgaW4gcmVxdWlyZWRfbWVtYmVyczoK
KyAgICAgICAgICAgIG1lbWJlcl90eXBlID0gdHlwZV9tZW1iZXIudHlwZQorICAgICAgICAgICAg
aWYgaXNpbnN0YW5jZShtZW1iZXJfdHlwZSwgQWxpYXNlZFR5cGUpOgorICAgICAgICAgICAgICAg
IG1lbWJlcl90eXBlID0gbWVtYmVyX3R5cGUuYWxpYXNlZF90eXBlCisKKyAgICAgICAgICAgIGlm
IGlzaW5zdGFuY2UobWVtYmVyX3R5cGUsIEVudW1UeXBlKToKKyAgICAgICAgICAgICAgICBtZW1i
ZXJfdHlwZSA9IENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3JfZW51bShtZW1iZXJfdHlwZSwgJyVz
OjolcycgJSAob2JqZWN0X2RlY2xhcmF0aW9uLnR5cGVfbmFtZSwgdWNmaXJzdCh0eXBlX21lbWJl
ci5tZW1iZXJfbmFtZSkpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBtZW1i
ZXJfdHlwZSA9IENwcEdlbmVyYXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZShtZW1iZXJf
dHlwZSkKKwogICAgICAgICAgICAgYXJncyA9IHsKICAgICAgICAgICAgICAgICAnbWVtYmVyTmFt
ZSc6IHR5cGVfbWVtYmVyLm1lbWJlcl9uYW1lLAotICAgICAgICAgICAgICAgICdhc3NlcnRNZXRo
b2QnOiBDcHBHZW5lcmF0b3IuY3BwX2Fzc2VydGlvbl9tZXRob2RfZm9yX3R5cGVfbWVtYmVyKHR5
cGVfbWVtYmVyLCBvYmplY3RfZGVjbGFyYXRpb24pCisgICAgICAgICAgICAgICAgJ21lbWJlclR5
cGUnOiBtZW1iZXJfdHlwZQogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBsaW5lcy5hcHBl
bmQoIiIiICAgIHsKICAgICAgICAgYXV0byAlKG1lbWJlck5hbWUpc1BvcyA9IG9iamVjdC0+Zmlu
ZCgiJShtZW1iZXJOYW1lKXMiX3MpOwogICAgICAgICBBU1NFUlQoJShtZW1iZXJOYW1lKXNQb3Mg
IT0gb2JqZWN0LT5lbmQoKSk7Ci0gICAgICAgICUoYXNzZXJ0TWV0aG9kKXMoJShtZW1iZXJOYW1l
KXNQb3MtPnZhbHVlLmdldCgpKTsKKyAgICAgICAgQmluZGluZ1RyYWl0czwlKG1lbWJlclR5cGUp
cz46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKCUobWVtYmVyTmFtZSlzUG9zLT52YWx1ZS5w
dHIoKSk7CiAgICAgfSIiIiAlIGFyZ3MpCiAKICAgICAgICAgaWYgc2hvdWxkX2NvdW50X3Byb3Bl
cnRpZXM6CiAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJycpCi0gICAgICAgICAgICBsaW5lcy5h
cHBlbmQoJyAgICBpbnQgZm91bmRQcm9wZXJ0aWVzQ291bnQgPSAlczsnICUgbGVuKHJlcXVpcmVk
X21lbWJlcnMpKQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgc2l6ZV90IGZvdW5kUHJv
cGVydGllc0NvdW50ID0gJXM7JyAlIGxlbihyZXF1aXJlZF9tZW1iZXJzKSkKIAogICAgICAgICBm
b3IgdHlwZV9tZW1iZXIgaW4gb3B0aW9uYWxfbWVtYmVyczoKKyAgICAgICAgICAgIG1lbWJlcl90
eXBlID0gdHlwZV9tZW1iZXIudHlwZQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShtZW1iZXJf
dHlwZSwgQWxpYXNlZFR5cGUpOgorICAgICAgICAgICAgICAgIG1lbWJlcl90eXBlID0gbWVtYmVy
X3R5cGUuYWxpYXNlZF90eXBlCisKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UobWVtYmVyX3R5
cGUsIEVudW1UeXBlKToKKyAgICAgICAgICAgICAgICBtZW1iZXJfdHlwZSA9IENwcEdlbmVyYXRv
ci5jcHBfdHlwZV9mb3JfZW51bShtZW1iZXJfdHlwZSwgJyVzOjolcycgJSAob2JqZWN0X2RlY2xh
cmF0aW9uLnR5cGVfbmFtZSwgdWNmaXJzdCh0eXBlX21lbWJlci5tZW1iZXJfbmFtZSkpKQorICAg
ICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBtZW1iZXJfdHlwZSA9IENwcEdlbmVyYXRv
ci5jcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZShtZW1iZXJfdHlwZSkKKwogICAgICAgICAgICAg
YXJncyA9IHsKICAgICAgICAgICAgICAgICAnbWVtYmVyTmFtZSc6IHR5cGVfbWVtYmVyLm1lbWJl
cl9uYW1lLAotICAgICAgICAgICAgICAgICdhc3NlcnRNZXRob2QnOiBDcHBHZW5lcmF0b3IuY3Bw
X2Fzc2VydGlvbl9tZXRob2RfZm9yX3R5cGVfbWVtYmVyKHR5cGVfbWVtYmVyLCBvYmplY3RfZGVj
bGFyYXRpb24pCisgICAgICAgICAgICAgICAgJ21lbWJlclR5cGUnOiBtZW1iZXJfdHlwZQogICAg
ICAgICAgICAgfQogCiAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoIiIiICAgIHsKICAgICAgICAg
YXV0byAlKG1lbWJlck5hbWUpc1BvcyA9IG9iamVjdC0+ZmluZCgiJShtZW1iZXJOYW1lKXMiX3Mp
OwogICAgICAgICBpZiAoJShtZW1iZXJOYW1lKXNQb3MgIT0gb2JqZWN0LT5lbmQoKSkgewotICAg
ICAgICAgICAgJShhc3NlcnRNZXRob2QpcyglKG1lbWJlck5hbWUpc1Bvcy0+dmFsdWUuZ2V0KCkp
OyIiIiAlIGFyZ3MpCisgICAgICAgICAgICBCaW5kaW5nVHJhaXRzPCUobWVtYmVyVHlwZSlzPjo6
YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoJShtZW1iZXJOYW1lKXNQb3MtPnZhbHVlLnB0cigp
KTsiIiIgJSBhcmdzKQogCiAgICAgICAgICAgICBpZiBzaG91bGRfY291bnRfcHJvcGVydGllczoK
ICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgICAgICsrZm91bmRQcm9wZXJ0
aWVzQ291bnQ7JykKQEAgLTI2NywyNyArMjgxLDIyIEBAIGNsYXNzIENwcFByb3RvY29sVHlwZXNJ
bXBsZW1lbnRhdGlvbkdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAgICBpZiBzaG91bGRf
Y291bnRfcHJvcGVydGllczoKICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGlmIChmb3Vu
ZFByb3BlcnRpZXNDb3VudCAhPSBvYmplY3QtPnNpemUoKSknKQogICAgICAgICAgICAgbGluZXMu
YXBwZW5kKCcgICAgICAgIEZBVEFMKCJVbmV4cGVjdGVkIHByb3BlcnRpZXMgaW4gb2JqZWN0OiAl
c1xcbiIsIG9iamVjdC0+dG9KU09OU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOycpCi0gICAgICAg
IGxpbmVzLmFwcGVuZCgnI2Vsc2UgLy8gQVNTRVJUX0VOQUJMRUQnKQotICAgICAgICBsaW5lcy5h
cHBlbmQoJyAgICBVTlVTRURfUEFSQU0odmFsdWUpOycpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgn
I2VuZGlmIC8vIEFTU0VSVF9FTkFCTEVEJykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcjZW5kaWYn
KQogICAgICAgICBsaW5lcy5hcHBlbmQoJ30nKQogICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxp
bmVzKQogCiAgICAgZGVmIF9nZW5lcmF0ZV9hc3NlcnRpb25fZm9yX2VudW0oc2VsZiwgZW51bV9t
ZW1iZXIsIG9iamVjdF9kZWNsYXJhdGlvbik6CiAgICAgICAgIGxpbmVzID0gW10KLSAgICAgICAg
bGluZXMuYXBwZW5kKCd2b2lkICVzKEpTT046OlZhbHVlKiB2YWx1ZSknICUgQ3BwR2VuZXJhdG9y
LmNwcF9hc3NlcnRpb25fbWV0aG9kX2Zvcl90eXBlX21lbWJlcihlbnVtX21lbWJlciwgb2JqZWN0
X2RlY2xhcmF0aW9uKSkKKyAgICAgICAgbGluZXMuYXBwZW5kKCd2b2lkIEJpbmRpbmdUcmFpdHM8
JXM+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShKU09OOjpWYWx1ZSogdmFsdWUpJyAlIENw
cEdlbmVyYXRvci5jcHBfdHlwZV9mb3JfZW51bShlbnVtX21lbWJlci50eXBlLCAnJXM6OiVzJyAl
IChvYmplY3RfZGVjbGFyYXRpb24udHlwZV9uYW1lLCB1Y2ZpcnN0KGVudW1fbWVtYmVyLm1lbWJl
cl9uYW1lKSkpKQogICAgICAgICBsaW5lcy5hcHBlbmQoJ3snKQorICAgICAgICBsaW5lcy5hcHBl
bmQoJyAgICBBU1NFUlRfVU5VU0VEKHZhbHVlLCB2YWx1ZSk7JykKICAgICAgICAgbGluZXMuYXBw
ZW5kKCcjaWYgQVNTRVJUX0VOQUJMRUQnKQotICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBBU1NF
UlRfQVJHKHZhbHVlLCB2YWx1ZSk7JykKLSAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgU3RyaW5n
IHJlc3VsdDsnKQotICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBib29sIGNhc3RTdWNjZWVkZWQg
PSB2YWx1ZS0+YXNTdHJpbmcocmVzdWx0KTsnKQotICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBB
U1NFUlQoY2FzdFN1Y2NlZWRlZCk7JykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgYXV0byBy
ZXN1bHQgPSB2YWx1ZS0+YXNTdHJpbmcoKTsnKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBB
U1NFUlQocmVzdWx0KTsnKQogCiAgICAgICAgIGFzc2VydF9jb25kaXRpb24gPSAnIHx8ICcuam9p
bihbJ3Jlc3VsdCA9PSAiJXMiJyAlIGVudW1fdmFsdWUgZm9yIGVudW1fdmFsdWUgaW4gZW51bV9t
ZW1iZXIudHlwZS5lbnVtX3ZhbHVlcygpXSkKICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgQVNT
RVJUKCVzKTsnICUgYXNzZXJ0X2NvbmRpdGlvbikKLSAgICAgICAgbGluZXMuYXBwZW5kKCcjZWxz
ZSAvLyBBU1NFUlRfRU5BQkxFRCcpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIFVOVVNFRF9Q
QVJBTSh2YWx1ZSk7JykKLSAgICAgICAgbGluZXMuYXBwZW5kKCcjZW5kaWYgLy8gQVNTRVJUX0VO
QUJMRUQnKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyNlbmRpZicpCiAgICAgICAgIGxpbmVzLmFw
cGVuZCgnfScpCiAKICAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRl
X29iamNfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfYmFja2VuZF9kaXNwYXRj
aGVyX2hlYWRlci5weQppbmRleCAzZTEzOTc0YWIzNjIxM2RhNzhiNzJjYTIzMmU3N2UxYTk5NGM1
NWY3Li45NmI2YjYxMjZkYzdlZDgxMzJjM2YyZTIzNWRlM2Y3MDFkY2Y4OTExIDEwMDc1NQotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0
ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19iYWNrZW5kX2Rp
c3BhdGNoZXJfaGVhZGVyLnB5CkBAIC0zMywxMyArMzMsMTMgQEAgZnJvbSBzdHJpbmcgaW1wb3J0
IFRlbXBsYXRlCiB0cnk6CiAgICAgZnJvbSAuY3BwX2dlbmVyYXRvciBpbXBvcnQgQ3BwR2VuZXJh
dG9yCiAgICAgZnJvbSAuZ2VuZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IKLSAgICBmcm9tIC5tb2Rl
bHMgaW1wb3J0IEZyYW1ld29ya3MKKyAgICBmcm9tIC5tb2RlbHMgaW1wb3J0IEVudW1UeXBlLCBB
bGlhc2VkVHlwZSwgRnJhbWV3b3JrcwogICAgIGZyb20gLm9iamNfZ2VuZXJhdG9yIGltcG9ydCBP
YmpDR2VuZXJhdG9yCiAgICAgZnJvbSAub2JqY19nZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBP
YmpDR2VuZXJhdG9yVGVtcGxhdGVzIGFzIE9iakNUZW1wbGF0ZXMKIGV4Y2VwdCBWYWx1ZUVycm9y
OgogICAgIGZyb20gY3BwX2dlbmVyYXRvciBpbXBvcnQgQ3BwR2VuZXJhdG9yCiAgICAgZnJvbSBn
ZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvcgotICAgIGZyb20gbW9kZWxzIGltcG9ydCBGcmFtZXdv
cmtzCisgICAgZnJvbSBtb2RlbHMgaW1wb3J0IEVudW1UeXBlLCBBbGlhc2VkVHlwZSwgRnJhbWV3
b3JrcwogICAgIGZyb20gb2JqY19nZW5lcmF0b3IgaW1wb3J0IE9iakNHZW5lcmF0b3IKICAgICBm
cm9tIG9iamNfZ2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgT2JqQ0dlbmVyYXRvclRlbXBsYXRl
cyBhcyBPYmpDVGVtcGxhdGVzCiAKQEAgLTEwMyw5ICsxMDMsMTkgQEAgY2xhc3MgT2JqQ0JhY2tl
bmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yKE9iakNHZW5lcmF0b3IpOgogCiAgICAgZGVmIF9n
ZW5lcmF0ZV9vYmpjX2hhbmRsZXJfZGVjbGFyYXRpb25fZm9yX2NvbW1hbmQoc2VsZiwgY29tbWFu
ZCk6CiAgICAgICAgIGxpbmVzID0gW10KLSAgICAgICAgcGFyYW1ldGVycyA9IFsnbG9uZyByZXF1
ZXN0SWQnXQotICAgICAgICBmb3IgX3BhcmFtZXRlciBpbiBjb21tYW5kLmNhbGxfcGFyYW1ldGVy
czoKLSAgICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKCclcyBpbl8lcycgJSAoQ3BwR2VuZXJh
dG9yLmNwcF90eXBlX2Zvcl91bmNoZWNrZWRfZm9ybWFsX2luX3BhcmFtZXRlcihfcGFyYW1ldGVy
KSwgX3BhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkpCisgICAgICAgIHBhcmFtZXRlcnMgPSBbJ2xv
bmcgcHJvdG9jb2xfY2FsbElkJ10KKyAgICAgICAgZm9yIHBhcmFtZXRlciBpbiBjb21tYW5kLmNh
bGxfcGFyYW1ldGVyczoKKyAgICAgICAgICAgIHBhcmFtZXRlcl90eXBlID0gcGFyYW1ldGVyLnR5
cGUKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UocGFyYW1ldGVyX3R5cGUsIEFsaWFzZWRUeXBl
KToKKyAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfdHlwZSA9IHBhcmFtZXRlcl90eXBlLmFsaWFz
ZWRfdHlwZQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShwYXJhbWV0ZXJfdHlwZSwgRW51bVR5
cGUpOgorICAgICAgICAgICAgICAgIHBhcmFtZXRlcl90eXBlID0gcGFyYW1ldGVyX3R5cGUucHJp
bWl0aXZlX3R5cGUKKworICAgICAgICAgICAgcGFyYW1ldGVyX25hbWUgPSBwYXJhbWV0ZXIucGFy
YW1ldGVyX25hbWUKKyAgICAgICAgICAgIGlmIHBhcmFtZXRlci5pc19vcHRpb25hbDoKKyAgICAg
ICAgICAgICAgICBwYXJhbWV0ZXJfbmFtZSA9ICdvcHRfJyArIHBhcmFtZXRlcl9uYW1lCisKKyAg
ICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKCclcyAlcycgJSAoQ3BwR2VuZXJhdG9yLmNwcF90
eXBlX2Zvcl9jb21tYW5kX3BhcmFtZXRlcihwYXJhbWV0ZXJfdHlwZSwgcGFyYW1ldGVyLmlzX29w
dGlvbmFsKSwgcGFyYW1ldGVyX25hbWUpKQogCiAgICAgICAgIGNvbW1hbmRfYXJncyA9IHsKICAg
ICAgICAgICAgICdjb21tYW5kTmFtZSc6IGNvbW1hbmQuY29tbWFuZF9uYW1lLApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJh
dGVfb2JqY19iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2JhY2tl
bmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQppbmRleCBmNWVlOGU1ODM5OGQ2OWJhZTRi
ZWI0YzE4NjcwNjNjY2Q1MjIwOWVjLi4xYmQ5NjM1YmQzMjUxOTkxNTFjZmQ5ODAxM2E1MTI3Mjg5
ODhkMWI5IDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlv
bi5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdl
bi9nZW5lcmF0ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQpAQCAt
OTAsOSArOTAsMjAgQEAgY2xhc3MgT2JqQ0JhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25H
ZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6CiAKICAgICBkZWYgX2dlbmVyYXRlX2hhbmRsZXJfaW1w
bGVtZW50YXRpb25fZm9yX2NvbW1hbmQoc2VsZiwgZG9tYWluLCBjb21tYW5kKToKICAgICAgICAg
bGluZXMgPSBbXQotICAgICAgICBwYXJhbWV0ZXJzID0gWydsb25nIHJlcXVlc3RJZCddCisgICAg
ICAgIHBhcmFtZXRlcnMgPSBbJ2xvbmcgcHJvdG9jb2xfY2FsbElkJ10KICAgICAgICAgZm9yIHBh
cmFtZXRlciBpbiBjb21tYW5kLmNhbGxfcGFyYW1ldGVyczoKLSAgICAgICAgICAgIHBhcmFtZXRl
cnMuYXBwZW5kKCclcyBpbl8lcycgJSAoQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl91bmNoZWNr
ZWRfZm9ybWFsX2luX3BhcmFtZXRlcihwYXJhbWV0ZXIpLCBwYXJhbWV0ZXIucGFyYW1ldGVyX25h
bWUpKQorICAgICAgICAgICAgcGFyYW1ldGVyX3R5cGUgPSBwYXJhbWV0ZXIudHlwZQorICAgICAg
ICAgICAgaWYgaXNpbnN0YW5jZShwYXJhbWV0ZXJfdHlwZSwgQWxpYXNlZFR5cGUpOgorICAgICAg
ICAgICAgICAgIHBhcmFtZXRlcl90eXBlID0gcGFyYW1ldGVyX3R5cGUuYWxpYXNlZF90eXBlCisg
ICAgICAgICAgICBpZiBpc2luc3RhbmNlKHBhcmFtZXRlcl90eXBlLCBFbnVtVHlwZSk6CisgICAg
ICAgICAgICAgICAgcGFyYW1ldGVyX3R5cGUgPSBwYXJhbWV0ZXJfdHlwZS5wcmltaXRpdmVfdHlw
ZQorCisgICAgICAgICAgICBwYXJhbWV0ZXJfbmFtZSA9IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFt
ZQorICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAg
IHBhcmFtZXRlcl9uYW1lID0gJ29wdF8nICsgcGFyYW1ldGVyX25hbWUKKyAgICAgICAgICAgIHBh
cmFtZXRlcl9uYW1lID0gJ2luXycgKyBwYXJhbWV0ZXJfbmFtZQorCisgICAgICAgICAgICBwYXJh
bWV0ZXJzLmFwcGVuZCgnJXMgJXMnICUgKENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3JfY29tbWFu
ZF9wYXJhbWV0ZXIocGFyYW1ldGVyX3R5cGUsIHBhcmFtZXRlci5pc19vcHRpb25hbCksIHBhcmFt
ZXRlcl9uYW1lKSkKIAogICAgICAgICBjb21tYW5kX2FyZ3MgPSB7CiAgICAgICAgICAgICAnZG9t
YWluTmFtZSc6IGRvbWFpbi5kb21haW5fbmFtZSwKQEAgLTExNSw0NSArMTI2LDU0IEBAIGNsYXNz
IE9iakNCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKE9iakNHZW5lcmF0
b3IpOgogICAgICAgICBpZiBjb21tYW5kLnJldHVybl9wYXJhbWV0ZXJzOgogICAgICAgICAgICAg
c3VjY2Vzc19ibG9ja19wYXJhbWV0ZXJzID0gW10KICAgICAgICAgICAgIGZvciBwYXJhbWV0ZXIg
aW4gY29tbWFuZC5yZXR1cm5fcGFyYW1ldGVyczoKKyAgICAgICAgICAgICAgICBvdXRfcGFyYW1f
bmFtZSA9IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZQorICAgICAgICAgICAgICAgIGlmIHBhcmFt
ZXRlci5pc19vcHRpb25hbDoKKyAgICAgICAgICAgICAgICAgICAgb3V0X3BhcmFtX25hbWUgPSAn
b3B0XycgKyBvdXRfcGFyYW1fbmFtZQorICAgICAgICAgICAgICAgIG91dF9wYXJhbV9uYW1lID0g
J291dF8nICsgb3V0X3BhcmFtX25hbWUKICAgICAgICAgICAgICAgICBvYmpjX3R5cGUgPSBzZWxm
Lm9iamNfdHlwZV9mb3JfcGFyYW0oZG9tYWluLCBjb21tYW5kLmNvbW1hbmRfbmFtZSwgcGFyYW1l
dGVyKQotICAgICAgICAgICAgICAgIHZhcl9uYW1lID0gT2JqQ0dlbmVyYXRvci5pZGVudGlmaWVy
X3RvX29iamNfaWRlbnRpZmllcihwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpCi0gICAgICAgICAg
ICAgICAgc3VjY2Vzc19ibG9ja19wYXJhbWV0ZXJzLmFwcGVuZChqb2luX3R5cGVfYW5kX25hbWUo
b2JqY190eXBlLCB2YXJfbmFtZSkpCisgICAgICAgICAgICAgICAgc3VjY2Vzc19ibG9ja19wYXJh
bWV0ZXJzLmFwcGVuZChqb2luX3R5cGVfYW5kX25hbWUob2JqY190eXBlLCBvdXRfcGFyYW1fbmFt
ZSkpCiAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBe
KCVzKSB7JyAlICcsICcuam9pbihzdWNjZXNzX2Jsb2NrX3BhcmFtZXRlcnMpKQogICAgICAgICBl
bHNlOgogICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0g
XnsnKQogCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBhdXRvIHByb3RvY29sX2pzb25N
ZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsnKQogICAgICAgICBpZiBjb21tYW5kLnJl
dHVybl9wYXJhbWV0ZXJzOgotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIFJlZjxK
U09OOjpPYmplY3Q+IHJlc3VsdE9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7JykKLQog
ICAgICAgICAgICAgcmVxdWlyZWRfcG9pbnRlcl9wYXJhbWV0ZXJzID0gW3BhcmFtZXRlciBmb3Ig
cGFyYW1ldGVyIGluIGNvbW1hbmQucmV0dXJuX3BhcmFtZXRlcnMgaWYgbm90IHBhcmFtZXRlci5p
c19vcHRpb25hbCBhbmQgT2JqQ0dlbmVyYXRvci5pc190eXBlX29iamNfcG9pbnRlcl90eXBlKHBh
cmFtZXRlci50eXBlKV0KICAgICAgICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gcmVxdWlyZWRfcG9p
bnRlcl9wYXJhbWV0ZXJzOgotICAgICAgICAgICAgICAgIHZhcl9uYW1lID0gT2JqQ0dlbmVyYXRv
ci5pZGVudGlmaWVyX3RvX29iamNfaWRlbnRpZmllcihwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUp
Ci0gICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9G
T1JfUkVRVUlSRURfUEFSQU1FVEVSKCVzLCBAIiVzIik7JyAlICh2YXJfbmFtZSwgdmFyX25hbWUp
KQorICAgICAgICAgICAgICAgIG91dF9wYXJhbV9uYW1lID0gcGFyYW1ldGVyLnBhcmFtZXRlcl9u
YW1lCisgICAgICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgorICAgICAgICAg
ICAgICAgICAgICBvdXRfcGFyYW1fbmFtZSA9ICdvcHRfJyArIG91dF9wYXJhbV9uYW1lCisgICAg
ICAgICAgICAgICAgb3V0X3BhcmFtX25hbWUgPSAnb3V0XycgKyBvdXRfcGFyYW1fbmFtZQorICAg
ICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JF
UVVJUkVEX1BBUkFNRVRFUiglcywgQCIlcyIpOycgJSAob3V0X3BhcmFtX25hbWUsIHBhcmFtZXRl
ci5wYXJhbWV0ZXJfbmFtZSkpCiAgICAgICAgICAgICAgICAgb2JqY19hcnJheV9jbGFzcyA9IHNl
bGYub2JqY19jbGFzc19mb3JfYXJyYXlfdHlwZShwYXJhbWV0ZXIudHlwZSkKICAgICAgICAgICAg
ICAgICBpZiBvYmpjX2FycmF5X2NsYXNzIGFuZCBvYmpjX2FycmF5X2NsYXNzLnN0YXJ0c3dpdGgo
c2VsZi5vYmpjX3ByZWZpeCgpKToKLSAgICAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcg
ICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEVfSU5fQVJSQVkoJXMsIFslcyBjbGFz
c10pOycgJSAodmFyX25hbWUsIG9iamNfYXJyYXlfY2xhc3MpKQorICAgICAgICAgICAgICAgICAg
ICBsaW5lcy5hcHBlbmQoJyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRV9JTl9B
UlJBWSglcywgWyVzIGNsYXNzXSk7JyAlIChvdXRfcGFyYW1fbmFtZSwgb2JqY19hcnJheV9jbGFz
cykpCiAKICAgICAgICAgICAgIG9wdGlvbmFsX3BvaW50ZXJfcGFyYW1ldGVycyA9IFtwYXJhbWV0
ZXIgZm9yIHBhcmFtZXRlciBpbiBjb21tYW5kLnJldHVybl9wYXJhbWV0ZXJzIGlmIHBhcmFtZXRl
ci5pc19vcHRpb25hbCBhbmQgT2JqQ0dlbmVyYXRvci5pc190eXBlX29iamNfcG9pbnRlcl90eXBl
KHBhcmFtZXRlci50eXBlKV0KICAgICAgICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gb3B0aW9uYWxf
cG9pbnRlcl9wYXJhbWV0ZXJzOgotICAgICAgICAgICAgICAgIHZhcl9uYW1lID0gT2JqQ0dlbmVy
YXRvci5pZGVudGlmaWVyX3RvX29iamNfaWRlbnRpZmllcihwYXJhbWV0ZXIucGFyYW1ldGVyX25h
bWUpCi0gICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUiglcywgQCIlcyIpOycgJSAodmFyX25hbWUsIHZh
cl9uYW1lKSkKKyAgICAgICAgICAgICAgICBvdXRfcGFyYW1fbmFtZSA9IHBhcmFtZXRlci5wYXJh
bWV0ZXJfbmFtZQorICAgICAgICAgICAgICAgIGlmIHBhcmFtZXRlci5pc19vcHRpb25hbDoKKyAg
ICAgICAgICAgICAgICAgICAgb3V0X3BhcmFtX25hbWUgPSAnb3B0XycgKyBvdXRfcGFyYW1fbmFt
ZQorICAgICAgICAgICAgICAgIG91dF9wYXJhbV9uYW1lID0gJ291dF8nICsgb3V0X3BhcmFtX25h
bWUKKyAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgVEhST1dfRVhDRVBUSU9O
X0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKCVzLCBAIiVzIik7JyAlIChvdXRfcGFyYW1fbmFt
ZSwgcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKSkKICAgICAgICAgICAgICAgICBvYmpjX2FycmF5
X2NsYXNzID0gc2VsZi5vYmpjX2NsYXNzX2Zvcl9hcnJheV90eXBlKHBhcmFtZXRlci50eXBlKQog
ICAgICAgICAgICAgICAgIGlmIG9iamNfYXJyYXlfY2xhc3MgYW5kIG9iamNfYXJyYXlfY2xhc3Mu
c3RhcnRzd2l0aChzZWxmLm9iamNfcHJlZml4KCkpOgotICAgICAgICAgICAgICAgICAgICBsaW5l
cy5hcHBlbmQoJyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRV9JTl9PUFRJT05B
TF9BUlJBWSglcywgWyVzIGNsYXNzXSk7JyAlICh2YXJfbmFtZSwgb2JqY19hcnJheV9jbGFzcykp
CisgICAgICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBUSFJPV19FWENFUFRJ
T05fRk9SX0JBRF9UWVBFX0lOX09QVElPTkFMX0FSUkFZKCVzLCBbJXMgY2xhc3NdKTsnICUgKG91
dF9wYXJhbV9uYW1lLCBvYmpjX2FycmF5X2NsYXNzKSkKIAogICAgICAgICAgICAgZm9yIHBhcmFt
ZXRlciBpbiBjb21tYW5kLnJldHVybl9wYXJhbWV0ZXJzOgorICAgICAgICAgICAgICAgIG91dF9w
YXJhbV9uYW1lID0gcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lCisgICAgICAgICAgICAgICAgaWYg
cGFyYW1ldGVyLmlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAgICAgICBvdXRfcGFyYW1fbmFt
ZSA9ICdvcHRfJyArIG91dF9wYXJhbV9uYW1lCisgICAgICAgICAgICAgICAgb3V0X3BhcmFtX25h
bWUgPSAnb3V0XycgKyBvdXRfcGFyYW1fbmFtZQogICAgICAgICAgICAgICAgIGtleWVkX3NldF9t
ZXRob2QgPSBDcHBHZW5lcmF0b3IuY3BwX3NldHRlcl9tZXRob2RfZm9yX3R5cGUocGFyYW1ldGVy
LnR5cGUpCi0gICAgICAgICAgICAgICAgdmFyX25hbWUgPSBPYmpDR2VuZXJhdG9yLmlkZW50aWZp
ZXJfdG9fb2JqY19pZGVudGlmaWVyKHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkKLSAgICAgICAg
ICAgICAgICB2YXJfZXhwcmVzc2lvbiA9ICcqJXMnICUgdmFyX25hbWUgaWYgcGFyYW1ldGVyLmlz
X29wdGlvbmFsIGVsc2UgdmFyX25hbWUKKyAgICAgICAgICAgICAgICB2YXJfZXhwcmVzc2lvbiA9
ICcqJXMnICUgb3V0X3BhcmFtX25hbWUgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsIGVsc2Ugb3V0
X3BhcmFtX25hbWUKICAgICAgICAgICAgICAgICBleHBvcnRfZXhwcmVzc2lvbiA9IHNlbGYub2Jq
Y19wcm90b2NvbF9leHBvcnRfZXhwcmVzc2lvbl9mb3JfdmFyaWFibGUocGFyYW1ldGVyLnR5cGUs
IHZhcl9leHByZXNzaW9uKQogICAgICAgICAgICAgICAgIGlmIG5vdCBwYXJhbWV0ZXIuaXNfb3B0
aW9uYWw6Ci0gICAgICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICByZXN1bHRP
YmplY3QtPiVzKCIlcyJfcywgJXMpOycgJSAoa2V5ZWRfc2V0X21ldGhvZCwgcGFyYW1ldGVyLnBh
cmFtZXRlcl9uYW1lLCBleHBvcnRfZXhwcmVzc2lvbikpCisgICAgICAgICAgICAgICAgICAgIGxp
bmVzLmFwcGVuZCgnICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+JXMoIiVzIl9zLCAlcyk7
JyAlIChrZXllZF9zZXRfbWV0aG9kLCBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUsIGV4cG9ydF9l
eHByZXNzaW9uKSkKICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBs
aW5lcy5hcHBlbmQoJyAgICAgICAgaWYgKCVzKScgJSB2YXJfbmFtZSkKLSAgICAgICAgICAgICAg
ICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgICAgICByZXN1bHRPYmplY3QtPiVzKCIlcyJfcywg
JXMpOycgJSAoa2V5ZWRfc2V0X21ldGhvZCwgcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lLCBleHBv
cnRfZXhwcmVzc2lvbikpCi0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgYmFja2Vu
ZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHRPYmpl
Y3QpLCBmYWxzZSk7JykKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgn
ICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBKU09O
OjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7JykKKyAgICAgICAgICAgICAgICAgICAgbGluZXMu
YXBwZW5kKCcgICAgICAgIGlmICghISVzKScgJSBvdXRfcGFyYW1fbmFtZSkKKyAgICAgICAgICAg
ICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+
JXMoIiVzIl9zLCAlcyk7JyAlIChrZXllZF9zZXRfbWV0aG9kLCBwYXJhbWV0ZXIucGFyYW1ldGVy
X25hbWUsIGV4cG9ydF9leHByZXNzaW9uKSkKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAg
IGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShwcm90b2NvbF9jYWxsSWQsIFdURk1v
dmUocHJvdG9jb2xfanNvbk1lc3NhZ2UpLCBmYWxzZSk7JykKIAogICAgICAgICBsaW5lcy5hcHBl
bmQoJyAgICB9OycpCiAgICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCkBAIC0xNjYsMTcg
KzE4NiwyNyBAQCBjbGFzcyBPYmpDQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVy
YXRvcihPYmpDR2VuZXJhdG9yKToKICAgICAgICAgZGVmIGluX3BhcmFtX2V4cHJlc3Npb24ocGFy
YW1fbmFtZSwgcGFyYW1ldGVyKToKICAgICAgICAgICAgIF90eXBlID0gcGFyYW1ldGVyLnR5cGUK
ICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEFsaWFzZWRUeXBlKToKLSAgICAgICAg
ICAgICAgICBfdHlwZSA9IF90eXBlLmFsaWFzZWRfdHlwZSAgIyBGYWxsIHRocm91Z2ggdG8gZW51
bSBvciBwcmltaXRpdmUuCisgICAgICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5hbGlhc2VkX3R5
cGUKICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKToKLSAgICAgICAg
ICAgICAgICBfdHlwZSA9IF90eXBlLnByaW1pdGl2ZV90eXBlICAjIEZhbGwgdGhyb3VnaCB0byBw
cmltaXRpdmUuCi0gICAgICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBQcmltaXRpdmVUeXBl
KToKLSAgICAgICAgICAgICAgICBpZiBfdHlwZS5yYXdfbmFtZSgpIGluIFsnYXJyYXknLCAnYW55
JywgJ29iamVjdCddOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gJyYlcycgJSBwYXJhbV9u
YW1lIGlmIG5vdCBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwgZWxzZSBwYXJhbV9uYW1lCi0gICAgICAg
ICAgICAgICAgcmV0dXJuICcqJXMnICUgcGFyYW1fbmFtZSBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9u
YWwgZWxzZSBwYXJhbV9uYW1lCi0gICAgICAgICAgICByZXR1cm4gJyYlcycgJSBwYXJhbV9uYW1l
IGlmIG5vdCBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwgZWxzZSBwYXJhbV9uYW1lCisgICAgICAgICAg
ICAgICAgX3R5cGUgPSBfdHlwZS5wcmltaXRpdmVfdHlwZQorCisgICAgICAgICAgICBpZiBfdHlw
ZS5pc19lbnVtKCk6CisgICAgICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgor
ICAgICAgICAgICAgICAgICAgICBwYXJhbV9uYW1lID0gJyonICsgcGFyYW1fbmFtZQorICAgICAg
ICAgICAgICAgIHJldHVybiAnUHJvdG9jb2w6OkhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVl
KCVzKScgJSBwYXJhbV9uYW1lCisgICAgICAgICAgICBpZiBDcHBHZW5lcmF0b3Iuc2hvdWxkX3Jl
bGVhc2VfYXJndW1lbnQoX3R5cGUsIHBhcmFtZXRlci5pc19vcHRpb25hbCk6CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHBhcmFtX25hbWUgKyAnLnJlbGVhc2VOb25OdWxsKCknCisgICAgICAgICAg
ICBpZiBDcHBHZW5lcmF0b3Iuc2hvdWxkX2RlcmVmZXJlbmNlX2FyZ3VtZW50KF90eXBlLCBwYXJh
bWV0ZXIuaXNfb3B0aW9uYWwpOgorICAgICAgICAgICAgICAgIHJldHVybiAnKicgKyBwYXJhbV9u
YW1lCisgICAgICAgICAgICBpZiBDcHBHZW5lcmF0b3Iuc2hvdWxkX21vdmVfYXJndW1lbnQoX3R5
cGUsIHBhcmFtZXRlci5pc19vcHRpb25hbCk6CisgICAgICAgICAgICAgICAgcmV0dXJuICdXVEZN
b3ZlKCVzKScgJSBwYXJhbV9uYW1lCisgICAgICAgICAgICByZXR1cm4gcGFyYW1fbmFtZQogCiAg
ICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gY29tbWFuZC5jYWxsX3BhcmFtZXRlcnM6Ci0gICAgICAg
ICAgICBpbl9wYXJhbV9uYW1lID0gJ2luXyVzJyAlIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZQor
ICAgICAgICAgICAgaW5fcGFyYW1fbmFtZSA9IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZQorICAg
ICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAgIGluX3Bh
cmFtX25hbWUgPSAnb3B0XycgKyBpbl9wYXJhbV9uYW1lCisgICAgICAgICAgICBpbl9wYXJhbV9u
YW1lID0gJ2luXycgKyBpbl9wYXJhbV9uYW1lCiAgICAgICAgICAgICBvYmpjX2luX3BhcmFtX25h
bWUgPSAnb18lcycgJSBpbl9wYXJhbV9uYW1lCiAgICAgICAgICAgICBvYmpjX3R5cGUgPSBzZWxm
Lm9iamNfdHlwZV9mb3JfcGFyYW0oZG9tYWluLCBjb21tYW5kLmNvbW1hbmRfbmFtZSwgcGFyYW1l
dGVyLCBGYWxzZSkKICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UocGFyYW1ldGVyLnR5cGUsIEVu
dW1UeXBlKToKQEAgLTE5NCwxMSArMjI0LDggQEAgY2xhc3MgT2JqQ0JhY2tlbmREaXNwYXRjaGVy
SW1wbGVtZW50YXRpb25HZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6CiAKICAgICAgICAgICAgIGVs
c2U6CiAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgJXM7JyAlIGpvaW5fdHlwZV9h
bmRfbmFtZShvYmpjX3R5cGUsIG9iamNfaW5fcGFyYW1fbmFtZSkpCi0gICAgICAgICAgICAgICAg
bGluZXMuYXBwZW5kKCcgICAgaWYgKCVzKScgJSBpbl9wYXJhbV9uYW1lKQorICAgICAgICAgICAg
ICAgIGxpbmVzLmFwcGVuZCgnICAgIGlmICghISVzKScgJSBpbl9wYXJhbV9uYW1lKQogICAgICAg
ICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICAlcyA9ICVzOycgJSAob2JqY19pbl9wYXJh
bV9uYW1lLCBpbXBvcnRfZXhwcmVzc2lvbikpCi0KLSAgICAgICAgaWYgbGluZXM6Ci0gICAgICAg
ICAgICBsaW5lcy5hcHBlbmQoJycpCiAgICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCiAK
ICAgICBkZWYgX2dlbmVyYXRlX2ludm9jYXRpb25fZm9yX2NvbW1hbmQoc2VsZiwgZG9tYWluLCBj
b21tYW5kKToKQEAgLTIwNiw3ICsyMzMsMTAgQEAgY2xhc3MgT2JqQ0JhY2tlbmREaXNwYXRjaGVy
SW1wbGVtZW50YXRpb25HZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6CiAgICAgICAgIHBhaXJzLmFw
cGVuZCgnV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjaycpCiAgICAgICAgIHBhaXJzLmFw
cGVuZCgnc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjaycpCiAgICAgICAgIGZvciBwYXJh
bWV0ZXIgaW4gY29tbWFuZC5jYWxsX3BhcmFtZXRlcnM6Ci0gICAgICAgICAgICBpbl9wYXJhbV9u
YW1lID0gJ2luXyVzJyAlIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZQorICAgICAgICAgICAgaW5f
cGFyYW1fbmFtZSA9IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZQorICAgICAgICAgICAgaWYgcGFy
YW1ldGVyLmlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAgIGluX3BhcmFtX25hbWUgPSAnb3B0
XycgKyBpbl9wYXJhbV9uYW1lCisgICAgICAgICAgICBpbl9wYXJhbV9uYW1lID0gJ2luXycgKyBp
bl9wYXJhbV9uYW1lCiAgICAgICAgICAgICBvYmpjX2luX3BhcmFtX2V4cHJlc3Npb24gPSAnb18l
cycgJSBpbl9wYXJhbV9uYW1lCiAgICAgICAgICAgICBpZiBub3QgcGFyYW1ldGVyLmlzX29wdGlv
bmFsOgogICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UocGFyYW1ldGVyLnR5cGUsIEVudW1U
eXBlKToKQEAgLTIxNyw2ICsyNDcsNiBAQCBjbGFzcyBPYmpDQmFja2VuZERpc3BhdGNoZXJJbXBs
ZW1lbnRhdGlvbkdlbmVyYXRvcihPYmpDR2VuZXJhdG9yKToKICAgICAgICAgICAgICAgICBpZiBp
c2luc3RhbmNlKHBhcmFtZXRlci50eXBlLCBFbnVtVHlwZSk6CiAgICAgICAgICAgICAgICAgICAg
IG9iamNfaW5fcGFyYW1fZXhwcmVzc2lvbiA9ICclcy52YWx1ZSgpJyAlIG9iamNfaW5fcGFyYW1f
ZXhwcmVzc2lvbgogCi0gICAgICAgICAgICAgICAgb3B0aW9uYWxfZXhwcmVzc2lvbiA9ICcoJXMg
PyAmJXMgOiBuaWwpJyAlIChpbl9wYXJhbV9uYW1lLCBvYmpjX2luX3BhcmFtX2V4cHJlc3Npb24p
CisgICAgICAgICAgICAgICAgb3B0aW9uYWxfZXhwcmVzc2lvbiA9ICcoISElcyA/ICYlcyA6IG5p
bCknICUgKGluX3BhcmFtX25hbWUsIG9iamNfaW5fcGFyYW1fZXhwcmVzc2lvbikKICAgICAgICAg
ICAgICAgICBwYWlycy5hcHBlbmQoJyVzOiVzJyAlIChwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUs
IG9wdGlvbmFsX2V4cHJlc3Npb24pKQogICAgICAgICByZXR1cm4gJyAgICBbbV9kZWxlZ2F0ZSAl
cyVzXTsnICUgKGNvbW1hbmQuY29tbWFuZF9uYW1lLCAnICcuam9pbihwYWlycykpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5l
cmF0ZV9vYmpjX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2Zy
b250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkKaW5kZXggZGRkYjI3YTg4YzJiYWZm
NWZjNmYyN2JjNDNhMDFlMzFlYTljZDQ5ZC4uOGQ0MTkzODEyM2Y5MDZmYmYwOTFlMmFiN2IzNmE2
MDczM2RiMzk1MiAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVu
dGF0aW9uLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9j
b2RlZ2VuL2dlbmVyYXRlX29iamNfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5w
eQpAQCAtMTI1LDExICsxMjUsMTEgQEAgY2xhc3MgT2JqQ0Zyb250ZW5kRGlzcGF0Y2hlckltcGxl
bWVudGF0aW9uR2VuZXJhdG9yKE9iakNHZW5lcmF0b3IpOgogICAgICAgICBpZiByZXF1aXJlZF9w
b2ludGVyX3BhcmFtZXRlcnMgb3Igb3B0aW9uYWxfcG9pbnRlcl9wYXJhbWV0ZXJzOgogICAgICAg
ICAgICAgbGluZXMuYXBwZW5kKCcnKQogCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIFJlZjxK
U09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsnKQotICAg
ICAgICBsaW5lcy5hcHBlbmQoJyAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3Ms
ICIlcy4lcyJfcyk7JyAlIChkb21haW4uZG9tYWluX25hbWUsIGV2ZW50LmV2ZW50X25hbWUpKQor
ICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNP
Tjo6T2JqZWN0OjpjcmVhdGUoKTsnKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBwcm90b2Nv
bF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICIlcy4lcyJfcyk7JyAlIChkb21h
aW4uZG9tYWluX25hbWUsIGV2ZW50LmV2ZW50X25hbWUpKQogICAgICAgICBpZiBldmVudC5ldmVu
dF9wYXJhbWV0ZXJzOgogICAgICAgICAgICAgbGluZXMuZXh0ZW5kKHNlbGYuX2dlbmVyYXRlX2V2
ZW50X291dF9wYXJhbWV0ZXJzKGRvbWFpbiwgZXZlbnQpKQotICAgICAgICBsaW5lcy5hcHBlbmQo
JyAgICByb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7JykKKyAg
ICAgICAgbGluZXMuYXBwZW5kKCcgICAgcm91dGVyLnNlbmRFdmVudChwcm90b2NvbF9qc29uTWVz
c2FnZS0+dG9KU09OU3RyaW5nKCkpOycpCiAgICAgICAgIGxpbmVzLmFwcGVuZCgnfScpCiAgICAg
ICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGV2ZW50LmNvbmRp
dGlvbiwgJ1xuJy5qb2luKGxpbmVzKSkKIApAQCAtMTQ1LDE2ICsxNDUsMTYgQEAgY2xhc3MgT2Jq
Q0Zyb250ZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKE9iakNHZW5lcmF0b3Ip
OgogCiAgICAgZGVmIF9nZW5lcmF0ZV9ldmVudF9vdXRfcGFyYW1ldGVycyhzZWxmLCBkb21haW4s
IGV2ZW50KToKICAgICAgICAgbGluZXMgPSBbXQotICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBS
ZWY8SlNPTjo6T2JqZWN0PiBwYXJhbXNPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOycp
CisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGF1dG8gcHJvdG9jb2xfcGFyYW1zT2JqZWN0ID0g
SlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsnKQogICAgICAgICBmb3IgcGFyYW1ldGVyIGluIGV2ZW50
LmV2ZW50X3BhcmFtZXRlcnM6CiAgICAgICAgICAgICBrZXllZF9zZXRfbWV0aG9kID0gQ3BwR2Vu
ZXJhdG9yLmNwcF9zZXR0ZXJfbWV0aG9kX2Zvcl90eXBlKHBhcmFtZXRlci50eXBlKQogICAgICAg
ICAgICAgdmFyX25hbWUgPSBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUKICAgICAgICAgICAgIHNh
ZmVfdmFyX25hbWUgPSAnKColcyknICUgdmFyX25hbWUgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFs
IGVsc2UgdmFyX25hbWUKICAgICAgICAgICAgIGV4cG9ydF9leHByZXNzaW9uID0gc2VsZi5vYmpj
X3Byb3RvY29sX2V4cG9ydF9leHByZXNzaW9uX2Zvcl92YXJpYWJsZShwYXJhbWV0ZXIudHlwZSwg
c2FmZV92YXJfbmFtZSkKICAgICAgICAgICAgIGlmIG5vdCBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6
Ci0gICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgcGFyYW1zT2JqZWN0LT4lcygiJXMi
X3MsICVzKTsnICUgKGtleWVkX3NldF9tZXRob2QsIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwg
ZXhwb3J0X2V4cHJlc3Npb24pKQorICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIHBy
b3RvY29sX3BhcmFtc09iamVjdC0+JXMoIiVzIl9zLCAlcyk7JyAlIChrZXllZF9zZXRfbWV0aG9k
LCBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUsIGV4cG9ydF9leHByZXNzaW9uKSkKICAgICAgICAg
ICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgaWYgKCVzKScgJSAo
cGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKSkKLSAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQo
JyAgICAgICAgcGFyYW1zT2JqZWN0LT4lcygiJXMiX3MsICVzKTsnICUgKGtleWVkX3NldF9tZXRo
b2QsIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwgZXhwb3J0X2V4cHJlc3Npb24pKQotICAgICAg
ICBsaW5lcy5hcHBlbmQoJyAgICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiX3MsIFdU
Rk1vdmUocGFyYW1zT2JqZWN0KSk7JykKKyAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAg
ICAgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT4lcygiJXMiX3MsICVzKTsnICUgKGtleWVkX3Nl
dF9tZXRob2QsIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwgZXhwb3J0X2V4cHJlc3Npb24pKQor
ICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0T2JqZWN0
KCJwYXJhbXMiX3MsIFdURk1vdmUocHJvdG9jb2xfcGFyYW1zT2JqZWN0KSk7JykKICAgICAgICAg
cmV0dXJuIGxpbmVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0b3IucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0b3IucHkKaW5kZXggOTRkMThkOWQ2NjE5NGQx
NTg1YzBlMTBjMDQ5NGJiNGIxYTEzYjk1NS4uMjlhMmRlYTcyNGYwYmJlY2ZlYmE2ZGI5MjA2MDgx
NzAxZTUxMGM1MSAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2NvZGVnZW4vZ2VuZXJhdG9yLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRvci5weQpAQCAtNzMsOSArNzMsNiBAQCBf
VFlQRVNfTkVFRElOR19SVU5USU1FX0NBU1RTID0gc2V0KFsKICAgICAiUnVudGltZS5Db2xsZWN0
aW9uRW50cnkiLAogICAgICJEZWJ1Z2dlci5GdW5jdGlvbkRldGFpbHMiLAogICAgICJEZWJ1Z2dl
ci5DYWxsRnJhbWUiLAotICAgICJDYW52YXMuVHJhY2VMb2ciLAotICAgICJDYW52YXMuUmVzb3Vy
Y2VJbmZvIiwKLSAgICAiQ2FudmFzLlJlc291cmNlU3RhdGUiLAogICAgICMgVGhpcyBzaG91bGQg
YmUgYSB0ZW1wb3JhcnkgaGFjay4gVGltZWxpbmVFdmVudCBzaG91bGQgYmUgY3JlYXRlZCB2aWEg
Z2VuZXJhdGVkIEMrKyBBUEkuCiAgICAgIlRpbWVsaW5lLlRpbWVsaW5lRXZlbnQiLAogICAgICMg
Rm9yIHRlc3RpbmcgcHVycG9zZXMgb25seS4KQEAgLTg1LDEwICs4MiwxOSBAQCBfVFlQRVNfTkVF
RElOR19SVU5USU1FX0NBU1RTID0gc2V0KFsKICMgRklYTUU6IFRoaXMgc2hvdWxkIGJlIGNvbnZl
cnRlZCBpbnRvIGEgcHJvcGVydHkgaW4gSlNPTi4KIF9UWVBFU19XSVRIX09QRU5fRklFTERTID0g
ewogICAgICJUaW1lbGluZS5UaW1lbGluZUV2ZW50IjogW10sCi0gICAgIyBJbnNwZWN0b3JTdHls
ZVNoZWV0IG5vdCBvbmx5IGNyZWF0ZXMgdGhpcyBwcm9wZXJ0eSBidXQgd2FudHMgdG8gcmVhZCBp
dCBhbmQgbW9kaWZ5IGl0LgotICAgICJDU1MuQ1NTUHJvcGVydHkiOiBbXSwKLSAgICAjIEluc3Bl
Y3Rvck5ldHdvcmtBZ2VudCBuZWVkcyB0byB1cGRhdGUgbWltZS10eXBlLgotICAgICJOZXR3b3Jr
LlJlc3BvbnNlIjogWyJtaW1lVHlwZSJdLAorICAgICJDU1MuQ1NTUHJvcGVydHkiOiBbInByaW9y
aXR5IiwgInBhcnNlZE9rIiwgInN0YXR1cyJdLAorICAgICJET00uSGlnaGxpZ2h0Q29uZmlnIjog
W10sCisgICAgIkRPTS5SR0JBQ29sb3IiOiBbXSwKKyAgICAiRE9NU3RvcmFnZS5TdG9yYWdlSWQi
OiBbXSwKKyAgICAiRGVidWdnZXIuQnJlYWtwb2ludEFjdGlvbiI6IFtdLAorICAgICJEZWJ1Z2dl
ci5CcmVha3BvaW50T3B0aW9ucyI6IFtdLAorICAgICJEZWJ1Z2dlci5Mb2NhdGlvbiI6IFtdLAor
ICAgICJJbmRleGVkREIuS2V5IjogW10sCisgICAgIkluZGV4ZWREQi5LZXlSYW5nZSI6IFtdLAor
ICAgICJOZXR3b3JrLlJlc3BvbnNlIjogWyJzdGF0dXMiLCAic3RhdHVzVGV4dCIsICJtaW1lVHlw
ZSIsICJzb3VyY2UiXSwKKyAgICAiUGFnZS5Db29raWUiOiBbXSwKKyAgICAiUnVudGltZS5DYWxs
QXJndW1lbnQiOiBbIm9iamVjdElkIl0sCisgICAgIlJ1bnRpbWUuVHlwZUxvY2F0aW9uIjogW10s
CiAgICAgIyBGb3IgdGVzdGluZyBwdXJwb3NlcyBvbmx5LgogICAgICJUZXN0Lk9wZW5QYXJhbWV0
ZXJzIjogWyJhbHBoYSJdLAogfQpAQCAtMTM0LDcgKzE0MCw3IEBAIGNsYXNzIEdlbmVyYXRvcjoK
ICAgICAgICAgICAgIGlmIHNlbGYubW9kZWwoKS5mcmFtZXdvcmsubmFtZSBub3QgaW4gYWxsb3dl
ZF9mcmFtZXdvcmtzOgogICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAKLSAgICAgICAgICAgIGlm
IGZyYW1ld29ya19uYW1lID09ICJXVEYiOgorICAgICAgICAgICAgaWYgZnJhbWV3b3JrX25hbWUg
PT0gIldURiIgb3IgZnJhbWV3b3JrX25hbWUgPT0gInN0ZCI6CiAgICAgICAgICAgICAgICAgaW5j
bHVkZXMuYWRkKCIjaW5jbHVkZSA8JXM+IiAlIGhlYWRlcl9wYXRoKQogICAgICAgICAgICAgZWxp
ZiBzZWxmLm1vZGVsKCkuZnJhbWV3b3JrLm5hbWUgIT0gZnJhbWV3b3JrX25hbWU6CiAgICAgICAg
ICAgICAgICAgaW5jbHVkZXMuYWRkKCIjaW5jbHVkZSA8JXMvJXM+IiAlIChmcmFtZXdvcmtfbmFt
ZSwgb3MucGF0aC5iYXNlbmFtZShoZWFkZXJfcGF0aCkpKQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vb2JqY19nZW5lcmF0b3IucHkg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9vYmpjX2dl
bmVyYXRvci5weQppbmRleCA3MzE1M2I5NTQ2NjcyYjk5MDRlN2Y1ZWI5MTg4NjVmYzhhNTE2OGI2
Li5hMmQzNzZkZjNiOTQzZGRjOTE2NzhiYmJhNWEyZWQzZjAyZTM3MGMwIDEwMDc1NQotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9vYmpjX2dlbmVy
YXRvci5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29k
ZWdlbi9vYmpjX2dlbmVyYXRvci5weQpAQCAtMjYzLDcgKzI2Myw3IEBAIGNsYXNzIE9iakNHZW5l
cmF0b3IoR2VuZXJhdG9yKToKICAgICAgICAgaWYgKGlzaW5zdGFuY2UoX3R5cGUsIEVudW1UeXBl
KSk6CiAgICAgICAgICAgICByZXR1cm4gT2JqQ0dlbmVyYXRvci5wcm90b2NvbF90eXBlX2Zvcl90
eXBlKF90eXBlLnByaW1pdGl2ZV90eXBlKQogICAgICAgICBpZiAoaXNpbnN0YW5jZShfdHlwZSwg
T2JqZWN0VHlwZSkpOgotICAgICAgICAgICAgcmV0dXJuICdJbnNwZWN0b3I6OlByb3RvY29sOjol
czo6JXMnICUgKF90eXBlLnR5cGVfZG9tYWluKCkuZG9tYWluX25hbWUsIF90eXBlLnJhd19uYW1l
KCkpCisgICAgICAgICAgICByZXR1cm4gJ1Byb3RvY29sOjolczo6JXMnICUgKF90eXBlLnR5cGVf
ZG9tYWluKCkuZG9tYWluX25hbWUsIF90eXBlLnJhd19uYW1lKCkpCiAgICAgICAgIGlmIChpc2lu
c3RhbmNlKF90eXBlLCBBcnJheVR5cGUpKToKICAgICAgICAgICAgIHN1Yl90eXBlID0gT2JqQ0dl
bmVyYXRvci5wcm90b2NvbF90eXBlX2Zvcl90eXBlKF90eXBlLmVsZW1lbnRfdHlwZSkKICAgICAg
ICAgICAgIHJldHVybiAnSlNPTjo6QXJyYXlPZjwlcz4nICUgc3ViX3R5cGUKQEAgLTM1Myw4ICsz
NTMsNiBAQCBjbGFzcyBPYmpDR2VuZXJhdG9yKEdlbmVyYXRvcik6CiAgICAgICAgIGlmIChpc2lu
c3RhbmNlKF90eXBlLCBQcmltaXRpdmVUeXBlKSk6CiAgICAgICAgICAgICByZXR1cm4gc2VsZi5v
YmpjX3R5cGVfZm9yX3Jhd19uYW1lKF90eXBlLnJhd19uYW1lKCkpCiAgICAgICAgIGlmIChpc2lu
c3RhbmNlKF90eXBlLCBFbnVtVHlwZSkpOgotICAgICAgICAgICAgaWYgX3R5cGUuaXNfYW5vbnlt
b3VzOgotICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLm9iamNfZW51bV9uYW1lX2Zvcl9hbm9u
eW1vdXNfZW51bV9wYXJhbWV0ZXIoZG9tYWluLCBldmVudF9vcl9jb21tYW5kX25hbWUsIHBhcmFt
ZXRlcikKICAgICAgICAgICAgIHJldHVybiBzZWxmLm9iamNfZW51bV9uYW1lX2Zvcl9ub25fYW5v
bnltb3VzX2VudW0oX3R5cGUpCiAgICAgICAgIGlmIChpc2luc3RhbmNlKF90eXBlLCBPYmplY3RU
eXBlKSk6CiAgICAgICAgICAgICByZXR1cm4gc2VsZi5vYmpjX25hbWVfZm9yX3R5cGUoX3R5cGUp
ICsgJyAqJwpAQCAtMzk4LDggKzM5Niw2IEBAIGNsYXNzIE9iakNHZW5lcmF0b3IoR2VuZXJhdG9y
KToKIAogICAgIGRlZiBvYmpjX3Byb3RvY29sX2ltcG9ydF9leHByZXNzaW9uX2Zvcl9wYXJhbWV0
ZXIoc2VsZiwgbmFtZSwgZG9tYWluLCBldmVudF9vcl9jb21tYW5kX25hbWUsIHBhcmFtZXRlcik6
CiAgICAgICAgIGlmIGlzaW5zdGFuY2UocGFyYW1ldGVyLnR5cGUsIEVudW1UeXBlKToKLSAgICAg
ICAgICAgIGlmIHBhcmFtZXRlci50eXBlLmlzX2Fub255bW91czoKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gJ2Zyb21Qcm90b2NvbFN0cmluZzwlcz4oJXMpJyAlIChzZWxmLm9iamNfZW51bV9uYW1l
X2Zvcl9hbm9ueW1vdXNfZW51bV9wYXJhbWV0ZXIoZG9tYWluLCBldmVudF9vcl9jb21tYW5kX25h
bWUsIHBhcmFtZXRlciksIG5hbWUpCiAgICAgICAgICAgICByZXR1cm4gJ2Zyb21Qcm90b2NvbFN0
cmluZzwlcz4oJXMpJyAlIChzZWxmLm9iamNfZW51bV9uYW1lX2Zvcl9ub25fYW5vbnltb3VzX2Vu
dW0ocGFyYW1ldGVyLnR5cGUpLCBuYW1lKQogICAgICAgICByZXR1cm4gc2VsZi5vYmpjX3Byb3Rv
Y29sX2ltcG9ydF9leHByZXNzaW9uX2Zvcl92YXJpYWJsZShwYXJhbWV0ZXIudHlwZSwgbmFtZSkK
IApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2Nv
ZGVnZW4vb2JqY19nZW5lcmF0b3JfdGVtcGxhdGVzLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vb2JqY19nZW5lcmF0b3JfdGVtcGxhdGVzLnB5Cmlu
ZGV4IDMyNmMyNjI1ZWEzNGYwNjZiMmQ0Y2M5ODQ2ZTE0YTIzNDFiODE4ODEuLmI1NmQxNDgxOTVj
NGI2NWZmZDI0M2E5OTEwYWFkMzYzMzNhMDg1MmQgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL29iamNfZ2VuZXJhdG9yX3RlbXBsYXRl
cy5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdl
bi9vYmpjX2dlbmVyYXRvcl90ZW1wbGF0ZXMucHkKQEAgLTExNCwxMyArMTE0LDEzIEBAIHByaXZh
dGU6CiAgICAgIiIidm9pZCBPYmpDSW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRj
aGVyOjoke2NvbW1hbmROYW1lfSgke3BhcmFtZXRlcnN9KQogewogICAgIGlmICghJHtyZXNwb25k
c1RvU2VsZWN0b3J9KSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3Rv
Y29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICIn
JHtkb21haW5OYW1lfS4ke2NvbW1hbmROYW1lfScgd2FzIG5vdCBmb3VuZCJfcyk7CisgICAgICAg
IGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocHJvdG9jb2xfY2FsbElk
LCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInJHtkb21haW5OYW1lfS4ke2Nv
bW1hbmROYW1lfScgd2FzIG5vdCBmb3VuZCJfcyk7CiAgICAgICAgIGJhY2tlbmREaXNwYXRjaGVy
KCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBp
ZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRj
aGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5y
ZXBvcnRQcm90b2NvbEVycm9yKHByb3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNl
cnZlckVycm9yLCBlcnJvcik7CiAgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5k
aW5nRXJyb3JzKCk7CiAgICAgfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2VudW0tdmFsdWVzLmpzb24gYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZW51bS12YWx1ZXMuanNvbgppbmRleCBj
ZGFkNjFkZjdjOWY5Yzc2ZTY5Mjg5N2MzZGZlMGIwODIzZjkwZTRkLi4yODE1NjFiOTQ4ZTE5YTQx
ZmEwYTJjODBlY2YyZTA5YWYzYThiYzQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZW51bS12YWx1ZXMuanNvbgorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZW51bS12YWx1ZXMuanNvbgpA
QCAtMyw5ICszLDkgQEAKICAgICAiZG9tYWluIjogIlR5cGVEb21haW4iLAogICAgICJ0eXBlcyI6
IFsKICAgICAgICAgewotICAgICAgICAgICAgImlkIjogIlR5cGVEb21haW5FbnVtIiwKKyAgICAg
ICAgICAgICJpZCI6ICJFbnVtIiwKICAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCi0gICAg
ICAgICAgICAiZW51bSI6IFsic2hhcmVkIiwgInJlZCIsICJncmVlbiIsICJibHVlIl0KKyAgICAg
ICAgICAgICJlbnVtIjogWyJzaGFyZWQiLCAiMSIsICIyIl0KICAgICAgICAgfQogICAgIF0KIH0s
CkBAIC0xMywxMCArMTMsMTggQEAKICAgICAiZG9tYWluIjogIkNvbW1hbmREb21haW4iLAogICAg
ICJjb21tYW5kcyI6IFsKICAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAiY29tbWFuZFdp
dGhFbnVtUmV0dXJuVmFsdWUiLAotICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbXSwKKyAgICAg
ICAgICAgICJuYW1lIjogImNvbW1hbmQiLAorICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCisg
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJlbnVtUmVxdWlyZWQiLCAiJHJlZiI6ICJUeXBlRG9t
YWluLkVudW0iIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJlbnVtT3B0aW9uYWwiLCAi
JHJlZiI6ICJUeXBlRG9tYWluLkVudW0iLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJwYXJhbWV0ZXJSZXF1aXJlZCIsICJ0eXBlIjogInN0cmluZyIsICJl
bnVtIjogWyJzaGFyZWQiLCAic2hhcmVkUmVxdWlyZWQiLCAiYmxhY2siXSB9LAorICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAicGFyYW1ldGVyT3B0aW9uYWwiLCAidHlwZSI6ICJzdHJpbmciLCAi
ZW51bSI6IFsic2hhcmVkIiwgInNoYXJlZE9wdGlvbmFsIiwgInJlZCJdLCAib3B0aW9uYWwiOiB0
cnVlIH0KKyAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAicmV0dXJucyI6IFsKLSAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogInJldHVyblZhbHVlIiwgInR5cGUiOiAic3RyaW5nIiwgImVudW0i
OiBbInNoYXJlZCIsICJjeWFuIiwgIm1hZ2VudGEiLCAieWVsbG93Il0gfQorICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAiZW51bVJlcXVpcmVkIiwgIiRyZWYiOiAiVHlwZURvbWFpbi5FbnVtIiB9
LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZW51bU9wdGlvbmFsIiwgIiRyZWYiOiAiVHlw
ZURvbWFpbi5FbnVtIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAicmV0dXJuUmVxdWlyZWQiLCAidHlwZSI6ICJzdHJpbmciLCAiZW51bSI6IFsic2hhcmVk
IiwgInNoYXJlZFJlcXVpcmVkIiwgIndoaXRlIl0gfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1l
IjogInJldHVybk9wdGlvbmFsIiwgInR5cGUiOiAic3RyaW5nIiwgImVudW0iOiBbInNoYXJlZCIs
ICJzaGFyZWRPcHRpb25hbCIsICJibHVlIl0sICJvcHRpb25hbCI6IHRydWUgfQogICAgICAgICAg
ICAgXQogICAgICAgICB9CiAgICAgXQpAQCAtMjUsOSArMzMsMTIgQEAKICAgICAiZG9tYWluIjog
IkV2ZW50RG9tYWluIiwKICAgICAiZXZlbnRzIjogWwogICAgICAgICB7Ci0gICAgICAgICAgICAi
bmFtZSI6ICJldmVudFdpdGhFbnVtUGFyYW1ldGVyIiwKKyAgICAgICAgICAgICJuYW1lIjogImV2
ZW50IiwKICAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWwotICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAicGFyYW1ldGVyIiwgInR5cGUiOiAic3RyaW5nIiwgImVudW0iOiBbInNoYXJlZCIsICJi
bGFjayIsICJ3aGl0ZSJdIH0KKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImVudW1SZXF1aXJl
ZCIsICIkcmVmIjogIlR5cGVEb21haW4uRW51bSIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1l
IjogImVudW1PcHRpb25hbCIsICIkcmVmIjogIlR5cGVEb21haW4uRW51bSIsICJvcHRpb25hbCI6
IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBhcmFtZXRlclJlcXVpcmVkIiwg
InR5cGUiOiAic3RyaW5nIiwgImVudW0iOiBbInNoYXJlZCIsICJzaGFyZWRSZXF1aXJlZCIsICJn
cmV5Il0gfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBhcmFtZXRlck9wdGlvbmFsIiwg
InR5cGUiOiAic3RyaW5nIiwgImVudW0iOiBbInNoYXJlZCIsICJzaGFyZWRPcHRpb25hbCIsICJn
cmVlbiJdLCAib3B0aW9uYWwiOiB0cnVlIH0KICAgICAgICAgICAgIF0KICAgICAgICAgfQogICAg
IF0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9leHBlY3RlZC9jb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2Fi
bGVUeXBlLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2V4cGVjdGVkL2NvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVi
dWdnYWJsZVR5cGUuanNvbi1yZXN1bHQKaW5kZXggZTljMThiZmFlNWIzMmM5NTdiYmVhZDRlMGVi
OWQwNmI2Mzk4YjA2My4uMzJkNGE4ZTgxMTQ2MDFlZmQ2NmVmOTg3OWJkY2E2Y2ZmZTcwYmM4OSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2V4cGVjdGVkL2NvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5
cGUuanNvbi1yZXN1bHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2V4cGVjdGVkL2NvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVi
dWdnYWJsZVR5cGUuanNvbi1yZXN1bHQKQEAgLTcwLDcgKzcwLDcgQEAgSW5zcGVjdG9yQmFja2Vu
ZC5hY3RpdmF0ZURvbWFpbigiRG9tYWluIiwgWyJwYWdlIl0pOwogCiAjaWYgRU5BQkxFKElOU1BF
Q1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBl
cy5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgogI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CiAKQEAgLTg4LDcgKzg4LDcgQEAgcHJp
dmF0ZToKIGNsYXNzIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyIDogcHVibGljIEFs
dGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5BbHRlcm5h
dGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlcigpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBDb21tYW5k
KGxvbmcgY2FsbElkKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIENvbW1hbmQobG9uZyBwcm90b2Nv
bF9jYWxsSWQpID0gMDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgpAQCAtMTMwLDEx
ICsxMzAsMTQgQEAgcHVibGljOgogCiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgog
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Cisj
aW5jbHVkZSA8dHVwbGU+CisjaW5jbHVkZSA8d3RmL0V4cGVjdGVkLmg+CisjaW5jbHVkZSA8d3Rm
L09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFj
ZSBJbnNwZWN0b3IgewogCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKwogCiAjaWYgRU5B
QkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiBjbGFzcyBBbHRlcm5hdGVEb21h
aW5CYWNrZW5kRGlzcGF0Y2hlcjsKQEAgLTE0Miw3ICsxNDUsNyBAQCBjbGFzcyBBbHRlcm5hdGVE
b21haW5CYWNrZW5kRGlzcGF0Y2hlcjsKIAogY2xhc3MgRG9tYWluQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyIHsKIHB1YmxpYzoKLSAgICB2aXJ0dWFsIHZvaWQgQ29tbWFuZChFcnJvclN0cmluZyYp
ID0gMDsKKyAgICB2aXJ0dWFsIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IENvbW1hbmQo
KSA9IDA7CiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB+RG9tYWluQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyKCk7CiB9OwpAQCAtMTUwLDkgKzE1Myw5IEBAIHByb3RlY3RlZDoKIGNsYXNzIERvbWFp
bkJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIFN1cHBsZW1lbnRhbEJhY2tlbmREaXNw
YXRjaGVyIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPERvbWFpbkJhY2tlbmREaXNwYXRjaGVy
PiBjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImLCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXIqKTsKLSAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1l
dGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKSBmaW5hbDsKKyAgICB2b2lkIGRpc3Bh
dGNoKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBjb25zdCBTdHJpbmcmIHByb3RvY29sX21ldGhvZCwg
UmVmPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9tZXNzYWdlKSBmaW5hbDsKIHByaXZhdGU6Ci0g
ICAgdm9pZCBDb21tYW5kKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBh
cmFtZXRlcnMpOworICAgIHZvaWQgQ29tbWFuZChsb25nIHByb3RvY2xfY2FsbElkLCBSZWZQdHI8
SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX3BhcmFtZXRlcnMpOwogI2lmIEVOQUJMRShJTlNQRUNU
T1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogcHVibGljOgogICAgIHZvaWQgc2V0QWx0ZXJuYXRl
RGlzcGF0Y2hlcihBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlciogYWx0ZXJuYXRlRGlz
cGF0Y2hlcikgeyBtX2FsdGVybmF0ZURpc3BhdGNoZXIgPSBhbHRlcm5hdGVEaXNwYXRjaGVyOyB9
CkBAIC0yMDEsOSArMjA0LDcgQEAgcHJpdmF0ZToKICNpbmNsdWRlICJUZXN0QmFja2VuZERpc3Bh
dGNoZXJzLmgiCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJv
dXRlci5oPgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVy
RGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiAjaWYgRU5BQkxF
KElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAjaW5jbHVkZSAiVGVzdEFsdGVybmF0
ZUJhY2tlbmREaXNwYXRjaGVycy5oIgpAQCAtMjI1LDM4ICsyMjYsMzggQEAgRG9tYWluQmFja2Vu
ZERpc3BhdGNoZXI6OkRvbWFpbkJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiBi
YWNrZW5kRGlzcGEKICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJG
b3JEb21haW4oIkRvbWFpbiJfcywgdGhpcyk7CiB9CiAKLXZvaWQgRG9tYWluQmFja2VuZERpc3Bh
dGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVm
PEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKQordm9pZCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6
ZGlzcGF0Y2gobG9uZyBwcm90b2NvbF9jYWxsSWQsIGNvbnN0IFN0cmluZyYgcHJvdG9jb2xfbWV0
aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX21lc3NhZ2UpCiB7CiAgICAgUmVmPERv
bWFpbkJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKIAotICAgIFJlZlB0cjxKU09O
OjpPYmplY3Q+IHBhcmFtZXRlcnM7Ci0gICAgbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3Ms
IHBhcmFtZXRlcnMpOworICAgIGF1dG8gcHJvdG9jb2xfcGFyYW1ldGVycyA9IHByb3RvY29sX21l
c3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9zKTsKIAotICAgIGlmIChtZXRob2QgPT0gIkNvbW1h
bmQiKSB7Ci0gICAgICAgIENvbW1hbmQocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsK
KyAgICBpZiAocHJvdG9jb2xfbWV0aG9kID09ICJDb21tYW5kIikgeworICAgICAgICBDb21tYW5k
KHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9wYXJhbWV0ZXJzKSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2Nv
bEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEb21haW4uIiArIG1l
dGhvZCArICInIHdhcyBub3QgZm91bmQiKTsKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBv
cnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEb21h
aW4uIiArIHByb3RvY29sX21ldGhvZCArICInIHdhcyBub3QgZm91bmQiKTsKIH0KIAotdm9pZCBE
b21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Q29tbWFuZChsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpT
T046Ok9iamVjdD4mJikKK3ZvaWQgRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkNvbW1hbmQobG9u
ZyBwcm90b2NvbF9jYWxsSWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCiB7CiAjaWYgRU5BQkxF
KElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAgICAgaWYgKG1fYWx0ZXJuYXRlRGlz
cGF0Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPkNvbW1hbmQocmVxdWVz
dElkKTsKKyAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5Db21tYW5kKHByb3RvY29sX2Nh
bGxJZCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RP
Ul9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAKLSAgICBFcnJvclN0cmluZyBlcnJvcjsKLSAgICBS
ZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIG1f
YWdlbnQtPkNvbW1hbmQoZXJyb3IpOworICAgIGF1dG8gcmVzdWx0ID0gbV9hZ2VudC0+Q29tbWFu
ZCgpOworICAgIGlmICghcmVzdWx0KSB7CisgICAgICAgIEFTU0VSVCghcmVzdWx0LmVycm9yKCku
aXNFbXB0eSgpKTsKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xF
cnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIHJlc3VsdC5lcnJvcigpKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCi0gICAgICAg
IG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVz
dWx0KSwgZmFsc2UpOwotICAgIGVsc2UKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVw
b3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUo
ZXJyb3IpKTsKKyAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0Ojpj
cmVhdGUoKTsKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocHJvdG9jb2xf
Y2FsbElkLCBXVEZNb3ZlKHByb3RvY29sX2pzb25NZXNzYWdlKSwgZmFsc2UpOwogfQogCiB9IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKQEAgLTI5Nyw2ICsyOTgsNyBAQCB2b2lkIERvbWFpbkJhY2tl
bmREaXNwYXRjaGVyOjpDb21tYW5kKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0
PiYmKQogCiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPHd0Zi9K
U09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewpAQCAtMzQ5LDE2ICszNTEs
MTUgQEAgcHJpdmF0ZToKICNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgogCiAj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNs
dWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCiB2b2lk
IERvbWFpbkZyb250ZW5kRGlzcGF0Y2hlcjo6RXZlbnQoKQogewotICAgIFJlZjxKU09OOjpPYmpl
Y3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBqc29uTWVzc2Fn
ZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJEb21haW4uRXZlbnQiX3MpOworICAgIGF1dG8gcHJv
dG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIHByb3RvY29s
X2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRvbWFpbi5FdmVudCJfcyk7CiAK
LSAgICBtX2Zyb250ZW5kUm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5n
KCkpOworICAgIG1fZnJvbnRlbmRSb3V0ZXIuc2VuZEV2ZW50KHByb3RvY29sX2pzb25NZXNzYWdl
LT50b0pTT05TdHJpbmcoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgpAQCAtMzk4
LDcgKzM5OSw5IEBAIHZvaWQgRG9tYWluRnJvbnRlbmREaXNwYXRjaGVyOjpFdmVudCgpCiAjcHJh
Z21hIG9uY2UKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlw
ZXMuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9KU09OVmFs
dWVzLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC00NTIsOCArNDU1LDcgQEAg
bmFtZXNwYWNlIFByb3RvY29sIHsKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJUZXN0
UHJvdG9jb2xPYmplY3RzLmgiCiAKLSNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KIAogbmFt
ZXNwYWNlIEluc3BlY3RvciB7CiAKQEAgLTUwOSw3ICs1MTEsNyBAQCBjbGFzcyBPYmpDSW5zcGVj
dG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgQWx0ZXJuYXRlRG9tYWlu
QmFja2VuZAogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIE9iakNJ
bnNwZWN0b3JEb21haW5CYWNrZW5kRGlzcGF0Y2hlcihpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21h
aW5IYW5kbGVyPiBoYW5kbGVyKSB7IG1fZGVsZWdhdGUgPSBoYW5kbGVyOyB9Ci0gICAgdm9pZCBD
b21tYW5kKGxvbmcgcmVxdWVzdElkKSBmaW5hbDsKKyAgICB2b2lkIENvbW1hbmQobG9uZyBwcm90
b2NvbF9jYWxsSWQpIGZpbmFsOwogcHJpdmF0ZToKICAgICBSZXRhaW5QdHI8aWQ8VGVzdFByb3Rv
Y29sRG9tYWluRG9tYWluSGFuZGxlcj4+IG1fZGVsZWdhdGU7CiB9OwpAQCAtNTU3LDIxICs1NTks
MjIgQEAgcHJpdmF0ZToKIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKLXZvaWQgT2JqQ0luc3Bl
Y3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpDb21tYW5kKGxvbmcgcmVxdWVzdElkKQordm9p
ZCBPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkNvbW1hbmQobG9uZyBwcm90
b2NvbF9jYWxsSWQpCiB7CiAgICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6
QHNlbGVjdG9yKENvbW1hbmRXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6KV0pIHsK
LSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0
SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEb21haW4uQ29tbWFuZCcg
d2FzIG5vdCBmb3VuZCJfcyk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFBy
b3RvY29sRXJyb3IocHJvdG9jb2xfY2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90
Rm91bmQsICInRG9tYWluLkNvbW1hbmQnIHdhcyBub3QgZm91bmQiX3MpOwogICAgICAgICBiYWNr
ZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCiAgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7Ci0gICAg
ICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBC
YWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxsSWQsIEJhY2tlbmRE
aXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwogICAgICAgICBiYWNrZW5kRGlzcGF0Y2hl
cigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgIH07CiAKICAgICBpZCBzdWNjZXNzQ2FsbGJh
Y2sgPSBeewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVz
dElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7CisgICAgICAgIGF1dG8gcHJvdG9j
b2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBiYWNrZW5k
RGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocHJvdG9jb2xfY2FsbElkLCBXVEZNb3ZlKHByb3Rv
Y29sX2pzb25NZXNzYWdlKSwgZmFsc2UpOwogICAgIH07CiAKICAgICBbbV9kZWxlZ2F0ZSBDb21t
YW5kV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vz
c0NhbGxiYWNrXTsKQEAgLTc3Myw5ICs3NzYsOSBAQCB1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9y
OwogewogICAgIGNvbnN0IEZyb250ZW5kUm91dGVyJiByb3V0ZXIgPSBfY29udHJvbGxlci0+ZnJv
bnRlbmRSb3V0ZXIoKTsKIAotICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNP
Tjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2Qi
X3MsICJEb21haW4uRXZlbnQiX3MpOwotICAgIHJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2Ut
PnRvSlNPTlN0cmluZygpKTsKKyAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6
T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJt
ZXRob2QiX3MsICJEb21haW4uRXZlbnQiX3MpOworICAgIHJvdXRlci5zZW5kRXZlbnQocHJvdG9j
b2xfanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKIH0KIAogQGVuZApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2Nv
bW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2NvbW1hbmRzLXdpdGgtYXN5
bmMtYXR0cmlidXRlLmpzb24tcmVzdWx0CmluZGV4IGQxYzY5YjAzMWNkYjQ3MWQxOGEyZTQ5Nzhm
MjEyN2IwZWNkNDdjNTIuLjRjZTZmYzNkMjEzNmE0ZWI0YWIyMjQ2NTFhOWJmYjE2NWU0NTMwZjYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9leHBlY3RlZC9jb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uLXJlc3VsdAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQv
Y29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbi1yZXN1bHQKQEAgLTczLDcgKzczLDcg
QEAgSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiRGF0YWJhc2UiLCBudWxsKTsKIAog
I2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogCi0jaW5jbHVkZSAi
VGVzdFByb3RvY29sVHlwZXMuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KICNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgogCkBAIC05
MSwxMCArOTEsMTAgQEAgcHJpdmF0ZToKIGNsYXNzIEFsdGVybmF0ZURhdGFiYXNlQmFja2VuZERp
c3BhdGNoZXIgOiBwdWJsaWMgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewogcHVibGljOgog
ICAgIHZpcnR1YWwgfkFsdGVybmF0ZURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIoKSB7IH0KLSAg
ICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIGNh
bGxJZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnkpID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyBj
YWxsSWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5KSA9IDA7Ci0g
ICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVTUUxTeW5jKGxvbmcgY2FsbElkLCBpbnQgaW5fZGF0YWJh
c2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBleGVj
dXRlU1FMQXN5bmMobG9uZyBjYWxsSWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcm
IGluX3F1ZXJ5KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxS
ZXR1cm5WYWx1ZXMobG9uZyBwcm90b2NvbF9jYWxsSWQsIGludCBkYXRhYmFzZUlkLCBjb25zdCBT
dHJpbmcmIHF1ZXJ5KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVTUUxBc3luY09wdGlv
bmFsUmV0dXJuVmFsdWVzKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBpbnQgZGF0YWJhc2VJZCwgY29u
c3QgU3RyaW5nJiBxdWVyeSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU1FMU3luYyhs
b25nIHByb3RvY29sX2NhbGxJZCwgaW50IGRhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgcXVlcnkp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNRTEFzeW5jKGxvbmcgcHJvdG9jb2xfY2Fs
bElkLCBpbnQgZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBxdWVyeSkgPSAwOwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgSW5zcGVjdG9yCkBAIC0xMzYsMTEgKzEzNiwxNCBAQCBwdWJsaWM6CiAKICNp
bmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx0dXBsZT4KKyNpbmNsdWRl
IDx3dGYvRXhwZWN0ZWQuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKLXR5cGVkZWYg
U3RyaW5nIEVycm9yU3RyaW5nOworCiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9E
SVNQQVRDSEVSUykKIGNsYXNzIEFsdGVybmF0ZURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI7CkBA
IC0xNDgsMjcgKzE1MSwyMCBAQCBjbGFzcyBBbHRlcm5hdGVEYXRhYmFzZUJhY2tlbmREaXNwYXRj
aGVyOwogCiBjbGFzcyBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7CiBwdWJsaWM6
Ci0gICAgLy8gTmFtZWQgYWZ0ZXIgcGFyYW1ldGVyICdwcmludENvbG9yJyB3aGlsZSBnZW5lcmF0
aW5nIGNvbW1hbmQvZXZlbnQgZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcy4KLSAg
ICBlbnVtIGNsYXNzIFByaW50Q29sb3IgewotICAgICAgICBDeWFuID0gMywKLSAgICAgICAgTWFn
ZW50YSA9IDQsCi0gICAgICAgIFllbGxvdyA9IDUsCi0gICAgICAgIEJsYWNrID0gNiwKLSAgICB9
OyAvLyBlbnVtIGNsYXNzIFByaW50Q29sb3IKLSAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNRTFN5
bmNPcHRpb25hbFJldHVyblZhbHVlcyhFcnJvclN0cmluZyYsIGludCBpbl9kYXRhYmFzZUlkLCBj
b25zdCBTdHJpbmcmIGluX3F1ZXJ5LCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiYgb3B0
X291dF9jb2x1bW5OYW1lcywgT3B0aW9uYWw8U3RyaW5nPiYgb3B0X291dF9ub3RlcywgT3B0aW9u
YWw8ZG91YmxlPiYgb3B0X291dF90aW1lc3RhbXAsIE9wdGlvbmFsPEpTT046Ok9iamVjdD4mIG9w
dF9vdXRfdmFsdWVzLCBPcHRpb25hbDxKU09OOjpWYWx1ZT4mIG9wdF9vdXRfcGF5bG9hZCwgT3B0
aW9uYWw8aW50PiYgb3B0X291dF9kYXRhYmFzZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6RGF0YWJhc2U6OkVycm9yPiYgb3B0X291dF9zcWxFcnJvciwgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMqIG9wdF9vdXRfc2NyZWVuQ29sb3IsIFJlZlB0cjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiYgb3B0X291dF9hbHRlcm5h
dGVDb2xvcnMsIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQcmludENvbG9yKiBv
cHRfb3V0X3ByaW50Q29sb3IpID0gMDsKKyAgICB2aXJ0dWFsIFByb3RvY29sOjpFcnJvclN0cmlu
Z09yPHN0ZDo6dHVwbGU8UmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4gLyogb3B0X2NvbHVt
bk5hbWVzICovLCBTdHJpbmcgLyogb3B0X25vdGVzICovLCBPcHRpb25hbDxkb3VibGU+IC8qIG9w
dF90aW1lc3RhbXAgKi8sIFJlZlB0cjxKU09OOjpPYmplY3Q+IC8qIG9wdF92YWx1ZXMgKi8sIFJl
ZlB0cjxKU09OOjpWYWx1ZT4gLyogb3B0X3BheWxvYWQgKi8sIE9wdGlvbmFsPGludD4gLyogb3B0
X2RhdGFiYXNlSWQgKi8sIFJlZlB0cjxQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiAvKiBvcHRf
c3FsRXJyb3IgKi8sIE9wdGlvbmFsPFByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4g
Lyogb3B0X3NjcmVlbkNvbG9yICovLCBSZWZQdHI8UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxp
c3Q+IC8qIG9wdF9hbHRlcm5hdGVDb2xvcnMgKi8sIFN0cmluZyAvKiBvcHRfcHJpbnRDb2xvciAq
Lz4+IGV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMoaW50IGRhdGFiYXNlSWQsIGNv
bnN0IFN0cmluZyYgcXVlcnkpID0gMDsKICAgICBjbGFzcyBFeGVjdXRlU1FMQXN5bmNPcHRpb25h
bFJldHVyblZhbHVlc0NhbGxiYWNrIDogcHVibGljIEJhY2tlbmREaXNwYXRjaGVyOjpDYWxsYmFj
a0Jhc2UgewogICAgIHB1YmxpYzoKICAgICAgICAgRXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1
cm5WYWx1ZXNDYWxsYmFjayhSZWY8QmFja2VuZERpc3BhdGNoZXI+JiYsIGludCBpZCk7Ci0gICAg
ICAgIHZvaWQgc2VuZFN1Y2Nlc3MoUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4mJiBjb2x1
bW5OYW1lcywgT3B0aW9uYWw8U3RyaW5nPiYgbm90ZXMsIE9wdGlvbmFsPGRvdWJsZT4mIHRpbWVz
dGFtcCwgT3B0aW9uYWw8SlNPTjo6T2JqZWN0PiYgdmFsdWVzLCBPcHRpb25hbDxKU09OOjpWYWx1
ZT4mIHBheWxvYWQsIE9wdGlvbmFsPGludD4mIGRhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+JiYgc3FsRXJyb3IsIE9wdGlvbmFsPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPiBzY3JlZW5Db2xvciwgUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+JiYgYWx0ZXJuYXRlQ29s
b3JzLCBPcHRpb25hbDxEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UHJpbnRDb2xv
cj4gcHJpbnRDb2xvcik7CisgICAgICAgIHZvaWQgc2VuZFN1Y2Nlc3MoUmVmUHRyPEpTT046OkFy
cmF5T2Y8U3RyaW5nPj4mJiBvcHRfY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgb3B0X25vdGVz
LCBPcHRpb25hbDxkb3VibGU+JiYgb3B0X3RpbWVzdGFtcCwgUmVmUHRyPEpTT046Ok9iamVjdD4m
JiBvcHRfdmFsdWVzLCBSZWZQdHI8SlNPTjo6VmFsdWU+JiYgb3B0X3BheWxvYWQsIE9wdGlvbmFs
PGludD4mJiBvcHRfZGF0YWJhc2VJZCwgUmVmUHRyPFByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+
JiYgb3B0X3NxbEVycm9yLCBPcHRpb25hbDxQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xv
cnM+JiYgb3B0X3NjcmVlbkNvbG9yLCBSZWZQdHI8UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxp
c3Q+JiYgb3B0X2FsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nJiBvcHRfcHJpbnRDb2xvcik7
CiAgICAgfTsKLSAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5W
YWx1ZXMoaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnksIFJlZjxFeGVj
dXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc0NhbGxiYWNrPiYmIGNhbGxiYWNrKSA9IDA7
Ci0gICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVTUUxTeW5jKEVycm9yU3RyaW5nJiwgaW50IGluX2Rh
dGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnksIFJlZlB0cjxKU09OOjpBcnJheU9mPFN0
cmluZz4+JiBvdXRfY29sdW1uTmFtZXMsIFN0cmluZyogb3V0X25vdGVzLCBkb3VibGUqIG91dF90
aW1lc3RhbXAsIEpTT046Ok9iamVjdCogb3V0X3ZhbHVlcywgSlNPTjo6VmFsdWUqIG91dF9wYXls
b2FkLCBpbnQqIG91dF9kYXRhYmFzZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0
YWJhc2U6OkVycm9yPiYgb3V0X3NxbEVycm9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
RGF0YWJhc2U6OkNvbG9yTGlzdD4mIG91dF9hbHRlcm5hdGVDb2xvcnMsIEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzKiBvdXRfc2NyZWVuQ29sb3IsIERhdGFiYXNl
QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQcmludENvbG9yKiBvdXRfcHJpbnRDb2xvcikgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhp
bnQgZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBxdWVyeSwgUmVmPEV4ZWN1dGVTUUxBc3luY09w
dGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJhY2s+JiYpID0gMDsKKyAgICB2aXJ0dWFsIFByb3RvY29s
OjpFcnJvclN0cmluZ09yPHN0ZDo6dHVwbGU8UmVmPEpTT046OkFycmF5T2Y8U3RyaW5nPj4gLyog
Y29sdW1uTmFtZXMgKi8sIFN0cmluZyAvKiBub3RlcyAqLywgZG91YmxlIC8qIHRpbWVzdGFtcCAq
LywgUmVmPEpTT046Ok9iamVjdD4gLyogdmFsdWVzICovLCBSZWY8SlNPTjo6VmFsdWU+IC8qIHBh
eWxvYWQgKi8sIGludCAvKiBkYXRhYmFzZUlkICovLCBSZWY8UHJvdG9jb2w6OkRhdGFiYXNlOjpF
cnJvcj4gLyogc3FsRXJyb3IgKi8sIFJlZjxQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4g
LyogYWx0ZXJuYXRlQ29sb3JzICovLCBQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMg
Lyogc2NyZWVuQ29sb3IgKi8sIFN0cmluZyAvKiBwcmludENvbG9yICovPj4gZXhlY3V0ZVNRTFN5
bmMoaW50IGRhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgcXVlcnkpID0gMDsKICAgICBjbGFzcyBF
eGVjdXRlU1FMQXN5bmNDYWxsYmFjayA6IHB1YmxpYyBCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJh
Y2tCYXNlIHsKICAgICBwdWJsaWM6CiAgICAgICAgIEV4ZWN1dGVTUUxBc3luY0NhbGxiYWNrKFJl
ZjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiwgaW50IGlkKTsKLSAgICAgICAgdm9pZCBzZW5kU3VjY2Vz
cyhSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiYmIGNvbHVtbk5hbWVzLCBjb25zdCBTdHJp
bmcmIG5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBKU09OOjpPYmplY3QgdmFsdWVzLCBKU09OOjpW
YWx1ZSBwYXlsb2FkLCBpbnQgZGF0YWJhc2VJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRhdGFiYXNlOjpFcnJvcj4mJiBzcWxFcnJvciwgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJh
c2U6OlByaW1hcnlDb2xvcnMgc2NyZWVuQ29sb3IsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29s
OjpEYXRhYmFzZTo6Q29sb3JMaXN0PiYmIGFsdGVybmF0ZUNvbG9ycywgRGF0YWJhc2VCYWNrZW5k
RGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3IgcHJpbnRDb2xvcik7CisgICAgICAgIHZvaWQg
c2VuZFN1Y2Nlc3MoUmVmPEpTT046OkFycmF5T2Y8U3RyaW5nPj4mJiBjb2x1bW5OYW1lcywgY29u
c3QgU3RyaW5nJiBub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgUmVmPEpTT046Ok9iamVjdD4mJiB2
YWx1ZXMsIFJlZjxKU09OOjpWYWx1ZT4mJiBwYXlsb2FkLCBpbnQgZGF0YWJhc2VJZCwgUmVmPFBy
b3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+JiYgc3FsRXJyb3IsIFByb3RvY29sOjpEYXRhYmFzZTo6
UHJpbWFyeUNvbG9ycyBzY3JlZW5Db2xvciwgUmVmPFByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JM
aXN0PiYmIGFsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nJiBwcmludENvbG9yKTsKICAgICB9
OwotICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU1FMQXN5bmMoaW50IGluX2RhdGFiYXNlSWQsIGNv
bnN0IFN0cmluZyYgaW5fcXVlcnksIFJlZjxFeGVjdXRlU1FMQXN5bmNDYWxsYmFjaz4mJiBjYWxs
YmFjaykgPSAwOworICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU1FMQXN5bmMoaW50IGRhdGFiYXNl
SWQsIGNvbnN0IFN0cmluZyYgcXVlcnksIFJlZjxFeGVjdXRlU1FMQXN5bmNDYWxsYmFjaz4mJikg
PSAwOwogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgfkRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyKCk7CiB9OwpAQCAtMTc2LDEyICsxNzIsMTIgQEAgcHJvdGVjdGVkOgogY2xhc3MgRGF0
YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5k
RGlzcGF0Y2hlciB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVyPiBjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImLCBEYXRhYmFzZUJhY2tlbmREaXNwYXRj
aGVySGFuZGxlciopOwotICAgIHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0
cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpIGZpbmFsOworICAgIHZv
aWQgZGlzcGF0Y2gobG9uZyBwcm90b2NvbF9jYWxsSWQsIGNvbnN0IFN0cmluZyYgcHJvdG9jb2xf
bWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX21lc3NhZ2UpIGZpbmFsOwogcHJp
dmF0ZToKLSAgICB2b2lkIGV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyBy
ZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7Ci0gICAgdm9pZCBl
eGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIHJlcXVlc3RJZCwgUmVmUHRy
PEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKLSAgICB2b2lkIGV4ZWN1dGVTUUxTeW5jKGxv
bmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOwotICAgIHZv
aWQgZXhlY3V0ZVNRTEFzeW5jKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYm
IHBhcmFtZXRlcnMpOworICAgIHZvaWQgZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVl
cyhsb25nIHByb3RvY2xfY2FsbElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX3Bh
cmFtZXRlcnMpOworICAgIHZvaWQgZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMo
bG9uZyBwcm90b2NsX2NhbGxJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9wYXJh
bWV0ZXJzKTsKKyAgICB2b2lkIGV4ZWN1dGVTUUxTeW5jKGxvbmcgcHJvdG9jbF9jYWxsSWQsIFJl
ZlB0cjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfcGFyYW1ldGVycyk7CisgICAgdm9pZCBleGVj
dXRlU1FMQXN5bmMobG9uZyBwcm90b2NsX2NhbGxJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBw
cm90b2NvbF9wYXJhbWV0ZXJzKTsKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQ
QVRDSEVSUykKIHB1YmxpYzoKICAgICB2b2lkIHNldEFsdGVybmF0ZURpc3BhdGNoZXIoQWx0ZXJu
YXRlRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciogYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeyBtX2Fs
dGVybmF0ZURpc3BhdGNoZXIgPSBhbHRlcm5hdGVEaXNwYXRjaGVyOyB9CkBAIC0yMzAsOSArMjI2
LDcgQEAgcHJpdmF0ZToKICNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCiAKICNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1
ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0j
aW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRF
Uk5BVEVfRElTUEFUQ0hFUlMpCiAjaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRj
aGVycy5oIgpAQCAtMjU0LDM3ICsyNDgsMzYgQEAgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6
RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZEQKICAg
ICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4oIkRhdGFi
YXNlIl9zLCB0aGlzKTsKIH0KIAotdm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpkaXNw
YXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmpl
Y3Q+JiYgbWVzc2FnZSkKK3ZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2go
bG9uZyBwcm90b2NvbF9jYWxsSWQsIGNvbnN0IFN0cmluZyYgcHJvdG9jb2xfbWV0aG9kLCBSZWY8
SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX21lc3NhZ2UpCiB7CiAgICAgUmVmPERhdGFiYXNlQmFj
a2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOwogCi0gICAgUmVmUHRyPEpTT046Ok9iamVj
dD4gcGFyYW1ldGVyczsKLSAgICBtZXNzYWdlLT5nZXRPYmplY3QoInBhcmFtcyJfcywgcGFyYW1l
dGVycyk7CisgICAgYXV0byBwcm90b2NvbF9wYXJhbWV0ZXJzID0gcHJvdG9jb2xfbWVzc2FnZS0+
Z2V0T2JqZWN0KCJwYXJhbXMiX3MpOwogCi0gICAgaWYgKG1ldGhvZCA9PSAiZXhlY3V0ZVNRTFN5
bmNPcHRpb25hbFJldHVyblZhbHVlcyIpIHsKLSAgICAgICAgZXhlY3V0ZVNRTFN5bmNPcHRpb25h
bFJldHVyblZhbHVlcyhyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykpOworICAgIGlmIChw
cm90b2NvbF9tZXRob2QgPT0gImV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMiKSB7
CisgICAgICAgIGV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMocHJvdG9jb2xfY2Fs
bElkLCBXVEZNb3ZlKHByb3RvY29sX3BhcmFtZXRlcnMpKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KLSAgICBpZiAobWV0aG9kID09ICJleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVl
cyIpIHsKLSAgICAgICAgZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMocmVxdWVz
dElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKKyAgICBpZiAocHJvdG9jb2xfbWV0aG9kID09ICJl
eGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyIpIHsKKyAgICAgICAgZXhlY3V0ZVNR
TEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMocHJvdG9jb2xfY2FsbElkLCBXVEZNb3ZlKHByb3Rv
Y29sX3BhcmFtZXRlcnMpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAobWV0aG9k
ID09ICJleGVjdXRlU1FMU3luYyIpIHsKLSAgICAgICAgZXhlY3V0ZVNRTFN5bmMocmVxdWVzdElk
LCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKKyAgICBpZiAocHJvdG9jb2xfbWV0aG9kID09ICJleGVj
dXRlU1FMU3luYyIpIHsKKyAgICAgICAgZXhlY3V0ZVNRTFN5bmMocHJvdG9jb2xfY2FsbElkLCBX
VEZNb3ZlKHByb3RvY29sX3BhcmFtZXRlcnMpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAg
ICBpZiAobWV0aG9kID09ICJleGVjdXRlU1FMQXN5bmMiKSB7Ci0gICAgICAgIGV4ZWN1dGVTUUxB
c3luYyhyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykpOworICAgIGlmIChwcm90b2NvbF9t
ZXRob2QgPT0gImV4ZWN1dGVTUUxBc3luYyIpIHsKKyAgICAgICAgZXhlY3V0ZVNRTEFzeW5jKHBy
b3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9wYXJhbWV0ZXJzKSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVy
cm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEYXRhYmFzZS4iICsgbWV0
aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9y
dFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RhdGFi
YXNlLiIgKyBwcm90b2NvbF9tZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7CiB9CiAKLXZvaWQg
RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZh
bHVlcyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKQor
dm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0
dXJuVmFsdWVzKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBy
b3RvY29sX3BhcmFtZXRlcnMpCiB7Ci0gICAgaW50IGluX2RhdGFiYXNlSWQgPSBtX2JhY2tlbmRE
aXNwYXRjaGVyLT5nZXRJbnRlZ2VyKHBhcmFtZXRlcnMuZ2V0KCksICJkYXRhYmFzZUlkIl9zLCBu
dWxscHRyKTsKLSAgICBTdHJpbmcgaW5fcXVlcnkgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRT
dHJpbmcocGFyYW1ldGVycy5nZXQoKSwgInF1ZXJ5Il9zLCBudWxscHRyKTsKKyAgICBhdXRvIGlu
X2RhdGFiYXNlSWQgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRJbnRlZ2VyKHByb3RvY29sX3Bh
cmFtZXRlcnMuZ2V0KCksICJkYXRhYmFzZUlkIl9zLCB0cnVlKTsKKyAgICBhdXRvIGluX3F1ZXJ5
ID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3RyaW5nKHByb3RvY29sX3BhcmFtZXRlcnMuZ2V0
KCksICJxdWVyeSJfcywgdHJ1ZSk7CiAgICAgaWYgKG1fYmFja2VuZERpc3BhdGNoZXItPmhhc1By
b3RvY29sRXJyb3JzKCkpIHsKICAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJv
dG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFtcywgIlNvbWUgYXJndW1l
bnRzIG9mIG1ldGhvZCAnRGF0YWJhc2UuZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVl
cycgY2FuJ3QgYmUgcHJvY2Vzc2VkIl9zKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMjkyLDg1ICsy
ODUsNzYgQEAgdm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FMU3luY09w
dGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgcmVxdWVzdEkKIAogI2lmIEVOQUJMRShJTlNQRUNUT1Jf
QUxURVJOQVRFX0RJU1BBVENIRVJTKQogICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsK
LSAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5leGVjdXRlU1FMU3luY09wdGlvbmFsUmV0
dXJuVmFsdWVzKHJlcXVlc3RJZCwgaW5fZGF0YWJhc2VJZCwgaW5fcXVlcnkpOworICAgICAgICBt
X2FsdGVybmF0ZURpc3BhdGNoZXItPmV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMo
cHJvdG9jb2xfY2FsbElkLCAqaW5fZGF0YWJhc2VJZCwgaW5fcXVlcnkpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENI
RVJTKQogCi0gICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4gcmVz
dWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBSZWZQdHI8SlNPTjo6QXJyYXlPZjxT
dHJpbmc+PiBvdXRfY29sdW1uTmFtZXM7Ci0gICAgT3B0aW9uYWw8U3RyaW5nPiBvdXRfbm90ZXM7
Ci0gICAgT3B0aW9uYWw8ZG91YmxlPiBvdXRfdGltZXN0YW1wOwotICAgIE9wdGlvbmFsPEpTT046
Ok9iamVjdD4gb3V0X3ZhbHVlczsKLSAgICBPcHRpb25hbDxKU09OOjpWYWx1ZT4gb3V0X3BheWxv
YWQ7Ci0gICAgT3B0aW9uYWw8aW50PiBvdXRfZGF0YWJhc2VJZDsKLSAgICBSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiBvdXRfc3FsRXJyb3I7Ci0gICAgSW5zcGVj
dG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMgb3V0X3NjcmVlbkNvbG9yOwot
ICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiBvdXRf
YWx0ZXJuYXRlQ29sb3JzOwotICAgIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQ
cmludENvbG9yIG91dF9wcmludENvbG9yOwotICAgIG1fYWdlbnQtPmV4ZWN1dGVTUUxTeW5jT3B0
aW9uYWxSZXR1cm5WYWx1ZXMoZXJyb3IsIGluX2RhdGFiYXNlSWQsIGluX3F1ZXJ5LCBvdXRfY29s
dW1uTmFtZXMsIG91dF9ub3Rlcywgb3V0X3RpbWVzdGFtcCwgb3V0X3ZhbHVlcywgb3V0X3BheWxv
YWQsIG91dF9kYXRhYmFzZUlkLCBvdXRfc3FsRXJyb3IsIG91dF9zY3JlZW5Db2xvciwgb3V0X2Fs
dGVybmF0ZUNvbG9ycywgb3V0X3ByaW50Q29sb3IpOwotCi0gICAgaWYgKCFlcnJvci5sZW5ndGgo
KSkgewotICAgICAgICBpZiAob3V0X2NvbHVtbk5hbWVzKQotICAgICAgICAgICAgcmVzdWx0LT5z
ZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIG91dF9jb2x1bW5OYW1lcyk7Ci0gICAgICAgIGlmIChv
dXRfbm90ZXMuaGFzVmFsdWUoKSkKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJub3Rl
cyJfcywgKm91dF9ub3Rlcyk7Ci0gICAgICAgIGlmIChvdXRfdGltZXN0YW1wLmhhc1ZhbHVlKCkp
Ci0gICAgICAgICAgICByZXN1bHQtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCAqb3V0X3RpbWVz
dGFtcCk7Ci0gICAgICAgIGlmIChvdXRfdmFsdWVzLmhhc1ZhbHVlKCkpCi0gICAgICAgICAgICBy
ZXN1bHQtPnNldE9iamVjdCgidmFsdWVzIl9zLCAqb3V0X3ZhbHVlcyk7Ci0gICAgICAgIGlmIChv
dXRfcGF5bG9hZC5oYXNWYWx1ZSgpKQotICAgICAgICAgICAgcmVzdWx0LT5zZXRWYWx1ZSgicGF5
bG9hZCJfcywgKm91dF9wYXlsb2FkKTsKLSAgICAgICAgaWYgKG91dF9kYXRhYmFzZUlkLmhhc1Zh
bHVlKCkpCi0gICAgICAgICAgICByZXN1bHQtPnNldEludGVnZXIoImRhdGFiYXNlSWQiX3MsICpv
dXRfZGF0YWJhc2VJZCk7Ci0gICAgICAgIGlmIChvdXRfc3FsRXJyb3IpCi0gICAgICAgICAgICBy
ZXN1bHQtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIG91dF9zcWxFcnJvcik7Ci0gICAgICAgIGlm
IChvdXRfc2NyZWVuQ29sb3IuaGFzVmFsdWUoKSkKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0U3Ry
aW5nKCJzY3JlZW5Db2xvciJfcywgKm91dF9zY3JlZW5Db2xvcik7Ci0gICAgICAgIGlmIChvdXRf
YWx0ZXJuYXRlQ29sb3JzKQotICAgICAgICAgICAgcmVzdWx0LT5zZXRBcnJheSgiYWx0ZXJuYXRl
Q29sb3JzIl9zLCBvdXRfYWx0ZXJuYXRlQ29sb3JzKTsKLSAgICAgICAgaWYgKG91dF9wcmludENv
bG9yLmhhc1ZhbHVlKCkpCi0gICAgICAgICAgICByZXN1bHQtPnNldFN0cmluZygicHJpbnRDb2xv
ciJfcywgKm91dF9wcmludENvbG9yKTsKKyAgICBhdXRvIHJlc3VsdCA9IG1fYWdlbnQtPmV4ZWN1
dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMoKmluX2RhdGFiYXNlSWQsIGluX3F1ZXJ5KTsK
KyAgICBpZiAoIXJlc3VsdCkgeworICAgICAgICBBU1NFUlQoIXJlc3VsdC5lcnJvcigpLmlzRW1w
dHkoKSk7CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3Io
QmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCByZXN1bHQuZXJyb3IoKSk7CisgICAgICAg
IHJldHVybjsKICAgICB9Ci0gICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKLSAgICAgICAgbV9iYWNr
ZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBm
YWxzZSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90
b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikp
OworCisgICAgYXV0byBbb3V0X29wdF9jb2x1bW5OYW1lcywgb3V0X29wdF9ub3Rlcywgb3V0X29w
dF90aW1lc3RhbXAsIG91dF9vcHRfdmFsdWVzLCBvdXRfb3B0X3BheWxvYWQsIG91dF9vcHRfZGF0
YWJhc2VJZCwgb3V0X29wdF9zcWxFcnJvciwgb3V0X29wdF9zY3JlZW5Db2xvciwgb3V0X29wdF9h
bHRlcm5hdGVDb2xvcnMsIG91dF9vcHRfcHJpbnRDb2xvcl0gPSBXVEZNb3ZlKHJlc3VsdC52YWx1
ZSgpKTsKKworICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNy
ZWF0ZSgpOworICAgIGlmICghIW91dF9vcHRfY29sdW1uTmFtZXMpCisgICAgICAgIHByb3RvY29s
X2pzb25NZXNzYWdlLT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIG91dF9vcHRfY29sdW1uTmFt
ZXMucmVsZWFzZU5vbk51bGwoKSk7CisgICAgaWYgKCEhb3V0X29wdF9ub3RlcykKKyAgICAgICAg
cHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygibm90ZXMiX3MsIG91dF9vcHRfbm90ZXMp
OworICAgIGlmICghIW91dF9vcHRfdGltZXN0YW1wKQorICAgICAgICBwcm90b2NvbF9qc29uTWVz
c2FnZS0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsICpvdXRfb3B0X3RpbWVzdGFtcCk7CisgICAg
aWYgKCEhb3V0X29wdF92YWx1ZXMpCisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRP
YmplY3QoInZhbHVlcyJfcywgb3V0X29wdF92YWx1ZXMucmVsZWFzZU5vbk51bGwoKSk7CisgICAg
aWYgKCEhb3V0X29wdF9wYXlsb2FkKQorICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0
VmFsdWUoInBheWxvYWQiX3MsIG91dF9vcHRfcGF5bG9hZC5yZWxlYXNlTm9uTnVsbCgpKTsKKyAg
ICBpZiAoISFvdXRfb3B0X2RhdGFiYXNlSWQpCisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdl
LT5zZXRJbnRlZ2VyKCJkYXRhYmFzZUlkIl9zLCAqb3V0X29wdF9kYXRhYmFzZUlkKTsKKyAgICBp
ZiAoISFvdXRfb3B0X3NxbEVycm9yKQorICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0
T2JqZWN0KCJzcWxFcnJvciJfcywgb3V0X29wdF9zcWxFcnJvci5yZWxlYXNlTm9uTnVsbCgpKTsK
KyAgICBpZiAoISFvdXRfb3B0X3NjcmVlbkNvbG9yKQorICAgICAgICBwcm90b2NvbF9qc29uTWVz
c2FnZS0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgUHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpn
ZXRFbnVtQ29uc3RhbnRWYWx1ZSgqb3V0X29wdF9zY3JlZW5Db2xvcikpOworICAgIGlmICghIW91
dF9vcHRfYWx0ZXJuYXRlQ29sb3JzKQorICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0
QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywgb3V0X29wdF9hbHRlcm5hdGVDb2xvcnMucmVsZWFz
ZU5vbk51bGwoKSk7CisgICAgaWYgKCEhb3V0X29wdF9wcmludENvbG9yKQorICAgICAgICBwcm90
b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCBvdXRfb3B0X3ByaW50
Q29sb3IpOworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShwcm90b2NvbF9j
YWxsSWQsIFdURk1vdmUocHJvdG9jb2xfanNvbk1lc3NhZ2UpLCBmYWxzZSk7CiB9CiAKIERhdGFi
YXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVy
blZhbHVlc0NhbGxiYWNrOjpFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc0NhbGxi
YWNrKFJlZjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBiYWNrZW5kRGlzcGF0Y2hlciwgaW50IGlkKSA6
IEJhY2tlbmREaXNwYXRjaGVyOjpDYWxsYmFja0Jhc2UoV1RGTW92ZShiYWNrZW5kRGlzcGF0Y2hl
ciksIGlkKSB7IH0KIAotdm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhl
Y3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNDYWxsYmFjazo6c2VuZFN1Y2Nlc3MoUmVm
UHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4mJiBjb2x1bW5OYW1lcywgT3B0aW9uYWw8U3RyaW5n
PiYgbm90ZXMsIE9wdGlvbmFsPGRvdWJsZT4mIHRpbWVzdGFtcCwgT3B0aW9uYWw8SlNPTjo6T2Jq
ZWN0PiYgdmFsdWVzLCBPcHRpb25hbDxKU09OOjpWYWx1ZT4mIHBheWxvYWQsIE9wdGlvbmFsPGlu
dD4mIGRhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJy
b3I+JiYgc3FsRXJyb3IsIE9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQ
cmltYXJ5Q29sb3JzPiBzY3JlZW5Db2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRh
dGFiYXNlOjpDb2xvckxpc3Q+JiYgYWx0ZXJuYXRlQ29sb3JzLCBPcHRpb25hbDxEYXRhYmFzZUJh
Y2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UHJpbnRDb2xvcj4gcHJpbnRDb2xvcikKK3ZvaWQgRGF0
YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0
dXJuVmFsdWVzQ2FsbGJhY2s6OnNlbmRTdWNjZXNzKFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmlu
Zz4+JiYgb3B0X2NvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIG9wdF9ub3RlcywgT3B0aW9uYWw8
ZG91YmxlPiYmIG9wdF90aW1lc3RhbXAsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgb3B0X3ZhbHVl
cywgUmVmUHRyPEpTT046OlZhbHVlPiYmIG9wdF9wYXlsb2FkLCBPcHRpb25hbDxpbnQ+JiYgb3B0
X2RhdGFiYXNlSWQsIFJlZlB0cjxQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiYmIG9wdF9zcWxF
cnJvciwgT3B0aW9uYWw8UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPiYmIG9wdF9z
Y3JlZW5Db2xvciwgUmVmUHRyPFByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiYmIG9wdF9h
bHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyYgb3B0X3ByaW50Q29sb3IpCiB7Ci0gICAgUmVm
PEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAg
IGlmIChjb2x1bW5OYW1lcykKLSAgICAgICAganNvbk1lc3NhZ2UtPnNldEFycmF5KCJjb2x1bW5O
YW1lcyJfcywgY29sdW1uTmFtZXMpOwotICAgIGlmIChub3Rlcy5oYXNWYWx1ZSgpKQotICAgICAg
ICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJub3RlcyJfcywgKm5vdGVzKTsKLSAgICBpZiAodGlt
ZXN0YW1wLmhhc1ZhbHVlKCkpCi0gICAgICAgIGpzb25NZXNzYWdlLT5zZXREb3VibGUoInRpbWVz
dGFtcCJfcywgKnRpbWVzdGFtcCk7Ci0gICAgaWYgKHZhbHVlcy5oYXNWYWx1ZSgpKQotICAgICAg
ICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsICp2YWx1ZXMpOwotICAgIGlmIChw
YXlsb2FkLmhhc1ZhbHVlKCkpCi0gICAgICAgIGpzb25NZXNzYWdlLT5zZXRWYWx1ZSgicGF5bG9h
ZCJfcywgKnBheWxvYWQpOwotICAgIGlmIChkYXRhYmFzZUlkLmhhc1ZhbHVlKCkpCi0gICAgICAg
IGpzb25NZXNzYWdlLT5zZXRJbnRlZ2VyKCJkYXRhYmFzZUlkIl9zLCAqZGF0YWJhc2VJZCk7Ci0g
ICAgaWYgKHNxbEVycm9yKQotICAgICAgICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJzcWxFcnJv
ciJfcywgc3FsRXJyb3IpOwotICAgIGlmIChzY3JlZW5Db2xvci5oYXNWYWx1ZSgpKQotICAgICAg
ICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgKnNjcmVlbkNvbG9yKTsK
LSAgICBpZiAoYWx0ZXJuYXRlQ29sb3JzKQotICAgICAgICBqc29uTWVzc2FnZS0+c2V0QXJyYXko
ImFsdGVybmF0ZUNvbG9ycyJfcywgYWx0ZXJuYXRlQ29sb3JzKTsKLSAgICBpZiAocHJpbnRDb2xv
ci5oYXNWYWx1ZSgpKQotICAgICAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJwcmludENvbG9y
Il9zLCAqcHJpbnRDb2xvcik7Ci0gICAgQ2FsbGJhY2tCYXNlOjpzZW5kU3VjY2VzcyhXVEZNb3Zl
KGpzb25NZXNzYWdlKSk7CisgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9i
amVjdDo6Y3JlYXRlKCk7CisgICAgaWYgKCEhb3B0X2NvbHVtbk5hbWVzKQorICAgICAgICBwcm90
b2NvbF9qc29uTWVzc2FnZS0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCBvcHRfY29sdW1uTmFt
ZXMucmVsZWFzZU5vbk51bGwoKSk7CisgICAgaWYgKCEhb3B0X25vdGVzKQorICAgICAgICBwcm90
b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJub3RlcyJfcywgb3B0X25vdGVzKTsKKyAgICBp
ZiAoISFvcHRfdGltZXN0YW1wKQorICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0RG91
YmxlKCJ0aW1lc3RhbXAiX3MsICpvcHRfdGltZXN0YW1wKTsKKyAgICBpZiAoISFvcHRfdmFsdWVz
KQorICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIG9w
dF92YWx1ZXMucmVsZWFzZU5vbk51bGwoKSk7CisgICAgaWYgKCEhb3B0X3BheWxvYWQpCisgICAg
ICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgb3B0X3BheWxv
YWQucmVsZWFzZU5vbk51bGwoKSk7CisgICAgaWYgKCEhb3B0X2RhdGFiYXNlSWQpCisgICAgICAg
IHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRJbnRlZ2VyKCJkYXRhYmFzZUlkIl9zLCAqb3B0X2Rh
dGFiYXNlSWQpOworICAgIGlmICghIW9wdF9zcWxFcnJvcikKKyAgICAgICAgcHJvdG9jb2xfanNv
bk1lc3NhZ2UtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIG9wdF9zcWxFcnJvci5yZWxlYXNlTm9u
TnVsbCgpKTsKKyAgICBpZiAoISFvcHRfc2NyZWVuQ29sb3IpCisgICAgICAgIHByb3RvY29sX2pz
b25NZXNzYWdlLT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCBQcm90b2NvbDo6VGVzdEhlbHBl
cnM6OmdldEVudW1Db25zdGFudFZhbHVlKCpvcHRfc2NyZWVuQ29sb3IpKTsKKyAgICBpZiAoISFv
cHRfYWx0ZXJuYXRlQ29sb3JzKQorICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0QXJy
YXkoImFsdGVybmF0ZUNvbG9ycyJfcywgb3B0X2FsdGVybmF0ZUNvbG9ycy5yZWxlYXNlTm9uTnVs
bCgpKTsKKyAgICBpZiAoISFvcHRfcHJpbnRDb2xvcikKKyAgICAgICAgcHJvdG9jb2xfanNvbk1l
c3NhZ2UtPnNldFN0cmluZygicHJpbnRDb2xvciJfcywgb3B0X3ByaW50Q29sb3IpOworICAgIENh
bGxiYWNrQmFzZTo6c2VuZFN1Y2Nlc3MoV1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSkpOwog
fQogCi12b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxBc3luY09wdGlv
bmFsUmV0dXJuVmFsdWVzKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBh
cmFtZXRlcnMpCit2b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxBc3lu
Y09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBSZWZQdHI8SlNPTjo6
T2JqZWN0PiYmIHByb3RvY29sX3BhcmFtZXRlcnMpCiB7Ci0gICAgaW50IGluX2RhdGFiYXNlSWQg
PSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRJbnRlZ2VyKHBhcmFtZXRlcnMuZ2V0KCksICJkYXRh
YmFzZUlkIl9zLCBudWxscHRyKTsKLSAgICBTdHJpbmcgaW5fcXVlcnkgPSBtX2JhY2tlbmREaXNw
YXRjaGVyLT5nZXRTdHJpbmcocGFyYW1ldGVycy5nZXQoKSwgInF1ZXJ5Il9zLCBudWxscHRyKTsK
KyAgICBhdXRvIGluX2RhdGFiYXNlSWQgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRJbnRlZ2Vy
KHByb3RvY29sX3BhcmFtZXRlcnMuZ2V0KCksICJkYXRhYmFzZUlkIl9zLCB0cnVlKTsKKyAgICBh
dXRvIGluX3F1ZXJ5ID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3RyaW5nKHByb3RvY29sX3Bh
cmFtZXRlcnMuZ2V0KCksICJxdWVyeSJfcywgdHJ1ZSk7CiAgICAgaWYgKG1fYmFja2VuZERpc3Bh
dGNoZXItPmhhc1Byb3RvY29sRXJyb3JzKCkpIHsKICAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFtcywg
IlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnRGF0YWJhc2UuZXhlY3V0ZVNRTEFzeW5jT3B0aW9u
YWxSZXR1cm5WYWx1ZXMnIGNhbid0IGJlIHByb2Nlc3NlZCJfcyk7CiAgICAgICAgIHJldHVybjsK
QEAgLTM3OCwyMCArMzYyLDE4IEBAIHZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhl
Y3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyByZXF1ZXN0CiAKICNpZiBFTkFC
TEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKICAgICBpZiAobV9hbHRlcm5hdGVE
aXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+ZXhlY3V0ZVNRTEFz
eW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMocmVxdWVzdElkLCBpbl9kYXRhYmFzZUlkLCBpbl9xdWVy
eSk7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+ZXhlY3V0ZVNRTEFzeW5jT3B0aW9u
YWxSZXR1cm5WYWx1ZXMocHJvdG9jb2xfY2FsbElkLCAqaW5fZGF0YWJhc2VJZCwgaW5fcXVlcnkp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQogCi0gICAgUmVmPERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc0NhbGxiYWNrPiBjYWxs
YmFjayA9IGFkb3B0UmVmKCpuZXcgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkV4
ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJhY2sobV9iYWNrZW5kRGlzcGF0
Y2hlci5jb3B5UmVmKCksIHJlcXVlc3RJZCkpOwotICAgIG1fYWdlbnQtPmV4ZWN1dGVTUUxBc3lu
Y09wdGlvbmFsUmV0dXJuVmFsdWVzKGluX2RhdGFiYXNlSWQsIGluX3F1ZXJ5LCBjYWxsYmFjay5j
b3B5UmVmKCkpOwotCisgICAgbV9hZ2VudC0+ZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5W
YWx1ZXMoKmluX2RhdGFiYXNlSWQsIGluX3F1ZXJ5LCBhZG9wdFJlZigqbmV3IERhdGFiYXNlQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVl
c0NhbGxiYWNrKG1fYmFja2VuZERpc3BhdGNoZXIuY29weVJlZigpLCBwcm90b2NvbF9jYWxsSWQp
KSk7CiB9CiAKLXZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTFN5bmMo
bG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycykKK3ZvaWQg
RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTFN5bmMobG9uZyBwcm90b2NvbF9j
YWxsSWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfcGFyYW1ldGVycykKIHsKLSAg
ICBpbnQgaW5fZGF0YWJhc2VJZCA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldEludGVnZXIocGFy
YW1ldGVycy5nZXQoKSwgImRhdGFiYXNlSWQiX3MsIG51bGxwdHIpOwotICAgIFN0cmluZyBpbl9x
dWVyeSA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFN0cmluZyhwYXJhbWV0ZXJzLmdldCgpLCAi
cXVlcnkiX3MsIG51bGxwdHIpOworICAgIGF1dG8gaW5fZGF0YWJhc2VJZCA9IG1fYmFja2VuZERp
c3BhdGNoZXItPmdldEludGVnZXIocHJvdG9jb2xfcGFyYW1ldGVycy5nZXQoKSwgImRhdGFiYXNl
SWQiX3MsIHRydWUpOworICAgIGF1dG8gaW5fcXVlcnkgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5n
ZXRTdHJpbmcocHJvdG9jb2xfcGFyYW1ldGVycy5nZXQoKSwgInF1ZXJ5Il9zLCB0cnVlKTsKICAg
ICBpZiAobV9iYWNrZW5kRGlzcGF0Y2hlci0+aGFzUHJvdG9jb2xFcnJvcnMoKSkgewogICAgICAg
ICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRj
aGVyOjpJbnZhbGlkUGFyYW1zLCAiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICdEYXRhYmFzZS5l
eGVjdXRlU1FMU3luYycgY2FuJ3QgYmUgcHJvY2Vzc2VkIl9zKTsKICAgICAgICAgcmV0dXJuOwpA
QCAtMzk5LDY1ICszODEsNTYgQEAgdm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVj
dXRlU1FMU3luYyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamUKIAogI2lmIEVOQUJM
RShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogICAgIGlmIChtX2FsdGVybmF0ZURp
c3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5leGVjdXRlU1FMU3lu
YyhyZXF1ZXN0SWQsIGluX2RhdGFiYXNlSWQsIGluX3F1ZXJ5KTsKKyAgICAgICAgbV9hbHRlcm5h
dGVEaXNwYXRjaGVyLT5leGVjdXRlU1FMU3luYyhwcm90b2NvbF9jYWxsSWQsICppbl9kYXRhYmFz
ZUlkLCBpbl9xdWVyeSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYgLy8gRU5BQkxF
KElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAKLSAgICBFcnJvclN0cmluZyBlcnJv
cjsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgp
OwotICAgIFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+IG91dF9jb2x1bW5OYW1lczsKLSAg
ICBTdHJpbmcgb3V0X25vdGVzOwotICAgIGRvdWJsZSBvdXRfdGltZXN0YW1wOwotICAgIEpTT046
Ok9iamVjdCBvdXRfdmFsdWVzOwotICAgIEpTT046OlZhbHVlIG91dF9wYXlsb2FkOwotICAgIGlu
dCBvdXRfZGF0YWJhc2VJZDsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJh
c2U6OkVycm9yPiBvdXRfc3FsRXJyb3I7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRhdGFiYXNlOjpDb2xvckxpc3Q+IG91dF9hbHRlcm5hdGVDb2xvcnM7Ci0gICAgSW5zcGVjdG9y
OjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMgb3V0X3NjcmVlbkNvbG9yOwotICAg
IERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQcmludENvbG9yIG91dF9wcmludENv
bG9yOwotICAgIG1fYWdlbnQtPmV4ZWN1dGVTUUxTeW5jKGVycm9yLCBpbl9kYXRhYmFzZUlkLCBp
bl9xdWVyeSwgb3V0X2NvbHVtbk5hbWVzLCAmb3V0X25vdGVzLCAmb3V0X3RpbWVzdGFtcCwgb3V0
X3ZhbHVlcywgJm91dF9wYXlsb2FkLCAmb3V0X2RhdGFiYXNlSWQsIG91dF9zcWxFcnJvciwgb3V0
X2FsdGVybmF0ZUNvbG9ycywgJm91dF9zY3JlZW5Db2xvciwgJm91dF9wcmludENvbG9yKTsKLQot
ICAgIGlmICghZXJyb3IubGVuZ3RoKCkpIHsKLSAgICAgICAgcmVzdWx0LT5zZXRBcnJheSgiY29s
dW1uTmFtZXMiX3MsIG91dF9jb2x1bW5OYW1lcyk7Ci0gICAgICAgIHJlc3VsdC0+c2V0U3RyaW5n
KCJub3RlcyJfcywgb3V0X25vdGVzKTsKLSAgICAgICAgcmVzdWx0LT5zZXREb3VibGUoInRpbWVz
dGFtcCJfcywgb3V0X3RpbWVzdGFtcCk7Ci0gICAgICAgIHJlc3VsdC0+c2V0T2JqZWN0KCJ2YWx1
ZXMiX3MsIG91dF92YWx1ZXMpOwotICAgICAgICByZXN1bHQtPnNldFZhbHVlKCJwYXlsb2FkIl9z
LCBvdXRfcGF5bG9hZCk7Ci0gICAgICAgIHJlc3VsdC0+c2V0SW50ZWdlcigiZGF0YWJhc2VJZCJf
cywgb3V0X2RhdGFiYXNlSWQpOwotICAgICAgICByZXN1bHQtPnNldE9iamVjdCgic3FsRXJyb3Ii
X3MsIG91dF9zcWxFcnJvcik7Ci0gICAgICAgIHJlc3VsdC0+c2V0QXJyYXkoImFsdGVybmF0ZUNv
bG9ycyJfcywgb3V0X2FsdGVybmF0ZUNvbG9ycyk7Ci0gICAgICAgIHJlc3VsdC0+c2V0U3RyaW5n
KCJzY3JlZW5Db2xvciJfcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVu
dW1Db25zdGFudFZhbHVlKG91dF9zY3JlZW5Db2xvcikpOwotICAgICAgICByZXN1bHQtPnNldFN0
cmluZygicHJpbnRDb2xvciJfcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6Omdl
dEVudW1Db25zdGFudFZhbHVlKG91dF9wcmludENvbG9yKSk7CisgICAgYXV0byByZXN1bHQgPSBt
X2FnZW50LT5leGVjdXRlU1FMU3luYygqaW5fZGF0YWJhc2VJZCwgaW5fcXVlcnkpOworICAgIGlm
ICghcmVzdWx0KSB7CisgICAgICAgIEFTU0VSVCghcmVzdWx0LmVycm9yKCkuaXNFbXB0eSgpKTsK
KyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5k
RGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIHJlc3VsdC5lcnJvcigpKTsKKyAgICAgICAgcmV0dXJu
OwogICAgIH0KLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQotICAgICAgICBtX2JhY2tlbmREaXNw
YXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsK
LSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJy
b3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7CisKKyAg
ICBhdXRvIFtvdXRfY29sdW1uTmFtZXMsIG91dF9ub3Rlcywgb3V0X3RpbWVzdGFtcCwgb3V0X3Zh
bHVlcywgb3V0X3BheWxvYWQsIG91dF9kYXRhYmFzZUlkLCBvdXRfc3FsRXJyb3IsIG91dF9hbHRl
cm5hdGVDb2xvcnMsIG91dF9zY3JlZW5Db2xvciwgb3V0X3ByaW50Q29sb3JdID0gV1RGTW92ZShy
ZXN1bHQudmFsdWUoKSk7CisKKyAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6
T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0QXJyYXkoImNv
bHVtbk5hbWVzIl9zLCBXVEZNb3ZlKG91dF9jb2x1bW5OYW1lcykpOworICAgIHByb3RvY29sX2pz
b25NZXNzYWdlLT5zZXRTdHJpbmcoIm5vdGVzIl9zLCBvdXRfbm90ZXMpOworICAgIHByb3RvY29s
X2pzb25NZXNzYWdlLT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywgb3V0X3RpbWVzdGFtcCk7Cisg
ICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldE9iamVjdCgidmFsdWVzIl9zLCBXVEZNb3ZlKG91
dF92YWx1ZXMpKTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0VmFsdWUoInBheWxvYWQi
X3MsIFdURk1vdmUob3V0X3BheWxvYWQpKTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0
SW50ZWdlcigiZGF0YWJhc2VJZCJfcywgb3V0X2RhdGFiYXNlSWQpOworICAgIHByb3RvY29sX2pz
b25NZXNzYWdlLT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBXVEZNb3ZlKG91dF9zcWxFcnJvcikp
OworICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9z
LCBXVEZNb3ZlKG91dF9hbHRlcm5hdGVDb2xvcnMpKTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2Fn
ZS0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgUHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRF
bnVtQ29uc3RhbnRWYWx1ZShvdXRfc2NyZWVuQ29sb3IpKTsKKyAgICBwcm90b2NvbF9qc29uTWVz
c2FnZS0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCBvdXRfcHJpbnRDb2xvcik7CisgICAgbV9i
YWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShw
cm90b2NvbF9qc29uTWVzc2FnZSksIGZhbHNlKTsKIH0KIAogRGF0YWJhc2VCYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXI6OkV4ZWN1dGVTUUxBc3luY0NhbGxiYWNrOjpFeGVjdXRlU1FMQXN5bmNDYWxs
YmFjayhSZWY8QmFja2VuZERpc3BhdGNoZXI+JiYgYmFja2VuZERpc3BhdGNoZXIsIGludCBpZCkg
OiBCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlKFdURk1vdmUoYmFja2VuZERpc3BhdGNo
ZXIpLCBpZCkgeyB9CiAKLXZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkV4
ZWN1dGVTUUxBc3luY0NhbGxiYWNrOjpzZW5kU3VjY2VzcyhSZWZQdHI8SlNPTjo6QXJyYXlPZjxT
dHJpbmc+PiYmIGNvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIG5vdGVzLCBkb3VibGUgdGltZXN0
YW1wLCBKU09OOjpPYmplY3QgdmFsdWVzLCBKU09OOjpWYWx1ZSBwYXlsb2FkLCBpbnQgZGF0YWJh
c2VJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4mJiBzcWxF
cnJvciwgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMgc2NyZWVu
Q29sb3IsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiYm
IGFsdGVybmF0ZUNvbG9ycywgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50
Q29sb3IgcHJpbnRDb2xvcikKK3ZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6
OkV4ZWN1dGVTUUxBc3luY0NhbGxiYWNrOjpzZW5kU3VjY2VzcyhSZWY8SlNPTjo6QXJyYXlPZjxT
dHJpbmc+PiYmIGNvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIG5vdGVzLCBkb3VibGUgdGltZXN0
YW1wLCBSZWY8SlNPTjo6T2JqZWN0PiYmIHZhbHVlcywgUmVmPEpTT046OlZhbHVlPiYmIHBheWxv
YWQsIGludCBkYXRhYmFzZUlkLCBSZWY8UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4mJiBzcWxF
cnJvciwgUHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzIHNjcmVlbkNvbG9yLCBSZWY8
UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+JiYgYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBT
dHJpbmcmIHByaW50Q29sb3IpCiB7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2Ug
PSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIGpzb25NZXNzYWdlLT5zZXRBcnJheSgiY29s
dW1uTmFtZXMiX3MsIGNvbHVtbk5hbWVzKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJu
b3RlcyJfcywgbm90ZXMpOwotICAgIGpzb25NZXNzYWdlLT5zZXREb3VibGUoInRpbWVzdGFtcCJf
cywgdGltZXN0YW1wKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIHZh
bHVlcyk7Ci0gICAganNvbk1lc3NhZ2UtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCBwYXlsb2FkKTsK
LSAgICBqc29uTWVzc2FnZS0+c2V0SW50ZWdlcigiZGF0YWJhc2VJZCJfcywgZGF0YWJhc2VJZCk7
Ci0gICAganNvbk1lc3NhZ2UtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIHNxbEVycm9yKTsKLSAg
ICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgSW5zcGVjdG9yOjpQcm90
b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKHNjcmVlbkNvbG9yKSk7Ci0g
ICAganNvbk1lc3NhZ2UtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIGFsdGVybmF0ZUNv
bG9ycyk7Ci0gICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygicHJpbnRDb2xvciJfcywgSW5zcGVj
dG9yOjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKHByaW50Q29s
b3IpKTsKLSAgICBDYWxsYmFja0Jhc2U6OnNlbmRTdWNjZXNzKFdURk1vdmUoanNvbk1lc3NhZ2Up
KTsKKyAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUo
KTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCBX
VEZNb3ZlKGNvbHVtbk5hbWVzKSk7CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmlu
Zygibm90ZXMiX3MsIG5vdGVzKTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0RG91Ymxl
KCJ0aW1lc3RhbXAiX3MsIHRpbWVzdGFtcCk7CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNl
dE9iamVjdCgidmFsdWVzIl9zLCBXVEZNb3ZlKHZhbHVlcykpOworICAgIHByb3RvY29sX2pzb25N
ZXNzYWdlLT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgV1RGTW92ZShwYXlsb2FkKSk7CisgICAgcHJv
dG9jb2xfanNvbk1lc3NhZ2UtPnNldEludGVnZXIoImRhdGFiYXNlSWQiX3MsIGRhdGFiYXNlSWQp
OworICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBXVEZN
b3ZlKHNxbEVycm9yKSk7CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygic2Ny
ZWVuQ29sb3IiX3MsIFByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUo
c2NyZWVuQ29sb3IpKTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0QXJyYXkoImFsdGVy
bmF0ZUNvbG9ycyJfcywgV1RGTW92ZShhbHRlcm5hdGVDb2xvcnMpKTsKKyAgICBwcm90b2NvbF9q
c29uTWVzc2FnZS0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCBwcmludENvbG9yKTsKKyAgICBD
YWxsYmFja0Jhc2U6OnNlbmRTdWNjZXNzKFdURk1vdmUocHJvdG9jb2xfanNvbk1lc3NhZ2UpKTsK
IH0KIAotdm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FMQXN5bmMobG9u
ZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycykKK3ZvaWQgRGF0
YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTEFzeW5jKGxvbmcgcHJvdG9jb2xfY2Fs
bElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX3BhcmFtZXRlcnMpCiB7Ci0gICAg
aW50IGluX2RhdGFiYXNlSWQgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRJbnRlZ2VyKHBhcmFt
ZXRlcnMuZ2V0KCksICJkYXRhYmFzZUlkIl9zLCBudWxscHRyKTsKLSAgICBTdHJpbmcgaW5fcXVl
cnkgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRTdHJpbmcocGFyYW1ldGVycy5nZXQoKSwgInF1
ZXJ5Il9zLCBudWxscHRyKTsKKyAgICBhdXRvIGluX2RhdGFiYXNlSWQgPSBtX2JhY2tlbmREaXNw
YXRjaGVyLT5nZXRJbnRlZ2VyKHByb3RvY29sX3BhcmFtZXRlcnMuZ2V0KCksICJkYXRhYmFzZUlk
Il9zLCB0cnVlKTsKKyAgICBhdXRvIGluX3F1ZXJ5ID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0
U3RyaW5nKHByb3RvY29sX3BhcmFtZXRlcnMuZ2V0KCksICJxdWVyeSJfcywgdHJ1ZSk7CiAgICAg
aWYgKG1fYmFja2VuZERpc3BhdGNoZXItPmhhc1Byb3RvY29sRXJyb3JzKCkpIHsKICAgICAgICAg
bV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hl
cjo6SW52YWxpZFBhcmFtcywgIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnRGF0YWJhc2UuZXhl
Y3V0ZVNRTEFzeW5jJyBjYW4ndCBiZSBwcm9jZXNzZWQiX3MpOwogICAgICAgICByZXR1cm47CkBA
IC00NjUsMTQgKzQzOCwxMiBAQCB2b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1
dGVTUUxBc3luYyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iagogCiAjaWYgRU5BQkxF
KElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAgICAgaWYgKG1fYWx0ZXJuYXRlRGlz
cGF0Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmV4ZWN1dGVTUUxBc3lu
YyhyZXF1ZXN0SWQsIGluX2RhdGFiYXNlSWQsIGluX3F1ZXJ5KTsKKyAgICAgICAgbV9hbHRlcm5h
dGVEaXNwYXRjaGVyLT5leGVjdXRlU1FMQXN5bmMocHJvdG9jb2xfY2FsbElkLCAqaW5fZGF0YWJh
c2VJZCwgaW5fcXVlcnkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmIC8vIEVOQUJM
RShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogCi0gICAgUmVmPERhdGFiYXNlQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNDYWxsYmFjaz4gY2FsbGJhY2sg
PSBhZG9wdFJlZigqbmV3IERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRl
U1FMQXN5bmNDYWxsYmFjayhtX2JhY2tlbmREaXNwYXRjaGVyLmNvcHlSZWYoKSwgcmVxdWVzdElk
KSk7Ci0gICAgbV9hZ2VudC0+ZXhlY3V0ZVNRTEFzeW5jKGluX2RhdGFiYXNlSWQsIGluX3F1ZXJ5
LCBjYWxsYmFjay5jb3B5UmVmKCkpOwotCisgICAgbV9hZ2VudC0+ZXhlY3V0ZVNRTEFzeW5jKCpp
bl9kYXRhYmFzZUlkLCBpbl9xdWVyeSwgYWRvcHRSZWYoKm5ldyBEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5jQ2FsbGJhY2sobV9iYWNrZW5kRGlzcGF0Y2hl
ci5jb3B5UmVmKCksIHByb3RvY29sX2NhbGxJZCkpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCkBAIC01MTMsNiArNDg0LDcgQEAgdm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVy
OjpleGVjdXRlU1FMQXN5bmMobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmoKIAogI2lu
Y2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5o
PgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKQEAgLTU1Niw3ICs1MjgsNiBAQCBjbGFzcyBG
cm9udGVuZFJvdXRlcjsKICNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgogCiAj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNs
dWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC01
OTcsNyArNTY4LDkgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiAjcHJhZ21hIG9uY2UKIAogI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KLSNpbmNsdWRl
IDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVk
ZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5h
bWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC02MTksNyArNTkyLDcgQEAgZW51bSBjbGFzcyBQcmlt
YXJ5Q29sb3JzOwogbmFtZXNwYWNlIERhdGFiYXNlIHsKIC8qIFVuaXF1ZSBpZGVudGlmaWVyIG9m
IERhdGFiYXNlIG9iamVjdC4gKi8KIHVzaW5nIERhdGFiYXNlSWQgPSBpbnQ7Ci11c2luZyBDb2xv
ckxpc3QgPSBKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmlt
YXJ5Q29sb3JzPjsKK3VzaW5nIENvbG9yTGlzdCA9IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkRh
dGFiYXNlOjpQcmltYXJ5Q29sb3JzPjsKIH0gLy8gRGF0YWJhc2UKIC8vIEVuZCBvZiB0eXBlZGVm
cy4KIApAQCAtNjQzLDcgKzYxNiw3IEBAIGVudW0gY2xhc3MgUHJpbWFyeUNvbG9ycyB7CiB9OyAv
LyBlbnVtIGNsYXNzIFByaW1hcnlDb2xvcnMKIAogLyogRGF0YWJhc2UgZXJyb3IuICovCi1jbGFz
cyBFcnJvciA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKK2NsYXNzIEVycm9yIGZpbmFsIDog
cHVibGljIEpTT046Ok9iamVjdEJhc2UgewogcHVibGljOgogICAgIGVudW0gewogICAgICAgICBO
b0ZpZWxkc1NldCA9IDAsCkBAIC02NzAsMTcgKzY0MywxNyBAQCBwdWJsaWM6CiAgICAgICAgIGZy
aWVuZCBjbGFzcyBFcnJvcjsKICAgICBwdWJsaWM6CiAKLSAgICAgICAgQnVpbGRlcjxTVEFURSB8
IE1lc3NhZ2VTZXQ+JiBzZXRNZXNzYWdlKGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgICAgIEJ1
aWxkZXI8U1RBVEUgfCBNZXNzYWdlU2V0PiYgc2V0TWVzc2FnZShjb25zdCBTdHJpbmcmIGluX21l
c3NhZ2UpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBN
ZXNzYWdlU2V0KSwgcHJvcGVydHlfbWVzc2FnZV9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBt
X3Jlc3VsdC0+c2V0U3RyaW5nKCJtZXNzYWdlIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICBtX3Jl
c3VsdC0+c2V0U3RyaW5nKCJtZXNzYWdlIl9zLCBpbl9tZXNzYWdlKTsKICAgICAgICAgICAgIHJl
dHVybiBjYXN0U3RhdGU8TWVzc2FnZVNldD4oKTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1aWxk
ZXI8U1RBVEUgfCBDb2RlU2V0PiYgc2V0Q29kZShpbnQgdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCBDb2RlU2V0PiYgc2V0Q29kZShpbnQgaW5fY29kZSkKICAgICAgICAgewogICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIENvZGVTZXQpLCBwcm9wZXJ0eV9jb2RlX2Fs
cmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRJbnRlZ2VyKCJjb2RlIl9zLCB2
YWx1ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0SW50ZWdlcigiY29kZSJfcywgaW5fY29k
ZSk7CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENvZGVTZXQ+KCk7CiAgICAgICAgIH0K
IApAQCAtNzE5LDcgKzY5Miw3IEBAIE9wdGlvbmFsPFByb3RvY29sRW51bVR5cGU+IHBhcnNlRW51
bVZhbHVlRnJvbVN0cmluZyhjb25zdCBTdHJpbmcmKTsKIAogLy8gRW51bXMgaW4gdGhlICdEYXRh
YmFzZScgRG9tYWluCiB0ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpE
YXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPihjb25zdCBTdHJpbmcmKTsKK09w
dGlvbmFsPFByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4gcGFyc2VFbnVtVmFsdWVG
cm9tU3RyaW5nPFByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4oY29uc3QgU3RyaW5n
Jik7CiAKIH0gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCiAKQEAgLTc3MSw4ICs3NDQsNyBAQCBz
dHJ1Y3QgRGVmYXVsdEhhc2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlD
b2xvcnM+IDogSW50SGFzaDxJbnNwZQogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlRl
c3RQcm90b2NvbE9iamVjdHMuaCIKIAotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogCiBu
YW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtNzk3LDE2ICs3NjksMTYgQEAgU3RyaW5nIGdldEVu
dW1Db25zdGFudFZhbHVlKGludCBjb2RlKSB7CiAvLyBFbnVtcyBpbiB0aGUgJ0RhdGFiYXNlJyBE
b21haW4KIAogdGVtcGxhdGU8PgotT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJh
c2U6OlByaW1hcnlDb2xvcnM+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlBy
b3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4oY29uc3QgU3RyaW5nJiBwcm90b2NvbFN0
cmluZykKK09wdGlvbmFsPFByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4gcGFyc2VF
bnVtVmFsdWVGcm9tU3RyaW5nPFByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4oY29u
c3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKIHsKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNv
bnN0YW50VmFsdWVzW10gPSB7Ci0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6
RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM6OlJlZCwKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6
OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9yczo6R3JlZW4sCi0gICAgICAgIChzaXpl
X3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM6OkJsdWUsCisg
ICAgICAgIChzaXplX3QpUHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzOjpSZWQsCisg
ICAgICAgIChzaXplX3QpUHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzOjpHcmVlbiwK
KyAgICAgICAgKHNpemVfdClQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM6OkJsdWUs
CiAgICAgfTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDM7ICsraSkKICAgICAgICAgaWYg
KHByb3RvY29sU3RyaW5nID09IGVudW1fY29uc3RhbnRfdmFsdWVzW2NvbnN0YW50VmFsdWVzW2ld
XSkKLSAgICAgICAgICAgIHJldHVybiAoSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlBy
aW1hcnlDb2xvcnMpY29uc3RhbnRWYWx1ZXNbaV07CisgICAgICAgICAgICByZXR1cm4gKFByb3Rv
Y29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyljb25zdGFudFZhbHVlc1tpXTsKIAogICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CiB9CkBAIC04NjMsMTAgKzgzNSwxMCBAQCBjbGFzcyBPYmpDSW5z
cGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBBbHRlcm5hdGVE
YXRhYmFzZUJhYwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIE9i
akNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKGlkPFRlc3RQcm90b2NvbERhdGFi
YXNlRG9tYWluSGFuZGxlcj4gaGFuZGxlcikgeyBtX2RlbGVnYXRlID0gaGFuZGxlcjsgfQotICAg
IHZvaWQgZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIHJlcXVlc3RJZCwg
aW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnkpIGZpbmFsOwotICAgIHZv
aWQgZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyByZXF1ZXN0SWQsIGlu
dCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5KSBmaW5hbDsKLSAgICB2b2lk
IGV4ZWN1dGVTUUxTeW5jKGxvbmcgcmVxdWVzdElkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3Qg
U3RyaW5nJiBpbl9xdWVyeSkgZmluYWw7Ci0gICAgdm9pZCBleGVjdXRlU1FMQXN5bmMobG9uZyBy
ZXF1ZXN0SWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5KSBmaW5h
bDsKKyAgICB2b2lkIGV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyBwcm90
b2NvbF9jYWxsSWQsIGludCBkYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIHF1ZXJ5KSBmaW5hbDsK
KyAgICB2b2lkIGV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgcHJvdG9j
b2xfY2FsbElkLCBpbnQgZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBxdWVyeSkgZmluYWw7Cisg
ICAgdm9pZCBleGVjdXRlU1FMU3luYyhsb25nIHByb3RvY29sX2NhbGxJZCwgaW50IGRhdGFiYXNl
SWQsIGNvbnN0IFN0cmluZyYgcXVlcnkpIGZpbmFsOworICAgIHZvaWQgZXhlY3V0ZVNRTEFzeW5j
KGxvbmcgcHJvdG9jb2xfY2FsbElkLCBpbnQgZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBxdWVy
eSkgZmluYWw7CiBwcml2YXRlOgogICAgIFJldGFpblB0cjxpZDxUZXN0UHJvdG9jb2xEYXRhYmFz
ZURvbWFpbkhhbmRsZXI+PiBtX2RlbGVnYXRlOwogfTsKQEAgLTkxNCwxODMgKzg4NiwxNzkgQEAg
cHJpdmF0ZToKIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKLXZvaWQgT2JqQ0luc3BlY3RvckRh
dGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1
ZXMobG9uZyByZXF1ZXN0SWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1
ZXJ5KQordm9pZCBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0
ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIHByb3RvY29sX2NhbGxJZCwgaW50IGlu
X2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnkpCiB7CiAgICAgaWYgKCFbbV9kZWxl
Z2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxS
ZXR1cm5WYWx1ZXNXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6ZGF0YWJhc2VJZDpx
dWVyeTopXSkgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVy
cm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RhdGFi
YXNlLmV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMnIHdhcyBub3QgZm91bmQiX3Mp
OworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHByb3Rv
Y29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RhdGFiYXNl
LmV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMnIHdhcyBub3QgZm91bmQiX3MpOwog
ICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCiAgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVy
cm9yKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3Io
cmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAg
ICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxs
SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwogICAgICAgICBiYWNr
ZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgIH07CiAKLSAgICBpZCBz
dWNjZXNzQ2FsbGJhY2sgPSBeKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKmNvbHVtbk5hbWVzLCBO
U1N0cmluZyAqKm5vdGVzLCBkb3VibGUgKnRpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0
ICoqdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKipwYXlsb2FkLCBpbnQgKmRhdGFiYXNl
SWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKipzcWxFcnJvciwgVGVzdFByb3RvY29sRGF0
YWJhc2VQcmltYXJ5Q29sb3JzICpzY3JlZW5Db2xvciwgTlNBcnJheS8qPE5TU3RyaW5nPiovICoq
YWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jT3B0aW9u
YWxSZXR1cm5WYWx1ZXNQcmludENvbG9yICpwcmludENvbG9yKSB7Ci0gICAgICAgIFJlZjxKU09O
OjpPYmplY3Q+IHJlc3VsdE9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgICAg
IFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihjb2x1bW5OYW1lcywg
QCJjb2x1bW5OYW1lcyIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05B
TF9QQVJBTUVURVIobm90ZXMsIEAibm90ZXMiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZP
Ul9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKHZhbHVlcywgQCJ2YWx1ZXMiKTsKLSAgICAgICAgVEhS
T1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKHBheWxvYWQsIEAicGF5bG9h
ZCIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIo
c3FsRXJyb3IsIEAic3FsRXJyb3IiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURf
T1BUSU9OQUxfUEFSQU1FVEVSKGFsdGVybmF0ZUNvbG9ycywgQCJhbHRlcm5hdGVDb2xvcnMiKTsK
LSAgICAgICAgaWYgKGNvbHVtbk5hbWVzKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRB
cnJheSgiY29sdW1uTmFtZXMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KCpjb2x1bW5OYW1lcykpOwot
ICAgICAgICBpZiAobm90ZXMpCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZygi
bm90ZXMiX3MsICpub3Rlcyk7Ci0gICAgICAgIGlmICh0aW1lc3RhbXApCi0gICAgICAgICAgICBy
ZXN1bHRPYmplY3QtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCAqdGltZXN0YW1wKTsKLSAgICAg
ICAgaWYgKHZhbHVlcykKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0T2JqZWN0KCJ2YWx1
ZXMiX3MsIFsqdmFsdWVzIHRvSlNPTk9iamVjdF0pOwotICAgICAgICBpZiAocGF5bG9hZCkKLSAg
ICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0VmFsdWUoInBheWxvYWQiX3MsIFsqcGF5bG9hZCB0
b0pTT05PYmplY3RdKTsKLSAgICAgICAgaWYgKGRhdGFiYXNlSWQpCi0gICAgICAgICAgICByZXN1
bHRPYmplY3QtPnNldEludGVnZXIoImRhdGFiYXNlSWQiX3MsICpkYXRhYmFzZUlkKTsKLSAgICAg
ICAgaWYgKHNxbEVycm9yKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRPYmplY3QoInNx
bEVycm9yIl9zLCBbKnNxbEVycm9yIHRvSlNPTk9iamVjdF0pOwotICAgICAgICBpZiAoc2NyZWVu
Q29sb3IpCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZygic2NyZWVuQ29sb3Ii
X3MsIHRvUHJvdG9jb2xTdHJpbmcoKnNjcmVlbkNvbG9yKSk7Ci0gICAgICAgIGlmIChhbHRlcm5h
dGVDb2xvcnMpCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldEFycmF5KCJhbHRlcm5hdGVD
b2xvcnMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KCphbHRlcm5hdGVDb2xvcnMpKTsKLSAgICAgICAg
aWYgKHByaW50Q29sb3IpCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZygicHJp
bnRDb2xvciJfcywgdG9Qcm90b2NvbFN0cmluZygqcHJpbnRDb2xvcikpOwotICAgICAgICBiYWNr
ZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdE9i
amVjdCksIGZhbHNlKTsKKyAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeKE5TQXJyYXkvKjxOU1N0
cmluZz4qLyAqKm91dF9vcHRfY29sdW1uTmFtZXMsIE5TU3RyaW5nICoqb3V0X29wdF9ub3Rlcywg
ZG91YmxlICpvdXRfb3B0X3RpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqb3V0X29w
dF92YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqKm91dF9vcHRfcGF5bG9hZCwgaW50ICpv
dXRfb3B0X2RhdGFiYXNlSWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKipvdXRfb3B0X3Nx
bEVycm9yLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgKm91dF9vcHRfc2NyZWVu
Q29sb3IsIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKm91dF9vcHRfYWx0ZXJuYXRlQ29sb3JzLCBU
ZXN0UHJvdG9jb2xEYXRhYmFzZShhbm9ueW1vdXMpICpvdXRfb3B0X3ByaW50Q29sb3IpIHsKKyAg
ICAgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7
CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihvdXRf
b3B0X2NvbHVtbk5hbWVzLCBAImNvbHVtbk5hbWVzIik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihvdXRfb3B0X25vdGVzLCBAIm5vdGVzIik7Cisg
ICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihvdXRfb3B0
X3ZhbHVlcywgQCJ2YWx1ZXMiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BU
SU9OQUxfUEFSQU1FVEVSKG91dF9vcHRfcGF5bG9hZCwgQCJwYXlsb2FkIik7CisgICAgICAgIFRI
Uk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihvdXRfb3B0X3NxbEVycm9y
LCBAInNxbEVycm9yIik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFM
X1BBUkFNRVRFUihvdXRfb3B0X2FsdGVybmF0ZUNvbG9ycywgQCJhbHRlcm5hdGVDb2xvcnMiKTsK
KyAgICAgICAgaWYgKCEhb3V0X29wdF9jb2x1bW5OYW1lcykKKyAgICAgICAgICAgIHByb3RvY29s
X2pzb25NZXNzYWdlLT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIHRvSlNPTlN0cmluZ0FycmF5
KCpvdXRfb3B0X2NvbHVtbk5hbWVzKSk7CisgICAgICAgIGlmICghIW91dF9vcHRfbm90ZXMpCisg
ICAgICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJub3RlcyJfcywgKm91
dF9vcHRfbm90ZXMpOworICAgICAgICBpZiAoISFvdXRfb3B0X3RpbWVzdGFtcCkKKyAgICAgICAg
ICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywgKm91dF9v
cHRfdGltZXN0YW1wKTsKKyAgICAgICAgaWYgKCEhb3V0X29wdF92YWx1ZXMpCisgICAgICAgICAg
ICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIFsqb3V0X29wdF92
YWx1ZXMgdG9KU09OT2JqZWN0XSk7CisgICAgICAgIGlmICghIW91dF9vcHRfcGF5bG9hZCkKKyAg
ICAgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgWypv
dXRfb3B0X3BheWxvYWQgdG9KU09OT2JqZWN0XSk7CisgICAgICAgIGlmICghIW91dF9vcHRfZGF0
YWJhc2VJZCkKKyAgICAgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRJbnRlZ2VyKCJk
YXRhYmFzZUlkIl9zLCAqb3V0X29wdF9kYXRhYmFzZUlkKTsKKyAgICAgICAgaWYgKCEhb3V0X29w
dF9zcWxFcnJvcikKKyAgICAgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRPYmplY3Qo
InNxbEVycm9yIl9zLCBbKm91dF9vcHRfc3FsRXJyb3IgdG9KU09OT2JqZWN0XSk7CisgICAgICAg
IGlmICghIW91dF9vcHRfc2NyZWVuQ29sb3IpCisgICAgICAgICAgICBwcm90b2NvbF9qc29uTWVz
c2FnZS0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgdG9Qcm90b2NvbFN0cmluZygqb3V0X29w
dF9zY3JlZW5Db2xvcikpOworICAgICAgICBpZiAoISFvdXRfb3B0X2FsdGVybmF0ZUNvbG9ycykK
KyAgICAgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29s
b3JzIl9zLCB0b0pTT05TdHJpbmdBcnJheSgqb3V0X29wdF9hbHRlcm5hdGVDb2xvcnMpKTsKKyAg
ICAgICAgaWYgKCEhb3V0X29wdF9wcmludENvbG9yKQorICAgICAgICAgICAgcHJvdG9jb2xfanNv
bk1lc3NhZ2UtPnNldFN0cmluZygicHJpbnRDb2xvciJfcywgdG9Qcm90b2NvbFN0cmluZygqb3V0
X29wdF9wcmludENvbG9yKSk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNw
b25zZShwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJvdG9jb2xfanNvbk1lc3NhZ2UpLCBmYWxz
ZSk7CiAgICAgfTsKIAogICAgIGludCBvX2luX2RhdGFiYXNlSWQgPSBpbl9kYXRhYmFzZUlkOwog
ICAgIE5TU3RyaW5nICpvX2luX3F1ZXJ5ID0gaW5fcXVlcnk7Ci0KICAgICBbbV9kZWxlZ2F0ZSBl
eGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JD
YWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrIGRhdGFiYXNlSWQ6b19pbl9k
YXRhYmFzZUlkIHF1ZXJ5Om9faW5fcXVlcnldOwogfQogCi12b2lkIE9iakNJbnNwZWN0b3JEYXRh
YmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVl
cyhsb25nIHJlcXVlc3RJZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVl
cnkpCit2b2lkIE9iakNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRl
U1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIHByb3RvY29sX2NhbGxJZCwgaW50IGlu
X2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnkpCiB7CiAgICAgaWYgKCFbbV9kZWxl
Z2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGV4ZWN1dGVTUUxBc3luY09wdGlvbmFs
UmV0dXJuVmFsdWVzV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOmRhdGFiYXNlSWQ6
cXVlcnk6KV0pIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xF
cnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEYXRh
YmFzZS5leGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcycgd2FzIG5vdCBmb3VuZCJf
cyk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocHJv
dG9jb2xfY2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRGF0YWJh
c2UuZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMnIHdhcyBub3QgZm91bmQiX3Mp
OwogICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcg
KmVycm9yKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJy
b3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAg
ICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9j
YWxsSWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwogICAgICAgICBi
YWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgIH07CiAKLSAgICBp
ZCBzdWNjZXNzQ2FsbGJhY2sgPSBeKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKmNvbHVtbk5hbWVz
LCBOU1N0cmluZyAqKm5vdGVzLCBkb3VibGUgKnRpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2Jq
ZWN0ICoqdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKipwYXlsb2FkLCBpbnQgKmRhdGFi
YXNlSWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKipzcWxFcnJvciwgVGVzdFByb3RvY29s
RGF0YWJhc2VQcmltYXJ5Q29sb3JzICpzY3JlZW5Db2xvciwgTlNBcnJheS8qPE5TU3RyaW5nPiov
ICoqYWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY09w
dGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvciAqcHJpbnRDb2xvcikgewotICAgICAgICBSZWY8
SlNPTjo6T2JqZWN0PiByZXN1bHRPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAg
ICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIoY29sdW1uTmFt
ZXMsIEAiY29sdW1uTmFtZXMiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BU
SU9OQUxfUEFSQU1FVEVSKG5vdGVzLCBAIm5vdGVzIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUih2YWx1ZXMsIEAidmFsdWVzIik7Ci0gICAgICAg
IFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihwYXlsb2FkLCBAInBh
eWxvYWQiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1F
VEVSKHNxbEVycm9yLCBAInNxbEVycm9yIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1Jf
QkFEX09QVElPTkFMX1BBUkFNRVRFUihhbHRlcm5hdGVDb2xvcnMsIEAiYWx0ZXJuYXRlQ29sb3Jz
Iik7Ci0gICAgICAgIGlmIChjb2x1bW5OYW1lcykKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+
c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCB0b0pTT05TdHJpbmdBcnJheSgqY29sdW1uTmFtZXMp
KTsKLSAgICAgICAgaWYgKG5vdGVzKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJp
bmcoIm5vdGVzIl9zLCAqbm90ZXMpOwotICAgICAgICBpZiAodGltZXN0YW1wKQotICAgICAgICAg
ICAgcmVzdWx0T2JqZWN0LT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywgKnRpbWVzdGFtcCk7Ci0g
ICAgICAgIGlmICh2YWx1ZXMpCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldE9iamVjdCgi
dmFsdWVzIl9zLCBbKnZhbHVlcyB0b0pTT05PYmplY3RdKTsKLSAgICAgICAgaWYgKHBheWxvYWQp
Ci0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCBbKnBheWxv
YWQgdG9KU09OT2JqZWN0XSk7Ci0gICAgICAgIGlmIChkYXRhYmFzZUlkKQotICAgICAgICAgICAg
cmVzdWx0T2JqZWN0LT5zZXRJbnRlZ2VyKCJkYXRhYmFzZUlkIl9zLCAqZGF0YWJhc2VJZCk7Ci0g
ICAgICAgIGlmIChzcWxFcnJvcikKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0T2JqZWN0
KCJzcWxFcnJvciJfcywgWypzcWxFcnJvciB0b0pTT05PYmplY3RdKTsKLSAgICAgICAgaWYgKHNj
cmVlbkNvbG9yKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoInNjcmVlbkNv
bG9yIl9zLCB0b1Byb3RvY29sU3RyaW5nKCpzY3JlZW5Db2xvcikpOwotICAgICAgICBpZiAoYWx0
ZXJuYXRlQ29sb3JzKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRBcnJheSgiYWx0ZXJu
YXRlQ29sb3JzIl9zLCB0b0pTT05TdHJpbmdBcnJheSgqYWx0ZXJuYXRlQ29sb3JzKSk7Ci0gICAg
ICAgIGlmIChwcmludENvbG9yKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmco
InByaW50Q29sb3IiX3MsIHRvUHJvdG9jb2xTdHJpbmcoKnByaW50Q29sb3IpKTsKLSAgICAgICAg
YmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1
bHRPYmplY3QpLCBmYWxzZSk7CisgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXihOU0FycmF5Lyo8
TlNTdHJpbmc+Ki8gKipvdXRfb3B0X2NvbHVtbk5hbWVzLCBOU1N0cmluZyAqKm91dF9vcHRfbm90
ZXMsIGRvdWJsZSAqb3V0X29wdF90aW1lc3RhbXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqKm91
dF9vcHRfdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKipvdXRfb3B0X3BheWxvYWQsIGlu
dCAqb3V0X29wdF9kYXRhYmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoqb3V0X29w
dF9zcWxFcnJvciwgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzICpvdXRfb3B0X3Nj
cmVlbkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKipvdXRfb3B0X2FsdGVybmF0ZUNvbG9y
cywgVGVzdFByb3RvY29sRGF0YWJhc2UoYW5vbnltb3VzKSAqb3V0X29wdF9wcmludENvbG9yKSB7
CisgICAgICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0
ZSgpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIo
b3V0X29wdF9jb2x1bW5OYW1lcywgQCJjb2x1bW5OYW1lcyIpOworICAgICAgICBUSFJPV19FWENF
UFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIob3V0X29wdF9ub3RlcywgQCJub3RlcyIp
OworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIob3V0
X29wdF92YWx1ZXMsIEAidmFsdWVzIik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFE
X09QVElPTkFMX1BBUkFNRVRFUihvdXRfb3B0X3BheWxvYWQsIEAicGF5bG9hZCIpOworICAgICAg
ICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIob3V0X29wdF9zcWxF
cnJvciwgQCJzcWxFcnJvciIpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJ
T05BTF9QQVJBTUVURVIob3V0X29wdF9hbHRlcm5hdGVDb2xvcnMsIEAiYWx0ZXJuYXRlQ29sb3Jz
Iik7CisgICAgICAgIGlmICghIW91dF9vcHRfY29sdW1uTmFtZXMpCisgICAgICAgICAgICBwcm90
b2NvbF9qc29uTWVzc2FnZS0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCB0b0pTT05TdHJpbmdB
cnJheSgqb3V0X29wdF9jb2x1bW5OYW1lcykpOworICAgICAgICBpZiAoISFvdXRfb3B0X25vdGVz
KQorICAgICAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygibm90ZXMiX3Ms
ICpvdXRfb3B0X25vdGVzKTsKKyAgICAgICAgaWYgKCEhb3V0X29wdF90aW1lc3RhbXApCisgICAg
ICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsICpv
dXRfb3B0X3RpbWVzdGFtcCk7CisgICAgICAgIGlmICghIW91dF9vcHRfdmFsdWVzKQorICAgICAg
ICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldE9iamVjdCgidmFsdWVzIl9zLCBbKm91dF9v
cHRfdmFsdWVzIHRvSlNPTk9iamVjdF0pOworICAgICAgICBpZiAoISFvdXRfb3B0X3BheWxvYWQp
CisgICAgICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0VmFsdWUoInBheWxvYWQiX3Ms
IFsqb3V0X29wdF9wYXlsb2FkIHRvSlNPTk9iamVjdF0pOworICAgICAgICBpZiAoISFvdXRfb3B0
X2RhdGFiYXNlSWQpCisgICAgICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0SW50ZWdl
cigiZGF0YWJhc2VJZCJfcywgKm91dF9vcHRfZGF0YWJhc2VJZCk7CisgICAgICAgIGlmICghIW91
dF9vcHRfc3FsRXJyb3IpCisgICAgICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0T2Jq
ZWN0KCJzcWxFcnJvciJfcywgWypvdXRfb3B0X3NxbEVycm9yIHRvSlNPTk9iamVjdF0pOworICAg
ICAgICBpZiAoISFvdXRfb3B0X3NjcmVlbkNvbG9yKQorICAgICAgICAgICAgcHJvdG9jb2xfanNv
bk1lc3NhZ2UtPnNldFN0cmluZygic2NyZWVuQ29sb3IiX3MsIHRvUHJvdG9jb2xTdHJpbmcoKm91
dF9vcHRfc2NyZWVuQ29sb3IpKTsKKyAgICAgICAgaWYgKCEhb3V0X29wdF9hbHRlcm5hdGVDb2xv
cnMpCisgICAgICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0QXJyYXkoImFsdGVybmF0
ZUNvbG9ycyJfcywgdG9KU09OU3RyaW5nQXJyYXkoKm91dF9vcHRfYWx0ZXJuYXRlQ29sb3JzKSk7
CisgICAgICAgIGlmICghIW91dF9vcHRfcHJpbnRDb2xvcikKKyAgICAgICAgICAgIHByb3RvY29s
X2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoInByaW50Q29sb3IiX3MsIHRvUHJvdG9jb2xTdHJpbmco
Km91dF9vcHRfcHJpbnRDb2xvcikpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5k
UmVzcG9uc2UocHJvdG9jb2xfY2FsbElkLCBXVEZNb3ZlKHByb3RvY29sX2pzb25NZXNzYWdlKSwg
ZmFsc2UpOwogICAgIH07CiAKICAgICBpbnQgb19pbl9kYXRhYmFzZUlkID0gaW5fZGF0YWJhc2VJ
ZDsKICAgICBOU1N0cmluZyAqb19pbl9xdWVyeSA9IGluX3F1ZXJ5OwotCiAgICAgW21fZGVsZWdh
dGUgZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNXaXRoRXJyb3JDYWxsYmFjazpl
cnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2sgZGF0YWJhc2VJZDpv
X2luX2RhdGFiYXNlSWQgcXVlcnk6b19pbl9xdWVyeV07CiB9CiAKLXZvaWQgT2JqQ0luc3BlY3Rv
ckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxTeW5jKGxvbmcgcmVxdWVzdElk
LCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSkKK3ZvaWQgT2JqQ0lu
c3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxTeW5jKGxvbmcgcHJv
dG9jb2xfY2FsbElkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSkK
IHsKICAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoZXhl
Y3V0ZVNRTFN5bmNXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6ZGF0YWJhc2VJZDpx
dWVyeTopXSkgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVy
cm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RhdGFi
YXNlLmV4ZWN1dGVTUUxTeW5jJyB3YXMgbm90IGZvdW5kIl9zKTsKKyAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxsSWQsIEJhY2tlbmRE
aXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEYXRhYmFzZS5leGVjdXRlU1FMU3luYycgd2Fz
IG5vdCBmb3VuZCJfcyk7CiAgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5n
RXJyb3JzKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZCBlcnJvckNhbGxiYWNr
ID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVw
b3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJv
ciwgZXJyb3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVy
cm9yKHByb3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJv
cik7CiAgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CiAg
ICAgfTsKIAotICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF4oTlNBcnJheS8qPE5TU3RyaW5nPiov
ICpjb2x1bW5OYW1lcywgTlNTdHJpbmcgKm5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBSV0lQcm90
b2NvbEpTT05PYmplY3QgKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpwYXlsb2FkLCBp
bnQgZGF0YWJhc2VJZCwgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqc3FsRXJyb3IsIE5TQXJy
YXkvKjxOU1N0cmluZz4qLyAqYWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVBy
aW1hcnlDb2xvcnMgc2NyZWVuQ29sb3IsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5
bmNQcmludENvbG9yIHByaW50Q29sb3IpIHsKLSAgICAgICAgUmVmPEpTT046Ok9iamVjdD4gcmVz
dWx0T2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICAgICAgVEhST1dfRVhDRVBU
SU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoY29sdW1uTmFtZXMsIEAiY29sdW1uTmFtZXMiKTsK
LSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIobm90ZXMsIEAi
bm90ZXMiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIo
dmFsdWVzLCBAInZhbHVlcyIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVE
X1BBUkFNRVRFUihwYXlsb2FkLCBAInBheWxvYWQiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9O
X0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoc3FsRXJyb3IsIEAic3FsRXJyb3IiKTsKLSAgICAgICAg
VEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoYWx0ZXJuYXRlQ29sb3JzLCBA
ImFsdGVybmF0ZUNvbG9ycyIpOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldEFycmF5KCJjb2x1
bW5OYW1lcyJfcywgdG9KU09OU3RyaW5nQXJyYXkoY29sdW1uTmFtZXMpKTsKLSAgICAgICAgcmVz
dWx0T2JqZWN0LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCBub3Rlcyk7Ci0gICAgICAgIHJlc3VsdE9i
amVjdC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsIHRpbWVzdGFtcCk7Ci0gICAgICAgIHJlc3Vs
dE9iamVjdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIFt2YWx1ZXMgdG9KU09OT2JqZWN0XSk7Ci0g
ICAgICAgIHJlc3VsdE9iamVjdC0+c2V0VmFsdWUoInBheWxvYWQiX3MsIFtwYXlsb2FkIHRvSlNP
Tk9iamVjdF0pOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldEludGVnZXIoImRhdGFiYXNlSWQi
X3MsIGRhdGFiYXNlSWQpOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldE9iamVjdCgic3FsRXJy
b3IiX3MsIFtzcWxFcnJvciB0b0pTT05PYmplY3RdKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5z
ZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCB0b0pTT05TdHJpbmdBcnJheShhbHRlcm5hdGVD
b2xvcnMpKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9z
LCB0b1Byb3RvY29sU3RyaW5nKHNjcmVlbkNvbG9yKSk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+
c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCB0b1Byb3RvY29sU3RyaW5nKHByaW50Q29sb3IpKTsK
LSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RG
TW92ZShyZXN1bHRPYmplY3QpLCBmYWxzZSk7CisgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXihO
U0FycmF5Lyo8TlNTdHJpbmc+Ki8gKm91dF9jb2x1bW5OYW1lcywgTlNTdHJpbmcgKm91dF9ub3Rl
cywgZG91YmxlIG91dF90aW1lc3RhbXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqb3V0X3ZhbHVl
cywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpvdXRfcGF5bG9hZCwgaW50IG91dF9kYXRhYmFzZUlk
LCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICpvdXRfc3FsRXJyb3IsIE5TQXJyYXkvKjxOU1N0
cmluZz4qLyAqb3V0X2FsdGVybmF0ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5
Q29sb3JzIG91dF9zY3JlZW5Db2xvciwgVGVzdFByb3RvY29sRGF0YWJhc2UoYW5vbnltb3VzKSBv
dXRfcHJpbnRDb2xvcikgeworICAgICAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNP
Tjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJF
RF9QQVJBTUVURVIob3V0X2NvbHVtbk5hbWVzLCBAImNvbHVtbk5hbWVzIik7CisgICAgICAgIFRI
Uk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKG91dF9ub3RlcywgQCJub3RlcyIp
OworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihvdXRfdmFs
dWVzLCBAInZhbHVlcyIpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BB
UkFNRVRFUihvdXRfcGF5bG9hZCwgQCJwYXlsb2FkIik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKG91dF9zcWxFcnJvciwgQCJzcWxFcnJvciIpOworICAg
ICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihvdXRfYWx0ZXJuYXRl
Q29sb3JzLCBAImFsdGVybmF0ZUNvbG9ycyIpOworICAgICAgICBwcm90b2NvbF9qc29uTWVzc2Fn
ZS0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCB0b0pTT05TdHJpbmdBcnJheShvdXRfY29sdW1u
TmFtZXMpKTsKKyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygibm90ZXMi
X3MsIG91dF9ub3Rlcyk7CisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXREb3VibGUo
InRpbWVzdGFtcCJfcywgb3V0X3RpbWVzdGFtcCk7CisgICAgICAgIHByb3RvY29sX2pzb25NZXNz
YWdlLT5zZXRPYmplY3QoInZhbHVlcyJfcywgW291dF92YWx1ZXMgdG9KU09OT2JqZWN0XSk7Cisg
ICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgW291dF9w
YXlsb2FkIHRvSlNPTk9iamVjdF0pOworICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0
SW50ZWdlcigiZGF0YWJhc2VJZCJfcywgb3V0X2RhdGFiYXNlSWQpOworICAgICAgICBwcm90b2Nv
bF9qc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJzcWxFcnJvciJfcywgW291dF9zcWxFcnJvciB0b0pT
T05PYmplY3RdKTsKKyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldEFycmF5KCJhbHRl
cm5hdGVDb2xvcnMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KG91dF9hbHRlcm5hdGVDb2xvcnMpKTsK
KyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygic2NyZWVuQ29sb3IiX3Ms
IHRvUHJvdG9jb2xTdHJpbmcob3V0X3NjcmVlbkNvbG9yKSk7CisgICAgICAgIHByb3RvY29sX2pz
b25NZXNzYWdlLT5zZXRTdHJpbmcoInByaW50Q29sb3IiX3MsIHRvUHJvdG9jb2xTdHJpbmcob3V0
X3ByaW50Q29sb3IpKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNl
KHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSksIGZhbHNlKTsK
ICAgICB9OwogCiAgICAgaW50IG9faW5fZGF0YWJhc2VJZCA9IGluX2RhdGFiYXNlSWQ7CiAgICAg
TlNTdHJpbmcgKm9faW5fcXVlcnkgPSBpbl9xdWVyeTsKLQogICAgIFttX2RlbGVnYXRlIGV4ZWN1
dGVTUUxTeW5jV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6
c3VjY2Vzc0NhbGxiYWNrIGRhdGFiYXNlSWQ6b19pbl9kYXRhYmFzZUlkIHF1ZXJ5Om9faW5fcXVl
cnldOwogfQogCi12b2lkIE9iakNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpl
eGVjdXRlU1FMQXN5bmMobG9uZyByZXF1ZXN0SWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBT
dHJpbmcmIGluX3F1ZXJ5KQordm9pZCBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0
Y2hlcjo6ZXhlY3V0ZVNRTEFzeW5jKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBpbnQgaW5fZGF0YWJh
c2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSkKIHsKICAgICBpZiAoIVttX2RlbGVnYXRlIHJl
c3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoZXhlY3V0ZVNRTEFzeW5jV2l0aEVycm9yQ2FsbGJh
Y2s6c3VjY2Vzc0NhbGxiYWNrOmRhdGFiYXNlSWQ6cXVlcnk6KV0pIHsKLSAgICAgICAgYmFja2Vu
ZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNw
YXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEYXRhYmFzZS5leGVjdXRlU1FMQXN5bmMnIHdhcyBu
b3QgZm91bmQiX3MpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2Nv
bEVycm9yKHByb3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5k
LCAiJ0RhdGFiYXNlLmV4ZWN1dGVTUUxBc3luYycgd2FzIG5vdCBmb3VuZCJfcyk7CiAgICAgICAg
IGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKICAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsK
LSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0
SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgICAgICBiYWNr
ZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHByb3RvY29sX2NhbGxJZCwgQmFj
a2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CiAgICAgICAgIGJhY2tlbmREaXNw
YXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgfTsKIAotICAgIGlkIHN1Y2Nlc3ND
YWxsYmFjayA9IF4oTlNBcnJheS8qPE5TU3RyaW5nPiovICpjb2x1bW5OYW1lcywgTlNTdHJpbmcg
Km5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKnZhbHVlcywg
UldJUHJvdG9jb2xKU09OT2JqZWN0ICpwYXlsb2FkLCBpbnQgZGF0YWJhc2VJZCwgVGVzdFByb3Rv
Y29sRGF0YWJhc2VFcnJvciAqc3FsRXJyb3IsIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNv
bG9ycyBzY3JlZW5Db2xvciwgTlNBcnJheS8qPE5TU3RyaW5nPiovICphbHRlcm5hdGVDb2xvcnMs
IFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jUHJpbnRDb2xvciBwcmludENvbG9y
KSB7Ci0gICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdE9iamVjdCA9IEpTT046Ok9iamVj
dDo6Y3JlYXRlKCk7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1F
VEVSKGNvbHVtbk5hbWVzLCBAImNvbHVtbk5hbWVzIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKG5vdGVzLCBAIm5vdGVzIik7Ci0gICAgICAgIFRIUk9X
X0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKHZhbHVlcywgQCJ2YWx1ZXMiKTsKLSAg
ICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIocGF5bG9hZCwgQCJw
YXlsb2FkIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVS
KHNxbEVycm9yLCBAInNxbEVycm9yIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVR
VUlSRURfUEFSQU1FVEVSKGFsdGVybmF0ZUNvbG9ycywgQCJhbHRlcm5hdGVDb2xvcnMiKTsKLSAg
ICAgICAgcmVzdWx0T2JqZWN0LT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIHRvSlNPTlN0cmlu
Z0FycmF5KGNvbHVtbk5hbWVzKSk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKCJu
b3RlcyJfcywgbm90ZXMpOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldERvdWJsZSgidGltZXN0
YW1wIl9zLCB0aW1lc3RhbXApOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldE9iamVjdCgidmFs
dWVzIl9zLCBbdmFsdWVzIHRvSlNPTk9iamVjdF0pOwotICAgICAgICByZXN1bHRPYmplY3QtPnNl
dFZhbHVlKCJwYXlsb2FkIl9zLCBbcGF5bG9hZCB0b0pTT05PYmplY3RdKTsKLSAgICAgICAgcmVz
dWx0T2JqZWN0LT5zZXRJbnRlZ2VyKCJkYXRhYmFzZUlkIl9zLCBkYXRhYmFzZUlkKTsKLSAgICAg
ICAgcmVzdWx0T2JqZWN0LT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBbc3FsRXJyb3IgdG9KU09O
T2JqZWN0XSk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJf
cywgdG9Qcm90b2NvbFN0cmluZyhzY3JlZW5Db2xvcikpOwotICAgICAgICByZXN1bHRPYmplY3Qt
PnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KGFsdGVybmF0
ZUNvbG9ycykpOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZygicHJpbnRDb2xvciJf
cywgdG9Qcm90b2NvbFN0cmluZyhwcmludENvbG9yKSk7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRj
aGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0T2JqZWN0KSwgZmFs
c2UpOworICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF4oTlNBcnJheS8qPE5TU3RyaW5nPiovICpv
dXRfY29sdW1uTmFtZXMsIE5TU3RyaW5nICpvdXRfbm90ZXMsIGRvdWJsZSBvdXRfdGltZXN0YW1w
LCBSV0lQcm90b2NvbEpTT05PYmplY3QgKm91dF92YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVj
dCAqb3V0X3BheWxvYWQsIGludCBvdXRfZGF0YWJhc2VJZCwgVGVzdFByb3RvY29sRGF0YWJhc2VF
cnJvciAqb3V0X3NxbEVycm9yLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgb3V0
X3NjcmVlbkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKm91dF9hbHRlcm5hdGVDb2xvcnMs
IFRlc3RQcm90b2NvbERhdGFiYXNlKGFub255bW91cykgb3V0X3ByaW50Q29sb3IpIHsKKyAgICAg
ICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Cisg
ICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKG91dF9jb2x1bW5O
YW1lcywgQCJjb2x1bW5OYW1lcyIpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJ
UkVEX1BBUkFNRVRFUihvdXRfbm90ZXMsIEAibm90ZXMiKTsKKyAgICAgICAgVEhST1dfRVhDRVBU
SU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIob3V0X3ZhbHVlcywgQCJ2YWx1ZXMiKTsKKyAgICAg
ICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIob3V0X3BheWxvYWQsIEAi
cGF5bG9hZCIpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRF
UihvdXRfc3FsRXJyb3IsIEAic3FsRXJyb3IiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZP
Ul9SRVFVSVJFRF9QQVJBTUVURVIob3V0X2FsdGVybmF0ZUNvbG9ycywgQCJhbHRlcm5hdGVDb2xv
cnMiKTsKKyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldEFycmF5KCJjb2x1bW5OYW1l
cyJfcywgdG9KU09OU3RyaW5nQXJyYXkob3V0X2NvbHVtbk5hbWVzKSk7CisgICAgICAgIHByb3Rv
Y29sX2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm5vdGVzIl9zLCBvdXRfbm90ZXMpOworICAgICAg
ICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsIG91dF90aW1l
c3RhbXApOworICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJ2YWx1ZXMi
X3MsIFtvdXRfdmFsdWVzIHRvSlNPTk9iamVjdF0pOworICAgICAgICBwcm90b2NvbF9qc29uTWVz
c2FnZS0+c2V0VmFsdWUoInBheWxvYWQiX3MsIFtvdXRfcGF5bG9hZCB0b0pTT05PYmplY3RdKTsK
KyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldEludGVnZXIoImRhdGFiYXNlSWQiX3Ms
IG91dF9kYXRhYmFzZUlkKTsKKyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldE9iamVj
dCgic3FsRXJyb3IiX3MsIFtvdXRfc3FsRXJyb3IgdG9KU09OT2JqZWN0XSk7CisgICAgICAgIHBy
b3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCB0b1Byb3RvY29s
U3RyaW5nKG91dF9zY3JlZW5Db2xvcikpOworICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+
c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywgdG9KU09OU3RyaW5nQXJyYXkob3V0X2FsdGVy
bmF0ZUNvbG9ycykpOworICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJw
cmludENvbG9yIl9zLCB0b1Byb3RvY29sU3RyaW5nKG91dF9wcmludENvbG9yKSk7CisgICAgICAg
IGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShwcm90b2NvbF9jYWxsSWQsIFdURk1v
dmUocHJvdG9jb2xfanNvbk1lc3NhZ2UpLCBmYWxzZSk7CiAgICAgfTsKIAogICAgIGludCBvX2lu
X2RhdGFiYXNlSWQgPSBpbl9kYXRhYmFzZUlkOwogICAgIE5TU3RyaW5nICpvX2luX3F1ZXJ5ID0g
aW5fcXVlcnk7Ci0KICAgICBbbV9kZWxlZ2F0ZSBleGVjdXRlU1FMQXN5bmNXaXRoRXJyb3JDYWxs
YmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2sgZGF0YWJh
c2VJZDpvX2luX2RhdGFiYXNlSWQgcXVlcnk6b19pbl9xdWVyeV07CiB9CiAKQEAgLTEzNDYsMTAg
KzEzMTQsMTAgQEAgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCiAKIEBw
cm90b2NvbCBUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkhhbmRsZXIgPE5TT2JqZWN0PgogQG9w
dGlvbmFsCi0tICh2b2lkKWV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNXaXRoRXJy
b3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vz
c0NhbGxiYWNrOih2b2lkKF4pKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKmNvbHVtbk5hbWVzLCBO
U1N0cmluZyAqKm5vdGVzLCBkb3VibGUgKnRpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0
ICoqdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKipwYXlsb2FkLCBpbnQgKmRhdGFiYXNl
SWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKipzcWxFcnJvciwgVGVzdFByb3RvY29sRGF0
YWJhc2VQcmltYXJ5Q29sb3JzICpzY3JlZW5Db2xvciwgTlNBcnJheS8qPE5TU3RyaW5nPiovICoq
YWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jT3B0aW9u
YWxSZXR1cm5WYWx1ZXNQcmludENvbG9yICpwcmludENvbG9yKSlzdWNjZXNzQ2FsbGJhY2sgZGF0
YWJhc2VJZDooaW50KWRhdGFiYXNlSWQgcXVlcnk6KE5TU3RyaW5nICopcXVlcnk7Ci0tICh2b2lk
KWV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzV2l0aEVycm9yQ2FsbGJhY2s6KHZv
aWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9p
ZCheKShOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKipjb2x1bW5OYW1lcywgTlNTdHJpbmcgKipub3Rl
cywgZG91YmxlICp0aW1lc3RhbXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqKnZhbHVlcywgUldJ
UHJvdG9jb2xKU09OT2JqZWN0ICoqcGF5bG9hZCwgaW50ICpkYXRhYmFzZUlkLCBUZXN0UHJvdG9j
b2xEYXRhYmFzZUVycm9yICoqc3FsRXJyb3IsIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNv
bG9ycyAqc2NyZWVuQ29sb3IsIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKmFsdGVybmF0ZUNvbG9y
cywgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVl
c1ByaW50Q29sb3IgKnByaW50Q29sb3IpKXN1Y2Nlc3NDYWxsYmFjayBkYXRhYmFzZUlkOihpbnQp
ZGF0YWJhc2VJZCBxdWVyeTooTlNTdHJpbmcgKilxdWVyeTsKLS0gKHZvaWQpZXhlY3V0ZVNRTFN5
bmNXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJh
Y2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqY29sdW1u
TmFtZXMsIE5TU3RyaW5nICpub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09O
T2JqZWN0ICp2YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqcGF5bG9hZCwgaW50IGRhdGFi
YXNlSWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKnNxbEVycm9yLCBOU0FycmF5Lyo8TlNT
dHJpbmc+Ki8gKmFsdGVybmF0ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29s
b3JzIHNjcmVlbkNvbG9yLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jUHJpbnRD
b2xvciBwcmludENvbG9yKSlzdWNjZXNzQ2FsbGJhY2sgZGF0YWJhc2VJZDooaW50KWRhdGFiYXNl
SWQgcXVlcnk6KE5TU3RyaW5nICopcXVlcnk7Ci0tICh2b2lkKWV4ZWN1dGVTUUxBc3luY1dpdGhF
cnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNj
ZXNzQ2FsbGJhY2s6KHZvaWQoXikoTlNBcnJheS8qPE5TU3RyaW5nPiovICpjb2x1bW5OYW1lcywg
TlNTdHJpbmcgKm5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05PYmplY3Qg
KnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpwYXlsb2FkLCBpbnQgZGF0YWJhc2VJZCwg
VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqc3FsRXJyb3IsIFRlc3RQcm90b2NvbERhdGFiYXNl
UHJpbWFyeUNvbG9ycyBzY3JlZW5Db2xvciwgTlNBcnJheS8qPE5TU3RyaW5nPiovICphbHRlcm5h
dGVDb2xvcnMsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jUHJpbnRDb2xvciBw
cmludENvbG9yKSlzdWNjZXNzQ2FsbGJhY2sgZGF0YWJhc2VJZDooaW50KWRhdGFiYXNlSWQgcXVl
cnk6KE5TU3RyaW5nICopcXVlcnk7CistICh2b2lkKWV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1
cm5WYWx1ZXNXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9y
Q2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAq
KmNvbHVtbk5hbWVzLCBOU1N0cmluZyAqKm5vdGVzLCBkb3VibGUgKnRpbWVzdGFtcCwgUldJUHJv
dG9jb2xKU09OT2JqZWN0ICoqdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKipwYXlsb2Fk
LCBpbnQgKmRhdGFiYXNlSWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKipzcWxFcnJvciwg
VGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzICpzY3JlZW5Db2xvciwgTlNBcnJheS8q
PE5TU3RyaW5nPiovICoqYWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZShhbm9u
eW1vdXMpICpwcmludENvbG9yKSlzdWNjZXNzQ2FsbGJhY2sgZGF0YWJhc2VJZDooaW50KWRhdGFi
YXNlSWQgcXVlcnk6KE5TU3RyaW5nICopcXVlcnk7CistICh2b2lkKWV4ZWN1dGVTUUxBc3luY09w
dGlvbmFsUmV0dXJuVmFsdWVzV2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVy
cm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKShOU0FycmF5Lyo8TlNT
dHJpbmc+Ki8gKipjb2x1bW5OYW1lcywgTlNTdHJpbmcgKipub3RlcywgZG91YmxlICp0aW1lc3Rh
bXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0
ICoqcGF5bG9hZCwgaW50ICpkYXRhYmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoq
c3FsRXJyb3IsIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyAqc2NyZWVuQ29sb3Is
IE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKmFsdGVybmF0ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0
YWJhc2UoYW5vbnltb3VzKSAqcHJpbnRDb2xvcikpc3VjY2Vzc0NhbGxiYWNrIGRhdGFiYXNlSWQ6
KGludClkYXRhYmFzZUlkIHF1ZXJ5OihOU1N0cmluZyAqKXF1ZXJ5OworLSAodm9pZClleGVjdXRl
U1FMU3luY1dpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JD
YWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikoTlNBcnJheS8qPE5TU3RyaW5nPiovICpj
b2x1bW5OYW1lcywgTlNTdHJpbmcgKm5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBSV0lQcm90b2Nv
bEpTT05PYmplY3QgKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpwYXlsb2FkLCBpbnQg
ZGF0YWJhc2VJZCwgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqc3FsRXJyb3IsIE5TQXJyYXkv
KjxOU1N0cmluZz4qLyAqYWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1h
cnlDb2xvcnMgc2NyZWVuQ29sb3IsIFRlc3RQcm90b2NvbERhdGFiYXNlKGFub255bW91cykgcHJp
bnRDb2xvcikpc3VjY2Vzc0NhbGxiYWNrIGRhdGFiYXNlSWQ6KGludClkYXRhYmFzZUlkIHF1ZXJ5
OihOU1N0cmluZyAqKXF1ZXJ5OworLSAodm9pZClleGVjdXRlU1FMQXN5bmNXaXRoRXJyb3JDYWxs
YmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxi
YWNrOih2b2lkKF4pKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqY29sdW1uTmFtZXMsIE5TU3RyaW5n
ICpub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0ICp2YWx1ZXMs
IFJXSVByb3RvY29sSlNPTk9iamVjdCAqcGF5bG9hZCwgaW50IGRhdGFiYXNlSWQsIFRlc3RQcm90
b2NvbERhdGFiYXNlRXJyb3IgKnNxbEVycm9yLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlD
b2xvcnMgc2NyZWVuQ29sb3IsIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqYWx0ZXJuYXRlQ29sb3Jz
LCBUZXN0UHJvdG9jb2xEYXRhYmFzZShhbm9ueW1vdXMpIHByaW50Q29sb3IpKXN1Y2Nlc3NDYWxs
YmFjayBkYXRhYmFzZUlkOihpbnQpZGF0YWJhc2VJZCBxdWVyeTooTlNTdHJpbmcgKilxdWVyeTsK
IEBlbmQKIAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1w
YXJhbWV0ZXJzLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2NvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4t
cGFyYW1ldGVycy5qc29uLXJlc3VsdAppbmRleCAxZjJmNDVkNzRjMzkzOTExMTIzNmE4NjdkN2Zm
ZmQyNDBlNmQ5OWM1Li4zZTQ0Mjc0ODk0YzJlZDA2NGVlOGQxOTllMWEwZTRjMTE0NGFiZmNlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
ZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpz
b24tcmVzdWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9leHBlY3RlZC9jb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRl
cnMuanNvbi1yZXN1bHQKQEAgLTcwLDcgKzcwLDcgQEAgSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0
ZURvbWFpbigiRGF0YWJhc2UiLCBudWxsKTsKIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJO
QVRFX0RJU1BBVENIRVJTKQogCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKKyNpbmNs
dWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JGcm9udGVuZFJvdXRlci5oPgogCkBAIC04OCw4ICs4OCw4IEBAIHByaXZhdGU6CiBjbGFz
cyBBbHRlcm5hdGVEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyIDogcHVibGljIEFsdGVybmF0ZUJh
Y2tlbmREaXNwYXRjaGVyIHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5BbHRlcm5hdGVEYXRhYmFz
ZUJhY2tlbmREaXNwYXRjaGVyKCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVBbGxPcHRp
b25hbFBhcmFtZXRlcnMobG9uZyBjYWxsSWQsIGNvbnN0IEpTT046OkFycmF5KiBpbl9jb2x1bW5O
YW1lcywgY29uc3QgU3RyaW5nKiBpbl9ub3RlcywgY29uc3QgZG91YmxlKiBpbl90aW1lc3RhbXAs
IGNvbnN0IEpTT046Ok9iamVjdCogaW5fdmFsdWVzLCBjb25zdCBKU09OOjpWYWx1ZSogaW5fcGF5
bG9hZCwgY29uc3QgaW50KiBpbl9kYXRhYmFzZUlkLCBjb25zdCBKU09OOjpPYmplY3QqIGluX3Nx
bEVycm9yLCBjb25zdCBTdHJpbmcqIGluX3NjcmVlbkNvbG9yLCBjb25zdCBKU09OOjpBcnJheSog
aW5fYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcqIGluX3ByaW50Q29sb3IpID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgY2FsbElkLCBj
b25zdCBKU09OOjpBcnJheSYgaW5fY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgaW5fbm90ZXMs
IGRvdWJsZSBpbl90aW1lc3RhbXAsIGNvbnN0IEpTT046Ok9iamVjdCYgaW5fdmFsdWVzLCBKU09O
OjpWYWx1ZSBpbl9wYXlsb2FkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgSlNPTjo6T2JqZWN0
JiBpbl9zcWxFcnJvciwgY29uc3QgU3RyaW5nJiBpbl9zY3JlZW5Db2xvciwgY29uc3QgSlNPTjo6
QXJyYXkmIGluX2FsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nJiBpbl9wcmludENvbG9yKSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMobG9uZyBw
cm90b2NvbF9jYWxsSWQsIFJlZlB0cjxKU09OOjpBcnJheT4mJiBvcHRfY29sdW1uTmFtZXMsIGNv
bnN0IFN0cmluZyYgb3B0X25vdGVzLCBPcHRpb25hbDxkb3VibGU+JiYgb3B0X3RpbWVzdGFtcCwg
UmVmUHRyPEpTT046Ok9iamVjdD4mJiBvcHRfdmFsdWVzLCBSZWZQdHI8SlNPTjo6VmFsdWU+JiYg
b3B0X3BheWxvYWQsIE9wdGlvbmFsPGludD4mJiBvcHRfZGF0YWJhc2VJZCwgUmVmUHRyPEpTT046
Ok9iamVjdD4mJiBvcHRfc3FsRXJyb3IsIGNvbnN0IFN0cmluZyYgb3B0X3NjcmVlbkNvbG9yLCBS
ZWZQdHI8SlNPTjo6QXJyYXk+JiYgb3B0X2FsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nJiBv
cHRfcHJpbnRDb2xvcikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlTm9PcHRpb25hbFBh
cmFtZXRlcnMobG9uZyBwcm90b2NvbF9jYWxsSWQsIFJlZjxKU09OOjpBcnJheT4mJiBjb2x1bW5O
YW1lcywgY29uc3QgU3RyaW5nJiBub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgUmVmPEpTT046Ok9i
amVjdD4mJiB2YWx1ZXMsIFJlZjxKU09OOjpWYWx1ZT4mJiBwYXlsb2FkLCBpbnQgZGF0YWJhc2VJ
ZCwgUmVmPEpTT046Ok9iamVjdD4mJiBzcWxFcnJvciwgY29uc3QgU3RyaW5nJiBzY3JlZW5Db2xv
ciwgUmVmPEpTT046OkFycmF5PiYmIGFsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nJiBwcmlu
dENvbG9yKSA9IDA7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKQEAgLTEzMSwxMSAr
MTMxLDE0IEBAIHB1YmxpYzoKIAogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2lu
Y2x1ZGUgPHR1cGxlPgorI2luY2x1ZGUgPHd0Zi9FeHBlY3RlZC5oPgorI2luY2x1ZGUgPHd0Zi9P
cHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKIAotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKIAogI2lmIEVOQUJM
RShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogY2xhc3MgQWx0ZXJuYXRlRGF0YWJh
c2VCYWNrZW5kRGlzcGF0Y2hlcjsKQEAgLTE0MywxNSArMTQ2LDggQEAgY2xhc3MgQWx0ZXJuYXRl
RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjsKIAogY2xhc3MgRGF0YWJhc2VCYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXIgewogcHVibGljOgotICAgIC8vIE5hbWVkIGFmdGVyIHBhcmFtZXRlciAncHJp
bnRDb2xvcicgd2hpbGUgZ2VuZXJhdGluZyBjb21tYW5kL2V2ZW50IGV4ZWN1dGVBbGxPcHRpb25h
bFBhcmFtZXRlcnMuCi0gICAgZW51bSBjbGFzcyBQcmludENvbG9yIHsKLSAgICAgICAgQ3lhbiA9
IDMsCi0gICAgICAgIE1hZ2VudGEgPSA0LAotICAgICAgICBZZWxsb3cgPSA1LAotICAgICAgICBC
bGFjayA9IDYsCi0gICAgfTsgLy8gZW51bSBjbGFzcyBQcmludENvbG9yCi0gICAgdmlydHVhbCB2
b2lkIGV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMoRXJyb3JTdHJpbmcmLCBjb25zdCBKU09O
OjpBcnJheSogb3B0X2luX2NvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcqIG9wdF9pbl9ub3Rlcywg
Y29uc3QgZG91YmxlKiBvcHRfaW5fdGltZXN0YW1wLCBjb25zdCBKU09OOjpPYmplY3QqIG9wdF9p
bl92YWx1ZXMsIGNvbnN0IEpTT046OlZhbHVlKiBvcHRfaW5fcGF5bG9hZCwgY29uc3QgaW50KiBv
cHRfaW5fZGF0YWJhc2VJZCwgY29uc3QgSlNPTjo6T2JqZWN0KiBvcHRfaW5fc3FsRXJyb3IsIGNv
bnN0IFN0cmluZyogb3B0X2luX3NjcmVlbkNvbG9yLCBjb25zdCBKU09OOjpBcnJheSogb3B0X2lu
X2FsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nKiBvcHRfaW5fcHJpbnRDb2xvciwgUmVmUHRy
PEpTT046OkFycmF5T2Y8U3RyaW5nPj4mIG9wdF9vdXRfY29sdW1uTmFtZXMsIE9wdGlvbmFsPFN0
cmluZz4mIG9wdF9vdXRfbm90ZXMsIE9wdGlvbmFsPGRvdWJsZT4mIG9wdF9vdXRfdGltZXN0YW1w
LCBPcHRpb25hbDxKU09OOjpPYmplY3Q+JiBvcHRfb3V0X3ZhbHVlcywgT3B0aW9uYWw8SlNPTjo6
VmFsdWU+JiBvcHRfb3V0X3BheWxvYWQsIE9wdGlvbmFsPGludD4mIG9wdF9vdXRfZGF0YWJhc2VJ
ZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4mIG9wdF9vdXRf
c3FsRXJyb3IsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzKiBv
cHRfb3V0X3NjcmVlbkNvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6
OkNvbG9yTGlzdD4mIG9wdF9vdXRfYWx0ZXJuYXRlQ29sb3JzLCBEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVySGFuZGxlcjo6UHJpbnRDb2xvciogb3B0X291dF9wcmludENvbG9yKSA9IDA7Ci0gICAg
dmlydHVhbCB2b2lkIGV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhFcnJvclN0cmluZyYsIGNv
bnN0IEpTT046OkFycmF5JiBpbl9jb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBpbl9ub3Rlcywg
ZG91YmxlIGluX3RpbWVzdGFtcCwgY29uc3QgSlNPTjo6T2JqZWN0JiBpbl92YWx1ZXMsIEpTT046
OlZhbHVlIGluX3BheWxvYWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBKU09OOjpPYmplY3Qm
IGluX3NxbEVycm9yLCBjb25zdCBTdHJpbmcmIGluX3NjcmVlbkNvbG9yLCBjb25zdCBKU09OOjpB
cnJheSYgaW5fYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcmIGluX3ByaW50Q29sb3IsIFJl
ZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+JiBvdXRfY29sdW1uTmFtZXMsIFN0cmluZyogb3V0
X25vdGVzLCBkb3VibGUqIG91dF90aW1lc3RhbXAsIEpTT046Ok9iamVjdCogb3V0X3ZhbHVlcywg
SlNPTjo6VmFsdWUqIG91dF9wYXlsb2FkLCBpbnQqIG91dF9kYXRhYmFzZUlkLCBSZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiYgb3V0X3NxbEVycm9yLCBJbnNwZWN0
b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyogb3V0X3NjcmVlbkNvbG9yLCBS
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4mIG91dF9hbHRl
cm5hdGVDb2xvcnMsIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQcmludENvbG9y
KiBvdXRfcHJpbnRDb2xvcikgPSAwOworICAgIHZpcnR1YWwgUHJvdG9jb2w6OkVycm9yU3RyaW5n
T3I8c3RkOjp0dXBsZTxSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiAvKiBvcHRfY29sdW1u
TmFtZXMgKi8sIFN0cmluZyAvKiBvcHRfbm90ZXMgKi8sIE9wdGlvbmFsPGRvdWJsZT4gLyogb3B0
X3RpbWVzdGFtcCAqLywgUmVmUHRyPEpTT046Ok9iamVjdD4gLyogb3B0X3ZhbHVlcyAqLywgUmVm
UHRyPEpTT046OlZhbHVlPiAvKiBvcHRfcGF5bG9hZCAqLywgT3B0aW9uYWw8aW50PiAvKiBvcHRf
ZGF0YWJhc2VJZCAqLywgUmVmUHRyPFByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IC8qIG9wdF9z
cWxFcnJvciAqLywgT3B0aW9uYWw8UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPiAv
KiBvcHRfc2NyZWVuQ29sb3IgKi8sIFJlZlB0cjxQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlz
dD4gLyogb3B0X2FsdGVybmF0ZUNvbG9ycyAqLywgU3RyaW5nIC8qIG9wdF9wcmludENvbG9yICov
Pj4gZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhSZWZQdHI8SlNPTjo6QXJyYXk+JiYgb3B0
X2NvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIG9wdF9ub3RlcywgT3B0aW9uYWw8ZG91YmxlPiYm
IG9wdF90aW1lc3RhbXAsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgb3B0X3ZhbHVlcywgUmVmUHRy
PEpTT046OlZhbHVlPiYmIG9wdF9wYXlsb2FkLCBPcHRpb25hbDxpbnQ+JiYgb3B0X2RhdGFiYXNl
SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgb3B0X3NxbEVycm9yLCBPcHRpb25hbDxQcm90b2Nv
bDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+JiYgb3B0X3NjcmVlbkNvbG9yLCBSZWZQdHI8SlNP
Tjo6QXJyYXk+JiYgb3B0X2FsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nJiBvcHRfcHJpbnRD
b2xvcikgPSAwOworICAgIHZpcnR1YWwgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8c3RkOjp0dXBs
ZTxSZWY8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiAvKiBjb2x1bW5OYW1lcyAqLywgU3RyaW5nIC8q
IG5vdGVzICovLCBkb3VibGUgLyogdGltZXN0YW1wICovLCBSZWY8SlNPTjo6T2JqZWN0PiAvKiB2
YWx1ZXMgKi8sIFJlZjxKU09OOjpWYWx1ZT4gLyogcGF5bG9hZCAqLywgaW50IC8qIGRhdGFiYXNl
SWQgKi8sIFJlZjxQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiAvKiBzcWxFcnJvciAqLywgUHJv
dG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzIC8qIHNjcmVlbkNvbG9yICovLCBSZWY8UHJv
dG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+IC8qIGFsdGVybmF0ZUNvbG9ycyAqLywgU3RyaW5n
IC8qIHByaW50Q29sb3IgKi8+PiBleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMoUmVmPEpTT046
OkFycmF5PiYmIGNvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIG5vdGVzLCBkb3VibGUgdGltZXN0
YW1wLCBSZWY8SlNPTjo6T2JqZWN0PiYmIHZhbHVlcywgUmVmPEpTT046OlZhbHVlPiYmIHBheWxv
YWQsIGludCBkYXRhYmFzZUlkLCBSZWY8SlNPTjo6T2JqZWN0PiYmIHNxbEVycm9yLCBQcm90b2Nv
bDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMgc2NyZWVuQ29sb3IsIFJlZjxKU09OOjpBcnJheT4m
JiBhbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyYgcHJpbnRDb2xvcikgPSAwOwogcHJvdGVj
dGVkOgogICAgIHZpcnR1YWwgfkRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCk7CiB9
OwpAQCAtMTU5LDEwICsxNTUsMTAgQEAgcHJvdGVjdGVkOgogY2xhc3MgRGF0YWJhc2VCYWNrZW5k
RGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7
CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyPiBjcmVh
dGUoQmFja2VuZERpc3BhdGNoZXImLCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciop
OwotICAgIHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9k
LCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpIGZpbmFsOworICAgIHZvaWQgZGlzcGF0Y2go
bG9uZyBwcm90b2NvbF9jYWxsSWQsIGNvbnN0IFN0cmluZyYgcHJvdG9jb2xfbWV0aG9kLCBSZWY8
SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX21lc3NhZ2UpIGZpbmFsOwogcHJpdmF0ZToKLSAgICB2
b2lkIGV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxK
U09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7Ci0gICAgdm9pZCBleGVjdXRlTm9PcHRpb25hbFBh
cmFtZXRlcnMobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVy
cyk7CisgICAgdm9pZCBleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcHJvdG9jbF9j
YWxsSWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfcGFyYW1ldGVycyk7CisgICAg
dm9pZCBleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMobG9uZyBwcm90b2NsX2NhbGxJZCwgUmVm
UHRyPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9wYXJhbWV0ZXJzKTsKICNpZiBFTkFCTEUoSU5T
UEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIHB1YmxpYzoKICAgICB2b2lkIHNldEFsdGVy
bmF0ZURpc3BhdGNoZXIoQWx0ZXJuYXRlRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciogYWx0ZXJu
YXRlRGlzcGF0Y2hlcikgeyBtX2FsdGVybmF0ZURpc3BhdGNoZXIgPSBhbHRlcm5hdGVEaXNwYXRj
aGVyOyB9CkBAIC0yMTEsOSArMjA3LDcgQEAgcHJpdmF0ZToKICNpbmNsdWRlICJUZXN0QmFja2Vu
ZERpc3BhdGNoZXJzLmgiCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9u
dGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CiAjaW5jbHVkZSA8d3Rm
L05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiAjaWYg
RU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAjaW5jbHVkZSAiVGVzdEFs
dGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgpAQCAtMjM1LDQ3ICsyMjksMzYgQEAgRGF0YWJh
c2VCYWNrZW5kRGlzcGF0Y2hlcjo6RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlz
cGF0Y2hlciYgYmFja2VuZEQKICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3Bh
dGNoZXJGb3JEb21haW4oIkRhdGFiYXNlIl9zLCB0aGlzKTsKIH0KIAotdm9pZCBEYXRhYmFzZUJh
Y2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBt
ZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkKK3ZvaWQgRGF0YWJhc2VCYWNrZW5k
RGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyBwcm90b2NvbF9jYWxsSWQsIGNvbnN0IFN0cmluZyYg
cHJvdG9jb2xfbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX21lc3NhZ2UpCiB7
CiAgICAgUmVmPERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOwogCi0g
ICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVyczsKLSAgICBtZXNzYWdlLT5nZXRPYmpl
Y3QoInBhcmFtcyJfcywgcGFyYW1ldGVycyk7CisgICAgYXV0byBwcm90b2NvbF9wYXJhbWV0ZXJz
ID0gcHJvdG9jb2xfbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3MpOwogCi0gICAgaWYgKG1l
dGhvZCA9PSAiZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyIpIHsKLSAgICAgICAgZXhlY3V0
ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykpOwor
ICAgIGlmIChwcm90b2NvbF9tZXRob2QgPT0gImV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMi
KSB7CisgICAgICAgIGV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMocHJvdG9jb2xfY2FsbElk
LCBXVEZNb3ZlKHByb3RvY29sX3BhcmFtZXRlcnMpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
LSAgICBpZiAobWV0aG9kID09ICJleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMiKSB7Ci0gICAg
ICAgIGV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1l
dGVycykpOworICAgIGlmIChwcm90b2NvbF9tZXRob2QgPT0gImV4ZWN1dGVOb09wdGlvbmFsUGFy
YW1ldGVycyIpIHsKKyAgICAgICAgZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKHByb3RvY29s
X2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9wYXJhbWV0ZXJzKSk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJh
Y2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEYXRhYmFzZS4iICsgbWV0aG9kICsg
Iicgd2FzIG5vdCBmb3VuZCIpOworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3Rv
Y29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RhdGFiYXNlLiIg
KyBwcm90b2NvbF9tZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7CiB9CiAKLXZvaWQgRGF0YWJh
c2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhsb25nIHJl
cXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKQordm9pZCBEYXRhYmFz
ZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcHJv
dG9jb2xfY2FsbElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX3BhcmFtZXRlcnMp
CiB7Ci0gICAgYm9vbCBvcHRfaW5fY29sdW1uTmFtZXNfdmFsdWVGb3VuZCA9IGZhbHNlOwotICAg
IFJlZlB0cjxKU09OOjpBcnJheT4gb3B0X2luX2NvbHVtbk5hbWVzID0gbV9iYWNrZW5kRGlzcGF0
Y2hlci0+Z2V0QXJyYXkocGFyYW1ldGVycy5nZXQoKSwgImNvbHVtbk5hbWVzIl9zLCAmb3B0X2lu
X2NvbHVtbk5hbWVzX3ZhbHVlRm91bmQpOwotICAgIGJvb2wgb3B0X2luX25vdGVzX3ZhbHVlRm91
bmQgPSBmYWxzZTsKLSAgICBTdHJpbmcgb3B0X2luX25vdGVzID0gbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+Z2V0U3RyaW5nKHBhcmFtZXRlcnMuZ2V0KCksICJub3RlcyJfcywgJm9wdF9pbl9ub3Rlc192
YWx1ZUZvdW5kKTsKLSAgICBib29sIG9wdF9pbl90aW1lc3RhbXBfdmFsdWVGb3VuZCA9IGZhbHNl
OwotICAgIGRvdWJsZSBvcHRfaW5fdGltZXN0YW1wID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0
RG91YmxlKHBhcmFtZXRlcnMuZ2V0KCksICJ0aW1lc3RhbXAiX3MsICZvcHRfaW5fdGltZXN0YW1w
X3ZhbHVlRm91bmQpOwotICAgIGJvb2wgb3B0X2luX3ZhbHVlc192YWx1ZUZvdW5kID0gZmFsc2U7
Ci0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gb3B0X2luX3ZhbHVlcyA9IG1fYmFja2VuZERpc3Bh
dGNoZXItPmdldE9iamVjdChwYXJhbWV0ZXJzLmdldCgpLCAidmFsdWVzIl9zLCAmb3B0X2luX3Zh
bHVlc192YWx1ZUZvdW5kKTsKLSAgICBib29sIG9wdF9pbl9wYXlsb2FkX3ZhbHVlRm91bmQgPSBm
YWxzZTsKLSAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IG9wdF9pbl9wYXlsb2FkID0gbV9iYWNrZW5k
RGlzcGF0Y2hlci0+Z2V0VmFsdWUocGFyYW1ldGVycy5nZXQoKSwgInBheWxvYWQiX3MsICZvcHRf
aW5fcGF5bG9hZF92YWx1ZUZvdW5kKTsKLSAgICBib29sIG9wdF9pbl9kYXRhYmFzZUlkX3ZhbHVl
Rm91bmQgPSBmYWxzZTsKLSAgICBpbnQgb3B0X2luX2RhdGFiYXNlSWQgPSBtX2JhY2tlbmREaXNw
YXRjaGVyLT5nZXRJbnRlZ2VyKHBhcmFtZXRlcnMuZ2V0KCksICJkYXRhYmFzZUlkIl9zLCAmb3B0
X2luX2RhdGFiYXNlSWRfdmFsdWVGb3VuZCk7Ci0gICAgYm9vbCBvcHRfaW5fc3FsRXJyb3JfdmFs
dWVGb3VuZCA9IGZhbHNlOwotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG9wdF9pbl9zcWxFcnJv
ciA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldE9iamVjdChwYXJhbWV0ZXJzLmdldCgpLCAic3Fs
RXJyb3IiX3MsICZvcHRfaW5fc3FsRXJyb3JfdmFsdWVGb3VuZCk7Ci0gICAgYm9vbCBvcHRfaW5f
c2NyZWVuQ29sb3JfdmFsdWVGb3VuZCA9IGZhbHNlOwotICAgIFN0cmluZyBvcHRfaW5fc2NyZWVu
Q29sb3IgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRTdHJpbmcocGFyYW1ldGVycy5nZXQoKSwg
InNjcmVlbkNvbG9yIl9zLCAmb3B0X2luX3NjcmVlbkNvbG9yX3ZhbHVlRm91bmQpOwotICAgIGJv
b2wgb3B0X2luX2FsdGVybmF0ZUNvbG9yc192YWx1ZUZvdW5kID0gZmFsc2U7Ci0gICAgUmVmUHRy
PEpTT046OkFycmF5PiBvcHRfaW5fYWx0ZXJuYXRlQ29sb3JzID0gbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+Z2V0QXJyYXkocGFyYW1ldGVycy5nZXQoKSwgImFsdGVybmF0ZUNvbG9ycyJfcywgJm9wdF9p
bl9hbHRlcm5hdGVDb2xvcnNfdmFsdWVGb3VuZCk7Ci0gICAgYm9vbCBvcHRfaW5fcHJpbnRDb2xv
cl92YWx1ZUZvdW5kID0gZmFsc2U7Ci0gICAgU3RyaW5nIG9wdF9pbl9wcmludENvbG9yID0gbV9i
YWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3RyaW5nKHBhcmFtZXRlcnMuZ2V0KCksICJwcmludENvbG9y
Il9zLCAmb3B0X2luX3ByaW50Q29sb3JfdmFsdWVGb3VuZCk7CisgICAgYXV0byBpbl9vcHRfY29s
dW1uTmFtZXMgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRBcnJheShwcm90b2NvbF9wYXJhbWV0
ZXJzLmdldCgpLCAiY29sdW1uTmFtZXMiX3MsIGZhbHNlKTsKKyAgICBhdXRvIGluX29wdF9ub3Rl
cyA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFN0cmluZyhwcm90b2NvbF9wYXJhbWV0ZXJzLmdl
dCgpLCAibm90ZXMiX3MsIGZhbHNlKTsKKyAgICBhdXRvIGluX29wdF90aW1lc3RhbXAgPSBtX2Jh
Y2tlbmREaXNwYXRjaGVyLT5nZXREb3VibGUocHJvdG9jb2xfcGFyYW1ldGVycy5nZXQoKSwgInRp
bWVzdGFtcCJfcywgZmFsc2UpOworICAgIGF1dG8gaW5fb3B0X3ZhbHVlcyA9IG1fYmFja2VuZERp
c3BhdGNoZXItPmdldE9iamVjdChwcm90b2NvbF9wYXJhbWV0ZXJzLmdldCgpLCAidmFsdWVzIl9z
LCBmYWxzZSk7CisgICAgYXV0byBpbl9vcHRfcGF5bG9hZCA9IG1fYmFja2VuZERpc3BhdGNoZXIt
PmdldFZhbHVlKHByb3RvY29sX3BhcmFtZXRlcnMuZ2V0KCksICJwYXlsb2FkIl9zLCBmYWxzZSk7
CisgICAgYXV0byBpbl9vcHRfZGF0YWJhc2VJZCA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldElu
dGVnZXIocHJvdG9jb2xfcGFyYW1ldGVycy5nZXQoKSwgImRhdGFiYXNlSWQiX3MsIGZhbHNlKTsK
KyAgICBhdXRvIGluX29wdF9zcWxFcnJvciA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldE9iamVj
dChwcm90b2NvbF9wYXJhbWV0ZXJzLmdldCgpLCAic3FsRXJyb3IiX3MsIGZhbHNlKTsKKyAgICBh
dXRvIGluX29wdF9zY3JlZW5Db2xvcl9qc29uID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3Ry
aW5nKHByb3RvY29sX3BhcmFtZXRlcnMuZ2V0KCksICJzY3JlZW5Db2xvciJfcywgZmFsc2UpOwor
ICAgIGF1dG8gaW5fb3B0X2FsdGVybmF0ZUNvbG9ycyA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdl
dEFycmF5KHByb3RvY29sX3BhcmFtZXRlcnMuZ2V0KCksICJhbHRlcm5hdGVDb2xvcnMiX3MsIGZh
bHNlKTsKKyAgICBhdXRvIGluX29wdF9wcmludENvbG9yID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+
Z2V0U3RyaW5nKHByb3RvY29sX3BhcmFtZXRlcnMuZ2V0KCksICJwcmludENvbG9yIl9zLCBmYWxz
ZSk7CiAgICAgaWYgKG1fYmFja2VuZERpc3BhdGNoZXItPmhhc1Byb3RvY29sRXJyb3JzKCkpIHsK
ICAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5k
RGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFtcywgIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnRGF0
YWJhc2UuZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycycgY2FuJ3QgYmUgcHJvY2Vzc2VkIl9z
KTsKICAgICAgICAgcmV0dXJuOwpAQCAtMjgzLDY1ICsyNjYsNTggQEAgdm9pZCBEYXRhYmFzZUJh
Y2tlbmREaXNwYXRjaGVyOjpleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcmVxdWVz
dElkLCBSZWYKIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQog
ICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVEaXNw
YXRjaGVyLT5leGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKHJlcXVlc3RJZCwgb3B0X2luX2Nv
bHVtbk5hbWVzX3ZhbHVlRm91bmQgPyBvcHRfaW5fY29sdW1uTmFtZXMuZ2V0KCkgOiBudWxscHRy
LCBvcHRfaW5fbm90ZXNfdmFsdWVGb3VuZCA/ICZvcHRfaW5fbm90ZXMgOiBudWxscHRyLCBvcHRf
aW5fdGltZXN0YW1wX3ZhbHVlRm91bmQgPyAmb3B0X2luX3RpbWVzdGFtcCA6IG51bGxwdHIsIG9w
dF9pbl92YWx1ZXNfdmFsdWVGb3VuZCA/IG9wdF9pbl92YWx1ZXMuZ2V0KCkgOiBudWxscHRyLCBv
cHRfaW5fcGF5bG9hZF92YWx1ZUZvdW5kID8gb3B0X2luX3BheWxvYWQuZ2V0KCkgOiBudWxscHRy
LCBvcHRfaW5fZGF0YWJhc2VJZF92YWx1ZUZvdW5kID8gJm9wdF9pbl9kYXRhYmFzZUlkIDogbnVs
bHB0ciwgb3B0X2luX3NxbEVycm9yX3ZhbHVlRm91bmQgPyBvcHRfaW5fc3FsRXJyb3IuZ2V0KCkg
OiBudWxscHRyLCBvcHRfaW5fc2NyZWVuQ29sb3JfdmFsdWVGb3VuZCA/ICZvcHRfaW5fc2NyZWVu
Q29sb3IgOiBudWxscHRyLCBvcHRfaW5fYWx0ZXJuYXRlQ29sb3JzX3ZhbHVlRm91bmQgPyBvcHRf
aW5fYWx0ZXJuYXRlQ29sb3JzLmdldCgpIDogbnVsbHB0ciwgb3B0X2luX3ByaW50Q29sb3JfdmFs
dWVGb3VuZCA/ICZvcHRfaW5fcHJpbnRDb2xvciA6IG51bGxwdHIpOworICAgICAgICBtX2FsdGVy
bmF0ZURpc3BhdGNoZXItPmV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMocHJvdG9jb2xfY2Fs
bElkLCBXVEZNb3ZlKGluX29wdF9jb2x1bW5OYW1lcyksIGluX29wdF9ub3RlcywgV1RGTW92ZShp
bl9vcHRfdGltZXN0YW1wKSwgV1RGTW92ZShpbl9vcHRfdmFsdWVzKSwgV1RGTW92ZShpbl9vcHRf
cGF5bG9hZCksIFdURk1vdmUoaW5fb3B0X2RhdGFiYXNlSWQpLCBXVEZNb3ZlKGluX29wdF9zcWxF
cnJvciksIGluX29wdF9zY3JlZW5Db2xvcl9qc29uLCBXVEZNb3ZlKGluX29wdF9hbHRlcm5hdGVD
b2xvcnMpLCBpbl9vcHRfcHJpbnRDb2xvcik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5k
aWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAKLSAgICBFcnJv
clN0cmluZyBlcnJvcjsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmpl
Y3Q6OmNyZWF0ZSgpOwotICAgIFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+IG91dF9jb2x1
bW5OYW1lczsKLSAgICBPcHRpb25hbDxTdHJpbmc+IG91dF9ub3RlczsKLSAgICBPcHRpb25hbDxk
b3VibGU+IG91dF90aW1lc3RhbXA7Ci0gICAgT3B0aW9uYWw8SlNPTjo6T2JqZWN0PiBvdXRfdmFs
dWVzOwotICAgIE9wdGlvbmFsPEpTT046OlZhbHVlPiBvdXRfcGF5bG9hZDsKLSAgICBPcHRpb25h
bDxpbnQ+IG91dF9kYXRhYmFzZUlkOwotICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpE
YXRhYmFzZTo6RXJyb3I+IG91dF9zcWxFcnJvcjsKLSAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpE
YXRhYmFzZTo6UHJpbWFyeUNvbG9ycyBvdXRfc2NyZWVuQ29sb3I7Ci0gICAgUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+IG91dF9hbHRlcm5hdGVDb2xvcnM7
Ci0gICAgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3Igb3V0X3By
aW50Q29sb3I7Ci0gICAgbV9hZ2VudC0+ZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhlcnJv
ciwgb3B0X2luX2NvbHVtbk5hbWVzX3ZhbHVlRm91bmQgPyBvcHRfaW5fY29sdW1uTmFtZXMuZ2V0
KCkgOiBudWxscHRyLCBvcHRfaW5fbm90ZXNfdmFsdWVGb3VuZCA/ICZvcHRfaW5fbm90ZXMgOiBu
dWxscHRyLCBvcHRfaW5fdGltZXN0YW1wX3ZhbHVlRm91bmQgPyAmb3B0X2luX3RpbWVzdGFtcCA6
IG51bGxwdHIsIG9wdF9pbl92YWx1ZXNfdmFsdWVGb3VuZCA/IG9wdF9pbl92YWx1ZXMuZ2V0KCkg
OiBudWxscHRyLCBvcHRfaW5fcGF5bG9hZF92YWx1ZUZvdW5kID8gb3B0X2luX3BheWxvYWQuZ2V0
KCkgOiBudWxscHRyLCBvcHRfaW5fZGF0YWJhc2VJZF92YWx1ZUZvdW5kID8gJm9wdF9pbl9kYXRh
YmFzZUlkIDogbnVsbHB0ciwgb3B0X2luX3NxbEVycm9yX3ZhbHVlRm91bmQgPyBvcHRfaW5fc3Fs
RXJyb3IuZ2V0KCkgOiBudWxscHRyLCBvcHRfaW5fc2NyZWVuQ29sb3JfdmFsdWVGb3VuZCA/ICZv
cHRfaW5fc2NyZWVuQ29sb3IgOiBudWxscHRyLCBvcHRfaW5fYWx0ZXJuYXRlQ29sb3JzX3ZhbHVl
Rm91bmQgPyBvcHRfaW5fYWx0ZXJuYXRlQ29sb3JzLmdldCgpIDogbnVsbHB0ciwgb3B0X2luX3By
aW50Q29sb3JfdmFsdWVGb3VuZCA/ICZvcHRfaW5fcHJpbnRDb2xvciA6IG51bGxwdHIsIG91dF9j
b2x1bW5OYW1lcywgb3V0X25vdGVzLCBvdXRfdGltZXN0YW1wLCBvdXRfdmFsdWVzLCBvdXRfcGF5
bG9hZCwgb3V0X2RhdGFiYXNlSWQsIG91dF9zcWxFcnJvciwgb3V0X3NjcmVlbkNvbG9yLCBvdXRf
YWx0ZXJuYXRlQ29sb3JzLCBvdXRfcHJpbnRDb2xvcik7CisgICAgYXV0byBpbl9vcHRfc2NyZWVu
Q29sb3IgPSBQcm90b2NvbDo6VGVzdEhlbHBlcnM6OnBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxQ
cm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+KGluX29wdF9zY3JlZW5Db2xvcl9qc29u
KTsKIAotICAgIGlmICghZXJyb3IubGVuZ3RoKCkpIHsKLSAgICAgICAgaWYgKG91dF9jb2x1bW5O
YW1lcykKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCBvdXRf
Y29sdW1uTmFtZXMpOwotICAgICAgICBpZiAob3V0X25vdGVzLmhhc1ZhbHVlKCkpCi0gICAgICAg
ICAgICByZXN1bHQtPnNldFN0cmluZygibm90ZXMiX3MsICpvdXRfbm90ZXMpOwotICAgICAgICBp
ZiAob3V0X3RpbWVzdGFtcC5oYXNWYWx1ZSgpKQotICAgICAgICAgICAgcmVzdWx0LT5zZXREb3Vi
bGUoInRpbWVzdGFtcCJfcywgKm91dF90aW1lc3RhbXApOwotICAgICAgICBpZiAob3V0X3ZhbHVl
cy5oYXNWYWx1ZSgpKQotICAgICAgICAgICAgcmVzdWx0LT5zZXRPYmplY3QoInZhbHVlcyJfcywg
Km91dF92YWx1ZXMpOwotICAgICAgICBpZiAob3V0X3BheWxvYWQuaGFzVmFsdWUoKSkKLSAgICAg
ICAgICAgIHJlc3VsdC0+c2V0VmFsdWUoInBheWxvYWQiX3MsICpvdXRfcGF5bG9hZCk7Ci0gICAg
ICAgIGlmIChvdXRfZGF0YWJhc2VJZC5oYXNWYWx1ZSgpKQotICAgICAgICAgICAgcmVzdWx0LT5z
ZXRJbnRlZ2VyKCJkYXRhYmFzZUlkIl9zLCAqb3V0X2RhdGFiYXNlSWQpOwotICAgICAgICBpZiAo
b3V0X3NxbEVycm9yKQotICAgICAgICAgICAgcmVzdWx0LT5zZXRPYmplY3QoInNxbEVycm9yIl9z
LCBvdXRfc3FsRXJyb3IpOwotICAgICAgICBpZiAob3V0X3NjcmVlbkNvbG9yLmhhc1ZhbHVlKCkp
Ci0gICAgICAgICAgICByZXN1bHQtPnNldFN0cmluZygic2NyZWVuQ29sb3IiX3MsICpvdXRfc2Ny
ZWVuQ29sb3IpOwotICAgICAgICBpZiAob3V0X2FsdGVybmF0ZUNvbG9ycykKLSAgICAgICAgICAg
IHJlc3VsdC0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywgb3V0X2FsdGVybmF0ZUNvbG9y
cyk7Ci0gICAgICAgIGlmIChvdXRfcHJpbnRDb2xvci5oYXNWYWx1ZSgpKQotICAgICAgICAgICAg
cmVzdWx0LT5zZXRTdHJpbmcoInByaW50Q29sb3IiX3MsICpvdXRfcHJpbnRDb2xvcik7CisgICAg
YXV0byByZXN1bHQgPSBtX2FnZW50LT5leGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKFdURk1v
dmUoaW5fb3B0X2NvbHVtbk5hbWVzKSwgaW5fb3B0X25vdGVzLCBXVEZNb3ZlKGluX29wdF90aW1l
c3RhbXApLCBXVEZNb3ZlKGluX29wdF92YWx1ZXMpLCBXVEZNb3ZlKGluX29wdF9wYXlsb2FkKSwg
V1RGTW92ZShpbl9vcHRfZGF0YWJhc2VJZCksIFdURk1vdmUoaW5fb3B0X3NxbEVycm9yKSwgV1RG
TW92ZShpbl9vcHRfc2NyZWVuQ29sb3IpLCBXVEZNb3ZlKGluX29wdF9hbHRlcm5hdGVDb2xvcnMp
LCBpbl9vcHRfcHJpbnRDb2xvcik7CisgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAgICAgQVNTRVJU
KCFyZXN1bHQuZXJyb3IoKS5pc0VtcHR5KCkpOworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVy
LT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgcmVz
dWx0LmVycm9yKCkpOworICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmICghZXJyb3IubGVu
Z3RoKCkpCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0
SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2UpOwotICAgIGVsc2UKLSAgICAgICAgbV9iYWNrZW5k
RGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVy
RXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKKworICAgIGF1dG8gW291dF9vcHRfY29sdW1uTmFtZXMs
IG91dF9vcHRfbm90ZXMsIG91dF9vcHRfdGltZXN0YW1wLCBvdXRfb3B0X3ZhbHVlcywgb3V0X29w
dF9wYXlsb2FkLCBvdXRfb3B0X2RhdGFiYXNlSWQsIG91dF9vcHRfc3FsRXJyb3IsIG91dF9vcHRf
c2NyZWVuQ29sb3IsIG91dF9vcHRfYWx0ZXJuYXRlQ29sb3JzLCBvdXRfb3B0X3ByaW50Q29sb3Jd
ID0gV1RGTW92ZShyZXN1bHQudmFsdWUoKSk7CisKKyAgICBhdXRvIHByb3RvY29sX2pzb25NZXNz
YWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBpZiAoISFvdXRfb3B0X2NvbHVtbk5h
bWVzKQorICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0QXJyYXkoImNvbHVtbk5hbWVz
Il9zLCBvdXRfb3B0X2NvbHVtbk5hbWVzLnJlbGVhc2VOb25OdWxsKCkpOworICAgIGlmICghIW91
dF9vcHRfbm90ZXMpCisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm5v
dGVzIl9zLCBvdXRfb3B0X25vdGVzKTsKKyAgICBpZiAoISFvdXRfb3B0X3RpbWVzdGFtcCkKKyAg
ICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCAqb3V0
X29wdF90aW1lc3RhbXApOworICAgIGlmICghIW91dF9vcHRfdmFsdWVzKQorICAgICAgICBwcm90
b2NvbF9qc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIG91dF9vcHRfdmFsdWVzLnJl
bGVhc2VOb25OdWxsKCkpOworICAgIGlmICghIW91dF9vcHRfcGF5bG9hZCkKKyAgICAgICAgcHJv
dG9jb2xfanNvbk1lc3NhZ2UtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCBvdXRfb3B0X3BheWxvYWQu
cmVsZWFzZU5vbk51bGwoKSk7CisgICAgaWYgKCEhb3V0X29wdF9kYXRhYmFzZUlkKQorICAgICAg
ICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0SW50ZWdlcigiZGF0YWJhc2VJZCJfcywgKm91dF9v
cHRfZGF0YWJhc2VJZCk7CisgICAgaWYgKCEhb3V0X29wdF9zcWxFcnJvcikKKyAgICAgICAgcHJv
dG9jb2xfanNvbk1lc3NhZ2UtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIG91dF9vcHRfc3FsRXJy
b3IucmVsZWFzZU5vbk51bGwoKSk7CisgICAgaWYgKCEhb3V0X29wdF9zY3JlZW5Db2xvcikKKyAg
ICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygic2NyZWVuQ29sb3IiX3MsIFBy
b3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUoKm91dF9vcHRfc2NyZWVu
Q29sb3IpKTsKKyAgICBpZiAoISFvdXRfb3B0X2FsdGVybmF0ZUNvbG9ycykKKyAgICAgICAgcHJv
dG9jb2xfanNvbk1lc3NhZ2UtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIG91dF9vcHRf
YWx0ZXJuYXRlQ29sb3JzLnJlbGVhc2VOb25OdWxsKCkpOworICAgIGlmICghIW91dF9vcHRfcHJp
bnRDb2xvcikKKyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygicHJpbnRD
b2xvciJfcywgb3V0X29wdF9wcmludENvbG9yKTsKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5z
ZW5kUmVzcG9uc2UocHJvdG9jb2xfY2FsbElkLCBXVEZNb3ZlKHByb3RvY29sX2pzb25NZXNzYWdl
KSwgZmFsc2UpOwogfQogCi12b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVO
b09wdGlvbmFsUGFyYW1ldGVycyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4m
JiBwYXJhbWV0ZXJzKQordm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlTm9P
cHRpb25hbFBhcmFtZXRlcnMobG9uZyBwcm90b2NvbF9jYWxsSWQsIFJlZlB0cjxKU09OOjpPYmpl
Y3Q+JiYgcHJvdG9jb2xfcGFyYW1ldGVycykKIHsKLSAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IGlu
X2NvbHVtbk5hbWVzID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0QXJyYXkocGFyYW1ldGVycy5n
ZXQoKSwgImNvbHVtbk5hbWVzIl9zLCBudWxscHRyKTsKLSAgICBTdHJpbmcgaW5fbm90ZXMgPSBt
X2JhY2tlbmREaXNwYXRjaGVyLT5nZXRTdHJpbmcocGFyYW1ldGVycy5nZXQoKSwgIm5vdGVzIl9z
LCBudWxscHRyKTsKLSAgICBkb3VibGUgaW5fdGltZXN0YW1wID0gbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+Z2V0RG91YmxlKHBhcmFtZXRlcnMuZ2V0KCksICJ0aW1lc3RhbXAiX3MsIG51bGxwdHIpOwot
ICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IGluX3ZhbHVlcyA9IG1fYmFja2VuZERpc3BhdGNoZXIt
PmdldE9iamVjdChwYXJhbWV0ZXJzLmdldCgpLCAidmFsdWVzIl9zLCBudWxscHRyKTsKLSAgICBS
ZWZQdHI8SlNPTjo6VmFsdWU+IGluX3BheWxvYWQgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRW
YWx1ZShwYXJhbWV0ZXJzLmdldCgpLCAicGF5bG9hZCJfcywgbnVsbHB0cik7Ci0gICAgaW50IGlu
X2RhdGFiYXNlSWQgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRJbnRlZ2VyKHBhcmFtZXRlcnMu
Z2V0KCksICJkYXRhYmFzZUlkIl9zLCBudWxscHRyKTsKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0
PiBpbl9zcWxFcnJvciA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldE9iamVjdChwYXJhbWV0ZXJz
LmdldCgpLCAic3FsRXJyb3IiX3MsIG51bGxwdHIpOwotICAgIFN0cmluZyBpbl9zY3JlZW5Db2xv
ciA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFN0cmluZyhwYXJhbWV0ZXJzLmdldCgpLCAic2Ny
ZWVuQ29sb3IiX3MsIG51bGxwdHIpOwotICAgIFJlZlB0cjxKU09OOjpBcnJheT4gaW5fYWx0ZXJu
YXRlQ29sb3JzID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0QXJyYXkocGFyYW1ldGVycy5nZXQo
KSwgImFsdGVybmF0ZUNvbG9ycyJfcywgbnVsbHB0cik7Ci0gICAgU3RyaW5nIGluX3ByaW50Q29s
b3IgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRTdHJpbmcocGFyYW1ldGVycy5nZXQoKSwgInBy
aW50Q29sb3IiX3MsIG51bGxwdHIpOworICAgIGF1dG8gaW5fY29sdW1uTmFtZXMgPSBtX2JhY2tl
bmREaXNwYXRjaGVyLT5nZXRBcnJheShwcm90b2NvbF9wYXJhbWV0ZXJzLmdldCgpLCAiY29sdW1u
TmFtZXMiX3MsIHRydWUpOworICAgIGF1dG8gaW5fbm90ZXMgPSBtX2JhY2tlbmREaXNwYXRjaGVy
LT5nZXRTdHJpbmcocHJvdG9jb2xfcGFyYW1ldGVycy5nZXQoKSwgIm5vdGVzIl9zLCB0cnVlKTsK
KyAgICBhdXRvIGluX3RpbWVzdGFtcCA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldERvdWJsZShw
cm90b2NvbF9wYXJhbWV0ZXJzLmdldCgpLCAidGltZXN0YW1wIl9zLCB0cnVlKTsKKyAgICBhdXRv
IGluX3ZhbHVlcyA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldE9iamVjdChwcm90b2NvbF9wYXJh
bWV0ZXJzLmdldCgpLCAidmFsdWVzIl9zLCB0cnVlKTsKKyAgICBhdXRvIGluX3BheWxvYWQgPSBt
X2JhY2tlbmREaXNwYXRjaGVyLT5nZXRWYWx1ZShwcm90b2NvbF9wYXJhbWV0ZXJzLmdldCgpLCAi
cGF5bG9hZCJfcywgdHJ1ZSk7CisgICAgYXV0byBpbl9kYXRhYmFzZUlkID0gbV9iYWNrZW5kRGlz
cGF0Y2hlci0+Z2V0SW50ZWdlcihwcm90b2NvbF9wYXJhbWV0ZXJzLmdldCgpLCAiZGF0YWJhc2VJ
ZCJfcywgdHJ1ZSk7CisgICAgYXV0byBpbl9zcWxFcnJvciA9IG1fYmFja2VuZERpc3BhdGNoZXIt
PmdldE9iamVjdChwcm90b2NvbF9wYXJhbWV0ZXJzLmdldCgpLCAic3FsRXJyb3IiX3MsIHRydWUp
OworICAgIGF1dG8gaW5fc2NyZWVuQ29sb3JfanNvbiA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdl
dFN0cmluZyhwcm90b2NvbF9wYXJhbWV0ZXJzLmdldCgpLCAic2NyZWVuQ29sb3IiX3MsIHRydWUp
OworICAgIGF1dG8gaW5fYWx0ZXJuYXRlQ29sb3JzID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0
QXJyYXkocHJvdG9jb2xfcGFyYW1ldGVycy5nZXQoKSwgImFsdGVybmF0ZUNvbG9ycyJfcywgdHJ1
ZSk7CisgICAgYXV0byBpbl9wcmludENvbG9yID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3Ry
aW5nKHByb3RvY29sX3BhcmFtZXRlcnMuZ2V0KCksICJwcmludENvbG9yIl9zLCB0cnVlKTsKICAg
ICBpZiAobV9iYWNrZW5kRGlzcGF0Y2hlci0+aGFzUHJvdG9jb2xFcnJvcnMoKSkgewogICAgICAg
ICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRj
aGVyOjpJbnZhbGlkUGFyYW1zLCAiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICdEYXRhYmFzZS5l
eGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMnIGNhbid0IGJlIHByb2Nlc3NlZCJfcyk7CiAgICAg
ICAgIHJldHVybjsKQEAgLTM0OSw0MSArMzI1LDM4IEBAIHZvaWQgRGF0YWJhc2VCYWNrZW5kRGlz
cGF0Y2hlcjo6ZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcmVxdWVzdElkLCBSZWZQ
CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKICAgICBpZiAo
bV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+
ZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKHJlcXVlc3RJZCwgKmluX2NvbHVtbk5hbWVzLCBp
bl9ub3RlcywgaW5fdGltZXN0YW1wLCAqaW5fdmFsdWVzLCAqaW5fcGF5bG9hZCwgaW5fZGF0YWJh
c2VJZCwgKmluX3NxbEVycm9yLCBpbl9zY3JlZW5Db2xvciwgKmluX2FsdGVybmF0ZUNvbG9ycywg
aW5fcHJpbnRDb2xvcik7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+ZXhlY3V0ZU5v
T3B0aW9uYWxQYXJhbWV0ZXJzKHByb3RvY29sX2NhbGxJZCwgaW5fY29sdW1uTmFtZXMucmVsZWFz
ZU5vbk51bGwoKSwgaW5fbm90ZXMsICppbl90aW1lc3RhbXAsIGluX3ZhbHVlcy5yZWxlYXNlTm9u
TnVsbCgpLCBpbl9wYXlsb2FkLnJlbGVhc2VOb25OdWxsKCksICppbl9kYXRhYmFzZUlkLCBpbl9z
cWxFcnJvci5yZWxlYXNlTm9uTnVsbCgpLCBpbl9zY3JlZW5Db2xvcl9qc29uLCBpbl9hbHRlcm5h
dGVDb2xvcnMucmVsZWFzZU5vbk51bGwoKSwgaW5fcHJpbnRDb2xvcik7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hF
UlMpCiAKLSAgICBFcnJvclN0cmluZyBlcnJvcjsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1
bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIFJlZlB0cjxKU09OOjpBcnJheU9mPFN0
cmluZz4+IG91dF9jb2x1bW5OYW1lczsKLSAgICBTdHJpbmcgb3V0X25vdGVzOwotICAgIGRvdWJs
ZSBvdXRfdGltZXN0YW1wOwotICAgIEpTT046Ok9iamVjdCBvdXRfdmFsdWVzOwotICAgIEpTT046
OlZhbHVlIG91dF9wYXlsb2FkOwotICAgIGludCBvdXRfZGF0YWJhc2VJZDsKLSAgICBSZWZQdHI8
SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiBvdXRfc3FsRXJyb3I7Ci0gICAg
SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMgb3V0X3NjcmVlbkNv
bG9yOwotICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0
PiBvdXRfYWx0ZXJuYXRlQ29sb3JzOwotICAgIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyOjpQcmludENvbG9yIG91dF9wcmludENvbG9yOwotICAgIG1fYWdlbnQtPmV4ZWN1dGVOb09w
dGlvbmFsUGFyYW1ldGVycyhlcnJvciwgKmluX2NvbHVtbk5hbWVzLCBpbl9ub3RlcywgaW5fdGlt
ZXN0YW1wLCAqaW5fdmFsdWVzLCAqaW5fcGF5bG9hZCwgaW5fZGF0YWJhc2VJZCwgKmluX3NxbEVy
cm9yLCBpbl9zY3JlZW5Db2xvciwgKmluX2FsdGVybmF0ZUNvbG9ycywgaW5fcHJpbnRDb2xvciwg
b3V0X2NvbHVtbk5hbWVzLCAmb3V0X25vdGVzLCAmb3V0X3RpbWVzdGFtcCwgb3V0X3ZhbHVlcywg
Jm91dF9wYXlsb2FkLCAmb3V0X2RhdGFiYXNlSWQsIG91dF9zcWxFcnJvciwgJm91dF9zY3JlZW5D
b2xvciwgb3V0X2FsdGVybmF0ZUNvbG9ycywgJm91dF9wcmludENvbG9yKTsKLQotICAgIGlmICgh
ZXJyb3IubGVuZ3RoKCkpIHsKLSAgICAgICAgcmVzdWx0LT5zZXRBcnJheSgiY29sdW1uTmFtZXMi
X3MsIG91dF9jb2x1bW5OYW1lcyk7Ci0gICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJub3RlcyJf
cywgb3V0X25vdGVzKTsKLSAgICAgICAgcmVzdWx0LT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywg
b3V0X3RpbWVzdGFtcCk7Ci0gICAgICAgIHJlc3VsdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIG91
dF92YWx1ZXMpOwotICAgICAgICByZXN1bHQtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCBvdXRfcGF5
bG9hZCk7Ci0gICAgICAgIHJlc3VsdC0+c2V0SW50ZWdlcigiZGF0YWJhc2VJZCJfcywgb3V0X2Rh
dGFiYXNlSWQpOwotICAgICAgICByZXN1bHQtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIG91dF9z
cWxFcnJvcik7Ci0gICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgSW5z
cGVjdG9yOjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKG91dF9z
Y3JlZW5Db2xvcikpOwotICAgICAgICByZXN1bHQtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMi
X3MsIG91dF9hbHRlcm5hdGVDb2xvcnMpOwotICAgICAgICByZXN1bHQtPnNldFN0cmluZygicHJp
bnRDb2xvciJfcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25z
dGFudFZhbHVlKG91dF9wcmludENvbG9yKSk7CisgICAgYXV0byBpbl9zY3JlZW5Db2xvciA9IFBy
b3RvY29sOjpUZXN0SGVscGVyczo6cGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPFByb3RvY29sOjpE
YXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4oaW5fc2NyZWVuQ29sb3JfanNvbik7CisgICAgaWYgKCFp
bl9zY3JlZW5Db2xvcikgeworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90
b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgbWFrZVN0cmluZygiVW5r
bm93biBzY3JlZW5Db2xvcjogIl9zLCBpbl9zY3JlZW5Db2xvcl9qc29uKSk7CisgICAgICAgIHJl
dHVybjsKICAgICB9Ci0gICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKLSAgICAgICAgbV9iYWNrZW5k
RGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxz
ZSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2Nv
bEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOwor
CisgICAgYXV0byByZXN1bHQgPSBtX2FnZW50LT5leGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMo
aW5fY29sdW1uTmFtZXMucmVsZWFzZU5vbk51bGwoKSwgaW5fbm90ZXMsICppbl90aW1lc3RhbXAs
IGluX3ZhbHVlcy5yZWxlYXNlTm9uTnVsbCgpLCBpbl9wYXlsb2FkLnJlbGVhc2VOb25OdWxsKCks
ICppbl9kYXRhYmFzZUlkLCBpbl9zcWxFcnJvci5yZWxlYXNlTm9uTnVsbCgpLCAqaW5fc2NyZWVu
Q29sb3IsIGluX2FsdGVybmF0ZUNvbG9ycy5yZWxlYXNlTm9uTnVsbCgpLCBpbl9wcmludENvbG9y
KTsKKyAgICBpZiAoIXJlc3VsdCkgeworICAgICAgICBBU1NFUlQoIXJlc3VsdC5lcnJvcigpLmlz
RW1wdHkoKSk7CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJy
b3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCByZXN1bHQuZXJyb3IoKSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBhdXRvIFtvdXRfY29sdW1uTmFtZXMsIG91dF9ub3Rl
cywgb3V0X3RpbWVzdGFtcCwgb3V0X3ZhbHVlcywgb3V0X3BheWxvYWQsIG91dF9kYXRhYmFzZUlk
LCBvdXRfc3FsRXJyb3IsIG91dF9zY3JlZW5Db2xvciwgb3V0X2FsdGVybmF0ZUNvbG9ycywgb3V0
X3ByaW50Q29sb3JdID0gV1RGTW92ZShyZXN1bHQudmFsdWUoKSk7CisKKyAgICBhdXRvIHByb3Rv
Y29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBwcm90b2NvbF9q
c29uTWVzc2FnZS0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCBXVEZNb3ZlKG91dF9jb2x1bW5O
YW1lcykpOworICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm5vdGVzIl9zLCBv
dXRfbm90ZXMpOworICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXREb3VibGUoInRpbWVzdGFt
cCJfcywgb3V0X3RpbWVzdGFtcCk7CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldE9iamVj
dCgidmFsdWVzIl9zLCBXVEZNb3ZlKG91dF92YWx1ZXMpKTsKKyAgICBwcm90b2NvbF9qc29uTWVz
c2FnZS0+c2V0VmFsdWUoInBheWxvYWQiX3MsIFdURk1vdmUob3V0X3BheWxvYWQpKTsKKyAgICBw
cm90b2NvbF9qc29uTWVzc2FnZS0+c2V0SW50ZWdlcigiZGF0YWJhc2VJZCJfcywgb3V0X2RhdGFi
YXNlSWQpOworICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRPYmplY3QoInNxbEVycm9yIl9z
LCBXVEZNb3ZlKG91dF9zcWxFcnJvcikpOworICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRT
dHJpbmcoInNjcmVlbkNvbG9yIl9zLCBQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25z
dGFudFZhbHVlKG91dF9zY3JlZW5Db2xvcikpOworICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5z
ZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCBXVEZNb3ZlKG91dF9hbHRlcm5hdGVDb2xvcnMp
KTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCBv
dXRfcHJpbnRDb2xvcik7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHBy
b3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSksIGZhbHNlKTsKIH0K
IAogfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCkBAIC00MjQsNiArMzk3LDcgQEAgdm9pZCBEYXRh
YmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMobG9uZyBy
ZXF1ZXN0SWQsIFJlZlAKIAogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNs
dWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKQEAgLTQ2
Nyw3ICs0NDEsNiBAQCBjbGFzcyBGcm9udGVuZFJvdXRlcjsKICNpbmNsdWRlICJUZXN0RnJvbnRl
bmREaXNwYXRjaGVycy5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJv
bnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKIG5hbWVzcGFj
ZSBJbnNwZWN0b3IgewogCkBAIC01MDgsNyArNDgxLDkgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7
CiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3Rv
Y29sVHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9K
U09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC01MzAsNyArNTA1
LDcgQEAgZW51bSBjbGFzcyBQcmltYXJ5Q29sb3JzOwogbmFtZXNwYWNlIERhdGFiYXNlIHsKIC8q
IFVuaXF1ZSBpZGVudGlmaWVyIG9mIERhdGFiYXNlIG9iamVjdC4gKi8KIHVzaW5nIERhdGFiYXNl
SWQgPSBpbnQ7Ci11c2luZyBDb2xvckxpc3QgPSBKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPjsKK3VzaW5nIENvbG9yTGlzdCA9IEpTT046
OkFycmF5T2Y8UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPjsKIH0gLy8gRGF0YWJh
c2UKIC8vIEVuZCBvZiB0eXBlZGVmcy4KIApAQCAtNTU0LDcgKzUyOSw3IEBAIGVudW0gY2xhc3Mg
UHJpbWFyeUNvbG9ycyB7CiB9OyAvLyBlbnVtIGNsYXNzIFByaW1hcnlDb2xvcnMKIAogLyogRGF0
YWJhc2UgZXJyb3IuICovCi1jbGFzcyBFcnJvciA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsK
K2NsYXNzIEVycm9yIGZpbmFsIDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgewogcHVibGljOgog
ICAgIGVudW0gewogICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCkBAIC01ODEsMTcgKzU1NiwxNyBA
QCBwdWJsaWM6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBFcnJvcjsKICAgICBwdWJsaWM6CiAKLSAg
ICAgICAgQnVpbGRlcjxTVEFURSB8IE1lc3NhZ2VTZXQ+JiBzZXRNZXNzYWdlKGNvbnN0IFN0cmlu
ZyYgdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBNZXNzYWdlU2V0PiYgc2V0TWVzc2Fn
ZShjb25zdCBTdHJpbmcmIGluX21lc3NhZ2UpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKCEoU1RBVEUgJiBNZXNzYWdlU2V0KSwgcHJvcGVydHlfbWVzc2FnZV9hbHJlYWR5
X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJtZXNzYWdlIl9zLCB2YWx1
ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJtZXNzYWdlIl9zLCBpbl9tZXNz
YWdlKTsKICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TWVzc2FnZVNldD4oKTsKICAgICAg
ICAgfQogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDb2RlU2V0PiYgc2V0Q29kZShpbnQgdmFs
dWUpCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDb2RlU2V0PiYgc2V0Q29kZShpbnQgaW5fY29k
ZSkKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIENvZGVT
ZXQpLCBwcm9wZXJ0eV9jb2RlX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5z
ZXRJbnRlZ2VyKCJjb2RlIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0SW50
ZWdlcigiY29kZSJfcywgaW5fY29kZSk7CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENv
ZGVTZXQ+KCk7CiAgICAgICAgIH0KIApAQCAtNjMwLDcgKzYwNSw3IEBAIE9wdGlvbmFsPFByb3Rv
Y29sRW51bVR5cGU+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZyhjb25zdCBTdHJpbmcmKTsKIAog
Ly8gRW51bXMgaW4gdGhlICdEYXRhYmFzZScgRG9tYWluCiB0ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJ
bnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4gcGFyc2VFbnVtVmFs
dWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3Jz
Pihjb25zdCBTdHJpbmcmKTsKK09wdGlvbmFsPFByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNv
bG9ycz4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPFByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFy
eUNvbG9ycz4oY29uc3QgU3RyaW5nJik7CiAKIH0gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCiAK
QEAgLTY4Miw4ICs2NTcsNyBAQCBzdHJ1Y3QgRGVmYXVsdEhhc2g8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+IDogSW50SGFzaDxJbnNwZQogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKIAotI2luY2x1ZGUgPHd0
Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3
dGYvQXNzZXJ0aW9ucy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtNzA4LDE2ICs2
ODIsMTYgQEAgU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKSB7CiAvLyBFbnVt
cyBpbiB0aGUgJ0RhdGFiYXNlJyBEb21haW4KIAogdGVtcGxhdGU8PgotT3B0aW9uYWw8SW5zcGVj
dG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+IHBhcnNlRW51bVZhbHVlRnJv
bVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4oY29u
c3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKK09wdGlvbmFsPFByb3RvY29sOjpEYXRhYmFzZTo6
UHJpbWFyeUNvbG9ycz4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPFByb3RvY29sOjpEYXRhYmFz
ZTo6UHJpbWFyeUNvbG9ycz4oY29uc3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKIHsKICAgICBz
dGF0aWMgY29uc3Qgc2l6ZV90IGNvbnN0YW50VmFsdWVzW10gPSB7Ci0gICAgICAgIChzaXplX3Qp
SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM6OlJlZCwKLSAgICAg
ICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9yczo6
R3JlZW4sCi0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlBy
aW1hcnlDb2xvcnM6OkJsdWUsCisgICAgICAgIChzaXplX3QpUHJvdG9jb2w6OkRhdGFiYXNlOjpQ
cmltYXJ5Q29sb3JzOjpSZWQsCisgICAgICAgIChzaXplX3QpUHJvdG9jb2w6OkRhdGFiYXNlOjpQ
cmltYXJ5Q29sb3JzOjpHcmVlbiwKKyAgICAgICAgKHNpemVfdClQcm90b2NvbDo6RGF0YWJhc2U6
OlByaW1hcnlDb2xvcnM6OkJsdWUsCiAgICAgfTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IDM7ICsraSkKICAgICAgICAgaWYgKHByb3RvY29sU3RyaW5nID09IGVudW1fY29uc3RhbnRfdmFs
dWVzW2NvbnN0YW50VmFsdWVzW2ldXSkKLSAgICAgICAgICAgIHJldHVybiAoSW5zcGVjdG9yOjpQ
cm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMpY29uc3RhbnRWYWx1ZXNbaV07CisgICAg
ICAgICAgICByZXR1cm4gKFByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyljb25zdGFu
dFZhbHVlc1tpXTsKIAogICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiB9CkBAIC03NzQsOCArNzQ4
LDggQEAgY2xhc3MgT2JqQ0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIgZmluYWwg
OiBwdWJsaWMgQWx0ZXJuYXRlRGF0YWJhc2VCYWMKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKIHB1YmxpYzoKICAgICBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcihp
ZDxUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkhhbmRsZXI+IGhhbmRsZXIpIHsgbV9kZWxlZ2F0
ZSA9IGhhbmRsZXI7IH0KLSAgICB2b2lkIGV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMobG9u
ZyByZXF1ZXN0SWQsIGNvbnN0IEpTT046OkFycmF5KiBpbl9jb2x1bW5OYW1lcywgY29uc3QgU3Ry
aW5nKiBpbl9ub3RlcywgY29uc3QgZG91YmxlKiBpbl90aW1lc3RhbXAsIGNvbnN0IEpTT046Ok9i
amVjdCogaW5fdmFsdWVzLCBjb25zdCBKU09OOjpWYWx1ZSogaW5fcGF5bG9hZCwgY29uc3QgaW50
KiBpbl9kYXRhYmFzZUlkLCBjb25zdCBKU09OOjpPYmplY3QqIGluX3NxbEVycm9yLCBjb25zdCBT
dHJpbmcqIGluX3NjcmVlbkNvbG9yLCBjb25zdCBKU09OOjpBcnJheSogaW5fYWx0ZXJuYXRlQ29s
b3JzLCBjb25zdCBTdHJpbmcqIGluX3ByaW50Q29sb3IpIGZpbmFsOwotICAgIHZvaWQgZXhlY3V0
ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcmVxdWVzdElkLCBjb25zdCBKU09OOjpBcnJheSYg
aW5fY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgaW5fbm90ZXMsIGRvdWJsZSBpbl90aW1lc3Rh
bXAsIGNvbnN0IEpTT046Ok9iamVjdCYgaW5fdmFsdWVzLCBKU09OOjpWYWx1ZSBpbl9wYXlsb2Fk
LCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgSlNPTjo6T2JqZWN0JiBpbl9zcWxFcnJvciwgY29u
c3QgU3RyaW5nJiBpbl9zY3JlZW5Db2xvciwgY29uc3QgSlNPTjo6QXJyYXkmIGluX2FsdGVybmF0
ZUNvbG9ycywgY29uc3QgU3RyaW5nJiBpbl9wcmludENvbG9yKSBmaW5hbDsKKyAgICB2b2lkIGV4
ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMobG9uZyBwcm90b2NvbF9jYWxsSWQsIFJlZlB0cjxK
U09OOjpBcnJheT4mJiBvcHRfY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgb3B0X25vdGVzLCBP
cHRpb25hbDxkb3VibGU+JiYgb3B0X3RpbWVzdGFtcCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBv
cHRfdmFsdWVzLCBSZWZQdHI8SlNPTjo6VmFsdWU+JiYgb3B0X3BheWxvYWQsIE9wdGlvbmFsPGlu
dD4mJiBvcHRfZGF0YWJhc2VJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBvcHRfc3FsRXJyb3Is
IGNvbnN0IFN0cmluZyYgb3B0X3NjcmVlbkNvbG9yLCBSZWZQdHI8SlNPTjo6QXJyYXk+JiYgb3B0
X2FsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nJiBvcHRfcHJpbnRDb2xvcikgZmluYWw7Cisg
ICAgdm9pZCBleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMobG9uZyBwcm90b2NvbF9jYWxsSWQs
IFJlZjxKU09OOjpBcnJheT4mJiBjb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBub3RlcywgZG91
YmxlIHRpbWVzdGFtcCwgUmVmPEpTT046Ok9iamVjdD4mJiB2YWx1ZXMsIFJlZjxKU09OOjpWYWx1
ZT4mJiBwYXlsb2FkLCBpbnQgZGF0YWJhc2VJZCwgUmVmPEpTT046Ok9iamVjdD4mJiBzcWxFcnJv
ciwgY29uc3QgU3RyaW5nJiBzY3JlZW5Db2xvciwgUmVmPEpTT046OkFycmF5PiYmIGFsdGVybmF0
ZUNvbG9ycywgY29uc3QgU3RyaW5nJiBwcmludENvbG9yKSBmaW5hbDsKIHByaXZhdGU6CiAgICAg
UmV0YWluUHRyPGlkPFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluSGFuZGxlcj4+IG1fZGVsZWdh
dGU7CiB9OwpAQCAtODIzLDEzNyArNzk3LDEzNSBAQCBwcml2YXRlOgogCiBuYW1lc3BhY2UgSW5z
cGVjdG9yIHsKIAotdm9pZCBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6
ZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhsb25nIHJlcXVlc3RJZCwgY29uc3QgSlNPTjo6
QXJyYXkqIGluX2NvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcqIGluX25vdGVzLCBjb25zdCBkb3Vi
bGUqIGluX3RpbWVzdGFtcCwgY29uc3QgSlNPTjo6T2JqZWN0KiBpbl92YWx1ZXMsIGNvbnN0IEpT
T046OlZhbHVlKiBpbl9wYXlsb2FkLCBjb25zdCBpbnQqIGluX2RhdGFiYXNlSWQsIGNvbnN0IEpT
T046Ok9iamVjdCogaW5fc3FsRXJyb3IsIGNvbnN0IFN0cmluZyogaW5fc2NyZWVuQ29sb3IsIGNv
bnN0IEpTT046OkFycmF5KiBpbl9hbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyogaW5fcHJp
bnRDb2xvcikKK3ZvaWQgT2JqQ0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4
ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMobG9uZyBwcm90b2NvbF9jYWxsSWQsIFJlZlB0cjxK
U09OOjpBcnJheT4mJiBpbl9vcHRfY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgaW5fb3B0X25v
dGVzLCBPcHRpb25hbDxkb3VibGU+JiYgaW5fb3B0X3RpbWVzdGFtcCwgUmVmUHRyPEpTT046Ok9i
amVjdD4mJiBpbl9vcHRfdmFsdWVzLCBSZWZQdHI8SlNPTjo6VmFsdWU+JiYgaW5fb3B0X3BheWxv
YWQsIE9wdGlvbmFsPGludD4mJiBpbl9vcHRfZGF0YWJhc2VJZCwgUmVmUHRyPEpTT046Ok9iamVj
dD4mJiBpbl9vcHRfc3FsRXJyb3IsIGNvbnN0IFN0cmluZyYgaW5fb3B0X3NjcmVlbkNvbG9yLCBS
ZWZQdHI8SlNPTjo6QXJyYXk+JiYgaW5fb3B0X2FsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5n
JiBpbl9vcHRfcHJpbnRDb2xvcikKIHsKICAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9T
ZWxlY3RvcjpAc2VsZWN0b3IoZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1dpdGhFcnJvckNh
bGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazpjb2x1bW5OYW1lczpub3Rlczp0aW1lc3RhbXA6dmFsdWVz
OnBheWxvYWQ6ZGF0YWJhc2VJZDpzcWxFcnJvcjpzY3JlZW5Db2xvcjphbHRlcm5hdGVDb2xvcnM6
cHJpbnRDb2xvcjopXSkgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90
b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAi
J0RhdGFiYXNlLmV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMnIHdhcyBub3QgZm91bmQiX3Mp
OworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHByb3Rv
Y29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RhdGFiYXNl
LmV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMnIHdhcyBub3QgZm91bmQiX3MpOwogICAgICAg
ICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCiAgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7
Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVz
dElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAgICAgYmFj
a2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxsSWQsIEJh
Y2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwogICAgICAgICBiYWNrZW5kRGlz
cGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgIH07CiAKLSAgICBpZCBzdWNjZXNz
Q2FsbGJhY2sgPSBeKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKmNvbHVtbk5hbWVzLCBOU1N0cmlu
ZyAqKm5vdGVzLCBkb3VibGUgKnRpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqdmFs
dWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKipwYXlsb2FkLCBpbnQgKmRhdGFiYXNlSWQsIFRl
c3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKipzcWxFcnJvciwgVGVzdFByb3RvY29sRGF0YWJhc2VQ
cmltYXJ5Q29sb3JzICpzY3JlZW5Db2xvciwgTlNBcnJheS8qPE5TU3RyaW5nPiovICoqYWx0ZXJu
YXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRl
cnNQcmludENvbG9yICpwcmludENvbG9yKSB7Ci0gICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IHJl
c3VsdE9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgICAgIFRIUk9XX0VYQ0VQ
VElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihjb2x1bW5OYW1lcywgQCJjb2x1bW5OYW1l
cyIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIo
bm90ZXMsIEAibm90ZXMiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9O
QUxfUEFSQU1FVEVSKHZhbHVlcywgQCJ2YWx1ZXMiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9O
X0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKHBheWxvYWQsIEAicGF5bG9hZCIpOwotICAgICAg
ICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIoc3FsRXJyb3IsIEAi
c3FsRXJyb3IiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFS
QU1FVEVSKGFsdGVybmF0ZUNvbG9ycywgQCJhbHRlcm5hdGVDb2xvcnMiKTsKLSAgICAgICAgaWYg
KGNvbHVtbk5hbWVzKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRBcnJheSgiY29sdW1u
TmFtZXMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KCpjb2x1bW5OYW1lcykpOwotICAgICAgICBpZiAo
bm90ZXMpCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZygibm90ZXMiX3MsICpu
b3Rlcyk7Ci0gICAgICAgIGlmICh0aW1lc3RhbXApCi0gICAgICAgICAgICByZXN1bHRPYmplY3Qt
PnNldERvdWJsZSgidGltZXN0YW1wIl9zLCAqdGltZXN0YW1wKTsKLSAgICAgICAgaWYgKHZhbHVl
cykKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIFsqdmFs
dWVzIHRvSlNPTk9iamVjdF0pOwotICAgICAgICBpZiAocGF5bG9hZCkKLSAgICAgICAgICAgIHJl
c3VsdE9iamVjdC0+c2V0VmFsdWUoInBheWxvYWQiX3MsIFsqcGF5bG9hZCB0b0pTT05PYmplY3Rd
KTsKLSAgICAgICAgaWYgKGRhdGFiYXNlSWQpCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNl
dEludGVnZXIoImRhdGFiYXNlSWQiX3MsICpkYXRhYmFzZUlkKTsKLSAgICAgICAgaWYgKHNxbEVy
cm9yKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBb
KnNxbEVycm9yIHRvSlNPTk9iamVjdF0pOwotICAgICAgICBpZiAoc2NyZWVuQ29sb3IpCi0gICAg
ICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZygic2NyZWVuQ29sb3IiX3MsIHRvUHJvdG9j
b2xTdHJpbmcoKnNjcmVlbkNvbG9yKSk7Ci0gICAgICAgIGlmIChhbHRlcm5hdGVDb2xvcnMpCi0g
ICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIHRv
SlNPTlN0cmluZ0FycmF5KCphbHRlcm5hdGVDb2xvcnMpKTsKLSAgICAgICAgaWYgKHByaW50Q29s
b3IpCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZygicHJpbnRDb2xvciJfcywg
dG9Qcm90b2NvbFN0cmluZygqcHJpbnRDb2xvcikpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hl
cigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdE9iamVjdCksIGZhbHNl
KTsKKyAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKm91
dF9vcHRfY29sdW1uTmFtZXMsIE5TU3RyaW5nICoqb3V0X29wdF9ub3RlcywgZG91YmxlICpvdXRf
b3B0X3RpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqb3V0X29wdF92YWx1ZXMsIFJX
SVByb3RvY29sSlNPTk9iamVjdCAqKm91dF9vcHRfcGF5bG9hZCwgaW50ICpvdXRfb3B0X2RhdGFi
YXNlSWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKipvdXRfb3B0X3NxbEVycm9yLCBUZXN0
UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgKm91dF9vcHRfc2NyZWVuQ29sb3IsIE5TQXJy
YXkvKjxOU1N0cmluZz4qLyAqKm91dF9vcHRfYWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xE
YXRhYmFzZShhbm9ueW1vdXMpICpvdXRfb3B0X3ByaW50Q29sb3IpIHsKKyAgICAgICAgYXV0byBw
cm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIFRI
Uk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihvdXRfb3B0X2NvbHVtbk5h
bWVzLCBAImNvbHVtbk5hbWVzIik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09Q
VElPTkFMX1BBUkFNRVRFUihvdXRfb3B0X25vdGVzLCBAIm5vdGVzIik7CisgICAgICAgIFRIUk9X
X0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihvdXRfb3B0X3ZhbHVlcywgQCJ2
YWx1ZXMiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1F
VEVSKG91dF9vcHRfcGF5bG9hZCwgQCJwYXlsb2FkIik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihvdXRfb3B0X3NxbEVycm9yLCBAInNxbEVycm9y
Iik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihv
dXRfb3B0X2FsdGVybmF0ZUNvbG9ycywgQCJhbHRlcm5hdGVDb2xvcnMiKTsKKyAgICAgICAgaWYg
KCEhb3V0X29wdF9jb2x1bW5OYW1lcykKKyAgICAgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdl
LT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KCpvdXRfb3B0X2Nv
bHVtbk5hbWVzKSk7CisgICAgICAgIGlmICghIW91dF9vcHRfbm90ZXMpCisgICAgICAgICAgICBw
cm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJub3RlcyJfcywgKm91dF9vcHRfbm90ZXMp
OworICAgICAgICBpZiAoISFvdXRfb3B0X3RpbWVzdGFtcCkKKyAgICAgICAgICAgIHByb3RvY29s
X2pzb25NZXNzYWdlLT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywgKm91dF9vcHRfdGltZXN0YW1w
KTsKKyAgICAgICAgaWYgKCEhb3V0X29wdF92YWx1ZXMpCisgICAgICAgICAgICBwcm90b2NvbF9q
c29uTWVzc2FnZS0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIFsqb3V0X29wdF92YWx1ZXMgdG9KU09O
T2JqZWN0XSk7CisgICAgICAgIGlmICghIW91dF9vcHRfcGF5bG9hZCkKKyAgICAgICAgICAgIHBy
b3RvY29sX2pzb25NZXNzYWdlLT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgWypvdXRfb3B0X3BheWxv
YWQgdG9KU09OT2JqZWN0XSk7CisgICAgICAgIGlmICghIW91dF9vcHRfZGF0YWJhc2VJZCkKKyAg
ICAgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRJbnRlZ2VyKCJkYXRhYmFzZUlkIl9z
LCAqb3V0X29wdF9kYXRhYmFzZUlkKTsKKyAgICAgICAgaWYgKCEhb3V0X29wdF9zcWxFcnJvcikK
KyAgICAgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRPYmplY3QoInNxbEVycm9yIl9z
LCBbKm91dF9vcHRfc3FsRXJyb3IgdG9KU09OT2JqZWN0XSk7CisgICAgICAgIGlmICghIW91dF9v
cHRfc2NyZWVuQ29sb3IpCisgICAgICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3Ry
aW5nKCJzY3JlZW5Db2xvciJfcywgdG9Qcm90b2NvbFN0cmluZygqb3V0X29wdF9zY3JlZW5Db2xv
cikpOworICAgICAgICBpZiAoISFvdXRfb3B0X2FsdGVybmF0ZUNvbG9ycykKKyAgICAgICAgICAg
IHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCB0b0pT
T05TdHJpbmdBcnJheSgqb3V0X29wdF9hbHRlcm5hdGVDb2xvcnMpKTsKKyAgICAgICAgaWYgKCEh
b3V0X29wdF9wcmludENvbG9yKQorICAgICAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNl
dFN0cmluZygicHJpbnRDb2xvciJfcywgdG9Qcm90b2NvbFN0cmluZygqb3V0X29wdF9wcmludENv
bG9yKSk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShwcm90b2Nv
bF9jYWxsSWQsIFdURk1vdmUocHJvdG9jb2xfanNvbk1lc3NhZ2UpLCBmYWxzZSk7CiAgICAgfTsK
IAotICAgIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqb19pbl9jb2x1bW5OYW1lczsKLSAgICBpZiAo
aW5fY29sdW1uTmFtZXMpCi0gICAgICAgIG9faW5fY29sdW1uTmFtZXMgPSB0b09iakNTdHJpbmdB
cnJheShpbl9jb2x1bW5OYW1lcyk7Ci0gICAgTlNTdHJpbmcgKm9faW5fbm90ZXM7Ci0gICAgaWYg
KGluX25vdGVzKQotICAgICAgICBvX2luX25vdGVzID0gKmluX25vdGVzOwotICAgIGRvdWJsZSBv
X2luX3RpbWVzdGFtcDsKLSAgICBpZiAoaW5fdGltZXN0YW1wKQotICAgICAgICBvX2luX3RpbWVz
dGFtcCA9ICppbl90aW1lc3RhbXA7Ci0gICAgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpvX2luX3Zh
bHVlczsKLSAgICBpZiAoaW5fdmFsdWVzKQotICAgICAgICBvX2luX3ZhbHVlcyA9IFtbW1JXSVBy
b3RvY29sSlNPTk9iamVjdCBhbGxvY10gaW5pdFdpdGhKU09OT2JqZWN0OmluX3ZhbHVlc10gYXV0
b3JlbGVhc2VdOwotICAgIFJXSVByb3RvY29sSlNPTk9iamVjdCAqb19pbl9wYXlsb2FkOwotICAg
IGlmIChpbl9wYXlsb2FkKQotICAgICAgICBvX2luX3BheWxvYWQgPSBbW1tSV0lQcm90b2NvbEpT
T05PYmplY3QgYWxsb2NdIGluaXRXaXRoSlNPTk9iamVjdDppbl9wYXlsb2FkXSBhdXRvcmVsZWFz
ZV07Ci0gICAgaW50IG9faW5fZGF0YWJhc2VJZDsKLSAgICBpZiAoaW5fZGF0YWJhc2VJZCkKLSAg
ICAgICAgb19pbl9kYXRhYmFzZUlkID0gKmluX2RhdGFiYXNlSWQ7Ci0gICAgVGVzdFByb3RvY29s
RGF0YWJhc2VFcnJvciAqb19pbl9zcWxFcnJvcjsKLSAgICBpZiAoaW5fc3FsRXJyb3IpCi0gICAg
ICAgIG9faW5fc3FsRXJyb3IgPSBbW1tUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yIGFsbG9jXSBp
bml0V2l0aEpTT05PYmplY3Q6aW5fc3FsRXJyb3JdIGF1dG9yZWxlYXNlXTsKLSAgICBPcHRpb25h
bDxUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnM+IG9faW5fc2NyZWVuQ29sb3I7Ci0g
ICAgaWYgKGluX3NjcmVlbkNvbG9yKQotICAgICAgICBvX2luX3NjcmVlbkNvbG9yID0gZnJvbVBy
b3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycz4oKmluX3NjcmVl
bkNvbG9yKTsKLSAgICBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKm9faW5fYWx0ZXJuYXRlQ29sb3Jz
OwotICAgIGlmIChpbl9hbHRlcm5hdGVDb2xvcnMpCi0gICAgICAgIG9faW5fYWx0ZXJuYXRlQ29s
b3JzID0gdG9PYmpDU3RyaW5nQXJyYXkoaW5fYWx0ZXJuYXRlQ29sb3JzKTsKLSAgICBPcHRpb25h
bDxUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENv
bG9yPiBvX2luX3ByaW50Q29sb3I7Ci0gICAgaWYgKGluX3ByaW50Q29sb3IpCi0gICAgICAgIG9f
aW5fcHJpbnRDb2xvciA9IGZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xEYXRhYmFzZUV4
ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yPigqaW5fcHJpbnRDb2xvcik7Ci0K
LSAgICBbbV9kZWxlZ2F0ZSBleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzV2l0aEVycm9yQ2Fs
bGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrIGNvbHVt
bk5hbWVzOihpbl9jb2x1bW5OYW1lcyA/ICZvX2luX2NvbHVtbk5hbWVzIDogbmlsKSBub3Rlczoo
aW5fbm90ZXMgPyAmb19pbl9ub3RlcyA6IG5pbCkgdGltZXN0YW1wOihpbl90aW1lc3RhbXAgPyAm
b19pbl90aW1lc3RhbXAgOiBuaWwpIHZhbHVlczooaW5fdmFsdWVzID8gJm9faW5fdmFsdWVzIDog
bmlsKSBwYXlsb2FkOihpbl9wYXlsb2FkID8gJm9faW5fcGF5bG9hZCA6IG5pbCkgZGF0YWJhc2VJ
ZDooaW5fZGF0YWJhc2VJZCA/ICZvX2luX2RhdGFiYXNlSWQgOiBuaWwpIHNxbEVycm9yOihpbl9z
cWxFcnJvciA/ICZvX2luX3NxbEVycm9yIDogbmlsKSBzY3JlZW5Db2xvcjooaW5fc2NyZWVuQ29s
b3IgPyAmb19pbl9zY3JlZW5Db2xvci52YWx1ZSgpIDogbmlsKSBhbHRlcm5hdGVDb2xvcnM6KGlu
X2FsdGVybmF0ZUNvbG9ycyA/ICZvX2luX2FsdGVybmF0ZUNvbG9ycyA6IG5pbCkgcHJpbnRDb2xv
cjooaW5fcHJpbnRDb2xvciA/ICZvX2luX3ByaW50Q29sb3IudmFsdWUoKSA6IG5pbCldOworICAg
IE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqb19pbl9vcHRfY29sdW1uTmFtZXM7CisgICAgaWYgKCEh
aW5fb3B0X2NvbHVtbk5hbWVzKQorICAgICAgICBvX2luX29wdF9jb2x1bW5OYW1lcyA9IHRvT2Jq
Q1N0cmluZ0FycmF5KGluX29wdF9jb2x1bW5OYW1lcy5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICBO
U1N0cmluZyAqb19pbl9vcHRfbm90ZXM7CisgICAgaWYgKCEhaW5fb3B0X25vdGVzKQorICAgICAg
ICBvX2luX29wdF9ub3RlcyA9IGluX29wdF9ub3RlczsKKyAgICBkb3VibGUgb19pbl9vcHRfdGlt
ZXN0YW1wOworICAgIGlmICghIWluX29wdF90aW1lc3RhbXApCisgICAgICAgIG9faW5fb3B0X3Rp
bWVzdGFtcCA9ICppbl9vcHRfdGltZXN0YW1wOworICAgIFJXSVByb3RvY29sSlNPTk9iamVjdCAq
b19pbl9vcHRfdmFsdWVzOworICAgIGlmICghIWluX29wdF92YWx1ZXMpCisgICAgICAgIG9faW5f
b3B0X3ZhbHVlcyA9IFtbW1JXSVByb3RvY29sSlNPTk9iamVjdCBhbGxvY10gaW5pdFdpdGhKU09O
T2JqZWN0OmluX29wdF92YWx1ZXMucmVsZWFzZU5vbk51bGwoKV0gYXV0b3JlbGVhc2VdOworICAg
IFJXSVByb3RvY29sSlNPTk9iamVjdCAqb19pbl9vcHRfcGF5bG9hZDsKKyAgICBpZiAoISFpbl9v
cHRfcGF5bG9hZCkKKyAgICAgICAgb19pbl9vcHRfcGF5bG9hZCA9IFtbW1JXSVByb3RvY29sSlNP
Tk9iamVjdCBhbGxvY10gaW5pdFdpdGhKU09OT2JqZWN0OmluX29wdF9wYXlsb2FkLnJlbGVhc2VO
b25OdWxsKCldIGF1dG9yZWxlYXNlXTsKKyAgICBpbnQgb19pbl9vcHRfZGF0YWJhc2VJZDsKKyAg
ICBpZiAoISFpbl9vcHRfZGF0YWJhc2VJZCkKKyAgICAgICAgb19pbl9vcHRfZGF0YWJhc2VJZCA9
ICppbl9vcHRfZGF0YWJhc2VJZDsKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICpvX2lu
X29wdF9zcWxFcnJvcjsKKyAgICBpZiAoISFpbl9vcHRfc3FsRXJyb3IpCisgICAgICAgIG9faW5f
b3B0X3NxbEVycm9yID0gW1tbVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciBhbGxvY10gaW5pdFdp
dGhKU09OT2JqZWN0OmluX29wdF9zcWxFcnJvci5yZWxlYXNlTm9uTnVsbCgpXSBhdXRvcmVsZWFz
ZV07CisgICAgT3B0aW9uYWw8VGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzPiBvX2lu
X29wdF9zY3JlZW5Db2xvcjsKKyAgICBpZiAoISFpbl9vcHRfc2NyZWVuQ29sb3IpCisgICAgICAg
IG9faW5fb3B0X3NjcmVlbkNvbG9yID0gZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbERh
dGFiYXNlUHJpbWFyeUNvbG9ycz4oaW5fb3B0X3NjcmVlbkNvbG9yKTsKKyAgICBOU0FycmF5Lyo8
TlNTdHJpbmc+Ki8gKm9faW5fb3B0X2FsdGVybmF0ZUNvbG9yczsKKyAgICBpZiAoISFpbl9vcHRf
YWx0ZXJuYXRlQ29sb3JzKQorICAgICAgICBvX2luX29wdF9hbHRlcm5hdGVDb2xvcnMgPSB0b09i
akNTdHJpbmdBcnJheShpbl9vcHRfYWx0ZXJuYXRlQ29sb3JzLnJlbGVhc2VOb25OdWxsKCkpOwor
ICAgIE9wdGlvbmFsPFRlc3RQcm90b2NvbERhdGFiYXNlKGFub255bW91cyk+IG9faW5fb3B0X3By
aW50Q29sb3I7CisgICAgaWYgKCEhaW5fb3B0X3ByaW50Q29sb3IpCisgICAgICAgIG9faW5fb3B0
X3ByaW50Q29sb3IgPSBmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sRGF0YWJhc2UoYW5v
bnltb3VzKT4oaW5fb3B0X3ByaW50Q29sb3IpOworICAgIFttX2RlbGVnYXRlIGV4ZWN1dGVBbGxP
cHRpb25hbFBhcmFtZXRlcnNXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3ND
YWxsYmFjazpzdWNjZXNzQ2FsbGJhY2sgY29sdW1uTmFtZXM6KCEhaW5fb3B0X2NvbHVtbk5hbWVz
ID8gJm9faW5fb3B0X2NvbHVtbk5hbWVzIDogbmlsKSBub3RlczooISFpbl9vcHRfbm90ZXMgPyAm
b19pbl9vcHRfbm90ZXMgOiBuaWwpIHRpbWVzdGFtcDooISFpbl9vcHRfdGltZXN0YW1wID8gJm9f
aW5fb3B0X3RpbWVzdGFtcCA6IG5pbCkgdmFsdWVzOighIWluX29wdF92YWx1ZXMgPyAmb19pbl9v
cHRfdmFsdWVzIDogbmlsKSBwYXlsb2FkOighIWluX29wdF9wYXlsb2FkID8gJm9faW5fb3B0X3Bh
eWxvYWQgOiBuaWwpIGRhdGFiYXNlSWQ6KCEhaW5fb3B0X2RhdGFiYXNlSWQgPyAmb19pbl9vcHRf
ZGF0YWJhc2VJZCA6IG5pbCkgc3FsRXJyb3I6KCEhaW5fb3B0X3NxbEVycm9yID8gJm9faW5fb3B0
X3NxbEVycm9yIDogbmlsKSBzY3JlZW5Db2xvcjooISFpbl9vcHRfc2NyZWVuQ29sb3IgPyAmb19p
bl9vcHRfc2NyZWVuQ29sb3IudmFsdWUoKSA6IG5pbCkgYWx0ZXJuYXRlQ29sb3JzOighIWluX29w
dF9hbHRlcm5hdGVDb2xvcnMgPyAmb19pbl9vcHRfYWx0ZXJuYXRlQ29sb3JzIDogbmlsKSBwcmlu
dENvbG9yOighIWluX29wdF9wcmludENvbG9yID8gJm9faW5fb3B0X3ByaW50Q29sb3IudmFsdWUo
KSA6IG5pbCldOwogfQogCi12b2lkIE9iakNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRj
aGVyOjpleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMobG9uZyByZXF1ZXN0SWQsIGNvbnN0IEpT
T046OkFycmF5JiBpbl9jb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBpbl9ub3RlcywgZG91Ymxl
IGluX3RpbWVzdGFtcCwgY29uc3QgSlNPTjo6T2JqZWN0JiBpbl92YWx1ZXMsIEpTT046OlZhbHVl
IGluX3BheWxvYWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBKU09OOjpPYmplY3QmIGluX3Nx
bEVycm9yLCBjb25zdCBTdHJpbmcmIGluX3NjcmVlbkNvbG9yLCBjb25zdCBKU09OOjpBcnJheSYg
aW5fYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcmIGluX3ByaW50Q29sb3IpCit2b2lkIE9i
akNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlTm9PcHRpb25hbFBh
cmFtZXRlcnMobG9uZyBwcm90b2NvbF9jYWxsSWQsIFJlZjxKU09OOjpBcnJheT4mJiBpbl9jb2x1
bW5OYW1lcywgY29uc3QgU3RyaW5nJiBpbl9ub3RlcywgZG91YmxlIGluX3RpbWVzdGFtcCwgUmVm
PEpTT046Ok9iamVjdD4mJiBpbl92YWx1ZXMsIFJlZjxKU09OOjpWYWx1ZT4mJiBpbl9wYXlsb2Fk
LCBpbnQgaW5fZGF0YWJhc2VJZCwgUmVmPEpTT046Ok9iamVjdD4mJiBpbl9zcWxFcnJvciwgY29u
c3QgU3RyaW5nJiBpbl9zY3JlZW5Db2xvciwgUmVmPEpTT046OkFycmF5PiYmIGluX2FsdGVybmF0
ZUNvbG9ycywgY29uc3QgU3RyaW5nJiBpbl9wcmludENvbG9yKQogewogICAgIGlmICghW21fZGVs
ZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihleGVjdXRlTm9PcHRpb25hbFBhcmFt
ZXRlcnNXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6Y29sdW1uTmFtZXM6bm90ZXM6
dGltZXN0YW1wOnZhbHVlczpwYXlsb2FkOmRhdGFiYXNlSWQ6c3FsRXJyb3I6c2NyZWVuQ29sb3I6
YWx0ZXJuYXRlQ29sb3JzOnByaW50Q29sb3I6KV0pIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNo
ZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpN
ZXRob2ROb3RGb3VuZCwgIidEYXRhYmFzZS5leGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMnIHdh
cyBub3QgZm91bmQiX3MpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90
b2NvbEVycm9yKHByb3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZv
dW5kLCAiJ0RhdGFiYXNlLmV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycycgd2FzIG5vdCBmb3Vu
ZCJfcyk7CiAgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0
cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9j
b2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3Ip
OworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHByb3Rv
Y29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CiAgICAg
ICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgfTsKIAot
ICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF4oTlNBcnJheS8qPE5TU3RyaW5nPiovICpjb2x1bW5O
YW1lcywgTlNTdHJpbmcgKm5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05P
YmplY3QgKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpwYXlsb2FkLCBpbnQgZGF0YWJh
c2VJZCwgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqc3FsRXJyb3IsIFRlc3RQcm90b2NvbERh
dGFiYXNlUHJpbWFyeUNvbG9ycyBzY3JlZW5Db2xvciwgTlNBcnJheS8qPE5TU3RyaW5nPiovICph
bHRlcm5hdGVDb2xvcnMsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJh
bWV0ZXJzUHJpbnRDb2xvciBwcmludENvbG9yKSB7Ci0gICAgICAgIFJlZjxKU09OOjpPYmplY3Q+
IHJlc3VsdE9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKGNvbHVtbk5hbWVzLCBAImNvbHVtbk5hbWVz
Iik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKG5vdGVz
LCBAIm5vdGVzIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1F
VEVSKHZhbHVlcywgQCJ2YWx1ZXMiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFV
SVJFRF9QQVJBTUVURVIocGF5bG9hZCwgQCJwYXlsb2FkIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQ
VElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKHNxbEVycm9yLCBAInNxbEVycm9yIik7Ci0gICAg
ICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKGFsdGVybmF0ZUNvbG9y
cywgQCJhbHRlcm5hdGVDb2xvcnMiKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRBcnJheSgi
Y29sdW1uTmFtZXMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KGNvbHVtbk5hbWVzKSk7Ci0gICAgICAg
IHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKCJub3RlcyJfcywgbm90ZXMpOwotICAgICAgICByZXN1
bHRPYmplY3QtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCB0aW1lc3RhbXApOwotICAgICAgICBy
ZXN1bHRPYmplY3QtPnNldE9iamVjdCgidmFsdWVzIl9zLCBbdmFsdWVzIHRvSlNPTk9iamVjdF0p
OwotICAgICAgICByZXN1bHRPYmplY3QtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCBbcGF5bG9hZCB0
b0pTT05PYmplY3RdKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRJbnRlZ2VyKCJkYXRhYmFz
ZUlkIl9zLCBkYXRhYmFzZUlkKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRPYmplY3QoInNx
bEVycm9yIl9zLCBbc3FsRXJyb3IgdG9KU09OT2JqZWN0XSk7Ci0gICAgICAgIHJlc3VsdE9iamVj
dC0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgdG9Qcm90b2NvbFN0cmluZyhzY3JlZW5Db2xv
cikpOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3Ms
IHRvSlNPTlN0cmluZ0FycmF5KGFsdGVybmF0ZUNvbG9ycykpOwotICAgICAgICByZXN1bHRPYmpl
Y3QtPnNldFN0cmluZygicHJpbnRDb2xvciJfcywgdG9Qcm90b2NvbFN0cmluZyhwcmludENvbG9y
KSk7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQs
IFdURk1vdmUocmVzdWx0T2JqZWN0KSwgZmFsc2UpOworICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9
IF4oTlNBcnJheS8qPE5TU3RyaW5nPiovICpvdXRfY29sdW1uTmFtZXMsIE5TU3RyaW5nICpvdXRf
bm90ZXMsIGRvdWJsZSBvdXRfdGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKm91dF92
YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqb3V0X3BheWxvYWQsIGludCBvdXRfZGF0YWJh
c2VJZCwgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqb3V0X3NxbEVycm9yLCBUZXN0UHJvdG9j
b2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgb3V0X3NjcmVlbkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJp
bmc+Ki8gKm91dF9hbHRlcm5hdGVDb2xvcnMsIFRlc3RQcm90b2NvbERhdGFiYXNlKGFub255bW91
cykgb3V0X3ByaW50Q29sb3IpIHsKKyAgICAgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9
IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVR
VUlSRURfUEFSQU1FVEVSKG91dF9jb2x1bW5OYW1lcywgQCJjb2x1bW5OYW1lcyIpOworICAgICAg
ICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihvdXRfbm90ZXMsIEAibm90
ZXMiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIob3V0
X3ZhbHVlcywgQCJ2YWx1ZXMiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJF
RF9QQVJBTUVURVIob3V0X3BheWxvYWQsIEAicGF5bG9hZCIpOworICAgICAgICBUSFJPV19FWENF
UFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihvdXRfc3FsRXJyb3IsIEAic3FsRXJyb3IiKTsK
KyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIob3V0X2FsdGVy
bmF0ZUNvbG9ycywgQCJhbHRlcm5hdGVDb2xvcnMiKTsKKyAgICAgICAgcHJvdG9jb2xfanNvbk1l
c3NhZ2UtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgdG9KU09OU3RyaW5nQXJyYXkob3V0X2Nv
bHVtbk5hbWVzKSk7CisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm5v
dGVzIl9zLCBvdXRfbm90ZXMpOworICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0RG91
YmxlKCJ0aW1lc3RhbXAiX3MsIG91dF90aW1lc3RhbXApOworICAgICAgICBwcm90b2NvbF9qc29u
TWVzc2FnZS0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIFtvdXRfdmFsdWVzIHRvSlNPTk9iamVjdF0p
OworICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0VmFsdWUoInBheWxvYWQiX3MsIFtv
dXRfcGF5bG9hZCB0b0pTT05PYmplY3RdKTsKKyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2Ut
PnNldEludGVnZXIoImRhdGFiYXNlSWQiX3MsIG91dF9kYXRhYmFzZUlkKTsKKyAgICAgICAgcHJv
dG9jb2xfanNvbk1lc3NhZ2UtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIFtvdXRfc3FsRXJyb3Ig
dG9KU09OT2JqZWN0XSk7CisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJpbmco
InNjcmVlbkNvbG9yIl9zLCB0b1Byb3RvY29sU3RyaW5nKG91dF9zY3JlZW5Db2xvcikpOworICAg
ICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywg
dG9KU09OU3RyaW5nQXJyYXkob3V0X2FsdGVybmF0ZUNvbG9ycykpOworICAgICAgICBwcm90b2Nv
bF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCB0b1Byb3RvY29sU3RyaW5n
KG91dF9wcmludENvbG9yKSk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNw
b25zZShwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJvdG9jb2xfanNvbk1lc3NhZ2UpLCBmYWxz
ZSk7CiAgICAgfTsKIAotICAgIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqb19pbl9jb2x1bW5OYW1l
cyA9IHRvT2JqQ1N0cmluZ0FycmF5KCZpbl9jb2x1bW5OYW1lcyk7CisgICAgTlNBcnJheS8qPE5T
U3RyaW5nPiovICpvX2luX2NvbHVtbk5hbWVzID0gdG9PYmpDU3RyaW5nQXJyYXkoV1RGTW92ZShp
bl9jb2x1bW5OYW1lcykpOwogICAgIE5TU3RyaW5nICpvX2luX25vdGVzID0gaW5fbm90ZXM7CiAg
ICAgZG91YmxlIG9faW5fdGltZXN0YW1wID0gaW5fdGltZXN0YW1wOwotICAgIFJXSVByb3RvY29s
SlNPTk9iamVjdCAqb19pbl92YWx1ZXMgPSBbW1tSV0lQcm90b2NvbEpTT05PYmplY3QgYWxsb2Nd
IGluaXRXaXRoSlNPTk9iamVjdDomaW5fdmFsdWVzXSBhdXRvcmVsZWFzZV07Ci0gICAgUldJUHJv
dG9jb2xKU09OT2JqZWN0ICpvX2luX3BheWxvYWQgPSBbW1tSV0lQcm90b2NvbEpTT05PYmplY3Qg
YWxsb2NdIGluaXRXaXRoSlNPTk9iamVjdDomaW5fcGF5bG9hZF0gYXV0b3JlbGVhc2VdOworICAg
IFJXSVByb3RvY29sSlNPTk9iamVjdCAqb19pbl92YWx1ZXMgPSBbW1tSV0lQcm90b2NvbEpTT05P
YmplY3QgYWxsb2NdIGluaXRXaXRoSlNPTk9iamVjdDpXVEZNb3ZlKGluX3ZhbHVlcyldIGF1dG9y
ZWxlYXNlXTsKKyAgICBSV0lQcm90b2NvbEpTT05PYmplY3QgKm9faW5fcGF5bG9hZCA9IFtbW1JX
SVByb3RvY29sSlNPTk9iamVjdCBhbGxvY10gaW5pdFdpdGhKU09OT2JqZWN0OldURk1vdmUoaW5f
cGF5bG9hZCldIGF1dG9yZWxlYXNlXTsKICAgICBpbnQgb19pbl9kYXRhYmFzZUlkID0gaW5fZGF0
YWJhc2VJZDsKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICpvX2luX3NxbEVycm9yID0g
W1tbVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciBhbGxvY10gaW5pdFdpdGhKU09OT2JqZWN0OiZp
bl9zcWxFcnJvcl0gYXV0b3JlbGVhc2VdOworICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3Ig
Km9faW5fc3FsRXJyb3IgPSBbW1tUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yIGFsbG9jXSBpbml0
V2l0aEpTT05PYmplY3Q6V1RGTW92ZShpbl9zcWxFcnJvcildIGF1dG9yZWxlYXNlXTsKICAgICBP
cHRpb25hbDxUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnM+IG9faW5fc2NyZWVuQ29s
b3IgPSBmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3Jz
Pihpbl9zY3JlZW5Db2xvcik7CiAgICAgaWYgKCFvX2luX3NjcmVlbkNvbG9yKSB7CiAgICAgICAg
IGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNo
ZXI6OkludmFsaWRQYXJhbXMsICJQYXJhbWV0ZXIgJ3NjcmVlbkNvbG9yJyBvZiBtZXRob2QgJ0Rh
dGFiYXNlLmV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycycgY2Fubm90IGJlIHByb2Nlc3NlZCJf
cyk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgTlNBcnJheS8qPE5TU3RyaW5nPiovICpv
X2luX2FsdGVybmF0ZUNvbG9ycyA9IHRvT2JqQ1N0cmluZ0FycmF5KCZpbl9hbHRlcm5hdGVDb2xv
cnMpOwotICAgIE9wdGlvbmFsPFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQ
YXJhbWV0ZXJzUHJpbnRDb2xvcj4gb19pbl9wcmludENvbG9yID0gZnJvbVByb3RvY29sU3RyaW5n
PFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xv
cj4oaW5fcHJpbnRDb2xvcik7CisgICAgTlNBcnJheS8qPE5TU3RyaW5nPiovICpvX2luX2FsdGVy
bmF0ZUNvbG9ycyA9IHRvT2JqQ1N0cmluZ0FycmF5KFdURk1vdmUoaW5fYWx0ZXJuYXRlQ29sb3Jz
KSk7CisgICAgT3B0aW9uYWw8VGVzdFByb3RvY29sRGF0YWJhc2UoYW5vbnltb3VzKT4gb19pbl9w
cmludENvbG9yID0gZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbERhdGFiYXNlKGFub255
bW91cyk+KGluX3ByaW50Q29sb3IpOwogICAgIGlmICghb19pbl9wcmludENvbG9yKSB7CiAgICAg
ICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3Bh
dGNoZXI6OkludmFsaWRQYXJhbXMsICJQYXJhbWV0ZXIgJ3ByaW50Q29sb3InIG9mIG1ldGhvZCAn
RGF0YWJhc2UuZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzJyBjYW5ub3QgYmUgcHJvY2Vzc2Vk
Il9zKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLQogICAgIFttX2RlbGVnYXRlIGV4ZWN1dGVO
b09wdGlvbmFsUGFyYW1ldGVyc1dpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vz
c0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjayBjb2x1bW5OYW1lczpvX2luX2NvbHVtbk5hbWVzIG5v
dGVzOm9faW5fbm90ZXMgdGltZXN0YW1wOm9faW5fdGltZXN0YW1wIHZhbHVlczpvX2luX3ZhbHVl
cyBwYXlsb2FkOm9faW5fcGF5bG9hZCBkYXRhYmFzZUlkOm9faW5fZGF0YWJhc2VJZCBzcWxFcnJv
cjpvX2luX3NxbEVycm9yIHNjcmVlbkNvbG9yOm9faW5fc2NyZWVuQ29sb3IudmFsdWUoKSBhbHRl
cm5hdGVDb2xvcnM6b19pbl9hbHRlcm5hdGVDb2xvcnMgcHJpbnRDb2xvcjpvX2luX3ByaW50Q29s
b3IudmFsdWUoKV07CiB9CiAKQEAgLTEyMTMsOCArMTE4NSw4IEBAIF9fYXR0cmlidXRlX18oKHZp
c2liaWxpdHkgKCJkZWZhdWx0IikpKQogCiBAcHJvdG9jb2wgVGVzdFByb3RvY29sRGF0YWJhc2VE
b21haW5IYW5kbGVyIDxOU09iamVjdD4KIEBvcHRpb25hbAotLSAodm9pZClleGVjdXRlQWxsT3B0
aW9uYWxQYXJhbWV0ZXJzV2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9y
KSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKShOU0FycmF5Lyo8TlNTdHJp
bmc+Ki8gKipjb2x1bW5OYW1lcywgTlNTdHJpbmcgKipub3RlcywgZG91YmxlICp0aW1lc3RhbXAs
IFJXSVByb3RvY29sSlNPTk9iamVjdCAqKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICoq
cGF5bG9hZCwgaW50ICpkYXRhYmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoqc3Fs
RXJyb3IsIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyAqc2NyZWVuQ29sb3IsIE5T
QXJyYXkvKjxOU1N0cmluZz4qLyAqKmFsdGVybmF0ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0YWJh
c2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvciAqcHJpbnRDb2xvcikpc3Vj
Y2Vzc0NhbGxiYWNrIGNvbHVtbk5hbWVzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiopY29sdW1u
TmFtZXMgbm90ZXM6KE5TU3RyaW5nICoqKW5vdGVzIHRpbWVzdGFtcDooZG91YmxlICopdGltZXN0
YW1wIHZhbHVlczooUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqKXZhbHVlcyBwYXlsb2FkOihSV0lQ
cm90b2NvbEpTT05PYmplY3QgKiopcGF5bG9hZCBkYXRhYmFzZUlkOihpbnQgKilkYXRhYmFzZUlk
IHNxbEVycm9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoqKXNxbEVycm9yIHNjcmVlbkNv
bG9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgKilzY3JlZW5Db2xvciBhbHRl
cm5hdGVDb2xvcnM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKilhbHRlcm5hdGVDb2xvcnMgcHJp
bnRDb2xvcjooVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJz
UHJpbnRDb2xvciAqKXByaW50Q29sb3I7Ci0tICh2b2lkKWV4ZWN1dGVOb09wdGlvbmFsUGFyYW1l
dGVyc1dpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxs
YmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikoTlNBcnJheS8qPE5TU3RyaW5nPiovICpjb2x1
bW5OYW1lcywgTlNTdHJpbmcgKm5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBSV0lQcm90b2NvbEpT
T05PYmplY3QgKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpwYXlsb2FkLCBpbnQgZGF0
YWJhc2VJZCwgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqc3FsRXJyb3IsIFRlc3RQcm90b2Nv
bERhdGFiYXNlUHJpbWFyeUNvbG9ycyBzY3JlZW5Db2xvciwgTlNBcnJheS8qPE5TU3RyaW5nPiov
ICphbHRlcm5hdGVDb2xvcnMsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQ
YXJhbWV0ZXJzUHJpbnRDb2xvciBwcmludENvbG9yKSlzdWNjZXNzQ2FsbGJhY2sgY29sdW1uTmFt
ZXM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWNvbHVtbk5hbWVzIG5vdGVzOihOU1N0cmluZyAq
KW5vdGVzIHRpbWVzdGFtcDooZG91YmxlKXRpbWVzdGFtcCB2YWx1ZXM6KFJXSVByb3RvY29sSlNP
Tk9iamVjdCAqKXZhbHVlcyBwYXlsb2FkOihSV0lQcm90b2NvbEpTT05PYmplY3QgKilwYXlsb2Fk
IGRhdGFiYXNlSWQ6KGludClkYXRhYmFzZUlkIHNxbEVycm9yOihUZXN0UHJvdG9jb2xEYXRhYmFz
ZUVycm9yICopc3FsRXJyb3Igc2NyZWVuQ29sb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFy
eUNvbG9ycylzY3JlZW5Db2xvciBhbHRlcm5hdGVDb2xvcnM6KE5TQXJyYXkvKjxOU1N0cmluZz4q
LyAqKWFsdGVybmF0ZUNvbG9ycyBwcmludENvbG9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1
dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3IpcHJpbnRDb2xvcjsKKy0gKHZvaWQpZXhl
Y3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1dpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3Ry
aW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikoTlNBcnJh
eS8qPE5TU3RyaW5nPiovICoqY29sdW1uTmFtZXMsIE5TU3RyaW5nICoqbm90ZXMsIGRvdWJsZSAq
dGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKip2YWx1ZXMsIFJXSVByb3RvY29sSlNP
Tk9iamVjdCAqKnBheWxvYWQsIGludCAqZGF0YWJhc2VJZCwgVGVzdFByb3RvY29sRGF0YWJhc2VF
cnJvciAqKnNxbEVycm9yLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgKnNjcmVl
bkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiphbHRlcm5hdGVDb2xvcnMsIFRlc3RQcm90
b2NvbERhdGFiYXNlKGFub255bW91cykgKnByaW50Q29sb3IpKXN1Y2Nlc3NDYWxsYmFjayBjb2x1
bW5OYW1lczooTlNBcnJheS8qPE5TU3RyaW5nPiovICoqKWNvbHVtbk5hbWVzIG5vdGVzOihOU1N0
cmluZyAqKilub3RlcyB0aW1lc3RhbXA6KGRvdWJsZSAqKXRpbWVzdGFtcCB2YWx1ZXM6KFJXSVBy
b3RvY29sSlNPTk9iamVjdCAqKil2YWx1ZXMgcGF5bG9hZDooUldJUHJvdG9jb2xKU09OT2JqZWN0
ICoqKXBheWxvYWQgZGF0YWJhc2VJZDooaW50ICopZGF0YWJhc2VJZCBzcWxFcnJvcjooVGVzdFBy
b3RvY29sRGF0YWJhc2VFcnJvciAqKilzcWxFcnJvciBzY3JlZW5Db2xvcjooVGVzdFByb3RvY29s
RGF0YWJhc2VQcmltYXJ5Q29sb3JzICopc2NyZWVuQ29sb3IgYWx0ZXJuYXRlQ29sb3JzOihOU0Fy
cmF5Lyo8TlNTdHJpbmc+Ki8gKiopYWx0ZXJuYXRlQ29sb3JzIHByaW50Q29sb3I6KFRlc3RQcm90
b2NvbERhdGFiYXNlKGFub255bW91cykgKilwcmludENvbG9yOworLSAodm9pZClleGVjdXRlTm9P
cHRpb25hbFBhcmFtZXRlcnNXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJy
b3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKE5TQXJyYXkvKjxOU1N0
cmluZz4qLyAqY29sdW1uTmFtZXMsIE5TU3RyaW5nICpub3RlcywgZG91YmxlIHRpbWVzdGFtcCwg
UldJUHJvdG9jb2xKU09OT2JqZWN0ICp2YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqcGF5
bG9hZCwgaW50IGRhdGFiYXNlSWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKnNxbEVycm9y
LCBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgc2NyZWVuQ29sb3IsIE5TQXJyYXkv
KjxOU1N0cmluZz4qLyAqYWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZShhbm9u
eW1vdXMpIHByaW50Q29sb3IpKXN1Y2Nlc3NDYWxsYmFjayBjb2x1bW5OYW1lczooTlNBcnJheS8q
PE5TU3RyaW5nPiovICopY29sdW1uTmFtZXMgbm90ZXM6KE5TU3RyaW5nICopbm90ZXMgdGltZXN0
YW1wOihkb3VibGUpdGltZXN0YW1wIHZhbHVlczooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopdmFs
dWVzIHBheWxvYWQ6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXBheWxvYWQgZGF0YWJhc2VJZDoo
aW50KWRhdGFiYXNlSWQgc3FsRXJyb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKilzcWxF
cnJvciBzY3JlZW5Db2xvcjooVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzKXNjcmVl
bkNvbG9yIGFsdGVybmF0ZUNvbG9yczooTlNBcnJheS8qPE5TU3RyaW5nPiovICopYWx0ZXJuYXRl
Q29sb3JzIHByaW50Q29sb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlKGFub255bW91cykpcHJpbnRD
b2xvcjsKIEBlbmQKIAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0u
anNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZXhwZWN0ZWQvZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbi1yZXN1bHQKaW5k
ZXggZDAyYmVkN2I4ZDZlMmZlMDJhNTI0MmVkMTIyZjRhMjg0ZjkwYzliOS4uYjMwZGYxNzBhYWJh
NTk3YjM2MTk2MjRiYWQ2NzkzNTE1MzNlNDQ4YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2RlZmluaXRpb25zLXdpdGgt
bWFjLXBsYXRmb3JtLmpzb24tcmVzdWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9kZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9y
bS5qc29uLXJlc3VsdApAQCAtNzYsNyArNzYsNyBAQCBJbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRl
RG9tYWluKCJOZXR3b3JrIiwgbnVsbCk7CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKIAotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVk
ZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yRnJvbnRlbmRSb3V0ZXIuaD4KIApAQCAtOTYsNyArOTYsNyBAQCBjbGFzcyBBbHRlcm5hdGVO
ZXR3b3JrQmFja2VuZERpc3BhdGNoZXIgOiBwdWJsaWMgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNo
ZXIgewogcHVibGljOgogICAgIHZpcnR1YWwgfkFsdGVybmF0ZU5ldHdvcmtCYWNrZW5kRGlzcGF0
Y2hlcigpIHsgfQogI2lmIENPTU1BTkQtTUFDCi0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJj
ZShsb25nIGNhbGxJZCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UobG9uZyBw
cm90b2NvbF9jYWxsSWQpID0gMDsKICNlbmRpZiAvLyBDT01NQU5ELU1BQwogfTsKICNlbmRpZiAv
LyBET01BSU4tTUFDCkBAIC0xNDAsMTEgKzE0MCwxNCBAQCBwdWJsaWM6CiAKICNpbmNsdWRlICJU
ZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx0dXBsZT4KKyNpbmNsdWRlIDx3dGYvRXhw
ZWN0ZWQuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKLXR5cGVkZWYgU3RyaW5nIEVy
cm9yU3RyaW5nOworCiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVS
UykKICNpZiBET01BSU4tTUFDCkBAIC0xNTYsNyArMTU5LDcgQEAgY2xhc3MgQWx0ZXJuYXRlTmV0
d29ya0JhY2tlbmREaXNwYXRjaGVyOwogY2xhc3MgTmV0d29ya0JhY2tlbmREaXNwYXRjaGVySGFu
ZGxlciB7CiBwdWJsaWM6CiAjaWYgQ09NTUFORC1NQUMKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJl
c291cmNlKEVycm9yU3RyaW5nJikgPSAwOworICAgIHZpcnR1YWwgUHJvdG9jb2w6OkVycm9yU3Ry
aW5nT3I8dm9pZD4gbG9hZFJlc291cmNlKCkgPSAwOwogI2VuZGlmIC8vIENPTU1BTkQtTUFDCiBw
cm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB+TmV0d29ya0JhY2tlbmREaXNwYXRjaGVySGFuZGxlcigp
OwpAQCAtMTY3LDEwICsxNzAsMTAgQEAgcHJvdGVjdGVkOgogY2xhc3MgTmV0d29ya0JhY2tlbmRE
aXNwYXRjaGVyIGZpbmFsIDogcHVibGljIFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIHsK
IHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRl
KEJhY2tlbmREaXNwYXRjaGVyJiwgTmV0d29ya0JhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwot
ICAgIHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBS
ZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpIGZpbmFsOworICAgIHZvaWQgZGlzcGF0Y2gobG9u
ZyBwcm90b2NvbF9jYWxsSWQsIGNvbnN0IFN0cmluZyYgcHJvdG9jb2xfbWV0aG9kLCBSZWY8SlNP
Tjo6T2JqZWN0PiYmIHByb3RvY29sX21lc3NhZ2UpIGZpbmFsOwogcHJpdmF0ZToKICNpZiBDT01N
QU5ELU1BQwotICAgIHZvaWQgbG9hZFJlc291cmNlKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNP
Tjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOworICAgIHZvaWQgbG9hZFJlc291cmNlKGxvbmcgcHJv
dG9jbF9jYWxsSWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfcGFyYW1ldGVycyk7
CiAjZW5kaWYgLy8gQ09NTUFORC1NQUMKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9E
SVNQQVRDSEVSUykKIHB1YmxpYzoKQEAgLTIyMSw5ICsyMjQsNyBAQCBwcml2YXRlOgogI2luY2x1
ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4K
ICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3Ry
aW5nLmg+CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKICNp
bmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCkBAIC0yNDgsNDEgKzI0
OSw0MSBAQCBOZXR3b3JrQmFja2VuZERpc3BhdGNoZXI6Ok5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hl
cihCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpcwogICAgIG1fYmFja2VuZERpc3BhdGNoZXIt
PnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbigiTmV0d29yayJfcywgdGhpcyk7CiB9CiAKLXZv
aWQgTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29u
c3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkKK3ZvaWQgTmV0
d29ya0JhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHByb3RvY29sX2NhbGxJZCwgY29u
c3QgU3RyaW5nJiBwcm90b2NvbF9tZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xf
bWVzc2FnZSkKIHsKICAgICBSZWY8TmV0d29ya0JhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0
aGlzKTsKIAotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnM7Ci0gICAgbWVzc2Fn
ZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3MsIHBhcmFtZXRlcnMpOworICAgIGF1dG8gcHJvdG9jb2xf
cGFyYW1ldGVycyA9IHByb3RvY29sX21lc3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9zKTsKIAog
I2lmIENPTU1BTkQtTUFDCi0gICAgaWYgKG1ldGhvZCA9PSAibG9hZFJlc291cmNlIikgewotICAg
ICAgICBsb2FkUmVzb3VyY2UocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKKyAgICBp
ZiAocHJvdG9jb2xfbWV0aG9kID09ICJsb2FkUmVzb3VyY2UiKSB7CisgICAgICAgIGxvYWRSZXNv
dXJjZShwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJvdG9jb2xfcGFyYW1ldGVycykpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmIC8vIENPTU1BTkQtTUFDCiAKLSAgICBtX2JhY2tl
bmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRo
b2ROb3RGb3VuZCwgIidOZXR3b3JrLiIgKyBtZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7Cisg
ICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0
Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29yay4iICsgcHJvdG9jb2xfbWV0aG9kICsgIicg
d2FzIG5vdCBmb3VuZCIpOwogfQogCiAjaWYgQ09NTUFORC1NQUMKLXZvaWQgTmV0d29ya0JhY2tl
bmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpP
YmplY3Q+JiYpCit2b2lkIE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlKGxv
bmcgcHJvdG9jb2xfY2FsbElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQogewogI2lmIEVOQUJM
RShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogICAgIGlmIChtX2FsdGVybmF0ZURp
c3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVzb3VyY2Uo
cmVxdWVzdElkKTsKKyAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVzb3VyY2Uo
cHJvdG9jb2xfY2FsbElkKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZiAvLyBFTkFC
TEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIAotICAgIEVycm9yU3RyaW5nIGVy
cm9yOwotICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRl
KCk7Ci0gICAgbV9hZ2VudC0+bG9hZFJlc291cmNlKGVycm9yKTsKKyAgICBhdXRvIHJlc3VsdCA9
IG1fYWdlbnQtPmxvYWRSZXNvdXJjZSgpOworICAgIGlmICghcmVzdWx0KSB7CisgICAgICAgIEFT
U0VSVCghcmVzdWx0LmVycm9yKCkuaXNFbXB0eSgpKTsKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0
Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3Is
IHJlc3VsdC5lcnJvcigpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIGlmICghZXJy
b3IubGVuZ3RoKCkpCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShy
ZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2UpOwotICAgIGVsc2UKLSAgICAgICAgbV9i
YWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6
U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKKyAgICBhdXRvIHByb3RvY29sX2pzb25NZXNz
YWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5z
ZW5kUmVzcG9uc2UocHJvdG9jb2xfY2FsbElkLCBXVEZNb3ZlKHByb3RvY29sX2pzb25NZXNzYWdl
KSwgZmFsc2UpOwogfQogI2VuZGlmIC8vIENPTU1BTkQtTUFDCiAjZW5kaWYgLy8gRE9NQUlOLU1B
QwpAQCAtMzI1LDYgKzMyNiw3IEBAIHZvaWQgTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyOjpsb2Fk
UmVzb3VyY2UobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+CiAKICNpbmNsdWRl
ICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNp
bmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
IAogbmFtZXNwYWNlIEluc3BlY3RvciB7CkBAIC0zODEsNyArMzgzLDYgQEAgcHJpdmF0ZToKICNp
bmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3Ry
aW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC0zODksMTAgKzM5MCwxMCBAQCBu
YW1lc3BhY2UgSW5zcGVjdG9yIHsKICNpZiBFVkVOVC1NQUMKIHZvaWQgTmV0d29ya0Zyb250ZW5k
RGlzcGF0Y2hlcjo6cmVzb3VyY2VMb2FkZWQoKQogewotICAgIFJlZjxKU09OOjpPYmplY3Q+IGpz
b25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0
U3RyaW5nKCJtZXRob2QiX3MsICJOZXR3b3JrLnJlc291cmNlTG9hZGVkIl9zKTsKKyAgICBhdXRv
IHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBwcm90
b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJOZXR3b3JrLnJlc291cmNl
TG9hZGVkIl9zKTsKIAotICAgIG1fZnJvbnRlbmRSb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdl
LT50b0pTT05TdHJpbmcoKSk7CisgICAgbV9mcm9udGVuZFJvdXRlci5zZW5kRXZlbnQocHJvdG9j
b2xfanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKIH0KICNlbmRpZiAvLyBFVkVOVC1NQUMK
ICNlbmRpZiAvLyBET01BSU4tTUFDCkBAIC00MzQsNyArNDM1LDkgQEAgdm9pZCBOZXR3b3JrRnJv
bnRlbmREaXNwYXRjaGVyOjpyZXNvdXJjZUxvYWRlZCgpCiAjcHJhZ21hIG9uY2UKIAogI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KLSNpbmNsdWRlIDx3
dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8
d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVz
cGFjZSBJbnNwZWN0b3IgewogCkBAIC00NjEsNyArNDY0LDcgQEAgY2xhc3MgTmV0d29ya0Vycm9y
OwogbmFtZXNwYWNlIE5ldHdvcmsgewogCiAjaWYgVFlQRS1NQUMKLWNsYXNzIE5ldHdvcmtFcnJv
ciA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKK2NsYXNzIE5ldHdvcmtFcnJvciBmaW5hbCA6
IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKIHB1YmxpYzoKICAgICBlbnVtIHsKICAgICAgICAg
Tm9GaWVsZHNTZXQgPSAwLApAQCAtNDg4LDE3ICs0OTEsMTcgQEAgcHVibGljOgogICAgICAgICBm
cmllbmQgY2xhc3MgTmV0d29ya0Vycm9yOwogICAgIHB1YmxpYzoKIAotICAgICAgICBCdWlsZGVy
PFNUQVRFIHwgTWVzc2FnZVNldD4mIHNldE1lc3NhZ2UoY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAg
ICAgICAgQnVpbGRlcjxTVEFURSB8IE1lc3NhZ2VTZXQ+JiBzZXRNZXNzYWdlKGNvbnN0IFN0cmlu
ZyYgaW5fbWVzc2FnZSkKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShT
VEFURSAmIE1lc3NhZ2VTZXQpLCBwcm9wZXJ0eV9tZXNzYWdlX2FscmVhZHlfc2V0KTsKLSAgICAg
ICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm1lc3NhZ2UiX3MsIHZhbHVlKTsKKyAgICAgICAg
ICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm1lc3NhZ2UiX3MsIGluX21lc3NhZ2UpOwogICAgICAg
ICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxNZXNzYWdlU2V0PigpOwogICAgICAgICB9CiAKLSAgICAg
ICAgQnVpbGRlcjxTVEFURSB8IENvZGVTZXQ+JiBzZXRDb2RlKGludCB2YWx1ZSkKKyAgICAgICAg
QnVpbGRlcjxTVEFURSB8IENvZGVTZXQ+JiBzZXRDb2RlKGludCBpbl9jb2RlKQogICAgICAgICB7
CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQ29kZVNldCksIHByb3BlcnR5
X2NvZGVfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldEludGVnZXIoImNv
ZGUiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRJbnRlZ2VyKCJjb2RlIl9z
LCBpbl9jb2RlKTsKICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Q29kZVNldD4oKTsKICAg
ICAgICAgfQogCkBAIC01NzAsOCArNTczLDcgQEAgcHVibGljOgogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKIAotI2luY2x1ZGUgPHd0Zi9PcHRp
b25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvQXNz
ZXJ0aW9ucy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtNjMxLDcgKzYzMyw3IEBA
IGNsYXNzIE9iakNJbnNwZWN0b3JOZXR3b3JrQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJs
aWMgQWx0ZXJuYXRlTmV0d29ya0JhY2tlCiBwdWJsaWM6CiAgICAgT2JqQ0luc3BlY3Rvck5ldHdv
cmtCYWNrZW5kRGlzcGF0Y2hlcihpZDxUZXN0UHJvdG9jb2xOZXR3b3JrRG9tYWluSGFuZGxlcj4g
aGFuZGxlcikgeyBtX2RlbGVnYXRlID0gaGFuZGxlcjsgfQogI2lmIENPTU1BTkQtTUFDCi0gICAg
dm9pZCBsb2FkUmVzb3VyY2UobG9uZyByZXF1ZXN0SWQpIGZpbmFsOworICAgIHZvaWQgbG9hZFJl
c291cmNlKGxvbmcgcHJvdG9jb2xfY2FsbElkKSBmaW5hbDsKICNlbmRpZiAvLyBDT01NQU5ELU1B
QwogcHJpdmF0ZToKICAgICBSZXRhaW5QdHI8aWQ8VGVzdFByb3RvY29sTmV0d29ya0RvbWFpbkhh
bmRsZXI+PiBtX2RlbGVnYXRlOwpAQCAtNjgzLDIxICs2ODUsMjIgQEAgbmFtZXNwYWNlIEluc3Bl
Y3RvciB7CiAKICNpZiBET01BSU4tTUFDCiAjaWYgQ09NTUFORC1NQUMKLXZvaWQgT2JqQ0luc3Bl
Y3Rvck5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlKGxvbmcgcmVxdWVzdElk
KQordm9pZCBPYmpDSW5zcGVjdG9yTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3Vy
Y2UobG9uZyBwcm90b2NvbF9jYWxsSWQpCiB7CiAgICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25k
c1RvU2VsZWN0b3I6QHNlbGVjdG9yKGxvYWRSZXNvdXJjZVdpdGhFcnJvckNhbGxiYWNrOnN1Y2Nl
c3NDYWxsYmFjazopXSkgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90
b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAi
J05ldHdvcmsubG9hZFJlc291cmNlJyB3YXMgbm90IGZvdW5kIl9zKTsKKyAgICAgICAgYmFja2Vu
ZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxsSWQsIEJhY2tl
bmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidOZXR3b3JrLmxvYWRSZXNvdXJjZScgd2Fz
IG5vdCBmb3VuZCJfcyk7CiAgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5n
RXJyb3JzKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZCBlcnJvckNhbGxiYWNr
ID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVw
b3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJv
ciwgZXJyb3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVy
cm9yKHByb3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJv
cik7CiAgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CiAg
ICAgfTsKIAogICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF57Ci0gICAgICAgIGJhY2tlbmREaXNw
YXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIEpTT046Ok9iamVjdDo6Y3JlYXRlKCks
IGZhbHNlKTsKKyAgICAgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVj
dDo6Y3JlYXRlKCk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShw
cm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJvdG9jb2xfanNvbk1lc3NhZ2UpLCBmYWxzZSk7CiAg
ICAgfTsKIAogICAgIFttX2RlbGVnYXRlIGxvYWRSZXNvdXJjZVdpdGhFcnJvckNhbGxiYWNrOmVy
cm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107CkBAIC05MTEsOSAr
OTE0LDkgQEAgdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKIHsKICAgICBjb25zdCBGcm9udGVu
ZFJvdXRlciYgcm91dGVyID0gX2NvbnRyb2xsZXItPmZyb250ZW5kUm91dGVyKCk7CiAKLSAgICBS
ZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0g
ICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiTmV0d29yay5yZXNvdXJjZUxv
YWRlZCJfcyk7Ci0gICAgcm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5n
KCkpOworICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0
ZSgpOworICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIk5l
dHdvcmsucmVzb3VyY2VMb2FkZWQiX3MpOworICAgIHJvdXRlci5zZW5kRXZlbnQocHJvdG9jb2xf
anNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKIH0KICNlbmRpZiAvLyBFVkVOVC1NQUMKIApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2V4cGVjdGVkL2RvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZG9tYWluLWRlYnVn
Z2FibGVUeXBlcy5qc29uLXJlc3VsdAppbmRleCBhNDhmNmY5YjVhMTk3OTgyYWQ2OTEwMjlhZWFh
ZGM2NzUyZjgxMzJhLi5jODc1MTQ4ZjNkYWYwNWVkMzFhY2VkOTdjMzJlYjNiYjc1NDdmOGFiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
ZXhwZWN0ZWQvZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5qc29uLXJlc3VsdAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZG9tYWluLWRl
YnVnZ2FibGVUeXBlcy5qc29uLXJlc3VsdApAQCAtNzAsNyArNzAsNyBAQCBJbnNwZWN0b3JCYWNr
ZW5kLmFjdGl2YXRlRG9tYWluKCJEb21haW4iLCBbIndlYi1wYWdlIl0pOwogCiAjaWYgRU5BQkxF
KElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAKLSNpbmNsdWRlICJUZXN0UHJvdG9j
b2xUeXBlcy5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgogI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CiAKQEAgLTg4LDcgKzg4LDcg
QEAgcHJpdmF0ZToKIGNsYXNzIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyIDogcHVi
bGljIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5B
bHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlcigpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBD
b21tYW5kKGxvbmcgY2FsbElkKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIENvbW1hbmQobG9uZyBw
cm90b2NvbF9jYWxsSWQpID0gMDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgpAQCAt
MTMwLDExICsxMzAsMTQgQEAgcHVibGljOgogCiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0
cy5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
Lmg+CisjaW5jbHVkZSA8dHVwbGU+CisjaW5jbHVkZSA8d3RmL0V4cGVjdGVkLmg+CisjaW5jbHVk
ZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5h
bWVzcGFjZSBJbnNwZWN0b3IgewogCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKwogCiAj
aWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiBjbGFzcyBBbHRlcm5h
dGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjsKQEAgLTE0Miw3ICsxNDUsNyBAQCBjbGFzcyBBbHRl
cm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjsKIAogY2xhc3MgRG9tYWluQmFja2VuZERpc3Bh
dGNoZXJIYW5kbGVyIHsKIHB1YmxpYzoKLSAgICB2aXJ0dWFsIHZvaWQgQ29tbWFuZChFcnJvclN0
cmluZyYpID0gMDsKKyAgICB2aXJ0dWFsIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IENv
bW1hbmQoKSA9IDA7CiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB+RG9tYWluQmFja2VuZERpc3Bh
dGNoZXJIYW5kbGVyKCk7CiB9OwpAQCAtMTUwLDkgKzE1Myw5IEBAIHByb3RlY3RlZDoKIGNsYXNz
IERvbWFpbkJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIFN1cHBsZW1lbnRhbEJhY2tl
bmREaXNwYXRjaGVyIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPERvbWFpbkJhY2tlbmREaXNw
YXRjaGVyPiBjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImLCBEb21haW5CYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXIqKTsKLSAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJp
bmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKSBmaW5hbDsKKyAgICB2b2lk
IGRpc3BhdGNoKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBjb25zdCBTdHJpbmcmIHByb3RvY29sX21l
dGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9tZXNzYWdlKSBmaW5hbDsKIHByaXZh
dGU6Ci0gICAgdm9pZCBDb21tYW5kKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0
PiYmIHBhcmFtZXRlcnMpOworICAgIHZvaWQgQ29tbWFuZChsb25nIHByb3RvY2xfY2FsbElkLCBS
ZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX3BhcmFtZXRlcnMpOwogI2lmIEVOQUJMRShJ
TlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogcHVibGljOgogICAgIHZvaWQgc2V0QWx0
ZXJuYXRlRGlzcGF0Y2hlcihBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlciogYWx0ZXJu
YXRlRGlzcGF0Y2hlcikgeyBtX2FsdGVybmF0ZURpc3BhdGNoZXIgPSBhbHRlcm5hdGVEaXNwYXRj
aGVyOyB9CkBAIC0yMDEsOSArMjA0LDcgQEAgcHJpdmF0ZToKICNpbmNsdWRlICJUZXN0QmFja2Vu
ZERpc3BhdGNoZXJzLmgiCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9u
dGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CiAjaW5jbHVkZSA8d3Rm
L05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiAjaWYg
RU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAjaW5jbHVkZSAiVGVzdEFs
dGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgpAQCAtMjI1LDM4ICsyMjYsMzggQEAgRG9tYWlu
QmFja2VuZERpc3BhdGNoZXI6OkRvbWFpbkJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRj
aGVyJiBiYWNrZW5kRGlzcGEKICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3Bh
dGNoZXJGb3JEb21haW4oIkRvbWFpbiJfcywgdGhpcyk7CiB9CiAKLXZvaWQgRG9tYWluQmFja2Vu
ZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhv
ZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKQordm9pZCBEb21haW5CYWNrZW5kRGlzcGF0
Y2hlcjo6ZGlzcGF0Y2gobG9uZyBwcm90b2NvbF9jYWxsSWQsIGNvbnN0IFN0cmluZyYgcHJvdG9j
b2xfbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX21lc3NhZ2UpCiB7CiAgICAg
UmVmPERvbWFpbkJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKIAotICAgIFJlZlB0
cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnM7Ci0gICAgbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJh
bXMiX3MsIHBhcmFtZXRlcnMpOworICAgIGF1dG8gcHJvdG9jb2xfcGFyYW1ldGVycyA9IHByb3Rv
Y29sX21lc3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9zKTsKIAotICAgIGlmIChtZXRob2QgPT0g
IkNvbW1hbmQiKSB7Ci0gICAgICAgIENvbW1hbmQocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRl
cnMpKTsKKyAgICBpZiAocHJvdG9jb2xfbWV0aG9kID09ICJDb21tYW5kIikgeworICAgICAgICBD
b21tYW5kKHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9wYXJhbWV0ZXJzKSk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQ
cm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEb21haW4u
IiArIG1ldGhvZCArICInIHdhcyBub3QgZm91bmQiKTsKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVy
LT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwg
IidEb21haW4uIiArIHByb3RvY29sX21ldGhvZCArICInIHdhcyBub3QgZm91bmQiKTsKIH0KIAot
dm9pZCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Q29tbWFuZChsb25nIHJlcXVlc3RJZCwgUmVm
UHRyPEpTT046Ok9iamVjdD4mJikKK3ZvaWQgRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkNvbW1h
bmQobG9uZyBwcm90b2NvbF9jYWxsSWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCiB7CiAjaWYg
RU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAgICAgaWYgKG1fYWx0ZXJu
YXRlRGlzcGF0Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPkNvbW1hbmQo
cmVxdWVzdElkKTsKKyAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5Db21tYW5kKHByb3Rv
Y29sX2NhbGxJZCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKElO
U1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAKLSAgICBFcnJvclN0cmluZyBlcnJvcjsK
LSAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwot
ICAgIG1fYWdlbnQtPkNvbW1hbmQoZXJyb3IpOworICAgIGF1dG8gcmVzdWx0ID0gbV9hZ2VudC0+
Q29tbWFuZCgpOworICAgIGlmICghcmVzdWx0KSB7CisgICAgICAgIEFTU0VSVCghcmVzdWx0LmVy
cm9yKCkuaXNFbXB0eSgpKTsKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJv
dG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIHJlc3VsdC5lcnJvcigp
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCi0g
ICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1v
dmUocmVzdWx0KSwgZmFsc2UpOwotICAgIGVsc2UKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdU
Rk1vdmUoZXJyb3IpKTsKKyAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2Jq
ZWN0OjpjcmVhdGUoKTsKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocHJv
dG9jb2xfY2FsbElkLCBXVEZNb3ZlKHByb3RvY29sX2pzb25NZXNzYWdlKSwgZmFsc2UpOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKQEAgLTI5Nyw2ICsyOTgsNyBAQCB2b2lkIERvbWFp
bkJhY2tlbmREaXNwYXRjaGVyOjpDb21tYW5kKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6
T2JqZWN0PiYmKQogCiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUg
PHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewpAQCAtMzQ5LDE2
ICszNTEsMTUgQEAgcHJpdmF0ZToKICNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5o
IgogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4K
LSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3Igewog
CiB2b2lkIERvbWFpbkZyb250ZW5kRGlzcGF0Y2hlcjo6RXZlbnQoKQogewotICAgIFJlZjxKU09O
OjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBqc29u
TWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJEb21haW4uRXZlbnQiX3MpOworICAgIGF1
dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIHBy
b3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRvbWFpbi5FdmVudCJf
cyk7CiAKLSAgICBtX2Zyb250ZW5kUm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09O
U3RyaW5nKCkpOworICAgIG1fZnJvbnRlbmRSb3V0ZXIuc2VuZEV2ZW50KHByb3RvY29sX2pzb25N
ZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgpA
QCAtMzk4LDcgKzM5OSw5IEBAIHZvaWQgRG9tYWluRnJvbnRlbmREaXNwYXRjaGVyOjpFdmVudCgp
CiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3Rv
Y29sVHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9K
U09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC00NTIsOCArNDU1
LDcgQEAgbmFtZXNwYWNlIFByb3RvY29sIHsKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRl
ICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAKLSNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KLSNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4K
IAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKQEAgLTUwOSw3ICs1MTEsNyBAQCBjbGFzcyBPYmpD
SW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgQWx0ZXJuYXRl
RG9tYWluQmFja2VuZAogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAg
IE9iakNJbnNwZWN0b3JEb21haW5CYWNrZW5kRGlzcGF0Y2hlcihpZDxUZXN0UHJvdG9jb2xEb21h
aW5Eb21haW5IYW5kbGVyPiBoYW5kbGVyKSB7IG1fZGVsZWdhdGUgPSBoYW5kbGVyOyB9Ci0gICAg
dm9pZCBDb21tYW5kKGxvbmcgcmVxdWVzdElkKSBmaW5hbDsKKyAgICB2b2lkIENvbW1hbmQobG9u
ZyBwcm90b2NvbF9jYWxsSWQpIGZpbmFsOwogcHJpdmF0ZToKICAgICBSZXRhaW5QdHI8aWQ8VGVz
dFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4+IG1fZGVsZWdhdGU7CiB9OwpAQCAtNTU3LDIx
ICs1NTksMjIgQEAgcHJpdmF0ZToKIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKLXZvaWQgT2Jq
Q0luc3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpDb21tYW5kKGxvbmcgcmVxdWVzdElk
KQordm9pZCBPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkNvbW1hbmQobG9u
ZyBwcm90b2NvbF9jYWxsSWQpCiB7CiAgICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25kc1RvU2Vs
ZWN0b3I6QHNlbGVjdG9yKENvbW1hbmRXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6
KV0pIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihy
ZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEb21haW4uQ29t
bWFuZCcgd2FzIG5vdCBmb3VuZCJfcyk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJl
cG9ydFByb3RvY29sRXJyb3IocHJvdG9jb2xfY2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0
aG9kTm90Rm91bmQsICInRG9tYWluLkNvbW1hbmQnIHdhcyBub3QgZm91bmQiX3MpOwogICAgICAg
ICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCiAgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7
Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVz
dElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAgICAgYmFj
a2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxsSWQsIEJh
Y2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwogICAgICAgICBiYWNrZW5kRGlz
cGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgIH07CiAKICAgICBpZCBzdWNjZXNz
Q2FsbGJhY2sgPSBeewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2Uo
cmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7CisgICAgICAgIGF1dG8g
cHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBi
YWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocHJvdG9jb2xfY2FsbElkLCBXVEZNb3Zl
KHByb3RvY29sX2pzb25NZXNzYWdlKSwgZmFsc2UpOwogICAgIH07CiAKICAgICBbbV9kZWxlZ2F0
ZSBDb21tYW5kV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6
c3VjY2Vzc0NhbGxiYWNrXTsKQEAgLTc3Myw5ICs3NzYsOSBAQCB1c2luZyBuYW1lc3BhY2UgSW5z
cGVjdG9yOwogewogICAgIGNvbnN0IEZyb250ZW5kUm91dGVyJiByb3V0ZXIgPSBfY29udHJvbGxl
ci0+ZnJvbnRlbmRSb3V0ZXIoKTsKIAotICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdl
ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJt
ZXRob2QiX3MsICJEb21haW4uRXZlbnQiX3MpOwotICAgIHJvdXRlci5zZW5kRXZlbnQoanNvbk1l
c3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKKyAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0g
SlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3Ry
aW5nKCJtZXRob2QiX3MsICJEb21haW4uRXZlbnQiX3MpOworICAgIHJvdXRlci5zZW5kRXZlbnQo
cHJvdG9jb2xfanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKIH0KIAogQGVuZApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVj
dGVkL2RvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29u
LXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9l
eHBlY3RlZC9kb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUu
anNvbi1yZXN1bHQKaW5kZXggYTc3ZmUzNTg5Nzg4NTM0NzUwNTYyMjNlMDE5YTFiMGZiMWQ0N2U2
OC4uOTQyZGNjYThmMjYwMWVjNjk3MmJiYzYwOTg0YmRjNzU1NzQxYzNlZiAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2Rv
bWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uLXJlc3Vs
dAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhw
ZWN0ZWQvZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpz
b24tcmVzdWx0CkBAIC03MCw3ICs3MCw3IEBAIEluc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21h
aW4oIkRvbWFpbiIsIFsicGFnZSJdKTsKIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRF
X0RJU1BBVENIRVJTKQogCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKKyNpbmNsdWRl
ICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXIuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JGcm9udGVuZFJvdXRlci5oPgogCkBAIC04OCw3ICs4OCw3IEBAIHByaXZhdGU6CiBjbGFzcyBB
bHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlciA6IHB1YmxpYyBBbHRlcm5hdGVCYWNrZW5k
RGlzcGF0Y2hlciB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+QWx0ZXJuYXRlRG9tYWluQmFja2Vu
ZERpc3BhdGNoZXIoKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgQ29tbWFuZChsb25nIGNhbGxJZCkg
PSAwOworICAgIHZpcnR1YWwgdm9pZCBDb21tYW5kKGxvbmcgcHJvdG9jb2xfY2FsbElkKSA9IDA7
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKQEAgLTEzMCwxMSArMTMwLDE0IEBAIHB1
YmxpYzoKIAogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHR1cGxl
PgorI2luY2x1ZGUgPHd0Zi9FeHBlY3RlZC5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgog
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsK
IAotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKIAogI2lmIEVOQUJMRShJTlNQRUNUT1Jf
QUxURVJOQVRFX0RJU1BBVENIRVJTKQogY2xhc3MgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3Bh
dGNoZXI7CkBAIC0xNDIsNyArMTQ1LDcgQEAgY2xhc3MgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERp
c3BhdGNoZXI7CiAKIGNsYXNzIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7CiBwdWJs
aWM6Ci0gICAgdmlydHVhbCB2b2lkIENvbW1hbmQoRXJyb3JTdHJpbmcmKSA9IDA7CisgICAgdmly
dHVhbCBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBDb21tYW5kKCkgPSAwOwogcHJvdGVj
dGVkOgogICAgIHZpcnR1YWwgfkRvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpOwogfTsK
QEAgLTE1MCw5ICsxNTMsOSBAQCBwcm90ZWN0ZWQ6CiBjbGFzcyBEb21haW5CYWNrZW5kRGlzcGF0
Y2hlciBmaW5hbCA6IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7CiBwdWJs
aWM6CiAgICAgc3RhdGljIFJlZjxEb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEJhY2tl
bmREaXNwYXRjaGVyJiwgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7Ci0gICAgdm9p
ZCBkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09O
OjpPYmplY3Q+JiYgbWVzc2FnZSkgZmluYWw7CisgICAgdm9pZCBkaXNwYXRjaChsb25nIHByb3Rv
Y29sX2NhbGxJZCwgY29uc3QgU3RyaW5nJiBwcm90b2NvbF9tZXRob2QsIFJlZjxKU09OOjpPYmpl
Y3Q+JiYgcHJvdG9jb2xfbWVzc2FnZSkgZmluYWw7CiBwcml2YXRlOgotICAgIHZvaWQgQ29tbWFu
ZChsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKKyAg
ICB2b2lkIENvbW1hbmQobG9uZyBwcm90b2NsX2NhbGxJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4m
JiBwcm90b2NvbF9wYXJhbWV0ZXJzKTsKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9E
SVNQQVRDSEVSUykKIHB1YmxpYzoKICAgICB2b2lkIHNldEFsdGVybmF0ZURpc3BhdGNoZXIoQWx0
ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIqIGFsdGVybmF0ZURpc3BhdGNoZXIpIHsgbV9h
bHRlcm5hdGVEaXNwYXRjaGVyID0gYWx0ZXJuYXRlRGlzcGF0Y2hlcjsgfQpAQCAtMjAxLDkgKzIw
NCw3IEBAIHByaXZhdGU6CiAjaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgogCiAj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNs
dWRlIDx3dGYvSlNPTlZhbHVlcy5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgot
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQogI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0
Y2hlcnMuaCIKQEAgLTIyNSwzOCArMjI2LDM4IEBAIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpE
b21haW5CYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhCiAg
ICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRjaGVyRm9yRG9tYWluKCJEb21h
aW4iX3MsIHRoaXMpOwogfQogCi12b2lkIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRj
aChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+
JiYgbWVzc2FnZSkKK3ZvaWQgRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcg
cHJvdG9jb2xfY2FsbElkLCBjb25zdCBTdHJpbmcmIHByb3RvY29sX21ldGhvZCwgUmVmPEpTT046
Ok9iamVjdD4mJiBwcm90b2NvbF9tZXNzYWdlKQogewogICAgIFJlZjxEb21haW5CYWNrZW5kRGlz
cGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7CiAKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJh
bWV0ZXJzOwotICAgIG1lc3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9zLCBwYXJhbWV0ZXJzKTsK
KyAgICBhdXRvIHByb3RvY29sX3BhcmFtZXRlcnMgPSBwcm90b2NvbF9tZXNzYWdlLT5nZXRPYmpl
Y3QoInBhcmFtcyJfcyk7CiAKLSAgICBpZiAobWV0aG9kID09ICJDb21tYW5kIikgewotICAgICAg
ICBDb21tYW5kKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7CisgICAgaWYgKHByb3Rv
Y29sX21ldGhvZCA9PSAiQ29tbWFuZCIpIHsKKyAgICAgICAgQ29tbWFuZChwcm90b2NvbF9jYWxs
SWQsIFdURk1vdmUocHJvdG9jb2xfcGFyYW1ldGVycykpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5k
RGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRG9tYWluLiIgKyBtZXRob2QgKyAiJyB3YXMg
bm90IGZvdW5kIik7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJv
cihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRG9tYWluLiIgKyBwcm90b2Nv
bF9tZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7CiB9CiAKLXZvaWQgRG9tYWluQmFja2VuZERp
c3BhdGNoZXI6OkNvbW1hbmQobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYp
Cit2b2lkIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpDb21tYW5kKGxvbmcgcHJvdG9jb2xfY2Fs
bElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQogewogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQogICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAg
ICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5Db21tYW5kKHJlcXVlc3RJZCk7CisgICAgICAg
IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+Q29tbWFuZChwcm90b2NvbF9jYWxsSWQpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJ
U1BBVENIRVJTKQogCi0gICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVmPEpTT046Ok9iamVj
dD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBtX2FnZW50LT5Db21tYW5k
KGVycm9yKTsKKyAgICBhdXRvIHJlc3VsdCA9IG1fYWdlbnQtPkNvbW1hbmQoKTsKKyAgICBpZiAo
IXJlc3VsdCkgeworICAgICAgICBBU1NFUlQoIXJlc3VsdC5lcnJvcigpLmlzRW1wdHkoKSk7Cisg
ICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERp
c3BhdGNoZXI6OlNlcnZlckVycm9yLCByZXN1bHQuZXJyb3IoKSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CiAKLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQotICAgICAgICBtX2JhY2tlbmREaXNw
YXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsK
LSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJy
b3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7CisgICAg
YXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAg
bV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHByb3RvY29sX2NhbGxJZCwgV1RGTW92
ZShwcm90b2NvbF9qc29uTWVzc2FnZSksIGZhbHNlKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCkBAIC0yOTcsNiArMjk4LDcgQEAgdm9pZCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6
Q29tbWFuZChsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikKIAogI2luY2x1
ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgor
I2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKQEAgLTM0OSwxNiArMzUxLDE1IEBAIHByaXZhdGU6
CiAjaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKIAogI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAogdm9pZCBEb21haW5Gcm9udGVu
ZERpc3BhdGNoZXI6OkV2ZW50KCkKIHsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2Fn
ZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygi
bWV0aG9kIl9zLCAiRG9tYWluLkV2ZW50Il9zKTsKKyAgICBhdXRvIHByb3RvY29sX2pzb25NZXNz
YWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+
c2V0U3RyaW5nKCJtZXRob2QiX3MsICJEb21haW4uRXZlbnQiX3MpOwogCi0gICAgbV9mcm9udGVu
ZFJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKKyAgICBtX2Zy
b250ZW5kUm91dGVyLnNlbmRFdmVudChwcm90b2NvbF9qc29uTWVzc2FnZS0+dG9KU09OU3RyaW5n
KCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKQEAgLTM5OCw3ICszOTksOSBAQCB2
b2lkIERvbWFpbkZyb250ZW5kRGlzcGF0Y2hlcjo6RXZlbnQoKQogI3ByYWdtYSBvbmNlCiAKICNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+Ci0jaW5jbHVk
ZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1
ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBu
YW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtNDUyLDggKzQ1NSw3IEBAIG5hbWVzcGFjZSBQcm90
b2NvbCB7CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0
cy5oIgogCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0
b3IgewogCkBAIC01MDksNyArNTExLDcgQEAgY2xhc3MgT2JqQ0luc3BlY3RvckRvbWFpbkJhY2tl
bmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEFsdGVybmF0ZURvbWFpbkJhY2tlbmQKICAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBPYmpDSW5zcGVjdG9yRG9tYWlu
QmFja2VuZERpc3BhdGNoZXIoaWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4gaGFu
ZGxlcikgeyBtX2RlbGVnYXRlID0gaGFuZGxlcjsgfQotICAgIHZvaWQgQ29tbWFuZChsb25nIHJl
cXVlc3RJZCkgZmluYWw7CisgICAgdm9pZCBDb21tYW5kKGxvbmcgcHJvdG9jb2xfY2FsbElkKSBm
aW5hbDsKIHByaXZhdGU6CiAgICAgUmV0YWluUHRyPGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFp
bkhhbmRsZXI+PiBtX2RlbGVnYXRlOwogfTsKQEAgLTU1NywyMSArNTU5LDIyIEBAIHByaXZhdGU6
CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCi12b2lkIE9iakNJbnNwZWN0b3JEb21haW5CYWNr
ZW5kRGlzcGF0Y2hlcjo6Q29tbWFuZChsb25nIHJlcXVlc3RJZCkKK3ZvaWQgT2JqQ0luc3BlY3Rv
ckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpDb21tYW5kKGxvbmcgcHJvdG9jb2xfY2FsbElkKQog
ewogICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihDb21t
YW5kV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7Ci0gICAgICAgIGJhY2tl
bmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlz
cGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRG9tYWluLkNvbW1hbmQnIHdhcyBub3QgZm91bmQi
X3MpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHBy
b3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RvbWFp
bi5Db21tYW5kJyB3YXMgbm90IGZvdW5kIl9zKTsKICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIo
KS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlk
IGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgewotICAgICAgICBiYWNrZW5kRGlz
cGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNo
ZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJl
cG9ydFByb3RvY29sRXJyb3IocHJvdG9jb2xfY2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2Vy
dmVyRXJyb3IsIGVycm9yKTsKICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRp
bmdFcnJvcnMoKTsKICAgICB9OwogCiAgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKLSAgICAg
ICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgSlNPTjo6T2Jq
ZWN0OjpjcmVhdGUoKSwgZmFsc2UpOworICAgICAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdl
ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+
c2VuZFJlc3BvbnNlKHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2Fn
ZSksIGZhbHNlKTsKICAgICB9OwogCiAgICAgW21fZGVsZWdhdGUgQ29tbWFuZFdpdGhFcnJvckNh
bGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107CkBA
IC03NzMsOSArNzc2LDkgQEAgdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKIHsKICAgICBjb25z
dCBGcm9udGVuZFJvdXRlciYgcm91dGVyID0gX2NvbnRyb2xsZXItPmZyb250ZW5kUm91dGVyKCk7
CiAKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3Jl
YXRlKCk7Ci0gICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiRG9tYWluLkV2
ZW50Il9zKTsKLSAgICByb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmco
KSk7CisgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRl
KCk7CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiRG9t
YWluLkV2ZW50Il9zKTsKKyAgICByb3V0ZXIuc2VuZEV2ZW50KHByb3RvY29sX2pzb25NZXNzYWdl
LT50b0pTT05TdHJpbmcoKSk7CiB9CiAKIEBlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9kb21haW4tdGFyZ2V0VHlw
ZXMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZXhwZWN0ZWQvZG9tYWluLXRhcmdldFR5cGVzLmpzb24tcmVzdWx0CmluZGV4IDBhZDZk
MDQ0NjAxYzJlYTQwODM4OGJjZjI1NGZjNjY1NDVmN2NkMDQuLjg0OWYzYjcyOWNhY2Q4YjlmMTE0
YzhiOWJmYjIxNzE5MWQyNzI5MWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9kb21haW4tdGFyZ2V0VHlwZXMuanNvbi1y
ZXN1bHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2V4cGVjdGVkL2RvbWFpbi10YXJnZXRUeXBlcy5qc29uLXJlc3VsdApAQCAtNzAsNyArNzAsNyBA
QCBJbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJEb21haW4iLCBudWxsKTsKIAogI2lm
IEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogCi0jaW5jbHVkZSAiVGVz
dFByb3RvY29sVHlwZXMuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KICNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgogCkBAIC04OCw3
ICs4OCw3IEBAIHByaXZhdGU6CiBjbGFzcyBBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hl
ciA6IHB1YmxpYyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7CiBwdWJsaWM6CiAgICAgdmly
dHVhbCB+QWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIoKSB7IH0KLSAgICB2aXJ0dWFs
IHZvaWQgQ29tbWFuZChsb25nIGNhbGxJZCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBDb21tYW5k
KGxvbmcgcHJvdG9jb2xfY2FsbElkKSA9IDA7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKQEAgLTEzMCwxMSArMTMwLDE0IEBAIHB1YmxpYzoKIAogI2luY2x1ZGUgIlRlc3RQcm90b2Nv
bE9iamVjdHMuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlci5oPgorI2luY2x1ZGUgPHR1cGxlPgorI2luY2x1ZGUgPHd0Zi9FeHBlY3RlZC5oPgor
I2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7
CisKIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogY2xhc3Mg
QWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXI7CkBAIC0xNDIsNyArMTQ1LDcgQEAgY2xh
c3MgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXI7CiAKIGNsYXNzIERvbWFpbkJhY2tl
bmREaXNwYXRjaGVySGFuZGxlciB7CiBwdWJsaWM6Ci0gICAgdmlydHVhbCB2b2lkIENvbW1hbmQo
RXJyb3JTdHJpbmcmKSA9IDA7CisgICAgdmlydHVhbCBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2
b2lkPiBDb21tYW5kKCkgPSAwOwogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgfkRvbWFpbkJhY2tl
bmREaXNwYXRjaGVySGFuZGxlcigpOwogfTsKQEAgLTE1MCw5ICsxNTMsOSBAQCBwcm90ZWN0ZWQ6
CiBjbGFzcyBEb21haW5CYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBTdXBwbGVtZW50
YWxCYWNrZW5kRGlzcGF0Y2hlciB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxEb21haW5CYWNr
ZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiwgRG9tYWluQmFja2VuZERp
c3BhdGNoZXJIYW5kbGVyKik7Ci0gICAgdm9pZCBkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29u
c3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkgZmluYWw7Cisg
ICAgdm9pZCBkaXNwYXRjaChsb25nIHByb3RvY29sX2NhbGxJZCwgY29uc3QgU3RyaW5nJiBwcm90
b2NvbF9tZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfbWVzc2FnZSkgZmluYWw7
CiBwcml2YXRlOgotICAgIHZvaWQgQ29tbWFuZChsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046
Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKKyAgICB2b2lkIENvbW1hbmQobG9uZyBwcm90b2NsX2Nh
bGxJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9wYXJhbWV0ZXJzKTsKICNpZiBF
TkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIHB1YmxpYzoKICAgICB2b2lk
IHNldEFsdGVybmF0ZURpc3BhdGNoZXIoQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIq
IGFsdGVybmF0ZURpc3BhdGNoZXIpIHsgbV9hbHRlcm5hdGVEaXNwYXRjaGVyID0gYWx0ZXJuYXRl
RGlzcGF0Y2hlcjsgfQpAQCAtMjAxLDkgKzIwNCw3IEBAIHByaXZhdGU6CiAjaW5jbHVkZSAiVGVz
dEJhY2tlbmREaXNwYXRjaGVycy5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgogI2luY2x1
ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
IAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogI2luY2x1ZGUg
IlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKQEAgLTIyNSwzOCArMjI2LDM4IEBA
IERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpEb21haW5CYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5k
RGlzcGF0Y2hlciYgYmFja2VuZERpc3BhCiAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0
ZXJEaXNwYXRjaGVyRm9yRG9tYWluKCJEb21haW4iX3MsIHRoaXMpOwogfQogCi12b2lkIERvbWFp
bkJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5n
JiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkKK3ZvaWQgRG9tYWluQmFja2Vu
ZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBjb25zdCBTdHJpbmcm
IHByb3RvY29sX21ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9tZXNzYWdlKQog
ewogICAgIFJlZjxEb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7CiAKLSAg
ICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzOwotICAgIG1lc3NhZ2UtPmdldE9iamVj
dCgicGFyYW1zIl9zLCBwYXJhbWV0ZXJzKTsKKyAgICBhdXRvIHByb3RvY29sX3BhcmFtZXRlcnMg
PSBwcm90b2NvbF9tZXNzYWdlLT5nZXRPYmplY3QoInBhcmFtcyJfcyk7CiAKLSAgICBpZiAobWV0
aG9kID09ICJDb21tYW5kIikgewotICAgICAgICBDb21tYW5kKHJlcXVlc3RJZCwgV1RGTW92ZShw
YXJhbWV0ZXJzKSk7CisgICAgaWYgKHByb3RvY29sX21ldGhvZCA9PSAiQ29tbWFuZCIpIHsKKyAg
ICAgICAgQ29tbWFuZChwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJvdG9jb2xfcGFyYW1ldGVy
cykpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+
cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICIn
RG9tYWluLiIgKyBtZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7CisgICAgbV9iYWNrZW5kRGlz
cGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90
Rm91bmQsICInRG9tYWluLiIgKyBwcm90b2NvbF9tZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7
CiB9CiAKLXZvaWQgRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkNvbW1hbmQobG9uZyByZXF1ZXN0
SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCit2b2lkIERvbWFpbkJhY2tlbmREaXNwYXRjaGVy
OjpDb21tYW5kKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQog
ewogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogICAgIGlmICht
X2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5D
b21tYW5kKHJlcXVlc3RJZCk7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+Q29tbWFu
ZChwcm90b2NvbF9jYWxsSWQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmIC8vIEVO
QUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogCi0gICAgRXJyb3JTdHJpbmcg
ZXJyb3I7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVh
dGUoKTsKLSAgICBtX2FnZW50LT5Db21tYW5kKGVycm9yKTsKKyAgICBhdXRvIHJlc3VsdCA9IG1f
YWdlbnQtPkNvbW1hbmQoKTsKKyAgICBpZiAoIXJlc3VsdCkgeworICAgICAgICBBU1NFUlQoIXJl
c3VsdC5lcnJvcigpLmlzRW1wdHkoKSk7CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJl
cG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCByZXN1bHQu
ZXJyb3IoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBpZiAoIWVycm9yLmxlbmd0
aCgpKQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElk
LCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERp
c3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVy
cm9yLCBXVEZNb3ZlKGVycm9yKSk7CisgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpT
T046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3Bv
bnNlKHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSksIGZhbHNl
KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCkBAIC0yOTcsNiArMjk4LDcgQEAgdm9p
ZCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Q29tbWFuZChsb25nIHJlcXVlc3RJZCwgUmVmUHRy
PEpTT046Ok9iamVjdD4mJikKIAogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNp
bmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKQEAg
LTM0OSwxNiArMzUxLDE1IEBAIHByaXZhdGU6CiAjaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0
Y2hlcnMuaCIKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91
dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVj
dG9yIHsKIAogdm9pZCBEb21haW5Gcm9udGVuZERpc3BhdGNoZXI6OkV2ZW50KCkKIHsKLSAgICBS
ZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0g
ICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiRG9tYWluLkV2ZW50Il9zKTsK
KyAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsK
KyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJEb21haW4u
RXZlbnQiX3MpOwogCi0gICAgbV9mcm9udGVuZFJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2Ut
PnRvSlNPTlN0cmluZygpKTsKKyAgICBtX2Zyb250ZW5kUm91dGVyLnNlbmRFdmVudChwcm90b2Nv
bF9qc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKQEAgLTM5OCw3ICszOTksOSBAQCB2b2lkIERvbWFpbkZyb250ZW5kRGlzcGF0Y2hlcjo6
RXZlbnQoKQogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JQcm90b2NvbFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRl
IDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtNDUy
LDggKzQ1NSw3IEBAIG5hbWVzcGFjZSBQcm90b2NvbCB7CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFs
Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRp
b25zLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC01MDksNyArNTExLDcgQEAgY2xh
c3MgT2JqQ0luc3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEFs
dGVybmF0ZURvbWFpbkJhY2tlbmQKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1Ymxp
YzoKICAgICBPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXIoaWQ8VGVzdFByb3Rv
Y29sRG9tYWluRG9tYWluSGFuZGxlcj4gaGFuZGxlcikgeyBtX2RlbGVnYXRlID0gaGFuZGxlcjsg
fQotICAgIHZvaWQgQ29tbWFuZChsb25nIHJlcXVlc3RJZCkgZmluYWw7CisgICAgdm9pZCBDb21t
YW5kKGxvbmcgcHJvdG9jb2xfY2FsbElkKSBmaW5hbDsKIHByaXZhdGU6CiAgICAgUmV0YWluUHRy
PGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+PiBtX2RlbGVnYXRlOwogfTsKQEAg
LTU1NywyMSArNTU5LDIyIEBAIHByaXZhdGU6CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCi12
b2lkIE9iakNJbnNwZWN0b3JEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Q29tbWFuZChsb25nIHJl
cXVlc3RJZCkKK3ZvaWQgT2JqQ0luc3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpDb21t
YW5kKGxvbmcgcHJvdG9jb2xfY2FsbElkKQogewogICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9u
ZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihDb21tYW5kV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0Nh
bGxiYWNrOildKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29s
RXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRG9t
YWluLkNvbW1hbmQnIHdhcyBub3QgZm91bmQiX3MpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hl
cigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHByb3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNo
ZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RvbWFpbi5Db21tYW5kJyB3YXMgbm90IGZvdW5kIl9zKTsK
ICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICpl
cnJvcikgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9y
KHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CisgICAg
ICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocHJvdG9jb2xfY2Fs
bElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKICAgICAgICAgYmFj
a2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKICAgICB9OwogCiAgICAgaWQg
c3VjY2Vzc0NhbGxiYWNrID0gXnsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJl
c3BvbnNlKHJlcXVlc3RJZCwgSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSwgZmFsc2UpOworICAgICAg
ICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAg
ICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHByb3RvY29sX2NhbGxJZCwg
V1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSksIGZhbHNlKTsKICAgICB9OwogCiAgICAgW21f
ZGVsZWdhdGUgQ29tbWFuZFdpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0Nh
bGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107CkBAIC03NzMsOSArNzc2LDkgQEAgdXNpbmcgbmFtZXNw
YWNlIEluc3BlY3RvcjsKIHsKICAgICBjb25zdCBGcm9udGVuZFJvdXRlciYgcm91dGVyID0gX2Nv
bnRyb2xsZXItPmZyb250ZW5kUm91dGVyKCk7CiAKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29u
TWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAganNvbk1lc3NhZ2UtPnNldFN0
cmluZygibWV0aG9kIl9zLCAiRG9tYWluLkV2ZW50Il9zKTsKLSAgICByb3V0ZXIuc2VuZEV2ZW50
KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7CisgICAgYXV0byBwcm90b2NvbF9qc29uTWVz
c2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2Ut
PnNldFN0cmluZygibWV0aG9kIl9zLCAiRG9tYWluLkV2ZW50Il9zKTsKKyAgICByb3V0ZXIuc2Vu
ZEV2ZW50KHByb3RvY29sX2pzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7CiB9CiAKIEBlbmQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9leHBlY3RlZC9kb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24tcmVzdWx0
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVk
L2RvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbi1yZXN1bHQKaW5kZXggNDc1
Yjg3YmQwYzhkYTg1MmI1Zjk5MGNiMjFjYjNjMmUwNzYwOTk4NC4uNDE5ZjkyZWRhMTNhZWMyMmQ4
ZjRhZjJhZjE3ZjA1Zjc1ZDI0MWE3OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2RvbWFpbnMtd2l0aC12YXJ5aW5nLWNv
bW1hbmQtc2l6ZXMuanNvbi1yZXN1bHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2RvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQt
c2l6ZXMuanNvbi1yZXN1bHQKQEAgLTc5LDcgKzc5LDcgQEAgSW5zcGVjdG9yQmFja2VuZC5hY3Rp
dmF0ZURvbWFpbigiTmV0d29yazMiLCBudWxsKTsKIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQogCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKKyNp
bmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9J
bnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgogCkBAIC05NywxOSArOTcsMTkgQEAgcHJpdmF0ZToK
IGNsYXNzIEFsdGVybmF0ZU5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIgOiBwdWJsaWMgQWx0ZXJu
YXRlQmFja2VuZERpc3BhdGNoZXIgewogcHVibGljOgogICAgIHZpcnR1YWwgfkFsdGVybmF0ZU5l
dHdvcmsxQmFja2VuZERpc3BhdGNoZXIoKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291
cmNlMShsb25nIGNhbGxJZCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UxKGxv
bmcgcHJvdG9jb2xfY2FsbElkKSA9IDA7CiB9OwogCiBjbGFzcyBBbHRlcm5hdGVOZXR3b3JrM0Jh
Y2tlbmREaXNwYXRjaGVyIDogcHVibGljIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKIHB1
YmxpYzoKICAgICB2aXJ0dWFsIH5BbHRlcm5hdGVOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyKCkg
eyB9Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTEobG9uZyBjYWxsSWQpID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlMihsb25nIGNhbGxJZCkgPSAwOwotICAgIHZpcnR1
YWwgdm9pZCBsb2FkUmVzb3VyY2UzKGxvbmcgY2FsbElkKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lk
IGxvYWRSZXNvdXJjZTQobG9uZyBjYWxsSWQpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJl
c291cmNlNShsb25nIGNhbGxJZCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2U2
KGxvbmcgY2FsbElkKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTcobG9uZyBj
YWxsSWQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlMShsb25nIHByb3RvY29s
X2NhbGxJZCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UyKGxvbmcgcHJvdG9j
b2xfY2FsbElkKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTMobG9uZyBwcm90
b2NvbF9jYWxsSWQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlNChsb25nIHBy
b3RvY29sX2NhbGxJZCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2U1KGxvbmcg
cHJvdG9jb2xfY2FsbElkKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTYobG9u
ZyBwcm90b2NvbF9jYWxsSWQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlNyhs
b25nIHByb3RvY29sX2NhbGxJZCkgPSAwOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
CkBAIC0xNTEsMTEgKzE1MSwxNCBAQCBwdWJsaWM6CiAKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xP
YmplY3RzLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXIuaD4KKyNpbmNsdWRlIDx0dXBsZT4KKyNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4KKyNp
bmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
IAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwor
CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIGNsYXNzIEFs
dGVybmF0ZU5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI7CkBAIC0xNjQsMjAgKzE2NywyMCBAQCBj
bGFzcyBBbHRlcm5hdGVOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOwogCiBjbGFzcyBOZXR3b3Jr
MUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7CiBwdWJsaWM6Ci0gICAgdmlydHVhbCB2b2lkIGxv
YWRSZXNvdXJjZTEoRXJyb3JTdHJpbmcmKSA9IDA7CisgICAgdmlydHVhbCBQcm90b2NvbDo6RXJy
b3JTdHJpbmdPcjx2b2lkPiBsb2FkUmVzb3VyY2UxKCkgPSAwOwogcHJvdGVjdGVkOgogICAgIHZp
cnR1YWwgfk5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCk7CiB9OwogCiBjbGFzcyBO
ZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7CiBwdWJsaWM6Ci0gICAgdmlydHVhbCB2
b2lkIGxvYWRSZXNvdXJjZTEoRXJyb3JTdHJpbmcmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGxv
YWRSZXNvdXJjZTIoRXJyb3JTdHJpbmcmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNv
dXJjZTMoRXJyb3JTdHJpbmcmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTQo
RXJyb3JTdHJpbmcmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTUoRXJyb3JT
dHJpbmcmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTYoRXJyb3JTdHJpbmcm
KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTcoRXJyb3JTdHJpbmcmKSA9IDA7
CisgICAgdmlydHVhbCBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBsb2FkUmVzb3VyY2Ux
KCkgPSAwOworICAgIHZpcnR1YWwgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gbG9hZFJl
c291cmNlMigpID0gMDsKKyAgICB2aXJ0dWFsIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+
IGxvYWRSZXNvdXJjZTMoKSA9IDA7CisgICAgdmlydHVhbCBQcm90b2NvbDo6RXJyb3JTdHJpbmdP
cjx2b2lkPiBsb2FkUmVzb3VyY2U0KCkgPSAwOworICAgIHZpcnR1YWwgUHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8dm9pZD4gbG9hZFJlc291cmNlNSgpID0gMDsKKyAgICB2aXJ0dWFsIFByb3RvY29s
OjpFcnJvclN0cmluZ09yPHZvaWQ+IGxvYWRSZXNvdXJjZTYoKSA9IDA7CisgICAgdmlydHVhbCBQ
cm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBsb2FkUmVzb3VyY2U3KCkgPSAwOwogcHJvdGVj
dGVkOgogICAgIHZpcnR1YWwgfk5ldHdvcmszQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCk7CiB9
OwpAQCAtMTg1LDkgKzE4OCw5IEBAIHByb3RlY3RlZDoKIGNsYXNzIE5ldHdvcmsxQmFja2VuZERp
c3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIgewog
cHVibGljOgogICAgIHN0YXRpYyBSZWY8TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRl
KEJhY2tlbmREaXNwYXRjaGVyJiwgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsK
LSAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwg
UmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKSBmaW5hbDsKKyAgICB2b2lkIGRpc3BhdGNoKGxv
bmcgcHJvdG9jb2xfY2FsbElkLCBjb25zdCBTdHJpbmcmIHByb3RvY29sX21ldGhvZCwgUmVmPEpT
T046Ok9iamVjdD4mJiBwcm90b2NvbF9tZXNzYWdlKSBmaW5hbDsKIHByaXZhdGU6Ci0gICAgdm9p
ZCBsb2FkUmVzb3VyY2UxKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBh
cmFtZXRlcnMpOworICAgIHZvaWQgbG9hZFJlc291cmNlMShsb25nIHByb3RvY2xfY2FsbElkLCBS
ZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX3BhcmFtZXRlcnMpOwogI2lmIEVOQUJMRShJ
TlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogcHVibGljOgogICAgIHZvaWQgc2V0QWx0
ZXJuYXRlRGlzcGF0Y2hlcihBbHRlcm5hdGVOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyKiBhbHRl
cm5hdGVEaXNwYXRjaGVyKSB7IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IGFsdGVybmF0ZURpc3Bh
dGNoZXI7IH0KQEAgLTIwMiwxNSArMjA1LDE1IEBAIHByaXZhdGU6CiBjbGFzcyBOZXR3b3JrM0Jh
Y2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRj
aGVyIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI+
IGNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYsIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyKik7Ci0gICAgdm9pZCBkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBt
ZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkgZmluYWw7CisgICAgdm9pZCBkaXNw
YXRjaChsb25nIHByb3RvY29sX2NhbGxJZCwgY29uc3QgU3RyaW5nJiBwcm90b2NvbF9tZXRob2Qs
IFJlZjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfbWVzc2FnZSkgZmluYWw7CiBwcml2YXRlOgot
ICAgIHZvaWQgbG9hZFJlc291cmNlMShsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVj
dD4mJiBwYXJhbWV0ZXJzKTsKLSAgICB2b2lkIGxvYWRSZXNvdXJjZTIobG9uZyByZXF1ZXN0SWQs
IFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7Ci0gICAgdm9pZCBsb2FkUmVzb3Vy
Y2UzKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOwot
ICAgIHZvaWQgbG9hZFJlc291cmNlNChsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVj
dD4mJiBwYXJhbWV0ZXJzKTsKLSAgICB2b2lkIGxvYWRSZXNvdXJjZTUobG9uZyByZXF1ZXN0SWQs
IFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7Ci0gICAgdm9pZCBsb2FkUmVzb3Vy
Y2U2KGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOwot
ICAgIHZvaWQgbG9hZFJlc291cmNlNyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVj
dD4mJiBwYXJhbWV0ZXJzKTsKKyAgICB2b2lkIGxvYWRSZXNvdXJjZTEobG9uZyBwcm90b2NsX2Nh
bGxJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9wYXJhbWV0ZXJzKTsKKyAgICB2
b2lkIGxvYWRSZXNvdXJjZTIobG9uZyBwcm90b2NsX2NhbGxJZCwgUmVmUHRyPEpTT046Ok9iamVj
dD4mJiBwcm90b2NvbF9wYXJhbWV0ZXJzKTsKKyAgICB2b2lkIGxvYWRSZXNvdXJjZTMobG9uZyBw
cm90b2NsX2NhbGxJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9wYXJhbWV0ZXJz
KTsKKyAgICB2b2lkIGxvYWRSZXNvdXJjZTQobG9uZyBwcm90b2NsX2NhbGxJZCwgUmVmUHRyPEpT
T046Ok9iamVjdD4mJiBwcm90b2NvbF9wYXJhbWV0ZXJzKTsKKyAgICB2b2lkIGxvYWRSZXNvdXJj
ZTUobG9uZyBwcm90b2NsX2NhbGxJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9w
YXJhbWV0ZXJzKTsKKyAgICB2b2lkIGxvYWRSZXNvdXJjZTYobG9uZyBwcm90b2NsX2NhbGxJZCwg
UmVmUHRyPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9wYXJhbWV0ZXJzKTsKKyAgICB2b2lkIGxv
YWRSZXNvdXJjZTcobG9uZyBwcm90b2NsX2NhbGxJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBw
cm90b2NvbF9wYXJhbWV0ZXJzKTsKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQ
QVRDSEVSUykKIHB1YmxpYzoKICAgICB2b2lkIHNldEFsdGVybmF0ZURpc3BhdGNoZXIoQWx0ZXJu
YXRlTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlciogYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeyBtX2Fs
dGVybmF0ZURpc3BhdGNoZXIgPSBhbHRlcm5hdGVEaXNwYXRjaGVyOyB9CkBAIC0yNTksOSArMjYy
LDcgQEAgcHJpdmF0ZToKICNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCiAKICNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1
ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0j
aW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRF
Uk5BVEVfRElTUEFUQ0hFUlMpCiAjaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRj
aGVycy5oIgpAQCAtMjg0LDM4ICsyODUsMzggQEAgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6
TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZEQKICAg
ICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4oIk5ldHdv
cmsxIl9zLCB0aGlzKTsKIH0KIAotdm9pZCBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpkaXNw
YXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmpl
Y3Q+JiYgbWVzc2FnZSkKK3ZvaWQgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2go
bG9uZyBwcm90b2NvbF9jYWxsSWQsIGNvbnN0IFN0cmluZyYgcHJvdG9jb2xfbWV0aG9kLCBSZWY8
SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX21lc3NhZ2UpCiB7CiAgICAgUmVmPE5ldHdvcmsxQmFj
a2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOwogCi0gICAgUmVmUHRyPEpTT046Ok9iamVj
dD4gcGFyYW1ldGVyczsKLSAgICBtZXNzYWdlLT5nZXRPYmplY3QoInBhcmFtcyJfcywgcGFyYW1l
dGVycyk7CisgICAgYXV0byBwcm90b2NvbF9wYXJhbWV0ZXJzID0gcHJvdG9jb2xfbWVzc2FnZS0+
Z2V0T2JqZWN0KCJwYXJhbXMiX3MpOwogCi0gICAgaWYgKG1ldGhvZCA9PSAibG9hZFJlc291cmNl
MSIpIHsKLSAgICAgICAgbG9hZFJlc291cmNlMShyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVy
cykpOworICAgIGlmIChwcm90b2NvbF9tZXRob2QgPT0gImxvYWRSZXNvdXJjZTEiKSB7CisgICAg
ICAgIGxvYWRSZXNvdXJjZTEocHJvdG9jb2xfY2FsbElkLCBXVEZNb3ZlKHByb3RvY29sX3BhcmFt
ZXRlcnMpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1fYmFja2VuZERpc3BhdGNo
ZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5k
LCAiJ05ldHdvcmsxLiIgKyBtZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7CisgICAgbV9iYWNr
ZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0
aG9kTm90Rm91bmQsICInTmV0d29yazEuIiArIHByb3RvY29sX21ldGhvZCArICInIHdhcyBub3Qg
Zm91bmQiKTsKIH0KIAotdm9pZCBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3Vy
Y2UxKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQordm9pZCBOZXR3b3Jr
MUJhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UxKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBS
ZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQogewogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRF
X0RJU1BBVENIRVJTKQogICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAg
bV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVzb3VyY2UxKHJlcXVlc3RJZCk7CisgICAgICAg
IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJlc291cmNlMShwcm90b2NvbF9jYWxsSWQpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJO
QVRFX0RJU1BBVENIRVJTKQogCi0gICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVmPEpTT046
Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBtX2FnZW50LT5s
b2FkUmVzb3VyY2UxKGVycm9yKTsKKyAgICBhdXRvIHJlc3VsdCA9IG1fYWdlbnQtPmxvYWRSZXNv
dXJjZTEoKTsKKyAgICBpZiAoIXJlc3VsdCkgeworICAgICAgICBBU1NFUlQoIXJlc3VsdC5lcnJv
cigpLmlzRW1wdHkoKSk7CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3Rv
Y29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCByZXN1bHQuZXJyb3IoKSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQotICAg
ICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3Zl
KHJlc3VsdCksIGZhbHNlKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXIt
PnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZN
b3ZlKGVycm9yKSk7CisgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVj
dDo6Y3JlYXRlKCk7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHByb3Rv
Y29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSksIGZhbHNlKTsKIH0KIAog
UmVmPE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI+IE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6
OmNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIsIE5ldHdvcmszQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKQEAgLTMzMCwxNCArMzMxLDEzIEBAIE5ldHdv
cmszQmFja2VuZERpc3BhdGNoZXI6Ok5ldHdvcmszQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERp
c3BhdGNoZXImIGJhY2tlbmRECiAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNw
YXRjaGVyRm9yRG9tYWluKCJOZXR3b3JrMyJfcywgdGhpcyk7CiB9CiAKLXZvaWQgTmV0d29yazNC
YWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYg
bWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpCit2b2lkIE5ldHdvcmszQmFja2Vu
ZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBjb25zdCBTdHJpbmcm
IHByb3RvY29sX21ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9tZXNzYWdlKQog
ewogICAgIFJlZjxOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKIAot
ICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnM7Ci0gICAgbWVzc2FnZS0+Z2V0T2Jq
ZWN0KCJwYXJhbXMiX3MsIHBhcmFtZXRlcnMpOworICAgIGF1dG8gcHJvdG9jb2xfcGFyYW1ldGVy
cyA9IHByb3RvY29sX21lc3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9zKTsKIAotICAgIHVzaW5n
IENhbGxIYW5kbGVyID0gdm9pZCAoTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6KikobG9uZyBy
ZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSk7CisgICAgdXNpbmcgQ2Fs
bEhhbmRsZXIgPSB2b2lkIChOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjoqKShsb25nIHByb3Rv
Y29sX2NhbGxJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9tZXNzYWdlKTsKICAg
ICB1c2luZyBEaXNwYXRjaE1hcCA9IEhhc2hNYXA8U3RyaW5nLCBDYWxsSGFuZGxlcj47CiAgICAg
c3RhdGljIE5ldmVyRGVzdHJveWVkPERpc3BhdGNoTWFwPiBkaXNwYXRjaE1hcDsKICAgICBpZiAo
ZGlzcGF0Y2hNYXAuZ2V0KCkuaXNFbXB0eSgpKSB7CkBAIC0zNTgsMTQ2ICszNTgsMTUzIEBAIHZv
aWQgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNv
bnN0IFN0cmluZyYgbWV0aG9kLCBSCiAgICAgICAgICAgICBkaXNwYXRjaE1hcC5nZXQoKS5hZGQo
Y29tbWFuZHNbaV0ubmFtZSwgY29tbWFuZHNbaV0uaGFuZGxlcik7CiAgICAgfQogCi0gICAgYXV0
byBmaW5kUmVzdWx0ID0gZGlzcGF0Y2hNYXAuZ2V0KCkuZmluZChtZXRob2QpOworICAgIGF1dG8g
ZmluZFJlc3VsdCA9IGRpc3BhdGNoTWFwLmdldCgpLmZpbmQocHJvdG9jb2xfbWV0aG9kKTsKICAg
ICBpZiAoZmluZFJlc3VsdCA9PSBkaXNwYXRjaE1hcC5nZXQoKS5lbmQoKSkgewotICAgICAgICBt
X2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVy
OjpNZXRob2ROb3RGb3VuZCwgIidOZXR3b3JrMy4iICsgbWV0aG9kICsgIicgd2FzIG5vdCBmb3Vu
ZCIpOworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJh
Y2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidOZXR3b3JrMy4iICsgcHJvdG9jb2xf
bWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgKCgqdGhpcykuKmZpbmRSZXN1bHQtPnZhbHVlKShyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1l
dGVycykpOworICAgICgoKnRoaXMpLipmaW5kUmVzdWx0LT52YWx1ZSkocHJvdG9jb2xfY2FsbElk
LCBXVEZNb3ZlKHByb3RvY29sX3BhcmFtZXRlcnMpKTsKIH0KIAotdm9pZCBOZXR3b3JrM0JhY2tl
bmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UxKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6
T2JqZWN0PiYmKQordm9pZCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2Ux
KGxvbmcgcHJvdG9jb2xfY2FsbElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQogewogI2lmIEVO
QUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogICAgIGlmIChtX2FsdGVybmF0
ZURpc3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVzb3Vy
Y2UxKHJlcXVlc3RJZCk7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJlc291
cmNlMShwcm90b2NvbF9jYWxsSWQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmIC8v
IEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogCi0gICAgRXJyb3JTdHJp
bmcgZXJyb3I7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0Ojpj
cmVhdGUoKTsKLSAgICBtX2FnZW50LT5sb2FkUmVzb3VyY2UxKGVycm9yKTsKKyAgICBhdXRvIHJl
c3VsdCA9IG1fYWdlbnQtPmxvYWRSZXNvdXJjZTEoKTsKKyAgICBpZiAoIXJlc3VsdCkgeworICAg
ICAgICBBU1NFUlQoIXJlc3VsdC5lcnJvcigpLmlzRW1wdHkoKSk7CisgICAgICAgIG1fYmFja2Vu
ZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZl
ckVycm9yLCByZXN1bHQuZXJyb3IoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBp
ZiAoIWVycm9yLmxlbmd0aCgpKQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVz
cG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKLSAgICBlbHNlCi0gICAg
ICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3Bh
dGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7CisgICAgYXV0byBwcm90b2NvbF9q
c29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgbV9iYWNrZW5kRGlzcGF0
Y2hlci0+c2VuZFJlc3BvbnNlKHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9qc29u
TWVzc2FnZSksIGZhbHNlKTsKIH0KIAotdm9pZCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjps
b2FkUmVzb3VyY2UyKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQordm9p
ZCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UyKGxvbmcgcHJvdG9jb2xf
Y2FsbElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQogewogI2lmIEVOQUJMRShJTlNQRUNUT1Jf
QUxURVJOQVRFX0RJU1BBVENIRVJTKQogICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsK
LSAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVzb3VyY2UyKHJlcXVlc3RJZCk7
CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJlc291cmNlMihwcm90b2NvbF9j
YWxsSWQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNU
T1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogCi0gICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAg
UmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBt
X2FnZW50LT5sb2FkUmVzb3VyY2UyKGVycm9yKTsKKyAgICBhdXRvIHJlc3VsdCA9IG1fYWdlbnQt
PmxvYWRSZXNvdXJjZTIoKTsKKyAgICBpZiAoIXJlc3VsdCkgeworICAgICAgICBBU1NFUlQoIXJl
c3VsdC5lcnJvcigpLmlzRW1wdHkoKSk7CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJl
cG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCByZXN1bHQu
ZXJyb3IoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBpZiAoIWVycm9yLmxlbmd0
aCgpKQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElk
LCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERp
c3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVy
cm9yLCBXVEZNb3ZlKGVycm9yKSk7CisgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpT
T046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3Bv
bnNlKHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSksIGZhbHNl
KTsKIH0KIAotdm9pZCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UzKGxv
bmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQordm9pZCBOZXR3b3JrM0JhY2tl
bmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UzKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBSZWZQdHI8
SlNPTjo6T2JqZWN0PiYmKQogewogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BB
VENIRVJTKQogICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRl
cm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVzb3VyY2UzKHJlcXVlc3RJZCk7CisgICAgICAgIG1fYWx0
ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJlc291cmNlMyhwcm90b2NvbF9jYWxsSWQpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJ
U1BBVENIRVJTKQogCi0gICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVmPEpTT046Ok9iamVj
dD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBtX2FnZW50LT5sb2FkUmVz
b3VyY2UzKGVycm9yKTsKKyAgICBhdXRvIHJlc3VsdCA9IG1fYWdlbnQtPmxvYWRSZXNvdXJjZTMo
KTsKKyAgICBpZiAoIXJlc3VsdCkgeworICAgICAgICBBU1NFUlQoIXJlc3VsdC5lcnJvcigpLmlz
RW1wdHkoKSk7CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJy
b3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCByZXN1bHQuZXJyb3IoKSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQotICAgICAgICBt
X2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3Vs
dCksIGZhbHNlKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9y
dFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVy
cm9yKSk7CisgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3Jl
YXRlKCk7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHByb3RvY29sX2Nh
bGxJZCwgV1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSksIGZhbHNlKTsKIH0KIAotdm9pZCBO
ZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U0KGxvbmcgcmVxdWVzdElkLCBS
ZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQordm9pZCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjps
b2FkUmVzb3VyY2U0KGxvbmcgcHJvdG9jb2xfY2FsbElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYm
KQogewogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogICAgIGlm
IChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVy
LT5sb2FkUmVzb3VyY2U0KHJlcXVlc3RJZCk7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hl
ci0+bG9hZFJlc291cmNlNChwcm90b2NvbF9jYWxsSWQpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogCi0g
ICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNP
Tjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBtX2FnZW50LT5sb2FkUmVzb3VyY2U0KGVycm9yKTsK
KyAgICBhdXRvIHJlc3VsdCA9IG1fYWdlbnQtPmxvYWRSZXNvdXJjZTQoKTsKKyAgICBpZiAoIXJl
c3VsdCkgeworICAgICAgICBBU1NFUlQoIXJlc3VsdC5lcnJvcigpLmlzRW1wdHkoKSk7CisgICAg
ICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3Bh
dGNoZXI6OlNlcnZlckVycm9yLCByZXN1bHQuZXJyb3IoKSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CiAKLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQotICAgICAgICBtX2JhY2tlbmREaXNwYXRj
aGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKLSAg
ICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3Io
QmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7CisgICAgYXV0
byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgbV9i
YWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShw
cm90b2NvbF9qc29uTWVzc2FnZSksIGZhbHNlKTsKIH0KIAotdm9pZCBOZXR3b3JrM0JhY2tlbmRE
aXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U1KGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiYmKQordm9pZCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U1KGxv
bmcgcHJvdG9jb2xfY2FsbElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQogewogI2lmIEVOQUJM
RShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogICAgIGlmIChtX2FsdGVybmF0ZURp
c3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVzb3VyY2U1
KHJlcXVlc3RJZCk7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJlc291cmNl
NShwcm90b2NvbF9jYWxsSWQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmIC8vIEVO
QUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogCi0gICAgRXJyb3JTdHJpbmcg
ZXJyb3I7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVh
dGUoKTsKLSAgICBtX2FnZW50LT5sb2FkUmVzb3VyY2U1KGVycm9yKTsKKyAgICBhdXRvIHJlc3Vs
dCA9IG1fYWdlbnQtPmxvYWRSZXNvdXJjZTUoKTsKKyAgICBpZiAoIXJlc3VsdCkgeworICAgICAg
ICBBU1NFUlQoIXJlc3VsdC5lcnJvcigpLmlzRW1wdHkoKSk7CisgICAgICAgIG1fYmFja2VuZERp
c3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVy
cm9yLCByZXN1bHQuZXJyb3IoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBpZiAo
IWVycm9yLmxlbmd0aCgpKQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9u
c2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKLSAgICBlbHNlCi0gICAgICAg
IG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNo
ZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7CisgICAgYXV0byBwcm90b2NvbF9qc29u
TWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+c2VuZFJlc3BvbnNlKHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9qc29uTWVz
c2FnZSksIGZhbHNlKTsKIH0KIAotdm9pZCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2Fk
UmVzb3VyY2U2KGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQordm9pZCBO
ZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U2KGxvbmcgcHJvdG9jb2xfY2Fs
bElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQogewogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQogICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAg
ICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVzb3VyY2U2KHJlcXVlc3RJZCk7Cisg
ICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJlc291cmNlNihwcm90b2NvbF9jYWxs
SWQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1Jf
QUxURVJOQVRFX0RJU1BBVENIRVJTKQogCi0gICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVm
PEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBtX2Fn
ZW50LT5sb2FkUmVzb3VyY2U2KGVycm9yKTsKKyAgICBhdXRvIHJlc3VsdCA9IG1fYWdlbnQtPmxv
YWRSZXNvdXJjZTYoKTsKKyAgICBpZiAoIXJlc3VsdCkgeworICAgICAgICBBU1NFUlQoIXJlc3Vs
dC5lcnJvcigpLmlzRW1wdHkoKSk7CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9y
dFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCByZXN1bHQuZXJy
b3IoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBpZiAoIWVycm9yLmxlbmd0aCgp
KQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBX
VEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3Bh
dGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9y
LCBXVEZNb3ZlKGVycm9yKSk7CisgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046
Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNl
KHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSksIGZhbHNlKTsK
IH0KIAotdm9pZCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U3KGxvbmcg
cmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQordm9pZCBOZXR3b3JrM0JhY2tlbmRE
aXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U3KGxvbmcgcHJvdG9jb2xfY2FsbElkLCBSZWZQdHI8SlNP
Tjo6T2JqZWN0PiYmKQogewogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENI
RVJTKQogICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5h
dGVEaXNwYXRjaGVyLT5sb2FkUmVzb3VyY2U3KHJlcXVlc3RJZCk7CisgICAgICAgIG1fYWx0ZXJu
YXRlRGlzcGF0Y2hlci0+bG9hZFJlc291cmNlNyhwcm90b2NvbF9jYWxsSWQpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BB
VENIRVJTKQogCi0gICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4g
cmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBtX2FnZW50LT5sb2FkUmVzb3Vy
Y2U3KGVycm9yKTsKKyAgICBhdXRvIHJlc3VsdCA9IG1fYWdlbnQtPmxvYWRSZXNvdXJjZTcoKTsK
KyAgICBpZiAoIXJlc3VsdCkgeworICAgICAgICBBU1NFUlQoIXJlc3VsdC5lcnJvcigpLmlzRW1w
dHkoKSk7CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3Io
QmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCByZXN1bHQuZXJyb3IoKSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CiAKLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQotICAgICAgICBtX2Jh
Y2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCks
IGZhbHNlKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFBy
b3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9y
KSk7CisgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRl
KCk7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHByb3RvY29sX2NhbGxJ
ZCwgV1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSksIGZhbHNlKTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgSW5zcGVjdG9yCkBAIC01MzgsNiArNTQ1LDcgQEAgdm9pZCBOZXR3b3JrM0JhY2tlbmRE
aXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U3KGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2Jq
ZWMKIAogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDx3dGYvSlNP
TlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKQEAgLTU4MSw3ICs1ODksNiBA
QCBjbGFzcyBGcm9udGVuZFJvdXRlcjsKICNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVy
cy5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIu
aD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3Ig
ewogCkBAIC02MjIsNyArNjI5LDkgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiAjcHJhZ21hIG9u
Y2UKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4K
LSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+
CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC02ODEsOCArNjkwLDcgQEAgdXNpbmcg
TG9hZGVySWQgPSBTdHJpbmc7CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGVzdFBy
b3RvY29sT2JqZWN0cy5oIgogCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8
d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAKIG5hbWVz
cGFjZSBJbnNwZWN0b3IgewogCkBAIC03MzksNyArNzQ3LDcgQEAgY2xhc3MgT2JqQ0luc3BlY3Rv
ck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgQWx0ZXJuYXRlTmV0d29y
azFCYWMKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBPYmpDSW5z
cGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcihpZDxUZXN0UHJvdG9jb2xOZXR3b3JrMURv
bWFpbkhhbmRsZXI+IGhhbmRsZXIpIHsgbV9kZWxlZ2F0ZSA9IGhhbmRsZXI7IH0KLSAgICB2b2lk
IGxvYWRSZXNvdXJjZTEobG9uZyByZXF1ZXN0SWQpIGZpbmFsOworICAgIHZvaWQgbG9hZFJlc291
cmNlMShsb25nIHByb3RvY29sX2NhbGxJZCkgZmluYWw7CiBwcml2YXRlOgogICAgIFJldGFpblB0
cjxpZDxUZXN0UHJvdG9jb2xOZXR3b3JrMURvbWFpbkhhbmRsZXI+PiBtX2RlbGVnYXRlOwogfTsK
QEAgLTc0OCwxMyArNzU2LDEzIEBAIGNsYXNzIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmRE
aXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEFsdGVybmF0ZU5ldHdvcmszQmFjCiAgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgT2JqQ0luc3BlY3Rvck5ldHdvcmszQmFj
a2VuZERpc3BhdGNoZXIoaWQ8VGVzdFByb3RvY29sTmV0d29yazNEb21haW5IYW5kbGVyPiBoYW5k
bGVyKSB7IG1fZGVsZWdhdGUgPSBoYW5kbGVyOyB9Ci0gICAgdm9pZCBsb2FkUmVzb3VyY2UxKGxv
bmcgcmVxdWVzdElkKSBmaW5hbDsKLSAgICB2b2lkIGxvYWRSZXNvdXJjZTIobG9uZyByZXF1ZXN0
SWQpIGZpbmFsOwotICAgIHZvaWQgbG9hZFJlc291cmNlMyhsb25nIHJlcXVlc3RJZCkgZmluYWw7
Ci0gICAgdm9pZCBsb2FkUmVzb3VyY2U0KGxvbmcgcmVxdWVzdElkKSBmaW5hbDsKLSAgICB2b2lk
IGxvYWRSZXNvdXJjZTUobG9uZyByZXF1ZXN0SWQpIGZpbmFsOwotICAgIHZvaWQgbG9hZFJlc291
cmNlNihsb25nIHJlcXVlc3RJZCkgZmluYWw7Ci0gICAgdm9pZCBsb2FkUmVzb3VyY2U3KGxvbmcg
cmVxdWVzdElkKSBmaW5hbDsKKyAgICB2b2lkIGxvYWRSZXNvdXJjZTEobG9uZyBwcm90b2NvbF9j
YWxsSWQpIGZpbmFsOworICAgIHZvaWQgbG9hZFJlc291cmNlMihsb25nIHByb3RvY29sX2NhbGxJ
ZCkgZmluYWw7CisgICAgdm9pZCBsb2FkUmVzb3VyY2UzKGxvbmcgcHJvdG9jb2xfY2FsbElkKSBm
aW5hbDsKKyAgICB2b2lkIGxvYWRSZXNvdXJjZTQobG9uZyBwcm90b2NvbF9jYWxsSWQpIGZpbmFs
OworICAgIHZvaWQgbG9hZFJlc291cmNlNShsb25nIHByb3RvY29sX2NhbGxJZCkgZmluYWw7Cisg
ICAgdm9pZCBsb2FkUmVzb3VyY2U2KGxvbmcgcHJvdG9jb2xfY2FsbElkKSBmaW5hbDsKKyAgICB2
b2lkIGxvYWRSZXNvdXJjZTcobG9uZyBwcm90b2NvbF9jYWxsSWQpIGZpbmFsOwogcHJpdmF0ZToK
ICAgICBSZXRhaW5QdHI8aWQ8VGVzdFByb3RvY29sTmV0d29yazNEb21haW5IYW5kbGVyPj4gbV9k
ZWxlZ2F0ZTsKIH07CkBAIC04MDIsMTYxICs4MTAsMTY5IEBAIHByaXZhdGU6CiAKIG5hbWVzcGFj
ZSBJbnNwZWN0b3IgewogCi12b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRj
aGVyOjpsb2FkUmVzb3VyY2UxKGxvbmcgcmVxdWVzdElkKQordm9pZCBPYmpDSW5zcGVjdG9yTmV0
d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMShsb25nIHByb3RvY29sX2NhbGxJ
ZCkKIHsKICAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Io
bG9hZFJlc291cmNlMVdpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazopXSkgewotICAg
ICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwg
QmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdvcmsxLmxvYWRSZXNvdXJj
ZTEnIHdhcyBub3QgZm91bmQiX3MpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBv
cnRQcm90b2NvbEVycm9yKHByb3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhv
ZE5vdEZvdW5kLCAiJ05ldHdvcmsxLmxvYWRSZXNvdXJjZTEnIHdhcyBub3QgZm91bmQiX3MpOwog
ICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCiAgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVy
cm9yKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3Io
cmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAg
ICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxs
SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwogICAgICAgICBiYWNr
ZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgIH07CiAKICAgICBpZCBz
dWNjZXNzQ2FsbGJhY2sgPSBeewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVz
cG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7CisgICAgICAg
IGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAg
ICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocHJvdG9jb2xfY2FsbElkLCBX
VEZNb3ZlKHByb3RvY29sX2pzb25NZXNzYWdlKSwgZmFsc2UpOwogICAgIH07CiAKICAgICBbbV9k
ZWxlZ2F0ZSBsb2FkUmVzb3VyY2UxV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNj
ZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsKIH0KIAotdm9pZCBPYmpDSW5zcGVjdG9yTmV0
d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMShsb25nIHJlcXVlc3RJZCkKK3Zv
aWQgT2JqQ0luc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTEo
bG9uZyBwcm90b2NvbF9jYWxsSWQpCiB7CiAgICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25kc1Rv
U2VsZWN0b3I6QHNlbGVjdG9yKGxvYWRSZXNvdXJjZTFXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNz
Q2FsbGJhY2s6KV0pIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9j
b2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidO
ZXR3b3JrMy5sb2FkUmVzb3VyY2UxJyB3YXMgbm90IGZvdW5kIl9zKTsKKyAgICAgICAgYmFja2Vu
ZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxsSWQsIEJhY2tl
bmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidOZXR3b3JrMy5sb2FkUmVzb3VyY2UxJyB3
YXMgbm90IGZvdW5kIl9zKTsKICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRp
bmdFcnJvcnMoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlkIGVycm9yQ2FsbGJh
Y2sgPSBeKE5TU3RyaW5nICplcnJvcikgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5y
ZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVy
cm9yLCBlcnJvcik7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29s
RXJyb3IocHJvdG9jb2xfY2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVy
cm9yKTsKICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsK
ICAgICB9OwogCiAgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKLSAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgSlNPTjo6T2JqZWN0OjpjcmVhdGUo
KSwgZmFsc2UpOworICAgICAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2Jq
ZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNl
KHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSksIGZhbHNlKTsK
ICAgICB9OwogCiAgICAgW21fZGVsZWdhdGUgbG9hZFJlc291cmNlMVdpdGhFcnJvckNhbGxiYWNr
OmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107CiB9CiAKLXZv
aWQgT2JqQ0luc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTIo
bG9uZyByZXF1ZXN0SWQpCit2b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRj
aGVyOjpsb2FkUmVzb3VyY2UyKGxvbmcgcHJvdG9jb2xfY2FsbElkKQogewogICAgIGlmICghW21f
ZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihsb2FkUmVzb3VyY2UyV2l0aEVy
cm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRj
aGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6
TWV0aG9kTm90Rm91bmQsICInTmV0d29yazMubG9hZFJlc291cmNlMicgd2FzIG5vdCBmb3VuZCJf
cyk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocHJv
dG9jb2xfY2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29y
azMubG9hZFJlc291cmNlMicgd2FzIG5vdCBmb3VuZCJfcyk7CiAgICAgICAgIGJhY2tlbmREaXNw
YXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
ICAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFj
a2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmRE
aXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hl
cigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHByb3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNo
ZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CiAgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNl
bmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgfTsKIAogICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF57
Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIEpT
T046Ok9iamVjdDo6Y3JlYXRlKCksIGZhbHNlKTsKKyAgICAgICAgYXV0byBwcm90b2NvbF9qc29u
TWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIGJhY2tlbmREaXNwYXRj
aGVyKCktPnNlbmRSZXNwb25zZShwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJvdG9jb2xfanNv
bk1lc3NhZ2UpLCBmYWxzZSk7CiAgICAgfTsKIAogICAgIFttX2RlbGVnYXRlIGxvYWRSZXNvdXJj
ZTJXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNz
Q2FsbGJhY2tdOwogfQogCi12b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRj
aGVyOjpsb2FkUmVzb3VyY2UzKGxvbmcgcmVxdWVzdElkKQordm9pZCBPYmpDSW5zcGVjdG9yTmV0
d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMyhsb25nIHByb3RvY29sX2NhbGxJ
ZCkKIHsKICAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Io
bG9hZFJlc291cmNlM1dpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazopXSkgewotICAg
ICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwg
QmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdvcmszLmxvYWRSZXNvdXJj
ZTMnIHdhcyBub3QgZm91bmQiX3MpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBv
cnRQcm90b2NvbEVycm9yKHByb3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhv
ZE5vdEZvdW5kLCAiJ05ldHdvcmszLmxvYWRSZXNvdXJjZTMnIHdhcyBub3QgZm91bmQiX3MpOwog
ICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCiAgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVy
cm9yKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3Io
cmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAg
ICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxs
SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwogICAgICAgICBiYWNr
ZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgIH07CiAKICAgICBpZCBz
dWNjZXNzQ2FsbGJhY2sgPSBeewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVz
cG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7CisgICAgICAg
IGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAg
ICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocHJvdG9jb2xfY2FsbElkLCBX
VEZNb3ZlKHByb3RvY29sX2pzb25NZXNzYWdlKSwgZmFsc2UpOwogICAgIH07CiAKICAgICBbbV9k
ZWxlZ2F0ZSBsb2FkUmVzb3VyY2UzV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNj
ZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsKIH0KIAotdm9pZCBPYmpDSW5zcGVjdG9yTmV0
d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNChsb25nIHJlcXVlc3RJZCkKK3Zv
aWQgT2JqQ0luc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTQo
bG9uZyBwcm90b2NvbF9jYWxsSWQpCiB7CiAgICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25kc1Rv
U2VsZWN0b3I6QHNlbGVjdG9yKGxvYWRSZXNvdXJjZTRXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNz
Q2FsbGJhY2s6KV0pIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9j
b2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidO
ZXR3b3JrMy5sb2FkUmVzb3VyY2U0JyB3YXMgbm90IGZvdW5kIl9zKTsKKyAgICAgICAgYmFja2Vu
ZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxsSWQsIEJhY2tl
bmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidOZXR3b3JrMy5sb2FkUmVzb3VyY2U0JyB3
YXMgbm90IGZvdW5kIl9zKTsKICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRp
bmdFcnJvcnMoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlkIGVycm9yQ2FsbGJh
Y2sgPSBeKE5TU3RyaW5nICplcnJvcikgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5y
ZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVy
cm9yLCBlcnJvcik7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29s
RXJyb3IocHJvdG9jb2xfY2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVy
cm9yKTsKICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsK
ICAgICB9OwogCiAgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKLSAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgSlNPTjo6T2JqZWN0OjpjcmVhdGUo
KSwgZmFsc2UpOworICAgICAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2Jq
ZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNl
KHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSksIGZhbHNlKTsK
ICAgICB9OwogCiAgICAgW21fZGVsZWdhdGUgbG9hZFJlc291cmNlNFdpdGhFcnJvckNhbGxiYWNr
OmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107CiB9CiAKLXZv
aWQgT2JqQ0luc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTUo
bG9uZyByZXF1ZXN0SWQpCit2b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRj
aGVyOjpsb2FkUmVzb3VyY2U1KGxvbmcgcHJvdG9jb2xfY2FsbElkKQogewogICAgIGlmICghW21f
ZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihsb2FkUmVzb3VyY2U1V2l0aEVy
cm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRj
aGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6
TWV0aG9kTm90Rm91bmQsICInTmV0d29yazMubG9hZFJlc291cmNlNScgd2FzIG5vdCBmb3VuZCJf
cyk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocHJv
dG9jb2xfY2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29y
azMubG9hZFJlc291cmNlNScgd2FzIG5vdCBmb3VuZCJfcyk7CiAgICAgICAgIGJhY2tlbmREaXNw
YXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
ICAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFj
a2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmRE
aXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hl
cigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHByb3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNo
ZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CiAgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNl
bmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgfTsKIAogICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF57
Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIEpT
T046Ok9iamVjdDo6Y3JlYXRlKCksIGZhbHNlKTsKKyAgICAgICAgYXV0byBwcm90b2NvbF9qc29u
TWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIGJhY2tlbmREaXNwYXRj
aGVyKCktPnNlbmRSZXNwb25zZShwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJvdG9jb2xfanNv
bk1lc3NhZ2UpLCBmYWxzZSk7CiAgICAgfTsKIAogICAgIFttX2RlbGVnYXRlIGxvYWRSZXNvdXJj
ZTVXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNz
Q2FsbGJhY2tdOwogfQogCi12b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRj
aGVyOjpsb2FkUmVzb3VyY2U2KGxvbmcgcmVxdWVzdElkKQordm9pZCBPYmpDSW5zcGVjdG9yTmV0
d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNihsb25nIHByb3RvY29sX2NhbGxJ
ZCkKIHsKICAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Io
bG9hZFJlc291cmNlNldpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazopXSkgewotICAg
ICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwg
QmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdvcmszLmxvYWRSZXNvdXJj
ZTYnIHdhcyBub3QgZm91bmQiX3MpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBv
cnRQcm90b2NvbEVycm9yKHByb3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhv
ZE5vdEZvdW5kLCAiJ05ldHdvcmszLmxvYWRSZXNvdXJjZTYnIHdhcyBub3QgZm91bmQiX3MpOwog
ICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCiAgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVy
cm9yKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3Io
cmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAg
ICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxs
SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwogICAgICAgICBiYWNr
ZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgIH07CiAKICAgICBpZCBz
dWNjZXNzQ2FsbGJhY2sgPSBeewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVz
cG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7CisgICAgICAg
IGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAg
ICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocHJvdG9jb2xfY2FsbElkLCBX
VEZNb3ZlKHByb3RvY29sX2pzb25NZXNzYWdlKSwgZmFsc2UpOwogICAgIH07CiAKICAgICBbbV9k
ZWxlZ2F0ZSBsb2FkUmVzb3VyY2U2V2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNj
ZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsKIH0KIAotdm9pZCBPYmpDSW5zcGVjdG9yTmV0
d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNyhsb25nIHJlcXVlc3RJZCkKK3Zv
aWQgT2JqQ0luc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTco
bG9uZyBwcm90b2NvbF9jYWxsSWQpCiB7CiAgICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25kc1Rv
U2VsZWN0b3I6QHNlbGVjdG9yKGxvYWRSZXNvdXJjZTdXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNz
Q2FsbGJhY2s6KV0pIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9j
b2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidO
ZXR3b3JrMy5sb2FkUmVzb3VyY2U3JyB3YXMgbm90IGZvdW5kIl9zKTsKKyAgICAgICAgYmFja2Vu
ZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxsSWQsIEJhY2tl
bmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidOZXR3b3JrMy5sb2FkUmVzb3VyY2U3JyB3
YXMgbm90IGZvdW5kIl9zKTsKICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRp
bmdFcnJvcnMoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlkIGVycm9yQ2FsbGJh
Y2sgPSBeKE5TU3RyaW5nICplcnJvcikgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5y
ZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVy
cm9yLCBlcnJvcik7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29s
RXJyb3IocHJvdG9jb2xfY2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVy
cm9yKTsKICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsK
ICAgICB9OwogCiAgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKLSAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgSlNPTjo6T2JqZWN0OjpjcmVhdGUo
KSwgZmFsc2UpOworICAgICAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2Jq
ZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNl
KHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSksIGZhbHNlKTsK
ICAgICB9OwogCiAgICAgW21fZGVsZWdhdGUgbG9hZFJlc291cmNlN1dpdGhFcnJvckNhbGxiYWNr
OmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0
ZWQvZW51bS12YWx1ZXMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZW51bS12YWx1ZXMuanNvbi1yZXN1bHQKaW5kZXgg
Nzk1M2NiZjIxODM4OGY4NDc3NzJiZDQxM2QxODAyNjI5YTdiODA1Yi4uOTkzZjlhYTI4YzcxMzY2
ZGRlZTdhZGExZjFjNjEwYzY3MWMxZmIyNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2VudW0tdmFsdWVzLmpzb24tcmVz
dWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9l
eHBlY3RlZC9lbnVtLXZhbHVlcy5qc29uLXJlc3VsdApAQCAtMzAsMTggKzMwLDE5IEBACiAKIC8v
IFR5cGVEb21haW4KIEluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW4oIlR5cGVEb21haW4i
LCBudWxsKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFbnVtKCJUeXBlRG9tYWluLlR5cGVE
b21haW5FbnVtIiwge1NoYXJlZDogInNoYXJlZCIsIFJlZDogInJlZCIsIEdyZWVuOiAiZ3JlZW4i
LCBCbHVlOiAiYmx1ZSJ9KTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFbnVtKCJUeXBlRG9t
YWluLkVudW0iLCB7U2hhcmVkOiAic2hhcmVkIiwgMTogIjEiLCAyOiAiMiJ9KTsKIEluc3BlY3Rv
ckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIlR5cGVEb21haW4iLCBudWxsKTsKIAogLy8gQ29tbWFu
ZERvbWFpbgogSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbigiQ29tbWFuZERvbWFpbiIs
IG51bGwpOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIkNvbW1hbmREb21haW4u
Y29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUiLCBudWxsLCBbXSwgWyJyZXR1cm5WYWx1ZSJdKTsK
K0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJDb21tYW5kRG9tYWluLmNvbW1hbmQi
LCBudWxsLCBbeyJuYW1lIjogImVudW1SZXF1aXJlZCIsICJ0eXBlIjogInN0cmluZyJ9LCB7Im5h
bWUiOiAiZW51bU9wdGlvbmFsIiwgInR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjogdHJ1ZX0s
IHsibmFtZSI6ICJwYXJhbWV0ZXJSZXF1aXJlZCIsICJ0eXBlIjogInN0cmluZyJ9LCB7Im5hbWUi
OiAicGFyYW1ldGVyT3B0aW9uYWwiLCAidHlwZSI6ICJzdHJpbmciLCAib3B0aW9uYWwiOiB0cnVl
fV0sIFsiZW51bVJlcXVpcmVkIiwgImVudW1PcHRpb25hbCIsICJyZXR1cm5SZXF1aXJlZCIsICJy
ZXR1cm5PcHRpb25hbCJdKTsKIEluc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIkNvbW1h
bmREb21haW4iLCBudWxsKTsKIAogLy8gRXZlbnREb21haW4KIEluc3BlY3RvckJhY2tlbmQucmVn
aXN0ZXJEb21haW4oIkV2ZW50RG9tYWluIiwgbnVsbCk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lz
dGVyRW51bSgiRXZlbnREb21haW4uRXZlbnRXaXRoRW51bVBhcmFtZXRlclBhcmFtZXRlciIsIHtT
aGFyZWQ6ICJzaGFyZWQiLCBCbGFjazogImJsYWNrIiwgV2hpdGU6ICJ3aGl0ZSJ9KTsKLUluc3Bl
Y3RvckJhY2tlbmQucmVnaXN0ZXJFdmVudCgiRXZlbnREb21haW4uZXZlbnRXaXRoRW51bVBhcmFt
ZXRlciIsIG51bGwsIFsicGFyYW1ldGVyIl0pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckVu
dW0oIkV2ZW50RG9tYWluLkV2ZW50UGFyYW1ldGVyUmVxdWlyZWQiLCB7U2hhcmVkOiAic2hhcmVk
IiwgU2hhcmVkUmVxdWlyZWQ6ICJzaGFyZWRSZXF1aXJlZCIsIEdyZXk6ICJncmV5In0pOworSW5z
cGVjdG9yQmFja2VuZC5yZWdpc3RlckVudW0oIkV2ZW50RG9tYWluLkV2ZW50UGFyYW1ldGVyT3B0
aW9uYWwiLCB7U2hhcmVkOiAic2hhcmVkIiwgU2hhcmVkT3B0aW9uYWw6ICJzaGFyZWRPcHRpb25h
bCIsIEdyZWVuOiAiZ3JlZW4ifSk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRXZlbnQoIkV2
ZW50RG9tYWluLmV2ZW50IiwgbnVsbCwgWyJlbnVtUmVxdWlyZWQiLCAiZW51bU9wdGlvbmFsIiwg
InBhcmFtZXRlclJlcXVpcmVkIiwgInBhcmFtZXRlck9wdGlvbmFsIl0pOwogSW5zcGVjdG9yQmFj
a2VuZC5yZWdpc3RlckV2ZW50RG9tYWluRGlzcGF0Y2hlciA9IEluc3BlY3RvckJhY2tlbmQucmVn
aXN0ZXJEaXNwYXRjaGVyLmJpbmQoSW5zcGVjdG9yQmFja2VuZCwgIkV2ZW50RG9tYWluIik7CiBJ
bnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJFdmVudERvbWFpbiIsIG51bGwpOwogIyMj
IEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMuaW4KQEAgLTgwLDcgKzgxLDcg
QEAgSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiRXZlbnREb21haW4iLCBudWxsKTsK
IAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogCi0jaW5jbHVk
ZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgi
CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4K
ICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgogCkBA
IC05OCw3ICs5OSw3IEBAIHByaXZhdGU6CiBjbGFzcyBBbHRlcm5hdGVDb21tYW5kRG9tYWluQmFj
a2VuZERpc3BhdGNoZXIgOiBwdWJsaWMgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewogcHVi
bGljOgogICAgIHZpcnR1YWwgfkFsdGVybmF0ZUNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hl
cigpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBjb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZShsb25n
IGNhbGxJZCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBjb21tYW5kKGxvbmcgcHJvdG9jb2xfY2Fs
bElkLCBjb25zdCBTdHJpbmcmIGVudW1SZXF1aXJlZCwgY29uc3QgU3RyaW5nJiBvcHRfZW51bU9w
dGlvbmFsLCBjb25zdCBTdHJpbmcmIHBhcmFtZXRlclJlcXVpcmVkLCBjb25zdCBTdHJpbmcmIG9w
dF9wYXJhbWV0ZXJPcHRpb25hbCkgPSAwOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
CkBAIC0xNDAsMTEgKzE0MSwxNCBAQCBwdWJsaWM6CiAKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xP
YmplY3RzLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXIuaD4KKyNpbmNsdWRlIDx0dXBsZT4KKyNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4KKyNp
bmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
IAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwor
CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIGNsYXNzIEFs
dGVybmF0ZUNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcjsKQEAgLTE1MiwxNCArMTU2LDcg
QEAgY2xhc3MgQWx0ZXJuYXRlQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOwogCiBjbGFz
cyBDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKIHB1YmxpYzoKLSAgICAv
LyBOYW1lZCBhZnRlciBwYXJhbWV0ZXIgJ3JldHVyblZhbHVlJyB3aGlsZSBnZW5lcmF0aW5nIGNv
bW1hbmQvZXZlbnQgY29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUuCi0gICAgZW51bSBjbGFzcyBS
ZXR1cm5WYWx1ZSB7Ci0gICAgICAgIFNoYXJlZCA9IDAsCi0gICAgICAgIEN5YW4gPSA2LAotICAg
ICAgICBNYWdlbnRhID0gNywKLSAgICAgICAgWWVsbG93ID0gOCwKLSAgICB9OyAvLyBlbnVtIGNs
YXNzIFJldHVyblZhbHVlCi0gICAgdmlydHVhbCB2b2lkIGNvbW1hbmRXaXRoRW51bVJldHVyblZh
bHVlKEVycm9yU3RyaW5nJiwgQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6
UmV0dXJuVmFsdWUqIG91dF9yZXR1cm5WYWx1ZSkgPSAwOworICAgIHZpcnR1YWwgUHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8c3RkOjp0dXBsZTxQcm90b2NvbDo6VHlwZURvbWFpbjo6RW51bSAvKiBl
bnVtUmVxdWlyZWQgKi8sIE9wdGlvbmFsPFByb3RvY29sOjpUeXBlRG9tYWluOjpFbnVtPiAvKiBv
cHRfZW51bU9wdGlvbmFsICovLCBTdHJpbmcgLyogcmV0dXJuUmVxdWlyZWQgKi8sIFN0cmluZyAv
KiBvcHRfcmV0dXJuT3B0aW9uYWwgKi8+PiBjb21tYW5kKFByb3RvY29sOjpUeXBlRG9tYWluOjpF
bnVtIGVudW1SZXF1aXJlZCwgT3B0aW9uYWw8UHJvdG9jb2w6OlR5cGVEb21haW46OkVudW0+JiYg
b3B0X2VudW1PcHRpb25hbCwgY29uc3QgU3RyaW5nJiBwYXJhbWV0ZXJSZXF1aXJlZCwgY29uc3Qg
U3RyaW5nJiBvcHRfcGFyYW1ldGVyT3B0aW9uYWwpID0gMDsKIHByb3RlY3RlZDoKICAgICB2aXJ0
dWFsIH5Db21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCk7CiB9OwpAQCAtMTY3
LDkgKzE2NCw5IEBAIHByb3RlY3RlZDoKIGNsYXNzIENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0
Y2hlciBmaW5hbCA6IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7CiBwdWJs
aWM6CiAgICAgc3RhdGljIFJlZjxDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0
ZShCYWNrZW5kRGlzcGF0Y2hlciYsIENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXIqKTsKLSAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1l
dGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKSBmaW5hbDsKKyAgICB2b2lkIGRpc3Bh
dGNoKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBjb25zdCBTdHJpbmcmIHByb3RvY29sX21ldGhvZCwg
UmVmPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9tZXNzYWdlKSBmaW5hbDsKIHByaXZhdGU6Ci0g
ICAgdm9pZCBjb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZShsb25nIHJlcXVlc3RJZCwgUmVmUHRy
PEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKKyAgICB2b2lkIGNvbW1hbmQobG9uZyBwcm90
b2NsX2NhbGxJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9wYXJhbWV0ZXJzKTsK
ICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIHB1YmxpYzoKICAg
ICB2b2lkIHNldEFsdGVybmF0ZURpc3BhdGNoZXIoQWx0ZXJuYXRlQ29tbWFuZERvbWFpbkJhY2tl
bmREaXNwYXRjaGVyKiBhbHRlcm5hdGVEaXNwYXRjaGVyKSB7IG1fYWx0ZXJuYXRlRGlzcGF0Y2hl
ciA9IGFsdGVybmF0ZURpc3BhdGNoZXI7IH0KQEAgLTIxOCw5ICsyMTUsNyBAQCBwcml2YXRlOgog
I2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKIAogI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0pTT05WYWx1
ZXMuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVS
UykKICNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCkBAIC0yNDIs
NDIgKzIzNyw2MyBAQCBDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkNvbW1hbmREb21h
aW5CYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlcgogICAgIG1fYmFja2VuZERpc3Bh
dGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbigiQ29tbWFuZERvbWFpbiJfcywgdGhp
cyk7CiB9CiAKLXZvaWQgQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChs
b25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYg
bWVzc2FnZSkKK3ZvaWQgQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChs
b25nIHByb3RvY29sX2NhbGxJZCwgY29uc3QgU3RyaW5nJiBwcm90b2NvbF9tZXRob2QsIFJlZjxK
U09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfbWVzc2FnZSkKIHsKICAgICBSZWY8Q29tbWFuZERvbWFp
bkJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKIAotICAgIFJlZlB0cjxKU09OOjpP
YmplY3Q+IHBhcmFtZXRlcnM7Ci0gICAgbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3MsIHBh
cmFtZXRlcnMpOworICAgIGF1dG8gcHJvdG9jb2xfcGFyYW1ldGVycyA9IHByb3RvY29sX21lc3Nh
Z2UtPmdldE9iamVjdCgicGFyYW1zIl9zKTsKIAotICAgIGlmIChtZXRob2QgPT0gImNvbW1hbmRX
aXRoRW51bVJldHVyblZhbHVlIikgewotICAgICAgICBjb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1
ZShyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykpOworICAgIGlmIChwcm90b2NvbF9tZXRo
b2QgPT0gImNvbW1hbmQiKSB7CisgICAgICAgIGNvbW1hbmQocHJvdG9jb2xfY2FsbElkLCBXVEZN
b3ZlKHByb3RvY29sX3BhcmFtZXRlcnMpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNo
ZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0NvbW1hbmREb21haW4uIiArIG1ldGhvZCArICInIHdhcyBu
b3QgZm91bmQiKTsKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9y
KEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidDb21tYW5kRG9tYWluLiIgKyBw
cm90b2NvbF9tZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7CiB9CiAKLXZvaWQgQ29tbWFuZERv
bWFpbkJhY2tlbmREaXNwYXRjaGVyOjpjb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZShsb25nIHJl
cXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikKK3ZvaWQgQ29tbWFuZERvbWFpbkJhY2tl
bmREaXNwYXRjaGVyOjpjb21tYW5kKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBSZWZQdHI8SlNPTjo6
T2JqZWN0PiYmIHByb3RvY29sX3BhcmFtZXRlcnMpCiB7CisgICAgYXV0byBpbl9lbnVtUmVxdWly
ZWRfanNvbiA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFN0cmluZyhwcm90b2NvbF9wYXJhbWV0
ZXJzLmdldCgpLCAiZW51bVJlcXVpcmVkIl9zLCB0cnVlKTsKKyAgICBhdXRvIGluX29wdF9lbnVt
T3B0aW9uYWxfanNvbiA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFN0cmluZyhwcm90b2NvbF9w
YXJhbWV0ZXJzLmdldCgpLCAiZW51bU9wdGlvbmFsIl9zLCBmYWxzZSk7CisgICAgYXV0byBpbl9w
YXJhbWV0ZXJSZXF1aXJlZCA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFN0cmluZyhwcm90b2Nv
bF9wYXJhbWV0ZXJzLmdldCgpLCAicGFyYW1ldGVyUmVxdWlyZWQiX3MsIHRydWUpOworICAgIGF1
dG8gaW5fb3B0X3BhcmFtZXRlck9wdGlvbmFsID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3Ry
aW5nKHByb3RvY29sX3BhcmFtZXRlcnMuZ2V0KCksICJwYXJhbWV0ZXJPcHRpb25hbCJfcywgZmFs
c2UpOworICAgIGlmIChtX2JhY2tlbmREaXNwYXRjaGVyLT5oYXNQcm90b2NvbEVycm9ycygpKSB7
CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2Vu
ZERpc3BhdGNoZXI6OkludmFsaWRQYXJhbXMsICJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJ0Nv
bW1hbmREb21haW4uY29tbWFuZCcgY2FuJ3QgYmUgcHJvY2Vzc2VkIl9zKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKwogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJT
KQogICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVE
aXNwYXRjaGVyLT5jb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZShyZXF1ZXN0SWQpOworICAgICAg
ICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmNvbW1hbmQocHJvdG9jb2xfY2FsbElkLCBpbl9lbnVt
UmVxdWlyZWRfanNvbiwgaW5fb3B0X2VudW1PcHRpb25hbF9qc29uLCBpbl9wYXJhbWV0ZXJSZXF1
aXJlZCwgaW5fb3B0X3BhcmFtZXRlck9wdGlvbmFsKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
ICNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIAotICAg
IEVycm9yU3RyaW5nIGVycm9yOwotICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046
Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFu
ZGxlcjo6UmV0dXJuVmFsdWUgb3V0X3JldHVyblZhbHVlOwotICAgIG1fYWdlbnQtPmNvbW1hbmRX
aXRoRW51bVJldHVyblZhbHVlKGVycm9yLCAmb3V0X3JldHVyblZhbHVlKTsKKyAgICBhdXRvIGlu
X2VudW1SZXF1aXJlZCA9IFByb3RvY29sOjpUZXN0SGVscGVyczo6cGFyc2VFbnVtVmFsdWVGcm9t
U3RyaW5nPFByb3RvY29sOjpUeXBlRG9tYWluOjpFbnVtPihpbl9lbnVtUmVxdWlyZWRfanNvbik7
CisgICAgaWYgKCFpbl9lbnVtUmVxdWlyZWQpIHsKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIG1h
a2VTdHJpbmcoIlVua25vd24gZW51bVJlcXVpcmVkOiAiX3MsIGluX2VudW1SZXF1aXJlZF9qc29u
KSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQot
ICAgICAgICByZXN1bHQtPnNldFN0cmluZygicmV0dXJuVmFsdWUiX3MsIEluc3BlY3Rvcjo6UHJv
dG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShvdXRfcmV0dXJuVmFsdWUp
KTsKKyAgICBhdXRvIGluX29wdF9lbnVtT3B0aW9uYWwgPSBQcm90b2NvbDo6VGVzdEhlbHBlcnM6
OnBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxQcm90b2NvbDo6VHlwZURvbWFpbjo6RW51bT4oaW5f
b3B0X2VudW1PcHRpb25hbF9qc29uKTsKIAotICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCi0gICAg
ICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUo
cmVzdWx0KSwgZmFsc2UpOwotICAgIGVsc2UKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+
cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1v
dmUoZXJyb3IpKTsKKyAgICBhdXRvIHJlc3VsdCA9IG1fYWdlbnQtPmNvbW1hbmQoKmluX2VudW1S
ZXF1aXJlZCwgV1RGTW92ZShpbl9vcHRfZW51bU9wdGlvbmFsKSwgaW5fcGFyYW1ldGVyUmVxdWly
ZWQsIGluX29wdF9wYXJhbWV0ZXJPcHRpb25hbCk7CisgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAg
ICAgQVNTRVJUKCFyZXN1bHQuZXJyb3IoKS5pc0VtcHR5KCkpOworICAgICAgICBtX2JhY2tlbmRE
aXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJF
cnJvciwgcmVzdWx0LmVycm9yKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYXV0
byBbb3V0X2VudW1SZXF1aXJlZCwgb3V0X29wdF9lbnVtT3B0aW9uYWwsIG91dF9yZXR1cm5SZXF1
aXJlZCwgb3V0X29wdF9yZXR1cm5PcHRpb25hbF0gPSBXVEZNb3ZlKHJlc3VsdC52YWx1ZSgpKTsK
KworICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgp
OworICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoImVudW1SZXF1aXJlZCJfcywg
UHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShvdXRfZW51bVJlcXVp
cmVkKSk7CisgICAgaWYgKCEhb3V0X29wdF9lbnVtT3B0aW9uYWwpCisgICAgICAgIHByb3RvY29s
X2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoImVudW1PcHRpb25hbCJfcywgUHJvdG9jb2w6OlRlc3RI
ZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZSgqb3V0X29wdF9lbnVtT3B0aW9uYWwpKTsKKyAg
ICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJyZXR1cm5SZXF1aXJlZCJfcywgb3V0
X3JldHVyblJlcXVpcmVkKTsKKyAgICBpZiAoISFvdXRfb3B0X3JldHVybk9wdGlvbmFsKQorICAg
ICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJyZXR1cm5PcHRpb25hbCJfcywg
b3V0X29wdF9yZXR1cm5PcHRpb25hbCk7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJl
c3BvbnNlKHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSksIGZh
bHNlKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCkBAIC0zMTgsNiArMzM0LDcgQEAg
dm9pZCBDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OmNvbW1hbmRXaXRoRW51bVJldHVy
blZhbHVlKGxvbmcgcmVxdWVzdElkLAogCiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5o
IgogI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+
CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3Ig
ewpAQCAtMzI4LDEzICszNDUsMTkgQEAgY2xhc3MgRXZlbnREb21haW5Gcm9udGVuZERpc3BhdGNo
ZXIgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIEV2ZW50RG9t
YWluRnJvbnRlbmREaXNwYXRjaGVyKEZyb250ZW5kUm91dGVyJiBmcm9udGVuZFJvdXRlcikgOiBt
X2Zyb250ZW5kUm91dGVyKGZyb250ZW5kUm91dGVyKSB7IH0KLSAgICAgICAgLy8gTmFtZWQgYWZ0
ZXIgcGFyYW1ldGVyICdwYXJhbWV0ZXInIHdoaWxlIGdlbmVyYXRpbmcgY29tbWFuZC9ldmVudCBl
dmVudFdpdGhFbnVtUGFyYW1ldGVyLgotICAgICAgICBlbnVtIGNsYXNzIFBhcmFtZXRlciB7Cisg
ICAgICAgIC8vIE5hbWVkIGFmdGVyIHBhcmFtZXRlciAncGFyYW1ldGVyUmVxdWlyZWQnIHdoaWxl
IGdlbmVyYXRpbmcgY29tbWFuZC9ldmVudCBldmVudC4KKyAgICAgICAgZW51bSBjbGFzcyBQYXJh
bWV0ZXJSZXF1aXJlZCB7CiAgICAgICAgICAgICBTaGFyZWQgPSAwLAotICAgICAgICAgICAgQmxh
Y2sgPSA0LAotICAgICAgICAgICAgV2hpdGUgPSA1LAotICAgICAgICB9OyAvLyBlbnVtIGNsYXNz
IFBhcmFtZXRlcgotICAgIHZvaWQgZXZlbnRXaXRoRW51bVBhcmFtZXRlcihQYXJhbWV0ZXIgcGFy
YW1ldGVyKTsKKyAgICAgICAgICAgIFNoYXJlZFJlcXVpcmVkID0gMywKKyAgICAgICAgICAgIEdy
ZXkgPSA0LAorICAgICAgICB9OyAvLyBlbnVtIGNsYXNzIFBhcmFtZXRlclJlcXVpcmVkCisgICAg
ICAgIC8vIE5hbWVkIGFmdGVyIHBhcmFtZXRlciAncGFyYW1ldGVyT3B0aW9uYWwnIHdoaWxlIGdl
bmVyYXRpbmcgY29tbWFuZC9ldmVudCBldmVudC4KKyAgICAgICAgZW51bSBjbGFzcyBQYXJhbWV0
ZXJPcHRpb25hbCB7CisgICAgICAgICAgICBTaGFyZWQgPSAwLAorICAgICAgICAgICAgU2hhcmVk
T3B0aW9uYWwgPSA1LAorICAgICAgICAgICAgR3JlZW4gPSA2LAorICAgICAgICB9OyAvLyBlbnVt
IGNsYXNzIFBhcmFtZXRlck9wdGlvbmFsCisgICAgdm9pZCBldmVudChQcm90b2NvbDo6VHlwZURv
bWFpbjo6RW51bSBlbnVtUmVxdWlyZWQsIE9wdGlvbmFsPFByb3RvY29sOjpUeXBlRG9tYWluOjpF
bnVtPiYmIG9wdF9lbnVtT3B0aW9uYWwsIGNvbnN0IFN0cmluZyYgcGFyYW1ldGVyUmVxdWlyZWQs
IGNvbnN0IFN0cmluZyYgb3B0X3BhcmFtZXRlck9wdGlvbmFsKTsKIHByaXZhdGU6CiAgICAgRnJv
bnRlbmRSb3V0ZXImIG1fZnJvbnRlbmRSb3V0ZXI7CiB9OwpAQCAtMzc2LDE5ICszOTksMjMgQEAg
cHJpdmF0ZToKICNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgogCiAjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3
dGYvdGV4dC9DU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCi12b2lkIEV2ZW50
RG9tYWluRnJvbnRlbmREaXNwYXRjaGVyOjpldmVudFdpdGhFbnVtUGFyYW1ldGVyKFBhcmFtZXRl
ciBwYXJhbWV0ZXIpCit2b2lkIEV2ZW50RG9tYWluRnJvbnRlbmREaXNwYXRjaGVyOjpldmVudChQ
cm90b2NvbDo6VHlwZURvbWFpbjo6RW51bSBlbnVtUmVxdWlyZWQsIE9wdGlvbmFsPFByb3RvY29s
OjpUeXBlRG9tYWluOjpFbnVtPiYmIG9wdF9lbnVtT3B0aW9uYWwsIGNvbnN0IFN0cmluZyYgcGFy
YW1ldGVyUmVxdWlyZWQsIGNvbnN0IFN0cmluZyYgb3B0X3BhcmFtZXRlck9wdGlvbmFsKQogewot
ICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUo
KTsKLSAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJFdmVudERvbWFpbi5l
dmVudFdpdGhFbnVtUGFyYW1ldGVyIl9zKTsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBwYXJhbXNP
YmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIHBhcmFtc09iamVjdC0+c2V0U3Ry
aW5nKCJwYXJhbWV0ZXIiX3MsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRF
bnVtQ29uc3RhbnRWYWx1ZShwYXJhbWV0ZXIpKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0
KCJwYXJhbXMiX3MsIFdURk1vdmUocGFyYW1zT2JqZWN0KSk7CisgICAgYXV0byBwcm90b2NvbF9q
c29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgcHJvdG9jb2xfanNvbk1l
c3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiRXZlbnREb21haW4uZXZlbnQiX3MpOworICAg
IGF1dG8gcHJvdG9jb2xfcGFyYW1zT2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAg
ICBwcm90b2NvbF9wYXJhbXNPYmplY3QtPnNldFN0cmluZygiZW51bVJlcXVpcmVkIl9zLCBQcm90
b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKGVudW1SZXF1aXJlZCkpOwor
ICAgIGlmICghIW9wdF9lbnVtT3B0aW9uYWwpCisgICAgICAgIHByb3RvY29sX3BhcmFtc09iamVj
dC0+c2V0U3RyaW5nKCJlbnVtT3B0aW9uYWwiX3MsIFByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0
RW51bUNvbnN0YW50VmFsdWUoKm9wdF9lbnVtT3B0aW9uYWwpKTsKKyAgICBwcm90b2NvbF9wYXJh
bXNPYmplY3QtPnNldFN0cmluZygicGFyYW1ldGVyUmVxdWlyZWQiX3MsIHBhcmFtZXRlclJlcXVp
cmVkKTsKKyAgICBpZiAoISFvcHRfcGFyYW1ldGVyT3B0aW9uYWwpCisgICAgICAgIHByb3RvY29s
X3BhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJwYXJhbWV0ZXJPcHRpb25hbCJfcywgb3B0X3BhcmFt
ZXRlck9wdGlvbmFsKTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJh
bXMiX3MsIFdURk1vdmUocHJvdG9jb2xfcGFyYW1zT2JqZWN0KSk7CiAKLSAgICBtX2Zyb250ZW5k
Um91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOworICAgIG1fZnJv
bnRlbmRSb3V0ZXIuc2VuZEV2ZW50KHByb3RvY29sX2pzb25NZXNzYWdlLT50b0pTT05TdHJpbmco
KSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgpAQCAtNDI4LDcgKzQ1NSw5IEBAIHZv
aWQgRXZlbnREb21haW5Gcm9udGVuZERpc3BhdGNoZXI6OmV2ZW50V2l0aEVudW1QYXJhbWV0ZXIo
UGFyYW1ldGVyIHBhcmFtZXRlcikKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25z
Lmg+CisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwu
aD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3Rv
ciB7CiAKQEAgLTQ0MCw3ICs0NjksNyBAQCBuYW1lc3BhY2UgUHJvdG9jb2wgewogCiAvLyBGb3J3
YXJkIGRlY2xhcmF0aW9ucy4KIG5hbWVzcGFjZSBUeXBlRG9tYWluIHsKLWVudW0gY2xhc3MgVHlw
ZURvbWFpbkVudW07CitlbnVtIGNsYXNzIEVudW07CiB9IC8vIFR5cGVEb21haW4KIC8vIEVuZCBv
ZiBmb3J3YXJkIGRlY2xhcmF0aW9ucy4KIApAQCAtNDYwLDEyICs0ODksMTEgQEAgdGVtcGxhdGU8
dHlwZW5hbWUgVD4gU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKFQgZW51bVZhbHVlKQogCiBu
YW1lc3BhY2UgVHlwZURvbWFpbiB7CiAKLWVudW0gY2xhc3MgVHlwZURvbWFpbkVudW0geworZW51
bSBjbGFzcyBFbnVtIHsKICAgICBTaGFyZWQgPSAwLAotICAgIFJlZCA9IDEsCi0gICAgR3JlZW4g
PSAyLAotICAgIEJsdWUgPSAzLAotfTsgLy8gZW51bSBjbGFzcyBUeXBlRG9tYWluRW51bQorICAg
IDEgPSAxLAorICAgIDIgPSAyLAorfTsgLy8gZW51bSBjbGFzcyBFbnVtCiAKIH0gLy8gVHlwZURv
bWFpbgogCkBAIC00NzgsNyArNTA2LDcgQEAgT3B0aW9uYWw8UHJvdG9jb2xFbnVtVHlwZT4gcGFy
c2VFbnVtVmFsdWVGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYpOwogCiAvLyBFbnVtcyBpbiB0aGUg
J1R5cGVEb21haW4nIERvbWFpbgogdGVtcGxhdGU8PgotT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90
b2NvbDo6VHlwZURvbWFpbjo6VHlwZURvbWFpbkVudW0+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmlu
ZzxJbnNwZWN0b3I6OlByb3RvY29sOjpUeXBlRG9tYWluOjpUeXBlRG9tYWluRW51bT4oY29uc3Qg
U3RyaW5nJik7CitPcHRpb25hbDxQcm90b2NvbDo6VHlwZURvbWFpbjo6RW51bT4gcGFyc2VFbnVt
VmFsdWVGcm9tU3RyaW5nPFByb3RvY29sOjpUeXBlRG9tYWluOjpFbnVtPihjb25zdCBTdHJpbmcm
KTsKIAogfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKIApAQCAtNDkyLDcgKzUyMCw3IEBAIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsKIAogLy8gSGFzaCBkZWNsYXJh
dGlvbnMgaW4gdGhlICdUeXBlRG9tYWluJyBEb21haW4KIHRlbXBsYXRlPD4KLXN0cnVjdCBEZWZh
dWx0SGFzaDxJbnNwZWN0b3I6OlByb3RvY29sOjpUeXBlRG9tYWluOjpUeXBlRG9tYWluRW51bT4g
OiBJbnRIYXNoPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlR5cGVEb21haW46OlR5cGVEb21haW5FbnVt
PiB7IH07CitzdHJ1Y3QgRGVmYXVsdEhhc2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6VHlwZURvbWFp
bjo6RW51bT4gOiBJbnRIYXNoPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlR5cGVEb21haW46OkVudW0+
IHsgfTsKIAogfSAvLyBuYW1lc3BhY2UgV1RGCiAjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9i
amVjdHMuaApAQCAtNTMwLDggKzU1OCw3IEBAIHN0cnVjdCBEZWZhdWx0SGFzaDxJbnNwZWN0b3I6
OlByb3RvY29sOjpUeXBlRG9tYWluOjpUeXBlRG9tYWluRW51bT4gOiBJbnRIYXNoPEluCiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogCi0jaW5j
bHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2lu
Y2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC01
NDEsMTQgKzU2OCwxNiBAQCBuYW1lc3BhY2UgVGVzdEhlbHBlcnMgewogCiBzdGF0aWMgY29uc3Qg
Y2hhciogY29uc3QgZW51bV9jb25zdGFudF92YWx1ZXNbXSA9IHsKICAgICAic2hhcmVkIiwKLSAg
ICAicmVkIiwKKyAgICAiMSIsCisgICAgIjIiLAorICAgICJzaGFyZWRSZXF1aXJlZCIsCisgICAg
ImdyZXkiLAorICAgICJzaGFyZWRPcHRpb25hbCIsCiAgICAgImdyZWVuIiwKLSAgICAiYmx1ZSIs
CiAgICAgImJsYWNrIiwKKyAgICAicmVkIiwKICAgICAid2hpdGUiLAotICAgICJjeWFuIiwKLSAg
ICAibWFnZW50YSIsCi0gICAgInllbGxvdyIsCisgICAgImJsdWUiLAogfTsKIAogU3RyaW5nIGdl
dEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKSB7CkBAIC01NTgsMTcgKzU4NywxNiBAQCBTdHJp
bmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpIHsKIC8vIEVudW1zIGluIHRoZSAnVHlw
ZURvbWFpbicgRG9tYWluCiAKIHRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlR5cGVEb21haW46OlR5cGVEb21haW5FbnVtPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8
SW5zcGVjdG9yOjpQcm90b2NvbDo6VHlwZURvbWFpbjo6VHlwZURvbWFpbkVudW0+KGNvbnN0IFN0
cmluZyYgcHJvdG9jb2xTdHJpbmcpCitPcHRpb25hbDxQcm90b2NvbDo6VHlwZURvbWFpbjo6RW51
bT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPFByb3RvY29sOjpUeXBlRG9tYWluOjpFbnVtPihj
b25zdCBTdHJpbmcmIHByb3RvY29sU3RyaW5nKQogewogICAgIHN0YXRpYyBjb25zdCBzaXplX3Qg
Y29uc3RhbnRWYWx1ZXNbXSA9IHsKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29s
OjpUeXBlRG9tYWluOjpUeXBlRG9tYWluRW51bTo6U2hhcmVkLAotICAgICAgICAoc2l6ZV90KUlu
c3BlY3Rvcjo6UHJvdG9jb2w6OlR5cGVEb21haW46OlR5cGVEb21haW5FbnVtOjpSZWQsCi0gICAg
ICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6VHlwZURvbWFpbjo6VHlwZURvbWFpbkVu
dW06OkdyZWVuLAotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlR5cGVEb21h
aW46OlR5cGVEb21haW5FbnVtOjpCbHVlLAorICAgICAgICAoc2l6ZV90KVByb3RvY29sOjpUeXBl
RG9tYWluOjpFbnVtOjpTaGFyZWQsCisgICAgICAgIChzaXplX3QpUHJvdG9jb2w6OlR5cGVEb21h
aW46OkVudW06OjEsCisgICAgICAgIChzaXplX3QpUHJvdG9jb2w6OlR5cGVEb21haW46OkVudW06
OjIsCiAgICAgfTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDQ7ICsraSkKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IDM7ICsraSkKICAgICAgICAgaWYgKHByb3RvY29sU3RyaW5nID09
IGVudW1fY29uc3RhbnRfdmFsdWVzW2NvbnN0YW50VmFsdWVzW2ldXSkKLSAgICAgICAgICAgIHJl
dHVybiAoSW5zcGVjdG9yOjpQcm90b2NvbDo6VHlwZURvbWFpbjo6VHlwZURvbWFpbkVudW0pY29u
c3RhbnRWYWx1ZXNbaV07CisgICAgICAgICAgICByZXR1cm4gKFByb3RvY29sOjpUeXBlRG9tYWlu
OjpFbnVtKWNvbnN0YW50VmFsdWVzW2ldOwogCiAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0K
QEAgLTYyNSw3ICs2NTMsNyBAQCBjbGFzcyBPYmpDSW5zcGVjdG9yQ29tbWFuZERvbWFpbkJhY2tl
bmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEFsdGVybmF0ZUNvbW1hbgogICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIE9iakNJbnNwZWN0b3JDb21tYW5kRG9tYWlu
QmFja2VuZERpc3BhdGNoZXIoaWQ8VGVzdFByb3RvY29sQ29tbWFuZERvbWFpbkRvbWFpbkhhbmRs
ZXI+IGhhbmRsZXIpIHsgbV9kZWxlZ2F0ZSA9IGhhbmRsZXI7IH0KLSAgICB2b2lkIGNvbW1hbmRX
aXRoRW51bVJldHVyblZhbHVlKGxvbmcgcmVxdWVzdElkKSBmaW5hbDsKKyAgICB2b2lkIGNvbW1h
bmQobG9uZyBwcm90b2NvbF9jYWxsSWQsIGNvbnN0IFN0cmluZyYgZW51bVJlcXVpcmVkLCBjb25z
dCBTdHJpbmcmIG9wdF9lbnVtT3B0aW9uYWwsIGNvbnN0IFN0cmluZyYgcGFyYW1ldGVyUmVxdWly
ZWQsIGNvbnN0IFN0cmluZyYgb3B0X3BhcmFtZXRlck9wdGlvbmFsKSBmaW5hbDsKIHByaXZhdGU6
CiAgICAgUmV0YWluUHRyPGlkPFRlc3RQcm90b2NvbENvbW1hbmREb21haW5Eb21haW5IYW5kbGVy
Pj4gbV9kZWxlZ2F0ZTsKIH07CkBAIC02NzMsMjYgKzcwMSw0NyBAQCBwcml2YXRlOgogCiBuYW1l
c3BhY2UgSW5zcGVjdG9yIHsKIAotdm9pZCBPYmpDSW5zcGVjdG9yQ29tbWFuZERvbWFpbkJhY2tl
bmREaXNwYXRjaGVyOjpjb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZShsb25nIHJlcXVlc3RJZCkK
K3ZvaWQgT2JqQ0luc3BlY3RvckNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Y29tbWFu
ZChsb25nIHByb3RvY29sX2NhbGxJZCwgY29uc3QgU3RyaW5nJiBpbl9lbnVtUmVxdWlyZWQsIGNv
bnN0IFN0cmluZyYgaW5fb3B0X2VudW1PcHRpb25hbCwgY29uc3QgU3RyaW5nJiBpbl9wYXJhbWV0
ZXJSZXF1aXJlZCwgY29uc3QgU3RyaW5nJiBpbl9vcHRfcGFyYW1ldGVyT3B0aW9uYWwpCiB7Ci0g
ICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGNvbW1hbmRX
aXRoRW51bVJldHVyblZhbHVlV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7
Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVz
dElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInQ29tbWFuZERvbWFpbi5j
b21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZScgd2FzIG5vdCBmb3VuZCJfcyk7CisgICAgaWYgKCFb
bV9kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGNvbW1hbmRXaXRoRXJyb3JD
YWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6ZW51bVJlcXVpcmVkOmVudW1PcHRpb25hbDpwYXJhbWV0
ZXJSZXF1aXJlZDpwYXJhbWV0ZXJPcHRpb25hbDopXSkgeworICAgICAgICBiYWNrZW5kRGlzcGF0
Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHByb3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3Bh
dGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0NvbW1hbmREb21haW4uY29tbWFuZCcgd2FzIG5vdCBm
b3VuZCJfcyk7CiAgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3Jz
KCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZCBlcnJvckNhbGxiYWNrID0gXihO
U1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJv
dG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJy
b3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHBy
b3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CiAg
ICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgfTsK
IAotICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF4oVGVzdFByb3RvY29sQ29tbWFuZERvbWFpbkNv
bW1hbmRXaXRoRW51bVJldHVyblZhbHVlUmV0dXJuVmFsdWUgcmV0dXJuVmFsdWUpIHsKLSAgICAg
ICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0T2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUo
KTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoInJldHVyblZhbHVlIl9zLCB0b1By
b3RvY29sU3RyaW5nKHJldHVyblZhbHVlKSk7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCkt
PnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0T2JqZWN0KSwgZmFsc2UpOwor
ICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF4oVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW0gb3V0
X2VudW1SZXF1aXJlZCwgVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW0gKm91dF9vcHRfZW51bU9w
dGlvbmFsLCBUZXN0UHJvdG9jb2xDb21tYW5kRG9tYWluKGFub255bW91cykgb3V0X3JldHVyblJl
cXVpcmVkLCBUZXN0UHJvdG9jb2xDb21tYW5kRG9tYWluKGFub255bW91cykgKm91dF9vcHRfcmV0
dXJuT3B0aW9uYWwpIHsKKyAgICAgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046
Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJp
bmcoImVudW1SZXF1aXJlZCJfcywgdG9Qcm90b2NvbFN0cmluZyhvdXRfZW51bVJlcXVpcmVkKSk7
CisgICAgICAgIGlmICghIW91dF9vcHRfZW51bU9wdGlvbmFsKQorICAgICAgICAgICAgcHJvdG9j
b2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygiZW51bU9wdGlvbmFsIl9zLCB0b1Byb3RvY29sU3Ry
aW5nKCpvdXRfb3B0X2VudW1PcHRpb25hbCkpOworICAgICAgICBwcm90b2NvbF9qc29uTWVzc2Fn
ZS0+c2V0U3RyaW5nKCJyZXR1cm5SZXF1aXJlZCJfcywgdG9Qcm90b2NvbFN0cmluZyhvdXRfcmV0
dXJuUmVxdWlyZWQpKTsKKyAgICAgICAgaWYgKCEhb3V0X29wdF9yZXR1cm5PcHRpb25hbCkKKyAg
ICAgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoInJldHVybk9wdGlvbmFs
Il9zLCB0b1Byb3RvY29sU3RyaW5nKCpvdXRfb3B0X3JldHVybk9wdGlvbmFsKSk7CisgICAgICAg
IGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShwcm90b2NvbF9jYWxsSWQsIFdURk1v
dmUocHJvdG9jb2xfanNvbk1lc3NhZ2UpLCBmYWxzZSk7CiAgICAgfTsKIAotICAgIFttX2RlbGVn
YXRlIGNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxs
YmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsKKyAgICBPcHRpb25hbDxUZXN0
UHJvdG9jb2xUeXBlRG9tYWluRW51bT4gb19pbl9lbnVtUmVxdWlyZWQgPSBmcm9tUHJvdG9jb2xT
dHJpbmc8VGVzdFByb3RvY29sVHlwZURvbWFpbkVudW0+KGluX2VudW1SZXF1aXJlZCk7CisgICAg
aWYgKCFvX2luX2VudW1SZXF1aXJlZCkgeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5y
ZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCAiUGFy
YW1ldGVyICdlbnVtUmVxdWlyZWQnIG9mIG1ldGhvZCAnQ29tbWFuZERvbWFpbi5jb21tYW5kJyBj
YW5ub3QgYmUgcHJvY2Vzc2VkIl9zKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBPcHRp
b25hbDxUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bT4gb19pbl9vcHRfZW51bU9wdGlvbmFsOwor
ICAgIGlmICghIWluX29wdF9lbnVtT3B0aW9uYWwpCisgICAgICAgIG9faW5fb3B0X2VudW1PcHRp
b25hbCA9IGZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bT4oaW5f
b3B0X2VudW1PcHRpb25hbCk7CisgICAgT3B0aW9uYWw8VGVzdFByb3RvY29sQ29tbWFuZERvbWFp
bihhbm9ueW1vdXMpPiBvX2luX3BhcmFtZXRlclJlcXVpcmVkID0gZnJvbVByb3RvY29sU3RyaW5n
PFRlc3RQcm90b2NvbENvbW1hbmREb21haW4oYW5vbnltb3VzKT4oaW5fcGFyYW1ldGVyUmVxdWly
ZWQpOworICAgIGlmICghb19pbl9wYXJhbWV0ZXJSZXF1aXJlZCkgeworICAgICAgICBiYWNrZW5k
RGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpJbnZh
bGlkUGFyYW1zLCAiUGFyYW1ldGVyICdwYXJhbWV0ZXJSZXF1aXJlZCcgb2YgbWV0aG9kICdDb21t
YW5kRG9tYWluLmNvbW1hbmQnIGNhbm5vdCBiZSBwcm9jZXNzZWQiX3MpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIE9wdGlvbmFsPFRlc3RQcm90b2NvbENvbW1hbmREb21haW4oYW5vbnlt
b3VzKT4gb19pbl9vcHRfcGFyYW1ldGVyT3B0aW9uYWw7CisgICAgaWYgKCEhaW5fb3B0X3BhcmFt
ZXRlck9wdGlvbmFsKQorICAgICAgICBvX2luX29wdF9wYXJhbWV0ZXJPcHRpb25hbCA9IGZyb21Q
cm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xDb21tYW5kRG9tYWluKGFub255bW91cyk+KGluX29w
dF9wYXJhbWV0ZXJPcHRpb25hbCk7CisgICAgW21fZGVsZWdhdGUgY29tbWFuZFdpdGhFcnJvckNh
bGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjayBlbnVt
UmVxdWlyZWQ6b19pbl9lbnVtUmVxdWlyZWQudmFsdWUoKSBlbnVtT3B0aW9uYWw6KCEhaW5fb3B0
X2VudW1PcHRpb25hbCA/ICZvX2luX29wdF9lbnVtT3B0aW9uYWwudmFsdWUoKSA6IG5pbCkgcGFy
YW1ldGVyUmVxdWlyZWQ6b19pbl9wYXJhbWV0ZXJSZXF1aXJlZC52YWx1ZSgpIHBhcmFtZXRlck9w
dGlvbmFsOighIWluX29wdF9wYXJhbWV0ZXJPcHRpb25hbCA/ICZvX2luX29wdF9wYXJhbWV0ZXJP
cHRpb25hbC52YWx1ZSgpIDogbmlsKV07CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgpA
QCAtODg3LDE2ICs5MzYsMjEgQEAgdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKICAgICByZXR1
cm4gc2VsZjsKIH0KIAotLSAodm9pZClldmVudFdpdGhFbnVtUGFyYW1ldGVyV2l0aFBhcmFtZXRl
cjooVGVzdFByb3RvY29sRXZlbnREb21haW5FdmVudFdpdGhFbnVtUGFyYW1ldGVyUGFyYW1ldGVy
KXBhcmFtZXRlcgorLSAodm9pZClldmVudFdpdGhFbnVtUmVxdWlyZWQ6KFRlc3RQcm90b2NvbFR5
cGVEb21haW5FbnVtKWVudW1SZXF1aXJlZCBlbnVtT3B0aW9uYWw6KFRlc3RQcm90b2NvbFR5cGVE
b21haW5FbnVtICopZW51bU9wdGlvbmFsIHBhcmFtZXRlclJlcXVpcmVkOihUZXN0UHJvdG9jb2xF
dmVudERvbWFpbihhbm9ueW1vdXMpKXBhcmFtZXRlclJlcXVpcmVkIHBhcmFtZXRlck9wdGlvbmFs
OihUZXN0UHJvdG9jb2xFdmVudERvbWFpbihhbm9ueW1vdXMpICopcGFyYW1ldGVyT3B0aW9uYWwK
IHsKICAgICBjb25zdCBGcm9udGVuZFJvdXRlciYgcm91dGVyID0gX2NvbnRyb2xsZXItPmZyb250
ZW5kUm91dGVyKCk7CiAKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046
Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9z
LCAiRXZlbnREb21haW4uZXZlbnRXaXRoRW51bVBhcmFtZXRlciJfcyk7Ci0gICAgUmVmPEpTT046
Ok9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBwYXJh
bXNPYmplY3QtPnNldFN0cmluZygicGFyYW1ldGVyIl9zLCB0b1Byb3RvY29sU3RyaW5nKHBhcmFt
ZXRlcikpOwotICAgIGpzb25NZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyJfcywgV1RGTW92ZShw
YXJhbXNPYmplY3QpKTsKLSAgICByb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05T
dHJpbmcoKSk7CisgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6
Y3JlYXRlKCk7CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9z
LCAiRXZlbnREb21haW4uZXZlbnQiX3MpOworICAgIGF1dG8gcHJvdG9jb2xfcGFyYW1zT2JqZWN0
ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBwcm90b2NvbF9wYXJhbXNPYmplY3QtPnNl
dFN0cmluZygiZW51bVJlcXVpcmVkIl9zLCB0b1Byb3RvY29sU3RyaW5nKGVudW1SZXF1aXJlZCkp
OworICAgIGlmIChlbnVtT3B0aW9uYWwpCisgICAgICAgIHByb3RvY29sX3BhcmFtc09iamVjdC0+
c2V0U3RyaW5nKCJlbnVtT3B0aW9uYWwiX3MsIHRvUHJvdG9jb2xTdHJpbmcoKCplbnVtT3B0aW9u
YWwpKSk7CisgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInBhcmFtZXRlclJl
cXVpcmVkIl9zLCB0b1Byb3RvY29sU3RyaW5nKHBhcmFtZXRlclJlcXVpcmVkKSk7CisgICAgaWYg
KHBhcmFtZXRlck9wdGlvbmFsKQorICAgICAgICBwcm90b2NvbF9wYXJhbXNPYmplY3QtPnNldFN0
cmluZygicGFyYW1ldGVyT3B0aW9uYWwiX3MsIHRvUHJvdG9jb2xTdHJpbmcoKCpwYXJhbWV0ZXJP
cHRpb25hbCkpKTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMi
X3MsIFdURk1vdmUocHJvdG9jb2xfcGFyYW1zT2JqZWN0KSk7CisgICAgcm91dGVyLnNlbmRFdmVu
dChwcm90b2NvbF9qc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwogfQogCiBAZW5kCkBAIC05
NDMsMjEgKzk5NywyMCBAQCB1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwogCiB0eXBlZGVmIE5T
X0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bSkgewogICAgIFRlc3RQ
cm90b2NvbFR5cGVEb21haW5FbnVtU2hhcmVkLAotICAgIFRlc3RQcm90b2NvbFR5cGVEb21haW5F
bnVtUmVkLAotICAgIFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtR3JlZW4sCi0gICAgVGVzdFBy
b3RvY29sVHlwZURvbWFpbkVudW1CbHVlLAorICAgIFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVt
MSwKKyAgICBUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bTIsCiB9OwogCiAKIAogQHByb3RvY29s
IFRlc3RQcm90b2NvbENvbW1hbmREb21haW5Eb21haW5IYW5kbGVyIDxOU09iamVjdD4KIEBvcHRp
b25hbAotLSAodm9pZCljb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZVdpdGhFcnJvckNhbGxiYWNr
Oih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6
KHZvaWQoXikoVGVzdFByb3RvY29sQ29tbWFuZERvbWFpbkNvbW1hbmRXaXRoRW51bVJldHVyblZh
bHVlUmV0dXJuVmFsdWUgcmV0dXJuVmFsdWUpKXN1Y2Nlc3NDYWxsYmFjazsKKy0gKHZvaWQpY29t
bWFuZFdpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxs
YmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikoVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW0g
ZW51bVJlcXVpcmVkLCBUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bSAqZW51bU9wdGlvbmFsLCBU
ZXN0UHJvdG9jb2xDb21tYW5kRG9tYWluKGFub255bW91cykgcmV0dXJuUmVxdWlyZWQsIFRlc3RQ
cm90b2NvbENvbW1hbmREb21haW4oYW5vbnltb3VzKSAqcmV0dXJuT3B0aW9uYWwpKXN1Y2Nlc3ND
YWxsYmFjayBlbnVtUmVxdWlyZWQ6KFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtKWVudW1SZXF1
aXJlZCBlbnVtT3B0aW9uYWw6KFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtICopZW51bU9wdGlv
bmFsIHBhcmFtZXRlclJlcXVpcmVkOihUZXN0UHJvdG9jb2xDb21tYW5kRG9tYWluKGFub255bW91
cykpcGFyYW1ldGVyUmVxdWlyZWQgcGFyYW1ldGVyT3B0aW9uYWw6KFRlc3RQcm90b2NvbENvbW1h
bmREb21haW4oYW5vbnltb3VzKSAqKXBhcmFtZXRlck9wdGlvbmFsOwogQGVuZAogCiBfX2F0dHJp
YnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKIEBpbnRlcmZhY2UgVGVzdFByb3RvY29s
RXZlbnREb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgOiBOU09iamVjdAotLSAodm9pZClldmVu
dFdpdGhFbnVtUGFyYW1ldGVyV2l0aFBhcmFtZXRlcjooVGVzdFByb3RvY29sRXZlbnREb21haW5F
dmVudFdpdGhFbnVtUGFyYW1ldGVyUGFyYW1ldGVyKXBhcmFtZXRlcjsKKy0gKHZvaWQpZXZlbnRX
aXRoRW51bVJlcXVpcmVkOihUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bSllbnVtUmVxdWlyZWQg
ZW51bU9wdGlvbmFsOihUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bSAqKWVudW1PcHRpb25hbCBw
YXJhbWV0ZXJSZXF1aXJlZDooVGVzdFByb3RvY29sRXZlbnREb21haW4oYW5vbnltb3VzKSlwYXJh
bWV0ZXJSZXF1aXJlZCBwYXJhbWV0ZXJPcHRpb25hbDooVGVzdFByb3RvY29sRXZlbnREb21haW4o
YW5vbnltb3VzKSAqKXBhcmFtZXRlck9wdGlvbmFsOwogQGVuZAogCiAKQEAgLTEwNTAsMTIgKzEx
MDMsMTAgQEAgaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbFR5cGVE
b21haW5FbnVtIHZhbHVlKQogICAgIHN3aXRjaCh2YWx1ZSkgewogICAgIGNhc2UgVGVzdFByb3Rv
Y29sVHlwZURvbWFpbkVudW1TaGFyZWQ6CiAgICAgICAgIHJldHVybiAic2hhcmVkIl9zOwotICAg
IGNhc2UgVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW1SZWQ6Ci0gICAgICAgIHJldHVybiAicmVk
Il9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW1HcmVlbjoKLSAgICAgICAg
cmV0dXJuICJncmVlbiJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtQmx1
ZToKLSAgICAgICAgcmV0dXJuICJibHVlIl9zOworICAgIGNhc2UgVGVzdFByb3RvY29sVHlwZURv
bWFpbkVudW0xOgorICAgICAgICByZXR1cm4gIjEiX3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xU
eXBlRG9tYWluRW51bTI6CisgICAgICAgIHJldHVybiAiMiJfczsKICAgICB9CiB9CiAKQEAgLTEw
NjQsMTIgKzExMTUsMTAgQEAgaW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbFR5cGVEb21haW5F
bnVtPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWwKIHsKICAgICBpZiAodmFs
dWUgPT0gInNoYXJlZCIpCiAgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51
bVNoYXJlZDsKLSAgICBpZiAodmFsdWUgPT0gInJlZCIpCi0gICAgICAgIHJldHVybiBUZXN0UHJv
dG9jb2xUeXBlRG9tYWluRW51bVJlZDsKLSAgICBpZiAodmFsdWUgPT0gImdyZWVuIikKLSAgICAg
ICAgcmV0dXJuIFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtR3JlZW47Ci0gICAgaWYgKHZhbHVl
ID09ICJibHVlIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtQmx1
ZTsKKyAgICBpZiAodmFsdWUgPT0gIjEiKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sVHlw
ZURvbWFpbkVudW0xOworICAgIGlmICh2YWx1ZSA9PSAiMiIpCisgICAgICAgIHJldHVybiBUZXN0
UHJvdG9jb2xUeXBlRG9tYWluRW51bTI7CiAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KIApA
QCAtMTExNywxNyArMTE2NiwxNyBAQCB1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwogCiBAaW50
ZXJmYWNlIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoVHlwZURvbWFpbkRvbWFpbikKIAot
KyAodm9pZClfcGFyc2VUeXBlRG9tYWluRW51bTooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBh
eWxvYWQ6KGlkKXBheWxvYWQ7CisrICh2b2lkKV9wYXJzZUVudW06KE5TTnVtYmVyICoqKW91dFZh
bHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwogCiBAZW5kCiAKIEBpbXBsZW1lbnRhdGlvbiBU
ZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKFR5cGVEb21haW5Eb21haW4pCiAKLSsgKHZvaWQp
X3BhcnNlVHlwZURvbWFpbkVudW06KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihp
ZClwYXlsb2FkCisrICh2b2lkKV9wYXJzZUVudW06KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21Q
YXlsb2FkOihpZClwYXlsb2FkCiB7CiAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShw
YXlsb2FkLCBbTlNTdHJpbmcgY2xhc3NdKTsKICAgICBPcHRpb25hbDxUZXN0UHJvdG9jb2xUeXBl
RG9tYWluRW51bT4gcmVzdWx0ID0gSW5zcGVjdG9yOjpmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFBy
b3RvY29sVHlwZURvbWFpbkVudW0+KHBheWxvYWQpOwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1Jf
QkFEX0VOVU1fVkFMVUUocmVzdWx0LCBAIlR5cGVEb21haW5FbnVtIik7CisgICAgVEhST1dfRVhD
RVBUSU9OX0ZPUl9CQURfRU5VTV9WQUxVRShyZXN1bHQsIEAiRW51bSIpOwogICAgICpvdXRWYWx1
ZSA9IEAocmVzdWx0LnZhbHVlKCkpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZXZlbnQtdGFyZ2V0VHlwZS1t
YXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZXZlbnQtdGFyZ2V0VHlw
ZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbi1yZXN1bHQKaW5kZXggZTJlZDlm
ODg5NGNlNzc2YjI3MmQ2MTEzZTUzNmNhYTc0NmViY2I4NS4uYmU5NGIzNTk0MDAzMmIzZTlhMzM2
ZDU0MTM0NDc3Yjk2NWNkM2E1NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2V2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmct
ZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24tcmVzdWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9ldmVudC10YXJnZXRUeXBlLW1h
dGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uLXJlc3VsdApAQCAtNzAsNyArNzAsNyBA
QCBJbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJEb21haW4iLCBbInBhZ2UiXSk7CiAK
ICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIAotI2luY2x1ZGUg
IlRlc3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgog
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CiAj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KIApAQCAt
ODgsNyArODgsNyBAQCBwcml2YXRlOgogY2xhc3MgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3Bh
dGNoZXIgOiBwdWJsaWMgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewogcHVibGljOgogICAg
IHZpcnR1YWwgfkFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyKCkgeyB9Ci0gICAgdmly
dHVhbCB2b2lkIENvbW1hbmQobG9uZyBjYWxsSWQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgQ29t
bWFuZChsb25nIHByb3RvY29sX2NhbGxJZCkgPSAwOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCkBAIC0xMzAsMTEgKzEzMCwxNCBAQCBwdWJsaWM6CiAKICNpbmNsdWRlICJUZXN0UHJv
dG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx0dXBsZT4KKyNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQu
aD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3Ry
aW5nOworCiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIGNs
YXNzIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyOwpAQCAtMTQyLDcgKzE0NSw3IEBA
IGNsYXNzIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyOwogCiBjbGFzcyBEb21haW5C
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewogcHVibGljOgotICAgIHZpcnR1YWwgdm9pZCBDb21t
YW5kKEVycm9yU3RyaW5nJikgPSAwOworICAgIHZpcnR1YWwgUHJvdG9jb2w6OkVycm9yU3RyaW5n
T3I8dm9pZD4gQ29tbWFuZCgpID0gMDsKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIH5Eb21haW5C
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKTsKIH07CkBAIC0xNTAsOSArMTUzLDkgQEAgcHJvdGVj
dGVkOgogY2xhc3MgRG9tYWluQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgU3VwcGxl
bWVudGFsQmFja2VuZERpc3BhdGNoZXIgewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8RG9tYWlu
QmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYsIERvbWFpbkJhY2tl
bmREaXNwYXRjaGVySGFuZGxlciopOwotICAgIHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQs
IGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpIGZpbmFs
OworICAgIHZvaWQgZGlzcGF0Y2gobG9uZyBwcm90b2NvbF9jYWxsSWQsIGNvbnN0IFN0cmluZyYg
cHJvdG9jb2xfbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX21lc3NhZ2UpIGZp
bmFsOwogcHJpdmF0ZToKLSAgICB2b2lkIENvbW1hbmQobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxK
U09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7CisgICAgdm9pZCBDb21tYW5kKGxvbmcgcHJvdG9j
bF9jYWxsSWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfcGFyYW1ldGVycyk7CiAj
aWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiBwdWJsaWM6CiAgICAg
dm9pZCBzZXRBbHRlcm5hdGVEaXNwYXRjaGVyKEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRj
aGVyKiBhbHRlcm5hdGVEaXNwYXRjaGVyKSB7IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IGFsdGVy
bmF0ZURpc3BhdGNoZXI7IH0KQEAgLTIwMSw5ICsyMDQsNyBAQCBwcml2YXRlOgogI2luY2x1ZGUg
IlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0lu
c3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KICNp
bmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5n
Lmg+CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKICNpbmNs
dWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCkBAIC0yMjUsMzggKzIyNiwz
OCBAQCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6RG9tYWluQmFja2VuZERpc3BhdGNoZXIoQmFj
a2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYQogICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJl
Z2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbigiRG9tYWluIl9zLCB0aGlzKTsKIH0KIAotdm9pZCBE
b21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0
cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpCit2b2lkIERvbWFpbkJh
Y2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHByb3RvY29sX2NhbGxJZCwgY29uc3QgU3Ry
aW5nJiBwcm90b2NvbF9tZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfbWVzc2Fn
ZSkKIHsKICAgICBSZWY8RG9tYWluQmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOwog
Ci0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVyczsKLSAgICBtZXNzYWdlLT5nZXRP
YmplY3QoInBhcmFtcyJfcywgcGFyYW1ldGVycyk7CisgICAgYXV0byBwcm90b2NvbF9wYXJhbWV0
ZXJzID0gcHJvdG9jb2xfbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3MpOwogCi0gICAgaWYg
KG1ldGhvZCA9PSAiQ29tbWFuZCIpIHsKLSAgICAgICAgQ29tbWFuZChyZXF1ZXN0SWQsIFdURk1v
dmUocGFyYW1ldGVycykpOworICAgIGlmIChwcm90b2NvbF9tZXRob2QgPT0gIkNvbW1hbmQiKSB7
CisgICAgICAgIENvbW1hbmQocHJvdG9jb2xfY2FsbElkLCBXVEZNb3ZlKHByb3RvY29sX3BhcmFt
ZXRlcnMpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1fYmFja2VuZERpc3BhdGNo
ZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5k
LCAiJ0RvbWFpbi4iICsgbWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOworICAgIG1fYmFja2Vu
ZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhv
ZE5vdEZvdW5kLCAiJ0RvbWFpbi4iICsgcHJvdG9jb2xfbWV0aG9kICsgIicgd2FzIG5vdCBmb3Vu
ZCIpOwogfQogCi12b2lkIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpDb21tYW5kKGxvbmcgcmVx
dWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQordm9pZCBEb21haW5CYWNrZW5kRGlzcGF0
Y2hlcjo6Q29tbWFuZChsb25nIHByb3RvY29sX2NhbGxJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4m
JikKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKICAgICBp
ZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hl
ci0+Q29tbWFuZChyZXF1ZXN0SWQpOworICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPkNv
bW1hbmQocHJvdG9jb2xfY2FsbElkKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZiAv
LyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIAotICAgIEVycm9yU3Ry
aW5nIGVycm9yOwotICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6
Y3JlYXRlKCk7Ci0gICAgbV9hZ2VudC0+Q29tbWFuZChlcnJvcik7CisgICAgYXV0byByZXN1bHQg
PSBtX2FnZW50LT5Db21tYW5kKCk7CisgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAgICAgQVNTRVJU
KCFyZXN1bHQuZXJyb3IoKS5pc0VtcHR5KCkpOworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVy
LT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgcmVz
dWx0LmVycm9yKCkpOworICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgaWYgKCFlcnJvci5s
ZW5ndGgoKSkKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVl
c3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tl
bmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2
ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOworICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2Ug
PSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRS
ZXNwb25zZShwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJvdG9jb2xfanNvbk1lc3NhZ2UpLCBm
YWxzZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgpAQCAtMjk3LDYgKzI5OCw3IEBA
IHZvaWQgRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkNvbW1hbmQobG9uZyByZXF1ZXN0SWQsIFJl
ZlB0cjxKU09OOjpPYmplY3Q+JiYpCiAKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgi
CiAjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4K
ICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7
CkBAIC0zNDksMTYgKzM1MSwxNSBAQCBwcml2YXRlOgogI2luY2x1ZGUgIlRlc3RGcm9udGVuZERp
c3BhdGNoZXJzLmgiCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVu
ZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogbmFtZXNwYWNlIElu
c3BlY3RvciB7CiAKIHZvaWQgRG9tYWluRnJvbnRlbmREaXNwYXRjaGVyOjpFdmVudCgpCiB7Ci0g
ICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgp
OwotICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRvbWFpbi5FdmVudCJf
cyk7CisgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRl
KCk7CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiRG9t
YWluLkV2ZW50Il9zKTsKIAotICAgIG1fZnJvbnRlbmRSb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNz
YWdlLT50b0pTT05TdHJpbmcoKSk7CisgICAgbV9mcm9udGVuZFJvdXRlci5zZW5kRXZlbnQocHJv
dG9jb2xfanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCkBAIC0zOTgsNyArMzk5LDkgQEAgdm9pZCBEb21haW5Gcm9udGVuZERpc3BhdGNo
ZXI6OkV2ZW50KCkKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yUHJvdG9jb2xUeXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5j
bHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKQEAg
LTQ1Miw4ICs0NTUsNyBAQCBuYW1lc3BhY2UgUHJvdG9jb2wgewogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKIAotI2luY2x1ZGUgPHd0Zi9PcHRp
b25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvQXNz
ZXJ0aW9ucy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtNTA5LDcgKzUxMSw3IEBA
IGNsYXNzIE9iakNJbnNwZWN0b3JEb21haW5CYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1Ymxp
YyBBbHRlcm5hdGVEb21haW5CYWNrZW5kCiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBw
dWJsaWM6CiAgICAgT2JqQ0luc3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyKGlkPFRlc3RQ
cm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+IGhhbmRsZXIpIHsgbV9kZWxlZ2F0ZSA9IGhhbmRs
ZXI7IH0KLSAgICB2b2lkIENvbW1hbmQobG9uZyByZXF1ZXN0SWQpIGZpbmFsOworICAgIHZvaWQg
Q29tbWFuZChsb25nIHByb3RvY29sX2NhbGxJZCkgZmluYWw7CiBwcml2YXRlOgogICAgIFJldGFp
blB0cjxpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPj4gbV9kZWxlZ2F0ZTsKIH07
CkBAIC01NTcsMjEgKzU1OSwyMiBAQCBwcml2YXRlOgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsK
IAotdm9pZCBPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkNvbW1hbmQobG9u
ZyByZXF1ZXN0SWQpCit2b2lkIE9iakNJbnNwZWN0b3JEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6
Q29tbWFuZChsb25nIHByb3RvY29sX2NhbGxJZCkKIHsKICAgICBpZiAoIVttX2RlbGVnYXRlIHJl
c3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoQ29tbWFuZFdpdGhFcnJvckNhbGxiYWNrOnN1Y2Nl
c3NDYWxsYmFjazopXSkgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90
b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAi
J0RvbWFpbi5Db21tYW5kJyB3YXMgbm90IGZvdW5kIl9zKTsKKyAgICAgICAgYmFja2VuZERpc3Bh
dGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxsSWQsIEJhY2tlbmREaXNw
YXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEb21haW4uQ29tbWFuZCcgd2FzIG5vdCBmb3VuZCJf
cyk7CiAgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmlu
ZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xF
cnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwor
ICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHByb3RvY29s
X2NhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CiAgICAgICAg
IGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgfTsKIAogICAg
IGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF57Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNl
bmRSZXNwb25zZShyZXF1ZXN0SWQsIEpTT046Ok9iamVjdDo6Y3JlYXRlKCksIGZhbHNlKTsKKyAg
ICAgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7
CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShwcm90b2NvbF9jYWxs
SWQsIFdURk1vdmUocHJvdG9jb2xfanNvbk1lc3NhZ2UpLCBmYWxzZSk7CiAgICAgfTsKIAogICAg
IFttX2RlbGVnYXRlIENvbW1hbmRXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nl
c3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOwpAQCAtNzczLDkgKzc3Niw5IEBAIHVzaW5nIG5h
bWVzcGFjZSBJbnNwZWN0b3I7CiB7CiAgICAgY29uc3QgRnJvbnRlbmRSb3V0ZXImIHJvdXRlciA9
IF9jb250cm9sbGVyLT5mcm9udGVuZFJvdXRlcigpOwogCi0gICAgUmVmPEpTT046Ok9iamVjdD4g
anNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIGpzb25NZXNzYWdlLT5z
ZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRvbWFpbi5FdmVudCJfcyk7Ci0gICAgcm91dGVyLnNlbmRF
dmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOworICAgIGF1dG8gcHJvdG9jb2xfanNv
bk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIHByb3RvY29sX2pzb25NZXNz
YWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRvbWFpbi5FdmVudCJfcyk7CisgICAgcm91dGVy
LnNlbmRFdmVudChwcm90b2NvbF9qc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwogfQogCiBA
ZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZXhwZWN0ZWQvZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uLXJlc3Vs
dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3Rl
ZC9ldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0CmluZGV4IDkwZTE0
ZThjN2JiNGYwNTE1MTNjYmQ3YzNjNmRjN2I5NmZjYzFhNzQuLjg0N2I0OTNmNzFjNTdlNDI3M2Q4
NDk2MmJhZTlmNmM5MjBmZGM5ZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9ldmVudHMtd2l0aC1vcHRpb25hbC1wYXJh
bWV0ZXJzLmpzb24tcmVzdWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9leHBlY3RlZC9ldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpz
b24tcmVzdWx0CkBAIC03MCw3ICs3MCw3IEBAIEluc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21h
aW4oIkRhdGFiYXNlIiwgbnVsbCk7CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9E
SVNQQVRDSEVSUykKIAotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVkZSAi
VGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
RnJvbnRlbmRSb3V0ZXIuaD4KIApAQCAtMTI2LDExICsxMjYsMTQgQEAgcHJpdmF0ZToKIAogI2lu
Y2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9J
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHR1cGxlPgorI2luY2x1ZGUg
PHd0Zi9FeHBlY3RlZC5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAotdHlwZWRlZiBT
dHJpbmcgRXJyb3JTdHJpbmc7CisKIAogCiAKQEAgLTE3MSw5ICsxNzQsNyBAQCB0eXBlZGVmIFN0
cmluZyBFcnJvclN0cmluZzsKICNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCiAK
ICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2lu
Y2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+
Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9B
TFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAjaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNw
YXRjaGVycy5oIgpAQCAtMjIxLDYgKzIyMiw3IEBAIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCiAj
aW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVz
Lmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewpAQCAtMjMxLDggKzIzMyw4IEBAIGNsYXNz
IERhdGFiYXNlRnJvbnRlbmREaXNwYXRjaGVyIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKIHB1YmxpYzoKICAgICBEYXRhYmFzZUZyb250ZW5kRGlzcGF0Y2hlcihGcm9udGVuZFJvdXRl
ciYgZnJvbnRlbmRSb3V0ZXIpIDogbV9mcm9udGVuZFJvdXRlcihmcm9udGVuZFJvdXRlcikgeyB9
Ci0gICAgdm9pZCBkaWRFeGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJzKFJlZlB0cjxKU09OOjpBcnJh
eU9mPFN0cmluZz4+IGNvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcqIG5vdGVzLCBjb25zdCBkb3Vi
bGUqIHRpbWVzdGFtcCwgUmVmUHRyPEpTT046Ok9iamVjdD4gdmFsdWVzLCBSZWZQdHI8SlNPTjo6
VmFsdWU+IHBheWxvYWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJy
b3I+IHNxbEVycm9yLCBjb25zdCBTdHJpbmcqIHNjcmVlbkNvbG9yLCBSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4gYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBT
dHJpbmcqIHByaW50Q29sb3IpOwotICAgIHZvaWQgZGlkRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0
ZXJzKFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+IGNvbHVtbk5hbWVzLCBjb25zdCBTdHJp
bmcmIG5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiB2YWx1ZXMs
IFJlZlB0cjxKU09OOjpWYWx1ZT4gcGF5bG9hZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRhdGFiYXNlOjpFcnJvcj4gc3FsRXJyb3IsIGNvbnN0IFN0cmluZyYgc2NyZWVuQ29sb3IsIFJl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiBhbHRlcm5hdGVD
b2xvcnMsIGNvbnN0IFN0cmluZyYgcHJpbnRDb2xvcik7CisgICAgdm9pZCBkaWRFeGVjdXRlT3B0
aW9uYWxQYXJhbWV0ZXJzKFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+JiYgb3B0X2NvbHVt
bk5hbWVzLCBjb25zdCBTdHJpbmcmIG9wdF9ub3RlcywgT3B0aW9uYWw8ZG91YmxlPiYmIG9wdF90
aW1lc3RhbXAsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgb3B0X3ZhbHVlcywgUmVmUHRyPEpTT046
OlZhbHVlPiYmIG9wdF9wYXlsb2FkLCBSZWZQdHI8UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4m
JiBvcHRfc3FsRXJyb3IsIGNvbnN0IFN0cmluZyYgb3B0X3NjcmVlbkNvbG9yLCBSZWZQdHI8UHJv
dG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+JiYgb3B0X2FsdGVybmF0ZUNvbG9ycywgY29uc3Qg
U3RyaW5nJiBvcHRfcHJpbnRDb2xvcik7CisgICAgdm9pZCBkaWRFeGVjdXRlTm9PcHRpb25hbFBh
cmFtZXRlcnMoUmVmPEpTT046OkFycmF5T2Y8U3RyaW5nPj4mJiBjb2x1bW5OYW1lcywgY29uc3Qg
U3RyaW5nJiBub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgUmVmPEpTT046Ok9iamVjdD4mJiB2YWx1
ZXMsIFJlZjxKU09OOjpWYWx1ZT4mJiBwYXlsb2FkLCBSZWY8UHJvdG9jb2w6OkRhdGFiYXNlOjpF
cnJvcj4mJiBzcWxFcnJvciwgY29uc3QgU3RyaW5nJiBzY3JlZW5Db2xvciwgUmVmPFByb3RvY29s
OjpEYXRhYmFzZTo6Q29sb3JMaXN0PiYmIGFsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nJiBw
cmludENvbG9yKTsKIHByaXZhdGU6CiAgICAgRnJvbnRlbmRSb3V0ZXImIG1fZnJvbnRlbmRSb3V0
ZXI7CiB9OwpAQCAtMjc0LDU1ICsyNzYsNTQgQEAgcHJpdmF0ZToKICNpbmNsdWRlICJUZXN0RnJv
bnRlbmREaXNwYXRjaGVycy5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
RnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKIG5hbWVz
cGFjZSBJbnNwZWN0b3IgewogCi12b2lkIERhdGFiYXNlRnJvbnRlbmREaXNwYXRjaGVyOjpkaWRF
eGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJzKFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+IGNv
bHVtbk5hbWVzLCBjb25zdCBTdHJpbmcqIG5vdGVzLCBjb25zdCBkb3VibGUqIHRpbWVzdGFtcCwg
UmVmUHRyPEpTT046Ok9iamVjdD4gdmFsdWVzLCBSZWZQdHI8SlNPTjo6VmFsdWU+IHBheWxvYWQs
IFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IHNxbEVycm9yLCBj
b25zdCBTdHJpbmcqIHNjcmVlbkNvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0
YWJhc2U6OkNvbG9yTGlzdD4gYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcqIHByaW50Q29s
b3IpCit2b2lkIERhdGFiYXNlRnJvbnRlbmREaXNwYXRjaGVyOjpkaWRFeGVjdXRlT3B0aW9uYWxQ
YXJhbWV0ZXJzKFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+JiYgb3B0X2NvbHVtbk5hbWVz
LCBjb25zdCBTdHJpbmcmIG9wdF9ub3RlcywgT3B0aW9uYWw8ZG91YmxlPiYmIG9wdF90aW1lc3Rh
bXAsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgb3B0X3ZhbHVlcywgUmVmUHRyPEpTT046OlZhbHVl
PiYmIG9wdF9wYXlsb2FkLCBSZWZQdHI8UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4mJiBvcHRf
c3FsRXJyb3IsIGNvbnN0IFN0cmluZyYgb3B0X3NjcmVlbkNvbG9yLCBSZWZQdHI8UHJvdG9jb2w6
OkRhdGFiYXNlOjpDb2xvckxpc3Q+JiYgb3B0X2FsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5n
JiBvcHRfcHJpbnRDb2xvcikKIHsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9
IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0
aG9kIl9zLCAiRGF0YWJhc2UuZGlkRXhlY3V0ZU9wdGlvbmFsUGFyYW1ldGVycyJfcyk7Ci0gICAg
UmVmPEpTT046Ok9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsK
LSAgICBpZiAoY29sdW1uTmFtZXMpCi0gICAgICAgIHBhcmFtc09iamVjdC0+c2V0QXJyYXkoImNv
bHVtbk5hbWVzIl9zLCBjb2x1bW5OYW1lcyk7Ci0gICAgaWYgKG5vdGVzKQotICAgICAgICBwYXJh
bXNPYmplY3QtPnNldFN0cmluZygibm90ZXMiX3MsICpub3Rlcyk7Ci0gICAgaWYgKHRpbWVzdGFt
cCkKLSAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywgKnRpbWVz
dGFtcCk7Ci0gICAgaWYgKHZhbHVlcykKLSAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRPYmplY3Qo
InZhbHVlcyJfcywgdmFsdWVzKTsKLSAgICBpZiAocGF5bG9hZCkKLSAgICAgICAgcGFyYW1zT2Jq
ZWN0LT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgKnBheWxvYWQpOwotICAgIGlmIChzcWxFcnJvcikK
LSAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBzcWxFcnJvcik7
Ci0gICAgaWYgKHNjcmVlbkNvbG9yKQotICAgICAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygi
c2NyZWVuQ29sb3IiX3MsICpzY3JlZW5Db2xvcik7Ci0gICAgaWYgKGFsdGVybmF0ZUNvbG9ycykK
LSAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCBhbHRl
cm5hdGVDb2xvcnMpOwotICAgIGlmIChwcmludENvbG9yKQotICAgICAgICBwYXJhbXNPYmplY3Qt
PnNldFN0cmluZygicHJpbnRDb2xvciJfcywgKnByaW50Q29sb3IpOwotICAgIGpzb25NZXNzYWdl
LT5zZXRPYmplY3QoInBhcmFtcyJfcywgV1RGTW92ZShwYXJhbXNPYmplY3QpKTsKKyAgICBhdXRv
IHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBwcm90
b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJEYXRhYmFzZS5kaWRFeGVj
dXRlT3B0aW9uYWxQYXJhbWV0ZXJzIl9zKTsKKyAgICBhdXRvIHByb3RvY29sX3BhcmFtc09iamVj
dCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgaWYgKCEhb3B0X2NvbHVtbk5hbWVzKQor
ICAgICAgICBwcm90b2NvbF9wYXJhbXNPYmplY3QtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywg
b3B0X2NvbHVtbk5hbWVzLnJlbGVhc2VOb25OdWxsKCkpOworICAgIGlmICghIW9wdF9ub3RlcykK
KyAgICAgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCBvcHRf
bm90ZXMpOworICAgIGlmICghIW9wdF90aW1lc3RhbXApCisgICAgICAgIHByb3RvY29sX3BhcmFt
c09iamVjdC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsICpvcHRfdGltZXN0YW1wKTsKKyAgICBp
ZiAoISFvcHRfdmFsdWVzKQorICAgICAgICBwcm90b2NvbF9wYXJhbXNPYmplY3QtPnNldE9iamVj
dCgidmFsdWVzIl9zLCBvcHRfdmFsdWVzLnJlbGVhc2VOb25OdWxsKCkpOworICAgIGlmICghIW9w
dF9wYXlsb2FkKQorICAgICAgICBwcm90b2NvbF9wYXJhbXNPYmplY3QtPnNldFZhbHVlKCJwYXls
b2FkIl9zLCBvcHRfcGF5bG9hZC5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICBpZiAoISFvcHRfc3Fs
RXJyb3IpCisgICAgICAgIHByb3RvY29sX3BhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJzcWxFcnJv
ciJfcywgb3B0X3NxbEVycm9yLnJlbGVhc2VOb25OdWxsKCkpOworICAgIGlmICghIW9wdF9zY3Jl
ZW5Db2xvcikKKyAgICAgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInNjcmVl
bkNvbG9yIl9zLCBvcHRfc2NyZWVuQ29sb3IpOworICAgIGlmICghIW9wdF9hbHRlcm5hdGVDb2xv
cnMpCisgICAgICAgIHByb3RvY29sX3BhcmFtc09iamVjdC0+c2V0QXJyYXkoImFsdGVybmF0ZUNv
bG9ycyJfcywgb3B0X2FsdGVybmF0ZUNvbG9ycy5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICBpZiAo
ISFvcHRfcHJpbnRDb2xvcikKKyAgICAgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRTdHJp
bmcoInByaW50Q29sb3IiX3MsIG9wdF9wcmludENvbG9yKTsKKyAgICBwcm90b2NvbF9qc29uTWVz
c2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiX3MsIFdURk1vdmUocHJvdG9jb2xfcGFyYW1zT2JqZWN0
KSk7CiAKLSAgICBtX2Zyb250ZW5kUm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09O
U3RyaW5nKCkpOworICAgIG1fZnJvbnRlbmRSb3V0ZXIuc2VuZEV2ZW50KHByb3RvY29sX2pzb25N
ZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7CiB9CiAKLXZvaWQgRGF0YWJhc2VGcm9udGVuZERpc3Bh
dGNoZXI6OmRpZEV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhSZWZQdHI8SlNPTjo6QXJyYXlP
ZjxTdHJpbmc+PiBjb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBub3RlcywgZG91YmxlIHRpbWVz
dGFtcCwgUmVmUHRyPEpTT046Ok9iamVjdD4gdmFsdWVzLCBSZWZQdHI8SlNPTjo6VmFsdWU+IHBh
eWxvYWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IHNxbEVy
cm9yLCBjb25zdCBTdHJpbmcmIHNjcmVlbkNvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4gYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcmIHBy
aW50Q29sb3IpCit2b2lkIERhdGFiYXNlRnJvbnRlbmREaXNwYXRjaGVyOjpkaWRFeGVjdXRlTm9P
cHRpb25hbFBhcmFtZXRlcnMoUmVmPEpTT046OkFycmF5T2Y8U3RyaW5nPj4mJiBjb2x1bW5OYW1l
cywgY29uc3QgU3RyaW5nJiBub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgUmVmPEpTT046Ok9iamVj
dD4mJiB2YWx1ZXMsIFJlZjxKU09OOjpWYWx1ZT4mJiBwYXlsb2FkLCBSZWY8UHJvdG9jb2w6OkRh
dGFiYXNlOjpFcnJvcj4mJiBzcWxFcnJvciwgY29uc3QgU3RyaW5nJiBzY3JlZW5Db2xvciwgUmVm
PFByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiYmIGFsdGVybmF0ZUNvbG9ycywgY29uc3Qg
U3RyaW5nJiBwcmludENvbG9yKQogewotICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdl
ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJt
ZXRob2QiX3MsICJEYXRhYmFzZS5kaWRFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMiX3MpOwot
ICAgIFJlZjxKU09OOjpPYmplY3Q+IHBhcmFtc09iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRl
KCk7Ci0gICAgcGFyYW1zT2JqZWN0LT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIGNvbHVtbk5h
bWVzKTsKLSAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygibm90ZXMiX3MsIG5vdGVzKTsKLSAg
ICBwYXJhbXNPYmplY3QtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCB0aW1lc3RhbXApOwotICAg
IHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIHZhbHVlcyk7Ci0gICAgcGFyYW1z
T2JqZWN0LT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgcGF5bG9hZCk7Ci0gICAgcGFyYW1zT2JqZWN0
LT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBzcWxFcnJvcik7Ci0gICAgcGFyYW1zT2JqZWN0LT5z
ZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCBzY3JlZW5Db2xvcik7Ci0gICAgcGFyYW1zT2JqZWN0
LT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCBhbHRlcm5hdGVDb2xvcnMpOwotICAgIHBh
cmFtc09iamVjdC0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCBwcmludENvbG9yKTsKLSAgICBq
c29uTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiX3MsIFdURk1vdmUocGFyYW1zT2JqZWN0KSk7
CisgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7
CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiRGF0YWJh
c2UuZGlkRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzIl9zKTsKKyAgICBhdXRvIHByb3RvY29s
X3BhcmFtc09iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgcHJvdG9jb2xfcGFy
YW1zT2JqZWN0LT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIFdURk1vdmUoY29sdW1uTmFtZXMp
KTsKKyAgICBwcm90b2NvbF9wYXJhbXNPYmplY3QtPnNldFN0cmluZygibm90ZXMiX3MsIG5vdGVz
KTsKKyAgICBwcm90b2NvbF9wYXJhbXNPYmplY3QtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCB0
aW1lc3RhbXApOworICAgIHByb3RvY29sX3BhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJ2YWx1ZXMi
X3MsIFdURk1vdmUodmFsdWVzKSk7CisgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRWYWx1
ZSgicGF5bG9hZCJfcywgV1RGTW92ZShwYXlsb2FkKSk7CisgICAgcHJvdG9jb2xfcGFyYW1zT2Jq
ZWN0LT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBXVEZNb3ZlKHNxbEVycm9yKSk7CisgICAgcHJv
dG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCBzY3JlZW5Db2xv
cik7CisgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3Jz
Il9zLCBXVEZNb3ZlKGFsdGVybmF0ZUNvbG9ycykpOworICAgIHByb3RvY29sX3BhcmFtc09iamVj
dC0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCBwcmludENvbG9yKTsKKyAgICBwcm90b2NvbF9q
c29uTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiX3MsIFdURk1vdmUocHJvdG9jb2xfcGFyYW1z
T2JqZWN0KSk7CiAKLSAgICBtX2Zyb250ZW5kUm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+
dG9KU09OU3RyaW5nKCkpOworICAgIG1fZnJvbnRlbmRSb3V0ZXIuc2VuZEV2ZW50KHByb3RvY29s
X2pzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEluc3Bl
Y3RvcgpAQCAtMzYyLDcgKzM2Myw5IEBAIHZvaWQgRGF0YWJhc2VGcm9udGVuZERpc3BhdGNoZXI6
OmRpZEV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhSZWZQdHI8SlNPTjo6QXJyCiAjcHJhZ21h
IG9uY2UKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMu
aD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVz
Lmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC0zOTEsNyArMzk0LDcgQEAgdXNp
bmcgQ29sb3JMaXN0ID0gSlNPTjo6QXJyYXlPZjxTdHJpbmc+OwogbmFtZXNwYWNlIERhdGFiYXNl
IHsKIAogLyogRGF0YWJhc2UgZXJyb3IuICovCi1jbGFzcyBFcnJvciA6IHB1YmxpYyBKU09OOjpP
YmplY3RCYXNlIHsKK2NsYXNzIEVycm9yIGZpbmFsIDogcHVibGljIEpTT046Ok9iamVjdEJhc2Ug
ewogcHVibGljOgogICAgIGVudW0gewogICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCkBAIC00MTgs
MTcgKzQyMSwxNyBAQCBwdWJsaWM6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBFcnJvcjsKICAgICBw
dWJsaWM6CiAKLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IE1lc3NhZ2VTZXQ+JiBzZXRNZXNzYWdl
KGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBNZXNzYWdlU2V0
PiYgc2V0TWVzc2FnZShjb25zdCBTdHJpbmcmIGluX21lc3NhZ2UpCiAgICAgICAgIHsKICAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBNZXNzYWdlU2V0KSwgcHJvcGVydHlfbWVz
c2FnZV9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJtZXNz
YWdlIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJtZXNzYWdl
Il9zLCBpbl9tZXNzYWdlKTsKICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TWVzc2FnZVNl
dD4oKTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDb2RlU2V0PiYgc2V0
Q29kZShpbnQgdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDb2RlU2V0PiYgc2V0Q29k
ZShpbnQgaW5fY29kZSkKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShT
VEFURSAmIENvZGVTZXQpLCBwcm9wZXJ0eV9jb2RlX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAg
IG1fcmVzdWx0LT5zZXRJbnRlZ2VyKCJjb2RlIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICBtX3Jl
c3VsdC0+c2V0SW50ZWdlcigiY29kZSJfcywgaW5fY29kZSk7CiAgICAgICAgICAgICByZXR1cm4g
Y2FzdFN0YXRlPENvZGVTZXQ+KCk7CiAgICAgICAgIH0KIApAQCAtNDk4LDggKzUwMSw3IEBAIHB1
YmxpYzoKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3Rz
LmgiCiAKLSNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3Ry
aW5nLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KIAogbmFtZXNwYWNlIEluc3BlY3Rv
ciB7CiAKQEAgLTc3OCwyOSArNzgwLDI5IEBAIHVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CiAg
ICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKGFsdGVybmF0ZUNv
bG9ycywgQCJhbHRlcm5hdGVDb2xvcnMiKTsKICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9P
UFRJT05BTF9QQVJBTUVURVIocHJpbnRDb2xvciwgQCJwcmludENvbG9yIik7CiAKLSAgICBSZWY8
SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAg
anNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiRGF0YWJhc2UuZGlkRXhlY3V0ZU9w
dGlvbmFsUGFyYW1ldGVycyJfcyk7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4gcGFyYW1zT2JqZWN0
ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdl
ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0
U3RyaW5nKCJtZXRob2QiX3MsICJEYXRhYmFzZS5kaWRFeGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJz
Il9zKTsKKyAgICBhdXRvIHByb3RvY29sX3BhcmFtc09iamVjdCA9IEpTT046Ok9iamVjdDo6Y3Jl
YXRlKCk7CiAgICAgaWYgKGNvbHVtbk5hbWVzKQotICAgICAgICBwYXJhbXNPYmplY3QtPnNldEFy
cmF5KCJjb2x1bW5OYW1lcyJfcywgdG9KU09OU3RyaW5nQXJyYXkoKCpjb2x1bW5OYW1lcykpKTsK
KyAgICAgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3Ms
IHRvSlNPTlN0cmluZ0FycmF5KCgqY29sdW1uTmFtZXMpKSk7CiAgICAgaWYgKG5vdGVzKQotICAg
ICAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygibm90ZXMiX3MsICgqbm90ZXMpKTsKKyAgICAg
ICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCAoKm5vdGVzKSk7
CiAgICAgaWYgKHRpbWVzdGFtcCkKLSAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXREb3VibGUoInRp
bWVzdGFtcCJfcywgKCp0aW1lc3RhbXApKTsKKyAgICAgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0
LT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywgKCp0aW1lc3RhbXApKTsKICAgICBpZiAodmFsdWVz
KQotICAgICAgICBwYXJhbXNPYmplY3QtPnNldE9iamVjdCgidmFsdWVzIl9zLCBbKCp2YWx1ZXMp
IHRvSlNPTk9iamVjdF0pOworICAgICAgICBwcm90b2NvbF9wYXJhbXNPYmplY3QtPnNldE9iamVj
dCgidmFsdWVzIl9zLCBbKCp2YWx1ZXMpIHRvSlNPTk9iamVjdF0pOwogICAgIGlmIChwYXlsb2Fk
KQotICAgICAgICBwYXJhbXNPYmplY3QtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCBbKCpwYXlsb2Fk
KSB0b0pTT05PYmplY3RdKTsKKyAgICAgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRWYWx1
ZSgicGF5bG9hZCJfcywgWygqcGF5bG9hZCkgdG9KU09OT2JqZWN0XSk7CiAgICAgaWYgKHNxbEVy
cm9yKQotICAgICAgICBwYXJhbXNPYmplY3QtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIFsoKnNx
bEVycm9yKSB0b0pTT05PYmplY3RdKTsKKyAgICAgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT5z
ZXRPYmplY3QoInNxbEVycm9yIl9zLCBbKCpzcWxFcnJvcikgdG9KU09OT2JqZWN0XSk7CiAgICAg
aWYgKHNjcmVlbkNvbG9yKQotICAgICAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygic2NyZWVu
Q29sb3IiX3MsICgqc2NyZWVuQ29sb3IpKTsKKyAgICAgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0
LT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCAoKnNjcmVlbkNvbG9yKSk7CiAgICAgaWYgKGFs
dGVybmF0ZUNvbG9ycykKLSAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRBcnJheSgiYWx0ZXJuYXRl
Q29sb3JzIl9zLCB0b0pTT05TdHJpbmdBcnJheSgoKmFsdGVybmF0ZUNvbG9ycykpKTsKKyAgICAg
ICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCB0
b0pTT05TdHJpbmdBcnJheSgoKmFsdGVybmF0ZUNvbG9ycykpKTsKICAgICBpZiAocHJpbnRDb2xv
cikKLSAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInByaW50Q29sb3IiX3MsICgqcHJp
bnRDb2xvcikpOwotICAgIGpzb25NZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyJfcywgV1RGTW92
ZShwYXJhbXNPYmplY3QpKTsKLSAgICByb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pT
T05TdHJpbmcoKSk7CisgICAgICAgIHByb3RvY29sX3BhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJw
cmludENvbG9yIl9zLCAoKnByaW50Q29sb3IpKTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+
c2V0T2JqZWN0KCJwYXJhbXMiX3MsIFdURk1vdmUocHJvdG9jb2xfcGFyYW1zT2JqZWN0KSk7Cisg
ICAgcm91dGVyLnNlbmRFdmVudChwcm90b2NvbF9qc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkp
OwogfQogCiAtICh2b2lkKWRpZEV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1dpdGhDb2x1bW5O
YW1lczooTlNBcnJheS8qPE5TU3RyaW5nPiovICopY29sdW1uTmFtZXMgbm90ZXM6KE5TU3RyaW5n
ICopbm90ZXMgdGltZXN0YW1wOihkb3VibGUpdGltZXN0YW1wIHZhbHVlczooUldJUHJvdG9jb2xK
U09OT2JqZWN0ICopdmFsdWVzIHBheWxvYWQ6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXBheWxv
YWQgc3FsRXJyb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKilzcWxFcnJvciBzY3JlZW5D
b2xvcjooTlNTdHJpbmcgKilzY3JlZW5Db2xvciBhbHRlcm5hdGVDb2xvcnM6KE5TQXJyYXkvKjxO
U1N0cmluZz4qLyAqKWFsdGVybmF0ZUNvbG9ycyBwcmludENvbG9yOihOU1N0cmluZyAqKXByaW50
Q29sb3IKQEAgLTgxNiwyMCArODE4LDIwIEBAIHVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CiAg
ICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoYWx0ZXJuYXRlQ29sb3Jz
LCBAImFsdGVybmF0ZUNvbG9ycyIpOwogICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURf
UEFSQU1FVEVSKHByaW50Q29sb3IsIEAicHJpbnRDb2xvciIpOwogCi0gICAgUmVmPEpTT046Ok9i
amVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIGpzb25NZXNz
YWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRhdGFiYXNlLmRpZEV4ZWN1dGVOb09wdGlvbmFs
UGFyYW1ldGVycyJfcyk7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSlNP
Tjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBwYXJhbXNPYmplY3QtPnNldEFycmF5KCJjb2x1bW5O
YW1lcyJfcywgdG9KU09OU3RyaW5nQXJyYXkoY29sdW1uTmFtZXMpKTsKLSAgICBwYXJhbXNPYmpl
Y3QtPnNldFN0cmluZygibm90ZXMiX3MsIG5vdGVzKTsKLSAgICBwYXJhbXNPYmplY3QtPnNldERv
dWJsZSgidGltZXN0YW1wIl9zLCB0aW1lc3RhbXApOwotICAgIHBhcmFtc09iamVjdC0+c2V0T2Jq
ZWN0KCJ2YWx1ZXMiX3MsIFt2YWx1ZXMgdG9KU09OT2JqZWN0XSk7Ci0gICAgcGFyYW1zT2JqZWN0
LT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgW3BheWxvYWQgdG9KU09OT2JqZWN0XSk7Ci0gICAgcGFy
YW1zT2JqZWN0LT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBbc3FsRXJyb3IgdG9KU09OT2JqZWN0
XSk7Ci0gICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCBzY3JlZW5D
b2xvcik7Ci0gICAgcGFyYW1zT2JqZWN0LT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCB0
b0pTT05TdHJpbmdBcnJheShhbHRlcm5hdGVDb2xvcnMpKTsKLSAgICBwYXJhbXNPYmplY3QtPnNl
dFN0cmluZygicHJpbnRDb2xvciJfcywgcHJpbnRDb2xvcik7Ci0gICAganNvbk1lc3NhZ2UtPnNl
dE9iamVjdCgicGFyYW1zIl9zLCBXVEZNb3ZlKHBhcmFtc09iamVjdCkpOwotICAgIHJvdXRlci5z
ZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKKyAgICBhdXRvIHByb3RvY29s
X2pzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBwcm90b2NvbF9qc29u
TWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJEYXRhYmFzZS5kaWRFeGVjdXRlTm9PcHRp
b25hbFBhcmFtZXRlcnMiX3MpOworICAgIGF1dG8gcHJvdG9jb2xfcGFyYW1zT2JqZWN0ID0gSlNP
Tjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBwcm90b2NvbF9wYXJhbXNPYmplY3QtPnNldEFycmF5
KCJjb2x1bW5OYW1lcyJfcywgdG9KU09OU3RyaW5nQXJyYXkoY29sdW1uTmFtZXMpKTsKKyAgICBw
cm90b2NvbF9wYXJhbXNPYmplY3QtPnNldFN0cmluZygibm90ZXMiX3MsIG5vdGVzKTsKKyAgICBw
cm90b2NvbF9wYXJhbXNPYmplY3QtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCB0aW1lc3RhbXAp
OworICAgIHByb3RvY29sX3BhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIFt2YWx1
ZXMgdG9KU09OT2JqZWN0XSk7CisgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRWYWx1ZSgi
cGF5bG9hZCJfcywgW3BheWxvYWQgdG9KU09OT2JqZWN0XSk7CisgICAgcHJvdG9jb2xfcGFyYW1z
T2JqZWN0LT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBbc3FsRXJyb3IgdG9KU09OT2JqZWN0XSk7
CisgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCBz
Y3JlZW5Db2xvcik7CisgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRBcnJheSgiYWx0ZXJu
YXRlQ29sb3JzIl9zLCB0b0pTT05TdHJpbmdBcnJheShhbHRlcm5hdGVDb2xvcnMpKTsKKyAgICBw
cm90b2NvbF9wYXJhbXNPYmplY3QtPnNldFN0cmluZygicHJpbnRDb2xvciJfcywgcHJpbnRDb2xv
cik7CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIl9zLCBXVEZN
b3ZlKHByb3RvY29sX3BhcmFtc09iamVjdCkpOworICAgIHJvdXRlci5zZW5kRXZlbnQocHJvdG9j
b2xfanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKIH0KIAogQGVuZApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2dl
bmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uLXJlc3VsdCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9nZW5lcmF0ZS1k
b21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbi1yZXN1bHQKaW5kZXggMjk0YmE5MDgxMjE4
YTM1MDJkOTZkNDU1ZDRkNjNkMmIzZjVhYWU5YS4uMzljMzY2M2FmZjJmNmZiOWMwZWE3Yjg0OWNm
MzkwYWZkYTNiZmJhYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2dlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1
YXJkcy5qc29uLXJlc3VsdAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZXhwZWN0ZWQvZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRz
Lmpzb24tcmVzdWx0CkBAIC03NCw3ICs3NCw3IEBAIEluc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVE
b21haW4oIk5ldHdvcmszIiwgbnVsbCk7CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKIAotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVk
ZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yRnJvbnRlbmRSb3V0ZXIuaD4KIApAQCAtOTIsNyArOTIsNyBAQCBwcml2YXRlOgogY2xhc3Mg
QWx0ZXJuYXRlTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlciA6IHB1YmxpYyBBbHRlcm5hdGVCYWNr
ZW5kRGlzcGF0Y2hlciB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+QWx0ZXJuYXRlTmV0d29yazFC
YWNrZW5kRGlzcGF0Y2hlcigpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UobG9u
ZyBjYWxsSWQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlKGxvbmcgcHJvdG9j
b2xfY2FsbElkKSA9IDA7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKQEAgLTEzNCwx
MSArMTM0LDE0IEBAIHB1YmxpYzoKIAogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIK
ICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgor
I2luY2x1ZGUgPHR1cGxlPgorI2luY2x1ZGUgPHd0Zi9FeHBlY3RlZC5oPgorI2luY2x1ZGUgPHd0
Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKIAotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKIAogI2lmIEVO
QUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogY2xhc3MgQWx0ZXJuYXRlTmV0
d29yazFCYWNrZW5kRGlzcGF0Y2hlcjsKQEAgLTE0Niw3ICsxNDksNyBAQCBjbGFzcyBBbHRlcm5h
dGVOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOwogCiBjbGFzcyBOZXR3b3JrMUJhY2tlbmREaXNw
YXRjaGVySGFuZGxlciB7CiBwdWJsaWM6Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZShF
cnJvclN0cmluZyYpID0gMDsKKyAgICB2aXJ0dWFsIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZv
aWQ+IGxvYWRSZXNvdXJjZSgpID0gMDsKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIH5OZXR3b3Jr
MUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpOwogfTsKQEAgLTE1NCw5ICsxNTcsOSBAQCBwcm90
ZWN0ZWQ6CiBjbGFzcyBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIFN1
cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPE5l
dHdvcmsxQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYsIE5ldHdv
cmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7Ci0gICAgdm9pZCBkaXNwYXRjaChsb25nIHJl
cXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2Fn
ZSkgZmluYWw7CisgICAgdm9pZCBkaXNwYXRjaChsb25nIHByb3RvY29sX2NhbGxJZCwgY29uc3Qg
U3RyaW5nJiBwcm90b2NvbF9tZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfbWVz
c2FnZSkgZmluYWw7CiBwcml2YXRlOgotICAgIHZvaWQgbG9hZFJlc291cmNlKGxvbmcgcmVxdWVz
dElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOworICAgIHZvaWQgbG9hZFJl
c291cmNlKGxvbmcgcHJvdG9jbF9jYWxsSWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcHJvdG9j
b2xfcGFyYW1ldGVycyk7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hF
UlMpCiBwdWJsaWM6CiAgICAgdm9pZCBzZXRBbHRlcm5hdGVEaXNwYXRjaGVyKEFsdGVybmF0ZU5l
dHdvcmsxQmFja2VuZERpc3BhdGNoZXIqIGFsdGVybmF0ZURpc3BhdGNoZXIpIHsgbV9hbHRlcm5h
dGVEaXNwYXRjaGVyID0gYWx0ZXJuYXRlRGlzcGF0Y2hlcjsgfQpAQCAtMjA1LDkgKzIwOCw3IEBA
IHByaXZhdGU6CiAjaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgogCiAjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3
dGYvSlNPTlZhbHVlcy5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRF
X0RJU1BBVENIRVJTKQogI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMu
aCIKQEAgLTIyOSwzOCArMjMwLDM4IEBAIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI6Ok5ldHdv
cmsxQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmRECiAgICAgbV9i
YWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRjaGVyRm9yRG9tYWluKCJOZXR3b3JrMSJf
cywgdGhpcyk7CiB9CiAKLXZvaWQgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2go
bG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYm
IG1lc3NhZ2UpCit2b2lkIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcg
cHJvdG9jb2xfY2FsbElkLCBjb25zdCBTdHJpbmcmIHByb3RvY29sX21ldGhvZCwgUmVmPEpTT046
Ok9iamVjdD4mJiBwcm90b2NvbF9tZXNzYWdlKQogewogICAgIFJlZjxOZXR3b3JrMUJhY2tlbmRE
aXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKIAotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBh
cmFtZXRlcnM7Ci0gICAgbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3MsIHBhcmFtZXRlcnMp
OworICAgIGF1dG8gcHJvdG9jb2xfcGFyYW1ldGVycyA9IHByb3RvY29sX21lc3NhZ2UtPmdldE9i
amVjdCgicGFyYW1zIl9zKTsKIAotICAgIGlmIChtZXRob2QgPT0gImxvYWRSZXNvdXJjZSIpIHsK
LSAgICAgICAgbG9hZFJlc291cmNlKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7Cisg
ICAgaWYgKHByb3RvY29sX21ldGhvZCA9PSAibG9hZFJlc291cmNlIikgeworICAgICAgICBsb2Fk
UmVzb3VyY2UocHJvdG9jb2xfY2FsbElkLCBXVEZNb3ZlKHByb3RvY29sX3BhcmFtZXRlcnMpKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9y
dFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdv
cmsxLiIgKyBtZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7CisgICAgbV9iYWNrZW5kRGlzcGF0
Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91
bmQsICInTmV0d29yazEuIiArIHByb3RvY29sX21ldGhvZCArICInIHdhcyBub3QgZm91bmQiKTsK
IH0KIAotdm9pZCBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UobG9uZyBy
ZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCit2b2lkIE5ldHdvcmsxQmFja2VuZERp
c3BhdGNoZXI6OmxvYWRSZXNvdXJjZShsb25nIHByb3RvY29sX2NhbGxJZCwgUmVmUHRyPEpTT046
Ok9iamVjdD4mJikKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVS
UykKICAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRl
RGlzcGF0Y2hlci0+bG9hZFJlc291cmNlKHJlcXVlc3RJZCk7CisgICAgICAgIG1fYWx0ZXJuYXRl
RGlzcGF0Y2hlci0+bG9hZFJlc291cmNlKHByb3RvY29sX2NhbGxJZCk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hF
UlMpCiAKLSAgICBFcnJvclN0cmluZyBlcnJvcjsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1
bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJjZShl
cnJvcik7CisgICAgYXV0byByZXN1bHQgPSBtX2FnZW50LT5sb2FkUmVzb3VyY2UoKTsKKyAgICBp
ZiAoIXJlc3VsdCkgeworICAgICAgICBBU1NFUlQoIXJlc3VsdC5lcnJvcigpLmlzRW1wdHkoKSk7
CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2Vu
ZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCByZXN1bHQuZXJyb3IoKSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CiAKLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQotICAgICAgICBtX2JhY2tlbmRE
aXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNl
KTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29s
RXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7Cisg
ICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Cisg
ICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHByb3RvY29sX2NhbGxJZCwgV1RG
TW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSksIGZhbHNlKTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCkBAIC0zMDEsNiArMzAyLDcgQEAgdm9pZCBOZXR3b3JrMUJhY2tlbmREaXNwYXRj
aGVyOjpsb2FkUmVzb3VyY2UobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3QKIAog
I2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDx3dGYvSlNPTlZhbHVl
cy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKQEAgLTM1MywxNiArMzU1LDE1IEBAIHBy
aXZhdGU6CiAjaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKIAogI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3Rm
L3RleHQvQ1N0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAogdm9pZCBOZXR3b3Jr
M0Zyb250ZW5kRGlzcGF0Y2hlcjo6cmVzb3VyY2VMb2FkZWQoKQogewotICAgIFJlZjxKU09OOjpP
YmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBqc29uTWVz
c2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJOZXR3b3JrMy5yZXNvdXJjZUxvYWRlZCJfcyk7
CisgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7
CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiTmV0d29y
azMucmVzb3VyY2VMb2FkZWQiX3MpOwogCi0gICAgbV9mcm9udGVuZFJvdXRlci5zZW5kRXZlbnQo
anNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKKyAgICBtX2Zyb250ZW5kUm91dGVyLnNlbmRF
dmVudChwcm90b2NvbF9qc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKQEAgLTQwMiw3ICs0MDMsOSBAQCB2b2lkIE5ldHdvcmszRnJvbnRl
bmREaXNwYXRjaGVyOjpyZXNvdXJjZUxvYWRlZCgpCiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYv
QXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3Rm
L09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFj
ZSBJbnNwZWN0b3IgewogCkBAIC00MjMsNyArNDI2LDcgQEAgY2xhc3MgTmV0d29ya0Vycm9yOwog
CiBuYW1lc3BhY2UgTmV0d29yazIgewogCi1jbGFzcyBOZXR3b3JrRXJyb3IgOiBwdWJsaWMgSlNP
Tjo6T2JqZWN0QmFzZSB7CitjbGFzcyBOZXR3b3JrRXJyb3IgZmluYWwgOiBwdWJsaWMgSlNPTjo6
T2JqZWN0QmFzZSB7CiBwdWJsaWM6CiAgICAgZW51bSB7CiAgICAgICAgIE5vRmllbGRzU2V0ID0g
MCwKQEAgLTQ1MCwxNyArNDUzLDE3IEBAIHB1YmxpYzoKICAgICAgICAgZnJpZW5kIGNsYXNzIE5l
dHdvcmtFcnJvcjsKICAgICBwdWJsaWM6CiAKLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IE1lc3Nh
Z2VTZXQ+JiBzZXRNZXNzYWdlKGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCBNZXNzYWdlU2V0PiYgc2V0TWVzc2FnZShjb25zdCBTdHJpbmcmIGluX21lc3NhZ2Up
CiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBNZXNzYWdl
U2V0KSwgcHJvcGVydHlfbWVzc2FnZV9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3Vs
dC0+c2V0U3RyaW5nKCJtZXNzYWdlIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+
c2V0U3RyaW5nKCJtZXNzYWdlIl9zLCBpbl9tZXNzYWdlKTsKICAgICAgICAgICAgIHJldHVybiBj
YXN0U3RhdGU8TWVzc2FnZVNldD4oKTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1aWxkZXI8U1RB
VEUgfCBDb2RlU2V0PiYgc2V0Q29kZShpbnQgdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8U1RBVEUg
fCBDb2RlU2V0PiYgc2V0Q29kZShpbnQgaW5fY29kZSkKICAgICAgICAgewogICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoIShTVEFURSAmIENvZGVTZXQpLCBwcm9wZXJ0eV9jb2RlX2FscmVhZHlf
c2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRJbnRlZ2VyKCJjb2RlIl9zLCB2YWx1ZSk7
CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0SW50ZWdlcigiY29kZSJfcywgaW5fY29kZSk7CiAg
ICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENvZGVTZXQ+KCk7CiAgICAgICAgIH0KIApAQCAt
NTMwLDggKzUzMyw3IEBAIHB1YmxpYzoKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJU
ZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAKLSNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNs
dWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KIAog
bmFtZXNwYWNlIEluc3BlY3RvciB7CiAKQEAgLTU4Nyw3ICs1ODksNyBAQCBjbGFzcyBPYmpDSW5z
cGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBBbHRlcm5hdGVO
ZXR3b3JrMUJhYwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIE9i
akNJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyKGlkPFRlc3RQcm90b2NvbE5ldHdv
cmsxRG9tYWluSGFuZGxlcj4gaGFuZGxlcikgeyBtX2RlbGVnYXRlID0gaGFuZGxlcjsgfQotICAg
IHZvaWQgbG9hZFJlc291cmNlKGxvbmcgcmVxdWVzdElkKSBmaW5hbDsKKyAgICB2b2lkIGxvYWRS
ZXNvdXJjZShsb25nIHByb3RvY29sX2NhbGxJZCkgZmluYWw7CiBwcml2YXRlOgogICAgIFJldGFp
blB0cjxpZDxUZXN0UHJvdG9jb2xOZXR3b3JrMURvbWFpbkhhbmRsZXI+PiBtX2RlbGVnYXRlOwog
fTsKQEAgLTYzNSwyMSArNjM3LDIyIEBAIHByaXZhdGU6CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3Ig
ewogCi12b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVz
b3VyY2UobG9uZyByZXF1ZXN0SWQpCit2b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmRE
aXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UobG9uZyBwcm90b2NvbF9jYWxsSWQpCiB7CiAgICAgaWYg
KCFbbV9kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGxvYWRSZXNvdXJjZVdp
dGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazopXSkgewotICAgICAgICBiYWNrZW5kRGlz
cGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNo
ZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdvcmsxLmxvYWRSZXNvdXJjZScgd2FzIG5vdCBmb3Vu
ZCJfcyk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3Io
cHJvdG9jb2xfY2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0
d29yazEubG9hZFJlc291cmNlJyB3YXMgbm90IGZvdW5kIl9zKTsKICAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAogICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgewotICAgICAgICBi
YWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2Vu
ZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CisgICAgICAgIGJhY2tlbmREaXNwYXRj
aGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocHJvdG9jb2xfY2FsbElkLCBCYWNrZW5kRGlzcGF0
Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+
c2VuZFBlbmRpbmdFcnJvcnMoKTsKICAgICB9OwogCiAgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0g
XnsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwg
SlNPTjo6T2JqZWN0OjpjcmVhdGUoKSwgZmFsc2UpOworICAgICAgICBhdXRvIHByb3RvY29sX2pz
b25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgYmFja2VuZERpc3Bh
dGNoZXIoKS0+c2VuZFJlc3BvbnNlKHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9q
c29uTWVzc2FnZSksIGZhbHNlKTsKICAgICB9OwogCiAgICAgW21fZGVsZWdhdGUgbG9hZFJlc291
cmNlV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vz
c0NhbGxiYWNrXTsKQEAgLTg1MSw5ICs4NTQsOSBAQCB1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9y
OwogewogICAgIGNvbnN0IEZyb250ZW5kUm91dGVyJiByb3V0ZXIgPSBfY29udHJvbGxlci0+ZnJv
bnRlbmRSb3V0ZXIoKTsKIAotICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNP
Tjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2Qi
X3MsICJOZXR3b3JrMy5yZXNvdXJjZUxvYWRlZCJfcyk7Ci0gICAgcm91dGVyLnNlbmRFdmVudChq
c29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOworICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3Nh
Z2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5z
ZXRTdHJpbmcoIm1ldGhvZCJfcywgIk5ldHdvcmszLnJlc291cmNlTG9hZGVkIl9zKTsKKyAgICBy
b3V0ZXIuc2VuZEV2ZW50KHByb3RvY29sX2pzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7CiB9
CiAKIEBlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9leHBlY3RlZC9zYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uLXJl
c3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBl
Y3RlZC9zYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uLXJlc3VsdAppbmRleCA0NTNl
ZjZlNDk0OGVhYjAyNWFiNTYxMzc4ZDJiOGFhOTRmNTVjODhkLi41NmVmNjM0ZGU5ODA2ODU4NmRi
ZGNkMDg4MWI5MWQ4NDllMmZiYTE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvc2FtZS10eXBlLWlkLWRpZmZlcmVudC1k
b21haW4uanNvbi1yZXN1bHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3NhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24t
cmVzdWx0CkBAIC02Myw3ICs2Myw3IEBACiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKIAotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVk
ZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yRnJvbnRlbmRSb3V0ZXIuaD4KIApAQCAtMTE5LDExICsxMTksMTQgQEAgcHJpdmF0ZToKIAog
I2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHR1cGxlPgorI2luY2x1
ZGUgPHd0Zi9FeHBlY3RlZC5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAotdHlwZWRl
ZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKIAogCiAKQEAgLTE2NCw5ICsxNjcsNyBAQCB0eXBlZGVm
IFN0cmluZyBFcnJvclN0cmluZzsKICNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgi
CiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgot
I2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVk
Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiAjaWYgRU5BQkxFKElOU1BFQ1RP
Ul9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAjaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmRE
aXNwYXRjaGVycy5oIgpAQCAtMjE0LDYgKzIxNSw3IEBAIG5hbWVzcGFjZSBJbnNwZWN0b3Igewog
CiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPHd0Zi9KU09OVmFs
dWVzLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewpAQCAtMjU3LDcgKzI1OSw2IEBAIGNs
YXNzIEZyb250ZW5kUm91dGVyOwogI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgi
CiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgot
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAK
QEAgLTI5OCw3ICsyOTksOSBAQCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKICNwcmFnbWEgb25jZQog
CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgotI2lu
Y2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNp
bmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
IAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKQEAgLTM2Miw4ICszNjUsNyBAQCB1c2luZyBSZW1v
dGVPYmplY3RJZCA9IFN0cmluZzsKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJUZXN0
UHJvdG9jb2xPYmplY3RzLmgiCiAKLSNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KIAogbmFt
ZXNwYWNlIEluc3BlY3RvciB7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9zaGFkb3dlZC1vcHRpb25hbC10eXBlLXNl
dHRlcnMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZXhwZWN0ZWQvc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24tcmVz
dWx0CmluZGV4IDVmMmNkNzkzMzA0MjQ3ZTc2NTVmM2U5ODFlYTcwMGY1N2M3NzBmZDkuLjhlY2Vj
YzcwMTAzNDA0ZGE3ZGMyNzhjYTk3NTE5YTJkZWJmYzAwNWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9zaGFkb3dlZC1v
cHRpb25hbC10eXBlLXNldHRlcnMuanNvbi1yZXN1bHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3NoYWRvd2VkLW9wdGlvbmFsLXR5
cGUtc2V0dGVycy5qc29uLXJlc3VsdApAQCAtNjMsNyArNjMsNyBAQAogCiAjaWYgRU5BQkxFKElO
U1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xU
eXBlcy5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgogI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CiAKQEAgLTExOSwxMSArMTE5LDE0
IEBAIHByaXZhdGU6CiAKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRl
IDx0dXBsZT4KKyNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9u
YWwuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3Bl
Y3RvciB7CiAKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCiAKIAogCkBAIC0xNjQsOSAr
MTY3LDcgQEAgdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiAjaW5jbHVkZSAiVGVzdEJhY2tl
bmREaXNwYXRjaGVycy5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJv
bnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgogI2luY2x1ZGUgPHd0
Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogI2lm
IEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogI2luY2x1ZGUgIlRlc3RB
bHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKQEAgLTIxNCw2ICsyMTUsNyBAQCBuYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKIAogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNs
dWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKQEAgLTI1
Nyw3ICsyNTksNiBAQCBjbGFzcyBGcm9udGVuZFJvdXRlcjsKICNpbmNsdWRlICJUZXN0RnJvbnRl
bmREaXNwYXRjaGVycy5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJv
bnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKIG5hbWVzcGFj
ZSBJbnNwZWN0b3IgewogCkBAIC0yOTgsNyArMjk5LDkgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7
CiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3Rv
Y29sVHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9K
U09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC0zMzEsNyArMzM0
LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKFQg
ZW51bVZhbHVlKQogbmFtZXNwYWNlIFJ1bnRpbWUgewogCiAvKiBLZXkgcGF0aC4gKi8KLWNsYXNz
IEtleVBhdGggOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7CitjbGFzcyBLZXlQYXRoIGZpbmFs
IDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgewogcHVibGljOgogICAgIC8vIE5hbWVkIGFmdGVy
IHByb3BlcnR5IG5hbWUgJ3R5cGUnIHdoaWxlIGdlbmVyYXRpbmcgS2V5UGF0aC4KICAgICBlbnVt
IGNsYXNzIFR5cGUgewpAQCAtMzM5LDYgKzM0Miw3IEBAIHB1YmxpYzoKICAgICAgICAgU3RyaW5n
ID0gMSwKICAgICAgICAgQXJyYXkgPSAyLAogICAgIH07IC8vIGVudW0gY2xhc3MgVHlwZQorCiAg
ICAgZW51bSB7CiAgICAgICAgIE5vRmllbGRzU2V0ID0gMCwKICAgICAgICAgVHlwZVNldCA9IDEg
PDwgMCwKQEAgLTM2MywxMCArMzY3LDEwIEBAIHB1YmxpYzoKICAgICAgICAgZnJpZW5kIGNsYXNz
IEtleVBhdGg7CiAgICAgcHVibGljOgogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBUeXBlU2V0
PiYgc2V0VHlwZShUeXBlIHZhbHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVHlwZVNldD4m
IHNldFR5cGUoVHlwZSBpbl90eXBlKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FT
U0VSVCghKFNUQVRFICYgVHlwZVNldCksIHByb3BlcnR5X3R5cGVfYWxyZWFkeV9zZXQpOwotICAg
ICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygidHlwZSJfcywgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKHZhbHVlKSk7CisgICAgICAgICAg
ICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ0eXBlIl9zLCBQcm90b2NvbDo6VGVzdEhlbHBlcnM6Omdl
dEVudW1Db25zdGFudFZhbHVlKGluX3R5cGUpKTsKICAgICAgICAgICAgIHJldHVybiBjYXN0U3Rh
dGU8VHlwZVNldD4oKTsKICAgICAgICAgfQogCkBAIC0zOTIsMTQgKzM5NiwxNCBAQCBwdWJsaWM6
CiAgICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihKU09OOjpPYmplY3Q6OmNyZWF0
ZSgpKTsKICAgICB9CiAKLSAgICB2b2lkIHNldFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQor
ICAgIHZvaWQgc2V0U3RyaW5nKGNvbnN0IFN0cmluZyYgaW5fb3B0X3N0cmluZykKICAgICB7Ci0g
ICAgICAgIEpTT046Ok9iamVjdEJhc2U6OnNldFN0cmluZygic3RyaW5nIl9zLCB2YWx1ZSk7Cisg
ICAgICAgIEpTT046Ok9iamVjdEJhc2U6OnNldFN0cmluZygic3RyaW5nIl9zLCBpbl9vcHRfc3Ry
aW5nKTsKICAgICB9CiAKLSAgICB2b2lkIHNldEFycmF5KFJlZlB0cjxKU09OOjpBcnJheU9mPFN0
cmluZz4+IHZhbHVlKQorICAgIHZvaWQgc2V0QXJyYXkoUmVmPEpTT046OkFycmF5T2Y8U3RyaW5n
Pj4mJiBpbl9vcHRfYXJyYXkpCiAgICAgewotICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXRB
cnJheSgiYXJyYXkiX3MsIFdURk1vdmUodmFsdWUpKTsKKyAgICAgICAgSlNPTjo6T2JqZWN0QmFz
ZTo6c2V0QXJyYXkoImFycmF5Il9zLCBXVEZNb3ZlKGluX29wdF9hcnJheSkpOwogICAgIH0KIH07
CiAKQEAgLTQxNCw3ICs0MTgsNyBAQCBPcHRpb25hbDxQcm90b2NvbEVudW1UeXBlPiBwYXJzZUVu
dW1WYWx1ZUZyb21TdHJpbmcoY29uc3QgU3RyaW5nJik7CiAKIC8vIEVudW1zIGluIHRoZSAnUnVu
dGltZScgRG9tYWluCiB0ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpS
dW50aW1lOjpLZXlQYXRoOjpUeXBlPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9y
OjpQcm90b2NvbDo6UnVudGltZTo6S2V5UGF0aDo6VHlwZT4oY29uc3QgU3RyaW5nJik7CitPcHRp
b25hbDxQcm90b2NvbDo6UnVudGltZTo6S2V5UGF0aDo6VHlwZT4gcGFyc2VFbnVtVmFsdWVGcm9t
U3RyaW5nPFByb3RvY29sOjpSdW50aW1lOjpLZXlQYXRoOjpUeXBlPihjb25zdCBTdHJpbmcmKTsK
IAogfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKIApAQCAtNDU2LDggKzQ2MCw3IEBAIE9wdGlv
bmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OktleVBhdGg6OlR5cGU+IHBhcnNlRW51
bVZhbHVlRnJvbVN0cmluZzxJCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGVzdFBy
b3RvY29sT2JqZWN0cy5oIgogCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8
d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAKIG5hbWVz
cGFjZSBJbnNwZWN0b3IgewogCkBAIC00NzgsMTYgKzQ4MSwxNiBAQCBTdHJpbmcgZ2V0RW51bUNv
bnN0YW50VmFsdWUoaW50IGNvZGUpIHsKIC8vIEVudW1zIGluIHRoZSAnUnVudGltZScgRG9tYWlu
CiAKIHRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6Oktl
eVBhdGg6OlR5cGU+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29s
OjpSdW50aW1lOjpLZXlQYXRoOjpUeXBlPihjb25zdCBTdHJpbmcmIHByb3RvY29sU3RyaW5nKQor
T3B0aW9uYWw8UHJvdG9jb2w6OlJ1bnRpbWU6OktleVBhdGg6OlR5cGU+IHBhcnNlRW51bVZhbHVl
RnJvbVN0cmluZzxQcm90b2NvbDo6UnVudGltZTo6S2V5UGF0aDo6VHlwZT4oY29uc3QgU3RyaW5n
JiBwcm90b2NvbFN0cmluZykKIHsKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNvbnN0YW50VmFs
dWVzW10gPSB7Ci0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6
S2V5UGF0aDo6VHlwZTo6TnVsbCwKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29s
OjpSdW50aW1lOjpLZXlQYXRoOjpUeXBlOjpTdHJpbmcsCi0gICAgICAgIChzaXplX3QpSW5zcGVj
dG9yOjpQcm90b2NvbDo6UnVudGltZTo6S2V5UGF0aDo6VHlwZTo6QXJyYXksCisgICAgICAgIChz
aXplX3QpUHJvdG9jb2w6OlJ1bnRpbWU6OktleVBhdGg6OlR5cGU6Ok51bGwsCisgICAgICAgIChz
aXplX3QpUHJvdG9jb2w6OlJ1bnRpbWU6OktleVBhdGg6OlR5cGU6OlN0cmluZywKKyAgICAgICAg
KHNpemVfdClQcm90b2NvbDo6UnVudGltZTo6S2V5UGF0aDo6VHlwZTo6QXJyYXksCiAgICAgfTsK
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDM7ICsraSkKICAgICAgICAgaWYgKHByb3RvY29s
U3RyaW5nID09IGVudW1fY29uc3RhbnRfdmFsdWVzW2NvbnN0YW50VmFsdWVzW2ldXSkKLSAgICAg
ICAgICAgIHJldHVybiAoSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6S2V5UGF0aDo6VHlw
ZSljb25zdGFudFZhbHVlc1tpXTsKKyAgICAgICAgICAgIHJldHVybiAoUHJvdG9jb2w6OlJ1bnRp
bWU6OktleVBhdGg6OlR5cGUpY29uc3RhbnRWYWx1ZXNbaV07CiAKICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3Nob3VsZC1zdHJpcC1jb21tZW50cy5qc29uLXJlc3VsdCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9z
aG91bGQtc3RyaXAtY29tbWVudHMuanNvbi1yZXN1bHQKaW5kZXggMzQ4YWNlOTNiYWIwOTQ3ZGFm
ODViNDVmNTljOWZjYWE2NzAyZGUwMC4uMDBhYTM2ZmEzZDAyNDkxM2M1YjhkMjczODExZGE1YTAx
NTQ4MzEyOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2V4cGVjdGVkL3Nob3VsZC1zdHJpcC1jb21tZW50cy5qc29uLXJlc3VsdAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQv
c2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpzb24tcmVzdWx0CkBAIC02Myw3ICs2Myw3IEBACiAKICNp
ZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIAotI2luY2x1ZGUgIlRl
c3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CiAjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KIApAQCAtMTE5
LDExICsxMTksMTQgQEAgcHJpdmF0ZToKIAogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMu
aCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5o
PgorI2luY2x1ZGUgPHR1cGxlPgorI2luY2x1ZGUgPHd0Zi9FeHBlY3RlZC5oPgorI2luY2x1ZGUg
PHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1l
c3BhY2UgSW5zcGVjdG9yIHsKIAotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKIAogCiAK
QEAgLTE2NCw5ICsxNjcsNyBAQCB0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKICNpbmNsdWRl
ICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9J
bnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CiAj
aW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAjaW5j
bHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgpAQCAtMjE0LDYgKzIxNSw3
IEBAIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0
cy5oIgogI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFs
Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0
b3IgewpAQCAtMjU3LDcgKzI1OSw2IEBAIGNsYXNzIEZyb250ZW5kUm91dGVyOwogI2luY2x1ZGUg
IlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9J
bnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
IAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKQEAgLTI5OCw3ICsyOTksOSBAQCBuYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yUHJvdG9jb2xUeXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5j
bHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKQEAg
LTM1Miw4ICszNTUsNyBAQCBuYW1lc3BhY2UgUHJvdG9jb2wgewogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKIAotI2luY2x1ZGUgPHd0Zi9PcHRp
b25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvQXNz
ZXJ0aW9ucy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVj
bGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0
aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbi1yZXN1bHQKaW5kZXggNzljYjk4NTQ1OWY4
ODI0NTY3N2M1ZTNjMjYwNWY3MzQ0ZTExNmJmYy4uMzRiMWFjYmJjYWVjODEyZDg0ZDE2OWZlM2Iy
YjgyNzI1NjdhYmQ0MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRp
dmUtdHlwZS5qc29uLXJlc3VsdAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2
ZS10eXBlLmpzb24tcmVzdWx0CkBAIC02Myw3ICs2Myw3IEBACiAKICNpZiBFTkFCTEUoSU5TUEVD
VE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIAotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVz
LmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KIApAQCAtMTE5LDExICsxMTksMTQgQEAg
cHJpdmF0ZToKIAogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHR1
cGxlPgorI2luY2x1ZGUgPHd0Zi9FeHBlY3RlZC5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5o
PgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9y
IHsKIAotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKIAogCiAKQEAgLTE2NCw5ICsxNjcs
NyBAQCB0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKICNpbmNsdWRlICJUZXN0QmFja2VuZERp
c3BhdGNoZXJzLmgiCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVu
ZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CiAjaW5jbHVkZSA8d3RmL05l
dmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiAjaWYgRU5B
QkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAjaW5jbHVkZSAiVGVzdEFsdGVy
bmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgpAQCAtMjE0LDYgKzIxNSw3IEBAIG5hbWVzcGFjZSBJ
bnNwZWN0b3IgewogCiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUg
PHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewpAQCAtMjU3LDcg
KzI1OSw2IEBAIGNsYXNzIEZyb250ZW5kUm91dGVyOwogI2luY2x1ZGUgIlRlc3RGcm9udGVuZERp
c3BhdGNoZXJzLmgiCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVu
ZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogbmFtZXNwYWNlIElu
c3BlY3RvciB7CiAKQEAgLTI5OCw3ICsyOTksOSBAQCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKICNw
cmFnbWEgb25jZQogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xU
eXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL0pTT05W
YWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKQEAgLTM1Nyw4ICszNjAsNyBA
QCB1c2luZyBSZW1vdGVPYmplY3RJZCA9IGludDsKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAKLSNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4K
LSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMu
aD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9u
LWFycmF5LXR5cGUuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24t
cmVzdWx0CmluZGV4IGQ4ODgwYzYzZTMzNzhjNWNmZTMwOGNhZmRmODRjYzk4NzQ5MmJiZmMuLjk0
MGYxNTgwYmRjMWQ5YmNhNDQwMTQ3NDE1MmEyM2JiMjU0YjE5MGYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRl
Y2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbi1yZXN1bHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tYXJy
YXktdHlwZS5qc29uLXJlc3VsdApAQCAtNjgsNyArNjgsNyBAQCBJbnNwZWN0b3JCYWNrZW5kLmFj
dGl2YXRlRG9tYWluKCJEZWJ1Z2dlciIsIG51bGwpOwogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9B
TFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgor
I2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CiAKQEAgLTEyNCwxMSArMTI0LDE0IEBAIHByaXZh
dGU6CiAKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx0dXBsZT4K
KyNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAK
LXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCiAKIAogCkBAIC0xNjksOSArMTcyLDcgQEAg
dHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiAjaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRj
aGVycy5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0
ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRl
c3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogI2lmIEVOQUJMRShJ
TlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVC
YWNrZW5kRGlzcGF0Y2hlcnMuaCIKQEAgLTIxOSw2ICsyMjAsNyBAQCBuYW1lc3BhY2UgSW5zcGVj
dG9yIHsKIAogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDx3dGYv
SlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKQEAgLTI2Miw3ICsyNjQs
NiBAQCBjbGFzcyBGcm9udGVuZFJvdXRlcjsKICNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRj
aGVycy5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0
ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0
b3IgewogCkBAIC0zMDMsNyArMzA0LDkgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiAjcHJhZ21h
IG9uY2UKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMu
aD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVz
Lmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC0zMzEsNyArMzM0LDcgQEAgdXNp
bmcgTHVja3lOdW1iZXJzID0gSlNPTjo6QXJyYXlPZjxpbnQ+OwogdXNpbmcgQmFieU5hbWVzID0g
SlNPTjo6QXJyYXlPZjxTdHJpbmc+OwogdXNpbmcgTmV3T2JqZWN0cyA9IEpTT046OkFycmF5T2Y8
aW50PjsKIHVzaW5nIE9sZE9iamVjdHMgPSBKU09OOjpBcnJheU9mPGludD47Ci11c2luZyBTdG9w
UmVhc29ucyA9IEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OlJl
YXNvbj47Cit1c2luZyBTdG9wUmVhc29ucyA9IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkRlYnVn
Z2VyOjpSZWFzb24+OwogfSAvLyBSdW50aW1lCiAvLyBFbmQgb2YgdHlwZWRlZnMuCiAKQEAgLTM2
NSw3ICszNjgsNyBAQCBPcHRpb25hbDxQcm90b2NvbEVudW1UeXBlPiBwYXJzZUVudW1WYWx1ZUZy
b21TdHJpbmcoY29uc3QgU3RyaW5nJik7CiAKIC8vIEVudW1zIGluIHRoZSAnRGVidWdnZXInIERv
bWFpbgogdGVtcGxhdGU8PgotT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6
OlJlYXNvbj4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRl
YnVnZ2VyOjpSZWFzb24+KGNvbnN0IFN0cmluZyYpOworT3B0aW9uYWw8UHJvdG9jb2w6OkRlYnVn
Z2VyOjpSZWFzb24+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxQcm90b2NvbDo6RGVidWdnZXI6
OlJlYXNvbj4oY29uc3QgU3RyaW5nJik7CiAKIH0gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCiAK
QEAgLTQxNyw4ICs0MjAsNyBAQCBzdHJ1Y3QgRGVmYXVsdEhhc2g8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6RGVidWdnZXI6OlJlYXNvbj4gOiBJbnRIYXNoPEluc3BlY3Rvcjo6UAogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKIAotI2luY2x1ZGUgPHd0
Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3
dGYvQXNzZXJ0aW9ucy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtNDM5LDE2ICs0
NDEsMTYgQEAgU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKSB7CiAvLyBFbnVt
cyBpbiB0aGUgJ0RlYnVnZ2VyJyBEb21haW4KIAogdGVtcGxhdGU8PgotT3B0aW9uYWw8SW5zcGVj
dG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OlJlYXNvbj4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5n
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpSZWFzb24+KGNvbnN0IFN0cmluZyYgcHJv
dG9jb2xTdHJpbmcpCitPcHRpb25hbDxQcm90b2NvbDo6RGVidWdnZXI6OlJlYXNvbj4gcGFyc2VF
bnVtVmFsdWVGcm9tU3RyaW5nPFByb3RvY29sOjpEZWJ1Z2dlcjo6UmVhc29uPihjb25zdCBTdHJp
bmcmIHByb3RvY29sU3RyaW5nKQogewogICAgIHN0YXRpYyBjb25zdCBzaXplX3QgY29uc3RhbnRW
YWx1ZXNbXSA9IHsKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dl
cjo6UmVhc29uOjpEaWVkLAotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRl
YnVnZ2VyOjpSZWFzb246OkZhaW50ZWQsCi0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90
b2NvbDo6RGVidWdnZXI6OlJlYXNvbjo6SHVuZ3J5LAorICAgICAgICAoc2l6ZV90KVByb3RvY29s
OjpEZWJ1Z2dlcjo6UmVhc29uOjpEaWVkLAorICAgICAgICAoc2l6ZV90KVByb3RvY29sOjpEZWJ1
Z2dlcjo6UmVhc29uOjpGYWludGVkLAorICAgICAgICAoc2l6ZV90KVByb3RvY29sOjpEZWJ1Z2dl
cjo6UmVhc29uOjpIdW5ncnksCiAgICAgfTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDM7
ICsraSkKICAgICAgICAgaWYgKHByb3RvY29sU3RyaW5nID09IGVudW1fY29uc3RhbnRfdmFsdWVz
W2NvbnN0YW50VmFsdWVzW2ldXSkKLSAgICAgICAgICAgIHJldHVybiAoSW5zcGVjdG9yOjpQcm90
b2NvbDo6RGVidWdnZXI6OlJlYXNvbiljb25zdGFudFZhbHVlc1tpXTsKKyAgICAgICAgICAgIHJl
dHVybiAoUHJvdG9jb2w6OkRlYnVnZ2VyOjpSZWFzb24pY29uc3RhbnRWYWx1ZXNbaV07CiAKICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tZW51
bS10eXBlLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24tcmVzdWx0
CmluZGV4IDNhMmMyMDUyODMwNDRlMDAwNmIzMzFlZTMxNWIwNDM3YTRmYTViZjkuLjk1MTE2YmM1
MGFiZjI3OTQwNjQ1OTA3MTBmY2QzZTI0NmJmMGM1OGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0
aW9uLWVudW0tdHlwZS5qc29uLXJlc3VsdAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUu
anNvbi1yZXN1bHQKQEAgLTY5LDcgKzY5LDcgQEAgSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURv
bWFpbigiUnVudGltZSIsIG51bGwpOwogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVf
RElTUEFUQ0hFUlMpCiAKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgorI2luY2x1ZGUg
IlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3Rv
ckZyb250ZW5kUm91dGVyLmg+CiAKQEAgLTEyNSwxMSArMTI1LDE0IEBAIHByaXZhdGU6CiAKICNp
bmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx0dXBsZT4KKyNpbmNsdWRl
IDx3dGYvRXhwZWN0ZWQuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKLXR5cGVkZWYg
U3RyaW5nIEVycm9yU3RyaW5nOworCiAKIAogCkBAIC0xNzAsOSArMTczLDcgQEAgdHlwZWRlZiBT
dHJpbmcgRXJyb3JTdHJpbmc7CiAjaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgog
CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNp
bmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5o
PgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogI2lmIEVOQUJMRShJTlNQRUNUT1Jf
QUxURVJOQVRFX0RJU1BBVENIRVJTKQogI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlz
cGF0Y2hlcnMuaCIKQEAgLTIyMCw2ICsyMjEsNyBAQCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAog
I2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDx3dGYvSlNPTlZhbHVl
cy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKQEAgLTI2Myw3ICsyNjUsNiBAQCBjbGFz
cyBGcm9udGVuZFJvdXRlcjsKICNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgog
CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBA
IC0zMDQsNyArMzA1LDkgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiAjcHJhZ21hIG9uY2UKIAog
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KLSNpbmNs
dWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5j
bHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAK
IG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC0zNjIsOSArMzY1LDkgQEAgT3B0aW9uYWw8UHJv
dG9jb2xFbnVtVHlwZT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYpOwog
CiAvLyBFbnVtcyBpbiB0aGUgJ1J1bnRpbWUnIERvbWFpbgogdGVtcGxhdGU8PgotT3B0aW9uYWw8
SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHM+IHBhcnNlRW51bVZhbHVl
RnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpGYXJtQW5pbWFscz4oY29u
c3QgU3RyaW5nJik7CitPcHRpb25hbDxQcm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHM+IHBh
cnNlRW51bVZhbHVlRnJvbVN0cmluZzxQcm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHM+KGNv
bnN0IFN0cmluZyYpOwogdGVtcGxhdGU8PgotT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6
UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFscz4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlR3b0xlZ2dlZEFuaW1hbHM+KGNvbnN0IFN0cmluZyYp
OworT3B0aW9uYWw8UHJvdG9jb2w6OlJ1bnRpbWU6OlR3b0xlZ2dlZEFuaW1hbHM+IHBhcnNlRW51
bVZhbHVlRnJvbVN0cmluZzxQcm90b2NvbDo6UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFscz4oY29u
c3QgU3RyaW5nJik7CiAKIH0gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCiAKQEAgLTQxOCw4ICs0
MjEsNyBAQCBzdHJ1Y3QgRGVmYXVsdEhhc2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6
VHdvTGVnZ2VkQW5pbWFscz4gOiBJbnRIYXNoPElucwogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKIAotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5o
PgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9u
cy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtNDQ0LDMzICs0NDYsMzMgQEAgU3Ry
aW5nIGdldEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKSB7CiAvLyBFbnVtcyBpbiB0aGUgJ1J1
bnRpbWUnIERvbWFpbgogCiB0ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29s
OjpSdW50aW1lOjpGYXJtQW5pbWFscz4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkZhcm1BbmltYWxzPihjb25zdCBTdHJpbmcmIHByb3RvY29s
U3RyaW5nKQorT3B0aW9uYWw8UHJvdG9jb2w6OlJ1bnRpbWU6OkZhcm1BbmltYWxzPiBwYXJzZUVu
dW1WYWx1ZUZyb21TdHJpbmc8UHJvdG9jb2w6OlJ1bnRpbWU6OkZhcm1BbmltYWxzPihjb25zdCBT
dHJpbmcmIHByb3RvY29sU3RyaW5nKQogewogICAgIHN0YXRpYyBjb25zdCBzaXplX3QgY29uc3Rh
bnRWYWx1ZXNbXSA9IHsKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50
aW1lOjpGYXJtQW5pbWFsczo6UGlncywKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3Rv
Y29sOjpSdW50aW1lOjpGYXJtQW5pbWFsczo6Q293cywKLSAgICAgICAgKHNpemVfdClJbnNwZWN0
b3I6OlByb3RvY29sOjpSdW50aW1lOjpGYXJtQW5pbWFsczo6Q2F0cywKLSAgICAgICAgKHNpemVf
dClJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpGYXJtQW5pbWFsczo6SGVucywKKyAgICAg
ICAgKHNpemVfdClQcm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHM6OlBpZ3MsCisgICAgICAg
IChzaXplX3QpUHJvdG9jb2w6OlJ1bnRpbWU6OkZhcm1BbmltYWxzOjpDb3dzLAorICAgICAgICAo
c2l6ZV90KVByb3RvY29sOjpSdW50aW1lOjpGYXJtQW5pbWFsczo6Q2F0cywKKyAgICAgICAgKHNp
emVfdClQcm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHM6OkhlbnMsCiAgICAgfTsKICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IDQ7ICsraSkKICAgICAgICAgaWYgKHByb3RvY29sU3RyaW5n
ID09IGVudW1fY29uc3RhbnRfdmFsdWVzW2NvbnN0YW50VmFsdWVzW2ldXSkKLSAgICAgICAgICAg
IHJldHVybiAoSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHMpY29uc3Rh
bnRWYWx1ZXNbaV07CisgICAgICAgICAgICByZXR1cm4gKFByb3RvY29sOjpSdW50aW1lOjpGYXJt
QW5pbWFscyljb25zdGFudFZhbHVlc1tpXTsKIAogICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiB9
CiAKIHRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlR3
b0xlZ2dlZEFuaW1hbHM+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpSdW50aW1lOjpUd29MZWdnZWRBbmltYWxzPihjb25zdCBTdHJpbmcmIHByb3RvY29sU3Ry
aW5nKQorT3B0aW9uYWw8UHJvdG9jb2w6OlJ1bnRpbWU6OlR3b0xlZ2dlZEFuaW1hbHM+IHBhcnNl
RW51bVZhbHVlRnJvbVN0cmluZzxQcm90b2NvbDo6UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFscz4o
Y29uc3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKIHsKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90
IGNvbnN0YW50VmFsdWVzW10gPSB7Ci0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2Nv
bDo6UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFsczo6RHVja3MsCi0gICAgICAgIChzaXplX3QpSW5z
cGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFsczo6SGVucywKLSAgICAg
ICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpUd29MZWdnZWRBbmltYWxz
OjpDcm93cywKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpU
d29MZWdnZWRBbmltYWxzOjpGbGFtaW5nb3MsCisgICAgICAgIChzaXplX3QpUHJvdG9jb2w6OlJ1
bnRpbWU6OlR3b0xlZ2dlZEFuaW1hbHM6OkR1Y2tzLAorICAgICAgICAoc2l6ZV90KVByb3RvY29s
OjpSdW50aW1lOjpUd29MZWdnZWRBbmltYWxzOjpIZW5zLAorICAgICAgICAoc2l6ZV90KVByb3Rv
Y29sOjpSdW50aW1lOjpUd29MZWdnZWRBbmltYWxzOjpDcm93cywKKyAgICAgICAgKHNpemVfdClQ
cm90b2NvbDo6UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFsczo6RmxhbWluZ29zLAogICAgIH07CiAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCA0OyArK2kpCiAgICAgICAgIGlmIChwcm90b2NvbFN0
cmluZyA9PSBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb25zdGFudFZhbHVlc1tpXV0pCi0gICAgICAg
ICAgICByZXR1cm4gKEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlR3b0xlZ2dlZEFuaW1h
bHMpY29uc3RhbnRWYWx1ZXNbaV07CisgICAgICAgICAgICByZXR1cm4gKFByb3RvY29sOjpSdW50
aW1lOjpUd29MZWdnZWRBbmltYWxzKWNvbnN0YW50VmFsdWVzW2ldOwogCiAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpz
b24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbi1yZXN1bHQKaW5kZXgg
MzI4ZmVkMjNkYzRjYTdmMTg4NTkwYjYzNDRkNWJmN2U0NzNkZGMwMy4uYmE5ZjE3YzYyNTBkY2Uw
NjhjZjk0NjU1OTQ3MGRkNDViNjE3NzQwNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tb2Jq
ZWN0LXR5cGUuanNvbi1yZXN1bHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNv
bi1yZXN1bHQKQEAgLTcwLDcgKzcwLDcgQEAgSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFp
bigiRGF0YWJhc2UiLCBudWxsKTsKIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJ
U1BBVENIRVJTKQogCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKKyNpbmNsdWRlICJU
ZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXIuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JG
cm9udGVuZFJvdXRlci5oPgogCkBAIC0xMjYsMTEgKzEyNiwxNCBAQCBwcml2YXRlOgogCiAjaW5j
bHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0lu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8dHVwbGU+CisjaW5jbHVkZSA8
d3RmL0V4cGVjdGVkLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCi10eXBlZGVmIFN0
cmluZyBFcnJvclN0cmluZzsKKwogCiAKIApAQCAtMTcxLDkgKzE3NCw3IEBAIHR5cGVkZWYgU3Ry
aW5nIEVycm9yU3RyaW5nOwogI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKIAog
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5j
bHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4K
LSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FM
VEVSTkFURV9ESVNQQVRDSEVSUykKICNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3Bh
dGNoZXJzLmgiCkBAIC0yMjEsNiArMjIyLDcgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKICNp
bmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMu
aD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CkBAIC0yNjQsNyArMjY2LDYgQEAgY2xhc3Mg
RnJvbnRlbmRSb3V0ZXI7CiAjaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKIAog
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5j
bHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAt
MzA1LDcgKzMwNiw5IEBAIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogI3ByYWdtYSBvbmNlCiAKICNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+Ci0jaW5jbHVk
ZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1
ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBu
YW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtMzMzLDcgKzMzNiw3IEBAIGNsYXNzIFBhcmFtZXRl
ckJ1bmRsZTsKIAogLy8gVHlwZWRlZnMuCiBuYW1lc3BhY2UgRGF0YWJhc2UgewotdXNpbmcgRXJy
b3JMaXN0ID0gSlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJy
b3I+OwordXNpbmcgRXJyb3JMaXN0ID0gSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6RGF0YWJhc2U6
OkVycm9yPjsKIH0gLy8gRGF0YWJhc2UKIC8vIEVuZCBvZiB0eXBlZGVmcy4KIApAQCAtMzUxLDcg
KzM1NCw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFN0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1
ZShUIGVudW1WYWx1ZSkKIG5hbWVzcGFjZSBEYXRhYmFzZSB7CiAKIC8qIERhdGFiYXNlIGVycm9y
LiAqLwotY2xhc3MgRXJyb3IgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7CitjbGFzcyBFcnJv
ciBmaW5hbCA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKIHB1YmxpYzoKICAgICBlbnVtIHsK
ICAgICAgICAgTm9GaWVsZHNTZXQgPSAwLApAQCAtMzc4LDE3ICszODEsMTcgQEAgcHVibGljOgog
ICAgICAgICBmcmllbmQgY2xhc3MgRXJyb3I7CiAgICAgcHVibGljOgogCi0gICAgICAgIEJ1aWxk
ZXI8U1RBVEUgfCBNZXNzYWdlU2V0PiYgc2V0TWVzc2FnZShjb25zdCBTdHJpbmcmIHZhbHVlKQor
ICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTWVzc2FnZVNldD4mIHNldE1lc3NhZ2UoY29uc3QgU3Ry
aW5nJiBpbl9tZXNzYWdlKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCgh
KFNUQVRFICYgTWVzc2FnZVNldCksIHByb3BlcnR5X21lc3NhZ2VfYWxyZWFkeV9zZXQpOwotICAg
ICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibWVzc2FnZSJfcywgdmFsdWUpOworICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibWVzc2FnZSJfcywgaW5fbWVzc2FnZSk7CiAgICAg
ICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE1lc3NhZ2VTZXQ+KCk7CiAgICAgICAgIH0KIAotICAg
ICAgICBCdWlsZGVyPFNUQVRFIHwgQ29kZVNldD4mIHNldENvZGUoaW50IHZhbHVlKQorICAgICAg
ICBCdWlsZGVyPFNUQVRFIHwgQ29kZVNldD4mIHNldENvZGUoaW50IGluX2NvZGUpCiAgICAgICAg
IHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBDb2RlU2V0KSwgcHJvcGVy
dHlfY29kZV9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0SW50ZWdlcigi
Y29kZSJfcywgdmFsdWUpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldEludGVnZXIoImNvZGUi
X3MsIGluX2NvZGUpOwogICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxDb2RlU2V0PigpOwog
ICAgICAgICB9CiAKQEAgLTQyNCwxMyArNDI3LDE0IEBAIGVudW0gY2xhc3MgTW91c2VCdXR0b24g
ewogICAgIFJpZ2h0ID0gMywKIH07IC8vIGVudW0gY2xhc3MgTW91c2VCdXR0b24KIAotY2xhc3Mg
T3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGUgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7CitjbGFz
cyBPcHRpb25hbFBhcmFtZXRlckJ1bmRsZSBmaW5hbCA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNl
IHsKIHB1YmxpYzoKICAgICAvLyBOYW1lZCBhZnRlciBwcm9wZXJ0eSBuYW1lICdkaXJlY3Rpb25h
bGl0eScgd2hpbGUgZ2VuZXJhdGluZyBPcHRpb25hbFBhcmFtZXRlckJ1bmRsZS4KICAgICBlbnVt
IGNsYXNzIERpcmVjdGlvbmFsaXR5IHsKICAgICAgICAgTFRSID0gNCwKICAgICAgICAgUlRMID0g
NSwKICAgICB9OyAvLyBlbnVtIGNsYXNzIERpcmVjdGlvbmFsaXR5CisKICAgICBlbnVtIHsKICAg
ICAgICAgTm9GaWVsZHNTZXQgPSAwLAogICAgICAgICBBbGxGaWVsZHNTZXQgPSAwCkBAIC00NzUs
NTkgKzQ3OSw2MCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0
PihKU09OOjpPYmplY3Q6OmNyZWF0ZSgpKTsKICAgICB9CiAKLSAgICB2b2lkIHNldENvbHVtbk5h
bWVzKFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+IHZhbHVlKQorICAgIHZvaWQgc2V0Q29s
dW1uTmFtZXMoUmVmPEpTT046OkFycmF5T2Y8U3RyaW5nPj4mJiBpbl9vcHRfY29sdW1uTmFtZXMp
CiAgICAgewotICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXRBcnJheSgiY29sdW1uTmFtZXMi
X3MsIFdURk1vdmUodmFsdWUpKTsKKyAgICAgICAgSlNPTjo6T2JqZWN0QmFzZTo6c2V0QXJyYXko
ImNvbHVtbk5hbWVzIl9zLCBXVEZNb3ZlKGluX29wdF9jb2x1bW5OYW1lcykpOwogICAgIH0KIAot
ICAgIHZvaWQgc2V0QnV0dG9ucyhSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpEYXRhYmFzZTo6TW91c2VCdXR0b24+PiB2YWx1ZSkKKyAgICB2b2lkIHNldEJ1dHRvbnMo
UmVmPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbj4+JiYgaW5f
b3B0X2J1dHRvbnMpCiAgICAgewotICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXRBcnJheSgi
YnV0dG9ucyJfcywgV1RGTW92ZSh2YWx1ZSkpOworICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpz
ZXRBcnJheSgiYnV0dG9ucyJfcywgV1RGTW92ZShpbl9vcHRfYnV0dG9ucykpOwogICAgIH0KIAot
ICAgIHZvaWQgc2V0RGlyZWN0aW9uYWxpdHkoRGlyZWN0aW9uYWxpdHkgdmFsdWUpCisgICAgdm9p
ZCBzZXREaXJlY3Rpb25hbGl0eShEaXJlY3Rpb25hbGl0eSBpbl9vcHRfZGlyZWN0aW9uYWxpdHkp
CiAgICAgewotICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXRTdHJpbmcoImRpcmVjdGlvbmFs
aXR5Il9zLCBJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50
VmFsdWUodmFsdWUpKTsKKyAgICAgICAgSlNPTjo6T2JqZWN0QmFzZTo6c2V0U3RyaW5nKCJkaXJl
Y3Rpb25hbGl0eSJfcywgUHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1
ZShpbl9vcHRfZGlyZWN0aW9uYWxpdHkpKTsKICAgICB9CiAKLSAgICB2b2lkIHNldE5vdGVzKGNv
bnN0IFN0cmluZyYgdmFsdWUpCisgICAgdm9pZCBzZXROb3Rlcyhjb25zdCBTdHJpbmcmIGluX29w
dF9ub3RlcykKICAgICB7Ci0gICAgICAgIEpTT046Ok9iamVjdEJhc2U6OnNldFN0cmluZygibm90
ZXMiX3MsIHZhbHVlKTsKKyAgICAgICAgSlNPTjo6T2JqZWN0QmFzZTo6c2V0U3RyaW5nKCJub3Rl
cyJfcywgaW5fb3B0X25vdGVzKTsKICAgICB9CiAKLSAgICB2b2lkIHNldFRpbWVzdGFtcChkb3Vi
bGUgdmFsdWUpCisgICAgdm9pZCBzZXRUaW1lc3RhbXAoZG91YmxlIGluX29wdF90aW1lc3RhbXAp
CiAgICAgewotICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXREb3VibGUoInRpbWVzdGFtcCJf
cywgdmFsdWUpOworICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXREb3VibGUoInRpbWVzdGFt
cCJfcywgaW5fb3B0X3RpbWVzdGFtcCk7CiAgICAgfQogCi0gICAgdm9pZCBzZXRWYWx1ZXMoUmVm
UHRyPEpTT046Ok9iamVjdD4gdmFsdWUpCisgICAgdm9pZCBzZXRWYWx1ZXMoUmVmPEpTT046Ok9i
amVjdD4mJiBpbl9vcHRfdmFsdWVzKQogICAgIHsKLSAgICAgICAgSlNPTjo6T2JqZWN0QmFzZTo6
c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIFdURk1vdmUodmFsdWUpKTsKKyAgICAgICAgSlNPTjo6T2Jq
ZWN0QmFzZTo6c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIFdURk1vdmUoaW5fb3B0X3ZhbHVlcykpOwog
ICAgIH0KIAotICAgIHZvaWQgc2V0UGF5bG9hZChSZWZQdHI8SlNPTjo6VmFsdWU+IHZhbHVlKQor
ICAgIHZvaWQgc2V0UGF5bG9hZChSZWY8SlNPTjo6VmFsdWU+JiYgaW5fb3B0X3BheWxvYWQpCiAg
ICAgewotICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXRWYWx1ZSgicGF5bG9hZCJfcywgV1RG
TW92ZSh2YWx1ZSkpOworICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXRWYWx1ZSgicGF5bG9h
ZCJfcywgV1RGTW92ZShpbl9vcHRfcGF5bG9hZCkpOwogICAgIH0KIAotICAgIHZvaWQgc2V0RXJy
b3IoUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4gdmFsdWUpCisg
ICAgdm9pZCBzZXRFcnJvcihSZWY8UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4mJiBpbl9vcHRf
ZXJyb3IpCiAgICAgewotICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXRPYmplY3QoImVycm9y
Il9zLCBXVEZNb3ZlKHZhbHVlKSk7CisgICAgICAgIEpTT046Ok9iamVjdEJhc2U6OnNldE9iamVj
dCgiZXJyb3IiX3MsIFdURk1vdmUoaW5fb3B0X2Vycm9yKSk7CiAgICAgfQogCi0gICAgdm9pZCBz
ZXRFcnJvckxpc3QoUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvckxp
c3Q+IHZhbHVlKQorICAgIHZvaWQgc2V0RXJyb3JMaXN0KFJlZjxQcm90b2NvbDo6RGF0YWJhc2U6
OkVycm9yTGlzdD4mJiBpbl9vcHRfZXJyb3JMaXN0KQogICAgIHsKLSAgICAgICAgSlNPTjo6T2Jq
ZWN0QmFzZTo6c2V0QXJyYXkoImVycm9yTGlzdCJfcywgV1RGTW92ZSh2YWx1ZSkpOworICAgICAg
ICBKU09OOjpPYmplY3RCYXNlOjpzZXRBcnJheSgiZXJyb3JMaXN0Il9zLCBXVEZNb3ZlKGluX29w
dF9lcnJvckxpc3QpKTsKICAgICB9CiB9OwogCi1jbGFzcyBQYXJhbWV0ZXJCdW5kbGUgOiBwdWJs
aWMgSlNPTjo6T2JqZWN0QmFzZSB7CitjbGFzcyBQYXJhbWV0ZXJCdW5kbGUgZmluYWwgOiBwdWJs
aWMgSlNPTjo6T2JqZWN0QmFzZSB7CiBwdWJsaWM6CiAgICAgLy8gTmFtZWQgYWZ0ZXIgcHJvcGVy
dHkgbmFtZSAnZGlyZWN0aW9uYWxpdHknIHdoaWxlIGdlbmVyYXRpbmcgUGFyYW1ldGVyQnVuZGxl
LgogICAgIGVudW0gY2xhc3MgRGlyZWN0aW9uYWxpdHkgewogICAgICAgICBMVFIgPSA0LAogICAg
ICAgICBSVEwgPSA1LAogICAgIH07IC8vIGVudW0gY2xhc3MgRGlyZWN0aW9uYWxpdHkKKwogICAg
IGVudW0gewogICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCiAgICAgICAgIENvbHVtbk5hbWVzU2V0
ID0gMSA8PCAwLApAQCAtNTYwLDY2ICs1NjUsNjYgQEAgcHVibGljOgogICAgICAgICBmcmllbmQg
Y2xhc3MgUGFyYW1ldGVyQnVuZGxlOwogICAgIHB1YmxpYzoKIAotICAgICAgICBCdWlsZGVyPFNU
QVRFIHwgQ29sdW1uTmFtZXNTZXQ+JiBzZXRDb2x1bW5OYW1lcyhSZWZQdHI8SlNPTjo6QXJyYXlP
ZjxTdHJpbmc+PiB2YWx1ZSkKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IENvbHVtbk5hbWVzU2V0
PiYgc2V0Q29sdW1uTmFtZXMoUmVmPEpTT046OkFycmF5T2Y8U3RyaW5nPj4mJiBpbl9jb2x1bW5O
YW1lcykKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIENv
bHVtbk5hbWVzU2V0KSwgcHJvcGVydHlfY29sdW1uTmFtZXNfYWxyZWFkeV9zZXQpOwotICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgdmFsdWUpOworICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgV1RGTW92ZShpbl9jb2x1
bW5OYW1lcykpOwogICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxDb2x1bW5OYW1lc1NldD4o
KTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBCdXR0b25zU2V0PiYgc2V0
QnV0dG9ucyhSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFz
ZTo6TW91c2VCdXR0b24+PiB2YWx1ZSkKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IEJ1dHRvbnNT
ZXQ+JiBzZXRCdXR0b25zKFJlZjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpEYXRhYmFzZTo6TW91
c2VCdXR0b24+PiYmIGluX2J1dHRvbnMpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKCEoU1RBVEUgJiBCdXR0b25zU2V0KSwgcHJvcGVydHlfYnV0dG9uc19hbHJlYWR5X3Nl
dCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0QXJyYXkoImJ1dHRvbnMiX3MsIHZhbHVlKTsK
KyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRBcnJheSgiYnV0dG9ucyJfcywgV1RGTW92ZShpbl9i
dXR0b25zKSk7CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEJ1dHRvbnNTZXQ+KCk7CiAg
ICAgICAgIH0KIAotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgRGlyZWN0aW9uYWxpdHlTZXQ+JiBz
ZXREaXJlY3Rpb25hbGl0eShEaXJlY3Rpb25hbGl0eSB2YWx1ZSkKKyAgICAgICAgQnVpbGRlcjxT
VEFURSB8IERpcmVjdGlvbmFsaXR5U2V0PiYgc2V0RGlyZWN0aW9uYWxpdHkoRGlyZWN0aW9uYWxp
dHkgaW5fZGlyZWN0aW9uYWxpdHkpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKCEoU1RBVEUgJiBEaXJlY3Rpb25hbGl0eVNldCksIHByb3BlcnR5X2RpcmVjdGlvbmFsaXR5
X2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoImRpcmVjdGlv
bmFsaXR5Il9zLCBJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0
YW50VmFsdWUodmFsdWUpKTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoImRpcmVj
dGlvbmFsaXR5Il9zLCBQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVl
KGluX2RpcmVjdGlvbmFsaXR5KSk7CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPERpcmVj
dGlvbmFsaXR5U2V0PigpOwogICAgICAgICB9CiAKLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IE5v
dGVzU2V0PiYgc2V0Tm90ZXMoY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICAgICAgQnVpbGRlcjxT
VEFURSB8IE5vdGVzU2V0PiYgc2V0Tm90ZXMoY29uc3QgU3RyaW5nJiBpbl9ub3RlcykKICAgICAg
ICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE5vdGVzU2V0KSwgcHJv
cGVydHlfbm90ZXNfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmlu
Zygibm90ZXMiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm5v
dGVzIl9zLCBpbl9ub3Rlcyk7CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE5vdGVzU2V0
PigpOwogICAgICAgICB9CiAKLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IFRpbWVzdGFtcFNldD4m
IHNldFRpbWVzdGFtcChkb3VibGUgdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBUaW1l
c3RhbXBTZXQ+JiBzZXRUaW1lc3RhbXAoZG91YmxlIGluX3RpbWVzdGFtcCkKICAgICAgICAgewog
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFRpbWVzdGFtcFNldCksIHByb3Bl
cnR5X3RpbWVzdGFtcF9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0RG91
YmxlKCJ0aW1lc3RhbXAiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXREb3Vi
bGUoInRpbWVzdGFtcCJfcywgaW5fdGltZXN0YW1wKTsKICAgICAgICAgICAgIHJldHVybiBjYXN0
U3RhdGU8VGltZXN0YW1wU2V0PigpOwogICAgICAgICB9CiAKLSAgICAgICAgQnVpbGRlcjxTVEFU
RSB8IFZhbHVlc1NldD4mIHNldFZhbHVlcyhSZWZQdHI8SlNPTjo6T2JqZWN0PiB2YWx1ZSkKKyAg
ICAgICAgQnVpbGRlcjxTVEFURSB8IFZhbHVlc1NldD4mIHNldFZhbHVlcyhSZWY8SlNPTjo6T2Jq
ZWN0PiYmIGluX3ZhbHVlcykKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
IShTVEFURSAmIFZhbHVlc1NldCksIHByb3BlcnR5X3ZhbHVlc19hbHJlYWR5X3NldCk7Ci0gICAg
ICAgICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIHZhbHVlKTsKKyAgICAgICAg
ICAgIG1fcmVzdWx0LT5zZXRPYmplY3QoInZhbHVlcyJfcywgV1RGTW92ZShpbl92YWx1ZXMpKTsK
ICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VmFsdWVzU2V0PigpOwogICAgICAgICB9CiAK
LSAgICAgICAgQnVpbGRlcjxTVEFURSB8IFBheWxvYWRTZXQ+JiBzZXRQYXlsb2FkKFJlZlB0cjxK
U09OOjpWYWx1ZT4gdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBQYXlsb2FkU2V0PiYg
c2V0UGF5bG9hZChSZWY8SlNPTjo6VmFsdWU+JiYgaW5fcGF5bG9hZCkKICAgICAgICAgewogICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFBheWxvYWRTZXQpLCBwcm9wZXJ0eV9w
YXlsb2FkX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRWYWx1ZSgicGF5
bG9hZCJfcywgdmFsdWUpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldFZhbHVlKCJwYXlsb2Fk
Il9zLCBXVEZNb3ZlKGluX3BheWxvYWQpKTsKICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8
UGF5bG9hZFNldD4oKTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBFcnJv
clNldD4mIHNldEVycm9yKFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJy
b3I+IHZhbHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRFIHwgRXJyb3JTZXQ+JiBzZXRFcnJvcihS
ZWY8UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4mJiBpbl9lcnJvcikKICAgICAgICAgewogICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEVycm9yU2V0KSwgcHJvcGVydHlfZXJy
b3JfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldE9iamVjdCgiZXJyb3Ii
X3MsIHZhbHVlKTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRPYmplY3QoImVycm9yIl9zLCBX
VEZNb3ZlKGluX2Vycm9yKSk7CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEVycm9yU2V0
PigpOwogICAgICAgICB9CiAKLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IEVycm9yTGlzdFNldD4m
IHNldEVycm9yTGlzdChSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9y
TGlzdD4gdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBFcnJvckxpc3RTZXQ+JiBzZXRF
cnJvckxpc3QoUmVmPFByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3JMaXN0PiYmIGluX2Vycm9yTGlz
dCkKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEVycm9y
TGlzdFNldCksIHByb3BlcnR5X2Vycm9yTGlzdF9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBt
X3Jlc3VsdC0+c2V0QXJyYXkoImVycm9yTGlzdCJfcywgdmFsdWUpOworICAgICAgICAgICAgbV9y
ZXN1bHQtPnNldEFycmF5KCJlcnJvckxpc3QiX3MsIFdURk1vdmUoaW5fZXJyb3JMaXN0KSk7CiAg
ICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEVycm9yTGlzdFNldD4oKTsKICAgICAgICAgfQog
CkBAIC02NTUsNyArNjYwLDcgQEAgcHVibGljOgogfTsKIAogLyogQ29uZmxpY3RlZCBuYW1lcyBt
YXkgY2F1c2UgZ2VuZXJhdGVkIGdldHRlcnMvc2V0dGVycyB0byBjbGFzaCB3aXRoIGJ1aWx0LWlu
IEluc3BlY3Rvck9iamVjdCBtZXRob2RzLiAqLwotY2xhc3MgT2JqZWN0V2l0aFByb3BlcnR5TmFt
ZUNvbmZsaWN0cyA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKK2NsYXNzIE9iamVjdFdpdGhQ
cm9wZXJ0eU5hbWVDb25mbGljdHMgZmluYWwgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7CiBw
dWJsaWM6CiAgICAgZW51bSB7CiAgICAgICAgIE5vRmllbGRzU2V0ID0gMCwKQEAgLTY4NSwzOCAr
NjkwLDM4IEBAIHB1YmxpYzoKICAgICAgICAgZnJpZW5kIGNsYXNzIE9iamVjdFdpdGhQcm9wZXJ0
eU5hbWVDb25mbGljdHM7CiAgICAgcHVibGljOgogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBJ
bnRlZ2VyU2V0PiYgc2V0SW50ZWdlcihjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgICAgICBCdWls
ZGVyPFNUQVRFIHwgSW50ZWdlclNldD4mIHNldEludGVnZXIoY29uc3QgU3RyaW5nJiBpbl9pbnRl
Z2VyKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgSW50
ZWdlclNldCksIHByb3BlcnR5X2ludGVnZXJfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9y
ZXN1bHQtPnNldFN0cmluZygiaW50ZWdlciJfcywgdmFsdWUpOworICAgICAgICAgICAgbV9yZXN1
bHQtPnNldFN0cmluZygiaW50ZWdlciJfcywgaW5faW50ZWdlcik7CiAgICAgICAgICAgICByZXR1
cm4gY2FzdFN0YXRlPEludGVnZXJTZXQ+KCk7CiAgICAgICAgIH0KIAotICAgICAgICBCdWlsZGVy
PFNUQVRFIHwgQXJyYXlTZXQ+JiBzZXRBcnJheShjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgICAg
ICBCdWlsZGVyPFNUQVRFIHwgQXJyYXlTZXQ+JiBzZXRBcnJheShjb25zdCBTdHJpbmcmIGluX2Fy
cmF5KQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQXJy
YXlTZXQpLCBwcm9wZXJ0eV9hcnJheV9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3Vs
dC0+c2V0U3RyaW5nKCJhcnJheSJfcywgdmFsdWUpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNl
dFN0cmluZygiYXJyYXkiX3MsIGluX2FycmF5KTsKICAgICAgICAgICAgIHJldHVybiBjYXN0U3Rh
dGU8QXJyYXlTZXQ+KCk7CiAgICAgICAgIH0KIAotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgU3Ry
aW5nU2V0PiYgc2V0U3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCBTdHJpbmdTZXQ+JiBzZXRTdHJpbmcoY29uc3QgU3RyaW5nJiBpbl9zdHJpbmcpCiAg
ICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTdHJpbmdTZXQp
LCBwcm9wZXJ0eV9zdHJpbmdfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNl
dFN0cmluZygic3RyaW5nIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3Ry
aW5nKCJzdHJpbmciX3MsIGluX3N0cmluZyk7CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRl
PFN0cmluZ1NldD4oKTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBWYWx1
ZVNldD4mIHNldFZhbHVlKGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8U1RB
VEUgfCBWYWx1ZVNldD4mIHNldFZhbHVlKGNvbnN0IFN0cmluZyYgaW5fdmFsdWUpCiAgICAgICAg
IHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBWYWx1ZVNldCksIHByb3Bl
cnR5X3ZhbHVlX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmco
InZhbHVlIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ2YWx1
ZSJfcywgaW5fdmFsdWUpOwogICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxWYWx1ZVNldD4o
KTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBPYmplY3RTZXQ+JiBzZXRP
YmplY3QoY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IE9iamVj
dFNldD4mIHNldE9iamVjdChjb25zdCBTdHJpbmcmIGluX29iamVjdCkKICAgICAgICAgewogICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE9iamVjdFNldCksIHByb3BlcnR5X29i
amVjdF9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJvYmpl
Y3QiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm9iamVjdCJf
cywgaW5fb2JqZWN0KTsKICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8T2JqZWN0U2V0Pigp
OwogICAgICAgICB9CiAKQEAgLTc0NywxNyArNzUyLDY2IEBAIHB1YmxpYzoKICAgICB9CiB9Owog
CisvKiBBbiBvcGVuIG9iamVjdCB0aGF0IGRvZXNuJ3QgaGF2ZSBhbnkgcHJlZGVmaW5lZCBmaWVs
ZHMuICovCitjbGFzcyBEdW1teU9iamVjdCBmaW5hbCA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNl
IHsKK3B1YmxpYzoKKyAgICBlbnVtIHsKKyAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAorICAgICAg
ICBBbGxGaWVsZHNTZXQgPSAwCisgICAgfTsKKworICAgIHRlbXBsYXRlPGludCBTVEFURT4KKyAg
ICBjbGFzcyBCdWlsZGVyIHsKKyAgICBwcml2YXRlOgorICAgICAgICBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiBtX3Jlc3VsdDsKKworICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFU
RSB8IFNURVA+JiBjYXN0U3RhdGUoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gKnJl
aW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CisgICAgICAgIH0K
KworICAgICAgICBCdWlsZGVyKFJlZjwvKkR1bW15T2JqZWN0Ki9KU09OOjpPYmplY3Q+JiYgb2Jq
ZWN0KQorICAgICAgICAgICAgOiBtX3Jlc3VsdChXVEZNb3ZlKG9iamVjdCkpCisgICAgICAgIHsK
KyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVy
X2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOworICAgICAgICB9CisgICAgICAgIGZyaWVuZCBj
bGFzcyBEdW1teU9iamVjdDsKKyAgICBwdWJsaWM6CisKKyAgICAgICAgUmVmPER1bW15T2JqZWN0
PiByZWxlYXNlKCkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUg
PT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKKyAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKHNpemVvZihEdW1teU9iamVjdCkgPT0gc2l6ZW9mKEpTT046Ok9iamVjdCksIGNh
bm5vdF9jYXN0KTsKKworICAgICAgICAgICAgUmVmPEpTT046Ok9iamVjdD4ganNvblJlc3VsdCA9
IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7CisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFdU
Rk1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPER1bW15T2JqZWN0Pio+KCZqc29uUmVzdWx0KSk7
CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgfTsKKworICAgIC8q
CisgICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgorICAgICAqIFJlZjxEdW1teU9iamVjdD4g
cmVzdWx0ID0gRHVtbXlPYmplY3Q6OmNyZWF0ZSgpCisgICAgICogICAgIC5yZWxlYXNlKCk7Cisg
ICAgICovCisgICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCisgICAgewor
ICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSlNPTjo6T2JqZWN0OjpjcmVhdGUo
KSk7CisgICAgfQorfTsKKwogfSAvLyBEYXRhYmFzZQogCiBuYW1lc3BhY2UgVGVzdCB7CiAKLWNs
YXNzIFBhcmFtZXRlckJ1bmRsZSA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKK2NsYXNzIFBh
cmFtZXRlckJ1bmRsZSBmaW5hbCA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKIHB1YmxpYzoK
ICAgICAvLyBOYW1lZCBhZnRlciBwcm9wZXJ0eSBuYW1lICdkaXJlY3Rpb25hbGl0eScgd2hpbGUg
Z2VuZXJhdGluZyBQYXJhbWV0ZXJCdW5kbGUuCiAgICAgZW51bSBjbGFzcyBEaXJlY3Rpb25hbGl0
eSB7CiAgICAgICAgIExUUiA9IDQsCiAgICAgICAgIFJUTCA9IDUsCiAgICAgfTsgLy8gZW51bSBj
bGFzcyBEaXJlY3Rpb25hbGl0eQorCiAgICAgZW51bSB7CiAgICAgICAgIE5vRmllbGRzU2V0ID0g
MCwKICAgICAgICAgRGlyZWN0aW9uYWxpdHlTZXQgPSAxIDw8IDAsCkBAIC03ODksNTkgKzg0Myw1
OSBAQCBwdWJsaWM6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBQYXJhbWV0ZXJCdW5kbGU7CiAgICAg
cHVibGljOgogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBEaXJlY3Rpb25hbGl0eVNldD4mIHNl
dERpcmVjdGlvbmFsaXR5KERpcmVjdGlvbmFsaXR5IHZhbHVlKQorICAgICAgICBCdWlsZGVyPFNU
QVRFIHwgRGlyZWN0aW9uYWxpdHlTZXQ+JiBzZXREaXJlY3Rpb25hbGl0eShEaXJlY3Rpb25hbGl0
eSBpbl9kaXJlY3Rpb25hbGl0eSkKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoIShTVEFURSAmIERpcmVjdGlvbmFsaXR5U2V0KSwgcHJvcGVydHlfZGlyZWN0aW9uYWxpdHlf
YWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygiZGlyZWN0aW9u
YWxpdHkiX3MsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29uc3Rh
bnRWYWx1ZSh2YWx1ZSkpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygiZGlyZWN0
aW9uYWxpdHkiX3MsIFByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUo
aW5fZGlyZWN0aW9uYWxpdHkpKTsKICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8RGlyZWN0
aW9uYWxpdHlTZXQ+KCk7CiAgICAgICAgIH0KIAotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQnV0
dG9uc1NldD4mIHNldEJ1dHRvbnMoUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90
b2NvbDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9uPj4gdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8U1RB
VEUgfCBCdXR0b25zU2V0PiYgc2V0QnV0dG9ucyhSZWY8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6
RGF0YWJhc2U6Ok1vdXNlQnV0dG9uPj4mJiBpbl9idXR0b25zKQogICAgICAgICB7CiAgICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQnV0dG9uc1NldCksIHByb3BlcnR5X2J1dHRv
bnNfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldEFycmF5KCJidXR0b25z
Il9zLCB2YWx1ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0QXJyYXkoImJ1dHRvbnMiX3Ms
IFdURk1vdmUoaW5fYnV0dG9ucykpOwogICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxCdXR0
b25zU2V0PigpOwogICAgICAgICB9CiAKLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IENvbHVtbk5h
bWVzU2V0PiYgc2V0Q29sdW1uTmFtZXMoUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4gdmFs
dWUpCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDb2x1bW5OYW1lc1NldD4mIHNldENvbHVtbk5h
bWVzKFJlZjxKU09OOjpBcnJheU9mPFN0cmluZz4+JiYgaW5fY29sdW1uTmFtZXMpCiAgICAgICAg
IHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBDb2x1bW5OYW1lc1NldCks
IHByb3BlcnR5X2NvbHVtbk5hbWVzX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0
LT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIG1fcmVzdWx0
LT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIFdURk1vdmUoaW5fY29sdW1uTmFtZXMpKTsKICAg
ICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Q29sdW1uTmFtZXNTZXQ+KCk7CiAgICAgICAgIH0K
IAotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTm90ZXNTZXQ+JiBzZXROb3Rlcyhjb25zdCBTdHJp
bmcmIHZhbHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTm90ZXNTZXQ+JiBzZXROb3Rlcyhj
b25zdCBTdHJpbmcmIGluX25vdGVzKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FT
U0VSVCghKFNUQVRFICYgTm90ZXNTZXQpLCBwcm9wZXJ0eV9ub3Rlc19hbHJlYWR5X3NldCk7Ci0g
ICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJub3RlcyJfcywgdmFsdWUpOworICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibm90ZXMiX3MsIGluX25vdGVzKTsKICAgICAgICAg
ICAgIHJldHVybiBjYXN0U3RhdGU8Tm90ZXNTZXQ+KCk7CiAgICAgICAgIH0KIAotICAgICAgICBC
dWlsZGVyPFNUQVRFIHwgVGltZXN0YW1wU2V0PiYgc2V0VGltZXN0YW1wKGRvdWJsZSB2YWx1ZSkK
KyAgICAgICAgQnVpbGRlcjxTVEFURSB8IFRpbWVzdGFtcFNldD4mIHNldFRpbWVzdGFtcChkb3Vi
bGUgaW5fdGltZXN0YW1wKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCgh
KFNUQVRFICYgVGltZXN0YW1wU2V0KSwgcHJvcGVydHlfdGltZXN0YW1wX2FscmVhZHlfc2V0KTsK
LSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywgdmFsdWUpOwor
ICAgICAgICAgICAgbV9yZXN1bHQtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCBpbl90aW1lc3Rh
bXApOwogICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxUaW1lc3RhbXBTZXQ+KCk7CiAgICAg
ICAgIH0KIAotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVmFsdWVzU2V0PiYgc2V0VmFsdWVzKFJl
ZlB0cjxKU09OOjpPYmplY3Q+IHZhbHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVmFsdWVz
U2V0PiYgc2V0VmFsdWVzKFJlZjxKU09OOjpPYmplY3Q+JiYgaW5fdmFsdWVzKQogICAgICAgICB7
CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVmFsdWVzU2V0KSwgcHJvcGVy
dHlfdmFsdWVzX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRPYmplY3Qo
InZhbHVlcyJfcywgdmFsdWUpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldE9iamVjdCgidmFs
dWVzIl9zLCBXVEZNb3ZlKGluX3ZhbHVlcykpOwogICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0
ZTxWYWx1ZXNTZXQ+KCk7CiAgICAgICAgIH0KIAotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgUGF5
bG9hZFNldD4mIHNldFBheWxvYWQoUmVmUHRyPEpTT046OlZhbHVlPiB2YWx1ZSkKKyAgICAgICAg
QnVpbGRlcjxTVEFURSB8IFBheWxvYWRTZXQ+JiBzZXRQYXlsb2FkKFJlZjxKU09OOjpWYWx1ZT4m
JiBpbl9wYXlsb2FkKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNU
QVRFICYgUGF5bG9hZFNldCksIHByb3BlcnR5X3BheWxvYWRfYWxyZWFkeV9zZXQpOwotICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCB2YWx1ZSk7CisgICAgICAgICAg
ICBtX3Jlc3VsdC0+c2V0VmFsdWUoInBheWxvYWQiX3MsIFdURk1vdmUoaW5fcGF5bG9hZCkpOwog
ICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxQYXlsb2FkU2V0PigpOwogICAgICAgICB9CiAK
LSAgICAgICAgQnVpbGRlcjxTVEFURSB8IEVycm9yU2V0PiYgc2V0RXJyb3IoUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4gdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCBFcnJvclNldD4mIHNldEVycm9yKFJlZjxQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9y
PiYmIGluX2Vycm9yKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNU
QVRFICYgRXJyb3JTZXQpLCBwcm9wZXJ0eV9lcnJvcl9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAg
ICBtX3Jlc3VsdC0+c2V0T2JqZWN0KCJlcnJvciJfcywgdmFsdWUpOworICAgICAgICAgICAgbV9y
ZXN1bHQtPnNldE9iamVjdCgiZXJyb3IiX3MsIFdURk1vdmUoaW5fZXJyb3IpKTsKICAgICAgICAg
ICAgIHJldHVybiBjYXN0U3RhdGU8RXJyb3JTZXQ+KCk7CiAgICAgICAgIH0KIApAQCAtODg2LDE1
ICs5NDAsMTUgQEAgT3B0aW9uYWw8UHJvdG9jb2xFbnVtVHlwZT4gcGFyc2VFbnVtVmFsdWVGcm9t
U3RyaW5nKGNvbnN0IFN0cmluZyYpOwogCiAvLyBFbnVtcyBpbiB0aGUgJ0RhdGFiYXNlJyBEb21h
aW4KIHRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpN
b3VzZUJ1dHRvbj4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbj4oY29uc3QgU3RyaW5nJik7CitPcHRpb25hbDxQcm90b2Nv
bDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9uPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8UHJvdG9j
b2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbj4oY29uc3QgU3RyaW5nJik7CiB0ZW1wbGF0ZTw+Ci1P
cHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6T3B0aW9uYWxQYXJhbWV0ZXJC
dW5kbGU6OkRpcmVjdGlvbmFsaXR5PiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9y
OjpQcm90b2NvbDo6RGF0YWJhc2U6Ok9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25h
bGl0eT4oY29uc3QgU3RyaW5nJik7CitPcHRpb25hbDxQcm90b2NvbDo6RGF0YWJhc2U6Ok9wdGlv
bmFsUGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eT4gcGFyc2VFbnVtVmFsdWVGcm9tU3Ry
aW5nPFByb3RvY29sOjpEYXRhYmFzZTo6T3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlv
bmFsaXR5Pihjb25zdCBTdHJpbmcmKTsKIHRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRhdGFiYXNlOjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5PiBwYXJz
ZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlBhcmFt
ZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk+KGNvbnN0IFN0cmluZyYpOworT3B0aW9uYWw8UHJv
dG9jb2w6OkRhdGFiYXNlOjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5PiBwYXJzZUVu
dW1WYWx1ZUZyb21TdHJpbmc8UHJvdG9jb2w6OkRhdGFiYXNlOjpQYXJhbWV0ZXJCdW5kbGU6OkRp
cmVjdGlvbmFsaXR5Pihjb25zdCBTdHJpbmcmKTsKIAogLy8gRW51bXMgaW4gdGhlICdUZXN0JyBE
b21haW4KIHRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlBh
cmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJ
bnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5
Pihjb25zdCBTdHJpbmcmKTsKK09wdGlvbmFsPFByb3RvY29sOjpUZXN0OjpQYXJhbWV0ZXJCdW5k
bGU6OkRpcmVjdGlvbmFsaXR5PiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8UHJvdG9jb2w6OlRl
c3Q6OlBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk+KGNvbnN0IFN0cmluZyYpOwogCiB9
IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycwogCkBAIC05NDYsOCArMTAwMCw3IEBAIHN0cnVjdCBE
ZWZhdWx0SGFzaDxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6TW91c2VCdXR0b24+IDog
SW50SGFzaDxJbnNwZWN0CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGVzdFByb3Rv
Y29sT2JqZWN0cy5oIgogCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3Rm
L3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAKIG5hbWVzcGFj
ZSBJbnNwZWN0b3IgewogCkBAIC05NzEsNDUgKzEwMjQsNDUgQEAgU3RyaW5nIGdldEVudW1Db25z
dGFudFZhbHVlKGludCBjb2RlKSB7CiAvLyBFbnVtcyBpbiB0aGUgJ0RhdGFiYXNlJyBEb21haW4K
IAogdGVtcGxhdGU8PgotT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6Ok1v
dXNlQnV0dG9uPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6
RGF0YWJhc2U6Ok1vdXNlQnV0dG9uPihjb25zdCBTdHJpbmcmIHByb3RvY29sU3RyaW5nKQorT3B0
aW9uYWw8UHJvdG9jb2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbj4gcGFyc2VFbnVtVmFsdWVGcm9t
U3RyaW5nPFByb3RvY29sOjpEYXRhYmFzZTo6TW91c2VCdXR0b24+KGNvbnN0IFN0cmluZyYgcHJv
dG9jb2xTdHJpbmcpCiB7CiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBjb25zdGFudFZhbHVlc1td
ID0gewotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpNb3Vz
ZUJ1dHRvbjo6Tm9uZSwKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRh
YmFzZTo6TW91c2VCdXR0b246OkxlZnQsCi0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90
b2NvbDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9uOjpNaWRkbGUsCi0gICAgICAgIChzaXplX3QpSW5z
cGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9uOjpSaWdodCwKKyAgICAgICAg
KHNpemVfdClQcm90b2NvbDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9uOjpOb25lLAorICAgICAgICAo
c2l6ZV90KVByb3RvY29sOjpEYXRhYmFzZTo6TW91c2VCdXR0b246OkxlZnQsCisgICAgICAgIChz
aXplX3QpUHJvdG9jb2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbjo6TWlkZGxlLAorICAgICAgICAo
c2l6ZV90KVByb3RvY29sOjpEYXRhYmFzZTo6TW91c2VCdXR0b246OlJpZ2h0LAogICAgIH07CiAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCA0OyArK2kpCiAgICAgICAgIGlmIChwcm90b2NvbFN0
cmluZyA9PSBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb25zdGFudFZhbHVlc1tpXV0pCi0gICAgICAg
ICAgICByZXR1cm4gKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbilj
b25zdGFudFZhbHVlc1tpXTsKKyAgICAgICAgICAgIHJldHVybiAoUHJvdG9jb2w6OkRhdGFiYXNl
OjpNb3VzZUJ1dHRvbiljb25zdGFudFZhbHVlc1tpXTsKIAogICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CiB9CiAKIHRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFi
YXNlOjpPcHRpb25hbFBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk+IHBhcnNlRW51bVZh
bHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6T3B0aW9uYWxQYXJh
bWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5Pihjb25zdCBTdHJpbmcmIHByb3RvY29sU3RyaW5n
KQorT3B0aW9uYWw8UHJvdG9jb2w6OkRhdGFiYXNlOjpPcHRpb25hbFBhcmFtZXRlckJ1bmRsZTo6
RGlyZWN0aW9uYWxpdHk+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxQcm90b2NvbDo6RGF0YWJh
c2U6Ok9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eT4oY29uc3QgU3RyaW5n
JiBwcm90b2NvbFN0cmluZykKIHsKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNvbnN0YW50VmFs
dWVzW10gPSB7Ci0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6
Ok9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eTo6TFRSLAotICAgICAgICAo
c2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpPcHRpb25hbFBhcmFtZXRlckJ1
bmRsZTo6RGlyZWN0aW9uYWxpdHk6OlJUTCwKKyAgICAgICAgKHNpemVfdClQcm90b2NvbDo6RGF0
YWJhc2U6Ok9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eTo6TFRSLAorICAg
ICAgICAoc2l6ZV90KVByb3RvY29sOjpEYXRhYmFzZTo6T3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU6
OkRpcmVjdGlvbmFsaXR5OjpSVEwsCiAgICAgfTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IDI7ICsraSkKICAgICAgICAgaWYgKHByb3RvY29sU3RyaW5nID09IGVudW1fY29uc3RhbnRfdmFs
dWVzW2NvbnN0YW50VmFsdWVzW2ldXSkKLSAgICAgICAgICAgIHJldHVybiAoSW5zcGVjdG9yOjpQ
cm90b2NvbDo6RGF0YWJhc2U6Ok9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0
eSljb25zdGFudFZhbHVlc1tpXTsKKyAgICAgICAgICAgIHJldHVybiAoUHJvdG9jb2w6OkRhdGFi
YXNlOjpPcHRpb25hbFBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHkpY29uc3RhbnRWYWx1
ZXNbaV07CiAKICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQogCiB0ZW1wbGF0ZTw+Ci1PcHRp
b25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UGFyYW1ldGVyQnVuZGxlOjpEaXJl
Y3Rpb25hbGl0eT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRhdGFiYXNlOjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5Pihjb25zdCBTdHJpbmcm
IHByb3RvY29sU3RyaW5nKQorT3B0aW9uYWw8UHJvdG9jb2w6OkRhdGFiYXNlOjpQYXJhbWV0ZXJC
dW5kbGU6OkRpcmVjdGlvbmFsaXR5PiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8UHJvdG9jb2w6
OkRhdGFiYXNlOjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5Pihjb25zdCBTdHJpbmcm
IHByb3RvY29sU3RyaW5nKQogewogICAgIHN0YXRpYyBjb25zdCBzaXplX3QgY29uc3RhbnRWYWx1
ZXNbXSA9IHsKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6
UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eTo6TFRSLAotICAgICAgICAoc2l6ZV90KUlu
c3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFs
aXR5OjpSVEwsCisgICAgICAgIChzaXplX3QpUHJvdG9jb2w6OkRhdGFiYXNlOjpQYXJhbWV0ZXJC
dW5kbGU6OkRpcmVjdGlvbmFsaXR5OjpMVFIsCisgICAgICAgIChzaXplX3QpUHJvdG9jb2w6OkRh
dGFiYXNlOjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5OjpSVEwsCiAgICAgfTsKICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDI7ICsraSkKICAgICAgICAgaWYgKHByb3RvY29sU3Ry
aW5nID09IGVudW1fY29uc3RhbnRfdmFsdWVzW2NvbnN0YW50VmFsdWVzW2ldXSkKLSAgICAgICAg
ICAgIHJldHVybiAoSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlBhcmFtZXRlckJ1bmRs
ZTo6RGlyZWN0aW9uYWxpdHkpY29uc3RhbnRWYWx1ZXNbaV07CisgICAgICAgICAgICByZXR1cm4g
KFByb3RvY29sOjpEYXRhYmFzZTo6UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eSljb25z
dGFudFZhbHVlc1tpXTsKIAogICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiB9CkBAIC0xMDE3LDE1
ICsxMDcwLDE1IEBAIE9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQYXJh
bWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5PiBwYXJzZUVuCiAvLyBFbnVtcyBpbiB0aGUgJ1Rl
c3QnIERvbWFpbgogCiB0ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpU
ZXN0OjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5PiBwYXJzZUVudW1WYWx1ZUZyb21T
dHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rp
b25hbGl0eT4oY29uc3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKK09wdGlvbmFsPFByb3RvY29s
OjpUZXN0OjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5PiBwYXJzZUVudW1WYWx1ZUZy
b21TdHJpbmc8UHJvdG9jb2w6OlRlc3Q6OlBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk+
KGNvbnN0IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcpCiB7CiAgICAgc3RhdGljIGNvbnN0IHNpemVf
dCBjb25zdGFudFZhbHVlc1tdID0gewotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9j
b2w6OlRlc3Q6OlBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk6OkxUUiwKLSAgICAgICAg
KHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVj
dGlvbmFsaXR5OjpSVEwsCisgICAgICAgIChzaXplX3QpUHJvdG9jb2w6OlRlc3Q6OlBhcmFtZXRl
ckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk6OkxUUiwKKyAgICAgICAgKHNpemVfdClQcm90b2NvbDo6
VGVzdDo6UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eTo6UlRMLAogICAgIH07CiAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCAyOyArK2kpCiAgICAgICAgIGlmIChwcm90b2NvbFN0cmlu
ZyA9PSBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb25zdGFudFZhbHVlc1tpXV0pCi0gICAgICAgICAg
ICByZXR1cm4gKEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlBhcmFtZXRlckJ1bmRsZTo6RGly
ZWN0aW9uYWxpdHkpY29uc3RhbnRWYWx1ZXNbaV07CisgICAgICAgICAgICByZXR1cm4gKFByb3Rv
Y29sOjpUZXN0OjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5KWNvbnN0YW50VmFsdWVz
W2ldOwogCiAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLXJlcXVp
cmluZy1ydW50aW1lLWNhc3RzLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2Fz
dHMuanNvbi1yZXN1bHQKaW5kZXggMjZiNzUwYzY2YjIwMWIwZDRlY2JmMmYzNzQ4YWI5ZjQwMzA5
YTllYy4uNGRlMDRhYjRiNmQ5MWRjOTdmMDA2MzU5YThkNmM3NjgwZDkyZjM3YyAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVk
L3R5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbi1yZXN1bHQKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtcmVxdWly
aW5nLXJ1bnRpbWUtY2FzdHMuanNvbi1yZXN1bHQKQEAgLTY5LDcgKzY5LDcgQEAgSW5zcGVjdG9y
QmFja2VuZC5hY3RpdmF0ZURvbWFpbigiVGVzdCIsIG51bGwpOwogCiAjaWYgRU5BQkxFKElOU1BF
Q1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBl
cy5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgogI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CiAKQEAgLTEyNSwxMSArMTI1LDE0IEBA
IHByaXZhdGU6CiAKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx0
dXBsZT4KKyNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwu
aD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3Rv
ciB7CiAKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCiAKIAogCkBAIC0xNzAsOSArMTcz
LDcgQEAgdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiAjaW5jbHVkZSAiVGVzdEJhY2tlbmRE
aXNwYXRjaGVycy5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRl
bmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgogI2luY2x1ZGUgPHd0Zi9O
ZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogI2lmIEVO
QUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogI2luY2x1ZGUgIlRlc3RBbHRl
cm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKQEAgLTIyMCw2ICsyMjEsNyBAQCBuYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKIAogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRl
IDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKQEAgLTI2Myw3
ICsyNjUsNiBAQCBjbGFzcyBGcm9udGVuZFJvdXRlcjsKICNpbmNsdWRlICJUZXN0RnJvbnRlbmRE
aXNwYXRjaGVycy5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRl
bmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJ
bnNwZWN0b3IgewogCkBAIC0zMDQsNyArMzA1LDkgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiAj
cHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29s
VHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9KU09O
VmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC0zNDYsNyArMzQ5LDcg
QEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKFQgZW51
bVZhbHVlKQogbmFtZXNwYWNlIFRlc3QgewogCiAvKiBBIGR1bW15IHR5cGUgdGhhdCByZXF1aXJl
cyBydW50aW1lIGNhc3RzLCBhbmQgZm9yY2VzIG5vbi1wcmltaXRpdmUgcmVmZXJlbmNlZCB0eXBl
cyB0byBhbHNvIGVtaXQgcnVudGltZSBjYXN0IGhlbHBlcnMuICovCi1jbGFzcyBUeXBlTmVlZGlu
Z0Nhc3QgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7CitjbGFzcyBUeXBlTmVlZGluZ0Nhc3Qg
ZmluYWwgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7CiBwdWJsaWM6CiAgICAgZW51bSB7CiAg
ICAgICAgIE5vRmllbGRzU2V0ID0gMCwKQEAgLTM3NiwzOCArMzc5LDM4IEBAIHB1YmxpYzoKICAg
ICAgICAgZnJpZW5kIGNsYXNzIFR5cGVOZWVkaW5nQ2FzdDsKICAgICBwdWJsaWM6CiAKLSAgICAg
ICAgQnVpbGRlcjxTVEFURSB8IFN0cmluZ1NldD4mIHNldFN0cmluZyhjb25zdCBTdHJpbmcmIHZh
bHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRFIHwgU3RyaW5nU2V0PiYgc2V0U3RyaW5nKGNvbnN0
IFN0cmluZyYgaW5fc3RyaW5nKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VS
VCghKFNUQVRFICYgU3RyaW5nU2V0KSwgcHJvcGVydHlfc3RyaW5nX2FscmVhZHlfc2V0KTsKLSAg
ICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInN0cmluZyJfcywgdmFsdWUpOworICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygic3RyaW5nIl9zLCBpbl9zdHJpbmcpOwogICAgICAg
ICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxTdHJpbmdTZXQ+KCk7CiAgICAgICAgIH0KIAotICAgICAg
ICBCdWlsZGVyPFNUQVRFIHwgTnVtYmVyU2V0PiYgc2V0TnVtYmVyKGludCB2YWx1ZSkKKyAgICAg
ICAgQnVpbGRlcjxTVEFURSB8IE51bWJlclNldD4mIHNldE51bWJlcihpbnQgaW5fbnVtYmVyKQog
ICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTnVtYmVyU2V0
KSwgcHJvcGVydHlfbnVtYmVyX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5z
ZXRJbnRlZ2VyKCJudW1iZXIiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRJ
bnRlZ2VyKCJudW1iZXIiX3MsIGluX251bWJlcik7CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0
YXRlPE51bWJlclNldD4oKTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBB
bmltYWxzU2V0PiYgc2V0QW5pbWFscyhJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRB
bmltYWxzIHZhbHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQW5pbWFsc1NldD4mIHNldEFu
aW1hbHMoUHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHMgaW5fYW5pbWFscykKICAgICAgICAg
ewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEFuaW1hbHNTZXQpLCBwcm9w
ZXJ0eV9hbmltYWxzX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJp
bmcoImFuaW1hbHMiX3MsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVt
Q29uc3RhbnRWYWx1ZSh2YWx1ZSkpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygi
YW5pbWFscyJfcywgUHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShp
bl9hbmltYWxzKSk7CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEFuaW1hbHNTZXQ+KCk7
CiAgICAgICAgIH0KIAotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgSWRTZXQ+JiBzZXRJZChpbnQg
dmFsdWUpCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBJZFNldD4mIHNldElkKGludCBpbl9pZCkK
ICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIElkU2V0KSwg
cHJvcGVydHlfaWRfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldEludGVn
ZXIoImlkIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0SW50ZWdlcigiaWQi
X3MsIGluX2lkKTsKICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8SWRTZXQ+KCk7CiAgICAg
ICAgIH0KIAotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVHJlZVNldD4mIHNldFRyZWUoUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDE+IHZhbHVlKQorICAg
ICAgICBCdWlsZGVyPFNUQVRFIHwgVHJlZVNldD4mIHNldFRyZWUoUmVmPFByb3RvY29sOjpUZXN0
OjpSZWN1cnNpdmVPYmplY3QxPiYmIGluX3RyZWUpCiAgICAgICAgIHsKICAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBUcmVlU2V0KSwgcHJvcGVydHlfdHJlZV9hbHJlYWR5X3Nl
dCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0KCJ0cmVlIl9zLCB2YWx1ZSk7Cisg
ICAgICAgICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0KCJ0cmVlIl9zLCBXVEZNb3ZlKGluX3RyZWUp
KTsKICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VHJlZVNldD4oKTsKICAgICAgICAgfQog
CkBAIC00NTIsNyArNDU1LDcgQEAgZW51bSBjbGFzcyBDYXN0ZWRBbmltYWxzIHsKICAgICBGbGFt
aW5nb3MgPSAzLAogfTsgLy8gZW51bSBjbGFzcyBDYXN0ZWRBbmltYWxzCiAKLWNsYXNzIFJlY3Vy
c2l2ZU9iamVjdDEgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7CitjbGFzcyBSZWN1cnNpdmVP
YmplY3QxIGZpbmFsIDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgewogcHVibGljOgogICAgIGVu
dW0gewogICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCkBAIC00OTgsMTMgKzUwMSwxMyBAQCBwdWJs
aWM6CiAgICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihKU09OOjpPYmplY3Q6OmNy
ZWF0ZSgpKTsKICAgICB9CiAKLSAgICB2b2lkIHNldE9iaihSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0Mj4gdmFsdWUpCisgICAgdm9pZCBzZXRPYmooUmVm
PFByb3RvY29sOjpUZXN0OjpSZWN1cnNpdmVPYmplY3QyPiYmIGluX29wdF9vYmopCiAgICAgewot
ICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXRPYmplY3QoIm9iaiJfcywgV1RGTW92ZSh2YWx1
ZSkpOworICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXRPYmplY3QoIm9iaiJfcywgV1RGTW92
ZShpbl9vcHRfb2JqKSk7CiAgICAgfQogfTsKIAotY2xhc3MgUmVjdXJzaXZlT2JqZWN0MiA6IHB1
YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKK2NsYXNzIFJlY3Vyc2l2ZU9iamVjdDIgZmluYWwgOiBw
dWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7CiBwdWJsaWM6CiAgICAgZW51bSB7CiAgICAgICAgIE5v
RmllbGRzU2V0ID0gMCwKQEAgLTU1MCwyNSArNTUzLDI1IEBAIHB1YmxpYzoKICAgICAgICAgcmV0
dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEpTT046Ok9iamVjdDo6Y3JlYXRlKCkpOwogICAgIH0K
IAotICAgIHZvaWQgc2V0T2JqKFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpSZWN1
cnNpdmVPYmplY3QxPiB2YWx1ZSkKKyAgICB2b2lkIHNldE9iaihSZWY8UHJvdG9jb2w6OlRlc3Q6
OlJlY3Vyc2l2ZU9iamVjdDE+JiYgaW5fb3B0X29iaikKICAgICB7Ci0gICAgICAgIEpTT046Ok9i
amVjdEJhc2U6OnNldE9iamVjdCgib2JqIl9zLCBXVEZNb3ZlKHZhbHVlKSk7CisgICAgICAgIEpT
T046Ok9iamVjdEJhc2U6OnNldE9iamVjdCgib2JqIl9zLCBXVEZNb3ZlKGluX29wdF9vYmopKTsK
ICAgICB9CiB9OwogCiB9IC8vIFRlc3QKIAotdGVtcGxhdGU8PiBzdHJ1Y3QgQmluZGluZ1RyYWl0
czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzPiB7Cit0ZW1wbGF0ZTw+
IHN0cnVjdCBCaW5kaW5nVHJhaXRzPFByb3RvY29sOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3Q+IHsK
K3N0YXRpYyBSZWY8UHJvdG9jb2w6OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdD4gcnVudGltZUNhc3Qo
UmVmPEpTT046OlZhbHVlPiYmIHZhbHVlKTsKIHN0YXRpYyB2b2lkIGFzc2VydFZhbHVlSGFzRXhw
ZWN0ZWRUeXBlKEpTT046OlZhbHVlKik7CiB9OwotdGVtcGxhdGU8PiBzdHJ1Y3QgQmluZGluZ1Ry
YWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3Q+IHsKLXN0YXRp
YyBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0PiBydW50
aW1lQ2FzdChSZWZQdHI8SlNPTjo6VmFsdWU+JiYgdmFsdWUpOwordGVtcGxhdGU8PiBzdHJ1Y3Qg
QmluZGluZ1RyYWl0czxQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFscz4gewogc3RhdGljIHZv
aWQgYXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoSlNPTjo6VmFsdWUqKTsKIH07Ci10ZW1wbGF0
ZTw+IHN0cnVjdCBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlJlY3Vy
c2l2ZU9iamVjdDE+IHsKK3RlbXBsYXRlPD4gc3RydWN0IEJpbmRpbmdUcmFpdHM8UHJvdG9jb2w6
OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDE+IHsKIHN0YXRpYyB2b2lkIGFzc2VydFZhbHVlSGFzRXhw
ZWN0ZWRUeXBlKEpTT046OlZhbHVlKik7CiB9OwotdGVtcGxhdGU8PiBzdHJ1Y3QgQmluZGluZ1Ry
YWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpSZWN1cnNpdmVPYmplY3QyPiB7Cit0ZW1w
bGF0ZTw+IHN0cnVjdCBCaW5kaW5nVHJhaXRzPFByb3RvY29sOjpUZXN0OjpSZWN1cnNpdmVPYmpl
Y3QyPiB7CiBzdGF0aWMgdm9pZCBhc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShKU09OOjpWYWx1
ZSopOwogfTsKIApAQCAtNTc5LDkgKzU4Miw5IEBAIE9wdGlvbmFsPFByb3RvY29sRW51bVR5cGU+
IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZyhjb25zdCBTdHJpbmcmKTsKIAogLy8gRW51bXMgaW4g
dGhlICdUZXN0JyBEb21haW4KIHRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlRlc3Q6OlVuY2FzdGVkQW5pbWFscz4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlVuY2FzdGVkQW5pbWFscz4oY29uc3QgU3RyaW5nJik7CitP
cHRpb25hbDxQcm90b2NvbDo6VGVzdDo6VW5jYXN0ZWRBbmltYWxzPiBwYXJzZUVudW1WYWx1ZUZy
b21TdHJpbmc8UHJvdG9jb2w6OlRlc3Q6OlVuY2FzdGVkQW5pbWFscz4oY29uc3QgU3RyaW5nJik7
CiB0ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRB
bmltYWxzPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVz
dDo6Q2FzdGVkQW5pbWFscz4oY29uc3QgU3RyaW5nJik7CitPcHRpb25hbDxQcm90b2NvbDo6VGVz
dDo6Q2FzdGVkQW5pbWFscz4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPFByb3RvY29sOjpUZXN0
OjpDYXN0ZWRBbmltYWxzPihjb25zdCBTdHJpbmcmKTsKIAogfSAvLyBuYW1lc3BhY2UgVGVzdEhl
bHBlcnMKIApAQCAtNjM1LDggKzYzOCw3IEBAIHN0cnVjdCBEZWZhdWx0SGFzaDxJbnNwZWN0b3I6
OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzPiA6IEludEhhc2g8SW5zcGVjdG9yCiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogCi0jaW5j
bHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2lu
Y2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC02
NjEsMzMgKzY2MywzMyBAQCBTdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpIHsK
IC8vIEVudW1zIGluIHRoZSAnVGVzdCcgRG9tYWluCiAKIHRlbXBsYXRlPD4KLU9wdGlvbmFsPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlVuY2FzdGVkQW5pbWFscz4gcGFyc2VFbnVtVmFsdWVG
cm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlVuY2FzdGVkQW5pbWFscz4oY29u
c3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKK09wdGlvbmFsPFByb3RvY29sOjpUZXN0OjpVbmNh
c3RlZEFuaW1hbHM+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxQcm90b2NvbDo6VGVzdDo6VW5j
YXN0ZWRBbmltYWxzPihjb25zdCBTdHJpbmcmIHByb3RvY29sU3RyaW5nKQogewogICAgIHN0YXRp
YyBjb25zdCBzaXplX3QgY29uc3RhbnRWYWx1ZXNbXSA9IHsKLSAgICAgICAgKHNpemVfdClJbnNw
ZWN0b3I6OlByb3RvY29sOjpUZXN0OjpVbmNhc3RlZEFuaW1hbHM6OlBpZ3MsCi0gICAgICAgIChz
aXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VW5jYXN0ZWRBbmltYWxzOjpDb3dzLAot
ICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlVuY2FzdGVkQW5pbWFs
czo6Q2F0cywKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpVbmNh
c3RlZEFuaW1hbHM6OkhlbnMsCisgICAgICAgIChzaXplX3QpUHJvdG9jb2w6OlRlc3Q6OlVuY2Fz
dGVkQW5pbWFsczo6UGlncywKKyAgICAgICAgKHNpemVfdClQcm90b2NvbDo6VGVzdDo6VW5jYXN0
ZWRBbmltYWxzOjpDb3dzLAorICAgICAgICAoc2l6ZV90KVByb3RvY29sOjpUZXN0OjpVbmNhc3Rl
ZEFuaW1hbHM6OkNhdHMsCisgICAgICAgIChzaXplX3QpUHJvdG9jb2w6OlRlc3Q6OlVuY2FzdGVk
QW5pbWFsczo6SGVucywKICAgICB9OwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgNDsgKytp
KQogICAgICAgICBpZiAocHJvdG9jb2xTdHJpbmcgPT0gZW51bV9jb25zdGFudF92YWx1ZXNbY29u
c3RhbnRWYWx1ZXNbaV1dKQotICAgICAgICAgICAgcmV0dXJuIChJbnNwZWN0b3I6OlByb3RvY29s
OjpUZXN0OjpVbmNhc3RlZEFuaW1hbHMpY29uc3RhbnRWYWx1ZXNbaV07CisgICAgICAgICAgICBy
ZXR1cm4gKFByb3RvY29sOjpUZXN0OjpVbmNhc3RlZEFuaW1hbHMpY29uc3RhbnRWYWx1ZXNbaV07
CiAKICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQogCiB0ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJ
bnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzPiBwYXJzZUVudW1WYWx1ZUZy
b21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFscz4oY29uc3Qg
U3RyaW5nJiBwcm90b2NvbFN0cmluZykKK09wdGlvbmFsPFByb3RvY29sOjpUZXN0OjpDYXN0ZWRB
bmltYWxzPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFu
aW1hbHM+KGNvbnN0IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcpCiB7CiAgICAgc3RhdGljIGNvbnN0
IHNpemVfdCBjb25zdGFudFZhbHVlc1tdID0gewotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6
UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM6OkR1Y2tzLAotICAgICAgICAoc2l6ZV90KUlu
c3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM6OkhlbnMsCi0gICAgICAgIChz
aXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFsczo6Q3Jvd3MsCi0g
ICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFsczo6
RmxhbWluZ29zLAorICAgICAgICAoc2l6ZV90KVByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxz
OjpEdWNrcywKKyAgICAgICAgKHNpemVfdClQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFsczo6
SGVucywKKyAgICAgICAgKHNpemVfdClQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFsczo6Q3Jv
d3MsCisgICAgICAgIChzaXplX3QpUHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM6OkZsYW1p
bmdvcywKICAgICB9OwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgNDsgKytpKQogICAgICAg
ICBpZiAocHJvdG9jb2xTdHJpbmcgPT0gZW51bV9jb25zdGFudF92YWx1ZXNbY29uc3RhbnRWYWx1
ZXNbaV1dKQotICAgICAgICAgICAgcmV0dXJuIChJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpD
YXN0ZWRBbmltYWxzKWNvbnN0YW50VmFsdWVzW2ldOworICAgICAgICAgICAgcmV0dXJuIChQcm90
b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFscyljb25zdGFudFZhbHVlc1tpXTsKIAogICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CiB9CkBAIC02OTYsMTE1ICs2OTgsMTAxIEBAIE9wdGlvbmFsPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM+IHBhcnNlRW51bVZhbHVlRnJvbVN0
cmluZzxJbnNwCiAKIAogCi12b2lkIEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6
VGVzdDo6Q2FzdGVkQW5pbWFscz46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKEpTT046OlZh
bHVlKiB2YWx1ZSkKK3ZvaWQgQmluZGluZ1RyYWl0czxQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5p
bWFscz46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKEpTT046OlZhbHVlKiB2YWx1ZSkKIHsK
KyAgICBBU1NFUlRfVU5VU0VEKHZhbHVlLCB2YWx1ZSk7CiAjaWYgQVNTRVJUX0VOQUJMRUQKLSAg
ICBBU1NFUlRfQVJHKHZhbHVlLCB2YWx1ZSk7Ci0gICAgU3RyaW5nIHJlc3VsdDsKLSAgICBib29s
IGNhc3RTdWNjZWVkZWQgPSB2YWx1ZS0+YXNTdHJpbmcocmVzdWx0KTsKLSAgICBBU1NFUlQoY2Fz
dFN1Y2NlZWRlZCk7CisgICAgYXV0byByZXN1bHQgPSB2YWx1ZS0+YXNTdHJpbmcoKTsKKyAgICBB
U1NFUlQocmVzdWx0KTsKICAgICBBU1NFUlQocmVzdWx0ID09ICJEdWNrcyIgfHwgcmVzdWx0ID09
ICJIZW5zIiB8fCByZXN1bHQgPT0gIkNyb3dzIiB8fCByZXN1bHQgPT0gIkZsYW1pbmdvcyIpOwot
I2Vsc2UgLy8gQVNTRVJUX0VOQUJMRUQKLSAgICBVTlVTRURfUEFSQU0odmFsdWUpOwotI2VuZGlm
IC8vIEFTU0VSVF9FTkFCTEVECisjZW5kaWYKIH0KIAotdm9pZCBCaW5kaW5nVHJhaXRzPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdD46OmFzc2VydFZhbHVlSGFzRXhw
ZWN0ZWRUeXBlKEpTT046OlZhbHVlKiB2YWx1ZSkKK3ZvaWQgQmluZGluZ1RyYWl0czxQcm90b2Nv
bDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0Pjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoSlNP
Tjo6VmFsdWUqIHZhbHVlKQogeworICAgIEFTU0VSVF9VTlVTRUQodmFsdWUsIHZhbHVlKTsKICNp
ZiBBU1NFUlRfRU5BQkxFRAotICAgIEFTU0VSVF9BUkcodmFsdWUsIHZhbHVlKTsKLSAgICBSZWZQ
dHI8SlNPTjo6T2JqZWN0PiBvYmplY3Q7Ci0gICAgYm9vbCBjYXN0U3VjY2VlZGVkID0gdmFsdWUt
PmFzT2JqZWN0KG9iamVjdCk7Ci0gICAgQVNTRVJUX1VOVVNFRChjYXN0U3VjY2VlZGVkLCBjYXN0
U3VjY2VlZGVkKTsKKyAgICBhdXRvIG9iamVjdCA9IHZhbHVlLT5hc09iamVjdCgpOworICAgIEFT
U0VSVChvYmplY3QpOwogICAgIHsKICAgICAgICAgYXV0byBzdHJpbmdQb3MgPSBvYmplY3QtPmZp
bmQoInN0cmluZyJfcyk7CiAgICAgICAgIEFTU0VSVChzdHJpbmdQb3MgIT0gb2JqZWN0LT5lbmQo
KSk7Ci0gICAgICAgIEJpbmRpbmdUcmFpdHM8U3RyaW5nPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3Rl
ZFR5cGUoc3RyaW5nUG9zLT52YWx1ZS5nZXQoKSk7CisgICAgICAgIEJpbmRpbmdUcmFpdHM8U3Ry
aW5nPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoc3RyaW5nUG9zLT52YWx1ZS5wdHIoKSk7
CiAgICAgfQogICAgIHsKICAgICAgICAgYXV0byBudW1iZXJQb3MgPSBvYmplY3QtPmZpbmQoIm51
bWJlciJfcyk7CiAgICAgICAgIEFTU0VSVChudW1iZXJQb3MgIT0gb2JqZWN0LT5lbmQoKSk7Ci0g
ICAgICAgIEJpbmRpbmdUcmFpdHM8aW50Pjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUobnVt
YmVyUG9zLT52YWx1ZS5nZXQoKSk7CisgICAgICAgIEJpbmRpbmdUcmFpdHM8aW50Pjo6YXNzZXJ0
VmFsdWVIYXNFeHBlY3RlZFR5cGUobnVtYmVyUG9zLT52YWx1ZS5wdHIoKSk7CiAgICAgfQogICAg
IHsKICAgICAgICAgYXV0byBhbmltYWxzUG9zID0gb2JqZWN0LT5maW5kKCJhbmltYWxzIl9zKTsK
ICAgICAgICAgQVNTRVJUKGFuaW1hbHNQb3MgIT0gb2JqZWN0LT5lbmQoKSk7Ci0gICAgICAgIEJp
bmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFscz46OmFz
c2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKGFuaW1hbHNQb3MtPnZhbHVlLmdldCgpKTsKKyAgICAg
ICAgQmluZGluZ1RyYWl0czxQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFscz46OmFzc2VydFZh
bHVlSGFzRXhwZWN0ZWRUeXBlKGFuaW1hbHNQb3MtPnZhbHVlLnB0cigpKTsKICAgICB9CiAgICAg
ewogICAgICAgICBhdXRvIGlkUG9zID0gb2JqZWN0LT5maW5kKCJpZCJfcyk7CiAgICAgICAgIEFT
U0VSVChpZFBvcyAhPSBvYmplY3QtPmVuZCgpKTsKLSAgICAgICAgQmluZGluZ1RyYWl0czxpbnQ+
Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShpZFBvcy0+dmFsdWUuZ2V0KCkpOworICAgICAg
ICBCaW5kaW5nVHJhaXRzPGludD46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKGlkUG9zLT52
YWx1ZS5wdHIoKSk7CiAgICAgfQogICAgIHsKICAgICAgICAgYXV0byB0cmVlUG9zID0gb2JqZWN0
LT5maW5kKCJ0cmVlIl9zKTsKICAgICAgICAgQVNTRVJUKHRyZWVQb3MgIT0gb2JqZWN0LT5lbmQo
KSk7Ci0gICAgICAgIEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UmVj
dXJzaXZlT2JqZWN0MT46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKHRyZWVQb3MtPnZhbHVl
LmdldCgpKTsKKyAgICAgICAgQmluZGluZ1RyYWl0czxQcm90b2NvbDo6VGVzdDo6UmVjdXJzaXZl
T2JqZWN0MT46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKHRyZWVQb3MtPnZhbHVlLnB0cigp
KTsKICAgICB9CiAKLSAgICBpbnQgZm91bmRQcm9wZXJ0aWVzQ291bnQgPSA1OworICAgIHNpemVf
dCBmb3VuZFByb3BlcnRpZXNDb3VudCA9IDU7CiAgICAgaWYgKGZvdW5kUHJvcGVydGllc0NvdW50
ICE9IG9iamVjdC0+c2l6ZSgpKQogICAgICAgICBGQVRBTCgiVW5leHBlY3RlZCBwcm9wZXJ0aWVz
IGluIG9iamVjdDogJXNcbiIsIG9iamVjdC0+dG9KU09OU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkp
OwotI2Vsc2UgLy8gQVNTRVJUX0VOQUJMRUQKLSAgICBVTlVTRURfUEFSQU0odmFsdWUpOwotI2Vu
ZGlmIC8vIEFTU0VSVF9FTkFCTEVECisjZW5kaWYKIH0KIAotUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdD4gQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlBy
b3RvY29sOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3Q+OjpydW50aW1lQ2FzdChSZWZQdHI8SlNPTjo6
VmFsdWU+JiYgdmFsdWUpCitSZWY8UHJvdG9jb2w6OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdD4gQmlu
ZGluZ1RyYWl0czxQcm90b2NvbDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0Pjo6cnVudGltZUNhc3Qo
UmVmPEpTT046OlZhbHVlPiYmIHZhbHVlKQogewotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHJl
c3VsdDsKLSAgICBib29sIGNhc3RTdWNjZWVkZWQgPSB2YWx1ZS0+YXNPYmplY3QocmVzdWx0KTsK
LSAgICBBU1NFUlRfVU5VU0VEKGNhc3RTdWNjZWVkZWQsIGNhc3RTdWNjZWVkZWQpOwotICAgIEJp
bmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0Pjo6
YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUocmVzdWx0LmdldCgpKTsKLSAgICBDT01QSUxFX0FT
U0VSVChzaXplb2YoSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0KSA9
PSBzaXplb2YoSlNPTjo6T2JqZWN0QmFzZSksIHR5cGVfY2FzdF9wcm9ibGVtKTsKLSAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0
Kj4oc3RhdGljX2Nhc3Q8SlNPTjo6T2JqZWN0QmFzZSo+KHJlc3VsdC5nZXQoKSkpOworICAgIGF1
dG8gcmVzdWx0ID0gdmFsdWUtPmFzT2JqZWN0KCk7CisgICAgQmluZGluZ1RyYWl0czxQcm90b2Nv
bDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0Pjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUocmVz
dWx0LmdldCgpKTsKKyAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoUHJvdG9jb2w6OlRlc3Q6OlR5
cGVOZWVkaW5nQ2FzdCkgPT0gc2l6ZW9mKEpTT046Ok9iamVjdEJhc2UpLCB0eXBlX2Nhc3RfcHJv
YmxlbSk7CisgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxQcm90b2NvbDo6VGVzdDo6
VHlwZU5lZWRpbmdDYXN0PihzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SlNPTjo6T2JqZWN0QmFzZT4o
cmVzdWx0LnJlbGVhc2VOb25OdWxsKCkpKTsKIH0KIAogCi12b2lkIEJpbmRpbmdUcmFpdHM8SW5z
cGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0MT46OmFzc2VydFZhbHVlSGFz
RXhwZWN0ZWRUeXBlKEpTT046OlZhbHVlKiB2YWx1ZSkKK3ZvaWQgQmluZGluZ1RyYWl0czxQcm90
b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0MT46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBl
KEpTT046OlZhbHVlKiB2YWx1ZSkKIHsKKyAgICBBU1NFUlRfVU5VU0VEKHZhbHVlLCB2YWx1ZSk7
CiAjaWYgQVNTRVJUX0VOQUJMRUQKLSAgICBBU1NFUlRfQVJHKHZhbHVlLCB2YWx1ZSk7Ci0gICAg
UmVmUHRyPEpTT046Ok9iamVjdD4gb2JqZWN0OwotICAgIGJvb2wgY2FzdFN1Y2NlZWRlZCA9IHZh
bHVlLT5hc09iamVjdChvYmplY3QpOwotICAgIEFTU0VSVF9VTlVTRUQoY2FzdFN1Y2NlZWRlZCwg
Y2FzdFN1Y2NlZWRlZCk7CisgICAgYXV0byBvYmplY3QgPSB2YWx1ZS0+YXNPYmplY3QoKTsKKyAg
ICBBU1NFUlQob2JqZWN0KTsKIAotICAgIGludCBmb3VuZFByb3BlcnRpZXNDb3VudCA9IDA7Cisg
ICAgc2l6ZV90IGZvdW5kUHJvcGVydGllc0NvdW50ID0gMDsKICAgICB7CiAgICAgICAgIGF1dG8g
b2JqUG9zID0gb2JqZWN0LT5maW5kKCJvYmoiX3MpOwogICAgICAgICBpZiAob2JqUG9zICE9IG9i
amVjdC0+ZW5kKCkpIHsKLSAgICAgICAgICAgIEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90
b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0Mj46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBl
KG9ialBvcy0+dmFsdWUuZ2V0KCkpOworICAgICAgICAgICAgQmluZGluZ1RyYWl0czxQcm90b2Nv
bDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0Mj46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKG9i
alBvcy0+dmFsdWUucHRyKCkpOwogICAgICAgICAgICAgKytmb3VuZFByb3BlcnRpZXNDb3VudDsK
ICAgICAgICAgfQogICAgIH0KICAgICBpZiAoZm91bmRQcm9wZXJ0aWVzQ291bnQgIT0gb2JqZWN0
LT5zaXplKCkpCiAgICAgICAgIEZBVEFMKCJVbmV4cGVjdGVkIHByb3BlcnRpZXMgaW4gb2JqZWN0
OiAlc1xuIiwgb2JqZWN0LT50b0pTT05TdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSk7Ci0jZWxzZSAv
LyBBU1NFUlRfRU5BQkxFRAotICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7Ci0jZW5kaWYgLy8gQVNT
RVJUX0VOQUJMRUQKKyNlbmRpZgogfQogCi12b2lkIEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0Mj46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRU
eXBlKEpTT046OlZhbHVlKiB2YWx1ZSkKK3ZvaWQgQmluZGluZ1RyYWl0czxQcm90b2NvbDo6VGVz
dDo6UmVjdXJzaXZlT2JqZWN0Mj46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKEpTT046OlZh
bHVlKiB2YWx1ZSkKIHsKKyAgICBBU1NFUlRfVU5VU0VEKHZhbHVlLCB2YWx1ZSk7CiAjaWYgQVNT
RVJUX0VOQUJMRUQKLSAgICBBU1NFUlRfQVJHKHZhbHVlLCB2YWx1ZSk7Ci0gICAgUmVmUHRyPEpT
T046Ok9iamVjdD4gb2JqZWN0OwotICAgIGJvb2wgY2FzdFN1Y2NlZWRlZCA9IHZhbHVlLT5hc09i
amVjdChvYmplY3QpOwotICAgIEFTU0VSVF9VTlVTRUQoY2FzdFN1Y2NlZWRlZCwgY2FzdFN1Y2Nl
ZWRlZCk7CisgICAgYXV0byBvYmplY3QgPSB2YWx1ZS0+YXNPYmplY3QoKTsKKyAgICBBU1NFUlQo
b2JqZWN0KTsKIAotICAgIGludCBmb3VuZFByb3BlcnRpZXNDb3VudCA9IDA7CisgICAgc2l6ZV90
IGZvdW5kUHJvcGVydGllc0NvdW50ID0gMDsKICAgICB7CiAgICAgICAgIGF1dG8gb2JqUG9zID0g
b2JqZWN0LT5maW5kKCJvYmoiX3MpOwogICAgICAgICBpZiAob2JqUG9zICE9IG9iamVjdC0+ZW5k
KCkpIHsKLSAgICAgICAgICAgIEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVz
dDo6UmVjdXJzaXZlT2JqZWN0MT46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKG9ialBvcy0+
dmFsdWUuZ2V0KCkpOworICAgICAgICAgICAgQmluZGluZ1RyYWl0czxQcm90b2NvbDo6VGVzdDo6
UmVjdXJzaXZlT2JqZWN0MT46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKG9ialBvcy0+dmFs
dWUucHRyKCkpOwogICAgICAgICAgICAgKytmb3VuZFByb3BlcnRpZXNDb3VudDsKICAgICAgICAg
fQogICAgIH0KICAgICBpZiAoZm91bmRQcm9wZXJ0aWVzQ291bnQgIT0gb2JqZWN0LT5zaXplKCkp
CiAgICAgICAgIEZBVEFMKCJVbmV4cGVjdGVkIHByb3BlcnRpZXMgaW4gb2JqZWN0OiAlc1xuIiwg
b2JqZWN0LT50b0pTT05TdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSk7Ci0jZWxzZSAvLyBBU1NFUlRf
RU5BQkxFRAotICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7Ci0jZW5kaWYgLy8gQVNTRVJUX0VOQUJM
RUQKKyNlbmRpZgogfQogCiB9IC8vIG5hbWVzcGFjZSBQcm90b2NvbApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUt
d2l0aC1vcGVuLXBhcmFtZXRlcnMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS13aXRoLW9wZW4tcGFyYW1ldGVy
cy5qc29uLXJlc3VsdAppbmRleCA3ZDU3NzYyYThmZjhiZTRhOWFlNDlkYzllZjU0N2I5ZDMyMTNk
YzdiLi5iOTg0Y2IwN2MyYjM3NTUxYTFmNzdjMjNiMDk0MDYyMjkxNmVlNWUxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQv
dHlwZS13aXRoLW9wZW4tcGFyYW1ldGVycy5qc29uLXJlc3VsdAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS13aXRoLW9wZW4t
cGFyYW1ldGVycy5qc29uLXJlc3VsdApAQCAtNjMsNyArNjMsNyBAQAogCiAjaWYgRU5BQkxFKElO
U1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xU
eXBlcy5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgogI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CiAKQEAgLTExOSwxMSArMTE5LDE0
IEBAIHByaXZhdGU6CiAKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRl
IDx0dXBsZT4KKyNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9u
YWwuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3Bl
Y3RvciB7CiAKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCiAKIAogCkBAIC0xNjQsOSAr
MTY3LDcgQEAgdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiAjaW5jbHVkZSAiVGVzdEJhY2tl
bmREaXNwYXRjaGVycy5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJv
bnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgogI2luY2x1ZGUgPHd0
Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogI2lm
IEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogI2luY2x1ZGUgIlRlc3RB
bHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKQEAgLTIxNCw2ICsyMTUsNyBAQCBuYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKIAogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNs
dWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKQEAgLTI1
Nyw3ICsyNTksNiBAQCBjbGFzcyBGcm9udGVuZFJvdXRlcjsKICNpbmNsdWRlICJUZXN0RnJvbnRl
bmREaXNwYXRjaGVycy5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJv
bnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKIG5hbWVzcGFj
ZSBJbnNwZWN0b3IgewogCkBAIC0yOTgsNyArMjk5LDkgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7
CiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3Rv
Y29sVHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9K
U09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC0zMjAsNyArMzIz
LDcgQEAgY2xhc3MgT3BlblBhcmFtZXRlcnM7CiAKIG5hbWVzcGFjZSBUZXN0IHsKIAotY2xhc3Mg
Tm9PcGVuUGFyYW1ldGVycyA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKK2NsYXNzIE5vT3Bl
blBhcmFtZXRlcnMgZmluYWwgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7CiBwdWJsaWM6CiAg
ICAgZW51bSB7CiAgICAgICAgIE5vRmllbGRzU2V0ID0gMCwKQEAgLTM0NywxNyArMzUwLDE3IEBA
IHB1YmxpYzoKICAgICAgICAgZnJpZW5kIGNsYXNzIE5vT3BlblBhcmFtZXRlcnM7CiAgICAgcHVi
bGljOgogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBPbmVTZXQ+JiBzZXRPbmUoZG91YmxlIHZh
bHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRFIHwgT25lU2V0PiYgc2V0T25lKGRvdWJsZSBpbl9v
bmUpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBPbmVT
ZXQpLCBwcm9wZXJ0eV9vbmVfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNl
dERvdWJsZSgib25lIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0RG91Ymxl
KCJvbmUiX3MsIGluX29uZSk7CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE9uZVNldD4o
KTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBUd29TZXQ+JiBzZXRUd28o
ZG91YmxlIHZhbHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVHdvU2V0PiYgc2V0VHdvKGRv
dWJsZSBpbl90d28pCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RB
VEUgJiBUd29TZXQpLCBwcm9wZXJ0eV90d29fYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9y
ZXN1bHQtPnNldERvdWJsZSgidHdvIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+
c2V0RG91YmxlKCJ0d28iX3MsIGluX3R3byk7CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRl
PFR3b1NldD4oKTsKICAgICAgICAgfQogCkBAIC0zODUsNyArMzg4LDcgQEAgcHVibGljOgogICAg
IH0KIH07CiAKLWNsYXNzIE9wZW5QYXJhbWV0ZXJzIDogcHVibGljIEpTT046Ok9iamVjdCB7Citj
bGFzcyBPcGVuUGFyYW1ldGVycyBmaW5hbCA6IHB1YmxpYyBKU09OOjpPYmplY3QgewogcHVibGlj
OgogICAgIGVudW0gewogICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCkBAIC00MTIsMTcgKzQxNSwx
NyBAQCBwdWJsaWM6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBPcGVuUGFyYW1ldGVyczsKICAgICBw
dWJsaWM6CiAKLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IEFscGhhU2V0PiYgc2V0QWxwaGEoZG91
YmxlIHZhbHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQWxwaGFTZXQ+JiBzZXRBbHBoYShk
b3VibGUgaW5fYWxwaGEpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEo
U1RBVEUgJiBBbHBoYVNldCksIHByb3BlcnR5X2FscGhhX2FscmVhZHlfc2V0KTsKLSAgICAgICAg
ICAgIG1fcmVzdWx0LT5zZXREb3VibGUoImFscGhhIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICBt
X3Jlc3VsdC0+c2V0RG91YmxlKCJhbHBoYSJfcywgaW5fYWxwaGEpOwogICAgICAgICAgICAgcmV0
dXJuIGNhc3RTdGF0ZTxBbHBoYVNldD4oKTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCBCZXRhU2V0PiYgc2V0QmV0YShkb3VibGUgdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCBCZXRhU2V0PiYgc2V0QmV0YShkb3VibGUgaW5fYmV0YSkKICAgICAgICAgewogICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEJldGFTZXQpLCBwcm9wZXJ0eV9iZXRh
X2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXREb3VibGUoImJldGEiX3Ms
IHZhbHVlKTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXREb3VibGUoImJldGEiX3MsIGluX2Jl
dGEpOwogICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxCZXRhU2V0PigpOwogICAgICAgICB9
CiAKQEAgLTQ1MCw3ICs0NTMsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgLy8gUHJvcGVydHkg
bmFtZXMgZm9yIHR5cGUgZ2VuZXJhdGVkIGFzIG9wZW4uCi0gICAgTm9uZSBzdGF0aWMgY29uc3Qg
Y2hhciogQWxwaGE7CisgICAgTm9uZSBzdGF0aWMgY29uc3QgY2hhciogYWxwaGFLZXk7CiB9Owog
CiB9IC8vIFRlc3QKQEAgLTQ5NSwxNCArNDk4LDEzIEBAIHB1YmxpYzoKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAKLSNpbmNsdWRlIDx3dGYv
T3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3Rm
L0Fzc2VydGlvbnMuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKIG5hbWVzcGFjZSBQcm90
b2NvbCB7CiAKLWNvbnN0IGNoYXIqIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6Ok9wZW5QYXJh
bWV0ZXJzOjpBbHBoYSA9ICJhbHBoYSI7Citjb25zdCBjaGFyKiBQcm90b2NvbDo6VGVzdDo6T3Bl
blBhcmFtZXRlcnM6OmFscGhhS2V5ID0gImFscGhhIjsKIAogfSAvLyBuYW1lc3BhY2UgUHJvdG9j
b2wKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2V4cGVjdGVkL3ZlcnNpb24uanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdmVyc2lvbi5qc29uLXJlc3VsdApp
bmRleCBlZjc3OGEwNmM3ZjI1MTFmNmMyMzQxODY3MjU1MDU2ODM3ZmJmYTNmLi5jMDRhYjU5NzNl
NzY2MTIxZTZiZTg2OTk5ODU0MWQ1YTcxMjcyZThkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdmVyc2lvbi5qc29uLXJl
c3VsdAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
ZXhwZWN0ZWQvdmVyc2lvbi5qc29uLXJlc3VsdApAQCAtNjgsNyArNjgsNyBAQCBJbnNwZWN0b3JC
YWNrZW5kLmFjdGl2YXRlRG9tYWluKCJWZXJzaW9uRG9tYWluIiwgbnVsbCk7CiAKICNpZiBFTkFC
TEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIAotI2luY2x1ZGUgIlRlc3RQcm90
b2NvbFR5cGVzLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CiAjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KIApAQCAtMTI0LDExICsx
MjQsMTQgQEAgcHJpdmF0ZToKIAogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2lu
Y2x1ZGUgPHR1cGxlPgorI2luY2x1ZGUgPHd0Zi9FeHBlY3RlZC5oPgorI2luY2x1ZGUgPHd0Zi9P
cHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKIAotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKIAogCiAKQEAgLTE2
OSw5ICsxNzIsNyBAQCB0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKICNpbmNsdWRlICJUZXN0
QmFja2VuZERpc3BhdGNoZXJzLmgiCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CiAjaW5jbHVk
ZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgog
CiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAjaW5jbHVkZSAi
VGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgpAQCAtMjE5LDYgKzIyMCw3IEBAIG5h
bWVzcGFjZSBJbnNwZWN0b3IgewogCiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgog
I2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAj
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewpA
QCAtMjYyLDcgKzI2NCw2IEBAIGNsYXNzIEZyb250ZW5kUm91dGVyOwogI2luY2x1ZGUgIlRlc3RG
cm9udGVuZERpc3BhdGNoZXJzLmgiCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogbmFt
ZXNwYWNlIEluc3BlY3RvciB7CiAKQEAgLTMwMyw3ICszMDQsOSBAQCBuYW1lc3BhY2UgSW5zcGVj
dG9yIHsKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
UHJvdG9jb2xUeXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8
d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKQEAgLTM2Miw4
ICszNjUsNyBAQCBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFZFUlNJT04gPSA0MjsKICNpbmNs
dWRlICJjb25maWcuaCIKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAKLSNpbmNs
dWRlIDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5j
bHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVTZXQuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVNldC5jcHAKaW5kZXggZDk5ZmYzMTFkYjc1NTRh
MmIwMTMwZDI3MjI0OWM3YjA0ZDA1YjhhNS4uNjVlYTM1NDU5YzQ0OTc4NDJiNThhYTNiNGQyYzE2
YWJjYzlmZTE1NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlw
ZVNldC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVNldC5jcHAK
QEAgLTUwMSwxNCArNTAxLDE0IEBAIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpT
dHJ1Y3R1cmVEZXNjcmlwdGlvbj4gU3RydWN0dXJlU2hhcGU6Omluc3BlY3RvCiAgICAgICAgIGZv
ciAoY29uc3QgYXV0byYgZmllbGQgOiBjdXJyZW50U2hhcGUtPm1fb3B0aW9uYWxGaWVsZHMpCiAg
ICAgICAgICAgICBvcHRpb25hbEZpZWxkcy0+YWRkSXRlbShmaWVsZC5nZXQoKSk7CiAKLSAgICAg
ICAgY3VycmVudE9iamVjdC0+c2V0RmllbGRzKCZmaWVsZHMuZ2V0KCkpOwotICAgICAgICBjdXJy
ZW50T2JqZWN0LT5zZXRPcHRpb25hbEZpZWxkcygmb3B0aW9uYWxGaWVsZHMuZ2V0KCkpOworICAg
ICAgICBjdXJyZW50T2JqZWN0LT5zZXRGaWVsZHMoV1RGTW92ZShmaWVsZHMpKTsKKyAgICAgICAg
Y3VycmVudE9iamVjdC0+c2V0T3B0aW9uYWxGaWVsZHMoV1RGTW92ZShvcHRpb25hbEZpZWxkcykp
OwogICAgICAgICBjdXJyZW50T2JqZWN0LT5zZXRDb25zdHJ1Y3Rvck5hbWUoY3VycmVudFNoYXBl
LT5tX2NvbnN0cnVjdG9yTmFtZSk7CiAgICAgICAgIGN1cnJlbnRPYmplY3QtPnNldElzSW1wcmVj
aXNlKGN1cnJlbnRTaGFwZS0+bV9pc0luRGljdGlvbmFyeU1vZGUpOwogCiAgICAgICAgIGlmIChj
dXJyZW50U2hhcGUtPm1fcHJvdG8pIHsKICAgICAgICAgICAgIGF1dG8gbmV4dE9iamVjdCA9IElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlN0cnVjdHVyZURlc2NyaXB0aW9uOjpjcmVhdGUo
KS5yZWxlYXNlKCk7Ci0gICAgICAgICAgICBjdXJyZW50T2JqZWN0LT5zZXRQcm90b3R5cGVTdHJ1
Y3R1cmUoJm5leHRPYmplY3QuZ2V0KCkpOworICAgICAgICAgICAgY3VycmVudE9iamVjdC0+c2V0
UHJvdG90eXBlU3RydWN0dXJlKG5leHRPYmplY3QuY29weVJlZigpKTsKICAgICAgICAgICAgIGN1
cnJlbnRPYmplY3QgPSBXVEZNb3ZlKG5leHRPYmplY3QpOwogICAgICAgICB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XVEYvd3RmL0pTT05WYWx1ZXMuY3BwIGIvU291cmNlL1dURi93dGYvSlNPTlZh
bHVlcy5jcHAKaW5kZXggNDA1MjA3OGYzZjk3YzJlOTBmYWNkMDUxZGMxOTJlYzY1MjYxNGMzNC4u
NDliM2YwY2EyZmYxZjhlNjlkMGM0ZjQzYWFhY2ZjYzZhYmRhNmI2MCAxMDA2NDQKLS0tIGEvU291
cmNlL1dURi93dGYvSlNPTlZhbHVlcy5jcHAKKysrIGIvU291cmNlL1dURi93dGYvSlNPTlZhbHVl
cy5jcHAKQEAgLTU3LDkgKzU3LDkgQEAgZW51bSBjbGFzcyBUb2tlbiB7CiAgICAgSW52YWxpZCwK
IH07CiAKLWNvbnN0IGNoYXIqIGNvbnN0IG51bGxTdHJpbmcgPSAibnVsbCI7Ci1jb25zdCBjaGFy
KiBjb25zdCB0cnVlU3RyaW5nID0gInRydWUiOwotY29uc3QgY2hhciogY29uc3QgZmFsc2VTdHJp
bmcgPSAiZmFsc2UiOworY29uc3QgY2hhciogY29uc3QgbnVsbFRva2VuID0gIm51bGwiOworY29u
c3QgY2hhciogY29uc3QgdHJ1ZVRva2VuID0gInRydWUiOworY29uc3QgY2hhciogY29uc3QgZmFs
c2VUb2tlbiA9ICJmYWxzZSI7CiAKIGJvb2wgcGFyc2VDb25zdFRva2VuKGNvbnN0IFVDaGFyKiBz
dGFydCwgY29uc3QgVUNoYXIqIGVuZCwgY29uc3QgVUNoYXIqKiB0b2tlbkVuZCwgY29uc3QgY2hh
ciogdG9rZW4pCiB7CkBAIC0yMDksMTUgKzIwOSwxNSBAQCBUb2tlbiBwYXJzZVRva2VuKGNvbnN0
IFVDaGFyKiBzdGFydCwgY29uc3QgVUNoYXIqIGVuZCwgY29uc3QgVUNoYXIqKiB0b2tlblN0YXJ0
LAogCiAgICAgc3dpdGNoICgqc3RhcnQpIHsKICAgICBjYXNlICduJzoKLSAgICAgICAgaWYgKHBh
cnNlQ29uc3RUb2tlbihzdGFydCwgZW5kLCB0b2tlbkVuZCwgbnVsbFN0cmluZykpCisgICAgICAg
IGlmIChwYXJzZUNvbnN0VG9rZW4oc3RhcnQsIGVuZCwgdG9rZW5FbmQsIG51bGxUb2tlbikpCiAg
ICAgICAgICAgICByZXR1cm4gVG9rZW46Ok51bGw7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
J3QnOgotICAgICAgICBpZiAocGFyc2VDb25zdFRva2VuKHN0YXJ0LCBlbmQsIHRva2VuRW5kLCB0
cnVlU3RyaW5nKSkKKyAgICAgICAgaWYgKHBhcnNlQ29uc3RUb2tlbihzdGFydCwgZW5kLCB0b2tl
bkVuZCwgdHJ1ZVRva2VuKSkKICAgICAgICAgICAgIHJldHVybiBUb2tlbjo6Qm9vbFRydWU7CiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgJ2YnOgotICAgICAgICBpZiAocGFyc2VDb25zdFRva2Vu
KHN0YXJ0LCBlbmQsIHRva2VuRW5kLCBmYWxzZVN0cmluZykpCisgICAgICAgIGlmIChwYXJzZUNv
bnN0VG9rZW4oc3RhcnQsIGVuZCwgdG9rZW5FbmQsIGZhbHNlVG9rZW4pKQogICAgICAgICAgICAg
cmV0dXJuIFRva2VuOjpCb29sRmFsc2U7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgJ1snOgpA
QCAtMzgwLDcgKzM4MCw3IEBAIFJlZlB0cjxKU09OOjpWYWx1ZT4gYnVpbGRWYWx1ZShjb25zdCBV
Q2hhciogc3RhcnQsIGNvbnN0IFVDaGFyKiBlbmQsIGNvbnN0IFVDaGFyCiAgICAgICAgICAgICBS
ZWZQdHI8SlNPTjo6VmFsdWU+IGFycmF5Tm9kZSA9IGJ1aWxkVmFsdWUoc3RhcnQsIGVuZCwgJnRv
a2VuRW5kLCBkZXB0aCArIDEpOwogICAgICAgICAgICAgaWYgKCFhcnJheU5vZGUpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgICAgICBhcnJheS0+cHVzaFZhbHVlKFdU
Rk1vdmUoYXJyYXlOb2RlKSk7CisgICAgICAgICAgICBhcnJheS0+cHVzaFZhbHVlKGFycmF5Tm9k
ZS5yZWxlYXNlTm9uTnVsbCgpKTsKIAogICAgICAgICAgICAgLy8gQWZ0ZXIgYSBsaXN0IHZhbHVl
LCB3ZSBleHBlY3QgYSBjb21tYSBvciB0aGUgZW5kIG9mIHRoZSBsaXN0LgogICAgICAgICAgICAg
c3RhcnQgPSB0b2tlbkVuZDsKQEAgLTQyMCw3ICs0MjAsNyBAQCBSZWZQdHI8SlNPTjo6VmFsdWU+
IGJ1aWxkVmFsdWUoY29uc3QgVUNoYXIqIHN0YXJ0LCBjb25zdCBVQ2hhciogZW5kLCBjb25zdCBV
Q2hhcgogICAgICAgICAgICAgUmVmUHRyPEpTT046OlZhbHVlPiB2YWx1ZSA9IGJ1aWxkVmFsdWUo
c3RhcnQsIGVuZCwgJnRva2VuRW5kLCBkZXB0aCArIDEpOwogICAgICAgICAgICAgaWYgKCF2YWx1
ZSkKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgICAgIG9iamVjdC0+
c2V0VmFsdWUoa2V5LCBXVEZNb3ZlKHZhbHVlKSk7CisgICAgICAgICAgICBvYmplY3QtPnNldFZh
bHVlKGtleSwgdmFsdWUucmVsZWFzZU5vbk51bGwoKSk7CiAgICAgICAgICAgICBzdGFydCA9IHRv
a2VuRW5kOwogCiAgICAgICAgICAgICAvLyBBZnRlciBhIGtleS92YWx1ZSBwYWlyLCB3ZSBleHBl
Y3QgYSBjb21tYSBvciB0aGUgZW5kIG9mIHRoZQpAQCAtNDg5LDQwICs0ODksMzggQEAgUmVmPFZh
bHVlPiBWYWx1ZTo6Y3JlYXRlKGNvbnN0IGNoYXIqIHZhbHVlKQogICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IFZhbHVlKHZhbHVlKSk7CiB9CiAKLWJvb2wgVmFsdWU6OmFzVmFsdWUoUmVmUHRyPFZh
bHVlPiYgdmFsdWUpCitSZWZQdHI8VmFsdWU+IFZhbHVlOjphc1ZhbHVlKCkKIHsKLSAgICB2YWx1
ZSA9IHRoaXM7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHRoaXM7CiB9CiAKLWJvb2wg
VmFsdWU6OmFzT2JqZWN0KFJlZlB0cjxPYmplY3Q+JikKK1JlZlB0cjxPYmplY3Q+IFZhbHVlOjph
c09iamVjdCgpCiB7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBudWxscHRyOwogfQog
Ci1ib29sIFZhbHVlOjphc0FycmF5KFJlZlB0cjxBcnJheT4mKQorUmVmUHRyPEFycmF5PiBWYWx1
ZTo6YXNBcnJheSgpCiB7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBudWxscHRyOwog
fQogCi1ib29sIFZhbHVlOjpwYXJzZUpTT04oY29uc3QgU3RyaW5nJiBqc29uSW5wdXQsIFJlZlB0
cjxWYWx1ZT4mIG91dHB1dCkKK1JlZlB0cjxWYWx1ZT4gVmFsdWU6OnBhcnNlSlNPTihjb25zdCBT
dHJpbmcmIGpzb24pCiB7CiAgICAgLy8gRklYTUU6IFRoaXMgd2hvbGUgZmlsZSBzaG91bGQganVz
dCB1c2UgU3RyaW5nVmlldyBpbnN0ZWFkIG9mIFVDaGFyL2xlbmd0aCBhbmQgYXZvaWQgdXBjb252
ZXJ0aW5nLgotICAgIGF1dG8gY2hhcmFjdGVycyA9IFN0cmluZ1ZpZXcoanNvbklucHV0KS51cGNv
bnZlcnRlZENoYXJhY3RlcnMoKTsKKyAgICBhdXRvIGNoYXJhY3RlcnMgPSBTdHJpbmdWaWV3KGpz
b24pLnVwY29udmVydGVkQ2hhcmFjdGVycygpOwogICAgIGNvbnN0IFVDaGFyKiBzdGFydCA9IGNo
YXJhY3RlcnM7Ci0gICAgY29uc3QgVUNoYXIqIGVuZCA9IHN0YXJ0ICsganNvbklucHV0Lmxlbmd0
aCgpOworICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBzdGFydCArIGpzb24ubGVuZ3RoKCk7CiAgICAg
Y29uc3QgVUNoYXIqIHRva2VuRW5kOwogICAgIGF1dG8gcmVzdWx0ID0gYnVpbGRWYWx1ZShzdGFy
dCwgZW5kLCAmdG9rZW5FbmQsIDApOwogICAgIGlmICghcmVzdWx0KQotICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgZm9yIChjb25zdCBVQ2hhciog
dmFsdWVFbmQgPSB0b2tlbkVuZDsgdmFsdWVFbmQgPCBlbmQ7ICsrdmFsdWVFbmQpIHsKICAgICAg
ICAgaWYgKCFpc1NwYWNlT3JOZXdsaW5lKCp2YWx1ZUVuZCkpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKLSAgICBvdXRwdXQg
PSBXVEZNb3ZlKHJlc3VsdCk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIAogdm9pZCBWYWx1ZTo6ZXNjYXBlU3RyaW5nKFN0cmluZ0J1aWxkZXImIGJ1aWxkZXIsIFN0
cmluZ1ZpZXcgc3RyaW5nKQpAQCAtNTczLDk0ICs1NzEsMzIgQEAgU3RyaW5nIFZhbHVlOjp0b0pT
T05TdHJpbmcoKSBjb25zdAogICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKIH0KIAotYm9v
bCBWYWx1ZTo6YXNCb29sZWFuKGJvb2wmIG91dHB1dCkgY29uc3QKK09wdGlvbmFsPGJvb2w+IFZh
bHVlOjphc0Jvb2xlYW4oKSBjb25zdAogewogICAgIGlmICh0eXBlKCkgIT0gVHlwZTo6Qm9vbGVh
bikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgb3V0cHV0ID0gbV92YWx1ZS5ib29sZWFu
OwotICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHJl
dHVybiBtX3ZhbHVlLmJvb2xlYW47CiB9CiAKLWJvb2wgVmFsdWU6OmFzRG91YmxlKGRvdWJsZSYg
b3V0cHV0KSBjb25zdAorT3B0aW9uYWw8ZG91YmxlPiBWYWx1ZTo6YXNEb3VibGUoKSBjb25zdAog
ewotICAgIGlmICh0eXBlKCkgIT0gVHlwZTo6RG91YmxlKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBvdXRwdXQgPSBtX3ZhbHVlLm51bWJlcjsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBp
ZiAodHlwZSgpICE9IFR5cGU6OkRvdWJsZSAmJiB0eXBlKCkgIT0gVHlwZTo6SW50ZWdlcikKKyAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICByZXR1cm4gbV92YWx1ZS5udW1iZXI7CiB9
CiAKLWJvb2wgVmFsdWU6OmFzRG91YmxlKGZsb2F0JiBvdXRwdXQpIGNvbnN0CitPcHRpb25hbDxp
bnQ+IFZhbHVlOjphc0ludGVnZXIoKSBjb25zdAogewotICAgIGlmICh0eXBlKCkgIT0gVHlwZTo6
RG91YmxlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBvdXRwdXQgPSBzdGF0aWNfY2Fz
dDxmbG9hdD4obV92YWx1ZS5udW1iZXIpOwotICAgIHJldHVybiB0cnVlOworICAgIGlmICh0eXBl
KCkgIT0gVHlwZTo6RG91YmxlICYmIHR5cGUoKSAhPSBUeXBlOjpJbnRlZ2VyKQorICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KG1fdmFsdWUu
bnVtYmVyKTsKIH0KIAotYm9vbCBWYWx1ZTo6YXNJbnRlZ2VyKGludCYgb3V0cHV0KSBjb25zdAot
ewotICAgIGlmICh0eXBlKCkgIT0gVHlwZTo6SW50ZWdlciAmJiB0eXBlKCkgIT0gVHlwZTo6RG91
YmxlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBvdXRwdXQgPSBzdGF0aWNfY2FzdDxp
bnQ+KG1fdmFsdWUubnVtYmVyKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBWYWx1ZTo6
YXNJbnRlZ2VyKHVuc2lnbmVkJiBvdXRwdXQpIGNvbnN0Ci17Ci0gICAgaWYgKHR5cGUoKSAhPSBU
eXBlOjpJbnRlZ2VyICYmIHR5cGUoKSAhPSBUeXBlOjpEb3VibGUpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIG91dHB1dCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX3ZhbHVlLm51bWJl
cik7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgVmFsdWU6OmFzSW50ZWdlcihsb25nJiBv
dXRwdXQpIGNvbnN0Ci17Ci0gICAgaWYgKHR5cGUoKSAhPSBUeXBlOjpJbnRlZ2VyICYmIHR5cGUo
KSAhPSBUeXBlOjpEb3VibGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIG91dHB1dCA9
IHN0YXRpY19jYXN0PGxvbmc+KG1fdmFsdWUubnVtYmVyKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotYm9vbCBWYWx1ZTo6YXNJbnRlZ2VyKGxvbmcgbG9uZyYgb3V0cHV0KSBjb25zdAotewotICAg
IGlmICh0eXBlKCkgIT0gVHlwZTo6SW50ZWdlciAmJiB0eXBlKCkgIT0gVHlwZTo6RG91YmxlKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBvdXRwdXQgPSBzdGF0aWNfY2FzdDxsb25nIGxv
bmc+KG1fdmFsdWUubnVtYmVyKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBWYWx1ZTo6
YXNJbnRlZ2VyKHVuc2lnbmVkIGxvbmcmIG91dHB1dCkgY29uc3QKLXsKLSAgICBpZiAodHlwZSgp
ICE9IFR5cGU6OkludGVnZXIgJiYgdHlwZSgpICE9IFR5cGU6OkRvdWJsZSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgb3V0cHV0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4obV92
YWx1ZS5udW1iZXIpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFZhbHVlOjphc0ludGVn
ZXIodW5zaWduZWQgbG9uZyBsb25nJiBvdXRwdXQpIGNvbnN0Ci17Ci0gICAgaWYgKHR5cGUoKSAh
PSBUeXBlOjpJbnRlZ2VyICYmIHR5cGUoKSAhPSBUeXBlOjpEb3VibGUpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIG91dHB1dCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4o
bV92YWx1ZS5udW1iZXIpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFZhbHVlOjphc1N0
cmluZyhTdHJpbmcmIG91dHB1dCkgY29uc3QKK1N0cmluZyBWYWx1ZTo6YXNTdHJpbmcoKSBjb25z
dAogewogICAgIGlmICh0eXBlKCkgIT0gVHlwZTo6U3RyaW5nKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBvdXRwdXQgPSBtX3ZhbHVlLnN0cmluZzsKLSAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgcmV0dXJuIG51bGxTdHJpbmcoKTsKKyAgICByZXR1cm4gbV92YWx1ZS5zdHJpbmc7CiB9
CiAKIHZvaWQgVmFsdWU6OndyaXRlSlNPTihTdHJpbmdCdWlsZGVyJiBvdXRwdXQpIGNvbnN0CkBA
IC03MDMsNzYgKzYzOSw3NCBAQCBPYmplY3RCYXNlOjp+T2JqZWN0QmFzZSgpCiB7CiB9CiAKLWJv
b2wgT2JqZWN0QmFzZTo6YXNPYmplY3QoUmVmUHRyPE9iamVjdD4mIG91dHB1dCkKK1JlZlB0cjxP
YmplY3Q+IE9iamVjdEJhc2U6OmFzT2JqZWN0KCkKIHsKICAgICBDT01QSUxFX0FTU0VSVChzaXpl
b2YoT2JqZWN0KSA9PSBzaXplb2YoT2JqZWN0QmFzZSksIGNhbm5vdF9jYXN0KTsKLQotICAgIG91
dHB1dCA9IHN0YXRpY19jYXN0PE9iamVjdCo+KHRoaXMpOwotICAgIHJldHVybiB0cnVlOwotfQot
Ci1PYmplY3QqIE9iamVjdEJhc2U6Om9wZW5BY2Nlc3NvcnMoKQotewotICAgIENPTVBJTEVfQVNT
RVJUKHNpemVvZihPYmplY3QpID09IHNpemVvZihPYmplY3RCYXNlKSwgY2Fubm90X2Nhc3QpOwot
CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PE9iamVjdCo+KHRoaXMpOwogfQogCiBzaXplX3QgT2Jq
ZWN0QmFzZTo6bWVtb3J5Q29zdCgpIGNvbnN0CiB7CiAgICAgc2l6ZV90IG1lbW9yeUNvc3QgPSBW
YWx1ZTo6bWVtb3J5Q29zdCgpOwotICAgIGZvciAoY29uc3QgYXV0byYgZW50cnkgOiBtX21hcCkg
ewotICAgICAgICBtZW1vcnlDb3N0ICs9IGVudHJ5LmtleS5zaXplSW5CeXRlcygpOwotICAgICAg
ICBpZiAoZW50cnkudmFsdWUpCi0gICAgICAgICAgICBtZW1vcnlDb3N0ICs9IGVudHJ5LnZhbHVl
LT5tZW1vcnlDb3N0KCk7Ci0gICAgfQorICAgIGZvciAoY29uc3QgYXV0byYgZW50cnkgOiBtX21h
cCkKKyAgICAgICAgbWVtb3J5Q29zdCArPSBlbnRyeS5rZXkuc2l6ZUluQnl0ZXMoKSArIGVudHJ5
LnZhbHVlLT5tZW1vcnlDb3N0KCk7CiAgICAgcmV0dXJuIG1lbW9yeUNvc3Q7CiB9CiAKLWJvb2wg
T2JqZWN0QmFzZTo6Z2V0Qm9vbGVhbihjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wmIG91dHB1dCkg
Y29uc3QKK09wdGlvbmFsPGJvb2w+IE9iamVjdEJhc2U6OmdldEJvb2xlYW4oY29uc3QgU3RyaW5n
JiBuYW1lKSBjb25zdAogewotICAgIFJlZlB0cjxWYWx1ZT4gdmFsdWU7Ci0gICAgaWYgKCFnZXRW
YWx1ZShuYW1lLCB2YWx1ZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB2
YWx1ZS0+YXNCb29sZWFuKG91dHB1dCk7CisgICAgYXV0byB2YWx1ZSA9IGdldFZhbHVlKG5hbWUp
OworICAgIGlmICghdmFsdWUpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgcmV0
dXJuIHZhbHVlLT5hc0Jvb2xlYW4oKTsKIH0KIAotYm9vbCBPYmplY3RCYXNlOjpnZXRTdHJpbmco
Y29uc3QgU3RyaW5nJiBuYW1lLCBTdHJpbmcmIG91dHB1dCkgY29uc3QKK09wdGlvbmFsPGRvdWJs
ZT4gT2JqZWN0QmFzZTo6Z2V0RG91YmxlKGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3QKIHsKLSAg
ICBSZWZQdHI8VmFsdWU+IHZhbHVlOwotICAgIGlmICghZ2V0VmFsdWUobmFtZSwgdmFsdWUpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gdmFsdWUtPmFzU3RyaW5nKG91dHB1
dCk7CisgICAgYXV0byB2YWx1ZSA9IGdldFZhbHVlKG5hbWUpOworICAgIGlmICghdmFsdWUpCisg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgcmV0dXJuIHZhbHVlLT5hc0RvdWJsZSgp
OwogfQogCi1ib29sIE9iamVjdEJhc2U6OmdldE9iamVjdChjb25zdCBTdHJpbmcmIG5hbWUsIFJl
ZlB0cjxPYmplY3Q+JiBvdXRwdXQpIGNvbnN0CitPcHRpb25hbDxpbnQ+IE9iamVjdEJhc2U6Omdl
dEludGVnZXIoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdAogewotICAgIFJlZlB0cjxWYWx1ZT4g
dmFsdWU7Ci0gICAgaWYgKCFnZXRWYWx1ZShuYW1lLCB2YWx1ZSkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIHJldHVybiB2YWx1ZS0+YXNPYmplY3Qob3V0cHV0KTsKKyAgICBhdXRvIHZh
bHVlID0gZ2V0VmFsdWUobmFtZSk7CisgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKKyAgICByZXR1cm4gdmFsdWUtPmFzSW50ZWdlcigpOwogfQogCi1ib29sIE9i
amVjdEJhc2U6OmdldEFycmF5KGNvbnN0IFN0cmluZyYgbmFtZSwgUmVmUHRyPEFycmF5PiYgb3V0
cHV0KSBjb25zdAorU3RyaW5nIE9iamVjdEJhc2U6OmdldFN0cmluZyhjb25zdCBTdHJpbmcmIG5h
bWUpIGNvbnN0CiB7Ci0gICAgUmVmUHRyPFZhbHVlPiB2YWx1ZTsKLSAgICBpZiAoIWdldFZhbHVl
KG5hbWUsIHZhbHVlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHZhbHVl
LT5hc0FycmF5KG91dHB1dCk7CisgICAgYXV0byB2YWx1ZSA9IGdldFZhbHVlKG5hbWUpOworICAg
IGlmICghdmFsdWUpCisgICAgICAgIHJldHVybiBudWxsU3RyaW5nKCk7CisgICAgcmV0dXJuIHZh
bHVlLT5hc1N0cmluZygpOwogfQogCi1ib29sIE9iamVjdEJhc2U6OmdldFZhbHVlKGNvbnN0IFN0
cmluZyYgbmFtZSwgUmVmUHRyPFZhbHVlPiYgb3V0cHV0KSBjb25zdAorUmVmUHRyPE9iamVjdD4g
T2JqZWN0QmFzZTo6Z2V0T2JqZWN0KGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3QKIHsKLSAgICBE
aWN0aW9uYXJ5Ojpjb25zdF9pdGVyYXRvciBmaW5kUmVzdWx0ID0gbV9tYXAuZmluZChuYW1lKTsK
KyAgICBhdXRvIHZhbHVlID0gZ2V0VmFsdWUobmFtZSk7CisgICAgaWYgKCF2YWx1ZSkKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIHZhbHVlLT5hc09iamVjdCgpOworfQorCitS
ZWZQdHI8QXJyYXk+IE9iamVjdEJhc2U6OmdldEFycmF5KGNvbnN0IFN0cmluZyYgbmFtZSkgY29u
c3QKK3sKKyAgICBhdXRvIHZhbHVlID0gZ2V0VmFsdWUobmFtZSk7CisgICAgaWYgKCF2YWx1ZSkK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIHZhbHVlLT5hc0FycmF5KCk7Cit9
CisKK1JlZlB0cjxWYWx1ZT4gT2JqZWN0QmFzZTo6Z2V0VmFsdWUoY29uc3QgU3RyaW5nJiBuYW1l
KSBjb25zdAoreworICAgIGF1dG8gZmluZFJlc3VsdCA9IG1fbWFwLmZpbmQobmFtZSk7CiAgICAg
aWYgKGZpbmRSZXN1bHQgPT0gbV9tYXAuZW5kKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIG91dHB1dCA9IGZpbmRSZXN1bHQtPnZhbHVlOwotICAgIHJldHVybiB0cnVlOworICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gZmluZFJlc3VsdC0+dmFsdWUuY29weVJlZigp
OwogfQogCiB2b2lkIE9iamVjdEJhc2U6OnJlbW92ZShjb25zdCBTdHJpbmcmIG5hbWUpCkBAIC03
OTgsOCArNzMyLDYgQEAgdm9pZCBPYmplY3RCYXNlOjp3cml0ZUpTT04oU3RyaW5nQnVpbGRlciYg
b3V0cHV0KSBjb25zdAogCiBPYmplY3RCYXNlOjpPYmplY3RCYXNlKCkKICAgICA6IFZhbHVlKFR5
cGU6Ok9iamVjdCkKLSAgICAsIG1fbWFwKCkKLSAgICAsIG1fb3JkZXIoKQogewogfQogCkBAIC04
MDcsMTcgKzczOSwxNiBAQCBBcnJheUJhc2U6On5BcnJheUJhc2UoKQogewogfQogCi1ib29sIEFy
cmF5QmFzZTo6YXNBcnJheShSZWZQdHI8QXJyYXk+JiBvdXRwdXQpCitSZWZQdHI8QXJyYXk+IEFy
cmF5QmFzZTo6YXNBcnJheSgpCiB7CiAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKEFycmF5QmFz
ZSkgPT0gc2l6ZW9mKEFycmF5KSwgY2Fubm90X2Nhc3QpOwotICAgIG91dHB1dCA9IHN0YXRpY19j
YXN0PEFycmF5Kj4odGhpcyk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHN0YXRpY19j
YXN0PEFycmF5Kj4odGhpcyk7CiB9CiAKIHZvaWQgQXJyYXlCYXNlOjp3cml0ZUpTT04oU3RyaW5n
QnVpbGRlciYgb3V0cHV0KSBjb25zdAogewogICAgIG91dHB1dC5hcHBlbmQoJ1snKTsKLSAgICBm
b3IgKFZlY3RvcjxSZWZQdHI8VmFsdWU+Pjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX21hcC5iZWdp
bigpOyBpdCAhPSBtX21hcC5lbmQoKTsgKytpdCkgeworICAgIGZvciAoYXV0byBpdCA9IG1fbWFw
LmJlZ2luKCk7IGl0ICE9IG1fbWFwLmVuZCgpOyArK2l0KSB7CiAgICAgICAgIGlmIChpdCAhPSBt
X21hcC5iZWdpbigpKQogICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgnLCcpOwogICAgICAgICAo
Kml0KS0+d3JpdGVKU09OKG91dHB1dCk7CkBAIC04MjcsMTEgKzc1OCwxMCBAQCB2b2lkIEFycmF5
QmFzZTo6d3JpdGVKU09OKFN0cmluZ0J1aWxkZXImIG91dHB1dCkgY29uc3QKIAogQXJyYXlCYXNl
OjpBcnJheUJhc2UoKQogICAgIDogVmFsdWUoVHlwZTo6QXJyYXkpCi0gICAgLCBtX21hcCgpCiB7
CiB9CiAKLVJlZlB0cjxWYWx1ZT4gQXJyYXlCYXNlOjpnZXQoc2l6ZV90IGluZGV4KSBjb25zdAor
UmVmPFZhbHVlPiBBcnJheUJhc2U6OmdldChzaXplX3QgaW5kZXgpIGNvbnN0CiB7CiAgICAgUkVM
RUFTRV9BU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihpbmRleCA8IG1fbWFwLnNpemUo
KSk7CiAgICAgcmV0dXJuIG1fbWFwW2luZGV4XTsKQEAgLTg1MCwxMCArNzgwLDggQEAgUmVmPEFy
cmF5PiBBcnJheTo6Y3JlYXRlKCkKIHNpemVfdCBBcnJheUJhc2U6Om1lbW9yeUNvc3QoKSBjb25z
dAogewogICAgIHNpemVfdCBtZW1vcnlDb3N0ID0gVmFsdWU6Om1lbW9yeUNvc3QoKTsKLSAgICBm
b3IgKGNvbnN0IGF1dG8mIGl0ZW0gOiBtX21hcCkgewotICAgICAgICBpZiAoaXRlbSkKLSAgICAg
ICAgICAgIG1lbW9yeUNvc3QgKz0gaXRlbS0+bWVtb3J5Q29zdCgpOwotICAgIH0KKyAgICBmb3Ig
KGNvbnN0IGF1dG8mIGl0ZW0gOiBtX21hcCkKKyAgICAgICAgbWVtb3J5Q29zdCArPSBpdGVtLT5t
ZW1vcnlDb3N0KCk7CiAgICAgcmV0dXJuIG1lbW9yeUNvc3Q7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XVEYvd3RmL0pTT05WYWx1ZXMuaCBiL1NvdXJjZS9XVEYvd3RmL0pTT05WYWx1ZXMuaApp
bmRleCBlYmFiYzQ0OWY4ODBiMzlkM2ZhZGU3OGNkNjFiMWM0ZDVlMGU2ODYzLi40MzA3NDUzZDlj
YzhmODhjYzE2OTljZDg4NTcyMTY4NzdmZGM5YjA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0
Zi9KU09OVmFsdWVzLmgKKysrIGIvU291cmNlL1dURi93dGYvSlNPTlZhbHVlcy5oCkBAIC05Miwy
MiArOTIsMTUgQEAgcHVibGljOgogICAgIFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlw
ZTsgfQogICAgIGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1cm4gbV90eXBlID09IFR5cGU6Ok51
bGw7IH0KIAotICAgIGJvb2wgYXNCb29sZWFuKGJvb2wmKSBjb25zdDsKLSAgICBib29sIGFzSW50
ZWdlcihpbnQmKSBjb25zdDsKLSAgICBib29sIGFzSW50ZWdlcih1bnNpZ25lZCYpIGNvbnN0Owot
ICAgIGJvb2wgYXNJbnRlZ2VyKGxvbmcmKSBjb25zdDsKLSAgICBib29sIGFzSW50ZWdlcihsb25n
IGxvbmcmKSBjb25zdDsKLSAgICBib29sIGFzSW50ZWdlcih1bnNpZ25lZCBsb25nJikgY29uc3Q7
Ci0gICAgYm9vbCBhc0ludGVnZXIodW5zaWduZWQgbG9uZyBsb25nJikgY29uc3Q7Ci0gICAgYm9v
bCBhc0RvdWJsZShkb3VibGUmKSBjb25zdDsKLSAgICBib29sIGFzRG91YmxlKGZsb2F0JikgY29u
c3Q7Ci0gICAgYm9vbCBhc1N0cmluZyhTdHJpbmcmKSBjb25zdDsKLSAgICBib29sIGFzVmFsdWUo
UmVmUHRyPFZhbHVlPiYpOworICAgIE9wdGlvbmFsPGJvb2w+IGFzQm9vbGVhbigpIGNvbnN0Owor
ICAgIE9wdGlvbmFsPGludD4gYXNJbnRlZ2VyKCkgY29uc3Q7CisgICAgT3B0aW9uYWw8ZG91Ymxl
PiBhc0RvdWJsZSgpIGNvbnN0OworICAgIFN0cmluZyBhc1N0cmluZygpIGNvbnN0OworICAgIFJl
ZlB0cjxWYWx1ZT4gYXNWYWx1ZSgpOworICAgIHZpcnR1YWwgUmVmUHRyPE9iamVjdD4gYXNPYmpl
Y3QoKTsKKyAgICB2aXJ0dWFsIFJlZlB0cjxBcnJheT4gYXNBcnJheSgpOwogCi0gICAgdmlydHVh
bCBib29sIGFzT2JqZWN0KFJlZlB0cjxPYmplY3Q+Jik7Ci0gICAgdmlydHVhbCBib29sIGFzQXJy
YXkoUmVmUHRyPEFycmF5PiYpOwotCi0gICAgc3RhdGljIGJvb2wgcGFyc2VKU09OKGNvbnN0IFN0
cmluZyYganNvbklucHV0LCBSZWZQdHI8VmFsdWU+JiBvdXRwdXQpOworICAgIHN0YXRpYyBSZWZQ
dHI8VmFsdWU+IHBhcnNlSlNPTihjb25zdCBTdHJpbmcmKTsKICAgICBzdGF0aWMgdm9pZCBlc2Nh
cGVTdHJpbmcoU3RyaW5nQnVpbGRlciYsIFN0cmluZ1ZpZXcpOwogCiAgICAgU3RyaW5nIHRvSlNP
TlN0cmluZygpIGNvbnN0OwpAQCAtMTcyLDk1ICsxNjUsNjMgQEAgcHJpdmF0ZToKIAogY2xhc3Mg
V1RGX0VYUE9SVF9QUklWQVRFIE9iamVjdEJhc2UgOiBwdWJsaWMgVmFsdWUgewogcHJpdmF0ZToK
LSAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8VmFsdWU+PiBEaWN0aW9uYXJ5Owor
ICAgIHVzaW5nIERhdGFTdG9yYWdlID0gSGFzaE1hcDxTdHJpbmcsIFJlZjxWYWx1ZT4+OworICAg
IHVzaW5nIE9yZGVyU3RvcmFnZSA9IFZlY3RvcjxTdHJpbmc+OwogCiBwdWJsaWM6Ci0gICAgdHlw
ZWRlZiBEaWN0aW9uYXJ5OjppdGVyYXRvciBpdGVyYXRvcjsKLSAgICB0eXBlZGVmIERpY3Rpb25h
cnk6OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOworICAgIHVzaW5nIGl0ZXJhdG9yID0g
RGF0YVN0b3JhZ2U6Oml0ZXJhdG9yOworICAgIHVzaW5nIGNvbnN0X2l0ZXJhdG9yID0gRGF0YVN0
b3JhZ2U6OmNvbnN0X2l0ZXJhdG9yOwogCi0gICAgT2JqZWN0KiBvcGVuQWNjZXNzb3JzKCk7Cisg
ICAgUmVmUHRyPE9iamVjdD4gYXNPYmplY3QoKSBmaW5hbDsKIAogICAgIHNpemVfdCBtZW1vcnlD
b3N0KCkgY29uc3QgZmluYWw7CiAKIHByb3RlY3RlZDoKICAgICB+T2JqZWN0QmFzZSgpIG92ZXJy
aWRlOwogCi0gICAgYm9vbCBhc09iamVjdChSZWZQdHI8T2JqZWN0PiYgb3V0cHV0KSBvdmVycmlk
ZTsKLQogICAgIC8vIEZJWE1FOiB1c2UgdGVtcGxhdGVzIHRvIHJlZHVjZSB0aGUgYW1vdW50IG9m
IGR1cGxpY2F0ZWQgc2V0KigpIG1ldGhvZHMuCiAgICAgdm9pZCBzZXRCb29sZWFuKGNvbnN0IFN0
cmluZyYgbmFtZSwgYm9vbCk7CiAgICAgdm9pZCBzZXRJbnRlZ2VyKGNvbnN0IFN0cmluZyYgbmFt
ZSwgaW50KTsKICAgICB2b2lkIHNldERvdWJsZShjb25zdCBTdHJpbmcmIG5hbWUsIGRvdWJsZSk7
CiAgICAgdm9pZCBzZXRTdHJpbmcoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmKTsK
LSAgICB2b2lkIHNldFZhbHVlKGNvbnN0IFN0cmluZyYgbmFtZSwgUmVmUHRyPFZhbHVlPiYmKTsK
LSAgICB2b2lkIHNldE9iamVjdChjb25zdCBTdHJpbmcmIG5hbWUsIFJlZlB0cjxPYmplY3RCYXNl
PiYmKTsKLSAgICB2b2lkIHNldEFycmF5KGNvbnN0IFN0cmluZyYgbmFtZSwgUmVmUHRyPEFycmF5
QmFzZT4mJik7CisgICAgdm9pZCBzZXRWYWx1ZShjb25zdCBTdHJpbmcmIG5hbWUsIFJlZjxWYWx1
ZT4mJik7CisgICAgdm9pZCBzZXRPYmplY3QoY29uc3QgU3RyaW5nJiBuYW1lLCBSZWY8T2JqZWN0
QmFzZT4mJik7CisgICAgdm9pZCBzZXRBcnJheShjb25zdCBTdHJpbmcmIG5hbWUsIFJlZjxBcnJh
eUJhc2U+JiYpOwogCiAgICAgaXRlcmF0b3IgZmluZChjb25zdCBTdHJpbmcmIG5hbWUpOwogICAg
IGNvbnN0X2l0ZXJhdG9yIGZpbmQoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdDsKIAotICAgIC8v
IEZJWE1FOiB1c2UgdGVtcGxhdGVzIHRvIHJlZHVjZSB0aGUgYW1vdW50IG9mIGR1cGxpY2F0ZWQg
Z2V0KigpIG1ldGhvZHMuCi0gICAgYm9vbCBnZXRCb29sZWFuKGNvbnN0IFN0cmluZyYgbmFtZSwg
Ym9vbCYgb3V0cHV0KSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBUPiBib29sIGdldERvdWJs
ZShjb25zdCBTdHJpbmcmIG5hbWUsIFQmIG91dHB1dCkgY29uc3QKLSAgICB7Ci0gICAgICAgIFJl
ZlB0cjxWYWx1ZT4gdmFsdWU7Ci0gICAgICAgIGlmICghZ2V0VmFsdWUobmFtZSwgdmFsdWUpKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIHJldHVybiB2YWx1ZS0+YXNEb3Vi
bGUob3V0cHV0KTsKLSAgICB9Ci0gICAgdGVtcGxhdGU8Y2xhc3MgVD4gYm9vbCBnZXRJbnRlZ2Vy
KGNvbnN0IFN0cmluZyYgbmFtZSwgVCYgb3V0cHV0KSBjb25zdAotICAgIHsKLSAgICAgICAgUmVm
UHRyPFZhbHVlPiB2YWx1ZTsKLSAgICAgICAgaWYgKCFnZXRWYWx1ZShuYW1lLCB2YWx1ZSkpCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgcmV0dXJuIHZhbHVlLT5hc0ludGVn
ZXIob3V0cHV0KTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTxjbGFzcyBUPiBPcHRpb25hbDxUPiBn
ZXROdW1iZXIoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdAotICAgIHsKLSAgICAgICAgUmVmUHRy
PFZhbHVlPiB2YWx1ZTsKLSAgICAgICAgaWYgKCFnZXRWYWx1ZShuYW1lLCB2YWx1ZSkpCi0gICAg
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgICAgIFQgcmVzdWx0OwotICAgICAg
ICBpZiAoIXZhbHVlLT5hc0RvdWJsZShyZXN1bHQpKQotICAgICAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKLQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIGJvb2wgZ2V0
U3RyaW5nKGNvbnN0IFN0cmluZyYgbmFtZSwgU3RyaW5nJiBvdXRwdXQpIGNvbnN0OwotICAgIGJv
b2wgZ2V0T2JqZWN0KGNvbnN0IFN0cmluZyYgbmFtZSwgUmVmUHRyPE9iamVjdD4mKSBjb25zdDsK
LSAgICBib29sIGdldEFycmF5KGNvbnN0IFN0cmluZyYgbmFtZSwgUmVmUHRyPEFycmF5PiYpIGNv
bnN0OwotICAgIGJvb2wgZ2V0VmFsdWUoY29uc3QgU3RyaW5nJiBuYW1lLCBSZWZQdHI8VmFsdWU+
JikgY29uc3Q7CisgICAgT3B0aW9uYWw8Ym9vbD4gZ2V0Qm9vbGVhbihjb25zdCBTdHJpbmcmIG5h
bWUpIGNvbnN0OworICAgIE9wdGlvbmFsPGRvdWJsZT4gZ2V0RG91YmxlKGNvbnN0IFN0cmluZyYg
bmFtZSkgY29uc3Q7CisgICAgT3B0aW9uYWw8aW50PiBnZXRJbnRlZ2VyKGNvbnN0IFN0cmluZyYg
bmFtZSkgY29uc3Q7CisgICAgU3RyaW5nIGdldFN0cmluZyhjb25zdCBTdHJpbmcmIG5hbWUpIGNv
bnN0OworICAgIFJlZlB0cjxPYmplY3Q+IGdldE9iamVjdChjb25zdCBTdHJpbmcmIG5hbWUpIGNv
bnN0OworICAgIFJlZlB0cjxBcnJheT4gZ2V0QXJyYXkoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25z
dDsKKyAgICBSZWZQdHI8VmFsdWU+IGdldFZhbHVlKGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3Q7
CiAKICAgICB2b2lkIHJlbW92ZShjb25zdCBTdHJpbmcmIG5hbWUpOwogCi0gICAgdm9pZCB3cml0
ZUpTT04oU3RyaW5nQnVpbGRlciYgb3V0cHV0KSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIHdy
aXRlSlNPTihTdHJpbmdCdWlsZGVyJiBvdXRwdXQpIGNvbnN0IGZpbmFsOwogCiAgICAgaXRlcmF0
b3IgYmVnaW4oKSB7IHJldHVybiBtX21hcC5iZWdpbigpOyB9CiAgICAgaXRlcmF0b3IgZW5kKCkg
eyByZXR1cm4gbV9tYXAuZW5kKCk7IH0KICAgICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0
IHsgcmV0dXJuIG1fbWFwLmJlZ2luKCk7IH0KICAgICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25z
dCB7IHJldHVybiBtX21hcC5lbmQoKTsgfQogCi0gICAgaW50IHNpemUoKSBjb25zdCB7IHJldHVy
biBtX21hcC5zaXplKCk7IH0KKyAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9t
YXAuc2l6ZSgpOyB9CiAKIHByb3RlY3RlZDoKICAgICBPYmplY3RCYXNlKCk7CiAKIHByaXZhdGU6
Ci0gICAgRGljdGlvbmFyeSBtX21hcDsKLSAgICBWZWN0b3I8U3RyaW5nPiBtX29yZGVyOworICAg
IERhdGFTdG9yYWdlIG1fbWFwOworICAgIE9yZGVyU3RvcmFnZSBtX29yZGVyOwogfTsKIAogY2xh
c3MgT2JqZWN0IDogcHVibGljIE9iamVjdEJhc2UgewogcHVibGljOgogICAgIHN0YXRpYyBXVEZf
RVhQT1JUX1BSSVZBVEUgUmVmPE9iamVjdD4gY3JlYXRlKCk7CiAKLSAgICB1c2luZyBPYmplY3RC
YXNlOjphc09iamVjdDsKLQogICAgIC8vIFRoaXMgY2xhc3MgZXhwZWN0ZWQgbm9uLWN5Y2xpYyB2
YWx1ZXMsIGFzIHdlIGNhbm5vdCBzZXJpYWxpemUgY3ljbGVzIGluIEpTT04uCiAgICAgdXNpbmcg
T2JqZWN0QmFzZTo6c2V0Qm9vbGVhbjsKICAgICB1c2luZyBPYmplY3RCYXNlOjpzZXRJbnRlZ2Vy
OwpAQCAtMjc0LDcgKzIzNSw2IEBAIHB1YmxpYzoKICAgICB1c2luZyBPYmplY3RCYXNlOjpnZXRC
b29sZWFuOwogICAgIHVzaW5nIE9iamVjdEJhc2U6OmdldEludGVnZXI7CiAgICAgdXNpbmcgT2Jq
ZWN0QmFzZTo6Z2V0RG91YmxlOwotICAgIHVzaW5nIE9iamVjdEJhc2U6OmdldE51bWJlcjsKICAg
ICB1c2luZyBPYmplY3RCYXNlOjpnZXRTdHJpbmc7CiAgICAgdXNpbmcgT2JqZWN0QmFzZTo6Z2V0
T2JqZWN0OwogICAgIHVzaW5nIE9iamVjdEJhc2U6OmdldEFycmF5OwpAQCAtMjkwLDQ5ICsyNTAs
NDkgQEAgcHVibGljOgogCiAKIGNsYXNzIFdURl9FWFBPUlRfUFJJVkFURSBBcnJheUJhc2UgOiBw
dWJsaWMgVmFsdWUgeworcHJpdmF0ZToKKyAgICB1c2luZyBEYXRhU3RvcmFnZSA9IFZlY3RvcjxS
ZWY8VmFsdWU+PjsKKwogcHVibGljOgotICAgIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxWYWx1ZT4+
OjppdGVyYXRvciBpdGVyYXRvcjsKLSAgICB0eXBlZGVmIFZlY3RvcjxSZWZQdHI8VmFsdWU+Pjo6
Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CisgICAgdXNpbmcgaXRlcmF0b3IgPSBEYXRh
U3RvcmFnZTo6aXRlcmF0b3I7CisgICAgdXNpbmcgY29uc3RfaXRlcmF0b3IgPSBEYXRhU3RvcmFn
ZTo6Y29uc3RfaXRlcmF0b3I7CiAKLSAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7IHJldHVy
biBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9tYXAuc2l6ZSgpKTsgfQorICAgIHNpemVfdCBsZW5n
dGgoKSBjb25zdCB7IHJldHVybiBtX21hcC5zaXplKCk7IH0KIAotICAgIFJlZlB0cjxWYWx1ZT4g
Z2V0KHNpemVfdCBpbmRleCkgY29uc3Q7CisgICAgUmVmPFZhbHVlPiBnZXQoc2l6ZV90IGluZGV4
KSBjb25zdDsKIAogICAgIHNpemVfdCBtZW1vcnlDb3N0KCkgY29uc3QgZmluYWw7CiAKKyAgICBS
ZWZQdHI8QXJyYXk+IGFzQXJyYXkoKSBmaW5hbDsKKwogcHJvdGVjdGVkOgogICAgIH5BcnJheUJh
c2UoKSBvdmVycmlkZTsKIAotICAgIGJvb2wgYXNBcnJheShSZWZQdHI8QXJyYXk+Jikgb3ZlcnJp
ZGU7Ci0KICAgICB2b2lkIHB1c2hCb29sZWFuKGJvb2wpOwogICAgIHZvaWQgcHVzaEludGVnZXIo
aW50KTsKICAgICB2b2lkIHB1c2hEb3VibGUoZG91YmxlKTsKICAgICB2b2lkIHB1c2hTdHJpbmco
Y29uc3QgU3RyaW5nJik7Ci0gICAgdm9pZCBwdXNoVmFsdWUoUmVmUHRyPFZhbHVlPiYmKTsKLSAg
ICB2b2lkIHB1c2hPYmplY3QoUmVmUHRyPE9iamVjdEJhc2U+JiYpOwotICAgIHZvaWQgcHVzaEFy
cmF5KFJlZlB0cjxBcnJheUJhc2U+JiYpOwotCi0gICAgdm9pZCB3cml0ZUpTT04oU3RyaW5nQnVp
bGRlciYgb3V0cHV0KSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIHB1c2hWYWx1ZShSZWY8VmFs
dWU+JiYpOworICAgIHZvaWQgcHVzaE9iamVjdChSZWY8T2JqZWN0QmFzZT4mJik7CisgICAgdm9p
ZCBwdXNoQXJyYXkoUmVmPEFycmF5QmFzZT4mJik7CiAKICAgICBpdGVyYXRvciBiZWdpbigpIHsg
cmV0dXJuIG1fbWFwLmJlZ2luKCk7IH0KICAgICBpdGVyYXRvciBlbmQoKSB7IHJldHVybiBtX21h
cC5lbmQoKTsgfQogICAgIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gbV9t
YXAuYmVnaW4oKTsgfQogICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1f
bWFwLmVuZCgpOyB9CisgICAgdm9pZCB3cml0ZUpTT04oU3RyaW5nQnVpbGRlciYgb3V0cHV0KSBj
b25zdCBmaW5hbDsKIAogcHJvdGVjdGVkOgogICAgIEFycmF5QmFzZSgpOwogCiBwcml2YXRlOgot
ICAgIFZlY3RvcjxSZWZQdHI8VmFsdWU+PiBtX21hcDsKKyAgICBEYXRhU3RvcmFnZSBtX21hcDsK
IH07CiAKLWNsYXNzIEFycmF5IDogcHVibGljIEFycmF5QmFzZSB7CitjbGFzcyBBcnJheSBmaW5h
bCA6IHB1YmxpYyBBcnJheUJhc2UgewogcHVibGljOgogICAgIHN0YXRpYyBXVEZfRVhQT1JUX1BS
SVZBVEUgUmVmPEFycmF5PiBjcmVhdGUoKTsKIAotICAgIHVzaW5nIEFycmF5QmFzZTo6YXNBcnJh
eTsKLQogICAgIC8vIFRoaXMgY2xhc3MgZXhwZWN0ZWQgbm9uLWN5Y2xpYyB2YWx1ZXMsIGFzIHdl
IGNhbm5vdCBzZXJpYWxpemUgY3ljbGVzIGluIEpTT04uCiAgICAgdXNpbmcgQXJyYXlCYXNlOjpw
dXNoQm9vbGVhbjsKICAgICB1c2luZyBBcnJheUJhc2U6OnB1c2hJbnRlZ2VyOwpAQCAtMzQ4LDcg
KzMwOCw2IEBAIHB1YmxpYzoKICAgICB1c2luZyBBcnJheUJhc2U6OmVuZDsKIH07CiAKLQogaW5s
aW5lIE9iamVjdEJhc2U6Oml0ZXJhdG9yIE9iamVjdEJhc2U6OmZpbmQoY29uc3QgU3RyaW5nJiBu
YW1lKQogewogICAgIHJldHVybiBtX21hcC5maW5kKG5hbWUpOwpAQCAtMzc5LDIzICszMzgsMjAg
QEAgaW5saW5lIHZvaWQgT2JqZWN0QmFzZTo6c2V0U3RyaW5nKGNvbnN0IFN0cmluZyYgbmFtZSwg
Y29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICBzZXRWYWx1ZShuYW1lLCBWYWx1ZTo6Y3JlYXRlKHZh
bHVlKSk7CiB9CiAKLWlubGluZSB2b2lkIE9iamVjdEJhc2U6OnNldFZhbHVlKGNvbnN0IFN0cmlu
ZyYgbmFtZSwgUmVmUHRyPFZhbHVlPiYmIHZhbHVlKQoraW5saW5lIHZvaWQgT2JqZWN0QmFzZTo6
c2V0VmFsdWUoY29uc3QgU3RyaW5nJiBuYW1lLCBSZWY8VmFsdWU+JiYgdmFsdWUpCiB7Ci0gICAg
QVNTRVJUKHZhbHVlKTsKICAgICBpZiAobV9tYXAuc2V0KG5hbWUsIFdURk1vdmUodmFsdWUpKS5p
c05ld0VudHJ5KQogICAgICAgICBtX29yZGVyLmFwcGVuZChuYW1lKTsKIH0KIAotaW5saW5lIHZv
aWQgT2JqZWN0QmFzZTo6c2V0T2JqZWN0KGNvbnN0IFN0cmluZyYgbmFtZSwgUmVmUHRyPE9iamVj
dEJhc2U+JiYgdmFsdWUpCitpbmxpbmUgdm9pZCBPYmplY3RCYXNlOjpzZXRPYmplY3QoY29uc3Qg
U3RyaW5nJiBuYW1lLCBSZWY8T2JqZWN0QmFzZT4mJiB2YWx1ZSkKIHsKLSAgICBBU1NFUlQodmFs
dWUpOwogICAgIGlmIChtX21hcC5zZXQobmFtZSwgV1RGTW92ZSh2YWx1ZSkpLmlzTmV3RW50cnkp
CiAgICAgICAgIG1fb3JkZXIuYXBwZW5kKG5hbWUpOwogfQogCi1pbmxpbmUgdm9pZCBPYmplY3RC
YXNlOjpzZXRBcnJheShjb25zdCBTdHJpbmcmIG5hbWUsIFJlZlB0cjxBcnJheUJhc2U+JiYgdmFs
dWUpCitpbmxpbmUgdm9pZCBPYmplY3RCYXNlOjpzZXRBcnJheShjb25zdCBTdHJpbmcmIG5hbWUs
IFJlZjxBcnJheUJhc2U+JiYgdmFsdWUpCiB7Ci0gICAgQVNTRVJUKHZhbHVlKTsKICAgICBpZiAo
bV9tYXAuc2V0KG5hbWUsIFdURk1vdmUodmFsdWUpKS5pc05ld0VudHJ5KQogICAgICAgICBtX29y
ZGVyLmFwcGVuZChuYW1lKTsKIH0KQEAgLTQyMCwyNiArMzc2LDIzIEBAIGlubGluZSB2b2lkIEFy
cmF5QmFzZTo6cHVzaFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgIG1fbWFwLmFwcGVu
ZChWYWx1ZTo6Y3JlYXRlKHZhbHVlKSk7CiB9CiAKLWlubGluZSB2b2lkIEFycmF5QmFzZTo6cHVz
aFZhbHVlKFJlZlB0cjxWYWx1ZT4mJiB2YWx1ZSkKK2lubGluZSB2b2lkIEFycmF5QmFzZTo6cHVz
aFZhbHVlKFJlZjxWYWx1ZT4mJiB2YWx1ZSkKIHsKLSAgICBBU1NFUlQodmFsdWUpOwogICAgIG1f
bWFwLmFwcGVuZChXVEZNb3ZlKHZhbHVlKSk7CiB9CiAKLWlubGluZSB2b2lkIEFycmF5QmFzZTo6
cHVzaE9iamVjdChSZWZQdHI8T2JqZWN0QmFzZT4mJiB2YWx1ZSkKK2lubGluZSB2b2lkIEFycmF5
QmFzZTo6cHVzaE9iamVjdChSZWY8T2JqZWN0QmFzZT4mJiB2YWx1ZSkKIHsKLSAgICBBU1NFUlQo
dmFsdWUpOwogICAgIG1fbWFwLmFwcGVuZChXVEZNb3ZlKHZhbHVlKSk7CiB9CiAKLWlubGluZSB2
b2lkIEFycmF5QmFzZTo6cHVzaEFycmF5KFJlZlB0cjxBcnJheUJhc2U+JiYgdmFsdWUpCitpbmxp
bmUgdm9pZCBBcnJheUJhc2U6OnB1c2hBcnJheShSZWY8QXJyYXlCYXNlPiYmIHZhbHVlKQogewot
ICAgIEFTU0VSVCh2YWx1ZSk7CiAgICAgbV9tYXAuYXBwZW5kKFdURk1vdmUodmFsdWUpKTsKIH0K
IAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KLWNsYXNzIEFycmF5T2YgOiBwdWJsaWMgQXJyYXlCYXNl
IHsKK2NsYXNzIEFycmF5T2YgZmluYWwgOiBwdWJsaWMgQXJyYXlCYXNlIHsKIHByaXZhdGU6CiAg
ICAgQXJyYXlPZigpIHsgfQogCkBAIC00NTAsNyArNDAzLDcgQEAgcHJpdmF0ZToKICAgICB9CiAK
IHB1YmxpYzoKLSAgICB2b2lkIGFkZEl0ZW0oUmVmUHRyPFQ+JiYgdmFsdWUpCisgICAgdm9pZCBh
ZGRJdGVtKFJlZjxUPiYmIHZhbHVlKQogICAgIHsKICAgICAgICAgY2FzdGVkQXJyYXkoKS5wdXNo
VmFsdWUoV1RGTW92ZSh2YWx1ZSkpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvYXBwbGljYXRpb25tYW5pZmVzdC9BcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXBwbGljYXRpb25tYW5pZmVzdC9BcHBsaWNhdGlv
bk1hbmlmZXN0UGFyc2VyLmNwcAppbmRleCA4ZGM3NmZhMmU1OWVhNjdlMDIxNzM4YzMxMWEzNTc3
ZjRkMzZlNjkxLi5mODhjYWRhNjYwZjM5YWRlZmEwMDZkMDk1ZWM1ODdmYjI5MzQ2MjBmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FwcGxpY2F0aW9ubWFuaWZlc3QvQXBwbGlj
YXRpb25NYW5pZmVzdFBhcnNlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBs
aWNhdGlvbm1hbmlmZXN0L0FwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXIuY3BwCkBAIC01NCwxNCAr
NTQsMTQgQEAgQXBwbGljYXRpb25NYW5pZmVzdCBBcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyOjpw
YXJzZU1hbmlmZXN0KGNvbnN0IFN0cmluZyYgdGV4dCwKIHsKICAgICBtX21hbmlmZXN0VVJMID0g
bWFuaWZlc3RVUkw7CiAKLSAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IGpzb25WYWx1ZTsKLSAgICBp
ZiAoIUpTT046OlZhbHVlOjpwYXJzZUpTT04odGV4dCwganNvblZhbHVlKSkgeworICAgIGF1dG8g
anNvblZhbHVlID0gSlNPTjo6VmFsdWU6OnBhcnNlSlNPTih0ZXh0KTsKKyAgICBpZiAoIWpzb25W
YWx1ZSkgewogICAgICAgICBsb2dEZXZlbG9wZXJXYXJuaW5nKCJUaGUgbWFuaWZlc3QgaXMgbm90
IHZhbGlkIEpTT04gZGF0YS4iX3MpOwogICAgICAgICBqc29uVmFsdWUgPSBKU09OOjpPYmplY3Q6
OmNyZWF0ZSgpOwogICAgIH0KIAotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG1hbmlmZXN0Owot
ICAgIGlmICghanNvblZhbHVlLT5hc09iamVjdChtYW5pZmVzdCkpIHsKKyAgICBhdXRvIG1hbmlm
ZXN0ID0ganNvblZhbHVlLT5hc09iamVjdCgpOworICAgIGlmICghbWFuaWZlc3QpIHsKICAgICAg
ICAgbG9nRGV2ZWxvcGVyV2FybmluZygiVGhlIG1hbmlmZXN0IGlzIG5vdCBhIEpTT04gdmFsdWUg
b2YgdHlwZSBcIm9iamVjdFwiLiJfcyk7CiAgICAgICAgIG1hbmlmZXN0ID0gSlNPTjo6T2JqZWN0
OjpjcmVhdGUoKTsKICAgICB9CkBAIC05NiwxMiArOTYsMTIgQEAgdm9pZCBBcHBsaWNhdGlvbk1h
bmlmZXN0UGFyc2VyOjpsb2dEZXZlbG9wZXJXYXJuaW5nKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkK
IAogVVJMIEFwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXI6OnBhcnNlU3RhcnRVUkwoY29uc3QgSlNP
Tjo6T2JqZWN0JiBtYW5pZmVzdCwgY29uc3QgVVJMJiBkb2N1bWVudFVSTCkKIHsKLSAgICBSZWZQ
dHI8SlNPTjo6VmFsdWU+IHZhbHVlOwotICAgIGlmICghbWFuaWZlc3QuZ2V0VmFsdWUoInN0YXJ0
X3VybCIsIHZhbHVlKSkKKyAgICBhdXRvIHZhbHVlID0gbWFuaWZlc3QuZ2V0VmFsdWUoInN0YXJ0
X3VybCJfcyk7CisgICAgaWYgKCF2YWx1ZSkKICAgICAgICAgcmV0dXJuIGRvY3VtZW50VVJMOwog
Ci0gICAgU3RyaW5nIHN0cmluZ1ZhbHVlOwotICAgIGlmICghdmFsdWUtPmFzU3RyaW5nKHN0cmlu
Z1ZhbHVlKSkgeworICAgIGF1dG8gc3RyaW5nVmFsdWUgPSB2YWx1ZS0+YXNTdHJpbmcoKTsKKyAg
ICBpZiAoIXN0cmluZ1ZhbHVlKSB7CiAgICAgICAgIGxvZ01hbmlmZXN0UHJvcGVydHlOb3RBU3Ry
aW5nKCJzdGFydF91cmwiX3MpOwogICAgICAgICByZXR1cm4gZG9jdW1lbnRVUkw7CiAgICAgfQpA
QCAtMTI3LDEyICsxMjcsMTIgQEAgVVJMIEFwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXI6OnBhcnNl
U3RhcnRVUkwoY29uc3QgSlNPTjo6T2JqZWN0JiBtYW5pZmVzdCwgY29uc3QKIAogQXBwbGljYXRp
b25NYW5pZmVzdDo6RGlzcGxheSBBcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyOjpwYXJzZURpc3Bs
YXkoY29uc3QgSlNPTjo6T2JqZWN0JiBtYW5pZmVzdCkKIHsKLSAgICBSZWZQdHI8SlNPTjo6VmFs
dWU+IHZhbHVlOwotICAgIGlmICghbWFuaWZlc3QuZ2V0VmFsdWUoImRpc3BsYXkiX3MsIHZhbHVl
KSkKKyAgICBhdXRvIHZhbHVlID0gbWFuaWZlc3QuZ2V0VmFsdWUoImRpc3BsYXkiX3MpOworICAg
IGlmICghdmFsdWUpCiAgICAgICAgIHJldHVybiBBcHBsaWNhdGlvbk1hbmlmZXN0OjpEaXNwbGF5
OjpCcm93c2VyOwogCi0gICAgU3RyaW5nIHN0cmluZ1ZhbHVlOwotICAgIGlmICghdmFsdWUtPmFz
U3RyaW5nKHN0cmluZ1ZhbHVlKSkgeworICAgIGF1dG8gc3RyaW5nVmFsdWUgPSB2YWx1ZS0+YXNT
dHJpbmcoKTsKKyAgICBpZiAoIXN0cmluZ1ZhbHVlKSB7CiAgICAgICAgIGxvZ01hbmlmZXN0UHJv
cGVydHlOb3RBU3RyaW5nKCJkaXNwbGF5Il9zKTsKICAgICAgICAgcmV0dXJuIEFwcGxpY2F0aW9u
TWFuaWZlc3Q6OkRpc3BsYXk6OkJyb3dzZXI7CiAgICAgfQpAQCAtMTk1LDEyICsxOTUsMTIgQEAg
VVJMIEFwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXI6OnBhcnNlU2NvcGUoY29uc3QgSlNPTjo6T2Jq
ZWN0JiBtYW5pZmVzdCwgY29uc3QgVVIKIHsKICAgICBVUkwgZGVmYXVsdFNjb3BlIHsgc3RhcnRV
UkwsICIuLyIgfTsKIAotICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gdmFsdWU7Ci0gICAgaWYgKCFt
YW5pZmVzdC5nZXRWYWx1ZSgic2NvcGUiLCB2YWx1ZSkpCisgICAgYXV0byB2YWx1ZSA9IG1hbmlm
ZXN0LmdldFZhbHVlKCJzY29wZSIpOworICAgIGlmICghdmFsdWUpCiAgICAgICAgIHJldHVybiBk
ZWZhdWx0U2NvcGU7CiAKLSAgICBTdHJpbmcgc3RyaW5nVmFsdWU7Ci0gICAgaWYgKCF2YWx1ZS0+
YXNTdHJpbmcoc3RyaW5nVmFsdWUpKSB7CisgICAgYXV0byBzdHJpbmdWYWx1ZSA9IHZhbHVlLT5h
c1N0cmluZygpOworICAgIGlmICghc3RyaW5nVmFsdWUpIHsKICAgICAgICAgbG9nTWFuaWZlc3RQ
cm9wZXJ0eU5vdEFTdHJpbmcoInNjb3BlIl9zKTsKICAgICAgICAgcmV0dXJuIGRlZmF1bHRTY29w
ZTsKICAgICB9CkBAIC0yMzEsMTIgKzIzMSwxMiBAQCBVUkwgQXBwbGljYXRpb25NYW5pZmVzdFBh
cnNlcjo6cGFyc2VTY29wZShjb25zdCBKU09OOjpPYmplY3QmIG1hbmlmZXN0LCBjb25zdCBVUgog
CiBTdHJpbmcgQXBwbGljYXRpb25NYW5pZmVzdFBhcnNlcjo6cGFyc2VHZW5lcmljU3RyaW5nKGNv
bnN0IEpTT046Ok9iamVjdCYgbWFuaWZlc3QsIGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKQog
ewotICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gdmFsdWU7Ci0gICAgaWYgKCFtYW5pZmVzdC5nZXRW
YWx1ZShwcm9wZXJ0eU5hbWUsIHZhbHVlKSkKKyAgICBhdXRvIHZhbHVlID0gbWFuaWZlc3QuZ2V0
VmFsdWUocHJvcGVydHlOYW1lKTsKKyAgICBpZiAoIXZhbHVlKQogICAgICAgICByZXR1cm4geyB9
OwogCi0gICAgU3RyaW5nIHN0cmluZ1ZhbHVlOwotICAgIGlmICghdmFsdWUtPmFzU3RyaW5nKHN0
cmluZ1ZhbHVlKSkgeworICAgIGF1dG8gc3RyaW5nVmFsdWUgPSB2YWx1ZS0+YXNTdHJpbmcoKTsK
KyAgICBpZiAoIXN0cmluZ1ZhbHVlKSB7CiAgICAgICAgIGxvZ01hbmlmZXN0UHJvcGVydHlOb3RB
U3RyaW5nKHByb3BlcnR5TmFtZSk7CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9Jbml0RGF0YVJlZ2lz
dHJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW5jcnlwdGVkbWVkaWEvSW5pdERhdGFS
ZWdpc3RyeS5jcHAKaW5kZXggM2IyNWQwNmIxMjNhMWE1MWEwYTJhY2ZiNGY2NTZmOGQ5NGFkYjNm
Yy4uNmFiMmY4NzhhM2Y4Y2E5OGU4MmIwZTQyZTVmMGJhYWEyMjhiMWM1YyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9Jbml0RGF0YVJlZ2lzdHJ5LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL0luaXREYXRhUmVn
aXN0cnkuY3BwCkBAIC02MiwyMiArNjIsMjIgQEAgc3RhdGljIE9wdGlvbmFsPFZlY3RvcjxSZWY8
U2hhcmVkQnVmZmVyPj4+IGV4dHJhY3RLZXlJRHNLZXlpZHMoY29uc3QgU2hhcmVkQnVmZmUKICAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICBTdHJpbmcganNvbiB7IGJ1ZmZlci5kYXRh
KCksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihidWZmZXIuc2l6ZSgpKSB9OwogCi0gICAgUmVmUHRy
PEpTT046OlZhbHVlPiB2YWx1ZTsKLSAgICBpZiAoIUpTT046OlZhbHVlOjpwYXJzZUpTT04oanNv
biwgdmFsdWUpKQorICAgIGF1dG8gdmFsdWUgPSBKU09OOjpWYWx1ZTo6cGFyc2VKU09OKGpzb24p
OworICAgIGlmICghdmFsdWUpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBS
ZWZQdHI8SlNPTjo6T2JqZWN0PiBvYmplY3Q7Ci0gICAgaWYgKCF2YWx1ZS0+YXNPYmplY3Qob2Jq
ZWN0KSkKKyAgICBhdXRvIG9iamVjdCA9IHZhbHVlLT5hc09iamVjdCgpOworICAgIGlmICghb2Jq
ZWN0KQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgUmVmUHRyPEpTT046OkFy
cmF5PiBraWRzQXJyYXk7Ci0gICAgaWYgKCFvYmplY3QtPmdldEFycmF5KCJraWRzIiwga2lkc0Fy
cmF5KSkKKyAgICBhdXRvIGtpZHNBcnJheSA9IG9iamVjdC0+Z2V0QXJyYXkoImtpZHMiX3MpOwor
ICAgIGlmICgha2lkc0FycmF5KQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAg
VmVjdG9yPFJlZjxTaGFyZWRCdWZmZXI+PiBrZXlJRHM7CiAgICAgZm9yIChhdXRvJiB2YWx1ZSA6
ICpraWRzQXJyYXkpIHsKLSAgICAgICAgU3RyaW5nIGtleUlEOwotICAgICAgICBpZiAoIXZhbHVl
LT5hc1N0cmluZyhrZXlJRCkpCisgICAgICAgIGF1dG8ga2V5SUQgPSB2YWx1ZS0+YXNTdHJpbmco
KTsKKyAgICAgICAgaWYgKCFrZXlJRCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAg
IFZlY3RvcjxjaGFyPiBrZXlJRERhdGE7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvQ29tbWFuZExpbmVBUElIb3N0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9D
b21tYW5kTGluZUFQSUhvc3QuY3BwCmluZGV4IGRjZTM1OWU3NjhlZjlhMTNhNmM2ZGUxNmQxZjhk
M2M4YmJmZjdhOTcuLjk0ZDAzZDg1ZDZkYTlmNGY4OGY4Y2QxMmU0YmZmYmQzM2I0ZGM1NjcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db21tYW5kTGluZUFQSUhvc3QuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db21tYW5kTGluZUFQSUhvc3QuY3BwCkBA
IC03Myw3ICs3Myw3IEBAIHZvaWQgQ29tbWFuZExpbmVBUElIb3N0OjpkaXNjb25uZWN0KCkKICAg
ICBtX2luc3RydW1lbnRpbmdBZ2VudHMgPSBudWxscHRyOwogfQogCi12b2lkIENvbW1hbmRMaW5l
QVBJSG9zdDo6aW5zcGVjdChKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBKU0M6OkpTVmFsdWUgdmFsdWVUb0luc3BlY3QsIEpTQzo6SlNWYWx1ZSBoaW50c1ZhbHVlKQor
dm9pZCBDb21tYW5kTGluZUFQSUhvc3Q6Omluc3BlY3QoSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4
aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIG9iamVjdCwgSlNDOjpKU1ZhbHVlIGhpbnRz
KQogewogICAgIGlmICghbV9pbnN0cnVtZW50aW5nQWdlbnRzKQogICAgICAgICByZXR1cm47CkBA
IC04MiwxMiArODIsMjAgQEAgdm9pZCBDb21tYW5kTGluZUFQSUhvc3Q6Omluc3BlY3QoSlNDOjpK
U0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjoKICAgICBpZiAoIWluc3Bl
Y3RvckFnZW50KQogICAgICAgICByZXR1cm47CiAKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBo
aW50c09iamVjdDsKLSAgICBpZiAoIUluc3BlY3Rvcjo6dG9JbnNwZWN0b3JWYWx1ZSgmbGV4aWNh
bEdsb2JhbE9iamVjdCwgaGludHNWYWx1ZSktPmFzT2JqZWN0KGhpbnRzT2JqZWN0KSkKKyAgICBh
dXRvIG9iamVjdFZhbHVlID0gSW5zcGVjdG9yOjp0b0luc3BlY3RvclZhbHVlKCZsZXhpY2FsR2xv
YmFsT2JqZWN0LCBvYmplY3QpOworICAgIGlmICghb2JqZWN0VmFsdWUpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIGF1dG8gcmVtb3RlT2JqZWN0ID0gQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlBy
b3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+OjpydW50aW1lQ2FzdChJbnNwZWN0b3I6OnRv
SW5zcGVjdG9yVmFsdWUoJmxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlVG9JbnNwZWN0KSk7Ci0g
ICAgaW5zcGVjdG9yQWdlbnQtPmluc3BlY3QoV1RGTW92ZShyZW1vdGVPYmplY3QpLCBXVEZNb3Zl
KGhpbnRzT2JqZWN0KSk7CisgICAgYXV0byBoaW50c1ZhbHVlID0gSW5zcGVjdG9yOjp0b0luc3Bl
Y3RvclZhbHVlKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCBoaW50cyk7CisgICAgaWYgKCFoaW50c1Zh
bHVlKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIGhpbnRzT2JqZWN0ID0gaGludHNWYWx1
ZS0+YXNPYmplY3QoKTsKKyAgICBpZiAoIWhpbnRzT2JqZWN0KQorICAgICAgICByZXR1cm47CisK
KyAgICBhdXRvIHJlbW90ZU9iamVjdCA9IFByb3RvY29sOjpCaW5kaW5nVHJhaXRzPFByb3RvY29s
OjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+OjpydW50aW1lQ2FzdChvYmplY3RWYWx1ZS5yZWxlYXNl
Tm9uTnVsbCgpKTsKKyAgICBpbnNwZWN0b3JBZ2VudC0+aW5zcGVjdChXVEZNb3ZlKHJlbW90ZU9i
amVjdCksIGhpbnRzT2JqZWN0LnJlbGVhc2VOb25OdWxsKCkpOwogfQogCiBDb21tYW5kTGluZUFQ
SUhvc3Q6OkV2ZW50TGlzdGVuZXJzUmVjb3JkIENvbW1hbmRMaW5lQVBJSG9zdDo6Z2V0RXZlbnRM
aXN0ZW5lcnMoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEV2ZW50VGFyZ2V0
JiB0YXJnZXQpCkBAIC0xMzYsOCArMTQ0LDcgQEAgdm9pZCBDb21tYW5kTGluZUFQSUhvc3Q6OmNs
ZWFyQ29uc29sZU1lc3NhZ2VzKCkKICAgICBpZiAoIWNvbnNvbGVBZ2VudCkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgRXJyb3JTdHJpbmcgaWdub3JlZDsKLSAgICBjb25zb2xlQWdlbnQtPmNsZWFy
TWVzc2FnZXMoaWdub3JlZCk7CisgICAgY29uc29sZUFnZW50LT5jbGVhck1lc3NhZ2VzKCk7CiB9
CiAKIHZvaWQgQ29tbWFuZExpbmVBUElIb3N0Ojpjb3B5VGV4dChjb25zdCBTdHJpbmcmIHRleHQp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQXVkaXRSZXNv
dXJjZXNPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckF1ZGl0
UmVzb3VyY2VzT2JqZWN0LmNwcAppbmRleCAwMDE0OGUwZmY0OTQ0YWJkMDkwYjgzNmVhOTMwNWVj
Zjc0OGM2ZmE0Li5iN2ZmMGUxMDRhNTUwNjkxNmNjZmE5ZDIzMGM4YjJiYmIzNjNkZjNhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQXVkaXRSZXNvdXJjZXNP
YmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBdWRpdFJl
c291cmNlc09iamVjdC5jcHAKQEAgLTEwNSw3ICsxMDUsNyBAQCBFeGNlcHRpb25PcjxJbnNwZWN0
b3JBdWRpdFJlc291cmNlc09iamVjdDo6UmVzb3VyY2VDb250ZW50PiBJbnNwZWN0b3JBdWRpdFJl
c291cgogICAgIGlmICghY2FjaGVkUmVzb3VyY2UpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24g
eyBOb3RGb3VuZEVycm9yLCBtYWtlU3RyaW5nKCJVbmtub3duIGlkZW50aWZpZXIgIl9zLCBpZCkg
fTsKIAotICAgIEVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworICAgIFByb3RvY29sOjpFcnJvclN0
cmluZyBlcnJvclN0cmluZzsKICAgICBSZXNvdXJjZUNvbnRlbnQgcmVzb3VyY2VDb250ZW50Owog
ICAgIEluc3BlY3RvclBhZ2VBZ2VudDo6cmVzb3VyY2VDb250ZW50KGVycm9yU3RyaW5nLCBmcmFt
ZSwgY2FjaGVkUmVzb3VyY2UtPnVybCgpLCAmcmVzb3VyY2VDb250ZW50LmRhdGEsICZyZXNvdXJj
ZUNvbnRlbnQuYmFzZTY0RW5jb2RlZCk7CiAgICAgaWYgKCFlcnJvclN0cmluZy5pc0VtcHR5KCkp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDYW52YXMuY3BwCmluZGV4IDVj
NTdiNjA1NzRlY2E1NzIyZDE1NDk5MmFmZGJkYzc1NWU2MzE5OWYuLmE2MWI4ZWVkYTA0MTZjZjdm
MTU0YWEwMTFjODYwY2U4ZmIwYjMyNWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JDYW52YXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JDYW52YXMuY3BwCkBAIC0zNTYsMTMgKzM1NiwxMyBAQCB2b2lkIEluc3BlY3RvckNh
bnZhczo6cmVjb3JkQWN0aW9uKGNvbnN0IFN0cmluZyYgbmFtZSwgc3RkOjppbml0aWFsaXplcl9s
aXN0PFJlYwogICAgIH0KIAogICAgIGlmICghbV9mcmFtZXMpCi0gICAgICAgIG1fZnJhbWVzID0g
SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpSZWNvcmRpbmc6OkZyYW1lPjo6Y3Jl
YXRlKCk7CisgICAgICAgIG1fZnJhbWVzID0gSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UmVjb3Jk
aW5nOjpGcmFtZT46OmNyZWF0ZSgpOwogCiAgICAgaWYgKCFtX2N1cnJlbnRBY3Rpb25zKSB7CiAg
ICAgICAgIG1fY3VycmVudEFjdGlvbnMgPSBKU09OOjpBcnJheU9mPEpTT046OlZhbHVlPjo6Y3Jl
YXRlKCk7CiAKLSAgICAgICAgYXV0byBmcmFtZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlY29y
ZGluZzo6RnJhbWU6OmNyZWF0ZSgpCi0gICAgICAgICAgICAuc2V0QWN0aW9ucyhtX2N1cnJlbnRB
Y3Rpb25zKQorICAgICAgICBhdXRvIGZyYW1lID0gUHJvdG9jb2w6OlJlY29yZGluZzo6RnJhbWU6
OmNyZWF0ZSgpCisgICAgICAgICAgICAuc2V0QWN0aW9ucygqbV9jdXJyZW50QWN0aW9ucykKICAg
ICAgICAgICAgIC5yZWxlYXNlKCk7CiAKICAgICAgICAgbV9mcmFtZXMtPmFkZEl0ZW0oV1RGTW92
ZShmcmFtZSkpOwpAQCAtMzc1LDcgKzM3NSw3IEBAIHZvaWQgSW5zcGVjdG9yQ2FudmFzOjpyZWNv
cmRBY3Rpb24oY29uc3QgU3RyaW5nJiBuYW1lLCBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8UmVjCiAK
ICAgICBtX2xhc3RSZWNvcmRlZEFjdGlvbiA9IGJ1aWxkQWN0aW9uKG5hbWUsIFdURk1vdmUocGFy
YW1ldGVycykpOwogICAgIG1fYnVmZmVyVXNlZCArPSBtX2xhc3RSZWNvcmRlZEFjdGlvbi0+bWVt
b3J5Q29zdCgpOwotICAgIG1fY3VycmVudEFjdGlvbnMtPmFkZEl0ZW0obV9sYXN0UmVjb3JkZWRB
Y3Rpb24uZ2V0KCkpOworICAgIG1fY3VycmVudEFjdGlvbnMtPmFkZEl0ZW0oKm1fbGFzdFJlY29y
ZGVkQWN0aW9uKTsKIAogICAgIGF1dG8qIGNvbnRleHQgPSBjYW52YXNDb250ZXh0KCk7CiAgICAg
QVNTRVJUKGNvbnRleHQpOwpAQCAtMzk4LDcgKzM5OCw3IEBAIHZvaWQgSW5zcGVjdG9yQ2FudmFz
OjpmaW5hbGl6ZUZyYW1lKCkKICAgICBhcHBlbmRBY3Rpb25TbmFwc2hvdElmTmVlZGVkKCk7CiAK
ICAgICBpZiAobV9mcmFtZXMgJiYgbV9mcmFtZXMtPmxlbmd0aCgpICYmICFzdGQ6OmlzbmFuKG1f
Y3VycmVudEZyYW1lU3RhcnRUaW1lKSkgewotICAgICAgICBhdXRvIGN1cnJlbnRGcmFtZSA9IHN0
YXRpY19jYXN0PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlY29yZGluZzo6RnJhbWUqPihtX2ZyYW1l
cy0+Z2V0KG1fZnJhbWVzLT5sZW5ndGgoKSAtIDEpLmdldCgpKTsKKyAgICAgICAgYXV0byBjdXJy
ZW50RnJhbWUgPSBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8UHJvdG9jb2w6OlJlY29yZGluZzo6RnJh
bWU+KG1fZnJhbWVzLT5nZXQobV9mcmFtZXMtPmxlbmd0aCgpIC0gMSkpOwogICAgICAgICBjdXJy
ZW50RnJhbWUtPnNldER1cmF0aW9uKChNb25vdG9uaWNUaW1lOjpub3coKSAtIG1fY3VycmVudEZy
YW1lU3RhcnRUaW1lKS5taWxsaXNlY29uZHMoKSk7CiAKICAgICAgICAgbV9jdXJyZW50RnJhbWVT
dGFydFRpbWUgPSBNb25vdG9uaWNUaW1lOjpuYW4oKTsKQEAgLTQxMiw3ICs0MTIsOCBAQCB2b2lk
IEluc3BlY3RvckNhbnZhczo6bWFya0N1cnJlbnRGcmFtZUluY29tcGxldGUoKQogICAgIGlmICgh
bV9jdXJyZW50QWN0aW9ucyB8fCAhbV9mcmFtZXMgfHwgIW1fZnJhbWVzLT5sZW5ndGgoKSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgc3RhdGljX2Nhc3Q8SW5zcGVjdG9yOjpQcm90b2NvbDo6UmVj
b3JkaW5nOjpGcmFtZSo+KG1fZnJhbWVzLT5nZXQobV9mcmFtZXMtPmxlbmd0aCgpIC0gMSkuZ2V0
KCkpLT5zZXRJbmNvbXBsZXRlKHRydWUpOworICAgIGF1dG8gY3VycmVudEZyYW1lID0gc3RhdGlj
X3JlZmVyZW5jZV9jYXN0PFByb3RvY29sOjpSZWNvcmRpbmc6OkZyYW1lPihtX2ZyYW1lcy0+Z2V0
KG1fZnJhbWVzLT5sZW5ndGgoKSAtIDEpKTsKKyAgICBjdXJyZW50RnJhbWUtPnNldEluY29tcGxl
dGUodHJ1ZSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ2FudmFzOjpzZXRCdWZmZXJMaW1pdChsb25n
IG1lbW9yeUxpbWl0KQpAQCAtNDM4LDI5ICs0MzksMjkgQEAgYm9vbCBJbnNwZWN0b3JDYW52YXM6
Om92ZXJGcmFtZUNvdW50KCkgY29uc3QKICAgICByZXR1cm4gbV9mcmFtZUNvdW50ICYmIG1fZnJh
bWVzQ2FwdHVyZWQgPj0gbV9mcmFtZUNvdW50LnZhbHVlKCk7CiB9CiAKLVJlZjxJbnNwZWN0b3I6
OlByb3RvY29sOjpDYW52YXM6OkNhbnZhcz4gSW5zcGVjdG9yQ2FudmFzOjpidWlsZE9iamVjdEZv
ckNhbnZhcyhib29sIGNhcHR1cmVCYWNrdHJhY2UpCitSZWY8UHJvdG9jb2w6OkNhbnZhczo6Q2Fu
dmFzPiBJbnNwZWN0b3JDYW52YXM6OmJ1aWxkT2JqZWN0Rm9yQ2FudmFzKGJvb2wgY2FwdHVyZUJh
Y2t0cmFjZSkKIHsKLSAgICB1c2luZyBDb250ZXh0VHlwZVR5cGUgPSBPcHRpb25hbDxJbnNwZWN0
b3I6OlByb3RvY29sOjpDYW52YXM6OkNvbnRleHRUeXBlPjsKKyAgICB1c2luZyBDb250ZXh0VHlw
ZVR5cGUgPSBPcHRpb25hbDxQcm90b2NvbDo6Q2FudmFzOjpDb250ZXh0VHlwZT47CiAgICAgYXV0
byBjb250ZXh0VHlwZSA9IFdURjo6c3dpdGNoT24obV9jb250ZXh0LAogICAgICAgICBbXSAoc3Rk
OjpyZWZlcmVuY2Vfd3JhcHBlcjxDYW52YXNSZW5kZXJpbmdDb250ZXh0PiBjb250ZXh0V3JhcHBl
cikgLT4gQ29udGV4dFR5cGVUeXBlIHsKICAgICAgICAgICAgIGF1dG8mIGNvbnRleHQgPSBjb250
ZXh0V3JhcHBlci5nZXQoKTsKICAgICAgICAgICAgIGlmIChpczxDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQ+KGNvbnRleHQpKQotICAgICAgICAgICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpDYW52YXM6OkNvbnRleHRUeXBlOjpDYW52YXMyRDsKKyAgICAgICAgICAgICAgICByZXR1
cm4gUHJvdG9jb2w6OkNhbnZhczo6Q29udGV4dFR5cGU6OkNhbnZhczJEOwogICAgICAgICAgICAg
aWYgKGlzPEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dD4oY29udGV4dCkpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6Q29udGV4dFR5cGU6OkJp
dG1hcFJlbmRlcmVyOworICAgICAgICAgICAgICAgIHJldHVybiBQcm90b2NvbDo6Q2FudmFzOjpD
b250ZXh0VHlwZTo6Qml0bWFwUmVuZGVyZXI7CiAjaWYgRU5BQkxFKFdFQkdMKQogICAgICAgICAg
ICAgaWYgKGlzPFdlYkdMUmVuZGVyaW5nQ29udGV4dD4oY29udGV4dCkpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6Q29udGV4dFR5cGU6OldlYkdM
OworICAgICAgICAgICAgICAgIHJldHVybiBQcm90b2NvbDo6Q2FudmFzOjpDb250ZXh0VHlwZTo6
V2ViR0w7CiAjZW5kaWYKICNpZiBFTkFCTEUoV0VCR0wyKQogICAgICAgICAgICAgaWYgKGlzPFdl
YkdMMlJlbmRlcmluZ0NvbnRleHQ+KGNvbnRleHQpKQotICAgICAgICAgICAgICAgIHJldHVybiBJ
bnNwZWN0b3I6OlByb3RvY29sOjpDYW52YXM6OkNvbnRleHRUeXBlOjpXZWJHTDI7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIFByb3RvY29sOjpDYW52YXM6OkNvbnRleHRUeXBlOjpXZWJHTDI7CiAj
ZW5kaWYKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAgIH0sCiAjaWYg
RU5BQkxFKFdFQkdQVSkKICAgICAgICAgW10gKHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8V2ViR1BV
RGV2aWNlPikgewotICAgICAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZh
czo6Q29udGV4dFR5cGU6OldlYkdQVTsKKyAgICAgICAgICAgIHJldHVybiBQcm90b2NvbDo6Q2Fu
dmFzOjpDb250ZXh0VHlwZTo6V2ViR1BVOwogICAgICAgICB9LAogI2VuZGlmCiAgICAgICAgIFtd
IChNb25vc3RhdGUpIHsKQEAgLTQ3MCwxMCArNDcxLDEwIEBAIFJlZjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpDYW52YXM6OkNhbnZhcz4gSW5zcGVjdG9yQ2FudmFzOjpidWlsZE9iamVjdEZvckNhbnZh
cyhiCiAgICAgKTsKICAgICBpZiAoIWNvbnRleHRUeXBlKSB7CiAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgICAgICBjb250ZXh0VHlwZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNh
bnZhczo6Q29udGV4dFR5cGU6OkNhbnZhczJEOworICAgICAgICBjb250ZXh0VHlwZSA9IFByb3Rv
Y29sOjpDYW52YXM6OkNvbnRleHRUeXBlOjpDYW52YXMyRDsKICAgICB9CiAKLSAgICBhdXRvIGNh
bnZhcyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6Q2FudmFzOjpjcmVhdGUoKQorICAg
IGF1dG8gY2FudmFzID0gUHJvdG9jb2w6OkNhbnZhczo6Q2FudmFzOjpjcmVhdGUoKQogICAgICAg
ICAuc2V0Q2FudmFzSWQobV9pZGVudGlmaWVyKQogICAgICAgICAuc2V0Q29udGV4dFR5cGUoY29u
dGV4dFR5cGUudmFsdWUoKSkKICAgICAgICAgLnJlbGVhc2UoKTsKQEAgLTQ4NiwxMiArNDg3LDEy
IEBAIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDYW52YXM6OkNhbnZhcz4gSW5zcGVjdG9yQ2Fu
dmFzOjpidWlsZE9iamVjdEZvckNhbnZhcyhiCiAgICAgICAgIC8vIEZJWE1FOiA8aHR0cHM6Ly93
ZWJraXQub3JnL2IvMTc4MjgyPiBXZWIgSW5zcGVjdG9yOiBzZW5kIGEgRE9NIG5vZGUgd2l0aCBl
YWNoIENhbnZhcyBwYXlsb2FkIGFuZCBlbGltaW5hdGUgQ2FudmFzLnJlcXVlc3ROb2RlCiAgICAg
fQogCi0gICAgdXNpbmcgQ29udGV4dEF0dHJpYnV0ZXNUeXBlID0gUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkNhbnZhczo6Q29udGV4dEF0dHJpYnV0ZXM+OworICAgIHVzaW5nIENvbnRleHRB
dHRyaWJ1dGVzVHlwZSA9IFJlZlB0cjxQcm90b2NvbDo6Q2FudmFzOjpDb250ZXh0QXR0cmlidXRl
cz47CiAgICAgYXV0byBjb250ZXh0QXR0cmlidXRlcyA9IFdURjo6c3dpdGNoT24obV9jb250ZXh0
LAogICAgICAgICBbXSAoc3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxDYW52YXNSZW5kZXJpbmdDb250
ZXh0PiBjb250ZXh0V3JhcHBlcikgLT4gQ29udGV4dEF0dHJpYnV0ZXNUeXBlIHsKICAgICAgICAg
ICAgIGF1dG8mIGNvbnRleHQgPSBjb250ZXh0V3JhcHBlci5nZXQoKTsKICAgICAgICAgICAgIGlm
IChpczxJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQ+KGNvbnRleHQpKSB7Ci0gICAgICAgICAg
ICAgICAgYXV0byBjb250ZXh0QXR0cmlidXRlc1BheWxvYWQgPSBJbnNwZWN0b3I6OlByb3RvY29s
OjpDYW52YXM6OkNvbnRleHRBdHRyaWJ1dGVzOjpjcmVhdGUoKQorICAgICAgICAgICAgICAgIGF1
dG8gY29udGV4dEF0dHJpYnV0ZXNQYXlsb2FkID0gUHJvdG9jb2w6OkNhbnZhczo6Q29udGV4dEF0
dHJpYnV0ZXM6OmNyZWF0ZSgpCiAgICAgICAgICAgICAgICAgICAgIC5yZWxlYXNlKCk7CiAgICAg
ICAgICAgICAgICAgY29udGV4dEF0dHJpYnV0ZXNQYXlsb2FkLT5zZXRBbHBoYShkb3duY2FzdDxJ
bWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQ+KGNvbnRleHQpLmhhc0FscGhhKCkpOwogICAgICAg
ICAgICAgICAgIHJldHVybiBjb250ZXh0QXR0cmlidXRlc1BheWxvYWQ7CkBAIC01MDAsNyArNTAx
LDcgQEAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6Q2FudmFzPiBJbnNwZWN0b3JD
YW52YXM6OmJ1aWxkT2JqZWN0Rm9yQ2FudmFzKGIKICNpZiBFTkFCTEUoV0VCR0wpCiAgICAgICAg
ICAgICBpZiAoaXM8V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZT4oY29udGV4dCkpIHsKICAgICAg
ICAgICAgICAgICBpZiAoY29uc3QgYXV0byYgYXR0cmlidXRlcyA9IGRvd25jYXN0PFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U+KGNvbnRleHQpLmdldENvbnRleHRBdHRyaWJ1dGVzKCkpIHsKLSAg
ICAgICAgICAgICAgICAgICAgYXV0byBjb250ZXh0QXR0cmlidXRlc1BheWxvYWQgPSBJbnNwZWN0
b3I6OlByb3RvY29sOjpDYW52YXM6OkNvbnRleHRBdHRyaWJ1dGVzOjpjcmVhdGUoKQorICAgICAg
ICAgICAgICAgICAgICBhdXRvIGNvbnRleHRBdHRyaWJ1dGVzUGF5bG9hZCA9IFByb3RvY29sOjpD
YW52YXM6OkNvbnRleHRBdHRyaWJ1dGVzOjpjcmVhdGUoKQogICAgICAgICAgICAgICAgICAgICAg
ICAgLnJlbGVhc2UoKTsKICAgICAgICAgICAgICAgICAgICAgY29udGV4dEF0dHJpYnV0ZXNQYXls
b2FkLT5zZXRBbHBoYShhdHRyaWJ1dGVzLT5hbHBoYSk7CiAgICAgICAgICAgICAgICAgICAgIGNv
bnRleHRBdHRyaWJ1dGVzUGF5bG9hZC0+c2V0RGVwdGgoYXR0cmlidXRlcy0+ZGVwdGgpOwpAQCAt
NTMwLDcgKzUzMSw3IEBAIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDYW52YXM6OkNhbnZhcz4g
SW5zcGVjdG9yQ2FudmFzOjpidWlsZE9iamVjdEZvckNhbnZhcyhiCiAgICAgICAgIFtdIChzdGQ6
OnJlZmVyZW5jZV93cmFwcGVyPFdlYkdQVURldmljZT4gZGV2aWNlV3JhcHBlcikgLT4gQ29udGV4
dEF0dHJpYnV0ZXNUeXBlIHsKICAgICAgICAgICAgIGF1dG8mIGRldmljZSA9IGRldmljZVdyYXBw
ZXIuZ2V0KCk7CiAgICAgICAgICAgICBpZiAoY29uc3QgYXV0byYgb3B0aW9ucyA9IGRldmljZS5h
ZGFwdGVyKCkub3B0aW9ucygpKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBjb250ZXh0QXR0cmli
dXRlc1BheWxvYWQgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpDYW52YXM6OkNvbnRleHRBdHRyaWJ1
dGVzOjpjcmVhdGUoKQorICAgICAgICAgICAgICAgIGF1dG8gY29udGV4dEF0dHJpYnV0ZXNQYXls
b2FkID0gUHJvdG9jb2w6OkNhbnZhczo6Q29udGV4dEF0dHJpYnV0ZXM6OmNyZWF0ZSgpCiAgICAg
ICAgICAgICAgICAgICAgIC5yZWxlYXNlKCk7CiAgICAgICAgICAgICAgICAgaWYgKGNvbnN0IGF1
dG8mIHBvd2VyUHJlZmVyZW5jZSA9IG9wdGlvbnMtPnBvd2VyUHJlZmVyZW5jZSkgewogICAgICAg
ICAgICAgICAgICAgICBzd2l0Y2ggKHBvd2VyUHJlZmVyZW5jZS52YWx1ZSgpKSB7CkBAIC01NTQs
NyArNTU1LDcgQEAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6Q2FudmFzPiBJbnNw
ZWN0b3JDYW52YXM6OmJ1aWxkT2JqZWN0Rm9yQ2FudmFzKGIKICAgICAgICAgfQogICAgICk7CiAg
ICAgaWYgKGNvbnRleHRBdHRyaWJ1dGVzKQotICAgICAgICBjYW52YXMtPnNldENvbnRleHRBdHRy
aWJ1dGVzKFdURk1vdmUoY29udGV4dEF0dHJpYnV0ZXMpKTsKKyAgICAgICAgY2FudmFzLT5zZXRD
b250ZXh0QXR0cmlidXRlcyhjb250ZXh0QXR0cmlidXRlcy5yZWxlYXNlTm9uTnVsbCgpKTsKIAog
ICAgIC8vIEZJWE1FOiA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMTgwODMzPiBXZWIgSW5zcGVjdG9y
OiBzdXBwb3J0IE9mZnNjcmVlbkNhbnZhcyBmb3IgQ2FudmFzIHJlbGF0ZWQgb3BlcmF0aW9ucwog
CkBAIC01NzEsNyArNTcyLDcgQEAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6Q2Fu
dmFzPiBJbnNwZWN0b3JDYW52YXM6OmJ1aWxkT2JqZWN0Rm9yQ2FudmFzKGIKICAgICByZXR1cm4g
Y2FudmFzOwogfQogCi1SZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6UmVjb3JkaW5nOjpSZWNvcmRp
bmc+IEluc3BlY3RvckNhbnZhczo6cmVsZWFzZU9iamVjdEZvclJlY29yZGluZygpCitSZWY8UHJv
dG9jb2w6OlJlY29yZGluZzo6UmVjb3JkaW5nPiBJbnNwZWN0b3JDYW52YXM6OnJlbGVhc2VPYmpl
Y3RGb3JSZWNvcmRpbmcoKQogewogICAgIEFTU0VSVCghbV9jdXJyZW50QWN0aW9ucyk7CiAgICAg
QVNTRVJUKCFtX2xhc3RSZWNvcmRlZEFjdGlvbik7CkBAIC01ODEsMjYgKzU4MiwyNiBAQCBSZWY8
SW5zcGVjdG9yOjpQcm90b2NvbDo6UmVjb3JkaW5nOjpSZWNvcmRpbmc+IEluc3BlY3RvckNhbnZh
czo6cmVsZWFzZU9iamVjdEZvcgogICAgIEFTU0VSVChjb250ZXh0KTsKICAgICAvLyBGSVhNRTog
PGh0dHBzOi8vd2Via2l0Lm9yZy9iLzIwMTY1MT4gV2ViIEluc3BlY3RvcjogQ2FudmFzOiBzdXBw
b3J0IGNhbnZhcyByZWNvcmRpbmdzIGZvciBXZWJHUFVEZXZpY2UKIAotICAgIEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlJlY29yZGluZzo6VHlwZSB0eXBlOworICAgIFByb3RvY29sOjpSZWNvcmRpbmc6
OlR5cGUgdHlwZTsKICAgICBpZiAoaXM8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPihjb250ZXh0
KSkKLSAgICAgICAgdHlwZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlY29yZGluZzo6VHlwZTo6
Q2FudmFzMkQ7CisgICAgICAgIHR5cGUgPSBQcm90b2NvbDo6UmVjb3JkaW5nOjpUeXBlOjpDYW52
YXMyRDsKICAgICBlbHNlIGlmIChpczxJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQ+KGNvbnRl
eHQpKQotICAgICAgICB0eXBlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6UmVjb3JkaW5nOjpUeXBl
OjpDYW52YXNCaXRtYXBSZW5kZXJlcjsKKyAgICAgICAgdHlwZSA9IFByb3RvY29sOjpSZWNvcmRp
bmc6OlR5cGU6OkNhbnZhc0JpdG1hcFJlbmRlcmVyOwogI2lmIEVOQUJMRShXRUJHTCkKICAgICBl
bHNlIGlmIChpczxXZWJHTFJlbmRlcmluZ0NvbnRleHQ+KGNvbnRleHQpKQotICAgICAgICB0eXBl
ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6UmVjb3JkaW5nOjpUeXBlOjpDYW52YXNXZWJHTDsKKyAg
ICAgICAgdHlwZSA9IFByb3RvY29sOjpSZWNvcmRpbmc6OlR5cGU6OkNhbnZhc1dlYkdMOwogI2Vu
ZGlmCiAjaWYgRU5BQkxFKFdFQkdMMikKICAgICBlbHNlIGlmIChpczxXZWJHTDJSZW5kZXJpbmdD
b250ZXh0Pihjb250ZXh0KSkKLSAgICAgICAgdHlwZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJl
Y29yZGluZzo6VHlwZTo6Q2FudmFzV2ViR0wyOworICAgICAgICB0eXBlID0gUHJvdG9jb2w6OlJl
Y29yZGluZzo6VHlwZTo6Q2FudmFzV2ViR0wyOwogI2VuZGlmCiAgICAgZWxzZSB7CiAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICB0eXBlID0gSW5zcGVjdG9yOjpQcm90b2Nv
bDo6UmVjb3JkaW5nOjpUeXBlOjpDYW52YXMyRDsKKyAgICAgICAgdHlwZSA9IFByb3RvY29sOjpS
ZWNvcmRpbmc6OlR5cGU6OkNhbnZhczJEOwogICAgIH0KIAotICAgIGF1dG8gcmVjb3JkaW5nID0g
SW5zcGVjdG9yOjpQcm90b2NvbDo6UmVjb3JkaW5nOjpSZWNvcmRpbmc6OmNyZWF0ZSgpCi0gICAg
ICAgIC5zZXRWZXJzaW9uKEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlY29yZGluZzo6VkVSU0lPTikK
KyAgICBhdXRvIHJlY29yZGluZyA9IFByb3RvY29sOjpSZWNvcmRpbmc6OlJlY29yZGluZzo6Y3Jl
YXRlKCkKKyAgICAgICAgLnNldFZlcnNpb24oUHJvdG9jb2w6OlJlY29yZGluZzo6VkVSU0lPTikK
ICAgICAgICAgLnNldFR5cGUodHlwZSkKICAgICAgICAgLnNldEluaXRpYWxTdGF0ZShtX2luaXRp
YWxTdGF0ZS5yZWxlYXNlTm9uTnVsbCgpKQogICAgICAgICAuc2V0RGF0YShtX3NlcmlhbGl6ZWRE
dXBsaWNhdGVEYXRhLnJlbGVhc2VOb25OdWxsKCkpCkBAIC02MTQsNyArNjE1LDcgQEAgUmVmPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlJlY29yZGluZzo6UmVjb3JkaW5nPiBJbnNwZWN0b3JDYW52YXM6
OnJlbGVhc2VPYmplY3RGb3IKICAgICByZXR1cm4gcmVjb3JkaW5nOwogfQogCi1TdHJpbmcgSW5z
cGVjdG9yQ2FudmFzOjpnZXRDYW52YXNDb250ZW50QXNEYXRhVVJMKEVycm9yU3RyaW5nJiBlcnJv
clN0cmluZykKK1N0cmluZyBJbnNwZWN0b3JDYW52YXM6OmdldENhbnZhc0NvbnRlbnRBc0RhdGFV
UkwoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZykKIHsKICAgICBhdXRvKiBub2Rl
ID0gY2FudmFzRWxlbWVudCgpOwogICAgIGlmICghbm9kZSkgewpAQCAtNjUxLDcgKzY1Miw3IEBA
IHZvaWQgSW5zcGVjdG9yQ2FudmFzOjphcHBlbmRBY3Rpb25TbmFwc2hvdElmTmVlZGVkKCkKICAg
ICBpZiAobV9jb250ZW50Q2hhbmdlZCkgewogICAgICAgICBtX2J1ZmZlclVzZWQgLT0gbV9sYXN0
UmVjb3JkZWRBY3Rpb24tPm1lbW9yeUNvc3QoKTsKIAotICAgICAgICBFcnJvclN0cmluZyBpZ25v
cmVkOworICAgICAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgaWdub3JlZDsKICAgICAgICAgbV9s
YXN0UmVjb3JkZWRBY3Rpb24tPmFkZEl0ZW0oaW5kZXhGb3JEYXRhKGdldENhbnZhc0NvbnRlbnRB
c0RhdGFVUkwoaWdub3JlZCkpKTsKIAogICAgICAgICBtX2J1ZmZlclVzZWQgKz0gbV9sYXN0UmVj
b3JkZWRBY3Rpb24tPm1lbW9yeUNvc3QoKTsKQEAgLTc3NSw3ICs3NzYsNyBAQCBpbnQgSW5zcGVj
dG9yQ2FudmFzOjppbmRleEZvckRhdGEoRHVwbGljYXRlRGF0YVZhcmlhbnQgZGF0YSkKIAogICAg
IGlmIChpdGVtKSB7CiAgICAgICAgIG1fYnVmZmVyVXNlZCArPSBpdGVtLT5tZW1vcnlDb3N0KCk7
Ci0gICAgICAgIG1fc2VyaWFsaXplZER1cGxpY2F0ZURhdGEtPmFkZEl0ZW0oV1RGTW92ZShpdGVt
KSk7CisgICAgICAgIG1fc2VyaWFsaXplZER1cGxpY2F0ZURhdGEtPmFkZEl0ZW0oaXRlbS5yZWxl
YXNlTm9uTnVsbCgpKTsKIAogICAgICAgICBtX2luZGV4ZWREdXBsaWNhdGVEYXRhLmFwcGVuZChk
YXRhKTsKICAgICAgICAgaW5kZXggPSBtX2luZGV4ZWREdXBsaWNhdGVEYXRhLnNpemUoKSAtIDE7
CkBAIC04MTAsMTMgKzgxMSwxMyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGF0aWMgUmVmPEpT
T046OkFycmF5T2Y8SlNPTjo6VmFsdWU+PiBidWlsZEFycmF5Rm9yVmVjdG9yKAogICAgIHJldHVy
biBhcnJheTsKIH0KIAotUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlY29yZGluZzo6SW5pdGlh
bFN0YXRlPiBJbnNwZWN0b3JDYW52YXM6OmJ1aWxkSW5pdGlhbFN0YXRlKCkKK1JlZjxQcm90b2Nv
bDo6UmVjb3JkaW5nOjpJbml0aWFsU3RhdGU+IEluc3BlY3RvckNhbnZhczo6YnVpbGRJbml0aWFs
U3RhdGUoKQogewogICAgIGF1dG8qIGNvbnRleHQgPSBjYW52YXNDb250ZXh0KCk7CiAgICAgQVNT
RVJUKGNvbnRleHQpOwogICAgIC8vIEZJWE1FOiA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMjAxNjUx
PiBXZWIgSW5zcGVjdG9yOiBDYW52YXM6IHN1cHBvcnQgY2FudmFzIHJlY29yZGluZ3MgZm9yIFdl
YkdQVURldmljZQogCi0gICAgYXV0byBpbml0aWFsU3RhdGVQYXlsb2FkID0gSW5zcGVjdG9yOjpQ
cm90b2NvbDo6UmVjb3JkaW5nOjpJbml0aWFsU3RhdGU6OmNyZWF0ZSgpLnJlbGVhc2UoKTsKKyAg
ICBhdXRvIGluaXRpYWxTdGF0ZVBheWxvYWQgPSBQcm90b2NvbDo6UmVjb3JkaW5nOjpJbml0aWFs
U3RhdGU6OmNyZWF0ZSgpLnJlbGVhc2UoKTsKIAogICAgIGF1dG8gYXR0cmlidXRlc1BheWxvYWQg
PSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgIGF0dHJpYnV0ZXNQYXlsb2FkLT5zZXRJbnRl
Z2VyKCJ3aWR0aCJfcywgY29udGV4dC0+Y2FudmFzQmFzZSgpLndpZHRoKCkpOwpAQCAtOTA4LDcg
KzkwOSw3IEBAIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpSZWNvcmRpbmc6OkluaXRpYWxTdGF0
ZT4gSW5zcGVjdG9yQ2FudmFzOjpidWlsZEluaXRpYWxTCiAgICAgaWYgKHBhcmFtZXRlcnNQYXls
b2FkLT5sZW5ndGgoKSkKICAgICAgICAgaW5pdGlhbFN0YXRlUGF5bG9hZC0+c2V0UGFyYW1ldGVy
cyhXVEZNb3ZlKHBhcmFtZXRlcnNQYXlsb2FkKSk7CiAKLSAgICBFcnJvclN0cmluZyBpZ25vcmVk
OworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBpZ25vcmVkOwogICAgIGluaXRpYWxTdGF0ZVBh
eWxvYWQtPnNldENvbnRlbnQoZ2V0Q2FudmFzQ29udGVudEFzRGF0YVVSTChpZ25vcmVkKSk7CiAK
ICAgICByZXR1cm4gaW5pdGlhbFN0YXRlUGF5bG9hZDsKQEAgLTk0Niw3ICs5NDcsNyBAQCBSZWY8
SlNPTjo6QXJyYXlPZjxKU09OOjpWYWx1ZT4+IEluc3BlY3RvckNhbnZhczo6YnVpbGRBY3Rpb24o
Y29uc3QgU3RyaW5nJiBuYW1lLAogICAgICAgICAgICAgICAgIGFycmF5LT5hZGRJdGVtKHZhbHVl
LmQudmFsdWVPcigxKSk7CiAgICAgICAgICAgICAgICAgYXJyYXktPmFkZEl0ZW0odmFsdWUuZS52
YWx1ZU9yKDApKTsKICAgICAgICAgICAgICAgICBhcnJheS0+YWRkSXRlbSh2YWx1ZS5mLnZhbHVl
T3IoMCkpOwotICAgICAgICAgICAgICAgIGFkZFBhcmFtZXRlcihhcnJheS5wdHIoKSwgUmVjb3Jk
aW5nU3dpenpsZVR5cGVzOjpET01NYXRyaXgpOworICAgICAgICAgICAgICAgIGFkZFBhcmFtZXRl
cihXVEZNb3ZlKGFycmF5KSwgUmVjb3JkaW5nU3dpenpsZVR5cGVzOjpET01NYXRyaXgpOwogICAg
ICAgICAgICAgfSwKICAgICAgICAgICAgIFsmXSAoY29uc3QgRWxlbWVudCogdmFsdWUpIHsKICAg
ICAgICAgICAgICAgICBpZiAodmFsdWUpIHsKQEAgLTExMDYsMTYgKzExMDcsMTYgQEAgUmVmPEpT
T046OkFycmF5T2Y8SlNPTjo6VmFsdWU+PiBJbnNwZWN0b3JDYW52YXM6OmJ1aWxkQWN0aW9uKGNv
bnN0IFN0cmluZyYgbmFtZSwKICAgICAgICAgICAgICAgICBhdXRvIGRlZHVwbGljYXRlZCA9IHZh
bHVlLm1hcChbJl0gKGNvbnN0IFN0cmluZyYgaXRlbSkgewogICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gaW5kZXhGb3JEYXRhKGl0ZW0pOwogICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAg
ICAgICAgIGFkZFBhcmFtZXRlcihidWlsZEFycmF5Rm9yVmVjdG9yKGRlZHVwbGljYXRlZCkucHRy
KCksIFJlY29yZGluZ1N3aXp6bGVUeXBlczo6U3RyaW5nKTsKKyAgICAgICAgICAgICAgICBhZGRQ
YXJhbWV0ZXIoYnVpbGRBcnJheUZvclZlY3RvcihkZWR1cGxpY2F0ZWQpLCBSZWNvcmRpbmdTd2l6
emxlVHlwZXM6OlN0cmluZyk7CiAgICAgICAgICAgICB9LAotICAgICAgICAgICAgWyZdIChjb25z
dCBWZWN0b3I8ZmxvYXQ+JiB2YWx1ZSkgeyBhZGRQYXJhbWV0ZXIoYnVpbGRBcnJheUZvclZlY3Rv
cih2YWx1ZSkucHRyKCksIFJlY29yZGluZ1N3aXp6bGVUeXBlczo6QXJyYXkpOyB9LAorICAgICAg
ICAgICAgWyZdIChjb25zdCBWZWN0b3I8ZmxvYXQ+JiB2YWx1ZSkgeyBhZGRQYXJhbWV0ZXIoYnVp
bGRBcnJheUZvclZlY3Rvcih2YWx1ZSksIFJlY29yZGluZ1N3aXp6bGVUeXBlczo6QXJyYXkpOyB9
LAogICAgICAgICAgICAgWyZdIChjb25zdCBWZWN0b3I8dWludDMyX3Q+JiB2YWx1ZSkgewogICAg
ICAgICAgICAgICAgIGF1dG8gbWFwcGVkID0gdmFsdWUubWFwKFsmXSAodWludDMyX3QgaXRlbSkg
ewogICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZG91YmxlPihpdGVtKTsK
ICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICBhZGRQYXJhbWV0ZXIoYnVpbGRB
cnJheUZvclZlY3RvcihtYXBwZWQpLnB0cigpLCBSZWNvcmRpbmdTd2l6emxlVHlwZXM6OkFycmF5
KTsKKyAgICAgICAgICAgICAgICBhZGRQYXJhbWV0ZXIoYnVpbGRBcnJheUZvclZlY3RvcihtYXBw
ZWQpLCBSZWNvcmRpbmdTd2l6emxlVHlwZXM6OkFycmF5KTsKICAgICAgICAgICAgIH0sCi0gICAg
ICAgICAgICBbJl0gKGNvbnN0IFZlY3RvcjxpbnQzMl90PiYgdmFsdWUpIHsgYWRkUGFyYW1ldGVy
KGJ1aWxkQXJyYXlGb3JWZWN0b3IodmFsdWUpLnB0cigpLCBSZWNvcmRpbmdTd2l6emxlVHlwZXM6
OkFycmF5KTsgfSwKKyAgICAgICAgICAgIFsmXSAoY29uc3QgVmVjdG9yPGludDMyX3Q+JiB2YWx1
ZSkgeyBhZGRQYXJhbWV0ZXIoYnVpbGRBcnJheUZvclZlY3Rvcih2YWx1ZSksIFJlY29yZGluZ1N3
aXp6bGVUeXBlczo6QXJyYXkpOyB9LAogI2lmIEVOQUJMRShXRUJHTCkKICAgICAgICAgICAgIFsm
XSAoY29uc3QgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6RmxvYXQzMkxpc3Q6OlZhcmlhbnRU
eXBlJiB2YWx1ZSkgewogICAgICAgICAgICAgICAgIFdURjo6dmlzaXQocGFyc2VQYXJhbWV0ZXIs
IHZhbHVlKTsKQEAgLTExNTksNyArMTE2MCw3IEBAIFJlZjxKU09OOjpBcnJheU9mPEpTT046OlZh
bHVlPj4gSW5zcGVjdG9yQ2FudmFzOjpidWlsZEFjdGlvbihjb25zdCBTdHJpbmcmIG5hbWUsCiBS
ZWY8SlNPTjo6QXJyYXlPZjxKU09OOjpWYWx1ZT4+IEluc3BlY3RvckNhbnZhczo6YnVpbGRBcnJh
eUZvckNhbnZhc0dyYWRpZW50KGNvbnN0IENhbnZhc0dyYWRpZW50JiBjYW52YXNHcmFkaWVudCkK
IHsKICAgICBBU0NJSUxpdGVyYWwgdHlwZSA9ICJsaW5lYXItZ3JhZGllbnQiX3M7Ci0gICAgYXV0
byBwYXJhbWV0ZXJzID0gSlNPTjo6QXJyYXlPZjxmbG9hdD46OmNyZWF0ZSgpOworICAgIGF1dG8g
cGFyYW1ldGVycyA9IEpTT046OkFycmF5T2Y8ZG91YmxlPjo6Y3JlYXRlKCk7CiAgICAgV1RGOjpz
d2l0Y2hPbihjYW52YXNHcmFkaWVudC5ncmFkaWVudCgpLmRhdGEoKSwKICAgICAgICAgWyZdIChj
b25zdCBHcmFkaWVudDo6TGluZWFyRGF0YSYgZGF0YSkgewogICAgICAgICAgICAgcGFyYW1ldGVy
cy0+YWRkSXRlbShkYXRhLnBvaW50MC54KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckNhbnZhcy5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckNhbnZhcy5oCmluZGV4IDc4Y2I2YThhM2I4YWI3ODBlOTVmYjNmYWVkM2FiYzU5NGQx
NDY1OTguLmIyN2JjOGQ0OTIzOTExN2JlZTUyNWQ1ZmU2YWMyNmUyZDYxNmI1YzcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDYW52YXMuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzLmgKQEAgLTU4LDggKzU4LDYgQEAg
Y2xhc3MgT2Zmc2NyZWVuQ2FudmFzOwogY2xhc3MgVHlwZWRPTUNTU0ltYWdlVmFsdWU7CiAjZW5k
aWYKIAotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7Ci0KIGNsYXNzIEluc3BlY3RvckNhbnZh
cyBmaW5hbCA6IHB1YmxpYyBSZWZDb3VudGVkPEluc3BlY3RvckNhbnZhcz4gewogcHVibGljOgog
ICAgIHN0YXRpYyBSZWY8SW5zcGVjdG9yQ2FudmFzPiBjcmVhdGUoQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dCYpOwpAQCAtMTA3LDcgKzEwNSw3IEBAIHB1YmxpYzoKICAgICBSZWY8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6Q2FudmFzOjpDYW52YXM+IGJ1aWxkT2JqZWN0Rm9yQ2FudmFzKGJvb2wgY2FwdHVy
ZUJhY2t0cmFjZSk7CiAgICAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlY29yZGluZzo6UmVj
b3JkaW5nPiByZWxlYXNlT2JqZWN0Rm9yUmVjb3JkaW5nKCk7CiAKLSAgICBTdHJpbmcgZ2V0Q2Fu
dmFzQ29udGVudEFzRGF0YVVSTChFcnJvclN0cmluZyYpOworICAgIFN0cmluZyBnZXRDYW52YXND
b250ZW50QXNEYXRhVVJMKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nJik7CiAKIHBy
aXZhdGU6CiAgICAgSW5zcGVjdG9yQ2FudmFzKENhbnZhc1JlbmRlcmluZ0NvbnRleHQmKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAppbmRl
eCAyZTkwYzExOTQ4YTdlMGViNjEwNWE4M2UyYzA4Y2I0ZjgyYThmMmZlLi42MzBkZjcxNzkwYzYz
YjZlNzU4NzM0NTFhMTc0MGY4NmY2N2UwMmRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCkBAIC00NzgsMTAgKzQ3OCw4IEBAIHZvaWQg
SW5zcGVjdG9yQ29udHJvbGxlcjo6ZnJvbnRlbmRJbml0aWFsaXplZCgpCiB7CiAgICAgaWYgKG1f
cGF1c2VBZnRlckluaXRpYWxpemF0aW9uKSB7CiAgICAgICAgIG1fcGF1c2VBZnRlckluaXRpYWxp
emF0aW9uID0gZmFsc2U7Ci0gICAgICAgIGlmIChhdXRvKiBkZWJ1Z2dlckFnZW50ID0gbV9pbnN0
cnVtZW50aW5nQWdlbnRzLT5lbmFibGVkUGFnZURlYnVnZ2VyQWdlbnQoKSkgewotICAgICAgICAg
ICAgRXJyb3JTdHJpbmcgaWdub3JlZDsKLSAgICAgICAgICAgIGRlYnVnZ2VyQWdlbnQtPnBhdXNl
KGlnbm9yZWQpOwotICAgICAgICB9CisgICAgICAgIGlmIChhdXRvKiBkZWJ1Z2dlckFnZW50ID0g
bV9pbnN0cnVtZW50aW5nQWdlbnRzLT5lbmFibGVkUGFnZURlYnVnZ2VyQWdlbnQoKSkKKyAgICAg
ICAgICAgIGRlYnVnZ2VyQWdlbnQtPnBhdXNlKCk7CiAgICAgfQogCiAjaWYgRU5BQkxFKFJFTU9U
RV9JTlNQRUNUT1IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yRnJvbnRlbmRIb3N0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JG
cm9udGVuZEhvc3QuY3BwCmluZGV4IDUwZTBjODNiYzkyMDY2MmU3NjgwMjU1Nzc1MmIzNmYyMzc1
YjAzOWMuLmE2YmI4NzdhMjJhMGFhODZiZjg5OTgzOWE3NWY1YWZmNmVmOGRlMzAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuY3BwCkBA
IC02MDcsNyArNjA3LDcgQEAgYm9vbCBJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OmRpYWdub3N0aWNM
b2dnaW5nQXZhaWxhYmxlKCkKICAgICByZXR1cm4gbV9jbGllbnQgJiYgbV9jbGllbnQtPmRpYWdu
b3N0aWNMb2dnaW5nQXZhaWxhYmxlKCk7CiB9CiAKLXN0YXRpYyBPcHRpb25hbDxEaWFnbm9zdGlj
TG9nZ2luZ0NsaWVudDo6VmFsdWVQYXlsb2FkPiB2YWx1ZVBheWxvYWRGcm9tSlNPTlZhbHVlKGNv
bnN0IFJlZlB0cjxKU09OOjpWYWx1ZT4mIHZhbHVlKQorc3RhdGljIE9wdGlvbmFsPERpYWdub3N0
aWNMb2dnaW5nQ2xpZW50OjpWYWx1ZVBheWxvYWQ+IHZhbHVlUGF5bG9hZEZyb21KU09OVmFsdWUo
UmVmPEpTT046OlZhbHVlPiYmIHZhbHVlKQogewogICAgIHN3aXRjaCAodmFsdWUtPnR5cGUoKSkg
ewogICAgIGNhc2UgSlNPTjo6VmFsdWU6OlR5cGU6OkFycmF5OgpAQCAtNjE3LDI0ICs2MTcsMTYg
QEAgc3RhdGljIE9wdGlvbmFsPERpYWdub3N0aWNMb2dnaW5nQ2xpZW50OjpWYWx1ZVBheWxvYWQ+
IHZhbHVlUGF5bG9hZEZyb21KU09OVmFsdWUKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
IAogICAgIGNhc2UgSlNPTjo6VmFsdWU6OlR5cGU6OkJvb2xlYW46Ci0gICAgICAgIGJvb2wgYm9v
bFZhbHVlOwotICAgICAgICB2YWx1ZS0+YXNCb29sZWFuKGJvb2xWYWx1ZSk7Ci0gICAgICAgIHJl
dHVybiBEaWFnbm9zdGljTG9nZ2luZ0NsaWVudDo6VmFsdWVQYXlsb2FkKGJvb2xWYWx1ZSk7Cisg
ICAgICAgIHJldHVybiBEaWFnbm9zdGljTG9nZ2luZ0NsaWVudDo6VmFsdWVQYXlsb2FkKHZhbHVl
LT5hc0Jvb2xlYW4oKS52YWx1ZU9yKGZhbHNlKSk7CiAKICAgICBjYXNlIEpTT046OlZhbHVlOjpU
eXBlOjpEb3VibGU6Ci0gICAgICAgIGRvdWJsZSBkb3VibGVWYWx1ZTsKLSAgICAgICAgdmFsdWUt
PmFzRG91YmxlKGRvdWJsZVZhbHVlKTsKLSAgICAgICAgcmV0dXJuIERpYWdub3N0aWNMb2dnaW5n
Q2xpZW50OjpWYWx1ZVBheWxvYWQoZG91YmxlVmFsdWUpOworICAgICAgICByZXR1cm4gRGlhZ25v
c3RpY0xvZ2dpbmdDbGllbnQ6OlZhbHVlUGF5bG9hZCh2YWx1ZS0+YXNEb3VibGUoKS52YWx1ZU9y
KDApKTsKIAogICAgIGNhc2UgSlNPTjo6VmFsdWU6OlR5cGU6OkludGVnZXI6Ci0gICAgICAgIGxv
bmcgbG9uZyBpbnRWYWx1ZTsKLSAgICAgICAgdmFsdWUtPmFzSW50ZWdlcihpbnRWYWx1ZSk7Ci0g
ICAgICAgIHJldHVybiBEaWFnbm9zdGljTG9nZ2luZ0NsaWVudDo6VmFsdWVQYXlsb2FkKGludFZh
bHVlKTsKKyAgICAgICAgcmV0dXJuIERpYWdub3N0aWNMb2dnaW5nQ2xpZW50OjpWYWx1ZVBheWxv
YWQoc3RhdGljX2Nhc3Q8bG9uZyBsb25nPih2YWx1ZS0+YXNJbnRlZ2VyKCkudmFsdWVPcigwKSkp
OwogCiAgICAgY2FzZSBKU09OOjpWYWx1ZTo6VHlwZTo6U3RyaW5nOgotICAgICAgICBTdHJpbmcg
c3RyaW5nVmFsdWU7Ci0gICAgICAgIHZhbHVlLT5hc1N0cmluZyhzdHJpbmdWYWx1ZSk7Ci0gICAg
ICAgIHJldHVybiBEaWFnbm9zdGljTG9nZ2luZ0NsaWVudDo6VmFsdWVQYXlsb2FkKHN0cmluZ1Zh
bHVlKTsKKyAgICAgICAgcmV0dXJuIERpYWdub3N0aWNMb2dnaW5nQ2xpZW50OjpWYWx1ZVBheWxv
YWQodmFsdWUtPmFzU3RyaW5nKCkpOwogICAgIH0KIAogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwpAQCAtNjQ2LDE3ICs2MzgsMTcgQEAgdm9pZCBJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OmxvZ0Rp
YWdub3N0aWNFdmVudChjb25zdCBTdHJpbmcmIGV2ZW50TmFtZSwgY29uc3QgU3QKICAgICBpZiAo
IXN1cHBvcnRzRGlhZ25vc3RpY0xvZ2dpbmcoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVm
UHRyPEpTT046OlZhbHVlPiBwYXlsb2FkVmFsdWU7Ci0gICAgaWYgKCFKU09OOjpWYWx1ZTo6cGFy
c2VKU09OKHBheWxvYWRTdHJpbmcsIHBheWxvYWRWYWx1ZSkpCisgICAgYXV0byBwYXlsb2FkVmFs
dWUgPSBKU09OOjpWYWx1ZTo6cGFyc2VKU09OKHBheWxvYWRTdHJpbmcpOworICAgIGlmICghcGF5
bG9hZFZhbHVlKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBw
YXlsb2FkT2JqZWN0OwotICAgIGlmICghcGF5bG9hZFZhbHVlLT5hc09iamVjdChwYXlsb2FkT2Jq
ZWN0KSkKKyAgICBhdXRvIHBheWxvYWRPYmplY3QgPSBwYXlsb2FkVmFsdWUtPmFzT2JqZWN0KCk7
CisgICAgaWYgKCFwYXlsb2FkT2JqZWN0KQogICAgICAgICByZXR1cm47CiAKICAgICBEaWFnbm9z
dGljTG9nZ2luZ0NsaWVudDo6VmFsdWVEaWN0aW9uYXJ5IGRpY3Rpb25hcnk7Ci0gICAgZm9yIChj
b25zdCBhdXRvJiBba2V5LCB2YWx1ZV0gOiAqcGF5bG9hZE9iamVjdCkgewotICAgICAgICBpZiAo
YXV0byB2YWx1ZVBheWxvYWQgPSB2YWx1ZVBheWxvYWRGcm9tSlNPTlZhbHVlKHZhbHVlKSkKKyAg
ICBmb3IgKGF1dG8mIFtrZXksIHZhbHVlXSA6ICpwYXlsb2FkT2JqZWN0KSB7CisgICAgICAgIGlm
IChhdXRvIHZhbHVlUGF5bG9hZCA9IHZhbHVlUGF5bG9hZEZyb21KU09OVmFsdWUoV1RGTW92ZSh2
YWx1ZSkpKQogICAgICAgICAgICAgZGljdGlvbmFyeS5zZXQoa2V5LCBXVEZNb3ZlKHZhbHVlUGF5
bG9hZC52YWx1ZSgpKSk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yU3R5bGVTaGVldC5jcHAKaW5kZXggYWUwZmVmNWRmZTM5YjlhNTE2ZTU1MTAzMDdl
YWJjYjY2MGQxYWJjYi4uOTc2NjllZmI2ODdkMzM1NTRkNTJiYzY4ZTE4YzY4NDFhZWI0Y2Y0ZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNw
cApAQCAtMzgwLDcgKzM4MCw3IEBAIHZvaWQgU3R5bGVTaGVldEhhbmRsZXI6Om9ic2VydmVDb21t
ZW50KHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQpCiAgICAgbV9jdXJy
ZW50UnVsZURhdGFTdGFjay5sYXN0KCktPnN0eWxlU291cmNlRGF0YS0+cHJvcGVydHlEYXRhLmFw
cGVuZChDU1NQcm9wZXJ0eVNvdXJjZURhdGEocHJvcGVydHlEYXRhLm5hbWUsIHByb3BlcnR5RGF0
YS52YWx1ZSwgZmFsc2UsIHRydWUsIHRydWUsIFNvdXJjZVJhbmdlKHN0YXJ0T2Zmc2V0IC0gdG9w
UnVsZUJvZHlSYW5nZS5zdGFydCwgZW5kT2Zmc2V0IC0gdG9wUnVsZUJvZHlSYW5nZS5zdGFydCkp
KTsKIH0KIAotc3RhdGljIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlNvdXJjZVJh
bmdlPiBidWlsZFNvdXJjZVJhbmdlT2JqZWN0KGNvbnN0IFNvdXJjZVJhbmdlJiByYW5nZSwgY29u
c3QgVmVjdG9yPHNpemVfdD4mIGxpbmVFbmRpbmdzLCBpbnQqIGVuZGluZ0xpbmUgPSBudWxscHRy
KQorc3RhdGljIFJlZlB0cjxQcm90b2NvbDo6Q1NTOjpTb3VyY2VSYW5nZT4gYnVpbGRTb3VyY2VS
YW5nZU9iamVjdChjb25zdCBTb3VyY2VSYW5nZSYgcmFuZ2UsIGNvbnN0IFZlY3RvcjxzaXplX3Q+
JiBsaW5lRW5kaW5ncywgaW50KiBlbmRpbmdMaW5lID0gbnVsbHB0cikKIHsKICAgICBpZiAobGlu
ZUVuZGluZ3MuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTM5MSw3ICsz
OTEsNyBAQCBzdGF0aWMgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U291cmNlUmFu
Z2U+IGJ1aWxkU291cmNlUmFuZ2VPYmplY3QoY29ucwogICAgIGlmIChlbmRpbmdMaW5lKQogICAg
ICAgICAqZW5kaW5nTGluZSA9IGVuZC5tX2xpbmUuemVyb0Jhc2VkSW50KCk7CiAKLSAgICByZXR1
cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTb3VyY2VSYW5nZTo6Y3JlYXRlKCkKKyAgICBy
ZXR1cm4gUHJvdG9jb2w6OkNTUzo6U291cmNlUmFuZ2U6OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRT
dGFydExpbmUoc3RhcnQubV9saW5lLnplcm9CYXNlZEludCgpKQogICAgICAgICAuc2V0U3RhcnRD
b2x1bW4oc3RhcnQubV9jb2x1bW4uemVyb0Jhc2VkSW50KCkpCiAgICAgICAgIC5zZXRFbmRMaW5l
KGVuZC5tX2xpbmUuemVyb0Jhc2VkSW50KCkpCkBAIC00MjgsMzQgKzQyOCwzNCBAQCBzdGF0aWMg
UmVmUHRyPENTU1J1bGVMaXN0PiBhc0NTU1J1bGVMaXN0KENTU1J1bGUqIHJ1bGUpCiAgICAgcmV0
dXJuIG51bGxwdHI7CiB9CiAKLXN0YXRpYyBSZWY8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpDU1M6Okdyb3VwaW5nPj4gYnVpbGRBcnJheUZvckdyb3VwaW5ncyhDU1NSdWxlJiBy
dWxlKQorc3RhdGljIFJlZjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpDU1M6Okdyb3VwaW5nPj4g
YnVpbGRBcnJheUZvckdyb3VwaW5ncyhDU1NSdWxlJiBydWxlKQogewotICAgIGF1dG8gZ3JvdXBp
bmdzUGF5bG9hZCA9IEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpHcm91
cGluZz46OmNyZWF0ZSgpOworICAgIGF1dG8gZ3JvdXBpbmdzUGF5bG9hZCA9IEpTT046OkFycmF5
T2Y8UHJvdG9jb2w6OkNTUzo6R3JvdXBpbmc+OjpjcmVhdGUoKTsKIAogICAgIGF1dG8qIHBhcmVu
dFJ1bGUgPSAmcnVsZTsKICAgICB3aGlsZSAocGFyZW50UnVsZSkgewotICAgICAgICBSZWZQdHI8
SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpHcm91cGluZz4gcnVsZUdyb3VwaW5nUGF5bG9hZDsK
KyAgICAgICAgUmVmUHRyPFByb3RvY29sOjpDU1M6Okdyb3VwaW5nPiBydWxlR3JvdXBpbmdQYXls
b2FkOwogCiAgICAgICAgIGlmIChpczxDU1NNZWRpYVJ1bGU+KHBhcmVudFJ1bGUpKSB7CiAgICAg
ICAgICAgICBhdXRvKiBtZWRpYSA9IGRvd25jYXN0PENTU01lZGlhUnVsZT4ocGFyZW50UnVsZSkt
Pm1lZGlhKCk7CiAgICAgICAgICAgICBpZiAobWVkaWEgJiYgbWVkaWEtPmxlbmd0aCgpICYmIG1l
ZGlhLT5tZWRpYVRleHQoKSAhPSAiYWxsIikgewotICAgICAgICAgICAgICAgIHJ1bGVHcm91cGlu
Z1BheWxvYWQgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6Okdyb3VwaW5nOjpjcmVhdGUoKQor
ICAgICAgICAgICAgICAgIHJ1bGVHcm91cGluZ1BheWxvYWQgPSBQcm90b2NvbDo6Q1NTOjpHcm91
cGluZzo6Y3JlYXRlKCkKICAgICAgICAgICAgICAgICAgICAgLnNldFRleHQobWVkaWEtPm1lZGlh
VGV4dCgpKQotICAgICAgICAgICAgICAgICAgICAuc2V0VHlwZShJbnNwZWN0b3I6OlByb3RvY29s
OjpDU1M6Okdyb3VwaW5nOjpUeXBlOjpNZWRpYVJ1bGUpCisgICAgICAgICAgICAgICAgICAgIC5z
ZXRUeXBlKFByb3RvY29sOjpDU1M6Okdyb3VwaW5nOjpUeXBlOjpNZWRpYVJ1bGUpCiAgICAgICAg
ICAgICAgICAgICAgIC5yZWxlYXNlKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBp
ZiAoaXM8Q1NTSW1wb3J0UnVsZT4ocGFyZW50UnVsZSkpIHsKICAgICAgICAgICAgIGF1dG8mIG1l
ZGlhID0gZG93bmNhc3Q8Q1NTSW1wb3J0UnVsZT4ocGFyZW50UnVsZSktPm1lZGlhKCk7CiAgICAg
ICAgICAgICBpZiAobWVkaWEubGVuZ3RoKCkgJiYgbWVkaWEubWVkaWFUZXh0KCkgIT0gImFsbCIp
IHsKLSAgICAgICAgICAgICAgICBydWxlR3JvdXBpbmdQYXlsb2FkID0gSW5zcGVjdG9yOjpQcm90
b2NvbDo6Q1NTOjpHcm91cGluZzo6Y3JlYXRlKCkKKyAgICAgICAgICAgICAgICBydWxlR3JvdXBp
bmdQYXlsb2FkID0gUHJvdG9jb2w6OkNTUzo6R3JvdXBpbmc6OmNyZWF0ZSgpCiAgICAgICAgICAg
ICAgICAgICAgIC5zZXRUZXh0KG1lZGlhLm1lZGlhVGV4dCgpKQotICAgICAgICAgICAgICAgICAg
ICAuc2V0VHlwZShJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6Okdyb3VwaW5nOjpUeXBlOjpNZWRp
YUltcG9ydFJ1bGUpCisgICAgICAgICAgICAgICAgICAgIC5zZXRUeXBlKFByb3RvY29sOjpDU1M6
Okdyb3VwaW5nOjpUeXBlOjpNZWRpYUltcG9ydFJ1bGUpCiAgICAgICAgICAgICAgICAgICAgIC5y
ZWxlYXNlKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAoaXM8Q1NTU3VwcG9y
dHNSdWxlPihwYXJlbnRSdWxlKSkgewotICAgICAgICAgICAgcnVsZUdyb3VwaW5nUGF5bG9hZCA9
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6R3JvdXBpbmc6OmNyZWF0ZSgpCisgICAgICAgICAg
ICBydWxlR3JvdXBpbmdQYXlsb2FkID0gUHJvdG9jb2w6OkNTUzo6R3JvdXBpbmc6OmNyZWF0ZSgp
CiAgICAgICAgICAgICAgICAgLnNldFRleHQoZG93bmNhc3Q8Q1NTU3VwcG9ydHNSdWxlPihwYXJl
bnRSdWxlKS0+Y29uZGl0aW9uVGV4dCgpKQotICAgICAgICAgICAgICAgIC5zZXRUeXBlKEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkNTUzo6R3JvdXBpbmc6OlR5cGU6OlN1cHBvcnRzUnVsZSkKKyAgICAg
ICAgICAgICAgICAuc2V0VHlwZShQcm90b2NvbDo6Q1NTOjpHcm91cGluZzo6VHlwZTo6U3VwcG9y
dHNSdWxlKQogICAgICAgICAgICAgICAgIC5yZWxlYXNlKCk7CiAgICAgICAgIH0KIApAQCAtNDcw
LDcgKzQ3MCw3IEBAIHN0YXRpYyBSZWY8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29s
OjpDU1M6Okdyb3VwaW5nPj4gYnVpbGRBcnJheUZvckdyb3VwCiAgICAgICAgICAgICAgICAgICAg
IHJ1bGVHcm91cGluZ1BheWxvYWQtPnNldFNvdXJjZVVSTChzb3VyY2VVUkwpOwogICAgICAgICAg
ICAgfQogCi0gICAgICAgICAgICBncm91cGluZ3NQYXlsb2FkLT5hZGRJdGVtKFdURk1vdmUocnVs
ZUdyb3VwaW5nUGF5bG9hZCkpOworICAgICAgICAgICAgZ3JvdXBpbmdzUGF5bG9hZC0+YWRkSXRl
bShydWxlR3JvdXBpbmdQYXlsb2FkLnJlbGVhc2VOb25OdWxsKCkpOwogICAgICAgICB9CiAKICAg
ICAgICAgaWYgKHBhcmVudFJ1bGUtPnBhcmVudFJ1bGUoKSkgewpAQCAtNDgyLDkgKzQ4Miw5IEBA
IHN0YXRpYyBSZWY8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6Okdyb3Vw
aW5nPj4gYnVpbGRBcnJheUZvckdyb3VwCiAgICAgICAgIHdoaWxlIChzdHlsZVNoZWV0KSB7CiAg
ICAgICAgICAgICBhdXRvKiBtZWRpYSA9IHN0eWxlU2hlZXQtPm1lZGlhKCk7CiAgICAgICAgICAg
ICBpZiAobWVkaWEgJiYgbWVkaWEtPmxlbmd0aCgpICYmIG1lZGlhLT5tZWRpYVRleHQoKSAhPSAi
YWxsIikgewotICAgICAgICAgICAgICAgIGF1dG8gc2hlZXRHcm91cGluZ1BheWxvYWQgPSBJbnNw
ZWN0b3I6OlByb3RvY29sOjpDU1M6Okdyb3VwaW5nOjpjcmVhdGUoKQorICAgICAgICAgICAgICAg
IGF1dG8gc2hlZXRHcm91cGluZ1BheWxvYWQgPSBQcm90b2NvbDo6Q1NTOjpHcm91cGluZzo6Y3Jl
YXRlKCkKICAgICAgICAgICAgICAgICAgICAgLnNldFRleHQobWVkaWEtPm1lZGlhVGV4dCgpKQot
ICAgICAgICAgICAgICAgICAgICAuc2V0VHlwZShpczxIVE1MU3R5bGVFbGVtZW50PihzdHlsZVNo
ZWV0LT5vd25lck5vZGUoKSkgPyBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6Okdyb3VwaW5nOjpU
eXBlOjpNZWRpYVN0eWxlTm9kZTogSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpHcm91cGluZzo6
VHlwZTo6TWVkaWFMaW5rTm9kZSkKKyAgICAgICAgICAgICAgICAgICAgLnNldFR5cGUoaXM8SFRN
TFN0eWxlRWxlbWVudD4oc3R5bGVTaGVldC0+b3duZXJOb2RlKCkpID8gUHJvdG9jb2w6OkNTUzo6
R3JvdXBpbmc6OlR5cGU6Ok1lZGlhU3R5bGVOb2RlOiBQcm90b2NvbDo6Q1NTOjpHcm91cGluZzo6
VHlwZTo6TWVkaWFMaW5rTm9kZSkKICAgICAgICAgICAgICAgICAgICAgLnJlbGVhc2UoKTsKIAog
ICAgICAgICAgICAgICAgIFN0cmluZyBzb3VyY2VVUkw7CkBAIC01MjMsMjggKzUyMywzMCBAQCBJ
bnNwZWN0b3JTdHlsZTo6SW5zcGVjdG9yU3R5bGUoY29uc3QgSW5zcGVjdG9yQ1NTSWQmIHN0eWxl
SWQsIFJlZjxDU1NTdHlsZURlY2xhcgogCiBJbnNwZWN0b3JTdHlsZTo6fkluc3BlY3RvclN0eWxl
KCkgPSBkZWZhdWx0OwogCi1SZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHls
ZT4gSW5zcGVjdG9yU3R5bGU6OmJ1aWxkT2JqZWN0Rm9yU3R5bGUoKSBjb25zdAorUmVmPFByb3Rv
Y29sOjpDU1M6OkNTU1N0eWxlPiBJbnNwZWN0b3JTdHlsZTo6YnVpbGRPYmplY3RGb3JTdHlsZSgp
IGNvbnN0CiB7Ci0gICAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+IHJl
c3VsdCA9IHN0eWxlV2l0aFByb3BlcnRpZXMoKTsKLSAgICBpZiAoIW1fc3R5bGVJZC5pc0VtcHR5
KCkpCi0gICAgICAgIHJlc3VsdC0+c2V0U3R5bGVJZChtX3N0eWxlSWQuYXNQcm90b2NvbFZhbHVl
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGVJZD4oKSk7CisgICAgUmVmPFByb3Rv
Y29sOjpDU1M6OkNTU1N0eWxlPiByZXN1bHQgPSBzdHlsZVdpdGhQcm9wZXJ0aWVzKCk7CisgICAg
aWYgKGF1dG8gc3R5bGVJZCA9IG1fc3R5bGVJZC5hc1Byb3RvY29sVmFsdWU8UHJvdG9jb2w6OkNT
Uzo6Q1NTU3R5bGVJZD4oKSkKKyAgICAgICAgcmVzdWx0LT5zZXRTdHlsZUlkKHN0eWxlSWQucmVs
ZWFzZU5vbk51bGwoKSk7CiAKICAgICByZXN1bHQtPnNldFdpZHRoKG1fc3R5bGUtPmdldFByb3Bl
cnR5VmFsdWUoIndpZHRoIikpOwogICAgIHJlc3VsdC0+c2V0SGVpZ2h0KG1fc3R5bGUtPmdldFBy
b3BlcnR5VmFsdWUoImhlaWdodCIpKTsKIAogICAgIFJlZlB0cjxDU1NSdWxlU291cmNlRGF0YT4g
c291cmNlRGF0YSA9IGV4dHJhY3RTb3VyY2VEYXRhKCk7Ci0gICAgaWYgKHNvdXJjZURhdGEpCi0g
ICAgICAgIHJlc3VsdC0+c2V0UmFuZ2UoYnVpbGRTb3VyY2VSYW5nZU9iamVjdChzb3VyY2VEYXRh
LT5ydWxlQm9keVJhbmdlLCBtX3BhcmVudFN0eWxlU2hlZXQtPmxpbmVFbmRpbmdzKCkpKTsKKyAg
ICBpZiAoc291cmNlRGF0YSkgeworICAgICAgICBpZiAoYXV0byByYW5nZSA9IGJ1aWxkU291cmNl
UmFuZ2VPYmplY3Qoc291cmNlRGF0YS0+cnVsZUJvZHlSYW5nZSwgbV9wYXJlbnRTdHlsZVNoZWV0
LT5saW5lRW5kaW5ncygpKSkKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0UmFuZ2UocmFuZ2UucmVs
ZWFzZU5vbk51bGwoKSk7CisgICAgfQogCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotUmVmPEpT
T046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NDb21wdXRlZFN0eWxlUHJv
cGVydHk+PiBJbnNwZWN0b3JTdHlsZTo6YnVpbGRBcnJheUZvckNvbXB1dGVkU3R5bGUoKSBjb25z
dAorUmVmPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkNTUzo6Q1NTQ29tcHV0ZWRTdHlsZVByb3Bl
cnR5Pj4gSW5zcGVjdG9yU3R5bGU6OmJ1aWxkQXJyYXlGb3JDb21wdXRlZFN0eWxlKCkgY29uc3QK
IHsKLSAgICBhdXRvIHJlc3VsdCA9IEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6
Q1NTOjpDU1NDb21wdXRlZFN0eWxlUHJvcGVydHk+OjpjcmVhdGUoKTsKKyAgICBhdXRvIHJlc3Vs
dCA9IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkNTUzo6Q1NTQ29tcHV0ZWRTdHlsZVByb3BlcnR5
Pjo6Y3JlYXRlKCk7CiAgICAgZm9yIChhdXRvJiBwcm9wZXJ0eSA6IGNvbGxlY3RQcm9wZXJ0aWVz
KHRydWUpKSB7CiAgICAgICAgIGNvbnN0IENTU1Byb3BlcnR5U291cmNlRGF0YSYgcHJvcGVydHlF
bnRyeSA9IHByb3BlcnR5LnNvdXJjZURhdGE7Ci0gICAgICAgIGF1dG8gZW50cnkgPSBJbnNwZWN0
b3I6OlByb3RvY29sOjpDU1M6OkNTU0NvbXB1dGVkU3R5bGVQcm9wZXJ0eTo6Y3JlYXRlKCkKKyAg
ICAgICAgYXV0byBlbnRyeSA9IFByb3RvY29sOjpDU1M6OkNTU0NvbXB1dGVkU3R5bGVQcm9wZXJ0
eTo6Y3JlYXRlKCkKICAgICAgICAgICAgIC5zZXROYW1lKHByb3BlcnR5RW50cnkubmFtZSkKICAg
ICAgICAgICAgIC5zZXRWYWx1ZShwcm9wZXJ0eUVudHJ5LnZhbHVlKQogICAgICAgICAgICAgLnJl
bGVhc2UoKTsKQEAgLTYyMywxMyArNjI1LDEzIEBAIFZlY3RvcjxJbnNwZWN0b3JTdHlsZVByb3Bl
cnR5PiBJbnNwZWN0b3JTdHlsZTo6Y29sbGVjdFByb3BlcnRpZXMoYm9vbCBpbmNsdWRlQWxsCiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NT
U3R5bGU+IEluc3BlY3RvclN0eWxlOjpzdHlsZVdpdGhQcm9wZXJ0aWVzKCkgY29uc3QKK1JlZjxQ
cm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4gSW5zcGVjdG9yU3R5bGU6OnN0eWxlV2l0aFByb3BlcnRp
ZXMoKSBjb25zdAogewogICAgIGF1dG8gcHJvcGVydGllcyA9IGNvbGxlY3RQcm9wZXJ0aWVzKGZh
bHNlKTsKIAotICAgIGF1dG8gcHJvcGVydGllc09iamVjdCA9IEpTT046OkFycmF5T2Y8SW5zcGVj
dG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0eT46OmNyZWF0ZSgpOwotICAgIGF1dG8gc2hv
cnRoYW5kRW50cmllcyA9IEFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTaG9ydGhh
bmRFbnRyeT46OmNyZWF0ZSgpOwotICAgIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0eT4+IHByb3BlcnR5TmFtZVRvUHJldmlvdXNBY3Rp
dmVQcm9wZXJ0eTsKKyAgICBhdXRvIHByb3BlcnRpZXNPYmplY3QgPSBKU09OOjpBcnJheU9mPFBy
b3RvY29sOjpDU1M6OkNTU1Byb3BlcnR5Pjo6Y3JlYXRlKCk7CisgICAgYXV0byBzaG9ydGhhbmRF
bnRyaWVzID0gQXJyYXlPZjxQcm90b2NvbDo6Q1NTOjpTaG9ydGhhbmRFbnRyeT46OmNyZWF0ZSgp
OworICAgIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8UHJvdG9jb2w6OkNTUzo6Q1NTUHJvcGVydHk+
PiBwcm9wZXJ0eU5hbWVUb1ByZXZpb3VzQWN0aXZlUHJvcGVydHk7CiAgICAgSGFzaFNldDxTdHJp
bmc+IGZvdW5kU2hvcnRoYW5kczsKICAgICBTdHJpbmcgcHJldmlvdXNQcmlvcml0eTsKICAgICBT
dHJpbmcgcHJldmlvdXNTdGF0dXM7CkBAIC02NDEsOSArNjQzLDkgQEAgUmVmPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+IEluc3BlY3RvclN0eWxlOjpzdHlsZVdpdGhQcm9wZXJ0
aWVzKCkgY28KICAgICAgICAgY29uc3QgQ1NTUHJvcGVydHlTb3VyY2VEYXRhJiBwcm9wZXJ0eUVu
dHJ5ID0gaXQtPnNvdXJjZURhdGE7CiAgICAgICAgIGNvbnN0IFN0cmluZyYgbmFtZSA9IHByb3Bl
cnR5RW50cnkubmFtZTsKIAotICAgICAgICBhdXRvIHN0YXR1cyA9IGl0LT5kaXNhYmxlZCA/IElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUHJvcGVydHlTdGF0dXM6OkRpc2FibGVkIDogSW5z
cGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0eVN0YXR1czo6QWN0aXZlOworICAgICAg
ICBhdXRvIHN0YXR1cyA9IGl0LT5kaXNhYmxlZCA/IFByb3RvY29sOjpDU1M6OkNTU1Byb3BlcnR5
U3RhdHVzOjpEaXNhYmxlZCA6IFByb3RvY29sOjpDU1M6OkNTU1Byb3BlcnR5U3RhdHVzOjpBY3Rp
dmU7CiAKLSAgICAgICAgYXV0byBwcm9wZXJ0eSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6
Q1NTUHJvcGVydHk6OmNyZWF0ZSgpCisgICAgICAgIGF1dG8gcHJvcGVydHkgPSBQcm90b2NvbDo6
Q1NTOjpDU1NQcm9wZXJ0eTo6Y3JlYXRlKCkKICAgICAgICAgICAgIC5zZXROYW1lKG5hbWUuY29u
dmVydFRvQVNDSUlMb3dlcmNhc2UoKSkKICAgICAgICAgICAgIC5zZXRWYWx1ZShwcm9wZXJ0eUVu
dHJ5LnZhbHVlKQogICAgICAgICAgICAgLnJlbGVhc2UoKTsKQEAgLTY2OSw3ICs2NzEsOCBAQCBS
ZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4gSW5zcGVjdG9yU3R5bGU6OnN0
eWxlV2l0aFByb3BlcnRpZXMoKSBjbwogICAgICAgICAgICAgU291cmNlUmFuZ2UgYWJzb2x1dGVQ
cm9wZXJ0eVJhbmdlID0gcHJvcGVydHlFbnRyeS5yYW5nZTsKICAgICAgICAgICAgIGFic29sdXRl
UHJvcGVydHlSYW5nZS5zdGFydCArPSBydWxlQm9keVJhbmdlU3RhcnQ7CiAgICAgICAgICAgICBh
YnNvbHV0ZVByb3BlcnR5UmFuZ2UuZW5kICs9IHJ1bGVCb2R5UmFuZ2VTdGFydDsKLSAgICAgICAg
ICAgIHByb3BlcnR5LT5zZXRSYW5nZShidWlsZFNvdXJjZVJhbmdlT2JqZWN0KGFic29sdXRlUHJv
cGVydHlSYW5nZSwgbGluZUVuZGluZ3MpKTsKKyAgICAgICAgICAgIGlmIChhdXRvIHJhbmdlID0g
YnVpbGRTb3VyY2VSYW5nZU9iamVjdChhYnNvbHV0ZVByb3BlcnR5UmFuZ2UsIGxpbmVFbmRpbmdz
KSkKKyAgICAgICAgICAgICAgICBwcm9wZXJ0eS0+c2V0UmFuZ2UocmFuZ2UucmVsZWFzZU5vbk51
bGwoKSk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoIWl0LT5kaXNhYmxlZCkgewpAQCAtNjgz
LDMwICs2ODYsMzUgQEAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+IElu
c3BlY3RvclN0eWxlOjpzdHlsZVdpdGhQcm9wZXJ0aWVzKCkgY28KIAogICAgICAgICAgICAgICAg
IC8vIENhbm9uaWNhbGl6ZSBwcm9wZXJ0eSBuYW1lcyB0byB0cmVhdCBub24tcHJlZml4ZWQgYW5k
IHZlbmRvci1wcmVmaXhlZCBwcm9wZXJ0eSBuYW1lcyB0aGUgc2FtZSAob3BhY2l0eSB2cy4gLXdl
YmtpdC1vcGFjaXR5KS4KICAgICAgICAgICAgICAgICBTdHJpbmcgY2Fub25pY2FsUHJvcGVydHlO
YW1lID0gcHJvcGVydHlJZCA/IGdldFByb3BlcnR5TmFtZVN0cmluZyhwcm9wZXJ0eUlkKSA6IG5h
bWU7Ci0gICAgICAgICAgICAgICAgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpDU1M6OkNTU1Byb3BlcnR5Pj46Oml0ZXJhdG9yIGFjdGl2ZUl0ID0gcHJvcGVydHlO
YW1lVG9QcmV2aW91c0FjdGl2ZVByb3BlcnR5LmZpbmQoY2Fub25pY2FsUHJvcGVydHlOYW1lKTsK
KyAgICAgICAgICAgICAgICBIYXNoTWFwPFN0cmluZywgUmVmUHRyPFByb3RvY29sOjpDU1M6OkNT
U1Byb3BlcnR5Pj46Oml0ZXJhdG9yIGFjdGl2ZUl0ID0gcHJvcGVydHlOYW1lVG9QcmV2aW91c0Fj
dGl2ZVByb3BlcnR5LmZpbmQoY2Fub25pY2FsUHJvcGVydHlOYW1lKTsKICAgICAgICAgICAgICAg
ICBpZiAoYWN0aXZlSXQgIT0gcHJvcGVydHlOYW1lVG9QcmV2aW91c0FjdGl2ZVByb3BlcnR5LmVu
ZCgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0eUVudHJ5LnBhcnNlZE9rKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBib29sIHN1Y2Nlc3NQcmlvcml0eSA9IGFjdGl2ZUl0
LT52YWx1ZS0+Z2V0U3RyaW5nKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUHJvcGVydHk6
OlByaW9yaXR5LCBwcmV2aW91c1ByaW9yaXR5KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJv
b2wgc3VjY2Vzc1N0YXR1cyA9IGFjdGl2ZUl0LT52YWx1ZS0+Z2V0U3RyaW5nKEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkNTUzo6Q1NTUHJvcGVydHk6OlN0YXR1cywgcHJldmlvdXNTdGF0dXMpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Y2Nlc3NTdGF0dXMgJiYgcHJldmlvdXNTdGF0dXMg
IT0gImluYWN0aXZlIikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0
eUVudHJ5LmltcG9ydGFudCB8fCAhc3VjY2Vzc1ByaW9yaXR5KSAvLyBQcmlvcml0eSBub3Qgc2V0
ID09ICJub3QgaW1wb3J0YW50Ii4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hv
dWxkSW5hY3RpdmF0ZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBp
ZiAoc3RhdHVzID09IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUHJvcGVydHlTdGF0dXM6
OkFjdGl2ZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJbmFjdGl2YXRl
IGEgbm9uLWltcG9ydGFudCBwcm9wZXJ0eSBmb2xsb3dpbmcgdGhlIHNhbWUtbmFtZWQgaW1wb3J0
YW50IHByb3BlcnR5LgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSBJ
bnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1Byb3BlcnR5U3RhdHVzOjpJbmFjdGl2ZTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGF1dG8gbmV3UHJpb3JpdHkgPSBhY3RpdmVJdC0+dmFsdWUt
PmdldFN0cmluZyhQcm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0eTo6cHJpb3JpdHlLZXkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCEhbmV3UHJpb3JpdHkpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcHJldmlvdXNQcmlvcml0eSA9IG5ld1ByaW9yaXR5OworCisgICAgICAgICAg
ICAgICAgICAgICAgICBhdXRvIG5ld1N0YXR1cyA9IGFjdGl2ZUl0LT52YWx1ZS0+Z2V0U3RyaW5n
KFByb3RvY29sOjpDU1M6OkNTU1Byb3BlcnR5OjpzdGF0dXNLZXkpOworICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCEhbmV3U3RhdHVzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cHJldmlvdXNTdGF0dXMgPSBuZXdTdGF0dXM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHByZXZpb3VzU3RhdHVzICE9IFByb3RvY29sOjpIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRW
YWx1ZShQcm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0eVN0YXR1czo6SW5hY3RpdmUpKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0eUVudHJ5LmltcG9ydGFudCB8
fCAhIW5ld1ByaW9yaXR5KSAvLyBQcmlvcml0eSBub3Qgc2V0ID09ICJub3QgaW1wb3J0YW50Ii4K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3VsZEluYWN0aXZhdGUgPSB0
cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChzdGF0dXMgPT0g
UHJvdG9jb2w6OkNTUzo6Q1NTUHJvcGVydHlTdGF0dXM6OkFjdGl2ZSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gSW5hY3RpdmF0ZSBhIG5vbi1pbXBvcnRhbnQgcHJv
cGVydHkgZm9sbG93aW5nIHRoZSBzYW1lLW5hbWVkIGltcG9ydGFudCBwcm9wZXJ0eS4KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IFByb3RvY29sOjpDU1M6OkNT
U1Byb3BlcnR5U3RhdHVzOjpJbmFjdGl2ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGJvb2wgcHJldmlvdXNQYXJzZWRPazsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wg
c3VjY2VzcyA9IGFjdGl2ZUl0LT52YWx1ZS0+Z2V0Qm9vbGVhbihJbnNwZWN0b3I6OlByb3RvY29s
OjpDU1M6OkNTU1Byb3BlcnR5OjpQYXJzZWRPaywgcHJldmlvdXNQYXJzZWRPayk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoc3VjY2VzcyAmJiAhcHJldmlvdXNQYXJzZWRPaykKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGF1dG8gcHJldmlvdXNQYXJzZWRPayA9IGFjdGl2ZUl0LT52YWx1
ZS0+Z2V0Qm9vbGVhbihQcm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0eTo6cGFyc2VkT2tLZXkpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByZXZpb3VzUGFyc2VkT2sgJiYgIXByZXZpb3Vz
UGFyc2VkT2spCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvdWxkSW5hY3RpdmF0ZSA9
IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9IGVsc2UKICAg
ICAgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lVG9QcmV2aW91c0FjdGl2ZVByb3BlcnR5LnNl
dChjYW5vbmljYWxQcm9wZXJ0eU5hbWUsIHByb3BlcnR5LmNvcHlSZWYoKSk7CiAKICAgICAgICAg
ICAgICAgICBpZiAoc2hvdWxkSW5hY3RpdmF0ZSkgewotICAgICAgICAgICAgICAgICAgICBhY3Rp
dmVJdC0+dmFsdWUtPnNldFN0YXR1cyhJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1Byb3Bl
cnR5U3RhdHVzOjpJbmFjdGl2ZSk7CisgICAgICAgICAgICAgICAgICAgIGFjdGl2ZUl0LT52YWx1
ZS0+c2V0U3RhdHVzKFByb3RvY29sOjpDU1M6OkNTU1Byb3BlcnR5U3RhdHVzOjpJbmFjdGl2ZSk7
CiAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZVRvUHJldmlvdXNBY3RpdmVQcm9wZXJ0
eS5zZXQoY2Fub25pY2FsUHJvcGVydHlOYW1lLCBwcm9wZXJ0eS5jb3B5UmVmKCkpOwogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSB7CkBAIC03MTQsMTMgKzcyMiwxMyBAQCBS
ZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4gSW5zcGVjdG9yU3R5bGU6OnN0
eWxlV2l0aFByb3BlcnRpZXMoKSBjbwogICAgICAgICAgICAgICAgIC8vIERlZmF1bHQgImltcGxp
Y2l0IiA9PSBmYWxzZS4KICAgICAgICAgICAgICAgICBpZiAoaW1wbGljaXQpCiAgICAgICAgICAg
ICAgICAgICAgIHByb3BlcnR5LT5zZXRJbXBsaWNpdCh0cnVlKTsKLSAgICAgICAgICAgICAgICBz
dGF0dXMgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1Byb3BlcnR5U3RhdHVzOjpTdHls
ZTsKKyAgICAgICAgICAgICAgICBzdGF0dXMgPSBQcm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0eVN0
YXR1czo6U3R5bGU7CiAKICAgICAgICAgICAgICAgICBTdHJpbmcgc2hvcnRoYW5kID0gbV9zdHls
ZS0+Z2V0UHJvcGVydHlTaG9ydGhhbmQobmFtZSk7CiAgICAgICAgICAgICAgICAgaWYgKCFzaG9y
dGhhbmQuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmICghZm91bmRTaG9ydGhh
bmRzLmNvbnRhaW5zKHNob3J0aGFuZCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5k
U2hvcnRoYW5kcy5hZGQoc2hvcnRoYW5kKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8g
ZW50cnkgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlNob3J0aGFuZEVudHJ5OjpjcmVhdGUo
KQorICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBlbnRyeSA9IFByb3RvY29sOjpDU1M6OlNo
b3J0aGFuZEVudHJ5OjpjcmVhdGUoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRO
YW1lKHNob3J0aGFuZCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0VmFsdWUoc2hv
cnRoYW5kVmFsdWUoc2hvcnRoYW5kKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVs
ZWFzZSgpOwpAQCAtNzMxLDExICs3MzksMTEgQEAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNT
Uzo6Q1NTU3R5bGU+IEluc3BlY3RvclN0eWxlOjpzdHlsZVdpdGhQcm9wZXJ0aWVzKCkgY28KICAg
ICAgICAgfQogCiAgICAgICAgIC8vIERlZmF1bHQgInN0YXR1cyIgPT0gInN0eWxlIi4KLSAgICAg
ICAgaWYgKHN0YXR1cyAhPSBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1Byb3BlcnR5U3Rh
dHVzOjpTdHlsZSkKKyAgICAgICAgaWYgKHN0YXR1cyAhPSBQcm90b2NvbDo6Q1NTOjpDU1NQcm9w
ZXJ0eVN0YXR1czo6U3R5bGUpCiAgICAgICAgICAgICBwcm9wZXJ0eS0+c2V0U3RhdHVzKHN0YXR1
cyk7CiAgICAgfQogCi0gICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5
bGU6OmNyZWF0ZSgpCisgICAgcmV0dXJuIFByb3RvY29sOjpDU1M6OkNTU1N0eWxlOjpjcmVhdGUo
KQogICAgICAgICAuc2V0Q3NzUHJvcGVydGllcyhXVEZNb3ZlKHByb3BlcnRpZXNPYmplY3QpKQog
ICAgICAgICAuc2V0U2hvcnRoYW5kRW50cmllcyhXVEZNb3ZlKHNob3J0aGFuZEVudHJpZXMpKQog
ICAgICAgICAucmVsZWFzZSgpOwpAQCAtODA1LDcgKzgxMyw3IEBAIFZlY3RvcjxTdHJpbmc+IElu
c3BlY3RvclN0eWxlOjpsb25naGFuZFByb3BlcnRpZXMoY29uc3QgU3RyaW5nJiBzaG9ydGhhbmRQ
cm9wZXJ0CiAgICAgcmV0dXJuIHByb3BlcnRpZXM7CiB9CiAKLVJlZjxJbnNwZWN0b3JTdHlsZVNo
ZWV0PiBJbnNwZWN0b3JTdHlsZVNoZWV0OjpjcmVhdGUoSW5zcGVjdG9yUGFnZUFnZW50KiBwYWdl
QWdlbnQsIGNvbnN0IFN0cmluZyYgaWQsIFJlZlB0cjxDU1NTdHlsZVNoZWV0PiYmIHBhZ2VTdHls
ZVNoZWV0LCBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW4gb3JpZ2lu
LCBjb25zdCBTdHJpbmcmIGRvY3VtZW50VVJMLCBMaXN0ZW5lciogbGlzdGVuZXIpCitSZWY8SW5z
cGVjdG9yU3R5bGVTaGVldD4gSW5zcGVjdG9yU3R5bGVTaGVldDo6Y3JlYXRlKEluc3BlY3RvclBh
Z2VBZ2VudCogcGFnZUFnZW50LCBjb25zdCBTdHJpbmcmIGlkLCBSZWZQdHI8Q1NTU3R5bGVTaGVl
dD4mJiBwYWdlU3R5bGVTaGVldCwgUHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbiBvcmln
aW4sIGNvbnN0IFN0cmluZyYgZG9jdW1lbnRVUkwsIExpc3RlbmVyKiBsaXN0ZW5lcikKIHsKICAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJbnNwZWN0b3JTdHlsZVNoZWV0KHBhZ2VBZ2VudCwgaWQs
IFdURk1vdmUocGFnZVN0eWxlU2hlZXQpLCBvcmlnaW4sIGRvY3VtZW50VVJMLCBsaXN0ZW5lcikp
OwogfQpAQCAtODE3LDcgKzgyNSw3IEBAIFN0cmluZyBJbnNwZWN0b3JTdHlsZVNoZWV0OjpzdHls
ZVNoZWV0VVJMKENTU1N0eWxlU2hlZXQqIHBhZ2VTdHlsZVNoZWV0KQogICAgIHJldHVybiBlbXB0
eVN0cmluZygpOwogfQogCi1JbnNwZWN0b3JTdHlsZVNoZWV0OjpJbnNwZWN0b3JTdHlsZVNoZWV0
KEluc3BlY3RvclBhZ2VBZ2VudCogcGFnZUFnZW50LCBjb25zdCBTdHJpbmcmIGlkLCBSZWZQdHI8
Q1NTU3R5bGVTaGVldD4mJiBwYWdlU3R5bGVTaGVldCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NT
OjpTdHlsZVNoZWV0T3JpZ2luIG9yaWdpbiwgY29uc3QgU3RyaW5nJiBkb2N1bWVudFVSTCwgTGlz
dGVuZXIqIGxpc3RlbmVyKQorSW5zcGVjdG9yU3R5bGVTaGVldDo6SW5zcGVjdG9yU3R5bGVTaGVl
dChJbnNwZWN0b3JQYWdlQWdlbnQqIHBhZ2VBZ2VudCwgY29uc3QgU3RyaW5nJiBpZCwgUmVmUHRy
PENTU1N0eWxlU2hlZXQ+JiYgcGFnZVN0eWxlU2hlZXQsIFByb3RvY29sOjpDU1M6OlN0eWxlU2hl
ZXRPcmlnaW4gb3JpZ2luLCBjb25zdCBTdHJpbmcmIGRvY3VtZW50VVJMLCBMaXN0ZW5lciogbGlz
dGVuZXIpCiAgICAgOiBtX3BhZ2VBZ2VudChwYWdlQWdlbnQpCiAgICAgLCBtX2lkKGlkKQogICAg
ICwgbV9wYWdlU3R5bGVTaGVldChXVEZNb3ZlKHBhZ2VTdHlsZVNoZWV0KSkKQEAgLTk0Nyw3ICs5
NTUsNyBAQCBFeGNlcHRpb25PcjxDU1NTdHlsZVJ1bGUqPiBJbnNwZWN0b3JTdHlsZVNoZWV0Ojph
ZGRSdWxlKGNvbnN0IFN0cmluZyYgc2VsZWN0b3IpCiAgICAgc2V0VGV4dChzdHlsZVNoZWV0VGV4
dC50b1N0cmluZygpKTsKIAogICAgIC8vIEluc3BlY3RvciBTdHlsZSBTaGVldHMgYXJlIGFsd2F5
cyB0cmVhdGVkIGFzIHRob3VnaCB0aGVpciBwYXJzZWQgZGF0YSBpcyByZWFkeS4KLSAgICBpZiAo
bV9vcmlnaW4gPT0gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luOjpJ
bnNwZWN0b3IpCisgICAgaWYgKG1fb3JpZ2luID09IFByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRP
cmlnaW46Okluc3BlY3RvcikKICAgICAgICAgZmlyZVN0eWxlU2hlZXRDaGFuZ2VkKCk7CiAgICAg
ZWxzZQogICAgICAgICByZXBhcnNlU3R5bGVTaGVldChzdHlsZVNoZWV0VGV4dC50b1N0cmluZygp
KTsKQEAgLTEwMDcsNyArMTAxNSw3IEBAIENTU1N0eWxlUnVsZSogSW5zcGVjdG9yU3R5bGVTaGVl
dDo6cnVsZUZvcklkKGNvbnN0IEluc3BlY3RvckNTU0lkJiBpZCkgY29uc3QKICAgICByZXR1cm4g
aWQub3JkaW5hbCgpID49IG1fZmxhdFJ1bGVzLnNpemUoKSA/IG51bGxwdHIgOiBtX2ZsYXRSdWxl
cy5hdChpZC5vcmRpbmFsKCkpLmdldCgpOwogfQogCi1SZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6Q1NTOjpDU1NTdHlsZVNoZWV0Qm9keT4gSW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGRPYmpl
Y3RGb3JTdHlsZVNoZWV0KCkKK1JlZlB0cjxQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZVNoZWV0Qm9k
eT4gSW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGRPYmplY3RGb3JTdHlsZVNoZWV0KCkKIHsKICAg
ICBDU1NTdHlsZVNoZWV0KiBzdHlsZVNoZWV0ID0gcGFnZVN0eWxlU2hlZXQoKTsKICAgICBpZiAo
IXN0eWxlU2hlZXQpCkBAIC0xMDE1LDcgKzEwMjMsNyBAQCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6Q1NTOjpDU1NTdHlsZVNoZWV0Qm9keT4gSW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGRP
YgogCiAgICAgUmVmUHRyPENTU1J1bGVMaXN0PiBjc3NSdWxlTGlzdCA9IGFzQ1NTUnVsZUxpc3Qo
c3R5bGVTaGVldCk7CiAKLSAgICBhdXRvIHJlc3VsdCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNT
Uzo6Q1NTU3R5bGVTaGVldEJvZHk6OmNyZWF0ZSgpCisgICAgYXV0byByZXN1bHQgPSBQcm90b2Nv
bDo6Q1NTOjpDU1NTdHlsZVNoZWV0Qm9keTo6Y3JlYXRlKCkKICAgICAgICAgLnNldFN0eWxlU2hl
ZXRJZChpZCgpKQogICAgICAgICAuc2V0UnVsZXMoYnVpbGRBcnJheUZvclJ1bGVMaXN0KGNzc1J1
bGVMaXN0LmdldCgpKSkKICAgICAgICAgLnJlbGVhc2UoKTsKQEAgLTEwMjcsNyArMTAzNSw3IEBA
IFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlU2hlZXRCb2R5PiBJbnNw
ZWN0b3JTdHlsZVNoZWV0OjpidWlsZE9iCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGVTaGVldEhlYWRlcj4gSW5zcGVjdG9y
U3R5bGVTaGVldDo6YnVpbGRPYmplY3RGb3JTdHlsZVNoZWV0SW5mbygpCitSZWZQdHI8UHJvdG9j
b2w6OkNTUzo6Q1NTU3R5bGVTaGVldEhlYWRlcj4gSW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGRP
YmplY3RGb3JTdHlsZVNoZWV0SW5mbygpCiB7CiAgICAgQ1NTU3R5bGVTaGVldCogc3R5bGVTaGVl
dCA9IHBhZ2VTdHlsZVNoZWV0KCk7CiAgICAgaWYgKCFzdHlsZVNoZWV0KQpAQCAtMTAzNSw3ICsx
MDQzLDcgQEAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGVTaGVldEhl
YWRlcj4gSW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGQKIAogICAgIERvY3VtZW50KiBkb2N1bWVu
dCA9IHN0eWxlU2hlZXQtPm93bmVyRG9jdW1lbnQoKTsKICAgICBGcmFtZSogZnJhbWUgPSBkb2N1
bWVudCA/IGRvY3VtZW50LT5mcmFtZSgpIDogbnVsbHB0cjsKLSAgICByZXR1cm4gSW5zcGVjdG9y
OjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZVNoZWV0SGVhZGVyOjpjcmVhdGUoKQorICAgIHJldHVy
biBQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZVNoZWV0SGVhZGVyOjpjcmVhdGUoKQogICAgICAgICAu
c2V0U3R5bGVTaGVldElkKGlkKCkpCiAgICAgICAgIC5zZXRPcmlnaW4obV9vcmlnaW4pCiAgICAg
ICAgIC5zZXREaXNhYmxlZChzdHlsZVNoZWV0LT5kaXNhYmxlZCgpKQpAQCAtMTA0OCw5ICsxMDU2
LDkgQEAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGVTaGVldEhlYWRl
cj4gSW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGQKICAgICAgICAgLnJlbGVhc2UoKTsKIH0KIAot
c3RhdGljIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1NlbGVjdG9yPiBidWlsZE9i
amVjdEZvclNlbGVjdG9ySGVscGVyKGNvbnN0IFN0cmluZyYgc2VsZWN0b3JUZXh0LCBjb25zdCBD
U1NTZWxlY3RvciYgc2VsZWN0b3IpCitzdGF0aWMgUmVmPFByb3RvY29sOjpDU1M6OkNTU1NlbGVj
dG9yPiBidWlsZE9iamVjdEZvclNlbGVjdG9ySGVscGVyKGNvbnN0IFN0cmluZyYgc2VsZWN0b3JU
ZXh0LCBjb25zdCBDU1NTZWxlY3RvciYgc2VsZWN0b3IpCiB7Ci0gICAgYXV0byBpbnNwZWN0b3JT
ZWxlY3RvciA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU2VsZWN0b3I6OmNyZWF0ZSgp
CisgICAgYXV0byBpbnNwZWN0b3JTZWxlY3RvciA9IFByb3RvY29sOjpDU1M6OkNTU1NlbGVjdG9y
OjpjcmVhdGUoKQogICAgICAgICAuc2V0VGV4dChzZWxlY3RvclRleHQpCiAgICAgICAgIC5yZWxl
YXNlKCk7CiAKQEAgLTEwNjUsMTEgKzEwNzMsMTEgQEAgc3RhdGljIFJlZjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpDU1M6OkNTU1NlbGVjdG9yPiBidWlsZE9iamVjdEZvclNlbGVjdG9ySGVscGVyKGMK
ICAgICByZXR1cm4gaW5zcGVjdG9yU2VsZWN0b3I7CiB9CiAKLXN0YXRpYyBSZWY8SlNPTjo6QXJy
YXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1NlbGVjdG9yPj4gc2VsZWN0b3JzRnJv
bVNvdXJjZShjb25zdCBDU1NSdWxlU291cmNlRGF0YSogc291cmNlRGF0YSwgY29uc3QgU3RyaW5n
JiBzaGVldFRleHQsIGNvbnN0IENTU1NlbGVjdG9yTGlzdCYgc2VsZWN0b3JMaXN0KQorc3RhdGlj
IFJlZjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpDU1M6OkNTU1NlbGVjdG9yPj4gc2VsZWN0b3Jz
RnJvbVNvdXJjZShjb25zdCBDU1NSdWxlU291cmNlRGF0YSogc291cmNlRGF0YSwgY29uc3QgU3Ry
aW5nJiBzaGVldFRleHQsIGNvbnN0IENTU1NlbGVjdG9yTGlzdCYgc2VsZWN0b3JMaXN0KQogewog
ICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxKU0M6OllhcnI6OlJlZ3VsYXJFeHByZXNzaW9uPiBj
b21tZW50KCIvXFwqW15dKj9cXCovIiwgSlNDOjpZYXJyOjpUZXh0Q2FzZVNlbnNpdGl2ZSwgSlND
OjpZYXJyOjpNdWx0aWxpbmVFbmFibGVkKTsKIAotICAgIGF1dG8gcmVzdWx0ID0gSlNPTjo6QXJy
YXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1NlbGVjdG9yPjo6Y3JlYXRlKCk7Cisg
ICAgYXV0byByZXN1bHQgPSBKU09OOjpBcnJheU9mPFByb3RvY29sOjpDU1M6OkNTU1NlbGVjdG9y
Pjo6Y3JlYXRlKCk7CiAgICAgY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yID0gc2VsZWN0b3JM
aXN0LmZpcnN0KCk7CiAgICAgZm9yIChhdXRvJiByYW5nZSA6IHNvdXJjZURhdGEtPnNlbGVjdG9y
UmFuZ2VzKSB7CiAgICAgICAgIC8vIElmIHdlIGRvbid0IGhhdmUgYSBzZWxlY3RvciwgdGhhdCBt
ZWFucyB0aGUgU291cmNlRGF0YSBmb3IgdGhpcyBDU1NTdHlsZVNoZWV0CkBAIC0xMDg5LDE3ICsx
MDk3LDE3IEBAIHN0YXRpYyBSZWY8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpD
U1M6OkNTU1NlbGVjdG9yPj4gc2VsZWN0b3JzRnJvbVNvCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAotUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU2VsZWN0b3I+IEluc3BlY3RvclN0
eWxlU2hlZXQ6OmJ1aWxkT2JqZWN0Rm9yU2VsZWN0b3IoY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVj
dG9yKQorUmVmPFByb3RvY29sOjpDU1M6OkNTU1NlbGVjdG9yPiBJbnNwZWN0b3JTdHlsZVNoZWV0
OjpidWlsZE9iamVjdEZvclNlbGVjdG9yKGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvcikKIHsK
ICAgICByZXR1cm4gYnVpbGRPYmplY3RGb3JTZWxlY3RvckhlbHBlcihzZWxlY3Rvci0+c2VsZWN0
b3JUZXh0KCksICpzZWxlY3Rvcik7CiB9CiAKLVJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6
OlNlbGVjdG9yTGlzdD4gSW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGRPYmplY3RGb3JTZWxlY3Rv
ckxpc3QoQ1NTU3R5bGVSdWxlKiBydWxlLCBpbnQmIGVuZGluZ0xpbmUpCitSZWY8UHJvdG9jb2w6
OkNTUzo6U2VsZWN0b3JMaXN0PiBJbnNwZWN0b3JTdHlsZVNoZWV0OjpidWlsZE9iamVjdEZvclNl
bGVjdG9yTGlzdChDU1NTdHlsZVJ1bGUqIHJ1bGUsIGludCYgZW5kaW5nTGluZSkKIHsKICAgICBS
ZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+IHNvdXJjZURhdGE7CiAgICAgaWYgKGVuc3VyZVBhcnNl
ZERhdGFSZWFkeSgpKQogICAgICAgICBzb3VyY2VEYXRhID0gcnVsZVNvdXJjZURhdGFGb3IoJnJ1
bGUtPnN0eWxlKCkpOwotICAgIFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkNTUzo6Q1NTU2VsZWN0b3I+PiBzZWxlY3RvcnM7CisgICAgUmVmUHRyPEpTT046OkFycmF5
T2Y8UHJvdG9jb2w6OkNTUzo6Q1NTU2VsZWN0b3I+PiBzZWxlY3RvcnM7CiAKICAgICAvLyBUaGlz
IGludGVudGlvbmFsbHkgZG9lcyBub3QgcmVseSBvbiB0aGUgc291cmNlIGRhdGEgdG8gYXZvaWQg
Y2F0Y2hpbmcgdGhlIHRyYWlsaW5nIGNvbW1lbnRzIChiZWZvcmUgdGhlIGRlY2xhcmF0aW9uIHN0
YXJ0aW5nICd7JykuCiAgICAgU3RyaW5nIHNlbGVjdG9yVGV4dCA9IHJ1bGUtPnNlbGVjdG9yVGV4
dCgpOwpAQCAtMTEwNyw0MSArMTExNSw0MiBAQCBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NT
OjpTZWxlY3Rvckxpc3Q+IEluc3BlY3RvclN0eWxlU2hlZXQ6OmJ1aWxkT2JqZWN0Rm9yUwogICAg
IGlmIChzb3VyY2VEYXRhKQogICAgICAgICBzZWxlY3RvcnMgPSBzZWxlY3RvcnNGcm9tU291cmNl
KHNvdXJjZURhdGEuZ2V0KCksIG1fcGFyc2VkU3R5bGVTaGVldC0+dGV4dCgpLCBydWxlLT5zdHls
ZVJ1bGUoKS5zZWxlY3Rvckxpc3QoKSk7CiAgICAgZWxzZSB7Ci0gICAgICAgIHNlbGVjdG9ycyA9
IEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTZWxlY3Rvcj46OmNy
ZWF0ZSgpOworICAgICAgICBzZWxlY3RvcnMgPSBKU09OOjpBcnJheU9mPFByb3RvY29sOjpDU1M6
OkNTU1NlbGVjdG9yPjo6Y3JlYXRlKCk7CiAgICAgICAgIGNvbnN0IENTU1NlbGVjdG9yTGlzdCYg
c2VsZWN0b3JMaXN0ID0gcnVsZS0+c3R5bGVSdWxlKCkuc2VsZWN0b3JMaXN0KCk7CiAgICAgICAg
IGZvciAoY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yID0gc2VsZWN0b3JMaXN0LmZpcnN0KCk7
IHNlbGVjdG9yOyBzZWxlY3RvciA9IENTU1NlbGVjdG9yTGlzdDo6bmV4dChzZWxlY3RvcikpCiAg
ICAgICAgICAgICBzZWxlY3RvcnMtPmFkZEl0ZW0oYnVpbGRPYmplY3RGb3JTZWxlY3RvcihzZWxl
Y3RvcikpOwogICAgIH0KLSAgICBhdXRvIHJlc3VsdCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNT
Uzo6U2VsZWN0b3JMaXN0OjpjcmVhdGUoKQotICAgICAgICAuc2V0U2VsZWN0b3JzKFdURk1vdmUo
c2VsZWN0b3JzKSkKKyAgICBhdXRvIHJlc3VsdCA9IFByb3RvY29sOjpDU1M6OlNlbGVjdG9yTGlz
dDo6Y3JlYXRlKCkKKyAgICAgICAgLnNldFNlbGVjdG9ycyhzZWxlY3RvcnMucmVsZWFzZU5vbk51
bGwoKSkKICAgICAgICAgLnNldFRleHQoc2VsZWN0b3JUZXh0KQogICAgICAgICAucmVsZWFzZSgp
OwotICAgIGlmIChzb3VyY2VEYXRhKQotICAgICAgICByZXN1bHQtPnNldFJhbmdlKGJ1aWxkU291
cmNlUmFuZ2VPYmplY3Qoc291cmNlRGF0YS0+cnVsZUhlYWRlclJhbmdlLCBsaW5lRW5kaW5ncygp
LCAmZW5kaW5nTGluZSkpOworICAgIGlmIChzb3VyY2VEYXRhKSB7CisgICAgICAgIGlmIChhdXRv
IHJhbmdlID0gYnVpbGRTb3VyY2VSYW5nZU9iamVjdChzb3VyY2VEYXRhLT5ydWxlSGVhZGVyUmFu
Z2UsIGxpbmVFbmRpbmdzKCksICZlbmRpbmdMaW5lKSkKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0
UmFuZ2UocmFuZ2UucmVsZWFzZU5vbk51bGwoKSk7CisgICAgfQogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKLVJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1J1bGU+IEluc3BlY3Rv
clN0eWxlU2hlZXQ6OmJ1aWxkT2JqZWN0Rm9yUnVsZShDU1NTdHlsZVJ1bGUqIHJ1bGUpCitSZWZQ
dHI8UHJvdG9jb2w6OkNTUzo6Q1NTUnVsZT4gSW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGRPYmpl
Y3RGb3JSdWxlKENTU1N0eWxlUnVsZSogcnVsZSkKIHsKICAgICBDU1NTdHlsZVNoZWV0KiBzdHls
ZVNoZWV0ID0gcGFnZVN0eWxlU2hlZXQoKTsKICAgICBpZiAoIXN0eWxlU2hlZXQpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwogCiAgICAgaW50IGVuZGluZ0xpbmUgPSAwOwotICAgIGF1dG8gcmVz
dWx0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NSdWxlOjpjcmVhdGUoKQorICAgIGF1
dG8gcmVzdWx0ID0gUHJvdG9jb2w6OkNTUzo6Q1NTUnVsZTo6Y3JlYXRlKCkKICAgICAgICAgLnNl
dFNlbGVjdG9yTGlzdChidWlsZE9iamVjdEZvclNlbGVjdG9yTGlzdChydWxlLCBlbmRpbmdMaW5l
KSkKICAgICAgICAgLnNldFNvdXJjZUxpbmUoZW5kaW5nTGluZSkKICAgICAgICAgLnNldE9yaWdp
bihtX29yaWdpbikKICAgICAgICAgLnNldFN0eWxlKGJ1aWxkT2JqZWN0Rm9yU3R5bGUoJnJ1bGUt
PnN0eWxlKCkpKQogICAgICAgICAucmVsZWFzZSgpOwogCi0gICAgaWYgKG1fb3JpZ2luID09IElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6QXV0aG9yIHx8IG1fb3Jp
Z2luID09IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6VXNlcikK
KyAgICBpZiAobV9vcmlnaW4gPT0gUHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6QXV0
aG9yIHx8IG1fb3JpZ2luID09IFByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW46OlVzZXIp
CiAgICAgICAgIHJlc3VsdC0+c2V0U291cmNlVVJMKGZpbmFsVVJMKCkpOwogCiAgICAgaWYgKGNh
bkJpbmQoKSkgewotICAgICAgICBJbnNwZWN0b3JDU1NJZCBpZChydWxlSWQocnVsZSkpOwotICAg
ICAgICBpZiAoIWlkLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0UnVsZUlkKGlk
LmFzUHJvdG9jb2xWYWx1ZTxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1J1bGVJZD4oKSk7
CisgICAgICAgIGlmIChhdXRvIHJ1bGVJZCA9IHRoaXMtPnJ1bGVJZChydWxlKS5hc1Byb3RvY29s
VmFsdWU8UHJvdG9jb2w6OkNTUzo6Q1NTUnVsZUlkPigpKQorICAgICAgICAgICAgcmVzdWx0LT5z
ZXRSdWxlSWQocnVsZUlkLnJlbGVhc2VOb25OdWxsKCkpOwogICAgIH0KIAogICAgIGF1dG8gZ3Jv
dXBpbmdzUGF5bG9hZCA9IGJ1aWxkQXJyYXlGb3JHcm91cGluZ3MoKnJ1bGUpOwpAQCAtMTE1MSw3
ICsxMTYwLDcgQEAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUnVsZT4gSW5z
cGVjdG9yU3R5bGVTaGVldDo6YnVpbGRPYmplY3RGb3JSdWwKICAgICByZXR1cm4gcmVzdWx0Owog
fQogCi1SZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4gSW5zcGVjdG9y
U3R5bGVTaGVldDo6YnVpbGRPYmplY3RGb3JTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHls
ZSkKK1JlZjxQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4gSW5zcGVjdG9yU3R5bGVTaGVldDo6YnVp
bGRPYmplY3RGb3JTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSkKIHsKICAgICBSZWZQ
dHI8Q1NTUnVsZVNvdXJjZURhdGE+IHNvdXJjZURhdGE7CiAgICAgaWYgKGVuc3VyZVBhcnNlZERh
dGFSZWFkeSgpKQpAQCAtMTE1OSwxMyArMTE2OCwxNSBAQCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6Q1NTOjpDU1NTdHlsZT4gSW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGRPYmplY3RGb3JT
dAogCiAgICAgSW5zcGVjdG9yQ1NTSWQgaWQgPSBydWxlT3JTdHlsZUlkKHN0eWxlKTsKICAgICBp
ZiAoaWQuaXNFbXB0eSgpKSB7Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpD
U1M6OkNTU1N0eWxlOjpjcmVhdGUoKQotICAgICAgICAgICAgLnNldENzc1Byb3BlcnRpZXMoQXJy
YXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1Byb3BlcnR5Pjo6Y3JlYXRlKCkpCi0g
ICAgICAgICAgICAuc2V0U2hvcnRoYW5kRW50cmllcyhBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkNTUzo6U2hvcnRoYW5kRW50cnk+OjpjcmVhdGUoKSkKKyAgICAgICAgcmV0dXJuIFByb3Rv
Y29sOjpDU1M6OkNTU1N0eWxlOjpjcmVhdGUoKQorICAgICAgICAgICAgLnNldENzc1Byb3BlcnRp
ZXMoQXJyYXlPZjxQcm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0eT46OmNyZWF0ZSgpKQorICAgICAg
ICAgICAgLnNldFNob3J0aGFuZEVudHJpZXMoQXJyYXlPZjxQcm90b2NvbDo6Q1NTOjpTaG9ydGhh
bmRFbnRyeT46OmNyZWF0ZSgpKQogICAgICAgICAgICAgLnJlbGVhc2UoKTsKICAgICB9CisKICAg
ICBSZWZQdHI8SW5zcGVjdG9yU3R5bGU+IGluc3BlY3RvclN0eWxlID0gaW5zcGVjdG9yU3R5bGVG
b3JJZChpZCk7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+
IHJlc3VsdCA9IGluc3BlY3RvclN0eWxlLT5idWlsZE9iamVjdEZvclN0eWxlKCk7CisKKyAgICBh
dXRvIHJlc3VsdCA9IGluc3BlY3RvclN0eWxlLT5idWlsZE9iamVjdEZvclN0eWxlKCk7CiAKICAg
ICAvLyBTdHlsZSB0ZXh0IGNhbm5vdCBiZSByZXRyaWV2ZWQgd2l0aG91dCBzdHlsZXNoZWV0LCBz
byBzZXQgY3NzVGV4dCBoZXJlLgogICAgIGlmIChzb3VyY2VEYXRhKSB7CkBAIC0xMjc0LDcgKzEy
ODUsNyBAQCBib29sIEluc3BlY3RvclN0eWxlU2hlZXQ6OnN0eWxlU2hlZXRNdXRhdGVkKCkgY29u
c3QKIAogYm9vbCBJbnNwZWN0b3JTdHlsZVNoZWV0OjplbnN1cmVQYXJzZWREYXRhUmVhZHkoKQog
ewotICAgIGJvb2wgYWxsb3dQYXJzZWREYXRhID0gbV9vcmlnaW4gPT0gSW5zcGVjdG9yOjpQcm90
b2NvbDo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luOjpJbnNwZWN0b3IgfHwgIXN0eWxlU2hlZXRNdXRh
dGVkKCk7CisgICAgYm9vbCBhbGxvd1BhcnNlZERhdGEgPSBtX29yaWdpbiA9PSBQcm90b2NvbDo6
Q1NTOjpTdHlsZVNoZWV0T3JpZ2luOjpJbnNwZWN0b3IgfHwgIXN0eWxlU2hlZXRNdXRhdGVkKCk7
CiAgICAgcmV0dXJuIGFsbG93UGFyc2VkRGF0YSAmJiBlbnN1cmVUZXh0KCkgJiYgZW5zdXJlU291
cmNlRGF0YSgpOwogfQogCkBAIC0xMzcxLDcgKzEzODIsNyBAQCBJbnNwZWN0b3JDU1NJZCBJbnNw
ZWN0b3JTdHlsZVNoZWV0OjpydWxlSWQoQ1NTU3R5bGVSdWxlKiBydWxlKSBjb25zdAogCiBib29s
IEluc3BlY3RvclN0eWxlU2hlZXQ6Om9yaWdpbmFsU3R5bGVTaGVldFRleHQoU3RyaW5nKiByZXN1
bHQpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX3BhZ2VTdHlsZVNoZWV0IHx8IG1fb3JpZ2luID09IElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6VXNlckFnZW50KQorICAg
IGlmICghbV9wYWdlU3R5bGVTaGVldCB8fCBtX29yaWdpbiA9PSBQcm90b2NvbDo6Q1NTOjpTdHls
ZVNoZWV0T3JpZ2luOjpVc2VyQWdlbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1
cm4gaW5saW5lU3R5bGVTaGVldFRleHQocmVzdWx0KSB8fCByZXNvdXJjZVN0eWxlU2hlZXRUZXh0
KHJlc3VsdCkgfHwgZXh0ZW5zaW9uU3R5bGVTaGVldFRleHQocmVzdWx0KTsKIH0KQEAgLTE0MTQs
OSArMTQyNSw5IEBAIGJvb2wgSW5zcGVjdG9yU3R5bGVTaGVldDo6ZXh0ZW5zaW9uU3R5bGVTaGVl
dFRleHQoU3RyaW5nKiByZXN1bHQpIGNvbnN0CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLVJlZjxK
U09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUnVsZT4+IEluc3BlY3Rv
clN0eWxlU2hlZXQ6OmJ1aWxkQXJyYXlGb3JSdWxlTGlzdChDU1NSdWxlTGlzdCogcnVsZUxpc3Qp
CitSZWY8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6Q1NTOjpDU1NSdWxlPj4gSW5zcGVjdG9yU3R5
bGVTaGVldDo6YnVpbGRBcnJheUZvclJ1bGVMaXN0KENTU1J1bGVMaXN0KiBydWxlTGlzdCkKIHsK
LSAgICBhdXRvIHJlc3VsdCA9IEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NT
OjpDU1NSdWxlPjo6Y3JlYXRlKCk7CisgICAgYXV0byByZXN1bHQgPSBKU09OOjpBcnJheU9mPFBy
b3RvY29sOjpDU1M6OkNTU1J1bGU+OjpjcmVhdGUoKTsKICAgICBpZiAoIXJ1bGVMaXN0KQogICAg
ICAgICByZXR1cm4gcmVzdWx0OwogCkBAIC0xNDI0LDggKzE0MzUsMTAgQEAgUmVmPEpTT046OkFy
cmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NSdWxlPj4gSW5zcGVjdG9yU3R5bGVT
aGVldDo6YnVpbGQKICAgICBDU1NTdHlsZVJ1bGVWZWN0b3IgcnVsZXM7CiAgICAgY29sbGVjdEZs
YXRSdWxlcyhXVEZNb3ZlKHJlZlJ1bGVMaXN0KSwgJnJ1bGVzKTsKIAotICAgIGZvciAoYXV0byYg
cnVsZSA6IHJ1bGVzKQotICAgICAgICByZXN1bHQtPmFkZEl0ZW0oYnVpbGRPYmplY3RGb3JSdWxl
KHJ1bGUuZ2V0KCkpKTsKKyAgICBmb3IgKGF1dG8mIHJ1bGUgOiBydWxlcykgeworICAgICAgICBp
ZiAoYXV0byBydWxlT2JqZWN0ID0gYnVpbGRPYmplY3RGb3JSdWxlKHJ1bGUuZ2V0KCkpKQorICAg
ICAgICAgICAgcmVzdWx0LT5hZGRJdGVtKHJ1bGVPYmplY3QucmVsZWFzZU5vbk51bGwoKSk7Cisg
ICAgfQogCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTE0NDgsMTIgKzE0NjEsMTIgQEAgdm9p
ZCBJbnNwZWN0b3JTdHlsZVNoZWV0Ojpjb2xsZWN0RmxhdFJ1bGVzKFJlZlB0cjxDU1NSdWxlTGlz
dD4mJiBydWxlTGlzdCwgQ1NTU3QKICAgICB9CiB9CiAKLVJlZjxJbnNwZWN0b3JTdHlsZVNoZWV0
Rm9ySW5saW5lU3R5bGU+IEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZTo6Y3JlYXRl
KEluc3BlY3RvclBhZ2VBZ2VudCogcGFnZUFnZW50LCBjb25zdCBTdHJpbmcmIGlkLCBSZWY8U3R5
bGVkRWxlbWVudD4mJiBlbGVtZW50LCBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlN0eWxlU2hl
ZXRPcmlnaW4gb3JpZ2luLCBMaXN0ZW5lciogbGlzdGVuZXIpCitSZWY8SW5zcGVjdG9yU3R5bGVT
aGVldEZvcklubGluZVN0eWxlPiBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU6OmNy
ZWF0ZShJbnNwZWN0b3JQYWdlQWdlbnQqIHBhZ2VBZ2VudCwgY29uc3QgU3RyaW5nJiBpZCwgUmVm
PFN0eWxlZEVsZW1lbnQ+JiYgZWxlbWVudCwgUHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdp
biBvcmlnaW4sIExpc3RlbmVyKiBsaXN0ZW5lcikKIHsKICAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGUocGFnZUFnZW50LCBpZCwgV1RGTW92
ZShlbGVtZW50KSwgb3JpZ2luLCBsaXN0ZW5lcikpOwogfQogCi1JbnNwZWN0b3JTdHlsZVNoZWV0
Rm9ySW5saW5lU3R5bGU6Okluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZShJbnNwZWN0
b3JQYWdlQWdlbnQqIHBhZ2VBZ2VudCwgY29uc3QgU3RyaW5nJiBpZCwgUmVmPFN0eWxlZEVsZW1l
bnQ+JiYgZWxlbWVudCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2lu
IG9yaWdpbiwgTGlzdGVuZXIqIGxpc3RlbmVyKQorSW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGlu
ZVN0eWxlOjpJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGUoSW5zcGVjdG9yUGFnZUFn
ZW50KiBwYWdlQWdlbnQsIGNvbnN0IFN0cmluZyYgaWQsIFJlZjxTdHlsZWRFbGVtZW50PiYmIGVs
ZW1lbnQsIFByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW4gb3JpZ2luLCBMaXN0ZW5lciog
bGlzdGVuZXIpCiAgICAgOiBJbnNwZWN0b3JTdHlsZVNoZWV0KHBhZ2VBZ2VudCwgaWQsIG51bGxw
dHIsIG9yaWdpbiwgU3RyaW5nKCksIGxpc3RlbmVyKQogICAgICwgbV9lbGVtZW50KFdURk1vdmUo
ZWxlbWVudCkpCiAgICAgLCBtX3J1bGVTb3VyY2VEYXRhKG51bGxwdHIpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5oIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuaAppbmRleCA3M2QzNjE4ZTVhNDhh
Mzc0NTc2MjZkZDU0OGRjZTdlMzZiMWRlMTM1Li43OGYxNGQyOTE2YmFhNWMzN2UwMTA5MzkyZjIx
ZWY2NmE2NTVmNzZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yU3R5bGVTaGVldC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JT
dHlsZVNoZWV0LmgKQEAgLTQ1LDE4ICs0NSwxOSBAQCBjbGFzcyBFbGVtZW50OwogY2xhc3MgSW5z
cGVjdG9yUGFnZUFnZW50OwogY2xhc3MgSW5zcGVjdG9yU3R5bGVTaGVldDsKIAotdHlwZWRlZiBT
dHJpbmcgRXJyb3JTdHJpbmc7Ci0KIGNsYXNzIEluc3BlY3RvckNTU0lkIHsKIHB1YmxpYzoKICAg
ICBJbnNwZWN0b3JDU1NJZCgpID0gZGVmYXVsdDsKIAogICAgIGV4cGxpY2l0IEluc3BlY3RvckNT
U0lkKGNvbnN0IEpTT046Ok9iamVjdCYgdmFsdWUpCiAgICAgewotICAgICAgICBpZiAoIXZhbHVl
LmdldFN0cmluZygic3R5bGVTaGVldElkIl9zLCBtX3N0eWxlU2hlZXRJZCkpCisgICAgICAgIG1f
c3R5bGVTaGVldElkID0gdmFsdWUuZ2V0U3RyaW5nKCJzdHlsZVNoZWV0SWQiX3MpOworICAgICAg
ICBpZiAoIW1fc3R5bGVTaGVldElkKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIGlm
ICghdmFsdWUuZ2V0SW50ZWdlcigib3JkaW5hbCJfcywgbV9vcmRpbmFsKSkKKyAgICAgICAgaWYg
KGF1dG8gb3JkaW5hbCA9IHZhbHVlLmdldEludGVnZXIoIm9yZGluYWwiX3MpKQorICAgICAgICAg
ICAgbV9vcmRpbmFsID0gKm9yZGluYWw7CisgICAgICAgIGVsc2UKICAgICAgICAgICAgIG1fc3R5
bGVTaGVldElkID0gU3RyaW5nKCk7CiAgICAgfQogCkBAIC0xMjYsNyArMTI3LDcgQEAgcHVibGlj
OgogICAgIH5JbnNwZWN0b3JTdHlsZSgpOwogCiAgICAgQ1NTU3R5bGVEZWNsYXJhdGlvbiYgY3Nz
U3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0eWxlLmdldCgpOyB9Ci0gICAgUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+IGJ1aWxkT2JqZWN0Rm9yU3R5bGUoKSBjb25z
dDsKKyAgICBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4gYnVpbGRPYmpl
Y3RGb3JTdHlsZSgpIGNvbnN0OwogICAgIFJlZjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkNTUzo6Q1NTQ29tcHV0ZWRTdHlsZVByb3BlcnR5Pj4gYnVpbGRBcnJheUZvckNvbXB1
dGVkU3R5bGUoKSBjb25zdDsKIAogICAgIEV4Y2VwdGlvbk9yPFN0cmluZz4gdGV4dCgpIGNvbnN0
OwpAQCAtMTc1LDcgKzE3Niw3IEBAIHB1YmxpYzoKICAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6Q1NTOjpDU1NTdHlsZVNoZWV0Qm9keT4gYnVpbGRPYmplY3RGb3JTdHlsZVNoZWV0KCk7
CiAgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGVTaGVldEhlYWRl
cj4gYnVpbGRPYmplY3RGb3JTdHlsZVNoZWV0SW5mbygpOwogICAgIFJlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpDU1M6OkNTU1J1bGU+IGJ1aWxkT2JqZWN0Rm9yUnVsZShDU1NTdHlsZVJ1bGUq
KTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4gYnVpbGRP
YmplY3RGb3JTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKik7CisgICAgUmVmPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+IGJ1aWxkT2JqZWN0Rm9yU3R5bGUoQ1NTU3R5bGVEZWNs
YXJhdGlvbiopOwogICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IHNldFN0eWxlVGV4dChjb25zdCBJbnNw
ZWN0b3JDU1NJZCYsIGNvbnN0IFN0cmluZyYgdGV4dCwgU3RyaW5nKiBvbGRUZXh0KTsKIAogICAg
IHZpcnR1YWwgRXhjZXB0aW9uT3I8U3RyaW5nPiB0ZXh0KCkgY29uc3Q7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvVGltZWxpbmVSZWNvcmRGYWN0b3J5LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9UaW1lbGluZVJlY29yZEZhY3RvcnkuY3BwCmluZGV4IDM2M2Qx
NjhlODA1ZWEzZjg3ZDdiYzlkODI5ZDQ2ZGU2Y2JmNTJhYWUuLmEwNzAzMzZiNzU2MWRhODVlY2I1
ZmZmNGMxNGI2MWJmZjM5NjIxMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9UaW1lbGluZVJlY29yZEZhY3RvcnkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9UaW1lbGluZVJlY29yZEZhY3RvcnkuY3BwCkBAIC0xNjEsOSArMTYxLDkgQEAgUmVmPEpTT046
Ok9iamVjdD4gVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVQYWludERhdGEoY29uc3QgRmxv
YXRRdWFkJiBxdWFkKQogICAgIHJldHVybiBkYXRhOwogfQogCi12b2lkIFRpbWVsaW5lUmVjb3Jk
RmFjdG9yeTo6YXBwZW5kTGF5b3V0Um9vdChKU09OOjpPYmplY3QqIGRhdGEsIGNvbnN0IEZsb2F0
UXVhZCYgcXVhZCkKK3ZvaWQgVGltZWxpbmVSZWNvcmRGYWN0b3J5OjphcHBlbmRMYXlvdXRSb290
KEpTT046Ok9iamVjdCYgZGF0YSwgY29uc3QgRmxvYXRRdWFkJiBxdWFkKQogewotICAgIGRhdGEt
PnNldEFycmF5KCJyb290Il9zLCBjcmVhdGVRdWFkKHF1YWQpKTsKKyAgICBkYXRhLnNldEFycmF5
KCJyb290Il9zLCBjcmVhdGVRdWFkKHF1YWQpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1RpbWVsaW5lUmVjb3JkRmFj
dG9yeS5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1RpbWVsaW5lUmVjb3JkRmFjdG9yeS5o
CmluZGV4IDQ4ZjQzMGU5YmVkOTNkMWFmZDJiYTM2ZTU5NTdlN2VmMDYxOGIzYWEuLmNhNWRiNDEw
ODk4ZGI5M2NkMGEzNWMyNjI3OTA5YzFkNDllMWMyNjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9UaW1lbGluZVJlY29yZEZhY3RvcnkuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvVGltZWxpbmVSZWNvcmRGYWN0b3J5LmgKQEAgLTU5LDcgKzU5LDcgQEAgcHVi
bGljOgogICAgIHN0YXRpYyBSZWY8SlNPTjo6T2JqZWN0PiBjcmVhdGVPYnNlcnZlckNhbGxiYWNr
RGF0YShjb25zdCBTdHJpbmcmIGNhbGxiYWNrVHlwZSk7CiAgICAgc3RhdGljIFJlZjxKU09OOjpP
YmplY3Q+IGNyZWF0ZVBhaW50RGF0YShjb25zdCBGbG9hdFF1YWQmKTsKIAotICAgIHN0YXRpYyB2
b2lkIGFwcGVuZExheW91dFJvb3QoSlNPTjo6T2JqZWN0KiBkYXRhLCBjb25zdCBGbG9hdFF1YWQm
KTsKKyAgICBzdGF0aWMgdm9pZCBhcHBlbmRMYXlvdXRSb290KEpTT046Ok9iamVjdCYgZGF0YSwg
Y29uc3QgRmxvYXRRdWFkJik7CiAKIHByaXZhdGU6CiAgICAgVGltZWxpbmVSZWNvcmRGYWN0b3J5
KCkgeyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3Bl
Y3RvckFuaW1hdGlvbkFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9yQW5pbWF0aW9uQWdlbnQuY3BwCmluZGV4IDcxMzI1ZjUyMmQzYTEyM2E1MzRmYzdm
ZjNhNTg0YjU4YmM5NGY5MzYuLjAyNTcxMmIwOTQ2NGVjNmIxNTQ3ZWNmNzA2NmUyMGJkZmFiZjQx
Y2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9y
QW5pbWF0aW9uQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9yQW5pbWF0aW9uQWdlbnQuY3BwCkBAIC03Miw0NSArNzIsNDUgQEAgc3RhdGljIE9w
dGlvbmFsPGRvdWJsZT4gcHJvdG9jb2xWYWx1ZUZvclNlY29uZHMoY29uc3QgU2Vjb25kcyYgc2Vj
b25kcykKICAgICByZXR1cm4gc2Vjb25kcy5taWxsaXNlY29uZHMoKTsKIH0KIAotc3RhdGljIE9w
dGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFuaW1hdGlvbjo6UGxheWJhY2tEaXJlY3Rpb24+
IHByb3RvY29sVmFsdWVGb3JQbGF5YmFja0RpcmVjdGlvbihQbGF5YmFja0RpcmVjdGlvbiBwbGF5
YmFja0RpcmVjdGlvbikKK3N0YXRpYyBPcHRpb25hbDxQcm90b2NvbDo6QW5pbWF0aW9uOjpQbGF5
YmFja0RpcmVjdGlvbj4gcHJvdG9jb2xWYWx1ZUZvclBsYXliYWNrRGlyZWN0aW9uKFBsYXliYWNr
RGlyZWN0aW9uIHBsYXliYWNrRGlyZWN0aW9uKQogewogICAgIHN3aXRjaCAocGxheWJhY2tEaXJl
Y3Rpb24pIHsKICAgICBjYXNlIFBsYXliYWNrRGlyZWN0aW9uOjpOb3JtYWw6Ci0gICAgICAgIHJl
dHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpBbmltYXRpb246OlBsYXliYWNrRGlyZWN0aW9uOjpO
b3JtYWw7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6QW5pbWF0aW9uOjpQbGF5YmFja0RpcmVj
dGlvbjo6Tm9ybWFsOwogICAgIGNhc2UgUGxheWJhY2tEaXJlY3Rpb246OlJldmVyc2U6Ci0gICAg
ICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpBbmltYXRpb246OlBsYXliYWNrRGlyZWN0
aW9uOjpSZXZlcnNlOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OkFuaW1hdGlvbjo6UGxheWJh
Y2tEaXJlY3Rpb246OlJldmVyc2U7CiAgICAgY2FzZSBQbGF5YmFja0RpcmVjdGlvbjo6QWx0ZXJu
YXRlOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6QW5pbWF0aW9uOjpQbGF5
YmFja0RpcmVjdGlvbjo6QWx0ZXJuYXRlOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OkFuaW1h
dGlvbjo6UGxheWJhY2tEaXJlY3Rpb246OkFsdGVybmF0ZTsKICAgICBjYXNlIFBsYXliYWNrRGly
ZWN0aW9uOjpBbHRlcm5hdGVSZXZlcnNlOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90
b2NvbDo6QW5pbWF0aW9uOjpQbGF5YmFja0RpcmVjdGlvbjo6QWx0ZXJuYXRlUmV2ZXJzZTsKKyAg
ICAgICAgcmV0dXJuIFByb3RvY29sOjpBbmltYXRpb246OlBsYXliYWNrRGlyZWN0aW9uOjpBbHRl
cm5hdGVSZXZlcnNlOwogICAgIH0KIAogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CiB9CiAKLXN0YXRpYyBPcHRpb25hbDxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpBbmltYXRpb246OkZpbGxNb2RlPiBwcm90b2NvbFZhbHVlRm9yRmlsbE1vZGUoRmlsbE1v
ZGUgZmlsbE1vZGUpCitzdGF0aWMgT3B0aW9uYWw8UHJvdG9jb2w6OkFuaW1hdGlvbjo6RmlsbE1v
ZGU+IHByb3RvY29sVmFsdWVGb3JGaWxsTW9kZShGaWxsTW9kZSBmaWxsTW9kZSkKIHsKICAgICBz
d2l0Y2ggKGZpbGxNb2RlKSB7CiAgICAgY2FzZSBGaWxsTW9kZTo6Tm9uZToKLSAgICAgICAgcmV0
dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFuaW1hdGlvbjo6RmlsbE1vZGU6Ok5vbmU7CisgICAg
ICAgIHJldHVybiBQcm90b2NvbDo6QW5pbWF0aW9uOjpGaWxsTW9kZTo6Tm9uZTsKICAgICBjYXNl
IEZpbGxNb2RlOjpGb3J3YXJkczoKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkFuaW1hdGlvbjo6RmlsbE1vZGU6OkZvcndhcmRzOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6
OkFuaW1hdGlvbjo6RmlsbE1vZGU6OkZvcndhcmRzOwogICAgIGNhc2UgRmlsbE1vZGU6OkJhY2t3
YXJkczoKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFuaW1hdGlvbjo6Rmls
bE1vZGU6OkJhY2t3YXJkczsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpBbmltYXRpb246OkZp
bGxNb2RlOjpCYWNrd2FyZHM7CiAgICAgY2FzZSBGaWxsTW9kZTo6Qm90aDoKLSAgICAgICAgcmV0
dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFuaW1hdGlvbjo6RmlsbE1vZGU6OkJvdGg7CisgICAg
ICAgIHJldHVybiBQcm90b2NvbDo6QW5pbWF0aW9uOjpGaWxsTW9kZTo6Qm90aDsKICAgICBjYXNl
IEZpbGxNb2RlOjpBdXRvOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6QW5p
bWF0aW9uOjpGaWxsTW9kZTo6QXV0bzsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpBbmltYXRp
b246OkZpbGxNb2RlOjpBdXRvOwogICAgIH0KIAogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiB9CiAKLXN0YXRpYyBSZWY8SlNPTjo6QXJyYXlPZjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpBbmltYXRpb246OktleWZyYW1lPj4gYnVpbGRPYmplY3RGb3JL
ZXlmcmFtZXMoS2V5ZnJhbWVFZmZlY3QmIGtleWZyYW1lRWZmZWN0KQorc3RhdGljIFJlZjxKU09O
OjpBcnJheU9mPFByb3RvY29sOjpBbmltYXRpb246OktleWZyYW1lPj4gYnVpbGRPYmplY3RGb3JL
ZXlmcmFtZXMoS2V5ZnJhbWVFZmZlY3QmIGtleWZyYW1lRWZmZWN0KQogewotICAgIGF1dG8ga2V5
ZnJhbWVzUGF5bG9hZCA9IEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6QW5pbWF0
aW9uOjpLZXlmcmFtZT46OmNyZWF0ZSgpOworICAgIGF1dG8ga2V5ZnJhbWVzUGF5bG9hZCA9IEpT
T046OkFycmF5T2Y8UHJvdG9jb2w6OkFuaW1hdGlvbjo6S2V5ZnJhbWU+OjpjcmVhdGUoKTsKIAog
ICAgIGNvbnN0IGF1dG8mIGJsZW5kaW5nS2V5ZnJhbWVzID0ga2V5ZnJhbWVFZmZlY3QuYmxlbmRp
bmdLZXlmcmFtZXMoKTsKICAgICBjb25zdCBhdXRvJiBwYXJzZWRLZXlmcmFtZXMgPSBrZXlmcmFt
ZUVmZmVjdC5wYXJzZWRLZXlmcmFtZXMoKTsKQEAgLTEzMCw3ICsxMzAsNyBAQCBzdGF0aWMgUmVm
PEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6QW5pbWF0aW9uOjpLZXlmcmFtZT4+
IGJ1aWxkT2JqZWN0RgogICAgICAgICAgICAgQVNTRVJUKGJsZW5kaW5nS2V5ZnJhbWUuc3R5bGUo
KSk7CiAgICAgICAgICAgICBhdXRvJiBzdHlsZSA9ICpibGVuZGluZ0tleWZyYW1lLnN0eWxlKCk7
CiAKLSAgICAgICAgICAgIGF1dG8ga2V5ZnJhbWVQYXlsb2FkID0gSW5zcGVjdG9yOjpQcm90b2Nv
bDo6QW5pbWF0aW9uOjpLZXlmcmFtZTo6Y3JlYXRlKCkKKyAgICAgICAgICAgIGF1dG8ga2V5ZnJh
bWVQYXlsb2FkID0gUHJvdG9jb2w6OkFuaW1hdGlvbjo6S2V5ZnJhbWU6OmNyZWF0ZSgpCiAgICAg
ICAgICAgICAgICAgLnNldE9mZnNldChibGVuZGluZ0tleWZyYW1lLmtleSgpKQogICAgICAgICAg
ICAgICAgIC5yZWxlYXNlKCk7CiAKQEAgLTE2Nyw3ICsxNjcsNyBAQCBzdGF0aWMgUmVmPEpTT046
OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6QW5pbWF0aW9uOjpLZXlmcmFtZT4+IGJ1aWxk
T2JqZWN0RgogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgZm9yIChjb25zdCBhdXRv
JiBwYXJzZWRLZXlmcmFtZSA6IHBhcnNlZEtleWZyYW1lcykgewotICAgICAgICAgICAgYXV0byBr
ZXlmcmFtZVBheWxvYWQgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBbmltYXRpb246OktleWZyYW1l
OjpjcmVhdGUoKQorICAgICAgICAgICAgYXV0byBrZXlmcmFtZVBheWxvYWQgPSBQcm90b2NvbDo6
QW5pbWF0aW9uOjpLZXlmcmFtZTo6Y3JlYXRlKCkKICAgICAgICAgICAgICAgICAuc2V0T2Zmc2V0
KHBhcnNlZEtleWZyYW1lLmNvbXB1dGVkT2Zmc2V0KQogICAgICAgICAgICAgICAgIC5yZWxlYXNl
KCk7CiAKQEAgLTE4Niw5ICsxODYsOSBAQCBzdGF0aWMgUmVmPEpTT046OkFycmF5T2Y8SW5zcGVj
dG9yOjpQcm90b2NvbDo6QW5pbWF0aW9uOjpLZXlmcmFtZT4+IGJ1aWxkT2JqZWN0RgogICAgIHJl
dHVybiBrZXlmcmFtZXNQYXlsb2FkOwogfQogCi1zdGF0aWMgUmVmPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkFuaW1hdGlvbjo6RWZmZWN0PiBidWlsZE9iamVjdEZvckVmZmVjdChBbmltYXRpb25FZmZl
Y3QmIGVmZmVjdCkKK3N0YXRpYyBSZWY8UHJvdG9jb2w6OkFuaW1hdGlvbjo6RWZmZWN0PiBidWls
ZE9iamVjdEZvckVmZmVjdChBbmltYXRpb25FZmZlY3QmIGVmZmVjdCkKIHsKLSAgICBhdXRvIGVm
ZmVjdFBheWxvYWQgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBbmltYXRpb246OkVmZmVjdDo6Y3Jl
YXRlKCkKKyAgICBhdXRvIGVmZmVjdFBheWxvYWQgPSBQcm90b2NvbDo6QW5pbWF0aW9uOjpFZmZl
Y3Q6OmNyZWF0ZSgpCiAgICAgICAgIC5yZWxlYXNlKCk7CiAKICAgICBpZiAoYXV0byBzdGFydERl
bGF5ID0gcHJvdG9jb2xWYWx1ZUZvclNlY29uZHMoZWZmZWN0LmRlbGF5KCkpKQpAQCAtMjM4LDIw
ICsyMzgsMTcgQEAgdm9pZCBJbnNwZWN0b3JBbmltYXRpb25BZ2VudDo6ZGlkQ3JlYXRlRnJvbnRl
bmRBbmRCYWNrZW5kKEZyb250ZW5kUm91dGVyKiwgQmFja2UKIAogdm9pZCBJbnNwZWN0b3JBbmlt
YXRpb25BZ2VudDo6d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoRGlzY29ubmVjdFJlYXNv
bikKIHsKLSAgICBFcnJvclN0cmluZyBpZ25vcmVkOwotICAgIHN0b3BUcmFja2luZyhpZ25vcmVk
KTsKLSAgICBkaXNhYmxlKGlnbm9yZWQpOworICAgIHN0b3BUcmFja2luZygpOworICAgIGRpc2Fi
bGUoKTsKIAogICAgIEFTU0VSVChtX2luc3RydW1lbnRpbmdBZ2VudHMucGVyc2lzdGVudEFuaW1h
dGlvbkFnZW50KCkgPT0gdGhpcyk7CiAgICAgbV9pbnN0cnVtZW50aW5nQWdlbnRzLnNldFBlcnNp
c3RlbnRBbmltYXRpb25BZ2VudChudWxscHRyKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JBbmltYXRp
b25BZ2VudDo6ZW5hYmxlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZykKK1Byb3RvY29sOjpFcnJv
clN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckFuaW1hdGlvbkFnZW50OjplbmFibGUoKQogewotICAg
IGlmIChtX2luc3RydW1lbnRpbmdBZ2VudHMuZW5hYmxlZEFuaW1hdGlvbkFnZW50KCkgPT0gdGhp
cykgewotICAgICAgICBlcnJvclN0cmluZyA9ICJBbmltYXRpb24gZG9tYWluIGFscmVhZHkgZW5h
YmxlZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAobV9pbnN0cnVtZW50aW5n
QWdlbnRzLmVuYWJsZWRBbmltYXRpb25BZ2VudCgpID09IHRoaXMpCisgICAgICAgIHJldHVybiBt
YWtlVW5leHBlY3RlZCgiQW5pbWF0aW9uIGRvbWFpbiBhbHJlYWR5IGVuYWJsZWQiX3MpOwogCiAg
ICAgbV9pbnN0cnVtZW50aW5nQWdlbnRzLnNldEVuYWJsZWRBbmltYXRpb25BZ2VudCh0aGlzKTsK
IApAQCAtMjcwLDQ5ICsyNjcsNTEgQEAgdm9pZCBJbnNwZWN0b3JBbmltYXRpb25BZ2VudDo6ZW5h
YmxlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZykKICAgICAgICAgICAgICAgICBiaW5kQW5pbWF0
aW9uKCphbmltYXRpb24sIGZhbHNlKTsKICAgICAgICAgfQogICAgIH0KKworICAgIHJldHVybiB7
IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yQW5pbWF0aW9uQWdlbnQ6OmRpc2FibGUoRXJyb3JTdHJp
bmcmKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yQW5pbWF0aW9uQWdl
bnQ6OmRpc2FibGUoKQogewogICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy5zZXRFbmFibGVkQW5p
bWF0aW9uQWdlbnQobnVsbHB0cik7CiAKICAgICByZXNldCgpOworCisgICAgcmV0dXJuIHsgfTsK
IH0KIAotdm9pZCBJbnNwZWN0b3JBbmltYXRpb25BZ2VudDo6cmVxdWVzdEVmZmVjdFRhcmdldChF
cnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uSWQsIGludCog
bm9kZUlkKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UHJvdG9jb2w6OkRPTTo6Tm9kZUlkPiBJ
bnNwZWN0b3JBbmltYXRpb25BZ2VudDo6cmVxdWVzdEVmZmVjdFRhcmdldChjb25zdCBQcm90b2Nv
bDo6QW5pbWF0aW9uOjpBbmltYXRpb25JZCYgYW5pbWF0aW9uSWQpCiB7CisgICAgUHJvdG9jb2w6
OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAgICAgYXV0byogYW5pbWF0aW9uID0gYXNzZXJ0
QW5pbWF0aW9uKGVycm9yU3RyaW5nLCBhbmltYXRpb25JZCk7CiAgICAgaWYgKCFhbmltYXRpb24p
Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3Ry
aW5nKTsKIAogICAgIGF1dG8qIGRvbUFnZW50ID0gbV9pbnN0cnVtZW50aW5nQWdlbnRzLnBlcnNp
c3RlbnRET01BZ2VudCgpOwotICAgIGlmICghZG9tQWdlbnQpIHsKLSAgICAgICAgZXJyb3JTdHJp
bmcgPSAiRE9NIGRvbWFpbiBtdXN0IGJlIGVuYWJsZWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9CisgICAgaWYgKCFkb21BZ2VudCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJE
T00gZG9tYWluIG11c3QgYmUgZW5hYmxlZCJfcyk7CiAKICAgICBhdXRvKiBlZmZlY3QgPSBhbmlt
YXRpb24tPmVmZmVjdCgpOwotICAgIGlmICghaXM8S2V5ZnJhbWVFZmZlY3Q+KGVmZmVjdCkpIHsK
LSAgICAgICAgZXJyb3JTdHJpbmcgPSAiQW5pbWF0aW9uIGZvciBnaXZlbiBhbmltYXRpb25JZCBk
b2VzIG5vdCBoYXZlIGFuIGVmZmVjdCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBp
ZiAoIWlzPEtleWZyYW1lRWZmZWN0PihlZmZlY3QpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoIkFuaW1hdGlvbiBmb3IgZ2l2ZW4gYW5pbWF0aW9uSWQgZG9lcyBub3QgaGF2ZSBhbiBl
ZmZlY3QiX3MpOwogCiAgICAgYXV0byYga2V5ZnJhbWVFZmZlY3QgPSBkb3duY2FzdDxLZXlmcmFt
ZUVmZmVjdD4oKmVmZmVjdCk7CiAKICAgICBhdXRvKiB0YXJnZXQgPSBrZXlmcmFtZUVmZmVjdC50
YXJnZXRFbGVtZW50T3JQc2V1ZG9FbGVtZW50KCk7Ci0gICAgaWYgKCF0YXJnZXQpIHsKLSAgICAg
ICAgZXJyb3JTdHJpbmcgPSAiQW5pbWF0aW9uIGZvciBnaXZlbiBhbmltYXRpb25JZCBkb2VzIG5v
dCBoYXZlIGEgdGFyZ2V0Il9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghdGFy
Z2V0KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkFuaW1hdGlvbiBmb3IgZ2l2ZW4g
YW5pbWF0aW9uSWQgZG9lcyBub3QgaGF2ZSBhIHRhcmdldCJfcyk7CiAKLSAgICAqbm9kZUlkID0g
ZG9tQWdlbnQtPnB1c2hOb2RlUGF0aFRvRnJvbnRlbmQoZXJyb3JTdHJpbmcsIHRhcmdldCk7Cisg
ICAgcmV0dXJuIGRvbUFnZW50LT5wdXNoTm9kZVBhdGhUb0Zyb250ZW5kKGVycm9yU3RyaW5nLCB0
YXJnZXQpOwogfQogCi12b2lkIEluc3BlY3RvckFuaW1hdGlvbkFnZW50OjpyZXNvbHZlQW5pbWF0
aW9uKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBhbmltYXRpb25JZCwg
Y29uc3QgU3RyaW5nKiBvYmplY3RHcm91cCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1
bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3VsdCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPFJl
ZjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0Pj4gSW5zcGVjdG9yQW5pbWF0aW9uQWdl
bnQ6OnJlc29sdmVBbmltYXRpb24oY29uc3QgUHJvdG9jb2w6OkFuaW1hdGlvbjo6QW5pbWF0aW9u
SWQmIGFuaW1hdGlvbklkLCBjb25zdCBTdHJpbmcmIG9iamVjdEdyb3VwKQogeworICAgIFByb3Rv
Y29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIGF1dG8qIGFuaW1hdGlvbiA9IGFz
c2VydEFuaW1hdGlvbihlcnJvclN0cmluZywgYW5pbWF0aW9uSWQpOwogICAgIGlmICghYW5pbWF0
aW9uKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJv
clN0cmluZyk7CiAKICAgICBhdXRvKiBzdGF0ZSA9IGFuaW1hdGlvbi0+c2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpLT5leGVjU3RhdGUoKTsKICAgICBhdXRvIGluamVjdGVkU2NyaXB0ID0gbV9pbmpl
Y3RlZFNjcmlwdE1hbmFnZXIuaW5qZWN0ZWRTY3JpcHRGb3Ioc3RhdGUpOwpAQCAtMzI4LDM4ICsz
MjcsNDIgQEAgdm9pZCBJbnNwZWN0b3JBbmltYXRpb25BZ2VudDo6cmVzb2x2ZUFuaW1hdGlvbihF
cnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFMKIAogICAgIGlmICghdmFsdWUpIHsKICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIkludGVy
bmFsIGVycm9yOiB1bmtub3duIEFuaW1hdGlvbiBmb3IgZ2l2ZW4gYW5pbWF0aW9uSWQiX3M7Ci0g
ICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJJbnRlcm5hbCBl
cnJvcjogdW5rbm93biBBbmltYXRpb24gZm9yIGdpdmVuIGFuaW1hdGlvbklkIl9zKTsKICAgICB9
CiAKLSAgICBTdHJpbmcgb2JqZWN0R3JvdXBOYW1lID0gb2JqZWN0R3JvdXAgPyAqb2JqZWN0R3Jv
dXAgOiBTdHJpbmcoKTsKLSAgICByZXN1bHQgPSBpbmplY3RlZFNjcmlwdC53cmFwT2JqZWN0KHZh
bHVlLCBvYmplY3RHcm91cE5hbWUpOworICAgIGF1dG8gb2JqZWN0ID0gaW5qZWN0ZWRTY3JpcHQu
d3JhcE9iamVjdCh2YWx1ZSwgb2JqZWN0R3JvdXApOworICAgIGlmICghb2JqZWN0KQorICAgICAg
ICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkludGVybmFsIGVycm9yOiB1bmFibGUgdG8gY2FzdCBB
bmltYXRpb24iKTsKKworICAgIHJldHVybiBvYmplY3QucmVsZWFzZU5vbk51bGwoKTsKIH0KIAot
dm9pZCBJbnNwZWN0b3JBbmltYXRpb25BZ2VudDo6c3RhcnRUcmFja2luZyhFcnJvclN0cmluZyYg
ZXJyb3JTdHJpbmcpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JBbmlt
YXRpb25BZ2VudDo6c3RhcnRUcmFja2luZygpCiB7Ci0gICAgaWYgKG1faW5zdHJ1bWVudGluZ0Fn
ZW50cy50cmFja2luZ0FuaW1hdGlvbkFnZW50KCkgPT0gdGhpcykgewotICAgICAgICBlcnJvclN0
cmluZyA9ICJBbmltYXRpb24gZG9tYWluIGFscmVhZHkgdHJhY2tpbmciX3M7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9CisgICAgaWYgKG1faW5zdHJ1bWVudGluZ0FnZW50cy50cmFja2luZ0FuaW1h
dGlvbkFnZW50KCkgPT0gdGhpcykKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJBbmlt
YXRpb24gZG9tYWluIGFscmVhZHkgdHJhY2tpbmciX3MpOwogCiAgICAgbV9pbnN0cnVtZW50aW5n
QWdlbnRzLnNldFRyYWNraW5nQW5pbWF0aW9uQWdlbnQodGhpcyk7CiAKICAgICBBU1NFUlQobV90
cmFja2VkRGVjbGFyYXRpdmVBbmltYXRpb25EYXRhLmlzRW1wdHkoKSk7CiAKICAgICBtX2Zyb250
ZW5kRGlzcGF0Y2hlci0+dHJhY2tpbmdTdGFydChtX2Vudmlyb25tZW50LmV4ZWN1dGlvblN0b3B3
YXRjaCgpLmVsYXBzZWRUaW1lKCkuc2Vjb25kcygpKTsKKworICAgIHJldHVybiB7IH07CiB9CiAK
LXZvaWQgSW5zcGVjdG9yQW5pbWF0aW9uQWdlbnQ6OnN0b3BUcmFja2luZyhFcnJvclN0cmluZyYp
CitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JBbmltYXRpb25BZ2VudDo6
c3RvcFRyYWNraW5nKCkKIHsKICAgICBpZiAobV9pbnN0cnVtZW50aW5nQWdlbnRzLnRyYWNraW5n
QW5pbWF0aW9uQWdlbnQoKSAhPSB0aGlzKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVy
biB7IH07CiAKICAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMuc2V0VHJhY2tpbmdBbmltYXRpb25B
Z2VudChudWxscHRyKTsKIAogICAgIG1fdHJhY2tlZERlY2xhcmF0aXZlQW5pbWF0aW9uRGF0YS5j
bGVhcigpOwogCiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPnRyYWNraW5nQ29tcGxldGUobV9l
bnZpcm9ubWVudC5leGVjdXRpb25TdG9wd2F0Y2goKS5lbGFwc2VkVGltZSgpLnNlY29uZHMoKSk7
CisKKyAgICByZXR1cm4geyB9OwogfQogCiBzdGF0aWMgYm9vbCBpc0RlbGF5ZWQoQ29tcHV0ZWRF
ZmZlY3RUaW1pbmcmIGNvbXB1dGVkVGltaW5nKQpAQCAtMzgwLDMxICszODMsMzEgQEAgdm9pZCBJ
bnNwZWN0b3JBbmltYXRpb25BZ2VudDo6d2lsbEFwcGx5S2V5ZnJhbWVFZmZlY3QoRWxlbWVudCYg
dGFyZ2V0LCBLZXlmcmFtZUUKICAgICB9KTsKICAgICBhdXRvJiB0cmFja2luZ0RhdGEgPSBlbnN1
cmVSZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwogCi0gICAgT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90
b2NvbDo6QW5pbWF0aW9uOjpBbmltYXRpb25TdGF0ZT4gYW5pbWF0aW9uQW5pbWF0aW9uU3RhdGU7
CisgICAgT3B0aW9uYWw8UHJvdG9jb2w6OkFuaW1hdGlvbjo6QW5pbWF0aW9uU3RhdGU+IGFuaW1h
dGlvbkFuaW1hdGlvblN0YXRlOwogCiAgICAgaWYgKChlbnN1cmVSZXN1bHQuaXNOZXdFbnRyeSB8
fCAhaXNEZWxheWVkKHRyYWNraW5nRGF0YS5sYXN0Q29tcHV0ZWRUaW1pbmcpKSAmJiBpc0RlbGF5
ZWQoY29tcHV0ZWRUaW1pbmcpKQotICAgICAgICBhbmltYXRpb25BbmltYXRpb25TdGF0ZSA9IElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkFuaW1hdGlvbjo6QW5pbWF0aW9uU3RhdGU6OkRlbGF5ZWQ7Cisg
ICAgICAgIGFuaW1hdGlvbkFuaW1hdGlvblN0YXRlID0gUHJvdG9jb2w6OkFuaW1hdGlvbjo6QW5p
bWF0aW9uU3RhdGU6OkRlbGF5ZWQ7CiAgICAgZWxzZSBpZiAoZW5zdXJlUmVzdWx0LmlzTmV3RW50
cnkgfHwgdHJhY2tpbmdEYXRhLmxhc3RDb21wdXRlZFRpbWluZy5waGFzZSAhPSBjb21wdXRlZFRp
bWluZy5waGFzZSkgewogICAgICAgICBzd2l0Y2ggKGNvbXB1dGVkVGltaW5nLnBoYXNlKSB7CiAg
ICAgICAgIGNhc2UgQW5pbWF0aW9uRWZmZWN0UGhhc2U6OkJlZm9yZToKLSAgICAgICAgICAgIGFu
aW1hdGlvbkFuaW1hdGlvblN0YXRlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QW5pbWF0aW9uOjpB
bmltYXRpb25TdGF0ZTo6UmVhZHk7CisgICAgICAgICAgICBhbmltYXRpb25BbmltYXRpb25TdGF0
ZSA9IFByb3RvY29sOjpBbmltYXRpb246OkFuaW1hdGlvblN0YXRlOjpSZWFkeTsKICAgICAgICAg
ICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgQW5pbWF0aW9uRWZmZWN0UGhhc2U6OkFjdGl2ZToK
LSAgICAgICAgICAgIGFuaW1hdGlvbkFuaW1hdGlvblN0YXRlID0gSW5zcGVjdG9yOjpQcm90b2Nv
bDo6QW5pbWF0aW9uOjpBbmltYXRpb25TdGF0ZTo6QWN0aXZlOworICAgICAgICAgICAgYW5pbWF0
aW9uQW5pbWF0aW9uU3RhdGUgPSBQcm90b2NvbDo6QW5pbWF0aW9uOjpBbmltYXRpb25TdGF0ZTo6
QWN0aXZlOwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBBbmltYXRpb25FZmZl
Y3RQaGFzZTo6QWZ0ZXI6Ci0gICAgICAgICAgICBhbmltYXRpb25BbmltYXRpb25TdGF0ZSA9IElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkFuaW1hdGlvbjo6QW5pbWF0aW9uU3RhdGU6OkRvbmU7CisgICAg
ICAgICAgICBhbmltYXRpb25BbmltYXRpb25TdGF0ZSA9IFByb3RvY29sOjpBbmltYXRpb246OkFu
aW1hdGlvblN0YXRlOjpEb25lOwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBB
bmltYXRpb25FZmZlY3RQaGFzZTo6SWRsZToKLSAgICAgICAgICAgIGFuaW1hdGlvbkFuaW1hdGlv
blN0YXRlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QW5pbWF0aW9uOjpBbmltYXRpb25TdGF0ZTo6
Q2FuY2VsZWQ7CisgICAgICAgICAgICBhbmltYXRpb25BbmltYXRpb25TdGF0ZSA9IFByb3RvY29s
OjpBbmltYXRpb246OkFuaW1hdGlvblN0YXRlOjpDYW5jZWxlZDsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAgICAgfSBlbHNlIGlmICh0cmFja2luZ0RhdGEubGFzdENvbXB1dGVkVGlt
aW5nLmN1cnJlbnRJdGVyYXRpb24gIT0gY29tcHV0ZWRUaW1pbmcuY3VycmVudEl0ZXJhdGlvbikg
ewogICAgICAgICAvLyBJdGVyYXRpb25zIGFyZSByZXByZXNlbnRlZCBieSBzZXF1ZW50aWFsICJh
Y3RpdmUiIHN0YXRlIGV2ZW50cy4KLSAgICAgICAgYW5pbWF0aW9uQW5pbWF0aW9uU3RhdGUgPSBJ
bnNwZWN0b3I6OlByb3RvY29sOjpBbmltYXRpb246OkFuaW1hdGlvblN0YXRlOjpBY3RpdmU7Cisg
ICAgICAgIGFuaW1hdGlvbkFuaW1hdGlvblN0YXRlID0gUHJvdG9jb2w6OkFuaW1hdGlvbjo6QW5p
bWF0aW9uU3RhdGU6OkFjdGl2ZTsKICAgICB9CiAKICAgICB0cmFja2luZ0RhdGEubGFzdENvbXB1
dGVkVGltaW5nID0gY29tcHV0ZWRUaW1pbmc7CkBAIC00MTIsNyArNDE1LDcgQEAgdm9pZCBJbnNw
ZWN0b3JBbmltYXRpb25BZ2VudDo6d2lsbEFwcGx5S2V5ZnJhbWVFZmZlY3QoRWxlbWVudCYgdGFy
Z2V0LCBLZXlmcmFtZUUKICAgICBpZiAoIWFuaW1hdGlvbkFuaW1hdGlvblN0YXRlKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBhdXRvIGV2ZW50ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QW5pbWF0
aW9uOjpUcmFja2luZ1VwZGF0ZTo6Y3JlYXRlKCkKKyAgICBhdXRvIGV2ZW50ID0gUHJvdG9jb2w6
OkFuaW1hdGlvbjo6VHJhY2tpbmdVcGRhdGU6OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRUcmFja2lu
Z0FuaW1hdGlvbklkKHRyYWNraW5nRGF0YS50cmFja2luZ0FuaW1hdGlvbklkKQogICAgICAgICAu
c2V0QW5pbWF0aW9uU3RhdGUoYW5pbWF0aW9uQW5pbWF0aW9uU3RhdGUudmFsdWUoKSkKICAgICAg
ICAgLnJlbGVhc2UoKTsKQEAgLTQ0MSw4ICs0NDQsNyBAQCB2b2lkIEluc3BlY3RvckFuaW1hdGlv
bkFnZW50OjpkaWRDaGFuZ2VXZWJBbmltYXRpb25OYW1lKFdlYkFuaW1hdGlvbiYgYW5pbWF0aW9u
KQogICAgIGlmIChhbmltYXRpb25JZC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAg
IGF1dG8gbmFtZSA9IGFuaW1hdGlvbi5pZCgpOwotICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5u
YW1lQ2hhbmdlZChhbmltYXRpb25JZCwgIW5hbWUuaXNFbXB0eSgpID8gJm5hbWUgOiBudWxscHRy
KTsKKyAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+bmFtZUNoYW5nZWQoYW5pbWF0aW9uSWQsIGFu
aW1hdGlvbi5pZCgpKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JBbmltYXRpb25BZ2VudDo6ZGlkU2V0
V2ViQW5pbWF0aW9uRWZmZWN0KFdlYkFuaW1hdGlvbiYgYW5pbWF0aW9uKQpAQCAtNTI1LDcgKzUy
Nyw3IEBAIFN0cmluZyBJbnNwZWN0b3JBbmltYXRpb25BZ2VudDo6ZmluZEFuaW1hdGlvbklkKFdl
YkFuaW1hdGlvbiYgYW5pbWF0aW9uKQogICAgIHJldHVybiBudWxsU3RyaW5nKCk7CiB9CiAKLVdl
YkFuaW1hdGlvbiogSW5zcGVjdG9yQW5pbWF0aW9uQWdlbnQ6OmFzc2VydEFuaW1hdGlvbihFcnJv
clN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uSWQpCitXZWJBbmlt
YXRpb24qIEluc3BlY3RvckFuaW1hdGlvbkFnZW50Ojphc3NlcnRBbmltYXRpb24oUHJvdG9jb2w6
OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBhbmltYXRpb25JZCkKIHsK
ICAgICBhdXRvKiBhbmltYXRpb24gPSBtX2FuaW1hdGlvbklkTWFwLmdldChhbmltYXRpb25JZCk7
CiAgICAgaWYgKCFhbmltYXRpb24pCkBAIC01MzgsNyArNTQwLDcgQEAgdm9pZCBJbnNwZWN0b3JB
bmltYXRpb25BZ2VudDo6YmluZEFuaW1hdGlvbihXZWJBbmltYXRpb24mIGFuaW1hdGlvbiwgYm9v
bCBjYXB0dXIKICAgICBhdXRvIGFuaW1hdGlvbklkID0gbWFrZVN0cmluZygiYW5pbWF0aW9uOiIg
KyBJZGVudGlmaWVyc0ZhY3Rvcnk6OmNyZWF0ZUlkZW50aWZpZXIoKSk7CiAgICAgbV9hbmltYXRp
b25JZE1hcC5zZXQoYW5pbWF0aW9uSWQsICZhbmltYXRpb24pOwogCi0gICAgYXV0byBhbmltYXRp
b25QYXlsb2FkID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QW5pbWF0aW9uOjpBbmltYXRpb246OmNy
ZWF0ZSgpCisgICAgYXV0byBhbmltYXRpb25QYXlsb2FkID0gUHJvdG9jb2w6OkFuaW1hdGlvbjo6
QW5pbWF0aW9uOjpjcmVhdGUoKQogICAgICAgICAuc2V0QW5pbWF0aW9uSWQoYW5pbWF0aW9uSWQp
CiAgICAgICAgIC5yZWxlYXNlKCk7CiAKQEAgLTYwMyw5ICs2MDUsOSBAQCB2b2lkIEluc3BlY3Rv
ckFuaW1hdGlvbkFnZW50OjpzdG9wVHJhY2tpbmdEZWNsYXJhdGl2ZUFuaW1hdGlvbihEZWNsYXJh
dGl2ZUFuaW1hdAogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoaXQtPnZhbHVlLmxhc3RDb21w
dXRlZFRpbWluZy5waGFzZSAhPSBBbmltYXRpb25FZmZlY3RQaGFzZTo6QWZ0ZXIgJiYgaXQtPnZh
bHVlLmxhc3RDb21wdXRlZFRpbWluZy5waGFzZSAhPSBBbmltYXRpb25FZmZlY3RQaGFzZTo6SWRs
ZSkgewotICAgICAgICBhdXRvIGV2ZW50ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QW5pbWF0aW9u
OjpUcmFja2luZ1VwZGF0ZTo6Y3JlYXRlKCkKKyAgICAgICAgYXV0byBldmVudCA9IFByb3RvY29s
OjpBbmltYXRpb246OlRyYWNraW5nVXBkYXRlOjpjcmVhdGUoKQogICAgICAgICAgICAgLnNldFRy
YWNraW5nQW5pbWF0aW9uSWQoaXQtPnZhbHVlLnRyYWNraW5nQW5pbWF0aW9uSWQpCi0gICAgICAg
ICAgICAuc2V0QW5pbWF0aW9uU3RhdGUoSW5zcGVjdG9yOjpQcm90b2NvbDo6QW5pbWF0aW9uOjpB
bmltYXRpb25TdGF0ZTo6Q2FuY2VsZWQpCisgICAgICAgICAgICAuc2V0QW5pbWF0aW9uU3RhdGUo
UHJvdG9jb2w6OkFuaW1hdGlvbjo6QW5pbWF0aW9uU3RhdGU6OkNhbmNlbGVkKQogICAgICAgICAg
ICAgLnJlbGVhc2UoKTsKICAgICAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPnRyYWNraW5nVXBk
YXRlKG1fZW52aXJvbm1lbnQuZXhlY3V0aW9uU3RvcHdhdGNoKCkuZWxhcHNlZFRpbWUoKS5zZWNv
bmRzKCksIFdURk1vdmUoZXZlbnQpKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckFuaW1hdGlvbkFnZW50LmggYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckFuaW1hdGlvbkFnZW50LmgKaW5kZXggOGI1
MTE2MjhjOTdhMjIyYThmOWFjZDhkM2U1YjIwMmE4ZGJiNmJlYy4uMDY0YWM0MDYzYzMwOWZkYjQx
YzcxYmZjZjZjYmQ5ZWE2NGVkOTMxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2FnZW50cy9JbnNwZWN0b3JBbmltYXRpb25BZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQW5pbWF0aW9uQWdlbnQuaApAQCAtNDQsMjYgKzQ0
LDI0IEBAIGNsYXNzIEtleWZyYW1lRWZmZWN0OwogY2xhc3MgUGFnZTsKIGNsYXNzIFdlYkFuaW1h
dGlvbjsKIAotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7Ci0KIGNsYXNzIEluc3BlY3RvckFu
aW1hdGlvbkFnZW50IGZpbmFsIDogcHVibGljIEluc3BlY3RvckFnZW50QmFzZSwgcHVibGljIElu
c3BlY3Rvcjo6QW5pbWF0aW9uQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKICAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShJbnNwZWN0b3JBbmltYXRpb25BZ2VudCk7CiAgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgSW5zcGVjdG9yQW5pbWF0aW9uQWdlbnQoUGFnZUFn
ZW50Q29udGV4dCYpOwotICAgIH5JbnNwZWN0b3JBbmltYXRpb25BZ2VudCgpIG92ZXJyaWRlOwor
ICAgIH5JbnNwZWN0b3JBbmltYXRpb25BZ2VudCgpOwogCiAgICAgLy8gSW5zcGVjdG9yQWdlbnRC
YXNlCi0gICAgdm9pZCBkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9u
dGVuZFJvdXRlciosIEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXIqKSBvdmVycmlkZTsKLSAg
ICB2b2lkIHdpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlzY29ubmVj
dFJlYXNvbikgb3ZlcnJpZGU7CisgICAgdm9pZCBkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQo
SW5zcGVjdG9yOjpGcm9udGVuZFJvdXRlciosIEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXIq
KTsKKyAgICB2b2lkIHdpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlz
Y29ubmVjdFJlYXNvbik7CiAKICAgICAvLyBBbmltYXRpb25CYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXIKLSAgICB2b2lkIGVuYWJsZShFcnJvclN0cmluZyYpIG92ZXJyaWRlOwotICAgIHZvaWQgZGlz
YWJsZShFcnJvclN0cmluZyYpIG92ZXJyaWRlOwotICAgIHZvaWQgcmVxdWVzdEVmZmVjdFRhcmdl
dChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uSWQsIGludCogbm9kZUlkKSBv
dmVycmlkZTsKLSAgICB2b2lkIHJlc29sdmVBbmltYXRpb24oRXJyb3JTdHJpbmcmLCBjb25zdCBT
dHJpbmcmIGFuaW1hdGlvbklkLCBjb25zdCBTdHJpbmcqIG9iamVjdEdyb3VwLCBSZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYpIG92ZXJyaWRlOwotICAg
IHZvaWQgc3RhcnRUcmFja2luZyhFcnJvclN0cmluZyYpIG92ZXJyaWRlOwotICAgIHZvaWQgc3Rv
cFRyYWNraW5nKEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7CisgICAgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBlbmFibGUoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29s
OjpFcnJvclN0cmluZ09yPHZvaWQ+IGRpc2FibGUoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29s
OjpFcnJvclN0cmluZ09yPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkPiByZXF1ZXN0
RWZmZWN0VGFyZ2V0KGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFuaW1hdGlvbjo6QW5pbWF0
aW9uSWQmKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+PiByZXNvbHZlQW5pbWF0aW9u
KGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFuaW1hdGlvbjo6QW5pbWF0aW9uSWQmLCBjb25z
dCBTdHJpbmcmIG9iamVjdEdyb3VwKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0
cmluZ09yPHZvaWQ+IHN0YXJ0VHJhY2tpbmcoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpF
cnJvclN0cmluZ09yPHZvaWQ+IHN0b3BUcmFja2luZygpOwogCiAgICAgLy8gSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uCiAgICAgdm9pZCB3aWxsQXBwbHlLZXlmcmFtZUVmZmVjdChFbGVtZW50Jiwg
S2V5ZnJhbWVFZmZlY3QmLCBDb21wdXRlZEVmZmVjdFRpbWluZyk7CkBAIC03Nyw3ICs3NSw3IEBA
IHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBTdHJpbmcgZmluZEFuaW1hdGlvbklkKFdlYkFuaW1h
dGlvbiYpOwotICAgIFdlYkFuaW1hdGlvbiogYXNzZXJ0QW5pbWF0aW9uKEVycm9yU3RyaW5nJiwg
Y29uc3QgU3RyaW5nJiBhbmltYXRpb25JZCk7CisgICAgV2ViQW5pbWF0aW9uKiBhc3NlcnRBbmlt
YXRpb24oSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGFu
aW1hdGlvbklkKTsKICAgICB2b2lkIGJpbmRBbmltYXRpb24oV2ViQW5pbWF0aW9uJiwgYm9vbCBj
YXB0dXJlQmFja3RyYWNlKTsKICAgICB2b2lkIHVuYmluZEFuaW1hdGlvbihjb25zdCBTdHJpbmcm
IGFuaW1hdGlvbklkKTsKICAgICB2b2lkIGFuaW1hdGlvbkRlc3Ryb3llZFRpbWVyRmlyZWQoKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQXBw
bGljYXRpb25DYWNoZUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50LmNwcAppbmRleCA5MTI5MjY0OGQ2ODJkOWMz
ODFlNTI0ZmQwOTcwMDhhNDdjMzY1MDRhLi5hZjY3Mzc4YTZkZGNkMWFlNzcyNDRlODk5NTM2Nzcz
YTcwMjdiMDNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0lu
c3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuY3BwCkBAIC01Nywz
MSArNTcsMzAgQEAgdm9pZCBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQ6OmRpZENyZWF0
ZUZyb250ZW5kQW5kQmFja2VuZChGcm9udGVuZFJvdXRlcioKIAogdm9pZCBJbnNwZWN0b3JBcHBs
aWNhdGlvbkNhY2hlQWdlbnQ6OndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rv
cjo6RGlzY29ubmVjdFJlYXNvbikKIHsKLSAgICBFcnJvclN0cmluZyBpZ25vcmVkOwotICAgIGRp
c2FibGUoaWdub3JlZCk7CisgICAgZGlzYWJsZSgpOwogfQogCi12b2lkIEluc3BlY3RvckFwcGxp
Y2F0aW9uQ2FjaGVBZ2VudDo6ZW5hYmxlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZykKK1Byb3Rv
Y29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudDo6
ZW5hYmxlKCkKIHsKLSAgICBpZiAobV9pbnN0cnVtZW50aW5nQWdlbnRzLmVuYWJsZWRBcHBsaWNh
dGlvbkNhY2hlQWdlbnQoKSA9PSB0aGlzKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIkFwcGxp
Y2F0aW9uQ2FjaGUgZG9tYWluIGFscmVhZHkgZW5hYmxlZCJfczsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KKyAgICBpZiAobV9pbnN0cnVtZW50aW5nQWdlbnRzLmVuYWJsZWRBcHBsaWNhdGlvbkNh
Y2hlQWdlbnQoKSA9PSB0aGlzKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkFwcGxp
Y2F0aW9uQ2FjaGUgZG9tYWluIGFscmVhZHkgZW5hYmxlZCJfcyk7CiAKICAgICBtX2luc3RydW1l
bnRpbmdBZ2VudHMuc2V0RW5hYmxlZEFwcGxpY2F0aW9uQ2FjaGVBZ2VudCh0aGlzKTsKIAogICAg
IC8vIFdlIG5lZWQgdG8gcGFzcyBpbml0aWFsIG5hdmlnYXRvci5vbk9ubGluZS4KICAgICBuZXR3
b3JrU3RhdGVDaGFuZ2VkKCk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3Rv
ckFwcGxpY2F0aW9uQ2FjaGVBZ2VudDo6ZGlzYWJsZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcp
CitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hl
QWdlbnQ6OmRpc2FibGUoKQogewotICAgIGlmIChtX2luc3RydW1lbnRpbmdBZ2VudHMuZW5hYmxl
ZEFwcGxpY2F0aW9uQ2FjaGVBZ2VudCgpICE9IHRoaXMpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcg
PSAiQXBwbGljYXRpb25DYWNoZSBkb21haW4gYWxyZWFkeSBkaXNhYmxlZCJfczsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KKyAgICBpZiAobV9pbnN0cnVtZW50aW5nQWdlbnRzLmVuYWJsZWRBcHBs
aWNhdGlvbkNhY2hlQWdlbnQoKSAhPSB0aGlzKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0
ZWQoIkFwcGxpY2F0aW9uQ2FjaGUgZG9tYWluIGFscmVhZHkgZGlzYWJsZWQiX3MpOwogCiAgICAg
bV9pbnN0cnVtZW50aW5nQWdlbnRzLnNldEVuYWJsZWRBcHBsaWNhdGlvbkNhY2hlQWdlbnQobnVs
bHB0cik7CisKKyAgICByZXR1cm4geyB9OwogfQogCiB2b2lkIEluc3BlY3RvckFwcGxpY2F0aW9u
Q2FjaGVBZ2VudDo6dXBkYXRlQXBwbGljYXRpb25DYWNoZVN0YXR1cyhGcmFtZSogZnJhbWUpCkBA
IC0xMDksMTYgKzEwOCwxMyBAQCB2b2lkIEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudDo6
bmV0d29ya1N0YXRlQ2hhbmdlZCgpCiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPm5ldHdvcmtT
dGF0ZVVwZGF0ZWQocGxhdGZvcm1TdHJhdGVnaWVzKCktPmxvYWRlclN0cmF0ZWd5KCktPmlzT25M
aW5lKCkpOwogfQogCi12b2lkIEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudDo6Z2V0RnJh
bWVzV2l0aE1hbmlmZXN0cyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIFJlZlB0cjxKU09OOjpB
cnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkZyYW1lV2l0aE1h
bmlmZXN0Pj4mIHJlc3VsdCkKK0V4cGVjdGVkPFJlZjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpB
cHBsaWNhdGlvbkNhY2hlOjpGcmFtZVdpdGhNYW5pZmVzdD4+LCBQcm90b2NvbDo6RXJyb3JTdHJp
bmc+IEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudDo6Z2V0RnJhbWVzV2l0aE1hbmlmZXN0
cygpCiB7CiAgICAgYXV0byogcGFnZUFnZW50ID0gbV9pbnN0cnVtZW50aW5nQWdlbnRzLmVuYWJs
ZWRQYWdlQWdlbnQoKTsKLSAgICBpZiAoIXBhZ2VBZ2VudCkgewotICAgICAgICBlcnJvclN0cmlu
ZyA9ICJQYWdlIGRvbWFpbiBtdXN0IGJlIGVuYWJsZWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICByZXN1bHQgPSBKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFw
cGxpY2F0aW9uQ2FjaGU6OkZyYW1lV2l0aE1hbmlmZXN0Pjo6Y3JlYXRlKCk7CisgICAgaWYgKCFw
YWdlQWdlbnQpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiUGFnZSBkb21haW4gbXVz
dCBiZSBlbmFibGVkIl9zKTsKIAorICAgIGF1dG8gcmVzdWx0ID0gSlNPTjo6QXJyYXlPZjxQcm90
b2NvbDo6QXBwbGljYXRpb25DYWNoZTo6RnJhbWVXaXRoTWFuaWZlc3Q+OjpjcmVhdGUoKTsKICAg
ICBmb3IgKEZyYW1lKiBmcmFtZSA9ICZtX2luc3BlY3RlZFBhZ2UubWFpbkZyYW1lKCk7IGZyYW1l
OyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsKICAgICAgICAgYXV0byog
ZG9jdW1lbnRMb2FkZXIgPSBmcmFtZS0+bG9hZGVyKCkuZG9jdW1lbnRMb2FkZXIoKTsKICAgICAg
ICAgaWYgKCFkb2N1bWVudExvYWRlcikKQEAgLTEyNywxNiArMTIzLDE3IEBAIHZvaWQgSW5zcGVj
dG9yQXBwbGljYXRpb25DYWNoZUFnZW50OjpnZXRGcmFtZXNXaXRoTWFuaWZlc3RzKEVycm9yU3Ry
aW5nJiBlcnJvclN0CiAgICAgICAgIGF1dG8mIGhvc3QgPSBkb2N1bWVudExvYWRlci0+YXBwbGlj
YXRpb25DYWNoZUhvc3QoKTsKICAgICAgICAgU3RyaW5nIG1hbmlmZXN0VVJMID0gaG9zdC5hcHBs
aWNhdGlvbkNhY2hlSW5mbygpLm1hbmlmZXN0LnN0cmluZygpOwogICAgICAgICBpZiAoIW1hbmlm
ZXN0VVJMLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgcmVzdWx0LT5hZGRJdGVtKEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkZyYW1lV2l0aE1hbmlmZXN0OjpjcmVhdGUo
KQorICAgICAgICAgICAgcmVzdWx0LT5hZGRJdGVtKFByb3RvY29sOjpBcHBsaWNhdGlvbkNhY2hl
OjpGcmFtZVdpdGhNYW5pZmVzdDo6Y3JlYXRlKCkKICAgICAgICAgICAgICAgICAuc2V0RnJhbWVJ
ZChwYWdlQWdlbnQtPmZyYW1lSWQoZnJhbWUpKQogICAgICAgICAgICAgICAgIC5zZXRNYW5pZmVz
dFVSTChtYW5pZmVzdFVSTCkKICAgICAgICAgICAgICAgICAuc2V0U3RhdHVzKHN0YXRpY19jYXN0
PGludD4oaG9zdC5zdGF0dXMoKSkpCiAgICAgICAgICAgICAgICAgLnJlbGVhc2UoKSk7CiAgICAg
ICAgIH0KICAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotRG9jdW1lbnRMb2FkZXIqIElu
c3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudDo6YXNzZXJ0RnJhbWVXaXRoRG9jdW1lbnRMb2Fk
ZXIoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGZyYW1lSWQpCitEb2N1
bWVudExvYWRlciogSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50Ojphc3NlcnRGcmFtZVdp
dGhEb2N1bWVudExvYWRlcihQcm90b2NvbDo6RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25z
dCBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpGcmFtZUlkJiBmcmFtZUlkKQogewogICAg
IGF1dG8qIHBhZ2VBZ2VudCA9IG1faW5zdHJ1bWVudGluZ0FnZW50cy5lbmFibGVkUGFnZUFnZW50
KCk7CiAgICAgaWYgKCFwYWdlQWdlbnQpIHsKQEAgLTE1MSwyOCArMTQ4LDMyIEBAIERvY3VtZW50
TG9hZGVyKiBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQ6OmFzc2VydEZyYW1lV2l0aERv
Y3VtZW50TG9hZGVyKEVyCiAgICAgcmV0dXJuIEluc3BlY3RvclBhZ2VBZ2VudDo6YXNzZXJ0RG9j
dW1lbnRMb2FkZXIoZXJyb3JTdHJpbmcsIGZyYW1lKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JBcHBs
aWNhdGlvbkNhY2hlQWdlbnQ6OmdldE1hbmlmZXN0Rm9yRnJhbWUoRXJyb3JTdHJpbmcmIGVycm9y
U3RyaW5nLCBjb25zdCBTdHJpbmcmIGZyYW1lSWQsIFN0cmluZyogbWFuaWZlc3RVUkwpCitFeHBl
Y3RlZDxTdHJpbmcsIFByb3RvY29sOjpFcnJvclN0cmluZz4gSW5zcGVjdG9yQXBwbGljYXRpb25D
YWNoZUFnZW50OjpnZXRNYW5pZmVzdEZvckZyYW1lKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6
Ok5ldHdvcms6OkZyYW1lSWQmIGZyYW1lSWQpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5n
IGVycm9yU3RyaW5nOworCiAgICAgRG9jdW1lbnRMb2FkZXIqIGRvY3VtZW50TG9hZGVyID0gYXNz
ZXJ0RnJhbWVXaXRoRG9jdW1lbnRMb2FkZXIoZXJyb3JTdHJpbmcsIGZyYW1lSWQpOwogICAgIGlm
ICghZG9jdW1lbnRMb2FkZXIpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAotICAgICptYW5pZmVzdFVSTCA9IGRvY3VtZW50TG9h
ZGVyLT5hcHBsaWNhdGlvbkNhY2hlSG9zdCgpLmFwcGxpY2F0aW9uQ2FjaGVJbmZvKCkubWFuaWZl
c3Quc3RyaW5nKCk7CisgICAgcmV0dXJuIGRvY3VtZW50TG9hZGVyLT5hcHBsaWNhdGlvbkNhY2hl
SG9zdCgpLmFwcGxpY2F0aW9uQ2FjaGVJbmZvKCkubWFuaWZlc3Quc3RyaW5nKCk7CiB9CiAKLXZv
aWQgSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50OjpnZXRBcHBsaWNhdGlvbkNhY2hlRm9y
RnJhbWUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGZyYW1lSWQsIFJl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcHBsaWNhdGlvbkNhY2hlOjpBcHBsaWNhdGlvbkNh
Y2hlPiYgYXBwbGljYXRpb25DYWNoZSkKK0V4cGVjdGVkPFJlZjxQcm90b2NvbDo6QXBwbGljYXRp
b25DYWNoZTo6QXBwbGljYXRpb25DYWNoZT4sIFByb3RvY29sOjpFcnJvclN0cmluZz4gSW5zcGVj
dG9yQXBwbGljYXRpb25DYWNoZUFnZW50OjpnZXRBcHBsaWNhdGlvbkNhY2hlRm9yRnJhbWUoY29u
c3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6RnJhbWVJZCYgZnJhbWVJZCkKIHsKKyAg
ICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBhdXRvKiBkb2N1bWVu
dExvYWRlciA9IGFzc2VydEZyYW1lV2l0aERvY3VtZW50TG9hZGVyKGVycm9yU3RyaW5nLCBmcmFt
ZUlkKTsKICAgICBpZiAoIWRvY3VtZW50TG9hZGVyKQotICAgICAgICByZXR1cm47CisgICAgICAg
IHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAgICBhdXRvJiBob3N0ID0g
ZG9jdW1lbnRMb2FkZXItPmFwcGxpY2F0aW9uQ2FjaGVIb3N0KCk7Ci0gICAgYXBwbGljYXRpb25D
YWNoZSA9IGJ1aWxkT2JqZWN0Rm9yQXBwbGljYXRpb25DYWNoZShob3N0LnJlc291cmNlTGlzdCgp
LCBob3N0LmFwcGxpY2F0aW9uQ2FjaGVJbmZvKCkpOworICAgIHJldHVybiBidWlsZE9iamVjdEZv
ckFwcGxpY2F0aW9uQ2FjaGUoaG9zdC5yZXNvdXJjZUxpc3QoKSwgaG9zdC5hcHBsaWNhdGlvbkNh
Y2hlSW5mbygpKTsKIH0KIAotUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2Fj
aGU6OkFwcGxpY2F0aW9uQ2FjaGU+IEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudDo6YnVp
bGRPYmplY3RGb3JBcHBsaWNhdGlvbkNhY2hlKGNvbnN0IFZlY3RvcjxBcHBsaWNhdGlvbkNhY2hl
SG9zdDo6UmVzb3VyY2VJbmZvPiYgYXBwbGljYXRpb25DYWNoZVJlc291cmNlcywgY29uc3QgQXBw
bGljYXRpb25DYWNoZUhvc3Q6OkNhY2hlSW5mbyYgYXBwbGljYXRpb25DYWNoZUluZm8pCitSZWY8
UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkFwcGxpY2F0aW9uQ2FjaGU+IEluc3BlY3RvckFw
cGxpY2F0aW9uQ2FjaGVBZ2VudDo6YnVpbGRPYmplY3RGb3JBcHBsaWNhdGlvbkNhY2hlKGNvbnN0
IFZlY3RvcjxBcHBsaWNhdGlvbkNhY2hlSG9zdDo6UmVzb3VyY2VJbmZvPiYgYXBwbGljYXRpb25D
YWNoZVJlc291cmNlcywgY29uc3QgQXBwbGljYXRpb25DYWNoZUhvc3Q6OkNhY2hlSW5mbyYgYXBw
bGljYXRpb25DYWNoZUluZm8pCiB7Ci0gICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFw
cGxpY2F0aW9uQ2FjaGU6OkFwcGxpY2F0aW9uQ2FjaGU6OmNyZWF0ZSgpCisgICAgcmV0dXJuIFBy
b3RvY29sOjpBcHBsaWNhdGlvbkNhY2hlOjpBcHBsaWNhdGlvbkNhY2hlOjpjcmVhdGUoKQogICAg
ICAgICAuc2V0TWFuaWZlc3RVUkwoYXBwbGljYXRpb25DYWNoZUluZm8ubWFuaWZlc3Quc3RyaW5n
KCkpCiAgICAgICAgIC5zZXRTaXplKGFwcGxpY2F0aW9uQ2FjaGVJbmZvLnNpemUpCiAgICAgICAg
IC5zZXRDcmVhdGlvblRpbWUoYXBwbGljYXRpb25DYWNoZUluZm8uY3JlYXRpb25UaW1lKQpAQCAt
MTgxLDE1ICsxODIsMTUgQEAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2Fj
aGU6OkFwcGxpY2F0aW9uQ2FjaGU+IEluc3BlY3RvckFwcGxpY2F0aW8KICAgICAgICAgLnJlbGVh
c2UoKTsKIH0KIAotUmVmPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXBwbGlj
YXRpb25DYWNoZTo6QXBwbGljYXRpb25DYWNoZVJlc291cmNlPj4gSW5zcGVjdG9yQXBwbGljYXRp
b25DYWNoZUFnZW50OjpidWlsZEFycmF5Rm9yQXBwbGljYXRpb25DYWNoZVJlc291cmNlcyhjb25z
dCBWZWN0b3I8QXBwbGljYXRpb25DYWNoZUhvc3Q6OlJlc291cmNlSW5mbz4mIGFwcGxpY2F0aW9u
Q2FjaGVSZXNvdXJjZXMpCitSZWY8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6QXBwbGljYXRpb25D
YWNoZTo6QXBwbGljYXRpb25DYWNoZVJlc291cmNlPj4gSW5zcGVjdG9yQXBwbGljYXRpb25DYWNo
ZUFnZW50OjpidWlsZEFycmF5Rm9yQXBwbGljYXRpb25DYWNoZVJlc291cmNlcyhjb25zdCBWZWN0
b3I8QXBwbGljYXRpb25DYWNoZUhvc3Q6OlJlc291cmNlSW5mbz4mIGFwcGxpY2F0aW9uQ2FjaGVS
ZXNvdXJjZXMpCiB7Ci0gICAgYXV0byByZXN1bHQgPSBKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZT46OmNy
ZWF0ZSgpOworICAgIGF1dG8gcmVzdWx0ID0gSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6QXBwbGlj
YXRpb25DYWNoZTo6QXBwbGljYXRpb25DYWNoZVJlc291cmNlPjo6Y3JlYXRlKCk7CiAgICAgZm9y
IChhdXRvJiBpbmZvIDogYXBwbGljYXRpb25DYWNoZVJlc291cmNlcykKICAgICAgICAgcmVzdWx0
LT5hZGRJdGVtKGJ1aWxkT2JqZWN0Rm9yQXBwbGljYXRpb25DYWNoZVJlc291cmNlKGluZm8pKTsK
ICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1SZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXBwbGlj
YXRpb25DYWNoZTo6QXBwbGljYXRpb25DYWNoZVJlc291cmNlPiBJbnNwZWN0b3JBcHBsaWNhdGlv
bkNhY2hlQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yQXBwbGljYXRpb25DYWNoZVJlc291cmNlKGNvbnN0
IEFwcGxpY2F0aW9uQ2FjaGVIb3N0OjpSZXNvdXJjZUluZm8mIHJlc291cmNlSW5mbykKK1JlZjxQ
cm90b2NvbDo6QXBwbGljYXRpb25DYWNoZTo6QXBwbGljYXRpb25DYWNoZVJlc291cmNlPiBJbnNw
ZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yQXBwbGljYXRpb25DYWNo
ZVJlc291cmNlKGNvbnN0IEFwcGxpY2F0aW9uQ2FjaGVIb3N0OjpSZXNvdXJjZUluZm8mIHJlc291
cmNlSW5mbykKIHsKICAgICBTdHJpbmdCdWlsZGVyIHR5cGVzOwogCkBAIC0yMDgsNyArMjA5LDcg
QEAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkFwcGxpY2F0aW9u
Q2FjaGVSZXNvdXJjZT4gSW5zcGVjdG9yQXAKICAgICBpZiAocmVzb3VyY2VJbmZvLmlzRXhwbGlj
aXQpCiAgICAgICAgIHR5cGVzLmFwcGVuZExpdGVyYWwoIkV4cGxpY2l0ICIpOwogCi0gICAgcmV0
dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkFwcGxpY2F0aW9uQ2Fj
aGVSZXNvdXJjZTo6Y3JlYXRlKCkKKyAgICByZXR1cm4gUHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2Fj
aGU6OkFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZTo6Y3JlYXRlKCkKICAgICAgICAgLnNldFVybChy
ZXNvdXJjZUluZm8ucmVzb3VyY2Uuc3RyaW5nKCkpCiAgICAgICAgIC5zZXRTaXplKHN0YXRpY19j
YXN0PGludD4ocmVzb3VyY2VJbmZvLnNpemUpKQogICAgICAgICAuc2V0VHlwZSh0eXBlcy50b1N0
cmluZygpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNw
ZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9h
Z2VudHMvSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50LmgKaW5kZXggNTE5ODhmNjE3ZGUx
MWVmMTE3MDhhN2IzOTJjZjBjZTE5NGI0ODZlYS4uODA3Njc5N2NhYjYwOWI5MjM2NzkzZTIyODFh
NTg5YzRjZDE0NjI1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50
cy9JbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5oCkBAIC0zOSwy
NSArMzksMjMgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgRnJhbWU7CiBjbGFzcyBQYWdl
OwogCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQogY2xhc3MgSW5zcGVjdG9yQXBwbGlj
YXRpb25DYWNoZUFnZW50IGZpbmFsIDogcHVibGljIEluc3BlY3RvckFnZW50QmFzZSwgcHVibGlj
IEluc3BlY3Rvcjo6QXBwbGljYXRpb25DYWNoZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7CiAg
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50KTsK
ICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBJbnNwZWN0b3JBcHBs
aWNhdGlvbkNhY2hlQWdlbnQoUGFnZUFnZW50Q29udGV4dCYpOwotICAgIH5JbnNwZWN0b3JBcHBs
aWNhdGlvbkNhY2hlQWdlbnQoKSBvdmVycmlkZTsKKyAgICB+SW5zcGVjdG9yQXBwbGljYXRpb25D
YWNoZUFnZW50KCk7CiAKICAgICAvLyBJbnNwZWN0b3JBZ2VudEJhc2UKLSAgICB2b2lkIGRpZENy
ZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kUm91dGVyKiwgSW5zcGVj
dG9yOjpCYWNrZW5kRGlzcGF0Y2hlciopIG92ZXJyaWRlOwotICAgIHZvaWQgd2lsbERlc3Ryb3lG
cm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKSBvdmVycmlkZTsK
KyAgICB2b2lkIGRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5k
Um91dGVyKiwgSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlciopOworICAgIHZvaWQgd2lsbERl
c3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKTsKIAog
ICAgIC8vIEFwcGxpY2F0aW9uQ2FjaGVCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIKLSAgICB2b2lk
IGVuYWJsZShFcnJvclN0cmluZyYpIG92ZXJyaWRlOwotICAgIHZvaWQgZGlzYWJsZShFcnJvclN0
cmluZyYpIG92ZXJyaWRlOwotICAgIHZvaWQgZ2V0RnJhbWVzV2l0aE1hbmlmZXN0cyhFcnJvclN0
cmluZyYsIFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFwcGxpY2F0
aW9uQ2FjaGU6OkZyYW1lV2l0aE1hbmlmZXN0Pj4mIHJlc3VsdCkgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBnZXRNYW5pZmVzdEZvckZyYW1lKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBmcmFtZUlk
LCBTdHJpbmcqIG1hbmlmZXN0VVJMKSBvdmVycmlkZTsKLSAgICB2b2lkIGdldEFwcGxpY2F0aW9u
Q2FjaGVGb3JGcmFtZShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgZnJhbWVJZCwgUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkFwcGxpY2F0aW9uQ2FjaGU+
Jikgb3ZlcnJpZGU7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lk
PiBlbmFibGUoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+
IGRpc2FibGUoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxK
U09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkZyYW1l
V2l0aE1hbmlmZXN0Pj4+IGdldEZyYW1lc1dpdGhNYW5pZmVzdHMoKTsKKyAgICBJbnNwZWN0b3I6
OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFN0cmluZz4gZ2V0TWFuaWZlc3RGb3JGcmFtZShjb25z
dCBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpGcmFtZUlkJik7CisgICAgSW5zcGVjdG9y
OjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXBwbGlj
YXRpb25DYWNoZTo6QXBwbGljYXRpb25DYWNoZT4+IGdldEFwcGxpY2F0aW9uQ2FjaGVGb3JGcmFt
ZShjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpGcmFtZUlkJik7CiAKICAgICAv
LyBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24KICAgICB2b2lkIHVwZGF0ZUFwcGxpY2F0aW9uQ2Fj
aGVTdGF0dXMoRnJhbWUqKTsKQEAgLTY4LDcgKzY2LDcgQEAgcHJpdmF0ZToKICAgICBSZWY8SlNP
Tjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcHBsaWNhdGlvbkNhY2hlOjpBcHBsaWNh
dGlvbkNhY2hlUmVzb3VyY2U+PiBidWlsZEFycmF5Rm9yQXBwbGljYXRpb25DYWNoZVJlc291cmNl
cyhjb25zdCBWZWN0b3I8QXBwbGljYXRpb25DYWNoZUhvc3Q6OlJlc291cmNlSW5mbz4mKTsKICAg
ICBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXBwbGljYXRpb25DYWNoZTo6QXBwbGljYXRpb25D
YWNoZVJlc291cmNlPiBidWlsZE9iamVjdEZvckFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZShjb25z
dCBBcHBsaWNhdGlvbkNhY2hlSG9zdDo6UmVzb3VyY2VJbmZvJik7CiAKLSAgICBEb2N1bWVudExv
YWRlciogYXNzZXJ0RnJhbWVXaXRoRG9jdW1lbnRMb2FkZXIoRXJyb3JTdHJpbmcmLCBjb25zdCBT
dHJpbmcmIGZyYW1lSWQpOworICAgIERvY3VtZW50TG9hZGVyKiBhc3NlcnRGcmFtZVdpdGhEb2N1
bWVudExvYWRlcihJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZyYsIGNvbnN0IEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OkZyYW1lSWQmKTsKIAogICAgIHN0ZDo6dW5pcXVlX3B0
cjxJbnNwZWN0b3I6OkFwcGxpY2F0aW9uQ2FjaGVGcm9udGVuZERpc3BhdGNoZXI+IG1fZnJvbnRl
bmREaXNwYXRjaGVyOwogICAgIFJlZlB0cjxJbnNwZWN0b3I6OkFwcGxpY2F0aW9uQ2FjaGVCYWNr
ZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ1BVUHJvZmlsZXJBZ2VudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNQVVByb2ZpbGVyQWdlbnQu
Y3BwCmluZGV4IGEwZTZmYzQ1MzE1MTZkOTg5MzIxMTViYjRiOWNhMmIyYzIzMDU2OTMuLjgyODEx
YmU1MWNmNDYzYzQxMTgwYmRlODA0NTgyMmQ0N2ZlMWU1MjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ1BVUHJvZmlsZXJBZ2VudC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDUFVQcm9maWxlckFn
ZW50LmNwcApAQCAtNTMsMTYgKzUzLDE1IEBAIHZvaWQgSW5zcGVjdG9yQ1BVUHJvZmlsZXJBZ2Vu
dDo6ZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEZyb250ZW5kUm91dGVyKiwgQmFjCiAKIHZv
aWQgSW5zcGVjdG9yQ1BVUHJvZmlsZXJBZ2VudDo6d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tl
bmQoRGlzY29ubmVjdFJlYXNvbikKIHsKLSAgICBFcnJvclN0cmluZyBpZ25vcmVkOwotICAgIHN0
b3BUcmFja2luZyhpZ25vcmVkKTsKKyAgICBzdG9wVHJhY2tpbmcoKTsKIAogICAgIG1faW5zdHJ1
bWVudGluZ0FnZW50cy5zZXRQZXJzaXN0ZW50Q1BVUHJvZmlsZXJBZ2VudChudWxscHRyKTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JDUFVQcm9maWxlckFnZW50OjpzdGFydFRyYWNraW5nKEVycm9yU3Ry
aW5nJikKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckNQVVByb2ZpbGVy
QWdlbnQ6OnN0YXJ0VHJhY2tpbmcoKQogewogICAgIGlmIChtX3RyYWNraW5nKQotICAgICAgICBy
ZXR1cm47CisgICAgICAgIHJldHVybiB7IH07CiAKICAgICBSZXNvdXJjZVVzYWdlVGhyZWFkOjph
ZGRPYnNlcnZlcih0aGlzLCBDUFUsIFt0aGlzXSAoY29uc3QgUmVzb3VyY2VVc2FnZURhdGEmIGRh
dGEpIHsKICAgICAgICAgY29sbGVjdFNhbXBsZShkYXRhKTsKQEAgLTcxLDE4ICs3MCwyMiBAQCB2
b2lkIEluc3BlY3RvckNQVVByb2ZpbGVyQWdlbnQ6OnN0YXJ0VHJhY2tpbmcoRXJyb3JTdHJpbmcm
KQogICAgIG1fdHJhY2tpbmcgPSB0cnVlOwogCiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPnRy
YWNraW5nU3RhcnQobV9lbnZpcm9ubWVudC5leGVjdXRpb25TdG9wd2F0Y2goKS5lbGFwc2VkVGlt
ZSgpLnNlY29uZHMoKSk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckNQ
VVByb2ZpbGVyQWdlbnQ6OnN0b3BUcmFja2luZyhFcnJvclN0cmluZyYpCitQcm90b2NvbDo6RXJy
b3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JDUFVQcm9maWxlckFnZW50OjpzdG9wVHJhY2tpbmco
KQogewogICAgIGlmICghbV90cmFja2luZykKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1
cm4geyB9OwogCiAgICAgUmVzb3VyY2VVc2FnZVRocmVhZDo6cmVtb3ZlT2JzZXJ2ZXIodGhpcyk7
CiAKICAgICBtX3RyYWNraW5nID0gZmFsc2U7CiAKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+
dHJhY2tpbmdDb21wbGV0ZShtX2Vudmlyb25tZW50LmV4ZWN1dGlvblN0b3B3YXRjaCgpLmVsYXBz
ZWRUaW1lKCkuc2Vjb25kcygpKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKIHN0YXRpYyBSZWY8
UHJvdG9jb2w6OkNQVVByb2ZpbGVyOjpUaHJlYWRJbmZvPiBidWlsZFRocmVhZEluZm8oY29uc3Qg
VGhyZWFkQ1BVSW5mbyYgdGhyZWFkKQpAQCAtMTEzLDcgKzExNiw3IEBAIHZvaWQgSW5zcGVjdG9y
Q1BVUHJvZmlsZXJBZ2VudDo6Y29sbGVjdFNhbXBsZShjb25zdCBSZXNvdXJjZVVzYWdlRGF0YSYg
ZGF0YSkKICAgICAgICAgLnJlbGVhc2UoKTsKIAogICAgIGlmICghZGF0YS5jcHVUaHJlYWRzLmlz
RW1wdHkoKSkgewotICAgICAgICBSZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6Q1BVUHJv
ZmlsZXI6OlRocmVhZEluZm8+PiB0aHJlYWRzID0gSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6Q1BV
UHJvZmlsZXI6OlRocmVhZEluZm8+OjpjcmVhdGUoKTsKKyAgICAgICAgYXV0byB0aHJlYWRzID0g
SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6Q1BVUHJvZmlsZXI6OlRocmVhZEluZm8+OjpjcmVhdGUo
KTsKICAgICAgICAgZm9yIChhdXRvJiB0aHJlYWRJbmZvIDogZGF0YS5jcHVUaHJlYWRzKQogICAg
ICAgICAgICAgdGhyZWFkcy0+YWRkSXRlbShidWlsZFRocmVhZEluZm8odGhyZWFkSW5mbykpOwog
ICAgICAgICBldmVudC0+c2V0VGhyZWFkcyhXVEZNb3ZlKHRocmVhZHMpKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ1BVUHJvZmlsZXJBZ2Vu
dC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDUFVQcm9maWxl
ckFnZW50LmgKaW5kZXggNGVlOGU5Nzg1M2Q3MTJkM2RhNjQzOWI5ODk3ZTg2NWE4OTZkYmZmZi4u
ZmU1ZTE4NWFiZGIxYzRmMmYxM2I0ZDhhMDdhOTJiZmQ3OWU2OWQwYiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDUFVQcm9maWxlckFnZW50LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDUFVQcm9maWxl
ckFnZW50LmgKQEAgLTM0LDIyICszNCwyMCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXR5
cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCiBjbGFzcyBJbnNwZWN0b3JDUFVQcm9maWxlckFn
ZW50IGZpbmFsIDogcHVibGljIEluc3BlY3RvckFnZW50QmFzZSwgcHVibGljIEluc3BlY3Rvcjo6
Q1BVUHJvZmlsZXJCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewogICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKEluc3BlY3RvckNQVVByb2ZpbGVyQWdlbnQpOwogICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOwogcHVibGljOgogICAgIEluc3BlY3RvckNQVVByb2ZpbGVyQWdlbnQoUGFnZUFnZW50
Q29udGV4dCYpOwotICAgIH5JbnNwZWN0b3JDUFVQcm9maWxlckFnZW50KCkgb3ZlcnJpZGU7Cisg
ICAgfkluc3BlY3RvckNQVVByb2ZpbGVyQWdlbnQoKTsKIAogICAgIC8vIEluc3BlY3RvckFnZW50
QmFzZQotICAgIHZvaWQgZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJv
bnRlbmRSb3V0ZXIqLCBJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyKikgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCB3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5l
Y3RSZWFzb24pIG92ZXJyaWRlOworICAgIHZvaWQgZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5k
KEluc3BlY3Rvcjo6RnJvbnRlbmRSb3V0ZXIqLCBJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVy
Kik7CisgICAgdm9pZCB3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkRp
c2Nvbm5lY3RSZWFzb24pOwogCiAgICAgLy8gQ1BVUHJvZmlsZXJCYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXIKLSAgICB2b2lkIHN0YXJ0VHJhY2tpbmcoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKLSAg
ICB2b2lkIHN0b3BUcmFja2luZyhFcnJvclN0cmluZyYpIG92ZXJyaWRlOworICAgIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc3RhcnRUcmFja2luZygpOworICAgIElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc3RvcFRyYWNraW5nKCk7CiAK
IHByaXZhdGU6CiAgICAgdm9pZCBjb2xsZWN0U2FtcGxlKGNvbnN0IFJlc291cmNlVXNhZ2VEYXRh
Jik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rv
ckNTU0FnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9y
Q1NTQWdlbnQuY3BwCmluZGV4IDU2NWViZTA4MmMwNzhiYjY2ODc3NDAzODllYjM3MmVlMTE5Yjc0
MWIuLjU5NGM4NDVjMThhMzI1ZDUwZDllNWUwMzgyMTA5ZjkyMmIzYmNkMjEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ1NTQWdlbnQuY3Bw
CkBAIC05MiwxMCArOTIsNyBAQCBzdGF0aWMgdW5zaWduZWQgY29tcHV0ZVBzZXVkb0NsYXNzTWFz
ayhjb25zdCBKU09OOjpBcnJheSYgcHNldWRvQ2xhc3NBcnJheSkKIAogICAgIHVuc2lnbmVkIHJl
c3VsdCA9IFBzZXVkb0NsYXNzTm9uZTsKICAgICBmb3IgKGF1dG8mIHBzZXVkb0NsYXNzVmFsdWUg
OiBwc2V1ZG9DbGFzc0FycmF5KSB7Ci0gICAgICAgIFN0cmluZyBwc2V1ZG9DbGFzczsKLSAgICAg
ICAgYm9vbCBzdWNjZXNzID0gcHNldWRvQ2xhc3NWYWx1ZS0+YXNTdHJpbmcocHNldWRvQ2xhc3Mp
OwotICAgICAgICBpZiAoIXN1Y2Nlc3MpCi0gICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
YXV0byBwc2V1ZG9DbGFzcyA9IHBzZXVkb0NsYXNzVmFsdWUtPmFzU3RyaW5nKCk7CiAgICAgICAg
IGlmIChwc2V1ZG9DbGFzcyA9PSBhY3RpdmUpCiAgICAgICAgICAgICByZXN1bHQgfD0gUHNldWRv
Q2xhc3NBY3RpdmU7CiAgICAgICAgIGVsc2UgaWYgKHBzZXVkb0NsYXNzID09IGhvdmVyKQpAQCAt
MzEyLDggKzMwOSw3IEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmRpZENyZWF0ZUZyb250ZW5k
QW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kUm91dGVyKiwKIAogdm9pZCBJbnNwZWN0b3JD
U1NBZ2VudDo6d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25u
ZWN0UmVhc29uKQogewotICAgIFN0cmluZyB1bnVzZWQ7Ci0gICAgZGlzYWJsZSh1bnVzZWQpOwor
ICAgIGRpc2FibGUoKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6cmVzZXQoKQpAQCAt
MzI3LDEwICszMjMsMTAgQEAgdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6cmVzZXQoKQogICAgIHJl
c2V0UHNldWRvU3RhdGVzKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmVuYWJsZShF
cnJvclN0cmluZyYpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JDU1NB
Z2VudDo6ZW5hYmxlKCkKIHsKICAgICBpZiAobV9pbnN0cnVtZW50aW5nQWdlbnRzLmVuYWJsZWRD
U1NBZ2VudCgpID09IHRoaXMpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHsgfTsK
IAogICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy5zZXRFbmFibGVkQ1NTQWdlbnQodGhpcyk7CiAK
QEAgLTMzOCwxMyArMzM0LDE3IEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmVuYWJsZShFcnJv
clN0cmluZyYpCiAgICAgICAgIGZvciAoYXV0byogZG9jdW1lbnQgOiBkb21BZ2VudC0+ZG9jdW1l
bnRzKCkpCiAgICAgICAgICAgICBhY3RpdmVTdHlsZVNoZWV0c1VwZGF0ZWQoKmRvY3VtZW50KTsK
ICAgICB9CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckNTU0FnZW50Ojpk
aXNhYmxlKEVycm9yU3RyaW5nJikKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3Bl
Y3RvckNTU0FnZW50OjpkaXNhYmxlKCkKIHsKICAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMuc2V0
RW5hYmxlZENTU0FnZW50KG51bGxwdHIpOwogCiAgICAgcmVzZXQoKTsKKworICAgIHJldHVybiB7
IH07CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmRvY3VtZW50RGV0YWNoZWQoRG9jdW1l
bnQmIGRvY3VtZW50KQpAQCAtMzg3LDcgKzM4Nyw3IEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6
OnNldEFjdGl2ZVN0eWxlU2hlZXRzRm9yRG9jdW1lbnQoRG9jdW1lbnQmIGRvY3VtZW50LCBWZWN0
CiAgICAgICAgIHByZXZpb3VzbHlLbm93bkFjdGl2ZVN0eWxlU2hlZXRzLnJlbW92ZShjc3NTdHls
ZVNoZWV0KTsKICAgICAgICAgUmVmUHRyPEluc3BlY3RvclN0eWxlU2hlZXQ+IGluc3BlY3RvclN0
eWxlU2hlZXQgPSBtX2Nzc1N0eWxlU2hlZXRUb0luc3BlY3RvclN0eWxlU2hlZXQuZ2V0KGNzc1N0
eWxlU2hlZXQpOwogICAgICAgICBpZiAobV9pZFRvSW5zcGVjdG9yU3R5bGVTaGVldC5jb250YWlu
cyhpbnNwZWN0b3JTdHlsZVNoZWV0LT5pZCgpKSkgewotICAgICAgICAgICAgU3RyaW5nIGlkID0g
dW5iaW5kU3R5bGVTaGVldChpbnNwZWN0b3JTdHlsZVNoZWV0LmdldCgpKTsKKyAgICAgICAgICAg
IGF1dG8gaWQgPSB1bmJpbmRTdHlsZVNoZWV0KGluc3BlY3RvclN0eWxlU2hlZXQuZ2V0KCkpOwog
ICAgICAgICAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPnN0eWxlU2hlZXRSZW1vdmVkKGlkKTsK
ICAgICAgICAgfQogICAgIH0KQEAgLTM5Niw3ICszOTYsOCBAQCB2b2lkIEluc3BlY3RvckNTU0Fn
ZW50OjpzZXRBY3RpdmVTdHlsZVNoZWV0c0ZvckRvY3VtZW50KERvY3VtZW50JiBkb2N1bWVudCwg
VmVjdAogICAgICAgICBwcmV2aW91c2x5S25vd25BY3RpdmVTdHlsZVNoZWV0cy5hZGQoY3NzU3R5
bGVTaGVldCk7CiAgICAgICAgIGlmICghbV9jc3NTdHlsZVNoZWV0VG9JbnNwZWN0b3JTdHlsZVNo
ZWV0LmNvbnRhaW5zKGNzc1N0eWxlU2hlZXQpKSB7CiAgICAgICAgICAgICBJbnNwZWN0b3JTdHls
ZVNoZWV0KiBpbnNwZWN0b3JTdHlsZVNoZWV0ID0gYmluZFN0eWxlU2hlZXQoY3NzU3R5bGVTaGVl
dCk7Ci0gICAgICAgICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+c3R5bGVTaGVldEFkZGVkKGlu
c3BlY3RvclN0eWxlU2hlZXQtPmJ1aWxkT2JqZWN0Rm9yU3R5bGVTaGVldEluZm8oKSk7CisgICAg
ICAgICAgICBpZiAoYXV0byBoZWFkZXIgPSBpbnNwZWN0b3JTdHlsZVNoZWV0LT5idWlsZE9iamVj
dEZvclN0eWxlU2hlZXRJbmZvKCkpCisgICAgICAgICAgICAgICAgbV9mcm9udGVuZERpc3BhdGNo
ZXItPnN0eWxlU2hlZXRBZGRlZChoZWFkZXIucmVsZWFzZU5vbk51bGwoKSk7CiAgICAgICAgIH0K
ICAgICB9CiB9CkBAIC00MTAsNyArNDExLDcgQEAgYm9vbCBJbnNwZWN0b3JDU1NBZ2VudDo6Zm9y
Y2VQc2V1ZG9TdGF0ZShjb25zdCBFbGVtZW50JiBlbGVtZW50LCBDU1NTZWxlY3Rvcjo6UHMKICAg
ICBpZiAoIWRvbUFnZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpbnQgbm9kZUlk
ID0gZG9tQWdlbnQtPmJvdW5kTm9kZUlkKCZlbGVtZW50KTsKKyAgICBhdXRvIG5vZGVJZCA9IGRv
bUFnZW50LT5ib3VuZE5vZGVJZCgmZWxlbWVudCk7CiAgICAgaWYgKCFub2RlSWQpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIApAQCAtNDI5LDM3ICs0MzAsMzcgQEAgYm9vbCBJbnNwZWN0b3JDU1NB
Z2VudDo6Zm9yY2VQc2V1ZG9TdGF0ZShjb25zdCBFbGVtZW50JiBlbGVtZW50LCBDU1NTZWxlY3Rv
cjo6UHMKICAgICB9CiB9CiAKLXN0YXRpYyBPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpD
U1M6OlBzZXVkb0lkPiBwcm90b2NvbFZhbHVlRm9yUHNldWRvSWQoUHNldWRvSWQgcHNldWRvSWQp
CitzdGF0aWMgT3B0aW9uYWw8UHJvdG9jb2w6OkNTUzo6UHNldWRvSWQ+IHByb3RvY29sVmFsdWVG
b3JQc2V1ZG9JZChQc2V1ZG9JZCBwc2V1ZG9JZCkKIHsKICAgICBzd2l0Y2ggKHBzZXVkb0lkKSB7
CiAgICAgY2FzZSBQc2V1ZG9JZDo6Rmlyc3RMaW5lOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9y
OjpQcm90b2NvbDo6Q1NTOjpQc2V1ZG9JZDo6Rmlyc3RMaW5lOworICAgICAgICByZXR1cm4gUHJv
dG9jb2w6OkNTUzo6UHNldWRvSWQ6OkZpcnN0TGluZTsKICAgICBjYXNlIFBzZXVkb0lkOjpGaXJz
dExldHRlcjoKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6UHNldWRv
SWQ6OkZpcnN0TGV0dGVyOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OkNTUzo6UHNldWRvSWQ6
OkZpcnN0TGV0dGVyOwogICAgIGNhc2UgUHNldWRvSWQ6Ok1hcmtlcjoKLSAgICAgICAgcmV0dXJu
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6UHNldWRvSWQ6Ok1hcmtlcjsKKyAgICAgICAgcmV0
dXJuIFByb3RvY29sOjpDU1M6OlBzZXVkb0lkOjpNYXJrZXI7CiAgICAgY2FzZSBQc2V1ZG9JZDo6
QmVmb3JlOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpQc2V1ZG9J
ZDo6QmVmb3JlOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OkNTUzo6UHNldWRvSWQ6OkJlZm9y
ZTsKICAgICBjYXNlIFBzZXVkb0lkOjpBZnRlcjoKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkNTUzo6UHNldWRvSWQ6OkFmdGVyOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6
OkNTUzo6UHNldWRvSWQ6OkFmdGVyOwogICAgIGNhc2UgUHNldWRvSWQ6OlNlbGVjdGlvbjoKLSAg
ICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6UHNldWRvSWQ6OlNlbGVjdGlv
bjsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpDU1M6OlBzZXVkb0lkOjpTZWxlY3Rpb247CiAg
ICAgY2FzZSBQc2V1ZG9JZDo6SGlnaGxpZ2h0OgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQ
cm90b2NvbDo6Q1NTOjpQc2V1ZG9JZDo6SGlnaGxpZ2h0OworICAgICAgICByZXR1cm4gUHJvdG9j
b2w6OkNTUzo6UHNldWRvSWQ6OkhpZ2hsaWdodDsKICAgICBjYXNlIFBzZXVkb0lkOjpTY3JvbGxi
YXI6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlBzZXVkb0lkOjpT
Y3JvbGxiYXI7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6Q1NTOjpQc2V1ZG9JZDo6U2Nyb2xs
YmFyOwogICAgIGNhc2UgUHNldWRvSWQ6OlNjcm9sbGJhclRodW1iOgotICAgICAgICByZXR1cm4g
SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpQc2V1ZG9JZDo6U2Nyb2xsYmFyVGh1bWI7CisgICAg
ICAgIHJldHVybiBQcm90b2NvbDo6Q1NTOjpQc2V1ZG9JZDo6U2Nyb2xsYmFyVGh1bWI7CiAgICAg
Y2FzZSBQc2V1ZG9JZDo6U2Nyb2xsYmFyQnV0dG9uOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9y
OjpQcm90b2NvbDo6Q1NTOjpQc2V1ZG9JZDo6U2Nyb2xsYmFyQnV0dG9uOworICAgICAgICByZXR1
cm4gUHJvdG9jb2w6OkNTUzo6UHNldWRvSWQ6OlNjcm9sbGJhckJ1dHRvbjsKICAgICBjYXNlIFBz
ZXVkb0lkOjpTY3JvbGxiYXJUcmFjazoKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkNTUzo6UHNldWRvSWQ6OlNjcm9sbGJhclRyYWNrOworICAgICAgICByZXR1cm4gUHJvdG9j
b2w6OkNTUzo6UHNldWRvSWQ6OlNjcm9sbGJhclRyYWNrOwogICAgIGNhc2UgUHNldWRvSWQ6OlNj
cm9sbGJhclRyYWNrUGllY2U6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpD
U1M6OlBzZXVkb0lkOjpTY3JvbGxiYXJUcmFja1BpZWNlOworICAgICAgICByZXR1cm4gUHJvdG9j
b2w6OkNTUzo6UHNldWRvSWQ6OlNjcm9sbGJhclRyYWNrUGllY2U7CiAgICAgY2FzZSBQc2V1ZG9J
ZDo6U2Nyb2xsYmFyQ29ybmVyOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6
Q1NTOjpQc2V1ZG9JZDo6U2Nyb2xsYmFyQ29ybmVyOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6
OkNTUzo6UHNldWRvSWQ6OlNjcm9sbGJhckNvcm5lcjsKICAgICBjYXNlIFBzZXVkb0lkOjpSZXNp
emVyOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpQc2V1ZG9JZDo6
UmVzaXplcjsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpDU1M6OlBzZXVkb0lkOjpSZXNpemVy
OwogCiAgICAgZGVmYXVsdDoKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC00Njcs
MzYgKzQ2OCwzNyBAQCBzdGF0aWMgT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpQ
c2V1ZG9JZD4gcHJvdG9jb2xWYWx1ZUZvclBzZXVkb0lkKFBzZQogICAgIH0KIH0KIAotdm9pZCBJ
bnNwZWN0b3JDU1NBZ2VudDo6Z2V0TWF0Y2hlZFN0eWxlc0Zvck5vZGUoRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBpbnQgbm9kZUlkLCBjb25zdCBib29sKiBpbmNsdWRlUHNldWRvLCBjb25zdCBi
b29sKiBpbmNsdWRlSW5oZXJpdGVkLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpDU1M6OlJ1bGVNYXRjaD4+JiBtYXRjaGVkQ1NTUnVsZXMsIFJlZlB0cjxKU09OOjpB
cnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6UHNldWRvSWRNYXRjaGVzPj4mIHBzZXVk
b0lkTWF0Y2hlcywgUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NT
OjpJbmhlcml0ZWRTdHlsZUVudHJ5Pj4mIGluaGVyaXRlZEVudHJpZXMpCitQcm90b2NvbDo6RXJy
b3JTdHJpbmdPcjxzdGQ6OnR1cGxlPFJlZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpDU1M6
OlJ1bGVNYXRjaD4+LCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6Q1NTOjpQc2V1ZG9J
ZE1hdGNoZXM+PiwgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkNTUzo6SW5oZXJpdGVk
U3R5bGVFbnRyeT4+Pj4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldE1hdGNoZWRTdHlsZXNGb3JOb2Rl
KFByb3RvY29sOjpET006Ok5vZGVJZCBub2RlSWQsIE9wdGlvbmFsPGJvb2w+JiYgaW5jbHVkZVBz
ZXVkbywgT3B0aW9uYWw8Ym9vbD4mJiBpbmNsdWRlSW5oZXJpdGVkKQogeworICAgIFByb3RvY29s
OjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBlbGVt
ZW50Rm9ySWQoZXJyb3JTdHJpbmcsIG5vZGVJZCk7CiAgICAgaWYgKCFlbGVtZW50KQotICAgICAg
ICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAK
ICAgICBFbGVtZW50KiBvcmlnaW5hbEVsZW1lbnQgPSBlbGVtZW50OwogICAgIFBzZXVkb0lkIGVs
ZW1lbnRQc2V1ZG9JZCA9IGVsZW1lbnQtPnBzZXVkb0lkKCk7CiAgICAgaWYgKGVsZW1lbnRQc2V1
ZG9JZCAhPSBQc2V1ZG9JZDo6Tm9uZSkgewogICAgICAgICBlbGVtZW50ID0gZG93bmNhc3Q8UHNl
dWRvRWxlbWVudD4oKmVsZW1lbnQpLmhvc3RFbGVtZW50KCk7Ci0gICAgICAgIGlmICghZWxlbWVu
dCkgewotICAgICAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWlzc2luZyBwYXJlbnQgb2YgcHNldWRv
LWVsZW1lbnQgbm9kZSBmb3IgZ2l2ZW4gbm9kZUlkIl9zOwotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB9CisgICAgICAgIGlmICghZWxlbWVudCkKKyAgICAgICAgICAgIHJldHVybiBtYWtl
VW5leHBlY3RlZCgiTWlzc2luZyBwYXJlbnQgb2YgcHNldWRvLWVsZW1lbnQgbm9kZSBmb3IgZ2l2
ZW4gbm9kZUlkIl9zKTsKICAgICB9CiAKICAgICAvLyBNYXRjaGVkIHJ1bGVzLgogICAgIGF1dG8m
IHN0eWxlUmVzb2x2ZXIgPSBlbGVtZW50LT5zdHlsZVJlc29sdmVyKCk7CiAgICAgYXV0byBtYXRj
aGVkUnVsZXMgPSBzdHlsZVJlc29sdmVyLnBzZXVkb1N0eWxlUnVsZXNGb3JFbGVtZW50KGVsZW1l
bnQsIGVsZW1lbnRQc2V1ZG9JZCwgU3R5bGU6OlJlc29sdmVyOjpBbGxDU1NSdWxlcyk7Ci0gICAg
bWF0Y2hlZENTU1J1bGVzID0gYnVpbGRBcnJheUZvck1hdGNoZWRSdWxlTGlzdChtYXRjaGVkUnVs
ZXMsIHN0eWxlUmVzb2x2ZXIsICplbGVtZW50LCBlbGVtZW50UHNldWRvSWQpOworICAgIGF1dG8g
bWF0Y2hlZENTU1J1bGVzID0gYnVpbGRBcnJheUZvck1hdGNoZWRSdWxlTGlzdChtYXRjaGVkUnVs
ZXMsIHN0eWxlUmVzb2x2ZXIsICplbGVtZW50LCBlbGVtZW50UHNldWRvSWQpOworICAgIFJlZlB0
cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpDU1M6OlBzZXVkb0lkTWF0Y2hlcz4+IHBzZXVkb0Vs
ZW1lbnRzOworICAgIFJlZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpDU1M6OkluaGVyaXRl
ZFN0eWxlRW50cnk+PiBpbmhlcml0ZWQ7CiAKICAgICBpZiAoIW9yaWdpbmFsRWxlbWVudC0+aXNQ
c2V1ZG9FbGVtZW50KCkpIHsKLSAgICAgICAgLy8gUHNldWRvIGVsZW1lbnRzLgogICAgICAgICBp
ZiAoIWluY2x1ZGVQc2V1ZG8gfHwgKmluY2x1ZGVQc2V1ZG8pIHsKLSAgICAgICAgICAgIGF1dG8g
cHNldWRvRWxlbWVudHMgPSBKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6
UHNldWRvSWRNYXRjaGVzPjo6Y3JlYXRlKCk7CisgICAgICAgICAgICBwc2V1ZG9FbGVtZW50cyA9
IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkNTUzo6UHNldWRvSWRNYXRjaGVzPjo6Y3JlYXRlKCk7
CiAgICAgICAgICAgICBmb3IgKFBzZXVkb0lkIHBzZXVkb0lkID0gUHNldWRvSWQ6OkZpcnN0UHVi
bGljUHNldWRvSWQ7IHBzZXVkb0lkIDwgUHNldWRvSWQ6OkFmdGVyTGFzdEludGVybmFsUHNldWRv
SWQ7IHBzZXVkb0lkID0gc3RhdGljX2Nhc3Q8UHNldWRvSWQ+KHN0YXRpY19jYXN0PHVuc2lnbmVk
Pihwc2V1ZG9JZCkgKyAxKSkgewogICAgICAgICAgICAgICAgIGlmIChhdXRvIHByb3RvY29sUHNl
dWRvSWQgPSBwcm90b2NvbFZhbHVlRm9yUHNldWRvSWQocHNldWRvSWQpKSB7CiAgICAgICAgICAg
ICAgICAgICAgIGF1dG8gbWF0Y2hlZFJ1bGVzID0gc3R5bGVSZXNvbHZlci5wc2V1ZG9TdHlsZVJ1
bGVzRm9yRWxlbWVudChlbGVtZW50LCBwc2V1ZG9JZCwgU3R5bGU6OlJlc29sdmVyOjpBbGxDU1NS
dWxlcyk7CiAgICAgICAgICAgICAgICAgICAgIGlmICghbWF0Y2hlZFJ1bGVzLmlzRW1wdHkoKSkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBtYXRjaGVzID0gSW5zcGVjdG9yOjpQcm90
b2NvbDo6Q1NTOjpQc2V1ZG9JZE1hdGNoZXM6OmNyZWF0ZSgpCisgICAgICAgICAgICAgICAgICAg
ICAgICBhdXRvIG1hdGNoZXMgPSBQcm90b2NvbDo6Q1NTOjpQc2V1ZG9JZE1hdGNoZXM6OmNyZWF0
ZSgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNldFBzZXVkb0lkKHByb3RvY29sUHNl
dWRvSWQudmFsdWUoKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0TWF0Y2hlcyhi
dWlsZEFycmF5Rm9yTWF0Y2hlZFJ1bGVMaXN0KG1hdGNoZWRSdWxlcywgc3R5bGVSZXNvbHZlciwg
KmVsZW1lbnQsIHBzZXVkb0lkKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVsZWFz
ZSgpOwpAQCAtNTA0LDY2ICs1MDYsNjYgQEAgdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0TWF0
Y2hlZFN0eWxlc0Zvck5vZGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgbm8KICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgcHNldWRvSWRNYXRjaGVzID0gV1RGTW92ZShwc2V1ZG9FbGVtZW50cyk7CiAgICAg
ICAgIH0KIAotICAgICAgICAvLyBJbmhlcml0ZWQgc3R5bGVzLgogICAgICAgICBpZiAoIWluY2x1
ZGVJbmhlcml0ZWQgfHwgKmluY2x1ZGVJbmhlcml0ZWQpIHsKLSAgICAgICAgICAgIGF1dG8gZW50
cmllcyA9IEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpJbmhlcml0ZWRT
dHlsZUVudHJ5Pjo6Y3JlYXRlKCk7CisgICAgICAgICAgICBpbmhlcml0ZWQgPSBKU09OOjpBcnJh
eU9mPFByb3RvY29sOjpDU1M6OkluaGVyaXRlZFN0eWxlRW50cnk+OjpjcmVhdGUoKTsKICAgICAg
ICAgICAgIGZvciAoYXV0byYgYW5jZXN0b3IgOiBhbmNlc3RvcnNPZlR5cGU8RWxlbWVudD4oKmVs
ZW1lbnQpKSB7CiAgICAgICAgICAgICAgICAgYXV0byYgcGFyZW50U3R5bGVSZXNvbHZlciA9IGFu
Y2VzdG9yLnN0eWxlUmVzb2x2ZXIoKTsKICAgICAgICAgICAgICAgICBhdXRvIHBhcmVudE1hdGNo
ZWRSdWxlcyA9IHBhcmVudFN0eWxlUmVzb2x2ZXIuc3R5bGVSdWxlc0ZvckVsZW1lbnQoJmFuY2Vz
dG9yLCBTdHlsZTo6UmVzb2x2ZXI6OkFsbENTU1J1bGVzKTsKLSAgICAgICAgICAgICAgICBhdXRv
IGVudHJ5ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpJbmhlcml0ZWRTdHlsZUVudHJ5Ojpj
cmVhdGUoKQorICAgICAgICAgICAgICAgIGF1dG8gZW50cnkgPSBQcm90b2NvbDo6Q1NTOjpJbmhl
cml0ZWRTdHlsZUVudHJ5OjpjcmVhdGUoKQogICAgICAgICAgICAgICAgICAgICAuc2V0TWF0Y2hl
ZENTU1J1bGVzKGJ1aWxkQXJyYXlGb3JNYXRjaGVkUnVsZUxpc3QocGFyZW50TWF0Y2hlZFJ1bGVz
LCBzdHlsZVJlc29sdmVyLCBhbmNlc3RvciwgUHNldWRvSWQ6Ok5vbmUpKQogICAgICAgICAgICAg
ICAgICAgICAucmVsZWFzZSgpOwogICAgICAgICAgICAgICAgIGlmIChpczxTdHlsZWRFbGVtZW50
PihhbmNlc3RvcikgJiYgZG93bmNhc3Q8U3R5bGVkRWxlbWVudD4oYW5jZXN0b3IpLmNzc29tU3R5
bGUoKS5sZW5ndGgoKSkgewogICAgICAgICAgICAgICAgICAgICBhdXRvJiBzdHlsZVNoZWV0ID0g
YXNJbnNwZWN0b3JTdHlsZVNoZWV0KGRvd25jYXN0PFN0eWxlZEVsZW1lbnQ+KGFuY2VzdG9yKSk7
CiAgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5zZXRJbmxpbmVTdHlsZShzdHlsZVNoZWV0LmJ1
aWxkT2JqZWN0Rm9yU3R5bGUoc3R5bGVTaGVldC5zdHlsZUZvcklkKEluc3BlY3RvckNTU0lkKHN0
eWxlU2hlZXQuaWQoKSwgMCkpKSk7CiAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgZW50cmllcy0+YWRkSXRlbShXVEZNb3ZlKGVudHJ5KSk7CisgICAgICAgICAgICAgICAgaW5o
ZXJpdGVkLT5hZGRJdGVtKFdURk1vdmUoZW50cnkpKTsKICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgaW5oZXJpdGVkRW50cmllcyA9IFdURk1vdmUoZW50cmllcyk7CiAgICAgICAgIH0KICAg
ICB9CisKKyAgICByZXR1cm4geyB7IFdURk1vdmUobWF0Y2hlZENTU1J1bGVzKSwgV1RGTW92ZShw
c2V1ZG9FbGVtZW50cyksIFdURk1vdmUoaW5oZXJpdGVkKSB9IH07CiB9CiAKLXZvaWQgSW5zcGVj
dG9yQ1NTQWdlbnQ6OmdldElubGluZVN0eWxlc0Zvck5vZGUoRXJyb3JTdHJpbmcmIGVycm9yU3Ry
aW5nLCBpbnQgbm9kZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHls
ZT4mIGlubGluZVN0eWxlLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHls
ZT4mIGF0dHJpYnV0ZXNTdHlsZSkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHN0ZDo6dHVwbGU8
UmVmUHRyPFByb3RvY29sOjpDU1M6OkNTU1N0eWxlPiAvKiBpbmxpbmVTdHlsZSAqLywgUmVmUHRy
PFByb3RvY29sOjpDU1M6OkNTU1N0eWxlPiAvKiBhdHRyaWJ1dGVzU3R5bGUgKi8+PiBJbnNwZWN0
b3JDU1NBZ2VudDo6Z2V0SW5saW5lU3R5bGVzRm9yTm9kZShQcm90b2NvbDo6RE9NOjpOb2RlSWQg
bm9kZUlkKQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAg
IGF1dG8qIGVsZW1lbnQgPSBlbGVtZW50Rm9ySWQoZXJyb3JTdHJpbmcsIG5vZGVJZCk7CiAgICAg
aWYgKCFpczxTdHlsZWRFbGVtZW50PihlbGVtZW50KSkKLSAgICAgICAgcmV0dXJuOworICAgICAg
ICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCiAgICAgYXV0byYgc3R5bGVk
RWxlbWVudCA9IGRvd25jYXN0PFN0eWxlZEVsZW1lbnQ+KCplbGVtZW50KTsKICAgICBhdXRvJiBz
dHlsZVNoZWV0ID0gYXNJbnNwZWN0b3JTdHlsZVNoZWV0KHN0eWxlZEVsZW1lbnQpOwotICAgIGlu
bGluZVN0eWxlID0gc3R5bGVTaGVldC5idWlsZE9iamVjdEZvclN0eWxlKCZzdHlsZWRFbGVtZW50
LmNzc29tU3R5bGUoKSk7Ci0gICAgaWYgKGF1dG8gYXR0cmlidXRlcyA9IGJ1aWxkT2JqZWN0Rm9y
QXR0cmlidXRlc1N0eWxlKHN0eWxlZEVsZW1lbnQpKQotICAgICAgICBhdHRyaWJ1dGVzU3R5bGUg
PSBXVEZNb3ZlKGF0dHJpYnV0ZXMpOwotICAgIGVsc2UKLSAgICAgICAgYXR0cmlidXRlc1N0eWxl
ID0gbnVsbHB0cjsKKyAgICByZXR1cm4geyB7IHN0eWxlU2hlZXQuYnVpbGRPYmplY3RGb3JTdHls
ZSgmc3R5bGVkRWxlbWVudC5jc3NvbVN0eWxlKCkpLCBidWlsZE9iamVjdEZvckF0dHJpYnV0ZXNT
dHlsZShzdHlsZWRFbGVtZW50KSB9IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6Omdl
dENvbXB1dGVkU3R5bGVGb3JOb2RlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJ
ZCwgUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NDb21w
dXRlZFN0eWxlUHJvcGVydHk+PiYgc3R5bGUpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8
SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6Q1NTOjpDU1NDb21wdXRlZFN0eWxlUHJvcGVydHk+Pj4g
SW5zcGVjdG9yQ1NTQWdlbnQ6OmdldENvbXB1dGVkU3R5bGVGb3JOb2RlKFByb3RvY29sOjpET006
Ok5vZGVJZCBub2RlSWQpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5n
OworCiAgICAgYXV0byogZWxlbWVudCA9IGVsZW1lbnRGb3JJZChlcnJvclN0cmluZywgbm9kZUlk
KTsKICAgICBpZiAoIWVsZW1lbnQpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1h
a2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgIGF1dG8gY29tcHV0ZWRTdHlsZUluZm8g
PSBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb246OmNyZWF0ZSgqZWxlbWVudCwgdHJ1ZSk7CiAg
ICAgYXV0byBpbnNwZWN0b3JTdHlsZSA9IEluc3BlY3RvclN0eWxlOjpjcmVhdGUoSW5zcGVjdG9y
Q1NTSWQoKSwgV1RGTW92ZShjb21wdXRlZFN0eWxlSW5mbyksIG51bGxwdHIpOwotICAgIHN0eWxl
ID0gaW5zcGVjdG9yU3R5bGUtPmJ1aWxkQXJyYXlGb3JDb21wdXRlZFN0eWxlKCk7CisgICAgcmV0
dXJuIGluc3BlY3RvclN0eWxlLT5idWlsZEFycmF5Rm9yQ29tcHV0ZWRTdHlsZSgpOwogfQogCi12
b2lkIEluc3BlY3RvckNTU0FnZW50OjpnZXRBbGxTdHlsZVNoZWV0cyhFcnJvclN0cmluZyYsIFJl
ZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGVTaGVl
dEhlYWRlcj4+JiBzdHlsZUluZm9zKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEpTT046
OkFycmF5T2Y8UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGVTaGVldEhlYWRlcj4+PiBJbnNwZWN0b3JD
U1NBZ2VudDo6Z2V0QWxsU3R5bGVTaGVldHMoKQogewotICAgIHN0eWxlSW5mb3MgPSBKU09OOjpB
cnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGVTaGVldEhlYWRlcj46OmNy
ZWF0ZSgpOworICAgIGF1dG8gaGVhZGVycyA9IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkNTUzo6
Q1NTU3R5bGVTaGVldEhlYWRlcj46OmNyZWF0ZSgpOwogCiAgICAgVmVjdG9yPEluc3BlY3RvclN0
eWxlU2hlZXQqPiBpbnNwZWN0b3JTdHlsZVNoZWV0czsKICAgICBjb2xsZWN0QWxsU3R5bGVTaGVl
dHMoaW5zcGVjdG9yU3R5bGVTaGVldHMpOwotICAgIGZvciAoYXV0byogaW5zcGVjdG9yU3R5bGVT
aGVldCA6IGluc3BlY3RvclN0eWxlU2hlZXRzKQotICAgICAgICBzdHlsZUluZm9zLT5hZGRJdGVt
KGluc3BlY3RvclN0eWxlU2hlZXQtPmJ1aWxkT2JqZWN0Rm9yU3R5bGVTaGVldEluZm8oKSk7Cisg
ICAgZm9yIChhdXRvKiBpbnNwZWN0b3JTdHlsZVNoZWV0IDogaW5zcGVjdG9yU3R5bGVTaGVldHMp
IHsKKyAgICAgICAgaWYgKGF1dG8gaGVhZGVyID0gaW5zcGVjdG9yU3R5bGVTaGVldC0+YnVpbGRP
YmplY3RGb3JTdHlsZVNoZWV0SW5mbygpKQorICAgICAgICAgICAgaGVhZGVycy0+YWRkSXRlbSho
ZWFkZXIucmVsZWFzZU5vbk51bGwoKSk7CisgICAgfQorCisgICAgcmV0dXJuIFdURk1vdmUoaGVh
ZGVycyk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmNvbGxlY3RBbGxTdHlsZVNoZWV0
cyhWZWN0b3I8SW5zcGVjdG9yU3R5bGVTaGVldCo+JiByZXN1bHQpCkBAIC01OTgsMTE2ICs2MDAs
MTI0IEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmNvbGxlY3RTdHlsZVNoZWV0cyhDU1NTdHls
ZVNoZWV0KiBzdHlsZVNoZWV0LCBWZWN0b3I8Q1NTCiAgICAgfQogfQogCi12b2lkIEluc3BlY3Rv
ckNTU0FnZW50OjpnZXRTdHlsZVNoZWV0KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3Qg
U3RyaW5nJiBzdHlsZVNoZWV0SWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNT
U1N0eWxlU2hlZXRCb2R5PiYgc3R5bGVTaGVldE9iamVjdCkKK1Byb3RvY29sOjpFcnJvclN0cmlu
Z09yPFJlZjxQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZVNoZWV0Qm9keT4+IEluc3BlY3RvckNTU0Fn
ZW50OjpnZXRTdHlsZVNoZWV0KGNvbnN0IFByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRJZCYgc3R5
bGVTaGVldElkKQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwog
ICAgIEluc3BlY3RvclN0eWxlU2hlZXQqIGluc3BlY3RvclN0eWxlU2hlZXQgPSBhc3NlcnRTdHls
ZVNoZWV0Rm9ySWQoZXJyb3JTdHJpbmcsIHN0eWxlU2hlZXRJZCk7CiAgICAgaWYgKCFpbnNwZWN0
b3JTdHlsZVNoZWV0KQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBl
Y3RlZChlcnJvclN0cmluZyk7CiAKLSAgICBzdHlsZVNoZWV0T2JqZWN0ID0gaW5zcGVjdG9yU3R5
bGVTaGVldC0+YnVpbGRPYmplY3RGb3JTdHlsZVNoZWV0KCk7CisgICAgYXV0byBzdHlsZVNoZWV0
ID0gaW5zcGVjdG9yU3R5bGVTaGVldC0+YnVpbGRPYmplY3RGb3JTdHlsZVNoZWV0KCk7CisgICAg
aWYgKCFzdHlsZVNoZWV0KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkludGVybmFs
IGVycm9yOiBtaXNzaW5nIHN0eWxlIHNoZWV0Iik7CisKKyAgICByZXR1cm4gc3R5bGVTaGVldC5y
ZWxlYXNlTm9uTnVsbCgpOwogfQogCi12b2lkIEluc3BlY3RvckNTU0FnZW50OjpnZXRTdHlsZVNo
ZWV0VGV4dChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgc3R5bGVTaGVl
dElkLCBTdHJpbmcqIHJlc3VsdCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPFN0cmluZz4gSW5z
cGVjdG9yQ1NTQWdlbnQ6OmdldFN0eWxlU2hlZXRUZXh0KGNvbnN0IFByb3RvY29sOjpDU1M6OlN0
eWxlU2hlZXRJZCYgc3R5bGVTaGVldElkKQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBl
cnJvclN0cmluZzsKKwogICAgIEluc3BlY3RvclN0eWxlU2hlZXQqIGluc3BlY3RvclN0eWxlU2hl
ZXQgPSBhc3NlcnRTdHlsZVNoZWV0Rm9ySWQoZXJyb3JTdHJpbmcsIHN0eWxlU2hlZXRJZCk7CiAg
ICAgaWYgKCFpbnNwZWN0b3JTdHlsZVNoZWV0KQotICAgICAgICByZXR1cm47CisgICAgICAgIHJl
dHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAgICBhdXRvIHRleHQgPSBpbnNw
ZWN0b3JTdHlsZVNoZWV0LT50ZXh0KCk7Ci0gICAgaWYgKCF0ZXh0Lmhhc0V4Y2VwdGlvbigpKQot
ICAgICAgICAqcmVzdWx0ID0gdGV4dC5yZWxlYXNlUmV0dXJuVmFsdWUoKTsKKyAgICBpZiAodGV4
dC5oYXNFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEluc3BlY3Rv
ckRPTUFnZW50Ojp0b0Vycm9yU3RyaW5nKHRleHQucmVsZWFzZUV4Y2VwdGlvbigpKSk7CisKKyAg
ICByZXR1cm4gdGV4dC5yZWxlYXNlUmV0dXJuVmFsdWUoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JD
U1NBZ2VudDo6c2V0U3R5bGVTaGVldFRleHQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25z
dCBTdHJpbmcmIHN0eWxlU2hlZXRJZCwgY29uc3QgU3RyaW5nJiB0ZXh0KQorUHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yQ1NTQWdlbnQ6OnNldFN0eWxlU2hlZXRUZXh0KGNv
bnN0IFByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRJZCYgc3R5bGVTaGVldElkLCBjb25zdCBTdHJp
bmcmIHRleHQpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAg
ICAgSW5zcGVjdG9yU3R5bGVTaGVldCogaW5zcGVjdG9yU3R5bGVTaGVldCA9IGFzc2VydFN0eWxl
U2hlZXRGb3JJZChlcnJvclN0cmluZywgc3R5bGVTaGVldElkKTsKICAgICBpZiAoIWluc3BlY3Rv
clN0eWxlU2hlZXQpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVj
dGVkKGVycm9yU3RyaW5nKTsKIAogICAgIGF1dG8qIGRvbUFnZW50ID0gbV9pbnN0cnVtZW50aW5n
QWdlbnRzLnBlcnNpc3RlbnRET01BZ2VudCgpOwotICAgIGlmICghZG9tQWdlbnQpIHsKLSAgICAg
ICAgZXJyb3JTdHJpbmcgPSAiRE9NIGRvbWFpbiBtdXN0IGJlIGVuYWJsZWQiX3M7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9CisgICAgaWYgKCFkb21BZ2VudCkKKyAgICAgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKCJET00gZG9tYWluIG11c3QgYmUgZW5hYmxlZCJfcyk7CiAKICAgICBhdXRvIHJl
c3VsdCA9IGRvbUFnZW50LT5oaXN0b3J5KCktPnBlcmZvcm0obWFrZVVuaXF1ZTxTZXRTdHlsZVNo
ZWV0VGV4dEFjdGlvbj4oaW5zcGVjdG9yU3R5bGVTaGVldCwgdGV4dCkpOwogICAgIGlmIChyZXN1
bHQuaGFzRXhjZXB0aW9uKCkpCi0gICAgICAgIGVycm9yU3RyaW5nID0gSW5zcGVjdG9yRE9NQWdl
bnQ6OnRvRXJyb3JTdHJpbmcocmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKSk7CisgICAgICAgIHJl
dHVybiBtYWtlVW5leHBlY3RlZChJbnNwZWN0b3JET01BZ2VudDo6dG9FcnJvclN0cmluZyhyZXN1
bHQucmVsZWFzZUV4Y2VwdGlvbigpKSk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIElu
c3BlY3RvckNTU0FnZW50OjpzZXRTdHlsZVRleHQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBj
b25zdCBKU09OOjpPYmplY3QmIGZ1bGxTdHlsZUlkLCBjb25zdCBTdHJpbmcmIHRleHQsIFJlZlB0
cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlPiYgcmVzdWx0KQorUHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8UmVmPFByb3RvY29sOjpDU1M6OkNTU1N0eWxlPj4gSW5zcGVjdG9yQ1NT
QWdlbnQ6OnNldFN0eWxlVGV4dChSZWY8SlNPTjo6T2JqZWN0PiYmIHN0eWxlSWQsIGNvbnN0IFN0
cmluZyYgdGV4dCkKIHsKLSAgICBJbnNwZWN0b3JDU1NJZCBjb21wb3VuZElkKGZ1bGxTdHlsZUlk
KTsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKKyAgICBJbnNwZWN0
b3JDU1NJZCBjb21wb3VuZElkKHN0eWxlSWQpOwogICAgIEFTU0VSVCghY29tcG91bmRJZC5pc0Vt
cHR5KCkpOwogCiAgICAgSW5zcGVjdG9yU3R5bGVTaGVldCogaW5zcGVjdG9yU3R5bGVTaGVldCA9
IGFzc2VydFN0eWxlU2hlZXRGb3JJZChlcnJvclN0cmluZywgY29tcG91bmRJZC5zdHlsZVNoZWV0
SWQoKSk7CiAgICAgaWYgKCFpbnNwZWN0b3JTdHlsZVNoZWV0KQotICAgICAgICByZXR1cm47Cisg
ICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAgICBhdXRvKiBk
b21BZ2VudCA9IG1faW5zdHJ1bWVudGluZ0FnZW50cy5wZXJzaXN0ZW50RE9NQWdlbnQoKTsKLSAg
ICBpZiAoIWRvbUFnZW50KSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIkRPTSBkb21haW4gbXVz
dCBiZSBlbmFibGVkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghZG9tQWdl
bnQpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiRE9NIGRvbWFpbiBtdXN0IGJlIGVu
YWJsZWQiX3MpOwogCiAgICAgYXV0byBwZXJmb3JtUmVzdWx0ID0gZG9tQWdlbnQtPmhpc3Rvcnko
KS0+cGVyZm9ybShtYWtlVW5pcXVlPFNldFN0eWxlVGV4dEFjdGlvbj4oaW5zcGVjdG9yU3R5bGVT
aGVldCwgY29tcG91bmRJZCwgdGV4dCkpOwotICAgIGlmIChwZXJmb3JtUmVzdWx0Lmhhc0V4Y2Vw
dGlvbigpKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gSW5zcGVjdG9yRE9NQWdlbnQ6OnRvRXJy
b3JTdHJpbmcocGVyZm9ybVJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCkpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQorICAgIGlmIChwZXJmb3JtUmVzdWx0Lmhhc0V4Y2VwdGlvbigpKQorICAgICAg
ICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoSW5zcGVjdG9yRE9NQWdlbnQ6OnRvRXJyb3JTdHJpbmco
cGVyZm9ybVJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCkpKTsKIAotICAgIHJlc3VsdCA9IGluc3Bl
Y3RvclN0eWxlU2hlZXQtPmJ1aWxkT2JqZWN0Rm9yU3R5bGUoaW5zcGVjdG9yU3R5bGVTaGVldC0+
c3R5bGVGb3JJZChjb21wb3VuZElkKSk7CisgICAgcmV0dXJuIGluc3BlY3RvclN0eWxlU2hlZXQt
PmJ1aWxkT2JqZWN0Rm9yU3R5bGUoaW5zcGVjdG9yU3R5bGVTaGVldC0+c3R5bGVGb3JJZChjb21w
b3VuZElkKSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OnNldFJ1bGVTZWxlY3RvcihF
cnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IEpTT046Ok9iamVjdCYgZnVsbFJ1bGVJZCwg
Y29uc3QgU3RyaW5nJiBzZWxlY3RvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6
Q1NTUnVsZT4mIHJlc3VsdCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxQcm90b2NvbDo6
Q1NTOjpDU1NSdWxlPj4gSW5zcGVjdG9yQ1NTQWdlbnQ6OnNldFJ1bGVTZWxlY3RvcihSZWY8SlNP
Tjo6T2JqZWN0PiYmIHJ1bGVJZCwgY29uc3QgU3RyaW5nJiBzZWxlY3RvcikKIHsKLSAgICBJbnNw
ZWN0b3JDU1NJZCBjb21wb3VuZElkKGZ1bGxSdWxlSWQpOworICAgIFByb3RvY29sOjpFcnJvclN0
cmluZyBlcnJvclN0cmluZzsKKworICAgIEluc3BlY3RvckNTU0lkIGNvbXBvdW5kSWQocnVsZUlk
KTsKICAgICBBU1NFUlQoIWNvbXBvdW5kSWQuaXNFbXB0eSgpKTsKIAogICAgIEluc3BlY3RvclN0
eWxlU2hlZXQqIGluc3BlY3RvclN0eWxlU2hlZXQgPSBhc3NlcnRTdHlsZVNoZWV0Rm9ySWQoZXJy
b3JTdHJpbmcsIGNvbXBvdW5kSWQuc3R5bGVTaGVldElkKCkpOwogICAgIGlmICghaW5zcGVjdG9y
U3R5bGVTaGVldCkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0
ZWQoZXJyb3JTdHJpbmcpOwogCiAgICAgYXV0byogZG9tQWdlbnQgPSBtX2luc3RydW1lbnRpbmdB
Z2VudHMucGVyc2lzdGVudERPTUFnZW50KCk7Ci0gICAgaWYgKCFkb21BZ2VudCkgewotICAgICAg
ICBlcnJvclN0cmluZyA9ICJET00gZG9tYWluIG11c3QgYmUgZW5hYmxlZCJfczsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KKyAgICBpZiAoIWRvbUFnZW50KQorICAgICAgICByZXR1cm4gbWFrZVVu
ZXhwZWN0ZWQoIkRPTSBkb21haW4gbXVzdCBiZSBlbmFibGVkIl9zKTsKIAogICAgIGF1dG8gcGVy
Zm9ybVJlc3VsdCA9IGRvbUFnZW50LT5oaXN0b3J5KCktPnBlcmZvcm0obWFrZVVuaXF1ZTxTZXRS
dWxlU2VsZWN0b3JBY3Rpb24+KGluc3BlY3RvclN0eWxlU2hlZXQsIGNvbXBvdW5kSWQsIHNlbGVj
dG9yKSk7Ci0gICAgaWYgKHBlcmZvcm1SZXN1bHQuaGFzRXhjZXB0aW9uKCkpIHsKLSAgICAgICAg
ZXJyb3JTdHJpbmcgPSBJbnNwZWN0b3JET01BZ2VudDo6dG9FcnJvclN0cmluZyhwZXJmb3JtUmVz
dWx0LnJlbGVhc2VFeGNlcHRpb24oKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYg
KHBlcmZvcm1SZXN1bHQuaGFzRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBl
Y3RlZChJbnNwZWN0b3JET01BZ2VudDo6dG9FcnJvclN0cmluZyhwZXJmb3JtUmVzdWx0LnJlbGVh
c2VFeGNlcHRpb24oKSkpOwogCi0gICAgcmVzdWx0ID0gaW5zcGVjdG9yU3R5bGVTaGVldC0+YnVp
bGRPYmplY3RGb3JSdWxlKGluc3BlY3RvclN0eWxlU2hlZXQtPnJ1bGVGb3JJZChjb21wb3VuZElk
KSk7CisgICAgYXV0byBydWxlID0gaW5zcGVjdG9yU3R5bGVTaGVldC0+YnVpbGRPYmplY3RGb3JS
dWxlKGluc3BlY3RvclN0eWxlU2hlZXQtPnJ1bGVGb3JJZChjb21wb3VuZElkKSk7CisgICAgaWYg
KCFydWxlKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkludGVybmFsIGVycm9yOiBt
aXNzaW5nIHN0eWxlIHNoZWV0Iik7CisKKyAgICByZXR1cm4gcnVsZS5yZWxlYXNlTm9uTnVsbCgp
OwogfQogCi12b2lkIEluc3BlY3RvckNTU0FnZW50OjpjcmVhdGVTdHlsZVNoZWV0KEVycm9yU3Ry
aW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBTdHJpbmcqIHN0eWxlU2hl
ZXRJZCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPFByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRJ
ZD4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmNyZWF0ZVN0eWxlU2hlZXQoY29uc3QgUHJvdG9jb2w6Ok5l
dHdvcms6OkZyYW1lSWQmIGZyYW1lSWQpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVy
cm9yU3RyaW5nOworCiAgICAgYXV0byogcGFnZUFnZW50ID0gbV9pbnN0cnVtZW50aW5nQWdlbnRz
LmVuYWJsZWRQYWdlQWdlbnQoKTsKLSAgICBpZiAoIXBhZ2VBZ2VudCkgewotICAgICAgICBlcnJv
clN0cmluZyA9ICJQYWdlIGRvbWFpbiBtdXN0IGJlIGVuYWJsZWQiX3M7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9CisgICAgaWYgKCFwYWdlQWdlbnQpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBl
Y3RlZCgiUGFnZSBkb21haW4gbXVzdCBiZSBlbmFibGVkIl9zKTsKIAogICAgIGF1dG8qIGZyYW1l
ID0gcGFnZUFnZW50LT5hc3NlcnRGcmFtZShlcnJvclN0cmluZywgZnJhbWVJZCk7CiAgICAgaWYg
KCFmcmFtZSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQo
ZXJyb3JTdHJpbmcpOwogCiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gZnJhbWUtPmRvY3VtZW50
KCk7Ci0gICAgaWYgKCFkb2N1bWVudCkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5n
IGRvY3VtZW50IG9mIGZyYW1lIGZvciBnaXZlbiBmcmFtZUlkIl9zOwotICAgICAgICByZXR1cm47
Ci0gICAgfQorICAgIGlmICghZG9jdW1lbnQpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3Rl
ZCgiTWlzc2luZyBkb2N1bWVudCBvZiBmcmFtZSBmb3IgZ2l2ZW4gZnJhbWVJZCJfcyk7CiAKICAg
ICBJbnNwZWN0b3JTdHlsZVNoZWV0KiBpbnNwZWN0b3JTdHlsZVNoZWV0ID0gY3JlYXRlSW5zcGVj
dG9yU3R5bGVTaGVldEZvckRvY3VtZW50KCpkb2N1bWVudCk7Ci0gICAgaWYgKCFpbnNwZWN0b3JT
dHlsZVNoZWV0KSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIkNvdWxkIG5vdCBjcmVhdGUgc3R5
bGUgc2hlZXQgZm9yIGRvY3VtZW50IG9mIGZyYW1lIGZvciBnaXZlbiBmcmFtZUlkIl9zOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghaW5zcGVjdG9yU3R5bGVTaGVldCkKKyAgICAg
ICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJDb3VsZCBub3QgY3JlYXRlIHN0eWxlIHNoZWV0IGZv
ciBkb2N1bWVudCBvZiBmcmFtZSBmb3IgZ2l2ZW4gZnJhbWVJZCJfcyk7CiAKLSAgICAqc3R5bGVT
aGVldElkID0gaW5zcGVjdG9yU3R5bGVTaGVldC0+aWQoKTsKKyAgICByZXR1cm4gaW5zcGVjdG9y
U3R5bGVTaGVldC0+aWQoKTsKIH0KIAogSW5zcGVjdG9yU3R5bGVTaGVldCogSW5zcGVjdG9yQ1NT
QWdlbnQ6OmNyZWF0ZUluc3BlY3RvclN0eWxlU2hlZXRGb3JEb2N1bWVudChEb2N1bWVudCYgZG9j
dW1lbnQpCkBAIC03NTEsNDEgKzc2MSw0MiBAQCBJbnNwZWN0b3JTdHlsZVNoZWV0KiBJbnNwZWN0
b3JDU1NBZ2VudDo6Y3JlYXRlSW5zcGVjdG9yU3R5bGVTaGVldEZvckRvY3VtZW50KERvYwogICAg
IHJldHVybiBpbnNwZWN0b3JTdHlsZVNoZWV0c0ZvckRvY3VtZW50Lmxhc3QoKS5nZXQoKTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6YWRkUnVsZShFcnJvclN0cmluZyYgZXJyb3JTdHJp
bmcsIGNvbnN0IFN0cmluZyYgc3R5bGVTaGVldElkLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yLCBS
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NSdWxlPiYgcmVzdWx0KQorUHJvdG9j
b2w6OkVycm9yU3RyaW5nT3I8UmVmPFByb3RvY29sOjpDU1M6OkNTU1J1bGU+PiBJbnNwZWN0b3JD
U1NBZ2VudDo6YWRkUnVsZShjb25zdCBQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0SWQmIHN0eWxl
U2hlZXRJZCwgY29uc3QgU3RyaW5nJiBzZWxlY3RvcikKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JT
dHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBJbnNwZWN0b3JTdHlsZVNoZWV0KiBpbnNwZWN0b3JT
dHlsZVNoZWV0ID0gYXNzZXJ0U3R5bGVTaGVldEZvcklkKGVycm9yU3RyaW5nLCBzdHlsZVNoZWV0
SWQpOwogICAgIGlmICghaW5zcGVjdG9yU3R5bGVTaGVldCkKLSAgICAgICAgcmV0dXJuOworICAg
ICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCiAgICAgYXV0byogZG9t
QWdlbnQgPSBtX2luc3RydW1lbnRpbmdBZ2VudHMucGVyc2lzdGVudERPTUFnZW50KCk7Ci0gICAg
aWYgKCFkb21BZ2VudCkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJET00gZG9tYWluIG11c3Qg
YmUgZW5hYmxlZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoIWRvbUFnZW50
KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkRPTSBkb21haW4gbXVzdCBiZSBlbmFi
bGVkIl9zKTsKIAogICAgIGF1dG8gYWN0aW9uID0gbWFrZVVuaXF1ZTxBZGRSdWxlQWN0aW9uPihp
bnNwZWN0b3JTdHlsZVNoZWV0LCBzZWxlY3Rvcik7CiAgICAgYXV0byYgcmF3QWN0aW9uID0gKmFj
dGlvbjsKICAgICBhdXRvIHBlcmZvcm1SZXN1bHQgPSBkb21BZ2VudC0+aGlzdG9yeSgpLT5wZXJm
b3JtKFdURk1vdmUoYWN0aW9uKSk7Ci0gICAgaWYgKHBlcmZvcm1SZXN1bHQuaGFzRXhjZXB0aW9u
KCkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSBJbnNwZWN0b3JET01BZ2VudDo6dG9FcnJvclN0
cmluZyhwZXJmb3JtUmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKSk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9CisgICAgaWYgKHBlcmZvcm1SZXN1bHQuaGFzRXhjZXB0aW9uKCkpCisgICAgICAgIHJl
dHVybiBtYWtlVW5leHBlY3RlZChJbnNwZWN0b3JET01BZ2VudDo6dG9FcnJvclN0cmluZyhwZXJm
b3JtUmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKSkpOwogCi0gICAgSW5zcGVjdG9yQ1NTSWQgcnVs
ZUlkID0gcmF3QWN0aW9uLm5ld1J1bGVJZCgpOwotICAgIENTU1N0eWxlUnVsZSogcnVsZSA9IGlu
c3BlY3RvclN0eWxlU2hlZXQtPnJ1bGVGb3JJZChydWxlSWQpOwotICAgIHJlc3VsdCA9IGluc3Bl
Y3RvclN0eWxlU2hlZXQtPmJ1aWxkT2JqZWN0Rm9yUnVsZShydWxlKTsKKyAgICBhdXRvIHJ1bGUg
PSBpbnNwZWN0b3JTdHlsZVNoZWV0LT5idWlsZE9iamVjdEZvclJ1bGUoaW5zcGVjdG9yU3R5bGVT
aGVldC0+cnVsZUZvcklkKHJhd0FjdGlvbi5uZXdSdWxlSWQoKSkpOworICAgIGlmICghcnVsZSkK
KyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJJbnRlcm5hbCBlcnJvcjogbWlzc2luZyBz
dHlsZSBzaGVldCIpOworCisgICAgcmV0dXJuIHJ1bGUucmVsZWFzZU5vbk51bGwoKTsKIH0KIAot
dm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0U3VwcG9ydGVkQ1NTUHJvcGVydGllcyhFcnJvclN0
cmluZyYsIFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NT
UHJvcGVydHlJbmZvPj4mIGNzc1Byb3BlcnRpZXMpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxS
ZWY8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0eUluZm8+Pj4gSW5zcGVj
dG9yQ1NTQWdlbnQ6OmdldFN1cHBvcnRlZENTU1Byb3BlcnRpZXMoKQogewotICAgIGF1dG8gcHJv
cGVydGllcyA9IEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NQcm9w
ZXJ0eUluZm8+OjpjcmVhdGUoKTsKKyAgICBhdXRvIGNzc1Byb3BlcnRpZXMgPSBKU09OOjpBcnJh
eU9mPFByb3RvY29sOjpDU1M6OkNTU1Byb3BlcnR5SW5mbz46OmNyZWF0ZSgpOworCiAgICAgZm9y
IChpbnQgaSA9IGZpcnN0Q1NTUHJvcGVydHk7IGkgPD0gbGFzdENTU1Byb3BlcnR5OyArK2kpIHsK
ICAgICAgICAgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlEID0gY29udmVydFRvQ1NTUHJvcGVydHlJ
RChpKTsKICAgICAgICAgLy8gRklYTUU6IFNob3VsZCB0YWtlIGFjY291bnQgZm9yIGZsYWdzIGlu
IHNldHRpbmdzKCkuCiAgICAgICAgIGlmIChpc0ludGVybmFsQ1NTUHJvcGVydHkocHJvcGVydHlJ
RCkgfHwgIWlzRW5hYmxlZENTU1Byb3BlcnR5KHByb3BlcnR5SUQpKQogICAgICAgICAgICAgY29u
dGludWU7CiAKLSAgICAgICAgYXV0byBwcm9wZXJ0eSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNT
Uzo6Q1NTUHJvcGVydHlJbmZvOjpjcmVhdGUoKQorICAgICAgICBhdXRvIHByb3BlcnR5ID0gUHJv
dG9jb2w6OkNTUzo6Q1NTUHJvcGVydHlJbmZvOjpjcmVhdGUoKQogICAgICAgICAgICAgLnNldE5h
bWUoZ2V0UHJvcGVydHlOYW1lU3RyaW5nKHByb3BlcnR5SUQpKQogICAgICAgICAgICAgLnJlbGVh
c2UoKTsKIApAQCAtODIxLDYzICs4MzIsNjYgQEAgdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0
U3VwcG9ydGVkQ1NTUHJvcGVydGllcyhFcnJvclN0cmluZyYsIFJlZlB0cjxKU09OOjpBcnIKICAg
ICAgICAgaWYgKENTU1Byb3BlcnR5Ojppc0luaGVyaXRlZFByb3BlcnR5KHByb3BlcnR5SUQpKQog
ICAgICAgICAgICAgcHJvcGVydHktPnNldEluaGVyaXRlZCh0cnVlKTsKIAotICAgICAgICBwcm9w
ZXJ0aWVzLT5hZGRJdGVtKFdURk1vdmUocHJvcGVydHkpKTsKKyAgICAgICAgY3NzUHJvcGVydGll
cy0+YWRkSXRlbShXVEZNb3ZlKHByb3BlcnR5KSk7CiAgICAgfQotICAgIGNzc1Byb3BlcnRpZXMg
PSBXVEZNb3ZlKHByb3BlcnRpZXMpOworCisgICAgcmV0dXJuIFdURk1vdmUoY3NzUHJvcGVydGll
cyk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldFN1cHBvcnRlZFN5c3RlbUZvbnRG
YW1pbHlOYW1lcyhFcnJvclN0cmluZyYsIFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+JiBm
b250RmFtaWx5TmFtZXMpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SlNPTjo6QXJyYXlP
ZjxTdHJpbmc+Pj4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldFN1cHBvcnRlZFN5c3RlbUZvbnRGYW1p
bHlOYW1lcygpCiB7Ci0gICAgYXV0byBmYW1pbGllcyA9IEpTT046OkFycmF5T2Y8U3RyaW5nPjo6
Y3JlYXRlKCk7CisgICAgYXV0byBmb250RmFtaWx5TmFtZXMgPSBKU09OOjpBcnJheU9mPFN0cmlu
Zz46OmNyZWF0ZSgpOwogCiAgICAgVmVjdG9yPFN0cmluZz4gc3lzdGVtRm9udEZhbWlsaWVzID0g
Rm9udENhY2hlOjpzaW5nbGV0b24oKS5zeXN0ZW1Gb250RmFtaWxpZXMoKTsKICAgICBmb3IgKGNv
bnN0IGF1dG8mIGZhbWlseU5hbWUgOiBzeXN0ZW1Gb250RmFtaWxpZXMpCi0gICAgICAgIGZhbWls
aWVzLT5hZGRJdGVtKGZhbWlseU5hbWUpOworICAgICAgICBmb250RmFtaWx5TmFtZXMtPmFkZEl0
ZW0oZmFtaWx5TmFtZSk7CiAKLSAgICBmb250RmFtaWx5TmFtZXMgPSBXVEZNb3ZlKGZhbWlsaWVz
KTsKKyAgICByZXR1cm4gV1RGTW92ZShmb250RmFtaWx5TmFtZXMpOwogfQogCi12b2lkIEluc3Bl
Y3RvckNTU0FnZW50Ojpmb3JjZVBzZXVkb1N0YXRlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywg
aW50IG5vZGVJZCwgY29uc3QgSlNPTjo6QXJyYXkmIGZvcmNlZFBzZXVkb0NsYXNzZXMpCitQcm90
b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JDU1NBZ2VudDo6Zm9yY2VQc2V1ZG9T
dGF0ZShQcm90b2NvbDo6RE9NOjpOb2RlSWQgbm9kZUlkLCBSZWY8SlNPTjo6QXJyYXk+JiYgZm9y
Y2VkUHNldWRvQ2xhc3NlcykKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJp
bmc7CisKICAgICBhdXRvKiBkb21BZ2VudCA9IG1faW5zdHJ1bWVudGluZ0FnZW50cy5wZXJzaXN0
ZW50RE9NQWdlbnQoKTsKLSAgICBpZiAoIWRvbUFnZW50KSB7Ci0gICAgICAgIGVycm9yU3RyaW5n
ID0gIkRPTSBkb21haW4gbXVzdCBiZSBlbmFibGVkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAg
fQorICAgIGlmICghZG9tQWdlbnQpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiRE9N
IGRvbWFpbiBtdXN0IGJlIGVuYWJsZWQiX3MpOwogCiAgICAgRWxlbWVudCogZWxlbWVudCA9IGRv
bUFnZW50LT5hc3NlcnRFbGVtZW50KGVycm9yU3RyaW5nLCBub2RlSWQpOwogICAgIGlmICghZWxl
bWVudCkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJy
b3JTdHJpbmcpOwogCiAgICAgLy8gUmV0dXJuIGVhcmx5IGlmIHRoZSBmb3JjZWQgcHNldWRvIHN0
YXRlIHdhcyBhbHJlYWR5IHNldCBjb3JyZWN0bHkuCiAgICAgdW5zaWduZWQgZm9yY2VkUHNldWRv
U3RhdGUgPSBjb21wdXRlUHNldWRvQ2xhc3NNYXNrKGZvcmNlZFBzZXVkb0NsYXNzZXMpOwogICAg
IGlmIChmb3JjZWRQc2V1ZG9TdGF0ZSkgewogICAgICAgICBhdXRvIGl0ZXJhdG9yID0gbV9ub2Rl
SWRUb0ZvcmNlZFBzZXVkb1N0YXRlLmFkZChub2RlSWQsIDApLml0ZXJhdG9yOwogICAgICAgICBp
ZiAoZm9yY2VkUHNldWRvU3RhdGUgPT0gaXRlcmF0b3ItPnZhbHVlKQotICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAgICAgaXRlcmF0b3ItPnZhbHVlID0g
Zm9yY2VkUHNldWRvU3RhdGU7CiAgICAgICAgIG1fZG9jdW1lbnRzV2l0aEZvcmNlZFBzZXVkb1N0
YXRlcy5hZGQoJmVsZW1lbnQtPmRvY3VtZW50KCkpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGlm
ICghbV9ub2RlSWRUb0ZvcmNlZFBzZXVkb1N0YXRlLnJlbW92ZShub2RlSWQpKQotICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAgICAgaWYgKG1fbm9kZUlk
VG9Gb3JjZWRQc2V1ZG9TdGF0ZS5pc0VtcHR5KCkpCiAgICAgICAgICAgICBtX2RvY3VtZW50c1dp
dGhGb3JjZWRQc2V1ZG9TdGF0ZXMuY2xlYXIoKTsKICAgICB9CiAKICAgICBlbGVtZW50LT5kb2N1
bWVudCgpLnN0eWxlU2NvcGUoKS5kaWRDaGFuZ2VTdHlsZVNoZWV0RW52aXJvbm1lbnQoKTsKKwor
ICAgIHJldHVybiB7IH07CiB9CiAKIEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZSYg
SW5zcGVjdG9yQ1NTQWdlbnQ6OmFzSW5zcGVjdG9yU3R5bGVTaGVldChTdHlsZWRFbGVtZW50JiBl
bGVtZW50KQogewogICAgIHJldHVybiBtX25vZGVUb0luc3BlY3RvclN0eWxlU2hlZXQuZW5zdXJl
KCZlbGVtZW50LCBbdGhpcywgJmVsZW1lbnRdIHsKICAgICAgICAgU3RyaW5nIG5ld1N0eWxlU2hl
ZXRJZCA9IFN0cmluZzo6bnVtYmVyKG1fbGFzdFN0eWxlU2hlZXRJZCsrKTsKLSAgICAgICAgYXV0
byBpbnNwZWN0b3JTdHlsZVNoZWV0ID0gSW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxl
OjpjcmVhdGUobV9pbnN0cnVtZW50aW5nQWdlbnRzLmVuYWJsZWRQYWdlQWdlbnQoKSwgbmV3U3R5
bGVTaGVldElkLCBlbGVtZW50LCBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRP
cmlnaW46OkF1dGhvciwgdGhpcyk7CisgICAgICAgIGF1dG8gaW5zcGVjdG9yU3R5bGVTaGVldCA9
IEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZTo6Y3JlYXRlKG1faW5zdHJ1bWVudGlu
Z0FnZW50cy5lbmFibGVkUGFnZUFnZW50KCksIG5ld1N0eWxlU2hlZXRJZCwgZWxlbWVudCwgUHJv
dG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6QXV0aG9yLCB0aGlzKTsKICAgICAgICAgbV9p
ZFRvSW5zcGVjdG9yU3R5bGVTaGVldC5zZXQobmV3U3R5bGVTaGVldElkLCBpbnNwZWN0b3JTdHls
ZVNoZWV0LmNvcHlSZWYoKSk7CiAgICAgICAgIHJldHVybiBpbnNwZWN0b3JTdHlsZVNoZWV0Owog
ICAgIH0pLml0ZXJhdG9yLT52YWx1ZTsKIH0KIAotRWxlbWVudCogSW5zcGVjdG9yQ1NTQWdlbnQ6
OmVsZW1lbnRGb3JJZChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQpCitFbGVt
ZW50KiBJbnNwZWN0b3JDU1NBZ2VudDo6ZWxlbWVudEZvcklkKFByb3RvY29sOjpFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcsIFByb3RvY29sOjpET006Ok5vZGVJZCBub2RlSWQpCiB7CiAgICAgYXV0
byogZG9tQWdlbnQgPSBtX2luc3RydW1lbnRpbmdBZ2VudHMucGVyc2lzdGVudERPTUFnZW50KCk7
CiAgICAgaWYgKCFkb21BZ2VudCkgewpAQCAtOTE0LDcgKzkyOCw3IEBAIEluc3BlY3RvclN0eWxl
U2hlZXQqIEluc3BlY3RvckNTU0FnZW50OjpiaW5kU3R5bGVTaGVldChDU1NTdHlsZVNoZWV0KiBz
dHlsZVNoZWV0CiAgICAgcmV0dXJuIGluc3BlY3RvclN0eWxlU2hlZXQuZ2V0KCk7CiB9CiAKLUlu
c3BlY3RvclN0eWxlU2hlZXQqIEluc3BlY3RvckNTU0FnZW50Ojphc3NlcnRTdHlsZVNoZWV0Rm9y
SWQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHN0eWxlU2hlZXRJZCkK
K0luc3BlY3RvclN0eWxlU2hlZXQqIEluc3BlY3RvckNTU0FnZW50Ojphc3NlcnRTdHlsZVNoZWV0
Rm9ySWQoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBz
dHlsZVNoZWV0SWQpCiB7CiAgICAgSWRUb0luc3BlY3RvclN0eWxlU2hlZXQ6Oml0ZXJhdG9yIGl0
ID0gbV9pZFRvSW5zcGVjdG9yU3R5bGVTaGVldC5maW5kKHN0eWxlU2hlZXRJZCk7CiAgICAgaWYg
KGl0ID09IG1faWRUb0luc3BlY3RvclN0eWxlU2hlZXQuZW5kKCkpIHsKQEAgLTkyNCwyOSArOTM4
LDI5IEBAIEluc3BlY3RvclN0eWxlU2hlZXQqIEluc3BlY3RvckNTU0FnZW50Ojphc3NlcnRTdHls
ZVNoZWV0Rm9ySWQoRXJyb3JTdHJpbmcmIGVycm9yCiAgICAgcmV0dXJuIGl0LT52YWx1ZS5nZXQo
KTsKIH0KIAotSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luIEluc3Bl
Y3RvckNTU0FnZW50OjpkZXRlY3RPcmlnaW4oQ1NTU3R5bGVTaGVldCogcGFnZVN0eWxlU2hlZXQs
IERvY3VtZW50KiBvd25lckRvY3VtZW50KQorUHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdp
biBJbnNwZWN0b3JDU1NBZ2VudDo6ZGV0ZWN0T3JpZ2luKENTU1N0eWxlU2hlZXQqIHBhZ2VTdHls
ZVNoZWV0LCBEb2N1bWVudCogb3duZXJEb2N1bWVudCkKIHsKICAgICBpZiAobV9jcmVhdGluZ1Zp
YUluc3BlY3RvclN0eWxlU2hlZXQpCi0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29s
OjpDU1M6OlN0eWxlU2hlZXRPcmlnaW46Okluc3BlY3RvcjsKKyAgICAgICAgcmV0dXJuIFByb3Rv
Y29sOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW46Okluc3BlY3RvcjsKIAogICAgIGlmIChwYWdlU3R5
bGVTaGVldCAmJiAhcGFnZVN0eWxlU2hlZXQtPm93bmVyTm9kZSgpICYmIHBhZ2VTdHlsZVNoZWV0
LT5ocmVmKCkuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6
Q1NTOjpTdHlsZVNoZWV0T3JpZ2luOjpVc2VyQWdlbnQ7CisgICAgICAgIHJldHVybiBQcm90b2Nv
bDo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luOjpVc2VyQWdlbnQ7CiAKICAgICBpZiAocGFnZVN0eWxl
U2hlZXQgJiYgcGFnZVN0eWxlU2hlZXQtPmNvbnRlbnRzKCkuaXNVc2VyU3R5bGVTaGVldCgpKQot
ICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2lu
OjpVc2VyOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6
VXNlcjsKIAogICAgIGF1dG8gaXRlcmF0b3IgPSBtX2RvY3VtZW50VG9JbnNwZWN0b3JTdHlsZVNo
ZWV0LmZpbmQob3duZXJEb2N1bWVudCk7CiAgICAgaWYgKGl0ZXJhdG9yICE9IG1fZG9jdW1lbnRU
b0luc3BlY3RvclN0eWxlU2hlZXQuZW5kKCkpIHsKICAgICAgICAgZm9yIChhdXRvJiBpbnNwZWN0
b3JTdHlsZVNoZWV0IDogaXRlcmF0b3ItPnZhbHVlKSB7CiAgICAgICAgICAgICBpZiAocGFnZVN0
eWxlU2hlZXQgPT0gaW5zcGVjdG9yU3R5bGVTaGVldC0+cGFnZVN0eWxlU2hlZXQoKSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0T3Jp
Z2luOjpJbnNwZWN0b3I7CisgICAgICAgICAgICAgICAgcmV0dXJuIFByb3RvY29sOjpDU1M6OlN0
eWxlU2hlZXRPcmlnaW46Okluc3BlY3RvcjsKICAgICAgICAgfQogICAgIH0KIAotICAgIHJldHVy
biBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW46OkF1dGhvcjsKKyAg
ICByZXR1cm4gUHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6QXV0aG9yOwogfQogCi1S
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NSdWxlPiBJbnNwZWN0b3JDU1NBZ2Vu
dDo6YnVpbGRPYmplY3RGb3JSdWxlKGNvbnN0IFN0eWxlUnVsZSogc3R5bGVSdWxlLCBTdHlsZTo6
UmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIEVsZW1lbnQmIGVsZW1lbnQpCitSZWZQdHI8UHJvdG9j
b2w6OkNTUzo6Q1NTUnVsZT4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yUnVsZShj
b25zdCBTdHlsZVJ1bGUqIHN0eWxlUnVsZSwgU3R5bGU6OlJlc29sdmVyJiBzdHlsZVJlc29sdmVy
LCBFbGVtZW50JiBlbGVtZW50KQogewogICAgIGlmICghc3R5bGVSdWxlKQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKQEAgLTk2OCw3ICs5ODIsNyBAQCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6Q1NTOjpDU1NSdWxlPiBJbnNwZWN0b3JDU1NBZ2VudDo6YnVpbGRPYmplY3RGb3JSdWxlKAog
ICAgIHJldHVybiBpbnNwZWN0b3JTdHlsZVNoZWV0ID8gaW5zcGVjdG9yU3R5bGVTaGVldC0+YnVp
bGRPYmplY3RGb3JSdWxlKGNzc29tV3JhcHBlcikgOiBudWxscHRyOwogfQogCi1SZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NSdWxlPiBJbnNwZWN0b3JDU1NBZ2VudDo6YnVpbGRP
YmplY3RGb3JSdWxlKENTU1N0eWxlUnVsZSogcnVsZSkKK1JlZlB0cjxQcm90b2NvbDo6Q1NTOjpD
U1NSdWxlPiBJbnNwZWN0b3JDU1NBZ2VudDo6YnVpbGRPYmplY3RGb3JSdWxlKENTU1N0eWxlUnVs
ZSogcnVsZSkKIHsKICAgICBpZiAoIXJ1bGUpCiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAt
OTc4LDE2ICs5OTIsMTYgQEAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUnVs
ZT4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yUnVsZSgKICAgICByZXR1cm4gaW5z
cGVjdG9yU3R5bGVTaGVldCA/IGluc3BlY3RvclN0eWxlU2hlZXQtPmJ1aWxkT2JqZWN0Rm9yUnVs
ZShydWxlKSA6IG51bGxwdHI7CiB9CiAKLVJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkNTUzo6UnVsZU1hdGNoPj4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmJ1aWxkQXJyYXlG
b3JNYXRjaGVkUnVsZUxpc3QoY29uc3QgVmVjdG9yPFJlZlB0cjxjb25zdCBTdHlsZVJ1bGU+PiYg
bWF0Y2hlZFJ1bGVzLCBTdHlsZTo6UmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIEVsZW1lbnQmIGVs
ZW1lbnQsIFBzZXVkb0lkIHBzZXVkb0lkKQorUmVmPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkNT
Uzo6UnVsZU1hdGNoPj4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmJ1aWxkQXJyYXlGb3JNYXRjaGVkUnVs
ZUxpc3QoY29uc3QgVmVjdG9yPFJlZlB0cjxjb25zdCBTdHlsZVJ1bGU+PiYgbWF0Y2hlZFJ1bGVz
LCBTdHlsZTo6UmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIEVsZW1lbnQmIGVsZW1lbnQsIFBzZXVk
b0lkIHBzZXVkb0lkKQogewotICAgIGF1dG8gcmVzdWx0ID0gSlNPTjo6QXJyYXlPZjxJbnNwZWN0
b3I6OlByb3RvY29sOjpDU1M6OlJ1bGVNYXRjaD46OmNyZWF0ZSgpOworICAgIGF1dG8gcmVzdWx0
ID0gSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6Q1NTOjpSdWxlTWF0Y2g+OjpjcmVhdGUoKTsKIAog
ICAgIFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdDb250ZXh0IGNvbnRleHQoU2VsZWN0b3JDaGVj
a2VyOjpNb2RlOjpDb2xsZWN0aW5nUnVsZXMpOwogICAgIGNvbnRleHQucHNldWRvSWQgPSBwc2V1
ZG9JZCAhPSBQc2V1ZG9JZDo6Tm9uZSA/IHBzZXVkb0lkIDogZWxlbWVudC5wc2V1ZG9JZCgpOwog
ICAgIFNlbGVjdG9yQ2hlY2tlciBzZWxlY3RvckNoZWNrZXIoZWxlbWVudC5kb2N1bWVudCgpKTsK
IAogICAgIGZvciAoYXV0byYgbWF0Y2hlZFJ1bGUgOiBtYXRjaGVkUnVsZXMpIHsKLSAgICAgICAg
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUnVsZT4gcnVsZU9iamVjdCA9IGJ1
aWxkT2JqZWN0Rm9yUnVsZShtYXRjaGVkUnVsZS5nZXQoKSwgc3R5bGVSZXNvbHZlciwgZWxlbWVu
dCk7CisgICAgICAgIFJlZlB0cjxQcm90b2NvbDo6Q1NTOjpDU1NSdWxlPiBydWxlT2JqZWN0ID0g
YnVpbGRPYmplY3RGb3JSdWxlKG1hdGNoZWRSdWxlLmdldCgpLCBzdHlsZVJlc29sdmVyLCBlbGVt
ZW50KTsKICAgICAgICAgaWYgKCFydWxlT2JqZWN0KQogICAgICAgICAgICAgY29udGludWU7CiAK
QEAgLTEwMDEsOCArMTAxNSw4IEBAIFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkNTUzo6UnVsZU1hdGNoPj4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmJ1CiAgICAgICAgICAg
ICArK2luZGV4OwogICAgICAgICB9CiAKLSAgICAgICAgYXV0byBtYXRjaCA9IEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkNTUzo6UnVsZU1hdGNoOjpjcmVhdGUoKQotICAgICAgICAgICAgLnNldFJ1bGUo
V1RGTW92ZShydWxlT2JqZWN0KSkKKyAgICAgICAgYXV0byBtYXRjaCA9IFByb3RvY29sOjpDU1M6
OlJ1bGVNYXRjaDo6Y3JlYXRlKCkKKyAgICAgICAgICAgIC5zZXRSdWxlKHJ1bGVPYmplY3QucmVs
ZWFzZU5vbk51bGwoKSkKICAgICAgICAgICAgIC5zZXRNYXRjaGluZ1NlbGVjdG9ycyhXVEZNb3Zl
KG1hdGNoaW5nU2VsZWN0b3JzKSkKICAgICAgICAgICAgIC5yZWxlYXNlKCk7CiAgICAgICAgIHJl
c3VsdC0+YWRkSXRlbShXVEZNb3ZlKG1hdGNoKSk7CkBAIC0xMDExLDcgKzEwMjUsNyBAQCBSZWZQ
dHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlJ1bGVNYXRjaD4+IElu
c3BlY3RvckNTU0FnZW50OjpidQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLVJlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlPiBJbnNwZWN0b3JDU1NBZ2VudDo6YnVpbGRP
YmplY3RGb3JBdHRyaWJ1dGVzU3R5bGUoU3R5bGVkRWxlbWVudCYgZWxlbWVudCkKK1JlZlB0cjxQ
cm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9y
QXR0cmlidXRlc1N0eWxlKFN0eWxlZEVsZW1lbnQmIGVsZW1lbnQpCiB7CiAgICAgLy8gRklYTUU6
IFVnbGluZXNzIGJlbG93LgogICAgIGF1dG8qIGF0dHJpYnV0ZVN0eWxlID0gY29uc3RfY2FzdDxT
dHlsZVByb3BlcnRpZXMqPihlbGVtZW50LnByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKCkpOwpA
QCAtMTAyMyw3ICsxMDM3LDcgQEAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NT
U3R5bGU+IEluc3BlY3RvckNTU0FnZW50OjpidWlsZE9iamVjdEZvckF0dHIKICAgICByZXR1cm4g
aW5zcGVjdG9yU3R5bGUtPmJ1aWxkT2JqZWN0Rm9yU3R5bGUoKTsKIH0KIAotdm9pZCBJbnNwZWN0
b3JDU1NBZ2VudDo6ZGlkUmVtb3ZlRE9NTm9kZShOb2RlJiBub2RlLCBpbnQgbm9kZUlkKQordm9p
ZCBJbnNwZWN0b3JDU1NBZ2VudDo6ZGlkUmVtb3ZlRE9NTm9kZShOb2RlJiBub2RlLCBQcm90b2Nv
bDo6RE9NOjpOb2RlSWQgbm9kZUlkKQogewogICAgIG1fbm9kZUlkVG9Gb3JjZWRQc2V1ZG9TdGF0
ZS5yZW1vdmUobm9kZUlkKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2FnZW50cy9JbnNwZWN0b3JDU1NBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Fn
ZW50cy9JbnNwZWN0b3JDU1NBZ2VudC5oCmluZGV4IGZhMWQ2NzFkZDgzM2IwMDNhNjFkYzI3OTY1
OTY2OTIxNjFhYWRmN2YuLmQyZmNhNzk1ZGM2ODBmOThkZTg2Y2JjYzFkNmU5MGM4Y2E3YzcwYjEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ1NT
QWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNT
U0FnZW50LmgKQEAgLTYxLDcgKzYxLDcgQEAgY2xhc3MgSW5zcGVjdG9yQ1NTQWdlbnQgZmluYWwg
OiBwdWJsaWMgSW5zcGVjdG9yQWdlbnRCYXNlICwgcHVibGljIEluc3BlY3Rvcjo6Q1MKICAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBJbnNwZWN0b3JDU1NBZ2VudChX
ZWJBZ2VudENvbnRleHQmKTsKLSAgICB+SW5zcGVjdG9yQ1NTQWdlbnQoKSBvdmVycmlkZTsKKyAg
ICB+SW5zcGVjdG9yQ1NTQWdlbnQoKTsKIAogICAgIGNsYXNzIElubGluZVN0eWxlT3ZlcnJpZGVT
Y29wZSB7CiAgICAgcHVibGljOgpAQCAtODMsMjkgKzgzLDI5IEBAIHB1YmxpYzoKICAgICBzdGF0
aWMgQ1NTU3R5bGVSdWxlKiBhc0NTU1N0eWxlUnVsZShDU1NSdWxlJik7CiAKICAgICAvLyBJbnNw
ZWN0b3JBZ2VudEJhc2UKLSAgICB2b2lkIGRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJbnNw
ZWN0b3I6OkZyb250ZW5kUm91dGVyKiwgSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlciopIG92
ZXJyaWRlOwotICAgIHZvaWQgd2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9y
OjpEaXNjb25uZWN0UmVhc29uKSBvdmVycmlkZTsKKyAgICB2b2lkIGRpZENyZWF0ZUZyb250ZW5k
QW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kUm91dGVyKiwgSW5zcGVjdG9yOjpCYWNrZW5k
RGlzcGF0Y2hlciopOworICAgIHZvaWQgd2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5z
cGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKTsKIAogICAgIC8vIENTU0JhY2tlbmREaXNwYXRjaGVy
SGFuZGxlcgotICAgIHZvaWQgZW5hYmxlKEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBkaXNhYmxlKEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBnZXRDb21wdXRlZFN0
eWxlRm9yTm9kZShFcnJvclN0cmluZyYsIGludCBub2RlSWQsIFJlZlB0cjxKU09OOjpBcnJheU9m
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTQ29tcHV0ZWRTdHlsZVByb3BlcnR5Pj4mKSBv
dmVycmlkZTsKLSAgICB2b2lkIGdldElubGluZVN0eWxlc0Zvck5vZGUoRXJyb3JTdHJpbmcmLCBp
bnQgbm9kZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4mIGlu
bGluZVN0eWxlLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4mIGF0
dHJpYnV0ZXMpIG92ZXJyaWRlOwotICAgIHZvaWQgZ2V0TWF0Y2hlZFN0eWxlc0Zvck5vZGUoRXJy
b3JTdHJpbmcmLCBpbnQgbm9kZUlkLCBjb25zdCBib29sKiBpbmNsdWRlUHNldWRvLCBjb25zdCBi
b29sKiBpbmNsdWRlSW5oZXJpdGVkLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpDU1M6OlJ1bGVNYXRjaD4+JiBtYXRjaGVkQ1NTUnVsZXMsIFJlZlB0cjxKU09OOjpB
cnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6UHNldWRvSWRNYXRjaGVzPj4mLCBSZWZQ
dHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkluaGVyaXRlZFN0eWxl
RW50cnk+PiYgaW5oZXJpdGVkRW50cmllcykgb3ZlcnJpZGU7Ci0gICAgdm9pZCBnZXRBbGxTdHls
ZVNoZWV0cyhFcnJvclN0cmluZyYsIFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkNTUzo6Q1NTU3R5bGVTaGVldEhlYWRlcj4+JiBzdHlsZVNoZWV0SW5mb3MpIG92ZXJy
aWRlOwotICAgIHZvaWQgZ2V0U3R5bGVTaGVldChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYg
c3R5bGVTaGVldElkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZVNo
ZWV0Qm9keT4mIHJlc3VsdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBnZXRTdHlsZVNoZWV0VGV4dChF
cnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgc3R5bGVTaGVldElkLCBTdHJpbmcqIHJlc3VsdCkg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRTdHlsZVNoZWV0VGV4dChFcnJvclN0cmluZyYsIGNvbnN0
IFN0cmluZyYgc3R5bGVTaGVldElkLCBjb25zdCBTdHJpbmcmIHRleHQpIG92ZXJyaWRlOwotICAg
IHZvaWQgc2V0U3R5bGVUZXh0KEVycm9yU3RyaW5nJiwgY29uc3QgSlNPTjo6T2JqZWN0JiBzdHls
ZUlkLCBjb25zdCBTdHJpbmcmIHRleHQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6
OkNTU1N0eWxlPiYgcmVzdWx0KSBvdmVycmlkZTsKLSAgICB2b2lkIHNldFJ1bGVTZWxlY3RvcihF
cnJvclN0cmluZyYsIGNvbnN0IEpTT046Ok9iamVjdCYgcnVsZUlkLCBjb25zdCBTdHJpbmcmIHNl
bGVjdG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NSdWxlPiYgcmVzdWx0
KSBvdmVycmlkZTsKLSAgICB2b2lkIGNyZWF0ZVN0eWxlU2hlZXQoRXJyb3JTdHJpbmcmLCBjb25z
dCBTdHJpbmcmIGZyYW1lSWQsIFN0cmluZyogc3R5bGVTaGVldElkKSBvdmVycmlkZTsKLSAgICB2
b2lkIGFkZFJ1bGUoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHN0eWxlU2hlZXRJZCwgY29u
c3QgU3RyaW5nJiBzZWxlY3RvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NT
UnVsZT4mIHJlc3VsdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBnZXRTdXBwb3J0ZWRDU1NQcm9wZXJ0
aWVzKEVycm9yU3RyaW5nJiwgUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6Q1NTOjpDU1NQcm9wZXJ0eUluZm8+PiYgcmVzdWx0KSBvdmVycmlkZTsKLSAgICB2b2lkIGdl
dFN1cHBvcnRlZFN5c3RlbUZvbnRGYW1pbHlOYW1lcyhFcnJvclN0cmluZyYsIFJlZlB0cjxKU09O
OjpBcnJheU9mPFN0cmluZz4+JiByZXN1bHQpIG92ZXJyaWRlOwotICAgIHZvaWQgZm9yY2VQc2V1
ZG9TdGF0ZShFcnJvclN0cmluZyYsIGludCBub2RlSWQsIGNvbnN0IEpTT046OkFycmF5JiBmb3Jj
ZWRQc2V1ZG9DbGFzc2VzKSBvdmVycmlkZTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJv
clN0cmluZ09yPHZvaWQ+IGVuYWJsZSgpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8dm9pZD4gZGlzYWJsZSgpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8UmVmPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1ND
b21wdXRlZFN0eWxlUHJvcGVydHk+Pj4gZ2V0Q29tcHV0ZWRTdHlsZUZvck5vZGUoSW5zcGVjdG9y
OjpQcm90b2NvbDo6RE9NOjpOb2RlSWQpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8c3RkOjp0dXBsZTxSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NT
dHlsZT4gLyogaW5saW5lU3R5bGUgKi8sIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6
OkNTU1N0eWxlPiAvKiBhdHRyaWJ1dGVzU3R5bGUgKi8+PiBnZXRJbmxpbmVTdHlsZXNGb3JOb2Rl
KEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkKTsKKyAgICBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpFcnJvclN0cmluZ09yPHN0ZDo6dHVwbGU8UmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVj
dG9yOjpQcm90b2NvbDo6Q1NTOjpSdWxlTWF0Y2g+PiwgUmVmUHRyPEpTT046OkFycmF5T2Y8SW5z
cGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpQc2V1ZG9JZE1hdGNoZXM+PiwgUmVmUHRyPEpTT046OkFy
cmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpJbmhlcml0ZWRTdHlsZUVudHJ5Pj4+PiBn
ZXRNYXRjaGVkU3R5bGVzRm9yTm9kZShJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZCwg
T3B0aW9uYWw8Ym9vbD4mJiBpbmNsdWRlUHNldWRvLCBPcHRpb25hbDxib29sPiYmIGluY2x1ZGVJ
bmhlcml0ZWQpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEpT
T046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZVNoZWV0SGVhZGVy
Pj4+IGdldEFsbFN0eWxlU2hlZXRzKCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JT
dHJpbmdPcjxSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZVNoZWV0Qm9keT4+
IGdldFN0eWxlU2hlZXQoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0
SWQmKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFN0cmluZz4gZ2V0
U3R5bGVTaGVldFRleHQoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0
SWQmKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHNldFN0
eWxlU2hlZXRUZXh0KGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldElk
JiwgY29uc3QgU3RyaW5nJiB0ZXh0KTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0
cmluZ09yPFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlPj4gc2V0U3R5bGVU
ZXh0KFJlZjxKU09OOjpPYmplY3Q+JiYgc3R5bGVJZCwgY29uc3QgU3RyaW5nJiB0ZXh0KTsKKyAg
ICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpDU1M6OkNTU1J1bGU+PiBzZXRSdWxlU2VsZWN0b3IoUmVmPEpTT046Ok9iamVjdD4mJiBy
dWxlSWQsIGNvbnN0IFN0cmluZyYgc2VsZWN0b3IpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0SWQ+IGNy
ZWF0ZVN0eWxlU2hlZXQoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6RnJhbWVJ
ZCYpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkNTUzo6Q1NTUnVsZT4+IGFkZFJ1bGUoY29uc3QgSW5zcGVjdG9yOjpQcm90
b2NvbDo6Q1NTOjpTdHlsZVNoZWV0SWQmLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yKTsKKyAgICBJ
bnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUHJvcGVydHlJbmZvPj4+IGdldFN1cHBvcnRlZENTU1By
b3BlcnRpZXMoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxK
U09OOjpBcnJheU9mPFN0cmluZz4+PiBnZXRTdXBwb3J0ZWRTeXN0ZW1Gb250RmFtaWx5TmFtZXMo
KTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGZvcmNlUHNl
dWRvU3RhdGUoSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQsIFJlZjxKU09OOjpBcnJh
eT4mJiBmb3JjZWRQc2V1ZG9DbGFzc2VzKTsKIAogICAgIC8vIEluc3BlY3RvclN0eWxlU2hlZXQ6
Okxpc3RlbmVyCi0gICAgdm9pZCBzdHlsZVNoZWV0Q2hhbmdlZChJbnNwZWN0b3JTdHlsZVNoZWV0
Kikgb3ZlcnJpZGU7CisgICAgdm9pZCBzdHlsZVNoZWV0Q2hhbmdlZChJbnNwZWN0b3JTdHlsZVNo
ZWV0Kik7CiAKICAgICAvLyBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24KICAgICB2b2lkIGRvY3Vt
ZW50RGV0YWNoZWQoRG9jdW1lbnQmKTsKQEAgLTExNCw3ICsxMTQsNyBAQCBwdWJsaWM6CiAgICAg
Ym9vbCBmb3JjZVBzZXVkb1N0YXRlKGNvbnN0IEVsZW1lbnQmLCBDU1NTZWxlY3Rvcjo6UHNldWRv
Q2xhc3NUeXBlKTsKIAogICAgIC8vIEluc3BlY3RvckRPTUFnZW50IGhvb2tzCi0gICAgdm9pZCBk
aWRSZW1vdmVET01Ob2RlKE5vZGUmLCBpbnQgbm9kZUlkKTsKKyAgICB2b2lkIGRpZFJlbW92ZURP
TU5vZGUoTm9kZSYsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkKTsKICAgICB2b2lk
IGRpZE1vZGlmeURPTUF0dHIoRWxlbWVudCYpOwogCiAgICAgdm9pZCByZXNldCgpOwpAQCAtMTI2
LDI4ICsxMjYsMjggQEAgcHJpdmF0ZToKICAgICBjbGFzcyBTZXRSdWxlU2VsZWN0b3JBY3Rpb247
CiAgICAgY2xhc3MgQWRkUnVsZUFjdGlvbjsKIAotICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcs
IFJlZlB0cjxJbnNwZWN0b3JTdHlsZVNoZWV0Pj4gSWRUb0luc3BlY3RvclN0eWxlU2hlZXQ7Cisg
ICAgdHlwZWRlZiBIYXNoTWFwPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldElk
LCBSZWZQdHI8SW5zcGVjdG9yU3R5bGVTaGVldD4+IElkVG9JbnNwZWN0b3JTdHlsZVNoZWV0Owog
ICAgIHR5cGVkZWYgSGFzaE1hcDxDU1NTdHlsZVNoZWV0KiwgUmVmUHRyPEluc3BlY3RvclN0eWxl
U2hlZXQ+PiBDU1NTdHlsZVNoZWV0VG9JbnNwZWN0b3JTdHlsZVNoZWV0OwogICAgIHR5cGVkZWYg
SGFzaE1hcDxSZWZQdHI8RG9jdW1lbnQ+LCBWZWN0b3I8UmVmUHRyPEluc3BlY3RvclN0eWxlU2hl
ZXQ+Pj4gRG9jdW1lbnRUb1ZpYUluc3BlY3RvclN0eWxlU2hlZXQ7IC8vICJ2aWEgaW5zcGVjdG9y
IiBzdHlsZXNoZWV0cwotICAgIHR5cGVkZWYgSGFzaE1hcDxpbnQsIHVuc2lnbmVkPiBOb2RlSWRU
b0ZvcmNlZFBzZXVkb1N0YXRlOworICAgIHR5cGVkZWYgSGFzaE1hcDxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpET006Ok5vZGVJZCwgdW5zaWduZWQ+IE5vZGVJZFRvRm9yY2VkUHNldWRvU3RhdGU7CiAK
ICAgICBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGUmIGFzSW5zcGVjdG9yU3R5bGVT
aGVldChTdHlsZWRFbGVtZW50Jik7Ci0gICAgRWxlbWVudCogZWxlbWVudEZvcklkKEVycm9yU3Ry
aW5nJiwgaW50IG5vZGVJZCk7CisgICAgRWxlbWVudCogZWxlbWVudEZvcklkKEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkVycm9yU3RyaW5nJiwgSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQp
OwogCiAgICAgdm9pZCBjb2xsZWN0QWxsU3R5bGVTaGVldHMoVmVjdG9yPEluc3BlY3RvclN0eWxl
U2hlZXQqPiYpOwogICAgIHZvaWQgY29sbGVjdEFsbERvY3VtZW50U3R5bGVTaGVldHMoRG9jdW1l
bnQmLCBWZWN0b3I8Q1NTU3R5bGVTaGVldCo+Jik7CiAgICAgdm9pZCBjb2xsZWN0U3R5bGVTaGVl
dHMoQ1NTU3R5bGVTaGVldCosIFZlY3RvcjxDU1NTdHlsZVNoZWV0Kj4mKTsKICAgICB2b2lkIHNl
dEFjdGl2ZVN0eWxlU2hlZXRzRm9yRG9jdW1lbnQoRG9jdW1lbnQmLCBWZWN0b3I8Q1NTU3R5bGVT
aGVldCo+JiBhY3RpdmVTdHlsZVNoZWV0cyk7CiAKLSAgICBTdHJpbmcgdW5iaW5kU3R5bGVTaGVl
dChJbnNwZWN0b3JTdHlsZVNoZWV0Kik7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpT
dHlsZVNoZWV0SWQgdW5iaW5kU3R5bGVTaGVldChJbnNwZWN0b3JTdHlsZVNoZWV0Kik7CiAgICAg
SW5zcGVjdG9yU3R5bGVTaGVldCogYmluZFN0eWxlU2hlZXQoQ1NTU3R5bGVTaGVldCopOwotICAg
IEluc3BlY3RvclN0eWxlU2hlZXQqIGFzc2VydFN0eWxlU2hlZXRGb3JJZChFcnJvclN0cmluZyYs
IGNvbnN0IFN0cmluZyYpOworICAgIEluc3BlY3RvclN0eWxlU2hlZXQqIGFzc2VydFN0eWxlU2hl
ZXRGb3JJZChJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZyYsIGNvbnN0IEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldElkJik7CiAgICAgSW5zcGVjdG9yU3R5bGVTaGVl
dCogY3JlYXRlSW5zcGVjdG9yU3R5bGVTaGVldEZvckRvY3VtZW50KERvY3VtZW50Jik7CiAgICAg
SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luIGRldGVjdE9yaWdpbihD
U1NTdHlsZVNoZWV0KiBwYWdlU3R5bGVTaGVldCwgRG9jdW1lbnQqIG93bmVyRG9jdW1lbnQpOwog
CiAgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUnVsZT4gYnVpbGRPYmpl
Y3RGb3JSdWxlKGNvbnN0IFN0eWxlUnVsZSosIFN0eWxlOjpSZXNvbHZlciYsIEVsZW1lbnQmKTsK
ICAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NSdWxlPiBidWlsZE9iamVj
dEZvclJ1bGUoQ1NTU3R5bGVSdWxlKik7Ci0gICAgUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVj
dG9yOjpQcm90b2NvbDo6Q1NTOjpSdWxlTWF0Y2g+PiBidWlsZEFycmF5Rm9yTWF0Y2hlZFJ1bGVM
aXN0KGNvbnN0IFZlY3RvcjxSZWZQdHI8Y29uc3QgU3R5bGVSdWxlPj4mLCBTdHlsZTo6UmVzb2x2
ZXImLCBFbGVtZW50JiwgUHNldWRvSWQpOworICAgIFJlZjxKU09OOjpBcnJheU9mPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkNTUzo6UnVsZU1hdGNoPj4gYnVpbGRBcnJheUZvck1hdGNoZWRSdWxlTGlz
dChjb25zdCBWZWN0b3I8UmVmUHRyPGNvbnN0IFN0eWxlUnVsZT4+JiwgU3R5bGU6OlJlc29sdmVy
JiwgRWxlbWVudCYsIFBzZXVkb0lkKTsKICAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
Q1NTOjpDU1NTdHlsZT4gYnVpbGRPYmplY3RGb3JBdHRyaWJ1dGVzU3R5bGUoU3R5bGVkRWxlbWVu
dCYpOwogCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5z
cGVjdG9yQ2FudmFzQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9J
bnNwZWN0b3JDYW52YXNBZ2VudC5jcHAKaW5kZXggZDA5MTY4Mjk0MDBmOTQ2ZjA4NjAwOTU4YWE0
NDNlNTcwNzNmZThhYS4uYTg1MDM4ZjVjMDY3N2U3ZDkyODE5NGRiN2QwNDA5YTk0OGJjOTZiOSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDYW52
YXNBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0
b3JDYW52YXNBZ2VudC5jcHAKQEAgLTEwMiw4ICsxMDIsNyBAQCB2b2lkIEluc3BlY3RvckNhbnZh
c0FnZW50OjpkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9udGVuZFJv
dXRlcgogCiB2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5k
QmFja2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24pCiB7Ci0gICAgRXJyb3JTdHJpbmcg
aWdub3JlZDsKLSAgICBkaXNhYmxlKGlnbm9yZWQpOworICAgIGRpc2FibGUoKTsKIH0KIAogdm9p
ZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6ZGlzY2FyZEFnZW50KCkKQEAgLTExMSwxMCArMTEwLDEw
IEBAIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmRpc2NhcmRBZ2VudCgpCiAgICAgcmVzZXQo
KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6ZW5hYmxlKEVycm9yU3RyaW5nJikK
K1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckNhbnZhc0FnZW50OjplbmFi
bGUoKQogewogICAgIGlmIChtX2luc3RydW1lbnRpbmdBZ2VudHMuZW5hYmxlZENhbnZhc0FnZW50
KCkgPT0gdGhpcykKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4geyB9OwogCiAgICAg
bV9pbnN0cnVtZW50aW5nQWdlbnRzLnNldEVuYWJsZWRDYW52YXNBZ2VudCh0aGlzKTsKIApAQCAt
MTcwLDczICsxNjksODQgQEAgdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6ZW5hYmxlKEVycm9y
U3RyaW5nJikKICAgICAgICAgfQogICAgIH0KICNlbmRpZiAvLyBFTkFCTEUoV0VCR1BVKQorCisg
ICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6ZGlzYWJsZShF
cnJvclN0cmluZyYpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JDYW52
YXNBZ2VudDo6ZGlzYWJsZSgpCiB7CiAgICAgbV9pbnN0cnVtZW50aW5nQWdlbnRzLnNldEVuYWJs
ZWRDYW52YXNBZ2VudChudWxscHRyKTsKIAogICAgIHJlc2V0KCk7CiAKICAgICBtX3JlY29yZGlu
Z0F1dG9DYXB0dXJlRnJhbWVDb3VudCA9IFdURjo6bnVsbG9wdDsKKworICAgIHJldHVybiB7IH07
CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnJlcXVlc3ROb2RlKEVycm9yU3RyaW5n
JiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBjYW52YXNJZCwgaW50KiBub2RlSWQpCitQcm90
b2NvbDo6RXJyb3JTdHJpbmdPcjxQcm90b2NvbDo6RE9NOjpOb2RlSWQ+IEluc3BlY3RvckNhbnZh
c0FnZW50OjpyZXF1ZXN0Tm9kZShjb25zdCBQcm90b2NvbDo6Q2FudmFzOjpDYW52YXNJZCYgY2Fu
dmFzSWQpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAgICAg
YXV0byBpbnNwZWN0b3JDYW52YXMgPSBhc3NlcnRJbnNwZWN0b3JDYW52YXMoZXJyb3JTdHJpbmcs
IGNhbnZhc0lkKTsKICAgICBpZiAoIWluc3BlY3RvckNhbnZhcykKLSAgICAgICAgcmV0dXJuOwor
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCiAgICAgYXV0byog
bm9kZSA9IGluc3BlY3RvckNhbnZhcy0+Y2FudmFzRWxlbWVudCgpOwotICAgIGlmICghbm9kZSkg
ewotICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIGVsZW1lbnQgb2YgY2FudmFzIGZvciBn
aXZlbiBjYW52YXNJZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoIW5vZGUp
CisgICAgICAgIG1ha2VVbmV4cGVjdGVkKCJNaXNzaW5nIGVsZW1lbnQgb2YgY2FudmFzIGZvciBn
aXZlbiBjYW52YXNJZCJfcyk7CiAKICAgICAvLyBGSVhNRTogPGh0dHBzOi8vd2Via2l0Lm9yZy9i
LzIxMzQ5OT4gV2ViIEluc3BlY3RvcjogYWxsb3cgRE9NIG5vZGVzIHRvIGJlIGluc3RydW1lbnRl
ZCBhdCBhbnkgcG9pbnQsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGUgbWFpbiBkb2N1bWVudCBo
YXMgYWxzbyBiZWVuIGluc3RydW1lbnRlZAogICAgIGludCBkb2N1bWVudE5vZGVJZCA9IG1faW5z
dHJ1bWVudGluZ0FnZW50cy5wZXJzaXN0ZW50RE9NQWdlbnQoKS0+Ym91bmROb2RlSWQoJm5vZGUt
PmRvY3VtZW50KCkpOwotICAgIGlmICghZG9jdW1lbnROb2RlSWQpIHsKLSAgICAgICAgZXJyb3JT
dHJpbmcgPSAiRG9jdW1lbnQgbXVzdCBoYXZlIGJlZW4gcmVxdWVzdGVkIl9zOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQorICAgIGlmICghZG9jdW1lbnROb2RlSWQpCisgICAgICAgIG1ha2VVbmV4
cGVjdGVkKCJEb2N1bWVudCBtdXN0IGhhdmUgYmVlbiByZXF1ZXN0ZWQiX3MpOwogCi0gICAgKm5v
ZGVJZCA9IG1faW5zdHJ1bWVudGluZ0FnZW50cy5wZXJzaXN0ZW50RE9NQWdlbnQoKS0+cHVzaE5v
ZGVUb0Zyb250ZW5kKGVycm9yU3RyaW5nLCBkb2N1bWVudE5vZGVJZCwgbm9kZSk7CisgICAgcmV0
dXJuIG1faW5zdHJ1bWVudGluZ0FnZW50cy5wZXJzaXN0ZW50RE9NQWdlbnQoKS0+cHVzaE5vZGVU
b0Zyb250ZW5kKGVycm9yU3RyaW5nLCBkb2N1bWVudE5vZGVJZCwgbm9kZSk7CiB9CiAKLXZvaWQg
SW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnJlcXVlc3RDb250ZW50KEVycm9yU3RyaW5nJiBlcnJvclN0
cmluZywgY29uc3QgU3RyaW5nJiBjYW52YXNJZCwgU3RyaW5nKiBjb250ZW50KQorUHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8U3RyaW5nPiBJbnNwZWN0b3JDYW52YXNBZ2VudDo6cmVxdWVzdENvbnRl
bnQoY29uc3QgUHJvdG9jb2w6OkNhbnZhczo6Q2FudmFzSWQmIGNhbnZhc0lkKQogeworICAgIFBy
b3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIGF1dG8gaW5zcGVjdG9yQ2Fu
dmFzID0gYXNzZXJ0SW5zcGVjdG9yQ2FudmFzKGVycm9yU3RyaW5nLCBjYW52YXNJZCk7CiAgICAg
aWYgKCFpbnNwZWN0b3JDYW52YXMpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1h
a2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAotICAgICpjb250ZW50ID0gaW5zcGVjdG9yQ2Fu
dmFzLT5nZXRDYW52YXNDb250ZW50QXNEYXRhVVJMKGVycm9yU3RyaW5nKTsKKyAgICBhdXRvIHJl
c3VsdCA9IGluc3BlY3RvckNhbnZhcy0+Z2V0Q2FudmFzQ29udGVudEFzRGF0YVVSTChlcnJvclN0
cmluZyk7CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChl
cnJvclN0cmluZyk7CisKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIEluc3BlY3RvckNh
bnZhc0FnZW50OjpyZXF1ZXN0Q2xpZW50Tm9kZXMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBj
b25zdCBTdHJpbmcmIGNhbnZhc0lkLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxpbnQ+PiYgY2xpZW50
Tm9kZUlkcykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPFByb3Rv
Y29sOjpET006Ok5vZGVJZD4+PiBJbnNwZWN0b3JDYW52YXNBZ2VudDo6cmVxdWVzdENsaWVudE5v
ZGVzKGNvbnN0IFByb3RvY29sOjpDYW52YXM6OkNhbnZhc0lkJiBjYW52YXNJZCkKIHsKKyAgICBQ
cm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBhdXRvKiBkb21BZ2VudCA9
IG1faW5zdHJ1bWVudGluZ0FnZW50cy5wZXJzaXN0ZW50RE9NQWdlbnQoKTsKLSAgICBpZiAoIWRv
bUFnZW50KSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIkRPTSBkb21haW4gbXVzdCBiZSBlbmFi
bGVkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghZG9tQWdlbnQpCisgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiRE9NIGRvbWFpbiBtdXN0IGJlIGVuYWJsZWQiX3Mp
OwogCiAgICAgYXV0byBpbnNwZWN0b3JDYW52YXMgPSBhc3NlcnRJbnNwZWN0b3JDYW52YXMoZXJy
b3JTdHJpbmcsIGNhbnZhc0lkKTsKICAgICBpZiAoIWluc3BlY3RvckNhbnZhcykKLSAgICAgICAg
cmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCi0g
ICAgY2xpZW50Tm9kZUlkcyA9IEpTT046OkFycmF5T2Y8aW50Pjo6Y3JlYXRlKCk7CisgICAgYXV0
byBjbGllbnROb2RlSWRzID0gSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6RE9NOjpOb2RlSWQ+Ojpj
cmVhdGUoKTsKICAgICBmb3IgKGF1dG8mIGNsaWVudE5vZGUgOiBpbnNwZWN0b3JDYW52YXMtPmNs
aWVudE5vZGVzKCkpIHsKICAgICAgICAgLy8gRklYTUU6IDxodHRwczovL3dlYmtpdC5vcmcvYi8y
MTM0OTk+IFdlYiBJbnNwZWN0b3I6IGFsbG93IERPTSBub2RlcyB0byBiZSBpbnN0cnVtZW50ZWQg
YXQgYW55IHBvaW50LCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlIG1haW4gZG9jdW1lbnQgaGFz
IGFsc28gYmVlbiBpbnN0cnVtZW50ZWQKICAgICAgICAgaWYgKGF1dG8gZG9jdW1lbnROb2RlSWQg
PSBkb21BZ2VudC0+Ym91bmROb2RlSWQoJmNsaWVudE5vZGUtPmRvY3VtZW50KCkpKQogICAgICAg
ICAgICAgY2xpZW50Tm9kZUlkcy0+YWRkSXRlbShkb21BZ2VudC0+cHVzaE5vZGVUb0Zyb250ZW5k
KGVycm9yU3RyaW5nLCBkb2N1bWVudE5vZGVJZCwgY2xpZW50Tm9kZSkpOwogICAgIH0KKyAgICBy
ZXR1cm4gV1RGTW92ZShjbGllbnROb2RlSWRzKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDYW52YXNB
Z2VudDo6cmVzb2x2ZUNvbnRleHQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJp
bmcmIGNhbnZhc0lkLCBjb25zdCBTdHJpbmcqIG9iamVjdEdyb3VwLCBSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0KQorUHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8UmVmPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+PiBJbnNwZWN0
b3JDYW52YXNBZ2VudDo6cmVzb2x2ZUNvbnRleHQoY29uc3QgUHJvdG9jb2w6OkNhbnZhczo6Q2Fu
dmFzSWQmIGNhbnZhc0lkLCBjb25zdCBTdHJpbmcmIG9iamVjdEdyb3VwKQogeworICAgIFByb3Rv
Y29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIGF1dG8gaW5zcGVjdG9yQ2FudmFz
ID0gYXNzZXJ0SW5zcGVjdG9yQ2FudmFzKGVycm9yU3RyaW5nLCBjYW52YXNJZCk7CiAgICAgaWYg
KCFpbnNwZWN0b3JDYW52YXMpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgIGF1dG8qIHN0YXRlID0gaW5zcGVjdG9yQ2Fu
dmFzLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmV4ZWNTdGF0ZSgpOwogICAgIGF1dG8gaW5q
ZWN0ZWRTY3JpcHQgPSBtX2luamVjdGVkU2NyaXB0TWFuYWdlci5pbmplY3RlZFNjcmlwdEZvcihz
dGF0ZSk7CkBAIC0yNDYsMTIyICsyNTYsMTI5IEBAIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6
OnJlc29sdmVDb250ZXh0KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nCiAK
ICAgICBpZiAoIXZhbHVlKSB7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAg
ICBlcnJvclN0cmluZyA9ICJJbnRlcm5hbCBlcnJvcjogdW5rbm93biBjb250ZXh0IG9mIGNhbnZh
cyBmb3IgZ2l2ZW4gY2FudmFzSWQiX3M7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJu
IG1ha2VVbmV4cGVjdGVkKCJJbnRlcm5hbCBlcnJvcjogdW5rbm93biBjb250ZXh0IG9mIGNhbnZh
cyBmb3IgZ2l2ZW4gY2FudmFzSWQiX3MpOwogICAgIH0KIAotICAgIFN0cmluZyBvYmplY3RHcm91
cE5hbWUgPSBvYmplY3RHcm91cCA/ICpvYmplY3RHcm91cCA6IFN0cmluZygpOwotICAgIHJlc3Vs
dCA9IGluamVjdGVkU2NyaXB0LndyYXBPYmplY3QodmFsdWUsIG9iamVjdEdyb3VwTmFtZSk7Cisg
ICAgYXV0byByZXN1bHQgPSBpbmplY3RlZFNjcmlwdC53cmFwT2JqZWN0KHZhbHVlLCBvYmplY3RH
cm91cCk7CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgi
SW50ZXJuYWwgZXJyb3I6IHVuYWJsZSB0byBjYXN0IENvbnRleHQiKTsKKworICAgIHJldHVybiBy
ZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6
c2V0UmVjb3JkaW5nQXV0b0NhcHR1cmVGcmFtZUNvdW50KEVycm9yU3RyaW5nJiwgaW50IGNvdW50
KQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnNl
dFJlY29yZGluZ0F1dG9DYXB0dXJlRnJhbWVDb3VudChpbnQgY291bnQpCiB7CiAgICAgaWYgKGNv
dW50ID4gMCkKICAgICAgICAgbV9yZWNvcmRpbmdBdXRvQ2FwdHVyZUZyYW1lQ291bnQgPSBjb3Vu
dDsKICAgICBlbHNlCiAgICAgICAgIG1fcmVjb3JkaW5nQXV0b0NhcHR1cmVGcmFtZUNvdW50ID0g
V1RGOjpudWxsb3B0OworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ2FudmFz
QWdlbnQ6OnN0YXJ0UmVjb3JkaW5nKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3Ry
aW5nJiBjYW52YXNJZCwgY29uc3QgaW50KiBmcmFtZUNvdW50LCBjb25zdCBpbnQqIG1lbW9yeUxp
bWl0KQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yQ2FudmFzQWdlbnQ6
OnN0YXJ0UmVjb3JkaW5nKGNvbnN0IFByb3RvY29sOjpDYW52YXM6OkNhbnZhc0lkJiBjYW52YXNJ
ZCwgT3B0aW9uYWw8aW50PiYmIGZyYW1lQ291bnQsIE9wdGlvbmFsPGludD4mJiBtZW1vcnlMaW1p
dCkKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBhdXRv
IGluc3BlY3RvckNhbnZhcyA9IGFzc2VydEluc3BlY3RvckNhbnZhcyhlcnJvclN0cmluZywgY2Fu
dmFzSWQpOwogICAgIGlmICghaW5zcGVjdG9yQ2FudmFzKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICAvLyBGSVhNRTogPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzIwMTY1MT4gV2ViIEluc3BlY3Rvcjog
Q2FudmFzOiBzdXBwb3J0IGNhbnZhcyByZWNvcmRpbmdzIGZvciBXZWJHUFVEZXZpY2UKKyAgICAg
ICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgIGF1dG8qIGNvbnRl
eHQgPSBpbnNwZWN0b3JDYW52YXMtPmNhbnZhc0NvbnRleHQoKTsKLSAgICBpZiAoIWNvbnRleHQp
Ci0gICAgICAgIHJldHVybjsKIAotICAgIGlmIChjb250ZXh0LT5jYWxsVHJhY2luZ0FjdGl2ZSgp
KSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIkFscmVhZHkgcmVjb3JkaW5nIGNhbnZhcyJfczsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICAvLyBGSVhNRTogPGh0dHBzOi8vd2Via2l0Lm9y
Zy9iLzIwMTY1MT4gV2ViIEluc3BlY3RvcjogQ2FudmFzOiBzdXBwb3J0IGNhbnZhcyByZWNvcmRp
bmdzIGZvciBXZWJHUFVEZXZpY2UKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJldHVybiBt
YWtlVW5leHBlY3RlZCgiTm90IHN1cHBvcnRlZCJfcyk7CisKKyAgICBpZiAoY29udGV4dC0+Y2Fs
bFRyYWNpbmdBY3RpdmUoKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJBbHJlYWR5
IHJlY29yZGluZyBjYW52YXMiX3MpOwogCiAgICAgUmVjb3JkaW5nT3B0aW9ucyByZWNvcmRpbmdP
cHRpb25zOwogICAgIGlmIChmcmFtZUNvdW50KQogICAgICAgICByZWNvcmRpbmdPcHRpb25zLmZy
YW1lQ291bnQgPSAqZnJhbWVDb3VudDsKICAgICBpZiAobWVtb3J5TGltaXQpCiAgICAgICAgIHJl
Y29yZGluZ09wdGlvbnMubWVtb3J5TGltaXQgPSAqbWVtb3J5TGltaXQ7Ci0gICAgc3RhcnRSZWNv
cmRpbmcoKmluc3BlY3RvckNhbnZhcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6UmVjb3JkaW5nOjpJ
bml0aWF0b3I6OkZyb250ZW5kLCBXVEZNb3ZlKHJlY29yZGluZ09wdGlvbnMpKTsKKyAgICBzdGFy
dFJlY29yZGluZygqaW5zcGVjdG9yQ2FudmFzLCBQcm90b2NvbDo6UmVjb3JkaW5nOjpJbml0aWF0
b3I6OkZyb250ZW5kLCBXVEZNb3ZlKHJlY29yZGluZ09wdGlvbnMpKTsKKworICAgIHJldHVybiB7
IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnN0b3BSZWNvcmRpbmcoRXJyb3JT
dHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGNhbnZhc0lkKQorUHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnN0b3BSZWNvcmRpbmcoY29u
c3QgUHJvdG9jb2w6OkNhbnZhczo6Q2FudmFzSWQmIGNhbnZhc0lkKQogeworICAgIFByb3RvY29s
OjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIGF1dG8gaW5zcGVjdG9yQ2FudmFzID0g
YXNzZXJ0SW5zcGVjdG9yQ2FudmFzKGVycm9yU3RyaW5nLCBjYW52YXNJZCk7CiAgICAgaWYgKCFp
bnNwZWN0b3JDYW52YXMpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEZJWE1FOiA8aHR0cHM6
Ly93ZWJraXQub3JnL2IvMjAxNjUxPiBXZWIgSW5zcGVjdG9yOiBDYW52YXM6IHN1cHBvcnQgY2Fu
dmFzIHJlY29yZGluZ3MgZm9yIFdlYkdQVURldmljZQorICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoZXJyb3JTdHJpbmcpOwogCiAgICAgYXV0byogY29udGV4dCA9IGluc3BlY3RvckNhbnZh
cy0+Y2FudmFzQ29udGV4dCgpOwotICAgIGlmICghY29udGV4dCkKLSAgICAgICAgcmV0dXJuOwog
Ci0gICAgaWYgKCFjb250ZXh0LT5jYWxsVHJhY2luZ0FjdGl2ZSgpKSB7Ci0gICAgICAgIGVycm9y
U3RyaW5nID0gIk5vdCByZWNvcmRpbmcgY2FudmFzIl9zOwotICAgICAgICByZXR1cm47Ci0gICAg
fQorICAgIC8vIEZJWE1FOiA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMjAxNjUxPiBXZWIgSW5zcGVj
dG9yOiBDYW52YXM6IHN1cHBvcnQgY2FudmFzIHJlY29yZGluZ3MgZm9yIFdlYkdQVURldmljZQor
ICAgIGlmICghY29udGV4dCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJOb3Qgc3Vw
cG9ydGVkIl9zKTsKKworICAgIGlmICghY29udGV4dC0+Y2FsbFRyYWNpbmdBY3RpdmUoKSkKKyAg
ICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJOb3QgcmVjb3JkaW5nIGNhbnZhcyJfcyk7CiAK
ICAgICBkaWRGaW5pc2hSZWNvcmRpbmdDYW52YXNGcmFtZSgqY29udGV4dCwgdHJ1ZSk7CisKKyAg
ICByZXR1cm4geyB9OwogfQogCiAjaWYgRU5BQkxFKFdFQkdMKSB8fCBFTkFCTEUoV0VCR1BVKQot
dm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6cmVxdWVzdFNoYWRlclNvdXJjZShFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgcHJvZ3JhbUlkLCBjb25zdCBTdHJpbmcmIHNo
YWRlclR5cGVTdHJpbmcsIFN0cmluZyogb3V0U291cmNlKQorUHJvdG9jb2w6OkVycm9yU3RyaW5n
T3I8U3RyaW5nPiBJbnNwZWN0b3JDYW52YXNBZ2VudDo6cmVxdWVzdFNoYWRlclNvdXJjZShjb25z
dCBQcm90b2NvbDo6Q2FudmFzOjpQcm9ncmFtSWQmIHByb2dyYW1JZCwgUHJvdG9jb2w6OkNhbnZh
czo6U2hhZGVyVHlwZSBzaGFkZXJUeXBlKQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBl
cnJvclN0cmluZzsKKwogICAgIGF1dG8gaW5zcGVjdG9yUHJvZ3JhbSA9IGFzc2VydEluc3BlY3Rv
clByb2dyYW0oZXJyb3JTdHJpbmcsIHByb2dyYW1JZCk7CiAgICAgaWYgKCFpbnNwZWN0b3JQcm9n
cmFtKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJv
clN0cmluZyk7CiAKLSAgICBhdXRvIHNoYWRlclR5cGUgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpJ
bnNwZWN0b3JIZWxwZXJzOjpwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90
b2NvbDo6Q2FudmFzOjpTaGFkZXJUeXBlPihzaGFkZXJUeXBlU3RyaW5nKTsKLSAgICBpZiAoIXNo
YWRlclR5cGUpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSBtYWtlU3RyaW5nKCJVbmtub3duIHNo
YWRlclR5cGU6ICJfcywgc2hhZGVyVHlwZVN0cmluZyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
CisgICAgYXV0byBzb3VyY2UgPSBpbnNwZWN0b3JQcm9ncmFtLT5yZXF1ZXN0U2hhZGVyU291cmNl
KHNoYWRlclR5cGUpOworICAgIGlmICghc291cmNlKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoIk1pc3Npbmcgc2hhZGVyIG9mIGdpdmVuIHNoYWRlclR5cGUgZm9yIGdpdmVuIHByb2dy
YW1JZCJfcyk7CiAKLSAgICBhdXRvIHNvdXJjZSA9IGluc3BlY3RvclByb2dyYW0tPnJlcXVlc3RT
aGFkZXJTb3VyY2Uoc2hhZGVyVHlwZS52YWx1ZSgpKTsKLSAgICBpZiAoIXNvdXJjZSkgewotICAg
ICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIHNoYWRlciBvZiBnaXZlbiBzaGFkZXJUeXBlIGZv
ciBnaXZlbiBwcm9ncmFtSWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAqb3V0
U291cmNlID0gc291cmNlOworICAgIHJldHVybiBzb3VyY2U7CiB9CiAKLXZvaWQgSW5zcGVjdG9y
Q2FudmFzQWdlbnQ6OnVwZGF0ZVNoYWRlcihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0
IFN0cmluZyYgcHJvZ3JhbUlkLCBjb25zdCBTdHJpbmcmIHNoYWRlclR5cGVTdHJpbmcsIGNvbnN0
IFN0cmluZyYgc291cmNlKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9y
Q2FudmFzQWdlbnQ6OnVwZGF0ZVNoYWRlcihjb25zdCBQcm90b2NvbDo6Q2FudmFzOjpQcm9ncmFt
SWQmIHByb2dyYW1JZCwgUHJvdG9jb2w6OkNhbnZhczo6U2hhZGVyVHlwZSBzaGFkZXJUeXBlLCBj
b25zdCBTdHJpbmcmIHNvdXJjZSkKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JT
dHJpbmc7CisKICAgICBhdXRvIGluc3BlY3RvclByb2dyYW0gPSBhc3NlcnRJbnNwZWN0b3JQcm9n
cmFtKGVycm9yU3RyaW5nLCBwcm9ncmFtSWQpOwogICAgIGlmICghaW5zcGVjdG9yUHJvZ3JhbSkK
LSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJp
bmcpOwogCi0gICAgYXV0byBzaGFkZXJUeXBlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6SW5zcGVj
dG9ySGVscGVyczo6cGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkNhbnZhczo6U2hhZGVyVHlwZT4oc2hhZGVyVHlwZVN0cmluZyk7Ci0gICAgaWYgKCFzaGFkZXJU
eXBlKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gbWFrZVN0cmluZygiVW5rbm93biBzaGFkZXJU
eXBlOiAiX3MsIHNoYWRlclR5cGVTdHJpbmcpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAg
IGlmICghaW5zcGVjdG9yUHJvZ3JhbS0+dXBkYXRlU2hhZGVyKHNoYWRlclR5cGUsIHNvdXJjZSkp
CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiRmFpbGVkIHRvIHVwZGF0ZSBzaGFkZXIg
b2YgZ2l2ZW4gc2hhZGVyVHlwZSBmb3IgZ2l2ZW4gcHJvZ3JhbUlkIl9zKTsKIAotICAgIGlmICgh
aW5zcGVjdG9yUHJvZ3JhbS0+dXBkYXRlU2hhZGVyKHNoYWRlclR5cGUudmFsdWUoKSwgc291cmNl
KSkKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiRmFpbGVkIHRvIHVwZGF0ZSBzaGFkZXIgb2YgZ2l2
ZW4gc2hhZGVyVHlwZSBmb3IgZ2l2ZW4gcHJvZ3JhbUlkIl9zOworICAgIHJldHVybiB7IH07CiB9
CiAKICNpZiBFTkFCTEUoV0VCR0wpCi12b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjpzZXRTaGFk
ZXJQcm9ncmFtRGlzYWJsZWQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcm
IHByb2dyYW1JZCwgYm9vbCBkaXNhYmxlZCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+
IEluc3BlY3RvckNhbnZhc0FnZW50OjpzZXRTaGFkZXJQcm9ncmFtRGlzYWJsZWQoY29uc3QgUHJv
dG9jb2w6OkNhbnZhczo6UHJvZ3JhbUlkJiBwcm9ncmFtSWQsIGJvb2wgZGlzYWJsZWQpCiB7Cisg
ICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAgICAgYXV0byBpbnNwZWN0
b3JQcm9ncmFtID0gYXNzZXJ0SW5zcGVjdG9yUHJvZ3JhbShlcnJvclN0cmluZywgcHJvZ3JhbUlk
KTsKICAgICBpZiAoIWluc3BlY3RvclByb2dyYW0pCi0gICAgICAgIHJldHVybjsKKyAgICAgICAg
cmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgIGluc3BlY3RvclByb2dy
YW0tPnNldERpc2FibGVkKGRpc2FibGVkKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQg
SW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnNldFNoYWRlclByb2dyYW1IaWdobGlnaHRlZChFcnJvclN0
cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgcHJvZ3JhbUlkLCBib29sIGhpZ2hsaWdo
dGVkKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yQ2FudmFzQWdlbnQ6
OnNldFNoYWRlclByb2dyYW1IaWdobGlnaHRlZChjb25zdCBQcm90b2NvbDo6Q2FudmFzOjpQcm9n
cmFtSWQmIHByb2dyYW1JZCwgYm9vbCBoaWdobGlnaHRlZCkKIHsKKyAgICBQcm90b2NvbDo6RXJy
b3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBhdXRvIGluc3BlY3RvclByb2dyYW0gPSBhc3Nl
cnRJbnNwZWN0b3JQcm9ncmFtKGVycm9yU3RyaW5nLCBwcm9ncmFtSWQpOwogICAgIGlmICghaW5z
cGVjdG9yUHJvZ3JhbSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoZXJyb3JTdHJpbmcpOwogCiAgICAgaW5zcGVjdG9yUHJvZ3JhbS0+c2V0SGlnaGxpZ2h0
ZWQoaGlnaGxpZ2h0ZWQpOworCisgICAgcmV0dXJuIHsgfTsKIH0KICNlbmRpZiAvLyBFTkFCTEUo
V0VCR0wpCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKSB8fCBFTkFCTEUoV0VCR1BVKQpAQCAtNDEz
LDcgKzQzMCw3IEBAIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmRpZENyZWF0ZUNhbnZhc1Jl
bmRlcmluZ0NvbnRleHQoQ2FudmFzUmVuZGVyaW5nQ29udGV4CiAgICAgaWYgKG1fcmVjb3JkaW5n
QXV0b0NhcHR1cmVGcmFtZUNvdW50KSB7CiAgICAgICAgIFJlY29yZGluZ09wdGlvbnMgcmVjb3Jk
aW5nT3B0aW9uczsKICAgICAgICAgcmVjb3JkaW5nT3B0aW9ucy5mcmFtZUNvdW50ID0gbV9yZWNv
cmRpbmdBdXRvQ2FwdHVyZUZyYW1lQ291bnQudmFsdWUoKTsKLSAgICAgICAgc3RhcnRSZWNvcmRp
bmcoaW5zcGVjdG9yQ2FudmFzLCBJbnNwZWN0b3I6OlByb3RvY29sOjpSZWNvcmRpbmc6OkluaXRp
YXRvcjo6QXV0b0NhcHR1cmUsIFdURk1vdmUocmVjb3JkaW5nT3B0aW9ucykpOworICAgICAgICBz
dGFydFJlY29yZGluZyhpbnNwZWN0b3JDYW52YXMsIFByb3RvY29sOjpSZWNvcmRpbmc6OkluaXRp
YXRvcjo6QXV0b0NhcHR1cmUsIFdURk1vdmUocmVjb3JkaW5nT3B0aW9ucykpOwogICAgIH0KIH0K
IApAQCAtNTczLDcgKzU5MCw3IEBAIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmNvbnNvbGVT
dGFydFJlY29yZGluZ0NhbnZhcyhDYW52YXNSZW5kZXJpbmdDb250ZXh0JiBjCiAgICAgICAgIGlm
IChKU0M6OkpTVmFsdWUgb3B0aW9uTmFtZSA9IG9wdGlvbnMtPmdldCgmZXhlYywgSlNDOjpJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAibmFtZSIpKSkKICAgICAgICAgICAgIHJlY29yZGluZ09w
dGlvbnMubmFtZSA9IG9wdGlvbk5hbWUudG9XVEZTdHJpbmcoJmV4ZWMpOwogICAgIH0KLSAgICBz
dGFydFJlY29yZGluZygqaW5zcGVjdG9yQ2FudmFzLCBJbnNwZWN0b3I6OlByb3RvY29sOjpSZWNv
cmRpbmc6OkluaXRpYXRvcjo6Q29uc29sZSwgV1RGTW92ZShyZWNvcmRpbmdPcHRpb25zKSk7Cisg
ICAgc3RhcnRSZWNvcmRpbmcoKmluc3BlY3RvckNhbnZhcywgUHJvdG9jb2w6OlJlY29yZGluZzo6
SW5pdGlhdG9yOjpDb25zb2xlLCBXVEZNb3ZlKHJlY29yZGluZ09wdGlvbnMpKTsKIH0KIAogdm9p
ZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6Y29uc29sZVN0b3BSZWNvcmRpbmdDYW52YXMoQ2FudmFz
UmVuZGVyaW5nQ29udGV4dCYgY29udGV4dCkKQEAgLTY5OCw3ICs3MTUsNyBAQCB2b2lkIEluc3Bl
Y3RvckNhbnZhc0FnZW50Ojp3aWxsRGVzdHJveVdlYkdQVVBpcGVsaW5lKFdlYkdQVVBpcGVsaW5l
JiBwaXBlbGluZSkKIH0KICNlbmRpZiAvLyBFTkFCTEUoV0VCR1BVKQogCi12b2lkIEluc3BlY3Rv
ckNhbnZhc0FnZW50OjpzdGFydFJlY29yZGluZyhJbnNwZWN0b3JDYW52YXMmIGluc3BlY3RvckNh
bnZhcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6UmVjb3JkaW5nOjpJbml0aWF0b3IgaW5pdGlhdG9y
LCBSZWNvcmRpbmdPcHRpb25zJiYgcmVjb3JkaW5nT3B0aW9ucykKK3ZvaWQgSW5zcGVjdG9yQ2Fu
dmFzQWdlbnQ6OnN0YXJ0UmVjb3JkaW5nKEluc3BlY3RvckNhbnZhcyYgaW5zcGVjdG9yQ2FudmFz
LCBQcm90b2NvbDo6UmVjb3JkaW5nOjpJbml0aWF0b3IgaW5pdGlhdG9yLCBSZWNvcmRpbmdPcHRp
b25zJiYgcmVjb3JkaW5nT3B0aW9ucykKIHsKICAgICBhdXRvKiBjb250ZXh0ID0gaW5zcGVjdG9y
Q2FudmFzLmNhbnZhc0NvbnRleHQoKTsKICAgICBBU1NFUlQoY29udGV4dCk7CkBAIC04NDAsNyAr
ODU3LDcgQEAgdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6dW5iaW5kQ2FudmFzKEluc3BlY3Rv
ckNhbnZhcyYgaW5zcGVjdG9yQ2FudmFzKQogICAgICAgICBtX2NhbnZhc0Rlc3Ryb3llZFRpbWVy
LnN0YXJ0T25lU2hvdCgwX3MpOwogfQogCi1SZWZQdHI8SW5zcGVjdG9yQ2FudmFzPiBJbnNwZWN0
b3JDYW52YXNBZ2VudDo6YXNzZXJ0SW5zcGVjdG9yQ2FudmFzKEVycm9yU3RyaW5nJiBlcnJvclN0
cmluZywgY29uc3QgU3RyaW5nJiBjYW52YXNJZCkKK1JlZlB0cjxJbnNwZWN0b3JDYW52YXM+IElu
c3BlY3RvckNhbnZhc0FnZW50Ojphc3NlcnRJbnNwZWN0b3JDYW52YXMoUHJvdG9jb2w6OkVycm9y
U3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBjYW52YXNJZCkKIHsKICAgICBhdXRv
IGluc3BlY3RvckNhbnZhcyA9IG1faWRlbnRpZmllclRvSW5zcGVjdG9yQ2FudmFzLmdldChjYW52
YXNJZCk7CiAgICAgaWYgKCFpbnNwZWN0b3JDYW52YXMpIHsKQEAgLTg4NSw3ICs5MDIsNyBAQCB2
b2lkIEluc3BlY3RvckNhbnZhc0FnZW50Ojp1bmJpbmRQcm9ncmFtKEluc3BlY3RvclNoYWRlclBy
b2dyYW0mIGluc3BlY3RvclByb2dyYQogICAgICAgICBtX3Byb2dyYW1EZXN0cm95ZWRUaW1lci5z
dGFydE9uZVNob3QoMF9zKTsKIH0KIAotUmVmUHRyPEluc3BlY3RvclNoYWRlclByb2dyYW0+IElu
c3BlY3RvckNhbnZhc0FnZW50Ojphc3NlcnRJbnNwZWN0b3JQcm9ncmFtKEVycm9yU3RyaW5nJiBl
cnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBwcm9ncmFtSWQpCitSZWZQdHI8SW5zcGVjdG9yU2hh
ZGVyUHJvZ3JhbT4gSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmFzc2VydEluc3BlY3RvclByb2dyYW0o
UHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBwcm9ncmFt
SWQpCiB7CiAgICAgYXV0byBpbnNwZWN0b3JQcm9ncmFtID0gbV9pZGVudGlmaWVyVG9JbnNwZWN0
b3JQcm9ncmFtLmdldChwcm9ncmFtSWQpOwogICAgIGlmICghaW5zcGVjdG9yUHJvZ3JhbSkgewpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDYW52
YXNBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDYW52
YXNBZ2VudC5oCmluZGV4IDBlZjFhZWZiNjQ3ZWFkOTliN2QwZWIyNDNmZDBiNDA4Y2U0NWI2MGYu
Ljg2YmRiNTEyNTY5YTMxMWY3YTI1MDg5NWU4ZmZiYzlkZDllYmNkYzAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ2FudmFzQWdlbnQuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNhbnZhc0FnZW50LmgK
QEAgLTU3LDQzICs1Nyw0MSBAQCBjbGFzcyBXZWJHUFVTd2FwQ2hhaW47CiAjZW5kaWYgLy8gRU5B
QkxFKFdFQkdQVSkKICNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpIHx8IEVOQUJMRShXRUJHUFUpCiAK
LXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCiBjbGFzcyBJbnNwZWN0b3JDYW52YXNBZ2Vu
dCBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3JBZ2VudEJhc2UsIHB1YmxpYyBJbnNwZWN0b3I6OkNh
bnZhc0JhY2tlbmREaXNwYXRjaGVySGFuZGxlciwgcHVibGljIENhbnZhc09ic2VydmVyLCBwdWJs
aWMgQ2FuTWFrZVdlYWtQdHI8SW5zcGVjdG9yQ2FudmFzQWdlbnQ+IHsKICAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShJbnNwZWN0b3JDYW52YXNBZ2VudCk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CiBwdWJsaWM6CiAgICAgSW5zcGVjdG9yQ2FudmFzQWdlbnQoUGFnZUFnZW50Q29udGV4
dCYpOwotICAgIH5JbnNwZWN0b3JDYW52YXNBZ2VudCgpIG92ZXJyaWRlOworICAgIH5JbnNwZWN0
b3JDYW52YXNBZ2VudCgpOwogCiAgICAgLy8gSW5zcGVjdG9yQWdlbnRCYXNlCi0gICAgdm9pZCBk
aWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9udGVuZFJvdXRlciosIElu
c3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXIqKSBvdmVycmlkZTsKLSAgICB2b2lkIHdpbGxEZXN0
cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlzY29ubmVjdFJlYXNvbikgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCBkaXNjYXJkQWdlbnQoKSBvdmVycmlkZTsKKyAgICB2b2lkIGRpZENyZWF0
ZUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kUm91dGVyKiwgSW5zcGVjdG9y
OjpCYWNrZW5kRGlzcGF0Y2hlciopOworICAgIHZvaWQgd2lsbERlc3Ryb3lGcm9udGVuZEFuZEJh
Y2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKTsKKyAgICB2b2lkIGRpc2NhcmRBZ2Vu
dCgpOwogCiAgICAgLy8gQ2FudmFzQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyCi0gICAgdm9pZCBl
bmFibGUoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2b2lkIGRpc2FibGUoRXJyb3JTdHJp
bmcmKSBvdmVycmlkZTsKLSAgICB2b2lkIHJlcXVlc3ROb2RlKEVycm9yU3RyaW5nJiwgY29uc3Qg
U3RyaW5nJiBjYW52YXNJZCwgaW50KiBub2RlSWQpIG92ZXJyaWRlOwotICAgIHZvaWQgcmVxdWVz
dENvbnRlbnQoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGNhbnZhc0lkLCBTdHJpbmcqIGNv
bnRlbnQpIG92ZXJyaWRlOwotICAgIHZvaWQgcmVxdWVzdENsaWVudE5vZGVzKEVycm9yU3RyaW5n
JiwgY29uc3QgU3RyaW5nJiBjYW52YXNJZCwgUmVmUHRyPEpTT046OkFycmF5T2Y8aW50Pj4mKSBv
dmVycmlkZTsKLSAgICB2b2lkIHJlc29sdmVDb250ZXh0KEVycm9yU3RyaW5nJiwgY29uc3QgU3Ry
aW5nJiBjYW52YXNJZCwgY29uc3QgU3RyaW5nKiBvYmplY3RHcm91cCwgUmVmUHRyPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mKSBvdmVycmlkZTsKLSAgICB2b2lk
IHNldFJlY29yZGluZ0F1dG9DYXB0dXJlRnJhbWVDb3VudChFcnJvclN0cmluZyYsIGludCBjb3Vu
dCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzdGFydFJlY29yZGluZyhFcnJvclN0cmluZyYsIGNvbnN0
IFN0cmluZyYgY2FudmFzSWQsIGNvbnN0IGludCogZnJhbWVDb3VudCwgY29uc3QgaW50KiBtZW1v
cnlMaW1pdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzdG9wUmVjb3JkaW5nKEVycm9yU3RyaW5nJiwg
Y29uc3QgU3RyaW5nJiBjYW52YXNJZCkgb3ZlcnJpZGU7CisgICAgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBlbmFibGUoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29s
OjpFcnJvclN0cmluZ09yPHZvaWQ+IGRpc2FibGUoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29s
OjpFcnJvclN0cmluZ09yPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkPiByZXF1ZXN0
Tm9kZShjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpDYW52YXM6OkNhbnZhc0lkJik7CisgICAg
SW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxTdHJpbmc+IHJlcXVlc3RDb250ZW50
KGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6Q2FudmFzSWQmKTsKKyAgICBJbnNw
ZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkPj4+IHJlcXVlc3RDbGllbnROb2Rlcyhjb25zdCBJbnNw
ZWN0b3I6OlByb3RvY29sOjpDYW52YXM6OkNhbnZhc0lkJik7CisgICAgSW5zcGVjdG9yOjpQcm90
b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6UmVt
b3RlT2JqZWN0Pj4gcmVzb2x2ZUNvbnRleHQoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6Q2Fu
dmFzOjpDYW52YXNJZCYsIGNvbnN0IFN0cmluZyYgb2JqZWN0R3JvdXApOworICAgIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc2V0UmVjb3JkaW5nQXV0b0NhcHR1cmVG
cmFtZUNvdW50KGludCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2
b2lkPiBzdGFydFJlY29yZGluZyhjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpDYW52YXM6OkNh
bnZhc0lkJiwgT3B0aW9uYWw8aW50PiYmIGZyYW1lQ291bnQsIE9wdGlvbmFsPGludD4mJiBtZW1v
cnlMaW1pdCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBz
dG9wUmVjb3JkaW5nKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6Q2FudmFzSWQm
KTsKICNpZiBFTkFCTEUoV0VCR0wpIHx8IEVOQUJMRShXRUJHUFUpCi0gICAgdm9pZCByZXF1ZXN0
U2hhZGVyU291cmNlKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBwcm9ncmFtSWQsIGNvbnN0
IFN0cmluZyYgc2hhZGVyVHlwZSwgU3RyaW5nKiBzb3VyY2UpIG92ZXJyaWRlOwotICAgIHZvaWQg
dXBkYXRlU2hhZGVyKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBwcm9ncmFtSWQsIGNvbnN0
IFN0cmluZyYgc2hhZGVyVHlwZSwgY29uc3QgU3RyaW5nJiBzb3VyY2UpIG92ZXJyaWRlOworICAg
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8U3RyaW5nPiByZXF1ZXN0U2hhZGVy
U291cmNlKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6UHJvZ3JhbUlkJiwgSW5z
cGVjdG9yOjpQcm90b2NvbDo6Q2FudmFzOjpTaGFkZXJUeXBlKTsKKyAgICBJbnNwZWN0b3I6OlBy
b3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHVwZGF0ZVNoYWRlcihjb25zdCBJbnNwZWN0b3I6
OlByb3RvY29sOjpDYW52YXM6OlByb2dyYW1JZCYsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZh
czo6U2hhZGVyVHlwZSwgY29uc3QgU3RyaW5nJiBzb3VyY2UpOwogI2lmIEVOQUJMRShXRUJHTCkK
LSAgICB2b2lkIHNldFNoYWRlclByb2dyYW1EaXNhYmxlZChFcnJvclN0cmluZyYsIGNvbnN0IFN0
cmluZyYgcHJvZ3JhbUlkLCBib29sIGRpc2FibGVkKSBvdmVycmlkZTsKLSAgICB2b2lkIHNldFNo
YWRlclByb2dyYW1IaWdobGlnaHRlZChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgcHJvZ3Jh
bUlkLCBib29sIGhpZ2hsaWdodGVkKSBvdmVycmlkZTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29s
OjpFcnJvclN0cmluZ09yPHZvaWQ+IHNldFNoYWRlclByb2dyYW1EaXNhYmxlZChjb25zdCBJbnNw
ZWN0b3I6OlByb3RvY29sOjpDYW52YXM6OlByb2dyYW1JZCYsIGJvb2wgZGlzYWJsZWQpOworICAg
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc2V0U2hhZGVyUHJvZ3Jh
bUhpZ2hsaWdodGVkKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6UHJvZ3JhbUlk
JiwgYm9vbCBoaWdobGlnaHRlZCk7CiAjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKQogI2VuZGlmIC8v
IEVOQUJMRShXRUJHTCkgfHwgRU5BQkxFKFdFQkdQVSkKIAogICAgIC8vIENhbnZhc09ic2VydmVy
Ci0gICAgdm9pZCBjYW52YXNDaGFuZ2VkKENhbnZhc0Jhc2UmLCBjb25zdCBGbG9hdFJlY3QmKSBv
dmVycmlkZTsKLSAgICB2b2lkIGNhbnZhc1Jlc2l6ZWQoQ2FudmFzQmFzZSYpIG92ZXJyaWRlIHsg
fQotICAgIHZvaWQgY2FudmFzRGVzdHJveWVkKENhbnZhc0Jhc2UmKSBvdmVycmlkZTsKKyAgICB2
b2lkIGNhbnZhc0NoYW5nZWQoQ2FudmFzQmFzZSYsIGNvbnN0IEZsb2F0UmVjdCYpOworICAgIHZv
aWQgY2FudmFzUmVzaXplZChDYW52YXNCYXNlJikgeyB9CisgICAgdm9pZCBjYW52YXNEZXN0cm95
ZWQoQ2FudmFzQmFzZSYpOwogCiAgICAgLy8gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uCiAgICAg
dm9pZCBmcmFtZU5hdmlnYXRlZChGcmFtZSYpOwpAQCAtMTM4LDcgKzEzNiw3IEBAIHByaXZhdGU6
CiAgICAgSW5zcGVjdG9yQ2FudmFzJiBiaW5kQ2FudmFzKFdlYkdQVURldmljZSYsIGJvb2wgY2Fw
dHVyZUJhY2t0cmFjZSk7CiAjZW5kaWYgLy8gRU5BQkxFKFdFQkdQVSkKICAgICB2b2lkIHVuYmlu
ZENhbnZhcyhJbnNwZWN0b3JDYW52YXMmKTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yQ2FudmFzPiBh
c3NlcnRJbnNwZWN0b3JDYW52YXMoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGNhbnZhc0lk
KTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yQ2FudmFzPiBhc3NlcnRJbnNwZWN0b3JDYW52YXMoSW5z
cGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGNhbnZhc0lkKTsK
ICAgICBSZWZQdHI8SW5zcGVjdG9yQ2FudmFzPiBmaW5kSW5zcGVjdG9yQ2FudmFzKENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQmKTsKICNpZiBFTkFCTEUoV0VCR1BVKQogICAgIFJlZlB0cjxJbnNwZWN0
b3JDYW52YXM+IGZpbmRJbnNwZWN0b3JDYW52YXMoV2ViR1BVRGV2aWNlJik7CkBAIC0xNDYsNyAr
MTQ0LDcgQEAgcHJpdmF0ZToKIAogI2lmIEVOQUJMRShXRUJHTCkgfHwgRU5BQkxFKFdFQkdQVSkK
ICAgICB2b2lkIHVuYmluZFByb2dyYW0oSW5zcGVjdG9yU2hhZGVyUHJvZ3JhbSYpOwotICAgIFJl
ZlB0cjxJbnNwZWN0b3JTaGFkZXJQcm9ncmFtPiBhc3NlcnRJbnNwZWN0b3JQcm9ncmFtKEVycm9y
U3RyaW5nJiwgY29uc3QgU3RyaW5nJiBwcm9ncmFtSWQpOworICAgIFJlZlB0cjxJbnNwZWN0b3JT
aGFkZXJQcm9ncmFtPiBhc3NlcnRJbnNwZWN0b3JQcm9ncmFtKEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBwcm9ncmFtSWQpOwogI2lmIEVOQUJMRShXRUJH
TCkKICAgICBSZWZQdHI8SW5zcGVjdG9yU2hhZGVyUHJvZ3JhbT4gZmluZEluc3BlY3RvclByb2dy
YW0oV2ViR0xQcm9ncmFtJik7CiAjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01BZ2VudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmNwcAppbmRl
eCA4MzlhNThiNTQ4ODU0ZGU3NTc3MGQyNjMzZDhkNTlhZjU5ZjI0MTEyLi5kYmRiODUxOGM5YTFk
YmUxYWFmNzdiMDIyZjYwYTljMTZkNDQwMzg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmNwcApAQCAtMTI5LDQwICsxMjks
MzkgQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIHN0YXRpYyBjb25zdCBzaXplX3QgbWF4
VGV4dFNpemUgPSAxMDAwMDsKIHN0YXRpYyBjb25zdCBVQ2hhciBlbGxpcHNpc1VDaGFyW10gPSB7
IDB4MjAyNiwgMCB9OwogCi1zdGF0aWMgQ29sb3IgcGFyc2VDb2xvcihjb25zdCBKU09OOjpPYmpl
Y3QqIGNvbG9yT2JqZWN0KQorc3RhdGljIENvbG9yIHBhcnNlQ29sb3IoUmVmUHRyPEpTT046Ok9i
amVjdD4mJiBjb2xvck9iamVjdCkKIHsKICAgICBpZiAoIWNvbG9yT2JqZWN0KQogICAgICAgICBy
ZXR1cm4gQ29sb3I6OnRyYW5zcGFyZW50QmxhY2s7CiAKLSAgICBpbnQgciA9IDA7Ci0gICAgaW50
IGcgPSAwOwotICAgIGludCBiID0gMDsKLSAgICBpZiAoIWNvbG9yT2JqZWN0LT5nZXRJbnRlZ2Vy
KCJyIiwgcikgfHwgIWNvbG9yT2JqZWN0LT5nZXRJbnRlZ2VyKCJnIiwgZykgfHwgIWNvbG9yT2Jq
ZWN0LT5nZXRJbnRlZ2VyKCJiIiwgYikpCisgICAgYXV0byByID0gY29sb3JPYmplY3QtPmdldElu
dGVnZXIoUHJvdG9jb2w6OkRPTTo6UkdCQUNvbG9yOjpyS2V5KTsKKyAgICBhdXRvIGcgPSBjb2xv
ck9iamVjdC0+Z2V0SW50ZWdlcihQcm90b2NvbDo6RE9NOjpSR0JBQ29sb3I6OmdLZXkpOworICAg
IGF1dG8gYiA9IGNvbG9yT2JqZWN0LT5nZXRJbnRlZ2VyKFByb3RvY29sOjpET006OlJHQkFDb2xv
cjo6YktleSk7CisgICAgaWYgKCFyIHx8ICFnIHx8ICFiKQogICAgICAgICByZXR1cm4gQ29sb3I6
OnRyYW5zcGFyZW50QmxhY2s7CiAKLSAgICBkb3VibGUgYSA9IDEuMDsKLSAgICBpZiAoIWNvbG9y
T2JqZWN0LT5nZXREb3VibGUoImEiLCBhKSkKLSAgICAgICAgcmV0dXJuIGNsYW1wVG9Db21wb25l
bnRCeXRlczxTUkdCQT4ociwgZywgYik7Ci0gICAgcmV0dXJuIGNsYW1wVG9Db21wb25lbnRCeXRl
czxTUkdCQT4ociwgZywgYiwgY29udmVydFRvQ29tcG9uZW50Qnl0ZShhKSk7CisgICAgYXV0byBh
ID0gY29sb3JPYmplY3QtPmdldERvdWJsZShQcm90b2NvbDo6RE9NOjpSR0JBQ29sb3I6OmFLZXkp
OworICAgIGlmICghYSkKKyAgICAgICAgcmV0dXJuIGNsYW1wVG9Db21wb25lbnRCeXRlczxTUkdC
QT4oKnIsICpnLCAqYik7CisgICAgcmV0dXJuIGNsYW1wVG9Db21wb25lbnRCeXRlczxTUkdCQT4o
KnIsICpnLCAqYiwgY29udmVydFRvQ29tcG9uZW50Qnl0ZSgqYSkpOwogfQogCi1zdGF0aWMgQ29s
b3IgcGFyc2VDb25maWdDb2xvcihjb25zdCBTdHJpbmcmIGZpZWxkTmFtZSwgY29uc3QgSlNPTjo6
T2JqZWN0KiBjb25maWdPYmplY3QpCitzdGF0aWMgQ29sb3IgcGFyc2VDb25maWdDb2xvcihjb25z
dCBTdHJpbmcmIGZpZWxkTmFtZSwgSlNPTjo6T2JqZWN0JiBjb25maWdPYmplY3QpCiB7Ci0gICAg
UmVmUHRyPEpTT046Ok9iamVjdD4gY29sb3JPYmplY3Q7Ci0gICAgY29uZmlnT2JqZWN0LT5nZXRP
YmplY3QoZmllbGROYW1lLCBjb2xvck9iamVjdCk7Ci0KLSAgICByZXR1cm4gcGFyc2VDb2xvcihj
b2xvck9iamVjdC5nZXQoKSk7CisgICAgcmV0dXJuIHBhcnNlQ29sb3IoY29uZmlnT2JqZWN0Lmdl
dE9iamVjdChmaWVsZE5hbWUpKTsKIH0KIAotc3RhdGljIGJvb2wgcGFyc2VRdWFkKGNvbnN0IEpT
T046OkFycmF5JiBxdWFkQXJyYXksIEZsb2F0UXVhZCogcXVhZCkKK3N0YXRpYyBib29sIHBhcnNl
UXVhZChSZWY8SlNPTjo6QXJyYXk+JiYgcXVhZEFycmF5LCBGbG9hdFF1YWQqIHF1YWQpCiB7CiAg
ICAgY29uc3Qgc2l6ZV90IGNvb3JkaW5hdGVzSW5RdWFkID0gODsKICAgICBkb3VibGUgY29vcmRp
bmF0ZXNbY29vcmRpbmF0ZXNJblF1YWRdOwotICAgIGlmIChxdWFkQXJyYXkubGVuZ3RoKCkgIT0g
Y29vcmRpbmF0ZXNJblF1YWQpCisgICAgaWYgKHF1YWRBcnJheS0+bGVuZ3RoKCkgIT0gY29vcmRp
bmF0ZXNJblF1YWQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGNvb3JkaW5hdGVzSW5RdWFkOyArK2kpIHsKLSAgICAgICAgaWYgKCFxdWFkQXJyYXku
Z2V0KGkpLT5hc0RvdWJsZSgqKGNvb3JkaW5hdGVzICsgaSkpKQorICAgICAgICBhdXRvIGNvb3Jk
aW5hdGUgPSBxdWFkQXJyYXktPmdldChpKS0+YXNEb3VibGUoKTsKKyAgICAgICAgaWYgKCFjb29y
ZGluYXRlKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBjb29yZGluYXRlc1tp
XSA9ICpjb29yZGluYXRlOwogICAgIH0KICAgICBxdWFkLT5zZXRQMShGbG9hdFBvaW50KGNvb3Jk
aW5hdGVzWzBdLCBjb29yZGluYXRlc1sxXSkpOwogICAgIHF1YWQtPnNldFAyKEZsb2F0UG9pbnQo
Y29vcmRpbmF0ZXNbMl0sIGNvb3JkaW5hdGVzWzNdKSk7CkBAIC0yNDMsNyArMjQyLDcgQEAgcHVi
bGljOgogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIGF1dG8qIG5vZGUgPSBkb3duY2Fz
dDxOb2RlPihldmVudC50YXJnZXQoKSk7Ci0gICAgICAgIGludCBub2RlSWQgPSBtX2RvbUFnZW50
LnB1c2hOb2RlUGF0aFRvRnJvbnRlbmQobm9kZSk7CisgICAgICAgIGF1dG8gbm9kZUlkID0gbV9k
b21BZ2VudC5wdXNoTm9kZVBhdGhUb0Zyb250ZW5kKG5vZGUpOwogICAgICAgICBpZiAoIW5vZGVJ
ZCkKICAgICAgICAgICAgIHJldHVybjsKIApAQCAtMzIwLDkgKzMxOSw5IEBAIHZvaWQgSW5zcGVj
dG9yRE9NQWdlbnQ6OndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlz
Y29ubmVjdFJlYXNvCiAgICAgbV9tb3VzZWRPdmVyTm9kZSA9IG51bGxwdHI7CiAgICAgbV9pbnNw
ZWN0ZWROb2RlID0gbnVsbHB0cjsKIAotICAgIEVycm9yU3RyaW5nIGlnbm9yZWQ7CisgICAgUHJv
dG9jb2w6OkVycm9yU3RyaW5nIGlnbm9yZWQ7CiAgICAgc2V0U2VhcmNoaW5nRm9yTm9kZShpZ25v
cmVkLCBmYWxzZSwgbnVsbHB0ciwgZmFsc2UpOwotICAgIGhpZGVIaWdobGlnaHQoaWdub3JlZCk7
CisgICAgaGlkZUhpZ2hsaWdodCgpOwogCiAgICAgbV9pbnN0cnVtZW50aW5nQWdlbnRzLnNldFBl
cnNpc3RlbnRET01BZ2VudChudWxscHRyKTsKICAgICBtX2RvY3VtZW50UmVxdWVzdGVkID0gZmFs
c2U7CkBAIC0zNzQsOSArMzczLDkgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6cmVsZWFzZURh
bmdsaW5nTm9kZXMoKQogICAgIG1fZGFuZ2xpbmdOb2RlVG9JZE1hcHMuY2xlYXIoKTsKIH0KIAot
aW50IEluc3BlY3RvckRPTUFnZW50OjpiaW5kKE5vZGUqIG5vZGUsIE5vZGVUb0lkTWFwKiBub2Rl
c01hcCkKK1Byb3RvY29sOjpET006Ok5vZGVJZCBJbnNwZWN0b3JET01BZ2VudDo6YmluZChOb2Rl
KiBub2RlLCBOb2RlVG9JZE1hcCogbm9kZXNNYXApCiB7Ci0gICAgaW50IGlkID0gbm9kZXNNYXAt
PmdldChub2RlKTsKKyAgICBhdXRvIGlkID0gbm9kZXNNYXAtPmdldChub2RlKTsKICAgICBpZiAo
aWQpCiAgICAgICAgIHJldHVybiBpZDsKICAgICBpZCA9IG1fbGFzdE5vZGVJZCsrOwpAQCAtMzg4
LDcgKzM4Nyw3IEBAIGludCBJbnNwZWN0b3JET01BZ2VudDo6YmluZChOb2RlKiBub2RlLCBOb2Rl
VG9JZE1hcCogbm9kZXNNYXApCiAKIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnVuYmluZChOb2Rl
KiBub2RlLCBOb2RlVG9JZE1hcCogbm9kZXNNYXApCiB7Ci0gICAgaW50IGlkID0gbm9kZXNNYXAt
PmdldChub2RlKTsKKyAgICBhdXRvIGlkID0gbm9kZXNNYXAtPmdldChub2RlKTsKICAgICBpZiAo
IWlkKQogICAgICAgICByZXR1cm47CiAKQEAgLTQyMiw3ICs0MjEsNyBAQCB2b2lkIEluc3BlY3Rv
ckRPTUFnZW50Ojp1bmJpbmQoTm9kZSogbm9kZSwgTm9kZVRvSWRNYXAqIG5vZGVzTWFwKQogICAg
IH0KIH0KIAotTm9kZSogSW5zcGVjdG9yRE9NQWdlbnQ6OmFzc2VydE5vZGUoRXJyb3JTdHJpbmcm
IGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkKQorTm9kZSogSW5zcGVjdG9yRE9NQWdlbnQ6OmFzc2Vy
dE5vZGUoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgUHJvdG9jb2w6OkRPTTo6
Tm9kZUlkIG5vZGVJZCkKIHsKICAgICBOb2RlKiBub2RlID0gbm9kZUZvcklkKG5vZGVJZCk7CiAg
ICAgaWYgKCFub2RlKSB7CkBAIC00MzIsNyArNDMxLDcgQEAgTm9kZSogSW5zcGVjdG9yRE9NQWdl
bnQ6OmFzc2VydE5vZGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkKQogICAg
IHJldHVybiBub2RlOwogfQogCi1Eb2N1bWVudCogSW5zcGVjdG9yRE9NQWdlbnQ6OmFzc2VydERv
Y3VtZW50KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJZCkKK0RvY3VtZW50KiBJ
bnNwZWN0b3JET01BZ2VudDo6YXNzZXJ0RG9jdW1lbnQoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBl
cnJvclN0cmluZywgUHJvdG9jb2w6OkRPTTo6Tm9kZUlkIG5vZGVJZCkKIHsKICAgICBOb2RlKiBu
b2RlID0gYXNzZXJ0Tm9kZShlcnJvclN0cmluZywgbm9kZUlkKTsKICAgICBpZiAoIW5vZGUpCkBA
IC00NDQsNyArNDQzLDcgQEAgRG9jdW1lbnQqIEluc3BlY3RvckRPTUFnZW50Ojphc3NlcnREb2N1
bWVudChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQKICAgICByZXR1cm4gZG93
bmNhc3Q8RG9jdW1lbnQ+KG5vZGUpOwogfQogCi1FbGVtZW50KiBJbnNwZWN0b3JET01BZ2VudDo6
YXNzZXJ0RWxlbWVudChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQpCitFbGVt
ZW50KiBJbnNwZWN0b3JET01BZ2VudDo6YXNzZXJ0RWxlbWVudChQcm90b2NvbDo6RXJyb3JTdHJp
bmcmIGVycm9yU3RyaW5nLCBQcm90b2NvbDo6RE9NOjpOb2RlSWQgbm9kZUlkKQogewogICAgIE5v
ZGUqIG5vZGUgPSBhc3NlcnROb2RlKGVycm9yU3RyaW5nLCBub2RlSWQpOwogICAgIGlmICghbm9k
ZSkKQEAgLTQ1Niw3ICs0NTUsNyBAQCBFbGVtZW50KiBJbnNwZWN0b3JET01BZ2VudDo6YXNzZXJ0
RWxlbWVudChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQpCiAgICAgcmV0dXJu
IGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpOwogfQogCi1Ob2RlKiBJbnNwZWN0b3JET01BZ2VudDo6
YXNzZXJ0RWRpdGFibGVOb2RlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJZCkK
K05vZGUqIEluc3BlY3RvckRPTUFnZW50Ojphc3NlcnRFZGl0YWJsZU5vZGUoUHJvdG9jb2w6OkVy
cm9yU3RyaW5nJiBlcnJvclN0cmluZywgUHJvdG9jb2w6OkRPTTo6Tm9kZUlkIG5vZGVJZCkKIHsK
ICAgICBOb2RlKiBub2RlID0gYXNzZXJ0Tm9kZShlcnJvclN0cmluZywgbm9kZUlkKTsKICAgICBp
ZiAoIW5vZGUpCkBAIC00NzIsNyArNDcxLDcgQEAgTm9kZSogSW5zcGVjdG9yRE9NQWdlbnQ6OmFz
c2VydEVkaXRhYmxlTm9kZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQKICAg
ICByZXR1cm4gbm9kZTsKIH0KIAotRWxlbWVudCogSW5zcGVjdG9yRE9NQWdlbnQ6OmFzc2VydEVk
aXRhYmxlRWxlbWVudChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQpCitFbGVt
ZW50KiBJbnNwZWN0b3JET01BZ2VudDo6YXNzZXJ0RWRpdGFibGVFbGVtZW50KFByb3RvY29sOjpF
cnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIFByb3RvY29sOjpET006Ok5vZGVJZCBub2RlSWQpCiB7
CiAgICAgTm9kZSogbm9kZSA9IGFzc2VydEVkaXRhYmxlTm9kZShlcnJvclN0cmluZywgbm9kZUlk
KTsKICAgICBpZiAoIW5vZGUpCkBAIC00ODQsMjcgKzQ4MywyNyBAQCBFbGVtZW50KiBJbnNwZWN0
b3JET01BZ2VudDo6YXNzZXJ0RWRpdGFibGVFbGVtZW50KEVycm9yU3RyaW5nJiBlcnJvclN0cmlu
ZywgaW50CiAgICAgcmV0dXJuIGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpOwogfQogCi12b2lkIElu
c3BlY3RvckRPTUFnZW50OjpnZXREb2N1bWVudChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIFJl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+JiByb290KQorUHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8UmVmPFByb3RvY29sOjpET006Ok5vZGU+PiBJbnNwZWN0b3JET01BZ2VudDo6
Z2V0RG9jdW1lbnQoKQogewogICAgIG1fZG9jdW1lbnRSZXF1ZXN0ZWQgPSB0cnVlOwogCi0gICAg
aWYgKCFtX2RvY3VtZW50KSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIkludGVybmFsIGVycm9y
OiBtaXNzaW5nIGRvY3VtZW50Il9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICgh
bV9kb2N1bWVudCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJJbnRlcm5hbCBlcnJv
cjogbWlzc2luZyBkb2N1bWVudCJfcyk7CiAKICAgICAvLyBSZXNldCBiYWNrZW5kIHN0YXRlLgog
ICAgIFJlZlB0cjxEb2N1bWVudD4gZG9jdW1lbnQgPSBtX2RvY3VtZW50OwogICAgIHJlc2V0KCk7
CiAgICAgbV9kb2N1bWVudCA9IGRvY3VtZW50OwogCi0gICAgcm9vdCA9IGJ1aWxkT2JqZWN0Rm9y
Tm9kZShtX2RvY3VtZW50LmdldCgpLCAyLCAmbV9kb2N1bWVudE5vZGVUb0lkTWFwKTsKKyAgICBh
dXRvIHJvb3QgPSBidWlsZE9iamVjdEZvck5vZGUobV9kb2N1bWVudC5nZXQoKSwgMiwgJm1fZG9j
dW1lbnROb2RlVG9JZE1hcCk7CiAKICAgICBpZiAobV9ub2RlVG9Gb2N1cykKICAgICAgICAgZm9j
dXNOb2RlKCk7CisKKyAgICByZXR1cm4gV1RGTW92ZShyb290KTsKIH0KIAotdm9pZCBJbnNwZWN0
b3JET01BZ2VudDo6cHVzaENoaWxkTm9kZXNUb0Zyb250ZW5kKGludCBub2RlSWQsIGludCBkZXB0
aCkKK3ZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnB1c2hDaGlsZE5vZGVzVG9Gcm9udGVuZChQcm90
b2NvbDo6RE9NOjpOb2RlSWQgbm9kZUlkLCBpbnQgZGVwdGgpCiB7CiAgICAgTm9kZSogbm9kZSA9
IG5vZGVGb3JJZChub2RlSWQpOwogICAgIGlmICghbm9kZSB8fCAobm9kZS0+bm9kZVR5cGUoKSAh
PSBOb2RlOjpFTEVNRU5UX05PREUgJiYgbm9kZS0+bm9kZVR5cGUoKSAhPSBOb2RlOjpET0NVTUVO
VF9OT0RFICYmIG5vZGUtPm5vZGVUeXBlKCkgIT0gTm9kZTo6RE9DVU1FTlRfRlJBR01FTlRfTk9E
RSkpCkBAIC01MTksNyArNTE4LDcgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6cHVzaENoaWxk
Tm9kZXNUb0Zyb250ZW5kKGludCBub2RlSWQsIGludCBkZXB0aCkKICAgICAgICAgZGVwdGgtLTsK
IAogICAgICAgICBmb3IgKG5vZGUgPSBpbm5lckZpcnN0Q2hpbGQobm9kZSk7IG5vZGU7IG5vZGUg
PSBpbm5lck5leHRTaWJsaW5nKG5vZGUpKSB7Ci0gICAgICAgICAgICBpbnQgY2hpbGROb2RlSWQg
PSBub2RlTWFwLT5nZXQobm9kZSk7CisgICAgICAgICAgICBhdXRvIGNoaWxkTm9kZUlkID0gbm9k
ZU1hcC0+Z2V0KG5vZGUpOwogICAgICAgICAgICAgQVNTRVJUKGNoaWxkTm9kZUlkKTsKICAgICAg
ICAgICAgIHB1c2hDaGlsZE5vZGVzVG9Gcm9udGVuZChjaGlsZE5vZGVJZCwgZGVwdGgpOwogICAg
ICAgICB9CkBAIC01NDEsMTggKzU0MCwxOCBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpkaXNj
YXJkQmluZGluZ3MoKQogICAgIG1fY2hpbGRyZW5SZXF1ZXN0ZWQuY2xlYXIoKTsKIH0KIAotaW50
IEluc3BlY3RvckRPTUFnZW50OjpwdXNoTm9kZVRvRnJvbnRlbmQoTm9kZSogbm9kZVRvUHVzaCkK
K1Byb3RvY29sOjpET006Ok5vZGVJZCBJbnNwZWN0b3JET01BZ2VudDo6cHVzaE5vZGVUb0Zyb250
ZW5kKE5vZGUqIG5vZGVUb1B1c2gpCiB7CiAgICAgaWYgKCFub2RlVG9QdXNoKQogICAgICAgICBy
ZXR1cm4gMDsKIAogICAgIC8vIEZJWE1FOiA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMjEzNDk5PiBX
ZWIgSW5zcGVjdG9yOiBhbGxvdyBET00gbm9kZXMgdG8gYmUgaW5zdHJ1bWVudGVkIGF0IGFueSBw
b2ludCwgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZSBtYWluIGRvY3VtZW50IGhhcyBhbHNvIGJl
ZW4gaW5zdHJ1bWVudGVkCiAKLSAgICBFcnJvclN0cmluZyBpZ25vcmVkOworICAgIFByb3RvY29s
OjpFcnJvclN0cmluZyBpZ25vcmVkOwogICAgIHJldHVybiBwdXNoTm9kZVRvRnJvbnRlbmQoaWdu
b3JlZCwgYm91bmROb2RlSWQoJm5vZGVUb1B1c2gtPmRvY3VtZW50KCkpLCBub2RlVG9QdXNoKTsK
IH0KIAotaW50IEluc3BlY3RvckRPTUFnZW50OjpwdXNoTm9kZVRvRnJvbnRlbmQoRXJyb3JTdHJp
bmcmIGVycm9yU3RyaW5nLCBpbnQgZG9jdW1lbnROb2RlSWQsIE5vZGUqIG5vZGVUb1B1c2gpCitQ
cm90b2NvbDo6RE9NOjpOb2RlSWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnB1c2hOb2RlVG9Gcm9udGVu
ZChQcm90b2NvbDo6RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBQcm90b2NvbDo6RE9NOjpOb2Rl
SWQgZG9jdW1lbnROb2RlSWQsIE5vZGUqIG5vZGVUb1B1c2gpCiB7CiAgICAgRG9jdW1lbnQqIGRv
Y3VtZW50ID0gYXNzZXJ0RG9jdW1lbnQoZXJyb3JTdHJpbmcsIGRvY3VtZW50Tm9kZUlkKTsKICAg
ICBpZiAoIWRvY3VtZW50KQpAQCAtNTY1LDcgKzU2NCw3IEBAIGludCBJbnNwZWN0b3JET01BZ2Vu
dDo6cHVzaE5vZGVUb0Zyb250ZW5kKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IGRvY3Vt
ZW50CiAgICAgcmV0dXJuIHB1c2hOb2RlUGF0aFRvRnJvbnRlbmQoZXJyb3JTdHJpbmcsIG5vZGVU
b1B1c2gpOwogfQogCi1Ob2RlKiBJbnNwZWN0b3JET01BZ2VudDo6bm9kZUZvcklkKGludCBpZCkK
K05vZGUqIEluc3BlY3RvckRPTUFnZW50Ojpub2RlRm9ySWQoUHJvdG9jb2w6OkRPTTo6Tm9kZUlk
IGlkKQogewogICAgIGlmICghbV9pZFRvTm9kZS5pc1ZhbGlkS2V5KGlkKSkKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CkBAIC01NzMsNyArNTcyLDcgQEAgTm9kZSogSW5zcGVjdG9yRE9NQWdlbnQ6
Om5vZGVGb3JJZChpbnQgaWQpCiAgICAgcmV0dXJuIG1faWRUb05vZGUuZ2V0KGlkKTsKIH0KIAot
dm9pZCBJbnNwZWN0b3JET01BZ2VudDo6cmVxdWVzdENoaWxkTm9kZXMoRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBpbnQgbm9kZUlkLCBjb25zdCBpbnQqIGRlcHRoKQorUHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yRE9NQWdlbnQ6OnJlcXVlc3RDaGlsZE5vZGVzKFByb3Rv
Y29sOjpET006Ok5vZGVJZCBub2RlSWQsIE9wdGlvbmFsPGludD4mJiBkZXB0aCkKIHsKICAgICBp
bnQgc2FuaXRpemVkRGVwdGg7CiAKQEAgLTU4Myw2NCArNTgyLDY0IEBAIHZvaWQgSW5zcGVjdG9y
RE9NQWdlbnQ6OnJlcXVlc3RDaGlsZE5vZGVzKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50
IG5vZGVJZCwKICAgICAgICAgc2FuaXRpemVkRGVwdGggPSBJTlRfTUFYOwogICAgIGVsc2UgaWYg
KCpkZXB0aCA+IDApCiAgICAgICAgIHNhbml0aXplZERlcHRoID0gKmRlcHRoOwotICAgIGVsc2Ug
ewotICAgICAgICBlcnJvclN0cmluZyA9ICJVbmV4cGVjdGVkIHZhbHVlIGJlbG93IC0xIGZvciBn
aXZlbiBkZXB0aCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBlbHNlCisgICAgICAg
IHJldHVybiBtYWtlVW5leHBlY3RlZCgiVW5leHBlY3RlZCB2YWx1ZSBiZWxvdyAtMSBmb3IgZ2l2
ZW4gZGVwdGgiX3MpOwogCiAgICAgcHVzaENoaWxkTm9kZXNUb0Zyb250ZW5kKG5vZGVJZCwgc2Fu
aXRpemVkRGVwdGgpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01B
Z2VudDo6cXVlcnlTZWxlY3RvcihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQs
IGNvbnN0IFN0cmluZyYgc2VsZWN0b3JzLCBpbnQqIGVsZW1lbnRJZCkKK1Byb3RvY29sOjpFcnJv
clN0cmluZ09yPFByb3RvY29sOjpET006Ok5vZGVJZD4gSW5zcGVjdG9yRE9NQWdlbnQ6OnF1ZXJ5
U2VsZWN0b3IoUHJvdG9jb2w6OkRPTTo6Tm9kZUlkIG5vZGVJZCwgY29uc3QgU3RyaW5nJiBzZWxl
Y3RvcikKIHsKLSAgICAqZWxlbWVudElkID0gMDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcg
ZXJyb3JTdHJpbmc7CisKICAgICBOb2RlKiBub2RlID0gYXNzZXJ0Tm9kZShlcnJvclN0cmluZywg
bm9kZUlkKTsKICAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIWlzPENv
bnRhaW5lck5vZGU+KCpub2RlKSkgewotICAgICAgICBhc3NlcnRFbGVtZW50KGVycm9yU3RyaW5n
LCBub2RlSWQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgICAgICByZXR1cm4gbWFrZVVu
ZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOworICAgIGlmICghaXM8Q29udGFpbmVyTm9kZT4oKm5vZGUp
KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk5vZGUgZm9yIGdpdmVuIG5vZGVJZCBp
cyBub3QgYSBjb250YWluZXIgbm9kZSJfcyk7CiAKLSAgICBhdXRvIHF1ZXJ5UmVzdWx0ID0gZG93
bmNhc3Q8Q29udGFpbmVyTm9kZT4oKm5vZGUpLnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3JzKTsKLSAg
ICBpZiAocXVlcnlSZXN1bHQuaGFzRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcg
PSAiRE9NIEVycm9yIHdoaWxlIHF1ZXJ5aW5nIHdpdGggZ2l2ZW4gc2VsZWN0b3JzIl9zOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQorICAgIGF1dG8gcXVlcnlSZXN1bHQgPSBkb3duY2FzdDxDb250
YWluZXJOb2RlPigqbm9kZSkucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7CisgICAgaWYgKHF1ZXJ5
UmVzdWx0Lmhhc0V4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoSW5z
cGVjdG9yRE9NQWdlbnQ6OnRvRXJyb3JTdHJpbmcocXVlcnlSZXN1bHQucmVsZWFzZUV4Y2VwdGlv
bigpKSk7CiAKLSAgICBpZiAoYXV0byogZWxlbWVudCA9IHF1ZXJ5UmVzdWx0LnJlbGVhc2VSZXR1
cm5WYWx1ZSgpKQotICAgICAgICAqZWxlbWVudElkID0gcHVzaE5vZGVQYXRoVG9Gcm9udGVuZChl
cnJvclN0cmluZywgZWxlbWVudCk7CisgICAgYXV0byByZXN1bHROb2RlSWQgPSBwdXNoTm9kZVBh
dGhUb0Zyb250ZW5kKGVycm9yU3RyaW5nLCBxdWVyeVJlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUo
KSk7CisgICAgaWYgKCFyZXN1bHROb2RlSWQpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3Rl
ZChlcnJvclN0cmluZyk7CisKKyAgICByZXR1cm4gcmVzdWx0Tm9kZUlkOwogfQogCi12b2lkIElu
c3BlY3RvckRPTUFnZW50OjpxdWVyeVNlbGVjdG9yQWxsKEVycm9yU3RyaW5nJiBlcnJvclN0cmlu
ZywgaW50IG5vZGVJZCwgY29uc3QgU3RyaW5nJiBzZWxlY3RvcnMsIFJlZlB0cjxKU09OOjpBcnJh
eU9mPGludD4+JiByZXN1bHQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SlNPTjo6QXJy
YXlPZjxQcm90b2NvbDo6RE9NOjpOb2RlSWQ+Pj4gSW5zcGVjdG9yRE9NQWdlbnQ6OnF1ZXJ5U2Vs
ZWN0b3JBbGwoUHJvdG9jb2w6OkRPTTo6Tm9kZUlkIG5vZGVJZCwgY29uc3QgU3RyaW5nJiBzZWxl
Y3RvcikKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBO
b2RlKiBub2RlID0gYXNzZXJ0Tm9kZShlcnJvclN0cmluZywgbm9kZUlkKTsKICAgICBpZiAoIW5v
ZGUpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIWlzPENvbnRhaW5lck5vZGU+KCpub2RlKSkg
ewotICAgICAgICBhc3NlcnRFbGVtZW50KGVycm9yU3RyaW5nLCBub2RlSWQpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcp
OworICAgIGlmICghaXM8Q29udGFpbmVyTm9kZT4oKm5vZGUpKQorICAgICAgICByZXR1cm4gbWFr
ZVVuZXhwZWN0ZWQoIk5vZGUgZm9yIGdpdmVuIG5vZGVJZCBpcyBub3QgYSBjb250YWluZXIgbm9k
ZSJfcyk7CiAKLSAgICBhdXRvIHF1ZXJ5UmVzdWx0ID0gZG93bmNhc3Q8Q29udGFpbmVyTm9kZT4o
Km5vZGUpLnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3JzKTsKLSAgICBpZiAocXVlcnlSZXN1bHQu
aGFzRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiRE9NIEVycm9yIHdoaWxl
IHF1ZXJ5aW5nIHdpdGggZ2l2ZW4gc2VsZWN0b3JzIl9zOwotICAgICAgICByZXR1cm47Ci0gICAg
fQorICAgIGF1dG8gcXVlcnlSZXN1bHQgPSBkb3duY2FzdDxDb250YWluZXJOb2RlPigqbm9kZSku
cXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7CisgICAgaWYgKHF1ZXJ5UmVzdWx0Lmhhc0V4Y2Vw
dGlvbigpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoSW5zcGVjdG9yRE9NQWdlbnQ6
OnRvRXJyb3JTdHJpbmcocXVlcnlSZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpKSk7CiAKICAgICBh
dXRvIG5vZGVzID0gcXVlcnlSZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCk7Ci0gICAgcmVzdWx0
ID0gSlNPTjo6QXJyYXlPZjxpbnQ+OjpjcmVhdGUoKTsKKworICAgIGF1dG8gbm9kZUlkcyA9IEpT
T046OkFycmF5T2Y8UHJvdG9jb2w6OkRPTTo6Tm9kZUlkPjo6Y3JlYXRlKCk7CiAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG5vZGVzLT5sZW5ndGgoKTsgKytpKQotICAgICAgICByZXN1bHQt
PmFkZEl0ZW0ocHVzaE5vZGVQYXRoVG9Gcm9udGVuZChub2Rlcy0+aXRlbShpKSkpOworICAgICAg
ICBub2RlSWRzLT5hZGRJdGVtKHB1c2hOb2RlUGF0aFRvRnJvbnRlbmQobm9kZXMtPml0ZW0oaSkp
KTsKKyAgICByZXR1cm4gV1RGTW92ZShub2RlSWRzKTsKIH0KIAotaW50IEluc3BlY3RvckRPTUFn
ZW50OjpwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKE5vZGUqIG5vZGVUb1B1c2gpCitQcm90b2NvbDo6
RE9NOjpOb2RlSWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnB1c2hOb2RlUGF0aFRvRnJvbnRlbmQoTm9k
ZSogbm9kZVRvUHVzaCkKIHsKLSAgICBFcnJvclN0cmluZyBpZ25vcmVkOworICAgIFByb3RvY29s
OjpFcnJvclN0cmluZyBpZ25vcmVkOwogICAgIHJldHVybiBwdXNoTm9kZVBhdGhUb0Zyb250ZW5k
KGlnbm9yZWQsIG5vZGVUb1B1c2gpOwogfQogCi1pbnQgSW5zcGVjdG9yRE9NQWdlbnQ6OnB1c2hO
b2RlUGF0aFRvRnJvbnRlbmQoRXJyb3JTdHJpbmcgZXJyb3JTdHJpbmcsIE5vZGUqIG5vZGVUb1B1
c2gpCitQcm90b2NvbDo6RE9NOjpOb2RlSWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnB1c2hOb2RlUGF0
aFRvRnJvbnRlbmQoUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nLCBOb2RlKiBub2Rl
VG9QdXNoKQogewogICAgIEFTU0VSVChub2RlVG9QdXNoKTsgIC8vIEludmFsaWQgaW5wdXQKIApA
QCAtNjU2LDggKzY1NSw3IEBAIGludCBJbnNwZWN0b3JET01BZ2VudDo6cHVzaE5vZGVQYXRoVG9G
cm9udGVuZChFcnJvclN0cmluZyBlcnJvclN0cmluZywgTm9kZSogbm9kCiAgICAgfQogCiAgICAg
Ly8gUmV0dXJuIGlkIGluIGNhc2UgdGhlIG5vZGUgaXMga25vd24uCi0gICAgaW50IHJlc3VsdCA9
IG1fZG9jdW1lbnROb2RlVG9JZE1hcC5nZXQobm9kZVRvUHVzaCk7Ci0gICAgaWYgKHJlc3VsdCkK
KyAgICBpZiAoYXV0byByZXN1bHQgPSBtX2RvY3VtZW50Tm9kZVRvSWRNYXAuZ2V0KG5vZGVUb1B1
c2gpKQogICAgICAgICByZXR1cm4gcmVzdWx0OwogCiAgICAgTm9kZSogbm9kZSA9IG5vZGVUb1B1
c2g7CkBAIC02NzEsNyArNjY5LDcgQEAgaW50IEluc3BlY3RvckRPTUFnZW50OjpwdXNoTm9kZVBh
dGhUb0Zyb250ZW5kKEVycm9yU3RyaW5nIGVycm9yU3RyaW5nLCBOb2RlKiBub2QKICAgICAgICAg
ICAgIGF1dG8gbmV3TWFwID0gbWFrZVVuaXF1ZTxOb2RlVG9JZE1hcD4oKTsKICAgICAgICAgICAg
IGRhbmdsaW5nTWFwID0gbmV3TWFwLmdldCgpOwogICAgICAgICAgICAgbV9kYW5nbGluZ05vZGVU
b0lkTWFwcy5hcHBlbmQobmV3TWFwLnJlbGVhc2UoKSk7Ci0gICAgICAgICAgICBhdXRvIGNoaWxk
cmVuID0gSlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+OjpjcmVh
dGUoKTsKKyAgICAgICAgICAgIGF1dG8gY2hpbGRyZW4gPSBKU09OOjpBcnJheU9mPFByb3RvY29s
OjpET006Ok5vZGU+OjpjcmVhdGUoKTsKICAgICAgICAgICAgIGNoaWxkcmVuLT5hZGRJdGVtKGJ1
aWxkT2JqZWN0Rm9yTm9kZShub2RlLCAwLCBkYW5nbGluZ01hcCkpOwogICAgICAgICAgICAgbV9m
cm9udGVuZERpc3BhdGNoZXItPnNldENoaWxkTm9kZXMoMCwgV1RGTW92ZShjaGlsZHJlbikpOwog
ICAgICAgICAgICAgYnJlYWs7CkBAIC02ODYsMjIxICs2ODQsMjUyIEBAIGludCBJbnNwZWN0b3JE
T01BZ2VudDo6cHVzaE5vZGVQYXRoVG9Gcm9udGVuZChFcnJvclN0cmluZyBlcnJvclN0cmluZywg
Tm9kZSogbm9kCiAKICAgICBOb2RlVG9JZE1hcCogbWFwID0gZGFuZ2xpbmdNYXAgPyBkYW5nbGlu
Z01hcCA6ICZtX2RvY3VtZW50Tm9kZVRvSWRNYXA7CiAgICAgZm9yIChpbnQgaSA9IHBhdGguc2l6
ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKLSAgICAgICAgaW50IG5vZGVJZCA9IG1hcC0+Z2V0KHBh
dGguYXQoaSkpOworICAgICAgICBhdXRvIG5vZGVJZCA9IG1hcC0+Z2V0KHBhdGguYXQoaSkpOwog
ICAgICAgICBBU1NFUlQobm9kZUlkKTsKICAgICAgICAgcHVzaENoaWxkTm9kZXNUb0Zyb250ZW5k
KG5vZGVJZCk7CiAgICAgfQogICAgIHJldHVybiBtYXAtPmdldChub2RlVG9QdXNoKTsKIH0KIAot
aW50IEluc3BlY3RvckRPTUFnZW50Ojpib3VuZE5vZGVJZChjb25zdCBOb2RlKiBub2RlKQorUHJv
dG9jb2w6OkRPTTo6Tm9kZUlkIEluc3BlY3RvckRPTUFnZW50Ojpib3VuZE5vZGVJZChjb25zdCBO
b2RlKiBub2RlKQogewogICAgIHJldHVybiBtX2RvY3VtZW50Tm9kZVRvSWRNYXAuZ2V0KGNvbnN0
X2Nhc3Q8Tm9kZSo+KG5vZGUpKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c2V0QXR0
cmlidXRlVmFsdWUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgZWxlbWVudElkLCBjb25z
dCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCitQcm90b2NvbDo6RXJyb3JTdHJp
bmdPcjx2b2lkPiBJbnNwZWN0b3JET01BZ2VudDo6c2V0QXR0cmlidXRlVmFsdWUoUHJvdG9jb2w6
OkRPTTo6Tm9kZUlkIG5vZGVJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZh
bHVlKQogewotICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBhc3NlcnRFZGl0YWJsZUVsZW1lbnQoZXJy
b3JTdHJpbmcsIGVsZW1lbnRJZCk7Ci0gICAgaWYgKCFlbGVtZW50KQotICAgICAgICByZXR1cm47
CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOwogCi0gICAgbV9kb21FZGl0
b3ItPnNldEF0dHJpYnV0ZSgqZWxlbWVudCwgbmFtZSwgdmFsdWUsIGVycm9yU3RyaW5nKTsKKyAg
ICBFbGVtZW50KiBlbGVtZW50ID0gYXNzZXJ0RWRpdGFibGVFbGVtZW50KGVycm9yU3RyaW5nLCBu
b2RlSWQpOworICAgIGlmICghZWxlbWVudCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVk
KGVycm9yU3RyaW5nKTsKKworICAgIGlmICghbV9kb21FZGl0b3ItPnNldEF0dHJpYnV0ZSgqZWxl
bWVudCwgbmFtZSwgdmFsdWUsIGVycm9yU3RyaW5nKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4
cGVjdGVkKGVycm9yU3RyaW5nKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVj
dG9yRE9NQWdlbnQ6OnNldEF0dHJpYnV0ZXNBc1RleHQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5n
LCBpbnQgZWxlbWVudElkLCBjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFN0cmluZyogbmFtZSkK
K1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRPTUFnZW50OjpzZXRBdHRy
aWJ1dGVzQXNUZXh0KFByb3RvY29sOjpET006Ok5vZGVJZCBub2RlSWQsIGNvbnN0IFN0cmluZyYg
dGV4dCwgY29uc3QgU3RyaW5nJiBuYW1lKQogewotICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBhc3Nl
cnRFZGl0YWJsZUVsZW1lbnQoZXJyb3JTdHJpbmcsIGVsZW1lbnRJZCk7CisgICAgUHJvdG9jb2w6
OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCisgICAgRWxlbWVudCogZWxlbWVudCA9IGFzc2Vy
dEVkaXRhYmxlRWxlbWVudChlcnJvclN0cmluZywgbm9kZUlkKTsKICAgICBpZiAoIWVsZW1lbnQp
Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3Ry
aW5nKTsKIAogICAgIGF1dG8gcGFyc2VkRWxlbWVudCA9IGNyZWF0ZUhUTUxFbGVtZW50KGVsZW1l
bnQtPmRvY3VtZW50KCksIHNwYW5UYWcpOwogICAgIGF1dG8gcmVzdWx0ID0gcGFyc2VkRWxlbWVu
dC5nZXQoKS5zZXRJbm5lckhUTUwoIjxzcGFuICIgKyB0ZXh0ICsgIj48L3NwYW4+Iik7Ci0gICAg
aWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkgewotICAgICAgICBlcnJvclN0cmluZyA9IHRvRXJy
b3JTdHJpbmcocmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKSk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9CisgICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKEluc3BlY3RvckRPTUFnZW50Ojp0b0Vycm9yU3RyaW5nKHJlc3VsdC5yZWxlYXNl
RXhjZXB0aW9uKCkpKTsKIAogICAgIE5vZGUqIGNoaWxkID0gcGFyc2VkRWxlbWVudC0+Zmlyc3RD
aGlsZCgpOwotICAgIGlmICghY2hpbGQpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiQ291bGQg
bm90IHBhcnNlIGdpdmVuIHRleHQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYg
KCFjaGlsZCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJDb3VsZCBub3QgcGFyc2Ug
Z2l2ZW4gdGV4dCJfcyk7CiAKICAgICBFbGVtZW50KiBjaGlsZEVsZW1lbnQgPSBkb3duY2FzdDxF
bGVtZW50PihjaGlsZCk7Ci0gICAgaWYgKCFjaGlsZEVsZW1lbnQtPmhhc0F0dHJpYnV0ZXMoKSAm
JiBuYW1lKSB7Ci0gICAgICAgIG1fZG9tRWRpdG9yLT5yZW1vdmVBdHRyaWJ1dGUoKmVsZW1lbnQs
ICpuYW1lLCBlcnJvclN0cmluZyk7Ci0gICAgICAgIHJldHVybjsKKyAgICBpZiAoIWNoaWxkRWxl
bWVudC0+aGFzQXR0cmlidXRlcygpICYmICEhbmFtZSkgeworICAgICAgICBpZiAoIW1fZG9tRWRp
dG9yLT5yZW1vdmVBdHRyaWJ1dGUoKmVsZW1lbnQsIG5hbWUsIGVycm9yU3RyaW5nKSkKKyAgICAg
ICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CisgICAgICAgIHJldHVy
biB7IH07CiAgICAgfQogCiAgICAgYm9vbCBmb3VuZE9yaWdpbmFsQXR0cmlidXRlID0gZmFsc2U7
CiAgICAgZm9yIChjb25zdCBBdHRyaWJ1dGUmIGF0dHJpYnV0ZSA6IGNoaWxkRWxlbWVudC0+YXR0
cmlidXRlc0l0ZXJhdG9yKCkpIHsKICAgICAgICAgLy8gQWRkIGF0dHJpYnV0ZSBwYWlyCi0gICAg
ICAgIGZvdW5kT3JpZ2luYWxBdHRyaWJ1dGUgPSBmb3VuZE9yaWdpbmFsQXR0cmlidXRlIHx8IChu
YW1lICYmIGF0dHJpYnV0ZS5uYW1lKCkudG9TdHJpbmcoKSA9PSAqbmFtZSk7CisgICAgICAgIGZv
dW5kT3JpZ2luYWxBdHRyaWJ1dGUgPSBmb3VuZE9yaWdpbmFsQXR0cmlidXRlIHx8IGF0dHJpYnV0
ZS5uYW1lKCkudG9TdHJpbmcoKSA9PSBuYW1lOwogICAgICAgICBpZiAoIW1fZG9tRWRpdG9yLT5z
ZXRBdHRyaWJ1dGUoKmVsZW1lbnQsIGF0dHJpYnV0ZS5uYW1lKCkudG9TdHJpbmcoKSwgYXR0cmli
dXRlLnZhbHVlKCksIGVycm9yU3RyaW5nKSkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAgICAgfQogCi0gICAgaWYg
KCFmb3VuZE9yaWdpbmFsQXR0cmlidXRlICYmIG5hbWUgJiYgIW5hbWUtPnN0cmlwV2hpdGVTcGFj
ZSgpLmlzRW1wdHkoKSkKLSAgICAgICAgbV9kb21FZGl0b3ItPnJlbW92ZUF0dHJpYnV0ZSgqZWxl
bWVudCwgKm5hbWUsIGVycm9yU3RyaW5nKTsKKyAgICBpZiAoIWZvdW5kT3JpZ2luYWxBdHRyaWJ1
dGUgJiYgIW5hbWUuc3RyaXBXaGl0ZVNwYWNlKCkuaXNFbXB0eSgpKSB7CisgICAgICAgIGlmICgh
bV9kb21FZGl0b3ItPnJlbW92ZUF0dHJpYnV0ZSgqZWxlbWVudCwgbmFtZSwgZXJyb3JTdHJpbmcp
KQorICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKKyAgICB9
CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpyZW1vdmVB
dHRyaWJ1dGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgZWxlbWVudElkLCBjb25zdCBT
dHJpbmcmIG5hbWUpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JET01B
Z2VudDo6cmVtb3ZlQXR0cmlidXRlKFByb3RvY29sOjpET006Ok5vZGVJZCBub2RlSWQsIGNvbnN0
IFN0cmluZyYgbmFtZSkKIHsKLSAgICBFbGVtZW50KiBlbGVtZW50ID0gYXNzZXJ0RWRpdGFibGVF
bGVtZW50KGVycm9yU3RyaW5nLCBlbGVtZW50SWQpOworICAgIFByb3RvY29sOjpFcnJvclN0cmlu
ZyBlcnJvclN0cmluZzsKKworICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBhc3NlcnRFZGl0YWJsZUVs
ZW1lbnQoZXJyb3JTdHJpbmcsIG5vZGVJZCk7CiAgICAgaWYgKCFlbGVtZW50KQotICAgICAgICBy
ZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKLSAg
ICBtX2RvbUVkaXRvci0+cmVtb3ZlQXR0cmlidXRlKCplbGVtZW50LCBuYW1lLCBlcnJvclN0cmlu
Zyk7CisgICAgaWYgKCFtX2RvbUVkaXRvci0+cmVtb3ZlQXR0cmlidXRlKCplbGVtZW50LCBuYW1l
LCBlcnJvclN0cmluZykpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmlu
Zyk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpyZW1v
dmVOb2RlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJZCkKK1Byb3RvY29sOjpF
cnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRPTUFnZW50OjpyZW1vdmVOb2RlKFByb3RvY29s
OjpET006Ok5vZGVJZCBub2RlSWQpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9y
U3RyaW5nOworCiAgICAgTm9kZSogbm9kZSA9IGFzc2VydEVkaXRhYmxlTm9kZShlcnJvclN0cmlu
Zywgbm9kZUlkKTsKICAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0
dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgIENvbnRhaW5lck5vZGUqIHBh
cmVudE5vZGUgPSBub2RlLT5wYXJlbnROb2RlKCk7Ci0gICAgaWYgKCFwYXJlbnROb2RlKSB7Ci0g
ICAgICAgIGVycm9yU3RyaW5nID0gIkNhbm5vdCByZW1vdmUgZGV0YWNoZWQgbm9kZSJfczsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoIXBhcmVudE5vZGUpCisgICAgICAgIHJldHVy
biBtYWtlVW5leHBlY3RlZCgiQ2Fubm90IHJlbW92ZSBkZXRhY2hlZCBub2RlIl9zKTsKIAotICAg
IG1fZG9tRWRpdG9yLT5yZW1vdmVDaGlsZCgqcGFyZW50Tm9kZSwgKm5vZGUsIGVycm9yU3RyaW5n
KTsKKyAgICBpZiAoIW1fZG9tRWRpdG9yLT5yZW1vdmVDaGlsZCgqcGFyZW50Tm9kZSwgKm5vZGUs
IGVycm9yU3RyaW5nKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5n
KTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNldE5v
ZGVOYW1lKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJZCwgY29uc3QgU3RyaW5n
JiB0YWdOYW1lLCBpbnQqIG5ld0lkKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UHJvdG9jb2w6
OkRPTTo6Tm9kZUlkPiBJbnNwZWN0b3JET01BZ2VudDo6c2V0Tm9kZU5hbWUoUHJvdG9jb2w6OkRP
TTo6Tm9kZUlkIG5vZGVJZCwgY29uc3QgU3RyaW5nJiB0YWdOYW1lKQogewotICAgICpuZXdJZCA9
IDA7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOwogCi0gICAgUmVmUHRy
PE5vZGU+IG9sZE5vZGUgPSBub2RlRm9ySWQobm9kZUlkKTsKLSAgICBpZiAoIWlzPEVsZW1lbnQ+
KG9sZE5vZGUpKQotICAgICAgICByZXR1cm47CisgICAgYXV0byBvbGROb2RlID0gYXNzZXJ0RWxl
bWVudChlcnJvclN0cmluZywgbm9kZUlkKTsKKyAgICBpZiAoIW9sZE5vZGUpCisgICAgICAgIHJl
dHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAgICBhdXRvIGNyZWF0ZUVsZW1l
bnRSZXN1bHQgPSBvbGROb2RlLT5kb2N1bWVudCgpLmNyZWF0ZUVsZW1lbnRGb3JCaW5kaW5ncyh0
YWdOYW1lKTsKICAgICBpZiAoY3JlYXRlRWxlbWVudFJlc3VsdC5oYXNFeGNlcHRpb24oKSkKLSAg
ICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoSW5zcGVjdG9yRE9N
QWdlbnQ6OnRvRXJyb3JTdHJpbmcoY3JlYXRlRWxlbWVudFJlc3VsdC5yZWxlYXNlRXhjZXB0aW9u
KCkpKTsKKwogICAgIGF1dG8gbmV3RWxlbWVudCA9IGNyZWF0ZUVsZW1lbnRSZXN1bHQucmVsZWFz
ZVJldHVyblZhbHVlKCk7CiAKICAgICAvLyBDb3B5IG92ZXIgdGhlIG9yaWdpbmFsIG5vZGUncyBh
dHRyaWJ1dGVzLgotICAgIG5ld0VsZW1lbnQtPmNsb25lQXR0cmlidXRlc0Zyb21FbGVtZW50KGRv
d25jYXN0PEVsZW1lbnQ+KCpvbGROb2RlKSk7CisgICAgbmV3RWxlbWVudC0+Y2xvbmVBdHRyaWJ1
dGVzRnJvbUVsZW1lbnQoKm9sZE5vZGUpOwogCiAgICAgLy8gQ29weSBvdmVyIHRoZSBvcmlnaW5h
bCBub2RlJ3MgY2hpbGRyZW4uCiAgICAgUmVmUHRyPE5vZGU+IGNoaWxkOwogICAgIHdoaWxlICgo
Y2hpbGQgPSBvbGROb2RlLT5maXJzdENoaWxkKCkpKSB7CiAgICAgICAgIGlmICghbV9kb21FZGl0
b3ItPmluc2VydEJlZm9yZShuZXdFbGVtZW50LCAqY2hpbGQsIDAsIGVycm9yU3RyaW5nKSkKLSAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJv
clN0cmluZyk7CiAgICAgfQogCiAgICAgLy8gUmVwbGFjZSB0aGUgb2xkIG5vZGUgd2l0aCB0aGUg
bmV3IG5vZGUKICAgICBSZWZQdHI8Q29udGFpbmVyTm9kZT4gcGFyZW50ID0gb2xkTm9kZS0+cGFy
ZW50Tm9kZSgpOwogICAgIGlmICghbV9kb21FZGl0b3ItPmluc2VydEJlZm9yZSgqcGFyZW50LCBu
ZXdFbGVtZW50LmNvcHlSZWYoKSwgb2xkTm9kZS0+bmV4dFNpYmxpbmcoKSwgZXJyb3JTdHJpbmcp
KQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0
cmluZyk7CiAgICAgaWYgKCFtX2RvbUVkaXRvci0+cmVtb3ZlQ2hpbGQoKnBhcmVudCwgKm9sZE5v
ZGUsIGVycm9yU3RyaW5nKSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVu
ZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCi0gICAgKm5ld0lkID0gcHVzaE5vZGVQYXRoVG9Gcm9u
dGVuZChlcnJvclN0cmluZywgbmV3RWxlbWVudC5wdHIoKSk7CisgICAgYXV0byByZXN1bHROb2Rl
SWQgPSBwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKGVycm9yU3RyaW5nLCBuZXdFbGVtZW50LnB0cigp
KTsKICAgICBpZiAobV9jaGlsZHJlblJlcXVlc3RlZC5jb250YWlucyhub2RlSWQpKQotICAgICAg
ICBwdXNoQ2hpbGROb2Rlc1RvRnJvbnRlbmQoKm5ld0lkKTsKKyAgICAgICAgcHVzaENoaWxkTm9k
ZXNUb0Zyb250ZW5kKHJlc3VsdE5vZGVJZCk7CisKKyAgICByZXR1cm4gcmVzdWx0Tm9kZUlkOwog
fQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpnZXRPdXRlckhUTUwoRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBpbnQgbm9kZUlkLCBXVEY6OlN0cmluZyogb3V0ZXJIVE1MKQorUHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8U3RyaW5nPiBJbnNwZWN0b3JET01BZ2VudDo6Z2V0T3V0ZXJIVE1MKFBy
b3RvY29sOjpET006Ok5vZGVJZCBub2RlSWQpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5n
IGVycm9yU3RyaW5nOworCiAgICAgTm9kZSogbm9kZSA9IGFzc2VydE5vZGUoZXJyb3JTdHJpbmcs
IG5vZGVJZCk7CiAgICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVy
biBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKLSAgICAqb3V0ZXJIVE1MID0gc2VyaWFs
aXplRnJhZ21lbnQoKm5vZGUsIFNlcmlhbGl6ZWROb2Rlczo6U3VidHJlZUluY2x1ZGluZ05vZGUp
OworICAgIHJldHVybiBzZXJpYWxpemVGcmFnbWVudCgqbm9kZSwgU2VyaWFsaXplZE5vZGVzOjpT
dWJ0cmVlSW5jbHVkaW5nTm9kZSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNldE91
dGVySFRNTChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQsIGNvbnN0IFN0cmlu
ZyYgb3V0ZXJIVE1MKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yRE9N
QWdlbnQ6OnNldE91dGVySFRNTChQcm90b2NvbDo6RE9NOjpOb2RlSWQgbm9kZUlkLCBjb25zdCBT
dHJpbmcmIG91dGVySFRNTCkKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJp
bmc7CisKICAgICBpZiAoIW5vZGVJZCkgewogICAgICAgICBET01QYXRjaFN1cHBvcnQgeyAqbV9k
b21FZGl0b3IsICptX2RvY3VtZW50IH0ucGF0Y2hEb2N1bWVudChvdXRlckhUTUwpOwotICAgICAg
ICByZXR1cm47CisgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCiAgICAgTm9kZSogbm9kZSA9
IGFzc2VydEVkaXRhYmxlTm9kZShlcnJvclN0cmluZywgbm9kZUlkKTsKICAgICBpZiAoIW5vZGUp
Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3Ry
aW5nKTsKIAogICAgIERvY3VtZW50JiBkb2N1bWVudCA9IG5vZGUtPmRvY3VtZW50KCk7Ci0gICAg
aWYgKCFkb2N1bWVudC5pc0hUTUxEb2N1bWVudCgpICYmICFkb2N1bWVudC5pc1hNTERvY3VtZW50
KCkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiRG9jdW1lbnQgb2Ygbm9kZSBmb3IgZ2l2ZW4g
bm9kZUlkIGlzIG5vdCBIVE1ML1hNTCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBp
ZiAoIWRvY3VtZW50LmlzSFRNTERvY3VtZW50KCkgJiYgIWRvY3VtZW50LmlzWE1MRG9jdW1lbnQo
KSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJEb2N1bWVudCBvZiBub2RlIGZvciBn
aXZlbiBub2RlSWQgaXMgbm90IEhUTUwvWE1MIl9zKTsKIAogICAgIE5vZGUqIG5ld05vZGUgPSBu
dWxscHRyOwogICAgIGlmICghbV9kb21FZGl0b3ItPnNldE91dGVySFRNTCgqbm9kZSwgb3V0ZXJI
VE1MLCBuZXdOb2RlLCBlcnJvclN0cmluZykpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0
dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgIGlmICghbmV3Tm9kZSkgewog
ICAgICAgICAvLyBUaGUgb25seSBjaGlsZCBub2RlIGhhcyBiZWVuIGRlbGV0ZWQuCi0gICAgICAg
IHJldHVybjsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKLSAgICBpbnQgbmV3SWQgPSBw
dXNoTm9kZVBhdGhUb0Zyb250ZW5kKGVycm9yU3RyaW5nLCBuZXdOb2RlKTsKKyAgICBhdXRvIG5l
d0lkID0gcHVzaE5vZGVQYXRoVG9Gcm9udGVuZChlcnJvclN0cmluZywgbmV3Tm9kZSk7CiAKICAg
ICBib29sIGNoaWxkcmVuUmVxdWVzdGVkID0gbV9jaGlsZHJlblJlcXVlc3RlZC5jb250YWlucyhu
b2RlSWQpOwogICAgIGlmIChjaGlsZHJlblJlcXVlc3RlZCkKICAgICAgICAgcHVzaENoaWxkTm9k
ZXNUb0Zyb250ZW5kKG5ld0lkKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVj
dG9yRE9NQWdlbnQ6Omluc2VydEFkamFjZW50SFRNTChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcs
IGludCBub2RlSWQsIGNvbnN0IFN0cmluZyYgcG9zaXRpb24sIGNvbnN0IFN0cmluZyYgaHRtbCkK
K1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRPTUFnZW50OjppbnNlcnRB
ZGphY2VudEhUTUwoUHJvdG9jb2w6OkRPTTo6Tm9kZUlkIG5vZGVJZCwgY29uc3QgU3RyaW5nJiBw
b3NpdGlvbiwgY29uc3QgU3RyaW5nJiBodG1sKQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmlu
ZyBlcnJvclN0cmluZzsKKwogICAgIE5vZGUqIG5vZGUgPSBhc3NlcnRFZGl0YWJsZU5vZGUoZXJy
b3JTdHJpbmcsIG5vZGVJZCk7CiAgICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm47CisgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKLSAgICBpZiAoIWlzPEVs
ZW1lbnQ+KG5vZGUpKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIk5vZGUgZm9yIGdpdmVuIG5v
ZGVJZCBpcyBub3QgYW4gZWxlbWVudCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBp
ZiAoIWlzPEVsZW1lbnQ+KG5vZGUpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk5v
ZGUgZm9yIGdpdmVuIG5vZGVJZCBpcyBub3QgYW4gZWxlbWVudCJfcyk7CiAKLSAgICBtX2RvbUVk
aXRvci0+aW5zZXJ0QWRqYWNlbnRIVE1MKGRvd25jYXN0PEVsZW1lbnQ+KCpub2RlKSwgcG9zaXRp
b24sIGh0bWwsIGVycm9yU3RyaW5nKTsKKyAgICBpZiAoIW1fZG9tRWRpdG9yLT5pbnNlcnRBZGph
Y2VudEhUTUwoZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUpLCBwb3NpdGlvbiwgaHRtbCwgZXJyb3JT
dHJpbmcpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOworCisg
ICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c2V0Tm9kZVZhbHVl
KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJZCwgY29uc3QgU3RyaW5nJiB2YWx1
ZSkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRPTUFnZW50OjpzZXRO
b2RlVmFsdWUoUHJvdG9jb2w6OkRPTTo6Tm9kZUlkIG5vZGVJZCwgY29uc3QgU3RyaW5nJiB2YWx1
ZSkKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBOb2Rl
KiBub2RlID0gYXNzZXJ0RWRpdGFibGVOb2RlKGVycm9yU3RyaW5nLCBub2RlSWQpOwogICAgIGlm
ICghbm9kZSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQo
ZXJyb3JTdHJpbmcpOwogCi0gICAgaWYgKCFpczxUZXh0Pigqbm9kZSkpIHsKLSAgICAgICAgZXJy
b3JTdHJpbmcgPSAiTm9kZSBmb3IgZ2l2ZW4gbm9kZUlkIGlzIG5vdCB0ZXh0Il9zOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQorICAgIGlmICghaXM8VGV4dD4oKm5vZGUpKQorICAgICAgICByZXR1
cm4gbWFrZVVuZXhwZWN0ZWQoIk5vZGUgZm9yIGdpdmVuIG5vZGVJZCBpcyBub3QgdGV4dCJfcyk7
CiAKLSAgICBtX2RvbUVkaXRvci0+cmVwbGFjZVdob2xlVGV4dChkb3duY2FzdDxUZXh0Pigqbm9k
ZSksIHZhbHVlLCBlcnJvclN0cmluZyk7CisgICAgaWYgKCFtX2RvbUVkaXRvci0+cmVwbGFjZVdo
b2xlVGV4dChkb3duY2FzdDxUZXh0Pigqbm9kZSksIHZhbHVlLCBlcnJvclN0cmluZykpCisgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CisKKyAgICByZXR1cm4geyB9
OwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpnZXRTdXBwb3J0ZWRFdmVudE5hbWVzKEVy
cm9yU3RyaW5nJiwgUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4mIGV2ZW50TmFtZXMpCitQ
cm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SlNPTjo6QXJyYXlPZjxTdHJpbmc+Pj4gSW5zcGVj
dG9yRE9NQWdlbnQ6OmdldFN1cHBvcnRlZEV2ZW50TmFtZXMoKQogewotICAgIGV2ZW50TmFtZXMg
PSBKU09OOjpBcnJheU9mPFN0cmluZz46OmNyZWF0ZSgpOworICAgIGF1dG8gZXZlbnROYW1lcyA9
IEpTT046OkFycmF5T2Y8U3RyaW5nPjo6Y3JlYXRlKCk7CiAKICNkZWZpbmUgRE9NX0VWRU5UX05B
TUVTX0FERChuYW1lKSBldmVudE5hbWVzLT5hZGRJdGVtKCNuYW1lKTsKICAgICBET01fRVZFTlRf
TkFNRVNfRk9SX0VBQ0goRE9NX0VWRU5UX05BTUVTX0FERCkKICN1bmRlZiBET01fRVZFTlRfTkFN
RVNfQURECisKKyAgICByZXR1cm4gV1RGTW92ZShldmVudE5hbWVzKTsKIH0KIAogI2lmIEVOQUJM
RShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotdm9pZCBJbnNwZWN0b3JET01BZ2Vu
dDo6Z2V0RGF0YUJpbmRpbmdzRm9yTm9kZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCAv
KiBub2RlSWQgKi8sIFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRP
TTo6RGF0YUJpbmRpbmc+PiYgLyogZGF0YUJpbmRpbmdzICovKQorUHJvdG9jb2w6OkVycm9yU3Ry
aW5nT3I8UmVmPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkRPTTo6RGF0YUJpbmRpbmc+Pj4gSW5z
cGVjdG9yRE9NQWdlbnQ6OmdldERhdGFCaW5kaW5nc0Zvck5vZGUoUHJvdG9jb2w6OkRPTTo6Tm9k
ZUlkKQogewotICAgIGVycm9yU3RyaW5nID0gIk5vdCBzdXBwb3J0ZWQiX3M7CisgICAgcmV0dXJu
IG1ha2VVbmV4cGVjdGVkKCJOb3Qgc3VwcG9ydGVkIl9zKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JE
T01BZ2VudDo6Z2V0QXNzb2NpYXRlZERhdGFGb3JOb2RlKEVycm9yU3RyaW5nJiBlcnJvclN0cmlu
ZywgaW50IC8qIG5vZGVJZCAqLywgT3B0aW9uYWw8U3RyaW5nPiYgLyogYXNzb2NpYXRlZERhdGEg
Ki8pCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxTdHJpbmc+IEluc3BlY3RvckRPTUFnZW50Ojpn
ZXRBc3NvY2lhdGVkRGF0YUZvck5vZGUoUHJvdG9jb2w6OkRPTTo6Tm9kZUlkKQogewotICAgIGVy
cm9yU3RyaW5nID0gIk5vdCBzdXBwb3J0ZWQiX3M7CisgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVk
KCJOb3Qgc3VwcG9ydGVkIl9zKTsKIH0KICNlbmRpZgogCi12b2lkIEluc3BlY3RvckRPTUFnZW50
OjpnZXRFdmVudExpc3RlbmVyc0Zvck5vZGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQg
bm9kZUlkLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkV2
ZW50TGlzdGVuZXI+PiYgbGlzdGVuZXJzQXJyYXkpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxS
ZWY8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6RE9NOjpFdmVudExpc3RlbmVyPj4+IEluc3BlY3Rv
ckRPTUFnZW50OjpnZXRFdmVudExpc3RlbmVyc0Zvck5vZGUoUHJvdG9jb2w6OkRPTTo6Tm9kZUlk
IG5vZGVJZCkKIHsKLSAgICBsaXN0ZW5lcnNBcnJheSA9IEpTT046OkFycmF5T2Y8SW5zcGVjdG9y
OjpQcm90b2NvbDo6RE9NOjpFdmVudExpc3RlbmVyPjo6Y3JlYXRlKCk7CisgICAgUHJvdG9jb2w6
OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOwogCiAgICAgYXV0byogbm9kZSA9IGFzc2VydE5vZGUo
ZXJyb3JTdHJpbmcsIG5vZGVJZCk7CiAgICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm47Cisg
ICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAgICBWZWN0b3I8
UmVmUHRyPEV2ZW50VGFyZ2V0Pj4gYW5jZXN0b3JzOwogICAgIGFuY2VzdG9ycy5hcHBlbmQobm9k
ZSk7CkBAIC05MjksOCArOTU4LDEwIEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmdldEV2ZW50
TGlzdGVuZXJzRm9yTm9kZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBuCiAgICAgICAg
IH0KICAgICB9CiAKKyAgICBhdXRvIGxpc3RlbmVycyA9IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6
OkRPTTo6RXZlbnRMaXN0ZW5lcj46OmNyZWF0ZSgpOworCiAgICAgYXV0byBhZGRMaXN0ZW5lciA9
IFsmXSAoUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXImIGxpc3RlbmVyLCBjb25zdCBFdmVudExpc3Rl
bmVySW5mbyYgaW5mbykgewotICAgICAgICBpbnQgaWRlbnRpZmllciA9IDA7CisgICAgICAgIFBy
b3RvY29sOjpET006OkV2ZW50TGlzdGVuZXJJZCBpZGVudGlmaWVyID0gMDsKICAgICAgICAgYm9v
bCBkaXNhYmxlZCA9IGZhbHNlOwogICAgICAgICBSZWZQdHI8SlNDOjpCcmVha3BvaW50PiBicmVh
a3BvaW50OwogCkBAIC05NTMsNyArOTg0LDcgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Z2V0
RXZlbnRMaXN0ZW5lcnNGb3JOb2RlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG4KICAg
ICAgICAgICAgIG1fZXZlbnRMaXN0ZW5lckVudHJpZXMuYWRkKGlkZW50aWZpZXIsIGluc3BlY3Rv
ckV2ZW50TGlzdGVuZXIpOwogICAgICAgICB9CiAKLSAgICAgICAgbGlzdGVuZXJzQXJyYXktPmFk
ZEl0ZW0oYnVpbGRPYmplY3RGb3JFdmVudExpc3RlbmVyKGxpc3RlbmVyLCBpZGVudGlmaWVyLCAq
aW5mby5ldmVudFRhcmdldCwgaW5mby5ldmVudFR5cGUsIGRpc2FibGVkLCBicmVha3BvaW50KSk7
CisgICAgICAgIGxpc3RlbmVycy0+YWRkSXRlbShidWlsZE9iamVjdEZvckV2ZW50TGlzdGVuZXIo
bGlzdGVuZXIsIGlkZW50aWZpZXIsICppbmZvLmV2ZW50VGFyZ2V0LCBpbmZvLmV2ZW50VHlwZSwg
ZGlzYWJsZWQsIGJyZWFrcG9pbnQpKTsKICAgICB9OwogCiAgICAgLy8gR2V0IENhcHR1cmluZyBM
aXN0ZW5lcnMgKGluIHRoaXMgb3JkZXIpCkBAIC05NzYsODAgKzEwMDcsODEgQEAgdm9pZCBJbnNw
ZWN0b3JET01BZ2VudDo6Z2V0RXZlbnRMaXN0ZW5lcnNGb3JOb2RlKEVycm9yU3RyaW5nJiBlcnJv
clN0cmluZywgaW50IG4KIAogICAgIGlmIChtX2luc3BlY3RlZE5vZGUgPT0gbm9kZSkKICAgICAg
ICAgbV9zdXBwcmVzc0V2ZW50TGlzdGVuZXJDaGFuZ2VkRXZlbnQgPSBmYWxzZTsKKworICAgIHJl
dHVybiBXVEZNb3ZlKGxpc3RlbmVycyk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNl
dEV2ZW50TGlzdGVuZXJEaXNhYmxlZChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBldmVu
dExpc3RlbmVySWQsIGJvb2wgZGlzYWJsZWQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lk
PiBJbnNwZWN0b3JET01BZ2VudDo6c2V0RXZlbnRMaXN0ZW5lckRpc2FibGVkKFByb3RvY29sOjpE
T006OkV2ZW50TGlzdGVuZXJJZCBldmVudExpc3RlbmVySWQsIGJvb2wgZGlzYWJsZWQpCiB7CiAg
ICAgYXV0byBpdCA9IG1fZXZlbnRMaXN0ZW5lckVudHJpZXMuZmluZChldmVudExpc3RlbmVySWQp
OwotICAgIGlmIChpdCA9PSBtX2V2ZW50TGlzdGVuZXJFbnRyaWVzLmVuZCgpKSB7Ci0gICAgICAg
IGVycm9yU3RyaW5nID0gIk1pc3NpbmcgZXZlbnQgbGlzdGVuZXIgZm9yIGdpdmVuIGV2ZW50TGlz
dGVuZXJJZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoaXQgPT0gbV9ldmVu
dExpc3RlbmVyRW50cmllcy5lbmQoKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJN
aXNzaW5nIGV2ZW50IGxpc3RlbmVyIGZvciBnaXZlbiBldmVudExpc3RlbmVySWQiX3MpOwogCiAg
ICAgaXQtPnZhbHVlLmRpc2FibGVkID0gZGlzYWJsZWQ7CisKKyAgICByZXR1cm4geyB9OwogfQog
Ci12b2lkIEluc3BlY3RvckRPTUFnZW50OjpzZXRCcmVha3BvaW50Rm9yRXZlbnRMaXN0ZW5lcihF
cnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBldmVudExpc3RlbmVySWQsIGNvbnN0IEpTT046
Ok9iamVjdCogb3B0aW9uc1BheWxvYWQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJ
bnNwZWN0b3JET01BZ2VudDo6c2V0QnJlYWtwb2ludEZvckV2ZW50TGlzdGVuZXIoUHJvdG9jb2w6
OkRPTTo6RXZlbnRMaXN0ZW5lcklkIGV2ZW50TGlzdGVuZXJJZCwgUmVmUHRyPEpTT046Ok9iamVj
dD4mJiBvcHRpb25zKQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsK
KwogICAgIGF1dG8gaXQgPSBtX2V2ZW50TGlzdGVuZXJFbnRyaWVzLmZpbmQoZXZlbnRMaXN0ZW5l
cklkKTsKLSAgICBpZiAoaXQgPT0gbV9ldmVudExpc3RlbmVyRW50cmllcy5lbmQoKSkgewotICAg
ICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIGV2ZW50IGxpc3RlbmVyIGZvciBnaXZlbiBldmVu
dExpc3RlbmVySWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKGl0ID09IG1f
ZXZlbnRMaXN0ZW5lckVudHJpZXMuZW5kKCkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3Rl
ZCgiTWlzc2luZyBldmVudCBsaXN0ZW5lciBmb3IgZ2l2ZW4gZXZlbnRMaXN0ZW5lcklkIl9zKTsK
IAotICAgIGlmIChpdC0+dmFsdWUuYnJlYWtwb2ludCkgewotICAgICAgICBlcnJvclN0cmluZyA9
ICJCcmVha3BvaW50IGZvciBnaXZlbiBldmVudExpc3RlbmVySWQgYWxyZWFkeSBleGlzdHMiX3M7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKGl0LT52YWx1ZS5icmVha3BvaW50KQor
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkJyZWFrcG9pbnQgZm9yIGdpdmVuIGV2ZW50
TGlzdGVuZXJJZCBhbHJlYWR5IGV4aXN0cyJfcyk7CiAKLSAgICBpdC0+dmFsdWUuYnJlYWtwb2lu
dCA9IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRlYnVnZ2VyQnJlYWtwb2ludEZyb21QYXlsb2Fk
KGVycm9yU3RyaW5nLCBvcHRpb25zUGF5bG9hZCk7CisgICAgaXQtPnZhbHVlLmJyZWFrcG9pbnQg
PSBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkZWJ1Z2dlckJyZWFrcG9pbnRGcm9tUGF5bG9hZChl
cnJvclN0cmluZywgV1RGTW92ZShvcHRpb25zKSk7CisgICAgaWYgKCFpdC0+dmFsdWUuYnJlYWtw
b2ludCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKKworICAg
IHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnJlbW92ZUJyZWFrcG9p
bnRGb3JFdmVudExpc3RlbmVyKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IGV2ZW50TGlz
dGVuZXJJZCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRPTUFnZW50
OjpyZW1vdmVCcmVha3BvaW50Rm9yRXZlbnRMaXN0ZW5lcihQcm90b2NvbDo6RE9NOjpFdmVudExp
c3RlbmVySWQgZXZlbnRMaXN0ZW5lcklkKQogewogICAgIGF1dG8gaXQgPSBtX2V2ZW50TGlzdGVu
ZXJFbnRyaWVzLmZpbmQoZXZlbnRMaXN0ZW5lcklkKTsKLSAgICBpZiAoaXQgPT0gbV9ldmVudExp
c3RlbmVyRW50cmllcy5lbmQoKSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIGV2
ZW50IGxpc3RlbmVyIGZvciBnaXZlbiBldmVudExpc3RlbmVySWQiX3M7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9CisgICAgaWYgKGl0ID09IG1fZXZlbnRMaXN0ZW5lckVudHJpZXMuZW5kKCkpCisg
ICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTWlzc2luZyBldmVudCBsaXN0ZW5lciBmb3Ig
Z2l2ZW4gZXZlbnRMaXN0ZW5lcklkIl9zKTsKIAogICAgIGlmICghaXQtPnZhbHVlLmJyZWFrcG9p
bnQpCi0gICAgICAgIGVycm9yU3RyaW5nID0gIkJyZWFrcG9pbnQgZm9yIGdpdmVuIGV2ZW50TGlz
dGVuZXJJZCBtaXNzaW5nIl9zOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkJyZWFr
cG9pbnQgZm9yIGdpdmVuIGV2ZW50TGlzdGVuZXJJZCBtaXNzaW5nIl9zKTsKIAogICAgIGl0LT52
YWx1ZS5icmVha3BvaW50ID0gbnVsbHB0cjsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQg
SW5zcGVjdG9yRE9NQWdlbnQ6OmdldEFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzRm9yTm9kZShFcnJv
clN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzPiYgYXhQcm9wZXJ0aWVzKQorUHJvdG9j
b2w6OkVycm9yU3RyaW5nT3I8UmVmPFByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0
aWVzPj4gSW5zcGVjdG9yRE9NQWdlbnQ6OmdldEFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzRm9yTm9k
ZShQcm90b2NvbDo6RE9NOjpOb2RlSWQgbm9kZUlkKQogeworICAgIFByb3RvY29sOjpFcnJvclN0
cmluZyBlcnJvclN0cmluZzsKKwogICAgIE5vZGUqIG5vZGUgPSBhc3NlcnROb2RlKGVycm9yU3Ry
aW5nLCBub2RlSWQpOwogICAgIGlmICghbm9kZSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICBy
ZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCi0gICAgYXhQcm9wZXJ0aWVzID0g
YnVpbGRPYmplY3RGb3JBY2Nlc3NpYmlsaXR5UHJvcGVydGllcyhub2RlKTsKKyAgICByZXR1cm4g
YnVpbGRPYmplY3RGb3JBY2Nlc3NpYmlsaXR5UHJvcGVydGllcygqbm9kZSk7CiB9CiAKLXZvaWQg
SW5zcGVjdG9yRE9NQWdlbnQ6OnBlcmZvcm1TZWFyY2goRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5n
LCBjb25zdCBTdHJpbmcmIHF1ZXJ5LCBjb25zdCBKU09OOjpBcnJheSogbm9kZUlkcywgY29uc3Qg
Ym9vbCogY2FzZVNlbnNpdGl2ZSwgU3RyaW5nKiBzZWFyY2hJZCwgaW50KiByZXN1bHRDb3VudCkK
K1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHN0ZDo6dHVwbGU8U3RyaW5nIC8qIHNlYXJjaElkICov
LCBpbnQgLyogcmVzdWx0Q291bnQgKi8+PiBJbnNwZWN0b3JET01BZ2VudDo6cGVyZm9ybVNlYXJj
aChjb25zdCBTdHJpbmcmIHF1ZXJ5LCBSZWZQdHI8SlNPTjo6QXJyYXk+JiYgbm9kZUlkcywgT3B0
aW9uYWw8Ym9vbD4mJiBjYXNlU2Vuc2l0aXZlKQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmlu
ZyBlcnJvclN0cmluZzsKKwogICAgIC8vIEZJWE1FOiBTZWFyY2ggd29ya3Mgd2l0aCBub2RlIGdy
YW51bGFyaXR5IC0gbnVtYmVyIG9mIG1hdGNoZXMgd2l0aGluIG5vZGUgaXMgbm90IGNhbGN1bGF0
ZWQuCiAgICAgSW5zcGVjdG9yTm9kZUZpbmRlciBmaW5kZXIocXVlcnksIGNhc2VTZW5zaXRpdmUg
JiYgKmNhc2VTZW5zaXRpdmUpOwogCiAgICAgaWYgKG5vZGVJZHMpIHsKICAgICAgICAgZm9yIChh
dXRvJiBub2RlVmFsdWUgOiAqbm9kZUlkcykgewotICAgICAgICAgICAgaWYgKCFub2RlVmFsdWUp
IHsKLSAgICAgICAgICAgICAgICBlcnJvclN0cmluZyA9ICJVbmV4cGVjdGVkIG5vbi1pbnRlZ2Vy
IGl0ZW0gaW4gZ2l2ZW4gbm9kZUlkcyJfczsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBpbnQgbm9kZUlkID0gMDsKLSAgICAgICAgICAgIGlmICgh
bm9kZVZhbHVlLT5hc0ludGVnZXIobm9kZUlkKSkgewotICAgICAgICAgICAgICAgIGVycm9yU3Ry
aW5nID0gIlVuZXhwZWN0ZWQgbm9uLWludGVnZXIgaXRlbSBpbiBnaXZlbiBub2RlSWRzIl9zOwot
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIE5vZGUq
IG5vZGUgPSBhc3NlcnROb2RlKGVycm9yU3RyaW5nLCBub2RlSWQpOwotICAgICAgICAgICAgaWYg
KCFub2RlKSB7Ci0gICAgICAgICAgICAgICAgLy8gYXNzZXJ0Tm9kZSBzaG91bGQgaGF2ZSBmaWxs
ZWQgdGhlIGVycm9yU3RyaW5nIGZvciB1cy4KLSAgICAgICAgICAgICAgICBBU1NFUlQoZXJyb3JT
dHJpbmcubGVuZ3RoKCkpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGF1dG8gbm9kZUlkID0gbm9kZVZhbHVlLT5hc0ludGVnZXIoKTsKKyAgICAg
ICAgICAgIGlmICghbm9kZUlkKQorICAgICAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3Rl
ZCgiVW5leHBlY3RlZCBub24taW50ZWdlciBpdGVtIGluIGdpdmVuIG5vZGVJZHMiX3MpOworCisg
ICAgICAgICAgICBOb2RlKiBub2RlID0gYXNzZXJ0Tm9kZShlcnJvclN0cmluZywgKm5vZGVJZCk7
CisgICAgICAgICAgICBpZiAoIW5vZGUpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4
cGVjdGVkKGVycm9yU3RyaW5nKTsKKwogICAgICAgICAgICAgZmluZGVyLnBlcmZvcm1TZWFyY2go
bm9kZSk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewpAQCAtMTA1OCwzNyArMTA5MCwzNiBAQCB2
b2lkIEluc3BlY3RvckRPTUFnZW50OjpwZXJmb3JtU2VhcmNoKEVycm9yU3RyaW5nJiBlcnJvclN0
cmluZywgY29uc3QgU3RyaW5nJiBxdQogICAgICAgICBmaW5kZXIucGVyZm9ybVNlYXJjaChtX2Rv
Y3VtZW50LmdldCgpKTsKICAgICB9CiAKLSAgICAqc2VhcmNoSWQgPSBJZGVudGlmaWVyc0ZhY3Rv
cnk6OmNyZWF0ZUlkZW50aWZpZXIoKTsKKyAgICBhdXRvIHNlYXJjaElkID0gSWRlbnRpZmllcnNG
YWN0b3J5OjpjcmVhdGVJZGVudGlmaWVyKCk7CiAKLSAgICBhdXRvJiByZXN1bHRzVmVjdG9yID0g
bV9zZWFyY2hSZXN1bHRzLmFkZCgqc2VhcmNoSWQsIFZlY3RvcjxSZWZQdHI8Tm9kZT4+KCkpLml0
ZXJhdG9yLT52YWx1ZTsKKyAgICBhdXRvJiByZXN1bHRzVmVjdG9yID0gbV9zZWFyY2hSZXN1bHRz
LmFkZChzZWFyY2hJZCwgVmVjdG9yPFJlZlB0cjxOb2RlPj4oKSkuaXRlcmF0b3ItPnZhbHVlOwog
ICAgIGZvciAoYXV0byYgcmVzdWx0IDogZmluZGVyLnJlc3VsdHMoKSkKICAgICAgICAgcmVzdWx0
c1ZlY3Rvci5hcHBlbmQocmVzdWx0KTsKIAotICAgICpyZXN1bHRDb3VudCA9IHJlc3VsdHNWZWN0
b3Iuc2l6ZSgpOworICAgIHJldHVybiB7IHsgc2VhcmNoSWQsIHJlc3VsdHNWZWN0b3Iuc2l6ZSgp
IH0gfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Z2V0U2VhcmNoUmVzdWx0cyhFcnJv
clN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgc2VhcmNoSWQsIGludCBmcm9tSW5k
ZXgsIGludCB0b0luZGV4LCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxpbnQ+PiYgbm9kZUlkcykKK1By
b3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpET006Ok5v
ZGVJZD4+PiBJbnNwZWN0b3JET01BZ2VudDo6Z2V0U2VhcmNoUmVzdWx0cyhjb25zdCBTdHJpbmcm
IHNlYXJjaElkLCBpbnQgZnJvbUluZGV4LCBpbnQgdG9JbmRleCkKIHsKICAgICBTZWFyY2hSZXN1
bHRzOjppdGVyYXRvciBpdCA9IG1fc2VhcmNoUmVzdWx0cy5maW5kKHNlYXJjaElkKTsKLSAgICBp
ZiAoaXQgPT0gbV9zZWFyY2hSZXN1bHRzLmVuZCgpKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0g
Ik1pc3Npbmcgc2VhcmNoIHJlc3VsdCBmb3IgZ2l2ZW4gc2VhcmNoSWQiX3M7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9CisgICAgaWYgKGl0ID09IG1fc2VhcmNoUmVzdWx0cy5lbmQoKSkKKyAgICAg
ICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJNaXNzaW5nIHNlYXJjaCByZXN1bHQgZm9yIGdpdmVu
IHNlYXJjaElkIl9zKTsKIAogICAgIGludCBzaXplID0gaXQtPnZhbHVlLnNpemUoKTsKLSAgICBp
ZiAoZnJvbUluZGV4IDwgMCB8fCB0b0luZGV4ID4gc2l6ZSB8fCBmcm9tSW5kZXggPj0gdG9JbmRl
eCkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJJbnZhbGlkIHNlYXJjaCByZXN1bHQgcmFuZ2Ug
Zm9yIGdpdmVuIGZyb21JbmRleCBhbmQgdG9JbmRleCJfczsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KKyAgICBpZiAoZnJvbUluZGV4IDwgMCB8fCB0b0luZGV4ID4gc2l6ZSB8fCBmcm9tSW5kZXgg
Pj0gdG9JbmRleCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJJbnZhbGlkIHNlYXJj
aCByZXN1bHQgcmFuZ2UgZm9yIGdpdmVuIGZyb21JbmRleCBhbmQgdG9JbmRleCJfcyk7CiAKLSAg
ICBub2RlSWRzID0gSlNPTjo6QXJyYXlPZjxpbnQ+OjpjcmVhdGUoKTsKKyAgICBhdXRvIG5vZGVJ
ZHMgPSBKU09OOjpBcnJheU9mPFByb3RvY29sOjpET006Ok5vZGVJZD46OmNyZWF0ZSgpOwogICAg
IGZvciAoaW50IGkgPSBmcm9tSW5kZXg7IGkgPCB0b0luZGV4OyArK2kpCiAgICAgICAgIG5vZGVJ
ZHMtPmFkZEl0ZW0ocHVzaE5vZGVQYXRoVG9Gcm9udGVuZCgoaXQtPnZhbHVlKVtpXS5nZXQoKSkp
OworICAgIHJldHVybiBXVEZNb3ZlKG5vZGVJZHMpOwogfQogCi12b2lkIEluc3BlY3RvckRPTUFn
ZW50OjpkaXNjYXJkU2VhcmNoUmVzdWx0cyhFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgc2Vh
cmNoSWQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JET01BZ2VudDo6
ZGlzY2FyZFNlYXJjaFJlc3VsdHMoY29uc3QgU3RyaW5nJiBzZWFyY2hJZCkKIHsKICAgICBtX3Nl
YXJjaFJlc3VsdHMucmVtb3ZlKHNlYXJjaElkKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKIGJv
b2wgSW5zcGVjdG9yRE9NQWdlbnQ6OmhhbmRsZU1vdXNlUHJlc3MoKQpAQCAtMTExNyw3ICsxMTQ4
LDcgQEAgYm9vbCBJbnNwZWN0b3JET01BZ2VudDo6aGFuZGxlVG91Y2hFdmVudChOb2RlJiBub2Rl
KQogCiB2b2lkIEluc3BlY3RvckRPTUFnZW50OjppbnNwZWN0KE5vZGUqIGluc3BlY3RlZE5vZGUp
CiB7Ci0gICAgRXJyb3JTdHJpbmcgaWdub3JlZDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcg
aWdub3JlZDsKICAgICBSZWZQdHI8Tm9kZT4gbm9kZSA9IGluc3BlY3RlZE5vZGU7CiAgICAgc2V0
U2VhcmNoaW5nRm9yTm9kZShpZ25vcmVkLCBmYWxzZSwgbnVsbHB0ciwgZmFsc2UpOwogCkBAIC0x
MTczLDcgKzEyMDQsNyBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpoaWdobGlnaHRNb3VzZWRP
dmVyTm9kZSgpCiAgICAgICAgIG1fb3ZlcmxheS0+aGlnaGxpZ2h0Tm9kZShub2RlLCAqbV9pbnNw
ZWN0TW9kZUhpZ2hsaWdodENvbmZpZyk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNl
dFNlYXJjaGluZ0Zvck5vZGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBib29sIGVuYWJsZWQs
IGNvbnN0IEpTT046Ok9iamVjdCogaGlnaGxpZ2h0SW5zcGVjdG9yT2JqZWN0LCBib29sIHNob3dS
dWxlcnMpCit2b2lkIEluc3BlY3RvckRPTUFnZW50OjpzZXRTZWFyY2hpbmdGb3JOb2RlKFByb3Rv
Y29sOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGJvb2wgZW5hYmxlZCwgUmVmUHRyPEpTT046
Ok9iamVjdD4mJiBoaWdobGlnaHRJbnNwZWN0b3JPYmplY3QsIGJvb2wgc2hvd1J1bGVycykKIHsK
ICAgICBpZiAobV9zZWFyY2hpbmdGb3JOb2RlID09IGVuYWJsZWQpCiAgICAgICAgIHJldHVybjsK
QEAgLTExODMsMTIgKzEyMTQsMTIgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c2V0U2VhcmNo
aW5nRm9yTm9kZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGJvb2wgZW5hYmwKICAgICBtX292
ZXJsYXktPnNldFNob3dSdWxlcnNEdXJpbmdFbGVtZW50U2VsZWN0aW9uKG1fc2VhcmNoaW5nRm9y
Tm9kZSAmJiBzaG93UnVsZXJzKTsKIAogICAgIGlmIChtX3NlYXJjaGluZ0Zvck5vZGUpIHsKLSAg
ICAgICAgbV9pbnNwZWN0TW9kZUhpZ2hsaWdodENvbmZpZyA9IGhpZ2hsaWdodENvbmZpZ0Zyb21J
bnNwZWN0b3JPYmplY3QoZXJyb3JTdHJpbmcsIGhpZ2hsaWdodEluc3BlY3Rvck9iamVjdCk7Cisg
ICAgICAgIG1faW5zcGVjdE1vZGVIaWdobGlnaHRDb25maWcgPSBoaWdobGlnaHRDb25maWdGcm9t
SW5zcGVjdG9yT2JqZWN0KGVycm9yU3RyaW5nLCBXVEZNb3ZlKGhpZ2hsaWdodEluc3BlY3Rvck9i
amVjdCkpOwogICAgICAgICBpZiAoIW1faW5zcGVjdE1vZGVIaWdobGlnaHRDb25maWcpCiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIGhpZ2hsaWdodE1vdXNlZE92ZXJOb2RlKCk7CiAgICAg
fSBlbHNlCi0gICAgICAgIGhpZGVIaWdobGlnaHQoZXJyb3JTdHJpbmcpOworICAgICAgICBoaWRl
SGlnaGxpZ2h0KCk7CiAKICAgICBtX292ZXJsYXktPmRpZFNldFNlYXJjaGluZ0Zvck5vZGUobV9z
ZWFyY2hpbmdGb3JOb2RlKTsKIApAQCAtMTE5Niw3ICsxMjI3LDcgQEAgdm9pZCBJbnNwZWN0b3JE
T01BZ2VudDo6c2V0U2VhcmNoaW5nRm9yTm9kZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGJv
b2wgZW5hYmwKICAgICAgICAgY2xpZW50LT5lbGVtZW50U2VsZWN0aW9uQ2hhbmdlZChtX3NlYXJj
aGluZ0Zvck5vZGUpOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8SGlnaGxpZ2h0Q29uZmlnPiBJbnNw
ZWN0b3JET01BZ2VudDo6aGlnaGxpZ2h0Q29uZmlnRnJvbUluc3BlY3Rvck9iamVjdChFcnJvclN0
cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IEpTT046Ok9iamVjdCogaGlnaGxpZ2h0SW5zcGVjdG9y
T2JqZWN0KQorc3RkOjp1bmlxdWVfcHRyPEhpZ2hsaWdodENvbmZpZz4gSW5zcGVjdG9yRE9NQWdl
bnQ6OmhpZ2hsaWdodENvbmZpZ0Zyb21JbnNwZWN0b3JPYmplY3QoUHJvdG9jb2w6OkVycm9yU3Ry
aW5nJiBlcnJvclN0cmluZywgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBoaWdobGlnaHRJbnNwZWN0
b3JPYmplY3QpCiB7CiAgICAgaWYgKCFoaWdobGlnaHRJbnNwZWN0b3JPYmplY3QpIHsKICAgICAg
ICAgZXJyb3JTdHJpbmcgPSAiSW50ZXJuYWwgZXJyb3I6IGhpZ2hsaWdodCBjb25maWd1cmF0aW9u
IHBhcmFtZXRlciBpcyBtaXNzaW5nIl9zOwpAQCAtMTIwNCw4MSArMTIzNSw5MyBAQCBzdGQ6OnVu
aXF1ZV9wdHI8SGlnaGxpZ2h0Q29uZmlnPiBJbnNwZWN0b3JET01BZ2VudDo6aGlnaGxpZ2h0Q29u
ZmlnRnJvbUluc3BlY3RvcgogICAgIH0KIAogICAgIGF1dG8gaGlnaGxpZ2h0Q29uZmlnID0gbWFr
ZVVuaXF1ZTxIaWdobGlnaHRDb25maWc+KCk7Ci0gICAgYm9vbCBzaG93SW5mbyA9IGZhbHNlOyAv
LyBEZWZhdWx0OiBmYWxzZSAoZG8gbm90IHNob3cgYSB0b29sdGlwKS4KLSAgICBoaWdobGlnaHRJ
bnNwZWN0b3JPYmplY3QtPmdldEJvb2xlYW4oInNob3dJbmZvIiwgc2hvd0luZm8pOwotICAgIGhp
Z2hsaWdodENvbmZpZy0+c2hvd0luZm8gPSBzaG93SW5mbzsKLSAgICBoaWdobGlnaHRDb25maWct
PmNvbnRlbnQgPSBwYXJzZUNvbmZpZ0NvbG9yKCJjb250ZW50Q29sb3IiLCBoaWdobGlnaHRJbnNw
ZWN0b3JPYmplY3QpOwotICAgIGhpZ2hsaWdodENvbmZpZy0+Y29udGVudE91dGxpbmUgPSBwYXJz
ZUNvbmZpZ0NvbG9yKCJjb250ZW50T3V0bGluZUNvbG9yIiwgaGlnaGxpZ2h0SW5zcGVjdG9yT2Jq
ZWN0KTsKLSAgICBoaWdobGlnaHRDb25maWctPnBhZGRpbmcgPSBwYXJzZUNvbmZpZ0NvbG9yKCJw
YWRkaW5nQ29sb3IiLCBoaWdobGlnaHRJbnNwZWN0b3JPYmplY3QpOwotICAgIGhpZ2hsaWdodENv
bmZpZy0+Ym9yZGVyID0gcGFyc2VDb25maWdDb2xvcigiYm9yZGVyQ29sb3IiLCBoaWdobGlnaHRJ
bnNwZWN0b3JPYmplY3QpOwotICAgIGhpZ2hsaWdodENvbmZpZy0+bWFyZ2luID0gcGFyc2VDb25m
aWdDb2xvcigibWFyZ2luQ29sb3IiLCBoaWdobGlnaHRJbnNwZWN0b3JPYmplY3QpOworICAgIGhp
Z2hsaWdodENvbmZpZy0+c2hvd0luZm8gPSBoaWdobGlnaHRJbnNwZWN0b3JPYmplY3QtPmdldEJv
b2xlYW4oUHJvdG9jb2w6OkRPTTo6SGlnaGxpZ2h0Q29uZmlnOjpzaG93SW5mb0tleSkudmFsdWVP
cihmYWxzZSk7CisgICAgaGlnaGxpZ2h0Q29uZmlnLT5jb250ZW50ID0gcGFyc2VDb25maWdDb2xv
cihQcm90b2NvbDo6RE9NOjpIaWdobGlnaHRDb25maWc6OmNvbnRlbnRDb2xvcktleSwgKmhpZ2hs
aWdodEluc3BlY3Rvck9iamVjdCk7CisgICAgaGlnaGxpZ2h0Q29uZmlnLT5wYWRkaW5nID0gcGFy
c2VDb25maWdDb2xvcihQcm90b2NvbDo6RE9NOjpIaWdobGlnaHRDb25maWc6OnBhZGRpbmdDb2xv
cktleSwgKmhpZ2hsaWdodEluc3BlY3Rvck9iamVjdCk7CisgICAgaGlnaGxpZ2h0Q29uZmlnLT5i
b3JkZXIgPSBwYXJzZUNvbmZpZ0NvbG9yKFByb3RvY29sOjpET006OkhpZ2hsaWdodENvbmZpZzo6
Ym9yZGVyQ29sb3JLZXksICpoaWdobGlnaHRJbnNwZWN0b3JPYmplY3QpOworICAgIGhpZ2hsaWdo
dENvbmZpZy0+bWFyZ2luID0gcGFyc2VDb25maWdDb2xvcihQcm90b2NvbDo6RE9NOjpIaWdobGln
aHRDb25maWc6Om1hcmdpbkNvbG9yS2V5LCAqaGlnaGxpZ2h0SW5zcGVjdG9yT2JqZWN0KTsKICAg
ICByZXR1cm4gaGlnaGxpZ2h0Q29uZmlnOwogfQogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkK
LXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNldEluc3BlY3RNb2RlRW5hYmxlZChFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcsIGJvb2wgZW5hYmxlZCwgY29uc3QgSlNPTjo6T2JqZWN0KiBoaWdobGln
aHRDb25maWcpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JET01BZ2Vu
dDo6c2V0SW5zcGVjdE1vZGVFbmFibGVkKGJvb2wgZW5hYmxlZCwgUmVmUHRyPEpTT046Ok9iamVj
dD4mJiBoaWdobGlnaHRDb25maWcpCiB7Ci0gICAgc2V0U2VhcmNoaW5nRm9yTm9kZShlcnJvclN0
cmluZywgZW5hYmxlZCwgaGlnaGxpZ2h0Q29uZmlnID8gaGlnaGxpZ2h0Q29uZmlnIDogbnVsbHB0
ciwgZmFsc2UpOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKworICAg
IHNldFNlYXJjaGluZ0Zvck5vZGUoZXJyb3JTdHJpbmcsIGVuYWJsZWQsIFdURk1vdmUoaGlnaGxp
Z2h0Q29uZmlnKSwgZmFsc2UpOworCisgICAgaWYgKCEhZXJyb3JTdHJpbmcpCisgICAgICAgIHJl
dHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CisKKyAgICByZXR1cm4geyB9OwogfQog
I2Vsc2UKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNldEluc3BlY3RNb2RlRW5hYmxlZChFcnJv
clN0cmluZyYgZXJyb3JTdHJpbmcsIGJvb2wgZW5hYmxlZCwgY29uc3QgSlNPTjo6T2JqZWN0KiBo
aWdobGlnaHRDb25maWcsIGNvbnN0IGJvb2wqIHNob3dSdWxlcnMpCitQcm90b2NvbDo6RXJyb3JT
dHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JET01BZ2VudDo6c2V0SW5zcGVjdE1vZGVFbmFibGVkKGJv
b2wgZW5hYmxlZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBoaWdobGlnaHRDb25maWcsIE9wdGlv
bmFsPGJvb2w+JiYgc2hvd1J1bGVycykKIHsKLSAgICBzZXRTZWFyY2hpbmdGb3JOb2RlKGVycm9y
U3RyaW5nLCBlbmFibGVkLCBoaWdobGlnaHRDb25maWcgPyBoaWdobGlnaHRDb25maWcgOiBudWxs
cHRyLCBzaG93UnVsZXJzICYmICpzaG93UnVsZXJzKTsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJp
bmcgZXJyb3JTdHJpbmc7CisKKyAgICBzZXRTZWFyY2hpbmdGb3JOb2RlKGVycm9yU3RyaW5nLCBl
bmFibGVkLCBXVEZNb3ZlKGhpZ2hsaWdodENvbmZpZyksIHNob3dSdWxlcnMgJiYgKnNob3dSdWxl
cnMpOworCisgICAgaWYgKCEhZXJyb3JTdHJpbmcpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBl
Y3RlZChlcnJvclN0cmluZyk7CisKKyAgICByZXR1cm4geyB9OwogfQogI2VuZGlmCiAKLXZvaWQg
SW5zcGVjdG9yRE9NQWdlbnQ6OmhpZ2hsaWdodFJlY3QoRXJyb3JTdHJpbmcmLCBpbnQgeCwgaW50
IHksIGludCB3aWR0aCwgaW50IGhlaWdodCwgY29uc3QgSlNPTjo6T2JqZWN0KiBjb2xvciwgY29u
c3QgSlNPTjo6T2JqZWN0KiBvdXRsaW5lQ29sb3IsIGNvbnN0IGJvb2wqIHVzZVBhZ2VDb29yZGlu
YXRlcykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRPTUFnZW50Ojpo
aWdobGlnaHRSZWN0KGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBSZWZQdHI8
SlNPTjo6T2JqZWN0PiYmIGNvbG9yLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIG91dGxpbmVDb2xv
ciwgT3B0aW9uYWw8Ym9vbD4mJiB1c2VQYWdlQ29vcmRpbmF0ZXMpCiB7CiAgICAgYXV0byBxdWFk
ID0gbWFrZVVuaXF1ZTxGbG9hdFF1YWQ+KEZsb2F0UmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KSk7
Ci0gICAgaW5uZXJIaWdobGlnaHRRdWFkKFdURk1vdmUocXVhZCksIGNvbG9yLCBvdXRsaW5lQ29s
b3IsIHVzZVBhZ2VDb29yZGluYXRlcyk7CisgICAgaW5uZXJIaWdobGlnaHRRdWFkKFdURk1vdmUo
cXVhZCksIFdURk1vdmUoY29sb3IpLCBXVEZNb3ZlKG91dGxpbmVDb2xvciksIFdURk1vdmUodXNl
UGFnZUNvb3JkaW5hdGVzKSk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3Rv
ckRPTUFnZW50OjpoaWdobGlnaHRRdWFkKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3Qg
SlNPTjo6QXJyYXkmIHF1YWRBcnJheSwgY29uc3QgSlNPTjo6T2JqZWN0KiBjb2xvciwgY29uc3Qg
SlNPTjo6T2JqZWN0KiBvdXRsaW5lQ29sb3IsIGNvbnN0IGJvb2wqIHVzZVBhZ2VDb29yZGluYXRl
cykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRPTUFnZW50OjpoaWdo
bGlnaHRRdWFkKFJlZjxKU09OOjpBcnJheT4mJiBxdWFkT2JqZWN0LCBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiYmIGNvbG9yLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIG91dGxpbmVDb2xvciwgT3B0aW9u
YWw8Ym9vbD4mJiB1c2VQYWdlQ29vcmRpbmF0ZXMpCiB7CiAgICAgYXV0byBxdWFkID0gbWFrZVVu
aXF1ZTxGbG9hdFF1YWQ+KCk7Ci0gICAgaWYgKCFwYXJzZVF1YWQocXVhZEFycmF5LCBxdWFkLmdl
dCgpKSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJVbmV4cGVjdGVkIGludmFsaWQgcXVhZEFy
cmF5Il9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlubmVySGlnaGxpZ2h0UXVhZChX
VEZNb3ZlKHF1YWQpLCBjb2xvciwgb3V0bGluZUNvbG9yLCB1c2VQYWdlQ29vcmRpbmF0ZXMpOwor
ICAgIGlmICghcGFyc2VRdWFkKFdURk1vdmUocXVhZE9iamVjdCksIHF1YWQuZ2V0KCkpKQorICAg
ICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIlVuZXhwZWN0ZWQgaW52YWxpZCBxdWFkIl9zKTsK
KworICAgIGlubmVySGlnaGxpZ2h0UXVhZChXVEZNb3ZlKHF1YWQpLCBXVEZNb3ZlKGNvbG9yKSwg
V1RGTW92ZShvdXRsaW5lQ29sb3IpLCBXVEZNb3ZlKHVzZVBhZ2VDb29yZGluYXRlcykpOworCisg
ICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6aW5uZXJIaWdobGln
aHRRdWFkKHN0ZDo6dW5pcXVlX3B0cjxGbG9hdFF1YWQ+IHF1YWQsIGNvbnN0IEpTT046Ok9iamVj
dCogY29sb3IsIGNvbnN0IEpTT046Ok9iamVjdCogb3V0bGluZUNvbG9yLCBjb25zdCBib29sKiB1
c2VQYWdlQ29vcmRpbmF0ZXMpCit2b2lkIEluc3BlY3RvckRPTUFnZW50Ojppbm5lckhpZ2hsaWdo
dFF1YWQoc3RkOjp1bmlxdWVfcHRyPEZsb2F0UXVhZD4gcXVhZCwgUmVmUHRyPEpTT046Ok9iamVj
dD4mJiBjb2xvciwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBvdXRsaW5lQ29sb3IsIE9wdGlvbmFs
PGJvb2w+JiYgdXNlUGFnZUNvb3JkaW5hdGVzKQogewogICAgIGF1dG8gaGlnaGxpZ2h0Q29uZmln
ID0gbWFrZVVuaXF1ZTxIaWdobGlnaHRDb25maWc+KCk7Ci0gICAgaGlnaGxpZ2h0Q29uZmlnLT5j
b250ZW50ID0gcGFyc2VDb2xvcihjb2xvcik7Ci0gICAgaGlnaGxpZ2h0Q29uZmlnLT5jb250ZW50
T3V0bGluZSA9IHBhcnNlQ29sb3Iob3V0bGluZUNvbG9yKTsKKyAgICBoaWdobGlnaHRDb25maWct
PmNvbnRlbnQgPSBwYXJzZUNvbG9yKFdURk1vdmUoY29sb3IpKTsKKyAgICBoaWdobGlnaHRDb25m
aWctPmNvbnRlbnRPdXRsaW5lID0gcGFyc2VDb2xvcihXVEZNb3ZlKG91dGxpbmVDb2xvcikpOwog
ICAgIGhpZ2hsaWdodENvbmZpZy0+dXNlUGFnZUNvb3JkaW5hdGVzID0gdXNlUGFnZUNvb3JkaW5h
dGVzID8gKnVzZVBhZ2VDb29yZGluYXRlcyA6IGZhbHNlOwogICAgIG1fb3ZlcmxheS0+aGlnaGxp
Z2h0UXVhZChXVEZNb3ZlKHF1YWQpLCAqaGlnaGxpZ2h0Q29uZmlnKTsKIH0KIAotdm9pZCBJbnNw
ZWN0b3JET01BZ2VudDo6aGlnaGxpZ2h0U2VsZWN0b3IoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5n
LCBjb25zdCBKU09OOjpPYmplY3QmIGhpZ2hsaWdodEluc3BlY3Rvck9iamVjdCwgY29uc3QgU3Ry
aW5nJiBzZWxlY3RvclN0cmluZywgY29uc3QgU3RyaW5nKiBmcmFtZUlkKQorUHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yRE9NQWdlbnQ6OmhpZ2hsaWdodFNlbGVjdG9yKFJl
ZjxKU09OOjpPYmplY3Q+JiYgaGlnaGxpZ2h0SW5zcGVjdG9yT2JqZWN0LCBjb25zdCBTdHJpbmcm
IHNlbGVjdG9yU3RyaW5nLCBjb25zdCBQcm90b2NvbDo6TmV0d29yazo6RnJhbWVJZCYgZnJhbWVJ
ZCkKIHsKLSAgICBhdXRvIGhpZ2hsaWdodENvbmZpZyA9IGhpZ2hsaWdodENvbmZpZ0Zyb21JbnNw
ZWN0b3JPYmplY3QoZXJyb3JTdHJpbmcsICZoaWdobGlnaHRJbnNwZWN0b3JPYmplY3QpOworICAg
IFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKworICAgIGF1dG8gaGlnaGxpZ2h0
Q29uZmlnID0gaGlnaGxpZ2h0Q29uZmlnRnJvbUluc3BlY3Rvck9iamVjdChlcnJvclN0cmluZywg
V1RGTW92ZShoaWdobGlnaHRJbnNwZWN0b3JPYmplY3QpKTsKICAgICBpZiAoIWhpZ2hsaWdodENv
bmZpZykKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJy
b3JTdHJpbmcpOwogCiAgICAgUmVmUHRyPERvY3VtZW50PiBkb2N1bWVudDsKIAotICAgIGlmIChm
cmFtZUlkKSB7CisgICAgaWYgKCEhZnJhbWVJZCkgewogICAgICAgICBhdXRvKiBwYWdlQWdlbnQg
PSBtX2luc3RydW1lbnRpbmdBZ2VudHMuZW5hYmxlZFBhZ2VBZ2VudCgpOwotICAgICAgICBpZiAo
IXBhZ2VBZ2VudCkgewotICAgICAgICAgICAgZXJyb3JTdHJpbmcgPSAiUGFnZSBkb21haW4gbXVz
dCBiZSBlbmFibGVkIl9zOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9CisgICAgICAg
IGlmICghcGFnZUFnZW50KQorICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJQYWdl
IGRvbWFpbiBtdXN0IGJlIGVuYWJsZWQiX3MpOwogCi0gICAgICAgIGF1dG8qIGZyYW1lID0gcGFn
ZUFnZW50LT5hc3NlcnRGcmFtZShlcnJvclN0cmluZywgKmZyYW1lSWQpOworICAgICAgICBhdXRv
KiBmcmFtZSA9IHBhZ2VBZ2VudC0+YXNzZXJ0RnJhbWUoZXJyb3JTdHJpbmcsIGZyYW1lSWQpOwog
ICAgICAgICBpZiAoIWZyYW1lKQotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgcmV0
dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgICAgICBkb2N1bWVudCA9IGZy
YW1lLT5kb2N1bWVudCgpOwogICAgIH0gZWxzZQogICAgICAgICBkb2N1bWVudCA9IG1fZG9jdW1l
bnQ7CiAKLSAgICBpZiAoIWRvY3VtZW50KSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIk1pc3Np
bmcgZG9jdW1lbnQgb2YgZnJhbWUgZm9yIGdpdmVuIGZyYW1lSWQiX3M7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9CisgICAgaWYgKCFkb2N1bWVudCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVj
dGVkKCJNaXNzaW5nIGRvY3VtZW50IG9mIGZyYW1lIGZvciBnaXZlbiBmcmFtZUlkIl9zKTsKIAog
ICAgIENTU1BhcnNlciBwYXJzZXIoKmRvY3VtZW50KTsKICAgICBDU1NTZWxlY3Rvckxpc3Qgc2Vs
ZWN0b3JMaXN0OwpAQCAtMTMzOSwxNTggKzEzODIsMTczIEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdl
bnQ6OmhpZ2hsaWdodFNlbGVjdG9yKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgSlNP
Tjo6CiAgICAgfQogCiAgICAgbV9vdmVybGF5LT5oaWdobGlnaHROb2RlTGlzdChTdGF0aWNOb2Rl
TGlzdDo6Y3JlYXRlKFdURk1vdmUobm9kZUxpc3QpKSwgKmhpZ2hsaWdodENvbmZpZyk7CisKKyAg
ICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpoaWdobGlnaHROb2Rl
KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgSlNPTjo6T2JqZWN0JiBoaWdobGlnaHRJ
bnNwZWN0b3JPYmplY3QsIGNvbnN0IGludCogbm9kZUlkLCBjb25zdCBTdHJpbmcqIG9iamVjdElk
KQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yRE9NQWdlbnQ6OmhpZ2hs
aWdodE5vZGUoUmVmPEpTT046Ok9iamVjdD4mJiBoaWdobGlnaHRJbnNwZWN0b3JPYmplY3QsIE9w
dGlvbmFsPFByb3RvY29sOjpET006Ok5vZGVJZD4mJiBub2RlSWQsIGNvbnN0IFByb3RvY29sOjpS
dW50aW1lOjpSZW1vdGVPYmplY3RJZCYgb2JqZWN0SWQpCiB7CisgICAgUHJvdG9jb2w6OkVycm9y
U3RyaW5nIGVycm9yU3RyaW5nOworCiAgICAgTm9kZSogbm9kZSA9IG51bGxwdHI7CiAgICAgaWYg
KG5vZGVJZCkKICAgICAgICAgbm9kZSA9IGFzc2VydE5vZGUoZXJyb3JTdHJpbmcsICpub2RlSWQp
OwotICAgIGVsc2UgaWYgKG9iamVjdElkKSB7Ci0gICAgICAgIG5vZGUgPSBub2RlRm9yT2JqZWN0
SWQoKm9iamVjdElkKTsKLSAgICAgICAgaWYgKCFub2RlKQotICAgICAgICAgICAgZXJyb3JTdHJp
bmcgPSAiTWlzc2luZyBub2RlIGZvciBnaXZlbiBvYmplY3RJZCJfczsKKyAgICBlbHNlIGlmICgh
IW9iamVjdElkKSB7CisgICAgICAgIG5vZGUgPSBub2RlRm9yT2JqZWN0SWQob2JqZWN0SWQpOwor
ICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIG5vZGUgZm9yIGdpdmVuIG9iamVjdElkIl9z
OwogICAgIH0gZWxzZQogICAgICAgICBlcnJvclN0cmluZyA9ICJFaXRoZXIgbm9kZUlkIG9yIG9i
amVjdElkIG11c3QgYmUgc3BlY2lmaWVkIl9zOwogCiAgICAgaWYgKCFub2RlKQotICAgICAgICBy
ZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKLSAg
ICBzdGQ6OnVuaXF1ZV9wdHI8SGlnaGxpZ2h0Q29uZmlnPiBoaWdobGlnaHRDb25maWcgPSBoaWdo
bGlnaHRDb25maWdGcm9tSW5zcGVjdG9yT2JqZWN0KGVycm9yU3RyaW5nLCAmaGlnaGxpZ2h0SW5z
cGVjdG9yT2JqZWN0KTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SGlnaGxpZ2h0Q29uZmlnPiBoaWdo
bGlnaHRDb25maWcgPSBoaWdobGlnaHRDb25maWdGcm9tSW5zcGVjdG9yT2JqZWN0KGVycm9yU3Ry
aW5nLCBXVEZNb3ZlKGhpZ2hsaWdodEluc3BlY3Rvck9iamVjdCkpOwogICAgIGlmICghaGlnaGxp
Z2h0Q29uZmlnKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3Rl
ZChlcnJvclN0cmluZyk7CiAKICAgICBtX292ZXJsYXktPmhpZ2hsaWdodE5vZGUobm9kZSwgKmhp
Z2hsaWdodENvbmZpZyk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckRP
TUFnZW50OjpoaWdobGlnaHROb2RlTGlzdChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0
IEpTT046OkFycmF5JiBub2RlSWRzLCBjb25zdCBKU09OOjpPYmplY3QmIGhpZ2hsaWdodEluc3Bl
Y3Rvck9iamVjdCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRPTUFn
ZW50OjpoaWdobGlnaHROb2RlTGlzdChSZWY8SlNPTjo6QXJyYXk+JiYgbm9kZUlkcywgUmVmPEpT
T046Ok9iamVjdD4mJiBoaWdobGlnaHRJbnNwZWN0b3JPYmplY3QpCiB7Ci0gICAgVmVjdG9yPFJl
ZjxOb2RlPj4gbm9kZXM7Ci0gICAgZm9yIChhdXRvJiBub2RlVmFsdWUgOiBub2RlSWRzKSB7Ci0g
ICAgICAgIGlmICghbm9kZVZhbHVlKSB7Ci0gICAgICAgICAgICBlcnJvclN0cmluZyA9ICJVbmV4
cGVjdGVkIG5vbi1pbnRlZ2VyIGl0ZW0gaW4gZ2l2ZW4gbm9kZUlkcyJfczsKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfQorICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmlu
ZzsKIAotICAgICAgICBpbnQgbm9kZUlkID0gMDsKLSAgICAgICAgaWYgKCFub2RlVmFsdWUtPmFz
SW50ZWdlcihub2RlSWQpKSB7Ci0gICAgICAgICAgICBlcnJvclN0cmluZyA9ICJVbmV4cGVjdGVk
IG5vbi1pbnRlZ2VyIGl0ZW0gaW4gZ2l2ZW4gbm9kZUlkcyJfczsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQorICAgIFZlY3RvcjxSZWY8Tm9kZT4+IG5vZGVzOworICAgIGZvciAoYXV0
byYgbm9kZUlkVmFsdWUgOiBub2RlSWRzLmdldCgpKSB7CisgICAgICAgIGF1dG8gbm9kZUlkID0g
bm9kZUlkVmFsdWUtPmFzSW50ZWdlcigpOworICAgICAgICBpZiAoIW5vZGVJZCkKKyAgICAgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiVW5leHBlY3RlZCBub24taW50ZWdlciBpdGVtIGlu
IGdpdmVuIG5vZGVJZHMiX3MpOwogCiAgICAgICAgIC8vIEluIHRoZSBjYXNlIHRoYXQgYSBub2Rl
IGlzIHJlbW92ZWQgaW4gdGhlIHRpbWUgYmV0d2VlbiB3aGVuIGhpZ2hsaWdodE5vZGVMaXN0IGlz
IGludm9rZWQKICAgICAgICAgLy8gYnkgdGhlIGZyb250ZW5kIGFuZCBpdCBpcyBleGVjdXRlZCBi
eSB0aGUgYmFja2VuZCwgd2Ugc2hvdWxkIHN0aWxsIGF0dGVtcHQgdG8gaGlnaGxpZ2h0CiAgICAg
ICAgIC8vIGFzIG1hbnkgbm9kZXMgYXMgcG9zc2libGUuIEFzIHN1Y2gsIHdlIHNob3VsZCBpZ25v
cmUgYW55IGVycm9ycyBnZW5lcmF0ZWQgd2hlbiBhdHRlbXB0aW5nCiAgICAgICAgIC8vIHRvIGdl
dCBhIE5vZGUgZnJvbSBhIGdpdmVuIG5vZGVJZC4gCi0gICAgICAgIEVycm9yU3RyaW5nIGlnbm9y
ZWQ7Ci0gICAgICAgIE5vZGUqIG5vZGUgPSBhc3NlcnROb2RlKGlnbm9yZWQsIG5vZGVJZCk7Cisg
ICAgICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBpZ25vcmVkOworICAgICAgICBOb2RlKiBub2Rl
ID0gYXNzZXJ0Tm9kZShpZ25vcmVkLCAqbm9kZUlkKTsKICAgICAgICAgaWYgKCFub2RlKQogICAg
ICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgbm9kZXMuYXBwZW5kKCpub2RlKTsKICAgICB9
CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SGlnaGxpZ2h0Q29uZmlnPiBoaWdobGlnaHRDb25maWcg
PSBoaWdobGlnaHRDb25maWdGcm9tSW5zcGVjdG9yT2JqZWN0KGVycm9yU3RyaW5nLCAmaGlnaGxp
Z2h0SW5zcGVjdG9yT2JqZWN0KTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SGlnaGxpZ2h0Q29uZmln
PiBoaWdobGlnaHRDb25maWcgPSBoaWdobGlnaHRDb25maWdGcm9tSW5zcGVjdG9yT2JqZWN0KGVy
cm9yU3RyaW5nLCBXVEZNb3ZlKGhpZ2hsaWdodEluc3BlY3Rvck9iamVjdCkpOwogICAgIGlmICgh
aGlnaGxpZ2h0Q29uZmlnKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5l
eHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAgICBtX292ZXJsYXktPmhpZ2hsaWdodE5vZGVMaXN0
KFN0YXRpY05vZGVMaXN0OjpjcmVhdGUoV1RGTW92ZShub2RlcykpLCAqaGlnaGxpZ2h0Q29uZmln
KTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmhpZ2hs
aWdodEZyYW1lKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBmcmFtZUlk
LCBjb25zdCBKU09OOjpPYmplY3QqIGNvbG9yLCBjb25zdCBKU09OOjpPYmplY3QqIG91dGxpbmVD
b2xvcikKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRPTUFnZW50Ojpo
aWdobGlnaHRGcmFtZShjb25zdCBQcm90b2NvbDo6TmV0d29yazo6RnJhbWVJZCYgZnJhbWVJZCwg
UmVmUHRyPEpTT046Ok9iamVjdD4mJiBjb2xvciwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBvdXRs
aW5lQ29sb3IpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAg
ICAgYXV0byogcGFnZUFnZW50ID0gbV9pbnN0cnVtZW50aW5nQWdlbnRzLmVuYWJsZWRQYWdlQWdl
bnQoKTsKLSAgICBpZiAoIXBhZ2VBZ2VudCkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJQYWdl
IGRvbWFpbiBtdXN0IGJlIGVuYWJsZWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAg
aWYgKCFwYWdlQWdlbnQpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiUGFnZSBkb21h
aW4gbXVzdCBiZSBlbmFibGVkIl9zKTsKIAogICAgIGF1dG8qIGZyYW1lID0gcGFnZUFnZW50LT5h
c3NlcnRGcmFtZShlcnJvclN0cmluZywgZnJhbWVJZCk7CiAgICAgaWYgKCFmcmFtZSkKLSAgICAg
ICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwog
CiAgICAgaWYgKGZyYW1lLT5vd25lckVsZW1lbnQoKSkgewogICAgICAgICBhdXRvIGhpZ2hsaWdo
dENvbmZpZyA9IG1ha2VVbmlxdWU8SGlnaGxpZ2h0Q29uZmlnPigpOwogICAgICAgICBoaWdobGln
aHRDb25maWctPnNob3dJbmZvID0gdHJ1ZTsgLy8gQWx3YXlzIHNob3cgdG9vbHRpcHMgZm9yIGZy
YW1lcy4KLSAgICAgICAgaGlnaGxpZ2h0Q29uZmlnLT5jb250ZW50ID0gcGFyc2VDb2xvcihjb2xv
cik7Ci0gICAgICAgIGhpZ2hsaWdodENvbmZpZy0+Y29udGVudE91dGxpbmUgPSBwYXJzZUNvbG9y
KG91dGxpbmVDb2xvcik7CisgICAgICAgIGhpZ2hsaWdodENvbmZpZy0+Y29udGVudCA9IHBhcnNl
Q29sb3IoV1RGTW92ZShjb2xvcikpOworICAgICAgICBoaWdobGlnaHRDb25maWctPmNvbnRlbnRP
dXRsaW5lID0gcGFyc2VDb2xvcihXVEZNb3ZlKG91dGxpbmVDb2xvcikpOwogICAgICAgICBtX292
ZXJsYXktPmhpZ2hsaWdodE5vZGUoZnJhbWUtPm93bmVyRWxlbWVudCgpLCAqaGlnaGxpZ2h0Q29u
ZmlnKTsKICAgICB9CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckRPTUFn
ZW50OjpoaWRlSGlnaGxpZ2h0KEVycm9yU3RyaW5nJikKK1Byb3RvY29sOjpFcnJvclN0cmluZ09y
PHZvaWQ+IEluc3BlY3RvckRPTUFnZW50OjpoaWRlSGlnaGxpZ2h0KCkKIHsKICAgICBtX292ZXJs
YXktPmhpZGVIaWdobGlnaHQoKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVj
dG9yRE9NQWdlbnQ6Om1vdmVUbyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQs
IGludCB0YXJnZXRFbGVtZW50SWQsIGNvbnN0IGludCogYW5jaG9yTm9kZUlkLCBpbnQqIG5ld05v
ZGVJZCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPFByb3RvY29sOjpET006Ok5vZGVJZD4gSW5z
cGVjdG9yRE9NQWdlbnQ6Om1vdmVUbyhQcm90b2NvbDo6RE9NOjpOb2RlSWQgbm9kZUlkLCBQcm90
b2NvbDo6RE9NOjpOb2RlSWQgdGFyZ2V0Tm9kZUlkLCBPcHRpb25hbDxQcm90b2NvbDo6RE9NOjpO
b2RlSWQ+JiYgaW5zZXJ0QmVmb3JlTm9kZUlkKQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmlu
ZyBlcnJvclN0cmluZzsKKwogICAgIE5vZGUqIG5vZGUgPSBhc3NlcnRFZGl0YWJsZU5vZGUoZXJy
b3JTdHJpbmcsIG5vZGVJZCk7CiAgICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm47CisgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKLSAgICBFbGVtZW50KiB0
YXJnZXRFbGVtZW50ID0gYXNzZXJ0RWRpdGFibGVFbGVtZW50KGVycm9yU3RyaW5nLCB0YXJnZXRF
bGVtZW50SWQpOworICAgIEVsZW1lbnQqIHRhcmdldEVsZW1lbnQgPSBhc3NlcnRFZGl0YWJsZUVs
ZW1lbnQoZXJyb3JTdHJpbmcsIHRhcmdldE5vZGVJZCk7CiAgICAgaWYgKCF0YXJnZXRFbGVtZW50
KQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0
cmluZyk7CiAKLSAgICBOb2RlKiBhbmNob3JOb2RlID0gMDsKLSAgICBpZiAoYW5jaG9yTm9kZUlk
ICYmICphbmNob3JOb2RlSWQpIHsKLSAgICAgICAgYW5jaG9yTm9kZSA9IGFzc2VydEVkaXRhYmxl
Tm9kZShlcnJvclN0cmluZywgKmFuY2hvck5vZGVJZCk7CisgICAgTm9kZSogYW5jaG9yTm9kZSA9
IG51bGxwdHI7CisgICAgaWYgKGluc2VydEJlZm9yZU5vZGVJZCAmJiAqaW5zZXJ0QmVmb3JlTm9k
ZUlkKSB7CisgICAgICAgIGFuY2hvck5vZGUgPSBhc3NlcnRFZGl0YWJsZU5vZGUoZXJyb3JTdHJp
bmcsICppbnNlcnRCZWZvcmVOb2RlSWQpOwogICAgICAgICBpZiAoIWFuY2hvck5vZGUpCi0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmIChhbmNob3JOb2RlLT5wYXJlbnROb2RlKCkgIT0g
dGFyZ2V0RWxlbWVudCkgewotICAgICAgICAgICAgZXJyb3JTdHJpbmcgPSAiR2l2ZW4gYW5jaG9y
Tm9kZUlkIG11c3QgYmUgYSBjaGlsZCBvZiBnaXZlbiB0YXJnZXRFbGVtZW50SWQiX3M7Ci0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBl
Y3RlZChlcnJvclN0cmluZyk7CisgICAgICAgIGlmIChhbmNob3JOb2RlLT5wYXJlbnROb2RlKCkg
IT0gdGFyZ2V0RWxlbWVudCkKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiR2l2
ZW4gaW5zZXJ0QmVmb3JlTm9kZUlkIG11c3QgYmUgYSBjaGlsZCBvZiBnaXZlbiB0YXJnZXROb2Rl
SWQiX3MpOwogICAgIH0KIAogICAgIGlmICghbV9kb21FZGl0b3ItPmluc2VydEJlZm9yZSgqdGFy
Z2V0RWxlbWVudCwgKm5vZGUsIGFuY2hvck5vZGUsIGVycm9yU3RyaW5nKSkKLSAgICAgICAgcmV0
dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCi0gICAg
Km5ld05vZGVJZCA9IHB1c2hOb2RlUGF0aFRvRnJvbnRlbmQoZXJyb3JTdHJpbmcsIG5vZGUpOwor
ICAgIHJldHVybiBwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKGVycm9yU3RyaW5nLCBub2RlKTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6dW5kbyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcp
CitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JET01BZ2VudDo6dW5kbygp
CiB7CiAgICAgYXV0byByZXN1bHQgPSBtX2hpc3RvcnktPnVuZG8oKTsKICAgICBpZiAocmVzdWx0
Lmhhc0V4Y2VwdGlvbigpKQotICAgICAgICBlcnJvclN0cmluZyA9IHRvRXJyb3JTdHJpbmcocmVz
dWx0LnJlbGVhc2VFeGNlcHRpb24oKSk7CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChJ
bnNwZWN0b3JET01BZ2VudDo6dG9FcnJvclN0cmluZyhyZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigp
KSk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpyZWRv
KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+
IEluc3BlY3RvckRPTUFnZW50OjpyZWRvKCkKIHsKICAgICBhdXRvIHJlc3VsdCA9IG1faGlzdG9y
eS0+cmVkbygpOwogICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpCi0gICAgICAgIGVycm9y
U3RyaW5nID0gdG9FcnJvclN0cmluZyhyZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpKTsKKyAgICAg
ICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEluc3BlY3RvckRPTUFnZW50Ojp0b0Vycm9yU3RyaW5n
KHJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCkpKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZv
aWQgSW5zcGVjdG9yRE9NQWdlbnQ6Om1hcmtVbmRvYWJsZVN0YXRlKEVycm9yU3RyaW5nJikKK1By
b3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRPTUFnZW50OjptYXJrVW5kb2Fi
bGVTdGF0ZSgpCiB7CiAgICAgbV9oaXN0b3J5LT5tYXJrVW5kb2FibGVTdGF0ZSgpOworCisgICAg
cmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Zm9jdXMoRXJyb3JTdHJp
bmcmIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9p
ZD4gSW5zcGVjdG9yRE9NQWdlbnQ6OmZvY3VzKFByb3RvY29sOjpET006Ok5vZGVJZCBub2RlSWQp
CiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAgICAgRWxlbWVu
dCogZWxlbWVudCA9IGFzc2VydEVsZW1lbnQoZXJyb3JTdHJpbmcsIG5vZGVJZCk7CiAgICAgaWYg
KCFlbGVtZW50KQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKCFlbGVtZW50LT5pc0ZvY3VzYWJs
ZSgpKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIkVsZW1lbnQgZm9yIGdpdmVuIG5vZGVJZCBp
cyBub3QgZm9jdXNhYmxlIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgICAgICByZXR1
cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOworICAgIGlmICghZWxlbWVudC0+aXNGb2N1
c2FibGUoKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJFbGVtZW50IGZvciBnaXZl
biBub2RlSWQgaXMgbm90IGZvY3VzYWJsZSJfcyk7CisKICAgICBlbGVtZW50LT5mb2N1cygpOwor
CisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c2V0SW5zcGVj
dGVkTm9kZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQpCitQcm90b2NvbDo6
RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JET01BZ2VudDo6c2V0SW5zcGVjdGVkTm9kZShQ
cm90b2NvbDo6RE9NOjpOb2RlSWQgbm9kZUlkKQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmlu
ZyBlcnJvclN0cmluZzsKKwogICAgIE5vZGUqIG5vZGUgPSBhc3NlcnROb2RlKGVycm9yU3RyaW5n
LCBub2RlSWQpOwogICAgIGlmICghbm9kZSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1
cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCi0gICAgaWYgKG5vZGUtPmlzSW5Vc2Vy
QWdlbnRTaGFkb3dUcmVlKCkgJiYgIW1fYWxsb3dFZGl0aW5nVXNlckFnZW50U2hhZG93VHJlZXMp
IHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiTm9kZSBmb3IgZ2l2ZW4gbm9kZUlkIGlzIGluIGEg
c2hhZG93IHRyZWUiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKG5vZGUtPmlz
SW5Vc2VyQWdlbnRTaGFkb3dUcmVlKCkgJiYgIW1fYWxsb3dFZGl0aW5nVXNlckFnZW50U2hhZG93
VHJlZXMpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTm9kZSBmb3IgZ2l2ZW4gbm9k
ZUlkIGlzIGluIGEgc2hhZG93IHRyZWUiX3MpOwogCiAgICAgbV9pbnNwZWN0ZWROb2RlID0gbm9k
ZTsKIApAQCAtMTQ5OCwzOCArMTU1Niw0OSBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpzZXRJ
bnNwZWN0ZWROb2RlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJZCkKICAgICAg
ICAgY29tbWFuZExpbmVBUElIb3N0LT5hZGRJbnNwZWN0ZWRPYmplY3QobWFrZVVuaXF1ZTxJbnNw
ZWN0YWJsZU5vZGU+KG5vZGUpKTsKIAogICAgIG1fc3VwcHJlc3NFdmVudExpc3RlbmVyQ2hhbmdl
ZEV2ZW50ID0gZmFsc2U7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckRP
TUFnZW50OjpyZXNvbHZlTm9kZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQs
IGNvbnN0IFN0cmluZyogb2JqZWN0R3JvdXAsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpS
dW50aW1lOjpSZW1vdGVPYmplY3Q+JiByZXN1bHQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxS
ZWY8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4+IEluc3BlY3RvckRPTUFnZW50Ojpy
ZXNvbHZlTm9kZShQcm90b2NvbDo6RE9NOjpOb2RlSWQgbm9kZUlkLCBjb25zdCBTdHJpbmcmIG9i
amVjdEdyb3VwKQogewotICAgIFN0cmluZyBvYmplY3RHcm91cE5hbWUgPSBvYmplY3RHcm91cCA/
ICpvYmplY3RHcm91cCA6IGVtcHR5U3RyaW5nKCk7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5n
IGVycm9yU3RyaW5nOworCiAgICAgTm9kZSogbm9kZSA9IGFzc2VydE5vZGUoZXJyb3JTdHJpbmcs
IG5vZGVJZCk7CiAgICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm47Ci0gICAgUmVmUHRyPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4gb2JqZWN0ID0gcmVzb2x2
ZU5vZGUobm9kZSwgb2JqZWN0R3JvdXBOYW1lKTsKLSAgICBpZiAoIW9iamVjdCkgewotICAgICAg
ICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIGluamVjdGVkIHNjcmlwdCBmb3IgZ2l2ZW4gbm9kZUlk
Il9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIHJlc3VsdCA9IG9iamVjdDsKKyAgICAg
ICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKKworICAgIFJlZlB0cjxQcm90
b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiBvYmplY3QgPSByZXNvbHZlTm9kZShub2RlLCBv
YmplY3RHcm91cCk7CisgICAgaWYgKCFvYmplY3QpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBl
Y3RlZCgiTWlzc2luZyBpbmplY3RlZCBzY3JpcHQgZm9yIGdpdmVuIG5vZGVJZCJfcyk7CisKKyAg
ICByZXR1cm4gb2JqZWN0LnJlbGVhc2VOb25OdWxsKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9N
QWdlbnQ6OmdldEF0dHJpYnV0ZXMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlk
LCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiYgcmVzdWx0KQorUHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8UmVmPEpTT046OkFycmF5T2Y8U3RyaW5nPj4+IEluc3BlY3RvckRPTUFnZW50Ojpn
ZXRBdHRyaWJ1dGVzKFByb3RvY29sOjpET006Ok5vZGVJZCBub2RlSWQpCiB7CisgICAgUHJvdG9j
b2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAgICAgRWxlbWVudCogZWxlbWVudCA9IGFz
c2VydEVsZW1lbnQoZXJyb3JTdHJpbmcsIG5vZGVJZCk7CiAgICAgaWYgKCFlbGVtZW50KQotICAg
ICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7
CiAKLSAgICByZXN1bHQgPSBidWlsZEFycmF5Rm9yRWxlbWVudEF0dHJpYnV0ZXMoZWxlbWVudCk7
CisgICAgcmV0dXJuIGJ1aWxkQXJyYXlGb3JFbGVtZW50QXR0cmlidXRlcyhlbGVtZW50KTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6cmVxdWVzdE5vZGUoRXJyb3JTdHJpbmcmIGVycm9y
U3RyaW5nLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBpbnQqIG5vZGVJZCkKK1Byb3RvY29sOjpF
cnJvclN0cmluZ09yPFByb3RvY29sOjpET006Ok5vZGVJZD4gSW5zcGVjdG9yRE9NQWdlbnQ6OnJl
cXVlc3ROb2RlKGNvbnN0IFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3RJZCYgb2JqZWN0
SWQpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAgICAgTm9k
ZSogbm9kZSA9IG5vZGVGb3JPYmplY3RJZChvYmplY3RJZCk7Ci0gICAgaWYgKG5vZGUpCi0gICAg
ICAgICpub2RlSWQgPSBwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKGVycm9yU3RyaW5nLCBub2RlKTsK
LSAgICBlbHNlCi0gICAgICAgICpub2RlSWQgPSAwOworICAgIGlmICghbm9kZSkKKyAgICAgICAg
cmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJNaXNzaW5nIG5vZGUgZm9yIGdpdmVuIG9iamVjdElkIl9z
KTsKKworICAgIGF1dG8gbm9kZUlkID0gcHVzaE5vZGVQYXRoVG9Gcm9udGVuZChlcnJvclN0cmlu
Zywgbm9kZSk7CisgICAgaWYgKCFub2RlSWQpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3Rl
ZChlcnJvclN0cmluZyk7CisKKyAgICByZXR1cm4gbm9kZUlkOwogfQogCiBTdHJpbmcgSW5zcGVj
dG9yRE9NQWdlbnQ6OmRvY3VtZW50VVJMU3RyaW5nKERvY3VtZW50KiBkb2N1bWVudCkKQEAgLTE1
NDQsNDQgKzE2MTMsNDQgQEAgc3RhdGljIFN0cmluZyBkb2N1bWVudEJhc2VVUkxTdHJpbmcoRG9j
dW1lbnQqIGRvY3VtZW50KQogICAgIHJldHVybiBkb2N1bWVudC0+Y29tcGxldGVVUkwoZW1wdHlT
dHJpbmcoKSkuc3RyaW5nKCk7CiB9CiAKLXN0YXRpYyBib29sIHBzZXVkb0VsZW1lbnRUeXBlKFBz
ZXVkb0lkIHBzZXVkb0lkLCBJbnNwZWN0b3I6OlByb3RvY29sOjpET006OlBzZXVkb1R5cGUqIHR5
cGUpCitzdGF0aWMgYm9vbCBwc2V1ZG9FbGVtZW50VHlwZShQc2V1ZG9JZCBwc2V1ZG9JZCwgUHJv
dG9jb2w6OkRPTTo6UHNldWRvVHlwZSogdHlwZSkKIHsKICAgICBzd2l0Y2ggKHBzZXVkb0lkKSB7
CiAgICAgY2FzZSBQc2V1ZG9JZDo6QmVmb3JlOgotICAgICAgICAqdHlwZSA9IEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRPTTo6UHNldWRvVHlwZTo6QmVmb3JlOworICAgICAgICAqdHlwZSA9IFByb3Rv
Y29sOjpET006OlBzZXVkb1R5cGU6OkJlZm9yZTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
Y2FzZSBQc2V1ZG9JZDo6QWZ0ZXI6Ci0gICAgICAgICp0eXBlID0gSW5zcGVjdG9yOjpQcm90b2Nv
bDo6RE9NOjpQc2V1ZG9UeXBlOjpBZnRlcjsKKyAgICAgICAgKnR5cGUgPSBQcm90b2NvbDo6RE9N
OjpQc2V1ZG9UeXBlOjpBZnRlcjsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgZGVmYXVsdDoK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIH0KIAotc3RhdGljIEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRPTTo6U2hhZG93Um9vdFR5cGUgc2hhZG93Um9vdFR5cGUoU2hhZG93Um9vdE1vZGUg
bW9kZSkKK3N0YXRpYyBQcm90b2NvbDo6RE9NOjpTaGFkb3dSb290VHlwZSBzaGFkb3dSb290VHlw
ZShTaGFkb3dSb290TW9kZSBtb2RlKQogewogICAgIHN3aXRjaCAobW9kZSkgewogICAgIGNhc2Ug
U2hhZG93Um9vdE1vZGU6OlVzZXJBZ2VudDoKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRPTTo6U2hhZG93Um9vdFR5cGU6OlVzZXJBZ2VudDsKKyAgICAgICAgcmV0dXJuIFBy
b3RvY29sOjpET006OlNoYWRvd1Jvb3RUeXBlOjpVc2VyQWdlbnQ7CiAgICAgY2FzZSBTaGFkb3dS
b290TW9kZTo6Q2xvc2VkOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9N
OjpTaGFkb3dSb290VHlwZTo6Q2xvc2VkOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OkRPTTo6
U2hhZG93Um9vdFR5cGU6OkNsb3NlZDsKICAgICBjYXNlIFNoYWRvd1Jvb3RNb2RlOjpPcGVuOgot
ICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpTaGFkb3dSb290VHlwZTo6
T3BlbjsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpET006OlNoYWRvd1Jvb3RUeXBlOjpPcGVu
OwogICAgIH0KIAogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBJbnNwZWN0
b3I6OlByb3RvY29sOjpET006OlNoYWRvd1Jvb3RUeXBlOjpVc2VyQWdlbnQ7CisgICAgcmV0dXJu
IFByb3RvY29sOjpET006OlNoYWRvd1Jvb3RUeXBlOjpVc2VyQWdlbnQ7CiB9CiAKLXN0YXRpYyBJ
bnNwZWN0b3I6OlByb3RvY29sOjpET006OkN1c3RvbUVsZW1lbnRTdGF0ZSBjdXN0b21FbGVtZW50
U3RhdGUoY29uc3QgRWxlbWVudCYgZWxlbWVudCkKK3N0YXRpYyBQcm90b2NvbDo6RE9NOjpDdXN0
b21FbGVtZW50U3RhdGUgY3VzdG9tRWxlbWVudFN0YXRlKGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQp
CiB7CiAgICAgaWYgKGVsZW1lbnQuaXNEZWZpbmVkQ3VzdG9tRWxlbWVudCgpKQotICAgICAgICBy
ZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpDdXN0b21FbGVtZW50U3RhdGU6OkN1c3Rv
bTsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpET006OkN1c3RvbUVsZW1lbnRTdGF0ZTo6Q3Vz
dG9tOwogICAgIGlmIChlbGVtZW50LmlzRmFpbGVkQ3VzdG9tRWxlbWVudCgpKQotICAgICAgICBy
ZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpDdXN0b21FbGVtZW50U3RhdGU6OkZhaWxl
ZDsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpET006OkN1c3RvbUVsZW1lbnRTdGF0ZTo6RmFp
bGVkOwogICAgIGlmIChlbGVtZW50LmlzVW5kZWZpbmVkQ3VzdG9tRWxlbWVudCgpIHx8IGVsZW1l
bnQuaXNDdXN0b21FbGVtZW50VXBncmFkZUNhbmRpZGF0ZSgpKQotICAgICAgICByZXR1cm4gSW5z
cGVjdG9yOjpQcm90b2NvbDo6RE9NOjpDdXN0b21FbGVtZW50U3RhdGU6OldhaXRpbmc7Ci0gICAg
cmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Q3VzdG9tRWxlbWVudFN0YXRlOjpCdWls
dGluOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OkRPTTo6Q3VzdG9tRWxlbWVudFN0YXRlOjpX
YWl0aW5nOworICAgIHJldHVybiBQcm90b2NvbDo6RE9NOjpDdXN0b21FbGVtZW50U3RhdGU6OkJ1
aWx0aW47CiB9CiAKIHN0YXRpYyBTdHJpbmcgY29tcHV0ZUNvbnRlbnRTZWN1cml0eVBvbGljeVNI
QTI1Nkhhc2goY29uc3QgRWxlbWVudCYgZWxlbWVudCkKQEAgLTE1OTcsOSArMTY2Niw5IEBAIHN0
YXRpYyBTdHJpbmcgY29tcHV0ZUNvbnRlbnRTZWN1cml0eVBvbGljeVNIQTI1Nkhhc2goY29uc3Qg
RWxlbWVudCYgZWxlbWVudCkKICAgICByZXR1cm4gbWFrZVN0cmluZygic2hhMjU2LSIsIGJhc2U2
NEVuY29kZShkaWdlc3QuZGF0YSgpLCBkaWdlc3Quc2l6ZSgpKSk7CiB9CiAKLVJlZjxJbnNwZWN0
b3I6OlByb3RvY29sOjpET006Ok5vZGU+IEluc3BlY3RvckRPTUFnZW50OjpidWlsZE9iamVjdEZv
ck5vZGUoTm9kZSogbm9kZSwgaW50IGRlcHRoLCBOb2RlVG9JZE1hcCogbm9kZXNNYXApCitSZWY8
UHJvdG9jb2w6OkRPTTo6Tm9kZT4gSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yTm9k
ZShOb2RlKiBub2RlLCBpbnQgZGVwdGgsIE5vZGVUb0lkTWFwKiBub2Rlc01hcCkKIHsKLSAgICBp
bnQgaWQgPSBiaW5kKG5vZGUsIG5vZGVzTWFwKTsKKyAgICBhdXRvIGlkID0gYmluZChub2RlLCBu
b2Rlc01hcCk7CiAgICAgU3RyaW5nIG5vZGVOYW1lOwogICAgIFN0cmluZyBsb2NhbE5hbWU7CiAg
ICAgU3RyaW5nIG5vZGVWYWx1ZTsKQEAgLTE2MzAsNyArMTY5OSw3IEBAIFJlZjxJbnNwZWN0b3I6
OlByb3RvY29sOjpET006Ok5vZGU+IEluc3BlY3RvckRPTUFnZW50OjpidWlsZE9iamVjdEZvck5v
ZGUoTm9kZSoKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgYXV0byB2YWx1ZSA9IEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZTo6Y3JlYXRlKCkKKyAgICBhdXRvIHZhbHVlID0gUHJv
dG9jb2w6OkRPTTo6Tm9kZTo6Y3JlYXRlKCkKICAgICAgICAgLnNldE5vZGVJZChpZCkKICAgICAg
ICAgLnNldE5vZGVUeXBlKHN0YXRpY19jYXN0PGludD4obm9kZS0+bm9kZVR5cGUoKSkpCiAgICAg
ICAgIC5zZXROb2RlTmFtZShub2RlTmFtZSkKQEAgLTE2NDEsNyArMTcxMCw3IEBAIFJlZjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+IEluc3BlY3RvckRPTUFnZW50OjpidWlsZE9iamVj
dEZvck5vZGUoTm9kZSoKICAgICBpZiAobm9kZS0+aXNDb250YWluZXJOb2RlKCkpIHsKICAgICAg
ICAgaW50IG5vZGVDb3VudCA9IGlubmVyQ2hpbGROb2RlQ291bnQobm9kZSk7CiAgICAgICAgIHZh
bHVlLT5zZXRDaGlsZE5vZGVDb3VudChub2RlQ291bnQpOwotICAgICAgICBSZWY8SlNPTjo6QXJy
YXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+PiBjaGlsZHJlbiA9IGJ1aWxkQXJy
YXlGb3JDb250YWluZXJDaGlsZHJlbihub2RlLCBkZXB0aCwgbm9kZXNNYXApOworICAgICAgICBS
ZWY8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6RE9NOjpOb2RlPj4gY2hpbGRyZW4gPSBidWlsZEFy
cmF5Rm9yQ29udGFpbmVyQ2hpbGRyZW4obm9kZSwgZGVwdGgsIG5vZGVzTWFwKTsKICAgICAgICAg
aWYgKGNoaWxkcmVuLT5sZW5ndGgoKSA+IDApCiAgICAgICAgICAgICB2YWx1ZS0+c2V0Q2hpbGRy
ZW4oV1RGTW92ZShjaGlsZHJlbikpOwogICAgIH0KQEAgLTE2NjEsNyArMTczMCw3IEBAIFJlZjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+IEluc3BlY3RvckRPTUFnZW50OjpidWlsZE9i
amVjdEZvck5vZGUoTm9kZSoKICAgICAgICAgfQogCiAgICAgICAgIGlmIChTaGFkb3dSb290KiBy
b290ID0gZWxlbWVudC5zaGFkb3dSb290KCkpIHsKLSAgICAgICAgICAgIGF1dG8gc2hhZG93Um9v
dHMgPSBKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZT46OmNyZWF0
ZSgpOworICAgICAgICAgICAgYXV0byBzaGFkb3dSb290cyA9IEpTT046OkFycmF5T2Y8UHJvdG9j
b2w6OkRPTTo6Tm9kZT46OmNyZWF0ZSgpOwogICAgICAgICAgICAgc2hhZG93Um9vdHMtPmFkZEl0
ZW0oYnVpbGRPYmplY3RGb3JOb2RlKHJvb3QsIDAsIG5vZGVzTWFwKSk7CiAgICAgICAgICAgICB2
YWx1ZS0+c2V0U2hhZG93Um9vdHMoV1RGTW92ZShzaGFkb3dSb290cykpOwogICAgICAgICB9CkBA
IC0xNjczLDE2ICsxNzQyLDE2IEBAIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+
IEluc3BlY3RvckRPTUFnZW50OjpidWlsZE9iamVjdEZvck5vZGUoTm9kZSoKICAgICAgICAgICAg
IHZhbHVlLT5zZXRDb250ZW50U2VjdXJpdHlQb2xpY3lIYXNoKGNvbXB1dGVDb250ZW50U2VjdXJp
dHlQb2xpY3lTSEEyNTZIYXNoKGVsZW1lbnQpKTsKIAogICAgICAgICBhdXRvIHN0YXRlID0gY3Vz
dG9tRWxlbWVudFN0YXRlKGVsZW1lbnQpOwotICAgICAgICBpZiAoc3RhdGUgIT0gSW5zcGVjdG9y
OjpQcm90b2NvbDo6RE9NOjpDdXN0b21FbGVtZW50U3RhdGU6OkJ1aWx0aW4pCisgICAgICAgIGlm
IChzdGF0ZSAhPSBQcm90b2NvbDo6RE9NOjpDdXN0b21FbGVtZW50U3RhdGU6OkJ1aWx0aW4pCiAg
ICAgICAgICAgICB2YWx1ZS0+c2V0Q3VzdG9tRWxlbWVudFN0YXRlKHN0YXRlKTsKIAogICAgICAg
ICBpZiAoZWxlbWVudC5wc2V1ZG9JZCgpICE9IFBzZXVkb0lkOjpOb25lKSB7Ci0gICAgICAgICAg
ICBJbnNwZWN0b3I6OlByb3RvY29sOjpET006OlBzZXVkb1R5cGUgcHNldWRvVHlwZTsKKyAgICAg
ICAgICAgIFByb3RvY29sOjpET006OlBzZXVkb1R5cGUgcHNldWRvVHlwZTsKICAgICAgICAgICAg
IGlmIChwc2V1ZG9FbGVtZW50VHlwZShlbGVtZW50LnBzZXVkb0lkKCksICZwc2V1ZG9UeXBlKSkK
ICAgICAgICAgICAgICAgICB2YWx1ZS0+c2V0UHNldWRvVHlwZShwc2V1ZG9UeXBlKTsKICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgIGlmIChhdXRvIHBzZXVkb0VsZW1lbnRzID0gYnVpbGRB
cnJheUZvclBzZXVkb0VsZW1lbnRzKGVsZW1lbnQsIG5vZGVzTWFwKSkKLSAgICAgICAgICAgICAg
ICB2YWx1ZS0+c2V0UHNldWRvRWxlbWVudHMoV1RGTW92ZShwc2V1ZG9FbGVtZW50cykpOworICAg
ICAgICAgICAgICAgIHZhbHVlLT5zZXRQc2V1ZG9FbGVtZW50cyhwc2V1ZG9FbGVtZW50cy5yZWxl
YXNlTm9uTnVsbCgpKTsKICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAoaXM8RG9jdW1lbnQ+KCpu
b2RlKSkgewogICAgICAgICBEb2N1bWVudCYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4o
Km5vZGUpOwpAQCAtMTcyMSw5ICsxNzkwLDkgQEAgUmVmPEpTT046OkFycmF5T2Y8U3RyaW5nPj4g
SW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkQXJyYXlGb3JFbGVtZW50QXR0cmlidXRlcyhFbGUKICAg
ICByZXR1cm4gYXR0cmlidXRlc1ZhbHVlOwogfQogCi1SZWY8SlNPTjo6QXJyYXlPZjxJbnNwZWN0
b3I6OlByb3RvY29sOjpET006Ok5vZGU+PiBJbnNwZWN0b3JET01BZ2VudDo6YnVpbGRBcnJheUZv
ckNvbnRhaW5lckNoaWxkcmVuKE5vZGUqIGNvbnRhaW5lciwgaW50IGRlcHRoLCBOb2RlVG9JZE1h
cCogbm9kZXNNYXApCitSZWY8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6RE9NOjpOb2RlPj4gSW5z
cGVjdG9yRE9NQWdlbnQ6OmJ1aWxkQXJyYXlGb3JDb250YWluZXJDaGlsZHJlbihOb2RlKiBjb250
YWluZXIsIGludCBkZXB0aCwgTm9kZVRvSWRNYXAqIG5vZGVzTWFwKQogewotICAgIGF1dG8gY2hp
bGRyZW4gPSBKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZT46OmNy
ZWF0ZSgpOworICAgIGF1dG8gY2hpbGRyZW4gPSBKU09OOjpBcnJheU9mPFByb3RvY29sOjpET006
Ok5vZGU+OjpjcmVhdGUoKTsKICAgICBpZiAoZGVwdGggPT0gMCkgewogICAgICAgICAvLyBTcGVj
aWFsLWNhc2UgdGhlIG9ubHkgdGV4dCBjaGlsZCAtIHByZXRlbmQgdGhhdCBjb250YWluZXIncyBj
aGlsZHJlbiBoYXZlIGJlZW4gcmVxdWVzdGVkLgogICAgICAgICBOb2RlKiBmaXJzdENoaWxkID0g
Y29udGFpbmVyLT5maXJzdENoaWxkKCk7CkBAIC0xNzQ1LDE0ICsxODE0LDE0IEBAIFJlZjxKU09O
OjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZT4+IEluc3BlY3RvckRPTUFn
ZW50OjpidWlsZEFycmF5CiAgICAgcmV0dXJuIGNoaWxkcmVuOwogfQogCi1SZWZQdHI8SlNPTjo6
QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+PiBJbnNwZWN0b3JET01BZ2Vu
dDo6YnVpbGRBcnJheUZvclBzZXVkb0VsZW1lbnRzKGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQsIE5v
ZGVUb0lkTWFwKiBub2Rlc01hcCkKK1JlZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpET006
Ok5vZGU+PiBJbnNwZWN0b3JET01BZ2VudDo6YnVpbGRBcnJheUZvclBzZXVkb0VsZW1lbnRzKGNv
bnN0IEVsZW1lbnQmIGVsZW1lbnQsIE5vZGVUb0lkTWFwKiBub2Rlc01hcCkKIHsKICAgICBQc2V1
ZG9FbGVtZW50KiBiZWZvcmVFbGVtZW50ID0gZWxlbWVudC5iZWZvcmVQc2V1ZG9FbGVtZW50KCk7
CiAgICAgUHNldWRvRWxlbWVudCogYWZ0ZXJFbGVtZW50ID0gZWxlbWVudC5hZnRlclBzZXVkb0Vs
ZW1lbnQoKTsKICAgICBpZiAoIWJlZm9yZUVsZW1lbnQgJiYgIWFmdGVyRWxlbWVudCkKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBhdXRvIHBzZXVkb0VsZW1lbnRzID0gSlNPTjo6QXJy
YXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+OjpjcmVhdGUoKTsKKyAgICBhdXRv
IHBzZXVkb0VsZW1lbnRzID0gSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6RE9NOjpOb2RlPjo6Y3Jl
YXRlKCk7CiAgICAgaWYgKGJlZm9yZUVsZW1lbnQpCiAgICAgICAgIHBzZXVkb0VsZW1lbnRzLT5h
ZGRJdGVtKGJ1aWxkT2JqZWN0Rm9yTm9kZShiZWZvcmVFbGVtZW50LCAwLCBub2Rlc01hcCkpOwog
ICAgIGlmIChhZnRlckVsZW1lbnQpCkBAIC0xNzYwLDcgKzE4MjksNyBAQCBSZWZQdHI8SlNPTjo6
QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+PiBJbnNwZWN0b3JET01BZ2Vu
dDo6YnVpbGRBcgogICAgIHJldHVybiBwc2V1ZG9FbGVtZW50czsKIH0KIAotUmVmPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRPTTo6RXZlbnRMaXN0ZW5lcj4gSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxk
T2JqZWN0Rm9yRXZlbnRMaXN0ZW5lcihjb25zdCBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lciYgcmVn
aXN0ZXJlZEV2ZW50TGlzdGVuZXIsIGludCBpZGVudGlmaWVyLCBFdmVudFRhcmdldCYgZXZlbnRU
YXJnZXQsIGNvbnN0IEF0b21TdHJpbmcmIGV2ZW50VHlwZSwgYm9vbCBkaXNhYmxlZCwgY29uc3Qg
UmVmUHRyPEpTQzo6QnJlYWtwb2ludD4mIGJyZWFrcG9pbnQpCitSZWY8UHJvdG9jb2w6OkRPTTo6
RXZlbnRMaXN0ZW5lcj4gSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yRXZlbnRMaXN0
ZW5lcihjb25zdCBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lciYgcmVnaXN0ZXJlZEV2ZW50TGlzdGVu
ZXIsIFByb3RvY29sOjpET006OkV2ZW50TGlzdGVuZXJJZCBpZGVudGlmaWVyLCBFdmVudFRhcmdl
dCYgZXZlbnRUYXJnZXQsIGNvbnN0IEF0b21TdHJpbmcmIGV2ZW50VHlwZSwgYm9vbCBkaXNhYmxl
ZCwgY29uc3QgUmVmUHRyPEpTQzo6QnJlYWtwb2ludD4mIGJyZWFrcG9pbnQpCiB7CiAgICAgUmVm
PEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIgPSByZWdpc3RlcmVkRXZlbnRMaXN0ZW5lci5j
YWxsYmFjaygpOwogCkBAIC0xODIyLDcgKzE4OTEsNyBAQCBSZWY8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6RE9NOjpFdmVudExpc3RlbmVyPiBJbnNwZWN0b3JET01BZ2VudDo6YnVpbGRPYmplY3RGb3JF
dgogICAgICAgICB9CiAgICAgfQogCi0gICAgYXV0byB2YWx1ZSA9IEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRPTTo6RXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKCkKKyAgICBhdXRvIHZhbHVlID0gUHJvdG9j
b2w6OkRPTTo6RXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKCkKICAgICAgICAgLnNldEV2ZW50TGlzdGVu
ZXJJZChpZGVudGlmaWVyKQogICAgICAgICAuc2V0VHlwZShldmVudFR5cGUpCiAgICAgICAgIC5z
ZXRVc2VDYXB0dXJlKHJlZ2lzdGVyZWRFdmVudExpc3RlbmVyLnVzZUNhcHR1cmUoKSkKQEAgLTE4
MzMsNyArMTkwMiw3IEBAIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkV2ZW50TGlzdGVu
ZXI+IEluc3BlY3RvckRPTUFnZW50OjpidWlsZE9iamVjdEZvckV2CiAgICAgZWxzZSBpZiAoaXM8
RE9NV2luZG93PihldmVudFRhcmdldCkpCiAgICAgICAgIHZhbHVlLT5zZXRPbldpbmRvdyh0cnVl
KTsKICAgICBpZiAoIXNjcmlwdElELmlzTnVsbCgpKSB7Ci0gICAgICAgIGF1dG8gbG9jYXRpb24g
PSBJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6TG9jYXRpb246OmNyZWF0ZSgpCisgICAg
ICAgIGF1dG8gbG9jYXRpb24gPSBQcm90b2NvbDo6RGVidWdnZXI6OkxvY2F0aW9uOjpjcmVhdGUo
KQogICAgICAgICAgICAgLnNldFNjcmlwdElkKHNjcmlwdElEKQogICAgICAgICAgICAgLnNldExp
bmVOdW1iZXIobGluZU51bWJlcikKICAgICAgICAgICAgIC5yZWxlYXNlKCk7CkBAIC0xODUzLDcg
KzE5MjIsNyBAQCBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpFdmVudExpc3RlbmVyPiBJ
bnNwZWN0b3JET01BZ2VudDo6YnVpbGRPYmplY3RGb3JFdgogICAgIHJldHVybiB2YWx1ZTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6cHJvY2Vzc0FjY2Vzc2liaWxpdHlDaGlsZHJlbihB
WENvcmVPYmplY3QmIGF4T2JqZWN0LCBKU09OOjpBcnJheU9mPGludD4mIGNoaWxkTm9kZUlkcykK
K3ZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnByb2Nlc3NBY2Nlc3NpYmlsaXR5Q2hpbGRyZW4oQVhD
b3JlT2JqZWN0JiBheE9iamVjdCwgSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6RE9NOjpOb2RlSWQ+
JiBjaGlsZE5vZGVJZHMpCiB7CiAgICAgY29uc3QgYXV0byYgY2hpbGRyZW4gPSBheE9iamVjdC5j
aGlsZHJlbigpOwogICAgIGlmICghY2hpbGRyZW4uc2l6ZSgpKQpAQCAtMTg2Nyw0MyArMTkzNiwz
OSBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50Ojpwcm9jZXNzQWNjZXNzaWJpbGl0eUNoaWxkcmVu
KEFYQ29yZU9iamVjdCYgYXhPYmplY3QsIEpTTwogICAgIH0KIH0KICAgICAKLVJlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzPiBJbnNwZWN0b3JE
T01BZ2VudDo6YnVpbGRPYmplY3RGb3JBY2Nlc3NpYmlsaXR5UHJvcGVydGllcyhOb2RlKiBub2Rl
KQorUmVmPFByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzPiBJbnNwZWN0b3JE
T01BZ2VudDo6YnVpbGRPYmplY3RGb3JBY2Nlc3NpYmlsaXR5UHJvcGVydGllcyhOb2RlJiBub2Rl
KQogewotICAgIEFTU0VSVChub2RlKTsKLSAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJldHVybiBu
dWxscHRyOwotCiAgICAgaWYgKCFXZWJDb3JlOjpBWE9iamVjdENhY2hlOjphY2Nlc3NpYmlsaXR5
RW5hYmxlZCgpKQogICAgICAgICBXZWJDb3JlOjpBWE9iamVjdENhY2hlOjplbmFibGVBY2Nlc3Np
YmlsaXR5KCk7CiAKICAgICBOb2RlKiBhY3RpdmVEZXNjZW5kYW50Tm9kZSA9IG51bGxwdHI7CiAg
ICAgYm9vbCBidXN5ID0gZmFsc2U7Ci0gICAgYXV0byBjaGVja2VkID0gSW5zcGVjdG9yOjpQcm90
b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6Q2hlY2tlZDo6RmFsc2U7Ci0gICAg
UmVmUHRyPEpTT046OkFycmF5T2Y8aW50Pj4gY2hpbGROb2RlSWRzOwotICAgIFJlZlB0cjxKU09O
OjpBcnJheU9mPGludD4+IGNvbnRyb2xsZWROb2RlSWRzOwotICAgIGF1dG8gY3VycmVudFN0YXRl
ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6Q3Vy
cmVudDo6RmFsc2U7CisgICAgYXV0byBjaGVja2VkID0gUHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJp
bGl0eVByb3BlcnRpZXM6OkNoZWNrZWQ6OkZhbHNlOworICAgIFJlZlB0cjxKU09OOjpBcnJheU9m
PFByb3RvY29sOjpET006Ok5vZGVJZD4+IGNoaWxkTm9kZUlkczsKKyAgICBSZWZQdHI8SlNPTjo6
QXJyYXlPZjxQcm90b2NvbDo6RE9NOjpOb2RlSWQ+PiBjb250cm9sbGVkTm9kZUlkczsKKyAgICBh
dXRvIGN1cnJlbnRTdGF0ZSA9IFByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVz
OjpDdXJyZW50OjpGYWxzZTsKICAgICBib29sIGV4aXN0cyA9IGZhbHNlOwogICAgIGJvb2wgZXhw
YW5kZWQgPSBmYWxzZTsKICAgICBib29sIGRpc2FibGVkID0gZmFsc2U7Ci0gICAgUmVmUHRyPEpT
T046OkFycmF5T2Y8aW50Pj4gZmxvd2VkTm9kZUlkczsKKyAgICBSZWZQdHI8SlNPTjo6QXJyYXlP
ZjxQcm90b2NvbDo6RE9NOjpOb2RlSWQ+PiBmbG93ZWROb2RlSWRzOwogICAgIGJvb2wgZm9jdXNl
ZCA9IGZhbHNlOwogICAgIGJvb2wgaWdub3JlZCA9IHRydWU7CiAgICAgYm9vbCBpZ25vcmVkQnlE
ZWZhdWx0ID0gZmFsc2U7Ci0gICAgYXV0byBpbnZhbGlkID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6
RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6SW52YWxpZDo6RmFsc2U7CisgICAgYXV0byBp
bnZhbGlkID0gUHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6OkludmFsaWQ6
OkZhbHNlOwogICAgIGJvb2wgaGlkZGVuID0gZmFsc2U7CiAgICAgU3RyaW5nIGxhYmVsOwogICAg
IGJvb2wgbGl2ZVJlZ2lvbkF0b21pYyA9IGZhbHNlOwogICAgIFJlZlB0cjxKU09OOjpBcnJheU9m
PFN0cmluZz4+IGxpdmVSZWdpb25SZWxldmFudDsKLSAgICBhdXRvIGxpdmVSZWdpb25TdGF0dXMg
PSBJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpMaXZl
UmVnaW9uU3RhdHVzOjpPZmY7CisgICAgYXV0byBsaXZlUmVnaW9uU3RhdHVzID0gUHJvdG9jb2w6
OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6OkxpdmVSZWdpb25TdGF0dXM6Ok9mZjsKICAg
ICBOb2RlKiBtb3VzZUV2ZW50Tm9kZSA9IG51bGxwdHI7Ci0gICAgUmVmUHRyPEpTT046OkFycmF5
T2Y8aW50Pj4gb3duZWROb2RlSWRzOworICAgIFJlZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29s
OjpET006Ok5vZGVJZD4+IG93bmVkTm9kZUlkczsKICAgICBOb2RlKiBwYXJlbnROb2RlID0gbnVs
bHB0cjsKICAgICBib29sIHByZXNzZWQgPSBmYWxzZTsKICAgICBib29sIHJlYWRvbmx5ID0gZmFs
c2U7CiAgICAgYm9vbCByZXF1aXJlZCA9IGZhbHNlOwogICAgIFN0cmluZyByb2xlOwogICAgIGJv
b2wgc2VsZWN0ZWQgPSBmYWxzZTsKLSAgICBSZWZQdHI8SlNPTjo6QXJyYXlPZjxpbnQ+PiBzZWxl
Y3RlZENoaWxkTm9kZUlkczsKKyAgICBSZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6RE9N
OjpOb2RlSWQ+PiBzZWxlY3RlZENoaWxkTm9kZUlkczsKICAgICBib29sIHN1cHBvcnRzQ2hlY2tl
ZCA9IGZhbHNlOwogICAgIGJvb2wgc3VwcG9ydHNFeHBhbmRlZCA9IGZhbHNlOwogICAgIGJvb2wg
c3VwcG9ydHNMaXZlUmVnaW9uID0gZmFsc2U7CkBAIC0xOTE1LDggKzE5ODAsOCBAQCBSZWZQdHI8
SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllcz4gSW5zcGVj
dG9yRE9NQWdlbnQ6OmJ1aQogICAgIHVuc2lnbmVkIGhpZXJhcmNoaWNhbExldmVsID0gMDsKICAg
ICB1bnNpZ25lZCBsZXZlbCA9IDA7CiAKLSAgICBpZiAoQVhPYmplY3RDYWNoZSogYXhPYmplY3RD
YWNoZSA9IG5vZGUtPmRvY3VtZW50KCkuYXhPYmplY3RDYWNoZSgpKSB7Ci0gICAgICAgIGlmIChB
WENvcmVPYmplY3QqIGF4T2JqZWN0ID0gYXhPYmplY3RDYWNoZS0+Z2V0T3JDcmVhdGUobm9kZSkp
IHsKKyAgICBpZiAoQVhPYmplY3RDYWNoZSogYXhPYmplY3RDYWNoZSA9IG5vZGUuZG9jdW1lbnQo
KS5heE9iamVjdENhY2hlKCkpIHsKKyAgICAgICAgaWYgKEFYQ29yZU9iamVjdCogYXhPYmplY3Qg
PSBheE9iamVjdENhY2hlLT5nZXRPckNyZWF0ZSgmbm9kZSkpIHsKIAogICAgICAgICAgICAgaWYg
KEFYQ29yZU9iamVjdCogYWN0aXZlRGVzY2VuZGFudCA9IGF4T2JqZWN0LT5hY3RpdmVEZXNjZW5k
YW50KCkpCiAgICAgICAgICAgICAgICAgYWN0aXZlRGVzY2VuZGFudE5vZGUgPSBhY3RpdmVEZXNj
ZW5kYW50LT5ub2RlKCk7CkBAIC0xOTMyLDQ3ICsxOTk3LDQ5IEBAIFJlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzPiBJbnNwZWN0b3JET01BZ2Vu
dDo6YnVpCiAgICAgICAgICAgICBpZiAoc3VwcG9ydHNDaGVja2VkKSB7CiAgICAgICAgICAgICAg
ICAgQWNjZXNzaWJpbGl0eUJ1dHRvblN0YXRlIGNoZWNrVmFsdWUgPSBheE9iamVjdC0+Y2hlY2ti
b3hPclJhZGlvVmFsdWUoKTsgLy8gRWxlbWVudCB1c2luZyBhcmlhLWNoZWNrZWQuCiAgICAgICAg
ICAgICAgICAgaWYgKGNoZWNrVmFsdWUgPT0gQWNjZXNzaWJpbGl0eUJ1dHRvblN0YXRlOjpPbikK
LSAgICAgICAgICAgICAgICAgICAgY2hlY2tlZCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6
QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6OkNoZWNrZWQ6OlRydWU7CisgICAgICAgICAgICAgICAg
ICAgIGNoZWNrZWQgPSBQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6Q2hl
Y2tlZDo6VHJ1ZTsKICAgICAgICAgICAgICAgICBlbHNlIGlmIChjaGVja1ZhbHVlID09IEFjY2Vz
c2liaWxpdHlCdXR0b25TdGF0ZTo6TWl4ZWQpCi0gICAgICAgICAgICAgICAgICAgIGNoZWNrZWQg
PSBJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpDaGVj
a2VkOjpNaXhlZDsKKyAgICAgICAgICAgICAgICAgICAgY2hlY2tlZCA9IFByb3RvY29sOjpET006
OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpDaGVja2VkOjpNaXhlZDsKICAgICAgICAgICAgICAg
ICBlbHNlIGlmIChheE9iamVjdC0+aXNDaGVja2VkKCkpIC8vIE5hdGl2ZSBjaGVja2JveC4KLSAg
ICAgICAgICAgICAgICAgICAgY2hlY2tlZCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6QWNj
ZXNzaWJpbGl0eVByb3BlcnRpZXM6OkNoZWNrZWQ6OlRydWU7CisgICAgICAgICAgICAgICAgICAg
IGNoZWNrZWQgPSBQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6Q2hlY2tl
ZDo6VHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKCFh
eE9iamVjdC0+Y2hpbGRyZW4oKS5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICBjaGlsZE5v
ZGVJZHMgPSBKU09OOjpBcnJheU9mPGludD46OmNyZWF0ZSgpOworICAgICAgICAgICAgICAgIGNo
aWxkTm9kZUlkcyA9IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkRPTTo6Tm9kZUlkPjo6Y3JlYXRl
KCk7CiAgICAgICAgICAgICAgICAgcHJvY2Vzc0FjY2Vzc2liaWxpdHlDaGlsZHJlbigqYXhPYmpl
Y3QsICpjaGlsZE5vZGVJZHMpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAg
ICAgICBWZWN0b3I8RWxlbWVudCo+IGNvbnRyb2xsZWRFbGVtZW50czsKICAgICAgICAgICAgIGF4
T2JqZWN0LT5lbGVtZW50c0Zyb21BdHRyaWJ1dGUoY29udHJvbGxlZEVsZW1lbnRzLCBhcmlhX2Nv
bnRyb2xzQXR0cik7CiAgICAgICAgICAgICBpZiAoY29udHJvbGxlZEVsZW1lbnRzLnNpemUoKSkg
ewotICAgICAgICAgICAgICAgIGNvbnRyb2xsZWROb2RlSWRzID0gSlNPTjo6QXJyYXlPZjxpbnQ+
OjpjcmVhdGUoKTsKLSAgICAgICAgICAgICAgICBmb3IgKEVsZW1lbnQqIGNvbnRyb2xsZWRFbGVt
ZW50IDogY29udHJvbGxlZEVsZW1lbnRzKQotICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVk
Tm9kZUlkcy0+YWRkSXRlbShwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKGNvbnRyb2xsZWRFbGVtZW50
KSk7CisgICAgICAgICAgICAgICAgY29udHJvbGxlZE5vZGVJZHMgPSBKU09OOjpBcnJheU9mPFBy
b3RvY29sOjpET006Ok5vZGVJZD46OmNyZWF0ZSgpOworICAgICAgICAgICAgICAgIGZvciAoRWxl
bWVudCogY29udHJvbGxlZEVsZW1lbnQgOiBjb250cm9sbGVkRWxlbWVudHMpIHsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKGF1dG8gY29udHJvbGxlZEVsZW1lbnRJZCA9IHB1c2hOb2RlUGF0aFRv
RnJvbnRlbmQoY29udHJvbGxlZEVsZW1lbnQpKQorICAgICAgICAgICAgICAgICAgICAgICAgY29u
dHJvbGxlZE5vZGVJZHMtPmFkZEl0ZW0oY29udHJvbGxlZEVsZW1lbnRJZCk7CisgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICBzd2l0Y2gg
KGF4T2JqZWN0LT5jdXJyZW50U3RhdGUoKSkgewogICAgICAgICAgICAgY2FzZSBBY2Nlc3NpYmls
aXR5Q3VycmVudFN0YXRlOjpGYWxzZToKLSAgICAgICAgICAgICAgICBjdXJyZW50U3RhdGUgPSBJ
bnNwZWN0b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpDdXJyZW50
OjpGYWxzZTsKKyAgICAgICAgICAgICAgICBjdXJyZW50U3RhdGUgPSBQcm90b2NvbDo6RE9NOjpB
Y2Nlc3NpYmlsaXR5UHJvcGVydGllczo6Q3VycmVudDo6RmFsc2U7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICBjYXNlIEFjY2Vzc2liaWxpdHlDdXJyZW50U3RhdGU6OlBhZ2U6
Ci0gICAgICAgICAgICAgICAgY3VycmVudFN0YXRlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9N
OjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6Q3VycmVudDo6UGFnZTsKKyAgICAgICAgICAgICAg
ICBjdXJyZW50U3RhdGUgPSBQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6
Q3VycmVudDo6UGFnZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2Ug
QWNjZXNzaWJpbGl0eUN1cnJlbnRTdGF0ZTo6U3RlcDoKLSAgICAgICAgICAgICAgICBjdXJyZW50
U3RhdGUgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVz
OjpDdXJyZW50OjpTdGVwOworICAgICAgICAgICAgICAgIGN1cnJlbnRTdGF0ZSA9IFByb3RvY29s
OjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpDdXJyZW50OjpTdGVwOwogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBBY2Nlc3NpYmlsaXR5Q3VycmVudFN0YXRl
OjpMb2NhdGlvbjoKLSAgICAgICAgICAgICAgICBjdXJyZW50U3RhdGUgPSBJbnNwZWN0b3I6OlBy
b3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpDdXJyZW50OjpMb2NhdGlvbjsK
KyAgICAgICAgICAgICAgICBjdXJyZW50U3RhdGUgPSBQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmls
aXR5UHJvcGVydGllczo6Q3VycmVudDo6TG9jYXRpb247CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICBjYXNlIEFjY2Vzc2liaWxpdHlDdXJyZW50U3RhdGU6OkRhdGU6Ci0gICAg
ICAgICAgICAgICAgY3VycmVudFN0YXRlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nl
c3NpYmlsaXR5UHJvcGVydGllczo6Q3VycmVudDo6RGF0ZTsKKyAgICAgICAgICAgICAgICBjdXJy
ZW50U3RhdGUgPSBQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6Q3VycmVu
dDo6RGF0ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgQWNjZXNz
aWJpbGl0eUN1cnJlbnRTdGF0ZTo6VGltZToKLSAgICAgICAgICAgICAgICBjdXJyZW50U3RhdGUg
PSBJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpDdXJy
ZW50OjpUaW1lOworICAgICAgICAgICAgICAgIGN1cnJlbnRTdGF0ZSA9IFByb3RvY29sOjpET006
OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpDdXJyZW50OjpUaW1lOwogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgY2FzZSBBY2Nlc3NpYmlsaXR5Q3VycmVudFN0YXRlOjpUcnVl
OgotICAgICAgICAgICAgICAgIGN1cnJlbnRTdGF0ZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRP
TTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6OkN1cnJlbnQ6OlRydWU7CisgICAgICAgICAgICAg
ICAgY3VycmVudFN0YXRlID0gUHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6
OkN1cnJlbnQ6OlRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAK
QEAgLTE5ODYsMTIgKzIwNTMsMTQgQEAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6
QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM+IEluc3BlY3RvckRPTUFnZW50OjpidWkKICAgICAgICAg
ICAgIFZlY3RvcjxFbGVtZW50Kj4gZmxvd2VkRWxlbWVudHM7CiAgICAgICAgICAgICBheE9iamVj
dC0+ZWxlbWVudHNGcm9tQXR0cmlidXRlKGZsb3dlZEVsZW1lbnRzLCBhcmlhX2Zsb3d0b0F0dHIp
OwogICAgICAgICAgICAgaWYgKGZsb3dlZEVsZW1lbnRzLnNpemUoKSkgewotICAgICAgICAgICAg
ICAgIGZsb3dlZE5vZGVJZHMgPSBKU09OOjpBcnJheU9mPGludD46OmNyZWF0ZSgpOwotICAgICAg
ICAgICAgICAgIGZvciAoRWxlbWVudCogZmxvd2VkRWxlbWVudCA6IGZsb3dlZEVsZW1lbnRzKQot
ICAgICAgICAgICAgICAgICAgICBmbG93ZWROb2RlSWRzLT5hZGRJdGVtKHB1c2hOb2RlUGF0aFRv
RnJvbnRlbmQoZmxvd2VkRWxlbWVudCkpOworICAgICAgICAgICAgICAgIGZsb3dlZE5vZGVJZHMg
PSBKU09OOjpBcnJheU9mPFByb3RvY29sOjpET006Ok5vZGVJZD46OmNyZWF0ZSgpOworICAgICAg
ICAgICAgICAgIGZvciAoRWxlbWVudCogZmxvd2VkRWxlbWVudCA6IGZsb3dlZEVsZW1lbnRzKSB7
CisgICAgICAgICAgICAgICAgICAgIGlmIChhdXRvIGZsb3dlZEVsZW1lbnRJZCA9IHB1c2hOb2Rl
UGF0aFRvRnJvbnRlbmQoZmxvd2VkRWxlbWVudCkpCisgICAgICAgICAgICAgICAgICAgICAgICBm
bG93ZWROb2RlSWRzLT5hZGRJdGVtKGZsb3dlZEVsZW1lbnRJZCk7CisgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoaXM8RWxlbWVu
dD4oKm5vZGUpKSB7CisgICAgICAgICAgICBpZiAoaXM8RWxlbWVudD4obm9kZSkpIHsKICAgICAg
ICAgICAgICAgICBzdXBwb3J0c0ZvY3VzZWQgPSBheE9iamVjdC0+Y2FuU2V0Rm9jdXNBdHRyaWJ1
dGUoKTsKICAgICAgICAgICAgICAgICBpZiAoc3VwcG9ydHNGb2N1c2VkKQogICAgICAgICAgICAg
ICAgICAgICBmb2N1c2VkID0gYXhPYmplY3QtPmlzRm9jdXNlZCgpOwpAQCAtMjAwMiwxMyArMjA3
MSwxMyBAQCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJv
cGVydGllcz4gSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aQogICAgICAgICAgICAgCiAgICAgICAgICAg
ICBTdHJpbmcgaW52YWxpZFZhbHVlID0gYXhPYmplY3QtPmludmFsaWRTdGF0dXMoKTsKICAgICAg
ICAgICAgIGlmIChpbnZhbGlkVmFsdWUgPT0gImZhbHNlIikKLSAgICAgICAgICAgICAgICBpbnZh
bGlkID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6
SW52YWxpZDo6RmFsc2U7CisgICAgICAgICAgICAgICAgaW52YWxpZCA9IFByb3RvY29sOjpET006
OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpJbnZhbGlkOjpGYWxzZTsKICAgICAgICAgICAgIGVs
c2UgaWYgKGludmFsaWRWYWx1ZSA9PSAiZ3JhbW1hciIpCi0gICAgICAgICAgICAgICAgaW52YWxp
ZCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6Oklu
dmFsaWQ6OkdyYW1tYXI7CisgICAgICAgICAgICAgICAgaW52YWxpZCA9IFByb3RvY29sOjpET006
OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpJbnZhbGlkOjpHcmFtbWFyOwogICAgICAgICAgICAg
ZWxzZSBpZiAoaW52YWxpZFZhbHVlID09ICJzcGVsbGluZyIpCi0gICAgICAgICAgICAgICAgaW52
YWxpZCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6
OkludmFsaWQ6OlNwZWxsaW5nOworICAgICAgICAgICAgICAgIGludmFsaWQgPSBQcm90b2NvbDo6
RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6SW52YWxpZDo6U3BlbGxpbmc7CiAgICAgICAg
ICAgICBlbHNlIC8vIEZ1dHVyZSB2ZXJzaW9ucyBvZiBBUklBIG1heSBhbGxvdyBhZGRpdGlvbmFs
IHRydXRoeSB2YWx1ZXMuIEV4LiBmb3JtYXQsIG9yZGVyLCBvciBzaXplLgotICAgICAgICAgICAg
ICAgIGludmFsaWQgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9w
ZXJ0aWVzOjpJbnZhbGlkOjpUcnVlOworICAgICAgICAgICAgICAgIGludmFsaWQgPSBQcm90b2Nv
bDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6SW52YWxpZDo6VHJ1ZTsKICAgICAgICAg
ICAgIAogICAgICAgICAgICAgaWYgKGF4T2JqZWN0LT5pc0FYSGlkZGVuKCkgfHwgYXhPYmplY3Qt
PmlzRE9NSGlkZGVuKCkpCiAgICAgICAgICAgICAgICAgaGlkZGVuID0gdHJ1ZTsKQEAgLTIwMjIs
OSArMjA5MSw5IEBAIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxp
dHlQcm9wZXJ0aWVzPiBJbnNwZWN0b3JET01BZ2VudDo6YnVpCiAgICAgICAgICAgICAgICAgU3Ry
aW5nIGFyaWFSZWxldmFudEF0dHJWYWx1ZSA9IGF4T2JqZWN0LT5saXZlUmVnaW9uUmVsZXZhbnQo
KTsKICAgICAgICAgICAgICAgICBpZiAoIWFyaWFSZWxldmFudEF0dHJWYWx1ZS5pc0VtcHR5KCkp
IHsKICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFBhc3MgZW51bSB2YWx1ZXMgcmF0aGVy
IHRoYW4gc3RyaW5ncyBvbmNlIHVuYmxvY2tlZC4gaHR0cDovL3dlYmtpdC5vcmcvYi8xMzM3MTEK
LSAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGFyaWFSZWxldmFudEFkZGl0aW9ucyA9IEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6Okluc3BlY3RvckhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6TGl2ZVJlZ2lvblJlbGV2YW50OjpBZGRpdGlvbnMpOwot
ICAgICAgICAgICAgICAgICAgICBTdHJpbmcgYXJpYVJlbGV2YW50UmVtb3ZhbHMgPSBJbnNwZWN0
b3I6OlByb3RvY29sOjpJbnNwZWN0b3JIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShJbnNw
ZWN0b3I6OlByb3RvY29sOjpET006OkxpdmVSZWdpb25SZWxldmFudDo6UmVtb3ZhbHMpOwotICAg
ICAgICAgICAgICAgICAgICBTdHJpbmcgYXJpYVJlbGV2YW50VGV4dCA9IEluc3BlY3Rvcjo6UHJv
dG9jb2w6Okluc3BlY3RvckhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRPTTo6TGl2ZVJlZ2lvblJlbGV2YW50OjpUZXh0KTsKKyAgICAgICAgICAgICAg
ICAgICAgU3RyaW5nIGFyaWFSZWxldmFudEFkZGl0aW9ucyA9IFByb3RvY29sOjpIZWxwZXJzOjpn
ZXRFbnVtQ29uc3RhbnRWYWx1ZShQcm90b2NvbDo6RE9NOjpMaXZlUmVnaW9uUmVsZXZhbnQ6OkFk
ZGl0aW9ucyk7CisgICAgICAgICAgICAgICAgICAgIFN0cmluZyBhcmlhUmVsZXZhbnRSZW1vdmFs
cyA9IFByb3RvY29sOjpIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShQcm90b2NvbDo6RE9N
OjpMaXZlUmVnaW9uUmVsZXZhbnQ6OlJlbW92YWxzKTsKKyAgICAgICAgICAgICAgICAgICAgU3Ry
aW5nIGFyaWFSZWxldmFudFRleHQgPSBQcm90b2NvbDo6SGVscGVyczo6Z2V0RW51bUNvbnN0YW50
VmFsdWUoUHJvdG9jb2w6OkRPTTo6TGl2ZVJlZ2lvblJlbGV2YW50OjpUZXh0KTsKICAgICAgICAg
ICAgICAgICAgICAgbGl2ZVJlZ2lvblJlbGV2YW50ID0gSlNPTjo6QXJyYXlPZjxTdHJpbmc+Ojpj
cmVhdGUoKTsKICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3BhY2VTcGxpdFN0cmluZyYgdmFs
dWVzID0gU3BhY2VTcGxpdFN0cmluZyhhcmlhUmVsZXZhbnRBdHRyVmFsdWUsIHRydWUpOwogICAg
ICAgICAgICAgICAgICAgICAvLyBAYXJpYS1yZWxldmFudD0iYWxsIiBpcyBleHBvc2VkIGFzIFsi
YWRkaXRpb25zIiwicmVtb3ZhbHMiLCJ0ZXh0Il0sIGluIG9yZGVyLgpAQCAtMjA0NSw5ICsyMTE0
LDkgQEAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3Bl
cnRpZXM+IEluc3BlY3RvckRPTUFnZW50OjpidWkKIAogICAgICAgICAgICAgICAgIFN0cmluZyBh
cmlhTGl2ZSA9IGF4T2JqZWN0LT5saXZlUmVnaW9uU3RhdHVzKCk7CiAgICAgICAgICAgICAgICAg
aWYgKGFyaWFMaXZlID09ICJhc3NlcnRpdmUiKQotICAgICAgICAgICAgICAgICAgICBsaXZlUmVn
aW9uU3RhdHVzID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVy
dGllczo6TGl2ZVJlZ2lvblN0YXR1czo6QXNzZXJ0aXZlOworICAgICAgICAgICAgICAgICAgICBs
aXZlUmVnaW9uU3RhdHVzID0gUHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6
OkxpdmVSZWdpb25TdGF0dXM6OkFzc2VydGl2ZTsKICAgICAgICAgICAgICAgICBlbHNlIGlmIChh
cmlhTGl2ZSA9PSAicG9saXRlIikKLSAgICAgICAgICAgICAgICAgICAgbGl2ZVJlZ2lvblN0YXR1
cyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6Okxp
dmVSZWdpb25TdGF0dXM6OlBvbGl0ZTsKKyAgICAgICAgICAgICAgICAgICAgbGl2ZVJlZ2lvblN0
YXR1cyA9IFByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpMaXZlUmVnaW9u
U3RhdHVzOjpQb2xpdGU7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChpczxBY2Nl
c3NpYmlsaXR5Tm9kZU9iamVjdD4oKmF4T2JqZWN0KSkKQEAgLTIwNTcsOSArMjEyNiwxMSBAQCBS
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllcz4g
SW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aQogICAgICAgICAgICAgICAgIFZlY3RvcjxFbGVtZW50Kj4g
b3duZWRFbGVtZW50czsKICAgICAgICAgICAgICAgICBheE9iamVjdC0+ZWxlbWVudHNGcm9tQXR0
cmlidXRlKG93bmVkRWxlbWVudHMsIGFyaWFfb3duc0F0dHIpOwogICAgICAgICAgICAgICAgIGlm
IChvd25lZEVsZW1lbnRzLnNpemUoKSkgewotICAgICAgICAgICAgICAgICAgICBvd25lZE5vZGVJ
ZHMgPSBKU09OOjpBcnJheU9mPGludD46OmNyZWF0ZSgpOwotICAgICAgICAgICAgICAgICAgICBm
b3IgKEVsZW1lbnQqIG93bmVkRWxlbWVudCA6IG93bmVkRWxlbWVudHMpCi0gICAgICAgICAgICAg
ICAgICAgICAgICBvd25lZE5vZGVJZHMtPmFkZEl0ZW0ocHVzaE5vZGVQYXRoVG9Gcm9udGVuZChv
d25lZEVsZW1lbnQpKTsKKyAgICAgICAgICAgICAgICAgICAgb3duZWROb2RlSWRzID0gSlNPTjo6
QXJyYXlPZjxQcm90b2NvbDo6RE9NOjpOb2RlSWQ+OjpjcmVhdGUoKTsKKyAgICAgICAgICAgICAg
ICAgICAgZm9yIChFbGVtZW50KiBvd25lZEVsZW1lbnQgOiBvd25lZEVsZW1lbnRzKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoYXV0byBvd25lZEVsZW1lbnRJZCA9IHB1c2hOb2RlUGF0
aFRvRnJvbnRlbmQob3duZWRFbGVtZW50KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBv
d25lZE5vZGVJZHMtPmFkZEl0ZW0ob3duZWRFbGVtZW50SWQpOworICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCkBAIC0yMDgzLDEwICsyMTU0
LDEyIEBAIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9w
ZXJ0aWVzPiBJbnNwZWN0b3JET01BZ2VudDo6YnVpCiAgICAgICAgICAgICBBWENvcmVPYmplY3Q6
OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBzZWxlY3RlZENoaWxkcmVuOwogICAgICAgICAg
ICAgYXhPYmplY3QtPnNlbGVjdGVkQ2hpbGRyZW4oc2VsZWN0ZWRDaGlsZHJlbik7CiAgICAgICAg
ICAgICBpZiAoc2VsZWN0ZWRDaGlsZHJlbi5zaXplKCkpIHsKLSAgICAgICAgICAgICAgICBzZWxl
Y3RlZENoaWxkTm9kZUlkcyA9IEpTT046OkFycmF5T2Y8aW50Pjo6Y3JlYXRlKCk7CisgICAgICAg
ICAgICAgICAgc2VsZWN0ZWRDaGlsZE5vZGVJZHMgPSBKU09OOjpBcnJheU9mPFByb3RvY29sOjpE
T006Ok5vZGVJZD46OmNyZWF0ZSgpOwogICAgICAgICAgICAgICAgIGZvciAoYXV0byYgc2VsZWN0
ZWRDaGlsZE9iamVjdCA6IHNlbGVjdGVkQ2hpbGRyZW4pIHsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKE5vZGUqIHNlbGVjdGVkQ2hpbGROb2RlID0gc2VsZWN0ZWRDaGlsZE9iamVjdC0+bm9kZSgp
KQotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRDaGlsZE5vZGVJZHMtPmFkZEl0ZW0o
cHVzaE5vZGVQYXRoVG9Gcm9udGVuZChzZWxlY3RlZENoaWxkTm9kZSkpOworICAgICAgICAgICAg
ICAgICAgICBpZiAoTm9kZSogc2VsZWN0ZWRDaGlsZE5vZGUgPSBzZWxlY3RlZENoaWxkT2JqZWN0
LT5ub2RlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhdXRvIHNlbGVjdGVkQ2hp
bGROb2RlSWQgPSBwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKHNlbGVjdGVkQ2hpbGROb2RlKSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZENoaWxkTm9kZUlkcy0+YWRkSXRlbShz
ZWxlY3RlZENoaWxkTm9kZUlkKTsKKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAtMjA5OCw1NCArMjE3MSw2MCBA
QCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGll
cz4gSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aQogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIFJl
ZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzPiB2YWx1
ZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6OmNy
ZWF0ZSgpCisgICAgUmVmPFByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzPiB2
YWx1ZSA9IFByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpjcmVhdGUoKQog
ICAgICAgICAuc2V0RXhpc3RzKGV4aXN0cykKICAgICAgICAgLnNldExhYmVsKGxhYmVsKQogICAg
ICAgICAuc2V0Um9sZShyb2xlKQotICAgICAgICAuc2V0Tm9kZUlkKHB1c2hOb2RlUGF0aFRvRnJv
bnRlbmQobm9kZSkpCisgICAgICAgIC5zZXROb2RlSWQocHVzaE5vZGVQYXRoVG9Gcm9udGVuZCgm
bm9kZSkpCiAgICAgICAgIC5yZWxlYXNlKCk7CiAKICAgICBpZiAoZXhpc3RzKSB7Ci0gICAgICAg
IGlmIChhY3RpdmVEZXNjZW5kYW50Tm9kZSkKLSAgICAgICAgICAgIHZhbHVlLT5zZXRBY3RpdmVE
ZXNjZW5kYW50Tm9kZUlkKHB1c2hOb2RlUGF0aFRvRnJvbnRlbmQoYWN0aXZlRGVzY2VuZGFudE5v
ZGUpKTsKKyAgICAgICAgaWYgKGFjdGl2ZURlc2NlbmRhbnROb2RlKSB7CisgICAgICAgICAgICBp
ZiAoYXV0byBhY3RpdmVEZXNjZW5kYW50Tm9kZUlkID0gcHVzaE5vZGVQYXRoVG9Gcm9udGVuZChh
Y3RpdmVEZXNjZW5kYW50Tm9kZSkpCisgICAgICAgICAgICAgICAgdmFsdWUtPnNldEFjdGl2ZURl
c2NlbmRhbnROb2RlSWQoYWN0aXZlRGVzY2VuZGFudE5vZGVJZCk7CisgICAgICAgIH0KICAgICAg
ICAgaWYgKGJ1c3kpCiAgICAgICAgICAgICB2YWx1ZS0+c2V0QnVzeShidXN5KTsKICAgICAgICAg
aWYgKHN1cHBvcnRzQ2hlY2tlZCkKICAgICAgICAgICAgIHZhbHVlLT5zZXRDaGVja2VkKGNoZWNr
ZWQpOwogICAgICAgICBpZiAoY2hpbGROb2RlSWRzKQotICAgICAgICAgICAgdmFsdWUtPnNldENo
aWxkTm9kZUlkcyhjaGlsZE5vZGVJZHMpOworICAgICAgICAgICAgdmFsdWUtPnNldENoaWxkTm9k
ZUlkcyhjaGlsZE5vZGVJZHMucmVsZWFzZU5vbk51bGwoKSk7CiAgICAgICAgIGlmIChjb250cm9s
bGVkTm9kZUlkcykKLSAgICAgICAgICAgIHZhbHVlLT5zZXRDb250cm9sbGVkTm9kZUlkcyhjb250
cm9sbGVkTm9kZUlkcyk7Ci0gICAgICAgIGlmIChjdXJyZW50U3RhdGUgIT0gSW5zcGVjdG9yOjpQ
cm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6Q3VycmVudDo6RmFsc2UpCisg
ICAgICAgICAgICB2YWx1ZS0+c2V0Q29udHJvbGxlZE5vZGVJZHMoY29udHJvbGxlZE5vZGVJZHMu
cmVsZWFzZU5vbk51bGwoKSk7CisgICAgICAgIGlmIChjdXJyZW50U3RhdGUgIT0gUHJvdG9jb2w6
OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6OkN1cnJlbnQ6OkZhbHNlKQogICAgICAgICAg
ICAgdmFsdWUtPnNldEN1cnJlbnQoY3VycmVudFN0YXRlKTsKICAgICAgICAgaWYgKGRpc2FibGVk
KQogICAgICAgICAgICAgdmFsdWUtPnNldERpc2FibGVkKGRpc2FibGVkKTsKICAgICAgICAgaWYg
KHN1cHBvcnRzRXhwYW5kZWQpCiAgICAgICAgICAgICB2YWx1ZS0+c2V0RXhwYW5kZWQoZXhwYW5k
ZWQpOwogICAgICAgICBpZiAoZmxvd2VkTm9kZUlkcykKLSAgICAgICAgICAgIHZhbHVlLT5zZXRG
bG93ZWROb2RlSWRzKGZsb3dlZE5vZGVJZHMpOworICAgICAgICAgICAgdmFsdWUtPnNldEZsb3dl
ZE5vZGVJZHMoZmxvd2VkTm9kZUlkcy5yZWxlYXNlTm9uTnVsbCgpKTsKICAgICAgICAgaWYgKHN1
cHBvcnRzRm9jdXNlZCkKICAgICAgICAgICAgIHZhbHVlLT5zZXRGb2N1c2VkKGZvY3VzZWQpOwog
ICAgICAgICBpZiAoaWdub3JlZCkKICAgICAgICAgICAgIHZhbHVlLT5zZXRJZ25vcmVkKGlnbm9y
ZWQpOwogICAgICAgICBpZiAoaWdub3JlZEJ5RGVmYXVsdCkKICAgICAgICAgICAgIHZhbHVlLT5z
ZXRJZ25vcmVkQnlEZWZhdWx0KGlnbm9yZWRCeURlZmF1bHQpOwotICAgICAgICBpZiAoaW52YWxp
ZCAhPSBJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpJ
bnZhbGlkOjpGYWxzZSkKKyAgICAgICAgaWYgKGludmFsaWQgIT0gUHJvdG9jb2w6OkRPTTo6QWNj
ZXNzaWJpbGl0eVByb3BlcnRpZXM6OkludmFsaWQ6OkZhbHNlKQogICAgICAgICAgICAgdmFsdWUt
PnNldEludmFsaWQoaW52YWxpZCk7CiAgICAgICAgIGlmIChoaWRkZW4pCiAgICAgICAgICAgICB2
YWx1ZS0+c2V0SGlkZGVuKGhpZGRlbik7CiAgICAgICAgIGlmIChzdXBwb3J0c0xpdmVSZWdpb24p
IHsKICAgICAgICAgICAgIHZhbHVlLT5zZXRMaXZlUmVnaW9uQXRvbWljKGxpdmVSZWdpb25BdG9t
aWMpOwogICAgICAgICAgICAgaWYgKGxpdmVSZWdpb25SZWxldmFudC0+bGVuZ3RoKCkpCi0gICAg
ICAgICAgICAgICAgdmFsdWUtPnNldExpdmVSZWdpb25SZWxldmFudChsaXZlUmVnaW9uUmVsZXZh
bnQpOworICAgICAgICAgICAgICAgIHZhbHVlLT5zZXRMaXZlUmVnaW9uUmVsZXZhbnQobGl2ZVJl
Z2lvblJlbGV2YW50LnJlbGVhc2VOb25OdWxsKCkpOwogICAgICAgICAgICAgdmFsdWUtPnNldExp
dmVSZWdpb25TdGF0dXMobGl2ZVJlZ2lvblN0YXR1cyk7CiAgICAgICAgIH0KLSAgICAgICAgaWYg
KG1vdXNlRXZlbnROb2RlKQotICAgICAgICAgICAgdmFsdWUtPnNldE1vdXNlRXZlbnROb2RlSWQo
cHVzaE5vZGVQYXRoVG9Gcm9udGVuZChtb3VzZUV2ZW50Tm9kZSkpOworICAgICAgICBpZiAobW91
c2VFdmVudE5vZGUpIHsKKyAgICAgICAgICAgIGlmIChhdXRvIG1vdXNlRXZlbnROb2RlSWQgPSBw
dXNoTm9kZVBhdGhUb0Zyb250ZW5kKG1vdXNlRXZlbnROb2RlKSkKKyAgICAgICAgICAgICAgICB2
YWx1ZS0+c2V0TW91c2VFdmVudE5vZGVJZChtb3VzZUV2ZW50Tm9kZUlkKTsKKyAgICAgICAgfQog
ICAgICAgICBpZiAob3duZWROb2RlSWRzKQotICAgICAgICAgICAgdmFsdWUtPnNldE93bmVkTm9k
ZUlkcyhvd25lZE5vZGVJZHMpOwotICAgICAgICBpZiAocGFyZW50Tm9kZSkKLSAgICAgICAgICAg
IHZhbHVlLT5zZXRQYXJlbnROb2RlSWQocHVzaE5vZGVQYXRoVG9Gcm9udGVuZChwYXJlbnROb2Rl
KSk7CisgICAgICAgICAgICB2YWx1ZS0+c2V0T3duZWROb2RlSWRzKG93bmVkTm9kZUlkcy5yZWxl
YXNlTm9uTnVsbCgpKTsKKyAgICAgICAgaWYgKHBhcmVudE5vZGUpIHsKKyAgICAgICAgICAgIGlm
IChhdXRvIHBhcmVudE5vZGVJZCA9IHB1c2hOb2RlUGF0aFRvRnJvbnRlbmQocGFyZW50Tm9kZSkp
CisgICAgICAgICAgICAgICAgdmFsdWUtPnNldFBhcmVudE5vZGVJZChwYXJlbnROb2RlSWQpOwor
ICAgICAgICB9CiAgICAgICAgIGlmIChzdXBwb3J0c1ByZXNzZWQpCiAgICAgICAgICAgICB2YWx1
ZS0+c2V0UHJlc3NlZChwcmVzc2VkKTsKICAgICAgICAgaWYgKHJlYWRvbmx5KQpAQCAtMjE1NSw3
ICsyMjM0LDcgQEAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0
eVByb3BlcnRpZXM+IEluc3BlY3RvckRPTUFnZW50OjpidWkKICAgICAgICAgaWYgKHNlbGVjdGVk
KQogICAgICAgICAgICAgdmFsdWUtPnNldFNlbGVjdGVkKHNlbGVjdGVkKTsKICAgICAgICAgaWYg
KHNlbGVjdGVkQ2hpbGROb2RlSWRzKQotICAgICAgICAgICAgdmFsdWUtPnNldFNlbGVjdGVkQ2hp
bGROb2RlSWRzKHNlbGVjdGVkQ2hpbGROb2RlSWRzKTsKKyAgICAgICAgICAgIHZhbHVlLT5zZXRT
ZWxlY3RlZENoaWxkTm9kZUlkcyhzZWxlY3RlZENoaWxkTm9kZUlkcy5yZWxlYXNlTm9uTnVsbCgp
KTsKICAgICAgICAgCiAgICAgICAgIC8vIEgxIC0tIEg2IGFsd2F5cyBoYXZlIGEgaGVhZGluZ0xl
dmVsIHByb3BlcnR5IHRoYXQgY2FuIGJlIGNvbXBsaW1lbnRlZCBieSBhIGhpZXJhcmNoaWNhbExl
dmVsCiAgICAgICAgIC8vIHByb3BlcnR5IHdoZW4gYXJpYS1sZXZlbCBpcyBzZXQgb24gdGhlIGVs
ZW1lbnQsIGluIHdoaWNoIGNhc2Ugd2Ugd2FudCB0byByZW1haW4gY2FsbGluZwpAQCAtMjIzNSwy
MiArMjMxNCwyMiBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpkaWRDb21taXRMb2FkKERvY3Vt
ZW50KiBkb2N1bWVudCkKICAgICBpZiAoIWZyYW1lT3duZXIpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIGludCBmcmFtZU93bmVySWQgPSBtX2RvY3VtZW50Tm9kZVRvSWRNYXAuZ2V0KGZyYW1lT3du
ZXIpOworICAgIGF1dG8gZnJhbWVPd25lcklkID0gbV9kb2N1bWVudE5vZGVUb0lkTWFwLmdldChm
cmFtZU93bmVyKTsKICAgICBpZiAoIWZyYW1lT3duZXJJZCkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgLy8gUmUtYWRkIGZyYW1lIG93bmVyIGVsZW1lbnQgdG9nZXRoZXIgd2l0aCBpdHMgbmV3IGNo
aWxkcmVuLgotICAgIGludCBwYXJlbnRJZCA9IG1fZG9jdW1lbnROb2RlVG9JZE1hcC5nZXQoaW5u
ZXJQYXJlbnROb2RlKGZyYW1lT3duZXIuZ2V0KCkpKTsKKyAgICBhdXRvIHBhcmVudElkID0gbV9k
b2N1bWVudE5vZGVUb0lkTWFwLmdldChpbm5lclBhcmVudE5vZGUoZnJhbWVPd25lci5nZXQoKSkp
OwogICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5jaGlsZE5vZGVSZW1vdmVkKHBhcmVudElkLCBm
cmFtZU93bmVySWQpOwogICAgIHVuYmluZChmcmFtZU93bmVyLmdldCgpLCAmbV9kb2N1bWVudE5v
ZGVUb0lkTWFwKTsKIAotICAgIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+IHZh
bHVlID0gYnVpbGRPYmplY3RGb3JOb2RlKGZyYW1lT3duZXIuZ2V0KCksIDAsICZtX2RvY3VtZW50
Tm9kZVRvSWRNYXApOworICAgIFJlZjxQcm90b2NvbDo6RE9NOjpOb2RlPiB2YWx1ZSA9IGJ1aWxk
T2JqZWN0Rm9yTm9kZShmcmFtZU93bmVyLmdldCgpLCAwLCAmbV9kb2N1bWVudE5vZGVUb0lkTWFw
KTsKICAgICBOb2RlKiBwcmV2aW91c1NpYmxpbmcgPSBpbm5lclByZXZpb3VzU2libGluZyhmcmFt
ZU93bmVyLmdldCgpKTsKLSAgICBpbnQgcHJldklkID0gcHJldmlvdXNTaWJsaW5nID8gbV9kb2N1
bWVudE5vZGVUb0lkTWFwLmdldChwcmV2aW91c1NpYmxpbmcpIDogMDsKKyAgICBhdXRvIHByZXZJ
ZCA9IHByZXZpb3VzU2libGluZyA/IG1fZG9jdW1lbnROb2RlVG9JZE1hcC5nZXQocHJldmlvdXNT
aWJsaW5nKSA6IDA7CiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPmNoaWxkTm9kZUluc2VydGVk
KHBhcmVudElkLCBwcmV2SWQsIFdURk1vdmUodmFsdWUpKTsKIH0KIAotaW50IEluc3BlY3RvckRP
TUFnZW50OjppZGVudGlmaWVyRm9yTm9kZShOb2RlJiBub2RlKQorUHJvdG9jb2w6OkRPTTo6Tm9k
ZUlkIEluc3BlY3RvckRPTUFnZW50OjppZGVudGlmaWVyRm9yTm9kZShOb2RlJiBub2RlKQogewog
ICAgIHJldHVybiBwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKCZub2RlKTsKIH0KQEAgLTIzMDcsNyAr
MjM4Niw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmRpZEluc2VydERPTU5vZGUoTm9kZSYg
bm9kZSkKICAgICBpZiAoIXBhcmVudCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaW50IHBhcmVu
dElkID0gbV9kb2N1bWVudE5vZGVUb0lkTWFwLmdldChwYXJlbnQpOworICAgIGF1dG8gcGFyZW50
SWQgPSBtX2RvY3VtZW50Tm9kZVRvSWRNYXAuZ2V0KHBhcmVudCk7CiAgICAgLy8gUmV0dXJuIGlm
IHBhcmVudCBpcyBub3QgbWFwcGVkIHlldC4KICAgICBpZiAoIXBhcmVudElkKQogICAgICAgICBy
ZXR1cm47CkBAIC0yMzE4LDggKzIzOTcsOCBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpkaWRJ
bnNlcnRET01Ob2RlKE5vZGUmIG5vZGUpCiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gQ2hpbGRy
ZW4gaGF2ZSBiZWVuIHJlcXVlc3RlZCAtPiByZXR1cm4gdmFsdWUgb2YgYSBuZXcgY2hpbGQuCiAg
ICAgICAgIE5vZGUqIHByZXZTaWJsaW5nID0gaW5uZXJQcmV2aW91c1NpYmxpbmcoJm5vZGUpOwot
ICAgICAgICBpbnQgcHJldklkID0gcHJldlNpYmxpbmcgPyBtX2RvY3VtZW50Tm9kZVRvSWRNYXAu
Z2V0KHByZXZTaWJsaW5nKSA6IDA7Ci0gICAgICAgIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpE
T006Ok5vZGU+IHZhbHVlID0gYnVpbGRPYmplY3RGb3JOb2RlKCZub2RlLCAwLCAmbV9kb2N1bWVu
dE5vZGVUb0lkTWFwKTsKKyAgICAgICAgYXV0byBwcmV2SWQgPSBwcmV2U2libGluZyA/IG1fZG9j
dW1lbnROb2RlVG9JZE1hcC5nZXQocHJldlNpYmxpbmcpIDogMDsKKyAgICAgICAgUmVmPFByb3Rv
Y29sOjpET006Ok5vZGU+IHZhbHVlID0gYnVpbGRPYmplY3RGb3JOb2RlKCZub2RlLCAwLCAmbV9k
b2N1bWVudE5vZGVUb0lkTWFwKTsKICAgICAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPmNoaWxk
Tm9kZUluc2VydGVkKHBhcmVudElkLCBwcmV2SWQsIFdURk1vdmUodmFsdWUpKTsKICAgICB9CiB9
CkBAIC0yMzM1LDcgKzI0MTQsNyBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpkaWRSZW1vdmVE
T01Ob2RlKE5vZGUmIG5vZGUpCiAgICAgaWYgKCFtX2RvY3VtZW50Tm9kZVRvSWRNYXAuY29udGFp
bnMocGFyZW50KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaW50IHBhcmVudElkID0gbV9kb2N1
bWVudE5vZGVUb0lkTWFwLmdldChwYXJlbnQpOworICAgIGF1dG8gcGFyZW50SWQgPSBtX2RvY3Vt
ZW50Tm9kZVRvSWRNYXAuZ2V0KHBhcmVudCk7CiAKICAgICBpZiAoIW1fY2hpbGRyZW5SZXF1ZXN0
ZWQuY29udGFpbnMocGFyZW50SWQpKSB7CiAgICAgICAgIC8vIE5vIGNoaWxkcmVuIGFyZSBtYXBw
ZWQgeWV0IC0+IG9ubHkgbm90aWZ5IG9uIGNoYW5nZXMgb2YgaGFzQ2hpbGRyZW4uCkBAIC0yMzU4
LDcgKzI0MzcsNyBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpkaWRNb2RpZnlET01BdHRyKEVs
ZW1lbnQmIGVsZW1lbnQsIGNvbnN0IEF0b21TdHJpbmcmIG5hbQogICAgIGlmIChzaG91bGRTdXBw
cmVzc0V2ZW50KQogICAgICAgICByZXR1cm47CiAKLSAgICBpbnQgaWQgPSBib3VuZE5vZGVJZCgm
ZWxlbWVudCk7CisgICAgYXV0byBpZCA9IGJvdW5kTm9kZUlkKCZlbGVtZW50KTsKICAgICBpZiAo
IWlkKQogICAgICAgICByZXR1cm47CiAKQEAgLTIzNzAsNyArMjQ0OSw3IEBAIHZvaWQgSW5zcGVj
dG9yRE9NQWdlbnQ6OmRpZE1vZGlmeURPTUF0dHIoRWxlbWVudCYgZWxlbWVudCwgY29uc3QgQXRv
bVN0cmluZyYgbmFtCiAKIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmRpZFJlbW92ZURPTUF0dHIo
RWxlbWVudCYgZWxlbWVudCwgY29uc3QgQXRvbVN0cmluZyYgbmFtZSkKIHsKLSAgICBpbnQgaWQg
PSBib3VuZE5vZGVJZCgmZWxlbWVudCk7CisgICAgYXV0byBpZCA9IGJvdW5kTm9kZUlkKCZlbGVt
ZW50KTsKICAgICBpZiAoIWlkKQogICAgICAgICByZXR1cm47CiAKQEAgLTIzODIsOSArMjQ2MSw5
IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmRpZFJlbW92ZURPTUF0dHIoRWxlbWVudCYgZWxl
bWVudCwgY29uc3QgQXRvbVN0cmluZyYgbmFtCiAKIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnN0
eWxlQXR0cmlidXRlSW52YWxpZGF0ZWQoY29uc3QgVmVjdG9yPEVsZW1lbnQqPiYgZWxlbWVudHMp
CiB7Ci0gICAgYXV0byBub2RlSWRzID0gSlNPTjo6QXJyYXlPZjxpbnQ+OjpjcmVhdGUoKTsKKyAg
ICBhdXRvIG5vZGVJZHMgPSBKU09OOjpBcnJheU9mPFByb3RvY29sOjpET006Ok5vZGVJZD46OmNy
ZWF0ZSgpOwogICAgIGZvciAoYXV0byYgZWxlbWVudCA6IGVsZW1lbnRzKSB7Ci0gICAgICAgIGlu
dCBpZCA9IGJvdW5kTm9kZUlkKGVsZW1lbnQpOworICAgICAgICBhdXRvIGlkID0gYm91bmROb2Rl
SWQoZWxlbWVudCk7CiAgICAgICAgIGlmICghaWQpCiAgICAgICAgICAgICBjb250aW51ZTsKIApA
QCAtMjM5OCw3ICsyNDc3LDcgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c3R5bGVBdHRyaWJ1
dGVJbnZhbGlkYXRlZChjb25zdCBWZWN0b3I8RWxlbWVudCo+JiBlbGVtZW4KIAogdm9pZCBJbnNw
ZWN0b3JET01BZ2VudDo6Y2hhcmFjdGVyRGF0YU1vZGlmaWVkKENoYXJhY3RlckRhdGEmIGNoYXJh
Y3RlckRhdGEpCiB7Ci0gICAgaW50IGlkID0gbV9kb2N1bWVudE5vZGVUb0lkTWFwLmdldCgmY2hh
cmFjdGVyRGF0YSk7CisgICAgYXV0byBpZCA9IG1fZG9jdW1lbnROb2RlVG9JZE1hcC5nZXQoJmNo
YXJhY3RlckRhdGEpOwogICAgIGlmICghaWQpIHsKICAgICAgICAgLy8gUHVzaCB0ZXh0IG5vZGUg
aWYgaXQgaXMgYmVpbmcgY3JlYXRlZC4KICAgICAgICAgZGlkSW5zZXJ0RE9NTm9kZShjaGFyYWN0
ZXJEYXRhKTsKQEAgLTI0MDksNyArMjQ4OCw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmNo
YXJhY3RlckRhdGFNb2RpZmllZChDaGFyYWN0ZXJEYXRhJiBjaGFyYWN0ZXJEYXRhKQogCiB2b2lk
IEluc3BlY3RvckRPTUFnZW50OjpkaWRJbnZhbGlkYXRlU3R5bGVBdHRyKEVsZW1lbnQmIGVsZW1l
bnQpCiB7Ci0gICAgaW50IGlkID0gbV9kb2N1bWVudE5vZGVUb0lkTWFwLmdldCgmZWxlbWVudCk7
CisgICAgYXV0byBpZCA9IG1fZG9jdW1lbnROb2RlVG9JZE1hcC5nZXQoJmVsZW1lbnQpOwogICAg
IGlmICghaWQpCiAgICAgICAgIHJldHVybjsKIApAQCAtMjQyMCwyMiArMjQ5OSwyMiBAQCB2b2lk
IEluc3BlY3RvckRPTUFnZW50OjpkaWRJbnZhbGlkYXRlU3R5bGVBdHRyKEVsZW1lbnQmIGVsZW1l
bnQpCiAKIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmRpZFB1c2hTaGFkb3dSb290KEVsZW1lbnQm
IGhvc3QsIFNoYWRvd1Jvb3QmIHJvb3QpCiB7Ci0gICAgaW50IGhvc3RJZCA9IG1fZG9jdW1lbnRO
b2RlVG9JZE1hcC5nZXQoJmhvc3QpOworICAgIGF1dG8gaG9zdElkID0gbV9kb2N1bWVudE5vZGVU
b0lkTWFwLmdldCgmaG9zdCk7CiAgICAgaWYgKGhvc3RJZCkKICAgICAgICAgbV9mcm9udGVuZERp
c3BhdGNoZXItPnNoYWRvd1Jvb3RQdXNoZWQoaG9zdElkLCBidWlsZE9iamVjdEZvck5vZGUoJnJv
b3QsIDAsICZtX2RvY3VtZW50Tm9kZVRvSWRNYXApKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JET01B
Z2VudDo6d2lsbFBvcFNoYWRvd1Jvb3QoRWxlbWVudCYgaG9zdCwgU2hhZG93Um9vdCYgcm9vdCkK
IHsKLSAgICBpbnQgaG9zdElkID0gbV9kb2N1bWVudE5vZGVUb0lkTWFwLmdldCgmaG9zdCk7Ci0g
ICAgaW50IHJvb3RJZCA9IG1fZG9jdW1lbnROb2RlVG9JZE1hcC5nZXQoJnJvb3QpOworICAgIGF1
dG8gaG9zdElkID0gbV9kb2N1bWVudE5vZGVUb0lkTWFwLmdldCgmaG9zdCk7CisgICAgYXV0byBy
b290SWQgPSBtX2RvY3VtZW50Tm9kZVRvSWRNYXAuZ2V0KCZyb290KTsKICAgICBpZiAoaG9zdElk
ICYmIHJvb3RJZCkKICAgICAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPnNoYWRvd1Jvb3RQb3Bw
ZWQoaG9zdElkLCByb290SWQpOwogfQogCiB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpkaWRDaGFu
Z2VDdXN0b21FbGVtZW50U3RhdGUoRWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICBpbnQgZWxlbWVu
dElkID0gbV9kb2N1bWVudE5vZGVUb0lkTWFwLmdldCgmZWxlbWVudCk7CisgICAgYXV0byBlbGVt
ZW50SWQgPSBtX2RvY3VtZW50Tm9kZVRvSWRNYXAuZ2V0KCZlbGVtZW50KTsKICAgICBpZiAoIWVs
ZW1lbnRJZCkKICAgICAgICAgcmV0dXJuOwogCkBAIC0yNDYyLDcgKzI1NDEsNyBAQCB2b2lkIElu
c3BlY3RvckRPTUFnZW50Ojpwc2V1ZG9FbGVtZW50Q3JlYXRlZChQc2V1ZG9FbGVtZW50JiBwc2V1
ZG9FbGVtZW50KQogICAgIGlmICghcGFyZW50KQogICAgICAgICByZXR1cm47CiAKLSAgICBpbnQg
cGFyZW50SWQgPSBtX2RvY3VtZW50Tm9kZVRvSWRNYXAuZ2V0KHBhcmVudCk7CisgICAgYXV0byBw
YXJlbnRJZCA9IG1fZG9jdW1lbnROb2RlVG9JZE1hcC5nZXQocGFyZW50KTsKICAgICBpZiAoIXBh
cmVudElkKQogICAgICAgICByZXR1cm47CiAKQEAgLTI0NzIsMTQgKzI1NTEsMTQgQEAgdm9pZCBJ
bnNwZWN0b3JET01BZ2VudDo6cHNldWRvRWxlbWVudENyZWF0ZWQoUHNldWRvRWxlbWVudCYgcHNl
dWRvRWxlbWVudCkKIAogdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6cHNldWRvRWxlbWVudERlc3Ry
b3llZChQc2V1ZG9FbGVtZW50JiBwc2V1ZG9FbGVtZW50KQogewotICAgIGludCBwc2V1ZG9FbGVt
ZW50SWQgPSBtX2RvY3VtZW50Tm9kZVRvSWRNYXAuZ2V0KCZwc2V1ZG9FbGVtZW50KTsKKyAgICBh
dXRvIHBzZXVkb0VsZW1lbnRJZCA9IG1fZG9jdW1lbnROb2RlVG9JZE1hcC5nZXQoJnBzZXVkb0Vs
ZW1lbnQpOwogICAgIGlmICghcHNldWRvRWxlbWVudElkKQogICAgICAgICByZXR1cm47CiAKICAg
ICAvLyBJZiBhIFBzZXVkb0VsZW1lbnQgaXMgYm91bmQsIGl0cyBwYXJlbnQgZWxlbWVudCBtdXN0
IGhhdmUgYmVlbiBib3VuZC4KICAgICBFbGVtZW50KiBwYXJlbnQgPSBwc2V1ZG9FbGVtZW50Lmhv
c3RFbGVtZW50KCk7CiAgICAgQVNTRVJUKHBhcmVudCk7Ci0gICAgaW50IHBhcmVudElkID0gbV9k
b2N1bWVudE5vZGVUb0lkTWFwLmdldChwYXJlbnQpOworICAgIGF1dG8gcGFyZW50SWQgPSBtX2Rv
Y3VtZW50Tm9kZVRvSWRNYXAuZ2V0KHBhcmVudCk7CiAgICAgQVNTRVJUKHBhcmVudElkKTsKIAog
ICAgIHVuYmluZCgmcHNldWRvRWxlbWVudCwgJm1fZG9jdW1lbnROb2RlVG9JZE1hcCk7CkBAIC0y
NDk1LDcgKzI1NzQsNyBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpkaWRBZGRFdmVudExpc3Rl
bmVyKEV2ZW50VGFyZ2V0JiB0YXJnZXQpCiAgICAgaWYgKCFub2RlLmNvbnRhaW5zKG1faW5zcGVj
dGVkTm9kZS5nZXQoKSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGludCBub2RlSWQgPSBib3Vu
ZE5vZGVJZCgmbm9kZSk7CisgICAgYXV0byBub2RlSWQgPSBib3VuZE5vZGVJZCgmbm9kZSk7CiAg
ICAgaWYgKCFub2RlSWQpCiAgICAgICAgIHJldHVybjsKIApAQCAtMjUxNiw3ICsyNTk1LDcgQEAg
dm9pZCBJbnNwZWN0b3JET01BZ2VudDo6d2lsbFJlbW92ZUV2ZW50TGlzdGVuZXIoRXZlbnRUYXJn
ZXQmIHRhcmdldCwgY29uc3QgQXRvbVMKICAgICBpZiAoIW5vZGUuY29udGFpbnMobV9pbnNwZWN0
ZWROb2RlLmdldCgpKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaW50IG5vZGVJZCA9IGJvdW5k
Tm9kZUlkKCZub2RlKTsKKyAgICBhdXRvIG5vZGVJZCA9IGJvdW5kTm9kZUlkKCZub2RlKTsKICAg
ICBpZiAoIW5vZGVJZCkKICAgICAgICAgcmV0dXJuOwogCkBAIC0yNTY2LDcgKzI2NDUsNyBAQCBS
ZWZQdHI8SlNDOjpCcmVha3BvaW50PiBJbnNwZWN0b3JET01BZ2VudDo6YnJlYWtwb2ludEZvckV2
ZW50TGlzdGVuZXIoRXZlbnRUYXJnZQogICAgIHJldHVybiBudWxscHRyOwogfQogCi1pbnQgSW5z
cGVjdG9yRE9NQWdlbnQ6OmlkRm9yRXZlbnRMaXN0ZW5lcihFdmVudFRhcmdldCYgdGFyZ2V0LCBj
b25zdCBBdG9tU3RyaW5nJiBldmVudFR5cGUsIEV2ZW50TGlzdGVuZXImIGxpc3RlbmVyLCBib29s
IGNhcHR1cmUpCitQcm90b2NvbDo6RE9NOjpFdmVudExpc3RlbmVySWQgSW5zcGVjdG9yRE9NQWdl
bnQ6OmlkRm9yRXZlbnRMaXN0ZW5lcihFdmVudFRhcmdldCYgdGFyZ2V0LCBjb25zdCBBdG9tU3Ry
aW5nJiBldmVudFR5cGUsIEV2ZW50TGlzdGVuZXImIGxpc3RlbmVyLCBib29sIGNhcHR1cmUpCiB7
CiAgICAgZm9yIChhdXRvJiBpbnNwZWN0b3JFdmVudExpc3RlbmVyIDogbV9ldmVudExpc3RlbmVy
RW50cmllcy52YWx1ZXMoKSkgewogICAgICAgICBpZiAoaW5zcGVjdG9yRXZlbnRMaXN0ZW5lci5t
YXRjaGVzKHRhcmdldCwgZXZlbnRUeXBlLCBsaXN0ZW5lciwgY2FwdHVyZSkpCkBAIC0yNjA0LDgg
KzI2ODMsNyBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjptZWRpYU1ldHJpY3NUaW1lckZpcmVk
KCkKICAgICAgICAgaWYgKGl0ZXJhdG9yLT52YWx1ZS5pc1Bvd2VyRWZmaWNpZW50ICE9IGlzUG93
ZXJFZmZpY2llbnQpIHsKICAgICAgICAgICAgIGl0ZXJhdG9yLT52YWx1ZS5pc1Bvd2VyRWZmaWNp
ZW50ID0gaXNQb3dlckVmZmljaWVudDsKIAotICAgICAgICAgICAgaW50IG5vZGVJZCA9IHB1c2hO
b2RlUGF0aFRvRnJvbnRlbmQobWVkaWFFbGVtZW50KTsKLSAgICAgICAgICAgIGlmIChub2RlSWQp
IHsKKyAgICAgICAgICAgIGlmIChhdXRvIG5vZGVJZCA9IHB1c2hOb2RlUGF0aFRvRnJvbnRlbmQo
bWVkaWFFbGVtZW50KSkgewogICAgICAgICAgICAgICAgIGF1dG8gdGltZXN0YW1wID0gbV9lbnZp
cm9ubWVudC5leGVjdXRpb25TdG9wd2F0Y2goKS5lbGFwc2VkVGltZSgpLnNlY29uZHMoKTsKICAg
ICAgICAgICAgICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+cG93ZXJFZmZpY2llbnRQbGF5YmFj
a1N0YXRlQ2hhbmdlZChub2RlSWQsIHRpbWVzdGFtcCwgaXRlcmF0b3ItPnZhbHVlLmlzUG93ZXJF
ZmZpY2llbnQpOwogICAgICAgICAgICAgfQpAQCAtMjY1OSw3ICsyNzM3LDcgQEAgTm9kZSogSW5z
cGVjdG9yRE9NQWdlbnQ6Om5vZGVGb3JQYXRoKGNvbnN0IFN0cmluZyYgcGF0aCkKICAgICByZXR1
cm4gbm9kZTsKIH0KIAotTm9kZSogSW5zcGVjdG9yRE9NQWdlbnQ6Om5vZGVGb3JPYmplY3RJZChj
b25zdCBTdHJpbmcmIG9iamVjdElkKQorTm9kZSogSW5zcGVjdG9yRE9NQWdlbnQ6Om5vZGVGb3JP
YmplY3RJZChjb25zdCBQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0SWQmIG9iamVjdElk
KQogewogICAgIEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0ID0gbV9pbmplY3RlZFNjcmlw
dE1hbmFnZXIuaW5qZWN0ZWRTY3JpcHRGb3JPYmplY3RJZChvYmplY3RJZCk7CiAgICAgaWYgKGlu
amVjdGVkU2NyaXB0Lmhhc05vVmFsdWUoKSkKQEAgLTI2NjgsMTUgKzI3NDYsMjAgQEAgTm9kZSog
SW5zcGVjdG9yRE9NQWdlbnQ6Om5vZGVGb3JPYmplY3RJZChjb25zdCBTdHJpbmcmIG9iamVjdElk
KQogICAgIHJldHVybiBzY3JpcHRWYWx1ZUFzTm9kZShpbmplY3RlZFNjcmlwdC5maW5kT2JqZWN0
QnlJZChvYmplY3RJZCkpOwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpwdXNoTm9kZUJ5
UGF0aFRvRnJvbnRlbmQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHBh
dGgsIGludCogbm9kZUlkKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UHJvdG9jb2w6OkRPTTo6
Tm9kZUlkPiBJbnNwZWN0b3JET01BZ2VudDo6cHVzaE5vZGVCeVBhdGhUb0Zyb250ZW5kKGNvbnN0
IFN0cmluZyYgcGF0aCkKIHsKLSAgICBpZiAoTm9kZSogbm9kZSA9IG5vZGVGb3JQYXRoKHBhdGgp
KQotICAgICAgICAqbm9kZUlkID0gcHVzaE5vZGVQYXRoVG9Gcm9udGVuZChlcnJvclN0cmluZywg
bm9kZSk7Ci0gICAgZWxzZQotICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIG5vZGUgZm9y
IGdpdmVuIHBhdGgiX3M7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOwor
CisgICAgaWYgKE5vZGUqIG5vZGUgPSBub2RlRm9yUGF0aChwYXRoKSkgeworICAgICAgICBpZiAo
YXV0byBub2RlSWQgPSBwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKGVycm9yU3RyaW5nLCBub2RlKSkK
KyAgICAgICAgICAgIHJldHVybiBub2RlSWQ7CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3Rl
ZChlcnJvclN0cmluZyk7CisgICAgfQorCisgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJNaXNz
aW5nIG5vZGUgZm9yIGdpdmVuIHBhdGgiX3MpOwogfQogCi1SZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiBJbnNwZWN0b3JET01BZ2VudDo6cmVzb2x2ZU5v
ZGUoTm9kZSogbm9kZSwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCkKK1JlZlB0cjxQcm90b2Nv
bDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiBJbnNwZWN0b3JET01BZ2VudDo6cmVzb2x2ZU5vZGUo
Tm9kZSogbm9kZSwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCkKIHsKICAgICBEb2N1bWVudCog
ZG9jdW1lbnQgPSAmbm9kZS0+ZG9jdW1lbnQoKTsKICAgICBpZiAoYXV0byogdGVtcGxhdGVIb3N0
ID0gZG9jdW1lbnQtPnRlbXBsYXRlRG9jdW1lbnRIb3N0KCkpCkBAIC0yNzA2LDkgKzI3ODksMTEg
QEAgSlNDOjpKU1ZhbHVlIEluc3BlY3RvckRPTUFnZW50Ojpub2RlQXNTY3JpcHRWYWx1ZShKU0M6
OkpTR2xvYmFsT2JqZWN0JiBzdGF0ZSwgTm8KICAgICByZXR1cm4gdG9KUygmc3RhdGUsIGRlcHJl
Y2F0ZWRHbG9iYWxPYmplY3RGb3JQcm90b3R5cGUoJnN0YXRlKSwgQmluZGluZ1NlY3VyaXR5Ojpj
aGVja1NlY3VyaXR5Rm9yTm9kZShzdGF0ZSwgbm9kZSkpOwogfQogCi12b2lkIEluc3BlY3RvckRP
TUFnZW50OjpzZXRBbGxvd0VkaXRpbmdVc2VyQWdlbnRTaGFkb3dUcmVlcyhFcnJvclN0cmluZyYs
IGJvb2wgYWxsb3cpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JET01B
Z2VudDo6c2V0QWxsb3dFZGl0aW5nVXNlckFnZW50U2hhZG93VHJlZXMoYm9vbCBhbGxvdykKIHsK
ICAgICBtX2FsbG93RWRpdGluZ1VzZXJBZ2VudFNoYWRvd1RyZWVzID0gYWxsb3c7CisKKyAgICBy
ZXR1cm4geyB9OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmggYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmgKaW5kZXggM2UzNzcw
N2FmZWNmNzhmNDIxOGFhODMwMWUxZWEyZDQxYzcyNTE3Mi4uN2YyODcyZGY0OWUwZDQwYWIwMjBj
ZDk4ODRkZWQwMDMwOGYxYTJhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2FnZW50cy9JbnNwZWN0b3JET01BZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9hZ2VudHMvSW5zcGVjdG9yRE9NQWdlbnQuaApAQCAtNzYsMTQgKzc2LDEyIEBAIGNsYXNzIFNo
YWRvd1Jvb3Q7CiAKIHN0cnVjdCBIaWdobGlnaHRDb25maWc7CiAKLXR5cGVkZWYgU3RyaW5nIEVy
cm9yU3RyaW5nOwotCiBjbGFzcyBJbnNwZWN0b3JET01BZ2VudCBmaW5hbCA6IHB1YmxpYyBJbnNw
ZWN0b3JBZ2VudEJhc2UsIHB1YmxpYyBJbnNwZWN0b3I6OkRPTUJhY2tlbmREaXNwYXRjaGVySGFu
ZGxlciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW5zcGVjdG9yRE9NQWdlbnQpOwogICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIEluc3BlY3RvckRPTUFnZW50
KFBhZ2VBZ2VudENvbnRleHQmLCBJbnNwZWN0b3JPdmVybGF5Kik7Ci0gICAgfkluc3BlY3RvckRP
TUFnZW50KCkgb3ZlcnJpZGU7CisgICAgfkluc3BlY3RvckRPTUFnZW50KCk7CiAKICAgICBzdGF0
aWMgU3RyaW5nIHRvRXJyb3JTdHJpbmcoRXhjZXB0aW9uQ29kZSk7CiAgICAgc3RhdGljIFN0cmlu
ZyB0b0Vycm9yU3RyaW5nKEV4Y2VwdGlvbiYmKTsKQEAgLTEwMiw2MiArMTAwLDYyIEBAIHB1Ymxp
YzoKICAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIG5vZGVBc1NjcmlwdFZhbHVlKEpTQzo6SlNHbG9i
YWxPYmplY3QmLCBOb2RlKik7CiAKICAgICAvLyBJbnNwZWN0b3JBZ2VudEJhc2UKLSAgICB2b2lk
IGRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kUm91dGVyKiwg
SW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlciopIG92ZXJyaWRlOwotICAgIHZvaWQgd2lsbERl
c3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKSBvdmVy
cmlkZTsKKyAgICB2b2lkIGRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkZy
b250ZW5kUm91dGVyKiwgSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlciopOworICAgIHZvaWQg
d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29u
KTsKIAogICAgIC8vIERPTUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcgotICAgIHZvaWQgcXVlcnlT
ZWxlY3RvcihFcnJvclN0cmluZyYsIGludCBub2RlSWQsIGNvbnN0IFN0cmluZyYgc2VsZWN0b3Jz
LCBpbnQqIGVsZW1lbnRJZCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBxdWVyeVNlbGVjdG9yQWxsKEVy
cm9yU3RyaW5nJiwgaW50IG5vZGVJZCwgY29uc3QgU3RyaW5nJiBzZWxlY3RvcnMsIFJlZlB0cjxK
U09OOjpBcnJheU9mPGludD4+JiByZXN1bHQpIG92ZXJyaWRlOwotICAgIHZvaWQgZ2V0RG9jdW1l
bnQoRXJyb3JTdHJpbmcmLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlPiYg
cm9vdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZXF1ZXN0Q2hpbGROb2RlcyhFcnJvclN0cmluZyYs
IGludCBub2RlSWQsIGNvbnN0IGludCogZGVwdGgpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0QXR0
cmlidXRlVmFsdWUoRXJyb3JTdHJpbmcmLCBpbnQgZWxlbWVudElkLCBjb25zdCBTdHJpbmcmIG5h
bWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0QXR0cmlidXRl
c0FzVGV4dChFcnJvclN0cmluZyYsIGludCBlbGVtZW50SWQsIGNvbnN0IFN0cmluZyYgdGV4dCwg
Y29uc3QgU3RyaW5nKiBuYW1lKSBvdmVycmlkZTsKLSAgICB2b2lkIHJlbW92ZUF0dHJpYnV0ZShF
cnJvclN0cmluZyYsIGludCBlbGVtZW50SWQsIGNvbnN0IFN0cmluZyYgbmFtZSkgb3ZlcnJpZGU7
Ci0gICAgdm9pZCByZW1vdmVOb2RlKEVycm9yU3RyaW5nJiwgaW50IG5vZGVJZCkgb3ZlcnJpZGU7
Ci0gICAgdm9pZCBzZXROb2RlTmFtZShFcnJvclN0cmluZyYsIGludCBub2RlSWQsIGNvbnN0IFN0
cmluZyYgbmFtZSwgaW50KiBuZXdJZCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBnZXRPdXRlckhUTUwo
RXJyb3JTdHJpbmcmLCBpbnQgbm9kZUlkLCBXVEY6OlN0cmluZyogb3V0ZXJIVE1MKSBvdmVycmlk
ZTsKLSAgICB2b2lkIHNldE91dGVySFRNTChFcnJvclN0cmluZyYsIGludCBub2RlSWQsIGNvbnN0
IFN0cmluZyYgb3V0ZXJIVE1MKSBvdmVycmlkZTsKLSAgICB2b2lkIGluc2VydEFkamFjZW50SFRN
TChFcnJvclN0cmluZyYsIGludCBub2RlSWQsIGNvbnN0IFN0cmluZyYgcG9zaXRpb24sIGNvbnN0
IFN0cmluZyYgaHRtbCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXROb2RlVmFsdWUoRXJyb3JTdHJp
bmcmLCBpbnQgbm9kZUlkLCBjb25zdCBTdHJpbmcmIHZhbHVlKSBvdmVycmlkZTsKLSAgICB2b2lk
IGdldFN1cHBvcnRlZEV2ZW50TmFtZXMoRXJyb3JTdHJpbmcmLCBSZWZQdHI8SlNPTjo6QXJyYXlP
ZjxTdHJpbmc+PiYgZXZlbnROYW1lcykgb3ZlcnJpZGU7CisgICAgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6RXJyb3JTdHJpbmdPcjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZD4gcXVlcnlT
ZWxlY3RvcihJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZCwgY29uc3QgU3RyaW5nJiBz
ZWxlY3Rvcik7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SlNP
Tjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZD4+PiBxdWVyeVNlbGVj
dG9yQWxsKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkLCBjb25zdCBTdHJpbmcmIHNl
bGVjdG9yKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+PiBnZXREb2N1bWVudCgpOworICAgIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gcmVxdWVzdENoaWxkTm9kZXMoSW5zcGVj
dG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQsIE9wdGlvbmFsPGludD4mJiBkZXB0aCk7CisgICAg
SW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzZXRBdHRyaWJ1dGVWYWx1
ZShJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBj
b25zdCBTdHJpbmcmIHZhbHVlKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmlu
Z09yPHZvaWQ+IHNldEF0dHJpYnV0ZXNBc1RleHQoSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpO
b2RlSWQsIGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgU3RyaW5nJiBuYW1lKTsKKyAgICBJbnNw
ZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHJlbW92ZUF0dHJpYnV0ZShJbnNw
ZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZCwgY29uc3QgU3RyaW5nJiBuYW1lKTsKKyAgICBJ
bnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHJlbW92ZU5vZGUoSW5zcGVj
dG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQ+IHNldE5vZGVOYW1l
KEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkLCBjb25zdCBTdHJpbmcmKTsKKyAgICBJ
bnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFN0cmluZz4gZ2V0T3V0ZXJIVE1MKElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29s
OjpFcnJvclN0cmluZ09yPHZvaWQ+IHNldE91dGVySFRNTChJbnNwZWN0b3I6OlByb3RvY29sOjpE
T006Ok5vZGVJZCwgY29uc3QgU3RyaW5nJik7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJy
b3JTdHJpbmdPcjx2b2lkPiBpbnNlcnRBZGphY2VudEhUTUwoSW5zcGVjdG9yOjpQcm90b2NvbDo6
RE9NOjpOb2RlSWQsIGNvbnN0IFN0cmluZyYgcG9zaXRpb24sIGNvbnN0IFN0cmluZyYgaHRtbCk7
CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzZXROb2RlVmFs
dWUoSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQsIGNvbnN0IFN0cmluZyYpOworICAg
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEpTT046OkFycmF5T2Y8U3Ry
aW5nPj4+IGdldFN1cHBvcnRlZEV2ZW50TmFtZXMoKTsKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FM
VEVSTkFURV9ESVNQQVRDSEVSUykKLSAgICB2b2lkIGdldERhdGFCaW5kaW5nc0Zvck5vZGUoRXJy
b3JTdHJpbmcmLCBpbnQgbm9kZUlkLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpET006OkRhdGFCaW5kaW5nPj4mIGRhdGFBcnJheSkgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBnZXRBc3NvY2lhdGVkRGF0YUZvck5vZGUoRXJyb3JTdHJpbmcmLCBpbnQgbm9kZUlkLCBPcHRp
b25hbDxTdHJpbmc+JiBhc3NvY2lhdGVkRGF0YSkgb3ZlcnJpZGU7CisgICAgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpET006OkRhdGFCaW5kaW5nPj4+IGdldERhdGFCaW5kaW5nc0Zvck5vZGUoSW5zcGVjdG9y
OjpQcm90b2NvbDo6RE9NOjpOb2RlSWQpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8U3RyaW5nPiBnZXRBc3NvY2lhdGVkRGF0YUZvck5vZGUoSW5zcGVjdG9yOjpQcm90
b2NvbDo6RE9NOjpOb2RlSWQpOwogI2VuZGlmCi0gICAgdm9pZCBnZXRFdmVudExpc3RlbmVyc0Zv
ck5vZGUoRXJyb3JTdHJpbmcmLCBpbnQgbm9kZUlkLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpET006OkV2ZW50TGlzdGVuZXI+PiYgbGlzdGVuZXJzQXJyYXkpIG92
ZXJyaWRlOwotICAgIHZvaWQgc2V0RXZlbnRMaXN0ZW5lckRpc2FibGVkKEVycm9yU3RyaW5nJiwg
aW50IGV2ZW50TGlzdGVuZXJJZCwgYm9vbCBkaXNhYmxlZCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBz
ZXRCcmVha3BvaW50Rm9yRXZlbnRMaXN0ZW5lcihFcnJvclN0cmluZyYsIGludCBldmVudExpc3Rl
bmVySWQsIGNvbnN0IEpTT046Ok9iamVjdCogb3B0aW9ucykgZmluYWw7Ci0gICAgdm9pZCByZW1v
dmVCcmVha3BvaW50Rm9yRXZlbnRMaXN0ZW5lcihFcnJvclN0cmluZyYsIGludCBldmVudExpc3Rl
bmVySWQpIG92ZXJyaWRlOwotICAgIHZvaWQgZ2V0QWNjZXNzaWJpbGl0eVByb3BlcnRpZXNGb3JO
b2RlKEVycm9yU3RyaW5nJiwgaW50IG5vZGVJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM+JiBheFByb3BlcnRpZXMpIG92ZXJyaWRlOwot
ICAgIHZvaWQgcGVyZm9ybVNlYXJjaChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgcXVlcnks
IGNvbnN0IEpTT046OkFycmF5KiBub2RlSWRzLCBjb25zdCBib29sKiBjYXNlU2Vuc2l0aXZlLCBT
dHJpbmcqIHNlYXJjaElkLCBpbnQqIHJlc3VsdENvdW50KSBvdmVycmlkZTsKLSAgICB2b2lkIGdl
dFNlYXJjaFJlc3VsdHMoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHNlYXJjaElkLCBpbnQg
ZnJvbUluZGV4LCBpbnQgdG9JbmRleCwgUmVmUHRyPEpTT046OkFycmF5T2Y8aW50Pj4mKSBvdmVy
cmlkZTsKLSAgICB2b2lkIGRpc2NhcmRTZWFyY2hSZXN1bHRzKEVycm9yU3RyaW5nJiwgY29uc3Qg
U3RyaW5nJiBzZWFyY2hJZCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZXNvbHZlTm9kZShFcnJvclN0
cmluZyYsIGludCBub2RlSWQsIGNvbnN0IFN0cmluZyogb2JqZWN0R3JvdXAsIFJlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiByZXN1bHQpIG92ZXJyaWRl
OwotICAgIHZvaWQgZ2V0QXR0cmlidXRlcyhFcnJvclN0cmluZyYsIGludCBub2RlSWQsIFJlZlB0
cjxKU09OOjpBcnJheU9mPFN0cmluZz4+JiByZXN1bHQpIG92ZXJyaWRlOworICAgIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6RE9NOjpFdmVudExpc3RlbmVyPj4+IGdldEV2ZW50TGlzdGVuZXJzRm9yTm9kZShJ
bnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzZXRFdmVudExpc3RlbmVyRGlzYWJsZWQoSW5zcGVjdG9y
OjpQcm90b2NvbDo6RE9NOjpFdmVudExpc3RlbmVySWQsIGJvb2wpOworICAgIEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc2V0QnJlYWtwb2ludEZvckV2ZW50TGlzdGVu
ZXIoSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpFdmVudExpc3RlbmVySWQsIFJlZlB0cjxKU09O
OjpPYmplY3Q+JiYgb3B0aW9ucyk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJp
bmdPcjx2b2lkPiByZW1vdmVCcmVha3BvaW50Rm9yRXZlbnRMaXN0ZW5lcihJbnNwZWN0b3I6OlBy
b3RvY29sOjpET006OkV2ZW50TGlzdGVuZXJJZCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6
RXJyb3JTdHJpbmdPcjxSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5
UHJvcGVydGllcz4+IGdldEFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzRm9yTm9kZShJbnNwZWN0b3I6
OlByb3RvY29sOjpET006Ok5vZGVJZCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JT
dHJpbmdPcjxzdGQ6OnR1cGxlPFN0cmluZyAvKiBzZWFyY2hJZCAqLywgaW50IC8qIHJlc3VsdENv
dW50ICovPj4gcGVyZm9ybVNlYXJjaChjb25zdCBTdHJpbmcmIHF1ZXJ5LCBSZWZQdHI8SlNPTjo6
QXJyYXk+JiYgbm9kZUlkcywgT3B0aW9uYWw8Ym9vbD4mJiBjYXNlU2Vuc2l0aXZlKTsKKyAgICBJ
bnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkPj4+IGdldFNlYXJjaFJlc3VsdHMoY29uc3QgU3Ry
aW5nJiBzZWFyY2hJZCwgaW50IGZyb21JbmRleCwgaW50IHRvSW5kZXgpOworICAgIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZGlzY2FyZFNlYXJjaFJlc3VsdHMoY29u
c3QgU3RyaW5nJiBzZWFyY2hJZCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJp
bmdPcjxSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0Pj4gcmVz
b2x2ZU5vZGUoSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQsIGNvbnN0IFN0cmluZyYg
b2JqZWN0R3JvdXApOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVm
PEpTT046OkFycmF5T2Y8U3RyaW5nPj4+IGdldEF0dHJpYnV0ZXMoSW5zcGVjdG9yOjpQcm90b2Nv
bDo6RE9NOjpOb2RlSWQpOwogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgdm9pZCBzZXRJ
bnNwZWN0TW9kZUVuYWJsZWQoRXJyb3JTdHJpbmcmLCBib29sIGVuYWJsZWQsIGNvbnN0IEpTT046
Ok9iamVjdCogaGlnaGxpZ2h0Q29uZmlnKSBvdmVycmlkZTsKKyAgICBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHNldEluc3BlY3RNb2RlRW5hYmxlZChib29sLCBSZWZQ
dHI8SlNPTjo6T2JqZWN0PiYmIGhpZ2hsaWdodENvbmZpZyk7CiAjZWxzZQotICAgIHZvaWQgc2V0
SW5zcGVjdE1vZGVFbmFibGVkKEVycm9yU3RyaW5nJiwgYm9vbCBlbmFibGVkLCBjb25zdCBKU09O
OjpPYmplY3QqIGhpZ2hsaWdodENvbmZpZywgY29uc3QgYm9vbCogc2hvd1J1bGVycykgb3ZlcnJp
ZGU7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzZXRJbnNw
ZWN0TW9kZUVuYWJsZWQoYm9vbCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBoaWdobGlnaHRDb25m
aWcsIE9wdGlvbmFsPGJvb2w+JiYgc2hvd1J1bGVycyk7CiAjZW5kaWYKLSAgICB2b2lkIHJlcXVl
c3ROb2RlKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBvYmplY3RJZCwgaW50KiBub2RlSWQp
IG92ZXJyaWRlOwotICAgIHZvaWQgcHVzaE5vZGVCeVBhdGhUb0Zyb250ZW5kKEVycm9yU3RyaW5n
JiwgY29uc3QgU3RyaW5nJiBwYXRoLCBpbnQqIG5vZGVJZCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBo
aWRlSGlnaGxpZ2h0KEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBoaWdobGlnaHRS
ZWN0KEVycm9yU3RyaW5nJiwgaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGNv
bnN0IEpTT046Ok9iamVjdCogY29sb3IsIGNvbnN0IEpTT046Ok9iamVjdCogb3V0bGluZUNvbG9y
LCBjb25zdCBib29sKiB1c2VQYWdlQ29vcmRpbmF0ZXMpIG92ZXJyaWRlOwotICAgIHZvaWQgaGln
aGxpZ2h0UXVhZChFcnJvclN0cmluZyYsIGNvbnN0IEpTT046OkFycmF5JiBxdWFkLCBjb25zdCBK
U09OOjpPYmplY3QqIGNvbG9yLCBjb25zdCBKU09OOjpPYmplY3QqIG91dGxpbmVDb2xvciwgY29u
c3QgYm9vbCogdXNlUGFnZUNvb3JkaW5hdGVzKSBvdmVycmlkZTsKLSAgICB2b2lkIGhpZ2hsaWdo
dFNlbGVjdG9yKEVycm9yU3RyaW5nJiwgY29uc3QgSlNPTjo6T2JqZWN0JiBoaWdobGlnaHRDb25m
aWcsIGNvbnN0IFN0cmluZyYgc2VsZWN0b3JTdHJpbmcsIGNvbnN0IFN0cmluZyogZnJhbWVJZCkg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBoaWdobGlnaHROb2RlKEVycm9yU3RyaW5nJiwgY29uc3QgSlNP
Tjo6T2JqZWN0JiBoaWdobGlnaHRDb25maWcsIGNvbnN0IGludCogbm9kZUlkLCBjb25zdCBTdHJp
bmcqIG9iamVjdElkKSBvdmVycmlkZTsKLSAgICB2b2lkIGhpZ2hsaWdodE5vZGVMaXN0KEVycm9y
U3RyaW5nJiwgY29uc3QgSlNPTjo6QXJyYXkmIG5vZGVJZHMsIGNvbnN0IEpTT046Ok9iamVjdCYg
aGlnaGxpZ2h0Q29uZmlnKSBvdmVycmlkZTsKLSAgICB2b2lkIGhpZ2hsaWdodEZyYW1lKEVycm9y
U3RyaW5nJiwgY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBjb25zdCBKU09OOjpPYmplY3QqIGNvbG9y
LCBjb25zdCBKU09OOjpPYmplY3QqIG91dGxpbmVDb2xvcikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBt
b3ZlVG8oRXJyb3JTdHJpbmcmLCBpbnQgbm9kZUlkLCBpbnQgdGFyZ2V0Tm9kZUlkLCBjb25zdCBp
bnQqIGFuY2hvck5vZGVJZCwgaW50KiBuZXdOb2RlSWQpIG92ZXJyaWRlOwotICAgIHZvaWQgdW5k
byhFcnJvclN0cmluZyYpIG92ZXJyaWRlOwotICAgIHZvaWQgcmVkbyhFcnJvclN0cmluZyYpIG92
ZXJyaWRlOwotICAgIHZvaWQgbWFya1VuZG9hYmxlU3RhdGUoRXJyb3JTdHJpbmcmKSBvdmVycmlk
ZTsKLSAgICB2b2lkIGZvY3VzKEVycm9yU3RyaW5nJiwgaW50IG5vZGVJZCkgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCBzZXRJbnNwZWN0ZWROb2RlKEVycm9yU3RyaW5nJiwgaW50IG5vZGVJZCkgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCBzZXRBbGxvd0VkaXRpbmdVc2VyQWdlbnRTaGFkb3dUcmVlcyhFcnJvclN0
cmluZyYsIGJvb2wgYWxsb3cpIGZpbmFsOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQ+IHJlcXVlc3ROb2RlKGNv
bnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdElkJik7CisgICAg
SW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxJbnNwZWN0b3I6OlByb3RvY29sOjpE
T006Ok5vZGVJZD4gcHVzaE5vZGVCeVBhdGhUb0Zyb250ZW5kKGNvbnN0IFN0cmluZyYgcGF0aCk7
CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBoaWRlSGlnaGxp
Z2h0KCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBoaWdo
bGlnaHRSZWN0KGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBSZWZQdHI8SlNP
Tjo6T2JqZWN0PiYmIGNvbG9yLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIG91dGxpbmVDb2xvciwg
T3B0aW9uYWw8Ym9vbD4mJiB1c2VQYWdlQ29vcmRpbmF0ZXMpOworICAgIEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gaGlnaGxpZ2h0UXVhZChSZWY8SlNPTjo6QXJyYXk+
JiYgcXVhZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBjb2xvciwgUmVmUHRyPEpTT046Ok9iamVj
dD4mJiBvdXRsaW5lQ29sb3IsIE9wdGlvbmFsPGJvb2w+JiYgdXNlUGFnZUNvb3JkaW5hdGVzKTsK
KyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGhpZ2hsaWdodFNl
bGVjdG9yKFJlZjxKU09OOjpPYmplY3Q+JiYgaGlnaGxpZ2h0Q29uZmlnLCBjb25zdCBTdHJpbmcm
IHNlbGVjdG9yU3RyaW5nLCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpGcmFt
ZUlkJik7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBoaWdo
bGlnaHROb2RlKFJlZjxKU09OOjpPYmplY3Q+JiYgaGlnaGxpZ2h0Q29uZmlnLCBPcHRpb25hbDxJ
bnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZD4mJiwgY29uc3QgSW5zcGVjdG9yOjpQcm90
b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0SWQmKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29s
OjpFcnJvclN0cmluZ09yPHZvaWQ+IGhpZ2hsaWdodE5vZGVMaXN0KFJlZjxKU09OOjpBcnJheT4m
JiBub2RlSWRzLCBSZWY8SlNPTjo6T2JqZWN0PiYmIGhpZ2hsaWdodENvbmZpZyk7CisgICAgSW5z
cGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBoaWdobGlnaHRGcmFtZShjb25z
dCBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpGcmFtZUlkJiwgUmVmUHRyPEpTT046Ok9i
amVjdD4mJiBjb2xvciwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBvdXRsaW5lQ29sb3IpOworICAg
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8SW5zcGVjdG9yOjpQcm90b2NvbDo6
RE9NOjpOb2RlSWQ+IG1vdmVUbyhJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZCBub2Rl
SWQsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkIHRhcmdldE5vZGVJZCwgT3B0aW9u
YWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQ+JiYgaW5zZXJ0QmVmb3JlTm9kZUlk
KTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHVuZG8oKTsK
KyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHJlZG8oKTsKKyAg
ICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IG1hcmtVbmRvYWJsZVN0
YXRlKCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBmb2N1
cyhJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZCk7CisgICAgSW5zcGVjdG9yOjpQcm90
b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzZXRJbnNwZWN0ZWROb2RlKEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRPTTo6Tm9kZUlkKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmlu
Z09yPHZvaWQ+IHNldEFsbG93RWRpdGluZ1VzZXJBZ2VudFNoYWRvd1RyZWVzKGJvb2wpOwogCiAg
ICAgLy8gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uCi0gICAgaW50IGlkZW50aWZpZXJGb3JOb2Rl
KE5vZGUmKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZCBpZGVudGlmaWVy
Rm9yTm9kZShOb2RlJik7CiAgICAgdm9pZCBhZGRFdmVudExpc3RlbmVyc1RvTm9kZShOb2RlJik7
CiAgICAgdm9pZCBkaWRJbnNlcnRET01Ob2RlKE5vZGUmKTsKICAgICB2b2lkIGRpZFJlbW92ZURP
TU5vZGUoTm9kZSYpOwpAQCAtMTg1LDEyICsxODMsMTIgQEAgcHVibGljOgogCiAgICAgdm9pZCBz
dHlsZUF0dHJpYnV0ZUludmFsaWRhdGVkKGNvbnN0IFZlY3RvcjxFbGVtZW50Kj4mIGVsZW1lbnRz
KTsKIAotICAgIGludCBwdXNoTm9kZVRvRnJvbnRlbmQoTm9kZSopOwotICAgIGludCBwdXNoTm9k
ZVRvRnJvbnRlbmQoRXJyb3JTdHJpbmcmLCBpbnQgZG9jdW1lbnROb2RlSWQsIE5vZGUqKTsKLSAg
ICBpbnQgcHVzaE5vZGVQYXRoVG9Gcm9udGVuZChOb2RlKik7Ci0gICAgaW50IHB1c2hOb2RlUGF0
aFRvRnJvbnRlbmQoRXJyb3JTdHJpbmcsIE5vZGUqKTsKLSAgICBOb2RlKiBub2RlRm9ySWQoaW50
IG5vZGVJZCk7Ci0gICAgaW50IGJvdW5kTm9kZUlkKGNvbnN0IE5vZGUqKTsKKyAgICBJbnNwZWN0
b3I6OlByb3RvY29sOjpET006Ok5vZGVJZCBwdXNoTm9kZVRvRnJvbnRlbmQoTm9kZSopOworICAg
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkIHB1c2hOb2RlVG9Gcm9udGVuZChJbnNw
ZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZyYsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6
Tm9kZUlkIGRvY3VtZW50Tm9kZUlkLCBOb2RlKik7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6
RE9NOjpOb2RlSWQgcHVzaE5vZGVQYXRoVG9Gcm9udGVuZChOb2RlKik7CisgICAgSW5zcGVjdG9y
OjpQcm90b2NvbDo6RE9NOjpOb2RlSWQgcHVzaE5vZGVQYXRoVG9Gcm9udGVuZChJbnNwZWN0b3I6
OlByb3RvY29sOjpFcnJvclN0cmluZywgTm9kZSopOworICAgIE5vZGUqIG5vZGVGb3JJZChJbnNw
ZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6
RE9NOjpOb2RlSWQgYm91bmROb2RlSWQoY29uc3QgTm9kZSopOwogCiAgICAgUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4gcmVzb2x2ZU5vZGUoTm9kZSos
IGNvbnN0IFN0cmluZyYgb2JqZWN0R3JvdXApOwogICAgIGJvb2wgaGFuZGxlTW91c2VQcmVzcygp
OwpAQCAtMjAyLDEyICsyMDAsMTIgQEAgcHVibGljOgogICAgIFZlY3RvcjxEb2N1bWVudCo+IGRv
Y3VtZW50cygpOwogICAgIHZvaWQgcmVzZXQoKTsKIAotICAgIE5vZGUqIGFzc2VydE5vZGUoRXJy
b3JTdHJpbmcmLCBpbnQgbm9kZUlkKTsKLSAgICBFbGVtZW50KiBhc3NlcnRFbGVtZW50KEVycm9y
U3RyaW5nJiwgaW50IG5vZGVJZCk7Ci0gICAgRG9jdW1lbnQqIGFzc2VydERvY3VtZW50KEVycm9y
U3RyaW5nJiwgaW50IG5vZGVJZCk7CisgICAgTm9kZSogYXNzZXJ0Tm9kZShJbnNwZWN0b3I6OlBy
b3RvY29sOjpFcnJvclN0cmluZyYsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkKTsK
KyAgICBFbGVtZW50KiBhc3NlcnRFbGVtZW50KEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3Ry
aW5nJiwgSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQpOworICAgIERvY3VtZW50KiBh
c3NlcnREb2N1bWVudChJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZyYsIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkKTsKIAogICAgIFJlZlB0cjxKU0M6OkJyZWFrcG9pbnQ+
IGJyZWFrcG9pbnRGb3JFdmVudExpc3RlbmVyKEV2ZW50VGFyZ2V0JiwgY29uc3QgQXRvbVN0cmlu
ZyYgZXZlbnRUeXBlLCBFdmVudExpc3RlbmVyJiwgYm9vbCBjYXB0dXJlKTsKLSAgICBpbnQgaWRG
b3JFdmVudExpc3RlbmVyKEV2ZW50VGFyZ2V0JiwgY29uc3QgQXRvbVN0cmluZyYgZXZlbnRUeXBl
LCBFdmVudExpc3RlbmVyJiwgYm9vbCBjYXB0dXJlKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29s
OjpET006OkV2ZW50TGlzdGVuZXJJZCBpZEZvckV2ZW50TGlzdGVuZXIoRXZlbnRUYXJnZXQmLCBj
b25zdCBBdG9tU3RyaW5nJiBldmVudFR5cGUsIEV2ZW50TGlzdGVuZXImLCBib29sIGNhcHR1cmUp
OwogCiBwcml2YXRlOgogI2lmIEVOQUJMRShWSURFTykKQEAgLTIxNSwzMyArMjEzLDMzIEBAIHBy
aXZhdGU6CiAjZW5kaWYKIAogICAgIHZvaWQgaGlnaGxpZ2h0TW91c2VkT3Zlck5vZGUoKTsKLSAg
ICB2b2lkIHNldFNlYXJjaGluZ0Zvck5vZGUoRXJyb3JTdHJpbmcmLCBib29sIGVuYWJsZWQsIGNv
bnN0IEpTT046Ok9iamVjdCogaGlnaGxpZ2h0Q29uZmlnLCBib29sIHNob3dSdWxlcnMpOwotICAg
IHN0ZDo6dW5pcXVlX3B0cjxIaWdobGlnaHRDb25maWc+IGhpZ2hsaWdodENvbmZpZ0Zyb21JbnNw
ZWN0b3JPYmplY3QoRXJyb3JTdHJpbmcmLCBjb25zdCBKU09OOjpPYmplY3QqIGhpZ2hsaWdodElu
c3BlY3Rvck9iamVjdCk7CisgICAgdm9pZCBzZXRTZWFyY2hpbmdGb3JOb2RlKEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkVycm9yU3RyaW5nJiwgYm9vbCBlbmFibGVkLCBSZWZQdHI8SlNPTjo6T2JqZWN0
PiYmIGhpZ2hsaWdodENvbmZpZywgYm9vbCBzaG93UnVsZXJzKTsKKyAgICBzdGQ6OnVuaXF1ZV9w
dHI8SGlnaGxpZ2h0Q29uZmlnPiBoaWdobGlnaHRDb25maWdGcm9tSW5zcGVjdG9yT2JqZWN0KElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nJiwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBo
aWdobGlnaHRJbnNwZWN0b3JPYmplY3QpOwogCiAgICAgLy8gTm9kZS1yZWxhdGVkIG1ldGhvZHMu
Ci0gICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxOb2RlPiwgaW50PiBOb2RlVG9JZE1hcDsKLSAg
ICBpbnQgYmluZChOb2RlKiwgTm9kZVRvSWRNYXAqKTsKKyAgICB0eXBlZGVmIEhhc2hNYXA8UmVm
UHRyPE5vZGU+LCBJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZD4gTm9kZVRvSWRNYXA7
CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQgYmluZChOb2RlKiwgTm9kZVRv
SWRNYXAqKTsKICAgICB2b2lkIHVuYmluZChOb2RlKiwgTm9kZVRvSWRNYXAqKTsKIAotICAgIE5v
ZGUqIGFzc2VydEVkaXRhYmxlTm9kZShFcnJvclN0cmluZyYsIGludCBub2RlSWQpOwotICAgIEVs
ZW1lbnQqIGFzc2VydEVkaXRhYmxlRWxlbWVudChFcnJvclN0cmluZyYsIGludCBub2RlSWQpOwor
ICAgIE5vZGUqIGFzc2VydEVkaXRhYmxlTm9kZShJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0
cmluZyYsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkKTsKKyAgICBFbGVtZW50KiBh
c3NlcnRFZGl0YWJsZUVsZW1lbnQoSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBJ
bnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZCk7CiAKLSAgICB2b2lkIHB1c2hDaGlsZE5v
ZGVzVG9Gcm9udGVuZChpbnQgbm9kZUlkLCBpbnQgZGVwdGggPSAxKTsKKyAgICB2b2lkIHB1c2hD
aGlsZE5vZGVzVG9Gcm9udGVuZChJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZCwgaW50
IGRlcHRoID0gMSk7CiAKICAgICBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlPiBi
dWlsZE9iamVjdEZvck5vZGUoTm9kZSosIGludCBkZXB0aCwgTm9kZVRvSWRNYXAqKTsKICAgICBS
ZWY8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiBidWlsZEFycmF5Rm9yRWxlbWVudEF0dHJpYnV0ZXMo
RWxlbWVudCopOwogICAgIFJlZjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRP
TTo6Tm9kZT4+IGJ1aWxkQXJyYXlGb3JDb250YWluZXJDaGlsZHJlbihOb2RlKiBjb250YWluZXIs
IGludCBkZXB0aCwgTm9kZVRvSWRNYXAqIG5vZGVzTWFwKTsKICAgICBSZWZQdHI8SlNPTjo6QXJy
YXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+PiBidWlsZEFycmF5Rm9yUHNldWRv
RWxlbWVudHMoY29uc3QgRWxlbWVudCYsIE5vZGVUb0lkTWFwKiBub2Rlc01hcCk7Ci0gICAgUmVm
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6RXZlbnRMaXN0ZW5lcj4gYnVpbGRPYmplY3RGb3JF
dmVudExpc3RlbmVyKGNvbnN0IFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyJiwgaW50IGlkZW50aWZp
ZXIsIEV2ZW50VGFyZ2V0JiwgY29uc3QgQXRvbVN0cmluZyYgZXZlbnRUeXBlLCBib29sIGRpc2Fi
bGVkLCBjb25zdCBSZWZQdHI8SlNDOjpCcmVha3BvaW50PiYpOwotICAgIFJlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzPiBidWlsZE9iamVjdEZv
ckFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzKE5vZGUqKTsKLSAgICB2b2lkIHByb2Nlc3NBY2Nlc3Np
YmlsaXR5Q2hpbGRyZW4oQVhDb3JlT2JqZWN0JiwgSlNPTjo6QXJyYXlPZjxpbnQ+Jik7CisgICAg
UmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6RXZlbnRMaXN0ZW5lcj4gYnVpbGRPYmplY3RG
b3JFdmVudExpc3RlbmVyKGNvbnN0IFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyJiwgSW5zcGVjdG9y
OjpQcm90b2NvbDo6RE9NOjpFdmVudExpc3RlbmVySWQgaWRlbnRpZmllciwgRXZlbnRUYXJnZXQm
LCBjb25zdCBBdG9tU3RyaW5nJiBldmVudFR5cGUsIGJvb2wgZGlzYWJsZWQsIGNvbnN0IFJlZlB0
cjxKU0M6OkJyZWFrcG9pbnQ+Jik7CisgICAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6
QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM+IGJ1aWxkT2JqZWN0Rm9yQWNjZXNzaWJpbGl0eVByb3Bl
cnRpZXMoTm9kZSYpOworICAgIHZvaWQgcHJvY2Vzc0FjY2Vzc2liaWxpdHlDaGlsZHJlbihBWENv
cmVPYmplY3QmLCBKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlk
PiYpOwogICAgIAogICAgIE5vZGUqIG5vZGVGb3JQYXRoKGNvbnN0IFN0cmluZyYgcGF0aCk7Ci0g
ICAgTm9kZSogbm9kZUZvck9iamVjdElkKGNvbnN0IFN0cmluZyYgb2JqZWN0SWQpOworICAgIE5v
ZGUqIG5vZGVGb3JPYmplY3RJZChjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpS
ZW1vdGVPYmplY3RJZCYpOwogCiAgICAgdm9pZCBkaXNjYXJkQmluZGluZ3MoKTsKIAotICAgIHZv
aWQgaW5uZXJIaWdobGlnaHRRdWFkKHN0ZDo6dW5pcXVlX3B0cjxGbG9hdFF1YWQ+LCBjb25zdCBK
U09OOjpPYmplY3QqIGNvbG9yLCBjb25zdCBKU09OOjpPYmplY3QqIG91dGxpbmVDb2xvciwgY29u
c3QgYm9vbCogdXNlUGFnZUNvb3JkaW5hdGVzKTsKKyAgICB2b2lkIGlubmVySGlnaGxpZ2h0UXVh
ZChzdGQ6OnVuaXF1ZV9wdHI8RmxvYXRRdWFkPiwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBjb2xv
ciwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBvdXRsaW5lQ29sb3IsIE9wdGlvbmFsPGJvb2w+JiYg
dXNlUGFnZUNvb3JkaW5hdGVzKTsKIAogICAgIEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHRNYW5h
Z2VyJiBtX2luamVjdGVkU2NyaXB0TWFuYWdlcjsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW5zcGVj
dG9yOjpET01Gcm9udGVuZERpc3BhdGNoZXI+IG1fZnJvbnRlbmREaXNwYXRjaGVyOwpAQCAtMjUx
LDEwICsyNDksMTAgQEAgcHJpdmF0ZToKICAgICBOb2RlVG9JZE1hcCBtX2RvY3VtZW50Tm9kZVRv
SWRNYXA7CiAgICAgLy8gT3ducyBub2RlIG1hcHBpbmdzIGZvciBkYW5nbGluZyBub2Rlcy4KICAg
ICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPE5vZGVUb0lkTWFwPj4gbV9kYW5nbGluZ05vZGVUb0lk
TWFwczsKLSAgICBIYXNoTWFwPGludCwgTm9kZSo+IG1faWRUb05vZGU7Ci0gICAgSGFzaE1hcDxp
bnQsIE5vZGVUb0lkTWFwKj4gbV9pZFRvTm9kZXNNYXA7Ci0gICAgSGFzaFNldDxpbnQ+IG1fY2hp
bGRyZW5SZXF1ZXN0ZWQ7Ci0gICAgaW50IG1fbGFzdE5vZGVJZCB7IDEgfTsKKyAgICBIYXNoTWFw
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkLCBOb2RlKj4gbV9pZFRvTm9kZTsKKyAg
ICBIYXNoTWFwPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkLCBOb2RlVG9JZE1hcCo+
IG1faWRUb05vZGVzTWFwOworICAgIEhhc2hTZXQ8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpO
b2RlSWQ+IG1fY2hpbGRyZW5SZXF1ZXN0ZWQ7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9N
OjpOb2RlSWQgbV9sYXN0Tm9kZUlkIHsgMSB9OwogICAgIFJlZlB0cjxEb2N1bWVudD4gbV9kb2N1
bWVudDsKICAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBWZWN0b3I8UmVmUHRyPE5vZGU+Pj4g
U2VhcmNoUmVzdWx0czsKICAgICBTZWFyY2hSZXN1bHRzIG1fc2VhcmNoUmVzdWx0czsKQEAgLTI4
NSw3ICsyODMsNyBAQCBwcml2YXRlOgogI2VuZGlmCiAKICAgICBzdHJ1Y3QgSW5zcGVjdG9yRXZl
bnRMaXN0ZW5lciB7Ci0gICAgICAgIGludCBpZGVudGlmaWVyIHsgMSB9OworICAgICAgICBJbnNw
ZWN0b3I6OlByb3RvY29sOjpET006OkV2ZW50TGlzdGVuZXJJZCBpZGVudGlmaWVyIHsgMSB9Owog
ICAgICAgICBSZWZQdHI8RXZlbnRUYXJnZXQ+IGV2ZW50VGFyZ2V0OwogICAgICAgICBSZWZQdHI8
RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcjsKICAgICAgICAgQXRvbVN0cmluZyBldmVudFR5
cGU7CkBAIC0yOTUsNyArMjkzLDcgQEAgcHJpdmF0ZToKIAogICAgICAgICBJbnNwZWN0b3JFdmVu
dExpc3RlbmVyKCkgeyB9CiAKLSAgICAgICAgSW5zcGVjdG9yRXZlbnRMaXN0ZW5lcihpbnQgaWRl
bnRpZmllciwgRXZlbnRUYXJnZXQmIHRhcmdldCwgY29uc3QgQXRvbVN0cmluZyYgdHlwZSwgRXZl
bnRMaXN0ZW5lciYgbGlzdGVuZXIsIGJvb2wgY2FwdHVyZSkKKyAgICAgICAgSW5zcGVjdG9yRXZl
bnRMaXN0ZW5lcihJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkV2ZW50TGlzdGVuZXJJZCBpZGVu
dGlmaWVyLCBFdmVudFRhcmdldCYgdGFyZ2V0LCBjb25zdCBBdG9tU3RyaW5nJiB0eXBlLCBFdmVu
dExpc3RlbmVyJiBsaXN0ZW5lciwgYm9vbCBjYXB0dXJlKQogICAgICAgICAgICAgOiBpZGVudGlm
aWVyKGlkZW50aWZpZXIpCiAgICAgICAgICAgICAsIGV2ZW50VGFyZ2V0KCZ0YXJnZXQpCiAgICAg
ICAgICAgICAsIGV2ZW50TGlzdGVuZXIoJmxpc3RlbmVyKQpAQCAtMzIxLDggKzMxOSw4IEBAIHBy
aXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEV2ZW50RmlyZWRDYWxsYmFjazsKIAogICAgIEhhc2hT
ZXQ8Y29uc3QgRXZlbnQqPiBtX2Rpc3BhdGNoZWRFdmVudHM7Ci0gICAgSGFzaE1hcDxpbnQsIElu
c3BlY3RvckV2ZW50TGlzdGVuZXI+IG1fZXZlbnRMaXN0ZW5lckVudHJpZXM7Ci0gICAgaW50IG1f
bGFzdEV2ZW50TGlzdGVuZXJJZCB7IDEgfTsKKyAgICBIYXNoTWFwPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRPTTo6RXZlbnRMaXN0ZW5lcklkLCBJbnNwZWN0b3JFdmVudExpc3RlbmVyPiBtX2V2ZW50
TGlzdGVuZXJFbnRyaWVzOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6RXZlbnRMaXN0
ZW5lcklkIG1fbGFzdEV2ZW50TGlzdGVuZXJJZCB7IDEgfTsKIAogICAgIGJvb2wgbV9zZWFyY2hp
bmdGb3JOb2RlIHsgZmFsc2UgfTsKICAgICBib29sIG1fc3VwcHJlc3NBdHRyaWJ1dGVNb2RpZmll
ZEV2ZW50IHsgZmFsc2UgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9h
Z2VudHMvSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQuY3BwCmluZGV4IDA3OWExMTY4
NmU0OThiODQ3OTk1NTljZjNjZDhhZjJmN2MwOTE4MTcuLmMzMmU1YTM5MTRlNzlmMzBiYzE0ZTY4
ZGQ2Y2ZiZDMxYjAwNTQ5ZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9h
Z2VudHMvSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50LmNwcApAQCAtMTI4LDEw
OSArMTI4LDk0IEBAIHZvaWQgSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudDo6bWFpbkZyYW1lTmF2
aWdhdGVkKCkKICAgICAgICAgbV9wYXVzZU9uQWxsVGltZW91dHNCcmVha3BvaW50LT5yZXNldEhp
dENvdW50KCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudDo6c2V0RXZlbnRC
cmVha3BvaW50KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBicmVha3Bv
aW50VHlwZVN0cmluZywgY29uc3QgU3RyaW5nKiBldmVudE5hbWUsIGNvbnN0IEpTT046Ok9iamVj
dCogb3B0aW9uc1BheWxvYWQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0
b3JET01EZWJ1Z2dlckFnZW50OjpzZXRFdmVudEJyZWFrcG9pbnQoUHJvdG9jb2w6OkRPTURlYnVn
Z2VyOjpFdmVudEJyZWFrcG9pbnRUeXBlIGJyZWFrcG9pbnRUeXBlLCBjb25zdCBTdHJpbmcmIGV2
ZW50TmFtZSwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBvcHRpb25zKQogewotICAgIGlmIChicmVh
a3BvaW50VHlwZVN0cmluZy5pc0VtcHR5KCkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiYnJl
YWtwb2ludFR5cGUgaXMgZW1wdHkiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgUHJv
dG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOwogCi0gICAgYXV0byBicmVha3BvaW50VHlw
ZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6Okluc3BlY3RvckhlbHBlcnM6OnBhcnNlRW51bVZhbHVl
RnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpET01EZWJ1Z2dlcjo6RXZlbnRCcmVha3Bv
aW50VHlwZT4oYnJlYWtwb2ludFR5cGVTdHJpbmcpOwotICAgIGlmICghYnJlYWtwb2ludFR5cGUp
IHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSBtYWtlU3RyaW5nKCJVbmtub3duIGJyZWFrcG9pbnRU
eXBlOiAiX3MsIGJyZWFrcG9pbnRUeXBlU3RyaW5nKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIGF1dG8gYnJlYWtwb2ludCA9IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRlYnVnZ2Vy
QnJlYWtwb2ludEZyb21QYXlsb2FkKGVycm9yU3RyaW5nLCBvcHRpb25zUGF5bG9hZCk7CisgICAg
YXV0byBicmVha3BvaW50ID0gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGVidWdnZXJCcmVha3Bv
aW50RnJvbVBheWxvYWQoZXJyb3JTdHJpbmcsIFdURk1vdmUob3B0aW9ucykpOwogICAgIGlmICgh
YnJlYWtwb2ludCkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0
ZWQoZXJyb3JTdHJpbmcpOwogCi0gICAgaWYgKGV2ZW50TmFtZSAmJiAhZXZlbnROYW1lLT5pc0Vt
cHR5KCkpIHsKLSAgICAgICAgaWYgKGJyZWFrcG9pbnRUeXBlLnZhbHVlKCkgPT0gSW5zcGVjdG9y
OjpQcm90b2NvbDo6RE9NRGVidWdnZXI6OkV2ZW50QnJlYWtwb2ludFR5cGU6Okxpc3RlbmVyKSB7
Ci0gICAgICAgICAgICBpZiAoIW1fbGlzdGVuZXJCcmVha3BvaW50cy5hZGQoKmV2ZW50TmFtZSwg
YnJlYWtwb2ludC5yZWxlYXNlTm9uTnVsbCgpKSkKLSAgICAgICAgICAgICAgICBlcnJvclN0cmlu
ZyA9ICJCcmVha3BvaW50IHdpdGggZXZlbnROYW1lIGFscmVhZHkgZXhpc3RzIl9zOwotICAgICAg
ICAgICAgcmV0dXJuOworICAgIGlmICghZXZlbnROYW1lLmlzRW1wdHkoKSkgeworICAgICAgICBp
ZiAoYnJlYWtwb2ludFR5cGUgPT0gUHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpFdmVudEJyZWFrcG9p
bnRUeXBlOjpMaXN0ZW5lcikgeworICAgICAgICAgICAgaWYgKCFtX2xpc3RlbmVyQnJlYWtwb2lu
dHMuYWRkKGV2ZW50TmFtZSwgYnJlYWtwb2ludC5yZWxlYXNlTm9uTnVsbCgpKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkJyZWFrcG9pbnQgd2l0aCBldmVudE5hbWUg
YWxyZWFkeSBleGlzdHMiX3MpOworICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAgICAgfQog
Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIlVuZXhwZWN0ZWQgZXZlbnROYW1lIl9zOwotICAgICAg
ICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiVW5leHBlY3RlZCBldmVu
dE5hbWUiX3MpOwogICAgIH0KIAotICAgIHN3aXRjaCAoYnJlYWtwb2ludFR5cGUudmFsdWUoKSkg
ewotICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NRGVidWdnZXI6OkV2ZW50QnJlYWtw
b2ludFR5cGU6OkFuaW1hdGlvbkZyYW1lOgotICAgICAgICBzZXRBbmltYXRpb25GcmFtZUJyZWFr
cG9pbnQoZXJyb3JTdHJpbmcsIFdURk1vdmUoYnJlYWtwb2ludCkpOwotICAgICAgICBicmVhazsK
KyAgICBzd2l0Y2ggKGJyZWFrcG9pbnRUeXBlKSB7CisgICAgY2FzZSBQcm90b2NvbDo6RE9NRGVi
dWdnZXI6OkV2ZW50QnJlYWtwb2ludFR5cGU6OkFuaW1hdGlvbkZyYW1lOgorICAgICAgICBpZiAo
IXNldEFuaW1hdGlvbkZyYW1lQnJlYWtwb2ludChlcnJvclN0cmluZywgV1RGTW92ZShicmVha3Bv
aW50KSkpCisgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwor
ICAgICAgICByZXR1cm4geyB9OwogCi0gICAgY2FzZSBJbnNwZWN0b3I6OlByb3RvY29sOjpET01E
ZWJ1Z2dlcjo6RXZlbnRCcmVha3BvaW50VHlwZTo6SW50ZXJ2YWw6Ci0gICAgICAgIGlmICghbV9w
YXVzZU9uQWxsSW50ZXJ2YWxzQnJlYWtwb2ludCkKLSAgICAgICAgICAgIG1fcGF1c2VPbkFsbElu
dGVydmFsc0JyZWFrcG9pbnQgPSBXVEZNb3ZlKGJyZWFrcG9pbnQpOwotICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBlcnJvclN0cmluZyA9ICJCcmVha3BvaW50IGZvciBJbnRlcnZhbCBhbHJlYWR5
IGV4aXN0cyJfczsKLSAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQcm90b2NvbDo6RE9NRGVidWdn
ZXI6OkV2ZW50QnJlYWtwb2ludFR5cGU6OkludGVydmFsOgorICAgICAgICBpZiAobV9wYXVzZU9u
QWxsSW50ZXJ2YWxzQnJlYWtwb2ludCkKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3Rl
ZCgiQnJlYWtwb2ludCBmb3IgSW50ZXJ2YWwgYWxyZWFkeSBleGlzdHMiX3MpOworICAgICAgICBt
X3BhdXNlT25BbGxJbnRlcnZhbHNCcmVha3BvaW50ID0gV1RGTW92ZShicmVha3BvaW50KTsKKyAg
ICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NRGVi
dWdnZXI6OkV2ZW50QnJlYWtwb2ludFR5cGU6Okxpc3RlbmVyOgotICAgICAgICBpZiAoIW1fcGF1
c2VPbkFsbExpc3RlbmVyc0JyZWFrcG9pbnQpCi0gICAgICAgICAgICBtX3BhdXNlT25BbGxMaXN0
ZW5lcnNCcmVha3BvaW50ID0gV1RGTW92ZShicmVha3BvaW50KTsKLSAgICAgICAgZWxzZQotICAg
ICAgICAgICAgZXJyb3JTdHJpbmcgPSAiQnJlYWtwb2ludCBmb3IgTGlzdGVuZXIgYWxyZWFkeSBl
eGlzdHMiX3M7Ci0gICAgICAgIGJyZWFrOworICAgIGNhc2UgUHJvdG9jb2w6OkRPTURlYnVnZ2Vy
OjpFdmVudEJyZWFrcG9pbnRUeXBlOjpMaXN0ZW5lcjoKKyAgICAgICAgaWYgKG1fcGF1c2VPbkFs
bExpc3RlbmVyc0JyZWFrcG9pbnQpCisgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQo
IkJyZWFrcG9pbnQgZm9yIExpc3RlbmVyIGFscmVhZHkgZXhpc3RzIl9zKTsKKyAgICAgICAgbV9w
YXVzZU9uQWxsTGlzdGVuZXJzQnJlYWtwb2ludCA9IFdURk1vdmUoYnJlYWtwb2ludCk7CisgICAg
ICAgIHJldHVybiB7IH07CiAKLSAgICBjYXNlIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTURlYnVn
Z2VyOjpFdmVudEJyZWFrcG9pbnRUeXBlOjpUaW1lb3V0OgotICAgICAgICBpZiAoIW1fcGF1c2VP
bkFsbFRpbWVvdXRzQnJlYWtwb2ludCkKLSAgICAgICAgICAgIG1fcGF1c2VPbkFsbFRpbWVvdXRz
QnJlYWtwb2ludCA9IFdURk1vdmUoYnJlYWtwb2ludCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIGVycm9yU3RyaW5nID0gIkJyZWFrcG9pbnQgZm9yIFRpbWVvdXQgYWxyZWFkeSBleGlzdHMi
X3M7Ci0gICAgICAgIGJyZWFrOworICAgIGNhc2UgUHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpFdmVu
dEJyZWFrcG9pbnRUeXBlOjpUaW1lb3V0OgorICAgICAgICBpZiAobV9wYXVzZU9uQWxsVGltZW91
dHNCcmVha3BvaW50KQorICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJCcmVha3Bv
aW50IGZvciBUaW1lb3V0IGFscmVhZHkgZXhpc3RzIl9zKTsKKyAgICAgICAgbV9wYXVzZU9uQWxs
VGltZW91dHNCcmVha3BvaW50ID0gV1RGTW92ZShicmVha3BvaW50KTsKKyAgICAgICAgcmV0dXJu
IHsgfTsKICAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gbWFr
ZVVuZXhwZWN0ZWQoIk5vdCBzdXBwb3J0ZWQiKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01EZWJ1
Z2dlckFnZW50OjpyZW1vdmVFdmVudEJyZWFrcG9pbnQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5n
LCBjb25zdCBTdHJpbmcmIGJyZWFrcG9pbnRUeXBlU3RyaW5nLCBjb25zdCBTdHJpbmcqIGV2ZW50
TmFtZSkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRPTURlYnVnZ2Vy
QWdlbnQ6OnJlbW92ZUV2ZW50QnJlYWtwb2ludChQcm90b2NvbDo6RE9NRGVidWdnZXI6OkV2ZW50
QnJlYWtwb2ludFR5cGUgYnJlYWtwb2ludFR5cGUsIGNvbnN0IFN0cmluZyYgZXZlbnROYW1lKQog
ewotICAgIGlmIChicmVha3BvaW50VHlwZVN0cmluZy5pc0VtcHR5KCkpIHsKLSAgICAgICAgZXJy
b3JTdHJpbmcgPSAiYnJlYWtwb2ludFR5cGUgaXMgZW1wdHkiX3M7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOwogCi0gICAgYXV0
byBicmVha3BvaW50VHlwZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6Okluc3BlY3RvckhlbHBlcnM6
OnBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpET01EZWJ1Z2dl
cjo6RXZlbnRCcmVha3BvaW50VHlwZT4oYnJlYWtwb2ludFR5cGVTdHJpbmcpOwotICAgIGlmICgh
YnJlYWtwb2ludFR5cGUpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSBtYWtlU3RyaW5nKCJVbmtu
b3duIGJyZWFrcG9pbnRUeXBlOiAiX3MsIGJyZWFrcG9pbnRUeXBlU3RyaW5nKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIGlmIChldmVudE5hbWUgJiYgIWV2ZW50TmFtZS0+aXNFbXB0
eSgpKSB7Ci0gICAgICAgIGlmIChicmVha3BvaW50VHlwZS52YWx1ZSgpID09IEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpFdmVudEJyZWFrcG9pbnRUeXBlOjpMaXN0ZW5lcikgewot
ICAgICAgICAgICAgaWYgKCFtX2xpc3RlbmVyQnJlYWtwb2ludHMucmVtb3ZlKCpldmVudE5hbWUp
KQotICAgICAgICAgICAgICAgIGVycm9yU3RyaW5nID0gIkJyZWFrcG9pbnQgZm9yIGdpdmVuIGV2
ZW50TmFtZSBtaXNzaW5nIl9zOwotICAgICAgICAgICAgcmV0dXJuOworICAgIGlmICghZXZlbnRO
YW1lLmlzRW1wdHkoKSkgeworICAgICAgICBpZiAoYnJlYWtwb2ludFR5cGUgPT0gUHJvdG9jb2w6
OkRPTURlYnVnZ2VyOjpFdmVudEJyZWFrcG9pbnRUeXBlOjpMaXN0ZW5lcikgeworICAgICAgICAg
ICAgaWYgKCFtX2xpc3RlbmVyQnJlYWtwb2ludHMucmVtb3ZlKGV2ZW50TmFtZSkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJCcmVha3BvaW50IGZvciBnaXZlbiBldmVu
dE5hbWUgbWlzc2luZyJfcyk7CisgICAgICAgICAgICByZXR1cm4geyB9OwogICAgICAgICB9CiAK
LSAgICAgICAgZXJyb3JTdHJpbmcgPSAiVW5leHBlY3RlZCBldmVudE5hbWUiX3M7Ci0gICAgICAg
IHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJVbmV4cGVjdGVkIGV2ZW50
TmFtZSJfcyk7CiAgICAgfQogCi0gICAgc3dpdGNoIChicmVha3BvaW50VHlwZS52YWx1ZSgpKSB7
Ci0gICAgY2FzZSBJbnNwZWN0b3I6OlByb3RvY29sOjpET01EZWJ1Z2dlcjo6RXZlbnRCcmVha3Bv
aW50VHlwZTo6QW5pbWF0aW9uRnJhbWU6Ci0gICAgICAgIHNldEFuaW1hdGlvbkZyYW1lQnJlYWtw
b2ludChlcnJvclN0cmluZywgbnVsbHB0cik7Ci0gICAgICAgIGJyZWFrOworICAgIHN3aXRjaCAo
YnJlYWtwb2ludFR5cGUpIHsKKyAgICBjYXNlIFByb3RvY29sOjpET01EZWJ1Z2dlcjo6RXZlbnRC
cmVha3BvaW50VHlwZTo6QW5pbWF0aW9uRnJhbWU6CisgICAgICAgIGlmICghc2V0QW5pbWF0aW9u
RnJhbWVCcmVha3BvaW50KGVycm9yU3RyaW5nLCBudWxscHRyKSkKKyAgICAgICAgICAgIHJldHVy
biBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CisgICAgICAgIHJldHVybiB7IH07CiAKLSAg
ICBjYXNlIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpFdmVudEJyZWFrcG9pbnRU
eXBlOjpJbnRlcnZhbDoKKyAgICBjYXNlIFByb3RvY29sOjpET01EZWJ1Z2dlcjo6RXZlbnRCcmVh
a3BvaW50VHlwZTo6SW50ZXJ2YWw6CiAgICAgICAgIGlmICghbV9wYXVzZU9uQWxsSW50ZXJ2YWxz
QnJlYWtwb2ludCkKLSAgICAgICAgICAgIGVycm9yU3RyaW5nID0gIkJyZWFrcG9pbnQgZm9yIElu
dGVydmFscyBtaXNzaW5nIl9zOworICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJC
cmVha3BvaW50IGZvciBJbnRlcnZhbHMgbWlzc2luZyJfcyk7CiAgICAgICAgIG1fcGF1c2VPbkFs
bEludGVydmFsc0JyZWFrcG9pbnQgPSBudWxscHRyOwotICAgICAgICBicmVhazsKKyAgICAgICAg
cmV0dXJuIHsgfTsKIAotICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NRGVidWdnZXI6
OkV2ZW50QnJlYWtwb2ludFR5cGU6Okxpc3RlbmVyOgorICAgIGNhc2UgUHJvdG9jb2w6OkRPTURl
YnVnZ2VyOjpFdmVudEJyZWFrcG9pbnRUeXBlOjpMaXN0ZW5lcjoKICAgICAgICAgaWYgKCFtX3Bh
dXNlT25BbGxMaXN0ZW5lcnNCcmVha3BvaW50KQotICAgICAgICAgICAgZXJyb3JTdHJpbmcgPSAi
QnJlYWtwb2ludCBmb3IgTGlzdGVuZXJzIG1pc3NpbmciX3M7CisgICAgICAgICAgICByZXR1cm4g
bWFrZVVuZXhwZWN0ZWQoIkJyZWFrcG9pbnQgZm9yIExpc3RlbmVycyBtaXNzaW5nIl9zKTsKICAg
ICAgICAgbV9wYXVzZU9uQWxsTGlzdGVuZXJzQnJlYWtwb2ludCA9IG51bGxwdHI7Ci0gICAgICAg
IGJyZWFrOworICAgICAgICByZXR1cm4geyB9OwogCi0gICAgY2FzZSBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpET01EZWJ1Z2dlcjo6RXZlbnRCcmVha3BvaW50VHlwZTo6VGltZW91dDoKKyAgICBjYXNl
IFByb3RvY29sOjpET01EZWJ1Z2dlcjo6RXZlbnRCcmVha3BvaW50VHlwZTo6VGltZW91dDoKICAg
ICAgICAgaWYgKCFtX3BhdXNlT25BbGxUaW1lb3V0c0JyZWFrcG9pbnQpCi0gICAgICAgICAgICBl
cnJvclN0cmluZyA9ICJCcmVha3BvaW50IGZvciBUaW1lb3V0cyBtaXNzaW5nIl9zOworICAgICAg
ICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJCcmVha3BvaW50IGZvciBUaW1lb3V0cyBtaXNz
aW5nIl9zKTsKICAgICAgICAgbV9wYXVzZU9uQWxsVGltZW91dHNCcmVha3BvaW50ID0gbnVsbHB0
cjsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybiB7IH07CiAgICAgfQorCisgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJOb3Qgc3VwcG9y
dGVkIik7CiB9CiAKIHZvaWQgSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudDo6d2lsbEhhbmRsZUV2
ZW50KEV2ZW50JiBldmVudCwgY29uc3QgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXImIHJlZ2lzdGVy
ZWRFdmVudExpc3RlbmVyKQpAQCAtMzI5LDQ1ICszMTQsNTAgQEAgdm9pZCBJbnNwZWN0b3JET01E
ZWJ1Z2dlckFnZW50OjpkaWRGaXJlVGltZXIoYm9vbCBvbmVTaG90KQogICAgIG1fZGVidWdnZXJB
Z2VudC0+Y2FuY2VsUGF1c2VGb3JTcGVjaWFsQnJlYWtwb2ludCgqYnJlYWtwb2ludCk7CiB9CiAK
LXZvaWQgSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudDo6c2V0VVJMQnJlYWtwb2ludChFcnJvclN0
cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBib29sKiBvcHRpb25h
bElzUmVnZXgsIGNvbnN0IEpTT046Ok9iamVjdCogb3B0aW9uc1BheWxvYWQpCitQcm90b2NvbDo6
RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50OjpzZXRVUkxCcmVh
a3BvaW50KGNvbnN0IFN0cmluZyYgdXJsLCBPcHRpb25hbDxib29sPiYmIGlzUmVnZXgsIFJlZlB0
cjxKU09OOjpPYmplY3Q+JiYgb3B0aW9ucykKIHsKLSAgICBhdXRvIGJyZWFrcG9pbnQgPSBJbnNw
ZWN0b3JEZWJ1Z2dlckFnZW50OjpkZWJ1Z2dlckJyZWFrcG9pbnRGcm9tUGF5bG9hZChlcnJvclN0
cmluZywgb3B0aW9uc1BheWxvYWQpOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0
cmluZzsKKworICAgIGF1dG8gYnJlYWtwb2ludCA9IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRl
YnVnZ2VyQnJlYWtwb2ludEZyb21QYXlsb2FkKGVycm9yU3RyaW5nLCBXVEZNb3ZlKG9wdGlvbnMp
KTsKICAgICBpZiAoIWJyZWFrcG9pbnQpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJu
IG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgIGlmICh1cmwuaXNFbXB0eSgpKSB7
Ci0gICAgICAgIGlmICghbV9wYXVzZU9uQWxsVVJMc0JyZWFrcG9pbnQpCi0gICAgICAgICAgICBt
X3BhdXNlT25BbGxVUkxzQnJlYWtwb2ludCA9IFdURk1vdmUoYnJlYWtwb2ludCk7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIGVycm9yU3RyaW5nID0gIkJyZWFrcG9pbnQgZm9yIGFsbCBVUkxz
IGFscmVhZHkgZXhpc3RzIl9zOwotICAgICAgICByZXR1cm47CisgICAgICAgIGlmIChtX3BhdXNl
T25BbGxVUkxzQnJlYWtwb2ludCkKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgi
QnJlYWtwb2ludCBmb3IgYWxsIFVSTHMgYWxyZWFkeSBleGlzdHMiX3MpOworICAgICAgICBtX3Bh
dXNlT25BbGxVUkxzQnJlYWtwb2ludCA9IFdURk1vdmUoYnJlYWtwb2ludCk7CisgICAgICAgIHJl
dHVybiB7IH07CiAgICAgfQogCi0gICAgaWYgKG9wdGlvbmFsSXNSZWdleCAmJiAqb3B0aW9uYWxJ
c1JlZ2V4KSB7CisgICAgaWYgKGlzUmVnZXggJiYgKmlzUmVnZXgpIHsKICAgICAgICAgaWYgKCFt
X3VybFJlZ2V4QnJlYWtwb2ludHMuYWRkKHVybCwgYnJlYWtwb2ludC5yZWxlYXNlTm9uTnVsbCgp
KSkKLSAgICAgICAgICAgIGVycm9yU3RyaW5nID0gIkJyZWFrcG9pbnQgZm9yIGdpdmVuIHJlZ2V4
IGFscmVhZHkgZXhpc3RzIl9zOworICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJC
cmVha3BvaW50IGZvciBnaXZlbiByZWdleCBhbHJlYWR5IGV4aXN0cyJfcyk7CiAgICAgfSBlbHNl
IHsKICAgICAgICAgaWYgKCFtX3VybFRleHRCcmVha3BvaW50cy5hZGQodXJsLCBicmVha3BvaW50
LnJlbGVhc2VOb25OdWxsKCkpKQotICAgICAgICAgICAgZXJyb3JTdHJpbmcgPSAiQnJlYWtwb2lu
dCBmb3IgZ2l2ZW4gVVJMIGFscmVhZHkgZXhpc3RzIl9zOworICAgICAgICAgICAgcmV0dXJuIG1h
a2VVbmV4cGVjdGVkKCJCcmVha3BvaW50IGZvciBnaXZlbiBVUkwgYWxyZWFkeSBleGlzdHMiX3Mp
OwogICAgIH0KKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NRGVidWdn
ZXJBZ2VudDo6cmVtb3ZlVVJMQnJlYWtwb2ludChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNv
bnN0IFN0cmluZyYgdXJsLCBjb25zdCBib29sKiBvcHRpb25hbElzUmVnZXgpCitQcm90b2NvbDo6
RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50OjpyZW1vdmVVUkxC
cmVha3BvaW50KGNvbnN0IFN0cmluZyYgdXJsLCBPcHRpb25hbDxib29sPiYmIGlzUmVnZXgpCiB7
CiAgICAgaWYgKHVybC5pc0VtcHR5KCkpIHsKICAgICAgICAgaWYgKCFtX3BhdXNlT25BbGxVUkxz
QnJlYWtwb2ludCkKLSAgICAgICAgICAgIGVycm9yU3RyaW5nID0gIkJyZWFrcG9pbnQgZm9yIGFs
bCBVUkxzIG1pc3NpbmciX3M7CisgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkJy
ZWFrcG9pbnQgZm9yIGFsbCBVUkxzIG1pc3NpbmciX3MpOwogICAgICAgICBtX3BhdXNlT25BbGxV
UkxzQnJlYWtwb2ludCA9IG51bGxwdHI7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJu
IHsgfTsKICAgICB9CiAKLSAgICBpZiAob3B0aW9uYWxJc1JlZ2V4ICYmICpvcHRpb25hbElzUmVn
ZXgpIHsKKyAgICBpZiAoaXNSZWdleCAmJiAqaXNSZWdleCkgewogICAgICAgICBpZiAoIW1fdXJs
UmVnZXhCcmVha3BvaW50cy5yZW1vdmUodXJsKSkKLSAgICAgICAgICAgIGVycm9yU3RyaW5nID0g
Ik1pc3NpbmcgYnJlYWtwb2ludCBmb3IgZ2l2ZW4gcmVnZXgiX3M7CisgICAgICAgICAgICByZXR1
cm4gbWFrZVVuZXhwZWN0ZWQoIk1pc3NpbmcgYnJlYWtwb2ludCBmb3IgZ2l2ZW4gcmVnZXgiX3Mp
OwogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmICghbV91cmxUZXh0QnJlYWtwb2ludHMucmVtb3Zl
KHVybCkpCi0gICAgICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIGJyZWFrcG9pbnQgZm9y
IGdpdmVuIFVSTCJfczsKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTWlzc2lu
ZyBicmVha3BvaW50IGZvciBnaXZlbiBVUkwiX3MpOwogICAgIH0KKworICAgIHJldHVybiB7IH07
CiB9CiAKIHZvaWQgSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudDo6YnJlYWtPblVSTElmTmVlZGVk
KGNvbnN0IFN0cmluZyYgdXJsLCBVUkxCcmVha3BvaW50U291cmNlIHNvdXJjZSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NRGVidWdnZXJB
Z2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01EZWJ1
Z2dlckFnZW50LmgKaW5kZXggNGVjMGYwOGM5YjVhMWMyN2RkNDNlYTg1NDA0ZWNlNjJjOTM2ZjFm
YS4uODk2MDllY2ZjMGQ4Nzk2NzQxZDQ1NWEwM2U3ZGFjMDkxZThkY2M4ZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01EZWJ1
Z2dlckFnZW50LmgKQEAgLTUwLDggKzUwLDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3Mg
RXZlbnQ7CiBjbGFzcyBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lcjsKIAotdHlwZWRlZiBTdHJpbmcg
RXJyb3JTdHJpbmc7Ci0KIGNsYXNzIEluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQgOiBwdWJsaWMg
SW5zcGVjdG9yQWdlbnRCYXNlLCBwdWJsaWMgSW5zcGVjdG9yOjpET01EZWJ1Z2dlckJhY2tlbmRE
aXNwYXRjaGVySGFuZGxlciwgcHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yRGVidWdnZXJBZ2Vu
dDo6TGlzdGVuZXIgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEluc3BlY3RvckRPTURlYnVn
Z2VyQWdlbnQpOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwpAQCAtNjUsMTAgKzYzLDEw
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgZW5hYmxlZCgpIGNvbnN0OwogCiAgICAgLy8g
RE9NRGVidWdnZXJCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIKLSAgICB2b2lkIHNldFVSTEJyZWFr
cG9pbnQoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgYm9vbCogaXNSZWdl
eCwgY29uc3QgSlNPTjo6T2JqZWN0KiBvcHRpb25zKSBmaW5hbDsKLSAgICB2b2lkIHJlbW92ZVVS
TEJyZWFrcG9pbnQoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgYm9vbCog
aXNSZWdleCkgZmluYWw7Ci0gICAgdm9pZCBzZXRFdmVudEJyZWFrcG9pbnQoRXJyb3JTdHJpbmcm
LCBjb25zdCBTdHJpbmcmIGJyZWFrcG9pbnRUeXBlLCBjb25zdCBTdHJpbmcqIGV2ZW50TmFtZSwg
Y29uc3QgSlNPTjo6T2JqZWN0KiBvcHRpb25zKSBmaW5hbDsKLSAgICB2b2lkIHJlbW92ZUV2ZW50
QnJlYWtwb2ludChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgYnJlYWtwb2ludFR5cGUsIGNv
bnN0IFN0cmluZyogZXZlbnROYW1lKSBmaW5hbDsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpF
cnJvclN0cmluZ09yPHZvaWQ+IHNldFVSTEJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiB1cmwsIE9w
dGlvbmFsPGJvb2w+JiYgaXNSZWdleCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBvcHRpb25zKSBm
aW5hbDsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHJlbW92
ZVVSTEJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiB1cmwsIE9wdGlvbmFsPGJvb2w+JiYgaXNSZWdl
eCkgZmluYWw7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBz
ZXRFdmVudEJyZWFrcG9pbnQoSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NRGVidWdnZXI6OkV2ZW50
QnJlYWtwb2ludFR5cGUsIGNvbnN0IFN0cmluZyYgZXZlbnROYW1lLCBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiYmIG9wdGlvbnMpIGZpbmFsOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3Ry
aW5nT3I8dm9pZD4gcmVtb3ZlRXZlbnRCcmVha3BvaW50KEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRP
TURlYnVnZ2VyOjpFdmVudEJyZWFrcG9pbnRUeXBlLCBjb25zdCBTdHJpbmcmIGV2ZW50TmFtZSkg
ZmluYWw7CiAKICAgICAvLyBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpMaXN0ZW5lcgogICAgIHZv
aWQgZGVidWdnZXJXYXNFbmFibGVkKCkgb3ZlcnJpZGU7CkBAIC04OCw3ICs4Niw3IEBAIHByb3Rl
Y3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgZW5hYmxlKCk7CiAgICAgdmlydHVhbCB2b2lkIGRpc2Fi
bGUoKTsKIAotICAgIHZpcnR1YWwgdm9pZCBzZXRBbmltYXRpb25GcmFtZUJyZWFrcG9pbnQoRXJy
b3JTdHJpbmcmLCBSZWZQdHI8SlNDOjpCcmVha3BvaW50PiYmKSA9IDA7CisgICAgdmlydHVhbCBi
b29sIHNldEFuaW1hdGlvbkZyYW1lQnJlYWtwb2ludChJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJv
clN0cmluZyYsIFJlZlB0cjxKU0M6OkJyZWFrcG9pbnQ+JiYpID0gMDsKIAogICAgIEluc3BlY3Rv
cjo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudCogbV9kZWJ1Z2dlckFnZW50IHsgbnVsbHB0ciB9Owog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRP
TVN0b3JhZ2VBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3Bl
Y3RvckRPTVN0b3JhZ2VBZ2VudC5jcHAKaW5kZXggZTU5MWU5MTY5ZGYzMDQ1NDU2MjBiNTQwMzJi
NjJmYTJiYWRlY2I2ZS4uMDNhN2ZkMDhkMjA1N2MyMmNhY2RjZjg1MDU4ZjFlNGRmMDRkZDdmMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01T
dG9yYWdlQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5z
cGVjdG9yRE9NU3RvcmFnZUFnZW50LmNwcApAQCAtNzAsNDEgKzcwLDM5IEBAIHZvaWQgSW5zcGVj
dG9yRE9NU3RvcmFnZUFnZW50OjpkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9y
OjpGcm9udGVuZFJvCiAKIHZvaWQgSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50Ojp3aWxsRGVzdHJv
eUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24pCiB7Ci0gICAg
RXJyb3JTdHJpbmcgaWdub3JlZDsKLSAgICBkaXNhYmxlKGlnbm9yZWQpOworICAgIGRpc2FibGUo
KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OmVuYWJsZShFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JE
T01TdG9yYWdlQWdlbnQ6OmVuYWJsZSgpCiB7Ci0gICAgaWYgKG1faW5zdHJ1bWVudGluZ0FnZW50
cy5lbmFibGVkRE9NU3RvcmFnZUFnZW50KCkgPT0gdGhpcykgewotICAgICAgICBlcnJvclN0cmlu
ZyA9ICJET01TdG9yYWdlIGRvbWFpbiBhbHJlYWR5IGVuYWJsZWQiX3M7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9CisgICAgaWYgKG1faW5zdHJ1bWVudGluZ0FnZW50cy5lbmFibGVkRE9NU3RvcmFn
ZUFnZW50KCkgPT0gdGhpcykKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJET01TdG9y
YWdlIGRvbWFpbiBhbHJlYWR5IGVuYWJsZWQiX3MpOwogCiAgICAgbV9pbnN0cnVtZW50aW5nQWdl
bnRzLnNldEVuYWJsZWRET01TdG9yYWdlQWdlbnQodGhpcyk7CisKKyAgICByZXR1cm4geyB9Owog
fQogCi12b2lkIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6ZGlzYWJsZShFcnJvclN0cmluZyYg
ZXJyb3JTdHJpbmcpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JET01T
dG9yYWdlQWdlbnQ6OmRpc2FibGUoKQogewotICAgIGlmIChtX2luc3RydW1lbnRpbmdBZ2VudHMu
ZW5hYmxlZERPTVN0b3JhZ2VBZ2VudCgpICE9IHRoaXMpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcg
PSAiRE9NU3RvcmFnZSBkb21haW4gYWxyZWFkeSBkaXNhYmxlZCJfczsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KKyAgICBpZiAobV9pbnN0cnVtZW50aW5nQWdlbnRzLmVuYWJsZWRET01TdG9yYWdl
QWdlbnQoKSAhPSB0aGlzKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkRPTVN0b3Jh
Z2UgZG9tYWluIGFscmVhZHkgZGlzYWJsZWQiX3MpOwogCiAgICAgbV9pbnN0cnVtZW50aW5nQWdl
bnRzLnNldEVuYWJsZWRET01TdG9yYWdlQWdlbnQobnVsbHB0cik7CisKKyAgICByZXR1cm4geyB9
OwogfQogCi12b2lkIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6Z2V0RE9NU3RvcmFnZUl0ZW1z
KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgSlNPTjo6T2JqZWN0JiBzdG9yYWdlSWQs
IFJlZlB0cjxKU09OOjpBcnJheU9mPEpTT046OkFycmF5T2Y8U3RyaW5nPj4+JiBpdGVtcykKK1By
b3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpET01TdG9y
YWdlOjpJdGVtPj4+IEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6Z2V0RE9NU3RvcmFnZUl0ZW1z
KFJlZjxKU09OOjpPYmplY3Q+JiYgc3RvcmFnZUlkKQogeworICAgIFByb3RvY29sOjpFcnJvclN0
cmluZyBlcnJvclN0cmluZzsKKwogICAgIEZyYW1lKiBmcmFtZTsKLSAgICBSZWZQdHI8U3RvcmFn
ZUFyZWE+IHN0b3JhZ2VBcmVhID0gZmluZFN0b3JhZ2VBcmVhKGVycm9yU3RyaW5nLCBzdG9yYWdl
SWQsIGZyYW1lKTsKLSAgICBpZiAoIXN0b3JhZ2VBcmVhKSB7Ci0gICAgICAgIGVycm9yU3RyaW5n
ID0gIk1pc3Npbmcgc3RvcmFnZSBmb3IgZ2l2ZW4gc3RvcmFnZUlkIl9zOwotICAgICAgICByZXR1
cm47Ci0gICAgfQorICAgIFJlZlB0cjxTdG9yYWdlQXJlYT4gc3RvcmFnZUFyZWEgPSBmaW5kU3Rv
cmFnZUFyZWEoZXJyb3JTdHJpbmcsIFdURk1vdmUoc3RvcmFnZUlkKSwgZnJhbWUpOworICAgIGlm
ICghc3RvcmFnZUFyZWEpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmlu
Zyk7CiAKICAgICBhdXRvIHN0b3JhZ2VJdGVtcyA9IEpTT046OkFycmF5T2Y8SlNPTjo6QXJyYXlP
ZjxTdHJpbmc+Pjo6Y3JlYXRlKCk7Ci0KICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3Rv
cmFnZUFyZWEtPmxlbmd0aCgpOyArK2kpIHsKICAgICAgICAgU3RyaW5nIGtleSA9IHN0b3JhZ2VB
cmVhLT5rZXkoaSk7CiAgICAgICAgIFN0cmluZyB2YWx1ZSA9IHN0b3JhZ2VBcmVhLT5pdGVtKGtl
eSk7CkBAIC0xMTQsNDcgKzExMiw1MiBAQCB2b2lkIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6
Z2V0RE9NU3RvcmFnZUl0ZW1zKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29ucwogICAgICAg
ICBlbnRyeS0+YWRkSXRlbSh2YWx1ZSk7CiAgICAgICAgIHN0b3JhZ2VJdGVtcy0+YWRkSXRlbShX
VEZNb3ZlKGVudHJ5KSk7CiAgICAgfQotCi0gICAgaXRlbXMgPSBXVEZNb3ZlKHN0b3JhZ2VJdGVt
cyk7CisgICAgcmV0dXJuIFdURk1vdmUoc3RvcmFnZUl0ZW1zKTsKIH0KIAotdm9pZCBJbnNwZWN0
b3JET01TdG9yYWdlQWdlbnQ6OnNldERPTVN0b3JhZ2VJdGVtKEVycm9yU3RyaW5nJiBlcnJvclN0
cmluZywgY29uc3QgSlNPTjo6T2JqZWN0JiBzdG9yYWdlSWQsIGNvbnN0IFN0cmluZyYga2V5LCBj
b25zdCBTdHJpbmcmIHZhbHVlKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVj
dG9yRE9NU3RvcmFnZUFnZW50OjpzZXRET01TdG9yYWdlSXRlbShSZWY8SlNPTjo6T2JqZWN0PiYm
IHN0b3JhZ2VJZCwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7Cisg
ICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAgICAgRnJhbWUqIGZyYW1l
OwotICAgIFJlZlB0cjxTdG9yYWdlQXJlYT4gc3RvcmFnZUFyZWEgPSBmaW5kU3RvcmFnZUFyZWEo
ZXJyb3JTdHJpbmcsIHN0b3JhZ2VJZCwgZnJhbWUpOwotICAgIGlmICghc3RvcmFnZUFyZWEpIHsK
LSAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWlzc2luZyBzdG9yYWdlIGZvciBnaXZlbiBzdG9yYWdl
SWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgUmVmUHRyPFN0b3JhZ2VBcmVhPiBz
dG9yYWdlQXJlYSA9IGZpbmRTdG9yYWdlQXJlYShlcnJvclN0cmluZywgV1RGTW92ZShzdG9yYWdl
SWQpLCBmcmFtZSk7CisgICAgaWYgKCFzdG9yYWdlQXJlYSkKKyAgICAgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgIGJvb2wgcXVvdGFFeGNlcHRpb24gPSBmYWxz
ZTsKICAgICBzdG9yYWdlQXJlYS0+c2V0SXRlbShmcmFtZSwga2V5LCB2YWx1ZSwgcXVvdGFFeGNl
cHRpb24pOwogICAgIGlmIChxdW90YUV4Y2VwdGlvbikKLSAgICAgICAgZXJyb3JTdHJpbmcgPSBE
T01FeGNlcHRpb246Om5hbWUoUXVvdGFFeGNlZWRlZEVycm9yKTsKKyAgICAgICAgcmV0dXJuIG1h
a2VVbmV4cGVjdGVkKERPTUV4Y2VwdGlvbjo6bmFtZShRdW90YUV4Y2VlZGVkRXJyb3IpKTsKKwor
ICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjpyZW1v
dmVET01TdG9yYWdlSXRlbShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IEpTT046Ok9i
amVjdCYgc3RvcmFnZUlkLCBjb25zdCBTdHJpbmcmIGtleSkKK1Byb3RvY29sOjpFcnJvclN0cmlu
Z09yPHZvaWQ+IEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6cmVtb3ZlRE9NU3RvcmFnZUl0ZW0o
UmVmPEpTT046Ok9iamVjdD4mJiBzdG9yYWdlSWQsIGNvbnN0IFN0cmluZyYga2V5KQogeworICAg
IFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIEZyYW1lKiBmcmFtZTsK
LSAgICBSZWZQdHI8U3RvcmFnZUFyZWE+IHN0b3JhZ2VBcmVhID0gZmluZFN0b3JhZ2VBcmVhKGVy
cm9yU3RyaW5nLCBzdG9yYWdlSWQsIGZyYW1lKTsKLSAgICBpZiAoIXN0b3JhZ2VBcmVhKSB7Ci0g
ICAgICAgIGVycm9yU3RyaW5nID0gIk1pc3Npbmcgc3RvcmFnZSBmb3IgZ2l2ZW4gc3RvcmFnZUlk
Il9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIFJlZlB0cjxTdG9yYWdlQXJlYT4gc3Rv
cmFnZUFyZWEgPSBmaW5kU3RvcmFnZUFyZWEoZXJyb3JTdHJpbmcsIFdURk1vdmUoc3RvcmFnZUlk
KSwgZnJhbWUpOworICAgIGlmICghc3RvcmFnZUFyZWEpCisgICAgICAgIHJldHVybiBtYWtlVW5l
eHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAgICBzdG9yYWdlQXJlYS0+cmVtb3ZlSXRlbShmcmFt
ZSwga2V5KTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NU3RvcmFn
ZUFnZW50OjpjbGVhckRPTVN0b3JhZ2VJdGVtcyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNv
bnN0IEpTT046Ok9iamVjdCYgc3RvcmFnZUlkKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9p
ZD4gSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjpjbGVhckRPTVN0b3JhZ2VJdGVtcyhSZWY8SlNP
Tjo6T2JqZWN0PiYmIHN0b3JhZ2VJZCkKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJy
b3JTdHJpbmc7CisKICAgICBGcmFtZSogZnJhbWU7Ci0gICAgYXV0byBzdG9yYWdlQXJlYSA9IGZp
bmRTdG9yYWdlQXJlYShlcnJvclN0cmluZywgc3RvcmFnZUlkLCBmcmFtZSk7Ci0gICAgaWYgKCFz
dG9yYWdlQXJlYSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIHN0b3JhZ2UgZm9y
IGdpdmVuIHN0b3JhZ2VJZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBhdXRvIHN0
b3JhZ2VBcmVhID0gZmluZFN0b3JhZ2VBcmVhKGVycm9yU3RyaW5nLCBXVEZNb3ZlKHN0b3JhZ2VJ
ZCksIGZyYW1lKTsKKyAgICBpZiAoIXN0b3JhZ2VBcmVhKQorICAgICAgICByZXR1cm4gbWFrZVVu
ZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCiAgICAgc3RvcmFnZUFyZWEtPmNsZWFyKGZyYW1lKTsK
KworICAgIHJldHVybiB7IH07CiB9CiAKIFN0cmluZyBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6
OnN0b3JhZ2VJZChTdG9yYWdlJiBzdG9yYWdlKQpAQCAtMTY4LDkgKzE3MSw5IEBAIFN0cmluZyBJ
bnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OnN0b3JhZ2VJZChTdG9yYWdlJiBzdG9yYWdlKQogICAg
IHJldHVybiBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OnN0b3JhZ2VJZChzZWN1cml0eU9yaWdp
bi5wdHIoKSwgaXNMb2NhbFN0b3JhZ2UpLT50b0pTT05TdHJpbmcoKTsKIH0KIAotUmVmUHRyPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkRPTVN0b3JhZ2U6OlN0b3JhZ2VJZD4gSW5zcGVjdG9yRE9NU3Rv
cmFnZUFnZW50OjpzdG9yYWdlSWQoU2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2luLCBib29s
IGlzTG9jYWxTdG9yYWdlKQorUmVmPFByb3RvY29sOjpET01TdG9yYWdlOjpTdG9yYWdlSWQ+IElu
c3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6c3RvcmFnZUlkKFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0
eU9yaWdpbiwgYm9vbCBpc0xvY2FsU3RvcmFnZSkKIHsKLSAgICByZXR1cm4gSW5zcGVjdG9yOjpQ
cm90b2NvbDo6RE9NU3RvcmFnZTo6U3RvcmFnZUlkOjpjcmVhdGUoKQorICAgIHJldHVybiBQcm90
b2NvbDo6RE9NU3RvcmFnZTo6U3RvcmFnZUlkOjpjcmVhdGUoKQogICAgICAgICAuc2V0U2VjdXJp
dHlPcmlnaW4oc2VjdXJpdHlPcmlnaW4tPnRvUmF3U3RyaW5nKCkpCiAgICAgICAgIC5zZXRJc0xv
Y2FsU3RvcmFnZShpc0xvY2FsU3RvcmFnZSkKICAgICAgICAgLnJlbGVhc2UoKTsKQEAgLTE3OCwy
OCArMTgxLDI4IEBAIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpET01TdG9yYWdlOjpTdG9y
YWdlSWQ+IEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6c3RvCiAKIHZvaWQgSW5zcGVjdG9yRE9N
U3RvcmFnZUFnZW50OjpkaWREaXNwYXRjaERPTVN0b3JhZ2VFdmVudChjb25zdCBTdHJpbmcmIGtl
eSwgY29uc3QgU3RyaW5nJiBvbGRWYWx1ZSwgY29uc3QgU3RyaW5nJiBuZXdWYWx1ZSwgU3RvcmFn
ZVR5cGUgc3RvcmFnZVR5cGUsIFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbikKIHsKLSAg
ICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NU3RvcmFnZTo6U3RvcmFnZUlkPiBpZCA9
IEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6c3RvcmFnZUlkKHNlY3VyaXR5T3JpZ2luLCBzdG9y
YWdlVHlwZSA9PSBTdG9yYWdlVHlwZTo6TG9jYWwpOworICAgIGF1dG8gaWQgPSBJbnNwZWN0b3JE
T01TdG9yYWdlQWdlbnQ6OnN0b3JhZ2VJZChzZWN1cml0eU9yaWdpbiwgc3RvcmFnZVR5cGUgPT0g
U3RvcmFnZVR5cGU6OkxvY2FsKTsKIAogICAgIGlmIChrZXkuaXNOdWxsKCkpCi0gICAgICAgIG1f
ZnJvbnRlbmREaXNwYXRjaGVyLT5kb21TdG9yYWdlSXRlbXNDbGVhcmVkKGlkKTsKKyAgICAgICAg
bV9mcm9udGVuZERpc3BhdGNoZXItPmRvbVN0b3JhZ2VJdGVtc0NsZWFyZWQoV1RGTW92ZShpZCkp
OwogICAgIGVsc2UgaWYgKG5ld1ZhbHVlLmlzTnVsbCgpKQotICAgICAgICBtX2Zyb250ZW5kRGlz
cGF0Y2hlci0+ZG9tU3RvcmFnZUl0ZW1SZW1vdmVkKGlkLCBrZXkpOworICAgICAgICBtX2Zyb250
ZW5kRGlzcGF0Y2hlci0+ZG9tU3RvcmFnZUl0ZW1SZW1vdmVkKFdURk1vdmUoaWQpLCBrZXkpOwog
ICAgIGVsc2UgaWYgKG9sZFZhbHVlLmlzTnVsbCgpKQotICAgICAgICBtX2Zyb250ZW5kRGlzcGF0
Y2hlci0+ZG9tU3RvcmFnZUl0ZW1BZGRlZChpZCwga2V5LCBuZXdWYWx1ZSk7CisgICAgICAgIG1f
ZnJvbnRlbmREaXNwYXRjaGVyLT5kb21TdG9yYWdlSXRlbUFkZGVkKFdURk1vdmUoaWQpLCBrZXks
IG5ld1ZhbHVlKTsKICAgICBlbHNlCi0gICAgICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5kb21T
dG9yYWdlSXRlbVVwZGF0ZWQoaWQsIGtleSwgb2xkVmFsdWUsIG5ld1ZhbHVlKTsKKyAgICAgICAg
bV9mcm9udGVuZERpc3BhdGNoZXItPmRvbVN0b3JhZ2VJdGVtVXBkYXRlZChXVEZNb3ZlKGlkKSwg
a2V5LCBvbGRWYWx1ZSwgbmV3VmFsdWUpOwogfQogCi1SZWZQdHI8U3RvcmFnZUFyZWE+IEluc3Bl
Y3RvckRPTVN0b3JhZ2VBZ2VudDo6ZmluZFN0b3JhZ2VBcmVhKEVycm9yU3RyaW5nJiBlcnJvclN0
cmluZywgY29uc3QgSlNPTjo6T2JqZWN0JiBzdG9yYWdlSWQsIEZyYW1lKiYgdGFyZ2V0RnJhbWUp
CitSZWZQdHI8U3RvcmFnZUFyZWE+IEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6ZmluZFN0b3Jh
Z2VBcmVhKFByb3RvY29sOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIFJlZjxKU09OOjpPYmpl
Y3Q+JiYgc3RvcmFnZUlkLCBGcmFtZSomIHRhcmdldEZyYW1lKQogewotICAgIFN0cmluZyBzZWN1
cml0eU9yaWdpbjsKLSAgICBpZiAoIXN0b3JhZ2VJZC5nZXRTdHJpbmcoInNlY3VyaXR5T3JpZ2lu
Il9zLCBzZWN1cml0eU9yaWdpbikpIHsKKyAgICBhdXRvIHNlY3VyaXR5T3JpZ2luID0gc3RvcmFn
ZUlkLT5nZXRTdHJpbmcoUHJvdG9jb2w6OkRPTVN0b3JhZ2U6OlN0b3JhZ2VJZDo6c2VjdXJpdHlP
cmlnaW5LZXkpOworICAgIGlmICghc2VjdXJpdHlPcmlnaW4pIHsKICAgICAgICAgZXJyb3JTdHJp
bmcgPSAiTWlzc2luZyBzZWN1cml0eU9yaWdpbiBpbiBnaXZlbiBzdG9yYWdlSWQiOwogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKLSAgICBib29sIGlzTG9jYWxTdG9yYWdlID0gZmFs
c2U7Ci0gICAgaWYgKCFzdG9yYWdlSWQuZ2V0Qm9vbGVhbigiaXNMb2NhbFN0b3JhZ2UiX3MsIGlz
TG9jYWxTdG9yYWdlKSkgeworICAgIGF1dG8gaXNMb2NhbFN0b3JhZ2UgPSBzdG9yYWdlSWQtPmdl
dEJvb2xlYW4oUHJvdG9jb2w6OkRPTVN0b3JhZ2U6OlN0b3JhZ2VJZDo6aXNMb2NhbFN0b3JhZ2VL
ZXkpOworICAgIGlmICghaXNMb2NhbFN0b3JhZ2UpIHsKICAgICAgICAgZXJyb3JTdHJpbmcgPSAi
TWlzc2luZyBpc0xvY2FsU3RvcmFnZSBpbiBnaXZlbiBzdG9yYWdlSWQiOwogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKICAgICB9CkBAIC0yMTAsNyArMjEzLDcgQEAgUmVmUHRyPFN0b3JhZ2VBcmVh
PiBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OmZpbmRTdG9yYWdlQXJlYShFcnJvclN0cmluZyYg
ZXJyb3IKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCi0gICAgaWYgKCFpc0xvY2Fs
U3RvcmFnZSkKKyAgICBpZiAoISppc0xvY2FsU3RvcmFnZSkKICAgICAgICAgcmV0dXJuIG1faW5z
cGVjdGVkUGFnZS5zZXNzaW9uU3RvcmFnZSgpLT5zdG9yYWdlQXJlYSh0YXJnZXRGcmFtZS0+ZG9j
dW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKS5kYXRhKCkpOwogICAgIHJldHVybiBtX2luc3BlY3Rl
ZFBhZ2Uuc3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyKCkubG9jYWxTdG9yYWdlQXJlYSgqdGFyZ2V0
RnJhbWUtPmRvY3VtZW50KCkpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2FnZW50cy9JbnNwZWN0b3JET01TdG9yYWdlQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50LmgKaW5kZXggZGRiYjVkNTM0
N2YzYmVhYmUzY2ZhYjIwMWQ2ODM4Yzg5NmQyMWUzOS4uMzM4NmNiODc5ZjExNzhjMWI5NjM1Nzc1
YzlhMGU4NjRmNWI5NGM1MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Fn
ZW50cy9JbnNwZWN0b3JET01TdG9yYWdlQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTVN0b3JhZ2VBZ2VudC5oCkBAIC00NSwzNiArNDUsMzQg
QEAgY2xhc3MgUGFnZTsKIGNsYXNzIFNlY3VyaXR5T3JpZ2luOwogY2xhc3MgU3RvcmFnZTsKIAot
dHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7Ci0KIGNsYXNzIEluc3BlY3RvckRPTVN0b3JhZ2VB
Z2VudCBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3JBZ2VudEJhc2UsIHB1YmxpYyBJbnNwZWN0b3I6
OkRPTVN0b3JhZ2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewogICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudCk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CiBwdWJsaWM6CiAgICAgSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50KFBhZ2VBZ2VudENv
bnRleHQmKTsKLSAgICB+SW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50KCkgb3ZlcnJpZGU7CisgICAg
fkluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudCgpOwogCiAgICAgLy8gSW5zcGVjdG9yQWdlbnRCYXNl
Ci0gICAgdm9pZCBkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9udGVu
ZFJvdXRlciosIEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXIqKSBvdmVycmlkZTsKLSAgICB2
b2lkIHdpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlzY29ubmVjdFJl
YXNvbikgb3ZlcnJpZGU7CisgICAgdm9pZCBkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5z
cGVjdG9yOjpGcm9udGVuZFJvdXRlciosIEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXIqKTsK
KyAgICB2b2lkIHdpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlzY29u
bmVjdFJlYXNvbik7CiAKICAgICAvLyBET01TdG9yYWdlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVy
Ci0gICAgdm9pZCBlbmFibGUoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2b2lkIGRpc2Fi
bGUoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2b2lkIGdldERPTVN0b3JhZ2VJdGVtcyhF
cnJvclN0cmluZyYsIGNvbnN0IEpTT046Ok9iamVjdCYgc3RvcmFnZUlkLCBSZWZQdHI8SlNPTjo6
QXJyYXlPZjxKU09OOjpBcnJheU9mPFN0cmluZz4+PiYgaXRlbXMpIG92ZXJyaWRlOwotICAgIHZv
aWQgc2V0RE9NU3RvcmFnZUl0ZW0oRXJyb3JTdHJpbmcmLCBjb25zdCBKU09OOjpPYmplY3QmIHN0
b3JhZ2VJZCwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUpIG92ZXJyaWRl
OwotICAgIHZvaWQgcmVtb3ZlRE9NU3RvcmFnZUl0ZW0oRXJyb3JTdHJpbmcmLCBjb25zdCBKU09O
OjpPYmplY3QmIHN0b3JhZ2VJZCwgY29uc3QgU3RyaW5nJiBrZXkpIG92ZXJyaWRlOwotICAgIHZv
aWQgY2xlYXJET01TdG9yYWdlSXRlbXMoRXJyb3JTdHJpbmcmLCBjb25zdCBKU09OOjpPYmplY3Qm
IHN0b3JhZ2VJZCkgb3ZlcnJpZGU7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJp
bmdPcjx2b2lkPiBlbmFibGUoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmlu
Z09yPHZvaWQ+IGRpc2FibGUoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmlu
Z09yPFJlZjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTVN0b3JhZ2U6Okl0
ZW0+Pj4gZ2V0RE9NU3RvcmFnZUl0ZW1zKFJlZjxKU09OOjpPYmplY3Q+JiYgc3RvcmFnZUlkKTsK
KyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHNldERPTVN0b3Jh
Z2VJdGVtKFJlZjxKU09OOjpPYmplY3Q+JiYgc3RvcmFnZUlkLCBjb25zdCBTdHJpbmcmIGtleSwg
Y29uc3QgU3RyaW5nJiB2YWx1ZSk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJp
bmdPcjx2b2lkPiByZW1vdmVET01TdG9yYWdlSXRlbShSZWY8SlNPTjo6T2JqZWN0PiYmIHN0b3Jh
Z2VJZCwgY29uc3QgU3RyaW5nJiBrZXkpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8dm9pZD4gY2xlYXJET01TdG9yYWdlSXRlbXMoUmVmPEpTT046Ok9iamVjdD4mJiBz
dG9yYWdlSWQpOwogCiAgICAgLy8gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uCiAgICAgdm9pZCBk
aWREaXNwYXRjaERPTVN0b3JhZ2VFdmVudChjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5n
JiBvbGRWYWx1ZSwgY29uc3QgU3RyaW5nJiBuZXdWYWx1ZSwgU3RvcmFnZVR5cGUsIFNlY3VyaXR5
T3JpZ2luKik7CiAKICAgICAvLyBDb21tYW5kTGluZUFQSQogICAgIHN0YXRpYyBTdHJpbmcgc3Rv
cmFnZUlkKFN0b3JhZ2UmKTsKLSAgICBzdGF0aWMgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRPTVN0b3JhZ2U6OlN0b3JhZ2VJZD4gc3RvcmFnZUlkKFNlY3VyaXR5T3JpZ2luKiwgYm9vbCBp
c0xvY2FsU3RvcmFnZSk7CisgICAgc3RhdGljIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET01T
dG9yYWdlOjpTdG9yYWdlSWQ+IHN0b3JhZ2VJZChTZWN1cml0eU9yaWdpbiosIGJvb2wgaXNMb2Nh
bFN0b3JhZ2UpOwogCiBwcml2YXRlOgotICAgIFJlZlB0cjxTdG9yYWdlQXJlYT4gZmluZFN0b3Jh
Z2VBcmVhKEVycm9yU3RyaW5nJiwgY29uc3QgSlNPTjo6T2JqZWN0JiwgRnJhbWUqJik7CisgICAg
UmVmUHRyPFN0b3JhZ2VBcmVhPiBmaW5kU3RvcmFnZUFyZWEoSW5zcGVjdG9yOjpQcm90b2NvbDo6
RXJyb3JTdHJpbmcmLCBSZWY8SlNPTjo6T2JqZWN0PiYmIHN0b3JhZ2VJZCwgRnJhbWUqJik7CiAK
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW5zcGVjdG9yOjpET01TdG9yYWdlRnJvbnRlbmREaXNwYXRj
aGVyPiBtX2Zyb250ZW5kRGlzcGF0Y2hlcjsKICAgICBSZWZQdHI8SW5zcGVjdG9yOjpET01TdG9y
YWdlQmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRhdGFiYXNlQWdlbnQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JEYXRhYmFzZUFnZW50
LmNwcAppbmRleCA0YjlhNTVkZTU1N2JlOTQ2NzE2ZjVlMDIxMTE0NDM3MTE4MmQ2ZDUyLi4yOWMx
MTRmMjY3NjgzZDI1MDY1MjdhZDdjZjlkNTdmYmIxZTkyZjNjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRhdGFiYXNlQWdlbnQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5j
cHAKQEAgLTU5LDcgKzU5LDcgQEAgbmFtZXNwYWNlIHsKIAogdm9pZCByZXBvcnRUcmFuc2FjdGlv
bkZhaWxlZChFeGVjdXRlU1FMQ2FsbGJhY2smIHJlcXVlc3RDYWxsYmFjaywgU1FMRXJyb3ImIGVy
cm9yKQogewotICAgIGF1dG8gZXJyb3JPYmplY3QgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRh
YmFzZTo6RXJyb3I6OmNyZWF0ZSgpCisgICAgYXV0byBlcnJvck9iamVjdCA9IFByb3RvY29sOjpE
YXRhYmFzZTo6RXJyb3I6OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRNZXNzYWdlKGVycm9yLm1lc3Nh
Z2VJc29sYXRlZENvcHkoKSkKICAgICAgICAgLnNldENvZGUoZXJyb3IuY29kZSgpKQogICAgICAg
ICAucmVsZWFzZSgpOwpAQCAtMjMwLDUxICsyMzAsNDggQEAgdm9pZCBJbnNwZWN0b3JEYXRhYmFz
ZUFnZW50OjpkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9udGVuZFJv
dXQKIAogdm9pZCBJbnNwZWN0b3JEYXRhYmFzZUFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5k
QmFja2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24pCiB7Ci0gICAgRXJyb3JTdHJpbmcg
aWdub3JlZDsKLSAgICBkaXNhYmxlKGlnbm9yZWQpOworICAgIGRpc2FibGUoKTsKIH0KIAotdm9p
ZCBJbnNwZWN0b3JEYXRhYmFzZUFnZW50OjplbmFibGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5n
KQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yRGF0YWJhc2VBZ2VudDo6
ZW5hYmxlKCkKIHsKLSAgICBpZiAobV9pbnN0cnVtZW50aW5nQWdlbnRzLmVuYWJsZWREYXRhYmFz
ZUFnZW50KCkgPT0gdGhpcykgewotICAgICAgICBlcnJvclN0cmluZyA9ICJEYXRhYmFzZSBkb21h
aW4gYWxyZWFkeSBlbmFibGVkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICht
X2luc3RydW1lbnRpbmdBZ2VudHMuZW5hYmxlZERhdGFiYXNlQWdlbnQoKSA9PSB0aGlzKQorICAg
ICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkRhdGFiYXNlIGRvbWFpbiBhbHJlYWR5IGVuYWJs
ZWQiX3MpOwogCiAgICAgbV9pbnN0cnVtZW50aW5nQWdlbnRzLnNldEVuYWJsZWREYXRhYmFzZUFn
ZW50KHRoaXMpOwogCiAgICAgZm9yIChhdXRvJiBkYXRhYmFzZSA6IERhdGFiYXNlVHJhY2tlcjo6
c2luZ2xldG9uKCkub3BlbkRhdGFiYXNlcygpKQogICAgICAgICBkaWRPcGVuRGF0YWJhc2UoZGF0
YWJhc2UuZ2V0KCkpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JEYXRh
YmFzZUFnZW50OjpkaXNhYmxlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZykKK1Byb3RvY29sOjpF
cnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRhdGFiYXNlQWdlbnQ6OmRpc2FibGUoKQogewot
ICAgIGlmIChtX2luc3RydW1lbnRpbmdBZ2VudHMuZW5hYmxlZERhdGFiYXNlQWdlbnQoKSAhPSB0
aGlzKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIkRhdGFiYXNlIGRvbWFpbiBhbHJlYWR5IGRp
c2FibGVkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmIChtX2luc3RydW1lbnRp
bmdBZ2VudHMuZW5hYmxlZERhdGFiYXNlQWdlbnQoKSAhPSB0aGlzKQorICAgICAgICByZXR1cm4g
bWFrZVVuZXhwZWN0ZWQoIkRhdGFiYXNlIGRvbWFpbiBhbHJlYWR5IGRpc2FibGVkIl9zKTsKIAog
ICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy5zZXRFbmFibGVkRGF0YWJhc2VBZ2VudChudWxscHRy
KTsKIAogICAgIG1fcmVzb3VyY2VzLmNsZWFyKCk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12
b2lkIEluc3BlY3RvckRhdGFiYXNlQWdlbnQ6OmdldERhdGFiYXNlVGFibGVOYW1lcyhFcnJvclN0
cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VJZCwgUmVmUHRyPEpTT046
OkFycmF5T2Y8U3RyaW5nPj4mIG5hbWVzKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEpT
T046OkFycmF5T2Y8U3RyaW5nPj4+IEluc3BlY3RvckRhdGFiYXNlQWdlbnQ6OmdldERhdGFiYXNl
VGFibGVOYW1lcyhjb25zdCBQcm90b2NvbDo6RGF0YWJhc2U6OkRhdGFiYXNlSWQmIGRhdGFiYXNl
SWQpCiB7Ci0gICAgaWYgKG1faW5zdHJ1bWVudGluZ0FnZW50cy5lbmFibGVkRGF0YWJhc2VBZ2Vu
dCgpICE9IHRoaXMpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiRGF0YWJhc2UgZG9tYWluIG11
c3QgYmUgZW5hYmxlZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG5hbWVzID0g
SlNPTjo6QXJyYXlPZjxTdHJpbmc+OjpjcmVhdGUoKTsKKyAgICBpZiAobV9pbnN0cnVtZW50aW5n
QWdlbnRzLmVuYWJsZWREYXRhYmFzZUFnZW50KCkgIT0gdGhpcykKKyAgICAgICAgcmV0dXJuIG1h
a2VVbmV4cGVjdGVkKCJEYXRhYmFzZSBkb21haW4gbXVzdCBiZSBlbmFibGVkIl9zKTsKIAorICAg
IGF1dG8gbmFtZXMgPSBKU09OOjpBcnJheU9mPFN0cmluZz46OmNyZWF0ZSgpOwogICAgIGlmIChh
dXRvKiBkYXRhYmFzZSA9IGRhdGFiYXNlRm9ySWQoZGF0YWJhc2VJZCkpIHsKICAgICAgICAgZm9y
IChhdXRvJiB0YWJsZU5hbWUgOiBkYXRhYmFzZS0+dGFibGVOYW1lcygpKQogICAgICAgICAgICAg
bmFtZXMtPmFkZEl0ZW0odGFibGVOYW1lKTsKICAgICB9CisgICAgcmV0dXJuIFdURk1vdmUobmFt
ZXMpOwogfQogCi12b2lkIEluc3BlY3RvckRhdGFiYXNlQWdlbnQ6OmV4ZWN1dGVTUUwoY29uc3Qg
U3RyaW5nJiBkYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIHF1ZXJ5LCBSZWY8RXhlY3V0ZVNRTENh
bGxiYWNrPiYmIHJlcXVlc3RDYWxsYmFjaykKK3ZvaWQgSW5zcGVjdG9yRGF0YWJhc2VBZ2VudDo6
ZXhlY3V0ZVNRTChjb25zdCBQcm90b2NvbDo6RGF0YWJhc2U6OkRhdGFiYXNlSWQmIGRhdGFiYXNl
SWQsIGNvbnN0IFN0cmluZyYgcXVlcnksIFJlZjxFeGVjdXRlU1FMQ2FsbGJhY2s+JiYgcmVxdWVz
dENhbGxiYWNrKQogewogICAgIGlmIChtX2luc3RydW1lbnRpbmdBZ2VudHMuZW5hYmxlZERhdGFi
YXNlQWdlbnQoKSAhPSB0aGlzKSB7CiAgICAgICAgIHJlcXVlc3RDYWxsYmFjay0+c2VuZEZhaWx1
cmUoIkRhdGFiYXNlIGRvbWFpbiBtdXN0IGJlIGVuYWJsZWQiX3MpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JEYXRhYmFzZUFnZW50LmggYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRhdGFiYXNlQWdlbnQuaApp
bmRleCA0MzA1MDMxOTFjZGNiOTg3OWZkYjY1NTEzOWMxNGJiNzdhNzM3NDJmLi4wMWNlZjQzOWI0
YWM2ZGFkMmU0MTI2YjU0MzQxNmM1Mzk0MzJjYmM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRhdGFiYXNlQWdlbnQuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRhdGFiYXNlQWdlbnQuaApAQCAtNDEs
MjQgKzQxLDIyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIERhdGFiYXNlOwogY2xhc3Mg
SW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZTsKIAotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7
Ci0KIGNsYXNzIEluc3BlY3RvckRhdGFiYXNlQWdlbnQgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9y
QWdlbnRCYXNlLCBwdWJsaWMgSW5zcGVjdG9yOjpEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFu
ZGxlciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW5zcGVjdG9yRGF0YWJhc2VBZ2VudCk7
CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgSW5zcGVjdG9yRGF0
YWJhc2VBZ2VudChXZWJBZ2VudENvbnRleHQmKTsKLSAgICB+SW5zcGVjdG9yRGF0YWJhc2VBZ2Vu
dCgpIG92ZXJyaWRlOworICAgIH5JbnNwZWN0b3JEYXRhYmFzZUFnZW50KCk7CiAKICAgICAvLyBJ
bnNwZWN0b3JBZ2VudEJhc2UKLSAgICB2b2lkIGRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJ
bnNwZWN0b3I6OkZyb250ZW5kUm91dGVyKiwgSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlciop
IG92ZXJyaWRlOwotICAgIHZvaWQgd2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVj
dG9yOjpEaXNjb25uZWN0UmVhc29uKSBvdmVycmlkZTsKKyAgICB2b2lkIGRpZENyZWF0ZUZyb250
ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kUm91dGVyKiwgSW5zcGVjdG9yOjpCYWNr
ZW5kRGlzcGF0Y2hlciopOworICAgIHZvaWQgd2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQo
SW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKTsKIAogICAgIC8vIERhdGFiYXNlQmFja2VuZERp
c3BhdGNoZXJIYW5kbGVyCi0gICAgdm9pZCBlbmFibGUoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsK
LSAgICB2b2lkIGRpc2FibGUoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2b2lkIGdldERh
dGFiYXNlVGFibGVOYW1lcyhFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VJZCwg
UmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4mIG5hbWVzKSBvdmVycmlkZTsKLSAgICB2b2lk
IGV4ZWN1dGVTUUwoY29uc3QgU3RyaW5nJiBkYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIHF1ZXJ5
LCBSZWY8RXhlY3V0ZVNRTENhbGxiYWNrPiYmKSBvdmVycmlkZTsKKyAgICBJbnNwZWN0b3I6OlBy
b3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGVuYWJsZSgpOworICAgIEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZGlzYWJsZSgpOworICAgIEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEpTT046OkFycmF5T2Y8U3RyaW5nPj4+IGdldERhdGFi
YXNlVGFibGVOYW1lcyhjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RGF0YWJh
c2VJZCYpOworICAgIHZvaWQgZXhlY3V0ZVNRTChjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpE
YXRhYmFzZTo6RGF0YWJhc2VJZCYsIGNvbnN0IFN0cmluZyYgcXVlcnksIFJlZjxFeGVjdXRlU1FM
Q2FsbGJhY2s+JiYpOwogCiAgICAgLy8gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uCiAgICAgdm9p
ZCBkaWRDb21taXRMb2FkKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
YWdlbnRzL0luc3BlY3RvckluZGV4ZWREQkFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9hZ2VudHMvSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQuY3BwCmluZGV4IGZmOGYzMGY0MDNm
ODVjN2RkYmUzMWIxMGUwM2NlZjVmY2RmN2YwMDYuLmExNDVlMDRlYjIxOGRlOGE0MmZmODk4Mjk4
YjhiZWE2ODJjNGVkZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2Vu
dHMvSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9hZ2VudHMvSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQuY3BwCkBAIC03MCwyNiArNzAsNiBA
QAogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdDb25j
YXRlbmF0ZU51bWJlcnMuaD4KIAotdXNpbmcgSlNPTjo6QXJyYXlPZjsKLXVzaW5nIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkluZGV4ZWREQjo6RGF0YWJhc2VXaXRoT2JqZWN0U3RvcmVzOwotdXNpbmcg
SW5zcGVjdG9yOjpQcm90b2NvbDo6SW5kZXhlZERCOjpEYXRhRW50cnk7Ci11c2luZyBJbnNwZWN0
b3I6OlByb3RvY29sOjpJbmRleGVkREI6OktleTsKLXVzaW5nIEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkluZGV4ZWREQjo6S2V5UGF0aDsKLXVzaW5nIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkluZGV4ZWRE
Qjo6S2V5UmFuZ2U7Ci11c2luZyBJbnNwZWN0b3I6OlByb3RvY29sOjpJbmRleGVkREI6Ok9iamVj
dFN0b3JlOwotdXNpbmcgSW5zcGVjdG9yOjpQcm90b2NvbDo6SW5kZXhlZERCOjpPYmplY3RTdG9y
ZUluZGV4OwotCi10eXBlZGVmIEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNr
QmFzZSBSZXF1ZXN0Q2FsbGJhY2s7Ci10eXBlZGVmIEluc3BlY3Rvcjo6SW5kZXhlZERCQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyOjpSZXF1ZXN0RGF0YWJhc2VOYW1lc0NhbGxiYWNrIFJlcXVlc3RE
YXRhYmFzZU5hbWVzQ2FsbGJhY2s7Ci10eXBlZGVmIEluc3BlY3Rvcjo6SW5kZXhlZERCQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyOjpSZXF1ZXN0RGF0YWJhc2VDYWxsYmFjayBSZXF1ZXN0RGF0YWJh
c2VDYWxsYmFjazsKLXR5cGVkZWYgSW5zcGVjdG9yOjpJbmRleGVkREJCYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXI6OlJlcXVlc3REYXRhQ2FsbGJhY2sgUmVxdWVzdERhdGFDYWxsYmFjazsKLXR5cGVk
ZWYgSW5zcGVjdG9yOjpJbmRleGVkREJCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkNsZWFyT2Jq
ZWN0U3RvcmVDYWxsYmFjayBDbGVhck9iamVjdFN0b3JlQ2FsbGJhY2s7Ci0KLXR5cGVkZWYgU3Ry
aW5nIEVycm9yU3RyaW5nOwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLXVzaW5nIEVycm9yU3Ry
aW5nT3IgPSBFeHBlY3RlZDxULCBFcnJvclN0cmluZz47Ci0KIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKQEAgLTEwMyw3ICs4Myw3IEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIH5FeGVjdXRhYmxlV2l0aERhdGFiYXNlKCkgPSBkZWZhdWx0OwogICAgIHZv
aWQgc3RhcnQoSURCRmFjdG9yeSosIFNlY3VyaXR5T3JpZ2luKiwgY29uc3QgU3RyaW5nJiBkYXRh
YmFzZU5hbWUpOwogICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlKElEQkRhdGFiYXNlJikgPSAwOwot
ICAgIHZpcnR1YWwgUmVxdWVzdENhbGxiYWNrJiByZXF1ZXN0Q2FsbGJhY2soKSA9IDA7CisgICAg
dmlydHVhbCBCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlJiByZXF1ZXN0Q2FsbGJhY2so
KSA9IDA7CiAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCgpIGNvbnN0IHsgcmV0
dXJuIG1fY29udGV4dDsgfQogcHJpdmF0ZToKICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBt
X2NvbnRleHQ7CkBAIC0xNzEsMjAgKzE1MSwyMCBAQCB2b2lkIEV4ZWN1dGFibGVXaXRoRGF0YWJh
c2U6OnN0YXJ0KElEQkZhY3RvcnkqIGlkYkZhY3RvcnksIFNlY3VyaXR5T3JpZ2luKiwgY29ucwog
fQogCiAKLXN0YXRpYyBSZWZQdHI8S2V5UGF0aD4ga2V5UGF0aEZyb21JREJLZXlQYXRoKGNvbnN0
IE9wdGlvbmFsPElEQktleVBhdGg+JiBpZGJLZXlQYXRoKQorc3RhdGljIFJlZjxQcm90b2NvbDo6
SW5kZXhlZERCOjpLZXlQYXRoPiBrZXlQYXRoRnJvbUlEQktleVBhdGgoY29uc3QgT3B0aW9uYWw8
SURCS2V5UGF0aD4mIGlkYktleVBhdGgpCiB7CiAgICAgaWYgKCFpZGJLZXlQYXRoKQotICAgICAg
ICByZXR1cm4gS2V5UGF0aDo6Y3JlYXRlKCkuc2V0VHlwZShLZXlQYXRoOjpUeXBlOjpOdWxsKS5y
ZWxlYXNlKCk7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6SW5kZXhlZERCOjpLZXlQYXRoOjpj
cmVhdGUoKS5zZXRUeXBlKFByb3RvY29sOjpJbmRleGVkREI6OktleVBhdGg6OlR5cGU6Ok51bGwp
LnJlbGVhc2UoKTsKIAogICAgIGF1dG8gdmlzaXRvciA9IFdURjo6bWFrZVZpc2l0b3IoW10oY29u
c3QgU3RyaW5nJiBzdHJpbmcpIHsKLSAgICAgICAgYXV0byBrZXlQYXRoID0gS2V5UGF0aDo6Y3Jl
YXRlKCkuc2V0VHlwZShLZXlQYXRoOjpUeXBlOjpTdHJpbmcpLnJlbGVhc2UoKTsKKyAgICAgICAg
YXV0byBrZXlQYXRoID0gUHJvdG9jb2w6OkluZGV4ZWREQjo6S2V5UGF0aDo6Y3JlYXRlKCkuc2V0
VHlwZShQcm90b2NvbDo6SW5kZXhlZERCOjpLZXlQYXRoOjpUeXBlOjpTdHJpbmcpLnJlbGVhc2Uo
KTsKICAgICAgICAga2V5UGF0aC0+c2V0U3RyaW5nKHN0cmluZyk7CiAgICAgICAgIHJldHVybiBr
ZXlQYXRoOwogICAgIH0sIFtdKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiB2ZWN0b3IpIHsKICAgICAg
ICAgYXV0byBhcnJheSA9IEpTT046OkFycmF5T2Y8U3RyaW5nPjo6Y3JlYXRlKCk7CiAgICAgICAg
IGZvciAoYXV0byYgc3RyaW5nIDogdmVjdG9yKQogICAgICAgICAgICAgYXJyYXktPmFkZEl0ZW0o
c3RyaW5nKTsKLSAgICAgICAgYXV0byBrZXlQYXRoID0gS2V5UGF0aDo6Y3JlYXRlKCkuc2V0VHlw
ZShLZXlQYXRoOjpUeXBlOjpBcnJheSkucmVsZWFzZSgpOworICAgICAgICBhdXRvIGtleVBhdGgg
PSBQcm90b2NvbDo6SW5kZXhlZERCOjpLZXlQYXRoOjpjcmVhdGUoKS5zZXRUeXBlKFByb3RvY29s
OjpJbmRleGVkREI6OktleVBhdGg6OlR5cGU6OkFycmF5KS5yZWxlYXNlKCk7CiAgICAgICAgIGtl
eVBhdGgtPnNldEFycmF5KFdURk1vdmUoYXJyYXkpKTsKICAgICAgICAgcmV0dXJuIGtleVBhdGg7
CiAgICAgfSk7CkBAIC0yMTcsNyArMTk3LDcgQEAgc3RhdGljIFJlZlB0cjxJREJJbmRleD4gaW5k
ZXhGb3JPYmplY3RTdG9yZShJREJPYmplY3RTdG9yZSogaWRiT2JqZWN0U3RvcmUsIGNvbnMKIAog
Y2xhc3MgRGF0YWJhc2VMb2FkZXIgZmluYWwgOiBwdWJsaWMgRXhlY3V0YWJsZVdpdGhEYXRhYmFz
ZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxEYXRhYmFzZUxvYWRlcj4gY3JlYXRlKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFJlZjxSZXF1ZXN0RGF0YWJhc2VDYWxsYmFjaz4m
JiByZXF1ZXN0Q2FsbGJhY2spCisgICAgc3RhdGljIFJlZjxEYXRhYmFzZUxvYWRlcj4gY3JlYXRl
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFJlZjxJbmRleGVkREJCYWNrZW5kRGlz
cGF0Y2hlckhhbmRsZXI6OlJlcXVlc3REYXRhYmFzZUNhbGxiYWNrPiYmIHJlcXVlc3RDYWxsYmFj
aykKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERhdGFiYXNlTG9hZGVyKGNv
bnRleHQsIFdURk1vdmUocmVxdWVzdENhbGxiYWNrKSkpOwogICAgIH0KQEAgLTIzMCwxNyArMjEw
LDE3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybjsKICAgICAKICAgICAgICAgYXV0byYg
ZGF0YWJhc2VJbmZvID0gZGF0YWJhc2UuaW5mbygpOwotICAgICAgICBhdXRvIG9iamVjdFN0b3Jl
cyA9IEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6SW5kZXhlZERCOjpPYmplY3RT
dG9yZT46OmNyZWF0ZSgpOworICAgICAgICBhdXRvIG9iamVjdFN0b3JlcyA9IEpTT046OkFycmF5
T2Y8UHJvdG9jb2w6OkluZGV4ZWREQjo6T2JqZWN0U3RvcmU+OjpjcmVhdGUoKTsKICAgICAgICAg
YXV0byBvYmplY3RTdG9yZU5hbWVzID0gZGF0YWJhc2VJbmZvLm9iamVjdFN0b3JlTmFtZXMoKTsK
ICAgICAgICAgZm9yIChhdXRvJiBuYW1lIDogb2JqZWN0U3RvcmVOYW1lcykgewogICAgICAgICAg
ICAgYXV0byogb2JqZWN0U3RvcmVJbmZvID0gZGF0YWJhc2VJbmZvLmluZm9Gb3JFeGlzdGluZ09i
amVjdFN0b3JlKG5hbWUpOwogICAgICAgICAgICAgaWYgKCFvYmplY3RTdG9yZUluZm8pCiAgICAg
ICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgICAgIGF1dG8gaW5kZXhlcyA9IEpTT046
OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6SW5kZXhlZERCOjpPYmplY3RTdG9yZUluZGV4
Pjo6Y3JlYXRlKCk7CisgICAgICAgICAgICBhdXRvIGluZGV4ZXMgPSBKU09OOjpBcnJheU9mPFBy
b3RvY29sOjpJbmRleGVkREI6Ok9iamVjdFN0b3JlSW5kZXg+OjpjcmVhdGUoKTsKICAgICAKICAg
ICAgICAgICAgIGZvciAoYXV0byYgaW5kZXhJbmZvIDogb2JqZWN0U3RvcmVJbmZvLT5pbmRleE1h
cCgpLnZhbHVlcygpKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBvYmplY3RTdG9yZUluZGV4ID0g
T2JqZWN0U3RvcmVJbmRleDo6Y3JlYXRlKCkKKyAgICAgICAgICAgICAgICBhdXRvIG9iamVjdFN0
b3JlSW5kZXggPSBQcm90b2NvbDo6SW5kZXhlZERCOjpPYmplY3RTdG9yZUluZGV4OjpjcmVhdGUo
KQogICAgICAgICAgICAgICAgICAgICAuc2V0TmFtZShpbmRleEluZm8ubmFtZSgpKQogICAgICAg
ICAgICAgICAgICAgICAuc2V0S2V5UGF0aChrZXlQYXRoRnJvbUlEQktleVBhdGgoaW5kZXhJbmZv
LmtleVBhdGgoKSkpCiAgICAgICAgICAgICAgICAgICAgIC5zZXRVbmlxdWUoaW5kZXhJbmZvLnVu
aXF1ZSgpKQpAQCAtMjQ5LDcgKzIyOSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBpbmRl
eGVzLT5hZGRJdGVtKFdURk1vdmUob2JqZWN0U3RvcmVJbmRleCkpOwogICAgICAgICAgICAgfQog
ICAgIAotICAgICAgICAgICAgYXV0byBvYmplY3RTdG9yZSA9IE9iamVjdFN0b3JlOjpjcmVhdGUo
KQorICAgICAgICAgICAgYXV0byBvYmplY3RTdG9yZSA9IFByb3RvY29sOjpJbmRleGVkREI6Ok9i
amVjdFN0b3JlOjpjcmVhdGUoKQogICAgICAgICAgICAgICAgIC5zZXROYW1lKG9iamVjdFN0b3Jl
SW5mby0+bmFtZSgpKQogICAgICAgICAgICAgICAgIC5zZXRLZXlQYXRoKGtleVBhdGhGcm9tSURC
S2V5UGF0aChvYmplY3RTdG9yZUluZm8tPmtleVBhdGgoKSkpCiAgICAgICAgICAgICAgICAgLnNl
dEF1dG9JbmNyZW1lbnQob2JqZWN0U3RvcmVJbmZvLT5hdXRvSW5jcmVtZW50KCkpCkBAIC0yNTgs
NyArMjM4LDcgQEAgcHVibGljOgogICAgICAgICAgICAgb2JqZWN0U3RvcmVzLT5hZGRJdGVtKFdU
Rk1vdmUob2JqZWN0U3RvcmUpKTsKICAgICAgICAgfQogICAgIAotICAgICAgICBhdXRvIHJlc3Vs
dCA9IERhdGFiYXNlV2l0aE9iamVjdFN0b3Jlczo6Y3JlYXRlKCkKKyAgICAgICAgYXV0byByZXN1
bHQgPSBQcm90b2NvbDo6SW5kZXhlZERCOjpEYXRhYmFzZVdpdGhPYmplY3RTdG9yZXM6OmNyZWF0
ZSgpCiAgICAgICAgICAgICAuc2V0TmFtZShkYXRhYmFzZUluZm8ubmFtZSgpKQogICAgICAgICAg
ICAgLnNldFZlcnNpb24oZGF0YWJhc2VJbmZvLnZlcnNpb24oKSkKICAgICAgICAgICAgIC5zZXRP
YmplY3RTdG9yZXMoV1RGTW92ZShvYmplY3RTdG9yZXMpKQpAQCAtMjY2LDkyICsyNDYsOTYgQEAg
cHVibGljOgogICAgICAgICBtX3JlcXVlc3RDYWxsYmFjay0+c2VuZFN1Y2Nlc3MoV1RGTW92ZShy
ZXN1bHQpKTsKICAgICB9CiAKLSAgICBSZXF1ZXN0Q2FsbGJhY2smIHJlcXVlc3RDYWxsYmFjaygp
IG92ZXJyaWRlIHsgcmV0dXJuIG1fcmVxdWVzdENhbGxiYWNrLmdldCgpOyB9CisgICAgQmFja2Vu
ZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZSYgcmVxdWVzdENhbGxiYWNrKCkgb3ZlcnJpZGUgeyBy
ZXR1cm4gbV9yZXF1ZXN0Q2FsbGJhY2suZ2V0KCk7IH0KIHByaXZhdGU6Ci0gICAgRGF0YWJhc2VM
b2FkZXIoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUmVmPFJlcXVlc3REYXRhYmFz
ZUNhbGxiYWNrPiYmIHJlcXVlc3RDYWxsYmFjaykKKyAgICBEYXRhYmFzZUxvYWRlcihTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBSZWY8SW5kZXhlZERCQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyOjpSZXF1ZXN0RGF0YWJhc2VDYWxsYmFjaz4mJiByZXF1ZXN0Q2FsbGJhY2spCiAgICAg
ICAgIDogRXhlY3V0YWJsZVdpdGhEYXRhYmFzZShjb250ZXh0KQogICAgICAgICAsIG1fcmVxdWVz
dENhbGxiYWNrKFdURk1vdmUocmVxdWVzdENhbGxiYWNrKSkgeyB9Ci0gICAgUmVmPFJlcXVlc3RE
YXRhYmFzZUNhbGxiYWNrPiBtX3JlcXVlc3RDYWxsYmFjazsKKyAgICBSZWY8SW5kZXhlZERCQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyOjpSZXF1ZXN0RGF0YWJhc2VDYWxsYmFjaz4gbV9yZXF1ZXN0
Q2FsbGJhY2s7CiB9OwogCi1zdGF0aWMgUmVmUHRyPElEQktleT4gaWRiS2V5RnJvbUluc3BlY3Rv
ck9iamVjdChKU09OOjpPYmplY3QqIGtleSkKK3N0YXRpYyBSZWZQdHI8SURCS2V5PiBpZGJLZXlG
cm9tSW5zcGVjdG9yT2JqZWN0KFJlZjxKU09OOjpPYmplY3Q+JiYga2V5KQogewotICAgIFN0cmlu
ZyB0eXBlOwotICAgIGlmICgha2V5LT5nZXRTdHJpbmcoInR5cGUiLCB0eXBlKSkKKyAgICBhdXRv
IHR5cGVTdHJpbmcgPSBrZXktPmdldFN0cmluZyhQcm90b2NvbDo6SW5kZXhlZERCOjpLZXk6OnR5
cGVLZXkpOworICAgIGlmICghdHlwZVN0cmluZykKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAK
LSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiBudW1iZXJUeXBlKE1BS0Vf
U1RBVElDX1NUUklOR19JTVBMKCJudW1iZXIiKSk7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVk
PGNvbnN0IFN0cmluZz4gc3RyaW5nVHlwZShNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgic3RyaW5n
IikpOwotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IGRhdGVUeXBlKE1B
S0VfU1RBVElDX1NUUklOR19JTVBMKCJkYXRlIikpOwotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxjb25zdCBTdHJpbmc+IGFycmF5VHlwZShNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgiYXJyYXki
KSk7CisgICAgYXV0byB0eXBlID0gUHJvdG9jb2w6OkhlbHBlcnM6OnBhcnNlRW51bVZhbHVlRnJv
bVN0cmluZzxQcm90b2NvbDo6SW5kZXhlZERCOjpLZXk6OlR5cGU+KHR5cGVTdHJpbmcpOworICAg
IGlmICghdHlwZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBSZWZQdHI8SURCS2V5
PiBpZGJLZXk7Ci0gICAgaWYgKHR5cGUgPT0gbnVtYmVyVHlwZSkgewotICAgICAgICBkb3VibGUg
bnVtYmVyOwotICAgICAgICBpZiAoIWtleS0+Z2V0RG91YmxlKCJudW1iZXIiLCBudW1iZXIpKQor
ICAgIHN3aXRjaCAoKnR5cGUpIHsKKyAgICBjYXNlIFByb3RvY29sOjpJbmRleGVkREI6OktleTo6
VHlwZTo6TnVtYmVyOiB7CisgICAgICAgIGF1dG8gbnVtYmVyID0ga2V5LT5nZXREb3VibGUoUHJv
dG9jb2w6OkluZGV4ZWREQjo6S2V5OjpudW1iZXJLZXkpOworICAgICAgICBpZiAoIW51bWJlcikK
ICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICBpZGJLZXkgPSBJREJLZXk6OmNy
ZWF0ZU51bWJlcihudW1iZXIpOwotICAgIH0gZWxzZSBpZiAodHlwZSA9PSBzdHJpbmdUeXBlKSB7
Ci0gICAgICAgIFN0cmluZyBzdHJpbmc7Ci0gICAgICAgIGlmICgha2V5LT5nZXRTdHJpbmcoInN0
cmluZyIsIHN0cmluZykpCisgICAgICAgIHJldHVybiBJREJLZXk6OmNyZWF0ZU51bWJlcigqbnVt
YmVyKTsKKyAgICB9CisKKyAgICBjYXNlIFByb3RvY29sOjpJbmRleGVkREI6OktleTo6VHlwZTo6
U3RyaW5nOiB7CisgICAgICAgIGF1dG8gc3RyaW5nID0ga2V5LT5nZXRTdHJpbmcoUHJvdG9jb2w6
OkluZGV4ZWREQjo6S2V5OjpzdHJpbmdLZXkpOworICAgICAgICBpZiAoIXN0cmluZykKICAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICBpZGJLZXkgPSBJREJLZXk6OmNyZWF0ZVN0
cmluZyhzdHJpbmcpOwotICAgIH0gZWxzZSBpZiAodHlwZSA9PSBkYXRlVHlwZSkgewotICAgICAg
ICBkb3VibGUgZGF0ZTsKLSAgICAgICAgaWYgKCFrZXktPmdldERvdWJsZSgiZGF0ZSIsIGRhdGUp
KQorICAgICAgICByZXR1cm4gSURCS2V5OjpjcmVhdGVTdHJpbmcoc3RyaW5nKTsKKyAgICB9CisK
KyAgICBjYXNlIFByb3RvY29sOjpJbmRleGVkREI6OktleTo6VHlwZTo6RGF0ZTogeworICAgICAg
ICBhdXRvIGRhdGUgPSBrZXktPmdldERvdWJsZShQcm90b2NvbDo6SW5kZXhlZERCOjpLZXk6OmRh
dGVLZXkpOworICAgICAgICBpZiAoIWRhdGUpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICAgICAgaWRiS2V5ID0gSURCS2V5OjpjcmVhdGVEYXRlKGRhdGUpOwotICAgIH0gZWxzZSBp
ZiAodHlwZSA9PSBhcnJheVR5cGUpIHsKKyAgICAgICAgcmV0dXJuIElEQktleTo6Y3JlYXRlRGF0
ZSgqZGF0ZSk7CisgICAgfQorCisgICAgY2FzZSBQcm90b2NvbDo6SW5kZXhlZERCOjpLZXk6OlR5
cGU6OkFycmF5OiB7CisgICAgICAgIGF1dG8gYXJyYXkgPSBrZXktPmdldEFycmF5KFByb3RvY29s
OjpJbmRleGVkREI6OktleTo6YXJyYXlLZXkpOworICAgICAgICBpZiAoIWFycmF5KQorICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisKICAgICAgICAgVmVjdG9yPFJlZlB0cjxJREJLZXk+PiBr
ZXlBcnJheTsKLSAgICAgICAgUmVmUHRyPEpTT046OkFycmF5PiBhcnJheTsKLSAgICAgICAgaWYg
KCFrZXktPmdldEFycmF5KCJhcnJheSIsIGFycmF5KSkKLSAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFycmF5LT5sZW5ndGgoKTsgKytp
KSB7Ci0gICAgICAgICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHZhbHVlID0gYXJyYXktPmdldChp
KTsKLSAgICAgICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG9iamVjdDsKLSAgICAgICAgICAg
IGlmICghdmFsdWUtPmFzT2JqZWN0KG9iamVjdCkpCisgICAgICAgICAgICBhdXRvIG9iamVjdCA9
IGFycmF5LT5nZXQoaSktPmFzT2JqZWN0KCk7CisgICAgICAgICAgICBpZiAoIW9iamVjdCkKICAg
ICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgICAgIGtleUFycmF5LmFwcGVu
ZChpZGJLZXlGcm9tSW5zcGVjdG9yT2JqZWN0KG9iamVjdC5nZXQoKSkpOworICAgICAgICAgICAg
a2V5QXJyYXkuYXBwZW5kKGlkYktleUZyb21JbnNwZWN0b3JPYmplY3Qob2JqZWN0LnJlbGVhc2VO
b25OdWxsKCkpKTsKICAgICAgICAgfQotICAgICAgICBpZGJLZXkgPSBJREJLZXk6OmNyZWF0ZUFy
cmF5KGtleUFycmF5KTsKLSAgICB9IGVsc2UKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
ICAgIHJldHVybiBJREJLZXk6OmNyZWF0ZUFycmF5KGtleUFycmF5KTsKKyAgICB9CisgICAgfQog
Ci0gICAgcmV0dXJuIGlkYktleTsKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1
cm4gbnVsbHB0cjsKIH0KIAotc3RhdGljIFJlZlB0cjxJREJLZXlSYW5nZT4gaWRiS2V5UmFuZ2VG
cm9tS2V5UmFuZ2UoY29uc3QgSlNPTjo6T2JqZWN0KiBrZXlSYW5nZSkKK3N0YXRpYyBSZWZQdHI8
SURCS2V5UmFuZ2U+IGlkYktleVJhbmdlRnJvbUtleVJhbmdlKEpTT046Ok9iamVjdCYga2V5UmFu
Z2UpCiB7CiAgICAgUmVmUHRyPElEQktleT4gaWRiTG93ZXI7Ci0gICAgUmVmUHRyPEpTT046Ok9i
amVjdD4gbG93ZXI7Ci0gICAgaWYgKGtleVJhbmdlLT5nZXRPYmplY3QoImxvd2VyIl9zLCBsb3dl
cikpIHsKLSAgICAgICAgaWRiTG93ZXIgPSBpZGJLZXlGcm9tSW5zcGVjdG9yT2JqZWN0KGxvd2Vy
LmdldCgpKTsKKyAgICBpZiAoYXV0byBsb3dlciA9IGtleVJhbmdlLmdldE9iamVjdChQcm90b2Nv
bDo6SW5kZXhlZERCOjpLZXlSYW5nZTo6bG93ZXJLZXkpKSB7CisgICAgICAgIGlkYkxvd2VyID0g
aWRiS2V5RnJvbUluc3BlY3Rvck9iamVjdChsb3dlci5yZWxlYXNlTm9uTnVsbCgpKTsKICAgICAg
ICAgaWYgKCFpZGJMb3dlcikKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAog
ICAgIFJlZlB0cjxJREJLZXk+IGlkYlVwcGVyOwotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHVw
cGVyOwotICAgIGlmIChrZXlSYW5nZS0+Z2V0T2JqZWN0KCJ1cHBlciJfcywgdXBwZXIpKSB7Ci0g
ICAgICAgIGlkYlVwcGVyID0gaWRiS2V5RnJvbUluc3BlY3Rvck9iamVjdCh1cHBlci5nZXQoKSk7
CisgICAgaWYgKGF1dG8gdXBwZXIgPSBrZXlSYW5nZS5nZXRPYmplY3QoUHJvdG9jb2w6OkluZGV4
ZWREQjo6S2V5UmFuZ2U6OnVwcGVyS2V5KSkgeworICAgICAgICBpZGJVcHBlciA9IGlkYktleUZy
b21JbnNwZWN0b3JPYmplY3QodXBwZXIucmVsZWFzZU5vbk51bGwoKSk7CiAgICAgICAgIGlmICgh
aWRiVXBwZXIpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKLSAgICBib29s
IGxvd2VyT3BlbjsKLSAgICBpZiAoIWtleVJhbmdlLT5nZXRCb29sZWFuKCJsb3dlck9wZW4iX3Ms
IGxvd2VyT3BlbikpCisgICAgYXV0byBsb3dlck9wZW4gPSBrZXlSYW5nZS5nZXRCb29sZWFuKFBy
b3RvY29sOjpJbmRleGVkREI6OktleVJhbmdlOjpsb3dlck9wZW5LZXkpOworICAgIGlmICghbG93
ZXJPcGVuKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIGJvb2wgdXBwZXJPcGVuOwot
ICAgIGlmICgha2V5UmFuZ2UtPmdldEJvb2xlYW4oInVwcGVyT3BlbiJfcywgdXBwZXJPcGVuKSkK
KyAgICBhdXRvIHVwcGVyT3BlbiA9IGtleVJhbmdlLmdldEJvb2xlYW4oUHJvdG9jb2w6OkluZGV4
ZWREQjo6S2V5UmFuZ2U6OnVwcGVyT3BlbktleSk7CisgICAgaWYgKCF1cHBlck9wZW4pCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJuIElEQktleVJhbmdlOjpjcmVhdGUoV1RG
TW92ZShpZGJMb3dlciksIFdURk1vdmUoaWRiVXBwZXIpLCBsb3dlck9wZW4sIHVwcGVyT3Blbik7
CisgICAgcmV0dXJuIElEQktleVJhbmdlOjpjcmVhdGUoV1RGTW92ZShpZGJMb3dlciksIFdURk1v
dmUoaWRiVXBwZXIpLCAqbG93ZXJPcGVuLCAqdXBwZXJPcGVuKTsKIH0KIAogY2xhc3MgT3BlbkN1
cnNvckNhbGxiYWNrIGZpbmFsIDogcHVibGljIEV2ZW50TGlzdGVuZXIgewogcHVibGljOgotICAg
IHN0YXRpYyBSZWY8T3BlbkN1cnNvckNhbGxiYWNrPiBjcmVhdGUoSW5qZWN0ZWRTY3JpcHQgaW5q
ZWN0ZWRTY3JpcHQsIFJlZjxSZXF1ZXN0RGF0YUNhbGxiYWNrPiYmIHJlcXVlc3RDYWxsYmFjaywg
aW50IHNraXBDb3VudCwgdW5zaWduZWQgcGFnZVNpemUpCisgICAgc3RhdGljIFJlZjxPcGVuQ3Vy
c29yQ2FsbGJhY2s+IGNyZWF0ZShJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdCwgUmVmPElu
ZGV4ZWREQkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UmVxdWVzdERhdGFDYWxsYmFjaz4mJiBy
ZXF1ZXN0Q2FsbGJhY2ssIGludCBza2lwQ291bnQsIHVuc2lnbmVkIHBhZ2VTaXplKQogICAgIHsK
ICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgT3BlbkN1cnNvckNhbGxiYWNrKGluamVjdGVk
U2NyaXB0LCBXVEZNb3ZlKHJlcXVlc3RDYWxsYmFjayksIHNraXBDb3VudCwgcGFnZVNpemUpKTsK
ICAgICB9CkBAIC00MDUsMTMgKzM4OSwyMyBAQCBwdWJsaWM6CiAgICAgICAgIH0KIAogICAgICAg
ICBhdXRvKiBsZXhpY2FsR2xvYmFsT2JqZWN0ID0gY29udGV4dC5leGVjU3RhdGUoKTsKLSAgICAg
ICAgYXV0byBrZXkgPSAgdG9KUygqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmxleGljYWxHbG9iYWxP
YmplY3QsIGN1cnNvci0+a2V5KCkpOwotICAgICAgICBhdXRvIHByaW1hcnlLZXkgPSB0b0pTKCps
ZXhpY2FsR2xvYmFsT2JqZWN0LCAqbGV4aWNhbEdsb2JhbE9iamVjdCwgY3Vyc29yLT5wcmltYXJ5
S2V5KCkpOwotICAgICAgICBhdXRvIHZhbHVlID0gZGVzZXJpYWxpemVJREJWYWx1ZVRvSlNWYWx1
ZSgqbGV4aWNhbEdsb2JhbE9iamVjdCwgY3Vyc29yLT52YWx1ZSgpKTsKLSAgICAgICAgYXV0byBk
YXRhRW50cnkgPSBEYXRhRW50cnk6OmNyZWF0ZSgpCi0gICAgICAgICAgICAuc2V0S2V5KG1faW5q
ZWN0ZWRTY3JpcHQud3JhcE9iamVjdChrZXksIFN0cmluZygpLCB0cnVlKSkKLSAgICAgICAgICAg
IC5zZXRQcmltYXJ5S2V5KG1faW5qZWN0ZWRTY3JpcHQud3JhcE9iamVjdChwcmltYXJ5S2V5LCBT
dHJpbmcoKSwgdHJ1ZSkpCi0gICAgICAgICAgICAuc2V0VmFsdWUobV9pbmplY3RlZFNjcmlwdC53
cmFwT2JqZWN0KHZhbHVlLCBTdHJpbmcoKSwgdHJ1ZSkpCisKKyAgICAgICAgYXV0byBrZXkgPSBt
X2luamVjdGVkU2NyaXB0LndyYXBPYmplY3QodG9KUygqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmxl
eGljYWxHbG9iYWxPYmplY3QsIGN1cnNvci0+a2V5KCkpLCBTdHJpbmcoKSwgdHJ1ZSk7CisgICAg
ICAgIGlmICgha2V5KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGF1dG8gcHJpbWFy
eUtleSA9IG1faW5qZWN0ZWRTY3JpcHQud3JhcE9iamVjdCh0b0pTKCpsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCAqbGV4aWNhbEdsb2JhbE9iamVjdCwgY3Vyc29yLT5wcmltYXJ5S2V5KCkpLCBTdHJpbmco
KSwgdHJ1ZSk7CisgICAgICAgIGlmICghcHJpbWFyeUtleSkKKyAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICBhdXRvIHZhbHVlID0gbV9pbmplY3RlZFNjcmlwdC53cmFwT2JqZWN0KGRlc2Vy
aWFsaXplSURCVmFsdWVUb0pTVmFsdWUoKmxleGljYWxHbG9iYWxPYmplY3QsIGN1cnNvci0+dmFs
dWUoKSksIFN0cmluZygpLCB0cnVlKTsKKyAgICAgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgICAg
IHJldHVybjsKKworICAgICAgICBhdXRvIGRhdGFFbnRyeSA9IFByb3RvY29sOjpJbmRleGVkREI6
OkRhdGFFbnRyeTo6Y3JlYXRlKCkKKyAgICAgICAgICAgIC5zZXRLZXkoa2V5LnJlbGVhc2VOb25O
dWxsKCkpCisgICAgICAgICAgICAuc2V0UHJpbWFyeUtleShwcmltYXJ5S2V5LnJlbGVhc2VOb25O
dWxsKCkpCisgICAgICAgICAgICAuc2V0VmFsdWUodmFsdWUucmVsZWFzZU5vbk51bGwoKSkKICAg
ICAgICAgICAgIC5yZWxlYXNlKCk7CiAgICAgICAgIG1fcmVzdWx0LT5hZGRJdGVtKFdURk1vdmUo
ZGF0YUVudHJ5KSk7CiAgICAgfQpAQCAtNDI0LDI1ICs0MTgsMjUgQEAgcHVibGljOgogICAgIH0K
IAogcHJpdmF0ZToKLSAgICBPcGVuQ3Vyc29yQ2FsbGJhY2soSW5qZWN0ZWRTY3JpcHQgaW5qZWN0
ZWRTY3JpcHQsIFJlZjxSZXF1ZXN0RGF0YUNhbGxiYWNrPiYmIHJlcXVlc3RDYWxsYmFjaywgaW50
IHNraXBDb3VudCwgdW5zaWduZWQgcGFnZVNpemUpCisgICAgT3BlbkN1cnNvckNhbGxiYWNrKElu
amVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0LCBSZWY8SW5kZXhlZERCQmFja2VuZERpc3BhdGNo
ZXJIYW5kbGVyOjpSZXF1ZXN0RGF0YUNhbGxiYWNrPiYmIHJlcXVlc3RDYWxsYmFjaywgaW50IHNr
aXBDb3VudCwgdW5zaWduZWQgcGFnZVNpemUpCiAgICAgICAgIDogRXZlbnRMaXN0ZW5lcihFdmVu
dExpc3RlbmVyOjpDUFBFdmVudExpc3RlbmVyVHlwZSkKICAgICAgICAgLCBtX2luamVjdGVkU2Ny
aXB0KGluamVjdGVkU2NyaXB0KQogICAgICAgICAsIG1fcmVxdWVzdENhbGxiYWNrKFdURk1vdmUo
cmVxdWVzdENhbGxiYWNrKSkKLSAgICAgICAgLCBtX3Jlc3VsdChKU09OOjpBcnJheU9mPERhdGFF
bnRyeT46OmNyZWF0ZSgpKQorICAgICAgICAsIG1fcmVzdWx0KEpTT046OkFycmF5T2Y8UHJvdG9j
b2w6OkluZGV4ZWREQjo6RGF0YUVudHJ5Pjo6Y3JlYXRlKCkpCiAgICAgICAgICwgbV9za2lwQ291
bnQoc2tpcENvdW50KQogICAgICAgICAsIG1fcGFnZVNpemUocGFnZVNpemUpCiAgICAgewogICAg
IH0KICAgICBJbmplY3RlZFNjcmlwdCBtX2luamVjdGVkU2NyaXB0OwotICAgIFJlZjxSZXF1ZXN0
RGF0YUNhbGxiYWNrPiBtX3JlcXVlc3RDYWxsYmFjazsKLSAgICBSZWY8SlNPTjo6QXJyYXlPZjxE
YXRhRW50cnk+PiBtX3Jlc3VsdDsKKyAgICBSZWY8SW5kZXhlZERCQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyOjpSZXF1ZXN0RGF0YUNhbGxiYWNrPiBtX3JlcXVlc3RDYWxsYmFjazsKKyAgICBSZWY8
SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6SW5kZXhlZERCOjpEYXRhRW50cnk+PiBtX3Jlc3VsdDsK
ICAgICBpbnQgbV9za2lwQ291bnQ7CiAgICAgdW5zaWduZWQgbV9wYWdlU2l6ZTsKIH07CiAKIGNs
YXNzIERhdGFMb2FkZXIgZmluYWwgOiBwdWJsaWMgRXhlY3V0YWJsZVdpdGhEYXRhYmFzZSB7CiBw
dWJsaWM6Ci0gICAgc3RhdGljIFJlZjxEYXRhTG9hZGVyPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogY29udGV4dCwgUmVmPFJlcXVlc3REYXRhQ2FsbGJhY2s+JiYgcmVxdWVzdENhbGxi
YWNrLCBjb25zdCBJbmplY3RlZFNjcmlwdCYgaW5qZWN0ZWRTY3JpcHQsIGNvbnN0IFN0cmluZyYg
b2JqZWN0U3RvcmVOYW1lLCBjb25zdCBTdHJpbmcmIGluZGV4TmFtZSwgUmVmUHRyPElEQktleVJh
bmdlPiYmIGlkYktleVJhbmdlLCBpbnQgc2tpcENvdW50LCB1bnNpZ25lZCBwYWdlU2l6ZSkKKyAg
ICBzdGF0aWMgUmVmPERhdGFMb2FkZXI+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBj
b250ZXh0LCBSZWY8SW5kZXhlZERCQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpSZXF1ZXN0RGF0
YUNhbGxiYWNrPiYmIHJlcXVlc3RDYWxsYmFjaywgY29uc3QgSW5qZWN0ZWRTY3JpcHQmIGluamVj
dGVkU2NyaXB0LCBjb25zdCBTdHJpbmcmIG9iamVjdFN0b3JlTmFtZSwgY29uc3QgU3RyaW5nJiBp
bmRleE5hbWUsIFJlZlB0cjxJREJLZXlSYW5nZT4mJiBpZGJLZXlSYW5nZSwgaW50IHNraXBDb3Vu
dCwgdW5zaWduZWQgcGFnZVNpemUpCiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBEYXRhTG9hZGVyKGNvbnRleHQsIFdURk1vdmUocmVxdWVzdENhbGxiYWNrKSwgaW5qZWN0ZWRT
Y3JpcHQsIG9iamVjdFN0b3JlTmFtZSwgaW5kZXhOYW1lLCBXVEZNb3ZlKGlkYktleVJhbmdlKSwg
c2tpcENvdW50LCBwYWdlU2l6ZSkpOwogICAgIH0KQEAgLTQ5OCw4ICs0OTIsOCBAQCBwdWJsaWM6
CiAgICAgICAgIGlkYlJlcXVlc3QtPmFkZEV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLnN1Y2Nl
c3NFdmVudCwgV1RGTW92ZShvcGVuQ3Vyc29yQ2FsbGJhY2spLCBmYWxzZSk7CiAgICAgfQogCi0g
ICAgUmVxdWVzdENhbGxiYWNrJiByZXF1ZXN0Q2FsbGJhY2soKSBvdmVycmlkZSB7IHJldHVybiBt
X3JlcXVlc3RDYWxsYmFjay5nZXQoKTsgfQotICAgIERhdGFMb2FkZXIoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgUmVmPFJlcXVlc3REYXRhQ2FsbGJhY2s+
JiYgcmVxdWVzdENhbGxiYWNrLCBjb25zdCBJbmplY3RlZFNjcmlwdCYgaW5qZWN0ZWRTY3JpcHQs
IGNvbnN0IFN0cmluZyYgb2JqZWN0U3RvcmVOYW1lLCBjb25zdCBTdHJpbmcmIGluZGV4TmFtZSwg
UmVmUHRyPElEQktleVJhbmdlPiBpZGJLZXlSYW5nZSwgaW50IHNraXBDb3VudCwgdW5zaWduZWQg
cGFnZVNpemUpCisgICAgQmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZSYgcmVxdWVzdENh
bGxiYWNrKCkgb3ZlcnJpZGUgeyByZXR1cm4gbV9yZXF1ZXN0Q2FsbGJhY2suZ2V0KCk7IH0KKyAg
ICBEYXRhTG9hZGVyKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQsIFJlZjxJbmRleGVkREJCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlJlcXVlc3REYXRhQ2Fs
bGJhY2s+JiYgcmVxdWVzdENhbGxiYWNrLCBjb25zdCBJbmplY3RlZFNjcmlwdCYgaW5qZWN0ZWRT
Y3JpcHQsIGNvbnN0IFN0cmluZyYgb2JqZWN0U3RvcmVOYW1lLCBjb25zdCBTdHJpbmcmIGluZGV4
TmFtZSwgUmVmUHRyPElEQktleVJhbmdlPiBpZGJLZXlSYW5nZSwgaW50IHNraXBDb3VudCwgdW5z
aWduZWQgcGFnZVNpemUpCiAgICAgICAgIDogRXhlY3V0YWJsZVdpdGhEYXRhYmFzZShzY3JpcHRF
eGVjdXRpb25Db250ZXh0KQogICAgICAgICAsIG1fcmVxdWVzdENhbGxiYWNrKFdURk1vdmUocmVx
dWVzdENhbGxiYWNrKSkKICAgICAgICAgLCBtX2luamVjdGVkU2NyaXB0KGluamVjdGVkU2NyaXB0
KQpAQCAtNTA4LDcgKzUwMiw3IEBAIHB1YmxpYzoKICAgICAgICAgLCBtX2lkYktleVJhbmdlKFdU
Rk1vdmUoaWRiS2V5UmFuZ2UpKQogICAgICAgICAsIG1fc2tpcENvdW50KHNraXBDb3VudCkKICAg
ICAgICAgLCBtX3BhZ2VTaXplKHBhZ2VTaXplKSB7IH0KLSAgICBSZWY8UmVxdWVzdERhdGFDYWxs
YmFjaz4gbV9yZXF1ZXN0Q2FsbGJhY2s7CisgICAgUmVmPEluZGV4ZWREQkJhY2tlbmREaXNwYXRj
aGVySGFuZGxlcjo6UmVxdWVzdERhdGFDYWxsYmFjaz4gbV9yZXF1ZXN0Q2FsbGJhY2s7CiAgICAg
SW5qZWN0ZWRTY3JpcHQgbV9pbmplY3RlZFNjcmlwdDsKICAgICBTdHJpbmcgbV9vYmplY3RTdG9y
ZU5hbWU7CiAgICAgU3RyaW5nIG1faW5kZXhOYW1lOwpAQCAtNTM1LDE5ICs1MjksMjAgQEAgdm9p
ZCBJbnNwZWN0b3JJbmRleGVkREJBZ2VudDo6ZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKElu
c3BlY3Rvcjo6RnJvbnRlbmRSb3UKIAogdm9pZCBJbnNwZWN0b3JJbmRleGVkREJBZ2VudDo6d2ls
bERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKQog
ewotICAgIEVycm9yU3RyaW5nIGlnbm9yZWQ7Ci0gICAgZGlzYWJsZShpZ25vcmVkKTsKKyAgICBk
aXNhYmxlKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQ6OmVuYWJsZShFcnJv
clN0cmluZyYpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JJbmRleGVk
REJBZ2VudDo6ZW5hYmxlKCkKIHsKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3Rv
ckluZGV4ZWREQkFnZW50OjpkaXNhYmxlKEVycm9yU3RyaW5nJikKK1Byb3RvY29sOjpFcnJvclN0
cmluZ09yPHZvaWQ+IEluc3BlY3RvckluZGV4ZWREQkFnZW50OjpkaXNhYmxlKCkKIHsKKyAgICBy
ZXR1cm4geyB9OwogfQogCi1zdGF0aWMgRXJyb3JTdHJpbmdPcjxEb2N1bWVudCo+IGRvY3VtZW50
RnJvbUZyYW1lKEZyYW1lKiBmcmFtZSkKK3N0YXRpYyBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxE
b2N1bWVudCo+IGRvY3VtZW50RnJvbUZyYW1lKEZyYW1lKiBmcmFtZSkKIHsKICAgICBEb2N1bWVu
dCogZG9jdW1lbnQgPSBmcmFtZSA/IGZyYW1lLT5kb2N1bWVudCgpIDogbnVsbHB0cjsKICAgICBp
ZiAoIWRvY3VtZW50KQpAQCAtNTU2LDcgKzU1MSw3IEBAIHN0YXRpYyBFcnJvclN0cmluZ09yPERv
Y3VtZW50Kj4gZG9jdW1lbnRGcm9tRnJhbWUoRnJhbWUqIGZyYW1lKQogICAgIHJldHVybiBkb2N1
bWVudDsKIH0KIAotc3RhdGljIEVycm9yU3RyaW5nT3I8SURCRmFjdG9yeSo+IElEQkZhY3RvcnlG
cm9tRG9jdW1lbnQoRG9jdW1lbnQqIGRvY3VtZW50KQorc3RhdGljIFByb3RvY29sOjpFcnJvclN0
cmluZ09yPElEQkZhY3RvcnkqPiBJREJGYWN0b3J5RnJvbURvY3VtZW50KERvY3VtZW50KiBkb2N1
bWVudCkKIHsKICAgICBET01XaW5kb3cqIGRvbVdpbmRvdyA9IGRvY3VtZW50LT5kb21XaW5kb3co
KTsKICAgICBpZiAoIWRvbVdpbmRvdykKQEAgLTU3MSwxMyArNTY2LDEzIEBAIHN0YXRpYyBFcnJv
clN0cmluZ09yPElEQkZhY3RvcnkqPiBJREJGYWN0b3J5RnJvbURvY3VtZW50KERvY3VtZW50KiBk
b2N1bWVudCkKIAogc3RhdGljIGJvb2wgZ2V0RG9jdW1lbnRBbmRJREJGYWN0b3J5RnJvbUZyYW1l
T3JTZW5kRmFpbHVyZShGcmFtZSogZnJhbWUsIERvY3VtZW50KiYgb3V0X2RvY3VtZW50LCBJREJG
YWN0b3J5KiYgb3V0X2lkYkZhY3RvcnksIEJhY2tlbmREaXNwYXRjaGVyOjpDYWxsYmFja0Jhc2Um
IGNhbGxiYWNrKQogewotICAgIEVycm9yU3RyaW5nT3I8RG9jdW1lbnQqPiBkb2N1bWVudCA9IGRv
Y3VtZW50RnJvbUZyYW1lKGZyYW1lKTsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxEb2N1
bWVudCo+IGRvY3VtZW50ID0gZG9jdW1lbnRGcm9tRnJhbWUoZnJhbWUpOwogICAgIGlmICghZG9j
dW1lbnQuaGFzX3ZhbHVlKCkpIHsKICAgICAgICAgY2FsbGJhY2suc2VuZEZhaWx1cmUoZG9jdW1l
bnQuZXJyb3IoKSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBFcnJvclN0
cmluZ09yPElEQkZhY3RvcnkqPiBpZGJGYWN0b3J5ID0gSURCRmFjdG9yeUZyb21Eb2N1bWVudChk
b2N1bWVudC52YWx1ZSgpKTsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxJREJGYWN0b3J5
Kj4gaWRiRmFjdG9yeSA9IElEQkZhY3RvcnlGcm9tRG9jdW1lbnQoZG9jdW1lbnQudmFsdWUoKSk7
CiAgICAgaWYgKCFpZGJGYWN0b3J5Lmhhc192YWx1ZSgpKSB7CiAgICAgICAgIGNhbGxiYWNrLnNl
bmRGYWlsdXJlKGlkYkZhY3RvcnkuZXJyb3IoKSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAg
LTYyMCw3ICs2MTUsNyBAQCB2b2lkIEluc3BlY3RvckluZGV4ZWREQkFnZW50OjpyZXF1ZXN0RGF0
YWJhc2UoY29uc3QgU3RyaW5nJiBzZWN1cml0eU9yaWdpbiwgY29ucwogICAgIGRhdGFiYXNlTG9h
ZGVyLT5zdGFydChpZGJGYWN0b3J5LCAmZG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luKCksIGRhdGFi
YXNlTmFtZSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQ6OnJlcXVlc3REYXRh
KGNvbnN0IFN0cmluZyYgc2VjdXJpdHlPcmlnaW4sIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VOYW1l
LCBjb25zdCBTdHJpbmcmIG9iamVjdFN0b3JlTmFtZSwgY29uc3QgU3RyaW5nJiBpbmRleE5hbWUs
IGludCBza2lwQ291bnQsIGludCBwYWdlU2l6ZSwgY29uc3QgSlNPTjo6T2JqZWN0KiBrZXlSYW5n
ZSwgUmVmPFJlcXVlc3REYXRhQ2FsbGJhY2s+JiYgY2FsbGJhY2spCit2b2lkIEluc3BlY3Rvcklu
ZGV4ZWREQkFnZW50OjpyZXF1ZXN0RGF0YShjb25zdCBTdHJpbmcmIHNlY3VyaXR5T3JpZ2luLCBj
b25zdCBTdHJpbmcmIGRhdGFiYXNlTmFtZSwgY29uc3QgU3RyaW5nJiBvYmplY3RTdG9yZU5hbWUs
IGNvbnN0IFN0cmluZyYgaW5kZXhOYW1lLCBpbnQgc2tpcENvdW50LCBpbnQgcGFnZVNpemUsIFJl
ZlB0cjxKU09OOjpPYmplY3Q+JiYga2V5UmFuZ2UsIFJlZjxSZXF1ZXN0RGF0YUNhbGxiYWNrPiYm
IGNhbGxiYWNrKQogewogICAgIGF1dG8qIGZyYW1lID0gSW5zcGVjdG9yUGFnZUFnZW50OjpmaW5k
RnJhbWVXaXRoU2VjdXJpdHlPcmlnaW4obV9pbnNwZWN0ZWRQYWdlLCBzZWN1cml0eU9yaWdpbik7
CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50OwpAQCAtNjI5LDcgKzYyNCw3IEBAIHZvaWQgSW5zcGVj
dG9ySW5kZXhlZERCQWdlbnQ6OnJlcXVlc3REYXRhKGNvbnN0IFN0cmluZyYgc2VjdXJpdHlPcmln
aW4sIGNvbnN0IFN0CiAgICAgICAgIHJldHVybjsKIAogICAgIEluamVjdGVkU2NyaXB0IGluamVj
dGVkU2NyaXB0ID0gbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIuaW5qZWN0ZWRTY3JpcHRGb3IobWFp
bldvcmxkRXhlY1N0YXRlKGZyYW1lKSk7Ci0gICAgUmVmUHRyPElEQktleVJhbmdlPiBpZGJLZXlS
YW5nZSA9IGtleVJhbmdlID8gaWRiS2V5UmFuZ2VGcm9tS2V5UmFuZ2Uoa2V5UmFuZ2UpIDogbnVs
bHB0cjsKKyAgICBSZWZQdHI8SURCS2V5UmFuZ2U+IGlkYktleVJhbmdlID0ga2V5UmFuZ2UgPyBp
ZGJLZXlSYW5nZUZyb21LZXlSYW5nZSgqa2V5UmFuZ2UpIDogbnVsbHB0cjsKICAgICBpZiAoa2V5
UmFuZ2UgJiYgIWlkYktleVJhbmdlKSB7CiAgICAgICAgIGNhbGxiYWNrLT5zZW5kRmFpbHVyZSgi
Q291bGQgbm90IHBhcnNlIGtleSByYW5nZS4iX3MpOwogICAgICAgICByZXR1cm47CkBAIC02NDQs
NyArNjM5LDcgQEAgbmFtZXNwYWNlIHsKIGNsYXNzIENsZWFyT2JqZWN0U3RvcmVMaXN0ZW5lciBm
aW5hbCA6IHB1YmxpYyBFdmVudExpc3RlbmVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShD
bGVhck9iamVjdFN0b3JlTGlzdGVuZXIpOwogcHVibGljOgotICAgIHN0YXRpYyBSZWY8Q2xlYXJP
YmplY3RTdG9yZUxpc3RlbmVyPiBjcmVhdGUoUmVmPENsZWFyT2JqZWN0U3RvcmVDYWxsYmFjaz4g
cmVxdWVzdENhbGxiYWNrKQorICAgIHN0YXRpYyBSZWY8Q2xlYXJPYmplY3RTdG9yZUxpc3RlbmVy
PiBjcmVhdGUoUmVmPEluZGV4ZWREQkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6Q2xlYXJPYmpl
Y3RTdG9yZUNhbGxiYWNrPiByZXF1ZXN0Q2FsbGJhY2spCiAgICAgewogICAgICAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBDbGVhck9iamVjdFN0b3JlTGlzdGVuZXIoV1RGTW92ZShyZXF1ZXN0Q2Fs
bGJhY2spKSk7CiAgICAgfQpAQCAtNjY4LDIzICs2NjMsMjMgQEAgcHVibGljOgogICAgICAgICBt
X3JlcXVlc3RDYWxsYmFjay0+c2VuZFN1Y2Nlc3MoKTsKICAgICB9CiBwcml2YXRlOgotICAgIENs
ZWFyT2JqZWN0U3RvcmVMaXN0ZW5lcihSZWY8Q2xlYXJPYmplY3RTdG9yZUNhbGxiYWNrPiYmIHJl
cXVlc3RDYWxsYmFjaykKKyAgICBDbGVhck9iamVjdFN0b3JlTGlzdGVuZXIoUmVmPEluZGV4ZWRE
QkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6Q2xlYXJPYmplY3RTdG9yZUNhbGxiYWNrPiYmIHJl
cXVlc3RDYWxsYmFjaykKICAgICAgICAgOiBFdmVudExpc3RlbmVyKEV2ZW50TGlzdGVuZXI6OkNQ
UEV2ZW50TGlzdGVuZXJUeXBlKQogICAgICAgICAsIG1fcmVxdWVzdENhbGxiYWNrKFdURk1vdmUo
cmVxdWVzdENhbGxiYWNrKSkKICAgICB7CiAgICAgfQogCi0gICAgUmVmPENsZWFyT2JqZWN0U3Rv
cmVDYWxsYmFjaz4gbV9yZXF1ZXN0Q2FsbGJhY2s7CisgICAgUmVmPEluZGV4ZWREQkJhY2tlbmRE
aXNwYXRjaGVySGFuZGxlcjo6Q2xlYXJPYmplY3RTdG9yZUNhbGxiYWNrPiBtX3JlcXVlc3RDYWxs
YmFjazsKIH07CiAKIGNsYXNzIENsZWFyT2JqZWN0U3RvcmUgZmluYWwgOiBwdWJsaWMgRXhlY3V0
YWJsZVdpdGhEYXRhYmFzZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxDbGVhck9iamVjdFN0
b3JlPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5n
JiBvYmplY3RTdG9yZU5hbWUsIFJlZjxDbGVhck9iamVjdFN0b3JlQ2FsbGJhY2s+JiYgcmVxdWVz
dENhbGxiYWNrKQorICAgIHN0YXRpYyBSZWY8Q2xlYXJPYmplY3RTdG9yZT4gY3JlYXRlKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgb2JqZWN0U3RvcmVOYW1l
LCBSZWY8SW5kZXhlZERCQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpDbGVhck9iamVjdFN0b3Jl
Q2FsbGJhY2s+JiYgcmVxdWVzdENhbGxiYWNrKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgQ2xlYXJPYmplY3RTdG9yZShjb250ZXh0LCBvYmplY3RTdG9yZU5hbWUsIFdURk1v
dmUocmVxdWVzdENhbGxiYWNrKSkpOwogICAgIH0KIAotICAgIENsZWFyT2JqZWN0U3RvcmUoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiBvYmplY3RTdG9yZU5h
bWUsIFJlZjxDbGVhck9iamVjdFN0b3JlQ2FsbGJhY2s+JiYgcmVxdWVzdENhbGxiYWNrKQorICAg
IENsZWFyT2JqZWN0U3RvcmUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3Qg
U3RyaW5nJiBvYmplY3RTdG9yZU5hbWUsIFJlZjxJbmRleGVkREJCYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXI6OkNsZWFyT2JqZWN0U3RvcmVDYWxsYmFjaz4mJiByZXF1ZXN0Q2FsbGJhY2spCiAgICAg
ICAgIDogRXhlY3V0YWJsZVdpdGhEYXRhYmFzZShjb250ZXh0KQogICAgICAgICAsIG1fb2JqZWN0
U3RvcmVOYW1lKG9iamVjdFN0b3JlTmFtZSkKICAgICAgICAgLCBtX3JlcXVlc3RDYWxsYmFjayhX
VEZNb3ZlKHJlcXVlc3RDYWxsYmFjaykpCkBAIC03MjMsMTAgKzcxOCwxMCBAQCBwdWJsaWM6CiAg
ICAgICAgIGlkYlRyYW5zYWN0aW9uLT5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5jb21w
bGV0ZUV2ZW50LCBDbGVhck9iamVjdFN0b3JlTGlzdGVuZXI6OmNyZWF0ZShtX3JlcXVlc3RDYWxs
YmFjay5jb3B5UmVmKCkpLCBmYWxzZSk7CiAgICAgfQogCi0gICAgUmVxdWVzdENhbGxiYWNrJiBy
ZXF1ZXN0Q2FsbGJhY2soKSBvdmVycmlkZSB7IHJldHVybiBtX3JlcXVlc3RDYWxsYmFjay5nZXQo
KTsgfQorICAgIEJhY2tlbmREaXNwYXRjaGVyOjpDYWxsYmFja0Jhc2UmIHJlcXVlc3RDYWxsYmFj
aygpIG92ZXJyaWRlIHsgcmV0dXJuIG1fcmVxdWVzdENhbGxiYWNrLmdldCgpOyB9CiBwcml2YXRl
OgogICAgIGNvbnN0IFN0cmluZyBtX29iamVjdFN0b3JlTmFtZTsKLSAgICBSZWY8Q2xlYXJPYmpl
Y3RTdG9yZUNhbGxiYWNrPiBtX3JlcXVlc3RDYWxsYmFjazsKKyAgICBSZWY8SW5kZXhlZERCQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyOjpDbGVhck9iamVjdFN0b3JlQ2FsbGJhY2s+IG1fcmVxdWVz
dENhbGxiYWNrOwogfTsKIAogfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckluZGV4ZWREQkFnZW50Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckluZGV4ZWREQkFnZW50
LmgKaW5kZXggZGIyOTdiZDljZGE4ZGE2YzA0N2FiODJmZjM1MGEyZjRmNTc0OGZlOS4uZTU0NGY5
YzZmMjUzOWM0MTE3MmQ1YzY5MmU0ZDI4MGU1NDMwMjM5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JJbmRleGVkREJBZ2VudC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQuaApA
QCAtNDUsMjYgKzQ1LDI0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgUGFnZTsKIAot
dHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7Ci0KIGNsYXNzIEluc3BlY3RvckluZGV4ZWREQkFn
ZW50IGZpbmFsIDogcHVibGljIEluc3BlY3RvckFnZW50QmFzZSwgcHVibGljIEluc3BlY3Rvcjo6
SW5kZXhlZERCQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShJbnNwZWN0b3JJbmRleGVkREJBZ2VudCk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CiBwdWJsaWM6CiAgICAgSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQoUGFnZUFnZW50Q29udGV4
dCYpOwotICAgIH5JbnNwZWN0b3JJbmRleGVkREJBZ2VudCgpIG92ZXJyaWRlOworICAgIH5JbnNw
ZWN0b3JJbmRleGVkREJBZ2VudCgpOwogCiAgICAgLy8gSW5zcGVjdG9yQWdlbnRCYXNlCi0gICAg
dm9pZCBkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9udGVuZFJvdXRl
ciosIEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXIqKSBvdmVycmlkZTsKLSAgICB2b2lkIHdp
bGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlzY29ubmVjdFJlYXNvbikg
b3ZlcnJpZGU7CisgICAgdm9pZCBkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9y
OjpGcm9udGVuZFJvdXRlciosIEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXIqKTsKKyAgICB2
b2lkIHdpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlzY29ubmVjdFJl
YXNvbik7CiAKICAgICAvLyBJbmRleGVkREJCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIKLSAgICB2
b2lkIGVuYWJsZShFcnJvclN0cmluZyYpIG92ZXJyaWRlOwotICAgIHZvaWQgZGlzYWJsZShFcnJv
clN0cmluZyYpIG92ZXJyaWRlOwotICAgIHZvaWQgcmVxdWVzdERhdGFiYXNlTmFtZXMoY29uc3Qg
U3RyaW5nJiBzZWN1cml0eU9yaWdpbiwgUmVmPFJlcXVlc3REYXRhYmFzZU5hbWVzQ2FsbGJhY2s+
JiYpIG92ZXJyaWRlOwotICAgIHZvaWQgcmVxdWVzdERhdGFiYXNlKGNvbnN0IFN0cmluZyYgc2Vj
dXJpdHlPcmlnaW4sIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VOYW1lLCBSZWY8UmVxdWVzdERhdGFi
YXNlQ2FsbGJhY2s+JiYpIG92ZXJyaWRlOwotICAgIHZvaWQgcmVxdWVzdERhdGEoY29uc3QgU3Ry
aW5nJiBzZWN1cml0eU9yaWdpbiwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZU5hbWUsIGNvbnN0IFN0
cmluZyYgb2JqZWN0U3RvcmVOYW1lLCBjb25zdCBTdHJpbmcmIGluZGV4TmFtZSwgaW50IHNraXBD
b3VudCwgaW50IHBhZ2VTaXplLCBjb25zdCBKU09OOjpPYmplY3QqIGtleVJhbmdlLCBSZWY8UmVx
dWVzdERhdGFDYWxsYmFjaz4mJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjbGVhck9iamVjdFN0b3Jl
KGNvbnN0IFN0cmluZyYgc2VjdXJpdHlPcmlnaW4sIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VOYW1l
LCBjb25zdCBTdHJpbmcmIG9iamVjdFN0b3JlTmFtZSwgUmVmPENsZWFyT2JqZWN0U3RvcmVDYWxs
YmFjaz4mJikgb3ZlcnJpZGU7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdP
cjx2b2lkPiBlbmFibGUoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09y
PHZvaWQ+IGRpc2FibGUoKTsKKyAgICB2b2lkIHJlcXVlc3REYXRhYmFzZU5hbWVzKGNvbnN0IFN0
cmluZyYgc2VjdXJpdHlPcmlnaW4sIFJlZjxSZXF1ZXN0RGF0YWJhc2VOYW1lc0NhbGxiYWNrPiYm
KTsKKyAgICB2b2lkIHJlcXVlc3REYXRhYmFzZShjb25zdCBTdHJpbmcmIHNlY3VyaXR5T3JpZ2lu
LCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlTmFtZSwgUmVmPFJlcXVlc3REYXRhYmFzZUNhbGxiYWNr
PiYmKTsKKyAgICB2b2lkIHJlcXVlc3REYXRhKGNvbnN0IFN0cmluZyYgc2VjdXJpdHlPcmlnaW4s
IGNvbnN0IFN0cmluZyYgZGF0YWJhc2VOYW1lLCBjb25zdCBTdHJpbmcmIG9iamVjdFN0b3JlTmFt
ZSwgY29uc3QgU3RyaW5nJiBpbmRleE5hbWUsIGludCBza2lwQ291bnQsIGludCBwYWdlU2l6ZSwg
UmVmUHRyPEpTT046Ok9iamVjdD4mJiBrZXlSYW5nZSwgUmVmPFJlcXVlc3REYXRhQ2FsbGJhY2s+
JiYpOworICAgIHZvaWQgY2xlYXJPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIHNlY3VyaXR5T3Jp
Z2luLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlTmFtZSwgY29uc3QgU3RyaW5nJiBvYmplY3RTdG9y
ZU5hbWUsIFJlZjxDbGVhck9iamVjdFN0b3JlQ2FsbGJhY2s+JiYpOwogCiBwcml2YXRlOgogICAg
IEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHRNYW5hZ2VyJiBtX2luamVjdGVkU2NyaXB0TWFuYWdl
cjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9y
TGF5ZXJUcmVlQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNw
ZWN0b3JMYXllclRyZWVBZ2VudC5jcHAKaW5kZXggYmI5OTRiZjk5ZmMyNTE2NjlmOGQ3M2E0ZGYw
YjU1ZWMwZjU2YzYxMy4uNTJkM2ZkNzBmNmEyOTlkOWFmMDQ2OTI0ZjRiYWUzZGQ1ZDYwYjExYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JMYXll
clRyZWVBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNw
ZWN0b3JMYXllclRyZWVBZ2VudC5jcHAKQEAgLTYxLDggKzYxLDcgQEAgdm9pZCBJbnNwZWN0b3JM
YXllclRyZWVBZ2VudDo6ZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJv
bnRlbmRSb3UKIAogdm9pZCBJbnNwZWN0b3JMYXllclRyZWVBZ2VudDo6d2lsbERlc3Ryb3lGcm9u
dGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKQogewotICAgIEVycm9y
U3RyaW5nIGlnbm9yZWQ7Ci0gICAgZGlzYWJsZShpZ25vcmVkKTsKKyAgICBkaXNhYmxlKCk7CiB9
CiAKIHZvaWQgSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OnJlc2V0KCkKQEAgLTc0LDE2ICs3Mywy
MCBAQCB2b2lkIEluc3BlY3RvckxheWVyVHJlZUFnZW50OjpyZXNldCgpCiAgICAgbV9zdXBwcmVz
c0xheWVyQ2hhbmdlRXZlbnRzID0gZmFsc2U7CiB9CiAKLXZvaWQgSW5zcGVjdG9yTGF5ZXJUcmVl
QWdlbnQ6OmVuYWJsZShFcnJvclN0cmluZyYpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lk
PiBJbnNwZWN0b3JMYXllclRyZWVBZ2VudDo6ZW5hYmxlKCkKIHsKICAgICBtX2luc3RydW1lbnRp
bmdBZ2VudHMuc2V0RW5hYmxlZExheWVyVHJlZUFnZW50KHRoaXMpOworCisgICAgcmV0dXJuIHsg
fTsKIH0KIAotdm9pZCBJbnNwZWN0b3JMYXllclRyZWVBZ2VudDo6ZGlzYWJsZShFcnJvclN0cmlu
ZyYpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JMYXllclRyZWVBZ2Vu
dDo6ZGlzYWJsZSgpCiB7CiAgICAgbV9pbnN0cnVtZW50aW5nQWdlbnRzLnNldEVuYWJsZWRMYXll
clRyZWVBZ2VudChudWxscHRyKTsKIAogICAgIHJlc2V0KCk7CisKKyAgICByZXR1cm4geyB9Owog
fQogCiB2b2lkIEluc3BlY3RvckxheWVyVHJlZUFnZW50OjpsYXllclRyZWVEaWRDaGFuZ2UoKQpA
QCAtMTA2LDUxICsxMDksNDkgQEAgdm9pZCBJbnNwZWN0b3JMYXllclRyZWVBZ2VudDo6cHNldWRv
RWxlbWVudERlc3Ryb3llZChQc2V1ZG9FbGVtZW50JiBwc2V1ZG9FbGVtZW4KICAgICB1bmJpbmRQ
c2V1ZG9FbGVtZW50KCZwc2V1ZG9FbGVtZW50KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JMYXllclRy
ZWVBZ2VudDo6bGF5ZXJzRm9yTm9kZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2Rl
SWQsIFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkxheWVyVHJlZTo6
TGF5ZXI+PiYgbGF5ZXJzKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEpTT046OkFycmF5
T2Y8UHJvdG9jb2w6OkxheWVyVHJlZTo6TGF5ZXI+Pj4gSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6
OmxheWVyc0Zvck5vZGUoUHJvdG9jb2w6OkRPTTo6Tm9kZUlkIG5vZGVJZCkKIHsKLSAgICBsYXll
cnMgPSBKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkxheWVyVHJlZTo6TGF5ZXI+
OjpjcmVhdGUoKTsKLQogICAgIGF1dG8qIG5vZGUgPSBtX2luc3RydW1lbnRpbmdBZ2VudHMucGVy
c2lzdGVudERPTUFnZW50KCktPm5vZGVGb3JJZChub2RlSWQpOwotICAgIGlmICghbm9kZSkgewot
ICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIG5vZGUgZm9yIGdpdmVuIG5vZGVJZCJfczsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybiBt
YWtlVW5leHBlY3RlZCgiTWlzc2luZyBub2RlIGZvciBnaXZlbiBub2RlSWQiX3MpOwogCiAgICAg
YXV0byogcmVuZGVyZXIgPSBub2RlLT5yZW5kZXJlcigpOwotICAgIGlmICghcmVuZGVyZXIpIHsK
LSAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWlzc2luZyByZW5kZXJlciBvZiBub2RlIGZvciBnaXZl
biBub2RlSWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKCFyZW5kZXJlcikK
KyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJNaXNzaW5nIHJlbmRlcmVyIG9mIG5vZGUg
Zm9yIGdpdmVuIG5vZGVJZCJfcyk7CiAKICAgICBpZiAoIWlzPFJlbmRlckVsZW1lbnQ+KCpyZW5k
ZXJlcikpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJN
aXNzaW5nIHJlbmRlcmVyIG9mIGVsZW1lbnQgZm9yIGdpdmVuIG5vZGVJZCJfcyk7CiAKLSAgICBn
YXRoZXJMYXllcnNVc2luZ1JlbmRlck9iamVjdEhpZXJhcmNoeShlcnJvclN0cmluZywgZG93bmNh
c3Q8UmVuZGVyRWxlbWVudD4oKnJlbmRlcmVyKSwgbGF5ZXJzKTsKKyAgICBhdXRvIGxheWVycyA9
IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkxheWVyVHJlZTo6TGF5ZXI+OjpjcmVhdGUoKTsKKwor
ICAgIGdhdGhlckxheWVyc1VzaW5nUmVuZGVyT2JqZWN0SGllcmFyY2h5KGRvd25jYXN0PFJlbmRl
ckVsZW1lbnQ+KCpyZW5kZXJlciksIGxheWVycyk7CiAKICAgICBtX3N1cHByZXNzTGF5ZXJDaGFu
Z2VFdmVudHMgPSBmYWxzZTsKKworICAgIHJldHVybiBXVEZNb3ZlKGxheWVycyk7CiB9CiAKLXZv
aWQgSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OmdhdGhlckxheWVyc1VzaW5nUmVuZGVyT2JqZWN0
SGllcmFyY2h5KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgUmVuZGVyRWxlbWVudCYgcmVuZGVy
ZXIsIFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkxheWVyVHJlZTo6
TGF5ZXI+PiYgbGF5ZXJzKQordm9pZCBJbnNwZWN0b3JMYXllclRyZWVBZ2VudDo6Z2F0aGVyTGF5
ZXJzVXNpbmdSZW5kZXJPYmplY3RIaWVyYXJjaHkoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIEpT
T046OkFycmF5T2Y8UHJvdG9jb2w6OkxheWVyVHJlZTo6TGF5ZXI+JiBsYXllcnMpCiB7CiAgICAg
aWYgKHJlbmRlcmVyLmhhc0xheWVyKCkpIHsKLSAgICAgICAgZ2F0aGVyTGF5ZXJzVXNpbmdSZW5k
ZXJMYXllckhpZXJhcmNoeShlcnJvclN0cmluZywgZG93bmNhc3Q8UmVuZGVyTGF5ZXJNb2RlbE9i
amVjdD4ocmVuZGVyZXIpLmxheWVyKCksIGxheWVycyk7CisgICAgICAgIGdhdGhlckxheWVyc1Vz
aW5nUmVuZGVyTGF5ZXJIaWVyYXJjaHkoZG93bmNhc3Q8UmVuZGVyTGF5ZXJNb2RlbE9iamVjdD4o
cmVuZGVyZXIpLmxheWVyKCksIGxheWVycyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAg
ICBmb3IgKGF1dG8mIGNoaWxkIDogY2hpbGRyZW5PZlR5cGU8UmVuZGVyRWxlbWVudD4ocmVuZGVy
ZXIpKQotICAgICAgICBnYXRoZXJMYXllcnNVc2luZ1JlbmRlck9iamVjdEhpZXJhcmNoeShlcnJv
clN0cmluZywgY2hpbGQsIGxheWVycyk7CisgICAgICAgIGdhdGhlckxheWVyc1VzaW5nUmVuZGVy
T2JqZWN0SGllcmFyY2h5KGNoaWxkLCBsYXllcnMpOwogfQogCi12b2lkIEluc3BlY3RvckxheWVy
VHJlZUFnZW50OjpnYXRoZXJMYXllcnNVc2luZ1JlbmRlckxheWVySGllcmFyY2h5KEVycm9yU3Ry
aW5nJiBlcnJvclN0cmluZywgUmVuZGVyTGF5ZXIqIHJlbmRlckxheWVyLCBSZWZQdHI8SlNPTjo6
QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpMYXllclRyZWU6OkxheWVyPj4mIGxheWVycykK
K3ZvaWQgSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OmdhdGhlckxheWVyc1VzaW5nUmVuZGVyTGF5
ZXJIaWVyYXJjaHkoUmVuZGVyTGF5ZXIqIHJlbmRlckxheWVyLCBKU09OOjpBcnJheU9mPFByb3Rv
Y29sOjpMYXllclRyZWU6OkxheWVyPiYgbGF5ZXJzKQogewogICAgIGlmIChyZW5kZXJMYXllci0+
aXNDb21wb3NpdGVkKCkpCi0gICAgICAgIGxheWVycy0+YWRkSXRlbShidWlsZE9iamVjdEZvckxh
eWVyKGVycm9yU3RyaW5nLCByZW5kZXJMYXllcikpOworICAgICAgICBsYXllcnMuYWRkSXRlbShi
dWlsZE9iamVjdEZvckxheWVyKHJlbmRlckxheWVyKSk7CiAKICAgICBmb3IgKHJlbmRlckxheWVy
ID0gcmVuZGVyTGF5ZXItPmZpcnN0Q2hpbGQoKTsgcmVuZGVyTGF5ZXI7IHJlbmRlckxheWVyID0g
cmVuZGVyTGF5ZXItPm5leHRTaWJsaW5nKCkpCi0gICAgICAgIGdhdGhlckxheWVyc1VzaW5nUmVu
ZGVyTGF5ZXJIaWVyYXJjaHkoZXJyb3JTdHJpbmcsIHJlbmRlckxheWVyLCBsYXllcnMpOworICAg
ICAgICBnYXRoZXJMYXllcnNVc2luZ1JlbmRlckxheWVySGllcmFyY2h5KHJlbmRlckxheWVyLCBs
YXllcnMpOwogfQogCi1SZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6TGF5ZXJUcmVlOjpMYXllcj4g
SW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yTGF5ZXIoRXJyb3JTdHJpbmcm
IGVycm9yU3RyaW5nLCBSZW5kZXJMYXllciogcmVuZGVyTGF5ZXIpCitSZWY8UHJvdG9jb2w6Okxh
eWVyVHJlZTo6TGF5ZXI+IEluc3BlY3RvckxheWVyVHJlZUFnZW50OjpidWlsZE9iamVjdEZvckxh
eWVyKFJlbmRlckxheWVyKiByZW5kZXJMYXllcikKIHsKICAgICBSZW5kZXJPYmplY3QqIHJlbmRl
cmVyID0gJnJlbmRlckxheWVyLT5yZW5kZXJlcigpOwogICAgIFJlbmRlckxheWVyQmFja2luZyog
YmFja2luZyA9IHJlbmRlckxheWVyLT5iYWNraW5nKCk7CkBAIC0xNzAsOSArMTcxLDkgQEAgUmVm
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkxheWVyVHJlZTo6TGF5ZXI+IEluc3BlY3RvckxheWVyVHJl
ZUFnZW50OjpidWlsZE9iamVjdEYKICAgICAgICAgbm9kZSA9IHJlbmRlcmVyLT5wYXJlbnQoKS0+
ZWxlbWVudCgpOwogCiAgICAgLy8gQmFzaWMgc2V0IG9mIHByb3BlcnRpZXMuCi0gICAgYXV0byBs
YXllck9iamVjdCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkxheWVyVHJlZTo6TGF5ZXI6OmNyZWF0
ZSgpCisgICAgYXV0byBsYXllck9iamVjdCA9IFByb3RvY29sOjpMYXllclRyZWU6OkxheWVyOjpj
cmVhdGUoKQogICAgICAgICAuc2V0TGF5ZXJJZChiaW5kKHJlbmRlckxheWVyKSkKLSAgICAgICAg
LnNldE5vZGVJZChpZEZvck5vZGUoZXJyb3JTdHJpbmcsIG5vZGUpKQorICAgICAgICAuc2V0Tm9k
ZUlkKGlkRm9yTm9kZShub2RlKSkKICAgICAgICAgLnNldEJvdW5kcyhidWlsZE9iamVjdEZvcklu
dFJlY3QocmVuZGVyZXItPmFic29sdXRlQm91bmRpbmdCb3hSZWN0KCkpKQogICAgICAgICAuc2V0
TWVtb3J5KGJhY2tpbmctPmJhY2tpbmdTdG9yZU1lbW9yeUVzdGltYXRlKCkpCiAgICAgICAgIC5z
ZXRDb21wb3NpdGVkQm91bmRzKGJ1aWxkT2JqZWN0Rm9ySW50UmVjdChlbmNsb3NpbmdJbnRSZWN0
KGJhY2tpbmctPmNvbXBvc2l0ZWRCb3VuZHMoKSkpKQpAQCAtMjA5LDI1ICsyMTAsMjUgQEAgUmVm
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkxheWVyVHJlZTo6TGF5ZXI+IEluc3BlY3RvckxheWVyVHJl
ZUFnZW50OjpidWlsZE9iamVjdEYKICAgICByZXR1cm4gbGF5ZXJPYmplY3Q7CiB9CiAKLWludCBJ
bnNwZWN0b3JMYXllclRyZWVBZ2VudDo6aWRGb3JOb2RlKEVycm9yU3RyaW5nJiBlcnJvclN0cmlu
ZywgTm9kZSogbm9kZSkKK1Byb3RvY29sOjpET006Ok5vZGVJZCBJbnNwZWN0b3JMYXllclRyZWVB
Z2VudDo6aWRGb3JOb2RlKE5vZGUqIG5vZGUpCiB7CiAgICAgaWYgKCFub2RlKQogICAgICAgICBy
ZXR1cm4gMDsKIAogICAgIEluc3BlY3RvckRPTUFnZW50KiBkb21BZ2VudCA9IG1faW5zdHJ1bWVu
dGluZ0FnZW50cy5wZXJzaXN0ZW50RE9NQWdlbnQoKTsKICAgICAKLSAgICBpbnQgbm9kZUlkID0g
ZG9tQWdlbnQtPmJvdW5kTm9kZUlkKG5vZGUpOworICAgIGF1dG8gbm9kZUlkID0gZG9tQWdlbnQt
PmJvdW5kTm9kZUlkKG5vZGUpOwogICAgIGlmICghbm9kZUlkKSB7CiAgICAgICAgIC8vIEZJWE1F
OiA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMjEzNDk5PiBXZWIgSW5zcGVjdG9yOiBhbGxvdyBET00g
bm9kZXMgdG8gYmUgaW5zdHJ1bWVudGVkIGF0IGFueSBwb2ludCwgcmVnYXJkbGVzcyBvZiB3aGV0
aGVyIHRoZSBtYWluIGRvY3VtZW50IGhhcyBhbHNvIGJlZW4gaW5zdHJ1bWVudGVkCi0gICAgICAg
IG5vZGVJZCA9IGRvbUFnZW50LT5wdXNoTm9kZVRvRnJvbnRlbmQoZXJyb3JTdHJpbmcsIGRvbUFn
ZW50LT5ib3VuZE5vZGVJZCgmbm9kZS0+ZG9jdW1lbnQoKSksIG5vZGUpOworICAgICAgICBub2Rl
SWQgPSBkb21BZ2VudC0+cHVzaE5vZGVUb0Zyb250ZW5kKG5vZGUpOwogICAgIH0KIAogICAgIHJl
dHVybiBub2RlSWQ7CiB9CiAKLVJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpMYXllclRyZWU6Oklu
dFJlY3Q+IEluc3BlY3RvckxheWVyVHJlZUFnZW50OjpidWlsZE9iamVjdEZvckludFJlY3QoY29u
c3QgSW50UmVjdCYgcmVjdCkKK1JlZjxQcm90b2NvbDo6TGF5ZXJUcmVlOjpJbnRSZWN0PiBJbnNw
ZWN0b3JMYXllclRyZWVBZ2VudDo6YnVpbGRPYmplY3RGb3JJbnRSZWN0KGNvbnN0IEludFJlY3Qm
IHJlY3QpCiB7Ci0gICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkxheWVyVHJlZTo6SW50
UmVjdDo6Y3JlYXRlKCkKKyAgICByZXR1cm4gUHJvdG9jb2w6OkxheWVyVHJlZTo6SW50UmVjdDo6
Y3JlYXRlKCkKICAgICAgICAgLnNldFgocmVjdC54KCkpCiAgICAgICAgIC5zZXRZKHJlY3QueSgp
KQogICAgICAgICAuc2V0V2lkdGgocmVjdC53aWR0aCgpKQpAQCAtMjM1LDE3ICsyMzYsMTUgQEAg
UmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkxheWVyVHJlZTo6SW50UmVjdD4gSW5zcGVjdG9yTGF5
ZXJUcmVlQWdlbnQ6OmJ1aWxkT2JqZWMKICAgICAgICAgLnJlbGVhc2UoKTsKIH0KIAotdm9pZCBJ
bnNwZWN0b3JMYXllclRyZWVBZ2VudDo6cmVhc29uc0ZvckNvbXBvc2l0aW5nTGF5ZXIoRXJyb3JT
dHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGxheWVySWQsIFJlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpMYXllclRyZWU6OkNvbXBvc2l0aW5nUmVhc29ucz4mIGNvbXBvc2l0aW5n
UmVhc29uc1Jlc3VsdCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxQcm90b2NvbDo6TGF5
ZXJUcmVlOjpDb21wb3NpdGluZ1JlYXNvbnM+PiBJbnNwZWN0b3JMYXllclRyZWVBZ2VudDo6cmVh
c29uc0ZvckNvbXBvc2l0aW5nTGF5ZXIoY29uc3QgUHJvdG9jb2w6OkxheWVyVHJlZTo6TGF5ZXJJ
ZCYgbGF5ZXJJZCkKIHsKICAgICBjb25zdCBSZW5kZXJMYXllciogcmVuZGVyTGF5ZXIgPSBtX2lk
VG9MYXllci5nZXQobGF5ZXJJZCk7CiAKLSAgICBpZiAoIXJlbmRlckxheWVyKSB7Ci0gICAgICAg
IGVycm9yU3RyaW5nID0gIk1pc3NpbmcgcmVuZGVyIGxheWVyIGZvciBnaXZlbiBsYXllcklkIl9z
OwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghcmVuZGVyTGF5ZXIpCisgICAgICAg
IHJldHVybiBtYWtlVW5leHBlY3RlZCgiTWlzc2luZyByZW5kZXIgbGF5ZXIgZm9yIGdpdmVuIGxh
eWVySWQiX3MpOwogCiAgICAgT3B0aW9uU2V0PENvbXBvc2l0aW5nUmVhc29uPiByZWFzb25zID0g
cmVuZGVyTGF5ZXItPmNvbXBvc2l0b3IoKS5yZWFzb25zRm9yQ29tcG9zaXRpbmcoKnJlbmRlckxh
eWVyKTsKLSAgICBhdXRvIGNvbXBvc2l0aW5nUmVhc29ucyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkxheWVyVHJlZTo6Q29tcG9zaXRpbmdSZWFzb25zOjpjcmVhdGUoKS5yZWxlYXNlKCk7CisgICAg
YXV0byBjb21wb3NpdGluZ1JlYXNvbnMgPSBQcm90b2NvbDo6TGF5ZXJUcmVlOjpDb21wb3NpdGlu
Z1JlYXNvbnM6OmNyZWF0ZSgpLnJlbGVhc2UoKTsKIAogICAgIGlmIChyZWFzb25zLmNvbnRhaW5z
KENvbXBvc2l0aW5nUmVhc29uOjpUcmFuc2Zvcm0zRCkpCiAgICAgICAgIGNvbXBvc2l0aW5nUmVh
c29ucy0+c2V0VHJhbnNmb3JtM0QodHJ1ZSk7CkBAIC0zMjQsNyArMzIzLDcgQEAgdm9pZCBJbnNw
ZWN0b3JMYXllclRyZWVBZ2VudDo6cmVhc29uc0ZvckNvbXBvc2l0aW5nTGF5ZXIoRXJyb3JTdHJp
bmcmIGVycm9yU3RyaW4KICAgICBpZiAocmVhc29ucy5jb250YWlucyhDb21wb3NpdGluZ1JlYXNv
bjo6Um9vdCkpCiAgICAgICAgIGNvbXBvc2l0aW5nUmVhc29ucy0+c2V0Um9vdCh0cnVlKTsKIAot
ICAgIGNvbXBvc2l0aW5nUmVhc29uc1Jlc3VsdCA9IFdURk1vdmUoY29tcG9zaXRpbmdSZWFzb25z
KTsKKyAgICByZXR1cm4gV1RGTW92ZShjb21wb3NpdGluZ1JlYXNvbnMpOwogfQogCiBTdHJpbmcg
SW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OmJpbmQoY29uc3QgUmVuZGVyTGF5ZXIqIGxheWVyKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JMYXll
clRyZWVBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JM
YXllclRyZWVBZ2VudC5oCmluZGV4IDg3MjM1ODBjNjUzMDEwZTFlZWE2MGQ0MGU5Y2Q5ZDczMjM1
OGQ5ZmIuLjVmMTE1MzFjYzY0NDQyOWY0OGQxZDZkODE1NTFkZDg0YjlmOTRjY2MgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yTGF5ZXJUcmVlQWdl
bnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckxheWVy
VHJlZUFnZW50LmgKQEAgLTQyLDI0ICs0MiwyMiBAQCBjbGFzcyBQc2V1ZG9FbGVtZW50OwogY2xh
c3MgUmVuZGVyRWxlbWVudDsKIGNsYXNzIFJlbmRlckxheWVyOwogCi10eXBlZGVmIFN0cmluZyBF
cnJvclN0cmluZzsKLQogY2xhc3MgSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQgZmluYWwgOiBwdWJs
aWMgSW5zcGVjdG9yQWdlbnRCYXNlLCBwdWJsaWMgSW5zcGVjdG9yOjpMYXllclRyZWVCYWNrZW5k
RGlzcGF0Y2hlckhhbmRsZXIgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEluc3BlY3Rvckxh
eWVyVHJlZUFnZW50KTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAg
ICBJbnNwZWN0b3JMYXllclRyZWVBZ2VudChXZWJBZ2VudENvbnRleHQmKTsKLSAgICB+SW5zcGVj
dG9yTGF5ZXJUcmVlQWdlbnQoKSBvdmVycmlkZTsKKyAgICB+SW5zcGVjdG9yTGF5ZXJUcmVlQWdl
bnQoKTsKIAogICAgIC8vIEluc3BlY3RvckFnZW50QmFzZQotICAgIHZvaWQgZGlkQ3JlYXRlRnJv
bnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRSb3V0ZXIqLCBJbnNwZWN0b3I6OkJh
Y2tlbmREaXNwYXRjaGVyKikgb3ZlcnJpZGU7Ci0gICAgdm9pZCB3aWxsRGVzdHJveUZyb250ZW5k
QW5kQmFja2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24pIG92ZXJyaWRlOworICAgIHZv
aWQgZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRSb3V0ZXIq
LCBJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyKik7CisgICAgdm9pZCB3aWxsRGVzdHJveUZy
b250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24pOwogCiAgICAgLy8g
TGF5ZXJUcmVlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyCi0gICAgdm9pZCBlbmFibGUoRXJyb3JT
dHJpbmcmKSBvdmVycmlkZTsKLSAgICB2b2lkIGRpc2FibGUoRXJyb3JTdHJpbmcmKSBvdmVycmlk
ZTsKLSAgICB2b2lkIGxheWVyc0Zvck5vZGUoRXJyb3JTdHJpbmcmLCBpbnQgbm9kZUlkLCBSZWZQ
dHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpMYXllclRyZWU6OkxheWVyPj4m
KSBvdmVycmlkZTsKLSAgICB2b2lkIHJlYXNvbnNGb3JDb21wb3NpdGluZ0xheWVyKEVycm9yU3Ry
aW5nJiwgY29uc3QgU3RyaW5nJiBsYXllcklkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
TGF5ZXJUcmVlOjpDb21wb3NpdGluZ1JlYXNvbnM+Jikgb3ZlcnJpZGU7CisgICAgSW5zcGVjdG9y
OjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBlbmFibGUoKTsKKyAgICBJbnNwZWN0b3I6
OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGRpc2FibGUoKTsKKyAgICBJbnNwZWN0b3I6
OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkxheWVyVHJlZTo6TGF5ZXI+Pj4gbGF5ZXJzRm9yTm9kZShJbnNwZWN0b3I6OlByb3Rv
Y29sOjpET006Ok5vZGVJZCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdP
cjxSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6TGF5ZXJUcmVlOjpDb21wb3NpdGluZ1JlYXNvbnM+
PiByZWFzb25zRm9yQ29tcG9zaXRpbmdMYXllcihjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpM
YXllclRyZWU6OkxheWVySWQmKTsKIAogICAgIC8vIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbgog
ICAgIHZvaWQgbGF5ZXJUcmVlRGlkQ2hhbmdlKCk7CkBAIC03MiwxMyArNzAsMTMgQEAgcHJpdmF0
ZToKICAgICBTdHJpbmcgYmluZChjb25zdCBSZW5kZXJMYXllciopOwogICAgIHZvaWQgdW5iaW5k
KGNvbnN0IFJlbmRlckxheWVyKik7CiAKLSAgICB2b2lkIGdhdGhlckxheWVyc1VzaW5nUmVuZGVy
T2JqZWN0SGllcmFyY2h5KEVycm9yU3RyaW5nJiwgUmVuZGVyRWxlbWVudCYsIFJlZlB0cjxKU09O
OjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkxheWVyVHJlZTo6TGF5ZXI+PiYpOwotICAg
IHZvaWQgZ2F0aGVyTGF5ZXJzVXNpbmdSZW5kZXJMYXllckhpZXJhcmNoeShFcnJvclN0cmluZyYs
IFJlbmRlckxheWVyKiwgUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6
TGF5ZXJUcmVlOjpMYXllcj4+Jik7CisgICAgdm9pZCBnYXRoZXJMYXllcnNVc2luZ1JlbmRlck9i
amVjdEhpZXJhcmNoeShSZW5kZXJFbGVtZW50JiwgSlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpMYXllclRyZWU6OkxheWVyPiYpOworICAgIHZvaWQgZ2F0aGVyTGF5ZXJzVXNpbmdS
ZW5kZXJMYXllckhpZXJhcmNoeShSZW5kZXJMYXllciosIEpTT046OkFycmF5T2Y8SW5zcGVjdG9y
OjpQcm90b2NvbDo6TGF5ZXJUcmVlOjpMYXllcj4mKTsKIAotICAgIFJlZjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpMYXllclRyZWU6OkxheWVyPiBidWlsZE9iamVjdEZvckxheWVyKEVycm9yU3RyaW5n
JiwgUmVuZGVyTGF5ZXIqKTsKKyAgICBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6TGF5ZXJUcmVl
OjpMYXllcj4gYnVpbGRPYmplY3RGb3JMYXllcihSZW5kZXJMYXllciopOwogICAgIFJlZjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpMYXllclRyZWU6OkludFJlY3Q+IGJ1aWxkT2JqZWN0Rm9ySW50UmVj
dChjb25zdCBJbnRSZWN0Jik7CiAKLSAgICBpbnQgaWRGb3JOb2RlKEVycm9yU3RyaW5nJiwgTm9k
ZSopOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkIGlkRm9yTm9kZShOb2Rl
Kik7CiAKICAgICBTdHJpbmcgYmluZFBzZXVkb0VsZW1lbnQoUHNldWRvRWxlbWVudCopOwogICAg
IHZvaWQgdW5iaW5kUHNldWRvRWxlbWVudChQc2V1ZG9FbGVtZW50Kik7CkBAIC04NiwxMSArODQs
MTEgQEAgcHJpdmF0ZToKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW5zcGVjdG9yOjpMYXllclRyZWVG
cm9udGVuZERpc3BhdGNoZXI+IG1fZnJvbnRlbmREaXNwYXRjaGVyOwogICAgIFJlZlB0cjxJbnNw
ZWN0b3I6OkxheWVyVHJlZUJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOwog
Ci0gICAgSGFzaE1hcDxjb25zdCBSZW5kZXJMYXllciosIFN0cmluZz4gbV9kb2N1bWVudExheWVy
VG9JZE1hcDsKLSAgICBIYXNoTWFwPFN0cmluZywgY29uc3QgUmVuZGVyTGF5ZXIqPiBtX2lkVG9M
YXllcjsKKyAgICBIYXNoTWFwPGNvbnN0IFJlbmRlckxheWVyKiwgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6TGF5ZXJUcmVlOjpMYXllcklkPiBtX2RvY3VtZW50TGF5ZXJUb0lkTWFwOworICAgIEhhc2hN
YXA8SW5zcGVjdG9yOjpQcm90b2NvbDo6TGF5ZXJUcmVlOjpMYXllcklkLCBjb25zdCBSZW5kZXJM
YXllcio+IG1faWRUb0xheWVyOwogCi0gICAgSGFzaE1hcDxQc2V1ZG9FbGVtZW50KiwgU3RyaW5n
PiBtX3BzZXVkb0VsZW1lbnRUb0lkTWFwOwotICAgIEhhc2hNYXA8U3RyaW5nLCBQc2V1ZG9FbGVt
ZW50Kj4gbV9pZFRvUHNldWRvRWxlbWVudDsKKyAgICBIYXNoTWFwPFBzZXVkb0VsZW1lbnQqLCBJ
bnNwZWN0b3I6OlByb3RvY29sOjpMYXllclRyZWU6OlBzZXVkb0VsZW1lbnRJZD4gbV9wc2V1ZG9F
bGVtZW50VG9JZE1hcDsKKyAgICBIYXNoTWFwPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkxheWVyVHJl
ZTo6UHNldWRvRWxlbWVudElkLCBQc2V1ZG9FbGVtZW50Kj4gbV9pZFRvUHNldWRvRWxlbWVudDsK
IAogICAgIGJvb2wgbV9zdXBwcmVzc0xheWVyQ2hhbmdlRXZlbnRzIHsgZmFsc2UgfTsKIH07CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rvck1lbW9y
eUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yTWVt
b3J5QWdlbnQuY3BwCmluZGV4IGQwZThhYTY4ODMzNjU5ZTY0YWZlNTUzNDdjYjU2Zjc3M2ViN2Q3
YTUuLjE0Y2U2NzA5NmEyNDI0NDk0YzU5MjQ2NjA4NmExZDFlMjg3NzQxMDkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yTWVtb3J5QWdlbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yTWVtb3J5QWdl
bnQuY3BwCkBAIC01NCw0MCArNTQsMzkgQEAgdm9pZCBJbnNwZWN0b3JNZW1vcnlBZ2VudDo6ZGlk
Q3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEZyb250ZW5kUm91dGVyKiwgQmFja2VuZEQKIAogdm9p
ZCBJbnNwZWN0b3JNZW1vcnlBZ2VudDo6d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoRGlz
Y29ubmVjdFJlYXNvbikKIHsKLSAgICBFcnJvclN0cmluZyBpZ25vcmVkOwotICAgIGRpc2FibGUo
aWdub3JlZCk7CisgICAgZGlzYWJsZSgpOwogCiAgICAgbV9pbnN0cnVtZW50aW5nQWdlbnRzLnNl
dFBlcnNpc3RlbnRNZW1vcnlBZ2VudChudWxscHRyKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JNZW1v
cnlBZ2VudDo6ZW5hYmxlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZykKK1Byb3RvY29sOjpFcnJv
clN0cmluZ09yPHZvaWQ+IEluc3BlY3Rvck1lbW9yeUFnZW50OjplbmFibGUoKQogewotICAgIGlm
IChtX2luc3RydW1lbnRpbmdBZ2VudHMuZW5hYmxlZE1lbW9yeUFnZW50KCkgPT0gdGhpcykgewot
ICAgICAgICBlcnJvclN0cmluZyA9ICJNZW1vcnkgZG9tYWluIGFscmVhZHkgZW5hYmxlZCJfczsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAobV9pbnN0cnVtZW50aW5nQWdlbnRzLmVu
YWJsZWRNZW1vcnlBZ2VudCgpID09IHRoaXMpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3Rl
ZCgiTWVtb3J5IGRvbWFpbiBhbHJlYWR5IGVuYWJsZWQiX3MpOwogCiAgICAgbV9pbnN0cnVtZW50
aW5nQWdlbnRzLnNldEVuYWJsZWRNZW1vcnlBZ2VudCh0aGlzKTsKKworICAgIHJldHVybiB7IH07
CiB9CiAKLXZvaWQgSW5zcGVjdG9yTWVtb3J5QWdlbnQ6OmRpc2FibGUoRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yTWVtb3J5
QWdlbnQ6OmRpc2FibGUoKQogewotICAgIGlmIChtX2luc3RydW1lbnRpbmdBZ2VudHMuZW5hYmxl
ZE1lbW9yeUFnZW50KCkgIT0gdGhpcykgewotICAgICAgICBlcnJvclN0cmluZyA9ICJNZW1vcnkg
ZG9tYWluIGFscmVhZHkgZGlzYWJsZWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAg
aWYgKG1faW5zdHJ1bWVudGluZ0FnZW50cy5lbmFibGVkTWVtb3J5QWdlbnQoKSAhPSB0aGlzKQor
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk1lbW9yeSBkb21haW4gYWxyZWFkeSBkaXNh
YmxlZCJfcyk7CiAKICAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMuc2V0RW5hYmxlZE1lbW9yeUFn
ZW50KG51bGxwdHIpOwogCiAgICAgbV90cmFja2luZyA9IGZhbHNlOwogCiAgICAgUmVzb3VyY2VV
c2FnZVRocmVhZDo6cmVtb3ZlT2JzZXJ2ZXIodGhpcyk7CisKKyAgICByZXR1cm4geyB9OwogfQog
Ci12b2lkIEluc3BlY3Rvck1lbW9yeUFnZW50OjpzdGFydFRyYWNraW5nKEVycm9yU3RyaW5nJikK
K1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3Rvck1lbW9yeUFnZW50OjpzdGFy
dFRyYWNraW5nKCkKIHsKICAgICBpZiAobV90cmFja2luZykKLSAgICAgICAgcmV0dXJuOworICAg
ICAgICByZXR1cm4geyB9OwogCiAgICAgUmVzb3VyY2VVc2FnZVRocmVhZDo6YWRkT2JzZXJ2ZXIo
dGhpcywgTWVtb3J5LCBbdGhpc10gKGNvbnN0IFJlc291cmNlVXNhZ2VEYXRhJiBkYXRhKSB7CiAg
ICAgICAgIGNvbGxlY3RTYW1wbGUoZGF0YSk7CkBAIC05NiwyNCArOTUsMjggQEAgdm9pZCBJbnNw
ZWN0b3JNZW1vcnlBZ2VudDo6c3RhcnRUcmFja2luZyhFcnJvclN0cmluZyYpCiAgICAgbV90cmFj
a2luZyA9IHRydWU7CiAKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+dHJhY2tpbmdTdGFydCht
X2Vudmlyb25tZW50LmV4ZWN1dGlvblN0b3B3YXRjaCgpLmVsYXBzZWRUaW1lKCkuc2Vjb25kcygp
KTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yTWVtb3J5QWdlbnQ6OnN0
b3BUcmFja2luZyhFcnJvclN0cmluZyYpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJ
bnNwZWN0b3JNZW1vcnlBZ2VudDo6c3RvcFRyYWNraW5nKCkKIHsKICAgICBpZiAoIW1fdHJhY2tp
bmcpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIFJlc291cmNl
VXNhZ2VUaHJlYWQ6OnJlbW92ZU9ic2VydmVyKHRoaXMpOwogCiAgICAgbV90cmFja2luZyA9IGZh
bHNlOwogCiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPnRyYWNraW5nQ29tcGxldGUobV9lbnZp
cm9ubWVudC5leGVjdXRpb25TdG9wd2F0Y2goKS5lbGFwc2VkVGltZSgpLnNlY29uZHMoKSk7CisK
KyAgICByZXR1cm4geyB9OwogfQogCiB2b2lkIEluc3BlY3Rvck1lbW9yeUFnZW50OjpkaWRIYW5k
bGVNZW1vcnlQcmVzc3VyZShDcml0aWNhbCBjcml0aWNhbCkKIHsKICAgICBNZW1vcnlGcm9udGVu
ZERpc3BhdGNoZXI6OlNldmVyaXR5IHNldmVyaXR5ID0gY3JpdGljYWwgPT0gQ3JpdGljYWw6Olll
cyA/IE1lbW9yeUZyb250ZW5kRGlzcGF0Y2hlcjo6U2V2ZXJpdHk6OkNyaXRpY2FsIDogTWVtb3J5
RnJvbnRlbmREaXNwYXRjaGVyOjpTZXZlcml0eTo6Tm9uQ3JpdGljYWw7Ci0gICAgbV9mcm9udGVu
ZERpc3BhdGNoZXItPm1lbW9yeVByZXNzdXJlKG1fZW52aXJvbm1lbnQuZXhlY3V0aW9uU3RvcHdh
dGNoKCkuZWxhcHNlZFRpbWUoKS5zZWNvbmRzKCksIHNldmVyaXR5KTsKKyAgICBtX2Zyb250ZW5k
RGlzcGF0Y2hlci0+bWVtb3J5UHJlc3N1cmUobV9lbnZpcm9ubWVudC5leGVjdXRpb25TdG9wd2F0
Y2goKS5lbGFwc2VkVGltZSgpLnNlY29uZHMoKSwgUHJvdG9jb2w6OkhlbHBlcnM6OmdldEVudW1D
b25zdGFudFZhbHVlKHNldmVyaXR5KSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yTWVtb3J5QWdlbnQ6
OmNvbGxlY3RTYW1wbGUoY29uc3QgUmVzb3VyY2VVc2FnZURhdGEmIGRhdGEpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rvck1lbW9yeUFnZW50Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rvck1lbW9yeUFnZW50LmgK
aW5kZXggYzQ0NzcyZGJlYWJmOTExNGNmYTQ0N2ZlOTZlODRlM2QyYjUyNjI4ZS4uMWE3NjQwOGVm
OTNjOTYxYjVhMDBhYWMxZjkyNWE4OTM2NDMyOTQ3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JNZW1vcnlBZ2VudC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yTWVtb3J5QWdlbnQuaApAQCAtMzUsMjQg
KzM1LDIyIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdHlwZWRlZiBTdHJpbmcgRXJyb3JT
dHJpbmc7Ci0KIGNsYXNzIEluc3BlY3Rvck1lbW9yeUFnZW50IGZpbmFsIDogcHVibGljIEluc3Bl
Y3RvckFnZW50QmFzZSwgcHVibGljIEluc3BlY3Rvcjo6TWVtb3J5QmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbnNwZWN0b3JNZW1vcnlBZ2VudCk7
CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgSW5zcGVjdG9yTWVt
b3J5QWdlbnQoUGFnZUFnZW50Q29udGV4dCYpOwotICAgIH5JbnNwZWN0b3JNZW1vcnlBZ2VudCgp
IG92ZXJyaWRlOworICAgIH5JbnNwZWN0b3JNZW1vcnlBZ2VudCgpOwogCiAgICAgLy8gSW5zcGVj
dG9yQWdlbnRCYXNlCi0gICAgdm9pZCBkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVj
dG9yOjpGcm9udGVuZFJvdXRlciosIEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXIqKSBvdmVy
cmlkZTsKLSAgICB2b2lkIHdpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6
RGlzY29ubmVjdFJlYXNvbikgb3ZlcnJpZGU7CisgICAgdm9pZCBkaWRDcmVhdGVGcm9udGVuZEFu
ZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9udGVuZFJvdXRlciosIEluc3BlY3Rvcjo6QmFja2VuZERp
c3BhdGNoZXIqKTsKKyAgICB2b2lkIHdpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3Bl
Y3Rvcjo6RGlzY29ubmVjdFJlYXNvbik7CiAKICAgICAvLyBNZW1vcnlCYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXIKLSAgICB2b2lkIGVuYWJsZShFcnJvclN0cmluZyYpIG92ZXJyaWRlOwotICAgIHZv
aWQgZGlzYWJsZShFcnJvclN0cmluZyYpIG92ZXJyaWRlOwotICAgIHZvaWQgc3RhcnRUcmFja2lu
ZyhFcnJvclN0cmluZyYpIG92ZXJyaWRlOwotICAgIHZvaWQgc3RvcFRyYWNraW5nKEVycm9yU3Ry
aW5nJikgb3ZlcnJpZGU7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2
b2lkPiBlbmFibGUoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZv
aWQ+IGRpc2FibGUoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZv
aWQ+IHN0YXJ0VHJhY2tpbmcoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmlu
Z09yPHZvaWQ+IHN0b3BUcmFja2luZygpOwogCiAgICAgLy8gSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uCiAgICAgdm9pZCBkaWRIYW5kbGVNZW1vcnlQcmVzc3VyZShDcml0aWNhbCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rvck5ldHdvcmtBZ2Vu
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rvck5ldHdvcmtB
Z2VudC5jcHAKaW5kZXggMDlmMjc3ZjE5NWQzNTZjZjZkMzE0ZmJmNzJjZmNiZWFkNjY3ZTE1Yy4u
MDllNmM2ZDRjOTZkNjQ0MTgyM2RkMDUxMGJmOWRjOTI2ODQ5NzAzNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JOZXR3b3JrQWdlbnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yTmV0d29ya0FnZW50
LmNwcApAQCAtMTcyLDkgKzE3Miw5IEBAIHByaXZhdGU6CiAgICAgaW50IG1fc3RhdHVzQ29kZTsK
IH07CiAKLVJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpXZWJTb2NrZXRGcmFtZT4g
YnVpbGRXZWJTb2NrZXRNZXNzYWdlKGNvbnN0IFdlYlNvY2tldEZyYW1lJiBmcmFtZSkKK1JlZjxQ
cm90b2NvbDo6TmV0d29yazo6V2ViU29ja2V0RnJhbWU+IGJ1aWxkV2ViU29ja2V0TWVzc2FnZShj
b25zdCBXZWJTb2NrZXRGcmFtZSYgZnJhbWUpCiB7Ci0gICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJv
dG9jb2w6Ok5ldHdvcms6OldlYlNvY2tldEZyYW1lOjpjcmVhdGUoKQorICAgIHJldHVybiBQcm90
b2NvbDo6TmV0d29yazo6V2ViU29ja2V0RnJhbWU6OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRPcGNv
ZGUoZnJhbWUub3BDb2RlKQogICAgICAgICAuc2V0TWFzayhmcmFtZS5tYXNrZWQpCiAgICAgICAg
IC5zZXRQYXlsb2FkRGF0YShmcmFtZS5vcENvZGUgPT0gMSA/IFN0cmluZzo6ZnJvbVVURjhXaXRo
TGF0aW4xRmFsbGJhY2soZnJhbWUucGF5bG9hZCwgZnJhbWUucGF5bG9hZExlbmd0aCkgOiBiYXNl
NjRFbmNvZGUoZnJhbWUucGF5bG9hZCwgZnJhbWUucGF5bG9hZExlbmd0aCkpCkBAIC0yMDEsMjAg
KzIwMSwyMSBAQCB2b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6ZGlkQ3JlYXRlRnJvbnRlbmRB
bmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRSb3V0ZQogCiB2b2lkIEluc3BlY3Rvck5ldHdv
cmtBZ2VudDo6d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25u
ZWN0UmVhc29uKQogewotICAgIEVycm9yU3RyaW5nIGlnbm9yZWQ7Ci0gICAgZGlzYWJsZShpZ25v
cmVkKTsKKyAgICBkaXNhYmxlKCk7CiB9CiAKLXN0YXRpYyBSZWY8SlNPTjo6T2JqZWN0PiBidWls
ZE9iamVjdEZvckhlYWRlcnMoY29uc3QgSFRUUEhlYWRlck1hcCYgaGVhZGVycykKK3N0YXRpYyBS
ZWY8UHJvdG9jb2w6Ok5ldHdvcms6OkhlYWRlcnM+IGJ1aWxkT2JqZWN0Rm9ySGVhZGVycyhjb25z
dCBIVFRQSGVhZGVyTWFwJiBoZWFkZXJzKQogewotICAgIFJlZjxKU09OOjpPYmplY3Q+IGhlYWRl
cnNPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGF1dG8gaGVhZGVyc1ZhbHVl
ID0gUHJvdG9jb2w6Ok5ldHdvcms6OkhlYWRlcnM6OmNyZWF0ZSgpLnJlbGVhc2UoKTsKIAorICAg
IGF1dG8gaGVhZGVyc09iamVjdCA9IGhlYWRlcnNWYWx1ZS0+YXNPYmplY3QoKTsKICAgICBmb3Ig
KGNvbnN0IGF1dG8mIGhlYWRlciA6IGhlYWRlcnMpCiAgICAgICAgIGhlYWRlcnNPYmplY3QtPnNl
dFN0cmluZyhoZWFkZXIua2V5LCBoZWFkZXIudmFsdWUpOwotICAgIHJldHVybiBoZWFkZXJzT2Jq
ZWN0OworCisgICAgcmV0dXJuIGhlYWRlcnNWYWx1ZTsKIH0KIAotUmVmPEluc3BlY3Rvcjo6UHJv
dG9jb2w6Ok5ldHdvcms6OlJlc291cmNlVGltaW5nPiBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmJ1
aWxkT2JqZWN0Rm9yVGltaW5nKGNvbnN0IE5ldHdvcmtMb2FkTWV0cmljcyogdGltaW5nLCBSZXNv
dXJjZUxvYWRlciYgcmVzb3VyY2VMb2FkZXIpCitSZWY8UHJvdG9jb2w6Ok5ldHdvcms6OlJlc291
cmNlVGltaW5nPiBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yVGltaW5nKGNv
bnN0IE5ldHdvcmtMb2FkTWV0cmljcyogdGltaW5nLCBSZXNvdXJjZUxvYWRlciYgcmVzb3VyY2VM
b2FkZXIpCiB7CiAgICAgYXV0byYgbG9hZFRpbWluZyA9IHJlc291cmNlTG9hZGVyLmxvYWRUaW1p
bmcoKTsKIApAQCAtMjI3LDcgKzIyOCw3IEBAIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3
b3JrOjpSZXNvdXJjZVRpbWluZz4gSW5zcGVjdG9yTmV0d29ya0FnZW50OjpidWlsZE9iCiAgICAg
ICAgIHRpbWluZyA9ICZlbXB0eS52YWx1ZSgpOwogICAgIH0KIAotICAgIHJldHVybiBJbnNwZWN0
b3I6OlByb3RvY29sOjpOZXR3b3JrOjpSZXNvdXJjZVRpbWluZzo6Y3JlYXRlKCkKKyAgICByZXR1
cm4gUHJvdG9jb2w6Ok5ldHdvcms6OlJlc291cmNlVGltaW5nOjpjcmVhdGUoKQogICAgICAgICAu
c2V0U3RhcnRUaW1lKGVsYXBzZWRUaW1lU2luY2UobG9hZFRpbWluZy5zdGFydFRpbWUoKSkpCiAg
ICAgICAgIC5zZXRSZWRpcmVjdFN0YXJ0KGVsYXBzZWRUaW1lU2luY2UobG9hZFRpbWluZy5yZWRp
cmVjdFN0YXJ0KCkpKQogICAgICAgICAuc2V0UmVkaXJlY3RFbmQoZWxhcHNlZFRpbWVTaW5jZShs
b2FkVGltaW5nLnJlZGlyZWN0RW5kKCkpKQpAQCAtMjQzLDI2ICsyNDQsMjYgQEAgUmVmPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OlJlc291cmNlVGltaW5nPiBJbnNwZWN0b3JOZXR3b3Jr
QWdlbnQ6OmJ1aWxkT2IKICAgICAgICAgLnJlbGVhc2UoKTsKIH0KIAotc3RhdGljIEluc3BlY3Rv
cjo6UHJvdG9jb2w6Ok5ldHdvcms6Ok1ldHJpY3M6OlByaW9yaXR5IHRvUHJvdG9jb2woTmV0d29y
a0xvYWRQcmlvcml0eSBwcmlvcml0eSkKK3N0YXRpYyBQcm90b2NvbDo6TmV0d29yazo6TWV0cmlj
czo6UHJpb3JpdHkgdG9Qcm90b2NvbChOZXR3b3JrTG9hZFByaW9yaXR5IHByaW9yaXR5KQogewog
ICAgIHN3aXRjaCAocHJpb3JpdHkpIHsKICAgICBjYXNlIE5ldHdvcmtMb2FkUHJpb3JpdHk6Okxv
dzoKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6Ok1ldHJpY3M6
OlByaW9yaXR5OjpMb3c7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6TmV0d29yazo6TWV0cmlj
czo6UHJpb3JpdHk6OkxvdzsKICAgICBjYXNlIE5ldHdvcmtMb2FkUHJpb3JpdHk6Ok1lZGl1bToK
LSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6Ok1ldHJpY3M6OlBy
aW9yaXR5OjpNZWRpdW07CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6TmV0d29yazo6TWV0cmlj
czo6UHJpb3JpdHk6Ok1lZGl1bTsKICAgICBjYXNlIE5ldHdvcmtMb2FkUHJpb3JpdHk6OkhpZ2g6
Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpNZXRyaWNzOjpQ
cmlvcml0eTo6SGlnaDsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpOZXR3b3JrOjpNZXRyaWNz
OjpQcmlvcml0eTo6SGlnaDsKICAgICBjYXNlIE5ldHdvcmtMb2FkUHJpb3JpdHk6OlVua25vd246
CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAg
IHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpNZXRyaWNzOjpQcmlvcml0eTo6
TWVkaXVtOworICAgIHJldHVybiBQcm90b2NvbDo6TmV0d29yazo6TWV0cmljczo6UHJpb3JpdHk6
Ok1lZGl1bTsKIH0KIAotUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6Ok1ldHJpY3M+
IEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6YnVpbGRPYmplY3RGb3JNZXRyaWNzKGNvbnN0IE5ldHdv
cmtMb2FkTWV0cmljcyYgbmV0d29ya0xvYWRNZXRyaWNzKQorUmVmPFByb3RvY29sOjpOZXR3b3Jr
OjpNZXRyaWNzPiBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yTWV0cmljcyhj
b25zdCBOZXR3b3JrTG9hZE1ldHJpY3MmIG5ldHdvcmtMb2FkTWV0cmljcykKIHsKLSAgICBhdXRv
IG1ldHJpY3MgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpNZXRyaWNzOjpjcmVhdGUo
KS5yZWxlYXNlKCk7CisgICAgYXV0byBtZXRyaWNzID0gUHJvdG9jb2w6Ok5ldHdvcms6Ok1ldHJp
Y3M6OmNyZWF0ZSgpLnJlbGVhc2UoKTsKIAogICAgIGlmICghbmV0d29ya0xvYWRNZXRyaWNzLnBy
b3RvY29sLmlzTnVsbCgpKQogICAgICAgICBtZXRyaWNzLT5zZXRQcm90b2NvbChuZXR3b3JrTG9h
ZE1ldHJpY3MucHJvdG9jb2wpOwpAQCAtMjg2LDcgKzI4Nyw3IEBAIFJlZjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpOZXR3b3JrOjpNZXRyaWNzPiBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmJ1aWxkT2Jq
ZWN0Rm9yCiAgICAgaWYgKG5ldHdvcmtMb2FkTWV0cmljcy5yZXNwb25zZUJvZHlEZWNvZGVkU2l6
ZSAhPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQ2NF90Pjo6bWF4KCkpCiAgICAgICAgIG1ldHJp
Y3MtPnNldFJlc3BvbnNlQm9keURlY29kZWRTaXplKG5ldHdvcmtMb2FkTWV0cmljcy5yZXNwb25z
ZUJvZHlEZWNvZGVkU2l6ZSk7CiAKLSAgICBhdXRvIGNvbm5lY3Rpb25QYXlsb2FkID0gSW5zcGVj
dG9yOjpQcm90b2NvbDo6U2VjdXJpdHk6OkNvbm5lY3Rpb246OmNyZWF0ZSgpCisgICAgYXV0byBj
b25uZWN0aW9uUGF5bG9hZCA9IFByb3RvY29sOjpTZWN1cml0eTo6Q29ubmVjdGlvbjo6Y3JlYXRl
KCkKICAgICAgICAgLnJlbGVhc2UoKTsKIAogICAgIGlmICghbmV0d29ya0xvYWRNZXRyaWNzLnRs
c1Byb3RvY29sLmlzRW1wdHkoKSkKQEAgLTMwMCw5ICszMDEsOSBAQCBSZWY8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6TmV0d29yazo6TWV0cmljcz4gSW5zcGVjdG9yTmV0d29ya0FnZW50OjpidWlsZE9i
amVjdEZvcgogICAgIHJldHVybiBtZXRyaWNzOwogfQogCi1zdGF0aWMgUmVmPEluc3BlY3Rvcjo6
UHJvdG9jb2w6Ok5ldHdvcms6OlJlcXVlc3Q+IGJ1aWxkT2JqZWN0Rm9yUmVzb3VyY2VSZXF1ZXN0
KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKK3N0YXRpYyBSZWY8UHJvdG9jb2w6Ok5l
dHdvcms6OlJlcXVlc3Q+IGJ1aWxkT2JqZWN0Rm9yUmVzb3VyY2VSZXF1ZXN0KGNvbnN0IFJlc291
cmNlUmVxdWVzdCYgcmVxdWVzdCkKIHsKLSAgICBhdXRvIHJlcXVlc3RPYmplY3QgPSBJbnNwZWN0
b3I6OlByb3RvY29sOjpOZXR3b3JrOjpSZXF1ZXN0OjpjcmVhdGUoKQorICAgIGF1dG8gcmVxdWVz
dE9iamVjdCA9IFByb3RvY29sOjpOZXR3b3JrOjpSZXF1ZXN0OjpjcmVhdGUoKQogICAgICAgICAu
c2V0VXJsKHJlcXVlc3QudXJsKCkuc3RyaW5nKCkpCiAgICAgICAgIC5zZXRNZXRob2QocmVxdWVz
dC5odHRwTWV0aG9kKCkpCiAgICAgICAgIC5zZXRIZWFkZXJzKGJ1aWxkT2JqZWN0Rm9ySGVhZGVy
cyhyZXF1ZXN0Lmh0dHBIZWFkZXJGaWVsZHMoKSkpCkBAIC0zMTQsNDQgKzMxNSw0MiBAQCBzdGF0
aWMgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OlJlcXVlc3Q+IGJ1aWxkT2JqZWN0
Rm9yUmVzb3VyY2VSZXF1ZXN0KAogICAgIHJldHVybiByZXF1ZXN0T2JqZWN0OwogfQogCi1zdGF0
aWMgSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6UmVzcG9uc2U6OlNvdXJjZSByZXNwb25z
ZVNvdXJjZShSZXNvdXJjZVJlc3BvbnNlOjpTb3VyY2Ugc291cmNlKQorc3RhdGljIFByb3RvY29s
OjpOZXR3b3JrOjpSZXNwb25zZTo6U291cmNlIHJlc3BvbnNlU291cmNlKFJlc291cmNlUmVzcG9u
c2U6OlNvdXJjZSBzb3VyY2UpCiB7CiAgICAgc3dpdGNoIChzb3VyY2UpIHsKICAgICBjYXNlIFJl
c291cmNlUmVzcG9uc2U6OlNvdXJjZTo6RE9NQ2FjaGU6CiAgICAgY2FzZSBSZXNvdXJjZVJlc3Bv
bnNlOjpTb3VyY2U6OkFwcGxpY2F0aW9uQ2FjaGU6CiAgICAgICAgIC8vIEZJWE1FOiBBZGQgc3Vw
cG9ydCBmb3IgQXBwbGljYXRpb25DYWNoZSBpbiBpbnNwZWN0b3IuCiAgICAgY2FzZSBSZXNvdXJj
ZVJlc3BvbnNlOjpTb3VyY2U6OlVua25vd246Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlBy
b3RvY29sOjpOZXR3b3JrOjpSZXNwb25zZTo6U291cmNlOjpVbmtub3duOworICAgICAgICByZXR1
cm4gUHJvdG9jb2w6Ok5ldHdvcms6OlJlc3BvbnNlOjpTb3VyY2U6OlVua25vd247CiAgICAgY2Fz
ZSBSZXNvdXJjZVJlc3BvbnNlOjpTb3VyY2U6Ok5ldHdvcms6Ci0gICAgICAgIHJldHVybiBJbnNw
ZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpSZXNwb25zZTo6U291cmNlOjpOZXR3b3JrOworICAg
ICAgICByZXR1cm4gUHJvdG9jb2w6Ok5ldHdvcms6OlJlc3BvbnNlOjpTb3VyY2U6Ok5ldHdvcms7
CiAgICAgY2FzZSBSZXNvdXJjZVJlc3BvbnNlOjpTb3VyY2U6Ok1lbW9yeUNhY2hlOgogICAgIGNh
c2UgUmVzb3VyY2VSZXNwb25zZTo6U291cmNlOjpNZW1vcnlDYWNoZUFmdGVyVmFsaWRhdGlvbjoK
LSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OlJlc3BvbnNlOjpT
b3VyY2U6Ok1lbW9yeUNhY2hlOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6Ok5ldHdvcms6OlJl
c3BvbnNlOjpTb3VyY2U6Ok1lbW9yeUNhY2hlOwogICAgIGNhc2UgUmVzb3VyY2VSZXNwb25zZTo6
U291cmNlOjpEaXNrQ2FjaGU6CiAgICAgY2FzZSBSZXNvdXJjZVJlc3BvbnNlOjpTb3VyY2U6OkRp
c2tDYWNoZUFmdGVyVmFsaWRhdGlvbjoKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9j
b2w6Ok5ldHdvcms6OlJlc3BvbnNlOjpTb3VyY2U6OkRpc2tDYWNoZTsKKyAgICAgICAgcmV0dXJu
IFByb3RvY29sOjpOZXR3b3JrOjpSZXNwb25zZTo6U291cmNlOjpEaXNrQ2FjaGU7CiAgICAgY2Fz
ZSBSZXNvdXJjZVJlc3BvbnNlOjpTb3VyY2U6OlNlcnZpY2VXb3JrZXI6Ci0gICAgICAgIHJldHVy
biBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpSZXNwb25zZTo6U291cmNlOjpTZXJ2aWNl
V29ya2VyOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6Ok5ldHdvcms6OlJlc3BvbnNlOjpTb3Vy
Y2U6OlNlcnZpY2VXb3JrZXI7CiAgICAgY2FzZSBSZXNvdXJjZVJlc3BvbnNlOjpTb3VyY2U6Oklu
c3BlY3Rvck92ZXJyaWRlOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0
d29yazo6UmVzcG9uc2U6OlNvdXJjZTo6SW5zcGVjdG9yT3ZlcnJpZGU7CisgICAgICAgIHJldHVy
biBQcm90b2NvbDo6TmV0d29yazo6UmVzcG9uc2U6OlNvdXJjZTo6SW5zcGVjdG9yT3ZlcnJpZGU7
CiAgICAgfQogCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIEluc3BlY3Rv
cjo6UHJvdG9jb2w6Ok5ldHdvcms6OlJlc3BvbnNlOjpTb3VyY2U6OlVua25vd247CisgICAgcmV0
dXJuIFByb3RvY29sOjpOZXR3b3JrOjpSZXNwb25zZTo6U291cmNlOjpVbmtub3duOwogfQogCi1S
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6UmVzcG9uc2U+IEluc3BlY3Rvck5l
dHdvcmtBZ2VudDo6YnVpbGRPYmplY3RGb3JSZXNvdXJjZVJlc3BvbnNlKGNvbnN0IFJlc291cmNl
UmVzcG9uc2UmIHJlc3BvbnNlLCBSZXNvdXJjZUxvYWRlciogcmVzb3VyY2VMb2FkZXIpCitSZWZQ
dHI8UHJvdG9jb2w6Ok5ldHdvcms6OlJlc3BvbnNlPiBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmJ1
aWxkT2JqZWN0Rm9yUmVzb3VyY2VSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNw
b25zZSwgUmVzb3VyY2VMb2FkZXIqIHJlc291cmNlTG9hZGVyKQogewogICAgIGlmIChyZXNwb25z
ZS5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBSZWY8SlNPTjo6T2Jq
ZWN0PiBoZWFkZXJzID0gYnVpbGRPYmplY3RGb3JIZWFkZXJzKHJlc3BvbnNlLmh0dHBIZWFkZXJG
aWVsZHMoKSk7Ci0KLSAgICBhdXRvIHJlc3BvbnNlT2JqZWN0ID0gSW5zcGVjdG9yOjpQcm90b2Nv
bDo6TmV0d29yazo6UmVzcG9uc2U6OmNyZWF0ZSgpCisgICAgYXV0byByZXNwb25zZU9iamVjdCA9
IFByb3RvY29sOjpOZXR3b3JrOjpSZXNwb25zZTo6Y3JlYXRlKCkKICAgICAgICAgLnNldFVybChy
ZXNwb25zZS51cmwoKS5zdHJpbmcoKSkKICAgICAgICAgLnNldFN0YXR1cyhyZXNwb25zZS5odHRw
U3RhdHVzQ29kZSgpKQogICAgICAgICAuc2V0U3RhdHVzVGV4dChyZXNwb25zZS5odHRwU3RhdHVz
VGV4dCgpKQotICAgICAgICAuc2V0SGVhZGVycyhXVEZNb3ZlKGhlYWRlcnMpKQorICAgICAgICAu
c2V0SGVhZGVycyhidWlsZE9iamVjdEZvckhlYWRlcnMocmVzcG9uc2UuaHR0cEhlYWRlckZpZWxk
cygpKSkKICAgICAgICAgLnNldE1pbWVUeXBlKHJlc3BvbnNlLm1pbWVUeXBlKCkpCiAgICAgICAg
IC5zZXRTb3VyY2UocmVzcG9uc2VTb3VyY2UocmVzcG9uc2Uuc291cmNlKCkpKQogICAgICAgICAu
cmVsZWFzZSgpOwpAQCAtMzYwLDExICszNTksMTEgQEAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9j
b2w6Ok5ldHdvcms6OlJlc3BvbnNlPiBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmJ1aWxkT2JqZWMK
ICAgICAgICAgcmVzcG9uc2VPYmplY3QtPnNldFRpbWluZyhidWlsZE9iamVjdEZvclRpbWluZyhy
ZXNwb25zZS5kZXByZWNhdGVkTmV0d29ya0xvYWRNZXRyaWNzT3JOdWxsKCksICpyZXNvdXJjZUxv
YWRlcikpOwogCiAgICAgaWYgKGF1dG8mIGNlcnRpZmljYXRlSW5mbyA9IHJlc3BvbnNlLmNlcnRp
ZmljYXRlSW5mbygpKSB7Ci0gICAgICAgIGF1dG8gc2VjdXJpdHlQYXlsb2FkID0gSW5zcGVjdG9y
OjpQcm90b2NvbDo6U2VjdXJpdHk6OlNlY3VyaXR5OjpjcmVhdGUoKQorICAgICAgICBhdXRvIHNl
Y3VyaXR5UGF5bG9hZCA9IFByb3RvY29sOjpTZWN1cml0eTo6U2VjdXJpdHk6OmNyZWF0ZSgpCiAg
ICAgICAgICAgICAucmVsZWFzZSgpOwogCiAgICAgICAgIGlmIChhdXRvIGNlcnRpZmljYXRlU3Vt
bWFyeUluZm8gPSBjZXJ0aWZpY2F0ZUluZm8udmFsdWUoKS5zdW1tYXJ5KCkpIHsKLSAgICAgICAg
ICAgIGF1dG8gY2VydGlmaWNhdGVQYXlsb2FkID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6U2VjdXJp
dHk6OkNlcnRpZmljYXRlOjpjcmVhdGUoKQorICAgICAgICAgICAgYXV0byBjZXJ0aWZpY2F0ZVBh
eWxvYWQgPSBQcm90b2NvbDo6U2VjdXJpdHk6OkNlcnRpZmljYXRlOjpjcmVhdGUoKQogICAgICAg
ICAgICAgICAgIC5yZWxlYXNlKCk7CiAKICAgICAgICAgICAgIGNlcnRpZmljYXRlUGF5bG9hZC0+
c2V0U3ViamVjdChjZXJ0aWZpY2F0ZVN1bW1hcnlJbmZvLnZhbHVlKCkuc3ViamVjdCk7CkBAIC0z
OTYsMTYgKzM5NSwxNiBAQCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6UmVz
cG9uc2U+IEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6YnVpbGRPYmplYwogICAgIHJldHVybiByZXNw
b25zZU9iamVjdDsKIH0KIAotUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OkNhY2hl
ZFJlc291cmNlPiBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yQ2FjaGVkUmVz
b3VyY2UoQ2FjaGVkUmVzb3VyY2UqIGNhY2hlZFJlc291cmNlKQorUmVmPFByb3RvY29sOjpOZXR3
b3JrOjpDYWNoZWRSZXNvdXJjZT4gSW5zcGVjdG9yTmV0d29ya0FnZW50OjpidWlsZE9iamVjdEZv
ckNhY2hlZFJlc291cmNlKENhY2hlZFJlc291cmNlKiBjYWNoZWRSZXNvdXJjZSkKIHsKLSAgICBh
dXRvIHJlc291cmNlT2JqZWN0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6Q2FjaGVk
UmVzb3VyY2U6OmNyZWF0ZSgpCisgICAgYXV0byByZXNvdXJjZU9iamVjdCA9IFByb3RvY29sOjpO
ZXR3b3JrOjpDYWNoZWRSZXNvdXJjZTo6Y3JlYXRlKCkKICAgICAgICAgLnNldFVybChjYWNoZWRS
ZXNvdXJjZS0+dXJsKCkuc3RyaW5nKCkpCiAgICAgICAgIC5zZXRUeXBlKEluc3BlY3RvclBhZ2VB
Z2VudDo6Y2FjaGVkUmVzb3VyY2VUeXBlSlNPTigqY2FjaGVkUmVzb3VyY2UpKQogICAgICAgICAu
c2V0Qm9keVNpemUoY2FjaGVkUmVzb3VyY2UtPmVuY29kZWRTaXplKCkpCiAgICAgICAgIC5yZWxl
YXNlKCk7CiAKLSAgICBhdXRvIHJlc291cmNlUmVzcG9uc2UgPSBidWlsZE9iamVjdEZvclJlc291
cmNlUmVzcG9uc2UoY2FjaGVkUmVzb3VyY2UtPnJlc3BvbnNlKCksIGNhY2hlZFJlc291cmNlLT5s
b2FkZXIoKSk7Ci0gICAgcmVzb3VyY2VPYmplY3QtPnNldFJlc3BvbnNlKFdURk1vdmUocmVzb3Vy
Y2VSZXNwb25zZSkpOworICAgIGlmIChhdXRvIHJlc291cmNlUmVzcG9uc2UgPSBidWlsZE9iamVj
dEZvclJlc291cmNlUmVzcG9uc2UoY2FjaGVkUmVzb3VyY2UtPnJlc3BvbnNlKCksIGNhY2hlZFJl
c291cmNlLT5sb2FkZXIoKSkpCisgICAgICAgIHJlc291cmNlT2JqZWN0LT5zZXRSZXNwb25zZShy
ZXNvdXJjZVJlc3BvbnNlLnJlbGVhc2VOb25OdWxsKCkpOwogCiAgICAgU3RyaW5nIHNvdXJjZU1h
cHBpbmdVUkwgPSBJbnNwZWN0b3JQYWdlQWdlbnQ6OnNvdXJjZU1hcFVSTEZvclJlc291cmNlKGNh
Y2hlZFJlc291cmNlKTsKICAgICBpZiAoIXNvdXJjZU1hcHBpbmdVUkwuaXNFbXB0eSgpKQpAQCAt
NDI5LDkgKzQyOCw5IEBAIHZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50Ojp3aWxsU2VuZFJlcXVl
c3QodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBEb2N1bWVudExvCiAgICAgZG91YmxlIHNlbmRU
aW1lc3RhbXAgPSB0aW1lc3RhbXAoKTsKICAgICBXYWxsVGltZSB3YWxsdGltZSA9IFdhbGxUaW1l
Ojpub3coKTsKIAotICAgIFN0cmluZyByZXF1ZXN0SWQgPSBJZGVudGlmaWVyc0ZhY3Rvcnk6OnJl
cXVlc3RJZChpZGVudGlmaWVyKTsKLSAgICBTdHJpbmcgZnJhbWVJZCA9IGZyYW1lSWRlbnRpZmll
cihsb2FkZXIpOwotICAgIFN0cmluZyBsb2FkZXJJZCA9IGxvYWRlcklkZW50aWZpZXIobG9hZGVy
KTsKKyAgICBhdXRvIHJlcXVlc3RJZCA9IElkZW50aWZpZXJzRmFjdG9yeTo6cmVxdWVzdElkKGlk
ZW50aWZpZXIpOworICAgIGF1dG8gZnJhbWVJZCA9IGZyYW1lSWRlbnRpZmllcihsb2FkZXIpOwor
ICAgIGF1dG8gbG9hZGVySWQgPSBsb2FkZXJJZGVudGlmaWVyKGxvYWRlcik7CiAgICAgU3RyaW5n
IHRhcmdldElkID0gcmVxdWVzdC5pbml0aWF0b3JJZGVudGlmaWVyKCk7CiAKICAgICBpZiAodHlw
ZSA9PSBJbnNwZWN0b3JQYWdlQWdlbnQ6Ok90aGVyUmVzb3VyY2UpIHsKQEAgLTQ2Miw3ICs0NjEs
MTAgQEAgdm9pZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OndpbGxTZW5kUmVxdWVzdCh1bnNpZ25l
ZCBsb25nIGlkZW50aWZpZXIsIERvY3VtZW50TG8KICAgICBhdXRvIGluaXRpYXRvck9iamVjdCA9
IGJ1aWxkSW5pdGlhdG9yT2JqZWN0KGRvY3VtZW50LCAmcmVxdWVzdCk7CiAKICAgICBTdHJpbmcg
dXJsID0gbG9hZGVyID8gbG9hZGVyLT51cmwoKS5zdHJpbmcoKSA6IHJlcXVlc3QudXJsKCkuc3Ry
aW5nKCk7Ci0gICAgbV9mcm9udGVuZERpc3BhdGNoZXItPnJlcXVlc3RXaWxsQmVTZW50KHJlcXVl
c3RJZCwgZnJhbWVJZCwgbG9hZGVySWQsIHVybCwgYnVpbGRPYmplY3RGb3JSZXNvdXJjZVJlcXVl
c3QocmVxdWVzdCksIHNlbmRUaW1lc3RhbXAsIHdhbGx0aW1lLnNlY29uZHNTaW5jZUVwb2NoKCku
c2Vjb25kcygpLCBpbml0aWF0b3JPYmplY3QsIGJ1aWxkT2JqZWN0Rm9yUmVzb3VyY2VSZXNwb25z
ZShyZWRpcmVjdFJlc3BvbnNlLCBudWxscHRyKSwgdHlwZSAhPSBJbnNwZWN0b3JQYWdlQWdlbnQ6
Ok90aGVyUmVzb3VyY2UgPyAmcHJvdG9jb2xSZXNvdXJjZVR5cGUgOiBudWxscHRyLCB0YXJnZXRJ
ZC5pc0VtcHR5KCkgPyBudWxscHRyIDogJnRhcmdldElkKTsKKyAgICBPcHRpb25hbDxQcm90b2Nv
bDo6UGFnZTo6UmVzb3VyY2VUeXBlPiB0eXBlUGF5bG9hZDsKKyAgICBpZiAodHlwZSAhPSBJbnNw
ZWN0b3JQYWdlQWdlbnQ6Ok90aGVyUmVzb3VyY2UpCisgICAgICAgIHR5cGVQYXlsb2FkID0gcHJv
dG9jb2xSZXNvdXJjZVR5cGU7CisgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPnJlcXVlc3RXaWxs
QmVTZW50KHJlcXVlc3RJZCwgZnJhbWVJZCwgbG9hZGVySWQsIHVybCwgYnVpbGRPYmplY3RGb3JS
ZXNvdXJjZVJlcXVlc3QocmVxdWVzdCksIHNlbmRUaW1lc3RhbXAsIHdhbGx0aW1lLnNlY29uZHNT
aW5jZUVwb2NoKCkuc2Vjb25kcygpLCBXVEZNb3ZlKGluaXRpYXRvck9iamVjdCksIGJ1aWxkT2Jq
ZWN0Rm9yUmVzb3VyY2VSZXNwb25zZShyZWRpcmVjdFJlc3BvbnNlLCBudWxscHRyKSwgV1RGTW92
ZSh0eXBlUGF5bG9hZCksIHRhcmdldElkKTsKIH0KIAogc3RhdGljIEluc3BlY3RvclBhZ2VBZ2Vu
dDo6UmVzb3VyY2VUeXBlIHJlc291cmNlVHlwZUZvckNhY2hlZFJlc291cmNlKENhY2hlZFJlc291
cmNlKiByZXNvdXJjZSkKQEAgLTUxNCw3ICs1MTYsOCBAQCB2b2lkIEluc3BlY3Rvck5ldHdvcmtB
Z2VudDo6ZGlkUmVjZWl2ZVJlc3BvbnNlKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgRG9jdW1l
bgogICAgICAgICB9KTsKICAgICB9CiAKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
TmV0d29yazo6UmVzcG9uc2U+IHJlc291cmNlUmVzcG9uc2UgPSBidWlsZE9iamVjdEZvclJlc291
cmNlUmVzcG9uc2UocmVhbFJlc3BvbnNlID8gKnJlYWxSZXNwb25zZSA6IHJlc3BvbnNlLCByZXNv
dXJjZUxvYWRlcik7CisgICAgUmVmUHRyPFByb3RvY29sOjpOZXR3b3JrOjpSZXNwb25zZT4gcmVz
b3VyY2VSZXNwb25zZSA9IGJ1aWxkT2JqZWN0Rm9yUmVzb3VyY2VSZXNwb25zZShyZWFsUmVzcG9u
c2UgPyAqcmVhbFJlc3BvbnNlIDogcmVzcG9uc2UsIHJlc291cmNlTG9hZGVyKTsKKyAgICBBU1NF
UlQocmVzb3VyY2VSZXNwb25zZSk7CiAKICAgICBib29sIGlzTm90TW9kaWZpZWQgPSByZXNwb25z
ZS5odHRwU3RhdHVzQ29kZSgpID09IDMwNDsKIApAQCAtNTI3LDcgKzUzMCw3IEBAIHZvaWQgSW5z
cGVjdG9yTmV0d29ya0FnZW50OjpkaWRSZWNlaXZlUmVzcG9uc2UodW5zaWduZWQgbG9uZyBpZGVu
dGlmaWVyLCBEb2N1bWVuCiAgICAgaWYgKGNhY2hlZFJlc291cmNlKSB7CiAgICAgICAgIC8vIFVz
ZSBtaW1lIHR5cGUgZnJvbSBjYWNoZWQgcmVzb3VyY2UgaW4gY2FzZSB0aGUgb25lIGluIHJlc3Bv
bnNlIGlzIGVtcHR5LgogICAgICAgICBpZiAocmVzb3VyY2VSZXNwb25zZSAmJiByZXNwb25zZS5t
aW1lVHlwZSgpLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJlc291cmNlUmVzcG9uc2UtPnNldFN0
cmluZyhJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpSZXNwb25zZTo6TWltZVR5cGUsIGNh
Y2hlZFJlc291cmNlLT5yZXNwb25zZSgpLm1pbWVUeXBlKCkpOworICAgICAgICAgICAgcmVzb3Vy
Y2VSZXNwb25zZS0+c2V0U3RyaW5nKFByb3RvY29sOjpOZXR3b3JrOjpSZXNwb25zZTo6bWltZVR5
cGVLZXksIGNhY2hlZFJlc291cmNlLT5yZXNwb25zZSgpLm1pbWVUeXBlKCkpOwogICAgICAgICBt
X3Jlc291cmNlc0RhdGEtPmFkZENhY2hlZFJlc291cmNlKHJlcXVlc3RJZCwgY2FjaGVkUmVzb3Vy
Y2UpOwogICAgIH0KIApAQCAtNTQ5LDIxICs1NTIsMjEgQEAgdm9pZCBJbnNwZWN0b3JOZXR3b3Jr
QWdlbnQ6OmRpZFJlY2VpdmVSZXNwb25zZSh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIERvY3Vt
ZW4KICAgICAgICAgICAgICAgICBtX3Jlc291cmNlc0RhdGEtPm1heWJlQWRkUmVzb3VyY2VEYXRh
KHJlcXVlc3RJZCwgcHJldmlvdXNCdWZmZXItPmRhdGEoKSwgcHJldmlvdXNCdWZmZXItPnNpemUo
KSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIHJlc291cmNlUmVz
cG9uc2UtPnNldFN0cmluZygibWltZVR5cGUiX3MsIHByZXZpb3VzUmVzb3VyY2VEYXRhLT5taW1l
VHlwZSgpKTsKKyAgICAgICAgICAgIHJlc291cmNlUmVzcG9uc2UtPnNldFN0cmluZyhQcm90b2Nv
bDo6TmV0d29yazo6UmVzcG9uc2U6Om1pbWVUeXBlS2V5LCBwcmV2aW91c1Jlc291cmNlRGF0YS0+
bWltZVR5cGUoKSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIHJlc291cmNlUmVzcG9uc2Ut
PnNldEludGVnZXIoInN0YXR1cyJfcywgcHJldmlvdXNSZXNvdXJjZURhdGEtPmh0dHBTdGF0dXND
b2RlKCkpOwotICAgICAgICAgICAgcmVzb3VyY2VSZXNwb25zZS0+c2V0U3RyaW5nKCJzdGF0dXNU
ZXh0Il9zLCBwcmV2aW91c1Jlc291cmNlRGF0YS0+aHR0cFN0YXR1c1RleHQoKSk7CisgICAgICAg
ICAgICByZXNvdXJjZVJlc3BvbnNlLT5zZXRJbnRlZ2VyKFByb3RvY29sOjpOZXR3b3JrOjpSZXNw
b25zZTo6c3RhdHVzS2V5LCBwcmV2aW91c1Jlc291cmNlRGF0YS0+aHR0cFN0YXR1c0NvZGUoKSk7
CisgICAgICAgICAgICByZXNvdXJjZVJlc3BvbnNlLT5zZXRTdHJpbmcoUHJvdG9jb2w6Ok5ldHdv
cms6OlJlc3BvbnNlOjpzdGF0dXNUZXh0S2V5LCBwcmV2aW91c1Jlc291cmNlRGF0YS0+aHR0cFN0
YXR1c1RleHQoKSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIHJlc291cmNlUmVzcG9uc2Ut
PnNldFN0cmluZygic291cmNlIl9zLCBJbnNwZWN0b3I6OlByb3RvY29sOjpJbnNwZWN0b3JIZWxw
ZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpS
ZXNwb25zZTo6U291cmNlOjpEaXNrQ2FjaGUpKTsKKyAgICAgICAgICAgIHJlc291cmNlUmVzcG9u
c2UtPnNldFN0cmluZyhQcm90b2NvbDo6TmV0d29yazo6UmVzcG9uc2U6OnNvdXJjZUtleSwgUHJv
dG9jb2w6OkhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKFByb3RvY29sOjpOZXR3b3JrOjpS
ZXNwb25zZTo6U291cmNlOjpEaXNrQ2FjaGUpKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIFN0
cmluZyBmcmFtZUlkID0gZnJhbWVJZGVudGlmaWVyKGxvYWRlcik7Ci0gICAgU3RyaW5nIGxvYWRl
cklkID0gbG9hZGVySWRlbnRpZmllcihsb2FkZXIpOworICAgIFByb3RvY29sOjpOZXR3b3JrOjpG
cmFtZUlkIGZyYW1lSWQgPSBmcmFtZUlkZW50aWZpZXIobG9hZGVyKTsKKyAgICBQcm90b2NvbDo6
TmV0d29yazo6TG9hZGVySWQgbG9hZGVySWQgPSBsb2FkZXJJZGVudGlmaWVyKGxvYWRlcik7CiAK
ICAgICBtX3Jlc291cmNlc0RhdGEtPnJlc3BvbnNlUmVjZWl2ZWQocmVxdWVzdElkLCBmcmFtZUlk
LCByZXNwb25zZSwgdHlwZSwgc2hvdWxkRm9yY2VCdWZmZXJpbmdOZXR3b3JrUmVzb3VyY2VEYXRh
KCkpOwogCi0gICAgbV9mcm9udGVuZERpc3BhdGNoZXItPnJlc3BvbnNlUmVjZWl2ZWQocmVxdWVz
dElkLCBmcmFtZUlkLCBsb2FkZXJJZCwgdGltZXN0YW1wKCksIEluc3BlY3RvclBhZ2VBZ2VudDo6
cmVzb3VyY2VUeXBlSlNPTih0eXBlKSwgcmVzb3VyY2VSZXNwb25zZSk7CisgICAgbV9mcm9udGVu
ZERpc3BhdGNoZXItPnJlc3BvbnNlUmVjZWl2ZWQocmVxdWVzdElkLCBmcmFtZUlkLCBsb2FkZXJJ
ZCwgdGltZXN0YW1wKCksIEluc3BlY3RvclBhZ2VBZ2VudDo6cmVzb3VyY2VUeXBlSlNPTih0eXBl
KSwgcmVzb3VyY2VSZXNwb25zZS5yZWxlYXNlTm9uTnVsbCgpKTsKIAogICAgIC8vIElmIHdlIHJl
dmFsaWRhdGVkIHRoZSByZXNvdXJjZSBhbmQgZ290IE5vdCBtb2RpZmllZCwgc2VuZCBjb250ZW50
IGxlbmd0aCBmb2xsb3dpbmcgZGlkUmVjZWl2ZVJlc3BvbnNlCiAgICAgLy8gYXMgdGhlcmUgd2ls
bCBiZSBubyBjYWxscyB0byBkaWRSZWNlaXZlRGF0YSBmcm9tIHRoZSBuZXR3b3JrIHN0YWNrLgpA
QCAtNjIxLDkgKzYyNCw5IEBAIHZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50OjpkaWRGaW5pc2hM
b2FkaW5nKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgRG9jdW1lbnRMCiAgICAgICAgICAgICBy
ZWFsTWV0cmljcyA9IHBsYXRmb3JtU3RyYXRlZ2llcygpLT5sb2FkZXJTdHJhdGVneSgpLT5uZXR3
b3JrTWV0cmljc0Zyb21SZXNvdXJjZUxvYWRJZGVudGlmaWVyKGlkZW50aWZpZXIpLmlzb2xhdGVk
Q29weSgpOwogICAgICAgICB9KTsKICAgICB9Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9j
b2w6Ok5ldHdvcms6Ok1ldHJpY3M+IG1ldHJpY3MgPSBidWlsZE9iamVjdEZvck1ldHJpY3MocmVh
bE1ldHJpY3MgPyAqcmVhbE1ldHJpY3MgOiBuZXR3b3JrTG9hZE1ldHJpY3MpOworICAgIFJlZlB0
cjxQcm90b2NvbDo6TmV0d29yazo6TWV0cmljcz4gbWV0cmljcyA9IGJ1aWxkT2JqZWN0Rm9yTWV0
cmljcyhyZWFsTWV0cmljcyA/ICpyZWFsTWV0cmljcyA6IG5ldHdvcmtMb2FkTWV0cmljcyk7CiAK
LSAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+bG9hZGluZ0ZpbmlzaGVkKHJlcXVlc3RJZCwgZWxh
cHNlZEZpbmlzaFRpbWUsICFzb3VyY2VNYXBwaW5nVVJMLmlzRW1wdHkoKSA/ICZzb3VyY2VNYXBw
aW5nVVJMIDogbnVsbHB0ciwgbWV0cmljcyk7CisgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPmxv
YWRpbmdGaW5pc2hlZChyZXF1ZXN0SWQsIGVsYXBzZWRGaW5pc2hUaW1lLCBzb3VyY2VNYXBwaW5n
VVJMLCBXVEZNb3ZlKG1ldHJpY3MpKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6
OmRpZEZhaWxMb2FkaW5nKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgRG9jdW1lbnRMb2FkZXIq
IGxvYWRlciwgY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCkBAIC02NDIsOCArNjQ1LDcgQEAg
dm9pZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmRpZEZhaWxMb2FkaW5nKHVuc2lnbmVkIGxvbmcg
aWRlbnRpZmllciwgRG9jdW1lbnRMb2EKICAgICAgICAgfQogICAgIH0KIAotICAgIGJvb2wgY2Fu
Y2VsZWQgPSBlcnJvci5pc0NhbmNlbGxhdGlvbigpOwotICAgIG1fZnJvbnRlbmREaXNwYXRjaGVy
LT5sb2FkaW5nRmFpbGVkKHJlcXVlc3RJZCwgdGltZXN0YW1wKCksIGVycm9yLmxvY2FsaXplZERl
c2NyaXB0aW9uKCksIGNhbmNlbGVkID8gJmNhbmNlbGVkIDogbnVsbHB0cik7CisgICAgbV9mcm9u
dGVuZERpc3BhdGNoZXItPmxvYWRpbmdGYWlsZWQocmVxdWVzdElkLCB0aW1lc3RhbXAoKSwgZXJy
b3IubG9jYWxpemVkRGVzY3JpcHRpb24oKSwgZXJyb3IuaXNDYW5jZWxsYXRpb24oKSk7CiB9CiAK
IHZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50OjpkaWRMb2FkUmVzb3VyY2VGcm9tTWVtb3J5Q2Fj
aGUoRG9jdW1lbnRMb2FkZXIqIGxvYWRlciwgQ2FjaGVkUmVzb3VyY2UmIHJlc291cmNlKQpAQCAt
NjU0LDggKzY1Niw4IEBAIHZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50OjpkaWRMb2FkUmVzb3Vy
Y2VGcm9tTWVtb3J5Q2FjaGUoRG9jdW1lbnRMb2FkZXIqIGxvYWRlCiAKICAgICB1bnNpZ25lZCBs
b25nIGlkZW50aWZpZXIgPSBsb2FkZXItPmZyYW1lKCktPnBhZ2UoKS0+cHJvZ3Jlc3MoKS5jcmVh
dGVVbmlxdWVJZGVudGlmaWVyKCk7CiAgICAgU3RyaW5nIHJlcXVlc3RJZCA9IElkZW50aWZpZXJz
RmFjdG9yeTo6cmVxdWVzdElkKGlkZW50aWZpZXIpOwotICAgIFN0cmluZyBsb2FkZXJJZCA9IGxv
YWRlcklkZW50aWZpZXIobG9hZGVyKTsKLSAgICBTdHJpbmcgZnJhbWVJZCA9IGZyYW1lSWRlbnRp
Zmllcihsb2FkZXIpOworICAgIFByb3RvY29sOjpOZXR3b3JrOjpMb2FkZXJJZCBsb2FkZXJJZCA9
IGxvYWRlcklkZW50aWZpZXIobG9hZGVyKTsKKyAgICBQcm90b2NvbDo6TmV0d29yazo6RnJhbWVJ
ZCBmcmFtZUlkID0gZnJhbWVJZGVudGlmaWVyKGxvYWRlcik7CiAKICAgICBtX3Jlc291cmNlc0Rh
dGEtPnJlc291cmNlQ3JlYXRlZChyZXF1ZXN0SWQsIGxvYWRlcklkLCByZXNvdXJjZSk7CiAKQEAg
LTY2NSw3ICs2NjcsNyBAQCB2b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6ZGlkTG9hZFJlc291
cmNlRnJvbU1lbW9yeUNhY2hlKERvY3VtZW50TG9hZGVyKiBsb2FkZQogICAgIC8vIGluc3RlYWQg
b2Ygd2hhdGV2ZXIgUmVzb3VyY2VSZXNwb25zZTo6U291cmNlIHRoZSBDYWNoZWRSZXNvdXJjZXMn
cyByZXNwb25zZSBoYXMuCiAgICAgLy8gVGhlIGZyb250ZW5kIGFscmVhZHkga25vd3MgZm9yIGNl
cnRhaW4gdGhhdCB0aGlzIHdhcyBzZXJ2ZWQgZnJvbSB0aGUgbWVtb3J5IGNhY2hlLgogCi0gICAg
bV9mcm9udGVuZERpc3BhdGNoZXItPnJlcXVlc3RTZXJ2ZWRGcm9tTWVtb3J5Q2FjaGUocmVxdWVz
dElkLCBmcmFtZUlkLCBsb2FkZXJJZCwgbG9hZGVyLT51cmwoKS5zdHJpbmcoKSwgdGltZXN0YW1w
KCksIGluaXRpYXRvck9iamVjdCwgYnVpbGRPYmplY3RGb3JDYWNoZWRSZXNvdXJjZSgmcmVzb3Vy
Y2UpKTsKKyAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+cmVxdWVzdFNlcnZlZEZyb21NZW1vcnlD
YWNoZShyZXF1ZXN0SWQsIGZyYW1lSWQsIGxvYWRlcklkLCBsb2FkZXItPnVybCgpLnN0cmluZygp
LCB0aW1lc3RhbXAoKSwgV1RGTW92ZShpbml0aWF0b3JPYmplY3QpLCBidWlsZE9iamVjdEZvckNh
Y2hlZFJlc291cmNlKCZyZXNvdXJjZSkpOwogfQogCiB2b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2Vu
dDo6c2V0SW5pdGlhbFNjcmlwdENvbnRlbnQodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25z
dCBTdHJpbmcmIHNvdXJjZVN0cmluZykKQEAgLTcyOSwyNiArNzMxLDI2IEBAIHZvaWQgSW5zcGVj
dG9yTmV0d29ya0FnZW50OjpkaWRTY2hlZHVsZVN0eWxlUmVjYWxjdWxhdGlvbihEb2N1bWVudCYg
ZG9jdW1lbnQpCiAgICAgICAgIG1fc3R5bGVSZWNhbGN1bGF0aW9uSW5pdGlhdG9yID0gYnVpbGRJ
bml0aWF0b3JPYmplY3QoJmRvY3VtZW50KTsKIH0KIAotUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9j
b2w6Ok5ldHdvcms6OkluaXRpYXRvcj4gSW5zcGVjdG9yTmV0d29ya0FnZW50OjpidWlsZEluaXRp
YXRvck9iamVjdChEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCogcmVz
b3VyY2VSZXF1ZXN0KQorUmVmPFByb3RvY29sOjpOZXR3b3JrOjpJbml0aWF0b3I+IEluc3BlY3Rv
ck5ldHdvcmtBZ2VudDo6YnVpbGRJbml0aWF0b3JPYmplY3QoRG9jdW1lbnQqIGRvY3VtZW50LCBj
b25zdCBSZXNvdXJjZVJlcXVlc3QqIHJlc291cmNlUmVxdWVzdCkKIHsKICAgICAvLyBGSVhNRTog
V29ya2VyIHN1cHBvcnQuCiAgICAgaWYgKCFpc01haW5UaHJlYWQoKSkgewotICAgICAgICByZXR1
cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6SW5pdGlhdG9yOjpjcmVhdGUoKQotICAg
ICAgICAgICAgLnNldFR5cGUoSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6SW5pdGlhdG9y
OjpUeXBlOjpPdGhlcikKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpOZXR3b3JrOjpJbml0aWF0
b3I6OmNyZWF0ZSgpCisgICAgICAgICAgICAuc2V0VHlwZShQcm90b2NvbDo6TmV0d29yazo6SW5p
dGlhdG9yOjpUeXBlOjpPdGhlcikKICAgICAgICAgICAgIC5yZWxlYXNlKCk7CiAgICAgfQogCi0g
ICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OkluaXRpYXRvcj4gaW5pdGlh
dG9yT2JqZWN0OworICAgIFJlZlB0cjxQcm90b2NvbDo6TmV0d29yazo6SW5pdGlhdG9yPiBpbml0
aWF0b3JPYmplY3Q7CiAKICAgICBSZWY8U2NyaXB0Q2FsbFN0YWNrPiBzdGFja1RyYWNlID0gY3Jl
YXRlU2NyaXB0Q2FsbFN0YWNrKEpTRXhlY1N0YXRlOjpjdXJyZW50U3RhdGUoKSk7CiAgICAgaWYg
KHN0YWNrVHJhY2UtPnNpemUoKSA+IDApIHsKLSAgICAgICAgaW5pdGlhdG9yT2JqZWN0ID0gSW5z
cGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6SW5pdGlhdG9yOjpjcmVhdGUoKQotICAgICAgICAg
ICAgLnNldFR5cGUoSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6SW5pdGlhdG9yOjpUeXBl
OjpTY3JpcHQpCisgICAgICAgIGluaXRpYXRvck9iamVjdCA9IFByb3RvY29sOjpOZXR3b3JrOjpJ
bml0aWF0b3I6OmNyZWF0ZSgpCisgICAgICAgICAgICAuc2V0VHlwZShQcm90b2NvbDo6TmV0d29y
azo6SW5pdGlhdG9yOjpUeXBlOjpTY3JpcHQpCiAgICAgICAgICAgICAucmVsZWFzZSgpOwogICAg
ICAgICBpbml0aWF0b3JPYmplY3QtPnNldFN0YWNrVHJhY2Uoc3RhY2tUcmFjZS0+YnVpbGRJbnNw
ZWN0b3JBcnJheSgpKTsKICAgICB9IGVsc2UgaWYgKGRvY3VtZW50ICYmIGRvY3VtZW50LT5zY3Jp
cHRhYmxlRG9jdW1lbnRQYXJzZXIoKSkgewotICAgICAgICBpbml0aWF0b3JPYmplY3QgPSBJbnNw
ZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpJbml0aWF0b3I6OmNyZWF0ZSgpCi0gICAgICAgICAg
ICAuc2V0VHlwZShJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpJbml0aWF0b3I6OlR5cGU6
OlBhcnNlcikKKyAgICAgICAgaW5pdGlhdG9yT2JqZWN0ID0gUHJvdG9jb2w6Ok5ldHdvcms6Oklu
aXRpYXRvcjo6Y3JlYXRlKCkKKyAgICAgICAgICAgIC5zZXRUeXBlKFByb3RvY29sOjpOZXR3b3Jr
OjpJbml0aWF0b3I6OlR5cGU6OlBhcnNlcikKICAgICAgICAgICAgIC5yZWxlYXNlKCk7CiAgICAg
ICAgIGluaXRpYXRvck9iamVjdC0+c2V0VXJsKGRvY3VtZW50LT51cmwoKS5zdHJpbmcoKSk7CiAg
ICAgICAgIGluaXRpYXRvck9iamVjdC0+c2V0TGluZU51bWJlcihkb2N1bWVudC0+c2NyaXB0YWJs
ZURvY3VtZW50UGFyc2VyKCktPnRleHRQb3NpdGlvbigpLm1fbGluZS5vbmVCYXNlZEludCgpKTsK
QEAgLTc1OCw4ICs3NjAsOCBAQCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6
SW5pdGlhdG9yPiBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmJ1aWxkSW5pdAogICAgIGlmIChkb21B
Z2VudCAmJiByZXNvdXJjZVJlcXVlc3QpIHsKICAgICAgICAgaWYgKGF1dG8gaW5zcGVjdG9ySW5p
dGlhdG9yTm9kZUlkZW50aWZpZXIgPSByZXNvdXJjZVJlcXVlc3QtPmluc3BlY3RvckluaXRpYXRv
ck5vZGVJZGVudGlmaWVyKCkpIHsKICAgICAgICAgICAgIGlmICghaW5pdGlhdG9yT2JqZWN0KSB7
Ci0gICAgICAgICAgICAgICAgaW5pdGlhdG9yT2JqZWN0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6
TmV0d29yazo6SW5pdGlhdG9yOjpjcmVhdGUoKQotICAgICAgICAgICAgICAgICAgICAuc2V0VHlw
ZShJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpJbml0aWF0b3I6OlR5cGU6Ok90aGVyKQor
ICAgICAgICAgICAgICAgIGluaXRpYXRvck9iamVjdCA9IFByb3RvY29sOjpOZXR3b3JrOjpJbml0
aWF0b3I6OmNyZWF0ZSgpCisgICAgICAgICAgICAgICAgICAgIC5zZXRUeXBlKFByb3RvY29sOjpO
ZXR3b3JrOjpJbml0aWF0b3I6OlR5cGU6Ok90aGVyKQogICAgICAgICAgICAgICAgICAgICAucmVs
ZWFzZSgpOwogICAgICAgICAgICAgfQogCkBAIC03NjgsMTMgKzc3MCwxMyBAQCBSZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6SW5pdGlhdG9yPiBJbnNwZWN0b3JOZXR3b3JrQWdl
bnQ6OmJ1aWxkSW5pdAogICAgIH0KIAogICAgIGlmIChpbml0aWF0b3JPYmplY3QpCi0gICAgICAg
IHJldHVybiBpbml0aWF0b3JPYmplY3Q7CisgICAgICAgIHJldHVybiBpbml0aWF0b3JPYmplY3Qu
cmVsZWFzZU5vbk51bGwoKTsKIAogICAgIGlmIChtX2lzUmVjYWxjdWxhdGluZ1N0eWxlICYmIG1f
c3R5bGVSZWNhbGN1bGF0aW9uSW5pdGlhdG9yKQotICAgICAgICByZXR1cm4gbV9zdHlsZVJlY2Fs
Y3VsYXRpb25Jbml0aWF0b3I7CisgICAgICAgIHJldHVybiAqbV9zdHlsZVJlY2FsY3VsYXRpb25J
bml0aWF0b3I7CiAKLSAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6SW5p
dGlhdG9yOjpjcmVhdGUoKQotICAgICAgICAuc2V0VHlwZShJbnNwZWN0b3I6OlByb3RvY29sOjpO
ZXR3b3JrOjpJbml0aWF0b3I6OlR5cGU6Ok90aGVyKQorICAgIHJldHVybiBQcm90b2NvbDo6TmV0
d29yazo6SW5pdGlhdG9yOjpjcmVhdGUoKQorICAgICAgICAuc2V0VHlwZShQcm90b2NvbDo6TmV0
d29yazo6SW5pdGlhdG9yOjpUeXBlOjpPdGhlcikKICAgICAgICAgLnJlbGVhc2UoKTsKIH0KIApA
QCAtNzg1LDcgKzc4Nyw3IEBAIHZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50OjpkaWRDcmVhdGVX
ZWJTb2NrZXQodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBVCiAKIHZvaWQgSW5zcGVj
dG9yTmV0d29ya0FnZW50Ojp3aWxsU2VuZFdlYlNvY2tldEhhbmRzaGFrZVJlcXVlc3QodW5zaWdu
ZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCiB7Ci0g
ICAgYXV0byByZXF1ZXN0T2JqZWN0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6V2Vi
U29ja2V0UmVxdWVzdDo6Y3JlYXRlKCkKKyAgICBhdXRvIHJlcXVlc3RPYmplY3QgPSBQcm90b2Nv
bDo6TmV0d29yazo6V2ViU29ja2V0UmVxdWVzdDo6Y3JlYXRlKCkKICAgICAgICAgLnNldEhlYWRl
cnMoYnVpbGRPYmplY3RGb3JIZWFkZXJzKHJlcXVlc3QuaHR0cEhlYWRlckZpZWxkcygpKSkKICAg
ICAgICAgLnJlbGVhc2UoKTsKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+d2ViU29ja2V0V2ls
bFNlbmRIYW5kc2hha2VSZXF1ZXN0KElkZW50aWZpZXJzRmFjdG9yeTo6cmVxdWVzdElkKGlkZW50
aWZpZXIpLCB0aW1lc3RhbXAoKSwgV2FsbFRpbWU6Om5vdygpLnNlY29uZHNTaW5jZUVwb2NoKCku
c2Vjb25kcygpLCBXVEZNb3ZlKHJlcXVlc3RPYmplY3QpKTsKQEAgLTc5Myw3ICs3OTUsNyBAQCB2
b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6d2lsbFNlbmRXZWJTb2NrZXRIYW5kc2hha2VSZXF1
ZXN0KHVuc2lnbmVkIGxvbmcgaWRlbgogCiB2b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6ZGlk
UmVjZWl2ZVdlYlNvY2tldEhhbmRzaGFrZVJlc3BvbnNlKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmll
ciwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCiB7Ci0gICAgYXV0byByZXNwb25z
ZU9iamVjdCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OldlYlNvY2tldFJlc3BvbnNl
OjpjcmVhdGUoKQorICAgIGF1dG8gcmVzcG9uc2VPYmplY3QgPSBQcm90b2NvbDo6TmV0d29yazo6
V2ViU29ja2V0UmVzcG9uc2U6OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRTdGF0dXMocmVzcG9uc2Uu
aHR0cFN0YXR1c0NvZGUoKSkKICAgICAgICAgLnNldFN0YXR1c1RleHQocmVzcG9uc2UuaHR0cFN0
YXR1c1RleHQoKSkKICAgICAgICAgLnNldEhlYWRlcnMoYnVpbGRPYmplY3RGb3JIZWFkZXJzKHJl
c3BvbnNlLmh0dHBIZWFkZXJGaWVsZHMoKSkpCkBAIC04MjAsMTIgKzgyMiw3IEBAIHZvaWQgSW5z
cGVjdG9yTmV0d29ya0FnZW50OjpkaWRSZWNlaXZlV2ViU29ja2V0RnJhbWVFcnJvcih1bnNpZ25l
ZCBsb25nIGlkZW50aWZpCiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPndlYlNvY2tldEZyYW1l
RXJyb3IoSWRlbnRpZmllcnNGYWN0b3J5OjpyZXF1ZXN0SWQoaWRlbnRpZmllciksIHRpbWVzdGFt
cCgpLCBlcnJvck1lc3NhZ2UpOwogfQogCi12b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6ZW5h
YmxlKEVycm9yU3RyaW5nJikKLXsKLSAgICBlbmFibGUoKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JO
ZXR3b3JrQWdlbnQ6OmVuYWJsZSgpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNw
ZWN0b3JOZXR3b3JrQWdlbnQ6OmVuYWJsZSgpCiB7CiAgICAgbV9lbmFibGVkID0gdHJ1ZTsKICAg
ICBtX2luc3RydW1lbnRpbmdBZ2VudHMuc2V0RW5hYmxlZE5ldHdvcmtBZ2VudCh0aGlzKTsKQEAg
LTg1Nyw5ICs4NTQsMTEgQEAgdm9pZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmVuYWJsZSgpCiAg
ICAgICAgICAgICAgICAgZGlkQ2xvc2VXZWJTb2NrZXQoaWRlbnRpZmllcik7CiAgICAgICAgIH0K
ICAgICB9CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2Vu
dDo6ZGlzYWJsZShFcnJvclN0cmluZyYpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJ
bnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmRpc2FibGUoKQogewogICAgIG1fZW5hYmxlZCA9IGZhbHNl
OwogICAgIG1faW50ZXJjZXB0aW9uRW5hYmxlZCA9IGZhbHNlOwpAQCAtODcyLDkgKzg3MSwxMSBA
QCB2b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6ZGlzYWJsZShFcnJvclN0cmluZyYpCiAgICAg
Y29udGludWVQZW5kaW5nUmVzcG9uc2VzKCk7CiAKICAgICBzZXRSZXNvdXJjZUNhY2hpbmdEaXNh
YmxlZChmYWxzZSk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi1ib29sIEluc3BlY3Rvck5ldHdv
cmtBZ2VudDo6c2hvdWxkSW50ZXJjZXB0KFVSTCB1cmwsIE5ldHdvcmtTdGFnZSBuZXR3b3JrU3Rh
Z2UpCitib29sIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6c2hvdWxkSW50ZXJjZXB0KFVSTCB1cmws
IFByb3RvY29sOjpOZXR3b3JrOjpOZXR3b3JrU3RhZ2UgbmV0d29ya1N0YWdlKQogewogICAgIHVy
bC5yZW1vdmVGcmFnbWVudElkZW50aWZpZXIoKTsKIApAQCAtOTExLDU2ICs5MTIsNTUgQEAgdm9p
ZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmNvbnRpbnVlUGVuZGluZ1Jlc3BvbnNlcygpCiAgICAg
bV9wZW5kaW5nSW50ZXJjZXB0UmVzcG9uc2VzLmNsZWFyKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9y
TmV0d29ya0FnZW50OjpzZXRFeHRyYUhUVFBIZWFkZXJzKEVycm9yU3RyaW5nJiwgY29uc3QgSlNP
Tjo6T2JqZWN0JiBoZWFkZXJzKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVj
dG9yTmV0d29ya0FnZW50OjpzZXRFeHRyYUhUVFBIZWFkZXJzKFJlZjxKU09OOjpPYmplY3Q+JiYg
aGVhZGVycykKIHsKLSAgICBmb3IgKGF1dG8mIGVudHJ5IDogaGVhZGVycykgewotICAgICAgICBT
dHJpbmcgc3RyaW5nVmFsdWU7Ci0gICAgICAgIGlmIChlbnRyeS52YWx1ZS0+YXNTdHJpbmcoc3Ry
aW5nVmFsdWUpKQorICAgIGZvciAoYXV0byYgZW50cnkgOiBoZWFkZXJzLmdldCgpKSB7CisgICAg
ICAgIGF1dG8gc3RyaW5nVmFsdWUgPSBlbnRyeS52YWx1ZS0+YXNTdHJpbmcoKTsKKyAgICAgICAg
aWYgKCEhc3RyaW5nVmFsdWUpCiAgICAgICAgICAgICBtX2V4dHJhUmVxdWVzdEhlYWRlcnMuc2V0
KGVudHJ5LmtleSwgc3RyaW5nVmFsdWUpOwogICAgIH0KKworICAgIHJldHVybiB7IH07CiB9CiAK
LXZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50OjpnZXRSZXNwb25zZUJvZHkoRXJyb3JTdHJpbmcm
IGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgU3RyaW5nKiBjb250ZW50LCBi
b29sKiBiYXNlNjRFbmNvZGVkKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8c3RkOjp0dXBsZTxT
dHJpbmcsIGJvb2wgLyogYmFzZTY0RW5jb2RlZCAqLz4+IEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6
Z2V0UmVzcG9uc2VCb2R5KGNvbnN0IFByb3RvY29sOjpOZXR3b3JrOjpSZXF1ZXN0SWQmIHJlcXVl
c3RJZCkKIHsKICAgICBOZXR3b3JrUmVzb3VyY2VzRGF0YTo6UmVzb3VyY2VEYXRhIGNvbnN0KiBy
ZXNvdXJjZURhdGEgPSBtX3Jlc291cmNlc0RhdGEtPmRhdGEocmVxdWVzdElkKTsKLSAgICBpZiAo
IXJlc291cmNlRGF0YSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIHJlc291cmNl
IGZvciBnaXZlbiByZXF1ZXN0SWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYg
KCFyZXNvdXJjZURhdGEpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTWlzc2luZyBy
ZXNvdXJjZSBmb3IgZ2l2ZW4gcmVxdWVzdElkIl9zKTsKIAotICAgIGlmIChyZXNvdXJjZURhdGEt
Pmhhc0NvbnRlbnQoKSkgewotICAgICAgICAqYmFzZTY0RW5jb2RlZCA9IHJlc291cmNlRGF0YS0+
YmFzZTY0RW5jb2RlZCgpOwotICAgICAgICAqY29udGVudCA9IHJlc291cmNlRGF0YS0+Y29udGVu
dCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmIChyZXNvdXJjZURhdGEtPmhhc0Nv
bnRlbnQoKSkKKyAgICAgICAgcmV0dXJuIHsgeyByZXNvdXJjZURhdGEtPmNvbnRlbnQoKSwgcmVz
b3VyY2VEYXRhLT5iYXNlNjRFbmNvZGVkKCkgfSB9OwogCi0gICAgaWYgKHJlc291cmNlRGF0YS0+
aXNDb250ZW50RXZpY3RlZCgpKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIlJlc291cmNlIGNv
bnRlbnQgd2FzIGV2aWN0ZWQgZnJvbSBpbnNwZWN0b3IgY2FjaGUiX3M7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9CisgICAgaWYgKHJlc291cmNlRGF0YS0+aXNDb250ZW50RXZpY3RlZCgpKQorICAg
ICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIlJlc291cmNlIGNvbnRlbnQgd2FzIGV2aWN0ZWQg
ZnJvbSBpbnNwZWN0b3IgY2FjaGUiX3MpOwogCiAgICAgaWYgKHJlc291cmNlRGF0YS0+YnVmZmVy
KCkgJiYgIXJlc291cmNlRGF0YS0+dGV4dEVuY29kaW5nTmFtZSgpLmlzTnVsbCgpKSB7Ci0gICAg
ICAgICpiYXNlNjRFbmNvZGVkID0gZmFsc2U7Ci0gICAgICAgIGlmIChJbnNwZWN0b3JQYWdlQWdl
bnQ6OnNoYXJlZEJ1ZmZlckNvbnRlbnQocmVzb3VyY2VEYXRhLT5idWZmZXIoKSwgcmVzb3VyY2VE
YXRhLT50ZXh0RW5jb2RpbmdOYW1lKCksICpiYXNlNjRFbmNvZGVkLCBjb250ZW50KSkKLSAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgU3RyaW5nIGJvZHk7CisgICAgICAgIGlmIChJbnNwZWN0
b3JQYWdlQWdlbnQ6OnNoYXJlZEJ1ZmZlckNvbnRlbnQocmVzb3VyY2VEYXRhLT5idWZmZXIoKSwg
cmVzb3VyY2VEYXRhLT50ZXh0RW5jb2RpbmdOYW1lKCksIGZhbHNlLCAmYm9keSkpCisgICAgICAg
ICAgICByZXR1cm4geyB7IGJvZHksIGZhbHNlIH0gfTsKICAgICB9CiAKICAgICBpZiAocmVzb3Vy
Y2VEYXRhLT5jYWNoZWRSZXNvdXJjZSgpKSB7Ci0gICAgICAgIGlmIChJbnNwZWN0b3JOZXR3b3Jr
QWdlbnQ6OmNhY2hlZFJlc291cmNlQ29udGVudCgqcmVzb3VyY2VEYXRhLT5jYWNoZWRSZXNvdXJj
ZSgpLCBjb250ZW50LCBiYXNlNjRFbmNvZGVkKSkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgU3RyaW5nIGJvZHk7CisgICAgICAgIGJvb2wgYmFzZTY0RW5jb2RlZDsKKyAgICAgICAgaWYg
KEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6Y2FjaGVkUmVzb3VyY2VDb250ZW50KCpyZXNvdXJjZURh
dGEtPmNhY2hlZFJlc291cmNlKCksICZib2R5LCAmYmFzZTY0RW5jb2RlZCkpCisgICAgICAgICAg
ICByZXR1cm4geyB7IGJvZHksIGJhc2U2NEVuY29kZWQgfSB9OwogICAgIH0KIAotICAgIGVycm9y
U3RyaW5nID0gIk1pc3NpbmcgY29udGVudCBvZiByZXNvdXJjZSBmb3IgZ2l2ZW4gcmVxdWVzdElk
Il9zOworICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTWlzc2luZyBjb250ZW50IG9mIHJlc291
cmNlIGZvciBnaXZlbiByZXF1ZXN0SWQiX3MpOwogfQogCi12b2lkIEluc3BlY3Rvck5ldHdvcmtB
Z2VudDo6c2V0UmVzb3VyY2VDYWNoaW5nRGlzYWJsZWQoRXJyb3JTdHJpbmcmLCBib29sIGRpc2Fi
bGVkKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yTmV0d29ya0FnZW50
OjpzZXRSZXNvdXJjZUNhY2hpbmdEaXNhYmxlZChib29sIGRpc2FibGVkKQogewotICAgIHNldFJl
c291cmNlQ2FjaGluZ0Rpc2FibGVkKGRpc2FibGVkKTsKKyAgICBzZXRSZXNvdXJjZUNhY2hpbmdE
aXNhYmxlZEludGVyYWwoZGlzYWJsZWQpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJ
bnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmxvYWRSZXNvdXJjZShjb25zdCBTdHJpbmcmIGZyYW1lSWQs
IGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nLCBSZWY8TG9hZFJlc291cmNlQ2FsbGJhY2s+JiYgY2Fs
bGJhY2spCit2b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6bG9hZFJlc291cmNlKGNvbnN0IFBy
b3RvY29sOjpOZXR3b3JrOjpGcmFtZUlkJiBmcmFtZUlkLCBjb25zdCBTdHJpbmcmIHVybFN0cmlu
ZywgUmVmPExvYWRSZXNvdXJjZUNhbGxiYWNrPiYmIGNhbGxiYWNrKQogewotICAgIEVycm9yU3Ry
aW5nIGVycm9yU3RyaW5nOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsK
ICAgICBhdXRvKiBjb250ZXh0ID0gc2NyaXB0RXhlY3V0aW9uQ29udGV4dChlcnJvclN0cmluZywg
ZnJhbWVJZCk7CiAgICAgaWYgKCFjb250ZXh0KSB7CiAgICAgICAgIGNhbGxiYWNrLT5zZW5kRmFp
bHVyZShlcnJvclN0cmluZyk7CkBAIC05OTQsMjYgKzk5NCwyMiBAQCB2b2lkIEluc3BlY3Rvck5l
dHdvcmtBZ2VudDo6bG9hZFJlc291cmNlKGNvbnN0IFN0cmluZyYgZnJhbWVJZCwgY29uc3QgU3Ry
aW5nJiB1cgogICAgIGluc3BlY3RvclRocmVhZGFibGVMb2FkZXJDbGllbnQtPnNldExvYWRlcihX
VEZNb3ZlKGxvYWRlcikpOwogfQogCi12b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6Z2V0U2Vy
aWFsaXplZENlcnRpZmljYXRlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5n
JiByZXF1ZXN0SWQsIFN0cmluZyogc2VyaWFsaXplZENlcnRpZmljYXRlKQorUHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8U3RyaW5nPiBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmdldFNlcmlhbGl6ZWRD
ZXJ0aWZpY2F0ZShjb25zdCBQcm90b2NvbDo6TmV0d29yazo6UmVxdWVzdElkJiByZXF1ZXN0SWQp
CiB7CiAgICAgYXV0byogcmVzb3VyY2VEYXRhID0gbV9yZXNvdXJjZXNEYXRhLT5kYXRhKHJlcXVl
c3RJZCk7Ci0gICAgaWYgKCFyZXNvdXJjZURhdGEpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAi
TWlzc2luZyByZXNvdXJjZSBmb3IgZ2l2ZW4gcmVxdWVzdElkIl9zOwotICAgICAgICByZXR1cm47
Ci0gICAgfQorICAgIGlmICghcmVzb3VyY2VEYXRhKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoIk1pc3NpbmcgcmVzb3VyY2UgZm9yIGdpdmVuIHJlcXVlc3RJZCJfcyk7CiAKICAgICBh
dXRvJiBjZXJ0aWZpY2F0ZSA9IHJlc291cmNlRGF0YS0+Y2VydGlmaWNhdGVJbmZvKCk7Ci0gICAg
aWYgKCFjZXJ0aWZpY2F0ZSB8fCBjZXJ0aWZpY2F0ZS52YWx1ZSgpLmlzRW1wdHkoKSkgewotICAg
ICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIGNlcnRpZmljYXRlIG9mIHJlc291cmNlIGZvciBn
aXZlbiByZXF1ZXN0SWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKCFjZXJ0
aWZpY2F0ZSB8fCBjZXJ0aWZpY2F0ZS52YWx1ZSgpLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJu
IG1ha2VVbmV4cGVjdGVkKCJNaXNzaW5nIGNlcnRpZmljYXRlIG9mIHJlc291cmNlIGZvciBnaXZl
biByZXF1ZXN0SWQiX3MpOwogCiAgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2RlciBlbmNvZGVy
OwogICAgIFdURjo6UGVyc2lzdGVuY2U6OkNvZGVyPFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbz46
OmVuY29kZShlbmNvZGVyLCBjZXJ0aWZpY2F0ZS52YWx1ZSgpKTsKLSAgICAqc2VyaWFsaXplZENl
cnRpZmljYXRlID0gYmFzZTY0RW5jb2RlKGVuY29kZXIuYnVmZmVyKCksIGVuY29kZXIuYnVmZmVy
U2l6ZSgpKTsKKyAgICByZXR1cm4gYmFzZTY0RW5jb2RlKGVuY29kZXIuYnVmZmVyKCksIGVuY29k
ZXIuYnVmZmVyU2l6ZSgpKTsKIH0KIAotV2ViU29ja2V0KiBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6
OndlYlNvY2tldEZvclJlcXVlc3RJZChjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCkKK1dlYlNvY2tl
dCogSW5zcGVjdG9yTmV0d29ya0FnZW50Ojp3ZWJTb2NrZXRGb3JSZXF1ZXN0SWQoY29uc3QgUHJv
dG9jb2w6Ok5ldHdvcms6OlJlcXVlc3RJZCYgcmVxdWVzdElkKQogewogICAgIExvY2tIb2xkZXIg
bG9jayhXZWJTb2NrZXQ6OmFsbEFjdGl2ZVdlYlNvY2tldHNNdXRleCgpKTsKIApAQCAtMTAzMSwz
OSArMTAyNywzNiBAQCBzdGF0aWMgSlNDOjpKU1ZhbHVlIHdlYlNvY2tldEFzU2NyaXB0VmFsdWUo
SlNDOjpKU0dsb2JhbE9iamVjdCYgc3RhdGUsIFdlYlNvY2tldAogICAgIHJldHVybiB0b0pTKCZz
dGF0ZSwgZGVwcmVjYXRlZEdsb2JhbE9iamVjdEZvclByb3RvdHlwZSgmc3RhdGUpLCB3ZWJTb2Nr
ZXQpOwogfQogCi12b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6cmVzb2x2ZVdlYlNvY2tldChF
cnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBjb25zdCBT
dHJpbmcqIG9iamVjdEdyb3VwLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6
UmVtb3RlT2JqZWN0PiYgcmVzdWx0KQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPFByb3Rv
Y29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+PiBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OnJlc29s
dmVXZWJTb2NrZXQoY29uc3QgUHJvdG9jb2w6Ok5ldHdvcms6OlJlcXVlc3RJZCYgcmVxdWVzdElk
LCBjb25zdCBTdHJpbmcmIG9iamVjdEdyb3VwKQogewogICAgIFdlYlNvY2tldCogd2ViU29ja2V0
ID0gd2ViU29ja2V0Rm9yUmVxdWVzdElkKHJlcXVlc3RJZCk7Ci0gICAgaWYgKCF3ZWJTb2NrZXQp
IHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWlzc2luZyB3ZWIgc29ja2V0IGZvciBnaXZlbiBy
ZXF1ZXN0SWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKCF3ZWJTb2NrZXQp
CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTWlzc2luZyB3ZWIgc29ja2V0IGZvciBn
aXZlbiByZXF1ZXN0SWQiX3MpOwogCiAgICAgLy8gRklYTUU6IDxodHRwczovL3dlYmtpdC5vcmcv
Yi8xNjg0NzU+IFdlYiBJbnNwZWN0b3I6IENvcnJlY3RseSBkaXNwbGF5IGlmcmFtZSdzIGFuZCB3
b3JrZXIncyBXZWJTb2NrZXRzCiAgICAgaWYgKCFpczxEb2N1bWVudD4od2ViU29ja2V0LT5zY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCkpKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBt
YWtlVW5leHBlY3RlZCgiTm90IHN1cHBvcnRlZCIpOwogCiAgICAgYXV0byogZG9jdW1lbnQgPSBk
b3duY2FzdDxEb2N1bWVudD4od2ViU29ja2V0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOwog
ICAgIGF1dG8qIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSkgewot
ICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIGZyYW1lIG9mIHdlYiBzb2NrZXQgZm9yIGdp
dmVuIHJlcXVlc3RJZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoIWZyYW1l
KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk1pc3NpbmcgZnJhbWUgb2Ygd2ViIHNv
Y2tldCBmb3IgZ2l2ZW4gcmVxdWVzdElkIl9zKTsKIAogICAgIGF1dG8mIHN0YXRlID0gKm1haW5X
b3JsZEV4ZWNTdGF0ZShmcmFtZSk7CiAgICAgYXV0byBpbmplY3RlZFNjcmlwdCA9IG1faW5qZWN0
ZWRTY3JpcHRNYW5hZ2VyLmluamVjdGVkU2NyaXB0Rm9yKCZzdGF0ZSk7CiAgICAgQVNTRVJUKCFp
bmplY3RlZFNjcmlwdC5oYXNOb1ZhbHVlKCkpOwogCi0gICAgU3RyaW5nIG9iamVjdEdyb3VwTmFt
ZSA9IG9iamVjdEdyb3VwID8gKm9iamVjdEdyb3VwIDogU3RyaW5nKCk7Ci0gICAgcmVzdWx0ID0g
aW5qZWN0ZWRTY3JpcHQud3JhcE9iamVjdCh3ZWJTb2NrZXRBc1NjcmlwdFZhbHVlKHN0YXRlLCB3
ZWJTb2NrZXQpLCBvYmplY3RHcm91cE5hbWUpOworICAgIGF1dG8gb2JqZWN0ID0gaW5qZWN0ZWRT
Y3JpcHQud3JhcE9iamVjdCh3ZWJTb2NrZXRBc1NjcmlwdFZhbHVlKHN0YXRlLCB3ZWJTb2NrZXQp
LCBvYmplY3RHcm91cCk7CisgICAgaWYgKCFvYmplY3QpCisgICAgICAgIHJldHVybiBtYWtlVW5l
eHBlY3RlZCgiSW50ZXJuYWwgZXJyb3I6IHVuYWJsZSB0byBjYXN0IFdlYlNvY2tldCIpOworCisg
ICAgcmV0dXJuIG9iamVjdC5yZWxlYXNlTm9uTnVsbCgpOwogfQogCi12b2lkIEluc3BlY3Rvck5l
dHdvcmtBZ2VudDo6c2V0SW50ZXJjZXB0aW9uRW5hYmxlZChFcnJvclN0cmluZyYgZXJyb3JTdHJp
bmcsIGJvb2wgZW5hYmxlZCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3Rv
ck5ldHdvcmtBZ2VudDo6c2V0SW50ZXJjZXB0aW9uRW5hYmxlZChib29sIGVuYWJsZWQpCiB7Ci0g
ICAgaWYgKG1faW50ZXJjZXB0aW9uRW5hYmxlZCA9PSBlbmFibGVkKSB7Ci0gICAgICAgIGVycm9y
U3RyaW5nID0gbV9pbnRlcmNlcHRpb25FbmFibGVkID8gIkludGVyY2VwdGlvbiBhbHJlYWR5IGVu
YWJsZWQiX3MgOiAiSW50ZXJjZXB0aW9uIGFscmVhZHkgZGlzYWJsZWQiX3M7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9CisgICAgaWYgKG1faW50ZXJjZXB0aW9uRW5hYmxlZCA9PSBlbmFibGVkKQor
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQobV9pbnRlcmNlcHRpb25FbmFibGVkID8gIklu
dGVyY2VwdGlvbiBhbHJlYWR5IGVuYWJsZWQiX3MgOiAiSW50ZXJjZXB0aW9uIGFscmVhZHkgZGlz
YWJsZWQiX3MpOwogCiAgICAgbV9pbnRlcmNlcHRpb25FbmFibGVkID0gZW5hYmxlZDsKIApAQCAt
MTA3MSw0NiArMTA2NCw0MCBAQCB2b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6c2V0SW50ZXJj
ZXB0aW9uRW5hYmxlZChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGJvbwogICAgICAgICBjb250
aW51ZVBlbmRpbmdSZXF1ZXN0cygpOwogICAgICAgICBjb250aW51ZVBlbmRpbmdSZXNwb25zZXMo
KTsKICAgICB9CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3Rvck5ldHdvcmtB
Z2VudDo6YWRkSW50ZXJjZXB0aW9uKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3Ry
aW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgbmV0d29ya1N0YWdlU3RyaW5nLCBjb25zdCBib29sKiBv
cHRpb25hbENhc2VTZW5zaXRpdmUsIGNvbnN0IGJvb2wqIG9wdGlvbmFsSXNSZWdleCkKK1Byb3Rv
Y29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6YWRkSW50ZXJj
ZXB0aW9uKGNvbnN0IFN0cmluZyYgdXJsLCBQcm90b2NvbDo6TmV0d29yazo6TmV0d29ya1N0YWdl
IG5ldHdvcmtTdGFnZSwgT3B0aW9uYWw8Ym9vbD4mJiBjYXNlU2Vuc2l0aXZlLCBPcHRpb25hbDxi
b29sPiYmIGlzUmVnZXgpCiB7Ci0gICAgYXV0byBuZXR3b3JrU3RhZ2UgPSBJbnNwZWN0b3I6OlBy
b3RvY29sOjpJbnNwZWN0b3JIZWxwZXJzOjpwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVj
dG9yOjpQcm90b2NvbDo6TmV0d29yazo6TmV0d29ya1N0YWdlPihuZXR3b3JrU3RhZ2VTdHJpbmcp
OwotICAgIGlmICghbmV0d29ya1N0YWdlKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gbWFrZVN0
cmluZygiVW5rbm93biBuZXR3b3JrU3RhZ2U6ICJfcywgbmV0d29ya1N0YWdlU3RyaW5nKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIEludGVyY2VwdCBpbnRlcmNlcHQ7CiAgICAgaW50
ZXJjZXB0LnVybCA9IHVybDsKLSAgICBpZiAob3B0aW9uYWxDYXNlU2Vuc2l0aXZlKQotICAgICAg
ICBpbnRlcmNlcHQuY2FzZVNlbnNpdGl2ZSA9ICpvcHRpb25hbENhc2VTZW5zaXRpdmU7Ci0gICAg
aWYgKG9wdGlvbmFsSXNSZWdleCkKLSAgICAgICAgaW50ZXJjZXB0LmlzUmVnZXggPSAqb3B0aW9u
YWxJc1JlZ2V4OwotICAgIGludGVyY2VwdC5uZXR3b3JrU3RhZ2UgPSBuZXR3b3JrU3RhZ2UudmFs
dWUoKTsKKyAgICBpZiAoY2FzZVNlbnNpdGl2ZSkKKyAgICAgICAgaW50ZXJjZXB0LmNhc2VTZW5z
aXRpdmUgPSAqY2FzZVNlbnNpdGl2ZTsKKyAgICBpZiAoaXNSZWdleCkKKyAgICAgICAgaW50ZXJj
ZXB0LmlzUmVnZXggPSAqaXNSZWdleDsKKyAgICBpbnRlcmNlcHQubmV0d29ya1N0YWdlID0gbmV0
d29ya1N0YWdlOwogCiAgICAgaWYgKCFtX2ludGVyY2VwdHMuYXBwZW5kSWZOb3RDb250YWlucyhp
bnRlcmNlcHQpKQotICAgICAgICBlcnJvclN0cmluZyA9ICJJbnRlcmNlcHQgZm9yIGdpdmVuIHVy
bCwgZ2l2ZW4gaXNSZWdleCwgYW5kIGdpdmVuIHN0YWdlIGFscmVhZHkgZXhpc3RzIl9zOworICAg
ICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkludGVyY2VwdCBmb3IgZ2l2ZW4gdXJsLCBnaXZl
biBpc1JlZ2V4LCBhbmQgZ2l2ZW4gc3RhZ2UgYWxyZWFkeSBleGlzdHMiX3MpOworCisgICAgcmV0
dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OnJlbW92ZUludGVyY2Vw
dGlvbihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBT
dHJpbmcmIG5ldHdvcmtTdGFnZVN0cmluZywgY29uc3QgYm9vbCogb3B0aW9uYWxDYXNlU2Vuc2l0
aXZlLCBjb25zdCBib29sKiBvcHRpb25hbElzUmVnZXgpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdP
cjx2b2lkPiBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OnJlbW92ZUludGVyY2VwdGlvbihjb25zdCBT
dHJpbmcmIHVybCwgUHJvdG9jb2w6Ok5ldHdvcms6Ok5ldHdvcmtTdGFnZSBuZXR3b3JrU3RhZ2Us
IE9wdGlvbmFsPGJvb2w+JiYgY2FzZVNlbnNpdGl2ZSwgT3B0aW9uYWw8Ym9vbD4mJiBpc1JlZ2V4
KQogewotICAgIGF1dG8gbmV0d29ya1N0YWdlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6SW5zcGVj
dG9ySGVscGVyczo6cGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6
Ok5ldHdvcms6Ok5ldHdvcmtTdGFnZT4obmV0d29ya1N0YWdlU3RyaW5nKTsKLSAgICBpZiAoIW5l
dHdvcmtTdGFnZSkgewotICAgICAgICBlcnJvclN0cmluZyA9IG1ha2VTdHJpbmcoIlVua25vd24g
bmV0d29ya1N0YWdlOiAiX3MsIG5ldHdvcmtTdGFnZVN0cmluZyk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KICAgICBJbnRlcmNlcHQgaW50ZXJjZXB0OwogICAgIGludGVyY2VwdC51cmwgPSB1
cmw7Ci0gICAgaWYgKG9wdGlvbmFsQ2FzZVNlbnNpdGl2ZSkKLSAgICAgICAgaW50ZXJjZXB0LmNh
c2VTZW5zaXRpdmUgPSAqb3B0aW9uYWxDYXNlU2Vuc2l0aXZlOwotICAgIGlmIChvcHRpb25hbElz
UmVnZXgpCi0gICAgICAgIGludGVyY2VwdC5pc1JlZ2V4ID0gKm9wdGlvbmFsSXNSZWdleDsKLSAg
ICBpbnRlcmNlcHQubmV0d29ya1N0YWdlID0gbmV0d29ya1N0YWdlLnZhbHVlKCk7CisgICAgaWYg
KGNhc2VTZW5zaXRpdmUpCisgICAgICAgIGludGVyY2VwdC5jYXNlU2Vuc2l0aXZlID0gKmNhc2VT
ZW5zaXRpdmU7CisgICAgaWYgKGlzUmVnZXgpCisgICAgICAgIGludGVyY2VwdC5pc1JlZ2V4ID0g
KmlzUmVnZXg7CisgICAgaW50ZXJjZXB0Lm5ldHdvcmtTdGFnZSA9IG5ldHdvcmtTdGFnZTsKIAog
ICAgIGlmICghbV9pbnRlcmNlcHRzLnJlbW92ZUFsbChpbnRlcmNlcHQpKQotICAgICAgICBlcnJv
clN0cmluZyA9ICJNaXNzaW5nIGludGVyY2VwdCBmb3IgZ2l2ZW4gdXJsLCBnaXZlbiBpc1JlZ2V4
LCBhbmQgZ2l2ZW4gc3RhZ2UiX3M7CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTWlz
c2luZyBpbnRlcmNlcHQgZm9yIGdpdmVuIHVybCwgZ2l2ZW4gaXNSZWdleCwgYW5kIGdpdmVuIHN0
YWdlIl9zKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKIGJvb2wgSW5zcGVjdG9yTmV0d29ya0Fn
ZW50Ojp3aWxsSW50ZXJjZXB0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKQEAgLTEx
MTgsOCArMTEwNSw4IEBAIGJvb2wgSW5zcGVjdG9yTmV0d29ya0FnZW50Ojp3aWxsSW50ZXJjZXB0
KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKICAgICBpZiAoIW1faW50ZXJjZXB0aW9u
RW5hYmxlZCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmV0dXJuIHNob3VsZEludGVy
Y2VwdChyZXF1ZXN0LnVybCgpLCBOZXR3b3JrU3RhZ2U6OlJlcXVlc3QpCi0gICAgICAgIHx8IHNo
b3VsZEludGVyY2VwdChyZXF1ZXN0LnVybCgpLCBOZXR3b3JrU3RhZ2U6OlJlc3BvbnNlKTsKKyAg
ICByZXR1cm4gc2hvdWxkSW50ZXJjZXB0KHJlcXVlc3QudXJsKCksIFByb3RvY29sOjpOZXR3b3Jr
OjpOZXR3b3JrU3RhZ2U6OlJlcXVlc3QpCisgICAgICAgIHx8IHNob3VsZEludGVyY2VwdChyZXF1
ZXN0LnVybCgpLCBQcm90b2NvbDo6TmV0d29yazo6TmV0d29ya1N0YWdlOjpSZXNwb25zZSk7CiB9
CiAKIGJvb2wgSW5zcGVjdG9yTmV0d29ya0FnZW50OjpzaG91bGRJbnRlcmNlcHRSZXF1ZXN0KGNv
bnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKQEAgLTExMjcsNyArMTExNCw3IEBAIGJvb2wg
SW5zcGVjdG9yTmV0d29ya0FnZW50OjpzaG91bGRJbnRlcmNlcHRSZXF1ZXN0KGNvbnN0IFJlc291
cmNlUmVxdWVzdCYgcmVxdWVzCiAgICAgaWYgKCFtX2ludGVyY2VwdGlvbkVuYWJsZWQpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiBzaG91bGRJbnRlcmNlcHQocmVxdWVzdC51
cmwoKSwgTmV0d29ya1N0YWdlOjpSZXF1ZXN0KTsKKyAgICByZXR1cm4gc2hvdWxkSW50ZXJjZXB0
KHJlcXVlc3QudXJsKCksIFByb3RvY29sOjpOZXR3b3JrOjpOZXR3b3JrU3RhZ2U6OlJlcXVlc3Qp
OwogfQogCiBib29sIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6c2hvdWxkSW50ZXJjZXB0UmVzcG9u
c2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCkBAIC0xMTM1LDcgKzExMjIsNyBA
QCBib29sIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6c2hvdWxkSW50ZXJjZXB0UmVzcG9uc2UoY29u
c3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcAogICAgIGlmICghbV9pbnRlcmNlcHRpb25FbmFibGVk
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gc2hvdWxkSW50ZXJjZXB0KHJl
c3BvbnNlLnVybCgpLCBOZXR3b3JrU3RhZ2U6OlJlc3BvbnNlKTsKKyAgICByZXR1cm4gc2hvdWxk
SW50ZXJjZXB0KHJlc3BvbnNlLnVybCgpLCBQcm90b2NvbDo6TmV0d29yazo6TmV0d29ya1N0YWdl
OjpSZXNwb25zZSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50OjppbnRlcmNlcHRS
ZXF1ZXN0KFJlc291cmNlTG9hZGVyJiBsb2FkZXIsIEZ1bmN0aW9uPHZvaWQoY29uc3QgUmVzb3Vy
Y2VSZXF1ZXN0Jik+JiYgaGFuZGxlcikKQEAgLTExNjYsOTIgKzExNTMsODkgQEAgdm9pZCBJbnNw
ZWN0b3JOZXR3b3JrQWdlbnQ6OmludGVyY2VwdFJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9u
c2UmIHJlc3BvbnNlLAogCiAgICAgbV9wZW5kaW5nSW50ZXJjZXB0UmVzcG9uc2VzLnNldChyZXF1
ZXN0SWQsIG1ha2VVbmlxdWU8UGVuZGluZ0ludGVyY2VwdFJlc3BvbnNlPihyZXNwb25zZSwgV1RG
TW92ZShoYW5kbGVyKSkpOwogCi0gICAgbV9mcm9udGVuZERpc3BhdGNoZXItPnJlc3BvbnNlSW50
ZXJjZXB0ZWQocmVxdWVzdElkLCBidWlsZE9iamVjdEZvclJlc291cmNlUmVzcG9uc2UocmVzcG9u
c2UsIG51bGxwdHIpKTsKKyAgICBhdXRvIHJlc291cmNlUmVzcG9uc2UgPSBidWlsZE9iamVjdEZv
clJlc291cmNlUmVzcG9uc2UocmVzcG9uc2UsIG51bGxwdHIpOworICAgIGlmICghcmVzb3VyY2VS
ZXNwb25zZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPnJl
c3BvbnNlSW50ZXJjZXB0ZWQocmVxdWVzdElkLCByZXNvdXJjZVJlc3BvbnNlLnJlbGVhc2VOb25O
dWxsKCkpOwogfQogCi12b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6aW50ZXJjZXB0Q29udGlu
dWUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgY29u
c3QgU3RyaW5nJiBuZXR3b3JrU3RhZ2VTdHJpbmcpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2
b2lkPiBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmludGVyY2VwdENvbnRpbnVlKGNvbnN0IFByb3Rv
Y29sOjpOZXR3b3JrOjpSZXF1ZXN0SWQmIHJlcXVlc3RJZCwgUHJvdG9jb2w6Ok5ldHdvcms6Ok5l
dHdvcmtTdGFnZSBuZXR3b3JrU3RhZ2UpCiB7Ci0gICAgYXV0byBuZXR3b3JrU3RhZ2UgPSBJbnNw
ZWN0b3I6OlByb3RvY29sOjpJbnNwZWN0b3JIZWxwZXJzOjpwYXJzZUVudW1WYWx1ZUZyb21TdHJp
bmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6TmV0d29ya1N0YWdlPihuZXR3b3JrU3Rh
Z2VTdHJpbmcpOwotICAgIGlmICghbmV0d29ya1N0YWdlKSB7Ci0gICAgICAgIGVycm9yU3RyaW5n
ID0gbWFrZVN0cmluZygiVW5rbm93biBuZXR3b3JrU3RhZ2U6ICJfcywgbmV0d29ya1N0YWdlU3Ry
aW5nKTsKLSAgICAgICAgcmV0dXJuOworICAgIHN3aXRjaCAobmV0d29ya1N0YWdlKSB7CisgICAg
Y2FzZSBQcm90b2NvbDo6TmV0d29yazo6TmV0d29ya1N0YWdlOjpSZXF1ZXN0OgorICAgICAgICBp
ZiAoYXV0byBwZW5kaW5nSW50ZXJjZXB0UmVxdWVzdCA9IG1fcGVuZGluZ0ludGVyY2VwdFJlcXVl
c3RzLnRha2UocmVxdWVzdElkKSkgeworICAgICAgICAgICAgcGVuZGluZ0ludGVyY2VwdFJlcXVl
c3QtPmNvbnRpbnVlV2l0aE9yaWdpbmFsUmVxdWVzdCgpOworICAgICAgICAgICAgcmV0dXJuIHsg
fTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk1pc3NpbmcgcGVu
ZGluZyBpbnRlcmNlcHQgcmVxdWVzdCBmb3IgZ2l2ZW4gcmVxdWVzdElkIl9zKTsKKworICAgIGNh
c2UgUHJvdG9jb2w6Ok5ldHdvcms6Ok5ldHdvcmtTdGFnZTo6UmVzcG9uc2U6CisgICAgICAgIGlm
IChhdXRvIHBlbmRpbmdJbnRlcmNlcHRSZXNwb25zZSA9IG1fcGVuZGluZ0ludGVyY2VwdFJlc3Bv
bnNlcy50YWtlKHJlcXVlc3RJZCkpIHsKKyAgICAgICAgICAgIHBlbmRpbmdJbnRlcmNlcHRSZXNw
b25zZS0+cmVzcG9uZFdpdGhPcmlnaW5hbFJlc3BvbnNlKCk7CisgICAgICAgICAgICByZXR1cm4g
eyB9OworICAgICAgICB9CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTWlzc2luZyBw
ZW5kaW5nIGludGVyY2VwdCByZXNwb25zZSBmb3IgZ2l2ZW4gcmVxdWVzdElkIl9zKTsKICAgICB9
CiAKLSAgICBzd2l0Y2ggKG5ldHdvcmtTdGFnZS52YWx1ZSgpKSB7Ci0gICAgY2FzZSBOZXR3b3Jr
U3RhZ2U6OlJlcXVlc3Q6Ci0gICAgICAgIGlmIChhdXRvIHBlbmRpbmdJbnRlcmNlcHRSZXF1ZXN0
ID0gbV9wZW5kaW5nSW50ZXJjZXB0UmVxdWVzdHMudGFrZShyZXF1ZXN0SWQpKQotICAgICAgICAg
ICAgcGVuZGluZ0ludGVyY2VwdFJlcXVlc3QtPmNvbnRpbnVlV2l0aE9yaWdpbmFsUmVxdWVzdCgp
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIHBlbmRp
bmcgaW50ZXJjZXB0IHJlcXVlc3QgZm9yIGdpdmVuIHJlcXVlc3RJZCJfczsKLSAgICAgICAgcmV0
dXJuOwotICAgIGNhc2UgTmV0d29ya1N0YWdlOjpSZXNwb25zZToKLSAgICAgICAgaWYgKGF1dG8g
cGVuZGluZ0ludGVyY2VwdFJlc3BvbnNlID0gbV9wZW5kaW5nSW50ZXJjZXB0UmVzcG9uc2VzLnRh
a2UocmVxdWVzdElkKSkKLSAgICAgICAgICAgIHBlbmRpbmdJbnRlcmNlcHRSZXNwb25zZS0+cmVz
cG9uZFdpdGhPcmlnaW5hbFJlc3BvbnNlKCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGVy
cm9yU3RyaW5nID0gIk1pc3NpbmcgcGVuZGluZyBpbnRlcmNlcHQgcmVzcG9uc2UgZm9yIGdpdmVu
IHJlcXVlc3RJZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2Vu
dDo6aW50ZXJjZXB0V2l0aFJlcXVlc3QoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBT
dHJpbmcmIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nKiB1cmwsIGNvbnN0IFN0cmluZyogbWV0aG9k
LCBjb25zdCBKU09OOjpPYmplY3QqIGhlYWRlcnMsIGNvbnN0IFN0cmluZyogcG9zdERhdGEpCitQ
cm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmludGVy
Y2VwdFdpdGhSZXF1ZXN0KGNvbnN0IFByb3RvY29sOjpOZXR3b3JrOjpSZXF1ZXN0SWQmIHJlcXVl
c3RJZCwgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWZQdHI8SlNP
Tjo6T2JqZWN0PiYmIGhlYWRlcnMsIGNvbnN0IFN0cmluZyYgcG9zdERhdGEpCiB7CiAgICAgYXV0
byBwZW5kaW5nUmVxdWVzdCA9IG1fcGVuZGluZ0ludGVyY2VwdFJlcXVlc3RzLnRha2UocmVxdWVz
dElkKTsKLSAgICBpZiAoIXBlbmRpbmdSZXF1ZXN0KSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0g
Ik1pc3NpbmcgcGVuZGluZyBpbnRlcmNlcHQgcmVxdWVzdCBmb3IgZ2l2ZW4gcmVxdWVzdElkIl9z
OwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghcGVuZGluZ1JlcXVlc3QpCisgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTWlzc2luZyBwZW5kaW5nIGludGVyY2VwdCByZXF1
ZXN0IGZvciBnaXZlbiByZXF1ZXN0SWQiX3MpOwogCiAgICAgYXV0byYgbG9hZGVyID0gKnBlbmRp
bmdSZXF1ZXN0LT5tX2xvYWRlcjsKICAgICBSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdCA9IGxvYWRl
ci5yZXF1ZXN0KCk7Ci0gICAgaWYgKHVybCkKLSAgICAgICAgcmVxdWVzdC5zZXRVUkwoVVJMKHsg
fSwgKnVybCkpOwotICAgIGlmIChtZXRob2QpCi0gICAgICAgIHJlcXVlc3Quc2V0SFRUUE1ldGhv
ZCgqbWV0aG9kKTsKKyAgICBpZiAoISF1cmwpCisgICAgICAgIHJlcXVlc3Quc2V0VVJMKFVSTCh7
IH0sIHVybCkpOworICAgIGlmICghIW1ldGhvZCkKKyAgICAgICAgcmVxdWVzdC5zZXRIVFRQTWV0
aG9kKG1ldGhvZCk7CiAgICAgaWYgKGhlYWRlcnMpIHsKICAgICAgICAgSFRUUEhlYWRlck1hcCBl
eHBsaWNpdEhlYWRlcnM7CiAgICAgICAgIGZvciAoYXV0byYgaGVhZGVyIDogKmhlYWRlcnMpIHsK
LSAgICAgICAgICAgIFN0cmluZyBoZWFkZXJWYWx1ZTsKLSAgICAgICAgICAgIGlmIChoZWFkZXIu
dmFsdWUtPmFzU3RyaW5nKGhlYWRlclZhbHVlKSkKKyAgICAgICAgICAgIGF1dG8gaGVhZGVyVmFs
dWUgPSBoZWFkZXIudmFsdWUtPmFzU3RyaW5nKCk7CisgICAgICAgICAgICBpZiAoISFoZWFkZXJW
YWx1ZSkKICAgICAgICAgICAgICAgICBleHBsaWNpdEhlYWRlcnMuYWRkKGhlYWRlci5rZXksIGhl
YWRlclZhbHVlKTsKICAgICAgICAgfQogICAgICAgICByZXF1ZXN0LnNldEhUVFBIZWFkZXJGaWVs
ZHMoV1RGTW92ZShleHBsaWNpdEhlYWRlcnMpKTsKICAgICB9Ci0gICAgaWYgKHBvc3REYXRhKSB7
CisgICAgaWYgKCEhcG9zdERhdGEpIHsKICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGJ1ZmZlcjsK
LSAgICAgICAgaWYgKCFiYXNlNjREZWNvZGUoKnBvc3REYXRhLCBidWZmZXIpKSB7Ci0gICAgICAg
ICAgICBlcnJvclN0cmluZyA9ICJVbmFibGUgdG8gZGVjb2RlIGdpdmVuIHBvc3REYXRhIl9zOwot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9CisgICAgICAgIGlmICghYmFzZTY0RGVjb2Rl
KHBvc3REYXRhLCBidWZmZXIpKQorICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJV
bmFibGUgdG8gZGVjb2RlIGdpdmVuIHBvc3REYXRhIl9zKTsKIAogICAgICAgICByZXF1ZXN0LnNl
dEhUVFBCb2R5KEZvcm1EYXRhOjpjcmVhdGUoYnVmZmVyKSk7CiAgICAgfQogICAgIC8vIEZJWE1F
OiBmaWd1cmUgb3V0IGhvdyB0byBpZGVudGlmeSB3aGVuIGEgcmVxdWVzdCBoYXMgYmVlbiBvdmVy
cmlkZGVuIHdoZW4gd2UgYWRkIHRoaXMgdG8gdGhlIGZyb250ZW5kLgogICAgIHBlbmRpbmdSZXF1
ZXN0LT5jb250aW51ZVdpdGhSZXF1ZXN0KHJlcXVlc3QpOworCisgICAgcmV0dXJuIHsgfTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmludGVyY2VwdFdpdGhSZXNwb25zZShFcnJv
clN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBjb25zdCBTdHJp
bmcmIGNvbnRlbnQsIGJvb2wgYmFzZTY0RW5jb2RlZCwgY29uc3QgU3RyaW5nKiBtaW1lVHlwZSwg
Y29uc3QgaW50KiBzdGF0dXMsIGNvbnN0IFN0cmluZyogc3RhdHVzVGV4dCwgY29uc3QgSlNPTjo6
T2JqZWN0KiBoZWFkZXJzKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9y
TmV0d29ya0FnZW50OjppbnRlcmNlcHRXaXRoUmVzcG9uc2UoY29uc3QgUHJvdG9jb2w6Ok5ldHdv
cms6OlJlcXVlc3RJZCYgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQsIGJvb2wgYmFz
ZTY0RW5jb2RlZCwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8aW50PiYmIHN0YXR1
cywgY29uc3QgU3RyaW5nJiBzdGF0dXNUZXh0LCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIGhlYWRl
cnMpCiB7CiAgICAgYXV0byBwZW5kaW5nSW50ZXJjZXB0UmVzcG9uc2UgPSBtX3BlbmRpbmdJbnRl
cmNlcHRSZXNwb25zZXMudGFrZShyZXF1ZXN0SWQpOwotICAgIGlmICghcGVuZGluZ0ludGVyY2Vw
dFJlc3BvbnNlKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIk1pc3NpbmcgcGVuZGluZyBpbnRl
cmNlcHQgcmVzcG9uc2UgZm9yIGdpdmVuIHJlcXVlc3RJZCJfczsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KKyAgICBpZiAoIXBlbmRpbmdJbnRlcmNlcHRSZXNwb25zZSkKKyAgICAgICAgcmV0dXJu
IG1ha2VVbmV4cGVjdGVkKCJNaXNzaW5nIHBlbmRpbmcgaW50ZXJjZXB0IHJlc3BvbnNlIGZvciBn
aXZlbiByZXF1ZXN0SWQiX3MpOwogCiAgICAgUmVzb3VyY2VSZXNwb25zZSBvdmVycmlkZVJlc3Bv
bnNlKHBlbmRpbmdJbnRlcmNlcHRSZXNwb25zZS0+b3JpZ2luYWxSZXNwb25zZSgpKTsKICAgICBv
dmVycmlkZVJlc3BvbnNlLnNldFNvdXJjZShSZXNvdXJjZVJlc3BvbnNlOjpTb3VyY2U6Okluc3Bl
Y3Rvck92ZXJyaWRlKTsKIAogICAgIGlmIChzdGF0dXMpCiAgICAgICAgIG92ZXJyaWRlUmVzcG9u
c2Uuc2V0SFRUUFN0YXR1c0NvZGUoKnN0YXR1cyk7Ci0gICAgaWYgKHN0YXR1c1RleHQpCi0gICAg
ICAgIG92ZXJyaWRlUmVzcG9uc2Uuc2V0SFRUUFN0YXR1c1RleHQoKnN0YXR1c1RleHQpOwotICAg
IGlmIChtaW1lVHlwZSkKLSAgICAgICAgb3ZlcnJpZGVSZXNwb25zZS5zZXRNaW1lVHlwZSgqbWlt
ZVR5cGUpOworICAgIGlmICghIXN0YXR1c1RleHQpCisgICAgICAgIG92ZXJyaWRlUmVzcG9uc2Uu
c2V0SFRUUFN0YXR1c1RleHQoc3RhdHVzVGV4dCk7CisgICAgaWYgKCEhbWltZVR5cGUpCisgICAg
ICAgIG92ZXJyaWRlUmVzcG9uc2Uuc2V0TWltZVR5cGUobWltZVR5cGUpOwogICAgIGlmIChoZWFk
ZXJzKSB7CiAgICAgICAgIEhUVFBIZWFkZXJNYXAgZXhwbGljaXRIZWFkZXJzOwogICAgICAgICBm
b3IgKGF1dG8mIGhlYWRlciA6ICpoZWFkZXJzKSB7Ci0gICAgICAgICAgICBTdHJpbmcgaGVhZGVy
VmFsdWU7Ci0gICAgICAgICAgICBpZiAoaGVhZGVyLnZhbHVlLT5hc1N0cmluZyhoZWFkZXJWYWx1
ZSkpCisgICAgICAgICAgICBhdXRvIGhlYWRlclZhbHVlID0gaGVhZGVyLnZhbHVlLT5hc1N0cmlu
ZygpOworICAgICAgICAgICAgaWYgKCEhaGVhZGVyVmFsdWUpCiAgICAgICAgICAgICAgICAgZXhw
bGljaXRIZWFkZXJzLmFkZChoZWFkZXIua2V5LCBoZWFkZXJWYWx1ZSk7CiAgICAgICAgIH0KICAg
ICAgICAgb3ZlcnJpZGVSZXNwb25zZS5zZXRIVFRQSGVhZGVyRmllbGRzKFdURk1vdmUoZXhwbGlj
aXRIZWFkZXJzKSk7CkBAIC0xMjYxLDQxICsxMjQ1LDM0IEBAIHZvaWQgSW5zcGVjdG9yTmV0d29y
a0FnZW50OjppbnRlcmNlcHRXaXRoUmVzcG9uc2UoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBj
b25zCiAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gb3ZlcnJpZGVEYXRhOwogICAgIGlmIChiYXNl
NjRFbmNvZGVkKSB7CiAgICAgICAgIFZlY3Rvcjx1aW50OF90PiBidWZmZXI7Ci0gICAgICAgIGlm
ICghYmFzZTY0RGVjb2RlKGNvbnRlbnQsIGJ1ZmZlcikpIHsKLSAgICAgICAgICAgIGVycm9yU3Ry
aW5nID0gIlVuYWJsZSB0byBkZWNvZGUgZ2l2ZW4gY29udGVudCJfczsKLSAgICAgICAgICAgIHBl
bmRpbmdJbnRlcmNlcHRSZXNwb25zZS0+cmVzcG9uZFdpdGhPcmlnaW5hbFJlc3BvbnNlKCk7Ci0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKCFiYXNlNjREZWNvZGUo
Y29udGVudCwgYnVmZmVyKSkKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiVW5h
YmxlIHRvIGRlY29kZSBnaXZlbiBjb250ZW50Il9zKTsKIAogICAgICAgICBvdmVycmlkZURhdGEg
PSBTaGFyZWRCdWZmZXI6OmNyZWF0ZShXVEZNb3ZlKGJ1ZmZlcikpOwogICAgIH0gZWxzZQogICAg
ICAgICBvdmVycmlkZURhdGEgPSBTaGFyZWRCdWZmZXI6OmNyZWF0ZShjb250ZW50LnV0ZjgoKS5k
YXRhKCksIGNvbnRlbnQudXRmOCgpLmxlbmd0aCgpKTsKIAogICAgIHBlbmRpbmdJbnRlcmNlcHRS
ZXNwb25zZS0+cmVzcG9uZChvdmVycmlkZVJlc3BvbnNlLCBvdmVycmlkZURhdGEpOworCisgICAg
cmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmludGVyY2VwdFJl
cXVlc3RXaXRoUmVzcG9uc2UoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcm
IHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBjb250ZW50LCBib29sIGJhc2U2NEVuY29kZWQsIGNv
bnN0IFN0cmluZyYgbWltZVR5cGUsIGludCBzdGF0dXMsIGNvbnN0IFN0cmluZyYgc3RhdHVzVGV4
dCwgY29uc3QgSlNPTjo6T2JqZWN0JiBoZWFkZXJzKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8
dm9pZD4gSW5zcGVjdG9yTmV0d29ya0FnZW50OjppbnRlcmNlcHRSZXF1ZXN0V2l0aFJlc3BvbnNl
KGNvbnN0IFByb3RvY29sOjpOZXR3b3JrOjpSZXF1ZXN0SWQmIHJlcXVlc3RJZCwgY29uc3QgU3Ry
aW5nJiBjb250ZW50LCBib29sIGJhc2U2NEVuY29kZWQsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUs
IGludCBzdGF0dXMsIGNvbnN0IFN0cmluZyYgc3RhdHVzVGV4dCwgUmVmPEpTT046Ok9iamVjdD4m
JiBoZWFkZXJzKQogewogICAgIGF1dG8gcGVuZGluZ1JlcXVlc3QgPSBtX3BlbmRpbmdJbnRlcmNl
cHRSZXF1ZXN0cy50YWtlKHJlcXVlc3RJZCk7Ci0gICAgaWYgKCFwZW5kaW5nUmVxdWVzdCkgewot
ICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIHBlbmRpbmcgaW50ZXJjZXB0IHJlcXVlc3Qg
Zm9yIGdpdmVuIHJlcXVlc3RJZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAo
IXBlbmRpbmdSZXF1ZXN0KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk1pc3Npbmcg
cGVuZGluZyBpbnRlcmNlcHQgcmVxdWVzdCBmb3IgZ2l2ZW4gcmVxdWVzdElkIl9zKTsKIAogICAg
IC8vIExvYWRlciB3aWxsIGJlIHJldGFpbmVkIGluIHRoZSBkaWRSZWNlaXZlUmVzcG9uc2UgbGFt
YmRhIGJlbG93LgogICAgIFJlZlB0cjxSZXNvdXJjZUxvYWRlcj4gbG9hZGVyID0gcGVuZGluZ1Jl
cXVlc3QtPm1fbG9hZGVyLmdldCgpOwotICAgIGlmIChsb2FkZXItPnJlYWNoZWRUZXJtaW5hbFN0
YXRlKCkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiVW5hYmxlIHRvIGZ1bGZpbGwgcmVxdWVz
dCwgaXQgaGFzIGFscmVhZHkgYmVlbiBwcm9jZXNzZWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9CisgICAgaWYgKGxvYWRlci0+cmVhY2hlZFRlcm1pbmFsU3RhdGUoKSkKKyAgICAgICAgcmV0
dXJuIG1ha2VVbmV4cGVjdGVkKCJVbmFibGUgdG8gZnVsZmlsbCByZXF1ZXN0LCBpdCBoYXMgYWxy
ZWFkeSBiZWVuIHByb2Nlc3NlZCJfcyk7CiAKICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBkYXRh
OwogICAgIGlmIChiYXNlNjRFbmNvZGVkKSB7CiAgICAgICAgIFZlY3Rvcjx1aW50OF90PiBidWZm
ZXI7Ci0gICAgICAgIGlmICghYmFzZTY0RGVjb2RlKGNvbnRlbnQsIGJ1ZmZlcikpIHsKLSAgICAg
ICAgICAgIGVycm9yU3RyaW5nID0gIlVuYWJsZSB0byBkZWNvZGUgZ2l2ZW4gY29udGVudCJfczsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQorICAgICAgICBpZiAoIWJhc2U2NERlY29k
ZShjb250ZW50LCBidWZmZXIpKQorICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJV
bmFibGUgdG8gZGVjb2RlIGdpdmVuIGNvbnRlbnQiX3MpOwogCiAgICAgICAgIGRhdGEgPSBTaGFy
ZWRCdWZmZXI6OmNyZWF0ZShXVEZNb3ZlKGJ1ZmZlcikpOwogICAgIH0gZWxzZQpAQCAtMTMwNyw5
ICsxMjg0LDkgQEAgdm9pZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmludGVyY2VwdFJlcXVlc3RX
aXRoUmVzcG9uc2UoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW4KICAgICByZXNwb25zZS5zZXRIVFRQ
U3RhdHVzQ29kZShzdGF0dXMpOwogICAgIHJlc3BvbnNlLnNldEhUVFBTdGF0dXNUZXh0KHN0YXR1
c1RleHQpOwogICAgIEhUVFBIZWFkZXJNYXAgZXhwbGljaXRIZWFkZXJzOwotICAgIGZvciAoYXV0
byYgaGVhZGVyIDogaGVhZGVycykgewotICAgICAgICBTdHJpbmcgaGVhZGVyVmFsdWU7Ci0gICAg
ICAgIGlmIChoZWFkZXIudmFsdWUtPmFzU3RyaW5nKGhlYWRlclZhbHVlKSkKKyAgICBmb3IgKGF1
dG8mIGhlYWRlciA6IGhlYWRlcnMuZ2V0KCkpIHsKKyAgICAgICAgYXV0byBoZWFkZXJWYWx1ZSA9
IGhlYWRlci52YWx1ZS0+YXNTdHJpbmcoKTsKKyAgICAgICAgaWYgKCEhaGVhZGVyVmFsdWUpCiAg
ICAgICAgICAgICBleHBsaWNpdEhlYWRlcnMuYWRkKGhlYWRlci5rZXksIGhlYWRlclZhbHVlKTsK
ICAgICB9CiAgICAgcmVzcG9uc2Uuc2V0SFRUUEhlYWRlckZpZWxkcyhXVEZNb3ZlKGV4cGxpY2l0
SGVhZGVycykpOwpAQCAtMTMxOSw0NCArMTI5Niw0MCBAQCB2b2lkIEluc3BlY3Rvck5ldHdvcmtB
Z2VudDo6aW50ZXJjZXB0UmVxdWVzdFdpdGhSZXNwb25zZShFcnJvclN0cmluZyYgZXJyb3JTdHJp
bgogICAgICAgICAgICAgbG9hZGVyLT5kaWRSZWNlaXZlQnVmZmVyKFdURk1vdmUoYnVmZmVyKSwg
YnVmZmVyLT5zaXplKCksIERhdGFQYXlsb2FkV2hvbGVSZXNvdXJjZSk7CiAgICAgICAgIGxvYWRl
ci0+ZGlkRmluaXNoTG9hZGluZyhOZXR3b3JrTG9hZE1ldHJpY3MoKSk7CiAgICAgfSk7CisKKyAg
ICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6aW50ZXJjZXB0
UmVxdWVzdFdpdGhFcnJvcihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYg
cmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIGVycm9yVHlwZVN0cmluZykKK1Byb3RvY29sOjpFcnJv
clN0cmluZ09yPHZvaWQ+IEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6aW50ZXJjZXB0UmVxdWVzdFdp
dGhFcnJvcihjb25zdCBQcm90b2NvbDo6TmV0d29yazo6UmVxdWVzdElkJiByZXF1ZXN0SWQsIFBy
b3RvY29sOjpOZXR3b3JrOjpSZXNvdXJjZUVycm9yVHlwZSBlcnJvclR5cGUpCiB7CiAgICAgYXV0
byBwZW5kaW5nUmVxdWVzdCA9IG1fcGVuZGluZ0ludGVyY2VwdFJlcXVlc3RzLnRha2UocmVxdWVz
dElkKTsKLSAgICBpZiAoIXBlbmRpbmdSZXF1ZXN0KSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0g
Ik1pc3NpbmcgcGVuZGluZyBpbnRlcmNlcHQgcmVxdWVzdCBmb3IgZ2l2ZW4gcmVxdWVzdElkIl9z
OwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghcGVuZGluZ1JlcXVlc3QpCisgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTWlzc2luZyBwZW5kaW5nIGludGVyY2VwdCByZXF1
ZXN0IGZvciBnaXZlbiByZXF1ZXN0SWQiX3MpOwogCiAgICAgYXV0byYgbG9hZGVyID0gKnBlbmRp
bmdSZXF1ZXN0LT5tX2xvYWRlcjsKLSAgICBpZiAobG9hZGVyLnJlYWNoZWRUZXJtaW5hbFN0YXRl
KCkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiVW5hYmxlIHRvIGFib3J0IHJlcXVlc3QsIGl0
IGhhcyBhbHJlYWR5IGJlZW4gcHJvY2Vzc2VkIl9zOwotICAgICAgICByZXR1cm47CisgICAgaWYg
KGxvYWRlci5yZWFjaGVkVGVybWluYWxTdGF0ZSgpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoIlVuYWJsZSB0byBhYm9ydCByZXF1ZXN0LCBpdCBoYXMgYWxyZWFkeSBiZWVuIHByb2Nl
c3NlZCJfcyk7CisKKyAgICBzd2l0Y2ggKGVycm9yVHlwZSkgeworICAgIGNhc2UgUHJvdG9jb2w6
Ok5ldHdvcms6OlJlc291cmNlRXJyb3JUeXBlOjpHZW5lcmFsOgorICAgICAgICBsb2FkZXIuZGlk
RmFpbChSZXNvdXJjZUVycm9yKGVycm9yRG9tYWluV2ViS2l0SW50ZXJuYWwsIDAsIGxvYWRlci51
cmwoKSwgIlJlcXVlc3QgaW50ZXJjZXB0ZWQiX3MsIFJlc291cmNlRXJyb3I6OlR5cGU6OkdlbmVy
YWwpKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIGNhc2UgUHJvdG9jb2w6Ok5ldHdvcms6
OlJlc291cmNlRXJyb3JUeXBlOjpBY2Nlc3NDb250cm9sOgorICAgICAgICBsb2FkZXIuZGlkRmFp
bChSZXNvdXJjZUVycm9yKGVycm9yRG9tYWluV2ViS2l0SW50ZXJuYWwsIDAsIGxvYWRlci51cmwo
KSwgIkFjY2VzcyBkZW5pZWQiX3MsIFJlc291cmNlRXJyb3I6OlR5cGU6OkFjY2Vzc0NvbnRyb2wp
KTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIGNhc2UgUHJvdG9jb2w6Ok5ldHdvcms6OlJl
c291cmNlRXJyb3JUeXBlOjpDYW5jZWxsYXRpb246CisgICAgICAgIGxvYWRlci5kaWRGYWlsKFJl
c291cmNlRXJyb3IoZXJyb3JEb21haW5XZWJLaXRJbnRlcm5hbCwgMCwgbG9hZGVyLnVybCgpLCAi
UmVxdWVzdCBjYW5jZWxlZCJfcywgUmVzb3VyY2VFcnJvcjo6VHlwZTo6Q2FuY2VsbGF0aW9uKSk7
CisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBjYXNlIFByb3RvY29sOjpOZXR3b3JrOjpSZXNv
dXJjZUVycm9yVHlwZTo6VGltZW91dDoKKyAgICAgICAgbG9hZGVyLmRpZEZhaWwoUmVzb3VyY2VF
cnJvcihlcnJvckRvbWFpbldlYktpdEludGVybmFsLCAwLCBsb2FkZXIudXJsKCksICJSZXF1ZXN0
IHRpbWVkIG91dCJfcywgUmVzb3VyY2VFcnJvcjo6VHlwZTo6VGltZW91dCkpOworICAgICAgICBy
ZXR1cm4geyB9OwogICAgIH0KIAotICAgIGF1dG8gZXJyb3JUeXBlID0gSW5zcGVjdG9yOjpQcm90
b2NvbDo6SW5zcGVjdG9ySGVscGVyczo6cGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rv
cjo6UHJvdG9jb2w6Ok5ldHdvcms6OlJlc291cmNlRXJyb3JUeXBlPihlcnJvclR5cGVTdHJpbmcp
OwotICAgIGlmICghZXJyb3JUeXBlKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gbWFrZVN0cmlu
ZygiVW5rbm93biBlcnJvclR5cGU6ICJfcywgZXJyb3JUeXBlU3RyaW5nKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIFJlc291cmNlRXJyb3IgZXJyb3I7Ci0gICAgc3dpdGNoIChlcnJv
clR5cGUudmFsdWUoKSkgewotICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6
UmVzb3VyY2VFcnJvclR5cGU6OkdlbmVyYWw6Ci0gICAgICAgIGVycm9yID0gUmVzb3VyY2VFcnJv
cihlcnJvckRvbWFpbldlYktpdEludGVybmFsLCAwLCBsb2FkZXIudXJsKCksICJSZXF1ZXN0IGlu
dGVyY2VwdGVkIl9zLCBSZXNvdXJjZUVycm9yOjpUeXBlOjpHZW5lcmFsKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpSZXNvdXJjZUVycm9y
VHlwZTo6QWNjZXNzQ29udHJvbDoKLSAgICAgICAgZXJyb3IgPSBSZXNvdXJjZUVycm9yKGVycm9y
RG9tYWluV2ViS2l0SW50ZXJuYWwsIDAsIGxvYWRlci51cmwoKSwgIkFjY2VzcyBkZW5pZWQiX3Ms
IFJlc291cmNlRXJyb3I6OlR5cGU6OkFjY2Vzc0NvbnRyb2wpOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OlJlc291cmNlRXJyb3JUeXBlOjpD
YW5jZWxsYXRpb246Ci0gICAgICAgIGVycm9yID0gUmVzb3VyY2VFcnJvcihlcnJvckRvbWFpbldl
YktpdEludGVybmFsLCAwLCBsb2FkZXIudXJsKCksICJSZXF1ZXN0IGNhbmNlbGVkIl9zLCBSZXNv
dXJjZUVycm9yOjpUeXBlOjpDYW5jZWxsYXRpb24pOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OlJlc291cmNlRXJyb3JUeXBlOjpUaW1lb3V0
OgotICAgICAgICBlcnJvciA9IFJlc291cmNlRXJyb3IoZXJyb3JEb21haW5XZWJLaXRJbnRlcm5h
bCwgMCwgbG9hZGVyLnVybCgpLCAiUmVxdWVzdCB0aW1lZCBvdXQiX3MsIFJlc291cmNlRXJyb3I6
OlR5cGU6OlRpbWVvdXQpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgbG9hZGVyLmRpZEZh
aWwoZXJyb3IpOworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiB7IH07CiB9
CiAKIGJvb2wgSW5zcGVjdG9yTmV0d29ya0FnZW50OjpzaG91bGRUcmVhdEFzVGV4dChjb25zdCBT
dHJpbmcmIG1pbWVUeXBlKQpAQCAtMTQzOSw5ICsxNDEyLDkgQEAgYm9vbCBJbnNwZWN0b3JOZXR3
b3JrQWdlbnQ6OmNhY2hlZFJlc291cmNlQ29udGVudChDYWNoZWRSZXNvdXJjZSYgcmVzb3VyY2Us
IFN0cmkKICAgICB9CiB9CiAKLXN0YXRpYyBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6
U2VhcmNoUmVzdWx0PiBidWlsZE9iamVjdEZvclNlYXJjaFJlc3VsdChjb25zdCBTdHJpbmcmIHJl
cXVlc3RJZCwgY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBjb25zdCBTdHJpbmcmIHVybCwgaW50IG1h
dGNoZXNDb3VudCkKK3N0YXRpYyBSZWY8UHJvdG9jb2w6OlBhZ2U6OlNlYXJjaFJlc3VsdD4gYnVp
bGRPYmplY3RGb3JTZWFyY2hSZXN1bHQoY29uc3QgUHJvdG9jb2w6Ok5ldHdvcms6OlJlcXVlc3RJ
ZCYgcmVxdWVzdElkLCBjb25zdCBQcm90b2NvbDo6TmV0d29yazo6RnJhbWVJZCYgZnJhbWVJZCwg
Y29uc3QgU3RyaW5nJiB1cmwsIGludCBtYXRjaGVzQ291bnQpCiB7Ci0gICAgYXV0byBzZWFyY2hS
ZXN1bHQgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpTZWFyY2hSZXN1bHQ6OmNyZWF0ZSgp
CisgICAgYXV0byBzZWFyY2hSZXN1bHQgPSBQcm90b2NvbDo6UGFnZTo6U2VhcmNoUmVzdWx0Ojpj
cmVhdGUoKQogICAgICAgICAuc2V0VXJsKHVybCkKICAgICAgICAgLnNldEZyYW1lSWQoZnJhbWVJ
ZCkKICAgICAgICAgLnNldE1hdGNoZXNDb3VudChtYXRjaGVzQ291bnQpCkBAIC0xNDYxLDcgKzE0
MzQsNyBAQCBzdGF0aWMgT3B0aW9uYWw8U3RyaW5nPiB0ZXh0Q29udGVudEZvclJlc291cmNlRGF0
YShjb25zdCBOZXR3b3JrUmVzb3VyY2VzRGF0YTo6UgogICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CiB9CiAKLXZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50OjpzZWFyY2hPdGhlclJlcXVlc3RzKGNv
bnN0IEpTQzo6WWFycjo6UmVndWxhckV4cHJlc3Npb24mIHJlZ2V4LCBSZWZQdHI8SlNPTjo6QXJy
YXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpTZWFyY2hSZXN1bHQ+PiYgcmVzdWx0KQor
dm9pZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OnNlYXJjaE90aGVyUmVxdWVzdHMoY29uc3QgSlND
OjpZYXJyOjpSZWd1bGFyRXhwcmVzc2lvbiYgcmVnZXgsIFJlZjxKU09OOjpBcnJheU9mPFByb3Rv
Y29sOjpQYWdlOjpTZWFyY2hSZXN1bHQ+PiYgcmVzdWx0KQogewogICAgIFZlY3RvcjxOZXR3b3Jr
UmVzb3VyY2VzRGF0YTo6UmVzb3VyY2VEYXRhKj4gcmVzb3VyY2VzID0gbV9yZXNvdXJjZXNEYXRh
LT5yZXNvdXJjZXMoKTsKICAgICBmb3IgKGF1dG8qIHJlc291cmNlRGF0YSA6IHJlc291cmNlcykg
ewpAQCAtMTQ3Myw3ICsxNDQ2LDcgQEAgdm9pZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OnNlYXJj
aE90aGVyUmVxdWVzdHMoY29uc3QgSlNDOjpZYXJyOjpSZWd1bGFyRXhwcmVzc2kKICAgICB9CiB9
CiAKLXZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50OjpzZWFyY2hJblJlcXVlc3QoRXJyb3JTdHJp
bmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBx
dWVyeSwgYm9vbCBjYXNlU2Vuc2l0aXZlLCBib29sIGlzUmVnZXgsIFJlZlB0cjxKU09OOjpBcnJh
eU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkdlbmVyaWNUeXBlczo6U2VhcmNoTWF0Y2g+PiYgcmVz
dWx0cykKK3ZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50OjpzZWFyY2hJblJlcXVlc3QoUHJvdG9j
b2w6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgUHJvdG9jb2w6Ok5ldHdvcms6OlJl
cXVlc3RJZCYgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIHF1ZXJ5LCBib29sIGNhc2VTZW5zaXRp
dmUsIGJvb2wgaXNSZWdleCwgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkdlbmVyaWNU
eXBlczo6U2VhcmNoTWF0Y2g+PiYgcmVzdWx0cykKIHsKICAgICBOZXR3b3JrUmVzb3VyY2VzRGF0
YTo6UmVzb3VyY2VEYXRhIGNvbnN0KiByZXNvdXJjZURhdGEgPSBtX3Jlc291cmNlc0RhdGEtPmRh
dGEocmVxdWVzdElkKTsKICAgICBpZiAoIXJlc291cmNlRGF0YSkgewpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JOZXR3b3JrQWdlbnQuaCBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yTmV0d29ya0FnZW50LmgKaW5k
ZXggMzQ0MGU3MWE1ZWQ1ZWYzODQ2MjBhOWY2MjgwMzc1MWU5ODNkYjViMS4uNDBlMjNjNDNhNzBl
NzliMGMyYzBiMWQ2YTE1M2VkZTM5NTgwMmFhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JOZXR3b3JrQWdlbnQuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rvck5ldHdvcmtBZ2VudC5oCkBAIC02MSw4ICs2
MSw2IEBAIGNsYXNzIFdlYlNvY2tldDsKIAogc3RydWN0IFdlYlNvY2tldEZyYW1lOwogCi10eXBl
ZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQogY2xhc3MgSW5zcGVjdG9yTmV0d29ya0FnZW50IDog
cHVibGljIEluc3BlY3RvckFnZW50QmFzZSwgcHVibGljIEluc3BlY3Rvcjo6TmV0d29ya0JhY2tl
bmREaXNwYXRjaGVySGFuZGxlciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW5zcGVjdG9y
TmV0d29ya0FnZW50KTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKQEAgLTc5LDIyICs3
NywyMiBAQCBwdWJsaWM6CiAgICAgdm9pZCB3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJ
bnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24pIGZpbmFsOwogCiAgICAgLy8gTmV0d29ya0JhY2tl
bmREaXNwYXRjaGVySGFuZGxlcgotICAgIHZvaWQgZW5hYmxlKEVycm9yU3RyaW5nJikgZmluYWw7
Ci0gICAgdm9pZCBkaXNhYmxlKEVycm9yU3RyaW5nJikgZmluYWw7Ci0gICAgdm9pZCBzZXRFeHRy
YUhUVFBIZWFkZXJzKEVycm9yU3RyaW5nJiwgY29uc3QgSlNPTjo6T2JqZWN0JiBoZWFkZXJzKSBm
aW5hbDsKLSAgICB2b2lkIGdldFJlc3BvbnNlQm9keShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmlu
ZyYgcmVxdWVzdElkLCBTdHJpbmcqIGNvbnRlbnQsIGJvb2wqIGJhc2U2NEVuY29kZWQpIGZpbmFs
OwotICAgIHZvaWQgc2V0UmVzb3VyY2VDYWNoaW5nRGlzYWJsZWQoRXJyb3JTdHJpbmcmLCBib29s
IGRpc2FibGVkKSBmaW5hbDsKLSAgICB2b2lkIGxvYWRSZXNvdXJjZShjb25zdCBTdHJpbmcmIGZy
YW1lSWQsIGNvbnN0IFN0cmluZyYgdXJsLCBSZWY8TG9hZFJlc291cmNlQ2FsbGJhY2s+JiYpIGZp
bmFsOwotICAgIHZvaWQgZ2V0U2VyaWFsaXplZENlcnRpZmljYXRlKEVycm9yU3RyaW5nJiwgY29u
c3QgU3RyaW5nJiByZXF1ZXN0SWQsIFN0cmluZyogc2VyaWFsaXplZENlcnRpZmljYXRlKSBmaW5h
bDsKLSAgICB2b2lkIHJlc29sdmVXZWJTb2NrZXQoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcm
IHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nKiBvYmplY3RHcm91cCwgUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mKSBmaW5hbDsKLSAgICB2b2lkIHNldElu
dGVyY2VwdGlvbkVuYWJsZWQoRXJyb3JTdHJpbmcmLCBib29sIGVuYWJsZWQpIGZpbmFsOwotICAg
IHZvaWQgYWRkSW50ZXJjZXB0aW9uKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiB1cmwsIGNv
bnN0IFN0cmluZyYgbmV0d29ya1N0YWdlU3RyaW5nLCBjb25zdCBib29sKiBjYXNlU2Vuc2l0aXZl
LCBjb25zdCBib29sKiBpc1JlZ2V4KSBmaW5hbDsKLSAgICB2b2lkIHJlbW92ZUludGVyY2VwdGlv
bihFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIG5ldHdvcmtT
dGFnZVN0cmluZywgY29uc3QgYm9vbCogY2FzZVNlbnNpdGl2ZSwgY29uc3QgYm9vbCogaXNSZWdl
eCkgZmluYWw7Ci0gICAgdm9pZCBpbnRlcmNlcHRDb250aW51ZShFcnJvclN0cmluZyYsIGNvbnN0
IFN0cmluZyYgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG5ldHdvcmtTdGFnZVN0cmluZykgZmlu
YWw7Ci0gICAgdm9pZCBpbnRlcmNlcHRXaXRoUmVxdWVzdChFcnJvclN0cmluZyYsIGNvbnN0IFN0
cmluZyYgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcqIHVybCwgY29uc3QgU3RyaW5nKiBtZXRob2Qs
IGNvbnN0IEpTT046Ok9iamVjdCogaGVhZGVycywgY29uc3QgU3RyaW5nKiBwb3N0RGF0YSkgZmlu
YWw7Ci0gICAgdm9pZCBpbnRlcmNlcHRXaXRoUmVzcG9uc2UoRXJyb3JTdHJpbmcmLCBjb25zdCBT
dHJpbmcmIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBjb250ZW50LCBib29sIGJhc2U2NEVuY29k
ZWQsIGNvbnN0IFN0cmluZyogbWltZVR5cGUsIGNvbnN0IGludCogc3RhdHVzLCBjb25zdCBTdHJp
bmcqIHN0YXR1c1RleHQsIGNvbnN0IEpTT046Ok9iamVjdCogaGVhZGVycykgZmluYWw7Ci0gICAg
dm9pZCBpbnRlcmNlcHRSZXF1ZXN0V2l0aFJlc3BvbnNlKEVycm9yU3RyaW5nJiwgY29uc3QgU3Ry
aW5nJiByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgY29udGVudCwgYm9vbCBiYXNlNjRFbmNvZGVk
LCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBpbnQgc3RhdHVzLCBjb25zdCBTdHJpbmcmIHN0YXR1
c1RleHQsIGNvbnN0IEpTT046Ok9iamVjdCYgaGVhZGVycykgZmluYWw7Ci0gICAgdm9pZCBpbnRl
cmNlcHRSZXF1ZXN0V2l0aEVycm9yKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiByZXF1ZXN0
SWQsIGNvbnN0IFN0cmluZyYgZXJyb3JUeXBlKSBmaW5hbDsKKyAgICBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGVuYWJsZSgpIGZpbmFsOworICAgIEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZGlzYWJsZSgpIGZpbmFsOworICAgIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc2V0RXh0cmFIVFRQSGVhZGVycyhS
ZWY8SlNPTjo6T2JqZWN0PiYmKSBmaW5hbDsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJv
clN0cmluZ09yPHN0ZDo6dHVwbGU8U3RyaW5nLCBib29sIC8qIGJhc2U2NEVuY29kZWQgKi8+PiBn
ZXRSZXNwb25zZUJvZHkoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6UmVxdWVz
dElkJikgZmluYWw7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lk
PiBzZXRSZXNvdXJjZUNhY2hpbmdEaXNhYmxlZChib29sKSBmaW5hbDsKKyAgICB2b2lkIGxvYWRS
ZXNvdXJjZShjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpGcmFtZUlkJiwgY29u
c3QgU3RyaW5nJiB1cmwsIFJlZjxMb2FkUmVzb3VyY2VDYWxsYmFjaz4mJikgZmluYWw7CisgICAg
SW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxTdHJpbmc+IGdldFNlcmlhbGl6ZWRD
ZXJ0aWZpY2F0ZShjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpSZXF1ZXN0SWQm
KSBmaW5hbDsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+PiByZXNvbHZlV2ViU29ja2V0
KGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OlJlcXVlc3RJZCYsIGNvbnN0IFN0
cmluZyYgb2JqZWN0R3JvdXApIGZpbmFsOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8dm9pZD4gc2V0SW50ZXJjZXB0aW9uRW5hYmxlZChib29sKSBmaW5hbDsKKyAgICBJ
bnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGFkZEludGVyY2VwdGlvbihj
b25zdCBTdHJpbmcmIHVybCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6TmV0d29ya1N0
YWdlLCBPcHRpb25hbDxib29sPiYmIGNhc2VTZW5zaXRpdmUsIE9wdGlvbmFsPGJvb2w+JiYgaXNS
ZWdleCkgZmluYWw7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lk
PiByZW1vdmVJbnRlcmNlcHRpb24oY29uc3QgU3RyaW5nJiB1cmwsIEluc3BlY3Rvcjo6UHJvdG9j
b2w6Ok5ldHdvcms6Ok5ldHdvcmtTdGFnZSwgT3B0aW9uYWw8Ym9vbD4mJiBjYXNlU2Vuc2l0aXZl
LCBPcHRpb25hbDxib29sPiYmIGlzUmVnZXgpIGZpbmFsOworICAgIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gaW50ZXJjZXB0Q29udGludWUoY29uc3QgSW5zcGVjdG9y
OjpQcm90b2NvbDo6TmV0d29yazo6UmVxdWVzdElkJiwgSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0
d29yazo6TmV0d29ya1N0YWdlKSBmaW5hbDsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJv
clN0cmluZ09yPHZvaWQ+IGludGVyY2VwdFdpdGhSZXF1ZXN0KGNvbnN0IEluc3BlY3Rvcjo6UHJv
dG9jb2w6Ok5ldHdvcms6OlJlcXVlc3RJZCYsIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJp
bmcmIG1ldGhvZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBoZWFkZXJzLCBjb25zdCBTdHJpbmcm
IHBvc3REYXRhKSBmaW5hbDsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09y
PHZvaWQ+IGludGVyY2VwdFdpdGhSZXNwb25zZShjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpO
ZXR3b3JrOjpSZXF1ZXN0SWQmLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQsIGJvb2wgYmFzZTY0RW5j
b2RlZCwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8aW50PiYmIHN0YXR1cywgY29u
c3QgU3RyaW5nJiBzdGF0dXNUZXh0LCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIGhlYWRlcnMpIGZp
bmFsOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gaW50ZXJj
ZXB0UmVxdWVzdFdpdGhSZXNwb25zZShjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3Jr
OjpSZXF1ZXN0SWQmLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQsIGJvb2wgYmFzZTY0RW5jb2RlZCwg
Y29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgaW50IHN0YXR1cywgY29uc3QgU3RyaW5nJiBzdGF0dXNU
ZXh0LCBSZWY8SlNPTjo6T2JqZWN0PiYmIGhlYWRlcnMpIGZpbmFsOworICAgIEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gaW50ZXJjZXB0UmVxdWVzdFdpdGhFcnJvcihj
b25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpSZXF1ZXN0SWQmLCBJbnNwZWN0b3I6
OlByb3RvY29sOjpOZXR3b3JrOjpSZXNvdXJjZUVycm9yVHlwZSkgZmluYWw7CiAKICAgICAvLyBJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb24KICAgICB2b2lkIHdpbGxSZWNhbGN1bGF0ZVN0eWxlKCk7
CkBAIC0xMjcsMzIgKzEyNSwyOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBpbnRlcmNlcHRSZXNwb25z
ZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmLCBSZWZQdHI8U2hhcmVk
QnVmZmVyPik+JiYpOwogICAgIHZvaWQgaW50ZXJjZXB0UmVxdWVzdChSZXNvdXJjZUxvYWRlciYs
IEZ1bmN0aW9uPHZvaWQoY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jik+JiYpOwogCi0gICAgdm9pZCBz
ZWFyY2hPdGhlclJlcXVlc3RzKGNvbnN0IEpTQzo6WWFycjo6UmVndWxhckV4cHJlc3Npb24mLCBS
ZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpTZWFyY2hSZXN1
bHQ+PiYpOwotICAgIHZvaWQgc2VhcmNoSW5SZXF1ZXN0KEVycm9yU3RyaW5nJiwgY29uc3QgU3Ry
aW5nJiByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgcXVlcnksIGJvb2wgY2FzZVNlbnNpdGl2ZSwg
Ym9vbCBpc1JlZ2V4LCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpH
ZW5lcmljVHlwZXM6OlNlYXJjaE1hdGNoPj4mKTsKKyAgICB2b2lkIHNlYXJjaE90aGVyUmVxdWVz
dHMoY29uc3QgSlNDOjpZYXJyOjpSZWd1bGFyRXhwcmVzc2lvbiYsIFJlZjxKU09OOjpBcnJheU9m
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OlNlYXJjaFJlc3VsdD4+Jik7CisgICAgdm9pZCBz
ZWFyY2hJblJlcXVlc3QoSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBjb25zdCBJ
bnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpSZXF1ZXN0SWQmLCBjb25zdCBTdHJpbmcmIHF1
ZXJ5LCBib29sIGNhc2VTZW5zaXRpdmUsIGJvb2wgaXNSZWdleCwgUmVmUHRyPEpTT046OkFycmF5
T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6R2VuZXJpY1R5cGVzOjpTZWFyY2hNYXRjaD4+Jik7CiAK
IHByb3RlY3RlZDoKICAgICBJbnNwZWN0b3JOZXR3b3JrQWdlbnQoV2ViQWdlbnRDb250ZXh0Jik7
CiAKLSAgICB2aXJ0dWFsIFN0cmluZyBsb2FkZXJJZGVudGlmaWVyKERvY3VtZW50TG9hZGVyKikg
PSAwOwotICAgIHZpcnR1YWwgU3RyaW5nIGZyYW1lSWRlbnRpZmllcihEb2N1bWVudExvYWRlciop
ID0gMDsKKyAgICB2aXJ0dWFsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OkxvYWRlcklk
IGxvYWRlcklkZW50aWZpZXIoRG9jdW1lbnRMb2FkZXIqKSA9IDA7CisgICAgdmlydHVhbCBJbnNw
ZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpGcmFtZUlkIGZyYW1lSWRlbnRpZmllcihEb2N1bWVu
dExvYWRlciopID0gMDsKICAgICB2aXJ0dWFsIFZlY3RvcjxXZWJTb2NrZXQqPiBhY3RpdmVXZWJT
b2NrZXRzKGNvbnN0IExvY2tIb2xkZXImKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldFJlc291
cmNlQ2FjaGluZ0Rpc2FibGVkKGJvb2wpID0gMDsKLSAgICB2aXJ0dWFsIFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJp
bmcmIGZyYW1lSWQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0UmVzb3VyY2VDYWNoaW5nRGlz
YWJsZWRJbnRlcmFsKGJvb2wpID0gMDsKKyAgICB2aXJ0dWFsIFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJp
bmcmLCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpGcmFtZUlkJikgPSAwOwog
ICAgIHZpcnR1YWwgYm9vbCBzaG91bGRGb3JjZUJ1ZmZlcmluZ05ldHdvcmtSZXNvdXJjZURhdGEo
KSBjb25zdCA9IDA7CiAKIHByaXZhdGU6Ci0gICAgdm9pZCBlbmFibGUoKTsKLQogICAgIHZvaWQg
d2lsbFNlbmRSZXF1ZXN0KHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgRG9jdW1lbnRMb2FkZXIq
LCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZWRpcmVjdFJlc3Bv
bnNlLCBJbnNwZWN0b3JQYWdlQWdlbnQ6OlJlc291cmNlVHlwZSk7CiAKLSAgICB1c2luZyBOZXR3
b3JrU3RhZ2UgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpOZXR3b3JrU3RhZ2U7Ci0g
ICAgYm9vbCBzaG91bGRJbnRlcmNlcHQoVVJMLCBOZXR3b3JrU3RhZ2UpOworICAgIGJvb2wgc2hv
dWxkSW50ZXJjZXB0KFVSTCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6TmV0d29ya1N0
YWdlKTsKICAgICB2b2lkIGNvbnRpbnVlUGVuZGluZ1JlcXVlc3RzKCk7CiAgICAgdm9pZCBjb250
aW51ZVBlbmRpbmdSZXNwb25zZXMoKTsKIAotICAgIFdlYlNvY2tldCogd2ViU29ja2V0Rm9yUmVx
dWVzdElkKGNvbnN0IFN0cmluZyYgcmVxdWVzdElkKTsKKyAgICBXZWJTb2NrZXQqIHdlYlNvY2tl
dEZvclJlcXVlc3RJZChjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpSZXF1ZXN0
SWQmKTsKIAotICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpJbml0aWF0
b3I+IGJ1aWxkSW5pdGlhdG9yT2JqZWN0KERvY3VtZW50KiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0
KiA9IG51bGxwdHIpOworICAgIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpJbml0
aWF0b3I+IGJ1aWxkSW5pdGlhdG9yT2JqZWN0KERvY3VtZW50KiwgY29uc3QgUmVzb3VyY2VSZXF1
ZXN0KiA9IG51bGxwdHIpOwogICAgIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpS
ZXNvdXJjZVRpbWluZz4gYnVpbGRPYmplY3RGb3JUaW1pbmcoY29uc3QgTmV0d29ya0xvYWRNZXRy
aWNzKiwgUmVzb3VyY2VMb2FkZXImKTsKICAgICBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0
d29yazo6TWV0cmljcz4gYnVpbGRPYmplY3RGb3JNZXRyaWNzKGNvbnN0IE5ldHdvcmtMb2FkTWV0
cmljcyYpOwogICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpSZXNwb25z
ZT4gYnVpbGRPYmplY3RGb3JSZXNvdXJjZVJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2Um
LCBSZXNvdXJjZUxvYWRlciopOwpAQCAtMjM2LDcgKzIzMSw3IEBAIHByaXZhdGU6CiAgICAgICAg
IFN0cmluZyB1cmw7CiAgICAgICAgIGJvb2wgY2FzZVNlbnNpdGl2ZSB7IHRydWUgfTsKICAgICAg
ICAgYm9vbCBpc1JlZ2V4IHsgZmFsc2UgfTsKLSAgICAgICAgTmV0d29ya1N0YWdlIG5ldHdvcmtT
dGFnZSB7IE5ldHdvcmtTdGFnZTo6UmVzcG9uc2UgfTsKKyAgICAgICAgSW5zcGVjdG9yOjpQcm90
b2NvbDo6TmV0d29yazo6TmV0d29ya1N0YWdlIG5ldHdvcmtTdGFnZSB7IEluc3BlY3Rvcjo6UHJv
dG9jb2w6Ok5ldHdvcms6Ok5ldHdvcmtTdGFnZTo6UmVzcG9uc2UgfTsKIAogICAgICAgICBpbmxp
bmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEludGVyY2VwdCYgb3RoZXIpIGNvbnN0CiAgICAgICAg
IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9y
UGFnZUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9y
UGFnZUFnZW50LmNwcAppbmRleCA1MzllODEwNWI2NmU3YjJhNmEwNTU3MWExZTFjOGNkNmJkZjI3
YzkwLi44YmY3YWUxZTBkMDVhMjY0OWMxM2FiYjBkMTRkMjA4NDM3NzU4MDk5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JQYWdlQWdlbnQu
Y3BwCkBAIC0xNTEsNyArMTUxLDcgQEAgVmVjdG9yPENhY2hlZFJlc291cmNlKj4gSW5zcGVjdG9y
UGFnZUFnZW50OjpjYWNoZWRSZXNvdXJjZXNGb3JGcmFtZShGcmFtZSogZnJhbWUKICAgICByZXR1
cm4gcmVzdWx0OwogfQogCi12b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6cmVzb3VyY2VDb250ZW50
KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgRnJhbWUqIGZyYW1lLCBjb25zdCBVUkwmIHVybCwg
U3RyaW5nKiByZXN1bHQsIGJvb2wqIGJhc2U2NEVuY29kZWQpCit2b2lkIEluc3BlY3RvclBhZ2VB
Z2VudDo6cmVzb3VyY2VDb250ZW50KFByb3RvY29sOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcs
IEZyYW1lKiBmcmFtZSwgY29uc3QgVVJMJiB1cmwsIFN0cmluZyogcmVzdWx0LCBib29sKiBiYXNl
NjRFbmNvZGVkKQogewogICAgIERvY3VtZW50TG9hZGVyKiBsb2FkZXIgPSBhc3NlcnREb2N1bWVu
dExvYWRlcihlcnJvclN0cmluZywgZnJhbWUpOwogICAgIGlmICghbG9hZGVyKQpAQCAtMjEzLDM3
ICsyMTMsMzcgQEAgQ2FjaGVkUmVzb3VyY2UqIEluc3BlY3RvclBhZ2VBZ2VudDo6Y2FjaGVkUmVz
b3VyY2UoRnJhbWUqIGZyYW1lLCBjb25zdCBVUkwmIHVybCkKICAgICByZXR1cm4gY2FjaGVkUmVz
b3VyY2U7CiB9CiAKLUluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OlJlc291cmNlVHlwZSBJbnNw
ZWN0b3JQYWdlQWdlbnQ6OnJlc291cmNlVHlwZUpTT04oSW5zcGVjdG9yUGFnZUFnZW50OjpSZXNv
dXJjZVR5cGUgcmVzb3VyY2VUeXBlKQorUHJvdG9jb2w6OlBhZ2U6OlJlc291cmNlVHlwZSBJbnNw
ZWN0b3JQYWdlQWdlbnQ6OnJlc291cmNlVHlwZUpTT04oSW5zcGVjdG9yUGFnZUFnZW50OjpSZXNv
dXJjZVR5cGUgcmVzb3VyY2VUeXBlKQogewogICAgIHN3aXRjaCAocmVzb3VyY2VUeXBlKSB7CiAg
ICAgY2FzZSBEb2N1bWVudFJlc291cmNlOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90
b2NvbDo6UGFnZTo6UmVzb3VyY2VUeXBlOjpEb2N1bWVudDsKKyAgICAgICAgcmV0dXJuIFByb3Rv
Y29sOjpQYWdlOjpSZXNvdXJjZVR5cGU6OkRvY3VtZW50OwogICAgIGNhc2UgSW1hZ2VSZXNvdXJj
ZToKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OlJlc291cmNlVHlw
ZTo6SW1hZ2U7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6UGFnZTo6UmVzb3VyY2VUeXBlOjpJ
bWFnZTsKICAgICBjYXNlIEZvbnRSZXNvdXJjZToKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlBhZ2U6OlJlc291cmNlVHlwZTo6Rm9udDsKKyAgICAgICAgcmV0dXJuIFByb3Rv
Y29sOjpQYWdlOjpSZXNvdXJjZVR5cGU6OkZvbnQ7CiAgICAgY2FzZSBTdHlsZVNoZWV0UmVzb3Vy
Y2U6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpSZXNvdXJjZVR5
cGU6OlN0eWxlU2hlZXQ7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6UGFnZTo6UmVzb3VyY2VU
eXBlOjpTdHlsZVNoZWV0OwogICAgIGNhc2UgU2NyaXB0UmVzb3VyY2U6Ci0gICAgICAgIHJldHVy
biBJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpSZXNvdXJjZVR5cGU6OlNjcmlwdDsKKyAgICAg
ICAgcmV0dXJuIFByb3RvY29sOjpQYWdlOjpSZXNvdXJjZVR5cGU6OlNjcmlwdDsKICAgICBjYXNl
IFhIUlJlc291cmNlOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6
UmVzb3VyY2VUeXBlOjpYSFI7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6UGFnZTo6UmVzb3Vy
Y2VUeXBlOjpYSFI7CiAgICAgY2FzZSBGZXRjaFJlc291cmNlOgotICAgICAgICByZXR1cm4gSW5z
cGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6UmVzb3VyY2VUeXBlOjpGZXRjaDsKKyAgICAgICAgcmV0
dXJuIFByb3RvY29sOjpQYWdlOjpSZXNvdXJjZVR5cGU6OkZldGNoOwogICAgIGNhc2UgUGluZ1Jl
c291cmNlOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6UmVzb3Vy
Y2VUeXBlOjpQaW5nOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OlBhZ2U6OlJlc291cmNlVHlw
ZTo6UGluZzsKICAgICBjYXNlIEJlYWNvblJlc291cmNlOgotICAgICAgICByZXR1cm4gSW5zcGVj
dG9yOjpQcm90b2NvbDo6UGFnZTo6UmVzb3VyY2VUeXBlOjpCZWFjb247CisgICAgICAgIHJldHVy
biBQcm90b2NvbDo6UGFnZTo6UmVzb3VyY2VUeXBlOjpCZWFjb247CiAgICAgY2FzZSBXZWJTb2Nr
ZXRSZXNvdXJjZToKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OlJl
c291cmNlVHlwZTo6V2ViU29ja2V0OworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OlBhZ2U6OlJl
c291cmNlVHlwZTo6V2ViU29ja2V0OwogICAgIGNhc2UgT3RoZXJSZXNvdXJjZToKLSAgICAgICAg
cmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OlJlc291cmNlVHlwZTo6T3RoZXI7Cisg
ICAgICAgIHJldHVybiBQcm90b2NvbDo6UGFnZTo6UmVzb3VyY2VUeXBlOjpPdGhlcjsKICNpZiBF
TkFCTEUoQVBQTElDQVRJT05fTUFOSUZFU1QpCiAgICAgY2FzZSBBcHBsaWNhdGlvbk1hbmlmZXN0
UmVzb3VyY2U6CiAgICAgICAgIGJyZWFrOwogI2VuZGlmCiAgICAgfQotICAgIHJldHVybiBJbnNw
ZWN0b3I6OlByb3RvY29sOjpQYWdlOjpSZXNvdXJjZVR5cGU6Ok90aGVyOworICAgIHJldHVybiBQ
cm90b2NvbDo6UGFnZTo6UmVzb3VyY2VUeXBlOjpPdGhlcjsKIH0KIAogSW5zcGVjdG9yUGFnZUFn
ZW50OjpSZXNvdXJjZVR5cGUgSW5zcGVjdG9yUGFnZUFnZW50OjppbnNwZWN0b3JSZXNvdXJjZVR5
cGUoQ2FjaGVkUmVzb3VyY2U6OlR5cGUgdHlwZSkKQEAgLTI5Nyw3ICsyOTcsNyBAQCBJbnNwZWN0
b3JQYWdlQWdlbnQ6OlJlc291cmNlVHlwZSBJbnNwZWN0b3JQYWdlQWdlbnQ6Omluc3BlY3RvclJl
c291cmNlVHlwZShjb25zdAogICAgIHJldHVybiBpbnNwZWN0b3JSZXNvdXJjZVR5cGUoY2FjaGVk
UmVzb3VyY2UudHlwZSgpKTsKIH0KIAotSW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6UmVzb3Vy
Y2VUeXBlIEluc3BlY3RvclBhZ2VBZ2VudDo6Y2FjaGVkUmVzb3VyY2VUeXBlSlNPTihjb25zdCBD
YWNoZWRSZXNvdXJjZSYgY2FjaGVkUmVzb3VyY2UpCitQcm90b2NvbDo6UGFnZTo6UmVzb3VyY2VU
eXBlIEluc3BlY3RvclBhZ2VBZ2VudDo6Y2FjaGVkUmVzb3VyY2VUeXBlSlNPTihjb25zdCBDYWNo
ZWRSZXNvdXJjZSYgY2FjaGVkUmVzb3VyY2UpCiB7CiAgICAgcmV0dXJuIHJlc291cmNlVHlwZUpT
T04oaW5zcGVjdG9yUmVzb3VyY2VUeXBlKGNhY2hlZFJlc291cmNlKSk7CiB9CkBAIC0zMTEsNyAr
MzExLDcgQEAgRnJhbWUqIEluc3BlY3RvclBhZ2VBZ2VudDo6ZmluZEZyYW1lV2l0aFNlY3VyaXR5
T3JpZ2luKFBhZ2UmIHBhZ2UsIGNvbnN0IFN0cmluZyYKICAgICByZXR1cm4gbnVsbHB0cjsKIH0K
IAotRG9jdW1lbnRMb2FkZXIqIEluc3BlY3RvclBhZ2VBZ2VudDo6YXNzZXJ0RG9jdW1lbnRMb2Fk
ZXIoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBGcmFtZSogZnJhbWUpCitEb2N1bWVudExvYWRl
ciogSW5zcGVjdG9yUGFnZUFnZW50Ojphc3NlcnREb2N1bWVudExvYWRlcihQcm90b2NvbDo6RXJy
b3JTdHJpbmcmIGVycm9yU3RyaW5nLCBGcmFtZSogZnJhbWUpCiB7CiAgICAgRnJhbWVMb2FkZXIm
IGZyYW1lTG9hZGVyID0gZnJhbWUtPmxvYWRlcigpOwogICAgIERvY3VtZW50TG9hZGVyKiBkb2N1
bWVudExvYWRlciA9IGZyYW1lTG9hZGVyLmRvY3VtZW50TG9hZGVyKCk7CkBAIC0zMzgsMTYgKzMz
OCwxMyBAQCB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6ZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNr
ZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRSb3V0ZXIqLAogCiB2b2lkIEluc3BlY3RvclBhZ2VBZ2Vu
dDo6d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVh
c29uKQogewotICAgIEVycm9yU3RyaW5nIHVudXNlZDsKLSAgICBkaXNhYmxlKHVudXNlZCk7Cisg
ICAgZGlzYWJsZSgpOwogfQogCi12b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6ZW5hYmxlKEVycm9y
U3RyaW5nJiBlcnJvclN0cmluZykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3Bl
Y3RvclBhZ2VBZ2VudDo6ZW5hYmxlKCkKIHsKLSAgICBpZiAobV9pbnN0cnVtZW50aW5nQWdlbnRz
LmVuYWJsZWRQYWdlQWdlbnQoKSA9PSB0aGlzKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIlBh
Z2UgZG9tYWluIGFscmVhZHkgZW5hYmxlZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAg
ICBpZiAobV9pbnN0cnVtZW50aW5nQWdlbnRzLmVuYWJsZWRQYWdlQWdlbnQoKSA9PSB0aGlzKQor
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIlBhZ2UgZG9tYWluIGFscmVhZHkgZW5hYmxl
ZCJfcyk7CiAKICAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMuc2V0RW5hYmxlZFBhZ2VBZ2VudCh0
aGlzKTsKIApAQCAtMzU4LDIxICszNTUsMjIgQEAgdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmVu
YWJsZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCiAjaWYgRU5BQkxFKERBUktfTU9ERV9DU1Mp
IHx8IEhBVkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCiAgICAgZGVmYXVsdEFwcGVhcmFuY2VEaWRD
aGFuZ2UobV9pbnNwZWN0ZWRQYWdlLmRlZmF1bHRVc2VEYXJrQXBwZWFyYW5jZSgpKTsKICNlbmRp
ZgorCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmRpc2Fi
bGUoRXJyb3JTdHJpbmcmKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9y
UGFnZUFnZW50OjpkaXNhYmxlKCkKIHsKICAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMuc2V0RW5h
YmxlZFBhZ2VBZ2VudChudWxscHRyKTsKIAotICAgIEVycm9yU3RyaW5nIHVudXNlZDsKLSAgICBz
ZXRTaG93UGFpbnRSZWN0cyh1bnVzZWQsIGZhbHNlKTsKKyAgICBzZXRTaG93UGFpbnRSZWN0cyhm
YWxzZSk7CiAjaWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgc2V0U2hvd1J1bGVycyh1bnVz
ZWQsIGZhbHNlKTsKKyAgICBzZXRTaG93UnVsZXJzKGZhbHNlKTsKICNlbmRpZgotICAgIG92ZXJy
aWRlVXNlckFnZW50KHVudXNlZCwgbnVsbHB0cik7Ci0gICAgc2V0RW11bGF0ZWRNZWRpYSh1bnVz
ZWQsIGVtcHR5U3RyaW5nKCkpOworICAgIG92ZXJyaWRlVXNlckFnZW50KG51bGxTdHJpbmcoKSk7
CisgICAgc2V0RW11bGF0ZWRNZWRpYShlbXB0eVN0cmluZygpKTsKICNpZiBFTkFCTEUoREFSS19N
T0RFX0NTUykgfHwgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKLSAgICBzZXRGb3JjZWRBcHBl
YXJhbmNlKHVudXNlZCwgZW1wdHlTdHJpbmcoKSk7CisgICAgc2V0Rm9yY2VkQXBwZWFyYW5jZShX
VEY6Om51bGxvcHQpOwogI2VuZGlmCiAKICAgICBhdXRvJiBpbnNwZWN0ZWRQYWdlU2V0dGluZ3Mg
PSBtX2luc3BlY3RlZFBhZ2Uuc2V0dGluZ3MoKTsKQEAgLTM5MSw2ICszODksOCBAQCB2b2lkIElu
c3BlY3RvclBhZ2VBZ2VudDo6ZGlzYWJsZShFcnJvclN0cmluZyYpCiAgICAgbV9jbGllbnQtPnNl
dERldmVsb3BlclByZWZlcmVuY2VPdmVycmlkZShJbnNwZWN0b3JDbGllbnQ6OkRldmVsb3BlclBy
ZWZlcmVuY2U6OkFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZUVuYWJsZWQsIFdURjo6bnVsbG9w
dCk7CiAgICAgbV9jbGllbnQtPnNldERldmVsb3BlclByZWZlcmVuY2VPdmVycmlkZShJbnNwZWN0
b3JDbGllbnQ6OkRldmVsb3BlclByZWZlcmVuY2U6OklUUERlYnVnTW9kZUVuYWJsZWQsIFdURjo6
bnVsbG9wdCk7CiAgICAgbV9jbGllbnQtPnNldERldmVsb3BlclByZWZlcmVuY2VPdmVycmlkZShJ
bnNwZWN0b3JDbGllbnQ6OkRldmVsb3BlclByZWZlcmVuY2U6Ok1vY2tDYXB0dXJlRGV2aWNlc0Vu
YWJsZWQsIFdURjo6bnVsbG9wdCk7CisKKyAgICByZXR1cm4geyB9OwogfQogCiBkb3VibGUgSW5z
cGVjdG9yUGFnZUFnZW50Ojp0aW1lc3RhbXAoKQpAQCAtMzk4LDIxICszOTgsMTkgQEAgZG91Ymxl
IEluc3BlY3RvclBhZ2VBZ2VudDo6dGltZXN0YW1wKCkKICAgICByZXR1cm4gbV9lbnZpcm9ubWVu
dC5leGVjdXRpb25TdG9wd2F0Y2goKS5lbGFwc2VkVGltZSgpLnNlY29uZHMoKTsKIH0KIAotdm9p
ZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OnJlbG9hZChFcnJvclN0cmluZyYsIGNvbnN0IGJvb2wqIG9w
dGlvbmFsUmVsb2FkRnJvbU9yaWdpbiwgY29uc3QgYm9vbCogb3B0aW9uYWxSZXZhbGlkYXRlQWxs
UmVzb3VyY2VzKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yUGFnZUFn
ZW50OjpyZWxvYWQoT3B0aW9uYWw8Ym9vbD4mJiBpZ25vcmVDYWNoZSwgT3B0aW9uYWw8Ym9vbD4m
JiByZXZhbGlkYXRlQWxsUmVzb3VyY2VzKQogewotICAgIGJvb2wgcmVsb2FkRnJvbU9yaWdpbiA9
IG9wdGlvbmFsUmVsb2FkRnJvbU9yaWdpbiAmJiAqb3B0aW9uYWxSZWxvYWRGcm9tT3JpZ2luOwot
ICAgIGJvb2wgcmV2YWxpZGF0ZUFsbFJlc291cmNlcyA9IG9wdGlvbmFsUmV2YWxpZGF0ZUFsbFJl
c291cmNlcyAmJiAqb3B0aW9uYWxSZXZhbGlkYXRlQWxsUmVzb3VyY2VzOwotCiAgICAgT3B0aW9u
U2V0PFJlbG9hZE9wdGlvbj4gcmVsb2FkT3B0aW9uczsKLSAgICBpZiAocmVsb2FkRnJvbU9yaWdp
bikKKyAgICBpZiAoaWdub3JlQ2FjaGUgJiYgKmlnbm9yZUNhY2hlKQogICAgICAgICByZWxvYWRP
cHRpb25zLmFkZChSZWxvYWRPcHRpb246OkZyb21PcmlnaW4pOwotICAgIGlmICghcmV2YWxpZGF0
ZUFsbFJlc291cmNlcykKKyAgICBpZiAoIXJldmFsaWRhdGVBbGxSZXNvdXJjZXMgfHwgISpyZXZh
bGlkYXRlQWxsUmVzb3VyY2VzKQogICAgICAgICByZWxvYWRPcHRpb25zLmFkZChSZWxvYWRPcHRp
b246OkV4cGlyZWRPbmx5KTsKLQogICAgIG1faW5zcGVjdGVkUGFnZS5tYWluRnJhbWUoKS5sb2Fk
ZXIoKS5yZWxvYWQocmVsb2FkT3B0aW9ucyk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lk
IEluc3BlY3RvclBhZ2VBZ2VudDo6bmF2aWdhdGUoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcm
IHVybCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvclBhZ2VBZ2VudDo6
bmF2aWdhdGUoY29uc3QgU3RyaW5nJiB1cmwpCiB7CiAgICAgVXNlckdlc3R1cmVJbmRpY2F0b3Ig
aW5kaWNhdG9yIHsgUHJvY2Vzc2luZ1VzZXJHZXN0dXJlIH07CiAgICAgRnJhbWUmIGZyYW1lID0g
bV9pbnNwZWN0ZWRQYWdlLm1haW5GcmFtZSgpOwpAQCAtNDIxLDExMSArNDE5LDk3IEBAIHZvaWQg
SW5zcGVjdG9yUGFnZUFnZW50OjpuYXZpZ2F0ZShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYg
dXJsKQogICAgIEZyYW1lTG9hZFJlcXVlc3QgZnJhbWVMb2FkUmVxdWVzdCB7ICpmcmFtZS5kb2N1
bWVudCgpLCBmcmFtZS5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLCBXVEZNb3ZlKHJlc291
cmNlUmVxdWVzdCksICJfc2VsZiJfcywgSW5pdGlhdGVkQnlNYWluRnJhbWU6OlVua25vd24gfTsK
ICAgICBmcmFtZUxvYWRSZXF1ZXN0LmRpc2FibGVOYXZpZ2F0aW9uVG9JbnZhbGlkVVJMKCk7CiAg
ICAgZnJhbWUubG9hZGVyKCkuY2hhbmdlTG9jYXRpb24oV1RGTW92ZShmcmFtZUxvYWRSZXF1ZXN0
KSk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6b3Zl
cnJpZGVVc2VyQWdlbnQoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcqIHZhbHVlKQorUHJvdG9j
b2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yUGFnZUFnZW50OjpvdmVycmlkZVVzZXJB
Z2VudChjb25zdCBTdHJpbmcmIHZhbHVlKQogewotICAgIG1fdXNlckFnZW50T3ZlcnJpZGUgPSB2
YWx1ZSA/ICp2YWx1ZSA6IFN0cmluZygpOworICAgIG1fdXNlckFnZW50T3ZlcnJpZGUgPSB2YWx1
ZTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXN0YXRpYyBpbmxpbmUgT3B0aW9uYWw8Ym9vbD4g
YXNPcHRpb25hbEJvb2woY29uc3QgYm9vbCogdmFsdWUpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdP
cjx2b2lkPiBJbnNwZWN0b3JQYWdlQWdlbnQ6Om92ZXJyaWRlU2V0dGluZyhQcm90b2NvbDo6UGFn
ZTo6U2V0dGluZyBzZXR0aW5nLCBPcHRpb25hbDxib29sPiYmIHZhbHVlKQogewotICAgIGlmICgh
dmFsdWUpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgcmV0dXJuICp2YWx1ZTsK
LX0KLQotdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6Om92ZXJyaWRlU2V0dGluZyhFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgc2V0dGluZ1N0cmluZywgY29uc3QgYm9vbCog
dmFsdWUpCi17Ci0gICAgaWYgKHNldHRpbmdTdHJpbmcuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGVy
cm9yU3RyaW5nID0gInNldHRpbmdTdHJpbmcgaXMgZW1wdHkiX3M7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBhdXRvIHNldHRpbmcgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpJbnNwZWN0
b3JIZWxwZXJzOjpwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6
UGFnZTo6U2V0dGluZz4oc2V0dGluZ1N0cmluZyk7Ci0gICAgaWYgKCFzZXR0aW5nKSB7Ci0gICAg
ICAgIGVycm9yU3RyaW5nID0gbWFrZVN0cmluZygiVW5rbm93biBzZXR0aW5nU3RyaW5nOiAiX3Ms
IHNldHRpbmdTdHJpbmcpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgYXV0byYgaW5z
cGVjdGVkUGFnZVNldHRpbmdzID0gbV9pbnNwZWN0ZWRQYWdlLnNldHRpbmdzKCk7CiAKLSAgICBh
dXRvIG92ZXJyaWRlVmFsdWUgPSBhc09wdGlvbmFsQm9vbCh2YWx1ZSk7Ci0gICAgc3dpdGNoIChz
ZXR0aW5nLnZhbHVlKCkpIHsKLSAgICBjYXNlIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OlNl
dHRpbmc6OkFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZUVuYWJsZWQ6Ci0gICAgICAgIG1fY2xp
ZW50LT5zZXREZXZlbG9wZXJQcmVmZXJlbmNlT3ZlcnJpZGUoSW5zcGVjdG9yQ2xpZW50OjpEZXZl
bG9wZXJQcmVmZXJlbmNlOjpBZENsaWNrQXR0cmlidXRpb25EZWJ1Z01vZGVFbmFibGVkLCBvdmVy
cmlkZVZhbHVlKTsKLSAgICAgICAgcmV0dXJuOworICAgIHN3aXRjaCAoc2V0dGluZykgeworICAg
IGNhc2UgUHJvdG9jb2w6OlBhZ2U6OlNldHRpbmc6OkFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9k
ZUVuYWJsZWQ6CisgICAgICAgIG1fY2xpZW50LT5zZXREZXZlbG9wZXJQcmVmZXJlbmNlT3ZlcnJp
ZGUoSW5zcGVjdG9yQ2xpZW50OjpEZXZlbG9wZXJQcmVmZXJlbmNlOjpBZENsaWNrQXR0cmlidXRp
b25EZWJ1Z01vZGVFbmFibGVkLCB2YWx1ZSk7CisgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBj
YXNlIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OlNldHRpbmc6OkF1dGhvckFuZFVzZXJTdHls
ZXNFbmFibGVkOgotICAgICAgICBpbnNwZWN0ZWRQYWdlU2V0dGluZ3Muc2V0QXV0aG9yQW5kVXNl
clN0eWxlc0VuYWJsZWRJbnNwZWN0b3JPdmVycmlkZShvdmVycmlkZVZhbHVlKTsKLSAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgUHJvdG9jb2w6OlBhZ2U6OlNldHRpbmc6OkF1dGhvckFuZFVzZXJT
dHlsZXNFbmFibGVkOgorICAgICAgICBpbnNwZWN0ZWRQYWdlU2V0dGluZ3Muc2V0QXV0aG9yQW5k
VXNlclN0eWxlc0VuYWJsZWRJbnNwZWN0b3JPdmVycmlkZSh2YWx1ZSk7CisgICAgICAgIHJldHVy
biB7IH07CiAKLSAgICBjYXNlIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OlNldHRpbmc6OklD
RUNhbmRpZGF0ZUZpbHRlcmluZ0VuYWJsZWQ6Ci0gICAgICAgIGluc3BlY3RlZFBhZ2VTZXR0aW5n
cy5zZXRJQ0VDYW5kaWRhdGVGaWx0ZXJpbmdFbmFibGVkSW5zcGVjdG9yT3ZlcnJpZGUob3ZlcnJp
ZGVWYWx1ZSk7Ci0gICAgICAgIHJldHVybjsKKyAgICBjYXNlIFByb3RvY29sOjpQYWdlOjpTZXR0
aW5nOjpJQ0VDYW5kaWRhdGVGaWx0ZXJpbmdFbmFibGVkOgorICAgICAgICBpbnNwZWN0ZWRQYWdl
U2V0dGluZ3Muc2V0SUNFQ2FuZGlkYXRlRmlsdGVyaW5nRW5hYmxlZEluc3BlY3Rvck92ZXJyaWRl
KHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90
b2NvbDo6UGFnZTo6U2V0dGluZzo6SVRQRGVidWdNb2RlRW5hYmxlZDoKLSAgICAgICAgbV9jbGll
bnQtPnNldERldmVsb3BlclByZWZlcmVuY2VPdmVycmlkZShJbnNwZWN0b3JDbGllbnQ6OkRldmVs
b3BlclByZWZlcmVuY2U6OklUUERlYnVnTW9kZUVuYWJsZWQsIG92ZXJyaWRlVmFsdWUpOwotICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBQcm90b2NvbDo6UGFnZTo6U2V0dGluZzo6SVRQRGVidWdN
b2RlRW5hYmxlZDoKKyAgICAgICAgbV9jbGllbnQtPnNldERldmVsb3BlclByZWZlcmVuY2VPdmVy
cmlkZShJbnNwZWN0b3JDbGllbnQ6OkRldmVsb3BlclByZWZlcmVuY2U6OklUUERlYnVnTW9kZUVu
YWJsZWQsIHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGNhc2UgSW5zcGVjdG9y
OjpQcm90b2NvbDo6UGFnZTo6U2V0dGluZzo6SW1hZ2VzRW5hYmxlZDoKLSAgICAgICAgaW5zcGVj
dGVkUGFnZVNldHRpbmdzLnNldEltYWdlc0VuYWJsZWRJbnNwZWN0b3JPdmVycmlkZShvdmVycmlk
ZVZhbHVlKTsKLSAgICAgICAgcmV0dXJuOworICAgIGNhc2UgUHJvdG9jb2w6OlBhZ2U6OlNldHRp
bmc6OkltYWdlc0VuYWJsZWQ6CisgICAgICAgIGluc3BlY3RlZFBhZ2VTZXR0aW5ncy5zZXRJbWFn
ZXNFbmFibGVkSW5zcGVjdG9yT3ZlcnJpZGUodmFsdWUpOworICAgICAgICByZXR1cm4geyB9Owog
Ci0gICAgY2FzZSBJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpTZXR0aW5nOjpNZWRpYUNhcHR1
cmVSZXF1aXJlc1NlY3VyZUNvbm5lY3Rpb246Ci0gICAgICAgIGluc3BlY3RlZFBhZ2VTZXR0aW5n
cy5zZXRNZWRpYUNhcHR1cmVSZXF1aXJlc1NlY3VyZUNvbm5lY3Rpb25JbnNwZWN0b3JPdmVycmlk
ZShvdmVycmlkZVZhbHVlKTsKLSAgICAgICAgcmV0dXJuOworICAgIGNhc2UgUHJvdG9jb2w6OlBh
Z2U6OlNldHRpbmc6Ok1lZGlhQ2FwdHVyZVJlcXVpcmVzU2VjdXJlQ29ubmVjdGlvbjoKKyAgICAg
ICAgaW5zcGVjdGVkUGFnZVNldHRpbmdzLnNldE1lZGlhQ2FwdHVyZVJlcXVpcmVzU2VjdXJlQ29u
bmVjdGlvbkluc3BlY3Rvck92ZXJyaWRlKHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAot
ICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6U2V0dGluZzo6TW9ja0NhcHR1cmVE
ZXZpY2VzRW5hYmxlZDoKLSAgICAgICAgaW5zcGVjdGVkUGFnZVNldHRpbmdzLnNldE1vY2tDYXB0
dXJlRGV2aWNlc0VuYWJsZWRJbnNwZWN0b3JPdmVycmlkZShvdmVycmlkZVZhbHVlKTsKLSAgICAg
ICAgbV9jbGllbnQtPnNldERldmVsb3BlclByZWZlcmVuY2VPdmVycmlkZShJbnNwZWN0b3JDbGll
bnQ6OkRldmVsb3BlclByZWZlcmVuY2U6Ok1vY2tDYXB0dXJlRGV2aWNlc0VuYWJsZWQsIG92ZXJy
aWRlVmFsdWUpOwotICAgICAgICByZXR1cm47CisgICAgY2FzZSBQcm90b2NvbDo6UGFnZTo6U2V0
dGluZzo6TW9ja0NhcHR1cmVEZXZpY2VzRW5hYmxlZDoKKyAgICAgICAgaW5zcGVjdGVkUGFnZVNl
dHRpbmdzLnNldE1vY2tDYXB0dXJlRGV2aWNlc0VuYWJsZWRJbnNwZWN0b3JPdmVycmlkZSh2YWx1
ZSk7CisgICAgICAgIG1fY2xpZW50LT5zZXREZXZlbG9wZXJQcmVmZXJlbmNlT3ZlcnJpZGUoSW5z
cGVjdG9yQ2xpZW50OjpEZXZlbG9wZXJQcmVmZXJlbmNlOjpNb2NrQ2FwdHVyZURldmljZXNFbmFi
bGVkLCB2YWx1ZSk7CisgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBjYXNlIEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlBhZ2U6OlNldHRpbmc6Ok5lZWRzU2l0ZVNwZWNpZmljUXVpcmtzOgotICAgICAg
ICBpbnNwZWN0ZWRQYWdlU2V0dGluZ3Muc2V0TmVlZHNTaXRlU3BlY2lmaWNRdWlya3NJbnNwZWN0
b3JPdmVycmlkZShvdmVycmlkZVZhbHVlKTsKLSAgICAgICAgcmV0dXJuOworICAgIGNhc2UgUHJv
dG9jb2w6OlBhZ2U6OlNldHRpbmc6Ok5lZWRzU2l0ZVNwZWNpZmljUXVpcmtzOgorICAgICAgICBp
bnNwZWN0ZWRQYWdlU2V0dGluZ3Muc2V0TmVlZHNTaXRlU3BlY2lmaWNRdWlya3NJbnNwZWN0b3JP
dmVycmlkZSh2YWx1ZSk7CisgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBjYXNlIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlBhZ2U6OlNldHRpbmc6OlNjcmlwdEVuYWJsZWQ6Ci0gICAgICAgIGluc3Bl
Y3RlZFBhZ2VTZXR0aW5ncy5zZXRTY3JpcHRFbmFibGVkSW5zcGVjdG9yT3ZlcnJpZGUob3ZlcnJp
ZGVWYWx1ZSk7Ci0gICAgICAgIHJldHVybjsKKyAgICBjYXNlIFByb3RvY29sOjpQYWdlOjpTZXR0
aW5nOjpTY3JpcHRFbmFibGVkOgorICAgICAgICBpbnNwZWN0ZWRQYWdlU2V0dGluZ3Muc2V0U2Ny
aXB0RW5hYmxlZEluc3BlY3Rvck92ZXJyaWRlKHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHsgfTsK
IAotICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6U2V0dGluZzo6U2hvd0RlYnVn
Qm9yZGVyczoKLSAgICAgICAgaW5zcGVjdGVkUGFnZVNldHRpbmdzLnNldFNob3dEZWJ1Z0JvcmRl
cnNJbnNwZWN0b3JPdmVycmlkZShvdmVycmlkZVZhbHVlKTsKLSAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgUHJvdG9jb2w6OlBhZ2U6OlNldHRpbmc6OlNob3dEZWJ1Z0JvcmRlcnM6CisgICAgICAg
IGluc3BlY3RlZFBhZ2VTZXR0aW5ncy5zZXRTaG93RGVidWdCb3JkZXJzSW5zcGVjdG9yT3ZlcnJp
ZGUodmFsdWUpOworICAgICAgICByZXR1cm4geyB9OwogCi0gICAgY2FzZSBJbnNwZWN0b3I6OlBy
b3RvY29sOjpQYWdlOjpTZXR0aW5nOjpTaG93UmVwYWludENvdW50ZXI6Ci0gICAgICAgIGluc3Bl
Y3RlZFBhZ2VTZXR0aW5ncy5zZXRTaG93UmVwYWludENvdW50ZXJJbnNwZWN0b3JPdmVycmlkZShv
dmVycmlkZVZhbHVlKTsKLSAgICAgICAgcmV0dXJuOworICAgIGNhc2UgUHJvdG9jb2w6OlBhZ2U6
OlNldHRpbmc6OlNob3dSZXBhaW50Q291bnRlcjoKKyAgICAgICAgaW5zcGVjdGVkUGFnZVNldHRp
bmdzLnNldFNob3dSZXBhaW50Q291bnRlckluc3BlY3Rvck92ZXJyaWRlKHZhbHVlKTsKKyAgICAg
ICAgcmV0dXJuIHsgfTsKIAotICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6U2V0
dGluZzo6V2ViUlRDRW5jcnlwdGlvbkVuYWJsZWQ6Ci0gICAgICAgIGluc3BlY3RlZFBhZ2VTZXR0
aW5ncy5zZXRXZWJSVENFbmNyeXB0aW9uRW5hYmxlZEluc3BlY3Rvck92ZXJyaWRlKG92ZXJyaWRl
VmFsdWUpOwotICAgICAgICByZXR1cm47CisgICAgY2FzZSBQcm90b2NvbDo6UGFnZTo6U2V0dGlu
Zzo6V2ViUlRDRW5jcnlwdGlvbkVuYWJsZWQ6CisgICAgICAgIGluc3BlY3RlZFBhZ2VTZXR0aW5n
cy5zZXRXZWJSVENFbmNyeXB0aW9uRW5hYmxlZEluc3BlY3Rvck92ZXJyaWRlKHZhbHVlKTsKKyAg
ICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6
U2V0dGluZzo6V2ViU2VjdXJpdHlFbmFibGVkOgotICAgICAgICBpbnNwZWN0ZWRQYWdlU2V0dGlu
Z3Muc2V0V2ViU2VjdXJpdHlFbmFibGVkSW5zcGVjdG9yT3ZlcnJpZGUob3ZlcnJpZGVWYWx1ZSk7
Ci0gICAgICAgIHJldHVybjsKKyAgICBjYXNlIFByb3RvY29sOjpQYWdlOjpTZXR0aW5nOjpXZWJT
ZWN1cml0eUVuYWJsZWQ6CisgICAgICAgIGluc3BlY3RlZFBhZ2VTZXR0aW5ncy5zZXRXZWJTZWN1
cml0eUVuYWJsZWRJbnNwZWN0b3JPdmVycmlkZSh2YWx1ZSk7CisgICAgICAgIHJldHVybiB7IH07
CiAgICAgfQogCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIHsgfTsKIH0K
IAotc3RhdGljIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkNvb2tpZVNhbWVTaXRlUG9saWN5
IGNvb2tpZVNhbWVTaXRlUG9saWN5SlNPTihDb29raWU6OlNhbWVTaXRlUG9saWN5IHBvbGljeSkK
K3N0YXRpYyBQcm90b2NvbDo6UGFnZTo6Q29va2llU2FtZVNpdGVQb2xpY3kgY29va2llU2FtZVNp
dGVQb2xpY3lKU09OKENvb2tpZTo6U2FtZVNpdGVQb2xpY3kgcG9saWN5KQogewogICAgIHN3aXRj
aCAocG9saWN5KSB7CiAgICAgY2FzZSBDb29raWU6OlNhbWVTaXRlUG9saWN5OjpOb25lOgotICAg
ICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6Q29va2llU2FtZVNpdGVQb2xp
Y3k6Ok5vbmU7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6UGFnZTo6Q29va2llU2FtZVNpdGVQ
b2xpY3k6Ok5vbmU7CiAgICAgY2FzZSBDb29raWU6OlNhbWVTaXRlUG9saWN5OjpMYXg6Ci0gICAg
ICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpDb29raWVTYW1lU2l0ZVBvbGlj
eTo6TGF4OworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OlBhZ2U6OkNvb2tpZVNhbWVTaXRlUG9s
aWN5OjpMYXg7CiAgICAgY2FzZSBDb29raWU6OlNhbWVTaXRlUG9saWN5OjpTdHJpY3Q6Ci0gICAg
ICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpDb29raWVTYW1lU2l0ZVBvbGlj
eTo6U3RyaWN0OworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OlBhZ2U6OkNvb2tpZVNhbWVTaXRl
UG9saWN5OjpTdHJpY3Q7CiAgICAgfQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJl
dHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpDb29raWVTYW1lU2l0ZVBvbGljeTo6Tm9u
ZTsKKyAgICByZXR1cm4gUHJvdG9jb2w6OlBhZ2U6OkNvb2tpZVNhbWVTaXRlUG9saWN5OjpOb25l
OwogfQogCi1zdGF0aWMgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkNvb2tpZT4gYnVp
bGRPYmplY3RGb3JDb29raWUoY29uc3QgQ29va2llJiBjb29raWUpCitzdGF0aWMgUmVmPFByb3Rv
Y29sOjpQYWdlOjpDb29raWU+IGJ1aWxkT2JqZWN0Rm9yQ29va2llKGNvbnN0IENvb2tpZSYgY29v
a2llKQogewotICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpDb29raWU6OmNy
ZWF0ZSgpCisgICAgcmV0dXJuIFByb3RvY29sOjpQYWdlOjpDb29raWU6OmNyZWF0ZSgpCiAgICAg
ICAgIC5zZXROYW1lKGNvb2tpZS5uYW1lKQogICAgICAgICAuc2V0VmFsdWUoY29va2llLnZhbHVl
KQogICAgICAgICAuc2V0RG9tYWluKGNvb2tpZS5kb21haW4pCkBAIC01MzgsOSArNTIyLDkgQEAg
c3RhdGljIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpDb29raWU+IGJ1aWxkT2JqZWN0
Rm9yQ29va2llKGNvbnN0IENvb2tpZSYKICAgICAgICAgLnJlbGVhc2UoKTsKIH0KIAotc3RhdGlj
IFJlZjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkNvb2tpZT4+IGJ1
aWxkQXJyYXlGb3JDb29raWVzKExpc3RIYXNoU2V0PENvb2tpZT4mIGNvb2tpZXNMaXN0KQorc3Rh
dGljIFJlZjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpQYWdlOjpDb29raWU+PiBidWlsZEFycmF5
Rm9yQ29va2llcyhMaXN0SGFzaFNldDxDb29raWU+JiBjb29raWVzTGlzdCkKIHsKLSAgICBhdXRv
IGNvb2tpZXMgPSBKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkNvb2tp
ZT46OmNyZWF0ZSgpOworICAgIGF1dG8gY29va2llcyA9IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6
OlBhZ2U6OkNvb2tpZT46OmNyZWF0ZSgpOwogCiAgICAgZm9yIChjb25zdCBhdXRvJiBjb29raWUg
OiBjb29raWVzTGlzdCkKICAgICAgICAgY29va2llcy0+YWRkSXRlbShidWlsZE9iamVjdEZvckNv
b2tpZShjb29raWUpKTsKQEAgLTU2MCw3ICs1NDQsNyBAQCBzdGF0aWMgVmVjdG9yPFVSTD4gYWxs
UmVzb3VyY2VzVVJMc0ZvckZyYW1lKEZyYW1lKiBmcmFtZSkKICAgICByZXR1cm4gcmVzdWx0Owog
fQogCi12b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6Z2V0Q29va2llcyhFcnJvclN0cmluZyYsIFJl
ZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkNvb2tpZT4+JiBj
b29raWVzKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEpTT046OkFycmF5T2Y8UHJvdG9j
b2w6OlBhZ2U6OkNvb2tpZT4+PiBJbnNwZWN0b3JQYWdlQWdlbnQ6OmdldENvb2tpZXMoKQogewog
ICAgIExpc3RIYXNoU2V0PENvb2tpZT4gYWxsUmF3Q29va2llczsKIApAQCAtNTc5LDcyICs1NjMs
ODQgQEAgdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmdldENvb2tpZXMoRXJyb3JTdHJpbmcmLCBS
ZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3IKICAgICAgICAgfQogICAgIH0KIAotICAgIGNv
b2tpZXMgPSBidWlsZEFycmF5Rm9yQ29va2llcyhhbGxSYXdDb29raWVzKTsKKyAgICByZXR1cm4g
YnVpbGRBcnJheUZvckNvb2tpZXMoYWxsUmF3Q29va2llcyk7CiB9CiAKLXN0YXRpYyBPcHRpb25h
bDxDb29raWU+IHBhcnNlQ29va2llT2JqZWN0KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29u
c3QgSlNPTjo6T2JqZWN0JiBjb29raWVPYmplY3QpCitzdGF0aWMgT3B0aW9uYWw8Q29va2llPiBw
YXJzZUNvb2tpZU9iamVjdChQcm90b2NvbDo6RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBSZWY8
SlNPTjo6T2JqZWN0PiYmIGNvb2tpZU9iamVjdCkKIHsKICAgICBDb29raWUgY29va2llOwogCi0g
ICAgaWYgKCFjb29raWVPYmplY3QuZ2V0U3RyaW5nKCJuYW1lIl9zLCBjb29raWUubmFtZSkpIHsK
KyAgICBjb29raWUubmFtZSA9IGNvb2tpZU9iamVjdC0+Z2V0U3RyaW5nKFByb3RvY29sOjpQYWdl
OjpDb29raWU6Om5hbWVLZXkpOworICAgIGlmICghY29va2llLm5hbWUpIHsKICAgICAgICAgZXJy
b3JTdHJpbmcgPSAiSW52YWxpZCB2YWx1ZSBmb3Iga2V5IG5hbWUgaW4gZ2l2ZW4gY29va2llIjsK
ICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICB9CiAKLSAgICBpZiAoIWNvb2tpZU9i
amVjdC5nZXRTdHJpbmcoInZhbHVlIl9zLCBjb29raWUudmFsdWUpKSB7CisgICAgY29va2llLnZh
bHVlID0gY29va2llT2JqZWN0LT5nZXRTdHJpbmcoUHJvdG9jb2w6OlBhZ2U6OkNvb2tpZTo6dmFs
dWVLZXkpOworICAgIGlmICghY29va2llLnZhbHVlKSB7CiAgICAgICAgIGVycm9yU3RyaW5nID0g
IkludmFsaWQgdmFsdWUgZm9yIGtleSB2YWx1ZSBpbiBnaXZlbiBjb29raWUiOwogICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIH0KIAotICAgIGlmICghY29va2llT2JqZWN0LmdldFN0
cmluZygiZG9tYWluIl9zLCBjb29raWUuZG9tYWluKSkgeworICAgIGNvb2tpZS5kb21haW4gPSBj
b29raWVPYmplY3QtPmdldFN0cmluZyhQcm90b2NvbDo6UGFnZTo6Q29va2llOjpkb21haW5LZXkp
OworICAgIGlmICghY29va2llLmRvbWFpbikgewogICAgICAgICBlcnJvclN0cmluZyA9ICJJbnZh
bGlkIHZhbHVlIGZvciBrZXkgZG9tYWluIGluIGdpdmVuIGNvb2tpZSI7CiAgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CiAgICAgfQogCi0gICAgaWYgKCFjb29raWVPYmplY3QuZ2V0U3RyaW5n
KCJwYXRoIl9zLCBjb29raWUucGF0aCkpIHsKKyAgICBjb29raWUucGF0aCA9IGNvb2tpZU9iamVj
dC0+Z2V0U3RyaW5nKFByb3RvY29sOjpQYWdlOjpDb29raWU6OnBhdGhLZXkpOworICAgIGlmICgh
Y29va2llLnBhdGgpIHsKICAgICAgICAgZXJyb3JTdHJpbmcgPSAiSW52YWxpZCB2YWx1ZSBmb3Ig
a2V5IHBhdGggaW4gZ2l2ZW4gY29va2llIjsKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
ICAgICB9CiAKLSAgICBpZiAoIWNvb2tpZU9iamVjdC5nZXRCb29sZWFuKCJodHRwT25seSJfcywg
Y29va2llLmh0dHBPbmx5KSkgeworICAgIGF1dG8gaHR0cE9ubHkgPSBjb29raWVPYmplY3QtPmdl
dEJvb2xlYW4oUHJvdG9jb2w6OlBhZ2U6OkNvb2tpZTo6aHR0cE9ubHlLZXkpOworICAgIGlmICgh
aHR0cE9ubHkpIHsKICAgICAgICAgZXJyb3JTdHJpbmcgPSAiSW52YWxpZCB2YWx1ZSBmb3Iga2V5
IGh0dHBPbmx5IGluIGdpdmVuIGNvb2tpZSI7CiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CiAgICAgfQogCi0gICAgaWYgKCFjb29raWVPYmplY3QuZ2V0Qm9vbGVhbigic2VjdXJlIl9zLCBj
b29raWUuc2VjdXJlKSkgeworICAgIGNvb2tpZS5odHRwT25seSA9ICpodHRwT25seTsKKworICAg
IGF1dG8gc2VjdXJlID0gY29va2llT2JqZWN0LT5nZXRCb29sZWFuKFByb3RvY29sOjpQYWdlOjpD
b29raWU6OnNlY3VyZUtleSk7CisgICAgaWYgKCFzZWN1cmUpIHsKICAgICAgICAgZXJyb3JTdHJp
bmcgPSAiSW52YWxpZCB2YWx1ZSBmb3Iga2V5IHNlY3VyZSBpbiBnaXZlbiBjb29raWUiOwogICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIH0KIAotICAgIGJvb2wgdmFsaWRTZXNzaW9u
ID0gY29va2llT2JqZWN0LmdldEJvb2xlYW4oInNlc3Npb24iX3MsIGNvb2tpZS5zZXNzaW9uKTsK
LSAgICBjb29raWUuZXhwaXJlcyA9IGNvb2tpZU9iamVjdC5nZXROdW1iZXI8ZG91YmxlPigiZXhw
aXJlcyJfcyk7Ci0gICAgaWYgKCF2YWxpZFNlc3Npb24gJiYgIWNvb2tpZS5leHBpcmVzKSB7Cisg
ICAgY29va2llLnNlY3VyZSA9ICpzZWN1cmU7CisKKyAgICBhdXRvIHNlc3Npb24gPSBjb29raWVP
YmplY3QtPmdldEJvb2xlYW4oUHJvdG9jb2w6OlBhZ2U6OkNvb2tpZTo6c2Vzc2lvbktleSk7Cisg
ICAgY29va2llLmV4cGlyZXMgPSBjb29raWVPYmplY3QtPmdldERvdWJsZShQcm90b2NvbDo6UGFn
ZTo6Q29va2llOjpleHBpcmVzS2V5KTsKKyAgICBpZiAoIXNlc3Npb24gJiYgIWNvb2tpZS5leHBp
cmVzKSB7CiAgICAgICAgIGVycm9yU3RyaW5nID0gIkludmFsaWQgdmFsdWUgZm9yIGtleSBleHBp
cmVzIGluIGdpdmVuIGNvb2tpZSI7CiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAg
fQogCi0gICAgU3RyaW5nIHNhbWVTaXRlU3RyaW5nOwotICAgIGlmICghY29va2llT2JqZWN0Lmdl
dFN0cmluZygic2FtZVNpdGUiX3MsIHNhbWVTaXRlU3RyaW5nKSkgeworICAgIGNvb2tpZS5zZXNz
aW9uID0gKnNlc3Npb247CisKKyAgICBhdXRvIHNhbWVTaXRlU3RyaW5nID0gY29va2llT2JqZWN0
LT5nZXRTdHJpbmcoUHJvdG9jb2w6OlBhZ2U6OkNvb2tpZTo6c2FtZVNpdGVLZXkpOworICAgIGlm
ICghc2FtZVNpdGVTdHJpbmcpIHsKICAgICAgICAgZXJyb3JTdHJpbmcgPSAiSW52YWxpZCB2YWx1
ZSBmb3Iga2V5IHNhbWVTaXRlIGluIGdpdmVuIGNvb2tpZSI7CiAgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CiAgICAgfQogCi0gICAgYXV0byBzYW1lU2l0ZSA9IEluc3BlY3Rvcjo6UHJvdG9j
b2w6Okluc3BlY3RvckhlbHBlcnM6OnBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6
OlByb3RvY29sOjpQYWdlOjpDb29raWVTYW1lU2l0ZVBvbGljeT4oc2FtZVNpdGVTdHJpbmcpOwor
ICAgIGF1dG8gc2FtZVNpdGUgPSBQcm90b2NvbDo6SGVscGVyczo6cGFyc2VFbnVtVmFsdWVGcm9t
U3RyaW5nPFByb3RvY29sOjpQYWdlOjpDb29raWVTYW1lU2l0ZVBvbGljeT4oc2FtZVNpdGVTdHJp
bmcpOwogICAgIGlmICghc2FtZVNpdGUpIHsKICAgICAgICAgZXJyb3JTdHJpbmcgPSAiSW52YWxp
ZCB2YWx1ZSBmb3Iga2V5IHNhbWVTaXRlIGluIGdpdmVuIGNvb2tpZSI7CiAgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CiAgICAgfQogCiAgICAgc3dpdGNoIChzYW1lU2l0ZS52YWx1ZSgpKSB7
Ci0gICAgY2FzZSBJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpDb29raWVTYW1lU2l0ZVBvbGlj
eTo6Tm9uZToKKyAgICBjYXNlIFByb3RvY29sOjpQYWdlOjpDb29raWVTYW1lU2l0ZVBvbGljeTo6
Tm9uZToKICAgICAgICAgY29va2llLnNhbWVTaXRlID0gQ29va2llOjpTYW1lU2l0ZVBvbGljeTo6
Tm9uZTsKLQogICAgICAgICBicmVhazsKLSAgICBjYXNlIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBh
Z2U6OkNvb2tpZVNhbWVTaXRlUG9saWN5OjpMYXg6CisKKyAgICBjYXNlIFByb3RvY29sOjpQYWdl
OjpDb29raWVTYW1lU2l0ZVBvbGljeTo6TGF4OgogICAgICAgICBjb29raWUuc2FtZVNpdGUgPSBD
b29raWU6OlNhbWVTaXRlUG9saWN5OjpMYXg7Ci0KICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJ
bnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpDb29raWVTYW1lU2l0ZVBvbGljeTo6U3RyaWN0Ogor
CisgICAgY2FzZSBQcm90b2NvbDo6UGFnZTo6Q29va2llU2FtZVNpdGVQb2xpY3k6OlN0cmljdDoK
ICAgICAgICAgY29va2llLnNhbWVTaXRlID0gQ29va2llOjpTYW1lU2l0ZVBvbGljeTo6U3RyaWN0
OwogICAgICAgICBicmVhazsKICAgICB9CkBAIC02NTIsMTEgKzY0OCwxMyBAQCBzdGF0aWMgT3B0
aW9uYWw8Q29va2llPiBwYXJzZUNvb2tpZU9iamVjdChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcs
IGNvbnN0IEpTT046OgogICAgIHJldHVybiBjb29raWU7CiB9CiAKLXZvaWQgSW5zcGVjdG9yUGFn
ZUFnZW50OjpzZXRDb29raWUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBKU09OOjpP
YmplY3QmIGNvb2tpZU9iamVjdCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3Bl
Y3RvclBhZ2VBZ2VudDo6c2V0Q29va2llKFJlZjxKU09OOjpPYmplY3Q+JiYgY29va2llT2JqZWN0
KQogewotICAgIGF1dG8gY29va2llID0gcGFyc2VDb29raWVPYmplY3QoZXJyb3JTdHJpbmcsIGNv
b2tpZU9iamVjdCk7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCisg
ICAgYXV0byBjb29raWUgPSBwYXJzZUNvb2tpZU9iamVjdChlcnJvclN0cmluZywgV1RGTW92ZShj
b29raWVPYmplY3QpKTsKICAgICBpZiAoIWNvb2tpZSkKLSAgICAgICAgcmV0dXJuOworICAgICAg
ICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCiAgICAgZm9yIChhdXRvKiBm
cmFtZSA9ICZtX2luc3BlY3RlZFBhZ2UubWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1l
LT50cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsKICAgICAgICAgaWYgKGF1dG8qIGRvY3VtZW50ID0g
ZnJhbWUtPmRvY3VtZW50KCkpIHsKQEAgLTY2NCw5ICs2NjIsMTEgQEAgdm9pZCBJbnNwZWN0b3JQ
YWdlQWdlbnQ6OnNldENvb2tpZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IEpTT046
Ok9iamVjdCYKICAgICAgICAgICAgICAgICBwYWdlLT5jb29raWVKYXIoKS5zZXRSYXdDb29raWUo
KmRvY3VtZW50LCBjb29raWUudmFsdWUoKSk7CiAgICAgICAgIH0KICAgICB9CisKKyAgICByZXR1
cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6ZGVsZXRlQ29va2llKEVycm9y
U3RyaW5nJiwgY29uc3QgU3RyaW5nJiBjb29raWVOYW1lLCBjb25zdCBTdHJpbmcmIHVybCkKK1By
b3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvclBhZ2VBZ2VudDo6ZGVsZXRlQ29v
a2llKGNvbnN0IFN0cmluZyYgY29va2llTmFtZSwgY29uc3QgU3RyaW5nJiB1cmwpCiB7CiAgICAg
VVJMIHBhcnNlZFVSTCh7IH0sIHVybCk7CiAgICAgZm9yIChGcmFtZSogZnJhbWUgPSAmbV9pbnNw
ZWN0ZWRQYWdlLm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZl
cnNlTmV4dCgpKSB7CkBAIC02NzUsNDggKzY3NSw1OSBAQCB2b2lkIEluc3BlY3RvclBhZ2VBZ2Vu
dDo6ZGVsZXRlQ29va2llKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBjb29raWVOYW1lLCBj
bwogICAgICAgICAgICAgICAgIHBhZ2UtPmNvb2tpZUphcigpLmRlbGV0ZUNvb2tpZSgqZG9jdW1l
bnQsIHBhcnNlZFVSTCwgY29va2llTmFtZSk7CiAgICAgICAgIH0KICAgICB9CisKKyAgICByZXR1
cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6Z2V0UmVzb3VyY2VUcmVlKEVy
cm9yU3RyaW5nJiwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkZyYW1lUmVzb3Vy
Y2VUcmVlPiYgb2JqZWN0KQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPFByb3RvY29sOjpQ
YWdlOjpGcmFtZVJlc291cmNlVHJlZT4+IEluc3BlY3RvclBhZ2VBZ2VudDo6Z2V0UmVzb3VyY2VU
cmVlKCkKIHsKLSAgICBvYmplY3QgPSBidWlsZE9iamVjdEZvckZyYW1lVHJlZSgmbV9pbnNwZWN0
ZWRQYWdlLm1haW5GcmFtZSgpKTsKKyAgICByZXR1cm4gYnVpbGRPYmplY3RGb3JGcmFtZVRyZWUo
Jm1faW5zcGVjdGVkUGFnZS5tYWluRnJhbWUoKSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yUGFnZUFn
ZW50OjpnZXRSZXNvdXJjZUNvbnRlbnQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBT
dHJpbmcmIGZyYW1lSWQsIGNvbnN0IFN0cmluZyYgdXJsLCBTdHJpbmcqIGNvbnRlbnQsIGJvb2wq
IGJhc2U2NEVuY29kZWQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxzdGQ6OnR1cGxlPFN0cmlu
ZywgYm9vbCAvKiBiYXNlNjRFbmNvZGVkICovPj4gSW5zcGVjdG9yUGFnZUFnZW50OjpnZXRSZXNv
dXJjZUNvbnRlbnQoY29uc3QgUHJvdG9jb2w6Ok5ldHdvcms6OkZyYW1lSWQmIGZyYW1lSWQsIGNv
bnN0IFN0cmluZyYgdXJsKQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmlu
ZzsKKwogICAgIEZyYW1lKiBmcmFtZSA9IGFzc2VydEZyYW1lKGVycm9yU3RyaW5nLCBmcmFtZUlk
KTsKICAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtl
VW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKLSAgICByZXNvdXJjZUNvbnRlbnQoZXJyb3JTdHJp
bmcsIGZyYW1lLCBVUkwoeyB9LCB1cmwpLCBjb250ZW50LCBiYXNlNjRFbmNvZGVkKTsKKyAgICBT
dHJpbmcgY29udGVudDsKKyAgICBib29sIGJhc2U2NEVuY29kZWQ7CisKKyAgICByZXNvdXJjZUNv
bnRlbnQoZXJyb3JTdHJpbmcsIGZyYW1lLCBVUkwoeyB9LCB1cmwpLCAmY29udGVudCwgJmJhc2U2
NEVuY29kZWQpOworCisgICAgcmV0dXJuIHsgeyBjb250ZW50LCBiYXNlNjRFbmNvZGVkIH0gfTsK
IH0KIAotdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OnNldEJvb3RzdHJhcFNjcmlwdChFcnJvclN0
cmluZyYsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxTb3VyY2UpCitQcm90b2NvbDo6RXJyb3JTdHJp
bmdPcjx2b2lkPiBJbnNwZWN0b3JQYWdlQWdlbnQ6OnNldEJvb3RzdHJhcFNjcmlwdChjb25zdCBT
dHJpbmcmIHNvdXJjZSkKIHsKLSAgICBtX2Jvb3RzdHJhcFNjcmlwdCA9IG9wdGlvbmFsU291cmNl
ID8gKm9wdGlvbmFsU291cmNlIDogbnVsbFN0cmluZygpOworICAgIG1fYm9vdHN0cmFwU2NyaXB0
ID0gc291cmNlOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JQYWdlQWdl
bnQ6OnNlYXJjaEluUmVzb3VyY2UoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJp
bmcmIGZyYW1lSWQsIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIHF1ZXJ5LCBjb25z
dCBib29sKiBvcHRpb25hbENhc2VTZW5zaXRpdmUsIGNvbnN0IGJvb2wqIG9wdGlvbmFsSXNSZWdl
eCwgY29uc3QgU3RyaW5nKiBvcHRpb25hbFJlcXVlc3RJZCwgUmVmUHRyPEpTT046OkFycmF5T2Y8
SW5zcGVjdG9yOjpQcm90b2NvbDo6R2VuZXJpY1R5cGVzOjpTZWFyY2hNYXRjaD4+JiByZXN1bHRz
KQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6Okdl
bmVyaWNUeXBlczo6U2VhcmNoTWF0Y2g+Pj4gSW5zcGVjdG9yUGFnZUFnZW50OjpzZWFyY2hJblJl
c291cmNlKGNvbnN0IFByb3RvY29sOjpOZXR3b3JrOjpGcmFtZUlkJiBmcmFtZUlkLCBjb25zdCBT
dHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBxdWVyeSwgT3B0aW9uYWw8Ym9vbD4mJiBjYXNlU2Vu
c2l0aXZlLCBPcHRpb25hbDxib29sPiYmIGlzUmVnZXgsIGNvbnN0IFByb3RvY29sOjpOZXR3b3Jr
OjpSZXF1ZXN0SWQmIHJlcXVlc3RJZCkKIHsKLSAgICByZXN1bHRzID0gSlNPTjo6QXJyYXlPZjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpHZW5lcmljVHlwZXM6OlNlYXJjaE1hdGNoPjo6Y3JlYXRlKCk7
CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOwogCi0gICAgYm9vbCBpc1Jl
Z2V4ID0gb3B0aW9uYWxJc1JlZ2V4ID8gKm9wdGlvbmFsSXNSZWdleCA6IGZhbHNlOwotICAgIGJv
b2wgY2FzZVNlbnNpdGl2ZSA9IG9wdGlvbmFsQ2FzZVNlbnNpdGl2ZSA/ICpvcHRpb25hbENhc2VT
ZW5zaXRpdmUgOiBmYWxzZTsKLQotICAgIGlmIChvcHRpb25hbFJlcXVlc3RJZCkgeworICAgIGlm
ICghIXJlcXVlc3RJZCkgewogICAgICAgICBpZiAoYXV0byogbmV0d29ya0FnZW50ID0gbV9pbnN0
cnVtZW50aW5nQWdlbnRzLmVuYWJsZWROZXR3b3JrQWdlbnQoKSkgewotICAgICAgICAgICAgbmV0
d29ya0FnZW50LT5zZWFyY2hJblJlcXVlc3QoZXJyb3JTdHJpbmcsICpvcHRpb25hbFJlcXVlc3RJ
ZCwgcXVlcnksIGNhc2VTZW5zaXRpdmUsIGlzUmVnZXgsIHJlc3VsdHMpOwotICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkdlbmVy
aWNUeXBlczo6U2VhcmNoTWF0Y2g+PiByZXN1bHQ7CisgICAgICAgICAgICBuZXR3b3JrQWdlbnQt
PnNlYXJjaEluUmVxdWVzdChlcnJvclN0cmluZywgcmVxdWVzdElkLCBxdWVyeSwgY2FzZVNlbnNp
dGl2ZSAmJiAqY2FzZVNlbnNpdGl2ZSwgaXNSZWdleCAmJiAqaXNSZWdleCwgcmVzdWx0KTsKKyAg
ICAgICAgICAgIGlmICghcmVzdWx0KQorICAgICAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBl
Y3RlZChlcnJvclN0cmluZyk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2VOb25O
dWxsKCk7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBGcmFtZSogZnJhbWUgPSBhc3NlcnRGcmFt
ZShlcnJvclN0cmluZywgZnJhbWVJZCk7CiAgICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJu
OworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCiAgICAgRG9j
dW1lbnRMb2FkZXIqIGxvYWRlciA9IGFzc2VydERvY3VtZW50TG9hZGVyKGVycm9yU3RyaW5nLCBm
cmFtZSk7CiAgICAgaWYgKCFsb2FkZXIpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJu
IG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgIFVSTCBrdXJsKHsgfSwgdXJsKTsK
IApAQCAtNzM1LDI5ICs3NDYsMjYgQEAgdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OnNlYXJjaElu
UmVzb3VyY2UoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcKICAgICB9CiAK
ICAgICBpZiAoIXN1Y2Nlc3MpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIEpTT046
OkFycmF5T2Y8UHJvdG9jb2w6OkdlbmVyaWNUeXBlczo6U2VhcmNoTWF0Y2g+OjpjcmVhdGUoKTsK
IAotICAgIHJlc3VsdHMgPSBDb250ZW50U2VhcmNoVXRpbGl0aWVzOjpzZWFyY2hJblRleHRCeUxp
bmVzKGNvbnRlbnQsIHF1ZXJ5LCBjYXNlU2Vuc2l0aXZlLCBpc1JlZ2V4KTsKKyAgICByZXR1cm4g
Q29udGVudFNlYXJjaFV0aWxpdGllczo6c2VhcmNoSW5UZXh0QnlMaW5lcyhjb250ZW50LCBxdWVy
eSwgY2FzZVNlbnNpdGl2ZSAmJiAqY2FzZVNlbnNpdGl2ZSwgaXNSZWdleCAmJiAqaXNSZWdleCk7
CiB9CiAKLXN0YXRpYyBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6U2VhcmNoUmVzdWx0
PiBidWlsZE9iamVjdEZvclNlYXJjaFJlc3VsdChjb25zdCBTdHJpbmcmIGZyYW1lSWQsIGNvbnN0
IFN0cmluZyYgdXJsLCBpbnQgbWF0Y2hlc0NvdW50KQorc3RhdGljIFJlZjxQcm90b2NvbDo6UGFn
ZTo6U2VhcmNoUmVzdWx0PiBidWlsZE9iamVjdEZvclNlYXJjaFJlc3VsdChjb25zdCBQcm90b2Nv
bDo6TmV0d29yazo6RnJhbWVJZCYgZnJhbWVJZCwgY29uc3QgU3RyaW5nJiB1cmwsIGludCBtYXRj
aGVzQ291bnQpCiB7Ci0gICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OlNlYXJj
aFJlc3VsdDo6Y3JlYXRlKCkKKyAgICByZXR1cm4gUHJvdG9jb2w6OlBhZ2U6OlNlYXJjaFJlc3Vs
dDo6Y3JlYXRlKCkKICAgICAgICAgLnNldFVybCh1cmwpCiAgICAgICAgIC5zZXRGcmFtZUlkKGZy
YW1lSWQpCiAgICAgICAgIC5zZXRNYXRjaGVzQ291bnQobWF0Y2hlc0NvdW50KQogICAgICAgICAu
cmVsZWFzZSgpOwogfQogCi12b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6c2VhcmNoSW5SZXNvdXJj
ZXMoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IGJvb2wqIG9wdGlvbmFs
Q2FzZVNlbnNpdGl2ZSwgY29uc3QgYm9vbCogb3B0aW9uYWxJc1JlZ2V4LCBSZWZQdHI8SlNPTjo6
QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpTZWFyY2hSZXN1bHQ+PiYgcmVzdWx0
KQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlBh
Z2U6OlNlYXJjaFJlc3VsdD4+PiBJbnNwZWN0b3JQYWdlQWdlbnQ6OnNlYXJjaEluUmVzb3VyY2Vz
KGNvbnN0IFN0cmluZyYgdGV4dCwgT3B0aW9uYWw8Ym9vbD4mJiBjYXNlU2Vuc2l0aXZlLCBPcHRp
b25hbDxib29sPiYmIGlzUmVnZXgpCiB7Ci0gICAgcmVzdWx0ID0gSlNPTjo6QXJyYXlPZjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpQYWdlOjpTZWFyY2hSZXN1bHQ+OjpjcmVhdGUoKTsKKyAgICBhdXRv
IHJlc3VsdCA9IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlBhZ2U6OlNlYXJjaFJlc3VsdD46OmNy
ZWF0ZSgpOwogCi0gICAgYm9vbCBjYXNlU2Vuc2l0aXZlID0gb3B0aW9uYWxDYXNlU2Vuc2l0aXZl
ID8gKm9wdGlvbmFsQ2FzZVNlbnNpdGl2ZSA6IGZhbHNlOwotICAgIGJvb2wgaXNSZWdleCA9IG9w
dGlvbmFsSXNSZWdleCA/ICpvcHRpb25hbElzUmVnZXggOiBmYWxzZTsKLQotICAgIGF1dG8gc2Vh
cmNoU3RyaW5nVHlwZSA9IGlzUmVnZXggPyBDb250ZW50U2VhcmNoVXRpbGl0aWVzOjpTZWFyY2hT
dHJpbmdUeXBlOjpSZWdleCA6IENvbnRlbnRTZWFyY2hVdGlsaXRpZXM6OlNlYXJjaFN0cmluZ1R5
cGU6OkNvbnRhaW5zU3RyaW5nOwotICAgIGF1dG8gcmVnZXggPSBDb250ZW50U2VhcmNoVXRpbGl0
aWVzOjpjcmVhdGVSZWd1bGFyRXhwcmVzc2lvbkZvclNlYXJjaFN0cmluZyh0ZXh0LCBjYXNlU2Vu
c2l0aXZlLCBzZWFyY2hTdHJpbmdUeXBlKTsKKyAgICBhdXRvIHNlYXJjaFN0cmluZ1R5cGUgPSAo
aXNSZWdleCAmJiAqaXNSZWdleCkgPyBDb250ZW50U2VhcmNoVXRpbGl0aWVzOjpTZWFyY2hTdHJp
bmdUeXBlOjpSZWdleCA6IENvbnRlbnRTZWFyY2hVdGlsaXRpZXM6OlNlYXJjaFN0cmluZ1R5cGU6
OkNvbnRhaW5zU3RyaW5nOworICAgIGF1dG8gcmVnZXggPSBDb250ZW50U2VhcmNoVXRpbGl0aWVz
OjpjcmVhdGVSZWd1bGFyRXhwcmVzc2lvbkZvclNlYXJjaFN0cmluZyh0ZXh0LCBjYXNlU2Vuc2l0
aXZlICYmICpjYXNlU2Vuc2l0aXZlLCBzZWFyY2hTdHJpbmdUeXBlKTsKIAogICAgIGZvciAoRnJh
bWUqIGZyYW1lID0gJm1faW5zcGVjdGVkUGFnZS5tYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0g
ZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoKSkgewogICAgICAgICBmb3IgKGF1dG8qIGNhY2hl
ZFJlc291cmNlIDogY2FjaGVkUmVzb3VyY2VzRm9yRnJhbWUoZnJhbWUpKSB7CkBAIC03NzEsMjQg
Kzc3OSwzMCBAQCB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6c2VhcmNoSW5SZXNvdXJjZXMoRXJy
b3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHRleHQsIGNvbgogCiAgICAgaWYgKGF1dG8qIG5ldHdv
cmtBZ2VudCA9IG1faW5zdHJ1bWVudGluZ0FnZW50cy5lbmFibGVkTmV0d29ya0FnZW50KCkpCiAg
ICAgICAgIG5ldHdvcmtBZ2VudC0+c2VhcmNoT3RoZXJSZXF1ZXN0cyhyZWdleCwgcmVzdWx0KTsK
KworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKICNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKLXZv
aWQgSW5zcGVjdG9yUGFnZUFnZW50OjpzZXRTaG93UnVsZXJzKEVycm9yU3RyaW5nJiwgYm9vbCBz
aG93UnVsZXJzKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yUGFnZUFn
ZW50OjpzZXRTaG93UnVsZXJzKGJvb2wgc2hvd1J1bGVycykKIHsKICAgICBtX292ZXJsYXktPnNl
dFNob3dSdWxlcnMoc2hvd1J1bGVycyk7CisKKyAgICByZXR1cm4geyB9OwogfQogI2VuZGlmCiAK
LXZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpzZXRTaG93UGFpbnRSZWN0cyhFcnJvclN0cmluZyYs
IGJvb2wgc2hvdykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvclBhZ2VB
Z2VudDo6c2V0U2hvd1BhaW50UmVjdHMoYm9vbCBzaG93KQogewogICAgIG1fc2hvd1BhaW50UmVj
dHMgPSBzaG93OwogICAgIG1fY2xpZW50LT5zZXRTaG93UGFpbnRSZWN0cyhzaG93KTsKIAogICAg
IGlmIChtX2NsaWVudC0+b3ZlcnJpZGVzU2hvd1BhaW50UmVjdHMoKSkKLSAgICAgICAgcmV0dXJu
OworICAgICAgICByZXR1cm4geyB9OwogCiAgICAgbV9vdmVybGF5LT5zZXRTaG93UGFpbnRSZWN0
cyhzaG93KTsKKworICAgIHJldHVybiB7IH07CiB9CiAKIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50
Ojpkb21Db250ZW50RXZlbnRGaXJlZCgpCkBAIC04MTYsNyArODMwLDcgQEAgdm9pZCBJbnNwZWN0
b3JQYWdlQWdlbnQ6OmZyYW1lRGV0YWNoZWQoRnJhbWUmIGZyYW1lKQogICAgIG1faWRlbnRpZmll
clRvRnJhbWUucmVtb3ZlKGlkZW50aWZpZXIpOwogfQogCi1GcmFtZSogSW5zcGVjdG9yUGFnZUFn
ZW50OjpmcmFtZUZvcklkKGNvbnN0IFN0cmluZyYgZnJhbWVJZCkKK0ZyYW1lKiBJbnNwZWN0b3JQ
YWdlQWdlbnQ6OmZyYW1lRm9ySWQoY29uc3QgUHJvdG9jb2w6Ok5ldHdvcms6OkZyYW1lSWQmIGZy
YW1lSWQpCiB7CiAgICAgcmV0dXJuIGZyYW1lSWQuaXNFbXB0eSgpID8gbnVsbHB0ciA6IG1faWRl
bnRpZmllclRvRnJhbWUuZ2V0KGZyYW1lSWQpOwogfQpAQCAtODQxLDcgKzg1NSw3IEBAIFN0cmlu
ZyBJbnNwZWN0b3JQYWdlQWdlbnQ6OmxvYWRlcklkKERvY3VtZW50TG9hZGVyKiBsb2FkZXIpCiAg
ICAgfSkuaXRlcmF0b3ItPnZhbHVlOwogfQogCi1GcmFtZSogSW5zcGVjdG9yUGFnZUFnZW50Ojph
c3NlcnRGcmFtZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgZnJhbWVJ
ZCkKK0ZyYW1lKiBJbnNwZWN0b3JQYWdlQWdlbnQ6OmFzc2VydEZyYW1lKFByb3RvY29sOjpFcnJv
clN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFByb3RvY29sOjpOZXR3b3JrOjpGcmFtZUlkJiBm
cmFtZUlkKQogewogICAgIEZyYW1lKiBmcmFtZSA9IGZyYW1lRm9ySWQoZnJhbWVJZCk7CiAgICAg
aWYgKCFmcmFtZSkKQEAgLTg3Nyw3ICs4OTEsNyBAQCB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6
ZnJhbWVDbGVhcmVkU2NoZWR1bGVkTmF2aWdhdGlvbihGcmFtZSYgZnJhbWUpCiAjaWYgRU5BQkxF
KERBUktfTU9ERV9DU1MpIHx8IEhBVkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCiB2b2lkIEluc3Bl
Y3RvclBhZ2VBZ2VudDo6ZGVmYXVsdEFwcGVhcmFuY2VEaWRDaGFuZ2UoYm9vbCB1c2VEYXJrQXBw
ZWFyYW5jZSkKIHsKLSAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+ZGVmYXVsdEFwcGVhcmFuY2VE
aWRDaGFuZ2UodXNlRGFya0FwcGVhcmFuY2UgPyBJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpB
cHBlYXJhbmNlOjpEYXJrIDogSW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6QXBwZWFyYW5jZTo6
TGlnaHQpOworICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5kZWZhdWx0QXBwZWFyYW5jZURpZENo
YW5nZSh1c2VEYXJrQXBwZWFyYW5jZSA/IFByb3RvY29sOjpQYWdlOjpBcHBlYXJhbmNlOjpEYXJr
IDogUHJvdG9jb2w6OlBhZ2U6OkFwcGVhcmFuY2U6OkxpZ2h0KTsKIH0KICNlbmRpZgogCkBAIC05
MzMsMTEgKzk0NywxMSBAQCB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6ZGlkUmVjYWxjdWxhdGVT
dHlsZSgpCiAgICAgbV9vdmVybGF5LT51cGRhdGUoKTsKIH0KIAotUmVmPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OlBhZ2U6OkZyYW1lPiBJbnNwZWN0b3JQYWdlQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yRnJh
bWUoRnJhbWUqIGZyYW1lKQorUmVmPFByb3RvY29sOjpQYWdlOjpGcmFtZT4gSW5zcGVjdG9yUGFn
ZUFnZW50OjpidWlsZE9iamVjdEZvckZyYW1lKEZyYW1lKiBmcmFtZSkKIHsKICAgICBBU1NFUlRf
QVJHKGZyYW1lLCBmcmFtZSk7CiAKLSAgICBhdXRvIGZyYW1lT2JqZWN0ID0gSW5zcGVjdG9yOjpQ
cm90b2NvbDo6UGFnZTo6RnJhbWU6OmNyZWF0ZSgpCisgICAgYXV0byBmcmFtZU9iamVjdCA9IFBy
b3RvY29sOjpQYWdlOjpGcmFtZTo6Y3JlYXRlKCkKICAgICAgICAgLnNldElkKGZyYW1lSWQoZnJh
bWUpKQogICAgICAgICAuc2V0TG9hZGVySWQobG9hZGVySWQoZnJhbWUtPmxvYWRlcigpLmRvY3Vt
ZW50TG9hZGVyKCkpKQogICAgICAgICAuc2V0VXJsKGZyYW1lLT5kb2N1bWVudCgpLT51cmwoKS5z
dHJpbmcoKSkKQEAgLTk1NiwxOSArOTcwLDE5IEBAIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpQ
YWdlOjpGcmFtZT4gSW5zcGVjdG9yUGFnZUFnZW50OjpidWlsZE9iamVjdEZvckZyYW1lKEZyCiAg
ICAgcmV0dXJuIGZyYW1lT2JqZWN0OwogfQogCi1SZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFn
ZTo6RnJhbWVSZXNvdXJjZVRyZWU+IEluc3BlY3RvclBhZ2VBZ2VudDo6YnVpbGRPYmplY3RGb3JG
cmFtZVRyZWUoRnJhbWUqIGZyYW1lKQorUmVmPFByb3RvY29sOjpQYWdlOjpGcmFtZVJlc291cmNl
VHJlZT4gSW5zcGVjdG9yUGFnZUFnZW50OjpidWlsZE9iamVjdEZvckZyYW1lVHJlZShGcmFtZSog
ZnJhbWUpCiB7CiAgICAgQVNTRVJUX0FSRyhmcmFtZSwgZnJhbWUpOwogCi0gICAgUmVmPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkZyYW1lPiBmcmFtZU9iamVjdCA9IGJ1aWxkT2JqZWN0Rm9y
RnJhbWUoZnJhbWUpOwotICAgIGF1dG8gc3VicmVzb3VyY2VzID0gSlNPTjo6QXJyYXlPZjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpQYWdlOjpGcmFtZVJlc291cmNlPjo6Y3JlYXRlKCk7Ci0gICAgYXV0
byByZXN1bHQgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpGcmFtZVJlc291cmNlVHJlZTo6
Y3JlYXRlKCkKKyAgICBSZWY8UHJvdG9jb2w6OlBhZ2U6OkZyYW1lPiBmcmFtZU9iamVjdCA9IGJ1
aWxkT2JqZWN0Rm9yRnJhbWUoZnJhbWUpOworICAgIGF1dG8gc3VicmVzb3VyY2VzID0gSlNPTjo6
QXJyYXlPZjxQcm90b2NvbDo6UGFnZTo6RnJhbWVSZXNvdXJjZT46OmNyZWF0ZSgpOworICAgIGF1
dG8gcmVzdWx0ID0gUHJvdG9jb2w6OlBhZ2U6OkZyYW1lUmVzb3VyY2VUcmVlOjpjcmVhdGUoKQog
ICAgICAgICAuc2V0RnJhbWUoV1RGTW92ZShmcmFtZU9iamVjdCkpCiAgICAgICAgIC5zZXRSZXNv
dXJjZXMoc3VicmVzb3VyY2VzLmNvcHlSZWYoKSkKICAgICAgICAgLnJlbGVhc2UoKTsKIAogICAg
IGZvciAoYXV0byogY2FjaGVkUmVzb3VyY2UgOiBjYWNoZWRSZXNvdXJjZXNGb3JGcmFtZShmcmFt
ZSkpIHsKLSAgICAgICAgYXV0byByZXNvdXJjZU9iamVjdCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlBhZ2U6OkZyYW1lUmVzb3VyY2U6OmNyZWF0ZSgpCisgICAgICAgIGF1dG8gcmVzb3VyY2VPYmpl
Y3QgPSBQcm90b2NvbDo6UGFnZTo6RnJhbWVSZXNvdXJjZTo6Y3JlYXRlKCkKICAgICAgICAgICAg
IC5zZXRVcmwoY2FjaGVkUmVzb3VyY2UtPnVybCgpLnN0cmluZygpKQogICAgICAgICAgICAgLnNl
dFR5cGUoY2FjaGVkUmVzb3VyY2VUeXBlSlNPTigqY2FjaGVkUmVzb3VyY2UpKQogICAgICAgICAg
ICAgLnNldE1pbWVUeXBlKGNhY2hlZFJlc291cmNlLT5yZXNwb25zZSgpLm1pbWVUeXBlKCkpCkBA
IC05ODYsMjEgKzEwMDAsMjEgQEAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkZyYW1l
UmVzb3VyY2VUcmVlPiBJbnNwZWN0b3JQYWdlQWdlbnQ6OmJ1aWxkT2JqZWMKICAgICAgICAgc3Vi
cmVzb3VyY2VzLT5hZGRJdGVtKFdURk1vdmUocmVzb3VyY2VPYmplY3QpKTsKICAgICB9CiAKLSAg
ICBSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpGcmFtZVJl
c291cmNlVHJlZT4+IGNoaWxkcmVuQXJyYXk7CisgICAgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJv
dG9jb2w6OlBhZ2U6OkZyYW1lUmVzb3VyY2VUcmVlPj4gY2hpbGRyZW5BcnJheTsKICAgICBmb3Ig
KEZyYW1lKiBjaGlsZCA9IGZyYW1lLT50cmVlKCkuZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQg
PSBjaGlsZC0+dHJlZSgpLm5leHRTaWJsaW5nKCkpIHsKICAgICAgICAgaWYgKCFjaGlsZHJlbkFy
cmF5KSB7Ci0gICAgICAgICAgICBjaGlsZHJlbkFycmF5ID0gSlNPTjo6QXJyYXlPZjxJbnNwZWN0
b3I6OlByb3RvY29sOjpQYWdlOjpGcmFtZVJlc291cmNlVHJlZT46OmNyZWF0ZSgpOwotICAgICAg
ICAgICAgcmVzdWx0LT5zZXRDaGlsZEZyYW1lcyhjaGlsZHJlbkFycmF5KTsKKyAgICAgICAgICAg
IGNoaWxkcmVuQXJyYXkgPSBKU09OOjpBcnJheU9mPFByb3RvY29sOjpQYWdlOjpGcmFtZVJlc291
cmNlVHJlZT46OmNyZWF0ZSgpOworICAgICAgICAgICAgcmVzdWx0LT5zZXRDaGlsZEZyYW1lcygq
Y2hpbGRyZW5BcnJheSk7CiAgICAgICAgIH0KICAgICAgICAgY2hpbGRyZW5BcnJheS0+YWRkSXRl
bShidWlsZE9iamVjdEZvckZyYW1lVHJlZShjaGlsZCkpOwogICAgIH0KICAgICByZXR1cm4gcmVz
dWx0OwogfQogCi12b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6c2V0RW11bGF0ZWRNZWRpYShFcnJv
clN0cmluZyYsIGNvbnN0IFN0cmluZyYgbWVkaWEpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2
b2lkPiBJbnNwZWN0b3JQYWdlQWdlbnQ6OnNldEVtdWxhdGVkTWVkaWEoY29uc3QgU3RyaW5nJiBt
ZWRpYSkKIHsKICAgICBpZiAobWVkaWEgPT0gbV9lbXVsYXRlZE1lZGlhKQotICAgICAgICByZXR1
cm47CisgICAgICAgIHJldHVybiB7IH07CiAKICAgICBtX2VtdWxhdGVkTWVkaWEgPSBtZWRpYTsK
IApAQCAtMTAwOSwyMSArMTAyMywzNCBAQCB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6c2V0RW11
bGF0ZWRNZWRpYShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgbWVkaWEpCiAKICAgICBhdXRv
IGRvY3VtZW50ID0gbWFrZVJlZlB0cihtX2luc3BlY3RlZFBhZ2UubWFpbkZyYW1lKCkuZG9jdW1l
bnQoKSk7CiAgICAgaWYgKCFkb2N1bWVudCkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1
cm4geyB9OwogCiAgICAgZG9jdW1lbnQtPnVwZGF0ZUxheW91dCgpOwogICAgIGRvY3VtZW50LT5l
dmFsdWF0ZU1lZGlhUXVlcmllc0FuZFJlcG9ydENoYW5nZXMoKTsKKworICAgIHJldHVybiB7IH07
CiB9CiAKICNpZiBFTkFCTEUoREFSS19NT0RFX0NTUykgfHwgSEFWRShPU19EQVJLX01PREVfU1VQ
UE9SVCkKLXZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpzZXRGb3JjZWRBcHBlYXJhbmNlKEVycm9y
U3RyaW5nJiwgY29uc3QgU3RyaW5nJiBhcHBlYXJhbmNlKQorUHJvdG9jb2w6OkVycm9yU3RyaW5n
T3I8dm9pZD4gSW5zcGVjdG9yUGFnZUFnZW50OjpzZXRGb3JjZWRBcHBlYXJhbmNlKE9wdGlvbmFs
PFByb3RvY29sOjpQYWdlOjpBcHBlYXJhbmNlPiYmIGFwcGVhcmFuY2UpCiB7Ci0gICAgaWYgKGFw
cGVhcmFuY2UgPT0gIkxpZ2h0Il9zKQotICAgICAgICBtX2luc3BlY3RlZFBhZ2Uuc2V0VXNlRGFy
a0FwcGVhcmFuY2VPdmVycmlkZShmYWxzZSk7Ci0gICAgZWxzZSBpZiAoYXBwZWFyYW5jZSA9PSAi
RGFyayJfcykKLSAgICAgICAgbV9pbnNwZWN0ZWRQYWdlLnNldFVzZURhcmtBcHBlYXJhbmNlT3Zl
cnJpZGUodHJ1ZSk7Ci0gICAgZWxzZQorICAgIGlmICghYXBwZWFyYW5jZSkgewogICAgICAgICBt
X2luc3BlY3RlZFBhZ2Uuc2V0VXNlRGFya0FwcGVhcmFuY2VPdmVycmlkZShXVEY6Om51bGxvcHQp
OworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIHN3aXRjaCAoKmFwcGVhcmFuY2Up
IHsKKyAgICBjYXNlIFByb3RvY29sOjpQYWdlOjpBcHBlYXJhbmNlOjpMaWdodDoKKyAgICAgICAg
bV9pbnNwZWN0ZWRQYWdlLnNldFVzZURhcmtBcHBlYXJhbmNlT3ZlcnJpZGUoZmFsc2UpOworICAg
ICAgICByZXR1cm4geyB9OworCisgICAgY2FzZSBQcm90b2NvbDo6UGFnZTo6QXBwZWFyYW5jZTo6
RGFyazoKKyAgICAgICAgbV9pbnNwZWN0ZWRQYWdlLnNldFVzZURhcmtBcHBlYXJhbmNlT3ZlcnJp
ZGUodHJ1ZSk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgcmV0dXJuIHsgfTsKIH0KICNlbmRpZgogCkBAIC0xMDM5LDUxICsxMDY2
LDQ3IEBAIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjphcHBseUVtdWxhdGVkTWVkaWEoU3RyaW5n
JiBtZWRpYSkKICAgICAgICAgbWVkaWEgPSBtX2VtdWxhdGVkTWVkaWE7CiB9CiAKLXZvaWQgSW5z
cGVjdG9yUGFnZUFnZW50OjpzbmFwc2hvdE5vZGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBp
bnQgbm9kZUlkLCBTdHJpbmcqIG91dERhdGFVUkwpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxT
dHJpbmc+IEluc3BlY3RvclBhZ2VBZ2VudDo6c25hcHNob3ROb2RlKFByb3RvY29sOjpET006Ok5v
ZGVJZCBub2RlSWQpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOwor
CiAgICAgSW5zcGVjdG9yRE9NQWdlbnQqIGRvbUFnZW50ID0gbV9pbnN0cnVtZW50aW5nQWdlbnRz
LnBlcnNpc3RlbnRET01BZ2VudCgpOwogICAgIEFTU0VSVChkb21BZ2VudCk7CiAgICAgTm9kZSog
bm9kZSA9IGRvbUFnZW50LT5hc3NlcnROb2RlKGVycm9yU3RyaW5nLCBub2RlSWQpOwogICAgIGlm
ICghbm9kZSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQo
ZXJyb3JTdHJpbmcpOwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBzbmFwc2hv
dCA9IFdlYkNvcmU6OnNuYXBzaG90Tm9kZShtX2luc3BlY3RlZFBhZ2UubWFpbkZyYW1lKCksICpu
b2RlKTsKLSAgICBpZiAoIXNuYXBzaG90KSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIkNvdWxk
IG5vdCBjYXB0dXJlIHNuYXBzaG90Il9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlm
ICghc25hcHNob3QpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiQ291bGQgbm90IGNh
cHR1cmUgc25hcHNob3QiX3MpOwogCi0gICAgKm91dERhdGFVUkwgPSBzbmFwc2hvdC0+dG9EYXRh
VVJMKCJpbWFnZS9wbmciX3MsIFdURjo6bnVsbG9wdCwgUHJlc2VydmVSZXNvbHV0aW9uOjpZZXMp
OworICAgIHJldHVybiBzbmFwc2hvdC0+dG9EYXRhVVJMKCJpbWFnZS9wbmciX3MsIFdURjo6bnVs
bG9wdCwgUHJlc2VydmVSZXNvbHV0aW9uOjpZZXMpOwogfQogCi12b2lkIEluc3BlY3RvclBhZ2VB
Z2VudDo6c25hcHNob3RSZWN0KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IHgsIGludCB5
LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGNvbnN0IFN0cmluZyYgY29vcmRpbmF0ZVN5c3RlbSwg
U3RyaW5nKiBvdXREYXRhVVJMKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8U3RyaW5nPiBJbnNw
ZWN0b3JQYWdlQWdlbnQ6OnNuYXBzaG90UmVjdChpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50
IGhlaWdodCwgUHJvdG9jb2w6OlBhZ2U6OkNvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3Rl
bSkKIHsKICAgICBTbmFwc2hvdE9wdGlvbnMgb3B0aW9ucyA9IFNuYXBzaG90T3B0aW9uc05vbmU7
Ci0gICAgaWYgKGNvb3JkaW5hdGVTeXN0ZW0gPT0gIlZpZXdwb3J0IikKKyAgICBpZiAoY29vcmRp
bmF0ZVN5c3RlbSA9PSBQcm90b2NvbDo6UGFnZTo6Q29vcmRpbmF0ZVN5c3RlbTo6Vmlld3BvcnQp
CiAgICAgICAgIG9wdGlvbnMgfD0gU25hcHNob3RPcHRpb25zSW5WaWV3Q29vcmRpbmF0ZXM7CiAK
ICAgICBJbnRSZWN0IHJlY3RhbmdsZSh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKICAgICBzdGQ6OnVu
aXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IHNuYXBzaG90ID0gc25hcHNob3RGcmFtZVJlY3QobV9pbnNw
ZWN0ZWRQYWdlLm1haW5GcmFtZSgpLCByZWN0YW5nbGUsIG9wdGlvbnMpOwogCi0gICAgaWYgKCFz
bmFwc2hvdCkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJDb3VsZCBub3QgY2FwdHVyZSBzbmFw
c2hvdCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoIXNuYXBzaG90KQorICAg
ICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkNvdWxkIG5vdCBjYXB0dXJlIHNuYXBzaG90Il9z
KTsKIAotICAgICpvdXREYXRhVVJMID0gc25hcHNob3QtPnRvRGF0YVVSTCgiaW1hZ2UvcG5nIl9z
LCBXVEY6Om51bGxvcHQsIFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKTsKKyAgICByZXR1cm4gc25h
cHNob3QtPnRvRGF0YVVSTCgiaW1hZ2UvcG5nIl9zLCBXVEY6Om51bGxvcHQsIFByZXNlcnZlUmVz
b2x1dGlvbjo6WWVzKTsKIH0KIAogI2lmIEVOQUJMRShXRUJfQVJDSElWRSkgJiYgVVNFKENGKQot
dm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmFyY2hpdmUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5n
LCBTdHJpbmcqIGRhdGEpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxTdHJpbmc+IEluc3BlY3Rv
clBhZ2VBZ2VudDo6YXJjaGl2ZSgpCiB7CiAgICAgYXV0byBhcmNoaXZlID0gTGVnYWN5V2ViQXJj
aGl2ZTo6Y3JlYXRlKG1faW5zcGVjdGVkUGFnZS5tYWluRnJhbWUoKSk7Ci0gICAgaWYgKCFhcmNo
aXZlKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIkNvdWxkIG5vdCBjcmVhdGUgd2ViIGFyY2hp
dmUgZm9yIG1haW4gZnJhbWUiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKCFh
cmNoaXZlKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkNvdWxkIG5vdCBjcmVhdGUg
d2ViIGFyY2hpdmUgZm9yIG1haW4gZnJhbWUiX3MpOwogCiAgICAgUmV0YWluUHRyPENGRGF0YVJl
Zj4gYnVmZmVyID0gYXJjaGl2ZS0+cmF3RGF0YVJlcHJlc2VudGF0aW9uKCk7Ci0gICAgKmRhdGEg
PSBiYXNlNjRFbmNvZGUoQ0ZEYXRhR2V0Qnl0ZVB0cihidWZmZXIuZ2V0KCkpLCBDRkRhdGFHZXRM
ZW5ndGgoYnVmZmVyLmdldCgpKSk7CisgICAgcmV0dXJuIGJhc2U2NEVuY29kZShDRkRhdGFHZXRC
eXRlUHRyKGJ1ZmZlci5nZXQoKSksIENGRGF0YUdldExlbmd0aChidWZmZXIuZ2V0KCkpKTsKIH0K
ICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0lu
c3BlY3RvclBhZ2VBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNw
ZWN0b3JQYWdlQWdlbnQuaAppbmRleCAzYmNkMDQ4N2NmYzg3NjZiYWEwMWM3ODA0MTczYTE1NzQ3
YjQ3YjJkLi5kMmIwNjVlMTM2NTFmYWZlNzQ3MzI1ZjAyZTc3MDFmYmYxZThlNDVlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclBhZ2VBZ2VudC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUGFnZUFnZW50
LmgKQEAgLTUxLDE0ICs1MSwxMiBAQCBjbGFzcyBQYWdlOwogY2xhc3MgUmVuZGVyT2JqZWN0Owog
Y2xhc3MgU2hhcmVkQnVmZmVyOwogCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQogY2xh
c3MgSW5zcGVjdG9yUGFnZUFnZW50IGZpbmFsIDogcHVibGljIEluc3BlY3RvckFnZW50QmFzZSwg
cHVibGljIEluc3BlY3Rvcjo6UGFnZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7CiAgICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoSW5zcGVjdG9yUGFnZUFnZW50KTsKICAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBJbnNwZWN0b3JQYWdlQWdlbnQoUGFnZUFnZW50Q29u
dGV4dCYsIEluc3BlY3RvckNsaWVudCosIEluc3BlY3Rvck92ZXJsYXkqKTsKLSAgICB+SW5zcGVj
dG9yUGFnZUFnZW50KCkgb3ZlcnJpZGU7CisgICAgfkluc3BlY3RvclBhZ2VBZ2VudCgpOwogCiAg
ICAgZW51bSBSZXNvdXJjZVR5cGUgewogICAgICAgICBEb2N1bWVudFJlc291cmNlLApAQCAtNzks
NyArNzcsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgYm9vbCBzaGFyZWRCdWZmZXJDb250ZW50
KFJlZlB0cjxTaGFyZWRCdWZmZXI+JiYsIGNvbnN0IFN0cmluZyYgdGV4dEVuY29kaW5nTmFtZSwg
Ym9vbCB3aXRoQmFzZTY0RW5jb2RlLCBTdHJpbmcqIHJlc3VsdCk7CiAgICAgc3RhdGljIFZlY3Rv
cjxDYWNoZWRSZXNvdXJjZSo+IGNhY2hlZFJlc291cmNlc0ZvckZyYW1lKEZyYW1lKik7Ci0gICAg
c3RhdGljIHZvaWQgcmVzb3VyY2VDb250ZW50KEVycm9yU3RyaW5nJiwgRnJhbWUqLCBjb25zdCBV
UkwmLCBTdHJpbmcqIHJlc3VsdCwgYm9vbCogYmFzZTY0RW5jb2RlZCk7CisgICAgc3RhdGljIHZv
aWQgcmVzb3VyY2VDb250ZW50KEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nJiwgRnJh
bWUqLCBjb25zdCBVUkwmLCBTdHJpbmcqIHJlc3VsdCwgYm9vbCogYmFzZTY0RW5jb2RlZCk7CiAg
ICAgc3RhdGljIFN0cmluZyBzb3VyY2VNYXBVUkxGb3JSZXNvdXJjZShDYWNoZWRSZXNvdXJjZSop
OwogICAgIHN0YXRpYyBDYWNoZWRSZXNvdXJjZSogY2FjaGVkUmVzb3VyY2UoRnJhbWUqLCBjb25z
dCBVUkwmKTsKICAgICBzdGF0aWMgSW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6UmVzb3VyY2VU
eXBlIHJlc291cmNlVHlwZUpTT04oUmVzb3VyY2VUeXBlKTsKQEAgLTg3LDM5ICs4NSwzOSBAQCBw
dWJsaWM6CiAgICAgc3RhdGljIFJlc291cmNlVHlwZSBpbnNwZWN0b3JSZXNvdXJjZVR5cGUoY29u
c3QgQ2FjaGVkUmVzb3VyY2UmKTsKICAgICBzdGF0aWMgSW5zcGVjdG9yOjpQcm90b2NvbDo6UGFn
ZTo6UmVzb3VyY2VUeXBlIGNhY2hlZFJlc291cmNlVHlwZUpTT04oY29uc3QgQ2FjaGVkUmVzb3Vy
Y2UmKTsKICAgICBzdGF0aWMgRnJhbWUqIGZpbmRGcmFtZVdpdGhTZWN1cml0eU9yaWdpbihQYWdl
JiwgY29uc3QgU3RyaW5nJiBvcmlnaW5SYXdTdHJpbmcpOwotICAgIHN0YXRpYyBEb2N1bWVudExv
YWRlciogYXNzZXJ0RG9jdW1lbnRMb2FkZXIoRXJyb3JTdHJpbmcmLCBGcmFtZSopOworICAgIHN0
YXRpYyBEb2N1bWVudExvYWRlciogYXNzZXJ0RG9jdW1lbnRMb2FkZXIoSW5zcGVjdG9yOjpQcm90
b2NvbDo6RXJyb3JTdHJpbmcmLCBGcmFtZSopOwogCiAgICAgLy8gSW5zcGVjdG9yQWdlbnRCYXNl
Ci0gICAgdm9pZCBkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9udGVu
ZFJvdXRlciosIEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXIqKSBvdmVycmlkZTsKLSAgICB2
b2lkIHdpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlzY29ubmVjdFJl
YXNvbikgb3ZlcnJpZGU7CisgICAgdm9pZCBkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5z
cGVjdG9yOjpGcm9udGVuZFJvdXRlciosIEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXIqKTsK
KyAgICB2b2lkIHdpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlzY29u
bmVjdFJlYXNvbik7CiAKICAgICAvLyBQYWdlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyCi0gICAg
dm9pZCBlbmFibGUoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2b2lkIGRpc2FibGUoRXJy
b3JTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2b2lkIHJlbG9hZChFcnJvclN0cmluZyYsIGNvbnN0
IGJvb2wqIG9wdGlvbmFsUmVsb2FkRnJvbU9yaWdpbiwgY29uc3QgYm9vbCogb3B0aW9uYWxSZXZh
bGlkYXRlQWxsUmVzb3VyY2VzKSBvdmVycmlkZTsKLSAgICB2b2lkIG5hdmlnYXRlKEVycm9yU3Ry
aW5nJiwgY29uc3QgU3RyaW5nJiB1cmwpIG92ZXJyaWRlOwotICAgIHZvaWQgb3ZlcnJpZGVVc2Vy
QWdlbnQoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcqIHZhbHVlKSBvdmVycmlkZTsKLSAgICB2
b2lkIG92ZXJyaWRlU2V0dGluZyhFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgc2V0dGluZywg
Y29uc3QgYm9vbCogdmFsdWUpIG92ZXJyaWRlOwotICAgIHZvaWQgZ2V0Q29va2llcyhFcnJvclN0
cmluZyYsIFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkNv
b2tpZT4+JiBjb29raWVzKSBvdmVycmlkZTsKLSAgICB2b2lkIHNldENvb2tpZShFcnJvclN0cmlu
ZyYsIGNvbnN0IEpTT046Ok9iamVjdCYgY29va2llT2JqZWN0KSBvdmVycmlkZTsKLSAgICB2b2lk
IGRlbGV0ZUNvb2tpZShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgY29va2llTmFtZSwgY29u
c3QgU3RyaW5nJiB1cmwpIG92ZXJyaWRlOwotICAgIHZvaWQgZ2V0UmVzb3VyY2VUcmVlKEVycm9y
U3RyaW5nJiwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkZyYW1lUmVzb3VyY2VU
cmVlPiYpIG92ZXJyaWRlOwotICAgIHZvaWQgZ2V0UmVzb3VyY2VDb250ZW50KEVycm9yU3RyaW5n
JiwgY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBjb25zdCBTdHJpbmcmIHVybCwgU3RyaW5nKiBjb250
ZW50LCBib29sKiBiYXNlNjRFbmNvZGVkKSBvdmVycmlkZTsKLSAgICB2b2lkIHNldEJvb3RzdHJh
cFNjcmlwdChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxTb3VyY2UpIGZpbmFs
OwotICAgIHZvaWQgc2VhcmNoSW5SZXNvdXJjZShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYg
ZnJhbWVJZCwgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgcXVlcnksIGNvbnN0IGJv
b2wqIG9wdGlvbmFsQ2FzZVNlbnNpdGl2ZSwgY29uc3QgYm9vbCogb3B0aW9uYWxJc1JlZ2V4LCBj
b25zdCBTdHJpbmcqIG9wdGlvbmFsUmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpHZW5lcmljVHlwZXM6OlNlYXJjaE1hdGNoPj4mKSBvdmVycmlkZTsK
LSAgICB2b2lkIHNlYXJjaEluUmVzb3VyY2VzKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwg
Y29uc3QgYm9vbCogY2FzZVNlbnNpdGl2ZSwgY29uc3QgYm9vbCogaXNSZWdleCwgUmVmUHRyPEpT
T046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6U2VhcmNoUmVzdWx0Pj4mKSBv
dmVycmlkZTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGVu
YWJsZSgpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZGlz
YWJsZSgpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gcmVs
b2FkKE9wdGlvbmFsPGJvb2w+JiYgaWdub3JlQ2FjaGUsIE9wdGlvbmFsPGJvb2w+JiYgcmV2YWxp
ZGF0ZUFsbFJlc291cmNlcyk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdP
cjx2b2lkPiBuYXZpZ2F0ZShjb25zdCBTdHJpbmcmIHVybCk7CisgICAgSW5zcGVjdG9yOjpQcm90
b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBvdmVycmlkZVVzZXJBZ2VudChjb25zdCBTdHJpbmcm
KTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IG92ZXJyaWRl
U2V0dGluZyhJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpTZXR0aW5nLCBPcHRpb25hbDxib29s
PiYmIHZhbHVlKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxK
U09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkNvb2tpZT4+PiBnZXRDb29r
aWVzKCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzZXRD
b29raWUoUmVmPEpTT046Ok9iamVjdD4mJik7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJy
b3JTdHJpbmdPcjx2b2lkPiBkZWxldGVDb29raWUoY29uc3QgU3RyaW5nJiBjb29raWVOYW1lLCBj
b25zdCBTdHJpbmcmIHVybCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdP
cjxSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6RnJhbWVSZXNvdXJjZVRyZWU+PiBnZXRS
ZXNvdXJjZVRyZWUoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHN0
ZDo6dHVwbGU8U3RyaW5nLCBib29sIC8qIGJhc2U2NEVuY29kZWQgKi8+PiBnZXRSZXNvdXJjZUNv
bnRlbnQoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6RnJhbWVJZCYsIGNvbnN0
IFN0cmluZyYgdXJsKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZv
aWQ+IHNldEJvb3RzdHJhcFNjcmlwdChjb25zdCBTdHJpbmcmIHNvdXJjZSk7CisgICAgSW5zcGVj
dG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6
OlByb3RvY29sOjpHZW5lcmljVHlwZXM6OlNlYXJjaE1hdGNoPj4+IHNlYXJjaEluUmVzb3VyY2Uo
Y29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6RnJhbWVJZCYsIGNvbnN0IFN0cmlu
ZyYgdXJsLCBjb25zdCBTdHJpbmcmIHF1ZXJ5LCBPcHRpb25hbDxib29sPiYmIGNhc2VTZW5zaXRp
dmUsIE9wdGlvbmFsPGJvb2w+JiYgaXNSZWdleCwgY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6
TmV0d29yazo6UmVxdWVzdElkJik7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJp
bmdPcjxSZWY8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpTZWFyY2hS
ZXN1bHQ+Pj4gc2VhcmNoSW5SZXNvdXJjZXMoY29uc3QgU3RyaW5nJiwgT3B0aW9uYWw8Ym9vbD4m
JiBjYXNlU2Vuc2l0aXZlLCBPcHRpb25hbDxib29sPiYmIGlzUmVnZXgpOwogI2lmICFQTEFURk9S
TShJT1NfRkFNSUxZKQotICAgIHZvaWQgc2V0U2hvd1J1bGVycyhFcnJvclN0cmluZyYsIGJvb2wp
IG92ZXJyaWRlOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4g
c2V0U2hvd1J1bGVycyhib29sKTsKICNlbmRpZgotICAgIHZvaWQgc2V0U2hvd1BhaW50UmVjdHMo
RXJyb3JTdHJpbmcmLCBib29sIHNob3cpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0RW11bGF0ZWRN
ZWRpYShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlOworICAgIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc2V0U2hvd1BhaW50UmVjdHMoYm9vbCk7
CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzZXRFbXVsYXRl
ZE1lZGlhKGNvbnN0IFN0cmluZyYpOwogI2lmIEVOQUJMRShEQVJLX01PREVfQ1NTKSB8fCBIQVZF
KE9TX0RBUktfTU9ERV9TVVBQT1JUKQotICAgIHZvaWQgc2V0Rm9yY2VkQXBwZWFyYW5jZShFcnJv
clN0cmluZyYsIGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlOworICAgIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc2V0Rm9yY2VkQXBwZWFyYW5jZShPcHRpb25hbDxJbnNw
ZWN0b3I6OlByb3RvY29sOjpQYWdlOjpBcHBlYXJhbmNlPiYmKTsKICNlbmRpZgotICAgIHZvaWQg
c25hcHNob3ROb2RlKEVycm9yU3RyaW5nJiwgaW50IG5vZGVJZCwgU3RyaW5nKiBvdXREYXRhVVJM
KSBvdmVycmlkZTsKLSAgICB2b2lkIHNuYXBzaG90UmVjdChFcnJvclN0cmluZyYsIGludCB4LCBp
bnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBjb25zdCBTdHJpbmcmIGNvb3JkaW5hdGVTeXN0
ZW0sIFN0cmluZyogb3V0RGF0YVVSTCkgb3ZlcnJpZGU7CisgICAgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6RXJyb3JTdHJpbmdPcjxTdHJpbmc+IHNuYXBzaG90Tm9kZShJbnNwZWN0b3I6OlByb3RvY29s
OjpET006Ok5vZGVJZCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxT
dHJpbmc+IHNuYXBzaG90UmVjdChpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCwg
SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6Q29vcmRpbmF0ZVN5c3RlbSk7CiAjaWYgRU5BQkxF
KFdFQl9BUkNISVZFKSAmJiBVU0UoQ0YpCi0gICAgdm9pZCBhcmNoaXZlKEVycm9yU3RyaW5nJiwg
U3RyaW5nKiBkYXRhKSBvdmVycmlkZTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0
cmluZ09yPFN0cmluZz4gYXJjaGl2ZSgpOwogI2VuZGlmCiAKICAgICAvLyBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb24KQEAgLTE0MywxMCArMTQxLDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIGRpZFNj
cm9sbCgpOwogICAgIHZvaWQgZGlkUmVjYWxjdWxhdGVTdHlsZSgpOwogCi0gICAgRnJhbWUqIGZy
YW1lRm9ySWQoY29uc3QgU3RyaW5nJiBmcmFtZUlkKTsKKyAgICBGcmFtZSogZnJhbWVGb3JJZChj
b25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpGcmFtZUlkJik7CiAgICAgV0VCQ09S
RV9FWFBPUlQgU3RyaW5nIGZyYW1lSWQoRnJhbWUqKTsKICAgICBTdHJpbmcgbG9hZGVySWQoRG9j
dW1lbnRMb2FkZXIqKTsKLSAgICBGcmFtZSogYXNzZXJ0RnJhbWUoRXJyb3JTdHJpbmcmLCBjb25z
dCBTdHJpbmcmIGZyYW1lSWQpOworICAgIEZyYW1lKiBhc3NlcnRGcmFtZShJbnNwZWN0b3I6OlBy
b3RvY29sOjpFcnJvclN0cmluZyYsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6
OkZyYW1lSWQmKTsKIAogcHJpdmF0ZToKICAgICBkb3VibGUgdGltZXN0YW1wKCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclRpbWVsaW5lQWdl
bnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JUaW1lbGlu
ZUFnZW50LmNwcAppbmRleCAwYjQ2NjA2OGQ5MGZlMTQ5NWE4NDI5Yjc2MzlmMzEzNWJkNDMzZjQ4
Li4wZGY5NTA1NzAzZDBiMzgxODExMjVlNTMwMWUyMDQxMTI3ZmMzYjU1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclRpbWVsaW5lQWdlbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yVGltZWxpbmVB
Z2VudC5jcHAKQEAgLTEwMiw4MCArMTAyLDgyIEBAIHZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2Vu
dDo6ZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRSb3V0CiAK
IHZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tl
bmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKQogewotICAgIEVycm9yU3RyaW5nIGlnbm9y
ZWQ7Ci0gICAgZGlzYWJsZShpZ25vcmVkKTsKKyAgICBkaXNhYmxlKCk7CiB9CiAKLXZvaWQgSW5z
cGVjdG9yVGltZWxpbmVBZ2VudDo6ZW5hYmxlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZykKK1By
b3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OmVuYWJs
ZSgpCiB7Ci0gICAgaWYgKG1faW5zdHJ1bWVudGluZ0FnZW50cy5lbmFibGVkVGltZWxpbmVBZ2Vu
dCgpID09IHRoaXMpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiVGltZWxpbmUgZG9tYWluIGFs
cmVhZHkgZW5hYmxlZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAobV9pbnN0
cnVtZW50aW5nQWdlbnRzLmVuYWJsZWRUaW1lbGluZUFnZW50KCkgPT0gdGhpcykKKyAgICAgICAg
cmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJUaW1lbGluZSBkb21haW4gYWxyZWFkeSBlbmFibGVkIl9z
KTsKIAogICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy5zZXRFbmFibGVkVGltZWxpbmVBZ2VudCh0
aGlzKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2Vu
dDo6ZGlzYWJsZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCitQcm90b2NvbDo6RXJyb3JTdHJp
bmdPcjx2b2lkPiBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpkaXNhYmxlKCkKIHsKLSAgICBpZiAo
bV9pbnN0cnVtZW50aW5nQWdlbnRzLmVuYWJsZWRUaW1lbGluZUFnZW50KCkgIT0gdGhpcykgewot
ICAgICAgICBlcnJvclN0cmluZyA9ICJUaW1lbGluZSBkb21haW4gYWxyZWFkeSBkaXNhYmxlZCJf
czsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAobV9pbnN0cnVtZW50aW5nQWdlbnRz
LmVuYWJsZWRUaW1lbGluZUFnZW50KCkgIT0gdGhpcykKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4
cGVjdGVkKCJUaW1lbGluZSBkb21haW4gYWxyZWFkeSBkaXNhYmxlZCJfcyk7CiAKICAgICBtX2lu
c3RydW1lbnRpbmdBZ2VudHMuc2V0RW5hYmxlZFRpbWVsaW5lQWdlbnQobnVsbHB0cik7CiAKLSAg
ICBFcnJvclN0cmluZyBpZ25vcmVkOwotICAgIHN0b3AoaWdub3JlZCk7CisgICAgc3RvcCgpOwog
CiAgICAgbV9hdXRvQ2FwdHVyZUVuYWJsZWQgPSBmYWxzZTsKICAgICBtX2luc3RydW1lbnRzLmNs
ZWFyKCk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvclRpbWVsaW5lQWdl
bnQ6OnN0YXJ0KEVycm9yU3RyaW5nJiwgY29uc3QgaW50KiBtYXhDYWxsU3RhY2tEZXB0aCkKK1By
b3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OnN0YXJ0
KE9wdGlvbmFsPGludD4mJiBtYXhDYWxsU3RhY2tEZXB0aCkKIHsKICAgICBtX3RyYWNraW5nRnJv
bUZyb250ZW5kID0gdHJ1ZTsKIAotICAgIGludGVybmFsU3RhcnQobWF4Q2FsbFN0YWNrRGVwdGgp
OworICAgIGludGVybmFsU3RhcnQoV1RGTW92ZShtYXhDYWxsU3RhY2tEZXB0aCkpOworCisgICAg
cmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpzdG9wKEVycm9y
U3RyaW5nJikKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvclRpbWVsaW5l
QWdlbnQ6OnN0b3AoKQogewogICAgIGludGVybmFsU3RvcCgpOwogCiAgICAgbV90cmFja2luZ0Zy
b21Gcm9udGVuZCA9IGZhbHNlOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0
b3JUaW1lbGluZUFnZW50OjpzZXRBdXRvQ2FwdHVyZUVuYWJsZWQoRXJyb3JTdHJpbmcmLCBib29s
IGVuYWJsZWQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JUaW1lbGlu
ZUFnZW50OjpzZXRBdXRvQ2FwdHVyZUVuYWJsZWQoYm9vbCBlbmFibGVkKQogewogICAgIG1fYXV0
b0NhcHR1cmVFbmFibGVkID0gZW5hYmxlZDsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQg
SW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6c2V0SW5zdHJ1bWVudHMoRXJyb3JTdHJpbmcmIGVycm9y
U3RyaW5nLCBjb25zdCBKU09OOjpBcnJheSYgaW5zdHJ1bWVudHMpCitQcm90b2NvbDo6RXJyb3JT
dHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpzZXRJbnN0cnVtZW50cyhSZWY8
SlNPTjo6QXJyYXk+JiYgaW5zdHJ1bWVudHMpCiB7CiAgICAgVmVjdG9yPFByb3RvY29sOjpUaW1l
bGluZTo6SW5zdHJ1bWVudD4gbmV3SW5zdHJ1bWVudHM7Ci0gICAgbmV3SW5zdHJ1bWVudHMucmVz
ZXJ2ZUNhcGFjaXR5KGluc3RydW1lbnRzLmxlbmd0aCgpKTsKKyAgICBuZXdJbnN0cnVtZW50cy5y
ZXNlcnZlQ2FwYWNpdHkoaW5zdHJ1bWVudHMtPmxlbmd0aCgpKTsKIAotICAgIGZvciAoY29uc3Qg
YXV0byYgaW5zdHJ1bWVudFZhbHVlIDogaW5zdHJ1bWVudHMpIHsKLSAgICAgICAgU3RyaW5nIGVu
dW1WYWx1ZVN0cmluZzsKLSAgICAgICAgaWYgKCFpbnN0cnVtZW50VmFsdWUtPmFzU3RyaW5nKGVu
dW1WYWx1ZVN0cmluZykpIHsKLSAgICAgICAgICAgIGVycm9yU3RyaW5nID0gIlVuZXhwZWN0ZWQg
bm9uLXN0cmluZyB2YWx1ZSBpbiBnaXZlbiBpbnN0cnVtZW50cyJfczsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQorICAgIGZvciAoY29uc3QgYXV0byYgaW5zdHJ1bWVudFZhbHVlIDog
aW5zdHJ1bWVudHMuZ2V0KCkpIHsKKyAgICAgICAgYXV0byBpbnN0cnVtZW50U3RyaW5nID0gaW5z
dHJ1bWVudFZhbHVlLT5hc1N0cmluZygpOworICAgICAgICBpZiAoIWluc3RydW1lbnRTdHJpbmcp
CisgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIlVuZXhwZWN0ZWQgbm9uLXN0cmlu
ZyB2YWx1ZSBpbiBnaXZlbiBpbnN0cnVtZW50cyJfcyk7CiAKLSAgICAgICAgT3B0aW9uYWw8UHJv
dG9jb2w6OlRpbWVsaW5lOjpJbnN0cnVtZW50PiBpbnN0cnVtZW50VHlwZSA9IFByb3RvY29sOjpJ
bnNwZWN0b3JIZWxwZXJzOjpwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8UHJvdG9jb2w6OlRpbWVs
aW5lOjpJbnN0cnVtZW50PihlbnVtVmFsdWVTdHJpbmcpOwotICAgICAgICBpZiAoIWluc3RydW1l
bnRUeXBlKSB7Ci0gICAgICAgICAgICBlcnJvclN0cmluZyA9IG1ha2VTdHJpbmcoIlVua25vd24g
aXRlbSBpbiBnaXZlbiBpbnN0cnVtZW50czogIiwgZW51bVZhbHVlU3RyaW5nKTsKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQorICAgICAgICBhdXRvIGluc3RydW1lbnQgPSBQcm90b2Nv
bDo6SGVscGVyczo6cGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPFByb3RvY29sOjpUaW1lbGluZTo6
SW5zdHJ1bWVudD4oaW5zdHJ1bWVudFN0cmluZyk7CisgICAgICAgIGlmICghaW5zdHJ1bWVudCkK
KyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChtYWtlU3RyaW5nKCJVbmtub3duIGlu
c3RydW1lbnQ6ICIsIGluc3RydW1lbnRTdHJpbmcpKTsKIAotICAgICAgICBuZXdJbnN0cnVtZW50
cy51bmNoZWNrZWRBcHBlbmQoKmluc3RydW1lbnRUeXBlKTsKKyAgICAgICAgbmV3SW5zdHJ1bWVu
dHMudW5jaGVja2VkQXBwZW5kKCppbnN0cnVtZW50KTsKICAgICB9CiAKICAgICBtX2luc3RydW1l
bnRzLnN3YXAobmV3SW5zdHJ1bWVudHMpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJ
bnNwZWN0b3JUaW1lbGluZUFnZW50OjppbnRlcm5hbFN0YXJ0KGNvbnN0IGludCogbWF4Q2FsbFN0
YWNrRGVwdGgpCit2b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OmludGVybmFsU3RhcnQoT3B0
aW9uYWw8aW50PiYmIG1heENhbGxTdGFja0RlcHRoKQogewogICAgIGlmIChtX3RyYWNraW5nKQog
ICAgICAgICByZXR1cm47CkBAIC0yOTIsOCArMjk0LDcgQEAgdm9pZCBJbnNwZWN0b3JUaW1lbGlu
ZUFnZW50OjpzdGFydEZyb21Db25zb2xlKEpTQzo6SlNHbG9iYWxPYmplY3QqIGV4ZWMsIGNvbnN0
IFMKICAgICAvLyBBbGxvdyBkdXBsaWNhdGUgdW5uYW1lZCBwcm9maWxlcy4gRGlzYWxsb3cgZHVw
bGljYXRlIG5hbWVkIHByb2ZpbGVzLgogICAgIGlmICghdGl0bGUuaXNFbXB0eSgpKSB7CiAgICAg
ICAgIGZvciAoY29uc3QgVGltZWxpbmVSZWNvcmRFbnRyeSYgcmVjb3JkIDogbV9wZW5kaW5nQ29u
c29sZVByb2ZpbGVSZWNvcmRzKSB7Ci0gICAgICAgICAgICBTdHJpbmcgcmVjb3JkVGl0bGU7Ci0g
ICAgICAgICAgICByZWNvcmQuZGF0YS0+Z2V0U3RyaW5nKCJ0aXRsZSJfcywgcmVjb3JkVGl0bGUp
OworICAgICAgICAgICAgYXV0byByZWNvcmRUaXRsZSA9IHJlY29yZC5kYXRhLT5nZXRTdHJpbmco
InRpdGxlIl9zKTsKICAgICAgICAgICAgIGlmIChyZWNvcmRUaXRsZSA9PSB0aXRsZSkgewogICAg
ICAgICAgICAgICAgIGlmIChhdXRvKiBjb25zb2xlQWdlbnQgPSBtX2luc3RydW1lbnRpbmdBZ2Vu
dHMud2ViQ29uc29sZUFnZW50KCkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFNl
bmQgYW4gZW51bSB0byB0aGUgZnJvbnRlbmQgZm9yIGxvY2FsaXphdGlvbj8KQEAgLTMxOCw4ICsz
MTksNyBAQCB2b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OnN0b3BGcm9tQ29uc29sZShKU0M6
OkpTR2xvYmFsT2JqZWN0KiwgY29uc3QgU3RyaW5nJgogICAgIGZvciAoaW50IGkgPSBtX3BlbmRp
bmdDb25zb2xlUHJvZmlsZVJlY29yZHMuc2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKICAgICAg
ICAgY29uc3QgVGltZWxpbmVSZWNvcmRFbnRyeSYgcmVjb3JkID0gbV9wZW5kaW5nQ29uc29sZVBy
b2ZpbGVSZWNvcmRzW2ldOwogCi0gICAgICAgIFN0cmluZyByZWNvcmRUaXRsZTsKLSAgICAgICAg
cmVjb3JkLmRhdGEtPmdldFN0cmluZygidGl0bGUiX3MsIHJlY29yZFRpdGxlKTsKKyAgICAgICAg
YXV0byByZWNvcmRUaXRsZSA9IHJlY29yZC5kYXRhLT5nZXRTdHJpbmcoInRpdGxlIl9zKTsKICAg
ICAgICAgaWYgKHRpdGxlLmlzRW1wdHkoKSB8fCByZWNvcmRUaXRsZSA9PSB0aXRsZSkgewogICAg
ICAgICAgICAgZGlkQ29tcGxldGVSZWNvcmRFbnRyeShyZWNvcmQpOwogICAgICAgICAgICAgbV9w
ZW5kaW5nQ29uc29sZVByb2ZpbGVSZWNvcmRzLnJlbW92ZShpKTsKQEAgLTQ5NiwxMCArNDk2LDgg
QEAgdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjptYWluRnJhbWVTdGFydGVkTG9hZGluZygp
CiAgICAgbV9hdXRvQ2FwdHVyZVBoYXNlID0gQXV0b0NhcHR1cmVQaGFzZTo6QmVmb3JlTG9hZDsK
IAogICAgIC8vIFByZS1lbXB0aXZlbHkgZGlzYWJsZSBicmVha3BvaW50cy4gVGhlIGZyb250ZW5k
IG11c3QgcmUtZW5hYmxlIHRoZW0uCi0gICAgaWYgKGF1dG8qIHdlYkRlYnVnZ2VyQWdlbnQgPSBt
X2luc3RydW1lbnRpbmdBZ2VudHMuZW5hYmxlZFdlYkRlYnVnZ2VyQWdlbnQoKSkgewotICAgICAg
ICBFcnJvclN0cmluZyBpZ25vcmVkOwotICAgICAgICB3ZWJEZWJ1Z2dlckFnZW50LT5zZXRCcmVh
a3BvaW50c0FjdGl2ZShpZ25vcmVkLCBmYWxzZSk7Ci0gICAgfQorICAgIGlmIChhdXRvKiB3ZWJE
ZWJ1Z2dlckFnZW50ID0gbV9pbnN0cnVtZW50aW5nQWdlbnRzLmVuYWJsZWRXZWJEZWJ1Z2dlckFn
ZW50KCkpCisgICAgICAgIHdlYkRlYnVnZ2VyQWdlbnQtPnNldEJyZWFrcG9pbnRzQWN0aXZlKGZh
bHNlKTsKIAogICAgIC8vIEluZm9ybSB0aGUgZnJvbnRlbmQgd2Ugc3RhcnRlZCBhbiBhdXRvIGNh
cHR1cmUuIFRoZSBmcm9udGVuZCBtdXN0IHN0b3AgY2FwdHVyZS4KICAgICBtX2Zyb250ZW5kRGlz
cGF0Y2hlci0+YXV0b0NhcHR1cmVTdGFydGVkKCk7CkBAIC01MjMsMTAgKzUyMSw4IEBAIHZvaWQg
SW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6c3RhcnRQcm9ncmFtbWF0aWNDYXB0dXJlKCkKICAgICAv
LyBEaXNhYmxlIGJyZWFrcG9pbnRzIGR1cmluZyBwcm9ncmFtbWF0aWMgY2FwdHVyZS4KICAgICBp
ZiAoYXV0byogd2ViRGVidWdnZXJBZ2VudCA9IG1faW5zdHJ1bWVudGluZ0FnZW50cy5lbmFibGVk
V2ViRGVidWdnZXJBZ2VudCgpKSB7CiAgICAgICAgIG1fcHJvZ3JhbW1hdGljQ2FwdHVyZVJlc3Rv
cmVCcmVha3BvaW50QWN0aXZlVmFsdWUgPSB3ZWJEZWJ1Z2dlckFnZW50LT5icmVha3BvaW50c0Fj
dGl2ZSgpOwotICAgICAgICBpZiAobV9wcm9ncmFtbWF0aWNDYXB0dXJlUmVzdG9yZUJyZWFrcG9p
bnRBY3RpdmVWYWx1ZSkgewotICAgICAgICAgICAgRXJyb3JTdHJpbmcgaWdub3JlZDsKLSAgICAg
ICAgICAgIHdlYkRlYnVnZ2VyQWdlbnQtPnNldEJyZWFrcG9pbnRzQWN0aXZlKGlnbm9yZWQsIGZh
bHNlKTsKLSAgICAgICAgfQorICAgICAgICBpZiAobV9wcm9ncmFtbWF0aWNDYXB0dXJlUmVzdG9y
ZUJyZWFrcG9pbnRBY3RpdmVWYWx1ZSkKKyAgICAgICAgICAgIHdlYkRlYnVnZ2VyQWdlbnQtPnNl
dEJyZWFrcG9pbnRzQWN0aXZlKGZhbHNlKTsKICAgICB9IGVsc2UKICAgICAgICAgbV9wcm9ncmFt
bWF0aWNDYXB0dXJlUmVzdG9yZUJyZWFrcG9pbnRBY3RpdmVWYWx1ZSA9IGZhbHNlOwogCkBAIC01
NDYsMTAgKzU0Miw4IEBAIHZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6c3RvcFByb2dyYW1t
YXRpY0NhcHR1cmUoKQogCiAgICAgLy8gUmUtZW5hYmxlIGJyZWFrcG9pbnRzIGlmIHRoZXkgd2Vy
ZSBlbmFibGVkLgogICAgIGlmIChtX3Byb2dyYW1tYXRpY0NhcHR1cmVSZXN0b3JlQnJlYWtwb2lu
dEFjdGl2ZVZhbHVlKSB7Ci0gICAgICAgIGlmIChhdXRvKiB3ZWJEZWJ1Z2dlckFnZW50ID0gbV9p
bnN0cnVtZW50aW5nQWdlbnRzLmVuYWJsZWRXZWJEZWJ1Z2dlckFnZW50KCkpIHsKLSAgICAgICAg
ICAgIEVycm9yU3RyaW5nIGlnbm9yZWQ7Ci0gICAgICAgICAgICB3ZWJEZWJ1Z2dlckFnZW50LT5z
ZXRCcmVha3BvaW50c0FjdGl2ZShpZ25vcmVkLCB0cnVlKTsKLSAgICAgICAgfQorICAgICAgICBp
ZiAoYXV0byogd2ViRGVidWdnZXJBZ2VudCA9IG1faW5zdHJ1bWVudGluZ0FnZW50cy5lbmFibGVk
V2ViRGVidWdnZXJBZ2VudCgpKQorICAgICAgICAgICAgd2ViRGVidWdnZXJBZ2VudC0+c2V0QnJl
YWtwb2ludHNBY3RpdmUodHJ1ZSk7CiAgICAgfQogfQogCkBAIC01NTcsMjYgKzU1MSwyNiBAQCB2
b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OnRvZ2dsZUluc3RydW1lbnRzKEluc3RydW1lbnRT
dGF0ZSBzdGF0ZSkKIHsKICAgICBmb3IgKGF1dG8gaW5zdHJ1bWVudFR5cGUgOiBtX2luc3RydW1l
bnRzKSB7CiAgICAgICAgIHN3aXRjaCAoaW5zdHJ1bWVudFR5cGUpIHsKLSAgICAgICAgY2FzZSBJ
bnNwZWN0b3I6OlByb3RvY29sOjpUaW1lbGluZTo6SW5zdHJ1bWVudDo6U2NyaXB0UHJvZmlsZXI6
IHsKKyAgICAgICAgY2FzZSBQcm90b2NvbDo6VGltZWxpbmU6Okluc3RydW1lbnQ6OlNjcmlwdFBy
b2ZpbGVyOiB7CiAgICAgICAgICAgICB0b2dnbGVTY3JpcHRQcm9maWxlckluc3RydW1lbnQoc3Rh
dGUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgY2FzZSBJbnNwZWN0
b3I6OlByb3RvY29sOjpUaW1lbGluZTo6SW5zdHJ1bWVudDo6SGVhcDogeworICAgICAgICBjYXNl
IFByb3RvY29sOjpUaW1lbGluZTo6SW5zdHJ1bWVudDo6SGVhcDogewogICAgICAgICAgICAgdG9n
Z2xlSGVhcEluc3RydW1lbnQoc3RhdGUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
LSAgICAgICAgY2FzZSBJbnNwZWN0b3I6OlByb3RvY29sOjpUaW1lbGluZTo6SW5zdHJ1bWVudDo6
Q1BVOiB7CisgICAgICAgIGNhc2UgUHJvdG9jb2w6OlRpbWVsaW5lOjpJbnN0cnVtZW50OjpDUFU6
IHsKICAgICAgICAgICAgIHRvZ2dsZUNQVUluc3RydW1lbnQoc3RhdGUpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgY2FzZSBJbnNwZWN0b3I6OlByb3RvY29sOjpUaW1l
bGluZTo6SW5zdHJ1bWVudDo6TWVtb3J5OiB7CisgICAgICAgIGNhc2UgUHJvdG9jb2w6OlRpbWVs
aW5lOjpJbnN0cnVtZW50OjpNZW1vcnk6IHsKICAgICAgICAgICAgIHRvZ2dsZU1lbW9yeUluc3Ry
dW1lbnQoc3RhdGUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgY2Fz
ZSBJbnNwZWN0b3I6OlByb3RvY29sOjpUaW1lbGluZTo6SW5zdHJ1bWVudDo6VGltZWxpbmU6Cisg
ICAgICAgIGNhc2UgUHJvdG9jb2w6OlRpbWVsaW5lOjpJbnN0cnVtZW50OjpUaW1lbGluZToKICAg
ICAgICAgICAgIHRvZ2dsZVRpbWVsaW5lSW5zdHJ1bWVudChzdGF0ZSk7CiAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBJbnNwZWN0b3I6OlByb3RvY29sOjpUaW1lbGluZTo6SW5zdHJ1
bWVudDo6QW5pbWF0aW9uOgorICAgICAgICBjYXNlIFByb3RvY29sOjpUaW1lbGluZTo6SW5zdHJ1
bWVudDo6QW5pbWF0aW9uOgogICAgICAgICAgICAgdG9nZ2xlQW5pbWF0aW9uSW5zdHJ1bWVudChz
dGF0ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtNTg2LDI0ICs1ODAsMjEg
QEAgdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50Ojp0b2dnbGVJbnN0cnVtZW50cyhJbnN0cnVt
ZW50U3RhdGUgc3RhdGUpCiB2b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OnRvZ2dsZVNjcmlw
dFByb2ZpbGVySW5zdHJ1bWVudChJbnN0cnVtZW50U3RhdGUgc3RhdGUpCiB7CiAgICAgaWYgKGF1
dG8qIHNjcmlwdFByb2ZpbGVyQWdlbnQgPSBtX2luc3RydW1lbnRpbmdBZ2VudHMucGVyc2lzdGVu
dFNjcmlwdFByb2ZpbGVyQWdlbnQoKSkgewotICAgICAgICBFcnJvclN0cmluZyBpZ25vcmVkOwot
ICAgICAgICBpZiAoc3RhdGUgPT0gSW5zdHJ1bWVudFN0YXRlOjpTdGFydCkgewotICAgICAgICAg
ICAgY29uc3QgYm9vbCBpbmNsdWRlU2FtcGxlcyA9IHRydWU7Ci0gICAgICAgICAgICBzY3JpcHRQ
cm9maWxlckFnZW50LT5zdGFydFRyYWNraW5nKGlnbm9yZWQsICZpbmNsdWRlU2FtcGxlcyk7Ci0g
ICAgICAgIH0gZWxzZQotICAgICAgICAgICAgc2NyaXB0UHJvZmlsZXJBZ2VudC0+c3RvcFRyYWNr
aW5nKGlnbm9yZWQpOworICAgICAgICBpZiAoc3RhdGUgPT0gSW5zdHJ1bWVudFN0YXRlOjpTdGFy
dCkKKyAgICAgICAgICAgIHNjcmlwdFByb2ZpbGVyQWdlbnQtPnN0YXJ0VHJhY2tpbmcodHJ1ZSk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNjcmlwdFByb2ZpbGVyQWdlbnQtPnN0b3BUcmFj
a2luZygpOwogICAgIH0KIH0KIAogdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50Ojp0b2dnbGVI
ZWFwSW5zdHJ1bWVudChJbnN0cnVtZW50U3RhdGUgc3RhdGUpCiB7CiAgICAgaWYgKGF1dG8qIGhl
YXBBZ2VudCA9IG1faW5zdHJ1bWVudGluZ0FnZW50cy5lbmFibGVkUGFnZUhlYXBBZ2VudCgpKSB7
Ci0gICAgICAgIEVycm9yU3RyaW5nIGlnbm9yZWQ7CiAgICAgICAgIGlmIChzdGF0ZSA9PSBJbnN0
cnVtZW50U3RhdGU6OlN0YXJ0KSB7CiAgICAgICAgICAgICBpZiAobV9hdXRvQ2FwdHVyZVBoYXNl
ID09IEF1dG9DYXB0dXJlUGhhc2U6Ok5vbmUgfHwgbV9hdXRvQ2FwdHVyZVBoYXNlID09IEF1dG9D
YXB0dXJlUGhhc2U6OkZpcnN0TmF2aWdhdGlvbikKLSAgICAgICAgICAgICAgICBoZWFwQWdlbnQt
PnN0YXJ0VHJhY2tpbmcoaWdub3JlZCk7CisgICAgICAgICAgICAgICAgaGVhcEFnZW50LT5zdGFy
dFRyYWNraW5nKCk7CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgaGVhcEFnZW50LT5zdG9w
VHJhY2tpbmcoaWdub3JlZCk7CisgICAgICAgICAgICBoZWFwQWdlbnQtPnN0b3BUcmFja2luZygp
OwogICAgIH0KIH0KIApAQCAtNjExLDExICs2MDIsMTAgQEAgdm9pZCBJbnNwZWN0b3JUaW1lbGlu
ZUFnZW50Ojp0b2dnbGVDUFVJbnN0cnVtZW50KEluc3RydW1lbnRTdGF0ZSBzdGF0ZSkKIHsKICNp
ZiBFTkFCTEUoUkVTT1VSQ0VfVVNBR0UpCiAgICAgaWYgKGF1dG8qIGNwdVByb2ZpbGVyQWdlbnQg
PSBtX2luc3RydW1lbnRpbmdBZ2VudHMucGVyc2lzdGVudENQVVByb2ZpbGVyQWdlbnQoKSkgewot
ICAgICAgICBFcnJvclN0cmluZyBpZ25vcmVkOwogICAgICAgICBpZiAoc3RhdGUgPT0gSW5zdHJ1
bWVudFN0YXRlOjpTdGFydCkKLSAgICAgICAgICAgIGNwdVByb2ZpbGVyQWdlbnQtPnN0YXJ0VHJh
Y2tpbmcoaWdub3JlZCk7CisgICAgICAgICAgICBjcHVQcm9maWxlckFnZW50LT5zdGFydFRyYWNr
aW5nKCk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNwdVByb2ZpbGVyQWdlbnQtPnN0b3BU
cmFja2luZyhpZ25vcmVkKTsKKyAgICAgICAgICAgIGNwdVByb2ZpbGVyQWdlbnQtPnN0b3BUcmFj
a2luZygpOwogICAgIH0KICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTYyNiwx
MSArNjE2LDEwIEBAIHZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6dG9nZ2xlTWVtb3J5SW5z
dHJ1bWVudChJbnN0cnVtZW50U3RhdGUgc3RhdGUpCiB7CiAjaWYgRU5BQkxFKFJFU09VUkNFX1VT
QUdFKQogICAgIGlmIChhdXRvKiBtZW1vcnlBZ2VudCA9IG1faW5zdHJ1bWVudGluZ0FnZW50cy5w
ZXJzaXN0ZW50TWVtb3J5QWdlbnQoKSkgewotICAgICAgICBFcnJvclN0cmluZyBpZ25vcmVkOwog
ICAgICAgICBpZiAoc3RhdGUgPT0gSW5zdHJ1bWVudFN0YXRlOjpTdGFydCkKLSAgICAgICAgICAg
IG1lbW9yeUFnZW50LT5zdGFydFRyYWNraW5nKGlnbm9yZWQpOworICAgICAgICAgICAgbWVtb3J5
QWdlbnQtPnN0YXJ0VHJhY2tpbmcoKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbWVtb3J5
QWdlbnQtPnN0b3BUcmFja2luZyhpZ25vcmVkKTsKKyAgICAgICAgICAgIG1lbW9yeUFnZW50LT5z
dG9wVHJhY2tpbmcoKTsKICAgICB9CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBA
IC02NDAsNyArNjI5LDcgQEAgdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50Ojp0b2dnbGVNZW1v
cnlJbnN0cnVtZW50KEluc3RydW1lbnRTdGF0ZSBzdGF0ZSkKIHZvaWQgSW5zcGVjdG9yVGltZWxp
bmVBZ2VudDo6dG9nZ2xlVGltZWxpbmVJbnN0cnVtZW50KEluc3RydW1lbnRTdGF0ZSBzdGF0ZSkK
IHsKICAgICBpZiAoc3RhdGUgPT0gSW5zdHJ1bWVudFN0YXRlOjpTdGFydCkKLSAgICAgICAgaW50
ZXJuYWxTdGFydCgpOworICAgICAgICBpbnRlcm5hbFN0YXJ0KFdURjo6bnVsbG9wdCk7CiAgICAg
ZWxzZQogICAgICAgICBpbnRlcm5hbFN0b3AoKTsKIH0KQEAgLTY0OCwxMSArNjM3LDEwIEBAIHZv
aWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6dG9nZ2xlVGltZWxpbmVJbnN0cnVtZW50KEluc3Ry
dW1lbnRTdGF0ZSBzdGF0ZSkKIHZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6dG9nZ2xlQW5p
bWF0aW9uSW5zdHJ1bWVudChJbnN0cnVtZW50U3RhdGUgc3RhdGUpCiB7CiAgICAgaWYgKGF1dG8q
IGFuaW1hdGlvbkFnZW50ID0gbV9pbnN0cnVtZW50aW5nQWdlbnRzLnBlcnNpc3RlbnRBbmltYXRp
b25BZ2VudCgpKSB7Ci0gICAgICAgIEVycm9yU3RyaW5nIGlnbm9yZWQ7CiAgICAgICAgIGlmIChz
dGF0ZSA9PSBJbnN0cnVtZW50U3RhdGU6OlN0YXJ0KQotICAgICAgICAgICAgYW5pbWF0aW9uQWdl
bnQtPnN0YXJ0VHJhY2tpbmcoaWdub3JlZCk7CisgICAgICAgICAgICBhbmltYXRpb25BZ2VudC0+
c3RhcnRUcmFja2luZygpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBhbmltYXRpb25BZ2Vu
dC0+c3RvcFRyYWNraW5nKGlnbm9yZWQpOworICAgICAgICAgICAgYW5pbWF0aW9uQWdlbnQtPnN0
b3BUcmFja2luZygpOwogICAgIH0KIH0KIApAQCAtNjkxLDcxICs2NzksNzEgQEAgdm9pZCBJbnNw
ZWN0b3JUaW1lbGluZUFnZW50OjpicmVha3BvaW50QWN0aW9uUHJvYmUoSlNDOjpKU0dsb2JhbE9i
amVjdCogbGV4aWNhbEcKICAgICBhcHBlbmRSZWNvcmQoVGltZWxpbmVSZWNvcmRGYWN0b3J5Ojpj
cmVhdGVQcm9iZVNhbXBsZURhdGEoYWN0aW9uSUQsIHNhbXBsZUlkKSwgVGltZWxpbmVSZWNvcmRU
eXBlOjpQcm9iZVNhbXBsZSwgZmFsc2UsIGZyYW1lRnJvbUV4ZWNTdGF0ZShsZXhpY2FsR2xvYmFs
T2JqZWN0KSk7CiB9CiAKLXN0YXRpYyBJbnNwZWN0b3I6OlByb3RvY29sOjpUaW1lbGluZTo6RXZl
bnRUeXBlIHRvUHJvdG9jb2woVGltZWxpbmVSZWNvcmRUeXBlIHR5cGUpCitzdGF0aWMgUHJvdG9j
b2w6OlRpbWVsaW5lOjpFdmVudFR5cGUgdG9Qcm90b2NvbChUaW1lbGluZVJlY29yZFR5cGUgdHlw
ZSkKIHsKICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICBjYXNlIFRpbWVsaW5lUmVjb3JkVHlwZTo6
RXZlbnREaXNwYXRjaDoKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRpbWVs
aW5lOjpFdmVudFR5cGU6OkV2ZW50RGlzcGF0Y2g7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6
VGltZWxpbmU6OkV2ZW50VHlwZTo6RXZlbnREaXNwYXRjaDsKICAgICBjYXNlIFRpbWVsaW5lUmVj
b3JkVHlwZTo6U2NoZWR1bGVTdHlsZVJlY2FsY3VsYXRpb246Ci0gICAgICAgIHJldHVybiBJbnNw
ZWN0b3I6OlByb3RvY29sOjpUaW1lbGluZTo6RXZlbnRUeXBlOjpTY2hlZHVsZVN0eWxlUmVjYWxj
dWxhdGlvbjsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpUaW1lbGluZTo6RXZlbnRUeXBlOjpT
Y2hlZHVsZVN0eWxlUmVjYWxjdWxhdGlvbjsKICAgICBjYXNlIFRpbWVsaW5lUmVjb3JkVHlwZTo6
UmVjYWxjdWxhdGVTdHlsZXM6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpU
aW1lbGluZTo6RXZlbnRUeXBlOjpSZWNhbGN1bGF0ZVN0eWxlczsKKyAgICAgICAgcmV0dXJuIFBy
b3RvY29sOjpUaW1lbGluZTo6RXZlbnRUeXBlOjpSZWNhbGN1bGF0ZVN0eWxlczsKICAgICBjYXNl
IFRpbWVsaW5lUmVjb3JkVHlwZTo6SW52YWxpZGF0ZUxheW91dDoKLSAgICAgICAgcmV0dXJuIElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlRpbWVsaW5lOjpFdmVudFR5cGU6OkludmFsaWRhdGVMYXlvdXQ7
CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6VGltZWxpbmU6OkV2ZW50VHlwZTo6SW52YWxpZGF0
ZUxheW91dDsKICAgICBjYXNlIFRpbWVsaW5lUmVjb3JkVHlwZTo6TGF5b3V0OgotICAgICAgICBy
ZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6VGltZWxpbmU6OkV2ZW50VHlwZTo6TGF5b3V0Owor
ICAgICAgICByZXR1cm4gUHJvdG9jb2w6OlRpbWVsaW5lOjpFdmVudFR5cGU6OkxheW91dDsKICAg
ICBjYXNlIFRpbWVsaW5lUmVjb3JkVHlwZTo6UGFpbnQ6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0
b3I6OlByb3RvY29sOjpUaW1lbGluZTo6RXZlbnRUeXBlOjpQYWludDsKKyAgICAgICAgcmV0dXJu
IFByb3RvY29sOjpUaW1lbGluZTo6RXZlbnRUeXBlOjpQYWludDsKICAgICBjYXNlIFRpbWVsaW5l
UmVjb3JkVHlwZTo6Q29tcG9zaXRlOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2Nv
bDo6VGltZWxpbmU6OkV2ZW50VHlwZTo6Q29tcG9zaXRlOworICAgICAgICByZXR1cm4gUHJvdG9j
b2w6OlRpbWVsaW5lOjpFdmVudFR5cGU6OkNvbXBvc2l0ZTsKICAgICBjYXNlIFRpbWVsaW5lUmVj
b3JkVHlwZTo6UmVuZGVyaW5nRnJhbWU6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpUaW1lbGluZTo6RXZlbnRUeXBlOjpSZW5kZXJpbmdGcmFtZTsKKyAgICAgICAgcmV0dXJu
IFByb3RvY29sOjpUaW1lbGluZTo6RXZlbnRUeXBlOjpSZW5kZXJpbmdGcmFtZTsKIAogICAgIGNh
c2UgVGltZWxpbmVSZWNvcmRUeXBlOjpUaW1lckluc3RhbGw6Ci0gICAgICAgIHJldHVybiBJbnNw
ZWN0b3I6OlByb3RvY29sOjpUaW1lbGluZTo6RXZlbnRUeXBlOjpUaW1lckluc3RhbGw7CisgICAg
ICAgIHJldHVybiBQcm90b2NvbDo6VGltZWxpbmU6OkV2ZW50VHlwZTo6VGltZXJJbnN0YWxsOwog
ICAgIGNhc2UgVGltZWxpbmVSZWNvcmRUeXBlOjpUaW1lclJlbW92ZToKLSAgICAgICAgcmV0dXJu
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRpbWVsaW5lOjpFdmVudFR5cGU6OlRpbWVyUmVtb3ZlOwor
ICAgICAgICByZXR1cm4gUHJvdG9jb2w6OlRpbWVsaW5lOjpFdmVudFR5cGU6OlRpbWVyUmVtb3Zl
OwogICAgIGNhc2UgVGltZWxpbmVSZWNvcmRUeXBlOjpUaW1lckZpcmU6Ci0gICAgICAgIHJldHVy
biBJbnNwZWN0b3I6OlByb3RvY29sOjpUaW1lbGluZTo6RXZlbnRUeXBlOjpUaW1lckZpcmU7Cisg
ICAgICAgIHJldHVybiBQcm90b2NvbDo6VGltZWxpbmU6OkV2ZW50VHlwZTo6VGltZXJGaXJlOwog
CiAgICAgY2FzZSBUaW1lbGluZVJlY29yZFR5cGU6OkV2YWx1YXRlU2NyaXB0OgotICAgICAgICBy
ZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6VGltZWxpbmU6OkV2ZW50VHlwZTo6RXZhbHVhdGVT
Y3JpcHQ7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6VGltZWxpbmU6OkV2ZW50VHlwZTo6RXZh
bHVhdGVTY3JpcHQ7CiAKICAgICBjYXNlIFRpbWVsaW5lUmVjb3JkVHlwZTo6VGltZVN0YW1wOgot
ICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6VGltZWxpbmU6OkV2ZW50VHlwZTo6
VGltZVN0YW1wOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OlRpbWVsaW5lOjpFdmVudFR5cGU6
OlRpbWVTdGFtcDsKICAgICBjYXNlIFRpbWVsaW5lUmVjb3JkVHlwZTo6VGltZToKLSAgICAgICAg
cmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRpbWVsaW5lOjpFdmVudFR5cGU6OlRpbWU7Cisg
ICAgICAgIHJldHVybiBQcm90b2NvbDo6VGltZWxpbmU6OkV2ZW50VHlwZTo6VGltZTsKICAgICBj
YXNlIFRpbWVsaW5lUmVjb3JkVHlwZTo6VGltZUVuZDoKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlRpbWVsaW5lOjpFdmVudFR5cGU6OlRpbWVFbmQ7CisgICAgICAgIHJldHVy
biBQcm90b2NvbDo6VGltZWxpbmU6OkV2ZW50VHlwZTo6VGltZUVuZDsKIAogICAgIGNhc2UgVGlt
ZWxpbmVSZWNvcmRUeXBlOjpGdW5jdGlvbkNhbGw6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6
OlByb3RvY29sOjpUaW1lbGluZTo6RXZlbnRUeXBlOjpGdW5jdGlvbkNhbGw7CisgICAgICAgIHJl
dHVybiBQcm90b2NvbDo6VGltZWxpbmU6OkV2ZW50VHlwZTo6RnVuY3Rpb25DYWxsOwogICAgIGNh
c2UgVGltZWxpbmVSZWNvcmRUeXBlOjpQcm9iZVNhbXBsZToKLSAgICAgICAgcmV0dXJuIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlRpbWVsaW5lOjpFdmVudFR5cGU6OlByb2JlU2FtcGxlOworICAgICAg
ICByZXR1cm4gUHJvdG9jb2w6OlRpbWVsaW5lOjpFdmVudFR5cGU6OlByb2JlU2FtcGxlOwogICAg
IGNhc2UgVGltZWxpbmVSZWNvcmRUeXBlOjpDb25zb2xlUHJvZmlsZToKLSAgICAgICAgcmV0dXJu
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRpbWVsaW5lOjpFdmVudFR5cGU6OkNvbnNvbGVQcm9maWxl
OworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OlRpbWVsaW5lOjpFdmVudFR5cGU6OkNvbnNvbGVQ
cm9maWxlOwogCiAgICAgY2FzZSBUaW1lbGluZVJlY29yZFR5cGU6OlJlcXVlc3RBbmltYXRpb25G
cmFtZToKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRpbWVsaW5lOjpFdmVu
dFR5cGU6OlJlcXVlc3RBbmltYXRpb25GcmFtZTsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpU
aW1lbGluZTo6RXZlbnRUeXBlOjpSZXF1ZXN0QW5pbWF0aW9uRnJhbWU7CiAgICAgY2FzZSBUaW1l
bGluZVJlY29yZFR5cGU6OkNhbmNlbEFuaW1hdGlvbkZyYW1lOgotICAgICAgICByZXR1cm4gSW5z
cGVjdG9yOjpQcm90b2NvbDo6VGltZWxpbmU6OkV2ZW50VHlwZTo6Q2FuY2VsQW5pbWF0aW9uRnJh
bWU7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6VGltZWxpbmU6OkV2ZW50VHlwZTo6Q2FuY2Vs
QW5pbWF0aW9uRnJhbWU7CiAgICAgY2FzZSBUaW1lbGluZVJlY29yZFR5cGU6OkZpcmVBbmltYXRp
b25GcmFtZToKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRpbWVsaW5lOjpF
dmVudFR5cGU6OkZpcmVBbmltYXRpb25GcmFtZTsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpU
aW1lbGluZTo6RXZlbnRUeXBlOjpGaXJlQW5pbWF0aW9uRnJhbWU7CiAKICAgICBjYXNlIFRpbWVs
aW5lUmVjb3JkVHlwZTo6T2JzZXJ2ZXJDYWxsYmFjazoKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlRpbWVsaW5lOjpFdmVudFR5cGU6Ok9ic2VydmVyQ2FsbGJhY2s7CisgICAg
ICAgIHJldHVybiBQcm90b2NvbDo6VGltZWxpbmU6OkV2ZW50VHlwZTo6T2JzZXJ2ZXJDYWxsYmFj
azsKICAgICB9CiAKLSAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6VGltZWxpbmU6OkV2
ZW50VHlwZTo6VGltZVN0YW1wOworICAgIHJldHVybiBQcm90b2NvbDo6VGltZWxpbmU6OkV2ZW50
VHlwZTo6VGltZVN0YW1wOwogfQogCi12b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OmFkZFJl
Y29yZFRvVGltZWxpbmUoUmVmUHRyPEpTT046Ok9iamVjdD4mJiByZWNvcmQsIFRpbWVsaW5lUmVj
b3JkVHlwZSB0eXBlKQordm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjphZGRSZWNvcmRUb1Rp
bWVsaW5lKFJlZjxKU09OOjpPYmplY3Q+JiYgcmVjb3JkLCBUaW1lbGluZVJlY29yZFR5cGUgdHlw
ZSkKIHsKLSAgICBBU1NFUlRfQVJHKHJlY29yZCwgcmVjb3JkKTsKLSAgICByZWNvcmQtPnNldFN0
cmluZygidHlwZSIsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Okluc3BlY3RvckhlbHBlcnM6OmdldEVu
dW1Db25zdGFudFZhbHVlKHRvUHJvdG9jb2wodHlwZSkpKTsKKyAgICByZWNvcmQtPnNldFN0cmlu
ZyhQcm90b2NvbDo6VGltZWxpbmU6OlRpbWVsaW5lRXZlbnQ6OnR5cGVLZXksIFByb3RvY29sOjpI
ZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZSh0b1Byb3RvY29sKHR5cGUpKSk7CiAKICAgICBp
ZiAobV9yZWNvcmRTdGFjay5pc0VtcHR5KCkpIHsKLSAgICAgICAgYXV0byByZWNvcmRPYmplY3Qg
PSBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRpbWVsaW5lOjpUaW1lbGluZUV2
ZW50Pjo6cnVudGltZUNhc3QoV1RGTW92ZShyZWNvcmQpKTsKKyAgICAgICAgLy8gRklYTUU6IHJ1
bnRpbWVDYXN0IGlzIGEgaGFjay4gV2UgZG8gaXQgYmVjYXVzZSB3ZSBjYW4ndCBidWlsZCBUaW1l
bGluZUV2ZW50IGRpcmVjdGx5IG5vdy4KKyAgICAgICAgYXV0byByZWNvcmRPYmplY3QgPSBQcm90
b2NvbDo6QmluZGluZ1RyYWl0czxQcm90b2NvbDo6VGltZWxpbmU6OlRpbWVsaW5lRXZlbnQ+Ojpy
dW50aW1lQ2FzdChXVEZNb3ZlKHJlY29yZCkpOwogICAgICAgICBzZW5kRXZlbnQoV1RGTW92ZShy
ZWNvcmRPYmplY3QpKTsKICAgICB9IGVsc2UgewogICAgICAgICBjb25zdCBUaW1lbGluZVJlY29y
ZEVudHJ5JiBwYXJlbnQgPSBtX3JlY29yZFN0YWNrLmxhc3QoKTsKQEAgLTc4MSw4ICs3NjksOSBA
QCB2b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OnNldEZyYW1lSWRlbnRpZmllcihKU09OOjpP
YmplY3QqIHJlY29yZCwgRnJhbWUqIGZyYQogCiB2b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6
OmRpZENvbXBsZXRlUmVjb3JkRW50cnkoY29uc3QgVGltZWxpbmVSZWNvcmRFbnRyeSYgZW50cnkp
CiB7Ci0gICAgZW50cnkucmVjb3JkLT5zZXRPYmplY3QoImRhdGEiX3MsIGVudHJ5LmRhdGEpOwot
ICAgIGVudHJ5LnJlY29yZC0+c2V0QXJyYXkoImNoaWxkcmVuIl9zLCBlbnRyeS5jaGlsZHJlbik7
CisgICAgZW50cnkucmVjb3JkLT5zZXRPYmplY3QoUHJvdG9jb2w6OlRpbWVsaW5lOjpUaW1lbGlu
ZUV2ZW50OjpkYXRhS2V5LCBlbnRyeS5kYXRhLmNvcHlSZWYoKSk7CisgICAgaWYgKGVudHJ5LmNo
aWxkcmVuKQorICAgICAgICBlbnRyeS5yZWNvcmQtPnNldEFycmF5KFByb3RvY29sOjpUaW1lbGlu
ZTo6VGltZWxpbmVFdmVudDo6Y2hpbGRyZW5LZXksICplbnRyeS5jaGlsZHJlbik7CiAgICAgZW50
cnkucmVjb3JkLT5zZXREb3VibGUoImVuZFRpbWUiX3MsIHRpbWVzdGFtcCgpKTsKICAgICBhZGRS
ZWNvcmRUb1RpbWVsaW5lKGVudHJ5LnJlY29yZC5jb3B5UmVmKCksIGVudHJ5LnR5cGUpOwogfQpA
QCAtODA0LDI5ICs3OTMsMjkgQEAgdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpkaWRDb21w
bGV0ZUN1cnJlbnRSZWNvcmQoVGltZWxpbmVSZWNvcmRUeXBlIHR5cGUpCiAgICAgfQogfQogCi12
b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OmFwcGVuZFJlY29yZChSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiYmIGRhdGEsIFRpbWVsaW5lUmVjb3JkVHlwZSB0eXBlLCBib29sIGNhcHR1cmVDYWxsU3Rh
Y2ssIEZyYW1lKiBmcmFtZSkKK3ZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6YXBwZW5kUmVj
b3JkKFJlZjxKU09OOjpPYmplY3Q+JiYgZGF0YSwgVGltZWxpbmVSZWNvcmRUeXBlIHR5cGUsIGJv
b2wgY2FwdHVyZUNhbGxTdGFjaywgRnJhbWUqIGZyYW1lKQogewogICAgIFJlZjxKU09OOjpPYmpl
Y3Q+IHJlY29yZCA9IFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlR2VuZXJpY1JlY29yZCh0
aW1lc3RhbXAoKSwgY2FwdHVyZUNhbGxTdGFjayA/IG1fbWF4Q2FsbFN0YWNrRGVwdGggOiAwKTsK
LSAgICByZWNvcmQtPnNldE9iamVjdCgiZGF0YSIsIFdURk1vdmUoZGF0YSkpOworICAgIHJlY29y
ZC0+c2V0T2JqZWN0KFByb3RvY29sOjpUaW1lbGluZTo6VGltZWxpbmVFdmVudDo6ZGF0YUtleSwg
V1RGTW92ZShkYXRhKSk7CiAgICAgc2V0RnJhbWVJZGVudGlmaWVyKCZyZWNvcmQuZ2V0KCksIGZy
YW1lKTsKICAgICBhZGRSZWNvcmRUb1RpbWVsaW5lKFdURk1vdmUocmVjb3JkKSwgdHlwZSk7CiB9
CiAKLXZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6c2VuZEV2ZW50KFJlZlB0cjxKU09OOjpP
YmplY3Q+JiYgZXZlbnQpCit2b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OnNlbmRFdmVudChS
ZWY8SlNPTjo6T2JqZWN0PiYmIGV2ZW50KQogewogICAgIC8vIEZJWE1FOiBydW50aW1lQ2FzdCBp
cyBhIGhhY2suIFdlIGRvIGl0IGJlY2F1c2Ugd2UgY2FuJ3QgYnVpbGQgVGltZWxpbmVFdmVudCBk
aXJlY3RseSBub3cuCi0gICAgYXV0byByZWNvcmRDaGVja2VkID0gQmluZGluZ1RyYWl0czxJbnNw
ZWN0b3I6OlByb3RvY29sOjpUaW1lbGluZTo6VGltZWxpbmVFdmVudD46OnJ1bnRpbWVDYXN0KFdU
Rk1vdmUoZXZlbnQpKTsKKyAgICBhdXRvIHJlY29yZENoZWNrZWQgPSBQcm90b2NvbDo6QmluZGlu
Z1RyYWl0czxQcm90b2NvbDo6VGltZWxpbmU6OlRpbWVsaW5lRXZlbnQ+OjpydW50aW1lQ2FzdChX
VEZNb3ZlKGV2ZW50KSk7CiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPmV2ZW50UmVjb3JkZWQo
V1RGTW92ZShyZWNvcmRDaGVja2VkKSk7CiB9CiAKLUluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OlRp
bWVsaW5lUmVjb3JkRW50cnkgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6Y3JlYXRlUmVjb3JkRW50
cnkoUmVmUHRyPEpTT046Ok9iamVjdD4mJiBkYXRhLCBUaW1lbGluZVJlY29yZFR5cGUgdHlwZSwg
Ym9vbCBjYXB0dXJlQ2FsbFN0YWNrLCBGcmFtZSogZnJhbWUpCitJbnNwZWN0b3JUaW1lbGluZUFn
ZW50OjpUaW1lbGluZVJlY29yZEVudHJ5IEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OmNyZWF0ZVJl
Y29yZEVudHJ5KFJlZjxKU09OOjpPYmplY3Q+JiYgZGF0YSwgVGltZWxpbmVSZWNvcmRUeXBlIHR5
cGUsIGJvb2wgY2FwdHVyZUNhbGxTdGFjaywgRnJhbWUqIGZyYW1lKQogewogICAgIFJlZjxKU09O
OjpPYmplY3Q+IHJlY29yZCA9IFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlR2VuZXJpY1Jl
Y29yZCh0aW1lc3RhbXAoKSwgY2FwdHVyZUNhbGxTdGFjayA/IG1fbWF4Q2FsbFN0YWNrRGVwdGgg
OiAwKTsKICAgICBzZXRGcmFtZUlkZW50aWZpZXIoJnJlY29yZC5nZXQoKSwgZnJhbWUpOwogICAg
IHJldHVybiBUaW1lbGluZVJlY29yZEVudHJ5KFdURk1vdmUocmVjb3JkKSwgV1RGTW92ZShkYXRh
KSwgSlNPTjo6QXJyYXk6OmNyZWF0ZSgpLCB0eXBlKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JUaW1l
bGluZUFnZW50OjpwdXNoQ3VycmVudFJlY29yZChSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIGRhdGEs
IFRpbWVsaW5lUmVjb3JkVHlwZSB0eXBlLCBib29sIGNhcHR1cmVDYWxsU3RhY2ssIEZyYW1lKiBm
cmFtZSkKK3ZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6cHVzaEN1cnJlbnRSZWNvcmQoUmVm
PEpTT046Ok9iamVjdD4mJiBkYXRhLCBUaW1lbGluZVJlY29yZFR5cGUgdHlwZSwgYm9vbCBjYXB0
dXJlQ2FsbFN0YWNrLCBGcmFtZSogZnJhbWUpCiB7CiAgICAgcHVzaEN1cnJlbnRSZWNvcmQoY3Jl
YXRlUmVjb3JkRW50cnkoV1RGTW92ZShkYXRhKSwgdHlwZSwgY2FwdHVyZUNhbGxTdGFjaywgZnJh
bWUpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5z
cGVjdG9yVGltZWxpbmVBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9J
bnNwZWN0b3JUaW1lbGluZUFnZW50LmgKaW5kZXggYWU3NTc5YTE1ZjA1NzJiNTJmOWFhZTFhZmJl
ZTA5MmZiODI0YzgxOS4uZmU3NWU0MGI0MzRmODVkOTczYWVkYmI0Mjk3YTk0YmFlMThmYmIyYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JUaW1l
bGluZUFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0
b3JUaW1lbGluZUFnZW50LmgKQEAgLTUwLDggKzUwLDYgQEAgY2xhc3MgRnJhbWU7CiBjbGFzcyBS
ZW5kZXJPYmplY3Q7CiBjbGFzcyBSdW5Mb29wT2JzZXJ2ZXI7CiAKLXR5cGVkZWYgU3RyaW5nIEVy
cm9yU3RyaW5nOwotCiBlbnVtIGNsYXNzIFRpbWVsaW5lUmVjb3JkVHlwZSB7CiAgICAgRXZlbnRE
aXNwYXRjaCwKICAgICBTY2hlZHVsZVN0eWxlUmVjYWxjdWxhdGlvbiwKQEAgLTg4LDIyICs4Niwy
MiBAQCBjbGFzcyBJbnNwZWN0b3JUaW1lbGluZUFnZW50IGZpbmFsIDogcHVibGljIEluc3BlY3Rv
ckFnZW50QmFzZSAsIHB1YmxpYyBJbnNwZWN0bwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OwogcHVibGljOgogICAgIEluc3BlY3RvclRpbWVsaW5lQWdlbnQoUGFnZUFnZW50Q29udGV4dCYp
OwotICAgIH5JbnNwZWN0b3JUaW1lbGluZUFnZW50KCkgb3ZlcnJpZGU7CisgICAgfkluc3BlY3Rv
clRpbWVsaW5lQWdlbnQoKTsKIAogICAgIC8vIEluc3BlY3RvckFnZW50QmFzZQotICAgIHZvaWQg
ZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRSb3V0ZXIqLCBJ
bnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyKikgb3ZlcnJpZGU7Ci0gICAgdm9pZCB3aWxsRGVz
dHJveUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24pIG92ZXJy
aWRlOworICAgIHZvaWQgZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJv
bnRlbmRSb3V0ZXIqLCBJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyKik7CisgICAgdm9pZCB3
aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24p
OwogCiAgICAgLy8gVGltZWxpbmVCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIKLSAgICB2b2lkIGVu
YWJsZShFcnJvclN0cmluZyYpIG92ZXJyaWRlOwotICAgIHZvaWQgZGlzYWJsZShFcnJvclN0cmlu
ZyYpIG92ZXJyaWRlOwotICAgIHZvaWQgc3RhcnQoRXJyb3JTdHJpbmcmLCBjb25zdCBpbnQqIG1h
eENhbGxTdGFja0RlcHRoID0gbnVsbHB0cikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzdG9wKEVycm9y
U3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRBdXRvQ2FwdHVyZUVuYWJsZWQoRXJyb3JT
dHJpbmcmLCBib29sKSBvdmVycmlkZTsKLSAgICB2b2lkIHNldEluc3RydW1lbnRzKEVycm9yU3Ry
aW5nJiwgY29uc3QgSlNPTjo6QXJyYXkmKSBvdmVycmlkZTsKKyAgICBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGVuYWJsZSgpOworICAgIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZGlzYWJsZSgpOworICAgIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc3RhcnQoT3B0aW9uYWw8aW50PiYmIG1heENhbGxTdGFj
a0RlcHRoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHN0
b3AoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHNldEF1
dG9DYXB0dXJlRW5hYmxlZChib29sKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0
cmluZ09yPHZvaWQ+IHNldEluc3RydW1lbnRzKFJlZjxKU09OOjpBcnJheT4mJik7CiAKICAgICAv
LyBKU0M6OkRlYnVnZ2VyOjpPYnNlcnZlcgotICAgIHZvaWQgYnJlYWtwb2ludEFjdGlvblByb2Jl
KEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkJyZWFrcG9pbnRBY3Rpb25JRCwgdW5zaWduZWQg
YmF0Y2hJZCwgdW5zaWduZWQgc2FtcGxlSWQsIEpTQzo6SlNWYWx1ZSByZXN1bHQpIGZpbmFsOwor
ICAgIHZvaWQgYnJlYWtwb2ludEFjdGlvblByb2JlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6
OkJyZWFrcG9pbnRBY3Rpb25JRCwgdW5zaWduZWQgYmF0Y2hJZCwgdW5zaWduZWQgc2FtcGxlSWQs
IEpTQzo6SlNWYWx1ZSByZXN1bHQpOwogCiAgICAgLy8gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
CiAgICAgdm9pZCBkaWRJbnN0YWxsVGltZXIoaW50IHRpbWVySWQsIFNlY29uZHMgdGltZW91dCwg
Ym9vbCBzaW5nbGVTaG90LCBGcmFtZSopOwpAQCAtMTYwLDkgKzE1OCw3IEBAIHByaXZhdGU6CiAg
ICAgZnJpZW5kIGNsYXNzIFRpbWVsaW5lUmVjb3JkU3RhY2s7CiAKICAgICBzdHJ1Y3QgVGltZWxp
bmVSZWNvcmRFbnRyeSB7Ci0gICAgICAgIFRpbWVsaW5lUmVjb3JkRW50cnkoKQotICAgICAgICAg
ICAgOiB0eXBlKFRpbWVsaW5lUmVjb3JkVHlwZTo6RXZlbnREaXNwYXRjaCkgeyB9Ci0gICAgICAg
IFRpbWVsaW5lUmVjb3JkRW50cnkoUmVmUHRyPEpTT046Ok9iamVjdD4mJiByZWNvcmQsIFJlZlB0
cjxKU09OOjpPYmplY3Q+JiYgZGF0YSwgUmVmUHRyPEpTT046OkFycmF5PiYmIGNoaWxkcmVuLCBU
aW1lbGluZVJlY29yZFR5cGUgdHlwZSkKKyAgICAgICAgVGltZWxpbmVSZWNvcmRFbnRyeShSZWY8
SlNPTjo6T2JqZWN0PiYmIHJlY29yZCwgUmVmPEpTT046Ok9iamVjdD4mJiBkYXRhLCBSZWZQdHI8
SlNPTjo6QXJyYXk+JiYgY2hpbGRyZW4sIFRpbWVsaW5lUmVjb3JkVHlwZSB0eXBlKQogICAgICAg
ICAgICAgOiByZWNvcmQoV1RGTW92ZShyZWNvcmQpKQogICAgICAgICAgICAgLCBkYXRhKFdURk1v
dmUoZGF0YSkpCiAgICAgICAgICAgICAsIGNoaWxkcmVuKFdURk1vdmUoY2hpbGRyZW4pKQpAQCAt
MTcwLDI5ICsxNjYsMjkgQEAgcHJpdmF0ZToKICAgICAgICAgewogICAgICAgICB9CiAKLSAgICAg
ICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcmVjb3JkOwotICAgICAgICBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiBkYXRhOworICAgICAgICBSZWY8SlNPTjo6T2JqZWN0PiByZWNvcmQ7CisgICAgICAgIFJl
ZjxKU09OOjpPYmplY3Q+IGRhdGE7CiAgICAgICAgIFJlZlB0cjxKU09OOjpBcnJheT4gY2hpbGRy
ZW47CiAgICAgICAgIFRpbWVsaW5lUmVjb3JkVHlwZSB0eXBlOwogICAgIH07CiAKLSAgICB2b2lk
IGludGVybmFsU3RhcnQoY29uc3QgaW50KiBtYXhDYWxsU3RhY2tEZXB0aCA9IG51bGxwdHIpOwor
ICAgIHZvaWQgaW50ZXJuYWxTdGFydChPcHRpb25hbDxpbnQ+JiYgbWF4Q2FsbFN0YWNrRGVwdGgp
OwogICAgIHZvaWQgaW50ZXJuYWxTdG9wKCk7CiAgICAgZG91YmxlIHRpbWVzdGFtcCgpOwogCi0g
ICAgdm9pZCBzZW5kRXZlbnQoUmVmUHRyPEpTT046Ok9iamVjdD4mJik7Ci0gICAgdm9pZCBhcHBl
bmRSZWNvcmQoUmVmUHRyPEpTT046Ok9iamVjdD4mJiBkYXRhLCBUaW1lbGluZVJlY29yZFR5cGUs
IGJvb2wgY2FwdHVyZUNhbGxTdGFjaywgRnJhbWUqKTsKLSAgICB2b2lkIHB1c2hDdXJyZW50UmVj
b3JkKFJlZlB0cjxKU09OOjpPYmplY3Q+JiYsIFRpbWVsaW5lUmVjb3JkVHlwZSwgYm9vbCBjYXB0
dXJlQ2FsbFN0YWNrLCBGcmFtZSopOworICAgIHZvaWQgc2VuZEV2ZW50KFJlZjxKU09OOjpPYmpl
Y3Q+JiYpOworICAgIHZvaWQgYXBwZW5kUmVjb3JkKFJlZjxKU09OOjpPYmplY3Q+JiYgZGF0YSwg
VGltZWxpbmVSZWNvcmRUeXBlLCBib29sIGNhcHR1cmVDYWxsU3RhY2ssIEZyYW1lKik7CisgICAg
dm9pZCBwdXNoQ3VycmVudFJlY29yZChSZWY8SlNPTjo6T2JqZWN0PiYmLCBUaW1lbGluZVJlY29y
ZFR5cGUsIGJvb2wgY2FwdHVyZUNhbGxTdGFjaywgRnJhbWUqKTsKICAgICB2b2lkIHB1c2hDdXJy
ZW50UmVjb3JkKGNvbnN0IFRpbWVsaW5lUmVjb3JkRW50cnkmIHJlY29yZCkgeyBtX3JlY29yZFN0
YWNrLmFwcGVuZChyZWNvcmQpOyB9CiAKLSAgICBUaW1lbGluZVJlY29yZEVudHJ5IGNyZWF0ZVJl
Y29yZEVudHJ5KFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgZGF0YSwgVGltZWxpbmVSZWNvcmRUeXBl
LCBib29sIGNhcHR1cmVDYWxsU3RhY2ssIEZyYW1lKik7CisgICAgVGltZWxpbmVSZWNvcmRFbnRy
eSBjcmVhdGVSZWNvcmRFbnRyeShSZWY8SlNPTjo6T2JqZWN0PiYmIGRhdGEsIFRpbWVsaW5lUmVj
b3JkVHlwZSwgYm9vbCBjYXB0dXJlQ2FsbFN0YWNrLCBGcmFtZSopOwogCiAgICAgdm9pZCBzZXRG
cmFtZUlkZW50aWZpZXIoSlNPTjo6T2JqZWN0KiByZWNvcmQsIEZyYW1lKik7CiAKICAgICB2b2lk
IGRpZENvbXBsZXRlUmVjb3JkRW50cnkoY29uc3QgVGltZWxpbmVSZWNvcmRFbnRyeSYpOwogICAg
IHZvaWQgZGlkQ29tcGxldGVDdXJyZW50UmVjb3JkKFRpbWVsaW5lUmVjb3JkVHlwZSk7CiAKLSAg
ICB2b2lkIGFkZFJlY29yZFRvVGltZWxpbmUoUmVmUHRyPEpTT046Ok9iamVjdD4mJiwgVGltZWxp
bmVSZWNvcmRUeXBlKTsKKyAgICB2b2lkIGFkZFJlY29yZFRvVGltZWxpbmUoUmVmPEpTT046Ok9i
amVjdD4mJiwgVGltZWxpbmVSZWNvcmRUeXBlKTsKIAogICAgIHZvaWQgbG9jYWxUb1BhZ2VRdWFk
KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IExheW91dFJlY3QmLCBGbG9hdFF1YWQqKTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JXb3Jr
ZXJBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rvcldv
cmtlckFnZW50LmNwcAppbmRleCA5MDljNDY2Zjg3ZTliZmE4YzRjMTcyOGM0NmFkNmU3ZTU5MDdi
NDZlLi4zM2NhYTBhYTIwNzlhZDQwODFjYzI5NjA1YTUzNTM3YzI0ZDY2YmVmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvcldvcmtlckFnZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvcldvcmtlckFn
ZW50LmNwcApAQCAtNTMsNTUgKzUzLDU2IEBAIHZvaWQgSW5zcGVjdG9yV29ya2VyQWdlbnQ6Ondp
bGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKERpc2Nvbm5lY3RSZWFzb24pCiB7CiAgICAgbV9p
bnN0cnVtZW50aW5nQWdlbnRzLnNldFBlcnNpc3RlbnRXb3JrZXJBZ2VudChudWxscHRyKTsKIAot
ICAgIEVycm9yU3RyaW5nIGlnbm9yZWQ7Ci0gICAgZGlzYWJsZShpZ25vcmVkKTsKKyAgICBkaXNh
YmxlKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yV29ya2VyQWdlbnQ6OmVuYWJsZShFcnJvclN0cmlu
ZyYpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JXb3JrZXJBZ2VudDo6
ZW5hYmxlKCkKIHsKICAgICBpZiAobV9lbmFibGVkKQotICAgICAgICByZXR1cm47CisgICAgICAg
IHJldHVybiB7IH07CiAKICAgICBtX2VuYWJsZWQgPSB0cnVlOwogCiAgICAgY29ubmVjdFRvQWxs
V29ya2VySW5zcGVjdG9yUHJveGllc0ZvclBhZ2UoKTsKKworICAgIHJldHVybiB7IH07CiB9CiAK
LXZvaWQgSW5zcGVjdG9yV29ya2VyQWdlbnQ6OmRpc2FibGUoRXJyb3JTdHJpbmcmKQorUHJvdG9j
b2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yV29ya2VyQWdlbnQ6OmRpc2FibGUoKQog
ewogICAgIGlmICghbV9lbmFibGVkKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB7
IH07CiAKICAgICBtX2VuYWJsZWQgPSBmYWxzZTsKIAogICAgIGRpc2Nvbm5lY3RGcm9tQWxsV29y
a2VySW5zcGVjdG9yUHJveGllcygpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNw
ZWN0b3JXb3JrZXJBZ2VudDo6aW5pdGlhbGl6ZWQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBj
b25zdCBTdHJpbmcmIHdvcmtlcklkKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5z
cGVjdG9yV29ya2VyQWdlbnQ6OmluaXRpYWxpemVkKGNvbnN0IFN0cmluZyYgd29ya2VySWQpCiB7
CiAgICAgV29ya2VySW5zcGVjdG9yUHJveHkqIHByb3h5ID0gbV9jb25uZWN0ZWRQcm94aWVzLmdl
dCh3b3JrZXJJZCk7Ci0gICAgaWYgKCFwcm94eSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJN
aXNzaW5nIHdvcmtlciBmb3IgZ2l2ZW4gd29ya2VySWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9CisgICAgaWYgKCFwcm94eSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJNaXNz
aW5nIHdvcmtlciBmb3IgZ2l2ZW4gd29ya2VySWQiX3MpOwogCiAgICAgcHJveHktPnJlc3VtZVdv
cmtlcklmUGF1c2VkKCk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3Rvcldv
cmtlckFnZW50OjpzZW5kTWVzc2FnZVRvV29ya2VyKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywg
Y29uc3QgU3RyaW5nJiB3b3JrZXJJZCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQorUHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yV29ya2VyQWdlbnQ6OnNlbmRNZXNzYWdlVG9X
b3JrZXIoY29uc3QgU3RyaW5nJiB3b3JrZXJJZCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQogewot
ICAgIGlmICghbV9lbmFibGVkKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIldvcmtlciBkb21h
aW4gbXVzdCBiZSBlbmFibGVkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICgh
bV9lbmFibGVkKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIldvcmtlciBkb21haW4g
bXVzdCBiZSBlbmFibGVkIl9zKTsKIAogICAgIFdvcmtlckluc3BlY3RvclByb3h5KiBwcm94eSA9
IG1fY29ubmVjdGVkUHJveGllcy5nZXQod29ya2VySWQpOwotICAgIGlmICghcHJveHkpIHsKLSAg
ICAgICAgZXJyb3JTdHJpbmcgPSAiTWlzc2luZyB3b3JrZXIgZm9yIGdpdmVuIHdvcmtlcklkIl9z
OwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghcHJveHkpCisgICAgICAgIHJldHVy
biBtYWtlVW5leHBlY3RlZCgiTWlzc2luZyB3b3JrZXIgZm9yIGdpdmVuIHdvcmtlcklkIl9zKTsK
IAogICAgIHByb3h5LT5zZW5kTWVzc2FnZVRvV29ya2VySW5zcGVjdG9yQ29udHJvbGxlcihtZXNz
YWdlKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKIHZvaWQgSW5zcGVjdG9yV29ya2VyQWdlbnQ6
OnNlbmRNZXNzYWdlRnJvbVdvcmtlclRvRnJvbnRlbmQoV29ya2VySW5zcGVjdG9yUHJveHkmIHBy
b3h5LCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvcldvcmtlckFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvcldvcmtlckFnZW50LmgKaW5kZXggMTdkMWJlYWU5MDEw
ZjMyMDAxYWM2NGRkOWQ4OTJhOTNmMTBhN2Q1Ni4uNjM2YmM4MWRkNWE1MGFlZTA1M2MyZTA0ZTY4
Njk5ZDNmYTZiNjRlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50
cy9JbnNwZWN0b3JXb3JrZXJBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9h
Z2VudHMvSW5zcGVjdG9yV29ya2VyQWdlbnQuaApAQCAtMzUsMjcgKzM1LDI1IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogY2xhc3MgUGFnZTsKIAotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7
Ci0KIGNsYXNzIEluc3BlY3RvcldvcmtlckFnZW50IGZpbmFsIDogcHVibGljIEluc3BlY3RvckFn
ZW50QmFzZSwgcHVibGljIEluc3BlY3Rvcjo6V29ya2VyQmFja2VuZERpc3BhdGNoZXJIYW5kbGVy
LCBwdWJsaWMgV29ya2VySW5zcGVjdG9yUHJveHk6OlBhZ2VDaGFubmVsIHsKICAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShJbnNwZWN0b3JXb3JrZXJBZ2VudCk7CiAgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgSW5zcGVjdG9yV29ya2VyQWdlbnQoUGFnZUFnZW50Q29u
dGV4dCYpOwotICAgIH5JbnNwZWN0b3JXb3JrZXJBZ2VudCgpIG92ZXJyaWRlOworICAgIH5JbnNw
ZWN0b3JXb3JrZXJBZ2VudCgpOwogCiAgICAgLy8gSW5zcGVjdG9yQWdlbnRCYXNlCi0gICAgdm9p
ZCBkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9udGVuZFJvdXRlcios
IEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXIqKSBvdmVycmlkZTsKLSAgICB2b2lkIHdpbGxE
ZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlzY29ubmVjdFJlYXNvbikgb3Zl
cnJpZGU7CisgICAgdm9pZCBkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpG
cm9udGVuZFJvdXRlciosIEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXIqKTsKKyAgICB2b2lk
IHdpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlzY29ubmVjdFJlYXNv
bik7CiAKICAgICAvLyBXb3JrZXJCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIKLSAgICB2b2lkIGVu
YWJsZShFcnJvclN0cmluZyYpIG92ZXJyaWRlOwotICAgIHZvaWQgZGlzYWJsZShFcnJvclN0cmlu
ZyYpIG92ZXJyaWRlOwotICAgIHZvaWQgaW5pdGlhbGl6ZWQoRXJyb3JTdHJpbmcmLCBjb25zdCBT
dHJpbmcmIHdvcmtlcklkKSBvdmVycmlkZTsKLSAgICB2b2lkIHNlbmRNZXNzYWdlVG9Xb3JrZXIo
RXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHdvcmtlcklkLCBjb25zdCBTdHJpbmcmIG1lc3Nh
Z2UpIG92ZXJyaWRlOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9p
ZD4gZW5hYmxlKCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lk
PiBkaXNhYmxlKCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lk
PiBpbml0aWFsaXplZChjb25zdCBTdHJpbmcmIHdvcmtlcklkKTsKKyAgICBJbnNwZWN0b3I6OlBy
b3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHNlbmRNZXNzYWdlVG9Xb3JrZXIoY29uc3QgU3Ry
aW5nJiB3b3JrZXJJZCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKIAogICAgIC8vIFdvcmtlcklu
c3BlY3RvclByb3h5OjpQYWdlQ2hhbm5lbAotICAgIHZvaWQgc2VuZE1lc3NhZ2VGcm9tV29ya2Vy
VG9Gcm9udGVuZChXb3JrZXJJbnNwZWN0b3JQcm94eSYsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkg
b3ZlcnJpZGU7CisgICAgdm9pZCBzZW5kTWVzc2FnZUZyb21Xb3JrZXJUb0Zyb250ZW5kKFdvcmtl
ckluc3BlY3RvclByb3h5JiwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKIAogICAgIC8vIEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbgogICAgIGJvb2wgc2hvdWxkV2FpdEZvckRlYnVnZ2VyT25TdGFy
dCgpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9X
ZWJDb25zb2xlQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvV2ViQ29u
c29sZUFnZW50LmgKaW5kZXggZjdkODI3ODA3MGZlNDcwMjk5ZjJkZDZiYWI2NjQ2MmQ1ODU4ODkw
NS4uMGI4ZjIwZWFjMzQzYjY2ODE3YWM5ZjBmMGM2YzhjYjIwYzliYWM3YiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9XZWJDb25zb2xlQWdlbnQuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL1dlYkNvbnNvbGVBZ2VudC5oCkBAIC0zMyw3
ICszMyw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIERPTVdpbmRvdzsKIGNsYXNzIFJl
c291cmNlRXJyb3I7CiBjbGFzcyBSZXNvdXJjZVJlc3BvbnNlOwotdHlwZWRlZiBTdHJpbmcgRXJy
b3JTdHJpbmc7CiAKIGNsYXNzIFdlYkNvbnNvbGVBZ2VudCA6IHB1YmxpYyBJbnNwZWN0b3I6Oklu
c3BlY3RvckNvbnNvbGVBZ2VudCB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoV2ViQ29uc29s
ZUFnZW50KTsKQEAgLTQ2LDggKzQ1LDYgQEAgcHVibGljOgogICAgIHZvaWQgZnJhbWVXaW5kb3dE
aXNjYXJkZWQoRE9NV2luZG93Kik7CiAgICAgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UodW5zaWdu
ZWQgbG9uZyByZXF1ZXN0SWRlbnRpZmllciwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOwogICAg
IHZvaWQgZGlkRmFpbExvYWRpbmcodW5zaWduZWQgbG9uZyByZXF1ZXN0SWRlbnRpZmllciwgY29u
c3QgUmVzb3VyY2VFcnJvciYpOwotCi1wcm90ZWN0ZWQ6CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL1dlYkRl
YnVnZ2VyQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9XZWJEZWJ1
Z2dlckFnZW50LmNwcAppbmRleCBiOTNhODFmYmY0ZjUwNjQ2NmFkYjNlMTNiYmU4OGNjNTM5MjM1
YjdlLi4xYzYxMzU3YWZkY2UzNTBhZTIzYWJjMjA3ZjIyNzA0Yzk0ZWJmNGYzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL1dlYkRlYnVnZ2VyQWdlbnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvV2ViRGVidWdnZXJBZ2VudC5jcHAK
QEAgLTQ5LDE4ICs0OSwxOCBAQCBib29sIFdlYkRlYnVnZ2VyQWdlbnQ6OmVuYWJsZWQoKSBjb25z
dAogICAgIHJldHVybiBtX2luc3RydW1lbnRpbmdBZ2VudHMuZW5hYmxlZFdlYkRlYnVnZ2VyQWdl
bnQoKSA9PSB0aGlzICYmIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmVuYWJsZWQoKTsKIH0KIAot
dm9pZCBXZWJEZWJ1Z2dlckFnZW50OjplbmFibGUoKQordm9pZCBXZWJEZWJ1Z2dlckFnZW50Ojpp
bnRlcm5hbEVuYWJsZSgpCiB7CiAgICAgbV9pbnN0cnVtZW50aW5nQWdlbnRzLnNldEVuYWJsZWRX
ZWJEZWJ1Z2dlckFnZW50KHRoaXMpOwogCi0gICAgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZW5h
YmxlKCk7CisgICAgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6aW50ZXJuYWxFbmFibGUoKTsKIH0K
IAotdm9pZCBXZWJEZWJ1Z2dlckFnZW50OjpkaXNhYmxlKGJvb2wgaXNCZWluZ0Rlc3Ryb3llZCkK
K3ZvaWQgV2ViRGVidWdnZXJBZ2VudDo6aW50ZXJuYWxEaXNhYmxlKGJvb2wgaXNCZWluZ0Rlc3Ry
b3llZCkKIHsKICAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMuc2V0RW5hYmxlZFdlYkRlYnVnZ2Vy
QWdlbnQobnVsbHB0cik7CiAKLSAgICBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkaXNhYmxlKGlz
QmVpbmdEZXN0cm95ZWQpOworICAgIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmludGVybmFsRGlz
YWJsZShpc0JlaW5nRGVzdHJveWVkKTsKIH0KIAogdm9pZCBXZWJEZWJ1Z2dlckFnZW50OjpkaWRB
ZGRFdmVudExpc3RlbmVyKEV2ZW50VGFyZ2V0JiB0YXJnZXQsIGNvbnN0IEF0b21TdHJpbmcmIGV2
ZW50VHlwZSwgRXZlbnRMaXN0ZW5lciYgbGlzdGVuZXIsIGJvb2wgY2FwdHVyZSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvV2ViRGVidWdnZXJBZ2VudC5oIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9XZWJEZWJ1Z2dlckFnZW50LmgKaW5kZXgg
MTBiOTY0ODg4MWFhMDE1NjRmY2JlNzJlNzRmZmJhYzc5Njg0NTc2Mi4uYTkyMzcxZGE1ZDIzYWEw
NWVkYjY4OTg3NTllYTQxMWVlNzVhNjk4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2FnZW50cy9XZWJEZWJ1Z2dlckFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2FnZW50cy9XZWJEZWJ1Z2dlckFnZW50LmgKQEAgLTM1LDcgKzM1LDYgQEAgY2xhc3Mg
RXZlbnRUYXJnZXQ7CiBjbGFzcyBJbnN0cnVtZW50aW5nQWdlbnRzOwogY2xhc3MgUmVnaXN0ZXJl
ZEV2ZW50TGlzdGVuZXI7CiBjbGFzcyBUaW1lckJhc2U7Ci10eXBlZGVmIFN0cmluZyBFcnJvclN0
cmluZzsKIAogY2xhc3MgV2ViRGVidWdnZXJBZ2VudCA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3Bl
Y3RvckRlYnVnZ2VyQWdlbnQgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFdlYkRlYnVnZ2Vy
QWdlbnQpOwpAQCAtNTYsOCArNTUsOCBAQCBwdWJsaWM6CiAKIHByb3RlY3RlZDoKICAgICBXZWJE
ZWJ1Z2dlckFnZW50KFdlYkFnZW50Q29udGV4dCYpOwotICAgIHZvaWQgZW5hYmxlKCkgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCBkaXNhYmxlKGJvb2wgaXNCZWluZ0Rlc3Ryb3llZCkgb3ZlcnJpZGU7Cisg
ICAgdm9pZCBpbnRlcm5hbEVuYWJsZSgpIG92ZXJyaWRlOworICAgIHZvaWQgaW50ZXJuYWxEaXNh
YmxlKGJvb2wgaXNCZWluZ0Rlc3Ryb3llZCkgb3ZlcnJpZGU7CiAKICAgICB2b2lkIGRpZENsZWFy
QXN5bmNTdGFja1RyYWNlRGF0YSgpIGZpbmFsOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvYWdlbnRzL1dlYkhlYXBBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvYWdlbnRzL1dlYkhlYXBBZ2VudC5jcHAKaW5kZXggNWFhNzQ1M2QwOTU2MDc2Mjc4ZWIw
MzBmODA4ZGRmMDE0ZGFiZmI4NS4uOTI3NWU4Zjc5ZDAwZmUxYTExODIxZWQ4YTg2OWMwZTE3YjQw
ODAyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9XZWJIZWFw
QWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvV2ViSGVhcEFn
ZW50LmNwcApAQCAtMzUsNyArMzUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1l
c3BhY2UgSW5zcGVjdG9yOwogCiBzdHJ1Y3QgR2FyYmFnZUNvbGxlY3Rpb25EYXRhIHsKLSAgICBJ
bnNwZWN0b3I6OlByb3RvY29sOjpIZWFwOjpHYXJiYWdlQ29sbGVjdGlvbjo6VHlwZSB0eXBlOwor
ICAgIFByb3RvY29sOjpIZWFwOjpHYXJiYWdlQ29sbGVjdGlvbjo6VHlwZSB0eXBlOwogICAgIFNl
Y29uZHMgc3RhcnRUaW1lOwogICAgIFNlY29uZHMgZW5kVGltZTsKIH07CkBAIC0xMDMsMjUgKzEw
MywyNyBAQCBXZWJIZWFwQWdlbnQ6OldlYkhlYXBBZ2VudChXZWJBZ2VudENvbnRleHQmIGNvbnRl
eHQpCiAKIFdlYkhlYXBBZ2VudDo6fldlYkhlYXBBZ2VudCgpID0gZGVmYXVsdDsKIAotdm9pZCBX
ZWJIZWFwQWdlbnQ6OmVuYWJsZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCitQcm90b2NvbDo6
RXJyb3JTdHJpbmdPcjx2b2lkPiBXZWJIZWFwQWdlbnQ6OmVuYWJsZSgpCiB7Ci0gICAgSW5zcGVj
dG9ySGVhcEFnZW50OjplbmFibGUoZXJyb3JTdHJpbmcpOworICAgIGF1dG8gcmVzdWx0ID0gSW5z
cGVjdG9ySGVhcEFnZW50OjplbmFibGUoKTsKIAogICAgIGlmIChhdXRvKiBjb25zb2xlQWdlbnQg
PSBtX2luc3RydW1lbnRpbmdBZ2VudHMud2ViQ29uc29sZUFnZW50KCkpCiAgICAgICAgIGNvbnNv
bGVBZ2VudC0+c2V0SGVhcEFnZW50KHRoaXMpOworCisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAot
dm9pZCBXZWJIZWFwQWdlbnQ6OmRpc2FibGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nKQorUHJv
dG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gV2ViSGVhcEFnZW50OjpkaXNhYmxlKCkKIHsKICAg
ICBtX3NlbmRHYXJiYWdlQ29sbGVjdGlvbkV2ZW50c1Rhc2stPnJlc2V0KCk7CiAKICAgICBpZiAo
YXV0byogY29uc29sZUFnZW50ID0gbV9pbnN0cnVtZW50aW5nQWdlbnRzLndlYkNvbnNvbGVBZ2Vu
dCgpKQogICAgICAgICBjb25zb2xlQWdlbnQtPnNldEhlYXBBZ2VudChudWxscHRyKTsKIAotICAg
IEluc3BlY3RvckhlYXBBZ2VudDo6ZGlzYWJsZShlcnJvclN0cmluZyk7CisgICAgcmV0dXJuIElu
c3BlY3RvckhlYXBBZ2VudDo6ZGlzYWJsZSgpOwogfQogCi12b2lkIFdlYkhlYXBBZ2VudDo6ZGlz
cGF0Y2hHYXJiYWdlQ29sbGVjdGVkRXZlbnQoSW5zcGVjdG9yOjpQcm90b2NvbDo6SGVhcDo6R2Fy
YmFnZUNvbGxlY3Rpb246OlR5cGUgdHlwZSwgU2Vjb25kcyBzdGFydFRpbWUsIFNlY29uZHMgZW5k
VGltZSkKK3ZvaWQgV2ViSGVhcEFnZW50OjpkaXNwYXRjaEdhcmJhZ2VDb2xsZWN0ZWRFdmVudChQ
cm90b2NvbDo6SGVhcDo6R2FyYmFnZUNvbGxlY3Rpb246OlR5cGUgdHlwZSwgU2Vjb25kcyBzdGFy
dFRpbWUsIFNlY29uZHMgZW5kVGltZSkKIHsKICAgICAvLyBEaXNwYXRjaCB0aGUgZXZlbnQgYXN5
bmNocm9ub3VzbHkgYmVjYXVzZSB0aGlzIG1ldGhvZCBtYXkgYmUKICAgICAvLyBjYWxsZWQgYmV0
d2VlbiBjb2xsZWN0aW9uIGFuZCBzd2VlcGluZyBhbmQgd2UgZG9uJ3Qgd2FudCB0bwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9XZWJIZWFwQWdlbnQuaCBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvV2ViSGVhcEFnZW50LmgKaW5kZXggMGJjOGU2
NGFmNWE4NmE3MmQ1ZjgwNDQwZmRiMTE2M2ZlMTdlMTU3My4uYTM1ZTU3Y2M3YTcxZjhhZjQxMzg2
Mzc4N2NlZjM2YmVlNDE2ZjZiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2FnZW50cy9XZWJIZWFwQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdl
bnRzL1dlYkhlYXBBZ2VudC5oCkBAIC0zMyw3ICszMyw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogY2xhc3MgU2VuZEdhcmJhZ2VDb2xsZWN0aW9uRXZlbnRzVGFzazsKIHN0cnVjdCBHYXJiYWdl
Q29sbGVjdGlvbkRhdGE7Ci10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKIAogY2xhc3MgV2Vi
SGVhcEFnZW50IDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9ySGVhcEFnZW50IHsKICAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShXZWJIZWFwQWdlbnQpOwpAQCAtNDQsOCArNDMsOCBAQCBwdWJs
aWM6CiAgICAgfldlYkhlYXBBZ2VudCgpIG92ZXJyaWRlOwogCiAgICAgLy8gSGVhcEJhY2tlbmRE
aXNwYXRjaGVySGFuZGxlcgotICAgIHZvaWQgZW5hYmxlKEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7
Ci0gICAgdm9pZCBkaXNhYmxlKEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7CisgICAgSW5zcGVjdG9y
OjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBlbmFibGUoKSBvdmVycmlkZTsKKyAgICBJ
bnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGRpc2FibGUoKSBvdmVycmlk
ZTsKIAogcHJvdGVjdGVkOgogICAgIHZvaWQgZGlzcGF0Y2hHYXJiYWdlQ29sbGVjdGVkRXZlbnQo
SW5zcGVjdG9yOjpQcm90b2NvbDo6SGVhcDo6R2FyYmFnZUNvbGxlY3Rpb246OlR5cGUsIFNlY29u
ZHMgc3RhcnRUaW1lLCBTZWNvbmRzIGVuZFRpbWUpIGZpbmFsOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VBdWRpdEFnZW50LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlQXVkaXRBZ2VudC5jcHAKaW5kZXgg
ZGRkNTNiYTVkZmJjYTU1MzdiYmI2YjdiZTA2NTA1N2Q3MmZiYWJkOC4uOWFjZmU0ZGQ0YjE2MGVl
OWIzODkxMGNjOWM3NWEyNDEyNGNlZmVkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VBdWRpdEFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZUF1ZGl0QWdlbnQuY3BwCkBAIC01Niw3ICs1Niw3
IEBAIFBhZ2VBdWRpdEFnZW50OjpQYWdlQXVkaXRBZ2VudChQYWdlQWdlbnRDb250ZXh0JiBjb250
ZXh0KQogCiBQYWdlQXVkaXRBZ2VudDo6flBhZ2VBdWRpdEFnZW50KCkgPSBkZWZhdWx0OwogCi1J
bmplY3RlZFNjcmlwdCBQYWdlQXVkaXRBZ2VudDo6aW5qZWN0ZWRTY3JpcHRGb3JFdmFsKGNvbnN0
IGludCogZXhlY3V0aW9uQ29udGV4dElkKQorSW5qZWN0ZWRTY3JpcHQgUGFnZUF1ZGl0QWdlbnQ6
OmluamVjdGVkU2NyaXB0Rm9yRXZhbChPcHRpb25hbDxQcm90b2NvbDo6UnVudGltZTo6RXhlY3V0
aW9uQ29udGV4dElkPiYmIGV4ZWN1dGlvbkNvbnRleHRJZCkKIHsKICAgICBpZiAoZXhlY3V0aW9u
Q29udGV4dElkKQogICAgICAgICByZXR1cm4gaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKCkuaW5qZWN0
ZWRTY3JpcHRGb3JJZCgqZXhlY3V0aW9uQ29udGV4dElkKTsKQEAgLTY1LDkgKzY1LDkgQEAgSW5q
ZWN0ZWRTY3JpcHQgUGFnZUF1ZGl0QWdlbnQ6OmluamVjdGVkU2NyaXB0Rm9yRXZhbChjb25zdCBp
bnQqIGV4ZWN1dGlvbkNvbnRleHQKICAgICByZXR1cm4gaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKCku
aW5qZWN0ZWRTY3JpcHRGb3Ioc2NyaXB0U3RhdGUpOwogfQogCi1JbmplY3RlZFNjcmlwdCBQYWdl
QXVkaXRBZ2VudDo6aW5qZWN0ZWRTY3JpcHRGb3JFdmFsKEVycm9yU3RyaW5nJiBlcnJvclN0cmlu
ZywgY29uc3QgaW50KiBleGVjdXRpb25Db250ZXh0SWQpCitJbmplY3RlZFNjcmlwdCBQYWdlQXVk
aXRBZ2VudDo6aW5qZWN0ZWRTY3JpcHRGb3JFdmFsKFByb3RvY29sOjpFcnJvclN0cmluZyYgZXJy
b3JTdHJpbmcsIE9wdGlvbmFsPFByb3RvY29sOjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0SWQ+
JiYgZXhlY3V0aW9uQ29udGV4dElkKQogewotICAgIEluamVjdGVkU2NyaXB0IGluamVjdGVkU2Ny
aXB0ID0gaW5qZWN0ZWRTY3JpcHRGb3JFdmFsKGV4ZWN1dGlvbkNvbnRleHRJZCk7CisgICAgSW5q
ZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHQgPSBpbmplY3RlZFNjcmlwdEZvckV2YWwoV1RGTW92
ZShleGVjdXRpb25Db250ZXh0SWQpKTsKICAgICBpZiAoaW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1
ZSgpKSB7CiAgICAgICAgIGlmIChleGVjdXRpb25Db250ZXh0SWQpCiAgICAgICAgICAgICBlcnJv
clN0cmluZyA9ICJNaXNzaW5nIGluamVjdGVkIHNjcmlwdCBmb3IgZ2l2ZW4gZXhlY3V0aW9uQ29u
dGV4dElkIl9zOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9w
YWdlL1BhZ2VBdWRpdEFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3Bh
Z2UvUGFnZUF1ZGl0QWdlbnQuaAppbmRleCBkZGVjNDY1MTdlMWEwNWNiZjViZjhmZmQ3ZDFhYzg4
OGEwODk0Zjc5Li42OTNmYWMzMjc0NjlhOTA0NGQ4NzAxNzZmYWEyYTFkNDlmYmExYjM5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZUF1ZGl0QWdl
bnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZUF1ZGl0
QWdlbnQuaApAQCAtMzcsMTYgKzM3LDE2IEBAIGNsYXNzIFBhZ2VBdWRpdEFnZW50IGZpbmFsIDog
cHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yQXVkaXRBZ2VudCB7CiAgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgUGFnZUF1ZGl0QWdlbnQoUGFnZUFnZW50Q29udGV4
dCYpOwotICAgIH5QYWdlQXVkaXRBZ2VudCgpIG92ZXJyaWRlOworICAgIH5QYWdlQXVkaXRBZ2Vu
dCgpOwogCiBwcml2YXRlOgotICAgIEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRT
Y3JpcHRGb3JFdmFsKGNvbnN0IGludCogZXhlY3V0aW9uQ29udGV4dElkKTsKLSAgICBJbnNwZWN0
b3I6OkluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0Rm9yRXZhbChJbnNwZWN0b3I6OkVycm9y
U3RyaW5nJiwgY29uc3QgaW50KiBleGVjdXRpb25Db250ZXh0SWQpIG92ZXJyaWRlOworICAgIElu
c3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHRGb3JFdmFsKE9wdGlvbmFsPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkV4ZWN1dGlvbkNvbnRleHRJZD4mJik7CisgICAg
SW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdEZvckV2YWwoSW5zcGVjdG9y
OjpQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpS
dW50aW1lOjpFeGVjdXRpb25Db250ZXh0SWQ+JiYpOwogCi0gICAgdm9pZCBwb3B1bGF0ZUF1ZGl0
T2JqZWN0KEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlN0cm9uZzxKU0M6OkpTT2JqZWN0PiYg
YXVkaXRPYmplY3QpIG92ZXJyaWRlOworICAgIHZvaWQgcG9wdWxhdGVBdWRpdE9iamVjdChKU0M6
OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJvbmc8SlNDOjpKU09iamVjdD4mIGF1ZGl0T2JqZWN0
KTsKIAotICAgIHZvaWQgbXV0ZUNvbnNvbGUoKSBvdmVycmlkZTsKLSAgICB2b2lkIHVubXV0ZUNv
bnNvbGUoKSBvdmVycmlkZTsKKyAgICB2b2lkIG11dGVDb25zb2xlKCk7CisgICAgdm9pZCB1bm11
dGVDb25zb2xlKCk7CiAKICAgICBQYWdlJiBtX2luc3BlY3RlZFBhZ2U7CiB9OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VDb25zb2xlQWdlbnQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VDb25zb2xlQWdl
bnQuY3BwCmluZGV4IDEzZmQxZDdkYWJhYTk5ZDBiYjBjNDlmZjdiYjVlNTJmNTRjNjYzZDMuLjEy
MTJiODY2ZDllMjg5OTY3N2E5M2ZkNzE2YzFlODY4ZDNjMWZmZmIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlQ29uc29sZUFnZW50LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZUNvbnNvbGVBZ2VudC5j
cHAKQEAgLTU0LDc5ICs1NCw4MyBAQCBQYWdlQ29uc29sZUFnZW50OjpQYWdlQ29uc29sZUFnZW50
KFBhZ2VBZ2VudENvbnRleHQmIGNvbnRleHQpCiAKIFBhZ2VDb25zb2xlQWdlbnQ6On5QYWdlQ29u
c29sZUFnZW50KCkgPSBkZWZhdWx0OwogCi12b2lkIFBhZ2VDb25zb2xlQWdlbnQ6OmNsZWFyTWVz
c2FnZXMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8
dm9pZD4gUGFnZUNvbnNvbGVBZ2VudDo6Y2xlYXJNZXNzYWdlcygpCiB7CiAgICAgaWYgKGF1dG8q
IGRvbUFnZW50ID0gbV9pbnN0cnVtZW50aW5nQWdlbnRzLnBlcnNpc3RlbnRET01BZ2VudCgpKQog
ICAgICAgICBkb21BZ2VudC0+cmVsZWFzZURhbmdsaW5nTm9kZXMoKTsKIAotICAgIFdlYkNvbnNv
bGVBZ2VudDo6Y2xlYXJNZXNzYWdlcyhlcnJvclN0cmluZyk7CisgICAgcmV0dXJuIFdlYkNvbnNv
bGVBZ2VudDo6Y2xlYXJNZXNzYWdlcygpOwogfQogCi12b2lkIFBhZ2VDb25zb2xlQWdlbnQ6Omdl
dExvZ2dpbmdDaGFubmVscyhFcnJvclN0cmluZyYsIFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWw+PiYgY2hhbm5lbHMpCitQcm90b2NvbDo6
RXJyb3JTdHJpbmdPcjxSZWY8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6Q29uc29sZTo6Q2hhbm5l
bD4+PiBQYWdlQ29uc29sZUFnZW50OjpnZXRMb2dnaW5nQ2hhbm5lbHMoKQogewotICAgIHN0YXRp
YyBjb25zdCBzdHJ1Y3QgQ2hhbm5lbFRhYmxlIHsKLSAgICAgICAgTmV2ZXJEZXN0cm95ZWQ8U3Ry
aW5nPiBuYW1lOwotICAgICAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpDb25zb2xlOjpDaGFubmVs
U291cmNlIHNvdXJjZTsKLSAgICB9IGNoYW5uZWxUYWJsZVtdID0gewotICAgICAgICB7IE1BS0Vf
U1RBVElDX1NUUklOR19JTVBMKCJXZWJSVEMiKSwgSW5zcGVjdG9yOjpQcm90b2NvbDo6Q29uc29s
ZTo6Q2hhbm5lbFNvdXJjZTo6V2ViUlRDIH0sCi0gICAgICAgIHsgTUFLRV9TVEFUSUNfU1RSSU5H
X0lNUEwoIk1lZGlhIiksIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWxTb3Vy
Y2U6Ok1lZGlhIH0sCi0gICAgICAgIHsgTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwoIk1lZGlhU291
cmNlIiksIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWxTb3VyY2U6Ok1lZGlh
U291cmNlIH0sCi0gICAgfTsKKyAgICBhdXRvIGNoYW5uZWxzID0gSlNPTjo6QXJyYXlPZjxQcm90
b2NvbDo6Q29uc29sZTo6Q2hhbm5lbD46OmNyZWF0ZSgpOwogCi0gICAgY2hhbm5lbHMgPSBKU09O
OjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWw+OjpjcmVhdGUo
KTsKLQotICAgIHNpemVfdCBsZW5ndGggPSBXVEZfQVJSQVlfTEVOR1RIKGNoYW5uZWxUYWJsZSk7
Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICBhdXRv
KiBsb2dDaGFubmVsID0gZ2V0TG9nQ2hhbm5lbChjaGFubmVsVGFibGVbaV0ubmFtZSk7CisgICAg
YXV0byBhZGRMb2dDaGFubmVsID0gWyZdIChQcm90b2NvbDo6Q29uc29sZTo6Q2hhbm5lbFNvdXJj
ZSBzb3VyY2UpIHsKKyAgICAgICAgYXV0byogbG9nQ2hhbm5lbCA9IGdldExvZ0NoYW5uZWwoUHJv
dG9jb2w6OkhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKHNvdXJjZSkpOwogICAgICAgICBp
ZiAoIWxvZ0NoYW5uZWwpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgYXV0byBsZXZl
bCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWxMZXZlbDo6T2ZmOworICAg
ICAgICBhdXRvIGxldmVsID0gUHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWxMZXZlbDo6T2ZmOwog
ICAgICAgICBpZiAobG9nQ2hhbm5lbC0+c3RhdGUgIT0gV1RGTG9nQ2hhbm5lbFN0YXRlOjpPZmYp
IHsKICAgICAgICAgICAgIHN3aXRjaCAobG9nQ2hhbm5lbC0+bGV2ZWwpIHsKICAgICAgICAgICAg
IGNhc2UgV1RGTG9nTGV2ZWw6OkFsd2F5czoKICAgICAgICAgICAgIGNhc2UgV1RGTG9nTGV2ZWw6
OkVycm9yOgogICAgICAgICAgICAgY2FzZSBXVEZMb2dMZXZlbDo6V2FybmluZzoKICAgICAgICAg
ICAgIGNhc2UgV1RGTG9nTGV2ZWw6OkluZm86Ci0gICAgICAgICAgICAgICAgbGV2ZWwgPSBJbnNw
ZWN0b3I6OlByb3RvY29sOjpDb25zb2xlOjpDaGFubmVsTGV2ZWw6OkJhc2ljOworICAgICAgICAg
ICAgICAgIGxldmVsID0gUHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWxMZXZlbDo6QmFzaWM7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CisKICAgICAgICAgICAgIGNhc2UgV1RGTG9nTGV2ZWw6OkRl
YnVnOgotICAgICAgICAgICAgICAgIGxldmVsID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q29uc29s
ZTo6Q2hhbm5lbExldmVsOjpWZXJib3NlOworICAgICAgICAgICAgICAgIGxldmVsID0gUHJvdG9j
b2w6OkNvbnNvbGU6OkNoYW5uZWxMZXZlbDo6VmVyYm9zZTsKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIGF1dG8gY2hhbm5lbCA9IElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWw6OmNyZWF0ZSgpCi0gICAgICAgICAg
ICAuc2V0U291cmNlKGNoYW5uZWxUYWJsZVtpXS5zb3VyY2UpCisgICAgICAgIGF1dG8gY2hhbm5l
bCA9IFByb3RvY29sOjpDb25zb2xlOjpDaGFubmVsOjpjcmVhdGUoKQorICAgICAgICAgICAgLnNl
dFNvdXJjZShzb3VyY2UpCiAgICAgICAgICAgICAuc2V0TGV2ZWwobGV2ZWwpCiAgICAgICAgICAg
ICAucmVsZWFzZSgpOwogICAgICAgICBjaGFubmVscy0+YWRkSXRlbShXVEZNb3ZlKGNoYW5uZWwp
KTsKLSAgICB9CisgICAgfTsKKyAgICBhZGRMb2dDaGFubmVsKFByb3RvY29sOjpDb25zb2xlOjpD
aGFubmVsU291cmNlOjpYTUwpOworICAgIGFkZExvZ0NoYW5uZWwoUHJvdG9jb2w6OkNvbnNvbGU6
OkNoYW5uZWxTb3VyY2U6OkphdmFTY3JpcHQpOworICAgIGFkZExvZ0NoYW5uZWwoUHJvdG9jb2w6
OkNvbnNvbGU6OkNoYW5uZWxTb3VyY2U6Ok5ldHdvcmspOworICAgIGFkZExvZ0NoYW5uZWwoUHJv
dG9jb2w6OkNvbnNvbGU6OkNoYW5uZWxTb3VyY2U6OkNvbnNvbGVBUEkpOworICAgIGFkZExvZ0No
YW5uZWwoUHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWxTb3VyY2U6OlN0b3JhZ2UpOworICAgIGFk
ZExvZ0NoYW5uZWwoUHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWxTb3VyY2U6OkFwcGNhY2hlKTsK
KyAgICBhZGRMb2dDaGFubmVsKFByb3RvY29sOjpDb25zb2xlOjpDaGFubmVsU291cmNlOjpSZW5k
ZXJpbmcpOworICAgIGFkZExvZ0NoYW5uZWwoUHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWxTb3Vy
Y2U6OkNTUyk7CisgICAgYWRkTG9nQ2hhbm5lbChQcm90b2NvbDo6Q29uc29sZTo6Q2hhbm5lbFNv
dXJjZTo6U2VjdXJpdHkpOworICAgIGFkZExvZ0NoYW5uZWwoUHJvdG9jb2w6OkNvbnNvbGU6OkNo
YW5uZWxTb3VyY2U6OkNvbnRlbnRCbG9ja2VyKTsKKyAgICBhZGRMb2dDaGFubmVsKFByb3RvY29s
OjpDb25zb2xlOjpDaGFubmVsU291cmNlOjpNZWRpYSk7CisgICAgYWRkTG9nQ2hhbm5lbChQcm90
b2NvbDo6Q29uc29sZTo6Q2hhbm5lbFNvdXJjZTo6TWVkaWFTb3VyY2UpOworICAgIGFkZExvZ0No
YW5uZWwoUHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWxTb3VyY2U6OldlYlJUQyk7CisgICAgYWRk
TG9nQ2hhbm5lbChQcm90b2NvbDo6Q29uc29sZTo6Q2hhbm5lbFNvdXJjZTo6SVRQRGVidWcpOwor
ICAgIGFkZExvZ0NoYW5uZWwoUHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWxTb3VyY2U6OkFkQ2xp
Y2tBdHRyaWJ1dGlvbik7CisgICAgYWRkTG9nQ2hhbm5lbChQcm90b2NvbDo6Q29uc29sZTo6Q2hh
bm5lbFNvdXJjZTo6T3RoZXIpOworCisgICAgcmV0dXJuIFdURk1vdmUoY2hhbm5lbHMpOwogfQog
Ci1zdGF0aWMgT3B0aW9uYWw8c3RkOjpwYWlyPFdURkxvZ0NoYW5uZWxTdGF0ZSwgV1RGTG9nTGV2
ZWw+PiBjaGFubmVsQ29uZmlndXJhdGlvbkZvclN0cmluZyhjb25zdCBTdHJpbmcmIGxldmVsU3Ry
aW5nKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gUGFnZUNvbnNvbGVBZ2VudDo6c2V0
TG9nZ2luZ0NoYW5uZWxMZXZlbChQcm90b2NvbDo6Q29uc29sZTo6Q2hhbm5lbFNvdXJjZSBzb3Vy
Y2UsIFByb3RvY29sOjpDb25zb2xlOjpDaGFubmVsTGV2ZWwgbGV2ZWwpCiB7Ci0gICAgaWYgKGVx
dWFsSWdub3JpbmdBU0NJSUNhc2UobGV2ZWxTdHJpbmcsICJvZmYiKSkKLSAgICAgICAgcmV0dXJu
IHsgeyBXVEZMb2dDaGFubmVsU3RhdGU6Ok9mZiwgV1RGTG9nTGV2ZWw6OkVycm9yIH0gfTsKKyAg
ICBzd2l0Y2ggKGxldmVsKSB7CisgICAgY2FzZSBQcm90b2NvbDo6Q29uc29sZTo6Q2hhbm5lbExl
dmVsOjpPZmY6CisgICAgICAgIG1faW5zcGVjdGVkUGFnZS5jb25maWd1cmVMb2dnaW5nQ2hhbm5l
bChQcm90b2NvbDo6SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUoc291cmNlKSwgV1RGTG9n
Q2hhbm5lbFN0YXRlOjpPZmYsIFdURkxvZ0xldmVsOjpFcnJvcik7CisgICAgICAgIHJldHVybiB7
IH07CiAKLSAgICBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShsZXZlbFN0cmluZywgImJhc2lj
IikpCi0gICAgICAgIHJldHVybiB7IHsgV1RGTG9nQ2hhbm5lbFN0YXRlOjpPbiwgV1RGTG9nTGV2
ZWw6OkluZm8gfSB9OworICAgIGNhc2UgUHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWxMZXZlbDo6
QmFzaWM6CisgICAgICAgIG1faW5zcGVjdGVkUGFnZS5jb25maWd1cmVMb2dnaW5nQ2hhbm5lbChQ
cm90b2NvbDo6SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUoc291cmNlKSwgV1RGTG9nQ2hh
bm5lbFN0YXRlOjpPbiwgV1RGTG9nTGV2ZWw6OkluZm8pOworICAgICAgICByZXR1cm4geyB9Owog
Ci0gICAgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UobGV2ZWxTdHJpbmcsICJ2ZXJib3NlIikp
Ci0gICAgICAgIHJldHVybiB7IHsgV1RGTG9nQ2hhbm5lbFN0YXRlOjpPbiwgV1RGTG9nTGV2ZWw6
OkRlYnVnIH0gfTsKLQotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLXZvaWQgUGFnZUNv
bnNvbGVBZ2VudDo6c2V0TG9nZ2luZ0NoYW5uZWxMZXZlbChFcnJvclN0cmluZyYgZXJyb3JTdHJp
bmcsIGNvbnN0IFN0cmluZyYgY2hhbm5lbE5hbWUsIGNvbnN0IFN0cmluZyYgY2hhbm5lbExldmVs
KQotewotICAgIGF1dG8gY29uZmlndXJhdGlvbiA9IGNoYW5uZWxDb25maWd1cmF0aW9uRm9yU3Ry
aW5nKGNoYW5uZWxMZXZlbCk7Ci0gICAgaWYgKCFjb25maWd1cmF0aW9uKSB7Ci0gICAgICAgIGVy
cm9yU3RyaW5nID0gbWFrZVN0cmluZygiVW5rbm93biBjaGFubmVsTGV2ZWw6ICJfcywgY2hhbm5l
bExldmVsKTsKLSAgICAgICAgcmV0dXJuOworICAgIGNhc2UgUHJvdG9jb2w6OkNvbnNvbGU6OkNo
YW5uZWxMZXZlbDo6VmVyYm9zZToKKyAgICAgICAgbV9pbnNwZWN0ZWRQYWdlLmNvbmZpZ3VyZUxv
Z2dpbmdDaGFubmVsKFByb3RvY29sOjpIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShzb3Vy
Y2UpLCBXVEZMb2dDaGFubmVsU3RhdGU6Ok9uLCBXVEZMb2dMZXZlbDo6RGVidWcpOworICAgICAg
ICByZXR1cm4geyB9OwogICAgIH0KIAotICAgIG1faW5zcGVjdGVkUGFnZS5jb25maWd1cmVMb2dn
aW5nQ2hhbm5lbChjaGFubmVsTmFtZSwgY29uZmlndXJhdGlvbi52YWx1ZSgpLmZpcnN0LCBjb25m
aWd1cmF0aW9uLnZhbHVlKCkuc2Vjb25kKTsKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICByZXR1cm4geyB9OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZUNvbnNvbGVBZ2VudC5oIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VDb25zb2xlQWdlbnQuaApp
bmRleCA0YzQ1ZjJkYWQwZjdjMWI0MDQ1MzlmZTRmNTdlNWE4NmRiMjA2MzE4Li40MWZlNzZkMDMy
MDcwZTBkNDEwM2U0MGEyYzE0NGNlMzc5ODFjODMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZUNvbnNvbGVBZ2VudC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlQ29uc29sZUFnZW50LmgKQEAgLTQxLDEy
ICs0MSwxMiBAQCBjbGFzcyBQYWdlQ29uc29sZUFnZW50IGZpbmFsIDogcHVibGljIFdlYkNvbnNv
bGVBZ2VudCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgUGFn
ZUNvbnNvbGVBZ2VudChQYWdlQWdlbnRDb250ZXh0Jik7Ci0gICAgflBhZ2VDb25zb2xlQWdlbnQo
KSBvdmVycmlkZTsKKyAgICB+UGFnZUNvbnNvbGVBZ2VudCgpOwogCiAgICAgLy8gQ29uc29sZUJh
Y2tlbmREaXNwYXRjaGVySGFuZGxlcgotICAgIHZvaWQgY2xlYXJNZXNzYWdlcyhFcnJvclN0cmlu
ZyYpIG92ZXJyaWRlOwotICAgIHZvaWQgZ2V0TG9nZ2luZ0NoYW5uZWxzKEVycm9yU3RyaW5nJiwg
UmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q29uc29sZTo6Q2hhbm5l
bD4+Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRMb2dnaW5nQ2hhbm5lbExldmVsKEVycm9yU3Ry
aW5nJiwgY29uc3QgU3RyaW5nJiBjaGFubmVsLCBjb25zdCBTdHJpbmcmIGxldmVsKSBvdmVycmlk
ZTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGNsZWFyTWVz
c2FnZXMoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxKU09O
OjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWw+Pj4gZ2V0TG9n
Z2luZ0NoYW5uZWxzKCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2
b2lkPiBzZXRMb2dnaW5nQ2hhbm5lbExldmVsKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNvbnNvbGU6
OkNoYW5uZWxTb3VyY2UsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWxMZXZl
bCk7CiAKIHByaXZhdGU6CiAgICAgSW5zdHJ1bWVudGluZ0FnZW50cyYgbV9pbnN0cnVtZW50aW5n
QWdlbnRzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdl
L1BhZ2VET01EZWJ1Z2dlckFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2Vu
dHMvcGFnZS9QYWdlRE9NRGVidWdnZXJBZ2VudC5jcHAKaW5kZXggN2M1ZmZhNGUzODNmNTJjYWI1
ZTJhMjdmZDkxNTkwOWZiY2VmNTE0Yy4uYzg4YmJkYzAzZDI1NDEwZmI2OTU4YjBmMDlhZmM1YmYx
ODhkYjI1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdl
L1BhZ2VET01EZWJ1Z2dlckFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
YWdlbnRzL3BhZ2UvUGFnZURPTURlYnVnZ2VyQWdlbnQuY3BwCkBAIC02OSw4NCArNjksNzQgQEAg
dm9pZCBQYWdlRE9NRGVidWdnZXJBZ2VudDo6ZGlzYWJsZSgpCiAgICAgSW5zcGVjdG9yRE9NRGVi
dWdnZXJBZ2VudDo6ZGlzYWJsZSgpOwogfQogCi12b2lkIFBhZ2VET01EZWJ1Z2dlckFnZW50Ojpz
ZXRET01CcmVha3BvaW50KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJZCwgY29u
c3QgU3RyaW5nJiB0eXBlU3RyaW5nLCBjb25zdCBKU09OOjpPYmplY3QqIG9wdGlvbnNQYXlsb2Fk
KQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gUGFnZURPTURlYnVnZ2VyQWdlbnQ6OnNl
dERPTUJyZWFrcG9pbnQoUHJvdG9jb2w6OkRPTTo6Tm9kZUlkIG5vZGVJZCwgUHJvdG9jb2w6OkRP
TURlYnVnZ2VyOjpET01CcmVha3BvaW50VHlwZSB0eXBlLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYm
IG9wdGlvbnMpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAg
ICAgYXV0byogZG9tQWdlbnQgPSBtX2luc3RydW1lbnRpbmdBZ2VudHMucGVyc2lzdGVudERPTUFn
ZW50KCk7Ci0gICAgaWYgKCFkb21BZ2VudCkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJET00g
ZG9tYWluIG11c3QgYmUgZW5hYmxlZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBp
ZiAoIWRvbUFnZW50KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkRPTSBkb21haW4g
bXVzdCBiZSBlbmFibGVkIl9zKTsKIAogICAgIE5vZGUqIG5vZGUgPSBkb21BZ2VudC0+YXNzZXJ0
Tm9kZShlcnJvclN0cmluZywgbm9kZUlkKTsKICAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJldHVy
bjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAotICAgIGF1
dG8gdHlwZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6Okluc3BlY3RvckhlbHBlcnM6OnBhcnNlRW51
bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpET01EZWJ1Z2dlcjo6RE9NQnJl
YWtwb2ludFR5cGU+KHR5cGVTdHJpbmcpOwotICAgIGlmICghdHlwZSkgewotICAgICAgICBlcnJv
clN0cmluZyA9IG1ha2VTdHJpbmcoIlVua25vd24gdHlwZTogIl9zLCB0eXBlU3RyaW5nKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8gYnJlYWtwb2ludCA9IEluc3BlY3RvckRl
YnVnZ2VyQWdlbnQ6OmRlYnVnZ2VyQnJlYWtwb2ludEZyb21QYXlsb2FkKGVycm9yU3RyaW5nLCBv
cHRpb25zUGF5bG9hZCk7CisgICAgYXV0byBicmVha3BvaW50ID0gSW5zcGVjdG9yRGVidWdnZXJB
Z2VudDo6ZGVidWdnZXJCcmVha3BvaW50RnJvbVBheWxvYWQoZXJyb3JTdHJpbmcsIFdURk1vdmUo
b3B0aW9ucykpOwogICAgIGlmICghYnJlYWtwb2ludCkKLSAgICAgICAgcmV0dXJuOworICAgICAg
ICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCi0gICAgc3dpdGNoICgqdHlw
ZSkgewotICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NRGVidWdnZXI6OkRPTUJyZWFr
cG9pbnRUeXBlOjpTdWJ0cmVlTW9kaWZpZWQ6CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2Fz
ZSBQcm90b2NvbDo6RE9NRGVidWdnZXI6OkRPTUJyZWFrcG9pbnRUeXBlOjpTdWJ0cmVlTW9kaWZp
ZWQ6CiAgICAgICAgIGlmICghbV9kb21TdWJ0cmVlTW9kaWZpZWRCcmVha3BvaW50cy5hZGQobm9k
ZSwgYnJlYWtwb2ludC5yZWxlYXNlTm9uTnVsbCgpKSkKLSAgICAgICAgICAgIGVycm9yU3RyaW5n
ID0gIkJyZWFrcG9pbnQgZm9yIGdpdmVuIG5vZGUgYW5kIGdpdmVuIHR5cGUgYWxyZWFkeSBleGlz
dHMiX3M7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3Rl
ZCgiQnJlYWtwb2ludCBmb3IgZ2l2ZW4gbm9kZSBhbmQgZ2l2ZW4gdHlwZSBhbHJlYWR5IGV4aXN0
cyJfcyk7CisgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBjYXNlIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRPTURlYnVnZ2VyOjpET01CcmVha3BvaW50VHlwZTo6QXR0cmlidXRlTW9kaWZpZWQ6Cisg
ICAgY2FzZSBQcm90b2NvbDo6RE9NRGVidWdnZXI6OkRPTUJyZWFrcG9pbnRUeXBlOjpBdHRyaWJ1
dGVNb2RpZmllZDoKICAgICAgICAgaWYgKCFtX2RvbUF0dHJpYnV0ZU1vZGlmaWVkQnJlYWtwb2lu
dHMuYWRkKG5vZGUsIGJyZWFrcG9pbnQucmVsZWFzZU5vbk51bGwoKSkpCi0gICAgICAgICAgICBl
cnJvclN0cmluZyA9ICJCcmVha3BvaW50IGZvciBnaXZlbiBub2RlIGFuZCBnaXZlbiB0eXBlIGFs
cmVhZHkgZXhpc3RzIl9zOwotICAgICAgICByZXR1cm47CisgICAgICAgICAgICByZXR1cm4gbWFr
ZVVuZXhwZWN0ZWQoIkJyZWFrcG9pbnQgZm9yIGdpdmVuIG5vZGUgYW5kIGdpdmVuIHR5cGUgYWxy
ZWFkeSBleGlzdHMiX3MpOworICAgICAgICByZXR1cm4geyB9OwogCi0gICAgY2FzZSBJbnNwZWN0
b3I6OlByb3RvY29sOjpET01EZWJ1Z2dlcjo6RE9NQnJlYWtwb2ludFR5cGU6Ok5vZGVSZW1vdmVk
OgorICAgIGNhc2UgUHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpET01CcmVha3BvaW50VHlwZTo6Tm9k
ZVJlbW92ZWQ6CiAgICAgICAgIGlmICghbV9kb21Ob2RlUmVtb3ZlZEJyZWFrcG9pbnRzLmFkZChu
b2RlLCBicmVha3BvaW50LnJlbGVhc2VOb25OdWxsKCkpKQotICAgICAgICAgICAgZXJyb3JTdHJp
bmcgPSAiQnJlYWtwb2ludCBmb3IgZ2l2ZW4gbm9kZSBhbmQgZ2l2ZW4gdHlwZSBhbHJlYWR5IGV4
aXN0cyJfczsKLSAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVj
dGVkKCJCcmVha3BvaW50IGZvciBnaXZlbiBub2RlIGFuZCBnaXZlbiB0eXBlIGFscmVhZHkgZXhp
c3RzIl9zKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk5vdCBzdXBwb3J0ZWQiKTsKIH0K
IAotdm9pZCBQYWdlRE9NRGVidWdnZXJBZ2VudDo6cmVtb3ZlRE9NQnJlYWtwb2ludChFcnJvclN0
cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQsIGNvbnN0IFN0cmluZyYgdHlwZVN0cmluZykK
K1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IFBhZ2VET01EZWJ1Z2dlckFnZW50OjpyZW1v
dmVET01CcmVha3BvaW50KFByb3RvY29sOjpET006Ok5vZGVJZCBub2RlSWQsIFByb3RvY29sOjpE
T01EZWJ1Z2dlcjo6RE9NQnJlYWtwb2ludFR5cGUgdHlwZSkKIHsKKyAgICBQcm90b2NvbDo6RXJy
b3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBhdXRvKiBkb21BZ2VudCA9IG1faW5zdHJ1bWVu
dGluZ0FnZW50cy5wZXJzaXN0ZW50RE9NQWdlbnQoKTsKLSAgICBpZiAoIWRvbUFnZW50KSB7Ci0g
ICAgICAgIGVycm9yU3RyaW5nID0gIkRPTSBkb21haW4gbXVzdCBiZSBlbmFibGVkIl9zOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghZG9tQWdlbnQpCisgICAgICAgIHJldHVybiBt
YWtlVW5leHBlY3RlZCgiRE9NIGRvbWFpbiBtdXN0IGJlIGVuYWJsZWQiX3MpOwogCiAgICAgTm9k
ZSogbm9kZSA9IGRvbUFnZW50LT5hc3NlcnROb2RlKGVycm9yU3RyaW5nLCBub2RlSWQpOwogICAg
IGlmICghbm9kZSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0
ZWQoZXJyb3JTdHJpbmcpOwogCi0gICAgYXV0byB0eXBlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6
SW5zcGVjdG9ySGVscGVyczo6cGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRPTURlYnVnZ2VyOjpET01CcmVha3BvaW50VHlwZT4odHlwZVN0cmluZyk7Ci0gICAg
aWYgKCF0eXBlKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gbWFrZVN0cmluZygiVW5rbm93biB0
eXBlOiAiX3MsIHR5cGVTdHJpbmcpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgc3dp
dGNoICgqdHlwZSkgewotICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NRGVidWdnZXI6
OkRPTUJyZWFrcG9pbnRUeXBlOjpTdWJ0cmVlTW9kaWZpZWQ6CisgICAgc3dpdGNoICh0eXBlKSB7
CisgICAgY2FzZSBQcm90b2NvbDo6RE9NRGVidWdnZXI6OkRPTUJyZWFrcG9pbnRUeXBlOjpTdWJ0
cmVlTW9kaWZpZWQ6CiAgICAgICAgIGlmICghbV9kb21TdWJ0cmVlTW9kaWZpZWRCcmVha3BvaW50
cy5yZW1vdmUobm9kZSkpCi0gICAgICAgICAgICBlcnJvclN0cmluZyA9ICJCcmVha3BvaW50IGZv
ciBnaXZlbiBub2RlIGFuZCBnaXZlbiB0eXBlIG1pc3NpbmciX3M7Ci0gICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiQnJlYWtwb2ludCBmb3IgZ2l2ZW4g
bm9kZSBhbmQgZ2l2ZW4gdHlwZSBtaXNzaW5nIl9zKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAot
ICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NRGVidWdnZXI6OkRPTUJyZWFrcG9pbnRU
eXBlOjpBdHRyaWJ1dGVNb2RpZmllZDoKKyAgICBjYXNlIFByb3RvY29sOjpET01EZWJ1Z2dlcjo6
RE9NQnJlYWtwb2ludFR5cGU6OkF0dHJpYnV0ZU1vZGlmaWVkOgogICAgICAgICBpZiAoIW1fZG9t
QXR0cmlidXRlTW9kaWZpZWRCcmVha3BvaW50cy5yZW1vdmUobm9kZSkpCi0gICAgICAgICAgICBl
cnJvclN0cmluZyA9ICJCcmVha3BvaW50IGZvciBnaXZlbiBub2RlIGFuZCBnaXZlbiB0eXBlIG1p
c3NpbmciX3M7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBl
Y3RlZCgiQnJlYWtwb2ludCBmb3IgZ2l2ZW4gbm9kZSBhbmQgZ2l2ZW4gdHlwZSBtaXNzaW5nIl9z
KTsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6
RE9NRGVidWdnZXI6OkRPTUJyZWFrcG9pbnRUeXBlOjpOb2RlUmVtb3ZlZDoKKyAgICBjYXNlIFBy
b3RvY29sOjpET01EZWJ1Z2dlcjo6RE9NQnJlYWtwb2ludFR5cGU6Ok5vZGVSZW1vdmVkOgogICAg
ICAgICBpZiAoIW1fZG9tTm9kZVJlbW92ZWRCcmVha3BvaW50cy5yZW1vdmUobm9kZSkpCi0gICAg
ICAgICAgICBlcnJvclN0cmluZyA9ICJCcmVha3BvaW50IGZvciBnaXZlbiBub2RlIGFuZCBnaXZl
biB0eXBlIG1pc3NpbmciX3M7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVybiBt
YWtlVW5leHBlY3RlZCgiQnJlYWtwb2ludCBmb3IgZ2l2ZW4gbm9kZSBhbmQgZ2l2ZW4gdHlwZSBt
aXNzaW5nIl9zKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk5vdCBzdXBwb3J0ZWQiKTsK
IH0KIAogdm9pZCBQYWdlRE9NRGVidWdnZXJBZ2VudDo6bWFpbkZyYW1lTmF2aWdhdGVkKCkKQEAg
LTIxMyw3ICsyMDMsNyBAQCB2b2lkIFBhZ2VET01EZWJ1Z2dlckFnZW50Ojp3aWxsSW5zZXJ0RE9N
Tm9kZShOb2RlJiBwYXJlbnQpCiAKICAgICBBU1NFUlQoY2xvc2VzdEJyZWFrcG9pbnRPd25lcik7
CiAKLSAgICBhdXRvIHBhdXNlRGF0YSA9IGJ1aWxkUGF1c2VEYXRhRm9yRE9NQnJlYWtwb2ludChJ
bnNwZWN0b3I6OlByb3RvY29sOjpET01EZWJ1Z2dlcjo6RE9NQnJlYWtwb2ludFR5cGU6OlN1YnRy
ZWVNb2RpZmllZCwgKmNsb3Nlc3RCcmVha3BvaW50T3duZXIpOworICAgIGF1dG8gcGF1c2VEYXRh
ID0gYnVpbGRQYXVzZURhdGFGb3JET01CcmVha3BvaW50KFByb3RvY29sOjpET01EZWJ1Z2dlcjo6
RE9NQnJlYWtwb2ludFR5cGU6OlN1YnRyZWVNb2RpZmllZCwgKmNsb3Nlc3RCcmVha3BvaW50T3du
ZXIpOwogICAgIHBhdXNlRGF0YS0+c2V0Qm9vbGVhbigiaW5zZXJ0aW9uIiwgdHJ1ZSk7CiAgICAg
Ly8gRklYTUU6IDxodHRwczovL3dlYmtpdC5vcmcvYi8yMTM0OTk+IFdlYiBJbnNwZWN0b3I6IGFs
bG93IERPTSBub2RlcyB0byBiZSBpbnN0cnVtZW50ZWQgYXQgYW55IHBvaW50LCByZWdhcmRsZXNz
IG9mIHdoZXRoZXIgdGhlIG1haW4gZG9jdW1lbnQgaGFzIGFsc28gYmVlbiBpbnN0cnVtZW50ZWQK
ICAgICAvLyBJbmNsdWRlIHRoZSBuZXcgY2hpbGQgbm9kZSBJRCBzbyB0aGUgZnJvbnRlbmQgY2Fu
IHNob3cgdGhlIG5vZGUgdGhhdCdzIGFib3V0IHRvIGJlIGluc2VydGVkLgpAQCAtMjMwLDcgKzIy
MCw3IEBAIHZvaWQgUGFnZURPTURlYnVnZ2VyQWdlbnQ6OndpbGxSZW1vdmVET01Ob2RlKE5vZGUm
IG5vZGUpCiAKICAgICBPcHRpb25hbDxzaXplX3Q+IGNsb3Nlc3REaXN0YW5jZTsKICAgICBSZWZQ
dHI8SlNDOjpCcmVha3BvaW50PiBjbG9zZXN0QnJlYWtwb2ludDsKLSAgICBPcHRpb25hbDxJbnNw
ZWN0b3I6OlByb3RvY29sOjpET01EZWJ1Z2dlcjo6RE9NQnJlYWtwb2ludFR5cGU+IGNsb3Nlc3RC
cmVha3BvaW50VHlwZTsKKyAgICBPcHRpb25hbDxQcm90b2NvbDo6RE9NRGVidWdnZXI6OkRPTUJy
ZWFrcG9pbnRUeXBlPiBjbG9zZXN0QnJlYWtwb2ludFR5cGU7CiAgICAgTm9kZSogY2xvc2VzdEJy
ZWFrcG9pbnRPd25lciA9IG51bGxwdHI7CiAKICAgICBmb3IgKGF1dG8gW2JyZWFrcG9pbnRPd25l
ciwgYnJlYWtwb2ludF0gOiBtX2RvbU5vZGVSZW1vdmVkQnJlYWtwb2ludHMpIHsKQEAgLTI0MSw3
ICsyMzEsNyBAQCB2b2lkIFBhZ2VET01EZWJ1Z2dlckFnZW50Ojp3aWxsUmVtb3ZlRE9NTm9kZShO
b2RlJiBub2RlKQogICAgICAgICBpZiAoIWNsb3Nlc3REaXN0YW5jZSB8fCBkaXN0YW5jZSA8IGNs
b3Nlc3REaXN0YW5jZSkgewogICAgICAgICAgICAgY2xvc2VzdERpc3RhbmNlID0gZGlzdGFuY2U7
CiAgICAgICAgICAgICBjbG9zZXN0QnJlYWtwb2ludCA9IGJyZWFrcG9pbnQuY29weVJlZigpOwot
ICAgICAgICAgICAgY2xvc2VzdEJyZWFrcG9pbnRUeXBlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6
RE9NRGVidWdnZXI6OkRPTUJyZWFrcG9pbnRUeXBlOjpOb2RlUmVtb3ZlZDsKKyAgICAgICAgICAg
IGNsb3Nlc3RCcmVha3BvaW50VHlwZSA9IFByb3RvY29sOjpET01EZWJ1Z2dlcjo6RE9NQnJlYWtw
b2ludFR5cGU6Ok5vZGVSZW1vdmVkOwogICAgICAgICAgICAgY2xvc2VzdEJyZWFrcG9pbnRPd25l
ciA9IGJyZWFrcG9pbnRPd25lcjsKICAgICAgICAgfQogICAgIH0KQEAgLTI1NSw3ICsyNDUsNyBA
QCB2b2lkIFBhZ2VET01EZWJ1Z2dlckFnZW50Ojp3aWxsUmVtb3ZlRE9NTm9kZShOb2RlJiBub2Rl
KQogICAgICAgICAgICAgaWYgKCFjbG9zZXN0RGlzdGFuY2UgfHwgZGlzdGFuY2UgPCBjbG9zZXN0
RGlzdGFuY2UpIHsKICAgICAgICAgICAgICAgICBjbG9zZXN0RGlzdGFuY2UgPSBkaXN0YW5jZTsK
ICAgICAgICAgICAgICAgICBjbG9zZXN0QnJlYWtwb2ludCA9IGJyZWFrcG9pbnQuY29weVJlZigp
OwotICAgICAgICAgICAgICAgIGNsb3Nlc3RCcmVha3BvaW50VHlwZSA9IEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRPTURlYnVnZ2VyOjpET01CcmVha3BvaW50VHlwZTo6U3VidHJlZU1vZGlmaWVkOwor
ICAgICAgICAgICAgICAgIGNsb3Nlc3RCcmVha3BvaW50VHlwZSA9IFByb3RvY29sOjpET01EZWJ1
Z2dlcjo6RE9NQnJlYWtwb2ludFR5cGU6OlN1YnRyZWVNb2RpZmllZDsKICAgICAgICAgICAgICAg
ICBjbG9zZXN0QnJlYWtwb2ludE93bmVyID0gYnJlYWtwb2ludE93bmVyOwogICAgICAgICAgICAg
fQogICAgICAgICB9CkBAIC0yOTYsNyArMjg2LDcgQEAgdm9pZCBQYWdlRE9NRGVidWdnZXJBZ2Vu
dDo6d2lsbE1vZGlmeURPTUF0dHIoRWxlbWVudCYgZWxlbWVudCkKICAgICBpZiAoaXQgPT0gbV9k
b21BdHRyaWJ1dGVNb2RpZmllZEJyZWFrcG9pbnRzLmVuZCgpKQogICAgICAgICByZXR1cm47CiAK
LSAgICBhdXRvIHBhdXNlRGF0YSA9IGJ1aWxkUGF1c2VEYXRhRm9yRE9NQnJlYWtwb2ludChJbnNw
ZWN0b3I6OlByb3RvY29sOjpET01EZWJ1Z2dlcjo6RE9NQnJlYWtwb2ludFR5cGU6OkF0dHJpYnV0
ZU1vZGlmaWVkLCBlbGVtZW50KTsKKyAgICBhdXRvIHBhdXNlRGF0YSA9IGJ1aWxkUGF1c2VEYXRh
Rm9yRE9NQnJlYWtwb2ludChQcm90b2NvbDo6RE9NRGVidWdnZXI6OkRPTUJyZWFrcG9pbnRUeXBl
OjpBdHRyaWJ1dGVNb2RpZmllZCwgZWxlbWVudCk7CiAgICAgbV9kZWJ1Z2dlckFnZW50LT5icmVh
a1Byb2dyYW0oSW5zcGVjdG9yOjpEZWJ1Z2dlckZyb250ZW5kRGlzcGF0Y2hlcjo6UmVhc29uOjpE
T00sIFdURk1vdmUocGF1c2VEYXRhKSwgaXQtPnZhbHVlLmNvcHlSZWYoKSk7CiB9CiAKQEAgLTMz
MywyNyArMzIzLDI4IEBAIHZvaWQgUGFnZURPTURlYnVnZ2VyQWdlbnQ6OndpbGxJbnZhbGlkYXRl
U3R5bGVBdHRyKEVsZW1lbnQmIGVsZW1lbnQpCiAgICAgaWYgKGl0ID09IG1fZG9tQXR0cmlidXRl
TW9kaWZpZWRCcmVha3BvaW50cy5lbmQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byBw
YXVzZURhdGEgPSBidWlsZFBhdXNlRGF0YUZvckRPTUJyZWFrcG9pbnQoSW5zcGVjdG9yOjpQcm90
b2NvbDo6RE9NRGVidWdnZXI6OkRPTUJyZWFrcG9pbnRUeXBlOjpBdHRyaWJ1dGVNb2RpZmllZCwg
ZWxlbWVudCk7CisgICAgYXV0byBwYXVzZURhdGEgPSBidWlsZFBhdXNlRGF0YUZvckRPTUJyZWFr
cG9pbnQoUHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpET01CcmVha3BvaW50VHlwZTo6QXR0cmlidXRl
TW9kaWZpZWQsIGVsZW1lbnQpOwogICAgIG1fZGVidWdnZXJBZ2VudC0+YnJlYWtQcm9ncmFtKElu
c3BlY3Rvcjo6RGVidWdnZXJGcm9udGVuZERpc3BhdGNoZXI6OlJlYXNvbjo6RE9NLCBXVEZNb3Zl
KHBhdXNlRGF0YSksIGl0LT52YWx1ZS5jb3B5UmVmKCkpOwogfQogCi12b2lkIFBhZ2VET01EZWJ1
Z2dlckFnZW50OjpzZXRBbmltYXRpb25GcmFtZUJyZWFrcG9pbnQoRXJyb3JTdHJpbmcmIGVycm9y
U3RyaW5nLCBSZWZQdHI8SlNDOjpCcmVha3BvaW50PiYmIGJyZWFrcG9pbnQpCitib29sIFBhZ2VE
T01EZWJ1Z2dlckFnZW50OjpzZXRBbmltYXRpb25GcmFtZUJyZWFrcG9pbnQoUHJvdG9jb2w6OkVy
cm9yU3RyaW5nJiBlcnJvclN0cmluZywgUmVmUHRyPEpTQzo6QnJlYWtwb2ludD4mJiBicmVha3Bv
aW50KQogewogICAgIGlmICghbV9wYXVzZU9uQWxsQW5pbWF0aW9uRnJhbWVzQnJlYWtwb2ludCA9
PSAhYnJlYWtwb2ludCkgewogICAgICAgICBlcnJvclN0cmluZyA9IG1fcGF1c2VPbkFsbEFuaW1h
dGlvbkZyYW1lc0JyZWFrcG9pbnQgPyAiQnJlYWtwb2ludCBmb3IgQW5pbWF0aW9uRnJhbWUgYWxy
ZWFkeSBleGlzdHMiX3MgOiAiQnJlYWtwb2ludCBmb3IgQW5pbWF0aW9uRnJhbWUgbWlzc2luZyJf
czsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAg
bV9wYXVzZU9uQWxsQW5pbWF0aW9uRnJhbWVzQnJlYWtwb2ludCA9IFdURk1vdmUoYnJlYWtwb2lu
dCk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKLVJlZjxKU09OOjpPYmplY3Q+IFBhZ2VET01EZWJ1
Z2dlckFnZW50OjpidWlsZFBhdXNlRGF0YUZvckRPTUJyZWFrcG9pbnQoSW5zcGVjdG9yOjpQcm90
b2NvbDo6RE9NRGVidWdnZXI6OkRPTUJyZWFrcG9pbnRUeXBlIGJyZWFrcG9pbnRUeXBlLCBOb2Rl
JiBicmVha3BvaW50T3duZXIpCitSZWY8SlNPTjo6T2JqZWN0PiBQYWdlRE9NRGVidWdnZXJBZ2Vu
dDo6YnVpbGRQYXVzZURhdGFGb3JET01CcmVha3BvaW50KFByb3RvY29sOjpET01EZWJ1Z2dlcjo6
RE9NQnJlYWtwb2ludFR5cGUgYnJlYWtwb2ludFR5cGUsIE5vZGUmIGJyZWFrcG9pbnRPd25lcikK
IHsKICAgICBBU1NFUlQobV9kZWJ1Z2dlckFnZW50LT5icmVha3BvaW50c0FjdGl2ZSgpKTsKICAg
ICBBU1NFUlQobV9kb21TdWJ0cmVlTW9kaWZpZWRCcmVha3BvaW50cy5jb250YWlucygmYnJlYWtw
b2ludE93bmVyKSB8fCBtX2RvbUF0dHJpYnV0ZU1vZGlmaWVkQnJlYWtwb2ludHMuY29udGFpbnMo
JmJyZWFrcG9pbnRPd25lcikgfHwgbV9kb21Ob2RlUmVtb3ZlZEJyZWFrcG9pbnRzLmNvbnRhaW5z
KCZicmVha3BvaW50T3duZXIpKTsKIAogICAgIGF1dG8gcGF1c2VEYXRhID0gSlNPTjo6T2JqZWN0
OjpjcmVhdGUoKTsKLSAgICBwYXVzZURhdGEtPnNldFN0cmluZygidHlwZSIsIEluc3BlY3Rvcjo6
UHJvdG9jb2w6Okluc3BlY3RvckhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKGJyZWFrcG9p
bnRUeXBlKSk7CisgICAgcGF1c2VEYXRhLT5zZXRTdHJpbmcoInR5cGUiLCBQcm90b2NvbDo6SGVs
cGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUoYnJlYWtwb2ludFR5cGUpKTsKICAgICBpZiAoYXV0
byogZG9tQWdlbnQgPSBtX2luc3RydW1lbnRpbmdBZ2VudHMucGVyc2lzdGVudERPTUFnZW50KCkp
IHsKICAgICAgICAgaWYgKGF1dG8gYnJlYWtwb2ludE93bmVyTm9kZUlkID0gZG9tQWdlbnQtPnB1
c2hOb2RlVG9Gcm9udGVuZCgmYnJlYWtwb2ludE93bmVyKSkKICAgICAgICAgICAgIHBhdXNlRGF0
YS0+c2V0SW50ZWdlcigibm9kZUlkIiwgYnJlYWtwb2ludE93bmVyTm9kZUlkKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlRE9NRGVidWdnZXJB
Z2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VET01EZWJ1
Z2dlckFnZW50LmgKaW5kZXggYWQwMWM2NzdlNWQyMjI1YTA2NWNmMDEwNDUxNTY5YjE3OTRkNjlh
OS4uZDg3MjgyOTI1ZWM2OTMxMGUwYmMwZTc4ODNjZGNhNTA4ZDEwMzUyMiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VET01EZWJ1Z2dlckFnZW50
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VET01EZWJ1
Z2dlckFnZW50LmgKQEAgLTM2LDIxICszNiwxOSBAQCBjbGFzcyBFbGVtZW50OwogY2xhc3MgRnJh
bWU7CiBjbGFzcyBOb2RlOwogCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQogY2xhc3Mg
UGFnZURPTURlYnVnZ2VyQWdlbnQgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yRE9NRGVidWdnZXJB
Z2VudCB7CiBwdWJsaWM6CiAgICAgUGFnZURPTURlYnVnZ2VyQWdlbnQoUGFnZUFnZW50Q29udGV4
dCYsIEluc3BlY3Rvcjo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudCopOwotICAgIH5QYWdlRE9NRGVi
dWdnZXJBZ2VudCgpIG92ZXJyaWRlOworICAgIH5QYWdlRE9NRGVidWdnZXJBZ2VudCgpOwogCi0g
ICAgYm9vbCBlbmFibGVkKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBlbmFibGVkKCkgY29u
c3Q7CiAKICAgICAvLyBET01EZWJ1Z2dlckJhY2tlbmREaXNwYXRjaGVySGFuZGxlcgotICAgIHZv
aWQgc2V0RE9NQnJlYWtwb2ludChFcnJvclN0cmluZyYsIGludCBub2RlSWQsIGNvbnN0IFN0cmlu
ZyYgdHlwZSwgY29uc3QgSlNPTjo6T2JqZWN0KiBvcHRpb25zKSBvdmVycmlkZTsKLSAgICB2b2lk
IHJlbW92ZURPTUJyZWFrcG9pbnQoRXJyb3JTdHJpbmcmLCBpbnQgbm9kZUlkLCBjb25zdCBTdHJp
bmcmIHR5cGUpIG92ZXJyaWRlOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5n
T3I8dm9pZD4gc2V0RE9NQnJlYWtwb2ludChJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJ
ZCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NRGVidWdnZXI6OkRPTUJyZWFrcG9pbnRUeXBlLCBS
ZWZQdHI8SlNPTjo6T2JqZWN0PiYmIG9wdGlvbnMpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8dm9pZD4gcmVtb3ZlRE9NQnJlYWtwb2ludChJbnNwZWN0b3I6OlByb3Rv
Y29sOjpET006Ok5vZGVJZCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NRGVidWdnZXI6OkRPTUJy
ZWFrcG9pbnRUeXBlKTsKIAogICAgIC8vIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbgotICAgIHZv
aWQgbWFpbkZyYW1lTmF2aWdhdGVkKCkgZmluYWw7CisgICAgdm9pZCBtYWluRnJhbWVOYXZpZ2F0
ZWQoKTsKICAgICB2b2lkIGZyYW1lRG9jdW1lbnRVcGRhdGVkKEZyYW1lJik7CiAgICAgdm9pZCB3
aWxsSW5zZXJ0RE9NTm9kZShOb2RlJiBwYXJlbnQpOwogICAgIHZvaWQgd2lsbFJlbW92ZURPTU5v
ZGUoTm9kZSYpOwpAQCAtNjEsMTAgKzU5LDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIGRpZEZpcmVB
bmltYXRpb25GcmFtZSgpOwogCiBwcml2YXRlOgotICAgIHZvaWQgZW5hYmxlKCkgb3ZlcnJpZGU7
Ci0gICAgdm9pZCBkaXNhYmxlKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBlbmFibGUoKTsKKyAgICB2
b2lkIGRpc2FibGUoKTsKIAotICAgIHZvaWQgc2V0QW5pbWF0aW9uRnJhbWVCcmVha3BvaW50KEVy
cm9yU3RyaW5nJiwgUmVmUHRyPEpTQzo6QnJlYWtwb2ludD4mJikgb3ZlcnJpZGU7CisgICAgYm9v
bCBzZXRBbmltYXRpb25GcmFtZUJyZWFrcG9pbnQoSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JT
dHJpbmcmLCBSZWZQdHI8SlNDOjpCcmVha3BvaW50PiYmKTsKIAogICAgIFJlZjxKU09OOjpPYmpl
Y3Q+IGJ1aWxkUGF1c2VEYXRhRm9yRE9NQnJlYWtwb2ludChJbnNwZWN0b3I6OlByb3RvY29sOjpE
T01EZWJ1Z2dlcjo6RE9NQnJlYWtwb2ludFR5cGUsIE5vZGUmIGJyZWFrcG9pbnRPd25lcik7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlRGVi
dWdnZXJBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFn
ZURlYnVnZ2VyQWdlbnQuY3BwCmluZGV4IDBjMjAzOTgyNzMzYjRlZThiYWJkMDU1OGZhMzNiMmEx
ZGM0ZjhmMjUuLjYxODcyNjhiZDI3NTE4MWU5OGY0NWVlMGZhN2UxNmE3NTA5YmMxNjAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlRGVidWdnZXJB
Z2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VE
ZWJ1Z2dlckFnZW50LmNwcApAQCAtNjgsMjYgKzY4LDI1IEBAIGJvb2wgUGFnZURlYnVnZ2VyQWdl
bnQ6OmVuYWJsZWQoKSBjb25zdAogICAgIHJldHVybiBtX2luc3RydW1lbnRpbmdBZ2VudHMuZW5h
YmxlZFBhZ2VEZWJ1Z2dlckFnZW50KCkgPT0gdGhpcyAmJiBXZWJEZWJ1Z2dlckFnZW50OjplbmFi
bGVkKCk7CiB9CiAKLXZvaWQgUGFnZURlYnVnZ2VyQWdlbnQ6OmV2YWx1YXRlT25DYWxsRnJhbWUo
RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGNhbGxGcmFtZUlkLCBjb25z
dCBTdHJpbmcmIGV4cHJlc3Npb24sIGNvbnN0IFN0cmluZyogb2JqZWN0R3JvdXAsIGNvbnN0IGJv
b2wqIGluY2x1ZGVDb21tYW5kTGluZUFQSSwgY29uc3QgYm9vbCogZG9Ob3RQYXVzZU9uRXhjZXB0
aW9uc0FuZE11dGVDb25zb2xlLCBjb25zdCBib29sKiByZXR1cm5CeVZhbHVlLCBjb25zdCBib29s
KiBnZW5lcmF0ZVByZXZpZXcsIGNvbnN0IGJvb2wqIHNhdmVSZXN1bHQsIGNvbnN0IGJvb2wqIGVt
dWxhdGVVc2VyR2VzdHVyZSwgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+
JiByZXN1bHQsIE9wdGlvbmFsPGJvb2w+JiB3YXNUaHJvd24sIE9wdGlvbmFsPGludD4mIHNhdmVk
UmVzdWx0SW5kZXgpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxzdGQ6OnR1cGxlPFJlZjxQcm90
b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiwgT3B0aW9uYWw8Ym9vbD4gLyogd2FzVGhyb3du
ICovLCBPcHRpb25hbDxpbnQ+IC8qIHNhdmVkUmVzdWx0SW5kZXggKi8+PiBQYWdlRGVidWdnZXJB
Z2VudDo6ZXZhbHVhdGVPbkNhbGxGcmFtZShjb25zdCBQcm90b2NvbDo6RGVidWdnZXI6OkNhbGxG
cmFtZUlkJiBjYWxsRnJhbWVJZCwgY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBjb25zdCBTdHJp
bmcmIG9iamVjdEdyb3VwLCBPcHRpb25hbDxib29sPiYmIGluY2x1ZGVDb21tYW5kTGluZUFQSSwg
T3B0aW9uYWw8Ym9vbD4mJiBkb05vdFBhdXNlT25FeGNlcHRpb25zQW5kTXV0ZUNvbnNvbGUsIE9w
dGlvbmFsPGJvb2w+JiYgcmV0dXJuQnlWYWx1ZSwgT3B0aW9uYWw8Ym9vbD4mJiBnZW5lcmF0ZVBy
ZXZpZXcsIE9wdGlvbmFsPGJvb2w+JiYgc2F2ZVJlc3VsdCwgT3B0aW9uYWw8Ym9vbD4mJiBlbXVs
YXRlVXNlckdlc3R1cmUpCiB7Ci0gICAgYXV0byBzaG91bGRFbXVsYXRlVXNlckdlc3R1cmUgPSBl
bXVsYXRlVXNlckdlc3R1cmUgJiYgKmVtdWxhdGVVc2VyR2VzdHVyZTsKLSAgICBVc2VyR2VzdHVy
ZUVtdWxhdGlvblNjb3BlIHVzZXJHZXN0dXJlU2NvcGUobV9pbnNwZWN0ZWRQYWdlLCBzaG91bGRF
bXVsYXRlVXNlckdlc3R1cmUpOworICAgIFVzZXJHZXN0dXJlRW11bGF0aW9uU2NvcGUgdXNlckdl
c3R1cmVTY29wZShtX2luc3BlY3RlZFBhZ2UsIGVtdWxhdGVVc2VyR2VzdHVyZSAmJiAqZW11bGF0
ZVVzZXJHZXN0dXJlKTsKIAotICAgIFdlYkRlYnVnZ2VyQWdlbnQ6OmV2YWx1YXRlT25DYWxsRnJh
bWUoZXJyb3JTdHJpbmcsIGNhbGxGcmFtZUlkLCBleHByZXNzaW9uLCBvYmplY3RHcm91cCwgaW5j
bHVkZUNvbW1hbmRMaW5lQVBJLCBkb05vdFBhdXNlT25FeGNlcHRpb25zQW5kTXV0ZUNvbnNvbGUs
IHJldHVybkJ5VmFsdWUsIGdlbmVyYXRlUHJldmlldywgc2F2ZVJlc3VsdCwgZW11bGF0ZVVzZXJH
ZXN0dXJlLCByZXN1bHQsIHdhc1Rocm93biwgc2F2ZWRSZXN1bHRJbmRleCk7CisgICAgcmV0dXJu
IFdlYkRlYnVnZ2VyQWdlbnQ6OmV2YWx1YXRlT25DYWxsRnJhbWUoY2FsbEZyYW1lSWQsIGV4cHJl
c3Npb24sIG9iamVjdEdyb3VwLCBXVEZNb3ZlKGluY2x1ZGVDb21tYW5kTGluZUFQSSksIFdURk1v
dmUoZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xlKSwgV1RGTW92ZShyZXR1cm5C
eVZhbHVlKSwgV1RGTW92ZShnZW5lcmF0ZVByZXZpZXcpLCBXVEZNb3ZlKHNhdmVSZXN1bHQpLCBX
VEZNb3ZlKGVtdWxhdGVVc2VyR2VzdHVyZSkpOwogfQogCi12b2lkIFBhZ2VEZWJ1Z2dlckFnZW50
OjplbmFibGUoKQordm9pZCBQYWdlRGVidWdnZXJBZ2VudDo6aW50ZXJuYWxFbmFibGUoKQogewog
ICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy5zZXRFbmFibGVkUGFnZURlYnVnZ2VyQWdlbnQodGhp
cyk7CiAKLSAgICBXZWJEZWJ1Z2dlckFnZW50OjplbmFibGUoKTsKKyAgICBXZWJEZWJ1Z2dlckFn
ZW50OjppbnRlcm5hbEVuYWJsZSgpOwogfQogCi12b2lkIFBhZ2VEZWJ1Z2dlckFnZW50OjpkaXNh
YmxlKGJvb2wgaXNCZWluZ0Rlc3Ryb3llZCkKK3ZvaWQgUGFnZURlYnVnZ2VyQWdlbnQ6OmludGVy
bmFsRGlzYWJsZShib29sIGlzQmVpbmdEZXN0cm95ZWQpCiB7CiAgICAgbV9pbnN0cnVtZW50aW5n
QWdlbnRzLnNldEVuYWJsZWRQYWdlRGVidWdnZXJBZ2VudChudWxscHRyKTsKIAotICAgIFdlYkRl
YnVnZ2VyQWdlbnQ6OmRpc2FibGUoaXNCZWluZ0Rlc3Ryb3llZCk7CisgICAgV2ViRGVidWdnZXJB
Z2VudDo6aW50ZXJuYWxEaXNhYmxlKGlzQmVpbmdEZXN0cm95ZWQpOwogfQogCiBTdHJpbmcgUGFn
ZURlYnVnZ2VyQWdlbnQ6OnNvdXJjZU1hcFVSTEZvclNjcmlwdChjb25zdCBKU0M6OkRlYnVnZ2Vy
OjpTY3JpcHQmIHNjcmlwdCkKQEAgLTEyNiw3ICsxMjUsNyBAQCB2b2lkIFBhZ2VEZWJ1Z2dlckFn
ZW50OjpicmVha3BvaW50QWN0aW9uTG9nKEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9i
YWxPYgogICAgIG1faW5zcGVjdGVkUGFnZS5jb25zb2xlKCkuYWRkTWVzc2FnZShNZXNzYWdlU291
cmNlOjpKUywgTWVzc2FnZUxldmVsOjpMb2csIG1lc3NhZ2UsIGNyZWF0ZVNjcmlwdENhbGxTdGFj
ayhsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CiB9CiAKLUluamVjdGVkU2NyaXB0IFBhZ2VEZWJ1Z2dl
ckFnZW50OjppbmplY3RlZFNjcmlwdEZvckV2YWwoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBj
b25zdCBpbnQqIGV4ZWN1dGlvbkNvbnRleHRJZCkKK0luamVjdGVkU2NyaXB0IFBhZ2VEZWJ1Z2dl
ckFnZW50OjppbmplY3RlZFNjcmlwdEZvckV2YWwoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJv
clN0cmluZywgT3B0aW9uYWw8UHJvdG9jb2w6OlJ1bnRpbWU6OkV4ZWN1dGlvbkNvbnRleHRJZD4m
JiBleGVjdXRpb25Db250ZXh0SWQpCiB7CiAgICAgaWYgKCFleGVjdXRpb25Db250ZXh0SWQpIHsK
ICAgICAgICAgSlNDOjpKU0dsb2JhbE9iamVjdCogc2NyaXB0U3RhdGUgPSBtYWluV29ybGRFeGVj
U3RhdGUoJm1faW5zcGVjdGVkUGFnZS5tYWluRnJhbWUoKSk7CkBAIC0xNTMsOCArMTUyLDcgQEAg
dm9pZCBQYWdlRGVidWdnZXJBZ2VudDo6bWFpbkZyYW1lU3RhcnRlZExvYWRpbmcoKQogICAgIGlm
IChpc1BhdXNlZCgpKSB7CiAgICAgICAgIHNldFN1cHByZXNzQWxsUGF1c2VzKHRydWUpOwogCi0g
ICAgICAgIEVycm9yU3RyaW5nIGlnbm9yZWQ7Ci0gICAgICAgIHJlc3VtZShpZ25vcmVkKTsKKyAg
ICAgICAgcmVzdW1lKCk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZURlYnVnZ2VyQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlRGVidWdnZXJBZ2VudC5oCmluZGV4IDRjMjdkZDFj
NzRiMTJlODU3YjZjZjY1MTBmODk5NzYwN2ExNjYyMDcuLmJmZWJlOTM2MmM0OTM1ZTEwMWUxYTFm
MTNjN2EwMmJlMTUzYzllYjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9h
Z2VudHMvcGFnZS9QYWdlRGVidWdnZXJBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9hZ2VudHMvcGFnZS9QYWdlRGVidWdnZXJBZ2VudC5oCkBAIC00NSwxNCArNDUsMTQgQEAg
Y2xhc3MgUGFnZURlYnVnZ2VyQWdlbnQgZmluYWwgOiBwdWJsaWMgV2ViRGVidWdnZXJBZ2VudCB7
CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgUGFnZURlYnVnZ2Vy
QWdlbnQoUGFnZUFnZW50Q29udGV4dCYpOwotICAgIH5QYWdlRGVidWdnZXJBZ2VudCgpIG92ZXJy
aWRlOwotICAgIGJvb2wgZW5hYmxlZCgpIGNvbnN0IGZpbmFsOworICAgIH5QYWdlRGVidWdnZXJB
Z2VudCgpOworICAgIGJvb2wgZW5hYmxlZCgpIGNvbnN0OwogCiAgICAgLy8gRGVidWdnZXJCYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXIKLSAgICB2b2lkIGV2YWx1YXRlT25DYWxsRnJhbWUoRXJyb3JT
dHJpbmcmLCBjb25zdCBTdHJpbmcmIGNhbGxGcmFtZUlkLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Np
b24sIGNvbnN0IFN0cmluZyogb2JqZWN0R3JvdXAsIGNvbnN0IGJvb2wqIGluY2x1ZGVDb21tYW5k
TGluZUFQSSwgY29uc3QgYm9vbCogZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xl
LCBjb25zdCBib29sKiByZXR1cm5CeVZhbHVlLCBjb25zdCBib29sKiBnZW5lcmF0ZVByZXZpZXcs
IGNvbnN0IGJvb2wqIHNhdmVSZXN1bHQsIGNvbnN0IGJvb2wqIGVtdWxhdGVVc2VyR2VzdHVyZSwg
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3Vs
dCwgT3B0aW9uYWw8Ym9vbD4mIHdhc1Rocm93biwgT3B0aW9uYWw8aW50PiYgc2F2ZWRSZXN1bHRJ
bmRleCkgb3ZlcnJpZGU7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxz
dGQ6OnR1cGxlPFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+
LCBPcHRpb25hbDxib29sPiAvKiB3YXNUaHJvd24gKi8sIE9wdGlvbmFsPGludD4gLyogc2F2ZWRS
ZXN1bHRJbmRleCAqLz4+IGV2YWx1YXRlT25DYWxsRnJhbWUoY29uc3QgSW5zcGVjdG9yOjpQcm90
b2NvbDo6RGVidWdnZXI6OkNhbGxGcmFtZUlkJiwgY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBj
b25zdCBTdHJpbmcmIG9iamVjdEdyb3VwLCBPcHRpb25hbDxib29sPiYmIGluY2x1ZGVDb21tYW5k
TGluZUFQSSwgT3B0aW9uYWw8Ym9vbD4mJiBkb05vdFBhdXNlT25FeGNlcHRpb25zQW5kTXV0ZUNv
bnNvbGUsIE9wdGlvbmFsPGJvb2w+JiYgcmV0dXJuQnlWYWx1ZSwgT3B0aW9uYWw8Ym9vbD4mJiBn
ZW5lcmF0ZVByZXZpZXcsIE9wdGlvbmFsPGJvb2w+JiYgc2F2ZVJlc3VsdCwgT3B0aW9uYWw8Ym9v
bD4mJiBlbXVsYXRlVXNlckdlc3R1cmUpOwogCiAgICAgLy8gSlNDOjpEZWJ1Z2dlcjo6T2JzZXJ2
ZXIKLSAgICB2b2lkIGJyZWFrcG9pbnRBY3Rpb25Mb2coSlNDOjpKU0dsb2JhbE9iamVjdCosIGNv
bnN0IFN0cmluZyYgZGF0YSkgZmluYWw7CisgICAgdm9pZCBicmVha3BvaW50QWN0aW9uTG9nKEpT
Qzo6SlNHbG9iYWxPYmplY3QqLCBjb25zdCBTdHJpbmcmIGRhdGEpOwogCiAgICAgLy8gSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uCiAgICAgdm9pZCBkaWRDbGVhcldpbmRvd09iamVjdEluV29ybGQo
RnJhbWUmLCBET01XcmFwcGVyV29ybGQmKTsKQEAgLTY0LDE1ICs2NCwxNSBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBkaWRDYW5jZWxBbmltYXRpb25GcmFtZShpbnQgY2FsbGJhY2tJZCk7CiAKIHByaXZh
dGU6Ci0gICAgdm9pZCBlbmFibGUoKSBvdmVycmlkZTsKLSAgICB2b2lkIGRpc2FibGUoYm9vbCBp
c0JlaW5nRGVzdHJveWVkKSBvdmVycmlkZTsKKyAgICB2b2lkIGludGVybmFsRW5hYmxlKCk7Cisg
ICAgdm9pZCBpbnRlcm5hbERpc2FibGUoYm9vbCBpc0JlaW5nRGVzdHJveWVkKTsKIAotICAgIFN0
cmluZyBzb3VyY2VNYXBVUkxGb3JTY3JpcHQoY29uc3QgSlNDOjpEZWJ1Z2dlcjo6U2NyaXB0Jikg
b3ZlcnJpZGU7CisgICAgU3RyaW5nIHNvdXJjZU1hcFVSTEZvclNjcmlwdChjb25zdCBKU0M6OkRl
YnVnZ2VyOjpTY3JpcHQmKTsKIAotICAgIHZvaWQgbXV0ZUNvbnNvbGUoKSBvdmVycmlkZTsKLSAg
ICB2b2lkIHVubXV0ZUNvbnNvbGUoKSBvdmVycmlkZTsKKyAgICB2b2lkIG11dGVDb25zb2xlKCk7
CisgICAgdm9pZCB1bm11dGVDb25zb2xlKCk7CiAKLSAgICBJbnNwZWN0b3I6OkluamVjdGVkU2Ny
aXB0IGluamVjdGVkU2NyaXB0Rm9yRXZhbChFcnJvclN0cmluZyYsIGNvbnN0IGludCogZXhlY3V0
aW9uQ29udGV4dElkKSBvdmVycmlkZTsKKyAgICBJbnNwZWN0b3I6OkluamVjdGVkU2NyaXB0IGlu
amVjdGVkU2NyaXB0Rm9yRXZhbChJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZyYsIE9w
dGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkV4ZWN1dGlvbkNvbnRleHRJZD4m
Jik7CiAKICAgICBQYWdlJiBtX2luc3BlY3RlZFBhZ2U7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VIZWFwQWdlbnQuY3BwIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VIZWFwQWdlbnQuY3BwCmluZGV4IDQ5
MjE4ZWYxMjgzZWJkNGRkNzU0MjExMzY5YjM0OWE0ODI1MjJkOTguLjQwMzZhMjNjNjg1MDdlNTk0
YWIyZTk3NGY1YjYyZGI4NjdjNzg3NjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9hZ2VudHMvcGFnZS9QYWdlSGVhcEFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZUhlYXBBZ2VudC5jcHAKQEAgLTM5LDE2ICszOSwyMCBA
QCBQYWdlSGVhcEFnZW50OjpQYWdlSGVhcEFnZW50KFBhZ2VBZ2VudENvbnRleHQmIGNvbnRleHQp
CiAKIFBhZ2VIZWFwQWdlbnQ6On5QYWdlSGVhcEFnZW50KCkgPSBkZWZhdWx0OwogCi12b2lkIFBh
Z2VIZWFwQWdlbnQ6OmVuYWJsZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCitQcm90b2NvbDo6
RXJyb3JTdHJpbmdPcjx2b2lkPiBQYWdlSGVhcEFnZW50OjplbmFibGUoKQogewotICAgIFdlYkhl
YXBBZ2VudDo6ZW5hYmxlKGVycm9yU3RyaW5nKTsKKyAgICBhdXRvIHJlc3VsdCA9IFdlYkhlYXBB
Z2VudDo6ZW5hYmxlKCk7CisKICAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMuc2V0RW5hYmxlZFBh
Z2VIZWFwQWdlbnQodGhpcyk7CisKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIFBhZ2VI
ZWFwQWdlbnQ6OmRpc2FibGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nKQorUHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8dm9pZD4gUGFnZUhlYXBBZ2VudDo6ZGlzYWJsZSgpCiB7CiAgICAgbV9pbnN0
cnVtZW50aW5nQWdlbnRzLnNldEVuYWJsZWRQYWdlSGVhcEFnZW50KG51bGxwdHIpOwotICAgIFdl
YkhlYXBBZ2VudDo6ZGlzYWJsZShlcnJvclN0cmluZyk7CisKKyAgICByZXR1cm4gV2ViSGVhcEFn
ZW50OjpkaXNhYmxlKCk7CiB9CiAKIHZvaWQgUGFnZUhlYXBBZ2VudDo6bWFpbkZyYW1lTmF2aWdh
dGVkKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9Q
YWdlSGVhcEFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFn
ZUhlYXBBZ2VudC5oCmluZGV4IDFiZDZjYTBmYzllZjE1YTFkN2EyNTI4NDI5NWE4ZTE5ZTg1ZjEw
ZGUuLmYyNmZmODRiMzhiOTRjOTcyZDlmNDZjYzljNGE3NGVhZmY3NGM3YWIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlSGVhcEFnZW50LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VIZWFwQWdlbnQuaApA
QCAtMzEsMTggKzMxLDE2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdHlwZWRlZiBTdHJp
bmcgRXJyb3JTdHJpbmc7Ci0KIGNsYXNzIFBhZ2VIZWFwQWdlbnQgZmluYWwgOiBwdWJsaWMgV2Vi
SGVhcEFnZW50IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShQYWdlSGVhcEFnZW50KTsKICAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBQYWdlSGVhcEFnZW50KFBh
Z2VBZ2VudENvbnRleHQmKTsKLSAgICB+UGFnZUhlYXBBZ2VudCgpIG92ZXJyaWRlOworICAgIH5Q
YWdlSGVhcEFnZW50KCk7CiAKICAgICAvLyBIZWFwQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyCi0g
ICAgdm9pZCBlbmFibGUoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2b2lkIGRpc2FibGUo
RXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0
cmluZ09yPHZvaWQ+IGVuYWJsZSgpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3Ry
aW5nT3I8dm9pZD4gZGlzYWJsZSgpOwogCiAgICAgLy8gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
CiAgICAgdm9pZCBtYWluRnJhbWVOYXZpZ2F0ZWQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlTmV0d29ya0FnZW50LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlTmV0d29ya0FnZW50LmNwcAppbmRleCAy
YzY1YjgxMDQ5NGJiZWI3M2Q1MzRlNjYyYWMzMTE5M2Y0MGMzYzY4Li45ZmUxMzk5YzNiNzI2MjM1
NTJiNDIzYjAwMzNlMzNmOTgxYzNiM2Q0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZU5ldHdvcmtBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VOZXR3b3JrQWdlbnQuY3BwCkBAIC00Nyw3ICs0
Nyw3IEBAIFBhZ2VOZXR3b3JrQWdlbnQ6OlBhZ2VOZXR3b3JrQWdlbnQoUGFnZUFnZW50Q29udGV4
dCYgY29udGV4dCkKIAogUGFnZU5ldHdvcmtBZ2VudDo6flBhZ2VOZXR3b3JrQWdlbnQoKSA9IGRl
ZmF1bHQ7CiAKLVN0cmluZyBQYWdlTmV0d29ya0FnZW50Ojpsb2FkZXJJZGVudGlmaWVyKERvY3Vt
ZW50TG9hZGVyKiBsb2FkZXIpCitQcm90b2NvbDo6TmV0d29yazo6TG9hZGVySWQgUGFnZU5ldHdv
cmtBZ2VudDo6bG9hZGVySWRlbnRpZmllcihEb2N1bWVudExvYWRlciogbG9hZGVyKQogewogICAg
IGlmIChsb2FkZXIpIHsKICAgICAgICAgaWYgKGF1dG8qIHBhZ2VBZ2VudCA9IG1faW5zdHJ1bWVu
dGluZ0FnZW50cy5lbmFibGVkUGFnZUFnZW50KCkpCkBAIC01Niw3ICs1Niw3IEBAIFN0cmluZyBQ
YWdlTmV0d29ya0FnZW50Ojpsb2FkZXJJZGVudGlmaWVyKERvY3VtZW50TG9hZGVyKiBsb2FkZXIp
CiAgICAgcmV0dXJuIHsgfTsKIH0KIAotU3RyaW5nIFBhZ2VOZXR3b3JrQWdlbnQ6OmZyYW1lSWRl
bnRpZmllcihEb2N1bWVudExvYWRlciogbG9hZGVyKQorUHJvdG9jb2w6Ok5ldHdvcms6OkZyYW1l
SWQgUGFnZU5ldHdvcmtBZ2VudDo6ZnJhbWVJZGVudGlmaWVyKERvY3VtZW50TG9hZGVyKiBsb2Fk
ZXIpCiB7CiAgICAgaWYgKGxvYWRlcikgewogICAgICAgICBpZiAoYXV0byogcGFnZUFnZW50ID0g
bV9pbnN0cnVtZW50aW5nQWdlbnRzLmVuYWJsZWRQYWdlQWdlbnQoKSkKQEAgLTkxLDEyICs5MSwx
MiBAQCBWZWN0b3I8V2ViU29ja2V0Kj4gUGFnZU5ldHdvcmtBZ2VudDo6YWN0aXZlV2ViU29ja2V0
cyhjb25zdCBMb2NrSG9sZGVyJiBsb2NrKQogICAgIHJldHVybiB3ZWJTb2NrZXRzOwogfQogCi12
b2lkIFBhZ2VOZXR3b3JrQWdlbnQ6OnNldFJlc291cmNlQ2FjaGluZ0Rpc2FibGVkKGJvb2wgZGlz
YWJsZWQpCit2b2lkIFBhZ2VOZXR3b3JrQWdlbnQ6OnNldFJlc291cmNlQ2FjaGluZ0Rpc2FibGVk
SW50ZXJhbChib29sIGRpc2FibGVkKQogewogICAgIG1faW5zcGVjdGVkUGFnZS5zZXRSZXNvdXJj
ZUNhY2hpbmdEaXNhYmxlZEJ5V2ViSW5zcGVjdG9yKGRpc2FibGVkKTsKIH0KIAotU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogUGFnZU5ldHdvcmtBZ2VudDo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dChF
cnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgZnJhbWVJZCkKK1NjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIFBhZ2VOZXR3b3JrQWdlbnQ6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
UHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgUHJvdG9jb2w6Ok5ldHdv
cms6OkZyYW1lSWQmIGZyYW1lSWQpCiB7CiAgICAgYXV0byogcGFnZUFnZW50ID0gbV9pbnN0cnVt
ZW50aW5nQWdlbnRzLmVuYWJsZWRQYWdlQWdlbnQoKTsKICAgICBpZiAoIXBhZ2VBZ2VudCkgewpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VOZXR3
b3JrQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlTmV0
d29ya0FnZW50LmgKaW5kZXggYmVkY2UzZThkYmI3YzlkMjJiMmUxYjk3MmQyMmIyYTViY2U0MGFj
YS4uMDJkNGJlYjIxYzUyZmMxYjM0NjcyZGNlYWEzNzUwNDUxYmU1MjQxZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VOZXR3b3JrQWdlbnQuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZU5ldHdvcmtBZ2Vu
dC5oCkBAIC0zNiwxNSArMzYsMTUgQEAgY2xhc3MgUGFnZU5ldHdvcmtBZ2VudCBmaW5hbCA6IHB1
YmxpYyBJbnNwZWN0b3JOZXR3b3JrQWdlbnQgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OwogcHVibGljOgogICAgIFBhZ2VOZXR3b3JrQWdlbnQoUGFnZUFnZW50Q29udGV4dCYpOwotICAg
IH5QYWdlTmV0d29ya0FnZW50KCkgb3ZlcnJpZGU7CisgICAgflBhZ2VOZXR3b3JrQWdlbnQoKTsK
IAogcHJpdmF0ZToKLSAgICBTdHJpbmcgbG9hZGVySWRlbnRpZmllcihEb2N1bWVudExvYWRlciop
IG92ZXJyaWRlOwotICAgIFN0cmluZyBmcmFtZUlkZW50aWZpZXIoRG9jdW1lbnRMb2FkZXIqKSBv
dmVycmlkZTsKLSAgICBWZWN0b3I8V2ViU29ja2V0Kj4gYWN0aXZlV2ViU29ja2V0cyhjb25zdCBM
b2NrSG9sZGVyJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRSZXNvdXJjZUNhY2hpbmdEaXNhYmxl
ZChib29sKSBvdmVycmlkZTsKLSAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVj
dXRpb25Db250ZXh0KEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBmcmFtZUlkKSBvdmVycmlk
ZTsKLSAgICBib29sIHNob3VsZEZvcmNlQnVmZmVyaW5nTmV0d29ya1Jlc291cmNlRGF0YSgpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6
TmV0d29yazo6TG9hZGVySWQgbG9hZGVySWRlbnRpZmllcihEb2N1bWVudExvYWRlciopOworICAg
IEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OkZyYW1lSWQgZnJhbWVJZGVudGlmaWVyKERv
Y3VtZW50TG9hZGVyKik7CisgICAgVmVjdG9yPFdlYlNvY2tldCo+IGFjdGl2ZVdlYlNvY2tldHMo
Y29uc3QgTG9ja0hvbGRlciYpOworICAgIHZvaWQgc2V0UmVzb3VyY2VDYWNoaW5nRGlzYWJsZWRJ
bnRlcmFsKGJvb2wpOworICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBjb25zdCBJbnNwZWN0
b3I6OlByb3RvY29sOjpOZXR3b3JrOjpGcmFtZUlkJik7CisgICAgYm9vbCBzaG91bGRGb3JjZUJ1
ZmZlcmluZ05ldHdvcmtSZXNvdXJjZURhdGEoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCiAg
ICAgUGFnZSYgbV9pbnNwZWN0ZWRQYWdlOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlUnVudGltZUFnZW50LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlUnVudGltZUFnZW50LmNwcAppbmRleCBlOGFi
NWY0Yzg5YWRlNGZjODVjMDQyYjQzNDMzYjcyNjU2M2FiZGQyLi4wMGU2OWYxYWEyZTNmOGVhMmY0
NDVlOGRkNDQ2ZGQxNmVhNjM2M2RmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvYWdlbnRzL3BhZ2UvUGFnZVJ1bnRpbWVBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VSdW50aW1lQWdlbnQuY3BwCkBAIC01MiwxMSArNTIs
NiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CiAK
LXN0YXRpYyBib29sIGFzQm9vbChjb25zdCBib29sKiBiKQotewotICAgIHJldHVybiBiICYmICpi
OwotfQotCiBQYWdlUnVudGltZUFnZW50OjpQYWdlUnVudGltZUFnZW50KFBhZ2VBZ2VudENvbnRl
eHQmIGNvbnRleHQpCiAgICAgOiBJbnNwZWN0b3JSdW50aW1lQWdlbnQoY29udGV4dCkKICAgICAs
IG1fZnJvbnRlbmREaXNwYXRjaGVyKG1ha2VVbmlxdWU8SW5zcGVjdG9yOjpSdW50aW1lRnJvbnRl
bmREaXNwYXRjaGVyPihjb250ZXh0LmZyb250ZW5kUm91dGVyKSkKQEAgLTY4LDI3ICs2MywyOSBA
QCBQYWdlUnVudGltZUFnZW50OjpQYWdlUnVudGltZUFnZW50KFBhZ2VBZ2VudENvbnRleHQmIGNv
bnRleHQpCiAKIFBhZ2VSdW50aW1lQWdlbnQ6On5QYWdlUnVudGltZUFnZW50KCkgPSBkZWZhdWx0
OwogCi12b2lkIFBhZ2VSdW50aW1lQWdlbnQ6OmVuYWJsZShFcnJvclN0cmluZyYgZXJyb3JTdHJp
bmcpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBQYWdlUnVudGltZUFnZW50OjplbmFi
bGUoKQogewogICAgIGlmIChtX2luc3RydW1lbnRpbmdBZ2VudHMuZW5hYmxlZFBhZ2VSdW50aW1l
QWdlbnQoKSA9PSB0aGlzKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB7IH07CiAK
LSAgICBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmVuYWJsZShlcnJvclN0cmluZyk7Ci0gICAgaWYg
KCFlcnJvclN0cmluZy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKKyAgICBhdXRvIHJlc3Vs
dCA9IEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6ZW5hYmxlKCk7CisgICAgaWYgKCFyZXN1bHQpCisg
ICAgICAgIHJldHVybiByZXN1bHQ7CiAKICAgICAvLyBSZXBvcnQgaW5pdGlhbCBjb250ZXh0cyBi
ZWZvcmUgZW5hYmxpbmcgaW5zdHJ1bWVudGF0aW9uIGFzIHRoZSByZXBvcnRpbmcKICAgICAvLyBj
YW4gZm9yY2UgY3JlYXRpb24gb2Ygc2NyaXB0IHN0YXRlIHdoaWNoIGNvdWxkIHJlc3VsdCBpbiBk
dXBsaWNhdGUgbm90aWZpY2F0aW9ucy4KICAgICByZXBvcnRFeGVjdXRpb25Db250ZXh0Q3JlYXRp
b24oKTsKIAogICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy5zZXRFbmFibGVkUGFnZVJ1bnRpbWVB
Z2VudCh0aGlzKTsKKworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgUGFnZVJ1bnRpbWVB
Z2VudDo6ZGlzYWJsZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCitQcm90b2NvbDo6RXJyb3JT
dHJpbmdPcjx2b2lkPiBQYWdlUnVudGltZUFnZW50OjpkaXNhYmxlKCkKIHsKICAgICBtX2luc3Ry
dW1lbnRpbmdBZ2VudHMuc2V0RW5hYmxlZFBhZ2VSdW50aW1lQWdlbnQobnVsbHB0cik7CiAKLSAg
ICBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmRpc2FibGUoZXJyb3JTdHJpbmcpOworICAgIHJldHVy
biBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmRpc2FibGUoKTsKIH0KIAogdm9pZCBQYWdlUnVudGlt
ZUFnZW50OjpmcmFtZU5hdmlnYXRlZChGcmFtZSYgZnJhbWUpCkBAIC0xMDYsNyArMTAzLDcgQEAg
dm9pZCBQYWdlUnVudGltZUFnZW50OjpkaWRDbGVhcldpbmRvd09iamVjdEluV29ybGQoRnJhbWUm
IGZyYW1lLCBET01XcmFwcGVyV29ybGQKICAgICBub3RpZnlDb250ZXh0Q3JlYXRlZChwYWdlQWdl
bnQtPmZyYW1lSWQoJmZyYW1lKSwgZnJhbWUuc2NyaXB0KCkuZ2xvYmFsT2JqZWN0KHdvcmxkKSwg
d29ybGQpOwogfQogCi1JbmplY3RlZFNjcmlwdCBQYWdlUnVudGltZUFnZW50OjppbmplY3RlZFNj
cmlwdEZvckV2YWwoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBpbnQqIGV4ZWN1dGlv
bkNvbnRleHRJZCkKK0luamVjdGVkU2NyaXB0IFBhZ2VSdW50aW1lQWdlbnQ6OmluamVjdGVkU2Ny
aXB0Rm9yRXZhbChQcm90b2NvbDo6RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBPcHRpb25hbDxQ
cm90b2NvbDo6UnVudGltZTo6RXhlY3V0aW9uQ29udGV4dElkPiYmIGV4ZWN1dGlvbkNvbnRleHRJ
ZCkKIHsKICAgICBpZiAoIWV4ZWN1dGlvbkNvbnRleHRJZCkgewogICAgICAgICBKU0M6OkpTR2xv
YmFsT2JqZWN0KiBzY3JpcHRTdGF0ZSA9IG1haW5Xb3JsZEV4ZWNTdGF0ZSgmbV9pbnNwZWN0ZWRQ
YWdlLm1haW5GcmFtZSgpKTsKQEAgLTE1OSwyMiArMTU2LDIyIEBAIHZvaWQgUGFnZVJ1bnRpbWVB
Z2VudDo6cmVwb3J0RXhlY3V0aW9uQ29udGV4dENyZWF0aW9uKCkKICAgICB9CiB9CiAKLXN0YXRp
YyBJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0VHlwZSB0b1By
b3RvY29sKERPTVdyYXBwZXJXb3JsZDo6VHlwZSB0eXBlKQorc3RhdGljIFByb3RvY29sOjpSdW50
aW1lOjpFeGVjdXRpb25Db250ZXh0VHlwZSB0b1Byb3RvY29sKERPTVdyYXBwZXJXb3JsZDo6VHlw
ZSB0eXBlKQogewogICAgIHN3aXRjaCAodHlwZSkgewogICAgIGNhc2UgRE9NV3JhcHBlcldvcmxk
OjpUeXBlOjpOb3JtYWw6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50
aW1lOjpFeGVjdXRpb25Db250ZXh0VHlwZTo6Tm9ybWFsOworICAgICAgICByZXR1cm4gUHJvdG9j
b2w6OlJ1bnRpbWU6OkV4ZWN1dGlvbkNvbnRleHRUeXBlOjpOb3JtYWw7CiAgICAgY2FzZSBET01X
cmFwcGVyV29ybGQ6OlR5cGU6OlVzZXI6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0VHlwZTo6VXNlcjsKKyAgICAgICAgcmV0dXJu
IFByb3RvY29sOjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0VHlwZTo6VXNlcjsKICAgICBjYXNl
IERPTVdyYXBwZXJXb3JsZDo6VHlwZTo6SW50ZXJuYWw6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0
b3I6OlByb3RvY29sOjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0VHlwZTo6SW50ZXJuYWw7Cisg
ICAgICAgIHJldHVybiBQcm90b2NvbDo6UnVudGltZTo6RXhlY3V0aW9uQ29udGV4dFR5cGU6Oklu
dGVybmFsOwogICAgIH0KIAogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBJ
bnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0VHlwZTo6SW50ZXJu
YWw7CisgICAgcmV0dXJuIFByb3RvY29sOjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0VHlwZTo6
SW50ZXJuYWw7CiB9CiAKLXZvaWQgUGFnZVJ1bnRpbWVBZ2VudDo6bm90aWZ5Q29udGV4dENyZWF0
ZWQoY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIGNvbnN0IERPTVdyYXBwZXJXb3JsZCYgd29ybGQsIFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0
eU9yaWdpbikKK3ZvaWQgUGFnZVJ1bnRpbWVBZ2VudDo6bm90aWZ5Q29udGV4dENyZWF0ZWQoY29u
c3QgUHJvdG9jb2w6Ok5ldHdvcms6OkZyYW1lSWQmIGZyYW1lSWQsIEpTQzo6SlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgY29uc3QgRE9NV3JhcHBlcldvcmxkJiB3b3JsZCwgU2VjdXJpdHlP
cmlnaW4qIHNlY3VyaXR5T3JpZ2luKQogewogICAgIGF1dG8gaW5qZWN0ZWRTY3JpcHQgPSBpbmpl
Y3RlZFNjcmlwdE1hbmFnZXIoKS5pbmplY3RlZFNjcmlwdEZvcihnbG9iYWxPYmplY3QpOwogICAg
IGlmIChpbmplY3RlZFNjcmlwdC5oYXNOb1ZhbHVlKCkpCkBAIC0xODQsNyArMTgxLDcgQEAgdm9p
ZCBQYWdlUnVudGltZUFnZW50Ojpub3RpZnlDb250ZXh0Q3JlYXRlZChjb25zdCBTdHJpbmcmIGZy
YW1lSWQsIEpTQzo6SlNHbG9iYWwKICAgICBpZiAobmFtZS5pc0VtcHR5KCkgJiYgc2VjdXJpdHlP
cmlnaW4pCiAgICAgICAgIG5hbWUgPSBzZWN1cml0eU9yaWdpbi0+dG9SYXdTdHJpbmcoKTsKIAot
ICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5leGVjdXRpb25Db250ZXh0Q3JlYXRlZChJbnNwZWN0
b3I6OlByb3RvY29sOjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0RGVzY3JpcHRpb246OmNyZWF0
ZSgpCisgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPmV4ZWN1dGlvbkNvbnRleHRDcmVhdGVkKFBy
b3RvY29sOjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0RGVzY3JpcHRpb246OmNyZWF0ZSgpCiAg
ICAgICAgIC5zZXRJZChpbmplY3RlZFNjcmlwdE1hbmFnZXIoKS5pbmplY3RlZFNjcmlwdElkRm9y
KGdsb2JhbE9iamVjdCkpCiAgICAgICAgIC5zZXRUeXBlKHRvUHJvdG9jb2wod29ybGQudHlwZSgp
KSkKICAgICAgICAgLnNldE5hbWUobmFtZSkKQEAgLTE5MiwxNiArMTg5LDE2IEBAIHZvaWQgUGFn
ZVJ1bnRpbWVBZ2VudDo6bm90aWZ5Q29udGV4dENyZWF0ZWQoY29uc3QgU3RyaW5nJiBmcmFtZUlk
LCBKU0M6OkpTR2xvYmFsCiAgICAgICAgIC5yZWxlYXNlKCkpOwogfQogCi12b2lkIFBhZ2VSdW50
aW1lQWdlbnQ6OmV2YWx1YXRlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5n
JiBleHByZXNzaW9uLCBjb25zdCBTdHJpbmcqIG9iamVjdEdyb3VwLCBjb25zdCBib29sKiBpbmNs
dWRlQ29tbWFuZExpbmVBUEksIGNvbnN0IGJvb2wqIGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRN
dXRlQ29uc29sZSwgY29uc3QgaW50KiBleGVjdXRpb25Db250ZXh0SWQsIGNvbnN0IGJvb2wqIHJl
dHVybkJ5VmFsdWUsIGNvbnN0IGJvb2wqIGdlbmVyYXRlUHJldmlldywgY29uc3QgYm9vbCogc2F2
ZVJlc3VsdCwgY29uc3QgYm9vbCogZW11bGF0ZVVzZXJHZXN0dXJlLCBSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0LCBPcHRpb25hbDxib29s
PiYgd2FzVGhyb3duLCBPcHRpb25hbDxpbnQ+JiBzYXZlZFJlc3VsdEluZGV4KQorUHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8c3RkOjp0dXBsZTxSZWY8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9i
amVjdD4sIE9wdGlvbmFsPGJvb2w+IC8qIHdhc1Rocm93biAqLywgT3B0aW9uYWw8aW50PiAvKiBz
YXZlZFJlc3VsdEluZGV4ICovPj4gUGFnZVJ1bnRpbWVBZ2VudDo6ZXZhbHVhdGUoY29uc3QgU3Ry
aW5nJiBleHByZXNzaW9uLCBjb25zdCBTdHJpbmcmIG9iamVjdEdyb3VwLCBPcHRpb25hbDxib29s
PiYmIGluY2x1ZGVDb21tYW5kTGluZUFQSSwgT3B0aW9uYWw8Ym9vbD4mJiBkb05vdFBhdXNlT25F
eGNlcHRpb25zQW5kTXV0ZUNvbnNvbGUsIE9wdGlvbmFsPFByb3RvY29sOjpSdW50aW1lOjpFeGVj
dXRpb25Db250ZXh0SWQ+JiYgZXhlY3V0aW9uQ29udGV4dElkLCBPcHRpb25hbDxib29sPiYmIHJl
dHVybkJ5VmFsdWUsIE9wdGlvbmFsPGJvb2w+JiYgZ2VuZXJhdGVQcmV2aWV3LCBPcHRpb25hbDxi
b29sPiYmIHNhdmVSZXN1bHQsIE9wdGlvbmFsPGJvb2w+JiYgZW11bGF0ZVVzZXJHZXN0dXJlKQog
ewotICAgIFVzZXJHZXN0dXJlRW11bGF0aW9uU2NvcGUgdXNlckdlc3R1cmVTY29wZShtX2luc3Bl
Y3RlZFBhZ2UsIGFzQm9vbChlbXVsYXRlVXNlckdlc3R1cmUpKTsKLSAgICBJbnNwZWN0b3JSdW50
aW1lQWdlbnQ6OmV2YWx1YXRlKGVycm9yU3RyaW5nLCBleHByZXNzaW9uLCBvYmplY3RHcm91cCwg
aW5jbHVkZUNvbW1hbmRMaW5lQVBJLCBkb05vdFBhdXNlT25FeGNlcHRpb25zQW5kTXV0ZUNvbnNv
bGUsIGV4ZWN1dGlvbkNvbnRleHRJZCwgcmV0dXJuQnlWYWx1ZSwgZ2VuZXJhdGVQcmV2aWV3LCBz
YXZlUmVzdWx0LCBlbXVsYXRlVXNlckdlc3R1cmUsIHJlc3VsdCwgd2FzVGhyb3duLCBzYXZlZFJl
c3VsdEluZGV4KTsKKyAgICBVc2VyR2VzdHVyZUVtdWxhdGlvblNjb3BlIHVzZXJHZXN0dXJlU2Nv
cGUobV9pbnNwZWN0ZWRQYWdlLCBlbXVsYXRlVXNlckdlc3R1cmUgJiYgKmVtdWxhdGVVc2VyR2Vz
dHVyZSk7CisgICAgcmV0dXJuIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6ZXZhbHVhdGUoZXhwcmVz
c2lvbiwgb2JqZWN0R3JvdXAsIFdURk1vdmUoaW5jbHVkZUNvbW1hbmRMaW5lQVBJKSwgV1RGTW92
ZShkb05vdFBhdXNlT25FeGNlcHRpb25zQW5kTXV0ZUNvbnNvbGUpLCBXVEZNb3ZlKGV4ZWN1dGlv
bkNvbnRleHRJZCksIFdURk1vdmUocmV0dXJuQnlWYWx1ZSksIFdURk1vdmUoZ2VuZXJhdGVQcmV2
aWV3KSwgV1RGTW92ZShzYXZlUmVzdWx0KSwgV1RGTW92ZShlbXVsYXRlVXNlckdlc3R1cmUpKTsK
IH0KIAotdm9pZCBQYWdlUnVudGltZUFnZW50OjpjYWxsRnVuY3Rpb25PbihFcnJvclN0cmluZyYg
ZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgb2JqZWN0SWQsIGNvbnN0IFN0cmluZyYgZXhwcmVz
c2lvbiwgY29uc3QgSlNPTjo6QXJyYXkqIG9wdGlvbmFsQXJndW1lbnRzLCBjb25zdCBib29sKiBk
b05vdFBhdXNlT25FeGNlcHRpb25zQW5kTXV0ZUNvbnNvbGUsIGNvbnN0IGJvb2wqIHJldHVybkJ5
VmFsdWUsIGNvbnN0IGJvb2wqIGdlbmVyYXRlUHJldmlldywgY29uc3QgYm9vbCogZW11bGF0ZVVz
ZXJHZXN0dXJlLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2Jq
ZWN0PiYgcmVzdWx0LCBPcHRpb25hbDxib29sPiYgd2FzVGhyb3duKQorUHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8c3RkOjp0dXBsZTxSZWY8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4s
IE9wdGlvbmFsPGJvb2w+IC8qIHdhc1Rocm93biAqLz4+IFBhZ2VSdW50aW1lQWdlbnQ6OmNhbGxG
dW5jdGlvbk9uKGNvbnN0IFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3RJZCYgb2JqZWN0
SWQsIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgUmVmUHRyPEpTT046OkFycmF5PiYmIG9wdGlv
bmFsQXJndW1lbnRzLCBPcHRpb25hbDxib29sPiYmIGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRN
dXRlQ29uc29sZSwgT3B0aW9uYWw8Ym9vbD4mJiByZXR1cm5CeVZhbHVlLCBPcHRpb25hbDxib29s
PiYmIGdlbmVyYXRlUHJldmlldywgT3B0aW9uYWw8Ym9vbD4mJiBlbXVsYXRlVXNlckdlc3R1cmUp
CiB7Ci0gICAgVXNlckdlc3R1cmVFbXVsYXRpb25TY29wZSB1c2VyR2VzdHVyZVNjb3BlKG1faW5z
cGVjdGVkUGFnZSwgYXNCb29sKGVtdWxhdGVVc2VyR2VzdHVyZSkpOwotICAgIEluc3BlY3RvclJ1
bnRpbWVBZ2VudDo6Y2FsbEZ1bmN0aW9uT24oZXJyb3JTdHJpbmcsIG9iamVjdElkLCBleHByZXNz
aW9uLCBvcHRpb25hbEFyZ3VtZW50cywgZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25z
b2xlLCByZXR1cm5CeVZhbHVlLCBnZW5lcmF0ZVByZXZpZXcsIGVtdWxhdGVVc2VyR2VzdHVyZSwg
cmVzdWx0LCB3YXNUaHJvd24pOworICAgIFVzZXJHZXN0dXJlRW11bGF0aW9uU2NvcGUgdXNlckdl
c3R1cmVTY29wZShtX2luc3BlY3RlZFBhZ2UsIGVtdWxhdGVVc2VyR2VzdHVyZSAmJiAqZW11bGF0
ZVVzZXJHZXN0dXJlKTsKKyAgICByZXR1cm4gSW5zcGVjdG9yUnVudGltZUFnZW50OjpjYWxsRnVu
Y3Rpb25PbihvYmplY3RJZCwgZXhwcmVzc2lvbiwgV1RGTW92ZShvcHRpb25hbEFyZ3VtZW50cyks
IFdURk1vdmUoZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xlKSwgV1RGTW92ZShy
ZXR1cm5CeVZhbHVlKSwgV1RGTW92ZShnZW5lcmF0ZVByZXZpZXcpLCBXVEZNb3ZlKGVtdWxhdGVV
c2VyR2VzdHVyZSkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZVJ1bnRpbWVBZ2VudC5oIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VSdW50aW1lQWdlbnQuaApp
bmRleCAyYWYzNzM5YjdmZTdjMTZmYWE3ZDhkMjc5N2NlNmQwMTAyMTUzOThkLi4yOTg0NjVjNTJi
NDI0NjRjMjczMzY1OWUwN2YzZjc2MDE3NGE5NWViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZVJ1bnRpbWVBZ2VudC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlUnVudGltZUFnZW50LmgKQEAgLTQ1LDMx
ICs0NSwzMCBAQCBjbGFzcyBET01XcmFwcGVyV29ybGQ7CiBjbGFzcyBGcmFtZTsKIGNsYXNzIFBh
Z2U7CiBjbGFzcyBTZWN1cml0eU9yaWdpbjsKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwog
CiBjbGFzcyBQYWdlUnVudGltZUFnZW50IGZpbmFsIDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVj
dG9yUnVudGltZUFnZW50IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShQYWdlUnVudGltZUFn
ZW50KTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBQYWdlUnVu
dGltZUFnZW50KFBhZ2VBZ2VudENvbnRleHQmKTsKLSAgICB+UGFnZVJ1bnRpbWVBZ2VudCgpIG92
ZXJyaWRlOworICAgIH5QYWdlUnVudGltZUFnZW50KCk7CiAKICAgICAvLyBSdW50aW1lQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyCi0gICAgdm9pZCBlbmFibGUoRXJyb3JTdHJpbmcmKSBvdmVycmlk
ZTsKLSAgICB2b2lkIGRpc2FibGUoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2b2lkIGV2
YWx1YXRlKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBjb25zdCBTdHJp
bmcqIG9iamVjdEdyb3VwLCBjb25zdCBib29sKiBpbmNsdWRlQ29tbWFuZExpbmVBUEksIGNvbnN0
IGJvb2wqIGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29sZSwgY29uc3QgaW50KiBl
eGVjdXRpb25Db250ZXh0SWQsIGNvbnN0IGJvb2wqIHJldHVybkJ5VmFsdWUsIGNvbnN0IGJvb2wq
IGdlbmVyYXRlUHJldmlldywgY29uc3QgYm9vbCogc2F2ZVJlc3VsdCwgY29uc3QgYm9vbCogZW11
bGF0ZVVzZXJHZXN0dXJlLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6UmVt
b3RlT2JqZWN0PiYgcmVzdWx0LCBPcHRpb25hbDxib29sPiYgd2FzVGhyb3duLCBPcHRpb25hbDxp
bnQ+JiBzYXZlZFJlc3VsdEluZGV4KSBvdmVycmlkZTsKLSAgICB2b2lkIGNhbGxGdW5jdGlvbk9u
KEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBvYmplY3RJZCwgY29uc3QgU3RyaW5nJiBleHBy
ZXNzaW9uLCBjb25zdCBKU09OOjpBcnJheSogb3B0aW9uYWxBcmd1bWVudHMsIGNvbnN0IGJvb2wq
IGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29sZSwgY29uc3QgYm9vbCogcmV0dXJu
QnlWYWx1ZSwgY29uc3QgYm9vbCogZ2VuZXJhdGVQcmV2aWV3LCBjb25zdCBib29sKiBlbXVsYXRl
VXNlckdlc3R1cmUsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVP
YmplY3Q+JiByZXN1bHQsIE9wdGlvbmFsPGJvb2w+JiB3YXNUaHJvd24pIG92ZXJyaWRlOworICAg
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZW5hYmxlKCk7CisgICAg
SW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBkaXNhYmxlKCk7CisgICAg
SW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxzdGQ6OnR1cGxlPFJlZjxJbnNwZWN0
b3I6OlByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+LCBPcHRpb25hbDxib29sPiAvKiB3
YXNUaHJvd24gKi8sIE9wdGlvbmFsPGludD4gLyogc2F2ZWRSZXN1bHRJbmRleCAqLz4+IGV2YWx1
YXRlKGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCwg
T3B0aW9uYWw8Ym9vbD4mJiBpbmNsdWRlQ29tbWFuZExpbmVBUEksIE9wdGlvbmFsPGJvb2w+JiYg
ZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xlLCBPcHRpb25hbDxJbnNwZWN0b3I6
OlByb3RvY29sOjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0SWQ+JiYsIE9wdGlvbmFsPGJvb2w+
JiYgcmV0dXJuQnlWYWx1ZSwgT3B0aW9uYWw8Ym9vbD4mJiBnZW5lcmF0ZVByZXZpZXcsIE9wdGlv
bmFsPGJvb2w+JiYgc2F2ZVJlc3VsdCwgT3B0aW9uYWw8Ym9vbD4mJiBlbXVsYXRlVXNlckdlc3R1
cmUpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8c3RkOjp0dXBsZTxS
ZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiwgT3B0aW9uYWw8
Ym9vbD4gLyogd2FzVGhyb3duICovPj4gY2FsbEZ1bmN0aW9uT24oY29uc3QgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0SWQmLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Np
b24sIFJlZlB0cjxKU09OOjpBcnJheT4mJiBhcmd1bWVudHMsIE9wdGlvbmFsPGJvb2w+JiYgZG9O
b3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xlLCBPcHRpb25hbDxib29sPiYmIHJldHVy
bkJ5VmFsdWUsIE9wdGlvbmFsPGJvb2w+JiYgZ2VuZXJhdGVQcmV2aWV3LCBPcHRpb25hbDxib29s
PiYmIGVtdWxhdGVVc2VyR2VzdHVyZSk7CiAKICAgICAvLyBJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b24KICAgICB2b2lkIGZyYW1lTmF2aWdhdGVkKEZyYW1lJik7CiAgICAgdm9pZCBkaWRDbGVhcldp
bmRvd09iamVjdEluV29ybGQoRnJhbWUmLCBET01XcmFwcGVyV29ybGQmKTsKIAogcHJpdmF0ZToK
LSAgICBJbnNwZWN0b3I6OkluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0Rm9yRXZhbChFcnJv
clN0cmluZyYsIGNvbnN0IGludCogZXhlY3V0aW9uQ29udGV4dElkKSBvdmVycmlkZTsKLSAgICB2
b2lkIG11dGVDb25zb2xlKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCB1bm11dGVDb25zb2xlKCkgb3Zl
cnJpZGU7CisgICAgSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdEZvckV2
YWwoSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBPcHRpb25hbDxJbnNwZWN0b3I6
OlByb3RvY29sOjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0SWQ+JiYpOworICAgIHZvaWQgbXV0
ZUNvbnNvbGUoKTsKKyAgICB2b2lkIHVubXV0ZUNvbnNvbGUoKTsKICAgICB2b2lkIHJlcG9ydEV4
ZWN1dGlvbkNvbnRleHRDcmVhdGlvbigpOwotICAgIHZvaWQgbm90aWZ5Q29udGV4dENyZWF0ZWQo
Y29uc3QgU3RyaW5nJiBmcmFtZUlkLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgY29uc3QgRE9NV3Jh
cHBlcldvcmxkJiwgU2VjdXJpdHlPcmlnaW4qID0gbnVsbHB0cik7CisgICAgdm9pZCBub3RpZnlD
b250ZXh0Q3JlYXRlZChjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpGcmFtZUlk
JiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIGNvbnN0IERPTVdyYXBwZXJXb3JsZCYsIFNlY3VyaXR5
T3JpZ2luKiA9IG51bGxwdHIpOwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPEluc3BlY3Rvcjo6UnVu
dGltZUZyb250ZW5kRGlzcGF0Y2hlcj4gbV9mcm9udGVuZERpc3BhdGNoZXI7CiAgICAgUmVmUHRy
PEluc3BlY3Rvcjo6UnVudGltZUJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVy
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvU2Vy
dmljZVdvcmtlckFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29y
a2VyL1NlcnZpY2VXb3JrZXJBZ2VudC5jcHAKaW5kZXggMThhNjBjM2MxY2IyZmExMTMzZTg5NDE5
MTI2MzlmOTM3MmVmZjJhNi4uYmJlMmNjMDNkNjQ1ZmMxMjkwODRkYmVlOWRkODA0MjJiYmQ2M2Zk
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvU2Vy
dmljZVdvcmtlckFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRz
L3dvcmtlci9TZXJ2aWNlV29ya2VyQWdlbnQuY3BwCkBAIC01NCw5ICs1NCw5IEBAIHZvaWQgU2Vy
dmljZVdvcmtlckFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6
OkRpc2Nvbm5lY3RSZWFzCiB7CiB9CiAKLXZvaWQgU2VydmljZVdvcmtlckFnZW50OjpnZXRJbml0
aWFsaXphdGlvbkluZm8oRXJyb3JTdHJpbmcmLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
U2VydmljZVdvcmtlcjo6Q29uZmlndXJhdGlvbj4mIGluZm8pCitQcm90b2NvbDo6RXJyb3JTdHJp
bmdPcjxSZWY8UHJvdG9jb2w6OlNlcnZpY2VXb3JrZXI6OkNvbmZpZ3VyYXRpb24+PiBTZXJ2aWNl
V29ya2VyQWdlbnQ6OmdldEluaXRpYWxpemF0aW9uSW5mbygpCiB7Ci0gICAgaW5mbyA9IEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlNlcnZpY2VXb3JrZXI6OkNvbmZpZ3VyYXRpb246OmNyZWF0ZSgpCisg
ICAgcmV0dXJuIFByb3RvY29sOjpTZXJ2aWNlV29ya2VyOjpDb25maWd1cmF0aW9uOjpjcmVhdGUo
KQogICAgICAgICAuc2V0VGFyZ2V0SWQobV9zZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGUuaWRlbnRp
ZmllcigpKQogICAgICAgICAuc2V0U2VjdXJpdHlPcmlnaW4obV9zZXJ2aWNlV29ya2VyR2xvYmFs
U2NvcGUuc2VjdXJpdHlPcmlnaW4oKS0+dG9SYXdTdHJpbmcoKSkKICAgICAgICAgLnNldFVybCht
X3NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZS50aHJlYWQoKS5jb250ZXh0RGF0YSgpLnNjcmlwdFVS
TC5zdHJpbmcoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMv
d29ya2VyL1NlcnZpY2VXb3JrZXJBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Fn
ZW50cy93b3JrZXIvU2VydmljZVdvcmtlckFnZW50LmgKaW5kZXggODE0OWZmM2RhYzM1NzhmYzA0
OGI2NThlNjMxN2RlMzJiMTk3ZDQwMC4uMGJhNWNjNWNjN2YzM2Q2MTFiNDVhMDQ5ODc0NTA1NWI4
ZjI5ZmZjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93b3Jr
ZXIvU2VydmljZVdvcmtlckFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Fn
ZW50cy93b3JrZXIvU2VydmljZVdvcmtlckFnZW50LmgKQEAgLTM0LDIxICszNCwxOSBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFNlcnZpY2VXb3JrZXJHbG9iYWxTY29wZTsKIAotdHlw
ZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7Ci0KIGNsYXNzIFNlcnZpY2VXb3JrZXJBZ2VudCBmaW5h
bCA6IHB1YmxpYyBJbnNwZWN0b3JBZ2VudEJhc2UsIHB1YmxpYyBJbnNwZWN0b3I6OlNlcnZpY2VX
b3JrZXJCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KFNlcnZpY2VXb3JrZXJBZ2VudCk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJs
aWM6CiAgICAgU2VydmljZVdvcmtlckFnZW50KFdvcmtlckFnZW50Q29udGV4dCYpOwotICAgIH5T
ZXJ2aWNlV29ya2VyQWdlbnQoKSBvdmVycmlkZTsKKyAgICB+U2VydmljZVdvcmtlckFnZW50KCk7
CiAKICAgICAvLyBJbnNwZWN0b3JBZ2VudEJhc2UKLSAgICB2b2lkIGRpZENyZWF0ZUZyb250ZW5k
QW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kUm91dGVyKiwgSW5zcGVjdG9yOjpCYWNrZW5k
RGlzcGF0Y2hlciopIG92ZXJyaWRlOwotICAgIHZvaWQgd2lsbERlc3Ryb3lGcm9udGVuZEFuZEJh
Y2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKSBvdmVycmlkZTsKKyAgICB2b2lkIGRp
ZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kUm91dGVyKiwgSW5z
cGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlciopOworICAgIHZvaWQgd2lsbERlc3Ryb3lGcm9udGVu
ZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKTsKIAogICAgIC8vIFNlcnZp
Y2VXb3JrZXJCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIKLSAgICB2b2lkIGdldEluaXRpYWxpemF0
aW9uSW5mbyhFcnJvclN0cmluZyYsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpTZXJ2aWNl
V29ya2VyOjpDb25maWd1cmF0aW9uPiYpIG92ZXJyaWRlOworICAgIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkVycm9yU3RyaW5nT3I8UmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlNlcnZpY2VXb3JrZXI6
OkNvbmZpZ3VyYXRpb24+PiBnZXRJbml0aWFsaXphdGlvbkluZm8oKTsKIAogcHJpdmF0ZToKICAg
ICBTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGUmIG1fc2VydmljZVdvcmtlckdsb2JhbFNjb3BlOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2Vy
QXVkaXRBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9X
b3JrZXJBdWRpdEFnZW50LmNwcAppbmRleCBjMTJiNWFhNDEzMmY4OWFjNTgyZGViOWY3MmYxODUx
YTllZWY5NTNmLi44OTI0MTkwZWU2MjBmMTU1MTRhMjUwZDc2MmUyYmU0YTE5MzMwNjNkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJBdWRp
dEFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9X
b3JrZXJBdWRpdEFnZW50LmNwcApAQCAtNDgsNyArNDgsNyBAQCBXb3JrZXJBdWRpdEFnZW50OjpX
b3JrZXJBdWRpdEFnZW50KFdvcmtlckFnZW50Q29udGV4dCYgY29udGV4dCkKIAogV29ya2VyQXVk
aXRBZ2VudDo6fldvcmtlckF1ZGl0QWdlbnQoKSA9IGRlZmF1bHQ7CiAKLUluamVjdGVkU2NyaXB0
IFdvcmtlckF1ZGl0QWdlbnQ6OmluamVjdGVkU2NyaXB0Rm9yRXZhbChFcnJvclN0cmluZyYgZXJy
b3JTdHJpbmcsIGNvbnN0IGludCogZXhlY3V0aW9uQ29udGV4dElkKQorSW5qZWN0ZWRTY3JpcHQg
V29ya2VyQXVkaXRBZ2VudDo6aW5qZWN0ZWRTY3JpcHRGb3JFdmFsKFByb3RvY29sOjpFcnJvclN0
cmluZyYgZXJyb3JTdHJpbmcsIE9wdGlvbmFsPFByb3RvY29sOjpSdW50aW1lOjpFeGVjdXRpb25D
b250ZXh0SWQ+JiYgZXhlY3V0aW9uQ29udGV4dElkKQogewogICAgIGlmIChleGVjdXRpb25Db250
ZXh0SWQpIHsKICAgICAgICAgZXJyb3JTdHJpbmcgPSAiZXhlY3V0aW9uQ29udGV4dElkIGlzIG5v
dCBzdXBwb3J0ZWQgZm9yIHdvcmtlcnMgYXMgdGhlcmUgaXMgb25seSBvbmUgZXhlY3V0aW9uIGNv
bnRleHQiX3M7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dv
cmtlci9Xb3JrZXJBdWRpdEFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRz
L3dvcmtlci9Xb3JrZXJBdWRpdEFnZW50LmgKaW5kZXggZDZhY2RjMGVhM2U4OWYwZmFkMzFjY2Iy
ZDc2OGUwZTE0NmJkMzIzNS4uZDI1OWM2YTc2YzJlY2IwZWViOGVkZDczMzllYzA0NTliZDM3MmIz
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29y
a2VyQXVkaXRBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29y
a2VyL1dvcmtlckF1ZGl0QWdlbnQuaApAQCAtMzcsMTAgKzM3LDEwIEBAIGNsYXNzIFdvcmtlckF1
ZGl0QWdlbnQgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JBdWRpdEFnZW50IHsK
ICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBXb3JrZXJBdWRpdEFn
ZW50KFdvcmtlckFnZW50Q29udGV4dCYpOwotICAgIH5Xb3JrZXJBdWRpdEFnZW50KCkgb3ZlcnJp
ZGU7CisgICAgfldvcmtlckF1ZGl0QWdlbnQoKTsKIAogcHJpdmF0ZToKLSAgICBJbnNwZWN0b3I6
OkluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0Rm9yRXZhbChJbnNwZWN0b3I6OkVycm9yU3Ry
aW5nJiwgY29uc3QgaW50KiBleGVjdXRpb25Db250ZXh0SWQpIG92ZXJyaWRlOworICAgIEluc3Bl
Y3Rvcjo6SW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHRGb3JFdmFsKEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkVycm9yU3RyaW5nJiwgT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGlt
ZTo6RXhlY3V0aW9uQ29udGV4dElkPiYmKTsKIAogICAgIFdvcmtlckdsb2JhbFNjb3BlJiBtX3dv
cmtlckdsb2JhbFNjb3BlOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9hZ2VudHMvd29ya2VyL1dvcmtlckNvbnNvbGVBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2VyQ29uc29sZUFnZW50LmgKaW5kZXggYjdiNTVkMDA2
NTkwZWZiMDgzZmViYjk0ZTQzYjQxMmQ2M2NlYWZkMC4uNTcxNTk5MTI0N2NhZmI5ZDY3ZWYzMzE3
MWFkZmQxYzk2YzdlNDgyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Fn
ZW50cy93b3JrZXIvV29ya2VyQ29uc29sZUFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2VyQ29uc29sZUFnZW50LmgKQEAgLTM1LDcgKzM1LDcg
QEAgY2xhc3MgV29ya2VyQ29uc29sZUFnZW50IGZpbmFsIDogcHVibGljIFdlYkNvbnNvbGVBZ2Vu
dCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgV29ya2VyQ29u
c29sZUFnZW50KFdvcmtlckFnZW50Q29udGV4dCYpOwotICAgIH5Xb3JrZXJDb25zb2xlQWdlbnQo
KSBvdmVycmlkZTsKKyAgICB+V29ya2VyQ29uc29sZUFnZW50KCk7CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRz
L3dvcmtlci9Xb3JrZXJET01EZWJ1Z2dlckFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlckRPTURlYnVnZ2VyQWdlbnQuY3BwCmluZGV4IGJkNWQ4
YTgzNGVhZTg2MzMwZmNiOTcyYzU5MmQ1ZjcwYTdlNzMwNGMuLjkyMjc0MzUwYzYzNzE0NjA1MWQ3
NDk5YzliZmI3NDYwNzAzMjIxMTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9hZ2VudHMvd29ya2VyL1dvcmtlckRPTURlYnVnZ2VyQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlckRPTURlYnVnZ2VyQWdlbnQuY3Bw
CkBAIC0zNywxOSArMzcsMjAgQEAgV29ya2VyRE9NRGVidWdnZXJBZ2VudDo6V29ya2VyRE9NRGVi
dWdnZXJBZ2VudChXb3JrZXJBZ2VudENvbnRleHQmIGNvbnRleHQsIEluc3AKIAogV29ya2VyRE9N
RGVidWdnZXJBZ2VudDo6fldvcmtlckRPTURlYnVnZ2VyQWdlbnQoKSA9IGRlZmF1bHQ7CiAKLXZv
aWQgV29ya2VyRE9NRGVidWdnZXJBZ2VudDo6c2V0RE9NQnJlYWtwb2ludChFcnJvclN0cmluZyYg
ZXJyb3JTdHJpbmcsIGludCAvKiBub2RlSWQgKi8sIGNvbnN0IFN0cmluZyYgLyogdHlwZVN0cmlu
ZyAqLywgY29uc3QgSlNPTjo6T2JqZWN0KiAvKiBvcHRpb25zUGF5bG9hZCAqLykKK1Byb3RvY29s
OjpFcnJvclN0cmluZ09yPHZvaWQ+IFdvcmtlckRPTURlYnVnZ2VyQWdlbnQ6OnNldERPTUJyZWFr
cG9pbnQoUHJvdG9jb2w6OkRPTTo6Tm9kZUlkLCBQcm90b2NvbDo6RE9NRGVidWdnZXI6OkRPTUJy
ZWFrcG9pbnRUeXBlLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIC8qIG9wdGlvbnMgKi8pCiB7Ci0g
ICAgZXJyb3JTdHJpbmcgPSAiTm90IHN1cHBvcnRlZCJfczsKKyAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoIk5vdCBzdXBwb3J0ZWQiX3MpOwogfQogCi12b2lkIFdvcmtlckRPTURlYnVnZ2VyQWdl
bnQ6OnJlbW92ZURPTUJyZWFrcG9pbnQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgLyog
bm9kZUlkICovLCBjb25zdCBTdHJpbmcmIC8qIHR5cGVTdHJpbmcgKi8pCitQcm90b2NvbDo6RXJy
b3JTdHJpbmdPcjx2b2lkPiBXb3JrZXJET01EZWJ1Z2dlckFnZW50OjpyZW1vdmVET01CcmVha3Bv
aW50KFByb3RvY29sOjpET006Ok5vZGVJZCwgUHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpET01CcmVh
a3BvaW50VHlwZSkKIHsKLSAgICBlcnJvclN0cmluZyA9ICJOb3Qgc3VwcG9ydGVkIl9zOworICAg
IHJldHVybiBtYWtlVW5leHBlY3RlZCgiTm90IHN1cHBvcnRlZCJfcyk7CiB9CiAKLXZvaWQgV29y
a2VyRE9NRGVidWdnZXJBZ2VudDo6c2V0QW5pbWF0aW9uRnJhbWVCcmVha3BvaW50KEVycm9yU3Ry
aW5nJiBlcnJvclN0cmluZywgUmVmUHRyPEpTQzo6QnJlYWtwb2ludD4mJikKK2Jvb2wgV29ya2Vy
RE9NRGVidWdnZXJBZ2VudDo6c2V0QW5pbWF0aW9uRnJhbWVCcmVha3BvaW50KFByb3RvY29sOjpF
cnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIFJlZlB0cjxKU0M6OkJyZWFrcG9pbnQ+JiYpCiB7CiAg
ICAgZXJyb3JTdHJpbmcgPSAiTm90IHN1cHBvcnRlZCJfczsKKyAgICByZXR1cm4gZmFsc2U7CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlckRPTURlYnVnZ2VyQWdlbnQuaCBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlckRPTURlYnVnZ2VyQWdlbnQuaApp
bmRleCA4NmViOTNmNWUxOTc1NTFiYmQyMDk2OTY1NzljNzA4OTRkNThjMjFjLi41NmY1YTA5MGEz
MzA4NjAxZGJkYmE5YzRmMmI0ZDNmN2MxMTMzZDE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJET01EZWJ1Z2dlckFnZW50LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2VyRE9NRGVidWdnZXJB
Z2VudC5oCkBAIC0zMSwxOSArMzEsMTcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi10eXBl
ZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQogY2xhc3MgV29ya2VyRE9NRGVidWdnZXJBZ2VudCBm
aW5hbCA6IHB1YmxpYyBJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50IHsKIHB1YmxpYzoKICAgICBX
b3JrZXJET01EZWJ1Z2dlckFnZW50KFdvcmtlckFnZW50Q29udGV4dCYsIEluc3BlY3Rvcjo6SW5z
cGVjdG9yRGVidWdnZXJBZ2VudCopOwotICAgIH5Xb3JrZXJET01EZWJ1Z2dlckFnZW50KCkgb3Zl
cnJpZGU7CisgICAgfldvcmtlckRPTURlYnVnZ2VyQWdlbnQoKTsKIAogICAgIC8vIERPTURlYnVn
Z2VyQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyCi0gICAgdm9pZCBzZXRET01CcmVha3BvaW50KEVy
cm9yU3RyaW5nJiwgaW50IG5vZGVJZCwgY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBKU09OOjpP
YmplY3QqIG9wdGlvbnMpIG92ZXJyaWRlOwotICAgIHZvaWQgcmVtb3ZlRE9NQnJlYWtwb2ludChF
cnJvclN0cmluZyYsIGludCBub2RlSWQsIGNvbnN0IFN0cmluZyYgdHlwZSkgb3ZlcnJpZGU7Cisg
ICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzZXRET01CcmVha3Bv
aW50KEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkLCBJbnNwZWN0b3I6OlByb3RvY29s
OjpET01EZWJ1Z2dlcjo6RE9NQnJlYWtwb2ludFR5cGUsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYg
b3B0aW9ucyk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBy
ZW1vdmVET01CcmVha3BvaW50KEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkLCBJbnNw
ZWN0b3I6OlByb3RvY29sOjpET01EZWJ1Z2dlcjo6RE9NQnJlYWtwb2ludFR5cGUpOwogCiBwcml2
YXRlOgotICAgIHZvaWQgc2V0QW5pbWF0aW9uRnJhbWVCcmVha3BvaW50KEVycm9yU3RyaW5nJiwg
UmVmUHRyPEpTQzo6QnJlYWtwb2ludD4mJikgb3ZlcnJpZGU7CisgICAgYm9vbCBzZXRBbmltYXRp
b25GcmFtZUJyZWFrcG9pbnQoSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBSZWZQ
dHI8SlNDOjpCcmVha3BvaW50PiYmKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlckRl
YnVnZ2VyQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93b3JrZXIv
V29ya2VyRGVidWdnZXJBZ2VudC5jcHAKaW5kZXggY2JjNjIwNTIyMTk0ZjI5YTk0MTg3YThhMjdh
YzEyYjQxOWQzNTllMC4uN2FhNzJiNmE0YzY0Y2E5ZjY3ODE1MGQwNmEzMmQwMjk0YzUwODgyNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2Vy
RGVidWdnZXJBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93
b3JrZXIvV29ya2VyRGVidWdnZXJBZ2VudC5jcHAKQEAgLTUzLDcgKzUzLDcgQEAgdm9pZCBXb3Jr
ZXJEZWJ1Z2dlckFnZW50OjpicmVha3BvaW50QWN0aW9uTG9nKEpTR2xvYmFsT2JqZWN0KiBsZXhp
Y2FsR2xvYmFsT2JqZWMKICAgICBtX3dvcmtlckdsb2JhbFNjb3BlLmFkZENvbnNvbGVNZXNzYWdl
KG1ha2VVbmlxdWU8Q29uc29sZU1lc3NhZ2U+KE1lc3NhZ2VTb3VyY2U6OkpTLCBNZXNzYWdlVHlw
ZTo6TG9nLCBNZXNzYWdlTGV2ZWw6OkxvZywgbWVzc2FnZSwgY3JlYXRlU2NyaXB0Q2FsbFN0YWNr
KGxleGljYWxHbG9iYWxPYmplY3QpKSk7CiB9CiAKLUluamVjdGVkU2NyaXB0IFdvcmtlckRlYnVn
Z2VyQWdlbnQ6OmluamVjdGVkU2NyaXB0Rm9yRXZhbChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcs
IGNvbnN0IGludCogZXhlY3V0aW9uQ29udGV4dElkKQorSW5qZWN0ZWRTY3JpcHQgV29ya2VyRGVi
dWdnZXJBZ2VudDo6aW5qZWN0ZWRTY3JpcHRGb3JFdmFsKFByb3RvY29sOjpFcnJvclN0cmluZyYg
ZXJyb3JTdHJpbmcsIE9wdGlvbmFsPFByb3RvY29sOjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0
SWQ+JiYgZXhlY3V0aW9uQ29udGV4dElkKQogewogICAgIGlmIChleGVjdXRpb25Db250ZXh0SWQp
IHsKICAgICAgICAgZXJyb3JTdHJpbmcgPSAiZXhlY3V0aW9uQ29udGV4dElkIGlzIG5vdCBzdXBw
b3J0ZWQgZm9yIHdvcmtlcnMgYXMgdGhlcmUgaXMgb25seSBvbmUgZXhlY3V0aW9uIGNvbnRleHQi
X3M7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9X
b3JrZXJEZWJ1Z2dlckFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dv
cmtlci9Xb3JrZXJEZWJ1Z2dlckFnZW50LmgKaW5kZXggNGFjMDdkNmNjMzdjMjI4MDMzMzhlYjgw
ZDM0MjE5NTIxYjk2ZjNkZS4uN2NhNjRlNDAxM2E1NGI0MThkNTNlNDc0ODAyZTczMmJmMTkwOGM5
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29y
a2VyRGVidWdnZXJBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMv
d29ya2VyL1dvcmtlckRlYnVnZ2VyQWdlbnQuaApAQCAtMzYsMTcgKzM2LDE3IEBAIGNsYXNzIFdv
cmtlckRlYnVnZ2VyQWdlbnQgZmluYWwgOiBwdWJsaWMgV2ViRGVidWdnZXJBZ2VudCB7CiAgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgV29ya2VyRGVidWdnZXJBZ2Vu
dChXb3JrZXJBZ2VudENvbnRleHQmKTsKLSAgICB+V29ya2VyRGVidWdnZXJBZ2VudCgpIG92ZXJy
aWRlOworICAgIH5Xb3JrZXJEZWJ1Z2dlckFnZW50KCk7CiAKICAgICAvLyBKU0M6OkRlYnVnZ2Vy
OjpPYnNlcnZlcgotICAgIHZvaWQgYnJlYWtwb2ludEFjdGlvbkxvZyhKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiwgY29uc3QgU3RyaW5nJiBkYXRhKSBmaW5hbDsKKyAgICB2b2lkIGJyZWFrcG9pbnRBY3Rp
b25Mb2coSlNDOjpKU0dsb2JhbE9iamVjdCosIGNvbnN0IFN0cmluZyYgZGF0YSk7CiAKIHByaXZh
dGU6CiAgICAgLy8gV2UgZG9uJ3QgbmVlZCB0byBtdXRlIGNvbnNvbGUgZm9yIHdvcmtlcnMuCi0g
ICAgdm9pZCBtdXRlQ29uc29sZSgpIG92ZXJyaWRlIHsgfQotICAgIHZvaWQgdW5tdXRlQ29uc29s
ZSgpIG92ZXJyaWRlIHsgfQorICAgIHZvaWQgbXV0ZUNvbnNvbGUoKSB7IH0KKyAgICB2b2lkIHVu
bXV0ZUNvbnNvbGUoKSB7IH0KIAotICAgIEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHQgaW5qZWN0
ZWRTY3JpcHRGb3JFdmFsKEVycm9yU3RyaW5nJiwgY29uc3QgaW50KiBleGVjdXRpb25Db250ZXh0
SWQpIG92ZXJyaWRlOworICAgIEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3Jp
cHRGb3JFdmFsKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nJiwgT3B0aW9uYWw8SW5z
cGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RXhlY3V0aW9uQ29udGV4dElkPiYmKTsKIAogICAg
IFdvcmtlckdsb2JhbFNjb3BlJiBtX3dvcmtlckdsb2JhbFNjb3BlOwogfTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlck5ldHdvcmtBZ2Vu
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJOZXR3
b3JrQWdlbnQuY3BwCmluZGV4IDUzZmE4ODNhZDk3MTg4Njg0Y2I5NGMwOTBlNzk2MTY5MDgxYjZi
NGQuLjJiMTY4ZTZkM2E3YTFiZTE0NjgzNjljMzBjYzJlYjZjOWIzOWQyNzcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlck5ldHdvcmtBZ2Vu
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2Vy
TmV0d29ya0FnZW50LmNwcApAQCAtNDMsMTIgKzQzLDEyIEBAIFdvcmtlck5ldHdvcmtBZ2VudDo6
V29ya2VyTmV0d29ya0FnZW50KFdvcmtlckFnZW50Q29udGV4dCYgY29udGV4dCkKIAogV29ya2Vy
TmV0d29ya0FnZW50Ojp+V29ya2VyTmV0d29ya0FnZW50KCkgPSBkZWZhdWx0OwogCi1TdHJpbmcg
V29ya2VyTmV0d29ya0FnZW50Ojpsb2FkZXJJZGVudGlmaWVyKERvY3VtZW50TG9hZGVyKikKK1By
b3RvY29sOjpOZXR3b3JrOjpMb2FkZXJJZCBXb3JrZXJOZXR3b3JrQWdlbnQ6OmxvYWRlcklkZW50
aWZpZXIoRG9jdW1lbnRMb2FkZXIqKQogewogICAgIHJldHVybiB7IH07CiB9CiAKLVN0cmluZyBX
b3JrZXJOZXR3b3JrQWdlbnQ6OmZyYW1lSWRlbnRpZmllcihEb2N1bWVudExvYWRlciopCitQcm90
b2NvbDo6TmV0d29yazo6RnJhbWVJZCBXb3JrZXJOZXR3b3JrQWdlbnQ6OmZyYW1lSWRlbnRpZmll
cihEb2N1bWVudExvYWRlciopCiB7CiAgICAgcmV0dXJuIHsgfTsKIH0KQEAgLTU5LDEyICs1OSwx
MiBAQCBWZWN0b3I8V2ViU29ja2V0Kj4gV29ya2VyTmV0d29ya0FnZW50OjphY3RpdmVXZWJTb2Nr
ZXRzKGNvbnN0IExvY2tIb2xkZXImKQogICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgV29ya2Vy
TmV0d29ya0FnZW50OjpzZXRSZXNvdXJjZUNhY2hpbmdEaXNhYmxlZChib29sIGRpc2FibGVkKQor
dm9pZCBXb3JrZXJOZXR3b3JrQWdlbnQ6OnNldFJlc291cmNlQ2FjaGluZ0Rpc2FibGVkSW50ZXJh
bChib29sIGRpc2FibGVkKQogewogICAgIG1fd29ya2VyR2xvYmFsU2NvcGUudGhyZWFkKCkud29y
a2VyRGVidWdnZXJQcm94eSgpLnNldFJlc291cmNlQ2FjaGluZ0Rpc2FibGVkQnlXZWJJbnNwZWN0
b3IoZGlzYWJsZWQpOwogfQogCi1TY3JpcHRFeGVjdXRpb25Db250ZXh0KiBXb3JrZXJOZXR3b3Jr
QWdlbnQ6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcm
KQorU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogV29ya2VyTmV0d29ya0FnZW50OjpzY3JpcHRFeGVj
dXRpb25Db250ZXh0KFByb3RvY29sOjpFcnJvclN0cmluZyYsIGNvbnN0IFByb3RvY29sOjpOZXR3
b3JrOjpGcmFtZUlkJikKIHsKICAgICByZXR1cm4gJm1fd29ya2VyR2xvYmFsU2NvcGU7CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJO
ZXR3b3JrQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dv
cmtlck5ldHdvcmtBZ2VudC5oCmluZGV4IDg5OWYwYTU2ZmQxYjdkYTk0M2E0NTUzYjhjOTRjZjNj
N2JmYjBiOTQuLjkxYjA1YjljMjMwZWM3Y2QzNWE0NmNlNTdjNTY2MzkyNzIyMmRmZjMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlck5ldHdv
cmtBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dv
cmtlck5ldHdvcmtBZ2VudC5oCkBAIC0zNCwxNSArMzQsMTUgQEAgY2xhc3MgV29ya2VyTmV0d29y
a0FnZW50IGZpbmFsIDogcHVibGljIEluc3BlY3Rvck5ldHdvcmtBZ2VudCB7CiAgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgV29ya2VyTmV0d29ya0FnZW50KFdvcmtl
ckFnZW50Q29udGV4dCYpOwotICAgIH5Xb3JrZXJOZXR3b3JrQWdlbnQoKSBvdmVycmlkZTsKKyAg
ICB+V29ya2VyTmV0d29ya0FnZW50KCk7CiAKIHByaXZhdGU6Ci0gICAgU3RyaW5nIGxvYWRlcklk
ZW50aWZpZXIoRG9jdW1lbnRMb2FkZXIqKSBvdmVycmlkZTsKLSAgICBTdHJpbmcgZnJhbWVJZGVu
dGlmaWVyKERvY3VtZW50TG9hZGVyKikgb3ZlcnJpZGU7Ci0gICAgVmVjdG9yPFdlYlNvY2tldCo+
IGFjdGl2ZVdlYlNvY2tldHMoY29uc3QgTG9ja0hvbGRlciYpIG92ZXJyaWRlOwotICAgIHZvaWQg
c2V0UmVzb3VyY2VDYWNoaW5nRGlzYWJsZWQoYm9vbCkgb3ZlcnJpZGU7Ci0gICAgU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dChFcnJvclN0cmluZyYsIGNvbnN0
IFN0cmluZyYgZnJhbWVJZCkgb3ZlcnJpZGU7Ci0gICAgYm9vbCBzaG91bGRGb3JjZUJ1ZmZlcmlu
Z05ldHdvcmtSZXNvdXJjZURhdGEoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9Cisg
ICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6TG9hZGVySWQgbG9hZGVySWRlbnRpZmll
cihEb2N1bWVudExvYWRlciopOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OkZy
YW1lSWQgZnJhbWVJZGVudGlmaWVyKERvY3VtZW50TG9hZGVyKik7CisgICAgVmVjdG9yPFdlYlNv
Y2tldCo+IGFjdGl2ZVdlYlNvY2tldHMoY29uc3QgTG9ja0hvbGRlciYpOworICAgIHZvaWQgc2V0
UmVzb3VyY2VDYWNoaW5nRGlzYWJsZWRJbnRlcmFsKGJvb2wpOworICAgIFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJy
b3JTdHJpbmcmLCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpGcmFtZUlkJik7
CisgICAgYm9vbCBzaG91bGRGb3JjZUJ1ZmZlcmluZ05ldHdvcmtSZXNvdXJjZURhdGEoKSBjb25z
dCB7IHJldHVybiB0cnVlOyB9CiAKICAgICBXb3JrZXJHbG9iYWxTY29wZSYgbV93b3JrZXJHbG9i
YWxTY29wZTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRz
L3dvcmtlci9Xb3JrZXJSdW50aW1lQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2FnZW50cy93b3JrZXIvV29ya2VyUnVudGltZUFnZW50LmNwcAppbmRleCBkOTIzMDgxYzUxZTNi
ZDI3NTIxYWEyNDFjN2NhYzhmYjQwZDNlMjgzLi5mZmZkM2NlYTIxNTM1OWZlNmYwZWQxZWRkNzcy
ZDE2YjcwOTUxZGViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRz
L3dvcmtlci9Xb3JrZXJSdW50aW1lQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlclJ1bnRpbWVBZ2VudC5jcHAKQEAgLTUxLDcgKzUxLDcg
QEAgV29ya2VyUnVudGltZUFnZW50OjpXb3JrZXJSdW50aW1lQWdlbnQoV29ya2VyQWdlbnRDb250
ZXh0JiBjb250ZXh0KQogCiBXb3JrZXJSdW50aW1lQWdlbnQ6On5Xb3JrZXJSdW50aW1lQWdlbnQo
KSA9IGRlZmF1bHQ7CiAKLUluamVjdGVkU2NyaXB0IFdvcmtlclJ1bnRpbWVBZ2VudDo6aW5qZWN0
ZWRTY3JpcHRGb3JFdmFsKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgaW50KiBleGVj
dXRpb25Db250ZXh0SWQpCitJbmplY3RlZFNjcmlwdCBXb3JrZXJSdW50aW1lQWdlbnQ6OmluamVj
dGVkU2NyaXB0Rm9yRXZhbChQcm90b2NvbDo6RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBPcHRp
b25hbDxQcm90b2NvbDo6UnVudGltZTo6RXhlY3V0aW9uQ29udGV4dElkPiYmIGV4ZWN1dGlvbkNv
bnRleHRJZCkKIHsKICAgICBpZiAoZXhlY3V0aW9uQ29udGV4dElkKSB7CiAgICAgICAgIGVycm9y
U3RyaW5nID0gImV4ZWN1dGlvbkNvbnRleHRJZCBpcyBub3Qgc3VwcG9ydGVkIGZvciB3b3JrZXJz
IGFzIHRoZXJlIGlzIG9ubHkgb25lIGV4ZWN1dGlvbiBjb250ZXh0Il9zOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2VyUnVudGltZUFnZW50
LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJSdW50aW1l
QWdlbnQuaAppbmRleCA1MzA4ZWI0Mzg4ZDRkMTA1MmVjNzQ1ODUwNDdhMWU4OGU3ZDQzYjRiLi42
Yjk5OGY0ZDE3MzE4NTFmOTliNjdlZTE1YTVkMjAwMTU4N2Y0ZDA2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJSdW50aW1lQWdlbnQuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJSdW50aW1l
QWdlbnQuaApAQCAtMzcsMjEgKzM3LDIwIEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNz
IFdvcmtlckdsb2JhbFNjb3BlOwotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiAKIGNsYXNz
IFdvcmtlclJ1bnRpbWVBZ2VudCBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3BlY3RvclJ1
bnRpbWVBZ2VudCB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoV29ya2VyUnVudGltZUFnZW50
KTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBXb3JrZXJSdW50
aW1lQWdlbnQoV29ya2VyQWdlbnRDb250ZXh0Jik7Ci0gICAgfldvcmtlclJ1bnRpbWVBZ2VudCgp
IG92ZXJyaWRlOworICAgIH5Xb3JrZXJSdW50aW1lQWdlbnQoKTsKIAogcHJpdmF0ZToKLSAgICBJ
bnNwZWN0b3I6OkluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0Rm9yRXZhbChFcnJvclN0cmlu
ZyYsIGNvbnN0IGludCogZXhlY3V0aW9uQ29udGV4dElkKSBvdmVycmlkZTsKKyAgICBJbnNwZWN0
b3I6OkluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0Rm9yRXZhbChJbnNwZWN0b3I6OlByb3Rv
Y29sOjpFcnJvclN0cmluZyYsIE9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6
OkV4ZWN1dGlvbkNvbnRleHRJZD4mJik7CiAKICAgICAvLyBXZSBkb24ndCBuZWVkIHRvIG11dGUg
Y29uc29sZSBmb3Igd29ya2Vycy4KLSAgICB2b2lkIG11dGVDb25zb2xlKCkgb3ZlcnJpZGUgeyB9
Ci0gICAgdm9pZCB1bm11dGVDb25zb2xlKCkgb3ZlcnJpZGUgeyB9CisgICAgdm9pZCBtdXRlQ29u
c29sZSgpIHsgfQorICAgIHZvaWQgdW5tdXRlQ29uc29sZSgpIHsgfQogCiAgICAgUmVmUHRyPElu
c3BlY3Rvcjo6UnVudGltZUJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOwog
ICAgIFdvcmtlckdsb2JhbFNjb3BlJiBtX3dvcmtlckdsb2JhbFNjb3BlOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNVXRpbGl0aWVzLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NETVV0aWxpdGllcy5jcHAK
aW5kZXggNWU4ODVhZDZlNTg2OTA5YzBlZDIxNWJlZTViZThlOGVmN2MyN2FmOC4uNWJlYmNiNDlh
YThlYjlhMmJiMDcxMWVhZTA4MGYzNzdlMjJiOTgzNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNVXRpbGl0aWVzLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1VdGlsaXRpZXMuY3BwCkBAIC00Nywx
MiArNDcsMTIgQEAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyc2VKU09OT2JqZWN0KGNvbnN0IFNo
YXJlZEJ1ZmZlciYgYnVmZmVyKQogCiAgICAgLy8gUGFyc2UgdGhlIGJ1ZmZlciBjb250ZW50cyBh
cyBKU09OLCByZXR1cm5pbmcgdGhlIHJvb3Qgb2JqZWN0IChpZiBhbnkpLgogICAgIFN0cmluZyBq
c29uIHsgYnVmZmVyLmRhdGEoKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHNpemUpIH07Ci0gICAg
UmVmUHRyPEpTT046OlZhbHVlPiB2YWx1ZTsKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBvYmpl
Y3Q7Ci0gICAgaWYgKCFKU09OOjpWYWx1ZTo6cGFyc2VKU09OKGpzb24sIHZhbHVlKSB8fCAhdmFs
dWUtPmFzT2JqZWN0KG9iamVjdCkpCisKKyAgICBhdXRvIHZhbHVlID0gSlNPTjo6VmFsdWU6OnBh
cnNlSlNPTihqc29uKTsKKyAgICBpZiAoIXZhbHVlKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
IAotICAgIHJldHVybiBvYmplY3Q7CisgICAgcmV0dXJuIHZhbHVlLT5hc09iamVjdCgpOwogfQog
CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEv
Y2xlYXJrZXkvQ0RNQ2xlYXJLZXkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlw
dGVkbWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJLZXkuY3BwCmluZGV4IGU2Y2MyMmQ5MGM3YWMzOWI1
NmZkODJhMTZiMDc2NWVjMWUxY2ZhODcuLjVhMTgyZmRmNDUyNjQyYWE4ZWY0NjBiNzc0YWM5ZTdi
NDBjMmVjNTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1l
ZGlhL2NsZWFya2V5L0NETUNsZWFyS2V5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9lbmNyeXB0ZWRtZWRpYS9jbGVhcmtleS9DRE1DbGVhcktleS5jcHAKQEAgLTU1LDIzICs1NSwy
NyBAQCBzdGF0aWMgT3B0aW9uYWw8VmVjdG9yPFJlZlB0cjxLZXlIYW5kbGU+Pj4gcGFyc2VMaWNl
bnNlRm9ybWF0KGNvbnN0IEpTT046Ok9iamVjdAogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OwogCiAgICAgLy8gUmV0cmlldmUgdGhlIGtleXMgYXJyYXkuCi0gICAgUmVmUHRyPEpTT046OkFy
cmF5PiBrZXlzQXJyYXk7Ci0gICAgaWYgKCFpdC0+dmFsdWUtPmFzQXJyYXkoa2V5c0FycmF5KSkK
KyAgICBhdXRvIGtleXNBcnJheSA9IGl0LT52YWx1ZS0+YXNBcnJheSgpOworICAgIGlmICgha2V5
c0FycmF5KQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgVmVjdG9yPFJlZlB0
cjxLZXlIYW5kbGU+PiBkZWNvZGVkS2V5czsKICAgICBib29sIHZhbGlkRm9ybWF0ID0gc3RkOjph
bGxfb2Yoa2V5c0FycmF5LT5iZWdpbigpLCBrZXlzQXJyYXktPmVuZCgpLAogICAgICAgICBbJmRl
Y29kZWRLZXlzXSAoY29uc3QgYXV0byYgdmFsdWUpIHsKLSAgICAgICAgICAgIFJlZlB0cjxKU09O
OjpPYmplY3Q+IGtleU9iamVjdDsKLSAgICAgICAgICAgIGlmICghdmFsdWUtPmFzT2JqZWN0KGtl
eU9iamVjdCkpCisgICAgICAgICAgICBhdXRvIGtleU9iamVjdCA9IHZhbHVlLT5hc09iamVjdCgp
OworICAgICAgICAgICAgaWYgKCFrZXlPYmplY3QpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgICAgICAgICBTdHJpbmcga2V5VHlwZTsKLSAgICAgICAgICAgIGlmICgha2V5
T2JqZWN0LT5nZXRTdHJpbmcoImt0eSIsIGtleVR5cGUpIHx8ICFlcXVhbExldHRlcnNJZ25vcmlu
Z0FTQ0lJQ2FzZShrZXlUeXBlLCAib2N0IikpCisgICAgICAgICAgICBhdXRvIGtleVR5cGUgPSBr
ZXlPYmplY3QtPmdldFN0cmluZygia3R5Iik7CisgICAgICAgICAgICBpZiAoIWtleVR5cGUgfHwg
IWVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGtleVR5cGUsICJvY3QiKSkKICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgICAgIFN0cmluZyBrZXlJRCwga2V5VmFs
dWU7Ci0gICAgICAgICAgICBpZiAoIWtleU9iamVjdC0+Z2V0U3RyaW5nKCJraWQiLCBrZXlJRCkg
fHwgIWtleU9iamVjdC0+Z2V0U3RyaW5nKCJrIiwga2V5VmFsdWUpKQorICAgICAgICAgICAgYXV0
byBrZXlJRCA9IGtleU9iamVjdC0+Z2V0U3RyaW5nKCJraWQiKTsKKyAgICAgICAgICAgIGlmICgh
a2V5SUQpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICBhdXRv
IGtleVZhbHVlID0ga2V5T2JqZWN0LT5nZXRTdHJpbmcoImsiKTsKKyAgICAgICAgICAgIGlmICgh
a2V5VmFsdWUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgICAgICBL
ZXlJRFR5cGUga2V5SUREYXRhOwpAQCAtOTYsOCArMTAwLDggQEAgc3RhdGljIGJvb2wgcGFyc2VM
aWNlbnNlUmVsZWFzZUFja25vd2xlZGdlbWVudEZvcm1hdChjb25zdCBKU09OOjpPYmplY3QmIHJv
b3QpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIFJldHJpZXZlIHRoZSBraWRzIGFy
cmF5LgotICAgIFJlZlB0cjxKU09OOjpBcnJheT4ga2lkc0FycmF5OwotICAgIGlmICghaXQtPnZh
bHVlLT5hc0FycmF5KGtpZHNBcnJheSkpCisgICAgYXV0byBraWRzQXJyYXkgPSBpdC0+dmFsdWUt
PmFzQXJyYXkoKTsKKyAgICBpZiAoIWtpZHNBcnJheSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CiAgICAgLy8gRklYTUU6IFJldHVybiB0aGUga2V5IElEcyBhbmQgdmFsaWRhdGUgdGhlbS4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9D
RE1GYWlyUGxheVN0cmVhbWluZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9hdmZvdW5kYXRpb24vQ0RNRmFpclBsYXlTdHJlYW1pbmcuY3BwCmluZGV4IDhhYzQ4ZWM1ZGM2
OWIzMTQ5NTdiYTQzM2Y5NzEwMWVhMjc3Njk2NDQuLjRmNDJjNDkzY2MzNTcwZGRjNmFmMDhkZTM5
MDVkMGNjODQ5ZDlhNzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2F2Zm91bmRhdGlvbi9DRE1GYWlyUGxheVN0cmVhbWluZy5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0NETUZhaXJQbGF5U3RyZWFtaW5n
LmNwcApAQCAtOTIsMjQgKzkyLDI0IEBAIHN0YXRpYyBWZWN0b3I8UmVmPFNoYXJlZEJ1ZmZlcj4+
IGV4dHJhY3RTaW5mRGF0YShjb25zdCBTaGFyZWRCdWZmZXImIGJ1ZmZlcikKICAgICAgICAgcmV0
dXJuIHsgfTsKICAgICBTdHJpbmcganNvbiB7IGJ1ZmZlci5kYXRhKCksIHN0YXRpY19jYXN0PHVu
c2lnbmVkPihidWZmZXIuc2l6ZSgpKSB9OwogCi0gICAgUmVmUHRyPEpTT046OlZhbHVlPiB2YWx1
ZTsKLSAgICBpZiAoIUpTT046OlZhbHVlOjpwYXJzZUpTT04oanNvbiwgdmFsdWUpKQorICAgIGF1
dG8gdmFsdWUgPSBKU09OOjpWYWx1ZTo6cGFyc2VKU09OKGpzb24pOworICAgIGlmICghdmFsdWUp
CiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBvYmplY3Q7
Ci0gICAgaWYgKCF2YWx1ZS0+YXNPYmplY3Qob2JqZWN0KSkKKyAgICBhdXRvIG9iamVjdCA9IHZh
bHVlLT5hc09iamVjdCgpOworICAgIGlmICghb2JqZWN0KQogICAgICAgICByZXR1cm4geyB9Owog
Ci0gICAgUmVmUHRyPEpTT046OkFycmF5PiBzaW5mQXJyYXk7Ci0gICAgaWYgKCFvYmplY3QtPmdl
dEFycmF5KENETVByaXZhdGVGYWlyUGxheVN0cmVhbWluZzo6c2luZk5hbWUoKSwgc2luZkFycmF5
KSkKKyAgICBhdXRvIHNpbmZBcnJheSA9IG9iamVjdC0+Z2V0QXJyYXkoQ0RNUHJpdmF0ZUZhaXJQ
bGF5U3RyZWFtaW5nOjpzaW5mTmFtZSgpKTsKKyAgICBpZiAoIXNpbmZBcnJheSkKICAgICAgICAg
cmV0dXJuIHsgfTsKIAogICAgIFZlY3RvcjxSZWY8U2hhcmVkQnVmZmVyPj4gc2luZnM7CiAgICAg
c2luZnMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShzaW5mQXJyYXktPmxlbmd0aCgpKTsKIAogICAg
IGZvciAoYXV0byYgdmFsdWUgOiAqc2luZkFycmF5KSB7Ci0gICAgICAgIFN0cmluZyBrZXlJRDsK
LSAgICAgICAgaWYgKCF2YWx1ZS0+YXNTdHJpbmcoa2V5SUQpKQorICAgICAgICBhdXRvIGtleUlE
ID0gdmFsdWUtPmFzU3RyaW5nKCk7CisgICAgICAgIGlmICgha2V5SUQpCiAgICAgICAgICAgICBj
b250aW51ZTsKIAogICAgICAgICBWZWN0b3I8Y2hhcj4gc2luZkRhdGE7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1JbnN0
YW5jZUZhaXJQbGF5U3RyZWFtaW5nQVZGT2JqQy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NETUluc3RhbmNlRmFpclBsYXlTdHJlYW1pbmdB
VkZPYmpDLm1tCmluZGV4IGMwNTE5YThjMjIxOTMwZjVjNjFhMGE4MGU5ZWMzYTFlOTljOGYxZDQu
LjFjNDlmODg3NTNhOTRjOTA3YmRmNmRiMDE5ZjIxOTViODQ3YjQ4M2QgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NETUluc3Rh
bmNlRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NETUluc3RhbmNlRmFpclBsYXlTdHJlYW1p
bmdBVkZPYmpDLm1tCkBAIC0zMTIsMTEgKzMxMiw4IEBAIHN0YXRpYyBSZWZQdHI8SlNPTjo6VmFs
dWU+IHBhcnNlSlNPTlZhbHVlKGNvbnN0IFNoYXJlZEJ1ZmZlciYgYnVmZmVyKQogCiAgICAgLy8g
UGFyc2UgdGhlIGJ1ZmZlciBjb250ZW50cyBhcyBKU09OLCByZXR1cm5pbmcgdGhlIHJvb3Qgb2Jq
ZWN0IChpZiBhbnkpLgogICAgIFN0cmluZyBqc29uIHsgYnVmZmVyLmRhdGEoKSwgc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KHNpemUpIH07Ci0gICAgUmVmUHRyPEpTT046OlZhbHVlPiB2YWx1ZTsKLSAg
ICBpZiAoIUpTT046OlZhbHVlOjpwYXJzZUpTT04oanNvbiwgdmFsdWUpKQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiB2YWx1ZTsKKyAgICByZXR1cm4gSlNPTjo6VmFsdWU6
OnBhcnNlSlNPTihqc29uKTsKIH0KIAogYm9vbCBDRE1JbnN0YW5jZUZhaXJQbGF5U3RyZWFtaW5n
QVZGT2JqQzo6c3VwcG9ydHNQZXJzaXN0YWJsZVN0YXRlKCkKQEAgLTgwNCwxOSArODAxLDI0IEBA
IHZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9uRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDOjp1cGRhdGVM
aWNlbnNlKGNvbnN0IFN0cmluZyYsIExpCiAgICAgICAgIH0pOwogCiAgICAgICAgIGF1dG8gcm9v
dCA9IHBhcnNlSlNPTlZhbHVlKHJlc3BvbnNlRGF0YSk7Ci0gICAgICAgIFJlZlB0cjxKU09OOjpB
cnJheT4gYXJyYXk7Ci0gICAgICAgIGlmICghcm9vdCB8fCAhcm9vdC0+YXNBcnJheShhcnJheSkp
IHsKKyAgICAgICAgaWYgKCFyb290KSB7CiAgICAgICAgICAgICBjYWxsYmFjayhmYWxzZSwgV1RG
OjpudWxsb3B0LCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCwgRmFpbGVkKTsKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIGF1dG8gcGFyc2VSZXNwb25zZSA9IFsm
XShSZWZQdHI8SlNPTjo6VmFsdWU+JiB2YWx1ZSkgLT4gYm9vbCB7Ci0gICAgICAgICAgICBSZWZQ
dHI8SlNPTjo6T2JqZWN0PiBvYmplY3Q7Ci0gICAgICAgICAgICBpZiAoIXZhbHVlLT5hc09iamVj
dChvYmplY3QpKQorICAgICAgICBhdXRvIGFycmF5ID0gcm9vdC0+YXNBcnJheSgpOworICAgICAg
ICBpZiAoIWFycmF5KSB7CisgICAgICAgICAgICBjYWxsYmFjayhmYWxzZSwgV1RGOjpudWxsb3B0
LCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCwgRmFpbGVkKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorCisgICAgICAgIGF1dG8gcGFyc2VSZXNwb25zZSA9IFsmXShSZWY8SlNP
Tjo6VmFsdWU+JiYgdmFsdWUpIC0+IGJvb2wgeworICAgICAgICAgICAgYXV0byBvYmplY3QgPSB2
YWx1ZS0+YXNPYmplY3QoKTsKKyAgICAgICAgICAgIGlmICghb2JqZWN0KQogICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICAgICAgU3RyaW5nIGtleUlEU3RyaW5nOwotICAg
ICAgICAgICAgaWYgKCFvYmplY3QtPmdldFN0cmluZygia2V5SUQiLCBrZXlJRFN0cmluZykpCisg
ICAgICAgICAgICBhdXRvIGtleUlEU3RyaW5nID0gb2JqZWN0LT5nZXRTdHJpbmcoImtleUlEIik7
CisgICAgICAgICAgICBpZiAoIWtleUlEU3RyaW5nKQogICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKIAogICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGtleUlEVmVjdG9yOwpAQCAtODQz
LDE0ICs4NDUsMTQgQEAgdm9pZCBDRE1JbnN0YW5jZVNlc3Npb25GYWlyUGxheVN0cmVhbWluZ0FW
Rk9iakM6OnVwZGF0ZUxpY2Vuc2UoY29uc3QgU3RyaW5nJiwgTGkKICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKICAgICAgICAgICAgIGlmIChoYXNFcnJvcikgewotICAgICAgICAgICAg
ICAgIE5TSW50ZWdlciBlcnJvckNvZGU7Ci0gICAgICAgICAgICAgICAgaWYgKCFlcnJvckZpbmRS
ZXN1bHRzLT52YWx1ZS0+YXNJbnRlZ2VyKGVycm9yQ29kZSkpCisgICAgICAgICAgICAgICAgYXV0
byBlcnJvckNvZGUgPSBlcnJvckZpbmRSZXN1bHRzLT52YWx1ZS0+YXNJbnRlZ2VyKCk7CisgICAg
ICAgICAgICAgICAgaWYgKCFlcnJvckNvZGUpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgICAgICAgICBhdXRvIGVycm9yID0gYWRvcHROUyhbW05TRXJyb3IgYWxs
b2NdIGluaXRXaXRoRG9tYWluOkAib3JnLndlYmtpdC5lbWUiIGNvZGU6ZXJyb3JDb2RlIHVzZXJJ
bmZvOm5pbF0pOworICAgICAgICAgICAgICAgIGF1dG8gZXJyb3IgPSBhZG9wdE5TKFtbTlNFcnJv
ciBhbGxvY10gaW5pdFdpdGhEb21haW46QCJvcmcud2Via2l0LmVtZSIgY29kZToqZXJyb3JDb2Rl
IHVzZXJJbmZvOm5pbF0pOwogICAgICAgICAgICAgICAgIFtyZXF1ZXN0IHByb2Nlc3NDb250ZW50
S2V5UmVzcG9uc2VFcnJvcjplcnJvci5nZXQoKV07CiAgICAgICAgICAgICB9IGVsc2UgaWYgKGhh
c1BheWxvYWQpIHsKLSAgICAgICAgICAgICAgICBTdHJpbmcgcGF5bG9hZFN0cmluZzsKLSAgICAg
ICAgICAgICAgICBpZiAoIXBheWxvYWRGaW5kUmVzdWx0cy0+dmFsdWUtPmFzU3RyaW5nKHBheWxv
YWRTdHJpbmcpKQorICAgICAgICAgICAgICAgIGF1dG8gcGF5bG9hZFN0cmluZyA9IHBheWxvYWRG
aW5kUmVzdWx0cy0+dmFsdWUtPmFzU3RyaW5nKCk7CisgICAgICAgICAgICAgICAgaWYgKCFwYXls
b2FkU3RyaW5nKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAg
ICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHBheWxvYWRWZWN0b3I7CiAgICAgICAgICAgICAgICAgaWYg
KCFiYXNlNjREZWNvZGUocGF5bG9hZFN0cmluZywgcGF5bG9hZFZlY3RvcikpCkBAIC04NjEsNyAr
ODYzLDcgQEAgdm9pZCBDRE1JbnN0YW5jZVNlc3Npb25GYWlyUGxheVN0cmVhbWluZ0FWRk9iakM6
OnVwZGF0ZUxpY2Vuc2UoY29uc3QgU3RyaW5nJiwgTGkKICAgICAgICAgICAgIHJldHVybiB0cnVl
OwogICAgICAgICB9OwogICAgICAgICBmb3IgKGF1dG8gdmFsdWUgOiAqYXJyYXkpIHsKLSAgICAg
ICAgICAgIGlmICghcGFyc2VSZXNwb25zZSh2YWx1ZSkpIHsKKyAgICAgICAgICAgIGlmICghcGFy
c2VSZXNwb25zZShXVEZNb3ZlKHZhbHVlKSkpIHsKICAgICAgICAgICAgICAgICBERUJVR19MT0df
SUZfUE9TU0lCTEUoTE9HSURFTlRJRklFUiwgIidjZW5jJyBpbml0RGF0YSwgRmFpbGVkLCBjb3Vs
ZCBub3QgcGFyc2UgcmVzcG9uc2UiKTsKICAgICAgICAgICAgICAgICBjYWxsYmFjayhmYWxzZSwg
V1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCwgRmFpbGVkKTsKICAgICAg
ICAgICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViRHJpdmVyL0NvbW1hbmRS
ZXN1bHQuY3BwIGIvU291cmNlL1dlYkRyaXZlci9Db21tYW5kUmVzdWx0LmNwcAppbmRleCBhNzIw
NzA5OTA4OTNkYjE1NmQ3ZmQ2ZmUzMDdhNTNmMjBjYjIzNTBhLi4wODMxYWY3MTIxYTFmOTBiMDdj
NmM4Y2FjNDgxNzZkNTkwNWEyNjQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViRHJpdmVyL0NvbW1h
bmRSZXN1bHQuY3BwCisrKyBiL1NvdXJjZS9XZWJEcml2ZXIvQ29tbWFuZFJlc3VsdC5jcHAKQEAg
LTQ5LDE4ICs0OSwxOSBAQCBDb21tYW5kUmVzdWx0OjpDb21tYW5kUmVzdWx0KFJlZlB0cjxKU09O
OjpWYWx1ZT4mJiByZXN1bHQsIE9wdGlvbmFsPEVycm9yQ29kZT4gZQogICAgIGlmICghcmVzdWx0
KQogICAgICAgICByZXR1cm47CiAKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBlcnJvck9iamVj
dDsKLSAgICBpZiAoIXJlc3VsdC0+YXNPYmplY3QoZXJyb3JPYmplY3QpKQorICAgIGF1dG8gZXJy
b3JPYmplY3QgPSByZXN1bHQtPmFzT2JqZWN0KCk7CisgICAgaWYgKCFlcnJvck9iamVjdCkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgaW50IGVycm9yOwotICAgIGlmICghZXJyb3JPYmplY3QtPmdl
dEludGVnZXIoImNvZGUiLCBlcnJvcikpCi0gICAgICAgIHJldHVybjsKLSAgICBTdHJpbmcgZXJy
b3JNZXNzYWdlOwotICAgIGlmICghZXJyb3JPYmplY3QtPmdldFN0cmluZygibWVzc2FnZSIsIGVy
cm9yTWVzc2FnZSkpCisgICAgYXV0byBlcnJvciA9IGVycm9yT2JqZWN0LT5nZXRJbnRlZ2VyKCJj
b2RlIik7CisgICAgaWYgKCFlcnJvcikKICAgICAgICAgcmV0dXJuOwogCi0gICAgc3dpdGNoIChl
cnJvcikgeworICAgIGF1dG8gZXJyb3JNZXNzYWdlID0gZXJyb3JPYmplY3QtPmdldFN0cmluZygi
bWVzc2FnZSIpOworICAgIGlmICghZXJyb3JNZXNzYWdlKQorICAgICAgICByZXR1cm47CisKKyAg
ICBzd2l0Y2ggKCplcnJvcikgewogICAgIGNhc2UgUHJvdG9jb2xFcnJvckNvZGU6OlBhcnNlRXJy
b3I6CiAgICAgY2FzZSBQcm90b2NvbEVycm9yQ29kZTo6SW52YWxpZFJlcXVlc3Q6CiAgICAgY2Fz
ZSBQcm90b2NvbEVycm9yQ29kZTo6TWV0aG9kTm90Rm91bmQ6CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViRHJpdmVyL1Nlc3Npb24uY3BwIGIvU291cmNlL1dlYkRyaXZlci9TZXNzaW9uLmNwcAppbmRl
eCBhNTVmYTQ5MzgwYzQ5NTEzMGZlMzFhOTZjODRlMDg5Yjc2ZDFjYWM4Li5jNzUxZjZmYzQxODQ4
ZjdjN2Q4OTk3NTFiZGNmZDQ0YTc2M2M3N2U4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViRHJpdmVy
L1Nlc3Npb24uY3BwCisrKyBiL1NvdXJjZS9XZWJEcml2ZXIvU2Vzc2lvbi5jcHAKQEAgLTgzLDEx
ICs4MywxMCBAQCBib29sIFNlc3Npb246OmlzQ29ubmVjdGVkKCkgY29uc3QKIAogc3RhdGljIE9w
dGlvbmFsPFN0cmluZz4gZmlyc3RXaW5kb3dIYW5kbGVJblJlc3VsdChKU09OOjpWYWx1ZSYgcmVz
dWx0KQogewotICAgIFJlZlB0cjxKU09OOjpBcnJheT4gaGFuZGxlczsKLSAgICBpZiAocmVzdWx0
LmFzQXJyYXkoaGFuZGxlcykgJiYgaGFuZGxlcy0+bGVuZ3RoKCkpIHsKLSAgICAgICAgYXV0byBo
YW5kbGVWYWx1ZSA9IGhhbmRsZXMtPmdldCgwKTsKLSAgICAgICAgU3RyaW5nIGhhbmRsZTsKLSAg
ICAgICAgaWYgKGhhbmRsZVZhbHVlLT5hc1N0cmluZyhoYW5kbGUpKQorICAgIGF1dG8gaGFuZGxl
cyA9IHJlc3VsdC5hc0FycmF5KCk7CisgICAgaWYgKGhhbmRsZXMgJiYgaGFuZGxlcy0+bGVuZ3Ro
KCkpIHsKKyAgICAgICAgYXV0byBoYW5kbGUgPSBoYW5kbGVzLT5nZXQoMCktPmFzU3RyaW5nKCk7
CisgICAgICAgIGlmICghIWhhbmRsZSkKICAgICAgICAgICAgIHJldHVybiBoYW5kbGU7CiAgICAg
fQogICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CkBAIC0xMjYsNyArMTI1LDcgQEAgdm9pZCBTZXNz
aW9uOjpjbG9zZShGdW5jdGlvbjx2b2lkIChDb21tYW5kUmVzdWx0JiYpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQogCiB2b2lkIFNlc3Npb246OmdldFRpbWVvdXRzKEZ1bmN0aW9uPHZvaWQgKENvbW1h
bmRSZXN1bHQmJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgUmVmUHRyPEpTT046Ok9i
amVjdD4gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgYXV0byBwYXJh
bWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICBpZiAobV9zY3JpcHRUaW1lb3V0
ID09IHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6aW5maW5pdHkoKSkKICAgICAgICAgcGFy
YW1ldGVycy0+c2V0VmFsdWUoInNjcmlwdCJfcywgSlNPTjo6VmFsdWU6Om51bGwoKSk7CiAgICAg
ZWxzZQpAQCAtMTg3LDExICsxODYsMTMgQEAgdm9pZCBTZXNzaW9uOjpjcmVhdGVUb3BMZXZlbEJy
b3dzaW5nQ29udGV4dChGdW5jdGlvbjx2b2lkIChDb21tYW5kUmVzdWx0JiYpPiYmIGMKICAgICAg
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoV1RGTW92ZShyZXNw
b25zZS5yZXNwb25zZU9iamVjdCkpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQot
ICAgICAgICBTdHJpbmcgaGFuZGxlOwotICAgICAgICBpZiAoIXJlc3BvbnNlLnJlc3BvbnNlT2Jq
ZWN0LT5nZXRTdHJpbmcoImhhbmRsZSJfcywgaGFuZGxlKSkgeworCisgICAgICAgIGF1dG8gaGFu
ZGxlID0gcmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdldFN0cmluZygiaGFuZGxlIl9zKTsKKyAg
ICAgICAgaWYgKCFoYW5kbGUpIHsKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1h
bmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQorCiAgICAgICAgIHN3aXRjaFRvVG9wTGV2
ZWxCcm93c2luZ0NvbnRleHQoaGFuZGxlKTsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29t
bWFuZFJlc3VsdDo6c3VjY2VzcygpKTsKICAgICB9KTsKQEAgLTE5OSwxNSArMjAwLDE2IEBAIHZv
aWQgU2Vzc2lvbjo6Y3JlYXRlVG9wTGV2ZWxCcm93c2luZ0NvbnRleHQoRnVuY3Rpb248dm9pZCAo
Q29tbWFuZFJlc3VsdCYmKT4mJiBjCiAKIHZvaWQgU2Vzc2lvbjo6aGFuZGxlVXNlclByb21wdHMo
RnVuY3Rpb248dm9pZCAoQ29tbWFuZFJlc3VsdCYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsK
LSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVh
dGUoKTsKKyAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAg
IHBhcmFtZXRlcnMtPnNldFN0cmluZygiYnJvd3NpbmdDb250ZXh0SGFuZGxlIl9zLCBtX3RvcGxl
dmVsQnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwogICAgIG1faG9zdC0+c2VuZENvbW1hbmRUb0Jh
Y2tlbmQoImlzU2hvd2luZ0phdmFTY3JpcHREaWFsb2ciX3MsIFdURk1vdmUocGFyYW1ldGVycyks
IFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVy
ID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKFNlc3Npb25Ib3N0OjpDb21tYW5kUmVzcG9u
c2UmJiByZXNwb25zZSkgbXV0YWJsZSB7CiAgICAgICAgIGlmIChyZXNwb25zZS5pc0Vycm9yIHx8
ICFyZXNwb25zZS5yZXNwb25zZU9iamVjdCkgewogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChXVEZNb3ZlKHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0KSkp
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIGJvb2wgaXNTaG93aW5n
SmF2YVNjcmlwdERpYWxvZzsKLSAgICAgICAgaWYgKCFyZXNwb25zZS5yZXNwb25zZU9iamVjdC0+
Z2V0Qm9vbGVhbigicmVzdWx0IiwgaXNTaG93aW5nSmF2YVNjcmlwdERpYWxvZykpIHsKKworICAg
ICAgICBhdXRvIGlzU2hvd2luZ0phdmFTY3JpcHREaWFsb2cgPSByZXNwb25zZS5yZXNwb25zZU9i
amVjdC0+Z2V0Qm9vbGVhbigicmVzdWx0Iik7CisgICAgICAgIGlmICghaXNTaG93aW5nSmF2YVNj
cmlwdERpYWxvZykgewogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3Vs
dDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikpOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC0yNzMsMTMgKzI3NSwxMyBAQCB2b2lkIFNlc3Np
b246OnJlcG9ydFVuZXhwZWN0ZWRBbGVydE9wZW4oRnVuY3Rpb248dm9pZCAoQ29tbWFuZFJlc3Vs
dCYmKT4mJiBjb21wbAogICAgIGdldEFsZXJ0VGV4dChbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oQ29tbWFuZFJlc3VsdCYmIHJlc3VsdCkgewogICAgICAg
ICBPcHRpb25hbDxTdHJpbmc+IGFsZXJ0VGV4dDsKICAgICAgICAgaWYgKCFyZXN1bHQuaXNFcnJv
cigpKSB7Ci0gICAgICAgICAgICBTdHJpbmcgdmFsdWVTdHJpbmc7Ci0gICAgICAgICAgICBpZiAo
cmVzdWx0LnJlc3VsdCgpLT5hc1N0cmluZyh2YWx1ZVN0cmluZykpCisgICAgICAgICAgICBhdXRv
IHZhbHVlU3RyaW5nID0gcmVzdWx0LnJlc3VsdCgpLT5hc1N0cmluZygpOworICAgICAgICAgICAg
aWYgKCEhdmFsdWVTdHJpbmcpCiAgICAgICAgICAgICAgICAgYWxlcnRUZXh0ID0gdmFsdWVTdHJp
bmc7CiAgICAgICAgIH0KICAgICAgICAgYXV0byBlcnJvclJlc3VsdCA9IENvbW1hbmRSZXN1bHQ6
OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmV4cGVjdGVkQWxlcnRPcGVuKTsKICAg
ICAgICAgaWYgKGFsZXJ0VGV4dCkgewotICAgICAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4g
YWRkaXRvbmFsRGF0YSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgICAgICBhdXRv
IGFkZGl0b25hbERhdGEgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICAgICAgYWRk
aXRvbmFsRGF0YS0+c2V0U3RyaW5nKCJ0ZXh0Il9zLCBhbGVydFRleHQudmFsdWUoKSk7CiAgICAg
ICAgICAgICBlcnJvclJlc3VsdC5zZXRBZGRpdGlvbmFsRXJyb3JEYXRhKFdURk1vdmUoYWRkaXRv
bmFsRGF0YSkpOwogICAgICAgICB9CkBAIC0zMDAsNyArMzAyLDcgQEAgdm9pZCBTZXNzaW9uOjpn
byhjb25zdCBTdHJpbmcmIHVybCwgRnVuY3Rpb248dm9pZCAoQ29tbWFuZFJlc3VsdCYmKT4mJiBj
b21wbGV0aW8KICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIFJlZlB0
cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAg
ICAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICBw
YXJhbWV0ZXJzLT5zZXRTdHJpbmcoImhhbmRsZSJfcywgbV90b3BsZXZlbEJyb3dzaW5nQ29udGV4
dC52YWx1ZSgpKTsKICAgICAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJ1cmwiX3MsIHVybCk7
CiAgICAgICAgIHBhcmFtZXRlcnMtPnNldERvdWJsZSgicGFnZUxvYWRUaW1lb3V0Il9zLCBtX3Bh
Z2VMb2FkVGltZW91dCk7CkBAIC0zMzAsMjMgKzMzMiwyNiBAQCB2b2lkIFNlc3Npb246OmdldEN1
cnJlbnRVUkwoRnVuY3Rpb248dm9pZCAoQ29tbWFuZFJlc3VsdCYmKT4mJiBjb21wbGV0aW9uSGFu
ZGxlcgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgUmVmUHRyPEpT
T046Ok9iamVjdD4gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAg
IGF1dG8gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgIHBhcmFt
ZXRlcnMtPnNldFN0cmluZygiaGFuZGxlIl9zLCBtX3RvcGxldmVsQnJvd3NpbmdDb250ZXh0LnZh
bHVlKCkpOwogICAgICAgICBtX2hvc3QtPnNlbmRDb21tYW5kVG9CYWNrZW5kKCJnZXRCcm93c2lu
Z0NvbnRleHQiX3MsIFdURk1vdmUocGFyYW1ldGVycyksIFtwcm90ZWN0ZWRUaGlzLCBjb21wbGV0
aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXShTZXNzaW9uSG9zdDo6Q29t
bWFuZFJlc3BvbnNlJiYgcmVzcG9uc2UpIHsKICAgICAgICAgICAgIGlmIChyZXNwb25zZS5pc0Vy
cm9yIHx8ICFyZXNwb25zZS5yZXNwb25zZU9iamVjdCkgewogICAgICAgICAgICAgICAgIGNvbXBs
ZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoV1RGTW92ZShyZXNwb25zZS5yZXNwb25z
ZU9iamVjdCkpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBicm93c2luZ0NvbnRleHQ7Ci0gICAgICAgICAg
ICBpZiAoIXJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRPYmplY3QoImNvbnRleHQiLCBicm93
c2luZ0NvbnRleHQpKSB7CisKKyAgICAgICAgICAgIGF1dG8gYnJvd3NpbmdDb250ZXh0ID0gcmVz
cG9uc2UucmVzcG9uc2VPYmplY3QtPmdldE9iamVjdCgiY29udGV4dCIpOworICAgICAgICAgICAg
aWYgKCFicm93c2luZ0NvbnRleHQpIHsKICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVy
cm9yKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQotICAgICAgICAg
ICAgU3RyaW5nIHVybDsKLSAgICAgICAgICAgIGlmICghYnJvd3NpbmdDb250ZXh0LT5nZXRTdHJp
bmcoInVybCIsIHVybCkpIHsKKworICAgICAgICAgICAgYXV0byB1cmwgPSBicm93c2luZ0NvbnRl
eHQtPmdldFN0cmluZygidXJsIik7CisgICAgICAgICAgICBpZiAoIXVybCkgewogICAgICAgICAg
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3Vs
dDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgICAgICB9CisKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1
bHQ6OnN1Y2Nlc3MoSlNPTjo6VmFsdWU6OmNyZWF0ZSh1cmwpKSk7CiAgICAgICAgIH0pOwogICAg
IH0pOwpAQCAtMzY0LDcgKzM2OSw3IEBAIHZvaWQgU2Vzc2lvbjo6YmFjayhGdW5jdGlvbjx2b2lk
IChDb21tYW5kUmVzdWx0JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogICAgICAgICAgICAgY29t
cGxldGlvbkhhbmRsZXIoV1RGTW92ZShyZXN1bHQpKTsKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQotICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzID0gSlNPTjo6
T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgYXV0byBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0
OjpjcmVhdGUoKTsKICAgICAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJoYW5kbGUiX3MsIG1f
dG9wbGV2ZWxCcm93c2luZ0NvbnRleHQudmFsdWUoKSk7CiAgICAgICAgIHBhcmFtZXRlcnMtPnNl
dERvdWJsZSgicGFnZUxvYWRUaW1lb3V0Il9zLCBtX3BhZ2VMb2FkVGltZW91dCk7CiAgICAgICAg
IGlmIChhdXRvIHBhZ2VMb2FkU3RyYXRlZ3kgPSBwYWdlTG9hZFN0cmF0ZWd5U3RyaW5nKCkpCkBA
IC0zOTIsNyArMzk3LDcgQEAgdm9pZCBTZXNzaW9uOjpmb3J3YXJkKEZ1bmN0aW9uPHZvaWQgKENv
bW1hbmRSZXN1bHQmJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiAgICAgICAgICAgICBjb21wbGV0
aW9uSGFuZGxlcihXVEZNb3ZlKHJlc3VsdCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9Ci0gICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnMgPSBKU09OOjpPYmpl
Y3Q6OmNyZWF0ZSgpOworICAgICAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNy
ZWF0ZSgpOwogICAgICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoImhhbmRsZSJfcywgbV90b3Bs
ZXZlbEJyb3dzaW5nQ29udGV4dC52YWx1ZSgpKTsKICAgICAgICAgcGFyYW1ldGVycy0+c2V0RG91
YmxlKCJwYWdlTG9hZFRpbWVvdXQiX3MsIG1fcGFnZUxvYWRUaW1lb3V0KTsKICAgICAgICAgaWYg
KGF1dG8gcGFnZUxvYWRTdHJhdGVneSA9IHBhZ2VMb2FkU3RyYXRlZ3lTdHJpbmcoKSkKQEAgLTQy
MCw3ICs0MjUsNyBAQCB2b2lkIFNlc3Npb246OnJlZnJlc2goRnVuY3Rpb248dm9pZCAoQ29tbWFu
ZFJlc3VsdCYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKICAgICAgICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKFdURk1vdmUocmVzdWx0KSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
LSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6
Y3JlYXRlKCk7CisgICAgICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRl
KCk7CiAgICAgICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiaGFuZGxlIl9zLCBtX3RvcGxldmVs
QnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwogICAgICAgICBwYXJhbWV0ZXJzLT5zZXREb3VibGUo
InBhZ2VMb2FkVGltZW91dCJfcywgbV9wYWdlTG9hZFRpbWVvdXQpOwogICAgICAgICBpZiAoYXV0
byBwYWdlTG9hZFN0cmF0ZWd5ID0gcGFnZUxvYWRTdHJhdGVneVN0cmluZygpKQpAQCAtNDQ4LDcg
KzQ1Myw3IEBAIHZvaWQgU2Vzc2lvbjo6Z2V0VGl0bGUoRnVuY3Rpb248dm9pZCAoQ29tbWFuZFJl
c3VsdCYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5k
bGVyKFdURk1vdmUocmVzdWx0KSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAg
ICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3Jl
YXRlKCk7CisgICAgICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7
CiAgICAgICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiYnJvd3NpbmdDb250ZXh0SGFuZGxlIl9z
LCBtX3RvcGxldmVsQnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwogICAgICAgICBwYXJhbWV0ZXJz
LT5zZXRTdHJpbmcoImZ1bmN0aW9uIl9zLCAiZnVuY3Rpb24oKSB7IHJldHVybiBkb2N1bWVudC50
aXRsZTsgfSJfcyk7CiAgICAgICAgIHBhcmFtZXRlcnMtPnNldEFycmF5KCJhcmd1bWVudHMiX3Ms
IEpTT046OkFycmF5OjpjcmVhdGUoKSk7CkBAIC00NTcsMTYgKzQ2MiwxOSBAQCB2b2lkIFNlc3Np
b246OmdldFRpdGxlKEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSZXN1bHQmJik+JiYgY29tcGxldGlv
bkhhbmRsZXIpCiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3Vs
dDo6ZmFpbChXVEZNb3ZlKHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0KSkpOwogICAgICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFN0cmluZyB2YWx1ZVN0cmlu
ZzsKLSAgICAgICAgICAgIGlmICghcmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdldFN0cmluZygi
cmVzdWx0Il9zLCB2YWx1ZVN0cmluZykpIHsKKworICAgICAgICAgICAgYXV0byB2YWx1ZVN0cmlu
ZyA9IHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRTdHJpbmcoInJlc3VsdCJfcyk7CisgICAg
ICAgICAgICBpZiAoIXZhbHVlU3RyaW5nKSB7CiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhh
bmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OlVua25v
d25FcnJvcikpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gcmVzdWx0VmFsdWU7Ci0gICAgICAgICAgICBpZiAo
IUpTT046OlZhbHVlOjpwYXJzZUpTT04odmFsdWVTdHJpbmcsIHJlc3VsdFZhbHVlKSkgeworCisg
ICAgICAgICAgICBhdXRvIHJlc3VsdFZhbHVlID0gSlNPTjo6VmFsdWU6OnBhcnNlSlNPTih2YWx1
ZVN0cmluZyk7CisgICAgICAgICAgICBpZiAoIXJlc3VsdFZhbHVlKSB7CiAgICAgICAgICAgICAg
ICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpF
cnJvckNvZGU6OlVua25vd25FcnJvcikpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgICAgIH0KKwogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6
c3VjY2VzcyhXVEZNb3ZlKHJlc3VsdFZhbHVlKSkpOwogICAgICAgICB9KTsKICAgICB9KTsKQEAg
LTQ3OSwzMCArNDg3LDMzIEBAIHZvaWQgU2Vzc2lvbjo6Z2V0V2luZG93SGFuZGxlKEZ1bmN0aW9u
PHZvaWQgKENvbW1hbmRSZXN1bHQmJik+JiYgY29tcGxldGlvbkhhbmRsCiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzID0gSlNPTjo6
T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNy
ZWF0ZSgpOwogICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiaGFuZGxlIl9zLCBtX3RvcGxldmVs
QnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwogICAgIG1faG9zdC0+c2VuZENvbW1hbmRUb0JhY2tl
bmQoImdldEJyb3dzaW5nQ29udGV4dCJfcywgV1RGTW92ZShwYXJhbWV0ZXJzKSwgW3Byb3RlY3Rl
ZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKV0oU2Vzc2lvbkhvc3Q6OkNvbW1hbmRSZXNwb25zZSYmIHJlc3BvbnNlKSB7
CiAgICAgICAgIGlmIChyZXNwb25zZS5pc0Vycm9yIHx8ICFyZXNwb25zZS5yZXNwb25zZU9iamVj
dCkgewogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChX
VEZNb3ZlKHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0KSkpOwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9Ci0gICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IGJyb3dzaW5nQ29udGV4dDsK
LSAgICAgICAgaWYgKCFyZXNwb25zZS5yZXNwb25zZU9iamVjdC0+Z2V0T2JqZWN0KCJjb250ZXh0
Il9zLCBicm93c2luZ0NvbnRleHQpKSB7CisKKyAgICAgICAgYXV0byBicm93c2luZ0NvbnRleHQg
PSByZXNwb25zZS5yZXNwb25zZU9iamVjdC0+Z2V0T2JqZWN0KCJjb250ZXh0Il9zKTsKKyAgICAg
ICAgaWYgKCFicm93c2luZ0NvbnRleHQpIHsKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVy
KENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtub3duRXJy
b3IpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBTdHJpbmcgaGFu
ZGxlOwotICAgICAgICBpZiAoIWJyb3dzaW5nQ29udGV4dC0+Z2V0U3RyaW5nKCJoYW5kbGUiX3Ms
IGhhbmRsZSkpIHsKKworICAgICAgICBhdXRvIGhhbmRsZSA9IGJyb3dzaW5nQ29udGV4dC0+Z2V0
U3RyaW5nKCJoYW5kbGUiX3MpOworICAgICAgICBpZiAoIWhhbmRsZSkgewogICAgICAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJv
ckNvZGU6OlVua25vd25FcnJvcikpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CisK
ICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6c3VjY2VzcyhKU09OOjpW
YWx1ZTo6Y3JlYXRlKGhhbmRsZSkpKTsKICAgICB9KTsKIH0KIAogdm9pZCBTZXNzaW9uOjpjbG9z
ZVRvcExldmVsQnJvd3NpbmdDb250ZXh0KGNvbnN0IFN0cmluZyYgdG9wbGV2ZWxCcm93c2luZ0Nv
bnRleHQsIEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSZXN1bHQmJik+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCiB7Ci0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVycyA9IEpTT046Ok9iamVj
dDo6Y3JlYXRlKCk7CisgICAgYXV0byBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUo
KTsKICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoImhhbmRsZSJfcywgdG9wbGV2ZWxCcm93c2lu
Z0NvbnRleHQpOwogICAgIG1faG9zdC0+c2VuZENvbW1hbmRUb0JhY2tlbmQoImNsb3NlQnJvd3Np
bmdDb250ZXh0Il9zLCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9
IG1ha2VSZWYoKnRoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpXShTZXNzaW9uSG9zdDo6Q29tbWFuZFJlc3BvbnNlJiYgcmVzcG9uc2UpIG11dGFibGUg
ewogICAgICAgICBpZiAoIW1faG9zdC0+aXNDb25uZWN0ZWQoKSkgewpAQCAtNTQ1LDcgKzU1Niw3
IEBAIHZvaWQgU2Vzc2lvbjo6Y2xvc2VXaW5kb3coRnVuY3Rpb248dm9pZCAoQ29tbWFuZFJlc3Vs
dCYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIAogdm9pZCBTZXNzaW9uOjpzd2l0Y2hUb1dpbmRv
dyhjb25zdCBTdHJpbmcmIHdpbmRvd0hhbmRsZSwgRnVuY3Rpb248dm9pZCAoQ29tbWFuZFJlc3Vs
dCYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBw
YXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBhdXRvIHBhcmFtZXRlcnMg
PSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiYnJv
d3NpbmdDb250ZXh0SGFuZGxlIl9zLCB3aW5kb3dIYW5kbGUpOwogICAgIG1faG9zdC0+c2VuZENv
bW1hbmRUb0JhY2tlbmQoInN3aXRjaFRvQnJvd3NpbmdDb250ZXh0Il9zLCBXVEZNb3ZlKHBhcmFt
ZXRlcnMpLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCB3aW5kb3dIYW5k
bGUsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKFNlc3Np
b25Ib3N0OjpDb21tYW5kUmVzcG9uc2UmJiByZXNwb25zZSkgewogICAgICAgICBpZiAocmVzcG9u
c2UuaXNFcnJvcikgewpAQCAtNTY0LDIyICs1NzUsMjMgQEAgdm9pZCBTZXNzaW9uOjpnZXRXaW5k
b3dIYW5kbGVzKEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSZXN1bHQmJik+JiYgY29tcGxldGlvbkhh
bmQKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoV1RG
TW92ZShyZXNwb25zZS5yZXNwb25zZU9iamVjdCkpKTsKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQotICAgICAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IGJyb3dzaW5nQ29udGV4dEFycmF5
OwotICAgICAgICBpZiAoIXJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRBcnJheSgiY29udGV4
dHMiX3MsIGJyb3dzaW5nQ29udGV4dEFycmF5KSkgeworCisgICAgICAgIGF1dG8gYnJvd3NpbmdD
b250ZXh0QXJyYXkgPSByZXNwb25zZS5yZXNwb25zZU9iamVjdC0+Z2V0QXJyYXkoImNvbnRleHRz
Il9zKTsKKyAgICAgICAgaWYgKCFicm93c2luZ0NvbnRleHRBcnJheSkgewogICAgICAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJv
ckNvZGU6OlVua25vd25FcnJvcikpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0g
ICAgICAgIFJlZlB0cjxKU09OOjpBcnJheT4gd2luZG93SGFuZGxlcyA9IEpTT046OkFycmF5Ojpj
cmVhdGUoKTsKKworICAgICAgICBhdXRvIHdpbmRvd0hhbmRsZXMgPSBKU09OOjpBcnJheTo6Y3Jl
YXRlKCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBicm93c2luZ0NvbnRleHRB
cnJheS0+bGVuZ3RoKCk7ICsraSkgewotICAgICAgICAgICAgUmVmUHRyPEpTT046OlZhbHVlPiBi
cm93c2luZ0NvbnRleHRWYWx1ZSA9IGJyb3dzaW5nQ29udGV4dEFycmF5LT5nZXQoaSk7Ci0gICAg
ICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBicm93c2luZ0NvbnRleHQ7Ci0gICAgICAgICAg
ICBpZiAoIWJyb3dzaW5nQ29udGV4dFZhbHVlLT5hc09iamVjdChicm93c2luZ0NvbnRleHQpKSB7
CisgICAgICAgICAgICBhdXRvIGJyb3dzaW5nQ29udGV4dCA9IGJyb3dzaW5nQ29udGV4dEFycmF5
LT5nZXQoaSktPmFzT2JqZWN0KCk7CisgICAgICAgICAgICBpZiAoIWJyb3dzaW5nQ29udGV4dCkg
ewogICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwo
Q29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKICAgICAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIFN0cmluZyBoYW5kbGU7Ci0g
ICAgICAgICAgICBpZiAoIWJyb3dzaW5nQ29udGV4dC0+Z2V0U3RyaW5nKCJoYW5kbGUiX3MsIGhh
bmRsZSkpIHsKKyAgICAgICAgICAgIGF1dG8gaGFuZGxlID0gYnJvd3NpbmdDb250ZXh0LT5nZXRT
dHJpbmcoImhhbmRsZSJfcyk7CisgICAgICAgICAgICBpZiAoIWhhbmRsZSkgewogICAgICAgICAg
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3Vs
dDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgICAgICB9CkBAIC02MTMsMTcgKzYyNSwyMCBAQCB2b2lkIFNlc3Npb246Om5ld1dpbmRv
dyhPcHRpb25hbDxTdHJpbmc+IHR5cGVIaW50LCBGdW5jdGlvbjx2b2lkIChDb21tYW5kUmVzdWx0
JgogICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwo
V1RGTW92ZShyZXNwb25zZS5yZXNwb25zZU9iamVjdCkpKTsKICAgICAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBTdHJpbmcgaGFuZGxlOwotICAgICAgICAg
ICAgaWYgKCFyZXNwb25zZS5yZXNwb25zZU9iamVjdC0+Z2V0U3RyaW5nKCJoYW5kbGUiX3MsIGhh
bmRsZSkpIHsKKworICAgICAgICAgICAgYXV0byBoYW5kbGUgPSByZXNwb25zZS5yZXNwb25zZU9i
amVjdC0+Z2V0U3RyaW5nKCJoYW5kbGUiX3MpOworICAgICAgICAgICAgaWYgKCFoYW5kbGUpIHsK
ICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENv
bW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVycm9yKSk7CiAgICAgICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgU3RyaW5nIHByZXNlbnRhdGlvbjsK
LSAgICAgICAgICAgIGlmICghcmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdldFN0cmluZygicHJl
c2VudGF0aW9uIl9zLCBwcmVzZW50YXRpb24pKSB7CisKKyAgICAgICAgICAgIGF1dG8gcHJlc2Vu
dGF0aW9uID0gcmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdldFN0cmluZygicHJlc2VudGF0aW9u
Il9zKTsKKyAgICAgICAgICAgIGlmICghcHJlc2VudGF0aW9uKSB7CiAgICAgICAgICAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJv
ckNvZGU6OlVua25vd25FcnJvcikpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9i
amVjdDo6Y3JlYXRlKCk7CisKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gSlNPTjo6T2JqZWN0
OjpjcmVhdGUoKTsKICAgICAgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJoYW5kbGUiX3MsIGhh
bmRsZSk7CiAgICAgICAgICAgICByZXN1bHQtPnNldFN0cmluZygidHlwZSJfcywgcHJlc2VudGF0
aW9uID09ICJXaW5kb3ciX3MgPyAid2luZG93Il9zIDogInRhYiJfcyk7CiAgICAgICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpzdWNjZXNzKFdURk1vdmUocmVzdWx0KSkp
OwpAQCAtNjQ5LDE1ICs2NjQsMTQgQEAgdm9pZCBTZXNzaW9uOjpzd2l0Y2hUb0ZyYW1lKFJlZlB0
cjxKU09OOjpWYWx1ZT4mJiBmcmFtZUlELCBGdW5jdGlvbjx2b2lkIChDb21tYW4KICAgICAgICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUocmVzdWx0KSk7CiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KLSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVycyA9
IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTT046
Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiYnJvd3Np
bmdDb250ZXh0SGFuZGxlIl9zLCBtX3RvcGxldmVsQnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwog
ICAgICAgICBpZiAobV9jdXJyZW50QnJvd3NpbmdDb250ZXh0KQogICAgICAgICAgICAgcGFyYW1l
dGVycy0+c2V0U3RyaW5nKCJmcmFtZUhhbmRsZSJfcywgbV9jdXJyZW50QnJvd3NpbmdDb250ZXh0
LnZhbHVlKCkpOwogCi0gICAgICAgIGludCBmcmFtZUluZGV4OwotICAgICAgICBpZiAoZnJhbWVJ
RC0+YXNJbnRlZ2VyKGZyYW1lSW5kZXgpKSB7CisgICAgICAgIGlmIChhdXRvIGZyYW1lSW5kZXgg
PSBmcmFtZUlELT5hc0ludGVnZXIoKSkgewogICAgICAgICAgICAgQVNTRVJUKGZyYW1lSW5kZXgg
Pj0gMCAmJiBmcmFtZUluZGV4IDwgc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZCBzaG9ydD46
Om1heCgpKTsKLSAgICAgICAgICAgIHBhcmFtZXRlcnMtPnNldEludGVnZXIoIm9yZGluYWwiX3Ms
IGZyYW1lSW5kZXgpOworICAgICAgICAgICAgcGFyYW1ldGVycy0+c2V0SW50ZWdlcigib3JkaW5h
bCJfcywgKmZyYW1lSW5kZXgpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgU3RyaW5n
IGZyYW1lRWxlbWVudElEID0gZXh0cmFjdEVsZW1lbnRJRCgqZnJhbWVJRCk7CiAgICAgICAgICAg
ICBBU1NFUlQoIWZyYW1lRWxlbWVudElELmlzRW1wdHkoKSk7CkBAIC02NjksMTEgKzY4MywxMyBA
QCB2b2lkIFNlc3Npb246OnN3aXRjaFRvRnJhbWUoUmVmUHRyPEpTT046OlZhbHVlPiYmIGZyYW1l
SUQsIEZ1bmN0aW9uPHZvaWQgKENvbW1hbgogICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5k
bGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoV1RGTW92ZShyZXNwb25zZS5yZXNwb25zZU9iamVjdCkp
KTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBT
dHJpbmcgZnJhbWVIYW5kbGU7Ci0gICAgICAgICAgICBpZiAoIXJlc3BvbnNlLnJlc3BvbnNlT2Jq
ZWN0LT5nZXRTdHJpbmcoInJlc3VsdCJfcywgZnJhbWVIYW5kbGUpKSB7CisKKyAgICAgICAgICAg
IGF1dG8gZnJhbWVIYW5kbGUgPSByZXNwb25zZS5yZXNwb25zZU9iamVjdC0+Z2V0U3RyaW5nKCJy
ZXN1bHQiX3MpOworICAgICAgICAgICAgaWYgKCFmcmFtZUhhbmRsZSkgewogICAgICAgICAgICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6
RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgICAgICB9CisKICAgICAgICAgICAgIHN3aXRjaFRvQnJvd3NpbmdDb250ZXh0KGZyYW1lSGFu
ZGxlKTsKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OnN1Y2Nl
c3MoKSk7CiAgICAgICAgIH0pOwpAQCAtNjk3LDcgKzcxMyw3IEBAIHZvaWQgU2Vzc2lvbjo6c3dp
dGNoVG9QYXJlbnRGcmFtZShGdW5jdGlvbjx2b2lkIChDb21tYW5kUmVzdWx0JiYpPiYmIGNvbXBs
ZXRpb25ICiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKHJlc3VsdCkpOwog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIFJlZlB0cjxKU09OOjpPYmpl
Y3Q+IHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBhdXRvIHBh
cmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICBwYXJhbWV0ZXJzLT5z
ZXRTdHJpbmcoImJyb3dzaW5nQ29udGV4dEhhbmRsZSJfcywgbV90b3BsZXZlbEJyb3dzaW5nQ29u
dGV4dC52YWx1ZSgpKTsKICAgICAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJmcmFtZUhhbmRs
ZSJfcywgbV9jdXJyZW50QnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwogICAgICAgICBtX2hvc3Qt
PnNlbmRDb21tYW5kVG9CYWNrZW5kKCJyZXNvbHZlUGFyZW50RnJhbWVIYW5kbGUiX3MsIFdURk1v
dmUocGFyYW1ldGVycyksIFt0aGlzLCBwcm90ZWN0ZWRUaGlzLCBjb21wbGV0aW9uSGFuZGxlciA9
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXShTZXNzaW9uSG9zdDo6Q29tbWFuZFJlc3BvbnNl
JiYgcmVzcG9uc2UpIHsKQEAgLTcwNSwxMSArNzIxLDEzIEBAIHZvaWQgU2Vzc2lvbjo6c3dpdGNo
VG9QYXJlbnRGcmFtZShGdW5jdGlvbjx2b2lkIChDb21tYW5kUmVzdWx0JiYpPiYmIGNvbXBsZXRp
b25ICiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFp
bChXVEZNb3ZlKHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0KSkpOwogICAgICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFN0cmluZyBmcmFtZUhhbmRsZTsKLSAg
ICAgICAgICAgIGlmICghcmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdldFN0cmluZygicmVzdWx0
Il9zLCBmcmFtZUhhbmRsZSkpIHsKKworICAgICAgICAgICAgYXV0byBmcmFtZUhhbmRsZSA9IHJl
c3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRTdHJpbmcoInJlc3VsdCJfcyk7CisgICAgICAgICAg
ICBpZiAoIWZyYW1lSGFuZGxlKSB7CiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIo
Q29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OlVua25vd25FcnJv
cikpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KKwogICAgICAgICAg
ICAgc3dpdGNoVG9Ccm93c2luZ0NvbnRleHQoZnJhbWVIYW5kbGUpOwogICAgICAgICAgICAgY29t
cGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6c3VjY2VzcygpKTsKICAgICAgICAgfSk7CkBA
IC03MTgsMzkgKzczNiw2MSBAQCB2b2lkIFNlc3Npb246OnN3aXRjaFRvUGFyZW50RnJhbWUoRnVu
Y3Rpb248dm9pZCAoQ29tbWFuZFJlc3VsdCYmKT4mJiBjb21wbGV0aW9uSAogCiB2b2lkIFNlc3Np
b246OmdldFRvcGxldmVsQnJvd3NpbmdDb250ZXh0UmVjdChGdW5jdGlvbjx2b2lkIChDb21tYW5k
UmVzdWx0JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIFJlZlB0cjxKU09OOjpPYmpl
Y3Q+IHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGF1dG8gcGFyYW1l
dGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5n
KCJoYW5kbGUiX3MsIG1fdG9wbGV2ZWxCcm93c2luZ0NvbnRleHQudmFsdWUoKSk7CiAgICAgbV9o
b3N0LT5zZW5kQ29tbWFuZFRvQmFja2VuZCgiZ2V0QnJvd3NpbmdDb250ZXh0Il9zLCBXVEZNb3Zl
KHBhcmFtZXRlcnMpLCBbcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjb21wbGV0aW9u
SGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXShTZXNzaW9uSG9zdDo6Q29tbWFu
ZFJlc3BvbnNlJiYgcmVzcG9uc2UpIHsKICAgICAgICAgaWYgKHJlc3BvbnNlLmlzRXJyb3IgfHwg
IXJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0KSB7CiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cihDb21tYW5kUmVzdWx0OjpmYWlsKFdURk1vdmUocmVzcG9uc2UucmVzcG9uc2VPYmplY3QpKSk7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgUmVmUHRyPEpTT046Ok9i
amVjdD4gYnJvd3NpbmdDb250ZXh0OwotICAgICAgICBpZiAoIXJlc3BvbnNlLnJlc3BvbnNlT2Jq
ZWN0LT5nZXRPYmplY3QoImNvbnRleHQiX3MsIGJyb3dzaW5nQ29udGV4dCkpIHsKKworICAgICAg
ICBhdXRvIGJyb3dzaW5nQ29udGV4dCA9IHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRPYmpl
Y3QoImNvbnRleHQiX3MpOworICAgICAgICBpZiAoIWJyb3dzaW5nQ29udGV4dCkgewogICAgICAg
ICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0
OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9Ci0gICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHdpbmRvd09yaWdpbjsKLSAgICAgICAg
ZG91YmxlIHggPSAwLCB5ID0gMDsKLSAgICAgICAgaWYgKCFicm93c2luZ0NvbnRleHQtPmdldE9i
amVjdCgid2luZG93T3JpZ2luIl9zLCB3aW5kb3dPcmlnaW4pCi0gICAgICAgICAgICB8fCAhd2lu
ZG93T3JpZ2luLT5nZXREb3VibGUoIngiX3MsIHgpCi0gICAgICAgICAgICB8fCAhd2luZG93T3Jp
Z2luLT5nZXREb3VibGUoInkiX3MsIHkpKSB7CisKKyAgICAgICAgYXV0byB3aW5kb3dPcmlnaW4g
PSBicm93c2luZ0NvbnRleHQtPmdldE9iamVjdCgid2luZG93T3JpZ2luIl9zKTsKKyAgICAgICAg
aWYgKCF3aW5kb3dPcmlnaW4pIHsKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1h
bmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiB3aW5kb3dTaXplOwotICAgICAgICBkb3VibGUgd2lkdGggPSAwLCBoZWlnaHQgPSAwOwot
ICAgICAgICBpZiAoIWJyb3dzaW5nQ29udGV4dC0+Z2V0T2JqZWN0KCJ3aW5kb3dTaXplIl9zLCB3
aW5kb3dTaXplKQotICAgICAgICAgICAgfHwgIXdpbmRvd1NpemUtPmdldERvdWJsZSgid2lkdGgi
X3MsIHdpZHRoKQotICAgICAgICAgICAgfHwgIXdpbmRvd1NpemUtPmdldERvdWJsZSgiaGVpZ2h0
Il9zLCBoZWlnaHQpKSB7CisKKyAgICAgICAgYXV0byB4ID0gd2luZG93T3JpZ2luLT5nZXREb3Vi
bGUoIngiX3MpOworICAgICAgICBpZiAoIXgpIHsKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5k
bGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtub3du
RXJyb3IpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQorCisgICAgICAgIGF1dG8g
eSA9IHdpbmRvd09yaWdpbi0+Z2V0RG91YmxlKCJ5Il9zKTsKKyAgICAgICAgaWYgKCF5KSB7Cisg
ICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRS
ZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVycm9yKSk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKworICAgICAgICBhdXRvIHdpbmRvd1NpemUgPSBicm93c2luZ0NvbnRleHQtPmdl
dE9iamVjdCgid2luZG93U2l6ZSJfcyk7CisgICAgICAgIGlmICghd2luZG93U2l6ZSkgeworICAg
ICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVz
dWx0OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisKKyAgICAgICAgYXV0byB3aWR0aCA9IHdpbmRvd1NpemUtPmdldERvdWJsZSgid2lk
dGgiX3MpOworICAgICAgICBpZiAoIXdpZHRoKSB7CisgICAgICAgICAgICBjb21wbGV0aW9uSGFu
ZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93
bkVycm9yKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBhdXRv
IGhlaWdodCA9IHdpbmRvd1NpemUtPmdldERvdWJsZSgiaGVpZ2h0Il9zKTsKKyAgICAgICAgaWYg
KCFoZWlnaHQpIHsKKyAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6
OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorCiAgICAgICAgIGF1dG8gd2luZG93UmVjdCA9IEpTT046
Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgICAgIHdpbmRvd1JlY3QtPnNldERvdWJsZSgieCJfcywg
eCk7Ci0gICAgICAgIHdpbmRvd1JlY3QtPnNldERvdWJsZSgieSJfcywgeSk7Ci0gICAgICAgIHdp
bmRvd1JlY3QtPnNldERvdWJsZSgid2lkdGgiX3MsIHdpZHRoKTsKLSAgICAgICAgd2luZG93UmVj
dC0+c2V0RG91YmxlKCJoZWlnaHQiX3MsIGhlaWdodCk7CisgICAgICAgIHdpbmRvd1JlY3QtPnNl
dERvdWJsZSgieCJfcywgKngpOworICAgICAgICB3aW5kb3dSZWN0LT5zZXREb3VibGUoInkiX3Ms
ICp5KTsKKyAgICAgICAgd2luZG93UmVjdC0+c2V0RG91YmxlKCJ3aWR0aCJfcywgKndpZHRoKTsK
KyAgICAgICAgd2luZG93UmVjdC0+c2V0RG91YmxlKCJoZWlnaHQiX3MsICpoZWlnaHQpOwogICAg
ICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpzdWNjZXNzKFdURk1vdmUod2lu
ZG93UmVjdCkpKTsKICAgICB9KTsKIH0KQEAgLTc4NCwxNiArODI0LDE2IEBAIHZvaWQgU2Vzc2lv
bjo6c2V0V2luZG93UmVjdChPcHRpb25hbDxkb3VibGU+IHgsIE9wdGlvbmFsPGRvdWJsZT4geSwg
T3B0aW9uYWw8ZG91CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBS
ZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsK
KyAgICAgICAgYXV0byBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICAg
ICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJoYW5kbGUiX3MsIG1fdG9wbGV2ZWxCcm93c2luZ0Nv
bnRleHQudmFsdWUoKSk7CiAgICAgICAgIGlmICh4ICYmIHkpIHsKLSAgICAgICAgICAgIFJlZlB0
cjxKU09OOjpPYmplY3Q+IHdpbmRvd09yaWdpbiA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Cisg
ICAgICAgICAgICBhdXRvIHdpbmRvd09yaWdpbiA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAg
ICAgICAgICAgICB3aW5kb3dPcmlnaW4tPnNldERvdWJsZSgieCIsIHgudmFsdWUoKSk7CiAgICAg
ICAgICAgICB3aW5kb3dPcmlnaW4tPnNldERvdWJsZSgieSIsIHkudmFsdWUoKSk7CiAgICAgICAg
ICAgICBwYXJhbWV0ZXJzLT5zZXRPYmplY3QoIm9yaWdpbiJfcywgV1RGTW92ZSh3aW5kb3dPcmln
aW4pKTsKICAgICAgICAgfQogICAgICAgICBpZiAod2lkdGggJiYgaGVpZ2h0KSB7Ci0gICAgICAg
ICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiB3aW5kb3dTaXplID0gSlNPTjo6T2JqZWN0OjpjcmVh
dGUoKTsKKyAgICAgICAgICAgIGF1dG8gd2luZG93U2l6ZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRl
KCk7CiAgICAgICAgICAgICB3aW5kb3dTaXplLT5zZXREb3VibGUoIndpZHRoIiwgd2lkdGgudmFs
dWUoKSk7CiAgICAgICAgICAgICB3aW5kb3dTaXplLT5zZXREb3VibGUoImhlaWdodCIsIGhlaWdo
dC52YWx1ZSgpKTsKICAgICAgICAgICAgIHBhcmFtZXRlcnMtPnNldE9iamVjdCgic2l6ZSJfcywg
V1RGTW92ZSh3aW5kb3dTaXplKSk7CkBAIC04MjEsNyArODYxLDcgQEAgdm9pZCBTZXNzaW9uOjpt
YXhpbWl6ZVdpbmRvdyhGdW5jdGlvbjx2b2lkIChDb21tYW5kUmVzdWx0JiYpPiYmIGNvbXBsZXRp
b25IYW5kbGUKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIFJlZlB0
cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAg
ICAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICBw
YXJhbWV0ZXJzLT5zZXRTdHJpbmcoImhhbmRsZSJfcywgbV90b3BsZXZlbEJyb3dzaW5nQ29udGV4
dC52YWx1ZSgpKTsKICAgICAgICAgbV9ob3N0LT5zZW5kQ29tbWFuZFRvQmFja2VuZCgibWF4aW1p
emVXaW5kb3dPZkJyb3dzaW5nQ29udGV4dCJfcywgV1RGTW92ZShwYXJhbWV0ZXJzKSwgW3RoaXMs
IHByb3RlY3RlZFRoaXMsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcildIChTZXNzaW9uSG9zdDo6Q29tbWFuZFJlc3BvbnNlJiYgcmVzcG9uc2UpIG11dGFibGUg
ewogICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmlzRXJyb3IpIHsKQEAgLTg0Niw3ICs4ODYsNyBA
QCB2b2lkIFNlc3Npb246Om1pbmltaXplV2luZG93KEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSZXN1
bHQmJik+JiYgY29tcGxldGlvbkhhbmRsZQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CiAKLSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVycyA9IEpTT046Ok9iamVj
dDo6Y3JlYXRlKCk7CisgICAgICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3Jl
YXRlKCk7CiAgICAgICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiaGFuZGxlIl9zLCBtX3RvcGxl
dmVsQnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwogICAgICAgICBtX2hvc3QtPnNlbmRDb21tYW5k
VG9CYWNrZW5kKCJoaWRlV2luZG93T2ZCcm93c2luZ0NvbnRleHQiX3MsIFdURk1vdmUocGFyYW1l
dGVycyksIFt0aGlzLCBwcm90ZWN0ZWRUaGlzLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpXSAoU2Vzc2lvbkhvc3Q6OkNvbW1hbmRSZXNwb25zZSYmIHJlc3Bv
bnNlKSBtdXRhYmxlIHsKICAgICAgICAgICAgIGlmIChyZXNwb25zZS5pc0Vycm9yKSB7CkBAIC04
NzEsNyArOTExLDcgQEAgdm9pZCBTZXNzaW9uOjpmdWxsc2NyZWVuV2luZG93KEZ1bmN0aW9uPHZv
aWQgKENvbW1hbmRSZXN1bHQmJik+JiYgY29tcGxldGlvbkhhbmQKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQogCi0gICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnMg
PSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU09O
OjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoImJyb3dz
aW5nQ29udGV4dEhhbmRsZSJfcywgbV90b3BsZXZlbEJyb3dzaW5nQ29udGV4dC52YWx1ZSgpKTsK
ICAgICAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJmdW5jdGlvbiJfcywgU3RyaW5nKEVudGVy
RnVsbHNjcmVlbkphdmFTY3JpcHQsIHNpemVvZihFbnRlckZ1bGxzY3JlZW5KYXZhU2NyaXB0KSkp
OwogICAgICAgICBwYXJhbWV0ZXJzLT5zZXRBcnJheSgiYXJndW1lbnRzIl9zLCBKU09OOjpBcnJh
eTo6Y3JlYXRlKCkpOwpAQCAtODgyLDEzICs5MjIsMTQgQEAgdm9pZCBTZXNzaW9uOjpmdWxsc2Ny
ZWVuV2luZG93KEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSZXN1bHQmJik+JiYgY29tcGxldGlvbkhh
bmQKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
IFN0cmluZyB2YWx1ZVN0cmluZzsKLSAgICAgICAgICAgIGlmICghcmVzcG9uc2UucmVzcG9uc2VP
YmplY3QtPmdldFN0cmluZygicmVzdWx0Il9zLCB2YWx1ZVN0cmluZykpIHsKKyAgICAgICAgICAg
IGF1dG8gdmFsdWVTdHJpbmcgPSByZXNwb25zZS5yZXNwb25zZU9iamVjdC0+Z2V0U3RyaW5nKCJy
ZXN1bHQiX3MpOworICAgICAgICAgICAgaWYgKCF2YWx1ZVN0cmluZykgewogICAgICAgICAgICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6
RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHJlc3VsdFZhbHVlOwot
ICAgICAgICAgICAgaWYgKCFKU09OOjpWYWx1ZTo6cGFyc2VKU09OKHZhbHVlU3RyaW5nLCByZXN1
bHRWYWx1ZSkpIHsKKworICAgICAgICAgICAgYXV0byByZXN1bHRWYWx1ZSA9IEpTT046OlZhbHVl
OjpwYXJzZUpTT04odmFsdWVTdHJpbmcpOworICAgICAgICAgICAgaWYgKCFyZXN1bHRWYWx1ZSkg
ewogICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwo
Q29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKICAgICAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgICAgICB9CkBAIC05MDAsMjIgKzk0MSwyNSBAQCB2b2lkIFNlc3Np
b246OmZ1bGxzY3JlZW5XaW5kb3coRnVuY3Rpb248dm9pZCAoQ29tbWFuZFJlc3VsdCYmKT4mJiBj
b21wbGV0aW9uSGFuZAogCiBSZWZQdHI8SlNPTjo6T2JqZWN0PiBTZXNzaW9uOjpjcmVhdGVFbGVt
ZW50KFJlZlB0cjxKU09OOjpWYWx1ZT4mJiB2YWx1ZSkKIHsKLSAgICBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiB2YWx1ZU9iamVjdDsKLSAgICBpZiAoIXZhbHVlLT5hc09iamVjdCh2YWx1ZU9iamVjdCkp
CisgICAgaWYgKCF2YWx1ZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBTdHJpbmcg
ZWxlbWVudElEOwotICAgIGlmICghdmFsdWVPYmplY3QtPmdldFN0cmluZygic2Vzc2lvbi1ub2Rl
LSIgKyBpZCgpLCBlbGVtZW50SUQpKQorICAgIGF1dG8gdmFsdWVPYmplY3QgPSB2YWx1ZS0+YXNP
YmplY3QoKTsKKyAgICBpZiAoIXZhbHVlT2JqZWN0KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
IAotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IGVsZW1lbnRPYmplY3QgPSBKU09OOjpPYmplY3Q6
OmNyZWF0ZSgpOworICAgIGF1dG8gZWxlbWVudElEID0gdmFsdWVPYmplY3QtPmdldFN0cmluZygi
c2Vzc2lvbi1ub2RlLSIgKyBpZCgpKTsKKyAgICBpZiAoIWVsZW1lbnRJRCkKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisKKyAgICBhdXRvIGVsZW1lbnRPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNy
ZWF0ZSgpOwogICAgIGVsZW1lbnRPYmplY3QtPnNldFN0cmluZyh3ZWJFbGVtZW50SWRlbnRpZmll
cigpLCBlbGVtZW50SUQpOwogICAgIHJldHVybiBlbGVtZW50T2JqZWN0OwogfQogCi1SZWZQdHI8
SlNPTjo6T2JqZWN0PiBTZXNzaW9uOjpjcmVhdGVFbGVtZW50KGNvbnN0IFN0cmluZyYgZWxlbWVu
dElEKQorUmVmPEpTT046Ok9iamVjdD4gU2Vzc2lvbjo6Y3JlYXRlRWxlbWVudChjb25zdCBTdHJp
bmcmIGVsZW1lbnRJRCkKIHsKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBlbGVtZW50T2JqZWN0
ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBhdXRvIGVsZW1lbnRPYmplY3QgPSBKU09O
OjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgIGVsZW1lbnRPYmplY3QtPnNldFN0cmluZygic2Vzc2lv
bi1ub2RlLSIgKyBpZCgpLCBlbGVtZW50SUQpOwogICAgIHJldHVybiBlbGVtZW50T2JqZWN0Owog
fQpAQCAtOTIzLDE3ICs5NjcsMTcgQEAgUmVmUHRyPEpTT046Ok9iamVjdD4gU2Vzc2lvbjo6Y3Jl
YXRlRWxlbWVudChjb25zdCBTdHJpbmcmIGVsZW1lbnRJRCkKIFJlZlB0cjxKU09OOjpPYmplY3Q+
IFNlc3Npb246OmV4dHJhY3RFbGVtZW50KEpTT046OlZhbHVlJiB2YWx1ZSkKIHsKICAgICBTdHJp
bmcgZWxlbWVudElEID0gZXh0cmFjdEVsZW1lbnRJRCh2YWx1ZSk7Ci0gICAgcmV0dXJuICFlbGVt
ZW50SUQuaXNFbXB0eSgpID8gY3JlYXRlRWxlbWVudChlbGVtZW50SUQpIDogbnVsbHB0cjsKKyAg
ICByZXR1cm4gIWVsZW1lbnRJRC5pc0VtcHR5KCkgPyBjcmVhdGVFbGVtZW50KGVsZW1lbnRJRCku
cHRyKCkgOiBudWxscHRyOwogfQogCiBTdHJpbmcgU2Vzc2lvbjo6ZXh0cmFjdEVsZW1lbnRJRChK
U09OOjpWYWx1ZSYgdmFsdWUpCiB7Ci0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gdmFsdWVPYmpl
Y3Q7Ci0gICAgaWYgKCF2YWx1ZS5hc09iamVjdCh2YWx1ZU9iamVjdCkpCisgICAgYXV0byB2YWx1
ZU9iamVjdCA9IHZhbHVlLmFzT2JqZWN0KCk7CisgICAgaWYgKCF2YWx1ZU9iamVjdCkKICAgICAg
ICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CiAKLSAgICBTdHJpbmcgZWxlbWVudElEOwotICAgIGlm
ICghdmFsdWVPYmplY3QtPmdldFN0cmluZyh3ZWJFbGVtZW50SWRlbnRpZmllcigpLCBlbGVtZW50
SUQpKQorICAgIGF1dG8gZWxlbWVudElEID0gdmFsdWVPYmplY3QtPmdldFN0cmluZyh3ZWJFbGVt
ZW50SWRlbnRpZmllcigpKTsKKyAgICBpZiAoIWVsZW1lbnRJRCkKICAgICAgICAgcmV0dXJuIGVt
cHR5U3RyaW5nKCk7CiAKICAgICByZXR1cm4gZWxlbWVudElEOwpAQCAtOTQzLDcgKzk4Nyw3IEBA
IHZvaWQgU2Vzc2lvbjo6Y29tcHV0ZUVsZW1lbnRMYXlvdXQoY29uc3QgU3RyaW5nJiBlbGVtZW50
SUQsIE9wdGlvblNldDxFbGVtZW50TGF5CiB7CiAgICAgQVNTRVJUKG1fdG9wbGV2ZWxCcm93c2lu
Z0NvbnRleHQudmFsdWUoKSk7CiAKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJz
ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU09OOjpP
YmplY3Q6OmNyZWF0ZSgpOwogICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiYnJvd3NpbmdDb250
ZXh0SGFuZGxlIl9zLCBtX3RvcGxldmVsQnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwogICAgIHBh
cmFtZXRlcnMtPnNldFN0cmluZygiZnJhbWVIYW5kbGUiX3MsIG1fY3VycmVudEJyb3dzaW5nQ29u
dGV4dC52YWx1ZU9yKGVtcHR5U3RyaW5nKCkpKTsKICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmco
Im5vZGVIYW5kbGUiX3MsIGVsZW1lbnRJRCk7CkBAIC05NTQsNTkgKzk5OCw2MCBAQCB2b2lkIFNl
c3Npb246OmNvbXB1dGVFbGVtZW50TGF5b3V0KGNvbnN0IFN0cmluZyYgZWxlbWVudElELCBPcHRp
b25TZXQ8RWxlbWVudExheQogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGOjpudWxs
b3B0LCBXVEY6Om51bGxvcHQsIGZhbHNlLCBXVEZNb3ZlKHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0
KSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgUmVmUHRyPEpTT046
Ok9iamVjdD4gcmVjdE9iamVjdDsKLSAgICAgICAgaWYgKCFyZXNwb25zZS5yZXNwb25zZU9iamVj
dC0+Z2V0T2JqZWN0KCJyZWN0Il9zLCByZWN0T2JqZWN0KSkgeworCisgICAgICAgIGF1dG8gcmVj
dE9iamVjdCA9IHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRPYmplY3QoInJlY3QiX3MpOwor
ICAgICAgICBpZiAoIXJlY3RPYmplY3QpIHsKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVy
KFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0LCBmYWxzZSwgbnVsbHB0cik7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KKwogICAgICAgICBPcHRpb25hbDxpbnQ+IGVsZW1lbnRYOwog
ICAgICAgICBPcHRpb25hbDxpbnQ+IGVsZW1lbnRZOwotICAgICAgICBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiBlbGVtZW50UG9zaXRpb247Ci0gICAgICAgIGlmIChyZWN0T2JqZWN0LT5nZXRPYmplY3Qo
Im9yaWdpbiJfcywgZWxlbWVudFBvc2l0aW9uKSkgewotICAgICAgICAgICAgaW50IHgsIHk7Ci0g
ICAgICAgICAgICBpZiAoZWxlbWVudFBvc2l0aW9uLT5nZXRJbnRlZ2VyKCJ4Il9zLCB4KSAmJiBl
bGVtZW50UG9zaXRpb24tPmdldEludGVnZXIoInkiX3MsIHkpKSB7Ci0gICAgICAgICAgICAgICAg
ZWxlbWVudFggPSB4OwotICAgICAgICAgICAgICAgIGVsZW1lbnRZID0geTsKLSAgICAgICAgICAg
IH0KKyAgICAgICAgYXV0byBlbGVtZW50UG9zaXRpb24gPSByZWN0T2JqZWN0LT5nZXRPYmplY3Qo
Im9yaWdpbiJfcyk7CisgICAgICAgIGlmIChlbGVtZW50UG9zaXRpb24pIHsKKyAgICAgICAgICAg
IGVsZW1lbnRYID0gZWxlbWVudFBvc2l0aW9uLT5nZXRJbnRlZ2VyKCJ4Il9zKTsKKyAgICAgICAg
ICAgIGVsZW1lbnRZID0gZWxlbWVudFBvc2l0aW9uLT5nZXRJbnRlZ2VyKCJ5Il9zKTsKICAgICAg
ICAgfQogICAgICAgICBpZiAoIWVsZW1lbnRYIHx8ICFlbGVtZW50WSkgewogICAgICAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIoV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQsIGZhbHNlLCBudWxs
cHRyKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQorCiAgICAgICAgIE9wdGlvbmFs
PGludD4gZWxlbWVudFdpZHRoOwogICAgICAgICBPcHRpb25hbDxpbnQ+IGVsZW1lbnRIZWlnaHQ7
Ci0gICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IGVsZW1lbnRTaXplOwotICAgICAgICBpZiAo
cmVjdE9iamVjdC0+Z2V0T2JqZWN0KCJzaXplIl9zLCBlbGVtZW50U2l6ZSkpIHsKLSAgICAgICAg
ICAgIGludCB3aWR0aCwgaGVpZ2h0OwotICAgICAgICAgICAgaWYgKGVsZW1lbnRTaXplLT5nZXRJ
bnRlZ2VyKCJ3aWR0aCJfcywgd2lkdGgpICYmIGVsZW1lbnRTaXplLT5nZXRJbnRlZ2VyKCJoZWln
aHQiX3MsIGhlaWdodCkpIHsKLSAgICAgICAgICAgICAgICBlbGVtZW50V2lkdGggPSB3aWR0aDsK
LSAgICAgICAgICAgICAgICBlbGVtZW50SGVpZ2h0ID0gaGVpZ2h0OwotICAgICAgICAgICAgfQor
ICAgICAgICBhdXRvIGVsZW1lbnRTaXplID0gcmVjdE9iamVjdC0+Z2V0T2JqZWN0KCJzaXplIl9z
KTsKKyAgICAgICAgaWYgKGVsZW1lbnRTaXplKSB7CisgICAgICAgICAgICBlbGVtZW50V2lkdGgg
PSBlbGVtZW50U2l6ZS0+Z2V0SW50ZWdlcigid2lkdGgiX3MpOworICAgICAgICAgICAgZWxlbWVu
dEhlaWdodCA9IGVsZW1lbnRTaXplLT5nZXRJbnRlZ2VyKCJoZWlnaHQiX3MpOwogICAgICAgICB9
CiAgICAgICAgIGlmICghZWxlbWVudFdpZHRoIHx8ICFlbGVtZW50SGVpZ2h0KSB7CiAgICAgICAg
ICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCwgZmFsc2Us
IG51bGxwdHIpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CisKICAgICAgICAgUmVj
dCByZWN0ID0geyB7IGVsZW1lbnRYLnZhbHVlKCksIGVsZW1lbnRZLnZhbHVlKCkgfSwgeyBlbGVt
ZW50V2lkdGgudmFsdWUoKSwgZWxlbWVudEhlaWdodC52YWx1ZSgpIH0gfTsKIAotICAgICAgICBi
b29sIGlzT2JzY3VyZWQ7Ci0gICAgICAgIGlmICghcmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdl
dEJvb2xlYW4oImlzT2JzY3VyZWQiX3MsIGlzT2JzY3VyZWQpKSB7CisgICAgICAgIGF1dG8gaXNP
YnNjdXJlZCA9IHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRCb29sZWFuKCJpc09ic2N1cmVk
Il9zKTsKKyAgICAgICAgaWYgKCFpc09ic2N1cmVkKSB7CiAgICAgICAgICAgICBjb21wbGV0aW9u
SGFuZGxlcihXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCwgZmFsc2UsIG51bGxwdHIpOwogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+
IGluVmlld0NlbnRlclBvaW50T2JqZWN0OwotICAgICAgICBpZiAoIXJlc3BvbnNlLnJlc3BvbnNl
T2JqZWN0LT5nZXRPYmplY3QoImluVmlld0NlbnRlclBvaW50Il9zLCBpblZpZXdDZW50ZXJQb2lu
dE9iamVjdCkpIHsKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHJlY3QsIFdURjo6bnVs
bG9wdCwgaXNPYnNjdXJlZCwgbnVsbHB0cik7CisKKyAgICAgICAgYXV0byBpblZpZXdDZW50ZXJQ
b2ludE9iamVjdCA9IHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRPYmplY3QoImluVmlld0Nl
bnRlclBvaW50Il9zKTsKKyAgICAgICAgaWYgKCFpblZpZXdDZW50ZXJQb2ludE9iamVjdCkgewor
ICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIocmVjdCwgV1RGOjpudWxsb3B0LCAqaXNPYnNj
dXJlZCwgbnVsbHB0cik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAg
aW50IGluVmlld0NlbnRlclBvaW50WCA9IDAsIGluVmlld0NlbnRlclBvaW50WSA9IDA7Ci0gICAg
ICAgIGlmICghaW5WaWV3Q2VudGVyUG9pbnRPYmplY3QtPmdldEludGVnZXIoIngiX3MsIGluVmll
d0NlbnRlclBvaW50WCkKLSAgICAgICAgICAgIHx8ICFpblZpZXdDZW50ZXJQb2ludE9iamVjdC0+
Z2V0SW50ZWdlcigieSJfcywgaW5WaWV3Q2VudGVyUG9pbnRZKSkgewotICAgICAgICAgICAgY29t
cGxldGlvbkhhbmRsZXIoV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQsIGlzT2JzY3VyZWQsIG51
bGxwdHIpOworCisgICAgICAgIGF1dG8gaW5WaWV3Q2VudGVyUG9pbnRYID0gaW5WaWV3Q2VudGVy
UG9pbnRPYmplY3QtPmdldEludGVnZXIoIngiX3MpOworICAgICAgICBhdXRvIGluVmlld0NlbnRl
clBvaW50WSA9IGluVmlld0NlbnRlclBvaW50T2JqZWN0LT5nZXRJbnRlZ2VyKCJ5Il9zKTsKKyAg
ICAgICAgaWYgKCFpblZpZXdDZW50ZXJQb2ludFggfHwgIWluVmlld0NlbnRlclBvaW50WSkgewor
ICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQs
ICppc09ic2N1cmVkLCBudWxscHRyKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQot
ICAgICAgICBQb2ludCBpblZpZXdDZW50ZXJQb2ludCA9IHsgaW5WaWV3Q2VudGVyUG9pbnRYLCBp
blZpZXdDZW50ZXJQb2ludFkgfTsKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIocmVjdCwgaW5W
aWV3Q2VudGVyUG9pbnQsIGlzT2JzY3VyZWQsIG51bGxwdHIpOworCisgICAgICAgIFBvaW50IGlu
Vmlld0NlbnRlclBvaW50ID0geyAqaW5WaWV3Q2VudGVyUG9pbnRYLCAqaW5WaWV3Q2VudGVyUG9p
bnRZIH07CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHJlY3QsIGluVmlld0NlbnRlclBvaW50
LCAqaXNPYnNjdXJlZCwgbnVsbHB0cik7CiAgICAgfSk7CiB9CiAKQEAgLTEwMjIsNyArMTA2Nyw3
IEBAIHZvaWQgU2Vzc2lvbjo6ZmluZEVsZW1lbnRzKGNvbnN0IFN0cmluZyYgc3RyYXRlZ3ksIGNv
bnN0IFN0cmluZyYgc2VsZWN0b3IsIEZpbmRFCiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cihXVEZNb3ZlKHJlc3VsdCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAg
ICAgIFJlZlB0cjxKU09OOjpBcnJheT4gYXJndW1lbnRzID0gSlNPTjo6QXJyYXk6OmNyZWF0ZSgp
OworICAgICAgICBhdXRvIGFyZ3VtZW50cyA9IEpTT046OkFycmF5OjpjcmVhdGUoKTsKICAgICAg
ICAgYXJndW1lbnRzLT5wdXNoU3RyaW5nKEpTT046OlZhbHVlOjpjcmVhdGUoc3RyYXRlZ3kpLT50
b0pTT05TdHJpbmcoKSk7CiAgICAgICAgIGlmIChyb290RWxlbWVudElELmlzRW1wdHkoKSkKICAg
ICAgICAgICAgIGFyZ3VtZW50cy0+cHVzaFN0cmluZyhKU09OOjpWYWx1ZTo6bnVsbCgpLT50b0pT
T05TdHJpbmcoKSk7CkBAIC0xMDMyLDcgKzEwNzcsNyBAQCB2b2lkIFNlc3Npb246OmZpbmRFbGVt
ZW50cyhjb25zdCBTdHJpbmcmIHN0cmF0ZWd5LCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yLCBGaW5k
RQogICAgICAgICBhcmd1bWVudHMtPnB1c2hTdHJpbmcoSlNPTjo6VmFsdWU6OmNyZWF0ZShtb2Rl
ID09IEZpbmRFbGVtZW50c01vZGU6OlNpbmdsZSktPnRvSlNPTlN0cmluZygpKTsKICAgICAgICAg
YXJndW1lbnRzLT5wdXNoU3RyaW5nKEpTT046OlZhbHVlOjpjcmVhdGUobV9pbXBsaWNpdFdhaXRU
aW1lb3V0KS0+dG9KU09OU3RyaW5nKCkpOwogCi0gICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+
IHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBhdXRvIHBhcmFt
ZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICBwYXJhbWV0ZXJzLT5zZXRT
dHJpbmcoImJyb3dzaW5nQ29udGV4dEhhbmRsZSJfcywgbV90b3BsZXZlbEJyb3dzaW5nQ29udGV4
dC52YWx1ZSgpKTsKICAgICAgICAgaWYgKG1fY3VycmVudEJyb3dzaW5nQ29udGV4dCkKICAgICAg
ICAgICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiZnJhbWVIYW5kbGUiX3MsIG1fY3VycmVudEJy
b3dzaW5nQ29udGV4dC52YWx1ZSgpKTsKQEAgLTEwNDgsMjAgKzEwOTMsMjMgQEAgdm9pZCBTZXNz
aW9uOjpmaW5kRWxlbWVudHMoY29uc3QgU3RyaW5nJiBzdHJhdGVneSwgY29uc3QgU3RyaW5nJiBz
ZWxlY3RvciwgRmluZEUKICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5k
UmVzdWx0OjpmYWlsKFdURk1vdmUocmVzcG9uc2UucmVzcG9uc2VPYmplY3QpKSk7CiAgICAgICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgU3RyaW5nIHZhbHVl
U3RyaW5nOwotICAgICAgICAgICAgaWYgKCFyZXNwb25zZS5yZXNwb25zZU9iamVjdC0+Z2V0U3Ry
aW5nKCJyZXN1bHQiX3MsIHZhbHVlU3RyaW5nKSkgewotICAgICAgICAgICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpV
bmtub3duRXJyb3IpKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHJlc3VsdFZhbHVlOwotICAgICAgICAgICAg
aWYgKCFKU09OOjpWYWx1ZTo6cGFyc2VKU09OKHZhbHVlU3RyaW5nLCByZXN1bHRWYWx1ZSkpIHsK
KworICAgICAgICAgICAgYXV0byB2YWx1ZVN0cmluZyA9IHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0
LT5nZXRTdHJpbmcoInJlc3VsdCJfcyk7CisgICAgICAgICAgICBpZiAoIXZhbHVlU3RyaW5nKSB7
CiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChD
b21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikpOwogICAgICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgICAgIH0KIAorICAgICAgICAgICAgYXV0byByZXN1bHRWYWx1ZSA9
IEpTT046OlZhbHVlOjpwYXJzZUpTT04odmFsdWVTdHJpbmcpOworICAgICAgICAgICAgaWYgKCFy
ZXN1bHRWYWx1ZSkgeworICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRS
ZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKwogICAgICAgICAgICAgc3dp
dGNoIChtb2RlKSB7CiAgICAgICAgICAgICBjYXNlIEZpbmRFbGVtZW50c01vZGU6OlNpbmdsZTog
ewotICAgICAgICAgICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IGVsZW1lbnRPYmplY3QgPSBj
cmVhdGVFbGVtZW50KFdURk1vdmUocmVzdWx0VmFsdWUpKTsKKyAgICAgICAgICAgICAgICBhdXRv
IGVsZW1lbnRPYmplY3QgPSBjcmVhdGVFbGVtZW50KFdURk1vdmUocmVzdWx0VmFsdWUpKTsKICAg
ICAgICAgICAgICAgICBpZiAoIWVsZW1lbnRPYmplY3QpIHsKICAgICAgICAgICAgICAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJv
ckNvZGU6Ok5vU3VjaEVsZW1lbnQpKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAt
MTA3MCwxNiArMTExOCwxNyBAQCB2b2lkIFNlc3Npb246OmZpbmRFbGVtZW50cyhjb25zdCBTdHJp
bmcmIHN0cmF0ZWd5LCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yLCBGaW5kRQogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgY2FzZSBGaW5kRWxlbWVudHNN
b2RlOjpNdWx0aXBsZTogewotICAgICAgICAgICAgICAgIFJlZlB0cjxKU09OOjpBcnJheT4gZWxl
bWVudHNBcnJheTsKLSAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdFZhbHVlLT5hc0FycmF5KGVs
ZW1lbnRzQXJyYXkpKSB7CisgICAgICAgICAgICAgICAgYXV0byBlbGVtZW50c0FycmF5ID0gcmVz
dWx0VmFsdWUtPmFzQXJyYXkoKTsKKyAgICAgICAgICAgICAgICBpZiAoIWVsZW1lbnRzQXJyYXkp
IHsKICAgICAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6
ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6Ok5vU3VjaEVsZW1lbnQpKTsKICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBS
ZWZQdHI8SlNPTjo6QXJyYXk+IGVsZW1lbnRPYmplY3RzQXJyYXkgPSBKU09OOjpBcnJheTo6Y3Jl
YXRlKCk7CisKKyAgICAgICAgICAgICAgICBhdXRvIGVsZW1lbnRPYmplY3RzQXJyYXkgPSBKU09O
OjpBcnJheTo6Y3JlYXRlKCk7CiAgICAgICAgICAgICAgICAgdW5zaWduZWQgZWxlbWVudHNBcnJh
eUxlbmd0aCA9IGVsZW1lbnRzQXJyYXktPmxlbmd0aCgpOwogICAgICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBlbGVtZW50c0FycmF5TGVuZ3RoOyArK2kpIHsKICAgICAgICAg
ICAgICAgICAgICAgaWYgKGF1dG8gZWxlbWVudE9iamVjdCA9IGNyZWF0ZUVsZW1lbnQoZWxlbWVu
dHNBcnJheS0+Z2V0KGkpKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRPYmplY3Rz
QXJyYXktPnB1c2hPYmplY3QoV1RGTW92ZShlbGVtZW50T2JqZWN0KSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBlbGVtZW50T2JqZWN0c0FycmF5LT5wdXNoT2JqZWN0KGVsZW1lbnRPYmplY3Qu
cmVsZWFzZU5vbk51bGwoKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGNv
bXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OnN1Y2Nlc3MoV1RGTW92ZShlbGVtZW50T2Jq
ZWN0c0FycmF5KSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTEwMSw3ICsxMTUwLDcg
QEAgdm9pZCBTZXNzaW9uOjpnZXRBY3RpdmVFbGVtZW50KEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRS
ZXN1bHQmJik+JiYgY29tcGxldGlvbkhhbmQKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVy
KFdURk1vdmUocmVzdWx0KSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAg
ICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRl
KCk7CisgICAgICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAg
ICAgICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiYnJvd3NpbmdDb250ZXh0SGFuZGxlIl9zLCBt
X3RvcGxldmVsQnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwogICAgICAgICBwYXJhbWV0ZXJzLT5z
ZXRTdHJpbmcoImZ1bmN0aW9uIl9zLCAiZnVuY3Rpb24oKSB7IHJldHVybiBkb2N1bWVudC5hY3Rp
dmVFbGVtZW50OyB9Il9zKTsKICAgICAgICAgcGFyYW1ldGVycy0+c2V0QXJyYXkoImFyZ3VtZW50
cyJfcywgSlNPTjo6QXJyYXk6OmNyZWF0ZSgpKTsKQEAgLTExMTAsMTcgKzExNTksMjAgQEAgdm9p
ZCBTZXNzaW9uOjpnZXRBY3RpdmVFbGVtZW50KEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSZXN1bHQm
Jik+JiYgY29tcGxldGlvbkhhbmQKICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihD
b21tYW5kUmVzdWx0OjpmYWlsKFdURk1vdmUocmVzcG9uc2UucmVzcG9uc2VPYmplY3QpKSk7CiAg
ICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgU3RyaW5n
IHZhbHVlU3RyaW5nOwotICAgICAgICAgICAgaWYgKCFyZXNwb25zZS5yZXNwb25zZU9iamVjdC0+
Z2V0U3RyaW5nKCJyZXN1bHQiX3MsIHZhbHVlU3RyaW5nKSkgeworCisgICAgICAgICAgICBhdXRv
IHZhbHVlU3RyaW5nID0gcmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdldFN0cmluZygicmVzdWx0
Il9zKTsKKyAgICAgICAgICAgIGlmICghdmFsdWVTdHJpbmcpIHsKICAgICAgICAgICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9y
Q29kZTo6VW5rbm93bkVycm9yKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAg
ICAgfQotICAgICAgICAgICAgUmVmUHRyPEpTT046OlZhbHVlPiByZXN1bHRWYWx1ZTsKLSAgICAg
ICAgICAgIGlmICghSlNPTjo6VmFsdWU6OnBhcnNlSlNPTih2YWx1ZVN0cmluZywgcmVzdWx0VmFs
dWUpKSB7CisKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0VmFsdWUgPSBKU09OOjpWYWx1ZTo6cGFy
c2VKU09OKHZhbHVlU3RyaW5nKTsKKyAgICAgICAgICAgIGlmICghcmVzdWx0VmFsdWUpIHsKICAg
ICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1h
bmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVycm9yKSk7CiAgICAgICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gZWxl
bWVudE9iamVjdCA9IGNyZWF0ZUVsZW1lbnQoV1RGTW92ZShyZXN1bHRWYWx1ZSkpOworCisgICAg
ICAgICAgICBhdXRvIGVsZW1lbnRPYmplY3QgPSBjcmVhdGVFbGVtZW50KFdURk1vdmUocmVzdWx0
VmFsdWUpKTsKICAgICAgICAgICAgIGlmICghZWxlbWVudE9iamVjdCkgewogICAgICAgICAgICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6
RXJyb3JDb2RlOjpOb1N1Y2hFbGVtZW50KSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAt
MTE0MiwxMSArMTE5NCwxMSBAQCB2b2lkIFNlc3Npb246OmlzRWxlbWVudFNlbGVjdGVkKGNvbnN0
IFN0cmluZyYgZWxlbWVudElELCBGdW5jdGlvbjx2b2lkIChDb21tYW5kUgogICAgICAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShyZXN1bHQpKTsKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQotICAgICAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IGFyZ3VtZW50cyA9IEpTT046
OkFycmF5OjpjcmVhdGUoKTsKKyAgICAgICAgYXV0byBhcmd1bWVudHMgPSBKU09OOjpBcnJheTo6
Y3JlYXRlKCk7CiAgICAgICAgIGFyZ3VtZW50cy0+cHVzaFN0cmluZyhjcmVhdGVFbGVtZW50KGVs
ZW1lbnRJRCktPnRvSlNPTlN0cmluZygpKTsKICAgICAgICAgYXJndW1lbnRzLT5wdXNoU3RyaW5n
KEpTT046OlZhbHVlOjpjcmVhdGUoInNlbGVjdGVkIiktPnRvSlNPTlN0cmluZygpKTsKIAotICAg
ICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVh
dGUoKTsKKyAgICAgICAgYXV0byBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsK
ICAgICAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJicm93c2luZ0NvbnRleHRIYW5kbGUiX3Ms
IG1fdG9wbGV2ZWxCcm93c2luZ0NvbnRleHQudmFsdWUoKSk7CiAgICAgICAgIGlmIChtX2N1cnJl
bnRCcm93c2luZ0NvbnRleHQpCiAgICAgICAgICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoImZy
YW1lSGFuZGxlIl9zLCBtX2N1cnJlbnRCcm93c2luZ0NvbnRleHQudmFsdWUoKSk7CkBAIC0xMTU3
LDI1ICsxMjA5LDMwIEBAIHZvaWQgU2Vzc2lvbjo6aXNFbGVtZW50U2VsZWN0ZWQoY29uc3QgU3Ry
aW5nJiBlbGVtZW50SUQsIEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSCiAgICAgICAgICAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChXVEZNb3ZlKHJlc3BvbnNlLnJl
c3BvbnNlT2JqZWN0KSkpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIFN0cmluZyB2YWx1ZVN0cmluZzsKLSAgICAgICAgICAgIGlmICghcmVzcG9u
c2UucmVzcG9uc2VPYmplY3QtPmdldFN0cmluZygicmVzdWx0Il9zLCB2YWx1ZVN0cmluZykpIHsK
KworICAgICAgICAgICAgYXV0byB2YWx1ZVN0cmluZyA9IHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0
LT5nZXRTdHJpbmcoInJlc3VsdCJfcyk7CisgICAgICAgICAgICBpZiAoIXZhbHVlU3RyaW5nKSB7
CiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChD
b21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikpOwogICAgICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4g
cmVzdWx0VmFsdWU7Ci0gICAgICAgICAgICBpZiAoIUpTT046OlZhbHVlOjpwYXJzZUpTT04odmFs
dWVTdHJpbmcsIHJlc3VsdFZhbHVlKSkgeworCisgICAgICAgICAgICBhdXRvIHJlc3VsdFZhbHVl
ID0gSlNPTjo6VmFsdWU6OnBhcnNlSlNPTih2YWx1ZVN0cmluZyk7CisgICAgICAgICAgICBpZiAo
IXJlc3VsdFZhbHVlKSB7CiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFu
ZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikpOwog
ICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgaWYg
KHJlc3VsdFZhbHVlLT5pc051bGwoKSkgewogICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5k
bGVyKENvbW1hbmRSZXN1bHQ6OnN1Y2Nlc3MoSlNPTjo6VmFsdWU6OmNyZWF0ZShmYWxzZSkpKTsK
ICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBTdHJp
bmcgYm9vbGVhblJlc3VsdDsKLSAgICAgICAgICAgIGlmICghcmVzdWx0VmFsdWUtPmFzU3RyaW5n
KGJvb2xlYW5SZXN1bHQpIHx8IGJvb2xlYW5SZXN1bHQgIT0gInRydWUiKSB7CisKKyAgICAgICAg
ICAgIGF1dG8gYm9vbGVhblJlc3VsdCA9IHJlc3VsdFZhbHVlLT5hc1N0cmluZygpOworICAgICAg
ICAgICAgaWYgKCFib29sZWFuUmVzdWx0IHx8IGJvb2xlYW5SZXN1bHQgIT0gInRydWUiKSB7CiAg
ICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21t
YW5kUmVzdWx0OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikpOwogICAgICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29t
bWFuZFJlc3VsdDo6c3VjY2VzcyhKU09OOjpWYWx1ZTo6Y3JlYXRlKHRydWUpKSk7CiAgICAgICAg
IH0pOwogICAgIH0pOwpAQCAtMTE5MywxMCArMTI1MCwxMCBAQCB2b2lkIFNlc3Npb246OmdldEVs
ZW1lbnRUZXh0KGNvbnN0IFN0cmluZyYgZWxlbWVudElELCBGdW5jdGlvbjx2b2lkIChDb21tYW5k
UmVzdQogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShyZXN1bHQpKTsKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBSZWZQdHI8SlNPTjo6QXJyYXk+
IGFyZ3VtZW50cyA9IEpTT046OkFycmF5OjpjcmVhdGUoKTsKKyAgICAgICAgYXV0byBhcmd1bWVu
dHMgPSBKU09OOjpBcnJheTo6Y3JlYXRlKCk7CiAgICAgICAgIGFyZ3VtZW50cy0+cHVzaFN0cmlu
ZyhjcmVhdGVFbGVtZW50KGVsZW1lbnRJRCktPnRvSlNPTlN0cmluZygpKTsKIAotICAgICAgICBS
ZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsK
KyAgICAgICAgYXV0byBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICAg
ICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJicm93c2luZ0NvbnRleHRIYW5kbGUiX3MsIG1fdG9w
bGV2ZWxCcm93c2luZ0NvbnRleHQudmFsdWUoKSk7CiAgICAgICAgIGlmIChtX2N1cnJlbnRCcm93
c2luZ0NvbnRleHQpCiAgICAgICAgICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoImZyYW1lSGFu
ZGxlIl9zLCBtX2N1cnJlbnRCcm93c2luZ0NvbnRleHQudmFsdWUoKSk7CkBAIC0xMjA4LDE2ICsx
MjY1LDE5IEBAIHZvaWQgU2Vzc2lvbjo6Z2V0RWxlbWVudFRleHQoY29uc3QgU3RyaW5nJiBlbGVt
ZW50SUQsIEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSZXN1CiAgICAgICAgICAgICAgICAgY29tcGxl
dGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChXVEZNb3ZlKHJlc3BvbnNlLnJlc3BvbnNl
T2JqZWN0KSkpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIFN0cmluZyB2YWx1ZVN0cmluZzsKLSAgICAgICAgICAgIGlmICghcmVzcG9uc2UucmVz
cG9uc2VPYmplY3QtPmdldFN0cmluZygicmVzdWx0Il9zLCB2YWx1ZVN0cmluZykpIHsKKworICAg
ICAgICAgICAgYXV0byB2YWx1ZVN0cmluZyA9IHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRT
dHJpbmcoInJlc3VsdCJfcyk7CisgICAgICAgICAgICBpZiAoIXZhbHVlU3RyaW5nKSB7CiAgICAg
ICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5k
UmVzdWx0OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikpOwogICAgICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gcmVzdWx0
VmFsdWU7Ci0gICAgICAgICAgICBpZiAoIUpTT046OlZhbHVlOjpwYXJzZUpTT04odmFsdWVTdHJp
bmcsIHJlc3VsdFZhbHVlKSkgeworCisgICAgICAgICAgICBhdXRvIHJlc3VsdFZhbHVlID0gSlNP
Tjo6VmFsdWU6OnBhcnNlSlNPTih2YWx1ZVN0cmluZyk7CisgICAgICAgICAgICBpZiAoIXJlc3Vs
dFZhbHVlKSB7CiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3Vs
dDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikpOwogICAgICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgY29tcGxldGlv
bkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6c3VjY2VzcyhXVEZNb3ZlKHJlc3VsdFZhbHVlKSkpOwog
ICAgICAgICB9KTsKICAgICB9KTsKQEAgLTEyMzUsMTAgKzEyOTUsMTAgQEAgdm9pZCBTZXNzaW9u
OjpnZXRFbGVtZW50VGFnTmFtZShjb25zdCBTdHJpbmcmIGVsZW1lbnRJRCwgRnVuY3Rpb248dm9p
ZCAoQ29tbWFuZFIKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUocmVzdWx0
KSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgUmVmUHRyPEpTT046
OkFycmF5PiBhcmd1bWVudHMgPSBKU09OOjpBcnJheTo6Y3JlYXRlKCk7CisgICAgICAgIGF1dG8g
YXJndW1lbnRzID0gSlNPTjo6QXJyYXk6OmNyZWF0ZSgpOwogICAgICAgICBhcmd1bWVudHMtPnB1
c2hTdHJpbmcoY3JlYXRlRWxlbWVudChlbGVtZW50SUQpLT50b0pTT05TdHJpbmcoKSk7CiAKLSAg
ICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3Jl
YXRlKCk7CisgICAgICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7
CiAgICAgICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiYnJvd3NpbmdDb250ZXh0SGFuZGxlIl9z
LCBtX3RvcGxldmVsQnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwogICAgICAgICBpZiAobV9jdXJy
ZW50QnJvd3NpbmdDb250ZXh0KQogICAgICAgICAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJm
cmFtZUhhbmRsZSJfcywgbV9jdXJyZW50QnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwpAQCAtMTI0
OSwxNiArMTMwOSwxOSBAQCB2b2lkIFNlc3Npb246OmdldEVsZW1lbnRUYWdOYW1lKGNvbnN0IFN0
cmluZyYgZWxlbWVudElELCBGdW5jdGlvbjx2b2lkIChDb21tYW5kUgogICAgICAgICAgICAgICAg
IGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoV1RGTW92ZShyZXNwb25zZS5y
ZXNwb25zZU9iamVjdCkpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICBTdHJpbmcgdmFsdWVTdHJpbmc7Ci0gICAgICAgICAgICBpZiAoIXJlc3Bv
bnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRTdHJpbmcoInJlc3VsdCJfcywgdmFsdWVTdHJpbmcpKSB7
CisKKyAgICAgICAgICAgIGF1dG8gdmFsdWVTdHJpbmcgPSByZXNwb25zZS5yZXNwb25zZU9iamVj
dC0+Z2V0U3RyaW5nKCJyZXN1bHQiX3MpOworICAgICAgICAgICAgaWYgKCF2YWx1ZVN0cmluZykg
ewogICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwo
Q29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKICAgICAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+
IHJlc3VsdFZhbHVlOwotICAgICAgICAgICAgaWYgKCFKU09OOjpWYWx1ZTo6cGFyc2VKU09OKHZh
bHVlU3RyaW5nLCByZXN1bHRWYWx1ZSkpIHsKKworICAgICAgICAgICAgYXV0byByZXN1bHRWYWx1
ZSA9IEpTT046OlZhbHVlOjpwYXJzZUpTT04odmFsdWVTdHJpbmcpOworICAgICAgICAgICAgaWYg
KCFyZXN1bHRWYWx1ZSkgewogICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1h
bmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsK
ICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CisKICAgICAgICAgICAgIGNv
bXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OnN1Y2Nlc3MoV1RGTW92ZShyZXN1bHRWYWx1
ZSkpKTsKICAgICAgICAgfSk7CiAgICAgfSk7CkBAIC0xMjgxLDcgKzEzNDQsNyBAQCB2b2lkIFNl
c3Npb246OmdldEVsZW1lbnRSZWN0KGNvbnN0IFN0cmluZyYgZWxlbWVudElELCBGdW5jdGlvbjx2
b2lkIChDb21tYW5kUmVzdQogICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1h
bmRSZXN1bHQ6OmZhaWwoV1RGTW92ZShlcnJvcikpKTsKICAgICAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiByZWN0T2Jq
ZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgICAgIGF1dG8gcmVjdE9iamVj
dCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgICAgICByZWN0T2JqZWN0LT5zZXRJ
bnRlZ2VyKCJ4Il9zLCByZWN0LnZhbHVlKCkub3JpZ2luLngpOwogICAgICAgICAgICAgcmVjdE9i
amVjdC0+c2V0SW50ZWdlcigieSJfcywgcmVjdC52YWx1ZSgpLm9yaWdpbi55KTsKICAgICAgICAg
ICAgIHJlY3RPYmplY3QtPnNldEludGVnZXIoIndpZHRoIl9zLCByZWN0LnZhbHVlKCkuc2l6ZS53
aWR0aCk7CkBAIC0xMzAzLDEwICsxMzY2LDEwIEBAIHZvaWQgU2Vzc2lvbjo6aXNFbGVtZW50RW5h
YmxlZChjb25zdCBTdHJpbmcmIGVsZW1lbnRJRCwgRnVuY3Rpb248dm9pZCAoQ29tbWFuZFJlCiAg
ICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKHJlc3VsdCkpOwogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIFJlZlB0cjxKU09OOjpBcnJheT4gYXJndW1l
bnRzID0gSlNPTjo6QXJyYXk6OmNyZWF0ZSgpOworICAgICAgICBhdXRvIGFyZ3VtZW50cyA9IEpT
T046OkFycmF5OjpjcmVhdGUoKTsKICAgICAgICAgYXJndW1lbnRzLT5wdXNoU3RyaW5nKGNyZWF0
ZUVsZW1lbnQoZWxlbWVudElEKS0+dG9KU09OU3RyaW5nKCkpOwogCi0gICAgICAgIFJlZlB0cjxK
U09OOjpPYmplY3Q+IHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgICAg
ICBhdXRvIHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICBwYXJh
bWV0ZXJzLT5zZXRTdHJpbmcoImJyb3dzaW5nQ29udGV4dEhhbmRsZSJfcywgbV90b3BsZXZlbEJy
b3dzaW5nQ29udGV4dC52YWx1ZSgpKTsKICAgICAgICAgaWYgKG1fY3VycmVudEJyb3dzaW5nQ29u
dGV4dCkKICAgICAgICAgICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiZnJhbWVIYW5kbGUiX3Ms
IG1fY3VycmVudEJyb3dzaW5nQ29udGV4dC52YWx1ZSgpKTsKQEAgLTEzMTcsMTYgKzEzODAsMTkg
QEAgdm9pZCBTZXNzaW9uOjppc0VsZW1lbnRFbmFibGVkKGNvbnN0IFN0cmluZyYgZWxlbWVudElE
LCBGdW5jdGlvbjx2b2lkIChDb21tYW5kUmUKICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFu
ZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKFdURk1vdmUocmVzcG9uc2UucmVzcG9uc2VPYmplY3Qp
KSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQotICAgICAgICAgICAg
U3RyaW5nIHZhbHVlU3RyaW5nOwotICAgICAgICAgICAgaWYgKCFyZXNwb25zZS5yZXNwb25zZU9i
amVjdC0+Z2V0U3RyaW5nKCJyZXN1bHQiX3MsIHZhbHVlU3RyaW5nKSkgeworCisgICAgICAgICAg
ICBhdXRvIHZhbHVlU3RyaW5nID0gcmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdldFN0cmluZygi
cmVzdWx0Il9zKTsKKyAgICAgICAgICAgIGlmICghdmFsdWVTdHJpbmcpIHsKICAgICAgICAgICAg
ICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6
OkVycm9yQ29kZTo6VW5rbm93bkVycm9yKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAgICAgfQotICAgICAgICAgICAgUmVmUHRyPEpTT046OlZhbHVlPiByZXN1bHRWYWx1ZTsK
LSAgICAgICAgICAgIGlmICghSlNPTjo6VmFsdWU6OnBhcnNlSlNPTih2YWx1ZVN0cmluZywgcmVz
dWx0VmFsdWUpKSB7CisKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0VmFsdWUgPSBKU09OOjpWYWx1
ZTo6cGFyc2VKU09OKHZhbHVlU3RyaW5nKTsKKyAgICAgICAgICAgIGlmICghcmVzdWx0VmFsdWUp
IHsKICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWls
KENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVycm9yKSk7CiAgICAgICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cihDb21tYW5kUmVzdWx0OjpzdWNjZXNzKFdURk1vdmUocmVzdWx0VmFsdWUpKSk7CiAgICAgICAg
IH0pOwogICAgIH0pOwpAQCAtMTM0NCwxMCArMTQxMCwxMCBAQCB2b2lkIFNlc3Npb246OmlzRWxl
bWVudERpc3BsYXllZChjb25zdCBTdHJpbmcmIGVsZW1lbnRJRCwgRnVuY3Rpb248dm9pZCAoQ29t
bWFuZAogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShyZXN1bHQpKTsKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBSZWZQdHI8SlNPTjo6QXJyYXk+
IGFyZ3VtZW50cyA9IEpTT046OkFycmF5OjpjcmVhdGUoKTsKKyAgICAgICAgYXV0byBhcmd1bWVu
dHMgPSBKU09OOjpBcnJheTo6Y3JlYXRlKCk7CiAgICAgICAgIGFyZ3VtZW50cy0+cHVzaFN0cmlu
ZyhjcmVhdGVFbGVtZW50KGVsZW1lbnRJRCktPnRvSlNPTlN0cmluZygpKTsKIAotICAgICAgICBS
ZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsK
KyAgICAgICAgYXV0byBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICAg
ICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJicm93c2luZ0NvbnRleHRIYW5kbGUiX3MsIG1fdG9w
bGV2ZWxCcm93c2luZ0NvbnRleHQudmFsdWUoKSk7CiAgICAgICAgIGlmIChtX2N1cnJlbnRCcm93
c2luZ0NvbnRleHQpCiAgICAgICAgICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoImZyYW1lSGFu
ZGxlIl9zLCBtX2N1cnJlbnRCcm93c2luZ0NvbnRleHQudmFsdWUoKSk7CkBAIC0xMzU4LDE2ICsx
NDI0LDE5IEBAIHZvaWQgU2Vzc2lvbjo6aXNFbGVtZW50RGlzcGxheWVkKGNvbnN0IFN0cmluZyYg
ZWxlbWVudElELCBGdW5jdGlvbjx2b2lkIChDb21tYW5kCiAgICAgICAgICAgICAgICAgY29tcGxl
dGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChXVEZNb3ZlKHJlc3BvbnNlLnJlc3BvbnNl
T2JqZWN0KSkpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIFN0cmluZyB2YWx1ZVN0cmluZzsKLSAgICAgICAgICAgIGlmICghcmVzcG9uc2UucmVz
cG9uc2VPYmplY3QtPmdldFN0cmluZygicmVzdWx0Il9zLCB2YWx1ZVN0cmluZykpIHsKKworICAg
ICAgICAgICAgYXV0byB2YWx1ZVN0cmluZyA9IHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRT
dHJpbmcoInJlc3VsdCJfcyk7CisgICAgICAgICAgICBpZiAoIXZhbHVlU3RyaW5nKSB7CiAgICAg
ICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5k
UmVzdWx0OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikpOwogICAgICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gcmVzdWx0
VmFsdWU7Ci0gICAgICAgICAgICBpZiAoIUpTT046OlZhbHVlOjpwYXJzZUpTT04odmFsdWVTdHJp
bmcsIHJlc3VsdFZhbHVlKSkgeworCisgICAgICAgICAgICBhdXRvIHJlc3VsdFZhbHVlID0gSlNP
Tjo6VmFsdWU6OnBhcnNlSlNPTih2YWx1ZVN0cmluZyk7CisgICAgICAgICAgICBpZiAoIXJlc3Vs
dFZhbHVlKSB7CiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3Vs
dDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikpOwogICAgICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgY29tcGxldGlv
bkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6c3VjY2VzcyhXVEZNb3ZlKHJlc3VsdFZhbHVlKSkpOwog
ICAgICAgICB9KTsKICAgICB9KTsKQEAgLTEzODUsMTEgKzE0NTQsMTEgQEAgdm9pZCBTZXNzaW9u
OjpnZXRFbGVtZW50QXR0cmlidXRlKGNvbnN0IFN0cmluZyYgZWxlbWVudElELCBjb25zdCBTdHJp
bmcmIGF0dHJpYnUKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUocmVzdWx0
KSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgUmVmUHRyPEpTT046
OkFycmF5PiBhcmd1bWVudHMgPSBKU09OOjpBcnJheTo6Y3JlYXRlKCk7CisgICAgICAgIGF1dG8g
YXJndW1lbnRzID0gSlNPTjo6QXJyYXk6OmNyZWF0ZSgpOwogICAgICAgICBhcmd1bWVudHMtPnB1
c2hTdHJpbmcoY3JlYXRlRWxlbWVudChlbGVtZW50SUQpLT50b0pTT05TdHJpbmcoKSk7CiAgICAg
ICAgIGFyZ3VtZW50cy0+cHVzaFN0cmluZyhKU09OOjpWYWx1ZTo6Y3JlYXRlKGF0dHJpYnV0ZSkt
PnRvSlNPTlN0cmluZygpKTsKIAotICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0
ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgYXV0byBwYXJhbWV0ZXJzID0g
SlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJi
cm93c2luZ0NvbnRleHRIYW5kbGUiX3MsIG1fdG9wbGV2ZWxCcm93c2luZ0NvbnRleHQudmFsdWUo
KSk7CiAgICAgICAgIGlmIChtX2N1cnJlbnRCcm93c2luZ0NvbnRleHQpCiAgICAgICAgICAgICBw
YXJhbWV0ZXJzLT5zZXRTdHJpbmcoImZyYW1lSGFuZGxlIl9zLCBtX2N1cnJlbnRCcm93c2luZ0Nv
bnRleHQudmFsdWUoKSk7CkBAIC0xNDAwLDE2ICsxNDY5LDE5IEBAIHZvaWQgU2Vzc2lvbjo6Z2V0
RWxlbWVudEF0dHJpYnV0ZShjb25zdCBTdHJpbmcmIGVsZW1lbnRJRCwgY29uc3QgU3RyaW5nJiBh
dHRyaWJ1CiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6
ZmFpbChXVEZNb3ZlKHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0KSkpOwogICAgICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFN0cmluZyB2YWx1ZVN0cmluZzsK
LSAgICAgICAgICAgIGlmICghcmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdldFN0cmluZygicmVz
dWx0Il9zLCB2YWx1ZVN0cmluZykpIHsKKworICAgICAgICAgICAgYXV0byB2YWx1ZVN0cmluZyA9
IHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRTdHJpbmcoInJlc3VsdCJfcyk7CisgICAgICAg
ICAgICBpZiAoIXZhbHVlU3RyaW5nKSB7CiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OlVua25vd25F
cnJvcikpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gcmVzdWx0VmFsdWU7Ci0gICAgICAgICAgICBpZiAoIUpT
T046OlZhbHVlOjpwYXJzZUpTT04odmFsdWVTdHJpbmcsIHJlc3VsdFZhbHVlKSkgeworCisgICAg
ICAgICAgICBhdXRvIHJlc3VsdFZhbHVlID0gSlNPTjo6VmFsdWU6OnBhcnNlSlNPTih2YWx1ZVN0
cmluZyk7CisgICAgICAgICAgICBpZiAoIXJlc3VsdFZhbHVlKSB7CiAgICAgICAgICAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJv
ckNvZGU6OlVua25vd25FcnJvcikpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
ICAgIH0KKwogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6c3Vj
Y2VzcyhXVEZNb3ZlKHJlc3VsdFZhbHVlKSkpOwogICAgICAgICB9KTsKICAgICB9KTsKQEAgLTE0
MjcsMTAgKzE0OTksMTAgQEAgdm9pZCBTZXNzaW9uOjpnZXRFbGVtZW50UHJvcGVydHkoY29uc3Qg
U3RyaW5nJiBlbGVtZW50SUQsIGNvbnN0IFN0cmluZyYgcHJvcGVydHkKICAgICAgICAgICAgIGNv
bXBsZXRpb25IYW5kbGVyKFdURk1vdmUocmVzdWx0KSk7CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KLSAgICAgICAgUmVmUHRyPEpTT046OkFycmF5PiBhcmd1bWVudHMgPSBKU09OOjpB
cnJheTo6Y3JlYXRlKCk7CisgICAgICAgIGF1dG8gYXJndW1lbnRzID0gSlNPTjo6QXJyYXk6OmNy
ZWF0ZSgpOwogICAgICAgICBhcmd1bWVudHMtPnB1c2hTdHJpbmcoY3JlYXRlRWxlbWVudChlbGVt
ZW50SUQpLT50b0pTT05TdHJpbmcoKSk7CiAKLSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4g
cGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIGF1dG8gcGFyYW1l
dGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgIHBhcmFtZXRlcnMtPnNldFN0
cmluZygiYnJvd3NpbmdDb250ZXh0SGFuZGxlIl9zLCBtX3RvcGxldmVsQnJvd3NpbmdDb250ZXh0
LnZhbHVlKCkpOwogICAgICAgICBpZiAobV9jdXJyZW50QnJvd3NpbmdDb250ZXh0KQogICAgICAg
ICAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJmcmFtZUhhbmRsZSJfcywgbV9jdXJyZW50QnJv
d3NpbmdDb250ZXh0LnZhbHVlKCkpOwpAQCAtMTQ0MSwxNiArMTUxMywxOSBAQCB2b2lkIFNlc3Np
b246OmdldEVsZW1lbnRQcm9wZXJ0eShjb25zdCBTdHJpbmcmIGVsZW1lbnRJRCwgY29uc3QgU3Ry
aW5nJiBwcm9wZXJ0eQogICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRS
ZXN1bHQ6OmZhaWwoV1RGTW92ZShyZXNwb25zZS5yZXNwb25zZU9iamVjdCkpKTsKICAgICAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBTdHJpbmcgdmFsdWVT
dHJpbmc7Ci0gICAgICAgICAgICBpZiAoIXJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRTdHJp
bmcoInJlc3VsdCJfcywgdmFsdWVTdHJpbmcpKSB7CisKKyAgICAgICAgICAgIGF1dG8gdmFsdWVT
dHJpbmcgPSByZXNwb25zZS5yZXNwb25zZU9iamVjdC0+Z2V0U3RyaW5nKCJyZXN1bHQiX3MpOwor
ICAgICAgICAgICAgaWYgKCF2YWx1ZVN0cmluZykgewogICAgICAgICAgICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpV
bmtub3duRXJyb3IpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHJlc3VsdFZhbHVlOwotICAgICAgICAgICAg
aWYgKCFKU09OOjpWYWx1ZTo6cGFyc2VKU09OKHZhbHVlU3RyaW5nLCByZXN1bHRWYWx1ZSkpIHsK
KworICAgICAgICAgICAgYXV0byByZXN1bHRWYWx1ZSA9IEpTT046OlZhbHVlOjpwYXJzZUpTT04o
dmFsdWVTdHJpbmcpOworICAgICAgICAgICAgaWYgKCFyZXN1bHRWYWx1ZSkgewogICAgICAgICAg
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3Vs
dDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgICAgICB9CisKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1
bHQ6OnN1Y2Nlc3MoV1RGTW92ZShyZXN1bHRWYWx1ZSkpKTsKICAgICAgICAgfSk7CiAgICAgfSk7
CkBAIC0xNDY4LDEwICsxNTQzLDEwIEBAIHZvaWQgU2Vzc2lvbjo6Z2V0RWxlbWVudENTU1ZhbHVl
KGNvbnN0IFN0cmluZyYgZWxlbWVudElELCBjb25zdCBTdHJpbmcmIGNzc1Byb3BlCiAgICAgICAg
ICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKHJlc3VsdCkpOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9Ci0gICAgICAgIFJlZlB0cjxKU09OOjpBcnJheT4gYXJndW1lbnRzID0g
SlNPTjo6QXJyYXk6OmNyZWF0ZSgpOworICAgICAgICBhdXRvIGFyZ3VtZW50cyA9IEpTT046OkFy
cmF5OjpjcmVhdGUoKTsKICAgICAgICAgYXJndW1lbnRzLT5wdXNoU3RyaW5nKGNyZWF0ZUVsZW1l
bnQoZWxlbWVudElEKS0+dG9KU09OU3RyaW5nKCkpOwogCi0gICAgICAgIFJlZlB0cjxKU09OOjpP
YmplY3Q+IHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBhdXRv
IHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICBwYXJhbWV0ZXJz
LT5zZXRTdHJpbmcoImJyb3dzaW5nQ29udGV4dEhhbmRsZSJfcywgbV90b3BsZXZlbEJyb3dzaW5n
Q29udGV4dC52YWx1ZSgpKTsKICAgICAgICAgaWYgKG1fY3VycmVudEJyb3dzaW5nQ29udGV4dCkK
ICAgICAgICAgICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiZnJhbWVIYW5kbGUiX3MsIG1fY3Vy
cmVudEJyb3dzaW5nQ29udGV4dC52YWx1ZSgpKTsKQEAgLTE0ODIsMTYgKzE1NTcsMTkgQEAgdm9p
ZCBTZXNzaW9uOjpnZXRFbGVtZW50Q1NTVmFsdWUoY29uc3QgU3RyaW5nJiBlbGVtZW50SUQsIGNv
bnN0IFN0cmluZyYgY3NzUHJvcGUKICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihD
b21tYW5kUmVzdWx0OjpmYWlsKFdURk1vdmUocmVzcG9uc2UucmVzcG9uc2VPYmplY3QpKSk7CiAg
ICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgU3RyaW5n
IHZhbHVlU3RyaW5nOwotICAgICAgICAgICAgaWYgKCFyZXNwb25zZS5yZXNwb25zZU9iamVjdC0+
Z2V0U3RyaW5nKCJyZXN1bHQiX3MsIHZhbHVlU3RyaW5nKSkgeworCisgICAgICAgICAgICBhdXRv
IHZhbHVlU3RyaW5nID0gcmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdldFN0cmluZygicmVzdWx0
Il9zKTsKKyAgICAgICAgICAgIGlmICghdmFsdWVTdHJpbmcpIHsKICAgICAgICAgICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9y
Q29kZTo6VW5rbm93bkVycm9yKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAg
ICAgfQotICAgICAgICAgICAgUmVmUHRyPEpTT046OlZhbHVlPiByZXN1bHRWYWx1ZTsKLSAgICAg
ICAgICAgIGlmICghSlNPTjo6VmFsdWU6OnBhcnNlSlNPTih2YWx1ZVN0cmluZywgcmVzdWx0VmFs
dWUpKSB7CisKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0VmFsdWUgPSBKU09OOjpWYWx1ZTo6cGFy
c2VKU09OKHZhbHVlU3RyaW5nKTsKKyAgICAgICAgICAgIGlmICghcmVzdWx0VmFsdWUpIHsKICAg
ICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1h
bmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVycm9yKSk7CiAgICAgICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21t
YW5kUmVzdWx0OjpzdWNjZXNzKFdURk1vdmUocmVzdWx0VmFsdWUpKSk7CiAgICAgICAgIH0pOwog
ICAgIH0pOwpAQCAtMTUwNCw3ICsxNTgyLDcgQEAgdm9pZCBTZXNzaW9uOjp3YWl0Rm9yTmF2aWdh
dGlvblRvQ29tcGxldGUoRnVuY3Rpb248dm9pZCAoQ29tbWFuZFJlc3VsdCYmKT4mJiBjb20KICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRl
cnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTT046
Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJicm93c2luZ0Nv
bnRleHRIYW5kbGUiX3MsIG1fdG9wbGV2ZWxCcm93c2luZ0NvbnRleHQudmFsdWUoKSk7CiAgICAg
aWYgKG1fY3VycmVudEJyb3dzaW5nQ29udGV4dCkKICAgICAgICAgcGFyYW1ldGVycy0+c2V0U3Ry
aW5nKCJmcmFtZUhhbmRsZSJfcywgbV9jdXJyZW50QnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwpA
QCAtMTUzNCw3ICsxNjEyLDcgQEAgdm9pZCBTZXNzaW9uOjp3YWl0Rm9yTmF2aWdhdGlvblRvQ29t
cGxldGUoRnVuY3Rpb248dm9pZCAoQ29tbWFuZFJlc3VsdCYmKT4mJiBjb20KIAogdm9pZCBTZXNz
aW9uOjplbGVtZW50SXNGaWxlVXBsb2FkKGNvbnN0IFN0cmluZyYgZWxlbWVudElELCBGdW5jdGlv
bjx2b2lkIChDb21tYW5kUmVzdWx0JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIFJl
ZlB0cjxKU09OOjpBcnJheT4gYXJndW1lbnRzID0gSlNPTjo6QXJyYXk6OmNyZWF0ZSgpOworICAg
IGF1dG8gYXJndW1lbnRzID0gSlNPTjo6QXJyYXk6OmNyZWF0ZSgpOwogICAgIGFyZ3VtZW50cy0+
cHVzaFN0cmluZyhjcmVhdGVFbGVtZW50KGVsZW1lbnRJRCktPnRvSlNPTlN0cmluZygpKTsKIAog
ICAgIHN0YXRpYyBjb25zdCBjaGFyIGlzRmlsZVVwbG9hZFNjcmlwdFtdID0KQEAgLTE1NDQsNyAr
MTYyMiw3IEBAIHZvaWQgU2Vzc2lvbjo6ZWxlbWVudElzRmlsZVVwbG9hZChjb25zdCBTdHJpbmcm
IGVsZW1lbnRJRCwgRnVuY3Rpb248dm9pZCAoQ29tbWFuCiAgICAgICAgICIgICAgcmV0dXJuIHsg
J2ZpbGVVcGxvYWQnOiBmYWxzZSB9OyIKICAgICAgICAgIn0iOwogCi0gICAgUmVmUHRyPEpTT046
Ok9iamVjdD4gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgYXV0byBw
YXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICBwYXJhbWV0ZXJzLT5zZXRT
dHJpbmcoImJyb3dzaW5nQ29udGV4dEhhbmRsZSJfcywgbV90b3BsZXZlbEJyb3dzaW5nQ29udGV4
dC52YWx1ZSgpKTsKICAgICBpZiAobV9jdXJyZW50QnJvd3NpbmdDb250ZXh0KQogICAgICAgICBw
YXJhbWV0ZXJzLT5zZXRTdHJpbmcoImZyYW1lSGFuZGxlIl9zLCBtX2N1cnJlbnRCcm93c2luZ0Nv
bnRleHQudmFsdWUoKSk7CkBAIC0xNTU1LDMyICsxNjMzLDM4IEBAIHZvaWQgU2Vzc2lvbjo6ZWxl
bWVudElzRmlsZVVwbG9hZChjb25zdCBTdHJpbmcmIGVsZW1lbnRJRCwgRnVuY3Rpb248dm9pZCAo
Q29tbWFuCiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWls
KFdURk1vdmUocmVzcG9uc2UucmVzcG9uc2VPYmplY3QpKSk7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KLSAgICAgICAgU3RyaW5nIHZhbHVlU3RyaW5nOwotICAgICAgICBpZiAoIXJl
c3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRTdHJpbmcoInJlc3VsdCJfcywgdmFsdWVTdHJpbmcp
KSB7CisKKyAgICAgICAgYXV0byB2YWx1ZVN0cmluZyA9IHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0
LT5nZXRTdHJpbmcoInJlc3VsdCJfcyk7CisgICAgICAgIGlmICghdmFsdWVTdHJpbmcpIHsKICAg
ICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJl
c3VsdDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQotICAgICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHJlc3VsdFZhbHVlOwotICAgICAg
ICBpZiAoIUpTT046OlZhbHVlOjpwYXJzZUpTT04odmFsdWVTdHJpbmcsIHJlc3VsdFZhbHVlKSkg
eworCisgICAgICAgIGF1dG8gcmVzdWx0VmFsdWUgPSBKU09OOjpWYWx1ZTo6cGFyc2VKU09OKHZh
bHVlU3RyaW5nKTsKKyAgICAgICAgaWYgKCFyZXN1bHRWYWx1ZSkgewogICAgICAgICAgICAgY29t
cGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNv
ZGU6OlVua25vd25FcnJvcikpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CisKICAg
ICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6c3VjY2VzcyhXVEZNb3ZlKHJl
c3VsdFZhbHVlKSkpOwogICAgIH0pOwogfQogCiBPcHRpb25hbDxTZXNzaW9uOjpGaWxlVXBsb2Fk
VHlwZT4gU2Vzc2lvbjo6cGFyc2VFbGVtZW50SXNGaWxlVXBsb2FkUmVzdWx0KGNvbnN0IFJlZlB0
cjxKU09OOjpWYWx1ZT4mIHJlc3VsdFZhbHVlKQogewotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+
IHJlc3VsdDsKLSAgICBpZiAoIXJlc3VsdFZhbHVlLT5hc09iamVjdChyZXN1bHQpKQorICAgIGlm
ICghcmVzdWx0VmFsdWUpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBib29s
IGlzRmlsZVVwbG9hZDsKLSAgICBpZiAoIXJlc3VsdC0+Z2V0Qm9vbGVhbigiZmlsZVVwbG9hZCJf
cywgaXNGaWxlVXBsb2FkKSB8fCAhaXNGaWxlVXBsb2FkKQorICAgIGF1dG8gcmVzdWx0ID0gcmVz
dWx0VmFsdWUtPmFzT2JqZWN0KCk7CisgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CiAKLSAgICBib29sIG11bHRpcGxlOwotICAgIGlmICghcmVzdWx0LT5nZXRC
b29sZWFuKCJtdWx0aXBsZSJfcywgbXVsdGlwbGUpIHx8ICFtdWx0aXBsZSkKKyAgICBhdXRvIGlz
RmlsZVVwbG9hZCA9IHJlc3VsdC0+Z2V0Qm9vbGVhbigiZmlsZVVwbG9hZCJfcyk7CisgICAgaWYg
KCFpc0ZpbGVVcGxvYWQgfHwgISppc0ZpbGVVcGxvYWQpCisgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CisKKyAgICBhdXRvIG11bHRpcGxlID0gcmVzdWx0LT5nZXRCb29sZWFuKCJtdWx0aXBs
ZSJfcyk7CisgICAgaWYgKCFtdWx0aXBsZSB8fCAhKm11bHRpcGxlKQogICAgICAgICByZXR1cm4g
RmlsZVVwbG9hZFR5cGU6OlNpbmdsZTsKIAogICAgIHJldHVybiBGaWxlVXBsb2FkVHlwZTo6TXVs
dGlwbGU7CkBAIC0xNTg4LDcgKzE2NzIsNyBAQCBPcHRpb25hbDxTZXNzaW9uOjpGaWxlVXBsb2Fk
VHlwZT4gU2Vzc2lvbjo6cGFyc2VFbGVtZW50SXNGaWxlVXBsb2FkUmVzdWx0KGNvbnN0CiAKIHZv
aWQgU2Vzc2lvbjo6c2VsZWN0T3B0aW9uRWxlbWVudChjb25zdCBTdHJpbmcmIGVsZW1lbnRJRCwg
RnVuY3Rpb248dm9pZCAoQ29tbWFuZFJlc3VsdCYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsK
LSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVh
dGUoKTsKKyAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAg
IHBhcmFtZXRlcnMtPnNldFN0cmluZygiYnJvd3NpbmdDb250ZXh0SGFuZGxlIl9zLCBtX3RvcGxl
dmVsQnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwogICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygi
ZnJhbWVIYW5kbGUiX3MsIG1fY3VycmVudEJyb3dzaW5nQ29udGV4dC52YWx1ZU9yKGVtcHR5U3Ry
aW5nKCkpKTsKICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoIm5vZGVIYW5kbGUiX3MsIGVsZW1l
bnRJRCk7CkBAIC0xNjQxLDggKzE3MjUsOCBAQCB2b2lkIFNlc3Npb246OmVsZW1lbnRDbGljayhj
b25zdCBTdHJpbmcmIGVsZW1lbnRJRCwgRnVuY3Rpb248dm9pZCAoQ29tbWFuZFJlc3VsdAogICAg
ICAgICAgICAgICAgIGdldEVsZW1lbnRUYWdOYW1lKGVsZW1lbnRJRCwgW3RoaXMsIGVsZW1lbnRJ
RCwgaW5WaWV3Q2VudGVyID0gV1RGTW92ZShpblZpZXdDZW50ZXIpLCBjb21wbGV0aW9uSGFuZGxl
ciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXShDb21tYW5kUmVzdWx0JiYgcmVzdWx0KSBt
dXRhYmxlIHsKICAgICAgICAgICAgICAgICAgICAgYm9vbCBpc09wdGlvbkVsZW1lbnQgPSBmYWxz
ZTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQuaXNFcnJvcigpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBTdHJpbmcgdGFnTmFtZTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChyZXN1bHQucmVzdWx0KCktPmFzU3RyaW5nKHRhZ05hbWUpKQorICAgICAgICAgICAgICAg
ICAgICAgICAgYXV0byB0YWdOYW1lID0gcmVzdWx0LnJlc3VsdCgpLT5hc1N0cmluZygpOworICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCEhdGFnTmFtZSkKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpc09wdGlvbkVsZW1lbnQgPSB0YWdOYW1lID09ICJvcHRpb24iOwogICAgICAgICAg
ICAgICAgICAgICB9CiAKQEAgLTE2NjYsNyArMTc1MCw3IEBAIHZvaWQgU2Vzc2lvbjo6ZWxlbWVu
dENsaWNrKGNvbnN0IFN0cmluZyYgZWxlbWVudElELCBGdW5jdGlvbjx2b2lkIChDb21tYW5kUmVz
dWx0CiAKIHZvaWQgU2Vzc2lvbjo6ZWxlbWVudElzRWRpdGFibGUoY29uc3QgU3RyaW5nJiBlbGVt
ZW50SUQsIEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSZXN1bHQmJik+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCiB7Ci0gICAgUmVmUHRyPEpTT046OkFycmF5PiBhcmd1bWVudHMgPSBKU09OOjpBcnJheTo6
Y3JlYXRlKCk7CisgICAgYXV0byBhcmd1bWVudHMgPSBKU09OOjpBcnJheTo6Y3JlYXRlKCk7CiAg
ICAgYXJndW1lbnRzLT5wdXNoU3RyaW5nKGNyZWF0ZUVsZW1lbnQoZWxlbWVudElEKS0+dG9KU09O
U3RyaW5nKCkpOwogCiAgICAgc3RhdGljIGNvbnN0IGNoYXIgaXNFZGl0YWJsZVNjcmlwdFtdID0K
QEAgLTE2ODYsNyArMTc3MCw3IEBAIHZvaWQgU2Vzc2lvbjo6ZWxlbWVudElzRWRpdGFibGUoY29u
c3QgU3RyaW5nJiBlbGVtZW50SUQsIEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSCiAgICAgICAgICIg
ICAgcmV0dXJuIGZhbHNlOyIKICAgICAgICAgIn0iOwogCi0gICAgUmVmUHRyPEpTT046Ok9iamVj
dD4gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgYXV0byBwYXJhbWV0
ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmco
ImJyb3dzaW5nQ29udGV4dEhhbmRsZSJfcywgbV90b3BsZXZlbEJyb3dzaW5nQ29udGV4dC52YWx1
ZSgpKTsKICAgICBpZiAobV9jdXJyZW50QnJvd3NpbmdDb250ZXh0KQogICAgICAgICBwYXJhbWV0
ZXJzLT5zZXRTdHJpbmcoImZyYW1lSGFuZGxlIl9zLCBtX2N1cnJlbnRCcm93c2luZ0NvbnRleHQu
dmFsdWUoKSk7CkBAIC0xNjk3LDE2ICsxNzgxLDE5IEBAIHZvaWQgU2Vzc2lvbjo6ZWxlbWVudElz
RWRpdGFibGUoY29uc3QgU3RyaW5nJiBlbGVtZW50SUQsIEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRS
CiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKFdURk1v
dmUocmVzcG9uc2UucmVzcG9uc2VPYmplY3QpKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KLSAgICAgICAgU3RyaW5nIHZhbHVlU3RyaW5nOwotICAgICAgICBpZiAoIXJlc3BvbnNl
LnJlc3BvbnNlT2JqZWN0LT5nZXRTdHJpbmcoInJlc3VsdCJfcywgdmFsdWVTdHJpbmcpKSB7CisK
KyAgICAgICAgYXV0byB2YWx1ZVN0cmluZyA9IHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRT
dHJpbmcoInJlc3VsdCJfcyk7CisgICAgICAgIGlmICghdmFsdWVTdHJpbmcpIHsKICAgICAgICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6
RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQotICAgICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHJlc3VsdFZhbHVlOwotICAgICAgICBpZiAo
IUpTT046OlZhbHVlOjpwYXJzZUpTT04odmFsdWVTdHJpbmcsIHJlc3VsdFZhbHVlKSkgeworCisg
ICAgICAgIGF1dG8gcmVzdWx0VmFsdWUgPSBKU09OOjpWYWx1ZTo6cGFyc2VKU09OKHZhbHVlU3Ry
aW5nKTsKKyAgICAgICAgaWYgKCFyZXN1bHRWYWx1ZSkgewogICAgICAgICAgICAgY29tcGxldGlv
bkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OlVu
a25vd25FcnJvcikpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CisKICAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6c3VjY2VzcyhXVEZNb3ZlKHJlc3VsdFZh
bHVlKSkpOwogICAgIH0pOwogfQpAQCAtMTczMCw4ICsxODE3LDggQEAgdm9pZCBTZXNzaW9uOjpl
bGVtZW50Q2xlYXIoY29uc3QgU3RyaW5nJiBlbGVtZW50SUQsIEZ1bmN0aW9uPHZvaWQgKENvbW1h
bmRSZXN1bHQKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAKLSAgICAg
ICAgICAgIGJvb2wgaXNFZGl0YWJsZTsKLSAgICAgICAgICAgIGlmICghcmVzdWx0LnJlc3VsdCgp
LT5hc0Jvb2xlYW4oaXNFZGl0YWJsZSkgfHwgIWlzRWRpdGFibGUpIHsKKyAgICAgICAgICAgIGF1
dG8gaXNFZGl0YWJsZSA9IHJlc3VsdC5yZXN1bHQoKS0+YXNCb29sZWFuKCk7CisgICAgICAgICAg
ICBpZiAoIWlzRWRpdGFibGUgfHwgISppc0VkaXRhYmxlKSB7CiAgICAgICAgICAgICAgICAgY29t
cGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNv
ZGU6OkludmFsaWRFbGVtZW50U3RhdGUpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgICAgICB9CkBAIC0xNzQ2LDEwICsxODMzLDEwIEBAIHZvaWQgU2Vzc2lvbjo6ZWxlbWVudENs
ZWFyKGNvbnN0IFN0cmluZyYgZWxlbWVudElELCBGdW5jdGlvbjx2b2lkIChDb21tYW5kUmVzdWx0
CiAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZh
aWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpFbGVtZW50Tm90SW50ZXJhY3RhYmxlKSk7CiAg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgUmVmUHRyPEpTT046OkFycmF5PiBhcmd1bWVudHMgPSBKU09OOjpBcnJheTo6Y3JlYXRl
KCk7CisgICAgICAgICAgICAgICAgYXV0byBhcmd1bWVudHMgPSBKU09OOjpBcnJheTo6Y3JlYXRl
KCk7CiAgICAgICAgICAgICAgICAgYXJndW1lbnRzLT5wdXNoU3RyaW5nKGNyZWF0ZUVsZW1lbnQo
ZWxlbWVudElEKS0+dG9KU09OU3RyaW5nKCkpOwogCi0gICAgICAgICAgICAgICAgUmVmUHRyPEpT
T046Ok9iamVjdD4gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAg
ICAgICAgICAgYXV0byBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICAg
ICAgICAgICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoImJyb3dzaW5nQ29udGV4dEhhbmRsZSJf
cywgbV90b3BsZXZlbEJyb3dzaW5nQ29udGV4dC52YWx1ZSgpKTsKICAgICAgICAgICAgICAgICBp
ZiAobV9jdXJyZW50QnJvd3NpbmdDb250ZXh0KQogICAgICAgICAgICAgICAgICAgICBwYXJhbWV0
ZXJzLT5zZXRTdHJpbmcoImZyYW1lSGFuZGxlIl9zLCBtX2N1cnJlbnRCcm93c2luZ0NvbnRleHQu
dmFsdWUoKSk7CkBAIC0xNzgwLDcgKzE4NjcsNyBAQCB2b2lkIFNlc3Npb246OnNldElucHV0Rmls
ZVVwbG9hZEZpbGVzKGNvbnN0IFN0cmluZyYgZWxlbWVudElELCBjb25zdCBTdHJpbmcmIHRleAog
ICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgUmVmUHRyPEpTT046OkFycmF5PiBmaWxlbmFt
ZXMgPSBKU09OOjpBcnJheTo6Y3JlYXRlKCk7CisgICAgYXV0byBmaWxlbmFtZXMgPSBKU09OOjpB
cnJheTo6Y3JlYXRlKCk7CiAgICAgZm9yIChjb25zdCBhdXRvJiBmaWxlIDogZmlsZXMpIHsKICAg
ICAgICAgaWYgKCFGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKGZpbGUpKSB7CiAgICAgICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9y
Q29kZTo6SW52YWxpZEFyZ3VtZW50KSk7CkBAIC0xNzg5LDcgKzE4NzYsNyBAQCB2b2lkIFNlc3Np
b246OnNldElucHV0RmlsZVVwbG9hZEZpbGVzKGNvbnN0IFN0cmluZyYgZWxlbWVudElELCBjb25z
dCBTdHJpbmcmIHRleAogICAgICAgICBmaWxlbmFtZXMtPnB1c2hTdHJpbmcoZmlsZSk7CiAgICAg
fQogCi0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6
Y3JlYXRlKCk7CisgICAgYXV0byBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsK
ICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoImJyb3dzaW5nQ29udGV4dEhhbmRsZSJfcywgbV90
b3BsZXZlbEJyb3dzaW5nQ29udGV4dC52YWx1ZSgpKTsKICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJp
bmcoImZyYW1lSGFuZGxlIl9zLCBtX2N1cnJlbnRCcm93c2luZ0NvbnRleHQudmFsdWVPcihlbXB0
eVN0cmluZygpKSk7CiAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJub2RlSGFuZGxlIl9zLCBl
bGVtZW50SUQpOwpAQCAtMTk4MCw5ICsyMDY3LDkgQEAgdm9pZCBTZXNzaW9uOjplbGVtZW50U2Vu
ZEtleXMoY29uc3QgU3RyaW5nJiBlbGVtZW50SUQsIGNvbnN0IFN0cmluZyYgdGV4dCwgRnVuY3QK
ICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgdGhyb3cge25hbWU6ICdFbGVtZW50Tm90SW50
ZXJhY3RhYmxlJywgbWVzc2FnZTogJ0VsZW1lbnQgaXMgbm90IGZvY3VzYWJsZS4nfTsiCiAgICAg
ICAgICAgICAgICAgICAgICJ9IjsKIAotICAgICAgICAgICAgICAgIFJlZlB0cjxKU09OOjpBcnJh
eT4gYXJndW1lbnRzID0gSlNPTjo6QXJyYXk6OmNyZWF0ZSgpOworICAgICAgICAgICAgICAgIGF1
dG8gYXJndW1lbnRzID0gSlNPTjo6QXJyYXk6OmNyZWF0ZSgpOwogICAgICAgICAgICAgICAgIGFy
Z3VtZW50cy0+cHVzaFN0cmluZyhjcmVhdGVFbGVtZW50KGVsZW1lbnRJRCktPnRvSlNPTlN0cmlu
ZygpKTsKLSAgICAgICAgICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzID0g
SlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgICAgICAgICBhdXRvIHBhcmFtZXRlcnMg
PSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMtPnNl
dFN0cmluZygiYnJvd3NpbmdDb250ZXh0SGFuZGxlIl9zLCBtX3RvcGxldmVsQnJvd3NpbmdDb250
ZXh0LnZhbHVlKCkpOwogICAgICAgICAgICAgICAgIGlmIChtX2N1cnJlbnRCcm93c2luZ0NvbnRl
eHQpCiAgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiZnJhbWVIYW5k
bGUiX3MsIG1fY3VycmVudEJyb3dzaW5nQ29udGV4dC52YWx1ZSgpKTsKQEAgLTIwNTYsNyArMjE0
Myw3IEBAIHZvaWQgU2Vzc2lvbjo6Z2V0UGFnZVNvdXJjZShGdW5jdGlvbjx2b2lkIChDb21tYW5k
UmVzdWx0JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyCiAgICAgICAgICAgICBjb21wbGV0aW9uSGFu
ZGxlcihXVEZNb3ZlKHJlc3VsdCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0g
ICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNy
ZWF0ZSgpOworICAgICAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgp
OwogICAgICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoImJyb3dzaW5nQ29udGV4dEhhbmRsZSJf
cywgbV90b3BsZXZlbEJyb3dzaW5nQ29udGV4dC52YWx1ZSgpKTsKICAgICAgICAgcGFyYW1ldGVy
cy0+c2V0U3RyaW5nKCJmdW5jdGlvbiJfcywgImZ1bmN0aW9uKCkgeyByZXR1cm4gZG9jdW1lbnQu
ZG9jdW1lbnRFbGVtZW50Lm91dGVySFRNTDsgfSJfcyk7CiAgICAgICAgIHBhcmFtZXRlcnMtPnNl
dEFycmF5KCJhcmd1bWVudHMiX3MsIEpTT046OkFycmF5OjpjcmVhdGUoKSk7CkBAIC0yMDY1LDM4
ICsyMTUyLDM5IEBAIHZvaWQgU2Vzc2lvbjo6Z2V0UGFnZVNvdXJjZShGdW5jdGlvbjx2b2lkIChD
b21tYW5kUmVzdWx0JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyCiAgICAgICAgICAgICAgICAgY29t
cGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChXVEZNb3ZlKHJlc3BvbnNlLnJlc3Bv
bnNlT2JqZWN0KSkpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIFN0cmluZyB2YWx1ZVN0cmluZzsKLSAgICAgICAgICAgIGlmICghcmVzcG9uc2Uu
cmVzcG9uc2VPYmplY3QtPmdldFN0cmluZygicmVzdWx0Il9zLCB2YWx1ZVN0cmluZykpIHsKKwor
ICAgICAgICAgICAgYXV0byB2YWx1ZVN0cmluZyA9IHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5n
ZXRTdHJpbmcoInJlc3VsdCJfcyk7CisgICAgICAgICAgICBpZiAoIXZhbHVlU3RyaW5nKSB7CiAg
ICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21t
YW5kUmVzdWx0OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikpOwogICAgICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gcmVz
dWx0VmFsdWU7Ci0gICAgICAgICAgICBpZiAoIUpTT046OlZhbHVlOjpwYXJzZUpTT04odmFsdWVT
dHJpbmcsIHJlc3VsdFZhbHVlKSkgeworCisgICAgICAgICAgICBhdXRvIHJlc3VsdFZhbHVlID0g
SlNPTjo6VmFsdWU6OnBhcnNlSlNPTih2YWx1ZVN0cmluZyk7CisgICAgICAgICAgICBpZiAoIXJl
c3VsdFZhbHVlKSB7CiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJl
c3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikpOwogICAg
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgY29tcGxl
dGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6c3VjY2VzcyhXVEZNb3ZlKHJlc3VsdFZhbHVlKSkp
OwogICAgICAgICB9KTsKICAgICB9KTsKIH0KIAotUmVmUHRyPEpTT046OlZhbHVlPiBTZXNzaW9u
OjpoYW5kbGVTY3JpcHRSZXN1bHQoUmVmUHRyPEpTT046OlZhbHVlPiYmIHJlc3VsdFZhbHVlKQor
UmVmPEpTT046OlZhbHVlPiBTZXNzaW9uOjpoYW5kbGVTY3JpcHRSZXN1bHQoUmVmPEpTT046OlZh
bHVlPiYmIHJlc3VsdFZhbHVlKQogewotICAgIFJlZlB0cjxKU09OOjpBcnJheT4gcmVzdWx0QXJy
YXk7Ci0gICAgaWYgKHJlc3VsdFZhbHVlLT5hc0FycmF5KHJlc3VsdEFycmF5KSkgewotICAgICAg
ICBSZWZQdHI8SlNPTjo6QXJyYXk+IHJldHVyblZhbHVlQXJyYXkgPSBKU09OOjpBcnJheTo6Y3Jl
YXRlKCk7CisgICAgaWYgKGF1dG8gcmVzdWx0QXJyYXkgPSByZXN1bHRWYWx1ZS0+YXNBcnJheSgp
KSB7CisgICAgICAgIGF1dG8gcmV0dXJuVmFsdWVBcnJheSA9IEpTT046OkFycmF5OjpjcmVhdGUo
KTsKICAgICAgICAgdW5zaWduZWQgcmVzdWx0QXJyYXlMZW5ndGggPSByZXN1bHRBcnJheS0+bGVu
Z3RoKCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZXN1bHRBcnJheUxlbmd0
aDsgKytpKQotICAgICAgICAgICAgcmV0dXJuVmFsdWVBcnJheS0+cHVzaFZhbHVlKGhhbmRsZVNj
cmlwdFJlc3VsdChyZXN1bHRBcnJheS0+Z2V0KGkpKSk7CisgICAgICAgICAgICByZXR1cm5WYWx1
ZUFycmF5LT5wdXNoVmFsdWUoaGFuZGxlU2NyaXB0UmVzdWx0KFdURk1vdmUocmVzdWx0QXJyYXkt
PmdldChpKSkpKTsKICAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlQXJyYXk7CiAgICAgfQogCiAg
ICAgaWYgKGF1dG8gZWxlbWVudCA9IGNyZWF0ZUVsZW1lbnQoUmVmUHRyPEpTT046OlZhbHVlPihy
ZXN1bHRWYWx1ZSkpKQotICAgICAgICByZXR1cm4gZWxlbWVudDsKKyAgICAgICAgcmV0dXJuIGVs
ZW1lbnQucmVsZWFzZU5vbk51bGwoKTsKIAotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHJlc3Vs
dE9iamVjdDsKLSAgICBpZiAocmVzdWx0VmFsdWUtPmFzT2JqZWN0KHJlc3VsdE9iamVjdCkpIHsK
LSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcmV0dXJuVmFsdWVPYmplY3QgPSBKU09OOjpP
YmplY3Q6OmNyZWF0ZSgpOworICAgIGlmIChhdXRvIHJlc3VsdE9iamVjdCA9IHJlc3VsdFZhbHVl
LT5hc09iamVjdCgpKSB7CisgICAgICAgIGF1dG8gcmV0dXJuVmFsdWVPYmplY3QgPSBKU09OOjpP
YmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICBhdXRvIGVuZCA9IHJlc3VsdE9iamVjdC0+ZW5kKCk7
CiAgICAgICAgIGZvciAoYXV0byBpdCA9IHJlc3VsdE9iamVjdC0+YmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KQogICAgICAgICAgICAgcmV0dXJuVmFsdWVPYmplY3QtPnNldFZhbHVlKGl0LT5rZXks
IGhhbmRsZVNjcmlwdFJlc3VsdChXVEZNb3ZlKGl0LT52YWx1ZSkpKTsKQEAgLTIxMTgsMTggKzIy
MDYsMTcgQEAgdm9pZCBTZXNzaW9uOjpleGVjdXRlU2NyaXB0KGNvbnN0IFN0cmluZyYgc2NyaXB0
LCBSZWZQdHI8SlNPTjo6QXJyYXk+JiYgYXJndW1lbnQKICAgICAgICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKFdURk1vdmUocmVzdWx0KSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
LSAgICAgICAgUmVmUHRyPEpTT046OkFycmF5PiBhcmd1bWVudHMgPSBKU09OOjpBcnJheTo6Y3Jl
YXRlKCk7CisgICAgICAgIGF1dG8gYXJndW1lbnRzID0gSlNPTjo6QXJyYXk6OmNyZWF0ZSgpOwog
ICAgICAgICB1bnNpZ25lZCBhcmd1bWVudHNMZW5ndGggPSBhcmd1bWVudHNBcnJheS0+bGVuZ3Ro
KCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhcmd1bWVudHNMZW5ndGg7ICsr
aSkgewotICAgICAgICAgICAgaWYgKGF1dG8gYXJndW1lbnQgPSBhcmd1bWVudHNBcnJheS0+Z2V0
KGkpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGF1dG8gZWxlbWVudCA9IGV4dHJhY3RFbGVtZW50
KCphcmd1bWVudCkpCi0gICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50cy0+cHVzaFN0cmluZyhl
bGVtZW50LT50b0pTT05TdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgICAgICBhcmd1bWVudHMtPnB1c2hTdHJpbmcoYXJndW1lbnQtPnRvSlNPTlN0cmluZygp
KTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGF1dG8gYXJndW1lbnQgPSBhcmd1bWVudHNB
cnJheS0+Z2V0KGkpOworICAgICAgICAgICAgaWYgKGF1dG8gZWxlbWVudCA9IGV4dHJhY3RFbGVt
ZW50KGFyZ3VtZW50KSkKKyAgICAgICAgICAgICAgICBhcmd1bWVudHMtPnB1c2hTdHJpbmcoZWxl
bWVudC0+dG9KU09OU3RyaW5nKCkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IGFyZ3VtZW50cy0+cHVzaFN0cmluZyhhcmd1bWVudC0+dG9KU09OU3RyaW5nKCkpOwogICAgICAg
ICB9CiAKLSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVycyA9IEpTT046Ok9i
amVjdDo6Y3JlYXRlKCk7CisgICAgICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6
Y3JlYXRlKCk7CiAgICAgICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiYnJvd3NpbmdDb250ZXh0
SGFuZGxlIl9zLCBtX3RvcGxldmVsQnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwogICAgICAgICBp
ZiAobV9jdXJyZW50QnJvd3NpbmdDb250ZXh0KQogICAgICAgICAgICAgcGFyYW1ldGVycy0+c2V0
U3RyaW5nKCJmcmFtZUhhbmRsZSJfcywgbV9jdXJyZW50QnJvd3NpbmdDb250ZXh0LnZhbHVlKCkp
OwpAQCAtMjE0OCwxNiArMjIzNSwxOSBAQCB2b2lkIFNlc3Npb246OmV4ZWN1dGVTY3JpcHQoY29u
c3QgU3RyaW5nJiBzY3JpcHQsIFJlZlB0cjxKU09OOjpBcnJheT4mJiBhcmd1bWVudAogICAgICAg
ICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKHJlc3VsdCkpOwogICAgICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFN0cmluZyB2YWx1
ZVN0cmluZzsKLSAgICAgICAgICAgIGlmICghcmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdldFN0
cmluZygicmVzdWx0Il9zLCB2YWx1ZVN0cmluZykpIHsKKworICAgICAgICAgICAgYXV0byB2YWx1
ZVN0cmluZyA9IHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRTdHJpbmcoInJlc3VsdCJfcyk7
CisgICAgICAgICAgICBpZiAoIXZhbHVlU3RyaW5nKSB7CiAgICAgICAgICAgICAgICAgY29tcGxl
dGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6
OlVua25vd25FcnJvcikpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gcmVzdWx0VmFsdWU7Ci0gICAgICAgICAg
ICBpZiAoIUpTT046OlZhbHVlOjpwYXJzZUpTT04odmFsdWVTdHJpbmcsIHJlc3VsdFZhbHVlKSkg
eworCisgICAgICAgICAgICBhdXRvIHJlc3VsdFZhbHVlID0gSlNPTjo6VmFsdWU6OnBhcnNlSlNP
Tih2YWx1ZVN0cmluZyk7CisgICAgICAgICAgICBpZiAoIXJlc3VsdFZhbHVlKSB7CiAgICAgICAg
ICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVz
dWx0OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikpOwogICAgICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJl
c3VsdDo6c3VjY2VzcyhoYW5kbGVTY3JpcHRSZXN1bHQoV1RGTW92ZShyZXN1bHRWYWx1ZSkpKSk7
CiAgICAgICAgIH0pOwogICAgIH0pOwpAQCAtMjE4MSw5ICsyMjcxLDkgQEAgc3RhdGljIFN0cmlu
ZyBtb3VzZUJ1dHRvbkZvckF1dG9tYXRpb24oTW91c2VCdXR0b24gYnV0dG9uKQogCiB2b2lkIFNl
c3Npb246OnBlcmZvcm1Nb3VzZUludGVyYWN0aW9uKGludCB4LCBpbnQgeSwgTW91c2VCdXR0b24g
YnV0dG9uLCBNb3VzZUludGVyYWN0aW9uIGludGVyYWN0aW9uLCBGdW5jdGlvbjx2b2lkIChDb21t
YW5kUmVzdWx0JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIFJlZlB0cjxKU09OOjpP
YmplY3Q+IHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGF1dG8gcGFy
YW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgcGFyYW1ldGVycy0+c2V0U3Ry
aW5nKCJoYW5kbGUiX3MsIG1fdG9wbGV2ZWxCcm93c2luZ0NvbnRleHQudmFsdWUoKSk7Ci0gICAg
UmVmUHRyPEpTT046Ok9iamVjdD4gcG9zaXRpb24gPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwor
ICAgIGF1dG8gcG9zaXRpb24gPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgIHBvc2l0aW9u
LT5zZXRJbnRlZ2VyKCJ4Il9zLCB4KTsKICAgICBwb3NpdGlvbi0+c2V0SW50ZWdlcigieSJfcywg
eSk7CiAgICAgcGFyYW1ldGVycy0+c2V0T2JqZWN0KCJwb3NpdGlvbiJfcywgV1RGTW92ZShwb3Np
dGlvbikpOwpAQCAtMjIxNywxMSArMjMwNywxMSBAQCB2b2lkIFNlc3Npb246OnBlcmZvcm1Nb3Vz
ZUludGVyYWN0aW9uKGludCB4LCBpbnQgeSwgTW91c2VCdXR0b24gYnV0dG9uLCBNb3VzZUludAog
CiB2b2lkIFNlc3Npb246OnBlcmZvcm1LZXlib2FyZEludGVyYWN0aW9ucyhWZWN0b3I8S2V5Ym9h
cmRJbnRlcmFjdGlvbj4mJiBpbnRlcmFjdGlvbnMsIEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSZXN1
bHQmJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4g
cGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgYXV0byBwYXJhbWV0ZXJz
ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoImhh
bmRsZSJfcywgbV90b3BsZXZlbEJyb3dzaW5nQ29udGV4dC52YWx1ZSgpKTsKLSAgICBSZWZQdHI8
SlNPTjo6QXJyYXk+IGludGVyYWN0aW9uc0FycmF5ID0gSlNPTjo6QXJyYXk6OmNyZWF0ZSgpOwor
ICAgIGF1dG8gaW50ZXJhY3Rpb25zQXJyYXkgPSBKU09OOjpBcnJheTo6Y3JlYXRlKCk7CiAgICAg
Zm9yIChjb25zdCBhdXRvJiBpbnRlcmFjdGlvbiA6IGludGVyYWN0aW9ucykgewotICAgICAgICBS
ZWZQdHI8SlNPTjo6T2JqZWN0PiBpbnRlcmFjdGlvbk9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3Jl
YXRlKCk7CisgICAgICAgIGF1dG8gaW50ZXJhY3Rpb25PYmplY3QgPSBKU09OOjpPYmplY3Q6OmNy
ZWF0ZSgpOwogICAgICAgICBzd2l0Y2ggKGludGVyYWN0aW9uLnR5cGUpIHsKICAgICAgICAgY2Fz
ZSBLZXlib2FyZEludGVyYWN0aW9uVHlwZTo6S2V5UHJlc3M6CiAgICAgICAgICAgICBpbnRlcmFj
dGlvbk9iamVjdC0+c2V0U3RyaW5nKCJ0eXBlIl9zLCAiS2V5UHJlc3MiX3MpOwpAQCAtMjI1Miwz
NyArMjM0Miw0MyBAQCB2b2lkIFNlc3Npb246OnBlcmZvcm1LZXlib2FyZEludGVyYWN0aW9ucyhW
ZWN0b3I8S2V5Ym9hcmRJbnRlcmFjdGlvbj4mJiBpbnRlcmFjdAogc3RhdGljIE9wdGlvbmFsPFNl
c3Npb246OkNvb2tpZT4gcGFyc2VBdXRvbWF0aW9uQ29va2llKGNvbnN0IEpTT046Ok9iamVjdCYg
Y29va2llT2JqZWN0KQogewogICAgIFNlc3Npb246OkNvb2tpZSBjb29raWU7Ci0gICAgaWYgKCFj
b29raWVPYmplY3QuZ2V0U3RyaW5nKCJuYW1lIl9zLCBjb29raWUubmFtZSkpCi0gICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgaWYgKCFjb29raWVPYmplY3QuZ2V0U3RyaW5nKCJ2YWx1
ZSJfcywgY29va2llLnZhbHVlKSkKKworICAgIGNvb2tpZS5uYW1lID0gY29va2llT2JqZWN0Lmdl
dFN0cmluZygibmFtZSJfcyk7CisgICAgaWYgKCFjb29raWUubmFtZSkKICAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKIAotICAgIFN0cmluZyBwYXRoOwotICAgIGlmIChjb29raWVPYmplY3Qu
Z2V0U3RyaW5nKCJwYXRoIl9zLCBwYXRoKSkKKyAgICBjb29raWUudmFsdWUgPSBjb29raWVPYmpl
Y3QuZ2V0U3RyaW5nKCJ2YWx1ZSJfcyk7CisgICAgaWYgKCFjb29raWUudmFsdWUpCisgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBhdXRvIHBhdGggPSBjb29raWVPYmplY3QuZ2V0
U3RyaW5nKCJwYXRoIl9zKTsKKyAgICBpZiAoISFwYXRoKQogICAgICAgICBjb29raWUucGF0aCA9
IHBhdGg7Ci0gICAgU3RyaW5nIGRvbWFpbjsKLSAgICBpZiAoY29va2llT2JqZWN0LmdldFN0cmlu
ZygiZG9tYWluIl9zLCBkb21haW4pKQorCisgICAgYXV0byBkb21haW4gPSBjb29raWVPYmplY3Qu
Z2V0U3RyaW5nKCJkb21haW4iX3MpOworICAgIGlmICghIWRvbWFpbikKICAgICAgICAgY29va2ll
LmRvbWFpbiA9IGRvbWFpbjsKLSAgICBib29sIHNlY3VyZTsKLSAgICBpZiAoY29va2llT2JqZWN0
LmdldEJvb2xlYW4oInNlY3VyZSJfcywgc2VjdXJlKSkKLSAgICAgICAgY29va2llLnNlY3VyZSA9
IHNlY3VyZTsKLSAgICBib29sIGh0dHBPbmx5OwotICAgIGlmIChjb29raWVPYmplY3QuZ2V0Qm9v
bGVhbigiaHR0cE9ubHkiX3MsIGh0dHBPbmx5KSkKLSAgICAgICAgY29va2llLmh0dHBPbmx5ID0g
aHR0cE9ubHk7Ci0gICAgYm9vbCBzZXNzaW9uID0gZmFsc2U7Ci0gICAgY29va2llT2JqZWN0Lmdl
dEJvb2xlYW4oInNlc3Npb24iX3MsIHNlc3Npb24pOworCisgICAgYXV0byBzZWN1cmUgPSBjb29r
aWVPYmplY3QuZ2V0Qm9vbGVhbigic2VjdXJlIl9zKTsKKyAgICBpZiAoc2VjdXJlKQorICAgICAg
ICBjb29raWUuc2VjdXJlID0gKnNlY3VyZTsKKworICAgIGF1dG8gaHR0cE9ubHkgPSBjb29raWVP
YmplY3QuZ2V0Qm9vbGVhbigiaHR0cE9ubHkiX3MpOworICAgIGlmIChodHRwT25seSkKKyAgICAg
ICAgY29va2llLmh0dHBPbmx5ID0gKmh0dHBPbmx5OworCisgICAgYXV0byBzZXNzaW9uID0gY29v
a2llT2JqZWN0LmdldEJvb2xlYW4oInNlc3Npb24iX3MpOwogICAgIGlmICghc2Vzc2lvbikgewot
ICAgICAgICBkb3VibGUgZXhwaXJ5OwotICAgICAgICBpZiAoY29va2llT2JqZWN0LmdldERvdWJs
ZSgiZXhwaXJlcyJfcywgZXhwaXJ5KSkKLSAgICAgICAgICAgIGNvb2tpZS5leHBpcnkgPSBleHBp
cnk7CisgICAgICAgIGlmIChhdXRvIGV4cGlyeSA9IGNvb2tpZU9iamVjdC5nZXREb3VibGUoImV4
cGlyZXMiX3MpKQorICAgICAgICAgICAgY29va2llLmV4cGlyeSA9ICpleHBpcnk7CiAgICAgfQog
CiAgICAgcmV0dXJuIGNvb2tpZTsKIH0KIAotc3RhdGljIFJlZlB0cjxKU09OOjpPYmplY3Q+IGJ1
aWx0QXV0b21hdGlvbkNvb2tpZShjb25zdCBTZXNzaW9uOjpDb29raWUmIGNvb2tpZSkKK3N0YXRp
YyBSZWY8SlNPTjo6T2JqZWN0PiBidWlsdEF1dG9tYXRpb25Db29raWUoY29uc3QgU2Vzc2lvbjo6
Q29va2llJiBjb29raWUpCiB7Ci0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gY29va2llT2JqZWN0
ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBhdXRvIGNvb2tpZU9iamVjdCA9IEpTT046
Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgY29va2llT2JqZWN0LT5zZXRTdHJpbmcoIm5hbWUiX3Ms
IGNvb2tpZS5uYW1lKTsKICAgICBjb29raWVPYmplY3QtPnNldFN0cmluZygidmFsdWUiX3MsIGNv
b2tpZS52YWx1ZSk7CiAgICAgY29va2llT2JqZWN0LT5zZXRTdHJpbmcoInBhdGgiX3MsIGNvb2tp
ZS5wYXRoLnZhbHVlT3IoIi8iKSk7CkBAIC0yMjk0LDkgKzIzOTAsOSBAQCBzdGF0aWMgUmVmUHRy
PEpTT046Ok9iamVjdD4gYnVpbHRBdXRvbWF0aW9uQ29va2llKGNvbnN0IFNlc3Npb246OkNvb2tp
ZSYgY29va2llKQogICAgIHJldHVybiBjb29raWVPYmplY3Q7CiB9CiAKLXN0YXRpYyBSZWZQdHI8
SlNPTjo6T2JqZWN0PiBzZXJpYWxpemVDb29raWUoY29uc3QgU2Vzc2lvbjo6Q29va2llJiBjb29r
aWUpCitzdGF0aWMgUmVmPEpTT046Ok9iamVjdD4gc2VyaWFsaXplQ29va2llKGNvbnN0IFNlc3Np
b246OkNvb2tpZSYgY29va2llKQogewotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IGNvb2tpZU9i
amVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgYXV0byBjb29raWVPYmplY3QgPSBK
U09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgIGNvb2tpZU9iamVjdC0+c2V0U3RyaW5nKCJuYW1l
Il9zLCBjb29raWUubmFtZSk7CiAgICAgY29va2llT2JqZWN0LT5zZXRTdHJpbmcoInZhbHVlIl9z
LCBjb29raWUudmFsdWUpOwogICAgIGlmIChjb29raWUucGF0aCkKQEAgLTIzMjUsMjMgKzI0MjEs
MjQgQEAgdm9pZCBTZXNzaW9uOjpnZXRBbGxDb29raWVzKEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRS
ZXN1bHQmJik+JiYgY29tcGxldGlvbkhhbmRsZXIKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQogCi0gICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnMgPSBKU09OOjpP
YmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6
OmNyZWF0ZSgpOwogICAgICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoImJyb3dzaW5nQ29udGV4
dEhhbmRsZSJfcywgbV90b3BsZXZlbEJyb3dzaW5nQ29udGV4dC52YWx1ZSgpKTsKICAgICAgICAg
bV9ob3N0LT5zZW5kQ29tbWFuZFRvQmFja2VuZCgiZ2V0QWxsQ29va2llcyJfcywgV1RGTW92ZShw
YXJhbWV0ZXJzKSwgW3Byb3RlY3RlZFRoaXMsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcildKFNlc3Npb25Ib3N0OjpDb21tYW5kUmVzcG9uc2UmJiByZXNwb25z
ZSkgbXV0YWJsZSB7CiAgICAgICAgICAgICBpZiAocmVzcG9uc2UuaXNFcnJvciB8fCAhcmVzcG9u
c2UucmVzcG9uc2VPYmplY3QpIHsKICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihD
b21tYW5kUmVzdWx0OjpmYWlsKFdURk1vdmUocmVzcG9uc2UucmVzcG9uc2VPYmplY3QpKSk7CiAg
ICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgUmVmUHRy
PEpTT046OkFycmF5PiBjb29raWVzQXJyYXk7Ci0gICAgICAgICAgICBpZiAoIXJlc3BvbnNlLnJl
c3BvbnNlT2JqZWN0LT5nZXRBcnJheSgiY29va2llcyJfcywgY29va2llc0FycmF5KSkgeworCisg
ICAgICAgICAgICBhdXRvIGNvb2tpZXNBcnJheSA9IHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5n
ZXRBcnJheSgiY29va2llcyJfcyk7CisgICAgICAgICAgICBpZiAoIWNvb2tpZXNBcnJheSkgewog
ICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29t
bWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKICAgICAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IGNv
b2tpZXMgPSBKU09OOjpBcnJheTo6Y3JlYXRlKCk7CisKKyAgICAgICAgICAgIGF1dG8gY29va2ll
cyA9IEpTT046OkFycmF5OjpjcmVhdGUoKTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBjb29raWVzQXJyYXktPmxlbmd0aCgpOyArK2kpIHsKLSAgICAgICAgICAgICAgICBS
ZWZQdHI8SlNPTjo6VmFsdWU+IGNvb2tpZVZhbHVlID0gY29va2llc0FycmF5LT5nZXQoaSk7Ci0g
ICAgICAgICAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gY29va2llT2JqZWN0OwotICAgICAg
ICAgICAgICAgIGlmICghY29va2llVmFsdWUtPmFzT2JqZWN0KGNvb2tpZU9iamVjdCkpIHsKKyAg
ICAgICAgICAgICAgICBhdXRvIGNvb2tpZU9iamVjdCA9IGNvb2tpZXNBcnJheS0+Z2V0KGkpLT5h
c09iamVjdCgpOworICAgICAgICAgICAgICAgIGlmICghY29va2llT2JqZWN0KSB7CiAgICAgICAg
ICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFu
ZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICAgICAgICAgIH0KQEAgLTIzNjUsMTQgKzI0NjIsMTEgQEAgdm9pZCBT
ZXNzaW9uOjpnZXROYW1lZENvb2tpZShjb25zdCBTdHJpbmcmIG5hbWUsIEZ1bmN0aW9uPHZvaWQg
KENvbW1hbmRSZXN1bHQmJikKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUo
cmVzdWx0KSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgUmVmUHRy
PEpTT046OkFycmF5PiBjb29raWVzQXJyYXk7Ci0gICAgICAgIHJlc3VsdC5yZXN1bHQoKS0+YXNB
cnJheShjb29raWVzQXJyYXkpOworCisgICAgICAgIGF1dG8gY29va2llc0FycmF5ID0gcmVzdWx0
LnJlc3VsdCgpLT5hc0FycmF5KCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBj
b29raWVzQXJyYXktPmxlbmd0aCgpOyArK2kpIHsKLSAgICAgICAgICAgIFJlZlB0cjxKU09OOjpW
YWx1ZT4gY29va2llVmFsdWUgPSBjb29raWVzQXJyYXktPmdldChpKTsKLSAgICAgICAgICAgIFJl
ZlB0cjxKU09OOjpPYmplY3Q+IGNvb2tpZU9iamVjdDsKLSAgICAgICAgICAgIGNvb2tpZVZhbHVl
LT5hc09iamVjdChjb29raWVPYmplY3QpOwotICAgICAgICAgICAgU3RyaW5nIGNvb2tpZU5hbWU7
Ci0gICAgICAgICAgICBjb29raWVPYmplY3QtPmdldFN0cmluZygibmFtZSJfcywgY29va2llTmFt
ZSk7CisgICAgICAgICAgICBhdXRvIGNvb2tpZU9iamVjdCA9IGNvb2tpZXNBcnJheS0+Z2V0KGkp
LT5hc09iamVjdCgpOworICAgICAgICAgICAgYXV0byBjb29raWVOYW1lID0gY29va2llT2JqZWN0
LT5nZXRTdHJpbmcoIm5hbWUiX3MpOwogICAgICAgICAgICAgaWYgKGNvb2tpZU5hbWUgPT0gbmFt
ZSkgewogICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OnN1
Y2Nlc3MoV1RGTW92ZShjb29raWVPYmplY3QpKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwpA
QCAtMjM5NCw3ICsyNDg4LDcgQEAgdm9pZCBTZXNzaW9uOjphZGRDb29raWUoY29uc3QgQ29va2ll
JiBjb29raWUsIEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSZXN1bHQmJik+JiYKICAgICAgICAgICAg
IGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUocmVzdWx0KSk7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KLSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVycyA9IEpT
T046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTT046Ok9i
amVjdDo6Y3JlYXRlKCk7CiAgICAgICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiYnJvd3NpbmdD
b250ZXh0SGFuZGxlIl9zLCBtX3RvcGxldmVsQnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwogICAg
ICAgICBwYXJhbWV0ZXJzLT5zZXRPYmplY3QoImNvb2tpZSJfcywgV1RGTW92ZShjb29raWUpKTsK
ICAgICAgICAgbV9ob3N0LT5zZW5kQ29tbWFuZFRvQmFja2VuZCgiYWRkU2luZ2xlQ29va2llIl9z
LCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBbcHJvdGVjdGVkVGhpcywgY29tcGxldGlvbkhhbmRsZXIg
PSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oU2Vzc2lvbkhvc3Q6OkNvbW1hbmRSZXNwb25z
ZSYmIHJlc3BvbnNlKSB7CkBAIC0yNDE5LDcgKzI1MTMsNyBAQCB2b2lkIFNlc3Npb246OmRlbGV0
ZUNvb2tpZShjb25zdCBTdHJpbmcmIG5hbWUsIEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSZXN1bHQm
Jik+JgogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShyZXN1bHQpKTsKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0
PiBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgYXV0byBwYXJh
bWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICAgcGFyYW1ldGVycy0+c2V0
U3RyaW5nKCJicm93c2luZ0NvbnRleHRIYW5kbGUiX3MsIG1fdG9wbGV2ZWxCcm93c2luZ0NvbnRl
eHQudmFsdWUoKSk7CiAgICAgICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiY29va2llTmFtZSJf
cywgbmFtZSk7CiAgICAgICAgIG1faG9zdC0+c2VuZENvbW1hbmRUb0JhY2tlbmQoImRlbGV0ZVNp
bmdsZUNvb2tpZSJfcywgV1RGTW92ZShwYXJhbWV0ZXJzKSwgW3Byb3RlY3RlZFRoaXMsIGNvbXBs
ZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKFNlc3Npb25Ib3N0OjpD
b21tYW5kUmVzcG9uc2UmJiByZXNwb25zZSkgewpAQCAtMjQ0NCw3ICsyNTM4LDcgQEAgdm9pZCBT
ZXNzaW9uOjpkZWxldGVBbGxDb29raWVzKEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSZXN1bHQmJik+
JiYgY29tcGxldGlvbkhhbmQKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUo
cmVzdWx0KSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgUmVmUHRy
PEpTT046Ok9iamVjdD4gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAg
ICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgIHBh
cmFtZXRlcnMtPnNldFN0cmluZygiYnJvd3NpbmdDb250ZXh0SGFuZGxlIl9zLCBtX3RvcGxldmVs
QnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwogICAgICAgICBtX2hvc3QtPnNlbmRDb21tYW5kVG9C
YWNrZW5kKCJkZWxldGVBbGxDb29raWVzIl9zLCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBbcHJvdGVj
dGVkVGhpcywgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0o
U2Vzc2lvbkhvc3Q6OkNvbW1hbmRSZXNwb25zZSYmIHJlc3BvbnNlKSB7CiAgICAgICAgICAgICBp
ZiAocmVzcG9uc2UuaXNFcnJvcikgewpAQCAtMjUxNywyMyArMjYxMSwyMyBAQCB2b2lkIFNlc3Np
b246OnBlcmZvcm1BY3Rpb25zKFZlY3RvcjxWZWN0b3I8QWN0aW9uPj4mJiBhY3Rpb25zQnlUaWNr
LCBGdW5jdGlvbjx2bwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAg
UmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7
CisgICAgICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAg
ICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiaGFuZGxlIl9zLCBtX3RvcGxldmVsQnJvd3NpbmdD
b250ZXh0LnZhbHVlKCkpOwogICAgICAgICBpZiAobV9jdXJyZW50QnJvd3NpbmdDb250ZXh0KQog
ICAgICAgICAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJmcmFtZUhhbmRsZSJfcywgbV9jdXJy
ZW50QnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwotICAgICAgICBSZWZQdHI8SlNPTjo6QXJyYXk+
IGlucHV0U291cmNlcyA9IEpTT046OkFycmF5OjpjcmVhdGUoKTsKKyAgICAgICAgYXV0byBpbnB1
dFNvdXJjZXMgPSBKU09OOjpBcnJheTo6Y3JlYXRlKCk7CiAgICAgICAgIGZvciAoY29uc3QgYXV0
byYgaW5wdXRTb3VyY2UgOiBtX2FjdGl2ZUlucHV0U291cmNlcykgewotICAgICAgICAgICAgUmVm
UHRyPEpTT046Ok9iamVjdD4gaW5wdXRTb3VyY2VPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0
ZSgpOworICAgICAgICAgICAgYXV0byBpbnB1dFNvdXJjZU9iamVjdCA9IEpTT046Ok9iamVjdDo6
Y3JlYXRlKCk7CiAgICAgICAgICAgICBpbnB1dFNvdXJjZU9iamVjdC0+c2V0U3RyaW5nKCJzb3Vy
Y2VJZCJfcywgaW5wdXRTb3VyY2Uua2V5KTsKICAgICAgICAgICAgIGlucHV0U291cmNlT2JqZWN0
LT5zZXRTdHJpbmcoInNvdXJjZVR5cGUiX3MsIGF1dG9tYXRpb25Tb3VyY2VUeXBlKGlucHV0U291
cmNlLnZhbHVlLnR5cGUpKTsKICAgICAgICAgICAgIGlucHV0U291cmNlcy0+cHVzaE9iamVjdChX
VEZNb3ZlKGlucHV0U291cmNlT2JqZWN0KSk7CiAgICAgICAgIH0KICAgICAgICAgcGFyYW1ldGVy
cy0+c2V0QXJyYXkoImlucHV0U291cmNlcyJfcywgV1RGTW92ZShpbnB1dFNvdXJjZXMpKTsKLSAg
ICAgICAgUmVmUHRyPEpTT046OkFycmF5PiBzdGVwcyA9IEpTT046OkFycmF5OjpjcmVhdGUoKTsK
KyAgICAgICAgYXV0byBzdGVwcyA9IEpTT046OkFycmF5OjpjcmVhdGUoKTsKICAgICAgICAgZm9y
IChjb25zdCBhdXRvJiB0aWNrIDogYWN0aW9uc0J5VGljaykgewotICAgICAgICAgICAgUmVmUHRy
PEpTT046OkFycmF5PiBzdGF0ZXMgPSBKU09OOjpBcnJheTo6Y3JlYXRlKCk7CisgICAgICAgICAg
ICBhdXRvIHN0YXRlcyA9IEpTT046OkFycmF5OjpjcmVhdGUoKTsKICAgICAgICAgICAgIGZvciAo
Y29uc3QgYXV0byYgYWN0aW9uIDogdGljaykgewotICAgICAgICAgICAgICAgIFJlZlB0cjxKU09O
OjpPYmplY3Q+IHN0YXRlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgICAgICAg
ICBhdXRvIHN0YXRlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICAgICAgICAgICBh
dXRvJiBjdXJyZW50U3RhdGUgPSBpbnB1dFNvdXJjZVN0YXRlKGFjdGlvbi5pZCk7CiAgICAgICAg
ICAgICAgICAgc3RhdGUtPnNldFN0cmluZygic291cmNlSWQiX3MsIGFjdGlvbi5pZCk7CiAgICAg
ICAgICAgICAgICAgc3dpdGNoIChhY3Rpb24udHlwZSkgewpAQCAtMjU1MSw3ICsyNjQ1LDcgQEAg
dm9pZCBTZXNzaW9uOjpwZXJmb3JtQWN0aW9ucyhWZWN0b3I8VmVjdG9yPEFjdGlvbj4+JiYgYWN0
aW9uc0J5VGljaywgRnVuY3Rpb248dm8KICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgICAgICBjYXNlIEFjdGlvbjo6U3VidHlwZTo6UG9pbnRlck1vdmU6IHsK
ICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5zZXRTdHJpbmcoIm9yaWdpbiJfcywgYXV0
b21hdGlvbk9yaWdpblR5cGUoYWN0aW9uLm9yaWdpbi0+dHlwZSkpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gbG9jYXRpb24gPSBKU09OOjpPYmplY3Q6OmNy
ZWF0ZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBsb2NhdGlvbiA9IEpTT046Ok9i
amVjdDo6Y3JlYXRlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbi0+c2V0SW50
ZWdlcigieCJfcywgYWN0aW9uLngudmFsdWUoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBs
b2NhdGlvbi0+c2V0SW50ZWdlcigieSJfcywgYWN0aW9uLnkudmFsdWUoKSk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBzdGF0ZS0+c2V0T2JqZWN0KCJsb2NhdGlvbiJfcywgV1RGTW92ZShsb2Nh
dGlvbikpOwpAQCAtMjYxNyw3ICsyNzExLDcgQEAgdm9pZCBTZXNzaW9uOjpwZXJmb3JtQWN0aW9u
cyhWZWN0b3I8VmVjdG9yPEFjdGlvbj4+JiYgYWN0aW9uc0J5VGljaywgRnVuY3Rpb248dm8KICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgc3RhdGVzLT5wdXNoT2JqZWN0KFdURk1v
dmUoc3RhdGUpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFJlZlB0cjxKU09OOjpPYmpl
Y3Q+IHN0ZXBTdGF0ZXMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICAgICAgYXV0
byBzdGVwU3RhdGVzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICAgICAgIHN0ZXBT
dGF0ZXMtPnNldEFycmF5KCJzdGF0ZXMiX3MsIFdURk1vdmUoc3RhdGVzKSk7CiAgICAgICAgICAg
ICBzdGVwcy0+cHVzaE9iamVjdChXVEZNb3ZlKHN0ZXBTdGF0ZXMpKTsKICAgICAgICAgfQpAQCAt
MjY0Myw3ICsyNzM3LDcgQEAgdm9pZCBTZXNzaW9uOjpyZWxlYXNlQWN0aW9ucyhGdW5jdGlvbjx2
b2lkIChDb21tYW5kUmVzdWx0JiYpPiYmIGNvbXBsZXRpb25IYW5kbGUKICAgICBtX2FjdGl2ZUlu
cHV0U291cmNlcy5jbGVhcigpOwogICAgIG1faW5wdXRTdGF0ZVRhYmxlLmNsZWFyKCk7CiAKLSAg
ICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUo
KTsKKyAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgIHBh
cmFtZXRlcnMtPnNldFN0cmluZygiaGFuZGxlIl9zLCBtX3RvcGxldmVsQnJvd3NpbmdDb250ZXh0
LnZhbHVlKCkpOwogICAgIG1faG9zdC0+c2VuZENvbW1hbmRUb0JhY2tlbmQoImNhbmNlbEludGVy
YWN0aW9uU2VxdWVuY2UiX3MsIFdURk1vdmUocGFyYW1ldGVycyksIFtwcm90ZWN0ZWRUaGlzID0g
bWFrZVJlZigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcildKFNlc3Npb25Ib3N0OjpDb21tYW5kUmVzcG9uc2UmJiByZXNwb25zZSkgewogICAgICAg
ICBpZiAocmVzcG9uc2UuaXNFcnJvcikgewpAQCAtMjY2MSw3ICsyNzU1LDcgQEAgdm9pZCBTZXNz
aW9uOjpkaXNtaXNzQWxlcnQoRnVuY3Rpb248dm9pZCAoQ29tbWFuZFJlc3VsdCYmKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFJlZlB0cjxKU09O
OjpPYmplY3Q+IHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGF1dG8g
cGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgcGFyYW1ldGVycy0+c2V0
U3RyaW5nKCJicm93c2luZ0NvbnRleHRIYW5kbGUiX3MsIG1fdG9wbGV2ZWxCcm93c2luZ0NvbnRl
eHQudmFsdWUoKSk7CiAgICAgbV9ob3N0LT5zZW5kQ29tbWFuZFRvQmFja2VuZCgiZGlzbWlzc0N1
cnJlbnRKYXZhU2NyaXB0RGlhbG9nIl9zLCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBbcHJvdGVjdGVk
VGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpXShTZXNzaW9uSG9zdDo6Q29tbWFuZFJlc3BvbnNlJiYgcmVzcG9uc2UpIHsK
ICAgICAgICAgaWYgKHJlc3BvbnNlLmlzRXJyb3IpIHsKQEAgLTI2NzksNyArMjc3Myw3IEBAIHZv
aWQgU2Vzc2lvbjo6YWNjZXB0QWxlcnQoRnVuY3Rpb248dm9pZCAoQ29tbWFuZFJlc3VsdCYmKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFJlZlB0
cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAg
IGF1dG8gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgcGFyYW1ldGVy
cy0+c2V0U3RyaW5nKCJicm93c2luZ0NvbnRleHRIYW5kbGUiX3MsIG1fdG9wbGV2ZWxCcm93c2lu
Z0NvbnRleHQudmFsdWUoKSk7CiAgICAgbV9ob3N0LT5zZW5kQ29tbWFuZFRvQmFja2VuZCgiYWNj
ZXB0Q3VycmVudEphdmFTY3JpcHREaWFsb2ciX3MsIFdURk1vdmUocGFyYW1ldGVycyksIFtwcm90
ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcildKFNlc3Npb25Ib3N0OjpDb21tYW5kUmVzcG9uc2UmJiByZXNwb25z
ZSkgewogICAgICAgICBpZiAocmVzcG9uc2UuaXNFcnJvcikgewpAQCAtMjY5NywxOCArMjc5MSwy
MCBAQCB2b2lkIFNlc3Npb246OmdldEFsZXJ0VGV4dChGdW5jdGlvbjx2b2lkIChDb21tYW5kUmVz
dWx0JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRl
KCk7CisgICAgYXV0byBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICBw
YXJhbWV0ZXJzLT5zZXRTdHJpbmcoImJyb3dzaW5nQ29udGV4dEhhbmRsZSJfcywgbV90b3BsZXZl
bEJyb3dzaW5nQ29udGV4dC52YWx1ZSgpKTsKICAgICBtX2hvc3QtPnNlbmRDb21tYW5kVG9CYWNr
ZW5kKCJtZXNzYWdlT2ZDdXJyZW50SmF2YVNjcmlwdERpYWxvZyJfcywgV1RGTW92ZShwYXJhbWV0
ZXJzKSwgW3Byb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY29tcGxldGlvbkhhbmRsZXIg
PSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oU2Vzc2lvbkhvc3Q6OkNvbW1hbmRSZXNwb25z
ZSYmIHJlc3BvbnNlKSB7CiAgICAgICAgIGlmIChyZXNwb25zZS5pc0Vycm9yIHx8ICFyZXNwb25z
ZS5yZXNwb25zZU9iamVjdCkgewogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFu
ZFJlc3VsdDo6ZmFpbChXVEZNb3ZlKHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0KSkpOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIFN0cmluZyB2YWx1ZVN0cmluZzsKLSAg
ICAgICAgaWYgKCFyZXNwb25zZS5yZXNwb25zZU9iamVjdC0+Z2V0U3RyaW5nKCJtZXNzYWdlIl9z
LCB2YWx1ZVN0cmluZykpIHsKKworICAgICAgICBhdXRvIHZhbHVlU3RyaW5nID0gcmVzcG9uc2Uu
cmVzcG9uc2VPYmplY3QtPmdldFN0cmluZygibWVzc2FnZSJfcyk7CisgICAgICAgIGlmICghdmFs
dWVTdHJpbmcpIHsKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6
OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQorCiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1h
bmRSZXN1bHQ6OnN1Y2Nlc3MoSlNPTjo6VmFsdWU6OmNyZWF0ZSh2YWx1ZVN0cmluZykpKTsKICAg
ICB9KTsKIH0KQEAgLTI3MjAsNyArMjgxNiw3IEBAIHZvaWQgU2Vzc2lvbjo6c2VuZEFsZXJ0VGV4
dChjb25zdCBTdHJpbmcmIHRleHQsIEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSZXN1bHQmJik+CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0
ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU09O
OjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiYnJvd3NpbmdD
b250ZXh0SGFuZGxlIl9zLCBtX3RvcGxldmVsQnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwogICAg
IHBhcmFtZXRlcnMtPnNldFN0cmluZygidXNlcklucHV0Il9zLCB0ZXh0KTsKICAgICBtX2hvc3Qt
PnNlbmRDb21tYW5kVG9CYWNrZW5kKCJzZXRVc2VySW5wdXRGb3JDdXJyZW50SmF2YVNjcmlwdFBy
b21wdCJfcywgV1RGTW92ZShwYXJhbWV0ZXJzKSwgW3Byb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0
aGlzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oU2Vz
c2lvbkhvc3Q6OkNvbW1hbmRSZXNwb25zZSYmIHJlc3BvbnNlKSB7CkBAIC0yNzQ0LDcgKzI4NDAs
NyBAQCB2b2lkIFNlc3Npb246OnRha2VTY3JlZW5zaG90KE9wdGlvbmFsPFN0cmluZz4gZWxlbWVu
dElELCBPcHRpb25hbDxib29sPiBzY3JvbGxJbgogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIoV1RGTW92ZShyZXN1bHQpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAg
ICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVh
dGUoKTsKKyAgICAgICAgYXV0byBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsK
ICAgICAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJoYW5kbGUiX3MsIG1fdG9wbGV2ZWxCcm93
c2luZ0NvbnRleHQudmFsdWUoKSk7CiAgICAgICAgIGlmIChtX2N1cnJlbnRCcm93c2luZ0NvbnRl
eHQpCiAgICAgICAgICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoImZyYW1lSGFuZGxlIl9zLCBt
X2N1cnJlbnRCcm93c2luZ0NvbnRleHQudmFsdWUoKSk7CkBAIC0yNzU4LDExICsyODU0LDEzIEBA
IHZvaWQgU2Vzc2lvbjo6dGFrZVNjcmVlbnNob3QoT3B0aW9uYWw8U3RyaW5nPiBlbGVtZW50SUQs
IE9wdGlvbmFsPGJvb2w+IHNjcm9sbEluCiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChXVEZNb3ZlKHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0KSkp
OwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFN0
cmluZyBkYXRhOwotICAgICAgICAgICAgaWYgKCFyZXNwb25zZS5yZXNwb25zZU9iamVjdC0+Z2V0
U3RyaW5nKCJkYXRhIl9zLCBkYXRhKSkgeworCisgICAgICAgICAgICBhdXRvIGRhdGEgPSByZXNw
b25zZS5yZXNwb25zZU9iamVjdC0+Z2V0U3RyaW5nKCJkYXRhIl9zKTsKKyAgICAgICAgICAgIGlm
ICghZGF0YSkgewogICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1
bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKICAgICAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CisKICAgICAgICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OnN1Y2Nlc3MoSlNPTjo6VmFsdWU6OmNyZWF0ZShkYXRh
KSkpOwogICAgICAgICB9KTsKICAgICB9KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJEcml2ZXIv
U2Vzc2lvbi5oIGIvU291cmNlL1dlYkRyaXZlci9TZXNzaW9uLmgKaW5kZXggODQ0OWFhODk4OGI3
NzkzNzRmODgyZmVkN2QyZmNkY2QzNDQ3MzRlMi4uYWQwNTYzYmI5MTlmMWUzZTg3OWVlNzFlZjIz
OWI4YTdhZjVkNDcxNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkRyaXZlci9TZXNzaW9uLmgKKysr
IGIvU291cmNlL1dlYkRyaXZlci9TZXNzaW9uLmgKQEAgLTE0MywxMCArMTQzLDEwIEBAIHByaXZh
dGU6CiAgICAgdm9pZCByZXBvcnRVbmV4cGVjdGVkQWxlcnRPcGVuKEZ1bmN0aW9uPHZvaWQgKENv
bW1hbmRSZXN1bHQmJik+JiYpOwogCiAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gY3JlYXRlRWxl
bWVudChSZWZQdHI8SlNPTjo6VmFsdWU+JiYpOwotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IGNy
ZWF0ZUVsZW1lbnQoY29uc3QgU3RyaW5nJiBlbGVtZW50SUQpOworICAgIFJlZjxKU09OOjpPYmpl
Y3Q+IGNyZWF0ZUVsZW1lbnQoY29uc3QgU3RyaW5nJiBlbGVtZW50SUQpOwogICAgIFJlZlB0cjxK
U09OOjpPYmplY3Q+IGV4dHJhY3RFbGVtZW50KEpTT046OlZhbHVlJik7CiAgICAgU3RyaW5nIGV4
dHJhY3RFbGVtZW50SUQoSlNPTjo6VmFsdWUmKTsKLSAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IGhh
bmRsZVNjcmlwdFJlc3VsdChSZWZQdHI8SlNPTjo6VmFsdWU+JiYpOworICAgIFJlZjxKU09OOjpW
YWx1ZT4gaGFuZGxlU2NyaXB0UmVzdWx0KFJlZjxKU09OOjpWYWx1ZT4mJik7CiAgICAgdm9pZCBl
bGVtZW50SXNFZGl0YWJsZShjb25zdCBTdHJpbmcmIGVsZW1lbnRJRCwgRnVuY3Rpb248dm9pZCAo
Q29tbWFuZFJlc3VsdCYmKT4mJik7CiAKICAgICBzdHJ1Y3QgUG9pbnQgewpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkRyaXZlci9TZXNzaW9uSG9zdC5jcHAgYi9Tb3VyY2UvV2ViRHJpdmVyL1Nlc3Np
b25Ib3N0LmNwcAppbmRleCBkMTY5Yjk1YzRiNmNlZTQyODlkOGM4ODllNTUzZGY3NjM5NTVhYWJj
Li40NzJlYmRmYWY0YTYyYjZiMjAwYjRkMWVjN2IyMWJlNTkxMTg1ZTAxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViRHJpdmVyL1Nlc3Npb25Ib3N0LmNwcAorKysgYi9Tb3VyY2UvV2ViRHJpdmVyL1Nl
c3Npb25Ib3N0LmNwcApAQCAtNjIsMzEgKzYyLDI3IEBAIGxvbmcgU2Vzc2lvbkhvc3Q6OnNlbmRD
b21tYW5kVG9CYWNrZW5kKGNvbnN0IFN0cmluZyYgY29tbWFuZCwgUmVmUHRyPEpTT046Ok9iamVj
CiAKIHZvaWQgU2Vzc2lvbkhvc3Q6OmRpc3BhdGNoTWVzc2FnZShjb25zdCBTdHJpbmcmIG1lc3Nh
Z2UpCiB7Ci0gICAgUmVmUHRyPEpTT046OlZhbHVlPiBtZXNzYWdlVmFsdWU7Ci0gICAgaWYgKCFK
U09OOjpWYWx1ZTo6cGFyc2VKU09OKG1lc3NhZ2UsIG1lc3NhZ2VWYWx1ZSkpCisgICAgYXV0byBt
ZXNzYWdlVmFsdWUgPSBKU09OOjpWYWx1ZTo6cGFyc2VKU09OKG1lc3NhZ2UpOworICAgIGlmICgh
bWVzc2FnZVZhbHVlKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0
PiBtZXNzYWdlT2JqZWN0OwotICAgIGlmICghbWVzc2FnZVZhbHVlLT5hc09iamVjdChtZXNzYWdl
T2JqZWN0KSkKKyAgICBhdXRvIG1lc3NhZ2VPYmplY3QgPSBtZXNzYWdlVmFsdWUtPmFzT2JqZWN0
KCk7CisgICAgaWYgKCFtZXNzYWdlT2JqZWN0KQogICAgICAgICByZXR1cm47CiAKLSAgICBsb25n
IHNlcXVlbmNlSUQ7Ci0gICAgaWYgKCFtZXNzYWdlT2JqZWN0LT5nZXRJbnRlZ2VyKCJpZCJfcywg
c2VxdWVuY2VJRCkpCisgICAgYXV0byBzZXF1ZW5jZUlEID0gbWVzc2FnZU9iamVjdC0+Z2V0SW50
ZWdlcigiaWQiX3MpOworICAgIGlmICghc2VxdWVuY2VJRCkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgYXV0byByZXNwb25zZUhhbmRsZXIgPSBtX2NvbW1hbmRSZXF1ZXN0cy50YWtlKHNlcXVlbmNl
SUQpOworICAgIGF1dG8gcmVzcG9uc2VIYW5kbGVyID0gbV9jb21tYW5kUmVxdWVzdHMudGFrZSgq
c2VxdWVuY2VJRCk7CiAgICAgQVNTRVJUKHJlc3BvbnNlSGFuZGxlcik7CiAKICAgICBDb21tYW5k
UmVzcG9uc2UgcmVzcG9uc2U7Ci0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gZXJyb3JPYmplY3Q7
Ci0gICAgaWYgKG1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgiZXJyb3IiX3MsIGVycm9yT2JqZWN0
KSkgeworICAgIGlmIChhdXRvIGVycm9yT2JqZWN0ID0gbWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0
KCJlcnJvciJfcykpIHsKICAgICAgICAgcmVzcG9uc2UucmVzcG9uc2VPYmplY3QgPSBXVEZNb3Zl
KGVycm9yT2JqZWN0KTsKICAgICAgICAgcmVzcG9uc2UuaXNFcnJvciA9IHRydWU7Ci0gICAgfSBl
bHNlIHsKLSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcmVzdWx0T2JqZWN0OwotICAgICAg
ICBpZiAobWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJyZXN1bHQiX3MsIHJlc3VsdE9iamVjdCkg
JiYgcmVzdWx0T2JqZWN0LT5zaXplKCkpCi0gICAgICAgICAgICByZXNwb25zZS5yZXNwb25zZU9i
amVjdCA9IFdURk1vdmUocmVzdWx0T2JqZWN0KTsKLSAgICB9CisgICAgfSBlbHNlIGlmIChhdXRv
IHJlc3VsdE9iamVjdCA9IG1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgicmVzdWx0Il9zKSkKKyAg
ICAgICAgcmVzcG9uc2UucmVzcG9uc2VPYmplY3QgPSBXVEZNb3ZlKHJlc3VsdE9iamVjdCk7CiAK
ICAgICByZXNwb25zZUhhbmRsZXIoV1RGTW92ZShyZXNwb25zZSkpOwogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkRyaXZlci9XZWJEcml2ZXJTZXJ2aWNlLmNwcCBiL1NvdXJjZS9XZWJEcml2ZXIv
V2ViRHJpdmVyU2VydmljZS5jcHAKaW5kZXggOWJiOTc2ZDlmMGM1ZTNiNDg5YjIwOWYzZGI4NTBk
YzMyMWI2MGY0ZS4uMjQ2Zjc3MmFkNGE0ODBmMzZhMmQxNDQxNzU0MzIwNTQ1YzJkZjRmMCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkRyaXZlci9XZWJEcml2ZXJTZXJ2aWNlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViRHJpdmVyL1dlYkRyaXZlclNlcnZpY2UuY3BwCkBAIC0yMzksMTMgKzIzOSwxNCBAQCB2
b2lkIFdlYkRyaXZlclNlcnZpY2U6OmhhbmRsZVJlcXVlc3QoSFRUUFJlcXVlc3RIYW5kbGVyOjpS
ZXF1ZXN0JiYgcmVxdWVzdCwgRnVuYwogCiAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1l
dGVyc09iamVjdDsKICAgICBpZiAobWV0aG9kLnZhbHVlKCkgPT0gSFRUUE1ldGhvZDo6UG9zdCkg
ewotICAgICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IG1lc3NhZ2VWYWx1ZTsKLSAgICAgICAgaWYg
KCFKU09OOjpWYWx1ZTo6cGFyc2VKU09OKFN0cmluZzo6ZnJvbVVURjgocmVxdWVzdC5kYXRhLCBy
ZXF1ZXN0LmRhdGFMZW5ndGgpLCBtZXNzYWdlVmFsdWUpKSB7CisgICAgICAgIGF1dG8gbWVzc2Fn
ZVZhbHVlID0gSlNPTjo6VmFsdWU6OnBhcnNlSlNPTihTdHJpbmc6OmZyb21VVEY4KHJlcXVlc3Qu
ZGF0YSwgcmVxdWVzdC5kYXRhTGVuZ3RoKSk7CisgICAgICAgIGlmICghbWVzc2FnZVZhbHVlKSB7
CiAgICAgICAgICAgICBzZW5kUmVzcG9uc2UoV1RGTW92ZShyZXBseUhhbmRsZXIpLCBDb21tYW5k
UmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6SW52YWxpZEFyZ3VtZW50KSk7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoIW1lc3NhZ2VW
YWx1ZS0+YXNPYmplY3QocGFyYW1ldGVyc09iamVjdCkpIHsKKyAgICAgICAgcGFyYW1ldGVyc09i
amVjdCA9IG1lc3NhZ2VWYWx1ZS0+YXNPYmplY3QoKTsKKyAgICAgICAgaWYgKCFwYXJhbWV0ZXJz
T2JqZWN0KSB7CiAgICAgICAgICAgICBzZW5kUmVzcG9uc2UoV1RGTW92ZShyZXBseUhhbmRsZXIp
LCBDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6SW52YWxpZEFy
Z3VtZW50KSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTI3NCw3ICsyNzUs
NyBAQCB2b2lkIFdlYkRyaXZlclNlcnZpY2U6OnNlbmRSZXNwb25zZShGdW5jdGlvbjx2b2lkIChI
VFRQUmVxdWVzdEhhbmRsZXI6OlJlc3BvbnNlJgogICAgICAgICBlcnJvck9iamVjdC0+c2V0U3Ry
aW5nKCJzdGFja3RyYWNlIl9zLCBlbXB0eVN0cmluZygpKTsKICAgICAgICAgLy8gSWYgdGhlIGVy
cm9yIGRhdGEgZGljdGlvbmFyeSBjb250YWlucyBhbnkgZW50cmllcywgc2V0IHRoZSAiZGF0YSIg
ZmllbGQgb24gYm9keSB0byBhIG5ldyBKU09OIE9iamVjdCBwb3B1bGF0ZWQgd2l0aCB0aGUgZGlj
dGlvbmFyeS4KICAgICAgICAgaWYgKGF1dG8mIGFkZGl0aW9uYWxEYXRhID0gcmVzdWx0LmFkZGl0
aW9uYWxFcnJvckRhdGEoKSkKLSAgICAgICAgICAgIGVycm9yT2JqZWN0LT5zZXRPYmplY3QoImRh
dGEiX3MsIFJlZlB0cjxKU09OOjpPYmplY3Q+IHsgYWRkaXRpb25hbERhdGEgfSk7CisgICAgICAg
ICAgICBlcnJvck9iamVjdC0+c2V0T2JqZWN0KCJkYXRhIl9zLCAqYWRkaXRpb25hbERhdGEpOwog
ICAgICAgICAvLyBTZW5kIGEgcmVzcG9uc2Ugd2l0aCBzdGF0dXMgYW5kIGJvZHkgYXMgYXJndW1l
bnRzLgogICAgICAgICByZXN1bHRWYWx1ZSA9IFdURk1vdmUoZXJyb3JPYmplY3QpOwogICAgIH0g
ZWxzZSBpZiAoYXV0byB2YWx1ZSA9IHJlc3VsdC5yZXN1bHQoKSkKQEAgLTI4NCwyNCArMjg1LDI0
IEBAIHZvaWQgV2ViRHJpdmVyU2VydmljZTo6c2VuZFJlc3BvbnNlKEZ1bmN0aW9uPHZvaWQgKEhU
VFBSZXF1ZXN0SGFuZGxlcjo6UmVzcG9uc2UmCiAKICAgICAvLyBXaGVuIHJlcXVpcmVkIHRvIHNl
bmQgYSByZXNwb25zZS4KICAgICAvLyBodHRwczovL3czYy5naXRodWIuaW8vd2ViZHJpdmVyL3dl
YmRyaXZlci1zcGVjLmh0bWwjZGZuLXNlbmQtYS1yZXNwb25zZQotICAgIFJlZlB0cjxKU09OOjpP
YmplY3Q+IHJlc3BvbnNlT2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICByZXNw
b25zZU9iamVjdC0+c2V0VmFsdWUoInZhbHVlIl9zLCBXVEZNb3ZlKHJlc3VsdFZhbHVlKSk7Cisg
ICAgYXV0byByZXNwb25zZU9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgcmVz
cG9uc2VPYmplY3QtPnNldFZhbHVlKCJ2YWx1ZSJfcywgcmVzdWx0VmFsdWUucmVsZWFzZU5vbk51
bGwoKSk7CiAgICAgcmVwbHlIYW5kbGVyKHsgcmVzdWx0Lmh0dHBTdGF0dXNDb2RlKCksIHJlc3Bv
bnNlT2JqZWN0LT50b0pTT05TdHJpbmcoKS51dGY4KCksICJhcHBsaWNhdGlvbi9qc29uOyBjaGFy
c2V0PXV0Zi04Il9zIH0pOwogfQogCiBzdGF0aWMgT3B0aW9uYWw8ZG91YmxlPiB2YWx1ZUFzTnVt
YmVySW5SYW5nZShjb25zdCBKU09OOjpWYWx1ZSYgdmFsdWUsIGRvdWJsZSBtaW5BbGxvd2VkID0g
MCwgZG91YmxlIG1heEFsbG93ZWQgPSBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpKQog
ewotICAgIGRvdWJsZSBudW1iZXI7Ci0gICAgaWYgKCF2YWx1ZS5hc0RvdWJsZShudW1iZXIpKQor
ICAgIGF1dG8gbnVtYmVyID0gdmFsdWUuYXNEb3VibGUoKTsKKyAgICBpZiAoIW51bWJlcikKICAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIGlmIChzdGQ6OmlzbmFuKG51bWJlcikg
fHwgc3RkOjppc2luZihudW1iZXIpKQorICAgIGlmIChzdGQ6OmlzbmFuKCpudW1iZXIpIHx8IHN0
ZDo6aXNpbmYoKm51bWJlcikpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBp
ZiAobnVtYmVyIDwgbWluQWxsb3dlZCB8fCBudW1iZXIgPiBtYXhBbGxvd2VkKQorICAgIGlmICgq
bnVtYmVyIDwgbWluQWxsb3dlZCB8fCAqbnVtYmVyID4gbWF4QWxsb3dlZCkKICAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHJldHVybiBudW1iZXI7CisgICAgcmV0dXJuICpudW1i
ZXI7CiB9CiAKIHN0YXRpYyBPcHRpb25hbDx1aW50NjRfdD4gdW5zaWduZWRWYWx1ZShKU09OOjpW
YWx1ZSYgdmFsdWUpCkBAIC0zMzgsNyArMzM5LDcgQEAgc3RhdGljIE9wdGlvbmFsPFRpbWVvdXRz
PiBkZXNlcmlhbGl6ZVRpbWVvdXRzKEpTT046Ok9iamVjdCYgdGltZW91dHNPYmplY3QsIElnbm8K
ICAgICAgICAgfQogCiAgICAgICAgIC8vIElmIHZhbHVlIGlzIG5vdCBhbiBpbnRlZ2VyLCBvciBp
dCBpcyBsZXNzIHRoYW4gMCBvciBncmVhdGVyIHRoYW4gdGhlIG1heGltdW0gc2FmZSBpbnRlZ2Vy
LCByZXR1cm4gZXJyb3Igd2l0aCBlcnJvciBjb2RlIGludmFsaWQgYXJndW1lbnQuCi0gICAgICAg
IGF1dG8gdGltZW91dE1TID0gdW5zaWduZWRWYWx1ZSgqaXQtPnZhbHVlKTsKKyAgICAgICAgYXV0
byB0aW1lb3V0TVMgPSB1bnNpZ25lZFZhbHVlKGl0LT52YWx1ZSk7CiAgICAgICAgIGlmICghdGlt
ZW91dE1TKQogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIApAQCAtMzU5LDYxICsz
NjAsNjEgQEAgc3RhdGljIE9wdGlvbmFsPFByb3h5PiBkZXNlcmlhbGl6ZVByb3h5KEpTT046Ok9i
amVjdCYgcHJveHlPYmplY3QpCiAgICAgLy8gwqc3LjEgUHJveHkuCiAgICAgLy8gaHR0cHM6Ly93
M2MuZ2l0aHViLmlvL3dlYmRyaXZlci8jcHJveHkKICAgICBQcm94eSBwcm94eTsKLSAgICBpZiAo
IXByb3h5T2JqZWN0LmdldFN0cmluZygicHJveHlUeXBlIl9zLCBwcm94eS50eXBlKSkKKworICAg
IHByb3h5LnR5cGUgPSBwcm94eU9iamVjdC5nZXRTdHJpbmcoInByb3h5VHlwZSJfcyk7CisgICAg
aWYgKCFwcm94eS50eXBlKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgaWYg
KHByb3h5LnR5cGUgPT0gImRpcmVjdCIgfHwgcHJveHkudHlwZSA9PSAiYXV0b2RldGVjdCIgfHwg
cHJveHkudHlwZSA9PSAic3lzdGVtIikKICAgICAgICAgcmV0dXJuIHByb3h5OwogCiAgICAgaWYg
KHByb3h5LnR5cGUgPT0gInBhYyIpIHsKLSAgICAgICAgU3RyaW5nIGF1dG9jb25maWdVUkw7Ci0g
ICAgICAgIGlmICghcHJveHlPYmplY3QuZ2V0U3RyaW5nKCJwcm94eUF1dG9jb25maWdVcmwiX3Ms
IGF1dG9jb25maWdVUkwpKQorICAgICAgICBwcm94eS5hdXRvY29uZmlnVVJMID0gcHJveHlPYmpl
Y3QuZ2V0U3RyaW5nKCJwcm94eUF1dG9jb25maWdVcmwiX3MpOworICAgICAgICBpZiAoIXByb3h5
LmF1dG9jb25maWdVUkwpCiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAg
ICAgIHByb3h5LmF1dG9jb25maWdVUkwgPSBhdXRvY29uZmlnVVJMOwogICAgICAgICByZXR1cm4g
cHJveHk7CiAgICAgfQogCiAgICAgaWYgKHByb3h5LnR5cGUgPT0gIm1hbnVhbCIpIHsKLSAgICAg
ICAgUmVmUHRyPEpTT046OlZhbHVlPiB2YWx1ZTsKLSAgICAgICAgaWYgKHByb3h5T2JqZWN0Lmdl
dFZhbHVlKCJmdHBQcm94eSJfcywgdmFsdWUpKSB7Ci0gICAgICAgICAgICBTdHJpbmcgZnRwUHJv
eHk7Ci0gICAgICAgICAgICBpZiAoIXZhbHVlLT5hc1N0cmluZyhmdHBQcm94eSkpCisgICAgICAg
IGlmIChhdXRvIHZhbHVlID0gcHJveHlPYmplY3QuZ2V0VmFsdWUoImZ0cFByb3h5Il9zKSkgewor
ICAgICAgICAgICAgYXV0byBmdHBQcm94eSA9IHZhbHVlLT5hc1N0cmluZygpOworICAgICAgICAg
ICAgaWYgKCFmdHBQcm94eSkKICAgICAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owog
CiAgICAgICAgICAgICBwcm94eS5mdHBVUkwgPSBVUkwoeyB9LCBtYWtlU3RyaW5nKCJmdHA6Ly8i
LCBmdHBQcm94eSkpOwogICAgICAgICAgICAgaWYgKCFwcm94eS5mdHBVUkwtPmlzVmFsaWQoKSkK
ICAgICAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAgICB9Ci0gICAgICAg
IGlmIChwcm94eU9iamVjdC5nZXRWYWx1ZSgiaHR0cFByb3h5Il9zLCB2YWx1ZSkpIHsKLSAgICAg
ICAgICAgIFN0cmluZyBodHRwUHJveHk7Ci0gICAgICAgICAgICBpZiAoIXZhbHVlLT5hc1N0cmlu
ZyhodHRwUHJveHkpKQorICAgICAgICBpZiAoYXV0byB2YWx1ZSA9IHByb3h5T2JqZWN0LmdldFZh
bHVlKCJodHRwUHJveHkiX3MpKSB7CisgICAgICAgICAgICBhdXRvIGh0dHBQcm94eSA9IHZhbHVl
LT5hc1N0cmluZygpOworICAgICAgICAgICAgaWYgKCFodHRwUHJveHkpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgICAgICAgICAgcHJveHkuaHR0cFVSTCA9IFVS
TCh7IH0sIG1ha2VTdHJpbmcoImh0dHA6Ly8iLCBodHRwUHJveHkpKTsKICAgICAgICAgICAgIGlm
ICghcHJveHkuaHR0cFVSTC0+aXNWYWxpZCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHByb3h5T2JqZWN0LmdldFZhbHVlKCJz
c2xQcm94eSJfcywgdmFsdWUpKSB7Ci0gICAgICAgICAgICBTdHJpbmcgc3NsUHJveHk7Ci0gICAg
ICAgICAgICBpZiAoIXZhbHVlLT5hc1N0cmluZyhzc2xQcm94eSkpCisgICAgICAgIGlmIChhdXRv
IHZhbHVlID0gcHJveHlPYmplY3QuZ2V0VmFsdWUoInNzbFByb3h5Il9zKSkgeworICAgICAgICAg
ICAgYXV0byBzc2xQcm94eSA9IHZhbHVlLT5hc1N0cmluZygpOworICAgICAgICAgICAgaWYgKCFz
c2xQcm94eSkKICAgICAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgICAg
ICAgICBwcm94eS5odHRwc1VSTCA9IFVSTCh7IH0sIG1ha2VTdHJpbmcoImh0dHBzOi8vIiwgc3Ns
UHJveHkpKTsKICAgICAgICAgICAgIGlmICghcHJveHkuaHR0cHNVUkwtPmlzVmFsaWQoKSkKICAg
ICAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAgICB9Ci0gICAgICAgIGlm
IChwcm94eU9iamVjdC5nZXRWYWx1ZSgic29ja3NQcm94eSIsIHZhbHVlKSkgewotICAgICAgICAg
ICAgU3RyaW5nIHNvY2tzUHJveHk7Ci0gICAgICAgICAgICBpZiAoIXZhbHVlLT5hc1N0cmluZyhz
b2Nrc1Byb3h5KSkKKyAgICAgICAgaWYgKGF1dG8gdmFsdWUgPSBwcm94eU9iamVjdC5nZXRWYWx1
ZSgic29ja3NQcm94eSIpKSB7CisgICAgICAgICAgICBhdXRvIHNvY2tzUHJveHkgPSB2YWx1ZS0+
YXNTdHJpbmcoKTsKKyAgICAgICAgICAgIGlmICghc29ja3NQcm94eSkKICAgICAgICAgICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgICAgICAgICBwcm94eS5zb2Nrc1VSTCA9IFVS
TCh7IH0sIG1ha2VTdHJpbmcoInNvY2tzOi8vIiwgc29ja3NQcm94eSkpOwogICAgICAgICAgICAg
aWYgKCFwcm94eS5zb2Nrc1VSTC0+aXNWYWxpZCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CiAKLSAgICAgICAgICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gc29ja3NWZXJz
aW9uVmFsdWU7Ci0gICAgICAgICAgICBpZiAoIXByb3h5T2JqZWN0LmdldFZhbHVlKCJzb2Nrc1Zl
cnNpb24iLCBzb2Nrc1ZlcnNpb25WYWx1ZSkpCisgICAgICAgICAgICBhdXRvIHNvY2tzVmVyc2lv
blZhbHVlID0gcHJveHlPYmplY3QuZ2V0VmFsdWUoInNvY2tzVmVyc2lvbiIpOworICAgICAgICAg
ICAgaWYgKCFzb2Nrc1ZlcnNpb25WYWx1ZSkKICAgICAgICAgICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwogCiAgICAgICAgICAgICBhdXRvIHNvY2tzVmVyc2lvbiA9IHVuc2lnbmVkVmFsdWUo
KnNvY2tzVmVyc2lvblZhbHVlKTsKQEAgLTQyMSwxOCArNDIyLDE3IEBAIHN0YXRpYyBPcHRpb25h
bDxQcm94eT4gZGVzZXJpYWxpemVQcm94eShKU09OOjpPYmplY3QmIHByb3h5T2JqZWN0KQogICAg
ICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAgICAgICBwcm94eS5zb2Nr
c1ZlcnNpb24gPSBzb2Nrc1ZlcnNpb24udmFsdWUoKTsKICAgICAgICAgfQotICAgICAgICBpZiAo
cHJveHlPYmplY3QuZ2V0VmFsdWUoIm5vUHJveHkiX3MsIHZhbHVlKSkgewotICAgICAgICAgICAg
UmVmUHRyPEpTT046OkFycmF5PiBub1Byb3h5OwotICAgICAgICAgICAgaWYgKCF2YWx1ZS0+YXNB
cnJheShub1Byb3h5KSkKKyAgICAgICAgaWYgKGF1dG8gdmFsdWUgPSBwcm94eU9iamVjdC5nZXRW
YWx1ZSgibm9Qcm94eSJfcykpIHsKKyAgICAgICAgICAgIGF1dG8gbm9Qcm94eSA9IHZhbHVlLT5h
c0FycmF5KCk7CisgICAgICAgICAgICBpZiAoIW5vUHJveHkpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKIAogICAgICAgICAgICAgYXV0byBub1Byb3h5TGVuZ3RoID0gbm9Q
cm94eS0+bGVuZ3RoKCk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbm9Q
cm94eUxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgUmVmUHRyPEpTT046OlZhbHVlPiBh
ZGRyZXNzVmFsdWUgPSBub1Byb3h5LT5nZXQoaSk7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIGFk
ZHJlc3M7Ci0gICAgICAgICAgICAgICAgaWYgKCFhZGRyZXNzVmFsdWUtPmFzU3RyaW5nKGFkZHJl
c3MpKQorICAgICAgICAgICAgICAgIGF1dG8gYWRkcmVzcyA9IG5vUHJveHktPmdldChpKS0+YXNT
dHJpbmcoKTsKKyAgICAgICAgICAgICAgICBpZiAoIWFkZHJlc3MpCiAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgICAgICAgICAgICAgcHJveHkuaWdub3JlQWRk
cmVzc0xpc3QuYXBwZW5kKFdURk1vdmUoYWRkcmVzcykpOworICAgICAgICAgICAgICAgIHByb3h5
Lmlnbm9yZUFkZHJlc3NMaXN0LmFwcGVuZChhZGRyZXNzKTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQogCkBAIC00NzEsNDMgKzQ3MSw1MyBAQCBzdGF0aWMgT3B0aW9uYWw8VW5oYW5kbGVkUHJv
bXB0QmVoYXZpb3I+IGRlc2VyaWFsaXplVW5oYW5kbGVkUHJvbXB0QmVoYXZpb3IoY29ucwogdm9p
ZCBXZWJEcml2ZXJTZXJ2aWNlOjpwYXJzZUNhcGFiaWxpdGllcyhjb25zdCBKU09OOjpPYmplY3Qm
IG1hdGNoZWRDYXBhYmlsaXRpZXMsIENhcGFiaWxpdGllcyYgY2FwYWJpbGl0aWVzKSBjb25zdAog
ewogICAgIC8vIE1hdGNoZWQgY2FwYWJpbGl0aWVzIGhhdmUgYWxyZWFkeSBiZWVuIHZhbGlkYXRl
ZC4KLSAgICBib29sIGFjY2VwdEluc2VjdXJlQ2VydHM7Ci0gICAgaWYgKG1hdGNoZWRDYXBhYmls
aXRpZXMuZ2V0Qm9vbGVhbigiYWNjZXB0SW5zZWN1cmVDZXJ0cyJfcywgYWNjZXB0SW5zZWN1cmVD
ZXJ0cykpCi0gICAgICAgIGNhcGFiaWxpdGllcy5hY2NlcHRJbnNlY3VyZUNlcnRzID0gYWNjZXB0
SW5zZWN1cmVDZXJ0czsKLSAgICBib29sIHNldFdpbmRvd1JlY3Q7Ci0gICAgaWYgKG1hdGNoZWRD
YXBhYmlsaXRpZXMuZ2V0Qm9vbGVhbigic2V0V2luZG93UmVjdCJfcywgc2V0V2luZG93UmVjdCkp
Ci0gICAgICAgIGNhcGFiaWxpdGllcy5zZXRXaW5kb3dSZWN0ID0gc2V0V2luZG93UmVjdDsKLSAg
ICBTdHJpbmcgYnJvd3Nlck5hbWU7Ci0gICAgaWYgKG1hdGNoZWRDYXBhYmlsaXRpZXMuZ2V0U3Ry
aW5nKCJicm93c2VyTmFtZSJfcywgYnJvd3Nlck5hbWUpKQorICAgIGF1dG8gYWNjZXB0SW5zZWN1
cmVDZXJ0cyA9IG1hdGNoZWRDYXBhYmlsaXRpZXMuZ2V0Qm9vbGVhbigiYWNjZXB0SW5zZWN1cmVD
ZXJ0cyJfcyk7CisgICAgaWYgKGFjY2VwdEluc2VjdXJlQ2VydHMpCisgICAgICAgIGNhcGFiaWxp
dGllcy5hY2NlcHRJbnNlY3VyZUNlcnRzID0gKmFjY2VwdEluc2VjdXJlQ2VydHM7CisKKyAgICBh
dXRvIHNldFdpbmRvd1JlY3QgPSBtYXRjaGVkQ2FwYWJpbGl0aWVzLmdldEJvb2xlYW4oInNldFdp
bmRvd1JlY3QiX3MpOworICAgIGlmIChzZXRXaW5kb3dSZWN0KQorICAgICAgICBjYXBhYmlsaXRp
ZXMuc2V0V2luZG93UmVjdCA9ICpzZXRXaW5kb3dSZWN0OworCisgICAgYXV0byBicm93c2VyTmFt
ZSA9IG1hdGNoZWRDYXBhYmlsaXRpZXMuZ2V0U3RyaW5nKCJicm93c2VyTmFtZSJfcyk7CisgICAg
aWYgKCEhYnJvd3Nlck5hbWUpCiAgICAgICAgIGNhcGFiaWxpdGllcy5icm93c2VyTmFtZSA9IGJy
b3dzZXJOYW1lOwotICAgIFN0cmluZyBicm93c2VyVmVyc2lvbjsKLSAgICBpZiAobWF0Y2hlZENh
cGFiaWxpdGllcy5nZXRTdHJpbmcoImJyb3dzZXJWZXJzaW9uIl9zLCBicm93c2VyVmVyc2lvbikp
CisKKyAgICBhdXRvIGJyb3dzZXJWZXJzaW9uID0gbWF0Y2hlZENhcGFiaWxpdGllcy5nZXRTdHJp
bmcoImJyb3dzZXJWZXJzaW9uIl9zKTsKKyAgICBpZiAoISFicm93c2VyVmVyc2lvbikKICAgICAg
ICAgY2FwYWJpbGl0aWVzLmJyb3dzZXJWZXJzaW9uID0gYnJvd3NlclZlcnNpb247Ci0gICAgU3Ry
aW5nIHBsYXRmb3JtTmFtZTsKLSAgICBpZiAobWF0Y2hlZENhcGFiaWxpdGllcy5nZXRTdHJpbmco
InBsYXRmb3JtTmFtZSJfcywgcGxhdGZvcm1OYW1lKSkKKworICAgIGF1dG8gcGxhdGZvcm1OYW1l
ID0gbWF0Y2hlZENhcGFiaWxpdGllcy5nZXRTdHJpbmcoInBsYXRmb3JtTmFtZSJfcyk7CisgICAg
aWYgKCEhcGxhdGZvcm1OYW1lKQogICAgICAgICBjYXBhYmlsaXRpZXMucGxhdGZvcm1OYW1lID0g
cGxhdGZvcm1OYW1lOwotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHByb3h5OwotICAgIGlmICht
YXRjaGVkQ2FwYWJpbGl0aWVzLmdldE9iamVjdCgicHJveHkiX3MsIHByb3h5KSkKKworICAgIGF1
dG8gcHJveHkgPSBtYXRjaGVkQ2FwYWJpbGl0aWVzLmdldE9iamVjdCgicHJveHkiX3MpOworICAg
IGlmIChwcm94eSkKICAgICAgICAgY2FwYWJpbGl0aWVzLnByb3h5ID0gZGVzZXJpYWxpemVQcm94
eSgqcHJveHkpOwotICAgIGJvb2wgc3RyaWN0RmlsZUludGVyYWN0YWJpbGl0eTsKLSAgICBpZiAo
bWF0Y2hlZENhcGFiaWxpdGllcy5nZXRCb29sZWFuKCJzdHJpY3RGaWxlSW50ZXJhY3RhYmlsaXR5
Il9zLCBzdHJpY3RGaWxlSW50ZXJhY3RhYmlsaXR5KSkKLSAgICAgICAgY2FwYWJpbGl0aWVzLnN0
cmljdEZpbGVJbnRlcmFjdGFiaWxpdHkgPSBzdHJpY3RGaWxlSW50ZXJhY3RhYmlsaXR5OwotICAg
IFJlZlB0cjxKU09OOjpPYmplY3Q+IHRpbWVvdXRzOwotICAgIGlmIChtYXRjaGVkQ2FwYWJpbGl0
aWVzLmdldE9iamVjdCgidGltZW91dHMiX3MsIHRpbWVvdXRzKSkKKworICAgIGF1dG8gc3RyaWN0
RmlsZUludGVyYWN0YWJpbGl0eSA9IG1hdGNoZWRDYXBhYmlsaXRpZXMuZ2V0Qm9vbGVhbigic3Ry
aWN0RmlsZUludGVyYWN0YWJpbGl0eSJfcyk7CisgICAgaWYgKHN0cmljdEZpbGVJbnRlcmFjdGFi
aWxpdHkpCisgICAgICAgIGNhcGFiaWxpdGllcy5zdHJpY3RGaWxlSW50ZXJhY3RhYmlsaXR5ID0g
KnN0cmljdEZpbGVJbnRlcmFjdGFiaWxpdHk7CisKKyAgICBhdXRvIHRpbWVvdXRzID0gbWF0Y2hl
ZENhcGFiaWxpdGllcy5nZXRPYmplY3QoInRpbWVvdXRzIl9zKTsKKyAgICBpZiAodGltZW91dHMp
CiAgICAgICAgIGNhcGFiaWxpdGllcy50aW1lb3V0cyA9IGRlc2VyaWFsaXplVGltZW91dHMoKnRp
bWVvdXRzLCBJZ25vcmVVbmtub3duVGltZW91dDo6Tm8pOwotICAgIFN0cmluZyBwYWdlTG9hZFN0
cmF0ZWd5OwotICAgIGlmIChtYXRjaGVkQ2FwYWJpbGl0aWVzLmdldFN0cmluZygicGFnZUxvYWRT
dHJhdGVneSJfcywgcGFnZUxvYWRTdHJhdGVneSkpCisKKyAgICBhdXRvIHBhZ2VMb2FkU3RyYXRl
Z3kgPSBtYXRjaGVkQ2FwYWJpbGl0aWVzLmdldFN0cmluZygicGFnZUxvYWRTdHJhdGVneSJfcyk7
CisgICAgaWYgKCEhcGFnZUxvYWRTdHJhdGVneSkKICAgICAgICAgY2FwYWJpbGl0aWVzLnBhZ2VM
b2FkU3RyYXRlZ3kgPSBkZXNlcmlhbGl6ZVBhZ2VMb2FkU3RyYXRlZ3kocGFnZUxvYWRTdHJhdGVn
eSk7Ci0gICAgU3RyaW5nIHVuaGFuZGxlZFByb21wdEJlaGF2aW9yOwotICAgIGlmIChtYXRjaGVk
Q2FwYWJpbGl0aWVzLmdldFN0cmluZygidW5oYW5kbGVkUHJvbXB0QmVoYXZpb3IiX3MsIHVuaGFu
ZGxlZFByb21wdEJlaGF2aW9yKSkKKworICAgIGF1dG8gdW5oYW5kbGVkUHJvbXB0QmVoYXZpb3Ig
PSBtYXRjaGVkQ2FwYWJpbGl0aWVzLmdldFN0cmluZygidW5oYW5kbGVkUHJvbXB0QmVoYXZpb3Ii
X3MpOworICAgIGlmICghIXVuaGFuZGxlZFByb21wdEJlaGF2aW9yKQogICAgICAgICBjYXBhYmls
aXRpZXMudW5oYW5kbGVkUHJvbXB0QmVoYXZpb3IgPSBkZXNlcmlhbGl6ZVVuaGFuZGxlZFByb21w
dEJlaGF2aW9yKHVuaGFuZGxlZFByb21wdEJlaGF2aW9yKTsKKwogICAgIHBsYXRmb3JtUGFyc2VD
YXBhYmlsaXRpZXMobWF0Y2hlZENhcGFiaWxpdGllcywgY2FwYWJpbGl0aWVzKTsKIH0KIAogYm9v
bCBXZWJEcml2ZXJTZXJ2aWNlOjpmaW5kU2Vzc2lvbk9yQ29tcGxldGVXaXRoRXJyb3IoSlNPTjo6
T2JqZWN0JiBwYXJhbWV0ZXJzLCBGdW5jdGlvbjx2b2lkIChDb21tYW5kUmVzdWx0JiYpPiYgY29t
cGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgU3RyaW5nIHNlc3Npb25JRDsKLSAgICBpZiAoIXBhcmFt
ZXRlcnMuZ2V0U3RyaW5nKCJzZXNzaW9uSWQiX3MsIHNlc3Npb25JRCkpIHsKKyAgICBhdXRvIHNl
c3Npb25JRCA9IHBhcmFtZXRlcnMuZ2V0U3RyaW5nKCJzZXNzaW9uSWQiX3MpOworICAgIGlmICgh
c2Vzc2lvbklEKSB7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZh
aWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpJbnZhbGlkQXJndW1lbnQpKTsKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTUzMCw1MCArNTQwLDUwIEBAIFJlZlB0cjxKU09OOjpP
YmplY3Q+IFdlYkRyaXZlclNlcnZpY2U6OnZhbGlkYXRlZENhcGFiaWxpdGllcyhjb25zdCBKU09O
OjpPYmplY3QmCiB7CiAgICAgLy8gwqc3LjIgUHJvY2Vzc2luZyBDYXBhYmlsaXRpZXMuCiAgICAg
Ly8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmRyaXZlci93ZWJkcml2ZXItc3BlYy5odG1sI2Rm
bi12YWxpZGF0ZS1jYXBhYmlsaXRpZXMKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiByZXN1bHQg
PSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGF1dG8gcmVzdWx0ID0gSlNPTjo6T2JqZWN0
OjpjcmVhdGUoKTsKICAgICBhdXRvIGVuZCA9IGNhcGFiaWxpdGllcy5lbmQoKTsKICAgICBmb3Ig
KGF1dG8gaXQgPSBjYXBhYmlsaXRpZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAg
ICAgIGlmIChpdC0+dmFsdWUtPmlzTnVsbCgpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgIGlmIChpdC0+a2V5ID09ICJhY2NlcHRJbnNlY3VyZUNlcnRzIikgewotICAgICAgICAgICAg
Ym9vbCBhY2NlcHRJbnNlY3VyZUNlcnRzOwotICAgICAgICAgICAgaWYgKCFpdC0+dmFsdWUtPmFz
Qm9vbGVhbihhY2NlcHRJbnNlY3VyZUNlcnRzKSkKKyAgICAgICAgICAgIGF1dG8gYWNjZXB0SW5z
ZWN1cmVDZXJ0cyA9IGl0LT52YWx1ZS0+YXNCb29sZWFuKCk7CisgICAgICAgICAgICBpZiAoIWFj
Y2VwdEluc2VjdXJlQ2VydHMpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAg
ICAgICAgICByZXN1bHQtPnNldEJvb2xlYW4oaXQtPmtleSwgYWNjZXB0SW5zZWN1cmVDZXJ0cyk7
CisgICAgICAgICAgICByZXN1bHQtPnNldEJvb2xlYW4oaXQtPmtleSwgKmFjY2VwdEluc2VjdXJl
Q2VydHMpOwogICAgICAgICB9IGVsc2UgaWYgKGl0LT5rZXkgPT0gImJyb3dzZXJOYW1lIiB8fCBp
dC0+a2V5ID09ICJicm93c2VyVmVyc2lvbiIgfHwgaXQtPmtleSA9PSAicGxhdGZvcm1OYW1lIikg
ewotICAgICAgICAgICAgU3RyaW5nIHN0cmluZ1ZhbHVlOwotICAgICAgICAgICAgaWYgKCFpdC0+
dmFsdWUtPmFzU3RyaW5nKHN0cmluZ1ZhbHVlKSkKKyAgICAgICAgICAgIGF1dG8gc3RyaW5nVmFs
dWUgPSBpdC0+dmFsdWUtPmFzU3RyaW5nKCk7CisgICAgICAgICAgICBpZiAoIXN0cmluZ1ZhbHVl
KQogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICAgICAgcmVzdWx0LT5z
ZXRTdHJpbmcoaXQtPmtleSwgc3RyaW5nVmFsdWUpOwogICAgICAgICB9IGVsc2UgaWYgKGl0LT5r
ZXkgPT0gInBhZ2VMb2FkU3RyYXRlZ3kiKSB7Ci0gICAgICAgICAgICBTdHJpbmcgcGFnZUxvYWRT
dHJhdGVneTsKLSAgICAgICAgICAgIGlmICghaXQtPnZhbHVlLT5hc1N0cmluZyhwYWdlTG9hZFN0
cmF0ZWd5KSB8fCAhZGVzZXJpYWxpemVQYWdlTG9hZFN0cmF0ZWd5KHBhZ2VMb2FkU3RyYXRlZ3kp
KQorICAgICAgICAgICAgYXV0byBwYWdlTG9hZFN0cmF0ZWd5ID0gaXQtPnZhbHVlLT5hc1N0cmlu
ZygpOworICAgICAgICAgICAgaWYgKCFwYWdlTG9hZFN0cmF0ZWd5IHx8ICFkZXNlcmlhbGl6ZVBh
Z2VMb2FkU3RyYXRlZ3kocGFnZUxvYWRTdHJhdGVneSkpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgICAgICAgICByZXN1bHQtPnNldFN0cmluZyhpdC0+a2V5LCBwYWdlTG9h
ZFN0cmF0ZWd5KTsKICAgICAgICAgfSBlbHNlIGlmIChpdC0+a2V5ID09ICJwcm94eSIpIHsKLSAg
ICAgICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHByb3h5OwotICAgICAgICAgICAgaWYgKCFp
dC0+dmFsdWUtPmFzT2JqZWN0KHByb3h5KSB8fCAhZGVzZXJpYWxpemVQcm94eSgqcHJveHkpKQor
ICAgICAgICAgICAgYXV0byBwcm94eSA9IGl0LT52YWx1ZS0+YXNPYmplY3QoKTsKKyAgICAgICAg
ICAgIGlmICghcHJveHkgfHwgIWRlc2VyaWFsaXplUHJveHkoKnByb3h5KSkKICAgICAgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0VmFsdWUoaXQtPmtl
eSwgUmVmUHRyPEpTT046OlZhbHVlPihpdC0+dmFsdWUpKTsKKyAgICAgICAgICAgIHJlc3VsdC0+
c2V0VmFsdWUoaXQtPmtleSwgKnByb3h5KTsKICAgICAgICAgfSBlbHNlIGlmIChpdC0+a2V5ID09
ICJzdHJpY3RGaWxlSW50ZXJhY3RhYmlsaXR5IikgewotICAgICAgICAgICAgYm9vbCBzdHJpY3RG
aWxlSW50ZXJhY3RhYmlsaXR5OwotICAgICAgICAgICAgaWYgKCFpdC0+dmFsdWUtPmFzQm9vbGVh
bihzdHJpY3RGaWxlSW50ZXJhY3RhYmlsaXR5KSkKKyAgICAgICAgICAgIGF1dG8gc3RyaWN0Rmls
ZUludGVyYWN0YWJpbGl0eSA9IGl0LT52YWx1ZS0+YXNCb29sZWFuKCk7CisgICAgICAgICAgICBp
ZiAoIXN0cmljdEZpbGVJbnRlcmFjdGFiaWxpdHkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0gICAgICAgICAgICByZXN1bHQtPnNldEJvb2xlYW4oaXQtPmtleSwgc3RyaWN0Rmls
ZUludGVyYWN0YWJpbGl0eSk7CisgICAgICAgICAgICByZXN1bHQtPnNldEJvb2xlYW4oaXQtPmtl
eSwgKnN0cmljdEZpbGVJbnRlcmFjdGFiaWxpdHkpOwogICAgICAgICB9IGVsc2UgaWYgKGl0LT5r
ZXkgPT0gInRpbWVvdXRzIikgewotICAgICAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gdGlt
ZW91dHM7Ci0gICAgICAgICAgICBpZiAoIWl0LT52YWx1ZS0+YXNPYmplY3QodGltZW91dHMpIHx8
ICFkZXNlcmlhbGl6ZVRpbWVvdXRzKCp0aW1lb3V0cywgSWdub3JlVW5rbm93blRpbWVvdXQ6Ok5v
KSkKKyAgICAgICAgICAgIGF1dG8gdGltZW91dHMgPSBpdC0+dmFsdWUtPmFzT2JqZWN0KCk7Cisg
ICAgICAgICAgICBpZiAoIXRpbWVvdXRzIHx8ICFkZXNlcmlhbGl6ZVRpbWVvdXRzKCp0aW1lb3V0
cywgSWdub3JlVW5rbm93blRpbWVvdXQ6Ok5vKSkKICAgICAgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0VmFsdWUoaXQtPmtleSwgUmVmUHRyPEpTT046
OlZhbHVlPihpdC0+dmFsdWUpKTsKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0VmFsdWUoaXQtPmtl
eSwgKnRpbWVvdXRzKTsKICAgICAgICAgfSBlbHNlIGlmIChpdC0+a2V5ID09ICJ1bmhhbmRsZWRQ
cm9tcHRCZWhhdmlvciIpIHsKLSAgICAgICAgICAgIFN0cmluZyB1bmhhbmRsZWRQcm9tcHRCZWhh
dmlvcjsKLSAgICAgICAgICAgIGlmICghaXQtPnZhbHVlLT5hc1N0cmluZyh1bmhhbmRsZWRQcm9t
cHRCZWhhdmlvcikgfHwgIWRlc2VyaWFsaXplVW5oYW5kbGVkUHJvbXB0QmVoYXZpb3IodW5oYW5k
bGVkUHJvbXB0QmVoYXZpb3IpKQorICAgICAgICAgICAgYXV0byB1bmhhbmRsZWRQcm9tcHRCZWhh
dmlvciA9IGl0LT52YWx1ZS0+YXNTdHJpbmcoKTsKKyAgICAgICAgICAgIGlmICghdW5oYW5kbGVk
UHJvbXB0QmVoYXZpb3IgfHwgIWRlc2VyaWFsaXplVW5oYW5kbGVkUHJvbXB0QmVoYXZpb3IodW5o
YW5kbGVkUHJvbXB0QmVoYXZpb3IpKQogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwog
ICAgICAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoaXQtPmtleSwgdW5oYW5kbGVkUHJvbXB0QmVo
YXZpb3IpOwogICAgICAgICB9IGVsc2UgaWYgKGl0LT5rZXkuZmluZCgiOiIpICE9IG5vdEZvdW5k
KSB7CiAgICAgICAgICAgICBpZiAoIXBsYXRmb3JtVmFsaWRhdGVDYXBhYmlsaXR5KGl0LT5rZXks
IGl0LT52YWx1ZSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgICAg
ICByZXN1bHQtPnNldFZhbHVlKGl0LT5rZXksIFJlZlB0cjxKU09OOjpWYWx1ZT4oaXQtPnZhbHVl
KSk7CisgICAgICAgICAgICByZXN1bHQtPnNldFZhbHVlKGl0LT5rZXksIGl0LT52YWx1ZS5jb3B5
UmVmKCkpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAg
IH0KQEAgLTU4NCwxNCArNTk0LDE0IEBAIFJlZlB0cjxKU09OOjpPYmplY3Q+IFdlYkRyaXZlclNl
cnZpY2U6Om1lcmdlQ2FwYWJpbGl0aWVzKGNvbnN0IEpTT046Ok9iamVjdCYgcmVxCiB7CiAgICAg
Ly8gwqc3LjIgUHJvY2Vzc2luZyBDYXBhYmlsaXRpZXMuCiAgICAgLy8gaHR0cHM6Ly93M2MuZ2l0
aHViLmlvL3dlYmRyaXZlci93ZWJkcml2ZXItc3BlYy5odG1sI2Rmbi1tZXJnaW5nLWNhcGFiaWxp
dGllcwotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3Jl
YXRlKCk7CisgICAgYXV0byByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgIGF1
dG8gcmVxdWlyZWRFbmQgPSByZXF1aXJlZENhcGFiaWxpdGllcy5lbmQoKTsKICAgICBmb3IgKGF1
dG8gaXQgPSByZXF1aXJlZENhcGFiaWxpdGllcy5iZWdpbigpOyBpdCAhPSByZXF1aXJlZEVuZDsg
KytpdCkKLSAgICAgICAgcmVzdWx0LT5zZXRWYWx1ZShpdC0+a2V5LCBSZWZQdHI8SlNPTjo6VmFs
dWU+KGl0LT52YWx1ZSkpOworICAgICAgICByZXN1bHQtPnNldFZhbHVlKGl0LT5rZXksIGl0LT52
YWx1ZS5jb3B5UmVmKCkpOwogCiAgICAgYXV0byBmaXJzdE1hdGNoRW5kID0gZmlyc3RNYXRjaENh
cGFiaWxpdGllcy5lbmQoKTsKICAgICBmb3IgKGF1dG8gaXQgPSBmaXJzdE1hdGNoQ2FwYWJpbGl0
aWVzLmJlZ2luKCk7IGl0ICE9IGZpcnN0TWF0Y2hFbmQ7ICsraXQpCi0gICAgICAgIHJlc3VsdC0+
c2V0VmFsdWUoaXQtPmtleSwgUmVmUHRyPEpTT046OlZhbHVlPihpdC0+dmFsdWUpKTsKKyAgICAg
ICAgcmVzdWx0LT5zZXRWYWx1ZShpdC0+a2V5LCBpdC0+dmFsdWUuY29weVJlZigpKTsKIAogICAg
IHJldHVybiByZXN1bHQ7CiB9CkBAIC02MDQsNyArNjE0LDcgQEAgUmVmUHRyPEpTT046Ok9iamVj
dD4gV2ViRHJpdmVyU2VydmljZTo6bWF0Y2hDYXBhYmlsaXRpZXMoY29uc3QgSlNPTjo6T2JqZWN0
JiBtZXIKIAogICAgIC8vIFNvbWUgY2FwYWJpbGl0aWVzIGxpa2UgYnJvd3NlciBuYW1lIGFuZCB2
ZXJzaW9uIG1pZ2h0IG5lZWQgdG8gbGF1bmNoIHRoZSBicm93c2VyLAogICAgIC8vIHNvIHdlIG9u
bHkgcmVqZWN0IHRoZSBrbm93biBjYXBhYmlsaXRpZXMgdGhhdCBkb24ndCBtYXRjaC4KLSAgICBS
ZWZQdHI8SlNPTjo6T2JqZWN0PiBtYXRjaGVkQ2FwYWJpbGl0aWVzID0gSlNPTjo6T2JqZWN0Ojpj
cmVhdGUoKTsKKyAgICBhdXRvIG1hdGNoZWRDYXBhYmlsaXRpZXMgPSBKU09OOjpPYmplY3Q6OmNy
ZWF0ZSgpOwogICAgIGlmIChwbGF0Zm9ybUNhcGFiaWxpdGllcy5icm93c2VyTmFtZSkKICAgICAg
ICAgbWF0Y2hlZENhcGFiaWxpdGllcy0+c2V0U3RyaW5nKCJicm93c2VyTmFtZSJfcywgcGxhdGZv
cm1DYXBhYmlsaXRpZXMuYnJvd3Nlck5hbWUudmFsdWUoKSk7CiAgICAgaWYgKHBsYXRmb3JtQ2Fw
YWJpbGl0aWVzLmJyb3dzZXJWZXJzaW9uKQpAQCAtNjIxLDM1ICs2MzEsMjggQEAgUmVmUHRyPEpT
T046Ok9iamVjdD4gV2ViRHJpdmVyU2VydmljZTo6bWF0Y2hDYXBhYmlsaXRpZXMoY29uc3QgSlNP
Tjo6T2JqZWN0JiBtZXIKICAgICBhdXRvIGVuZCA9IG1lcmdlZENhcGFiaWxpdGllcy5lbmQoKTsK
ICAgICBmb3IgKGF1dG8gaXQgPSBtZXJnZWRDYXBhYmlsaXRpZXMuYmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KSB7CiAgICAgICAgIGlmIChpdC0+a2V5ID09ICJicm93c2VyTmFtZSIgJiYgcGxhdGZv
cm1DYXBhYmlsaXRpZXMuYnJvd3Nlck5hbWUpIHsKLSAgICAgICAgICAgIFN0cmluZyBicm93c2Vy
TmFtZTsKLSAgICAgICAgICAgIGl0LT52YWx1ZS0+YXNTdHJpbmcoYnJvd3Nlck5hbWUpOworICAg
ICAgICAgICAgYXV0byBicm93c2VyTmFtZSA9IGl0LT52YWx1ZS0+YXNTdHJpbmcoKTsKICAgICAg
ICAgICAgIGlmICghZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShwbGF0Zm9ybUNhcGFiaWxpdGllcy5i
cm93c2VyTmFtZS52YWx1ZSgpLCBicm93c2VyTmFtZSkpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgICAgIH0gZWxzZSBpZiAoaXQtPmtleSA9PSAiYnJvd3NlclZlcnNpb24i
ICYmIHBsYXRmb3JtQ2FwYWJpbGl0aWVzLmJyb3dzZXJWZXJzaW9uKSB7Ci0gICAgICAgICAgICBT
dHJpbmcgYnJvd3NlclZlcnNpb247Ci0gICAgICAgICAgICBpdC0+dmFsdWUtPmFzU3RyaW5nKGJy
b3dzZXJWZXJzaW9uKTsKKyAgICAgICAgICAgIGF1dG8gYnJvd3NlclZlcnNpb24gPSBpdC0+dmFs
dWUtPmFzU3RyaW5nKCk7CiAgICAgICAgICAgICBpZiAoIXBsYXRmb3JtQ29tcGFyZUJyb3dzZXJW
ZXJzaW9ucyhicm93c2VyVmVyc2lvbiwgcGxhdGZvcm1DYXBhYmlsaXRpZXMuYnJvd3NlclZlcnNp
b24udmFsdWUoKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIH0g
ZWxzZSBpZiAoaXQtPmtleSA9PSAicGxhdGZvcm1OYW1lIiAmJiBwbGF0Zm9ybUNhcGFiaWxpdGll
cy5wbGF0Zm9ybU5hbWUpIHsKLSAgICAgICAgICAgIFN0cmluZyBwbGF0Zm9ybU5hbWU7Ci0gICAg
ICAgICAgICBpdC0+dmFsdWUtPmFzU3RyaW5nKHBsYXRmb3JtTmFtZSk7CisgICAgICAgICAgICBh
dXRvIHBsYXRmb3JtTmFtZSA9IGl0LT52YWx1ZS0+YXNTdHJpbmcoKTsKICAgICAgICAgICAgIGlm
ICghZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UocGxhdGZvcm1OYW1lLCAiYW55IikgJiYg
cGxhdGZvcm1DYXBhYmlsaXRpZXMucGxhdGZvcm1OYW1lLnZhbHVlKCkgIT0gcGxhdGZvcm1OYW1l
KQogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICB9IGVsc2UgaWYgKGl0
LT5rZXkgPT0gImFjY2VwdEluc2VjdXJlQ2VydHMiICYmIHBsYXRmb3JtQ2FwYWJpbGl0aWVzLmFj
Y2VwdEluc2VjdXJlQ2VydHMpIHsKLSAgICAgICAgICAgIGJvb2wgYWNjZXB0SW5zZWN1cmVDZXJ0
czsKLSAgICAgICAgICAgIGl0LT52YWx1ZS0+YXNCb29sZWFuKGFjY2VwdEluc2VjdXJlQ2VydHMp
OworICAgICAgICAgICAgYXV0byBhY2NlcHRJbnNlY3VyZUNlcnRzID0gaXQtPnZhbHVlLT5hc0Jv
b2xlYW4oKTsKICAgICAgICAgICAgIGlmIChhY2NlcHRJbnNlY3VyZUNlcnRzICYmICFwbGF0Zm9y
bUNhcGFiaWxpdGllcy5hY2NlcHRJbnNlY3VyZUNlcnRzLnZhbHVlKCkpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIH0gZWxzZSBpZiAoaXQtPmtleSA9PSAicHJveHki
KSB7Ci0gICAgICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwcm94eTsKLSAgICAgICAgICAg
IGl0LT52YWx1ZS0+YXNPYmplY3QocHJveHkpOwotICAgICAgICAgICAgU3RyaW5nIHByb3h5VHlw
ZTsKLSAgICAgICAgICAgIHByb3h5LT5nZXRTdHJpbmcoInByb3h5VHlwZSJfcywgcHJveHlUeXBl
KTsKKyAgICAgICAgICAgIGF1dG8gcHJveHlUeXBlID0gaXQtPnZhbHVlLT5hc09iamVjdCgpLT5n
ZXRTdHJpbmcoInByb3h5VHlwZSJfcyk7CiAgICAgICAgICAgICBpZiAoIXBsYXRmb3JtU3VwcG9y
dFByb3h5VHlwZShwcm94eVR5cGUpKQogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwog
ICAgICAgICB9IGVsc2UgaWYgKCFwbGF0Zm9ybU1hdGNoQ2FwYWJpbGl0eShpdC0+a2V5LCBpdC0+
dmFsdWUpKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIG1hdGNoZWRDYXBh
YmlsaXRpZXMtPnNldFZhbHVlKGl0LT5rZXksIFJlZlB0cjxKU09OOjpWYWx1ZT4oaXQtPnZhbHVl
KSk7CisgICAgICAgIG1hdGNoZWRDYXBhYmlsaXRpZXMtPnNldFZhbHVlKGl0LT5rZXksIGl0LT52
YWx1ZS5jb3B5UmVmKCkpOwogICAgIH0KIAogICAgIHJldHVybiBtYXRjaGVkQ2FwYWJpbGl0aWVz
OwpAQCAtNjYxLDE5ICs2NjQsMTkgQEAgVmVjdG9yPENhcGFiaWxpdGllcz4gV2ViRHJpdmVyU2Vy
dmljZTo6cHJvY2Vzc0NhcGFiaWxpdGllcyhjb25zdCBKU09OOjpPYmplY3QmIHAKICAgICAvLyBo
dHRwczovL3czYy5naXRodWIuaW8vd2ViZHJpdmVyL3dlYmRyaXZlci1zcGVjLmh0bWwjcHJvY2Vz
c2luZy1jYXBhYmlsaXRpZXMKIAogICAgIC8vIDEuIExldCBjYXBhYmlsaXRpZXMgcmVxdWVzdCBi
ZSB0aGUgcmVzdWx0IG9mIGdldHRpbmcgdGhlIHByb3BlcnR5ICJjYXBhYmlsaXRpZXMiIGZyb20g
cGFyYW1ldGVycy4KLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBjYXBhYmlsaXRpZXNPYmplY3Q7
Ci0gICAgaWYgKCFwYXJhbWV0ZXJzLmdldE9iamVjdCgiY2FwYWJpbGl0aWVzIl9zLCBjYXBhYmls
aXRpZXNPYmplY3QpKSB7CisgICAgYXV0byBjYXBhYmlsaXRpZXNPYmplY3QgPSBwYXJhbWV0ZXJz
LmdldE9iamVjdCgiY2FwYWJpbGl0aWVzIl9zKTsKKyAgICBpZiAoIWNhcGFiaWxpdGllc09iamVj
dCkgewogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1h
bmRSZXN1bHQ6OkVycm9yQ29kZTo6SW52YWxpZEFyZ3VtZW50KSk7CiAgICAgICAgIHJldHVybiB7
IH07CiAgICAgfQogCiAgICAgLy8gMi4gTGV0IHJlcXVpcmVkIGNhcGFiaWxpdGllcyBiZSB0aGUg
cmVzdWx0IG9mIGdldHRpbmcgdGhlIHByb3BlcnR5ICJhbHdheXNNYXRjaCIgZnJvbSBjYXBhYmls
aXRpZXMgcmVxdWVzdC4KLSAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHJlcXVpcmVkQ2FwYWJpbGl0
aWVzVmFsdWU7CiAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcmVxdWlyZWRDYXBhYmlsaXRpZXM7
Ci0gICAgaWYgKCFjYXBhYmlsaXRpZXNPYmplY3QtPmdldFZhbHVlKCJhbHdheXNNYXRjaCJfcywg
cmVxdWlyZWRDYXBhYmlsaXRpZXNWYWx1ZSkpCisgICAgYXV0byByZXF1aXJlZENhcGFiaWxpdGll
c1ZhbHVlID0gY2FwYWJpbGl0aWVzT2JqZWN0LT5nZXRWYWx1ZSgiYWx3YXlzTWF0Y2giX3MpOwor
ICAgIGlmICghcmVxdWlyZWRDYXBhYmlsaXRpZXNWYWx1ZSkgewogICAgICAgICAvLyAyLjEuIElm
IHJlcXVpcmVkIGNhcGFiaWxpdGllcyBpcyB1bmRlZmluZWQsIHNldCB0aGUgdmFsdWUgdG8gYW4g
ZW1wdHkgSlNPTiBPYmplY3QuCiAgICAgICAgIHJlcXVpcmVkQ2FwYWJpbGl0aWVzID0gSlNPTjo6
T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBlbHNlIGlmICghcmVxdWlyZWRDYXBhYmlsaXRpZXNWYWx1
ZS0+YXNPYmplY3QocmVxdWlyZWRDYXBhYmlsaXRpZXMpKSB7CisgICAgfSBlbHNlIGlmICghKHJl
cXVpcmVkQ2FwYWJpbGl0aWVzID0gcmVxdWlyZWRDYXBhYmlsaXRpZXNWYWx1ZS0+YXNPYmplY3Qo
KSkpIHsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21t
YW5kUmVzdWx0OjpFcnJvckNvZGU6OkludmFsaWRBcmd1bWVudCwgU3RyaW5nKCJhbHdheXNNYXRj
aCBpcyBpbnZhbGlkIGluIGNhcGFiaWxpdGllcyIpKSk7CiAgICAgICAgIHJldHVybiB7IH07CiAg
ICAgfQpAQCAtNjg2LDEzICs2ODksMTMgQEAgVmVjdG9yPENhcGFiaWxpdGllcz4gV2ViRHJpdmVy
U2VydmljZTo6cHJvY2Vzc0NhcGFiaWxpdGllcyhjb25zdCBKU09OOjpPYmplY3QmIHAKICAgICB9
CiAKICAgICAvLyAzLiBMZXQgYWxsIGZpcnN0IG1hdGNoIGNhcGFiaWxpdGllcyBiZSB0aGUgcmVz
dWx0IG9mIGdldHRpbmcgdGhlIHByb3BlcnR5ICJmaXJzdE1hdGNoIiBmcm9tIGNhcGFiaWxpdGll
cyByZXF1ZXN0LgotICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gZmlyc3RNYXRjaENhcGFiaWxpdGll
c1ZhbHVlOwogICAgIFJlZlB0cjxKU09OOjpBcnJheT4gZmlyc3RNYXRjaENhcGFiaWxpdGllc0xp
c3Q7Ci0gICAgaWYgKCFjYXBhYmlsaXRpZXNPYmplY3QtPmdldFZhbHVlKCJmaXJzdE1hdGNoIl9z
LCBmaXJzdE1hdGNoQ2FwYWJpbGl0aWVzVmFsdWUpKSB7CisgICAgYXV0byBmaXJzdE1hdGNoQ2Fw
YWJpbGl0aWVzVmFsdWUgPSBjYXBhYmlsaXRpZXNPYmplY3QtPmdldFZhbHVlKCJmaXJzdE1hdGNo
Il9zKTsKKyAgICBpZiAoIWZpcnN0TWF0Y2hDYXBhYmlsaXRpZXNWYWx1ZSkgewogICAgICAgICAv
LyAzLjEuIElmIGFsbCBmaXJzdCBtYXRjaCBjYXBhYmlsaXRpZXMgaXMgdW5kZWZpbmVkLCBzZXQg
dGhlIHZhbHVlIHRvIGEgSlNPTiBMaXN0IHdpdGggYSBzaW5nbGUgZW50cnkgb2YgYW4gZW1wdHkg
SlNPTiBPYmplY3QuCiAgICAgICAgIGZpcnN0TWF0Y2hDYXBhYmlsaXRpZXNMaXN0ID0gSlNPTjo6
QXJyYXk6OmNyZWF0ZSgpOwogICAgICAgICBmaXJzdE1hdGNoQ2FwYWJpbGl0aWVzTGlzdC0+cHVz
aE9iamVjdChKU09OOjpPYmplY3Q6OmNyZWF0ZSgpKTsKLSAgICB9IGVsc2UgaWYgKCFmaXJzdE1h
dGNoQ2FwYWJpbGl0aWVzVmFsdWUtPmFzQXJyYXkoZmlyc3RNYXRjaENhcGFiaWxpdGllc0xpc3Qp
KSB7CisgICAgfSBlbHNlIGlmICghKGZpcnN0TWF0Y2hDYXBhYmlsaXRpZXNMaXN0ID0gZmlyc3RN
YXRjaENhcGFiaWxpdGllc1ZhbHVlLT5hc0FycmF5KCkpKSB7CiAgICAgICAgIC8vIDMuMi4gSWYg
YWxsIGZpcnN0IG1hdGNoIGNhcGFiaWxpdGllcyBpcyBub3QgYSBKU09OIExpc3QsIHJldHVybiBl
cnJvciB3aXRoIGVycm9yIGNvZGUgaW52YWxpZCBhcmd1bWVudC4KICAgICAgICAgY29tcGxldGlv
bkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6Oklu
dmFsaWRBcmd1bWVudCwgU3RyaW5nKCJmaXJzdE1hdGNoIGlzIGludmFsaWQgaW4gY2FwYWJpbGl0
aWVzIikpKTsKICAgICAgICAgcmV0dXJuIHsgfTsKQEAgLTcwNCw5ICs3MDcsOCBAQCBWZWN0b3I8
Q2FwYWJpbGl0aWVzPiBXZWJEcml2ZXJTZXJ2aWNlOjpwcm9jZXNzQ2FwYWJpbGl0aWVzKGNvbnN0
IEpTT046Ok9iamVjdCYgcAogICAgIHZhbGlkYXRlZEZpcnN0TWF0Y2hDYXBhYmlsaXRpZXNMaXN0
LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoZmlyc3RNYXRjaENhcGFiaWxpdGllc0xpc3RMZW5ndGgp
OwogICAgIC8vIDUuIEZvciBlYWNoIGZpcnN0IG1hdGNoIGNhcGFiaWxpdGllcyBjb3JyZXNwb25k
aW5nIHRvIGFuIGluZGV4ZWQgcHJvcGVydHkgaW4gYWxsIGZpcnN0IG1hdGNoIGNhcGFiaWxpdGll
cy4KICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZmlyc3RNYXRjaENhcGFiaWxpdGllc0xp
c3RMZW5ndGg7ICsraSkgewotICAgICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IGZpcnN0TWF0Y2hD
YXBhYmlsaXRpZXNWYWx1ZSA9IGZpcnN0TWF0Y2hDYXBhYmlsaXRpZXNMaXN0LT5nZXQoaSk7Ci0g
ICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IGZpcnN0TWF0Y2hDYXBhYmlsaXRpZXM7Ci0gICAg
ICAgIGlmICghZmlyc3RNYXRjaENhcGFiaWxpdGllc1ZhbHVlLT5hc09iamVjdChmaXJzdE1hdGNo
Q2FwYWJpbGl0aWVzKSkgeworICAgICAgICBhdXRvIGZpcnN0TWF0Y2hDYXBhYmlsaXRpZXMgPSBm
aXJzdE1hdGNoQ2FwYWJpbGl0aWVzTGlzdC0+Z2V0KGkpLT5hc09iamVjdCgpOworICAgICAgICBp
ZiAoIWZpcnN0TWF0Y2hDYXBhYmlsaXRpZXMpIHsKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5k
bGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpJbnZhbGlk
QXJndW1lbnQsIFN0cmluZygiSW52YWxpZCBjYXBhYmlsaXRpZXMgZm91bmQgaW4gZmlyc3RNYXRj
aCIpKSk7CiAgICAgICAgICAgICByZXR1cm4geyB9OwogICAgICAgICB9CkBAIC04MTUsOSArODE3
LDkgQEAgdm9pZCBXZWJEcml2ZXJTZXJ2aWNlOjpjcmVhdGVTZXNzaW9uKFZlY3RvcjxDYXBhYmls
aXRpZXM+JiYgY2FwYWJpbGl0aWVzTGlzdCwgc3QKIAogICAgICAgICAgICAgbV9zZXNzaW9uID0g
V1RGTW92ZShzZXNzaW9uKTsKIAotICAgICAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcmVz
dWx0T2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgICAgIGF1dG8gcmVz
dWx0T2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICAgICAgIHJlc3VsdE9i
amVjdC0+c2V0U3RyaW5nKCJzZXNzaW9uSWQiX3MsIG1fc2Vzc2lvbi0+aWQoKSk7Ci0gICAgICAg
ICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBjYXBhYmlsaXRpZXNPYmplY3QgPSBKU09OOjpPYmpl
Y3Q6OmNyZWF0ZSgpOworICAgICAgICAgICAgYXV0byBjYXBhYmlsaXRpZXNPYmplY3QgPSBKU09O
OjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICAgICAgY29uc3QgYXV0byYgY2FwYWJpbGl0aWVz
ID0gbV9zZXNzaW9uLT5jYXBhYmlsaXRpZXMoKTsKICAgICAgICAgICAgIGNhcGFiaWxpdGllc09i
amVjdC0+c2V0U3RyaW5nKCJicm93c2VyTmFtZSJfcywgY2FwYWJpbGl0aWVzLmJyb3dzZXJOYW1l
LnZhbHVlT3IoZW1wdHlTdHJpbmcoKSkpOwogICAgICAgICAgICAgY2FwYWJpbGl0aWVzT2JqZWN0
LT5zZXRTdHJpbmcoImJyb3dzZXJWZXJzaW9uIl9zLCBjYXBhYmlsaXRpZXMuYnJvd3NlclZlcnNp
b24udmFsdWVPcihlbXB0eVN0cmluZygpKSk7CkBAIC04NTUsNyArODU3LDcgQEAgdm9pZCBXZWJE
cml2ZXJTZXJ2aWNlOjpjcmVhdGVTZXNzaW9uKFZlY3RvcjxDYXBhYmlsaXRpZXM+JiYgY2FwYWJp
bGl0aWVzTGlzdCwgc3QKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmICghY2FwYWJpbGl0
aWVzLnByb3h5KQogICAgICAgICAgICAgICAgIGNhcGFiaWxpdGllc09iamVjdC0+c2V0T2JqZWN0
KCJwcm94eSJfcywgSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSk7Ci0gICAgICAgICAgICBSZWZQdHI8
SlNPTjo6T2JqZWN0PiB0aW1lb3V0c09iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Cisg
ICAgICAgICAgICBhdXRvIHRpbWVvdXRzT2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsK
ICAgICAgICAgICAgIGlmIChtX3Nlc3Npb24tPnNjcmlwdFRpbWVvdXQoKSA9PSBzdGQ6Om51bWVy
aWNfbGltaXRzPGRvdWJsZT46OmluZmluaXR5KCkpCiAgICAgICAgICAgICAgICAgdGltZW91dHNP
YmplY3QtPnNldFZhbHVlKCJzY3JpcHQiX3MsIEpTT046OlZhbHVlOjpudWxsKCkpOwogICAgICAg
ICAgICAgZWxzZQpAQCAtODc0LDggKzg3Niw4IEBAIHZvaWQgV2ViRHJpdmVyU2VydmljZTo6ZGVs
ZXRlU2Vzc2lvbihSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMsIEZ1bmN0aW9uCiB7
CiAgICAgLy8gwqc4LjIgRGVsZXRlIFNlc3Npb24uCiAgICAgLy8gaHR0cHM6Ly93d3cudzMub3Jn
L1RSL3dlYmRyaXZlci8jZGVsZXRlLXNlc3Npb24KLSAgICBTdHJpbmcgc2Vzc2lvbklEOwotICAg
IGlmICghcGFyYW1ldGVycy0+Z2V0U3RyaW5nKCJzZXNzaW9uSWQiX3MsIHNlc3Npb25JRCkpIHsK
KyAgICBhdXRvIHNlc3Npb25JRCA9IHBhcmFtZXRlcnMtPmdldFN0cmluZygic2Vzc2lvbklkIl9z
KTsKKyAgICBpZiAoIXNlc3Npb25JRCkgewogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21t
YW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6SW52YWxpZEFyZ3VtZW50
KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC05MzgsOCArOTQwLDggQEAgdm9pZCBXZWJE
cml2ZXJTZXJ2aWNlOjpnbyhSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMsIEZ1bmN0
aW9uPHZvaWQgKENvbW0KICAgICBpZiAoIWZpbmRTZXNzaW9uT3JDb21wbGV0ZVdpdGhFcnJvcigq
cGFyYW1ldGVycywgY29tcGxldGlvbkhhbmRsZXIpKQogICAgICAgICByZXR1cm47CiAKLSAgICBT
dHJpbmcgdXJsOwotICAgIGlmICghcGFyYW1ldGVycy0+Z2V0U3RyaW5nKCJ1cmwiX3MsIHVybCkp
IHsKKyAgICBhdXRvIHVybCA9IHBhcmFtZXRlcnMtPmdldFN0cmluZygidXJsIl9zKTsKKyAgICBp
ZiAoIXVybCkgewogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWls
KENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6SW52YWxpZEFyZ3VtZW50KSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CkBAIC0xMDUzLDkgKzEwNTUsOCBAQCB2b2lkIFdlYkRyaXZlclNlcnZpY2U6
OnNldFdpbmRvd1JlY3QoUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzLCBGdW5jdGlv
bgogewogICAgIC8vIMKnMTAuNy4yIFNldCBXaW5kb3cgUmVjdC4KICAgICAvLyBodHRwczovL3cz
Yy5naXRodWIuaW8vd2ViZHJpdmVyL3dlYmRyaXZlci1zcGVjLmh0bWwjc2V0LXdpbmRvdy1yZWN0
Ci0gICAgUmVmUHRyPEpTT046OlZhbHVlPiB2YWx1ZTsKICAgICBPcHRpb25hbDxkb3VibGU+IHdp
ZHRoOwotICAgIGlmIChwYXJhbWV0ZXJzLT5nZXRWYWx1ZSgid2lkdGgiX3MsIHZhbHVlKSkgewor
ICAgIGlmIChhdXRvIHZhbHVlID0gcGFyYW1ldGVycy0+Z2V0VmFsdWUoIndpZHRoIl9zKSkgewog
ICAgICAgICBpZiAoYXV0byBudW1iZXIgPSB2YWx1ZUFzTnVtYmVySW5SYW5nZSgqdmFsdWUpKQog
ICAgICAgICAgICAgd2lkdGggPSBudW1iZXI7CiAgICAgICAgIGVsc2UgaWYgKCF2YWx1ZS0+aXNO
dWxsKCkpIHsKQEAgLTEwNjQsNyArMTA2NSw3IEBAIHZvaWQgV2ViRHJpdmVyU2VydmljZTo6c2V0
V2luZG93UmVjdChSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMsIEZ1bmN0aW9uCiAg
ICAgICAgIH0KICAgICB9CiAgICAgT3B0aW9uYWw8ZG91YmxlPiBoZWlnaHQ7Ci0gICAgaWYgKHBh
cmFtZXRlcnMtPmdldFZhbHVlKCJoZWlnaHQiX3MsIHZhbHVlKSkgeworICAgIGlmIChhdXRvIHZh
bHVlID0gcGFyYW1ldGVycy0+Z2V0VmFsdWUoImhlaWdodCJfcykpIHsKICAgICAgICAgaWYgKGF1
dG8gbnVtYmVyID0gdmFsdWVBc051bWJlckluUmFuZ2UoKnZhbHVlKSkKICAgICAgICAgICAgIGhl
aWdodCA9IG51bWJlcjsKICAgICAgICAgZWxzZSBpZiAoIXZhbHVlLT5pc051bGwoKSkgewpAQCAt
MTA3Myw3ICsxMDc0LDcgQEAgdm9pZCBXZWJEcml2ZXJTZXJ2aWNlOjpzZXRXaW5kb3dSZWN0KFJl
ZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycywgRnVuY3Rpb24KICAgICAgICAgfQogICAg
IH0KICAgICBPcHRpb25hbDxkb3VibGU+IHg7Ci0gICAgaWYgKHBhcmFtZXRlcnMtPmdldFZhbHVl
KCJ4Il9zLCB2YWx1ZSkpIHsKKyAgICBpZiAoYXV0byB2YWx1ZSA9IHBhcmFtZXRlcnMtPmdldFZh
bHVlKCJ4Il9zKSkgewogICAgICAgICBpZiAoYXV0byBudW1iZXIgPSB2YWx1ZUFzTnVtYmVySW5S
YW5nZSgqdmFsdWUsIElOVF9NSU4pKQogICAgICAgICAgICAgeCA9IG51bWJlcjsKICAgICAgICAg
ZWxzZSBpZiAoIXZhbHVlLT5pc051bGwoKSkgewpAQCAtMTA4Miw3ICsxMDgzLDcgQEAgdm9pZCBX
ZWJEcml2ZXJTZXJ2aWNlOjpzZXRXaW5kb3dSZWN0KFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFy
YW1ldGVycywgRnVuY3Rpb24KICAgICAgICAgfQogICAgIH0KICAgICBPcHRpb25hbDxkb3VibGU+
IHk7Ci0gICAgaWYgKHBhcmFtZXRlcnMtPmdldFZhbHVlKCJ5Il9zLCB2YWx1ZSkpIHsKKyAgICBp
ZiAoYXV0byB2YWx1ZSA9IHBhcmFtZXRlcnMtPmdldFZhbHVlKCJ5Il9zKSkgewogICAgICAgICBp
ZiAoYXV0byBudW1iZXIgPSB2YWx1ZUFzTnVtYmVySW5SYW5nZSgqdmFsdWUsIElOVF9NSU4pKQog
ICAgICAgICAgICAgeSA9IG51bWJlcjsKICAgICAgICAgZWxzZSBpZiAoIXZhbHVlLT5pc051bGwo
KSkgewpAQCAtMTEzNSw4ICsxMTM2LDggQEAgdm9pZCBXZWJEcml2ZXJTZXJ2aWNlOjpjbG9zZVdp
bmRvdyhSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMsIEZ1bmN0aW9uPHYKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIFJlZlB0cjxKU09OOjpBcnJheT4g
aGFuZGxlczsKLSAgICAgICAgaWYgKHJlc3VsdC5yZXN1bHQoKS0+YXNBcnJheShoYW5kbGVzKSAm
JiAhaGFuZGxlcy0+bGVuZ3RoKCkpCisgICAgICAgIGF1dG8gaGFuZGxlcyA9IHJlc3VsdC5yZXN1
bHQoKS0+YXNBcnJheSgpOworICAgICAgICBpZiAoaGFuZGxlcyAmJiAhaGFuZGxlcy0+bGVuZ3Ro
KCkpCiAgICAgICAgICAgICBtX3Nlc3Npb24gPSBudWxscHRyOwogCiAgICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKFdURk1vdmUocmVzdWx0KSk7CkBAIC0xMTUwLDggKzExNTEsOCBAQCB2b2lkIFdl
YkRyaXZlclNlcnZpY2U6OnN3aXRjaFRvV2luZG93KFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFy
YW1ldGVycywgRnVuY3RpbwogICAgIGlmICghZmluZFNlc3Npb25PckNvbXBsZXRlV2l0aEVycm9y
KCpwYXJhbWV0ZXJzLCBjb21wbGV0aW9uSGFuZGxlcikpCiAgICAgICAgIHJldHVybjsKIAotICAg
IFN0cmluZyBoYW5kbGU7Ci0gICAgaWYgKCFwYXJhbWV0ZXJzLT5nZXRTdHJpbmcoImhhbmRsZSJf
cywgaGFuZGxlKSkgeworICAgIGF1dG8gaGFuZGxlID0gcGFyYW1ldGVycy0+Z2V0U3RyaW5nKCJo
YW5kbGUiX3MpOworICAgIGlmICghaGFuZGxlKSB7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVy
KENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpJbnZhbGlkQXJn
dW1lbnQpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTExNzUsMTMgKzExNzYsMTEgQEAg
dm9pZCBXZWJEcml2ZXJTZXJ2aWNlOjpuZXdXaW5kb3coUmVmUHRyPEpTT046Ok9iamVjdD4mJiBw
YXJhbWV0ZXJzLCBGdW5jdGlvbjx2b2kKICAgICAgICAgcmV0dXJuOwogCiAgICAgT3B0aW9uYWw8
U3RyaW5nPiB0eXBlSGludDsKLSAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHZhbHVlOwotICAgIGlm
IChwYXJhbWV0ZXJzLT5nZXRWYWx1ZSgidHlwZSJfcywgdmFsdWUpKSB7Ci0gICAgICAgIFN0cmlu
ZyB2YWx1ZVN0cmluZzsKLSAgICAgICAgaWYgKHZhbHVlLT5hc1N0cmluZyh2YWx1ZVN0cmluZykp
IHsKLSAgICAgICAgICAgIGlmICh2YWx1ZVN0cmluZyA9PSAid2luZG93IiB8fCB2YWx1ZVN0cmlu
ZyA9PSAidGFiIikKLSAgICAgICAgICAgICAgICB0eXBlSGludCA9IHZhbHVlU3RyaW5nOwotICAg
ICAgICB9IGVsc2UgaWYgKCF2YWx1ZS0+aXNOdWxsKCkpIHsKKyAgICBpZiAoYXV0byB2YWx1ZSA9
IHBhcmFtZXRlcnMtPmdldFZhbHVlKCJ0eXBlIl9zKSkgeworICAgICAgICBhdXRvIHZhbHVlU3Ry
aW5nID0gdmFsdWUtPmFzU3RyaW5nKCk7CisgICAgICAgIGlmICh2YWx1ZVN0cmluZyA9PSAid2lu
ZG93IiB8fCB2YWx1ZVN0cmluZyA9PSAidGFiIikKKyAgICAgICAgICAgIHR5cGVIaW50ID0gdmFs
dWVTdHJpbmc7CisgICAgICAgIGVsc2UgaWYgKCF2YWx1ZS0+aXNOdWxsKCkpIHsKICAgICAgICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6
RXJyb3JDb2RlOjpJbnZhbGlkQXJndW1lbnQpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQpAQCAtMTE5Nyw4ICsxMTk2LDggQEAgdm9pZCBXZWJEcml2ZXJTZXJ2aWNlOjpzd2l0Y2hU
b0ZyYW1lKFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycywgRnVuY3Rpb24KICAgICBp
ZiAoIWZpbmRTZXNzaW9uT3JDb21wbGV0ZVdpdGhFcnJvcigqcGFyYW1ldGVycywgY29tcGxldGlv
bkhhbmRsZXIpKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IGZy
YW1lSUQ7Ci0gICAgaWYgKCFwYXJhbWV0ZXJzLT5nZXRWYWx1ZSgiaWQiX3MsIGZyYW1lSUQpKSB7
CisgICAgYXV0byBmcmFtZUlEID0gcGFyYW1ldGVycy0+Z2V0VmFsdWUoImlkIl9zKTsKKyAgICBp
ZiAoIWZyYW1lSUQpIHsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6
ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OkludmFsaWRBcmd1bWVudCkpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQpAQCAtMTIxNCw4ICsxMjEzLDcgQEAgdm9pZCBXZWJEcml2ZXJTZXJ2
aWNlOjpzd2l0Y2hUb0ZyYW1lKFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycywgRnVu
Y3Rpb24KICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICBjYXNlIEpTT046OlZhbHVlOjpU
eXBlOjpPYmplY3Q6IHsKLSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gZnJhbWVJRE9iamVj
dDsKLSAgICAgICAgZnJhbWVJRC0+YXNPYmplY3QoZnJhbWVJRE9iamVjdCk7CisgICAgICAgIGF1
dG8gZnJhbWVJRE9iamVjdCA9IGZyYW1lSUQtPmFzT2JqZWN0KCk7CiAgICAgICAgIGlmIChmcmFt
ZUlET2JqZWN0LT5maW5kKFNlc3Npb246OndlYkVsZW1lbnRJZGVudGlmaWVyKCkpID09IGZyYW1l
SURPYmplY3QtPmVuZCgpKSB7CiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5k
UmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6SW52YWxpZEFyZ3VtZW50KSk7
CiAgICAgICAgICAgICByZXR1cm47CkBAIC0xMjU2LDggKzEyNTQsOCBAQCB2b2lkIFdlYkRyaXZl
clNlcnZpY2U6OnN3aXRjaFRvUGFyZW50RnJhbWUoUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJh
bWV0ZXJzLCBGdQogCiBzdGF0aWMgT3B0aW9uYWw8U3RyaW5nPiBmaW5kRWxlbWVudE9yQ29tcGxl
dGVXaXRoRXJyb3IoSlNPTjo6T2JqZWN0JiBwYXJhbWV0ZXJzLCBGdW5jdGlvbjx2b2lkIChDb21t
YW5kUmVzdWx0JiYpPiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgU3RyaW5nIGVsZW1lbnRJ
RDsKLSAgICBpZiAoIXBhcmFtZXRlcnMuZ2V0U3RyaW5nKCJlbGVtZW50SWQiX3MsIGVsZW1lbnRJ
RCkgfHwgZWxlbWVudElELmlzRW1wdHkoKSkgeworICAgIGF1dG8gZWxlbWVudElEID0gcGFyYW1l
dGVycy5nZXRTdHJpbmcoImVsZW1lbnRJZCJfcyk7CisgICAgaWYgKGVsZW1lbnRJRC5pc0VtcHR5
KCkpIHsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21t
YW5kUmVzdWx0OjpFcnJvckNvZGU6OkludmFsaWRBcmd1bWVudCkpOwogICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwogICAgIH0KQEAgLTEyNzcsMTEgKzEyNzUsMTMgQEAgc3RhdGljIGlubGlu
ZSBib29sIGlzVmFsaWRTdHJhdGVneShjb25zdCBTdHJpbmcmIHN0cmF0ZWd5KQogCiBzdGF0aWMg
Ym9vbCBmaW5kU3RyYXRlZ3lBbmRTZWxlY3Rvck9yQ29tcGxldGVXaXRoRXJyb3IoSlNPTjo6T2Jq
ZWN0JiBwYXJhbWV0ZXJzLCBGdW5jdGlvbjx2b2lkIChDb21tYW5kUmVzdWx0JiYpPiYgY29tcGxl
dGlvbkhhbmRsZXIsIFN0cmluZyYgc3RyYXRlZ3ksIFN0cmluZyYgc2VsZWN0b3IpCiB7Ci0gICAg
aWYgKCFwYXJhbWV0ZXJzLmdldFN0cmluZygidXNpbmciX3MsIHN0cmF0ZWd5KSB8fCAhaXNWYWxp
ZFN0cmF0ZWd5KHN0cmF0ZWd5KSkgeworICAgIHN0cmF0ZWd5ID0gcGFyYW1ldGVycy5nZXRTdHJp
bmcoInVzaW5nIl9zKTsKKyAgICBpZiAoIWlzVmFsaWRTdHJhdGVneShzdHJhdGVneSkpIHsKICAg
ICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0
OjpFcnJvckNvZGU6OkludmFsaWRBcmd1bWVudCkpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgfQotICAgIGlmICghcGFyYW1ldGVycy5nZXRTdHJpbmcoInZhbHVlIl9zLCBzZWxlY3Rvcikp
IHsKKyAgICBzZWxlY3RvciA9IHBhcmFtZXRlcnMuZ2V0U3RyaW5nKCJ2YWx1ZSJfcyk7CisgICAg
aWYgKCFzZWxlY3RvcikgewogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0
OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6SW52YWxpZEFyZ3VtZW50KSk7CiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICB9CkBAIC0xNDA1LDggKzE0MDUsOCBAQCB2b2lkIFdlYkRy
aXZlclNlcnZpY2U6OmdldEVsZW1lbnRBdHRyaWJ1dGUoUmVmUHRyPEpTT046Ok9iamVjdD4mJiBw
YXJhbWV0ZXJzLCBGdQogICAgIGlmICghZWxlbWVudElEKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBTdHJpbmcgYXR0cmlidXRlOwotICAgIGlmICghcGFyYW1ldGVycy0+Z2V0U3RyaW5nKCJuYW1l
Il9zLCBhdHRyaWJ1dGUpKSB7CisgICAgYXV0byBhdHRyaWJ1dGUgPSBwYXJhbWV0ZXJzLT5nZXRT
dHJpbmcoIm5hbWUiX3MpOworICAgIGlmICghYXR0cmlidXRlKSB7CiAgICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpJ
bnZhbGlkQXJndW1lbnQpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTE0MjUsOCArMTQy
NSw4IEBAIHZvaWQgV2ViRHJpdmVyU2VydmljZTo6Z2V0RWxlbWVudFByb3BlcnR5KFJlZlB0cjxK
U09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycywgRnVuCiAgICAgaWYgKCFlbGVtZW50SUQpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIFN0cmluZyBhdHRyaWJ1dGU7Ci0gICAgaWYgKCFwYXJhbWV0ZXJz
LT5nZXRTdHJpbmcoIm5hbWUiX3MsIGF0dHJpYnV0ZSkpIHsKKyAgICBhdXRvIGF0dHJpYnV0ZSA9
IHBhcmFtZXRlcnMtPmdldFN0cmluZygibmFtZSJfcyk7CisgICAgaWYgKCFhdHRyaWJ1dGUpIHsK
ICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVz
dWx0OjpFcnJvckNvZGU6OkludmFsaWRBcmd1bWVudCkpOwogICAgICAgICByZXR1cm47CiAgICAg
fQpAQCAtMTQ0NSw4ICsxNDQ1LDggQEAgdm9pZCBXZWJEcml2ZXJTZXJ2aWNlOjpnZXRFbGVtZW50
Q1NTVmFsdWUoUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzLCBGdW4KICAgICBpZiAo
IWVsZW1lbnRJRCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgU3RyaW5nIGNzc1Byb3BlcnR5Owot
ICAgIGlmICghcGFyYW1ldGVycy0+Z2V0U3RyaW5nKCJuYW1lIl9zLCBjc3NQcm9wZXJ0eSkpIHsK
KyAgICBhdXRvIGNzc1Byb3BlcnR5ID0gcGFyYW1ldGVycy0+Z2V0U3RyaW5nKCJuYW1lIl9zKTsK
KyAgICBpZiAoIWNzc1Byb3BlcnR5KSB7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1h
bmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpJbnZhbGlkQXJndW1lbnQp
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTE1NjMsOCArMTU2Myw4IEBAIHZvaWQgV2Vi
RHJpdmVyU2VydmljZTo6ZWxlbWVudFNlbmRLZXlzKFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFy
YW1ldGVycywgRnVuY3RpCiAgICAgaWYgKCFlbGVtZW50SUQpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIFN0cmluZyB0ZXh0OwotICAgIGlmICghcGFyYW1ldGVycy0+Z2V0U3RyaW5nKCJ0ZXh0Il9z
LCB0ZXh0KSB8fCB0ZXh0LmlzRW1wdHkoKSkgeworICAgIGF1dG8gdGV4dCA9IHBhcmFtZXRlcnMt
PmdldFN0cmluZygidGV4dCJfcyk7CisgICAgaWYgKHRleHQuaXNFbXB0eSgpKSB7CiAgICAgICAg
IGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJy
b3JDb2RlOjpJbnZhbGlkQXJndW1lbnQpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTE1
ODQsMTEgKzE1ODQsMTMgQEAgdm9pZCBXZWJEcml2ZXJTZXJ2aWNlOjpnZXRQYWdlU291cmNlKFJl
ZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycywgRnVuY3Rpb24KIAogc3RhdGljIGJvb2wg
ZmluZFNjcmlwdEFuZEFyZ3VtZW50c09yQ29tcGxldGVXaXRoRXJyb3IoSlNPTjo6T2JqZWN0JiBw
YXJhbWV0ZXJzLCBGdW5jdGlvbjx2b2lkIChDb21tYW5kUmVzdWx0JiYpPiYgY29tcGxldGlvbkhh
bmRsZXIsIFN0cmluZyYgc2NyaXB0LCBSZWZQdHI8SlNPTjo6QXJyYXk+JiBhcmd1bWVudHMpCiB7
Ci0gICAgaWYgKCFwYXJhbWV0ZXJzLmdldFN0cmluZygic2NyaXB0Il9zLCBzY3JpcHQpKSB7Cisg
ICAgc2NyaXB0ID0gcGFyYW1ldGVycy5nZXRTdHJpbmcoInNjcmlwdCJfcyk7CisgICAgaWYgKCFz
Y3JpcHQpIHsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChD
b21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OkludmFsaWRBcmd1bWVudCkpOwogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgfQotICAgIGlmICghcGFyYW1ldGVycy5nZXRBcnJheSgiYXJncyJfcywg
YXJndW1lbnRzKSkgeworICAgIGFyZ3VtZW50cyA9IHBhcmFtZXRlcnMuZ2V0QXJyYXkoImFyZ3Mi
X3MpOworICAgIGlmICghYXJndW1lbnRzKSB7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENv
bW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpJbnZhbGlkQXJndW1l
bnQpKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTE2NjAsOCArMTY2Miw4IEBA
IHZvaWQgV2ViRHJpdmVyU2VydmljZTo6Z2V0TmFtZWRDb29raWUoUmVmUHRyPEpTT046Ok9iamVj
dD4mJiBwYXJhbWV0ZXJzLCBGdW5jdGlvCiAgICAgaWYgKCFmaW5kU2Vzc2lvbk9yQ29tcGxldGVX
aXRoRXJyb3IoKnBhcmFtZXRlcnMsIGNvbXBsZXRpb25IYW5kbGVyKSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgU3RyaW5nIG5hbWU7Ci0gICAgaWYgKCFwYXJhbWV0ZXJzLT5nZXRTdHJpbmcoIm5h
bWUiX3MsIG5hbWUpKSB7CisgICAgYXV0byBuYW1lID0gcGFyYW1ldGVycy0+Z2V0U3RyaW5nKCJu
YW1lIl9zKTsKKyAgICBpZiAoIW5hbWUpIHsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29t
bWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OkludmFsaWRBcmd1bWVu
dCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTY3OCwzNyArMTY4MCw0MCBAQCB2b2lk
IFdlYkRyaXZlclNlcnZpY2U6OmdldE5hbWVkQ29va2llKFJlZlB0cjxKU09OOjpPYmplY3Q+JiYg
cGFyYW1ldGVycywgRnVuY3Rpbwogc3RhdGljIE9wdGlvbmFsPFNlc3Npb246OkNvb2tpZT4gZGVz
ZXJpYWxpemVDb29raWUoSlNPTjo6T2JqZWN0JiBjb29raWVPYmplY3QpCiB7CiAgICAgU2Vzc2lv
bjo6Q29va2llIGNvb2tpZTsKLSAgICBpZiAoIWNvb2tpZU9iamVjdC5nZXRTdHJpbmcoIm5hbWUi
X3MsIGNvb2tpZS5uYW1lKSB8fCBjb29raWUubmFtZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7Ci0gICAgaWYgKCFjb29raWVPYmplY3QuZ2V0U3RyaW5nKCJ2YWx1ZSJf
cywgY29va2llLnZhbHVlKSB8fCBjb29raWUudmFsdWUuaXNFbXB0eSgpKQorCisgICAgY29va2ll
Lm5hbWUgPSBjb29raWVPYmplY3QuZ2V0U3RyaW5nKCJuYW1lIl9zKTsKKyAgICBpZiAoY29va2ll
Lm5hbWUuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgUmVm
UHRyPEpTT046OlZhbHVlPiB2YWx1ZTsKLSAgICBpZiAoY29va2llT2JqZWN0LmdldFZhbHVlKCJw
YXRoIl9zLCB2YWx1ZSkpIHsKLSAgICAgICAgU3RyaW5nIHBhdGg7Ci0gICAgICAgIGlmICghdmFs
dWUtPmFzU3RyaW5nKHBhdGgpKQorICAgIGNvb2tpZS52YWx1ZSA9IGNvb2tpZU9iamVjdC5nZXRT
dHJpbmcoInZhbHVlIl9zKTsKKyAgICBpZiAoY29va2llLnZhbHVlLmlzRW1wdHkoKSkKKyAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIGlmIChhdXRvIHZhbHVlID0gY29va2llT2Jq
ZWN0LmdldFZhbHVlKCJwYXRoIl9zKSkgeworICAgICAgICBhdXRvIHBhdGggPSB2YWx1ZS0+YXNT
dHJpbmcoKTsKKyAgICAgICAgaWYgKCFwYXRoKQogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKICAgICAgICAgY29va2llLnBhdGggPSBwYXRoOwogICAgIH0KLSAgICBpZiAoY29va2ll
T2JqZWN0LmdldFZhbHVlKCJkb21haW4iX3MsIHZhbHVlKSkgewotICAgICAgICBTdHJpbmcgZG9t
YWluOwotICAgICAgICBpZiAoIXZhbHVlLT5hc1N0cmluZyhkb21haW4pKQorICAgIGlmIChhdXRv
IHZhbHVlID0gY29va2llT2JqZWN0LmdldFZhbHVlKCJkb21haW4iX3MpKSB7CisgICAgICAgIGF1
dG8gZG9tYWluID0gdmFsdWUtPmFzU3RyaW5nKCk7CisgICAgICAgIGlmICghZG9tYWluKQogICAg
ICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAgICAgY29va2llLmRvbWFpbiA9IGRv
bWFpbjsKICAgICB9Ci0gICAgaWYgKGNvb2tpZU9iamVjdC5nZXRWYWx1ZSgic2VjdXJlIl9zLCB2
YWx1ZSkpIHsKLSAgICAgICAgYm9vbCBzZWN1cmU7Ci0gICAgICAgIGlmICghdmFsdWUtPmFzQm9v
bGVhbihzZWN1cmUpKQorICAgIGlmIChhdXRvIHZhbHVlID0gY29va2llT2JqZWN0LmdldFZhbHVl
KCJzZWN1cmUiX3MpKSB7CisgICAgICAgIGF1dG8gc2VjdXJlID0gdmFsdWUtPmFzQm9vbGVhbigp
OworICAgICAgICBpZiAoIXNlY3VyZSkKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CiAgICAgICAgIGNvb2tpZS5zZWN1cmUgPSBzZWN1cmU7CiAgICAgfQotICAgIGlmIChjb29raWVP
YmplY3QuZ2V0VmFsdWUoImh0dHBPbmx5Il9zLCB2YWx1ZSkpIHsKLSAgICAgICAgYm9vbCBodHRw
T25seTsKLSAgICAgICAgaWYgKCF2YWx1ZS0+YXNCb29sZWFuKGh0dHBPbmx5KSkKKyAgICBpZiAo
YXV0byB2YWx1ZSA9IGNvb2tpZU9iamVjdC5nZXRWYWx1ZSgiaHR0cE9ubHkiX3MpKSB7CisgICAg
ICAgIGF1dG8gaHR0cE9ubHkgPSB2YWx1ZS0+YXNCb29sZWFuKCk7CisgICAgICAgIGlmICghaHR0
cE9ubHkpCiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAgICBjb29raWUu
aHR0cE9ubHkgPSBodHRwT25seTsKICAgICB9Ci0gICAgaWYgKGNvb2tpZU9iamVjdC5nZXRWYWx1
ZSgiZXhwaXJ5Il9zLCB2YWx1ZSkpIHsKKyAgICBpZiAoYXV0byB2YWx1ZSA9IGNvb2tpZU9iamVj
dC5nZXRWYWx1ZSgiZXhwaXJ5Il9zKSkgewogICAgICAgICBhdXRvIGV4cGlyeSA9IHVuc2lnbmVk
VmFsdWUoKnZhbHVlKTsKICAgICAgICAgaWYgKCFleHBpcnkpCiAgICAgICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwpAQCAtMTcyNSw4ICsxNzMwLDggQEAgdm9pZCBXZWJEcml2ZXJTZXJ2aWNl
OjphZGRDb29raWUoUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzLCBGdW5jdGlvbjx2
b2kKICAgICBpZiAoIWZpbmRTZXNzaW9uT3JDb21wbGV0ZVdpdGhFcnJvcigqcGFyYW1ldGVycywg
Y29tcGxldGlvbkhhbmRsZXIpKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZWZQdHI8SlNPTjo6
T2JqZWN0PiBjb29raWVPYmplY3Q7Ci0gICAgaWYgKCFwYXJhbWV0ZXJzLT5nZXRPYmplY3QoImNv
b2tpZSJfcywgY29va2llT2JqZWN0KSkgeworICAgIGF1dG8gY29va2llT2JqZWN0ID0gcGFyYW1l
dGVycy0+Z2V0T2JqZWN0KCJjb29raWUiX3MpOworICAgIGlmICghY29va2llT2JqZWN0KSB7CiAg
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3Vs
dDo6RXJyb3JDb2RlOjpJbnZhbGlkQXJndW1lbnQpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
QEAgLTE3NTMsOCArMTc1OCw4IEBAIHZvaWQgV2ViRHJpdmVyU2VydmljZTo6ZGVsZXRlQ29va2ll
KFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycywgRnVuY3Rpb248CiAgICAgaWYgKCFm
aW5kU2Vzc2lvbk9yQ29tcGxldGVXaXRoRXJyb3IoKnBhcmFtZXRlcnMsIGNvbXBsZXRpb25IYW5k
bGVyKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgU3RyaW5nIG5hbWU7Ci0gICAgaWYgKCFwYXJh
bWV0ZXJzLT5nZXRTdHJpbmcoIm5hbWUiX3MsIG5hbWUpKSB7CithdXRvIG5hbWUgPSBwYXJhbWV0
ZXJzLT5nZXRTdHJpbmcoIm5hbWUiX3MpOworICAgIGlmICghbmFtZSkgewogICAgICAgICBjb21w
bGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29k
ZTo6SW52YWxpZEFyZ3VtZW50KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xNzg2LDgg
KzE3OTEsOCBAQCB2b2lkIFdlYkRyaXZlclNlcnZpY2U6OmRlbGV0ZUFsbENvb2tpZXMoUmVmUHRy
PEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzLCBGdW5jdAogCiBzdGF0aWMgYm9vbCBwcm9jZXNz
UGF1c2VBY3Rpb24oSlNPTjo6T2JqZWN0JiBhY3Rpb25JdGVtLCBBY3Rpb24mIGFjdGlvbiwgT3B0
aW9uYWw8U3RyaW5nPiYgZXJyb3JNZXNzYWdlKQogewotICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4g
ZHVyYXRpb25WYWx1ZTsKLSAgICBpZiAoIWFjdGlvbkl0ZW0uZ2V0VmFsdWUoImR1cmF0aW9uIl9z
LCBkdXJhdGlvblZhbHVlKSkKKyAgICBhdXRvIGR1cmF0aW9uVmFsdWUgPSBhY3Rpb25JdGVtLmdl
dFZhbHVlKCJkdXJhdGlvbiJfcyk7CisgICAgaWYgKCFkdXJhdGlvblZhbHVlKQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKIAogICAgIGF1dG8gZHVyYXRpb24gPSB1bnNpZ25lZFZhbHVlKCpkdXJhdGlv
blZhbHVlKTsKQEAgLTE4MDIsOCArMTgwNyw3IEBAIHN0YXRpYyBib29sIHByb2Nlc3NQYXVzZUFj
dGlvbihKU09OOjpPYmplY3QmIGFjdGlvbkl0ZW0sIEFjdGlvbiYgYWN0aW9uLCBPcHRpb25hCiAK
IHN0YXRpYyBPcHRpb25hbDxBY3Rpb24+IHByb2Nlc3NOdWxsQWN0aW9uKGNvbnN0IFN0cmluZyYg
aWQsIEpTT046Ok9iamVjdCYgYWN0aW9uSXRlbSwgT3B0aW9uYWw8U3RyaW5nPiYgZXJyb3JNZXNz
YWdlKQogewotICAgIFN0cmluZyBzdWJ0eXBlOwotICAgIGFjdGlvbkl0ZW0uZ2V0U3RyaW5nKCJ0
eXBlIl9zLCBzdWJ0eXBlKTsKKyAgICBhdXRvIHN1YnR5cGUgPSBhY3Rpb25JdGVtLmdldFN0cmlu
ZygidHlwZSJfcyk7CiAgICAgaWYgKHN1YnR5cGUgIT0gInBhdXNlIikgewogICAgICAgICBlcnJv
ck1lc3NhZ2UgPSBTdHJpbmcoIlRoZSBwYXJhbWV0ZXIgJ3R5cGUnIGluIG51bGwgYWN0aW9uIGlz
IGludmFsaWQgb3IgbWlzc2luZyIpOwogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwpAQCAt
MTgxOSw4ICsxODIzLDcgQEAgc3RhdGljIE9wdGlvbmFsPEFjdGlvbj4gcHJvY2Vzc051bGxBY3Rp
b24oY29uc3QgU3RyaW5nJiBpZCwgSlNPTjo6T2JqZWN0JiBhY3Rpb24KIHN0YXRpYyBPcHRpb25h
bDxBY3Rpb24+IHByb2Nlc3NLZXlBY3Rpb24oY29uc3QgU3RyaW5nJiBpZCwgSlNPTjo6T2JqZWN0
JiBhY3Rpb25JdGVtLCBPcHRpb25hbDxTdHJpbmc+JiBlcnJvck1lc3NhZ2UpCiB7CiAgICAgQWN0
aW9uOjpTdWJ0eXBlIGFjdGlvblN1YnR5cGU7Ci0gICAgU3RyaW5nIHN1YnR5cGU7Ci0gICAgYWN0
aW9uSXRlbS5nZXRTdHJpbmcoInR5cGUiX3MsIHN1YnR5cGUpOworICAgIGF1dG8gc3VidHlwZSA9
IGFjdGlvbkl0ZW0uZ2V0U3RyaW5nKCJ0eXBlIl9zKTsKICAgICBpZiAoc3VidHlwZSA9PSAicGF1
c2UiKQogICAgICAgICBhY3Rpb25TdWJ0eXBlID0gQWN0aW9uOjpTdWJ0eXBlOjpQYXVzZTsKICAg
ICBlbHNlIGlmIChzdWJ0eXBlID09ICJrZXlVcCIpCkBAIC0xODQxLDEzICsxODQ0LDEzIEBAIHN0
YXRpYyBPcHRpb25hbDxBY3Rpb24+IHByb2Nlc3NLZXlBY3Rpb24oY29uc3QgU3RyaW5nJiBpZCwg
SlNPTjo6T2JqZWN0JiBhY3Rpb25JCiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQWN0aW9uOjpT
dWJ0eXBlOjpLZXlVcDoKICAgICBjYXNlIEFjdGlvbjo6U3VidHlwZTo6S2V5RG93bjogewotICAg
ICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IGtleVZhbHVlOwotICAgICAgICBpZiAoIWFjdGlvbkl0
ZW0uZ2V0VmFsdWUoInZhbHVlIl9zLCBrZXlWYWx1ZSkpIHsKKyAgICAgICAgYXV0byBrZXlWYWx1
ZSA9IGFjdGlvbkl0ZW0uZ2V0VmFsdWUoInZhbHVlIl9zKTsKKyAgICAgICAgaWYgKCFrZXlWYWx1
ZSkgewogICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gU3RyaW5nKCJUaGUgcGFyYW1hdGVyICd2
YWx1ZScgaXMgbWlzc2luZyBmb3Iga2V5IHVwL2Rvd24gYWN0aW9uIik7CiAgICAgICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAgICB9Ci0gICAgICAgIFN0cmluZyBrZXk7Ci0gICAg
ICAgIGlmICgha2V5VmFsdWUtPmFzU3RyaW5nKGtleSkgfHwga2V5LmlzRW1wdHkoKSkgeworICAg
ICAgICBhdXRvIGtleSA9IGtleVZhbHVlLT5hc1N0cmluZygpOworICAgICAgICBpZiAoIWtleS5p
c0VtcHR5KCkpIHsKICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IFN0cmluZygiVGhlIHBhcmFt
YXRlciAndmFsdWUnIGlzIGludmFsaWQgZm9yIGtleSB1cC9kb3duIGFjdGlvbiIpOwogICAgICAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAgICAgfQpAQCAtMTg4NCw4ICsxODg3LDcg
QEAgc3RhdGljIE1vdXNlQnV0dG9uIGFjdGlvbk1vdXNlQnV0dG9uKHVuc2lnbmVkIGJ1dHRvbikK
IHN0YXRpYyBPcHRpb25hbDxBY3Rpb24+IHByb2Nlc3NQb2ludGVyQWN0aW9uKGNvbnN0IFN0cmlu
ZyYgaWQsIFBvaW50ZXJQYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzLCBKU09OOjpPYmplY3QmIGFjdGlv
bkl0ZW0sIE9wdGlvbmFsPFN0cmluZz4mIGVycm9yTWVzc2FnZSkKIHsKICAgICBBY3Rpb246OlN1
YnR5cGUgYWN0aW9uU3VidHlwZTsKLSAgICBTdHJpbmcgc3VidHlwZTsKLSAgICBhY3Rpb25JdGVt
LmdldFN0cmluZygidHlwZSJfcywgc3VidHlwZSk7CisgICAgYXV0byBzdWJ0eXBlID0gYWN0aW9u
SXRlbS5nZXRTdHJpbmcoInR5cGUiX3MpOwogICAgIGlmIChzdWJ0eXBlID09ICJwYXVzZSIpCiAg
ICAgICAgIGFjdGlvblN1YnR5cGUgPSBBY3Rpb246OlN1YnR5cGU6OlBhdXNlOwogICAgIGVsc2Ug
aWYgKHN1YnR5cGUgPT0gInBvaW50ZXJVcCIpCkBAIC0xOTExLDggKzE5MTMsOCBAQCBzdGF0aWMg
T3B0aW9uYWw8QWN0aW9uPiBwcm9jZXNzUG9pbnRlckFjdGlvbihjb25zdCBTdHJpbmcmIGlkLCBQ
b2ludGVyUGFyYW1ldGVycwogICAgICAgICBicmVhazsKICAgICBjYXNlIEFjdGlvbjo6U3VidHlw
ZTo6UG9pbnRlclVwOgogICAgIGNhc2UgQWN0aW9uOjpTdWJ0eXBlOjpQb2ludGVyRG93bjogewot
ICAgICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IGJ1dHRvblZhbHVlOwotICAgICAgICBpZiAoIWFj
dGlvbkl0ZW0uZ2V0VmFsdWUoImJ1dHRvbiJfcywgYnV0dG9uVmFsdWUpKSB7CisgICAgICAgIGF1
dG8gYnV0dG9uVmFsdWUgPSBhY3Rpb25JdGVtLmdldFZhbHVlKCJidXR0b24iX3MpOworICAgICAg
ICBpZiAoIWJ1dHRvblZhbHVlKSB7CiAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBTdHJpbmco
IlRoZSBwYXJhbWF0ZXIgJ2J1dHRvbicgaXMgbWlzc2luZyBmb3IgcG9pbnRlciB1cC9kb3duIGFj
dGlvbiIpOwogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAgICAgfQpAQCAt
MTkyNSw4ICsxOTI3LDcgQEAgc3RhdGljIE9wdGlvbmFsPEFjdGlvbj4gcHJvY2Vzc1BvaW50ZXJB
Y3Rpb24oY29uc3QgU3RyaW5nJiBpZCwgUG9pbnRlclBhcmFtZXRlcnMKICAgICAgICAgYnJlYWs7
CiAgICAgfQogICAgIGNhc2UgQWN0aW9uOjpTdWJ0eXBlOjpQb2ludGVyTW92ZTogewotICAgICAg
ICBSZWZQdHI8SlNPTjo6VmFsdWU+IGR1cmF0aW9uVmFsdWU7Ci0gICAgICAgIGlmIChhY3Rpb25J
dGVtLmdldFZhbHVlKCJkdXJhdGlvbiJfcywgZHVyYXRpb25WYWx1ZSkpIHsKKyAgICAgICAgaWYg
KGF1dG8gZHVyYXRpb25WYWx1ZSA9IGFjdGlvbkl0ZW0uZ2V0VmFsdWUoImR1cmF0aW9uIl9zKSkg
ewogICAgICAgICAgICAgYXV0byBkdXJhdGlvbiA9IHVuc2lnbmVkVmFsdWUoKmR1cmF0aW9uVmFs
dWUpOwogICAgICAgICAgICAgaWYgKCFkdXJhdGlvbikgewogICAgICAgICAgICAgICAgIGVycm9y
TWVzc2FnZSA9IFN0cmluZygiVGhlIHBhcmFtZXRlciAnZHVyYXRpb24nIGlzIGludmFsaWQgaW4g
cG9pbnRlciBtb3ZlIGFjdGlvbiIpOwpAQCAtMTkzNSwyMCArMTkzNiwxNiBAQCBzdGF0aWMgT3B0
aW9uYWw8QWN0aW9uPiBwcm9jZXNzUG9pbnRlckFjdGlvbihjb25zdCBTdHJpbmcmIGlkLCBQb2lu
dGVyUGFyYW1ldGVycwogICAgICAgICAgICAgYWN0aW9uLmR1cmF0aW9uID0gZHVyYXRpb24udmFs
dWUoKTsKICAgICAgICAgfQogCi0gICAgICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gb3JpZ2luVmFs
dWU7Ci0gICAgICAgIGlmIChhY3Rpb25JdGVtLmdldFZhbHVlKCJvcmlnaW4iX3MsIG9yaWdpblZh
bHVlKSkgewotICAgICAgICAgICAgaWYgKG9yaWdpblZhbHVlLT50eXBlKCkgPT0gSlNPTjo6VmFs
dWU6OlR5cGU6Ok9iamVjdCkgewotICAgICAgICAgICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+
IG9yaWdpbk9iamVjdDsKLSAgICAgICAgICAgICAgICBvcmlnaW5WYWx1ZS0+YXNPYmplY3Qob3Jp
Z2luT2JqZWN0KTsKLSAgICAgICAgICAgICAgICBTdHJpbmcgZWxlbWVudElEOwotICAgICAgICAg
ICAgICAgIGlmICghb3JpZ2luT2JqZWN0LT5nZXRTdHJpbmcoU2Vzc2lvbjo6d2ViRWxlbWVudElk
ZW50aWZpZXIoKSwgZWxlbWVudElEKSkgeworICAgICAgICBpZiAoYXV0byBvcmlnaW5WYWx1ZSA9
IGFjdGlvbkl0ZW0uZ2V0VmFsdWUoIm9yaWdpbiJfcykpIHsKKyAgICAgICAgICAgIGlmIChhdXRv
IG9yaWdpbk9iamVjdCA9IG9yaWdpblZhbHVlLT5hc09iamVjdCgpKSB7CisgICAgICAgICAgICAg
ICAgYXV0byBlbGVtZW50SUQgPSBvcmlnaW5PYmplY3QtPmdldFN0cmluZyhTZXNzaW9uOjp3ZWJF
bGVtZW50SWRlbnRpZmllcigpKTsKKyAgICAgICAgICAgICAgICBpZiAoIWVsZW1lbnRJRCkgewog
ICAgICAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBTdHJpbmcoIlRoZSBwYXJhbWV0ZXIg
J29yaWdpbicgaXMgbm90IGEgdmFsaWQgd2ViIGVsZW1lbnQgb2JqZWN0IGluIHBvaW50ZXIgbW92
ZSBhY3Rpb24iKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYWN0aW9uLm9yaWdpbiA9IFBvaW50ZXJP
cmlnaW4geyBQb2ludGVyT3JpZ2luOjpUeXBlOjpFbGVtZW50LCBlbGVtZW50SUQgfTsKICAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIG9yaWdpbjsKLSAgICAgICAg
ICAgICAgICBvcmlnaW5WYWx1ZS0+YXNTdHJpbmcob3JpZ2luKTsKKyAgICAgICAgICAgICAgICBh
dXRvIG9yaWdpbiA9IG9yaWdpblZhbHVlLT5hc1N0cmluZygpOwogICAgICAgICAgICAgICAgIGlm
IChvcmlnaW4gPT0gInZpZXdwb3J0IikKICAgICAgICAgICAgICAgICAgICAgYWN0aW9uLm9yaWdp
biA9IFBvaW50ZXJPcmlnaW4geyBQb2ludGVyT3JpZ2luOjpUeXBlOjpWaWV3cG9ydCwgV1RGOjpu
dWxsb3B0IH07CiAgICAgICAgICAgICAgICAgZWxzZSBpZiAob3JpZ2luID09ICJwb2ludGVyIikK
QEAgLTE5NjEsOCArMTk1OCw3IEBAIHN0YXRpYyBPcHRpb25hbDxBY3Rpb24+IHByb2Nlc3NQb2lu
dGVyQWN0aW9uKGNvbnN0IFN0cmluZyYgaWQsIFBvaW50ZXJQYXJhbWV0ZXJzCiAgICAgICAgIH0g
ZWxzZQogICAgICAgICAgICAgYWN0aW9uLm9yaWdpbiA9IFBvaW50ZXJPcmlnaW4geyBQb2ludGVy
T3JpZ2luOjpUeXBlOjpWaWV3cG9ydCwgV1RGOjpudWxsb3B0IH07CiAKLSAgICAgICAgUmVmUHRy
PEpTT046OlZhbHVlPiB4VmFsdWU7Ci0gICAgICAgIGlmIChhY3Rpb25JdGVtLmdldFZhbHVlKCJ4
Il9zLCB4VmFsdWUpKSB7CisgICAgICAgIGlmIChhdXRvIHhWYWx1ZSA9IGFjdGlvbkl0ZW0uZ2V0
VmFsdWUoIngiX3MpKSB7CiAgICAgICAgICAgICBhdXRvIHggPSB2YWx1ZUFzTnVtYmVySW5SYW5n
ZSgqeFZhbHVlLCBJTlRfTUlOKTsKICAgICAgICAgICAgIGlmICgheCkgewogICAgICAgICAgICAg
ICAgIGVycm9yTWVzc2FnZSA9IFN0cmluZygiVGhlIHBhcmFtYXRlciAneCcgaXMgaW52YWxpZCBm
b3IgcG9pbnRlciBtb3ZlIGFjdGlvbiIpOwpAQCAtMTk3MSw4ICsxOTY3LDcgQEAgc3RhdGljIE9w
dGlvbmFsPEFjdGlvbj4gcHJvY2Vzc1BvaW50ZXJBY3Rpb24oY29uc3QgU3RyaW5nJiBpZCwgUG9p
bnRlclBhcmFtZXRlcnMKICAgICAgICAgICAgIGFjdGlvbi54ID0geC52YWx1ZSgpOwogICAgICAg
ICB9CiAKLSAgICAgICAgUmVmUHRyPEpTT046OlZhbHVlPiB5VmFsdWU7Ci0gICAgICAgIGlmIChh
Y3Rpb25JdGVtLmdldFZhbHVlKCJ5Il9zLCB5VmFsdWUpKSB7CisgICAgICAgIGlmIChhdXRvIHlW
YWx1ZSA9IGFjdGlvbkl0ZW0uZ2V0VmFsdWUoInkiX3MpKSB7CiAgICAgICAgICAgICBhdXRvIHkg
PSB2YWx1ZUFzTnVtYmVySW5SYW5nZSgqeVZhbHVlLCBJTlRfTUlOKTsKICAgICAgICAgICAgIGlm
ICgheSkgewogICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IFN0cmluZygiVGhlIHBhcmFt
YXRlciAneScgaXMgaW52YWxpZCBmb3IgcG9pbnRlciBtb3ZlIGFjdGlvbiIpOwpAQCAtMTk5NSwx
OCArMTk5MCwxOSBAQCBzdGF0aWMgT3B0aW9uYWw8QWN0aW9uPiBwcm9jZXNzUG9pbnRlckFjdGlv
bihjb25zdCBTdHJpbmcmIGlkLCBQb2ludGVyUGFyYW1ldGVycwogc3RhdGljIE9wdGlvbmFsPFBv
aW50ZXJQYXJhbWV0ZXJzPiBwcm9jZXNzUG9pbnRlclBhcmFtZXRlcnMoSlNPTjo6T2JqZWN0JiBh
Y3Rpb25TZXF1ZW5jZSwgT3B0aW9uYWw8U3RyaW5nPiYgZXJyb3JNZXNzYWdlKQogewogICAgIFBv
aW50ZXJQYXJhbWV0ZXJzIHBhcmFtZXRlcnM7Ci0gICAgUmVmUHRyPEpTT046OlZhbHVlPiBwYXJh
bWV0ZXJzRGF0YVZhbHVlOwotICAgIGlmICghYWN0aW9uU2VxdWVuY2UuZ2V0VmFsdWUoInBhcmFt
ZXRlcnMiX3MsIHBhcmFtZXRlcnNEYXRhVmFsdWUpKQorCisgICAgYXV0byBwYXJhbWV0ZXJzRGF0
YVZhbHVlID0gYWN0aW9uU2VxdWVuY2UuZ2V0VmFsdWUoInBhcmFtZXRlcnMiX3MpOworICAgIGlm
ICghcGFyYW1ldGVyc0RhdGFWYWx1ZSkKICAgICAgICAgcmV0dXJuIHBhcmFtZXRlcnM7CiAKLSAg
ICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzRGF0YTsKLSAgICBpZiAoIXBhcmFtZXRl
cnNEYXRhVmFsdWUtPmFzT2JqZWN0KHBhcmFtZXRlcnNEYXRhKSkgeworICAgIGF1dG8gcGFyYW1l
dGVyc0RhdGEgPSBwYXJhbWV0ZXJzRGF0YVZhbHVlLT5hc09iamVjdCgpOworICAgIGlmICghcGFy
YW1ldGVyc0RhdGEpIHsKICAgICAgICAgZXJyb3JNZXNzYWdlID0gU3RyaW5nKCJBY3Rpb24gc2Vx
dWVuY2UgcG9pbnRlciBwYXJhbWV0ZXJzIGlzIG5vdCBhbiBvYmplY3QiKTsKICAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKICAgICB9CiAKLSAgICBTdHJpbmcgcG9pbnRlclR5cGU7Ci0gICAg
aWYgKCFwYXJhbWV0ZXJzRGF0YS0+Z2V0U3RyaW5nKCJwb2ludGVyVHlwZSJfcywgcG9pbnRlclR5
cGUpKQorICAgIGF1dG8gcG9pbnRlclR5cGUgPSBwYXJhbWV0ZXJzRGF0YS0+Z2V0U3RyaW5nKCJw
b2ludGVyVHlwZSJfcyk7CisgICAgaWYgKCFwb2ludGVyVHlwZSkKICAgICAgICAgcmV0dXJuIHBh
cmFtZXRlcnM7CiAKICAgICBpZiAocG9pbnRlclR5cGUgPT0gIm1vdXNlIikKQEAgLTIwMjUsMTQg
KzIwMjEsMTMgQEAgc3RhdGljIE9wdGlvbmFsPFBvaW50ZXJQYXJhbWV0ZXJzPiBwcm9jZXNzUG9p
bnRlclBhcmFtZXRlcnMoSlNPTjo6T2JqZWN0JiBhY3Rpb24KIAogc3RhdGljIE9wdGlvbmFsPFZl
Y3RvcjxBY3Rpb24+PiBwcm9jZXNzSW5wdXRBY3Rpb25TZXF1ZW5jZShTZXNzaW9uJiBzZXNzaW9u
LCBKU09OOjpWYWx1ZSYgYWN0aW9uU2VxdWVuY2VWYWx1ZSwgT3B0aW9uYWw8U3RyaW5nPiYgZXJy
b3JNZXNzYWdlKQogewotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IGFjdGlvblNlcXVlbmNlOwot
ICAgIGlmICghYWN0aW9uU2VxdWVuY2VWYWx1ZS5hc09iamVjdChhY3Rpb25TZXF1ZW5jZSkpIHsK
KyAgICBhdXRvIGFjdGlvblNlcXVlbmNlID0gYWN0aW9uU2VxdWVuY2VWYWx1ZS5hc09iamVjdCgp
OworICAgIGlmICghYWN0aW9uU2VxdWVuY2UpIHsKICAgICAgICAgZXJyb3JNZXNzYWdlID0gU3Ry
aW5nKCJUaGUgYWN0aW9uIHNlcXVlbmNlIGlzIG5vdCBhbiBvYmplY3QiKTsKICAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKICAgICB9CiAKLSAgICBTdHJpbmcgdHlwZTsKLSAgICBhY3Rpb25T
ZXF1ZW5jZS0+Z2V0U3RyaW5nKCJ0eXBlIl9zLCB0eXBlKTsKKyAgICBhdXRvIHR5cGUgPSBhY3Rp
b25TZXF1ZW5jZS0+Z2V0U3RyaW5nKCJ0eXBlIl9zKTsKICAgICBJbnB1dFNvdXJjZTo6VHlwZSBp
bnB1dFNvdXJjZVR5cGU7CiAgICAgaWYgKHR5cGUgPT0gImtleSIpCiAgICAgICAgIGlucHV0U291
cmNlVHlwZSA9IElucHV0U291cmNlOjpUeXBlOjpLZXk7CkBAIC0yMDQ1LDggKzIwNDAsOCBAQCBz
dGF0aWMgT3B0aW9uYWw8VmVjdG9yPEFjdGlvbj4+IHByb2Nlc3NJbnB1dEFjdGlvblNlcXVlbmNl
KFNlc3Npb24mIHNlc3Npb24sIEpTTwogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAg
IH0KIAotICAgIFN0cmluZyBpZDsKLSAgICBpZiAoIWFjdGlvblNlcXVlbmNlLT5nZXRTdHJpbmco
ImlkIl9zLCBpZCkpIHsKKyAgICBhdXRvIGlkID0gYWN0aW9uU2VxdWVuY2UtPmdldFN0cmluZygi
aWQiX3MpOworICAgIGlmICghaWQpIHsKICAgICAgICAgZXJyb3JNZXNzYWdlID0gU3RyaW5nKCJU
aGUgcGFyYW1ldGVyICdpZCcgaXMgaW52YWxpZCBvciBtaXNzaW5nIGluIGFjdGlvbiBzZXF1ZW5j
ZSIpOwogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIH0KQEAgLTIwNzIsOCArMjA2
Nyw4IEBAIHN0YXRpYyBPcHRpb25hbDxWZWN0b3I8QWN0aW9uPj4gcHJvY2Vzc0lucHV0QWN0aW9u
U2VxdWVuY2UoU2Vzc2lvbiYgc2Vzc2lvbiwgSlNPCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CiAgICAgfQogCi0gICAgUmVmUHRyPEpTT046OkFycmF5PiBhY3Rpb25JdGVtczsKLSAgICBp
ZiAoIWFjdGlvblNlcXVlbmNlLT5nZXRBcnJheSgiYWN0aW9ucyJfcywgYWN0aW9uSXRlbXMpKSB7
CisgICAgYXV0byBhY3Rpb25JdGVtcyA9IGFjdGlvblNlcXVlbmNlLT5nZXRBcnJheSgiYWN0aW9u
cyJfcyk7CisgICAgaWYgKCFhY3Rpb25JdGVtcykgewogICAgICAgICBlcnJvck1lc3NhZ2UgPSBT
dHJpbmcoIlRoZSBwYXJhbWV0ZXIgJ2FjdGlvbnMnIGlzIGludmFsaWQgb3Igbm90IHByZXNlbnQg
aW4gYWN0aW9uIHNlcXVlbmNlIik7CiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAg
fQpAQCAtMjA4MSw5ICsyMDc2LDggQEAgc3RhdGljIE9wdGlvbmFsPFZlY3RvcjxBY3Rpb24+PiBw
cm9jZXNzSW5wdXRBY3Rpb25TZXF1ZW5jZShTZXNzaW9uJiBzZXNzaW9uLCBKU08KICAgICBWZWN0
b3I8QWN0aW9uPiBhY3Rpb25zOwogICAgIHVuc2lnbmVkIGFjdGlvbkl0ZW1zTGVuZ3RoID0gYWN0
aW9uSXRlbXMtPmxlbmd0aCgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhY3Rpb25J
dGVtc0xlbmd0aDsgKytpKSB7Ci0gICAgICAgIGF1dG8gYWN0aW9uSXRlbVZhbHVlID0gYWN0aW9u
SXRlbXMtPmdldChpKTsKLSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gYWN0aW9uSXRlbTsK
LSAgICAgICAgaWYgKCFhY3Rpb25JdGVtVmFsdWUtPmFzT2JqZWN0KGFjdGlvbkl0ZW0pKSB7Cisg
ICAgICAgIGF1dG8gYWN0aW9uSXRlbSA9IGFjdGlvbkl0ZW1zLT5nZXQoaSktPmFzT2JqZWN0KCk7
CisgICAgICAgIGlmICghYWN0aW9uSXRlbSkgewogICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0g
U3RyaW5nKCJBbiBhY3Rpb24gaW4gYWN0aW9uIHNlcXVlbmNlIGlzIG5vdCBhbiBvYmplY3QiKTsK
ICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAgIH0KQEAgLTIxMTEsOCAr
MjEwNSw4IEBAIHZvaWQgV2ViRHJpdmVyU2VydmljZTo6cGVyZm9ybUFjdGlvbnMoUmVmUHRyPEpT
T046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzLCBGdW5jdGlvCiAgICAgaWYgKCFmaW5kU2Vzc2lvbk9y
Q29tcGxldGVXaXRoRXJyb3IoKnBhcmFtZXRlcnMsIGNvbXBsZXRpb25IYW5kbGVyKSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgUmVmUHRyPEpTT046OkFycmF5PiBhY3Rpb25zQXJyYXk7Ci0gICAg
aWYgKCFwYXJhbWV0ZXJzLT5nZXRBcnJheSgiYWN0aW9ucyJfcywgYWN0aW9uc0FycmF5KSkgewor
ICAgIGF1dG8gYWN0aW9uc0FycmF5ID0gcGFyYW1ldGVycy0+Z2V0QXJyYXkoImFjdGlvbnMiX3Mp
OworICAgIGlmICghYWN0aW9uc0FycmF5KSB7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENv
bW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpJbnZhbGlkQXJndW1l
bnQsIFN0cmluZygiVGhlIHBhcmFtYXRlciAnYWN0aW9ucycgaXMgaW52YWxpZCBvciBub3QgcHJl
c2VudCIpKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0yMTIyLDcgKzIxMTYsNyBAQCB2
b2lkIFdlYkRyaXZlclNlcnZpY2U6OnBlcmZvcm1BY3Rpb25zKFJlZlB0cjxKU09OOjpPYmplY3Q+
JiYgcGFyYW1ldGVycywgRnVuY3RpbwogICAgIHVuc2lnbmVkIGFjdGlvbnNBcnJheUxlbmd0aCA9
IGFjdGlvbnNBcnJheS0+bGVuZ3RoKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFj
dGlvbnNBcnJheUxlbmd0aDsgKytpKSB7CiAgICAgICAgIGF1dG8gYWN0aW9uU2VxdWVuY2UgPSBh
Y3Rpb25zQXJyYXktPmdldChpKTsKLSAgICAgICAgYXV0byBpbnB1dFNvdXJjZUFjdGlvbnMgPSBw
cm9jZXNzSW5wdXRBY3Rpb25TZXF1ZW5jZSgqbV9zZXNzaW9uLCAqYWN0aW9uU2VxdWVuY2UsIGVy
cm9yTWVzc2FnZSk7CisgICAgICAgIGF1dG8gaW5wdXRTb3VyY2VBY3Rpb25zID0gcHJvY2Vzc0lu
cHV0QWN0aW9uU2VxdWVuY2UoKm1fc2Vzc2lvbiwgYWN0aW9uU2VxdWVuY2UsIGVycm9yTWVzc2Fn
ZSk7CiAgICAgICAgIGlmICghaW5wdXRTb3VyY2VBY3Rpb25zKSB7CiAgICAgICAgICAgICBjb21w
bGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29k
ZTo6SW52YWxpZEFyZ3VtZW50LCBlcnJvck1lc3NhZ2UudmFsdWUoKSkpOwogICAgICAgICAgICAg
cmV0dXJuOwpAQCAtMjIwMiw4ICsyMTk2LDggQEAgdm9pZCBXZWJEcml2ZXJTZXJ2aWNlOjpzZW5k
QWxlcnRUZXh0KFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycywgRnVuY3Rpb24KICAg
ICBpZiAoIWZpbmRTZXNzaW9uT3JDb21wbGV0ZVdpdGhFcnJvcigqcGFyYW1ldGVycywgY29tcGxl
dGlvbkhhbmRsZXIpKQogICAgICAgICByZXR1cm47CiAKLSAgICBTdHJpbmcgdGV4dDsKLSAgICBp
ZiAoIXBhcmFtZXRlcnMtPmdldFN0cmluZygidGV4dCJfcywgdGV4dCkpIHsKKyAgICBhdXRvIHRl
eHQgPSBwYXJhbWV0ZXJzLT5nZXRTdHJpbmcoInRleHQiX3MpOworICAgIGlmICghdGV4dCkgewog
ICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1
bHQ6OkVycm9yQ29kZTo6SW52YWxpZEFyZ3VtZW50KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViRHJpdmVyL1dlYkRyaXZlclNlcnZpY2UuaCBiL1NvdXJj
ZS9XZWJEcml2ZXIvV2ViRHJpdmVyU2VydmljZS5oCmluZGV4IGEzNGJlYjhmMGRkM2Q2NDA0Y2M5
Njc2ZGYyMGI0MGI4MjAxOTU4MGIuLmVkOWRiMDg4NTdiOTQ3NDlmNGU3YTQ4ZThmMGE5NmY0YjQ0
MzJiMzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJEcml2ZXIvV2ViRHJpdmVyU2VydmljZS5oCisr
KyBiL1NvdXJjZS9XZWJEcml2ZXIvV2ViRHJpdmVyU2VydmljZS5oCkBAIC0xMjIsOCArMTIyLDgg
QEAgcHJpdmF0ZToKICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiB2YWxpZGF0ZWRDYXBhYmlsaXRp
ZXMoY29uc3QgSlNPTjo6T2JqZWN0JikgY29uc3Q7CiAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4g
bWVyZ2VDYXBhYmlsaXRpZXMoY29uc3QgSlNPTjo6T2JqZWN0JiwgY29uc3QgSlNPTjo6T2JqZWN0
JikgY29uc3Q7CiAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gbWF0Y2hDYXBhYmlsaXRpZXMoY29u
c3QgSlNPTjo6T2JqZWN0JikgY29uc3Q7Ci0gICAgYm9vbCBwbGF0Zm9ybVZhbGlkYXRlQ2FwYWJp
bGl0eShjb25zdCBTdHJpbmcmLCBjb25zdCBSZWZQdHI8SlNPTjo6VmFsdWU+JikgY29uc3Q7Ci0g
ICAgYm9vbCBwbGF0Zm9ybU1hdGNoQ2FwYWJpbGl0eShjb25zdCBTdHJpbmcmLCBjb25zdCBSZWZQ
dHI8SlNPTjo6VmFsdWU+JikgY29uc3Q7CisgICAgYm9vbCBwbGF0Zm9ybVZhbGlkYXRlQ2FwYWJp
bGl0eShjb25zdCBTdHJpbmcmLCBjb25zdCBSZWY8SlNPTjo6VmFsdWU+JikgY29uc3Q7CisgICAg
Ym9vbCBwbGF0Zm9ybU1hdGNoQ2FwYWJpbGl0eShjb25zdCBTdHJpbmcmLCBjb25zdCBSZWY8SlNP
Tjo6VmFsdWU+JikgY29uc3Q7CiAgICAgYm9vbCBwbGF0Zm9ybVN1cHBvcnRQcm94eVR5cGUoY29u
c3QgU3RyaW5nJikgY29uc3Q7CiAgICAgdm9pZCBwYXJzZUNhcGFiaWxpdGllcyhjb25zdCBKU09O
OjpPYmplY3QmIGRlc2lyZWRDYXBhYmlsaXRpZXMsIENhcGFiaWxpdGllcyYpIGNvbnN0OwogICAg
IHZvaWQgcGxhdGZvcm1QYXJzZUNhcGFiaWxpdGllcyhjb25zdCBKU09OOjpPYmplY3QmIGRlc2ly
ZWRDYXBhYmlsaXRpZXMsIENhcGFiaWxpdGllcyYpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkRyaXZlci9ndGsvV2ViRHJpdmVyU2VydmljZUd0ay5jcHAgYi9Tb3VyY2UvV2ViRHJpdmVy
L2d0ay9XZWJEcml2ZXJTZXJ2aWNlR3RrLmNwcAppbmRleCAyNGQxYmRkMDE0YTA3MGI1OTc2NDRi
NTUzNjdkNDM3NDA3ZTJjMTk0Li40NGM5MWFhNWY2NzM3NWUxNTk5NDBiNGIwYTBkZDk0NGJmZDBm
MmYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViRHJpdmVyL2d0ay9XZWJEcml2ZXJTZXJ2aWNlR3Rr
LmNwcAorKysgYi9Tb3VyY2UvV2ViRHJpdmVyL2d0ay9XZWJEcml2ZXJTZXJ2aWNlR3RrLmNwcApA
QCAtNDAsNjQgKzQwLDQ4IEBAIENhcGFiaWxpdGllcyBXZWJEcml2ZXJTZXJ2aWNlOjpwbGF0Zm9y
bUNhcGFiaWxpdGllcygpCiAgICAgcmV0dXJuIGNhcGFiaWxpdGllczsKIH0KIAotYm9vbCBXZWJE
cml2ZXJTZXJ2aWNlOjpwbGF0Zm9ybVZhbGlkYXRlQ2FwYWJpbGl0eShjb25zdCBTdHJpbmcmIG5h
bWUsIGNvbnN0IFJlZlB0cjxKU09OOjpWYWx1ZT4mIHZhbHVlKSBjb25zdAorYm9vbCBXZWJEcml2
ZXJTZXJ2aWNlOjpwbGF0Zm9ybVZhbGlkYXRlQ2FwYWJpbGl0eShjb25zdCBTdHJpbmcmIG5hbWUs
IGNvbnN0IFJlZjxKU09OOjpWYWx1ZT4mIHZhbHVlKSBjb25zdAogewogICAgIGlmIChuYW1lICE9
ICJ3ZWJraXRndGs6YnJvd3Nlck9wdGlvbnMiKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAg
IFJlZlB0cjxKU09OOjpPYmplY3Q+IGJyb3dzZXJPcHRpb25zOwotICAgIGlmICghdmFsdWUtPmFz
T2JqZWN0KGJyb3dzZXJPcHRpb25zKSkKKyAgICBhdXRvIGJyb3dzZXJPcHRpb25zID0gdmFsdWUt
PmFzT2JqZWN0KCk7CisgICAgaWYgKCFicm93c2VyT3B0aW9ucykKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCiAgICAgaWYgKGJyb3dzZXJPcHRpb25zLT5pc051bGwoKSkKICAgICAgICAgcmV0dXJu
IHRydWU7CiAKLSAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IGJpbmFyeVZhbHVlOwotICAgIFN0cmlu
ZyBiaW5hcnk7Ci0gICAgaWYgKGJyb3dzZXJPcHRpb25zLT5nZXRWYWx1ZSgiYmluYXJ5Il9zLCBi
aW5hcnlWYWx1ZSkgJiYgIWJpbmFyeVZhbHVlLT5hc1N0cmluZyhiaW5hcnkpKQorICAgIGF1dG8g
YmluYXJ5ID0gYnJvd3Nlck9wdGlvbnMtPmdldFN0cmluZygiYmluYXJ5Il9zKTsKKyAgICBpZiAo
IWJpbmFyeSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgUmVmUHRyPEpTT046OlZhbHVl
PiB1c2VPdmVybGF5U2Nyb2xsYmFyc1ZhbHVlOwotICAgIGJvb2wgdXNlT3ZlcmxheVNjcm9sbGJh
cnM7Ci0gICAgaWYgKGJyb3dzZXJPcHRpb25zLT5nZXRWYWx1ZSgidXNlT3ZlcmxheVNjcm9sbGJh
cnMiX3MsIHVzZU92ZXJsYXlTY3JvbGxiYXJzVmFsdWUpICYmICF1c2VPdmVybGF5U2Nyb2xsYmFy
c1ZhbHVlLT5hc0Jvb2xlYW4odXNlT3ZlcmxheVNjcm9sbGJhcnMpKQorICAgIGF1dG8gdXNlT3Zl
cmxheVNjcm9sbGJhcnMgPSBicm93c2VyT3B0aW9ucy0+Z2V0Qm9vbGVhbigidXNlT3ZlcmxheVNj
cm9sbGJhcnMiX3MpOworICAgIGlmICghdXNlT3ZlcmxheVNjcm9sbGJhcnMpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gYnJvd3NlckFyZ3VtZW50c1Zh
bHVlOwotICAgIFJlZlB0cjxKU09OOjpBcnJheT4gYnJvd3NlckFyZ3VtZW50czsKLSAgICBpZiAo
YnJvd3Nlck9wdGlvbnMtPmdldFZhbHVlKCJhcmdzIl9zLCBicm93c2VyQXJndW1lbnRzVmFsdWUp
KSB7Ci0gICAgICAgIGlmICghYnJvd3NlckFyZ3VtZW50c1ZhbHVlLT5hc0FycmF5KGJyb3dzZXJB
cmd1bWVudHMpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCisgICAgaWYgKGF1dG8gYnJv
d3NlckFyZ3VtZW50cyA9IGJyb3dzZXJPcHRpb25zLT5nZXRBcnJheSgiYXJncyJfcykpIHsKICAg
ICAgICAgdW5zaWduZWQgYnJvd3NlckFyZ3VtZW50c0xlbmd0aCA9IGJyb3dzZXJBcmd1bWVudHMt
Pmxlbmd0aCgpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYnJvd3NlckFyZ3Vt
ZW50c0xlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHZhbHVl
ID0gYnJvd3NlckFyZ3VtZW50cy0+Z2V0KGkpOwotICAgICAgICAgICAgU3RyaW5nIGFyZ3VtZW50
OwotICAgICAgICAgICAgaWYgKCF2YWx1ZS0+YXNTdHJpbmcoYXJndW1lbnQpKQorICAgICAgICAg
ICAgYXV0byBhcmd1bWVudCA9IGJyb3dzZXJBcmd1bWVudHMtPmdldChpKS0+YXNTdHJpbmcoKTsK
KyAgICAgICAgICAgIGlmICghYXJndW1lbnQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICB9CiAgICAgfQogCi0gICAgUmVmUHRyPEpTT046OlZhbHVlPiBjZXJ0aWZpY2F0
ZXNWYWx1ZTsKLSAgICBpZiAoYnJvd3Nlck9wdGlvbnMtPmdldFZhbHVlKCJjZXJ0aWZpY2F0ZXMi
X3MsIGNlcnRpZmljYXRlc1ZhbHVlKSkgewotICAgICAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IGNl
cnRpZmljYXRlczsKLSAgICAgICAgaWYgKCFjZXJ0aWZpY2F0ZXNWYWx1ZS0+YXNBcnJheShjZXJ0
aWZpY2F0ZXMpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCisgICAgaWYgKGF1dG8gY2Vy
dGlmaWNhdGVzID0gYnJvd3Nlck9wdGlvbnMtPmdldEFycmF5KCJjZXJ0aWZpY2F0ZXMiX3MpKSB7
CiAgICAgICAgIHVuc2lnbmVkIGNlcnRpZmljYXRlc0xlbmd0aCA9IGNlcnRpZmljYXRlcy0+bGVu
Z3RoKCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjZXJ0aWZpY2F0ZXNMZW5n
dGg7ICsraSkgewotICAgICAgICAgICAgUmVmUHRyPEpTT046OlZhbHVlPiBjZXJ0aWZpY2F0ZVZh
bHVlID0gY2VydGlmaWNhdGVzLT5nZXQoaSk7Ci0gICAgICAgICAgICBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiBjZXJ0aWZpY2F0ZTsKLSAgICAgICAgICAgIGlmICghY2VydGlmaWNhdGVWYWx1ZS0+YXNP
YmplY3QoY2VydGlmaWNhdGUpKQorICAgICAgICAgICAgYXV0byBjZXJ0aWZpY2F0ZSA9IGNlcnRp
ZmljYXRlcy0+Z2V0KGkpLT5hc09iamVjdCgpOworICAgICAgICAgICAgaWYgKCFjZXJ0aWZpY2F0
ZSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgICAgIFJlZlB0cjxK
U09OOjpWYWx1ZT4gaG9zdFZhbHVlOwotICAgICAgICAgICAgU3RyaW5nIGhvc3Q7Ci0gICAgICAg
ICAgICBpZiAoIWNlcnRpZmljYXRlLT5nZXRWYWx1ZSgiaG9zdCJfcywgaG9zdFZhbHVlKSB8fCAh
aG9zdFZhbHVlLT5hc1N0cmluZyhob3N0KSkKKyAgICAgICAgICAgIGF1dG8gaG9zdCA9IGNlcnRp
ZmljYXRlLT5nZXRTdHJpbmcoImhvc3QiX3MpOworICAgICAgICAgICAgaWYgKCFob3N0KQogICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICAgICAgUmVmUHRyPEpTT046OlZh
bHVlPiBjZXJ0aWZpY2F0ZUZpbGVWYWx1ZTsKLSAgICAgICAgICAgIFN0cmluZyBjZXJ0aWZpY2F0
ZUZpbGU7Ci0gICAgICAgICAgICBpZiAoIWNlcnRpZmljYXRlLT5nZXRWYWx1ZSgiY2VydGlmaWNh
dGVGaWxlIl9zLCBjZXJ0aWZpY2F0ZUZpbGVWYWx1ZSkgfHwgIWNlcnRpZmljYXRlRmlsZVZhbHVl
LT5hc1N0cmluZyhjZXJ0aWZpY2F0ZUZpbGUpKQorICAgICAgICAgICAgYXV0byBjZXJ0aWZpY2F0
ZUZpbGUgPSBjZXJ0aWZpY2F0ZS0+Z2V0U3RyaW5nKCJjZXJ0aWZpY2F0ZUZpbGUiX3MpOworICAg
ICAgICAgICAgaWYgKCFjZXJ0aWZpY2F0ZUZpbGUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICB9CiAgICAgfQpAQCAtMTA1LDcgKzg5LDcgQEAgYm9vbCBXZWJEcml2ZXJT
ZXJ2aWNlOjpwbGF0Zm9ybVZhbGlkYXRlQ2FwYWJpbGl0eShjb25zdCBTdHJpbmcmIG5hbWUsIGNv
bnN0IFJlZlAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBXZWJEcml2ZXJTZXJ2aWNlOjpw
bGF0Zm9ybU1hdGNoQ2FwYWJpbGl0eShjb25zdCBTdHJpbmcmLCBjb25zdCBSZWZQdHI8SlNPTjo6
VmFsdWU+JikgY29uc3QKK2Jvb2wgV2ViRHJpdmVyU2VydmljZTo6cGxhdGZvcm1NYXRjaENhcGFi
aWxpdHkoY29uc3QgU3RyaW5nJiwgY29uc3QgUmVmPEpTT046OlZhbHVlPiYpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIHRydWU7CiB9CkBAIC0xMTYsNTMgKzEwMCw0NiBAQCB2b2lkIFdlYkRyaXZlclNl
cnZpY2U6OnBsYXRmb3JtUGFyc2VDYXBhYmlsaXRpZXMoY29uc3QgSlNPTjo6T2JqZWN0JiBtYXRj
aGVkQ2FwYQogICAgIGNhcGFiaWxpdGllcy5icm93c2VyQXJndW1lbnRzID0gVmVjdG9yPFN0cmlu
Zz4geyAiLS1hdXRvbWF0aW9uIl9zIH07CiAgICAgY2FwYWJpbGl0aWVzLnVzZU92ZXJsYXlTY3Jv
bGxiYXJzID0gdHJ1ZTsKIAotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IGJyb3dzZXJPcHRpb25z
OwotICAgIGlmICghbWF0Y2hlZENhcGFiaWxpdGllcy5nZXRPYmplY3QoIndlYmtpdGd0azpicm93
c2VyT3B0aW9ucyJfcywgYnJvd3Nlck9wdGlvbnMpKQorICAgIGF1dG8gYnJvd3Nlck9wdGlvbnMg
PSBtYXRjaGVkQ2FwYWJpbGl0aWVzLmdldE9iamVjdCgid2Via2l0Z3RrOmJyb3dzZXJPcHRpb25z
Il9zKTsKKyAgICBpZiAoIWJyb3dzZXJPcHRpb25zKQogICAgICAgICByZXR1cm47CiAKLSAgICBT
dHJpbmcgYnJvd3NlckJpbmFyeTsKLSAgICBpZiAoYnJvd3Nlck9wdGlvbnMtPmdldFN0cmluZygi
YmluYXJ5Il9zLCBicm93c2VyQmluYXJ5KSkgeworICAgIGF1dG8gYnJvd3NlckJpbmFyeSA9IGJy
b3dzZXJPcHRpb25zLT5nZXRTdHJpbmcoImJpbmFyeSJfcyk7CisgICAgaWYgKCEhYnJvd3NlckJp
bmFyeSkgewogICAgICAgICBjYXBhYmlsaXRpZXMuYnJvd3NlckJpbmFyeSA9IGJyb3dzZXJCaW5h
cnk7CiAgICAgICAgIGNhcGFiaWxpdGllcy5icm93c2VyQXJndW1lbnRzID0gV1RGOjpudWxsb3B0
OwogICAgIH0KIAotICAgIFJlZlB0cjxKU09OOjpBcnJheT4gYnJvd3NlckFyZ3VtZW50czsKLSAg
ICBpZiAoYnJvd3Nlck9wdGlvbnMtPmdldEFycmF5KCJhcmdzIl9zLCBicm93c2VyQXJndW1lbnRz
KSAmJiBicm93c2VyQXJndW1lbnRzLT5sZW5ndGgoKSkgeworICAgIGF1dG8gYnJvd3NlckFyZ3Vt
ZW50cyA9IGJyb3dzZXJPcHRpb25zLT5nZXRBcnJheSgiYXJncyJfcyk7CisgICAgaWYgKGJyb3dz
ZXJBcmd1bWVudHMgJiYgYnJvd3NlckFyZ3VtZW50cy0+bGVuZ3RoKCkpIHsKICAgICAgICAgdW5z
aWduZWQgYnJvd3NlckFyZ3VtZW50c0xlbmd0aCA9IGJyb3dzZXJBcmd1bWVudHMtPmxlbmd0aCgp
OwogICAgICAgICBjYXBhYmlsaXRpZXMuYnJvd3NlckFyZ3VtZW50cyA9IFZlY3RvcjxTdHJpbmc+
KCk7CiAgICAgICAgIGNhcGFiaWxpdGllcy5icm93c2VyQXJndW1lbnRzLT5yZXNlcnZlSW5pdGlh
bENhcGFjaXR5KGJyb3dzZXJBcmd1bWVudHNMZW5ndGgpOwogICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgYnJvd3NlckFyZ3VtZW50c0xlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICBS
ZWZQdHI8SlNPTjo6VmFsdWU+IHZhbHVlID0gYnJvd3NlckFyZ3VtZW50cy0+Z2V0KGkpOwotICAg
ICAgICAgICAgU3RyaW5nIGFyZ3VtZW50OwotICAgICAgICAgICAgdmFsdWUtPmFzU3RyaW5nKGFy
Z3VtZW50KTsKKyAgICAgICAgICAgIGF1dG8gYXJndW1lbnQgPSBicm93c2VyQXJndW1lbnRzLT5n
ZXQoaSktPmFzU3RyaW5nKCk7CiAgICAgICAgICAgICBBU1NFUlQoIWFyZ3VtZW50LmlzTnVsbCgp
KTsKICAgICAgICAgICAgIGNhcGFiaWxpdGllcy5icm93c2VyQXJndW1lbnRzLT51bmNoZWNrZWRB
cHBlbmQoV1RGTW92ZShhcmd1bWVudCkpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgYm9vbCB1
c2VPdmVybGF5U2Nyb2xsYmFyczsKLSAgICBpZiAoYnJvd3Nlck9wdGlvbnMtPmdldEJvb2xlYW4o
InVzZU92ZXJsYXlTY3JvbGxiYXJzIl9zLCB1c2VPdmVybGF5U2Nyb2xsYmFycykpCisgICAgaWYg
KGF1dG8gdXNlT3ZlcmxheVNjcm9sbGJhcnMgPSBicm93c2VyT3B0aW9ucy0+Z2V0Qm9vbGVhbigi
dXNlT3ZlcmxheVNjcm9sbGJhcnMiX3MpKQogICAgICAgICBjYXBhYmlsaXRpZXMudXNlT3Zlcmxh
eVNjcm9sbGJhcnMgPSB1c2VPdmVybGF5U2Nyb2xsYmFyczsKICAgICBlbHNlCiAgICAgICAgIGNh
cGFiaWxpdGllcy51c2VPdmVybGF5U2Nyb2xsYmFycyA9IHRydWU7CiAKLSAgICBSZWZQdHI8SlNP
Tjo6QXJyYXk+IGNlcnRpZmljYXRlczsKLSAgICBpZiAoYnJvd3Nlck9wdGlvbnMtPmdldEFycmF5
KCJjZXJ0aWZpY2F0ZXMiX3MsIGNlcnRpZmljYXRlcykgJiYgY2VydGlmaWNhdGVzLT5sZW5ndGgo
KSkgeworICAgIGF1dG8gY2VydGlmaWNhdGVzID0gYnJvd3Nlck9wdGlvbnMtPmdldEFycmF5KCJj
ZXJ0aWZpY2F0ZXMiX3MpOworICAgIGlmIChjZXJ0aWZpY2F0ZXMgJiYgY2VydGlmaWNhdGVzLT5s
ZW5ndGgoKSkgewogICAgICAgICB1bnNpZ25lZCBjZXJ0aWZpY2F0ZXNMZW5ndGggPSBjZXJ0aWZp
Y2F0ZXMtPmxlbmd0aCgpOwogICAgICAgICBjYXBhYmlsaXRpZXMuY2VydGlmaWNhdGVzID0gVmVj
dG9yPHN0ZDo6cGFpcjxTdHJpbmcsIFN0cmluZz4+KCk7CiAgICAgICAgIGNhcGFiaWxpdGllcy5j
ZXJ0aWZpY2F0ZXMtPnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoY2VydGlmaWNhdGVzTGVuZ3RoKTsK
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNlcnRpZmljYXRlc0xlbmd0aDsgKytp
KSB7Ci0gICAgICAgICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHZhbHVlID0gY2VydGlmaWNhdGVz
LT5nZXQoaSk7Ci0gICAgICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBjZXJ0aWZpY2F0ZTsK
LSAgICAgICAgICAgIHZhbHVlLT5hc09iamVjdChjZXJ0aWZpY2F0ZSk7CisgICAgICAgICAgICBh
dXRvIGNlcnRpZmljYXRlID0gY2VydGlmaWNhdGVzLT5nZXQoaSktPmFzT2JqZWN0KCk7CiAgICAg
ICAgICAgICBBU1NFUlQoY2VydGlmaWNhdGUpOwogCi0gICAgICAgICAgICBTdHJpbmcgaG9zdDsK
LSAgICAgICAgICAgIGNlcnRpZmljYXRlLT5nZXRTdHJpbmcoImhvc3QiX3MsIGhvc3QpOworICAg
ICAgICAgICAgYXV0byBob3N0ID0gY2VydGlmaWNhdGUtPmdldFN0cmluZygiaG9zdCJfcyk7CiAg
ICAgICAgICAgICBBU1NFUlQoIWhvc3QuaXNOdWxsKCkpOwogCi0gICAgICAgICAgICBTdHJpbmcg
Y2VydGlmaWNhdGVGaWxlOwotICAgICAgICAgICAgY2VydGlmaWNhdGUtPmdldFN0cmluZygiY2Vy
dGlmaWNhdGVGaWxlIl9zLCBjZXJ0aWZpY2F0ZUZpbGUpOworICAgICAgICAgICAgYXV0byBjZXJ0
aWZpY2F0ZUZpbGUgPSBjZXJ0aWZpY2F0ZS0+Z2V0U3RyaW5nKCJjZXJ0aWZpY2F0ZUZpbGUiX3Mp
OwogICAgICAgICAgICAgQVNTRVJUKCFjZXJ0aWZpY2F0ZUZpbGUuaXNOdWxsKCkpOwogCiAgICAg
ICAgICAgICBjYXBhYmlsaXRpZXMuY2VydGlmaWNhdGVzLT51bmNoZWNrZWRBcHBlbmQoeyBXVEZN
b3ZlKGhvc3QpLCBXVEZNb3ZlKGNlcnRpZmljYXRlRmlsZSkgfSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViRHJpdmVyL3dpbi9XZWJEcml2ZXJTZXJ2aWNlV2luLmNwcCBiL1NvdXJjZS9XZWJEcml2
ZXIvd2luL1dlYkRyaXZlclNlcnZpY2VXaW4uY3BwCmluZGV4IGVjZmU0Y2QxMDUyNmVhYTFlY2Nh
Y2EwNDM5ODhjZDYzMzA0ZDM4NGQuLjlhOTYwZjBiYmYyZGEzODhhOTZmNjlmNGFmNzQxN2VlNjBl
ZDM3MzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJEcml2ZXIvd2luL1dlYkRyaXZlclNlcnZpY2VX
aW4uY3BwCisrKyBiL1NvdXJjZS9XZWJEcml2ZXIvd2luL1dlYkRyaXZlclNlcnZpY2VXaW4uY3Bw
CkBAIC00NCwxMiArNDQsMTIgQEAgYm9vbCBXZWJEcml2ZXJTZXJ2aWNlOjpwbGF0Zm9ybUNvbXBh
cmVCcm93c2VyVmVyc2lvbnMoY29uc3QgU3RyaW5nJiByZXF1aXJlZFZlcnMKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotYm9vbCBXZWJEcml2ZXJTZXJ2aWNlOjpwbGF0Zm9ybVZhbGlkYXRlQ2FwYWJp
bGl0eShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFJlZlB0cjxKU09OOjpWYWx1ZT4mIHZhbHVl
KSBjb25zdAorYm9vbCBXZWJEcml2ZXJTZXJ2aWNlOjpwbGF0Zm9ybVZhbGlkYXRlQ2FwYWJpbGl0
eShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFJlZjxKU09OOjpWYWx1ZT4mIHZhbHVlKSBjb25z
dAogewogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFdlYkRyaXZlclNlcnZpY2U6OnBsYXRm
b3JtTWF0Y2hDYXBhYmlsaXR5KGNvbnN0IFN0cmluZyYsIGNvbnN0IFJlZlB0cjxKU09OOjpWYWx1
ZT4mKSBjb25zdAorYm9vbCBXZWJEcml2ZXJTZXJ2aWNlOjpwbGF0Zm9ybU1hdGNoQ2FwYWJpbGl0
eShjb25zdCBTdHJpbmcmLCBjb25zdCBSZWY8SlNPTjo6VmFsdWU+JikgY29uc3QKIHsKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJEcml2ZXIvd3BlL1dlYkRyaXZl
clNlcnZpY2VXUEUuY3BwIGIvU291cmNlL1dlYkRyaXZlci93cGUvV2ViRHJpdmVyU2VydmljZVdQ
RS5jcHAKaW5kZXggMDZkM2E1YzJhODI1MjkxOGU3NGYxMDNlYmM4OWNiNTIzNzllOTAzNy4uMmI3
YjE3MWYyMmRhNTNmZWY5NTgxYmRmNmRiNzY2M2NiMWRjYTMxMCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkRyaXZlci93cGUvV2ViRHJpdmVyU2VydmljZVdQRS5jcHAKKysrIGIvU291cmNlL1dlYkRy
aXZlci93cGUvV2ViRHJpdmVyU2VydmljZVdQRS5jcHAKQEAgLTQwLDU3ICs0MCw0NyBAQCBDYXBh
YmlsaXRpZXMgV2ViRHJpdmVyU2VydmljZTo6cGxhdGZvcm1DYXBhYmlsaXRpZXMoKQogICAgIHJl
dHVybiBjYXBhYmlsaXRpZXM7CiB9CiAKLWJvb2wgV2ViRHJpdmVyU2VydmljZTo6cGxhdGZvcm1W
YWxpZGF0ZUNhcGFiaWxpdHkoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBSZWZQdHI8SlNPTjo6
VmFsdWU+JiB2YWx1ZSkgY29uc3QKK2Jvb2wgV2ViRHJpdmVyU2VydmljZTo6cGxhdGZvcm1WYWxp
ZGF0ZUNhcGFiaWxpdHkoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBSZWY8SlNPTjo6VmFsdWU+
JiB2YWx1ZSkgY29uc3QKIHsKICAgICBpZiAobmFtZSAhPSAid3BlOmJyb3dzZXJPcHRpb25zIikK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBicm93c2Vy
T3B0aW9uczsKLSAgICBpZiAoIXZhbHVlLT5hc09iamVjdChicm93c2VyT3B0aW9ucykpCisgICAg
YXV0byBicm93c2VyT3B0aW9ucyA9IHZhbHVlLT5hc09iamVjdCgpOworICAgIGlmICghYnJvd3Nl
ck9wdGlvbnMpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChicm93c2VyT3B0aW9u
cy0+aXNOdWxsKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgLy8gSWYgYnJvd3NlciBv
cHRpb25zIGFyZSBwcm92aWRlZCwgYmluYXJ5IGlzIHJlcXVpcmVkLgotICAgIFN0cmluZyBiaW5h
cnk7Ci0gICAgaWYgKCFicm93c2VyT3B0aW9ucy0+Z2V0U3RyaW5nKCJiaW5hcnkiX3MsIGJpbmFy
eSkpCisgICAgYXV0byBiaW5hcnkgPSBicm93c2VyT3B0aW9ucy0+Z2V0U3RyaW5nKCJiaW5hcnki
X3MpOworICAgIGlmICghYmluYXJ5KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBSZWZQ
dHI8SlNPTjo6VmFsdWU+IGJyb3dzZXJBcmd1bWVudHNWYWx1ZTsKLSAgICBSZWZQdHI8SlNPTjo6
QXJyYXk+IGJyb3dzZXJBcmd1bWVudHM7Ci0gICAgaWYgKGJyb3dzZXJPcHRpb25zLT5nZXRWYWx1
ZSgiYXJncyJfcywgYnJvd3NlckFyZ3VtZW50c1ZhbHVlKSAmJiAhYnJvd3NlckFyZ3VtZW50c1Zh
bHVlLT5hc0FycmF5KGJyb3dzZXJBcmd1bWVudHMpKQorICAgIGF1dG8gYnJvd3NlckFyZ3VtZW50
cyA9IGJyb3dzZXJPcHRpb25zLT5nZXRBcnJheSgiYXJncyJfcyk7CisgICAgaWYgKCFicm93c2Vy
QXJndW1lbnRzKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICB1bnNpZ25lZCBicm93c2Vy
QXJndW1lbnRzTGVuZ3RoID0gYnJvd3NlckFyZ3VtZW50cy0+bGVuZ3RoKCk7CiAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGJyb3dzZXJBcmd1bWVudHNMZW5ndGg7ICsraSkgewotICAgICAg
ICBSZWZQdHI8SlNPTjo6VmFsdWU+IHZhbHVlID0gYnJvd3NlckFyZ3VtZW50cy0+Z2V0KGkpOwot
ICAgICAgICBTdHJpbmcgYXJndW1lbnQ7Ci0gICAgICAgIGlmICghdmFsdWUtPmFzU3RyaW5nKGFy
Z3VtZW50KSkKKyAgICAgICAgYXV0byBhcmd1bWVudCA9IGJyb3dzZXJBcmd1bWVudHMtPmdldChp
KS0+YXNTdHJpbmcoKTsKKyAgICAgICAgaWYgKCFhcmd1bWVudCkKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICB9CiAKLSAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IGNlcnRpZmljYXRlc1Zh
bHVlOwotICAgIGlmIChicm93c2VyT3B0aW9ucy0+Z2V0VmFsdWUoImNlcnRpZmljYXRlcyJfcywg
Y2VydGlmaWNhdGVzVmFsdWUpKSB7Ci0gICAgICAgIFJlZlB0cjxKU09OOjpBcnJheT4gY2VydGlm
aWNhdGVzOwotICAgICAgICBpZiAoIWNlcnRpZmljYXRlc1ZhbHVlLT5hc0FycmF5KGNlcnRpZmlj
YXRlcykpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KKyAgICBpZiAoYXV0byBjZXJ0aWZp
Y2F0ZXMgPSBicm93c2VyT3B0aW9ucy0+Z2V0QXJyYXkoImNlcnRpZmljYXRlcyJfcykpIHsKICAg
ICAgICAgdW5zaWduZWQgY2VydGlmaWNhdGVzTGVuZ3RoID0gY2VydGlmaWNhdGVzLT5sZW5ndGgo
KTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNlcnRpZmljYXRlc0xlbmd0aDsg
KytpKSB7Ci0gICAgICAgICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IGNlcnRpZmljYXRlVmFsdWUg
PSBjZXJ0aWZpY2F0ZXMtPmdldChpKTsKLSAgICAgICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+
IGNlcnRpZmljYXRlOwotICAgICAgICAgICAgaWYgKCFjZXJ0aWZpY2F0ZVZhbHVlLT5hc09iamVj
dChjZXJ0aWZpY2F0ZSkpCisgICAgICAgICAgICBhdXRvIGNlcnRpZmljYXRlID0gY2VydGlmaWNh
dGVzLT5nZXQoaSktPmFzT2JqZWN0KCk7CisgICAgICAgICAgICBpZiAoIWNlcnRpZmljYXRlKQog
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICAgICAgUmVmUHRyPEpTT046
OlZhbHVlPiBob3N0VmFsdWU7Ci0gICAgICAgICAgICBTdHJpbmcgaG9zdDsKLSAgICAgICAgICAg
IGlmICghY2VydGlmaWNhdGUtPmdldFZhbHVlKCJob3N0Il9zLCBob3N0VmFsdWUpIHx8ICFob3N0
VmFsdWUtPmFzU3RyaW5nKGhvc3QpKQorICAgICAgICAgICAgYXV0byBob3N0ID0gY2VydGlmaWNh
dGUtPmdldFN0cmluZygiaG9zdCJfcyk7CisgICAgICAgICAgICBpZiAoIWhvc3QpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+
IGNlcnRpZmljYXRlRmlsZVZhbHVlOwotICAgICAgICAgICAgU3RyaW5nIGNlcnRpZmljYXRlRmls
ZTsKLSAgICAgICAgICAgIGlmICghY2VydGlmaWNhdGUtPmdldFZhbHVlKCJjZXJ0aWZpY2F0ZUZp
bGUiX3MsIGNlcnRpZmljYXRlRmlsZVZhbHVlKSB8fCAhY2VydGlmaWNhdGVGaWxlVmFsdWUtPmFz
U3RyaW5nKGNlcnRpZmljYXRlRmlsZSkpCisgICAgICAgICAgICBhdXRvIGNlcnRpZmljYXRlRmls
ZSA9IGNlcnRpZmljYXRlLT5nZXRTdHJpbmcoImNlcnRpZmljYXRlRmlsZSJfcyk7CisgICAgICAg
ICAgICBpZiAoIWNlcnRpZmljYXRlRmlsZSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgIH0KICAgICB9CkBAIC05OCw3ICs4OCw3IEBAIGJvb2wgV2ViRHJpdmVyU2Vydmlj
ZTo6cGxhdGZvcm1WYWxpZGF0ZUNhcGFiaWxpdHkoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBS
ZWZQCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgV2ViRHJpdmVyU2VydmljZTo6cGxhdGZv
cm1NYXRjaENhcGFiaWxpdHkoY29uc3QgU3RyaW5nJiwgY29uc3QgUmVmUHRyPEpTT046OlZhbHVl
PiYpIGNvbnN0Citib29sIFdlYkRyaXZlclNlcnZpY2U6OnBsYXRmb3JtTWF0Y2hDYXBhYmlsaXR5
KGNvbnN0IFN0cmluZyYsIGNvbnN0IFJlZjxKU09OOjpWYWx1ZT4mKSBjb25zdAogewogICAgIHJl
dHVybiB0cnVlOwogfQpAQCAtMTA4LDQ3ICs5OCw0MSBAQCB2b2lkIFdlYkRyaXZlclNlcnZpY2U6
OnBsYXRmb3JtUGFyc2VDYXBhYmlsaXRpZXMoY29uc3QgSlNPTjo6T2JqZWN0JiBtYXRjaGVkQ2Fw
YQogICAgIGNhcGFiaWxpdGllcy5icm93c2VyQmluYXJ5ID0gU3RyaW5nKCJNaW5pQnJvd3NlciIp
OwogICAgIGNhcGFiaWxpdGllcy5icm93c2VyQXJndW1lbnRzID0gVmVjdG9yPFN0cmluZz4geyAi
LS1hdXRvbWF0aW9uIl9zIH07CiAKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBicm93c2VyT3B0
aW9uczsKLSAgICBpZiAoIW1hdGNoZWRDYXBhYmlsaXRpZXMuZ2V0T2JqZWN0KCJ3cGU6YnJvd3Nl
ck9wdGlvbnMiX3MsIGJyb3dzZXJPcHRpb25zKSkKKyAgICBhdXRvIGJyb3dzZXJPcHRpb25zID0g
bWF0Y2hlZENhcGFiaWxpdGllcy5nZXRPYmplY3QoIndwZTpicm93c2VyT3B0aW9ucyJfcyk7Cisg
ICAgaWYgKCFicm93c2VyT3B0aW9ucykKICAgICAgICAgcmV0dXJuOwogCi0gICAgU3RyaW5nIGJy
b3dzZXJCaW5hcnk7Ci0gICAgaWYgKGJyb3dzZXJPcHRpb25zLT5nZXRTdHJpbmcoImJpbmFyeSJf
cywgYnJvd3NlckJpbmFyeSkpIHsKKyAgICBhdXRvIGJyb3dzZXJCaW5hcnkgPSBicm93c2VyT3B0
aW9ucy0+Z2V0U3RyaW5nKCJiaW5hcnkiX3MpOworICAgIGlmICghIWJyb3dzZXJCaW5hcnkpIHsK
ICAgICAgICAgY2FwYWJpbGl0aWVzLmJyb3dzZXJCaW5hcnkgPSBicm93c2VyQmluYXJ5OwogICAg
ICAgICBjYXBhYmlsaXRpZXMuYnJvd3NlckFyZ3VtZW50cyA9IFdURjo6bnVsbG9wdDsKICAgICB9
CiAKLSAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IGJyb3dzZXJBcmd1bWVudHM7Ci0gICAgaWYgKGJy
b3dzZXJPcHRpb25zLT5nZXRBcnJheSgiYXJncyJfcywgYnJvd3NlckFyZ3VtZW50cykgJiYgYnJv
d3NlckFyZ3VtZW50cy0+bGVuZ3RoKCkpIHsKKyAgICBhdXRvIGJyb3dzZXJBcmd1bWVudHMgPSBi
cm93c2VyT3B0aW9ucy0+Z2V0QXJyYXkoImFyZ3MiX3MpOworICAgIGlmIChicm93c2VyQXJndW1l
bnRzICYmIGJyb3dzZXJBcmd1bWVudHMtPmxlbmd0aCgpKSB7CiAgICAgICAgIHVuc2lnbmVkIGJy
b3dzZXJBcmd1bWVudHNMZW5ndGggPSBicm93c2VyQXJndW1lbnRzLT5sZW5ndGgoKTsKICAgICAg
ICAgY2FwYWJpbGl0aWVzLmJyb3dzZXJBcmd1bWVudHMgPSBWZWN0b3I8U3RyaW5nPigpOwogICAg
ICAgICBjYXBhYmlsaXRpZXMuYnJvd3NlckFyZ3VtZW50cy0+cmVzZXJ2ZUluaXRpYWxDYXBhY2l0
eShicm93c2VyQXJndW1lbnRzTGVuZ3RoKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGJyb3dzZXJBcmd1bWVudHNMZW5ndGg7ICsraSkgewotICAgICAgICAgICAgUmVmUHRyPEpT
T046OlZhbHVlPiB2YWx1ZSA9IGJyb3dzZXJBcmd1bWVudHMtPmdldChpKTsKLSAgICAgICAgICAg
IFN0cmluZyBhcmd1bWVudDsKLSAgICAgICAgICAgIHZhbHVlLT5hc1N0cmluZyhhcmd1bWVudCk7
CisgICAgICAgICAgICBhdXRvIGFyZ3VtZW50ID0gYnJvd3NlckFyZ3VtZW50cy0+Z2V0KGkpLT5h
c1N0cmluZygpOwogICAgICAgICAgICAgQVNTRVJUKCFhcmd1bWVudC5pc051bGwoKSk7CiAgICAg
ICAgICAgICBjYXBhYmlsaXRpZXMuYnJvd3NlckFyZ3VtZW50cy0+dW5jaGVja2VkQXBwZW5kKFdU
Rk1vdmUoYXJndW1lbnQpKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIFJlZlB0cjxKU09OOjpB
cnJheT4gY2VydGlmaWNhdGVzOwotICAgIGlmIChicm93c2VyT3B0aW9ucy0+Z2V0QXJyYXkoImNl
cnRpZmljYXRlcyJfcywgY2VydGlmaWNhdGVzKSAmJiBjZXJ0aWZpY2F0ZXMtPmxlbmd0aCgpKSB7
CisgICAgYXV0byBjZXJ0aWZpY2F0ZXMgPSBicm93c2VyT3B0aW9ucy0+Z2V0QXJyYXkoImNlcnRp
ZmljYXRlcyJfcyk7CisgICAgaWYgKGNlcnRpZmljYXRlcyAmJiBjZXJ0aWZpY2F0ZXMtPmxlbmd0
aCgpKSB7CiAgICAgICAgIHVuc2lnbmVkIGNlcnRpZmljYXRlc0xlbmd0aCA9IGNlcnRpZmljYXRl
cy0+bGVuZ3RoKCk7CiAgICAgICAgIGNhcGFiaWxpdGllcy5jZXJ0aWZpY2F0ZXMgPSBWZWN0b3I8
c3RkOjpwYWlyPFN0cmluZywgU3RyaW5nPj4oKTsKICAgICAgICAgY2FwYWJpbGl0aWVzLmNlcnRp
ZmljYXRlcy0+cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShjZXJ0aWZpY2F0ZXNMZW5ndGgpOwogICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY2VydGlmaWNhdGVzTGVuZ3RoOyArK2kpIHsK
LSAgICAgICAgICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gdmFsdWUgPSBjZXJ0aWZpY2F0ZXMtPmdl
dChpKTsKLSAgICAgICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IGNlcnRpZmljYXRlOwotICAg
ICAgICAgICAgdmFsdWUtPmFzT2JqZWN0KGNlcnRpZmljYXRlKTsKKyAgICAgICAgICAgIGF1dG8g
Y2VydGlmaWNhdGUgPSBjZXJ0aWZpY2F0ZXMtPmdldChpKS0+YXNPYmplY3QoKTsKICAgICAgICAg
ICAgIEFTU0VSVChjZXJ0aWZpY2F0ZSk7CiAKLSAgICAgICAgICAgIFN0cmluZyBob3N0OwotICAg
ICAgICAgICAgY2VydGlmaWNhdGUtPmdldFN0cmluZygiaG9zdCJfcywgaG9zdCk7CisgICAgICAg
ICAgICBhdXRvIGhvc3QgPSBjZXJ0aWZpY2F0ZS0+Z2V0U3RyaW5nKCJob3N0Il9zKTsKICAgICAg
ICAgICAgIEFTU0VSVCghaG9zdC5pc051bGwoKSk7CiAKLSAgICAgICAgICAgIFN0cmluZyBjZXJ0
aWZpY2F0ZUZpbGU7Ci0gICAgICAgICAgICBjZXJ0aWZpY2F0ZS0+Z2V0U3RyaW5nKCJjZXJ0aWZp
Y2F0ZUZpbGUiX3MsIGNlcnRpZmljYXRlRmlsZSk7CisgICAgICAgICAgICBhdXRvIGNlcnRpZmlj
YXRlRmlsZSA9IGNlcnRpZmljYXRlLT5nZXRTdHJpbmcoImNlcnRpZmljYXRlRmlsZSJfcyk7CiAg
ICAgICAgICAgICBBU1NFUlQoIWNlcnRpZmljYXRlRmlsZS5pc051bGwoKSk7CiAKICAgICAgICAg
ICAgIGNhcGFiaWxpdGllcy5jZXJ0aWZpY2F0ZXMtPnVuY2hlY2tlZEFwcGVuZCh7IFdURk1vdmUo
aG9zdCksIFdURk1vdmUoY2VydGlmaWNhdGVGaWxlKSB9KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0NTU01hbmFnZXIuanMgYi9T
b3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9DU1NNYW5hZ2Vy
LmpzCmluZGV4IDY4YWVhYTk3ODcwMjhlZThkMTg1OGExZDI3MDc1MDMzNjBiZDRlOTIuLjE1YjYy
MzFhZjMzYjRjZjdlZWI4ZDI5MDk4NzNiNGRhNGE1YmE3YTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0NTU01hbmFnZXIuanMKKysr
IGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvQ1NTTWFu
YWdlci5qcwpAQCAtMjAzLDMyICsyMDMsMzQgQEAgV0kuQ1NTTWFuYWdlciA9IGNsYXNzIENTU01h
bmFnZXIgZXh0ZW5kcyBXSS5PYmplY3QKICAgICAgICAgaWYgKCF0aGlzLmNhbkZvcmNlQXBwZWFy
YW5jZSgpKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIGxldCBwcm90b2NvbE5hbWUg
PSAiIjsKKyAgICAgICAgbGV0IGNvbW1hbmRBcmd1bWVudHMgPSB7fTsKIAogICAgICAgICBzd2l0
Y2ggKG5hbWUpIHsKICAgICAgICAgY2FzZSBXSS5DU1NNYW5hZ2VyLkFwcGVhcmFuY2UuTGlnaHQ6
Ci0gICAgICAgICAgICBwcm90b2NvbE5hbWUgPSBJbnNwZWN0b3JCYWNrZW5kLkVudW0uUGFnZS5B
cHBlYXJhbmNlLkxpZ2h0OworICAgICAgICAgICAgY29tbWFuZEFyZ3VtZW50cy5hcHBlYXJhbmNl
ID0gSW5zcGVjdG9yQmFja2VuZC5FbnVtLlBhZ2UuQXBwZWFyYW5jZS5MaWdodDsKICAgICAgICAg
ICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgV0kuQ1NTTWFuYWdlci5BcHBlYXJhbmNlLkRhcms6
Ci0gICAgICAgICAgICBwcm90b2NvbE5hbWUgPSBJbnNwZWN0b3JCYWNrZW5kLkVudW0uUGFnZS5B
cHBlYXJhbmNlLkRhcms7CisgICAgICAgICAgICBjb21tYW5kQXJndW1lbnRzLmFwcGVhcmFuY2Ug
PSBJbnNwZWN0b3JCYWNrZW5kLkVudW0uUGFnZS5BcHBlYXJhbmNlLkRhcms7CiAgICAgICAgICAg
ICBicmVhazsKIAogICAgICAgICBjYXNlIG51bGw6Ci0gICAgICAgIGNhc2UgdW5kZWZpbmVkOgot
ICAgICAgICBjYXNlICIiOgotICAgICAgICAgICAgcHJvdG9jb2xOYW1lID0gIiI7CisgICAgICAg
ICAgICAvLyBDT01QQVRJQklMSVRZIChpT1MgMTQpOiB0aGUgYGFwcGVhcmFuY2VgYCBwYXJhbWV0
ZXIgb2YgYFBhZ2Uuc2V0Rm9yY2VkQXBwZWFyYW5jZWAgd2FzIG5vdCBvcHRpb25hbC4KKyAgICAg
ICAgICAgIC8vIFNpbmNlIHN1cHBvcnQgY2FuJ3QgYmUgdGVzdGVkIGRpcmVjdGx5LCBjaGVjayBm
b3IgdGhlIGBvcHRpb25zYGAgcGFyYW1ldGVyIG9mIGBET01EZWJ1Z2dlci5zZXRET01CcmVha3Bv
aW50YCAoaU9TIDE0LjArKS4KKyAgICAgICAgICAgIC8vIEZJWE1FOiBVc2UgZXhwbGljaXQgdmVy
c2lvbiBjaGVja2luZyBvbmNlIGh0dHBzOi8vd2Via2l0Lm9yZy9iLzE0ODY4MCBpcyBmaXhlZC4K
KyAgICAgICAgICAgIGlmICghSW5zcGVjdG9yQmFja2VuZC5oYXNDb21tYW5kKCJET01EZWJ1Z2dl
ci5zZXRET01CcmVha3BvaW50IiwgIm9wdGlvbnMiKSkKKyAgICAgICAgICAgICAgICBjb21tYW5k
QXJndW1lbnRzLmFwcGVhcmFuY2UgPSAiIjsKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICAvLyBBYm9ydCBmb3IgdW5rbm93biB2YWx1ZXMuCisgICAg
ICAgICAgICBjb25zb2xlLmFzc2VydChmYWxzZSwgIlVua25vd24gYXBwZWFyYW5jZSIsIG5hbWUp
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgdGhpcy5fZm9yY2Vk
QXBwZWFyYW5jZSA9IG5hbWUgfHwgbnVsbDsKIAogICAgICAgICBsZXQgdGFyZ2V0ID0gV0kuYXNz
dW1pbmdNYWluVGFyZ2V0KCk7Ci0gICAgICAgIHRhcmdldC5QYWdlQWdlbnQuc2V0Rm9yY2VkQXBw
ZWFyYW5jZShwcm90b2NvbE5hbWUpLnRoZW4oKCkgPT4geworICAgICAgICB0YXJnZXQuUGFnZUFn
ZW50LnNldEZvcmNlZEFwcGVhcmFuY2UuaW52b2tlKGNvbW1hbmRBcmd1bWVudHMpLnRoZW4oKCkg
PT4gewogICAgICAgICAgICAgdGhpcy5tZWRpYVF1ZXJ5UmVzdWx0Q2hhbmdlZCgpOwogICAgICAg
ICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV0kuQ1NTTWFuYWdlci5FdmVudC5G
b3JjZWRBcHBlYXJhbmNlRGlkQ2hhbmdlLCB7YXBwZWFyYW5jZTogdGhpcy5fZm9yY2VkQXBwZWFy
YW5jZX0pOwogICAgICAgICB9KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9V
c2VySW50ZXJmYWNlL1ZpZXdzL1NldHRpbmdzVGFiQ29udGVudFZpZXcuanMgYi9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9TZXR0aW5nc1RhYkNvbnRlbnRWaWV3Lmpz
CmluZGV4IDQ4MmUxNDJhZTExZDYzYzAwMTVmOTZjNzRiY2IyZGVhMmZlNTA2OWQuLjkxODM2ZWNj
NzY5Nzc1NmE5NjZlZmVhNzEwM2M5MmQzNDA4ZTQ0NjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJ
bnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1NldHRpbmdzVGFiQ29udGVudFZpZXcuanMK
KysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvU2V0dGluZ3NU
YWJDb250ZW50Vmlldy5qcwpAQCAtMzQ2LDE0ICszNDYsMTggQEAgV0kuU2V0dGluZ3NUYWJDb250
ZW50VmlldyA9IGNsYXNzIFNldHRpbmdzVGFiQ29udGVudFZpZXcgZXh0ZW5kcyBXSS5UYWJDb250
ZW50VmkKICAgICAgICAgICAgICAgICBbV0kuTG9nZ2luZ0NoYW5uZWwuTGV2ZWwuVmVyYm9zZSwg
V0kuVUlTdHJpbmcoIlZlcmJvc2UiKV0sCiAgICAgICAgICAgICBdOwogICAgICAgICAgICAgY29u
c3QgZWRpdG9yTGFiZWxzID0gewotICAgICAgICAgICAgICAgIG1lZGlhOiBXSS5VSVN0cmluZygi
TWVkaWEgTG9nZ2luZzoiKSwKLSAgICAgICAgICAgICAgICBtZWRpYXNvdXJjZTogV0kuVUlTdHJp
bmcoIk1TRSBMb2dnaW5nOiIpLAotICAgICAgICAgICAgICAgIHdlYnJ0YzogV0kuVUlTdHJpbmco
IldlYlJUQyBMb2dnaW5nOiIpLAorICAgICAgICAgICAgICAgIFtXSS5Db25zb2xlTWVzc2FnZS5N
ZXNzYWdlU291cmNlLk1lZGlhXTogV0kuVUlTdHJpbmcoIk1lZGlhIExvZ2dpbmc6IiksCisgICAg
ICAgICAgICAgICAgW1dJLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VTb3VyY2UuTWVkaWFTb3VyY2Vd
OiBXSS5VSVN0cmluZygiTVNFIExvZ2dpbmc6IiksCisgICAgICAgICAgICAgICAgW1dJLkNvbnNv
bGVNZXNzYWdlLk1lc3NhZ2VTb3VyY2UuV2ViUlRDXTogV0kuVUlTdHJpbmcoIldlYlJUQyBMb2dn
aW5nOiIpLAogICAgICAgICAgICAgfTsKIAogICAgICAgICAgICAgbGV0IGNoYW5uZWxzID0gV0ku
Y29uc29sZU1hbmFnZXIuY3VzdG9tTG9nZ2luZ0NoYW5uZWxzOwogICAgICAgICAgICAgZm9yIChs
ZXQgY2hhbm5lbCBvZiBjaGFubmVscykgewotICAgICAgICAgICAgICAgIGxldCBsb2dFZGl0b3Ig
PSBjb25zb2xlU2V0dGluZ3NWaWV3LmFkZEdyb3VwV2l0aEN1c3RvbVNldHRpbmcoZWRpdG9yTGFi
ZWxzW2NoYW5uZWwuc291cmNlXSwgV0kuU2V0dGluZ0VkaXRvci5UeXBlLlNlbGVjdCwge3ZhbHVl
czogbG9nTGV2ZWxzfSk7CisgICAgICAgICAgICAgICAgbGV0IGxhYmVsID0gZWRpdG9yTGFiZWxz
W2NoYW5uZWwuc291cmNlXTsKKyAgICAgICAgICAgICAgICBpZiAoIWxhYmVsKQorICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgICAgIGxldCBsb2dFZGl0b3IgPSBj
b25zb2xlU2V0dGluZ3NWaWV3LmFkZEdyb3VwV2l0aEN1c3RvbVNldHRpbmcobGFiZWwsIFdJLlNl
dHRpbmdFZGl0b3IuVHlwZS5TZWxlY3QsIHt2YWx1ZXM6IGxvZ0xldmVsc30pOwogICAgICAgICAg
ICAgICAgIGxvZ0VkaXRvci52YWx1ZSA9IGNoYW5uZWwubGV2ZWw7CiAgICAgICAgICAgICAgICAg
bG9nRWRpdG9yLmFkZEV2ZW50TGlzdGVuZXIoV0kuU2V0dGluZ0VkaXRvci5FdmVudC5WYWx1ZURp
ZENoYW5nZSwgKCkgPT4gewogICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCB0YXJnZXQgb2Yg
V0kudGFyZ2V0cykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRp
b24vQXV0b21hdGlvbi5qc29uIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9B
dXRvbWF0aW9uLmpzb24KaW5kZXggM2RjYjIxNDFlYjBkMjc5NDcwN2RlMjg0Yzg3MDcxMGU4Nzcy
MWMzOS4uZWIzY2RiNWY4NjZjNWY5M2E4ODIyOTgzYTQ5ZDkxNmYzZTZlYWZlNSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9BdXRvbWF0aW9uLmpzb24KKysr
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9BdXRvbWF0aW9uLmpzb24KQEAg
LTMyLDcgKzMyLDggQEAKICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJUaGUgY29vcmRpbmF0
ZSBzeXN0ZW0gaW4gd2hpY2ggcmVjdHMsIHBvaW50cywgYW5kIHNpemVzIGFyZSB0byBiZSBpbnRl
cnByZXRlZC4iLAogICAgICAgICAgICAgImVudW0iOiBbCiAgICAgICAgICAgICAgICAgIlBhZ2Ui
LAotICAgICAgICAgICAgICAgICJWaWV3cG9ydCIKKyAgICAgICAgICAgICAgICAiVmlld3BvcnQi
LAorICAgICAgICAgICAgICAgICJMYXlvdXRWaWV3cG9ydCIKICAgICAgICAgICAgIF0KICAgICAg
ICAgfSwKICAgICAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0
b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbi5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmNwcAppbmRleCBkODdhNGRmZWM3OTRm
MzFkY2I2NGU1ZTllZjRiY2U0YjE4YzE5MmEyLi4zZjdlNDBlNThkNGFkODFhZjc0MjA4YmNhNjEw
YmE5ZjhmNTE3Nzg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0
aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmNwcApAQCAtMzA1LDcgKzMwNSw3IEBA
IHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OmdldEJyb3dzaW5nQ29udGV4dHMoUmVmPEdldEJy
b3dzaW5nQ29udGV4dHNDYWxsYmFjaz4mCiAgICAgZ2V0TmV4dENvbnRleHQobWFrZVJlZigqdGhp
cyksIFdURk1vdmUocGFnZXMpLCBKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1
dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dD46OmNyZWF0ZSgpLCBXVEZNb3ZlKGNhbGxiYWNrKSk7
CiB9CiAKLXZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OmdldEJyb3dzaW5nQ29udGV4dChjb25z
dCBTdHJpbmcmIGhhbmRsZSwgUmVmPEdldEJyb3dzaW5nQ29udGV4dENhbGxiYWNrPiYmIGNhbGxi
YWNrKQordm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6Z2V0QnJvd3NpbmdDb250ZXh0KGNvbnN0
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYg
aGFuZGxlLCBSZWY8R2V0QnJvd3NpbmdDb250ZXh0Q2FsbGJhY2s+JiYgY2FsbGJhY2spCiB7CiAg
ICAgV2ViUGFnZVByb3h5KiBwYWdlID0gd2ViUGFnZVByb3h5Rm9ySGFuZGxlKGhhbmRsZSk7CiAg
ICAgaWYgKCFwYWdlKQpAQCAtMzI4LDcgKzMyOCw3IEBAIHN0YXRpYyBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRQcmVzZW50YXRpb24gdG9Qcm90b2NvbChB
CiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAotdm9pZCBXZWJBdXRvbWF0
aW9uU2Vzc2lvbjo6Y3JlYXRlQnJvd3NpbmdDb250ZXh0KGNvbnN0IFN0cmluZyogb3B0aW9uYWxQ
cmVzZW50YXRpb25IaW50LCBSZWY8Q3JlYXRlQnJvd3NpbmdDb250ZXh0Q2FsbGJhY2s+JiYgY2Fs
bGJhY2spCit2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpjcmVhdGVCcm93c2luZ0NvbnRleHQo
T3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0
UHJlc2VudGF0aW9uPiYmIHByZXNlbnRhdGlvbkhpbnQsIFJlZjxDcmVhdGVCcm93c2luZ0NvbnRl
eHRDYWxsYmFjaz4mJiBjYWxsYmFjaykKIHsKICAgICBBU1NFUlQobV9jbGllbnQpOwogICAgIGlm
ICghbV9jbGllbnQpCkBAIC0zMzYsMTEgKzMzNiw4IEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Np
b246OmNyZWF0ZUJyb3dzaW5nQ29udGV4dChjb25zdCBTdHJpbmcqIG9wdGlvbmFsUHJlc2VudGF0
CiAKICAgICB1aW50MTZfdCBvcHRpb25zID0gMDsKIAotICAgIGlmIChvcHRpb25hbFByZXNlbnRh
dGlvbkhpbnQpIHsKLSAgICAgICAgYXV0byBwYXJzZWRQcmVzZW50YXRpb25IaW50ID0gSW5zcGVj
dG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbkhlbHBlcnM6OnBhcnNlRW51bVZhbHVlRnJvbVN0cmlu
ZzxJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRQcmVzZW50
YXRpb24+KCpvcHRpb25hbFByZXNlbnRhdGlvbkhpbnQpOwotICAgICAgICBpZiAocGFyc2VkUHJl
c2VudGF0aW9uSGludC5oYXNWYWx1ZSgpICYmIHBhcnNlZFByZXNlbnRhdGlvbkhpbnQudmFsdWUo
KSA9PSBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRQcmVz
ZW50YXRpb246OlRhYikKLSAgICAgICAgICAgIG9wdGlvbnMgfD0gQVBJOjpBdXRvbWF0aW9uU2Vz
c2lvbkJyb3dzaW5nQ29udGV4dE9wdGlvbnNQcmVmZXJOZXdUYWI7Ci0gICAgfQorICAgIGlmIChw
cmVzZW50YXRpb25IaW50ID09IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dz
aW5nQ29udGV4dFByZXNlbnRhdGlvbjo6VGFiKQorICAgICAgICBvcHRpb25zIHw9IEFQSTo6QXV0
b21hdGlvblNlc3Npb25Ccm93c2luZ0NvbnRleHRPcHRpb25zUHJlZmVyTmV3VGFiOwogCiAgICAg
bV9jbGllbnQtPnJlcXVlc3ROZXdQYWdlV2l0aE9wdGlvbnMoKnRoaXMsIHN0YXRpY19jYXN0PEFQ
STo6QXV0b21hdGlvblNlc3Npb25Ccm93c2luZ0NvbnRleHRPcHRpb25zPihvcHRpb25zKSwgW3By
b3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNr
KV0oV2ViUGFnZVByb3h5KiBwYWdlKSB7CiAgICAgICAgIGlmICghcGFnZSkKQEAgLTM1MiwyMyAr
MzQ5LDI1IEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OmNyZWF0ZUJyb3dzaW5nQ29udGV4
dChjb25zdCBTdHJpbmcqIG9wdGlvbmFsUHJlc2VudGF0CiAgICAgfSk7CiB9CiAKLXZvaWQgV2Vi
QXV0b21hdGlvblNlc3Npb246OmNsb3NlQnJvd3NpbmdDb250ZXh0KEluc3BlY3Rvcjo6RXJyb3JT
dHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGhhbmRsZSkKK0luc3BlY3Rvcjo6UHJv
dG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gV2ViQXV0b21hdGlvblNlc3Npb246OmNsb3NlQnJv
d3NpbmdDb250ZXh0KGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dz
aW5nQ29udGV4dEhhbmRsZSYgaGFuZGxlKQogewogICAgIFdlYlBhZ2VQcm94eSogcGFnZSA9IHdl
YlBhZ2VQcm94eUZvckhhbmRsZShoYW5kbGUpOwogICAgIGlmICghcGFnZSkKICAgICAgICAgU1lO
Q19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUihXaW5kb3dOb3RGb3VuZCk7CiAKICAgICBwYWdl
LT5jbG9zZVBhZ2UoKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgV2ViQXV0b21hdGlv
blNlc3Npb246OnN3aXRjaFRvQnJvd3NpbmdDb250ZXh0KGNvbnN0IFN0cmluZyYgYnJvd3NpbmdD
b250ZXh0SGFuZGxlLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsRnJhbWVIYW5kbGUsIFJlZjxTd2l0
Y2hUb0Jyb3dzaW5nQ29udGV4dENhbGxiYWNrPiYmIGNhbGxiYWNrKQordm9pZCBXZWJBdXRvbWF0
aW9uU2Vzc2lvbjo6c3dpdGNoVG9Ccm93c2luZ0NvbnRleHQoY29uc3QgSW5zcGVjdG9yOjpQcm90
b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJiBicm93c2luZ0NvbnRleHRI
YW5kbGUsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkZyYW1lSGFuZGxl
JiBmcmFtZUhhbmRsZSwgUmVmPFN3aXRjaFRvQnJvd3NpbmdDb250ZXh0Q2FsbGJhY2s+JiYgY2Fs
bGJhY2spCiB7CiAgICAgV2ViUGFnZVByb3h5KiBwYWdlID0gd2ViUGFnZVByb3h5Rm9ySGFuZGxl
KGJyb3dzaW5nQ29udGV4dEhhbmRsZSk7CiAgICAgaWYgKCFwYWdlKQogICAgICAgICBBU1lOQ19G
QUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUihXaW5kb3dOb3RGb3VuZCk7CiAKICAgICBib29sIGZy
YW1lTm90Rm91bmQgPSBmYWxzZTsKLSAgICBhdXRvIGZyYW1lSUQgPSB3ZWJGcmFtZUlERm9ySGFu
ZGxlKG9wdGlvbmFsRnJhbWVIYW5kbGUgPyAqb3B0aW9uYWxGcmFtZUhhbmRsZSA6IGVtcHR5U3Ry
aW5nKCksIGZyYW1lTm90Rm91bmQpOworICAgIGF1dG8gZnJhbWVJRCA9IHdlYkZyYW1lSURGb3JI
YW5kbGUoZnJhbWVIYW5kbGUsIGZyYW1lTm90Rm91bmQpOwogICAgIGlmIChmcmFtZU5vdEZvdW5k
KQogICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUihGcmFtZU5vdEZvdW5k
KTsKIApAQCAtMzgxLDI1ICszODAsMjUgQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6c3dp
dGNoVG9Ccm93c2luZ0NvbnRleHQoY29uc3QgU3RyaW5nJiBicm93c2luZ0NvbnRleHQKICAgICB9
KTsKIH0KIAotdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6c2V0V2luZG93RnJhbWVPZkJyb3dz
aW5nQ29udGV4dChjb25zdCBTdHJpbmcmIGhhbmRsZSwgY29uc3QgSlNPTjo6T2JqZWN0KiBvcHRp
b25hbE9yaWdpbk9iamVjdCwgY29uc3QgSlNPTjo6T2JqZWN0KiBvcHRpb25hbFNpemVPYmplY3Qs
IFJlZjxTZXRXaW5kb3dGcmFtZU9mQnJvd3NpbmdDb250ZXh0Q2FsbGJhY2s+JiYgY2FsbGJhY2sp
Cit2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpzZXRXaW5kb3dGcmFtZU9mQnJvd3NpbmdDb250
ZXh0KGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4
dEhhbmRsZSYgaGFuZGxlLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIG9yaWdpbiwgUmVmUHRyPEpT
T046Ok9iamVjdD4mJiBzaXplLCBSZWY8U2V0V2luZG93RnJhbWVPZkJyb3dzaW5nQ29udGV4dENh
bGxiYWNrPiYmIGNhbGxiYWNrKQogewotICAgIE9wdGlvbmFsPGZsb2F0PiB4OwotICAgIE9wdGlv
bmFsPGZsb2F0PiB5OwotICAgIGlmIChvcHRpb25hbE9yaWdpbk9iamVjdCkgewotICAgICAgICBp
ZiAoISh4ID0gb3B0aW9uYWxPcmlnaW5PYmplY3QtPmdldE51bWJlcjxmbG9hdD4oIngiX3MpKSkK
KyAgICBPcHRpb25hbDxkb3VibGU+IHg7CisgICAgT3B0aW9uYWw8ZG91YmxlPiB5OworICAgIGlm
IChvcmlnaW4pIHsKKyAgICAgICAgaWYgKCEoeCA9IG9yaWdpbi0+Z2V0RG91YmxlKCJ4Il9zKSkp
CiAgICAgICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlM
UyhNaXNzaW5nUGFyYW1ldGVyLCAiVGhlICd4JyBwYXJhbWV0ZXIgd2FzIG5vdCBmb3VuZCBvciBp
bnZhbGlkLiIpOwogCi0gICAgICAgIGlmICghKHkgPSBvcHRpb25hbE9yaWdpbk9iamVjdC0+Z2V0
TnVtYmVyPGZsb2F0PigieSJfcykpKQorICAgICAgICBpZiAoISh5ID0gb3JpZ2luLT5nZXREb3Vi
bGUoInkiX3MpKSkKICAgICAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9S
X0FORF9ERVRBSUxTKE1pc3NpbmdQYXJhbWV0ZXIsICJUaGUgJ3knIHBhcmFtZXRlciB3YXMgbm90
IGZvdW5kIG9yIGludmFsaWQuIik7CiAgICAgfQogCi0gICAgT3B0aW9uYWw8ZmxvYXQ+IHdpZHRo
OwotICAgIE9wdGlvbmFsPGZsb2F0PiBoZWlnaHQ7Ci0gICAgaWYgKG9wdGlvbmFsU2l6ZU9iamVj
dCkgewotICAgICAgICBpZiAoISh3aWR0aCA9IG9wdGlvbmFsU2l6ZU9iamVjdC0+Z2V0TnVtYmVy
PGZsb2F0Pigid2lkdGgiX3MpKSkKKyAgICBPcHRpb25hbDxkb3VibGU+IHdpZHRoOworICAgIE9w
dGlvbmFsPGRvdWJsZT4gaGVpZ2h0OworICAgIGlmIChzaXplKSB7CisgICAgICAgIGlmICghKHdp
ZHRoID0gc2l6ZS0+Z2V0RG91YmxlKCJ3aWR0aCJfcykpKQogICAgICAgICAgICAgQVNZTkNfRkFJ
TF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoTWlzc2luZ1BhcmFtZXRlciwgIlRo
ZSAnd2lkdGgnIHBhcmFtZXRlciB3YXMgbm90IGZvdW5kIG9yIGludmFsaWQuIik7CiAKLSAgICAg
ICAgaWYgKCEoaGVpZ2h0ID0gb3B0aW9uYWxTaXplT2JqZWN0LT5nZXROdW1iZXI8ZmxvYXQ+KCJo
ZWlnaHQiX3MpKSkKKyAgICAgICAgaWYgKCEoaGVpZ2h0ID0gc2l6ZS0+Z2V0RG91YmxlKCJoZWln
aHQiX3MpKSkKICAgICAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FO
RF9ERVRBSUxTKE1pc3NpbmdQYXJhbWV0ZXIsICJUaGUgJ2hlaWdodCcgcGFyYW1ldGVyIHdhcyBu
b3QgZm91bmQgb3IgaW52YWxpZC4iKTsKIAogICAgICAgICBpZiAod2lkdGgudmFsdWUoKSA8IDAp
CkBAIC00MjgsMjYgKzQyNywxOCBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpzZXRXaW5k
b3dGcmFtZU9mQnJvd3NpbmdDb250ZXh0KGNvbnN0IFN0cmluZyYgaGFuZGxlLAogICAgIH0pOwog
fQogCi1zdGF0aWMgT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6UGFn
ZUxvYWRTdHJhdGVneT4gcGFnZUxvYWRTdHJhdGVneUZyb21TdHJpbmdQYXJhbWV0ZXIoY29uc3Qg
U3RyaW5nKiBvcHRpb25hbFBhZ2VMb2FkU3RyYXRlZ3lTdHJpbmcpCitzdGF0aWMgSW5zcGVjdG9y
OjpQcm90b2NvbDo6QXV0b21hdGlvbjo6UGFnZUxvYWRTdHJhdGVneSBwYWdlTG9hZFN0cmF0ZWd5
RnJvbVBhcmFtZXRlcihPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpQ
YWdlTG9hZFN0cmF0ZWd5PiYmIG9wdGlvbmFsUGFnZUxvYWRTdHJhdGVneSkKIHsKLSAgICBpZiAo
IW9wdGlvbmFsUGFnZUxvYWRTdHJhdGVneVN0cmluZykKLSAgICAgICAgcmV0dXJuIGRlZmF1bHRQ
YWdlTG9hZFN0cmF0ZWd5OwotCi0gICAgYXV0byBwYXJzZWRQYWdlTG9hZFN0cmF0ZWd5ID0gSW5z
cGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbkhlbHBlcnM6OnBhcnNlRW51bVZhbHVlRnJvbVN0
cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpQYWdlTG9hZFN0cmF0ZWd5Pigq
b3B0aW9uYWxQYWdlTG9hZFN0cmF0ZWd5U3RyaW5nKTsKLSAgICBpZiAoIXBhcnNlZFBhZ2VMb2Fk
U3RyYXRlZ3kpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgcmV0dXJuIHBhcnNl
ZFBhZ2VMb2FkU3RyYXRlZ3k7CisgICAgcmV0dXJuIG9wdGlvbmFsUGFnZUxvYWRTdHJhdGVneS52
YWx1ZU9yKGRlZmF1bHRQYWdlTG9hZFN0cmF0ZWd5KTsKIH0KIAotdm9pZCBXZWJBdXRvbWF0aW9u
U2Vzc2lvbjo6d2FpdEZvck5hdmlnYXRpb25Ub0NvbXBsZXRlKGNvbnN0IFN0cmluZyYgYnJvd3Np
bmdDb250ZXh0SGFuZGxlLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsRnJhbWVIYW5kbGUsIGNvbnN0
IFN0cmluZyogb3B0aW9uYWxQYWdlTG9hZFN0cmF0ZWd5U3RyaW5nLCBjb25zdCBkb3VibGUqIG9w
dGlvbmFsUGFnZUxvYWRUaW1lb3V0LCBSZWY8V2FpdEZvck5hdmlnYXRpb25Ub0NvbXBsZXRlQ2Fs
bGJhY2s+JiYgY2FsbGJhY2spCit2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjp3YWl0Rm9yTmF2
aWdhdGlvblRvQ29tcGxldGUoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6
QnJvd3NpbmdDb250ZXh0SGFuZGxlJiBicm93c2luZ0NvbnRleHRIYW5kbGUsIGNvbnN0IEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkZyYW1lSGFuZGxlJiBvcHRpb25hbEZyYW1lSGFu
ZGxlLCBPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpQYWdlTG9hZFN0
cmF0ZWd5PiYmIG9wdGlvbmFsUGFnZUxvYWRTdHJhdGVneSwgT3B0aW9uYWw8ZG91YmxlPiYmIG9w
dGlvbmFsUGFnZUxvYWRUaW1lb3V0LCBSZWY8V2FpdEZvck5hdmlnYXRpb25Ub0NvbXBsZXRlQ2Fs
bGJhY2s+JiYgY2FsbGJhY2spCiB7CiAgICAgV2ViUGFnZVByb3h5KiBwYWdlID0gd2ViUGFnZVBy
b3h5Rm9ySGFuZGxlKGJyb3dzaW5nQ29udGV4dEhhbmRsZSk7CiAgICAgaWYgKCFwYWdlKQogICAg
ICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUihXaW5kb3dOb3RGb3VuZCk7CiAK
LSAgICBhdXRvIHBhZ2VMb2FkU3RyYXRlZ3kgPSBwYWdlTG9hZFN0cmF0ZWd5RnJvbVN0cmluZ1Bh
cmFtZXRlcihvcHRpb25hbFBhZ2VMb2FkU3RyYXRlZ3lTdHJpbmcpOwotICAgIGlmICghcGFnZUxv
YWRTdHJhdGVneSkKLSAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5E
X0RFVEFJTFMoSW52YWxpZFBhcmFtZXRlciwgIlRoZSBwYXJhbWV0ZXIgJ3BhZ2VMb2FkU3RyYXRl
Z3knIGlzIGludmFsaWQuIik7CisgICAgYXV0byBwYWdlTG9hZFN0cmF0ZWd5ID0gcGFnZUxvYWRT
dHJhdGVneUZyb21QYXJhbWV0ZXIoV1RGTW92ZShvcHRpb25hbFBhZ2VMb2FkU3RyYXRlZ3kpKTsK
ICAgICBhdXRvIHBhZ2VMb2FkVGltZW91dCA9IG9wdGlvbmFsUGFnZUxvYWRUaW1lb3V0ID8gU2Vj
b25kczo6ZnJvbU1pbGxpc2Vjb25kcygqb3B0aW9uYWxQYWdlTG9hZFRpbWVvdXQpIDogZGVmYXVs
dFBhZ2VMb2FkVGltZW91dDsKIAogICAgIC8vIElmIHBhZ2UgaXMgbG9hZGluZyBhbmQgdGhlcmUn
cyBhbiBhY3RpdmUgSmF2YVNjcmlwdCBkaWFsb2cgaXMgcHJvYmFibHkgYmVjYXVzZSB0aGUKQEAg
LTQ1NSwyMiArNDQ2LDIyIEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OndhaXRGb3JOYXZp
Z2F0aW9uVG9Db21wbGV0ZShjb25zdCBTdHJpbmcmIGJyb3dzaW5nQ29uCiAgICAgLy8gbG9hZCB3
aWxsIG5vdCBmaW5pc2ggdW50aWwgdGhlIGRpYWxvZyBpcyBkaXNtaXNzZWQuIEluc3RlYWQgb2Yg
d2FpdGluZyBmb3IgdGhlIHRpbWVvdXQsCiAgICAgLy8gd2UgcmV0dXJuIHdpdGhvdXQgd2FpdGlu
ZyBzaW5jZSB3ZSBrbm93IGl0IHdpbGwgdGltZW91dCBmb3Igc3VyZS4gV2Ugd2FudCB0byBjaGVj
awogICAgIC8vIGFyZ3VtZW50cyBmaXJzdCwgdGhvdWdoLgotICAgIGJvb2wgc2hvdWxkVGltZW91
dER1ZVRvVW5leHBlY3RlZEFsZXJ0ID0gcGFnZUxvYWRTdHJhdGVneS52YWx1ZSgpID09IEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OlBhZ2VMb2FkU3RyYXRlZ3k6Ok5vcm1hbAorICAg
IGJvb2wgc2hvdWxkVGltZW91dER1ZVRvVW5leHBlY3RlZEFsZXJ0ID0gcGFnZUxvYWRTdHJhdGVn
eSA9PSBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpQYWdlTG9hZFN0cmF0ZWd5OjpO
b3JtYWwKICAgICAgICAgJiYgcGFnZS0+cGFnZUxvYWRTdGF0ZSgpLmlzTG9hZGluZygpICYmIG1f
Y2xpZW50LT5pc1Nob3dpbmdKYXZhU2NyaXB0RGlhbG9nT25QYWdlKCp0aGlzLCAqcGFnZSk7CiAK
LSAgICBpZiAob3B0aW9uYWxGcmFtZUhhbmRsZSAmJiAhb3B0aW9uYWxGcmFtZUhhbmRsZS0+aXNF
bXB0eSgpKSB7CisgICAgaWYgKCFvcHRpb25hbEZyYW1lSGFuZGxlLmlzRW1wdHkoKSkgewogICAg
ICAgICBib29sIGZyYW1lTm90Rm91bmQgPSBmYWxzZTsKLSAgICAgICAgYXV0byBmcmFtZUlEID0g
d2ViRnJhbWVJREZvckhhbmRsZSgqb3B0aW9uYWxGcmFtZUhhbmRsZSwgZnJhbWVOb3RGb3VuZCk7
CisgICAgICAgIGF1dG8gZnJhbWVJRCA9IHdlYkZyYW1lSURGb3JIYW5kbGUob3B0aW9uYWxGcmFt
ZUhhbmRsZSwgZnJhbWVOb3RGb3VuZCk7CiAgICAgICAgIGlmIChmcmFtZU5vdEZvdW5kKQogICAg
ICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1IoRnJhbWVOb3RGb3VuZCk7
CiAgICAgICAgIFdlYkZyYW1lUHJveHkqIGZyYW1lID0gcGFnZS0+cHJvY2VzcygpLndlYkZyYW1l
KGZyYW1lSUQudmFsdWUoKSk7CiAgICAgICAgIGlmICghZnJhbWUpCiAgICAgICAgICAgICBBU1lO
Q19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUihGcmFtZU5vdEZvdW5kKTsKICAgICAgICAgaWYg
KCFzaG91bGRUaW1lb3V0RHVlVG9VbmV4cGVjdGVkQWxlcnQpCi0gICAgICAgICAgICB3YWl0Rm9y
TmF2aWdhdGlvblRvQ29tcGxldGVPbkZyYW1lKCpmcmFtZSwgcGFnZUxvYWRTdHJhdGVneS52YWx1
ZSgpLCBwYWdlTG9hZFRpbWVvdXQsIFdURk1vdmUoY2FsbGJhY2spKTsKKyAgICAgICAgICAgIHdh
aXRGb3JOYXZpZ2F0aW9uVG9Db21wbGV0ZU9uRnJhbWUoKmZyYW1lLCBwYWdlTG9hZFN0cmF0ZWd5
LCBwYWdlTG9hZFRpbWVvdXQsIFdURk1vdmUoY2FsbGJhY2spKTsKICAgICB9IGVsc2UgewogICAg
ICAgICBpZiAoIXNob3VsZFRpbWVvdXREdWVUb1VuZXhwZWN0ZWRBbGVydCkKLSAgICAgICAgICAg
IHdhaXRGb3JOYXZpZ2F0aW9uVG9Db21wbGV0ZU9uUGFnZSgqcGFnZSwgcGFnZUxvYWRTdHJhdGVn
eS52YWx1ZSgpLCBwYWdlTG9hZFRpbWVvdXQsIFdURk1vdmUoY2FsbGJhY2spKTsKKyAgICAgICAg
ICAgIHdhaXRGb3JOYXZpZ2F0aW9uVG9Db21wbGV0ZU9uUGFnZSgqcGFnZSwgcGFnZUxvYWRTdHJh
dGVneSwgcGFnZUxvYWRUaW1lb3V0LCBXVEZNb3ZlKGNhbGxiYWNrKSk7CiAgICAgfQogCiAgICAg
aWYgKHNob3VsZFRpbWVvdXREdWVUb1VuZXhwZWN0ZWRBbGVydCkgewpAQCAtNTI3LDcgKzUxOCw3
IEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OndhaXRGb3JOYXZpZ2F0aW9uVG9Db21wbGV0
ZU9uRnJhbWUoV2ViRnJhbWVQcm94eSYgZnJhCiAKIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246
OnJlc3BvbmRUb1BlbmRpbmdQYWdlTmF2aWdhdGlvbkNhbGxiYWNrc1dpdGhUaW1lb3V0KEhhc2hN
YXA8V2ViUGFnZVByb3h5SWRlbnRpZmllciwgUmVmUHRyPEluc3BlY3Rvcjo6QmFja2VuZERpc3Bh
dGNoZXI6OkNhbGxiYWNrQmFzZT4+JiBtYXApCiB7Ci0gICAgSW5zcGVjdG9yOjpFcnJvclN0cmlu
ZyB0aW1lb3V0RXJyb3IgPSBTVFJJTkdfRk9SX1BSRURFRklORURfRVJST1JfTkFNRShUaW1lb3V0
KTsKKyAgICBhdXRvIHRpbWVvdXRFcnJvciA9IFNUUklOR19GT1JfUFJFREVGSU5FRF9FUlJPUl9O
QU1FKFRpbWVvdXQpOwogICAgIGZvciAoYXV0byBpZCA6IGNvcHlUb1ZlY3RvcihtYXAua2V5cygp
KSkgewogICAgICAgICBhdXRvIHBhZ2UgPSBXZWJQcm9jZXNzUHJveHk6OndlYlBhZ2UoaWQpOwog
ICAgICAgICBhdXRvIGNhbGxiYWNrID0gbWFwLnRha2UoaWQpOwpAQCAtNTQ5LDcgKzU0MCw3IEBA
IHN0YXRpYyBXZWJQYWdlUHJveHkqIGZpbmRQYWdlRm9yRnJhbWVJRChjb25zdCBXZWJQcm9jZXNz
UG9vbCYgcHJvY2Vzc1Bvb2wsIEZyYW1lCiAKIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OnJl
c3BvbmRUb1BlbmRpbmdGcmFtZU5hdmlnYXRpb25DYWxsYmFja3NXaXRoVGltZW91dChIYXNoTWFw
PEZyYW1lSWRlbnRpZmllciwgUmVmUHRyPEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXI6OkNh
bGxiYWNrQmFzZT4+JiBtYXApCiB7Ci0gICAgSW5zcGVjdG9yOjpFcnJvclN0cmluZyB0aW1lb3V0
RXJyb3IgPSBTVFJJTkdfRk9SX1BSRURFRklORURfRVJST1JfTkFNRShUaW1lb3V0KTsKKyAgICBh
dXRvIHRpbWVvdXRFcnJvciA9IFNUUklOR19GT1JfUFJFREVGSU5FRF9FUlJPUl9OQU1FKFRpbWVv
dXQpOwogICAgIGZvciAoYXV0byBpZCA6IGNvcHlUb1ZlY3RvcihtYXAua2V5cygpKSkgewogICAg
ICAgICBhdXRvKiBwYWdlID0gZmluZFBhZ2VGb3JGcmFtZUlEKCptX3Byb2Nlc3NQb29sLCBpZCk7
CiAgICAgICAgIGF1dG8gY2FsbGJhY2sgPSBtYXAudGFrZShpZCk7CkBAIC01NjgsNyArNTU5LDcg
QEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6bG9hZFRpbWVyRmlyZWQoKQogICAgIHJlc3Bv
bmRUb1BlbmRpbmdQYWdlTmF2aWdhdGlvbkNhbGxiYWNrc1dpdGhUaW1lb3V0KG1fcGVuZGluZ0Vh
Z2VyTmF2aWdhdGlvbkluQnJvd3NpbmdDb250ZXh0Q2FsbGJhY2tzUGVyUGFnZSk7CiB9CiAKLXZv
aWQgV2ViQXV0b21hdGlvblNlc3Npb246Om1heGltaXplV2luZG93T2ZCcm93c2luZ0NvbnRleHQo
Y29uc3QgU3RyaW5nJiBicm93c2luZ0NvbnRleHRIYW5kbGUsIFJlZjxNYXhpbWl6ZVdpbmRvd09m
QnJvd3NpbmdDb250ZXh0Q2FsbGJhY2s+JiYgY2FsbGJhY2spCit2b2lkIFdlYkF1dG9tYXRpb25T
ZXNzaW9uOjptYXhpbWl6ZVdpbmRvd09mQnJvd3NpbmdDb250ZXh0KGNvbnN0IEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYgYnJvd3NpbmdDb250
ZXh0SGFuZGxlLCBSZWY8TWF4aW1pemVXaW5kb3dPZkJyb3dzaW5nQ29udGV4dENhbGxiYWNrPiYm
IGNhbGxiYWNrKQogewogICAgIGF1dG8qIHBhZ2UgPSB3ZWJQYWdlUHJveHlGb3JIYW5kbGUoYnJv
d3NpbmdDb250ZXh0SGFuZGxlKTsKICAgICBpZiAoIXBhZ2UpCkBAIC01ODQsNyArNTc1LDcgQEAg
dm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6bWF4aW1pemVXaW5kb3dPZkJyb3dzaW5nQ29udGV4
dChjb25zdCBTdHJpbmcmIGJyb3dzaW4KICAgICB9KTsKIH0KIAotdm9pZCBXZWJBdXRvbWF0aW9u
U2Vzc2lvbjo6aGlkZVdpbmRvd09mQnJvd3NpbmdDb250ZXh0KGNvbnN0IFN0cmluZyYgYnJvd3Np
bmdDb250ZXh0SGFuZGxlLCBSZWY8SGlkZVdpbmRvd09mQnJvd3NpbmdDb250ZXh0Q2FsbGJhY2s+
JiYgY2FsbGJhY2spCit2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpoaWRlV2luZG93T2ZCcm93
c2luZ0NvbnRleHQoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3Np
bmdDb250ZXh0SGFuZGxlJiBicm93c2luZ0NvbnRleHRIYW5kbGUsIFJlZjxIaWRlV2luZG93T2ZC
cm93c2luZ0NvbnRleHRDYWxsYmFjaz4mJiBjYWxsYmFjaykKIHsKICAgICBXZWJQYWdlUHJveHkq
IHBhZ2UgPSB3ZWJQYWdlUHJveHlGb3JIYW5kbGUoYnJvd3NpbmdDb250ZXh0SGFuZGxlKTsKICAg
ICBpZiAoIXBhZ2UpCkBAIC02OTMsNjQgKzY4NCw1NiBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNz
aW9uOjpkaWRFeGl0RnVsbFNjcmVlbkZvclBhZ2UoY29uc3QgV2ViUGFnZVByb3h5JikKICAgICAg
ICAgbV93aW5kb3dTdGF0ZVRyYW5zaXRpb25DYWxsYmFjayhXaW5kb3dUcmFuc2l0aW9uZWRUb1N0
YXRlOjpVbmZ1bGxzY3JlZW4pOwogfQogCi12b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpuYXZp
Z2F0ZUJyb3dzaW5nQ29udGV4dChjb25zdCBTdHJpbmcmIGhhbmRsZSwgY29uc3QgU3RyaW5nJiB1
cmwsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxQYWdlTG9hZFN0cmF0ZWd5U3RyaW5nLCBjb25zdCBk
b3VibGUqIG9wdGlvbmFsUGFnZUxvYWRUaW1lb3V0LCBSZWY8TmF2aWdhdGVCcm93c2luZ0NvbnRl
eHRDYWxsYmFjaz4mJiBjYWxsYmFjaykKK3ZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246Om5hdmln
YXRlQnJvd3NpbmdDb250ZXh0KGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246
OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYgaGFuZGxlLCBjb25zdCBTdHJpbmcmIHVybCwgT3B0aW9u
YWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6UGFnZUxvYWRTdHJhdGVneT4mJiBv
cHRpb25hbFBhZ2VMb2FkU3RyYXRlZ3ksIE9wdGlvbmFsPGRvdWJsZT4mJiBvcHRpb25hbFBhZ2VM
b2FkVGltZW91dCwgUmVmPE5hdmlnYXRlQnJvd3NpbmdDb250ZXh0Q2FsbGJhY2s+JiYgY2FsbGJh
Y2spCiB7CiAgICAgV2ViUGFnZVByb3h5KiBwYWdlID0gd2ViUGFnZVByb3h5Rm9ySGFuZGxlKGhh
bmRsZSk7CiAgICAgaWYgKCFwYWdlKQogICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5F
RF9FUlJPUihXaW5kb3dOb3RGb3VuZCk7CiAKLSAgICBhdXRvIHBhZ2VMb2FkU3RyYXRlZ3kgPSBw
YWdlTG9hZFN0cmF0ZWd5RnJvbVN0cmluZ1BhcmFtZXRlcihvcHRpb25hbFBhZ2VMb2FkU3RyYXRl
Z3lTdHJpbmcpOwotICAgIGlmICghcGFnZUxvYWRTdHJhdGVneSkKLSAgICAgICAgQVNZTkNfRkFJ
TF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoSW52YWxpZFBhcmFtZXRlciwgIlRo
ZSBwYXJhbWV0ZXIgJ3BhZ2VMb2FkU3RyYXRlZ3knIGlzIGludmFsaWQuIik7CisgICAgYXV0byBw
YWdlTG9hZFN0cmF0ZWd5ID0gcGFnZUxvYWRTdHJhdGVneUZyb21QYXJhbWV0ZXIoV1RGTW92ZShv
cHRpb25hbFBhZ2VMb2FkU3RyYXRlZ3kpKTsKICAgICBhdXRvIHBhZ2VMb2FkVGltZW91dCA9IG9w
dGlvbmFsUGFnZUxvYWRUaW1lb3V0ID8gU2Vjb25kczo6ZnJvbU1pbGxpc2Vjb25kcygqb3B0aW9u
YWxQYWdlTG9hZFRpbWVvdXQpIDogZGVmYXVsdFBhZ2VMb2FkVGltZW91dDsKIAogICAgIHBhZ2Ut
PmxvYWRSZXF1ZXN0KFVSTChVUkwoKSwgdXJsKSk7Ci0gICAgd2FpdEZvck5hdmlnYXRpb25Ub0Nv
bXBsZXRlT25QYWdlKCpwYWdlLCBwYWdlTG9hZFN0cmF0ZWd5LnZhbHVlKCksIHBhZ2VMb2FkVGlt
ZW91dCwgV1RGTW92ZShjYWxsYmFjaykpOworICAgIHdhaXRGb3JOYXZpZ2F0aW9uVG9Db21wbGV0
ZU9uUGFnZSgqcGFnZSwgcGFnZUxvYWRTdHJhdGVneSwgcGFnZUxvYWRUaW1lb3V0LCBXVEZNb3Zl
KGNhbGxiYWNrKSk7CiB9CiAKLXZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OmdvQmFja0luQnJv
d3NpbmdDb250ZXh0KGNvbnN0IFN0cmluZyYgaGFuZGxlLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFs
UGFnZUxvYWRTdHJhdGVneVN0cmluZywgY29uc3QgZG91YmxlKiBvcHRpb25hbFBhZ2VMb2FkVGlt
ZW91dCwgUmVmPEdvQmFja0luQnJvd3NpbmdDb250ZXh0Q2FsbGJhY2s+JiYgY2FsbGJhY2spCit2
b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpnb0JhY2tJbkJyb3dzaW5nQ29udGV4dChjb25zdCBJ
bnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRIYW5kbGUmIGhh
bmRsZSwgT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6UGFnZUxvYWRT
dHJhdGVneT4mJiBvcHRpb25hbFBhZ2VMb2FkU3RyYXRlZ3ksIE9wdGlvbmFsPGRvdWJsZT4mJiBv
cHRpb25hbFBhZ2VMb2FkVGltZW91dCwgUmVmPEdvQmFja0luQnJvd3NpbmdDb250ZXh0Q2FsbGJh
Y2s+JiYgY2FsbGJhY2spCiB7CiAgICAgV2ViUGFnZVByb3h5KiBwYWdlID0gd2ViUGFnZVByb3h5
Rm9ySGFuZGxlKGhhbmRsZSk7CiAgICAgaWYgKCFwYWdlKQogICAgICAgICBBU1lOQ19GQUlMX1dJ
VEhfUFJFREVGSU5FRF9FUlJPUihXaW5kb3dOb3RGb3VuZCk7CiAKLSAgICBhdXRvIHBhZ2VMb2Fk
U3RyYXRlZ3kgPSBwYWdlTG9hZFN0cmF0ZWd5RnJvbVN0cmluZ1BhcmFtZXRlcihvcHRpb25hbFBh
Z2VMb2FkU3RyYXRlZ3lTdHJpbmcpOwotICAgIGlmICghcGFnZUxvYWRTdHJhdGVneSkKLSAgICAg
ICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoSW52YWxpZFBh
cmFtZXRlciwgIlRoZSBwYXJhbWV0ZXIgJ3BhZ2VMb2FkU3RyYXRlZ3knIGlzIGludmFsaWQuIik7
CisgICAgYXV0byBwYWdlTG9hZFN0cmF0ZWd5ID0gcGFnZUxvYWRTdHJhdGVneUZyb21QYXJhbWV0
ZXIoV1RGTW92ZShvcHRpb25hbFBhZ2VMb2FkU3RyYXRlZ3kpKTsKICAgICBhdXRvIHBhZ2VMb2Fk
VGltZW91dCA9IG9wdGlvbmFsUGFnZUxvYWRUaW1lb3V0ID8gU2Vjb25kczo6ZnJvbU1pbGxpc2Vj
b25kcygqb3B0aW9uYWxQYWdlTG9hZFRpbWVvdXQpIDogZGVmYXVsdFBhZ2VMb2FkVGltZW91dDsK
IAogICAgIHBhZ2UtPmdvQmFjaygpOwotICAgIHdhaXRGb3JOYXZpZ2F0aW9uVG9Db21wbGV0ZU9u
UGFnZSgqcGFnZSwgcGFnZUxvYWRTdHJhdGVneS52YWx1ZSgpLCBwYWdlTG9hZFRpbWVvdXQsIFdU
Rk1vdmUoY2FsbGJhY2spKTsKKyAgICB3YWl0Rm9yTmF2aWdhdGlvblRvQ29tcGxldGVPblBhZ2Uo
KnBhZ2UsIHBhZ2VMb2FkU3RyYXRlZ3ksIHBhZ2VMb2FkVGltZW91dCwgV1RGTW92ZShjYWxsYmFj
aykpOwogfQogCi12b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpnb0ZvcndhcmRJbkJyb3dzaW5n
Q29udGV4dChjb25zdCBTdHJpbmcmIGhhbmRsZSwgY29uc3QgU3RyaW5nKiBvcHRpb25hbFBhZ2VM
b2FkU3RyYXRlZ3lTdHJpbmcsIGNvbnN0IGRvdWJsZSogb3B0aW9uYWxQYWdlTG9hZFRpbWVvdXQs
IFJlZjxHb0ZvcndhcmRJbkJyb3dzaW5nQ29udGV4dENhbGxiYWNrPiYmIGNhbGxiYWNrKQordm9p
ZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6Z29Gb3J3YXJkSW5Ccm93c2luZ0NvbnRleHQoY29uc3Qg
SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJiBo
YW5kbGUsIE9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OlBhZ2VMb2Fk
U3RyYXRlZ3k+JiYgb3B0aW9uYWxQYWdlTG9hZFN0cmF0ZWd5LCBPcHRpb25hbDxkb3VibGU+JiYg
b3B0aW9uYWxQYWdlTG9hZFRpbWVvdXQsIFJlZjxHb0ZvcndhcmRJbkJyb3dzaW5nQ29udGV4dENh
bGxiYWNrPiYmIGNhbGxiYWNrKQogewogICAgIFdlYlBhZ2VQcm94eSogcGFnZSA9IHdlYlBhZ2VQ
cm94eUZvckhhbmRsZShoYW5kbGUpOwogICAgIGlmICghcGFnZSkKICAgICAgICAgQVNZTkNfRkFJ
TF9XSVRIX1BSRURFRklORURfRVJST1IoV2luZG93Tm90Rm91bmQpOwogCi0gICAgYXV0byBwYWdl
TG9hZFN0cmF0ZWd5ID0gcGFnZUxvYWRTdHJhdGVneUZyb21TdHJpbmdQYXJhbWV0ZXIob3B0aW9u
YWxQYWdlTG9hZFN0cmF0ZWd5U3RyaW5nKTsKLSAgICBpZiAoIXBhZ2VMb2FkU3RyYXRlZ3kpCi0g
ICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxTKEludmFs
aWRQYXJhbWV0ZXIsICJUaGUgcGFyYW1ldGVyICdwYWdlTG9hZFN0cmF0ZWd5JyBpcyBpbnZhbGlk
LiIpOworICAgIGF1dG8gcGFnZUxvYWRTdHJhdGVneSA9IHBhZ2VMb2FkU3RyYXRlZ3lGcm9tUGFy
YW1ldGVyKFdURk1vdmUob3B0aW9uYWxQYWdlTG9hZFN0cmF0ZWd5KSk7CiAgICAgYXV0byBwYWdl
TG9hZFRpbWVvdXQgPSBvcHRpb25hbFBhZ2VMb2FkVGltZW91dCA/IFNlY29uZHM6OmZyb21NaWxs
aXNlY29uZHMoKm9wdGlvbmFsUGFnZUxvYWRUaW1lb3V0KSA6IGRlZmF1bHRQYWdlTG9hZFRpbWVv
dXQ7CiAKICAgICBwYWdlLT5nb0ZvcndhcmQoKTsKLSAgICB3YWl0Rm9yTmF2aWdhdGlvblRvQ29t
cGxldGVPblBhZ2UoKnBhZ2UsIHBhZ2VMb2FkU3RyYXRlZ3kudmFsdWUoKSwgcGFnZUxvYWRUaW1l
b3V0LCBXVEZNb3ZlKGNhbGxiYWNrKSk7CisgICAgd2FpdEZvck5hdmlnYXRpb25Ub0NvbXBsZXRl
T25QYWdlKCpwYWdlLCBwYWdlTG9hZFN0cmF0ZWd5LCBwYWdlTG9hZFRpbWVvdXQsIFdURk1vdmUo
Y2FsbGJhY2spKTsKIH0KIAotdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6cmVsb2FkQnJvd3Np
bmdDb250ZXh0KGNvbnN0IFN0cmluZyYgaGFuZGxlLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsUGFn
ZUxvYWRTdHJhdGVneVN0cmluZywgY29uc3QgZG91YmxlKiBvcHRpb25hbFBhZ2VMb2FkVGltZW91
dCwgUmVmPFJlbG9hZEJyb3dzaW5nQ29udGV4dENhbGxiYWNrPiYmIGNhbGxiYWNrKQordm9pZCBX
ZWJBdXRvbWF0aW9uU2Vzc2lvbjo6cmVsb2FkQnJvd3NpbmdDb250ZXh0KGNvbnN0IEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYgaGFuZGxlLCBP
cHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpQYWdlTG9hZFN0cmF0ZWd5
PiYmIG9wdGlvbmFsUGFnZUxvYWRTdHJhdGVneSwgT3B0aW9uYWw8ZG91YmxlPiYmIG9wdGlvbmFs
UGFnZUxvYWRUaW1lb3V0LCBSZWY8UmVsb2FkQnJvd3NpbmdDb250ZXh0Q2FsbGJhY2s+JiYgY2Fs
bGJhY2spCiB7CiAgICAgV2ViUGFnZVByb3h5KiBwYWdlID0gd2ViUGFnZVByb3h5Rm9ySGFuZGxl
KGhhbmRsZSk7CiAgICAgaWYgKCFwYWdlKQogICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVG
SU5FRF9FUlJPUihXaW5kb3dOb3RGb3VuZCk7CiAKLSAgICBhdXRvIHBhZ2VMb2FkU3RyYXRlZ3kg
PSBwYWdlTG9hZFN0cmF0ZWd5RnJvbVN0cmluZ1BhcmFtZXRlcihvcHRpb25hbFBhZ2VMb2FkU3Ry
YXRlZ3lTdHJpbmcpOwotICAgIGlmICghcGFnZUxvYWRTdHJhdGVneSkKLSAgICAgICAgQVNZTkNf
RkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoSW52YWxpZFBhcmFtZXRlciwg
IlRoZSBwYXJhbWV0ZXIgJ3BhZ2VMb2FkU3RyYXRlZ3knIGlzIGludmFsaWQuIik7CisgICAgYXV0
byBwYWdlTG9hZFN0cmF0ZWd5ID0gcGFnZUxvYWRTdHJhdGVneUZyb21QYXJhbWV0ZXIoV1RGTW92
ZShvcHRpb25hbFBhZ2VMb2FkU3RyYXRlZ3kpKTsKICAgICBhdXRvIHBhZ2VMb2FkVGltZW91dCA9
IG9wdGlvbmFsUGFnZUxvYWRUaW1lb3V0ID8gU2Vjb25kczo6ZnJvbU1pbGxpc2Vjb25kcygqb3B0
aW9uYWxQYWdlTG9hZFRpbWVvdXQpIDogZGVmYXVsdFBhZ2VMb2FkVGltZW91dDsKIAogICAgIHBh
Z2UtPnJlbG9hZCh7IH0pOwotICAgIHdhaXRGb3JOYXZpZ2F0aW9uVG9Db21wbGV0ZU9uUGFnZSgq
cGFnZSwgcGFnZUxvYWRTdHJhdGVneS52YWx1ZSgpLCBwYWdlTG9hZFRpbWVvdXQsIFdURk1vdmUo
Y2FsbGJhY2spKTsKKyAgICB3YWl0Rm9yTmF2aWdhdGlvblRvQ29tcGxldGVPblBhZ2UoKnBhZ2Us
IHBhZ2VMb2FkU3RyYXRlZ3ksIHBhZ2VMb2FkVGltZW91dCwgV1RGTW92ZShjYWxsYmFjaykpOwog
fQogCiB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpuYXZpZ2F0aW9uT2NjdXJyZWRGb3JGcmFt
ZShjb25zdCBXZWJGcmFtZVByb3h5JiBmcmFtZSkKQEAgLTkyMiwzNSArOTA1LDI3IEBAIHZvaWQg
V2ViQXV0b21hdGlvblNlc3Npb246OmhhbmRsZVJ1bk9wZW5QYW5lbChjb25zdCBXZWJQYWdlUHJv
eHkmIHBhZ2UsIGNvbnN0IFdlCiAgICAgbV9kb21haW5Ob3RpZmllci0+ZmlsZUNob29zZXJEaXNt
aXNzZWQoYnJvd3NpbmdDb250ZXh0SGFuZGxlLCBmYWxzZSk7CiB9CiAKLXZvaWQgV2ViQXV0b21h
dGlvblNlc3Npb246OmV2YWx1YXRlSmF2YVNjcmlwdEZ1bmN0aW9uKGNvbnN0IFN0cmluZyYgYnJv
d3NpbmdDb250ZXh0SGFuZGxlLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsRnJhbWVIYW5kbGUsIGNv
bnN0IFN0cmluZyYgZnVuY3Rpb24sIGNvbnN0IEpTT046OkFycmF5JiBhcmd1bWVudHMsIGNvbnN0
IGJvb2wqIG9wdGlvbmFsRXhwZWN0c0ltcGxpY2l0Q2FsbGJhY2tBcmd1bWVudCwgY29uc3QgZG91
YmxlKiBvcHRpb25hbENhbGxiYWNrVGltZW91dCwgUmVmPEV2YWx1YXRlSmF2YVNjcmlwdEZ1bmN0
aW9uQ2FsbGJhY2s+JiYgY2FsbGJhY2spCit2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpldmFs
dWF0ZUphdmFTY3JpcHRGdW5jdGlvbihjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0
aW9uOjpCcm93c2luZ0NvbnRleHRIYW5kbGUmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSwgY29uc3Qg
SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6RnJhbWVIYW5kbGUmIGZyYW1lSGFuZGxl
LCBjb25zdCBTdHJpbmcmIGZ1bmN0aW9uLCBSZWY8SlNPTjo6QXJyYXk+JiYgYXJndW1lbnRzLCBP
cHRpb25hbDxib29sPiYmIGV4cGVjdHNJbXBsaWNpdENhbGxiYWNrQXJndW1lbnQsIE9wdGlvbmFs
PGRvdWJsZT4mJiBjYWxsYmFja1RpbWVvdXQsIFJlZjxFdmFsdWF0ZUphdmFTY3JpcHRGdW5jdGlv
bkNhbGxiYWNrPiYmIGNhbGxiYWNrKQogewogICAgIFdlYlBhZ2VQcm94eSogcGFnZSA9IHdlYlBh
Z2VQcm94eUZvckhhbmRsZShicm93c2luZ0NvbnRleHRIYW5kbGUpOwogICAgIGlmICghcGFnZSkK
ICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1IoV2luZG93Tm90Rm91bmQp
OwogCiAgICAgYm9vbCBmcmFtZU5vdEZvdW5kID0gZmFsc2U7Ci0gICAgYXV0byBmcmFtZUlEID0g
d2ViRnJhbWVJREZvckhhbmRsZShvcHRpb25hbEZyYW1lSGFuZGxlID8gKm9wdGlvbmFsRnJhbWVI
YW5kbGUgOiBlbXB0eVN0cmluZygpLCBmcmFtZU5vdEZvdW5kKTsKKyAgICBhdXRvIGZyYW1lSUQg
PSB3ZWJGcmFtZUlERm9ySGFuZGxlKGZyYW1lSGFuZGxlLCBmcmFtZU5vdEZvdW5kKTsKICAgICBp
ZiAoZnJhbWVOb3RGb3VuZCkKICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJS
T1IoRnJhbWVOb3RGb3VuZCk7CiAKICAgICBWZWN0b3I8U3RyaW5nPiBhcmd1bWVudHNWZWN0b3I7
Ci0gICAgYXJndW1lbnRzVmVjdG9yLnJlc2VydmVDYXBhY2l0eShhcmd1bWVudHMubGVuZ3RoKCkp
OworICAgIGFyZ3VtZW50c1ZlY3Rvci5yZXNlcnZlQ2FwYWNpdHkoYXJndW1lbnRzLT5sZW5ndGgo
KSk7CiAKLSAgICBmb3IgKGF1dG8mIGFyZ3VtZW50IDogYXJndW1lbnRzKSB7Ci0gICAgICAgIFN0
cmluZyBhcmd1bWVudFN0cmluZzsKLSAgICAgICAgYXJndW1lbnQtPmFzU3RyaW5nKGFyZ3VtZW50
U3RyaW5nKTsKLSAgICAgICAgYXJndW1lbnRzVmVjdG9yLnVuY2hlY2tlZEFwcGVuZChhcmd1bWVu
dFN0cmluZyk7Ci0gICAgfQotCi0gICAgYm9vbCBleHBlY3RzSW1wbGljaXRDYWxsYmFja0FyZ3Vt
ZW50ID0gb3B0aW9uYWxFeHBlY3RzSW1wbGljaXRDYWxsYmFja0FyZ3VtZW50ID8gKm9wdGlvbmFs
RXhwZWN0c0ltcGxpY2l0Q2FsbGJhY2tBcmd1bWVudCA6IGZhbHNlOwotICAgIE9wdGlvbmFsPGRv
dWJsZT4gY2FsbGJhY2tUaW1lb3V0OwotICAgIGlmIChvcHRpb25hbENhbGxiYWNrVGltZW91dCkK
LSAgICAgICAgY2FsbGJhY2tUaW1lb3V0ID0gKm9wdGlvbmFsQ2FsbGJhY2tUaW1lb3V0OworICAg
IGZvciAoY29uc3QgYXV0byYgYXJndW1lbnQgOiBhcmd1bWVudHMuZ2V0KCkpCisgICAgICAgIGFy
Z3VtZW50c1ZlY3Rvci51bmNoZWNrZWRBcHBlbmQoYXJndW1lbnQtPmFzU3RyaW5nKCkpOwogCiAg
ICAgdWludDY0X3QgY2FsbGJhY2tJRCA9IG1fbmV4dEV2YWx1YXRlSmF2YVNjcmlwdENhbGxiYWNr
SUQrKzsKICAgICBtX2V2YWx1YXRlSmF2YVNjcmlwdEZ1bmN0aW9uQ2FsbGJhY2tzLnNldChjYWxs
YmFja0lELCBXVEZNb3ZlKGNhbGxiYWNrKSk7CiAKLSAgICBwYWdlLT5wcm9jZXNzKCkuc2VuZChN
ZXNzYWdlczo6V2ViQXV0b21hdGlvblNlc3Npb25Qcm94eTo6RXZhbHVhdGVKYXZhU2NyaXB0RnVu
Y3Rpb24ocGFnZS0+d2ViUGFnZUlEKCksIGZyYW1lSUQsIGZ1bmN0aW9uLCBhcmd1bWVudHNWZWN0
b3IsIGV4cGVjdHNJbXBsaWNpdENhbGxiYWNrQXJndW1lbnQsIGNhbGxiYWNrVGltZW91dCwgY2Fs
bGJhY2tJRCksIDApOworICAgIHBhZ2UtPnByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpXZWJBdXRv
bWF0aW9uU2Vzc2lvblByb3h5OjpFdmFsdWF0ZUphdmFTY3JpcHRGdW5jdGlvbihwYWdlLT53ZWJQ
YWdlSUQoKSwgZnJhbWVJRCwgZnVuY3Rpb24sIGFyZ3VtZW50c1ZlY3RvciwgZXhwZWN0c0ltcGxp
Y2l0Q2FsbGJhY2tBcmd1bWVudC52YWx1ZU9yKGZhbHNlKSwgV1RGTW92ZShjYWxsYmFja1RpbWVv
dXQpLCBjYWxsYmFja0lEKSwgMCk7CiB9CiAKIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OmRp
ZEV2YWx1YXRlSmF2YVNjcmlwdEZ1bmN0aW9uKHVpbnQ2NF90IGNhbGxiYWNrSUQsIGNvbnN0IFN0
cmluZyYgcmVzdWx0LCBjb25zdCBTdHJpbmcmIGVycm9yVHlwZSkKQEAgLTk2NSw3ICs5NDAsNyBA
QCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpkaWRFdmFsdWF0ZUphdmFTY3JpcHRGdW5jdGlv
bih1aW50NjRfdCBjYWxsYmFja0lELCBjbwogICAgICAgICBjYWxsYmFjay0+c2VuZFN1Y2Nlc3Mo
cmVzdWx0KTsKIH0KIAotdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6cmVzb2x2ZUNoaWxkRnJh
bWVIYW5kbGUoY29uc3QgU3RyaW5nJiBicm93c2luZ0NvbnRleHRIYW5kbGUsIGNvbnN0IFN0cmlu
Zyogb3B0aW9uYWxGcmFtZUhhbmRsZSwgY29uc3QgaW50KiBvcHRpb25hbE9yZGluYWwsIGNvbnN0
IFN0cmluZyogb3B0aW9uYWxOYW1lLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsTm9kZUhhbmRsZSwg
UmVmPFJlc29sdmVDaGlsZEZyYW1lSGFuZGxlQ2FsbGJhY2s+JiYgY2FsbGJhY2spCit2b2lkIFdl
YkF1dG9tYXRpb25TZXNzaW9uOjpyZXNvbHZlQ2hpbGRGcmFtZUhhbmRsZShjb25zdCBJbnNwZWN0
b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRIYW5kbGUmIGJyb3dzaW5n
Q29udGV4dEhhbmRsZSwgY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6RnJh
bWVIYW5kbGUmIGZyYW1lSGFuZGxlLCBPcHRpb25hbDxpbnQ+JiYgb3B0aW9uYWxPcmRpbmFsLCBj
b25zdCBTdHJpbmcmIG9wdGlvbmFsTmFtZSwgY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0
b21hdGlvbjo6Tm9kZUhhbmRsZSYgb3B0aW9uYWxOb2RlSGFuZGxlLCBSZWY8UmVzb2x2ZUNoaWxk
RnJhbWVIYW5kbGVDYWxsYmFjaz4mJiBjYWxsYmFjaykKIHsKICAgICBpZiAoIW9wdGlvbmFsT3Jk
aW5hbCAmJiAhb3B0aW9uYWxOYW1lICYmICFvcHRpb25hbE5vZGVIYW5kbGUpCiAgICAgICAgIEFT
WU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxTKE1pc3NpbmdQYXJhbWV0
ZXIsICJDb21tYW5kIG11c3Qgc3BlY2lmeSBhIGNoaWxkIGZyYW1lIGJ5IG9yZGluYWwsIG5hbWUs
IG9yIGVsZW1lbnQgaGFuZGxlLiIpOwpAQCAtOTc1LDcgKzk1MCw3IEBAIHZvaWQgV2ViQXV0b21h
dGlvblNlc3Npb246OnJlc29sdmVDaGlsZEZyYW1lSGFuZGxlKGNvbnN0IFN0cmluZyYgYnJvd3Np
bmdDb250ZXh0CiAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SKFdpbmRv
d05vdEZvdW5kKTsKIAogICAgIGJvb2wgZnJhbWVOb3RGb3VuZCA9IGZhbHNlOwotICAgIGF1dG8g
ZnJhbWVJRCA9IHdlYkZyYW1lSURGb3JIYW5kbGUob3B0aW9uYWxGcmFtZUhhbmRsZSA/ICpvcHRp
b25hbEZyYW1lSGFuZGxlIDogZW1wdHlTdHJpbmcoKSwgZnJhbWVOb3RGb3VuZCk7CisgICAgYXV0
byBmcmFtZUlEID0gd2ViRnJhbWVJREZvckhhbmRsZShmcmFtZUhhbmRsZSwgZnJhbWVOb3RGb3Vu
ZCk7CiAgICAgaWYgKGZyYW1lTm90Rm91bmQpCiAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVE
RUZJTkVEX0VSUk9SKEZyYW1lTm90Rm91bmQpOwogCkBAIC05ODgsMTMgKzk2MywxMyBAQCB2b2lk
IFdlYkF1dG9tYXRpb25TZXNzaW9uOjpyZXNvbHZlQ2hpbGRGcmFtZUhhbmRsZShjb25zdCBTdHJp
bmcmIGJyb3dzaW5nQ29udGV4dAogICAgICAgICBjYWxsYmFjay0+c2VuZFN1Y2Nlc3MoaGFuZGxl
Rm9yV2ViRnJhbWVJRChmcmFtZUlEKSk7CiAgICAgfTsKIAotICAgIGlmIChvcHRpb25hbE5vZGVI
YW5kbGUpIHsKLSAgICAgICAgcGFnZS0+cHJvY2VzcygpLnNlbmRXaXRoQXN5bmNSZXBseShNZXNz
YWdlczo6V2ViQXV0b21hdGlvblNlc3Npb25Qcm94eTo6UmVzb2x2ZUNoaWxkRnJhbWVXaXRoTm9k
ZUhhbmRsZShwYWdlLT53ZWJQYWdlSUQoKSwgZnJhbWVJRCwgKm9wdGlvbmFsTm9kZUhhbmRsZSks
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICBpZiAoISFvcHRpb25hbE5vZGVIYW5k
bGUpIHsKKyAgICAgICAgcGFnZS0+cHJvY2VzcygpLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdl
czo6V2ViQXV0b21hdGlvblNlc3Npb25Qcm94eTo6UmVzb2x2ZUNoaWxkRnJhbWVXaXRoTm9kZUhh
bmRsZShwYWdlLT53ZWJQYWdlSUQoKSwgZnJhbWVJRCwgb3B0aW9uYWxOb2RlSGFuZGxlKSwgV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
aWYgKG9wdGlvbmFsTmFtZSkgewotICAgICAgICBwYWdlLT5wcm9jZXNzKCkuc2VuZFdpdGhBc3lu
Y1JlcGx5KE1lc3NhZ2VzOjpXZWJBdXRvbWF0aW9uU2Vzc2lvblByb3h5OjpSZXNvbHZlQ2hpbGRG
cmFtZVdpdGhOYW1lKHBhZ2UtPndlYlBhZ2VJRCgpLCBmcmFtZUlELCAqb3B0aW9uYWxOYW1lKSwg
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAgIGlmICghIW9wdGlvbmFsTmFtZSkgewor
ICAgICAgICBwYWdlLT5wcm9jZXNzKCkuc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJB
dXRvbWF0aW9uU2Vzc2lvblByb3h5OjpSZXNvbHZlQ2hpbGRGcmFtZVdpdGhOYW1lKHBhZ2UtPndl
YlBhZ2VJRCgpLCBmcmFtZUlELCBvcHRpb25hbE5hbWUpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTEwMDYsNyArOTgxLDcgQEAgdm9p
ZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6cmVzb2x2ZUNoaWxkRnJhbWVIYW5kbGUoY29uc3QgU3Ry
aW5nJiBicm93c2luZ0NvbnRleHQKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAotdm9p
ZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6cmVzb2x2ZVBhcmVudEZyYW1lSGFuZGxlKGNvbnN0IFN0
cmluZyYgYnJvd3NpbmdDb250ZXh0SGFuZGxlLCBjb25zdCBTdHJpbmcmIGZyYW1lSGFuZGxlLCBS
ZWY8UmVzb2x2ZVBhcmVudEZyYW1lSGFuZGxlQ2FsbGJhY2s+JiYgY2FsbGJhY2spCit2b2lkIFdl
YkF1dG9tYXRpb25TZXNzaW9uOjpyZXNvbHZlUGFyZW50RnJhbWVIYW5kbGUoY29uc3QgSW5zcGVj
dG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJiBicm93c2lu
Z0NvbnRleHRIYW5kbGUsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkZy
YW1lSGFuZGxlJiBmcmFtZUhhbmRsZSwgUmVmPFJlc29sdmVQYXJlbnRGcmFtZUhhbmRsZUNhbGxi
YWNrPiYmIGNhbGxiYWNrKQogewogICAgIFdlYlBhZ2VQcm94eSogcGFnZSA9IHdlYlBhZ2VQcm94
eUZvckhhbmRsZShicm93c2luZ0NvbnRleHRIYW5kbGUpOwogICAgIGlmICghcGFnZSkKQEAgLTEw
MjksMTYgKzEwMDQsMjIgQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6cmVzb2x2ZVBhcmVu
dEZyYW1lSGFuZGxlKGNvbnN0IFN0cmluZyYgYnJvd3NpbmdDb250ZXgKICAgICBwYWdlLT5wcm9j
ZXNzKCkuc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJBdXRvbWF0aW9uU2Vzc2lvblBy
b3h5OjpSZXNvbHZlUGFyZW50RnJhbWUocGFnZS0+d2ViUGFnZUlEKCksIGZyYW1lSUQpLCBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKLXN0YXRpYyBPcHRpb25hbDxDb29yZGluYXRl
U3lzdGVtPiBwcm90b2NvbFN0cmluZ1RvQ29vcmRpbmF0ZVN5c3RlbShjb25zdCBTdHJpbmcmIGNv
b3JkaW5hdGVTeXN0ZW1TdHJpbmcpCitzdGF0aWMgT3B0aW9uYWw8Q29vcmRpbmF0ZVN5c3RlbT4g
cHJvdG9jb2xTdHJpbmdUb0Nvb3JkaW5hdGVTeXN0ZW0oSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0
b21hdGlvbjo6Q29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtKQogewotICAgIGlmIChj
b29yZGluYXRlU3lzdGVtU3RyaW5nID09ICJQYWdlIikKKyAgICBzd2l0Y2ggKGNvb3JkaW5hdGVT
eXN0ZW0pIHsKKyAgICBjYXNlIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkNvb3Jk
aW5hdGVTeXN0ZW06OlBhZ2U6CiAgICAgICAgIHJldHVybiBDb29yZGluYXRlU3lzdGVtOjpQYWdl
OwotICAgIGlmIChjb29yZGluYXRlU3lzdGVtU3RyaW5nID09ICJMYXlvdXRWaWV3cG9ydCIpCisK
KyAgICBjYXNlIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkNvb3JkaW5hdGVTeXN0
ZW06OlZpZXdwb3J0OgorICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6
Q29vcmRpbmF0ZVN5c3RlbTo6TGF5b3V0Vmlld3BvcnQ6CiAgICAgICAgIHJldHVybiBDb29yZGlu
YXRlU3lzdGVtOjpMYXlvdXRWaWV3cG9ydDsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQogCi12b2lkIFdlYkF1dG9tYXRpb25T
ZXNzaW9uOjpjb21wdXRlRWxlbWVudExheW91dChjb25zdCBTdHJpbmcmIGJyb3dzaW5nQ29udGV4
dEhhbmRsZSwgY29uc3QgU3RyaW5nJiBmcmFtZUhhbmRsZSwgY29uc3QgU3RyaW5nJiBub2RlSGFu
ZGxlLCBjb25zdCBib29sKiBvcHRpb25hbFNjcm9sbEludG9WaWV3SWZOZWVkZWQsIGNvbnN0IFN0
cmluZyYgY29vcmRpbmF0ZVN5c3RlbVN0cmluZywgUmVmPENvbXB1dGVFbGVtZW50TGF5b3V0Q2Fs
bGJhY2s+JiYgY2FsbGJhY2spCit2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpjb21wdXRlRWxl
bWVudExheW91dChjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2lu
Z0NvbnRleHRIYW5kbGUmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSwgY29uc3QgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6QXV0b21hdGlvbjo6RnJhbWVIYW5kbGUmIGZyYW1lSGFuZGxlLCBjb25zdCBJbnNw
ZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpOb2RlSGFuZGxlJiBub2RlSGFuZGxlLCBPcHRp
b25hbDxib29sPiYmIG9wdGlvbmFsU2Nyb2xsSW50b1ZpZXdJZk5lZWRlZCwgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6QXV0b21hdGlvbjo6Q29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtVmFs
dWUsIFJlZjxDb21wdXRlRWxlbWVudExheW91dENhbGxiYWNrPiYmIGNhbGxiYWNrKQogewogICAg
IFdlYlBhZ2VQcm94eSogcGFnZSA9IHdlYlBhZ2VQcm94eUZvckhhbmRsZShicm93c2luZ0NvbnRl
eHRIYW5kbGUpOwogICAgIGlmICghcGFnZSkKQEAgLTEwNDksNyArMTAzMCw3IEBAIHZvaWQgV2Vi
QXV0b21hdGlvblNlc3Npb246OmNvbXB1dGVFbGVtZW50TGF5b3V0KGNvbnN0IFN0cmluZyYgYnJv
d3NpbmdDb250ZXh0SGFuCiAgICAgaWYgKGZyYW1lTm90Rm91bmQpCiAgICAgICAgIEFTWU5DX0ZB
SUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SKEZyYW1lTm90Rm91bmQpOwogCi0gICAgT3B0aW9uYWw8
Q29vcmRpbmF0ZVN5c3RlbT4gY29vcmRpbmF0ZVN5c3RlbSA9IHByb3RvY29sU3RyaW5nVG9Db29y
ZGluYXRlU3lzdGVtKGNvb3JkaW5hdGVTeXN0ZW1TdHJpbmcpOworICAgIE9wdGlvbmFsPENvb3Jk
aW5hdGVTeXN0ZW0+IGNvb3JkaW5hdGVTeXN0ZW0gPSBwcm90b2NvbFN0cmluZ1RvQ29vcmRpbmF0
ZVN5c3RlbShjb29yZGluYXRlU3lzdGVtVmFsdWUpOwogICAgIGlmICghY29vcmRpbmF0ZVN5c3Rl
bSkKICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMo
SW52YWxpZFBhcmFtZXRlciwgIlRoZSBwYXJhbWV0ZXIgJ2Nvb3JkaW5hdGVTeXN0ZW0nIGlzIGlu
dmFsaWQuIik7CiAKQEAgLTEwOTEsNyArMTA3Miw3IEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Np
b246OmNvbXB1dGVFbGVtZW50TGF5b3V0KGNvbnN0IFN0cmluZyYgYnJvd3NpbmdDb250ZXh0SGFu
CiAgICAgcGFnZS0+cHJvY2VzcygpLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQXV0
b21hdGlvblNlc3Npb25Qcm94eTo6Q29tcHV0ZUVsZW1lbnRMYXlvdXQocGFnZS0+d2ViUGFnZUlE
KCksIGZyYW1lSUQsIG5vZGVIYW5kbGUsIHNjcm9sbEludG9WaWV3SWZOZWVkZWQsIGNvb3JkaW5h
dGVTeXN0ZW0udmFsdWUoKSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAotdm9p
ZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6c2VsZWN0T3B0aW9uRWxlbWVudChjb25zdCBTdHJpbmcm
IGJyb3dzaW5nQ29udGV4dEhhbmRsZSwgY29uc3QgU3RyaW5nJiBmcmFtZUhhbmRsZSwgY29uc3Qg
U3RyaW5nJiBub2RlSGFuZGxlLCBSZWY8U2VsZWN0T3B0aW9uRWxlbWVudENhbGxiYWNrPiYmIGNh
bGxiYWNrKQordm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6c2VsZWN0T3B0aW9uRWxlbWVudChj
b25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRIYW5k
bGUmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSwgY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0
b21hdGlvbjo6RnJhbWVIYW5kbGUmIGZyYW1lSGFuZGxlLCBjb25zdCBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpBdXRvbWF0aW9uOjpOb2RlSGFuZGxlJiBub2RlSGFuZGxlLCBSZWY8U2VsZWN0T3B0aW9u
RWxlbWVudENhbGxiYWNrPiYmIGNhbGxiYWNrKQogewogICAgIFdlYlBhZ2VQcm94eSogcGFnZSA9
IHdlYlBhZ2VQcm94eUZvckhhbmRsZShicm93c2luZ0NvbnRleHRIYW5kbGUpOwogICAgIGlmICgh
cGFnZSkKQEAgLTExMTQsNyArMTA5NSw3IEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OnNl
bGVjdE9wdGlvbkVsZW1lbnQoY29uc3QgU3RyaW5nJiBicm93c2luZ0NvbnRleHRIYW5kCiAgICAg
cGFnZS0+cHJvY2VzcygpLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQXV0b21hdGlv
blNlc3Npb25Qcm94eTo6U2VsZWN0T3B0aW9uRWxlbWVudChwYWdlLT53ZWJQYWdlSUQoKSwgZnJh
bWVJRCwgbm9kZUhhbmRsZSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAotdm9p
ZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6aXNTaG93aW5nSmF2YVNjcmlwdERpYWxvZyhJbnNwZWN0
b3I6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBicm93c2luZ0NvbnRl
eHRIYW5kbGUsIGJvb2wqIHJlc3VsdCkKK0luc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5n
T3I8Ym9vbD4gV2ViQXV0b21hdGlvblNlc3Npb246OmlzU2hvd2luZ0phdmFTY3JpcHREaWFsb2co
Y29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFu
ZGxlJiBicm93c2luZ0NvbnRleHRIYW5kbGUpCiB7CiAgICAgQVNTRVJUKG1fY2xpZW50KTsKICAg
ICBpZiAoIW1fY2xpZW50KQpAQCAtMTEyNCwxMCArMTEwNSwxMCBAQCB2b2lkIFdlYkF1dG9tYXRp
b25TZXNzaW9uOjppc1Nob3dpbmdKYXZhU2NyaXB0RGlhbG9nKEluc3BlY3Rvcjo6RXJyb3JTdHJp
bmcmIGVycgogICAgIGlmICghcGFnZSkKICAgICAgICAgU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5F
RF9FUlJPUihXaW5kb3dOb3RGb3VuZCk7CiAKLSAgICAqcmVzdWx0ID0gbV9jbGllbnQtPmlzU2hv
d2luZ0phdmFTY3JpcHREaWFsb2dPblBhZ2UoKnRoaXMsICpwYWdlKTsKKyAgICByZXR1cm4gbV9j
bGllbnQtPmlzU2hvd2luZ0phdmFTY3JpcHREaWFsb2dPblBhZ2UoKnRoaXMsICpwYWdlKTsKIH0K
IAotdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6ZGlzbWlzc0N1cnJlbnRKYXZhU2NyaXB0RGlh
bG9nKEluc3BlY3Rvcjo6RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGJy
b3dzaW5nQ29udGV4dEhhbmRsZSkKK0luc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8
dm9pZD4gV2ViQXV0b21hdGlvblNlc3Npb246OmRpc21pc3NDdXJyZW50SmF2YVNjcmlwdERpYWxv
Zyhjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRI
YW5kbGUmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSkKIHsKICAgICBBU1NFUlQobV9jbGllbnQpOwog
ICAgIGlmICghbV9jbGllbnQpCkBAIC0xMTQxLDkgKzExMjIsMTEgQEAgdm9pZCBXZWJBdXRvbWF0
aW9uU2Vzc2lvbjo6ZGlzbWlzc0N1cnJlbnRKYXZhU2NyaXB0RGlhbG9nKEluc3BlY3Rvcjo6RXJy
b3JTdHJpbmcKICAgICAgICAgU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUihOb0phdmFT
Y3JpcHREaWFsb2cpOwogCiAgICAgbV9jbGllbnQtPmRpc21pc3NDdXJyZW50SmF2YVNjcmlwdERp
YWxvZ09uUGFnZSgqdGhpcywgKnBhZ2UpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBX
ZWJBdXRvbWF0aW9uU2Vzc2lvbjo6YWNjZXB0Q3VycmVudEphdmFTY3JpcHREaWFsb2coSW5zcGVj
dG9yOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgYnJvd3NpbmdDb250
ZXh0SGFuZGxlKQorSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBXZWJB
dXRvbWF0aW9uU2Vzc2lvbjo6YWNjZXB0Q3VycmVudEphdmFTY3JpcHREaWFsb2coY29uc3QgSW5z
cGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJiBicm93
c2luZ0NvbnRleHRIYW5kbGUpCiB7CiAgICAgQVNTRVJUKG1fY2xpZW50KTsKICAgICBpZiAoIW1f
Y2xpZW50KQpAQCAtMTE1Nyw5ICsxMTQwLDExIEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246
OmFjY2VwdEN1cnJlbnRKYXZhU2NyaXB0RGlhbG9nKEluc3BlY3Rvcjo6RXJyb3JTdHJpbmcmCiAg
ICAgICAgIFNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1IoTm9KYXZhU2NyaXB0RGlhbG9n
KTsKIAogICAgIG1fY2xpZW50LT5hY2NlcHRDdXJyZW50SmF2YVNjcmlwdERpYWxvZ09uUGFnZSgq
dGhpcywgKnBhZ2UpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBXZWJBdXRvbWF0aW9u
U2Vzc2lvbjo6bWVzc2FnZU9mQ3VycmVudEphdmFTY3JpcHREaWFsb2coSW5zcGVjdG9yOjpFcnJv
clN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgYnJvd3NpbmdDb250ZXh0SGFuZGxl
LCBTdHJpbmcqIHRleHQpCitJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFN0cmlu
Zz4gV2ViQXV0b21hdGlvblNlc3Npb246Om1lc3NhZ2VPZkN1cnJlbnRKYXZhU2NyaXB0RGlhbG9n
KGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhh
bmRsZSYgYnJvd3NpbmdDb250ZXh0SGFuZGxlKQogewogICAgIEFTU0VSVChtX2NsaWVudCk7CiAg
ICAgaWYgKCFtX2NsaWVudCkKQEAgLTExNzIsMTAgKzExNTcsMTAgQEAgdm9pZCBXZWJBdXRvbWF0
aW9uU2Vzc2lvbjo6bWVzc2FnZU9mQ3VycmVudEphdmFTY3JpcHREaWFsb2coSW5zcGVjdG9yOjpF
cnJvclN0cmkKICAgICBpZiAoIW1fY2xpZW50LT5pc1Nob3dpbmdKYXZhU2NyaXB0RGlhbG9nT25Q
YWdlKCp0aGlzLCAqcGFnZSkpCiAgICAgICAgIFNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJS
T1IoTm9KYXZhU2NyaXB0RGlhbG9nKTsKIAotICAgICp0ZXh0ID0gbV9jbGllbnQtPm1lc3NhZ2VP
ZkN1cnJlbnRKYXZhU2NyaXB0RGlhbG9nT25QYWdlKCp0aGlzLCAqcGFnZSk7CisgICAgcmV0dXJu
IG1fY2xpZW50LT5tZXNzYWdlT2ZDdXJyZW50SmF2YVNjcmlwdERpYWxvZ09uUGFnZSgqdGhpcywg
KnBhZ2UpOwogfQogCi12b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpzZXRVc2VySW5wdXRGb3JD
dXJyZW50SmF2YVNjcmlwdFByb21wdChJbnNwZWN0b3I6OkVycm9yU3RyaW5nJiBlcnJvclN0cmlu
ZywgY29uc3QgU3RyaW5nJiBicm93c2luZ0NvbnRleHRIYW5kbGUsIGNvbnN0IFN0cmluZyYgcHJv
bXB0VmFsdWUpCitJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IFdlYkF1
dG9tYXRpb25TZXNzaW9uOjpzZXRVc2VySW5wdXRGb3JDdXJyZW50SmF2YVNjcmlwdFByb21wdChj
b25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRIYW5k
bGUmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSwgY29uc3QgU3RyaW5nJiBwcm9tcHRWYWx1ZSkKIHsK
ICAgICBBU1NFUlQobV9jbGllbnQpOwogICAgIGlmICghbV9jbGllbnQpCkBAIC0xMjA3LDE5ICsx
MTkyLDIxIEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OnNldFVzZXJJbnB1dEZvckN1cnJl
bnRKYXZhU2NyaXB0UHJvbXB0KEluc3BlY3Rvcjo6RXJyCiAgICAgfQogCiAgICAgbV9jbGllbnQt
PnNldFVzZXJJbnB1dEZvckN1cnJlbnRKYXZhU2NyaXB0UHJvbXB0T25QYWdlKCp0aGlzLCAqcGFn
ZSwgcHJvbXB0VmFsdWUpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBXZWJBdXRvbWF0
aW9uU2Vzc2lvbjo6c2V0RmlsZXNUb1NlbGVjdEZvckZpbGVVcGxvYWQoRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSwgY29uc3QgSlNP
Tjo6QXJyYXkmIGZpbGVuYW1lcywgY29uc3QgSlNPTjo6QXJyYXkqIGZpbGVDb250ZW50cykKK0lu
c3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gV2ViQXV0b21hdGlvblNlc3Np
b246OnNldEZpbGVzVG9TZWxlY3RGb3JGaWxlVXBsb2FkKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYgYnJvd3NpbmdDb250ZXh0SGFu
ZGxlLCBSZWY8SlNPTjo6QXJyYXk+JiYgZmlsZW5hbWVzLCBSZWZQdHI8SlNPTjo6QXJyYXk+JiYg
ZmlsZUNvbnRlbnRzKQogewogICAgIFZlY3RvcjxTdHJpbmc+IG5ld0ZpbGVMaXN0OwotICAgIG5l
d0ZpbGVMaXN0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoZmlsZW5hbWVzLmxlbmd0aCgpKTsKKyAg
ICBuZXdGaWxlTGlzdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGZpbGVuYW1lcy0+bGVuZ3RoKCkp
OwogCi0gICAgaWYgKGZpbGVDb250ZW50cyAmJiBmaWxlQ29udGVudHMtPmxlbmd0aCgpICE9IGZp
bGVuYW1lcy5sZW5ndGgoKSkKKyAgICBpZiAoZmlsZUNvbnRlbnRzICYmIGZpbGVDb250ZW50cy0+
bGVuZ3RoKCkgIT0gZmlsZW5hbWVzLT5sZW5ndGgoKSkKICAgICAgICAgU1lOQ19GQUlMX1dJVEhf
UFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhJbnRlcm5hbEVycm9yLCAiVGhlIHBhcmFtZXRl
cnMgJ2ZpbGVuYW1lcycgYW5kICdmaWxlQ29udGVudHMnIG11c3QgaGF2ZSBlcXVhbCBsZW5ndGgu
Iik7CiAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZpbGVuYW1lcy5sZW5ndGgoKTsgKytp
KSB7Ci0gICAgICAgIFN0cmluZyBmaWxlbmFtZTsKLSAgICAgICAgaWYgKCFmaWxlbmFtZXMuZ2V0
KGkpLT5hc1N0cmluZyhmaWxlbmFtZSkpCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaWxl
bmFtZXMtPmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgYXV0byBmaWxlbmFtZSA9IGZpbGVuYW1l
cy0+Z2V0KGkpLT5hc1N0cmluZygpOworICAgICAgICBpZiAoIWZpbGVuYW1lKQogICAgICAgICAg
ICAgU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhJbnRlcm5hbEVy
cm9yLCAiVGhlIHBhcmFtZXRlciAnZmlsZW5hbWVzJyBjb250YWlucyBhIG5vbi1zdHJpbmcgdmFs
dWUuIik7CiAKICAgICAgICAgaWYgKCFmaWxlQ29udGVudHMpIHsKQEAgLTEyMjcsOCArMTIxNCw4
IEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OnNldEZpbGVzVG9TZWxlY3RGb3JGaWxlVXBs
b2FkKEVycm9yU3RyaW5nJiBlcnJvclN0cmluCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgfQogCi0gICAgICAgIFN0cmluZyBmaWxlRGF0YTsKLSAgICAgICAgaWYgKCFmaWxlQ29udGVu
dHMtPmdldChpKS0+YXNTdHJpbmcoZmlsZURhdGEpKQorICAgICAgICBhdXRvIGZpbGVEYXRhID0g
ZmlsZUNvbnRlbnRzLT5nZXQoaSktPmFzU3RyaW5nKCk7CisgICAgICAgIGlmICghZmlsZURhdGEp
CiAgICAgICAgICAgICBTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxT
KEludGVybmFsRXJyb3IsICJUaGUgcGFyYW1ldGVyICdmaWxlQ29udGVudHMnIGNvbnRhaW5zIGEg
bm9uLXN0cmluZyB2YWx1ZS4iKTsKIAogICAgICAgICBPcHRpb25hbDxTdHJpbmc+IGxvY2FsRmls
ZVBhdGggPSBwbGF0Zm9ybUdlbmVyYXRlTG9jYWxGaWxlUGF0aEZvclJlbW90ZUZpbGUoZmlsZW5h
bWUsIGZpbGVEYXRhKTsKQEAgLTEyMzksOSArMTIyNiwxMSBAQCB2b2lkIFdlYkF1dG9tYXRpb25T
ZXNzaW9uOjpzZXRGaWxlc1RvU2VsZWN0Rm9yRmlsZVVwbG9hZChFcnJvclN0cmluZyYgZXJyb3JT
dHJpbgogICAgIH0KIAogICAgIG1fZmlsZXNUb1NlbGVjdEZvckZpbGVVcGxvYWQuc3dhcChuZXdG
aWxlTGlzdCk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIFdlYkF1dG9tYXRpb25TZXNz
aW9uOjpzZXRGaWxlc0ZvcklucHV0RmlsZVVwbG9hZChjb25zdCBTdHJpbmcmIGJyb3dzaW5nQ29u
dGV4dEhhbmRsZSwgY29uc3QgU3RyaW5nJiBmcmFtZUhhbmRsZSwgY29uc3QgU3RyaW5nJiBub2Rl
SGFuZGxlLCBjb25zdCBKU09OOjpBcnJheSYgZmlsZW5hbWVzLCBSZWY8U2V0RmlsZXNGb3JJbnB1
dEZpbGVVcGxvYWRDYWxsYmFjaz4mJiBjYWxsYmFjaykKK3ZvaWQgV2ViQXV0b21hdGlvblNlc3Np
b246OnNldEZpbGVzRm9ySW5wdXRGaWxlVXBsb2FkKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYgYnJvd3NpbmdDb250ZXh0SGFuZGxl
LCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpGcmFtZUhhbmRsZSYgZnJh
bWVIYW5kbGUsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246Ok5vZGVIYW5k
bGUmIG5vZGVIYW5kbGUsIFJlZjxKU09OOjpBcnJheT4mJiBmaWxlbmFtZXMsIFJlZjxTZXRGaWxl
c0ZvcklucHV0RmlsZVVwbG9hZENhbGxiYWNrPiYmIGNhbGxiYWNrKQogewogICAgIFdlYlBhZ2VQ
cm94eSogcGFnZSA9IHdlYlBhZ2VQcm94eUZvckhhbmRsZShicm93c2luZ0NvbnRleHRIYW5kbGUp
OwogICAgIGlmICghcGFnZSkKQEAgLTEyNTMsMTAgKzEyNDIsMTAgQEAgdm9pZCBXZWJBdXRvbWF0
aW9uU2Vzc2lvbjo6c2V0RmlsZXNGb3JJbnB1dEZpbGVVcGxvYWQoY29uc3QgU3RyaW5nJiBicm93
c2luZ0NvbnQKICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1IoRnJhbWVO
b3RGb3VuZCk7CiAKICAgICBWZWN0b3I8U3RyaW5nPiBuZXdGaWxlTGlzdDsKLSAgICBuZXdGaWxl
TGlzdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGZpbGVuYW1lcy5sZW5ndGgoKSk7Ci0gICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBmaWxlbmFtZXMubGVuZ3RoKCk7ICsraSkgewotICAgICAgICBT
dHJpbmcgZmlsZW5hbWU7Ci0gICAgICAgIGlmICghZmlsZW5hbWVzLmdldChpKS0+YXNTdHJpbmco
ZmlsZW5hbWUpKQorICAgIG5ld0ZpbGVMaXN0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoZmlsZW5h
bWVzLT5sZW5ndGgoKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaWxlbmFtZXMtPmxl
bmd0aCgpOyArK2kpIHsKKyAgICAgICAgYXV0byBmaWxlbmFtZSA9IGZpbGVuYW1lcy0+Z2V0KGkp
LT5hc1N0cmluZygpOworICAgICAgICBpZiAoIWZpbGVuYW1lKQogICAgICAgICAgICAgQVNZTkNf
RkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoSW50ZXJuYWxFcnJvciwgIlRo
ZSBwYXJhbWV0ZXIgJ2ZpbGVuYW1lcycgY29udGFpbnMgYSBub24tc3RyaW5nIHZhbHVlLiIpOwog
CiAgICAgICAgIG5ld0ZpbGVMaXN0LmFwcGVuZChmaWxlbmFtZSk7CkBAIC0xMjk5LDcgKzEyODgs
NyBAQCBzdGF0aWMgUmVmPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21h
dGlvbjo6Q29va2llPj4gYnVpbGRBcnJheUZvcgogICAgIHJldHVybiBjb29raWVzOwogfQogCi12
b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpnZXRBbGxDb29raWVzKGNvbnN0IFN0cmluZyYgYnJv
d3NpbmdDb250ZXh0SGFuZGxlLCBSZWY8R2V0QWxsQ29va2llc0NhbGxiYWNrPiYmIGNhbGxiYWNr
KQordm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6Z2V0QWxsQ29va2llcyhjb25zdCBJbnNwZWN0
b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRIYW5kbGUmIGJyb3dzaW5n
Q29udGV4dEhhbmRsZSwgUmVmPEdldEFsbENvb2tpZXNDYWxsYmFjaz4mJiBjYWxsYmFjaykKIHsK
ICAgICBXZWJQYWdlUHJveHkqIHBhZ2UgPSB3ZWJQYWdlUHJveHlGb3JIYW5kbGUoYnJvd3NpbmdD
b250ZXh0SGFuZGxlKTsKICAgICBpZiAoIXBhZ2UpCkBAIC0xMzE3LDcgKzEzMDYsNyBAQCB2b2lk
IFdlYkF1dG9tYXRpb25TZXNzaW9uOjpnZXRBbGxDb29raWVzKGNvbnN0IFN0cmluZyYgYnJvd3Np
bmdDb250ZXh0SGFuZGxlLCBSZQogICAgIHBhZ2UtPnByb2Nlc3MoKS5zZW5kV2l0aEFzeW5jUmVw
bHkoTWVzc2FnZXM6OldlYkF1dG9tYXRpb25TZXNzaW9uUHJveHk6OkdldENvb2tpZXNGb3JGcmFt
ZShwYWdlLT53ZWJQYWdlSUQoKSwgV1RGOjpudWxsb3B0KSwgV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpOwogfQogCi12b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpkZWxldGVTaW5nbGVDb29r
aWUoY29uc3QgU3RyaW5nJiBicm93c2luZ0NvbnRleHRIYW5kbGUsIGNvbnN0IFN0cmluZyYgY29v
a2llTmFtZSwgUmVmPERlbGV0ZVNpbmdsZUNvb2tpZUNhbGxiYWNrPiYmIGNhbGxiYWNrKQordm9p
ZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6ZGVsZXRlU2luZ2xlQ29va2llKGNvbnN0IEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYgYnJvd3NpbmdD
b250ZXh0SGFuZGxlLCBjb25zdCBTdHJpbmcmIGNvb2tpZU5hbWUsIFJlZjxEZWxldGVTaW5nbGVD
b29raWVDYWxsYmFjaz4mJiBjYWxsYmFjaykKIHsKICAgICBXZWJQYWdlUHJveHkqIHBhZ2UgPSB3
ZWJQYWdlUHJveHlGb3JIYW5kbGUoYnJvd3NpbmdDb250ZXh0SGFuZGxlKTsKICAgICBpZiAoIXBh
Z2UpCkBAIC0xMzQ3LDcgKzEzMzYsNyBAQCBzdGF0aWMgU3RyaW5nIGRvbWFpbkJ5QWRkaW5nRG90
UHJlZml4SWZOZWVkZWQoU3RyaW5nIGRvbWFpbikKICAgICByZXR1cm4gZG9tYWluOwogfQogICAg
IAotdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6YWRkU2luZ2xlQ29va2llKGNvbnN0IFN0cmlu
ZyYgYnJvd3NpbmdDb250ZXh0SGFuZGxlLCBjb25zdCBKU09OOjpPYmplY3QmIGNvb2tpZU9iamVj
dCwgUmVmPEFkZFNpbmdsZUNvb2tpZUNhbGxiYWNrPiYmIGNhbGxiYWNrKQordm9pZCBXZWJBdXRv
bWF0aW9uU2Vzc2lvbjo6YWRkU2luZ2xlQ29va2llKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYgYnJvd3NpbmdDb250ZXh0SGFuZGxl
LCBSZWY8SlNPTjo6T2JqZWN0PiYmIGNvb2tpZU9iamVjdCwgUmVmPEFkZFNpbmdsZUNvb2tpZUNh
bGxiYWNrPiYmIGNhbGxiYWNrKQogewogICAgIFdlYlBhZ2VQcm94eSogcGFnZSA9IHdlYlBhZ2VQ
cm94eUZvckhhbmRsZShicm93c2luZ0NvbnRleHRIYW5kbGUpOwogICAgIGlmICghcGFnZSkKQEAg
LTEzNTgsMTQgKzEzNDcsMTYgQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6YWRkU2luZ2xl
Q29va2llKGNvbnN0IFN0cmluZyYgYnJvd3NpbmdDb250ZXh0SGFuZGxlLAogCiAgICAgV2ViQ29y
ZTo6Q29va2llIGNvb2tpZTsKIAotICAgIGlmICghY29va2llT2JqZWN0LmdldFN0cmluZygibmFt
ZSJfcywgY29va2llLm5hbWUpKQorICAgIGNvb2tpZS5uYW1lID0gY29va2llT2JqZWN0LT5nZXRT
dHJpbmcoIm5hbWUiX3MpOworICAgIGlmICghY29va2llLm5hbWUpCiAgICAgICAgIEFTWU5DX0ZB
SUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxTKE1pc3NpbmdQYXJhbWV0ZXIsICJU
aGUgcGFyYW1ldGVyICduYW1lJyB3YXMgbm90IGZvdW5kLiIpOwogCi0gICAgaWYgKCFjb29raWVP
YmplY3QuZ2V0U3RyaW5nKCJ2YWx1ZSJfcywgY29va2llLnZhbHVlKSkKKyAgICBjb29raWUudmFs
dWUgPSBjb29raWVPYmplY3QtPmdldFN0cmluZygidmFsdWUiX3MpOworICAgIGlmICghY29va2ll
LnZhbHVlKQogICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUl9BTkRfREVU
QUlMUyhNaXNzaW5nUGFyYW1ldGVyLCAiVGhlIHBhcmFtZXRlciAndmFsdWUnIHdhcyBub3QgZm91
bmQuIik7CiAKLSAgICBTdHJpbmcgZG9tYWluOwotICAgIGlmICghY29va2llT2JqZWN0LmdldFN0
cmluZygiZG9tYWluIl9zLCBkb21haW4pKQorICAgIGF1dG8gZG9tYWluID0gY29va2llT2JqZWN0
LT5nZXRTdHJpbmcoImRvbWFpbiJfcyk7CisgICAgaWYgKCFkb21haW4pCiAgICAgICAgIEFTWU5D
X0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxTKE1pc3NpbmdQYXJhbWV0ZXIs
ICJUaGUgcGFyYW1ldGVyICdkb21haW4nIHdhcyBub3QgZm91bmQuIik7CiAKICAgICAvLyBJbmhl
cml0IHRoZSBkb21haW4vaG9zdCBmcm9tIHRoZSBtYWluIGZyYW1lJ3MgVVJMIGlmIGl0IGlzIG5v
dCBleHBsaWNpdGx5IHNldC4KQEAgLTEzNzQsMzEgKzEzNjUsNDEgQEAgdm9pZCBXZWJBdXRvbWF0
aW9uU2Vzc2lvbjo6YWRkU2luZ2xlQ29va2llKGNvbnN0IFN0cmluZyYgYnJvd3NpbmdDb250ZXh0
SGFuZGxlLAogICAgIGVsc2UKICAgICAgICAgY29va2llLmRvbWFpbiA9IGRvbWFpbkJ5QWRkaW5n
RG90UHJlZml4SWZOZWVkZWQoZG9tYWluKTsKIAotICAgIGlmICghY29va2llT2JqZWN0LmdldFN0
cmluZygicGF0aCJfcywgY29va2llLnBhdGgpKQorICAgIGNvb2tpZS5wYXRoID0gY29va2llT2Jq
ZWN0LT5nZXRTdHJpbmcoInBhdGgiX3MpOworICAgIGlmICghY29va2llLnBhdGgpCiAgICAgICAg
IEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxTKE1pc3NpbmdQYXJh
bWV0ZXIsICJUaGUgcGFyYW1ldGVyICdwYXRoJyB3YXMgbm90IGZvdW5kLiIpOwogCi0gICAgZG91
YmxlIGV4cGlyZXM7Ci0gICAgaWYgKCFjb29raWVPYmplY3QuZ2V0RG91YmxlKCJleHBpcmVzIl9z
LCBleHBpcmVzKSkKKyAgICBhdXRvIGV4cGlyZXMgPSBjb29raWVPYmplY3QtPmdldERvdWJsZSgi
ZXhwaXJlcyJfcyk7CisgICAgaWYgKCFleHBpcmVzKQogICAgICAgICBBU1lOQ19GQUlMX1dJVEhf
UFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhNaXNzaW5nUGFyYW1ldGVyLCAiVGhlIHBhcmFt
ZXRlciAnZXhwaXJlcycgd2FzIG5vdCBmb3VuZC4iKTsKIAotICAgIGNvb2tpZS5leHBpcmVzID0g
ZXhwaXJlcyAqIDEwMDAuMDsKKyAgICBjb29raWUuZXhwaXJlcyA9ICpleHBpcmVzICogMTAwMC4w
OwogCi0gICAgaWYgKCFjb29raWVPYmplY3QuZ2V0Qm9vbGVhbigic2VjdXJlIl9zLCBjb29raWUu
c2VjdXJlKSkKKyAgICBhdXRvIHNlY3VyZSA9IGNvb2tpZU9iamVjdC0+Z2V0Qm9vbGVhbigic2Vj
dXJlIl9zKTsKKyAgICBpZiAoIXNlY3VyZSkKICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURF
RklORURfRVJST1JfQU5EX0RFVEFJTFMoTWlzc2luZ1BhcmFtZXRlciwgIlRoZSBwYXJhbWV0ZXIg
J3NlY3VyZScgd2FzIG5vdCBmb3VuZC4iKTsKIAotICAgIGlmICghY29va2llT2JqZWN0LmdldEJv
b2xlYW4oInNlc3Npb24iX3MsIGNvb2tpZS5zZXNzaW9uKSkKKyAgICBjb29raWUuc2VjdXJlID0g
KnNlY3VyZTsKKworICAgIGF1dG8gc2Vzc2lvbiA9IGNvb2tpZU9iamVjdC0+Z2V0Qm9vbGVhbigi
c2Vzc2lvbiJfcyk7CisgICAgaWYgKCFzZXNzaW9uKQogICAgICAgICBBU1lOQ19GQUlMX1dJVEhf
UFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhNaXNzaW5nUGFyYW1ldGVyLCAiVGhlIHBhcmFt
ZXRlciAnc2Vzc2lvbicgd2FzIG5vdCBmb3VuZC4iKTsKIAotICAgIGlmICghY29va2llT2JqZWN0
LmdldEJvb2xlYW4oImh0dHBPbmx5Il9zLCBjb29raWUuaHR0cE9ubHkpKQorICAgIGNvb2tpZS5z
ZXNzaW9uID0gKnNlc3Npb247CisKKyAgICBhdXRvIGh0dHBPbmx5ID0gY29va2llT2JqZWN0LT5n
ZXRCb29sZWFuKCJodHRwT25seSJfcyk7CisgICAgaWYgKCFodHRwT25seSkKICAgICAgICAgQVNZ
TkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoTWlzc2luZ1BhcmFtZXRl
ciwgIlRoZSBwYXJhbWV0ZXIgJ2h0dHBPbmx5JyB3YXMgbm90IGZvdW5kLiIpOwogCisgICAgY29v
a2llLmh0dHBPbmx5ID0gKmh0dHBPbmx5OworCiAgICAgV2ViQ29va2llTWFuYWdlclByb3h5KiBj
b29raWVNYW5hZ2VyID0gbV9wcm9jZXNzUG9vbC0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2Vy
UHJveHk+KCk7CiAgICAgY29va2llTWFuYWdlci0+c2V0Q29va2llcyhwYWdlLT53ZWJzaXRlRGF0
YVN0b3JlKCkuc2Vzc2lvbklEKCksIHsgY29va2llIH0sIFtjYWxsYmFja10oKSB7CiAgICAgICAg
IGNhbGxiYWNrLT5zZW5kU3VjY2VzcygpOwogICAgIH0pOwogfQogCi12b2lkIFdlYkF1dG9tYXRp
b25TZXNzaW9uOjpkZWxldGVBbGxDb29raWVzKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29u
c3QgU3RyaW5nJiBicm93c2luZ0NvbnRleHRIYW5kbGUpCitJbnNwZWN0b3I6OlByb3RvY29sOjpF
cnJvclN0cmluZ09yPHZvaWQ+IFdlYkF1dG9tYXRpb25TZXNzaW9uOjpkZWxldGVBbGxDb29raWVz
KGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhh
bmRsZSYgYnJvd3NpbmdDb250ZXh0SGFuZGxlKQogewogICAgIFdlYlBhZ2VQcm94eSogcGFnZSA9
IHdlYlBhZ2VQcm94eUZvckhhbmRsZShicm93c2luZ0NvbnRleHRIYW5kbGUpOwogICAgIGlmICgh
cGFnZSkKQEAgLTE0MTEsOSArMTQxMiwxMSBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpk
ZWxldGVBbGxDb29raWVzKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaQogCiAg
ICAgV2ViQ29va2llTWFuYWdlclByb3h5KiBjb29raWVNYW5hZ2VyID0gbV9wcm9jZXNzUG9vbC0+
c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7CiAgICAgY29va2llTWFuYWdlci0+
ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lcyhwYWdlLT53ZWJzaXRlRGF0YVN0b3JlKCkuc2Vzc2lv
bklEKCksIHsgaG9zdCwgZG9tYWluQnlBZGRpbmdEb3RQcmVmaXhJZk5lZWRlZChob3N0KSB9KTsK
KworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OmdldFNl
c3Npb25QZXJtaXNzaW9ucyhFcnJvclN0cmluZyYsIFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OlNlc3Npb25QZXJtaXNzaW9uRGF0YT4+JiBvdXRf
cGVybWlzc2lvbnMpCitJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxKU09O
OjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OlNlc3Npb25QZXJtaXNz
aW9uRGF0YT4+PiBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6Z2V0U2Vzc2lvblBlcm1pc3Npb25zKCkK
IHsKICAgICBhdXRvIHBlcm1pc3Npb25zT2JqZWN0QXJyYXkgPSBKU09OOjpBcnJheU9mPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OlNlc3Npb25QZXJtaXNzaW9uRGF0YT46OmNyZWF0
ZSgpOwogICAgIGF1dG8gZ2V0VXNlck1lZGlhUGVybWlzc2lvbk9iamVjdCA9IEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkF1dG9tYXRpb246OlNlc3Npb25QZXJtaXNzaW9uRGF0YTo6Y3JlYXRlKCkKQEAg
LTE0MjIsMzQgKzE0MjUsMzYgQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6Z2V0U2Vzc2lv
blBlcm1pc3Npb25zKEVycm9yU3RyaW5nJiwgUmVmUHRyPEpTT046OkFycmEKICAgICAgICAgLnJl
bGVhc2UoKTsKIAogICAgIHBlcm1pc3Npb25zT2JqZWN0QXJyYXktPmFkZEl0ZW0oV1RGTW92ZShn
ZXRVc2VyTWVkaWFQZXJtaXNzaW9uT2JqZWN0KSk7Ci0gICAgb3V0X3Blcm1pc3Npb25zID0gV1RG
TW92ZShwZXJtaXNzaW9uc09iamVjdEFycmF5KTsKKyAgICByZXR1cm4gV1RGTW92ZShwZXJtaXNz
aW9uc09iamVjdEFycmF5KTsKIH0KIAotdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6c2V0U2Vz
c2lvblBlcm1pc3Npb25zKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgSlNPTjo6QXJy
YXkmIHBlcm1pc3Npb25zKQorSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lk
PiBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6c2V0U2Vzc2lvblBlcm1pc3Npb25zKFJlZjxKU09OOjpB
cnJheT4mJiBwZXJtaXNzaW9ucykKIHsKLSAgICBmb3IgKGF1dG8gaXQgPSBwZXJtaXNzaW9ucy5i
ZWdpbigpOyBpdCAhPSBwZXJtaXNzaW9ucy5lbmQoKTsgKytpdCkgewotICAgICAgICBSZWZQdHI8
SlNPTjo6T2JqZWN0PiBwZXJtaXNzaW9uOwotICAgICAgICBpZiAoIWl0LT5nZXQoKS0+YXNPYmpl
Y3QocGVybWlzc2lvbikpCisgICAgZm9yIChhdXRvIGl0ID0gcGVybWlzc2lvbnMtPmJlZ2luKCk7
IGl0ICE9IHBlcm1pc3Npb25zLT5lbmQoKTsgKytpdCkgeworICAgICAgICBhdXRvIHBlcm1pc3Np
b24gPSBpdC0+Z2V0KCkuYXNPYmplY3QoKTsKKyAgICAgICAgaWYgKCFwZXJtaXNzaW9uKQogICAg
ICAgICAgICAgU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhJbnZh
bGlkUGFyYW1ldGVyLCAiVGhlIHBhcmFtZXRlciAncGVybWlzc2lvbnMnIGlzIGludmFsaWQuIik7
CiAKLSAgICAgICAgU3RyaW5nIHBlcm1pc3Npb25OYW1lOwotICAgICAgICBpZiAoIXBlcm1pc3Np
b24tPmdldFN0cmluZygicGVybWlzc2lvbiJfcywgcGVybWlzc2lvbk5hbWUpKQorICAgICAgICBh
dXRvIHBlcm1pc3Npb25OYW1lID0gcGVybWlzc2lvbi0+Z2V0U3RyaW5nKCJwZXJtaXNzaW9uIl9z
KTsKKyAgICAgICAgaWYgKCFwZXJtaXNzaW9uTmFtZSkKICAgICAgICAgICAgIFNZTkNfRkFJTF9X
SVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoSW52YWxpZFBhcmFtZXRlciwgIlRoZSBw
YXJhbWV0ZXIgJ3Blcm1pc3Npb24nIGlzIG1pc3Npbmcgb3IgaW52YWxpZC4iKTsKIAogICAgICAg
ICBhdXRvIHBhcnNlZFBlcm1pc3Npb25OYW1lID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21h
dGlvbkhlbHBlcnM6OnBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29s
OjpBdXRvbWF0aW9uOjpTZXNzaW9uUGVybWlzc2lvbj4ocGVybWlzc2lvbk5hbWUpOwogICAgICAg
ICBpZiAoIXBhcnNlZFBlcm1pc3Npb25OYW1lKQogICAgICAgICAgICAgU1lOQ19GQUlMX1dJVEhf
UFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhJbnZhbGlkUGFyYW1ldGVyLCAiVGhlIHBhcmFt
ZXRlciAncGVybWlzc2lvbicgaGFzIGFuIHVua25vd24gdmFsdWUuIik7CiAKLSAgICAgICAgYm9v
bCBwZXJtaXNzaW9uVmFsdWU7Ci0gICAgICAgIGlmICghcGVybWlzc2lvbi0+Z2V0Qm9vbGVhbigi
dmFsdWUiX3MsIHBlcm1pc3Npb25WYWx1ZSkpCisgICAgICAgIGF1dG8gcGVybWlzc2lvblZhbHVl
ID0gcGVybWlzc2lvbi0+Z2V0Qm9vbGVhbigidmFsdWUiX3MpOworICAgICAgICBpZiAoIXBlcm1p
c3Npb25WYWx1ZSkKICAgICAgICAgICAgIFNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1Jf
QU5EX0RFVEFJTFMoSW52YWxpZFBhcmFtZXRlciwgIlRoZSBwYXJhbWV0ZXIgJ3ZhbHVlJyBpcyBt
aXNzaW5nIG9yIGludmFsaWQuIik7CiAKICAgICAgICAgc3dpdGNoIChwYXJzZWRQZXJtaXNzaW9u
TmFtZS52YWx1ZSgpKSB7CiAgICAgICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21h
dGlvbjo6U2Vzc2lvblBlcm1pc3Npb246OkdldFVzZXJNZWRpYToKLSAgICAgICAgICAgIG1fcGVy
bWlzc2lvbkZvckdldFVzZXJNZWRpYSA9IHBlcm1pc3Npb25WYWx1ZTsKKyAgICAgICAgICAgIG1f
cGVybWlzc2lvbkZvckdldFVzZXJNZWRpYSA9ICpwZXJtaXNzaW9uVmFsdWU7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogICAgIH0KKworICAgIHJldHVybiB7IH07CiB9CiAKIGJvb2wg
V2ViQXV0b21hdGlvblNlc3Npb246OnNob3VsZEFsbG93R2V0VXNlck1lZGlhRm9yUGFnZShjb25z
dCBXZWJQYWdlUHJveHkmKSBjb25zdApAQCAtMTQ5NCw3ICsxNDk5LDcgQEAgU2ltdWxhdGVkSW5w
dXRTb3VyY2UqIFdlYkF1dG9tYXRpb25TZXNzaW9uOjppbnB1dFNvdXJjZUZvclR5cGUoU2ltdWxh
dGVkSW5wdXRTb3UKIH0KIAogLy8gTUFSSzogU2ltdWxhdGVkSW5wdXREaXNwYXRjaGVyOjpDbGll
bnQgQVBJCi12b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjp2aWV3cG9ydEluVmlld0NlbnRlclBv
aW50T2ZFbGVtZW50KFdlYlBhZ2VQcm94eSYgcGFnZSwgT3B0aW9uYWw8RnJhbWVJZGVudGlmaWVy
PiBmcmFtZUlELCBjb25zdCBTdHJpbmcmIG5vZGVIYW5kbGUsIEZ1bmN0aW9uPHZvaWQgKE9wdGlv
bmFsPFdlYkNvcmU6OkludFBvaW50PiwgT3B0aW9uYWw8QXV0b21hdGlvbkNvbW1hbmRFcnJvcj4p
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQordm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6dmlld3Bv
cnRJblZpZXdDZW50ZXJQb2ludE9mRWxlbWVudChXZWJQYWdlUHJveHkmIHBhZ2UsIE9wdGlvbmFs
PEZyYW1lSWRlbnRpZmllcj4gZnJhbWVJRCwgY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0
b21hdGlvbjo6Tm9kZUhhbmRsZSYgbm9kZUhhbmRsZSwgRnVuY3Rpb248dm9pZChPcHRpb25hbDxX
ZWJDb3JlOjpJbnRQb2ludD4sIE9wdGlvbmFsPEF1dG9tYXRpb25Db21tYW5kRXJyb3I+KT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBXVEY6OkNvbXBsZXRpb25IYW5kbGVyPHZvaWQoT3B0
aW9uYWw8U3RyaW5nPiwgV2ViQ29yZTo6SW50UmVjdCwgT3B0aW9uYWw8V2ViQ29yZTo6SW50UG9p
bnQ+LCBib29sKT4gZGlkQ29tcHV0ZUVsZW1lbnRMYXlvdXRIYW5kbGVyID0gW2NvbXBsZXRpb25I
YW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKE9wdGlvbmFsPFN0cmluZz4gZXJy
b3JUeXBlLCBXZWJDb3JlOjpJbnRSZWN0LCBPcHRpb25hbDxXZWJDb3JlOjpJbnRQb2ludD4gaW5W
aWV3Q2VudGVyUG9pbnQsIGJvb2wpIG11dGFibGUgewogICAgICAgICBpZiAoZXJyb3JUeXBlKSB7
CkBAIC0xNjM1LDcgKzE2NDAsNyBAQCBzdGF0aWMgV2ViRXZlbnQ6Ok1vZGlmaWVyIHByb3RvY29s
TW9kaWZpZXJUb1dlYkV2ZW50TW9kaWZpZXIoSW5zcGVjdG9yOjpQcm90b2NvbAogfQogI2VuZGlm
IC8vIEVOQUJMRShXRUJEUklWRVJfTU9VU0VfSU5URVJBQ1RJT05TKQogCi12b2lkIFdlYkF1dG9t
YXRpb25TZXNzaW9uOjpwZXJmb3JtTW91c2VJbnRlcmFjdGlvbihjb25zdCBTdHJpbmcmIGhhbmRs
ZSwgY29uc3QgSlNPTjo6T2JqZWN0JiByZXF1ZXN0ZWRQb3NpdGlvbk9iamVjdCwgY29uc3QgU3Ry
aW5nJiBtb3VzZUJ1dHRvblN0cmluZywgY29uc3QgU3RyaW5nJiBtb3VzZUludGVyYWN0aW9uU3Ry
aW5nLCBjb25zdCBKU09OOjpBcnJheSYga2V5TW9kaWZpZXJTdHJpbmdzLCBSZWY8UGVyZm9ybU1v
dXNlSW50ZXJhY3Rpb25DYWxsYmFjaz4mJiBjYWxsYmFjaykKK3ZvaWQgV2ViQXV0b21hdGlvblNl
c3Npb246OnBlcmZvcm1Nb3VzZUludGVyYWN0aW9uKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYgaGFuZGxlLCBSZWY8SlNPTjo6T2Jq
ZWN0PiYmIHJlcXVlc3RlZFBvc2l0aW9uLCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9u
OjpNb3VzZUJ1dHRvbiBtb3VzZUJ1dHRvbiwgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlv
bjo6TW91c2VJbnRlcmFjdGlvbiBtb3VzZUludGVyYWN0aW9uLCBSZWY8SlNPTjo6QXJyYXk+JiYg
a2V5TW9kaWZpZXJTdHJpbmdzLCBSZWY8UGVyZm9ybU1vdXNlSW50ZXJhY3Rpb25DYWxsYmFjaz4m
JiBjYWxsYmFjaykKIHsKICNpZiAhRU5BQkxFKFdFQkRSSVZFUl9NT1VTRV9JTlRFUkFDVElPTlMp
CiAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1IoTm90SW1wbGVtZW50ZWQpOwpA
QCAtMTY0NCw0OCArMTY0OSw0NCBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpwZXJmb3Jt
TW91c2VJbnRlcmFjdGlvbihjb25zdCBTdHJpbmcmIGhhbmRsZSwgY29uc3QgSgogICAgIGlmICgh
cGFnZSkKICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1IoV2luZG93Tm90
Rm91bmQpOwogCi0gICAgZmxvYXQgeDsKLSAgICBpZiAoIXJlcXVlc3RlZFBvc2l0aW9uT2JqZWN0
LmdldERvdWJsZSgieCJfcywgeCkpCisgICAgYXV0byB4ID0gcmVxdWVzdGVkUG9zaXRpb24tPmdl
dERvdWJsZSgieCJfcyk7CisgICAgaWYgKCF4KQogICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJF
REVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhNaXNzaW5nUGFyYW1ldGVyLCAiVGhlIHBhcmFtZXRl
ciAneCcgd2FzIG5vdCBmb3VuZC4iKTsKIAotICAgIGZsb2F0IHk7Ci0gICAgaWYgKCFyZXF1ZXN0
ZWRQb3NpdGlvbk9iamVjdC5nZXREb3VibGUoInkiX3MsIHkpKQorICAgIGF1dG8gZmxvYXRYID0g
c3RhdGljX2Nhc3Q8ZmxvYXQ+KCp4KTsKKworICAgIGF1dG8geSA9IHJlcXVlc3RlZFBvc2l0aW9u
LT5nZXREb3VibGUoInkiX3MpOworICAgIGlmICgheSkKICAgICAgICAgQVNZTkNfRkFJTF9XSVRI
X1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoTWlzc2luZ1BhcmFtZXRlciwgIlRoZSBwYXJh
bWV0ZXIgJ3knIHdhcyBub3QgZm91bmQuIik7CiAKKyAgICBhdXRvIGZsb2F0WSA9IHN0YXRpY19j
YXN0PGZsb2F0PigqeSk7CisKICAgICBPcHRpb25TZXQ8V2ViRXZlbnQ6Ok1vZGlmaWVyPiBrZXlN
b2RpZmllcnM7Ci0gICAgZm9yIChhdXRvIGl0ID0ga2V5TW9kaWZpZXJTdHJpbmdzLmJlZ2luKCk7
IGl0ICE9IGtleU1vZGlmaWVyU3RyaW5ncy5lbmQoKTsgKytpdCkgewotICAgICAgICBTdHJpbmcg
bW9kaWZpZXJTdHJpbmc7Ci0gICAgICAgIGlmICghaXQtPmdldCgpLT5hc1N0cmluZyhtb2RpZmll
clN0cmluZykpCisgICAgZm9yIChhdXRvIGl0ID0ga2V5TW9kaWZpZXJTdHJpbmdzLT5iZWdpbigp
OyBpdCAhPSBrZXlNb2RpZmllclN0cmluZ3MtPmVuZCgpOyArK2l0KSB7CisgICAgICAgIGF1dG8g
bW9kaWZpZXJTdHJpbmcgPSBpdC0+Z2V0KCkuYXNTdHJpbmcoKTsKKyAgICAgICAgaWYgKCFtb2Rp
ZmllclN0cmluZykKICAgICAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9S
X0FORF9ERVRBSUxTKEludmFsaWRQYXJhbWV0ZXIsICJUaGUgcGFyYW1ldGVyICdtb2RpZmllcnMn
IGlzIGludmFsaWQuIik7CiAKICAgICAgICAgYXV0byBwYXJzZWRNb2RpZmllciA9IEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkF1dG9tYXRpb25IZWxwZXJzOjpwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8
SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6S2V5TW9kaWZpZXI+KG1vZGlmaWVyU3Ry
aW5nKTsKICAgICAgICAgaWYgKCFwYXJzZWRNb2RpZmllcikKICAgICAgICAgICAgIEFTWU5DX0ZB
SUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxTKEludmFsaWRQYXJhbWV0ZXIsICJB
IG1vZGlmaWVyIGluIHRoZSAnbW9kaWZpZXJzJyBhcnJheSBpcyBpbnZhbGlkLiIpOworCiAgICAg
ICAgIGtleU1vZGlmaWVycy5hZGQocHJvdG9jb2xNb2RpZmllclRvV2ViRXZlbnRNb2RpZmllcihw
YXJzZWRNb2RpZmllci52YWx1ZSgpKSk7CiAgICAgfQogCi0gICAgcGFnZS0+Z2V0V2luZG93RnJh
bWVXaXRoQ2FsbGJhY2soW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY2Fs
bGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgcGFnZSA9IG1ha2VSZWYoKnBhZ2UpLCB4LCB5LCBt
b3VzZUludGVyYWN0aW9uU3RyaW5nLCBtb3VzZUJ1dHRvblN0cmluZywga2V5TW9kaWZpZXJzXShX
ZWJDb3JlOjpGbG9hdFJlY3Qgd2luZG93RnJhbWUpIG11dGFibGUgeworICAgIHBhZ2UtPmdldFdp
bmRvd0ZyYW1lV2l0aENhbGxiYWNrKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhp
cyksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIHBhZ2UgPSBtYWtlUmVmKCpwYWdlKSwg
ZmxvYXRYLCBmbG9hdFksIG1vdXNlSW50ZXJhY3Rpb24sIG1vdXNlQnV0dG9uLCBrZXlNb2RpZmll
cnNdKFdlYkNvcmU6OkZsb2F0UmVjdCB3aW5kb3dGcmFtZSkgbXV0YWJsZSB7CisgICAgICAgIGZs
b2F0WCA9IHN0ZDo6bWluKHN0ZDo6bWF4KDAuMGYsIGZsb2F0WCksIHdpbmRvd0ZyYW1lLnNpemUo
KS53aWR0aCgpKTsKKyAgICAgICAgZmxvYXRZID0gc3RkOjptaW4oc3RkOjptYXgoMC4wZiwgZmxv
YXRZKSwgd2luZG93RnJhbWUuc2l6ZSgpLmhlaWdodCgpKTsKIAotICAgICAgICB4ID0gc3RkOjpt
aW4oc3RkOjptYXgoMC4wZiwgeCksIHdpbmRvd0ZyYW1lLnNpemUoKS53aWR0aCgpKTsKLSAgICAg
ICAgeSA9IHN0ZDo6bWluKHN0ZDo6bWF4KDAuMGYsIHkpLCB3aW5kb3dGcmFtZS5zaXplKCkuaGVp
Z2h0KCkpOworICAgICAgICBXZWJDb3JlOjpJbnRQb2ludCBsb2NhdGlvbkluVmlld3BvcnQgPSBX
ZWJDb3JlOjpJbnRQb2ludChzdGF0aWNfY2FzdDxpbnQ+KGZsb2F0WCksIHN0YXRpY19jYXN0PGlu
dD4oZmxvYXRZKSk7CiAKLSAgICAgICAgV2ViQ29yZTo6SW50UG9pbnQgbG9jYXRpb25JblZpZXdw
b3J0ID0gV2ViQ29yZTo6SW50UG9pbnQoc3RhdGljX2Nhc3Q8aW50Pih4KSwgc3RhdGljX2Nhc3Q8
aW50Pih5KSk7Ci0KLSAgICAgICAgYXV0byBwYXJzZWRJbnRlcmFjdGlvbiA9IEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkF1dG9tYXRpb25IZWxwZXJzOjpwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5z
cGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6TW91c2VJbnRlcmFjdGlvbj4obW91c2VJbnRl
cmFjdGlvblN0cmluZyk7Ci0gICAgICAgIGlmICghcGFyc2VkSW50ZXJhY3Rpb24pCi0gICAgICAg
ICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhJbnZhbGlk
UGFyYW1ldGVyLCAiVGhlIHBhcmFtZXRlciAnaW50ZXJhY3Rpb24nIGlzIGludmFsaWQuIik7Ci0K
LSAgICAgICAgYXV0byBwYXJzZWRCdXR0b24gPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0
aW9uSGVscGVyczo6cGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkF1dG9tYXRpb246Ok1vdXNlQnV0dG9uPihtb3VzZUJ1dHRvblN0cmluZyk7Ci0gICAgICAgIGlm
ICghcGFyc2VkQnV0dG9uKQotICAgICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURf
RVJST1JfQU5EX0RFVEFJTFMoSW52YWxpZFBhcmFtZXRlciwgIlRoZSBwYXJhbWV0ZXIgJ2J1dHRv
bicgaXMgaW52YWxpZC4iKTsKLQotICAgICAgICBhdXRvIG1vdXNlRXZlbnRzRmx1c2hlZENhbGxi
YWNrID0gW3Byb3RlY3RlZFRoaXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRoaXMpLCBjYWxsYmFjayA9
IFdURk1vdmUoY2FsbGJhY2spLCBwYWdlLCB4LCB5XShPcHRpb25hbDxBdXRvbWF0aW9uQ29tbWFu
ZEVycm9yPiBlcnJvcikgeworICAgICAgICBhdXRvIG1vdXNlRXZlbnRzRmx1c2hlZENhbGxiYWNr
ID0gW3Byb3RlY3RlZFRoaXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRoaXMpLCBjYWxsYmFjayA9IFdU
Rk1vdmUoY2FsbGJhY2spLCBwYWdlLCBmbG9hdFgsIGZsb2F0WV0oT3B0aW9uYWw8QXV0b21hdGlv
bkNvbW1hbmRFcnJvcj4gZXJyb3IpIHsKICAgICAgICAgICAgIGlmIChlcnJvcikKICAgICAgICAg
ICAgICAgICBjYWxsYmFjay0+c2VuZEZhaWx1cmUoZXJyb3IudmFsdWUoKS50b1Byb3RvY29sU3Ry
aW5nKCkpOwogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgY2FsbGJhY2stPnNl
bmRTdWNjZXNzKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OlBvaW50OjpjcmVhdGUo
KQotICAgICAgICAgICAgICAgICAgICAuc2V0WCh4KQotICAgICAgICAgICAgICAgICAgICAuc2V0
WSh5IC0gcGFnZS0+dG9wQ29udGVudEluc2V0KCkpCisgICAgICAgICAgICAgICAgICAgIC5zZXRY
KGZsb2F0WCkKKyAgICAgICAgICAgICAgICAgICAgLnNldFkoZmxvYXRZIC0gcGFnZS0+dG9wQ29u
dGVudEluc2V0KCkpCiAgICAgICAgICAgICAgICAgICAgIC5yZWxlYXNlKCkpOwogICAgICAgICAg
ICAgfQogICAgICAgICB9OwpAQCAtMTY5NSw3ICsxNjk2LDcgQEAgdm9pZCBXZWJBdXRvbWF0aW9u
U2Vzc2lvbjo6cGVyZm9ybU1vdXNlSW50ZXJhY3Rpb24oY29uc3QgU3RyaW5nJiBoYW5kbGUsIGNv
bnN0IEoKICAgICAgICAgICAgIGNhbGxiYWNrSW5NYXAoQVVUT01BVElPTl9DT01NQU5EX0VSUk9S
X1dJVEhfTkFNRShUaW1lb3V0KSk7CiAgICAgICAgIGNhbGxiYWNrSW5NYXAgPSBXVEZNb3ZlKG1v
dXNlRXZlbnRzRmx1c2hlZENhbGxiYWNrKTsKIAotICAgICAgICBwbGF0Zm9ybVNpbXVsYXRlTW91
c2VJbnRlcmFjdGlvbihwYWdlLCBwYXJzZWRJbnRlcmFjdGlvbi52YWx1ZSgpLCBwYXJzZWRCdXR0
b24udmFsdWUoKSwgbG9jYXRpb25JblZpZXdwb3J0LCBrZXlNb2RpZmllcnMpOworICAgICAgICBw
bGF0Zm9ybVNpbXVsYXRlTW91c2VJbnRlcmFjdGlvbihwYWdlLCBtb3VzZUludGVyYWN0aW9uLCBt
b3VzZUJ1dHRvbiwgbG9jYXRpb25JblZpZXdwb3J0LCBrZXlNb2RpZmllcnMpOwogCiAgICAgICAg
IC8vIElmIHRoZSBldmVudCBsb2NhdGlvbiB3YXMgcHJldmlvdXNseSBjbGlwcGVkIGFuZCBkb2Vz
IG5vdCBoaXQgdGVzdCBhbnl0aGluZyBpbiB0aGUgd2luZG93LCB0aGVuIGl0IHdpbGwgbm90IGJl
IHByb2Nlc3NlZC4KICAgICAgICAgLy8gRm9yIGNvbXBhdGliaWxpdHkgd2l0aCBwcmUtVzNDIGRy
aXZlciBpbXBsZW1lbnRhdGlvbnMsIGRvbid0IG1ha2UgdGhpcyBhIGhhcmQgZXJyb3I7IGp1c3Qg
ZG8gbm90aGluZyBzaWxlbnRseS4KQEAgLTE3MDgsNyArMTcwOSw3IEBAIHZvaWQgV2ViQXV0b21h
dGlvblNlc3Npb246OnBlcmZvcm1Nb3VzZUludGVyYWN0aW9uKGNvbnN0IFN0cmluZyYgaGFuZGxl
LCBjb25zdCBKCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkRSSVZFUl9NT1VTRV9JTlRFUkFDVElPTlMp
CiB9CiAKLXZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OnBlcmZvcm1LZXlib2FyZEludGVyYWN0
aW9ucyhjb25zdCBTdHJpbmcmIGhhbmRsZSwgY29uc3QgSlNPTjo6QXJyYXkmIGludGVyYWN0aW9u
cywgUmVmPFBlcmZvcm1LZXlib2FyZEludGVyYWN0aW9uc0NhbGxiYWNrPiYmIGNhbGxiYWNrKQor
dm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6cGVyZm9ybUtleWJvYXJkSW50ZXJhY3Rpb25zKGNv
bnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRs
ZSYgaGFuZGxlLCBSZWY8SlNPTjo6QXJyYXk+JiYgaW50ZXJhY3Rpb25zLCBSZWY8UGVyZm9ybUtl
eWJvYXJkSW50ZXJhY3Rpb25zQ2FsbGJhY2s+JiYgY2FsbGJhY2spCiB7CiAjaWYgIUVOQUJMRShX
RUJEUklWRVJfS0VZQk9BUkRfSU5URVJBQ1RJT05TKQogICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVE
RUZJTkVEX0VSUk9SKE5vdEltcGxlbWVudGVkKTsKQEAgLTE3MTcsMjggKzE3MTgsMjcgQEAgdm9p
ZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6cGVyZm9ybUtleWJvYXJkSW50ZXJhY3Rpb25zKGNvbnN0
IFN0cmluZyYgaGFuZGxlLCBjb24KICAgICBpZiAoIXBhZ2UpCiAgICAgICAgIEFTWU5DX0ZBSUxf
V0lUSF9QUkVERUZJTkVEX0VSUk9SKFdpbmRvd05vdEZvdW5kKTsKIAotICAgIGlmICghaW50ZXJh
Y3Rpb25zLmxlbmd0aCgpKQorICAgIGlmICghaW50ZXJhY3Rpb25zLT5sZW5ndGgoKSkKICAgICAg
ICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoSW52YWxpZFBh
cmFtZXRlciwgIlRoZSBwYXJhbWV0ZXIgJ2ludGVyYWN0aW9ucycgd2FzIG5vdCBmb3VuZCBvciBl
bXB0eS4iKTsKIAogICAgIC8vIFZhbGlkYXRlIGFsbCBvZiB0aGUgcGFyYW1ldGVycyBiZWZvcmUg
cGVyZm9ybWluZyBhbnkgaW50ZXJhY3Rpb25zIHdpdGggdGhlIGJyb3dzaW5nIGNvbnRleHQgdW5k
ZXIgdGVzdC4KICAgICBWZWN0b3I8V1RGOjpGdW5jdGlvbjx2b2lkKCk+PiBhY3Rpb25zVG9QZXJm
b3JtOwotICAgIGFjdGlvbnNUb1BlcmZvcm0ucmVzZXJ2ZUNhcGFjaXR5KGludGVyYWN0aW9ucy5s
ZW5ndGgoKSk7CisgICAgYWN0aW9uc1RvUGVyZm9ybS5yZXNlcnZlQ2FwYWNpdHkoaW50ZXJhY3Rp
b25zLT5sZW5ndGgoKSk7CiAKLSAgICBmb3IgKGNvbnN0IGF1dG8mIGludGVyYWN0aW9uIDogaW50
ZXJhY3Rpb25zKSB7Ci0gICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IGludGVyYWN0aW9uT2Jq
ZWN0OwotICAgICAgICBpZiAoIWludGVyYWN0aW9uLT5hc09iamVjdChpbnRlcmFjdGlvbk9iamVj
dCkpCisgICAgZm9yIChjb25zdCBhdXRvJiBpbnRlcmFjdGlvblZhbHVlIDogaW50ZXJhY3Rpb25z
LmdldCgpKSB7CisgICAgICAgIGF1dG8gaW50ZXJhY3Rpb25PYmplY3QgPSBpbnRlcmFjdGlvblZh
bHVlLT5hc09iamVjdCgpOworICAgICAgICBpZiAoIWludGVyYWN0aW9uT2JqZWN0KQogICAgICAg
ICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoSW52YWxp
ZFBhcmFtZXRlciwgIkFuIGludGVyYWN0aW9uIGluIHRoZSAnaW50ZXJhY3Rpb25zJyBwYXJhbWV0
ZXIgd2FzIGludmFsaWQuIik7CiAKLSAgICAgICAgU3RyaW5nIGludGVyYWN0aW9uVHlwZVN0cmlu
ZzsKLSAgICAgICAgaWYgKCFpbnRlcmFjdGlvbk9iamVjdC0+Z2V0U3RyaW5nKCJ0eXBlIl9zLCBp
bnRlcmFjdGlvblR5cGVTdHJpbmcpKQorICAgICAgICBhdXRvIGludGVyYWN0aW9uVHlwZVN0cmlu
ZyA9IGludGVyYWN0aW9uT2JqZWN0LT5nZXRTdHJpbmcoInR5cGUiX3MpOworICAgICAgICBpZiAo
IWludGVyYWN0aW9uVHlwZVN0cmluZykKICAgICAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVE
RUZJTkVEX0VSUk9SX0FORF9ERVRBSUxTKEludmFsaWRQYXJhbWV0ZXIsICJBbiBpbnRlcmFjdGlv
biBpbiB0aGUgJ2ludGVyYWN0aW9ucycgcGFyYW1ldGVyIGlzIG1pc3NpbmcgdGhlICd0eXBlJyBr
ZXkuIik7CiAgICAgICAgIGF1dG8gaW50ZXJhY3Rpb25UeXBlID0gSW5zcGVjdG9yOjpQcm90b2Nv
bDo6QXV0b21hdGlvbkhlbHBlcnM6OnBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6
OlByb3RvY29sOjpBdXRvbWF0aW9uOjpLZXlib2FyZEludGVyYWN0aW9uVHlwZT4oaW50ZXJhY3Rp
b25UeXBlU3RyaW5nKTsKICAgICAgICAgaWYgKCFpbnRlcmFjdGlvblR5cGUpCiAgICAgICAgICAg
ICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhJbnZhbGlkUGFy
YW1ldGVyLCAiQW4gaW50ZXJhY3Rpb24gaW4gdGhlICdpbnRlcmFjdGlvbnMnIHBhcmFtZXRlciBo
YXMgYW4gaW52YWxpZCAndHlwZScga2V5LiIpOwogCi0gICAgICAgIFN0cmluZyB2aXJ0dWFsS2V5
U3RyaW5nOwotICAgICAgICBib29sIGZvdW5kVmlydHVhbEtleSA9IGludGVyYWN0aW9uT2JqZWN0
LT5nZXRTdHJpbmcoImtleSJfcywgdmlydHVhbEtleVN0cmluZyk7Ci0gICAgICAgIGlmIChmb3Vu
ZFZpcnR1YWxLZXkpIHsKKyAgICAgICAgYXV0byB2aXJ0dWFsS2V5U3RyaW5nID0gaW50ZXJhY3Rp
b25PYmplY3QtPmdldFN0cmluZygia2V5Il9zKTsKKyAgICAgICAgaWYgKCEhdmlydHVhbEtleVN0
cmluZykgewogICAgICAgICAgICAgT3B0aW9uYWw8VmlydHVhbEtleT4gdmlydHVhbEtleSA9IElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb25IZWxwZXJzOjpwYXJzZUVudW1WYWx1ZUZyb21T
dHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6VmlydHVhbEtleT4odmlydHVh
bEtleVN0cmluZyk7CiAgICAgICAgICAgICBpZiAoIXZpcnR1YWxLZXkpCiAgICAgICAgICAgICAg
ICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoSW52YWxpZFBh
cmFtZXRlciwgIkFuIGludGVyYWN0aW9uIGluIHRoZSAnaW50ZXJhY3Rpb25zJyBwYXJhbWV0ZXIg
aGFzIGFuIGludmFsaWQgJ2tleScgdmFsdWUuIik7CkBAIC0xNzQ4LDkgKzE3NDgsOCBAQCB2b2lk
IFdlYkF1dG9tYXRpb25TZXNzaW9uOjpwZXJmb3JtS2V5Ym9hcmRJbnRlcmFjdGlvbnMoY29uc3Qg
U3RyaW5nJiBoYW5kbGUsIGNvbgogICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KIAotICAgICAg
ICBTdHJpbmcga2V5U2VxdWVuY2U7Ci0gICAgICAgIGJvb2wgZm91bmRLZXlTZXF1ZW5jZSA9IGlu
dGVyYWN0aW9uT2JqZWN0LT5nZXRTdHJpbmcoInRleHQiX3MsIGtleVNlcXVlbmNlKTsKLSAgICAg
ICAgaWYgKGZvdW5kS2V5U2VxdWVuY2UpIHsKKyAgICAgICAgYXV0byBrZXlTZXF1ZW5jZSA9IGlu
dGVyYWN0aW9uT2JqZWN0LT5nZXRTdHJpbmcoInRleHQiX3MpOworICAgICAgICBpZiAoISFrZXlT
ZXF1ZW5jZSkgewogICAgICAgICAgICAgc3dpdGNoIChpbnRlcmFjdGlvblR5cGUudmFsdWUoKSkg
ewogICAgICAgICAgICAgY2FzZSBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpLZXli
b2FyZEludGVyYWN0aW9uVHlwZTo6S2V5UHJlc3M6CiAgICAgICAgICAgICBjYXNlIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OktleWJvYXJkSW50ZXJhY3Rpb25UeXBlOjpLZXlSZWxl
YXNlOgpAQCAtMTc2NSw3ICsxNzY0LDcgQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6cGVy
Zm9ybUtleWJvYXJkSW50ZXJhY3Rpb25zKGNvbnN0IFN0cmluZyYgaGFuZGxlLCBjb24KICAgICAg
ICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIGlmICghZm91bmRWaXJ0dWFsS2V5ICYmICFm
b3VuZEtleVNlcXVlbmNlKQorICAgICAgICBpZiAoIXZpcnR1YWxLZXlTdHJpbmcgJiYgIWtleVNl
cXVlbmNlKQogICAgICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5E
X0RFVEFJTFMoTWlzc2luZ1BhcmFtZXRlciwgIkFuIGludGVyYWN0aW9uIGluIHRoZSAnaW50ZXJh
Y3Rpb25zJyBwYXJhbWV0ZXIgaXMgbWlzc2luZyBib3RoICdrZXknIGFuZCAndGV4dCcuIE9uZSBt
dXN0IGJlIHByb3ZpZGVkLiIpOwogICAgIH0KIApAQCAtMTgwOCw3ICsxODA3LDcgQEAgc3RhdGlj
IFNpbXVsYXRlZElucHV0U291cmNlVHlwZSBzaW11bGF0ZWRJbnB1dFNvdXJjZVR5cGVGcm9tUHJv
dG9jb2xTb3VyY2VUeXBlKEkKIH0KICNlbmRpZiAvLyBFTkFCTEUoV0VCRFJJVkVSX0FDVElPTlNf
QVBJKQogCi12b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpwZXJmb3JtSW50ZXJhY3Rpb25TZXF1
ZW5jZShjb25zdCBTdHJpbmcmIGhhbmRsZSwgY29uc3QgU3RyaW5nKiBvcHRpb25hbEZyYW1lSGFu
ZGxlLCBjb25zdCBKU09OOjpBcnJheSYgaW5wdXRTb3VyY2VzLCBjb25zdCBKU09OOjpBcnJheSYg
c3RlcHMsIFJlZjxXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6UGVyZm9ybUludGVyYWN0aW9uU2VxdWVu
Y2VDYWxsYmFjaz4mJiBjYWxsYmFjaykKK3ZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OnBlcmZv
cm1JbnRlcmFjdGlvblNlcXVlbmNlKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRp
b246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYgaGFuZGxlLCBjb25zdCBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpBdXRvbWF0aW9uOjpGcmFtZUhhbmRsZSYgZnJhbWVIYW5kbGUsIFJlZjxKU09OOjpBcnJh
eT4mJiBpbnB1dFNvdXJjZXMsIFJlZjxKU09OOjpBcnJheT4mJiBzdGVwcywgUmVmPFdlYkF1dG9t
YXRpb25TZXNzaW9uOjpQZXJmb3JtSW50ZXJhY3Rpb25TZXF1ZW5jZUNhbGxiYWNrPiYmIGNhbGxi
YWNrKQogewogICAgIC8vIFRoaXMgY29tbWFuZCBpbXBsZW1lbnRzIFdlYktpdCBzdXBwb3J0IGZv
ciDCpzE3LjUgUGVyZm9ybSBBY3Rpb25zLgogCkBAIC0xODIwLDcgKzE4MTksNyBAQCB2b2lkIFdl
YkF1dG9tYXRpb25TZXNzaW9uOjpwZXJmb3JtSW50ZXJhY3Rpb25TZXF1ZW5jZShjb25zdCBTdHJp
bmcmIGhhbmRsZSwgY29ucwogICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJP
UihXaW5kb3dOb3RGb3VuZCk7CiAKICAgICBib29sIGZyYW1lTm90Rm91bmQgPSBmYWxzZTsKLSAg
ICBhdXRvIGZyYW1lSUQgPSB3ZWJGcmFtZUlERm9ySGFuZGxlKG9wdGlvbmFsRnJhbWVIYW5kbGUg
PyAqb3B0aW9uYWxGcmFtZUhhbmRsZSA6IGVtcHR5U3RyaW5nKCksIGZyYW1lTm90Rm91bmQpOwor
ICAgIGF1dG8gZnJhbWVJRCA9IHdlYkZyYW1lSURGb3JIYW5kbGUoZnJhbWVIYW5kbGUsIGZyYW1l
Tm90Rm91bmQpOwogICAgIGlmIChmcmFtZU5vdEZvdW5kKQogICAgICAgICBBU1lOQ19GQUlMX1dJ
VEhfUFJFREVGSU5FRF9FUlJPUihGcmFtZU5vdEZvdW5kKTsKIApAQCAtMTgyOSwyMCArMTgyOCwy
MCBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpwZXJmb3JtSW50ZXJhY3Rpb25TZXF1ZW5j
ZShjb25zdCBTdHJpbmcmIGhhbmRsZSwgY29ucwogCiAgICAgLy8gUGFyc2UgYW5kIHZhbGlkYXRl
IEF1dG9tYXRpb24gcHJvdG9jb2wgYXJndW1lbnRzLiBCeSB0aGlzIHBvaW50LCB0aGUgZHJpdmVy
IGhhcwogICAgIC8vIGFscmVhZHkgcGVyZm9ybWVkIHRoZSBzdGVwcyBpbiDCpzE3LjMgUHJvY2Vz
c2luZyBBY3Rpb25zIFJlcXVlc3RzLgotICAgIGlmICghaW5wdXRTb3VyY2VzLmxlbmd0aCgpKQor
ICAgIGlmICghaW5wdXRTb3VyY2VzLT5sZW5ndGgoKSkKICAgICAgICAgQVNZTkNfRkFJTF9XSVRI
X1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoSW52YWxpZFBhcmFtZXRlciwgIlRoZSBwYXJh
bWV0ZXIgJ2lucHV0U291cmNlcycgd2FzIG5vdCBmb3VuZCBvciBlbXB0eS4iKTsKIAotICAgIGZv
ciAoY29uc3QgYXV0byYgaW5wdXRTb3VyY2UgOiBpbnB1dFNvdXJjZXMpIHsKLSAgICAgICAgUmVm
UHRyPEpTT046Ok9iamVjdD4gaW5wdXRTb3VyY2VPYmplY3Q7Ci0gICAgICAgIGlmICghaW5wdXRT
b3VyY2UtPmFzT2JqZWN0KGlucHV0U291cmNlT2JqZWN0KSkKKyAgICBmb3IgKGNvbnN0IGF1dG8m
IGlucHV0U291cmNlVmFsdWUgOiBpbnB1dFNvdXJjZXMuZ2V0KCkpIHsKKyAgICAgICAgYXV0byBp
bnB1dFNvdXJjZU9iamVjdCA9IGlucHV0U291cmNlVmFsdWUtPmFzT2JqZWN0KCk7CisgICAgICAg
IGlmICghaW5wdXRTb3VyY2VPYmplY3QpCiAgICAgICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJF
REVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhJbnZhbGlkUGFyYW1ldGVyLCAiQW4gaW5wdXQgc291
cmNlIGluIHRoZSAnaW5wdXRTb3VyY2VzJyBwYXJhbWV0ZXIgd2FzIGludmFsaWQuIik7Ci0gICAg
ICAgIAotICAgICAgICBTdHJpbmcgc291cmNlSWQ7Ci0gICAgICAgIGlmICghaW5wdXRTb3VyY2VP
YmplY3QtPmdldFN0cmluZygic291cmNlSWQiX3MsIHNvdXJjZUlkKSkKKworICAgICAgICBhdXRv
IHNvdXJjZUlkID0gaW5wdXRTb3VyY2VPYmplY3QtPmdldFN0cmluZygic291cmNlSWQiX3MpOwor
ICAgICAgICBpZiAoIXNvdXJjZUlkKQogICAgICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURF
RklORURfRVJST1JfQU5EX0RFVEFJTFMoSW52YWxpZFBhcmFtZXRlciwgIkFuIGlucHV0IHNvdXJj
ZSBpbiB0aGUgJ2lucHV0U291cmNlcycgcGFyYW1ldGVyIGlzIG1pc3NpbmcgYSAnc291cmNlSWQn
LiIpOwogCi0gICAgICAgIFN0cmluZyBzb3VyY2VUeXBlOwotICAgICAgICBpZiAoIWlucHV0U291
cmNlT2JqZWN0LT5nZXRTdHJpbmcoInNvdXJjZVR5cGUiX3MsIHNvdXJjZVR5cGUpKQorICAgICAg
ICBhdXRvIHNvdXJjZVR5cGUgPSBpbnB1dFNvdXJjZU9iamVjdC0+Z2V0U3RyaW5nKCJzb3VyY2VU
eXBlIl9zKTsKKyAgICAgICAgaWYgKCFzb3VyY2VUeXBlKQogICAgICAgICAgICAgQVNZTkNfRkFJ
TF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoSW52YWxpZFBhcmFtZXRlciwgIkFu
IGlucHV0IHNvdXJjZSBpbiB0aGUgJ2lucHV0U291cmNlcycgcGFyYW1ldGVyIGlzIG1pc3Npbmcg
YSAnc291cmNlVHlwZScuIik7CiAKICAgICAgICAgYXV0byBwYXJzZWRJbnB1dFNvdXJjZVR5cGUg
PSBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uSGVscGVyczo6cGFyc2VFbnVtVmFsdWVG
cm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OklucHV0U291cmNlVHlw
ZT4oc291cmNlVHlwZSk7CkBAIC0xODgxLDI4ICsxODgwLDI4IEBAIHZvaWQgV2ViQXV0b21hdGlv
blNlc3Npb246OnBlcmZvcm1JbnRlcmFjdGlvblNlcXVlbmNlKGNvbnN0IFN0cmluZyYgaGFuZGxl
LCBjb25zCiAKICAgICBWZWN0b3I8U2ltdWxhdGVkSW5wdXRLZXlGcmFtZT4ga2V5RnJhbWVzOwog
Ci0gICAgaWYgKCFzdGVwcy5sZW5ndGgoKSkKKyAgICBpZiAoIXN0ZXBzLT5sZW5ndGgoKSkKICAg
ICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoSW52YWxp
ZFBhcmFtZXRlciwgIlRoZSBwYXJhbWV0ZXIgJ3N0ZXBzJyB3YXMgbm90IGZvdW5kIG9yIGVtcHR5
LiIpOwogCi0gICAgZm9yIChjb25zdCBhdXRvJiBzdGVwIDogc3RlcHMpIHsKLSAgICAgICAgUmVm
UHRyPEpTT046Ok9iamVjdD4gc3RlcE9iamVjdDsKLSAgICAgICAgaWYgKCFzdGVwLT5hc09iamVj
dChzdGVwT2JqZWN0KSkKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHN0ZXBWYWx1ZSA6IHN0ZXBzLmdl
dCgpKSB7CisgICAgICAgIGF1dG8gc3RlcE9iamVjdCA9IHN0ZXBWYWx1ZS0+YXNPYmplY3QoKTsK
KyAgICAgICAgaWYgKCFzdGVwT2JqZWN0KQogICAgICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BS
RURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoSW52YWxpZFBhcmFtZXRlciwgIkEgc3RlcCBpbiB0
aGUgJ3N0ZXBzJyBwYXJhbWV0ZXIgd2FzIG5vdCBhbiBvYmplY3QuIik7CiAKLSAgICAgICAgUmVm
UHRyPEpTT046OkFycmF5PiBzdGVwU3RhdGVzOwotICAgICAgICBpZiAoIXN0ZXBPYmplY3QtPmdl
dEFycmF5KCJzdGF0ZXMiX3MsIHN0ZXBTdGF0ZXMpKQorICAgICAgICBhdXRvIHN0ZXBTdGF0ZXMg
PSBzdGVwT2JqZWN0LT5nZXRBcnJheSgic3RhdGVzIl9zKTsKKyAgICAgICAgaWYgKCFzdGVwU3Rh
dGVzKQogICAgICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RF
VEFJTFMoSW52YWxpZFBhcmFtZXRlciwgIkEgc3RlcCBpcyBtaXNzaW5nIHRoZSAnc3RhdGVzJyBw
cm9wZXJ0eS4iKTsKIAogICAgICAgICBWZWN0b3I8U2ltdWxhdGVkSW5wdXRLZXlGcmFtZTo6U3Rh
dGVFbnRyeT4gZW50cmllczsKICAgICAgICAgZW50cmllcy5yZXNlcnZlQ2FwYWNpdHkoc3RlcFN0
YXRlcy0+bGVuZ3RoKCkpOwogCi0gICAgICAgIGZvciAoY29uc3QgYXV0byYgc3RhdGUgOiAqc3Rl
cFN0YXRlcykgewotICAgICAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gc3RhdGVPYmplY3Q7
Ci0gICAgICAgICAgICBpZiAoIXN0YXRlLT5hc09iamVjdChzdGF0ZU9iamVjdCkpCisgICAgICAg
IGZvciAoY29uc3QgYXV0byYgc3RhdGVWYWx1ZSA6ICpzdGVwU3RhdGVzKSB7CisgICAgICAgICAg
ICBhdXRvIHN0YXRlT2JqZWN0ID0gc3RhdGVWYWx1ZS0+YXNPYmplY3QoKTsKKyAgICAgICAgICAg
IGlmICghc3RhdGVPYmplY3QpCiAgICAgICAgICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURF
RklORURfRVJST1JfQU5EX0RFVEFJTFMoSW52YWxpZFBhcmFtZXRlciwgIkVuY291bnRlcmVkIGEg
bm9uLW9iamVjdCBzdGVwIHN0YXRlLiIpOwogCi0gICAgICAgICAgICBTdHJpbmcgc291cmNlSWQ7
Ci0gICAgICAgICAgICBpZiAoIXN0YXRlT2JqZWN0LT5nZXRTdHJpbmcoInNvdXJjZUlkIl9zLCBz
b3VyY2VJZCkpCisgICAgICAgICAgICBhdXRvIHNvdXJjZUlkID0gc3RhdGVPYmplY3QtPmdldFN0
cmluZygic291cmNlSWQiX3MpOworICAgICAgICAgICAgaWYgKCFzb3VyY2VJZCkKICAgICAgICAg
ICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhJbnZh
bGlkUGFyYW1ldGVyLCAiU3RlcCBzdGF0ZSBsYWNrcyByZXF1aXJlZCAnc291cmNlSWQnIHByb3Bl
cnR5LiIpOwogCiAgICAgICAgICAgICBpZiAoIXNvdXJjZUlkVG9JbnB1dFNvdXJjZU1hcC5jb250
YWlucyhzb3VyY2VJZCkpCkBAIC0xOTExLDE3ICsxOTEwLDE2IEBAIHZvaWQgV2ViQXV0b21hdGlv
blNlc3Npb246OnBlcmZvcm1JbnRlcmFjdGlvblNlcXVlbmNlKGNvbnN0IFN0cmluZyYgaGFuZGxl
LCBjb25zCiAgICAgICAgICAgICBTaW11bGF0ZWRJbnB1dFNvdXJjZSYgaW5wdXRTb3VyY2UgPSAq
c291cmNlSWRUb0lucHV0U291cmNlTWFwLmdldChzb3VyY2VJZCk7CiAgICAgICAgICAgICBTaW11
bGF0ZWRJbnB1dFNvdXJjZVN0YXRlIHNvdXJjZVN0YXRlIHsgfTsKIAotICAgICAgICAgICAgU3Ry
aW5nIHByZXNzZWRDaGFyS2V5U3RyaW5nOwotICAgICAgICAgICAgaWYgKHN0YXRlT2JqZWN0LT5n
ZXRTdHJpbmcoInByZXNzZWRDaGFyS2V5Il9zLCBwcmVzc2VkQ2hhcktleVN0cmluZykpCisgICAg
ICAgICAgICBhdXRvIHByZXNzZWRDaGFyS2V5U3RyaW5nID0gc3RhdGVPYmplY3QtPmdldFN0cmlu
ZygicHJlc3NlZENoYXJLZXkiX3MpOworICAgICAgICAgICAgaWYgKCEhcHJlc3NlZENoYXJLZXlT
dHJpbmcpCiAgICAgICAgICAgICAgICAgc291cmNlU3RhdGUucHJlc3NlZENoYXJLZXkgPSBwcmVz
c2VkQ2hhcktleVN0cmluZy5jaGFyYWN0ZXJBdCgwKTsKIAotICAgICAgICAgICAgUmVmUHRyPEpT
T046OkFycmF5PiBwcmVzc2VkVmlydHVhbEtleXNBcnJheTsKLSAgICAgICAgICAgIGlmIChzdGF0
ZU9iamVjdC0+Z2V0QXJyYXkoInByZXNzZWRWaXJ0dWFsS2V5cyJfcywgcHJlc3NlZFZpcnR1YWxL
ZXlzQXJyYXkpKSB7CisgICAgICAgICAgICBpZiAoYXV0byBwcmVzc2VkVmlydHVhbEtleXNBcnJh
eSA9IHN0YXRlT2JqZWN0LT5nZXRBcnJheSgicHJlc3NlZFZpcnR1YWxLZXlzIl9zKSkgewogICAg
ICAgICAgICAgICAgIFZpcnR1YWxLZXlTZXQgcHJlc3NlZFZpcnR1YWxLZXlzIHsgfTsKIAogICAg
ICAgICAgICAgICAgIGZvciAoYXV0byBpdCA9IHByZXNzZWRWaXJ0dWFsS2V5c0FycmF5LT5iZWdp
bigpOyBpdCAhPSBwcmVzc2VkVmlydHVhbEtleXNBcnJheS0+ZW5kKCk7ICsraXQpIHsKLSAgICAg
ICAgICAgICAgICAgICAgU3RyaW5nIHByZXNzZWRWaXJ0dWFsS2V5U3RyaW5nOwotICAgICAgICAg
ICAgICAgICAgICBpZiAoISgqaXQpLT5hc1N0cmluZyhwcmVzc2VkVmlydHVhbEtleVN0cmluZykp
CisgICAgICAgICAgICAgICAgICAgIGF1dG8gcHJlc3NlZFZpcnR1YWxLZXlTdHJpbmcgPSAoKml0
KS0+YXNTdHJpbmcoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFwcmVzc2VkVmlydHVhbEtl
eVN0cmluZykKICAgICAgICAgICAgICAgICAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJ
TkVEX0VSUk9SX0FORF9ERVRBSUxTKEludmFsaWRQYXJhbWV0ZXIsICJFbmNvdW50ZXJlZCBhIG5v
bi1zdHJpbmcgdmlydHVhbCBrZXkgdmFsdWUuIik7CiAKICAgICAgICAgICAgICAgICAgICAgT3B0
aW9uYWw8VmlydHVhbEtleT4gcGFyc2VkVmlydHVhbEtleSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkF1dG9tYXRpb25IZWxwZXJzOjpwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6QXV0b21hdGlvbjo6VmlydHVhbEtleT4ocHJlc3NlZFZpcnR1YWxLZXlTdHJpbmcp
OwpAQCAtMTkzNCwzMyArMTkzMiwzMiBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpwZXJm
b3JtSW50ZXJhY3Rpb25TZXF1ZW5jZShjb25zdCBTdHJpbmcmIGhhbmRsZSwgY29ucwogICAgICAg
ICAgICAgICAgIHNvdXJjZVN0YXRlLnByZXNzZWRWaXJ0dWFsS2V5cyA9IHByZXNzZWRWaXJ0dWFs
S2V5czsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgU3RyaW5nIHByZXNzZWRCdXR0b25T
dHJpbmc7Ci0gICAgICAgICAgICBpZiAoc3RhdGVPYmplY3QtPmdldFN0cmluZygicHJlc3NlZEJ1
dHRvbiJfcywgcHJlc3NlZEJ1dHRvblN0cmluZykpIHsKKyAgICAgICAgICAgIGF1dG8gcHJlc3Nl
ZEJ1dHRvblN0cmluZyA9IHN0YXRlT2JqZWN0LT5nZXRTdHJpbmcoInByZXNzZWRCdXR0b24iX3Mp
OworICAgICAgICAgICAgaWYgKCEhcHJlc3NlZEJ1dHRvblN0cmluZykgewogICAgICAgICAgICAg
ICAgIGF1dG8gcHJvdG9jb2xCdXR0b24gPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9u
SGVscGVyczo6cGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1
dG9tYXRpb246Ok1vdXNlQnV0dG9uPihwcmVzc2VkQnV0dG9uU3RyaW5nKTsKICAgICAgICAgICAg
ICAgICBzb3VyY2VTdGF0ZS5wcmVzc2VkTW91c2VCdXR0b24gPSBwcm90b2NvbEJ1dHRvbi52YWx1
ZU9yKE1vdXNlQnV0dG9uOjpOb25lKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgU3Ry
aW5nIG9yaWdpblN0cmluZzsKLSAgICAgICAgICAgIGlmIChzdGF0ZU9iamVjdC0+Z2V0U3RyaW5n
KCJvcmlnaW4iX3MsIG9yaWdpblN0cmluZykpCisgICAgICAgICAgICBhdXRvIG9yaWdpblN0cmlu
ZyA9IHN0YXRlT2JqZWN0LT5nZXRTdHJpbmcoIm9yaWdpbiJfcyk7CisgICAgICAgICAgICBpZiAo
ISFvcmlnaW5TdHJpbmcpCiAgICAgICAgICAgICAgICAgc291cmNlU3RhdGUub3JpZ2luID0gSW5z
cGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbkhlbHBlcnM6OnBhcnNlRW51bVZhbHVlRnJvbVN0
cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpNb3VzZU1vdmVPcmlnaW4+KG9y
aWdpblN0cmluZyk7CiAKICAgICAgICAgICAgIGlmIChzb3VyY2VTdGF0ZS5vcmlnaW4gJiYgc291
cmNlU3RhdGUub3JpZ2luLnZhbHVlKCkgPT0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlv
bjo6TW91c2VNb3ZlT3JpZ2luOjpFbGVtZW50KSB7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIG5v
ZGVIYW5kbGVTdHJpbmc7Ci0gICAgICAgICAgICAgICAgaWYgKCFzdGF0ZU9iamVjdC0+Z2V0U3Ry
aW5nKCJub2RlSGFuZGxlIl9zLCBub2RlSGFuZGxlU3RyaW5nKSkKKyAgICAgICAgICAgICAgICBh
dXRvIG5vZGVIYW5kbGVTdHJpbmcgPSBzdGF0ZU9iamVjdC0+Z2V0U3RyaW5nKCJub2RlSGFuZGxl
Il9zKTsKKyAgICAgICAgICAgICAgICBpZiAoIW5vZGVIYW5kbGVTdHJpbmcpCiAgICAgICAgICAg
ICAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxTKElu
dmFsaWRQYXJhbWV0ZXIsICJOb2RlIGhhbmRsZSBub3QgcHJvdmlkZWQgZm9yICdFbGVtZW50JyBv
cmlnaW4iKTsKICAgICAgICAgICAgICAgICBzb3VyY2VTdGF0ZS5ub2RlSGFuZGxlID0gbm9kZUhh
bmRsZVN0cmluZzsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgUmVmUHRyPEpTT046Ok9i
amVjdD4gbG9jYXRpb25PYmplY3Q7Ci0gICAgICAgICAgICBpZiAoc3RhdGVPYmplY3QtPmdldE9i
amVjdCgibG9jYXRpb24iX3MsIGxvY2F0aW9uT2JqZWN0KSkgewotICAgICAgICAgICAgICAgIGlu
dCB4ID0gMCwgeSA9IDA7Ci0gICAgICAgICAgICAgICAgaWYgKGxvY2F0aW9uT2JqZWN0LT5nZXRJ
bnRlZ2VyKCJ4Il9zLCB4KSAmJiBsb2NhdGlvbk9iamVjdC0+Z2V0SW50ZWdlcigieSJfcywgeSkp
Ci0gICAgICAgICAgICAgICAgICAgIHNvdXJjZVN0YXRlLmxvY2F0aW9uID0gV2ViQ29yZTo6SW50
UG9pbnQoeCwgeSk7CisgICAgICAgICAgICBpZiAoYXV0byBsb2NhdGlvbk9iamVjdCA9IHN0YXRl
T2JqZWN0LT5nZXRPYmplY3QoImxvY2F0aW9uIl9zKSkgeworICAgICAgICAgICAgICAgIGF1dG8g
eCA9IGxvY2F0aW9uT2JqZWN0LT5nZXRJbnRlZ2VyKCJ4Il9zKTsKKyAgICAgICAgICAgICAgICBh
dXRvIHkgPSBsb2NhdGlvbk9iamVjdC0+Z2V0SW50ZWdlcigieSJfcyk7CisgICAgICAgICAgICAg
ICAgaWYgKHggJiYgeSkKKyAgICAgICAgICAgICAgICAgICAgc291cmNlU3RhdGUubG9jYXRpb24g
PSBXZWJDb3JlOjpJbnRQb2ludCgqeCwgKnkpOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAg
ICBpbnQgcGFyc2VkRHVyYXRpb247Ci0gICAgICAgICAgICBpZiAoc3RhdGVPYmplY3QtPmdldElu
dGVnZXIoImR1cmF0aW9uIl9zLCBwYXJzZWREdXJhdGlvbikpCi0gICAgICAgICAgICAgICAgc291
cmNlU3RhdGUuZHVyYXRpb24gPSBTZWNvbmRzOjpmcm9tTWlsbGlzZWNvbmRzKHBhcnNlZER1cmF0
aW9uKTsKKyAgICAgICAgICAgIGlmIChhdXRvIGR1cmF0aW9uID0gc3RhdGVPYmplY3QtPmdldElu
dGVnZXIoImR1cmF0aW9uIl9zKSkKKyAgICAgICAgICAgICAgICBzb3VyY2VTdGF0ZS5kdXJhdGlv
biA9IFNlY29uZHM6OmZyb21NaWxsaXNlY29uZHMoKmR1cmF0aW9uKTsKIAogICAgICAgICAgICAg
ZW50cmllcy51bmNoZWNrZWRBcHBlbmQoc3RkOjpwYWlyPFNpbXVsYXRlZElucHV0U291cmNlJiwg
U2ltdWxhdGVkSW5wdXRTb3VyY2VTdGF0ZT4geyBpbnB1dFNvdXJjZSwgc291cmNlU3RhdGUgfSk7
CiAgICAgICAgIH0KQEAgLTE5ODQsNyArMTk4MSw3IEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Np
b246OnBlcmZvcm1JbnRlcmFjdGlvblNlcXVlbmNlKGNvbnN0IFN0cmluZyYgaGFuZGxlLCBjb25z
CiAjZW5kaWYgLy8gRU5BQkxFKFdFQkRSSVZFUl9BQ1RJT05TX0FQSSkKIH0KIAotdm9pZCBXZWJB
dXRvbWF0aW9uU2Vzc2lvbjo6Y2FuY2VsSW50ZXJhY3Rpb25TZXF1ZW5jZShjb25zdCBTdHJpbmcm
IGhhbmRsZSwgY29uc3QgU3RyaW5nKiBvcHRpb25hbEZyYW1lSGFuZGxlLCBSZWY8Q2FuY2VsSW50
ZXJhY3Rpb25TZXF1ZW5jZUNhbGxiYWNrPiYmIGNhbGxiYWNrKQordm9pZCBXZWJBdXRvbWF0aW9u
U2Vzc2lvbjo6Y2FuY2VsSW50ZXJhY3Rpb25TZXF1ZW5jZShjb25zdCBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRIYW5kbGUmIGhhbmRsZSwgY29uc3QgSW5z
cGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6RnJhbWVIYW5kbGUmIGZyYW1lSGFuZGxlLCBS
ZWY8Q2FuY2VsSW50ZXJhY3Rpb25TZXF1ZW5jZUNhbGxiYWNrPiYmIGNhbGxiYWNrKQogewogICAg
IC8vIFRoaXMgY29tbWFuZCBpbXBsZW1lbnRzIFdlYktpdCBzdXBwb3J0IGZvciDCpzE3LjYgUmVs
ZWFzZSBBY3Rpb25zLgogCkBAIC0xOTk2LDcgKzE5OTMsNyBAQCB2b2lkIFdlYkF1dG9tYXRpb25T
ZXNzaW9uOjpjYW5jZWxJbnRlcmFjdGlvblNlcXVlbmNlKGNvbnN0IFN0cmluZyYgaGFuZGxlLCBj
b25zdAogICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUihXaW5kb3dOb3RG
b3VuZCk7CiAKICAgICBib29sIGZyYW1lTm90Rm91bmQgPSBmYWxzZTsKLSAgICBhdXRvIGZyYW1l
SUQgPSB3ZWJGcmFtZUlERm9ySGFuZGxlKG9wdGlvbmFsRnJhbWVIYW5kbGUgPyAqb3B0aW9uYWxG
cmFtZUhhbmRsZSA6IGVtcHR5U3RyaW5nKCksIGZyYW1lTm90Rm91bmQpOworICAgIGF1dG8gZnJh
bWVJRCA9IHdlYkZyYW1lSURGb3JIYW5kbGUoZnJhbWVIYW5kbGUsIGZyYW1lTm90Rm91bmQpOwog
ICAgIGlmIChmcmFtZU5vdEZvdW5kKQogICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5F
RF9FUlJPUihGcmFtZU5vdEZvdW5kKTsKIApAQCAtMjAxMywxOSArMjAxMCwxOCBAQCB2b2lkIFdl
YkF1dG9tYXRpb25TZXNzaW9uOjpjYW5jZWxJbnRlcmFjdGlvblNlcXVlbmNlKGNvbnN0IFN0cmlu
ZyYgaGFuZGxlLCBjb25zdAogI2VuZGlmIC8vIEVOQUJMRShXRUJEUklWRVJfQUNUSU9OU19BUEkp
CiB9CiAKLXZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OnRha2VTY3JlZW5zaG90KGNvbnN0IFN0
cmluZyYgaGFuZGxlLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsRnJhbWVIYW5kbGUsIGNvbnN0IFN0
cmluZyogb3B0aW9uYWxOb2RlSGFuZGxlLCBjb25zdCBib29sKiBvcHRpb25hbFNjcm9sbEludG9W
aWV3SWZOZWVkZWQsIGNvbnN0IGJvb2wqIG9wdGlvbmFsQ2xpcFRvVmlld3BvcnQsIFJlZjxUYWtl
U2NyZWVuc2hvdENhbGxiYWNrPiYmIGNhbGxiYWNrKQordm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lv
bjo6dGFrZVNjcmVlbnNob3QoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6
QnJvd3NpbmdDb250ZXh0SGFuZGxlJiBoYW5kbGUsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkF1dG9tYXRpb246OkZyYW1lSGFuZGxlJiBmcmFtZUhhbmRsZSwgY29uc3QgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6QXV0b21hdGlvbjo6Tm9kZUhhbmRsZSYgbm9kZUhhbmRsZSwgT3B0aW9uYWw8Ym9v
bD4mJiBvcHRpb25hbFNjcm9sbEludG9WaWV3SWZOZWVkZWQsIE9wdGlvbmFsPGJvb2w+JiYgb3B0
aW9uYWxDbGlwVG9WaWV3cG9ydCwgUmVmPFRha2VTY3JlZW5zaG90Q2FsbGJhY2s+JiYgY2FsbGJh
Y2spCiB7CiAgICAgV2ViUGFnZVByb3h5KiBwYWdlID0gd2ViUGFnZVByb3h5Rm9ySGFuZGxlKGhh
bmRsZSk7CiAgICAgaWYgKCFwYWdlKQogICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5F
RF9FUlJPUihXaW5kb3dOb3RGb3VuZCk7CiAKICAgICBib29sIGZyYW1lTm90Rm91bmQgPSBmYWxz
ZTsKLSAgICBhdXRvIGZyYW1lSUQgPSB3ZWJGcmFtZUlERm9ySGFuZGxlKG9wdGlvbmFsRnJhbWVI
YW5kbGUgPyAqb3B0aW9uYWxGcmFtZUhhbmRsZSA6IGVtcHR5U3RyaW5nKCksIGZyYW1lTm90Rm91
bmQpOworICAgIGF1dG8gZnJhbWVJRCA9IHdlYkZyYW1lSURGb3JIYW5kbGUoZnJhbWVIYW5kbGUs
IGZyYW1lTm90Rm91bmQpOwogICAgIGlmIChmcmFtZU5vdEZvdW5kKQogICAgICAgICBBU1lOQ19G
QUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUihGcmFtZU5vdEZvdW5kKTsKIAogICAgIGJvb2wgc2Ny
b2xsSW50b1ZpZXdJZk5lZWRlZCA9IG9wdGlvbmFsU2Nyb2xsSW50b1ZpZXdJZk5lZWRlZCA/ICpv
cHRpb25hbFNjcm9sbEludG9WaWV3SWZOZWVkZWQgOiBmYWxzZTsKLSAgICBTdHJpbmcgbm9kZUhh
bmRsZSA9IG9wdGlvbmFsTm9kZUhhbmRsZSA/ICpvcHRpb25hbE5vZGVIYW5kbGUgOiBlbXB0eVN0
cmluZygpOwogICAgIGJvb2wgY2xpcFRvVmlld3BvcnQgPSBvcHRpb25hbENsaXBUb1ZpZXdwb3J0
ID8gKm9wdGlvbmFsQ2xpcFRvVmlld3BvcnQgOiBmYWxzZTsKIAogI2lmIFBMQVRGT1JNKEdUSykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21h
dGlvblNlc3Npb24uaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0
b21hdGlvblNlc3Npb24uaAppbmRleCAzNjI3NjYwMzk1Y2I1ZjQ0ZTc3YTlmODYxZDQyZTk3MWRi
YTFiYmZjLi44ZDkwODkyYTRiMTM0MjY0YTRlODViZTRmNjVkZmEyMGZjMDEzYTJlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNz
aW9uLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0
aW9uU2Vzc2lvbi5oCkBAIC0xMzUsMTAgKzEzNSwxMCBAQCBwdWJsaWM6CiAKICNpZiBFTkFCTEUo
UkVNT1RFX0lOU1BFQ1RPUikKICAgICAvLyBJbnNwZWN0b3I6OlJlbW90ZUF1dG9tYXRpb25UYXJn
ZXQgQVBJCi0gICAgU3RyaW5nIG5hbWUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3Nlc3Np
b25JZGVudGlmaWVyOyB9Ci0gICAgdm9pZCBkaXNwYXRjaE1lc3NhZ2VGcm9tUmVtb3RlKGNvbnN0
IFN0cmluZyYgbWVzc2FnZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjb25uZWN0KEluc3BlY3Rvcjo6
RnJvbnRlbmRDaGFubmVsJiwgYm9vbCBpc0F1dG9tYXRpY0Nvbm5lY3Rpb24gPSBmYWxzZSwgYm9v
bCBpbW1lZGlhdGVseVBhdXNlID0gZmFsc2UpIG92ZXJyaWRlOwotICAgIHZvaWQgZGlzY29ubmVj
dChJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbCYpIG92ZXJyaWRlOworICAgIFN0cmluZyBuYW1l
KCkgY29uc3QgeyByZXR1cm4gbV9zZXNzaW9uSWRlbnRpZmllcjsgfQorICAgIHZvaWQgZGlzcGF0
Y2hNZXNzYWdlRnJvbVJlbW90ZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOworICAgIHZvaWQgY29u
bmVjdChJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbCYsIGJvb2wgaXNBdXRvbWF0aWNDb25uZWN0
aW9uID0gZmFsc2UsIGJvb2wgaW1tZWRpYXRlbHlQYXVzZSA9IGZhbHNlKTsKKyAgICB2b2lkIGRp
c2Nvbm5lY3QoSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWwmKTsKICNlbmRpZgogICAgIHZvaWQg
dGVybWluYXRlKCk7CiAKQEAgLTE0NiwxNSArMTQ2LDE1IEBAIHB1YmxpYzoKIAogICAgIC8vIFNp
bXVsYXRlZElucHV0RGlzcGF0Y2hlcjo6Q2xpZW50IEFQSQogI2lmIEVOQUJMRShXRUJEUklWRVJf
TU9VU0VfSU5URVJBQ1RJT05TKQotICAgIHZvaWQgc2ltdWxhdGVNb3VzZUludGVyYWN0aW9uKFdl
YlBhZ2VQcm94eSYsIE1vdXNlSW50ZXJhY3Rpb24sIE1vdXNlQnV0dG9uLCBjb25zdCBXZWJDb3Jl
OjpJbnRQb2ludCYgbG9jYXRpb25JblZpZXcsIEF1dG9tYXRpb25Db21wbGV0aW9uSGFuZGxlciYm
KSBmaW5hbDsKKyAgICB2b2lkIHNpbXVsYXRlTW91c2VJbnRlcmFjdGlvbihXZWJQYWdlUHJveHkm
LCBNb3VzZUludGVyYWN0aW9uLCBNb3VzZUJ1dHRvbiwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQm
IGxvY2F0aW9uSW5WaWV3LCBBdXRvbWF0aW9uQ29tcGxldGlvbkhhbmRsZXImJik7CiAjZW5kaWYK
ICNpZiBFTkFCTEUoV0VCRFJJVkVSX1RPVUNIX0lOVEVSQUNUSU9OUykKLSAgICB2b2lkIHNpbXVs
YXRlVG91Y2hJbnRlcmFjdGlvbihXZWJQYWdlUHJveHkmLCBUb3VjaEludGVyYWN0aW9uLCBjb25z
dCBXZWJDb3JlOjpJbnRQb2ludCYgbG9jYXRpb25JblZpZXcsIE9wdGlvbmFsPFNlY29uZHM+IGR1
cmF0aW9uLCBBdXRvbWF0aW9uQ29tcGxldGlvbkhhbmRsZXImJikgZmluYWw7CisgICAgdm9pZCBz
aW11bGF0ZVRvdWNoSW50ZXJhY3Rpb24oV2ViUGFnZVByb3h5JiwgVG91Y2hJbnRlcmFjdGlvbiwg
Y29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGxvY2F0aW9uSW5WaWV3LCBPcHRpb25hbDxTZWNvbmRz
PiBkdXJhdGlvbiwgQXV0b21hdGlvbkNvbXBsZXRpb25IYW5kbGVyJiYpOwogI2VuZGlmCiAjaWYg
RU5BQkxFKFdFQkRSSVZFUl9LRVlCT0FSRF9JTlRFUkFDVElPTlMpCi0gICAgdm9pZCBzaW11bGF0
ZUtleWJvYXJkSW50ZXJhY3Rpb24oV2ViUGFnZVByb3h5JiwgS2V5Ym9hcmRJbnRlcmFjdGlvbiwg
V1RGOjpWYXJpYW50PFZpcnR1YWxLZXksIENoYXJLZXk+JiYsIEF1dG9tYXRpb25Db21wbGV0aW9u
SGFuZGxlciYmKSBmaW5hbDsKKyAgICB2b2lkIHNpbXVsYXRlS2V5Ym9hcmRJbnRlcmFjdGlvbihX
ZWJQYWdlUHJveHkmLCBLZXlib2FyZEludGVyYWN0aW9uLCBXVEY6OlZhcmlhbnQ8VmlydHVhbEtl
eSwgQ2hhcktleT4mJiwgQXV0b21hdGlvbkNvbXBsZXRpb25IYW5kbGVyJiYpOwogI2VuZGlmCi0g
ICAgdm9pZCB2aWV3cG9ydEluVmlld0NlbnRlclBvaW50T2ZFbGVtZW50KFdlYlBhZ2VQcm94eSYs
IE9wdGlvbmFsPFdlYkNvcmU6OkZyYW1lSWRlbnRpZmllcj4sIGNvbnN0IFN0cmluZyYgbm9kZUhh
bmRsZSwgRnVuY3Rpb248dm9pZCAoT3B0aW9uYWw8V2ViQ29yZTo6SW50UG9pbnQ+LCBPcHRpb25h
bDxBdXRvbWF0aW9uQ29tbWFuZEVycm9yPik+JiYpIGZpbmFsOworICAgIHZvaWQgdmlld3BvcnRJ
blZpZXdDZW50ZXJQb2ludE9mRWxlbWVudChXZWJQYWdlUHJveHkmLCBPcHRpb25hbDxXZWJDb3Jl
OjpGcmFtZUlkZW50aWZpZXI+LCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9u
OjpOb2RlSGFuZGxlJiwgRnVuY3Rpb248dm9pZChPcHRpb25hbDxXZWJDb3JlOjpJbnRQb2ludD4s
IE9wdGlvbmFsPEF1dG9tYXRpb25Db21tYW5kRXJyb3I+KT4mJik7CiAKICNlbmRpZiAvLyBFTkFC
TEUoV0VCRFJJVkVSX0FDVElPTlNfQVBJKQogCkBAIC0xNjMsNDUgKzE2Myw0NSBAQCBwdWJsaWM6
CiAgICAgLy8gYW5kIHRoZSAtLXBsYXRmb3JtIGFyZ3VtZW50IHBhc3NlZCB0byB0aGUgcHJvdG9j
b2wgYmluZGluZ3MgZ2VuZXJhdG9yLgogCiAgICAgLy8gUGxhdGZvcm06IEdlbmVyaWMKLSAgICB2
b2lkIGdldEJyb3dzaW5nQ29udGV4dHMoUmVmPEdldEJyb3dzaW5nQ29udGV4dHNDYWxsYmFjaz4m
JikgZmluYWw7Ci0gICAgdm9pZCBnZXRCcm93c2luZ0NvbnRleHQoY29uc3QgU3RyaW5nJiwgUmVm
PEdldEJyb3dzaW5nQ29udGV4dENhbGxiYWNrPiYmKSBmaW5hbDsKLSAgICB2b2lkIGNyZWF0ZUJy
b3dzaW5nQ29udGV4dChjb25zdCBTdHJpbmcqIG9wdGlvbmFsUHJlc2VudGF0aW9uSGludCwgUmVm
PENyZWF0ZUJyb3dzaW5nQ29udGV4dENhbGxiYWNrPiYmKSBmaW5hbDsKLSAgICB2b2lkIGNsb3Nl
QnJvd3NpbmdDb250ZXh0KEluc3BlY3Rvcjo6RXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmKSBm
aW5hbDsKLSAgICB2b2lkIHN3aXRjaFRvQnJvd3NpbmdDb250ZXh0KGNvbnN0IFN0cmluZyYgYnJv
d3NpbmdDb250ZXh0SGFuZGxlLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsRnJhbWVIYW5kbGUsIFJl
ZjxTd2l0Y2hUb0Jyb3dzaW5nQ29udGV4dENhbGxiYWNrPiYmKSBmaW5hbDsKLSAgICB2b2lkIHNl
dFdpbmRvd0ZyYW1lT2ZCcm93c2luZ0NvbnRleHQoY29uc3QgU3RyaW5nJiBoYW5kbGUsIGNvbnN0
IEpTT046Ok9iamVjdCogb3JpZ2luLCBjb25zdCBKU09OOjpPYmplY3QqIHNpemUsIFJlZjxTZXRX
aW5kb3dGcmFtZU9mQnJvd3NpbmdDb250ZXh0Q2FsbGJhY2s+JiYpIGZpbmFsOwotICAgIHZvaWQg
bWF4aW1pemVXaW5kb3dPZkJyb3dzaW5nQ29udGV4dChjb25zdCBTdHJpbmcmIGhhbmRsZSwgUmVm
PE1heGltaXplV2luZG93T2ZCcm93c2luZ0NvbnRleHRDYWxsYmFjaz4mJikgZmluYWw7Ci0gICAg
dm9pZCBoaWRlV2luZG93T2ZCcm93c2luZ0NvbnRleHQoY29uc3QgU3RyaW5nJiBoYW5kbGUsIFJl
ZjxIaWRlV2luZG93T2ZCcm93c2luZ0NvbnRleHRDYWxsYmFjaz4mJikgZmluYWw7Ci0gICAgdm9p
ZCBuYXZpZ2F0ZUJyb3dzaW5nQ29udGV4dChjb25zdCBTdHJpbmcmIGhhbmRsZSwgY29uc3QgU3Ry
aW5nJiB1cmwsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxQYWdlTG9hZFN0cmF0ZWd5U3RyaW5nLCBj
b25zdCBkb3VibGUqIG9wdGlvbmFsUGFnZUxvYWRUaW1lb3V0LCBSZWY8TmF2aWdhdGVCcm93c2lu
Z0NvbnRleHRDYWxsYmFjaz4mJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBnb0JhY2tJbkJyb3dzaW5n
Q29udGV4dChjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsUGFnZUxvYWRTdHJh
dGVneVN0cmluZywgY29uc3QgZG91YmxlKiBvcHRpb25hbFBhZ2VMb2FkVGltZW91dCwgUmVmPEdv
QmFja0luQnJvd3NpbmdDb250ZXh0Q2FsbGJhY2s+JiYpIG92ZXJyaWRlOwotICAgIHZvaWQgZ29G
b3J3YXJkSW5Ccm93c2luZ0NvbnRleHQoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nKiBvcHRp
b25hbFBhZ2VMb2FkU3RyYXRlZ3lTdHJpbmcsIGNvbnN0IGRvdWJsZSogb3B0aW9uYWxQYWdlTG9h
ZFRpbWVvdXQsIFJlZjxHb0ZvcndhcmRJbkJyb3dzaW5nQ29udGV4dENhbGxiYWNrPiYmKSBvdmVy
cmlkZTsKLSAgICB2b2lkIHJlbG9hZEJyb3dzaW5nQ29udGV4dChjb25zdCBTdHJpbmcmLCBjb25z
dCBTdHJpbmcqIG9wdGlvbmFsUGFnZUxvYWRTdHJhdGVneVN0cmluZywgY29uc3QgZG91YmxlKiBv
cHRpb25hbFBhZ2VMb2FkVGltZW91dCwgUmVmPFJlbG9hZEJyb3dzaW5nQ29udGV4dENhbGxiYWNr
PiYmKSBvdmVycmlkZTsKLSAgICB2b2lkIHdhaXRGb3JOYXZpZ2F0aW9uVG9Db21wbGV0ZShjb25z
dCBTdHJpbmcmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSwgY29uc3QgU3RyaW5nKiBvcHRpb25hbEZy
YW1lSGFuZGxlLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsUGFnZUxvYWRTdHJhdGVneVN0cmluZywg
Y29uc3QgZG91YmxlKiBvcHRpb25hbFBhZ2VMb2FkVGltZW91dCwgUmVmPFdhaXRGb3JOYXZpZ2F0
aW9uVG9Db21wbGV0ZUNhbGxiYWNrPiYmKSBvdmVycmlkZTsKLSAgICB2b2lkIGV2YWx1YXRlSmF2
YVNjcmlwdEZ1bmN0aW9uKGNvbnN0IFN0cmluZyYgYnJvd3NpbmdDb250ZXh0SGFuZGxlLCBjb25z
dCBTdHJpbmcqIG9wdGlvbmFsRnJhbWVIYW5kbGUsIGNvbnN0IFN0cmluZyYgZnVuY3Rpb24sIGNv
bnN0IEpTT046OkFycmF5JiBhcmd1bWVudHMsIGNvbnN0IGJvb2wqIG9wdGlvbmFsRXhwZWN0c0lt
cGxpY2l0Q2FsbGJhY2tBcmd1bWVudCwgY29uc3QgZG91YmxlKiBvcHRpb25hbENhbGxiYWNrVGlt
ZW91dCwgUmVmPEluc3BlY3Rvcjo6QXV0b21hdGlvbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6
RXZhbHVhdGVKYXZhU2NyaXB0RnVuY3Rpb25DYWxsYmFjaz4mJikgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBwZXJmb3JtTW91c2VJbnRlcmFjdGlvbihjb25zdCBTdHJpbmcmIGhhbmRsZSwgY29uc3QgSlNP
Tjo6T2JqZWN0JiByZXF1ZXN0ZWRQb3NpdGlvbiwgY29uc3QgU3RyaW5nJiBtb3VzZUJ1dHRvbiwg
Y29uc3QgU3RyaW5nJiBtb3VzZUludGVyYWN0aW9uLCBjb25zdCBKU09OOjpBcnJheSYga2V5TW9k
aWZpZXJzLCBSZWY8UGVyZm9ybU1vdXNlSW50ZXJhY3Rpb25DYWxsYmFjaz4mJikgZmluYWw7Ci0g
ICAgdm9pZCBwZXJmb3JtS2V5Ym9hcmRJbnRlcmFjdGlvbnMoY29uc3QgU3RyaW5nJiBoYW5kbGUs
IGNvbnN0IEpTT046OkFycmF5JiBpbnRlcmFjdGlvbnMsIFJlZjxQZXJmb3JtS2V5Ym9hcmRJbnRl
cmFjdGlvbnNDYWxsYmFjaz4mJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBwZXJmb3JtSW50ZXJhY3Rp
b25TZXF1ZW5jZShjb25zdCBTdHJpbmcmIGhhbmRsZSwgY29uc3QgU3RyaW5nKiBvcHRpb25hbEZy
YW1lSGFuZGxlLCBjb25zdCBKU09OOjpBcnJheSYgc291cmNlcywgY29uc3QgSlNPTjo6QXJyYXkm
IHN0ZXBzLCBSZWY8UGVyZm9ybUludGVyYWN0aW9uU2VxdWVuY2VDYWxsYmFjaz4mJikgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCBjYW5jZWxJbnRlcmFjdGlvblNlcXVlbmNlKGNvbnN0IFN0cmluZyYgaGFu
ZGxlLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsRnJhbWVIYW5kbGUsIFJlZjxDYW5jZWxJbnRlcmFj
dGlvblNlcXVlbmNlQ2FsbGJhY2s+JiYpIG92ZXJyaWRlOwotICAgIHZvaWQgdGFrZVNjcmVlbnNo
b3QoY29uc3QgU3RyaW5nJiBoYW5kbGUsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxGcmFtZUhhbmRs
ZSwgY29uc3QgU3RyaW5nKiBvcHRpb25hbE5vZGVIYW5kbGUsIGNvbnN0IGJvb2wqIG9wdGlvbmFs
U2Nyb2xsSW50b1ZpZXdJZk5lZWRlZCwgY29uc3QgYm9vbCogb3B0aW9uYWxDbGlwVG9WaWV3cG9y
dCwgUmVmPFRha2VTY3JlZW5zaG90Q2FsbGJhY2s+JiYpIG92ZXJyaWRlOwotICAgIHZvaWQgcmVz
b2x2ZUNoaWxkRnJhbWVIYW5kbGUoY29uc3QgU3RyaW5nJiBicm93c2luZ0NvbnRleHRIYW5kbGUs
IGNvbnN0IFN0cmluZyogb3B0aW9uYWxGcmFtZUhhbmRsZSwgY29uc3QgaW50KiBvcHRpb25hbE9y
ZGluYWwsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxOYW1lLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFs
Tm9kZUhhbmRsZSwgUmVmPFJlc29sdmVDaGlsZEZyYW1lSGFuZGxlQ2FsbGJhY2s+JiYpIG92ZXJy
aWRlOwotICAgIHZvaWQgcmVzb2x2ZVBhcmVudEZyYW1lSGFuZGxlKGNvbnN0IFN0cmluZyYgYnJv
d3NpbmdDb250ZXh0SGFuZGxlLCBjb25zdCBTdHJpbmcmIGZyYW1lSGFuZGxlLCBSZWY8UmVzb2x2
ZVBhcmVudEZyYW1lSGFuZGxlQ2FsbGJhY2s+JiYpIG92ZXJyaWRlOwotICAgIHZvaWQgY29tcHV0
ZUVsZW1lbnRMYXlvdXQoY29uc3QgU3RyaW5nJiBicm93c2luZ0NvbnRleHRIYW5kbGUsIGNvbnN0
IFN0cmluZyYgZnJhbWVIYW5kbGUsIGNvbnN0IFN0cmluZyYgbm9kZUhhbmRsZSwgY29uc3QgYm9v
bCogb3B0aW9uYWxTY3JvbGxJbnRvVmlld0lmTmVlZGVkLCBjb25zdCBTdHJpbmcmIGNvb3JkaW5h
dGVTeXN0ZW0sIFJlZjxJbnNwZWN0b3I6OkF1dG9tYXRpb25CYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXI6OkNvbXB1dGVFbGVtZW50TGF5b3V0Q2FsbGJhY2s+JiYpIG92ZXJyaWRlOwotICAgIHZvaWQg
c2VsZWN0T3B0aW9uRWxlbWVudChjb25zdCBTdHJpbmcmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSwg
Y29uc3QgU3RyaW5nJiBmcmFtZUhhbmRsZSwgY29uc3QgU3RyaW5nJiBub2RlSGFuZGxlLCBSZWY8
SW5zcGVjdG9yOjpBdXRvbWF0aW9uQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpTZWxlY3RPcHRp
b25FbGVtZW50Q2FsbGJhY2s+JiYpIG92ZXJyaWRlOwotICAgIHZvaWQgaXNTaG93aW5nSmF2YVNj
cmlwdERpYWxvZyhJbnNwZWN0b3I6OkVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBicm93c2lu
Z0NvbnRleHRIYW5kbGUsIGJvb2wqIHJlc3VsdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkaXNtaXNz
Q3VycmVudEphdmFTY3JpcHREaWFsb2coSW5zcGVjdG9yOjpFcnJvclN0cmluZyYsIGNvbnN0IFN0
cmluZyYgYnJvd3NpbmdDb250ZXh0SGFuZGxlKSBvdmVycmlkZTsKLSAgICB2b2lkIGFjY2VwdEN1
cnJlbnRKYXZhU2NyaXB0RGlhbG9nKEluc3BlY3Rvcjo6RXJyb3JTdHJpbmcmLCBjb25zdCBTdHJp
bmcmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBtZXNzYWdlT2ZD
dXJyZW50SmF2YVNjcmlwdERpYWxvZyhJbnNwZWN0b3I6OkVycm9yU3RyaW5nJiwgY29uc3QgU3Ry
aW5nJiBicm93c2luZ0NvbnRleHRIYW5kbGUsIFN0cmluZyogdGV4dCkgb3ZlcnJpZGU7Ci0gICAg
dm9pZCBzZXRVc2VySW5wdXRGb3JDdXJyZW50SmF2YVNjcmlwdFByb21wdChJbnNwZWN0b3I6OkVy
cm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBicm93c2luZ0NvbnRleHRIYW5kbGUsIGNvbnN0IFN0
cmluZyYgdGV4dCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRGaWxlc1RvU2VsZWN0Rm9yRmlsZVVw
bG9hZChJbnNwZWN0b3I6OkVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBicm93c2luZ0NvbnRl
eHRIYW5kbGUsIGNvbnN0IEpTT046OkFycmF5JiBmaWxlbmFtZXMsIGNvbnN0IEpTT046OkFycmF5
KiBvcHRpb25hbEZpbGVDb250ZW50cykgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRGaWxlc0Zvcklu
cHV0RmlsZVVwbG9hZChjb25zdCBTdHJpbmcmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSwgY29uc3Qg
U3RyaW5nJiBmcmFtZUhhbmRsZSwgY29uc3QgU3RyaW5nJiBub2RlSGFuZGxlLCBjb25zdCBKU09O
OjpBcnJheSYgZmlsZW5hbWVzLCBSZWY8U2V0RmlsZXNGb3JJbnB1dEZpbGVVcGxvYWRDYWxsYmFj
az4mJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBnZXRBbGxDb29raWVzKGNvbnN0IFN0cmluZyYgYnJv
d3NpbmdDb250ZXh0SGFuZGxlLCBSZWY8R2V0QWxsQ29va2llc0NhbGxiYWNrPiYmKSBvdmVycmlk
ZTsKLSAgICB2b2lkIGRlbGV0ZVNpbmdsZUNvb2tpZShjb25zdCBTdHJpbmcmIGJyb3dzaW5nQ29u
dGV4dEhhbmRsZSwgY29uc3QgU3RyaW5nJiBjb29raWVOYW1lLCBSZWY8RGVsZXRlU2luZ2xlQ29v
a2llQ2FsbGJhY2s+JiYpIG92ZXJyaWRlOwotICAgIHZvaWQgYWRkU2luZ2xlQ29va2llKGNvbnN0
IFN0cmluZyYgYnJvd3NpbmdDb250ZXh0SGFuZGxlLCBjb25zdCBKU09OOjpPYmplY3QmIGNvb2tp
ZSwgUmVmPEFkZFNpbmdsZUNvb2tpZUNhbGxiYWNrPiYmKSBvdmVycmlkZTsKLSAgICB2b2lkIGRl
bGV0ZUFsbENvb2tpZXMoSW5zcGVjdG9yOjpFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgYnJv
d3NpbmdDb250ZXh0SGFuZGxlKSBvdmVycmlkZTsKLSAgICB2b2lkIGdldFNlc3Npb25QZXJtaXNz
aW9ucyhJbnNwZWN0b3I6OkVycm9yU3RyaW5nJiwgUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVj
dG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6U2Vzc2lvblBlcm1pc3Npb25EYXRhPj4mIG91dF9w
ZXJtaXNzaW9ucykgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRTZXNzaW9uUGVybWlzc2lvbnMoSW5z
cGVjdG9yOjpFcnJvclN0cmluZyYsIGNvbnN0IEpTT046OkFycmF5JiBpbl9wZXJtaXNzaW9ucykg
b3ZlcnJpZGU7CisgICAgdm9pZCBnZXRCcm93c2luZ0NvbnRleHRzKFJlZjxHZXRCcm93c2luZ0Nv
bnRleHRzQ2FsbGJhY2s+JiYpOworICAgIHZvaWQgZ2V0QnJvd3NpbmdDb250ZXh0KGNvbnN0IElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYsIFJl
ZjxHZXRCcm93c2luZ0NvbnRleHRDYWxsYmFjaz4mJik7CisgICAgdm9pZCBjcmVhdGVCcm93c2lu
Z0NvbnRleHQoT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3Np
bmdDb250ZXh0UHJlc2VudGF0aW9uPiYmLCBSZWY8Q3JlYXRlQnJvd3NpbmdDb250ZXh0Q2FsbGJh
Y2s+JiYpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gY2xv
c2VCcm93c2luZ0NvbnRleHQoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6
QnJvd3NpbmdDb250ZXh0SGFuZGxlJik7CisgICAgdm9pZCBzd2l0Y2hUb0Jyb3dzaW5nQ29udGV4
dChjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRI
YW5kbGUmLCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpGcmFtZUhhbmRs
ZSYsIFJlZjxTd2l0Y2hUb0Jyb3dzaW5nQ29udGV4dENhbGxiYWNrPiYmKTsKKyAgICB2b2lkIHNl
dFdpbmRvd0ZyYW1lT2ZCcm93c2luZ0NvbnRleHQoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6
QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJiwgUmVmUHRyPEpTT046Ok9iamVjdD4m
JiBvcmlnaW4sIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgc2l6ZSwgUmVmPFNldFdpbmRvd0ZyYW1l
T2ZCcm93c2luZ0NvbnRleHRDYWxsYmFjaz4mJik7CisgICAgdm9pZCBtYXhpbWl6ZVdpbmRvd09m
QnJvd3NpbmdDb250ZXh0KGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJy
b3dzaW5nQ29udGV4dEhhbmRsZSYsIFJlZjxNYXhpbWl6ZVdpbmRvd09mQnJvd3NpbmdDb250ZXh0
Q2FsbGJhY2s+JiYpOworICAgIHZvaWQgaGlkZVdpbmRvd09mQnJvd3NpbmdDb250ZXh0KGNvbnN0
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYs
IFJlZjxIaWRlV2luZG93T2ZCcm93c2luZ0NvbnRleHRDYWxsYmFjaz4mJik7CisgICAgdm9pZCBu
YXZpZ2F0ZUJyb3dzaW5nQ29udGV4dChjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0
aW9uOjpCcm93c2luZ0NvbnRleHRIYW5kbGUmLCBjb25zdCBTdHJpbmcmIHVybCwgT3B0aW9uYWw8
SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6UGFnZUxvYWRTdHJhdGVneT4mJiwgT3B0
aW9uYWw8ZG91YmxlPiYmIHBhZ2VMb2FkVGltZW91dCwgUmVmPE5hdmlnYXRlQnJvd3NpbmdDb250
ZXh0Q2FsbGJhY2s+JiYpOworICAgIHZvaWQgZ29CYWNrSW5Ccm93c2luZ0NvbnRleHQoY29uc3Qg
U3RyaW5nJiwgT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6UGFnZUxv
YWRTdHJhdGVneT4mJiwgT3B0aW9uYWw8ZG91YmxlPiYmIHBhZ2VMb2FkVGltZW91dCwgUmVmPEdv
QmFja0luQnJvd3NpbmdDb250ZXh0Q2FsbGJhY2s+JiYpOworICAgIHZvaWQgZ29Gb3J3YXJkSW5C
cm93c2luZ0NvbnRleHQoY29uc3QgU3RyaW5nJiwgT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6QXV0b21hdGlvbjo6UGFnZUxvYWRTdHJhdGVneT4mJiwgT3B0aW9uYWw8ZG91YmxlPiYmIHBh
Z2VMb2FkVGltZW91dCwgUmVmPEdvRm9yd2FyZEluQnJvd3NpbmdDb250ZXh0Q2FsbGJhY2s+JiYp
OworICAgIHZvaWQgcmVsb2FkQnJvd3NpbmdDb250ZXh0KGNvbnN0IFN0cmluZyYsIE9wdGlvbmFs
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OlBhZ2VMb2FkU3RyYXRlZ3k+JiYsIE9w
dGlvbmFsPGRvdWJsZT4mJiBwYWdlTG9hZFRpbWVvdXQsIFJlZjxSZWxvYWRCcm93c2luZ0NvbnRl
eHRDYWxsYmFjaz4mJik7CisgICAgdm9pZCB3YWl0Rm9yTmF2aWdhdGlvblRvQ29tcGxldGUoY29u
c3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxl
JiwgY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6RnJhbWVIYW5kbGUmLCBP
cHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpQYWdlTG9hZFN0cmF0ZWd5
PiYmLCBPcHRpb25hbDxkb3VibGU+JiYgcGFnZUxvYWRUaW1lb3V0LCBSZWY8V2FpdEZvck5hdmln
YXRpb25Ub0NvbXBsZXRlQ2FsbGJhY2s+JiYpOworICAgIHZvaWQgZXZhbHVhdGVKYXZhU2NyaXB0
RnVuY3Rpb24oY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdD
b250ZXh0SGFuZGxlJiwgY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6RnJh
bWVIYW5kbGUmLCBjb25zdCBTdHJpbmcmIGZ1bmN0aW9uLCBSZWY8SlNPTjo6QXJyYXk+JiYgYXJn
dW1lbnRzLCBPcHRpb25hbDxib29sPiYmIGV4cGVjdHNJbXBsaWNpdENhbGxiYWNrQXJndW1lbnQs
IE9wdGlvbmFsPGRvdWJsZT4mJiBjYWxsYmFja1RpbWVvdXQsIFJlZjxFdmFsdWF0ZUphdmFTY3Jp
cHRGdW5jdGlvbkNhbGxiYWNrPiYmKTsKKyAgICB2b2lkIHBlcmZvcm1Nb3VzZUludGVyYWN0aW9u
KGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhh
bmRsZSYsIFJlZjxKU09OOjpPYmplY3Q+JiYgcmVxdWVzdGVkUG9zaXRpb24sIEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkF1dG9tYXRpb246Ok1vdXNlQnV0dG9uLCBJbnNwZWN0b3I6OlByb3RvY29sOjpB
dXRvbWF0aW9uOjpNb3VzZUludGVyYWN0aW9uLCBSZWY8SlNPTjo6QXJyYXk+JiYga2V5TW9kaWZp
ZXJzLCBSZWY8UGVyZm9ybU1vdXNlSW50ZXJhY3Rpb25DYWxsYmFjaz4mJik7CisgICAgdm9pZCBw
ZXJmb3JtS2V5Ym9hcmRJbnRlcmFjdGlvbnMoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0
b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJiwgUmVmPEpTT046OkFycmF5PiYmIGludGVy
YWN0aW9ucywgUmVmPFBlcmZvcm1LZXlib2FyZEludGVyYWN0aW9uc0NhbGxiYWNrPiYmKTsKKyAg
ICB2b2lkIHBlcmZvcm1JbnRlcmFjdGlvblNlcXVlbmNlKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYsIGNvbnN0IEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkF1dG9tYXRpb246OkZyYW1lSGFuZGxlJiwgUmVmPEpTT046OkFycmF5PiYmIHNv
dXJjZXMsIFJlZjxKU09OOjpBcnJheT4mJiBzdGVwcywgUmVmPFBlcmZvcm1JbnRlcmFjdGlvblNl
cXVlbmNlQ2FsbGJhY2s+JiYpOworICAgIHZvaWQgY2FuY2VsSW50ZXJhY3Rpb25TZXF1ZW5jZShj
b25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRIYW5k
bGUmLCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpGcmFtZUhhbmRsZSYs
IFJlZjxDYW5jZWxJbnRlcmFjdGlvblNlcXVlbmNlQ2FsbGJhY2s+JiYpOworICAgIHZvaWQgdGFr
ZVNjcmVlbnNob3QoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3Np
bmdDb250ZXh0SGFuZGxlJiwgY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6
RnJhbWVIYW5kbGUmLCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpOb2Rl
SGFuZGxlJiwgT3B0aW9uYWw8Ym9vbD4mJiBzY3JvbGxJbnRvVmlld0lmTmVlZGVkLCBPcHRpb25h
bDxib29sPiYmIGNsaXBUb1ZpZXdwb3J0LCBSZWY8VGFrZVNjcmVlbnNob3RDYWxsYmFjaz4mJik7
CisgICAgdm9pZCByZXNvbHZlQ2hpbGRGcmFtZUhhbmRsZShjb25zdCBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRIYW5kbGUmLCBjb25zdCBJbnNwZWN0b3I6
OlByb3RvY29sOjpBdXRvbWF0aW9uOjpGcmFtZUhhbmRsZSYsIE9wdGlvbmFsPGludD4mJiBvcmRp
bmFsLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9t
YXRpb246Ok5vZGVIYW5kbGUmLCBSZWY8UmVzb2x2ZUNoaWxkRnJhbWVIYW5kbGVDYWxsYmFjaz4m
Jik7CisgICAgdm9pZCByZXNvbHZlUGFyZW50RnJhbWVIYW5kbGUoY29uc3QgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJiwgY29uc3QgSW5zcGVj
dG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6RnJhbWVIYW5kbGUmLCBSZWY8UmVzb2x2ZVBhcmVu
dEZyYW1lSGFuZGxlQ2FsbGJhY2s+JiYpOworICAgIHZvaWQgY29tcHV0ZUVsZW1lbnRMYXlvdXQo
Y29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFu
ZGxlJiwgY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6RnJhbWVIYW5kbGUm
LCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpOb2RlSGFuZGxlJiwgT3B0
aW9uYWw8Ym9vbD4mJiBzY3JvbGxJbnRvVmlld0lmTmVlZGVkLCBJbnNwZWN0b3I6OlByb3RvY29s
OjpBdXRvbWF0aW9uOjpDb29yZGluYXRlU3lzdGVtLCBSZWY8Q29tcHV0ZUVsZW1lbnRMYXlvdXRD
YWxsYmFjaz4mJik7CisgICAgdm9pZCBzZWxlY3RPcHRpb25FbGVtZW50KGNvbnN0IEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYsIGNvbnN0IElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkZyYW1lSGFuZGxlJiwgY29uc3QgSW5zcGVj
dG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6Tm9kZUhhbmRsZSYsIFJlZjxTZWxlY3RPcHRpb25F
bGVtZW50Q2FsbGJhY2s+JiYpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5n
T3I8Ym9vbD4gaXNTaG93aW5nSmF2YVNjcmlwdERpYWxvZyhjb25zdCBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRIYW5kbGUmKTsKKyAgICBJbnNwZWN0b3I6
OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGRpc21pc3NDdXJyZW50SmF2YVNjcmlwdERp
YWxvZyhjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRl
eHRIYW5kbGUmKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+
IGFjY2VwdEN1cnJlbnRKYXZhU2NyaXB0RGlhbG9nKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYpOworICAgIEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkVycm9yU3RyaW5nT3I8U3RyaW5nPiBtZXNzYWdlT2ZDdXJyZW50SmF2YVNjcmlwdERp
YWxvZyhjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRl
eHRIYW5kbGUmKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+
IHNldFVzZXJJbnB1dEZvckN1cnJlbnRKYXZhU2NyaXB0UHJvbXB0KGNvbnN0IEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYsIGNvbnN0IFN0cmlu
ZyYgdGV4dCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBz
ZXRGaWxlc1RvU2VsZWN0Rm9yRmlsZVVwbG9hZChjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpB
dXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRIYW5kbGUmLCBSZWY8SlNPTjo6QXJyYXk+JiYgZmls
ZW5hbWVzLCBSZWZQdHI8SlNPTjo6QXJyYXk+JiYgZmlsZUNvbnRlbnRzKTsKKyAgICB2b2lkIHNl
dEZpbGVzRm9ySW5wdXRGaWxlVXBsb2FkKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9t
YXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkF1dG9tYXRpb246OkZyYW1lSGFuZGxlJiwgY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0
b21hdGlvbjo6Tm9kZUhhbmRsZSYsIFJlZjxKU09OOjpBcnJheT4mJiBmaWxlbmFtZXMsIFJlZjxT
ZXRGaWxlc0ZvcklucHV0RmlsZVVwbG9hZENhbGxiYWNrPiYmKTsKKyAgICB2b2lkIGdldEFsbENv
b2tpZXMoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250
ZXh0SGFuZGxlJiwgUmVmPEdldEFsbENvb2tpZXNDYWxsYmFjaz4mJik7CisgICAgdm9pZCBkZWxl
dGVTaW5nbGVDb29raWUoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJv
d3NpbmdDb250ZXh0SGFuZGxlJiwgY29uc3QgU3RyaW5nJiBjb29raWVOYW1lLCBSZWY8RGVsZXRl
U2luZ2xlQ29va2llQ2FsbGJhY2s+JiYpOworICAgIHZvaWQgYWRkU2luZ2xlQ29va2llKGNvbnN0
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYs
IFJlZjxKU09OOjpPYmplY3Q+JiYgY29va2llLCBSZWY8QWRkU2luZ2xlQ29va2llQ2FsbGJhY2s+
JiYpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZGVsZXRl
QWxsQ29va2llcyhjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2lu
Z0NvbnRleHRIYW5kbGUmKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09y
PFJlZjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OlNlc3Np
b25QZXJtaXNzaW9uRGF0YT4+PiBnZXRTZXNzaW9uUGVybWlzc2lvbnMoKTsKKyAgICBJbnNwZWN0
b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHNldFNlc3Npb25QZXJtaXNzaW9ucyhS
ZWY8SlNPTjo6QXJyYXk+JiYpOwogCiAjaWYgUExBVEZPUk0oTUFDKQotICAgIHZvaWQgaW5zcGVj
dEJyb3dzaW5nQ29udGV4dChjb25zdCBTdHJpbmcmLCBjb25zdCBib29sKiBvcHRpb25hbEVuYWJs
ZUF1dG9DYXB0dXJpbmcsIFJlZjxJbnNwZWN0QnJvd3NpbmdDb250ZXh0Q2FsbGJhY2s+JiYpIG92
ZXJyaWRlOworICAgIHZvaWQgaW5zcGVjdEJyb3dzaW5nQ29udGV4dChjb25zdCBJbnNwZWN0b3I6
OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRIYW5kbGUmLCBPcHRpb25hbDxi
b29sPiYmIGVuYWJsZUF1dG9DYXB0dXJpbmcsIFJlZjxJbnNwZWN0QnJvd3NpbmdDb250ZXh0Q2Fs
bGJhY2s+JiYpOwogI2VuZGlmCiAKICAgICAvLyBFdmVudCBTaW11bGF0aW9uIFN1cHBvcnQuCkBA
IC0yMzgsNyArMjM4LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGhpZGVXaW5kb3dGb3JQYWdlKFdl
YlBhZ2VQcm94eSYsIFdURjo6Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKIAogICAgIC8v
IElQQzo6TWVzc2FnZVJlY2VpdmVyIChJbXBsZW1lbnRlZCBieSBnZW5lcmF0ZWQgY29kZSBpbiBX
ZWJBdXRvbWF0aW9uU2Vzc2lvbk1lc3NhZ2VSZWNlaXZlci5jcHApLgotICAgIHZvaWQgZGlkUmVj
ZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgb3ZlcnJpZGU7Cisg
ICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXIm
KTsKIAogICAgIC8vIENhbGxlZCBieSBXZWJBdXRvbWF0aW9uU2Vzc2lvbiBtZXNzYWdlcy4KICAg
ICB2b2lkIGRpZEV2YWx1YXRlSmF2YVNjcmlwdEZ1bmN0aW9uKHVpbnQ2NF90IGNhbGxiYWNrSUQs
IGNvbnN0IFN0cmluZyYgcmVzdWx0LCBjb25zdCBTdHJpbmcmIGVycm9yVHlwZSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNz
aW9uTWFjcm9zLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9t
YXRpb25TZXNzaW9uTWFjcm9zLmgKaW5kZXggOTNhZjVhYmM3MDhiZDU5OGYwZjQwYmNjMjk0ODUy
YTM3MDUyOTdhZS4uNGQzNmQ2NGZkNDBmNDNmM2U3ODFkNWU1OTVhM2JlODRjY2VlZDY1MyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9u
U2Vzc2lvbk1hY3Jvcy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24v
V2ViQXV0b21hdGlvblNlc3Npb25NYWNyb3MuaApAQCAtNDQsMTQgKzQ0LDEyIEBACiAvLyBDb252
ZW5pZW5jZSBtYWNyb3MgZm9yIGZpbGxpbmcgaW4gdGhlIGVycm9yIHN0cmluZyBvZiBzeW5jaHJv
bm91cyBjb21tYW5kcyBpbiBiYWlsb3V0IGJyYW5jaGVzLgogI2RlZmluZSBTWU5DX0ZBSUxfV0lU
SF9QUkVERUZJTkVEX0VSUk9SKGVycm9yTmFtZSkgXAogZG8geyBcCi0gICAgZXJyb3JTdHJpbmcg
PSBTVFJJTkdfRk9SX1BSRURFRklORURfRVJST1JfTkFNRShlcnJvck5hbWUpOyBcCi0gICAgcmV0
dXJuOyBcCisgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKFNUUklOR19GT1JfUFJFREVGSU5FRF9F
UlJPUl9OQU1FKGVycm9yTmFtZSkpOyBcCiB9IHdoaWxlIChmYWxzZSkKIAogI2RlZmluZSBTWU5D
X0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxTKGVycm9yTmFtZSwgZGV0YWls
c1N0cmluZykgXAogZG8geyBcCi0gICAgZXJyb3JTdHJpbmcgPSBTVFJJTkdfRk9SX1BSRURFRklO
RURfRVJST1JfTkFNRV9BTkRfREVUQUlMUyhlcnJvck5hbWUsIGRldGFpbHNTdHJpbmcpOyBcCi0g
ICAgcmV0dXJuOyBcCisgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKFNUUklOR19GT1JfUFJFREVG
SU5FRF9FUlJPUl9OQU1FX0FORF9ERVRBSUxTKGVycm9yTmFtZSwgZGV0YWlsc1N0cmluZykpOyBc
CiB9IHdoaWxlIChmYWxzZSkKIAogI2RlZmluZSBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9F
UlJPUihlcnJvck5hbWUpIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1
dG9tYXRpb24vbWFjL1dlYkF1dG9tYXRpb25TZXNzaW9uTWFjLm1tIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQXV0b21hdGlvbi9tYWMvV2ViQXV0b21hdGlvblNlc3Npb25NYWMubW0KaW5kZXgg
M2NhZWNjMzM3ZDA5OTc5NTM0ZTdmY2JmNWUxZTEwYmQ4MzVmNzZjZC4uOWRiZjJlMDc4N2FhOTk3
MDZjNmYyOTA3NTRhOTEzOTBhYmYxZjcwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQXV0b21hdGlvbi9tYWMvV2ViQXV0b21hdGlvblNlc3Npb25NYWMubW0KKysrIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9tYWMvV2ViQXV0b21hdGlvblNlc3Npb25N
YWMubW0KQEAgLTQ0LDcgKzQ0LDcgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKICNwcmFn
bWEgbWFyayBDb21tYW5kcyBmb3IgJ1BMQVRGT1JNKE1BQyknCiAKLXZvaWQgV2ViQXV0b21hdGlv
blNlc3Npb246Omluc3BlY3RCcm93c2luZ0NvbnRleHQoY29uc3QgU3RyaW5nJiBoYW5kbGUsIGNv
bnN0IGJvb2wqIG9wdGlvbmFsRW5hYmxlQXV0b0NhcHR1cmluZywgUmVmPEluc3BlY3RCcm93c2lu
Z0NvbnRleHRDYWxsYmFjaz4mJiBjYWxsYmFjaykKK3ZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246
Omluc3BlY3RCcm93c2luZ0NvbnRleHQoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21h
dGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJiBoYW5kbGUsIE9wdGlvbmFsPGJvb2w+JiYgZW5h
YmxlQXV0b0NhcHR1cmluZywgUmVmPEluc3BlY3RCcm93c2luZ0NvbnRleHRDYWxsYmFjaz4mJiBj
YWxsYmFjaykKIHsKICAgICBXZWJQYWdlUHJveHkqIHBhZ2UgPSB3ZWJQYWdlUHJveHlGb3JIYW5k
bGUoaGFuZGxlKTsKICAgICBpZiAoIXBhZ2UpCkBAIC02MCw3ICs2MCw3IEBAIHZvaWQgV2ViQXV0
b21hdGlvblNlc3Npb246Omluc3BlY3RCcm93c2luZ0NvbnRleHQoY29uc3QgU3RyaW5nJiBoYW5k
bGUsIGNvbnN0IGJvCiAgICAgICAgIHBhZ2UtPmluc3BlY3RvcigpLT5zaG93KCk7CiAKICAgICAg
ICAgLy8gU3RhcnQgY29sbGVjdGluZyBwcm9maWxlIGluZm9ybWF0aW9uIGltbWVkaWF0ZWx5IHNv
IHRoZSBlbnRpcmUgc2Vzc2lvbiBpcyBjYXB0dXJlZC4KLSAgICAgICAgaWYgKG9wdGlvbmFsRW5h
YmxlQXV0b0NhcHR1cmluZyAmJiAqb3B0aW9uYWxFbmFibGVBdXRvQ2FwdHVyaW5nKQorICAgICAg
ICBpZiAoZW5hYmxlQXV0b0NhcHR1cmluZyAmJiAqZW5hYmxlQXV0b0NhcHR1cmluZykKICAgICAg
ICAgICAgIHBhZ2UtPmluc3BlY3RvcigpLT50b2dnbGVQYWdlUHJvZmlsaW5nKCk7CiAgICAgfQog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL0FnZW50cy9J
bnNwZWN0b3JCcm93c2VyQWdlbnQuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVj
dG9yL0FnZW50cy9JbnNwZWN0b3JCcm93c2VyQWdlbnQuY3BwCmluZGV4IGMxZmZhNmNmNjE0NjY2
ZTRjOGI1ZWM1YjQzY2M2NGY4MDcwZTY1OTkuLmRmNGExMGE0MGY4YjAyZmM1ZDc1MDllOTZjNTk0
ZWJiYzVhYzlmMTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rv
ci9BZ2VudHMvSW5zcGVjdG9yQnJvd3NlckFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9JbnNwZWN0b3IvQWdlbnRzL0luc3BlY3RvckJyb3dzZXJBZ2VudC5jcHAKQEAgLTYw
LDM1ICs2MCwzNCBAQCB2b2lkIEluc3BlY3RvckJyb3dzZXJBZ2VudDo6ZGlkQ3JlYXRlRnJvbnRl
bmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRSb3V0ZQogCiB2b2lkIEluc3BlY3RvckJy
b3dzZXJBZ2VudDo6d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNj
b25uZWN0UmVhc29uKQogewotICAgIEVycm9yU3RyaW5nIGlnbm9yZWQ7Ci0gICAgZGlzYWJsZShp
Z25vcmVkKTsKKyAgICBkaXNhYmxlKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQnJvd3NlckFnZW50
OjplbmFibGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nKQorSW5zcGVjdG9yOjpQcm90b2NvbDo6
RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JCcm93c2VyQWdlbnQ6OmVuYWJsZSgpCiB7Ci0g
ICAgaWYgKGVuYWJsZWQoKSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJCcm93c2VyIGRvbWFp
biBhbHJlYWR5IGVuYWJsZWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKGVu
YWJsZWQoKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJCcm93c2VyIGRvbWFpbiBh
bHJlYWR5IGVuYWJsZWQiX3MpOwogCiAgICAgbV9pbnNwZWN0ZWRQYWdlLmluc3BlY3RvckNvbnRy
b2xsZXIoKS5zZXRFbmFibGVkQnJvd3NlckFnZW50KHRoaXMpOwogCiAgICAgYXV0byogaW5zcGVj
dG9yID0gbV9pbnNwZWN0ZWRQYWdlLmluc3BlY3RvcigpOwogICAgIEFTU0VSVChpbnNwZWN0b3Ip
OwogICAgIG1faW5zcGVjdGVkUGFnZS5pbnNwZWN0b3JDbGllbnQoKS5icm93c2VyRG9tYWluRW5h
YmxlZChtX2luc3BlY3RlZFBhZ2UsICppbnNwZWN0b3IpOworCisgICAgcmV0dXJuIHsgfTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JCcm93c2VyQWdlbnQ6OmRpc2FibGUoRXJyb3JTdHJpbmcmIGVycm9y
U3RyaW5nKQorSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0
b3JCcm93c2VyQWdlbnQ6OmRpc2FibGUoKQogewotICAgIGlmICghZW5hYmxlZCgpKSB7Ci0gICAg
ICAgIGVycm9yU3RyaW5nID0gIkJyb3dzZXIgZG9tYWluIGFscmVhZHkgZGlzYWJsZWQiX3M7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKCFlbmFibGVkKCkpCisgICAgICAgIHJldHVy
biBtYWtlVW5leHBlY3RlZCgiQnJvd3NlciBkb21haW4gYWxyZWFkeSBkaXNhYmxlZCJfcyk7CiAK
ICAgICBtX2luc3BlY3RlZFBhZ2UuaW5zcGVjdG9yQ29udHJvbGxlcigpLnNldEVuYWJsZWRCcm93
c2VyQWdlbnQobnVsbHB0cik7CiAKICAgICBpZiAoYXV0byogaW5zcGVjdG9yID0gbV9pbnNwZWN0
ZWRQYWdlLmluc3BlY3RvcigpKQogICAgICAgICBtX2luc3BlY3RlZFBhZ2UuaW5zcGVjdG9yQ2xp
ZW50KCkuYnJvd3NlckRvbWFpbkRpc2FibGVkKG1faW5zcGVjdGVkUGFnZSwgKmluc3BlY3Rvcik7
CisKKyAgICByZXR1cm4geyB9OwogfQogCiB2b2lkIEluc3BlY3RvckJyb3dzZXJBZ2VudDo6ZXh0
ZW5zaW9uc0VuYWJsZWQoSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mJiBleHRlbnNpb25JRFRvTmFt
ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9BZ2VudHMv
SW5zcGVjdG9yQnJvd3NlckFnZW50LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0
b3IvQWdlbnRzL0luc3BlY3RvckJyb3dzZXJBZ2VudC5oCmluZGV4IGExMzk1ODNjZDhkODQyMzI5
ZjRiM2YzNTIxYjM2MjQwZWFiNTM5MTEuLjMzMWJmYWJiNTU3NDRlZTk4YTdmZjBmN2RhNzY5NTMx
YWM0YzcyNzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9B
Z2VudHMvSW5zcGVjdG9yQnJvd3NlckFnZW50LmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvSW5zcGVjdG9yL0FnZW50cy9JbnNwZWN0b3JCcm93c2VyQWdlbnQuaApAQCAtMzMsMjMgKzMz
LDIyIEBACiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgV2ViUGFnZVByb3h5OwotdHlwZWRl
ZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiAKIGNsYXNzIEluc3BlY3RvckJyb3dzZXJBZ2VudCBmaW5h
bCA6IHB1YmxpYyBJbnNwZWN0b3JBZ2VudEJhc2UsIHB1YmxpYyBJbnNwZWN0b3I6OkJyb3dzZXJC
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEluc3Bl
Y3RvckJyb3dzZXJBZ2VudCk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6
CiAgICAgSW5zcGVjdG9yQnJvd3NlckFnZW50KFdlYlBhZ2VBZ2VudENvbnRleHQmKTsKLSAgICB+
SW5zcGVjdG9yQnJvd3NlckFnZW50KCkgb3ZlcnJpZGU7CisgICAgfkluc3BlY3RvckJyb3dzZXJB
Z2VudCgpOwogICAgIGJvb2wgZW5hYmxlZCgpIGNvbnN0OwogCiAgICAgLy8gSW5zcGVjdG9yQWdl
bnRCYXNlCi0gICAgdm9pZCBkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpG
cm9udGVuZFJvdXRlciosIEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXIqKSBvdmVycmlkZTsK
LSAgICB2b2lkIHdpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlzY29u
bmVjdFJlYXNvbikgb3ZlcnJpZGU7CisgICAgdm9pZCBkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tl
bmQoSW5zcGVjdG9yOjpGcm9udGVuZFJvdXRlciosIEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNo
ZXIqKTsKKyAgICB2b2lkIHdpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6
RGlzY29ubmVjdFJlYXNvbik7CiAKICAgICAvLyBCcm93c2VyQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyCi0gICAgdm9pZCBlbmFibGUoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2b2lkIGRp
c2FibGUoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpF
cnJvclN0cmluZ09yPHZvaWQ+IGVuYWJsZSgpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8dm9pZD4gZGlzYWJsZSgpOwogCiAgICAgdm9pZCBleHRlbnNpb25zRW5hYmxl
ZChIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYmKTsKICAgICB2b2lkIGV4dGVuc2lvbnNEaXNhYmxl
ZChIYXNoU2V0PFN0cmluZz4mJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9JbnNwZWN0b3Ivc29ja2V0L1JlbW90ZUluc3BlY3RvckNsaWVudC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3Ivc29ja2V0L1JlbW90ZUluc3BlY3RvckNsaWVudC5jcHAK
aW5kZXggZmJlZTVjZGZmMzhiM2M3NzlhMjYyNzM4YzQxOTUxNWI0NDU4YjlkZC4uNWY1MTdmMTBh
NDg3NzBkOWNiODljZjg4ZjlkNjAzNzhiYmQ1MmFkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvSW5zcGVjdG9yL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JDbGllbnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9zb2NrZXQvUmVtb3RlSW5zcGVj
dG9yQ2xpZW50LmNwcApAQCAtMjA2LDI1ICsyMDYsMzggQEAgdm9pZCBSZW1vdGVJbnNwZWN0b3JD
bGllbnQ6OnNldFRhcmdldExpc3QoY29uc3QgRXZlbnQmIGV2ZW50KQogICAgIGlmICghZXZlbnQu
Y29ubmVjdGlvbklEIHx8ICFldmVudC5tZXNzYWdlKQogICAgICAgICByZXR1cm47CiAKLSAgICBS
ZWZQdHI8SlNPTjo6VmFsdWU+IG1lc3NhZ2VWYWx1ZTsKLSAgICBpZiAoIUpTT046OlZhbHVlOjpw
YXJzZUpTT04oZXZlbnQubWVzc2FnZS52YWx1ZSgpLCBtZXNzYWdlVmFsdWUpKQorICAgIGF1dG8g
bWVzc2FnZVZhbHVlID0gSlNPTjo6VmFsdWU6OnBhcnNlSlNPTihldmVudC5tZXNzYWdlLnZhbHVl
KCkpOworICAgIGlmICghbWVzc2FnZVZhbHVlKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZWZQ
dHI8SlNPTjo6QXJyYXk+IG1lc3NhZ2VBcnJheTsKLSAgICBpZiAoIW1lc3NhZ2VWYWx1ZS0+YXNB
cnJheShtZXNzYWdlQXJyYXkpKQorICAgIGF1dG8gbWVzc2FnZUFycmF5ID0gbWVzc2FnZVZhbHVl
LT5hc0FycmF5KCk7CisgICAgaWYgKCFtZXNzYWdlQXJyYXkpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIFZlY3RvcjxUYXJnZXQ+IHRhcmdldExpc3Q7CiAgICAgZm9yIChhdXRvJiBpdGVtVmFsdWUg
OiAqbWVzc2FnZUFycmF5KSB7Ci0gICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IGl0ZW1PYmpl
Y3Q7Ci0gICAgICAgIGlmICghaXRlbVZhbHVlLT5hc09iamVjdChpdGVtT2JqZWN0KSkKKyAgICAg
ICAgYXV0byBpdGVtT2JqZWN0ID0gaXRlbVZhbHVlLT5hc09iamVjdCgpOworICAgICAgICBpZiAo
IWl0ZW1PYmplY3QpCiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBUYXJnZXQgdGFy
Z2V0OwotICAgICAgICBpZiAoIWl0ZW1PYmplY3QtPmdldEludGVnZXIoInRhcmdldElEIl9zLCB0
YXJnZXQuaWQpCi0gICAgICAgICAgICB8fCAhaXRlbU9iamVjdC0+Z2V0U3RyaW5nKCJuYW1lIl9z
LCB0YXJnZXQubmFtZSkKLSAgICAgICAgICAgIHx8ICFpdGVtT2JqZWN0LT5nZXRTdHJpbmcoInVy
bCJfcywgdGFyZ2V0LnVybCkKLSAgICAgICAgICAgIHx8ICFpdGVtT2JqZWN0LT5nZXRTdHJpbmco
InR5cGUiX3MsIHRhcmdldC50eXBlKSkKKworICAgICAgICBhdXRvIHRhcmdldElEID0gaXRlbU9i
amVjdC0+Z2V0SW50ZWdlcigidGFyZ2V0SUQiX3MpOworICAgICAgICBpZiAoIXRhcmdldElEKQor
ICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgdGFyZ2V0LnRhcmdldElEID0gKnRhcmdl
dElEOworCisgICAgICAgIHRhcmdldC5uYW1lID0gaXRlbU9iamVjdC0+Z2V0U3RyaW5nKCJuYW1l
Il9zKTsKKyAgICAgICAgaWYgKCF0YXJnZXQubmFtZSkKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
CisgICAgICAgIHRhcmdldC51cmwgPSBpdGVtT2JqZWN0LT5nZXRTdHJpbmcoInVybCJfcyk7Cisg
ICAgICAgIGlmICghdGFyZ2V0LnVybCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAg
IHRhcmdldC50eXBlID0gaXRlbU9iamVjdC0+Z2V0U3RyaW5nKCJ0eXBlIl9zKTsKKyAgICAgICAg
aWYgKCF0YXJnZXQudHlwZSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIHRhcmdl
dExpc3QuYXBwZW5kKFdURk1vdmUodGFyZ2V0KSk7CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VM
b2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZTg4Yjk4MWM4N2M5YmEyYTFiODg0MmQ4NjkzMmE3
YjZlM2VhNTJlMi4uNmU3ODkxMzc4N2RlOTRlZmNlZDYxNWU1MTRjNzA5ZTc1N2I0OTE2OCAxMDA2
NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDEzIEBACisyMDIwLTA5LTA4ICBEZXZpbiBSb3Vzc28gIDxkcm91c3NvQGFwcGxlLmNvbT4KKwor
ICAgICAgICBXZWIgSW5zcGVjdG9yOiBtb2Rlcm5pemUgZ2VuZXJhdGVkIGJhY2tlbmQgcHJvdG9j
b2wgY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjE2MzAyCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS82ODU0NzY0OT4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMv
V1RGL0pTT05WYWx1ZS5jcHA6CisKIDIwMjAtMDktMDQgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hy
aXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBNb3ZlIFBERiBoZWFkcy11cCBkaXNwbGF5
IHRvIFVJIHByb2Nlc3Mgb24gbWFjT1MKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV1RGL0pTT05WYWx1ZS5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9K
U09OVmFsdWUuY3BwCmluZGV4IDkxZWM0MWMzYjdkNDE2MmQyM2VjNDVlNGRiMzYzN2E5M2NkY2Ji
NDUuLmMzODA2Mjc2NDRkZjY5MTY2NDAxNmZkYzZjMTE0OTA4ZmE4ZjgyMTUgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0pTT05WYWx1ZS5jcHAKKysrIGIvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvSlNPTlZhbHVlLmNwcApAQCAtNDIsODIgKzQyLDY4IEBA
IFRFU1QoSlNPTlZhbHVlLCBDb25zdHJ1Y3QpCiAgICAgewogICAgICAgICBSZWY8SlNPTjo6VmFs
dWU+IHZhbHVlID0gSlNPTjo6VmFsdWU6OmNyZWF0ZSh0cnVlKTsKICAgICAgICAgRVhQRUNUX1RS
VUUodmFsdWUtPnR5cGUoKSA9PSBKU09OOjpWYWx1ZTo6VHlwZTo6Qm9vbGVhbik7Ci0gICAgICAg
IGJvb2wgYm9vbGVhblZhbHVlOwotICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+YXNCb29sZWFu
KGJvb2xlYW5WYWx1ZSkpOwotICAgICAgICBFWFBFQ1RfRVEoYm9vbGVhblZhbHVlLCB0cnVlKTsK
KyAgICAgICAgYXV0byBib29sZWFuVmFsdWUgPSB2YWx1ZS0+YXNCb29sZWFuKCk7CisgICAgICAg
IEVYUEVDVF9UUlVFKGJvb2xlYW5WYWx1ZSk7CisgICAgICAgIEVYUEVDVF9FUSgqYm9vbGVhblZh
bHVlLCB0cnVlKTsKIAogICAgICAgICB2YWx1ZSA9IEpTT046OlZhbHVlOjpjcmVhdGUoZmFsc2Up
OwogICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+dHlwZSgpID09IEpTT046OlZhbHVlOjpUeXBl
OjpCb29sZWFuKTsKLSAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUtPmFzQm9vbGVhbihib29sZWFu
VmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX0VRKGJvb2xlYW5WYWx1ZSwgZmFsc2UpOworICAgICAg
ICBib29sZWFuVmFsdWUgPSB2YWx1ZS0+YXNCb29sZWFuKCk7CisgICAgICAgIEVYUEVDVF9UUlVF
KGJvb2xlYW5WYWx1ZSk7CisgICAgICAgIEVYUEVDVF9FUSgqYm9vbGVhblZhbHVlLCBmYWxzZSk7
CiAgICAgfQogCiAgICAgewogICAgICAgICBSZWY8SlNPTjo6VmFsdWU+IHZhbHVlID0gSlNPTjo6
VmFsdWU6OmNyZWF0ZSgxKTsKICAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUtPnR5cGUoKSA9PSBK
U09OOjpWYWx1ZTo6VHlwZTo6SW50ZWdlcik7Ci0gICAgICAgIGludCBpbnRlZ2VyVmFsdWU7Ci0g
ICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlLT5hc0ludGVnZXIoaW50ZWdlclZhbHVlKSk7Ci0gICAg
ICAgIEVYUEVDVF9FUShpbnRlZ2VyVmFsdWUsIDEpOworICAgICAgICBhdXRvIGludGVnZXJWYWx1
ZSA9IHZhbHVlLT5hc0ludGVnZXIoKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoaW50ZWdlclZhbHVl
KTsKKyAgICAgICAgRVhQRUNUX0VRKCppbnRlZ2VyVmFsdWUsIDEpOwogCi0gICAgICAgIC8vIERv
dWJsZXMgY2FuIGJlIGdldCBhcyBpbnRlZ2VycywgYnV0IG5vdCB0aGUgb3RoZXIgd2F5IGFyb3Vu
ZC4KLSAgICAgICAgZmxvYXQgZmxvYXRWYWx1ZTsKLSAgICAgICAgRVhQRUNUX0ZBTFNFKHZhbHVl
LT5hc0RvdWJsZShmbG9hdFZhbHVlKSk7CisgICAgICAgIC8vIEludGVnZXJzIGNhbiBiZSBnZXQg
YXMgZG91Ymxlcy4KKyAgICAgICAgYXV0byBkb3VibGVWYWx1ZSA9IHZhbHVlLT5hc0RvdWJsZSgp
OworICAgICAgICBFWFBFQ1RfVFJVRShkb3VibGVWYWx1ZSk7CisgICAgICAgIEVYUEVDVF9FUSgq
ZG91YmxlVmFsdWUsIDEpOwogCiAgICAgICAgIHZhbHVlID0gSlNPTjo6VmFsdWU6OmNyZWF0ZShz
dGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpKTsKLSAgICAgICAgRVhQRUNUX1RSVUUodmFs
dWUtPmFzSW50ZWdlcihpbnRlZ2VyVmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX0VRKGludGVnZXJW
YWx1ZSwgc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSk7Ci0gICAgICAgIHVuc2lnbmVk
IHVuc2lnbmVkVmFsdWU7Ci0gICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlLT5hc0ludGVnZXIodW5z
aWduZWRWYWx1ZSkpOwotICAgICAgICBsb25nIGxvbmdWYWx1ZTsKLSAgICAgICAgRVhQRUNUX1RS
VUUodmFsdWUtPmFzSW50ZWdlcihsb25nVmFsdWUpKTsKLSAgICAgICAgbG9uZyBsb25nIGxvbmdM
b25nVmFsdWU7Ci0gICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlLT5hc0ludGVnZXIobG9uZ0xvbmdW
YWx1ZSkpOwotICAgICAgICB1bnNpZ25lZCBsb25nIHVuc2lnbmVkTG9uZ1ZhbHVlOwotICAgICAg
ICBFWFBFQ1RfVFJVRSh2YWx1ZS0+YXNJbnRlZ2VyKHVuc2lnbmVkTG9uZ1ZhbHVlKSk7Ci0gICAg
ICAgIHVuc2lnbmVkIGxvbmcgbG9uZyB1bnNpZ25lZExvbmdMb25nVmFsdWU7Ci0gICAgICAgIEVY
UEVDVF9UUlVFKHZhbHVlLT5hc0ludGVnZXIodW5zaWduZWRMb25nTG9uZ1ZhbHVlKSk7CisgICAg
ICAgIGludGVnZXJWYWx1ZSA9IHZhbHVlLT5hc0ludGVnZXIoKTsKKyAgICAgICAgRVhQRUNUX1RS
VUUoaW50ZWdlclZhbHVlKTsKKyAgICAgICAgRVhQRUNUX0VRKCppbnRlZ2VyVmFsdWUsIHN0ZDo6
bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpOwogICAgIH0KIAogICAgIHsKICAgICAgICAgUmVm
PEpTT046OlZhbHVlPiB2YWx1ZSA9IEpTT046OlZhbHVlOjpjcmVhdGUoMS41KTsKICAgICAgICAg
RVhQRUNUX1RSVUUodmFsdWUtPnR5cGUoKSA9PSBKU09OOjpWYWx1ZTo6VHlwZTo6RG91YmxlKTsK
LSAgICAgICAgZG91YmxlIGRvdWJsZVZhbHVlOwotICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+
YXNEb3VibGUoZG91YmxlVmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX0VRKGRvdWJsZVZhbHVlLCAx
LjUpOwogCi0gICAgICAgIGZsb2F0IGZsb2F0VmFsdWU7Ci0gICAgICAgIEVYUEVDVF9UUlVFKHZh
bHVlLT5hc0RvdWJsZShmbG9hdFZhbHVlKSk7CisgICAgICAgIGF1dG8gZG91YmxlVmFsdWUgPSB2
YWx1ZS0+YXNEb3VibGUoKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoZG91YmxlVmFsdWUpOworICAg
ICAgICBFWFBFQ1RfRVEoKmRvdWJsZVZhbHVlLCAxLjUpOwogCi0gICAgICAgIGludCBpbnRlZ2Vy
VmFsdWU7Ci0gICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlLT5hc0ludGVnZXIoaW50ZWdlclZhbHVl
KSk7Ci0gICAgICAgIEVYUEVDVF9FUShpbnRlZ2VyVmFsdWUsIHN0YXRpY19jYXN0PGludD4oMS41
KSk7Ci0KLSAgICAgICAgdW5zaWduZWQgdW5zaWduZWRWYWx1ZTsKLSAgICAgICAgRVhQRUNUX1RS
VUUodmFsdWUtPmFzSW50ZWdlcih1bnNpZ25lZFZhbHVlKSk7Ci0gICAgICAgIGxvbmcgbG9uZ1Zh
bHVlOwotICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+YXNJbnRlZ2VyKGxvbmdWYWx1ZSkpOwot
ICAgICAgICBsb25nIGxvbmcgbG9uZ0xvbmdWYWx1ZTsKLSAgICAgICAgRVhQRUNUX1RSVUUodmFs
dWUtPmFzSW50ZWdlcihsb25nTG9uZ1ZhbHVlKSk7Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcgdW5z
aWduZWRMb25nVmFsdWU7Ci0gICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlLT5hc0ludGVnZXIodW5z
aWduZWRMb25nVmFsdWUpKTsKLSAgICAgICAgdW5zaWduZWQgbG9uZyBsb25nIHVuc2lnbmVkTG9u
Z0xvbmdWYWx1ZTsKLSAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUtPmFzSW50ZWdlcih1bnNpZ25l
ZExvbmdMb25nVmFsdWUpKTsKKyAgICAgICAgLy8gRG91YmxlcyBjYW4gYmUgZ2V0IGFzIGludGVn
ZXJzLgorICAgICAgICBhdXRvIGludGVnZXJWYWx1ZSA9IHZhbHVlLT5hc0ludGVnZXIoKTsKKyAg
ICAgICAgRVhQRUNUX1RSVUUoaW50ZWdlclZhbHVlKTsKKyAgICAgICAgRVhQRUNUX0VRKCppbnRl
Z2VyVmFsdWUsIHN0YXRpY19jYXN0PGludD4oMS41KSk7CiAgICAgfQogCiAgICAgewogICAgICAg
ICBSZWY8SlNPTjo6VmFsdWU+IHZhbHVlID0gSlNPTjo6VmFsdWU6OmNyZWF0ZSgid2Via2l0Iik7
CiAgICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlLT50eXBlKCkgPT0gSlNPTjo6VmFsdWU6OlR5cGU6
OlN0cmluZyk7Ci0gICAgICAgIFN0cmluZyBzdHJpbmdWYWx1ZTsKLSAgICAgICAgRVhQRUNUX1RS
VUUodmFsdWUtPmFzU3RyaW5nKHN0cmluZ1ZhbHVlKSk7CisgICAgICAgIGF1dG8gc3RyaW5nVmFs
dWUgPSB2YWx1ZS0+YXNTdHJpbmcoKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoISFzdHJpbmdWYWx1
ZSk7CiAgICAgICAgIEVYUEVDVF9FUShzdHJpbmdWYWx1ZSwgIndlYmtpdCIpOwogCiAgICAgICAg
IFN0cmluZyBudWxsU3RyaW5nOwogICAgICAgICB2YWx1ZSA9IEpTT046OlZhbHVlOjpjcmVhdGUo
bnVsbFN0cmluZyk7Ci0gICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlLT5hc1N0cmluZyhzdHJpbmdW
YWx1ZSkpOworICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+dHlwZSgpID09IEpTT046OlZhbHVl
OjpUeXBlOjpTdHJpbmcpOworICAgICAgICBzdHJpbmdWYWx1ZSA9IHZhbHVlLT5hc1N0cmluZygp
OworICAgICAgICBFWFBFQ1RfRkFMU0UoISFzdHJpbmdWYWx1ZSk7CiAgICAgICAgIEVYUEVDVF9U
UlVFKHN0cmluZ1ZhbHVlLmlzTnVsbCgpKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoc3RyaW5nVmFs
dWUuaXNFbXB0eSgpKTsKIAogICAgICAgICB2YWx1ZSA9IEpTT046OlZhbHVlOjpjcmVhdGUoZW1w
dHlTdHJpbmcoKSk7Ci0gICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlLT5hc1N0cmluZyhzdHJpbmdW
YWx1ZSkpOworICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+dHlwZSgpID09IEpTT046OlZhbHVl
OjpUeXBlOjpTdHJpbmcpOworICAgICAgICBzdHJpbmdWYWx1ZSA9IHZhbHVlLT5hc1N0cmluZygp
OworICAgICAgICBFWFBFQ1RfVFJVRSghIXN0cmluZ1ZhbHVlKTsKICAgICAgICAgRVhQRUNUX0ZB
TFNFKHN0cmluZ1ZhbHVlLmlzTnVsbCgpKTsKICAgICAgICAgRVhQRUNUX1RSVUUoc3RyaW5nVmFs
dWUuaXNFbXB0eSgpKTsKICAgICB9CkBAIC0xMzEsNyArMTE3LDcgQEAgVEVTVChKU09OVmFsdWUs
IENvbnN0cnVjdCkKICAgICB7CiAgICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IG9iamVjdCA9IEpT
T046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgIEVYUEVDVF9UUlVFKG9iamVjdC0+dHlwZSgp
ID09IEpTT046OlZhbHVlOjpUeXBlOjpPYmplY3QpOwotICAgICAgICBFWFBFQ1RfRVEob2JqZWN0
LT5zaXplKCksIDApOworICAgICAgICBFWFBFQ1RfRVEob2JqZWN0LT5zaXplKCksIDBVKTsKICAg
ICB9CiAKICAgICB7CkBAIC0xNTQsNDggKzE0MCw0OCBAQCBURVNUKEpTT05BcnJheSwgQmFzaWMp
CiAgICAgRVhQRUNUX0VRKGFycmF5LT5sZW5ndGgoKSwgMlUpOwogICAgIHZhbHVlID0gYXJyYXkt
PmdldCgxKTsKICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+dHlwZSgpID09IEpTT046OlZhbHVlOjpU
eXBlOjpCb29sZWFuKTsKLSAgICBib29sIGJvb2xlYW5WYWx1ZTsKLSAgICBFWFBFQ1RfVFJVRSh2
YWx1ZS0+YXNCb29sZWFuKGJvb2xlYW5WYWx1ZSkpOwotICAgIEVYUEVDVF9FUShib29sZWFuVmFs
dWUsIHRydWUpOworICAgIGF1dG8gYm9vbGVhblZhbHVlID0gdmFsdWUtPmFzQm9vbGVhbigpOwor
ICAgIEVYUEVDVF9UUlVFKGJvb2xlYW5WYWx1ZSk7CisgICAgRVhQRUNUX0VRKCpib29sZWFuVmFs
dWUsIHRydWUpOwogCiAgICAgYXJyYXktPnB1c2hJbnRlZ2VyKDEpOwogICAgIEVYUEVDVF9FUShh
cnJheS0+bGVuZ3RoKCksIDNVKTsKICAgICB2YWx1ZSA9IGFycmF5LT5nZXQoMik7CiAgICAgRVhQ
RUNUX1RSVUUodmFsdWUtPnR5cGUoKSA9PSBKU09OOjpWYWx1ZTo6VHlwZTo6SW50ZWdlcik7Ci0g
ICAgaW50IGludGVnZXJWYWx1ZTsKLSAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+YXNJbnRlZ2VyKGlu
dGVnZXJWYWx1ZSkpOwotICAgIEVYUEVDVF9FUShpbnRlZ2VyVmFsdWUsIDEpOworICAgIGF1dG8g
aW50ZWdlclZhbHVlID0gdmFsdWUtPmFzSW50ZWdlcigpOworICAgIEVYUEVDVF9UUlVFKGludGVn
ZXJWYWx1ZSk7CisgICAgRVhQRUNUX0VRKCppbnRlZ2VyVmFsdWUsIDEpOwogCiAgICAgYXJyYXkt
PnB1c2hEb3VibGUoMS41KTsKICAgICBFWFBFQ1RfRVEoYXJyYXktPmxlbmd0aCgpLCA0VSk7CiAg
ICAgdmFsdWUgPSBhcnJheS0+Z2V0KDMpOwogICAgIEVYUEVDVF9UUlVFKHZhbHVlLT50eXBlKCkg
PT0gSlNPTjo6VmFsdWU6OlR5cGU6OkRvdWJsZSk7Ci0gICAgZG91YmxlIGRvdWJsZVZhbHVlOwot
ICAgIEVYUEVDVF9UUlVFKHZhbHVlLT5hc0RvdWJsZShkb3VibGVWYWx1ZSkpOwotICAgIEVYUEVD
VF9FUShkb3VibGVWYWx1ZSwgMS41KTsKKyAgICBhdXRvIGRvdWJsZVZhbHVlID0gdmFsdWUtPmFz
RG91YmxlKCk7CisgICAgRVhQRUNUX1RSVUUoZG91YmxlVmFsdWUpOworICAgIEVYUEVDVF9FUSgq
ZG91YmxlVmFsdWUsIDEuNSk7CiAKICAgICBhcnJheS0+cHVzaFN0cmluZygid2Via2l0Iik7CiAg
ICAgRVhQRUNUX0VRKGFycmF5LT5sZW5ndGgoKSwgNVUpOwogICAgIHZhbHVlID0gYXJyYXktPmdl
dCg0KTsKICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+dHlwZSgpID09IEpTT046OlZhbHVlOjpUeXBl
OjpTdHJpbmcpOwotICAgIFN0cmluZyBzdHJpbmdWYWx1ZTsKLSAgICBFWFBFQ1RfVFJVRSh2YWx1
ZS0+YXNTdHJpbmcoc3RyaW5nVmFsdWUpKTsKKyAgICBhdXRvIHN0cmluZ1ZhbHVlID0gdmFsdWUt
PmFzU3RyaW5nKCk7CisgICAgRVhQRUNUX1RSVUUoISFzdHJpbmdWYWx1ZSk7CiAgICAgRVhQRUNU
X0VRKHN0cmluZ1ZhbHVlLCAid2Via2l0Iik7CiAKICAgICBhcnJheS0+cHVzaE9iamVjdChKU09O
OjpPYmplY3Q6OmNyZWF0ZSgpKTsKICAgICBFWFBFQ1RfRVEoYXJyYXktPmxlbmd0aCgpLCA2VSk7
CiAgICAgdmFsdWUgPSBhcnJheS0+Z2V0KDUpOwogICAgIEVYUEVDVF9UUlVFKHZhbHVlLT50eXBl
KCkgPT0gSlNPTjo6VmFsdWU6OlR5cGU6Ok9iamVjdCk7Ci0gICAgUmVmUHRyPEpTT046Ok9iamVj
dD4gb2JqZWN0VmFsdWU7Ci0gICAgRVhQRUNUX1RSVUUodmFsdWUtPmFzT2JqZWN0KG9iamVjdFZh
bHVlKSk7Ci0gICAgRVhQRUNUX0VRKG9iamVjdFZhbHVlLT5zaXplKCksIDApOworICAgIGF1dG8g
b2JqZWN0VmFsdWUgPSB2YWx1ZS0+YXNPYmplY3QoKTsKKyAgICBFWFBFQ1RfVFJVRShvYmplY3RW
YWx1ZSk7CisgICAgRVhQRUNUX0VRKG9iamVjdFZhbHVlLT5zaXplKCksIDBVKTsKIAogICAgIGFy
cmF5LT5wdXNoQXJyYXkoSlNPTjo6QXJyYXk6OmNyZWF0ZSgpKTsKICAgICBFWFBFQ1RfRVEoYXJy
YXktPmxlbmd0aCgpLCA3VSk7CiAgICAgdmFsdWUgPSBhcnJheS0+Z2V0KDYpOwogICAgIEVYUEVD
VF9UUlVFKHZhbHVlLT50eXBlKCkgPT0gSlNPTjo6VmFsdWU6OlR5cGU6OkFycmF5KTsKLSAgICBS
ZWZQdHI8SlNPTjo6QXJyYXk+IGFycmF5VmFsdWU7Ci0gICAgRVhQRUNUX1RSVUUodmFsdWUtPmFz
QXJyYXkoYXJyYXlWYWx1ZSkpOworICAgIGF1dG8gYXJyYXlWYWx1ZSA9IHZhbHVlLT5hc0FycmF5
KCk7CisgICAgRVhQRUNUX1RSVUUoYXJyYXlWYWx1ZSk7CiAgICAgRVhQRUNUX0VRKGFycmF5VmFs
dWUtPmxlbmd0aCgpLCAwVSk7CiAKICAgICBhdXRvIGl0ID0gYXJyYXktPmJlZ2luKCk7CkBAIC0y
NTEsNDAgKzIzNyw0MCBAQCBURVNUKEpTT05BcnJheU9mLCBCYXNpYykKICAgICBFWFBFQ1RfRVEo
YXJyYXktPmxlbmd0aCgpLCAyVSk7CiAgICAgdmFsdWUgPSBhcnJheS0+Z2V0KDEpOwogICAgIEVY
UEVDVF9UUlVFKHZhbHVlLT50eXBlKCkgPT0gSlNPTjo6VmFsdWU6OlR5cGU6OkludGVnZXIpOwot
ICAgIGludCBpbnRlZ2VyVmFsdWU7Ci0gICAgRVhQRUNUX1RSVUUodmFsdWUtPmFzSW50ZWdlcihp
bnRlZ2VyVmFsdWUpKTsKLSAgICBFWFBFQ1RfRVEoaW50ZWdlclZhbHVlLCAxKTsKKyAgICBhdXRv
IGludGVnZXJWYWx1ZSA9IHZhbHVlLT5hc0ludGVnZXIoKTsKKyAgICBFWFBFQ1RfVFJVRShpbnRl
Z2VyVmFsdWUpOworICAgIEVYUEVDVF9FUSgqaW50ZWdlclZhbHVlLCAxKTsKIAogICAgIGFycmF5
LT5hZGRJdGVtKDEuNSk7CiAgICAgRVhQRUNUX0VRKGFycmF5LT5sZW5ndGgoKSwgM1UpOwogICAg
IHZhbHVlID0gYXJyYXktPmdldCgyKTsKICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+dHlwZSgpID09
IEpTT046OlZhbHVlOjpUeXBlOjpEb3VibGUpOwotICAgIGRvdWJsZSBkb3VibGVWYWx1ZTsKLSAg
ICBFWFBFQ1RfVFJVRSh2YWx1ZS0+YXNEb3VibGUoZG91YmxlVmFsdWUpKTsKLSAgICBFWFBFQ1Rf
RVEoZG91YmxlVmFsdWUsIDEuNSk7CisgICAgYXV0byBkb3VibGVWYWx1ZSA9IHZhbHVlLT5hc0Rv
dWJsZSgpOworICAgIEVYUEVDVF9UUlVFKGRvdWJsZVZhbHVlKTsKKyAgICBFWFBFQ1RfRVEoKmRv
dWJsZVZhbHVlLCAxLjUpOwogCiAgICAgYXJyYXktPmFkZEl0ZW0oIndlYmtpdCIpOwogICAgIEVY
UEVDVF9FUShhcnJheS0+bGVuZ3RoKCksIDRVKTsKICAgICB2YWx1ZSA9IGFycmF5LT5nZXQoMyk7
CiAgICAgRVhQRUNUX1RSVUUodmFsdWUtPnR5cGUoKSA9PSBKU09OOjpWYWx1ZTo6VHlwZTo6U3Ry
aW5nKTsKLSAgICBTdHJpbmcgc3RyaW5nVmFsdWU7Ci0gICAgRVhQRUNUX1RSVUUodmFsdWUtPmFz
U3RyaW5nKHN0cmluZ1ZhbHVlKSk7CisgICAgYXV0byBzdHJpbmdWYWx1ZSA9IHZhbHVlLT5hc1N0
cmluZygpOworICAgIEVYUEVDVF9UUlVFKCEhc3RyaW5nVmFsdWUpOwogICAgIEVYUEVDVF9FUShz
dHJpbmdWYWx1ZSwgIndlYmtpdCIpOwogCiAgICAgYXJyYXktPmFkZEl0ZW0oSlNPTjo6T2JqZWN0
OjpjcmVhdGUoKSk7CiAgICAgRVhQRUNUX0VRKGFycmF5LT5sZW5ndGgoKSwgNVUpOwogICAgIHZh
bHVlID0gYXJyYXktPmdldCg0KTsKICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+dHlwZSgpID09IEpT
T046OlZhbHVlOjpUeXBlOjpPYmplY3QpOwotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG9iamVj
dFZhbHVlOwotICAgIEVYUEVDVF9UUlVFKHZhbHVlLT5hc09iamVjdChvYmplY3RWYWx1ZSkpOwot
ICAgIEVYUEVDVF9FUShvYmplY3RWYWx1ZS0+c2l6ZSgpLCAwKTsKKyAgICBhdXRvIG9iamVjdFZh
bHVlID0gdmFsdWUtPmFzT2JqZWN0KCk7CisgICAgRVhQRUNUX1RSVUUob2JqZWN0VmFsdWUpOwor
ICAgIEVYUEVDVF9FUShvYmplY3RWYWx1ZS0+c2l6ZSgpLCAwVSk7CiAKICAgICBhcnJheS0+YWRk
SXRlbShKU09OOjpBcnJheTo6Y3JlYXRlKCkpOwogICAgIEVYUEVDVF9FUShhcnJheS0+bGVuZ3Ro
KCksIDZVKTsKICAgICB2YWx1ZSA9IGFycmF5LT5nZXQoNSk7CiAgICAgRVhQRUNUX1RSVUUodmFs
dWUtPnR5cGUoKSA9PSBKU09OOjpWYWx1ZTo6VHlwZTo6QXJyYXkpOwotICAgIFJlZlB0cjxKU09O
OjpBcnJheT4gYXJyYXlWYWx1ZTsKLSAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+YXNBcnJheShhcnJh
eVZhbHVlKSk7CisgICAgYXV0byBhcnJheVZhbHVlID0gdmFsdWUtPmFzQXJyYXkoKTsKKyAgICBF
WFBFQ1RfVFJVRShhcnJheVZhbHVlKTsKICAgICBFWFBFQ1RfRVEoYXJyYXlWYWx1ZS0+bGVuZ3Ro
KCksIDBVKTsKIAogICAgIGF1dG8gaXQgPSBhcnJheS0+YmVnaW4oKTsKQEAgLTMyNCw0NSArMzEw
LDQ1IEBAIFRFU1QoSlNPTk9iamVjdCwgQmFzaWMpCiAgICAgUmVmPEpTT046Ok9iamVjdD4gb2Jq
ZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKIAogICAgIG9iamVjdC0+c2V0VmFsdWUoIm51
bGwiLCBKU09OOjpWYWx1ZTo6bnVsbCgpKTsKLSAgICBFWFBFQ1RfRVEob2JqZWN0LT5zaXplKCks
IDEpOwotICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gdmFsdWU7Ci0gICAgRVhQRUNUX1RSVUUob2Jq
ZWN0LT5nZXRWYWx1ZSgibnVsbCIsIHZhbHVlKSk7CisgICAgRVhQRUNUX0VRKG9iamVjdC0+c2l6
ZSgpLCAxVSk7CisgICAgYXV0byB2YWx1ZSA9IG9iamVjdC0+Z2V0VmFsdWUoIm51bGwiKTsKKyAg
ICBFWFBFQ1RfVFJVRSh2YWx1ZSk7CiAgICAgRVhQRUNUX1RSVUUodmFsdWUtPmlzTnVsbCgpKTsK
IAogICAgIG9iamVjdC0+c2V0Qm9vbGVhbigiYm9vbGVhbiIsIHRydWUpOwotICAgIEVYUEVDVF9F
UShvYmplY3QtPnNpemUoKSwgMik7Ci0gICAgYm9vbCBib29sZWFuVmFsdWU7Ci0gICAgRVhQRUNU
X1RSVUUob2JqZWN0LT5nZXRCb29sZWFuKCJib29sZWFuIiwgYm9vbGVhblZhbHVlKSk7Ci0gICAg
RVhQRUNUX0VRKGJvb2xlYW5WYWx1ZSwgdHJ1ZSk7CisgICAgRVhQRUNUX0VRKG9iamVjdC0+c2l6
ZSgpLCAyVSk7CisgICAgYXV0byBib29sZWFuVmFsdWUgPSBvYmplY3QtPmdldEJvb2xlYW4oImJv
b2xlYW4iKTsKKyAgICBFWFBFQ1RfVFJVRShib29sZWFuVmFsdWUpOworICAgIEVYUEVDVF9FUSgq
Ym9vbGVhblZhbHVlLCB0cnVlKTsKIAogICAgIG9iamVjdC0+c2V0SW50ZWdlcigiaW50ZWdlciIs
IDEpOwotICAgIEVYUEVDVF9FUShvYmplY3QtPnNpemUoKSwgMyk7Ci0gICAgaW50IGludGVnZXJW
YWx1ZTsKLSAgICBFWFBFQ1RfVFJVRShvYmplY3QtPmdldEludGVnZXIoImludGVnZXIiLCBpbnRl
Z2VyVmFsdWUpKTsKLSAgICBFWFBFQ1RfRVEoaW50ZWdlclZhbHVlLCAxKTsKKyAgICBFWFBFQ1Rf
RVEob2JqZWN0LT5zaXplKCksIDNVKTsKKyAgICBhdXRvIGludGVnZXJWYWx1ZSA9IG9iamVjdC0+
Z2V0SW50ZWdlcigiaW50ZWdlciIpOworICAgIEVYUEVDVF9UUlVFKGludGVnZXJWYWx1ZSk7Cisg
ICAgRVhQRUNUX0VRKCppbnRlZ2VyVmFsdWUsIDEpOwogCiAgICAgb2JqZWN0LT5zZXREb3VibGUo
ImRvdWJsZSIsIDEuNSk7Ci0gICAgRVhQRUNUX0VRKG9iamVjdC0+c2l6ZSgpLCA0KTsKLSAgICBk
b3VibGUgZG91YmxlVmFsdWU7Ci0gICAgRVhQRUNUX1RSVUUob2JqZWN0LT5nZXREb3VibGUoImRv
dWJsZSIsIGRvdWJsZVZhbHVlKSk7Ci0gICAgRVhQRUNUX0VRKGRvdWJsZVZhbHVlLCAxLjUpOwor
ICAgIEVYUEVDVF9FUShvYmplY3QtPnNpemUoKSwgNFUpOworICAgIGF1dG8gZG91YmxlVmFsdWUg
PSBvYmplY3QtPmdldERvdWJsZSgiZG91YmxlIik7CisgICAgRVhQRUNUX1RSVUUoZG91YmxlVmFs
dWUpOworICAgIEVYUEVDVF9FUSgqZG91YmxlVmFsdWUsIDEuNSk7CiAKICAgICBvYmplY3QtPnNl
dFN0cmluZygic3RyaW5nIiwgIndlYmtpdCIpOwotICAgIEVYUEVDVF9FUShvYmplY3QtPnNpemUo
KSwgNSk7Ci0gICAgU3RyaW5nIHN0cmluZ1ZhbHVlOwotICAgIEVYUEVDVF9UUlVFKG9iamVjdC0+
Z2V0U3RyaW5nKCJzdHJpbmciLCBzdHJpbmdWYWx1ZSkpOworICAgIEVYUEVDVF9FUShvYmplY3Qt
PnNpemUoKSwgNVUpOworICAgIGF1dG8gc3RyaW5nVmFsdWUgPSBvYmplY3QtPmdldFN0cmluZygi
c3RyaW5nIik7CisgICAgRVhQRUNUX1RSVUUoISFzdHJpbmdWYWx1ZSk7CiAgICAgRVhQRUNUX0VR
KHN0cmluZ1ZhbHVlLCAid2Via2l0Iik7CiAKICAgICBvYmplY3QtPnNldE9iamVjdCgib2JqZWN0
IiwgSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSk7Ci0gICAgRVhQRUNUX0VRKG9iamVjdC0+c2l6ZSgp
LCA2KTsKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBvYmplY3RWYWx1ZTsKLSAgICBFWFBFQ1Rf
VFJVRShvYmplY3QtPmdldE9iamVjdCgib2JqZWN0Iiwgb2JqZWN0VmFsdWUpKTsKLSAgICBFWFBF
Q1RfRVEob2JqZWN0VmFsdWUtPnNpemUoKSwgMCk7CisgICAgRVhQRUNUX0VRKG9iamVjdC0+c2l6
ZSgpLCA2VSk7CisgICAgYXV0byBvYmplY3RWYWx1ZSA9IG9iamVjdC0+Z2V0T2JqZWN0KCJvYmpl
Y3QiKTsKKyAgICBFWFBFQ1RfVFJVRShvYmplY3RWYWx1ZSk7CisgICAgRVhQRUNUX0VRKG9iamVj
dFZhbHVlLT5zaXplKCksIDBVKTsKIAogICAgIG9iamVjdC0+c2V0QXJyYXkoImFycmF5IiwgSlNP
Tjo6QXJyYXk6OmNyZWF0ZSgpKTsKLSAgICBFWFBFQ1RfRVEob2JqZWN0LT5zaXplKCksIDcpOwot
ICAgIFJlZlB0cjxKU09OOjpBcnJheT4gYXJyYXlWYWx1ZTsKLSAgICBFWFBFQ1RfVFJVRShvYmpl
Y3QtPmdldEFycmF5KCJhcnJheSIsIGFycmF5VmFsdWUpKTsKKyAgICBFWFBFQ1RfRVEob2JqZWN0
LT5zaXplKCksIDdVKTsKKyAgICBhdXRvIGFycmF5VmFsdWUgPSBvYmplY3QtPmdldEFycmF5KCJh
cnJheSIpOworICAgIEVYUEVDVF9UUlVFKGFycmF5VmFsdWUpOwogICAgIEVYUEVDVF9FUShhcnJh
eVZhbHVlLT5sZW5ndGgoKSwgMFUpOwogCiAgICAgVmVjdG9yPGNvbnN0IGNoYXIqPiBrZXlzID0g
eyAibnVsbCIsICJib29sZWFuIiwgImludGVnZXIiLCAiZG91YmxlIiwgInN0cmluZyIsICJvYmpl
Y3QiLCAiYXJyYXkiIH07CkBAIC0zNzYsMzEgKzM2MiwzMSBAQCBURVNUKEpTT05PYmplY3QsIEJh
c2ljKQogICAgIEVYUEVDVF9UUlVFKGtleXMuaXNFbXB0eSgpKTsKIAogICAgIG9iamVjdC0+cmVt
b3ZlKCJudWxsIik7Ci0gICAgRVhQRUNUX0VRKG9iamVjdC0+c2l6ZSgpLCA2KTsKKyAgICBFWFBF
Q1RfRVEob2JqZWN0LT5zaXplKCksIDZVKTsKICAgICBFWFBFQ1RfVFJVRShvYmplY3QtPmZpbmQo
Im51bGwiKSA9PSBvYmplY3QtPmVuZCgpKTsKIAogICAgIG9iamVjdC0+cmVtb3ZlKCJib29sZWFu
Iik7Ci0gICAgRVhQRUNUX0VRKG9iamVjdC0+c2l6ZSgpLCA1KTsKKyAgICBFWFBFQ1RfRVEob2Jq
ZWN0LT5zaXplKCksIDVVKTsKICAgICBFWFBFQ1RfVFJVRShvYmplY3QtPmZpbmQoImJvb2xlYW4i
KSA9PSBvYmplY3QtPmVuZCgpKTsKIAogICAgIG9iamVjdC0+cmVtb3ZlKCJpbnRlZ2VyIik7Ci0g
ICAgRVhQRUNUX0VRKG9iamVjdC0+c2l6ZSgpLCA0KTsKKyAgICBFWFBFQ1RfRVEob2JqZWN0LT5z
aXplKCksIDRVKTsKICAgICBFWFBFQ1RfVFJVRShvYmplY3QtPmZpbmQoImludGVnZXIiKSA9PSBv
YmplY3QtPmVuZCgpKTsKIAogICAgIG9iamVjdC0+cmVtb3ZlKCJkb3VibGUiKTsKLSAgICBFWFBF
Q1RfRVEob2JqZWN0LT5zaXplKCksIDMpOworICAgIEVYUEVDVF9FUShvYmplY3QtPnNpemUoKSwg
M1UpOwogICAgIEVYUEVDVF9UUlVFKG9iamVjdC0+ZmluZCgiZG91YmxlIikgPT0gb2JqZWN0LT5l
bmQoKSk7CiAKICAgICBvYmplY3QtPnJlbW92ZSgic3RyaW5nIik7Ci0gICAgRVhQRUNUX0VRKG9i
amVjdC0+c2l6ZSgpLCAyKTsKKyAgICBFWFBFQ1RfRVEob2JqZWN0LT5zaXplKCksIDJVKTsKICAg
ICBFWFBFQ1RfVFJVRShvYmplY3QtPmZpbmQoInN0cmluZyIpID09IG9iamVjdC0+ZW5kKCkpOwog
CiAgICAgb2JqZWN0LT5yZW1vdmUoIm9iamVjdCIpOwotICAgIEVYUEVDVF9FUShvYmplY3QtPnNp
emUoKSwgMSk7CisgICAgRVhQRUNUX0VRKG9iamVjdC0+c2l6ZSgpLCAxVSk7CiAgICAgRVhQRUNU
X1RSVUUob2JqZWN0LT5maW5kKCJvYmplY3QiKSA9PSBvYmplY3QtPmVuZCgpKTsKIAogICAgIG9i
amVjdC0+cmVtb3ZlKCJhcnJheSIpOwotICAgIEVYUEVDVF9FUShvYmplY3QtPnNpemUoKSwgMCk7
CisgICAgRVhQRUNUX0VRKG9iamVjdC0+c2l6ZSgpLCAwVSk7CiAgICAgRVhQRUNUX1RSVUUob2Jq
ZWN0LT5maW5kKCJhcnJheSIpID09IG9iamVjdC0+ZW5kKCkpOwogfQogCkBAIC00NzksMjAxICs0
NjUsMjA0IEBAIFRFU1QoSlNPTlZhbHVlLCBUb0pTT05TdHJpbmcpCiBURVNUKEpTT05WYWx1ZSwg
UGFyc2VKU09OKQogewogICAgIHsKLSAgICAgICAgUmVmUHRyPEpTT046OlZhbHVlPiB2YWx1ZTsK
LSAgICAgICAgRVhQRUNUX1RSVUUoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigibnVsbCIsIHZhbHVl
KSk7CisgICAgICAgIGF1dG8gdmFsdWUgPSBKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJudWxsIik7
CisgICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlKTsKICAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUt
PmlzTnVsbCgpKTsKICAgICB9CiAKICAgICB7Ci0gICAgICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4g
dmFsdWU7Ci0gICAgICAgIEVYUEVDVF9UUlVFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oInRydWUi
LCB2YWx1ZSkpOworICAgICAgICBhdXRvIHZhbHVlID0gSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigi
dHJ1ZSIpOworICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1ZSk7CiAgICAgICAgIEVYUEVDVF9UUlVF
KHZhbHVlLT50eXBlKCkgPT0gSlNPTjo6VmFsdWU6OlR5cGU6OkJvb2xlYW4pOwotICAgICAgICBi
b29sIGJvb2xlYW5WYWx1ZTsKLSAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUtPmFzQm9vbGVhbihi
b29sZWFuVmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX0VRKGJvb2xlYW5WYWx1ZSwgdHJ1ZSk7Cisg
ICAgICAgIGF1dG8gYm9vbGVhblZhbHVlID0gdmFsdWUtPmFzQm9vbGVhbigpOworICAgICAgICBF
WFBFQ1RfVFJVRShib29sZWFuVmFsdWUpOworICAgICAgICBFWFBFQ1RfRVEoKmJvb2xlYW5WYWx1
ZSwgdHJ1ZSk7CiAKLSAgICAgICAgRVhQRUNUX1RSVUUoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigi
ZmFsc2UiLCB2YWx1ZSkpOworICAgICAgICB2YWx1ZSA9IEpTT046OlZhbHVlOjpwYXJzZUpTT04o
ImZhbHNlIik7CisgICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlKTsKICAgICAgICAgRVhQRUNUX1RS
VUUodmFsdWUtPnR5cGUoKSA9PSBKU09OOjpWYWx1ZTo6VHlwZTo6Qm9vbGVhbik7Ci0gICAgICAg
IEVYUEVDVF9UUlVFKHZhbHVlLT5hc0Jvb2xlYW4oYm9vbGVhblZhbHVlKSk7Ci0gICAgICAgIEVY
UEVDVF9FUShib29sZWFuVmFsdWUsIGZhbHNlKTsKKyAgICAgICAgYm9vbGVhblZhbHVlID0gdmFs
dWUtPmFzQm9vbGVhbigpOworICAgICAgICBFWFBFQ1RfVFJVRShib29sZWFuVmFsdWUpOworICAg
ICAgICBFWFBFQ1RfRVEoKmJvb2xlYW5WYWx1ZSwgZmFsc2UpOwogICAgIH0KIAogICAgIHsKLSAg
ICAgICAgUmVmUHRyPEpTT046OlZhbHVlPiB2YWx1ZTsKLSAgICAgICAgRVhQRUNUX1RSVUUoSlNP
Tjo6VmFsdWU6OnBhcnNlSlNPTigiMSIsIHZhbHVlKSk7CisgICAgICAgIGF1dG8gdmFsdWUgPSBK
U09OOjpWYWx1ZTo6cGFyc2VKU09OKCIxIik7CisgICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlKTsK
ICAgICAgICAgLy8gTnVtYmVycyBhcmUgYWx3YXlzIHBhcnNlZCBhcyBkb3VibGUuCiAgICAgICAg
IEVYUEVDVF9UUlVFKHZhbHVlLT50eXBlKCkgPT0gSlNPTjo6VmFsdWU6OlR5cGU6OkRvdWJsZSk7
Ci0gICAgICAgIGRvdWJsZSBkb3VibGVWYWx1ZTsKLSAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUt
PmFzRG91YmxlKGRvdWJsZVZhbHVlKSk7Ci0gICAgICAgIEVYUEVDVF9FUShkb3VibGVWYWx1ZSwg
MS4wKTsKKyAgICAgICAgYXV0byBkb3VibGVWYWx1ZSA9IHZhbHVlLT5hc0RvdWJsZSgpOworICAg
ICAgICBFWFBFQ1RfVFJVRShkb3VibGVWYWx1ZSk7CisgICAgICAgIEVYUEVDVF9FUSgqZG91Ymxl
VmFsdWUsIDEuMCk7CiAKLSAgICAgICAgRVhQRUNUX1RSVUUoSlNPTjo6VmFsdWU6OnBhcnNlSlNP
TigiMS41IiwgdmFsdWUpKTsKKyAgICAgICAgdmFsdWUgPSBKU09OOjpWYWx1ZTo6cGFyc2VKU09O
KCIxLjUiKTsKKyAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUpOwogICAgICAgICBFWFBFQ1RfVFJV
RSh2YWx1ZS0+dHlwZSgpID09IEpTT046OlZhbHVlOjpUeXBlOjpEb3VibGUpOwotICAgICAgICBF
WFBFQ1RfVFJVRSh2YWx1ZS0+YXNEb3VibGUoZG91YmxlVmFsdWUpKTsKLSAgICAgICAgRVhQRUNU
X0VRKGRvdWJsZVZhbHVlLCAxLjUpOworICAgICAgICBkb3VibGVWYWx1ZSA9IHZhbHVlLT5hc0Rv
dWJsZSgpOworICAgICAgICBFWFBFQ1RfVFJVRShkb3VibGVWYWx1ZSk7CisgICAgICAgIEVYUEVD
VF9FUSgqZG91YmxlVmFsdWUsIDEuNSk7CiAgICAgfQogCiAgICAgewotICAgICAgICBSZWZQdHI8
SlNPTjo6VmFsdWU+IHZhbHVlOwotICAgICAgICBFWFBFQ1RfVFJVRShKU09OOjpWYWx1ZTo6cGFy
c2VKU09OKCJcInN0cmluZ1wiIiwgdmFsdWUpKTsKKyAgICAgICAgYXV0byB2YWx1ZSA9IEpTT046
OlZhbHVlOjpwYXJzZUpTT04oIlwic3RyaW5nXCIiKTsKKyAgICAgICAgRVhQRUNUX1RSVUUodmFs
dWUpOwogICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+dHlwZSgpID09IEpTT046OlZhbHVlOjpU
eXBlOjpTdHJpbmcpOwotICAgICAgICBTdHJpbmcgc3RyaW5nVmFsdWU7Ci0gICAgICAgIEVYUEVD
VF9UUlVFKHZhbHVlLT5hc1N0cmluZyhzdHJpbmdWYWx1ZSkpOworICAgICAgICBhdXRvIHN0cmlu
Z1ZhbHVlID0gdmFsdWUtPmFzU3RyaW5nKCk7CisgICAgICAgIEVYUEVDVF9UUlVFKCEhc3RyaW5n
VmFsdWUpOwogICAgICAgICBFWFBFQ1RfRVEoc3RyaW5nVmFsdWUsICJzdHJpbmciKTsKICAgICB9
CiAKICAgICB7Ci0gICAgICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gdmFsdWU7Ci0gICAgICAgIEVY
UEVDVF9UUlVFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIltdIiwgdmFsdWUpKTsKKyAgICAgICAg
YXV0byB2YWx1ZSA9IEpTT046OlZhbHVlOjpwYXJzZUpTT04oIltdIik7CisgICAgICAgIEVYUEVD
VF9UUlVFKHZhbHVlKTsKICAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUtPnR5cGUoKSA9PSBKU09O
OjpWYWx1ZTo6VHlwZTo6QXJyYXkpOwotICAgICAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IGFycmF5
VmFsdWU7Ci0gICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlLT5hc0FycmF5KGFycmF5VmFsdWUpKTsK
KyAgICAgICAgYXV0byBhcnJheVZhbHVlID0gdmFsdWUtPmFzQXJyYXkoKTsKKyAgICAgICAgRVhQ
RUNUX1RSVUUoYXJyYXlWYWx1ZSk7CiAgICAgICAgIEVYUEVDVF9FUShhcnJheVZhbHVlLT5sZW5n
dGgoKSwgMFUpOwogCi0gICAgICAgIEVYUEVDVF9UUlVFKEpTT046OlZhbHVlOjpwYXJzZUpTT04o
IltudWxsLCAxICwyLjUsW3tcImZvb1wiOlwiYmFyXCJ9LHtcImJhelwiOmZhbHNlfV0sXCJ3ZWJr
aXRcIl0iLCB2YWx1ZSkpOworICAgICAgICB2YWx1ZSA9IEpTT046OlZhbHVlOjpwYXJzZUpTT04o
IltudWxsLCAxICwyLjUsW3tcImZvb1wiOlwiYmFyXCJ9LHtcImJhelwiOmZhbHNlfV0sXCJ3ZWJr
aXRcIl0iKTsKKyAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUpOwogICAgICAgICBFWFBFQ1RfVFJV
RSh2YWx1ZS0+dHlwZSgpID09IEpTT046OlZhbHVlOjpUeXBlOjpBcnJheSk7Ci0gICAgICAgIEVY
UEVDVF9UUlVFKHZhbHVlLT5hc0FycmF5KGFycmF5VmFsdWUpKTsKKyAgICAgICAgYXJyYXlWYWx1
ZSA9IHZhbHVlLT5hc0FycmF5KCk7CisgICAgICAgIEVYUEVDVF9UUlVFKGFycmF5VmFsdWUpOwog
ICAgICAgICBFWFBFQ1RfRVEoYXJyYXlWYWx1ZS0+bGVuZ3RoKCksIDVVKTsKICAgICAgICAgYXV0
byBpdCA9IGFycmF5VmFsdWUtPmJlZ2luKCk7Ci0gICAgICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4g
aXRlbVZhbHVlID0gaXQtPmdldCgpOwotICAgICAgICBFWFBFQ1RfVFJVRShpdGVtVmFsdWUtPnR5
cGUoKSA9PSBKU09OOjpWYWx1ZTo6VHlwZTo6TnVsbCk7CisgICAgICAgIEVYUEVDVF9UUlVFKCgq
aXQpLT50eXBlKCkgPT0gSlNPTjo6VmFsdWU6OlR5cGU6Ok51bGwpOwogICAgICAgICArK2l0Owog
ICAgICAgICBFWFBFQ1RfRkFMU0UoaXQgPT0gYXJyYXlWYWx1ZS0+ZW5kKCkpOwogCi0gICAgICAg
IGl0ZW1WYWx1ZSA9IGl0LT5nZXQoKTsKLSAgICAgICAgRVhQRUNUX1RSVUUoaXRlbVZhbHVlLT50
eXBlKCkgPT0gSlNPTjo6VmFsdWU6OlR5cGU6OkRvdWJsZSk7Ci0gICAgICAgIGludCBpbnRlZ2Vy
VmFsdWU7Ci0gICAgICAgIEVYUEVDVF9UUlVFKGl0ZW1WYWx1ZS0+YXNJbnRlZ2VyKGludGVnZXJW
YWx1ZSkpOwotICAgICAgICBFWFBFQ1RfRVEoaW50ZWdlclZhbHVlLCAxKTsKKyAgICAgICAgRVhQ
RUNUX1RSVUUoKCppdCktPnR5cGUoKSA9PSBKU09OOjpWYWx1ZTo6VHlwZTo6RG91YmxlKTsKKyAg
ICAgICAgYXV0byBpbnRlZ2VyVmFsdWUgPSAoKml0KS0+YXNJbnRlZ2VyKCk7CisgICAgICAgIEVY
UEVDVF9UUlVFKGludGVnZXJWYWx1ZSk7CisgICAgICAgIEVYUEVDVF9FUSgqaW50ZWdlclZhbHVl
LCAxKTsKICAgICAgICAgKytpdDsKICAgICAgICAgRVhQRUNUX0ZBTFNFKGl0ID09IGFycmF5VmFs
dWUtPmVuZCgpKTsKIAotICAgICAgICBpdGVtVmFsdWUgPSBpdC0+Z2V0KCk7Ci0gICAgICAgIEVY
UEVDVF9UUlVFKGl0ZW1WYWx1ZS0+dHlwZSgpID09IEpTT046OlZhbHVlOjpUeXBlOjpEb3VibGUp
OwotICAgICAgICBkb3VibGUgZG91YmxlVmFsdWU7Ci0gICAgICAgIEVYUEVDVF9UUlVFKGl0ZW1W
YWx1ZS0+YXNEb3VibGUoZG91YmxlVmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX0VRKGRvdWJsZVZh
bHVlLCAyLjUpOworICAgICAgICBFWFBFQ1RfVFJVRSgoKml0KS0+dHlwZSgpID09IEpTT046OlZh
bHVlOjpUeXBlOjpEb3VibGUpOworICAgICAgICBhdXRvIGRvdWJsZVZhbHVlID0gKCppdCktPmFz
RG91YmxlKCk7CisgICAgICAgIEVYUEVDVF9UUlVFKGRvdWJsZVZhbHVlKTsKKyAgICAgICAgRVhQ
RUNUX0VRKCpkb3VibGVWYWx1ZSwgMi41KTsKICAgICAgICAgKytpdDsKICAgICAgICAgRVhQRUNU
X0ZBTFNFKGl0ID09IGFycmF5VmFsdWUtPmVuZCgpKTsKIAotICAgICAgICBpdGVtVmFsdWUgPSBp
dC0+Z2V0KCk7Ci0gICAgICAgIEVYUEVDVF9UUlVFKGl0ZW1WYWx1ZS0+dHlwZSgpID09IEpTT046
OlZhbHVlOjpUeXBlOjpBcnJheSk7Ci0gICAgICAgIFJlZlB0cjxKU09OOjpBcnJheT4gc3ViQXJy
YXlWYWx1ZTsKLSAgICAgICAgRVhQRUNUX1RSVUUoaXRlbVZhbHVlLT5hc0FycmF5KHN1YkFycmF5
VmFsdWUpKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoKCppdCktPnR5cGUoKSA9PSBKU09OOjpWYWx1
ZTo6VHlwZTo6QXJyYXkpOworICAgICAgICBhdXRvIHN1YkFycmF5VmFsdWUgPSAoKml0KS0+YXNB
cnJheSgpOworICAgICAgICBFWFBFQ1RfVFJVRShzdWJBcnJheVZhbHVlKTsKICAgICAgICAgRVhQ
RUNUX0VRKHN1YkFycmF5VmFsdWUtPmxlbmd0aCgpLCAyVSk7Ci0gICAgICAgIFJlZlB0cjxKU09O
OjpWYWx1ZT4gb2JqZWN0VmFsdWUgPSBzdWJBcnJheVZhbHVlLT5nZXQoMCk7CisgICAgICAgIGF1
dG8gb2JqZWN0VmFsdWUgPSBzdWJBcnJheVZhbHVlLT5nZXQoMCk7CiAgICAgICAgIEVYUEVDVF9U
UlVFKG9iamVjdFZhbHVlLT50eXBlKCkgPT0gSlNPTjo6VmFsdWU6OlR5cGU6Ok9iamVjdCk7Ci0g
ICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG9iamVjdDsKLSAgICAgICAgRVhQRUNUX1RSVUUo
b2JqZWN0VmFsdWUtPmFzT2JqZWN0KG9iamVjdCkpOwotICAgICAgICBFWFBFQ1RfRVEob2JqZWN0
LT5zaXplKCksIDEpOwotICAgICAgICBTdHJpbmcgc3RyaW5nVmFsdWU7Ci0gICAgICAgIEVYUEVD
VF9UUlVFKG9iamVjdC0+Z2V0U3RyaW5nKCJmb28iLCBzdHJpbmdWYWx1ZSkpOworICAgICAgICBh
dXRvIG9iamVjdCA9IG9iamVjdFZhbHVlLT5hc09iamVjdCgpOworICAgICAgICBFWFBFQ1RfVFJV
RShvYmplY3QpOworICAgICAgICBFWFBFQ1RfRVEob2JqZWN0LT5zaXplKCksIDFVKTsKKyAgICAg
ICAgYXV0byBzdHJpbmdWYWx1ZSA9IG9iamVjdC0+Z2V0U3RyaW5nKCJmb28iKTsKKyAgICAgICAg
RVhQRUNUX1RSVUUoISFzdHJpbmdWYWx1ZSk7CiAgICAgICAgIEVYUEVDVF9FUShzdHJpbmdWYWx1
ZSwgImJhciIpOwogICAgICAgICBvYmplY3RWYWx1ZSA9IHN1YkFycmF5VmFsdWUtPmdldCgxKTsK
ICAgICAgICAgRVhQRUNUX1RSVUUob2JqZWN0VmFsdWUtPnR5cGUoKSA9PSBKU09OOjpWYWx1ZTo6
VHlwZTo6T2JqZWN0KTsKLSAgICAgICAgRVhQRUNUX1RSVUUob2JqZWN0VmFsdWUtPmFzT2JqZWN0
KG9iamVjdCkpOwotICAgICAgICBFWFBFQ1RfRVEob2JqZWN0LT5zaXplKCksIDEpOwotICAgICAg
ICBib29sIGJvb2xlYW5WYWx1ZTsKLSAgICAgICAgRVhQRUNUX1RSVUUob2JqZWN0LT5nZXRCb29s
ZWFuKCJiYXoiLCBib29sZWFuVmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX0VRKGJvb2xlYW5WYWx1
ZSwgZmFsc2UpOworICAgICAgICBvYmplY3QgPW9iamVjdFZhbHVlLT5hc09iamVjdCgpOworICAg
ICAgICBFWFBFQ1RfVFJVRShvYmplY3QpOworICAgICAgICBFWFBFQ1RfRVEob2JqZWN0LT5zaXpl
KCksIDFVKTsKKyAgICAgICAgYXV0byBib29sZWFuVmFsdWUgPSBvYmplY3QtPmdldEJvb2xlYW4o
ImJheiIpOworICAgICAgICBFWFBFQ1RfVFJVRShib29sZWFuVmFsdWUpOworICAgICAgICBFWFBF
Q1RfRVEoKmJvb2xlYW5WYWx1ZSwgZmFsc2UpOwogICAgICAgICArK2l0OwogICAgICAgICBFWFBF
Q1RfRkFMU0UoaXQgPT0gYXJyYXlWYWx1ZS0+ZW5kKCkpOwogCi0gICAgICAgIGl0ZW1WYWx1ZSA9
IGl0LT5nZXQoKTsKLSAgICAgICAgRVhQRUNUX1RSVUUoaXRlbVZhbHVlLT50eXBlKCkgPT0gSlNP
Tjo6VmFsdWU6OlR5cGU6OlN0cmluZyk7Ci0gICAgICAgIEVYUEVDVF9UUlVFKGl0ZW1WYWx1ZS0+
YXNTdHJpbmcoc3RyaW5nVmFsdWUpKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoKCppdCktPnR5cGUo
KSA9PSBKU09OOjpWYWx1ZTo6VHlwZTo6U3RyaW5nKTsKKyAgICAgICAgc3RyaW5nVmFsdWUgPSAo
Kml0KS0+YXNTdHJpbmcoKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoISFzdHJpbmdWYWx1ZSk7CiAg
ICAgICAgIEVYUEVDVF9FUShzdHJpbmdWYWx1ZSwgIndlYmtpdCIpOwogICAgICAgICArK2l0Owog
ICAgICAgICBFWFBFQ1RfVFJVRShpdCA9PSBhcnJheVZhbHVlLT5lbmQoKSk7CiAgICAgfQogCiAg
ICAgewotICAgICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHZhbHVlOwotICAgICAgICBFWFBFQ1Rf
VFJVRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJ7fSIsIHZhbHVlKSk7CisgICAgICAgIGF1dG8g
dmFsdWUgPSBKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJ7fSIpOworICAgICAgICBFWFBFQ1RfVFJV
RSh2YWx1ZSk7CiAgICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlLT50eXBlKCkgPT0gSlNPTjo6VmFs
dWU6OlR5cGU6Ok9iamVjdCk7Ci0gICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG9iamVjdFZh
bHVlOwotICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+YXNPYmplY3Qob2JqZWN0VmFsdWUpKTsK
LSAgICAgICAgRVhQRUNUX0VRKG9iamVjdFZhbHVlLT5zaXplKCksIDApOworICAgICAgICBhdXRv
IG9iamVjdFZhbHVlID0gdmFsdWUtPmFzT2JqZWN0KCk7CisgICAgICAgIEVYUEVDVF9UUlVFKG9i
amVjdFZhbHVlKTsKKyAgICAgICAgRVhQRUNUX0VRKG9iamVjdFZhbHVlLT5zaXplKCksIDBVKTsK
IAotICAgICAgICBFWFBFQ1RfVFJVRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJ7XCJmb29cIjog
XCJiYXJcIiwgXCJiYXpcIjoge1wic3ViXCI6W251bGwsZmFsc2VdfX0iLCB2YWx1ZSkpOworICAg
ICAgICB2YWx1ZSA9IEpTT046OlZhbHVlOjpwYXJzZUpTT04oIntcImZvb1wiOiBcImJhclwiLCBc
ImJhelwiOiB7XCJzdWJcIjpbbnVsbCxmYWxzZV19fSIpOworICAgICAgICBFWFBFQ1RfVFJVRSh2
YWx1ZSk7CiAgICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlLT50eXBlKCkgPT0gSlNPTjo6VmFsdWU6
OlR5cGU6Ok9iamVjdCk7Ci0gICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlLT5hc09iamVjdChvYmpl
Y3RWYWx1ZSkpOwotICAgICAgICBFWFBFQ1RfRVEob2JqZWN0VmFsdWUtPnNpemUoKSwgMik7Cisg
ICAgICAgIG9iamVjdFZhbHVlID0gdmFsdWUtPmFzT2JqZWN0KCk7CisgICAgICAgIEVYUEVDVF9U
UlVFKG9iamVjdFZhbHVlKTsKKyAgICAgICAgRVhQRUNUX0VRKG9iamVjdFZhbHVlLT5zaXplKCks
IDJVKTsKIAotICAgICAgICBTdHJpbmcgc3RyaW5nVmFsdWU7Ci0gICAgICAgIEVYUEVDVF9UUlVF
KG9iamVjdFZhbHVlLT5nZXRTdHJpbmcoImZvbyIsIHN0cmluZ1ZhbHVlKSk7CisgICAgICAgIGF1
dG8gc3RyaW5nVmFsdWUgPSBvYmplY3RWYWx1ZS0+Z2V0U3RyaW5nKCJmb28iKTsKKyAgICAgICAg
RVhQRUNUX1RSVUUoISFzdHJpbmdWYWx1ZSk7CiAgICAgICAgIEVYUEVDVF9FUShzdHJpbmdWYWx1
ZSwgImJhciIpOwogCi0gICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG9iamVjdDsKLSAgICAg
ICAgRVhQRUNUX1RSVUUob2JqZWN0VmFsdWUtPmdldE9iamVjdCgiYmF6Iiwgb2JqZWN0KSk7Ci0g
ICAgICAgIEVYUEVDVF9FUShvYmplY3QtPnNpemUoKSwgMSk7Ci0gICAgICAgIFJlZlB0cjxKU09O
OjpBcnJheT4gYXJyYXk7Ci0gICAgICAgIEVYUEVDVF9UUlVFKG9iamVjdC0+Z2V0QXJyYXkoInN1
YiIsIGFycmF5KSk7CisgICAgICAgIGF1dG8gb2JqZWN0ID0gb2JqZWN0VmFsdWUtPmdldE9iamVj
dCgiYmF6Iik7CisgICAgICAgIEVYUEVDVF9UUlVFKG9iamVjdCk7CisgICAgICAgIEVYUEVDVF9F
UShvYmplY3QtPnNpemUoKSwgMVUpOworICAgICAgICBhdXRvIGFycmF5ID0gb2JqZWN0LT5nZXRB
cnJheSgic3ViIik7CisgICAgICAgIEVYUEVDVF9UUlVFKGFycmF5KTsKICAgICAgICAgRVhQRUNU
X0VRKGFycmF5LT5sZW5ndGgoKSwgMlUpOwogICAgIH0KIAogICAgIHsKLSAgICAgICAgUmVmUHRy
PEpTT046OlZhbHVlPiB2YWx1ZTsKLSAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpw
YXJzZUpTT04oIiwiLCB2YWx1ZSkpOwotICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6
OnBhcnNlSlNPTigiXCJmb28iLCB2YWx1ZSkpOwotICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6
VmFsdWU6OnBhcnNlSlNPTigiZm9vXCIiLCB2YWx1ZSkpOwotICAgICAgICBFWFBFQ1RfRkFMU0Uo
SlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiVHJVZSIsIHZhbHVlKSk7Ci0gICAgICAgIEVYUEVDVF9G
QUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJGYWxzZSIsIHZhbHVlKSk7Ci0gICAgICAgIEVY
UEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCIxLmQiLCB2YWx1ZSkpOwotICAgICAg
ICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiWzEsXSIsIHZhbHVlKSk7Ci0g
ICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCIxLDJdIiwgdmFsdWUp
KTsKLSAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIlsxLDIiLCB2
YWx1ZSkpOwotICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiWzEg
Ml0iLCB2YWx1ZSkpOwotICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNP
TigiWzEsMl1dIiwgdmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpw
YXJzZUpTT04oIlsxLDJdLCIsIHZhbHVlKSk7Ci0gICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpW
YWx1ZTo6cGFyc2VKU09OKCJ7Zm9vOlwiYmFyXCJ9IiwgdmFsdWUpKTsKLSAgICAgICAgRVhQRUNU
X0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIntcImZvb1wiOmJhcn0iLCB2YWx1ZSkpOwot
ICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigie1wiZm9vOlwiYmFy
XCJ9IiwgdmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpT
T04oIntmb29cIjpcImJhclwifSIsIHZhbHVlKSk7Ci0gICAgICAgIEVYUEVDVF9GQUxTRShKU09O
OjpWYWx1ZTo6cGFyc2VKU09OKCJ7e1wiZm9vXCI6XCJiYXJcIn19IiwgdmFsdWUpKTsKLSAgICAg
ICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIntcImZvb1wiOlwiYmFyXCJ9
LCIsIHZhbHVlKSk7Ci0gICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09O
KCJbe1wiZm9vXCI6XCJiYXJcIn0se1wiYmF6XCI6ZmFsc2V9LF0iLCB2YWx1ZSkpOwotICAgICAg
ICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiW3tcImZvb1wiOntcImJhelwi
OmZhbHNlfV0iLCB2YWx1ZSkpOworICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBh
cnNlSlNPTigiLCIpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpT
T04oIlwiZm9vIikpOworICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNP
TigiZm9vXCIiKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09O
KCJUclVlIikpOworICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigi
RmFsc2UiKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCIx
LmQiKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJbMSxd
IikpOworICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiMSwyXSIp
KTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIlsxLDIiKSk7
CisgICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJbMSAyXSIpKTsK
KyAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIlsxLDJdXSIpKTsK
KyAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIlsxLDJdLCIpKTsK
KyAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIntmb286XCJiYXJc
In0iKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJ7XCJm
b29cIjpiYXJ9IikpOworICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNP
Tigie1wiZm9vOlwiYmFyXCJ9IikpOworICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6
OnBhcnNlSlNPTigie2Zvb1wiOlwiYmFyXCJ9IikpOworICAgICAgICBFWFBFQ1RfRkFMU0UoSlNP
Tjo6VmFsdWU6OnBhcnNlSlNPTigie3tcImZvb1wiOlwiYmFyXCJ9fSIpKTsKKyAgICAgICAgRVhQ
RUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIntcImZvb1wiOlwiYmFyXCJ9LCIpKTsK
KyAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIlt7XCJmb29cIjpc
ImJhclwifSx7XCJiYXpcIjpmYWxzZX0sXSIpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046
OlZhbHVlOjpwYXJzZUpTT04oIlt7XCJmb29cIjp7XCJiYXpcIjpmYWxzZX1dIikpOwogICAgIH0K
IAogICAgIHsKLSAgICAgICAgUmVmUHRyPEpTT046OlZhbHVlPiB2YWx1ZTsKLSAgICAgICAgRVhQ
RUNUX1RSVUUoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiIFwiZm9vXCIgXG4iLCB2YWx1ZSkpOwot
ICAgICAgICBTdHJpbmcgc3RyaW5nVmFsdWU7Ci0gICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlLT5h
c1N0cmluZyhzdHJpbmdWYWx1ZSkpOworICAgICAgICBhdXRvIHZhbHVlID0gSlNPTjo6VmFsdWU6
OnBhcnNlSlNPTigiIFwiZm9vXCIgXG4iKTsKKyAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUpOwor
ICAgICAgICBhdXRvIHN0cmluZ1ZhbHVlID0gdmFsdWUtPmFzU3RyaW5nKCk7CisgICAgICAgIEVY
UEVDVF9UUlVFKCEhc3RyaW5nVmFsdWUpOwogICAgICAgICBFWFBFQ1RfRVEoImZvbyIsIHN0cmlu
Z1ZhbHVlKTsKICAgICB9CiAKICAgICB7Ci0gICAgICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gdmFs
dWU7Ci0gICAgICAgIEVYUEVDVF9UUlVFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIiAxIiwgdmFs
dWUpKTsKLSAgICAgICAgRVhQRUNUX1RSVUUoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiXHQxIiwg
dmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX1RSVUUoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiXG4x
IiwgdmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX1RSVUUoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigi
MSAiLCB2YWx1ZSkpOwotICAgICAgICBFWFBFQ1RfVFJVRShKU09OOjpWYWx1ZTo6cGFyc2VKU09O
KCIxXHQiLCB2YWx1ZSkpOwotICAgICAgICBFWFBFQ1RfVFJVRShKU09OOjpWYWx1ZTo6cGFyc2VK
U09OKCIxXG4iLCB2YWx1ZSkpOwotICAgICAgICBFWFBFQ1RfVFJVRShKU09OOjpWYWx1ZTo6cGFy
c2VKU09OKCIgMSAiLCB2YWx1ZSkpOwotICAgICAgICBFWFBFQ1RfVFJVRShKU09OOjpWYWx1ZTo6
cGFyc2VKU09OKCIge30gIiwgdmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX1RSVUUoSlNPTjo6VmFs
dWU6OnBhcnNlSlNPTigiIFtdICIsIHZhbHVlKSk7Ci0gICAgICAgIEVYUEVDVF9UUlVFKEpTT046
OlZhbHVlOjpwYXJzZUpTT04oIlwiXFx4RkZcIiIsIHZhbHVlKSk7Ci0gICAgICAgIEVYUEVDVF9U
UlVFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIlwiXFx1MTIzNFwiIiwgdmFsdWUpKTsKKyAgICAg
ICAgRVhQRUNUX1RSVUUoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiIDEiKSk7CisgICAgICAgIEVY
UEVDVF9UUlVFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIlx0MSIpKTsKKyAgICAgICAgRVhQRUNU
X1RSVUUoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiXG4xIikpOworICAgICAgICBFWFBFQ1RfVFJV
RShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCIxICIpKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoSlNP
Tjo6VmFsdWU6OnBhcnNlSlNPTigiMVx0IikpOworICAgICAgICBFWFBFQ1RfVFJVRShKU09OOjpW
YWx1ZTo6cGFyc2VKU09OKCIxXG4iKSk7CisgICAgICAgIEVYUEVDVF9UUlVFKEpTT046OlZhbHVl
OjpwYXJzZUpTT04oIiAxICIpKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoSlNPTjo6VmFsdWU6OnBh
cnNlSlNPTigiIHt9ICIpKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoSlNPTjo6VmFsdWU6OnBhcnNl
SlNPTigiIFtdICIpKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoSlNPTjo6VmFsdWU6OnBhcnNlSlNP
TigiXCJcXHhGRlwiIikpOworICAgICAgICBFWFBFQ1RfVFJVRShKU09OOjpWYWx1ZTo6cGFyc2VK
U09OKCJcIlxcdTEyMzRcIiIpKTsKIAotICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6
OnBhcnNlSlNPTigiMSAxIiwgdmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZh
bHVlOjpwYXJzZUpTT04oInt9IHt9IiwgdmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX0ZBTFNFKEpT
T046OlZhbHVlOjpwYXJzZUpTT04oIltdIFtdIiwgdmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX0ZB
TFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIlwiXFwiLCB2YWx1ZSkpOwotICAgICAgICBFWFBF
Q1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiXCJcXHhGIiwgdmFsdWUpKTsKLSAgICAg
ICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIlwiXFx4RlwiIiwgdmFsdWUp
KTsKLSAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIlwiXFx4RiBc
IiIsIHZhbHVlKSk7Ci0gICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09O
KCJcIlxcdTEiLCB2YWx1ZSkpOwotICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBh
cnNlSlNPTigiXCJcXHUxXCIiLCB2YWx1ZSkpOwotICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6
VmFsdWU6OnBhcnNlSlNPTigiXCJcXHUxICAgXCIiLCB2YWx1ZSkpOwotICAgICAgICBFWFBFQ1Rf
RkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiXCJcXHUxMiIsIHZhbHVlKSk7Ci0gICAgICAg
IEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJcIlxcdTEyXCIiLCB2YWx1ZSkp
OwotICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiXCJcXHUxMiAg
XCIiLCB2YWx1ZSkpOwotICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNP
TigiXCJcXHUxMjMiLCB2YWx1ZSkpOwotICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6
OnBhcnNlSlNPTigiXCJcXHUxMjNcIiIsIHZhbHVlKSk7Ci0gICAgICAgIEVYUEVDVF9GQUxTRShK
U09OOjpWYWx1ZTo6cGFyc2VKU09OKCJcIlxcdTEyMyBcIiIsIHZhbHVlKSk7CisgICAgICAgIEVY
UEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCIxIDEiKSk7CisgICAgICAgIEVYUEVD
VF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJ7fSB7fSIpKTsKKyAgICAgICAgRVhQRUNU
X0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIltdIFtdIikpOworICAgICAgICBFWFBFQ1Rf
RkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiXCJcXCIpKTsKKyAgICAgICAgRVhQRUNUX0ZB
TFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIlwiXFx4RiIpKTsKKyAgICAgICAgRVhQRUNUX0ZB
TFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIlwiXFx4RlwiIikpOworICAgICAgICBFWFBFQ1Rf
RkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiXCJcXHhGIFwiIikpOworICAgICAgICBFWFBF
Q1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiXCJcXHUxIikpOworICAgICAgICBFWFBF
Q1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiXCJcXHUxXCIiKSk7CisgICAgICAgIEVY
UEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJcIlxcdTEgICBcIiIpKTsKKyAgICAg
ICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIlwiXFx1MTIiKSk7CisgICAg
ICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJcIlxcdTEyXCIiKSk7Cisg
ICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJcIlxcdTEyICBcIiIp
KTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIlwiXFx1MTIz
IikpOworICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiXCJcXHUx
MjNcIiIpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIlwi
XFx1MTIzIFwiIikpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDdiZWE4YWQwZDMxNjNkY2IzNTllY2Ji
ZWJhNzVkMTY5YmI0Mzc0NzYuLjQ0MjIzNGYzNzgwN2FiM2IyYTI4M2YzODQxMzU4ZWJmZDNkZmRj
N2MgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAyMC0wOS0wOCAgRGV2aW4gUm91c3NvICA8ZHJv
dXNzb0BhcHBsZS5jb20+CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogbW9kZXJuaXplIGdlbmVy
YXRlZCBiYWNrZW5kIHByb3RvY29sIGNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIxNjMwMgorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNjg1NDc2
NDk+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBp
bnNwZWN0b3IvY2FudmFzL3JlcXVlc3RTaGFkZXJTb3VyY2UtZXhwZWN0ZWQudHh0OgorICAgICAg
ICAqIGluc3BlY3Rvci9jYW52YXMvdXBkYXRlU2hhZGVyLWV4cGVjdGVkLnR4dDoKKyAgICAgICAg
KiBpbnNwZWN0b3IvY29uc29sZS93ZWJjb3JlLWxvZ2dpbmctZXhwZWN0ZWQudHh0OgorICAgICAg
ICAqIGluc3BlY3Rvci9kb20vaGlnaGxpZ2h0UXVhZC1leHBlY3RlZC50eHQ6CisgICAgICAgICog
aW5zcGVjdG9yL3dvcmtlci9kb20tZGVidWdnZXItZG9tLWJyZWFrcG9pbnRzLWV4cGVjdGVkLnR4
dDoKKwogMjAyMC0wOS0wNSAgRGV2aW4gUm91c3NvICA8ZHJvdXNzb0BhcHBsZS5jb20+CiAKICAg
ICAgICAgV2ViIEluc3BlY3RvcjogYWxsb3cgRE9NIGJyZWFrcG9pbnRzIHRvIGJlIGNvbmZpZ3Vy
ZWQKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9jYW52YXMvcmVxdWVzdFNoYWRl
clNvdXJjZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvY2FudmFzL3JlcXVl
c3RTaGFkZXJTb3VyY2UtZXhwZWN0ZWQudHh0CmluZGV4IGY5MmY0OTVkMzhjZTY4NTNhM2E1MzU0
YWE1ODEzZTBiYzRjZTE1NWUuLjJjNWRjZTgzMjA0MTI1ZDBhZTBkMGJmYTBjMjMzOThlNjUzZDRk
MzEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9jYW52YXMvcmVxdWVzdFNoYWRl
clNvdXJjZS1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2NhbnZhcy9y
ZXF1ZXN0U2hhZGVyU291cmNlLWV4cGVjdGVkLnR4dApAQCAtNCw1ICs0LDUgQEAgQ29tbW9uIHRl
c3RzIGZvciBDYW52YXMucmVxdWVzdFNoYWRlclNvdXJjZSBjb21tYW5kLgogPT0gUnVubmluZyB0
ZXN0IHN1aXRlOiBDYW52YXMucmVxdWVzdFNoYWRlclNvdXJjZQogLS0gUnVubmluZyB0ZXN0IGNh
c2U6IENhbnZhcy5yZXF1ZXN0U2hhZGVyU291cmNlLlByb2dyYW1JZC5JbnZhbGlkCiBQQVNTOiBT
aG91bGQgcHJvZHVjZSBhbiBlcnJvci4KLUVycm9yOiBNaXNzaW5nIHByb2dyYW0gZm9yIGdpdmVu
IHByb2dyYW1JZAorRXJyb3I6IFVua25vd24gc2hhZGVyVHlwZTogSU5WQUxJRF9TSEFERVJfVFlQ
RQogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvY2FudmFzL3VwZGF0ZVNoYWRl
ci1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvY2FudmFzL3VwZGF0ZVNoYWRl
ci1leHBlY3RlZC50eHQKaW5kZXggY2UzN2U4ZTZhOWM4MDBlZmM4ZjdmMDZlY2M0NTJjYTQzMWNi
MTAxNy4uMzRmMWJkMmY5MjEyNjlkNzBmNjJiYjdmYWZiOGQwMjY0MzQyYTgwYiAxMDA2NDQKLS0t
IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2NhbnZhcy91cGRhdGVTaGFkZXItZXhwZWN0ZWQudHh0
CisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9jYW52YXMvdXBkYXRlU2hhZGVyLWV4cGVjdGVk
LnR4dApAQCAtNCw1ICs0LDUgQEAgQ29tbW9uIHRlc3RzIGZvciBDYW52YXMudXBkYXRlU2hhZGVy
IGNvbW1hbmQuCiA9PSBSdW5uaW5nIHRlc3Qgc3VpdGU6IENhbnZhcy51cGRhdGVTaGFkZXIKIC0t
IFJ1bm5pbmcgdGVzdCBjYXNlOiBDYW52YXMudXBkYXRlU2hhZGVyLlByb2dyYW1JZC5JbnZhbGlk
CiBQQVNTOiBTaG91bGQgcHJvZHVjZSBhbiBlcnJvci4KLUVycm9yOiBNaXNzaW5nIHByb2dyYW0g
Zm9yIGdpdmVuIHByb2dyYW1JZAorRXJyb3I6IFVua25vd24gc2hhZGVyVHlwZTogSU5WQUxJRF9T
SEFERVJfVFlQRQogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvY29uc29sZS93
ZWJjb3JlLWxvZ2dpbmctZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2NvbnNv
bGUvd2ViY29yZS1sb2dnaW5nLWV4cGVjdGVkLnR4dAppbmRleCA1YjUyZTJhNzJjYTgxYzcwMmNi
YmY1ZmU1OWMzYzZiMGZhMjc1N2EzLi41Mjg0YzkyMDZiZmU4OTNhMjQwMDBlN2Q3MWJjODBjNWE1
MzhkYTQwIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvY29uc29sZS93ZWJjb3Jl
LWxvZ2dpbmctZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9jb25zb2xl
L3dlYmNvcmUtbG9nZ2luZy1leHBlY3RlZC50eHQKQEAgLTE1LDkgKzE1LDEzIEBAIFBBU1M6IExv
ZyBjaGFubmVsIGhhcyBrbm93biBzb3VyY2UuCiBQQVNTOiBMb2cgY2hhbm5lbCBkaXNhYmxlZCBi
eSBkZWZhdWx0LgogUEFTUzogTG9nIGNoYW5uZWwgaGFzIGtub3duIHNvdXJjZS4KIFBBU1M6IExv
ZyBjaGFubmVsIGRpc2FibGVkIGJ5IGRlZmF1bHQuCitQQVNTOiBMb2cgY2hhbm5lbCBoYXMga25v
d24gc291cmNlLgorUEFTUzogTG9nIGNoYW5uZWwgZGlzYWJsZWQgYnkgZGVmYXVsdC4KK1BBU1M6
IExvZyBjaGFubmVsIGhhcyBrbm93biBzb3VyY2UuCitQQVNTOiBMb2cgY2hhbm5lbCBkaXNhYmxl
ZCBieSBkZWZhdWx0LgogCiAtLSBSdW5uaW5nIHRlc3QgY2FzZTogQ29uc29sZS5Mb2dnaW5nLklu
dmFsaWRMZXZlbAotUEFTUzogVW5rbm93biBjaGFubmVsTGV2ZWw6IERPRVNfTk9UX0VYSVNUCitQ
QVNTOiBVbmtub3duIGxldmVsOiBET0VTX05PVF9FWElTVAogCiAtLSBSdW5uaW5nIHRlc3QgY2Fz
ZTogQ29uc29sZS5Mb2dnaW5nLk5vTG9nZ2luZwogUEFTUzogTWVkaWEgbG9nZ2luZyBkaXNhYmxl
ZC4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9kb20vaGlnaGxpZ2h0UXVhZC1l
eHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZG9tL2hpZ2hsaWdodFF1YWQtZXhw
ZWN0ZWQudHh0CmluZGV4IGU3ODExN2EzYTUwZmFjOTc1OWI0ZjM0ZTFlODI1Y2UwN2VkMTFhODUu
LmExZjNiMmZlNzY1ODI3YmZiMTRhYTJiYjA2ZDBhZDg2NDY3NDY2NTUgMTAwNjQ0Ci0tLSBhL0xh
eW91dFRlc3RzL2luc3BlY3Rvci9kb20vaGlnaGxpZ2h0UXVhZC1leHBlY3RlZC50eHQKKysrIGIv
TGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RvbS9oaWdobGlnaHRRdWFkLWV4cGVjdGVkLnR4dApAQCAt
MzEsNSArMzEsNSBAQCBIaWdobGlnaHQgUmVjdDogeyJ4IjotMTAsInkiOi0xMCwid2lkdGgiOjEw
MDAsImhlaWdodCI6MjAwMCwidG9wIjotMTAsInJpZ2h0Ijo5OQogCiAtLSBSdW5uaW5nIHRlc3Qg
Y2FzZTogQmFkUXVhZFNob3VsZEVycm9yCiBQQVNTOiBTaG91bGQgcHJvZHVjZSBhbiBlcnJvci4K
LUVycm9yOiBVbmV4cGVjdGVkIGludmFsaWQgcXVhZEFycmF5CitFcnJvcjogVW5leHBlY3RlZCBp
bnZhbGlkIHF1YWQKIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3dvcmtlci9k
b20tZGVidWdnZXItZG9tLWJyZWFrcG9pbnRzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2lu
c3BlY3Rvci93b3JrZXIvZG9tLWRlYnVnZ2VyLWRvbS1icmVha3BvaW50cy1leHBlY3RlZC50eHQK
aW5kZXggZmE4ZTc2MmFhMzJjZTVhZTFjZmU4NTFmOTc0OGIzNTM5ZjUxZTI0Zi4uM2RmMjI4ODZl
MzEyYmVmNTY5YjEzOTRjNGE0NGM4MzNlYzNiNTY0MyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMv
aW5zcGVjdG9yL3dvcmtlci9kb20tZGVidWdnZXItZG9tLWJyZWFrcG9pbnRzLWV4cGVjdGVkLnR4
dAorKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3Ivd29ya2VyL2RvbS1kZWJ1Z2dlci1kb20tYnJl
YWtwb2ludHMtZXhwZWN0ZWQudHh0CkBAIC00LDkgKzQsOSBAQCBUZXN0cyBmb3IgRE9NIGJyZWFr
cG9pbnQgZnVuY3Rpb25hbGl0eSAoRE9NRGVidWdnZXIpIGluIGEgV29ya2VyLgogPT0gUnVubmlu
ZyB0ZXN0IHN1aXRlOiBXb3JrZXIuRE9NRGVidWdnZXIuRE9NQnJlYWtwb2ludAogLS0gUnVubmlu
ZyB0ZXN0IGNhc2U6IFdvcmtlci5ET01EZWJ1Z2dlci5ET01CcmVha3BvaW50LnNldERPTUJyZWFr
cG9pbnQKIFBBU1M6IFNob3VsZCBwcm9kdWNlIGFuIGV4Y2VwdGlvbi4KLUVycm9yOiBOb3Qgc3Vw
cG9ydGVkCitFcnJvcjogVW5rbm93biB0eXBlOiBJTlZBTElECiAKIC0tIFJ1bm5pbmcgdGVzdCBj
YXNlOiBXb3JrZXIuRE9NRGVidWdnZXIuRE9NQnJlYWtwb2ludC5yZW1vdmVET01CcmVha3BvaW50
CiBQQVNTOiBTaG91bGQgcHJvZHVjZSBhbiBleGNlcHRpb24uCi1FcnJvcjogTm90IHN1cHBvcnRl
ZAorRXJyb3I6IFVua25vd24gdHlwZTogSU5WQUxJRAogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>408315</attachid>
            <date>2020-09-08 23:58:23 -0700</date>
            <delta_ts>2020-09-09 00:03:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216302-20200908235822.patch</filename>
            <type>text/plain</type>
            <size>1526266</size>
            <attacher name="Devin Rousso">hi</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDdhMGViNGY4YTlhMTBhMTkyZjg2MGNjMTc1MjI4
ZDNkMWRhMzQ0NDEuLjM1Y2IwMThmMTA5ZDk4MTRiODk3MmE2MDcwM2M4ZTliYTY3YmU4ODYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyOCBAQAorMjAyMC0wOS0wOCAgRGV2
aW4gUm91c3NvICA8ZHJvdXNzb0BhcHBsZS5jb20+CisKKyAgICAgICAgV2ViIEluc3BlY3Rvcjog
bW9kZXJuaXplIGdlbmVyYXRlZCBiYWNrZW5kIHByb3RvY29sIGNvZGUKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNjMwMgorICAgICAgICA8cmRhcjov
L3Byb2JsZW0vNjg1NDc2NDk+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgUHJldmlvdXNseSwgdGhlIGluc3BlY3RvciBwcm90b2NvbCB3YXMgZXhwcmVz
c2VkIGluIGNvZGUgaW4gYSBzb21ld2hhdCBjb25mdXNpbmcgd2F5OgorICAgICAgICAgLSB0aGUg
ZXJyb3Igc3RyaW5nIHdhcyB0aGUgZmlyc3QgYXJndW1lbnQKKyAgICAgICAgIC0gcmVxdWlyZWQg
cGFyYW1ldGVycyB3ZXJlIGBUYCBvciBgY29uc3QgVCZgCisgICAgICAgICAtIG9wdGlvbmFsIHBh
cmFtZXRlcnMgd2VyZSBgY29uc3QgVCpgCisgICAgICAgICAtIGVudW0gcGFyYW1ldGVycyB3ZXJl
IHRoZSB1bmRlcmx5aW5nIHR5cGUgcmVxdWlyaW5nIHRoZSBiYWNrZW5kIGRpc3BhdGNoZXIgaGFu
ZGxlciB0bworICAgICAgICAgICBwcm9jZXNzIGl0IGluc3RlYWQgb2YgaXQgYmVpbmcgcHJlcHJv
Y2Vzc2VkCisgICAgICAgICAtIHJlcXVpcmVkIHJldHVybnMgd2VyZSBgVCZgCisgICAgICAgICAt
IG9wdGlvbmFsIHJldHVybnMgd2VyZSBgVCpgCisgICAgICAgIFRoaXMgZG9lc24ndCByZWFsbHkg
bWFrZSBmb3IgZWFzeS9vYnZpb3VzIHJlYWRpbmcgb2YgY29kZSBzaW5jZSB0aGUgb3JkZXIgb2Yg
YXJndW1lbnRzIGlzCisgICAgICAgIG5vdCB3ZWlyZCAoZS5nLiBlcnJvciBzdHJpbmcgZmlyc3Qp
LCBhbmQgdGhhdCB0aGVyZSBhcmUgcmVmZXJlbmNlcy9wb2ludGVycyB0byBwcmltaXRpdmUKKyAg
ICAgICAgdHlwZXMuCisKKyAgICAgICAgVGhpcyBwYXRjaCBjbGVhbnMgdXAgdGhlIGdlbmVyYXRl
ZCBpbnNwZWN0b3IgcHJvdG9jb2wgY29kZSB0byBiZToKKyAgICAgICAgIC0gcmVxdWlyZWQgcGFy
YW1ldGVycyBhcmUgYFRgIG9yIGBSZWY8VD4mJmAKKyAgICAgICAgIC0gb3B0aW9uYWwgcGFyYW1l
dGVycyBhcmUgYE9wdGlvbmFsPFQ+JiZgIG9yIGBSZWZQdHI8VD4mJmAKKyAgICAgICAgIC0gZW51
bSBwYXJhbWV0ZXJzIGFyZSBwcmVwcm9jZXNzZWQgYW5kIHBhc3NlZCB0byB0aGUgYmFja2VuZCBk
aXNwYXRjaGVyIGhhbmRsZXIgaWYgdmFsaWQKKyAgICAgICAgIC0gc3luY2hyb25vdXMgY29tbWFu
ZHMgcmV0dXJuIGBFeHBlY3RlZDxYLCBFcnJvclN0cmluZz5gIHVzaW5nIHRoZSBzYW1lIHR5cGVz
L3J1bGVzIGFib3ZlCisgICAgICAgICAgIHdoZXJlIGBYYCBpcyBlaXRoZXIgYSBzaW5nbGUgcmV0
dXJuIG9yIGEgYHN0ZDo6dHVwbGVgIG9mIG11bHRpcGxlIHJldHVybnMKKworICAgICAgICBUaGUg
b25lIGV4Y2VwdGlvbiB0byB0aGUgYWJvdmUgaXMgYFN0cmluZ2AsIHdoaWNoIGlzIGFscmVhZHkg
YSB0cmktc3RhdGUgb2YgYG51bGxTdHJpbmcoKWAsCisgICAgICAgIGBlbXB0eVN0cmluZygpYCwg
YW5kIHNvbWV0aGluZyBzZXQsIHNvIHRoZXJlJ3Mgbm8gbmVlZCB0byB1c2UgYE9wdGlvbmFsPFN0
cmluZz5gLgorCisgICAgICAgIEFsc28gdXNlIGBQcm90b2NvbGAgb2JqZWN0cy9gdHlwZWRlZnNg
IHdoZXJldmVyIHBvc3NpYmxlIHRvIGZ1cnRoZXIgcmVsYXRlIHRoZSBwcm90b2NvbAorICAgICAg
ICBKU09OIGFuZCB0aGUgYWN0dWFsIGJhY2tlbmQgZGlzcGF0Y2hlciBoYW5kbGVyIGltcGxlbWVu
dGF0aW9uLgorCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0b3Iu
cHk6CisgICAgICAgIChHZW5lcmF0b3IuZ2VuZXJhdGVfaW5jbHVkZXNfZnJvbV9lbnRyaWVzKToK
KyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2NwcF9nZW5lcmF0b3JfdGVtcGxh
dGVzLnB5OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vY3BwX2dlbmVyYXRv
ci5weToKKyAgICAgICAgKENwcEdlbmVyYXRvci5oZWxwZXJzX25hbWVzcGFjZSk6CisgICAgICAg
IChDcHBHZW5lcmF0b3IuY3BwX2dldHRlcl9tZXRob2RfZm9yX3R5cGUpOgorICAgICAgICAoQ3Bw
R2VuZXJhdG9yLmNwcF9zZXR0ZXJfbWV0aG9kX2Zvcl90eXBlKToKKyAgICAgICAgKENwcEdlbmVy
YXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZSk6CisgICAgICAgIChDcHBHZW5lcmF0b3Iu
Y3BwX3R5cGVfZm9yX3R5cGVfbWVtYmVyX2FyZ3VtZW50KTogQWRkZWQuCisgICAgICAgIChDcHBH
ZW5lcmF0b3IuY3BwX3R5cGVfZm9yX2NvbW1hbmRfcGFyYW1ldGVyKTogQWRkZWQuCisgICAgICAg
IChDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX2NvbW1hbmRfcmV0dXJuX2RlY2xhcmF0aW9uKTog
QWRkZWQuCisgICAgICAgIChDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX2NvbW1hbmRfcmV0dXJu
X2FyZ3VtZW50KTogQWRkZWQuCisgICAgICAgIChDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX2V2
ZW50X3BhcmFtZXRlcik6IEFkZGVkLgorICAgICAgICAoQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zv
cl9lbnVtKTogQWRkZWQuCisgICAgICAgIChDcHBHZW5lcmF0b3Iuc2hvdWxkX21vdmVfYXJndW1l
bnQpOiBBZGRlZC4KKyAgICAgICAgKENwcEdlbmVyYXRvci5zaG91bGRfcmVsZWFzZV9hcmd1bWVu
dCk6IEFkZGVkLgorICAgICAgICAoQ3BwR2VuZXJhdG9yLnNob3VsZF9kZXJlZmVyZW5jZV9hcmd1
bWVudCk6IEFkZGVkLgorICAgICAgICAoQ3BwR2VuZXJhdG9yLmNwcF9wcm90b2NvbF90eXBlX2Zv
cl90eXBlX21lbWJlcik6IERlbGV0ZWQuCisgICAgICAgIChDcHBHZW5lcmF0b3IuY3BwX3R5cGVf
Zm9yX3VuY2hlY2tlZF9mb3JtYWxfaW5fcGFyYW1ldGVyKTogRGVsZXRlZC4KKyAgICAgICAgKENw
cEdlbmVyYXRvci5jcHBfdHlwZV9mb3JfY2hlY2tlZF9mb3JtYWxfZXZlbnRfcGFyYW1ldGVyKTog
RGVsZXRlZC4KKyAgICAgICAgKENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3JfdHlwZV9tZW1iZXIp
OiBEZWxldGVkLgorICAgICAgICAoQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl90eXBlX3dpdGhf
bmFtZSk6IERlbGV0ZWQuCisgICAgICAgIChDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX2Zvcm1h
bF9vdXRfcGFyYW1ldGVyKTogRGVsZXRlZC4KKyAgICAgICAgKENwcEdlbmVyYXRvci5jcHBfdHlw
ZV9mb3JfZm9ybWFsX2FzeW5jX3BhcmFtZXRlcik6IERlbGV0ZWQuCisgICAgICAgIChDcHBHZW5l
cmF0b3IuY3BwX3R5cGVfZm9yX3N0YWNrX2luX3BhcmFtZXRlcik6IERlbGV0ZWQuCisgICAgICAg
IChDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX3N0YWNrX291dF9wYXJhbWV0ZXIpOiBEZWxldGVk
LgorICAgICAgICAoQ3BwR2VuZXJhdG9yLmNwcF9hc3NlcnRpb25fbWV0aG9kX2Zvcl90eXBlX21l
bWJlcik6IERlbGV0ZWQuCisgICAgICAgIChDcHBHZW5lcmF0b3IuY3BwX2Fzc2VydGlvbl9tZXRo
b2RfZm9yX3R5cGVfbWVtYmVyLmFzc2VydGlvbl9tZXRob2RfZm9yX3R5cGUpOiBEZWxldGVkLgor
ICAgICAgICAoQ3BwR2VuZXJhdG9yLnNob3VsZF91c2Vfd3JhcHBlcl9mb3JfcmV0dXJuX3R5cGUp
OiBEZWxldGVkLgorICAgICAgICAoQ3BwR2VuZXJhdG9yLnNob3VsZF91c2VfcmVmZXJlbmNlc19m
b3JfdHlwZSk6IERlbGV0ZWQuCisgICAgICAgIChDcHBHZW5lcmF0b3Iuc2hvdWxkX3Bhc3NfYnlf
Y29weV9mb3JfcmV0dXJuX3R5cGUpOiBEZWxldGVkLgorICAgICAgICAqIGluc3BlY3Rvci9zY3Jp
cHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2FsdGVybmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVh
ZGVyLnB5OgorICAgICAgICAoQ3BwQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5l
cmF0b3IuX2dlbmVyYXRlX3NlY29uZGFyeV9oZWFkZXJfaW5jbHVkZXMpOgorICAgICAgICAoQ3Bw
QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRlX2hhbmRs
ZXJfZGVjbGFyYXRpb25fZm9yX2NvbW1hbmQpOgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRz
L2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHk6CisgICAg
ICAgIChDcHBCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvci5nZW5lcmF0ZV9vdXRwdXQp
OgorICAgICAgICAoQ3BwQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRl
X3NlY29uZGFyeV9oZWFkZXJfaW5jbHVkZXMpOgorICAgICAgICAoQ3BwQmFja2VuZERpc3BhdGNo
ZXJIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRlX2hhbmRsZXJfZGVjbGFyYXRpb25zX2Zvcl9kb21h
aW4pOgorICAgICAgICAoQ3BwQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IuX2dlbmVy
YXRlX2hhbmRsZXJfZGVjbGFyYXRpb25fZm9yX2NvbW1hbmQpOgorICAgICAgICAoQ3BwQmFja2Vu
ZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRlX2FzeW5jX2hhbmRsZXJfZGVjbGFy
YXRpb25fZm9yX2NvbW1hbmQpOgorICAgICAgICAoQ3BwQmFja2VuZERpc3BhdGNoZXJIZWFkZXJH
ZW5lcmF0b3IuX2dlbmVyYXRlX2Rpc3BhdGNoZXJfZGVjbGFyYXRpb25fZm9yX2NvbW1hbmQpOgor
ICAgICAgICAoQ3BwQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRlX2Fu
b255bW91c19lbnVtX2Zvcl9wYXJhbWV0ZXIpOiBEZWxldGVkLgorICAgICAgICAqIGluc3BlY3Rv
ci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1l
bnRhdGlvbi5weToKKyAgICAgICAgKENwcEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25H
ZW5lcmF0b3IuX2dlbmVyYXRlX3NlY29uZGFyeV9oZWFkZXJfaW5jbHVkZXMpOgorICAgICAgICAo
Q3BwQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfc21h
bGxfZGlzcGF0Y2hlcl9zd2l0Y2hfaW1wbGVtZW50YXRpb25fZm9yX2RvbWFpbik6CisgICAgICAg
IChDcHBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9h
c3luY19kaXNwYXRjaGVyX2NsYXNzX2Zvcl9kb21haW4pOgorICAgICAgICAoQ3BwQmFja2VuZERp
c3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfZGlzcGF0Y2hlcl9pbXBs
ZW1lbnRhdGlvbl9mb3JfY29tbWFuZCk6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29k
ZWdlbi9nZW5lcmF0ZV9jcHBfZnJvbnRlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHk6CisgICAgICAg
IChDcHBGcm9udGVuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRlX3NlY29uZGFy
eV9oZWFkZXJfaW5jbHVkZXMpOgorICAgICAgICAoQ3BwRnJvbnRlbmREaXNwYXRjaGVySGVhZGVy
R2VuZXJhdG9yLl9nZW5lcmF0ZV9kaXNwYXRjaGVyX2RlY2xhcmF0aW9uX2Zvcl9ldmVudCk6Cisg
ICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfZnJvbnRlbmRf
ZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weToKKyAgICAgICAgKENwcEZyb250ZW5kRGlzcGF0
Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9zZWNvbmRhcnlfaGVhZGVyX2lu
Y2x1ZGVzKToKKyAgICAgICAgKENwcEZyb250ZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2Vu
ZXJhdG9yLl9nZW5lcmF0ZV9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uX2Zvcl9ldmVudCk6Cisg
ICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfcHJvdG9jb2xf
dHlwZXNfaGVhZGVyLnB5OgorICAgICAgICAoQ3BwUHJvdG9jb2xUeXBlc0hlYWRlckdlbmVyYXRv
ci5fZ2VuZXJhdGVfc2Vjb25kYXJ5X2hlYWRlcl9pbmNsdWRlcyk6CisgICAgICAgICogaW5zcGVj
dG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfcHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50
YXRpb24ucHk6CisgICAgICAgIChDcHBQcm90b2NvbFR5cGVzSW1wbGVtZW50YXRpb25HZW5lcmF0
b3IuX2dlbmVyYXRlX3NlY29uZGFyeV9oZWFkZXJfaW5jbHVkZXMpOgorICAgICAgICAoQ3BwUHJv
dG9jb2xUeXBlc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9lbnVtX2NvbnZlcnNp
b25fbWV0aG9kc19mb3JfZG9tYWluKToKKyAgICAgICAgKENwcFByb3RvY29sVHlwZXNJbXBsZW1l
bnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfb3Blbl9maWVsZF9uYW1lcyk6CisgICAgICAgIChD
cHBQcm90b2NvbFR5cGVzSW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX2Fzc2VydGlv
bl9mb3JfZW51bSk6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0
ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHk6CisgICAgICAgIChPYmpDQmFja2Vu
ZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRlX29iamNfaGFuZGxlcl9kZWNsYXJh
dGlvbl9mb3JfY29tbWFuZCk6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9n
ZW5lcmF0ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weToKKyAgICAg
ICAgKE9iakNCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0
ZV9oYW5kbGVyX2ltcGxlbWVudGF0aW9uX2Zvcl9jb21tYW5kKToKKyAgICAgICAgKE9iakNCYWNr
ZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9zdWNjZXNzX2Js
b2NrX2Zvcl9jb21tYW5kKToKKyAgICAgICAgKE9iakNCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVu
dGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9zdWNjZXNzX2Jsb2NrX2Zvcl9jb21tYW5kLmFuZCk6
CisgICAgICAgIChPYmpDQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5f
Z2VuZXJhdGVfY29udmVyc2lvbnNfZm9yX2NvbW1hbmQuaW5fcGFyYW1fZXhwcmVzc2lvbik6Cisg
ICAgICAgIChPYmpDQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2Vu
ZXJhdGVfY29udmVyc2lvbnNfZm9yX2NvbW1hbmQpOgorICAgICAgICAoT2JqQ0JhY2tlbmREaXNw
YXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX2ludm9jYXRpb25fZm9yX2Nv
bW1hbmQpOgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2Jq
Y19mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5OgorICAgICAgICAoT2JqQ0Zy
b250ZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9ldmVudCk6
CisgICAgICAgIChPYmpDRnJvbnRlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3Iu
X2dlbmVyYXRlX2V2ZW50X291dF9wYXJhbWV0ZXJzKToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2Ny
aXB0cy9jb2RlZ2VuL29iamNfZ2VuZXJhdG9yX3RlbXBsYXRlcy5weToKKyAgICAgICAgKiBpbnNw
ZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL29iamNfZ2VuZXJhdG9yLnB5OgorICAgICAgICAoT2JqQ0dl
bmVyYXRvci5wcm90b2NvbF90eXBlX2Zvcl90eXBlKToKKyAgICAgICAgKE9iakNHZW5lcmF0b3Iu
b2JqY190eXBlX2Zvcl9wYXJhbV9pbnRlcm5hbCk6CisgICAgICAgIChPYmpDR2VuZXJhdG9yLm9i
amNfcHJvdG9jb2xfaW1wb3J0X2V4cHJlc3Npb25fZm9yX3BhcmFtZXRlcik6CisKKyAgICAgICAg
KiBpbnNwZWN0b3IvcHJvdG9jb2wvUGFnZS5qc29uOgorICAgICAgICBOb3cgdGhhdCBlbnVtcyBh
cmUgcHJvY2Vzc2VkIGJlZm9yZSBiZWluZyBwYXNzZWQgdG8gYmFja2VuZCBkaXNwYWNoZXIgaGFu
ZGxlcnMsIHRoZQorICAgICAgICBgYXBwZWFyYW5jZWAgcGFyYW1ldGVyIG9mIGBQYWdlLnNldEZv
cmNlZEFwcGVhcmFuY2VgIG11c3QgYmUgbWFya2VkIGBvcHRpb25hbGAgYXMKKyAgICAgICAgdGhl
cmUncyBubyB3YXkgZm9yIGl0IHRvIGFjY2VwdCBhbiBlbXB0eSBzdHJpbmcsIGFzIHRoYXQncyBu
b3QgcG9zc2libGUgZm9yIGFuIGVudW0uCisKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0lu
c3BlY3RvckFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBZ2Vu
dC5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBdWRpdEFnZW50Lmg6
CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBdWRpdEFnZW50LmNwcDoKKyAg
ICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNvbnNvbGVBZ2VudC5oOgorICAgICAg
ICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ29uc29sZUFnZW50LmNwcDoKKyAgICAgICAg
KiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuaDoKKyAgICAgICAgKiBp
bnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwOgorICAgICAgICAqIGlu
c3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9ySGVhcEFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9y
L2FnZW50cy9JbnNwZWN0b3JIZWFwQWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2Vu
dHMvSW5zcGVjdG9yUnVudGltZUFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9J
bnNwZWN0b3JSdW50aW1lQWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5z
cGVjdG9yU2NyaXB0UHJvZmlsZXJBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9yU2NyaXB0UHJvZmlsZXJBZ2VudC5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL2Fn
ZW50cy9JbnNwZWN0b3JUYXJnZXRBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9yVGFyZ2V0QWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSlNH
bG9iYWxPYmplY3RBdWRpdEFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9KU0ds
b2JhbE9iamVjdEF1ZGl0QWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSlNH
bG9iYWxPYmplY3REZWJ1Z2dlckFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9K
U0dsb2JhbE9iamVjdERlYnVnZ2VyQWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2Vu
dHMvSlNHbG9iYWxPYmplY3RSdW50aW1lQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdl
bnRzL0pTR2xvYmFsT2JqZWN0UnVudGltZUFnZW50LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3Iv
SlNHbG9iYWxPYmplY3RDb25zb2xlQ2xpZW50LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSlNH
bG9iYWxPYmplY3RJbnNwZWN0b3JDb250cm9sbGVyLmNwcDoKKyAgICAgICAgRWxpZGVkIGJhY2tl
bmQgZGlzcGF0Y2hlciBoYW5kbGVyIGNoYW5nZXMgZGVzY3JpYmUgYWJvdmUuCisKKyAgICAgICAg
KiBiaW5kaW5ncy9TY3JpcHRWYWx1ZS5jcHA6CisgICAgICAgIChJbnNwZWN0b3I6OmpzVG9JbnNw
ZWN0b3JWYWx1ZSk6CisgICAgICAgICogaW5zcGVjdG9yL0FzeW5jU3RhY2tUcmFjZS5oOgorICAg
ICAgICAqIGluc3BlY3Rvci9Bc3luY1N0YWNrVHJhY2UuY3BwOgorICAgICAgICAoSW5zcGVjdG9y
OjpBc3luY1N0YWNrVHJhY2U6OmJ1aWxkSW5zcGVjdG9yT2JqZWN0IGNvbnN0KToKKyAgICAgICAg
KiBpbnNwZWN0b3IvQ29uc29sZU1lc3NhZ2UuY3BwOgorICAgICAgICAoSW5zcGVjdG9yOjpDb25z
b2xlTWVzc2FnZTo6YWRkVG9Gcm9udGVuZCk6CisgICAgICAgICogaW5zcGVjdG9yL0luamVjdGVk
U2NyaXB0QmFzZS5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbmplY3RlZFNjcmlwdEJhc2UuY3Bw
OgorICAgICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdEJhc2U6Om1ha2VFdmFsQ2FsbCk6
CisgICAgICAgIChJbnNwZWN0b3I6OkluamVjdGVkU2NyaXB0QmFzZTo6Y2hlY2tDYWxsUmVzdWx0
KToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHRCYXNlOjpjaGVja0FzeW5jQ2Fs
bFJlc3VsdCk6CisgICAgICAgICogaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0Lmg6CisgICAgICAg
ICogaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0LmNwcDoKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5q
ZWN0ZWRTY3JpcHQ6OmV4ZWN1dGUpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlw
dDo6ZXZhbHVhdGUpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdDo6Y2FsbEZ1
bmN0aW9uT24pOgorICAgICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdDo6ZXZhbHVhdGVP
bkNhbGxGcmFtZSk6CisgICAgICAgIChJbnNwZWN0b3I6OkluamVjdGVkU2NyaXB0OjpnZXRGdW5j
dGlvbkRldGFpbHMpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdDo6ZnVuY3Rp
b25EZXRhaWxzKToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHQ6OmdldFByZXZp
ZXcpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdDo6Z2V0UHJvcGVydGllcyk6
CisgICAgICAgIChJbnNwZWN0b3I6OkluamVjdGVkU2NyaXB0OjpnZXREaXNwbGF5YWJsZVByb3Bl
cnRpZXMpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdDo6Z2V0SW50ZXJuYWxQ
cm9wZXJ0aWVzKToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHQ6OmdldENvbGxl
Y3Rpb25FbnRyaWVzKToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHQ6OnNhdmVS
ZXN1bHQpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdDo6d3JhcENhbGxGcmFt
ZXMgY29uc3QpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdDo6d3JhcE9iamVj
dCBjb25zdCk6CisgICAgICAgIChJbnNwZWN0b3I6OkluamVjdGVkU2NyaXB0Ojp3cmFwSlNPTlN0
cmluZyBjb25zdCk6CisgICAgICAgIChJbnNwZWN0b3I6OkluamVjdGVkU2NyaXB0Ojp3cmFwVGFi
bGUgY29uc3QpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdDo6cHJldmlld1Zh
bHVlIGNvbnN0KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmNw
cDoKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOjppbmplY3RlZFNj
cmlwdEZvck9iamVjdElkKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXIuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXIuY3BwOgorICAgICAgICAoSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tC
YXNlOjpzZW5kU3VjY2Vzcyk6CisgICAgICAgIChJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVy
OjpkaXNwYXRjaCk6CisgICAgICAgIChJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyOjpzZW5k
UmVzcG9uc2UpOgorICAgICAgICAoSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0UHJv
cGVydHlWYWx1ZSk6CisgICAgICAgIChJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyOjpnZXRC
b29sZWFuKToKKyAgICAgICAgKEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXI6OmdldEludGVn
ZXIpOgorICAgICAgICAoSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0RG91YmxlKToK
KyAgICAgICAgKEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXI6OmdldFN0cmluZyk6CisgICAg
ICAgIChJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyOjpnZXRWYWx1ZSk6CisgICAgICAgIChJ
bnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyOjpnZXRPYmplY3QpOgorICAgICAgICAoSW5zcGVj
dG9yOjpCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0QXJyYXkpOgorICAgICAgICAoSW5zcGVjdG9yOjpj
YXN0VG9JbnRlZ2VyKTogRGVsZXRlZC4KKyAgICAgICAgKEluc3BlY3Rvcjo6Y2FzdFRvTnVtYmVy
KTogRGVsZXRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5o
OgorICAgICAgICAoSW5zcGVjdG9yOjpQcm90b2NvbDo6QmluZGluZ1RyYWl0czxKU09OOjpBcnJh
eU9mPFQ+Pjo6cnVudGltZUNhc3QpOgorICAgICAgICAoSW5zcGVjdG9yOjpQcm90b2NvbDo6Qmlu
ZGluZ1RyYWl0czxKU09OOjpBcnJheU9mPFQ+Pjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUp
OgorICAgICAgICAqIGluc3BlY3Rvci9yZW1vdGUvc29ja2V0L1JlbW90ZUluc3BlY3RvckNvbm5l
Y3Rpb25DbGllbnQuY3BwOgorICAgICAgICAoSW5zcGVjdG9yOjpSZW1vdGVJbnNwZWN0b3JDb25u
ZWN0aW9uQ2xpZW50OjpleHRyYWN0RXZlbnQpOgorICAgICAgICAqIHJ1bnRpbWUvVHlwZVNldC5j
cHA6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVNoYXBlOjppbnNwZWN0b3JSZXByZXNlbnRhdGlv
bik6CisgICAgICAgIGBKU09OYCBjbGFzc2VzIG5vdyB1c2UgYFJlZiYmYCB3aGVyZXZlciBwb3Nz
aWJsZSBhbmQgYE9wdGlvbmFsYCBpbnN0ZWFkIG9mIGFuIG91dCBwYXJhbWV0ZXIKKyAgICAgICAg
Zm9yIGBnZXQqYC9gYXMqYCBzbyB0aGF0IHZhbHVlcyBjYW4gYmUgbW9yZSBlYXNpbHkgbWFuaXB1
bGF0ZWQgYW5kIGNhbiBiZSBjb25maWRlbnRseSBrbm93bgorICAgICAgICB0byBleGlzdC4KKwor
ICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2VudW0tdmFsdWVzLmpzb246CisgICAg
ICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvY29tbWFuZC10YXJnZXRUeXBl
LW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uLXJlc3VsdDoKKyAgICAgICAgKiBp
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9jb21tYW5kcy13aXRoLWFzeW5jLWF0dHJp
YnV0ZS5qc29uLXJlc3VsdDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBl
Y3RlZC9jb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbi1y
ZXN1bHQ6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZGVmaW5p
dGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbi1yZXN1bHQ6CisgICAgICAgICogaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5qc29uLXJlc3Vs
dDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9kb21haW4tdGFy
Z2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbi1yZXN1bHQ6CisgICAg
ICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZG9tYWluLXRhcmdldFR5cGVz
Lmpzb24tcmVzdWx0OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVk
L2RvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbi1yZXN1bHQ6CisgICAgICAg
ICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZW51bS12YWx1ZXMuanNvbi1yZXN1
bHQ6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZXZlbnQtdGFy
Z2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbi1yZXN1bHQ6CisgICAg
ICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZXZlbnRzLXdpdGgtb3B0aW9u
YWwtcGFyYW1ldGVycy5qc29uLXJlc3VsdDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9leHBlY3RlZC9nZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbi1y
ZXN1bHQ6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvc2FtZS10
eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbi1yZXN1bHQ6CisgICAgICAgICogaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpz
b24tcmVzdWx0OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3No
b3VsZC1zdHJpcC1jb21tZW50cy5qc29uLXJlc3VsdDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5
cGUuanNvbi1yZXN1bHQ6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0
ZWQvdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24tcmVzdWx0OgorICAgICAgICAqIGlu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tZW51bS10eXBl
Lmpzb24tcmVzdWx0OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVk
L3R5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbi1yZXN1bHQ6CisgICAgICAgICogaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0
cy5qc29uLXJlc3VsdDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3Rl
ZC90eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0OgorICAgICAgICAqIGluc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3ZlcnNpb24uanNvbi1yZXN1bHQ6CisKIDIwMjAt
MDktMDUgIERldmluIFJvdXNzbyAgPGRyb3Vzc29AYXBwbGUuY29tPgogCiAgICAgICAgIFdlYiBJ
bnNwZWN0b3I6IGFsbG93IERPTSBicmVha3BvaW50cyB0byBiZSBjb25maWd1cmVkCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGQw
YjUxZWRiODA2MDg2MGI3YmIxM2MwNjJhNTAzMTFmYTQyNGYxZGEuLjIwMzZiZDMyOWQzMTAxMzk3
Yjg5YmFkNjQyYjhiOTYwNTkwNDZlNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTIgQEAKKzIwMjAtMDktMDgg
IERldmluIFJvdXNzbyAgPGRyb3Vzc29AYXBwbGUuY29tPgorCisgICAgICAgIFdlYiBJbnNwZWN0
b3I6IG1vZGVybml6ZSBnZW5lcmF0ZWQgYmFja2VuZCBwcm90b2NvbCBjb2RlCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTYzMDIKKyAgICAgICAgPHJk
YXI6Ly9wcm9ibGVtLzY4NTQ3NjQ5PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogd3RmL0pTT05WYWx1ZXMuaDoKKyAgICAgICAgKFdURjo6SlNPTklt
cGw6Ok9iamVjdEJhc2U6OnNldFZhbHVlKToKKyAgICAgICAgKFdURjo6SlNPTkltcGw6Ok9iamVj
dEJhc2U6OnNldE9iamVjdCk6CisgICAgICAgIChXVEY6OkpTT05JbXBsOjpPYmplY3RCYXNlOjpz
ZXRBcnJheSk6CisgICAgICAgIChXVEY6OkpTT05JbXBsOjpBcnJheUJhc2U6OnB1c2hWYWx1ZSk6
CisgICAgICAgIChXVEY6OkpTT05JbXBsOjpBcnJheUJhc2U6OnB1c2hPYmplY3QpOgorICAgICAg
ICAoV1RGOjpKU09OSW1wbDo6QXJyYXlCYXNlOjpwdXNoQXJyYXkpOgorICAgICAgICAoV1RGOjpK
U09OSW1wbDo6QXJyYXlPZjo6QXJyYXlPZik6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OkpTT05J
bXBsOjpBcnJheU9mOjpjYXN0ZWRBcnJheSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OkpTT05J
bXBsOjpBcnJheU9mOjphZGRJdGVtKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6SlNPTkltcGw6
OkFycmF5T2Y6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgICogd3RmL0pTT05WYWx1ZXMuY3Bw
OgorICAgICAgICAoV1RGOjpKU09OSW1wbDo6VmFsdWU6OmFzVmFsdWUpOgorICAgICAgICAoV1RG
OjpKU09OSW1wbDo6VmFsdWU6OmFzT2JqZWN0KToKKyAgICAgICAgKFdURjo6SlNPTkltcGw6OlZh
bHVlOjphc0FycmF5KToKKyAgICAgICAgKFdURjo6SlNPTkltcGw6OlZhbHVlOjpwYXJzZUpTT04p
OgorICAgICAgICAoV1RGOjpKU09OSW1wbDo6VmFsdWU6OmFzQm9vbGVhbiBjb25zdCk6CisgICAg
ICAgIChXVEY6OkpTT05JbXBsOjpWYWx1ZTo6YXNEb3VibGUgY29uc3QpOgorICAgICAgICAoV1RG
OjpKU09OSW1wbDo6VmFsdWU6OmFzSW50ZWdlciBjb25zdCk6CisgICAgICAgIChXVEY6OkpTT05J
bXBsOjpWYWx1ZTo6YXNTdHJpbmcgY29uc3QpOgorICAgICAgICAoV1RGOjpKU09OSW1wbDo6T2Jq
ZWN0QmFzZTo6YXNPYmplY3QpOgorICAgICAgICAoV1RGOjpKU09OSW1wbDo6T2JqZWN0QmFzZTo6
bWVtb3J5Q29zdCBjb25zdCk6CisgICAgICAgIChXVEY6OkpTT05JbXBsOjpPYmplY3RCYXNlOjpn
ZXRCb29sZWFuIGNvbnN0KToKKyAgICAgICAgKFdURjo6SlNPTkltcGw6Ok9iamVjdEJhc2U6Omdl
dERvdWJsZSBjb25zdCk6CisgICAgICAgIChXVEY6OkpTT05JbXBsOjpPYmplY3RCYXNlOjpnZXRJ
bnRlZ2VyIGNvbnN0KToKKyAgICAgICAgKFdURjo6SlNPTkltcGw6Ok9iamVjdEJhc2U6OmdldFN0
cmluZyBjb25zdCk6CisgICAgICAgIChXVEY6OkpTT05JbXBsOjpPYmplY3RCYXNlOjpnZXRPYmpl
Y3QgY29uc3QpOgorICAgICAgICAoV1RGOjpKU09OSW1wbDo6T2JqZWN0QmFzZTo6Z2V0QXJyYXkg
Y29uc3QpOgorICAgICAgICAoV1RGOjpKU09OSW1wbDo6T2JqZWN0QmFzZTo6Z2V0VmFsdWUgY29u
c3QpOgorICAgICAgICAoV1RGOjpKU09OSW1wbDo6T2JqZWN0QmFzZTo6T2JqZWN0QmFzZSk6Cisg
ICAgICAgIChXVEY6OkpTT05JbXBsOjpBcnJheUJhc2U6OmFzQXJyYXkpOgorICAgICAgICAoV1RG
OjpKU09OSW1wbDo6QXJyYXlCYXNlOjp3cml0ZUpTT04gY29uc3QpOgorICAgICAgICAoV1RGOjpK
U09OSW1wbDo6QXJyYXlCYXNlOjpBcnJheUJhc2UpOgorICAgICAgICAoV1RGOjpKU09OSW1wbDo6
QXJyYXlCYXNlOjpnZXQgY29uc3QpOgorICAgICAgICAoV1RGOjpKU09OSW1wbDo6QXJyYXlCYXNl
OjptZW1vcnlDb3N0IGNvbnN0KToKKyAgICAgICAgKFdURjo6SlNPTkltcGw6Ok9iamVjdEJhc2U6
Om9wZW5BY2Nlc3NvcnMpOiBEZWxldGVkLgorICAgICAgICBVc2UgYFJlZiYmYCB3aGVyZXZlciBw
b3NzaWJsZSBhbmQgYE9wdGlvbmFsYCBpbnN0ZWFkIG9mIGFuIG91dCBwYXJhbWV0ZXIgZm9yIGBn
ZXQqYC9gYXMqYAorICAgICAgICBzbyB0aGF0IHZhbHVlcyBjYW4gYmUgbW9yZSBlYXNpbHkgbWFu
aXB1bGF0ZWQgYW5kIGNhbiBiZSBjb25maWRlbnRseSBhc3N1bWVkIHRvIGV4aXN0LgorICAgICAg
ICBSZW1vdmUgdW51c2VkIG92ZXJsb2FkcyBhbmQgYWxsb3cgc3ViY2xhc3NlcyB0byBjYWxsIGBh
cypgIGluc3RlYWQgb2YgYG9wZW5BY2Nlc3NvcnNgIGFzCisgICAgICAgIHRoZXkncmUgZWZmZWN0
aXZlbHkgdGhlIHNhbWUgdGhpbmcuCisKIDIwMjAtMDktMDUgIE15bGVzIEMuIE1heGZpZWxkICA8
bW1heGZpZWxkQGFwcGxlLmNvbT4KIAogICAgICAgICBbQ29jb2FdIENURm9udElzU3lzdGVtVUlG
b250KCkgaXMgZmFzdGVyIHRoYW4gQ1RGb250RGVzY3JpcHRvcklzU3lzdGVtVUlGb250KCkvQ1RG
b250Q29weUZvbnREZXNjcmlwdG9yKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAwN2E1MzVkNGQ4NGMzZTlhYmY4
YjI1ZjBlYWE2ZDI4YmVlMzIzYjlkLi40NGUwOWNiMmU5Y2MxMjE0NGEzZWEyYzdjNzFjYzU1NTBh
YTc0MzgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTM5IEBACisyMDIwLTA5LTA4ICBEZXZpbiBS
b3Vzc28gIDxkcm91c3NvQGFwcGxlLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBtb2Rl
cm5pemUgZ2VuZXJhdGVkIGJhY2tlbmQgcHJvdG9jb2wgY29kZQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE2MzAyCisgICAgICAgIDxyZGFyOi8vcHJv
YmxlbS82ODU0NzY0OT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBQcmV2aW91c2x5LCB0aGUgaW5zcGVjdG9yIHByb3RvY29sIHdhcyBleHByZXNzZWQg
aW4gY29kZSBpbiBhIHNvbWV3aGF0IGNvbmZ1c2luZyB3YXk6CisgICAgICAgICAtIHRoZSBlcnJv
ciBzdHJpbmcgd2FzIHRoZSBmaXJzdCBhcmd1bWVudAorICAgICAgICAgLSByZXF1aXJlZCBwYXJh
bWV0ZXJzIHdlcmUgYFRgIG9yIGBjb25zdCBUJmAKKyAgICAgICAgIC0gb3B0aW9uYWwgcGFyYW1l
dGVycyB3ZXJlIGBjb25zdCBUKmAKKyAgICAgICAgIC0gZW51bSBwYXJhbWV0ZXJzIHdlcmUgdGhl
IHVuZGVybHlpbmcgdHlwZSByZXF1aXJpbmcgdGhlIGJhY2tlbmQgZGlzcGF0Y2hlciBoYW5kbGVy
IHRvCisgICAgICAgICAgIHByb2Nlc3MgaXQgaW5zdGVhZCBvZiBpdCBiZWluZyBwcmVwcm9jZXNz
ZWQKKyAgICAgICAgIC0gcmVxdWlyZWQgcmV0dXJucyB3ZXJlIGBUJmAKKyAgICAgICAgIC0gb3B0
aW9uYWwgcmV0dXJucyB3ZXJlIGBUKmAKKyAgICAgICAgVGhpcyBkb2Vzbid0IHJlYWxseSBtYWtl
IGZvciBlYXN5L29idmlvdXMgcmVhZGluZyBvZiBjb2RlIHNpbmNlIHRoZSBvcmRlciBvZiBhcmd1
bWVudHMgaXMKKyAgICAgICAgbm90IHdlaXJkIChlLmcuIGVycm9yIHN0cmluZyBmaXJzdCksIGFu
ZCB0aGF0IHRoZXJlIGFyZSByZWZlcmVuY2VzL3BvaW50ZXJzIHRvIHByaW1pdGl2ZQorICAgICAg
ICB0eXBlcy4KKworICAgICAgICBUaGlzIHBhdGNoIGNsZWFucyB1cCB0aGUgZ2VuZXJhdGVkIGlu
c3BlY3RvciBwcm90b2NvbCBjb2RlIHRvIGJlOgorICAgICAgICAgLSByZXF1aXJlZCBwYXJhbWV0
ZXJzIGFyZSBgVGAgb3IgYFJlZjxUPiYmYAorICAgICAgICAgLSBvcHRpb25hbCBwYXJhbWV0ZXJz
IGFyZSBgT3B0aW9uYWw8VD4mJmAgb3IgYFJlZlB0cjxUPiYmYAorICAgICAgICAgLSBlbnVtIHBh
cmFtZXRlcnMgYXJlIHByZXByb2Nlc3NlZCBhbmQgcGFzc2VkIHRvIHRoZSBiYWNrZW5kIGRpc3Bh
dGNoZXIgaGFuZGxlciBpZiB2YWxpZAorICAgICAgICAgLSBzeW5jaHJvbm91cyBjb21tYW5kcyBy
ZXR1cm4gYEV4cGVjdGVkPFgsIEVycm9yU3RyaW5nPmAgdXNpbmcgdGhlIHNhbWUgdHlwZXMvcnVs
ZXMgYWJvdmUKKyAgICAgICAgICAgd2hlcmUgYFhgIGlzIGVpdGhlciBhIHNpbmdsZSByZXR1cm4g
b3IgYSBgc3RkOjp0dXBsZWAgb2YgbXVsdGlwbGUgcmV0dXJucworCisgICAgICAgIFRoZSBvbmUg
ZXhjZXB0aW9uIHRvIHRoZSBhYm92ZSBpcyBgU3RyaW5nYCwgd2hpY2ggaXMgYWxyZWFkeSBhIHRy
aS1zdGF0ZSBvZiBgbnVsbFN0cmluZygpYCwKKyAgICAgICAgYGVtcHR5U3RyaW5nKClgLCBhbmQg
c29tZXRoaW5nIHNldCwgc28gdGhlcmUncyBubyBuZWVkIHRvIHVzZSBgT3B0aW9uYWw8U3RyaW5n
PmAuCisKKyAgICAgICAgQWxzbyB1c2UgYFByb3RvY29sYCBvYmplY3RzL2B0eXBlZGVmc2Agd2hl
cmV2ZXIgcG9zc2libGUgdG8gZnVydGhlciByZWxhdGUgdGhlIHByb3RvY29sCisgICAgICAgIEpT
T04gYW5kIHRoZSBhY3R1YWwgYmFja2VuZCBkaXNwYXRjaGVyIGhhbmRsZXIgaW1wbGVtZW50YXRp
b24uCisKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQXVkaXRSZXNvdXJjZXNPYmplY3Qu
Y3BwOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDYW52YXMuaDoKKyAgICAgICAgKiBp
bnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzLmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVj
dG9yQ29udHJvbGxlci5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hl
ZXQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHA6CisgICAg
ICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBbmltYXRpb25BZ2VudC5oOgorICAgICAg
ICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQW5pbWF0aW9uQWdlbnQuY3BwOgorICAgICAg
ICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50Lmg6Cisg
ICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQu
Y3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ1BVUHJvZmlsZXJBZ2Vu
dC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ1BVUHJvZmlsZXJBZ2Vu
dC5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDU1NBZ2VudC5oOgor
ICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwOgorICAgICAg
ICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ2FudmFzQWdlbnQuaDoKKyAgICAgICAgKiBp
bnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNhbnZhc0FnZW50LmNwcDoKKyAgICAgICAgKiBpbnNw
ZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2Fn
ZW50cy9JbnNwZWN0b3JET01BZ2VudC5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9J
bnNwZWN0b3JET01EZWJ1Z2dlckFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9J
bnNwZWN0b3JET01EZWJ1Z2dlckFnZW50LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRz
L0luc3BlY3RvckRPTVN0b3JhZ2VBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRz
L0luc3BlY3RvckRhdGFiYXNlQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0lu
c3BlY3RvckRhdGFiYXNlQWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5z
cGVjdG9ySW5kZXhlZERCQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3Bl
Y3RvckluZGV4ZWREQkFnZW50LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3Bl
Y3RvckxheWVyVHJlZUFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0
b3JMYXllclRyZWVBZ2VudC5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0
b3JNZW1vcnlBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yTWVt
b3J5QWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yTmV0d29y
a0FnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JOZXR3b3JrQWdl
bnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUGFnZUFnZW50Lmg6
CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwOgorICAg
ICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5oOgorICAgICAg
ICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5jcHA6CisgICAgICAg
ICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JXb3JrZXJBZ2VudC5oOgorICAgICAgICAqIGlu
c3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yV29ya2VyQWdlbnQuY3BwOgorICAgICAgICAqIGluc3Bl
Y3Rvci9hZ2VudHMvV2ViQ29uc29sZUFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50
cy9XZWJEZWJ1Z2dlckFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9XZWJEZWJ1
Z2dlckFnZW50LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL1dlYkhlYXBBZ2VudC5o
OgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvV2ViSGVhcEFnZW50LmNwcDoKKyAgICAgICAg
KiBpbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZUF1ZGl0QWdlbnQuaDoKKyAgICAgICAgKiBpbnNw
ZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZUF1ZGl0QWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rv
ci9hZ2VudHMvcGFnZS9QYWdlQ29uc29sZUFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2Fn
ZW50cy9wYWdlL1BhZ2VDb25zb2xlQWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2Vu
dHMvcGFnZS9QYWdlRE9NRGVidWdnZXJBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2Vu
dHMvcGFnZS9QYWdlRE9NRGVidWdnZXJBZ2VudC5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL2Fn
ZW50cy9wYWdlL1BhZ2VEZWJ1Z2dlckFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50
cy9wYWdlL1BhZ2VEZWJ1Z2dlckFnZW50LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRz
L3BhZ2UvUGFnZUhlYXBBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvcGFnZS9Q
YWdlSGVhcEFnZW50LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZU5l
dHdvcmtBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlTmV0d29y
a0FnZW50LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZVJ1bnRpbWVB
Z2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlUnVudGltZUFnZW50
LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9TZXJ2aWNlV29ya2VyQWdl
bnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9TZXJ2aWNlV29ya2VyQWdl
bnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlckF1ZGl0QWdl
bnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJDb25zb2xlQWdl
bnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJBdWRpdEFnZW50
LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJET01EZWJ1Z2dl
ckFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2VyRE9NRGVi
dWdnZXJBZ2VudC5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2Vy
RGVidWdnZXJBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtl
ckRlYnVnZ2VyQWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dv
cmtlck5ldHdvcmtBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dv
cmtlck5ldHdvcmtBZ2VudC5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy93b3JrZXIv
V29ya2VyUnVudGltZUFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy93b3JrZXIv
V29ya2VyUnVudGltZUFnZW50LmNwcDoKKyAgICAgICAgRWxpZGVkIGJhY2tlbmQgZGlzcGF0Y2hl
ciBoYW5kbGVyIGNoYW5nZXMgZGVzY3JpYmUgYWJvdmUuCisKKyAgICAgICAgKiBpbnNwZWN0b3Iv
Q29tbWFuZExpbmVBUElIb3N0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbW1hbmRMaW5lQVBJ
SG9zdDo6aW5zcGVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDb21tYW5kTGluZUFQSUhvc3Q6OmNs
ZWFyQ29uc29sZU1lc3NhZ2VzKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRl
bmRIb3N0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnZhbHVlUGF5bG9hZEZyb21KU09OVmFsdWUp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRIb3N0Ojpsb2dEaWFnbm9zdGlj
RXZlbnQpOgorICAgICAgICAqIGluc3BlY3Rvci9UaW1lbGluZVJlY29yZEZhY3RvcnkuaDoKKyAg
ICAgICAgKiBpbnNwZWN0b3IvVGltZWxpbmVSZWNvcmRGYWN0b3J5LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6YXBwZW5kTGF5b3V0Um9vdCk6CisgICAgICAg
ICogTW9kdWxlcy9hcHBsaWNhdGlvbm1hbmlmZXN0L0FwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25NYW5pZmVzdFBhcnNlcjo6cGFyc2VN
YW5pZmVzdCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyOjpw
YXJzZVN0YXJ0VVJMKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uTWFuaWZlc3RQYXJz
ZXI6OnBhcnNlRGlzcGxheSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbk1hbmlmZXN0
UGFyc2VyOjpwYXJzZVNjb3BlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uTWFuaWZl
c3RQYXJzZXI6OnBhcnNlR2VuZXJpY1N0cmluZyk6CisgICAgICAgICogTW9kdWxlcy9lbmNyeXB0
ZWRtZWRpYS9Jbml0RGF0YVJlZ2lzdHJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmV4dHJhY3RL
ZXlJRHNLZXlpZHMpOgorICAgICAgICAqIHBsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NETVV0aWxp
dGllcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDRE1VdGlsaXRpZXM6OnBhcnNlSlNPTk9iamVj
dCk6CisgICAgICAgICogcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJL
ZXkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VMaWNlbnNlRm9ybWF0KToKKyAgICAgICAg
KFdlYkNvcmU6OnBhcnNlTGljZW5zZVJlbGVhc2VBY2tub3dsZWRnZW1lbnRGb3JtYXQpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9DRE1GYWlyUGxheVN0cmVhbWlu
Zy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpleHRyYWN0U2luZkRhdGEpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NETUluc3RhbmNlRmFpclBsYXlTdHJl
YW1pbmdBVkZPYmpDLm1tOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VKU09OVmFsdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VTZXNzaW9uRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpD
Ojp1cGRhdGVMaWNlbnNlKToKKyAgICAgICAgYEpTT05gIGNsYXNzZXMgbm93IHVzZSBgUmVmJiZg
IHdoZXJldmVyIHBvc3NpYmxlIGFuZCBgT3B0aW9uYWxgIGluc3RlYWQgb2YgYW4gb3V0IHBhcmFt
ZXRlcgorICAgICAgICBmb3IgYGdldCpgL2BhcypgIHNvIHRoYXQgdmFsdWVzIGNhbiBiZSBtb3Jl
IGVhc2lseSBtYW5pcHVsYXRlZCBhbmQgY2FuIGJlIGNvbmZpZGVudGx5IGtub3duCisgICAgICAg
IHRvIGV4aXN0LgorCiAyMDIwLTA5LTA1ICBEZXZpbiBSb3Vzc28gIDxkcm91c3NvQGFwcGxlLmNv
bT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBhbGxvdyBET00gYnJlYWtwb2ludHMgdG8gYmUg
Y29uZmlndXJlZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkRyaXZlci9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViRHJpdmVyL0NoYW5nZUxvZwppbmRleCBkYTNiNjRjYWQ1ZWUxNDk1NjY0YzdmOGNiMGY3
ODQ4OTlmNTc4ODk0Li5mMWM5ZjBlNjI0MzYzMWExOTNmMWUyN2MyZmY5OGU1ZTBiNzg1Y2EyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViRHJpdmVyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViRHJp
dmVyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzNyBAQAorMjAyMC0wOS0wOCAgRGV2aW4gUm91c3Nv
ICA8ZHJvdXNzb0BhcHBsZS5jb20+CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogbW9kZXJuaXpl
IGdlbmVyYXRlZCBiYWNrZW5kIHByb3RvY29sIGNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNjMwMgorICAgICAgICA8cmRhcjovL3Byb2JsZW0v
Njg1NDc2NDk+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBDb21tYW5kUmVzdWx0LmNwcDoKKyAgICAgICAgKFdlYkRyaXZlcjo6Q29tbWFuZFJlc3Vs
dDo6Q29tbWFuZFJlc3VsdCk6CisgICAgICAgICogU2Vzc2lvbi5jcHA6CisgICAgICAgIChXZWJE
cml2ZXI6OmZpcnN0V2luZG93SGFuZGxlSW5SZXN1bHQpOgorICAgICAgICAoV2ViRHJpdmVyOjpT
ZXNzaW9uOjpnZXRUaW1lb3V0cyk6CisgICAgICAgIChXZWJEcml2ZXI6OlNlc3Npb246OmNyZWF0
ZVRvcExldmVsQnJvd3NpbmdDb250ZXh0KToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6
aGFuZGxlVXNlclByb21wdHMpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjpyZXBvcnRV
bmV4cGVjdGVkQWxlcnRPcGVuKToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6Z28pOgor
ICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjpnZXRDdXJyZW50VVJMKToKKyAgICAgICAgKFdl
YkRyaXZlcjo6U2Vzc2lvbjo6YmFjayk6CisgICAgICAgIChXZWJEcml2ZXI6OlNlc3Npb246OmZv
cndhcmQpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjpyZWZyZXNoKToKKyAgICAgICAg
KFdlYkRyaXZlcjo6U2Vzc2lvbjo6Z2V0VGl0bGUpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNz
aW9uOjpnZXRXaW5kb3dIYW5kbGUpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjpjbG9z
ZVRvcExldmVsQnJvd3NpbmdDb250ZXh0KToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6
c3dpdGNoVG9XaW5kb3cpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjpnZXRXaW5kb3dI
YW5kbGVzKToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6bmV3V2luZG93KToKKyAgICAg
ICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6c3dpdGNoVG9GcmFtZSk6CisgICAgICAgIChXZWJEcml2
ZXI6OlNlc3Npb246OnN3aXRjaFRvUGFyZW50RnJhbWUpOgorICAgICAgICAoV2ViRHJpdmVyOjpT
ZXNzaW9uOjpnZXRUb3BsZXZlbEJyb3dzaW5nQ29udGV4dFJlY3QpOgorICAgICAgICAoV2ViRHJp
dmVyOjpTZXNzaW9uOjpzZXRXaW5kb3dSZWN0KToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lv
bjo6bWF4aW1pemVXaW5kb3cpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjptaW5pbWl6
ZVdpbmRvdyk6CisgICAgICAgIChXZWJEcml2ZXI6OlNlc3Npb246OmZ1bGxzY3JlZW5XaW5kb3cp
OgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjpjcmVhdGVFbGVtZW50KToKKyAgICAgICAg
KFdlYkRyaXZlcjo6U2Vzc2lvbjo6ZXh0cmFjdEVsZW1lbnRJRCk6CisgICAgICAgIChXZWJEcml2
ZXI6OlNlc3Npb246OmNvbXB1dGVFbGVtZW50TGF5b3V0KToKKyAgICAgICAgKFdlYkRyaXZlcjo6
U2Vzc2lvbjo6ZmluZEVsZW1lbnRzKToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6Z2V0
QWN0aXZlRWxlbWVudCk6CisgICAgICAgIChXZWJEcml2ZXI6OlNlc3Npb246OmlzRWxlbWVudFNl
bGVjdGVkKToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6Z2V0RWxlbWVudFRleHQpOgor
ICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjpnZXRFbGVtZW50VGFnTmFtZSk6CisgICAgICAg
IChXZWJEcml2ZXI6OlNlc3Npb246OmdldEVsZW1lbnRSZWN0KToKKyAgICAgICAgKFdlYkRyaXZl
cjo6U2Vzc2lvbjo6aXNFbGVtZW50RW5hYmxlZCk6CisgICAgICAgIChXZWJEcml2ZXI6OlNlc3Np
b246OmlzRWxlbWVudERpc3BsYXllZCk6CisgICAgICAgIChXZWJEcml2ZXI6OlNlc3Npb246Omdl
dEVsZW1lbnRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjpnZXRFbGVt
ZW50UHJvcGVydHkpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjpnZXRFbGVtZW50Q1NT
VmFsdWUpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjp3YWl0Rm9yTmF2aWdhdGlvblRv
Q29tcGxldGUpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjplbGVtZW50SXNGaWxlVXBs
b2FkKToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6cGFyc2VFbGVtZW50SXNGaWxlVXBs
b2FkUmVzdWx0KToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6c2VsZWN0T3B0aW9uRWxl
bWVudCk6CisgICAgICAgIChXZWJEcml2ZXI6OlNlc3Npb246OmVsZW1lbnRDbGljayk6CisgICAg
ICAgIChXZWJEcml2ZXI6OlNlc3Npb246OmVsZW1lbnRJc0VkaXRhYmxlKToKKyAgICAgICAgKFdl
YkRyaXZlcjo6U2Vzc2lvbjo6ZWxlbWVudENsZWFyKToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vz
c2lvbjo6c2V0SW5wdXRGaWxlVXBsb2FkRmlsZXMpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNz
aW9uOjplbGVtZW50U2VuZEtleXMpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjpnZXRQ
YWdlU291cmNlKToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6aGFuZGxlU2NyaXB0UmVz
dWx0KToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6ZXhlY3V0ZVNjcmlwdCk6CisgICAg
ICAgIChXZWJEcml2ZXI6OlNlc3Npb246OnBlcmZvcm1Nb3VzZUludGVyYWN0aW9uKToKKyAgICAg
ICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6cGVyZm9ybUtleWJvYXJkSW50ZXJhY3Rpb25zKToKKyAg
ICAgICAgKFdlYkRyaXZlcjo6YnVpbHRBdXRvbWF0aW9uQ29va2llKToKKyAgICAgICAgKFdlYkRy
aXZlcjo6c2VyaWFsaXplQ29va2llKToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6Z2V0
QWxsQ29va2llcyk6CisgICAgICAgIChXZWJEcml2ZXI6OlNlc3Npb246OmdldE5hbWVkQ29va2ll
KToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6YWRkQ29va2llKToKKyAgICAgICAgKFdl
YkRyaXZlcjo6U2Vzc2lvbjo6ZGVsZXRlQ29va2llKToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vz
c2lvbjo6ZGVsZXRlQWxsQ29va2llcyk6CisgICAgICAgIChXZWJEcml2ZXI6OlNlc3Npb246OnBl
cmZvcm1BY3Rpb25zKToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6cmVsZWFzZUFjdGlv
bnMpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjpkaXNtaXNzQWxlcnQpOgorICAgICAg
ICAoV2ViRHJpdmVyOjpTZXNzaW9uOjphY2NlcHRBbGVydCk6CisgICAgICAgIChXZWJEcml2ZXI6
OlNlc3Npb246OmdldEFsZXJ0VGV4dCk6CisgICAgICAgIChXZWJEcml2ZXI6OlNlc3Npb246OnNl
bmRBbGVydFRleHQpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjp0YWtlU2NyZWVuc2hv
dCk6CisgICAgICAgICogU2Vzc2lvbkhvc3QuY3BwOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNz
aW9uSG9zdDo6ZGlzcGF0Y2hNZXNzYWdlKToKKyAgICAgICAgKiBXZWJEcml2ZXJTZXJ2aWNlLmg6
CisgICAgICAgICogV2ViRHJpdmVyU2VydmljZS5jcHA6CisgICAgICAgIChXZWJEcml2ZXI6Oldl
YkRyaXZlclNlcnZpY2U6OmhhbmRsZVJlcXVlc3QpOgorICAgICAgICAoV2ViRHJpdmVyOjpXZWJE
cml2ZXJTZXJ2aWNlOjpzZW5kUmVzcG9uc2UgY29uc3QpOgorICAgICAgICAoV2ViRHJpdmVyOjp2
YWx1ZUFzTnVtYmVySW5SYW5nZSk6CisgICAgICAgIChXZWJEcml2ZXI6OmRlc2VyaWFsaXplVGlt
ZW91dHMpOgorICAgICAgICAoV2ViRHJpdmVyOjpkZXNlcmlhbGl6ZVByb3h5KToKKyAgICAgICAg
KFdlYkRyaXZlcjo6V2ViRHJpdmVyU2VydmljZTo6cGFyc2VDYXBhYmlsaXRpZXMgY29uc3QpOgor
ICAgICAgICAoV2ViRHJpdmVyOjpXZWJEcml2ZXJTZXJ2aWNlOjpmaW5kU2Vzc2lvbk9yQ29tcGxl
dGVXaXRoRXJyb3IpOgorICAgICAgICAoV2ViRHJpdmVyOjpXZWJEcml2ZXJTZXJ2aWNlOjp2YWxp
ZGF0ZWRDYXBhYmlsaXRpZXMgY29uc3QpOgorICAgICAgICAoV2ViRHJpdmVyOjpXZWJEcml2ZXJT
ZXJ2aWNlOjptZXJnZUNhcGFiaWxpdGllcyBjb25zdCk6CisgICAgICAgIChXZWJEcml2ZXI6Oldl
YkRyaXZlclNlcnZpY2U6Om1hdGNoQ2FwYWJpbGl0aWVzIGNvbnN0KToKKyAgICAgICAgKFdlYkRy
aXZlcjo6V2ViRHJpdmVyU2VydmljZTo6cHJvY2Vzc0NhcGFiaWxpdGllcyBjb25zdCk6CisgICAg
ICAgIChXZWJEcml2ZXI6OldlYkRyaXZlclNlcnZpY2U6OmNyZWF0ZVNlc3Npb24pOgorICAgICAg
ICAoV2ViRHJpdmVyOjpXZWJEcml2ZXJTZXJ2aWNlOjpkZWxldGVTZXNzaW9uKToKKyAgICAgICAg
KFdlYkRyaXZlcjo6V2ViRHJpdmVyU2VydmljZTo6Z28pOgorICAgICAgICAoV2ViRHJpdmVyOjpX
ZWJEcml2ZXJTZXJ2aWNlOjpzZXRXaW5kb3dSZWN0KToKKyAgICAgICAgKFdlYkRyaXZlcjo6V2Vi
RHJpdmVyU2VydmljZTo6Y2xvc2VXaW5kb3cpOgorICAgICAgICAoV2ViRHJpdmVyOjpXZWJEcml2
ZXJTZXJ2aWNlOjpzd2l0Y2hUb1dpbmRvdyk6CisgICAgICAgIChXZWJEcml2ZXI6OldlYkRyaXZl
clNlcnZpY2U6Om5ld1dpbmRvdyk6CisgICAgICAgIChXZWJEcml2ZXI6OldlYkRyaXZlclNlcnZp
Y2U6OnN3aXRjaFRvRnJhbWUpOgorICAgICAgICAoV2ViRHJpdmVyOjpmaW5kRWxlbWVudE9yQ29t
cGxldGVXaXRoRXJyb3IpOgorICAgICAgICAoV2ViRHJpdmVyOjpmaW5kU3RyYXRlZ3lBbmRTZWxl
Y3Rvck9yQ29tcGxldGVXaXRoRXJyb3IpOgorICAgICAgICAoV2ViRHJpdmVyOjpXZWJEcml2ZXJT
ZXJ2aWNlOjpnZXRFbGVtZW50QXR0cmlidXRlKToKKyAgICAgICAgKFdlYkRyaXZlcjo6V2ViRHJp
dmVyU2VydmljZTo6Z2V0RWxlbWVudFByb3BlcnR5KToKKyAgICAgICAgKFdlYkRyaXZlcjo6V2Vi
RHJpdmVyU2VydmljZTo6Z2V0RWxlbWVudENTU1ZhbHVlKToKKyAgICAgICAgKFdlYkRyaXZlcjo6
V2ViRHJpdmVyU2VydmljZTo6ZWxlbWVudFNlbmRLZXlzKToKKyAgICAgICAgKFdlYkRyaXZlcjo6
ZmluZFNjcmlwdEFuZEFyZ3VtZW50c09yQ29tcGxldGVXaXRoRXJyb3IpOgorICAgICAgICAoV2Vi
RHJpdmVyOjpXZWJEcml2ZXJTZXJ2aWNlOjpnZXROYW1lZENvb2tpZSk6CisgICAgICAgIChXZWJE
cml2ZXI6OmRlc2VyaWFsaXplQ29va2llKToKKyAgICAgICAgKFdlYkRyaXZlcjo6V2ViRHJpdmVy
U2VydmljZTo6YWRkQ29va2llKToKKyAgICAgICAgKFdlYkRyaXZlcjo6V2ViRHJpdmVyU2Vydmlj
ZTo6ZGVsZXRlQ29va2llKToKKyAgICAgICAgKFdlYkRyaXZlcjo6cHJvY2Vzc1BhdXNlQWN0aW9u
KToKKyAgICAgICAgKFdlYkRyaXZlcjo6cHJvY2Vzc051bGxBY3Rpb24pOgorICAgICAgICAoV2Vi
RHJpdmVyOjpwcm9jZXNzS2V5QWN0aW9uKToKKyAgICAgICAgKFdlYkRyaXZlcjo6cHJvY2Vzc1Bv
aW50ZXJBY3Rpb24pOgorICAgICAgICAoV2ViRHJpdmVyOjpwcm9jZXNzUG9pbnRlclBhcmFtZXRl
cnMpOgorICAgICAgICAoV2ViRHJpdmVyOjpwcm9jZXNzSW5wdXRBY3Rpb25TZXF1ZW5jZSk6Cisg
ICAgICAgIChXZWJEcml2ZXI6OldlYkRyaXZlclNlcnZpY2U6OnBlcmZvcm1BY3Rpb25zKToKKyAg
ICAgICAgKFdlYkRyaXZlcjo6V2ViRHJpdmVyU2VydmljZTo6c2VuZEFsZXJ0VGV4dCk6CisgICAg
ICAgICogV2ViRHJpdmVyL2d0ay9XZWJEcml2ZXJTZXJ2aWNlR3RrLmNwcDoKKyAgICAgICAgKFdl
YkRyaXZlcjo6V2ViRHJpdmVyU2VydmljZTo6cGxhdGZvcm1NYXRjaENhcGFiaWxpdHkpOgorICAg
ICAgICAoV2ViRHJpdmVyOjpXZWJEcml2ZXJTZXJ2aWNlOjpwbGF0Zm9ybVZhbGlkYXRlQ2FwYWJp
bGl0eSk6CisgICAgICAgIChXZWJEcml2ZXI6OldlYkRyaXZlclNlcnZpY2U6OnBsYXRmb3JtUGFy
c2VDYXBhYmlsaXRpZXMpOgorICAgICAgICAqIFdlYkRyaXZlci93aW4vV2ViRHJpdmVyU2Vydmlj
ZVdpbi5jcHA6CisgICAgICAgIChXZWJEcml2ZXI6OldlYkRyaXZlclNlcnZpY2U6OnBsYXRmb3Jt
TWF0Y2hDYXBhYmlsaXR5KToKKyAgICAgICAgKFdlYkRyaXZlcjo6V2ViRHJpdmVyU2VydmljZTo6
cGxhdGZvcm1WYWxpZGF0ZUNhcGFiaWxpdHkpOgorICAgICAgICAoV2ViRHJpdmVyOjpXZWJEcml2
ZXJTZXJ2aWNlOjpwbGF0Zm9ybVBhcnNlQ2FwYWJpbGl0aWVzKToKKyAgICAgICAgKiBXZWJEcml2
ZXIvd3BlL1dlYkRyaXZlclNlcnZpY2VXUEUuY3BwOgorICAgICAgICAoV2ViRHJpdmVyOjpXZWJE
cml2ZXJTZXJ2aWNlOjpwbGF0Zm9ybU1hdGNoQ2FwYWJpbGl0eSk6CisgICAgICAgIChXZWJEcml2
ZXI6OldlYkRyaXZlclNlcnZpY2U6OnBsYXRmb3JtVmFsaWRhdGVDYXBhYmlsaXR5KToKKyAgICAg
ICAgKFdlYkRyaXZlcjo6V2ViRHJpdmVyU2VydmljZTo6cGxhdGZvcm1QYXJzZUNhcGFiaWxpdGll
cyk6CisgICAgICAgIGBKU09OYCBjbGFzc2VzIG5vdyB1c2UgYFJlZiYmYCB3aGVyZXZlciBwb3Nz
aWJsZSBhbmQgYE9wdGlvbmFsYCBpbnN0ZWFkIG9mIGFuIG91dCBwYXJhbWV0ZXIKKyAgICAgICAg
Zm9yIGBnZXQqYC9gYXMqYCBzbyB0aGF0IHZhbHVlcyBjYW4gYmUgbW9yZSBlYXNpbHkgbWFuaXB1
bGF0ZWQgYW5kIGNhbiBiZSBjb25maWRlbnRseSBrbm93bgorICAgICAgICB0byBleGlzdC4KKwog
MjAyMC0wNy0xNSAgRnVqaWkgSGlyb25vcmkgIDxIaXJvbm9yaS5GdWppaUBzb255LmNvbT4KIAog
ICAgICAgICBbQ01ha2VdW1dlYkRyaXZlcl0gR2VuZXJhdGluZyBXZWJEcml2ZXJBdG9tcy5jcHAg
aXMgcmFyZWx5IGZhaWxpbmcgYXMgIkltcG9ydEVycm9yOiBObyBtb2R1bGUgbmFtZWQganNtaW4i
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvQ2hhbmdlTG9nIGIvU291cmNlL1dl
Ykluc3BlY3RvclVJL0NoYW5nZUxvZwppbmRleCA5OWNjMWM3MDFiMTNlYjhlYmZmNGI4MjQ2OTll
NTQ4MDgwZTA5NmNkLi40Y2U4OTQ5Mjg1ODZjMzE4MjhlYzJhNjUwMTUyMTlmYTdlZWJjZjA0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNCBAQAorMjAyMC0wOS0wOCAgRGV2
aW4gUm91c3NvICA8ZHJvdXNzb0BhcHBsZS5jb20+CisKKyAgICAgICAgV2ViIEluc3BlY3Rvcjog
bW9kZXJuaXplIGdlbmVyYXRlZCBiYWNrZW5kIHByb3RvY29sIGNvZGUKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNjMwMgorICAgICAgICA8cmRhcjov
L3Byb2JsZW0vNjg1NDc2NDk+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0NTU01hbmFnZXIuanM6Cisg
ICAgICAgIChXSS5DU1NNYW5hZ2VyLnByb3RvdHlwZS5zZXQgZm9yY2VkQXBwZWFyYW5jZSk6Cisg
ICAgICAgIE5vdyB0aGF0IGVudW1zIGFyZSBwcm9jZXNzZWQgYmVmb3JlIGJlaW5nIHBhc3NlZCB0
byBiYWNrZW5kIGRpc3BhY2hlciBoYW5kbGVycywgdGhlCisgICAgICAgIGBhcHBlYXJhbmNlYCBw
YXJhbWV0ZXIgb2YgYFBhZ2Uuc2V0Rm9yY2VkQXBwZWFyYW5jZWAgbXVzdCBiZSBtYXJrZWQgYG9w
dGlvbmFsYCBhcworICAgICAgICB0aGVyZSdzIG5vIHdheSBmb3IgaXQgdG8gYWNjZXB0IGFuIGVt
cHR5IHN0cmluZywgYXMgdGhhdCdzIG5vdCBwb3NzaWJsZSBmb3IgYW4gZW51bS4KKyAgICAgICAg
QXMgc3VjaCwgcmV3b3JrIHRoZSBmcm9udGVuZCBsb2dpYyBmb3IgaW52b2tpbmcgYFBhZ2Uuc2V0
Rm9yY2VkQXBwZWFyYW5jZWAgdG8gaW5zdGVhZAorICAgICAgICBub3QgcHJvdmlkZSBhbiBgYXBw
ZWFyYW5jZWAgcGFyYW1ldGVyIGF0IGFsbCB3aGVuIHdhbnRpbmcgdG8gInVuc2V0IiBpdC4KKwor
ICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVmlld3MvU2V0dGluZ3NUYWJDb250ZW50Vmlldy5qczoK
KyAgICAgICAgKFdJLlNldHRpbmdzVGFiQ29udGVudFZpZXcucHJvdG90eXBlLl9jcmVhdGVDb25z
b2xlU2V0dGluZ3NWaWV3KToKKyAgICAgICAgTm93IHRoYXQgYWxsIGxvZ2dpbmcgY2hhbm5lbHMg
bWF0Y2hpbmcgYSBgQ29uc29sZS5DaGFubmVsU291cmNlYCBhcmUgcmV0dXJuZWQgaW5zdGVhZCBv
ZgorICAgICAgICBqdXN0IHRoZSBoYXJkY29kZWQgbGlzdCwgY2hlY2sgZm9yIGEgbWF0Y2hpbmcg
YFdJLlVJU3RyaW5nYCBiZWZvcmUgc2hvd2luZyBhIGA8c2VsZWN0PmAuCisKIDIwMjAtMDktMDUg
IERldmluIFJvdXNzbyAgPGRyb3Vzc29AYXBwbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0
b3I6IGFsbG93IERPTSBicmVha3BvaW50cyB0byBiZSBjb25maWd1cmVkCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDFj
ODc4MDc4MzQzYTMyMzdjZGM3YjgxNDJkOTRjMjU5NzJkYjlkNzcuLjJkMzk1ZTlkOWRiMmQ0OTNk
NzgyOTEzZjM1MTc4ODYyODEzODA4YmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdl
TG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTUgQEAKKzIwMjAt
MDktMDggIERldmluIFJvdXNzbyAgPGRyb3Vzc29AYXBwbGUuY29tPgorCisgICAgICAgIFdlYiBJ
bnNwZWN0b3I6IG1vZGVybml6ZSBnZW5lcmF0ZWQgYmFja2VuZCBwcm90b2NvbCBjb2RlCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTYzMDIKKyAgICAg
ICAgPHJkYXI6Ly9wcm9ibGVtLzY4NTQ3NjQ5PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFByZXZpb3VzbHksIHRoZSBpbnNwZWN0b3IgcHJvdG9jb2wg
d2FzIGV4cHJlc3NlZCBpbiBjb2RlIGluIGEgc29tZXdoYXQgY29uZnVzaW5nIHdheToKKyAgICAg
ICAgIC0gdGhlIGVycm9yIHN0cmluZyB3YXMgdGhlIGZpcnN0IGFyZ3VtZW50CisgICAgICAgICAt
IHJlcXVpcmVkIHBhcmFtZXRlcnMgd2VyZSBgVGAgb3IgYGNvbnN0IFQmYAorICAgICAgICAgLSBv
cHRpb25hbCBwYXJhbWV0ZXJzIHdlcmUgYGNvbnN0IFQqYAorICAgICAgICAgLSBlbnVtIHBhcmFt
ZXRlcnMgd2VyZSB0aGUgdW5kZXJseWluZyB0eXBlIHJlcXVpcmluZyB0aGUgYmFja2VuZCBkaXNw
YXRjaGVyIGhhbmRsZXIgdG8KKyAgICAgICAgICAgcHJvY2VzcyBpdCBpbnN0ZWFkIG9mIGl0IGJl
aW5nIHByZXByb2Nlc3NlZAorICAgICAgICAgLSByZXF1aXJlZCByZXR1cm5zIHdlcmUgYFQmYAor
ICAgICAgICAgLSBvcHRpb25hbCByZXR1cm5zIHdlcmUgYFQqYAorICAgICAgICBUaGlzIGRvZXNu
J3QgcmVhbGx5IG1ha2UgZm9yIGVhc3kvb2J2aW91cyByZWFkaW5nIG9mIGNvZGUgc2luY2UgdGhl
IG9yZGVyIG9mIGFyZ3VtZW50cyBpcworICAgICAgICBub3Qgd2VpcmQgKGUuZy4gZXJyb3Igc3Ry
aW5nIGZpcnN0KSwgYW5kIHRoYXQgdGhlcmUgYXJlIHJlZmVyZW5jZXMvcG9pbnRlcnMgdG8gcHJp
bWl0aXZlCisgICAgICAgIHR5cGVzLgorCisgICAgICAgIFRoaXMgcGF0Y2ggY2xlYW5zIHVwIHRo
ZSBnZW5lcmF0ZWQgaW5zcGVjdG9yIHByb3RvY29sIGNvZGUgdG8gYmU6CisgICAgICAgICAtIHJl
cXVpcmVkIHBhcmFtZXRlcnMgYXJlIGBUYCBvciBgUmVmPFQ+JiZgCisgICAgICAgICAtIG9wdGlv
bmFsIHBhcmFtZXRlcnMgYXJlIGBPcHRpb25hbDxUPiYmYCBvciBgUmVmUHRyPFQ+JiZgCisgICAg
ICAgICAtIGVudW0gcGFyYW1ldGVycyBhcmUgcHJlcHJvY2Vzc2VkIGFuZCBwYXNzZWQgdG8gdGhl
IGJhY2tlbmQgZGlzcGF0Y2hlciBoYW5kbGVyIGlmIHZhbGlkCisgICAgICAgICAtIHN5bmNocm9u
b3VzIGNvbW1hbmRzIHJldHVybiBgRXhwZWN0ZWQ8WCwgRXJyb3JTdHJpbmc+YCB1c2luZyB0aGUg
c2FtZSB0eXBlcy9ydWxlcyBhYm92ZQorICAgICAgICAgICB3aGVyZSBgWGAgaXMgZWl0aGVyIGEg
c2luZ2xlIHJldHVybiBvciBhIGBzdGQ6OnR1cGxlYCBvZiBtdWx0aXBsZSByZXR1cm5zCisKKyAg
ICAgICAgVGhlIG9uZSBleGNlcHRpb24gdG8gdGhlIGFib3ZlIGlzIGBTdHJpbmdgLCB3aGljaCBp
cyBhbHJlYWR5IGEgdHJpLXN0YXRlIG9mIGBudWxsU3RyaW5nKClgLAorICAgICAgICBgZW1wdHlT
dHJpbmcoKWAsIGFuZCBzb21ldGhpbmcgc2V0LCBzbyB0aGVyZSdzIG5vIG5lZWQgdG8gdXNlIGBP
cHRpb25hbDxTdHJpbmc+YC4KKworICAgICAgICBBbHNvIHVzZSBgUHJvdG9jb2xgIG9iamVjdHMv
YHR5cGVkZWZzYCB3aGVyZXZlciBwb3NzaWJsZSB0byBmdXJ0aGVyIHJlbGF0ZSB0aGUgcHJvdG9j
b2wKKyAgICAgICAgSlNPTiBhbmQgdGhlIGFjdHVhbCBiYWNrZW5kIGRpc3BhdGNoZXIgaGFuZGxl
ciBpbXBsZW1lbnRhdGlvbi4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BdXRvbWF0aW9uL0F1dG9t
YXRpb24uanNvbjoKKyAgICAgICAgYENvb3JkaW5hdGVTeXN0ZW1gIGhhcyBgUGFnZWAgYW5kIGBW
aWV3cG9ydGAgZW51bSB2YWx1ZXMsIGJ1dCBgV2ViQXV0b21hdGlvblNlc3Npb25gIGNoZWNrcwor
ICAgICAgICBmb3IgYCJQYWdlImAgYW5kIGAiTGF5b3V0Vmlld3BvcnQiYC4gQWRkIGEgYExheW91
dFZpZXdwb3J0YCBlbnVtIHZhbHVlIG5vdyB0aGF0IGVudW1zIGFyZQorICAgICAgICBwcm9jZXNz
ZWQgYmVmb3JlIGJlaW5nIHBhc3NlZCB0byBiYWNrZW5kIGRpc3BhY2hlciBoYW5kbGVycyB0byBw
cmVzZXJ2ZSBmdW5jdGlvbmFsaXR5LgorCisgICAgICAgICogVUlQcm9jZXNzL0luc3BlY3Rvci9B
Z2VudHMvSW5zcGVjdG9yQnJvd3NlckFnZW50Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0luc3Bl
Y3Rvci9BZ2VudHMvSW5zcGVjdG9yQnJvd3NlckFnZW50LmNwcDoKKyAgICAgICAgKiBVSVByb2Nl
c3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbk1hY3Jvcy5oOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmg6CisgICAgICAgICogVUlQ
cm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9BdXRvbWF0aW9uL21hYy9XZWJBdXRvbWF0aW9uU2Vzc2lvbk1hYy5tbToKKyAgICAg
ICAgRWxpZGVkIGJhY2tlbmQgZGlzcGF0Y2hlciBoYW5kbGVyIGNoYW5nZXMgZGVzY3JpYmUgYWJv
dmUuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yL3NvY2tldC9SZW1vdGVJbnNwZWN0
b3JDbGllbnQuY3BwOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbnNwZWN0b3JDbGllbnQ6OnNl
dFRhcmdldExpc3QpOgorICAgICAgICBgSlNPTmAgY2xhc3NlcyBub3cgdXNlIGBSZWYmJmAgd2hl
cmV2ZXIgcG9zc2libGUgYW5kIGBPcHRpb25hbGAgaW5zdGVhZCBvZiBhbiBvdXQgcGFyYW1ldGVy
CisgICAgICAgIGZvciBgZ2V0KmAvYGFzKmAgc28gdGhhdCB2YWx1ZXMgY2FuIGJlIG1vcmUgZWFz
aWx5IG1hbmlwdWxhdGVkIGFuZCBjYW4gYmUgY29uZmlkZW50bHkga25vd24KKyAgICAgICAgdG8g
ZXhpc3QuCisKIDIwMjAtMDktMDUgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgogCiAg
ICAgICAgIFtXZWJJRExdIFJlYWxpZ24gb3VyIElETCBleHRlbmRlZCBhdHRyaWJ1dGUgbmFtZXMg
d2l0aCB0aG9zZSBzcGVjaWZpZWQgaW4gV2ViSURMCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYmluZGluZ3MvU2NyaXB0VmFsdWUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2JpbmRpbmdzL1NjcmlwdFZhbHVlLmNwcAppbmRleCA2Yjg1M2M5MzFmMWRjZTkyNTNiYmFjMDZh
OTVlNmFhYzUyN2NmMjVhLi43OTY4YjkwYTczYjI4MmRmNTk4MjI1NmE2ZWRjYjJkNmU1NzQzOTZl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvU2NyaXB0VmFsdWUu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9TY3JpcHRWYWx1ZS5jcHAK
QEAgLTY5LDcgKzY5LDcgQEAgc3RhdGljIFJlZlB0cjxKU09OOjpWYWx1ZT4ganNUb0luc3BlY3Rv
clZhbHVlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmEKICAgICAgICAgICAgICAg
ICBhdXRvIGVsZW1lbnRWYWx1ZSA9IGpzVG9JbnNwZWN0b3JWYWx1ZShnbG9iYWxPYmplY3QsIGFy
cmF5LmdldEluZGV4KGdsb2JhbE9iamVjdCwgaSksIG1heERlcHRoKTsKICAgICAgICAgICAgICAg
ICBpZiAoIWVsZW1lbnRWYWx1ZSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0gICAgICAgICAgICAgICAgaW5zcGVjdG9yQXJyYXktPnB1c2hWYWx1ZShXVEZNb3ZlKGVsZW1l
bnRWYWx1ZSkpOworICAgICAgICAgICAgICAgIGluc3BlY3RvckFycmF5LT5wdXNoVmFsdWUoZWxl
bWVudFZhbHVlLnJlbGVhc2VOb25OdWxsKCkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAg
cmV0dXJuIGluc3BlY3RvckFycmF5OwogICAgICAgICB9CkBAIC04Miw3ICs4Miw3IEBAIHN0YXRp
YyBSZWZQdHI8SlNPTjo6VmFsdWU+IGpzVG9JbnNwZWN0b3JWYWx1ZShKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU1ZhCiAgICAgICAgICAgICBhdXRvIGluc3BlY3RvclZhbHVlID0ganNU
b0luc3BlY3RvclZhbHVlKGdsb2JhbE9iamVjdCwgb2JqZWN0LmdldChnbG9iYWxPYmplY3QsIG5h
bWUpLCBtYXhEZXB0aCk7CiAgICAgICAgICAgICBpZiAoIWluc3BlY3RvclZhbHVlKQogICAgICAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICAgICAgaW5zcGVjdG9yT2JqZWN0LT5z
ZXRWYWx1ZShuYW1lLnN0cmluZygpLCBXVEZNb3ZlKGluc3BlY3RvclZhbHVlKSk7CisgICAgICAg
ICAgICBpbnNwZWN0b3JPYmplY3QtPnNldFZhbHVlKG5hbWUuc3RyaW5nKCksIGluc3BlY3RvclZh
bHVlLnJlbGVhc2VOb25OdWxsKCkpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBpbnNwZWN0
b3JPYmplY3Q7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9Bc3luY1N0YWNrVHJhY2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9Bc3luY1N0YWNrVHJhY2UuY3BwCmluZGV4IDU0NTBlMmYzYzAwOWM2MDE4Y2Y5YzUzMGEwMzZj
M2RiN2E2MzQ1MGUuLmE1OTYzOTVjYmVhNzkxZTcwYmUzZTIzNjJmZTU3ZjQzODM0YTU5NGEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvQXN5bmNTdGFja1RyYWNl
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0FzeW5jU3RhY2tUcmFj
ZS5jcHAKQEAgLTk3LDcgKzk3LDcgQEAgdm9pZCBBc3luY1N0YWNrVHJhY2U6OmRpZENhbmNlbEFz
eW5jQ2FsbCgpCiAgICAgbV9zdGF0ZSA9IFN0YXRlOjpDYW5jZWxlZDsKIH0KIAotUmVmUHRyPFBy
b3RvY29sOjpDb25zb2xlOjpTdGFja1RyYWNlPiBBc3luY1N0YWNrVHJhY2U6OmJ1aWxkSW5zcGVj
dG9yT2JqZWN0KCkgY29uc3QKK1JlZjxQcm90b2NvbDo6Q29uc29sZTo6U3RhY2tUcmFjZT4gQXN5
bmNTdGFja1RyYWNlOjpidWlsZEluc3BlY3Rvck9iamVjdCgpIGNvbnN0CiB7CiAgICAgUmVmUHRy
PFByb3RvY29sOjpDb25zb2xlOjpTdGFja1RyYWNlPiB0b3BTdGFja1RyYWNlOwogICAgIFJlZlB0
cjxQcm90b2NvbDo6Q29uc29sZTo6U3RhY2tUcmFjZT4gcHJldmlvdXNTdGFja1RyYWNlOwpAQCAt
MTIwLDEzICsxMjAsMTMgQEAgUmVmUHRyPFByb3RvY29sOjpDb25zb2xlOjpTdGFja1RyYWNlPiBB
c3luY1N0YWNrVHJhY2U6OmJ1aWxkSW5zcGVjdG9yT2JqZWN0KCkgY28KICAgICAgICAgICAgIHRv
cFN0YWNrVHJhY2UgPSBwcm90b2NvbE9iamVjdC5wdHIoKTsKIAogICAgICAgICBpZiAocHJldmlv
dXNTdGFja1RyYWNlKQotICAgICAgICAgICAgcHJldmlvdXNTdGFja1RyYWNlLT5zZXRQYXJlbnRT
dGFja1RyYWNlKHByb3RvY29sT2JqZWN0LnB0cigpKTsKKyAgICAgICAgICAgIHByZXZpb3VzU3Rh
Y2tUcmFjZS0+c2V0UGFyZW50U3RhY2tUcmFjZShwcm90b2NvbE9iamVjdC5jb3B5UmVmKCkpOwog
CiAgICAgICAgIHByZXZpb3VzU3RhY2tUcmFjZSA9IFdURk1vdmUocHJvdG9jb2xPYmplY3QpOwog
ICAgICAgICBzdGFja1RyYWNlID0gc3RhY2tUcmFjZS0+bV9wYXJlbnQuZ2V0KCk7CiAgICAgfQog
Ci0gICAgcmV0dXJuIHRvcFN0YWNrVHJhY2U7CisgICAgcmV0dXJuIHRvcFN0YWNrVHJhY2UucmVs
ZWFzZU5vbk51bGwoKTsKIH0KIAogdm9pZCBBc3luY1N0YWNrVHJhY2U6OnRydW5jYXRlKHNpemVf
dCBtYXhEZXB0aCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
QXN5bmNTdGFja1RyYWNlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0FzeW5j
U3RhY2tUcmFjZS5oCmluZGV4IDZlZGU2YzQyNWFiY2FhMmQ2MWU1YmI3YjFiYTE5ZTMyZTU3MjNi
NmMuLjQ5OWExZTA1ZmQ1OTQzZjlmYWVkYzMwZTBiZDNkMjBlMGM1ZGRiZWEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvQXN5bmNTdGFja1RyYWNlLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9Bc3luY1N0YWNrVHJhY2UuaApAQCAtNTEs
NyArNTEsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBkaWREaXNwYXRjaEFzeW5jQ2FsbCgpOwogICAg
IHZvaWQgZGlkQ2FuY2VsQXN5bmNDYWxsKCk7CiAKLSAgICBSZWZQdHI8UHJvdG9jb2w6OkNvbnNv
bGU6OlN0YWNrVHJhY2U+IGJ1aWxkSW5zcGVjdG9yT2JqZWN0KCkgY29uc3Q7CisgICAgUmVmPFBy
b3RvY29sOjpDb25zb2xlOjpTdGFja1RyYWNlPiBidWlsZEluc3BlY3Rvck9iamVjdCgpIGNvbnN0
OwogCiAgICAgfkFzeW5jU3RhY2tUcmFjZSgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL0NvbnNvbGVNZXNzYWdlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3IvQ29uc29sZU1lc3NhZ2UuY3BwCmluZGV4IDU0MmM3YzdiMzdlZmIyZTRh
NzZhMzJhMDA4ZDA2M2RiYzgwNWNkZDAuLjkwYTFkZDk2MDQ3MGE1NGVkM2IxNDY2Y2VjZmRlZmE4
MzQ5NDU4MGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvQ29u
c29sZU1lc3NhZ2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvQ29u
c29sZU1lc3NhZ2UuY3BwCkBAIC0yNjEsOSArMjYxLDExIEBAIHZvaWQgQ29uc29sZU1lc3NhZ2U6
OmFkZFRvRnJvbnRlbmQoQ29uc29sZUZyb250ZW5kRGlzcGF0Y2hlciYgY29uc29sZUZyb250ZW5k
RGlzCiAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICBhcmd1bWVudHNPYmplY3QtPmFkZEl0ZW0oV1RGTW92ZShpbnNwZWN0b3JW
YWx1ZSkpOwotICAgICAgICAgICAgICAgICAgICBpZiAobV9hcmd1bWVudHMtPmFyZ3VtZW50Q291
bnQoKSA+IDEpCi0gICAgICAgICAgICAgICAgICAgICAgICBhcmd1bWVudHNPYmplY3QtPmFkZEl0
ZW0oaW5qZWN0ZWRTY3JpcHQud3JhcE9iamVjdChjb2x1bW5zLCAiY29uc29sZSJfcywgdHJ1ZSkp
OworICAgICAgICAgICAgICAgICAgICBhcmd1bWVudHNPYmplY3QtPmFkZEl0ZW0oaW5zcGVjdG9y
VmFsdWUucmVsZWFzZU5vbk51bGwoKSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChtX2FyZ3Vt
ZW50cy0+YXJndW1lbnRDb3VudCgpID4gMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KGF1dG8gaW5zcGVjdG9yT2JqZWN0ID0gaW5qZWN0ZWRTY3JpcHQud3JhcE9iamVjdChjb2x1bW5z
LCAiY29uc29sZSJfcywgdHJ1ZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJndW1l
bnRzT2JqZWN0LT5hZGRJdGVtKGluc3BlY3Rvck9iamVjdC5yZWxlYXNlTm9uTnVsbCgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2FyZ3VtZW50cy0+YXJndW1lbnRD
b3VudCgpOyArK2kpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gaW5zcGVjdG9yVmFs
dWUgPSBpbmplY3RlZFNjcmlwdC53cmFwT2JqZWN0KG1fYXJndW1lbnRzLT5hcmd1bWVudEF0KGkp
LCAiY29uc29sZSJfcywgZ2VuZXJhdGVQcmV2aWV3KTsKQEAgLTI3MSw3ICsyNzMsNyBAQCB2b2lk
IENvbnNvbGVNZXNzYWdlOjphZGRUb0Zyb250ZW5kKENvbnNvbGVGcm9udGVuZERpc3BhdGNoZXIm
IGNvbnNvbGVGcm9udGVuZERpcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50c09i
amVjdC0+YWRkSXRlbShXVEZNb3ZlKGluc3BlY3RvclZhbHVlKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBhcmd1bWVudHNPYmplY3QtPmFkZEl0ZW0oaW5zcGVjdG9yVmFsdWUucmVsZWFzZU5v
bk51bGwoKSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICB9CkBAIC0yODQsNyArMjg2LDcgQEAgdm9pZCBDb25zb2xlTWVzc2FnZTo6YWRkVG9G
cm9udGVuZChDb25zb2xlRnJvbnRlbmREaXNwYXRjaGVyJiBjb25zb2xlRnJvbnRlbmREaXMKICAg
ICAgICAgICAgICAgICAgICAgaWYgKCFpbnNwZWN0b3JWYWx1ZSkKICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50c09iamVjdC0+
YWRkSXRlbShXVEZNb3ZlKGluc3BlY3RvclZhbHVlKSk7CisgICAgICAgICAgICAgICAgICAgIGFy
Z3VtZW50c09iamVjdC0+YWRkSXRlbShpbnNwZWN0b3JWYWx1ZS5yZWxlYXNlTm9uTnVsbCgpKTsK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHQuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdC5jcHAKaW5kZXggY2M4NDlmMDUxZmE0
MDUxOGE5ZDFhMDM0MjliYzJiNGRiY2ZiMzEwMi4uNjkwOWEzMzllYTJlM2RlNjAwZjU1ZmQ2ZmU0
NjgzNjQ2MTcxZTBhNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9JbmplY3RlZFNjcmlwdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9JbmplY3RlZFNjcmlwdC5jcHAKQEAgLTU2LDcgKzU2LDcgQEAgSW5qZWN0ZWRTY3JpcHQ6On5J
bmplY3RlZFNjcmlwdCgpCiB7CiB9CiAKLXZvaWQgSW5qZWN0ZWRTY3JpcHQ6OmV4ZWN1dGUoRXJy
b3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGZ1bmN0aW9uU3RyaW5nLCBFeGVj
dXRlT3B0aW9ucyYmIG9wdGlvbnMsIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2Jq
ZWN0PiYgcmVzdWx0LCBPcHRpb25hbDxib29sPiYgd2FzVGhyb3duLCBPcHRpb25hbDxpbnQ+JiBz
YXZlZFJlc3VsdEluZGV4KQordm9pZCBJbmplY3RlZFNjcmlwdDo6ZXhlY3V0ZShQcm90b2NvbDo6
RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGZ1bmN0aW9uU3RyaW5nLCBF
eGVjdXRlT3B0aW9ucyYmIG9wdGlvbnMsIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3Rl
T2JqZWN0PiYgcmVzdWx0LCBPcHRpb25hbDxib29sPiYgd2FzVGhyb3duLCBPcHRpb25hbDxpbnQ+
JiBzYXZlZFJlc3VsdEluZGV4KQogewogICAgIERlcHJlY2F0ZWQ6OlNjcmlwdEZ1bmN0aW9uQ2Fs
bCBmdW5jdGlvbihpbmplY3RlZFNjcmlwdE9iamVjdCgpLCAiZXhlY3V0ZSJfcywgaW5zcGVjdG9y
RW52aXJvbm1lbnQoKS0+ZnVuY3Rpb25DYWxsSGFuZGxlcigpKTsKICAgICBmdW5jdGlvbi5hcHBl
bmRBcmd1bWVudChmdW5jdGlvblN0cmluZyk7CkBAIC02OSw3ICs2OSw3IEBAIHZvaWQgSW5qZWN0
ZWRTY3JpcHQ6OmV4ZWN1dGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcm
IGZ1bmN0aW9uU3RyCiAgICAgbWFrZUV2YWxDYWxsKGVycm9yU3RyaW5nLCBmdW5jdGlvbiwgcmVz
dWx0LCB3YXNUaHJvd24sIHNhdmVkUmVzdWx0SW5kZXgpOwogfQogCi12b2lkIEluamVjdGVkU2Ny
aXB0OjpldmFsdWF0ZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgZXhw
cmVzc2lvbiwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCwgYm9vbCBpbmNsdWRlQ29tbWFuZExp
bmVBUEksIGJvb2wgcmV0dXJuQnlWYWx1ZSwgYm9vbCBnZW5lcmF0ZVByZXZpZXcsIGJvb2wgc2F2
ZVJlc3VsdCwgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiByZXN1bHQs
IE9wdGlvbmFsPGJvb2w+JiB3YXNUaHJvd24sIE9wdGlvbmFsPGludD4mIHNhdmVkUmVzdWx0SW5k
ZXgpCit2b2lkIEluamVjdGVkU2NyaXB0OjpldmFsdWF0ZShQcm90b2NvbDo6RXJyb3JTdHJpbmcm
IGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIGNvbnN0IFN0cmluZyYgb2Jq
ZWN0R3JvdXAsIGJvb2wgaW5jbHVkZUNvbW1hbmRMaW5lQVBJLCBib29sIHJldHVybkJ5VmFsdWUs
IGJvb2wgZ2VuZXJhdGVQcmV2aWV3LCBib29sIHNhdmVSZXN1bHQsIFJlZlB0cjxQcm90b2NvbDo6
UnVudGltZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0LCBPcHRpb25hbDxib29sPiYgd2FzVGhyb3du
LCBPcHRpb25hbDxpbnQ+JiBzYXZlZFJlc3VsdEluZGV4KQogewogICAgIERlcHJlY2F0ZWQ6OlNj
cmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihpbmplY3RlZFNjcmlwdE9iamVjdCgpLCAiZXZhbHVh
dGUiX3MsIGluc3BlY3RvckVudmlyb25tZW50KCktPmZ1bmN0aW9uQ2FsbEhhbmRsZXIoKSk7CiAg
ICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoZXhwcmVzc2lvbik7CkBAIC05MSw3ICs5MSw3IEBA
IHZvaWQgSW5qZWN0ZWRTY3JpcHQ6OmF3YWl0UHJvbWlzZShjb25zdCBTdHJpbmcmIHByb21pc2VP
YmplY3RJZCwgYm9vbCByZXR1cm5CeVZhCiAgICAgbWFrZUFzeW5jQ2FsbChmdW5jdGlvbiwgV1RG
TW92ZShjYWxsYmFjaykpOwogfQogCi12b2lkIEluamVjdGVkU2NyaXB0OjpjYWxsRnVuY3Rpb25P
bihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgb2JqZWN0SWQsIGNvbnN0
IFN0cmluZyYgZXhwcmVzc2lvbiwgY29uc3QgU3RyaW5nJiBhcmd1bWVudHMsIGJvb2wgcmV0dXJu
QnlWYWx1ZSwgYm9vbCBnZW5lcmF0ZVByZXZpZXcsIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6
UmVtb3RlT2JqZWN0PiYgcmVzdWx0LCBPcHRpb25hbDxib29sPiYgd2FzVGhyb3duKQordm9pZCBJ
bmplY3RlZFNjcmlwdDo6Y2FsbEZ1bmN0aW9uT24oUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJv
clN0cmluZywgY29uc3QgU3RyaW5nJiBvYmplY3RJZCwgY29uc3QgU3RyaW5nJiBleHByZXNzaW9u
LCBjb25zdCBTdHJpbmcmIGFyZ3VtZW50cywgYm9vbCByZXR1cm5CeVZhbHVlLCBib29sIGdlbmVy
YXRlUHJldmlldywgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiByZXN1
bHQsIE9wdGlvbmFsPGJvb2w+JiB3YXNUaHJvd24pCiB7CiAgICAgRGVwcmVjYXRlZDo6U2NyaXB0
RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKGluamVjdGVkU2NyaXB0T2JqZWN0KCksICJjYWxsRnVuY3Rp
b25PbiJfcywgaW5zcGVjdG9yRW52aXJvbm1lbnQoKS0+ZnVuY3Rpb25DYWxsSGFuZGxlcigpKTsK
ICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChvYmplY3RJZCk7CkBAIC0xMDUsNyArMTA1LDcg
QEAgdm9pZCBJbmplY3RlZFNjcmlwdDo6Y2FsbEZ1bmN0aW9uT24oRXJyb3JTdHJpbmcmIGVycm9y
U3RyaW5nLCBjb25zdCBTdHJpbmcmIG9iamUKICAgICBBU1NFUlQoIXNhdmVkUmVzdWx0SW5kZXgp
OwogfQogCi12b2lkIEluamVjdGVkU2NyaXB0OjpldmFsdWF0ZU9uQ2FsbEZyYW1lKEVycm9yU3Ry
aW5nJiBlcnJvclN0cmluZywgSlNDOjpKU1ZhbHVlIGNhbGxGcmFtZXMsIGNvbnN0IFN0cmluZyYg
Y2FsbEZyYW1lSWQsIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgY29uc3QgU3RyaW5nJiBvYmpl
Y3RHcm91cCwgYm9vbCBpbmNsdWRlQ29tbWFuZExpbmVBUEksIGJvb2wgcmV0dXJuQnlWYWx1ZSwg
Ym9vbCBnZW5lcmF0ZVByZXZpZXcsIGJvb2wgc2F2ZVJlc3VsdCwgUmVmUHRyPFByb3RvY29sOjpS
dW50aW1lOjpSZW1vdGVPYmplY3Q+JiByZXN1bHQsIE9wdGlvbmFsPGJvb2w+JiB3YXNUaHJvd24s
IE9wdGlvbmFsPGludD4mIHNhdmVkUmVzdWx0SW5kZXgpCit2b2lkIEluamVjdGVkU2NyaXB0Ojpl
dmFsdWF0ZU9uQ2FsbEZyYW1lKFByb3RvY29sOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIEpT
Qzo6SlNWYWx1ZSBjYWxsRnJhbWVzLCBjb25zdCBTdHJpbmcmIGNhbGxGcmFtZUlkLCBjb25zdCBT
dHJpbmcmIGV4cHJlc3Npb24sIGNvbnN0IFN0cmluZyYgb2JqZWN0R3JvdXAsIGJvb2wgaW5jbHVk
ZUNvbW1hbmRMaW5lQVBJLCBib29sIHJldHVybkJ5VmFsdWUsIGJvb2wgZ2VuZXJhdGVQcmV2aWV3
LCBib29sIHNhdmVSZXN1bHQsIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0
PiYgcmVzdWx0LCBPcHRpb25hbDxib29sPiYgd2FzVGhyb3duLCBPcHRpb25hbDxpbnQ+JiBzYXZl
ZFJlc3VsdEluZGV4KQogewogICAgIERlcHJlY2F0ZWQ6OlNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5j
dGlvbihpbmplY3RlZFNjcmlwdE9iamVjdCgpLCAiZXZhbHVhdGVPbkNhbGxGcmFtZSJfcywgaW5z
cGVjdG9yRW52aXJvbm1lbnQoKS0+ZnVuY3Rpb25DYWxsSGFuZGxlcigpKTsKICAgICBmdW5jdGlv
bi5hcHBlbmRBcmd1bWVudChjYWxsRnJhbWVzKTsKQEAgLTExOSw1MiArMTE5LDU1IEBAIHZvaWQg
SW5qZWN0ZWRTY3JpcHQ6OmV2YWx1YXRlT25DYWxsRnJhbWUoRXJyb3JTdHJpbmcmIGVycm9yU3Ry
aW5nLCBKU0M6OkpTVmFsdWUKICAgICBtYWtlRXZhbENhbGwoZXJyb3JTdHJpbmcsIGZ1bmN0aW9u
LCByZXN1bHQsIHdhc1Rocm93biwgc2F2ZWRSZXN1bHRJbmRleCk7CiB9CiAKLXZvaWQgSW5qZWN0
ZWRTY3JpcHQ6OmdldEZ1bmN0aW9uRGV0YWlscyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNv
bnN0IFN0cmluZyYgZnVuY3Rpb25JZCwgUmVmUHRyPFByb3RvY29sOjpEZWJ1Z2dlcjo6RnVuY3Rp
b25EZXRhaWxzPiYgcmVzdWx0KQordm9pZCBJbmplY3RlZFNjcmlwdDo6Z2V0RnVuY3Rpb25EZXRh
aWxzKFByb3RvY29sOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgZnVu
Y3Rpb25JZCwgUmVmUHRyPFByb3RvY29sOjpEZWJ1Z2dlcjo6RnVuY3Rpb25EZXRhaWxzPiYgcmVz
dWx0KQogewogICAgIERlcHJlY2F0ZWQ6OlNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihpbmpl
Y3RlZFNjcmlwdE9iamVjdCgpLCAiZ2V0RnVuY3Rpb25EZXRhaWxzIl9zLCBpbnNwZWN0b3JFbnZp
cm9ubWVudCgpLT5mdW5jdGlvbkNhbGxIYW5kbGVyKCkpOwogICAgIGZ1bmN0aW9uLmFwcGVuZEFy
Z3VtZW50KGZ1bmN0aW9uSWQpOwogCiAgICAgUmVmUHRyPEpTT046OlZhbHVlPiByZXN1bHRWYWx1
ZSA9IG1ha2VDYWxsKGZ1bmN0aW9uKTsKICAgICBpZiAoIXJlc3VsdFZhbHVlIHx8IHJlc3VsdFZh
bHVlLT50eXBlKCkgIT0gSlNPTjo6VmFsdWU6OlR5cGU6Ok9iamVjdCkgewotICAgICAgICBpZiAo
IXJlc3VsdFZhbHVlLT5hc1N0cmluZyhlcnJvclN0cmluZykpCisgICAgICAgIGVycm9yU3RyaW5n
ID0gcmVzdWx0VmFsdWUtPmFzU3RyaW5nKCk7CisgICAgICAgIGlmICghZXJyb3JTdHJpbmcpCiAg
ICAgICAgICAgICBlcnJvclN0cmluZyA9ICJJbnRlcm5hbCBlcnJvciJfczsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAotICAgIHJlc3VsdCA9IEJpbmRpbmdUcmFpdHM8UHJvdG9jb2w6OkRlYnVn
Z2VyOjpGdW5jdGlvbkRldGFpbHM+OjpydW50aW1lQ2FzdChXVEZNb3ZlKHJlc3VsdFZhbHVlKSk7
CisgICAgcmVzdWx0ID0gUHJvdG9jb2w6OkJpbmRpbmdUcmFpdHM8UHJvdG9jb2w6OkRlYnVnZ2Vy
OjpGdW5jdGlvbkRldGFpbHM+OjpydW50aW1lQ2FzdChyZXN1bHRWYWx1ZS5yZWxlYXNlTm9uTnVs
bCgpKTsKIH0KIAotdm9pZCBJbmplY3RlZFNjcmlwdDo6ZnVuY3Rpb25EZXRhaWxzKEVycm9yU3Ry
aW5nJiBlcnJvclN0cmluZywgSlNDOjpKU1ZhbHVlIHZhbHVlLCBSZWZQdHI8UHJvdG9jb2w6OkRl
YnVnZ2VyOjpGdW5jdGlvbkRldGFpbHM+JiByZXN1bHQpCit2b2lkIEluamVjdGVkU2NyaXB0Ojpm
dW5jdGlvbkRldGFpbHMoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgSlNDOjpK
U1ZhbHVlIHZhbHVlLCBSZWZQdHI8UHJvdG9jb2w6OkRlYnVnZ2VyOjpGdW5jdGlvbkRldGFpbHM+
JiByZXN1bHQpCiB7CiAgICAgRGVwcmVjYXRlZDo6U2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9u
KGluamVjdGVkU2NyaXB0T2JqZWN0KCksICJmdW5jdGlvbkRldGFpbHMiX3MsIGluc3BlY3RvckVu
dmlyb25tZW50KCktPmZ1bmN0aW9uQ2FsbEhhbmRsZXIoKSk7CiAgICAgZnVuY3Rpb24uYXBwZW5k
QXJndW1lbnQodmFsdWUpOwogCiAgICAgUmVmUHRyPEpTT046OlZhbHVlPiByZXN1bHRWYWx1ZSA9
IG1ha2VDYWxsKGZ1bmN0aW9uKTsKICAgICBpZiAoIXJlc3VsdFZhbHVlIHx8IHJlc3VsdFZhbHVl
LT50eXBlKCkgIT0gSlNPTjo6VmFsdWU6OlR5cGU6Ok9iamVjdCkgewotICAgICAgICBpZiAoIXJl
c3VsdFZhbHVlLT5hc1N0cmluZyhlcnJvclN0cmluZykpCisgICAgICAgIGVycm9yU3RyaW5nID0g
cmVzdWx0VmFsdWUtPmFzU3RyaW5nKCk7CisgICAgICAgIGlmICghZXJyb3JTdHJpbmcpCiAgICAg
ICAgICAgICBlcnJvclN0cmluZyA9ICJJbnRlcm5hbCBlcnJvciJfczsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIHJlc3VsdCA9IEJpbmRpbmdUcmFpdHM8UHJvdG9jb2w6OkRlYnVnZ2Vy
OjpGdW5jdGlvbkRldGFpbHM+OjpydW50aW1lQ2FzdChXVEZNb3ZlKHJlc3VsdFZhbHVlKSk7Cisg
ICAgcmVzdWx0ID0gUHJvdG9jb2w6OkJpbmRpbmdUcmFpdHM8UHJvdG9jb2w6OkRlYnVnZ2VyOjpG
dW5jdGlvbkRldGFpbHM+OjpydW50aW1lQ2FzdChyZXN1bHRWYWx1ZS5yZWxlYXNlTm9uTnVsbCgp
KTsKIH0KIAotdm9pZCBJbmplY3RlZFNjcmlwdDo6Z2V0UHJldmlldyhFcnJvclN0cmluZyYgZXJy
b3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgb2JqZWN0SWQsIFJlZlB0cjxQcm90b2NvbDo6UnVudGlt
ZTo6T2JqZWN0UHJldmlldz4mIHJlc3VsdCkKK3ZvaWQgSW5qZWN0ZWRTY3JpcHQ6OmdldFByZXZp
ZXcoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBvYmpl
Y3RJZCwgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpPYmplY3RQcmV2aWV3PiYgcmVzdWx0KQog
ewogICAgIERlcHJlY2F0ZWQ6OlNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihpbmplY3RlZFNj
cmlwdE9iamVjdCgpLCAiZ2V0UHJldmlldyJfcywgaW5zcGVjdG9yRW52aXJvbm1lbnQoKS0+ZnVu
Y3Rpb25DYWxsSGFuZGxlcigpKTsKICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChvYmplY3RJ
ZCk7CiAKICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHJlc3VsdFZhbHVlID0gbWFrZUNhbGwoZnVu
Y3Rpb24pOwogICAgIGlmICghcmVzdWx0VmFsdWUgfHwgcmVzdWx0VmFsdWUtPnR5cGUoKSAhPSBK
U09OOjpWYWx1ZTo6VHlwZTo6T2JqZWN0KSB7Ci0gICAgICAgIGlmICghcmVzdWx0VmFsdWUtPmFz
U3RyaW5nKGVycm9yU3RyaW5nKSkKKyAgICAgICAgZXJyb3JTdHJpbmcgPSByZXN1bHRWYWx1ZS0+
YXNTdHJpbmcoKTsKKyAgICAgICAgaWYgKCFlcnJvclN0cmluZykKICAgICAgICAgICAgIGVycm9y
U3RyaW5nID0gIkludGVybmFsIGVycm9yIl9zOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgcmVzdWx0ID0gQmluZGluZ1RyYWl0czxQcm90b2NvbDo6UnVudGltZTo6T2JqZWN0UHJldmll
dz46OnJ1bnRpbWVDYXN0KFdURk1vdmUocmVzdWx0VmFsdWUpKTsKKyAgICByZXN1bHQgPSBQcm90
b2NvbDo6QmluZGluZ1RyYWl0czxQcm90b2NvbDo6UnVudGltZTo6T2JqZWN0UHJldmlldz46OnJ1
bnRpbWVDYXN0KHJlc3VsdFZhbHVlLnJlbGVhc2VOb25OdWxsKCkpOwogfQogCi12b2lkIEluamVj
dGVkU2NyaXB0OjpnZXRQcm9wZXJ0aWVzKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3Qg
U3RyaW5nJiBvYmplY3RJZCwgYm9vbCBvd25Qcm9wZXJ0aWVzLCBpbnQgZmV0Y2hTdGFydCwgaW50
IGZldGNoQ291bnQsIGJvb2wgZ2VuZXJhdGVQcmV2aWV3LCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxQ
cm90b2NvbDo6UnVudGltZTo6UHJvcGVydHlEZXNjcmlwdG9yPj4mIHByb3BlcnRpZXMpCit2b2lk
IEluamVjdGVkU2NyaXB0OjpnZXRQcm9wZXJ0aWVzKFByb3RvY29sOjpFcnJvclN0cmluZyYgZXJy
b3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgb2JqZWN0SWQsIGJvb2wgb3duUHJvcGVydGllcywgaW50
IGZldGNoU3RhcnQsIGludCBmZXRjaENvdW50LCBib29sIGdlbmVyYXRlUHJldmlldywgUmVmUHRy
PEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OlByb3BlcnR5RGVzY3JpcHRvcj4+JiBw
cm9wZXJ0aWVzKQogewogICAgIEFTU0VSVChmZXRjaFN0YXJ0ID49IDApOwogICAgIEFTU0VSVChm
ZXRjaENvdW50ID49IDApOwpAQCAtMTgyLDEwICsxODUsMTAgQEAgdm9pZCBJbmplY3RlZFNjcmlw
dDo6Z2V0UHJvcGVydGllcyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYg
b2JqZWMKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHByb3BlcnRpZXMgPSBCaW5kaW5n
VHJhaXRzPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OlByb3BlcnR5RGVzY3JpcHRv
cj4+OjpydW50aW1lQ2FzdChXVEZNb3ZlKHJlc3VsdCkpOworICAgIHByb3BlcnRpZXMgPSBQcm90
b2NvbDo6QmluZGluZ1RyYWl0czxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpQcm9w
ZXJ0eURlc2NyaXB0b3I+Pjo6cnVudGltZUNhc3QocmVzdWx0LnJlbGVhc2VOb25OdWxsKCkpOwog
fQogCi12b2lkIEluamVjdGVkU2NyaXB0OjpnZXREaXNwbGF5YWJsZVByb3BlcnRpZXMoRXJyb3JT
dHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBpbnQgZmV0Y2hTdGFy
dCwgaW50IGZldGNoQ291bnQsIGJvb2wgZ2VuZXJhdGVQcmV2aWV3LCBSZWZQdHI8SlNPTjo6QXJy
YXlPZjxQcm90b2NvbDo6UnVudGltZTo6UHJvcGVydHlEZXNjcmlwdG9yPj4mIHByb3BlcnRpZXMp
Cit2b2lkIEluamVjdGVkU2NyaXB0OjpnZXREaXNwbGF5YWJsZVByb3BlcnRpZXMoUHJvdG9jb2w6
OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBvYmplY3RJZCwgaW50IGZl
dGNoU3RhcnQsIGludCBmZXRjaENvdW50LCBib29sIGdlbmVyYXRlUHJldmlldywgUmVmUHRyPEpT
T046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OlByb3BlcnR5RGVzY3JpcHRvcj4+JiBwcm9w
ZXJ0aWVzKQogewogICAgIEFTU0VSVChmZXRjaFN0YXJ0ID49IDApOwogICAgIEFTU0VSVChmZXRj
aENvdW50ID49IDApOwpAQCAtMjAyLDEwICsyMDUsMTAgQEAgdm9pZCBJbmplY3RlZFNjcmlwdDo6
Z2V0RGlzcGxheWFibGVQcm9wZXJ0aWVzKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3Qg
U3QKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHByb3BlcnRpZXMgPSBCaW5kaW5nVHJh
aXRzPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OlByb3BlcnR5RGVzY3JpcHRvcj4+
OjpydW50aW1lQ2FzdChXVEZNb3ZlKHJlc3VsdCkpOworICAgIHByb3BlcnRpZXMgPSBQcm90b2Nv
bDo6QmluZGluZ1RyYWl0czxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpQcm9wZXJ0
eURlc2NyaXB0b3I+Pjo6cnVudGltZUNhc3QocmVzdWx0LnJlbGVhc2VOb25OdWxsKCkpOwogfQog
Ci12b2lkIEluamVjdGVkU2NyaXB0OjpnZXRJbnRlcm5hbFByb3BlcnRpZXMoRXJyb3JTdHJpbmcm
IGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBib29sIGdlbmVyYXRlUHJldmll
dywgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OkludGVybmFsUHJvcGVy
dHlEZXNjcmlwdG9yPj4mIHByb3BlcnRpZXMpCit2b2lkIEluamVjdGVkU2NyaXB0OjpnZXRJbnRl
cm5hbFByb3BlcnRpZXMoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3Qg
U3RyaW5nJiBvYmplY3RJZCwgYm9vbCBnZW5lcmF0ZVByZXZpZXcsIFJlZlB0cjxKU09OOjpBcnJh
eU9mPFByb3RvY29sOjpSdW50aW1lOjpJbnRlcm5hbFByb3BlcnR5RGVzY3JpcHRvcj4+JiBwcm9w
ZXJ0aWVzKQogewogICAgIERlcHJlY2F0ZWQ6OlNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihp
bmplY3RlZFNjcmlwdE9iamVjdCgpLCAiZ2V0SW50ZXJuYWxQcm9wZXJ0aWVzIl9zLCBpbnNwZWN0
b3JFbnZpcm9ubWVudCgpLT5mdW5jdGlvbkNhbGxIYW5kbGVyKCkpOwogICAgIGZ1bmN0aW9uLmFw
cGVuZEFyZ3VtZW50KG9iamVjdElkKTsKQEAgLTIxNywxMSArMjIwLDEyIEBAIHZvaWQgSW5qZWN0
ZWRTY3JpcHQ6OmdldEludGVybmFsUHJvcGVydGllcyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcs
IGNvbnN0IFN0cmluCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvIGFycmF5ID0g
QmluZGluZ1RyYWl0czxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpJbnRlcm5hbFBy
b3BlcnR5RGVzY3JpcHRvcj4+OjpydW50aW1lQ2FzdChXVEZNb3ZlKHJlc3VsdCkpOwotICAgIHBy
b3BlcnRpZXMgPSBhcnJheS0+bGVuZ3RoKCkgPiAwID8gYXJyYXkgOiBudWxscHRyOworICAgIGF1
dG8gYXJyYXkgPSBQcm90b2NvbDo6QmluZGluZ1RyYWl0czxKU09OOjpBcnJheU9mPFByb3RvY29s
OjpSdW50aW1lOjpJbnRlcm5hbFByb3BlcnR5RGVzY3JpcHRvcj4+OjpydW50aW1lQ2FzdChyZXN1
bHQucmVsZWFzZU5vbk51bGwoKSk7CisgICAgaWYgKGFycmF5LT5sZW5ndGgoKSkKKyAgICAgICAg
cHJvcGVydGllcyA9IFdURk1vdmUoYXJyYXkpOwogfQogCi12b2lkIEluamVjdGVkU2NyaXB0Ojpn
ZXRDb2xsZWN0aW9uRW50cmllcyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmlu
ZyYgb2JqZWN0SWQsIGNvbnN0IFN0cmluZyYgb2JqZWN0R3JvdXAsIGludCBmZXRjaFN0YXJ0LCBp
bnQgZmV0Y2hDb3VudCwgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OkNv
bGxlY3Rpb25FbnRyeT4+JiBlbnRyaWVzKQordm9pZCBJbmplY3RlZFNjcmlwdDo6Z2V0Q29sbGVj
dGlvbkVudHJpZXMoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3Ry
aW5nJiBvYmplY3RJZCwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCwgaW50IGZldGNoU3RhcnQs
IGludCBmZXRjaENvdW50LCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UnVudGltZTo6
Q29sbGVjdGlvbkVudHJ5Pj4mIGVudHJpZXMpCiB7CiAgICAgQVNTRVJUKGZldGNoU3RhcnQgPj0g
MCk7CiAgICAgQVNTRVJUKGZldGNoQ291bnQgPj0gMCk7CkBAIC0yMzgsMTAgKzI0MiwxMCBAQCB2
b2lkIEluamVjdGVkU2NyaXB0OjpnZXRDb2xsZWN0aW9uRW50cmllcyhFcnJvclN0cmluZyYgZXJy
b3JTdHJpbmcsIGNvbnN0IFN0cmluZwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgZW50
cmllcyA9IEJpbmRpbmdUcmFpdHM8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UnVudGltZTo6Q29s
bGVjdGlvbkVudHJ5Pj46OnJ1bnRpbWVDYXN0KFdURk1vdmUocmVzdWx0KSk7CisgICAgZW50cmll
cyA9IFByb3RvY29sOjpCaW5kaW5nVHJhaXRzPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRp
bWU6OkNvbGxlY3Rpb25FbnRyeT4+OjpydW50aW1lQ2FzdChyZXN1bHQucmVsZWFzZU5vbk51bGwo
KSk7CiB9CiAKLXZvaWQgSW5qZWN0ZWRTY3JpcHQ6OnNhdmVSZXN1bHQoRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGNhbGxBcmd1bWVudEpTT04sIE9wdGlvbmFsPGludD4m
IHNhdmVkUmVzdWx0SW5kZXgpCit2b2lkIEluamVjdGVkU2NyaXB0OjpzYXZlUmVzdWx0KFByb3Rv
Y29sOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgY2FsbEFyZ3VtZW50
SlNPTiwgT3B0aW9uYWw8aW50PiYgc2F2ZWRSZXN1bHRJbmRleCkKIHsKICAgICBEZXByZWNhdGVk
OjpTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24oaW5qZWN0ZWRTY3JpcHRPYmplY3QoKSwgInNh
dmVSZXN1bHQiX3MsIGluc3BlY3RvckVudmlyb25tZW50KCktPmZ1bmN0aW9uQ2FsbEhhbmRsZXIo
KSk7CiAgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoY2FsbEFyZ3VtZW50SlNPTik7CkBAIC0y
NTIsOSArMjU2LDcgQEAgdm9pZCBJbmplY3RlZFNjcmlwdDo6c2F2ZVJlc3VsdChFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgY2FsbEFyZ3UKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIGludCByZXN1bHRJbmRleCA9IDA7Ci0gICAgaWYgKHJlc3VsdC0+YXNJbnRl
Z2VyKHJlc3VsdEluZGV4KSAmJiByZXN1bHRJbmRleCA+IDApCi0gICAgICAgIHNhdmVkUmVzdWx0
SW5kZXggPSByZXN1bHRJbmRleDsKKyAgICBzYXZlZFJlc3VsdEluZGV4ID0gcmVzdWx0LT5hc0lu
dGVnZXIoKTsKIH0KIAogUmVmPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkRlYnVnZ2VyOjpDYWxs
RnJhbWU+PiBJbmplY3RlZFNjcmlwdDo6d3JhcENhbGxGcmFtZXMoSlNDOjpKU1ZhbHVlIGNhbGxG
cmFtZXMpIGNvbnN0CkBAIC0yNjksOCArMjcxLDggQEAgUmVmPEpTT046OkFycmF5T2Y8UHJvdG9j
b2w6OkRlYnVnZ2VyOjpDYWxsRnJhbWU+PiBJbmplY3RlZFNjcmlwdDo6d3JhcENhbGxGcmFtZXMK
ICAgICAgICAgcmV0dXJuIEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkRlYnVnZ2VyOjpDYWxsRnJh
bWU+OjpjcmVhdGUoKTsKIAogICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gcmVzdWx0ID0gdG9JbnNw
ZWN0b3JWYWx1ZShnbG9iYWxPYmplY3QoKSwgY2FsbFJlc3VsdC52YWx1ZSgpKTsKLSAgICBpZiAo
cmVzdWx0LT50eXBlKCkgPT0gSlNPTjo6VmFsdWU6OlR5cGU6OkFycmF5KQotICAgICAgICByZXR1
cm4gQmluZGluZ1RyYWl0czxKU09OOjpBcnJheU9mPFByb3RvY29sOjpEZWJ1Z2dlcjo6Q2FsbEZy
YW1lPj46OnJ1bnRpbWVDYXN0KFdURk1vdmUocmVzdWx0KSkucmVsZWFzZU5vbk51bGwoKTsKKyAg
ICBpZiAocmVzdWx0ICYmIHJlc3VsdC0+dHlwZSgpID09IEpTT046OlZhbHVlOjpUeXBlOjpBcnJh
eSkKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpCaW5kaW5nVHJhaXRzPEpTT046OkFycmF5T2Y8
UHJvdG9jb2w6OkRlYnVnZ2VyOjpDYWxsRnJhbWU+Pjo6cnVudGltZUNhc3QocmVzdWx0LnJlbGVh
c2VOb25OdWxsKCkpOwogCiAgICAgcmV0dXJuIEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkRlYnVn
Z2VyOjpDYWxsRnJhbWU+OjpjcmVhdGUoKTsKIH0KQEAgLTI4OCwxMSArMjkwLDE1IEBAIFJlZlB0
cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiBJbmplY3RlZFNjcmlwdDo6d3JhcE9i
amVjdChKU0M6OkpTVmFsdWUKICAgICBpZiAoIWNhbGxSZXN1bHQpCiAgICAgICAgIHJldHVybiBu
dWxscHRyOwogCi0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcmVzdWx0T2JqZWN0OwotICAgIGJv
b2wgY2FzdFN1Y2NlZWRlZCA9IHRvSW5zcGVjdG9yVmFsdWUoZ2xvYmFsT2JqZWN0KCksIGNhbGxS
ZXN1bHQudmFsdWUoKSktPmFzT2JqZWN0KHJlc3VsdE9iamVjdCk7Ci0gICAgQVNTRVJUX1VOVVNF
RChjYXN0U3VjY2VlZGVkLCBjYXN0U3VjY2VlZGVkKTsKKyAgICBhdXRvIHJlc3VsdFZhbHVlID0g
dG9JbnNwZWN0b3JWYWx1ZShnbG9iYWxPYmplY3QoKSwgY2FsbFJlc3VsdC52YWx1ZSgpKTsKKyAg
ICBpZiAoIXJlc3VsdFZhbHVlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVy
biBCaW5kaW5nVHJhaXRzPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+OjpydW50aW1l
Q2FzdChyZXN1bHRPYmplY3QpOworICAgIGF1dG8gcmVzdWx0T2JqZWN0ID0gcmVzdWx0VmFsdWUt
PmFzT2JqZWN0KCk7CisgICAgaWYgKCFyZXN1bHRPYmplY3QpCisgICAgICAgIHJldHVybiBudWxs
cHRyOworCisgICAgcmV0dXJuIFByb3RvY29sOjpCaW5kaW5nVHJhaXRzPFByb3RvY29sOjpSdW50
aW1lOjpSZW1vdGVPYmplY3Q+OjpydW50aW1lQ2FzdChyZXN1bHRPYmplY3QucmVsZWFzZU5vbk51
bGwoKSk7CiB9CiAKIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiBJbmpl
Y3RlZFNjcmlwdDo6d3JhcEpTT05TdHJpbmcoY29uc3QgU3RyaW5nJiBqc29uLCBjb25zdCBTdHJp
bmcmIGdyb3VwTmFtZSwgYm9vbCBnZW5lcmF0ZVByZXZpZXcpIGNvbnN0CkBAIC0zMTAsMTEgKzMx
NiwxNSBAQCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4gSW5qZWN0ZWRT
Y3JpcHQ6OndyYXBKU09OU3RyaW5nKGNvbnN0IFN0cgogICAgIGlmIChjYWxsUmVzdWx0LnZhbHVl
KCkuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgUmVmUHRyPEpTT046
Ok9iamVjdD4gcmVzdWx0T2JqZWN0OwotICAgIGJvb2wgY2FzdFN1Y2NlZWRlZCA9IHRvSW5zcGVj
dG9yVmFsdWUoZ2xvYmFsT2JqZWN0KCksIGNhbGxSZXN1bHQudmFsdWUoKSktPmFzT2JqZWN0KHJl
c3VsdE9iamVjdCk7Ci0gICAgQVNTRVJUX1VOVVNFRChjYXN0U3VjY2VlZGVkLCBjYXN0U3VjY2Vl
ZGVkKTsKKyAgICBhdXRvIHJlc3VsdFZhbHVlID0gdG9JbnNwZWN0b3JWYWx1ZShnbG9iYWxPYmpl
Y3QoKSwgY2FsbFJlc3VsdC52YWx1ZSgpKTsKKyAgICBpZiAoIXJlc3VsdFZhbHVlKQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiBCaW5kaW5nVHJhaXRzPFByb3RvY29sOjpS
dW50aW1lOjpSZW1vdGVPYmplY3Q+OjpydW50aW1lQ2FzdChyZXN1bHRPYmplY3QpOworICAgIGF1
dG8gcmVzdWx0T2JqZWN0ID0gcmVzdWx0VmFsdWUtPmFzT2JqZWN0KCk7CisgICAgaWYgKCFyZXN1
bHRPYmplY3QpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuIFByb3RvY29s
OjpCaW5kaW5nVHJhaXRzPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+OjpydW50aW1l
Q2FzdChyZXN1bHRPYmplY3QucmVsZWFzZU5vbk51bGwoKSk7CiB9CiAKIFJlZlB0cjxQcm90b2Nv
bDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiBJbmplY3RlZFNjcmlwdDo6d3JhcFRhYmxlKEpTQzo6
SlNWYWx1ZSB0YWJsZSwgSlNDOjpKU1ZhbHVlIGNvbHVtbnMpIGNvbnN0CkBAIC0zMzIsMTEgKzM0
MiwxNSBAQCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4gSW5qZWN0ZWRT
Y3JpcHQ6OndyYXBUYWJsZShKU0M6OkpTVmFsdWUgdAogICAgIGlmICghY2FsbFJlc3VsdCkKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiByZXN1bHRP
YmplY3Q7Ci0gICAgYm9vbCBjYXN0U3VjY2VlZGVkID0gdG9JbnNwZWN0b3JWYWx1ZShnbG9iYWxP
YmplY3QoKSwgY2FsbFJlc3VsdC52YWx1ZSgpKS0+YXNPYmplY3QocmVzdWx0T2JqZWN0KTsKLSAg
ICBBU1NFUlRfVU5VU0VEKGNhc3RTdWNjZWVkZWQsIGNhc3RTdWNjZWVkZWQpOworICAgIGF1dG8g
cmVzdWx0VmFsdWUgPSB0b0luc3BlY3RvclZhbHVlKGdsb2JhbE9iamVjdCgpLCBjYWxsUmVzdWx0
LnZhbHVlKCkpOworICAgIGlmICghcmVzdWx0VmFsdWUpCisgICAgICAgIHJldHVybiBudWxscHRy
OwogCi0gICAgcmV0dXJuIEJpbmRpbmdUcmFpdHM8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9i
amVjdD46OnJ1bnRpbWVDYXN0KHJlc3VsdE9iamVjdCk7CisgICAgYXV0byByZXN1bHRPYmplY3Qg
PSByZXN1bHRWYWx1ZS0+YXNPYmplY3QoKTsKKyAgICBpZiAoIXJlc3VsdE9iamVjdCkKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gUHJvdG9jb2w6OkJpbmRpbmdUcmFpdHM8
UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD46OnJ1bnRpbWVDYXN0KHJlc3VsdE9iamVj
dC5yZWxlYXNlTm9uTnVsbCgpKTsKIH0KIAogUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpPYmpl
Y3RQcmV2aWV3PiBJbmplY3RlZFNjcmlwdDo6cHJldmlld1ZhbHVlKEpTQzo6SlNWYWx1ZSB2YWx1
ZSkgY29uc3QKQEAgLTM0OSwxMSArMzYzLDE1IEBAIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6
T2JqZWN0UHJldmlldz4gSW5qZWN0ZWRTY3JpcHQ6OnByZXZpZXdWYWx1ZShKU0M6OkpTVmFsCiAg
ICAgaWYgKCFjYWxsUmVzdWx0KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIFJlZlB0
cjxKU09OOjpPYmplY3Q+IHJlc3VsdE9iamVjdDsKLSAgICBib29sIGNhc3RTdWNjZWVkZWQgPSB0
b0luc3BlY3RvclZhbHVlKGdsb2JhbE9iamVjdCgpLCBjYWxsUmVzdWx0LnZhbHVlKCkpLT5hc09i
amVjdChyZXN1bHRPYmplY3QpOwotICAgIEFTU0VSVF9VTlVTRUQoY2FzdFN1Y2NlZWRlZCwgY2Fz
dFN1Y2NlZWRlZCk7CisgICAgYXV0byByZXN1bHRWYWx1ZSA9IHRvSW5zcGVjdG9yVmFsdWUoZ2xv
YmFsT2JqZWN0KCksIGNhbGxSZXN1bHQudmFsdWUoKSk7CisgICAgaWYgKCFyZXN1bHRWYWx1ZSkK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gQmluZGluZ1RyYWl0czxQcm90
b2NvbDo6UnVudGltZTo6T2JqZWN0UHJldmlldz46OnJ1bnRpbWVDYXN0KHJlc3VsdE9iamVjdCk7
CisgICAgYXV0byByZXN1bHRPYmplY3QgPSByZXN1bHRWYWx1ZS0+YXNPYmplY3QoKTsKKyAgICBp
ZiAoIXJlc3VsdE9iamVjdCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4g
UHJvdG9jb2w6OkJpbmRpbmdUcmFpdHM8UHJvdG9jb2w6OlJ1bnRpbWU6Ok9iamVjdFByZXZpZXc+
OjpydW50aW1lQ2FzdChyZXN1bHRPYmplY3QucmVsZWFzZU5vbk51bGwoKSk7CiB9CiAKIHZvaWQg
SW5qZWN0ZWRTY3JpcHQ6OnNldEV2ZW50VmFsdWUoSlNDOjpKU1ZhbHVlIHZhbHVlKQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdC5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdC5oCmluZGV4IGNk
ZWU0NWYyZDZiMzM3N2YxZTA1MjNjZmU0MDFhZTI4YmNmMmRmNmYuLmQ2M2FlZjAyNTk5NjQ4ODQ2
YzY4MzYxNWNiNTZjNjQzYzM4OWIxYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL0luamVjdGVkU2NyaXB0LmgKQEAgLTU5LDIwICs1OSwyMCBAQCBwdWJsaWM6CiAg
ICAgICAgIGJvb2wgc2F2ZVJlc3VsdCB7IGZhbHNlIH07CiAgICAgICAgIFZlY3RvcjxKU0M6OkpT
VmFsdWU+IGFyZ3M7CiAgICAgfTsKLSAgICB2b2lkIGV4ZWN1dGUoRXJyb3JTdHJpbmcmLCBjb25z
dCBTdHJpbmcmIGZ1bmN0aW9uU3RyaW5nLCBFeGVjdXRlT3B0aW9ucyYmLCBSZWZQdHI8UHJvdG9j
b2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3VsdCwgT3B0aW9uYWw8Ym9vbD4mIHdhc1Ro
cm93biwgT3B0aW9uYWw8aW50PiYgc2F2ZWRSZXN1bHRJbmRleCk7CisgICAgdm9pZCBleGVjdXRl
KFByb3RvY29sOjpFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgZnVuY3Rpb25TdHJpbmcsIEV4
ZWN1dGVPcHRpb25zJiYsIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYg
cmVzdWx0LCBPcHRpb25hbDxib29sPiYgd2FzVGhyb3duLCBPcHRpb25hbDxpbnQ+JiBzYXZlZFJl
c3VsdEluZGV4KTsKIAotICAgIHZvaWQgZXZhbHVhdGUoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJp
bmcmIGV4cHJlc3Npb24sIGNvbnN0IFN0cmluZyYgb2JqZWN0R3JvdXAsIGJvb2wgaW5jbHVkZUNv
bW1hbmRMaW5lQVBJLCBib29sIHJldHVybkJ5VmFsdWUsIGJvb2wgZ2VuZXJhdGVQcmV2aWV3LCBi
b29sIHNhdmVSZXN1bHQsIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYg
cmVzdWx0LCBPcHRpb25hbDxib29sPiYgd2FzVGhyb3duLCBPcHRpb25hbDxpbnQ+JiBzYXZlZFJl
c3VsdEluZGV4KTsKKyAgICB2b2lkIGV2YWx1YXRlKFByb3RvY29sOjpFcnJvclN0cmluZyYsIGNv
bnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCwgYm9vbCBp
bmNsdWRlQ29tbWFuZExpbmVBUEksIGJvb2wgcmV0dXJuQnlWYWx1ZSwgYm9vbCBnZW5lcmF0ZVBy
ZXZpZXcsIGJvb2wgc2F2ZVJlc3VsdCwgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVP
YmplY3Q+JiByZXN1bHQsIE9wdGlvbmFsPGJvb2w+JiB3YXNUaHJvd24sIE9wdGlvbmFsPGludD4m
IHNhdmVkUmVzdWx0SW5kZXgpOwogICAgIHZvaWQgYXdhaXRQcm9taXNlKGNvbnN0IFN0cmluZyYg
cHJvbWlzZU9iamVjdElkLCBib29sIHJldHVybkJ5VmFsdWUsIGJvb2wgZ2VuZXJhdGVQcmV2aWV3
LCBib29sIHNhdmVSZXN1bHQsIEFzeW5jQ2FsbENhbGxiYWNrJiYpOwotICAgIHZvaWQgZXZhbHVh
dGVPbkNhbGxGcmFtZShFcnJvclN0cmluZyYsIEpTQzo6SlNWYWx1ZSBjYWxsRnJhbWVzLCBjb25z
dCBTdHJpbmcmIGNhbGxGcmFtZUlkLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIGNvbnN0IFN0
cmluZyYgb2JqZWN0R3JvdXAsIGJvb2wgaW5jbHVkZUNvbW1hbmRMaW5lQVBJLCBib29sIHJldHVy
bkJ5VmFsdWUsIGJvb2wgZ2VuZXJhdGVQcmV2aWV3LCBib29sIHNhdmVSZXN1bHQsIFJlZlB0cjxQ
cm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0LCBPcHRpb25hbDxib29sPiYg
d2FzVGhyb3duLCBPcHRpb25hbDxpbnQ+JiBzYXZlZFJlc3VsdEluZGV4KTsKLSAgICB2b2lkIGNh
bGxGdW5jdGlvbk9uKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBvYmplY3RJZCwgY29uc3Qg
U3RyaW5nJiBleHByZXNzaW9uLCBjb25zdCBTdHJpbmcmIGFyZ3VtZW50cywgYm9vbCByZXR1cm5C
eVZhbHVlLCBib29sIGdlbmVyYXRlUHJldmlldywgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpS
ZW1vdGVPYmplY3Q+JiByZXN1bHQsIE9wdGlvbmFsPGJvb2w+JiB3YXNUaHJvd24pOwotICAgIHZv
aWQgZ2V0RnVuY3Rpb25EZXRhaWxzKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBmdW5jdGlv
bklkLCBSZWZQdHI8UHJvdG9jb2w6OkRlYnVnZ2VyOjpGdW5jdGlvbkRldGFpbHM+JiByZXN1bHQp
OwotICAgIHZvaWQgZnVuY3Rpb25EZXRhaWxzKEVycm9yU3RyaW5nJiwgSlNDOjpKU1ZhbHVlLCBS
ZWZQdHI8UHJvdG9jb2w6OkRlYnVnZ2VyOjpGdW5jdGlvbkRldGFpbHM+JiByZXN1bHQpOwotICAg
IHZvaWQgZ2V0UHJldmlldyhFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgb2JqZWN0SWQsIFJl
ZlB0cjxQcm90b2NvbDo6UnVudGltZTo6T2JqZWN0UHJldmlldz4mIHJlc3VsdCk7Ci0gICAgdm9p
ZCBnZXRQcm9wZXJ0aWVzKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBvYmplY3RJZCwgYm9v
bCBvd25Qcm9wZXJ0aWVzLCBpbnQgZmV0Y2hTdGFydCwgaW50IGZldGNoQ291bnQsIGJvb2wgZ2Vu
ZXJhdGVQcmV2aWV3LCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UnVudGltZTo6UHJv
cGVydHlEZXNjcmlwdG9yPj4mIHJlc3VsdCk7Ci0gICAgdm9pZCBnZXREaXNwbGF5YWJsZVByb3Bl
cnRpZXMoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBpbnQgZmV0Y2hTdGFy
dCwgaW50IGZldGNoQ291bnQsIGJvb2wgZ2VuZXJhdGVQcmV2aWV3LCBSZWZQdHI8SlNPTjo6QXJy
YXlPZjxQcm90b2NvbDo6UnVudGltZTo6UHJvcGVydHlEZXNjcmlwdG9yPj4mIHJlc3VsdCk7Ci0g
ICAgdm9pZCBnZXRJbnRlcm5hbFByb3BlcnRpZXMoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcm
IG9iamVjdElkLCBib29sIGdlbmVyYXRlUHJldmlldywgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJv
dG9jb2w6OlJ1bnRpbWU6OkludGVybmFsUHJvcGVydHlEZXNjcmlwdG9yPj4mIHJlc3VsdCk7Ci0g
ICAgdm9pZCBnZXRDb2xsZWN0aW9uRW50cmllcyhFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYg
b2JqZWN0SWQsIGNvbnN0IFN0cmluZyYgb2JqZWN0R3JvdXAsIGludCBmZXRjaFN0YXJ0LCBpbnQg
ZmV0Y2hDb3VudCwgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OkNvbGxl
Y3Rpb25FbnRyeT4+JiBlbnRyaWVzKTsKLSAgICB2b2lkIHNhdmVSZXN1bHQoRXJyb3JTdHJpbmcm
LCBjb25zdCBTdHJpbmcmIGNhbGxBcmd1bWVudEpTT04sIE9wdGlvbmFsPGludD4mIHNhdmVkUmVz
dWx0SW5kZXgpOworICAgIHZvaWQgZXZhbHVhdGVPbkNhbGxGcmFtZShQcm90b2NvbDo6RXJyb3JT
dHJpbmcmLCBKU0M6OkpTVmFsdWUgY2FsbEZyYW1lcywgY29uc3QgU3RyaW5nJiBjYWxsRnJhbWVJ
ZCwgY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBjb25zdCBTdHJpbmcmIG9iamVjdEdyb3VwLCBi
b29sIGluY2x1ZGVDb21tYW5kTGluZUFQSSwgYm9vbCByZXR1cm5CeVZhbHVlLCBib29sIGdlbmVy
YXRlUHJldmlldywgYm9vbCBzYXZlUmVzdWx0LCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJl
bW90ZU9iamVjdD4mIHJlc3VsdCwgT3B0aW9uYWw8Ym9vbD4mIHdhc1Rocm93biwgT3B0aW9uYWw8
aW50PiYgc2F2ZWRSZXN1bHRJbmRleCk7CisgICAgdm9pZCBjYWxsRnVuY3Rpb25PbihQcm90b2Nv
bDo6RXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBjb25zdCBTdHJpbmcmIGV4
cHJlc3Npb24sIGNvbnN0IFN0cmluZyYgYXJndW1lbnRzLCBib29sIHJldHVybkJ5VmFsdWUsIGJv
b2wgZ2VuZXJhdGVQcmV2aWV3LCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVj
dD4mIHJlc3VsdCwgT3B0aW9uYWw8Ym9vbD4mIHdhc1Rocm93bik7CisgICAgdm9pZCBnZXRGdW5j
dGlvbkRldGFpbHMoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBmdW5jdGlv
bklkLCBSZWZQdHI8UHJvdG9jb2w6OkRlYnVnZ2VyOjpGdW5jdGlvbkRldGFpbHM+JiByZXN1bHQp
OworICAgIHZvaWQgZnVuY3Rpb25EZXRhaWxzKFByb3RvY29sOjpFcnJvclN0cmluZyYsIEpTQzo6
SlNWYWx1ZSwgUmVmUHRyPFByb3RvY29sOjpEZWJ1Z2dlcjo6RnVuY3Rpb25EZXRhaWxzPiYgcmVz
dWx0KTsKKyAgICB2b2lkIGdldFByZXZpZXcoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiwgY29uc3Qg
U3RyaW5nJiBvYmplY3RJZCwgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpPYmplY3RQcmV2aWV3
PiYgcmVzdWx0KTsKKyAgICB2b2lkIGdldFByb3BlcnRpZXMoUHJvdG9jb2w6OkVycm9yU3RyaW5n
JiwgY29uc3QgU3RyaW5nJiBvYmplY3RJZCwgYm9vbCBvd25Qcm9wZXJ0aWVzLCBpbnQgZmV0Y2hT
dGFydCwgaW50IGZldGNoQ291bnQsIGJvb2wgZ2VuZXJhdGVQcmV2aWV3LCBSZWZQdHI8SlNPTjo6
QXJyYXlPZjxQcm90b2NvbDo6UnVudGltZTo6UHJvcGVydHlEZXNjcmlwdG9yPj4mIHJlc3VsdCk7
CisgICAgdm9pZCBnZXREaXNwbGF5YWJsZVByb3BlcnRpZXMoUHJvdG9jb2w6OkVycm9yU3RyaW5n
JiwgY29uc3QgU3RyaW5nJiBvYmplY3RJZCwgaW50IGZldGNoU3RhcnQsIGludCBmZXRjaENvdW50
LCBib29sIGdlbmVyYXRlUHJldmlldywgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1
bnRpbWU6OlByb3BlcnR5RGVzY3JpcHRvcj4+JiByZXN1bHQpOworICAgIHZvaWQgZ2V0SW50ZXJu
YWxQcm9wZXJ0aWVzKFByb3RvY29sOjpFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgb2JqZWN0
SWQsIGJvb2wgZ2VuZXJhdGVQcmV2aWV3LCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6
UnVudGltZTo6SW50ZXJuYWxQcm9wZXJ0eURlc2NyaXB0b3I+PiYgcmVzdWx0KTsKKyAgICB2b2lk
IGdldENvbGxlY3Rpb25FbnRyaWVzKFByb3RvY29sOjpFcnJvclN0cmluZyYsIGNvbnN0IFN0cmlu
ZyYgb2JqZWN0SWQsIGNvbnN0IFN0cmluZyYgb2JqZWN0R3JvdXAsIGludCBmZXRjaFN0YXJ0LCBp
bnQgZmV0Y2hDb3VudCwgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OkNv
bGxlY3Rpb25FbnRyeT4+JiBlbnRyaWVzKTsKKyAgICB2b2lkIHNhdmVSZXN1bHQoUHJvdG9jb2w6
OkVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBjYWxsQXJndW1lbnRKU09OLCBPcHRpb25hbDxp
bnQ+JiBzYXZlZFJlc3VsdEluZGV4KTsKIAogICAgIFJlZjxKU09OOjpBcnJheU9mPFByb3RvY29s
OjpEZWJ1Z2dlcjo6Q2FsbEZyYW1lPj4gd3JhcENhbGxGcmFtZXMoSlNDOjpKU1ZhbHVlKSBjb25z
dDsKICAgICBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4gd3JhcE9iamVj
dChKU0M6OkpTVmFsdWUsIGNvbnN0IFN0cmluZyYgZ3JvdXBOYW1lLCBib29sIGdlbmVyYXRlUHJl
dmlldyA9IGZhbHNlKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRCYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRCYXNlLmNwcAppbmRleCA3NTY5ZjViNWQ5NzU4MDg4MjRm
NjRlYjJlZjBhNDA2YjY0YTRkOTM5Li4wOTAxNjZhOTFmYzY2YWQxY2RlNzE4MTk1M2NmNDc3M2Zm
NjZmMDhmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luamVj
dGVkU2NyaXB0QmFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9J
bmplY3RlZFNjcmlwdEJhc2UuY3BwCkBAIC0xMDAsNyArMTAwLDcgQEAgUmVmPEpTT046OlZhbHVl
PiBJbmplY3RlZFNjcmlwdEJhc2U6Om1ha2VDYWxsKERlcHJlY2F0ZWQ6OlNjcmlwdEZ1bmN0aW9u
Q2FsbCYgZnUKICAgICByZXR1cm4gcmVzdWx0SlNPTlZhbHVlLnJlbGVhc2VOb25OdWxsKCk7CiB9
CiAKLXZvaWQgSW5qZWN0ZWRTY3JpcHRCYXNlOjptYWtlRXZhbENhbGwoRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBEZXByZWNhdGVkOjpTY3JpcHRGdW5jdGlvbkNhbGwmIGZ1bmN0aW9uLCBSZWZQ
dHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIG91dF9yZXN1bHRPYmplY3QsIE9w
dGlvbmFsPGJvb2w+JiBvdXRfd2FzVGhyb3duLCBPcHRpb25hbDxpbnQ+JiBvdXRfc2F2ZWRSZXN1
bHRJbmRleCkKK3ZvaWQgSW5qZWN0ZWRTY3JpcHRCYXNlOjptYWtlRXZhbENhbGwoUHJvdG9jb2w6
OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgRGVwcmVjYXRlZDo6U2NyaXB0RnVuY3Rpb25DYWxs
JiBmdW5jdGlvbiwgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiBvdXRf
cmVzdWx0T2JqZWN0LCBPcHRpb25hbDxib29sPiYgb3V0X3dhc1Rocm93biwgT3B0aW9uYWw8aW50
PiYgb3V0X3NhdmVkUmVzdWx0SW5kZXgpCiB7CiAgICAgY2hlY2tDYWxsUmVzdWx0KGVycm9yU3Ry
aW5nLCBtYWtlQ2FsbChmdW5jdGlvbiksIG91dF9yZXN1bHRPYmplY3QsIG91dF93YXNUaHJvd24s
IG91dF9zYXZlZFJlc3VsdEluZGV4KTsKIH0KQEAgLTE0Myw3ICsxNDMsNyBAQCB2b2lkIEluamVj
dGVkU2NyaXB0QmFzZTo6bWFrZUFzeW5jQ2FsbChEZXByZWNhdGVkOjpTY3JpcHRGdW5jdGlvbkNh
bGwmIGZ1bmN0aW9uLAogICAgIH0KIH0KIAotdm9pZCBJbmplY3RlZFNjcmlwdEJhc2U6OmNoZWNr
Q2FsbFJlc3VsdChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIFJlZlB0cjxKU09OOjpWYWx1ZT4g
cmVzdWx0LCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIG91dF9yZXN1
bHRPYmplY3QsIE9wdGlvbmFsPGJvb2w+JiBvdXRfd2FzVGhyb3duLCBPcHRpb25hbDxpbnQ+JiBv
dXRfc2F2ZWRSZXN1bHRJbmRleCkKK3ZvaWQgSW5qZWN0ZWRTY3JpcHRCYXNlOjpjaGVja0NhbGxS
ZXN1bHQoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgUmVmUHRyPEpTT046OlZh
bHVlPiByZXN1bHQsIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYgb3V0
X3Jlc3VsdE9iamVjdCwgT3B0aW9uYWw8Ym9vbD4mIG91dF93YXNUaHJvd24sIE9wdGlvbmFsPGlu
dD4mIG91dF9zYXZlZFJlc3VsdEluZGV4KQogewogICAgIGlmICghcmVzdWx0KSB7CiAgICAgICAg
IGVycm9yU3RyaW5nID0gIkludGVybmFsIGVycm9yOiByZXN1bHQgdmFsdWUgaXMgZW1wdHkiX3M7
CkBAIC0xNTEsNDkgKzE1MSw0MiBAQCB2b2lkIEluamVjdGVkU2NyaXB0QmFzZTo6Y2hlY2tDYWxs
UmVzdWx0KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgUmVmUHRyPEpTT046OgogICAgIH0KIAog
ICAgIGlmIChyZXN1bHQtPnR5cGUoKSA9PSBKU09OOjpWYWx1ZTo6VHlwZTo6U3RyaW5nKSB7Ci0g
ICAgICAgIHJlc3VsdC0+YXNTdHJpbmcoZXJyb3JTdHJpbmcpOwotICAgICAgICBBU1NFUlQoZXJy
b3JTdHJpbmcubGVuZ3RoKCkpOworICAgICAgICBlcnJvclN0cmluZyA9IHJlc3VsdC0+YXNTdHJp
bmcoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+
IHJlc3VsdFR1cGxlOwotICAgIGlmICghcmVzdWx0LT5hc09iamVjdChyZXN1bHRUdXBsZSkpIHsK
KyAgICBhdXRvIHJlc3VsdFR1cGxlID0gcmVzdWx0LT5hc09iamVjdCgpOworICAgIGlmICghcmVz
dWx0VHVwbGUpIHsKICAgICAgICAgZXJyb3JTdHJpbmcgPSAiSW50ZXJuYWwgZXJyb3I6IHJlc3Vs
dCBpcyBub3QgYW4gT2JqZWN0Il9zOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgUmVm
UHRyPEpTT046Ok9iamVjdD4gcmVzdWx0T2JqZWN0OwotICAgIGlmICghcmVzdWx0VHVwbGUtPmdl
dE9iamVjdCgicmVzdWx0Il9zLCByZXN1bHRPYmplY3QpKSB7CisgICAgYXV0byByZXN1bHRPYmpl
Y3QgPSByZXN1bHRUdXBsZS0+Z2V0T2JqZWN0KCJyZXN1bHQiX3MpOworICAgIGlmICghcmVzdWx0
T2JqZWN0KSB7CiAgICAgICAgIGVycm9yU3RyaW5nID0gIkludGVybmFsIGVycm9yOiByZXN1bHQg
aXMgbm90IGEgcGFpciBvZiB2YWx1ZSBhbmQgd2FzVGhyb3duIGZsYWciX3M7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSAgICBib29sIHdhc1Rocm93biA9IGZhbHNlOwotICAgIGlmICghcmVz
dWx0VHVwbGUtPmdldEJvb2xlYW4oIndhc1Rocm93biJfcywgd2FzVGhyb3duKSkgeworICAgIG91
dF93YXNUaHJvd24gPSByZXN1bHRUdXBsZS0+Z2V0Qm9vbGVhbigid2FzVGhyb3duIl9zKTsKKyAg
ICBpZiAoIW91dF93YXNUaHJvd24pIHsKICAgICAgICAgZXJyb3JTdHJpbmcgPSAiSW50ZXJuYWwg
ZXJyb3I6IHJlc3VsdCBpcyBub3QgYSBwYWlyIG9mIHZhbHVlIGFuZCB3YXNUaHJvd24gZmxhZyJf
czsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG91dF9yZXN1bHRPYmplY3QgPSBCaW5k
aW5nVHJhaXRzPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+OjpydW50aW1lQ2FzdChy
ZXN1bHRPYmplY3QpOwotCi0gICAgaWYgKHdhc1Rocm93bikKLSAgICAgICAgb3V0X3dhc1Rocm93
biA9IHdhc1Rocm93bjsKLQotICAgIGludCBzYXZlZFJlc3VsdEluZGV4OwotICAgIGlmIChyZXN1
bHRUdXBsZS0+Z2V0SW50ZWdlcigic2F2ZWRSZXN1bHRJbmRleCJfcywgc2F2ZWRSZXN1bHRJbmRl
eCkpCi0gICAgICAgIG91dF9zYXZlZFJlc3VsdEluZGV4ID0gc2F2ZWRSZXN1bHRJbmRleDsKKyAg
ICBvdXRfcmVzdWx0T2JqZWN0ID0gUHJvdG9jb2w6OkJpbmRpbmdUcmFpdHM8UHJvdG9jb2w6OlJ1
bnRpbWU6OlJlbW90ZU9iamVjdD46OnJ1bnRpbWVDYXN0KHJlc3VsdE9iamVjdC5yZWxlYXNlTm9u
TnVsbCgpKTsKKyAgICBvdXRfc2F2ZWRSZXN1bHRJbmRleCA9IHJlc3VsdFR1cGxlLT5nZXRJbnRl
Z2VyKCJzYXZlZFJlc3VsdEluZGV4Il9zKTsKIH0KIAogdm9pZCBJbmplY3RlZFNjcmlwdEJhc2U6
OmNoZWNrQXN5bmNDYWxsUmVzdWx0KFJlZlB0cjxKU09OOjpWYWx1ZT4gcmVzdWx0LCBjb25zdCBB
c3luY0NhbGxDYWxsYmFjayYgY2FsbGJhY2spCiB7Ci0gICAgRXJyb3JTdHJpbmcgZXJyb3JTdHJp
bmc7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOwogICAgIFJlZlB0cjxQ
cm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiByZXN1bHRPYmplY3Q7CiAgICAgT3B0aW9u
YWw8Ym9vbD4gd2FzVGhyb3duOwogICAgIE9wdGlvbmFsPGludD4gc2F2ZWRSZXN1bHRJbmRleDsK
IAogICAgIGNoZWNrQ2FsbFJlc3VsdChlcnJvclN0cmluZywgcmVzdWx0LCByZXN1bHRPYmplY3Qs
IHdhc1Rocm93biwgc2F2ZWRSZXN1bHRJbmRleCk7CiAKLSAgICBjYWxsYmFjayhlcnJvclN0cmlu
ZywgV1RGTW92ZShyZXN1bHRPYmplY3QpLCB3YXNUaHJvd24sIHNhdmVkUmVzdWx0SW5kZXgpOwor
ICAgIGNhbGxiYWNrKGVycm9yU3RyaW5nLCBXVEZNb3ZlKHJlc3VsdE9iamVjdCksIFdURk1vdmUo
d2FzVGhyb3duKSwgV1RGTW92ZShzYXZlZFJlc3VsdEluZGV4KSk7CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIEluc3BlY3RvcgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9JbmplY3RlZFNjcmlwdEJhc2UuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
SW5qZWN0ZWRTY3JpcHRCYXNlLmgKaW5kZXggODEyM2YxZDY2ZTliMTNhZDRhZDBlY2IxYTNjYWQz
M2Y1OTc2ZDVkNy4uZjRlNmEwZmVlYTQxMWNkMDU4NTk4NGJkNzRhY2M0YjI0YWE4ZWQwZiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdEJh
c2UuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0
QmFzZS5oCkBAIC00Nyw4ICs0Nyw3IEBAIGNsYXNzIFNjcmlwdEZ1bmN0aW9uQ2FsbDsKIAogbmFt
ZXNwYWNlIEluc3BlY3RvciB7CiAKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotdHlwZWRl
ZiBXVEY6OkZ1bmN0aW9uPHZvaWQoRXJyb3JTdHJpbmcmLCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRp
bWU6OlJlbW90ZU9iamVjdD4mJiwgT3B0aW9uYWw8Ym9vbD4mLCBPcHRpb25hbDxpbnQ+Jik+IEFz
eW5jQ2FsbENhbGxiYWNrOwordXNpbmcgQXN5bmNDYWxsQ2FsbGJhY2sgPSBXVEY6OkZ1bmN0aW9u
PHZvaWQoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiwgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpS
ZW1vdGVPYmplY3Q+JiYsIE9wdGlvbmFsPGJvb2w+JiYsIE9wdGlvbmFsPGludD4mJik+OwogCiBj
bGFzcyBKU19FWFBPUlRfUFJJVkFURSBJbmplY3RlZFNjcmlwdEJhc2UgewogcHVibGljOgpAQCAt
NjksMTEgKzY4LDExIEBAIHByb3RlY3RlZDoKICAgICBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRP
YmplY3QmIGluamVjdGVkU2NyaXB0T2JqZWN0KCkgY29uc3Q7CiAgICAgRXhwZWN0ZWQ8SlNDOjpK
U1ZhbHVlLCBOYWtlZFB0cjxKU0M6OkV4Y2VwdGlvbj4+IGNhbGxGdW5jdGlvbldpdGhFdmFsRW5h
YmxlZChEZXByZWNhdGVkOjpTY3JpcHRGdW5jdGlvbkNhbGwmKSBjb25zdDsKICAgICBSZWY8SlNP
Tjo6VmFsdWU+IG1ha2VDYWxsKERlcHJlY2F0ZWQ6OlNjcmlwdEZ1bmN0aW9uQ2FsbCYpOwotICAg
IHZvaWQgbWFrZUV2YWxDYWxsKEVycm9yU3RyaW5nJiwgRGVwcmVjYXRlZDo6U2NyaXB0RnVuY3Rp
b25DYWxsJiwgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiByZXN1bHRP
YmplY3QsIE9wdGlvbmFsPGJvb2w+JiB3YXNUaHJvd24sIE9wdGlvbmFsPGludD4mIHNhdmVkUmVz
dWx0SW5kZXgpOworICAgIHZvaWQgbWFrZUV2YWxDYWxsKFByb3RvY29sOjpFcnJvclN0cmluZyYs
IERlcHJlY2F0ZWQ6OlNjcmlwdEZ1bmN0aW9uQ2FsbCYsIFJlZlB0cjxQcm90b2NvbDo6UnVudGlt
ZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0T2JqZWN0LCBPcHRpb25hbDxib29sPiYgd2FzVGhyb3du
LCBPcHRpb25hbDxpbnQ+JiBzYXZlZFJlc3VsdEluZGV4KTsKICAgICB2b2lkIG1ha2VBc3luY0Nh
bGwoRGVwcmVjYXRlZDo6U2NyaXB0RnVuY3Rpb25DYWxsJiwgQXN5bmNDYWxsQ2FsbGJhY2smJik7
CiAKIHByaXZhdGU6Ci0gICAgdm9pZCBjaGVja0NhbGxSZXN1bHQoRXJyb3JTdHJpbmcmLCBSZWZQ
dHI8SlNPTjo6VmFsdWU+IHJlc3VsdCwgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVP
YmplY3Q+JiByZXN1bHRPYmplY3QsIE9wdGlvbmFsPGJvb2w+JiB3YXNUaHJvd24sIE9wdGlvbmFs
PGludD4mIHNhdmVkUmVzdWx0SW5kZXgpOworICAgIHZvaWQgY2hlY2tDYWxsUmVzdWx0KFByb3Rv
Y29sOjpFcnJvclN0cmluZyYsIFJlZlB0cjxKU09OOjpWYWx1ZT4gcmVzdWx0LCBSZWZQdHI8UHJv
dG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3VsdE9iamVjdCwgT3B0aW9uYWw8Ym9v
bD4mIHdhc1Rocm93biwgT3B0aW9uYWw8aW50PiYgc2F2ZWRSZXN1bHRJbmRleCk7CiAgICAgdm9p
ZCBjaGVja0FzeW5jQ2FsbFJlc3VsdChSZWZQdHI8SlNPTjo6VmFsdWU+IHJlc3VsdCwgY29uc3Qg
QXN5bmNDYWxsQ2FsbGJhY2smKTsKIAogICAgIFN0cmluZyBtX25hbWU7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0TWFuYWdlci5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0TWFuYWdlci5j
cHAKaW5kZXggOTBhZjdhOGYzYTMzMDU2MTZiNDk1ZTViM2NhZGYwNTMzMTFlMjM1MC4uZmNjYzhl
ZjE5ODZkODg2ZDc1NjAwZjczNjEwMGE3ZWIzOTZiNTAwNSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdE1hbmFnZXIuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmNwcApA
QCAtMTAyLDE5ICsxMDIsMTkgQEAgaW50IEluamVjdGVkU2NyaXB0TWFuYWdlcjo6aW5qZWN0ZWRT
Y3JpcHRJZEZvcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogCiBJbmplY3RlZFNjcmlw
dCBJbmplY3RlZFNjcmlwdE1hbmFnZXI6OmluamVjdGVkU2NyaXB0Rm9yT2JqZWN0SWQoY29uc3Qg
U3RyaW5nJiBvYmplY3RJZCkKIHsKLSAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHBhcnNlZE9iamVj
dElkOwotICAgIGlmICghSlNPTjo6VmFsdWU6OnBhcnNlSlNPTihvYmplY3RJZCwgcGFyc2VkT2Jq
ZWN0SWQpKQorICAgIGF1dG8gcGFyc2VkT2JqZWN0SWQgPSBKU09OOjpWYWx1ZTo6cGFyc2VKU09O
KG9iamVjdElkKTsKKyAgICBpZiAoIXBhcnNlZE9iamVjdElkKQogICAgICAgICByZXR1cm4gSW5q
ZWN0ZWRTY3JpcHQoKTsKIAotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHJlc3VsdE9iamVjdDsK
LSAgICBpZiAoIXBhcnNlZE9iamVjdElkLT5hc09iamVjdChyZXN1bHRPYmplY3QpKQorICAgIGF1
dG8gcmVzdWx0T2JqZWN0ID0gcGFyc2VkT2JqZWN0SWQtPmFzT2JqZWN0KCk7CisgICAgaWYgKCFy
ZXN1bHRPYmplY3QpCiAgICAgICAgIHJldHVybiBJbmplY3RlZFNjcmlwdCgpOwogCi0gICAgbG9u
ZyBpbmplY3RlZFNjcmlwdElkID0gMDsKLSAgICBpZiAoIXJlc3VsdE9iamVjdC0+Z2V0SW50ZWdl
cigiaW5qZWN0ZWRTY3JpcHRJZCJfcywgaW5qZWN0ZWRTY3JpcHRJZCkpCisgICAgYXV0byBpbmpl
Y3RlZFNjcmlwdElkID0gcmVzdWx0T2JqZWN0LT5nZXRJbnRlZ2VyKCJpbmplY3RlZFNjcmlwdElk
Il9zKTsKKyAgICBpZiAoIWluamVjdGVkU2NyaXB0SWQpCiAgICAgICAgIHJldHVybiBJbmplY3Rl
ZFNjcmlwdCgpOwogCi0gICAgcmV0dXJuIG1faWRUb0luamVjdGVkU2NyaXB0LmdldChpbmplY3Rl
ZFNjcmlwdElkKTsKKyAgICByZXR1cm4gbV9pZFRvSW5qZWN0ZWRTY3JpcHQuZ2V0KCppbmplY3Rl
ZFNjcmlwdElkKTsKIH0KIAogdm9pZCBJbmplY3RlZFNjcmlwdE1hbmFnZXI6OnJlbGVhc2VPYmpl
Y3RHcm91cChjb25zdCBTdHJpbmcmIG9iamVjdEdyb3VwKQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
LmNwcAppbmRleCA2OTNlOGIyNWM3Mzc3ODM0MGU4Mzk0MDQ2Nzg2ZDkzMThhOGEwOTI0Li5kYmEx
N2Q0YTY1YTcwZDM1ODUxYzhjNTE5YWQxZWNiZDU3MTc1MmRkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyLmNwcApAQCAtNjgsNyArNjgsNyBAQCB2b2lkIEJhY2tlbmREaXNwYXRjaGVyOjpDYWxs
YmFja0Jhc2U6OnNlbmRGYWlsdXJlKGNvbnN0IEVycm9yU3RyaW5nJiBlcnJvcikKICAgICBtX2Jh
Y2tlbmREaXNwYXRjaGVyLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogfQogCi12b2lkIEJhY2tlbmRE
aXNwYXRjaGVyOjpDYWxsYmFja0Jhc2U6OnNlbmRTdWNjZXNzKFJlZlB0cjxKU09OOjpPYmplY3Q+
JiYgcGFydGlhbE1lc3NhZ2UpCit2b2lkIEJhY2tlbmREaXNwYXRjaGVyOjpDYWxsYmFja0Jhc2U6
OnNlbmRTdWNjZXNzKFJlZjxKU09OOjpPYmplY3Q+JiYgcGFydGlhbE1lc3NhZ2UpCiB7CiAgICAg
aWYgKG1fYWxyZWFkeVNlbnQpCiAgICAgICAgIHJldHVybjsKQEAgLTEwNyw3ICsxMDcsNyBAQCB2
b2lkIEJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCiAK
ICAgICBBU1NFUlQoIW1fcHJvdG9jb2xFcnJvcnMuc2l6ZSgpKTsKIAotICAgIGxvbmcgcmVxdWVz
dElkID0gMDsKKyAgICBpbnQgcmVxdWVzdElkID0gMDsKICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0
PiBtZXNzYWdlT2JqZWN0OwogCiAgICAgewpAQCAtMTE1LDQ2ICsxMTUsNTAgQEAgdm9pZCBCYWNr
ZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2goY29uc3QgU3RyaW5nJiBtZXNzYWdlKQogICAgICAgICAv
LyB0aGUgb3V0ZXIgcmVxdWVzdCdzIGlkIGp1c3QgYmVjYXVzZSB0aGUgaW5uZXIgcmVxdWVzdCBp
cyBib2d1cy4KICAgICAgICAgU2V0Rm9yU2NvcGU8T3B0aW9uYWw8bG9uZz4+IHNjb3BlZFJlcXVl
c3RJZChtX2N1cnJlbnRSZXF1ZXN0SWQsIFdURjo6bnVsbG9wdCk7CiAKLSAgICAgICAgUmVmUHRy
PEpTT046OlZhbHVlPiBwYXJzZWRNZXNzYWdlOwotICAgICAgICBpZiAoIUpTT046OlZhbHVlOjpw
YXJzZUpTT04obWVzc2FnZSwgcGFyc2VkTWVzc2FnZSkpIHsKKyAgICAgICAgYXV0byBwYXJzZWRN
ZXNzYWdlID0gSlNPTjo6VmFsdWU6OnBhcnNlSlNPTihtZXNzYWdlKTsKKyAgICAgICAgaWYgKCFw
YXJzZWRNZXNzYWdlKSB7CiAgICAgICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKFBhcnNlRXJy
b3IsICJNZXNzYWdlIG11c3QgYmUgaW4gSlNPTiBmb3JtYXQiX3MpOwogICAgICAgICAgICAgc2Vu
ZFBlbmRpbmdFcnJvcnMoKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAg
ICAgIGlmICghcGFyc2VkTWVzc2FnZS0+YXNPYmplY3QobWVzc2FnZU9iamVjdCkpIHsKKyAgICAg
ICAgbWVzc2FnZU9iamVjdCA9IHBhcnNlZE1lc3NhZ2UtPmFzT2JqZWN0KCk7CisgICAgICAgIGlm
ICghbWVzc2FnZU9iamVjdCkgewogICAgICAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihJbnZh
bGlkUmVxdWVzdCwgIk1lc3NhZ2UgbXVzdCBiZSBhIEpTT05pZmllZCBvYmplY3QiX3MpOwogICAg
ICAgICAgICAgc2VuZFBlbmRpbmdFcnJvcnMoKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQogCi0gICAgICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gcmVxdWVzdElkVmFsdWU7Ci0gICAg
ICAgIGlmICghbWVzc2FnZU9iamVjdC0+Z2V0VmFsdWUoImlkIl9zLCByZXF1ZXN0SWRWYWx1ZSkp
IHsKKyAgICAgICAgYXV0byByZXF1ZXN0SWRWYWx1ZSA9IG1lc3NhZ2VPYmplY3QtPmdldFZhbHVl
KCJpZCJfcyk7CisgICAgICAgIGlmICghcmVxdWVzdElkVmFsdWUpIHsKICAgICAgICAgICAgIHJl
cG9ydFByb3RvY29sRXJyb3IoSW52YWxpZFJlcXVlc3QsICInaWQnIHByb3BlcnR5IHdhcyBub3Qg
Zm91bmQiX3MpOwogICAgICAgICAgICAgc2VuZFBlbmRpbmdFcnJvcnMoKTsKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIGlmICghcmVxdWVzdElkVmFsdWUtPmFzSW50
ZWdlcihyZXF1ZXN0SWQpKSB7CisgICAgICAgIGF1dG8gcmVxdWVzdElkSW50ID0gcmVxdWVzdElk
VmFsdWUtPmFzSW50ZWdlcigpOworICAgICAgICBpZiAoIXJlcXVlc3RJZEludCkgewogICAgICAg
ICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihJbnZhbGlkUmVxdWVzdCwgIlRoZSB0eXBlIG9mICdp
ZCcgcHJvcGVydHkgbXVzdCBiZSBpbnRlZ2VyIl9zKTsKICAgICAgICAgICAgIHNlbmRQZW5kaW5n
RXJyb3JzKCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KKworICAgICAgICByZXF1
ZXN0SWQgPSAqcmVxdWVzdElkSW50OwogICAgIH0KIAogICAgIHsKICAgICAgICAgLy8gV2UgY291
bGQgYmUgY2FsbGVkIHJlLWVudHJhbnRseSBmcm9tIGEgbmVzdGVkIHJ1biBsb29wLCBzbyByZXN0
b3JlIHRoZSBwcmV2aW91cyBpZC4KICAgICAgICAgU2V0Rm9yU2NvcGU8T3B0aW9uYWw8bG9uZz4+
IHNjb3BlZFJlcXVlc3RJZChtX2N1cnJlbnRSZXF1ZXN0SWQsIHJlcXVlc3RJZCk7CiAKLSAgICAg
ICAgUmVmUHRyPEpTT046OlZhbHVlPiBtZXRob2RWYWx1ZTsKLSAgICAgICAgaWYgKCFtZXNzYWdl
T2JqZWN0LT5nZXRWYWx1ZSgibWV0aG9kIl9zLCBtZXRob2RWYWx1ZSkpIHsKKyAgICAgICAgYXV0
byBtZXRob2RWYWx1ZSA9IG1lc3NhZ2VPYmplY3QtPmdldFZhbHVlKCJtZXRob2QiX3MpOworICAg
ICAgICBpZiAoIW1ldGhvZFZhbHVlKSB7CiAgICAgICAgICAgICByZXBvcnRQcm90b2NvbEVycm9y
KEludmFsaWRSZXF1ZXN0LCAiJ21ldGhvZCcgcHJvcGVydHkgd2Fzbid0IGZvdW5kIl9zKTsKICAg
ICAgICAgICAgIHNlbmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KIAotICAgICAgICBTdHJpbmcgbWV0aG9kU3RyaW5nOwotICAgICAgICBpZiAoIW1ldGhv
ZFZhbHVlLT5hc1N0cmluZyhtZXRob2RTdHJpbmcpKSB7CisgICAgICAgIGF1dG8gbWV0aG9kU3Ry
aW5nID0gbWV0aG9kVmFsdWUtPmFzU3RyaW5nKCk7CisgICAgICAgIGlmICghbWV0aG9kU3RyaW5n
KSB7CiAgICAgICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKEludmFsaWRSZXF1ZXN0LCAiVGhl
IHR5cGUgb2YgJ21ldGhvZCcgcHJvcGVydHkgbXVzdCBiZSBzdHJpbmciX3MpOwogICAgICAgICAg
ICAgc2VuZFBlbmRpbmdFcnJvcnMoKTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTE4NCwxMiAr
MTg4LDEyIEBAIHZvaWQgQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGNvbnN0IFN0cmluZyYg
bWVzc2FnZSkKIH0KIAogLy8gRklYTUU6IHJlbW92ZSB0aGlzIGZ1bmN0aW9uIHdoZW4gbGVnYWN5
IEluc3BlY3Rvck9iamVjdCBzeW1ib2xzIGFyZSBubyBsb25nZXIgbmVlZGVkIDxodHRwOi8vd2Vi
a2l0Lm9yZy9iLzE3OTg0Nz4uCi12b2lkIEJhY2tlbmREaXNwYXRjaGVyOjpzZW5kUmVzcG9uc2Uo
bG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcmVzdWx0KQordm9pZCBCYWNr
ZW5kRGlzcGF0Y2hlcjo6c2VuZFJlc3BvbnNlKGxvbmcgcmVxdWVzdElkLCBSZWY8SlNPTjo6T2Jq
ZWN0PiYmIHJlc3VsdCkKIHsKICAgICBzZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJl
c3VsdCksIGZhbHNlKTsKIH0KIAotdm9pZCBCYWNrZW5kRGlzcGF0Y2hlcjo6c2VuZFJlc3BvbnNl
KGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHJlc3VsdCwgYm9vbCkKK3Zv
aWQgQmFja2VuZERpc3BhdGNoZXI6OnNlbmRSZXNwb25zZShsb25nIHJlcXVlc3RJZCwgUmVmPEpT
T046Ok9iamVjdD4mJiByZXN1bHQsIGJvb2wpCiB7CiAgICAgQVNTRVJUKCFtX3Byb3RvY29sRXJy
b3JzLnNpemUoKSk7CiAKQEAgLTI3MCw3NCArMjc0LDY0IEBAIHZvaWQgQmFja2VuZERpc3BhdGNo
ZXI6OnJlcG9ydFByb3RvY29sRXJyb3IoT3B0aW9uYWw8bG9uZz4gcmVsYXRlZFJlcXVlc3RJZCwg
Q29tCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1UIEJhY2tlbmREaXNwYXRjaGVyOjpnZXRQ
cm9wZXJ0eVZhbHVlKEpTT046Ok9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJv
b2wqIG91dF9vcHRpb25hbFZhbHVlRm91bmQsIFQgZGVmYXVsdFZhbHVlLCBzdGQ6OmZ1bmN0aW9u
PGJvb2woSlNPTjo6VmFsdWUmLCBUJik+IGFzTWV0aG9kLCBjb25zdCBjaGFyKiB0eXBlTmFtZSkK
K1QgQmFja2VuZERpc3BhdGNoZXI6OmdldFByb3BlcnR5VmFsdWUoSlNPTjo6T2JqZWN0KiBvYmpl
Y3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCByZXF1aXJlZCwgc3RkOjpmdW5jdGlvbjxUKEpT
T046OlZhbHVlJik+IGNvbnZlcnRlciwgY29uc3QgY2hhciogdHlwZU5hbWUpCiB7Ci0gICAgVCBy
ZXN1bHQoZGVmYXVsdFZhbHVlKTsKLSAgICAvLyBvdXRfb3B0aW9uYWxWYWx1ZUZvdW5kIHNpZ25h
bHMgdG8gdGhlIGNhbGxlciB3aGV0aGVyIGFuIG9wdGlvbmFsIHByb3BlcnR5IHdhcyBmb3VuZC4K
LSAgICAvLyBpZiBvdXRfb3B0aW9uYWxWYWx1ZUZvdW5kID09IG51bGxwdHIsIHRoZW4gdGhpcyBp
cyBhIHJlcXVpcmVkIHByb3BlcnR5LgotICAgIGlmIChvdXRfb3B0aW9uYWxWYWx1ZUZvdW5kKQot
ICAgICAgICAqb3V0X29wdGlvbmFsVmFsdWVGb3VuZCA9IGZhbHNlOworICAgIFQgcmVzdWx0Owog
CiAgICAgaWYgKCFvYmplY3QpIHsKLSAgICAgICAgaWYgKCFvdXRfb3B0aW9uYWxWYWx1ZUZvdW5k
KQorICAgICAgICBpZiAocmVxdWlyZWQpCiAgICAgICAgICAgICByZXBvcnRQcm90b2NvbEVycm9y
KEJhY2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCBtYWtlU3RyaW5nKCIncGFyYW1zJyBv
YmplY3QgbXVzdCBjb250YWluIHJlcXVpcmVkIHBhcmFtZXRlciAnIiwgbmFtZSwgIicgd2l0aCB0
eXBlICciLCB0eXBlTmFtZSwgIicuIikpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0K
IAogICAgIGF1dG8gZmluZFJlc3VsdCA9IG9iamVjdC0+ZmluZChuYW1lKTsKICAgICBpZiAoZmlu
ZFJlc3VsdCA9PSBvYmplY3QtPmVuZCgpKSB7Ci0gICAgICAgIGlmICghb3V0X29wdGlvbmFsVmFs
dWVGb3VuZCkKKyAgICAgICAgaWYgKHJlcXVpcmVkKQogICAgICAgICAgICAgcmVwb3J0UHJvdG9j
b2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFtcywgbWFrZVN0cmluZygiUGFy
YW1ldGVyICciLCBuYW1lLCAiJyB3aXRoIHR5cGUgJyIsIHR5cGVOYW1lLCAiJyB3YXMgbm90IGZv
dW5kLiIpKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKLSAgICBpZiAoIWFzTWV0
aG9kKCpmaW5kUmVzdWx0LT52YWx1ZSwgcmVzdWx0KSkgewotICAgICAgICByZXBvcnRQcm90b2Nv
bEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCBtYWtlU3RyaW5nKCJQYXJh
bWV0ZXIgJyIsIG5hbWUsICInIGhhcyB3cm9uZyB0eXBlLiBJdCBtdXN0IGJlICciLCB0eXBlTmFt
ZSwgIicuIikpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KKyAgICByZXN1bHQgPSBj
b252ZXJ0ZXIoZmluZFJlc3VsdC0+dmFsdWUpOwogCi0gICAgaWYgKG91dF9vcHRpb25hbFZhbHVl
Rm91bmQpCi0gICAgICAgICpvdXRfb3B0aW9uYWxWYWx1ZUZvdW5kID0gdHJ1ZTsKKyAgICBpZiAo
IXJlc3VsdCkKKyAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6
SW52YWxpZFBhcmFtcywgbWFrZVN0cmluZygiUGFyYW1ldGVyICciLCBuYW1lLCAiJyBoYXMgd3Jv
bmcgdHlwZS4gSXQgbXVzdCBiZSAnIiwgdHlwZU5hbWUsICInLiIpKTsKIAogICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKLXN0YXRpYyBib29sIGNhc3RUb0ludGVnZXIoSlNPTjo6VmFsdWUmIHZhbHVl
LCBpbnQmIHJlc3VsdCkgeyByZXR1cm4gdmFsdWUuYXNJbnRlZ2VyKHJlc3VsdCk7IH0KLXN0YXRp
YyBib29sIGNhc3RUb051bWJlcihKU09OOjpWYWx1ZSYgdmFsdWUsIGRvdWJsZSYgcmVzdWx0KSB7
IHJldHVybiB2YWx1ZS5hc0RvdWJsZShyZXN1bHQpOyB9Ci0KLWludCBCYWNrZW5kRGlzcGF0Y2hl
cjo6Z2V0SW50ZWdlcihKU09OOjpPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBi
b29sKiB2YWx1ZUZvdW5kKQorT3B0aW9uYWw8Ym9vbD4gQmFja2VuZERpc3BhdGNoZXI6OmdldEJv
b2xlYW4oSlNPTjo6T2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCByZXF1
aXJlZCkKIHsKLSAgICByZXR1cm4gZ2V0UHJvcGVydHlWYWx1ZTxpbnQ+KG9iamVjdCwgbmFtZSwg
dmFsdWVGb3VuZCwgMCwgJmNhc3RUb0ludGVnZXIsICJJbnRlZ2VyIik7CisgICAgcmV0dXJuIGdl
dFByb3BlcnR5VmFsdWU8T3B0aW9uYWw8Ym9vbD4+KG9iamVjdCwgbmFtZSwgcmVxdWlyZWQsICZK
U09OOjpWYWx1ZTo6YXNCb29sZWFuLCAiQm9vbGVhbiIpOwogfQogCi1kb3VibGUgQmFja2VuZERp
c3BhdGNoZXI6OmdldERvdWJsZShKU09OOjpPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBu
YW1lLCBib29sKiB2YWx1ZUZvdW5kKQorT3B0aW9uYWw8aW50PiBCYWNrZW5kRGlzcGF0Y2hlcjo6
Z2V0SW50ZWdlcihKU09OOjpPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29s
IHJlcXVpcmVkKQogewotICAgIHJldHVybiBnZXRQcm9wZXJ0eVZhbHVlPGRvdWJsZT4ob2JqZWN0
LCBuYW1lLCB2YWx1ZUZvdW5kLCAwLCAmY2FzdFRvTnVtYmVyLCAiTnVtYmVyIik7CisgICAgcmV0
dXJuIGdldFByb3BlcnR5VmFsdWU8T3B0aW9uYWw8aW50Pj4ob2JqZWN0LCBuYW1lLCByZXF1aXJl
ZCwgJkpTT046OlZhbHVlOjphc0ludGVnZXIsICJJbnRlZ2VyIik7CiB9CiAKLVN0cmluZyBCYWNr
ZW5kRGlzcGF0Y2hlcjo6Z2V0U3RyaW5nKEpTT046Ok9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJp
bmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQpCitPcHRpb25hbDxkb3VibGU+IEJhY2tlbmREaXNw
YXRjaGVyOjpnZXREb3VibGUoSlNPTjo6T2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFt
ZSwgYm9vbCByZXF1aXJlZCkKIHsKLSAgICByZXR1cm4gZ2V0UHJvcGVydHlWYWx1ZTxTdHJpbmc+
KG9iamVjdCwgbmFtZSwgdmFsdWVGb3VuZCwgIiIsICZKU09OOjpWYWx1ZTo6YXNTdHJpbmcsICJT
dHJpbmciKTsKKyAgICByZXR1cm4gZ2V0UHJvcGVydHlWYWx1ZTxPcHRpb25hbDxkb3VibGU+Pihv
YmplY3QsIG5hbWUsIHJlcXVpcmVkLCAmSlNPTjo6VmFsdWU6OmFzRG91YmxlLCAiTnVtYmVyIik7
CiB9CiAKLWJvb2wgQmFja2VuZERpc3BhdGNoZXI6OmdldEJvb2xlYW4oSlNPTjo6T2JqZWN0KiBv
YmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCkKK1N0cmluZyBCYWNr
ZW5kRGlzcGF0Y2hlcjo6Z2V0U3RyaW5nKEpTT046Ok9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJp
bmcmIG5hbWUsIGJvb2wgcmVxdWlyZWQpCiB7Ci0gICAgcmV0dXJuIGdldFByb3BlcnR5VmFsdWU8
Ym9vbD4ob2JqZWN0LCBuYW1lLCB2YWx1ZUZvdW5kLCBmYWxzZSwgJkpTT046OlZhbHVlOjphc0Jv
b2xlYW4sICJCb29sZWFuIik7CisgICAgcmV0dXJuIGdldFByb3BlcnR5VmFsdWU8U3RyaW5nPihv
YmplY3QsIG5hbWUsIHJlcXVpcmVkLCAmSlNPTjo6VmFsdWU6OmFzU3RyaW5nLCAiU3RyaW5nIik7
CiB9CiAKLVJlZlB0cjxKU09OOjpPYmplY3Q+IEJhY2tlbmREaXNwYXRjaGVyOjpnZXRPYmplY3Qo
SlNPTjo6T2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3Vu
ZCkKK1JlZlB0cjxKU09OOjpWYWx1ZT4gQmFja2VuZERpc3BhdGNoZXI6OmdldFZhbHVlKEpTT046
Ok9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wgcmVxdWlyZWQpCiB7Ci0g
ICAgcmV0dXJuIGdldFByb3BlcnR5VmFsdWU8UmVmUHRyPEpTT046Ok9iamVjdD4+KG9iamVjdCwg
bmFtZSwgdmFsdWVGb3VuZCwgbnVsbHB0ciwgJkpTT046OlZhbHVlOjphc09iamVjdCwgIk9iamVj
dCIpOworICAgIHJldHVybiBnZXRQcm9wZXJ0eVZhbHVlPFJlZlB0cjxKU09OOjpWYWx1ZT4+KG9i
amVjdCwgbmFtZSwgcmVxdWlyZWQsICZKU09OOjpWYWx1ZTo6YXNWYWx1ZSwgIlZhbHVlIik7CiB9
CiAKLVJlZlB0cjxKU09OOjpBcnJheT4gQmFja2VuZERpc3BhdGNoZXI6OmdldEFycmF5KEpTT046
Ok9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQpCitS
ZWZQdHI8SlNPTjo6T2JqZWN0PiBCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0T2JqZWN0KEpTT046Ok9i
amVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wgcmVxdWlyZWQpCiB7Ci0gICAg
cmV0dXJuIGdldFByb3BlcnR5VmFsdWU8UmVmUHRyPEpTT046OkFycmF5Pj4ob2JqZWN0LCBuYW1l
LCB2YWx1ZUZvdW5kLCBudWxscHRyLCAmSlNPTjo6VmFsdWU6OmFzQXJyYXksICJBcnJheSIpOwor
ICAgIHJldHVybiBnZXRQcm9wZXJ0eVZhbHVlPFJlZlB0cjxKU09OOjpPYmplY3Q+PihvYmplY3Qs
IG5hbWUsIHJlcXVpcmVkLCAmSlNPTjo6VmFsdWU6OmFzT2JqZWN0LCAiT2JqZWN0Iik7CiB9CiAK
LVJlZlB0cjxKU09OOjpWYWx1ZT4gQmFja2VuZERpc3BhdGNoZXI6OmdldFZhbHVlKEpTT046Ok9i
amVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQpCitSZWZQ
dHI8SlNPTjo6QXJyYXk+IEJhY2tlbmREaXNwYXRjaGVyOjpnZXRBcnJheShKU09OOjpPYmplY3Qq
IG9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sIHJlcXVpcmVkKQogewotICAgIHJldHVy
biBnZXRQcm9wZXJ0eVZhbHVlPFJlZlB0cjxKU09OOjpWYWx1ZT4+KG9iamVjdCwgbmFtZSwgdmFs
dWVGb3VuZCwgbnVsbHB0ciwgJkpTT046OlZhbHVlOjphc1ZhbHVlLCAiVmFsdWUiKTsKKyAgICBy
ZXR1cm4gZ2V0UHJvcGVydHlWYWx1ZTxSZWZQdHI8SlNPTjo6QXJyYXk+PihvYmplY3QsIG5hbWUs
IHJlcXVpcmVkLCAmSlNPTjo6VmFsdWU6OmFzQXJyYXksICJBcnJheSIpOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaAppbmRleCA5NWQ5ZDgxMTg4
ZTczNWU4ZjFiNzBjYzBkZWVlMjY4MmNiNjcxNGYwLi4wMmM5NmQ3MjYzOGMyMjJmMDMwZDE0OTFj
YzliOTI2MmIwOGJlY2JhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oCkBAIC0yOSw4ICsyOSwx
MCBAQAogI2luY2x1ZGUgIkluc3BlY3RvckZyb250ZW5kUm91dGVyLmgiCiAjaW5jbHVkZSAiSW5z
cGVjdG9yUHJvdG9jb2xUeXBlcy5oIgogI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CisjaW5jbHVkZSA8
d3RmL0Z1bmN0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3Rm
L1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewpAQCAtNTksNyArNjEsNyBA
QCBwdWJsaWM6CiAgICAgICAgIGJvb2wgaXNBY3RpdmUoKSBjb25zdDsKICAgICAgICAgdm9pZCBk
aXNhYmxlKCkgeyBtX2FscmVhZHlTZW50ID0gdHJ1ZTsgfQogCi0gICAgICAgIHZvaWQgc2VuZFN1
Y2Nlc3MoUmVmUHRyPEpTT046Ok9iamVjdD4mJik7CisgICAgICAgIHZvaWQgc2VuZFN1Y2Nlc3Mo
UmVmPEpTT046Ok9iamVjdD4mJik7CiAgICAgICAgIHZvaWQgc2VuZEZhaWx1cmUoY29uc3QgRXJy
b3JTdHJpbmcmKTsKIAogICAgIHByaXZhdGU6CkBAIC04NywyOCArODksMjcgQEAgcHVibGljOgog
ICAgIC8vIE5vdGUgdGhhdCAndW51c2VkJyBpcyBhIHdvcmthcm91bmQgc28gdGhlIGNvbXBpbGVy
IGNhbiBwaWNrIHRoZSByaWdodCBzZW5kUmVzcG9uc2UgYmFzZWQgb24gYXJpdHkuCiAgICAgLy8g
V2hlbiA8aHR0cDovL3dlYmtpdC5vcmcvYi8xNzk4NDc+IGlzIGZpeGVkIG9yIHRoaXMgY2xhc3Mg
aXMgcmVuYW1lZCBmb3IgdGhlIEpTT046Ok9iamVjdCBjYXNlLAogICAgIC8vIHRoZW4gdGhpcyBh
bHRlcm5hdGUgbWV0aG9kIHdpdGggYSBkdW1teSBwYXJhbWV0ZXIgY2FuIGJlIHJlbW92ZWQgaW4g
ZmF2b3Igb2YgdGhlIG9uZSB3aXRob3V0IGl0LgotICAgIHZvaWQgc2VuZFJlc3BvbnNlKGxvbmcg
cmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHJlc3VsdCwgYm9vbCB1bnVzZWQpOwot
ICAgIHZvaWQgc2VuZFJlc3BvbnNlKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0
PiYmIHJlc3VsdCk7CisgICAgdm9pZCBzZW5kUmVzcG9uc2UobG9uZyByZXF1ZXN0SWQsIFJlZjxK
U09OOjpPYmplY3Q+JiYgcmVzdWx0LCBib29sIHVudXNlZCk7CisgICAgdm9pZCBzZW5kUmVzcG9u
c2UobG9uZyByZXF1ZXN0SWQsIFJlZjxKU09OOjpPYmplY3Q+JiYgcmVzdWx0KTsKICAgICB2b2lk
IHNlbmRQZW5kaW5nRXJyb3JzKCk7CiAKICAgICB2b2lkIHJlcG9ydFByb3RvY29sRXJyb3IoQ29t
bW9uRXJyb3JDb2RlLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSk7CiAgICAgdm9pZCByZXBv
cnRQcm90b2NvbEVycm9yKE9wdGlvbmFsPGxvbmc+IHJlbGF0ZWRSZXF1ZXN0SWQsIENvbW1vbkVy
cm9yQ29kZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UpOwogCi0gICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVD4KLSAgICBXVEZfSU5URVJOQUwKLSAgICBUIGdldFByb3BlcnR5VmFsdWUoSlNPTjo6
T2JqZWN0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiBvdXRfb3B0aW9uYWxWYWx1ZUZvdW5k
LCBUIGRlZmF1bHRWYWx1ZSwgc3RkOjpmdW5jdGlvbjxib29sKEpTT046OlZhbHVlJiwgVCYpPiwg
Y29uc3QgY2hhciogdHlwZU5hbWUpOwotCi0gICAgaW50IGdldEludGVnZXIoSlNPTjo6T2JqZWN0
KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kKTsKLSAgICBkb3VibGUgZ2V0
RG91YmxlKEpTT046Ok9iamVjdCosIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3Vu
ZCk7Ci0gICAgU3RyaW5nIGdldFN0cmluZyhKU09OOjpPYmplY3QqLCBjb25zdCBTdHJpbmcmIG5h
bWUsIGJvb2wqIHZhbHVlRm91bmQpOwotICAgIGJvb2wgZ2V0Qm9vbGVhbihKU09OOjpPYmplY3Qq
LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQpOwotICAgIFJlZlB0cjxKU09O
OjpWYWx1ZT4gZ2V0VmFsdWUoSlNPTjo6T2JqZWN0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29s
KiB2YWx1ZUZvdW5kKTsKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBnZXRPYmplY3QoSlNPTjo6
T2JqZWN0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kKTsKLSAgICBSZWZQ
dHI8SlNPTjo6QXJyYXk+IGdldEFycmF5KEpTT046Ok9iamVjdCosIGNvbnN0IFN0cmluZyYgbmFt
ZSwgYm9vbCogdmFsdWVGb3VuZCk7CisgICAgT3B0aW9uYWw8Ym9vbD4gZ2V0Qm9vbGVhbihKU09O
OjpPYmplY3QqLCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wgcmVxdWlyZWQpOworICAgIE9wdGlv
bmFsPGludD4gZ2V0SW50ZWdlcihKU09OOjpPYmplY3QqLCBjb25zdCBTdHJpbmcmIG5hbWUsIGJv
b2wgcmVxdWlyZWQpOworICAgIE9wdGlvbmFsPGRvdWJsZT4gZ2V0RG91YmxlKEpTT046Ok9iamVj
dCosIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCByZXF1aXJlZCk7CisgICAgU3RyaW5nIGdldFN0
cmluZyhKU09OOjpPYmplY3QqLCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wgcmVxdWlyZWQpOwor
ICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gZ2V0VmFsdWUoSlNPTjo6T2JqZWN0KiwgY29uc3QgU3Ry
aW5nJiBuYW1lLCBib29sIHJlcXVpcmVkKTsKKyAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBnZXRP
YmplY3QoSlNPTjo6T2JqZWN0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sIHJlcXVpcmVkKTsK
KyAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IGdldEFycmF5KEpTT046Ok9iamVjdCosIGNvbnN0IFN0
cmluZyYgbmFtZSwgYm9vbCByZXF1aXJlZCk7CiAKIHByaXZhdGU6CiAgICAgQmFja2VuZERpc3Bh
dGNoZXIoUmVmPEZyb250ZW5kUm91dGVyPiYmKTsKIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
CisgICAgVCBnZXRQcm9wZXJ0eVZhbHVlKEpTT046Ok9iamVjdCosIGNvbnN0IFN0cmluZyYgbmFt
ZSwgYm9vbCByZXF1aXJlZCwgc3RkOjpmdW5jdGlvbjxUKEpTT046OlZhbHVlJik+IGNvbnZlcnRl
ciwgY29uc3QgY2hhciogdHlwZU5hbWUpOworCiAgICAgUmVmPEZyb250ZW5kUm91dGVyPiBtX2Zy
b250ZW5kUm91dGVyOwogICAgIEhhc2hNYXA8U3RyaW5nLCBTdXBwbGVtZW50YWxCYWNrZW5kRGlz
cGF0Y2hlcio+IG1fZGlzcGF0Y2hlcnM7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmgKaW5kZXggZDcwMTBhNWM2
MmU4NjMzYTRkZDAxYjJjMDA2MDViYWFjYzljOGM3OS4uNTg3N2UwZDc0MTA4MmY3MTFhNWZmZWQ0
MzVjZWZjMGYyMTMxMzM1ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmgKQEAgLTI3LDEyICsyNywxOSBAQAog
I3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0
Zi9FeHBlY3RlZC5oPgogI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCiBuYW1lc3BhY2Ug
UHJvdG9jb2wgewogCit1c2luZyBFcnJvclN0cmluZyA9IFN0cmluZzsKKwordGVtcGxhdGUgPHR5
cGVuYW1lIFQ+Cit1c2luZyBFcnJvclN0cmluZ09yID0gRXhwZWN0ZWQ8VCwgRXJyb3JTdHJpbmc+
OworCiB0ZW1wbGF0ZTx0eXBlbmFtZT4gc3RydWN0IEJpbmRpbmdUcmFpdHM7CiAKIHRlbXBsYXRl
PEpTT046OlZhbHVlOjpUeXBlIHR5cGU+IHN0cnVjdCBQcmltaXRpdmVCaW5kaW5nVHJhaXRzIHsK
QEAgLTQ0LDI5ICs1MSwyMyBAQCB0ZW1wbGF0ZTxKU09OOjpWYWx1ZTo6VHlwZSB0eXBlPiBzdHJ1
Y3QgUHJpbWl0aXZlQmluZGluZ1RyYWl0cyB7CiB9OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBz
dHJ1Y3QgQmluZGluZ1RyYWl0czxKU09OOjpBcnJheU9mPFQ+PiB7Ci0gICAgc3RhdGljIFJlZlB0
cjxKU09OOjpBcnJheU9mPFQ+PiBydW50aW1lQ2FzdChSZWZQdHI8SlNPTjo6VmFsdWU+JiYgdmFs
dWUpCisgICAgc3RhdGljIFJlZjxKU09OOjpBcnJheU9mPFQ+PiBydW50aW1lQ2FzdChSZWY8SlNP
Tjo6VmFsdWU+JiYgdmFsdWUpCiAgICAgewotICAgICAgICBBU1NFUlRfQVJHKHZhbHVlLCB2YWx1
ZSk7Ci0gICAgICAgIFJlZlB0cjxKU09OOjpBcnJheT4gYXJyYXk7Ci0gICAgICAgIGJvb2wgY2Fz
dFN1Y2NlZWRlZCA9IHZhbHVlLT5hc0FycmF5KGFycmF5KTsKLSAgICAgICAgQVNTRVJUX1VOVVNF
RChjYXN0U3VjY2VlZGVkLCBjYXN0U3VjY2VlZGVkKTsKLSAgICAgICAgYXNzZXJ0VmFsdWVIYXNF
eHBlY3RlZFR5cGUoYXJyYXkuZ2V0KCkpOworICAgICAgICBhdXRvIGFycmF5ID0gdmFsdWUtPmFz
QXJyYXkoKTsKKyAgICAgICAgQmluZGluZ1RyYWl0czxKU09OOjpBcnJheU9mPFQ+Pjo6YXNzZXJ0
VmFsdWVIYXNFeHBlY3RlZFR5cGUoYXJyYXkuZ2V0KCkpOwogICAgICAgICBDT01QSUxFX0FTU0VS
VChzaXplb2YoSlNPTjo6QXJyYXlPZjxUPikgPT0gc2l6ZW9mKEpTT046OkFycmF5KSwgdHlwZV9j
YXN0X3Byb2JsZW0pOwotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SlNPTjo6QXJyYXlPZjxU
Pio+KHN0YXRpY19jYXN0PEpTT046OkFycmF5QmFzZSo+KGFycmF5LmdldCgpKSk7CisgICAgICAg
IHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SlNPTjo6QXJyYXlPZjxUPj4oc3RhdGljX3Jl
ZmVyZW5jZV9jYXN0PEpTT046OkFycmF5QmFzZT4oYXJyYXkucmVsZWFzZU5vbk51bGwoKSkpOwog
ICAgIH0KIAogICAgIHN0YXRpYyB2b2lkIGFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKEpTT046
OlZhbHVlKiB2YWx1ZSkKICAgICB7CisgICAgICAgIEFTU0VSVF9VTlVTRUQodmFsdWUsIHZhbHVl
KTsKICNpZiBBU1NFUlRfRU5BQkxFRAotICAgICAgICBBU1NFUlRfQVJHKHZhbHVlLCB2YWx1ZSk7
Ci0gICAgICAgIFJlZlB0cjxKU09OOjpBcnJheT4gYXJyYXk7Ci0gICAgICAgIGJvb2wgY2FzdFN1
Y2NlZWRlZCA9IHZhbHVlLT5hc0FycmF5KGFycmF5KTsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChj
YXN0U3VjY2VlZGVkLCBjYXN0U3VjY2VlZGVkKTsKKyAgICAgICAgYXV0byBhcnJheSA9IHZhbHVl
LT5hc0FycmF5KCk7CisgICAgICAgIEFTU0VSVChhcnJheSk7CiAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBhcnJheS0+bGVuZ3RoKCk7IGkrKykKLSAgICAgICAgICAgIEJpbmRpbmdU
cmFpdHM8VD46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKGFycmF5LT5nZXQoaSkuZ2V0KCkp
OwotI2Vsc2UKLSAgICAgICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKLSNlbmRpZiAvLyBBU1NFUlRf
RU5BQkxFRAorICAgICAgICAgICAgQmluZGluZ1RyYWl0czxUPjo6YXNzZXJ0VmFsdWVIYXNFeHBl
Y3RlZFR5cGUoYXJyYXktPmdldChpKS5wdHIoKSk7CisjZW5kaWYKICAgICB9CiB9OwogCkBAIC04
NSw2ICs4Niw0IEBAIHRlbXBsYXRlPD4gc3RydWN0IEJpbmRpbmdUcmFpdHM8aW50PiA6IFByaW1p
dGl2ZUJpbmRpbmdUcmFpdHM8SlNPTjo6VmFsdWU6OlR5cGU6CiAKIH0KIAotdXNpbmcgUHJvdG9j
b2w6OkJpbmRpbmdUcmFpdHM7Ci0KIH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0dsb2JhbE9iamVjdENvbnNvbGVD
bGllbnQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0dsb2JhbE9iamVj
dENvbnNvbGVDbGllbnQuY3BwCmluZGV4IDQ2ZDBiNjk0MzI4ZWUwNDE3NjY1MDNmZTU2ZjlkNmMy
Mjk5NzU3YzYuLmJjNjM2OWEwYzM5ZDliYjY0MDk1ZjVkODcwNDRkNjA3NTNjZDQ4N2QgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNHbG9iYWxPYmplY3RDb25z
b2xlQ2xpZW50LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTR2xv
YmFsT2JqZWN0Q29uc29sZUNsaWVudC5jcHAKQEAgLTEzNiwyOCArMTM2LDIyIEBAIHZvaWQgSlNH
bG9iYWxPYmplY3RDb25zb2xlQ2xpZW50Ojpwcm9maWxlRW5kKEpTQzo6SlNHbG9iYWxPYmplY3Qq
LCBjb25zdCBTdHJpbmcmCiAKIHZvaWQgSlNHbG9iYWxPYmplY3RDb25zb2xlQ2xpZW50OjpzdGFy
dENvbnNvbGVQcm9maWxlKCkKIHsKLSAgICBFcnJvclN0cmluZyBpZ25vcmVkOwotCiAgICAgaWYg
KG1fZGVidWdnZXJBZ2VudCkgewogICAgICAgICBtX3Byb2ZpbGVSZXN0b3JlQnJlYWtwb2ludEFj
dGl2ZVZhbHVlID0gbV9kZWJ1Z2dlckFnZW50LT5icmVha3BvaW50c0FjdGl2ZSgpOwotICAgICAg
ICBtX2RlYnVnZ2VyQWdlbnQtPnNldEJyZWFrcG9pbnRzQWN0aXZlKGlnbm9yZWQsIGZhbHNlKTsK
KyAgICAgICAgbV9kZWJ1Z2dlckFnZW50LT5zZXRCcmVha3BvaW50c0FjdGl2ZShmYWxzZSk7CiAg
ICAgfQogCi0gICAgaWYgKG1fc2NyaXB0UHJvZmlsZXJBZ2VudCkgewotICAgICAgICBjb25zdCBi
b29sIGluY2x1ZGVTYW1wbGVzID0gdHJ1ZTsKLSAgICAgICAgbV9zY3JpcHRQcm9maWxlckFnZW50
LT5zdGFydFRyYWNraW5nKGlnbm9yZWQsICZpbmNsdWRlU2FtcGxlcyk7Ci0gICAgfQorICAgIGlm
IChtX3NjcmlwdFByb2ZpbGVyQWdlbnQpCisgICAgICAgIG1fc2NyaXB0UHJvZmlsZXJBZ2VudC0+
c3RhcnRUcmFja2luZyh0cnVlKTsKIH0KIAogdm9pZCBKU0dsb2JhbE9iamVjdENvbnNvbGVDbGll
bnQ6OnN0b3BDb25zb2xlUHJvZmlsZSgpCiB7Ci0gICAgRXJyb3JTdHJpbmcgaWdub3JlZDsKLQog
ICAgIGlmIChtX3NjcmlwdFByb2ZpbGVyQWdlbnQpCi0gICAgICAgIG1fc2NyaXB0UHJvZmlsZXJB
Z2VudC0+c3RvcFRyYWNraW5nKGlnbm9yZWQpOworICAgICAgICBtX3NjcmlwdFByb2ZpbGVyQWdl
bnQtPnN0b3BUcmFja2luZygpOwogCiAgICAgaWYgKG1fZGVidWdnZXJBZ2VudCkKLSAgICAgICAg
bV9kZWJ1Z2dlckFnZW50LT5zZXRCcmVha3BvaW50c0FjdGl2ZShpZ25vcmVkLCBtX3Byb2ZpbGVS
ZXN0b3JlQnJlYWtwb2ludEFjdGl2ZVZhbHVlKTsKKyAgICAgICAgbV9kZWJ1Z2dlckFnZW50LT5z
ZXRCcmVha3BvaW50c0FjdGl2ZShtX3Byb2ZpbGVSZXN0b3JlQnJlYWtwb2ludEFjdGl2ZVZhbHVl
KTsKIH0KIAogdm9pZCBKU0dsb2JhbE9iamVjdENvbnNvbGVDbGllbnQ6OnRha2VIZWFwU25hcHNo
b3QoSlNDOjpKU0dsb2JhbE9iamVjdCosIGNvbnN0IFN0cmluZyYgdGl0bGUpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTR2xvYmFsT2JqZWN0SW5zcGVjdG9y
Q29udHJvbGxlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTR2xvYmFs
T2JqZWN0SW5zcGVjdG9yQ29udHJvbGxlci5jcHAKaW5kZXggZDRkYjU2M2ViZDc2NTMyNjYwNGY1
MTJjMzFlOWRiMjg2ZDEwODNmNC4uYTYwZjI1ZDQzN2ZiZTlmZGZjZTZiYTU4ZDNlODJjMjZkZDU2
ZDYzZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0dsb2Jh
bE9iamVjdEluc3BlY3RvckNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3IvSlNHbG9iYWxPYmplY3RJbnNwZWN0b3JDb250cm9sbGVyLmNwcApAQCAtMjMx
LDkgKzIzMSw4IEBAIHZvaWQgSlNHbG9iYWxPYmplY3RJbnNwZWN0b3JDb250cm9sbGVyOjpmcm9u
dGVuZEluaXRpYWxpemVkKCkKICAgICBpZiAobV9wYXVzZUFmdGVySW5pdGlhbGl6YXRpb24pIHsK
ICAgICAgICAgbV9wYXVzZUFmdGVySW5pdGlhbGl6YXRpb24gPSBmYWxzZTsKIAotICAgICAgICBF
cnJvclN0cmluZyBpZ25vcmVkOwotICAgICAgICBlbnN1cmVEZWJ1Z2dlckFnZW50KCkuZW5hYmxl
KGlnbm9yZWQpOwotICAgICAgICBlbnN1cmVEZWJ1Z2dlckFnZW50KCkucGF1c2UoaWdub3JlZCk7
CisgICAgICAgIGVuc3VyZURlYnVnZ2VyQWdlbnQoKS5lbmFibGUoKTsKKyAgICAgICAgZW5zdXJl
RGVidWdnZXJBZ2VudCgpLnBhdXNlKCk7CiAgICAgfQogCiAjaWYgRU5BQkxFKFJFTU9URV9JTlNQ
RUNUT1IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50
cy9JbnNwZWN0b3JBZ2VudC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2Fn
ZW50cy9JbnNwZWN0b3JBZ2VudC5jcHAKaW5kZXggNWI5YTcxNTQwODUwODY0MWNhMDYxYWVjZjhm
MDExODQ2ZjcxMDQ0OC4uODY4NmQ2OTQxYjc4NDc5OTViMmRmZmRkNjc4YjY2ZDNiNDgxZGRiNSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVj
dG9yQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRz
L0luc3BlY3RvckFnZW50LmNwcApAQCAtNTQsNDQgKzU0LDQ5IEBAIHZvaWQgSW5zcGVjdG9yQWdl
bnQ6OndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKERpc2Nvbm5lY3RSZWFzb24pCiB7CiAg
ICAgbV9wZW5kaW5nRXZhbHVhdGVUZXN0Q29tbWFuZHMuY2xlYXIoKTsKIAotICAgIEVycm9yU3Ry
aW5nIGlnbm9yZWQ7Ci0gICAgZGlzYWJsZShpZ25vcmVkKTsKKyAgICBkaXNhYmxlKCk7CiB9CiAK
LXZvaWQgSW5zcGVjdG9yQWdlbnQ6OmVuYWJsZShFcnJvclN0cmluZyYpCitQcm90b2NvbDo6RXJy
b3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JBZ2VudDo6ZW5hYmxlKCkKIHsKICAgICBtX2VuYWJs
ZWQgPSB0cnVlOwogCiAgICAgaWYgKG1fcGVuZGluZ0luc3BlY3REYXRhLmZpcnN0KQotICAgICAg
ICBpbnNwZWN0KG1fcGVuZGluZ0luc3BlY3REYXRhLmZpcnN0LmNvcHlSZWYoKSwgbV9wZW5kaW5n
SW5zcGVjdERhdGEuc2Vjb25kLmNvcHlSZWYoKSk7CisgICAgICAgIGluc3BlY3QobV9wZW5kaW5n
SW5zcGVjdERhdGEuZmlyc3QucmVsZWFzZU5vbk51bGwoKSwgbV9wZW5kaW5nSW5zcGVjdERhdGEu
c2Vjb25kLnJlbGVhc2VOb25OdWxsKCkpOwogCiAgICAgZm9yIChhdXRvJiB0ZXN0Q29tbWFuZCA6
IG1fcGVuZGluZ0V2YWx1YXRlVGVzdENvbW1hbmRzKQogICAgICAgICBtX2Zyb250ZW5kRGlzcGF0
Y2hlci0+ZXZhbHVhdGVGb3JUZXN0SW5Gcm9udGVuZCh0ZXN0Q29tbWFuZCk7CiAKICAgICBtX3Bl
bmRpbmdFdmFsdWF0ZVRlc3RDb21tYW5kcy5jbGVhcigpOworCisgICAgcmV0dXJuIHsgfTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JBZ2VudDo6ZGlzYWJsZShFcnJvclN0cmluZyYpCitQcm90b2NvbDo6
RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JBZ2VudDo6ZGlzYWJsZSgpCiB7CiAgICAgbV9l
bmFibGVkID0gZmFsc2U7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckFn
ZW50Ojppbml0aWFsaXplZChFcnJvclN0cmluZyYpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2
b2lkPiBJbnNwZWN0b3JBZ2VudDo6aW5pdGlhbGl6ZWQoKQogewogICAgIG1fZW52aXJvbm1lbnQu
ZnJvbnRlbmRJbml0aWFsaXplZCgpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNw
ZWN0b3JBZ2VudDo6aW5zcGVjdChSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVj
dD4mJiBvYmplY3RUb0luc3BlY3QsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgaGludHMpCit2b2lk
IEluc3BlY3RvckFnZW50OjppbnNwZWN0KFJlZjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2Jq
ZWN0PiYmIG9iamVjdCwgUmVmPEpTT046Ok9iamVjdD4mJiBoaW50cykKIHsKICAgICBpZiAobV9l
bmFibGVkKSB7Ci0gICAgICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5pbnNwZWN0KG9iamVjdFRv
SW5zcGVjdCwgaGludHMpOworICAgICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+aW5zcGVjdChX
VEZNb3ZlKG9iamVjdCksIFdURk1vdmUoaGludHMpKTsKICAgICAgICAgbV9wZW5kaW5nSW5zcGVj
dERhdGEuZmlyc3QgPSBudWxscHRyOwogICAgICAgICBtX3BlbmRpbmdJbnNwZWN0RGF0YS5zZWNv
bmQgPSBudWxscHRyOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbV9wZW5kaW5nSW5z
cGVjdERhdGEuZmlyc3QgPSBvYmplY3RUb0luc3BlY3Q7Ci0gICAgbV9wZW5kaW5nSW5zcGVjdERh
dGEuc2Vjb25kID0gaGludHM7CisgICAgbV9wZW5kaW5nSW5zcGVjdERhdGEuZmlyc3QgPSBXVEZN
b3ZlKG9iamVjdCk7CisgICAgbV9wZW5kaW5nSW5zcGVjdERhdGEuc2Vjb25kID0gV1RGTW92ZSho
aW50cyk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQWdlbnQ6OmV2YWx1YXRlRm9yVGVzdEluRnJvbnRl
bmQoY29uc3QgU3RyaW5nJiBzY3JpcHQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBZ2VudC5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQWdlbnQuaAppbmRleCA4NThjNjlhYzJlYjg2
ZGMxODI4YTJmM2UxMjY3MTU4MDllODlmMzVhLi41OTRjZWU3MTc0MDYwNTk5Yzg5OTM2ZDBjMjcz
NmExNTNhYTI3M2Q0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L2FnZW50cy9JbnNwZWN0b3JBZ2VudC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3IvYWdlbnRzL0luc3BlY3RvckFnZW50LmgKQEAgLTQwLDI2ICs0MCwyNCBAQCBuYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKIGNsYXNzIEJhY2tlbmREaXNwYXRjaGVyOwogY2xhc3MgSW5zcGVjdG9y
RW52aXJvbm1lbnQ7CiAKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCiBjbGFzcyBKU19F
WFBPUlRfUFJJVkFURSBJbnNwZWN0b3JBZ2VudCBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3JBZ2Vu
dEJhc2UsIHB1YmxpYyBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewogICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKEluc3BlY3RvckFnZW50KTsKICAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKIHB1YmxpYzoKICAgICBJbnNwZWN0b3JBZ2VudChBZ2VudENvbnRleHQmKTsKLSAg
ICB+SW5zcGVjdG9yQWdlbnQoKSBmaW5hbDsKKyAgICB+SW5zcGVjdG9yQWdlbnQoKTsKIAogICAg
IC8vIEluc3BlY3RvckFnZW50QmFzZQotICAgIHZvaWQgZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNr
ZW5kKEZyb250ZW5kUm91dGVyKiwgQmFja2VuZERpc3BhdGNoZXIqKSBmaW5hbDsKLSAgICB2b2lk
IHdpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKERpc2Nvbm5lY3RSZWFzb24pIGZpbmFsOwor
ICAgIHZvaWQgZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEZyb250ZW5kUm91dGVyKiwgQmFj
a2VuZERpc3BhdGNoZXIqKTsKKyAgICB2b2lkIHdpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5k
KERpc2Nvbm5lY3RSZWFzb24pOwogCiAgICAgLy8gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyCi0gICAgdm9pZCBlbmFibGUoRXJyb3JTdHJpbmcmKSBmaW5hbDsKLSAgICB2b2lkIGRp
c2FibGUoRXJyb3JTdHJpbmcmKSBmaW5hbDsKLSAgICB2b2lkIGluaXRpYWxpemVkKEVycm9yU3Ry
aW5nJikgZmluYWw7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZW5hYmxlKCk7
CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZGlzYWJsZSgpOworICAgIFByb3Rv
Y29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGluaXRpYWxpemVkKCk7CiAKICAgICAvLyBDb21tYW5k
TGluZUFQSQotICAgIHZvaWQgaW5zcGVjdChSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90
ZU9iamVjdD4mJiBvYmplY3RUb0luc3BlY3QsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgaGludHMp
OworICAgIHZvaWQgaW5zcGVjdChSZWY8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4m
JiwgUmVmPEpTT046Ok9iamVjdD4mJiBoaW50cyk7CiAKICAgICB2b2lkIGV2YWx1YXRlRm9yVGVz
dEluRnJvbnRlbmQoY29uc3QgU3RyaW5nJiBzY3JpcHQpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBdWRpdEFnZW50LmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckF1ZGl0QWdl
bnQuY3BwCmluZGV4IDAwYjFlY2MxYWY0ODA3MGVmZWRjNzY2YTNiYTZmZjViNmY0YmE3MDAuLjJm
OWY4ZjA1OWNiMTM5MTNhZmEzMGY2NDk3N2UwMzNiNTM0Yzk0OTMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckF1ZGl0QWdlbnQuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckF1
ZGl0QWdlbnQuY3BwCkBAIC01Nyw0MSArNTcsNDEgQEAgdm9pZCBJbnNwZWN0b3JBdWRpdEFnZW50
Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChEaXNjb25uZWN0UmVhc29uKQogewogfQog
Ci12b2lkIEluc3BlY3RvckF1ZGl0QWdlbnQ6OnNldHVwKEVycm9yU3RyaW5nJiBlcnJvclN0cmlu
ZywgY29uc3QgaW50KiBleGVjdXRpb25Db250ZXh0SWQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdP
cjx2b2lkPiBJbnNwZWN0b3JBdWRpdEFnZW50OjpzZXR1cChPcHRpb25hbDxQcm90b2NvbDo6UnVu
dGltZTo6RXhlY3V0aW9uQ29udGV4dElkPiYmIGV4ZWN1dGlvbkNvbnRleHRJZCkKIHsKLSAgICBp
ZiAoaGFzQWN0aXZlQXVkaXQoKSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJNdXN0IGNhbGwg
dGVhcmRvd24gYmVmb3JlIGNhbGxpbmcgc2V0dXAgYWdhaW4iX3M7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOwogCi0gICAgSW5q
ZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHQgPSBpbmplY3RlZFNjcmlwdEZvckV2YWwoZXJyb3JT
dHJpbmcsIGV4ZWN1dGlvbkNvbnRleHRJZCk7CisgICAgaWYgKGhhc0FjdGl2ZUF1ZGl0KCkpCisg
ICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTXVzdCBjYWxsIHRlYXJkb3duIGJlZm9yZSBj
YWxsaW5nIHNldHVwIGFnYWluIl9zKTsKKworICAgIEluamVjdGVkU2NyaXB0IGluamVjdGVkU2Ny
aXB0ID0gaW5qZWN0ZWRTY3JpcHRGb3JFdmFsKGVycm9yU3RyaW5nLCBXVEZNb3ZlKGV4ZWN1dGlv
bkNvbnRleHRJZCkpOwogICAgIGlmIChpbmplY3RlZFNjcmlwdC5oYXNOb1ZhbHVlKCkpCi0gICAg
ICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsK
IAogICAgIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGluamVjdGVkU2NyaXB0
Lmdsb2JhbE9iamVjdCgpOwotICAgIGlmICghZ2xvYmFsT2JqZWN0KSB7Ci0gICAgICAgIGVycm9y
U3RyaW5nID0gIk1pc3NpbmcgZXhlY3V0aW9uIHN0YXRlIG9mIGluamVjdGVkIHNjcmlwdCBmb3Ig
Z2l2ZW4gZXhlY3V0aW9uQ29udGV4dElkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAg
IGlmICghZ2xvYmFsT2JqZWN0KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk1pc3Np
bmcgZXhlY3V0aW9uIHN0YXRlIG9mIGluamVjdGVkIHNjcmlwdCBmb3IgZ2l2ZW4gZXhlY3V0aW9u
Q29udGV4dElkIl9zKTsKIAogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKIAogICAg
IEpTQzo6SlNMb2NrSG9sZGVyIGxvY2soZ2xvYmFsT2JqZWN0KTsKIAogICAgIG1faW5qZWN0ZWRX
ZWJJbnNwZWN0b3JBdWRpdFZhbHVlLnNldCh2bSwgY29uc3RydWN0RW1wdHlPYmplY3QoZ2xvYmFs
T2JqZWN0KSk7Ci0gICAgaWYgKCFtX2luamVjdGVkV2ViSW5zcGVjdG9yQXVkaXRWYWx1ZSkgewot
ICAgICAgICBlcnJvclN0cmluZyA9ICJVbmFibGUgdG8gY29uc3RydWN0IGluamVjdGVkIFdlYklu
c3BlY3RvckF1ZGl0IG9iamVjdC4iX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYg
KCFtX2luamVjdGVkV2ViSW5zcGVjdG9yQXVkaXRWYWx1ZSkKKyAgICAgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKCJVbmFibGUgdG8gY29uc3RydWN0IGluamVjdGVkIFdlYkluc3BlY3RvckF1ZGl0
IG9iamVjdC4iX3MpOwogCiAgICAgcG9wdWxhdGVBdWRpdE9iamVjdChnbG9iYWxPYmplY3QsIG1f
aW5qZWN0ZWRXZWJJbnNwZWN0b3JBdWRpdFZhbHVlKTsKKworICAgIHJldHVybiB7IH07CiB9CiAK
LXZvaWQgSW5zcGVjdG9yQXVkaXRBZ2VudDo6cnVuKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywg
Y29uc3QgU3RyaW5nJiB0ZXN0LCBjb25zdCBpbnQqIGV4ZWN1dGlvbkNvbnRleHRJZCwgUmVmUHRy
PFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiByZXN1bHQsIE9wdGlvbmFsPGJvb2w+
JiB3YXNUaHJvd24pCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxzdGQ6OnR1cGxlPFJlZjxQcm90
b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiwgT3B0aW9uYWw8Ym9vbD4gLyogd2FzVGhyb3du
ICovPj4gSW5zcGVjdG9yQXVkaXRBZ2VudDo6cnVuKGNvbnN0IFN0cmluZyYgdGVzdCwgT3B0aW9u
YWw8UHJvdG9jb2w6OlJ1bnRpbWU6OkV4ZWN1dGlvbkNvbnRleHRJZD4mJiBleGVjdXRpb25Db250
ZXh0SWQpCiB7Ci0gICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHQgPSBpbmplY3RlZFNj
cmlwdEZvckV2YWwoZXJyb3JTdHJpbmcsIGV4ZWN1dGlvbkNvbnRleHRJZCk7CisgICAgUHJvdG9j
b2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCisgICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0
ZWRTY3JpcHQgPSBpbmplY3RlZFNjcmlwdEZvckV2YWwoZXJyb3JTdHJpbmcsIFdURk1vdmUoZXhl
Y3V0aW9uQ29udGV4dElkKSk7CiAgICAgaWYgKGluamVjdGVkU2NyaXB0Lmhhc05vVmFsdWUoKSkK
LSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJp
bmcpOwogCiAgICAgU3RyaW5nQnVpbGRlciBmdW5jdGlvblN0cmluZzsKICAgICBmdW5jdGlvblN0
cmluZy5hcHBlbmRMaXRlcmFsKCIoZnVuY3Rpb24oV2ViSW5zcGVjdG9yQXVkaXQpIHsgXCJ1c2Ug
c3RyaWN0XCI7IHJldHVybiBldmFsKGAoIik7CkBAIC0xMDMsNiArMTAzLDggQEAgdm9pZCBJbnNw
ZWN0b3JBdWRpdEFnZW50OjpydW4oRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJp
bmcmIHRlc3QsIGNvbnMKICAgICBpZiAobV9pbmplY3RlZFdlYkluc3BlY3RvckF1ZGl0VmFsdWUp
CiAgICAgICAgIG9wdGlvbnMuYXJncyA9IHsgbV9pbmplY3RlZFdlYkluc3BlY3RvckF1ZGl0VmFs
dWUuZ2V0KCkgfTsKIAorICAgIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0
PiByZXN1bHQ7CisgICAgT3B0aW9uYWw8Ym9vbD4gd2FzVGhyb3duOwogICAgIE9wdGlvbmFsPGlu
dD4gc2F2ZWRSZXN1bHRJbmRleDsKIAogICAgIEpTQzo6RGVidWdnZXI6OlRlbXBvcmFyaWx5RGlz
YWJsZUV4Y2VwdGlvbkJyZWFrcG9pbnRzIHRlbXBvcmFyaWx5RGlzYWJsZUV4Y2VwdGlvbkJyZWFr
cG9pbnRzKG1fZGVidWdnZXIpOwpAQCAtMTEzLDE2ICsxMTUsMjEgQEAgdm9pZCBJbnNwZWN0b3JB
dWRpdEFnZW50OjpydW4oRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHRl
c3QsIGNvbnMKICAgICBpbmplY3RlZFNjcmlwdC5leGVjdXRlKGVycm9yU3RyaW5nLCBmdW5jdGlv
blN0cmluZy50b1N0cmluZygpLCBXVEZNb3ZlKG9wdGlvbnMpLCByZXN1bHQsIHdhc1Rocm93biwg
c2F2ZWRSZXN1bHRJbmRleCk7CiAKICAgICB1bm11dGVDb25zb2xlKCk7CisKKyAgICBpZiAoIXJl
c3VsdCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKKworICAg
IHJldHVybiB7IHsgcmVzdWx0LnJlbGVhc2VOb25OdWxsKCksIFdURk1vdmUod2FzVGhyb3duKSB9
IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yQXVkaXRBZ2VudDo6dGVhcmRvd24oRXJyb3JTdHJpbmcm
IGVycm9yU3RyaW5nKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yQXVk
aXRBZ2VudDo6dGVhcmRvd24oKQogewotICAgIGlmICghaGFzQWN0aXZlQXVkaXQoKSkgewotICAg
ICAgICBlcnJvclN0cmluZyA9ICJNdXN0IGNhbGwgc2V0dXAgYmVmb3JlIGNhbGxpbmcgdGVhcmRv
d24iX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKCFoYXNBY3RpdmVBdWRpdCgp
KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk11c3QgY2FsbCBzZXR1cCBiZWZvcmUg
Y2FsbGluZyB0ZWFyZG93biJfcyk7CiAKICAgICBtX2luamVjdGVkV2ViSW5zcGVjdG9yQXVkaXRW
YWx1ZS5jbGVhcigpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAogYm9vbCBJbnNwZWN0b3JBdWRp
dEFnZW50OjpoYXNBY3RpdmVBdWRpdCgpIGNvbnN0CkBAIC0xMzksNyArMTQ2LDcgQEAgdm9pZCBJ
bnNwZWN0b3JBdWRpdEFnZW50Ojpwb3B1bGF0ZUF1ZGl0T2JqZWN0KEpTQzo6SlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwKICAgICBKU0M6OlZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsK
ICAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKHZtKTsKIAotICAgIGF1ZGl0T2JqZWN0LT5wdXRE
aXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIlZlcnNpb24iKSwgSlND
OjpKU1ZhbHVlKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1ZGl0OjpWRVJTSU9OKSk7CisgICAgYXVk
aXRPYmplY3QtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAi
VmVyc2lvbiIpLCBKU0M6OkpTVmFsdWUoUHJvdG9jb2w6OkF1ZGl0OjpWRVJTSU9OKSk7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQXVkaXRBZ2VudC5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQXVkaXRBZ2VudC5oCmluZGV4IDVi
NmQ4YWFiNzIyNjNmMThhYTY0MTA3ODVjMDFjOWJhOGM0ZDMwZjguLmJmNTA2YzM2ZDJkZmYzZjZm
Y2E1OTlmNjdlNTg1NGEyNjhhN2IxZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckF1ZGl0QWdlbnQuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBdWRpdEFnZW50LmgKQEAgLTQw
LDcgKzQwLDYgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKIGNsYXNzIEluamVjdGVkU2NyaXB0
OwogY2xhc3MgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOwotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJp
bmc7CiAKIGNsYXNzIEpTX0VYUE9SVF9QUklWQVRFIEluc3BlY3RvckF1ZGl0QWdlbnQgOiBwdWJs
aWMgSW5zcGVjdG9yQWdlbnRCYXNlLCBwdWJsaWMgQXVkaXRCYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXIgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEluc3BlY3RvckF1ZGl0QWdlbnQpOwpAQCAt
NTMsOSArNTIsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCB3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFj
a2VuZChEaXNjb25uZWN0UmVhc29uKSBmaW5hbDsKIAogICAgIC8vIEF1ZGl0QmFja2VuZERpc3Bh
dGNoZXJIYW5kbGVyCi0gICAgdm9pZCBzZXR1cChFcnJvclN0cmluZyYsIGNvbnN0IGludCogZXhl
Y3V0aW9uQ29udGV4dElkKSBmaW5hbDsKLSAgICB2b2lkIHJ1bihFcnJvclN0cmluZyYsIGNvbnN0
IFN0cmluZyYgdGVzdCwgY29uc3QgaW50KiBleGVjdXRpb25Db250ZXh0SWQsIFJlZlB0cjxQcm90
b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0LCBPcHRpb25hbDxib29sPiYgd2Fz
VGhyb3duKSBmaW5hbDsKLSAgICB2b2lkIHRlYXJkb3duKEVycm9yU3RyaW5nJikgZmluYWw7Cisg
ICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc2V0dXAoT3B0aW9uYWw8UHJvdG9jb2w6
OlJ1bnRpbWU6OkV4ZWN1dGlvbkNvbnRleHRJZD4mJikgZmluYWw7CisgICAgUHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8c3RkOjp0dXBsZTxSZWY8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVj
dD4sIE9wdGlvbmFsPGJvb2w+IC8qIHdhc1Rocm93biAqLz4+IHJ1bihjb25zdCBTdHJpbmcmIHRl
c3QsIE9wdGlvbmFsPFByb3RvY29sOjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0SWQ+JiYpIGZp
bmFsOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHRlYXJkb3duKCkgZmluYWw7
CiAKICAgICBib29sIGhhc0FjdGl2ZUF1ZGl0KCkgY29uc3Q7CiAKQEAgLTY0LDcgKzYzLDcgQEAg
cHJvdGVjdGVkOgogCiAgICAgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyJiBpbmplY3RlZFNjcmlwdE1h
bmFnZXIoKSB7IHJldHVybiBtX2luamVjdGVkU2NyaXB0TWFuYWdlcjsgfQogCi0gICAgdmlydHVh
bCBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdEZvckV2YWwoRXJyb3JTdHJpbmcmLCBjb25z
dCBpbnQqIGV4ZWN1dGlvbkNvbnRleHRJZCkgPSAwOworICAgIHZpcnR1YWwgSW5qZWN0ZWRTY3Jp
cHQgaW5qZWN0ZWRTY3JpcHRGb3JFdmFsKFByb3RvY29sOjpFcnJvclN0cmluZyYsIE9wdGlvbmFs
PFByb3RvY29sOjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0SWQ+JiYpID0gMDsKIAogICAgIHZp
cnR1YWwgdm9pZCBwb3B1bGF0ZUF1ZGl0T2JqZWN0KEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6
OlN0cm9uZzxKU0M6OkpTT2JqZWN0PiYgYXVkaXRPYmplY3QpOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDb25zb2xlQWdlbnQu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ29u
c29sZUFnZW50LmNwcAppbmRleCAxMDVmZTZmYzZjMjIwOGVmNzYzNzFlYWVkZGJmYTQ3MzFmYmZi
NjU0Li4xM2I2MjM0ZDFmNTMyODUwZTMwMDUyNzk3M2MyMTViNzJlMzZhZTE3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDb25zb2xl
QWdlbnQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0lu
c3BlY3RvckNvbnNvbGVBZ2VudC5jcHAKQEAgLTUzLDggKzUzLDcgQEAgdm9pZCBJbnNwZWN0b3JD
b25zb2xlQWdlbnQ6OmRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChGcm9udGVuZFJvdXRlcios
IEJhY2tlbmQKIAogdm9pZCBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OndpbGxEZXN0cm95RnJvbnRl
bmRBbmRCYWNrZW5kKERpc2Nvbm5lY3RSZWFzb24pCiB7Ci0gICAgU3RyaW5nIGVycm9yU3RyaW5n
OwotICAgIGRpc2FibGUoZXJyb3JTdHJpbmcpOworICAgIGRpc2FibGUoKTsKIH0KIAogdm9pZCBJ
bnNwZWN0b3JDb25zb2xlQWdlbnQ6OmRpc2NhcmRWYWx1ZXMoKQpAQCAtNjMsMTAgKzYyLDEwIEBA
IHZvaWQgSW5zcGVjdG9yQ29uc29sZUFnZW50OjpkaXNjYXJkVmFsdWVzKCkKICAgICBtX2V4cGly
ZWRDb25zb2xlTWVzc2FnZUNvdW50ID0gMDsKIH0KIAotdm9pZCBJbnNwZWN0b3JDb25zb2xlQWdl
bnQ6OmVuYWJsZShFcnJvclN0cmluZyYpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJ
bnNwZWN0b3JDb25zb2xlQWdlbnQ6OmVuYWJsZSgpCiB7CiAgICAgaWYgKG1fZW5hYmxlZCkKLSAg
ICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4geyB9OwogCiAgICAgbV9lbmFibGVkID0gdHJ1
ZTsKIApAQCAtODAsMTcgKzc5LDIxIEBAIHZvaWQgSW5zcGVjdG9yQ29uc29sZUFnZW50OjplbmFi
bGUoRXJyb3JTdHJpbmcmKQogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtZXNzYWdlcy5z
aXplKCk7ICsraSkKICAgICAgICAgbWVzc2FnZXNbaV0tPmFkZFRvRnJvbnRlbmQoKm1fZnJvbnRl
bmREaXNwYXRjaGVyLCBtX2luamVjdGVkU2NyaXB0TWFuYWdlciwgZmFsc2UpOworCisgICAgcmV0
dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OmRpc2FibGUoRXJyb3JT
dHJpbmcmKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yQ29uc29sZUFn
ZW50OjpkaXNhYmxlKCkKIHsKICAgICBpZiAoIW1fZW5hYmxlZCkKLSAgICAgICAgcmV0dXJuOwor
ICAgICAgICByZXR1cm4geyB9OwogCiAgICAgbV9lbmFibGVkID0gZmFsc2U7CisKKyAgICByZXR1
cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckNvbnNvbGVBZ2VudDo6Y2xlYXJNZXNzYWdlcyhF
cnJvclN0cmluZyYpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JDb25z
b2xlQWdlbnQ6OmNsZWFyTWVzc2FnZXMoKQogewogICAgIG1fY29uc29sZU1lc3NhZ2VzLmNsZWFy
KCk7CiAgICAgbV9leHBpcmVkQ29uc29sZU1lc3NhZ2VDb3VudCA9IDA7CkBAIC05OSw2ICsxMDIs
OCBAQCB2b2lkIEluc3BlY3RvckNvbnNvbGVBZ2VudDo6Y2xlYXJNZXNzYWdlcyhFcnJvclN0cmlu
ZyYpCiAKICAgICBpZiAobV9lbmFibGVkKQogICAgICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+
bWVzc2FnZXNDbGVhcmVkKCk7CisKKyAgICByZXR1cm4geyB9OwogfQogCiBib29sIEluc3BlY3Rv
ckNvbnNvbGVBZ2VudDo6ZGV2ZWxvcGVyRXh0cmFzRW5hYmxlZCgpIGNvbnN0CkBAIC0xMDgsOCAr
MTEzLDcgQEAgYm9vbCBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OmRldmVsb3BlckV4dHJhc0VuYWJs
ZWQoKSBjb25zdAogCiB2b2lkIEluc3BlY3RvckNvbnNvbGVBZ2VudDo6cmVzZXQoKQogewotICAg
IEVycm9yU3RyaW5nIGlnbm9yZWQ7Ci0gICAgY2xlYXJNZXNzYWdlcyhpZ25vcmVkKTsKKyAgICBj
bGVhck1lc3NhZ2VzKCk7CiAKICAgICBtX3RpbWVzLmNsZWFyKCk7CiAgICAgbV9jb3VudHMuY2xl
YXIoKTsKQEAgLTExNywxMCArMTIxLDggQEAgdm9pZCBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OnJl
c2V0KCkKIAogdm9pZCBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OmFkZE1lc3NhZ2VUb0NvbnNvbGUo
c3RkOjp1bmlxdWVfcHRyPENvbnNvbGVNZXNzYWdlPiBtZXNzYWdlKQogewotICAgIGlmIChtZXNz
YWdlLT50eXBlKCkgPT0gTWVzc2FnZVR5cGU6OkNsZWFyKSB7Ci0gICAgICAgIEVycm9yU3RyaW5n
IGlnbm9yZWQ7Ci0gICAgICAgIGNsZWFyTWVzc2FnZXMoaWdub3JlZCk7Ci0gICAgfQorICAgIGlm
IChtZXNzYWdlLT50eXBlKCkgPT0gTWVzc2FnZVR5cGU6OkNsZWFyKQorICAgICAgICBjbGVhck1l
c3NhZ2VzKCk7CiAKICAgICBhZGRDb25zb2xlTWVzc2FnZShXVEZNb3ZlKG1lc3NhZ2UpKTsKIH0K
QEAgLTE5MSwxMiArMTkzLDEyIEBAIHZvaWQgSW5zcGVjdG9yQ29uc29sZUFnZW50Ojp0YWtlSGVh
cFNuYXBzaG90KGNvbnN0IFN0cmluZyYgdGl0bGUpCiAgICAgaWYgKCFtX2hlYXBBZ2VudCkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgRXJyb3JTdHJpbmcgaWdub3JlZDsKLSAgICBkb3VibGUgdGlt
ZXN0YW1wOwotICAgIFN0cmluZyBzbmFwc2hvdERhdGE7Ci0gICAgbV9oZWFwQWdlbnQtPnNuYXBz
aG90KGlnbm9yZWQsICZ0aW1lc3RhbXAsICZzbmFwc2hvdERhdGEpOworICAgIGF1dG8gcmVzdWx0
ID0gbV9oZWFwQWdlbnQtPnNuYXBzaG90KCk7CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJl
dHVybjsKIAotICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5oZWFwU25hcHNob3QodGltZXN0YW1w
LCBzbmFwc2hvdERhdGEsIHRpdGxlLmlzRW1wdHkoKSA/IG51bGxwdHIgOiAmdGl0bGUpOworICAg
IGF1dG8gW3RpbWVzdGFtcCwgc25hcHNob3REYXRhXSA9IFdURk1vdmUocmVzdWx0LnZhbHVlKCkp
OworICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5oZWFwU25hcHNob3QodGltZXN0YW1wLCBzbmFw
c2hvdERhdGEsIHRpdGxlKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OmNvdW50
KEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgU3RyaW5nJiBsYWJlbCkK
QEAgLTI1NiwxNSArMjU4LDE1IEBAIHZvaWQgSW5zcGVjdG9yQ29uc29sZUFnZW50OjphZGRDb25z
b2xlTWVzc2FnZShzdGQ6OnVuaXF1ZV9wdHI8Q29uc29sZU1lc3NhZ2U+IGNvCiAgICAgfQogfQog
Ci12b2lkIEluc3BlY3RvckNvbnNvbGVBZ2VudDo6Z2V0TG9nZ2luZ0NoYW5uZWxzKEVycm9yU3Ry
aW5nJiwgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWw+PiYg
Y2hhbm5lbHMpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SlNPTjo6QXJyYXlPZjxQcm90
b2NvbDo6Q29uc29sZTo6Q2hhbm5lbD4+PiBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OmdldExvZ2dp
bmdDaGFubmVscygpCiB7CiAgICAgLy8gRGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBoYXMgbm8gbG9n
Z2luZyBjaGFubmVscy4KLSAgICBjaGFubmVscyA9IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkNv
bnNvbGU6OkNoYW5uZWw+OjpjcmVhdGUoKTsKKyAgICByZXR1cm4gSlNPTjo6QXJyYXlPZjxQcm90
b2NvbDo6Q29uc29sZTo6Q2hhbm5lbD46OmNyZWF0ZSgpOwogfQogCi12b2lkIEluc3BlY3RvckNv
bnNvbGVBZ2VudDo6c2V0TG9nZ2luZ0NoYW5uZWxMZXZlbChFcnJvclN0cmluZyYgZXJyb3JTdHJp
bmcsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdP
cjx2b2lkPiBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OnNldExvZ2dpbmdDaGFubmVsTGV2ZWwoUHJv
dG9jb2w6OkNvbnNvbGU6OkNoYW5uZWxTb3VyY2UsIFByb3RvY29sOjpDb25zb2xlOjpDaGFubmVs
TGV2ZWwpCiB7Ci0gICAgZXJyb3JTdHJpbmcgPSAiTm90IHN1cHBvcnRlZCJfczsKKyAgICByZXR1
cm4gbWFrZVVuZXhwZWN0ZWQoIk5vdCBzdXBwb3J0ZWQiX3MpOwogfQogCiB9IC8vIG5hbWVzcGFj
ZSBJbnNwZWN0b3IKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
YWdlbnRzL0luc3BlY3RvckNvbnNvbGVBZ2VudC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ29uc29sZUFnZW50LmgKaW5kZXggNzhjYWYxYWQwOGFl
NTdiMWUwNzg1YzlhZGQ1MTY3NTM2YWZiZjI5Ni4uZWQ4ZTFmNjk5YTVkMGM5MWNkMDU2NjkxYTdk
YjIxOTgwZjIzNWQyMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9hZ2VudHMvSW5zcGVjdG9yQ29uc29sZUFnZW50LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ29uc29sZUFnZW50LmgKQEAgLTQ2LDcgKzQ2
LDYgQEAgY2xhc3MgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOwogY2xhc3MgSW5zcGVjdG9ySGVhcEFn
ZW50OwogY2xhc3MgU2NyaXB0QXJndW1lbnRzOwogY2xhc3MgU2NyaXB0Q2FsbFN0YWNrOwotdHlw
ZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiAKIGNsYXNzIEpTX0VYUE9SVF9QUklWQVRFIEluc3Bl
Y3RvckNvbnNvbGVBZ2VudCA6IHB1YmxpYyBJbnNwZWN0b3JBZ2VudEJhc2UsIHB1YmxpYyBDb25z
b2xlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJ
bnNwZWN0b3JDb25zb2xlQWdlbnQpOwpAQCAtNjEsMTEgKzYwLDExIEBAIHB1YmxpYzoKICAgICB2
b2lkIGRpc2NhcmRWYWx1ZXMoKSBmaW5hbDsKIAogICAgIC8vIENvbnNvbGVCYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXIKLSAgICB2b2lkIGVuYWJsZShFcnJvclN0cmluZyYpIGZpbmFsOwotICAgIHZv
aWQgZGlzYWJsZShFcnJvclN0cmluZyYpIGZpbmFsOwotICAgIHZvaWQgY2xlYXJNZXNzYWdlcyhF
cnJvclN0cmluZyYpIG92ZXJyaWRlOwotICAgIHZvaWQgZ2V0TG9nZ2luZ0NoYW5uZWxzKEVycm9y
U3RyaW5nJiwgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWw+
PiYpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0TG9nZ2luZ0NoYW5uZWxMZXZlbChFcnJvclN0cmlu
ZyYsIGNvbnN0IFN0cmluZyYgY2hhbm5lbCwgY29uc3QgU3RyaW5nJiBsZXZlbCkgb3ZlcnJpZGU7
CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZW5hYmxlKCkgZmluYWw7CisgICAg
UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZGlzYWJsZSgpIGZpbmFsOworICAgIFByb3Rv
Y29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGNsZWFyTWVzc2FnZXMoKSBvdmVycmlkZTsKKyAgICBQ
cm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6Q29uc29s
ZTo6Q2hhbm5lbD4+PiBnZXRMb2dnaW5nQ2hhbm5lbHMoKSBvdmVycmlkZTsKKyAgICBQcm90b2Nv
bDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzZXRMb2dnaW5nQ2hhbm5lbExldmVsKFByb3RvY29sOjpD
b25zb2xlOjpDaGFubmVsU291cmNlLCBQcm90b2NvbDo6Q29uc29sZTo6Q2hhbm5lbExldmVsKSBv
dmVycmlkZTsKIAogICAgIHZvaWQgc2V0SGVhcEFnZW50KEluc3BlY3RvckhlYXBBZ2VudCogYWdl
bnQpIHsgbV9oZWFwQWdlbnQgPSBhZ2VudDsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRlYnVnZ2VyQWdl
bnQuY3BwCmluZGV4IDEzZmMyYzUzYjVhYzQ2NWU2ZTNkNjZhYmUwNTVjMGVlNmQ0ZGMwNzAuLjQx
ZjRiYTQyN2VhNGY3OWRjMTQ0N2ZlYTU5NjRhZDgwNjNjYmRmNzIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQuY3BwCkBAIC02NCwyNSArNjQsMjUgQEAgc3RhdGljIGJvb2wgaXNXZWJL
aXRJbmplY3RlZFNjcmlwdChjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCkKICAgICByZXR1cm4gc291
cmNlVVJMLnN0YXJ0c1dpdGgoIl9fSW5qZWN0ZWRTY3JpcHRfIikgJiYgc291cmNlVVJMLmVuZHNX
aXRoKCIuanMiKTsKIH0KIAotc3RhdGljIE9wdGlvbmFsPEpTQzo6QnJlYWtwb2ludDo6QWN0aW9u
OjpUeXBlPiBicmVha3BvaW50QWN0aW9uVHlwZUZvclN0cmluZyhFcnJvclN0cmluZyYgZXJyb3JT
dHJpbmcsIGNvbnN0IFN0cmluZyYgdHlwZVN0cmluZykKK3N0YXRpYyBPcHRpb25hbDxKU0M6OkJy
ZWFrcG9pbnQ6OkFjdGlvbjo6VHlwZT4gYnJlYWtwb2ludEFjdGlvblR5cGVGb3JTdHJpbmcoUHJv
dG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiB0eXBlU3RyaW5n
KQogewotICAgIGF1dG8gdHlwZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6Okluc3BlY3RvckhlbHBl
cnM6OnBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dl
cjo6QnJlYWtwb2ludEFjdGlvbjo6VHlwZT4odHlwZVN0cmluZyk7CisgICAgYXV0byB0eXBlID0g
UHJvdG9jb2w6OkhlbHBlcnM6OnBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxQcm90b2NvbDo6RGVi
dWdnZXI6OkJyZWFrcG9pbnRBY3Rpb246OlR5cGU+KHR5cGVTdHJpbmcpOwogICAgIGlmICghdHlw
ZSkgewogICAgICAgICBlcnJvclN0cmluZyA9IG1ha2VTdHJpbmcoIlVua25vd24gYnJlYWtwb2lu
dCBhY3Rpb24gdHlwZTogIl9zLCB0eXBlU3RyaW5nKTsKICAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKICAgICB9CiAKICAgICBzd2l0Y2ggKCp0eXBlKSB7Ci0gICAgY2FzZSBJbnNwZWN0b3I6
OlByb3RvY29sOjpEZWJ1Z2dlcjo6QnJlYWtwb2ludEFjdGlvbjo6VHlwZTo6TG9nOgorICAgIGNh
c2UgUHJvdG9jb2w6OkRlYnVnZ2VyOjpCcmVha3BvaW50QWN0aW9uOjpUeXBlOjpMb2c6CiAgICAg
ICAgIHJldHVybiBKU0M6OkJyZWFrcG9pbnQ6OkFjdGlvbjo6VHlwZTo6TG9nOwogCi0gICAgY2Fz
ZSBJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6QnJlYWtwb2ludEFjdGlvbjo6VHlwZTo6
RXZhbHVhdGU6CisgICAgY2FzZSBQcm90b2NvbDo6RGVidWdnZXI6OkJyZWFrcG9pbnRBY3Rpb246
OlR5cGU6OkV2YWx1YXRlOgogICAgICAgICByZXR1cm4gSlNDOjpCcmVha3BvaW50OjpBY3Rpb246
OlR5cGU6OkV2YWx1YXRlOwogCi0gICAgY2FzZSBJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dl
cjo6QnJlYWtwb2ludEFjdGlvbjo6VHlwZTo6U291bmQ6CisgICAgY2FzZSBQcm90b2NvbDo6RGVi
dWdnZXI6OkJyZWFrcG9pbnRBY3Rpb246OlR5cGU6OlNvdW5kOgogICAgICAgICByZXR1cm4gSlND
OjpCcmVha3BvaW50OjpBY3Rpb246OlR5cGU6OlNvdW5kOwogCi0gICAgY2FzZSBJbnNwZWN0b3I6
OlByb3RvY29sOjpEZWJ1Z2dlcjo6QnJlYWtwb2ludEFjdGlvbjo6VHlwZTo6UHJvYmU6CisgICAg
Y2FzZSBQcm90b2NvbDo6RGVidWdnZXI6OkJyZWFrcG9pbnRBY3Rpb246OlR5cGU6OlByb2JlOgog
ICAgICAgICByZXR1cm4gSlNDOjpCcmVha3BvaW50OjpBY3Rpb246OlR5cGU6OlByb2JlOwogICAg
IH0KIApAQCAtOTEsMzAgKzkxLDI5IEBAIHN0YXRpYyBPcHRpb25hbDxKU0M6OkJyZWFrcG9pbnQ6
OkFjdGlvbjo6VHlwZT4gYnJlYWtwb2ludEFjdGlvblR5cGVGb3JTdHJpbmcoRXJyCiB9CiAKIHRl
bXBsYXRlIDx0eXBlbmFtZSBUPgotc3RhdGljIFQgcGFyc2VCcmVha3BvaW50T3B0aW9ucyhFcnJv
clN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IEpTT046Ok9iamVjdCogb3B0aW9uc1BheWxvYWQs
IEZ1bmN0aW9uPFQoY29uc3QgU3RyaW5nJiwgSlNDOjpCcmVha3BvaW50OjpBY3Rpb25zVmVjdG9y
JiYsIGJvb2wsIHNpemVfdCk+IGNhbGxiYWNrKQorc3RhdGljIFQgcGFyc2VCcmVha3BvaW50T3B0
aW9ucyhQcm90b2NvbDo6RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiYmIG9wdGlvbnMsIEZ1bmN0aW9uPFQoY29uc3QgU3RyaW5nJiwgSlNDOjpCcmVha3BvaW50
OjpBY3Rpb25zVmVjdG9yJiYsIGJvb2wsIHNpemVfdCk+IGNhbGxiYWNrKQogewogICAgIFN0cmlu
ZyBjb25kaXRpb247CiAgICAgSlNDOjpCcmVha3BvaW50OjpBY3Rpb25zVmVjdG9yIGFjdGlvbnM7
CiAgICAgYm9vbCBhdXRvQ29udGludWUgPSBmYWxzZTsKICAgICBzaXplX3QgaWdub3JlQ291bnQg
PSAwOwogCi0gICAgaWYgKG9wdGlvbnNQYXlsb2FkKSB7Ci0gICAgICAgIG9wdGlvbnNQYXlsb2Fk
LT5nZXRTdHJpbmcoImNvbmRpdGlvbiJfcywgY29uZGl0aW9uKTsKKyAgICBpZiAob3B0aW9ucykg
eworICAgICAgICBjb25kaXRpb24gPSBvcHRpb25zLT5nZXRTdHJpbmcoUHJvdG9jb2w6OkRlYnVn
Z2VyOjpCcmVha3BvaW50T3B0aW9uczo6Y29uZGl0aW9uS2V5KTsKIAotICAgICAgICBSZWZQdHI8
SlNPTjo6QXJyYXk+IGFjdGlvbnNQYXlsb2FkOwotICAgICAgICBvcHRpb25zUGF5bG9hZC0+Z2V0
QXJyYXkoImFjdGlvbnMiX3MsIGFjdGlvbnNQYXlsb2FkKTsKKyAgICAgICAgYXV0byBhY3Rpb25z
UGF5bG9hZCA9IG9wdGlvbnMtPmdldEFycmF5KFByb3RvY29sOjpEZWJ1Z2dlcjo6QnJlYWtwb2lu
dE9wdGlvbnM6OmFjdGlvbnNLZXkpOwogICAgICAgICBpZiAoYXV0byBjb3VudCA9IGFjdGlvbnNQ
YXlsb2FkID8gYWN0aW9uc1BheWxvYWQtPmxlbmd0aCgpIDogMCkgewogICAgICAgICAgICAgYWN0
aW9ucy5yZXNlcnZlQ2FwYWNpdHkoY291bnQpOwogCiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewotICAgICAgICAgICAgICAgIFJlZlB0cjxKU09OOjpP
YmplY3Q+IGFjdGlvbk9iamVjdDsKLSAgICAgICAgICAgICAgICBpZiAoIWFjdGlvbnNQYXlsb2Fk
LT5nZXQoaSktPmFzT2JqZWN0KGFjdGlvbk9iamVjdCkpIHsKKyAgICAgICAgICAgICAgICBhdXRv
IGFjdGlvbk9iamVjdCA9IGFjdGlvbnNQYXlsb2FkLT5nZXQoaSktPmFzT2JqZWN0KCk7CisgICAg
ICAgICAgICAgICAgaWYgKCFhY3Rpb25PYmplY3QpIHsKICAgICAgICAgICAgICAgICAgICAgZXJy
b3JTdHJpbmcgPSAiVW5leHBlY3RlZCBub24tb2JqZWN0IGl0ZW0gaW4gZ2l2ZW4gYWN0aW9ucyJf
czsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgICAgICBTdHJpbmcgYWN0aW9uVHlwZVN0cmluZzsKLSAgICAgICAgICAgICAg
ICBpZiAoIWFjdGlvbk9iamVjdC0+Z2V0U3RyaW5nKCJ0eXBlIl9zLCBhY3Rpb25UeXBlU3RyaW5n
KSkgeworICAgICAgICAgICAgICAgIGF1dG8gYWN0aW9uVHlwZVN0cmluZyA9IGFjdGlvbk9iamVj
dC0+Z2V0U3RyaW5nKFByb3RvY29sOjpEZWJ1Z2dlcjo6QnJlYWtwb2ludEFjdGlvbjo6dHlwZUtl
eSk7CisgICAgICAgICAgICAgICAgaWYgKCFhY3Rpb25UeXBlU3RyaW5nKSB7CiAgICAgICAgICAg
ICAgICAgICAgIGVycm9yU3RyaW5nID0gIk1pc3NpbmcgdHlwZSBmb3IgaXRlbSBpbiBnaXZlbiBh
Y3Rpb25zIl9zOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4geyB9OwogICAgICAgICAgICAg
ICAgIH0KQEAgLTEyNSwzMyArMTI0LDMzIEBAIHN0YXRpYyBUIHBhcnNlQnJlYWtwb2ludE9wdGlv
bnMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBKU09OOjpPYmplY3QqIG9wCiAKICAg
ICAgICAgICAgICAgICBKU0M6OkJyZWFrcG9pbnQ6OkFjdGlvbiBhY3Rpb24oKmFjdGlvblR5cGUp
OwogCi0gICAgICAgICAgICAgICAgYWN0aW9uT2JqZWN0LT5nZXRTdHJpbmcoImRhdGEiX3MsIGFj
dGlvbi5kYXRhKTsKKyAgICAgICAgICAgICAgICBhY3Rpb24uZGF0YSA9IGFjdGlvbk9iamVjdC0+
Z2V0U3RyaW5nKFByb3RvY29sOjpEZWJ1Z2dlcjo6QnJlYWtwb2ludEFjdGlvbjo6ZGF0YUtleSk7
CiAKICAgICAgICAgICAgICAgICAvLyBTcGVjaWZ5aW5nIGFuIGlkZW50aWZpZXIgaXMgb3B0aW9u
YWwuIFRoZXkgYXJlIHVzZWQgdG8gY29ycmVsYXRlIHByb2JlIHNhbXBsZXMKICAgICAgICAgICAg
ICAgICAvLyBpbiB0aGUgZnJvbnRlbmQgYWNyb3NzIG11bHRpcGxlIGJhY2tlbmQgcHJvYmUgYWN0
aW9ucyBhbmQgc2VncmVnYXRlIG9iamVjdCBncm91cHMuCi0gICAgICAgICAgICAgICAgYWN0aW9u
T2JqZWN0LT5nZXRJbnRlZ2VyKCJpZCJfcywgYWN0aW9uLmlkKTsKKyAgICAgICAgICAgICAgICBh
Y3Rpb24uaWQgPSBhY3Rpb25PYmplY3QtPmdldEludGVnZXIoUHJvdG9jb2w6OkRlYnVnZ2VyOjpC
cmVha3BvaW50QWN0aW9uOjppZEtleSkudmFsdWVPcihKU0M6Om5vQnJlYWtwb2ludEFjdGlvbklE
KTsKIAogICAgICAgICAgICAgICAgIGFjdGlvbnMuYXBwZW5kKFdURk1vdmUoYWN0aW9uKSk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBvcHRpb25zUGF5bG9hZC0+Z2V0Qm9v
bGVhbigiYXV0b0NvbnRpbnVlIl9zLCBhdXRvQ29udGludWUpOwotICAgICAgICBvcHRpb25zUGF5
bG9hZC0+Z2V0SW50ZWdlcigiaWdub3JlQ291bnQiX3MsIGlnbm9yZUNvdW50KTsKKyAgICAgICAg
YXV0b0NvbnRpbnVlID0gb3B0aW9ucy0+Z2V0Qm9vbGVhbihQcm90b2NvbDo6RGVidWdnZXI6OkJy
ZWFrcG9pbnRPcHRpb25zOjphdXRvQ29udGludWVLZXkpLnZhbHVlT3IoZmFsc2UpOworICAgICAg
ICBpZ25vcmVDb3VudCA9IG9wdGlvbnMtPmdldEludGVnZXIoUHJvdG9jb2w6OkRlYnVnZ2VyOjpC
cmVha3BvaW50T3B0aW9uczo6aWdub3JlQ291bnRLZXkpLnZhbHVlT3IoMCk7CiAgICAgfQogCiAg
ICAgcmV0dXJuIGNhbGxiYWNrKGNvbmRpdGlvbiwgV1RGTW92ZShhY3Rpb25zKSwgYXV0b0NvbnRp
bnVlLCBpZ25vcmVDb3VudCk7CiB9CiAKLU9wdGlvbmFsPEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6
OlByb3RvY29sQnJlYWtwb2ludD4gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6UHJvdG9jb2xCcmVh
a3BvaW50Ojpmcm9tUGF5bG9hZChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIEpTQzo6U291cmNl
SUQgc291cmNlSUQsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIHVuc2lnbmVkIGNvbHVtbk51bWJlciwg
Y29uc3QgSlNPTjo6T2JqZWN0KiBvcHRpb25zUGF5bG9hZCkKK09wdGlvbmFsPEluc3BlY3RvckRl
YnVnZ2VyQWdlbnQ6OlByb3RvY29sQnJlYWtwb2ludD4gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6
UHJvdG9jb2xCcmVha3BvaW50Ojpmcm9tUGF5bG9hZChQcm90b2NvbDo6RXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBKU0M6OlNvdXJjZUlEIHNvdXJjZUlELCB1bnNpZ25lZCBsaW5lTnVtYmVyLCB1
bnNpZ25lZCBjb2x1bW5OdW1iZXIsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgb3B0aW9ucykKIHsK
LSAgICByZXR1cm4gcGFyc2VCcmVha3BvaW50T3B0aW9uczxPcHRpb25hbDxQcm90b2NvbEJyZWFr
cG9pbnQ+PihlcnJvclN0cmluZywgb3B0aW9uc1BheWxvYWQsIFsmXSAoY29uc3QgU3RyaW5nJiBj
b25kaXRpb24sIEpTQzo6QnJlYWtwb2ludDo6QWN0aW9uc1ZlY3RvciYmIGFjdGlvbnMsIGJvb2wg
YXV0b0NvbnRpbnVlLCBzaXplX3QgaWdub3JlQ291bnQpIC0+IE9wdGlvbmFsPFByb3RvY29sQnJl
YWtwb2ludD4geworICAgIHJldHVybiBwYXJzZUJyZWFrcG9pbnRPcHRpb25zPE9wdGlvbmFsPFBy
b3RvY29sQnJlYWtwb2ludD4+KGVycm9yU3RyaW5nLCBXVEZNb3ZlKG9wdGlvbnMpLCBbJl0gKGNv
bnN0IFN0cmluZyYgY29uZGl0aW9uLCBKU0M6OkJyZWFrcG9pbnQ6OkFjdGlvbnNWZWN0b3ImJiBh
Y3Rpb25zLCBib29sIGF1dG9Db250aW51ZSwgc2l6ZV90IGlnbm9yZUNvdW50KSAtPiBPcHRpb25h
bDxQcm90b2NvbEJyZWFrcG9pbnQ+IHsKICAgICAgICAgcmV0dXJuIFByb3RvY29sQnJlYWtwb2lu
dChzb3VyY2VJRCwgbGluZU51bWJlciwgY29sdW1uTnVtYmVyLCBjb25kaXRpb24sIFdURk1vdmUo
YWN0aW9ucyksIGF1dG9Db250aW51ZSwgaWdub3JlQ291bnQpOwogICAgIH0pOwogfQogCi1PcHRp
b25hbDxJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpQcm90b2NvbEJyZWFrcG9pbnQ+IEluc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQ6OlByb3RvY29sQnJlYWtwb2ludDo6ZnJvbVBheWxvYWQoRXJyb3JTdHJp
bmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHVybCwgYm9vbCBpc1JlZ2V4LCB1bnNpZ25l
ZCBsaW5lTnVtYmVyLCB1bnNpZ25lZCBjb2x1bW5OdW1iZXIsIGNvbnN0IEpTT046Ok9iamVjdCog
b3B0aW9uc1BheWxvYWQpCitPcHRpb25hbDxJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpQcm90b2Nv
bEJyZWFrcG9pbnQ+IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OlByb3RvY29sQnJlYWtwb2ludDo6
ZnJvbVBheWxvYWQoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3Ry
aW5nJiB1cmwsIGJvb2wgaXNSZWdleCwgdW5zaWduZWQgbGluZU51bWJlciwgdW5zaWduZWQgY29s
dW1uTnVtYmVyLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIG9wdGlvbnMpCiB7Ci0gICAgcmV0dXJu
IHBhcnNlQnJlYWtwb2ludE9wdGlvbnM8T3B0aW9uYWw8UHJvdG9jb2xCcmVha3BvaW50Pj4oZXJy
b3JTdHJpbmcsIG9wdGlvbnNQYXlsb2FkLCBbJl0gKGNvbnN0IFN0cmluZyYgY29uZGl0aW9uLCBK
U0M6OkJyZWFrcG9pbnQ6OkFjdGlvbnNWZWN0b3ImJiBhY3Rpb25zLCBib29sIGF1dG9Db250aW51
ZSwgc2l6ZV90IGlnbm9yZUNvdW50KSAtPiBPcHRpb25hbDxQcm90b2NvbEJyZWFrcG9pbnQ+IHsK
KyAgICByZXR1cm4gcGFyc2VCcmVha3BvaW50T3B0aW9uczxPcHRpb25hbDxQcm90b2NvbEJyZWFr
cG9pbnQ+PihlcnJvclN0cmluZywgV1RGTW92ZShvcHRpb25zKSwgWyZdIChjb25zdCBTdHJpbmcm
IGNvbmRpdGlvbiwgSlNDOjpCcmVha3BvaW50OjpBY3Rpb25zVmVjdG9yJiYgYWN0aW9ucywgYm9v
bCBhdXRvQ29udGludWUsIHNpemVfdCBpZ25vcmVDb3VudCkgLT4gT3B0aW9uYWw8UHJvdG9jb2xC
cmVha3BvaW50PiB7CiAgICAgICAgIHJldHVybiBQcm90b2NvbEJyZWFrcG9pbnQodXJsLCBpc1Jl
Z2V4LCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIsIGNvbmRpdGlvbiwgV1RGTW92ZShhY3Rpb25z
KSwgYXV0b0NvbnRpbnVlLCBpZ25vcmVDb3VudCk7CiAgICAgfSk7CiB9CkBAIC0yMDcsOSArMjA2
LDkgQEAgYm9vbCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpQcm90b2NvbEJyZWFrcG9pbnQ6Om1h
dGNoZXNTY3JpcHRVUkwoY29uc3QgU3RyaW5nJgogICAgIHJldHVybiBtX3VybCA9PSBzY3JpcHRV
Ukw7CiB9CiAKLVJlZlB0cjxKU0M6OkJyZWFrcG9pbnQ+IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6
OmRlYnVnZ2VyQnJlYWtwb2ludEZyb21QYXlsb2FkKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywg
Y29uc3QgSlNPTjo6T2JqZWN0KiBvcHRpb25zUGF5bG9hZCkKK1JlZlB0cjxKU0M6OkJyZWFrcG9p
bnQ+IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRlYnVnZ2VyQnJlYWtwb2ludEZyb21QYXlsb2Fk
KFByb3RvY29sOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIFJlZlB0cjxKU09OOjpPYmplY3Q+
JiYgb3B0aW9ucykKIHsKLSAgICByZXR1cm4gcGFyc2VCcmVha3BvaW50T3B0aW9uczxSZWZQdHI8
SlNDOjpCcmVha3BvaW50Pj4oZXJyb3JTdHJpbmcsIG9wdGlvbnNQYXlsb2FkLCBbXSAoY29uc3Qg
U3RyaW5nJiBjb25kaXRpb24sIEpTQzo6QnJlYWtwb2ludDo6QWN0aW9uc1ZlY3RvciYmIGFjdGlv
bnMsIGJvb2wgYXV0b0NvbnRpbnVlLCBzaXplX3QgaWdub3JlQ291bnQpIHsKKyAgICByZXR1cm4g
cGFyc2VCcmVha3BvaW50T3B0aW9uczxSZWZQdHI8SlNDOjpCcmVha3BvaW50Pj4oZXJyb3JTdHJp
bmcsIFdURk1vdmUob3B0aW9ucyksIFtdIChjb25zdCBTdHJpbmcmIGNvbmRpdGlvbiwgSlNDOjpC
cmVha3BvaW50OjpBY3Rpb25zVmVjdG9yJiYgYWN0aW9ucywgYm9vbCBhdXRvQ29udGludWUsIHNp
emVfdCBpZ25vcmVDb3VudCkgewogICAgICAgICByZXR1cm4gSlNDOjpCcmVha3BvaW50OjpjcmVh
dGUoSlNDOjpub0JyZWFrcG9pbnRJRCwgY29uZGl0aW9uLCBXVEZNb3ZlKGFjdGlvbnMpLCBhdXRv
Q29udGludWUsIGlnbm9yZUNvdW50KTsKICAgICB9KTsKIH0KQEAgLTIzNCwxMCArMjMzLDEwIEBA
IHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5k
KEZyb250ZW5kUm91dGVyKiwgQmFja2VuCiB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6Ondp
bGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKERpc2Nvbm5lY3RSZWFzb24gcmVhc29uKQogewog
ICAgIGlmIChlbmFibGVkKCkpCi0gICAgICAgIGRpc2FibGUocmVhc29uID09IERpc2Nvbm5lY3RS
ZWFzb246Okluc3BlY3RlZFRhcmdldERlc3Ryb3llZCk7CisgICAgICAgIGludGVybmFsRGlzYWJs
ZShyZWFzb24gPT0gRGlzY29ubmVjdFJlYXNvbjo6SW5zcGVjdGVkVGFyZ2V0RGVzdHJveWVkKTsK
IH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjplbmFibGUoKQordm9pZCBJbnNwZWN0
b3JEZWJ1Z2dlckFnZW50OjppbnRlcm5hbEVuYWJsZSgpCiB7CiAgICAgbV9lbmFibGVkID0gdHJ1
ZTsKIApAQCAtMjU3LDcgKzI1Niw3IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZW5h
YmxlKCkKICAgICB9CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlzYWJsZShi
b29sIGlzQmVpbmdEZXN0cm95ZWQpCit2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmludGVy
bmFsRGlzYWJsZShib29sIGlzQmVpbmdEZXN0cm95ZWQpCiB7CiAgICAgZm9yIChhdXRvKiBsaXN0
ZW5lciA6IGNvcHlUb1ZlY3RvcihtX2xpc3RlbmVycykpCiAgICAgICAgIGxpc3RlbmVyLT5kZWJ1
Z2dlcldhc0Rpc2FibGVkKCk7CkBAIC0yNzcsMTkgKzI3NiwyMSBAQCB2b2lkIEluc3BlY3RvckRl
YnVnZ2VyQWdlbnQ6OmRpc2FibGUoYm9vbCBpc0JlaW5nRGVzdHJveWVkKQogICAgIG1fZW5hYmxl
ZCA9IGZhbHNlOwogfQogCi12b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmVuYWJsZShFcnJv
clN0cmluZyYgZXJyb3JTdHJpbmcpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNw
ZWN0b3JEZWJ1Z2dlckFnZW50OjplbmFibGUoKQogewotICAgIGlmIChlbmFibGVkKCkpIHsKLSAg
ICAgICAgZXJyb3JTdHJpbmcgPSAiRGVidWdnZXIgZG9tYWluIGFscmVhZHkgZW5hYmxlZCJfczsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoZW5hYmxlZCgpKQorICAgICAgICByZXR1
cm4gbWFrZVVuZXhwZWN0ZWQoIkRlYnVnZ2VyIGRvbWFpbiBhbHJlYWR5IGVuYWJsZWQiX3MpOwog
Ci0gICAgZW5hYmxlKCk7CisgICAgaW50ZXJuYWxFbmFibGUoKTsKKworICAgIHJldHVybiB7IH07
CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlzYWJsZShFcnJvclN0cmluZyYp
CitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojpk
aXNhYmxlKCkKIHsKLSAgICBkaXNhYmxlKGZhbHNlKTsKKyAgICBpbnRlcm5hbERpc2FibGUoZmFs
c2UpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAogYm9vbCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50
OjpicmVha3BvaW50c0FjdGl2ZSgpIGNvbnN0CkBAIC0yOTcsMjggKzI5OCwzMCBAQCBib29sIElu
c3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmJyZWFrcG9pbnRzQWN0aXZlKCkgY29uc3QKICAgICByZXR1
cm4gbV9kZWJ1Z2dlci5icmVha3BvaW50c0FjdGl2ZSgpOwogfQogCi12b2lkIEluc3BlY3RvckRl
YnVnZ2VyQWdlbnQ6OnNldEFzeW5jU3RhY2tUcmFjZURlcHRoKEVycm9yU3RyaW5nJiBlcnJvclN0
cmluZywgaW50IGRlcHRoKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9y
RGVidWdnZXJBZ2VudDo6c2V0QXN5bmNTdGFja1RyYWNlRGVwdGgoaW50IGRlcHRoKQogewogICAg
IGlmIChtX2FzeW5jU3RhY2tUcmFjZURlcHRoID09IGRlcHRoKQotICAgICAgICByZXR1cm47Cisg
ICAgICAgIHJldHVybiB7IH07CiAKLSAgICBpZiAoZGVwdGggPCAwKSB7Ci0gICAgICAgIGVycm9y
U3RyaW5nID0gIlVuZXhwZWN0ZWQgbmVnYXRpdmUgZGVwdGgiX3M7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9CisgICAgaWYgKGRlcHRoIDwgMCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVk
KCJVbmV4cGVjdGVkIG5lZ2F0aXZlIGRlcHRoIl9zKTsKIAogICAgIG1fYXN5bmNTdGFja1RyYWNl
RGVwdGggPSBkZXB0aDsKIAogICAgIGlmICghbV9hc3luY1N0YWNrVHJhY2VEZXB0aCkKICAgICAg
ICAgY2xlYXJBc3luY1N0YWNrVHJhY2VEYXRhKCk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12
b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldEJyZWFrcG9pbnRzQWN0aXZlKEVycm9yU3Ry
aW5nJiwgYm9vbCBhY3RpdmUpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0
b3JEZWJ1Z2dlckFnZW50OjpzZXRCcmVha3BvaW50c0FjdGl2ZShib29sIGFjdGl2ZSkKIHsKICAg
ICBpZiAoYWN0aXZlKQogICAgICAgICBtX2RlYnVnZ2VyLmFjdGl2YXRlQnJlYWtwb2ludHMoKTsK
ICAgICBlbHNlCiAgICAgICAgIG1fZGVidWdnZXIuZGVhY3RpdmF0ZUJyZWFrcG9pbnRzKCk7CisK
KyAgICByZXR1cm4geyB9OwogfQogCiBib29sIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmlzUGF1
c2VkKCkgY29uc3QKQEAgLTM0MiwyMCArMzQ1LDIwIEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJB
Z2VudDo6dXBkYXRlUGF1c2VSZWFzb25BbmREYXRhKERlYnVnZ2VyRnJvbnRlbmREaXNwYXRjaGVy
CiAgICAgbV9wYXVzZURhdGEgPSBXVEZNb3ZlKGRhdGEpOwogfQogCi1zdGF0aWMgUmVmUHRyPEpT
T046Ok9iamVjdD4gYnVpbGRBc3NlcnRQYXVzZVJlYXNvbihjb25zdCBTdHJpbmcmIG1lc3NhZ2Up
CitzdGF0aWMgUmVmPEpTT046Ok9iamVjdD4gYnVpbGRBc3NlcnRQYXVzZVJlYXNvbihjb25zdCBT
dHJpbmcmIG1lc3NhZ2UpCiB7CiAgICAgYXV0byByZWFzb24gPSBQcm90b2NvbDo6RGVidWdnZXI6
OkFzc2VydFBhdXNlUmVhc29uOjpjcmVhdGUoKS5yZWxlYXNlKCk7CiAgICAgaWYgKCFtZXNzYWdl
LmlzTnVsbCgpKQogICAgICAgICByZWFzb24tPnNldE1lc3NhZ2UobWVzc2FnZSk7Ci0gICAgcmV0
dXJuIHJlYXNvbi0+b3BlbkFjY2Vzc29ycygpOworICAgIHJldHVybiAqcmVhc29uLT5hc09iamVj
dCgpOwogfQogCi1zdGF0aWMgUmVmUHRyPEpTT046Ok9iamVjdD4gYnVpbGRDU1BWaW9sYXRpb25Q
YXVzZVJlYXNvbihjb25zdCBTdHJpbmcmIGRpcmVjdGl2ZVRleHQpCitzdGF0aWMgUmVmPEpTT046
Ok9iamVjdD4gYnVpbGRDU1BWaW9sYXRpb25QYXVzZVJlYXNvbihjb25zdCBTdHJpbmcmIGRpcmVj
dGl2ZVRleHQpCiB7CiAgICAgYXV0byByZWFzb24gPSBQcm90b2NvbDo6RGVidWdnZXI6OkNTUFZp
b2xhdGlvblBhdXNlUmVhc29uOjpjcmVhdGUoKQogICAgICAgICAuc2V0RGlyZWN0aXZlKGRpcmVj
dGl2ZVRleHQpCiAgICAgICAgIC5yZWxlYXNlKCk7Ci0gICAgcmV0dXJuIHJlYXNvbi0+b3BlbkFj
Y2Vzc29ycygpOworICAgIHJldHVybiAqcmVhc29uLT5hc09iamVjdCgpOwogfQogCiBSZWZQdHI8
SlNPTjo6T2JqZWN0PiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpidWlsZEJyZWFrcG9pbnRQYXVz
ZVJlYXNvbihKU0M6OkJyZWFrcG9pbnRJRCBkZWJ1Z2dlckJyZWFrcG9pbnRJRCkKQEAgLTM2OCw3
ICszNzEsNyBAQCBSZWZQdHI8SlNPTjo6T2JqZWN0PiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojpi
dWlsZEJyZWFrcG9pbnRQYXVzZVJlYXNvbihKU0M6OkJyZQogICAgICAgICAgICAgICAgIGF1dG8g
cmVhc29uID0gUHJvdG9jb2w6OkRlYnVnZ2VyOjpCcmVha3BvaW50UGF1c2VSZWFzb246OmNyZWF0
ZSgpCiAgICAgICAgICAgICAgICAgICAgIC5zZXRCcmVha3BvaW50SWQocHJvdG9jb2xCcmVha3Bv
aW50SUQpCiAgICAgICAgICAgICAgICAgICAgIC5yZWxlYXNlKCk7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIHJlYXNvbi0+b3BlbkFjY2Vzc29ycygpOworICAgICAgICAgICAgICAgIHJldHVybiBy
ZWFzb24tPmFzT2JqZWN0KCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC0z
ODYsNyArMzg5LDExIEBAIFJlZlB0cjxKU09OOjpPYmplY3Q+IEluc3BlY3RvckRlYnVnZ2VyQWdl
bnQ6OmJ1aWxkRXhjZXB0aW9uUGF1c2VSZWFzb24oSlNDOjpKU1ZhCiAgICAgaWYgKGluamVjdGVk
U2NyaXB0Lmhhc05vVmFsdWUoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1
cm4gaW5qZWN0ZWRTY3JpcHQud3JhcE9iamVjdChleGNlcHRpb24sIEluc3BlY3RvckRlYnVnZ2Vy
QWdlbnQ6OmJhY2t0cmFjZU9iamVjdEdyb3VwKS0+b3BlbkFjY2Vzc29ycygpOworICAgIGF1dG8g
ZXhjZXB0aW9uVmFsdWUgPSBpbmplY3RlZFNjcmlwdC53cmFwT2JqZWN0KGV4Y2VwdGlvbiwgSW5z
cGVjdG9yRGVidWdnZXJBZ2VudDo6YmFja3RyYWNlT2JqZWN0R3JvdXApOworICAgIGlmICghZXhj
ZXB0aW9uVmFsdWUpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuIGV4Y2Vw
dGlvblZhbHVlLT5hc09iamVjdCgpOwogfQogCiB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6
OmhhbmRsZUNvbnNvbGVBc3NlcnQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQpAQCAtNDkyLDcgKzQ5
OSw3IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlkRGlzcGF0Y2hBc3luY0NhbGwo
KQogICAgICAgICBtX3BlbmRpbmdBc3luY0NhbGxzLnJlbW92ZShpZGVudGlmaWVyKTsKIH0KIAot
c3RhdGljIFJlZlB0cjxQcm90b2NvbDo6RGVidWdnZXI6OkxvY2F0aW9uPiBidWlsZERlYnVnZ2Vy
TG9jYXRpb24oY29uc3QgSlNDOjpCcmVha3BvaW50JiBkZWJ1Z2dlckJyZWFrcG9pbnQpCitzdGF0
aWMgUmVmPFByb3RvY29sOjpEZWJ1Z2dlcjo6TG9jYXRpb24+IGJ1aWxkRGVidWdnZXJMb2NhdGlv
bihjb25zdCBKU0M6OkJyZWFrcG9pbnQmIGRlYnVnZ2VyQnJlYWtwb2ludCkKIHsKICAgICBBU1NF
UlQoZGVidWdnZXJCcmVha3BvaW50LmlzUmVzb2x2ZWQoKSk7CiAKQEAgLTUwMSw1MCArNTA4LDQ5
IEBAIHN0YXRpYyBSZWZQdHI8UHJvdG9jb2w6OkRlYnVnZ2VyOjpMb2NhdGlvbj4gYnVpbGREZWJ1
Z2dlckxvY2F0aW9uKGNvbnN0IEpTQzo6QnJlCiAgICAgICAgIC5zZXRMaW5lTnVtYmVyKGRlYnVn
Z2VyQnJlYWtwb2ludC5saW5lTnVtYmVyKCkpCiAgICAgICAgIC5yZWxlYXNlKCk7CiAgICAgbG9j
YXRpb24tPnNldENvbHVtbk51bWJlcihkZWJ1Z2dlckJyZWFrcG9pbnQuY29sdW1uTnVtYmVyKCkp
OwotCiAgICAgcmV0dXJuIGxvY2F0aW9uOwogfQogCi1zdGF0aWMgYm9vbCBwYXJzZUxvY2F0aW9u
KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgSlNPTjo6T2JqZWN0JiBsb2NhdGlvbiwg
SlNDOjpTb3VyY2VJRCYgc291cmNlSUQsIHVuc2lnbmVkJiBsaW5lTnVtYmVyLCB1bnNpZ25lZCYg
Y29sdW1uTnVtYmVyKQorc3RhdGljIGJvb2wgcGFyc2VMb2NhdGlvbihQcm90b2NvbDo6RXJyb3JT
dHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBKU09OOjpPYmplY3QmIGxvY2F0aW9uLCBKU0M6OlNv
dXJjZUlEJiBzb3VyY2VJRCwgdW5zaWduZWQmIGxpbmVOdW1iZXIsIHVuc2lnbmVkJiBjb2x1bW5O
dW1iZXIpCiB7Ci0gICAgaWYgKCFsb2NhdGlvbi5nZXRJbnRlZ2VyKCJsaW5lTnVtYmVyIl9zLCBs
aW5lTnVtYmVyKSkgeworICAgIGF1dG8gbGluZU51bWJlclZhbHVlID0gbG9jYXRpb24uZ2V0SW50
ZWdlcihQcm90b2NvbDo6RGVidWdnZXI6OkxvY2F0aW9uOjpsaW5lTnVtYmVyS2V5KTsKKyAgICBp
ZiAoIWxpbmVOdW1iZXJWYWx1ZSkgewogICAgICAgICBlcnJvclN0cmluZyA9ICJVbmV4cGVjdGVk
IG5vbi1pbnRlZ2VyIGxpbmVOdW1iZXIgaW4gZ2l2ZW4gbG9jYXRpb24iX3M7CiAgICAgICAgIHNv
dXJjZUlEID0gSlNDOjpub1NvdXJjZUlEOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQog
Ci0gICAgU3RyaW5nIHNjcmlwdElEU3RyOwotICAgIGlmICghbG9jYXRpb24uZ2V0U3RyaW5nKCJz
Y3JpcHRJZCJfcywgc2NyaXB0SURTdHIpKSB7CisgICAgbGluZU51bWJlciA9ICpsaW5lTnVtYmVy
VmFsdWU7CisKKyAgICBhdXRvIHNjcmlwdElEU3RyID0gbG9jYXRpb24uZ2V0U3RyaW5nKFByb3Rv
Y29sOjpEZWJ1Z2dlcjo6TG9jYXRpb246OnNjcmlwdElkS2V5KTsKKyAgICBpZiAoIXNjcmlwdElE
U3RyKSB7CiAgICAgICAgIHNvdXJjZUlEID0gSlNDOjpub1NvdXJjZUlEOwogICAgICAgICBlcnJv
clN0cmluZyA9ICJVbmV4ZXBjdGVkIG5vbi1zdHJpbmcgc2NyaXB0SWQgaW4gZ2l2ZW4gbG9jYXRp
b24iX3M7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKICAgICBzb3VyY2VJRCA9IHNj
cmlwdElEU3RyLnRvSW50UHRyKCk7Ci0gICAgY29sdW1uTnVtYmVyID0gMDsKLSAgICBsb2NhdGlv
bi5nZXRJbnRlZ2VyKCJjb2x1bW5OdW1iZXIiX3MsIGNvbHVtbk51bWJlcik7CisgICAgY29sdW1u
TnVtYmVyID0gbG9jYXRpb24uZ2V0SW50ZWdlcihQcm90b2NvbDo6RGVidWdnZXI6OkxvY2F0aW9u
Ojpjb2x1bW5OdW1iZXJLZXkpLnZhbHVlT3IoMCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZv
aWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0QnJlYWtwb2ludEJ5VXJsKEVycm9yU3RyaW5n
JiBlcnJvclN0cmluZywgaW50IGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxVUkws
IGNvbnN0IFN0cmluZyogb3B0aW9uYWxVUkxSZWdleCwgY29uc3QgaW50KiBvcHRpb25hbENvbHVt
bk51bWJlciwgY29uc3QgSlNPTjo6T2JqZWN0KiBvcHRpb25zUGF5bG9hZCwgUHJvdG9jb2w6OkRl
YnVnZ2VyOjpCcmVha3BvaW50SWQqIG91dEJyZWFrcG9pbnRJZCwgUmVmUHRyPEpTT046OkFycmF5
T2Y8UHJvdG9jb2w6OkRlYnVnZ2VyOjpMb2NhdGlvbj4+JiBvdXRMb2NhdGlvbnMpCitQcm90b2Nv
bDo6RXJyb3JTdHJpbmdPcjxzdGQ6OnR1cGxlPFByb3RvY29sOjpEZWJ1Z2dlcjo6QnJlYWtwb2lu
dElkLCBSZWY8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6RGVidWdnZXI6OkxvY2F0aW9uPj4+PiBJ
bnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZXRCcmVha3BvaW50QnlVcmwoaW50IGxpbmVOdW1iZXIs
IGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIHVybFJlZ2V4LCBPcHRpb25hbDxpbnQ+
JiYgY29sdW1uTnVtYmVyLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIG9wdGlvbnMpCiB7Ci0gICAg
aWYgKCFvcHRpb25hbFVSTCA9PSAhb3B0aW9uYWxVUkxSZWdleCkgewotICAgICAgICBlcnJvclN0
cmluZyA9ICJFaXRoZXIgdXJsIG9yIHVybFJlZ2V4IG11c3QgYmUgc3BlY2lmaWVkIl9zOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghdXJsID09ICF1cmxSZWdleCkKKyAgICAgICAg
cmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJFaXRoZXIgdXJsIG9yIHVybFJlZ2V4IG11c3QgYmUgc3Bl
Y2lmaWVkIl9zKTsKIAotICAgIGF1dG8gcHJvdG9jb2xCcmVha3BvaW50ID0gUHJvdG9jb2xCcmVh
a3BvaW50Ojpmcm9tUGF5bG9hZChlcnJvclN0cmluZywgb3B0aW9uYWxVUkwgPyAqb3B0aW9uYWxV
UkwgOiAqb3B0aW9uYWxVUkxSZWdleCwgISFvcHRpb25hbFVSTFJlZ2V4LCBsaW5lTnVtYmVyLCBv
cHRpb25hbENvbHVtbk51bWJlciA/ICpvcHRpb25hbENvbHVtbk51bWJlciA6IDAsIG9wdGlvbnNQ
YXlsb2FkKTsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKKyAgICBh
dXRvIHByb3RvY29sQnJlYWtwb2ludCA9IFByb3RvY29sQnJlYWtwb2ludDo6ZnJvbVBheWxvYWQo
ZXJyb3JTdHJpbmcsICEhdXJsID8gdXJsIDogdXJsUmVnZXgsICEhdXJsUmVnZXgsIGxpbmVOdW1i
ZXIsIGNvbHVtbk51bWJlci52YWx1ZU9yKDApLCBXVEZNb3ZlKG9wdGlvbnMpKTsKICAgICBpZiAo
IXByb3RvY29sQnJlYWtwb2ludCkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFr
ZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCi0gICAgaWYgKG1fcHJvdG9jb2xCcmVha3BvaW50
Rm9yUHJvdG9jb2xCcmVha3BvaW50SUQuY29udGFpbnMocHJvdG9jb2xCcmVha3BvaW50LT5pZCgp
KSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJCcmVha3BvaW50IGZvciBnaXZlbiBsb2NhdGlv
biBhbHJlYWR5IGV4aXN0cy4iX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKG1f
cHJvdG9jb2xCcmVha3BvaW50Rm9yUHJvdG9jb2xCcmVha3BvaW50SUQuY29udGFpbnMocHJvdG9j
b2xCcmVha3BvaW50LT5pZCgpKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJCcmVh
a3BvaW50IGZvciBnaXZlbiBsb2NhdGlvbiBhbHJlYWR5IGV4aXN0cy4iX3MpOwogCiAgICAgbV9w
cm90b2NvbEJyZWFrcG9pbnRGb3JQcm90b2NvbEJyZWFrcG9pbnRJRC5zZXQocHJvdG9jb2xCcmVh
a3BvaW50LT5pZCgpLCAqcHJvdG9jb2xCcmVha3BvaW50KTsKIAotICAgIG91dExvY2F0aW9ucyA9
IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkRlYnVnZ2VyOjpMb2NhdGlvbj46OmNyZWF0ZSgpOwor
ICAgIGF1dG8gbG9jYXRpb25zID0gSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6RGVidWdnZXI6Okxv
Y2F0aW9uPjo6Y3JlYXRlKCk7CiAKICAgICBmb3IgKGF1dG8mIFtzb3VyY2VJRCwgc2NyaXB0XSA6
IG1fc2NyaXB0cykgewogICAgICAgICBTdHJpbmcgc2NyaXB0VVJMRm9yQnJlYWtwb2ludHMgPSAh
c2NyaXB0LnNvdXJjZVVSTC5pc0VtcHR5KCkgPyBzY3JpcHQuc291cmNlVVJMIDogc2NyaXB0LnVy
bDsKQEAgLTU2MSwyOSArNTY3LDI5IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0
QnJlYWtwb2ludEJ5VXJsKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IGxpCiAKICAgICAg
ICAgZGlkU2V0QnJlYWtwb2ludCgqcHJvdG9jb2xCcmVha3BvaW50LCBkZWJ1Z2dlckJyZWFrcG9p
bnQpOwogCi0gICAgICAgIG91dExvY2F0aW9ucy0+YWRkSXRlbShidWlsZERlYnVnZ2VyTG9jYXRp
b24oZGVidWdnZXJCcmVha3BvaW50KSk7CisgICAgICAgIGxvY2F0aW9ucy0+YWRkSXRlbShidWls
ZERlYnVnZ2VyTG9jYXRpb24oZGVidWdnZXJCcmVha3BvaW50KSk7CiAgICAgfQogCi0gICAgKm91
dEJyZWFrcG9pbnRJZCA9IHByb3RvY29sQnJlYWtwb2ludC0+aWQoKTsKKyAgICByZXR1cm4geyB7
IHByb3RvY29sQnJlYWtwb2ludC0+aWQoKSwgV1RGTW92ZShsb2NhdGlvbnMpIH0gfTsKIH0KIAot
dm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZXRCcmVha3BvaW50KEVycm9yU3RyaW5nJiBl
cnJvclN0cmluZywgY29uc3QgSlNPTjo6T2JqZWN0JiBsb2NhdGlvbiwgY29uc3QgSlNPTjo6T2Jq
ZWN0KiBvcHRpb25zUGF5bG9hZCwgUHJvdG9jb2w6OkRlYnVnZ2VyOjpCcmVha3BvaW50SWQqIG91
dEJyZWFrcG9pbnRJZCwgUmVmUHRyPFByb3RvY29sOjpEZWJ1Z2dlcjo6TG9jYXRpb24+JiBvdXRB
Y3R1YWxMb2NhdGlvbikKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHN0ZDo6dHVwbGU8UHJvdG9j
b2w6OkRlYnVnZ2VyOjpCcmVha3BvaW50SWQsIFJlZjxQcm90b2NvbDo6RGVidWdnZXI6OkxvY2F0
aW9uPj4+IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldEJyZWFrcG9pbnQoUmVmPEpTT046Ok9i
amVjdD4mJiBsb2NhdGlvbiwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBvcHRpb25zKQogeworICAg
IFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIEpTQzo6U291cmNlSUQg
c291cmNlSUQ7CiAgICAgdW5zaWduZWQgbGluZU51bWJlcjsKICAgICB1bnNpZ25lZCBjb2x1bW5O
dW1iZXI7CiAgICAgaWYgKCFwYXJzZUxvY2F0aW9uKGVycm9yU3RyaW5nLCBsb2NhdGlvbiwgc291
cmNlSUQsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlcikpCi0gICAgICAgIHJldHVybjsKKyAgICAg
ICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgIGF1dG8gc2NyaXB0
SXRlcmF0b3IgPSBtX3NjcmlwdHMuZmluZChzb3VyY2VJRCk7Ci0gICAgaWYgKHNjcmlwdEl0ZXJh
dG9yID09IG1fc2NyaXB0cy5lbmQoKSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5n
IHNjcmlwdCBmb3Igc2NyaXB0SWQgaW4gZ2l2ZW4gbG9jYXRpb24iX3M7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9CisgICAgaWYgKHNjcmlwdEl0ZXJhdG9yID09IG1fc2NyaXB0cy5lbmQoKSkKKyAg
ICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJNaXNzaW5nIHNjcmlwdCBmb3Igc2NyaXB0SWQg
aW4gZ2l2ZW4gbG9jYXRpb24iX3MpOwogCi0gICAgYXV0byBwcm90b2NvbEJyZWFrcG9pbnQgPSBQ
cm90b2NvbEJyZWFrcG9pbnQ6OmZyb21QYXlsb2FkKGVycm9yU3RyaW5nLCBzb3VyY2VJRCwgbGlu
ZU51bWJlciwgY29sdW1uTnVtYmVyLCBvcHRpb25zUGF5bG9hZCk7CisgICAgYXV0byBwcm90b2Nv
bEJyZWFrcG9pbnQgPSBQcm90b2NvbEJyZWFrcG9pbnQ6OmZyb21QYXlsb2FkKGVycm9yU3RyaW5n
LCBzb3VyY2VJRCwgbGluZU51bWJlciwgY29sdW1uTnVtYmVyLCBXVEZNb3ZlKG9wdGlvbnMpKTsK
ICAgICBpZiAoIXByb3RvY29sQnJlYWtwb2ludCkKLSAgICAgICAgcmV0dXJuOworICAgICAgICBy
ZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCiAgICAgLy8gRG9uJ3Qgc2F2ZSBg
cHJvdG9jb2xCcmVha3BvaW50YCBpbiBgbV9wcm90b2NvbEJyZWFrcG9pbnRGb3JQcm90b2NvbEJy
ZWFrcG9pbnRJRGAgYmVjYXVzZSBpdAogICAgIC8vIHdhcyBzZXQgc3BlY2lmaWNhbGx5IGZvciB0
aGUgZ2l2ZW4gYHNvdXJjZUlEYCwgd2hpY2ggaXMgdW5pcXVlLCBtZWFuaW5nIHRoYXQgaXQgd2ls
bCBuZXZlcgpAQCAtNTkxLDIwICs1OTcsMTUgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50
OjpzZXRCcmVha3BvaW50KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgSlNPTjoKIAog
ICAgIGF1dG8gZGVidWdnZXJCcmVha3BvaW50ID0gcHJvdG9jb2xCcmVha3BvaW50LT5jcmVhdGVE
ZWJ1Z2dlckJyZWFrcG9pbnQobV9uZXh0RGVidWdnZXJCcmVha3BvaW50SUQrKywgc291cmNlSUQp
OwogCi0gICAgaWYgKCFyZXNvbHZlQnJlYWtwb2ludChzY3JpcHRJdGVyYXRvci0+dmFsdWUsIGRl
YnVnZ2VyQnJlYWtwb2ludCkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiQ291bGQgbm90IHJl
c29sdmUgYnJlYWtwb2ludCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoIXJl
c29sdmVCcmVha3BvaW50KHNjcmlwdEl0ZXJhdG9yLT52YWx1ZSwgZGVidWdnZXJCcmVha3BvaW50
KSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJDb3VsZCBub3QgcmVzb2x2ZSBicmVh
a3BvaW50Il9zKTsKIAotICAgIGlmICghc2V0QnJlYWtwb2ludChkZWJ1Z2dlckJyZWFrcG9pbnQp
KSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIkJyZWFrcG9pbnQgZm9yIGdpdmVuIGxvY2F0aW9u
IGFscmVhZHkgZXhpc3RzIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghc2V0
QnJlYWtwb2ludChkZWJ1Z2dlckJyZWFrcG9pbnQpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoIkJyZWFrcG9pbnQgZm9yIGdpdmVuIGxvY2F0aW9uIGFscmVhZHkgZXhpc3RzIl9zKTsK
IAogICAgIGRpZFNldEJyZWFrcG9pbnQoKnByb3RvY29sQnJlYWtwb2ludCwgZGVidWdnZXJCcmVh
a3BvaW50KTsKIAotICAgIG91dEFjdHVhbExvY2F0aW9uID0gYnVpbGREZWJ1Z2dlckxvY2F0aW9u
KGRlYnVnZ2VyQnJlYWtwb2ludCk7Ci0gICAgKm91dEJyZWFrcG9pbnRJZCA9IHByb3RvY29sQnJl
YWtwb2ludC0+aWQoKTsKKyAgICByZXR1cm4geyB7IHByb3RvY29sQnJlYWtwb2ludC0+aWQoKSwg
YnVpbGREZWJ1Z2dlckxvY2F0aW9uKGRlYnVnZ2VyQnJlYWtwb2ludCkgfSB9OwogfQogCiB2b2lk
IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpZFNldEJyZWFrcG9pbnQoUHJvdG9jb2xCcmVha3Bv
aW50JiBwcm90b2NvbEJyZWFrcG9pbnQsIEpTQzo6QnJlYWtwb2ludCYgZGVidWdnZXJCcmVha3Bv
aW50KQpAQCAtNjMwLDcgKzYzMSw3IEBAIGJvb2wgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0
QnJlYWtwb2ludChKU0M6OkJyZWFrcG9pbnQmIGRlYnVnZ2VyQnJlYWtwb2ludCkKICAgICByZXR1
cm4gbV9kZWJ1Z2dlci5zZXRCcmVha3BvaW50KGRlYnVnZ2VyQnJlYWtwb2ludCk7CiB9CiAKLXZv
aWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6cmVtb3ZlQnJlYWtwb2ludChFcnJvclN0cmluZyYs
IGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpCcmVha3BvaW50SWQmIHByb3Rv
Y29sQnJlYWtwb2ludElEKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9y
RGVidWdnZXJBZ2VudDo6cmVtb3ZlQnJlYWtwb2ludChjb25zdCBQcm90b2NvbDo6RGVidWdnZXI6
OkJyZWFrcG9pbnRJZCYgcHJvdG9jb2xCcmVha3BvaW50SUQpCiB7CiAgICAgbV9wcm90b2NvbEJy
ZWFrcG9pbnRGb3JQcm90b2NvbEJyZWFrcG9pbnRJRC5yZW1vdmUocHJvdG9jb2xCcmVha3BvaW50
SUQpOwogCkBAIC02NDEsMjQgKzY0MiwzNCBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6
OnJlbW92ZUJyZWFrcG9pbnQoRXJyb3JTdHJpbmcmLCBjb25zdCBJbnNwZWN0b3I6OlBybwogICAg
ICAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrZXIobV9kZWJ1Z2dlci52bSgpKTsKICAgICAgICAg
bV9kZWJ1Z2dlci5yZW1vdmVCcmVha3BvaW50KGRlYnVnZ2VyQnJlYWtwb2ludCk7CiAgICAgfQor
CisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojpjb250
aW51ZVVudGlsTmV4dFJ1bkxvb3AoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nKQorUHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6Y29udGludWVVbnRp
bE5leHRSdW5Mb29wKCkKIHsKLSAgICBpZiAoIWFzc2VydFBhdXNlZChlcnJvclN0cmluZykpCi0g
ICAgICAgIHJldHVybjsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CiAK
LSAgICByZXN1bWUoZXJyb3JTdHJpbmcpOworICAgIGlmICghYXNzZXJ0UGF1c2VkKGVycm9yU3Ry
aW5nKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKKworICAg
IGF1dG8gcmVzdW1lUmVzdWx0ID0gcmVzdW1lKCk7CisgICAgaWYgKCFyZXN1bWVSZXN1bHQpCisg
ICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChyZXN1bWVSZXN1bHQuZXJyb3IoKSk7CiAKICAg
ICBtX2VuYWJsZVBhdXNlV2hlbklkbGUgPSB0cnVlOwogCiAgICAgcmVnaXN0ZXJJZGxlSGFuZGxl
cigpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50
Ojpjb250aW51ZVRvTG9jYXRpb24oRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBKU09O
OjpPYmplY3QmIGxvY2F0aW9uKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVj
dG9yRGVidWdnZXJBZ2VudDo6Y29udGludWVUb0xvY2F0aW9uKFJlZjxKU09OOjpPYmplY3Q+JiYg
bG9jYXRpb24pCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAg
ICAgaWYgKCFhc3NlcnRQYXVzZWQoZXJyb3JTdHJpbmcpKQotICAgICAgICByZXR1cm47CisgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAgICBpZiAobV9jb250
aW51ZVRvTG9jYXRpb25EZWJ1Z2dlckJyZWFrcG9pbnQpIHsKICAgICAgICAgbV9kZWJ1Z2dlci5y
ZW1vdmVCcmVha3BvaW50KCptX2NvbnRpbnVlVG9Mb2NhdGlvbkRlYnVnZ2VyQnJlYWtwb2ludCk7
CkBAIC02NjksMTkgKzY4MCwxOCBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmNvbnRp
bnVlVG9Mb2NhdGlvbihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0CiAgICAgdW5zaWdu
ZWQgbGluZU51bWJlcjsKICAgICB1bnNpZ25lZCBjb2x1bW5OdW1iZXI7CiAgICAgaWYgKCFwYXJz
ZUxvY2F0aW9uKGVycm9yU3RyaW5nLCBsb2NhdGlvbiwgc291cmNlSUQsIGxpbmVOdW1iZXIsIGNv
bHVtbk51bWJlcikpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVj
dGVkKGVycm9yU3RyaW5nKTsKIAogICAgIGF1dG8gc2NyaXB0SXRlcmF0b3IgPSBtX3NjcmlwdHMu
ZmluZChzb3VyY2VJRCk7CiAgICAgaWYgKHNjcmlwdEl0ZXJhdG9yID09IG1fc2NyaXB0cy5lbmQo
KSkgewogICAgICAgICBtX2RlYnVnZ2VyLmNvbnRpbnVlUHJvZ3JhbSgpOwogICAgICAgICBtX2Zy
b250ZW5kRGlzcGF0Y2hlci0+cmVzdW1lZCgpOwotICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNz
aW5nIHNjcmlwdCBmb3Igc2NyaXB0SWQgaW4gZ2l2ZW4gbG9jYXRpb24iX3M7Ci0gICAgICAgIHJl
dHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJNaXNzaW5nIHNjcmlwdCBmb3Ig
c2NyaXB0SWQgaW4gZ2l2ZW4gbG9jYXRpb24iX3MpOwogICAgIH0KIAogICAgIGF1dG8gcHJvdG9j
b2xCcmVha3BvaW50ID0gUHJvdG9jb2xCcmVha3BvaW50Ojpmcm9tUGF5bG9hZChlcnJvclN0cmlu
Zywgc291cmNlSUQsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlcik7CiAgICAgaWYgKCFwcm90b2Nv
bEJyZWFrcG9pbnQpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVj
dGVkKGVycm9yU3RyaW5nKTsKIAogICAgIC8vIERvbid0IHNhdmUgYHByb3RvY29sQnJlYWtwb2lu
dGAgaW4gYG1fcHJvdG9jb2xCcmVha3BvaW50Rm9yUHJvdG9jb2xCcmVha3BvaW50SURgIGJlY2F1
c2UgaXQKICAgICAvLyBpcyBhIHRlbXBvcmFyeSBicmVha3BvaW50IHRoYXQgd2lsbCBiZSByZW1v
dmVkIGFzIHNvb24gYXMgYGxvY2F0aW9uYCBpcyByZWFjaGVkLgpAQCAtNjkxLDggKzcwMSw3IEBA
IHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6Y29udGludWVUb0xvY2F0aW9uKEVycm9yU3Ry
aW5nJiBlcnJvclN0cmluZywgY29uc3QKICAgICBpZiAoIXJlc29sdmVCcmVha3BvaW50KHNjcmlw
dEl0ZXJhdG9yLT52YWx1ZSwgZGVidWdnZXJCcmVha3BvaW50KSkgewogICAgICAgICBtX2RlYnVn
Z2VyLmNvbnRpbnVlUHJvZ3JhbSgpOwogICAgICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+cmVz
dW1lZCgpOwotICAgICAgICBlcnJvclN0cmluZyA9ICJDb3VsZCBub3QgcmVzb2x2ZSBicmVha3Bv
aW50Il9zOwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgi
Q291bGQgbm90IHJlc29sdmUgYnJlYWtwb2ludCJfcyk7CiAgICAgfQogCiAgICAgaWYgKCFzZXRC
cmVha3BvaW50KGRlYnVnZ2VyQnJlYWtwb2ludCkpIHsKQEAgLTcwMSw3ICs3MTAsNyBAQCB2b2lk
IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmNvbnRpbnVlVG9Mb2NhdGlvbihFcnJvclN0cmluZyYg
ZXJyb3JTdHJpbmcsIGNvbnN0CiAgICAgICAgIC8vIGhpdCB0aGlzIG5ldyBicmVha3BvaW50IG9y
IG5vdC4KICAgICAgICAgbV9kZWJ1Z2dlci5jb250aW51ZVByb2dyYW0oKTsKICAgICAgICAgbV9m
cm9udGVuZERpc3BhdGNoZXItPnJlc3VtZWQoKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICBy
ZXR1cm4geyB9OwogICAgIH0KIAogICAgIG1fY29udGludWVUb0xvY2F0aW9uRGVidWdnZXJCcmVh
a3BvaW50ID0gV1RGTW92ZShkZWJ1Z2dlckJyZWFrcG9pbnQpOwpAQCAtNzEwLDQxICs3MTksNDIg
QEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojpjb250aW51ZVRvTG9jYXRpb24oRXJyb3JT
dHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdAogICAgIC8vIFNvIGRvbid0IGlzc3VlIGEgcmVzdW1l
ZCBldmVudCB1bmxlc3Mgd2UgZXhpdCB0aGUgVk0gd2l0aG91dCBwYXVzaW5nLgogICAgIHdpbGxT
dGVwQW5kTWF5QmVjb21lSWRsZSgpOwogICAgIG1fZGVidWdnZXIuY29udGludWVQcm9ncmFtKCk7
CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNl
YXJjaEluQ29udGVudChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgc2Ny
aXB0SURTdHIsIGNvbnN0IFN0cmluZyYgcXVlcnksIGNvbnN0IGJvb2wqIG9wdGlvbmFsQ2FzZVNl
bnNpdGl2ZSwgY29uc3QgYm9vbCogb3B0aW9uYWxJc1JlZ2V4LCBSZWZQdHI8SlNPTjo6QXJyYXlP
ZjxQcm90b2NvbDo6R2VuZXJpY1R5cGVzOjpTZWFyY2hNYXRjaD4+JiByZXN1bHRzKQorUHJvdG9j
b2w6OkVycm9yU3RyaW5nT3I8UmVmPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkdlbmVyaWNUeXBl
czo6U2VhcmNoTWF0Y2g+Pj4gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2VhcmNoSW5Db250ZW50
KGNvbnN0IFByb3RvY29sOjpEZWJ1Z2dlcjo6U2NyaXB0SWQmIHNjcmlwdElkLCBjb25zdCBTdHJp
bmcmIHF1ZXJ5LCBPcHRpb25hbDxib29sPiYmIGNhc2VTZW5zaXRpdmUsIE9wdGlvbmFsPGJvb2w+
JiYgaXNSZWdleCkKIHsKLSAgICBKU0M6OlNvdXJjZUlEIHNvdXJjZUlEID0gc2NyaXB0SURTdHIu
dG9JbnRQdHIoKTsKLSAgICBhdXRvIGl0ID0gbV9zY3JpcHRzLmZpbmQoc291cmNlSUQpOwotICAg
IGlmIChpdCA9PSBtX3NjcmlwdHMuZW5kKCkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWlz
c2luZyBzY3JpcHQgZm9yIGdpdmVuIHNjcmlwdElkIjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
KyAgICBhdXRvIGl0ID0gbV9zY3JpcHRzLmZpbmQoc2NyaXB0SWQudG9JbnRQdHIoKSk7CisgICAg
aWYgKGl0ID09IG1fc2NyaXB0cy5lbmQoKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVk
KCJNaXNzaW5nIHNjcmlwdCBmb3IgZ2l2ZW4gc2NyaXB0SWQiX3MpOwogCi0gICAgYm9vbCBpc1Jl
Z2V4ID0gb3B0aW9uYWxJc1JlZ2V4ID8gKm9wdGlvbmFsSXNSZWdleCA6IGZhbHNlOwotICAgIGJv
b2wgY2FzZVNlbnNpdGl2ZSA9IG9wdGlvbmFsQ2FzZVNlbnNpdGl2ZSA/ICpvcHRpb25hbENhc2VT
ZW5zaXRpdmUgOiBmYWxzZTsKLSAgICByZXN1bHRzID0gQ29udGVudFNlYXJjaFV0aWxpdGllczo6
c2VhcmNoSW5UZXh0QnlMaW5lcyhpdC0+dmFsdWUuc291cmNlLCBxdWVyeSwgY2FzZVNlbnNpdGl2
ZSwgaXNSZWdleCk7CisgICAgcmV0dXJuIENvbnRlbnRTZWFyY2hVdGlsaXRpZXM6OnNlYXJjaElu
VGV4dEJ5TGluZXMoaXQtPnZhbHVlLnNvdXJjZSwgcXVlcnksIGNhc2VTZW5zaXRpdmUudmFsdWVP
cihmYWxzZSksIGlzUmVnZXgudmFsdWVPcihmYWxzZSkpOwogfQogCi12b2lkIEluc3BlY3RvckRl
YnVnZ2VyQWdlbnQ6OmdldFNjcmlwdFNvdXJjZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNv
bnN0IFN0cmluZyYgc2NyaXB0SURTdHIsIFN0cmluZyogc2NyaXB0U291cmNlKQorUHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8U3RyaW5nPiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpnZXRTY3JpcHRT
b3VyY2UoY29uc3QgUHJvdG9jb2w6OkRlYnVnZ2VyOjpTY3JpcHRJZCYgc2NyaXB0SWQpCiB7Ci0g
ICAgSlNDOjpTb3VyY2VJRCBzb3VyY2VJRCA9IHNjcmlwdElEU3RyLnRvSW50UHRyKCk7Ci0gICAg
YXV0byBpdCA9IG1fc2NyaXB0cy5maW5kKHNvdXJjZUlEKTsKLSAgICBpZiAoaXQgIT0gbV9zY3Jp
cHRzLmVuZCgpKQotICAgICAgICAqc2NyaXB0U291cmNlID0gaXQtPnZhbHVlLnNvdXJjZTsKLSAg
ICBlbHNlCi0gICAgICAgIGVycm9yU3RyaW5nID0gIk1pc3Npbmcgc2NyaXB0IGZvciBnaXZlbiBz
Y3JpcHRJZCI7CisgICAgYXV0byBpdCA9IG1fc2NyaXB0cy5maW5kKHNjcmlwdElkLnRvSW50UHRy
KCkpOworICAgIGlmIChpdCA9PSBtX3NjcmlwdHMuZW5kKCkpCisgICAgICAgIHJldHVybiBtYWtl
VW5leHBlY3RlZCgiTWlzc2luZyBzY3JpcHQgZm9yIGdpdmVuIHNjcmlwdElkIik7CisKKyAgICBy
ZXR1cm4gaXQtPnZhbHVlLnNvdXJjZTsKIH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50
OjpnZXRGdW5jdGlvbkRldGFpbHMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJp
bmcmIGZ1bmN0aW9uSWQsIFJlZlB0cjxQcm90b2NvbDo6RGVidWdnZXI6OkZ1bmN0aW9uRGV0YWls
cz4mIGRldGFpbHMpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8UHJvdG9jb2w6OkRlYnVn
Z2VyOjpGdW5jdGlvbkRldGFpbHM+PiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpnZXRGdW5jdGlv
bkRldGFpbHMoY29uc3QgU3RyaW5nJiBmdW5jdGlvbklkKQogeworICAgIFByb3RvY29sOjpFcnJv
clN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0
ID0gbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIuaW5qZWN0ZWRTY3JpcHRGb3JPYmplY3RJZChmdW5j
dGlvbklkKTsKLSAgICBpZiAoaW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKSB7Ci0gICAgICAg
IGVycm9yU3RyaW5nID0gIk1pc3NpbmcgaW5qZWN0ZWQgc2NyaXB0IGZvciBnaXZlbiBmdW5jdGlv
bklkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmIChpbmplY3RlZFNjcmlwdC5o
YXNOb1ZhbHVlKCkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTWlzc2luZyBpbmpl
Y3RlZCBzY3JpcHQgZm9yIGdpdmVuIGZ1bmN0aW9uSWQiX3MpOwogCisgICAgUmVmUHRyPFByb3Rv
Y29sOjpEZWJ1Z2dlcjo6RnVuY3Rpb25EZXRhaWxzPiBkZXRhaWxzOwogICAgIGluamVjdGVkU2Ny
aXB0LmdldEZ1bmN0aW9uRGV0YWlscyhlcnJvclN0cmluZywgZnVuY3Rpb25JZCwgZGV0YWlscyk7
CisgICAgaWYgKCFkZXRhaWxzKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JT
dHJpbmcpOworCisgICAgcmV0dXJuIGRldGFpbHMucmVsZWFzZU5vbk51bGwoKTsKIH0KIAogdm9p
ZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzY2hlZHVsZVBhdXNlQXROZXh0T3Bwb3J0dW5pdHko
RGVidWdnZXJGcm9udGVuZERpc3BhdGNoZXI6OlJlYXNvbiByZWFzb24sIFJlZlB0cjxKU09OOjpP
YmplY3Q+JiYgZGF0YSkKQEAgLTc5Miw1NyArODAyLDc1IEBAIGJvb2wgSW5zcGVjdG9yRGVidWdn
ZXJBZ2VudDo6Y2FuY2VsUGF1c2VGb3JTcGVjaWFsQnJlYWtwb2ludChKU0M6OkJyZWFrcG9pbnQm
IGJyCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6
cGF1c2UoRXJyb3JTdHJpbmcmKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVj
dG9yRGVidWdnZXJBZ2VudDo6cGF1c2UoKQogewogICAgIHNjaGVkdWxlUGF1c2VBdE5leHRPcHBv
cnR1bml0eShEZWJ1Z2dlckZyb250ZW5kRGlzcGF0Y2hlcjo6UmVhc29uOjpQYXVzZU9uTmV4dFN0
YXRlbWVudCk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckRlYnVnZ2Vy
QWdlbnQ6OnJlc3VtZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCitQcm90b2NvbDo6RXJyb3JT
dHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpyZXN1bWUoKQogewotICAgIGlm
ICghbV9wYXVzZWRHbG9iYWxPYmplY3QgJiYgIW1famF2YVNjcmlwdFBhdXNlU2NoZWR1bGVkKSB7
Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIk11c3QgYmUgcGF1c2VkIG9yIHdhaXRpbmcgdG8gcGF1
c2UiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKCFtX3BhdXNlZEdsb2JhbE9i
amVjdCAmJiAhbV9qYXZhU2NyaXB0UGF1c2VTY2hlZHVsZWQpCisgICAgICAgIHJldHVybiBtYWtl
VW5leHBlY3RlZCgiTXVzdCBiZSBwYXVzZWQgb3Igd2FpdGluZyB0byBwYXVzZSJfcyk7CiAKICAg
ICBjYW5jZWxQYXVzZUF0TmV4dE9wcG9ydHVuaXR5KCk7CiAgICAgbV9kZWJ1Z2dlci5jb250aW51
ZVByb2dyYW0oKTsKICAgICBtX2NvbmRpdGlvblRvRGlzcGF0Y2hSZXN1bWVkID0gU2hvdWxkRGlz
cGF0Y2hSZXN1bWVkOjpXaGVuQ29udGludWVkOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9p
ZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzdGVwTmV4dChFcnJvclN0cmluZyYgZXJyb3JTdHJp
bmcpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50
OjpzdGVwTmV4dCgpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOwor
CiAgICAgaWYgKCFhc3NlcnRQYXVzZWQoZXJyb3JTdHJpbmcpKQotICAgICAgICByZXR1cm47Cisg
ICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAgICB3aWxsU3Rl
cEFuZE1heUJlY29tZUlkbGUoKTsKICAgICBtX2RlYnVnZ2VyLnN0ZXBOZXh0RXhwcmVzc2lvbigp
OworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojpz
dGVwT3ZlcihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdP
cjx2b2lkPiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzdGVwT3ZlcigpCiB7CisgICAgUHJvdG9j
b2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAgICAgaWYgKCFhc3NlcnRQYXVzZWQoZXJy
b3JTdHJpbmcpKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3Rl
ZChlcnJvclN0cmluZyk7CiAKICAgICB3aWxsU3RlcEFuZE1heUJlY29tZUlkbGUoKTsKICAgICBt
X2RlYnVnZ2VyLnN0ZXBPdmVyU3RhdGVtZW50KCk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12
b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnN0ZXBJbnRvKEVycm9yU3RyaW5nJiBlcnJvclN0
cmluZykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRlYnVnZ2VyQWdl
bnQ6OnN0ZXBJbnRvKCkKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7
CisKICAgICBpZiAoIWFzc2VydFBhdXNlZChlcnJvclN0cmluZykpCi0gICAgICAgIHJldHVybjsK
KyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgIHdpbGxT
dGVwQW5kTWF5QmVjb21lSWRsZSgpOwogICAgIG1fZGVidWdnZXIuc3RlcEludG9TdGF0ZW1lbnQo
KTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6
c3RlcE91dChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdP
cjx2b2lkPiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzdGVwT3V0KCkKIHsKKyAgICBQcm90b2Nv
bDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBpZiAoIWFzc2VydFBhdXNlZChlcnJv
clN0cmluZykpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVk
KGVycm9yU3RyaW5nKTsKIAogICAgIHdpbGxTdGVwQW5kTWF5QmVjb21lSWRsZSgpOwogICAgIG1f
ZGVidWdnZXIuc3RlcE91dE9mRnVuY3Rpb24oKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKIHZv
aWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6cmVnaXN0ZXJJZGxlSGFuZGxlcigpCkBAIC04Nzcs
ODYgKzkwNSw5OCBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpZEJlY29tZUlkbGUo
KQogCiAgICAgbV9jb25kaXRpb25Ub0Rpc3BhdGNoUmVzdW1lZCA9IFNob3VsZERpc3BhdGNoUmVz
dW1lZDo6Tm87CiAKLSAgICBpZiAobV9lbmFibGVQYXVzZVdoZW5JZGxlKSB7Ci0gICAgICAgIEVy
cm9yU3RyaW5nIGlnbm9yZWQ7Ci0gICAgICAgIHBhdXNlKGlnbm9yZWQpOwotICAgIH0KKyAgICBp
ZiAobV9lbmFibGVQYXVzZVdoZW5JZGxlKQorICAgICAgICBwYXVzZSgpOwogfQogCi12b2lkIElu
c3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldFBhdXNlT25EZWJ1Z2dlclN0YXRlbWVudHMoRXJyb3JT
dHJpbmcmIGVycm9yU3RyaW5nLCBib29sIGVuYWJsZWQsIGNvbnN0IEpTT046Ok9iamVjdCogb3B0
aW9uc1BheWxvYWQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JEZWJ1
Z2dlckFnZW50OjpzZXRQYXVzZU9uRGVidWdnZXJTdGF0ZW1lbnRzKGJvb2wgZW5hYmxlZCwgUmVm
UHRyPEpTT046Ok9iamVjdD4mJiBvcHRpb25zKQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmlu
ZyBlcnJvclN0cmluZzsKKwogICAgIGlmICghZW5hYmxlZCkgewogICAgICAgICBtX2RlYnVnZ2Vy
LnNldFBhdXNlT25EZWJ1Z2dlclN0YXRlbWVudHNCcmVha3BvaW50KG51bGxwdHIpOwotICAgICAg
ICByZXR1cm47CisgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCi0gICAgYXV0byBicmVha3Bv
aW50ID0gZGVidWdnZXJCcmVha3BvaW50RnJvbVBheWxvYWQoZXJyb3JTdHJpbmcsIG9wdGlvbnNQ
YXlsb2FkKTsKKyAgICBhdXRvIGJyZWFrcG9pbnQgPSBkZWJ1Z2dlckJyZWFrcG9pbnRGcm9tUGF5
bG9hZChlcnJvclN0cmluZywgV1RGTW92ZShvcHRpb25zKSk7CiAgICAgaWYgKCFicmVha3BvaW50
KQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0
cmluZyk7CiAKICAgICBtX2RlYnVnZ2VyLnNldFBhdXNlT25EZWJ1Z2dlclN0YXRlbWVudHNCcmVh
a3BvaW50KFdURk1vdmUoYnJlYWtwb2ludCkpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9p
ZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZXRQYXVzZU9uRXhjZXB0aW9ucyhFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgc3RhdGVTdHJpbmcsIGNvbnN0IEpTT046Ok9i
amVjdCogb3B0aW9uc1BheWxvYWQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNw
ZWN0b3JEZWJ1Z2dlckFnZW50OjpzZXRQYXVzZU9uRXhjZXB0aW9ucyhjb25zdCBTdHJpbmcmIHN0
YXRlU3RyaW5nLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIG9wdGlvbnMpCiB7CisgICAgUHJvdG9j
b2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAgICAgUmVmUHRyPEpTQzo6QnJlYWtwb2lu
dD4gYWxsRXhjZXB0aW9uc0JyZWFrcG9pbnQ7CiAgICAgUmVmUHRyPEpTQzo6QnJlYWtwb2ludD4g
dW5jYXVnaHRFeGNlcHRpb25zQnJlYWtwb2ludDsKIAogICAgIGlmIChzdGF0ZVN0cmluZyA9PSAi
YWxsIikgewotICAgICAgICBhbGxFeGNlcHRpb25zQnJlYWtwb2ludCA9IGRlYnVnZ2VyQnJlYWtw
b2ludEZyb21QYXlsb2FkKGVycm9yU3RyaW5nLCBvcHRpb25zUGF5bG9hZCk7CisgICAgICAgIGFs
bEV4Y2VwdGlvbnNCcmVha3BvaW50ID0gZGVidWdnZXJCcmVha3BvaW50RnJvbVBheWxvYWQoZXJy
b3JTdHJpbmcsIFdURk1vdmUob3B0aW9ucykpOwogICAgICAgICBpZiAoIWFsbEV4Y2VwdGlvbnNC
cmVha3BvaW50KQotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKICAgICB9IGVsc2UgaWYgKHN0YXRlU3RyaW5nID09ICJ1
bmNhdWdodCIpIHsKLSAgICAgICAgdW5jYXVnaHRFeGNlcHRpb25zQnJlYWtwb2ludCA9IGRlYnVn
Z2VyQnJlYWtwb2ludEZyb21QYXlsb2FkKGVycm9yU3RyaW5nLCBvcHRpb25zUGF5bG9hZCk7Cisg
ICAgICAgIHVuY2F1Z2h0RXhjZXB0aW9uc0JyZWFrcG9pbnQgPSBkZWJ1Z2dlckJyZWFrcG9pbnRG
cm9tUGF5bG9hZChlcnJvclN0cmluZywgV1RGTW92ZShvcHRpb25zKSk7CiAgICAgICAgIGlmICgh
dW5jYXVnaHRFeGNlcHRpb25zQnJlYWtwb2ludCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9
IGVsc2UgaWYgKHN0YXRlU3RyaW5nICE9ICJub25lIikgewotICAgICAgICBlcnJvclN0cmluZyA9
IG1ha2VTdHJpbmcoIlVua25vd24gc3RhdGU6ICJfcywgc3RhdGVTdHJpbmcpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQorICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3Ry
aW5nKTsKKyAgICB9IGVsc2UgaWYgKHN0YXRlU3RyaW5nICE9ICJub25lIikKKyAgICAgICAgcmV0
dXJuIG1ha2VVbmV4cGVjdGVkKG1ha2VTdHJpbmcoIlVua25vd24gc3RhdGU6ICJfcywgc3RhdGVT
dHJpbmcpKTsKIAogICAgIG1fZGVidWdnZXIuc2V0UGF1c2VPbkFsbEV4Y2VwdGlvbnNCcmVha3Bv
aW50KFdURk1vdmUoYWxsRXhjZXB0aW9uc0JyZWFrcG9pbnQpKTsKICAgICBtX2RlYnVnZ2VyLnNl
dFBhdXNlT25VbmNhdWdodEV4Y2VwdGlvbnNCcmVha3BvaW50KFdURk1vdmUodW5jYXVnaHRFeGNl
cHRpb25zQnJlYWtwb2ludCkpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0
b3JEZWJ1Z2dlckFnZW50OjpzZXRQYXVzZU9uQXNzZXJ0aW9ucyhFcnJvclN0cmluZyYgZXJyb3JT
dHJpbmcsIGJvb2wgZW5hYmxlZCwgY29uc3QgSlNPTjo6T2JqZWN0KiBvcHRpb25zUGF5bG9hZCkK
K1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNl
dFBhdXNlT25Bc3NlcnRpb25zKGJvb2wgZW5hYmxlZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBv
cHRpb25zKQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAg
IGlmICghZW5hYmxlZCkgewogICAgICAgICBtX3BhdXNlT25Bc3NlcnRpb25zQnJlYWtwb2ludCA9
IG51bGxwdHI7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAK
LSAgICBhdXRvIGJyZWFrcG9pbnQgPSBkZWJ1Z2dlckJyZWFrcG9pbnRGcm9tUGF5bG9hZChlcnJv
clN0cmluZywgb3B0aW9uc1BheWxvYWQpOworICAgIGF1dG8gYnJlYWtwb2ludCA9IGRlYnVnZ2Vy
QnJlYWtwb2ludEZyb21QYXlsb2FkKGVycm9yU3RyaW5nLCBXVEZNb3ZlKG9wdGlvbnMpKTsKICAg
ICBpZiAoIWJyZWFrcG9pbnQpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgIG1fcGF1c2VPbkFzc2VydGlvbnNCcmVha3Bv
aW50ID0gV1RGTW92ZShicmVha3BvaW50KTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQg
SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0UGF1c2VPbk1pY3JvdGFza3MoRXJyb3JTdHJpbmcm
IGVycm9yU3RyaW5nLCBib29sIGVuYWJsZWQsIGNvbnN0IEpTT046Ok9iamVjdCogb3B0aW9uc1Bh
eWxvYWQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JEZWJ1Z2dlckFn
ZW50OjpzZXRQYXVzZU9uTWljcm90YXNrcyhib29sIGVuYWJsZWQsIFJlZlB0cjxKU09OOjpPYmpl
Y3Q+JiYgb3B0aW9ucykKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7
CisKICAgICBpZiAoIWVuYWJsZWQpIHsKICAgICAgICAgbV9wYXVzZU9uTWljcm90YXNrc0JyZWFr
cG9pbnQgPSBudWxscHRyOwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB7IH07CiAg
ICAgfQogCi0gICAgYXV0byBicmVha3BvaW50ID0gZGVidWdnZXJCcmVha3BvaW50RnJvbVBheWxv
YWQoZXJyb3JTdHJpbmcsIG9wdGlvbnNQYXlsb2FkKTsKKyAgICBhdXRvIGJyZWFrcG9pbnQgPSBk
ZWJ1Z2dlckJyZWFrcG9pbnRGcm9tUGF5bG9hZChlcnJvclN0cmluZywgV1RGTW92ZShvcHRpb25z
KSk7CiAgICAgaWYgKCFicmVha3BvaW50KQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVy
biBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAgICBtX3BhdXNlT25NaWNyb3Rhc2tz
QnJlYWtwb2ludCA9IFdURk1vdmUoYnJlYWtwb2ludCk7CisKKyAgICByZXR1cm4geyB9OwogfQog
Ci12b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmV2YWx1YXRlT25DYWxsRnJhbWUoRXJyb3JT
dHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGNhbGxGcmFtZUlkLCBjb25zdCBTdHJp
bmcmIGV4cHJlc3Npb24sIGNvbnN0IFN0cmluZyogb2JqZWN0R3JvdXAsIGNvbnN0IGJvb2wqIGlu
Y2x1ZGVDb21tYW5kTGluZUFQSSwgY29uc3QgYm9vbCogZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0Fu
ZE11dGVDb25zb2xlLCBjb25zdCBib29sKiByZXR1cm5CeVZhbHVlLCBjb25zdCBib29sKiBnZW5l
cmF0ZVByZXZpZXcsIGNvbnN0IGJvb2wqIHNhdmVSZXN1bHQsIGNvbnN0IGJvb2wqIC8qIGVtdWxh
dGVVc2VyR2VzdHVyZSAqLywgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+
JiByZXN1bHQsIE9wdGlvbmFsPGJvb2w+JiB3YXNUaHJvd24sIE9wdGlvbmFsPGludD4mIHNhdmVk
UmVzdWx0SW5kZXgpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxzdGQ6OnR1cGxlPFJlZjxQcm90
b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiwgT3B0aW9uYWw8Ym9vbD4gLyogd2FzVGhyb3du
ICovLCBPcHRpb25hbDxpbnQ+IC8qIHNhdmVkUmVzdWx0SW5kZXggKi8+PiBJbnNwZWN0b3JEZWJ1
Z2dlckFnZW50OjpldmFsdWF0ZU9uQ2FsbEZyYW1lKGNvbnN0IFByb3RvY29sOjpEZWJ1Z2dlcjo6
Q2FsbEZyYW1lSWQmIGNhbGxGcmFtZUlkLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIGNvbnN0
IFN0cmluZyYgb2JqZWN0R3JvdXAsIE9wdGlvbmFsPGJvb2w+JiYgaW5jbHVkZUNvbW1hbmRMaW5l
QVBJLCBPcHRpb25hbDxib29sPiYmIGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29s
ZSwgT3B0aW9uYWw8Ym9vbD4mJiByZXR1cm5CeVZhbHVlLCBPcHRpb25hbDxib29sPiYmIGdlbmVy
YXRlUHJldmlldywgT3B0aW9uYWw8Ym9vbD4mJiBzYXZlUmVzdWx0LCBPcHRpb25hbDxib29sPiYm
ICAvKiBlbXVsYXRlVXNlckdlc3R1cmUgKi8pCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5n
IGVycm9yU3RyaW5nOworCiAgICAgaWYgKCFhc3NlcnRQYXVzZWQoZXJyb3JTdHJpbmcpKQotICAg
ICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7
CiAKICAgICBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdCA9IG1faW5qZWN0ZWRTY3JpcHRN
YW5hZ2VyLmluamVjdGVkU2NyaXB0Rm9yT2JqZWN0SWQoY2FsbEZyYW1lSWQpOwotICAgIGlmIChp
bmplY3RlZFNjcmlwdC5oYXNOb1ZhbHVlKCkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWlz
c2luZyBpbmplY3RlZCBzY3JpcHQgZm9yIGdpdmVuIGNhbGxGcmFtZUlkIl9zOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQorICAgIGlmIChpbmplY3RlZFNjcmlwdC5oYXNOb1ZhbHVlKCkpCisgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTWlzc2luZyBpbmplY3RlZCBzY3JpcHQgZm9yIGdp
dmVuIGNhbGxGcmFtZUlkIl9zKTsKIAogICAgIEpTQzo6RGVidWdnZXI6OlRlbXBvcmFyaWx5RGlz
YWJsZUV4Y2VwdGlvbkJyZWFrcG9pbnRzIHRlbXBvcmFyaWx5RGlzYWJsZUV4Y2VwdGlvbkJyZWFr
cG9pbnRzKG1fZGVidWdnZXIpOwogCkBAIC05NjYsMjggKzEwMDYsMzEgQEAgdm9pZCBJbnNwZWN0
b3JEZWJ1Z2dlckFnZW50OjpldmFsdWF0ZU9uQ2FsbEZyYW1lKEVycm9yU3RyaW5nJiBlcnJvclN0
cmluZywgY29uc3QKICAgICAgICAgbXV0ZUNvbnNvbGUoKTsKICAgICB9CiAKLSAgICBpbmplY3Rl
ZFNjcmlwdC5ldmFsdWF0ZU9uQ2FsbEZyYW1lKGVycm9yU3RyaW5nLCBtX2N1cnJlbnRDYWxsU3Rh
Y2suZ2V0KCksIGNhbGxGcmFtZUlkLCBleHByZXNzaW9uLAotICAgICAgICBvYmplY3RHcm91cCA/
ICpvYmplY3RHcm91cCA6IGVtcHR5U3RyaW5nKCksIGluY2x1ZGVDb21tYW5kTGluZUFQSSAmJiAq
aW5jbHVkZUNvbW1hbmRMaW5lQVBJLCByZXR1cm5CeVZhbHVlICYmICpyZXR1cm5CeVZhbHVlLCBn
ZW5lcmF0ZVByZXZpZXcgJiYgKmdlbmVyYXRlUHJldmlldywgc2F2ZVJlc3VsdCAmJiAqc2F2ZVJl
c3VsdCwKLSAgICAgICAgcmVzdWx0LCB3YXNUaHJvd24sIHNhdmVkUmVzdWx0SW5kZXgpOworICAg
IFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiByZXN1bHQ7CisgICAgT3B0
aW9uYWw8Ym9vbD4gd2FzVGhyb3duOworICAgIE9wdGlvbmFsPGludD4gc2F2ZWRSZXN1bHRJbmRl
eDsKKworICAgIGluamVjdGVkU2NyaXB0LmV2YWx1YXRlT25DYWxsRnJhbWUoZXJyb3JTdHJpbmcs
IG1fY3VycmVudENhbGxTdGFjay5nZXQoKSwgY2FsbEZyYW1lSWQsIGV4cHJlc3Npb24sIG9iamVj
dEdyb3VwLCBpbmNsdWRlQ29tbWFuZExpbmVBUEkudmFsdWVPcihmYWxzZSksIHJldHVybkJ5VmFs
dWUudmFsdWVPcihmYWxzZSksIGdlbmVyYXRlUHJldmlldy52YWx1ZU9yKGZhbHNlKSwgc2F2ZVJl
c3VsdC52YWx1ZU9yKGZhbHNlKSwgcmVzdWx0LCB3YXNUaHJvd24sIHNhdmVkUmVzdWx0SW5kZXgp
OwogCiAgICAgaWYgKHBhdXNlQW5kTXV0ZSkKICAgICAgICAgdW5tdXRlQ29uc29sZSgpOworCisg
ICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmlu
Zyk7CisKKyAgICByZXR1cm4geyB7IHJlc3VsdC5yZWxlYXNlTm9uTnVsbCgpLCBXVEZNb3ZlKHdh
c1Rocm93biksIFdURk1vdmUoc2F2ZWRSZXN1bHRJbmRleCkgfSB9OwogfQogCi12b2lkIEluc3Bl
Y3RvckRlYnVnZ2VyQWdlbnQ6OnNldFNob3VsZEJsYWNrYm94VVJMKEVycm9yU3RyaW5nJiBlcnJv
clN0cmluZywgY29uc3QgU3RyaW5nJiB1cmwsIGJvb2wgc2hvdWxkQmxhY2tib3gsIGNvbnN0IGJv
b2wqIG9wdGlvbmFsQ2FzZVNlbnNpdGl2ZSwgY29uc3QgYm9vbCogb3B0aW9uYWxJc1JlZ2V4KQor
UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0
U2hvdWxkQmxhY2tib3hVUkwoY29uc3QgU3RyaW5nJiB1cmwsIGJvb2wgc2hvdWxkQmxhY2tib3gs
IE9wdGlvbmFsPGJvb2w+JiYgb3B0aW9uYWxDYXNlU2Vuc2l0aXZlLCBPcHRpb25hbDxib29sPiYm
IG9wdGlvbmFsSXNSZWdleCkKIHsKLSAgICBpZiAodXJsLmlzRW1wdHkoKSkgewotICAgICAgICBl
cnJvclN0cmluZyA9ICJVUkwgbXVzdCBub3QgYmUgZW1wdHkiX3M7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9CisgICAgaWYgKHVybC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBl
Y3RlZCgiVVJMIG11c3Qgbm90IGJlIGVtcHR5Il9zKTsKIAotICAgIGJvb2wgY2FzZVNlbnNpdGl2
ZSA9IG9wdGlvbmFsQ2FzZVNlbnNpdGl2ZSAmJiAqb3B0aW9uYWxDYXNlU2Vuc2l0aXZlOwotICAg
IGJvb2wgaXNSZWdleCA9IG9wdGlvbmFsSXNSZWdleCAmJiAqb3B0aW9uYWxJc1JlZ2V4OworICAg
IGJvb2wgY2FzZVNlbnNpdGl2ZSA9IG9wdGlvbmFsQ2FzZVNlbnNpdGl2ZS52YWx1ZU9yKGZhbHNl
KTsKKyAgICBib29sIGlzUmVnZXggPSBvcHRpb25hbElzUmVnZXgudmFsdWVPcihmYWxzZSk7CiAK
LSAgICBpZiAoIWNhc2VTZW5zaXRpdmUgJiYgIWlzUmVnZXggJiYgaXNXZWJLaXRJbmplY3RlZFNj
cmlwdCh1cmwpKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIkJsYWNrYm94aW5nIG9mIGludGVy
bmFsIHNjcmlwdHMgaXMgY29udHJvbGxlZCBieSAnRGVidWdnZXIuc2V0UGF1c2VGb3JJbnRlcm5h
bFNjcmlwdHMnIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghY2FzZVNlbnNp
dGl2ZSAmJiAhaXNSZWdleCAmJiBpc1dlYktpdEluamVjdGVkU2NyaXB0KHVybCkpCisgICAgICAg
IHJldHVybiBtYWtlVW5leHBlY3RlZCgiQmxhY2tib3hpbmcgb2YgaW50ZXJuYWwgc2NyaXB0cyBp
cyBjb250cm9sbGVkIGJ5ICdEZWJ1Z2dlci5zZXRQYXVzZUZvckludGVybmFsU2NyaXB0cyciX3Mp
OwogCiAgICAgQmxhY2tib3hDb25maWcgY29uZmlnIHsgdXJsLCBjYXNlU2Vuc2l0aXZlLCBpc1Jl
Z2V4IH07CiAgICAgaWYgKHNob3VsZEJsYWNrYm94KQpAQCAtMTAwNCw2ICsxMDQ3LDggQEAgdm9p
ZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZXRTaG91bGRCbGFja2JveFVSTChFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcsIGNvbnMKICAgICAgICAgICAgIGJsYWNrYm94VHlwZSA9IEpTQzo6RGVi
dWdnZXI6OkJsYWNrYm94VHlwZTo6RGVmZXJyZWQ7CiAgICAgICAgIG1fZGVidWdnZXIuc2V0Qmxh
Y2tib3hUeXBlKHNvdXJjZUlELCBibGFja2JveFR5cGUpOwogICAgIH0KKworICAgIHJldHVybiB7
IH07CiB9CiAKIGJvb2wgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2hvdWxkQmxhY2tib3hVUkwo
Y29uc3QgU3RyaW5nJiB1cmwpIGNvbnN0CkBAIC0xMDM5LDEwICsxMDg0LDEwIEBAIFN0cmluZyBJ
bnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojpzb3VyY2VNYXBVUkxGb3JTY3JpcHQoY29uc3QgSlNDOjpE
ZWJ1Z2dlcjo6U2NyaXB0CiAgICAgcmV0dXJuIHNjcmlwdC5zb3VyY2VNYXBwaW5nVVJMOwogfQog
Ci12b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldFBhdXNlRm9ySW50ZXJuYWxTY3JpcHRz
KEVycm9yU3RyaW5nJiwgYm9vbCBzaG91bGRQYXVzZSkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09y
PHZvaWQ+IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldFBhdXNlRm9ySW50ZXJuYWxTY3JpcHRz
KGJvb2wgc2hvdWxkUGF1c2UpCiB7CiAgICAgaWYgKHNob3VsZFBhdXNlID09IG1fcGF1c2VGb3JJ
bnRlcm5hbFNjcmlwdHMpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAog
ICAgIG1fcGF1c2VGb3JJbnRlcm5hbFNjcmlwdHMgPSBzaG91bGRQYXVzZTsKIApAQCAtMTA1Miw2
ICsxMDk3LDggQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZXRQYXVzZUZvckludGVy
bmFsU2NyaXB0cyhFcnJvclN0cmluZyYsIGJvb2wgc2hvdWwKICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICBtX2RlYnVnZ2VyLnNldEJsYWNrYm94VHlwZShzb3VyY2VJRCwgYmxhY2tib3hU
eXBlKTsKICAgICB9CisKKyAgICByZXR1cm4geyB9OwogfQogCiB2b2lkIEluc3BlY3RvckRlYnVn
Z2VyQWdlbnQ6OmRpZFBhcnNlU291cmNlKEpTQzo6U291cmNlSUQgc291cmNlSUQsIGNvbnN0IEpT
Qzo6RGVidWdnZXI6OlNjcmlwdCYgc2NyaXB0KQpAQCAtMTA2MSwxMiArMTEwOCw3IEBAIHZvaWQg
SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlkUGFyc2VTb3VyY2UoSlNDOjpTb3VyY2VJRCBzb3Vy
Y2VJRCwgY29uc3QgSlNDOjpECiAgICAgU3RyaW5nIHNvdXJjZVVSTCA9IHNjcmlwdC5zb3VyY2VV
Ukw7CiAgICAgU3RyaW5nIHNvdXJjZU1hcHBpbmdVUkwgPSBzb3VyY2VNYXBVUkxGb3JTY3JpcHQo
c2NyaXB0KTsKIAotICAgIGNvbnN0IGJvb2wgaXNNb2R1bGUgPSBzY3JpcHQuc291cmNlUHJvdmlk
ZXItPnNvdXJjZVR5cGUoKSA9PSBKU0M6OlNvdXJjZVByb3ZpZGVyU291cmNlVHlwZTo6TW9kdWxl
OwotICAgIGNvbnN0IGJvb2wqIGlzQ29udGVudFNjcmlwdCA9IHNjcmlwdC5pc0NvbnRlbnRTY3Jp
cHQgPyAmc2NyaXB0LmlzQ29udGVudFNjcmlwdCA6IG51bGxwdHI7Ci0gICAgU3RyaW5nKiBzb3Vy
Y2VVUkxQYXJhbSA9IGhhc1NvdXJjZVVSTCA/ICZzb3VyY2VVUkwgOiBudWxscHRyOwotICAgIFN0
cmluZyogc291cmNlTWFwVVJMUGFyYW0gPSBzb3VyY2VNYXBwaW5nVVJMLmlzRW1wdHkoKSA/IG51
bGxwdHIgOiAmc291cmNlTWFwcGluZ1VSTDsKLQotICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5z
Y3JpcHRQYXJzZWQoc2NyaXB0SURTdHIsIHNjcmlwdC51cmwsIHNjcmlwdC5zdGFydExpbmUsIHNj
cmlwdC5zdGFydENvbHVtbiwgc2NyaXB0LmVuZExpbmUsIHNjcmlwdC5lbmRDb2x1bW4sIGlzQ29u
dGVudFNjcmlwdCwgc291cmNlVVJMUGFyYW0sIHNvdXJjZU1hcFVSTFBhcmFtLCBpc01vZHVsZSA/
ICZpc01vZHVsZSA6IG51bGxwdHIpOworICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5zY3JpcHRQ
YXJzZWQoc2NyaXB0SURTdHIsIHNjcmlwdC51cmwsIHNjcmlwdC5zdGFydExpbmUsIHNjcmlwdC5z
dGFydENvbHVtbiwgc2NyaXB0LmVuZExpbmUsIHNjcmlwdC5lbmRDb2x1bW4sIHNjcmlwdC5pc0Nv
bnRlbnRTY3JpcHQsIHNvdXJjZVVSTCwgc291cmNlTWFwcGluZ1VSTCwgc2NyaXB0LnNvdXJjZVBy
b3ZpZGVyLT5zb3VyY2VUeXBlKCkgPT0gSlNDOjpTb3VyY2VQcm92aWRlclNvdXJjZVR5cGU6Ok1v
ZHVsZSk7CiAKICAgICBtX3NjcmlwdHMuc2V0KHNvdXJjZUlELCBzY3JpcHQpOwogCkBAIC0xMTgw
LDEyICsxMjIyLDEzIEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlkUGF1c2UoSlND
OjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkRlCiAgICAgICAgIGlmIChhdXRv
IGRlYnVnZ2VyQnJlYWtwb2ludElkID0gbV9kZWJ1Z2dlci5wYXVzaW5nQnJlYWtwb2ludElEKCkp
IHsKICAgICAgICAgICAgIEFTU0VSVCghbV9jb250aW51ZVRvTG9jYXRpb25EZWJ1Z2dlckJyZWFr
cG9pbnQgfHwgZGVidWdnZXJCcmVha3BvaW50SWQgIT0gbV9jb250aW51ZVRvTG9jYXRpb25EZWJ1
Z2dlckJyZWFrcG9pbnQtPmlkKCkpOwogICAgICAgICAgICAgZGF0YSA9IEpTT046Ok9iamVjdDo6
Y3JlYXRlKCk7Ci0gICAgICAgICAgICBkYXRhLT5zZXRTdHJpbmcoIm9yaWdpbmFsUmVhc29uIl9z
LCBQcm90b2NvbDo6SW5zcGVjdG9ySGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUoRGVidWdn
ZXJGcm9udGVuZERpc3BhdGNoZXI6OlJlYXNvbjo6QnJlYWtwb2ludCkpOwotICAgICAgICAgICAg
ZGF0YS0+c2V0VmFsdWUoIm9yaWdpbmFsRGF0YSJfcywgYnVpbGRCcmVha3BvaW50UGF1c2VSZWFz
b24oZGVidWdnZXJCcmVha3BvaW50SWQpKTsKKyAgICAgICAgICAgIGRhdGEtPnNldFN0cmluZygi
b3JpZ2luYWxSZWFzb24iX3MsIFByb3RvY29sOjpIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1
ZShEZWJ1Z2dlckZyb250ZW5kRGlzcGF0Y2hlcjo6UmVhc29uOjpCcmVha3BvaW50KSk7CisgICAg
ICAgICAgICBpZiAoYXV0byBwYXVzZVJlYXNvbiA9IGJ1aWxkQnJlYWtwb2ludFBhdXNlUmVhc29u
KGRlYnVnZ2VyQnJlYWtwb2ludElkKSkKKyAgICAgICAgICAgICAgICBkYXRhLT5zZXRWYWx1ZSgi
b3JpZ2luYWxEYXRhIl9zLCBwYXVzZVJlYXNvbi5yZWxlYXNlTm9uTnVsbCgpKTsKICAgICAgICAg
fSBlbHNlIGlmIChtX3ByZUJsYWNrYm94UGF1c2VEYXRhKSB7CiAgICAgICAgICAgICBkYXRhID0g
SlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICAgICAgICAgIGRhdGEtPnNldFN0cmluZygib3Jp
Z2luYWxSZWFzb24iX3MsIFByb3RvY29sOjpJbnNwZWN0b3JIZWxwZXJzOjpnZXRFbnVtQ29uc3Rh
bnRWYWx1ZShtX3ByZUJsYWNrYm94UGF1c2VSZWFzb24pKTsKLSAgICAgICAgICAgIGRhdGEtPnNl
dFZhbHVlKCJvcmlnaW5hbERhdGEiX3MsIG1fcHJlQmxhY2tib3hQYXVzZURhdGEpOworICAgICAg
ICAgICAgZGF0YS0+c2V0U3RyaW5nKCJvcmlnaW5hbFJlYXNvbiJfcywgUHJvdG9jb2w6OkhlbHBl
cnM6OmdldEVudW1Db25zdGFudFZhbHVlKG1fcHJlQmxhY2tib3hQYXVzZVJlYXNvbikpOworICAg
ICAgICAgICAgZGF0YS0+c2V0VmFsdWUoIm9yaWdpbmFsRGF0YSJfcywgbV9wcmVCbGFja2JveFBh
dXNlRGF0YS5yZWxlYXNlTm9uTnVsbCgpKTsKICAgICAgICAgfQogICAgICAgICB1cGRhdGVQYXVz
ZVJlYXNvbkFuZERhdGEoRGVidWdnZXJGcm9udGVuZERpc3BhdGNoZXI6OlJlYXNvbjo6QmxhY2ti
b3hlZFNjcmlwdCwgV1RGTW92ZShkYXRhKSk7CiAgICAgfQpAQCAtMTIwNiw3ICsxMjQ5LDcgQEAg
dm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkaWRQYXVzZShKU0M6OkpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTQzo6RGUKICAgICAgICAgICAgIGFzeW5jU3RhY2tUcmFjZSA9IGl0
LT52YWx1ZS0+YnVpbGRJbnNwZWN0b3JPYmplY3QoKTsKICAgICB9CiAKLSAgICBtX2Zyb250ZW5k
RGlzcGF0Y2hlci0+cGF1c2VkKGN1cnJlbnRDYWxsRnJhbWVzKGluamVjdGVkU2NyaXB0KSwgbV9w
YXVzZVJlYXNvbiwgbV9wYXVzZURhdGEsIGFzeW5jU3RhY2tUcmFjZSk7CisgICAgbV9mcm9udGVu
ZERpc3BhdGNoZXItPnBhdXNlZChjdXJyZW50Q2FsbEZyYW1lcyhpbmplY3RlZFNjcmlwdCksIFBy
b3RvY29sOjpIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShtX3BhdXNlUmVhc29uKSwgbV9w
YXVzZURhdGEuY29weVJlZigpLCBXVEZNb3ZlKGFzeW5jU3RhY2tUcmFjZSkpOwogCiAgICAgbV9q
YXZhU2NyaXB0UGF1c2VTY2hlZHVsZWQgPSBmYWxzZTsKIApAQCAtMTIzMSwxMiArMTI3NCwxNSBA
QCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmJyZWFrcG9pbnRBY3Rpb25Qcm9iZShKU0M6
OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYgogewogICAgIEluamVjdGVkU2NyaXB0IGluamVjdGVk
U2NyaXB0ID0gbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIuaW5qZWN0ZWRTY3JpcHRGb3IoZ2xvYmFs
T2JqZWN0KTsKICAgICBhdXRvIHBheWxvYWQgPSBpbmplY3RlZFNjcmlwdC53cmFwT2JqZWN0KHNh
bXBsZSwgb2JqZWN0R3JvdXBGb3JCcmVha3BvaW50QWN0aW9uKGFjdGlvbklEKSwgdHJ1ZSk7Cisg
ICAgaWYgKCFwYXlsb2FkKQorICAgICAgICByZXR1cm47CisKICAgICBhdXRvIHJlc3VsdCA9IFBy
b3RvY29sOjpEZWJ1Z2dlcjo6UHJvYmVTYW1wbGU6OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRQcm9i
ZUlkKGFjdGlvbklEKQogICAgICAgICAuc2V0QmF0Y2hJZChiYXRjaElkKQogICAgICAgICAuc2V0
U2FtcGxlSWQoc2FtcGxlSWQpCiAgICAgICAgIC5zZXRUaW1lc3RhbXAobV9pbmplY3RlZFNjcmlw
dE1hbmFnZXIuaW5zcGVjdG9yRW52aXJvbm1lbnQoKS5leGVjdXRpb25TdG9wd2F0Y2goKS5lbGFw
c2VkVGltZSgpLnNlY29uZHMoKSkKLSAgICAgICAgLnNldFBheWxvYWQoV1RGTW92ZShwYXlsb2Fk
KSkKKyAgICAgICAgLnNldFBheWxvYWQocGF5bG9hZC5yZWxlYXNlTm9uTnVsbCgpKQogICAgICAg
ICAucmVsZWFzZSgpOwogICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5kaWRTYW1wbGVQcm9iZShX
VEZNb3ZlKHJlc3VsdCkpOwogfQpAQCAtMTI2Nyw5ICsxMzEzLDggQEAgdm9pZCBJbnNwZWN0b3JE
ZWJ1Z2dlckFnZW50OjpicmVha1Byb2dyYW0oRGVidWdnZXJGcm9udGVuZERpc3BhdGNoZXI6OlJl
YXNvbiByZWEKIAogdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpjbGVhckluc3BlY3RvckJy
ZWFrcG9pbnRTdGF0ZSgpCiB7Ci0gICAgRXJyb3JTdHJpbmcgaWdub3JlZDsKICAgICBmb3IgKGF1
dG8mIHByb3RvY29sQnJlYWtwb2ludElEIDogY29weVRvVmVjdG9yKG1fZGVidWdnZXJCcmVha3Bv
aW50c0ZvclByb3RvY29sQnJlYWtwb2ludElELmtleXMoKSkpCi0gICAgICAgIHJlbW92ZUJyZWFr
cG9pbnQoaWdub3JlZCwgcHJvdG9jb2xCcmVha3BvaW50SUQpOworICAgICAgICByZW1vdmVCcmVh
a3BvaW50KHByb3RvY29sQnJlYWtwb2ludElEKTsKIAogICAgIG1fcHJvdG9jb2xCcmVha3BvaW50
Rm9yUHJvdG9jb2xCcmVha3BvaW50SUQuY2xlYXIoKTsKIApAQCAtMTMxNyw3ICsxMzYyLDcgQEAg
dm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkaWRDbGVhckdsb2JhbE9iamVjdCgpCiAgICAg
bV9mcm9udGVuZERpc3BhdGNoZXItPmdsb2JhbE9iamVjdENsZWFyZWQoKTsKIH0KIAotYm9vbCBJ
bnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojphc3NlcnRQYXVzZWQoRXJyb3JTdHJpbmcmIGVycm9yU3Ry
aW5nKQorYm9vbCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojphc3NlcnRQYXVzZWQoUHJvdG9jb2w6
OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZykKIHsKICAgICBpZiAoIW1fcGF1c2VkR2xvYmFsT2Jq
ZWN0KSB7CiAgICAgICAgIGVycm9yU3RyaW5nID0gIk11c3QgYmUgcGF1c2VkIl9zOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRGVi
dWdnZXJBZ2VudC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5z
cGVjdG9yRGVidWdnZXJBZ2VudC5oCmluZGV4IDMwZmY5ZjNjMjZkMWFlMDQ2NmE3MWE1YmY2MzY2
MTgyOTU0ZmEyZDguLjRmYzNmODRhNmUyMTJiODg1YjZhMmYzMjhmODFlZGY3NWY5MGE0NmMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2Fn
ZW50cy9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmgKQEAgLTQ4LDcgKzQ4LDYgQEAgbmFtZXNwYWNl
IEluc3BlY3RvciB7CiBjbGFzcyBBc3luY1N0YWNrVHJhY2U7CiBjbGFzcyBJbmplY3RlZFNjcmlw
dDsKIGNsYXNzIEluamVjdGVkU2NyaXB0TWFuYWdlcjsKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3Ry
aW5nOwogCiBjbGFzcyBKU19FWFBPUlRfUFJJVkFURSBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50IDog
cHVibGljIEluc3BlY3RvckFnZW50QmFzZSwgcHVibGljIERlYnVnZ2VyQmFja2VuZERpc3BhdGNo
ZXJIYW5kbGVyLCBwdWJsaWMgSlNDOjpEZWJ1Z2dlcjo6T2JzZXJ2ZXIgewogICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKEluc3BlY3RvckRlYnVnZ2VyQWdlbnQpOwpAQCAtNTYsNyArNTUsNyBAQCBj
bGFzcyBKU19FWFBPUlRfUFJJVkFURSBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50IDogcHVibGljIElu
c3BlY3RvckFnZW50QmFzZSwgcHVibAogcHVibGljOgogICAgIH5JbnNwZWN0b3JEZWJ1Z2dlckFn
ZW50KCkgb3ZlcnJpZGU7CiAKLSAgICBzdGF0aWMgUmVmUHRyPEpTQzo6QnJlYWtwb2ludD4gZGVi
dWdnZXJCcmVha3BvaW50RnJvbVBheWxvYWQoRXJyb3JTdHJpbmcmLCBjb25zdCBKU09OOjpPYmpl
Y3QqIG9wdGlvbnNQYXlsb2FkKTsKKyAgICBzdGF0aWMgUmVmUHRyPEpTQzo6QnJlYWtwb2ludD4g
ZGVidWdnZXJCcmVha3BvaW50RnJvbVBheWxvYWQoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiwgUmVm
UHRyPEpTT046Ok9iamVjdD4mJiBvcHRpb25zKTsKIAogICAgIHN0YXRpYyBjb25zdCBjaGFyKiBj
b25zdCBiYWNrdHJhY2VPYmplY3RHcm91cDsKIApAQCAtNjYsMzEgKzY1LDMxIEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIGJvb2wgZW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZW5hYmxlZDsgfQog
CiAgICAgLy8gRGVidWdnZXJCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIKLSAgICB2b2lkIGVuYWJs
ZShFcnJvclN0cmluZyYpIGZpbmFsOwotICAgIHZvaWQgZGlzYWJsZShFcnJvclN0cmluZyYpIGZp
bmFsOwotICAgIHZvaWQgc2V0QXN5bmNTdGFja1RyYWNlRGVwdGgoRXJyb3JTdHJpbmcmLCBpbnQg
ZGVwdGgpIGZpbmFsOwotICAgIHZvaWQgc2V0QnJlYWtwb2ludHNBY3RpdmUoRXJyb3JTdHJpbmcm
LCBib29sIGFjdGl2ZSkgZmluYWw7Ci0gICAgdm9pZCBzZXRCcmVha3BvaW50QnlVcmwoRXJyb3JT
dHJpbmcmLCBpbnQgbGluZU51bWJlciwgY29uc3QgU3RyaW5nKiBvcHRpb25hbFVSTCwgY29uc3Qg
U3RyaW5nKiBvcHRpb25hbFVSTFJlZ2V4LCBjb25zdCBpbnQqIG9wdGlvbmFsQ29sdW1uTnVtYmVy
LCBjb25zdCBKU09OOjpPYmplY3QqIG9wdGlvbnMsIFByb3RvY29sOjpEZWJ1Z2dlcjo6QnJlYWtw
b2ludElkKiwgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkRlYnVnZ2VyOjpMb2NhdGlv
bj4+JiBsb2NhdGlvbnMpIGZpbmFsOwotICAgIHZvaWQgc2V0QnJlYWtwb2ludChFcnJvclN0cmlu
ZyYsIGNvbnN0IEpTT046Ok9iamVjdCYgbG9jYXRpb24sIGNvbnN0IEpTT046Ok9iamVjdCogb3B0
aW9ucywgUHJvdG9jb2w6OkRlYnVnZ2VyOjpCcmVha3BvaW50SWQqIG91dEJyZWFrcG9pbnRJZCwg
UmVmUHRyPFByb3RvY29sOjpEZWJ1Z2dlcjo6TG9jYXRpb24+JiBvdXRBY3R1YWxMb2NhdGlvbikg
ZmluYWw7Ci0gICAgdm9pZCByZW1vdmVCcmVha3BvaW50KEVycm9yU3RyaW5nJiwgY29uc3QgU3Ry
aW5nJiBicmVha3BvaW50SWRlbnRpZmllcikgZmluYWw7Ci0gICAgdm9pZCBjb250aW51ZVVudGls
TmV4dFJ1bkxvb3AoRXJyb3JTdHJpbmcmKSBmaW5hbDsKLSAgICB2b2lkIGNvbnRpbnVlVG9Mb2Nh
dGlvbihFcnJvclN0cmluZyYsIGNvbnN0IEpTT046Ok9iamVjdCYgbG9jYXRpb24pIGZpbmFsOwot
ICAgIHZvaWQgc3RlcE5leHQoRXJyb3JTdHJpbmcmKSBmaW5hbDsKLSAgICB2b2lkIHN0ZXBPdmVy
KEVycm9yU3RyaW5nJikgZmluYWw7Ci0gICAgdm9pZCBzdGVwSW50byhFcnJvclN0cmluZyYpIGZp
bmFsOwotICAgIHZvaWQgc3RlcE91dChFcnJvclN0cmluZyYpIGZpbmFsOwotICAgIHZvaWQgcGF1
c2UoRXJyb3JTdHJpbmcmKSBmaW5hbDsKLSAgICB2b2lkIHJlc3VtZShFcnJvclN0cmluZyYpIGZp
bmFsOwotICAgIHZvaWQgc2VhcmNoSW5Db250ZW50KEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5n
JiBzY3JpcHRJRCwgY29uc3QgU3RyaW5nJiBxdWVyeSwgY29uc3QgYm9vbCogb3B0aW9uYWxDYXNl
U2Vuc2l0aXZlLCBjb25zdCBib29sKiBvcHRpb25hbElzUmVnZXgsIFJlZlB0cjxKU09OOjpBcnJh
eU9mPFByb3RvY29sOjpHZW5lcmljVHlwZXM6OlNlYXJjaE1hdGNoPj4mKSBmaW5hbDsKLSAgICB2
b2lkIGdldFNjcmlwdFNvdXJjZShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgc2NyaXB0SUQs
IFN0cmluZyogc2NyaXB0U291cmNlKSBmaW5hbDsKLSAgICB2b2lkIGdldEZ1bmN0aW9uRGV0YWls
cyhFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgZnVuY3Rpb25JZCwgUmVmUHRyPFByb3RvY29s
OjpEZWJ1Z2dlcjo6RnVuY3Rpb25EZXRhaWxzPiYpIGZpbmFsOwotICAgIHZvaWQgc2V0UGF1c2VP
bkRlYnVnZ2VyU3RhdGVtZW50cyhFcnJvclN0cmluZyYsIGJvb2wgZW5hYmxlZCwgY29uc3QgSlNP
Tjo6T2JqZWN0KiBvcHRpb25zKSBmaW5hbDsKLSAgICB2b2lkIHNldFBhdXNlT25FeGNlcHRpb25z
KEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBwYXVzZVN0YXRlLCBjb25zdCBKU09OOjpPYmpl
Y3QqIG9wdGlvbnMpIGZpbmFsOwotICAgIHZvaWQgc2V0UGF1c2VPbkFzc2VydGlvbnMoRXJyb3JT
dHJpbmcmLCBib29sIGVuYWJsZWQsIGNvbnN0IEpTT046Ok9iamVjdCogb3B0aW9ucykgZmluYWw7
Ci0gICAgdm9pZCBzZXRQYXVzZU9uTWljcm90YXNrcyhFcnJvclN0cmluZyYsIGJvb2wgZW5hYmxl
ZCwgY29uc3QgSlNPTjo6T2JqZWN0KiBvcHRpb25zKSBmaW5hbDsKLSAgICB2b2lkIHNldFBhdXNl
Rm9ySW50ZXJuYWxTY3JpcHRzKEVycm9yU3RyaW5nJiwgYm9vbCBzaG91bGRQYXVzZSkgZmluYWw7
Ci0gICAgdm9pZCBldmFsdWF0ZU9uQ2FsbEZyYW1lKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5n
JiBjYWxsRnJhbWVJZCwgY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBjb25zdCBTdHJpbmcqIG9i
amVjdEdyb3VwLCBjb25zdCBib29sKiBpbmNsdWRlQ29tbWFuZExpbmVBUEksIGNvbnN0IGJvb2wq
IGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29sZSwgY29uc3QgYm9vbCogcmV0dXJu
QnlWYWx1ZSwgY29uc3QgYm9vbCogZ2VuZXJhdGVQcmV2aWV3LCBjb25zdCBib29sKiBzYXZlUmVz
dWx0LCBjb25zdCBib29sKiBlbXVsYXRlVXNlckdlc3R1cmUsIFJlZlB0cjxQcm90b2NvbDo6UnVu
dGltZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0LCBPcHRpb25hbDxib29sPiYgd2FzVGhyb3duLCBP
cHRpb25hbDxpbnQ+JiBzYXZlZFJlc3VsdEluZGV4KSBvdmVycmlkZTsKLSAgICB2b2lkIHNldFNo
b3VsZEJsYWNrYm94VVJMKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiB1cmwsIGJvb2wgc2hv
dWxkQmxhY2tib3gsIGNvbnN0IGJvb2wqIGNhc2VTZW5zaXRpdmUsIGNvbnN0IGJvb2wqIGlzUmVn
ZXgpIGZpbmFsOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGVuYWJsZSgpIGZp
bmFsOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGRpc2FibGUoKSBmaW5hbDsK
KyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzZXRBc3luY1N0YWNrVHJhY2VEZXB0
aChpbnQpIGZpbmFsOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHNldEJyZWFr
cG9pbnRzQWN0aXZlKGJvb2wpIGZpbmFsOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHN0
ZDo6dHVwbGU8UHJvdG9jb2w6OkRlYnVnZ2VyOjpCcmVha3BvaW50SWQsIFJlZjxKU09OOjpBcnJh
eU9mPFByb3RvY29sOjpEZWJ1Z2dlcjo6TG9jYXRpb24+Pj4+IHNldEJyZWFrcG9pbnRCeVVybChp
bnQgbGluZU51bWJlciwgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgdXJsUmVnZXgs
IE9wdGlvbmFsPGludD4mJiBjb2x1bW5OdW1iZXIsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgb3B0
aW9ucykgZmluYWw7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8c3RkOjp0dXBsZTxQcm90
b2NvbDo6RGVidWdnZXI6OkJyZWFrcG9pbnRJZCwgUmVmPFByb3RvY29sOjpEZWJ1Z2dlcjo6TG9j
YXRpb24+Pj4gc2V0QnJlYWtwb2ludChSZWY8SlNPTjo6T2JqZWN0PiYmIGxvY2F0aW9uLCBSZWZQ
dHI8SlNPTjo6T2JqZWN0PiYmIG9wdGlvbnMpIGZpbmFsOworICAgIFByb3RvY29sOjpFcnJvclN0
cmluZ09yPHZvaWQ+IHJlbW92ZUJyZWFrcG9pbnQoY29uc3QgUHJvdG9jb2w6OkRlYnVnZ2VyOjpC
cmVha3BvaW50SWQmKSBmaW5hbDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBj
b250aW51ZVVudGlsTmV4dFJ1bkxvb3AoKSBmaW5hbDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJp
bmdPcjx2b2lkPiBjb250aW51ZVRvTG9jYXRpb24oUmVmPEpTT046Ok9iamVjdD4mJiBsb2NhdGlv
bikgZmluYWw7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc3RlcE5leHQoKSBm
aW5hbDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzdGVwT3ZlcigpIGZpbmFs
OworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHN0ZXBJbnRvKCkgZmluYWw7Cisg
ICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc3RlcE91dCgpIGZpbmFsOworICAgIFBy
b3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHBhdXNlKCkgZmluYWw7CisgICAgUHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8dm9pZD4gcmVzdW1lKCkgZmluYWw7CisgICAgUHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8UmVmPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkdlbmVyaWNUeXBlczo6U2VhcmNo
TWF0Y2g+Pj4gc2VhcmNoSW5Db250ZW50KGNvbnN0IFByb3RvY29sOjpEZWJ1Z2dlcjo6U2NyaXB0
SWQmLCBjb25zdCBTdHJpbmcmIHF1ZXJ5LCBPcHRpb25hbDxib29sPiYmIGNhc2VTZW5zaXRpdmUs
IE9wdGlvbmFsPGJvb2w+JiYgaXNSZWdleCkgZmluYWw7CisgICAgUHJvdG9jb2w6OkVycm9yU3Ry
aW5nT3I8U3RyaW5nPiBnZXRTY3JpcHRTb3VyY2UoY29uc3QgUHJvdG9jb2w6OkRlYnVnZ2VyOjpT
Y3JpcHRJZCYpIGZpbmFsOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxQcm90b2Nv
bDo6RGVidWdnZXI6OkZ1bmN0aW9uRGV0YWlscz4+IGdldEZ1bmN0aW9uRGV0YWlscyhjb25zdCBT
dHJpbmcmIGZ1bmN0aW9uSWQpIGZpbmFsOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZv
aWQ+IHNldFBhdXNlT25EZWJ1Z2dlclN0YXRlbWVudHMoYm9vbCBlbmFibGVkLCBSZWZQdHI8SlNP
Tjo6T2JqZWN0PiYmIG9wdGlvbnMpIGZpbmFsOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09y
PHZvaWQ+IHNldFBhdXNlT25FeGNlcHRpb25zKGNvbnN0IFN0cmluZyYgc3RhdGUsIFJlZlB0cjxK
U09OOjpPYmplY3Q+JiYgb3B0aW9ucykgZmluYWw7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5n
T3I8dm9pZD4gc2V0UGF1c2VPbkFzc2VydGlvbnMoYm9vbCBlbmFibGVkLCBSZWZQdHI8SlNPTjo6
T2JqZWN0PiYmIG9wdGlvbnMpIGZpbmFsOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZv
aWQ+IHNldFBhdXNlT25NaWNyb3Rhc2tzKGJvb2wgZW5hYmxlZCwgUmVmUHRyPEpTT046Ok9iamVj
dD4mJiBvcHRpb25zKSBmaW5hbDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBz
ZXRQYXVzZUZvckludGVybmFsU2NyaXB0cyhib29sIHNob3VsZFBhdXNlKSBmaW5hbDsKKyAgICBQ
cm90b2NvbDo6RXJyb3JTdHJpbmdPcjxzdGQ6OnR1cGxlPFJlZjxQcm90b2NvbDo6UnVudGltZTo6
UmVtb3RlT2JqZWN0PiwgT3B0aW9uYWw8Ym9vbD4gLyogd2FzVGhyb3duICovLCBPcHRpb25hbDxp
bnQ+IC8qIHNhdmVkUmVzdWx0SW5kZXggKi8+PiBldmFsdWF0ZU9uQ2FsbEZyYW1lKGNvbnN0IFBy
b3RvY29sOjpEZWJ1Z2dlcjo6Q2FsbEZyYW1lSWQmLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24s
IGNvbnN0IFN0cmluZyYgb2JqZWN0R3JvdXAsIE9wdGlvbmFsPGJvb2w+JiYgaW5jbHVkZUNvbW1h
bmRMaW5lQVBJLCBPcHRpb25hbDxib29sPiYmIGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRl
Q29uc29sZSwgT3B0aW9uYWw8Ym9vbD4mJiByZXR1cm5CeVZhbHVlLCBPcHRpb25hbDxib29sPiYm
IGdlbmVyYXRlUHJldmlldywgT3B0aW9uYWw8Ym9vbD4mJiBzYXZlUmVzdWx0LCBPcHRpb25hbDxi
b29sPiYmIGVtdWxhdGVVc2VyR2VzdHVyZSkgb3ZlcnJpZGU7CisgICAgUHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8dm9pZD4gc2V0U2hvdWxkQmxhY2tib3hVUkwoY29uc3QgU3RyaW5nJiB1cmwsIGJv
b2wgc2hvdWxkQmxhY2tib3gsIE9wdGlvbmFsPGJvb2w+JiYgY2FzZVNlbnNpdGl2ZSwgT3B0aW9u
YWw8Ym9vbD4mJiBpc1JlZ2V4KSBmaW5hbDsKIAogICAgIC8vIEpTQzo6RGVidWdnZXI6Ok9ic2Vy
dmVyCiAgICAgdm9pZCBkaWRQYXJzZVNvdXJjZShKU0M6OlNvdXJjZUlELCBjb25zdCBKU0M6OkRl
YnVnZ2VyOjpTY3JpcHQmKSBmaW5hbDsKQEAgLTE0MiwxMSArMTQxLDExIEBAIHB1YmxpYzoKIAog
cHJvdGVjdGVkOgogICAgIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQoQWdlbnRDb250ZXh0Jik7Ci0g
ICAgdmlydHVhbCB2b2lkIGVuYWJsZSgpOwotICAgIHZpcnR1YWwgdm9pZCBkaXNhYmxlKGJvb2wg
aXNCZWluZ0Rlc3Ryb3llZCk7CisgICAgdmlydHVhbCB2b2lkIGludGVybmFsRW5hYmxlKCk7Cisg
ICAgdmlydHVhbCB2b2lkIGludGVybmFsRGlzYWJsZShib29sIGlzQmVpbmdEZXN0cm95ZWQpOwog
CiAgICAgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyJiBpbmplY3RlZFNjcmlwdE1hbmFnZXIoKSBjb25z
dCB7IHJldHVybiBtX2luamVjdGVkU2NyaXB0TWFuYWdlcjsgfQotICAgIHZpcnR1YWwgSW5qZWN0
ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHRGb3JFdmFsKEVycm9yU3RyaW5nJiwgY29uc3QgaW50KiBl
eGVjdXRpb25Db250ZXh0SWQpID0gMDsKKyAgICB2aXJ0dWFsIEluamVjdGVkU2NyaXB0IGluamVj
dGVkU2NyaXB0Rm9yRXZhbChQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBPcHRpb25hbDxQcm90b2Nv
bDo6UnVudGltZTo6RXhlY3V0aW9uQ29udGV4dElkPiYmKSA9IDA7CiAKICAgICBKU0M6OkRlYnVn
Z2VyJiBkZWJ1Z2dlcigpIHsgcmV0dXJuIG1fZGVidWdnZXI7IH0KIApAQCAtMTY2LDggKzE2NSw4
IEBAIHByaXZhdGU6CiAgICAgY2xhc3MgUHJvdG9jb2xCcmVha3BvaW50IHsKICAgICAgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgcHVibGljOgotICAgICAgICBzdGF0aWMgT3B0aW9u
YWw8UHJvdG9jb2xCcmVha3BvaW50PiBmcm9tUGF5bG9hZChFcnJvclN0cmluZyYsIEpTQzo6U291
cmNlSUQsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIHVuc2lnbmVkIGNvbHVtbk51bWJlciwgY29uc3Qg
SlNPTjo6T2JqZWN0KiBvcHRpb25zUGF5bG9hZCA9IG51bGxwdHIpOwotICAgICAgICBzdGF0aWMg
T3B0aW9uYWw8UHJvdG9jb2xCcmVha3BvaW50PiBmcm9tUGF5bG9hZChFcnJvclN0cmluZyYsIGNv
bnN0IFN0cmluZyYgdXJsLCBib29sIGlzUmVnZXgsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIHVuc2ln
bmVkIGNvbHVtbk51bWJlciwgY29uc3QgSlNPTjo6T2JqZWN0KiBvcHRpb25zUGF5bG9hZCA9IG51
bGxwdHIpOworICAgICAgICBzdGF0aWMgT3B0aW9uYWw8UHJvdG9jb2xCcmVha3BvaW50PiBmcm9t
UGF5bG9hZChQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBKU0M6OlNvdXJjZUlELCB1bnNpZ25lZCBs
aW5lTnVtYmVyLCB1bnNpZ25lZCBjb2x1bW5OdW1iZXIsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYg
b3B0aW9ucyA9IG51bGxwdHIpOworICAgICAgICBzdGF0aWMgT3B0aW9uYWw8UHJvdG9jb2xCcmVh
a3BvaW50PiBmcm9tUGF5bG9hZChQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcm
IHVybCwgYm9vbCBpc1JlZ2V4LCB1bnNpZ25lZCBsaW5lTnVtYmVyLCB1bnNpZ25lZCBjb2x1bW5O
dW1iZXIsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgb3B0aW9ucyA9IG51bGxwdHIpOwogCiAgICAg
ICAgIFByb3RvY29sQnJlYWtwb2ludCgpOwogICAgICAgICBQcm90b2NvbEJyZWFrcG9pbnQoSlND
OjpTb3VyY2VJRCwgdW5zaWduZWQgbGluZU51bWJlciwgdW5zaWduZWQgY29sdW1uTnVtYmVyLCBj
b25zdCBTdHJpbmcmIGNvbmRpdGlvbiA9IG51bGxTdHJpbmcoKSwgSlNDOjpCcmVha3BvaW50OjpB
Y3Rpb25zVmVjdG9yJiYgYWN0aW9ucyA9IHsgfSwgYm9vbCBhdXRvQ29udGludWUgPSBmYWxzZSwg
c2l6ZV90IGlnbm9yZUNvdW50ID0gMCk7CkBAIC0xNzUsMTIgKzE3NCwxMiBAQCBwcml2YXRlOgog
CiAgICAgICAgIFJlZjxKU0M6OkJyZWFrcG9pbnQ+IGNyZWF0ZURlYnVnZ2VyQnJlYWtwb2ludChK
U0M6OkJyZWFrcG9pbnRJRCwgSlNDOjpTb3VyY2VJRCkgY29uc3Q7CiAKLSAgICAgICAgY29uc3Qg
SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OkJyZWFrcG9pbnRJZCYgaWQoKSBjb25zdCB7
IHJldHVybiBtX2lkOyB9CisgICAgICAgIGNvbnN0IFByb3RvY29sOjpEZWJ1Z2dlcjo6QnJlYWtw
b2ludElkJiBpZCgpIGNvbnN0IHsgcmV0dXJuIG1faWQ7IH0KIAogICAgICAgICBib29sIG1hdGNo
ZXNTY3JpcHRVUkwoY29uc3QgU3RyaW5nJikgY29uc3Q7CiAKICAgICBwcml2YXRlOgotICAgICAg
ICBJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6QnJlYWtwb2ludElkIG1faWQ7CisgICAg
ICAgIFByb3RvY29sOjpEZWJ1Z2dlcjo6QnJlYWtwb2ludElkIG1faWQ7CiAKICNpZiBBU1NFUlRf
RU5BQkxFRAogICAgICAgICBKU0M6OlNvdXJjZUlEIG1fc291cmNlSUQgeyBKU0M6Om5vU291cmNl
SUQgfTsKQEAgLTIwMiw3ICsyMDEsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgc2V0QnJlYWtwb2lu
dChKU0M6OkJyZWFrcG9pbnQmKTsKICAgICB2b2lkIGRpZFNldEJyZWFrcG9pbnQoUHJvdG9jb2xC
cmVha3BvaW50JiwgSlNDOjpCcmVha3BvaW50Jik7CiAKLSAgICBib29sIGFzc2VydFBhdXNlZChF
cnJvclN0cmluZyYpOworICAgIGJvb2wgYXNzZXJ0UGF1c2VkKFByb3RvY29sOjpFcnJvclN0cmlu
ZyYpOwogICAgIHZvaWQgY2xlYXJEZWJ1Z2dlckJyZWFrcG9pbnRTdGF0ZSgpOwogICAgIHZvaWQg
Y2xlYXJJbnNwZWN0b3JCcmVha3BvaW50U3RhdGUoKTsKICAgICB2b2lkIGNsZWFyUGF1c2VEZXRh
aWxzKCk7CkBAIC0yNDgsOCArMjQ3LDggQEAgcHJpdmF0ZToKICAgICBKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiBtX3BhdXNlZEdsb2JhbE9iamVjdCB7IG51bGxwdHIgfTsKICAgICBKU0M6OlN0cm9uZzxK
U0M6OlVua25vd24+IG1fY3VycmVudENhbGxTdGFjazsKIAotICAgIEhhc2hNYXA8SW5zcGVjdG9y
OjpQcm90b2NvbDo6RGVidWdnZXI6OkJyZWFrcG9pbnRJZCwgUHJvdG9jb2xCcmVha3BvaW50PiBt
X3Byb3RvY29sQnJlYWtwb2ludEZvclByb3RvY29sQnJlYWtwb2ludElEOwotICAgIEhhc2hNYXA8
SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OkJyZWFrcG9pbnRJZCwgSlNDOjpCcmVha3Bv
aW50c1ZlY3Rvcj4gbV9kZWJ1Z2dlckJyZWFrcG9pbnRzRm9yUHJvdG9jb2xCcmVha3BvaW50SUQ7
CisgICAgSGFzaE1hcDxQcm90b2NvbDo6RGVidWdnZXI6OkJyZWFrcG9pbnRJZCwgUHJvdG9jb2xC
cmVha3BvaW50PiBtX3Byb3RvY29sQnJlYWtwb2ludEZvclByb3RvY29sQnJlYWtwb2ludElEOwor
ICAgIEhhc2hNYXA8UHJvdG9jb2w6OkRlYnVnZ2VyOjpCcmVha3BvaW50SWQsIEpTQzo6QnJlYWtw
b2ludHNWZWN0b3I+IG1fZGVidWdnZXJCcmVha3BvaW50c0ZvclByb3RvY29sQnJlYWtwb2ludElE
OwogICAgIEpTQzo6QnJlYWtwb2ludElEIG1fbmV4dERlYnVnZ2VyQnJlYWtwb2ludElEIHsgSlND
Ojpub0JyZWFrcG9pbnRJRCArIDEgfTsKIAogICAgIFJlZlB0cjxKU0M6OkJyZWFrcG9pbnQ+IG1f
Y29udGludWVUb0xvY2F0aW9uRGVidWdnZXJCcmVha3BvaW50OwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9ySGVhcEFnZW50LmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckhlYXBBZ2Vu
dC5jcHAKaW5kZXggOGM2MjFhZDQxYzRkYTUwMDQzZDMwMjIwMGE0NmZhZTllZmM5NzE4Yy4uODVj
ZWQ5ZjNkZjYyMjMwMWI5NWUzM2U0OTM1Y2JiZjE2MmI3ZTMzMCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9ySGVhcEFnZW50LmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JIZWFw
QWdlbnQuY3BwCkBAIC01NiwyOCArNTYsMjUgQEAgdm9pZCBJbnNwZWN0b3JIZWFwQWdlbnQ6OmRp
ZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChGcm9udGVuZFJvdXRlciosIEJhY2tlbmREaXMKIAog
dm9pZCBJbnNwZWN0b3JIZWFwQWdlbnQ6OndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKERp
c2Nvbm5lY3RSZWFzb24pCiB7Ci0gICAgRXJyb3JTdHJpbmcgaWdub3JlZDsKLSAgICBkaXNhYmxl
KGlnbm9yZWQpOworICAgIGRpc2FibGUoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JIZWFwQWdlbnQ6
OmVuYWJsZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdP
cjx2b2lkPiBJbnNwZWN0b3JIZWFwQWdlbnQ6OmVuYWJsZSgpCiB7Ci0gICAgaWYgKG1fZW5hYmxl
ZCkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJIZWFwIGRvbWFpbiBhbHJlYWR5IGVuYWJsZWQi
X3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKG1fZW5hYmxlZCkKKyAgICAgICAg
cmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJIZWFwIGRvbWFpbiBhbHJlYWR5IGVuYWJsZWQiX3MpOwog
CiAgICAgbV9lbmFibGVkID0gdHJ1ZTsKIAogICAgIG1fZW52aXJvbm1lbnQudm0oKS5oZWFwLmFk
ZE9ic2VydmVyKHRoaXMpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JI
ZWFwQWdlbnQ6OmRpc2FibGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nKQorUHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9ySGVhcEFnZW50OjpkaXNhYmxlKCkKIHsKLSAgICBp
ZiAoIW1fZW5hYmxlZCkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJIZWFwIGRvbWFpbiBhbHJl
YWR5IGRpc2FibGVkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghbV9lbmFi
bGVkKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkhlYXAgZG9tYWluIGFscmVhZHkg
ZGlzYWJsZWQiX3MpOwogCiAgICAgbV9lbmFibGVkID0gZmFsc2U7CiAgICAgbV90cmFja2luZyA9
IGZhbHNlOwpAQCAtODUsMTcgKzgyLDIxIEBAIHZvaWQgSW5zcGVjdG9ySGVhcEFnZW50OjpkaXNh
YmxlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZykKICAgICBtX2Vudmlyb25tZW50LnZtKCkuaGVh
cC5yZW1vdmVPYnNlcnZlcih0aGlzKTsKIAogICAgIGNsZWFySGVhcFNuYXBzaG90cygpOworCisg
ICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JIZWFwQWdlbnQ6OmdjKEVycm9yU3Ry
aW5nJikKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckhlYXBBZ2VudDo6
Z2MoKQogewogICAgIFZNJiB2bSA9IG1fZW52aXJvbm1lbnQudm0oKTsKICAgICBKU0xvY2tIb2xk
ZXIgbG9jayh2bSk7CiAgICAgc2FuaXRpemVTdGFja0ZvclZNKHZtKTsKICAgICB2bS5oZWFwLmNv
bGxlY3ROb3coU3luYywgQ29sbGVjdGlvblNjb3BlOjpGdWxsKTsKKworICAgIHJldHVybiB7IH07
CiB9CiAKLXZvaWQgSW5zcGVjdG9ySGVhcEFnZW50OjpzbmFwc2hvdChFcnJvclN0cmluZyYsIGRv
dWJsZSogdGltZXN0YW1wLCBTdHJpbmcqIHNuYXBzaG90RGF0YSkKK1Byb3RvY29sOjpFcnJvclN0
cmluZ09yPHN0ZDo6dHVwbGU8ZG91YmxlLCBQcm90b2NvbDo6SGVhcDo6SGVhcFNuYXBzaG90RGF0
YT4+IEluc3BlY3RvckhlYXBBZ2VudDo6c25hcHNob3QoKQogewogICAgIFZNJiB2bSA9IG1fZW52
aXJvbm1lbnQudm0oKTsKICAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CkBAIC0xMDMsOCArMTA0
LDggQEAgdm9pZCBJbnNwZWN0b3JIZWFwQWdlbnQ6OnNuYXBzaG90KEVycm9yU3RyaW5nJiwgZG91
YmxlKiB0aW1lc3RhbXAsIFN0cmluZyogc25hcHMKICAgICBIZWFwU25hcHNob3RCdWlsZGVyIHNu
YXBzaG90QnVpbGRlcih2bS5lbnN1cmVIZWFwUHJvZmlsZXIoKSk7CiAgICAgc25hcHNob3RCdWls
ZGVyLmJ1aWxkU25hcHNob3QoKTsKIAotICAgICp0aW1lc3RhbXAgPSBtX2Vudmlyb25tZW50LmV4
ZWN1dGlvblN0b3B3YXRjaCgpLmVsYXBzZWRUaW1lKCkuc2Vjb25kcygpOwotICAgICpzbmFwc2hv
dERhdGEgPSBzbmFwc2hvdEJ1aWxkZXIuanNvbihbJl0gKGNvbnN0IEhlYXBTbmFwc2hvdE5vZGUm
IG5vZGUpIHsKKyAgICBhdXRvIHRpbWVzdGFtcCA9IG1fZW52aXJvbm1lbnQuZXhlY3V0aW9uU3Rv
cHdhdGNoKCkuZWxhcHNlZFRpbWUoKS5zZWNvbmRzKCk7CisgICAgYXV0byBzbmFwc2hvdERhdGEg
PSBzbmFwc2hvdEJ1aWxkZXIuanNvbihbJl0gKGNvbnN0IEhlYXBTbmFwc2hvdE5vZGUmIG5vZGUp
IHsKICAgICAgICAgaWYgKFN0cnVjdHVyZSogc3RydWN0dXJlID0gbm9kZS5jZWxsLT5zdHJ1Y3R1
cmUodm0pKSB7CiAgICAgICAgICAgICBpZiAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9
IHN0cnVjdHVyZS0+Z2xvYmFsT2JqZWN0KCkpIHsKICAgICAgICAgICAgICAgICBpZiAoIW1fZW52
aXJvbm1lbnQuY2FuQWNjZXNzSW5zcGVjdGVkU2NyaXB0U3RhdGUoZ2xvYmFsT2JqZWN0KSkKQEAg
LTExMywzNyArMTE0LDQ1IEBAIHZvaWQgSW5zcGVjdG9ySGVhcEFnZW50OjpzbmFwc2hvdChFcnJv
clN0cmluZyYsIGRvdWJsZSogdGltZXN0YW1wLCBTdHJpbmcqIHNuYXBzCiAgICAgICAgIH0KICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfSk7CisKKyAgICByZXR1cm4geyB7IHRpbWVzdGFtcCwg
c25hcHNob3REYXRhIH0gfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JIZWFwQWdlbnQ6OnN0YXJ0VHJh
Y2tpbmcoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8
dm9pZD4gSW5zcGVjdG9ySGVhcEFnZW50OjpzdGFydFRyYWNraW5nKCkKIHsKICAgICBpZiAobV90
cmFja2luZykKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4geyB9OwogCiAgICAgbV90
cmFja2luZyA9IHRydWU7CiAKLSAgICBkb3VibGUgdGltZXN0YW1wOwotICAgIFN0cmluZyBzbmFw
c2hvdERhdGE7Ci0gICAgc25hcHNob3QoZXJyb3JTdHJpbmcsICZ0aW1lc3RhbXAsICZzbmFwc2hv
dERhdGEpOworICAgIGF1dG8gcmVzdWx0ID0gc25hcHNob3QoKTsKKyAgICBpZiAoIXJlc3VsdCkK
KyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKFdURk1vdmUocmVzdWx0LmVycm9yKCkpKTsK
IAorICAgIGF1dG8gW3RpbWVzdGFtcCwgc25hcHNob3REYXRhXSA9IFdURk1vdmUocmVzdWx0LnZh
bHVlKCkpOwogICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT50cmFja2luZ1N0YXJ0KHRpbWVzdGFt
cCwgc25hcHNob3REYXRhKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9y
SGVhcEFnZW50OjpzdG9wVHJhY2tpbmcoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nKQorUHJvdG9j
b2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9ySGVhcEFnZW50OjpzdG9wVHJhY2tpbmco
KQogewogICAgIGlmICghbV90cmFja2luZykKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1
cm4geyB9OwogCiAgICAgbV90cmFja2luZyA9IGZhbHNlOwogCi0gICAgZG91YmxlIHRpbWVzdGFt
cDsKLSAgICBTdHJpbmcgc25hcHNob3REYXRhOwotICAgIHNuYXBzaG90KGVycm9yU3RyaW5nLCAm
dGltZXN0YW1wLCAmc25hcHNob3REYXRhKTsKKyAgICBhdXRvIHJlc3VsdCA9IHNuYXBzaG90KCk7
CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChXVEZNb3Zl
KHJlc3VsdC5lcnJvcigpKSk7CiAKKyAgICBhdXRvIFt0aW1lc3RhbXAsIHNuYXBzaG90RGF0YV0g
PSBXVEZNb3ZlKHJlc3VsdC52YWx1ZSgpKTsKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+dHJh
Y2tpbmdDb21wbGV0ZSh0aW1lc3RhbXAsIHNuYXBzaG90RGF0YSk7CisKKyAgICByZXR1cm4geyB9
OwogfQogCi1PcHRpb25hbDxIZWFwU25hcHNob3ROb2RlPiBJbnNwZWN0b3JIZWFwQWdlbnQ6Om5v
ZGVGb3JIZWFwT2JqZWN0SWRlbnRpZmllcihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIHVuc2ln
bmVkIGhlYXBPYmplY3RJZGVudGlmaWVyKQorT3B0aW9uYWw8SGVhcFNuYXBzaG90Tm9kZT4gSW5z
cGVjdG9ySGVhcEFnZW50Ojpub2RlRm9ySGVhcE9iamVjdElkZW50aWZpZXIoUHJvdG9jb2w6OkVy
cm9yU3RyaW5nJiBlcnJvclN0cmluZywgdW5zaWduZWQgaGVhcE9iamVjdElkZW50aWZpZXIpCiB7
CiAgICAgSGVhcFByb2ZpbGVyKiBoZWFwUHJvZmlsZXIgPSBtX2Vudmlyb25tZW50LnZtKCkuaGVh
cFByb2ZpbGVyKCk7CiAgICAgaWYgKCFoZWFwUHJvZmlsZXIpIHsKQEAgLTE2Niw4ICsxNzUsMTAg
QEAgT3B0aW9uYWw8SGVhcFNuYXBzaG90Tm9kZT4gSW5zcGVjdG9ySGVhcEFnZW50Ojpub2RlRm9y
SGVhcE9iamVjdElkZW50aWZpZXIoRXJyb3IKICAgICByZXR1cm4gb3B0aW9uYWxOb2RlOwogfQog
Ci12b2lkIEluc3BlY3RvckhlYXBBZ2VudDo6Z2V0UHJldmlldyhFcnJvclN0cmluZyYgZXJyb3JT
dHJpbmcsIGludCBoZWFwT2JqZWN0SWQsIE9wdGlvbmFsPFN0cmluZz4mIHJlc3VsdFN0cmluZywg
UmVmUHRyPFByb3RvY29sOjpEZWJ1Z2dlcjo6RnVuY3Rpb25EZXRhaWxzPiYgZnVuY3Rpb25EZXRh
aWxzLCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6Ok9iamVjdFByZXZpZXc+JiBvYmplY3RQcmV2
aWV3KQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8c3RkOjp0dXBsZTxTdHJpbmcsIFJlZlB0cjxQ
cm90b2NvbDo6RGVidWdnZXI6OkZ1bmN0aW9uRGV0YWlscz4sIFJlZlB0cjxQcm90b2NvbDo6UnVu
dGltZTo6T2JqZWN0UHJldmlldz4+PiBJbnNwZWN0b3JIZWFwQWdlbnQ6OmdldFByZXZpZXcoaW50
IGhlYXBPYmplY3RJZCkKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7
CisKICAgICAvLyBQcmV2ZW50IHRoZSBjZWxsIGZyb20gZ2V0dGluZyBjb2xsZWN0ZWQgYXMgd2Ug
bG9vayBpdCB1cC4KICAgICBWTSYgdm0gPSBtX2Vudmlyb25tZW50LnZtKCk7CiAgICAgSlNMb2Nr
SG9sZGVyIGxvY2sodm0pOwpAQCAtMTc2LDUzICsxODcsNDggQEAgdm9pZCBJbnNwZWN0b3JIZWFw
QWdlbnQ6OmdldFByZXZpZXcoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgaGVhcE9iamVj
dElkLAogICAgIHVuc2lnbmVkIGhlYXBPYmplY3RJZGVudGlmaWVyID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KGhlYXBPYmplY3RJZCk7CiAgICAgY29uc3QgT3B0aW9uYWw8SGVhcFNuYXBzaG90Tm9k
ZT4gb3B0aW9uYWxOb2RlID0gbm9kZUZvckhlYXBPYmplY3RJZGVudGlmaWVyKGVycm9yU3RyaW5n
LCBoZWFwT2JqZWN0SWRlbnRpZmllcik7CiAgICAgaWYgKCFvcHRpb25hbE5vZGUpCi0gICAgICAg
IHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAog
ICAgIC8vIFN0cmluZyBwcmV2aWV3LgogICAgIEpTQ2VsbCogY2VsbCA9IG9wdGlvbmFsTm9kZS0+
Y2VsbDsKLSAgICBpZiAoY2VsbC0+aXNTdHJpbmcoKSkgewotICAgICAgICByZXN1bHRTdHJpbmcg
PSBhc1N0cmluZyhjZWxsKS0+dHJ5R2V0VmFsdWUoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
KyAgICBpZiAoY2VsbC0+aXNTdHJpbmcoKSkKKyAgICAgICAgcmV0dXJuIHsgeyBhc1N0cmluZyhj
ZWxsKS0+dHJ5R2V0VmFsdWUoKSwgbnVsbHB0ciwgbnVsbHB0ciB9IH07CiAKICAgICAvLyBCaWdJ
bnQgcHJldmlldy4KLSAgICBpZiAoY2VsbC0+aXNIZWFwQmlnSW50KCkpIHsKLSAgICAgICAgcmVz
dWx0U3RyaW5nID0gSlNCaWdJbnQ6OnRyeUdldFN0cmluZyh2bSwgYXNIZWFwQmlnSW50KGNlbGwp
LCAxMCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKGNlbGwtPmlzSGVhcEJpZ0lu
dCgpKQorICAgICAgICByZXR1cm4geyB7IEpTQmlnSW50Ojp0cnlHZXRTdHJpbmcodm0sIGFzSGVh
cEJpZ0ludChjZWxsKSwgMTApLCBudWxscHRyLCBudWxscHRyIH0gfTsKIAogICAgIC8vIEZJWE1F
OiBQcm92aWRlIHByZXZpZXcgaW5mb3JtYXRpb24gZm9yIEludGVybmFsIE9iamVjdHM/IENvZGVC
bG9jaywgRXhlY3V0YWJsZSwgZXRjLgogCiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBjZWxs
LT5zdHJ1Y3R1cmUodm0pOwotICAgIGlmICghc3RydWN0dXJlKSB7Ci0gICAgICAgIGVycm9yU3Ry
aW5nID0gIlVuYWJsZSB0byBnZXQgb2JqZWN0IGRldGFpbHMgLSBTdHJ1Y3R1cmUiX3M7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKCFzdHJ1Y3R1cmUpCisgICAgICAgIHJldHVybiBt
YWtlVW5leHBlY3RlZCgiVW5hYmxlIHRvIGdldCBvYmplY3QgZGV0YWlscyAtIFN0cnVjdHVyZSJf
cyk7CiAKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gc3RydWN0dXJlLT5nbG9i
YWxPYmplY3QoKTsKLSAgICBpZiAoIWdsb2JhbE9iamVjdCkgewotICAgICAgICBlcnJvclN0cmlu
ZyA9ICJVbmFibGUgdG8gZ2V0IG9iamVjdCBkZXRhaWxzIC0gR2xvYmFsT2JqZWN0Il9zOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghZ2xvYmFsT2JqZWN0KQorICAgICAgICByZXR1
cm4gbWFrZVVuZXhwZWN0ZWQoIlVuYWJsZSB0byBnZXQgb2JqZWN0IGRldGFpbHMgLSBHbG9iYWxP
YmplY3QiX3MpOwogCiAgICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHQgPSBtX2luamVj
dGVkU2NyaXB0TWFuYWdlci5pbmplY3RlZFNjcmlwdEZvcihnbG9iYWxPYmplY3QpOwotICAgIGlm
IChpbmplY3RlZFNjcmlwdC5oYXNOb1ZhbHVlKCkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAi
VW5hYmxlIHRvIGdldCBvYmplY3QgZGV0YWlscyAtIEluamVjdGVkU2NyaXB0Il9zOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQorICAgIGlmIChpbmplY3RlZFNjcmlwdC5oYXNOb1ZhbHVlKCkpCisg
ICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiVW5hYmxlIHRvIGdldCBvYmplY3QgZGV0YWls
cyAtIEluamVjdGVkU2NyaXB0Il9zKTsKIAogICAgIC8vIEZ1bmN0aW9uIHByZXZpZXcuCiAgICAg
aWYgKGNlbGwtPmluaGVyaXRzPEpTRnVuY3Rpb24+KHZtKSkgeworICAgICAgICBSZWZQdHI8UHJv
dG9jb2w6OkRlYnVnZ2VyOjpGdW5jdGlvbkRldGFpbHM+IGZ1bmN0aW9uRGV0YWlsczsKICAgICAg
ICAgaW5qZWN0ZWRTY3JpcHQuZnVuY3Rpb25EZXRhaWxzKGVycm9yU3RyaW5nLCBjZWxsLCBmdW5j
dGlvbkRldGFpbHMpOwotICAgICAgICByZXR1cm47CisgICAgICAgIGlmICghZnVuY3Rpb25EZXRh
aWxzKQorICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKKyAg
ICAgICAgcmV0dXJuIHsgeyBudWxsU3RyaW5nKCksIGZ1bmN0aW9uRGV0YWlscywgbnVsbHB0ciB9
IH07CiAgICAgfQogCiAgICAgLy8gT2JqZWN0IHByZXZpZXcuCi0gICAgb2JqZWN0UHJldmlldyA9
IGluamVjdGVkU2NyaXB0LnByZXZpZXdWYWx1ZShjZWxsKTsKKyAgICByZXR1cm4geyB7IG51bGxT
dHJpbmcoKSwgbnVsbHB0ciwgaW5qZWN0ZWRTY3JpcHQucHJldmlld1ZhbHVlKGNlbGwpIH0gfTsK
IH0KIAotdm9pZCBJbnNwZWN0b3JIZWFwQWdlbnQ6OmdldFJlbW90ZU9iamVjdChFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcsIGludCBoZWFwT2JqZWN0SWQsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxP
YmplY3RHcm91cCwgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiByZXN1
bHQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90
ZU9iamVjdD4+IEluc3BlY3RvckhlYXBBZ2VudDo6Z2V0UmVtb3RlT2JqZWN0KGludCBoZWFwT2Jq
ZWN0SWQsIGNvbnN0IFN0cmluZyYgb2JqZWN0R3JvdXApCiB7CisgICAgUHJvdG9jb2w6OkVycm9y
U3RyaW5nIGVycm9yU3RyaW5nOworCiAgICAgLy8gUHJldmVudCB0aGUgY2VsbCBmcm9tIGdldHRp
bmcgY29sbGVjdGVkIGFzIHdlIGxvb2sgaXQgdXAuCiAgICAgVk0mIHZtID0gbV9lbnZpcm9ubWVu
dC52bSgpOwogICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKQEAgLTIzMSwyOSArMjM3LDI2IEBA
IHZvaWQgSW5zcGVjdG9ySGVhcEFnZW50OjpnZXRSZW1vdGVPYmplY3QoRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBpbnQgaGVhcE9iamVjCiAgICAgdW5zaWduZWQgaGVhcE9iamVjdElkZW50aWZp
ZXIgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaGVhcE9iamVjdElkKTsKICAgICBjb25zdCBPcHRp
b25hbDxIZWFwU25hcHNob3ROb2RlPiBvcHRpb25hbE5vZGUgPSBub2RlRm9ySGVhcE9iamVjdElk
ZW50aWZpZXIoZXJyb3JTdHJpbmcsIGhlYXBPYmplY3RJZGVudGlmaWVyKTsKICAgICBpZiAoIW9w
dGlvbmFsTm9kZSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0
ZWQoZXJyb3JTdHJpbmcpOwogCiAgICAgSlNDZWxsKiBjZWxsID0gb3B0aW9uYWxOb2RlLT5jZWxs
OwogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gY2VsbC0+c3RydWN0dXJlKHZtKTsKLSAgICBp
ZiAoIXN0cnVjdHVyZSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJVbmFibGUgdG8gZ2V0IG9i
amVjdCBkZXRhaWxzIC0gU3RydWN0dXJlIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAg
IGlmICghc3RydWN0dXJlKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIlVuYWJsZSB0
byBnZXQgb2JqZWN0IGRldGFpbHMgLSBTdHJ1Y3R1cmUiX3MpOwogCiAgICAgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCA9IHN0cnVjdHVyZS0+Z2xvYmFsT2JqZWN0KCk7Ci0gICAgaWYgKCFn
bG9iYWxPYmplY3QpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiVW5hYmxlIHRvIGdldCBvYmpl
Y3QgZGV0YWlscyAtIEdsb2JhbE9iamVjdCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAg
ICBpZiAoIWdsb2JhbE9iamVjdCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJVbmFi
bGUgdG8gZ2V0IG9iamVjdCBkZXRhaWxzIC0gR2xvYmFsT2JqZWN0Il9zKTsKIAogICAgIEluamVj
dGVkU2NyaXB0IGluamVjdGVkU2NyaXB0ID0gbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIuaW5qZWN0
ZWRTY3JpcHRGb3IoZ2xvYmFsT2JqZWN0KTsKLSAgICBpZiAoaW5qZWN0ZWRTY3JpcHQuaGFzTm9W
YWx1ZSgpKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIlVuYWJsZSB0byBnZXQgb2JqZWN0IGRl
dGFpbHMgLSBJbmplY3RlZFNjcmlwdCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBp
ZiAoaW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoIlVuYWJsZSB0byBnZXQgb2JqZWN0IGRldGFpbHMgLSBJbmplY3RlZFNjcmlwdCJfcyk7
CiAKLSAgICBTdHJpbmcgb2JqZWN0R3JvdXAgPSBvcHRpb25hbE9iamVjdEdyb3VwID8gKm9wdGlv
bmFsT2JqZWN0R3JvdXAgOiBTdHJpbmcoKTsKLSAgICByZXN1bHQgPSBpbmplY3RlZFNjcmlwdC53
cmFwT2JqZWN0KGNlbGwsIG9iamVjdEdyb3VwLCB0cnVlKTsKKyAgICBhdXRvIG9iamVjdCA9IGlu
amVjdGVkU2NyaXB0LndyYXBPYmplY3QoY2VsbCwgb2JqZWN0R3JvdXAsIHRydWUpOworICAgIGlm
ICghb2JqZWN0KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkludGVybmFsIGVycm9y
OiB1bmFibGUgdG8gY2FzdCBPYmplY3QiKTsKKworICAgIHJldHVybiBvYmplY3QucmVsZWFzZU5v
bk51bGwoKTsKIH0KIAogc3RhdGljIFByb3RvY29sOjpIZWFwOjpHYXJiYWdlQ29sbGVjdGlvbjo6
VHlwZSBwcm90b2NvbFR5cGVGb3JIZWFwT3BlcmF0aW9uKENvbGxlY3Rpb25TY29wZSBzY29wZSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3Bl
Y3RvckhlYXBBZ2VudC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9ySGVhcEFnZW50LmgKaW5kZXggZGVmNmFjZGU5NDYwZTcxMjgwMDQxZGFhNjVmY2Nk
Njg1ZTBmN2MwZi4uY2FhNTEyZDBhYjJlMTBhODhlMGVlNjBjMmUzMmQ3NDM5NDIyMjdhZCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9y
SGVhcEFnZW50LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9ySGVhcEFnZW50LmgKQEAgLTQwLDcgKzQwLDYgQEAgc3RydWN0IEhlYXBTbmFwc2hv
dE5vZGU7CiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAogY2xhc3MgSW5qZWN0ZWRTY3JpcHRNYW5h
Z2VyOwotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiAKIGNsYXNzIEpTX0VYUE9SVF9QUklW
QVRFIEluc3BlY3RvckhlYXBBZ2VudCA6IHB1YmxpYyBJbnNwZWN0b3JBZ2VudEJhc2UsIHB1Ymxp
YyBIZWFwQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyLCBwdWJsaWMgSlNDOjpIZWFwT2JzZXJ2ZXIg
ewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEluc3BlY3RvckhlYXBBZ2VudCk7CkBAIC01NCwx
NCArNTMsMTQgQEAgcHVibGljOgogICAgIHZvaWQgd2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tl
bmQoRGlzY29ubmVjdFJlYXNvbikgZmluYWw7CiAKICAgICAvLyBIZWFwQmFja2VuZERpc3BhdGNo
ZXJIYW5kbGVyCi0gICAgdm9pZCBlbmFibGUoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2
b2lkIGRpc2FibGUoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2b2lkIGdjKEVycm9yU3Ry
aW5nJikgZmluYWw7Ci0gICAgdm9pZCBzbmFwc2hvdChFcnJvclN0cmluZyYsIGRvdWJsZSogdGlt
ZXN0YW1wLCBTdHJpbmcqIHNuYXBzaG90RGF0YSkgZmluYWw7Ci0gICAgdm9pZCBzdGFydFRyYWNr
aW5nKEVycm9yU3RyaW5nJikgZmluYWw7Ci0gICAgdm9pZCBzdG9wVHJhY2tpbmcoRXJyb3JTdHJp
bmcmKSBmaW5hbDsKLSAgICB2b2lkIGdldFByZXZpZXcoRXJyb3JTdHJpbmcmLCBpbnQgaGVhcE9i
amVjdElkLCBPcHRpb25hbDxTdHJpbmc+JiByZXN1bHRTdHJpbmcsIFJlZlB0cjxQcm90b2NvbDo6
RGVidWdnZXI6OkZ1bmN0aW9uRGV0YWlscz4mLCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6Ok9i
amVjdFByZXZpZXc+JikgZmluYWw7Ci0gICAgdm9pZCBnZXRSZW1vdGVPYmplY3QoRXJyb3JTdHJp
bmcmLCBpbnQgaGVhcE9iamVjdElkLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsT2JqZWN0R3JvdXAs
IFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0KSBmaW5hbDsK
KyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBlbmFibGUoKSBvdmVycmlkZTsKKyAg
ICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBkaXNhYmxlKCkgb3ZlcnJpZGU7CisgICAg
UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZ2MoKSBmaW5hbDsKKyAgICBQcm90b2NvbDo6
RXJyb3JTdHJpbmdPcjxzdGQ6OnR1cGxlPGRvdWJsZSwgUHJvdG9jb2w6OkhlYXA6OkhlYXBTbmFw
c2hvdERhdGE+PiBzbmFwc2hvdCgpIGZpbmFsOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09y
PHZvaWQ+IHN0YXJ0VHJhY2tpbmcoKSBmaW5hbDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdP
cjx2b2lkPiBzdG9wVHJhY2tpbmcoKSBmaW5hbDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdP
cjxzdGQ6OnR1cGxlPFN0cmluZywgUmVmUHRyPFByb3RvY29sOjpEZWJ1Z2dlcjo6RnVuY3Rpb25E
ZXRhaWxzPiwgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpPYmplY3RQcmV2aWV3Pj4+IGdldFBy
ZXZpZXcoaW50IGhlYXBPYmplY3RJZCkgZmluYWw7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5n
T3I8UmVmPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+PiBnZXRSZW1vdGVPYmplY3Qo
aW50IGhlYXBPYmplY3RJZCwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCkgZmluYWw7CiAKICAg
ICAvLyBKU0M6OkhlYXBPYnNlcnZlcgogICAgIHZvaWQgd2lsbEdhcmJhZ2VDb2xsZWN0KCkgZmlu
YWw7CkBAIC03Myw3ICs3Miw3IEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0
Y2hHYXJiYWdlQ29sbGVjdGVkRXZlbnQoUHJvdG9jb2w6OkhlYXA6OkdhcmJhZ2VDb2xsZWN0aW9u
OjpUeXBlLCBTZWNvbmRzIHN0YXJ0VGltZSwgU2Vjb25kcyBlbmRUaW1lKTsKIAogcHJpdmF0ZToK
LSAgICBPcHRpb25hbDxKU0M6OkhlYXBTbmFwc2hvdE5vZGU+IG5vZGVGb3JIZWFwT2JqZWN0SWRl
bnRpZmllcihFcnJvclN0cmluZyYsIHVuc2lnbmVkIGhlYXBPYmplY3RJZGVudGlmaWVyKTsKKyAg
ICBPcHRpb25hbDxKU0M6OkhlYXBTbmFwc2hvdE5vZGU+IG5vZGVGb3JIZWFwT2JqZWN0SWRlbnRp
ZmllcihQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCB1bnNpZ25lZCBoZWFwT2JqZWN0SWRlbnRpZmll
cik7CiAKICAgICBJbmplY3RlZFNjcmlwdE1hbmFnZXImIG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2Vy
OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxIZWFwRnJvbnRlbmREaXNwYXRjaGVyPiBtX2Zyb250ZW5k
RGlzcGF0Y2hlcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
YWdlbnRzL0luc3BlY3RvclJ1bnRpbWVBZ2VudC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JSdW50aW1lQWdlbnQuY3BwCmluZGV4IDlhYjFhZjc0
ZDQzMzYzNzFmNjQ5MjliZjYwNjVhNDJjZTFiOTlmODQuLjA1MWM5ZjMzNjgyOGJkZTI5OTQwMmQz
Y2E2OTIxZTZlOTIyOTM4MGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3IvYWdlbnRzL0luc3BlY3RvclJ1bnRpbWVBZ2VudC5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUnVudGltZUFnZW50LmNwcApAQCAt
NDksMTggKzQ5LDYgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKIHVzaW5nIG5hbWVzcGFjZSBK
U0M7CiAKLXN0YXRpYyBib29sIGFzQm9vbChjb25zdCBib29sKiBiKQotewotICAgIHJldHVybiBi
ICYmICpiOwotfQotCi1zdGF0aWMgaW50IGFzSW50KGNvbnN0IGludCogaSkKLXsKLSAgICBpZiAo
aSkKLSAgICAgICAgcmV0dXJuICppOwotICAgIHJldHVybiAwOwotfQotCiBJbnNwZWN0b3JSdW50
aW1lQWdlbnQ6Okluc3BlY3RvclJ1bnRpbWVBZ2VudChBZ2VudENvbnRleHQmIGNvbnRleHQpCiAg
ICAgOiBJbnNwZWN0b3JBZ2VudEJhc2UoIlJ1bnRpbWUiX3MpCiAgICAgLCBtX2luamVjdGVkU2Ny
aXB0TWFuYWdlcihjb250ZXh0LmluamVjdGVkU2NyaXB0TWFuYWdlcikKQEAgLTgxLDI1ICs2OSw0
NiBAQCBzdGF0aWMgUmVmPFByb3RvY29sOjpSdW50aW1lOjpFcnJvclJhbmdlPiBidWlsZEVycm9y
UmFuZ2VPYmplY3QoY29uc3QgSlNUb2tlbkxvYwogICAgICAgICAucmVsZWFzZSgpOwogfQogCi12
b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6cGFyc2UoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJp
bmcmIGV4cHJlc3Npb24sIFByb3RvY29sOjpSdW50aW1lOjpTeW50YXhFcnJvclR5cGUqIHJlc3Vs
dCwgT3B0aW9uYWw8U3RyaW5nPiYgbWVzc2FnZSwgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpF
cnJvclJhbmdlPiYgcmFuZ2UpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0
b3JSdW50aW1lQWdlbnQ6OmVuYWJsZSgpCit7CisgICAgbV9lbmFibGVkID0gdHJ1ZTsKKworICAg
IHJldHVybiB7IH07Cit9CisKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3Rv
clJ1bnRpbWVBZ2VudDo6ZGlzYWJsZSgpCit7CisgICAgbV9lbmFibGVkID0gZmFsc2U7CisKKyAg
ICByZXR1cm4geyB9OworfQorCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxzdGQ6OnR1cGxlPFBy
b3RvY29sOjpSdW50aW1lOjpTeW50YXhFcnJvclR5cGUsIFN0cmluZyAvKiBtZXNzYWdlICovLCBS
ZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OkVycm9yUmFuZ2U+Pj4gSW5zcGVjdG9yUnVudGltZUFn
ZW50OjpwYXJzZShjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24pCiB7CiAgICAgSlNMb2NrSG9sZGVy
IGxvY2sobV92bSk7CiAKICAgICBQYXJzZXJFcnJvciBlcnJvcjsKICAgICBjaGVja1N5bnRheCht
X3ZtLCBKU0M6Om1ha2VTb3VyY2UoZXhwcmVzc2lvbiwgeyB9KSwgZXJyb3IpOwogCisgICAgT3B0
aW9uYWw8UHJvdG9jb2w6OlJ1bnRpbWU6OlN5bnRheEVycm9yVHlwZT4gcmVzdWx0OworICAgIFN0
cmluZyBtZXNzYWdlOworICAgIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6RXJyb3JSYW5nZT4g
cmFuZ2U7CisKICAgICBzd2l0Y2ggKGVycm9yLnN5bnRheEVycm9yVHlwZSgpKSB7CiAgICAgY2Fz
ZSBQYXJzZXJFcnJvcjo6U3ludGF4RXJyb3JOb25lOgotICAgICAgICAqcmVzdWx0ID0gUHJvdG9j
b2w6OlJ1bnRpbWU6OlN5bnRheEVycm9yVHlwZTo6Tm9uZTsKKyAgICAgICAgcmVzdWx0ID0gUHJv
dG9jb2w6OlJ1bnRpbWU6OlN5bnRheEVycm9yVHlwZTo6Tm9uZTsKICAgICAgICAgYnJlYWs7CisK
ICAgICBjYXNlIFBhcnNlckVycm9yOjpTeW50YXhFcnJvcklycmVjb3ZlcmFibGU6Ci0gICAgICAg
ICpyZXN1bHQgPSBQcm90b2NvbDo6UnVudGltZTo6U3ludGF4RXJyb3JUeXBlOjpJcnJlY292ZXJh
YmxlOworICAgICAgICByZXN1bHQgPSBQcm90b2NvbDo6UnVudGltZTo6U3ludGF4RXJyb3JUeXBl
OjpJcnJlY292ZXJhYmxlOwogICAgICAgICBicmVhazsKKwogICAgIGNhc2UgUGFyc2VyRXJyb3I6
OlN5bnRheEVycm9yVW50ZXJtaW5hdGVkTGl0ZXJhbDoKLSAgICAgICAgKnJlc3VsdCA9IFByb3Rv
Y29sOjpSdW50aW1lOjpTeW50YXhFcnJvclR5cGU6OlVudGVybWluYXRlZExpdGVyYWw7CisgICAg
ICAgIHJlc3VsdCA9IFByb3RvY29sOjpSdW50aW1lOjpTeW50YXhFcnJvclR5cGU6OlVudGVybWlu
YXRlZExpdGVyYWw7CiAgICAgICAgIGJyZWFrOworCiAgICAgY2FzZSBQYXJzZXJFcnJvcjo6U3lu
dGF4RXJyb3JSZWNvdmVyYWJsZToKLSAgICAgICAgKnJlc3VsdCA9IFByb3RvY29sOjpSdW50aW1l
OjpTeW50YXhFcnJvclR5cGU6OlJlY292ZXJhYmxlOworICAgICAgICByZXN1bHQgPSBQcm90b2Nv
bDo6UnVudGltZTo6U3ludGF4RXJyb3JUeXBlOjpSZWNvdmVyYWJsZTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQogCkBAIC0xMDcsMjkgKzExNiw0MiBAQCB2b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2Vu
dDo6cGFyc2UoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIFByb3RvYwog
ICAgICAgICBtZXNzYWdlID0gZXJyb3IubWVzc2FnZSgpOwogICAgICAgICByYW5nZSA9IGJ1aWxk
RXJyb3JSYW5nZU9iamVjdChlcnJvci50b2tlbigpLm1fbG9jYXRpb24pOwogICAgIH0KKworICAg
IHJldHVybiB7IHsgKnJlc3VsdCwgbWVzc2FnZSwgV1RGTW92ZShyYW5nZSkgfSB9OwogfQogCi12
b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6ZXZhbHVhdGUoRXJyb3JTdHJpbmcmIGVycm9yU3Ry
aW5nLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIGNvbnN0IFN0cmluZyogb2JqZWN0R3JvdXAs
IGNvbnN0IGJvb2wqIGluY2x1ZGVDb21tYW5kTGluZUFQSSwgY29uc3QgYm9vbCogZG9Ob3RQYXVz
ZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xlLCBjb25zdCBpbnQqIGV4ZWN1dGlvbkNvbnRleHRJ
ZCwgY29uc3QgYm9vbCogcmV0dXJuQnlWYWx1ZSwgY29uc3QgYm9vbCogZ2VuZXJhdGVQcmV2aWV3
LCBjb25zdCBib29sKiBzYXZlUmVzdWx0LCBjb25zdCBib29sKiAvKiBlbXVsYXRlVXNlckdlc3R1
cmUgKi8sIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0LCBP
cHRpb25hbDxib29sPiYgd2FzVGhyb3duLCBPcHRpb25hbDxpbnQ+JiBzYXZlZFJlc3VsdEluZGV4
KQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8c3RkOjp0dXBsZTxSZWY8UHJvdG9jb2w6OlJ1bnRp
bWU6OlJlbW90ZU9iamVjdD4sIE9wdGlvbmFsPGJvb2w+IC8qIHdhc1Rocm93biAqLywgT3B0aW9u
YWw8aW50PiAvKiBzYXZlZFJlc3VsdEluZGV4ICovPj4gSW5zcGVjdG9yUnVudGltZUFnZW50Ojpl
dmFsdWF0ZShjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIGNvbnN0IFN0cmluZyYgb2JqZWN0R3Jv
dXAsIE9wdGlvbmFsPGJvb2w+JiYgaW5jbHVkZUNvbW1hbmRMaW5lQVBJLCBPcHRpb25hbDxib29s
PiYmIGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29sZSwgT3B0aW9uYWw8UHJvdG9j
b2w6OlJ1bnRpbWU6OkV4ZWN1dGlvbkNvbnRleHRJZD4mJiBleGVjdXRpb25Db250ZXh0SWQsIE9w
dGlvbmFsPGJvb2w+JiYgcmV0dXJuQnlWYWx1ZSwgT3B0aW9uYWw8Ym9vbD4mJiBnZW5lcmF0ZVBy
ZXZpZXcsIE9wdGlvbmFsPGJvb2w+JiYgc2F2ZVJlc3VsdCwgT3B0aW9uYWw8Ym9vbD4mJiAvKiBl
bXVsYXRlVXNlckdlc3R1cmUgKi8pCiB7Ci0gICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3Jp
cHQgPSBpbmplY3RlZFNjcmlwdEZvckV2YWwoZXJyb3JTdHJpbmcsIGV4ZWN1dGlvbkNvbnRleHRJ
ZCk7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCisgICAgSW5qZWN0
ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHQgPSBpbmplY3RlZFNjcmlwdEZvckV2YWwoZXJyb3JTdHJp
bmcsIFdURk1vdmUoZXhlY3V0aW9uQ29udGV4dElkKSk7CiAgICAgaWYgKGluamVjdGVkU2NyaXB0
Lmhhc05vVmFsdWUoKSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoZXJyb3JTdHJpbmcpOworCisgICAgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1v
dGVPYmplY3Q+IHJlc3VsdDsKKyAgICBPcHRpb25hbDxib29sPiB3YXNUaHJvd247CisgICAgT3B0
aW9uYWw8aW50PiBzYXZlZFJlc3VsdEluZGV4OwogCiAgICAgSlNDOjpEZWJ1Z2dlcjo6VGVtcG9y
YXJpbHlEaXNhYmxlRXhjZXB0aW9uQnJlYWtwb2ludHMgdGVtcG9yYXJpbHlEaXNhYmxlRXhjZXB0
aW9uQnJlYWtwb2ludHMobV9kZWJ1Z2dlcik7CiAKLSAgICBib29sIHBhdXNlQW5kTXV0ZSA9IGFz
Qm9vbChkb05vdFBhdXNlT25FeGNlcHRpb25zQW5kTXV0ZUNvbnNvbGUpOworICAgIGJvb2wgcGF1
c2VBbmRNdXRlID0gZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xlLnZhbHVlT3Io
ZmFsc2UpOwogICAgIGlmIChwYXVzZUFuZE11dGUpIHsKICAgICAgICAgdGVtcG9yYXJpbHlEaXNh
YmxlRXhjZXB0aW9uQnJlYWtwb2ludHMucmVwbGFjZSgpOwogICAgICAgICBtdXRlQ29uc29sZSgp
OwogICAgIH0KIAotICAgIGluamVjdGVkU2NyaXB0LmV2YWx1YXRlKGVycm9yU3RyaW5nLCBleHBy
ZXNzaW9uLCBvYmplY3RHcm91cCA/ICpvYmplY3RHcm91cCA6IFN0cmluZygpLCBhc0Jvb2woaW5j
bHVkZUNvbW1hbmRMaW5lQVBJKSwgYXNCb29sKHJldHVybkJ5VmFsdWUpLCBhc0Jvb2woZ2VuZXJh
dGVQcmV2aWV3KSwgYXNCb29sKHNhdmVSZXN1bHQpLCByZXN1bHQsIHdhc1Rocm93biwgc2F2ZWRS
ZXN1bHRJbmRleCk7CisgICAgaW5qZWN0ZWRTY3JpcHQuZXZhbHVhdGUoZXJyb3JTdHJpbmcsIGV4
cHJlc3Npb24sIG9iamVjdEdyb3VwLCBpbmNsdWRlQ29tbWFuZExpbmVBUEkudmFsdWVPcihmYWxz
ZSksIHJldHVybkJ5VmFsdWUudmFsdWVPcihmYWxzZSksIGdlbmVyYXRlUHJldmlldy52YWx1ZU9y
KGZhbHNlKSwgc2F2ZVJlc3VsdC52YWx1ZU9yKGZhbHNlKSwgcmVzdWx0LCB3YXNUaHJvd24sIHNh
dmVkUmVzdWx0SW5kZXgpOwogCiAgICAgaWYgKHBhdXNlQW5kTXV0ZSkKICAgICAgICAgdW5tdXRl
Q29uc29sZSgpOworCisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBl
Y3RlZChlcnJvclN0cmluZyk7CisKKyAgICByZXR1cm4geyB7cmVzdWx0LnJlbGVhc2VOb25OdWxs
KCksIFdURk1vdmUod2FzVGhyb3duKSwgV1RGTW92ZShzYXZlZFJlc3VsdEluZGV4KSB9IH07CiB9
CiAKLXZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50Ojphd2FpdFByb21pc2UoY29uc3QgU3RyaW5n
JiBwcm9taXNlT2JqZWN0SWQsIGNvbnN0IGJvb2wqIHJldHVybkJ5VmFsdWUsIGNvbnN0IGJvb2wq
IGdlbmVyYXRlUHJldmlldywgY29uc3QgYm9vbCogc2F2ZVJlc3VsdCwgUmVmPEF3YWl0UHJvbWlz
ZUNhbGxiYWNrPiYmIGNhbGxiYWNrKQordm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmF3YWl0
UHJvbWlzZShjb25zdCBQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0SWQmIHByb21pc2VP
YmplY3RJZCwgT3B0aW9uYWw8Ym9vbD4mJiByZXR1cm5CeVZhbHVlLCBPcHRpb25hbDxib29sPiYm
IGdlbmVyYXRlUHJldmlldywgT3B0aW9uYWw8Ym9vbD4mJiBzYXZlUmVzdWx0LCBSZWY8QXdhaXRQ
cm9taXNlQ2FsbGJhY2s+JiYgY2FsbGJhY2spCiB7CiAgICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0
ZWRTY3JpcHQgPSBtX2luamVjdGVkU2NyaXB0TWFuYWdlci5pbmplY3RlZFNjcmlwdEZvck9iamVj
dElkKHByb21pc2VPYmplY3RJZCk7CiAgICAgaWYgKGluamVjdGVkU2NyaXB0Lmhhc05vVmFsdWUo
KSkgewpAQCAtMTM3LDIxOSArMTU5LDI0NCBAQCB2b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6
YXdhaXRQcm9taXNlKGNvbnN0IFN0cmluZyYgcHJvbWlzZU9iamVjdElkLCBjb25zdCBibwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaW5qZWN0ZWRTY3JpcHQuYXdhaXRQcm9taXNlKHBy
b21pc2VPYmplY3RJZCwgYXNCb29sKHJldHVybkJ5VmFsdWUpLCBhc0Jvb2woZ2VuZXJhdGVQcmV2
aWV3KSwgYXNCb29sKHNhdmVSZXN1bHQpLCBbY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0g
KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1v
dGVPYmplY3Q+JiYgcmVzdWx0LCBPcHRpb25hbDxib29sPiYgd2FzVGhyb3duLCBPcHRpb25hbDxp
bnQ+JiBzYXZlZFJlc3VsdEluZGV4KSB7Ci0gICAgICAgIGlmICghZXJyb3JTdHJpbmcuaXNFbXB0
eSgpKQorICAgIGluamVjdGVkU2NyaXB0LmF3YWl0UHJvbWlzZShwcm9taXNlT2JqZWN0SWQsIHJl
dHVybkJ5VmFsdWUudmFsdWVPcihmYWxzZSksIGdlbmVyYXRlUHJldmlldy52YWx1ZU9yKGZhbHNl
KSwgc2F2ZVJlc3VsdC52YWx1ZU9yKGZhbHNlKSwgW2NhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFj
ayldIChQcm90b2NvbDo6RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBSZWZQdHI8UHJvdG9jb2w6
OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mJiByZXN1bHQsIE9wdGlvbmFsPGJvb2w+JiYgd2FzVGhy
b3duLCBPcHRpb25hbDxpbnQ+JiYgc2F2ZWRSZXN1bHRJbmRleCkgeworICAgICAgICBpZiAoIXJl
c3VsdCkKICAgICAgICAgICAgIGNhbGxiYWNrLT5zZW5kRmFpbHVyZShlcnJvclN0cmluZyk7CiAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNhbGxiYWNrLT5zZW5kU3VjY2VzcyhXVEZNb3ZlKHJl
c3VsdCksIHdhc1Rocm93biwgc2F2ZWRSZXN1bHRJbmRleCk7CisgICAgICAgICAgICBjYWxsYmFj
ay0+c2VuZFN1Y2Nlc3MocmVzdWx0LnJlbGVhc2VOb25OdWxsKCksIFdURk1vdmUod2FzVGhyb3du
KSwgV1RGTW92ZShzYXZlZFJlc3VsdEluZGV4KSk7CiAgICAgfSk7CiB9CiAKLXZvaWQgSW5zcGVj
dG9yUnVudGltZUFnZW50OjpjYWxsRnVuY3Rpb25PbihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcs
IGNvbnN0IFN0cmluZyYgb2JqZWN0SWQsIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgY29uc3Qg
SlNPTjo6QXJyYXkqIG9wdGlvbmFsQXJndW1lbnRzLCBjb25zdCBib29sKiBkb05vdFBhdXNlT25F
eGNlcHRpb25zQW5kTXV0ZUNvbnNvbGUsIGNvbnN0IGJvb2wqIHJldHVybkJ5VmFsdWUsIGNvbnN0
IGJvb2wqIGdlbmVyYXRlUHJldmlldywgY29uc3QgYm9vbCogLyogZW11bGF0ZVVzZXJHZXN0dXJl
ICovLCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3VsdCwgT3B0
aW9uYWw8Ym9vbD4mIHdhc1Rocm93bikKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHN0ZDo6dHVw
bGU8UmVmPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+LCBPcHRpb25hbDxib29sPiAv
KiB3YXNUaHJvd24gKi8+PiBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmNhbGxGdW5jdGlvbk9uKGNv
bnN0IFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3RJZCYgb2JqZWN0SWQsIGNvbnN0IFN0
cmluZyYgZnVuY3Rpb25EZWNsYXJhdGlvbiwgUmVmUHRyPEpTT046OkFycmF5PiYmIGFyZ3VtZW50
cywgT3B0aW9uYWw8Ym9vbD4mJiBkb05vdFBhdXNlT25FeGNlcHRpb25zQW5kTXV0ZUNvbnNvbGUs
IE9wdGlvbmFsPGJvb2w+JiYgcmV0dXJuQnlWYWx1ZSwgT3B0aW9uYWw8Ym9vbD4mJiBnZW5lcmF0
ZVByZXZpZXcsIE9wdGlvbmFsPGJvb2w+JiYgLyogZW11bGF0ZVVzZXJHZXN0dXJlICovKQogewot
ICAgIEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0ID0gbV9pbmplY3RlZFNjcmlwdE1hbmFn
ZXIuaW5qZWN0ZWRTY3JpcHRGb3JPYmplY3RJZChvYmplY3RJZCk7Ci0gICAgaWYgKGluamVjdGVk
U2NyaXB0Lmhhc05vVmFsdWUoKSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIGlu
amVjdGVkIHNjcmlwdCBmb3IgZ2l2ZW4gb2JqZWN0SWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOwogCi0gICAgU3RyaW5n
IGFyZ3VtZW50czsKLSAgICBpZiAob3B0aW9uYWxBcmd1bWVudHMpCi0gICAgICAgIGFyZ3VtZW50
cyA9IG9wdGlvbmFsQXJndW1lbnRzLT50b0pTT05TdHJpbmcoKTsKKyAgICBJbmplY3RlZFNjcmlw
dCBpbmplY3RlZFNjcmlwdCA9IG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmluamVjdGVkU2NyaXB0
Rm9yT2JqZWN0SWQob2JqZWN0SWQpOworICAgIGlmIChpbmplY3RlZFNjcmlwdC5oYXNOb1ZhbHVl
KCkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTWlzc2luZyBpbmplY3RlZCBzY3Jp
cHQgZm9yIGdpdmVuIG9iamVjdElkIl9zKTsKKworICAgIFJlZlB0cjxQcm90b2NvbDo6UnVudGlt
ZTo6UmVtb3RlT2JqZWN0PiByZXN1bHQ7CisgICAgT3B0aW9uYWw8Ym9vbD4gd2FzVGhyb3duOwog
CiAgICAgSlNDOjpEZWJ1Z2dlcjo6VGVtcG9yYXJpbHlEaXNhYmxlRXhjZXB0aW9uQnJlYWtwb2lu
dHMgdGVtcG9yYXJpbHlEaXNhYmxlRXhjZXB0aW9uQnJlYWtwb2ludHMobV9kZWJ1Z2dlcik7CiAK
LSAgICBib29sIHBhdXNlQW5kTXV0ZSA9IGFzQm9vbChkb05vdFBhdXNlT25FeGNlcHRpb25zQW5k
TXV0ZUNvbnNvbGUpOworICAgIGJvb2wgcGF1c2VBbmRNdXRlID0gZG9Ob3RQYXVzZU9uRXhjZXB0
aW9uc0FuZE11dGVDb25zb2xlLnZhbHVlT3IoZmFsc2UpOwogICAgIGlmIChwYXVzZUFuZE11dGUp
IHsKICAgICAgICAgdGVtcG9yYXJpbHlEaXNhYmxlRXhjZXB0aW9uQnJlYWtwb2ludHMucmVwbGFj
ZSgpOwogICAgICAgICBtdXRlQ29uc29sZSgpOwogICAgIH0KIAotICAgIGluamVjdGVkU2NyaXB0
LmNhbGxGdW5jdGlvbk9uKGVycm9yU3RyaW5nLCBvYmplY3RJZCwgZXhwcmVzc2lvbiwgYXJndW1l
bnRzLCBhc0Jvb2wocmV0dXJuQnlWYWx1ZSksIGFzQm9vbChnZW5lcmF0ZVByZXZpZXcpLCByZXN1
bHQsIHdhc1Rocm93bik7CisgICAgaW5qZWN0ZWRTY3JpcHQuY2FsbEZ1bmN0aW9uT24oZXJyb3JT
dHJpbmcsIG9iamVjdElkLCBmdW5jdGlvbkRlY2xhcmF0aW9uLCBhcmd1bWVudHMgPyBhcmd1bWVu
dHMtPnRvSlNPTlN0cmluZygpIDogbnVsbFN0cmluZygpLCByZXR1cm5CeVZhbHVlLnZhbHVlT3Io
ZmFsc2UpLCBnZW5lcmF0ZVByZXZpZXcudmFsdWVPcihmYWxzZSksIHJlc3VsdCwgd2FzVGhyb3du
KTsKIAogICAgIGlmIChwYXVzZUFuZE11dGUpCiAgICAgICAgIHVubXV0ZUNvbnNvbGUoKTsKKwor
ICAgIGlmICghcmVzdWx0KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJp
bmcpOworCisgICAgcmV0dXJuIHsgeyByZXN1bHQucmVsZWFzZU5vbk51bGwoKSwgV1RGTW92ZSh3
YXNUaHJvd24pIH0gfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmdldFByZXZp
ZXcoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBSZWZQ
dHI8UHJvdG9jb2w6OlJ1bnRpbWU6Ok9iamVjdFByZXZpZXc+JiBwcmV2aWV3KQorUHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8UmVmPFByb3RvY29sOjpSdW50aW1lOjpPYmplY3RQcmV2aWV3Pj4gSW5z
cGVjdG9yUnVudGltZUFnZW50OjpnZXRQcmV2aWV3KGNvbnN0IFByb3RvY29sOjpSdW50aW1lOjpS
ZW1vdGVPYmplY3RJZCYgb2JqZWN0SWQpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVy
cm9yU3RyaW5nOworCiAgICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHQgPSBtX2luamVj
dGVkU2NyaXB0TWFuYWdlci5pbmplY3RlZFNjcmlwdEZvck9iamVjdElkKG9iamVjdElkKTsKLSAg
ICBpZiAoaW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKSB7Ci0gICAgICAgIGVycm9yU3RyaW5n
ID0gIk1pc3NpbmcgaW5qZWN0ZWQgc2NyaXB0IGZvciBnaXZlbiBvYmplY3RJZCJfczsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoaW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKQor
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk1pc3NpbmcgaW5qZWN0ZWQgc2NyaXB0IGZv
ciBnaXZlbiBvYmplY3RJZCJfcyk7CiAKICAgICBKU0M6OkRlYnVnZ2VyOjpUZW1wb3JhcmlseURp
c2FibGVFeGNlcHRpb25CcmVha3BvaW50cyB0ZW1wb3JhcmlseURpc2FibGVFeGNlcHRpb25CcmVh
a3BvaW50cyhtX2RlYnVnZ2VyKTsKICAgICB0ZW1wb3JhcmlseURpc2FibGVFeGNlcHRpb25CcmVh
a3BvaW50cy5yZXBsYWNlKCk7CiAKKyAgICBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6Ok9iamVj
dFByZXZpZXc+IHByZXZpZXc7CisKICAgICBtdXRlQ29uc29sZSgpOwogCiAgICAgaW5qZWN0ZWRT
Y3JpcHQuZ2V0UHJldmlldyhlcnJvclN0cmluZywgb2JqZWN0SWQsIHByZXZpZXcpOwogCiAgICAg
dW5tdXRlQ29uc29sZSgpOworCisgICAgaWYgKCFwcmV2aWV3KQorICAgICAgICByZXR1cm4gbWFr
ZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOworCisgICAgcmV0dXJuIHByZXZpZXcucmVsZWFzZU5v
bk51bGwoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmdldFByb3BlcnRpZXMo
RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBjb25zdCBi
b29sKiBvd25Qcm9wZXJ0aWVzLCBjb25zdCBpbnQqIGZldGNoU3RhcnQsIGNvbnN0IGludCogZmV0
Y2hDb3VudCwgY29uc3QgYm9vbCogZ2VuZXJhdGVQcmV2aWV3LCBSZWZQdHI8SlNPTjo6QXJyYXlP
ZjxQcm90b2NvbDo6UnVudGltZTo6UHJvcGVydHlEZXNjcmlwdG9yPj4mIHByb3BlcnRpZXMsIFJl
ZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpJbnRlcm5hbFByb3BlcnR5RGVz
Y3JpcHRvcj4+JiBpbnRlcm5hbFByb3BlcnRpZXMpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxz
dGQ6OnR1cGxlPFJlZjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpQcm9wZXJ0eURl
c2NyaXB0b3I+PiwgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OkludGVy
bmFsUHJvcGVydHlEZXNjcmlwdG9yPj4+PiBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmdldFByb3Bl
cnRpZXMoY29uc3QgUHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdElkJiBvYmplY3RJZCwg
T3B0aW9uYWw8Ym9vbD4mJiBvd25Qcm9wZXJ0aWVzLCBPcHRpb25hbDxpbnQ+JiYgZmV0Y2hTdGFy
dCwgT3B0aW9uYWw8aW50PiYmIGZldGNoQ291bnQsIE9wdGlvbmFsPGJvb2w+JiYgZ2VuZXJhdGVQ
cmV2aWV3KQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAg
IEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0ID0gbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIu
aW5qZWN0ZWRTY3JpcHRGb3JPYmplY3RJZChvYmplY3RJZCk7Ci0gICAgaWYgKGluamVjdGVkU2Ny
aXB0Lmhhc05vVmFsdWUoKSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIGluamVj
dGVkIHNjcmlwdCBmb3IgZ2l2ZW4gb2JqZWN0SWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
CisgICAgaWYgKGluamVjdGVkU2NyaXB0Lmhhc05vVmFsdWUoKSkKKyAgICAgICAgcmV0dXJuIG1h
a2VVbmV4cGVjdGVkKCJNaXNzaW5nIGluamVjdGVkIHNjcmlwdCBmb3IgZ2l2ZW4gb2JqZWN0SWQi
X3MpOwogCi0gICAgaW50IHN0YXJ0ID0gYXNJbnQoZmV0Y2hTdGFydCk7Ci0gICAgaWYgKHN0YXJ0
IDwgMCkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJmZXRjaFN0YXJ0IGNhbm5vdCBiZSBuZWdh
dGl2ZSJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpbnQgc3RhcnQgPSBmZXRjaFN0
YXJ0LnZhbHVlT3IoMCk7CisgICAgaWYgKHN0YXJ0IDwgMCkKKyAgICAgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKCJmZXRjaFN0YXJ0IGNhbm5vdCBiZSBuZWdhdGl2ZSJfcyk7CiAKLSAgICBpbnQg
Y291bnQgPSBhc0ludChmZXRjaENvdW50KTsKLSAgICBpZiAoY291bnQgPCAwKSB7Ci0gICAgICAg
IGVycm9yU3RyaW5nID0gImZldGNoQ291bnQgY2Fubm90IGJlIG5lZ2F0aXZlIl9zOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQorICAgIGludCBjb3VudCA9IGZldGNoQ291bnQudmFsdWVPcigwKTsK
KyAgICBpZiAoY291bnQgPCAwKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoImZldGNo
Q291bnQgY2Fubm90IGJlIG5lZ2F0aXZlIl9zKTsKKworICAgIFJlZlB0cjxKU09OOjpBcnJheU9m
PFByb3RvY29sOjpSdW50aW1lOjpQcm9wZXJ0eURlc2NyaXB0b3I+PiBwcm9wZXJ0aWVzOworICAg
IFJlZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpJbnRlcm5hbFByb3BlcnR5
RGVzY3JpcHRvcj4+IGludGVybmFsUHJvcGVydGllczsKIAogICAgIEpTQzo6RGVidWdnZXI6OlRl
bXBvcmFyaWx5RGlzYWJsZUV4Y2VwdGlvbkJyZWFrcG9pbnRzIHRlbXBvcmFyaWx5RGlzYWJsZUV4
Y2VwdGlvbkJyZWFrcG9pbnRzKG1fZGVidWdnZXIpOwogICAgIHRlbXBvcmFyaWx5RGlzYWJsZUV4
Y2VwdGlvbkJyZWFrcG9pbnRzLnJlcGxhY2UoKTsKIAogICAgIG11dGVDb25zb2xlKCk7CiAKLSAg
ICBpbmplY3RlZFNjcmlwdC5nZXRQcm9wZXJ0aWVzKGVycm9yU3RyaW5nLCBvYmplY3RJZCwgYXNC
b29sKG93blByb3BlcnRpZXMpLCBzdGFydCwgY291bnQsIGFzQm9vbChnZW5lcmF0ZVByZXZpZXcp
LCBwcm9wZXJ0aWVzKTsKKyAgICBpbmplY3RlZFNjcmlwdC5nZXRQcm9wZXJ0aWVzKGVycm9yU3Ry
aW5nLCBvYmplY3RJZCwgb3duUHJvcGVydGllcy52YWx1ZU9yKGZhbHNlKSwgc3RhcnQsIGNvdW50
LCBnZW5lcmF0ZVByZXZpZXcudmFsdWVPcihmYWxzZSksIHByb3BlcnRpZXMpOwogCiAgICAgLy8g
T25seSBpbmNsdWRlIGludGVybmFsIHByb3BlcnRpZXMgZm9yIHRoZSBmaXJzdCBmZXRjaC4KICAg
ICBpZiAoIXN0YXJ0KQotICAgICAgICBpbmplY3RlZFNjcmlwdC5nZXRJbnRlcm5hbFByb3BlcnRp
ZXMoZXJyb3JTdHJpbmcsIG9iamVjdElkLCBhc0Jvb2woZ2VuZXJhdGVQcmV2aWV3KSwgaW50ZXJu
YWxQcm9wZXJ0aWVzKTsKKyAgICAgICAgaW5qZWN0ZWRTY3JpcHQuZ2V0SW50ZXJuYWxQcm9wZXJ0
aWVzKGVycm9yU3RyaW5nLCBvYmplY3RJZCwgZ2VuZXJhdGVQcmV2aWV3LnZhbHVlT3IoZmFsc2Up
LCBpbnRlcm5hbFByb3BlcnRpZXMpOwogCiAgICAgdW5tdXRlQ29uc29sZSgpOworCisgICAgaWYg
KCFwcm9wZXJ0aWVzKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcp
OworCisgICAgcmV0dXJuIHsgeyBwcm9wZXJ0aWVzLnJlbGVhc2VOb25OdWxsKCksIFdURk1vdmUo
aW50ZXJuYWxQcm9wZXJ0aWVzKSB9IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50
OjpnZXREaXNwbGF5YWJsZVByb3BlcnRpZXMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25z
dCBTdHJpbmcmIG9iamVjdElkLCBjb25zdCBpbnQqIGZldGNoU3RhcnQsIGNvbnN0IGludCogZmV0
Y2hDb3VudCwgY29uc3QgYm9vbCogZ2VuZXJhdGVQcmV2aWV3LCBSZWZQdHI8SlNPTjo6QXJyYXlP
ZjxQcm90b2NvbDo6UnVudGltZTo6UHJvcGVydHlEZXNjcmlwdG9yPj4mIHByb3BlcnRpZXMsIFJl
ZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpJbnRlcm5hbFByb3BlcnR5RGVz
Y3JpcHRvcj4+JiBpbnRlcm5hbFByb3BlcnRpZXMpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxz
dGQ6OnR1cGxlPFJlZjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpQcm9wZXJ0eURl
c2NyaXB0b3I+PiwgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OkludGVy
bmFsUHJvcGVydHlEZXNjcmlwdG9yPj4+PiBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmdldERpc3Bs
YXlhYmxlUHJvcGVydGllcyhjb25zdCBQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0SWQm
IG9iamVjdElkLCBPcHRpb25hbDxpbnQ+JiYgZmV0Y2hTdGFydCwgT3B0aW9uYWw8aW50PiYmIGZl
dGNoQ291bnQsIE9wdGlvbmFsPGJvb2w+JiYgZ2VuZXJhdGVQcmV2aWV3KQogeworICAgIFByb3Rv
Y29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIEluamVjdGVkU2NyaXB0IGluamVj
dGVkU2NyaXB0ID0gbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIuaW5qZWN0ZWRTY3JpcHRGb3JPYmpl
Y3RJZChvYmplY3RJZCk7Ci0gICAgaWYgKGluamVjdGVkU2NyaXB0Lmhhc05vVmFsdWUoKSkgewot
ICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIGluamVjdGVkIHNjcmlwdCBmb3IgZ2l2ZW4g
b2JqZWN0SWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKGluamVjdGVkU2Ny
aXB0Lmhhc05vVmFsdWUoKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJNaXNzaW5n
IGluamVjdGVkIHNjcmlwdCBmb3IgZ2l2ZW4gb2JqZWN0SWQiX3MpOwogCi0gICAgaW50IHN0YXJ0
ID0gYXNJbnQoZmV0Y2hTdGFydCk7Ci0gICAgaWYgKHN0YXJ0IDwgMCkgewotICAgICAgICBlcnJv
clN0cmluZyA9ICJmZXRjaFN0YXJ0IGNhbm5vdCBiZSBuZWdhdGl2ZSJfczsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KKyAgICBpbnQgc3RhcnQgPSBmZXRjaFN0YXJ0LnZhbHVlT3IoMCk7CisgICAg
aWYgKHN0YXJ0IDwgMCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJmZXRjaFN0YXJ0
IGNhbm5vdCBiZSBuZWdhdGl2ZSJfcyk7CiAKLSAgICBpbnQgY291bnQgPSBhc0ludChmZXRjaENv
dW50KTsKLSAgICBpZiAoY291bnQgPCAwKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gImZldGNo
Q291bnQgY2Fubm90IGJlIG5lZ2F0aXZlIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAg
IGludCBjb3VudCA9IGZldGNoQ291bnQudmFsdWVPcigwKTsKKyAgICBpZiAoY291bnQgPCAwKQor
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoImZldGNoQ291bnQgY2Fubm90IGJlIG5lZ2F0
aXZlIl9zKTsKKworICAgIFJlZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpQ
cm9wZXJ0eURlc2NyaXB0b3I+PiBwcm9wZXJ0aWVzOworICAgIFJlZlB0cjxKU09OOjpBcnJheU9m
PFByb3RvY29sOjpSdW50aW1lOjpJbnRlcm5hbFByb3BlcnR5RGVzY3JpcHRvcj4+IGludGVybmFs
UHJvcGVydGllczsKIAogICAgIEpTQzo6RGVidWdnZXI6OlRlbXBvcmFyaWx5RGlzYWJsZUV4Y2Vw
dGlvbkJyZWFrcG9pbnRzIHRlbXBvcmFyaWx5RGlzYWJsZUV4Y2VwdGlvbkJyZWFrcG9pbnRzKG1f
ZGVidWdnZXIpOwogICAgIHRlbXBvcmFyaWx5RGlzYWJsZUV4Y2VwdGlvbkJyZWFrcG9pbnRzLnJl
cGxhY2UoKTsKIAogICAgIG11dGVDb25zb2xlKCk7CiAKLSAgICBpbmplY3RlZFNjcmlwdC5nZXRE
aXNwbGF5YWJsZVByb3BlcnRpZXMoZXJyb3JTdHJpbmcsIG9iamVjdElkLCBzdGFydCwgY291bnQs
IGFzQm9vbChnZW5lcmF0ZVByZXZpZXcpLCBwcm9wZXJ0aWVzKTsKKyAgICBpbmplY3RlZFNjcmlw
dC5nZXREaXNwbGF5YWJsZVByb3BlcnRpZXMoZXJyb3JTdHJpbmcsIG9iamVjdElkLCBzdGFydCwg
Y291bnQsIGdlbmVyYXRlUHJldmlldy52YWx1ZU9yKGZhbHNlKSwgcHJvcGVydGllcyk7CiAKICAg
ICAvLyBPbmx5IGluY2x1ZGUgaW50ZXJuYWwgcHJvcGVydGllcyBmb3IgdGhlIGZpcnN0IGZldGNo
LgogICAgIGlmICghc3RhcnQpCi0gICAgICAgIGluamVjdGVkU2NyaXB0LmdldEludGVybmFsUHJv
cGVydGllcyhlcnJvclN0cmluZywgb2JqZWN0SWQsIGFzQm9vbChnZW5lcmF0ZVByZXZpZXcpLCBp
bnRlcm5hbFByb3BlcnRpZXMpOworICAgICAgICBpbmplY3RlZFNjcmlwdC5nZXRJbnRlcm5hbFBy
b3BlcnRpZXMoZXJyb3JTdHJpbmcsIG9iamVjdElkLCBnZW5lcmF0ZVByZXZpZXcudmFsdWVPcihm
YWxzZSksIGludGVybmFsUHJvcGVydGllcyk7CiAKICAgICB1bm11dGVDb25zb2xlKCk7CisKKyAg
ICBpZiAoIXByb3BlcnRpZXMpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0
cmluZyk7CisKKyAgICByZXR1cm4geyB7IHByb3BlcnRpZXMucmVsZWFzZU5vbk51bGwoKSwgV1RG
TW92ZShpbnRlcm5hbFByb3BlcnRpZXMpIH0gfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSdW50aW1l
QWdlbnQ6OmdldENvbGxlY3Rpb25FbnRyaWVzKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29u
c3QgU3RyaW5nJiBvYmplY3RJZCwgY29uc3QgU3RyaW5nKiBvYmplY3RHcm91cCwgY29uc3QgaW50
KiBmZXRjaFN0YXJ0LCBjb25zdCBpbnQqIGZldGNoQ291bnQsIFJlZlB0cjxKU09OOjpBcnJheU9m
PFByb3RvY29sOjpSdW50aW1lOjpDb2xsZWN0aW9uRW50cnk+PiYgZW50cmllcykKK1Byb3RvY29s
OjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpDb2xs
ZWN0aW9uRW50cnk+Pj4gSW5zcGVjdG9yUnVudGltZUFnZW50OjpnZXRDb2xsZWN0aW9uRW50cmll
cyhjb25zdCBQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0SWQmIG9iamVjdElkLCBjb25z
dCBTdHJpbmcmIG9iamVjdEdyb3VwLCBPcHRpb25hbDxpbnQ+JiYgZmV0Y2hTdGFydCwgT3B0aW9u
YWw8aW50PiYmIGZldGNoQ291bnQpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9y
U3RyaW5nOworCiAgICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHQgPSBtX2luamVjdGVk
U2NyaXB0TWFuYWdlci5pbmplY3RlZFNjcmlwdEZvck9iamVjdElkKG9iamVjdElkKTsKLSAgICBp
ZiAoaW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0g
Ik1pc3NpbmcgaW5qZWN0ZWQgc2NyaXB0IGZvciBnaXZlbiBvYmplY3RJZCJfczsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KKyAgICBpZiAoaW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKQorICAg
ICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk1pc3NpbmcgaW5qZWN0ZWQgc2NyaXB0IGZvciBn
aXZlbiBvYmplY3RJZCJfcyk7CiAKLSAgICBpbnQgc3RhcnQgPSBhc0ludChmZXRjaFN0YXJ0KTsK
LSAgICBpZiAoc3RhcnQgPCAwKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gImZldGNoU3RhcnQg
Y2Fubm90IGJlIG5lZ2F0aXZlIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGludCBz
dGFydCA9IGZldGNoU3RhcnQudmFsdWVPcigwKTsKKyAgICBpZiAoc3RhcnQgPCAwKQorICAgICAg
ICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoImZldGNoU3RhcnQgY2Fubm90IGJlIG5lZ2F0aXZlIl9z
KTsKIAotICAgIGludCBjb3VudCA9IGFzSW50KGZldGNoQ291bnQpOwotICAgIGlmIChjb3VudCA8
IDApIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiZmV0Y2hDb3VudCBjYW5ub3QgYmUgbmVnYXRp
dmUiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaW50IGNvdW50ID0gZmV0Y2hDb3Vu
dC52YWx1ZU9yKDApOworICAgIGlmIChjb3VudCA8IDApCisgICAgICAgIHJldHVybiBtYWtlVW5l
eHBlY3RlZCgiZmV0Y2hDb3VudCBjYW5ub3QgYmUgbmVnYXRpdmUiX3MpOwogCi0gICAgaW5qZWN0
ZWRTY3JpcHQuZ2V0Q29sbGVjdGlvbkVudHJpZXMoZXJyb3JTdHJpbmcsIG9iamVjdElkLCBvYmpl
Y3RHcm91cCA/ICpvYmplY3RHcm91cCA6IFN0cmluZygpLCBzdGFydCwgY291bnQsIGVudHJpZXMp
OworICAgIFJlZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpDb2xsZWN0aW9u
RW50cnk+PiBlbnRyaWVzOworCisgICAgaW5qZWN0ZWRTY3JpcHQuZ2V0Q29sbGVjdGlvbkVudHJp
ZXMoZXJyb3JTdHJpbmcsIG9iamVjdElkLCBvYmplY3RHcm91cCwgc3RhcnQsIGNvdW50LCBlbnRy
aWVzKTsKKworICAgIGlmICghZW50cmllcykKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVk
KGVycm9yU3RyaW5nKTsKKworICAgIHJldHVybiBlbnRyaWVzLnJlbGVhc2VOb25OdWxsKCk7CiB9
CiAKLXZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50OjpzYXZlUmVzdWx0KEVycm9yU3RyaW5nJiBl
cnJvclN0cmluZywgY29uc3QgSlNPTjo6T2JqZWN0JiBjYWxsQXJndW1lbnQsIGNvbnN0IGludCog
ZXhlY3V0aW9uQ29udGV4dElkLCBPcHRpb25hbDxpbnQ+JiBzYXZlZFJlc3VsdEluZGV4KQorUHJv
dG9jb2w6OkVycm9yU3RyaW5nT3I8T3B0aW9uYWw8aW50PiAvKiBzYXZlUmVzdWx0SW5kZXggKi8+
IEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6c2F2ZVJlc3VsdChSZWY8SlNPTjo6T2JqZWN0PiYmIGNh
bGxBcmd1bWVudCwgT3B0aW9uYWw8UHJvdG9jb2w6OlJ1bnRpbWU6OkV4ZWN1dGlvbkNvbnRleHRJ
ZD4mJiBleGVjdXRpb25Db250ZXh0SWQpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVy
cm9yU3RyaW5nOworCiAgICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHQ7CiAKLSAgICBT
dHJpbmcgb2JqZWN0SWQ7Ci0gICAgaWYgKGNhbGxBcmd1bWVudC5nZXRTdHJpbmcoIm9iamVjdElk
Il9zLCBvYmplY3RJZCkpIHsKLSAgICAgICAgaW5qZWN0ZWRTY3JpcHQgPSBtX2luamVjdGVkU2Ny
aXB0TWFuYWdlci5pbmplY3RlZFNjcmlwdEZvck9iamVjdElkKG9iamVjdElkKTsKLSAgICAgICAg
aWYgKGluamVjdGVkU2NyaXB0Lmhhc05vVmFsdWUoKSkgewotICAgICAgICAgICAgZXJyb3JTdHJp
bmcgPSAiTWlzc2luZyBpbmplY3RlZCBzY3JpcHQgZm9yIGdpdmVuIG9iamVjdElkIl9zOwotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaW5qZWN0
ZWRTY3JpcHQgPSBpbmplY3RlZFNjcmlwdEZvckV2YWwoZXJyb3JTdHJpbmcsIGV4ZWN1dGlvbkNv
bnRleHRJZCk7CisgICAgYXV0byBvYmplY3RJZCA9IGNhbGxBcmd1bWVudC0+Z2V0U3RyaW5nKFBy
b3RvY29sOjpSdW50aW1lOjpDYWxsQXJndW1lbnQ6Om9iamVjdElkS2V5KTsKKyAgICBpZiAoIW9i
amVjdElkKSB7CisgICAgICAgIGluamVjdGVkU2NyaXB0ID0gaW5qZWN0ZWRTY3JpcHRGb3JFdmFs
KGVycm9yU3RyaW5nLCBXVEZNb3ZlKGV4ZWN1dGlvbkNvbnRleHRJZCkpOwogICAgICAgICBpZiAo
aW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKQotICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBpbmplY3RlZFNjcmlwdCA9IG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmluamVjdGVk
U2NyaXB0Rm9yT2JqZWN0SWQob2JqZWN0SWQpOworICAgICAgICBpZiAoaW5qZWN0ZWRTY3JpcHQu
aGFzTm9WYWx1ZSgpKQorICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJNaXNzaW5n
IGluamVjdGVkIHNjcmlwdCBmb3IgZ2l2ZW4gb2JqZWN0SWQiX3MpOwogICAgIH0KLSAgICAKLSAg
ICBpbmplY3RlZFNjcmlwdC5zYXZlUmVzdWx0KGVycm9yU3RyaW5nLCBjYWxsQXJndW1lbnQudG9K
U09OU3RyaW5nKCksIHNhdmVkUmVzdWx0SW5kZXgpOworCisgICAgT3B0aW9uYWw8aW50PiBzYXZl
ZFJlc3VsdEluZGV4OworCisgICAgaW5qZWN0ZWRTY3JpcHQuc2F2ZVJlc3VsdChlcnJvclN0cmlu
ZywgY2FsbEFyZ3VtZW50LT50b0pTT05TdHJpbmcoKSwgc2F2ZWRSZXN1bHRJbmRleCk7CisKKyAg
ICBpZiAoIXNhdmVkUmVzdWx0SW5kZXgpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChl
cnJvclN0cmluZyk7CisKKyAgICByZXR1cm4gV1RGTW92ZShzYXZlZFJlc3VsdEluZGV4KTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OnNldFNhdmVkUmVzdWx0QWxpYXMoRXJyb3JT
dHJpbmcmLCBjb25zdCBTdHJpbmcqIGFsaWFzKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9p
ZD4gSW5zcGVjdG9yUnVudGltZUFnZW50OjpzZXRTYXZlZFJlc3VsdEFsaWFzKGNvbnN0IFN0cmlu
ZyYgc2F2ZWRSZXN1bHRBbGlhcykKIHsKLSAgICBPcHRpb25hbDxTdHJpbmc+IHNhdmVkUmVzdWx0
QWxpYXM7Ci0gICAgaWYgKGFsaWFzICYmICFhbGlhcy0+aXNFbXB0eSgpKQotICAgICAgICBzYXZl
ZFJlc3VsdEFsaWFzID0gKmFsaWFzOwogICAgIG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmluamVj
dGVkU2NyaXB0SG9zdCgpLnNldFNhdmVkUmVzdWx0QWxpYXMoc2F2ZWRSZXN1bHRBbGlhcyk7CisK
KyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6cmVsZWFz
ZU9iamVjdChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgb2JqZWN0SWQpCitQcm90b2NvbDo6
RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OnJlbGVhc2VPYmplY3Qo
Y29uc3QgUHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdElkJiBvYmplY3RJZCkKIHsKICAg
ICBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdCA9IG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2Vy
LmluamVjdGVkU2NyaXB0Rm9yT2JqZWN0SWQob2JqZWN0SWQpOwogICAgIGlmICghaW5qZWN0ZWRT
Y3JpcHQuaGFzTm9WYWx1ZSgpKQogICAgICAgICBpbmplY3RlZFNjcmlwdC5yZWxlYXNlT2JqZWN0
KG9iamVjdElkKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yUnVudGlt
ZUFnZW50OjpyZWxlYXNlT2JqZWN0R3JvdXAoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIG9i
amVjdEdyb3VwKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yUnVudGlt
ZUFnZW50OjpyZWxlYXNlT2JqZWN0R3JvdXAoY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCkKIHsK
ICAgICBtX2luamVjdGVkU2NyaXB0TWFuYWdlci5yZWxlYXNlT2JqZWN0R3JvdXAob2JqZWN0R3Jv
dXApOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6
OmdldFJ1bnRpbWVUeXBlc0ZvclZhcmlhYmxlc0F0T2Zmc2V0cyhFcnJvclN0cmluZyYgZXJyb3JT
dHJpbmcsIGNvbnN0IEpTT046OkFycmF5JiBsb2NhdGlvbnMsIFJlZlB0cjxKU09OOjpBcnJheU9m
PFByb3RvY29sOjpSdW50aW1lOjpUeXBlRGVzY3JpcHRpb24+PiYgdHlwZURlc2NyaXB0aW9ucykK
K1Byb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50
aW1lOjpUeXBlRGVzY3JpcHRpb24+Pj4gSW5zcGVjdG9yUnVudGltZUFnZW50OjpnZXRSdW50aW1l
VHlwZXNGb3JWYXJpYWJsZXNBdE9mZnNldHMoUmVmPEpTT046OkFycmF5PiYmIGxvY2F0aW9ucykK
IHsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogCi0gICAgdHlw
ZURlc2NyaXB0aW9ucyA9IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OlR5cGVEZXNj
cmlwdGlvbj46OmNyZWF0ZSgpOwotICAgIGlmICghbV92bS50eXBlUHJvZmlsZXIoKSkgewotICAg
ICAgICBlcnJvclN0cmluZyA9ICJWTSBoYXMgbm8gdHlwZSBpbmZvcm1hdGlvbiJfczsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoIW1fdm0udHlwZVByb2ZpbGVyKCkpCisgICAgICAg
IHJldHVybiBtYWtlVW5leHBlY3RlZCgiVk0gaGFzIG5vIHR5cGUgaW5mb3JtYXRpb24iX3MpOwor
CisgICAgYXV0byB0eXBlcyA9IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OlR5cGVE
ZXNjcmlwdGlvbj46OmNyZWF0ZSgpOwogCiAgICAgTW9ub3RvbmljVGltZSBzdGFydCA9IE1vbm90
b25pY1RpbWU6Om5vdygpOwogICAgIG1fdm0udHlwZVByb2ZpbGVyTG9nKCktPnByb2Nlc3NMb2dF
bnRyaWVzKG1fdm0sICJVc2VyIFF1ZXJ5Il9zKTsKIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbG9jYXRpb25zLmxlbmd0aCgpOyBpKyspIHsKLSAgICAgICAgUmVmUHRyPEpTT046OlZhbHVl
PiB2YWx1ZSA9IGxvY2F0aW9ucy5nZXQoaSk7Ci0gICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+
IGxvY2F0aW9uOwotICAgICAgICBpZiAoIXZhbHVlLT5hc09iamVjdChsb2NhdGlvbikpIHsKLSAg
ICAgICAgICAgIGVycm9yU3RyaW5nID0gIlVuZXhwZWN0ZWQgbm9uLW9iamVjdCBpdGVtIGluIGxv
Y2F0aW9ucyJfczsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQorICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbG9jYXRpb25zLT5sZW5ndGgoKTsgaSsrKSB7CisgICAgICAgIGF1dG8g
bG9jYXRpb24gPSBsb2NhdGlvbnMtPmdldChpKS0+YXNPYmplY3QoKTsKKyAgICAgICAgaWYgKCFs
b2NhdGlvbikKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiVW5leHBlY3RlZCBu
b24tb2JqZWN0IGl0ZW0gaW4gbG9jYXRpb25zIl9zKTsKIAotICAgICAgICBpbnQgZGVzY3JpcHRv
cjsKLSAgICAgICAgU3RyaW5nIHNvdXJjZUlEQXNTdHJpbmc7Ci0gICAgICAgIGludCBkaXZvdDsK
LSAgICAgICAgbG9jYXRpb24tPmdldEludGVnZXIoInR5cGVJbmZvcm1hdGlvbkRlc2NyaXB0b3Ii
X3MsIGRlc2NyaXB0b3IpOwotICAgICAgICBsb2NhdGlvbi0+Z2V0U3RyaW5nKCJzb3VyY2VJRCJf
cywgc291cmNlSURBc1N0cmluZyk7Ci0gICAgICAgIGxvY2F0aW9uLT5nZXRJbnRlZ2VyKCJkaXZv
dCJfcywgZGl2b3QpOworICAgICAgICBhdXRvIGRlc2NyaXB0b3IgPSBsb2NhdGlvbi0+Z2V0SW50
ZWdlcihQcm90b2NvbDo6UnVudGltZTo6VHlwZUxvY2F0aW9uOjp0eXBlSW5mb3JtYXRpb25EZXNj
cmlwdG9yS2V5KS52YWx1ZU9yKFR5cGVQcm9maWxlclNlYXJjaERlc2NyaXB0b3JOb3JtYWwpOwor
ICAgICAgICBhdXRvIHNvdXJjZUlEU3RyaW5nID0gbG9jYXRpb24tPmdldFN0cmluZyhQcm90b2Nv
bDo6UnVudGltZTo6VHlwZUxvY2F0aW9uOjpzb3VyY2VJREtleSk7CisgICAgICAgIGF1dG8gZGl2
b3QgPSBsb2NhdGlvbi0+Z2V0SW50ZWdlcihQcm90b2NvbDo6UnVudGltZTo6VHlwZUxvY2F0aW9u
OjpkaXZvdEtleSkudmFsdWVPcigwKTsKIAogICAgICAgICBib29sIG9rYXk7Ci0gICAgICAgIFR5
cGVMb2NhdGlvbiogdHlwZUxvY2F0aW9uID0gbV92bS50eXBlUHJvZmlsZXIoKS0+ZmluZExvY2F0
aW9uKGRpdm90LCBzb3VyY2VJREFzU3RyaW5nLnRvSW50UHRyU3RyaWN0KCZva2F5KSwgc3RhdGlj
X2Nhc3Q8VHlwZVByb2ZpbGVyU2VhcmNoRGVzY3JpcHRvcj4oZGVzY3JpcHRvciksIG1fdm0pOwor
ICAgICAgICBUeXBlTG9jYXRpb24qIHR5cGVMb2NhdGlvbiA9IG1fdm0udHlwZVByb2ZpbGVyKCkt
PmZpbmRMb2NhdGlvbihkaXZvdCwgc291cmNlSURTdHJpbmcudG9JbnRQdHJTdHJpY3QoJm9rYXkp
LCBzdGF0aWNfY2FzdDxUeXBlUHJvZmlsZXJTZWFyY2hEZXNjcmlwdG9yPihkZXNjcmlwdG9yKSwg
bV92bSk7CiAgICAgICAgIEFTU0VSVChva2F5KTsKIAogICAgICAgICBSZWZQdHI8VHlwZVNldD4g
dHlwZVNldDsKQEAgLTM3MiwxMiArNDE5LDE0IEBAIHZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50
OjpnZXRSdW50aW1lVHlwZXNGb3JWYXJpYWJsZXNBdE9mZnNldHMoRXJyb3JTdHJpbmcmIGVyCiAg
ICAgICAgICAgICBkZXNjcmlwdGlvbi0+c2V0SXNUcnVuY2F0ZWQodHlwZVNldC0+aXNPdmVyZmxv
d24oKSk7CiAgICAgICAgIH0KIAotICAgICAgICB0eXBlRGVzY3JpcHRpb25zLT5hZGRJdGVtKFdU
Rk1vdmUoZGVzY3JpcHRpb24pKTsKKyAgICAgICAgdHlwZXMtPmFkZEl0ZW0oV1RGTW92ZShkZXNj
cmlwdGlvbikpOwogICAgIH0KIAogICAgIE1vbm90b25pY1RpbWUgZW5kID0gTW9ub3RvbmljVGlt
ZTo6bm93KCk7CiAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgIGRhdGFMb2dGKCJJbnNwZWN0b3I6
OmdldFJ1bnRpbWVUeXBlc0ZvclZhcmlhYmxlc0F0T2Zmc2V0cyB0b29rICVsZm1zXG4iLCAoZW5k
IC0gc3RhcnQpLm1pbGxpc2Vjb25kcygpKTsKKworICAgIHJldHVybiBXVEZNb3ZlKHR5cGVzKTsK
IH0KIAogdm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmRpZENyZWF0ZUZyb250ZW5kQW5kQmFj
a2VuZChJbnNwZWN0b3I6OkZyb250ZW5kUm91dGVyKiwgSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0
Y2hlciopCkBAIC0zODksMjggKzQzOCwzNSBAQCB2b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6
d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoRGlzY29ubmVjdFJlYXNvbiByZWFzbwogICAg
IGlmIChyZWFzb24gIT0gRGlzY29ubmVjdFJlYXNvbjo6SW5zcGVjdGVkVGFyZ2V0RGVzdHJveWVk
ICYmIG1faXNUeXBlUHJvZmlsaW5nRW5hYmxlZCkKICAgICAgICAgc2V0VHlwZVByb2ZpbGVyRW5h
YmxlZFN0YXRlKGZhbHNlKTsKIAotICAgIFN0cmluZyB1bnVzZWQ7Ci0gICAgZGlzYWJsZSh1bnVz
ZWQpOworICAgIGRpc2FibGUoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmVu
YWJsZVR5cGVQcm9maWxlcihFcnJvclN0cmluZyYpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2
b2lkPiBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmVuYWJsZVR5cGVQcm9maWxlcigpCiB7CiAgICAg
c2V0VHlwZVByb2ZpbGVyRW5hYmxlZFN0YXRlKHRydWUpOworCisgICAgcmV0dXJuIHsgfTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmRpc2FibGVUeXBlUHJvZmlsZXIoRXJyb3JT
dHJpbmcmKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yUnVudGltZUFn
ZW50OjpkaXNhYmxlVHlwZVByb2ZpbGVyKCkKIHsKICAgICBzZXRUeXBlUHJvZmlsZXJFbmFibGVk
U3RhdGUoZmFsc2UpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSdW50
aW1lQWdlbnQ6OmVuYWJsZUNvbnRyb2xGbG93UHJvZmlsZXIoRXJyb3JTdHJpbmcmKQorUHJvdG9j
b2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yUnVudGltZUFnZW50OjplbmFibGVDb250
cm9sRmxvd1Byb2ZpbGVyKCkKIHsKICAgICBzZXRDb250cm9sRmxvd1Byb2ZpbGVyRW5hYmxlZFN0
YXRlKHRydWUpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSdW50aW1l
QWdlbnQ6OmRpc2FibGVDb250cm9sRmxvd1Byb2ZpbGVyKEVycm9yU3RyaW5nJikKK1Byb3RvY29s
OjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6ZGlzYWJsZUNvbnRy
b2xGbG93UHJvZmlsZXIoKQogewogICAgIHNldENvbnRyb2xGbG93UHJvZmlsZXJFbmFibGVkU3Rh
dGUoZmFsc2UpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAogdm9pZCBJbnNwZWN0b3JSdW50aW1l
QWdlbnQ6OnNldFR5cGVQcm9maWxlckVuYWJsZWRTdGF0ZShib29sIGlzVHlwZVByb2ZpbGluZ0Vu
YWJsZWQpCkBAIC00NDIsMTkgKzQ5OCwxMyBAQCB2b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6
c2V0Q29udHJvbEZsb3dQcm9maWxlckVuYWJsZWRTdGF0ZShib29sIGlzQ29udHJvbEZsbwogICAg
IH0pOwogfQogCi12b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6Z2V0QmFzaWNCbG9ja3MoRXJy
b3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHNvdXJjZUlEQXNTdHJpbmcsIFJl
ZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpCYXNpY0Jsb2NrPj4mIGJhc2lj
QmxvY2tzKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEpTT046OkFycmF5T2Y8UHJvdG9j
b2w6OlJ1bnRpbWU6OkJhc2ljQmxvY2s+Pj4gSW5zcGVjdG9yUnVudGltZUFnZW50OjpnZXRCYXNp
Y0Jsb2Nrcyhjb25zdCBTdHJpbmcmIHNvdXJjZUlEKQogewotICAgIGlmICghbV92bS5jb250cm9s
Rmxvd1Byb2ZpbGVyKCkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiVk0gaGFzIG5vIGNvbnRy
b2wgZmxvdyBpbmZvcm1hdGlvbiJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAo
IW1fdm0uY29udHJvbEZsb3dQcm9maWxlcigpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0
ZWQoIlZNIGhhcyBubyBjb250cm9sIGZsb3cgaW5mb3JtYXRpb24iX3MpOwogCi0gICAgYm9vbCBv
a2F5OwotICAgIGludHB0cl90IHNvdXJjZUlEID0gc291cmNlSURBc1N0cmluZy50b0ludFB0clN0
cmljdCgmb2theSk7Ci0gICAgQVNTRVJUKG9rYXkpOwotICAgIGNvbnN0IFZlY3RvcjxCYXNpY0Js
b2NrUmFuZ2U+JiBiYXNpY0Jsb2NrUmFuZ2VzID0gbV92bS5jb250cm9sRmxvd1Byb2ZpbGVyKCkt
PmdldEJhc2ljQmxvY2tzRm9yU291cmNlSUQoc291cmNlSUQsIG1fdm0pOwotICAgIGJhc2ljQmxv
Y2tzID0gSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UnVudGltZTo6QmFzaWNCbG9jaz46OmNyZWF0
ZSgpOwotICAgIGZvciAoY29uc3QgQmFzaWNCbG9ja1JhbmdlJiBibG9jayA6IGJhc2ljQmxvY2tS
YW5nZXMpIHsKKyAgICBhdXRvIGJhc2ljQmxvY2tzID0gSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6
UnVudGltZTo6QmFzaWNCbG9jaz46OmNyZWF0ZSgpOworICAgIGZvciAoY29uc3QgYXV0byYgYmxv
Y2sgOiBtX3ZtLmNvbnRyb2xGbG93UHJvZmlsZXIoKS0+Z2V0QmFzaWNCbG9ja3NGb3JTb3VyY2VJ
RChzb3VyY2VJRC50b0ludFB0cigpLCBtX3ZtKSkgewogICAgICAgICBhdXRvIGxvY2F0aW9uID0g
UHJvdG9jb2w6OlJ1bnRpbWU6OkJhc2ljQmxvY2s6OmNyZWF0ZSgpCiAgICAgICAgICAgICAuc2V0
U3RhcnRPZmZzZXQoYmxvY2subV9zdGFydE9mZnNldCkKICAgICAgICAgICAgIC5zZXRFbmRPZmZz
ZXQoYmxvY2subV9lbmRPZmZzZXQpCkBAIC00NjMsNiArNTEzLDcgQEAgdm9pZCBJbnNwZWN0b3JS
dW50aW1lQWdlbnQ6OmdldEJhc2ljQmxvY2tzKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29u
c3QgU3RyaW4KICAgICAgICAgICAgIC5yZWxlYXNlKCk7CiAgICAgICAgIGJhc2ljQmxvY2tzLT5h
ZGRJdGVtKFdURk1vdmUobG9jYXRpb24pKTsKICAgICB9CisgICAgcmV0dXJuIFdURk1vdmUoYmFz
aWNCbG9ja3MpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclJ1bnRpbWVBZ2Vu
dC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUnVu
dGltZUFnZW50LmgKaW5kZXggMTc1NjE1MTFhZjk3OWIzYjJiNzkxYzc0ZGQ3MjdkNGFlMzEyNGVj
ZS4uZjQwMjk0NmZmNmRhYTg4YzQ4NWQwOTdhYWM2MWMxZDllYmZjMDlhYSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUnVudGltZUFn
ZW50LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVj
dG9yUnVudGltZUFnZW50LmgKQEAgLTQ1LDcgKzQ1LDYgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7
CiAKIGNsYXNzIEluamVjdGVkU2NyaXB0OwogY2xhc3MgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOwot
dHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiAKIGNsYXNzIEpTX0VYUE9SVF9QUklWQVRFIElu
c3BlY3RvclJ1bnRpbWVBZ2VudCA6IHB1YmxpYyBJbnNwZWN0b3JBZ2VudEJhc2UsIHB1YmxpYyBS
dW50aW1lQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShJbnNwZWN0b3JSdW50aW1lQWdlbnQpOwpAQCAtNTgsMzMgKzU3LDMzIEBAIHB1YmxpYzoKICAg
ICB2b2lkIHdpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKERpc2Nvbm5lY3RSZWFzb24pIGZp
bmFsOwogCiAgICAgLy8gUnVudGltZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcgotICAgIHZvaWQg
ZW5hYmxlKEVycm9yU3RyaW5nJikgb3ZlcnJpZGUgeyBtX2VuYWJsZWQgPSB0cnVlOyB9Ci0gICAg
dm9pZCBkaXNhYmxlKEVycm9yU3RyaW5nJikgb3ZlcnJpZGUgeyBtX2VuYWJsZWQgPSBmYWxzZTsg
fQotICAgIHZvaWQgcGFyc2UoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24s
IFByb3RvY29sOjpSdW50aW1lOjpTeW50YXhFcnJvclR5cGUqIHJlc3VsdCwgT3B0aW9uYWw8U3Ry
aW5nPiYgbWVzc2FnZSwgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpFcnJvclJhbmdlPiYpIGZp
bmFsOwotICAgIHZvaWQgZXZhbHVhdGUoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGV4cHJl
c3Npb24sIGNvbnN0IFN0cmluZyogb2JqZWN0R3JvdXAsIGNvbnN0IGJvb2wqIGluY2x1ZGVDb21t
YW5kTGluZUFQSSwgY29uc3QgYm9vbCogZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25z
b2xlLCBjb25zdCBpbnQqIGV4ZWN1dGlvbkNvbnRleHRJZCwgY29uc3QgYm9vbCogcmV0dXJuQnlW
YWx1ZSwgY29uc3QgYm9vbCogZ2VuZXJhdGVQcmV2aWV3LCBjb25zdCBib29sKiBzYXZlUmVzdWx0
LCBjb25zdCBib29sKiBlbXVsYXRlVXNlckdlc3R1cmUsIFJlZlB0cjxQcm90b2NvbDo6UnVudGlt
ZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0LCBPcHRpb25hbDxib29sPiYgd2FzVGhyb3duLCBPcHRp
b25hbDxpbnQ+JiBzYXZlZFJlc3VsdEluZGV4KSBvdmVycmlkZTsKLSAgICB2b2lkIGF3YWl0UHJv
bWlzZShjb25zdCBTdHJpbmcmIHByb21pc2VPYmplY3RJZCwgY29uc3QgYm9vbCogcmV0dXJuQnlW
YWx1ZSwgY29uc3QgYm9vbCogZ2VuZXJhdGVQcmV2aWV3LCBjb25zdCBib29sKiBzYXZlUmVzdWx0
LCBSZWY8QXdhaXRQcm9taXNlQ2FsbGJhY2s+JiYpIGZpbmFsOwotICAgIHZvaWQgY2FsbEZ1bmN0
aW9uT24oRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBjb25zdCBTdHJpbmcm
IGV4cHJlc3Npb24sIGNvbnN0IEpTT046OkFycmF5KiBvcHRpb25hbEFyZ3VtZW50cywgY29uc3Qg
Ym9vbCogZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xlLCBjb25zdCBib29sKiBy
ZXR1cm5CeVZhbHVlLCBjb25zdCBib29sKiBnZW5lcmF0ZVByZXZpZXcsIGNvbnN0IGJvb2wqIGVt
dWxhdGVVc2VyR2VzdHVyZSwgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+
JiByZXN1bHQsIE9wdGlvbmFsPGJvb2w+JiB3YXNUaHJvd24pIG92ZXJyaWRlOwotICAgIHZvaWQg
cmVsZWFzZU9iamVjdChFcnJvclN0cmluZyYsIGNvbnN0IEVycm9yU3RyaW5nJiBvYmplY3RJZCkg
ZmluYWw7Ci0gICAgdm9pZCBnZXRQcmV2aWV3KEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBv
YmplY3RJZCwgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpPYmplY3RQcmV2aWV3PiYpIGZpbmFs
OwotICAgIHZvaWQgZ2V0UHJvcGVydGllcyhFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgb2Jq
ZWN0SWQsIGNvbnN0IGJvb2wqIG93blByb3BlcnRpZXMsIGNvbnN0IGludCogZmV0Y2hTdGFydCwg
Y29uc3QgaW50KiBmZXRjaENvdW50LCBjb25zdCBib29sKiBnZW5lcmF0ZVByZXZpZXcsIFJlZlB0
cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpQcm9wZXJ0eURlc2NyaXB0b3I+PiYg
cHJvcGVydGllcywgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OkludGVy
bmFsUHJvcGVydHlEZXNjcmlwdG9yPj4mIGludGVybmFsUHJvcGVydGllcykgZmluYWw7Ci0gICAg
dm9pZCBnZXREaXNwbGF5YWJsZVByb3BlcnRpZXMoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcm
IG9iamVjdElkLCBjb25zdCBpbnQqIGZldGNoU3RhcnQsIGNvbnN0IGludCogZmV0Y2hDb3VudCwg
Y29uc3QgYm9vbCogZ2VuZXJhdGVQcmV2aWV3LCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90b2Nv
bDo6UnVudGltZTo6UHJvcGVydHlEZXNjcmlwdG9yPj4mIHByb3BlcnRpZXMsIFJlZlB0cjxKU09O
OjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpJbnRlcm5hbFByb3BlcnR5RGVzY3JpcHRvcj4+
JiBpbnRlcm5hbFByb3BlcnRpZXMpIGZpbmFsOwotICAgIHZvaWQgZ2V0Q29sbGVjdGlvbkVudHJp
ZXMoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBjb25zdCBTdHJpbmcqIG9i
amVjdEdyb3VwLCBjb25zdCBpbnQqIGZldGNoU3RhcnQsIGNvbnN0IGludCogZmV0Y2hDb3VudCwg
UmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OkNvbGxlY3Rpb25FbnRyeT4+
JiBlbnRyaWVzKSBmaW5hbDsKLSAgICB2b2lkIHNhdmVSZXN1bHQoRXJyb3JTdHJpbmcmLCBjb25z
dCBKU09OOjpPYmplY3QmIGNhbGxBcmd1bWVudCwgY29uc3QgaW50KiBleGVjdXRpb25Db250ZXh0
SWQsIE9wdGlvbmFsPGludD4mIHNhdmVkUmVzdWx0SW5kZXgpIGZpbmFsOwotICAgIHZvaWQgc2V0
U2F2ZWRSZXN1bHRBbGlhcyhFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyogYWxpYXMpIGZpbmFs
OwotICAgIHZvaWQgcmVsZWFzZU9iamVjdEdyb3VwKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5n
JiBvYmplY3RHcm91cCkgZmluYWw7Ci0gICAgdm9pZCBnZXRSdW50aW1lVHlwZXNGb3JWYXJpYWJs
ZXNBdE9mZnNldHMoRXJyb3JTdHJpbmcmLCBjb25zdCBKU09OOjpBcnJheSYgbG9jYXRpb25zLCBS
ZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UnVudGltZTo6VHlwZURlc2NyaXB0aW9uPj4m
KSBmaW5hbDsKLSAgICB2b2lkIGVuYWJsZVR5cGVQcm9maWxlcihFcnJvclN0cmluZyYpIGZpbmFs
OwotICAgIHZvaWQgZGlzYWJsZVR5cGVQcm9maWxlcihFcnJvclN0cmluZyYpIGZpbmFsOwotICAg
IHZvaWQgZW5hYmxlQ29udHJvbEZsb3dQcm9maWxlcihFcnJvclN0cmluZyYpIGZpbmFsOwotICAg
IHZvaWQgZGlzYWJsZUNvbnRyb2xGbG93UHJvZmlsZXIoRXJyb3JTdHJpbmcmKSBmaW5hbDsKLSAg
ICB2b2lkIGdldEJhc2ljQmxvY2tzKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBpbl9zb3Vy
Y2VJRCwgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OkJhc2ljQmxvY2s+
PiYgb3V0X2Jhc2ljQmxvY2tzKSBmaW5hbDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2
b2lkPiBlbmFibGUoKSBvdmVycmlkZTsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lk
PiBkaXNhYmxlKCkgb3ZlcnJpZGU7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8c3RkOjp0
dXBsZTxQcm90b2NvbDo6UnVudGltZTo6U3ludGF4RXJyb3JUeXBlLCBTdHJpbmcgLyogbWVzc2Fn
ZSAqLywgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpFcnJvclJhbmdlPj4+IHBhcnNlKGNvbnN0
IFN0cmluZyYgZXhwcmVzc2lvbikgZmluYWw7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8
c3RkOjp0dXBsZTxSZWY8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4sIE9wdGlvbmFs
PGJvb2w+IC8qIHdhc1Rocm93biAqLywgT3B0aW9uYWw8aW50PiAvKiBzYXZlZFJlc3VsdEluZGV4
ICovPj4gZXZhbHVhdGUoY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBjb25zdCBTdHJpbmcmIG9i
amVjdEdyb3VwLCBPcHRpb25hbDxib29sPiYmIGluY2x1ZGVDb21tYW5kTGluZUFQSSwgT3B0aW9u
YWw8Ym9vbD4mJiBkb05vdFBhdXNlT25FeGNlcHRpb25zQW5kTXV0ZUNvbnNvbGUsIE9wdGlvbmFs
PFByb3RvY29sOjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0SWQ+JiYsIE9wdGlvbmFsPGJvb2w+
JiYgcmV0dXJuQnlWYWx1ZSwgT3B0aW9uYWw8Ym9vbD4mJiBnZW5lcmF0ZVByZXZpZXcsIE9wdGlv
bmFsPGJvb2w+JiYgc2F2ZVJlc3VsdCwgT3B0aW9uYWw8Ym9vbD4mJiBlbXVsYXRlVXNlckdlc3R1
cmUpIG92ZXJyaWRlOworICAgIHZvaWQgYXdhaXRQcm9taXNlKGNvbnN0IFByb3RvY29sOjpSdW50
aW1lOjpSZW1vdGVPYmplY3RJZCYsIE9wdGlvbmFsPGJvb2w+JiYgcmV0dXJuQnlWYWx1ZSwgT3B0
aW9uYWw8Ym9vbD4mJiBnZW5lcmF0ZVByZXZpZXcsIE9wdGlvbmFsPGJvb2w+JiYgc2F2ZVJlc3Vs
dCwgUmVmPEF3YWl0UHJvbWlzZUNhbGxiYWNrPiYmKSBmaW5hbDsKKyAgICBQcm90b2NvbDo6RXJy
b3JTdHJpbmdPcjxzdGQ6OnR1cGxlPFJlZjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0
PiwgT3B0aW9uYWw8Ym9vbD4gLyogd2FzVGhyb3duICovPj4gY2FsbEZ1bmN0aW9uT24oY29uc3Qg
UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdElkJiwgY29uc3QgU3RyaW5nJiBmdW5jdGlv
bkRlY2xhcmF0aW9uLCBSZWZQdHI8SlNPTjo6QXJyYXk+JiYgYXJndW1lbnRzLCBPcHRpb25hbDxi
b29sPiYmIGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29sZSwgT3B0aW9uYWw8Ym9v
bD4mJiByZXR1cm5CeVZhbHVlLCBPcHRpb25hbDxib29sPiYmIGdlbmVyYXRlUHJldmlldywgT3B0
aW9uYWw8Ym9vbD4mJiBlbXVsYXRlVXNlckdlc3R1cmUpIG92ZXJyaWRlOworICAgIFByb3RvY29s
OjpFcnJvclN0cmluZ09yPHZvaWQ+IHJlbGVhc2VPYmplY3QoY29uc3QgUHJvdG9jb2w6OlJ1bnRp
bWU6OlJlbW90ZU9iamVjdElkJikgZmluYWw7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8
UmVmPFByb3RvY29sOjpSdW50aW1lOjpPYmplY3RQcmV2aWV3Pj4gZ2V0UHJldmlldyhjb25zdCBQ
cm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0SWQmKSBmaW5hbDsKKyAgICBQcm90b2NvbDo6
RXJyb3JTdHJpbmdPcjxzdGQ6OnR1cGxlPFJlZjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50
aW1lOjpQcm9wZXJ0eURlc2NyaXB0b3I+PiwgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6
OlJ1bnRpbWU6OkludGVybmFsUHJvcGVydHlEZXNjcmlwdG9yPj4+PiBnZXRQcm9wZXJ0aWVzKGNv
bnN0IFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3RJZCYsIE9wdGlvbmFsPGJvb2w+JiYg
b3duUHJvcGVydGllcywgT3B0aW9uYWw8aW50PiYmIGZldGNoU3RhcnQsIE9wdGlvbmFsPGludD4m
JiBmZXRjaENvdW50LCBPcHRpb25hbDxib29sPiYmIGdlbmVyYXRlUHJldmlldykgZmluYWw7Cisg
ICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8c3RkOjp0dXBsZTxSZWY8SlNPTjo6QXJyYXlPZjxQ
cm90b2NvbDo6UnVudGltZTo6UHJvcGVydHlEZXNjcmlwdG9yPj4sIFJlZlB0cjxKU09OOjpBcnJh
eU9mPFByb3RvY29sOjpSdW50aW1lOjpJbnRlcm5hbFByb3BlcnR5RGVzY3JpcHRvcj4+Pj4gZ2V0
RGlzcGxheWFibGVQcm9wZXJ0aWVzKGNvbnN0IFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmpl
Y3RJZCYsIE9wdGlvbmFsPGludD4mJiBmZXRjaFN0YXJ0LCBPcHRpb25hbDxpbnQ+JiYgZmV0Y2hD
b3VudCwgT3B0aW9uYWw8Ym9vbD4mJiBnZW5lcmF0ZVByZXZpZXcpIGZpbmFsOworICAgIFByb3Rv
Y29sOjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpD
b2xsZWN0aW9uRW50cnk+Pj4gZ2V0Q29sbGVjdGlvbkVudHJpZXMoY29uc3QgUHJvdG9jb2w6OlJ1
bnRpbWU6OlJlbW90ZU9iamVjdElkJiwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCwgT3B0aW9u
YWw8aW50PiYmIGZldGNoU3RhcnQsIE9wdGlvbmFsPGludD4mJiBmZXRjaENvdW50KSBmaW5hbDsK
KyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxPcHRpb25hbDxpbnQ+IC8qIHNhdmVSZXN1bHRJ
bmRleCAqLz4gc2F2ZVJlc3VsdChSZWY8SlNPTjo6T2JqZWN0PiYmIGNhbGxBcmd1bWVudCwgT3B0
aW9uYWw8UHJvdG9jb2w6OlJ1bnRpbWU6OkV4ZWN1dGlvbkNvbnRleHRJZD4mJikgZmluYWw7Cisg
ICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc2V0U2F2ZWRSZXN1bHRBbGlhcyhjb25z
dCBTdHJpbmcmKSBmaW5hbDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiByZWxl
YXNlT2JqZWN0R3JvdXAoY29uc3QgU3RyaW5nJikgZmluYWw7CisgICAgUHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8UmVmPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OlR5cGVEZXNjcmlw
dGlvbj4+PiBnZXRSdW50aW1lVHlwZXNGb3JWYXJpYWJsZXNBdE9mZnNldHMoUmVmPEpTT046OkFy
cmF5PiYmIGxvY2F0aW9ucykgZmluYWw7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9p
ZD4gZW5hYmxlVHlwZVByb2ZpbGVyKCkgZmluYWw7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5n
T3I8dm9pZD4gZGlzYWJsZVR5cGVQcm9maWxlcigpIGZpbmFsOworICAgIFByb3RvY29sOjpFcnJv
clN0cmluZ09yPHZvaWQ+IGVuYWJsZUNvbnRyb2xGbG93UHJvZmlsZXIoKSBmaW5hbDsKKyAgICBQ
cm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBkaXNhYmxlQ29udHJvbEZsb3dQcm9maWxlcigp
IGZpbmFsOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPFBy
b3RvY29sOjpSdW50aW1lOjpCYXNpY0Jsb2NrPj4+IGdldEJhc2ljQmxvY2tzKGNvbnN0IFN0cmlu
ZyYgc291cmNlSUQpIGZpbmFsOwogCiBwcm90ZWN0ZWQ6CiAgICAgSW5zcGVjdG9yUnVudGltZUFn
ZW50KEFnZW50Q29udGV4dCYpOwogCiAgICAgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyJiBpbmplY3Rl
ZFNjcmlwdE1hbmFnZXIoKSB7IHJldHVybiBtX2luamVjdGVkU2NyaXB0TWFuYWdlcjsgfQogCi0g
ICAgdmlydHVhbCBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdEZvckV2YWwoRXJyb3JTdHJp
bmcmLCBjb25zdCBpbnQqIGV4ZWN1dGlvbkNvbnRleHRJZCkgPSAwOworICAgIHZpcnR1YWwgSW5q
ZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHRGb3JFdmFsKFByb3RvY29sOjpFcnJvclN0cmluZyYs
IE9wdGlvbmFsPFByb3RvY29sOjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0SWQ+JiYpID0gMDsK
IAogICAgIHZpcnR1YWwgdm9pZCBtdXRlQ29uc29sZSgpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQg
dW5tdXRlQ29uc29sZSgpID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclNjcmlwdFByb2ZpbGVyQWdlbnQuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yU2NyaXB0UHJvZmlsZXJB
Z2VudC5jcHAKaW5kZXggNjgxM2UwNzVhOTRiMzYzMWZiNTJlYWRkOWNlNzk5YjljN2RjZDhkZS4u
N2ViNTFhZjMwZmRhODAyY2E4MWE4YjEwZWNkN2U2ZWJlZTIyMTE3YyAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yU2NyaXB0UHJvZmls
ZXJBZ2VudC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9yU2NyaXB0UHJvZmlsZXJBZ2VudC5jcHAKQEAgLTY0LDEwICs2NCwxMCBAQCB2b2lk
IEluc3BlY3RvclNjcmlwdFByb2ZpbGVyQWdlbnQ6OndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNr
ZW5kKERpc2Nvbm5lY3RSZWFzbwogICAgIH0KIH0KIAotdm9pZCBJbnNwZWN0b3JTY3JpcHRQcm9m
aWxlckFnZW50OjpzdGFydFRyYWNraW5nKEVycm9yU3RyaW5nJiwgY29uc3QgYm9vbCogaW5jbHVk
ZVNhbXBsZXMpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JTY3JpcHRQ
cm9maWxlckFnZW50OjpzdGFydFRyYWNraW5nKE9wdGlvbmFsPGJvb2w+JiYgaW5jbHVkZVNhbXBs
ZXMpCiB7CiAgICAgaWYgKG1fdHJhY2tpbmcpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0
dXJuIHsgfTsKIAogICAgIG1fdHJhY2tpbmcgPSB0cnVlOwogCkBAIC05MSwxMiArOTEsMTQgQEAg
dm9pZCBJbnNwZWN0b3JTY3JpcHRQcm9maWxlckFnZW50OjpzdGFydFRyYWNraW5nKEVycm9yU3Ry
aW5nJiwgY29uc3QgYm9vbCogaW5jbHUKICAgICBtX2Vudmlyb25tZW50LmRlYnVnZ2VyKCkuc2V0
UHJvZmlsaW5nQ2xpZW50KHRoaXMpOwogCiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPnRyYWNr
aW5nU3RhcnQoc3RvcHdhdGNoLmVsYXBzZWRUaW1lKCkuc2Vjb25kcygpKTsKKworICAgIHJldHVy
biB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yU2NyaXB0UHJvZmlsZXJBZ2VudDo6c3RvcFRyYWNr
aW5nKEVycm9yU3RyaW5nJikKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3Rv
clNjcmlwdFByb2ZpbGVyQWdlbnQ6OnN0b3BUcmFja2luZygpCiB7CiAgICAgaWYgKCFtX3RyYWNr
aW5nKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB7IH07CiAKICAgICBtX3RyYWNr
aW5nID0gZmFsc2U7CiAgICAgbV9hY3RpdmVFdmFsdWF0ZVNjcmlwdCA9IGZhbHNlOwpAQCAtMTA0
LDYgKzEwNiw4IEBAIHZvaWQgSW5zcGVjdG9yU2NyaXB0UHJvZmlsZXJBZ2VudDo6c3RvcFRyYWNr
aW5nKEVycm9yU3RyaW5nJikKICAgICBtX2Vudmlyb25tZW50LmRlYnVnZ2VyKCkuc2V0UHJvZmls
aW5nQ2xpZW50KG51bGxwdHIpOwogCiAgICAgdHJhY2tpbmdDb21wbGV0ZSgpOworCisgICAgcmV0
dXJuIHsgfTsKIH0KIAogYm9vbCBJbnNwZWN0b3JTY3JpcHRQcm9maWxlckFnZW50Ojppc0FscmVh
ZHlQcm9maWxpbmcoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yU2NyaXB0UHJvZmlsZXJBZ2VudC5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yU2NyaXB0UHJvZmlsZXJBZ2Vu
dC5oCmluZGV4IDdlN2NkYzlmOTc1MDY3NzY2Mjk3NDBhYWRjYjU0ZmI0ZGEwMGQwOGYuLjI4ZjU0
ODhkMGFmYzA2M2IyOWRkMGZmN2NkZDUwZTVkNTBhNjQ3ODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclNjcmlwdFByb2ZpbGVyQWdl
bnQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0
b3JTY3JpcHRQcm9maWxlckFnZW50LmgKQEAgLTM3LDI3ICszNywyNSBAQCBjbGFzcyBQcm9maWxl
OwogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7
Ci0KIGNsYXNzIEpTX0VYUE9SVF9QUklWQVRFIEluc3BlY3RvclNjcmlwdFByb2ZpbGVyQWdlbnQg
ZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yQWdlbnRCYXNlLCBwdWJsaWMgU2NyaXB0UHJvZmlsZXJC
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIsIHB1YmxpYyBKU0M6OkRlYnVnZ2VyOjpQcm9maWxpbmdD
bGllbnQgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEluc3BlY3RvclNjcmlwdFByb2ZpbGVy
QWdlbnQpOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIEluc3Bl
Y3RvclNjcmlwdFByb2ZpbGVyQWdlbnQoQWdlbnRDb250ZXh0Jik7Ci0gICAgfkluc3BlY3RvclNj
cmlwdFByb2ZpbGVyQWdlbnQoKSBmaW5hbDsKKyAgICB+SW5zcGVjdG9yU2NyaXB0UHJvZmlsZXJB
Z2VudCgpOwogCiAgICAgLy8gSW5zcGVjdG9yQWdlbnRCYXNlCi0gICAgdm9pZCBkaWRDcmVhdGVG
cm9udGVuZEFuZEJhY2tlbmQoRnJvbnRlbmRSb3V0ZXIqLCBCYWNrZW5kRGlzcGF0Y2hlciopIGZp
bmFsOwotICAgIHZvaWQgd2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoRGlzY29ubmVjdFJl
YXNvbikgZmluYWw7CisgICAgdm9pZCBkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoRnJvbnRl
bmRSb3V0ZXIqLCBCYWNrZW5kRGlzcGF0Y2hlciopOworICAgIHZvaWQgd2lsbERlc3Ryb3lGcm9u
dGVuZEFuZEJhY2tlbmQoRGlzY29ubmVjdFJlYXNvbik7CiAKICAgICAvLyBTY3JpcHRQcm9maWxl
ckJhY2tlbmREaXNwYXRjaGVySGFuZGxlcgotICAgIHZvaWQgc3RhcnRUcmFja2luZyhFcnJvclN0
cmluZyYsIGNvbnN0IGJvb2wqIGluY2x1ZGVTYW1wbGVzKSBmaW5hbDsKLSAgICB2b2lkIHN0b3BU
cmFja2luZyhFcnJvclN0cmluZyYpIGZpbmFsOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09y
PHZvaWQ+IHN0YXJ0VHJhY2tpbmcoT3B0aW9uYWw8Ym9vbD4mJiBpbmNsdWRlU2FtcGxlcyk7Cisg
ICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc3RvcFRyYWNraW5nKCk7CiAKICAgICAv
LyBKU0M6OkRlYnVnZ2VyOjpQcm9maWxpbmdDbGllbnQKLSAgICBib29sIGlzQWxyZWFkeVByb2Zp
bGluZygpIGNvbnN0IGZpbmFsOwotICAgIFNlY29uZHMgd2lsbEV2YWx1YXRlU2NyaXB0KCkgZmlu
YWw7Ci0gICAgdm9pZCBkaWRFdmFsdWF0ZVNjcmlwdChTZWNvbmRzLCBKU0M6OlByb2ZpbGluZ1Jl
YXNvbikgZmluYWw7CisgICAgYm9vbCBpc0FscmVhZHlQcm9maWxpbmcoKSBjb25zdDsKKyAgICBT
ZWNvbmRzIHdpbGxFdmFsdWF0ZVNjcmlwdCgpOworICAgIHZvaWQgZGlkRXZhbHVhdGVTY3JpcHQo
U2Vjb25kcywgSlNDOjpQcm9maWxpbmdSZWFzb24pOwogCiBwcml2YXRlOgogICAgIHZvaWQgYWRk
RXZlbnQoU2Vjb25kcyBzdGFydFRpbWUsIFNlY29uZHMgZW5kVGltZSwgSlNDOjpQcm9maWxpbmdS
ZWFzb24pOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2Vu
dHMvSW5zcGVjdG9yVGFyZ2V0QWdlbnQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9hZ2VudHMvSW5zcGVjdG9yVGFyZ2V0QWdlbnQuY3BwCmluZGV4IDhmY2I1YTFlNTU3NTBk
MzI1YTg0ODI0ZDg2YzQ5Y2ZlNmZiMDQyNjguLjUwOGViMDJlYzk1YzUyNDA4Mzg0YTFlMmI3NzY0
OGFmZDQyNmRkOWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
YWdlbnRzL0luc3BlY3RvclRhcmdldEFnZW50LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JUYXJnZXRBZ2VudC5jcHAKQEAgLTU1LDM2ICs1
NSwzNiBAQCB2b2lkIEluc3BlY3RvclRhcmdldEFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5k
QmFja2VuZChEaXNjb25uZWN0UmVhc29uKQogICAgIG1fc2hvdWxkUGF1c2VPblN0YXJ0ID0gZmFs
c2U7CiB9CiAKLXZvaWQgSW5zcGVjdG9yVGFyZ2V0QWdlbnQ6OnNldFBhdXNlT25TdGFydChFcnJv
clN0cmluZyYsIGJvb2wgcGF1c2VPblN0YXJ0KQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9p
ZD4gSW5zcGVjdG9yVGFyZ2V0QWdlbnQ6OnNldFBhdXNlT25TdGFydChib29sIHBhdXNlT25TdGFy
dCkKIHsKICAgICBtX3Nob3VsZFBhdXNlT25TdGFydCA9IHBhdXNlT25TdGFydDsKKworICAgIHJl
dHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yVGFyZ2V0QWdlbnQ6OnJlc3VtZShFcnJvclN0
cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQpCitQcm90b2NvbDo6RXJy
b3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JUYXJnZXRBZ2VudDo6cmVzdW1lKGNvbnN0IFN0cmlu
ZyYgdGFyZ2V0SWQpCiB7CiAgICAgYXV0byogdGFyZ2V0ID0gbV90YXJnZXRzLmdldCh0YXJnZXRJ
ZCk7Ci0gICAgaWYgKCF0YXJnZXQpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWlzc2luZyB0
YXJnZXQgZm9yIGdpdmVuIHRhcmdldElkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAg
IGlmICghdGFyZ2V0KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk1pc3NpbmcgdGFy
Z2V0IGZvciBnaXZlbiB0YXJnZXRJZCJfcyk7CiAKLSAgICBpZiAoIXRhcmdldC0+aXNQYXVzZWQo
KSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJUYXJnZXQgZm9yIGdpdmVuIHRhcmdldElkIGlz
IG5vdCBwYXVzZWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKCF0YXJnZXQt
PmlzUGF1c2VkKCkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiVGFyZ2V0IGZvciBn
aXZlbiB0YXJnZXRJZCBpcyBub3QgcGF1c2VkIl9zKTsKIAogICAgIHRhcmdldC0+cmVzdW1lKCk7
CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvclRhcmdldEFnZW50OjpzZW5k
TWVzc2FnZVRvVGFyZ2V0KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiB0
YXJnZXRJZCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8
dm9pZD4gSW5zcGVjdG9yVGFyZ2V0QWdlbnQ6OnNlbmRNZXNzYWdlVG9UYXJnZXQoY29uc3QgU3Ry
aW5nJiB0YXJnZXRJZCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQogewogICAgIEluc3BlY3RvclRh
cmdldCogdGFyZ2V0ID0gbV90YXJnZXRzLmdldCh0YXJnZXRJZCk7Ci0gICAgaWYgKCF0YXJnZXQp
IHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWlzc2luZyB0YXJnZXQgZm9yIGdpdmVuIHRhcmdl
dElkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghdGFyZ2V0KQorICAgICAg
ICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk1pc3NpbmcgdGFyZ2V0IGZvciBnaXZlbiB0YXJnZXRJ
ZCJfcyk7CiAKICAgICB0YXJnZXQtPnNlbmRNZXNzYWdlVG9UYXJnZXRCYWNrZW5kKG1lc3NhZ2Up
OworCisgICAgcmV0dXJuIHsgfTsKIH0KIAogdm9pZCBJbnNwZWN0b3JUYXJnZXRBZ2VudDo6c2Vu
ZE1lc3NhZ2VGcm9tVGFyZ2V0VG9Gcm9udGVuZChjb25zdCBTdHJpbmcmIHRhcmdldElkLCBjb25z
dCBTdHJpbmcmIG1lc3NhZ2UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL2FnZW50cy9JbnNwZWN0b3JUYXJnZXRBZ2VudC5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yVGFyZ2V0QWdlbnQuaAppbmRleCBiOTI5ZGRm
ZmUyOWMzZmIwODhhYjY3MTQwODdjOTkzMDJjMjc1MjE0Li5lZGNkNDg5Yjc2ZTA4MDgyN2UwNzQx
ZjE0YmFiMDlmOWVhOTMwM2Q0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL2FnZW50cy9JbnNwZWN0b3JUYXJnZXRBZ2VudC5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclRhcmdldEFnZW50LmgKQEAgLTM1LDIz
ICszNSwyMSBAQCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAogY2xhc3MgSW5zcGVjdG9yVGFyZ2V0
OwogCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQogY2xhc3MgSlNfRVhQT1JUX1BSSVZB
VEUgSW5zcGVjdG9yVGFyZ2V0QWdlbnQgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yQWdlbnRCYXNl
LCBwdWJsaWMgVGFyZ2V0QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKICAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShJbnNwZWN0b3JUYXJnZXRBZ2VudCk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CiBwdWJsaWM6CiAgICAgSW5zcGVjdG9yVGFyZ2V0QWdlbnQoRnJvbnRlbmRSb3V0ZXIm
LCBCYWNrZW5kRGlzcGF0Y2hlciYpOwotICAgIH5JbnNwZWN0b3JUYXJnZXRBZ2VudCgpIGZpbmFs
OworICAgIH5JbnNwZWN0b3JUYXJnZXRBZ2VudCgpOwogCiAgICAgLy8gSW5zcGVjdG9yQWdlbnRC
YXNlCi0gICAgdm9pZCBkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoRnJvbnRlbmRSb3V0ZXIq
LCBCYWNrZW5kRGlzcGF0Y2hlciopIGZpbmFsOwotICAgIHZvaWQgd2lsbERlc3Ryb3lGcm9udGVu
ZEFuZEJhY2tlbmQoRGlzY29ubmVjdFJlYXNvbikgZmluYWw7CisgICAgdm9pZCBkaWRDcmVhdGVG
cm9udGVuZEFuZEJhY2tlbmQoRnJvbnRlbmRSb3V0ZXIqLCBCYWNrZW5kRGlzcGF0Y2hlciopOwor
ICAgIHZvaWQgd2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoRGlzY29ubmVjdFJlYXNvbik7
CiAKICAgICAvLyBUYXJnZXRCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIKLSAgICB2b2lkIHNldFBh
dXNlT25TdGFydChFcnJvclN0cmluZyYsIGJvb2wgcGF1c2VPblN0YXJ0KSBmaW5hbDsKLSAgICB2
b2lkIHJlc3VtZShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQpIGZpbmFsOwot
ICAgIHZvaWQgc2VuZE1lc3NhZ2VUb1RhcmdldChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYg
dGFyZ2V0SWQsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkgZmluYWw7CisgICAgUHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8dm9pZD4gc2V0UGF1c2VPblN0YXJ0KGJvb2wpOworICAgIFByb3RvY29sOjpF
cnJvclN0cmluZ09yPHZvaWQ+IHJlc3VtZShjb25zdCBTdHJpbmcmIHRhcmdldElkKTsKKyAgICBQ
cm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzZW5kTWVzc2FnZVRvVGFyZ2V0KGNvbnN0IFN0
cmluZyYgdGFyZ2V0SWQsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7CiAKICAgICAvLyBUYXJnZXQg
bGlmZWN5Y2xlLgogICAgIHZvaWQgdGFyZ2V0Q3JlYXRlZChJbnNwZWN0b3JUYXJnZXQmKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0pTR2xvYmFs
T2JqZWN0QXVkaXRBZ2VudC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2Fn
ZW50cy9KU0dsb2JhbE9iamVjdEF1ZGl0QWdlbnQuY3BwCmluZGV4IDRiZmE5ZjVhYTdmZGUxNTRi
NTMzYzhmMjNjZDdiYWU2Nzc1OGFiMDAuLjI5ZmNlYzk3YmI4ZTdmNDc3MmQ0ZDdjYzhmYWQ2Yzky
MzE3MWY4OTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdl
bnRzL0pTR2xvYmFsT2JqZWN0QXVkaXRBZ2VudC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9hZ2VudHMvSlNHbG9iYWxPYmplY3RBdWRpdEFnZW50LmNwcApAQCAtNDEs
NyArNDEsNyBAQCBKU0dsb2JhbE9iamVjdEF1ZGl0QWdlbnQ6OkpTR2xvYmFsT2JqZWN0QXVkaXRB
Z2VudChKU0FnZW50Q29udGV4dCYgY29udGV4dCkKIAogSlNHbG9iYWxPYmplY3RBdWRpdEFnZW50
Ojp+SlNHbG9iYWxPYmplY3RBdWRpdEFnZW50KCkgPSBkZWZhdWx0OwogCi1JbmplY3RlZFNjcmlw
dCBKU0dsb2JhbE9iamVjdEF1ZGl0QWdlbnQ6OmluamVjdGVkU2NyaXB0Rm9yRXZhbChFcnJvclN0
cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IGludCogZXhlY3V0aW9uQ29udGV4dElkKQorSW5qZWN0
ZWRTY3JpcHQgSlNHbG9iYWxPYmplY3RBdWRpdEFnZW50OjppbmplY3RlZFNjcmlwdEZvckV2YWwo
UHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgT3B0aW9uYWw8UHJvdG9jb2w6OlJ1
bnRpbWU6OkV4ZWN1dGlvbkNvbnRleHRJZD4mJiBleGVjdXRpb25Db250ZXh0SWQpCiB7CiAgICAg
aWYgKGV4ZWN1dGlvbkNvbnRleHRJZCkgewogICAgICAgICBlcnJvclN0cmluZyA9ICJleGVjdXRp
b25Db250ZXh0SWQgaXMgbm90IHN1cHBvcnRlZCBmb3IgSlNDb250ZXh0cyBhcyB0aGVyZSBpcyBv
bmx5IG9uZSBleGVjdXRpb24gY29udGV4dCJfczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0pTR2xvYmFsT2JqZWN0QXVkaXRBZ2VudC5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSlNHbG9iYWxPYmplY3RBdWRpdEFn
ZW50LmgKaW5kZXggN2Q0NjcwZDA0ZGM3ZmQzMzA4M2ExNTA2MWQzNzc2NWIxYTZjM2VlNi4uNTg0
ZDA1MDI2NDU4OWI0ODA1YzYxYjRjNGRiYTM4MTk5YTZmZWRlMCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSlNHbG9iYWxPYmplY3RBdWRpdEFnZW50
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSlNHbG9iYWxP
YmplY3RBdWRpdEFnZW50LmgKQEAgLTM4LDEwICszOCwxMCBAQCBjbGFzcyBKU0dsb2JhbE9iamVj
dEF1ZGl0QWdlbnQgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yQXVkaXRBZ2VudCB7CiAgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgSlNHbG9iYWxPYmplY3RBdWRpdEFn
ZW50KEpTQWdlbnRDb250ZXh0Jik7Ci0gICAgfkpTR2xvYmFsT2JqZWN0QXVkaXRBZ2VudCgpIGZp
bmFsOworICAgIH5KU0dsb2JhbE9iamVjdEF1ZGl0QWdlbnQoKTsKIAogcHJpdmF0ZToKLSAgICBJ
bmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdEZvckV2YWwoRXJyb3JTdHJpbmcmLCBjb25zdCBp
bnQqIGV4ZWN1dGlvbkNvbnRleHRJZCkgZmluYWw7CisgICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0
ZWRTY3JpcHRGb3JFdmFsKFByb3RvY29sOjpFcnJvclN0cmluZyYsIE9wdGlvbmFsPFByb3RvY29s
OjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0SWQ+JiYpOwogCiAgICAgSlNDOjpKU0dsb2JhbE9i
amVjdCYgbV9nbG9iYWxPYmplY3Q7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9hZ2VudHMvSlNHbG9iYWxPYmplY3REZWJ1Z2dlckFnZW50LmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0pTR2xvYmFsT2JqZWN0RGVidWdn
ZXJBZ2VudC5jcHAKaW5kZXggMjU1MWU3YTQyMzkzOTk1ZDZhM2VlYTljZTQ5MTc0OWEzODc4OTE4
OS4uM2I3MDI4NzhhMWNhNTE2MjQ0MDk5OWY0ZTY0YjUzZmMzNGY5NTMyZiAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSlNHbG9iYWxPYmplY3REZWJ1
Z2dlckFnZW50LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50
cy9KU0dsb2JhbE9iamVjdERlYnVnZ2VyQWdlbnQuY3BwCkBAIC00NCw3ICs0NCw3IEBAIEpTR2xv
YmFsT2JqZWN0RGVidWdnZXJBZ2VudDo6SlNHbG9iYWxPYmplY3REZWJ1Z2dlckFnZW50KEpTQWdl
bnRDb250ZXh0JiBjb250ZXh0CiAKIEpTR2xvYmFsT2JqZWN0RGVidWdnZXJBZ2VudDo6fkpTR2xv
YmFsT2JqZWN0RGVidWdnZXJBZ2VudCgpID0gZGVmYXVsdDsKIAotSW5qZWN0ZWRTY3JpcHQgSlNH
bG9iYWxPYmplY3REZWJ1Z2dlckFnZW50OjppbmplY3RlZFNjcmlwdEZvckV2YWwoRXJyb3JTdHJp
bmcmIGVycm9yU3RyaW5nLCBjb25zdCBpbnQqIGV4ZWN1dGlvbkNvbnRleHRJZCkKK0luamVjdGVk
U2NyaXB0IEpTR2xvYmFsT2JqZWN0RGVidWdnZXJBZ2VudDo6aW5qZWN0ZWRTY3JpcHRGb3JFdmFs
KFByb3RvY29sOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIE9wdGlvbmFsPFByb3RvY29sOjpS
dW50aW1lOjpFeGVjdXRpb25Db250ZXh0SWQ+JiYgZXhlY3V0aW9uQ29udGV4dElkKQogewogICAg
IGlmIChleGVjdXRpb25Db250ZXh0SWQpIHsKICAgICAgICAgZXJyb3JTdHJpbmcgPSAiZXhlY3V0
aW9uQ29udGV4dElkIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIEpTQ29udGV4dHMgYXMgdGhlcmUgaXMg
b25seSBvbmUgZXhlY3V0aW9uIGNvbnRleHQiX3M7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9KU0dsb2JhbE9iamVjdERlYnVnZ2VyQWdlbnQuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0pTR2xvYmFsT2JqZWN0RGVi
dWdnZXJBZ2VudC5oCmluZGV4IDZmNzkyNzhkNTMzMTcxZTFmZGQwYWVmZTlkZDI5YjMzYmZkMWZl
OTUuLjEwMGZiMjNlMzE1ZGYwNDdmOWY4NTZjY2M5YTVhNmY4MGU4M2Q3NzYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0pTR2xvYmFsT2JqZWN0RGVi
dWdnZXJBZ2VudC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRz
L0pTR2xvYmFsT2JqZWN0RGVidWdnZXJBZ2VudC5oCkBAIC0zNiwxOCArMzYsMTggQEAgY2xhc3Mg
SlNHbG9iYWxPYmplY3REZWJ1Z2dlckFnZW50IGZpbmFsIDogcHVibGljIEluc3BlY3RvckRlYnVn
Z2VyQWdlbnQgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIEpT
R2xvYmFsT2JqZWN0RGVidWdnZXJBZ2VudChKU0FnZW50Q29udGV4dCYsIEluc3BlY3RvckNvbnNv
bGVBZ2VudCopOwotICAgIH5KU0dsb2JhbE9iamVjdERlYnVnZ2VyQWdlbnQoKSBmaW5hbDsKKyAg
ICB+SlNHbG9iYWxPYmplY3REZWJ1Z2dlckFnZW50KCk7CiAKICAgICAvLyBKU0M6OkRlYnVnZ2Vy
OjpPYnNlcnZlcgotICAgIHZvaWQgYnJlYWtwb2ludEFjdGlvbkxvZyhKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiwgY29uc3QgU3RyaW5nJiBkYXRhKSBmaW5hbDsKKyAgICB2b2lkIGJyZWFrcG9pbnRBY3Rp
b25Mb2coSlNDOjpKU0dsb2JhbE9iamVjdCosIGNvbnN0IFN0cmluZyYgZGF0YSk7CiAKIHByaXZh
dGU6Ci0gICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHRGb3JFdmFsKEVycm9yU3RyaW5n
JiwgY29uc3QgaW50KiBleGVjdXRpb25Db250ZXh0SWQpIGZpbmFsOworICAgIEluamVjdGVkU2Ny
aXB0IGluamVjdGVkU2NyaXB0Rm9yRXZhbChQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBPcHRpb25h
bDxQcm90b2NvbDo6UnVudGltZTo6RXhlY3V0aW9uQ29udGV4dElkPiYmKTsKIAogICAgIC8vIE5P
VEU6IEphdmFTY3JpcHQgaW5zcGVjdG9yIGRvZXMgbm90IHlldCBuZWVkIHRvIG11dGUgYSBjb25z
b2xlIGJlY2F1c2Ugbm8gbWVzc2FnZXMKICAgICAvLyBhcmUgc2VudCB0byB0aGUgY29uc29sZSBv
dXRzaWRlIG9mIHRoZSBBUEkgYm91bmRhcnkgb3IgY29uc29sZSBvYmplY3QuCi0gICAgdm9pZCBt
dXRlQ29uc29sZSgpIGZpbmFsIHsgfQotICAgIHZvaWQgdW5tdXRlQ29uc29sZSgpIGZpbmFsIHsg
fQorICAgIHZvaWQgbXV0ZUNvbnNvbGUoKSB7IH0KKyAgICB2b2lkIHVubXV0ZUNvbnNvbGUoKSB7
IH0KIAogICAgIEluc3BlY3RvckNvbnNvbGVBZ2VudCogbV9jb25zb2xlQWdlbnQgeyBudWxscHRy
IH07CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2Vu
dHMvSlNHbG9iYWxPYmplY3RSdW50aW1lQWdlbnQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9hZ2VudHMvSlNHbG9iYWxPYmplY3RSdW50aW1lQWdlbnQuY3BwCmluZGV4IGM4
NjY5ZWUwYWE1YjhjYTg0ZTVkMjk0MzdmMzQ0NDcxYzFmOWEwNjAuLmUyNTQ0ODc0OGYxNGU1MGEy
ZmM1Y2RlNzZiMDY4OTAyYjAzODNiMWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3IvYWdlbnRzL0pTR2xvYmFsT2JqZWN0UnVudGltZUFnZW50LmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9KU0dsb2JhbE9iamVjdFJ1bnRp
bWVBZ2VudC5jcHAKQEAgLTQzLDkgKzQzLDEyIEBAIEpTR2xvYmFsT2JqZWN0UnVudGltZUFnZW50
OjpKU0dsb2JhbE9iamVjdFJ1bnRpbWVBZ2VudChKU0FnZW50Q29udGV4dCYgY29udGV4dCkKIAog
SlNHbG9iYWxPYmplY3RSdW50aW1lQWdlbnQ6On5KU0dsb2JhbE9iamVjdFJ1bnRpbWVBZ2VudCgp
ID0gZGVmYXVsdDsKIAotSW5qZWN0ZWRTY3JpcHQgSlNHbG9iYWxPYmplY3RSdW50aW1lQWdlbnQ6
OmluamVjdGVkU2NyaXB0Rm9yRXZhbChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IGlu
dCogZXhlY3V0aW9uQ29udGV4dElkKQorSW5qZWN0ZWRTY3JpcHQgSlNHbG9iYWxPYmplY3RSdW50
aW1lQWdlbnQ6OmluamVjdGVkU2NyaXB0Rm9yRXZhbChQcm90b2NvbDo6RXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBPcHRpb25hbDxQcm90b2NvbDo6UnVudGltZTo6RXhlY3V0aW9uQ29udGV4dElk
PiYmIGV4ZWN1dGlvbkNvbnRleHRJZCkKIHsKLSAgICBBU1NFUlRfVU5VU0VEKGV4ZWN1dGlvbkNv
bnRleHRJZCwgIWV4ZWN1dGlvbkNvbnRleHRJZCk7CisgICAgaWYgKGV4ZWN1dGlvbkNvbnRleHRJ
ZCkgeworICAgICAgICBlcnJvclN0cmluZyA9ICJleGVjdXRpb25Db250ZXh0SWQgaXMgbm90IHN1
cHBvcnRlZCBmb3IgSlNDb250ZXh0cyBhcyB0aGVyZSBpcyBvbmx5IG9uZSBleGVjdXRpb24gY29u
dGV4dCJfczsKKyAgICAgICAgcmV0dXJuIEluamVjdGVkU2NyaXB0KCk7CisgICAgfQogCiAgICAg
SW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHQgPSBpbmplY3RlZFNjcmlwdE1hbmFnZXIoKS5p
bmplY3RlZFNjcmlwdEZvcigmbV9nbG9iYWxPYmplY3QpOwogICAgIGlmIChpbmplY3RlZFNjcmlw
dC5oYXNOb1ZhbHVlKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL2FnZW50cy9KU0dsb2JhbE9iamVjdFJ1bnRpbWVBZ2VudC5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSlNHbG9iYWxPYmplY3RSdW50aW1lQWdlbnQuaAppbmRl
eCA2ZjBjZTkwNTlkNzIzMzgzNzhiMWQ0N2E3MWE3MjVjMzkyY2QyNzdhLi5iZmViZGE5MmEwOGE5
MWQzOGNlMmM1MTc1Njc5NjczMWQ1OWEyYzljIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL2FnZW50cy9KU0dsb2JhbE9iamVjdFJ1bnRpbWVBZ2VudC5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0pTR2xvYmFsT2JqZWN0UnVu
dGltZUFnZW50LmgKQEAgLTM5LDE1ICszOSwxNSBAQCBjbGFzcyBKU0dsb2JhbE9iamVjdFJ1bnRp
bWVBZ2VudCBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3JSdW50aW1lQWdlbnQgewogICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIEpTR2xvYmFsT2JqZWN0UnVudGltZUFn
ZW50KEpTQWdlbnRDb250ZXh0Jik7Ci0gICAgfkpTR2xvYmFsT2JqZWN0UnVudGltZUFnZW50KCkg
ZmluYWw7CisgICAgfkpTR2xvYmFsT2JqZWN0UnVudGltZUFnZW50KCk7CiAKIHByaXZhdGU6Ci0g
ICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHRGb3JFdmFsKEVycm9yU3RyaW5nJiwgY29u
c3QgaW50KiBleGVjdXRpb25Db250ZXh0SWQpIGZpbmFsOworICAgIEluamVjdGVkU2NyaXB0IGlu
amVjdGVkU2NyaXB0Rm9yRXZhbChQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBPcHRpb25hbDxQcm90
b2NvbDo6UnVudGltZTo6RXhlY3V0aW9uQ29udGV4dElkPiYmKTsKIAogICAgIC8vIE5PVEU6IEph
dmFTY3JpcHQgaW5zcGVjdG9yIGRvZXMgbm90IHlldCBuZWVkIHRvIG11dGUgYSBjb25zb2xlIGJl
Y2F1c2Ugbm8gbWVzc2FnZXMKICAgICAvLyBhcmUgc2VudCB0byB0aGUgY29uc29sZSBvdXRzaWRl
IG9mIHRoZSBBUEkgYm91bmRhcnkgb3IgY29uc29sZSBvYmplY3QuCi0gICAgdm9pZCBtdXRlQ29u
c29sZSgpIGZpbmFsIHsgfQotICAgIHZvaWQgdW5tdXRlQ29uc29sZSgpIGZpbmFsIHsgfQorICAg
IHZvaWQgbXV0ZUNvbnNvbGUoKSB7IH0KKyAgICB2b2lkIHVubXV0ZUNvbnNvbGUoKSB7IH0KIAog
ICAgIHN0ZDo6dW5pcXVlX3B0cjxSdW50aW1lRnJvbnRlbmREaXNwYXRjaGVyPiBtX2Zyb250ZW5k
RGlzcGF0Y2hlcjsKICAgICBSZWZQdHI8UnVudGltZUJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tl
bmREaXNwYXRjaGVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9wcm90b2NvbC9QYWdlLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3By
b3RvY29sL1BhZ2UuanNvbgppbmRleCAzYjhmYTE4YmQ3ZThkOTVkN2U4Zjk1YjQ0MmFmYzYzZTU1
MGNlNjNhLi5mZGU0ZjY5NjRkNDBlOGE1NjUxMTZiZTJiYzY5MmE0NTFjMmRhMTA2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Byb3RvY29sL1BhZ2UuanNvbgor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Byb3RvY29sL1BhZ2UuanNvbgpA
QCAtMjY3LDcgKzI2Nyw3IEBACiAgICAgICAgICAgICAiY29uZGl0aW9uIjogIihkZWZpbmVkKEVO
QUJMRV9EQVJLX01PREVfQ1NTKSAmJiBFTkFCTEVfREFSS19NT0RFX0NTUykgfHwgKGRlZmluZWQo
SEFWRV9PU19EQVJLX01PREVfU1VQUE9SVCkgJiYgSEFWRV9PU19EQVJLX01PREVfU1VQUE9SVCki
LAogICAgICAgICAgICAgInRhcmdldFR5cGVzIjogWyJwYWdlIl0sCiAgICAgICAgICAgICAicGFy
YW1ldGVycyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImFwcGVhcmFuY2UiLCAiJHJl
ZiI6ICJBcHBlYXJhbmNlIiwgImRlc2NyaXB0aW9uIjogIkFwcGVhcmFuY2UgbmFtZSB0byBmb3Jj
ZS4gRW1wdHkgc3RyaW5nIGRpc2FibGVzIHRoZSBvdmVycmlkZS4iIH0KKyAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogImFwcGVhcmFuY2UiLCAiJHJlZiI6ICJBcHBlYXJhbmNlIiwgIm9wdGlvbmFs
IjogdHJ1ZSB9CiAgICAgICAgICAgICBdCiAgICAgICAgIH0sCiAgICAgICAgIHsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcmVtb3RlL3NvY2tldC9SZW1vdGVJ
bnNwZWN0b3JDb25uZWN0aW9uQ2xpZW50LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3IvcmVtb3RlL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JDb25uZWN0aW9uQ2xpZW50LmNwcApp
bmRleCAwNjUyZTEyNzA4YmY4NjIzMGJlNDYyOWZlNjU3MjViYmJjMzViNjcwLi4xMTAwMDA0NzNk
Y2ZjYzQzNjQ3Njg0ODE3ZDk1MzhjNzE1YzcyODU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3JlbW90ZS9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yQ29ubmVjdGlv
bkNsaWVudC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9yZW1vdGUv
c29ja2V0L1JlbW90ZUluc3BlY3RvckNvbm5lY3Rpb25DbGllbnQuY3BwCkBAIC05MiwzMiArOTIs
MjQgQEAgT3B0aW9uYWw8UmVtb3RlSW5zcGVjdG9yQ29ubmVjdGlvbkNsaWVudDo6RXZlbnQ+IFJl
bW90ZUluc3BlY3RvckNvbm5lY3Rpb25DbGllbnQKIAogICAgIFN0cmluZyBqc29uRGF0YSA9IFN0
cmluZzo6ZnJvbVVURjgoZGF0YSk7CiAKLSAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IG1lc3NhZ2VW
YWx1ZTsKLSAgICBpZiAoIUpTT046OlZhbHVlOjpwYXJzZUpTT04oanNvbkRhdGEsIG1lc3NhZ2VW
YWx1ZSkpCisgICAgYXV0byBtZXNzYWdlVmFsdWUgPSBKU09OOjpWYWx1ZTo6cGFyc2VKU09OKGpz
b25EYXRhKTsKKyAgICBpZiAoIW1lc3NhZ2VWYWx1ZSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKIAotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG1lc3NhZ2VPYmplY3Q7Ci0gICAgaWYg
KCFtZXNzYWdlVmFsdWUtPmFzT2JqZWN0KG1lc3NhZ2VPYmplY3QpKQorICAgIGF1dG8gbWVzc2Fn
ZU9iamVjdCA9IG1lc3NhZ2VWYWx1ZS0+YXNPYmplY3QoKTsKKyAgICBpZiAoIW1lc3NhZ2VPYmpl
Y3QpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICBFdmVudCBldmVudDsKLSAg
ICBpZiAoIW1lc3NhZ2VPYmplY3QtPmdldFN0cmluZygiZXZlbnQiX3MsIGV2ZW50Lm1ldGhvZE5h
bWUpKQorCisgICAgZXZlbnQubWV0aG9kTmFtZSA9IG1lc3NhZ2VPYmplY3QtPmdldFN0cmluZygi
ZXZlbnQiX3MpOworICAgIGlmICghZXZlbnQubWV0aG9kTmFtZSkKICAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKIAogICAgIGV2ZW50LmNsaWVudElEID0gY2xpZW50SUQ7Ci0KLSAgICBDb25u
ZWN0aW9uSUQgY29ubmVjdGlvbklEOwotICAgIGlmIChtZXNzYWdlT2JqZWN0LT5nZXRJbnRlZ2Vy
KCJjb25uZWN0aW9uSUQiX3MsIGNvbm5lY3Rpb25JRCkpCi0gICAgICAgIGV2ZW50LmNvbm5lY3Rp
b25JRCA9IGNvbm5lY3Rpb25JRDsKLQotICAgIFRhcmdldElEIHRhcmdldElEOwotICAgIGlmICht
ZXNzYWdlT2JqZWN0LT5nZXRJbnRlZ2VyKCJ0YXJnZXRJRCJfcywgdGFyZ2V0SUQpKQotICAgICAg
ICBldmVudC50YXJnZXRJRCA9IHRhcmdldElEOwotCi0gICAgU3RyaW5nIG1lc3NhZ2U7Ci0gICAg
aWYgKG1lc3NhZ2VPYmplY3QtPmdldFN0cmluZygibWVzc2FnZSJfcywgbWVzc2FnZSkpCi0gICAg
ICAgIGV2ZW50Lm1lc3NhZ2UgPSBtZXNzYWdlOwotCisgICAgZXZlbnQuY29ubmVjdGlvbklEID0g
bWVzc2FnZU9iamVjdC0+Z2V0SW50ZWdlcigiY29ubmVjdGlvbklEIl9zKTsKKyAgICBldmVudC50
YXJnZXRJRCA9IG1lc3NhZ2VPYmplY3QtPmdldEludGVnZXIoInRhcmdldElEIl9zKTsKKyAgICBl
dmVudC5tZXNzYWdlID0gbWVzc2FnZU9iamVjdC0+Z2V0U3RyaW5nKCJtZXNzYWdlIl9zKTsKICAg
ICByZXR1cm4gZXZlbnQ7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2NwcF9nZW5lcmF0b3IucHkgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9jcHBfZ2VuZXJhdG9yLnB5CmluZGV4
IGY3MzM4ZjZkZDNmMTgxZTg5NWUxOWVlYzY2Y2EyMWQ1OWNiYmRhZmEuLjQ2YjkwNjU3YzM5ZTRk
MjUwM2I3YzcxZDJjNGNkZDM3OTc4NWM3Y2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2NwcF9nZW5lcmF0b3IucHkKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vY3BwX2dlbmVyYXRv
ci5weQpAQCAtNTUsMjc5ICs1NSwzMjkgQEAgY2xhc3MgQ3BwR2VuZXJhdG9yKEdlbmVyYXRvcik6
CiAgICAgICAgIHJldHVybiBzZWxmLm1vZGVsKCkuZnJhbWV3b3JrLnNldHRpbmcoJ2NwcF9wcm90
b2NvbF9ncm91cCcsICcnKQogCiAgICAgZGVmIGhlbHBlcnNfbmFtZXNwYWNlKHNlbGYpOgotICAg
ICAgICByZXR1cm4gJyVzSGVscGVycycgJSBzZWxmLnByb3RvY29sX25hbWUoKQorICAgICAgICBu
YW1lc3BhY2UgPSAnSGVscGVycycKKyAgICAgICAgaWYgc2VsZi5wcm90b2NvbF9uYW1lKCkgIT0g
J0luc3BlY3Rvcic6CisgICAgICAgICAgICBuYW1lc3BhY2UgPSBzZWxmLnByb3RvY29sX25hbWUo
KSArIG5hbWVzcGFjZQorICAgICAgICByZXR1cm4gbmFtZXNwYWNlCiAKICAgICAjIE1pc2NlbGxh
bmVvdXMgdGV4dCBtYW5pcHVsYXRpb24gcm91dGluZXMuCiAgICAgQHN0YXRpY21ldGhvZAogICAg
IGRlZiBjcHBfZ2V0dGVyX21ldGhvZF9mb3JfdHlwZShfdHlwZSk6Ci0gICAgICAgIGlmIGlzaW5z
dGFuY2UoX3R5cGUsIE9iamVjdFR5cGUpOgotICAgICAgICAgICAgcmV0dXJuICdnZXRPYmplY3Qn
Ci0gICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEFycmF5VHlwZSk6Ci0gICAgICAgICAgICBy
ZXR1cm4gJ2dldEFycmF5JwotICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBQcmltaXRpdmVU
eXBlKToKLSAgICAgICAgICAgIGlmIF90eXBlLnJhd19uYW1lKCkgPT0gJ2ludGVnZXInOgotICAg
ICAgICAgICAgICAgIHJldHVybiAnZ2V0SW50ZWdlcicKLSAgICAgICAgICAgIGVsaWYgX3R5cGUu
cmF3X25hbWUoKSA9PSAnbnVtYmVyJzoKLSAgICAgICAgICAgICAgICByZXR1cm4gJ2dldERvdWJs
ZScKLSAgICAgICAgICAgIGVsaWYgX3R5cGUucmF3X25hbWUoKSA9PSAnYW55JzoKLSAgICAgICAg
ICAgICAgICByZXR1cm4gJ2dldFZhbHVlJwotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAg
ICAgICByZXR1cm4gJ2dldCcgKyB1Y2ZpcnN0KF90eXBlLnJhd19uYW1lKCkpCiAgICAgICAgIGlm
IGlzaW5zdGFuY2UoX3R5cGUsIEFsaWFzZWRUeXBlKToKLSAgICAgICAgICAgIHJldHVybiBDcHBH
ZW5lcmF0b3IuY3BwX2dldHRlcl9tZXRob2RfZm9yX3R5cGUoX3R5cGUuYWxpYXNlZF90eXBlKQor
ICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5hbGlhc2VkX3R5cGUKKyAgICAgICAgICAgICMgZmFs
bHRocm91Z2gKKwogICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBFbnVtVHlwZSk6Ci0gICAg
ICAgICAgICByZXR1cm4gQ3BwR2VuZXJhdG9yLmNwcF9nZXR0ZXJfbWV0aG9kX2Zvcl90eXBlKF90
eXBlLnByaW1pdGl2ZV90eXBlKQorICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5wcmltaXRpdmVf
dHlwZQorICAgICAgICAgICAgIyBmYWxsdGhyb3VnaAorCisgICAgICAgIGlmIGlzaW5zdGFuY2Uo
X3R5cGUsIE9iamVjdFR5cGUpIG9yIF90eXBlLnF1YWxpZmllZF9uYW1lKCkgaW4gWydvYmplY3Qn
XToKKyAgICAgICAgICAgIHJldHVybiAnZ2V0T2JqZWN0JworCisgICAgICAgIGlmIGlzaW5zdGFu
Y2UoX3R5cGUsIEFycmF5VHlwZSkgb3IgX3R5cGUucXVhbGlmaWVkX25hbWUoKSBpbiBbJ2FycmF5
J106CisgICAgICAgICAgICByZXR1cm4gJ2dldEFycmF5JworCisgICAgICAgIGlmIGlzaW5zdGFu
Y2UoX3R5cGUsIFByaW1pdGl2ZVR5cGUpOgorICAgICAgICAgICAgaWYgX3R5cGUucmF3X25hbWUo
KSA9PSAnbnVtYmVyJzoKKyAgICAgICAgICAgICAgICByZXR1cm4gJ2dldERvdWJsZScKKyAgICAg
ICAgICAgIGlmIF90eXBlLnJhd19uYW1lKCkgPT0gJ2FueSc6CisgICAgICAgICAgICAgICAgcmV0
dXJuICdnZXRWYWx1ZScKKyAgICAgICAgICAgIHJldHVybiAnZ2V0JyArIHVjZmlyc3QoX3R5cGUu
cmF3X25hbWUoKSkKKworICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJ1bmtub3duIHR5cGUiKQog
CiAgICAgQHN0YXRpY21ldGhvZAogICAgIGRlZiBjcHBfc2V0dGVyX21ldGhvZF9mb3JfdHlwZShf
dHlwZSk6Ci0gICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIE9iamVjdFR5cGUpOgotICAgICAg
ICAgICAgcmV0dXJuICdzZXRPYmplY3QnCi0gICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEFy
cmF5VHlwZSk6Ci0gICAgICAgICAgICByZXR1cm4gJ3NldEFycmF5JwotICAgICAgICBpZiBpc2lu
c3RhbmNlKF90eXBlLCBQcmltaXRpdmVUeXBlKToKLSAgICAgICAgICAgIGlmIF90eXBlLnJhd19u
YW1lKCkgPT0gJ2ludGVnZXInOgotICAgICAgICAgICAgICAgIHJldHVybiAnc2V0SW50ZWdlcicK
LSAgICAgICAgICAgIGVsaWYgX3R5cGUucmF3X25hbWUoKSA9PSAnbnVtYmVyJzoKLSAgICAgICAg
ICAgICAgICByZXR1cm4gJ3NldERvdWJsZScKLSAgICAgICAgICAgIGVsaWYgX3R5cGUucmF3X25h
bWUoKSA9PSAnYW55JzoKLSAgICAgICAgICAgICAgICByZXR1cm4gJ3NldFZhbHVlJwotICAgICAg
ICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByZXR1cm4gJ3NldCcgKyB1Y2ZpcnN0KF90eXBl
LnJhd19uYW1lKCkpCiAgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEFsaWFzZWRUeXBlKToK
LSAgICAgICAgICAgIHJldHVybiBDcHBHZW5lcmF0b3IuY3BwX3NldHRlcl9tZXRob2RfZm9yX3R5
cGUoX3R5cGUuYWxpYXNlZF90eXBlKQorICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5hbGlhc2Vk
X3R5cGUKKyAgICAgICAgICAgICMgZmFsbHRocm91Z2gKKwogICAgICAgICBpZiBpc2luc3RhbmNl
KF90eXBlLCBFbnVtVHlwZSk6Ci0gICAgICAgICAgICByZXR1cm4gQ3BwR2VuZXJhdG9yLmNwcF9z
ZXR0ZXJfbWV0aG9kX2Zvcl90eXBlKF90eXBlLnByaW1pdGl2ZV90eXBlKQorICAgICAgICAgICAg
X3R5cGUgPSBfdHlwZS5wcmltaXRpdmVfdHlwZQorICAgICAgICAgICAgIyBmYWxsdGhyb3VnaAor
CisgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIE9iamVjdFR5cGUpIG9yIF90eXBlLnF1YWxp
ZmllZF9uYW1lKCkgaW4gWydvYmplY3QnXToKKyAgICAgICAgICAgIHJldHVybiAnc2V0T2JqZWN0
JworCisgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEFycmF5VHlwZSkgb3IgX3R5cGUucXVh
bGlmaWVkX25hbWUoKSBpbiBbJ2FycmF5J106CisgICAgICAgICAgICByZXR1cm4gJ3NldEFycmF5
JworCisgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIFByaW1pdGl2ZVR5cGUpOgorICAgICAg
ICAgICAgaWYgX3R5cGUucmF3X25hbWUoKSA9PSAnbnVtYmVyJzoKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gJ3NldERvdWJsZScKKyAgICAgICAgICAgIGlmIF90eXBlLnJhd19uYW1lKCkgPT0gJ2Fu
eSc6CisgICAgICAgICAgICAgICAgcmV0dXJuICdzZXRWYWx1ZScKKyAgICAgICAgICAgIHJldHVy
biAnc2V0JyArIHVjZmlyc3QoX3R5cGUucmF3X25hbWUoKSkKKworICAgICAgICByYWlzZSBWYWx1
ZUVycm9yKCJ1bmtub3duIHR5cGUiKQogCiAgICAgIyBHZW5lcmF0ZSB0eXBlIHJlcHJlc2VudGF0
aW9ucyBmb3IgdmFyaW91cyBzaXR1YXRpb25zLgogICAgIEBzdGF0aWNtZXRob2QKICAgICBkZWYg
Y3BwX3Byb3RvY29sX3R5cGVfZm9yX3R5cGUoX3R5cGUpOgogICAgICAgICBpZiBpc2luc3RhbmNl
KF90eXBlLCBBbGlhc2VkVHlwZSk6Ci0gICAgICAgICAgICBfdHlwZSA9IF90eXBlLmFsaWFzZWRf
dHlwZSAgIyBGYWxsIHRocm91Z2ggdG8gZW51bSBvciBwcmltaXRpdmUuCisgICAgICAgICAgICBf
dHlwZSA9IF90eXBlLmFsaWFzZWRfdHlwZQorICAgICAgICAgICAgIyBmYWxsdGhyb3VnaAogCi0g
ICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIE9iamVjdFR5cGUpIGFuZCBsZW4oX3R5cGUubWVt
YmVycykgPT0gMDoKLSAgICAgICAgICAgIHJldHVybiAnSlNPTjo6T2JqZWN0JwogICAgICAgICBp
ZiBpc2luc3RhbmNlKF90eXBlLCBBcnJheVR5cGUpOgotICAgICAgICAgICAgaWYgX3R5cGUucmF3
X25hbWUoKSBpcyBOb25lOiAgIyBPdGhlcndpc2UsIGZhbGwgdGhyb3VnaCBhbmQgdXNlIHR5cGVk
ZWYnZCBuYW1lLgorICAgICAgICAgICAgaWYgX3R5cGUucmF3X25hbWUoKSBpcyBOb25lOgogICAg
ICAgICAgICAgICAgIHJldHVybiAnSlNPTjo6QXJyYXlPZjwlcz4nICUgQ3BwR2VuZXJhdG9yLmNw
cF9wcm90b2NvbF90eXBlX2Zvcl90eXBlKF90eXBlLmVsZW1lbnRfdHlwZSkKKyAgICAgICAgICAg
ICMgZmFsbHRocm91Z2gKKwogICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCAoT2JqZWN0VHlw
ZSwgRW51bVR5cGUsIEFycmF5VHlwZSkpOgotICAgICAgICAgICAgcmV0dXJuICdJbnNwZWN0b3I6
OlByb3RvY29sOjolczo6JXMnICUgKF90eXBlLnR5cGVfZG9tYWluKCkuZG9tYWluX25hbWUsIF90
eXBlLnJhd19uYW1lKCkpCisgICAgICAgICAgICByZXR1cm4gJ1Byb3RvY29sOjolczo6JXMnICUg
KF90eXBlLnR5cGVfZG9tYWluKCkuZG9tYWluX25hbWUsIF90eXBlLnJhd19uYW1lKCkpCisKICAg
ICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgUHJpbWl0aXZlVHlwZSk6CiAgICAgICAgICAgICBy
ZXR1cm4gQ3BwR2VuZXJhdG9yLmNwcF9uYW1lX2Zvcl9wcmltaXRpdmVfdHlwZShfdHlwZSkKIAot
ICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgY3BwX3Byb3RvY29sX3R5cGVfZm9yX3R5cGVfbWVt
YmVyKHR5cGVfbWVtYmVyLCBvYmplY3RfZGVjbGFyYXRpb24pOgotICAgICAgICBpZiBpc2luc3Rh
bmNlKHR5cGVfbWVtYmVyLnR5cGUsIEVudW1UeXBlKSBhbmQgdHlwZV9tZW1iZXIudHlwZS5pc19h
bm9ueW1vdXM6Ci0gICAgICAgICAgICByZXR1cm4gJzo6Jy5qb2luKFtDcHBHZW5lcmF0b3IuY3Bw
X3Byb3RvY29sX3R5cGVfZm9yX3R5cGUob2JqZWN0X2RlY2xhcmF0aW9uLnR5cGUpLCB1Y2ZpcnN0
KHR5cGVfbWVtYmVyLm1lbWJlcl9uYW1lKV0pCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBy
ZXR1cm4gQ3BwR2VuZXJhdG9yLmNwcF9wcm90b2NvbF90eXBlX2Zvcl90eXBlKHR5cGVfbWVtYmVy
LnR5cGUpCisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInVua25vd24gdHlwZSIpCiAKICAgICBA
c3RhdGljbWV0aG9kCi0gICAgZGVmIGNwcF90eXBlX2Zvcl91bmNoZWNrZWRfZm9ybWFsX2luX3Bh
cmFtZXRlcihwYXJhbWV0ZXIpOgotICAgICAgICBfdHlwZSA9IHBhcmFtZXRlci50eXBlCisgICAg
ZGVmIGNwcF90eXBlX2Zvcl90eXBlX21lbWJlcl9hcmd1bWVudChfdHlwZSwgbmFtZSk6CiAgICAg
ICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEFsaWFzZWRUeXBlKToKLSAgICAgICAgICAgIF90eXBl
ID0gX3R5cGUuYWxpYXNlZF90eXBlICAjIEZhbGwgdGhyb3VnaCB0byBlbnVtIG9yIHByaW1pdGl2
ZS4KKyAgICAgICAgICAgIF90eXBlID0gX3R5cGUuYWxpYXNlZF90eXBlCisgICAgICAgICAgICAj
IGZhbGx0aHJvdWdoCiAKLSAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgRW51bVR5cGUpOgot
ICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5wcmltaXRpdmVfdHlwZSAgIyBGYWxsIHRocm91Z2gg
dG8gcHJpbWl0aXZlLgotCi0gICAgICAgICMgVGhpcyBoYW5kbGVzIHRoZSAnYW55JyB0eXBlIGFu
ZCBvYmplY3RzIHdpdGggZGVmaW5lZCBwcm9wZXJ0aWVzLgotICAgICAgICBpZiBpc2luc3RhbmNl
KF90eXBlLCBPYmplY3RUeXBlKSBvciBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpID09ICdvYmplY3Qn
OgotICAgICAgICAgICAgY3BwX25hbWUgPSAnSlNPTjo6T2JqZWN0JwotICAgICAgICAgICAgaWYg
cGFyYW1ldGVyLmlzX29wdGlvbmFsOgotICAgICAgICAgICAgICAgIHJldHVybiAnY29uc3QgJXMq
JyAlIGNwcF9uYW1lCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJldHVybiAn
Y29uc3QgJXMmJyAlIGNwcF9uYW1lCi0gICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEFycmF5
VHlwZSk6Ci0gICAgICAgICAgICBjcHBfbmFtZSA9ICdKU09OOjpBcnJheScKLSAgICAgICAgICAg
IGlmIHBhcmFtZXRlci5pc19vcHRpb25hbDoKLSAgICAgICAgICAgICAgICByZXR1cm4gJ2NvbnN0
ICVzKicgJSBjcHBfbmFtZQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByZXR1
cm4gJ2NvbnN0ICVzJicgJSBjcHBfbmFtZQotICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBQ
cmltaXRpdmVUeXBlKToKLSAgICAgICAgICAgIGNwcF9uYW1lID0gQ3BwR2VuZXJhdG9yLmNwcF9u
YW1lX2Zvcl9wcmltaXRpdmVfdHlwZShfdHlwZSkKLSAgICAgICAgICAgIGlmIHBhcmFtZXRlci5p
c19vcHRpb25hbDoKLSAgICAgICAgICAgICAgICByZXR1cm4gJ2NvbnN0ICVzKicgJSBjcHBfbmFt
ZQotICAgICAgICAgICAgZWxpZiBfdHlwZS5yYXdfbmFtZSgpIGluIFsnc3RyaW5nJ106Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuICdjb25zdCAlcyYnICUgY3BwX25hbWUKLSAgICAgICAgICAgIGVs
c2U6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGNwcF9uYW1lCi0KLSAgICAgICAgcmV0dXJuICJ1
bmtub3duX3VuY2hlY2tlZF9mb3JtYWxfaW5fcGFyYW1ldGVyX3R5cGUiCi0KLSAgICBAc3RhdGlj
bWV0aG9kCi0gICAgZGVmIGNwcF90eXBlX2Zvcl9jaGVja2VkX2Zvcm1hbF9ldmVudF9wYXJhbWV0
ZXIocGFyYW1ldGVyKToKLSAgICAgICAgcmV0dXJuIENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3Jf
dHlwZV93aXRoX25hbWUocGFyYW1ldGVyLnR5cGUsIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwg
cGFyYW1ldGVyLmlzX29wdGlvbmFsKQotCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBjcHBf
dHlwZV9mb3JfdHlwZV9tZW1iZXIobWVtYmVyKToKLSAgICAgICAgcmV0dXJuIENwcEdlbmVyYXRv
ci5jcHBfdHlwZV9mb3JfdHlwZV93aXRoX25hbWUobWVtYmVyLnR5cGUsIG1lbWJlci5tZW1iZXJf
bmFtZSwgRmFsc2UpCi0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIGNwcF90eXBlX2Zvcl90
eXBlX3dpdGhfbmFtZShfdHlwZSwgdHlwZV9uYW1lLCBpc19vcHRpb25hbCk6CiAgICAgICAgIGlm
IGlzaW5zdGFuY2UoX3R5cGUsIChBcnJheVR5cGUsIE9iamVjdFR5cGUpKToKLSAgICAgICAgICAg
IHJldHVybiAnUmVmUHRyPCVzPicgJSBDcHBHZW5lcmF0b3IuY3BwX3Byb3RvY29sX3R5cGVfZm9y
X3R5cGUoX3R5cGUpCi0gICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEFsaWFzZWRUeXBlKToK
LSAgICAgICAgICAgIGJ1aWxkZXJfdHlwZSA9IENwcEdlbmVyYXRvci5jcHBfcHJvdG9jb2xfdHlw
ZV9mb3JfdHlwZShfdHlwZSkKLSAgICAgICAgICAgIGlmIGlzX29wdGlvbmFsOgotICAgICAgICAg
ICAgICAgIHJldHVybiAnY29uc3QgJXMqJyAlIGJ1aWxkZXJfdHlwZQotICAgICAgICAgICAgZWxp
ZiBfdHlwZS5hbGlhc2VkX3R5cGUucXVhbGlmaWVkX25hbWUoKSBpbiBbJ2ludGVnZXInLCAnbnVt
YmVyJ106Ci0gICAgICAgICAgICAgICAgcmV0dXJuIENwcEdlbmVyYXRvci5jcHBfbmFtZV9mb3Jf
cHJpbWl0aXZlX3R5cGUoX3R5cGUuYWxpYXNlZF90eXBlKQotICAgICAgICAgICAgZWxpZiBfdHlw
ZS5hbGlhc2VkX3R5cGUucXVhbGlmaWVkX25hbWUoKSBpbiBbJ3N0cmluZyddOgotICAgICAgICAg
ICAgICAgIHJldHVybiAnY29uc3QgJXMmJyAlIGJ1aWxkZXJfdHlwZQotICAgICAgICAgICAgZWxz
ZToKLSAgICAgICAgICAgICAgICByZXR1cm4gYnVpbGRlcl90eXBlCi0gICAgICAgIGlmIGlzaW5z
dGFuY2UoX3R5cGUsIFByaW1pdGl2ZVR5cGUpOgotICAgICAgICAgICAgY3BwX25hbWUgPSBDcHBH
ZW5lcmF0b3IuY3BwX25hbWVfZm9yX3ByaW1pdGl2ZV90eXBlKF90eXBlKQotICAgICAgICAgICAg
aWYgX3R5cGUucXVhbGlmaWVkX25hbWUoKSBpbiBbJ29iamVjdCddOgotICAgICAgICAgICAgICAg
IHJldHVybiAnUmVmUHRyPEpTT046Ok9iamVjdD4nCi0gICAgICAgICAgICBlbGlmIF90eXBlLnF1
YWxpZmllZF9uYW1lKCkgaW4gWydhbnknXToKLSAgICAgICAgICAgICAgICByZXR1cm4gJ1JlZlB0
cjxKU09OOjpWYWx1ZT4nCi0gICAgICAgICAgICBlbGlmIGlzX29wdGlvbmFsOgotICAgICAgICAg
ICAgICAgIHJldHVybiAnY29uc3QgJXMqJyAlIGNwcF9uYW1lCi0gICAgICAgICAgICBlbGlmIF90
eXBlLnF1YWxpZmllZF9uYW1lKCkgaW4gWydzdHJpbmcnXToKLSAgICAgICAgICAgICAgICByZXR1
cm4gJ2NvbnN0ICVzJicgJSBjcHBfbmFtZQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAg
ICAgICByZXR1cm4gY3BwX25hbWUKKyAgICAgICAgICAgIHJldHVybiAnUmVmPCVzPiYmJyAlIENw
cEdlbmVyYXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZShfdHlwZSkKKworICAgICAgICBp
ZiBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpID09ICdvYmplY3QnOgorICAgICAgICAgICAgcmV0dXJu
ICdSZWY8SlNPTjo6T2JqZWN0PiYmJworCisgICAgICAgIGlmIF90eXBlLnF1YWxpZmllZF9uYW1l
KCkgPT0gJ2FycmF5JzoKKyAgICAgICAgICAgIHJldHVybiAnUmVmPEpTT046OkFycmF5PiYmJwor
CisgICAgICAgIGlmIF90eXBlLnF1YWxpZmllZF9uYW1lKCkgPT0gJ2FueSc6CisgICAgICAgICAg
ICByZXR1cm4gJ1JlZjxKU09OOjpWYWx1ZT4mJicKKworICAgICAgICBpZiBfdHlwZS5xdWFsaWZp
ZWRfbmFtZSgpID09ICdzdHJpbmcnOgorICAgICAgICAgICAgcmV0dXJuICdjb25zdCAlcyYnICUg
Q3BwR2VuZXJhdG9yLmNwcF9uYW1lX2Zvcl9wcmltaXRpdmVfdHlwZShfdHlwZSkKKwogICAgICAg
ICBpZiBpc2luc3RhbmNlKF90eXBlLCBFbnVtVHlwZSk6CiAgICAgICAgICAgICBpZiBfdHlwZS5p
c19hbm9ueW1vdXM6Ci0gICAgICAgICAgICAgICAgZW51bV90eXBlX25hbWUgPSB1Y2ZpcnN0KHR5
cGVfbmFtZSkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgZW51bV90eXBlX25h
bWUgPSAnSW5zcGVjdG9yOjpQcm90b2NvbDo6JXM6OiVzJyAlIChfdHlwZS50eXBlX2RvbWFpbigp
LmRvbWFpbl9uYW1lLCBfdHlwZS5yYXdfbmFtZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiB1
Y2ZpcnN0KG5hbWUpCisgICAgICAgICAgICByZXR1cm4gJ1Byb3RvY29sOjolczo6JXMnICUgKF90
eXBlLnR5cGVfZG9tYWluKCkuZG9tYWluX25hbWUsIF90eXBlLnJhd19uYW1lKCkpCiAKLSAgICAg
ICAgICAgIGlmIGlzX29wdGlvbmFsOgotICAgICAgICAgICAgICAgIHJldHVybiAnJXMqJyAlIGVu
dW1fdHlwZV9uYW1lCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJldHVybiAn
JXMnICUgZW51bV90eXBlX25hbWUKLQotICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgY3BwX3R5
cGVfZm9yX2Zvcm1hbF9vdXRfcGFyYW1ldGVyKHBhcmFtZXRlcik6Ci0gICAgICAgIF90eXBlID0g
cGFyYW1ldGVyLnR5cGUKLQotICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBBbGlhc2VkVHlw
ZSk6Ci0gICAgICAgICAgICBfdHlwZSA9IF90eXBlLmFsaWFzZWRfdHlwZSAgIyBGYWxsIHRocm91
Z2guCi0KLSAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgKE9iamVjdFR5cGUsIEFycmF5VHlw
ZSkpOgotICAgICAgICAgICAgcmV0dXJuICdSZWZQdHI8JXM+JicgJSBDcHBHZW5lcmF0b3IuY3Bw
X3Byb3RvY29sX3R5cGVfZm9yX3R5cGUoX3R5cGUpCiAgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5
cGUsIFByaW1pdGl2ZVR5cGUpOgotICAgICAgICAgICAgY3BwX25hbWUgPSBDcHBHZW5lcmF0b3Iu
Y3BwX25hbWVfZm9yX3ByaW1pdGl2ZV90eXBlKF90eXBlKQotICAgICAgICAgICAgaWYgcGFyYW1l
dGVyLmlzX29wdGlvbmFsOgotICAgICAgICAgICAgICAgIHJldHVybiAiT3B0aW9uYWw8JXM+JiIg
JSBjcHBfbmFtZQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByZXR1cm4gJyVz
KicgJSBjcHBfbmFtZQotICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBFbnVtVHlwZSk6Ci0g
ICAgICAgICAgICBpZiBfdHlwZS5pc19hbm9ueW1vdXM6Ci0gICAgICAgICAgICAgICAgcmV0dXJu
ICclc0JhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6JXMqJyAlIChfdHlwZS50eXBlX2RvbWFpbigp
LmRvbWFpbl9uYW1lLCB1Y2ZpcnN0KHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkpCi0gICAgICAg
ICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJldHVybiAnSW5zcGVjdG9yOjpQcm90b2NvbDo6
JXM6OiVzKicgJSAoX3R5cGUudHlwZV9kb21haW4oKS5kb21haW5fbmFtZSwgX3R5cGUucmF3X25h
bWUoKSkKKyAgICAgICAgICAgIHJldHVybiBDcHBHZW5lcmF0b3IuY3BwX25hbWVfZm9yX3ByaW1p
dGl2ZV90eXBlKF90eXBlKQogCi0gICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInVua25vd24gZm9y
bWFsIG91dCBwYXJhbWV0ZXIgdHlwZS4iKQotCi0gICAgIyBGSVhNRTogdGhpcyBpcyBvbmx5IHNs
aWdodGx5IGRpZmZlcmVudCBmcm9tIG91dCBwYXJhbWV0ZXJzOyB0aGV5IGNvdWxkIGJlIHVuaWZp
ZWQuCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBjcHBfdHlwZV9mb3JfZm9ybWFsX2FzeW5j
X3BhcmFtZXRlcihwYXJhbWV0ZXIpOgotICAgICAgICBfdHlwZSA9IHBhcmFtZXRlci50eXBlCi0g
ICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEFsaWFzZWRUeXBlKToKLSAgICAgICAgICAgIF90
eXBlID0gX3R5cGUuYWxpYXNlZF90eXBlICAjIEZhbGwgdGhyb3VnaC4KLQotICAgICAgICBpZiBp
c2luc3RhbmNlKF90eXBlLCAoT2JqZWN0VHlwZSwgQXJyYXlUeXBlKSk6Ci0gICAgICAgICAgICBy
ZXR1cm4gJ1JlZlB0cjwlcz4mJicgJSBDcHBHZW5lcmF0b3IuY3BwX3Byb3RvY29sX3R5cGVfZm9y
X3R5cGUoX3R5cGUpCi0gICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIFByaW1pdGl2ZVR5cGUp
OgotICAgICAgICAgICAgY3BwX25hbWUgPSBDcHBHZW5lcmF0b3IuY3BwX25hbWVfZm9yX3ByaW1p
dGl2ZV90eXBlKF90eXBlKQotICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgot
ICAgICAgICAgICAgICAgIHJldHVybiAiT3B0aW9uYWw8JXM+JiIgJSBjcHBfbmFtZQotICAgICAg
ICAgICAgZWxpZiBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpIGluIFsnaW50ZWdlcicsICdudW1iZXIn
XToKLSAgICAgICAgICAgICAgICByZXR1cm4gQ3BwR2VuZXJhdG9yLmNwcF9uYW1lX2Zvcl9wcmlt
aXRpdmVfdHlwZShfdHlwZSkKLSAgICAgICAgICAgIGVsaWYgX3R5cGUucXVhbGlmaWVkX25hbWUo
KSBpbiBbJ3N0cmluZyddOgotICAgICAgICAgICAgICAgIHJldHVybiAnY29uc3QgJXMmJyAlIGNw
cF9uYW1lCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJldHVybiBjcHBfbmFt
ZQotICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBFbnVtVHlwZSk6Ci0gICAgICAgICAgICBp
ZiBfdHlwZS5pc19hbm9ueW1vdXM6Ci0gICAgICAgICAgICAgICAgY3BwX25hbWUgPSAnJXNCYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXI6OiVzJyAlIChfdHlwZS50eXBlX2RvbWFpbigpLmRvbWFpbl9u
YW1lLCB1Y2ZpcnN0KHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkpCi0gICAgICAgICAgICBlbHNl
OgotICAgICAgICAgICAgICAgIGNwcF9uYW1lID0gJ0luc3BlY3Rvcjo6UHJvdG9jb2w6OiVzOjol
cycgJSAoX3R5cGUudHlwZV9kb21haW4oKS5kb21haW5fbmFtZSwgX3R5cGUucmF3X25hbWUoKSkK
LQotICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgotICAgICAgICAgICAgICAg
IHJldHVybiAiT3B0aW9uYWw8JXM+IiAlIGNwcF9uYW1lCi0gICAgICAgICAgICBlbHNlOgotICAg
ICAgICAgICAgICAgIHJldHVybiBjcHBfbmFtZQotCi0gICAgICAgIHJhaXNlIFZhbHVlRXJyb3Io
IlVua25vd24gZm9ybWFsIGFzeW5jIHBhcmFtZXRlciB0eXBlLiIpCisgICAgICAgIHJhaXNlIFZh
bHVlRXJyb3IoInVua25vd24gdHlwZSIpCiAKICAgICAjIEluLXBhcmFtZXRlcnMgZG9uJ3QgdXNl
IGJ1aWxkZXIgdHlwZXMsIGJlY2F1c2UgdGhleSBjb3VsZCBiZSBwYXNzZWQKICAgICAjICJvcGVu
IHR5cGVzIiB0aGF0IGFyZSBtYW51YWxseSBjb25zdHJ1Y3RlZCBvdXQgb2YgSW5zcGVjdG9yT2Jq
ZWN0cy4KLQotICAgICMgRklYTUU6IE9ubHkgcGFyYW1ldGVycyB0aGF0IGFyZSBhY3R1YWxseSBv
cGVuIHR5cGVzIHNob3VsZCBuZWVkIG5vbi1idWlsZGVyIHBhcmFtZXRlciB0eXBlcy4KICAgICBA
c3RhdGljbWV0aG9kCi0gICAgZGVmIGNwcF90eXBlX2Zvcl9zdGFja19pbl9wYXJhbWV0ZXIocGFy
YW1ldGVyKToKLSAgICAgICAgX3R5cGUgPSBwYXJhbWV0ZXIudHlwZQorICAgIGRlZiBjcHBfdHlw
ZV9mb3JfY29tbWFuZF9wYXJhbWV0ZXIoX3R5cGUsIGlzX29wdGlvbmFsKToKICAgICAgICAgaWYg
aXNpbnN0YW5jZShfdHlwZSwgQWxpYXNlZFR5cGUpOgotICAgICAgICAgICAgX3R5cGUgPSBfdHlw
ZS5hbGlhc2VkX3R5cGUgICMgRmFsbCB0aHJvdWdoLgorICAgICAgICAgICAgX3R5cGUgPSBfdHlw
ZS5hbGlhc2VkX3R5cGUKKyAgICAgICAgICAgICMgZmFsbHRocm91Z2gKKworICAgICAgICBpZiBp
c2luc3RhbmNlKF90eXBlLCBFbnVtVHlwZSkgYW5kIF90eXBlLmlzX2Fub255bW91czoKKyAgICAg
ICAgICAgIF90eXBlID0gX3R5cGUucHJpbWl0aXZlX3R5cGUKKyAgICAgICAgICAgICMgZmFsbHRo
cm91Z2gKKworICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBPYmplY3RUeXBlKSBvciBfdHlw
ZS5xdWFsaWZpZWRfbmFtZSgpID09ICdvYmplY3QnOgorICAgICAgICAgICAgaWYgaXNfb3B0aW9u
YWw6CisgICAgICAgICAgICAgICAgcmV0dXJuICdSZWZQdHI8SlNPTjo6T2JqZWN0PiYmJworICAg
ICAgICAgICAgcmV0dXJuICdSZWY8SlNPTjo6T2JqZWN0PiYmJworCisgICAgICAgIGlmIGlzaW5z
dGFuY2UoX3R5cGUsIEFycmF5VHlwZSkgb3IgX3R5cGUucXVhbGlmaWVkX25hbWUoKSA9PSAnYXJy
YXknOgorICAgICAgICAgICAgaWYgaXNfb3B0aW9uYWw6CisgICAgICAgICAgICAgICAgcmV0dXJu
ICdSZWZQdHI8SlNPTjo6QXJyYXk+JiYnCisgICAgICAgICAgICByZXR1cm4gJ1JlZjxKU09OOjpB
cnJheT4mJicKKworICAgICAgICBpZiBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpID09ICdhbnknOgor
ICAgICAgICAgICAgaWYgaXNfb3B0aW9uYWw6CisgICAgICAgICAgICAgICAgcmV0dXJuICdSZWZQ
dHI8SlNPTjo6VmFsdWU+JiYnCisgICAgICAgICAgICByZXR1cm4gJ1JlZjxKU09OOjpWYWx1ZT4m
JicKKworICAgICAgICBpZiBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpID09ICdzdHJpbmcnOgorICAg
ICAgICAgICAgcmV0dXJuICdjb25zdCAlcyYnICUgQ3BwR2VuZXJhdG9yLmNwcF9uYW1lX2Zvcl9w
cmltaXRpdmVfdHlwZShfdHlwZSkKIAogICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBFbnVt
VHlwZSk6Ci0gICAgICAgICAgICBfdHlwZSA9IF90eXBlLnByaW1pdGl2ZV90eXBlICAjIEZhbGwg
dGhyb3VnaC4KLQotICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBPYmplY3RUeXBlKToKLSAg
ICAgICAgICAgIHJldHVybiAiUmVmUHRyPEpTT046Ok9iamVjdD4iCi0gICAgICAgIGlmIGlzaW5z
dGFuY2UoX3R5cGUsIEFycmF5VHlwZSk6Ci0gICAgICAgICAgICByZXR1cm4gIlJlZlB0cjxKU09O
OjpBcnJheT4iCi0gICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIFByaW1pdGl2ZVR5cGUpOgor
ICAgICAgICAgICAgY3BwX25hbWUgPSAnUHJvdG9jb2w6OiVzOjolcycgJSAoX3R5cGUudHlwZV9k
b21haW4oKS5kb21haW5fbmFtZSwgX3R5cGUucmF3X25hbWUoKSkKKyAgICAgICAgZWxpZiBpc2lu
c3RhbmNlKF90eXBlLCBQcmltaXRpdmVUeXBlKToKICAgICAgICAgICAgIGNwcF9uYW1lID0gQ3Bw
R2VuZXJhdG9yLmNwcF9uYW1lX2Zvcl9wcmltaXRpdmVfdHlwZShfdHlwZSkKLSAgICAgICAgICAg
IGlmIF90eXBlLnF1YWxpZmllZF9uYW1lKCkgaW4gWydhbnknLCAnb2JqZWN0J106Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuICJSZWZQdHI8JXM+IiAlIENwcEdlbmVyYXRvci5jcHBfbmFtZV9mb3Jf
cHJpbWl0aXZlX3R5cGUoX3R5cGUpCi0gICAgICAgICAgICBlbGlmIHBhcmFtZXRlci5pc19vcHRp
b25hbCBhbmQgX3R5cGUucXVhbGlmaWVkX25hbWUoKSBub3QgaW4gWydib29sZWFuJywgJ3N0cmlu
ZycsICdpbnRlZ2VyJywgJ251bWJlciddOgotICAgICAgICAgICAgICAgIHJldHVybiAiT3B0aW9u
YWw8JXM+IiAlIGNwcF9uYW1lCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJl
dHVybiBjcHBfbmFtZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJv
cigidW5rbm93biB0eXBlIikKKworICAgICAgICBpZiBpc19vcHRpb25hbDoKKyAgICAgICAgICAg
IGNwcF9uYW1lID0gJ09wdGlvbmFsPCVzPiYmJyAlIGNwcF9uYW1lCisgICAgICAgIHJldHVybiBj
cHBfbmFtZQogCiAgICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBjcHBfdHlwZV9mb3Jfc3RhY2tf
b3V0X3BhcmFtZXRlcihwYXJhbWV0ZXIpOgotICAgICAgICBfdHlwZSA9IHBhcmFtZXRlci50eXBl
CisgICAgZGVmIGNwcF90eXBlX2Zvcl9jb21tYW5kX3JldHVybl9kZWNsYXJhdGlvbihfdHlwZSwg
aXNfb3B0aW9uYWwpOgorICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBBbGlhc2VkVHlwZSk6
CisgICAgICAgICAgICBfdHlwZSA9IF90eXBlLmFsaWFzZWRfdHlwZQorICAgICAgICAgICAgIyBm
YWxsdGhyb3VnaAorCisgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKSBhbmQg
X3R5cGUuaXNfYW5vbnltb3VzOgorICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5wcmltaXRpdmVf
dHlwZQorICAgICAgICAgICAgIyBmYWxsdGhyb3VnaAorCiAgICAgICAgIGlmIGlzaW5zdGFuY2Uo
X3R5cGUsIChBcnJheVR5cGUsIE9iamVjdFR5cGUpKToKLSAgICAgICAgICAgIHJldHVybiAnUmVm
UHRyPCVzPicgJSBDcHBHZW5lcmF0b3IuY3BwX3Byb3RvY29sX3R5cGVfZm9yX3R5cGUoX3R5cGUp
Ci0gICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEFsaWFzZWRUeXBlKToKLSAgICAgICAgICAg
IGJ1aWxkZXJfdHlwZSA9IENwcEdlbmVyYXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZShf
dHlwZSkKLSAgICAgICAgICAgIGlmIHBhcmFtZXRlci5pc19vcHRpb25hbDoKLSAgICAgICAgICAg
ICAgICByZXR1cm4gIk9wdGlvbmFsPCVzPiIgJSBidWlsZGVyX3R5cGUKLSAgICAgICAgICAgIHJl
dHVybiAnJXMnICUgYnVpbGRlcl90eXBlCi0gICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIFBy
aW1pdGl2ZVR5cGUpOgotICAgICAgICAgICAgY3BwX25hbWUgPSBDcHBHZW5lcmF0b3IuY3BwX25h
bWVfZm9yX3ByaW1pdGl2ZV90eXBlKF90eXBlKQotICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlz
X29wdGlvbmFsOgotICAgICAgICAgICAgICAgIHJldHVybiAiT3B0aW9uYWw8JXM+IiAlIGNwcF9u
YW1lCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJldHVybiBjcHBfbmFtZQor
ICAgICAgICAgICAgaWYgaXNfb3B0aW9uYWw6CisgICAgICAgICAgICAgICAgcmV0dXJuICdSZWZQ
dHI8JXM+JyAlIENwcEdlbmVyYXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZShfdHlwZSkK
KyAgICAgICAgICAgIHJldHVybiAnUmVmPCVzPicgJSBDcHBHZW5lcmF0b3IuY3BwX3Byb3RvY29s
X3R5cGVfZm9yX3R5cGUoX3R5cGUpCisKKyAgICAgICAgaWYgX3R5cGUucXVhbGlmaWVkX25hbWUo
KSA9PSAnb2JqZWN0JzoKKyAgICAgICAgICAgIGlmIGlzX29wdGlvbmFsOgorICAgICAgICAgICAg
ICAgIHJldHVybiAnUmVmUHRyPEpTT046Ok9iamVjdD4nCisgICAgICAgICAgICByZXR1cm4gJ1Jl
ZjxKU09OOjpPYmplY3Q+JworCisgICAgICAgIGlmIF90eXBlLnF1YWxpZmllZF9uYW1lKCkgPT0g
J2FycmF5JzoKKyAgICAgICAgICAgIGlmIGlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAgIHJl
dHVybiAnUmVmUHRyPEpTT046OkFycmF5PicKKyAgICAgICAgICAgIHJldHVybiAnUmVmPEpTT046
OkFycmF5PicKKworICAgICAgICBpZiBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpID09ICdhbnknOgor
ICAgICAgICAgICAgaWYgaXNfb3B0aW9uYWw6CisgICAgICAgICAgICAgICAgcmV0dXJuICdSZWZQ
dHI8SlNPTjo6VmFsdWU+JworICAgICAgICAgICAgcmV0dXJuICdSZWY8SlNPTjo6VmFsdWU+Jwor
CisgICAgICAgIGlmIF90eXBlLnF1YWxpZmllZF9uYW1lKCkgPT0gJ3N0cmluZyc6CisgICAgICAg
ICAgICByZXR1cm4gQ3BwR2VuZXJhdG9yLmNwcF9uYW1lX2Zvcl9wcmltaXRpdmVfdHlwZShfdHlw
ZSkKKwogICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBFbnVtVHlwZSk6Ci0gICAgICAgICAg
ICBpZiBfdHlwZS5pc19hbm9ueW1vdXM6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICclc0JhY2tl
bmREaXNwYXRjaGVySGFuZGxlcjo6JXMnICUgKF90eXBlLnR5cGVfZG9tYWluKCkuZG9tYWluX25h
bWUsIHVjZmlyc3QocGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKSkKLSAgICAgICAgICAgIGVsc2U6
Ci0gICAgICAgICAgICAgICAgcmV0dXJuICdJbnNwZWN0b3I6OlByb3RvY29sOjolczo6JXMnICUg
KF90eXBlLnR5cGVfZG9tYWluKCkuZG9tYWluX25hbWUsIF90eXBlLnJhd19uYW1lKCkpCisgICAg
ICAgICAgICBjcHBfbmFtZSA9ICdQcm90b2NvbDo6JXM6OiVzJyAlIChfdHlwZS50eXBlX2RvbWFp
bigpLmRvbWFpbl9uYW1lLCBfdHlwZS5yYXdfbmFtZSgpKQorICAgICAgICBlbGlmIGlzaW5zdGFu
Y2UoX3R5cGUsIFByaW1pdGl2ZVR5cGUpOgorICAgICAgICAgICAgY3BwX25hbWUgPSBDcHBHZW5l
cmF0b3IuY3BwX25hbWVfZm9yX3ByaW1pdGl2ZV90eXBlKF90eXBlKQorICAgICAgICBlbHNlOgor
ICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigidW5rbm93biB0eXBlIikKKworICAgICAgICBp
ZiBpc19vcHRpb25hbDoKKyAgICAgICAgICAgIGNwcF9uYW1lID0gJ09wdGlvbmFsPCVzPicgJSBj
cHBfbmFtZQorICAgICAgICByZXR1cm4gY3BwX25hbWUKIAogICAgIEBzdGF0aWNtZXRob2QKLSAg
ICBkZWYgY3BwX2Fzc2VydGlvbl9tZXRob2RfZm9yX3R5cGVfbWVtYmVyKHR5cGVfbWVtYmVyLCBv
YmplY3RfZGVjbGFyYXRpb24pOgorICAgIGRlZiBjcHBfdHlwZV9mb3JfY29tbWFuZF9yZXR1cm5f
YXJndW1lbnQoX3R5cGUsIGlzX29wdGlvbmFsKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlw
ZSwgQWxpYXNlZFR5cGUpOgorICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5hbGlhc2VkX3R5cGUK
KyAgICAgICAgICAgICMgZmFsbHRocm91ZwogCi0gICAgICAgIGRlZiBhc3NlcnRpb25fbWV0aG9k
X2Zvcl90eXBlKF90eXBlKToKLSAgICAgICAgICAgIHJldHVybiAnQmluZGluZ1RyYWl0czwlcz46
OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlJyAlIENwcEdlbmVyYXRvci5jcHBfcHJvdG9jb2xf
dHlwZV9mb3JfdHlwZShfdHlwZSkKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgRW51bVR5
cGUpIGFuZCBfdHlwZS5pc19hbm9ueW1vdXM6CisgICAgICAgICAgICBfdHlwZSA9IF90eXBlLnBy
aW1pdGl2ZV90eXBlCisgICAgICAgICAgICAjIGZhbGx0aHJvdWdoCiAKLSAgICAgICAgaWYgaXNp
bnN0YW5jZSh0eXBlX21lbWJlci50eXBlLCBBbGlhc2VkVHlwZSk6Ci0gICAgICAgICAgICByZXR1
cm4gYXNzZXJ0aW9uX21ldGhvZF9mb3JfdHlwZSh0eXBlX21lbWJlci50eXBlLmFsaWFzZWRfdHlw
ZSkKLSAgICAgICAgaWYgaXNpbnN0YW5jZSh0eXBlX21lbWJlci50eXBlLCBFbnVtVHlwZSkgYW5k
IHR5cGVfbWVtYmVyLnR5cGUuaXNfYW5vbnltb3VzOgotICAgICAgICAgICAgcmV0dXJuICdCaW5k
aW5nVHJhaXRzPCVzPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUnICUgQ3BwR2VuZXJhdG9y
LmNwcF9wcm90b2NvbF90eXBlX2Zvcl90eXBlX21lbWJlcih0eXBlX21lbWJlciwgb2JqZWN0X2Rl
Y2xhcmF0aW9uKQorICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCAoQXJyYXlUeXBlLCBPYmpl
Y3RUeXBlKSk6CisgICAgICAgICAgICBpZiBpc19vcHRpb25hbDoKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gJ1JlZlB0cjwlcz4mJicgJSBDcHBHZW5lcmF0b3IuY3BwX3Byb3RvY29sX3R5cGVfZm9y
X3R5cGUoX3R5cGUpCisgICAgICAgICAgICByZXR1cm4gJ1JlZjwlcz4mJicgJSBDcHBHZW5lcmF0
b3IuY3BwX3Byb3RvY29sX3R5cGVfZm9yX3R5cGUoX3R5cGUpCiAKLSAgICAgICAgcmV0dXJuIGFz
c2VydGlvbl9tZXRob2RfZm9yX3R5cGUodHlwZV9tZW1iZXIudHlwZSkKKyAgICAgICAgaWYgX3R5
cGUucXVhbGlmaWVkX25hbWUoKSA9PSAnb2JqZWN0JzoKKyAgICAgICAgICAgIGlmIGlzX29wdGlv
bmFsOgorICAgICAgICAgICAgICAgIHJldHVybiAnUmVmUHRyPEpTT046Ok9iamVjdD4mJicKKyAg
ICAgICAgICAgIHJldHVybiAnUmVmPEpTT046Ok9iamVjdD4mJicKKworICAgICAgICBpZiBfdHlw
ZS5xdWFsaWZpZWRfbmFtZSgpID09ICdhcnJheSc6CisgICAgICAgICAgICBpZiBpc19vcHRpb25h
bDoKKyAgICAgICAgICAgICAgICByZXR1cm4gJ1JlZlB0cjxKU09OOjpBcnJheT4mJicKKyAgICAg
ICAgICAgIHJldHVybiAnUmVmPEpTT046OkFycmF5PiYmJworCisgICAgICAgIGlmIF90eXBlLnF1
YWxpZmllZF9uYW1lKCkgPT0gJ2FueSc6CisgICAgICAgICAgICBpZiBpc19vcHRpb25hbDoKKyAg
ICAgICAgICAgICAgICByZXR1cm4gJ1JlZlB0cjxKU09OOjpWYWx1ZT4mJicKKyAgICAgICAgICAg
IHJldHVybiAnUmVmPEpTT046OlZhbHVlPiYmJworCisgICAgICAgIGlmIF90eXBlLnF1YWxpZmll
ZF9uYW1lKCkgPT0gJ3N0cmluZyc6CisgICAgICAgICAgICByZXR1cm4gJ2NvbnN0ICVzJicgJSBD
cHBHZW5lcmF0b3IuY3BwX25hbWVfZm9yX3ByaW1pdGl2ZV90eXBlKF90eXBlKQorCisgICAgICAg
IGlmIGlzaW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKToKKyAgICAgICAgICAgIGNwcF9uYW1lID0g
J1Byb3RvY29sOjolczo6JXMnICUgKF90eXBlLnR5cGVfZG9tYWluKCkuZG9tYWluX25hbWUsIF90
eXBlLnJhd19uYW1lKCkpCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShfdHlwZSwgUHJpbWl0aXZl
VHlwZSk6CisgICAgICAgICAgICBjcHBfbmFtZSA9IENwcEdlbmVyYXRvci5jcHBfbmFtZV9mb3Jf
cHJpbWl0aXZlX3R5cGUoX3R5cGUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBW
YWx1ZUVycm9yKCJ1bmtub3duIHR5cGUiKQorCisgICAgICAgIGlmIGlzX29wdGlvbmFsOgorICAg
ICAgICAgICAgY3BwX25hbWUgPSAnT3B0aW9uYWw8JXM+JiYnICUgY3BwX25hbWUKKyAgICAgICAg
cmV0dXJuIGNwcF9uYW1lCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGNwcF90eXBlX2Zv
cl9ldmVudF9wYXJhbWV0ZXIoX3R5cGUsIGlzX29wdGlvbmFsKToKKyAgICAgICAgaWYgaXNpbnN0
YW5jZShfdHlwZSwgQWxpYXNlZFR5cGUpOgorICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5hbGlh
c2VkX3R5cGUKKyAgICAgICAgICAgICMgZmFsbHRocm91Z2gKKworICAgICAgICBpZiBpc2luc3Rh
bmNlKF90eXBlLCBFbnVtVHlwZSkgYW5kIF90eXBlLmlzX2Fub255bW91czoKKyAgICAgICAgICAg
IF90eXBlID0gX3R5cGUucHJpbWl0aXZlX3R5cGUKKyAgICAgICAgICAgICMgZmFsbHRocm91Z2gK
KworICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCAoQXJyYXlUeXBlLCBPYmplY3RUeXBlKSk6
CisgICAgICAgICAgICBpZiBpc19vcHRpb25hbDoKKyAgICAgICAgICAgICAgICByZXR1cm4gJ1Jl
ZlB0cjwlcz4mJicgJSBDcHBHZW5lcmF0b3IuY3BwX3Byb3RvY29sX3R5cGVfZm9yX3R5cGUoX3R5
cGUpCisgICAgICAgICAgICByZXR1cm4gJ1JlZjwlcz4mJicgJSBDcHBHZW5lcmF0b3IuY3BwX3By
b3RvY29sX3R5cGVfZm9yX3R5cGUoX3R5cGUpCisKKyAgICAgICAgaWYgX3R5cGUucXVhbGlmaWVk
X25hbWUoKSA9PSAnb2JqZWN0JzoKKyAgICAgICAgICAgIGlmIGlzX29wdGlvbmFsOgorICAgICAg
ICAgICAgICAgIHJldHVybiAnUmVmUHRyPEpTT046Ok9iamVjdD4mJicKKyAgICAgICAgICAgIHJl
dHVybiAnUmVmPEpTT046Ok9iamVjdD4mJicKKworICAgICAgICBpZiBfdHlwZS5xdWFsaWZpZWRf
bmFtZSgpID09ICdhcnJheSc6CisgICAgICAgICAgICBpZiBpc19vcHRpb25hbDoKKyAgICAgICAg
ICAgICAgICByZXR1cm4gJ1JlZlB0cjxKU09OOjpBcnJheT4mJicKKyAgICAgICAgICAgIHJldHVy
biAnUmVmPEpTT046OkFycmF5PiYmJworCisgICAgICAgIGlmIF90eXBlLnF1YWxpZmllZF9uYW1l
KCkgPT0gJ2FueSc6CisgICAgICAgICAgICBpZiBpc19vcHRpb25hbDoKKyAgICAgICAgICAgICAg
ICByZXR1cm4gJ1JlZlB0cjxKU09OOjpWYWx1ZT4mJicKKyAgICAgICAgICAgIHJldHVybiAnUmVm
PEpTT046OlZhbHVlPiYmJworCisgICAgICAgIGlmIF90eXBlLnF1YWxpZmllZF9uYW1lKCkgPT0g
J3N0cmluZyc6CisgICAgICAgICAgICByZXR1cm4gJ2NvbnN0ICVzJicgJSBDcHBHZW5lcmF0b3Iu
Y3BwX25hbWVfZm9yX3ByaW1pdGl2ZV90eXBlKF90eXBlKQorCisgICAgICAgIGlmIGlzaW5zdGFu
Y2UoX3R5cGUsIEVudW1UeXBlKToKKyAgICAgICAgICAgIGNwcF9uYW1lID0gJ1Byb3RvY29sOjol
czo6JXMnICUgKF90eXBlLnR5cGVfZG9tYWluKCkuZG9tYWluX25hbWUsIF90eXBlLnJhd19uYW1l
KCkpCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShfdHlwZSwgUHJpbWl0aXZlVHlwZSk6CisgICAg
ICAgICAgICBjcHBfbmFtZSA9IENwcEdlbmVyYXRvci5jcHBfbmFtZV9mb3JfcHJpbWl0aXZlX3R5
cGUoX3R5cGUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJ1
bmtub3duIHR5cGUiKQorCisgICAgICAgIGlmIGlzX29wdGlvbmFsOgorICAgICAgICAgICAgY3Bw
X25hbWUgPSAnT3B0aW9uYWw8JXM+JiYnICUgY3BwX25hbWUKKyAgICAgICAgcmV0dXJuIGNwcF9u
YW1lCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGNwcF90eXBlX2Zvcl9lbnVtKGVudW1f
dHlwZSwgbmFtZSk6CisgICAgICAgIGlmIGVudW1fdHlwZS5pc19hbm9ueW1vdXM6CisgICAgICAg
ICAgICByZXR1cm4gJ1Byb3RvY29sOjolczo6JXMnICUgKGVudW1fdHlwZS50eXBlX2RvbWFpbigp
LmRvbWFpbl9uYW1lLCB1Y2ZpcnN0KG5hbWUpKQorICAgICAgICByZXR1cm4gJ1Byb3RvY29sOjol
czo6JXMnICUgKGVudW1fdHlwZS50eXBlX2RvbWFpbigpLmRvbWFpbl9uYW1lLCBlbnVtX3R5cGUu
cmF3X25hbWUoKSkKIAogICAgIEBzdGF0aWNtZXRob2QKICAgICBkZWYgY3BwX25hbWVfZm9yX3By
aW1pdGl2ZV90eXBlKF90eXBlKToKICAgICAgICAgcmV0dXJuIF9QUklNSVRJVkVfVE9fQ1BQX05B
TUVfTUFQLmdldChfdHlwZS5yYXdfbmFtZSgpKQogCi0gICAgIyBEZWNpZGUgd2hldGhlciBjZXJ0
YWluIGhlbHBlcnMgYXJlIG5lY2Vzc2FyeSBpbiBhIHNpdHVhdGlvbi4KICAgICBAc3RhdGljbWV0
aG9kCi0gICAgZGVmIHNob3VsZF91c2Vfd3JhcHBlcl9mb3JfcmV0dXJuX3R5cGUoX3R5cGUpOgot
ICAgICAgICByZXR1cm4gbm90IGlzaW5zdGFuY2UoX3R5cGUsIChBcnJheVR5cGUsIE9iamVjdFR5
cGUpKQorICAgIGRlZiBzaG91bGRfbW92ZV9hcmd1bWVudChfdHlwZSwgaXNfb3B0aW9uYWwpOgor
ICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBBbGlhc2VkVHlwZSk6CisgICAgICAgICAgICBf
dHlwZSA9IF90eXBlLmFsaWFzZWRfdHlwZQorICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBF
bnVtVHlwZSk6CisgICAgICAgICAgICBfdHlwZSA9IF90eXBlLnByaW1pdGl2ZV90eXBlCisKKyAg
ICAgICAgaWYgX3R5cGUucmF3X25hbWUoKSA9PSAnc3RyaW5nJzoKKyAgICAgICAgICAgIHJldHVy
biBGYWxzZQorICAgICAgICByZXR1cm4gaXNfb3B0aW9uYWwgPT0gKF90eXBlLnJhd19uYW1lKCkg
aW4gWydib29sZWFuJywgJ2ludGVnZXInLCAnbnVtYmVyJ10pCiAKICAgICBAc3RhdGljbWV0aG9k
Ci0gICAgZGVmIHNob3VsZF91c2VfcmVmZXJlbmNlc19mb3JfdHlwZShfdHlwZSk6Ci0gICAgICAg
IHJldHVybiBpc2luc3RhbmNlKF90eXBlLCAoQXJyYXlUeXBlLCBPYmplY3RUeXBlKSkgb3IgKGlz
aW5zdGFuY2UoX3R5cGUsIChQcmltaXRpdmVUeXBlKSkgYW5kIF90eXBlLnF1YWxpZmllZF9uYW1l
KCkgaW4gWyJhbnkiLCAib2JqZWN0Il0pCisgICAgZGVmIHNob3VsZF9yZWxlYXNlX2FyZ3VtZW50
KF90eXBlLCBpc19vcHRpb25hbCk6CisgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEFsaWFz
ZWRUeXBlKToKKyAgICAgICAgICAgIF90eXBlID0gX3R5cGUuYWxpYXNlZF90eXBlCisgICAgICAg
IGlmIGlzaW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKToKKyAgICAgICAgICAgIF90eXBlID0gX3R5
cGUucHJpbWl0aXZlX3R5cGUKKworICAgICAgICBpZiBfdHlwZS5yYXdfbmFtZSgpID09ICdzdHJp
bmcnOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGlmIF90eXBlLnJhd19uYW1l
KCkgaW4gWydib29sZWFuJywgJ2ludGVnZXInLCAnbnVtYmVyJ106CisgICAgICAgICAgICByZXR1
cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIGlzX29wdGlvbmFsCiAKICAgICBAc3RhdGljbWV0aG9k
Ci0gICAgZGVmIHNob3VsZF9wYXNzX2J5X2NvcHlfZm9yX3JldHVybl90eXBlKF90eXBlKToKLSAg
ICAgICAgcmV0dXJuIGlzaW5zdGFuY2UoX3R5cGUsIChBcnJheVR5cGUsIE9iamVjdFR5cGUpKSBv
ciAoaXNpbnN0YW5jZShfdHlwZSwgKFByaW1pdGl2ZVR5cGUpKSBhbmQgX3R5cGUucXVhbGlmaWVk
X25hbWUoKSA9PSAib2JqZWN0IikKKyAgICBkZWYgc2hvdWxkX2RlcmVmZXJlbmNlX2FyZ3VtZW50
KF90eXBlLCBpc19vcHRpb25hbCk6CisgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEFsaWFz
ZWRUeXBlKToKKyAgICAgICAgICAgIF90eXBlID0gX3R5cGUuYWxpYXNlZF90eXBlCisgICAgICAg
IGlmIGlzaW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKToKKyAgICAgICAgICAgIF90eXBlID0gX3R5
cGUucHJpbWl0aXZlX3R5cGUKKworICAgICAgICBpZiBfdHlwZS5yYXdfbmFtZSgpID09ICdzdHJp
bmcnOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGlmIF90eXBlLnJhd19uYW1l
KCkgbm90IGluIFsnYm9vbGVhbicsICdpbnRlZ2VyJywgJ251bWJlciddOgorICAgICAgICAgICAg
cmV0dXJuIEZhbHNlCisgICAgICAgIHJldHVybiBpc19vcHRpb25hbApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vY3BwX2dlbmVyYXRv
cl90ZW1wbGF0ZXMucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Y29kZWdlbi9jcHBfZ2VuZXJhdG9yX3RlbXBsYXRlcy5weQppbmRleCAwODJiZTMzZjE1ZGUyNWJl
ODg5NTdjYjE0MjI5MzUyMDM2ZWUyMmNmLi43Yzg0ODU3ODZlOWNkY2YxNDJlOTM5NjJhZTJjZjRk
MTA3MWUxZDg3IDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvY29kZWdlbi9jcHBfZ2VuZXJhdG9yX3RlbXBsYXRlcy5weQorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9jcHBfZ2VuZXJhdG9yX3RlbXBs
YXRlcy5weQpAQCAtOTUsNyArOTUsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgIiIiJHtjbGFzc0FuZEV4
cG9ydE1hY3JvfSAke2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMg
U3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIgewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8
JHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUoQmFja2VuZERpc3BhdGNoZXIm
LCAke2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7Ci0gICAgdm9pZCBkaXNw
YXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmpl
Y3Q+JiYgbWVzc2FnZSkgZmluYWw7CisgICAgdm9pZCBkaXNwYXRjaChsb25nIHByb3RvY29sX2Nh
bGxJZCwgY29uc3QgU3RyaW5nJiBwcm90b2NvbF9tZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYg
cHJvdG9jb2xfbWVzc2FnZSkgZmluYWw7CiAke2NvbW1hbmREZWNsYXJhdGlvbnN9CiBwcml2YXRl
OgogICAgICR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYs
ICR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKQEAgLTExNCwzMiArMTE0
LDMwIEBAIHByaXZhdGU6CiAgICAgIiIiICAgICR7Y2xhc3NBbmRFeHBvcnRNYWNyb30gJHtjYWxs
YmFja05hbWV9IDogcHVibGljIEJhY2tlbmREaXNwYXRjaGVyOjpDYWxsYmFja0Jhc2UgewogICAg
IHB1YmxpYzoKICAgICAgICAgJHtjYWxsYmFja05hbWV9KFJlZjxCYWNrZW5kRGlzcGF0Y2hlcj4m
JiwgaW50IGlkKTsKLSAgICAgICAgdm9pZCBzZW5kU3VjY2Vzcygke291dFBhcmFtZXRlcnN9KTsK
KyAgICAgICAgdm9pZCBzZW5kU3VjY2Vzcygke3JldHVybnN9KTsKICAgICB9OwotICAgIHZpcnR1
YWwgdm9pZCAke2NvbW1hbmROYW1lfSgke2luUGFyYW1ldGVyc30pID0gMDsiIiIpCisgICAgdmly
dHVhbCB2b2lkICR7Y29tbWFuZE5hbWV9KCR7cGFyYW1ldGVyc30pID0gMDsiIiIpCiAKICAgICBC
YWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uU21hbGxTd2l0Y2ggPSAoCi0gICAgIiIidm9p
ZCAke2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElk
LCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKQorICAg
ICIiInZvaWQgJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHBy
b3RvY29sX2NhbGxJZCwgY29uc3QgU3RyaW5nJiBwcm90b2NvbF9tZXRob2QsIFJlZjxKU09OOjpP
YmplY3Q+JiYgcHJvdG9jb2xfbWVzc2FnZSkKIHsKICAgICBSZWY8JHtkb21haW5OYW1lfUJhY2tl
bmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKIAotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+
IHBhcmFtZXRlcnM7Ci0gICAgbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3MsIHBhcmFtZXRl
cnMpOworICAgIGF1dG8gcHJvdG9jb2xfcGFyYW1ldGVycyA9IHByb3RvY29sX21lc3NhZ2UtPmdl
dE9iamVjdCgicGFyYW1zIl9zKTsKIAogJHtkaXNwYXRjaENhc2VzfQogCi0gICAgbV9iYWNrZW5k
RGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9k
Tm90Rm91bmQsICInJHtkb21haW5OYW1lfS4iICsgbWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIp
OworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERp
c3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJyR7ZG9tYWluTmFtZX0uIiArIHByb3RvY29sX21l
dGhvZCArICInIHdhcyBub3QgZm91bmQiKTsKIH0iIiIpCiAKICAgICBCYWNrZW5kRGlzcGF0Y2hl
ckltcGxlbWVudGF0aW9uTGFyZ2VTd2l0Y2ggPSAoCi0iIiJ2b2lkICR7ZG9tYWluTmFtZX1CYWNr
ZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0
aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpCisiIiJ2b2lkICR7ZG9tYWluTmFtZX1C
YWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyBwcm90b2NvbF9jYWxsSWQsIGNvbnN0IFN0
cmluZyYgcHJvdG9jb2xfbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX21lc3Nh
Z2UpCiB7CiAgICAgUmVmPCR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgq
dGhpcyk7CiAKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzOwotICAgIG1lc3Nh
Z2UtPmdldE9iamVjdCgicGFyYW1zIl9zLCBwYXJhbWV0ZXJzKTsKKyAgICBhdXRvIHByb3RvY29s
X3BhcmFtZXRlcnMgPSBwcm90b2NvbF9tZXNzYWdlLT5nZXRPYmplY3QoInBhcmFtcyJfcyk7CiAK
LSAgICB1c2luZyBDYWxsSGFuZGxlciA9IHZvaWQgKCR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0
Y2hlcjo6KikobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSk7
CisgICAgdXNpbmcgQ2FsbEhhbmRsZXIgPSB2b2lkICgke2RvbWFpbk5hbWV9QmFja2VuZERpc3Bh
dGNoZXI6OiopKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBy
b3RvY29sX21lc3NhZ2UpOwogICAgIHVzaW5nIERpc3BhdGNoTWFwID0gSGFzaE1hcDxTdHJpbmcs
IENhbGxIYW5kbGVyPjsKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8RGlzcGF0Y2hNYXA+IGRp
c3BhdGNoTWFwOwogICAgIGlmIChkaXNwYXRjaE1hcC5nZXQoKS5pc0VtcHR5KCkpIHsKQEAgLTE1
NCwxMyArMTUyLDEzIEBAICR7ZGlzcGF0Y2hDYXNlc30KICAgICAgICAgICAgIGRpc3BhdGNoTWFw
LmdldCgpLmFkZChjb21tYW5kc1tpXS5uYW1lLCBjb21tYW5kc1tpXS5oYW5kbGVyKTsKICAgICB9
CiAKLSAgICBhdXRvIGZpbmRSZXN1bHQgPSBkaXNwYXRjaE1hcC5nZXQoKS5maW5kKG1ldGhvZCk7
CisgICAgYXV0byBmaW5kUmVzdWx0ID0gZGlzcGF0Y2hNYXAuZ2V0KCkuZmluZChwcm90b2NvbF9t
ZXRob2QpOwogICAgIGlmIChmaW5kUmVzdWx0ID09IGRpc3BhdGNoTWFwLmdldCgpLmVuZCgpKSB7
Ci0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2Vu
ZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJyR7ZG9tYWluTmFtZX0uIiArIG1ldGhvZCAr
ICInIHdhcyBub3QgZm91bmQiKTsKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0
UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInJHtkb21h
aW5OYW1lfS4iICsgcHJvdG9jb2xfbWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgKCgqdGhpcykuKmZpbmRSZXN1bHQtPnZhbHVlKShyZXF1
ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykpOworICAgICgoKnRoaXMpLipmaW5kUmVzdWx0LT52
YWx1ZSkocHJvdG9jb2xfY2FsbElkLCBXVEZNb3ZlKHByb3RvY29sX3BhcmFtZXRlcnMpKTsKIH0i
IiIpCiAKICAgICBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uRG9tYWluQ29uc3RydWN0
b3IgPSAoCkBAIC0xNzcsNyArMTc1LDcgQEAgJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVy
Ojoke2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXIKIH0iIiIp
CiAKICAgICBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uUHJlcGFyZUNvbW1hbmRBcmd1
bWVudHMgPSAoCi0iIiIke2luUGFyYW1ldGVyRGVjbGFyYXRpb25zfQorIiIiJHtwYXJhbWV0ZXJE
ZWNsYXJhdGlvbnN9CiAgICAgaWYgKG1fYmFja2VuZERpc3BhdGNoZXItPmhhc1Byb3RvY29sRXJy
b3JzKCkpIHsKICAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJv
cihCYWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFtcywgIlNvbWUgYXJndW1lbnRzIG9mIG1l
dGhvZCBcJyR7ZG9tYWluTmFtZX0uJHtjb21tYW5kTmFtZX1cJyBjYW4ndCBiZSBwcm9jZXNzZWQi
X3MpOwogICAgICAgICByZXR1cm47CkBAIC0xODcsMTEgKzE4NSwxMSBAQCAke2RvbWFpbk5hbWV9
QmFja2VuZERpc3BhdGNoZXI6OiR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5k
RGlzcGF0Y2hlcgogICAgIEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25Bc3luY0NvbW1h
bmQgPSAoCiAiIiIke2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjoke2NhbGxi
YWNrTmFtZX06OiR7Y2FsbGJhY2tOYW1lfShSZWY8QmFja2VuZERpc3BhdGNoZXI+JiYgYmFja2Vu
ZERpc3BhdGNoZXIsIGludCBpZCkgOiBCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlKFdU
Rk1vdmUoYmFja2VuZERpc3BhdGNoZXIpLCBpZCkgeyB9CiAKLXZvaWQgJHtkb21haW5OYW1lfUJh
Y2tlbmREaXNwYXRjaGVySGFuZGxlcjo6JHtjYWxsYmFja05hbWV9OjpzZW5kU3VjY2Vzcygke2Zv
cm1hbFBhcmFtZXRlcnN9KQordm9pZCAke2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyOjoke2NhbGxiYWNrTmFtZX06OnNlbmRTdWNjZXNzKCR7Y2FsbGJhY2tQYXJhbWV0ZXJzfSkK
IHsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3Jl
YXRlKCk7Ci0ke291dFBhcmFtZXRlckFzc2lnbm1lbnRzfQotICAgIENhbGxiYWNrQmFzZTo6c2Vu
ZFN1Y2Nlc3MoV1RGTW92ZShqc29uTWVzc2FnZSkpOworICAgIGF1dG8gcHJvdG9jb2xfanNvbk1l
c3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworJHtyZXR1cm5Bc3NpZ25tZW50c30KKyAg
ICBDYWxsYmFja0Jhc2U6OnNlbmRTdWNjZXNzKFdURk1vdmUocHJvdG9jb2xfanNvbk1lc3NhZ2Up
KTsKIH0iIiIpCiAKICAgICBGcm9udGVuZERpc3BhdGNoZXJEb21haW5EaXNwYXRjaGVyRGVjbGFy
YXRpb24gPSAoCkBAIC0yNDYsMTMgKzI0NCwxMSBAQCAke2NvbnN0cnVjdG9yRXhhbXBsZX0KICAg
ICB9IiIiKQogCiAgICAgUHJvdG9jb2xPYmplY3RSdW50aW1lQ2FzdCA9ICgKLSIiIlJlZlB0cjwk
e29iamVjdFR5cGV9PiBCaW5kaW5nVHJhaXRzPCR7b2JqZWN0VHlwZX0+OjpydW50aW1lQ2FzdChS
ZWZQdHI8SlNPTjo6VmFsdWU+JiYgdmFsdWUpCisiIiJSZWY8JHtvYmplY3RUeXBlfT4gQmluZGlu
Z1RyYWl0czwke29iamVjdFR5cGV9Pjo6cnVudGltZUNhc3QoUmVmPEpTT046OlZhbHVlPiYmIHZh
bHVlKQogewotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHJlc3VsdDsKLSAgICBib29sIGNhc3RT
dWNjZWVkZWQgPSB2YWx1ZS0+YXNPYmplY3QocmVzdWx0KTsKLSAgICBBU1NFUlRfVU5VU0VEKGNh
c3RTdWNjZWVkZWQsIGNhc3RTdWNjZWVkZWQpOworICAgIGF1dG8gcmVzdWx0ID0gdmFsdWUtPmFz
T2JqZWN0KCk7CiAgICAgQmluZGluZ1RyYWl0czwke29iamVjdFR5cGV9Pjo6YXNzZXJ0VmFsdWVI
YXNFeHBlY3RlZFR5cGUocmVzdWx0LmdldCgpKTsKICAgICBDT01QSUxFX0FTU0VSVChzaXplb2Yo
JHtvYmplY3RUeXBlfSkgPT0gc2l6ZW9mKEpTT046Ok9iamVjdEJhc2UpLCB0eXBlX2Nhc3RfcHJv
YmxlbSk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PCR7b2JqZWN0VHlwZX0qPihzdGF0aWNfY2Fz
dDxKU09OOjpPYmplY3RCYXNlKj4ocmVzdWx0LmdldCgpKSk7CisgICAgcmV0dXJuIHN0YXRpY19y
ZWZlcmVuY2VfY2FzdDwke29iamVjdFR5cGV9PihzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SlNPTjo6
T2JqZWN0QmFzZT4ocmVzdWx0LnJlbGVhc2VOb25OdWxsKCkpKTsKIH0KICIiIikKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVy
YXRlX2NwcF9hbHRlcm5hdGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weSBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9hbHRl
cm5hdGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weQppbmRleCBlMWE2NjFiYTM3OWNkZWE0
MDY0YzZmNzdjNGVmY2IxMTYyYWNlZmMwLi5iOWM2NjE3NDkyMjQ0ZDAwZTBhNzQ1ZDc5NGJhYjY3
MTAyZTc0NGM1IDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfYWx0ZXJuYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9o
ZWFkZXIucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2Nv
ZGVnZW4vZ2VuZXJhdGVfY3BwX2FsdGVybmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5
CkBAIC0zMyw5ICszMywxMSBAQCBmcm9tIHN0cmluZyBpbXBvcnQgVGVtcGxhdGUKIHRyeToKICAg
ICBmcm9tIC5jcHBfZ2VuZXJhdG9yIGltcG9ydCBDcHBHZW5lcmF0b3IKICAgICBmcm9tIC5jcHBf
Z2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgQ3BwR2VuZXJhdG9yVGVtcGxhdGVzIGFzIENwcFRl
bXBsYXRlcworICAgIGZyb20gLm1vZGVscyBpbXBvcnQgRW51bVR5cGUsIEFsaWFzZWRUeXBlCiBl
eGNlcHQgVmFsdWVFcnJvcjoKICAgICBmcm9tIGNwcF9nZW5lcmF0b3IgaW1wb3J0IENwcEdlbmVy
YXRvcgogICAgIGZyb20gY3BwX2dlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IENwcEdlbmVyYXRv
clRlbXBsYXRlcyBhcyBDcHBUZW1wbGF0ZXMKKyAgICBmcm9tIG1vZGVscyBpbXBvcnQgRW51bVR5
cGUsIEFsaWFzZWRUeXBlCiAKIGxvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQogCkBA
IC02NSw3ICs2Nyw3IEBAIGNsYXNzIENwcEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVySGVhZGVy
R2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgZGVmIF9nZW5lcmF0ZV9zZWNvbmRhcnlfaGVh
ZGVyX2luY2x1ZGVzKHNlbGYpOgogICAgICAgICB0YXJnZXRfZnJhbWV3b3JrX25hbWUgPSBzZWxm
Lm1vZGVsKCkuZnJhbWV3b3JrLm5hbWUKICAgICAgICAgaGVhZGVyX2luY2x1ZGVzID0gWwotICAg
ICAgICAgICAgKFt0YXJnZXRfZnJhbWV3b3JrX25hbWVdLCAodGFyZ2V0X2ZyYW1ld29ya19uYW1l
LCAiJXNQcm90b2NvbFR5cGVzLmgiICUgc2VsZi5wcm90b2NvbF9uYW1lKCkpKSwKKyAgICAgICAg
ICAgIChbdGFyZ2V0X2ZyYW1ld29ya19uYW1lXSwgKHRhcmdldF9mcmFtZXdvcmtfbmFtZSwgIiVz
UHJvdG9jb2xPYmplY3RzLmgiICUgc2VsZi5wcm90b2NvbF9uYW1lKCkpKSwKICAgICAgICAgICAg
IChbIkphdmFTY3JpcHRDb3JlIl0sICgiSmF2YVNjcmlwdENvcmUiLCAiaW5zcGVjdG9yL0luc3Bl
Y3RvckZyb250ZW5kUm91dGVyLmgiKSksCiAgICAgICAgICAgICAoWyJKYXZhU2NyaXB0Q29yZSJd
LCAoIkphdmFTY3JpcHRDb3JlIiwgImluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
ci5oIikpLAogICAgICAgICBdCkBAIC05MSw5ICs5MywxOSBAQCBjbGFzcyBDcHBBbHRlcm5hdGVC
YWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogCiAgICAgZGVm
IF9nZW5lcmF0ZV9oYW5kbGVyX2RlY2xhcmF0aW9uX2Zvcl9jb21tYW5kKHNlbGYsIGNvbW1hbmQp
OgogICAgICAgICBsaW5lcyA9IFtdCi0gICAgICAgIHBhcmFtZXRlcnMgPSBbJ2xvbmcgY2FsbElk
J10KLSAgICAgICAgZm9yIF9wYXJhbWV0ZXIgaW4gY29tbWFuZC5jYWxsX3BhcmFtZXRlcnM6Ci0g
ICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZCgnJXMgaW5fJXMnICUgKENwcEdlbmVyYXRvci5j
cHBfdHlwZV9mb3JfdW5jaGVja2VkX2Zvcm1hbF9pbl9wYXJhbWV0ZXIoX3BhcmFtZXRlciksIF9w
YXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpKQorICAgICAgICBwYXJhbWV0ZXJzID0gWydsb25nIHBy
b3RvY29sX2NhbGxJZCddCisgICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gY29tbWFuZC5jYWxsX3Bh
cmFtZXRlcnM6CisgICAgICAgICAgICBwYXJhbWV0ZXJfdHlwZSA9IHBhcmFtZXRlci50eXBlCisg
ICAgICAgICAgICBpZiBpc2luc3RhbmNlKHBhcmFtZXRlcl90eXBlLCBBbGlhc2VkVHlwZSk6Cisg
ICAgICAgICAgICAgICAgcGFyYW1ldGVyX3R5cGUgPSBwYXJhbWV0ZXJfdHlwZS5hbGlhc2VkX3R5
cGUKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UocGFyYW1ldGVyX3R5cGUsIEVudW1UeXBlKToK
KyAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfdHlwZSA9IHBhcmFtZXRlcl90eXBlLnByaW1pdGl2
ZV90eXBlCisKKyAgICAgICAgICAgIHBhcmFtZXRlcl9uYW1lID0gcGFyYW1ldGVyLnBhcmFtZXRl
cl9uYW1lCisgICAgICAgICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6CisgICAgICAgICAg
ICAgICAgcGFyYW1ldGVyX25hbWUgPSAnb3B0XycgKyBwYXJhbWV0ZXJfbmFtZQorCisgICAgICAg
ICAgICBwYXJhbWV0ZXJzLmFwcGVuZCgnJXMgJXMnICUgKENwcEdlbmVyYXRvci5jcHBfdHlwZV9m
b3JfY29tbWFuZF9wYXJhbWV0ZXIocGFyYW1ldGVyX3R5cGUsIHBhcmFtZXRlci5pc19vcHRpb25h
bCksIHBhcmFtZXRlcl9uYW1lKSkKIAogICAgICAgICBjb21tYW5kX2FyZ3MgPSB7CiAgICAgICAg
ICAgICAnY29tbWFuZE5hbWUnOiBjb21tYW5kLmNvbW1hbmRfbmFtZSwKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2Nw
cF9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9o
ZWFkZXIucHkKaW5kZXggMTBkOGYxNGJkNWZlYmViOGExYjA2YjAxNzY3NWExNDNhOGQ0ZjczOC4u
NmQ5ZGQyYTQ4ZGMzNDY5MjA3MWMxZGJjMWI4YjNiNGU3YzczYTkxNSAxMDA3NTUKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3Bw
X2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hl
cl9oZWFkZXIucHkKQEAgLTU1LDEwICs1NSw5IEBAIGNsYXNzIENwcEJhY2tlbmREaXNwYXRjaGVy
SGVhZGVyR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAgIHJldHVybiBbZG9tYWluIGZv
ciBkb21haW4gaW4gR2VuZXJhdG9yLmRvbWFpbnNfdG9fZ2VuZXJhdGUoc2VsZikgaWYgbGVuKHNl
bGYuY29tbWFuZHNfZm9yX2RvbWFpbihkb21haW4pKSA+IDBdCiAKICAgICBkZWYgZ2VuZXJhdGVf
b3V0cHV0KHNlbGYpOgotICAgICAgICB0eXBlZGVmcyA9IFsoJ1N0cmluZycsICdFcnJvclN0cmlu
ZycpXQogICAgICAgICBoZWFkZXJfYXJncyA9IHsKICAgICAgICAgICAgICdpbmNsdWRlcyc6IHNl
bGYuX2dlbmVyYXRlX3NlY29uZGFyeV9oZWFkZXJfaW5jbHVkZXMoKSwKLSAgICAgICAgICAgICd0
eXBlZGVmcyc6ICdcbicuam9pbihbJ3R5cGVkZWYgJXMgJXM7JyAlIHR5cGVkZWYgZm9yIHR5cGVk
ZWYgaW4gdHlwZWRlZnNdKSwKKyAgICAgICAgICAgICd0eXBlZGVmcyc6ICcnLAogICAgICAgICB9
CiAKICAgICAgICAgZG9tYWlucyA9IHNlbGYuZG9tYWluc190b19nZW5lcmF0ZSgpCkBAIC03OSw5
ICs3OCwxMSBAQCBjbGFzcyBDcHBCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvcihDcHBH
ZW5lcmF0b3IpOgogICAgICAgICBoZWFkZXJfaW5jbHVkZXMgPSBbCiAgICAgICAgICAgICAoWyJK
YXZhU2NyaXB0Q29yZSIsICJXZWJLaXQiXSwgKHNlbGYubW9kZWwoKS5mcmFtZXdvcmsubmFtZSwg
IiVzUHJvdG9jb2xPYmplY3RzLmgiICUgc2VsZi5wcm90b2NvbF9uYW1lKCkpKSwKICAgICAgICAg
ICAgIChbIkphdmFTY3JpcHRDb3JlIiwgIldlYktpdCJdLCAoIkphdmFTY3JpcHRDb3JlIiwgImlu
c3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oIikpLAotICAgICAgICAgICAgKFsi
SmF2YVNjcmlwdENvcmUiLCAiV2ViS2l0Il0sICgiV1RGIiwgInd0Zi90ZXh0L1dURlN0cmluZy5o
IikpCisgICAgICAgICAgICAoWyJKYXZhU2NyaXB0Q29yZSIsICJXZWJLaXQiXSwgKCJXVEYiLCAi
d3RmL0V4cGVjdGVkLmgiKSksCisgICAgICAgICAgICAoWyJKYXZhU2NyaXB0Q29yZSIsICJXZWJL
aXQiXSwgKCJXVEYiLCAid3RmL09wdGlvbmFsLmgiKSksCisgICAgICAgICAgICAoWyJKYXZhU2Ny
aXB0Q29yZSIsICJXZWJLaXQiXSwgKCJXVEYiLCAid3RmL3RleHQvV1RGU3RyaW5nLmgiKSksCisg
ICAgICAgICAgICAoWyJKYXZhU2NyaXB0Q29yZSIsICJXZWJLaXQiXSwgKCJzdGQiLCAidHVwbGUi
KSksCiAgICAgICAgIF0KLQogICAgICAgICByZXR1cm4gJ1xuJy5qb2luKHNlbGYuZ2VuZXJhdGVf
aW5jbHVkZXNfZnJvbV9lbnRyaWVzKGhlYWRlcl9pbmNsdWRlcykpCiAKICAgICBkZWYgX2dlbmVy
YXRlX2FsdGVybmF0ZV9oYW5kbGVyX2ZvcndhcmRfZGVjbGFyYXRpb25zX2Zvcl9kb21haW5zKHNl
bGYsIGRvbWFpbnMpOgpAQCAtMTAxLDExICsxMDIsOSBAQCBjbGFzcyBDcHBCYWNrZW5kRGlzcGF0
Y2hlckhlYWRlckdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAgICBpZiBleHBvcnRNYWNy
byBpcyBub3QgTm9uZToKICAgICAgICAgICAgIGNsYXNzQ29tcG9uZW50cy5hcHBlbmQoZXhwb3J0
TWFjcm8pCiAKLSAgICAgICAgdXNlZF9lbnVtX25hbWVzID0gc2V0KCkKLQogICAgICAgICBjb21t
YW5kX2RlY2xhcmF0aW9ucyA9IFtdCiAgICAgICAgIGZvciBjb21tYW5kIGluIHNlbGYuY29tbWFu
ZHNfZm9yX2RvbWFpbihkb21haW4pOgotICAgICAgICAgICAgY29tbWFuZF9kZWNsYXJhdGlvbnMu
YXBwZW5kKHNlbGYuX2dlbmVyYXRlX2hhbmRsZXJfZGVjbGFyYXRpb25fZm9yX2NvbW1hbmQoY29t
bWFuZCwgdXNlZF9lbnVtX25hbWVzKSkKKyAgICAgICAgICAgIGNvbW1hbmRfZGVjbGFyYXRpb25z
LmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9oYW5kbGVyX2RlY2xhcmF0aW9uX2Zvcl9jb21tYW5kKGNv
bW1hbmQpKQogCiAgICAgICAgIGhhbmRsZXJfYXJncyA9IHsKICAgICAgICAgICAgICdjbGFzc0Fu
ZEV4cG9ydE1hY3JvJzogIiAiLmpvaW4oY2xhc3NDb21wb25lbnRzKSwKQEAgLTExNSw2OSArMTE0
LDU2IEBAIGNsYXNzIENwcEJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yKENwcEdlbmVy
YXRvcik6CiAKICAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRp
b24oZG9tYWluLmNvbmRpdGlvbiwgVGVtcGxhdGUoQ3BwVGVtcGxhdGVzLkJhY2tlbmREaXNwYXRj
aGVySGVhZGVyRG9tYWluSGFuZGxlckRlY2xhcmF0aW9uKS5zdWJzdGl0dXRlKE5vbmUsICoqaGFu
ZGxlcl9hcmdzKSkKIAotICAgIGRlZiBfZ2VuZXJhdGVfYW5vbnltb3VzX2VudW1fZm9yX3BhcmFt
ZXRlcihzZWxmLCBwYXJhbWV0ZXIsIGNvbW1hbmQpOgotICAgICAgICBlbnVtX2FyZ3MgPSB7Ci0g
ICAgICAgICAgICAncGFyYW1ldGVyTmFtZSc6IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwKLSAg
ICAgICAgICAgICdjb21tYW5kTmFtZSc6IGNvbW1hbmQuY29tbWFuZF9uYW1lCi0gICAgICAgIH0K
LQotICAgICAgICBsaW5lcyA9IFtdCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIC8vIE5hbWVk
IGFmdGVyIHBhcmFtZXRlciBcJyUocGFyYW1ldGVyTmFtZSlzXCcgd2hpbGUgZ2VuZXJhdGluZyBj
b21tYW5kL2V2ZW50ICUoY29tbWFuZE5hbWUpcy4nICUgZW51bV9hcmdzKQotICAgICAgICBsaW5l
cy5hcHBlbmQoJyAgICBlbnVtIGNsYXNzICVzIHsnICUgdWNmaXJzdChwYXJhbWV0ZXIucGFyYW1l
dGVyX25hbWUpKQotICAgICAgICBmb3IgZW51bV92YWx1ZSBpbiBwYXJhbWV0ZXIudHlwZS5lbnVt
X3ZhbHVlcygpOgotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgICVzID0gJWQsJyAl
IChHZW5lcmF0b3Iuc3R5bGl6ZWRfbmFtZV9mb3JfZW51bV92YWx1ZShlbnVtX3ZhbHVlKSwgc2Vs
Zi5lbmNvZGluZ19mb3JfZW51bV92YWx1ZShlbnVtX3ZhbHVlKSkpCi0gICAgICAgIGxpbmVzLmFw
cGVuZCgnICAgIH07IC8vIGVudW0gY2xhc3MgJXMnICUgdWNmaXJzdChwYXJhbWV0ZXIucGFyYW1l
dGVyX25hbWUpKQotICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQotCi0gICAgZGVmIF9n
ZW5lcmF0ZV9oYW5kbGVyX2RlY2xhcmF0aW9uX2Zvcl9jb21tYW5kKHNlbGYsIGNvbW1hbmQsIHVz
ZWRfZW51bV9uYW1lcyk6CisgICAgZGVmIF9nZW5lcmF0ZV9oYW5kbGVyX2RlY2xhcmF0aW9uX2Zv
cl9jb21tYW5kKHNlbGYsIGNvbW1hbmQpOgogICAgICAgICBpZiBjb21tYW5kLmlzX2FzeW5jOgog
ICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2dlbmVyYXRlX2FzeW5jX2hhbmRsZXJfZGVjbGFyYXRp
b25fZm9yX2NvbW1hbmQoY29tbWFuZCkKIAogICAgICAgICBsaW5lcyA9IFtdCi0gICAgICAgIHBh
cmFtZXRlcnMgPSBbJ0Vycm9yU3RyaW5nJiddCi0gICAgICAgIGZvciBfcGFyYW1ldGVyIGluIGNv
bW1hbmQuY2FsbF9wYXJhbWV0ZXJzOgotICAgICAgICAgICAgcGFyYW1ldGVyX25hbWUgPSAnaW5f
JyArIF9wYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUKLSAgICAgICAgICAgIGlmIF9wYXJhbWV0ZXIu
aXNfb3B0aW9uYWw6CisKKyAgICAgICAgcGFyYW1ldGVycyA9IFtdCisgICAgICAgIGZvciBwYXJh
bWV0ZXIgaW4gY29tbWFuZC5jYWxsX3BhcmFtZXRlcnM6CisgICAgICAgICAgICBwYXJhbWV0ZXJf
bmFtZSA9IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZQorICAgICAgICAgICAgaWYgcGFyYW1ldGVy
LmlzX29wdGlvbmFsOgogICAgICAgICAgICAgICAgIHBhcmFtZXRlcl9uYW1lID0gJ29wdF8nICsg
cGFyYW1ldGVyX25hbWUKKyAgICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKCIlcyAlcyIgJSAo
Q3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl9jb21tYW5kX3BhcmFtZXRlcihwYXJhbWV0ZXIudHlw
ZSwgcGFyYW1ldGVyLmlzX29wdGlvbmFsKSwgcGFyYW1ldGVyX25hbWUpKQogCi0gICAgICAgICAg
ICBwYXJhbWV0ZXJzLmFwcGVuZCgiJXMgJXMiICUgKENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3Jf
dW5jaGVja2VkX2Zvcm1hbF9pbl9wYXJhbWV0ZXIoX3BhcmFtZXRlciksIHBhcmFtZXRlcl9uYW1l
KSkKLQotICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShfcGFyYW1ldGVyLnR5cGUsIEVudW1UeXBl
KSBhbmQgX3BhcmFtZXRlci50eXBlLmlzX2Fub255bW91cyBhbmQgX3BhcmFtZXRlci5wYXJhbWV0
ZXJfbmFtZSBub3QgaW4gdXNlZF9lbnVtX25hbWVzOgotICAgICAgICAgICAgICAgIGxpbmVzLmFw
cGVuZChzZWxmLl9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9mb3JfcGFyYW1ldGVyKF9wYXJhbWV0
ZXIsIGNvbW1hbmQpKQotICAgICAgICAgICAgICAgIHVzZWRfZW51bV9uYW1lcy5hZGQoX3BhcmFt
ZXRlci5wYXJhbWV0ZXJfbmFtZSkKLQotICAgICAgICBmb3IgX3BhcmFtZXRlciBpbiBjb21tYW5k
LnJldHVybl9wYXJhbWV0ZXJzOgotICAgICAgICAgICAgcGFyYW1ldGVyX25hbWUgPSAnb3V0Xycg
KyBfcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lCi0gICAgICAgICAgICBpZiBfcGFyYW1ldGVyLmlz
X29wdGlvbmFsOgorICAgICAgICByZXR1cm5zID0gW10KKyAgICAgICAgZm9yIHBhcmFtZXRlciBp
biBjb21tYW5kLnJldHVybl9wYXJhbWV0ZXJzOgorICAgICAgICAgICAgcGFyYW1ldGVyX25hbWUg
PSBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUKKyAgICAgICAgICAgIGlmIHBhcmFtZXRlci5pc19v
cHRpb25hbDoKICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfbmFtZSA9ICdvcHRfJyArIHBhcmFt
ZXRlcl9uYW1lCi0gICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZCgiJXMgJXMiICUgKENwcEdl
bmVyYXRvci5jcHBfdHlwZV9mb3JfZm9ybWFsX291dF9wYXJhbWV0ZXIoX3BhcmFtZXRlciksIHBh
cmFtZXRlcl9uYW1lKSkKLQotICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShfcGFyYW1ldGVyLnR5
cGUsIEVudW1UeXBlKSBhbmQgX3BhcmFtZXRlci50eXBlLmlzX2Fub255bW91cyBhbmQgX3BhcmFt
ZXRlci5wYXJhbWV0ZXJfbmFtZSBub3QgaW4gdXNlZF9lbnVtX25hbWVzOgotICAgICAgICAgICAg
ICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9mb3JfcGFyYW1l
dGVyKF9wYXJhbWV0ZXIsIGNvbW1hbmQpKQotICAgICAgICAgICAgICAgIHVzZWRfZW51bV9uYW1l
cy5hZGQoX3BhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkKKyAgICAgICAgICAgIHJldHVybnMuYXBw
ZW5kKCclcyAvKiAlcyAqLycgJSAoQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl9jb21tYW5kX3Jl
dHVybl9kZWNsYXJhdGlvbihwYXJhbWV0ZXIudHlwZSwgcGFyYW1ldGVyLmlzX29wdGlvbmFsKSwg
cGFyYW1ldGVyX25hbWUpKQogCiAgICAgICAgIGNvbW1hbmRfYXJncyA9IHsKICAgICAgICAgICAg
ICdjb21tYW5kTmFtZSc6IGNvbW1hbmQuY29tbWFuZF9uYW1lLAotICAgICAgICAgICAgJ3BhcmFt
ZXRlcnMnOiAiLCAiLmpvaW4ocGFyYW1ldGVycykKKyAgICAgICAgICAgICdwYXJhbWV0ZXJzJzog
IiwgIi5qb2luKHBhcmFtZXRlcnMpLAorICAgICAgICAgICAgJ3JldHVybnMnOiAiLCAiLmpvaW4o
cmV0dXJucyksCiAgICAgICAgIH0KLSAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgdmlydHVhbCB2
b2lkICUoY29tbWFuZE5hbWUpcyglKHBhcmFtZXRlcnMpcykgPSAwOycgJSBjb21tYW5kX2FyZ3Mp
CisgICAgICAgIGlmIGxlbihyZXR1cm5zKSA9PSAxOgorICAgICAgICAgICAgbGluZXMuYXBwZW5k
KCcgICAgdmlydHVhbCBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjwlKHJldHVybnMpcz4gJShjb21t
YW5kTmFtZSlzKCUocGFyYW1ldGVycylzKSA9IDA7JyAlIGNvbW1hbmRfYXJncykKKyAgICAgICAg
ZWxpZiBsZW4ocmV0dXJucykgPiAxOgorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgdmly
dHVhbCBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxzdGQ6OnR1cGxlPCUocmV0dXJucylzPj4gJShj
b21tYW5kTmFtZSlzKCUocGFyYW1ldGVycylzKSA9IDA7JyAlIGNvbW1hbmRfYXJncykKKyAgICAg
ICAgZWxzZToKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIHZpcnR1YWwgUHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8dm9pZD4gJShjb21tYW5kTmFtZSlzKCUocGFyYW1ldGVycylzKSA9IDA7
JyAlIGNvbW1hbmRfYXJncykKICAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zv
cl9jb25kaXRpb24oY29tbWFuZC5jb25kaXRpb24sICdcbicuam9pbihsaW5lcykpCiAKICAgICBk
ZWYgX2dlbmVyYXRlX2FzeW5jX2hhbmRsZXJfZGVjbGFyYXRpb25fZm9yX2NvbW1hbmQoc2VsZiwg
Y29tbWFuZCk6CiAgICAgICAgIGNhbGxiYWNrTmFtZSA9ICIlc0NhbGxiYWNrIiAlIHVjZmlyc3Qo
Y29tbWFuZC5jb21tYW5kX25hbWUpCiAKLSAgICAgICAgaW5fcGFyYW1ldGVycyA9IFtdCi0gICAg
ICAgIGZvciBfcGFyYW1ldGVyIGluIGNvbW1hbmQuY2FsbF9wYXJhbWV0ZXJzOgotICAgICAgICAg
ICAgcGFyYW1ldGVyX25hbWUgPSAnaW5fJyArIF9wYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUKLSAg
ICAgICAgICAgIGlmIF9wYXJhbWV0ZXIuaXNfb3B0aW9uYWw6CisgICAgICAgIHBhcmFtZXRlcnMg
PSBbXQorICAgICAgICBmb3IgcGFyYW1ldGVyIGluIGNvbW1hbmQuY2FsbF9wYXJhbWV0ZXJzOgor
ICAgICAgICAgICAgcGFyYW1ldGVyX25hbWUgPSBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUKKyAg
ICAgICAgICAgIGlmIHBhcmFtZXRlci5pc19vcHRpb25hbDoKICAgICAgICAgICAgICAgICBwYXJh
bWV0ZXJfbmFtZSA9ICdvcHRfJyArIHBhcmFtZXRlcl9uYW1lCisgICAgICAgICAgICBwYXJhbWV0
ZXJzLmFwcGVuZCgiJXMgJXMiICUgKENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3JfY29tbWFuZF9w
YXJhbWV0ZXIocGFyYW1ldGVyLnR5cGUsIHBhcmFtZXRlci5pc19vcHRpb25hbCksIHBhcmFtZXRl
cl9uYW1lKSkKKyAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoIlJlZjwlcz4mJiIgJSBjYWxsYmFj
a05hbWUpCiAKLSAgICAgICAgICAgIGluX3BhcmFtZXRlcnMuYXBwZW5kKCIlcyAlcyIgJSAoQ3Bw
R2VuZXJhdG9yLmNwcF90eXBlX2Zvcl91bmNoZWNrZWRfZm9ybWFsX2luX3BhcmFtZXRlcihfcGFy
YW1ldGVyKSwgcGFyYW1ldGVyX25hbWUpKQotICAgICAgICBpbl9wYXJhbWV0ZXJzLmFwcGVuZCgi
UmVmPCVzPiYmIGNhbGxiYWNrIiAlIGNhbGxiYWNrTmFtZSkKLQotICAgICAgICBvdXRfcGFyYW1l
dGVycyA9IFtdCi0gICAgICAgIGZvciBfcGFyYW1ldGVyIGluIGNvbW1hbmQucmV0dXJuX3BhcmFt
ZXRlcnM6Ci0gICAgICAgICAgICBvdXRfcGFyYW1ldGVycy5hcHBlbmQoIiVzICVzIiAlIChDcHBH
ZW5lcmF0b3IuY3BwX3R5cGVfZm9yX2Zvcm1hbF9hc3luY19wYXJhbWV0ZXIoX3BhcmFtZXRlciks
IF9wYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpKQorICAgICAgICByZXR1cm5zID0gW10KKyAgICAg
ICAgZm9yIHBhcmFtZXRlciBpbiBjb21tYW5kLnJldHVybl9wYXJhbWV0ZXJzOgorICAgICAgICAg
ICAgcGFyYW1ldGVyX25hbWUgPSBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUKKyAgICAgICAgICAg
IGlmIHBhcmFtZXRlci5pc19vcHRpb25hbDoKKyAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfbmFt
ZSA9ICdvcHRfJyArIHBhcmFtZXRlcl9uYW1lCisgICAgICAgICAgICByZXR1cm5zLmFwcGVuZCgi
JXMgJXMiICUgKENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3JfY29tbWFuZF9yZXR1cm5fYXJndW1l
bnQocGFyYW1ldGVyLnR5cGUsIHBhcmFtZXRlci5pc19vcHRpb25hbCksIHBhcmFtZXRlcl9uYW1l
KSkKIAogICAgICAgICBjbGFzc19jb21wb25lbnRzID0gWydjbGFzcyddCiAgICAgICAgIGV4cG9y
dF9tYWNybyA9IHNlbGYubW9kZWwoKS5mcmFtZXdvcmsuc2V0dGluZygnZXhwb3J0X21hY3JvJywg
Tm9uZSkKQEAgLTE4OCw4ICsxNzQsOCBAQCBjbGFzcyBDcHBCYWNrZW5kRGlzcGF0Y2hlckhlYWRl
ckdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAgICAgICAgJ2NsYXNzQW5kRXhwb3J0TWFj
cm8nOiAnICcuam9pbihjbGFzc19jb21wb25lbnRzKSwKICAgICAgICAgICAgICdjYWxsYmFja05h
bWUnOiBjYWxsYmFja05hbWUsCiAgICAgICAgICAgICAnY29tbWFuZE5hbWUnOiBjb21tYW5kLmNv
bW1hbmRfbmFtZSwKLSAgICAgICAgICAgICdpblBhcmFtZXRlcnMnOiAiLCAiLmpvaW4oaW5fcGFy
YW1ldGVycyksCi0gICAgICAgICAgICAnb3V0UGFyYW1ldGVycyc6ICIsICIuam9pbihvdXRfcGFy
YW1ldGVycyksCisgICAgICAgICAgICAncGFyYW1ldGVycyc6ICIsICIuam9pbihwYXJhbWV0ZXJz
KSwKKyAgICAgICAgICAgICdyZXR1cm5zJzogIiwgIi5qb2luKHJldHVybnMpLAogICAgICAgICB9
CiAKICAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oY29t
bWFuZC5jb25kaXRpb24sIFRlbXBsYXRlKENwcFRlbXBsYXRlcy5CYWNrZW5kRGlzcGF0Y2hlckhl
YWRlckFzeW5jQ29tbWFuZERlY2xhcmF0aW9uKS5zdWJzdGl0dXRlKE5vbmUsICoqY29tbWFuZF9h
cmdzKSkKQEAgLTIyMyw0ICsyMDksNCBAQCBjbGFzcyBDcHBCYWNrZW5kRGlzcGF0Y2hlckhlYWRl
ckdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhf
Z3VhcmRfZm9yX2NvbmRpdGlvbihkb21haW4uY29uZGl0aW9uLCBUZW1wbGF0ZShDcHBUZW1wbGF0
ZXMuQmFja2VuZERpc3BhdGNoZXJIZWFkZXJEb21haW5EaXNwYXRjaGVyRGVjbGFyYXRpb24pLnN1
YnN0aXR1dGUoTm9uZSwgKipoYW5kbGVyX2FyZ3MpKQogCiAgICAgZGVmIF9nZW5lcmF0ZV9kaXNw
YXRjaGVyX2RlY2xhcmF0aW9uX2Zvcl9jb21tYW5kKHNlbGYsIGNvbW1hbmQpOgotICAgICAgICBy
ZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihjb21tYW5kLmNvbmRpdGlv
biwgIiAgICB2b2lkICVzKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBh
cmFtZXRlcnMpOyIgJSBjb21tYW5kLmNvbW1hbmRfbmFtZSkKKyAgICAgICAgcmV0dXJuIHNlbGYu
d3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oY29tbWFuZC5jb25kaXRpb24sICIgICAgdm9p
ZCAlcyhsb25nIHByb3RvY2xfY2FsbElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29s
X3BhcmFtZXRlcnMpOyIgJSBjb21tYW5kLmNvbW1hbmRfbmFtZSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9i
YWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRj
aGVyX2ltcGxlbWVudGF0aW9uLnB5CmluZGV4IGRhZjE5Yzk1MGZiMDdhYWEyZDhiMzFhMmY0OWM3
Y2FiNTA3MDJjNjAuLjhkZmIyOTRhYjlkMjZlNGU4NTVmNWUxMjlkYjgzMWU3ZjkwMWFiZGUgMTAw
NzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2Vu
L2dlbmVyYXRlX2NwcF9iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVf
Y3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQpAQCAtMzMsMTIgKzMzLDEy
IEBAIHRyeToKICAgICBmcm9tIC5jcHBfZ2VuZXJhdG9yIGltcG9ydCBDcHBHZW5lcmF0b3IKICAg
ICBmcm9tIC5jcHBfZ2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgQ3BwR2VuZXJhdG9yVGVtcGxh
dGVzIGFzIENwcFRlbXBsYXRlcwogICAgIGZyb20gLmdlbmVyYXRvciBpbXBvcnQgR2VuZXJhdG9y
LCB1Y2ZpcnN0Ci0gICAgZnJvbSAubW9kZWxzIGltcG9ydCBPYmplY3RUeXBlLCBBcnJheVR5cGUK
KyAgICBmcm9tIC5tb2RlbHMgaW1wb3J0IE9iamVjdFR5cGUsIEFycmF5VHlwZSwgQWxpYXNlZFR5
cGUsIEVudW1UeXBlCiBleGNlcHQgVmFsdWVFcnJvcjoKICAgICBmcm9tIGNwcF9nZW5lcmF0b3Ig
aW1wb3J0IENwcEdlbmVyYXRvcgogICAgIGZyb20gY3BwX2dlbmVyYXRvcl90ZW1wbGF0ZXMgaW1w
b3J0IENwcEdlbmVyYXRvclRlbXBsYXRlcyBhcyBDcHBUZW1wbGF0ZXMKICAgICBmcm9tIGdlbmVy
YXRvciBpbXBvcnQgR2VuZXJhdG9yLCB1Y2ZpcnN0Ci0gICAgZnJvbSBtb2RlbHMgaW1wb3J0IE9i
amVjdFR5cGUsIEFycmF5VHlwZQorICAgIGZyb20gbW9kZWxzIGltcG9ydCBPYmplY3RUeXBlLCBB
cnJheVR5cGUsIEFsaWFzZWRUeXBlLCBFbnVtVHlwZQogCiBsb2cgPSBsb2dnaW5nLmdldExvZ2dl
cignZ2xvYmFsJykKIApAQCAtODAsMTEgKzgwLDggQEAgY2xhc3MgQ3BwQmFja2VuZERpc3BhdGNo
ZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgIGRlZiBfZ2VuZXJh
dGVfc2Vjb25kYXJ5X2hlYWRlcl9pbmNsdWRlcyhzZWxmKToKICAgICAgICAgaGVhZGVyX2luY2x1
ZGVzID0gWwogICAgICAgICAgICAgKFsiSmF2YVNjcmlwdENvcmUiLCAiV2ViS2l0Il0sICgiSmF2
YVNjcmlwdENvcmUiLCAiaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmgiKSksCi0g
ICAgICAgICAgICAoWyJKYXZhU2NyaXB0Q29yZSIsICJXZWJLaXQiXSwgKCJXVEYiLCAid3RmL0pT
T05WYWx1ZXMuaCIpKSwKICAgICAgICAgICAgIChbIkphdmFTY3JpcHRDb3JlIiwgIldlYktpdCJd
LCAoIldURiIsICJ3dGYvTmV2ZXJEZXN0cm95ZWQuaCIpKSwKLSAgICAgICAgICAgIChbIkphdmFT
Y3JpcHRDb3JlIiwgIldlYktpdCJdLCAoIldURiIsICJ3dGYvdGV4dC9DU3RyaW5nLmgiKSkKICAg
ICAgICAgXQotCiAgICAgICAgIHJldHVybiBzZWxmLmdlbmVyYXRlX2luY2x1ZGVzX2Zyb21fZW50
cmllcyhoZWFkZXJfaW5jbHVkZXMpCiAKIApAQCAtMTIzLDggKzEyMCw4IEBAIGNsYXNzIENwcEJh
Y2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAg
ICAgICAgY2FzZXMgPSBbXQogCiAgICAgICAgIGZpcnN0X2NvbW1hbmRfc3RyaW5nID0gIlxuIi5q
b2luKFsKLSAgICAgICAgICAgICcgICAgaWYgKG1ldGhvZCA9PSAiJXMiKSB7JyAlIGNvbW1hbmRz
WzBdLmNvbW1hbmRfbmFtZSwKLSAgICAgICAgICAgICcgICAgICAgICVzKHJlcXVlc3RJZCwgV1RG
TW92ZShwYXJhbWV0ZXJzKSk7JyAlIGNvbW1hbmRzWzBdLmNvbW1hbmRfbmFtZSwKKyAgICAgICAg
ICAgICcgICAgaWYgKHByb3RvY29sX21ldGhvZCA9PSAiJXMiKSB7JyAlIGNvbW1hbmRzWzBdLmNv
bW1hbmRfbmFtZSwKKyAgICAgICAgICAgICcgICAgICAgICVzKHByb3RvY29sX2NhbGxJZCwgV1RG
TW92ZShwcm90b2NvbF9wYXJhbWV0ZXJzKSk7JyAlIGNvbW1hbmRzWzBdLmNvbW1hbmRfbmFtZSwK
ICAgICAgICAgICAgICcgICAgICAgIHJldHVybjsnLAogICAgICAgICAgICAgJyAgICB9JywKICAg
ICAgICAgXSkKQEAgLTEzMiw4ICsxMjksOCBAQCBjbGFzcyBDcHBCYWNrZW5kRGlzcGF0Y2hlcklt
cGxlbWVudGF0aW9uR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAKICAgICAgICAgZm9yIGNvbW1h
bmQgaW4gY29tbWFuZHNbMTpdOgogICAgICAgICAgICAgYWRkaXRpb25hbF9jb21tYW5kX3N0cmlu
ZyA9ICJcbiIuam9pbihbCi0gICAgICAgICAgICAgICAgJyAgICBpZiAobWV0aG9kID09ICIlcyIp
IHsnICUgY29tbWFuZC5jb21tYW5kX25hbWUsCi0gICAgICAgICAgICAgICAgJyAgICAgICAgJXMo
cmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsnICUgY29tbWFuZC5jb21tYW5kX25hbWUs
CisgICAgICAgICAgICAgICAgJyAgICBpZiAocHJvdG9jb2xfbWV0aG9kID09ICIlcyIpIHsnICUg
Y29tbWFuZC5jb21tYW5kX25hbWUsCisgICAgICAgICAgICAgICAgJyAgICAgICAgJXMocHJvdG9j
b2xfY2FsbElkLCBXVEZNb3ZlKHByb3RvY29sX3BhcmFtZXRlcnMpKTsnICUgY29tbWFuZC5jb21t
YW5kX25hbWUsCiAgICAgICAgICAgICAgICAgJyAgICAgICAgcmV0dXJuOycsCiAgICAgICAgICAg
ICAgICAgJyAgICB9JywKICAgICAgICAgICAgIF0pCkBAIC0xNjUsMTQ2ICsxNjIsMTM2IEBAIGNs
YXNzIENwcEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IoQ3BwR2VuZXJh
dG9yKToKICAgICAgICAgcmV0dXJuIFRlbXBsYXRlKENwcFRlbXBsYXRlcy5CYWNrZW5kRGlzcGF0
Y2hlckltcGxlbWVudGF0aW9uTGFyZ2VTd2l0Y2gpLnN1YnN0aXR1dGUoTm9uZSwgKipzd2l0Y2hf
YXJncykKIAogICAgIGRlZiBfZ2VuZXJhdGVfYXN5bmNfZGlzcGF0Y2hlcl9jbGFzc19mb3JfZG9t
YWluKHNlbGYsIGNvbW1hbmQsIGRvbWFpbik6Ci0gICAgICAgIG91dF9wYXJhbWV0ZXJfYXNzaWdu
bWVudHMgPSBbXQotICAgICAgICBmb3JtYWxfcGFyYW1ldGVycyA9IFtdCisgICAgICAgIHJldHVy
bl9hc3NpZ25tZW50cyA9IFtdCisgICAgICAgIGNhbGxiYWNrX3BhcmFtZXRlcnMgPSBbXQogCiAg
ICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gY29tbWFuZC5yZXR1cm5fcGFyYW1ldGVyczoKKyAgICAg
ICAgICAgIHBhcmFtZXRlcl9uYW1lID0gcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lCisgICAgICAg
ICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6CisgICAgICAgICAgICAgICAgcGFyYW1ldGVy
X25hbWUgPSAnb3B0XycgKyBwYXJhbWV0ZXJfbmFtZQorCisgICAgICAgICAgICBwYXJhbWV0ZXJf
dmFsdWUgPSBwYXJhbWV0ZXJfbmFtZQorCisgICAgICAgICAgICBfdHlwZSA9IHBhcmFtZXRlci50
eXBlCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBBbGlhc2VkVHlwZSk6CisgICAg
ICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5hbGlhc2VkX3R5cGUKKyAgICAgICAgICAgIGlmIGlz
aW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKSBhbmQgX3R5cGUuaXNfYW5vbnltb3VzOgorICAgICAg
ICAgICAgICAgIF90eXBlID0gX3R5cGUucHJpbWl0aXZlX3R5cGUKKworICAgICAgICAgICAgaWYg
X3R5cGUuaXNfZW51bSgpOgorICAgICAgICAgICAgICAgIGlmIHBhcmFtZXRlci5pc19vcHRpb25h
bDoKKyAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyX3ZhbHVlID0gJyonICsgcGFyYW1ldGVy
X3ZhbHVlCisgICAgICAgICAgICAgICAgcGFyYW1ldGVyX3ZhbHVlID0gJ1Byb3RvY29sOjolczo6
Z2V0RW51bUNvbnN0YW50VmFsdWUoJXMpJyAlIChzZWxmLmhlbHBlcnNfbmFtZXNwYWNlKCksIHBh
cmFtZXRlcl92YWx1ZSkKKyAgICAgICAgICAgIGVsaWYgQ3BwR2VuZXJhdG9yLnNob3VsZF9yZWxl
YXNlX2FyZ3VtZW50KF90eXBlLCBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwpOgorICAgICAgICAgICAg
ICAgIHBhcmFtZXRlcl92YWx1ZSA9IHBhcmFtZXRlcl92YWx1ZSArICcucmVsZWFzZU5vbk51bGwo
KScKKyAgICAgICAgICAgIGVsaWYgQ3BwR2VuZXJhdG9yLnNob3VsZF9kZXJlZmVyZW5jZV9hcmd1
bWVudChfdHlwZSwgcGFyYW1ldGVyLmlzX29wdGlvbmFsKToKKyAgICAgICAgICAgICAgICBwYXJh
bWV0ZXJfdmFsdWUgPSAnKicgKyBwYXJhbWV0ZXJfdmFsdWUKKyAgICAgICAgICAgIGVsaWYgQ3Bw
R2VuZXJhdG9yLnNob3VsZF9tb3ZlX2FyZ3VtZW50KF90eXBlLCBwYXJhbWV0ZXIuaXNfb3B0aW9u
YWwpOgorICAgICAgICAgICAgICAgIHBhcmFtZXRlcl92YWx1ZSA9ICdXVEZNb3ZlKCVzKScgJSBw
YXJhbWV0ZXJfdmFsdWUKKwogICAgICAgICAgICAgcGFyYW1fYXJncyA9IHsKLSAgICAgICAgICAg
ICAgICAna2V5ZWRTZXRNZXRob2QnOiBDcHBHZW5lcmF0b3IuY3BwX3NldHRlcl9tZXRob2RfZm9y
X3R5cGUocGFyYW1ldGVyLnR5cGUpLAorICAgICAgICAgICAgICAgICdrZXllZFNldE1ldGhvZCc6
IENwcEdlbmVyYXRvci5jcHBfc2V0dGVyX21ldGhvZF9mb3JfdHlwZShfdHlwZSksCiAgICAgICAg
ICAgICAgICAgJ3BhcmFtZXRlcktleSc6IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwKLSAgICAg
ICAgICAgICAgICAncGFyYW1ldGVyTmFtZSc6IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwKLSAg
ICAgICAgICAgICAgICAncGFyYW1ldGVyVHlwZSc6IENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3Jf
c3RhY2tfaW5fcGFyYW1ldGVyKHBhcmFtZXRlciksCi0gICAgICAgICAgICAgICAgJ2hlbHBlcnNO
YW1lc3BhY2UnOiBzZWxmLmhlbHBlcnNfbmFtZXNwYWNlKCksCisgICAgICAgICAgICAgICAgJ3Bh
cmFtZXRlck5hbWUnOiBwYXJhbWV0ZXJfbmFtZSwKKyAgICAgICAgICAgICAgICAncGFyYW1ldGVy
VmFsdWUnOiBwYXJhbWV0ZXJfdmFsdWUsCiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGZv
cm1hbF9wYXJhbWV0ZXJzLmFwcGVuZCgnJXMgJXMnICUgKENwcEdlbmVyYXRvci5jcHBfdHlwZV9m
b3JfZm9ybWFsX2FzeW5jX3BhcmFtZXRlcihwYXJhbWV0ZXIpLCBwYXJhbWV0ZXIucGFyYW1ldGVy
X25hbWUpKQorICAgICAgICAgICAgY2FsbGJhY2tfcGFyYW1ldGVycy5hcHBlbmQoJyVzICVzJyAl
IChDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX2NvbW1hbmRfcmV0dXJuX2FyZ3VtZW50KF90eXBl
LCBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwpLCBwYXJhbWV0ZXJfbmFtZSkpCiAKICAgICAgICAgICAg
IGlmIHBhcmFtZXRlci5pc19vcHRpb25hbDoKLSAgICAgICAgICAgICAgICBpZiBDcHBHZW5lcmF0
b3Iuc2hvdWxkX3VzZV93cmFwcGVyX2Zvcl9yZXR1cm5fdHlwZShwYXJhbWV0ZXIudHlwZSk6Ci0g
ICAgICAgICAgICAgICAgICAgIG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAg
aWYgKCUocGFyYW1ldGVyTmFtZSlzLmhhc1ZhbHVlKCkpJyAlIHBhcmFtX2FyZ3MpCi0gICAgICAg
ICAgICAgICAgICAgIG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAgICAgIGpz
b25NZXNzYWdlLT4lKGtleWVkU2V0TWV0aG9kKXMoIiUocGFyYW1ldGVyS2V5KXMiX3MsIColKHBh
cmFtZXRlck5hbWUpcyk7JyAlIHBhcmFtX2FyZ3MpCi0gICAgICAgICAgICAgICAgZWxzZToKLSAg
ICAgICAgICAgICAgICAgICAgb3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICBp
ZiAoJShwYXJhbWV0ZXJOYW1lKXMpJyAlIHBhcmFtX2FyZ3MpCi0gICAgICAgICAgICAgICAgICAg
IG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAgICAgIGpzb25NZXNzYWdlLT4l
KGtleWVkU2V0TWV0aG9kKXMoIiUocGFyYW1ldGVyS2V5KXMiX3MsICUocGFyYW1ldGVyTmFtZSlz
KTsnICUgcGFyYW1fYXJncykKLSAgICAgICAgICAgIGVsaWYgcGFyYW1ldGVyLnR5cGUuaXNfZW51
bSgpOgotICAgICAgICAgICAgICAgIG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcg
ICAganNvbk1lc3NhZ2UtPiUoa2V5ZWRTZXRNZXRob2QpcygiJShwYXJhbWV0ZXJLZXkpcyJfcywg
SW5zcGVjdG9yOjpQcm90b2NvbDo6JShoZWxwZXJzTmFtZXNwYWNlKXM6OmdldEVudW1Db25zdGFu
dFZhbHVlKCUocGFyYW1ldGVyTmFtZSlzKSk7JyAlIHBhcmFtX2FyZ3MpCisgICAgICAgICAgICAg
ICAgcmV0dXJuX2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAgIGlmICghISUocGFyYW1ldGVyTmFtZSlz
KScgJSBwYXJhbV9hcmdzKQorICAgICAgICAgICAgICAgIHJldHVybl9hc3NpZ25tZW50cy5hcHBl
bmQoJyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPiUoa2V5ZWRTZXRNZXRob2QpcygiJShw
YXJhbWV0ZXJLZXkpcyJfcywgJShwYXJhbWV0ZXJWYWx1ZSlzKTsnICUgcGFyYW1fYXJncykKICAg
ICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgb3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50
cy5hcHBlbmQoJyAgICBqc29uTWVzc2FnZS0+JShrZXllZFNldE1ldGhvZClzKCIlKHBhcmFtZXRl
cktleSlzIl9zLCAlKHBhcmFtZXRlck5hbWUpcyk7JyAlIHBhcmFtX2FyZ3MpCisgICAgICAgICAg
ICAgICAgcmV0dXJuX2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAgIHByb3RvY29sX2pzb25NZXNzYWdl
LT4lKGtleWVkU2V0TWV0aG9kKXMoIiUocGFyYW1ldGVyS2V5KXMiX3MsICUocGFyYW1ldGVyVmFs
dWUpcyk7JyAlIHBhcmFtX2FyZ3MpCiAKICAgICAgICAgYXN5bmNfYXJncyA9IHsKICAgICAgICAg
ICAgICdkb21haW5OYW1lJzogZG9tYWluLmRvbWFpbl9uYW1lLAogICAgICAgICAgICAgJ2NhbGxi
YWNrTmFtZSc6IHVjZmlyc3QoY29tbWFuZC5jb21tYW5kX25hbWUpICsgJ0NhbGxiYWNrJywKLSAg
ICAgICAgICAgICdmb3JtYWxQYXJhbWV0ZXJzJzogIiwgIi5qb2luKGZvcm1hbF9wYXJhbWV0ZXJz
KSwKLSAgICAgICAgICAgICdvdXRQYXJhbWV0ZXJBc3NpZ25tZW50cyc6ICJcbiIuam9pbihvdXRf
cGFyYW1ldGVyX2Fzc2lnbm1lbnRzKQorICAgICAgICAgICAgJ2NhbGxiYWNrUGFyYW1ldGVycyc6
ICIsICIuam9pbihjYWxsYmFja19wYXJhbWV0ZXJzKSwKKyAgICAgICAgICAgICdyZXR1cm5Bc3Np
Z25tZW50cyc6ICJcbiIuam9pbihyZXR1cm5fYXNzaWdubWVudHMpCiAgICAgICAgIH0KICAgICAg
ICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oY29tbWFuZC5jb25k
aXRpb24sIFRlbXBsYXRlKENwcFRlbXBsYXRlcy5CYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0
aW9uQXN5bmNDb21tYW5kKS5zdWJzdGl0dXRlKE5vbmUsICoqYXN5bmNfYXJncykpCiAKICAgICBk
ZWYgX2dlbmVyYXRlX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb25fZm9yX2NvbW1hbmQoc2VsZiwg
Y29tbWFuZCwgZG9tYWluKToKLSAgICAgICAgaW5fcGFyYW1ldGVyX2RlY2xhcmF0aW9ucyA9IFtd
Ci0gICAgICAgIG91dF9wYXJhbWV0ZXJfZGVjbGFyYXRpb25zID0gW10KLSAgICAgICAgb3V0X3Bh
cmFtZXRlcl9hc3NpZ25tZW50cyA9IFtdCi0gICAgICAgIGFsdGVybmF0ZV9kaXNwYXRjaGVyX21l
dGhvZF9wYXJhbWV0ZXJzID0gWydyZXF1ZXN0SWQnXQorICAgICAgICBwYXJhbWV0ZXJfZGVjbGFy
YXRpb25zID0gW10KKyAgICAgICAgcGFyYW1ldGVyX2VudW1fcmVzb2x1dGlvbnMgPSBbXQorICAg
ICAgICBhbHRlcm5hdGVfZGlzcGF0Y2hlcl9tZXRob2RfcGFyYW1ldGVycyA9IFsncHJvdG9jb2xf
Y2FsbElkJ10KICAgICAgICAgbWV0aG9kX3BhcmFtZXRlcnMgPSBbXQotICAgICAgICBpZiBub3Qg
Y29tbWFuZC5pc19hc3luYzoKLSAgICAgICAgICAgIG1ldGhvZF9wYXJhbWV0ZXJzLmFwcGVuZCgn
ZXJyb3InKQogCiAgICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gY29tbWFuZC5jYWxsX3BhcmFtZXRl
cnM6Ci0gICAgICAgICAgICBwYXJhbWV0ZXJfbmFtZSA9ICdpbl8nICsgcGFyYW1ldGVyLnBhcmFt
ZXRlcl9uYW1lCisgICAgICAgICAgICBwYXJhbWV0ZXJfbmFtZSA9IHBhcmFtZXRlci5wYXJhbWV0
ZXJfbmFtZQogICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgogICAgICAgICAg
ICAgICAgIHBhcmFtZXRlcl9uYW1lID0gJ29wdF8nICsgcGFyYW1ldGVyX25hbWUKKyAgICAgICAg
ICAgIHBhcmFtZXRlcl9uYW1lID0gJ2luXycgKyBwYXJhbWV0ZXJfbmFtZQogCi0gICAgICAgICAg
ICBvdXRfc3VjY2Vzc19hcmd1bWVudCA9ICdudWxscHRyJwotICAgICAgICAgICAgaWYgcGFyYW1l
dGVyLmlzX29wdGlvbmFsOgotICAgICAgICAgICAgICAgIG91dF9zdWNjZXNzX2FyZ3VtZW50ID0g
JyYlc192YWx1ZUZvdW5kJyAlIHBhcmFtZXRlcl9uYW1lCi0gICAgICAgICAgICAgICAgaW5fcGFy
YW1ldGVyX2RlY2xhcmF0aW9ucy5hcHBlbmQoJyAgICBib29sICVzX3ZhbHVlRm91bmQgPSBmYWxz
ZTsnICUgcGFyYW1ldGVyX25hbWUpCisgICAgICAgICAgICB2YXJpYWJsZV9uYW1lID0gcGFyYW1l
dGVyX25hbWUKIAotICAgICAgICAgICAgIyBOb3cgYWRkIGFwcHJvcHJpYXRlIG9wZXJhdG9ycy4K
LSAgICAgICAgICAgIHBhcmFtZXRlcl9leHByZXNzaW9uID0gcGFyYW1ldGVyX25hbWUKKyAgICAg
ICAgICAgIF90eXBlID0gcGFyYW1ldGVyLnR5cGUKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uo
X3R5cGUsIEFsaWFzZWRUeXBlKToKKyAgICAgICAgICAgICAgICBfdHlwZSA9IF90eXBlLmFsaWFz
ZWRfdHlwZQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgRW51bVR5cGUpIGFuZCBf
dHlwZS5pc19hbm9ueW1vdXM6CisgICAgICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5wcmltaXRp
dmVfdHlwZQogCi0gICAgICAgICAgICBpZiBDcHBHZW5lcmF0b3Iuc2hvdWxkX3VzZV9yZWZlcmVu
Y2VzX2Zvcl90eXBlKHBhcmFtZXRlci50eXBlKToKLSAgICAgICAgICAgICAgICBpZiBwYXJhbWV0
ZXIuaXNfb3B0aW9uYWw6Ci0gICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcl9leHByZXNzaW9u
ID0gJyVzLmdldCgpJyAlIHBhcmFtZXRlcl9leHByZXNzaW9uCi0gICAgICAgICAgICAgICAgZWxz
ZToKLSAgICAgICAgICAgICAgICAgICAgIyBUaGlzIGFzc3VtZXMgdGhhdCB3ZSBoYXZlIGFscmVh
ZHkgcHJvdmVkIHRoZSBvYmplY3QgaXMgbm9uLW51bGwuCi0gICAgICAgICAgICAgICAgICAgICMg
SWYgYSByZXF1aXJlZCBwcm9wZXJ0eSBpcyBtaXNzaW5nLCBJbnNwZWN0b3JCYWNrZW5kOjpnZXRP
YmplY3Qgd2lsbAotICAgICAgICAgICAgICAgICAgICAjIGFwcGVuZCBhIHByb3RvY29sIGVycm9y
LCBhbmQgdGhlIG1ldGhvZCBkaXNwYXRjaGVyIHdpbGwgcmV0dXJuIHdpdGhvdXQKLSAgICAgICAg
ICAgICAgICAgICAgIyBpbnZva2luZyB0aGUgYmFja2VuZCBtZXRob2QgKGFuZCBkZXJlZmVyZW5j
aW5nIHRoZSBvYmplY3QpLgotICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfZXhwcmVzc2lv
biA9ICcqJXMnICUgcGFyYW1ldGVyX2V4cHJlc3Npb24KLSAgICAgICAgICAgIGVsaWYgcGFyYW1l
dGVyLmlzX29wdGlvbmFsOgotICAgICAgICAgICAgICAgIHBhcmFtZXRlcl9leHByZXNzaW9uID0g
JyYlcycgJSBwYXJhbWV0ZXJfZXhwcmVzc2lvbgorICAgICAgICAgICAgaWYgX3R5cGUuaXNfZW51
bSgpOgorICAgICAgICAgICAgICAgIHBhcmFtZXRlcl9uYW1lID0gcGFyYW1ldGVyX25hbWUgKyAn
X2pzb24nCiAKLSAgICAgICAgICAgIHBhcmFtX2FyZ3MgPSB7Ci0gICAgICAgICAgICAgICAgJ3Bh
cmFtZXRlclR5cGUnOiBDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX3N0YWNrX2luX3BhcmFtZXRl
cihwYXJhbWV0ZXIpLAotICAgICAgICAgICAgICAgICdwYXJhbWV0ZXJLZXknOiBwYXJhbWV0ZXIu
cGFyYW1ldGVyX25hbWUsCi0gICAgICAgICAgICAgICAgJ3BhcmFtZXRlck5hbWUnOiBwYXJhbWV0
ZXJfbmFtZSwKLSAgICAgICAgICAgICAgICAncGFyYW1ldGVyRXhwcmVzc2lvbic6IHBhcmFtZXRl
cl9leHByZXNzaW9uLAotICAgICAgICAgICAgICAgICdrZXllZEdldE1ldGhvZCc6IENwcEdlbmVy
YXRvci5jcHBfZ2V0dGVyX21ldGhvZF9mb3JfdHlwZShwYXJhbWV0ZXIudHlwZSksCi0gICAgICAg
ICAgICAgICAgJ3N1Y2Nlc3NPdXRQYXJhbSc6IG91dF9zdWNjZXNzX2FyZ3VtZW50Ci0gICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgYWx0ZXJuYXRlX2Rpc3BhdGNoZXJfbWV0aG9kX3BhcmFt
ZXRlcnMuYXBwZW5kKHBhcmFtZXRlcl9uYW1lKQogCi0gICAgICAgICAgICBpbl9wYXJhbWV0ZXJf
ZGVjbGFyYXRpb25zLmFwcGVuZCgnICAgICUocGFyYW1ldGVyVHlwZSlzICUocGFyYW1ldGVyTmFt
ZSlzID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+JShrZXllZEdldE1ldGhvZClzKHBhcmFtZXRlcnMu
Z2V0KCksICIlKHBhcmFtZXRlcktleSlzIl9zLCAlKHN1Y2Nlc3NPdXRQYXJhbSlzKTsnICUgcGFy
YW1fYXJncykKLQotICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgotICAgICAg
ICAgICAgICAgIG9wdGlvbmFsX2luX3BhcmFtZXRlcl9zdHJpbmcgPSAnJShwYXJhbWV0ZXJOYW1l
KXNfdmFsdWVGb3VuZCA/ICUocGFyYW1ldGVyRXhwcmVzc2lvbilzIDogbnVsbHB0cicgJSBwYXJh
bV9hcmdzCi0gICAgICAgICAgICAgICAgYWx0ZXJuYXRlX2Rpc3BhdGNoZXJfbWV0aG9kX3BhcmFt
ZXRlcnMuYXBwZW5kKG9wdGlvbmFsX2luX3BhcmFtZXRlcl9zdHJpbmcpCi0gICAgICAgICAgICAg
ICAgbWV0aG9kX3BhcmFtZXRlcnMuYXBwZW5kKG9wdGlvbmFsX2luX3BhcmFtZXRlcl9zdHJpbmcp
Ci0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGFsdGVybmF0ZV9kaXNwYXRjaGVy
X21ldGhvZF9wYXJhbWV0ZXJzLmFwcGVuZChwYXJhbWV0ZXJfZXhwcmVzc2lvbikKLSAgICAgICAg
ICAgICAgICBtZXRob2RfcGFyYW1ldGVycy5hcHBlbmQocGFyYW1ldGVyX2V4cHJlc3Npb24pCi0K
LSAgICAgICAgaWYgY29tbWFuZC5pc19hc3luYzoKLSAgICAgICAgICAgIGFzeW5jX2FyZ3MgPSB7
Ci0gICAgICAgICAgICAgICAgJ2RvbWFpbk5hbWUnOiBkb21haW4uZG9tYWluX25hbWUsCi0gICAg
ICAgICAgICAgICAgJ2NhbGxiYWNrTmFtZSc6IHVjZmlyc3QoY29tbWFuZC5jb21tYW5kX25hbWUp
ICsgJ0NhbGxiYWNrJwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBvdXRfcGFyYW1ldGVy
X2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAgICAgICBjYWxsYmFjay0+ZGlzYWJsZSgpOycpCi0gICAg
ICAgICAgICBvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAgICAgICBtX2JhY2tl
bmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2
ZXJFcnJvciwgZXJyb3IpOycpCi0gICAgICAgICAgICBvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRz
LmFwcGVuZCgnICAgICAgICByZXR1cm47JykKLSAgICAgICAgICAgIG1ldGhvZF9wYXJhbWV0ZXJz
LmFwcGVuZCgnY2FsbGJhY2suY29weVJlZigpJykKLQotICAgICAgICBlbHNlOgotICAgICAgICAg
ICAgZm9yIHBhcmFtZXRlciBpbiBjb21tYW5kLnJldHVybl9wYXJhbWV0ZXJzOgotICAgICAgICAg
ICAgICAgIHBhcmFtX2FyZ3MgPSB7Ci0gICAgICAgICAgICAgICAgICAgICdwYXJhbWV0ZXJUeXBl
JzogQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl9zdGFja19vdXRfcGFyYW1ldGVyKHBhcmFtZXRl
ciksCi0gICAgICAgICAgICAgICAgICAgICdwYXJhbWV0ZXJLZXknOiBwYXJhbWV0ZXIucGFyYW1l
dGVyX25hbWUsCi0gICAgICAgICAgICAgICAgICAgICdwYXJhbWV0ZXJOYW1lJzogcGFyYW1ldGVy
LnBhcmFtZXRlcl9uYW1lLAotICAgICAgICAgICAgICAgICAgICAna2V5ZWRTZXRNZXRob2QnOiBD
cHBHZW5lcmF0b3IuY3BwX3NldHRlcl9tZXRob2RfZm9yX3R5cGUocGFyYW1ldGVyLnR5cGUpLAor
ICAgICAgICAgICAgICAgIGVudW1fYXJncyA9IHsKICAgICAgICAgICAgICAgICAgICAgJ2hlbHBl
cnNOYW1lc3BhY2UnOiBzZWxmLmhlbHBlcnNfbmFtZXNwYWNlKCksCisgICAgICAgICAgICAgICAg
ICAgICdwYXJhbWV0ZXJLZXknOiBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUsCisgICAgICAgICAg
ICAgICAgICAgICdlbnVtVHlwZSc6IENwcEdlbmVyYXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3Jf
dHlwZShfdHlwZSksCisgICAgICAgICAgICAgICAgICAgICdlbnVtVmFyaWFibGVOYW1lJzogdmFy
aWFibGVfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgJ3N0cmluZ1ZhcmlhYmxlTmFtZSc6IHBh
cmFtZXRlcl9uYW1lLAogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIG91dF9w
YXJhbWV0ZXJfZGVjbGFyYXRpb25zLmFwcGVuZCgnICAgICUocGFyYW1ldGVyVHlwZSlzIG91dF8l
KHBhcmFtZXRlck5hbWUpczsnICUgcGFyYW1fYXJncykKKyAgICAgICAgICAgICAgICBpZiBsZW4o
cGFyYW1ldGVyX2VudW1fcmVzb2x1dGlvbnMpOgorICAgICAgICAgICAgICAgICAgICBwYXJhbWV0
ZXJfZW51bV9yZXNvbHV0aW9ucy5hcHBlbmQoJycpCisgICAgICAgICAgICAgICAgcGFyYW1ldGVy
X2VudW1fcmVzb2x1dGlvbnMuYXBwZW5kKCcgICAgYXV0byAlKGVudW1WYXJpYWJsZU5hbWUpcyA9
IFByb3RvY29sOjolKGhlbHBlcnNOYW1lc3BhY2Upczo6cGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5n
PCUoZW51bVR5cGUpcz4oJShzdHJpbmdWYXJpYWJsZU5hbWUpcyk7JyAlIGVudW1fYXJncykKICAg
ICAgICAgICAgICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6Ci0gICAgICAgICAgICAgICAg
ICAgIGlmIENwcEdlbmVyYXRvci5zaG91bGRfdXNlX3dyYXBwZXJfZm9yX3JldHVybl90eXBlKHBh
cmFtZXRlci50eXBlKToKLSAgICAgICAgICAgICAgICAgICAgICAgIG91dF9wYXJhbWV0ZXJfYXNz
aWdubWVudHMuYXBwZW5kKCcgICAgICAgIGlmIChvdXRfJShwYXJhbWV0ZXJOYW1lKXMuaGFzVmFs
dWUoKSknICUgcGFyYW1fYXJncykKLSAgICAgICAgICAgICAgICAgICAgICAgIG91dF9wYXJhbWV0
ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAgICAgICAgICByZXN1bHQtPiUoa2V5ZWRTZXRNZXRo
b2QpcygiJShwYXJhbWV0ZXJLZXkpcyJfcywgKm91dF8lKHBhcmFtZXRlck5hbWUpcyk7JyAlIHBh
cmFtX2FyZ3MpCi0gICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAgICAgICBpZiAob3V0XyUo
cGFyYW1ldGVyTmFtZSlzKScgJSBwYXJhbV9hcmdzKQotICAgICAgICAgICAgICAgICAgICAgICAg
b3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICAgICAgICAgIHJlc3VsdC0+JShr
ZXllZFNldE1ldGhvZClzKCIlKHBhcmFtZXRlcktleSlzIl9zLCBvdXRfJShwYXJhbWV0ZXJOYW1l
KXMpOycgJSBwYXJhbV9hcmdzKQotICAgICAgICAgICAgICAgIGVsaWYgcGFyYW1ldGVyLnR5cGUu
aXNfZW51bSgpOgotICAgICAgICAgICAgICAgICAgICBvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRz
LmFwcGVuZCgnICAgICAgICByZXN1bHQtPiUoa2V5ZWRTZXRNZXRob2QpcygiJShwYXJhbWV0ZXJL
ZXkpcyJfcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6JShoZWxwZXJzTmFtZXNwYWNlKXM6OmdldEVu
dW1Db25zdGFudFZhbHVlKG91dF8lKHBhcmFtZXRlck5hbWUpcykpOycgJSBwYXJhbV9hcmdzKQor
ICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfZXhwcmVzc2lvbiA9ICdXVEZNb3ZlKCVzKScg
JSB2YXJpYWJsZV9uYW1lCiAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAg
ICAgb3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICAgICAgcmVzdWx0LT4lKGtl
eWVkU2V0TWV0aG9kKXMoIiUocGFyYW1ldGVyS2V5KXMiX3MsIG91dF8lKHBhcmFtZXRlck5hbWUp
cyk7JyAlIHBhcmFtX2FyZ3MpCisgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcl9lbnVtX3Jl
c29sdXRpb25zLmFwcGVuZCgnICAgIGlmICghJShlbnVtVmFyaWFibGVOYW1lKXMpIHsnICUgZW51
bV9hcmdzKQorICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfZW51bV9yZXNvbHV0aW9ucy5h
cHBlbmQoJyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihC
YWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIG1ha2VTdHJpbmcoIlVua25vd24gJShwYXJh
bWV0ZXJLZXkpczogIl9zLCAlKHN0cmluZ1ZhcmlhYmxlTmFtZSlzKSk7JyAlIGVudW1fYXJncykK
KyAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyX2VudW1fcmVzb2x1dGlvbnMuYXBwZW5kKCcg
ICAgICAgIHJldHVybjsnKQorICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfZW51bV9yZXNv
bHV0aW9ucy5hcHBlbmQoJyAgICB9JykKKyAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyX2V4
cHJlc3Npb24gPSAnKicgKyB2YXJpYWJsZV9uYW1lCisgICAgICAgICAgICBlbHNlOgorICAgICAg
ICAgICAgICAgIGlmIF90eXBlLnJhd19uYW1lKCkgPT0gJ3N0cmluZyc6CisgICAgICAgICAgICAg
ICAgICAgIHBhcmFtZXRlcl9leHByZXNzaW9uID0gdmFyaWFibGVfbmFtZQorICAgICAgICAgICAg
ICAgIGVsaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAgICAgICBwYXJh
bWV0ZXJfZXhwcmVzc2lvbiA9ICdXVEZNb3ZlKCVzKScgJSB2YXJpYWJsZV9uYW1lCisgICAgICAg
ICAgICAgICAgZWxpZiBfdHlwZS5yYXdfbmFtZSgpIGluIFsnYm9vbGVhbicsICdpbnRlZ2VyJywg
J251bWJlciddOgorICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfZXhwcmVzc2lvbiA9ICcq
JyArIHZhcmlhYmxlX25hbWUKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAg
ICAgICBwYXJhbWV0ZXJfZXhwcmVzc2lvbiA9IHZhcmlhYmxlX25hbWUgKyAnLnJlbGVhc2VOb25O
dWxsKCknCisgICAgICAgICAgICAgICAgYWx0ZXJuYXRlX2Rpc3BhdGNoZXJfbWV0aG9kX3BhcmFt
ZXRlcnMuYXBwZW5kKHBhcmFtZXRlcl9leHByZXNzaW9uKQorICAgICAgICAgICAgbWV0aG9kX3Bh
cmFtZXRlcnMuYXBwZW5kKHBhcmFtZXRlcl9leHByZXNzaW9uKQogCi0gICAgICAgICAgICAgICAg
aWYgQ3BwR2VuZXJhdG9yLnNob3VsZF9wYXNzX2J5X2NvcHlfZm9yX3JldHVybl90eXBlKHBhcmFt
ZXRlci50eXBlKSBvciBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwgYW5kIENwcEdlbmVyYXRvci5zaG91
bGRfdXNlX3dyYXBwZXJfZm9yX3JldHVybl90eXBlKHBhcmFtZXRlci50eXBlKToKLSAgICAgICAg
ICAgICAgICAgICAgbWV0aG9kX3BhcmFtZXRlcnMuYXBwZW5kKCdvdXRfJyArIHBhcmFtZXRlci5w
YXJhbWV0ZXJfbmFtZSkKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAg
ICBtZXRob2RfcGFyYW1ldGVycy5hcHBlbmQoJyZvdXRfJyArIHBhcmFtZXRlci5wYXJhbWV0ZXJf
bmFtZSkKKyAgICAgICAgICAgIHBhcmFtX2FyZ3MgPSB7CisgICAgICAgICAgICAgICAgJ3BhcmFt
ZXRlcktleSc6IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwKKyAgICAgICAgICAgICAgICAncGFy
YW1ldGVyTmFtZSc6IHBhcmFtZXRlcl9uYW1lLAorICAgICAgICAgICAgICAgICdrZXllZEdldE1l
dGhvZCc6IENwcEdlbmVyYXRvci5jcHBfZ2V0dGVyX21ldGhvZF9mb3JfdHlwZShfdHlwZSksCisg
ICAgICAgICAgICAgICAgJ3JlcXVpcmVkJzogJ2ZhbHNlJyBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9u
YWwgZWxzZSAndHJ1ZScsCisgICAgICAgICAgICB9CisgICAgICAgICAgICBwYXJhbWV0ZXJfZGVj
bGFyYXRpb25zLmFwcGVuZCgnICAgIGF1dG8gJShwYXJhbWV0ZXJOYW1lKXMgPSBtX2JhY2tlbmRE
aXNwYXRjaGVyLT4lKGtleWVkR2V0TWV0aG9kKXMocHJvdG9jb2xfcGFyYW1ldGVycy5nZXQoKSwg
IiUocGFyYW1ldGVyS2V5KXMiX3MsICUocmVxdWlyZWQpcyk7JyAlIHBhcmFtX2FyZ3MpCisKKyAg
ICAgICAgaWYgY29tbWFuZC5pc19hc3luYzoKKyAgICAgICAgICAgIG1ldGhvZF9wYXJhbWV0ZXJz
LmFwcGVuZCgnYWRvcHRSZWYoKm5ldyAlc0JhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6JXMobV9i
YWNrZW5kRGlzcGF0Y2hlci5jb3B5UmVmKCksIHByb3RvY29sX2NhbGxJZCkpJyAlIChkb21haW4u
ZG9tYWluX25hbWUsICclc0NhbGxiYWNrJyAlIHVjZmlyc3QoY29tbWFuZC5jb21tYW5kX25hbWUp
KSkKIAogICAgICAgICBjb21tYW5kX2FyZ3MgPSB7CiAgICAgICAgICAgICAnZG9tYWluTmFtZSc6
IGRvbWFpbi5kb21haW5fbmFtZSwKLSAgICAgICAgICAgICdjYWxsYmFja05hbWUnOiAnJXNDYWxs
YmFjaycgJSB1Y2ZpcnN0KGNvbW1hbmQuY29tbWFuZF9uYW1lKSwKICAgICAgICAgICAgICdjb21t
YW5kTmFtZSc6IGNvbW1hbmQuY29tbWFuZF9uYW1lLAotICAgICAgICAgICAgJ2luUGFyYW1ldGVy
RGVjbGFyYXRpb25zJzogJ1xuJy5qb2luKGluX3BhcmFtZXRlcl9kZWNsYXJhdGlvbnMpLAorICAg
ICAgICAgICAgJ3BhcmFtZXRlckRlY2xhcmF0aW9ucyc6ICdcbicuam9pbihwYXJhbWV0ZXJfZGVj
bGFyYXRpb25zKSwKICAgICAgICAgICAgICdpbnZvY2F0aW9uUGFyYW1ldGVycyc6ICcsICcuam9p
bihtZXRob2RfcGFyYW1ldGVycyksCiAgICAgICAgICAgICAnYWx0ZXJuYXRlSW52b2NhdGlvblBh
cmFtZXRlcnMnOiAnLCAnLmpvaW4oYWx0ZXJuYXRlX2Rpc3BhdGNoZXJfbWV0aG9kX3BhcmFtZXRl
cnMpLAogICAgICAgICB9CiAKICAgICAgICAgbGluZXMgPSBbXQogICAgICAgICBpZiBsZW4oY29t
bWFuZC5jYWxsX3BhcmFtZXRlcnMpID09IDA6Ci0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ3Zv
aWQgJShkb21haW5OYW1lKXNCYWNrZW5kRGlzcGF0Y2hlcjo6JShjb21tYW5kTmFtZSlzKGxvbmcg
cmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKScgJSBjb21tYW5kX2FyZ3MpCisgICAg
ICAgICAgICBsaW5lcy5hcHBlbmQoJ3ZvaWQgJShkb21haW5OYW1lKXNCYWNrZW5kRGlzcGF0Y2hl
cjo6JShjb21tYW5kTmFtZSlzKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiYmKScgJSBjb21tYW5kX2FyZ3MpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBsaW5l
cy5hcHBlbmQoJ3ZvaWQgJShkb21haW5OYW1lKXNCYWNrZW5kRGlzcGF0Y2hlcjo6JShjb21tYW5k
TmFtZSlzKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMp
JyAlIGNvbW1hbmRfYXJncykKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgndm9pZCAlKGRvbWFp
bk5hbWUpc0JhY2tlbmREaXNwYXRjaGVyOjolKGNvbW1hbmROYW1lKXMobG9uZyBwcm90b2NvbF9j
YWxsSWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfcGFyYW1ldGVycyknICUgY29t
bWFuZF9hcmdzKQogICAgICAgICBsaW5lcy5hcHBlbmQoJ3snKQogCiAgICAgICAgIGlmIGxlbihj
b21tYW5kLmNhbGxfcGFyYW1ldGVycykgPiAwOgpAQCAtMzE5LDMxICszMDYsNzEgQEAgY2xhc3Mg
Q3BwQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihDcHBHZW5lcmF0b3Ip
OgogICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9B
TFRFUk5BVEVfRElTUEFUQ0hFUlMpJykKICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnJykKIAor
ICAgICAgICBpZiBsZW4ocGFyYW1ldGVyX2VudW1fcmVzb2x1dGlvbnMpOgorICAgICAgICAgICAg
bGluZXMuZXh0ZW5kKHBhcmFtZXRlcl9lbnVtX3Jlc29sdXRpb25zKQorICAgICAgICAgICAgbGlu
ZXMuYXBwZW5kKCcnKQorCiAgICAgICAgIGlmIGNvbW1hbmQuaXNfYXN5bmM6Ci0gICAgICAgICAg
ICBsaW5lcy5hcHBlbmQoJyAgICBSZWY8JShkb21haW5OYW1lKXNCYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXI6OiUoY2FsbGJhY2tOYW1lKXM+IGNhbGxiYWNrID0gYWRvcHRSZWYoKm5ldyAlKGRvbWFp
bk5hbWUpc0JhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6JShjYWxsYmFja05hbWUpcyhtX2JhY2tl
bmREaXNwYXRjaGVyLmNvcHlSZWYoKSwgcmVxdWVzdElkKSk7JyAlIGNvbW1hbmRfYXJncykKKyAg
ICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIG1fYWdlbnQtPiUoY29tbWFuZE5hbWUpcyglKGlu
dm9jYXRpb25QYXJhbWV0ZXJzKXMpOycgJSBjb21tYW5kX2FyZ3MpCiAgICAgICAgIGVsc2U6Ci0g
ICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBFcnJvclN0cmluZyBlcnJvcjsnKQotICAgICAg
ICAgICAgbGluZXMuYXBwZW5kKCcgICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6
T2JqZWN0OjpjcmVhdGUoKTsnKQorICAgICAgICAgICAgcmVzdWx0X2V4dHJhY3Rpb25fbmFtZXMg
PSBbXQorICAgICAgICAgICAgcmVzdWx0X2NvbnZlcnNpb25fbGluZXMgPSBbXQorICAgICAgICAg
ICAgZm9yIHBhcmFtZXRlciBpbiBjb21tYW5kLnJldHVybl9wYXJhbWV0ZXJzOgorICAgICAgICAg
ICAgICAgIHBhcmFtZXRlcl9uYW1lID0gcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lCisgICAgICAg
ICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAgICAgICBw
YXJhbWV0ZXJfbmFtZSA9ICdvcHRfJyArIHBhcmFtZXRlcl9uYW1lCisgICAgICAgICAgICAgICAg
cGFyYW1ldGVyX25hbWUgPSAnb3V0XycgKyBwYXJhbWV0ZXJfbmFtZQogCi0gICAgICAgIGlmIGxl
bihjb21tYW5kLnJldHVybl9wYXJhbWV0ZXJzKSA+IDA6Ci0gICAgICAgICAgICBsaW5lcy5leHRl
bmQob3V0X3BhcmFtZXRlcl9kZWNsYXJhdGlvbnMpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAg
IG1fYWdlbnQtPiUoY29tbWFuZE5hbWUpcyglKGludm9jYXRpb25QYXJhbWV0ZXJzKXMpOycgJSBj
b21tYW5kX2FyZ3MpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnJykKKyAgICAgICAgICAgICAgICBy
ZXN1bHRfZXh0cmFjdGlvbl9uYW1lcy5hcHBlbmQocGFyYW1ldGVyX25hbWUpCiAKLSAgICAgICAg
aWYgbm90IGNvbW1hbmQuaXNfYXN5bmM6Ci0gICAgICAgICAgICBpZiBsZW4oY29tbWFuZC5yZXR1
cm5fcGFyYW1ldGVycykgPiAxOgotICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGlm
ICghZXJyb3IubGVuZ3RoKCkpIHsnKQotICAgICAgICAgICAgICAgIGxpbmVzLmV4dGVuZChvdXRf
cGFyYW1ldGVyX2Fzc2lnbm1lbnRzKQotICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAg
IH0nKQotICAgICAgICAgICAgZWxpZiBsZW4oY29tbWFuZC5yZXR1cm5fcGFyYW1ldGVycykgPT0g
MToKLSAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBpZiAoIWVycm9yLmxlbmd0aCgp
KScpCi0gICAgICAgICAgICAgICAgbGluZXMuZXh0ZW5kKG91dF9wYXJhbWV0ZXJfYXNzaWdubWVu
dHMpCisgICAgICAgICAgICAgICAgcGFyYW1ldGVyX3ZhbHVlID0gcGFyYW1ldGVyX25hbWUKKwor
ICAgICAgICAgICAgICAgIF90eXBlID0gcGFyYW1ldGVyLnR5cGUKKyAgICAgICAgICAgICAgICBp
ZiBpc2luc3RhbmNlKF90eXBlLCBBbGlhc2VkVHlwZSk6CisgICAgICAgICAgICAgICAgICAgIF90
eXBlID0gX3R5cGUuYWxpYXNlZF90eXBlCisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShf
dHlwZSwgRW51bVR5cGUpIGFuZCBfdHlwZS5pc19hbm9ueW1vdXM6CisgICAgICAgICAgICAgICAg
ICAgIF90eXBlID0gX3R5cGUucHJpbWl0aXZlX3R5cGUKKworICAgICAgICAgICAgICAgIGlmIF90
eXBlLmlzX2VudW0oKToKKyAgICAgICAgICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlv
bmFsOgorICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyX3ZhbHVlID0gJyonICsgcGFy
YW1ldGVyX3ZhbHVlCisgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcl92YWx1ZSA9ICdQcm90
b2NvbDo6JXM6OmdldEVudW1Db25zdGFudFZhbHVlKCVzKScgJSAoc2VsZi5oZWxwZXJzX25hbWVz
cGFjZSgpLCBwYXJhbWV0ZXJfdmFsdWUpCisgICAgICAgICAgICAgICAgZWxpZiBDcHBHZW5lcmF0
b3Iuc2hvdWxkX3JlbGVhc2VfYXJndW1lbnQoX3R5cGUsIHBhcmFtZXRlci5pc19vcHRpb25hbCk6
CisgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcl92YWx1ZSA9IHBhcmFtZXRlcl92YWx1ZSAr
ICcucmVsZWFzZU5vbk51bGwoKScKKyAgICAgICAgICAgICAgICBlbGlmIENwcEdlbmVyYXRvci5z
aG91bGRfZGVyZWZlcmVuY2VfYXJndW1lbnQoX3R5cGUsIHBhcmFtZXRlci5pc19vcHRpb25hbCk6
CisgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcl92YWx1ZSA9ICcqJyArIHBhcmFtZXRlcl92
YWx1ZQorICAgICAgICAgICAgICAgIGVsaWYgQ3BwR2VuZXJhdG9yLnNob3VsZF9tb3ZlX2FyZ3Vt
ZW50KF90eXBlLCBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwpOgorICAgICAgICAgICAgICAgICAgICBw
YXJhbWV0ZXJfdmFsdWUgPSAnV1RGTW92ZSglcyknICUgcGFyYW1ldGVyX3ZhbHVlCisKKyAgICAg
ICAgICAgICAgICBwYXJhbV9hcmdzID0geworICAgICAgICAgICAgICAgICAgICAna2V5ZWRTZXRN
ZXRob2QnOiBDcHBHZW5lcmF0b3IuY3BwX3NldHRlcl9tZXRob2RfZm9yX3R5cGUoX3R5cGUpLAor
ICAgICAgICAgICAgICAgICAgICAncGFyYW1ldGVyS2V5JzogcGFyYW1ldGVyLnBhcmFtZXRlcl9u
YW1lLAorICAgICAgICAgICAgICAgICAgICAncGFyYW1ldGVyTmFtZSc6IHBhcmFtZXRlcl9uYW1l
LAorICAgICAgICAgICAgICAgICAgICAncGFyYW1ldGVyVmFsdWUnOiBwYXJhbWV0ZXJfdmFsdWUs
CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29w
dGlvbmFsOgorICAgICAgICAgICAgICAgICAgICByZXN1bHRfY29udmVyc2lvbl9saW5lcy5hcHBl
bmQoJyAgICBpZiAoISElKHBhcmFtZXRlck5hbWUpcyknICUgcGFyYW1fYXJncykKKyAgICAgICAg
ICAgICAgICAgICAgcmVzdWx0X2NvbnZlcnNpb25fbGluZXMuYXBwZW5kKCcgICAgICAgIHByb3Rv
Y29sX2pzb25NZXNzYWdlLT4lKGtleWVkU2V0TWV0aG9kKXMoIiUocGFyYW1ldGVyS2V5KXMiX3Ms
ICUocGFyYW1ldGVyVmFsdWUpcyk7JyAlIHBhcmFtX2FyZ3MpCisgICAgICAgICAgICAgICAgZWxz
ZToKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0X2NvbnZlcnNpb25fbGluZXMuYXBwZW5kKCcg
ICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPiUoa2V5ZWRTZXRNZXRob2QpcygiJShwYXJhbWV0ZXJL
ZXkpcyJfcywgJShwYXJhbWV0ZXJWYWx1ZSlzKTsnICUgcGFyYW1fYXJncykKKworICAgICAgICAg
ICAgbGluZXMuYXBwZW5kKCcgICAgYXV0byByZXN1bHQgPSBtX2FnZW50LT4lKGNvbW1hbmROYW1l
KXMoJShpbnZvY2F0aW9uUGFyYW1ldGVycylzKTsnICUgY29tbWFuZF9hcmdzKQorICAgICAgICAg
ICAgbGluZXMuYXBwZW5kKCcgICAgaWYgKCFyZXN1bHQpIHsnKQorICAgICAgICAgICAgbGluZXMu
YXBwZW5kKCcgICAgICAgIEFTU0VSVCghcmVzdWx0LmVycm9yKCkuaXNFbXB0eSgpKTsnKQorICAg
ICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9y
dFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCByZXN1bHQuZXJy
b3IoKSk7JykKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICByZXR1cm47JykKKyAg
ICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIH0nKQorICAgICAgICAgICAgbGluZXMuYXBwZW5k
KCcnKQorICAgICAgICAgICAgaWYgbGVuKHJlc3VsdF9leHRyYWN0aW9uX25hbWVzKSA9PSAxOgor
ICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGF1dG8gJXMgPSBXVEZNb3ZlKHJlc3Vs
dC52YWx1ZSgpKTsnICUgcmVzdWx0X2V4dHJhY3Rpb25fbmFtZXNbMF0pCiAgICAgICAgICAgICAg
ICAgbGluZXMuYXBwZW5kKCcnKQotCi0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBpZiAo
IWVycm9yLmxlbmd0aCgpKScpCi0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgbV9i
YWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQp
LCBmYWxzZSk7JykKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGVsc2UnKQotICAgICAg
ICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFBy
b3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9y
KSk7JykKKyAgICAgICAgICAgIGVsaWYgbGVuKHJlc3VsdF9leHRyYWN0aW9uX25hbWVzKSA+IDE6
CisgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgYXV0byBbJXNdID0gV1RGTW92ZShy
ZXN1bHQudmFsdWUoKSk7JyAlICIsICIuam9pbihyZXN1bHRfZXh0cmFjdGlvbl9uYW1lcykpCisg
ICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcnKQorICAgICAgICAgICAgbGluZXMuYXBwZW5k
KCcgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7
JykKKyAgICAgICAgICAgIGxpbmVzLmV4dGVuZChyZXN1bHRfY29udmVyc2lvbl9saW5lcykKKyAg
ICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNw
b25zZShwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJvdG9jb2xfanNvbk1lc3NhZ2UpLCBmYWxz
ZSk7JykKIAogICAgICAgICBsaW5lcy5hcHBlbmQoJ30nKQogICAgICAgICByZXR1cm4gc2VsZi53
cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihjb21tYW5kLmNvbmRpdGlvbiwgIlxuIi5qb2lu
KGxpbmVzKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9mcm9udGVuZF9kaXNwYXRjaGVyX2hlYWRlci5weSBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRl
X2NwcF9mcm9udGVuZF9kaXNwYXRjaGVyX2hlYWRlci5weQppbmRleCAxMTlkMjNjMzhjZGYyNGNm
NTZkMGZmYzY2ZDU3YjhhM2Q0ZTJkYTQ0Li5iZWFhMTdjOTgxNTRiN2VlMjJlM2I1Yjk3NmQwMTgz
OTQwYTQ2OTEzIDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfZnJvbnRlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2Vu
ZXJhdGVfY3BwX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5CkBAIC03Myw5ICs3Myw5IEBA
IGNsYXNzIENwcEZyb250ZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvcihDcHBHZW5lcmF0b3Ip
OgogICAgICAgICBoZWFkZXJfaW5jbHVkZXMgPSBbCiAgICAgICAgICAgICAoWyJKYXZhU2NyaXB0
Q29yZSIsICJXZWJLaXQiXSwgKHNlbGYubW9kZWwoKS5mcmFtZXdvcmsubmFtZSwgIiVzUHJvdG9j
b2xPYmplY3RzLmgiICUgc2VsZi5wcm90b2NvbF9uYW1lKCkpKSwKICAgICAgICAgICAgIChbIkph
dmFTY3JpcHRDb3JlIiwgIldlYktpdCJdLCAoIldURiIsICJ3dGYvSlNPTlZhbHVlcy5oIikpLAot
ICAgICAgICAgICAgKFsiSmF2YVNjcmlwdENvcmUiLCAiV2ViS2l0Il0sICgiV1RGIiwgInd0Zi90
ZXh0L1dURlN0cmluZy5oIikpCisgICAgICAgICAgICAoWyJKYXZhU2NyaXB0Q29yZSIsICJXZWJL
aXQiXSwgKCJXVEYiLCAid3RmL09wdGlvbmFsLmgiKSksCisgICAgICAgICAgICAoWyJKYXZhU2Ny
aXB0Q29yZSIsICJXZWJLaXQiXSwgKCJXVEYiLCAid3RmL3RleHQvV1RGU3RyaW5nLmgiKSksCiAg
ICAgICAgIF0KLQogICAgICAgICByZXR1cm4gJ1xuJy5qb2luKHNlbGYuZ2VuZXJhdGVfaW5jbHVk
ZXNfZnJvbV9lbnRyaWVzKGhlYWRlcl9pbmNsdWRlcykpCiAKICAgICBkZWYgX2dlbmVyYXRlX2Fu
b255bW91c19lbnVtX2Zvcl9wYXJhbWV0ZXIoc2VsZiwgcGFyYW1ldGVyLCBldmVudCk6CkBAIC0x
MTcsOCArMTE3LDEzIEBAIGNsYXNzIENwcEZyb250ZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRv
cihDcHBHZW5lcmF0b3IpOgogICAgICAgICBmb3JtYWxfcGFyYW1ldGVycyA9IFtdCiAgICAgICAg
IGxpbmVzID0gW10KICAgICAgICAgZm9yIHBhcmFtZXRlciBpbiBldmVudC5ldmVudF9wYXJhbWV0
ZXJzOgotICAgICAgICAgICAgZm9ybWFsX3BhcmFtZXRlcnMuYXBwZW5kKCclcyAlcycgJSAoQ3Bw
R2VuZXJhdG9yLmNwcF90eXBlX2Zvcl9jaGVja2VkX2Zvcm1hbF9ldmVudF9wYXJhbWV0ZXIocGFy
YW1ldGVyKSwgcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKSkKLSAgICAgICAgICAgIGlmIGlzaW5z
dGFuY2UocGFyYW1ldGVyLnR5cGUsIEVudW1UeXBlKSBhbmQgcGFyYW1ldGVyLnBhcmFtZXRlcl9u
YW1lIG5vdCBpbiB1c2VkX2VudW1fbmFtZXM6CisgICAgICAgICAgICBwYXJhbWV0ZXJfbmFtZSA9
IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZQorICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29w
dGlvbmFsOgorICAgICAgICAgICAgICAgIHBhcmFtZXRlcl9uYW1lID0gJ29wdF8nICsgcGFyYW1l
dGVyX25hbWUKKworICAgICAgICAgICAgZm9ybWFsX3BhcmFtZXRlcnMuYXBwZW5kKCclcyAlcycg
JSAoQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl9ldmVudF9wYXJhbWV0ZXIocGFyYW1ldGVyLnR5
cGUsIHBhcmFtZXRlci5pc19vcHRpb25hbCksIHBhcmFtZXRlcl9uYW1lKSkKKworICAgICAgICAg
ICAgaWYgaXNpbnN0YW5jZShwYXJhbWV0ZXIudHlwZSwgRW51bVR5cGUpIGFuZCBwYXJhbWV0ZXIu
dHlwZS5pc19hbm9ueW1vdXMgYW5kIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSBub3QgaW4gdXNl
ZF9lbnVtX25hbWVzOgogICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0
ZV9hbm9ueW1vdXNfZW51bV9mb3JfcGFyYW1ldGVyKHBhcmFtZXRlciwgZXZlbnQpKQogICAgICAg
ICAgICAgICAgIHVzZWRfZW51bV9uYW1lcy5hZGQocGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29k
ZWdlbi9nZW5lcmF0ZV9jcHBfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRl
X2NwcF9mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5CmluZGV4IDY2ZGM2ZTE4
NWNmZTJiNjFiMWVjYTc3NTczY2UxNjc0ZTZiMzVhNDkuLjc2M2UwMWRmYjc4Y2RlYzhkNjAzMGQy
ZWRjMzUwNTQ4OTE3Njk4MGMgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9mcm9udGVuZF9kaXNwYXRjaGVyX2lt
cGxlbWVudGF0aW9uLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0
aW9uLnB5CkBAIC0zMywxMiArMzMsMTIgQEAgdHJ5OgogICAgIGZyb20gLmNwcF9nZW5lcmF0b3Ig
aW1wb3J0IENwcEdlbmVyYXRvcgogICAgIGZyb20gLmNwcF9nZW5lcmF0b3JfdGVtcGxhdGVzIGlt
cG9ydCBDcHBHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgQ3BwVGVtcGxhdGVzCiAgICAgZnJvbSAuZ2Vu
ZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IsIHVjZmlyc3QKLSAgICBmcm9tIC5tb2RlbHMgaW1wb3J0
IE9iamVjdFR5cGUsIEFycmF5VHlwZQorICAgIGZyb20gLm1vZGVscyBpbXBvcnQgT2JqZWN0VHlw
ZSwgQXJyYXlUeXBlLCBBbGlhc2VkVHlwZSwgRW51bVR5cGUKIGV4Y2VwdDoKICAgICBmcm9tIGNw
cF9nZW5lcmF0b3IgaW1wb3J0IENwcEdlbmVyYXRvcgogICAgIGZyb20gY3BwX2dlbmVyYXRvcl90
ZW1wbGF0ZXMgaW1wb3J0IENwcEdlbmVyYXRvclRlbXBsYXRlcyBhcyBDcHBUZW1wbGF0ZXMKICAg
ICBmcm9tIGdlbmVyYXRvciBpbXBvcnQgR2VuZXJhdG9yLCB1Y2ZpcnN0Ci0gICAgZnJvbSBtb2Rl
bHMgaW1wb3J0IE9iamVjdFR5cGUsIEFycmF5VHlwZQorICAgIGZyb20gbW9kZWxzIGltcG9ydCBP
YmplY3RUeXBlLCBBcnJheVR5cGUsIEFsaWFzZWRUeXBlLCBFbnVtVHlwZQogCiBsb2cgPSBsb2dn
aW5nLmdldExvZ2dlcignZ2xvYmFsJykKIApAQCAtNzEsOSArNzEsNyBAQCBjbGFzcyBDcHBGcm9u
dGVuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAg
IGRlZiBfZ2VuZXJhdGVfc2Vjb25kYXJ5X2hlYWRlcl9pbmNsdWRlcyhzZWxmKToKICAgICAgICAg
aGVhZGVyX2luY2x1ZGVzID0gWwogICAgICAgICAgICAgKFsiSmF2YVNjcmlwdENvcmUiLCAiV2Vi
S2l0Il0sICgiSmF2YVNjcmlwdENvcmUiLCAiaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kUm91
dGVyLmgiKSksCi0gICAgICAgICAgICAoWyJKYXZhU2NyaXB0Q29yZSIsICJXZWJLaXQiXSwgKCJX
VEYiLCAid3RmL3RleHQvQ1N0cmluZy5oIikpCiAgICAgICAgIF0KLQogICAgICAgICByZXR1cm4g
J1xuJy5qb2luKHNlbGYuZ2VuZXJhdGVfaW5jbHVkZXNfZnJvbV9lbnRyaWVzKGhlYWRlcl9pbmNs
dWRlcykpCiAKICAgICBkZWYgX2dlbmVyYXRlX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb25zX2Zv
cl9kb21haW4oc2VsZiwgZG9tYWluKToKQEAgLTkwLDI3ICs4OCw0MyBAQCBjbGFzcyBDcHBGcm9u
dGVuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAg
ICAgICBmb3JtYWxfcGFyYW1ldGVycyA9IFtdCiAKICAgICAgICAgZm9yIHBhcmFtZXRlciBpbiBl
dmVudC5ldmVudF9wYXJhbWV0ZXJzOgorICAgICAgICAgICAgcGFyYW1ldGVyX25hbWUgPSBwYXJh
bWV0ZXIucGFyYW1ldGVyX25hbWUKKyAgICAgICAgICAgIGlmIHBhcmFtZXRlci5pc19vcHRpb25h
bDoKKyAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfbmFtZSA9ICdvcHRfJyArIHBhcmFtZXRlcl9u
YW1lCiAKLSAgICAgICAgICAgIHBhcmFtZXRlcl92YWx1ZSA9IHBhcmFtZXRlci5wYXJhbWV0ZXJf
bmFtZQotICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsIGFuZCBub3QgQ3BwR2Vu
ZXJhdG9yLnNob3VsZF9wYXNzX2J5X2NvcHlfZm9yX3JldHVybl90eXBlKHBhcmFtZXRlci50eXBl
KToKKyAgICAgICAgICAgIHBhcmFtZXRlcl92YWx1ZSA9IHBhcmFtZXRlcl9uYW1lCisKKyAgICAg
ICAgICAgIF90eXBlID0gcGFyYW1ldGVyLnR5cGUKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uo
X3R5cGUsIEFsaWFzZWRUeXBlKToKKyAgICAgICAgICAgICAgICBfdHlwZSA9IF90eXBlLmFsaWFz
ZWRfdHlwZQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgRW51bVR5cGUpIGFuZCBf
dHlwZS5pc19hbm9ueW1vdXM6CisgICAgICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5wcmltaXRp
dmVfdHlwZQorCisgICAgICAgICAgICBpZiBfdHlwZS5pc19lbnVtKCk6CisgICAgICAgICAgICAg
ICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAgICAgICBwYXJhbWV0
ZXJfdmFsdWUgPSAnKicgKyBwYXJhbWV0ZXJfdmFsdWUKKyAgICAgICAgICAgICAgICBwYXJhbWV0
ZXJfdmFsdWUgPSAnUHJvdG9jb2w6OiVzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZSglcyknICUgKHNl
bGYuaGVscGVyc19uYW1lc3BhY2UoKSwgcGFyYW1ldGVyX3ZhbHVlKQorICAgICAgICAgICAgZWxp
ZiBDcHBHZW5lcmF0b3Iuc2hvdWxkX3JlbGVhc2VfYXJndW1lbnQoX3R5cGUsIHBhcmFtZXRlci5p
c19vcHRpb25hbCk6CisgICAgICAgICAgICAgICAgcGFyYW1ldGVyX3ZhbHVlID0gcGFyYW1ldGVy
X3ZhbHVlICsgJy5yZWxlYXNlTm9uTnVsbCgpJworICAgICAgICAgICAgZWxpZiBDcHBHZW5lcmF0
b3Iuc2hvdWxkX2RlcmVmZXJlbmNlX2FyZ3VtZW50KF90eXBlLCBwYXJhbWV0ZXIuaXNfb3B0aW9u
YWwpOgogICAgICAgICAgICAgICAgIHBhcmFtZXRlcl92YWx1ZSA9ICcqJyArIHBhcmFtZXRlcl92
YWx1ZQotICAgICAgICAgICAgaWYgcGFyYW1ldGVyLnR5cGUuaXNfZW51bSgpOgotICAgICAgICAg
ICAgICAgIHBhcmFtZXRlcl92YWx1ZSA9ICdJbnNwZWN0b3I6OlByb3RvY29sOjolczo6Z2V0RW51
bUNvbnN0YW50VmFsdWUoJXMpJyAlIChzZWxmLmhlbHBlcnNfbmFtZXNwYWNlKCksIHBhcmFtZXRl
cl92YWx1ZSkKKyAgICAgICAgICAgIGVsaWYgQ3BwR2VuZXJhdG9yLnNob3VsZF9tb3ZlX2FyZ3Vt
ZW50KF90eXBlLCBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwpOgorICAgICAgICAgICAgICAgIHBhcmFt
ZXRlcl92YWx1ZSA9ICdXVEZNb3ZlKCVzKScgJSBwYXJhbWV0ZXJfdmFsdWUKIAogICAgICAgICAg
ICAgcGFyYW1ldGVyX2FyZ3MgPSB7Ci0gICAgICAgICAgICAgICAgJ3BhcmFtZXRlclR5cGUnOiBD
cHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX3N0YWNrX291dF9wYXJhbWV0ZXIocGFyYW1ldGVyKSwK
LSAgICAgICAgICAgICAgICAncGFyYW1ldGVyTmFtZSc6IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFt
ZSwKKyAgICAgICAgICAgICAgICAncGFyYW1ldGVyS2V5JzogcGFyYW1ldGVyLnBhcmFtZXRlcl9u
YW1lLAorICAgICAgICAgICAgICAgICdwYXJhbWV0ZXJOYW1lJzogcGFyYW1ldGVyX25hbWUsCiAg
ICAgICAgICAgICAgICAgJ3BhcmFtZXRlclZhbHVlJzogcGFyYW1ldGVyX3ZhbHVlLAotICAgICAg
ICAgICAgICAgICdrZXllZFNldE1ldGhvZCc6IENwcEdlbmVyYXRvci5jcHBfc2V0dGVyX21ldGhv
ZF9mb3JfdHlwZShwYXJhbWV0ZXIudHlwZSksCisgICAgICAgICAgICAgICAgJ2tleWVkU2V0TWV0
aG9kJzogQ3BwR2VuZXJhdG9yLmNwcF9zZXR0ZXJfbWV0aG9kX2Zvcl90eXBlKF90eXBlKSwKICAg
ICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgotICAg
ICAgICAgICAgICAgIHBhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICBpZiAoJShwYXJh
bWV0ZXJOYW1lKXMpJyAlIHBhcmFtZXRlcl9hcmdzKQotICAgICAgICAgICAgICAgIHBhcmFtZXRl
cl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICAgICAgcGFyYW1zT2JqZWN0LT4lKGtleWVkU2V0TWV0
aG9kKXMoIiUocGFyYW1ldGVyTmFtZSlzIl9zLCAlKHBhcmFtZXRlclZhbHVlKXMpOycgJSBwYXJh
bWV0ZXJfYXJncykKKyAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5k
KCcgICAgaWYgKCEhJShwYXJhbWV0ZXJOYW1lKXMpJyAlIHBhcmFtZXRlcl9hcmdzKQorICAgICAg
ICAgICAgICAgIHBhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICAgICAgcHJvdG9jb2xf
cGFyYW1zT2JqZWN0LT4lKGtleWVkU2V0TWV0aG9kKXMoIiUocGFyYW1ldGVyS2V5KXMiX3MsICUo
cGFyYW1ldGVyVmFsdWUpcyk7JyAlIHBhcmFtZXRlcl9hcmdzKQogICAgICAgICAgICAgZWxzZToK
LSAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAgcGFyYW1z
T2JqZWN0LT4lKGtleWVkU2V0TWV0aG9kKXMoIiUocGFyYW1ldGVyTmFtZSlzIl9zLCAlKHBhcmFt
ZXRlclZhbHVlKXMpOycgJSBwYXJhbWV0ZXJfYXJncykKKyAgICAgICAgICAgICAgICBwYXJhbWV0
ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT4lKGtleWVk
U2V0TWV0aG9kKXMoIiUocGFyYW1ldGVyS2V5KXMiX3MsICUocGFyYW1ldGVyVmFsdWUpcyk7JyAl
IHBhcmFtZXRlcl9hcmdzKQogCi0gICAgICAgICAgICBmb3JtYWxfcGFyYW1ldGVycy5hcHBlbmQo
JyVzICVzJyAlIChDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX2NoZWNrZWRfZm9ybWFsX2V2ZW50
X3BhcmFtZXRlcihwYXJhbWV0ZXIpLCBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpKQorICAgICAg
ICAgICAgZm9ybWFsX3BhcmFtZXRlcnMuYXBwZW5kKCclcyAlcycgJSAoQ3BwR2VuZXJhdG9yLmNw
cF90eXBlX2Zvcl9ldmVudF9wYXJhbWV0ZXIoX3R5cGUsIHBhcmFtZXRlci5pc19vcHRpb25hbCks
IHBhcmFtZXRlcl9uYW1lKSkKIAogICAgICAgICBldmVudF9hcmdzID0gewogICAgICAgICAgICAg
J2RvbWFpbk5hbWUnOiBkb21haW4uZG9tYWluX25hbWUsCkBAIC0xMjAsMTUgKzEzNCwxNSBAQCBj
bGFzcyBDcHBGcm9udGVuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihDcHBHZW5l
cmF0b3IpOgogCiAgICAgICAgIGxpbmVzLmFwcGVuZCgndm9pZCAlKGRvbWFpbk5hbWUpc0Zyb250
ZW5kRGlzcGF0Y2hlcjo6JShldmVudE5hbWUpcyglKGZvcm1hbFBhcmFtZXRlcnMpcyknICUgZXZl
bnRfYXJncykKICAgICAgICAgbGluZXMuYXBwZW5kKCd7JykKLSAgICAgICAgbGluZXMuYXBwZW5k
KCcgICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0
ZSgpOycpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmco
Im1ldGhvZCJfcywgIiUoZG9tYWluTmFtZSlzLiUoZXZlbnROYW1lKXMiX3MpOycgJSBldmVudF9h
cmdzKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdl
ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsnKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBw
cm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICIlKGRvbWFpbk5hbWUp
cy4lKGV2ZW50TmFtZSlzIl9zKTsnICUgZXZlbnRfYXJncykKIAogICAgICAgICBpZiBsZW4ocGFy
YW1ldGVyX2Fzc2lnbm1lbnRzKSA+IDA6Ci0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBS
ZWY8SlNPTjo6T2JqZWN0PiBwYXJhbXNPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOycp
CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBhdXRvIHByb3RvY29sX3BhcmFtc09iamVj
dCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7JykKICAgICAgICAgICAgIGxpbmVzLmV4dGVuZChw
YXJhbWV0ZXJfYXNzaWdubWVudHMpCi0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBqc29u
TWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiX3MsIFdURk1vdmUocGFyYW1zT2JqZWN0KSk7JykK
KyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRP
YmplY3QoInBhcmFtcyJfcywgV1RGTW92ZShwcm90b2NvbF9wYXJhbXNPYmplY3QpKTsnKQogCiAg
ICAgICAgIGxpbmVzLmFwcGVuZCgnJykKLSAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgbV9mcm9u
dGVuZFJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsnKQorICAg
ICAgICBsaW5lcy5hcHBlbmQoJyAgICBtX2Zyb250ZW5kUm91dGVyLnNlbmRFdmVudChwcm90b2Nv
bF9qc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOycpCiAgICAgICAgIGxpbmVzLmFwcGVuZCgn
fScpCiAgICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGV2
ZW50LmNvbmRpdGlvbiwgIlxuIi5qb2luKGxpbmVzKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9wcm90b2Nv
bF90eXBlc19oZWFkZXIucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfcHJvdG9jb2xfdHlwZXNfaGVhZGVyLnB5CmluZGV4IDAw
MTkyNGRlMGViMDgyN2Y3NDVkM2Q3MzZjMGFiOTIwMjEyNGRiMzYuLjc4MWQwNmQ5NDA1NjZiMTcy
ZWM1NWMyZWZiZDEwMWEwMDUwZDcxYTggMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9wcm90b2NvbF90eXBlc19o
ZWFkZXIucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2Nv
ZGVnZW4vZ2VuZXJhdGVfY3BwX3Byb3RvY29sX3R5cGVzX2hlYWRlci5weQpAQCAtODUsOSArODUs
MTAgQEAgY2xhc3MgQ3BwUHJvdG9jb2xUeXBlc0hlYWRlckdlbmVyYXRvcihDcHBHZW5lcmF0b3Ip
OgogICAgIGRlZiBfZ2VuZXJhdGVfc2Vjb25kYXJ5X2hlYWRlcl9pbmNsdWRlcyhzZWxmKToKICAg
ICAgICAgaGVhZGVyX2luY2x1ZGVzID0gWwogICAgICAgICAgICAgKFsiSmF2YVNjcmlwdENvcmUi
LCAiV2ViS2l0Il0sICgiSmF2YVNjcmlwdENvcmUiLCAiaW5zcGVjdG9yL0luc3BlY3RvclByb3Rv
Y29sVHlwZXMuaCIpKSwKLSAgICAgICAgICAgIChbIkphdmFTY3JpcHRDb3JlIiwgIldlYktpdCJd
LCAoIldURiIsICJ3dGYvQXNzZXJ0aW9ucy5oIikpCisgICAgICAgICAgICAoWyJKYXZhU2NyaXB0
Q29yZSIsICJXZWJLaXQiXSwgKCJXVEYiLCAid3RmL0pTT05WYWx1ZXMuaCIpKSwKKyAgICAgICAg
ICAgIChbIkphdmFTY3JpcHRDb3JlIiwgIldlYktpdCJdLCAoIldURiIsICJ3dGYvT3B0aW9uYWwu
aCIpKSwKKyAgICAgICAgICAgIChbIkphdmFTY3JpcHRDb3JlIiwgIldlYktpdCJdLCAoIldURiIs
ICJ3dGYvdGV4dC9XVEZTdHJpbmcuaCIpKSwKICAgICAgICAgXQotCiAgICAgICAgIHJldHVybiAn
XG4nLmpvaW4oc2VsZi5nZW5lcmF0ZV9pbmNsdWRlc19mcm9tX2VudHJpZXMoaGVhZGVyX2luY2x1
ZGVzKSkKIAogICAgIGRlZiBfZ2VuZXJhdGVfdmVyc2lvbnMoc2VsZiwgZG9tYWlucyk6CkBAIC0y
MzIsOSArMjMzLDYgQEAgY2xhc3MgQ3BwUHJvdG9jb2xUeXBlc0hlYWRlckdlbmVyYXRvcihDcHBH
ZW5lcmF0b3IpOgogICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRp
dGlvbihkb21haW4uY29uZGl0aW9uLCAnXG4nLmpvaW4obGluZXMpKQogCiAgICAgZGVmIF9nZW5l
cmF0ZV9jbGFzc19mb3Jfb2JqZWN0X2RlY2xhcmF0aW9uKHNlbGYsIHR5cGVfZGVjbGFyYXRpb24s
IGRvbWFpbik6Ci0gICAgICAgIGlmIGxlbih0eXBlX2RlY2xhcmF0aW9uLnR5cGVfbWVtYmVycykg
PT0gMDoKLSAgICAgICAgICAgIHJldHVybiAnJwotCiAgICAgICAgIGVudW1fbWVtYmVycyA9IFtt
ZW1iZXIgZm9yIG1lbWJlciBpbiB0eXBlX2RlY2xhcmF0aW9uLnR5cGVfbWVtYmVycyBpZiBpc2lu
c3RhbmNlKG1lbWJlci50eXBlLCBFbnVtVHlwZSkgYW5kIG1lbWJlci50eXBlLmlzX2Fub255bW91
c10KICAgICAgICAgcmVxdWlyZWRfbWVtYmVycyA9IFttZW1iZXIgZm9yIG1lbWJlciBpbiB0eXBl
X2RlY2xhcmF0aW9uLnR5cGVfbWVtYmVycyBpZiBub3QgbWVtYmVyLmlzX29wdGlvbmFsXQogICAg
ICAgICBvcHRpb25hbF9tZW1iZXJzID0gW21lbWJlciBmb3IgbWVtYmVyIGluIHR5cGVfZGVjbGFy
YXRpb24udHlwZV9tZW1iZXJzIGlmIG1lbWJlci5pc19vcHRpb25hbF0KQEAgLTI0NiwxMSArMjQ0
LDEyIEBAIGNsYXNzIENwcFByb3RvY29sVHlwZXNIZWFkZXJHZW5lcmF0b3IoQ3BwR2VuZXJhdG9y
KToKICAgICAgICAgYmFzZV9jbGFzcyA9ICdKU09OOjpPYmplY3QnCiAgICAgICAgIGlmIG5vdCBH
ZW5lcmF0b3IudHlwZV9oYXNfb3Blbl9maWVsZHModHlwZV9kZWNsYXJhdGlvbi50eXBlKToKICAg
ICAgICAgICAgIGJhc2VfY2xhc3MgPSBiYXNlX2NsYXNzICsgJ0Jhc2UnCi0gICAgICAgIGxpbmVz
LmFwcGVuZCgnY2xhc3MgJXMgOiBwdWJsaWMgJXMgeycgJSAob2JqZWN0X25hbWUsIGJhc2VfY2xh
c3MpKQorICAgICAgICBsaW5lcy5hcHBlbmQoJ2NsYXNzICVzIGZpbmFsIDogcHVibGljICVzIHsn
ICUgKG9iamVjdF9uYW1lLCBiYXNlX2NsYXNzKSkKICAgICAgICAgbGluZXMuYXBwZW5kKCdwdWJs
aWM6JykKICAgICAgICAgZm9yIGVudW1fbWVtYmVyIGluIGVudW1fbWVtYmVyczoKICAgICAgICAg
ICAgIGxpbmVzLmFwcGVuZCgnICAgIC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5IG5hbWUgXCclc1wn
IHdoaWxlIGdlbmVyYXRpbmcgJXMuJyAlIChlbnVtX21lbWJlci5tZW1iZXJfbmFtZSwgb2JqZWN0
X25hbWUpKQogICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX3N0cnVjdF9m
b3JfYW5vbnltb3VzX2VudW1fbWVtYmVyKGVudW1fbWVtYmVyKSkKKyAgICAgICAgICAgIGxpbmVz
LmFwcGVuZCgnJykKICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2J1aWxkZXJf
c3RhdGVfZW51bSh0eXBlX2RlY2xhcmF0aW9uKSkKIAogICAgICAgICBjb25zdHJ1Y3Rvcl9leGFt
cGxlID0gW10KQEAgLTI3Nyw3ICsyNzYsNyBAQCBjbGFzcyBDcHBQcm90b2NvbFR5cGVzSGVhZGVy
R2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAgICAgICBvcGVuX21lbWJlcnMgPSBHZW5l
cmF0b3Iub3Blbl9maWVsZHModHlwZV9kZWNsYXJhdGlvbikKICAgICAgICAgICAgIGZvciB0eXBl
X21lbWJlciBpbiBvcGVuX21lbWJlcnM6CiAgICAgICAgICAgICAgICAgZXhwb3J0X21hY3JvID0g
c2VsZi5tb2RlbCgpLmZyYW1ld29yay5zZXR0aW5nKCdleHBvcnRfbWFjcm8nLCBOb25lKQotICAg
ICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICVzIHN0YXRpYyBjb25zdCBjaGFyKiAlczsn
ICUgKGV4cG9ydF9tYWNybywgdWNmaXJzdCh0eXBlX21lbWJlci5tZW1iZXJfbmFtZSkpKQorICAg
ICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICVzIHN0YXRpYyBjb25zdCBjaGFyKiAlc0tl
eTsnICUgKGV4cG9ydF9tYWNybywgdHlwZV9tZW1iZXIubWVtYmVyX25hbWUpKQogCiAgICAgICAg
IGxpbmVzLmFwcGVuZCgnfTsnKQogICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRf
Zm9yX2NvbmRpdGlvbih0eXBlX2RlY2xhcmF0aW9uLmNvbmRpdGlvbiwgJ1xuJy5qb2luKGxpbmVz
KSkKQEAgLTMyOCw0NyArMzI3LDU2IEBAIGNsYXNzIENwcFByb3RvY29sVHlwZXNIZWFkZXJHZW5l
cmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKIAog
ICAgIGRlZiBfZ2VuZXJhdGVfYnVpbGRlcl9zZXR0ZXJfZm9yX21lbWJlcihzZWxmLCB0eXBlX21l
bWJlciwgZG9tYWluKToKKyAgICAgICAgbWVtYmVyX25hbWUgPSAnaW5fJyArIHR5cGVfbWVtYmVy
Lm1lbWJlcl9uYW1lCisKKyAgICAgICAgbWVtYmVyX3ZhbHVlID0gbWVtYmVyX25hbWUKKyAgICAg
ICAgaWYgdHlwZV9tZW1iZXIudHlwZS5pc19lbnVtKCk6CisgICAgICAgICAgICBtZW1iZXJfdmFs
dWUgPSAnUHJvdG9jb2w6OiVzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZSglcyknICUgKHNlbGYuaGVs
cGVyc19uYW1lc3BhY2UoKSwgbWVtYmVyX3ZhbHVlKQorICAgICAgICBlbGlmIENwcEdlbmVyYXRv
ci5zaG91bGRfbW92ZV9hcmd1bWVudCh0eXBlX21lbWJlci50eXBlLCBGYWxzZSk6CisgICAgICAg
ICAgICBtZW1iZXJfdmFsdWUgPSAnV1RGTW92ZSglcyknICUgbWVtYmVyX3ZhbHVlCisKICAgICAg
ICAgc2V0dGVyX2FyZ3MgPSB7CiAgICAgICAgICAgICAnY2FtZWxOYW1lJzogdWNmaXJzdCh0eXBl
X21lbWJlci5tZW1iZXJfbmFtZSksCi0gICAgICAgICAgICAna2V5ZWRTZXQnOiBDcHBHZW5lcmF0
b3IuY3BwX3NldHRlcl9tZXRob2RfZm9yX3R5cGUodHlwZV9tZW1iZXIudHlwZSksCi0gICAgICAg
ICAgICAnbmFtZSc6IHR5cGVfbWVtYmVyLm1lbWJlcl9uYW1lLAotICAgICAgICAgICAgJ3BhcmFt
ZXRlclR5cGUnOiBDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX3R5cGVfbWVtYmVyKHR5cGVfbWVt
YmVyKSwKLSAgICAgICAgICAgICdoZWxwZXJzTmFtZXNwYWNlJzogc2VsZi5oZWxwZXJzX25hbWVz
cGFjZSgpLAorICAgICAgICAgICAgJ3NldHRlcic6IENwcEdlbmVyYXRvci5jcHBfc2V0dGVyX21l
dGhvZF9mb3JfdHlwZSh0eXBlX21lbWJlci50eXBlKSwKKyAgICAgICAgICAgICdtZW1iZXJUeXBl
JzogQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl90eXBlX21lbWJlcl9hcmd1bWVudCh0eXBlX21l
bWJlci50eXBlLCB0eXBlX21lbWJlci5tZW1iZXJfbmFtZSksCisgICAgICAgICAgICAnbWVtYmVy
S2V5JzogdHlwZV9tZW1iZXIubWVtYmVyX25hbWUsCisgICAgICAgICAgICAnbWVtYmVyTmFtZSc6
IG1lbWJlcl9uYW1lLAorICAgICAgICAgICAgJ21lbWJlclZhbHVlJzogbWVtYmVyX3ZhbHVlLAog
ICAgICAgICB9CiAKICAgICAgICAgbGluZXMgPSBbXQogICAgICAgICBsaW5lcy5hcHBlbmQoJycp
Ci0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBCdWlsZGVyPFNUQVRFIHwgJShjYW1lbE5h
bWUpc1NldD4mIHNldCUoY2FtZWxOYW1lKXMoJShwYXJhbWV0ZXJUeXBlKXMgdmFsdWUpJyAlIHNl
dHRlcl9hcmdzKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgQnVpbGRlcjxTVEFURSB8
ICUoY2FtZWxOYW1lKXNTZXQ+JiBzZXQlKGNhbWVsTmFtZSlzKCUobWVtYmVyVHlwZSlzICUobWVt
YmVyTmFtZSlzKScgJSBzZXR0ZXJfYXJncykKICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAg
IHsnKQotICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEo
U1RBVEUgJiAlKGNhbWVsTmFtZSlzU2V0KSwgcHJvcGVydHlfJShuYW1lKXNfYWxyZWFkeV9zZXQp
OycgJSBzZXR0ZXJfYXJncykKLQotICAgICAgICBpZiBpc2luc3RhbmNlKHR5cGVfbWVtYmVyLnR5
cGUsIEVudW1UeXBlKToKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICAgICAgbV9y
ZXN1bHQtPiUoa2V5ZWRTZXQpcygiJShuYW1lKXMiX3MsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OiUo
aGVscGVyc05hbWVzcGFjZSlzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZSh2YWx1ZSkpOycgJSBzZXR0
ZXJfYXJncykKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAg
ICAgICAgbV9yZXN1bHQtPiUoa2V5ZWRTZXQpcygiJShuYW1lKXMiX3MsIHZhbHVlKTsnICUgc2V0
dGVyX2FyZ3MpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoIShTVEFURSAmICUoY2FtZWxOYW1lKXNTZXQpLCBwcm9wZXJ0eV8lKG1lbWJlcktleSlzX2Fs
cmVhZHlfc2V0KTsnICUgc2V0dGVyX2FyZ3MpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAg
ICAgICAgbV9yZXN1bHQtPiUoc2V0dGVyKXMoIiUobWVtYmVyS2V5KXMiX3MsICUobWVtYmVyVmFs
dWUpcyk7JyAlIHNldHRlcl9hcmdzKQogICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgICAg
IHJldHVybiBjYXN0U3RhdGU8JShjYW1lbE5hbWUpc1NldD4oKTsnICUgc2V0dGVyX2FyZ3MpCiAg
ICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICB9JykKICAgICAgICAgcmV0dXJuICdcbicuam9p
bihsaW5lcykKIAogICAgIGRlZiBfZ2VuZXJhdGVfdW5jaGVja2VkX3NldHRlcl9mb3JfbWVtYmVy
KHNlbGYsIHR5cGVfbWVtYmVyLCBkb21haW4pOgorICAgICAgICBtZW1iZXJfbmFtZSA9ICdpbl9v
cHRfJyArIHR5cGVfbWVtYmVyLm1lbWJlcl9uYW1lCisKKyAgICAgICAgbWVtYmVyX3ZhbHVlID0g
bWVtYmVyX25hbWUKKyAgICAgICAgaWYgdHlwZV9tZW1iZXIudHlwZS5pc19lbnVtKCk6CisgICAg
ICAgICAgICBtZW1iZXJfdmFsdWUgPSAnUHJvdG9jb2w6OiVzOjpnZXRFbnVtQ29uc3RhbnRWYWx1
ZSglcyknICUgKHNlbGYuaGVscGVyc19uYW1lc3BhY2UoKSwgbWVtYmVyX3ZhbHVlKQorICAgICAg
ICBlbGlmIENwcEdlbmVyYXRvci5zaG91bGRfbW92ZV9hcmd1bWVudCh0eXBlX21lbWJlci50eXBl
LCBGYWxzZSk6CisgICAgICAgICAgICBtZW1iZXJfdmFsdWUgPSAnV1RGTW92ZSglcyknICUgbWVt
YmVyX3ZhbHVlCisKICAgICAgICAgc2V0dGVyX2FyZ3MgPSB7CiAgICAgICAgICAgICAnY2FtZWxO
YW1lJzogdWNmaXJzdCh0eXBlX21lbWJlci5tZW1iZXJfbmFtZSksCi0gICAgICAgICAgICAna2V5
ZWRTZXQnOiBDcHBHZW5lcmF0b3IuY3BwX3NldHRlcl9tZXRob2RfZm9yX3R5cGUodHlwZV9tZW1i
ZXIudHlwZSksCi0gICAgICAgICAgICAnbmFtZSc6IHR5cGVfbWVtYmVyLm1lbWJlcl9uYW1lLAot
ICAgICAgICAgICAgJ3BhcmFtZXRlclR5cGUnOiBDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX3R5
cGVfbWVtYmVyKHR5cGVfbWVtYmVyKSwKLSAgICAgICAgICAgICdoZWxwZXJzTmFtZXNwYWNlJzog
c2VsZi5oZWxwZXJzX25hbWVzcGFjZSgpLAorICAgICAgICAgICAgJ3NldHRlcic6IENwcEdlbmVy
YXRvci5jcHBfc2V0dGVyX21ldGhvZF9mb3JfdHlwZSh0eXBlX21lbWJlci50eXBlKSwKKyAgICAg
ICAgICAgICdtZW1iZXJLZXknOiB0eXBlX21lbWJlci5tZW1iZXJfbmFtZSwKKyAgICAgICAgICAg
ICdtZW1iZXJOYW1lJzogbWVtYmVyX25hbWUsCisgICAgICAgICAgICAnbWVtYmVyVmFsdWUnOiBt
ZW1iZXJfdmFsdWUsCisgICAgICAgICAgICAnbWVtYmVyVHlwZSc6IENwcEdlbmVyYXRvci5jcHBf
dHlwZV9mb3JfdHlwZV9tZW1iZXJfYXJndW1lbnQodHlwZV9tZW1iZXIudHlwZSwgdHlwZV9tZW1i
ZXIubWVtYmVyX25hbWUpLAogICAgICAgICB9CiAKICAgICAgICAgbGluZXMgPSBbXQogICAgICAg
ICBsaW5lcy5hcHBlbmQoJycpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIHZvaWQgc2V0JShj
YW1lbE5hbWUpcyglKHBhcmFtZXRlclR5cGUpcyB2YWx1ZSknICUgc2V0dGVyX2FyZ3MpCisgICAg
ICAgIGxpbmVzLmFwcGVuZCgnICAgIHZvaWQgc2V0JShjYW1lbE5hbWUpcyglKG1lbWJlclR5cGUp
cyAlKG1lbWJlck5hbWUpcyknICUgc2V0dGVyX2FyZ3MpCiAgICAgICAgIGxpbmVzLmFwcGVuZCgn
ICAgIHsnKQotICAgICAgICBpZiBpc2luc3RhbmNlKHR5cGVfbWVtYmVyLnR5cGUsIEVudW1UeXBl
KToKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBKU09OOjpPYmplY3RCYXNlOjol
KGtleWVkU2V0KXMoIiUobmFtZSlzIl9zLCBJbnNwZWN0b3I6OlByb3RvY29sOjolKGhlbHBlcnNO
YW1lc3BhY2Upczo6Z2V0RW51bUNvbnN0YW50VmFsdWUodmFsdWUpKTsnICUgc2V0dGVyX2FyZ3Mp
Ci0gICAgICAgIGVsaWYgQ3BwR2VuZXJhdG9yLnNob3VsZF91c2VfcmVmZXJlbmNlc19mb3JfdHlw
ZSh0eXBlX21lbWJlci50eXBlKToKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBK
U09OOjpPYmplY3RCYXNlOjolKGtleWVkU2V0KXMoIiUobmFtZSlzIl9zLCBXVEZNb3ZlKHZhbHVl
KSk7JyAlIHNldHRlcl9hcmdzKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgbGluZXMuYXBw
ZW5kKCcgICAgICAgIEpTT046Ok9iamVjdEJhc2U6OiUoa2V5ZWRTZXQpcygiJShuYW1lKXMiX3Ms
IHZhbHVlKTsnICUgc2V0dGVyX2FyZ3MpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBK
U09OOjpPYmplY3RCYXNlOjolKHNldHRlcilzKCIlKG1lbWJlcktleSlzIl9zLCAlKG1lbWJlclZh
bHVlKXMpOycgJSBzZXR0ZXJfYXJncykKICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgfScpCiAg
ICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCiAKQEAgLTM4MSwxMyArMzg5LDEzIEBAIGNs
YXNzIENwcFByb3RvY29sVHlwZXNIZWFkZXJHZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAg
ICAgICAgIGRlY2xhcmF0aW9uc190b19nZW5lcmF0ZSA9IFtkZWNsIGZvciBkZWNsIGluIHR5cGVf
ZGVjbGFyYXRpb25zIGlmIHNlbGYudHlwZV9uZWVkc19zaGFwZV9hc3NlcnRpb25zKGRlY2wudHlw
ZSldCiAKICAgICAgICAgICAgIGZvciB0eXBlX2RlY2xhcmF0aW9uIGluIGRlY2xhcmF0aW9uc190
b19nZW5lcmF0ZToKLSAgICAgICAgICAgICAgICBmb3IgdHlwZV9tZW1iZXIgaW4gdHlwZV9kZWNs
YXJhdGlvbi50eXBlX21lbWJlcnM6Ci0gICAgICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uo
dHlwZV9tZW1iZXIudHlwZSwgRW51bVR5cGUpOgotICAgICAgICAgICAgICAgICAgICAgICAgdHlw
ZV9hcmd1bWVudHMuYXBwZW5kKChzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKHR5
cGVfZGVjbGFyYXRpb24uY29uZGl0aW9uLCBDcHBHZW5lcmF0b3IuY3BwX3Byb3RvY29sX3R5cGVf
Zm9yX3R5cGVfbWVtYmVyKHR5cGVfbWVtYmVyLCB0eXBlX2RlY2xhcmF0aW9uKSksIEZhbHNlKSkK
LQogICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodHlwZV9kZWNsYXJhdGlvbi50eXBlLCBP
YmplY3RUeXBlKToKICAgICAgICAgICAgICAgICAgICAgdHlwZV9hcmd1bWVudHMuYXBwZW5kKChz
ZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKHR5cGVfZGVjbGFyYXRpb24uY29uZGl0
aW9uLCBDcHBHZW5lcmF0b3IuY3BwX3Byb3RvY29sX3R5cGVfZm9yX3R5cGUodHlwZV9kZWNsYXJh
dGlvbi50eXBlKSksIEdlbmVyYXRvci50eXBlX25lZWRzX3J1bnRpbWVfY2FzdHModHlwZV9kZWNs
YXJhdGlvbi50eXBlKSkpCiAKKyAgICAgICAgICAgICAgICBmb3IgdHlwZV9tZW1iZXIgaW4gdHlw
ZV9kZWNsYXJhdGlvbi50eXBlX21lbWJlcnM6CisgICAgICAgICAgICAgICAgICAgIGlmIGlzaW5z
dGFuY2UodHlwZV9tZW1iZXIudHlwZSwgRW51bVR5cGUpOgorICAgICAgICAgICAgICAgICAgICAg
ICAgdHlwZV9hcmd1bWVudHMuYXBwZW5kKChzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0
aW9uKHR5cGVfZGVjbGFyYXRpb24uY29uZGl0aW9uLCBDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9y
X2VudW0odHlwZV9tZW1iZXIudHlwZSwgJyVzOjolcycgJSAodHlwZV9kZWNsYXJhdGlvbi50eXBl
X25hbWUsIHVjZmlyc3QodHlwZV9tZW1iZXIubWVtYmVyX25hbWUpKSkpLCBGYWxzZSkpCisKICAg
ICAgICAgc3RydWN0X2tleXdvcmRzID0gWydzdHJ1Y3QnXQogICAgICAgICBmdW5jdGlvbl9rZXl3
b3JkcyA9IFsnc3RhdGljIHZvaWQnXQogICAgICAgICBleHBvcnRfbWFjcm8gPSBzZWxmLm1vZGVs
KCkuZnJhbWV3b3JrLnNldHRpbmcoJ2V4cG9ydF9tYWNybycsIE5vbmUpCkBAIC0zOTksNyArNDA3
LDcgQEAgY2xhc3MgQ3BwUHJvdG9jb2xUeXBlc0hlYWRlckdlbmVyYXRvcihDcHBHZW5lcmF0b3Ip
OgogICAgICAgICBmb3IgYXJndW1lbnQgaW4gdHlwZV9hcmd1bWVudHM6CiAgICAgICAgICAgICBs
aW5lcy5hcHBlbmQoJ3RlbXBsYXRlPD4gJXMgQmluZGluZ1RyYWl0czwlcz4geycgJSAoJyAnLmpv
aW4oc3RydWN0X2tleXdvcmRzKSwgYXJndW1lbnRbMF0pKQogICAgICAgICAgICAgaWYgYXJndW1l
bnRbMV06Ci0gICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCdzdGF0aWMgUmVmUHRyPCVzPiBy
dW50aW1lQ2FzdChSZWZQdHI8SlNPTjo6VmFsdWU+JiYgdmFsdWUpOycgJSBhcmd1bWVudFswXSkK
KyAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ3N0YXRpYyBSZWY8JXM+IHJ1bnRpbWVDYXN0
KFJlZjxKU09OOjpWYWx1ZT4mJiB2YWx1ZSk7JyAlIGFyZ3VtZW50WzBdKQogICAgICAgICAgICAg
bGluZXMuYXBwZW5kKCclcyBhc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShKU09OOjpWYWx1ZSop
OycgJSAnICcuam9pbihmdW5jdGlvbl9rZXl3b3JkcykpCiAgICAgICAgICAgICBsaW5lcy5hcHBl
bmQoJ307JykKICAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKQEAgLTQzOCwxMyArNDQ2
LDEzIEBAIGNsYXNzIENwcFByb3RvY29sVHlwZXNIZWFkZXJHZW5lcmF0b3IoQ3BwR2VuZXJhdG9y
KToKICAgICAgICAgICAgIGRvbWFpbl9saW5lcyA9IFtdCiAgICAgICAgICAgICBkb21haW5fbGlu
ZXMuYXBwZW5kKCIvLyBFbnVtcyBpbiB0aGUgJyVzJyBEb21haW4iICUgZG9tYWluLmRvbWFpbl9u
YW1lKQogICAgICAgICAgICAgZm9yIGVudW1fdHlwZSBpbiBlbnVtX3R5cGVzOgotICAgICAgICAg
ICAgICAgIGNwcF9wcm90b2NvbF90eXBlID0gQ3BwR2VuZXJhdG9yLmNwcF9wcm90b2NvbF90eXBl
X2Zvcl90eXBlKGVudW1fdHlwZSkKKyAgICAgICAgICAgICAgICBjcHBfcHJvdG9jb2xfdHlwZSA9
IENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3JfZW51bShlbnVtX3R5cGUsIGVudW1fdHlwZS5yYXdf
bmFtZSgpKQogICAgICAgICAgICAgICAgIGRvbWFpbl9saW5lcy5hcHBlbmQoc2VsZi53cmFwX3dp
dGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihlbnVtX3R5cGUuZGVjbGFyYXRpb24oKS5jb25kaXRpb24s
ICd0ZW1wbGF0ZTw+XG4lcyBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8JXM+KGNvbnN0IFN0cmlu
ZyYpOycgJSAocmV0dXJuX3R5cGVfd2l0aF9leHBvcnRfbWFjcm8oY3BwX3Byb3RvY29sX3R5cGUp
LCBjcHBfcHJvdG9jb2xfdHlwZSkpKQogCiAgICAgICAgICAgICBmb3Igb2JqZWN0X3R5cGUgaW4g
b2JqZWN0X3R5cGVzOgogICAgICAgICAgICAgICAgIG9iamVjdF9saW5lcyA9IFtdCiAgICAgICAg
ICAgICAgICAgZm9yIGVudW1fbWVtYmVyIGluIGZpbHRlcih0eXBlX21lbWJlcl9pc19hbm9ueW1v
dXNfZW51bV90eXBlLCBvYmplY3RfdHlwZS5tZW1iZXJzKToKLSAgICAgICAgICAgICAgICAgICAg
Y3BwX3Byb3RvY29sX3R5cGUgPSBDcHBHZW5lcmF0b3IuY3BwX3Byb3RvY29sX3R5cGVfZm9yX3R5
cGVfbWVtYmVyKGVudW1fbWVtYmVyLCBvYmplY3RfdHlwZS5kZWNsYXJhdGlvbigpKQorICAgICAg
ICAgICAgICAgICAgICBjcHBfcHJvdG9jb2xfdHlwZSA9IENwcEdlbmVyYXRvci5jcHBfdHlwZV9m
b3JfZW51bShlbnVtX21lbWJlci50eXBlLCAnJXM6OiVzJyAlIChvYmplY3RfdHlwZS5yYXdfbmFt
ZSgpLCB1Y2ZpcnN0KGVudW1fbWVtYmVyLm1lbWJlcl9uYW1lKSkpCiAgICAgICAgICAgICAgICAg
ICAgIG9iamVjdF9saW5lcy5hcHBlbmQoJ3RlbXBsYXRlPD5cbiVzIHBhcnNlRW51bVZhbHVlRnJv
bVN0cmluZzwlcz4oY29uc3QgU3RyaW5nJik7JyAlIChyZXR1cm5fdHlwZV93aXRoX2V4cG9ydF9t
YWNybyhjcHBfcHJvdG9jb2xfdHlwZSksIGNwcF9wcm90b2NvbF90eXBlKSkKICAgICAgICAgICAg
ICAgICBpZiBsZW4ob2JqZWN0X2xpbmVzKToKICAgICAgICAgICAgICAgICAgICAgZG9tYWluX2xp
bmVzLmFwcGVuZChzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKG9iamVjdF90eXBl
LmRlY2xhcmF0aW9uKCkuY29uZGl0aW9uLCAnXG4nLmpvaW4ob2JqZWN0X2xpbmVzKSkpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9n
ZW5lcmF0ZV9jcHBfcHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50YXRpb24ucHkgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfcHJvdG9j
b2xfdHlwZXNfaW1wbGVtZW50YXRpb24ucHkKaW5kZXggNWRkNTM0Njk0NDg1NTE1NDhkNjdhYTBi
NDU2YzZhMWE2NjU4ZDU5My4uMTNlNTg5NzI2ZDRjZGI3YTQ1MmM2NzBjODMyNWViMWEzOWVlNjIy
MiAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2Nv
ZGVnZW4vZ2VuZXJhdGVfY3BwX3Byb3RvY29sX3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5CisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRl
X2NwcF9wcm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbi5weQpAQCAtODIsMTAgKzgyLDggQEAg
Y2xhc3MgQ3BwUHJvdG9jb2xUeXBlc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yKENwcEdlbmVyYXRv
cik6CiAKICAgICBkZWYgX2dlbmVyYXRlX3NlY29uZGFyeV9oZWFkZXJfaW5jbHVkZXMoc2VsZik6
CiAgICAgICAgIGhlYWRlcl9pbmNsdWRlcyA9IFsKLSAgICAgICAgICAgIChbIkphdmFTY3JpcHRD
b3JlIiwgIldlYktpdCJdLCAoIldURiIsICJ3dGYvT3B0aW9uYWwuaCIpKSwKLSAgICAgICAgICAg
IChbIkphdmFTY3JpcHRDb3JlIiwgIldlYktpdCJdLCAoIldURiIsICJ3dGYvdGV4dC9DU3RyaW5n
LmgiKSksCisgICAgICAgICAgICAoWyJKYXZhU2NyaXB0Q29yZSIsICJXZWJLaXQiXSwgKCJXVEYi
LCAid3RmL0Fzc2VydGlvbnMuaCIpKSwKICAgICAgICAgXQotCiAgICAgICAgIHJldHVybiAnXG4n
LmpvaW4oc2VsZi5nZW5lcmF0ZV9pbmNsdWRlc19mcm9tX2VudHJpZXMoaGVhZGVyX2luY2x1ZGVz
KSkKIAogICAgIGRlZiBfZ2VuZXJhdGVfZW51bV9tYXBwaW5nKHNlbGYpOgpAQCAtMTQ0LDE0ICsx
NDIsMTQgQEAgY2xhc3MgQ3BwUHJvdG9jb2xUeXBlc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yKENw
cEdlbmVyYXRvcik6CiAgICAgICAgIGxpbmVzID0gW10KICAgICAgICAgbGluZXMuYXBwZW5kKCIv
LyBFbnVtcyBpbiB0aGUgJyVzJyBEb21haW4iICUgZG9tYWluLmRvbWFpbl9uYW1lKQogICAgICAg
ICBmb3IgZW51bV90eXBlIGluIGVudW1fdHlwZXM6Ci0gICAgICAgICAgICBjcHBfcHJvdG9jb2xf
dHlwZSA9IENwcEdlbmVyYXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZShlbnVtX3R5cGUp
CisgICAgICAgICAgICBjcHBfcHJvdG9jb2xfdHlwZSA9IENwcEdlbmVyYXRvci5jcHBfdHlwZV9m
b3JfZW51bShlbnVtX3R5cGUsIGVudW1fdHlwZS5yYXdfbmFtZSgpKQogICAgICAgICAgICAgbGlu
ZXMuYXBwZW5kKCcnKQogICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYud3JhcF93aXRoX2d1
YXJkX2Zvcl9jb25kaXRpb24oZW51bV90eXBlLmRlY2xhcmF0aW9uKCkuY29uZGl0aW9uLCBnZW5l
cmF0ZV9jb252ZXJzaW9uX21ldGhvZF9ib2R5KGVudW1fdHlwZSwgY3BwX3Byb3RvY29sX3R5cGUp
KSkKIAogICAgICAgICBmb3Igb2JqZWN0X3R5cGUgaW4gb2JqZWN0X3R5cGVzOgogICAgICAgICAg
ICAgb2JqZWN0X2xpbmVzID0gW10KICAgICAgICAgICAgIGZvciBlbnVtX21lbWJlciBpbiBmaWx0
ZXIodHlwZV9tZW1iZXJfaXNfYW5vbnltb3VzX2VudW1fdHlwZSwgb2JqZWN0X3R5cGUubWVtYmVy
cyk6Ci0gICAgICAgICAgICAgICAgY3BwX3Byb3RvY29sX3R5cGUgPSBDcHBHZW5lcmF0b3IuY3Bw
X3Byb3RvY29sX3R5cGVfZm9yX3R5cGVfbWVtYmVyKGVudW1fbWVtYmVyLCBvYmplY3RfdHlwZS5k
ZWNsYXJhdGlvbigpKQorICAgICAgICAgICAgICAgIGNwcF9wcm90b2NvbF90eXBlID0gQ3BwR2Vu
ZXJhdG9yLmNwcF90eXBlX2Zvcl9lbnVtKGVudW1fbWVtYmVyLnR5cGUsICclczo6JXMnICUgKG9i
amVjdF90eXBlLnJhd19uYW1lKCksIHVjZmlyc3QoZW51bV9tZW1iZXIubWVtYmVyX25hbWUpKSkK
ICAgICAgICAgICAgICAgICBvYmplY3RfbGluZXMuYXBwZW5kKGdlbmVyYXRlX2NvbnZlcnNpb25f
bWV0aG9kX2JvZHkoZW51bV9tZW1iZXIudHlwZSwgY3BwX3Byb3RvY29sX3R5cGUpKQogICAgICAg
ICAgICAgaWYgbGVuKG9iamVjdF9saW5lcyk6CiAgICAgICAgICAgICAgICAgaWYgbGVuKGxpbmVz
KToKQEAgLTE4Myw4ICsxODEsNyBAQCBjbGFzcyBDcHBQcm90b2NvbFR5cGVzSW1wbGVtZW50YXRp
b25HZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAgICAgICAgIGZvciB0eXBlX2RlY2xhcmF0
aW9uIGluIFtkZWNsIGZvciBkZWNsIGluIHR5cGVfZGVjbGFyYXRpb25zIGlmIEdlbmVyYXRvci50
eXBlX2hhc19vcGVuX2ZpZWxkcyhkZWNsLnR5cGUpXToKICAgICAgICAgICAgICAgICBvcGVuX21l
bWJlcnMgPSBHZW5lcmF0b3Iub3Blbl9maWVsZHModHlwZV9kZWNsYXJhdGlvbikKICAgICAgICAg
ICAgICAgICBmb3IgdHlwZV9tZW1iZXIgaW4gc29ydGVkKG9wZW5fbWVtYmVycywga2V5PWxhbWJk
YSBtZW1iZXI6IG1lbWJlci5tZW1iZXJfbmFtZSk6Ci0gICAgICAgICAgICAgICAgICAgIGZpZWxk
X25hbWUgPSAnOjonLmpvaW4oWydJbnNwZWN0b3InLCAnUHJvdG9jb2wnLCBkb21haW4uZG9tYWlu
X25hbWUsIHVjZmlyc3QodHlwZV9kZWNsYXJhdGlvbi50eXBlX25hbWUpLCB1Y2ZpcnN0KHR5cGVf
bWVtYmVyLm1lbWJlcl9uYW1lKV0pCi0gICAgICAgICAgICAgICAgICAgIGRvbWFpbl9saW5lcy5h
cHBlbmQoJ2NvbnN0IGNoYXIqICVzID0gIiVzIjsnICUgKGZpZWxkX25hbWUsIHR5cGVfbWVtYmVy
Lm1lbWJlcl9uYW1lKSkKKyAgICAgICAgICAgICAgICAgICAgZG9tYWluX2xpbmVzLmFwcGVuZCgn
Y29uc3QgY2hhciogUHJvdG9jb2w6OiVzOjolczo6JXNLZXkgPSAiJXMiOycgJSAoZG9tYWluLmRv
bWFpbl9uYW1lLCB1Y2ZpcnN0KHR5cGVfZGVjbGFyYXRpb24udHlwZV9uYW1lKSwgdHlwZV9tZW1i
ZXIubWVtYmVyX25hbWUsIHR5cGVfbWVtYmVyLm1lbWJlcl9uYW1lKSkKICAgICAgICAgICAgIGlm
IGxlbihkb21haW5fbGluZXMpOgogICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLndy
YXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGRvbWFpbi5jb25kaXRpb24sICdcbicuam9pbihk
b21haW5fbGluZXMpKSkKIApAQCAtMjI3LDM3ICsyMjQsNTQgQEAgY2xhc3MgQ3BwUHJvdG9jb2xU
eXBlc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAKICAgICAgICAgbGlu
ZXMuYXBwZW5kKCd2b2lkIEJpbmRpbmdUcmFpdHM8JXM+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVk
VHlwZShKU09OOjpWYWx1ZSogdmFsdWUpJyAlIChDcHBHZW5lcmF0b3IuY3BwX3Byb3RvY29sX3R5
cGVfZm9yX3R5cGUob2JqZWN0X2RlY2xhcmF0aW9uLnR5cGUpKSkKICAgICAgICAgbGluZXMuYXBw
ZW5kKCIiInsKKyAgICBBU1NFUlRfVU5VU0VEKHZhbHVlLCB2YWx1ZSk7CiAjaWYgQVNTRVJUX0VO
QUJMRUQKLSAgICBBU1NFUlRfQVJHKHZhbHVlLCB2YWx1ZSk7Ci0gICAgUmVmUHRyPEpTT046Ok9i
amVjdD4gb2JqZWN0OwotICAgIGJvb2wgY2FzdFN1Y2NlZWRlZCA9IHZhbHVlLT5hc09iamVjdChv
YmplY3QpOwotICAgIEFTU0VSVF9VTlVTRUQoY2FzdFN1Y2NlZWRlZCwgY2FzdFN1Y2NlZWRlZCk7
IiIiKQorICAgIGF1dG8gb2JqZWN0ID0gdmFsdWUtPmFzT2JqZWN0KCk7CisgICAgQVNTRVJUKG9i
amVjdCk7IiIiKQogICAgICAgICBmb3IgdHlwZV9tZW1iZXIgaW4gcmVxdWlyZWRfbWVtYmVyczoK
KyAgICAgICAgICAgIG1lbWJlcl90eXBlID0gdHlwZV9tZW1iZXIudHlwZQorICAgICAgICAgICAg
aWYgaXNpbnN0YW5jZShtZW1iZXJfdHlwZSwgQWxpYXNlZFR5cGUpOgorICAgICAgICAgICAgICAg
IG1lbWJlcl90eXBlID0gbWVtYmVyX3R5cGUuYWxpYXNlZF90eXBlCisKKyAgICAgICAgICAgIGlm
IGlzaW5zdGFuY2UobWVtYmVyX3R5cGUsIEVudW1UeXBlKToKKyAgICAgICAgICAgICAgICBtZW1i
ZXJfdHlwZSA9IENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3JfZW51bShtZW1iZXJfdHlwZSwgJyVz
OjolcycgJSAob2JqZWN0X2RlY2xhcmF0aW9uLnR5cGVfbmFtZSwgdWNmaXJzdCh0eXBlX21lbWJl
ci5tZW1iZXJfbmFtZSkpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBtZW1i
ZXJfdHlwZSA9IENwcEdlbmVyYXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZShtZW1iZXJf
dHlwZSkKKwogICAgICAgICAgICAgYXJncyA9IHsKICAgICAgICAgICAgICAgICAnbWVtYmVyTmFt
ZSc6IHR5cGVfbWVtYmVyLm1lbWJlcl9uYW1lLAotICAgICAgICAgICAgICAgICdhc3NlcnRNZXRo
b2QnOiBDcHBHZW5lcmF0b3IuY3BwX2Fzc2VydGlvbl9tZXRob2RfZm9yX3R5cGVfbWVtYmVyKHR5
cGVfbWVtYmVyLCBvYmplY3RfZGVjbGFyYXRpb24pCisgICAgICAgICAgICAgICAgJ21lbWJlclR5
cGUnOiBtZW1iZXJfdHlwZQogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBsaW5lcy5hcHBl
bmQoIiIiICAgIHsKICAgICAgICAgYXV0byAlKG1lbWJlck5hbWUpc1BvcyA9IG9iamVjdC0+Zmlu
ZCgiJShtZW1iZXJOYW1lKXMiX3MpOwogICAgICAgICBBU1NFUlQoJShtZW1iZXJOYW1lKXNQb3Mg
IT0gb2JqZWN0LT5lbmQoKSk7Ci0gICAgICAgICUoYXNzZXJ0TWV0aG9kKXMoJShtZW1iZXJOYW1l
KXNQb3MtPnZhbHVlLmdldCgpKTsKKyAgICAgICAgQmluZGluZ1RyYWl0czwlKG1lbWJlclR5cGUp
cz46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKCUobWVtYmVyTmFtZSlzUG9zLT52YWx1ZS5w
dHIoKSk7CiAgICAgfSIiIiAlIGFyZ3MpCiAKICAgICAgICAgaWYgc2hvdWxkX2NvdW50X3Byb3Bl
cnRpZXM6CiAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJycpCi0gICAgICAgICAgICBsaW5lcy5h
cHBlbmQoJyAgICBpbnQgZm91bmRQcm9wZXJ0aWVzQ291bnQgPSAlczsnICUgbGVuKHJlcXVpcmVk
X21lbWJlcnMpKQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgc2l6ZV90IGZvdW5kUHJv
cGVydGllc0NvdW50ID0gJXM7JyAlIGxlbihyZXF1aXJlZF9tZW1iZXJzKSkKIAogICAgICAgICBm
b3IgdHlwZV9tZW1iZXIgaW4gb3B0aW9uYWxfbWVtYmVyczoKKyAgICAgICAgICAgIG1lbWJlcl90
eXBlID0gdHlwZV9tZW1iZXIudHlwZQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShtZW1iZXJf
dHlwZSwgQWxpYXNlZFR5cGUpOgorICAgICAgICAgICAgICAgIG1lbWJlcl90eXBlID0gbWVtYmVy
X3R5cGUuYWxpYXNlZF90eXBlCisKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UobWVtYmVyX3R5
cGUsIEVudW1UeXBlKToKKyAgICAgICAgICAgICAgICBtZW1iZXJfdHlwZSA9IENwcEdlbmVyYXRv
ci5jcHBfdHlwZV9mb3JfZW51bShtZW1iZXJfdHlwZSwgJyVzOjolcycgJSAob2JqZWN0X2RlY2xh
cmF0aW9uLnR5cGVfbmFtZSwgdWNmaXJzdCh0eXBlX21lbWJlci5tZW1iZXJfbmFtZSkpKQorICAg
ICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBtZW1iZXJfdHlwZSA9IENwcEdlbmVyYXRv
ci5jcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZShtZW1iZXJfdHlwZSkKKwogICAgICAgICAgICAg
YXJncyA9IHsKICAgICAgICAgICAgICAgICAnbWVtYmVyTmFtZSc6IHR5cGVfbWVtYmVyLm1lbWJl
cl9uYW1lLAotICAgICAgICAgICAgICAgICdhc3NlcnRNZXRob2QnOiBDcHBHZW5lcmF0b3IuY3Bw
X2Fzc2VydGlvbl9tZXRob2RfZm9yX3R5cGVfbWVtYmVyKHR5cGVfbWVtYmVyLCBvYmplY3RfZGVj
bGFyYXRpb24pCisgICAgICAgICAgICAgICAgJ21lbWJlclR5cGUnOiBtZW1iZXJfdHlwZQogICAg
ICAgICAgICAgfQogCiAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoIiIiICAgIHsKICAgICAgICAg
YXV0byAlKG1lbWJlck5hbWUpc1BvcyA9IG9iamVjdC0+ZmluZCgiJShtZW1iZXJOYW1lKXMiX3Mp
OwogICAgICAgICBpZiAoJShtZW1iZXJOYW1lKXNQb3MgIT0gb2JqZWN0LT5lbmQoKSkgewotICAg
ICAgICAgICAgJShhc3NlcnRNZXRob2QpcyglKG1lbWJlck5hbWUpc1Bvcy0+dmFsdWUuZ2V0KCkp
OyIiIiAlIGFyZ3MpCisgICAgICAgICAgICBCaW5kaW5nVHJhaXRzPCUobWVtYmVyVHlwZSlzPjo6
YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoJShtZW1iZXJOYW1lKXNQb3MtPnZhbHVlLnB0cigp
KTsiIiIgJSBhcmdzKQogCiAgICAgICAgICAgICBpZiBzaG91bGRfY291bnRfcHJvcGVydGllczoK
ICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgICAgICsrZm91bmRQcm9wZXJ0
aWVzQ291bnQ7JykKQEAgLTI2NywyNyArMjgxLDIyIEBAIGNsYXNzIENwcFByb3RvY29sVHlwZXNJ
bXBsZW1lbnRhdGlvbkdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAgICBpZiBzaG91bGRf
Y291bnRfcHJvcGVydGllczoKICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGlmIChmb3Vu
ZFByb3BlcnRpZXNDb3VudCAhPSBvYmplY3QtPnNpemUoKSknKQogICAgICAgICAgICAgbGluZXMu
YXBwZW5kKCcgICAgICAgIEZBVEFMKCJVbmV4cGVjdGVkIHByb3BlcnRpZXMgaW4gb2JqZWN0OiAl
c1xcbiIsIG9iamVjdC0+dG9KU09OU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOycpCi0gICAgICAg
IGxpbmVzLmFwcGVuZCgnI2Vsc2UgLy8gQVNTRVJUX0VOQUJMRUQnKQotICAgICAgICBsaW5lcy5h
cHBlbmQoJyAgICBVTlVTRURfUEFSQU0odmFsdWUpOycpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgn
I2VuZGlmIC8vIEFTU0VSVF9FTkFCTEVEJykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcjZW5kaWYn
KQogICAgICAgICBsaW5lcy5hcHBlbmQoJ30nKQogICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxp
bmVzKQogCiAgICAgZGVmIF9nZW5lcmF0ZV9hc3NlcnRpb25fZm9yX2VudW0oc2VsZiwgZW51bV9t
ZW1iZXIsIG9iamVjdF9kZWNsYXJhdGlvbik6CiAgICAgICAgIGxpbmVzID0gW10KLSAgICAgICAg
bGluZXMuYXBwZW5kKCd2b2lkICVzKEpTT046OlZhbHVlKiB2YWx1ZSknICUgQ3BwR2VuZXJhdG9y
LmNwcF9hc3NlcnRpb25fbWV0aG9kX2Zvcl90eXBlX21lbWJlcihlbnVtX21lbWJlciwgb2JqZWN0
X2RlY2xhcmF0aW9uKSkKKyAgICAgICAgbGluZXMuYXBwZW5kKCd2b2lkIEJpbmRpbmdUcmFpdHM8
JXM+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShKU09OOjpWYWx1ZSogdmFsdWUpJyAlIENw
cEdlbmVyYXRvci5jcHBfdHlwZV9mb3JfZW51bShlbnVtX21lbWJlci50eXBlLCAnJXM6OiVzJyAl
IChvYmplY3RfZGVjbGFyYXRpb24udHlwZV9uYW1lLCB1Y2ZpcnN0KGVudW1fbWVtYmVyLm1lbWJl
cl9uYW1lKSkpKQogICAgICAgICBsaW5lcy5hcHBlbmQoJ3snKQorICAgICAgICBsaW5lcy5hcHBl
bmQoJyAgICBBU1NFUlRfVU5VU0VEKHZhbHVlLCB2YWx1ZSk7JykKICAgICAgICAgbGluZXMuYXBw
ZW5kKCcjaWYgQVNTRVJUX0VOQUJMRUQnKQotICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBBU1NF
UlRfQVJHKHZhbHVlLCB2YWx1ZSk7JykKLSAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgU3RyaW5n
IHJlc3VsdDsnKQotICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBib29sIGNhc3RTdWNjZWVkZWQg
PSB2YWx1ZS0+YXNTdHJpbmcocmVzdWx0KTsnKQotICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBB
U1NFUlQoY2FzdFN1Y2NlZWRlZCk7JykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgYXV0byBy
ZXN1bHQgPSB2YWx1ZS0+YXNTdHJpbmcoKTsnKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBB
U1NFUlQocmVzdWx0KTsnKQogCiAgICAgICAgIGFzc2VydF9jb25kaXRpb24gPSAnIHx8ICcuam9p
bihbJ3Jlc3VsdCA9PSAiJXMiJyAlIGVudW1fdmFsdWUgZm9yIGVudW1fdmFsdWUgaW4gZW51bV9t
ZW1iZXIudHlwZS5lbnVtX3ZhbHVlcygpXSkKICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgQVNT
RVJUKCVzKTsnICUgYXNzZXJ0X2NvbmRpdGlvbikKLSAgICAgICAgbGluZXMuYXBwZW5kKCcjZWxz
ZSAvLyBBU1NFUlRfRU5BQkxFRCcpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIFVOVVNFRF9Q
QVJBTSh2YWx1ZSk7JykKLSAgICAgICAgbGluZXMuYXBwZW5kKCcjZW5kaWYgLy8gQVNTRVJUX0VO
QUJMRUQnKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyNlbmRpZicpCiAgICAgICAgIGxpbmVzLmFw
cGVuZCgnfScpCiAKICAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRl
X29iamNfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfYmFja2VuZF9kaXNwYXRj
aGVyX2hlYWRlci5weQppbmRleCAzZTEzOTc0YWIzNjIxM2RhNzhiNzJjYTIzMmU3N2UxYTk5NGM1
NWY3Li45NmI2YjYxMjZkYzdlZDgxMzJjM2YyZTIzNWRlM2Y3MDFkY2Y4OTExIDEwMDc1NQotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0
ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19iYWNrZW5kX2Rp
c3BhdGNoZXJfaGVhZGVyLnB5CkBAIC0zMywxMyArMzMsMTMgQEAgZnJvbSBzdHJpbmcgaW1wb3J0
IFRlbXBsYXRlCiB0cnk6CiAgICAgZnJvbSAuY3BwX2dlbmVyYXRvciBpbXBvcnQgQ3BwR2VuZXJh
dG9yCiAgICAgZnJvbSAuZ2VuZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IKLSAgICBmcm9tIC5tb2Rl
bHMgaW1wb3J0IEZyYW1ld29ya3MKKyAgICBmcm9tIC5tb2RlbHMgaW1wb3J0IEVudW1UeXBlLCBB
bGlhc2VkVHlwZSwgRnJhbWV3b3JrcwogICAgIGZyb20gLm9iamNfZ2VuZXJhdG9yIGltcG9ydCBP
YmpDR2VuZXJhdG9yCiAgICAgZnJvbSAub2JqY19nZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBP
YmpDR2VuZXJhdG9yVGVtcGxhdGVzIGFzIE9iakNUZW1wbGF0ZXMKIGV4Y2VwdCBWYWx1ZUVycm9y
OgogICAgIGZyb20gY3BwX2dlbmVyYXRvciBpbXBvcnQgQ3BwR2VuZXJhdG9yCiAgICAgZnJvbSBn
ZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvcgotICAgIGZyb20gbW9kZWxzIGltcG9ydCBGcmFtZXdv
cmtzCisgICAgZnJvbSBtb2RlbHMgaW1wb3J0IEVudW1UeXBlLCBBbGlhc2VkVHlwZSwgRnJhbWV3
b3JrcwogICAgIGZyb20gb2JqY19nZW5lcmF0b3IgaW1wb3J0IE9iakNHZW5lcmF0b3IKICAgICBm
cm9tIG9iamNfZ2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgT2JqQ0dlbmVyYXRvclRlbXBsYXRl
cyBhcyBPYmpDVGVtcGxhdGVzCiAKQEAgLTEwMyw5ICsxMDMsMTkgQEAgY2xhc3MgT2JqQ0JhY2tl
bmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yKE9iakNHZW5lcmF0b3IpOgogCiAgICAgZGVmIF9n
ZW5lcmF0ZV9vYmpjX2hhbmRsZXJfZGVjbGFyYXRpb25fZm9yX2NvbW1hbmQoc2VsZiwgY29tbWFu
ZCk6CiAgICAgICAgIGxpbmVzID0gW10KLSAgICAgICAgcGFyYW1ldGVycyA9IFsnbG9uZyByZXF1
ZXN0SWQnXQotICAgICAgICBmb3IgX3BhcmFtZXRlciBpbiBjb21tYW5kLmNhbGxfcGFyYW1ldGVy
czoKLSAgICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKCclcyBpbl8lcycgJSAoQ3BwR2VuZXJh
dG9yLmNwcF90eXBlX2Zvcl91bmNoZWNrZWRfZm9ybWFsX2luX3BhcmFtZXRlcihfcGFyYW1ldGVy
KSwgX3BhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkpCisgICAgICAgIHBhcmFtZXRlcnMgPSBbJ2xv
bmcgcHJvdG9jb2xfY2FsbElkJ10KKyAgICAgICAgZm9yIHBhcmFtZXRlciBpbiBjb21tYW5kLmNh
bGxfcGFyYW1ldGVyczoKKyAgICAgICAgICAgIHBhcmFtZXRlcl90eXBlID0gcGFyYW1ldGVyLnR5
cGUKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UocGFyYW1ldGVyX3R5cGUsIEFsaWFzZWRUeXBl
KToKKyAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfdHlwZSA9IHBhcmFtZXRlcl90eXBlLmFsaWFz
ZWRfdHlwZQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShwYXJhbWV0ZXJfdHlwZSwgRW51bVR5
cGUpOgorICAgICAgICAgICAgICAgIHBhcmFtZXRlcl90eXBlID0gcGFyYW1ldGVyX3R5cGUucHJp
bWl0aXZlX3R5cGUKKworICAgICAgICAgICAgcGFyYW1ldGVyX25hbWUgPSBwYXJhbWV0ZXIucGFy
YW1ldGVyX25hbWUKKyAgICAgICAgICAgIGlmIHBhcmFtZXRlci5pc19vcHRpb25hbDoKKyAgICAg
ICAgICAgICAgICBwYXJhbWV0ZXJfbmFtZSA9ICdvcHRfJyArIHBhcmFtZXRlcl9uYW1lCisKKyAg
ICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKCclcyAlcycgJSAoQ3BwR2VuZXJhdG9yLmNwcF90
eXBlX2Zvcl9jb21tYW5kX3BhcmFtZXRlcihwYXJhbWV0ZXJfdHlwZSwgcGFyYW1ldGVyLmlzX29w
dGlvbmFsKSwgcGFyYW1ldGVyX25hbWUpKQogCiAgICAgICAgIGNvbW1hbmRfYXJncyA9IHsKICAg
ICAgICAgICAgICdjb21tYW5kTmFtZSc6IGNvbW1hbmQuY29tbWFuZF9uYW1lLApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJh
dGVfb2JqY19iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2JhY2tl
bmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQppbmRleCBmNWVlOGU1ODM5OGQ2OWJhZTRi
ZWI0YzE4NjcwNjNjY2Q1MjIwOWVjLi4xYmQ5NjM1YmQzMjUxOTkxNTFjZmQ5ODAxM2E1MTI3Mjg5
ODhkMWI5IDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlv
bi5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdl
bi9nZW5lcmF0ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQpAQCAt
OTAsOSArOTAsMjAgQEAgY2xhc3MgT2JqQ0JhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25H
ZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6CiAKICAgICBkZWYgX2dlbmVyYXRlX2hhbmRsZXJfaW1w
bGVtZW50YXRpb25fZm9yX2NvbW1hbmQoc2VsZiwgZG9tYWluLCBjb21tYW5kKToKICAgICAgICAg
bGluZXMgPSBbXQotICAgICAgICBwYXJhbWV0ZXJzID0gWydsb25nIHJlcXVlc3RJZCddCisgICAg
ICAgIHBhcmFtZXRlcnMgPSBbJ2xvbmcgcHJvdG9jb2xfY2FsbElkJ10KICAgICAgICAgZm9yIHBh
cmFtZXRlciBpbiBjb21tYW5kLmNhbGxfcGFyYW1ldGVyczoKLSAgICAgICAgICAgIHBhcmFtZXRl
cnMuYXBwZW5kKCclcyBpbl8lcycgJSAoQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl91bmNoZWNr
ZWRfZm9ybWFsX2luX3BhcmFtZXRlcihwYXJhbWV0ZXIpLCBwYXJhbWV0ZXIucGFyYW1ldGVyX25h
bWUpKQorICAgICAgICAgICAgcGFyYW1ldGVyX3R5cGUgPSBwYXJhbWV0ZXIudHlwZQorICAgICAg
ICAgICAgaWYgaXNpbnN0YW5jZShwYXJhbWV0ZXJfdHlwZSwgQWxpYXNlZFR5cGUpOgorICAgICAg
ICAgICAgICAgIHBhcmFtZXRlcl90eXBlID0gcGFyYW1ldGVyX3R5cGUuYWxpYXNlZF90eXBlCisg
ICAgICAgICAgICBpZiBpc2luc3RhbmNlKHBhcmFtZXRlcl90eXBlLCBFbnVtVHlwZSk6CisgICAg
ICAgICAgICAgICAgcGFyYW1ldGVyX3R5cGUgPSBwYXJhbWV0ZXJfdHlwZS5wcmltaXRpdmVfdHlw
ZQorCisgICAgICAgICAgICBwYXJhbWV0ZXJfbmFtZSA9IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFt
ZQorICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAg
IHBhcmFtZXRlcl9uYW1lID0gJ29wdF8nICsgcGFyYW1ldGVyX25hbWUKKyAgICAgICAgICAgIHBh
cmFtZXRlcl9uYW1lID0gJ2luXycgKyBwYXJhbWV0ZXJfbmFtZQorCisgICAgICAgICAgICBwYXJh
bWV0ZXJzLmFwcGVuZCgnJXMgJXMnICUgKENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3JfY29tbWFu
ZF9wYXJhbWV0ZXIocGFyYW1ldGVyX3R5cGUsIHBhcmFtZXRlci5pc19vcHRpb25hbCksIHBhcmFt
ZXRlcl9uYW1lKSkKIAogICAgICAgICBjb21tYW5kX2FyZ3MgPSB7CiAgICAgICAgICAgICAnZG9t
YWluTmFtZSc6IGRvbWFpbi5kb21haW5fbmFtZSwKQEAgLTExNSw0NSArMTI2LDU0IEBAIGNsYXNz
IE9iakNCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKE9iakNHZW5lcmF0
b3IpOgogICAgICAgICBpZiBjb21tYW5kLnJldHVybl9wYXJhbWV0ZXJzOgogICAgICAgICAgICAg
c3VjY2Vzc19ibG9ja19wYXJhbWV0ZXJzID0gW10KICAgICAgICAgICAgIGZvciBwYXJhbWV0ZXIg
aW4gY29tbWFuZC5yZXR1cm5fcGFyYW1ldGVyczoKKyAgICAgICAgICAgICAgICBvdXRfcGFyYW1f
bmFtZSA9IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZQorICAgICAgICAgICAgICAgIGlmIHBhcmFt
ZXRlci5pc19vcHRpb25hbDoKKyAgICAgICAgICAgICAgICAgICAgb3V0X3BhcmFtX25hbWUgPSAn
b3B0XycgKyBvdXRfcGFyYW1fbmFtZQorICAgICAgICAgICAgICAgIG91dF9wYXJhbV9uYW1lID0g
J291dF8nICsgb3V0X3BhcmFtX25hbWUKICAgICAgICAgICAgICAgICBvYmpjX3R5cGUgPSBzZWxm
Lm9iamNfdHlwZV9mb3JfcGFyYW0oZG9tYWluLCBjb21tYW5kLmNvbW1hbmRfbmFtZSwgcGFyYW1l
dGVyKQotICAgICAgICAgICAgICAgIHZhcl9uYW1lID0gT2JqQ0dlbmVyYXRvci5pZGVudGlmaWVy
X3RvX29iamNfaWRlbnRpZmllcihwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpCi0gICAgICAgICAg
ICAgICAgc3VjY2Vzc19ibG9ja19wYXJhbWV0ZXJzLmFwcGVuZChqb2luX3R5cGVfYW5kX25hbWUo
b2JqY190eXBlLCB2YXJfbmFtZSkpCisgICAgICAgICAgICAgICAgc3VjY2Vzc19ibG9ja19wYXJh
bWV0ZXJzLmFwcGVuZChqb2luX3R5cGVfYW5kX25hbWUob2JqY190eXBlLCBvdXRfcGFyYW1fbmFt
ZSkpCiAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBe
KCVzKSB7JyAlICcsICcuam9pbihzdWNjZXNzX2Jsb2NrX3BhcmFtZXRlcnMpKQogICAgICAgICBl
bHNlOgogICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0g
XnsnKQogCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBhdXRvIHByb3RvY29sX2pzb25N
ZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsnKQogICAgICAgICBpZiBjb21tYW5kLnJl
dHVybl9wYXJhbWV0ZXJzOgotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIFJlZjxK
U09OOjpPYmplY3Q+IHJlc3VsdE9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7JykKLQog
ICAgICAgICAgICAgcmVxdWlyZWRfcG9pbnRlcl9wYXJhbWV0ZXJzID0gW3BhcmFtZXRlciBmb3Ig
cGFyYW1ldGVyIGluIGNvbW1hbmQucmV0dXJuX3BhcmFtZXRlcnMgaWYgbm90IHBhcmFtZXRlci5p
c19vcHRpb25hbCBhbmQgT2JqQ0dlbmVyYXRvci5pc190eXBlX29iamNfcG9pbnRlcl90eXBlKHBh
cmFtZXRlci50eXBlKV0KICAgICAgICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gcmVxdWlyZWRfcG9p
bnRlcl9wYXJhbWV0ZXJzOgotICAgICAgICAgICAgICAgIHZhcl9uYW1lID0gT2JqQ0dlbmVyYXRv
ci5pZGVudGlmaWVyX3RvX29iamNfaWRlbnRpZmllcihwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUp
Ci0gICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9G
T1JfUkVRVUlSRURfUEFSQU1FVEVSKCVzLCBAIiVzIik7JyAlICh2YXJfbmFtZSwgdmFyX25hbWUp
KQorICAgICAgICAgICAgICAgIG91dF9wYXJhbV9uYW1lID0gcGFyYW1ldGVyLnBhcmFtZXRlcl9u
YW1lCisgICAgICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgorICAgICAgICAg
ICAgICAgICAgICBvdXRfcGFyYW1fbmFtZSA9ICdvcHRfJyArIG91dF9wYXJhbV9uYW1lCisgICAg
ICAgICAgICAgICAgb3V0X3BhcmFtX25hbWUgPSAnb3V0XycgKyBvdXRfcGFyYW1fbmFtZQorICAg
ICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JF
UVVJUkVEX1BBUkFNRVRFUiglcywgQCIlcyIpOycgJSAob3V0X3BhcmFtX25hbWUsIHBhcmFtZXRl
ci5wYXJhbWV0ZXJfbmFtZSkpCiAgICAgICAgICAgICAgICAgb2JqY19hcnJheV9jbGFzcyA9IHNl
bGYub2JqY19jbGFzc19mb3JfYXJyYXlfdHlwZShwYXJhbWV0ZXIudHlwZSkKICAgICAgICAgICAg
ICAgICBpZiBvYmpjX2FycmF5X2NsYXNzIGFuZCBvYmpjX2FycmF5X2NsYXNzLnN0YXJ0c3dpdGgo
c2VsZi5vYmpjX3ByZWZpeCgpKToKLSAgICAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcg
ICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEVfSU5fQVJSQVkoJXMsIFslcyBjbGFz
c10pOycgJSAodmFyX25hbWUsIG9iamNfYXJyYXlfY2xhc3MpKQorICAgICAgICAgICAgICAgICAg
ICBsaW5lcy5hcHBlbmQoJyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRV9JTl9B
UlJBWSglcywgWyVzIGNsYXNzXSk7JyAlIChvdXRfcGFyYW1fbmFtZSwgb2JqY19hcnJheV9jbGFz
cykpCiAKICAgICAgICAgICAgIG9wdGlvbmFsX3BvaW50ZXJfcGFyYW1ldGVycyA9IFtwYXJhbWV0
ZXIgZm9yIHBhcmFtZXRlciBpbiBjb21tYW5kLnJldHVybl9wYXJhbWV0ZXJzIGlmIHBhcmFtZXRl
ci5pc19vcHRpb25hbCBhbmQgT2JqQ0dlbmVyYXRvci5pc190eXBlX29iamNfcG9pbnRlcl90eXBl
KHBhcmFtZXRlci50eXBlKV0KICAgICAgICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gb3B0aW9uYWxf
cG9pbnRlcl9wYXJhbWV0ZXJzOgotICAgICAgICAgICAgICAgIHZhcl9uYW1lID0gT2JqQ0dlbmVy
YXRvci5pZGVudGlmaWVyX3RvX29iamNfaWRlbnRpZmllcihwYXJhbWV0ZXIucGFyYW1ldGVyX25h
bWUpCi0gICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUiglcywgQCIlcyIpOycgJSAodmFyX25hbWUsIHZh
cl9uYW1lKSkKKyAgICAgICAgICAgICAgICBvdXRfcGFyYW1fbmFtZSA9IHBhcmFtZXRlci5wYXJh
bWV0ZXJfbmFtZQorICAgICAgICAgICAgICAgIGlmIHBhcmFtZXRlci5pc19vcHRpb25hbDoKKyAg
ICAgICAgICAgICAgICAgICAgb3V0X3BhcmFtX25hbWUgPSAnb3B0XycgKyBvdXRfcGFyYW1fbmFt
ZQorICAgICAgICAgICAgICAgIG91dF9wYXJhbV9uYW1lID0gJ291dF8nICsgb3V0X3BhcmFtX25h
bWUKKyAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgVEhST1dfRVhDRVBUSU9O
X0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKCVzLCBAIiVzIik7JyAlIChvdXRfcGFyYW1fbmFt
ZSwgcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKSkKICAgICAgICAgICAgICAgICBvYmpjX2FycmF5
X2NsYXNzID0gc2VsZi5vYmpjX2NsYXNzX2Zvcl9hcnJheV90eXBlKHBhcmFtZXRlci50eXBlKQog
ICAgICAgICAgICAgICAgIGlmIG9iamNfYXJyYXlfY2xhc3MgYW5kIG9iamNfYXJyYXlfY2xhc3Mu
c3RhcnRzd2l0aChzZWxmLm9iamNfcHJlZml4KCkpOgotICAgICAgICAgICAgICAgICAgICBsaW5l
cy5hcHBlbmQoJyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRV9JTl9PUFRJT05B
TF9BUlJBWSglcywgWyVzIGNsYXNzXSk7JyAlICh2YXJfbmFtZSwgb2JqY19hcnJheV9jbGFzcykp
CisgICAgICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBUSFJPV19FWENFUFRJ
T05fRk9SX0JBRF9UWVBFX0lOX09QVElPTkFMX0FSUkFZKCVzLCBbJXMgY2xhc3NdKTsnICUgKG91
dF9wYXJhbV9uYW1lLCBvYmpjX2FycmF5X2NsYXNzKSkKIAogICAgICAgICAgICAgZm9yIHBhcmFt
ZXRlciBpbiBjb21tYW5kLnJldHVybl9wYXJhbWV0ZXJzOgorICAgICAgICAgICAgICAgIG91dF9w
YXJhbV9uYW1lID0gcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lCisgICAgICAgICAgICAgICAgaWYg
cGFyYW1ldGVyLmlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAgICAgICBvdXRfcGFyYW1fbmFt
ZSA9ICdvcHRfJyArIG91dF9wYXJhbV9uYW1lCisgICAgICAgICAgICAgICAgb3V0X3BhcmFtX25h
bWUgPSAnb3V0XycgKyBvdXRfcGFyYW1fbmFtZQogICAgICAgICAgICAgICAgIGtleWVkX3NldF9t
ZXRob2QgPSBDcHBHZW5lcmF0b3IuY3BwX3NldHRlcl9tZXRob2RfZm9yX3R5cGUocGFyYW1ldGVy
LnR5cGUpCi0gICAgICAgICAgICAgICAgdmFyX25hbWUgPSBPYmpDR2VuZXJhdG9yLmlkZW50aWZp
ZXJfdG9fb2JqY19pZGVudGlmaWVyKHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkKLSAgICAgICAg
ICAgICAgICB2YXJfZXhwcmVzc2lvbiA9ICcqJXMnICUgdmFyX25hbWUgaWYgcGFyYW1ldGVyLmlz
X29wdGlvbmFsIGVsc2UgdmFyX25hbWUKKyAgICAgICAgICAgICAgICB2YXJfZXhwcmVzc2lvbiA9
ICcqJXMnICUgb3V0X3BhcmFtX25hbWUgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsIGVsc2Ugb3V0
X3BhcmFtX25hbWUKICAgICAgICAgICAgICAgICBleHBvcnRfZXhwcmVzc2lvbiA9IHNlbGYub2Jq
Y19wcm90b2NvbF9leHBvcnRfZXhwcmVzc2lvbl9mb3JfdmFyaWFibGUocGFyYW1ldGVyLnR5cGUs
IHZhcl9leHByZXNzaW9uKQogICAgICAgICAgICAgICAgIGlmIG5vdCBwYXJhbWV0ZXIuaXNfb3B0
aW9uYWw6Ci0gICAgICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICByZXN1bHRP
YmplY3QtPiVzKCIlcyJfcywgJXMpOycgJSAoa2V5ZWRfc2V0X21ldGhvZCwgcGFyYW1ldGVyLnBh
cmFtZXRlcl9uYW1lLCBleHBvcnRfZXhwcmVzc2lvbikpCisgICAgICAgICAgICAgICAgICAgIGxp
bmVzLmFwcGVuZCgnICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+JXMoIiVzIl9zLCAlcyk7
JyAlIChrZXllZF9zZXRfbWV0aG9kLCBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUsIGV4cG9ydF9l
eHByZXNzaW9uKSkKICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBs
aW5lcy5hcHBlbmQoJyAgICAgICAgaWYgKCVzKScgJSB2YXJfbmFtZSkKLSAgICAgICAgICAgICAg
ICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgICAgICByZXN1bHRPYmplY3QtPiVzKCIlcyJfcywg
JXMpOycgJSAoa2V5ZWRfc2V0X21ldGhvZCwgcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lLCBleHBv
cnRfZXhwcmVzc2lvbikpCi0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgYmFja2Vu
ZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHRPYmpl
Y3QpLCBmYWxzZSk7JykKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgn
ICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBKU09O
OjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7JykKKyAgICAgICAgICAgICAgICAgICAgbGluZXMu
YXBwZW5kKCcgICAgICAgIGlmICghISVzKScgJSBvdXRfcGFyYW1fbmFtZSkKKyAgICAgICAgICAg
ICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+
JXMoIiVzIl9zLCAlcyk7JyAlIChrZXllZF9zZXRfbWV0aG9kLCBwYXJhbWV0ZXIucGFyYW1ldGVy
X25hbWUsIGV4cG9ydF9leHByZXNzaW9uKSkKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAg
IGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShwcm90b2NvbF9jYWxsSWQsIFdURk1v
dmUocHJvdG9jb2xfanNvbk1lc3NhZ2UpLCBmYWxzZSk7JykKIAogICAgICAgICBsaW5lcy5hcHBl
bmQoJyAgICB9OycpCiAgICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCkBAIC0xNjYsMTcg
KzE4NiwyNyBAQCBjbGFzcyBPYmpDQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVy
YXRvcihPYmpDR2VuZXJhdG9yKToKICAgICAgICAgZGVmIGluX3BhcmFtX2V4cHJlc3Npb24ocGFy
YW1fbmFtZSwgcGFyYW1ldGVyKToKICAgICAgICAgICAgIF90eXBlID0gcGFyYW1ldGVyLnR5cGUK
ICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEFsaWFzZWRUeXBlKToKLSAgICAgICAg
ICAgICAgICBfdHlwZSA9IF90eXBlLmFsaWFzZWRfdHlwZSAgIyBGYWxsIHRocm91Z2ggdG8gZW51
bSBvciBwcmltaXRpdmUuCisgICAgICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5hbGlhc2VkX3R5
cGUKICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKToKLSAgICAgICAg
ICAgICAgICBfdHlwZSA9IF90eXBlLnByaW1pdGl2ZV90eXBlICAjIEZhbGwgdGhyb3VnaCB0byBw
cmltaXRpdmUuCi0gICAgICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBQcmltaXRpdmVUeXBl
KToKLSAgICAgICAgICAgICAgICBpZiBfdHlwZS5yYXdfbmFtZSgpIGluIFsnYXJyYXknLCAnYW55
JywgJ29iamVjdCddOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gJyYlcycgJSBwYXJhbV9u
YW1lIGlmIG5vdCBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwgZWxzZSBwYXJhbV9uYW1lCi0gICAgICAg
ICAgICAgICAgcmV0dXJuICcqJXMnICUgcGFyYW1fbmFtZSBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9u
YWwgZWxzZSBwYXJhbV9uYW1lCi0gICAgICAgICAgICByZXR1cm4gJyYlcycgJSBwYXJhbV9uYW1l
IGlmIG5vdCBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwgZWxzZSBwYXJhbV9uYW1lCisgICAgICAgICAg
ICAgICAgX3R5cGUgPSBfdHlwZS5wcmltaXRpdmVfdHlwZQorCisgICAgICAgICAgICBpZiBfdHlw
ZS5pc19lbnVtKCk6CisgICAgICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgor
ICAgICAgICAgICAgICAgICAgICBwYXJhbV9uYW1lID0gJyonICsgcGFyYW1fbmFtZQorICAgICAg
ICAgICAgICAgIHJldHVybiAnUHJvdG9jb2w6OkhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVl
KCVzKScgJSBwYXJhbV9uYW1lCisgICAgICAgICAgICBpZiBDcHBHZW5lcmF0b3Iuc2hvdWxkX3Jl
bGVhc2VfYXJndW1lbnQoX3R5cGUsIHBhcmFtZXRlci5pc19vcHRpb25hbCk6CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHBhcmFtX25hbWUgKyAnLnJlbGVhc2VOb25OdWxsKCknCisgICAgICAgICAg
ICBpZiBDcHBHZW5lcmF0b3Iuc2hvdWxkX2RlcmVmZXJlbmNlX2FyZ3VtZW50KF90eXBlLCBwYXJh
bWV0ZXIuaXNfb3B0aW9uYWwpOgorICAgICAgICAgICAgICAgIHJldHVybiAnKicgKyBwYXJhbV9u
YW1lCisgICAgICAgICAgICBpZiBDcHBHZW5lcmF0b3Iuc2hvdWxkX21vdmVfYXJndW1lbnQoX3R5
cGUsIHBhcmFtZXRlci5pc19vcHRpb25hbCk6CisgICAgICAgICAgICAgICAgcmV0dXJuICdXVEZN
b3ZlKCVzKScgJSBwYXJhbV9uYW1lCisgICAgICAgICAgICByZXR1cm4gcGFyYW1fbmFtZQogCiAg
ICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gY29tbWFuZC5jYWxsX3BhcmFtZXRlcnM6Ci0gICAgICAg
ICAgICBpbl9wYXJhbV9uYW1lID0gJ2luXyVzJyAlIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZQor
ICAgICAgICAgICAgaW5fcGFyYW1fbmFtZSA9IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZQorICAg
ICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAgIGluX3Bh
cmFtX25hbWUgPSAnb3B0XycgKyBpbl9wYXJhbV9uYW1lCisgICAgICAgICAgICBpbl9wYXJhbV9u
YW1lID0gJ2luXycgKyBpbl9wYXJhbV9uYW1lCiAgICAgICAgICAgICBvYmpjX2luX3BhcmFtX25h
bWUgPSAnb18lcycgJSBpbl9wYXJhbV9uYW1lCiAgICAgICAgICAgICBvYmpjX3R5cGUgPSBzZWxm
Lm9iamNfdHlwZV9mb3JfcGFyYW0oZG9tYWluLCBjb21tYW5kLmNvbW1hbmRfbmFtZSwgcGFyYW1l
dGVyLCBGYWxzZSkKICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UocGFyYW1ldGVyLnR5cGUsIEVu
dW1UeXBlKToKQEAgLTE5NCwxMSArMjI0LDggQEAgY2xhc3MgT2JqQ0JhY2tlbmREaXNwYXRjaGVy
SW1wbGVtZW50YXRpb25HZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6CiAKICAgICAgICAgICAgIGVs
c2U6CiAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgJXM7JyAlIGpvaW5fdHlwZV9h
bmRfbmFtZShvYmpjX3R5cGUsIG9iamNfaW5fcGFyYW1fbmFtZSkpCi0gICAgICAgICAgICAgICAg
bGluZXMuYXBwZW5kKCcgICAgaWYgKCVzKScgJSBpbl9wYXJhbV9uYW1lKQorICAgICAgICAgICAg
ICAgIGxpbmVzLmFwcGVuZCgnICAgIGlmICghISVzKScgJSBpbl9wYXJhbV9uYW1lKQogICAgICAg
ICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICAlcyA9ICVzOycgJSAob2JqY19pbl9wYXJh
bV9uYW1lLCBpbXBvcnRfZXhwcmVzc2lvbikpCi0KLSAgICAgICAgaWYgbGluZXM6Ci0gICAgICAg
ICAgICBsaW5lcy5hcHBlbmQoJycpCiAgICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCiAK
ICAgICBkZWYgX2dlbmVyYXRlX2ludm9jYXRpb25fZm9yX2NvbW1hbmQoc2VsZiwgZG9tYWluLCBj
b21tYW5kKToKQEAgLTIwNiw3ICsyMzMsMTAgQEAgY2xhc3MgT2JqQ0JhY2tlbmREaXNwYXRjaGVy
SW1wbGVtZW50YXRpb25HZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6CiAgICAgICAgIHBhaXJzLmFw
cGVuZCgnV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjaycpCiAgICAgICAgIHBhaXJzLmFw
cGVuZCgnc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjaycpCiAgICAgICAgIGZvciBwYXJh
bWV0ZXIgaW4gY29tbWFuZC5jYWxsX3BhcmFtZXRlcnM6Ci0gICAgICAgICAgICBpbl9wYXJhbV9u
YW1lID0gJ2luXyVzJyAlIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZQorICAgICAgICAgICAgaW5f
cGFyYW1fbmFtZSA9IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZQorICAgICAgICAgICAgaWYgcGFy
YW1ldGVyLmlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAgIGluX3BhcmFtX25hbWUgPSAnb3B0
XycgKyBpbl9wYXJhbV9uYW1lCisgICAgICAgICAgICBpbl9wYXJhbV9uYW1lID0gJ2luXycgKyBp
bl9wYXJhbV9uYW1lCiAgICAgICAgICAgICBvYmpjX2luX3BhcmFtX2V4cHJlc3Npb24gPSAnb18l
cycgJSBpbl9wYXJhbV9uYW1lCiAgICAgICAgICAgICBpZiBub3QgcGFyYW1ldGVyLmlzX29wdGlv
bmFsOgogICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UocGFyYW1ldGVyLnR5cGUsIEVudW1U
eXBlKToKQEAgLTIxNyw2ICsyNDcsNiBAQCBjbGFzcyBPYmpDQmFja2VuZERpc3BhdGNoZXJJbXBs
ZW1lbnRhdGlvbkdlbmVyYXRvcihPYmpDR2VuZXJhdG9yKToKICAgICAgICAgICAgICAgICBpZiBp
c2luc3RhbmNlKHBhcmFtZXRlci50eXBlLCBFbnVtVHlwZSk6CiAgICAgICAgICAgICAgICAgICAg
IG9iamNfaW5fcGFyYW1fZXhwcmVzc2lvbiA9ICclcy52YWx1ZSgpJyAlIG9iamNfaW5fcGFyYW1f
ZXhwcmVzc2lvbgogCi0gICAgICAgICAgICAgICAgb3B0aW9uYWxfZXhwcmVzc2lvbiA9ICcoJXMg
PyAmJXMgOiBuaWwpJyAlIChpbl9wYXJhbV9uYW1lLCBvYmpjX2luX3BhcmFtX2V4cHJlc3Npb24p
CisgICAgICAgICAgICAgICAgb3B0aW9uYWxfZXhwcmVzc2lvbiA9ICcoISElcyA/ICYlcyA6IG5p
bCknICUgKGluX3BhcmFtX25hbWUsIG9iamNfaW5fcGFyYW1fZXhwcmVzc2lvbikKICAgICAgICAg
ICAgICAgICBwYWlycy5hcHBlbmQoJyVzOiVzJyAlIChwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUs
IG9wdGlvbmFsX2V4cHJlc3Npb24pKQogICAgICAgICByZXR1cm4gJyAgICBbbV9kZWxlZ2F0ZSAl
cyVzXTsnICUgKGNvbW1hbmQuY29tbWFuZF9uYW1lLCAnICcuam9pbihwYWlycykpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5l
cmF0ZV9vYmpjX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2Zy
b250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkKaW5kZXggZGRkYjI3YTg4YzJiYWZm
NWZjNmYyN2JjNDNhMDFlMzFlYTljZDQ5ZC4uOGQ0MTkzODEyM2Y5MDZmYmYwOTFlMmFiN2IzNmE2
MDczM2RiMzk1MiAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVu
dGF0aW9uLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9j
b2RlZ2VuL2dlbmVyYXRlX29iamNfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5w
eQpAQCAtMTI1LDExICsxMjUsMTEgQEAgY2xhc3MgT2JqQ0Zyb250ZW5kRGlzcGF0Y2hlckltcGxl
bWVudGF0aW9uR2VuZXJhdG9yKE9iakNHZW5lcmF0b3IpOgogICAgICAgICBpZiByZXF1aXJlZF9w
b2ludGVyX3BhcmFtZXRlcnMgb3Igb3B0aW9uYWxfcG9pbnRlcl9wYXJhbWV0ZXJzOgogICAgICAg
ICAgICAgbGluZXMuYXBwZW5kKCcnKQogCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIFJlZjxK
U09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsnKQotICAg
ICAgICBsaW5lcy5hcHBlbmQoJyAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3Ms
ICIlcy4lcyJfcyk7JyAlIChkb21haW4uZG9tYWluX25hbWUsIGV2ZW50LmV2ZW50X25hbWUpKQor
ICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNP
Tjo6T2JqZWN0OjpjcmVhdGUoKTsnKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBwcm90b2Nv
bF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICIlcy4lcyJfcyk7JyAlIChkb21h
aW4uZG9tYWluX25hbWUsIGV2ZW50LmV2ZW50X25hbWUpKQogICAgICAgICBpZiBldmVudC5ldmVu
dF9wYXJhbWV0ZXJzOgogICAgICAgICAgICAgbGluZXMuZXh0ZW5kKHNlbGYuX2dlbmVyYXRlX2V2
ZW50X291dF9wYXJhbWV0ZXJzKGRvbWFpbiwgZXZlbnQpKQotICAgICAgICBsaW5lcy5hcHBlbmQo
JyAgICByb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7JykKKyAg
ICAgICAgbGluZXMuYXBwZW5kKCcgICAgcm91dGVyLnNlbmRFdmVudChwcm90b2NvbF9qc29uTWVz
c2FnZS0+dG9KU09OU3RyaW5nKCkpOycpCiAgICAgICAgIGxpbmVzLmFwcGVuZCgnfScpCiAgICAg
ICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGV2ZW50LmNvbmRp
dGlvbiwgJ1xuJy5qb2luKGxpbmVzKSkKIApAQCAtMTQ1LDE2ICsxNDUsMTYgQEAgY2xhc3MgT2Jq
Q0Zyb250ZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKE9iakNHZW5lcmF0b3Ip
OgogCiAgICAgZGVmIF9nZW5lcmF0ZV9ldmVudF9vdXRfcGFyYW1ldGVycyhzZWxmLCBkb21haW4s
IGV2ZW50KToKICAgICAgICAgbGluZXMgPSBbXQotICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBS
ZWY8SlNPTjo6T2JqZWN0PiBwYXJhbXNPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOycp
CisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGF1dG8gcHJvdG9jb2xfcGFyYW1zT2JqZWN0ID0g
SlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsnKQogICAgICAgICBmb3IgcGFyYW1ldGVyIGluIGV2ZW50
LmV2ZW50X3BhcmFtZXRlcnM6CiAgICAgICAgICAgICBrZXllZF9zZXRfbWV0aG9kID0gQ3BwR2Vu
ZXJhdG9yLmNwcF9zZXR0ZXJfbWV0aG9kX2Zvcl90eXBlKHBhcmFtZXRlci50eXBlKQogICAgICAg
ICAgICAgdmFyX25hbWUgPSBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUKICAgICAgICAgICAgIHNh
ZmVfdmFyX25hbWUgPSAnKColcyknICUgdmFyX25hbWUgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFs
IGVsc2UgdmFyX25hbWUKICAgICAgICAgICAgIGV4cG9ydF9leHByZXNzaW9uID0gc2VsZi5vYmpj
X3Byb3RvY29sX2V4cG9ydF9leHByZXNzaW9uX2Zvcl92YXJpYWJsZShwYXJhbWV0ZXIudHlwZSwg
c2FmZV92YXJfbmFtZSkKICAgICAgICAgICAgIGlmIG5vdCBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6
Ci0gICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgcGFyYW1zT2JqZWN0LT4lcygiJXMi
X3MsICVzKTsnICUgKGtleWVkX3NldF9tZXRob2QsIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwg
ZXhwb3J0X2V4cHJlc3Npb24pKQorICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIHBy
b3RvY29sX3BhcmFtc09iamVjdC0+JXMoIiVzIl9zLCAlcyk7JyAlIChrZXllZF9zZXRfbWV0aG9k
LCBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUsIGV4cG9ydF9leHByZXNzaW9uKSkKICAgICAgICAg
ICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgaWYgKCVzKScgJSAo
cGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKSkKLSAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQo
JyAgICAgICAgcGFyYW1zT2JqZWN0LT4lcygiJXMiX3MsICVzKTsnICUgKGtleWVkX3NldF9tZXRo
b2QsIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwgZXhwb3J0X2V4cHJlc3Npb24pKQotICAgICAg
ICBsaW5lcy5hcHBlbmQoJyAgICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiX3MsIFdU
Rk1vdmUocGFyYW1zT2JqZWN0KSk7JykKKyAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAg
ICAgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT4lcygiJXMiX3MsICVzKTsnICUgKGtleWVkX3Nl
dF9tZXRob2QsIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwgZXhwb3J0X2V4cHJlc3Npb24pKQor
ICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0T2JqZWN0
KCJwYXJhbXMiX3MsIFdURk1vdmUocHJvdG9jb2xfcGFyYW1zT2JqZWN0KSk7JykKICAgICAgICAg
cmV0dXJuIGxpbmVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0b3IucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0b3IucHkKaW5kZXggOTRkMThkOWQ2NjE5NGQx
NTg1YzBlMTBjMDQ5NGJiNGIxYTEzYjk1NS4uMjlhMmRlYTcyNGYwYmJlY2ZlYmE2ZGI5MjA2MDgx
NzAxZTUxMGM1MSAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2NvZGVnZW4vZ2VuZXJhdG9yLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRvci5weQpAQCAtNzMsOSArNzMsNiBAQCBf
VFlQRVNfTkVFRElOR19SVU5USU1FX0NBU1RTID0gc2V0KFsKICAgICAiUnVudGltZS5Db2xsZWN0
aW9uRW50cnkiLAogICAgICJEZWJ1Z2dlci5GdW5jdGlvbkRldGFpbHMiLAogICAgICJEZWJ1Z2dl
ci5DYWxsRnJhbWUiLAotICAgICJDYW52YXMuVHJhY2VMb2ciLAotICAgICJDYW52YXMuUmVzb3Vy
Y2VJbmZvIiwKLSAgICAiQ2FudmFzLlJlc291cmNlU3RhdGUiLAogICAgICMgVGhpcyBzaG91bGQg
YmUgYSB0ZW1wb3JhcnkgaGFjay4gVGltZWxpbmVFdmVudCBzaG91bGQgYmUgY3JlYXRlZCB2aWEg
Z2VuZXJhdGVkIEMrKyBBUEkuCiAgICAgIlRpbWVsaW5lLlRpbWVsaW5lRXZlbnQiLAogICAgICMg
Rm9yIHRlc3RpbmcgcHVycG9zZXMgb25seS4KQEAgLTg1LDEwICs4MiwxOSBAQCBfVFlQRVNfTkVF
RElOR19SVU5USU1FX0NBU1RTID0gc2V0KFsKICMgRklYTUU6IFRoaXMgc2hvdWxkIGJlIGNvbnZl
cnRlZCBpbnRvIGEgcHJvcGVydHkgaW4gSlNPTi4KIF9UWVBFU19XSVRIX09QRU5fRklFTERTID0g
ewogICAgICJUaW1lbGluZS5UaW1lbGluZUV2ZW50IjogW10sCi0gICAgIyBJbnNwZWN0b3JTdHls
ZVNoZWV0IG5vdCBvbmx5IGNyZWF0ZXMgdGhpcyBwcm9wZXJ0eSBidXQgd2FudHMgdG8gcmVhZCBp
dCBhbmQgbW9kaWZ5IGl0LgotICAgICJDU1MuQ1NTUHJvcGVydHkiOiBbXSwKLSAgICAjIEluc3Bl
Y3Rvck5ldHdvcmtBZ2VudCBuZWVkcyB0byB1cGRhdGUgbWltZS10eXBlLgotICAgICJOZXR3b3Jr
LlJlc3BvbnNlIjogWyJtaW1lVHlwZSJdLAorICAgICJDU1MuQ1NTUHJvcGVydHkiOiBbInByaW9y
aXR5IiwgInBhcnNlZE9rIiwgInN0YXR1cyJdLAorICAgICJET00uSGlnaGxpZ2h0Q29uZmlnIjog
W10sCisgICAgIkRPTS5SR0JBQ29sb3IiOiBbXSwKKyAgICAiRE9NU3RvcmFnZS5TdG9yYWdlSWQi
OiBbXSwKKyAgICAiRGVidWdnZXIuQnJlYWtwb2ludEFjdGlvbiI6IFtdLAorICAgICJEZWJ1Z2dl
ci5CcmVha3BvaW50T3B0aW9ucyI6IFtdLAorICAgICJEZWJ1Z2dlci5Mb2NhdGlvbiI6IFtdLAor
ICAgICJJbmRleGVkREIuS2V5IjogW10sCisgICAgIkluZGV4ZWREQi5LZXlSYW5nZSI6IFtdLAor
ICAgICJOZXR3b3JrLlJlc3BvbnNlIjogWyJzdGF0dXMiLCAic3RhdHVzVGV4dCIsICJtaW1lVHlw
ZSIsICJzb3VyY2UiXSwKKyAgICAiUGFnZS5Db29raWUiOiBbXSwKKyAgICAiUnVudGltZS5DYWxs
QXJndW1lbnQiOiBbIm9iamVjdElkIl0sCisgICAgIlJ1bnRpbWUuVHlwZUxvY2F0aW9uIjogW10s
CiAgICAgIyBGb3IgdGVzdGluZyBwdXJwb3NlcyBvbmx5LgogICAgICJUZXN0Lk9wZW5QYXJhbWV0
ZXJzIjogWyJhbHBoYSJdLAogfQpAQCAtMTM0LDcgKzE0MCw3IEBAIGNsYXNzIEdlbmVyYXRvcjoK
ICAgICAgICAgICAgIGlmIHNlbGYubW9kZWwoKS5mcmFtZXdvcmsubmFtZSBub3QgaW4gYWxsb3dl
ZF9mcmFtZXdvcmtzOgogICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAKLSAgICAgICAgICAgIGlm
IGZyYW1ld29ya19uYW1lID09ICJXVEYiOgorICAgICAgICAgICAgaWYgZnJhbWV3b3JrX25hbWUg
PT0gIldURiIgb3IgZnJhbWV3b3JrX25hbWUgPT0gInN0ZCI6CiAgICAgICAgICAgICAgICAgaW5j
bHVkZXMuYWRkKCIjaW5jbHVkZSA8JXM+IiAlIGhlYWRlcl9wYXRoKQogICAgICAgICAgICAgZWxp
ZiBzZWxmLm1vZGVsKCkuZnJhbWV3b3JrLm5hbWUgIT0gZnJhbWV3b3JrX25hbWU6CiAgICAgICAg
ICAgICAgICAgaW5jbHVkZXMuYWRkKCIjaW5jbHVkZSA8JXMvJXM+IiAlIChmcmFtZXdvcmtfbmFt
ZSwgb3MucGF0aC5iYXNlbmFtZShoZWFkZXJfcGF0aCkpKQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vb2JqY19nZW5lcmF0b3IucHkg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9vYmpjX2dl
bmVyYXRvci5weQppbmRleCA3MzE1M2I5NTQ2NjcyYjk5MDRlN2Y1ZWI5MTg4NjVmYzhhNTE2OGI2
Li5hMmQzNzZkZjNiOTQzZGRjOTE2NzhiYmJhNWEyZWQzZjAyZTM3MGMwIDEwMDc1NQotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9vYmpjX2dlbmVy
YXRvci5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29k
ZWdlbi9vYmpjX2dlbmVyYXRvci5weQpAQCAtMjYzLDcgKzI2Myw3IEBAIGNsYXNzIE9iakNHZW5l
cmF0b3IoR2VuZXJhdG9yKToKICAgICAgICAgaWYgKGlzaW5zdGFuY2UoX3R5cGUsIEVudW1UeXBl
KSk6CiAgICAgICAgICAgICByZXR1cm4gT2JqQ0dlbmVyYXRvci5wcm90b2NvbF90eXBlX2Zvcl90
eXBlKF90eXBlLnByaW1pdGl2ZV90eXBlKQogICAgICAgICBpZiAoaXNpbnN0YW5jZShfdHlwZSwg
T2JqZWN0VHlwZSkpOgotICAgICAgICAgICAgcmV0dXJuICdJbnNwZWN0b3I6OlByb3RvY29sOjol
czo6JXMnICUgKF90eXBlLnR5cGVfZG9tYWluKCkuZG9tYWluX25hbWUsIF90eXBlLnJhd19uYW1l
KCkpCisgICAgICAgICAgICByZXR1cm4gJ1Byb3RvY29sOjolczo6JXMnICUgKF90eXBlLnR5cGVf
ZG9tYWluKCkuZG9tYWluX25hbWUsIF90eXBlLnJhd19uYW1lKCkpCiAgICAgICAgIGlmIChpc2lu
c3RhbmNlKF90eXBlLCBBcnJheVR5cGUpKToKICAgICAgICAgICAgIHN1Yl90eXBlID0gT2JqQ0dl
bmVyYXRvci5wcm90b2NvbF90eXBlX2Zvcl90eXBlKF90eXBlLmVsZW1lbnRfdHlwZSkKICAgICAg
ICAgICAgIHJldHVybiAnSlNPTjo6QXJyYXlPZjwlcz4nICUgc3ViX3R5cGUKQEAgLTM1Myw4ICsz
NTMsNiBAQCBjbGFzcyBPYmpDR2VuZXJhdG9yKEdlbmVyYXRvcik6CiAgICAgICAgIGlmIChpc2lu
c3RhbmNlKF90eXBlLCBQcmltaXRpdmVUeXBlKSk6CiAgICAgICAgICAgICByZXR1cm4gc2VsZi5v
YmpjX3R5cGVfZm9yX3Jhd19uYW1lKF90eXBlLnJhd19uYW1lKCkpCiAgICAgICAgIGlmIChpc2lu
c3RhbmNlKF90eXBlLCBFbnVtVHlwZSkpOgotICAgICAgICAgICAgaWYgX3R5cGUuaXNfYW5vbnlt
b3VzOgotICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLm9iamNfZW51bV9uYW1lX2Zvcl9hbm9u
eW1vdXNfZW51bV9wYXJhbWV0ZXIoZG9tYWluLCBldmVudF9vcl9jb21tYW5kX25hbWUsIHBhcmFt
ZXRlcikKICAgICAgICAgICAgIHJldHVybiBzZWxmLm9iamNfZW51bV9uYW1lX2Zvcl9ub25fYW5v
bnltb3VzX2VudW0oX3R5cGUpCiAgICAgICAgIGlmIChpc2luc3RhbmNlKF90eXBlLCBPYmplY3RU
eXBlKSk6CiAgICAgICAgICAgICByZXR1cm4gc2VsZi5vYmpjX25hbWVfZm9yX3R5cGUoX3R5cGUp
ICsgJyAqJwpAQCAtMzk4LDggKzM5Niw2IEBAIGNsYXNzIE9iakNHZW5lcmF0b3IoR2VuZXJhdG9y
KToKIAogICAgIGRlZiBvYmpjX3Byb3RvY29sX2ltcG9ydF9leHByZXNzaW9uX2Zvcl9wYXJhbWV0
ZXIoc2VsZiwgbmFtZSwgZG9tYWluLCBldmVudF9vcl9jb21tYW5kX25hbWUsIHBhcmFtZXRlcik6
CiAgICAgICAgIGlmIGlzaW5zdGFuY2UocGFyYW1ldGVyLnR5cGUsIEVudW1UeXBlKToKLSAgICAg
ICAgICAgIGlmIHBhcmFtZXRlci50eXBlLmlzX2Fub255bW91czoKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gJ2Zyb21Qcm90b2NvbFN0cmluZzwlcz4oJXMpJyAlIChzZWxmLm9iamNfZW51bV9uYW1l
X2Zvcl9hbm9ueW1vdXNfZW51bV9wYXJhbWV0ZXIoZG9tYWluLCBldmVudF9vcl9jb21tYW5kX25h
bWUsIHBhcmFtZXRlciksIG5hbWUpCiAgICAgICAgICAgICByZXR1cm4gJ2Zyb21Qcm90b2NvbFN0
cmluZzwlcz4oJXMpJyAlIChzZWxmLm9iamNfZW51bV9uYW1lX2Zvcl9ub25fYW5vbnltb3VzX2Vu
dW0ocGFyYW1ldGVyLnR5cGUpLCBuYW1lKQogICAgICAgICByZXR1cm4gc2VsZi5vYmpjX3Byb3Rv
Y29sX2ltcG9ydF9leHByZXNzaW9uX2Zvcl92YXJpYWJsZShwYXJhbWV0ZXIudHlwZSwgbmFtZSkK
IApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2Nv
ZGVnZW4vb2JqY19nZW5lcmF0b3JfdGVtcGxhdGVzLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vb2JqY19nZW5lcmF0b3JfdGVtcGxhdGVzLnB5Cmlu
ZGV4IDMyNmMyNjI1ZWEzNGYwNjZiMmQ0Y2M5ODQ2ZTE0YTIzNDFiODE4ODEuLmI1NmQxNDgxOTVj
NGI2NWZmZDI0M2E5OTEwYWFkMzYzMzNhMDg1MmQgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL29iamNfZ2VuZXJhdG9yX3RlbXBsYXRl
cy5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdl
bi9vYmpjX2dlbmVyYXRvcl90ZW1wbGF0ZXMucHkKQEAgLTExNCwxMyArMTE0LDEzIEBAIHByaXZh
dGU6CiAgICAgIiIidm9pZCBPYmpDSW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRj
aGVyOjoke2NvbW1hbmROYW1lfSgke3BhcmFtZXRlcnN9KQogewogICAgIGlmICghJHtyZXNwb25k
c1RvU2VsZWN0b3J9KSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3Rv
Y29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICIn
JHtkb21haW5OYW1lfS4ke2NvbW1hbmROYW1lfScgd2FzIG5vdCBmb3VuZCJfcyk7CisgICAgICAg
IGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocHJvdG9jb2xfY2FsbElk
LCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInJHtkb21haW5OYW1lfS4ke2Nv
bW1hbmROYW1lfScgd2FzIG5vdCBmb3VuZCJfcyk7CiAgICAgICAgIGJhY2tlbmREaXNwYXRjaGVy
KCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBp
ZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRj
aGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5y
ZXBvcnRQcm90b2NvbEVycm9yKHByb3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNl
cnZlckVycm9yLCBlcnJvcik7CiAgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5k
aW5nRXJyb3JzKCk7CiAgICAgfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2VudW0tdmFsdWVzLmpzb24gYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZW51bS12YWx1ZXMuanNvbgppbmRleCBj
ZGFkNjFkZjdjOWY5Yzc2ZTY5Mjg5N2MzZGZlMGIwODIzZjkwZTRkLi4yODE1NjFiOTQ4ZTE5YTQx
ZmEwYTJjODBlY2YyZTA5YWYzYThiYzQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZW51bS12YWx1ZXMuanNvbgorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZW51bS12YWx1ZXMuanNvbgpA
QCAtMyw5ICszLDkgQEAKICAgICAiZG9tYWluIjogIlR5cGVEb21haW4iLAogICAgICJ0eXBlcyI6
IFsKICAgICAgICAgewotICAgICAgICAgICAgImlkIjogIlR5cGVEb21haW5FbnVtIiwKKyAgICAg
ICAgICAgICJpZCI6ICJFbnVtIiwKICAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCi0gICAg
ICAgICAgICAiZW51bSI6IFsic2hhcmVkIiwgInJlZCIsICJncmVlbiIsICJibHVlIl0KKyAgICAg
ICAgICAgICJlbnVtIjogWyJzaGFyZWQiLCAiMSIsICIyIl0KICAgICAgICAgfQogICAgIF0KIH0s
CkBAIC0xMywxMCArMTMsMTggQEAKICAgICAiZG9tYWluIjogIkNvbW1hbmREb21haW4iLAogICAg
ICJjb21tYW5kcyI6IFsKICAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAiY29tbWFuZFdp
dGhFbnVtUmV0dXJuVmFsdWUiLAotICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbXSwKKyAgICAg
ICAgICAgICJuYW1lIjogImNvbW1hbmQiLAorICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCisg
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJlbnVtUmVxdWlyZWQiLCAiJHJlZiI6ICJUeXBlRG9t
YWluLkVudW0iIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJlbnVtT3B0aW9uYWwiLCAi
JHJlZiI6ICJUeXBlRG9tYWluLkVudW0iLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJwYXJhbWV0ZXJSZXF1aXJlZCIsICJ0eXBlIjogInN0cmluZyIsICJl
bnVtIjogWyJzaGFyZWQiLCAic2hhcmVkUmVxdWlyZWQiLCAiYmxhY2siXSB9LAorICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAicGFyYW1ldGVyT3B0aW9uYWwiLCAidHlwZSI6ICJzdHJpbmciLCAi
ZW51bSI6IFsic2hhcmVkIiwgInNoYXJlZE9wdGlvbmFsIiwgInJlZCJdLCAib3B0aW9uYWwiOiB0
cnVlIH0KKyAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAicmV0dXJucyI6IFsKLSAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogInJldHVyblZhbHVlIiwgInR5cGUiOiAic3RyaW5nIiwgImVudW0i
OiBbInNoYXJlZCIsICJjeWFuIiwgIm1hZ2VudGEiLCAieWVsbG93Il0gfQorICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAiZW51bVJlcXVpcmVkIiwgIiRyZWYiOiAiVHlwZURvbWFpbi5FbnVtIiB9
LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZW51bU9wdGlvbmFsIiwgIiRyZWYiOiAiVHlw
ZURvbWFpbi5FbnVtIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAicmV0dXJuUmVxdWlyZWQiLCAidHlwZSI6ICJzdHJpbmciLCAiZW51bSI6IFsic2hhcmVk
IiwgInNoYXJlZFJlcXVpcmVkIiwgIndoaXRlIl0gfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1l
IjogInJldHVybk9wdGlvbmFsIiwgInR5cGUiOiAic3RyaW5nIiwgImVudW0iOiBbInNoYXJlZCIs
ICJzaGFyZWRPcHRpb25hbCIsICJibHVlIl0sICJvcHRpb25hbCI6IHRydWUgfQogICAgICAgICAg
ICAgXQogICAgICAgICB9CiAgICAgXQpAQCAtMjUsOSArMzMsMTIgQEAKICAgICAiZG9tYWluIjog
IkV2ZW50RG9tYWluIiwKICAgICAiZXZlbnRzIjogWwogICAgICAgICB7Ci0gICAgICAgICAgICAi
bmFtZSI6ICJldmVudFdpdGhFbnVtUGFyYW1ldGVyIiwKKyAgICAgICAgICAgICJuYW1lIjogImV2
ZW50IiwKICAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWwotICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAicGFyYW1ldGVyIiwgInR5cGUiOiAic3RyaW5nIiwgImVudW0iOiBbInNoYXJlZCIsICJi
bGFjayIsICJ3aGl0ZSJdIH0KKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImVudW1SZXF1aXJl
ZCIsICIkcmVmIjogIlR5cGVEb21haW4uRW51bSIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1l
IjogImVudW1PcHRpb25hbCIsICIkcmVmIjogIlR5cGVEb21haW4uRW51bSIsICJvcHRpb25hbCI6
IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBhcmFtZXRlclJlcXVpcmVkIiwg
InR5cGUiOiAic3RyaW5nIiwgImVudW0iOiBbInNoYXJlZCIsICJzaGFyZWRSZXF1aXJlZCIsICJn
cmV5Il0gfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBhcmFtZXRlck9wdGlvbmFsIiwg
InR5cGUiOiAic3RyaW5nIiwgImVudW0iOiBbInNoYXJlZCIsICJzaGFyZWRPcHRpb25hbCIsICJn
cmVlbiJdLCAib3B0aW9uYWwiOiB0cnVlIH0KICAgICAgICAgICAgIF0KICAgICAgICAgfQogICAg
IF0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9leHBlY3RlZC9jb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2Fi
bGVUeXBlLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2V4cGVjdGVkL2NvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVi
dWdnYWJsZVR5cGUuanNvbi1yZXN1bHQKaW5kZXggZTljMThiZmFlNWIzMmM5NTdiYmVhZDRlMGVi
OWQwNmI2Mzk4YjA2My4uMzJkNGE4ZTgxMTQ2MDFlZmQ2NmVmOTg3OWJkY2E2Y2ZmZTcwYmM4OSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2V4cGVjdGVkL2NvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5
cGUuanNvbi1yZXN1bHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2V4cGVjdGVkL2NvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVi
dWdnYWJsZVR5cGUuanNvbi1yZXN1bHQKQEAgLTcwLDcgKzcwLDcgQEAgSW5zcGVjdG9yQmFja2Vu
ZC5hY3RpdmF0ZURvbWFpbigiRG9tYWluIiwgWyJwYWdlIl0pOwogCiAjaWYgRU5BQkxFKElOU1BF
Q1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBl
cy5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgogI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CiAKQEAgLTg4LDcgKzg4LDcgQEAgcHJp
dmF0ZToKIGNsYXNzIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyIDogcHVibGljIEFs
dGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5BbHRlcm5h
dGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlcigpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBDb21tYW5k
KGxvbmcgY2FsbElkKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIENvbW1hbmQobG9uZyBwcm90b2Nv
bF9jYWxsSWQpID0gMDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgpAQCAtMTMwLDEx
ICsxMzAsMTQgQEAgcHVibGljOgogCiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgog
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Cisj
aW5jbHVkZSA8dHVwbGU+CisjaW5jbHVkZSA8d3RmL0V4cGVjdGVkLmg+CisjaW5jbHVkZSA8d3Rm
L09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFj
ZSBJbnNwZWN0b3IgewogCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKwogCiAjaWYgRU5B
QkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiBjbGFzcyBBbHRlcm5hdGVEb21h
aW5CYWNrZW5kRGlzcGF0Y2hlcjsKQEAgLTE0Miw3ICsxNDUsNyBAQCBjbGFzcyBBbHRlcm5hdGVE
b21haW5CYWNrZW5kRGlzcGF0Y2hlcjsKIAogY2xhc3MgRG9tYWluQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyIHsKIHB1YmxpYzoKLSAgICB2aXJ0dWFsIHZvaWQgQ29tbWFuZChFcnJvclN0cmluZyYp
ID0gMDsKKyAgICB2aXJ0dWFsIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IENvbW1hbmQo
KSA9IDA7CiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB+RG9tYWluQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyKCk7CiB9OwpAQCAtMTUwLDkgKzE1Myw5IEBAIHByb3RlY3RlZDoKIGNsYXNzIERvbWFp
bkJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIFN1cHBsZW1lbnRhbEJhY2tlbmREaXNw
YXRjaGVyIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPERvbWFpbkJhY2tlbmREaXNwYXRjaGVy
PiBjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImLCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXIqKTsKLSAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1l
dGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKSBmaW5hbDsKKyAgICB2b2lkIGRpc3Bh
dGNoKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBjb25zdCBTdHJpbmcmIHByb3RvY29sX21ldGhvZCwg
UmVmPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9tZXNzYWdlKSBmaW5hbDsKIHByaXZhdGU6Ci0g
ICAgdm9pZCBDb21tYW5kKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBh
cmFtZXRlcnMpOworICAgIHZvaWQgQ29tbWFuZChsb25nIHByb3RvY2xfY2FsbElkLCBSZWZQdHI8
SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX3BhcmFtZXRlcnMpOwogI2lmIEVOQUJMRShJTlNQRUNU
T1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogcHVibGljOgogICAgIHZvaWQgc2V0QWx0ZXJuYXRl
RGlzcGF0Y2hlcihBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlciogYWx0ZXJuYXRlRGlz
cGF0Y2hlcikgeyBtX2FsdGVybmF0ZURpc3BhdGNoZXIgPSBhbHRlcm5hdGVEaXNwYXRjaGVyOyB9
CkBAIC0yMDEsOSArMjA0LDcgQEAgcHJpdmF0ZToKICNpbmNsdWRlICJUZXN0QmFja2VuZERpc3Bh
dGNoZXJzLmgiCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJv
dXRlci5oPgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVy
RGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiAjaWYgRU5BQkxF
KElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAjaW5jbHVkZSAiVGVzdEFsdGVybmF0
ZUJhY2tlbmREaXNwYXRjaGVycy5oIgpAQCAtMjI1LDM4ICsyMjYsMzggQEAgRG9tYWluQmFja2Vu
ZERpc3BhdGNoZXI6OkRvbWFpbkJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiBi
YWNrZW5kRGlzcGEKICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJG
b3JEb21haW4oIkRvbWFpbiJfcywgdGhpcyk7CiB9CiAKLXZvaWQgRG9tYWluQmFja2VuZERpc3Bh
dGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVm
PEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKQordm9pZCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6
ZGlzcGF0Y2gobG9uZyBwcm90b2NvbF9jYWxsSWQsIGNvbnN0IFN0cmluZyYgcHJvdG9jb2xfbWV0
aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX21lc3NhZ2UpCiB7CiAgICAgUmVmPERv
bWFpbkJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKIAotICAgIFJlZlB0cjxKU09O
OjpPYmplY3Q+IHBhcmFtZXRlcnM7Ci0gICAgbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3Ms
IHBhcmFtZXRlcnMpOworICAgIGF1dG8gcHJvdG9jb2xfcGFyYW1ldGVycyA9IHByb3RvY29sX21l
c3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9zKTsKIAotICAgIGlmIChtZXRob2QgPT0gIkNvbW1h
bmQiKSB7Ci0gICAgICAgIENvbW1hbmQocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsK
KyAgICBpZiAocHJvdG9jb2xfbWV0aG9kID09ICJDb21tYW5kIikgeworICAgICAgICBDb21tYW5k
KHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9wYXJhbWV0ZXJzKSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2Nv
bEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEb21haW4uIiArIG1l
dGhvZCArICInIHdhcyBub3QgZm91bmQiKTsKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBv
cnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEb21h
aW4uIiArIHByb3RvY29sX21ldGhvZCArICInIHdhcyBub3QgZm91bmQiKTsKIH0KIAotdm9pZCBE
b21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Q29tbWFuZChsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpT
T046Ok9iamVjdD4mJikKK3ZvaWQgRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkNvbW1hbmQobG9u
ZyBwcm90b2NvbF9jYWxsSWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCiB7CiAjaWYgRU5BQkxF
KElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAgICAgaWYgKG1fYWx0ZXJuYXRlRGlz
cGF0Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPkNvbW1hbmQocmVxdWVz
dElkKTsKKyAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5Db21tYW5kKHByb3RvY29sX2Nh
bGxJZCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RP
Ul9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAKLSAgICBFcnJvclN0cmluZyBlcnJvcjsKLSAgICBS
ZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIG1f
YWdlbnQtPkNvbW1hbmQoZXJyb3IpOworICAgIGF1dG8gcmVzdWx0ID0gbV9hZ2VudC0+Q29tbWFu
ZCgpOworICAgIGlmICghcmVzdWx0KSB7CisgICAgICAgIEFTU0VSVCghcmVzdWx0LmVycm9yKCku
aXNFbXB0eSgpKTsKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xF
cnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIHJlc3VsdC5lcnJvcigpKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCi0gICAgICAg
IG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVz
dWx0KSwgZmFsc2UpOwotICAgIGVsc2UKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVw
b3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUo
ZXJyb3IpKTsKKyAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0Ojpj
cmVhdGUoKTsKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocHJvdG9jb2xf
Y2FsbElkLCBXVEZNb3ZlKHByb3RvY29sX2pzb25NZXNzYWdlKSwgZmFsc2UpOwogfQogCiB9IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKQEAgLTI5Nyw2ICsyOTgsNyBAQCB2b2lkIERvbWFpbkJhY2tl
bmREaXNwYXRjaGVyOjpDb21tYW5kKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0
PiYmKQogCiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPHd0Zi9K
U09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewpAQCAtMzQ5LDE2ICszNTEs
MTUgQEAgcHJpdmF0ZToKICNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgogCiAj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNs
dWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCiB2b2lk
IERvbWFpbkZyb250ZW5kRGlzcGF0Y2hlcjo6RXZlbnQoKQogewotICAgIFJlZjxKU09OOjpPYmpl
Y3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBqc29uTWVzc2Fn
ZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJEb21haW4uRXZlbnQiX3MpOworICAgIGF1dG8gcHJv
dG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIHByb3RvY29s
X2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRvbWFpbi5FdmVudCJfcyk7CiAK
LSAgICBtX2Zyb250ZW5kUm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5n
KCkpOworICAgIG1fZnJvbnRlbmRSb3V0ZXIuc2VuZEV2ZW50KHByb3RvY29sX2pzb25NZXNzYWdl
LT50b0pTT05TdHJpbmcoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgpAQCAtMzk4
LDcgKzM5OSw5IEBAIHZvaWQgRG9tYWluRnJvbnRlbmREaXNwYXRjaGVyOjpFdmVudCgpCiAjcHJh
Z21hIG9uY2UKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlw
ZXMuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9KU09OVmFs
dWVzLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC00NTIsOCArNDU1LDcgQEAg
bmFtZXNwYWNlIFByb3RvY29sIHsKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJUZXN0
UHJvdG9jb2xPYmplY3RzLmgiCiAKLSNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KIAogbmFt
ZXNwYWNlIEluc3BlY3RvciB7CiAKQEAgLTUwOSw3ICs1MTEsNyBAQCBjbGFzcyBPYmpDSW5zcGVj
dG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgQWx0ZXJuYXRlRG9tYWlu
QmFja2VuZAogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIE9iakNJ
bnNwZWN0b3JEb21haW5CYWNrZW5kRGlzcGF0Y2hlcihpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21h
aW5IYW5kbGVyPiBoYW5kbGVyKSB7IG1fZGVsZWdhdGUgPSBoYW5kbGVyOyB9Ci0gICAgdm9pZCBD
b21tYW5kKGxvbmcgcmVxdWVzdElkKSBmaW5hbDsKKyAgICB2b2lkIENvbW1hbmQobG9uZyBwcm90
b2NvbF9jYWxsSWQpIGZpbmFsOwogcHJpdmF0ZToKICAgICBSZXRhaW5QdHI8aWQ8VGVzdFByb3Rv
Y29sRG9tYWluRG9tYWluSGFuZGxlcj4+IG1fZGVsZWdhdGU7CiB9OwpAQCAtNTU3LDIxICs1NTks
MjIgQEAgcHJpdmF0ZToKIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKLXZvaWQgT2JqQ0luc3Bl
Y3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpDb21tYW5kKGxvbmcgcmVxdWVzdElkKQordm9p
ZCBPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkNvbW1hbmQobG9uZyBwcm90
b2NvbF9jYWxsSWQpCiB7CiAgICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6
QHNlbGVjdG9yKENvbW1hbmRXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6KV0pIHsK
LSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0
SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEb21haW4uQ29tbWFuZCcg
d2FzIG5vdCBmb3VuZCJfcyk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFBy
b3RvY29sRXJyb3IocHJvdG9jb2xfY2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90
Rm91bmQsICInRG9tYWluLkNvbW1hbmQnIHdhcyBub3QgZm91bmQiX3MpOwogICAgICAgICBiYWNr
ZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCiAgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7Ci0gICAg
ICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBC
YWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxsSWQsIEJhY2tlbmRE
aXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwogICAgICAgICBiYWNrZW5kRGlzcGF0Y2hl
cigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgIH07CiAKICAgICBpZCBzdWNjZXNzQ2FsbGJh
Y2sgPSBeewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVz
dElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7CisgICAgICAgIGF1dG8gcHJvdG9j
b2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBiYWNrZW5k
RGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocHJvdG9jb2xfY2FsbElkLCBXVEZNb3ZlKHByb3Rv
Y29sX2pzb25NZXNzYWdlKSwgZmFsc2UpOwogICAgIH07CiAKICAgICBbbV9kZWxlZ2F0ZSBDb21t
YW5kV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vz
c0NhbGxiYWNrXTsKQEAgLTc3Myw5ICs3NzYsOSBAQCB1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9y
OwogewogICAgIGNvbnN0IEZyb250ZW5kUm91dGVyJiByb3V0ZXIgPSBfY29udHJvbGxlci0+ZnJv
bnRlbmRSb3V0ZXIoKTsKIAotICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNP
Tjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2Qi
X3MsICJEb21haW4uRXZlbnQiX3MpOwotICAgIHJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2Ut
PnRvSlNPTlN0cmluZygpKTsKKyAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6
T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJt
ZXRob2QiX3MsICJEb21haW4uRXZlbnQiX3MpOworICAgIHJvdXRlci5zZW5kRXZlbnQocHJvdG9j
b2xfanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKIH0KIAogQGVuZApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2Nv
bW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2NvbW1hbmRzLXdpdGgtYXN5
bmMtYXR0cmlidXRlLmpzb24tcmVzdWx0CmluZGV4IGQxYzY5YjAzMWNkYjQ3MWQxOGEyZTQ5Nzhm
MjEyN2IwZWNkNDdjNTIuLjRjZTZmYzNkMjEzNmE0ZWI0YWIyMjQ2NTFhOWJmYjE2NWU0NTMwZjYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9leHBlY3RlZC9jb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uLXJlc3VsdAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQv
Y29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbi1yZXN1bHQKQEAgLTczLDcgKzczLDcg
QEAgSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiRGF0YWJhc2UiLCBudWxsKTsKIAog
I2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogCi0jaW5jbHVkZSAi
VGVzdFByb3RvY29sVHlwZXMuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KICNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgogCkBAIC05
MSwxMCArOTEsMTAgQEAgcHJpdmF0ZToKIGNsYXNzIEFsdGVybmF0ZURhdGFiYXNlQmFja2VuZERp
c3BhdGNoZXIgOiBwdWJsaWMgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewogcHVibGljOgog
ICAgIHZpcnR1YWwgfkFsdGVybmF0ZURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIoKSB7IH0KLSAg
ICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIGNh
bGxJZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnkpID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyBj
YWxsSWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5KSA9IDA7Ci0g
ICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVTUUxTeW5jKGxvbmcgY2FsbElkLCBpbnQgaW5fZGF0YWJh
c2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBleGVj
dXRlU1FMQXN5bmMobG9uZyBjYWxsSWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcm
IGluX3F1ZXJ5KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxS
ZXR1cm5WYWx1ZXMobG9uZyBwcm90b2NvbF9jYWxsSWQsIGludCBkYXRhYmFzZUlkLCBjb25zdCBT
dHJpbmcmIHF1ZXJ5KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVTUUxBc3luY09wdGlv
bmFsUmV0dXJuVmFsdWVzKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBpbnQgZGF0YWJhc2VJZCwgY29u
c3QgU3RyaW5nJiBxdWVyeSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU1FMU3luYyhs
b25nIHByb3RvY29sX2NhbGxJZCwgaW50IGRhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgcXVlcnkp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNRTEFzeW5jKGxvbmcgcHJvdG9jb2xfY2Fs
bElkLCBpbnQgZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBxdWVyeSkgPSAwOwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgSW5zcGVjdG9yCkBAIC0xMzYsMTEgKzEzNiwxNCBAQCBwdWJsaWM6CiAKICNp
bmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx0dXBsZT4KKyNpbmNsdWRl
IDx3dGYvRXhwZWN0ZWQuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKLXR5cGVkZWYg
U3RyaW5nIEVycm9yU3RyaW5nOworCiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9E
SVNQQVRDSEVSUykKIGNsYXNzIEFsdGVybmF0ZURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI7CkBA
IC0xNDgsMjcgKzE1MSwyMCBAQCBjbGFzcyBBbHRlcm5hdGVEYXRhYmFzZUJhY2tlbmREaXNwYXRj
aGVyOwogCiBjbGFzcyBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7CiBwdWJsaWM6
Ci0gICAgLy8gTmFtZWQgYWZ0ZXIgcGFyYW1ldGVyICdwcmludENvbG9yJyB3aGlsZSBnZW5lcmF0
aW5nIGNvbW1hbmQvZXZlbnQgZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcy4KLSAg
ICBlbnVtIGNsYXNzIFByaW50Q29sb3IgewotICAgICAgICBDeWFuID0gMywKLSAgICAgICAgTWFn
ZW50YSA9IDQsCi0gICAgICAgIFllbGxvdyA9IDUsCi0gICAgICAgIEJsYWNrID0gNiwKLSAgICB9
OyAvLyBlbnVtIGNsYXNzIFByaW50Q29sb3IKLSAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNRTFN5
bmNPcHRpb25hbFJldHVyblZhbHVlcyhFcnJvclN0cmluZyYsIGludCBpbl9kYXRhYmFzZUlkLCBj
b25zdCBTdHJpbmcmIGluX3F1ZXJ5LCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiYgb3B0
X291dF9jb2x1bW5OYW1lcywgT3B0aW9uYWw8U3RyaW5nPiYgb3B0X291dF9ub3RlcywgT3B0aW9u
YWw8ZG91YmxlPiYgb3B0X291dF90aW1lc3RhbXAsIE9wdGlvbmFsPEpTT046Ok9iamVjdD4mIG9w
dF9vdXRfdmFsdWVzLCBPcHRpb25hbDxKU09OOjpWYWx1ZT4mIG9wdF9vdXRfcGF5bG9hZCwgT3B0
aW9uYWw8aW50PiYgb3B0X291dF9kYXRhYmFzZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6RGF0YWJhc2U6OkVycm9yPiYgb3B0X291dF9zcWxFcnJvciwgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMqIG9wdF9vdXRfc2NyZWVuQ29sb3IsIFJlZlB0cjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiYgb3B0X291dF9hbHRlcm5h
dGVDb2xvcnMsIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQcmludENvbG9yKiBv
cHRfb3V0X3ByaW50Q29sb3IpID0gMDsKKyAgICB2aXJ0dWFsIFByb3RvY29sOjpFcnJvclN0cmlu
Z09yPHN0ZDo6dHVwbGU8UmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4gLyogb3B0X2NvbHVt
bk5hbWVzICovLCBTdHJpbmcgLyogb3B0X25vdGVzICovLCBPcHRpb25hbDxkb3VibGU+IC8qIG9w
dF90aW1lc3RhbXAgKi8sIFJlZlB0cjxKU09OOjpPYmplY3Q+IC8qIG9wdF92YWx1ZXMgKi8sIFJl
ZlB0cjxKU09OOjpWYWx1ZT4gLyogb3B0X3BheWxvYWQgKi8sIE9wdGlvbmFsPGludD4gLyogb3B0
X2RhdGFiYXNlSWQgKi8sIFJlZlB0cjxQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiAvKiBvcHRf
c3FsRXJyb3IgKi8sIE9wdGlvbmFsPFByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4g
Lyogb3B0X3NjcmVlbkNvbG9yICovLCBSZWZQdHI8UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxp
c3Q+IC8qIG9wdF9hbHRlcm5hdGVDb2xvcnMgKi8sIFN0cmluZyAvKiBvcHRfcHJpbnRDb2xvciAq
Lz4+IGV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMoaW50IGRhdGFiYXNlSWQsIGNv
bnN0IFN0cmluZyYgcXVlcnkpID0gMDsKICAgICBjbGFzcyBFeGVjdXRlU1FMQXN5bmNPcHRpb25h
bFJldHVyblZhbHVlc0NhbGxiYWNrIDogcHVibGljIEJhY2tlbmREaXNwYXRjaGVyOjpDYWxsYmFj
a0Jhc2UgewogICAgIHB1YmxpYzoKICAgICAgICAgRXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1
cm5WYWx1ZXNDYWxsYmFjayhSZWY8QmFja2VuZERpc3BhdGNoZXI+JiYsIGludCBpZCk7Ci0gICAg
ICAgIHZvaWQgc2VuZFN1Y2Nlc3MoUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4mJiBjb2x1
bW5OYW1lcywgT3B0aW9uYWw8U3RyaW5nPiYgbm90ZXMsIE9wdGlvbmFsPGRvdWJsZT4mIHRpbWVz
dGFtcCwgT3B0aW9uYWw8SlNPTjo6T2JqZWN0PiYgdmFsdWVzLCBPcHRpb25hbDxKU09OOjpWYWx1
ZT4mIHBheWxvYWQsIE9wdGlvbmFsPGludD4mIGRhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+JiYgc3FsRXJyb3IsIE9wdGlvbmFsPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPiBzY3JlZW5Db2xvciwgUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+JiYgYWx0ZXJuYXRlQ29s
b3JzLCBPcHRpb25hbDxEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UHJpbnRDb2xv
cj4gcHJpbnRDb2xvcik7CisgICAgICAgIHZvaWQgc2VuZFN1Y2Nlc3MoUmVmUHRyPEpTT046OkFy
cmF5T2Y8U3RyaW5nPj4mJiBvcHRfY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgb3B0X25vdGVz
LCBPcHRpb25hbDxkb3VibGU+JiYgb3B0X3RpbWVzdGFtcCwgUmVmUHRyPEpTT046Ok9iamVjdD4m
JiBvcHRfdmFsdWVzLCBSZWZQdHI8SlNPTjo6VmFsdWU+JiYgb3B0X3BheWxvYWQsIE9wdGlvbmFs
PGludD4mJiBvcHRfZGF0YWJhc2VJZCwgUmVmUHRyPFByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+
JiYgb3B0X3NxbEVycm9yLCBPcHRpb25hbDxQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xv
cnM+JiYgb3B0X3NjcmVlbkNvbG9yLCBSZWZQdHI8UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxp
c3Q+JiYgb3B0X2FsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nJiBvcHRfcHJpbnRDb2xvcik7
CiAgICAgfTsKLSAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5W
YWx1ZXMoaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnksIFJlZjxFeGVj
dXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc0NhbGxiYWNrPiYmIGNhbGxiYWNrKSA9IDA7
Ci0gICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVTUUxTeW5jKEVycm9yU3RyaW5nJiwgaW50IGluX2Rh
dGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnksIFJlZlB0cjxKU09OOjpBcnJheU9mPFN0
cmluZz4+JiBvdXRfY29sdW1uTmFtZXMsIFN0cmluZyogb3V0X25vdGVzLCBkb3VibGUqIG91dF90
aW1lc3RhbXAsIEpTT046Ok9iamVjdCogb3V0X3ZhbHVlcywgSlNPTjo6VmFsdWUqIG91dF9wYXls
b2FkLCBpbnQqIG91dF9kYXRhYmFzZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0
YWJhc2U6OkVycm9yPiYgb3V0X3NxbEVycm9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
RGF0YWJhc2U6OkNvbG9yTGlzdD4mIG91dF9hbHRlcm5hdGVDb2xvcnMsIEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzKiBvdXRfc2NyZWVuQ29sb3IsIERhdGFiYXNl
QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQcmludENvbG9yKiBvdXRfcHJpbnRDb2xvcikgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhp
bnQgZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBxdWVyeSwgUmVmPEV4ZWN1dGVTUUxBc3luY09w
dGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJhY2s+JiYpID0gMDsKKyAgICB2aXJ0dWFsIFByb3RvY29s
OjpFcnJvclN0cmluZ09yPHN0ZDo6dHVwbGU8UmVmPEpTT046OkFycmF5T2Y8U3RyaW5nPj4gLyog
Y29sdW1uTmFtZXMgKi8sIFN0cmluZyAvKiBub3RlcyAqLywgZG91YmxlIC8qIHRpbWVzdGFtcCAq
LywgUmVmPEpTT046Ok9iamVjdD4gLyogdmFsdWVzICovLCBSZWY8SlNPTjo6VmFsdWU+IC8qIHBh
eWxvYWQgKi8sIGludCAvKiBkYXRhYmFzZUlkICovLCBSZWY8UHJvdG9jb2w6OkRhdGFiYXNlOjpF
cnJvcj4gLyogc3FsRXJyb3IgKi8sIFJlZjxQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4g
LyogYWx0ZXJuYXRlQ29sb3JzICovLCBQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMg
Lyogc2NyZWVuQ29sb3IgKi8sIFN0cmluZyAvKiBwcmludENvbG9yICovPj4gZXhlY3V0ZVNRTFN5
bmMoaW50IGRhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgcXVlcnkpID0gMDsKICAgICBjbGFzcyBF
eGVjdXRlU1FMQXN5bmNDYWxsYmFjayA6IHB1YmxpYyBCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJh
Y2tCYXNlIHsKICAgICBwdWJsaWM6CiAgICAgICAgIEV4ZWN1dGVTUUxBc3luY0NhbGxiYWNrKFJl
ZjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiwgaW50IGlkKTsKLSAgICAgICAgdm9pZCBzZW5kU3VjY2Vz
cyhSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiYmIGNvbHVtbk5hbWVzLCBjb25zdCBTdHJp
bmcmIG5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBKU09OOjpPYmplY3QgdmFsdWVzLCBKU09OOjpW
YWx1ZSBwYXlsb2FkLCBpbnQgZGF0YWJhc2VJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRhdGFiYXNlOjpFcnJvcj4mJiBzcWxFcnJvciwgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJh
c2U6OlByaW1hcnlDb2xvcnMgc2NyZWVuQ29sb3IsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29s
OjpEYXRhYmFzZTo6Q29sb3JMaXN0PiYmIGFsdGVybmF0ZUNvbG9ycywgRGF0YWJhc2VCYWNrZW5k
RGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3IgcHJpbnRDb2xvcik7CisgICAgICAgIHZvaWQg
c2VuZFN1Y2Nlc3MoUmVmPEpTT046OkFycmF5T2Y8U3RyaW5nPj4mJiBjb2x1bW5OYW1lcywgY29u
c3QgU3RyaW5nJiBub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgUmVmPEpTT046Ok9iamVjdD4mJiB2
YWx1ZXMsIFJlZjxKU09OOjpWYWx1ZT4mJiBwYXlsb2FkLCBpbnQgZGF0YWJhc2VJZCwgUmVmPFBy
b3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+JiYgc3FsRXJyb3IsIFByb3RvY29sOjpEYXRhYmFzZTo6
UHJpbWFyeUNvbG9ycyBzY3JlZW5Db2xvciwgUmVmPFByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JM
aXN0PiYmIGFsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nJiBwcmludENvbG9yKTsKICAgICB9
OwotICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU1FMQXN5bmMoaW50IGluX2RhdGFiYXNlSWQsIGNv
bnN0IFN0cmluZyYgaW5fcXVlcnksIFJlZjxFeGVjdXRlU1FMQXN5bmNDYWxsYmFjaz4mJiBjYWxs
YmFjaykgPSAwOworICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU1FMQXN5bmMoaW50IGRhdGFiYXNl
SWQsIGNvbnN0IFN0cmluZyYgcXVlcnksIFJlZjxFeGVjdXRlU1FMQXN5bmNDYWxsYmFjaz4mJikg
PSAwOwogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgfkRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyKCk7CiB9OwpAQCAtMTc2LDEyICsxNzIsMTIgQEAgcHJvdGVjdGVkOgogY2xhc3MgRGF0
YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5k
RGlzcGF0Y2hlciB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVyPiBjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImLCBEYXRhYmFzZUJhY2tlbmREaXNwYXRj
aGVySGFuZGxlciopOwotICAgIHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0
cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpIGZpbmFsOworICAgIHZv
aWQgZGlzcGF0Y2gobG9uZyBwcm90b2NvbF9jYWxsSWQsIGNvbnN0IFN0cmluZyYgcHJvdG9jb2xf
bWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX21lc3NhZ2UpIGZpbmFsOwogcHJp
dmF0ZToKLSAgICB2b2lkIGV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyBy
ZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7Ci0gICAgdm9pZCBl
eGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIHJlcXVlc3RJZCwgUmVmUHRy
PEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKLSAgICB2b2lkIGV4ZWN1dGVTUUxTeW5jKGxv
bmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOwotICAgIHZv
aWQgZXhlY3V0ZVNRTEFzeW5jKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYm
IHBhcmFtZXRlcnMpOworICAgIHZvaWQgZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVl
cyhsb25nIHByb3RvY2xfY2FsbElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX3Bh
cmFtZXRlcnMpOworICAgIHZvaWQgZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMo
bG9uZyBwcm90b2NsX2NhbGxJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9wYXJh
bWV0ZXJzKTsKKyAgICB2b2lkIGV4ZWN1dGVTUUxTeW5jKGxvbmcgcHJvdG9jbF9jYWxsSWQsIFJl
ZlB0cjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfcGFyYW1ldGVycyk7CisgICAgdm9pZCBleGVj
dXRlU1FMQXN5bmMobG9uZyBwcm90b2NsX2NhbGxJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBw
cm90b2NvbF9wYXJhbWV0ZXJzKTsKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQ
QVRDSEVSUykKIHB1YmxpYzoKICAgICB2b2lkIHNldEFsdGVybmF0ZURpc3BhdGNoZXIoQWx0ZXJu
YXRlRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciogYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeyBtX2Fs
dGVybmF0ZURpc3BhdGNoZXIgPSBhbHRlcm5hdGVEaXNwYXRjaGVyOyB9CkBAIC0yMzAsOSArMjI2
LDcgQEAgcHJpdmF0ZToKICNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCiAKICNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1
ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0j
aW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRF
Uk5BVEVfRElTUEFUQ0hFUlMpCiAjaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRj
aGVycy5oIgpAQCAtMjU0LDM3ICsyNDgsMzYgQEAgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6
RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZEQKICAg
ICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4oIkRhdGFi
YXNlIl9zLCB0aGlzKTsKIH0KIAotdm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpkaXNw
YXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmpl
Y3Q+JiYgbWVzc2FnZSkKK3ZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2go
bG9uZyBwcm90b2NvbF9jYWxsSWQsIGNvbnN0IFN0cmluZyYgcHJvdG9jb2xfbWV0aG9kLCBSZWY8
SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX21lc3NhZ2UpCiB7CiAgICAgUmVmPERhdGFiYXNlQmFj
a2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOwogCi0gICAgUmVmUHRyPEpTT046Ok9iamVj
dD4gcGFyYW1ldGVyczsKLSAgICBtZXNzYWdlLT5nZXRPYmplY3QoInBhcmFtcyJfcywgcGFyYW1l
dGVycyk7CisgICAgYXV0byBwcm90b2NvbF9wYXJhbWV0ZXJzID0gcHJvdG9jb2xfbWVzc2FnZS0+
Z2V0T2JqZWN0KCJwYXJhbXMiX3MpOwogCi0gICAgaWYgKG1ldGhvZCA9PSAiZXhlY3V0ZVNRTFN5
bmNPcHRpb25hbFJldHVyblZhbHVlcyIpIHsKLSAgICAgICAgZXhlY3V0ZVNRTFN5bmNPcHRpb25h
bFJldHVyblZhbHVlcyhyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykpOworICAgIGlmIChw
cm90b2NvbF9tZXRob2QgPT0gImV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMiKSB7
CisgICAgICAgIGV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMocHJvdG9jb2xfY2Fs
bElkLCBXVEZNb3ZlKHByb3RvY29sX3BhcmFtZXRlcnMpKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KLSAgICBpZiAobWV0aG9kID09ICJleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVl
cyIpIHsKLSAgICAgICAgZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMocmVxdWVz
dElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKKyAgICBpZiAocHJvdG9jb2xfbWV0aG9kID09ICJl
eGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyIpIHsKKyAgICAgICAgZXhlY3V0ZVNR
TEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMocHJvdG9jb2xfY2FsbElkLCBXVEZNb3ZlKHByb3Rv
Y29sX3BhcmFtZXRlcnMpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAobWV0aG9k
ID09ICJleGVjdXRlU1FMU3luYyIpIHsKLSAgICAgICAgZXhlY3V0ZVNRTFN5bmMocmVxdWVzdElk
LCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKKyAgICBpZiAocHJvdG9jb2xfbWV0aG9kID09ICJleGVj
dXRlU1FMU3luYyIpIHsKKyAgICAgICAgZXhlY3V0ZVNRTFN5bmMocHJvdG9jb2xfY2FsbElkLCBX
VEZNb3ZlKHByb3RvY29sX3BhcmFtZXRlcnMpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAg
ICBpZiAobWV0aG9kID09ICJleGVjdXRlU1FMQXN5bmMiKSB7Ci0gICAgICAgIGV4ZWN1dGVTUUxB
c3luYyhyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykpOworICAgIGlmIChwcm90b2NvbF9t
ZXRob2QgPT0gImV4ZWN1dGVTUUxBc3luYyIpIHsKKyAgICAgICAgZXhlY3V0ZVNRTEFzeW5jKHBy
b3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9wYXJhbWV0ZXJzKSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVy
cm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEYXRhYmFzZS4iICsgbWV0
aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9y
dFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RhdGFi
YXNlLiIgKyBwcm90b2NvbF9tZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7CiB9CiAKLXZvaWQg
RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZh
bHVlcyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKQor
dm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0
dXJuVmFsdWVzKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBy
b3RvY29sX3BhcmFtZXRlcnMpCiB7Ci0gICAgaW50IGluX2RhdGFiYXNlSWQgPSBtX2JhY2tlbmRE
aXNwYXRjaGVyLT5nZXRJbnRlZ2VyKHBhcmFtZXRlcnMuZ2V0KCksICJkYXRhYmFzZUlkIl9zLCBu
dWxscHRyKTsKLSAgICBTdHJpbmcgaW5fcXVlcnkgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRT
dHJpbmcocGFyYW1ldGVycy5nZXQoKSwgInF1ZXJ5Il9zLCBudWxscHRyKTsKKyAgICBhdXRvIGlu
X2RhdGFiYXNlSWQgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRJbnRlZ2VyKHByb3RvY29sX3Bh
cmFtZXRlcnMuZ2V0KCksICJkYXRhYmFzZUlkIl9zLCB0cnVlKTsKKyAgICBhdXRvIGluX3F1ZXJ5
ID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3RyaW5nKHByb3RvY29sX3BhcmFtZXRlcnMuZ2V0
KCksICJxdWVyeSJfcywgdHJ1ZSk7CiAgICAgaWYgKG1fYmFja2VuZERpc3BhdGNoZXItPmhhc1By
b3RvY29sRXJyb3JzKCkpIHsKICAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJv
dG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFtcywgIlNvbWUgYXJndW1l
bnRzIG9mIG1ldGhvZCAnRGF0YWJhc2UuZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVl
cycgY2FuJ3QgYmUgcHJvY2Vzc2VkIl9zKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMjkyLDg1ICsy
ODUsNzYgQEAgdm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FMU3luY09w
dGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgcmVxdWVzdEkKIAogI2lmIEVOQUJMRShJTlNQRUNUT1Jf
QUxURVJOQVRFX0RJU1BBVENIRVJTKQogICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsK
LSAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5leGVjdXRlU1FMU3luY09wdGlvbmFsUmV0
dXJuVmFsdWVzKHJlcXVlc3RJZCwgaW5fZGF0YWJhc2VJZCwgaW5fcXVlcnkpOworICAgICAgICBt
X2FsdGVybmF0ZURpc3BhdGNoZXItPmV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMo
cHJvdG9jb2xfY2FsbElkLCAqaW5fZGF0YWJhc2VJZCwgaW5fcXVlcnkpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENI
RVJTKQogCi0gICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4gcmVz
dWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBSZWZQdHI8SlNPTjo6QXJyYXlPZjxT
dHJpbmc+PiBvdXRfY29sdW1uTmFtZXM7Ci0gICAgT3B0aW9uYWw8U3RyaW5nPiBvdXRfbm90ZXM7
Ci0gICAgT3B0aW9uYWw8ZG91YmxlPiBvdXRfdGltZXN0YW1wOwotICAgIE9wdGlvbmFsPEpTT046
Ok9iamVjdD4gb3V0X3ZhbHVlczsKLSAgICBPcHRpb25hbDxKU09OOjpWYWx1ZT4gb3V0X3BheWxv
YWQ7Ci0gICAgT3B0aW9uYWw8aW50PiBvdXRfZGF0YWJhc2VJZDsKLSAgICBSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiBvdXRfc3FsRXJyb3I7Ci0gICAgSW5zcGVj
dG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMgb3V0X3NjcmVlbkNvbG9yOwot
ICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiBvdXRf
YWx0ZXJuYXRlQ29sb3JzOwotICAgIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQ
cmludENvbG9yIG91dF9wcmludENvbG9yOwotICAgIG1fYWdlbnQtPmV4ZWN1dGVTUUxTeW5jT3B0
aW9uYWxSZXR1cm5WYWx1ZXMoZXJyb3IsIGluX2RhdGFiYXNlSWQsIGluX3F1ZXJ5LCBvdXRfY29s
dW1uTmFtZXMsIG91dF9ub3Rlcywgb3V0X3RpbWVzdGFtcCwgb3V0X3ZhbHVlcywgb3V0X3BheWxv
YWQsIG91dF9kYXRhYmFzZUlkLCBvdXRfc3FsRXJyb3IsIG91dF9zY3JlZW5Db2xvciwgb3V0X2Fs
dGVybmF0ZUNvbG9ycywgb3V0X3ByaW50Q29sb3IpOwotCi0gICAgaWYgKCFlcnJvci5sZW5ndGgo
KSkgewotICAgICAgICBpZiAob3V0X2NvbHVtbk5hbWVzKQotICAgICAgICAgICAgcmVzdWx0LT5z
ZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIG91dF9jb2x1bW5OYW1lcyk7Ci0gICAgICAgIGlmIChv
dXRfbm90ZXMuaGFzVmFsdWUoKSkKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJub3Rl
cyJfcywgKm91dF9ub3Rlcyk7Ci0gICAgICAgIGlmIChvdXRfdGltZXN0YW1wLmhhc1ZhbHVlKCkp
Ci0gICAgICAgICAgICByZXN1bHQtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCAqb3V0X3RpbWVz
dGFtcCk7Ci0gICAgICAgIGlmIChvdXRfdmFsdWVzLmhhc1ZhbHVlKCkpCi0gICAgICAgICAgICBy
ZXN1bHQtPnNldE9iamVjdCgidmFsdWVzIl9zLCAqb3V0X3ZhbHVlcyk7Ci0gICAgICAgIGlmIChv
dXRfcGF5bG9hZC5oYXNWYWx1ZSgpKQotICAgICAgICAgICAgcmVzdWx0LT5zZXRWYWx1ZSgicGF5
bG9hZCJfcywgKm91dF9wYXlsb2FkKTsKLSAgICAgICAgaWYgKG91dF9kYXRhYmFzZUlkLmhhc1Zh
bHVlKCkpCi0gICAgICAgICAgICByZXN1bHQtPnNldEludGVnZXIoImRhdGFiYXNlSWQiX3MsICpv
dXRfZGF0YWJhc2VJZCk7Ci0gICAgICAgIGlmIChvdXRfc3FsRXJyb3IpCi0gICAgICAgICAgICBy
ZXN1bHQtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIG91dF9zcWxFcnJvcik7Ci0gICAgICAgIGlm
IChvdXRfc2NyZWVuQ29sb3IuaGFzVmFsdWUoKSkKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0U3Ry
aW5nKCJzY3JlZW5Db2xvciJfcywgKm91dF9zY3JlZW5Db2xvcik7Ci0gICAgICAgIGlmIChvdXRf
YWx0ZXJuYXRlQ29sb3JzKQotICAgICAgICAgICAgcmVzdWx0LT5zZXRBcnJheSgiYWx0ZXJuYXRl
Q29sb3JzIl9zLCBvdXRfYWx0ZXJuYXRlQ29sb3JzKTsKLSAgICAgICAgaWYgKG91dF9wcmludENv
bG9yLmhhc1ZhbHVlKCkpCi0gICAgICAgICAgICByZXN1bHQtPnNldFN0cmluZygicHJpbnRDb2xv
ciJfcywgKm91dF9wcmludENvbG9yKTsKKyAgICBhdXRvIHJlc3VsdCA9IG1fYWdlbnQtPmV4ZWN1
dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMoKmluX2RhdGFiYXNlSWQsIGluX3F1ZXJ5KTsK
KyAgICBpZiAoIXJlc3VsdCkgeworICAgICAgICBBU1NFUlQoIXJlc3VsdC5lcnJvcigpLmlzRW1w
dHkoKSk7CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3Io
QmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCByZXN1bHQuZXJyb3IoKSk7CisgICAgICAg
IHJldHVybjsKICAgICB9Ci0gICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKLSAgICAgICAgbV9iYWNr
ZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBm
YWxzZSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90
b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikp
OworCisgICAgYXV0byBbb3V0X29wdF9jb2x1bW5OYW1lcywgb3V0X29wdF9ub3Rlcywgb3V0X29w
dF90aW1lc3RhbXAsIG91dF9vcHRfdmFsdWVzLCBvdXRfb3B0X3BheWxvYWQsIG91dF9vcHRfZGF0
YWJhc2VJZCwgb3V0X29wdF9zcWxFcnJvciwgb3V0X29wdF9zY3JlZW5Db2xvciwgb3V0X29wdF9h
bHRlcm5hdGVDb2xvcnMsIG91dF9vcHRfcHJpbnRDb2xvcl0gPSBXVEZNb3ZlKHJlc3VsdC52YWx1
ZSgpKTsKKworICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNy
ZWF0ZSgpOworICAgIGlmICghIW91dF9vcHRfY29sdW1uTmFtZXMpCisgICAgICAgIHByb3RvY29s
X2pzb25NZXNzYWdlLT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIG91dF9vcHRfY29sdW1uTmFt
ZXMucmVsZWFzZU5vbk51bGwoKSk7CisgICAgaWYgKCEhb3V0X29wdF9ub3RlcykKKyAgICAgICAg
cHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygibm90ZXMiX3MsIG91dF9vcHRfbm90ZXMp
OworICAgIGlmICghIW91dF9vcHRfdGltZXN0YW1wKQorICAgICAgICBwcm90b2NvbF9qc29uTWVz
c2FnZS0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsICpvdXRfb3B0X3RpbWVzdGFtcCk7CisgICAg
aWYgKCEhb3V0X29wdF92YWx1ZXMpCisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRP
YmplY3QoInZhbHVlcyJfcywgb3V0X29wdF92YWx1ZXMucmVsZWFzZU5vbk51bGwoKSk7CisgICAg
aWYgKCEhb3V0X29wdF9wYXlsb2FkKQorICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0
VmFsdWUoInBheWxvYWQiX3MsIG91dF9vcHRfcGF5bG9hZC5yZWxlYXNlTm9uTnVsbCgpKTsKKyAg
ICBpZiAoISFvdXRfb3B0X2RhdGFiYXNlSWQpCisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdl
LT5zZXRJbnRlZ2VyKCJkYXRhYmFzZUlkIl9zLCAqb3V0X29wdF9kYXRhYmFzZUlkKTsKKyAgICBp
ZiAoISFvdXRfb3B0X3NxbEVycm9yKQorICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0
T2JqZWN0KCJzcWxFcnJvciJfcywgb3V0X29wdF9zcWxFcnJvci5yZWxlYXNlTm9uTnVsbCgpKTsK
KyAgICBpZiAoISFvdXRfb3B0X3NjcmVlbkNvbG9yKQorICAgICAgICBwcm90b2NvbF9qc29uTWVz
c2FnZS0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgUHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpn
ZXRFbnVtQ29uc3RhbnRWYWx1ZSgqb3V0X29wdF9zY3JlZW5Db2xvcikpOworICAgIGlmICghIW91
dF9vcHRfYWx0ZXJuYXRlQ29sb3JzKQorICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0
QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywgb3V0X29wdF9hbHRlcm5hdGVDb2xvcnMucmVsZWFz
ZU5vbk51bGwoKSk7CisgICAgaWYgKCEhb3V0X29wdF9wcmludENvbG9yKQorICAgICAgICBwcm90
b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCBvdXRfb3B0X3ByaW50
Q29sb3IpOworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShwcm90b2NvbF9j
YWxsSWQsIFdURk1vdmUocHJvdG9jb2xfanNvbk1lc3NhZ2UpLCBmYWxzZSk7CiB9CiAKIERhdGFi
YXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVy
blZhbHVlc0NhbGxiYWNrOjpFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc0NhbGxi
YWNrKFJlZjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBiYWNrZW5kRGlzcGF0Y2hlciwgaW50IGlkKSA6
IEJhY2tlbmREaXNwYXRjaGVyOjpDYWxsYmFja0Jhc2UoV1RGTW92ZShiYWNrZW5kRGlzcGF0Y2hl
ciksIGlkKSB7IH0KIAotdm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhl
Y3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNDYWxsYmFjazo6c2VuZFN1Y2Nlc3MoUmVm
UHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4mJiBjb2x1bW5OYW1lcywgT3B0aW9uYWw8U3RyaW5n
PiYgbm90ZXMsIE9wdGlvbmFsPGRvdWJsZT4mIHRpbWVzdGFtcCwgT3B0aW9uYWw8SlNPTjo6T2Jq
ZWN0PiYgdmFsdWVzLCBPcHRpb25hbDxKU09OOjpWYWx1ZT4mIHBheWxvYWQsIE9wdGlvbmFsPGlu
dD4mIGRhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJy
b3I+JiYgc3FsRXJyb3IsIE9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQ
cmltYXJ5Q29sb3JzPiBzY3JlZW5Db2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRh
dGFiYXNlOjpDb2xvckxpc3Q+JiYgYWx0ZXJuYXRlQ29sb3JzLCBPcHRpb25hbDxEYXRhYmFzZUJh
Y2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UHJpbnRDb2xvcj4gcHJpbnRDb2xvcikKK3ZvaWQgRGF0
YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0
dXJuVmFsdWVzQ2FsbGJhY2s6OnNlbmRTdWNjZXNzKFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmlu
Zz4+JiYgb3B0X2NvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIG9wdF9ub3RlcywgT3B0aW9uYWw8
ZG91YmxlPiYmIG9wdF90aW1lc3RhbXAsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgb3B0X3ZhbHVl
cywgUmVmUHRyPEpTT046OlZhbHVlPiYmIG9wdF9wYXlsb2FkLCBPcHRpb25hbDxpbnQ+JiYgb3B0
X2RhdGFiYXNlSWQsIFJlZlB0cjxQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiYmIG9wdF9zcWxF
cnJvciwgT3B0aW9uYWw8UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPiYmIG9wdF9z
Y3JlZW5Db2xvciwgUmVmUHRyPFByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiYmIG9wdF9h
bHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyYgb3B0X3ByaW50Q29sb3IpCiB7Ci0gICAgUmVm
PEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAg
IGlmIChjb2x1bW5OYW1lcykKLSAgICAgICAganNvbk1lc3NhZ2UtPnNldEFycmF5KCJjb2x1bW5O
YW1lcyJfcywgY29sdW1uTmFtZXMpOwotICAgIGlmIChub3Rlcy5oYXNWYWx1ZSgpKQotICAgICAg
ICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJub3RlcyJfcywgKm5vdGVzKTsKLSAgICBpZiAodGlt
ZXN0YW1wLmhhc1ZhbHVlKCkpCi0gICAgICAgIGpzb25NZXNzYWdlLT5zZXREb3VibGUoInRpbWVz
dGFtcCJfcywgKnRpbWVzdGFtcCk7Ci0gICAgaWYgKHZhbHVlcy5oYXNWYWx1ZSgpKQotICAgICAg
ICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsICp2YWx1ZXMpOwotICAgIGlmIChw
YXlsb2FkLmhhc1ZhbHVlKCkpCi0gICAgICAgIGpzb25NZXNzYWdlLT5zZXRWYWx1ZSgicGF5bG9h
ZCJfcywgKnBheWxvYWQpOwotICAgIGlmIChkYXRhYmFzZUlkLmhhc1ZhbHVlKCkpCi0gICAgICAg
IGpzb25NZXNzYWdlLT5zZXRJbnRlZ2VyKCJkYXRhYmFzZUlkIl9zLCAqZGF0YWJhc2VJZCk7Ci0g
ICAgaWYgKHNxbEVycm9yKQotICAgICAgICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJzcWxFcnJv
ciJfcywgc3FsRXJyb3IpOwotICAgIGlmIChzY3JlZW5Db2xvci5oYXNWYWx1ZSgpKQotICAgICAg
ICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgKnNjcmVlbkNvbG9yKTsK
LSAgICBpZiAoYWx0ZXJuYXRlQ29sb3JzKQotICAgICAgICBqc29uTWVzc2FnZS0+c2V0QXJyYXko
ImFsdGVybmF0ZUNvbG9ycyJfcywgYWx0ZXJuYXRlQ29sb3JzKTsKLSAgICBpZiAocHJpbnRDb2xv
ci5oYXNWYWx1ZSgpKQotICAgICAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJwcmludENvbG9y
Il9zLCAqcHJpbnRDb2xvcik7Ci0gICAgQ2FsbGJhY2tCYXNlOjpzZW5kU3VjY2VzcyhXVEZNb3Zl
KGpzb25NZXNzYWdlKSk7CisgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9i
amVjdDo6Y3JlYXRlKCk7CisgICAgaWYgKCEhb3B0X2NvbHVtbk5hbWVzKQorICAgICAgICBwcm90
b2NvbF9qc29uTWVzc2FnZS0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCBvcHRfY29sdW1uTmFt
ZXMucmVsZWFzZU5vbk51bGwoKSk7CisgICAgaWYgKCEhb3B0X25vdGVzKQorICAgICAgICBwcm90
b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJub3RlcyJfcywgb3B0X25vdGVzKTsKKyAgICBp
ZiAoISFvcHRfdGltZXN0YW1wKQorICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0RG91
YmxlKCJ0aW1lc3RhbXAiX3MsICpvcHRfdGltZXN0YW1wKTsKKyAgICBpZiAoISFvcHRfdmFsdWVz
KQorICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIG9w
dF92YWx1ZXMucmVsZWFzZU5vbk51bGwoKSk7CisgICAgaWYgKCEhb3B0X3BheWxvYWQpCisgICAg
ICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgb3B0X3BheWxv
YWQucmVsZWFzZU5vbk51bGwoKSk7CisgICAgaWYgKCEhb3B0X2RhdGFiYXNlSWQpCisgICAgICAg
IHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRJbnRlZ2VyKCJkYXRhYmFzZUlkIl9zLCAqb3B0X2Rh
dGFiYXNlSWQpOworICAgIGlmICghIW9wdF9zcWxFcnJvcikKKyAgICAgICAgcHJvdG9jb2xfanNv
bk1lc3NhZ2UtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIG9wdF9zcWxFcnJvci5yZWxlYXNlTm9u
TnVsbCgpKTsKKyAgICBpZiAoISFvcHRfc2NyZWVuQ29sb3IpCisgICAgICAgIHByb3RvY29sX2pz
b25NZXNzYWdlLT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCBQcm90b2NvbDo6VGVzdEhlbHBl
cnM6OmdldEVudW1Db25zdGFudFZhbHVlKCpvcHRfc2NyZWVuQ29sb3IpKTsKKyAgICBpZiAoISFv
cHRfYWx0ZXJuYXRlQ29sb3JzKQorICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0QXJy
YXkoImFsdGVybmF0ZUNvbG9ycyJfcywgb3B0X2FsdGVybmF0ZUNvbG9ycy5yZWxlYXNlTm9uTnVs
bCgpKTsKKyAgICBpZiAoISFvcHRfcHJpbnRDb2xvcikKKyAgICAgICAgcHJvdG9jb2xfanNvbk1l
c3NhZ2UtPnNldFN0cmluZygicHJpbnRDb2xvciJfcywgb3B0X3ByaW50Q29sb3IpOworICAgIENh
bGxiYWNrQmFzZTo6c2VuZFN1Y2Nlc3MoV1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSkpOwog
fQogCi12b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxBc3luY09wdGlv
bmFsUmV0dXJuVmFsdWVzKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBh
cmFtZXRlcnMpCit2b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxBc3lu
Y09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBSZWZQdHI8SlNPTjo6
T2JqZWN0PiYmIHByb3RvY29sX3BhcmFtZXRlcnMpCiB7Ci0gICAgaW50IGluX2RhdGFiYXNlSWQg
PSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRJbnRlZ2VyKHBhcmFtZXRlcnMuZ2V0KCksICJkYXRh
YmFzZUlkIl9zLCBudWxscHRyKTsKLSAgICBTdHJpbmcgaW5fcXVlcnkgPSBtX2JhY2tlbmREaXNw
YXRjaGVyLT5nZXRTdHJpbmcocGFyYW1ldGVycy5nZXQoKSwgInF1ZXJ5Il9zLCBudWxscHRyKTsK
KyAgICBhdXRvIGluX2RhdGFiYXNlSWQgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRJbnRlZ2Vy
KHByb3RvY29sX3BhcmFtZXRlcnMuZ2V0KCksICJkYXRhYmFzZUlkIl9zLCB0cnVlKTsKKyAgICBh
dXRvIGluX3F1ZXJ5ID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3RyaW5nKHByb3RvY29sX3Bh
cmFtZXRlcnMuZ2V0KCksICJxdWVyeSJfcywgdHJ1ZSk7CiAgICAgaWYgKG1fYmFja2VuZERpc3Bh
dGNoZXItPmhhc1Byb3RvY29sRXJyb3JzKCkpIHsKICAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFtcywg
IlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnRGF0YWJhc2UuZXhlY3V0ZVNRTEFzeW5jT3B0aW9u
YWxSZXR1cm5WYWx1ZXMnIGNhbid0IGJlIHByb2Nlc3NlZCJfcyk7CiAgICAgICAgIHJldHVybjsK
QEAgLTM3OCwyMCArMzYyLDE4IEBAIHZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhl
Y3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyByZXF1ZXN0CiAKICNpZiBFTkFC
TEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKICAgICBpZiAobV9hbHRlcm5hdGVE
aXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+ZXhlY3V0ZVNRTEFz
eW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMocmVxdWVzdElkLCBpbl9kYXRhYmFzZUlkLCBpbl9xdWVy
eSk7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+ZXhlY3V0ZVNRTEFzeW5jT3B0aW9u
YWxSZXR1cm5WYWx1ZXMocHJvdG9jb2xfY2FsbElkLCAqaW5fZGF0YWJhc2VJZCwgaW5fcXVlcnkp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQogCi0gICAgUmVmPERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc0NhbGxiYWNrPiBjYWxs
YmFjayA9IGFkb3B0UmVmKCpuZXcgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkV4
ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJhY2sobV9iYWNrZW5kRGlzcGF0
Y2hlci5jb3B5UmVmKCksIHJlcXVlc3RJZCkpOwotICAgIG1fYWdlbnQtPmV4ZWN1dGVTUUxBc3lu
Y09wdGlvbmFsUmV0dXJuVmFsdWVzKGluX2RhdGFiYXNlSWQsIGluX3F1ZXJ5LCBjYWxsYmFjay5j
b3B5UmVmKCkpOwotCisgICAgbV9hZ2VudC0+ZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5W
YWx1ZXMoKmluX2RhdGFiYXNlSWQsIGluX3F1ZXJ5LCBhZG9wdFJlZigqbmV3IERhdGFiYXNlQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVl
c0NhbGxiYWNrKG1fYmFja2VuZERpc3BhdGNoZXIuY29weVJlZigpLCBwcm90b2NvbF9jYWxsSWQp
KSk7CiB9CiAKLXZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTFN5bmMo
bG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycykKK3ZvaWQg
RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTFN5bmMobG9uZyBwcm90b2NvbF9j
YWxsSWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfcGFyYW1ldGVycykKIHsKLSAg
ICBpbnQgaW5fZGF0YWJhc2VJZCA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldEludGVnZXIocGFy
YW1ldGVycy5nZXQoKSwgImRhdGFiYXNlSWQiX3MsIG51bGxwdHIpOwotICAgIFN0cmluZyBpbl9x
dWVyeSA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFN0cmluZyhwYXJhbWV0ZXJzLmdldCgpLCAi
cXVlcnkiX3MsIG51bGxwdHIpOworICAgIGF1dG8gaW5fZGF0YWJhc2VJZCA9IG1fYmFja2VuZERp
c3BhdGNoZXItPmdldEludGVnZXIocHJvdG9jb2xfcGFyYW1ldGVycy5nZXQoKSwgImRhdGFiYXNl
SWQiX3MsIHRydWUpOworICAgIGF1dG8gaW5fcXVlcnkgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5n
ZXRTdHJpbmcocHJvdG9jb2xfcGFyYW1ldGVycy5nZXQoKSwgInF1ZXJ5Il9zLCB0cnVlKTsKICAg
ICBpZiAobV9iYWNrZW5kRGlzcGF0Y2hlci0+aGFzUHJvdG9jb2xFcnJvcnMoKSkgewogICAgICAg
ICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRj
aGVyOjpJbnZhbGlkUGFyYW1zLCAiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICdEYXRhYmFzZS5l
eGVjdXRlU1FMU3luYycgY2FuJ3QgYmUgcHJvY2Vzc2VkIl9zKTsKICAgICAgICAgcmV0dXJuOwpA
QCAtMzk5LDY1ICszODEsNTYgQEAgdm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVj
dXRlU1FMU3luYyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamUKIAogI2lmIEVOQUJM
RShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogICAgIGlmIChtX2FsdGVybmF0ZURp
c3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5leGVjdXRlU1FMU3lu
YyhyZXF1ZXN0SWQsIGluX2RhdGFiYXNlSWQsIGluX3F1ZXJ5KTsKKyAgICAgICAgbV9hbHRlcm5h
dGVEaXNwYXRjaGVyLT5leGVjdXRlU1FMU3luYyhwcm90b2NvbF9jYWxsSWQsICppbl9kYXRhYmFz
ZUlkLCBpbl9xdWVyeSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYgLy8gRU5BQkxF
KElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAKLSAgICBFcnJvclN0cmluZyBlcnJv
cjsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgp
OwotICAgIFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+IG91dF9jb2x1bW5OYW1lczsKLSAg
ICBTdHJpbmcgb3V0X25vdGVzOwotICAgIGRvdWJsZSBvdXRfdGltZXN0YW1wOwotICAgIEpTT046
Ok9iamVjdCBvdXRfdmFsdWVzOwotICAgIEpTT046OlZhbHVlIG91dF9wYXlsb2FkOwotICAgIGlu
dCBvdXRfZGF0YWJhc2VJZDsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJh
c2U6OkVycm9yPiBvdXRfc3FsRXJyb3I7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRhdGFiYXNlOjpDb2xvckxpc3Q+IG91dF9hbHRlcm5hdGVDb2xvcnM7Ci0gICAgSW5zcGVjdG9y
OjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMgb3V0X3NjcmVlbkNvbG9yOwotICAg
IERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQcmludENvbG9yIG91dF9wcmludENv
bG9yOwotICAgIG1fYWdlbnQtPmV4ZWN1dGVTUUxTeW5jKGVycm9yLCBpbl9kYXRhYmFzZUlkLCBp
bl9xdWVyeSwgb3V0X2NvbHVtbk5hbWVzLCAmb3V0X25vdGVzLCAmb3V0X3RpbWVzdGFtcCwgb3V0
X3ZhbHVlcywgJm91dF9wYXlsb2FkLCAmb3V0X2RhdGFiYXNlSWQsIG91dF9zcWxFcnJvciwgb3V0
X2FsdGVybmF0ZUNvbG9ycywgJm91dF9zY3JlZW5Db2xvciwgJm91dF9wcmludENvbG9yKTsKLQot
ICAgIGlmICghZXJyb3IubGVuZ3RoKCkpIHsKLSAgICAgICAgcmVzdWx0LT5zZXRBcnJheSgiY29s
dW1uTmFtZXMiX3MsIG91dF9jb2x1bW5OYW1lcyk7Ci0gICAgICAgIHJlc3VsdC0+c2V0U3RyaW5n
KCJub3RlcyJfcywgb3V0X25vdGVzKTsKLSAgICAgICAgcmVzdWx0LT5zZXREb3VibGUoInRpbWVz
dGFtcCJfcywgb3V0X3RpbWVzdGFtcCk7Ci0gICAgICAgIHJlc3VsdC0+c2V0T2JqZWN0KCJ2YWx1
ZXMiX3MsIG91dF92YWx1ZXMpOwotICAgICAgICByZXN1bHQtPnNldFZhbHVlKCJwYXlsb2FkIl9z
LCBvdXRfcGF5bG9hZCk7Ci0gICAgICAgIHJlc3VsdC0+c2V0SW50ZWdlcigiZGF0YWJhc2VJZCJf
cywgb3V0X2RhdGFiYXNlSWQpOwotICAgICAgICByZXN1bHQtPnNldE9iamVjdCgic3FsRXJyb3Ii
X3MsIG91dF9zcWxFcnJvcik7Ci0gICAgICAgIHJlc3VsdC0+c2V0QXJyYXkoImFsdGVybmF0ZUNv
bG9ycyJfcywgb3V0X2FsdGVybmF0ZUNvbG9ycyk7Ci0gICAgICAgIHJlc3VsdC0+c2V0U3RyaW5n
KCJzY3JlZW5Db2xvciJfcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVu
dW1Db25zdGFudFZhbHVlKG91dF9zY3JlZW5Db2xvcikpOwotICAgICAgICByZXN1bHQtPnNldFN0
cmluZygicHJpbnRDb2xvciJfcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6Omdl
dEVudW1Db25zdGFudFZhbHVlKG91dF9wcmludENvbG9yKSk7CisgICAgYXV0byByZXN1bHQgPSBt
X2FnZW50LT5leGVjdXRlU1FMU3luYygqaW5fZGF0YWJhc2VJZCwgaW5fcXVlcnkpOworICAgIGlm
ICghcmVzdWx0KSB7CisgICAgICAgIEFTU0VSVCghcmVzdWx0LmVycm9yKCkuaXNFbXB0eSgpKTsK
KyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5k
RGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIHJlc3VsdC5lcnJvcigpKTsKKyAgICAgICAgcmV0dXJu
OwogICAgIH0KLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQotICAgICAgICBtX2JhY2tlbmREaXNw
YXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsK
LSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJy
b3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7CisKKyAg
ICBhdXRvIFtvdXRfY29sdW1uTmFtZXMsIG91dF9ub3Rlcywgb3V0X3RpbWVzdGFtcCwgb3V0X3Zh
bHVlcywgb3V0X3BheWxvYWQsIG91dF9kYXRhYmFzZUlkLCBvdXRfc3FsRXJyb3IsIG91dF9hbHRl
cm5hdGVDb2xvcnMsIG91dF9zY3JlZW5Db2xvciwgb3V0X3ByaW50Q29sb3JdID0gV1RGTW92ZShy
ZXN1bHQudmFsdWUoKSk7CisKKyAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6
T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0QXJyYXkoImNv
bHVtbk5hbWVzIl9zLCBXVEZNb3ZlKG91dF9jb2x1bW5OYW1lcykpOworICAgIHByb3RvY29sX2pz
b25NZXNzYWdlLT5zZXRTdHJpbmcoIm5vdGVzIl9zLCBvdXRfbm90ZXMpOworICAgIHByb3RvY29s
X2pzb25NZXNzYWdlLT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywgb3V0X3RpbWVzdGFtcCk7Cisg
ICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldE9iamVjdCgidmFsdWVzIl9zLCBXVEZNb3ZlKG91
dF92YWx1ZXMpKTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0VmFsdWUoInBheWxvYWQi
X3MsIFdURk1vdmUob3V0X3BheWxvYWQpKTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0
SW50ZWdlcigiZGF0YWJhc2VJZCJfcywgb3V0X2RhdGFiYXNlSWQpOworICAgIHByb3RvY29sX2pz
b25NZXNzYWdlLT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBXVEZNb3ZlKG91dF9zcWxFcnJvcikp
OworICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9z
LCBXVEZNb3ZlKG91dF9hbHRlcm5hdGVDb2xvcnMpKTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2Fn
ZS0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgUHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRF
bnVtQ29uc3RhbnRWYWx1ZShvdXRfc2NyZWVuQ29sb3IpKTsKKyAgICBwcm90b2NvbF9qc29uTWVz
c2FnZS0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCBvdXRfcHJpbnRDb2xvcik7CisgICAgbV9i
YWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShw
cm90b2NvbF9qc29uTWVzc2FnZSksIGZhbHNlKTsKIH0KIAogRGF0YWJhc2VCYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXI6OkV4ZWN1dGVTUUxBc3luY0NhbGxiYWNrOjpFeGVjdXRlU1FMQXN5bmNDYWxs
YmFjayhSZWY8QmFja2VuZERpc3BhdGNoZXI+JiYgYmFja2VuZERpc3BhdGNoZXIsIGludCBpZCkg
OiBCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlKFdURk1vdmUoYmFja2VuZERpc3BhdGNo
ZXIpLCBpZCkgeyB9CiAKLXZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkV4
ZWN1dGVTUUxBc3luY0NhbGxiYWNrOjpzZW5kU3VjY2VzcyhSZWZQdHI8SlNPTjo6QXJyYXlPZjxT
dHJpbmc+PiYmIGNvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIG5vdGVzLCBkb3VibGUgdGltZXN0
YW1wLCBKU09OOjpPYmplY3QgdmFsdWVzLCBKU09OOjpWYWx1ZSBwYXlsb2FkLCBpbnQgZGF0YWJh
c2VJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4mJiBzcWxF
cnJvciwgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMgc2NyZWVu
Q29sb3IsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiYm
IGFsdGVybmF0ZUNvbG9ycywgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50
Q29sb3IgcHJpbnRDb2xvcikKK3ZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6
OkV4ZWN1dGVTUUxBc3luY0NhbGxiYWNrOjpzZW5kU3VjY2VzcyhSZWY8SlNPTjo6QXJyYXlPZjxT
dHJpbmc+PiYmIGNvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIG5vdGVzLCBkb3VibGUgdGltZXN0
YW1wLCBSZWY8SlNPTjo6T2JqZWN0PiYmIHZhbHVlcywgUmVmPEpTT046OlZhbHVlPiYmIHBheWxv
YWQsIGludCBkYXRhYmFzZUlkLCBSZWY8UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4mJiBzcWxF
cnJvciwgUHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzIHNjcmVlbkNvbG9yLCBSZWY8
UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+JiYgYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBT
dHJpbmcmIHByaW50Q29sb3IpCiB7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2Ug
PSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIGpzb25NZXNzYWdlLT5zZXRBcnJheSgiY29s
dW1uTmFtZXMiX3MsIGNvbHVtbk5hbWVzKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJu
b3RlcyJfcywgbm90ZXMpOwotICAgIGpzb25NZXNzYWdlLT5zZXREb3VibGUoInRpbWVzdGFtcCJf
cywgdGltZXN0YW1wKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIHZh
bHVlcyk7Ci0gICAganNvbk1lc3NhZ2UtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCBwYXlsb2FkKTsK
LSAgICBqc29uTWVzc2FnZS0+c2V0SW50ZWdlcigiZGF0YWJhc2VJZCJfcywgZGF0YWJhc2VJZCk7
Ci0gICAganNvbk1lc3NhZ2UtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIHNxbEVycm9yKTsKLSAg
ICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgSW5zcGVjdG9yOjpQcm90
b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKHNjcmVlbkNvbG9yKSk7Ci0g
ICAganNvbk1lc3NhZ2UtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIGFsdGVybmF0ZUNv
bG9ycyk7Ci0gICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygicHJpbnRDb2xvciJfcywgSW5zcGVj
dG9yOjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKHByaW50Q29s
b3IpKTsKLSAgICBDYWxsYmFja0Jhc2U6OnNlbmRTdWNjZXNzKFdURk1vdmUoanNvbk1lc3NhZ2Up
KTsKKyAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUo
KTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCBX
VEZNb3ZlKGNvbHVtbk5hbWVzKSk7CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmlu
Zygibm90ZXMiX3MsIG5vdGVzKTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0RG91Ymxl
KCJ0aW1lc3RhbXAiX3MsIHRpbWVzdGFtcCk7CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNl
dE9iamVjdCgidmFsdWVzIl9zLCBXVEZNb3ZlKHZhbHVlcykpOworICAgIHByb3RvY29sX2pzb25N
ZXNzYWdlLT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgV1RGTW92ZShwYXlsb2FkKSk7CisgICAgcHJv
dG9jb2xfanNvbk1lc3NhZ2UtPnNldEludGVnZXIoImRhdGFiYXNlSWQiX3MsIGRhdGFiYXNlSWQp
OworICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBXVEZN
b3ZlKHNxbEVycm9yKSk7CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygic2Ny
ZWVuQ29sb3IiX3MsIFByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUo
c2NyZWVuQ29sb3IpKTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0QXJyYXkoImFsdGVy
bmF0ZUNvbG9ycyJfcywgV1RGTW92ZShhbHRlcm5hdGVDb2xvcnMpKTsKKyAgICBwcm90b2NvbF9q
c29uTWVzc2FnZS0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCBwcmludENvbG9yKTsKKyAgICBD
YWxsYmFja0Jhc2U6OnNlbmRTdWNjZXNzKFdURk1vdmUocHJvdG9jb2xfanNvbk1lc3NhZ2UpKTsK
IH0KIAotdm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FMQXN5bmMobG9u
ZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycykKK3ZvaWQgRGF0
YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTEFzeW5jKGxvbmcgcHJvdG9jb2xfY2Fs
bElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX3BhcmFtZXRlcnMpCiB7Ci0gICAg
aW50IGluX2RhdGFiYXNlSWQgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRJbnRlZ2VyKHBhcmFt
ZXRlcnMuZ2V0KCksICJkYXRhYmFzZUlkIl9zLCBudWxscHRyKTsKLSAgICBTdHJpbmcgaW5fcXVl
cnkgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRTdHJpbmcocGFyYW1ldGVycy5nZXQoKSwgInF1
ZXJ5Il9zLCBudWxscHRyKTsKKyAgICBhdXRvIGluX2RhdGFiYXNlSWQgPSBtX2JhY2tlbmREaXNw
YXRjaGVyLT5nZXRJbnRlZ2VyKHByb3RvY29sX3BhcmFtZXRlcnMuZ2V0KCksICJkYXRhYmFzZUlk
Il9zLCB0cnVlKTsKKyAgICBhdXRvIGluX3F1ZXJ5ID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0
U3RyaW5nKHByb3RvY29sX3BhcmFtZXRlcnMuZ2V0KCksICJxdWVyeSJfcywgdHJ1ZSk7CiAgICAg
aWYgKG1fYmFja2VuZERpc3BhdGNoZXItPmhhc1Byb3RvY29sRXJyb3JzKCkpIHsKICAgICAgICAg
bV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hl
cjo6SW52YWxpZFBhcmFtcywgIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnRGF0YWJhc2UuZXhl
Y3V0ZVNRTEFzeW5jJyBjYW4ndCBiZSBwcm9jZXNzZWQiX3MpOwogICAgICAgICByZXR1cm47CkBA
IC00NjUsMTQgKzQzOCwxMiBAQCB2b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1
dGVTUUxBc3luYyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iagogCiAjaWYgRU5BQkxF
KElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAgICAgaWYgKG1fYWx0ZXJuYXRlRGlz
cGF0Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmV4ZWN1dGVTUUxBc3lu
YyhyZXF1ZXN0SWQsIGluX2RhdGFiYXNlSWQsIGluX3F1ZXJ5KTsKKyAgICAgICAgbV9hbHRlcm5h
dGVEaXNwYXRjaGVyLT5leGVjdXRlU1FMQXN5bmMocHJvdG9jb2xfY2FsbElkLCAqaW5fZGF0YWJh
c2VJZCwgaW5fcXVlcnkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmIC8vIEVOQUJM
RShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogCi0gICAgUmVmPERhdGFiYXNlQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNDYWxsYmFjaz4gY2FsbGJhY2sg
PSBhZG9wdFJlZigqbmV3IERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRl
U1FMQXN5bmNDYWxsYmFjayhtX2JhY2tlbmREaXNwYXRjaGVyLmNvcHlSZWYoKSwgcmVxdWVzdElk
KSk7Ci0gICAgbV9hZ2VudC0+ZXhlY3V0ZVNRTEFzeW5jKGluX2RhdGFiYXNlSWQsIGluX3F1ZXJ5
LCBjYWxsYmFjay5jb3B5UmVmKCkpOwotCisgICAgbV9hZ2VudC0+ZXhlY3V0ZVNRTEFzeW5jKCpp
bl9kYXRhYmFzZUlkLCBpbl9xdWVyeSwgYWRvcHRSZWYoKm5ldyBEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5jQ2FsbGJhY2sobV9iYWNrZW5kRGlzcGF0Y2hl
ci5jb3B5UmVmKCksIHByb3RvY29sX2NhbGxJZCkpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCkBAIC01MTMsNiArNDg0LDcgQEAgdm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVy
OjpleGVjdXRlU1FMQXN5bmMobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmoKIAogI2lu
Y2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5o
PgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKQEAgLTU1Niw3ICs1MjgsNiBAQCBjbGFzcyBG
cm9udGVuZFJvdXRlcjsKICNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgogCiAj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNs
dWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC01
OTcsNyArNTY4LDkgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiAjcHJhZ21hIG9uY2UKIAogI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KLSNpbmNsdWRl
IDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVk
ZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5h
bWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC02MTksNyArNTkyLDcgQEAgZW51bSBjbGFzcyBQcmlt
YXJ5Q29sb3JzOwogbmFtZXNwYWNlIERhdGFiYXNlIHsKIC8qIFVuaXF1ZSBpZGVudGlmaWVyIG9m
IERhdGFiYXNlIG9iamVjdC4gKi8KIHVzaW5nIERhdGFiYXNlSWQgPSBpbnQ7Ci11c2luZyBDb2xv
ckxpc3QgPSBKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmlt
YXJ5Q29sb3JzPjsKK3VzaW5nIENvbG9yTGlzdCA9IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkRh
dGFiYXNlOjpQcmltYXJ5Q29sb3JzPjsKIH0gLy8gRGF0YWJhc2UKIC8vIEVuZCBvZiB0eXBlZGVm
cy4KIApAQCAtNjQzLDcgKzYxNiw3IEBAIGVudW0gY2xhc3MgUHJpbWFyeUNvbG9ycyB7CiB9OyAv
LyBlbnVtIGNsYXNzIFByaW1hcnlDb2xvcnMKIAogLyogRGF0YWJhc2UgZXJyb3IuICovCi1jbGFz
cyBFcnJvciA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKK2NsYXNzIEVycm9yIGZpbmFsIDog
cHVibGljIEpTT046Ok9iamVjdEJhc2UgewogcHVibGljOgogICAgIGVudW0gewogICAgICAgICBO
b0ZpZWxkc1NldCA9IDAsCkBAIC02NzAsMTcgKzY0MywxNyBAQCBwdWJsaWM6CiAgICAgICAgIGZy
aWVuZCBjbGFzcyBFcnJvcjsKICAgICBwdWJsaWM6CiAKLSAgICAgICAgQnVpbGRlcjxTVEFURSB8
IE1lc3NhZ2VTZXQ+JiBzZXRNZXNzYWdlKGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgICAgIEJ1
aWxkZXI8U1RBVEUgfCBNZXNzYWdlU2V0PiYgc2V0TWVzc2FnZShjb25zdCBTdHJpbmcmIGluX21l
c3NhZ2UpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBN
ZXNzYWdlU2V0KSwgcHJvcGVydHlfbWVzc2FnZV9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBt
X3Jlc3VsdC0+c2V0U3RyaW5nKCJtZXNzYWdlIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICBtX3Jl
c3VsdC0+c2V0U3RyaW5nKCJtZXNzYWdlIl9zLCBpbl9tZXNzYWdlKTsKICAgICAgICAgICAgIHJl
dHVybiBjYXN0U3RhdGU8TWVzc2FnZVNldD4oKTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1aWxk
ZXI8U1RBVEUgfCBDb2RlU2V0PiYgc2V0Q29kZShpbnQgdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCBDb2RlU2V0PiYgc2V0Q29kZShpbnQgaW5fY29kZSkKICAgICAgICAgewogICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIENvZGVTZXQpLCBwcm9wZXJ0eV9jb2RlX2Fs
cmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRJbnRlZ2VyKCJjb2RlIl9zLCB2
YWx1ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0SW50ZWdlcigiY29kZSJfcywgaW5fY29k
ZSk7CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENvZGVTZXQ+KCk7CiAgICAgICAgIH0K
IApAQCAtNzE5LDcgKzY5Miw3IEBAIE9wdGlvbmFsPFByb3RvY29sRW51bVR5cGU+IHBhcnNlRW51
bVZhbHVlRnJvbVN0cmluZyhjb25zdCBTdHJpbmcmKTsKIAogLy8gRW51bXMgaW4gdGhlICdEYXRh
YmFzZScgRG9tYWluCiB0ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpE
YXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPihjb25zdCBTdHJpbmcmKTsKK09w
dGlvbmFsPFByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4gcGFyc2VFbnVtVmFsdWVG
cm9tU3RyaW5nPFByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4oY29uc3QgU3RyaW5n
Jik7CiAKIH0gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCiAKQEAgLTc3MSw4ICs3NDQsNyBAQCBz
dHJ1Y3QgRGVmYXVsdEhhc2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlD
b2xvcnM+IDogSW50SGFzaDxJbnNwZQogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlRl
c3RQcm90b2NvbE9iamVjdHMuaCIKIAotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogCiBu
YW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtNzk3LDE2ICs3NjksMTYgQEAgU3RyaW5nIGdldEVu
dW1Db25zdGFudFZhbHVlKGludCBjb2RlKSB7CiAvLyBFbnVtcyBpbiB0aGUgJ0RhdGFiYXNlJyBE
b21haW4KIAogdGVtcGxhdGU8PgotT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJh
c2U6OlByaW1hcnlDb2xvcnM+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlBy
b3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4oY29uc3QgU3RyaW5nJiBwcm90b2NvbFN0
cmluZykKK09wdGlvbmFsPFByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4gcGFyc2VF
bnVtVmFsdWVGcm9tU3RyaW5nPFByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4oY29u
c3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKIHsKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNv
bnN0YW50VmFsdWVzW10gPSB7Ci0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6
RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM6OlJlZCwKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6
OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9yczo6R3JlZW4sCi0gICAgICAgIChzaXpl
X3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM6OkJsdWUsCisg
ICAgICAgIChzaXplX3QpUHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzOjpSZWQsCisg
ICAgICAgIChzaXplX3QpUHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzOjpHcmVlbiwK
KyAgICAgICAgKHNpemVfdClQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM6OkJsdWUs
CiAgICAgfTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDM7ICsraSkKICAgICAgICAgaWYg
KHByb3RvY29sU3RyaW5nID09IGVudW1fY29uc3RhbnRfdmFsdWVzW2NvbnN0YW50VmFsdWVzW2ld
XSkKLSAgICAgICAgICAgIHJldHVybiAoSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlBy
aW1hcnlDb2xvcnMpY29uc3RhbnRWYWx1ZXNbaV07CisgICAgICAgICAgICByZXR1cm4gKFByb3Rv
Y29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyljb25zdGFudFZhbHVlc1tpXTsKIAogICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CiB9CkBAIC04NjMsMTAgKzgzNSwxMCBAQCBjbGFzcyBPYmpDSW5z
cGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBBbHRlcm5hdGVE
YXRhYmFzZUJhYwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIE9i
akNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKGlkPFRlc3RQcm90b2NvbERhdGFi
YXNlRG9tYWluSGFuZGxlcj4gaGFuZGxlcikgeyBtX2RlbGVnYXRlID0gaGFuZGxlcjsgfQotICAg
IHZvaWQgZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIHJlcXVlc3RJZCwg
aW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnkpIGZpbmFsOwotICAgIHZv
aWQgZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyByZXF1ZXN0SWQsIGlu
dCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5KSBmaW5hbDsKLSAgICB2b2lk
IGV4ZWN1dGVTUUxTeW5jKGxvbmcgcmVxdWVzdElkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3Qg
U3RyaW5nJiBpbl9xdWVyeSkgZmluYWw7Ci0gICAgdm9pZCBleGVjdXRlU1FMQXN5bmMobG9uZyBy
ZXF1ZXN0SWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5KSBmaW5h
bDsKKyAgICB2b2lkIGV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyBwcm90
b2NvbF9jYWxsSWQsIGludCBkYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIHF1ZXJ5KSBmaW5hbDsK
KyAgICB2b2lkIGV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgcHJvdG9j
b2xfY2FsbElkLCBpbnQgZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBxdWVyeSkgZmluYWw7Cisg
ICAgdm9pZCBleGVjdXRlU1FMU3luYyhsb25nIHByb3RvY29sX2NhbGxJZCwgaW50IGRhdGFiYXNl
SWQsIGNvbnN0IFN0cmluZyYgcXVlcnkpIGZpbmFsOworICAgIHZvaWQgZXhlY3V0ZVNRTEFzeW5j
KGxvbmcgcHJvdG9jb2xfY2FsbElkLCBpbnQgZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBxdWVy
eSkgZmluYWw7CiBwcml2YXRlOgogICAgIFJldGFpblB0cjxpZDxUZXN0UHJvdG9jb2xEYXRhYmFz
ZURvbWFpbkhhbmRsZXI+PiBtX2RlbGVnYXRlOwogfTsKQEAgLTkxNCwxODMgKzg4NiwxNzkgQEAg
cHJpdmF0ZToKIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKLXZvaWQgT2JqQ0luc3BlY3RvckRh
dGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1
ZXMobG9uZyByZXF1ZXN0SWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1
ZXJ5KQordm9pZCBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0
ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIHByb3RvY29sX2NhbGxJZCwgaW50IGlu
X2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnkpCiB7CiAgICAgaWYgKCFbbV9kZWxl
Z2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxS
ZXR1cm5WYWx1ZXNXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6ZGF0YWJhc2VJZDpx
dWVyeTopXSkgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVy
cm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RhdGFi
YXNlLmV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMnIHdhcyBub3QgZm91bmQiX3Mp
OworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHByb3Rv
Y29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RhdGFiYXNl
LmV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMnIHdhcyBub3QgZm91bmQiX3MpOwog
ICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCiAgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVy
cm9yKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3Io
cmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAg
ICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxs
SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwogICAgICAgICBiYWNr
ZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgIH07CiAKLSAgICBpZCBz
dWNjZXNzQ2FsbGJhY2sgPSBeKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKmNvbHVtbk5hbWVzLCBO
U1N0cmluZyAqKm5vdGVzLCBkb3VibGUgKnRpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0
ICoqdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKipwYXlsb2FkLCBpbnQgKmRhdGFiYXNl
SWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKipzcWxFcnJvciwgVGVzdFByb3RvY29sRGF0
YWJhc2VQcmltYXJ5Q29sb3JzICpzY3JlZW5Db2xvciwgTlNBcnJheS8qPE5TU3RyaW5nPiovICoq
YWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jT3B0aW9u
YWxSZXR1cm5WYWx1ZXNQcmludENvbG9yICpwcmludENvbG9yKSB7Ci0gICAgICAgIFJlZjxKU09O
OjpPYmplY3Q+IHJlc3VsdE9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgICAg
IFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihjb2x1bW5OYW1lcywg
QCJjb2x1bW5OYW1lcyIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05B
TF9QQVJBTUVURVIobm90ZXMsIEAibm90ZXMiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZP
Ul9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKHZhbHVlcywgQCJ2YWx1ZXMiKTsKLSAgICAgICAgVEhS
T1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKHBheWxvYWQsIEAicGF5bG9h
ZCIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIo
c3FsRXJyb3IsIEAic3FsRXJyb3IiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURf
T1BUSU9OQUxfUEFSQU1FVEVSKGFsdGVybmF0ZUNvbG9ycywgQCJhbHRlcm5hdGVDb2xvcnMiKTsK
LSAgICAgICAgaWYgKGNvbHVtbk5hbWVzKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRB
cnJheSgiY29sdW1uTmFtZXMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KCpjb2x1bW5OYW1lcykpOwot
ICAgICAgICBpZiAobm90ZXMpCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZygi
bm90ZXMiX3MsICpub3Rlcyk7Ci0gICAgICAgIGlmICh0aW1lc3RhbXApCi0gICAgICAgICAgICBy
ZXN1bHRPYmplY3QtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCAqdGltZXN0YW1wKTsKLSAgICAg
ICAgaWYgKHZhbHVlcykKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0T2JqZWN0KCJ2YWx1
ZXMiX3MsIFsqdmFsdWVzIHRvSlNPTk9iamVjdF0pOwotICAgICAgICBpZiAocGF5bG9hZCkKLSAg
ICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0VmFsdWUoInBheWxvYWQiX3MsIFsqcGF5bG9hZCB0
b0pTT05PYmplY3RdKTsKLSAgICAgICAgaWYgKGRhdGFiYXNlSWQpCi0gICAgICAgICAgICByZXN1
bHRPYmplY3QtPnNldEludGVnZXIoImRhdGFiYXNlSWQiX3MsICpkYXRhYmFzZUlkKTsKLSAgICAg
ICAgaWYgKHNxbEVycm9yKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRPYmplY3QoInNx
bEVycm9yIl9zLCBbKnNxbEVycm9yIHRvSlNPTk9iamVjdF0pOwotICAgICAgICBpZiAoc2NyZWVu
Q29sb3IpCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZygic2NyZWVuQ29sb3Ii
X3MsIHRvUHJvdG9jb2xTdHJpbmcoKnNjcmVlbkNvbG9yKSk7Ci0gICAgICAgIGlmIChhbHRlcm5h
dGVDb2xvcnMpCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldEFycmF5KCJhbHRlcm5hdGVD
b2xvcnMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KCphbHRlcm5hdGVDb2xvcnMpKTsKLSAgICAgICAg
aWYgKHByaW50Q29sb3IpCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZygicHJp
bnRDb2xvciJfcywgdG9Qcm90b2NvbFN0cmluZygqcHJpbnRDb2xvcikpOwotICAgICAgICBiYWNr
ZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdE9i
amVjdCksIGZhbHNlKTsKKyAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeKE5TQXJyYXkvKjxOU1N0
cmluZz4qLyAqKm91dF9vcHRfY29sdW1uTmFtZXMsIE5TU3RyaW5nICoqb3V0X29wdF9ub3Rlcywg
ZG91YmxlICpvdXRfb3B0X3RpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqb3V0X29w
dF92YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqKm91dF9vcHRfcGF5bG9hZCwgaW50ICpv
dXRfb3B0X2RhdGFiYXNlSWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKipvdXRfb3B0X3Nx
bEVycm9yLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgKm91dF9vcHRfc2NyZWVu
Q29sb3IsIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKm91dF9vcHRfYWx0ZXJuYXRlQ29sb3JzLCBU
ZXN0UHJvdG9jb2xEYXRhYmFzZShhbm9ueW1vdXMpICpvdXRfb3B0X3ByaW50Q29sb3IpIHsKKyAg
ICAgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7
CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihvdXRf
b3B0X2NvbHVtbk5hbWVzLCBAImNvbHVtbk5hbWVzIik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihvdXRfb3B0X25vdGVzLCBAIm5vdGVzIik7Cisg
ICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihvdXRfb3B0
X3ZhbHVlcywgQCJ2YWx1ZXMiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BU
SU9OQUxfUEFSQU1FVEVSKG91dF9vcHRfcGF5bG9hZCwgQCJwYXlsb2FkIik7CisgICAgICAgIFRI
Uk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihvdXRfb3B0X3NxbEVycm9y
LCBAInNxbEVycm9yIik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFM
X1BBUkFNRVRFUihvdXRfb3B0X2FsdGVybmF0ZUNvbG9ycywgQCJhbHRlcm5hdGVDb2xvcnMiKTsK
KyAgICAgICAgaWYgKCEhb3V0X29wdF9jb2x1bW5OYW1lcykKKyAgICAgICAgICAgIHByb3RvY29s
X2pzb25NZXNzYWdlLT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIHRvSlNPTlN0cmluZ0FycmF5
KCpvdXRfb3B0X2NvbHVtbk5hbWVzKSk7CisgICAgICAgIGlmICghIW91dF9vcHRfbm90ZXMpCisg
ICAgICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJub3RlcyJfcywgKm91
dF9vcHRfbm90ZXMpOworICAgICAgICBpZiAoISFvdXRfb3B0X3RpbWVzdGFtcCkKKyAgICAgICAg
ICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywgKm91dF9v
cHRfdGltZXN0YW1wKTsKKyAgICAgICAgaWYgKCEhb3V0X29wdF92YWx1ZXMpCisgICAgICAgICAg
ICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIFsqb3V0X29wdF92
YWx1ZXMgdG9KU09OT2JqZWN0XSk7CisgICAgICAgIGlmICghIW91dF9vcHRfcGF5bG9hZCkKKyAg
ICAgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgWypv
dXRfb3B0X3BheWxvYWQgdG9KU09OT2JqZWN0XSk7CisgICAgICAgIGlmICghIW91dF9vcHRfZGF0
YWJhc2VJZCkKKyAgICAgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRJbnRlZ2VyKCJk
YXRhYmFzZUlkIl9zLCAqb3V0X29wdF9kYXRhYmFzZUlkKTsKKyAgICAgICAgaWYgKCEhb3V0X29w
dF9zcWxFcnJvcikKKyAgICAgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRPYmplY3Qo
InNxbEVycm9yIl9zLCBbKm91dF9vcHRfc3FsRXJyb3IgdG9KU09OT2JqZWN0XSk7CisgICAgICAg
IGlmICghIW91dF9vcHRfc2NyZWVuQ29sb3IpCisgICAgICAgICAgICBwcm90b2NvbF9qc29uTWVz
c2FnZS0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgdG9Qcm90b2NvbFN0cmluZygqb3V0X29w
dF9zY3JlZW5Db2xvcikpOworICAgICAgICBpZiAoISFvdXRfb3B0X2FsdGVybmF0ZUNvbG9ycykK
KyAgICAgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29s
b3JzIl9zLCB0b0pTT05TdHJpbmdBcnJheSgqb3V0X29wdF9hbHRlcm5hdGVDb2xvcnMpKTsKKyAg
ICAgICAgaWYgKCEhb3V0X29wdF9wcmludENvbG9yKQorICAgICAgICAgICAgcHJvdG9jb2xfanNv
bk1lc3NhZ2UtPnNldFN0cmluZygicHJpbnRDb2xvciJfcywgdG9Qcm90b2NvbFN0cmluZygqb3V0
X29wdF9wcmludENvbG9yKSk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNw
b25zZShwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJvdG9jb2xfanNvbk1lc3NhZ2UpLCBmYWxz
ZSk7CiAgICAgfTsKIAogICAgIGludCBvX2luX2RhdGFiYXNlSWQgPSBpbl9kYXRhYmFzZUlkOwog
ICAgIE5TU3RyaW5nICpvX2luX3F1ZXJ5ID0gaW5fcXVlcnk7Ci0KICAgICBbbV9kZWxlZ2F0ZSBl
eGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JD
YWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrIGRhdGFiYXNlSWQ6b19pbl9k
YXRhYmFzZUlkIHF1ZXJ5Om9faW5fcXVlcnldOwogfQogCi12b2lkIE9iakNJbnNwZWN0b3JEYXRh
YmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVl
cyhsb25nIHJlcXVlc3RJZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVl
cnkpCit2b2lkIE9iakNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRl
U1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIHByb3RvY29sX2NhbGxJZCwgaW50IGlu
X2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnkpCiB7CiAgICAgaWYgKCFbbV9kZWxl
Z2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGV4ZWN1dGVTUUxBc3luY09wdGlvbmFs
UmV0dXJuVmFsdWVzV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOmRhdGFiYXNlSWQ6
cXVlcnk6KV0pIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xF
cnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEYXRh
YmFzZS5leGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcycgd2FzIG5vdCBmb3VuZCJf
cyk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocHJv
dG9jb2xfY2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRGF0YWJh
c2UuZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMnIHdhcyBub3QgZm91bmQiX3Mp
OwogICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcg
KmVycm9yKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJy
b3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAg
ICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9j
YWxsSWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwogICAgICAgICBi
YWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgIH07CiAKLSAgICBp
ZCBzdWNjZXNzQ2FsbGJhY2sgPSBeKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKmNvbHVtbk5hbWVz
LCBOU1N0cmluZyAqKm5vdGVzLCBkb3VibGUgKnRpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2Jq
ZWN0ICoqdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKipwYXlsb2FkLCBpbnQgKmRhdGFi
YXNlSWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKipzcWxFcnJvciwgVGVzdFByb3RvY29s
RGF0YWJhc2VQcmltYXJ5Q29sb3JzICpzY3JlZW5Db2xvciwgTlNBcnJheS8qPE5TU3RyaW5nPiov
ICoqYWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY09w
dGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvciAqcHJpbnRDb2xvcikgewotICAgICAgICBSZWY8
SlNPTjo6T2JqZWN0PiByZXN1bHRPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAg
ICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIoY29sdW1uTmFt
ZXMsIEAiY29sdW1uTmFtZXMiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BU
SU9OQUxfUEFSQU1FVEVSKG5vdGVzLCBAIm5vdGVzIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUih2YWx1ZXMsIEAidmFsdWVzIik7Ci0gICAgICAg
IFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihwYXlsb2FkLCBAInBh
eWxvYWQiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1F
VEVSKHNxbEVycm9yLCBAInNxbEVycm9yIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1Jf
QkFEX09QVElPTkFMX1BBUkFNRVRFUihhbHRlcm5hdGVDb2xvcnMsIEAiYWx0ZXJuYXRlQ29sb3Jz
Iik7Ci0gICAgICAgIGlmIChjb2x1bW5OYW1lcykKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+
c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCB0b0pTT05TdHJpbmdBcnJheSgqY29sdW1uTmFtZXMp
KTsKLSAgICAgICAgaWYgKG5vdGVzKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJp
bmcoIm5vdGVzIl9zLCAqbm90ZXMpOwotICAgICAgICBpZiAodGltZXN0YW1wKQotICAgICAgICAg
ICAgcmVzdWx0T2JqZWN0LT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywgKnRpbWVzdGFtcCk7Ci0g
ICAgICAgIGlmICh2YWx1ZXMpCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldE9iamVjdCgi
dmFsdWVzIl9zLCBbKnZhbHVlcyB0b0pTT05PYmplY3RdKTsKLSAgICAgICAgaWYgKHBheWxvYWQp
Ci0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCBbKnBheWxv
YWQgdG9KU09OT2JqZWN0XSk7Ci0gICAgICAgIGlmIChkYXRhYmFzZUlkKQotICAgICAgICAgICAg
cmVzdWx0T2JqZWN0LT5zZXRJbnRlZ2VyKCJkYXRhYmFzZUlkIl9zLCAqZGF0YWJhc2VJZCk7Ci0g
ICAgICAgIGlmIChzcWxFcnJvcikKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0T2JqZWN0
KCJzcWxFcnJvciJfcywgWypzcWxFcnJvciB0b0pTT05PYmplY3RdKTsKLSAgICAgICAgaWYgKHNj
cmVlbkNvbG9yKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoInNjcmVlbkNv
bG9yIl9zLCB0b1Byb3RvY29sU3RyaW5nKCpzY3JlZW5Db2xvcikpOwotICAgICAgICBpZiAoYWx0
ZXJuYXRlQ29sb3JzKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRBcnJheSgiYWx0ZXJu
YXRlQ29sb3JzIl9zLCB0b0pTT05TdHJpbmdBcnJheSgqYWx0ZXJuYXRlQ29sb3JzKSk7Ci0gICAg
ICAgIGlmIChwcmludENvbG9yKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmco
InByaW50Q29sb3IiX3MsIHRvUHJvdG9jb2xTdHJpbmcoKnByaW50Q29sb3IpKTsKLSAgICAgICAg
YmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1
bHRPYmplY3QpLCBmYWxzZSk7CisgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXihOU0FycmF5Lyo8
TlNTdHJpbmc+Ki8gKipvdXRfb3B0X2NvbHVtbk5hbWVzLCBOU1N0cmluZyAqKm91dF9vcHRfbm90
ZXMsIGRvdWJsZSAqb3V0X29wdF90aW1lc3RhbXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqKm91
dF9vcHRfdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKipvdXRfb3B0X3BheWxvYWQsIGlu
dCAqb3V0X29wdF9kYXRhYmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoqb3V0X29w
dF9zcWxFcnJvciwgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzICpvdXRfb3B0X3Nj
cmVlbkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKipvdXRfb3B0X2FsdGVybmF0ZUNvbG9y
cywgVGVzdFByb3RvY29sRGF0YWJhc2UoYW5vbnltb3VzKSAqb3V0X29wdF9wcmludENvbG9yKSB7
CisgICAgICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0
ZSgpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIo
b3V0X29wdF9jb2x1bW5OYW1lcywgQCJjb2x1bW5OYW1lcyIpOworICAgICAgICBUSFJPV19FWENF
UFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIob3V0X29wdF9ub3RlcywgQCJub3RlcyIp
OworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIob3V0
X29wdF92YWx1ZXMsIEAidmFsdWVzIik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFE
X09QVElPTkFMX1BBUkFNRVRFUihvdXRfb3B0X3BheWxvYWQsIEAicGF5bG9hZCIpOworICAgICAg
ICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIob3V0X29wdF9zcWxF
cnJvciwgQCJzcWxFcnJvciIpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJ
T05BTF9QQVJBTUVURVIob3V0X29wdF9hbHRlcm5hdGVDb2xvcnMsIEAiYWx0ZXJuYXRlQ29sb3Jz
Iik7CisgICAgICAgIGlmICghIW91dF9vcHRfY29sdW1uTmFtZXMpCisgICAgICAgICAgICBwcm90
b2NvbF9qc29uTWVzc2FnZS0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCB0b0pTT05TdHJpbmdB
cnJheSgqb3V0X29wdF9jb2x1bW5OYW1lcykpOworICAgICAgICBpZiAoISFvdXRfb3B0X25vdGVz
KQorICAgICAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygibm90ZXMiX3Ms
ICpvdXRfb3B0X25vdGVzKTsKKyAgICAgICAgaWYgKCEhb3V0X29wdF90aW1lc3RhbXApCisgICAg
ICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsICpv
dXRfb3B0X3RpbWVzdGFtcCk7CisgICAgICAgIGlmICghIW91dF9vcHRfdmFsdWVzKQorICAgICAg
ICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldE9iamVjdCgidmFsdWVzIl9zLCBbKm91dF9v
cHRfdmFsdWVzIHRvSlNPTk9iamVjdF0pOworICAgICAgICBpZiAoISFvdXRfb3B0X3BheWxvYWQp
CisgICAgICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0VmFsdWUoInBheWxvYWQiX3Ms
IFsqb3V0X29wdF9wYXlsb2FkIHRvSlNPTk9iamVjdF0pOworICAgICAgICBpZiAoISFvdXRfb3B0
X2RhdGFiYXNlSWQpCisgICAgICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0SW50ZWdl
cigiZGF0YWJhc2VJZCJfcywgKm91dF9vcHRfZGF0YWJhc2VJZCk7CisgICAgICAgIGlmICghIW91
dF9vcHRfc3FsRXJyb3IpCisgICAgICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0T2Jq
ZWN0KCJzcWxFcnJvciJfcywgWypvdXRfb3B0X3NxbEVycm9yIHRvSlNPTk9iamVjdF0pOworICAg
ICAgICBpZiAoISFvdXRfb3B0X3NjcmVlbkNvbG9yKQorICAgICAgICAgICAgcHJvdG9jb2xfanNv
bk1lc3NhZ2UtPnNldFN0cmluZygic2NyZWVuQ29sb3IiX3MsIHRvUHJvdG9jb2xTdHJpbmcoKm91
dF9vcHRfc2NyZWVuQ29sb3IpKTsKKyAgICAgICAgaWYgKCEhb3V0X29wdF9hbHRlcm5hdGVDb2xv
cnMpCisgICAgICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0QXJyYXkoImFsdGVybmF0
ZUNvbG9ycyJfcywgdG9KU09OU3RyaW5nQXJyYXkoKm91dF9vcHRfYWx0ZXJuYXRlQ29sb3JzKSk7
CisgICAgICAgIGlmICghIW91dF9vcHRfcHJpbnRDb2xvcikKKyAgICAgICAgICAgIHByb3RvY29s
X2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoInByaW50Q29sb3IiX3MsIHRvUHJvdG9jb2xTdHJpbmco
Km91dF9vcHRfcHJpbnRDb2xvcikpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5k
UmVzcG9uc2UocHJvdG9jb2xfY2FsbElkLCBXVEZNb3ZlKHByb3RvY29sX2pzb25NZXNzYWdlKSwg
ZmFsc2UpOwogICAgIH07CiAKICAgICBpbnQgb19pbl9kYXRhYmFzZUlkID0gaW5fZGF0YWJhc2VJ
ZDsKICAgICBOU1N0cmluZyAqb19pbl9xdWVyeSA9IGluX3F1ZXJ5OwotCiAgICAgW21fZGVsZWdh
dGUgZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNXaXRoRXJyb3JDYWxsYmFjazpl
cnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2sgZGF0YWJhc2VJZDpv
X2luX2RhdGFiYXNlSWQgcXVlcnk6b19pbl9xdWVyeV07CiB9CiAKLXZvaWQgT2JqQ0luc3BlY3Rv
ckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxTeW5jKGxvbmcgcmVxdWVzdElk
LCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSkKK3ZvaWQgT2JqQ0lu
c3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxTeW5jKGxvbmcgcHJv
dG9jb2xfY2FsbElkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSkK
IHsKICAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoZXhl
Y3V0ZVNRTFN5bmNXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6ZGF0YWJhc2VJZDpx
dWVyeTopXSkgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVy
cm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RhdGFi
YXNlLmV4ZWN1dGVTUUxTeW5jJyB3YXMgbm90IGZvdW5kIl9zKTsKKyAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxsSWQsIEJhY2tlbmRE
aXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEYXRhYmFzZS5leGVjdXRlU1FMU3luYycgd2Fz
IG5vdCBmb3VuZCJfcyk7CiAgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5n
RXJyb3JzKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZCBlcnJvckNhbGxiYWNr
ID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVw
b3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJv
ciwgZXJyb3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVy
cm9yKHByb3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJv
cik7CiAgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CiAg
ICAgfTsKIAotICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF4oTlNBcnJheS8qPE5TU3RyaW5nPiov
ICpjb2x1bW5OYW1lcywgTlNTdHJpbmcgKm5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBSV0lQcm90
b2NvbEpTT05PYmplY3QgKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpwYXlsb2FkLCBp
bnQgZGF0YWJhc2VJZCwgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqc3FsRXJyb3IsIE5TQXJy
YXkvKjxOU1N0cmluZz4qLyAqYWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVBy
aW1hcnlDb2xvcnMgc2NyZWVuQ29sb3IsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5
bmNQcmludENvbG9yIHByaW50Q29sb3IpIHsKLSAgICAgICAgUmVmPEpTT046Ok9iamVjdD4gcmVz
dWx0T2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICAgICAgVEhST1dfRVhDRVBU
SU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoY29sdW1uTmFtZXMsIEAiY29sdW1uTmFtZXMiKTsK
LSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIobm90ZXMsIEAi
bm90ZXMiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIo
dmFsdWVzLCBAInZhbHVlcyIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVE
X1BBUkFNRVRFUihwYXlsb2FkLCBAInBheWxvYWQiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9O
X0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoc3FsRXJyb3IsIEAic3FsRXJyb3IiKTsKLSAgICAgICAg
VEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoYWx0ZXJuYXRlQ29sb3JzLCBA
ImFsdGVybmF0ZUNvbG9ycyIpOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldEFycmF5KCJjb2x1
bW5OYW1lcyJfcywgdG9KU09OU3RyaW5nQXJyYXkoY29sdW1uTmFtZXMpKTsKLSAgICAgICAgcmVz
dWx0T2JqZWN0LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCBub3Rlcyk7Ci0gICAgICAgIHJlc3VsdE9i
amVjdC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsIHRpbWVzdGFtcCk7Ci0gICAgICAgIHJlc3Vs
dE9iamVjdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIFt2YWx1ZXMgdG9KU09OT2JqZWN0XSk7Ci0g
ICAgICAgIHJlc3VsdE9iamVjdC0+c2V0VmFsdWUoInBheWxvYWQiX3MsIFtwYXlsb2FkIHRvSlNP
Tk9iamVjdF0pOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldEludGVnZXIoImRhdGFiYXNlSWQi
X3MsIGRhdGFiYXNlSWQpOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldE9iamVjdCgic3FsRXJy
b3IiX3MsIFtzcWxFcnJvciB0b0pTT05PYmplY3RdKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5z
ZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCB0b0pTT05TdHJpbmdBcnJheShhbHRlcm5hdGVD
b2xvcnMpKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9z
LCB0b1Byb3RvY29sU3RyaW5nKHNjcmVlbkNvbG9yKSk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+
c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCB0b1Byb3RvY29sU3RyaW5nKHByaW50Q29sb3IpKTsK
LSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RG
TW92ZShyZXN1bHRPYmplY3QpLCBmYWxzZSk7CisgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXihO
U0FycmF5Lyo8TlNTdHJpbmc+Ki8gKm91dF9jb2x1bW5OYW1lcywgTlNTdHJpbmcgKm91dF9ub3Rl
cywgZG91YmxlIG91dF90aW1lc3RhbXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqb3V0X3ZhbHVl
cywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpvdXRfcGF5bG9hZCwgaW50IG91dF9kYXRhYmFzZUlk
LCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICpvdXRfc3FsRXJyb3IsIE5TQXJyYXkvKjxOU1N0
cmluZz4qLyAqb3V0X2FsdGVybmF0ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5
Q29sb3JzIG91dF9zY3JlZW5Db2xvciwgVGVzdFByb3RvY29sRGF0YWJhc2UoYW5vbnltb3VzKSBv
dXRfcHJpbnRDb2xvcikgeworICAgICAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNP
Tjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJF
RF9QQVJBTUVURVIob3V0X2NvbHVtbk5hbWVzLCBAImNvbHVtbk5hbWVzIik7CisgICAgICAgIFRI
Uk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKG91dF9ub3RlcywgQCJub3RlcyIp
OworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihvdXRfdmFs
dWVzLCBAInZhbHVlcyIpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BB
UkFNRVRFUihvdXRfcGF5bG9hZCwgQCJwYXlsb2FkIik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKG91dF9zcWxFcnJvciwgQCJzcWxFcnJvciIpOworICAg
ICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihvdXRfYWx0ZXJuYXRl
Q29sb3JzLCBAImFsdGVybmF0ZUNvbG9ycyIpOworICAgICAgICBwcm90b2NvbF9qc29uTWVzc2Fn
ZS0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCB0b0pTT05TdHJpbmdBcnJheShvdXRfY29sdW1u
TmFtZXMpKTsKKyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygibm90ZXMi
X3MsIG91dF9ub3Rlcyk7CisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXREb3VibGUo
InRpbWVzdGFtcCJfcywgb3V0X3RpbWVzdGFtcCk7CisgICAgICAgIHByb3RvY29sX2pzb25NZXNz
YWdlLT5zZXRPYmplY3QoInZhbHVlcyJfcywgW291dF92YWx1ZXMgdG9KU09OT2JqZWN0XSk7Cisg
ICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgW291dF9w
YXlsb2FkIHRvSlNPTk9iamVjdF0pOworICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0
SW50ZWdlcigiZGF0YWJhc2VJZCJfcywgb3V0X2RhdGFiYXNlSWQpOworICAgICAgICBwcm90b2Nv
bF9qc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJzcWxFcnJvciJfcywgW291dF9zcWxFcnJvciB0b0pT
T05PYmplY3RdKTsKKyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldEFycmF5KCJhbHRl
cm5hdGVDb2xvcnMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KG91dF9hbHRlcm5hdGVDb2xvcnMpKTsK
KyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygic2NyZWVuQ29sb3IiX3Ms
IHRvUHJvdG9jb2xTdHJpbmcob3V0X3NjcmVlbkNvbG9yKSk7CisgICAgICAgIHByb3RvY29sX2pz
b25NZXNzYWdlLT5zZXRTdHJpbmcoInByaW50Q29sb3IiX3MsIHRvUHJvdG9jb2xTdHJpbmcob3V0
X3ByaW50Q29sb3IpKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNl
KHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSksIGZhbHNlKTsK
ICAgICB9OwogCiAgICAgaW50IG9faW5fZGF0YWJhc2VJZCA9IGluX2RhdGFiYXNlSWQ7CiAgICAg
TlNTdHJpbmcgKm9faW5fcXVlcnkgPSBpbl9xdWVyeTsKLQogICAgIFttX2RlbGVnYXRlIGV4ZWN1
dGVTUUxTeW5jV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6
c3VjY2Vzc0NhbGxiYWNrIGRhdGFiYXNlSWQ6b19pbl9kYXRhYmFzZUlkIHF1ZXJ5Om9faW5fcXVl
cnldOwogfQogCi12b2lkIE9iakNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpl
eGVjdXRlU1FMQXN5bmMobG9uZyByZXF1ZXN0SWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBT
dHJpbmcmIGluX3F1ZXJ5KQordm9pZCBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0
Y2hlcjo6ZXhlY3V0ZVNRTEFzeW5jKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBpbnQgaW5fZGF0YWJh
c2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSkKIHsKICAgICBpZiAoIVttX2RlbGVnYXRlIHJl
c3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoZXhlY3V0ZVNRTEFzeW5jV2l0aEVycm9yQ2FsbGJh
Y2s6c3VjY2Vzc0NhbGxiYWNrOmRhdGFiYXNlSWQ6cXVlcnk6KV0pIHsKLSAgICAgICAgYmFja2Vu
ZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNw
YXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEYXRhYmFzZS5leGVjdXRlU1FMQXN5bmMnIHdhcyBu
b3QgZm91bmQiX3MpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2Nv
bEVycm9yKHByb3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5k
LCAiJ0RhdGFiYXNlLmV4ZWN1dGVTUUxBc3luYycgd2FzIG5vdCBmb3VuZCJfcyk7CiAgICAgICAg
IGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKICAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsK
LSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0
SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgICAgICBiYWNr
ZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHByb3RvY29sX2NhbGxJZCwgQmFj
a2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CiAgICAgICAgIGJhY2tlbmREaXNw
YXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgfTsKIAotICAgIGlkIHN1Y2Nlc3ND
YWxsYmFjayA9IF4oTlNBcnJheS8qPE5TU3RyaW5nPiovICpjb2x1bW5OYW1lcywgTlNTdHJpbmcg
Km5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKnZhbHVlcywg
UldJUHJvdG9jb2xKU09OT2JqZWN0ICpwYXlsb2FkLCBpbnQgZGF0YWJhc2VJZCwgVGVzdFByb3Rv
Y29sRGF0YWJhc2VFcnJvciAqc3FsRXJyb3IsIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNv
bG9ycyBzY3JlZW5Db2xvciwgTlNBcnJheS8qPE5TU3RyaW5nPiovICphbHRlcm5hdGVDb2xvcnMs
IFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jUHJpbnRDb2xvciBwcmludENvbG9y
KSB7Ci0gICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdE9iamVjdCA9IEpTT046Ok9iamVj
dDo6Y3JlYXRlKCk7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1F
VEVSKGNvbHVtbk5hbWVzLCBAImNvbHVtbk5hbWVzIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKG5vdGVzLCBAIm5vdGVzIik7Ci0gICAgICAgIFRIUk9X
X0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKHZhbHVlcywgQCJ2YWx1ZXMiKTsKLSAg
ICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIocGF5bG9hZCwgQCJw
YXlsb2FkIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVS
KHNxbEVycm9yLCBAInNxbEVycm9yIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVR
VUlSRURfUEFSQU1FVEVSKGFsdGVybmF0ZUNvbG9ycywgQCJhbHRlcm5hdGVDb2xvcnMiKTsKLSAg
ICAgICAgcmVzdWx0T2JqZWN0LT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIHRvSlNPTlN0cmlu
Z0FycmF5KGNvbHVtbk5hbWVzKSk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKCJu
b3RlcyJfcywgbm90ZXMpOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldERvdWJsZSgidGltZXN0
YW1wIl9zLCB0aW1lc3RhbXApOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldE9iamVjdCgidmFs
dWVzIl9zLCBbdmFsdWVzIHRvSlNPTk9iamVjdF0pOwotICAgICAgICByZXN1bHRPYmplY3QtPnNl
dFZhbHVlKCJwYXlsb2FkIl9zLCBbcGF5bG9hZCB0b0pTT05PYmplY3RdKTsKLSAgICAgICAgcmVz
dWx0T2JqZWN0LT5zZXRJbnRlZ2VyKCJkYXRhYmFzZUlkIl9zLCBkYXRhYmFzZUlkKTsKLSAgICAg
ICAgcmVzdWx0T2JqZWN0LT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBbc3FsRXJyb3IgdG9KU09O
T2JqZWN0XSk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJf
cywgdG9Qcm90b2NvbFN0cmluZyhzY3JlZW5Db2xvcikpOwotICAgICAgICByZXN1bHRPYmplY3Qt
PnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KGFsdGVybmF0
ZUNvbG9ycykpOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZygicHJpbnRDb2xvciJf
cywgdG9Qcm90b2NvbFN0cmluZyhwcmludENvbG9yKSk7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRj
aGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0T2JqZWN0KSwgZmFs
c2UpOworICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF4oTlNBcnJheS8qPE5TU3RyaW5nPiovICpv
dXRfY29sdW1uTmFtZXMsIE5TU3RyaW5nICpvdXRfbm90ZXMsIGRvdWJsZSBvdXRfdGltZXN0YW1w
LCBSV0lQcm90b2NvbEpTT05PYmplY3QgKm91dF92YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVj
dCAqb3V0X3BheWxvYWQsIGludCBvdXRfZGF0YWJhc2VJZCwgVGVzdFByb3RvY29sRGF0YWJhc2VF
cnJvciAqb3V0X3NxbEVycm9yLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgb3V0
X3NjcmVlbkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKm91dF9hbHRlcm5hdGVDb2xvcnMs
IFRlc3RQcm90b2NvbERhdGFiYXNlKGFub255bW91cykgb3V0X3ByaW50Q29sb3IpIHsKKyAgICAg
ICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Cisg
ICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKG91dF9jb2x1bW5O
YW1lcywgQCJjb2x1bW5OYW1lcyIpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJ
UkVEX1BBUkFNRVRFUihvdXRfbm90ZXMsIEAibm90ZXMiKTsKKyAgICAgICAgVEhST1dfRVhDRVBU
SU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIob3V0X3ZhbHVlcywgQCJ2YWx1ZXMiKTsKKyAgICAg
ICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIob3V0X3BheWxvYWQsIEAi
cGF5bG9hZCIpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRF
UihvdXRfc3FsRXJyb3IsIEAic3FsRXJyb3IiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZP
Ul9SRVFVSVJFRF9QQVJBTUVURVIob3V0X2FsdGVybmF0ZUNvbG9ycywgQCJhbHRlcm5hdGVDb2xv
cnMiKTsKKyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldEFycmF5KCJjb2x1bW5OYW1l
cyJfcywgdG9KU09OU3RyaW5nQXJyYXkob3V0X2NvbHVtbk5hbWVzKSk7CisgICAgICAgIHByb3Rv
Y29sX2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm5vdGVzIl9zLCBvdXRfbm90ZXMpOworICAgICAg
ICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsIG91dF90aW1l
c3RhbXApOworICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJ2YWx1ZXMi
X3MsIFtvdXRfdmFsdWVzIHRvSlNPTk9iamVjdF0pOworICAgICAgICBwcm90b2NvbF9qc29uTWVz
c2FnZS0+c2V0VmFsdWUoInBheWxvYWQiX3MsIFtvdXRfcGF5bG9hZCB0b0pTT05PYmplY3RdKTsK
KyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldEludGVnZXIoImRhdGFiYXNlSWQiX3Ms
IG91dF9kYXRhYmFzZUlkKTsKKyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldE9iamVj
dCgic3FsRXJyb3IiX3MsIFtvdXRfc3FsRXJyb3IgdG9KU09OT2JqZWN0XSk7CisgICAgICAgIHBy
b3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCB0b1Byb3RvY29s
U3RyaW5nKG91dF9zY3JlZW5Db2xvcikpOworICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+
c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywgdG9KU09OU3RyaW5nQXJyYXkob3V0X2FsdGVy
bmF0ZUNvbG9ycykpOworICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJw
cmludENvbG9yIl9zLCB0b1Byb3RvY29sU3RyaW5nKG91dF9wcmludENvbG9yKSk7CisgICAgICAg
IGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShwcm90b2NvbF9jYWxsSWQsIFdURk1v
dmUocHJvdG9jb2xfanNvbk1lc3NhZ2UpLCBmYWxzZSk7CiAgICAgfTsKIAogICAgIGludCBvX2lu
X2RhdGFiYXNlSWQgPSBpbl9kYXRhYmFzZUlkOwogICAgIE5TU3RyaW5nICpvX2luX3F1ZXJ5ID0g
aW5fcXVlcnk7Ci0KICAgICBbbV9kZWxlZ2F0ZSBleGVjdXRlU1FMQXN5bmNXaXRoRXJyb3JDYWxs
YmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2sgZGF0YWJh
c2VJZDpvX2luX2RhdGFiYXNlSWQgcXVlcnk6b19pbl9xdWVyeV07CiB9CiAKQEAgLTEzNDYsMTAg
KzEzMTQsMTAgQEAgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCiAKIEBw
cm90b2NvbCBUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkhhbmRsZXIgPE5TT2JqZWN0PgogQG9w
dGlvbmFsCi0tICh2b2lkKWV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNXaXRoRXJy
b3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vz
c0NhbGxiYWNrOih2b2lkKF4pKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKmNvbHVtbk5hbWVzLCBO
U1N0cmluZyAqKm5vdGVzLCBkb3VibGUgKnRpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0
ICoqdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKipwYXlsb2FkLCBpbnQgKmRhdGFiYXNl
SWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKipzcWxFcnJvciwgVGVzdFByb3RvY29sRGF0
YWJhc2VQcmltYXJ5Q29sb3JzICpzY3JlZW5Db2xvciwgTlNBcnJheS8qPE5TU3RyaW5nPiovICoq
YWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jT3B0aW9u
YWxSZXR1cm5WYWx1ZXNQcmludENvbG9yICpwcmludENvbG9yKSlzdWNjZXNzQ2FsbGJhY2sgZGF0
YWJhc2VJZDooaW50KWRhdGFiYXNlSWQgcXVlcnk6KE5TU3RyaW5nICopcXVlcnk7Ci0tICh2b2lk
KWV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzV2l0aEVycm9yQ2FsbGJhY2s6KHZv
aWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9p
ZCheKShOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKipjb2x1bW5OYW1lcywgTlNTdHJpbmcgKipub3Rl
cywgZG91YmxlICp0aW1lc3RhbXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqKnZhbHVlcywgUldJ
UHJvdG9jb2xKU09OT2JqZWN0ICoqcGF5bG9hZCwgaW50ICpkYXRhYmFzZUlkLCBUZXN0UHJvdG9j
b2xEYXRhYmFzZUVycm9yICoqc3FsRXJyb3IsIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNv
bG9ycyAqc2NyZWVuQ29sb3IsIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKmFsdGVybmF0ZUNvbG9y
cywgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVl
c1ByaW50Q29sb3IgKnByaW50Q29sb3IpKXN1Y2Nlc3NDYWxsYmFjayBkYXRhYmFzZUlkOihpbnQp
ZGF0YWJhc2VJZCBxdWVyeTooTlNTdHJpbmcgKilxdWVyeTsKLS0gKHZvaWQpZXhlY3V0ZVNRTFN5
bmNXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJh
Y2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqY29sdW1u
TmFtZXMsIE5TU3RyaW5nICpub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09O
T2JqZWN0ICp2YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqcGF5bG9hZCwgaW50IGRhdGFi
YXNlSWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKnNxbEVycm9yLCBOU0FycmF5Lyo8TlNT
dHJpbmc+Ki8gKmFsdGVybmF0ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29s
b3JzIHNjcmVlbkNvbG9yLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jUHJpbnRD
b2xvciBwcmludENvbG9yKSlzdWNjZXNzQ2FsbGJhY2sgZGF0YWJhc2VJZDooaW50KWRhdGFiYXNl
SWQgcXVlcnk6KE5TU3RyaW5nICopcXVlcnk7Ci0tICh2b2lkKWV4ZWN1dGVTUUxBc3luY1dpdGhF
cnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNj
ZXNzQ2FsbGJhY2s6KHZvaWQoXikoTlNBcnJheS8qPE5TU3RyaW5nPiovICpjb2x1bW5OYW1lcywg
TlNTdHJpbmcgKm5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05PYmplY3Qg
KnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpwYXlsb2FkLCBpbnQgZGF0YWJhc2VJZCwg
VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqc3FsRXJyb3IsIFRlc3RQcm90b2NvbERhdGFiYXNl
UHJpbWFyeUNvbG9ycyBzY3JlZW5Db2xvciwgTlNBcnJheS8qPE5TU3RyaW5nPiovICphbHRlcm5h
dGVDb2xvcnMsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jUHJpbnRDb2xvciBw
cmludENvbG9yKSlzdWNjZXNzQ2FsbGJhY2sgZGF0YWJhc2VJZDooaW50KWRhdGFiYXNlSWQgcXVl
cnk6KE5TU3RyaW5nICopcXVlcnk7CistICh2b2lkKWV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1
cm5WYWx1ZXNXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9y
Q2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAq
KmNvbHVtbk5hbWVzLCBOU1N0cmluZyAqKm5vdGVzLCBkb3VibGUgKnRpbWVzdGFtcCwgUldJUHJv
dG9jb2xKU09OT2JqZWN0ICoqdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKipwYXlsb2Fk
LCBpbnQgKmRhdGFiYXNlSWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKipzcWxFcnJvciwg
VGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzICpzY3JlZW5Db2xvciwgTlNBcnJheS8q
PE5TU3RyaW5nPiovICoqYWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZShhbm9u
eW1vdXMpICpwcmludENvbG9yKSlzdWNjZXNzQ2FsbGJhY2sgZGF0YWJhc2VJZDooaW50KWRhdGFi
YXNlSWQgcXVlcnk6KE5TU3RyaW5nICopcXVlcnk7CistICh2b2lkKWV4ZWN1dGVTUUxBc3luY09w
dGlvbmFsUmV0dXJuVmFsdWVzV2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVy
cm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKShOU0FycmF5Lyo8TlNT
dHJpbmc+Ki8gKipjb2x1bW5OYW1lcywgTlNTdHJpbmcgKipub3RlcywgZG91YmxlICp0aW1lc3Rh
bXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0
ICoqcGF5bG9hZCwgaW50ICpkYXRhYmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoq
c3FsRXJyb3IsIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyAqc2NyZWVuQ29sb3Is
IE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKmFsdGVybmF0ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0
YWJhc2UoYW5vbnltb3VzKSAqcHJpbnRDb2xvcikpc3VjY2Vzc0NhbGxiYWNrIGRhdGFiYXNlSWQ6
KGludClkYXRhYmFzZUlkIHF1ZXJ5OihOU1N0cmluZyAqKXF1ZXJ5OworLSAodm9pZClleGVjdXRl
U1FMU3luY1dpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JD
YWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikoTlNBcnJheS8qPE5TU3RyaW5nPiovICpj
b2x1bW5OYW1lcywgTlNTdHJpbmcgKm5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBSV0lQcm90b2Nv
bEpTT05PYmplY3QgKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpwYXlsb2FkLCBpbnQg
ZGF0YWJhc2VJZCwgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqc3FsRXJyb3IsIE5TQXJyYXkv
KjxOU1N0cmluZz4qLyAqYWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1h
cnlDb2xvcnMgc2NyZWVuQ29sb3IsIFRlc3RQcm90b2NvbERhdGFiYXNlKGFub255bW91cykgcHJp
bnRDb2xvcikpc3VjY2Vzc0NhbGxiYWNrIGRhdGFiYXNlSWQ6KGludClkYXRhYmFzZUlkIHF1ZXJ5
OihOU1N0cmluZyAqKXF1ZXJ5OworLSAodm9pZClleGVjdXRlU1FMQXN5bmNXaXRoRXJyb3JDYWxs
YmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxi
YWNrOih2b2lkKF4pKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqY29sdW1uTmFtZXMsIE5TU3RyaW5n
ICpub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0ICp2YWx1ZXMs
IFJXSVByb3RvY29sSlNPTk9iamVjdCAqcGF5bG9hZCwgaW50IGRhdGFiYXNlSWQsIFRlc3RQcm90
b2NvbERhdGFiYXNlRXJyb3IgKnNxbEVycm9yLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlD
b2xvcnMgc2NyZWVuQ29sb3IsIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqYWx0ZXJuYXRlQ29sb3Jz
LCBUZXN0UHJvdG9jb2xEYXRhYmFzZShhbm9ueW1vdXMpIHByaW50Q29sb3IpKXN1Y2Nlc3NDYWxs
YmFjayBkYXRhYmFzZUlkOihpbnQpZGF0YWJhc2VJZCBxdWVyeTooTlNTdHJpbmcgKilxdWVyeTsK
IEBlbmQKIAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1w
YXJhbWV0ZXJzLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2NvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4t
cGFyYW1ldGVycy5qc29uLXJlc3VsdAppbmRleCAxZjJmNDVkNzRjMzkzOTExMTIzNmE4NjdkN2Zm
ZmQyNDBlNmQ5OWM1Li4zZTQ0Mjc0ODk0YzJlZDA2NGVlOGQxOTllMWEwZTRjMTE0NGFiZmNlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
ZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpz
b24tcmVzdWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9leHBlY3RlZC9jb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRl
cnMuanNvbi1yZXN1bHQKQEAgLTcwLDcgKzcwLDcgQEAgSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0
ZURvbWFpbigiRGF0YWJhc2UiLCBudWxsKTsKIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJO
QVRFX0RJU1BBVENIRVJTKQogCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKKyNpbmNs
dWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JGcm9udGVuZFJvdXRlci5oPgogCkBAIC04OCw4ICs4OCw4IEBAIHByaXZhdGU6CiBjbGFz
cyBBbHRlcm5hdGVEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyIDogcHVibGljIEFsdGVybmF0ZUJh
Y2tlbmREaXNwYXRjaGVyIHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5BbHRlcm5hdGVEYXRhYmFz
ZUJhY2tlbmREaXNwYXRjaGVyKCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVBbGxPcHRp
b25hbFBhcmFtZXRlcnMobG9uZyBjYWxsSWQsIGNvbnN0IEpTT046OkFycmF5KiBpbl9jb2x1bW5O
YW1lcywgY29uc3QgU3RyaW5nKiBpbl9ub3RlcywgY29uc3QgZG91YmxlKiBpbl90aW1lc3RhbXAs
IGNvbnN0IEpTT046Ok9iamVjdCogaW5fdmFsdWVzLCBjb25zdCBKU09OOjpWYWx1ZSogaW5fcGF5
bG9hZCwgY29uc3QgaW50KiBpbl9kYXRhYmFzZUlkLCBjb25zdCBKU09OOjpPYmplY3QqIGluX3Nx
bEVycm9yLCBjb25zdCBTdHJpbmcqIGluX3NjcmVlbkNvbG9yLCBjb25zdCBKU09OOjpBcnJheSog
aW5fYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcqIGluX3ByaW50Q29sb3IpID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgY2FsbElkLCBj
b25zdCBKU09OOjpBcnJheSYgaW5fY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgaW5fbm90ZXMs
IGRvdWJsZSBpbl90aW1lc3RhbXAsIGNvbnN0IEpTT046Ok9iamVjdCYgaW5fdmFsdWVzLCBKU09O
OjpWYWx1ZSBpbl9wYXlsb2FkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgSlNPTjo6T2JqZWN0
JiBpbl9zcWxFcnJvciwgY29uc3QgU3RyaW5nJiBpbl9zY3JlZW5Db2xvciwgY29uc3QgSlNPTjo6
QXJyYXkmIGluX2FsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nJiBpbl9wcmludENvbG9yKSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMobG9uZyBw
cm90b2NvbF9jYWxsSWQsIFJlZlB0cjxKU09OOjpBcnJheT4mJiBvcHRfY29sdW1uTmFtZXMsIGNv
bnN0IFN0cmluZyYgb3B0X25vdGVzLCBPcHRpb25hbDxkb3VibGU+JiYgb3B0X3RpbWVzdGFtcCwg
UmVmUHRyPEpTT046Ok9iamVjdD4mJiBvcHRfdmFsdWVzLCBSZWZQdHI8SlNPTjo6VmFsdWU+JiYg
b3B0X3BheWxvYWQsIE9wdGlvbmFsPGludD4mJiBvcHRfZGF0YWJhc2VJZCwgUmVmUHRyPEpTT046
Ok9iamVjdD4mJiBvcHRfc3FsRXJyb3IsIGNvbnN0IFN0cmluZyYgb3B0X3NjcmVlbkNvbG9yLCBS
ZWZQdHI8SlNPTjo6QXJyYXk+JiYgb3B0X2FsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nJiBv
cHRfcHJpbnRDb2xvcikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlTm9PcHRpb25hbFBh
cmFtZXRlcnMobG9uZyBwcm90b2NvbF9jYWxsSWQsIFJlZjxKU09OOjpBcnJheT4mJiBjb2x1bW5O
YW1lcywgY29uc3QgU3RyaW5nJiBub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgUmVmPEpTT046Ok9i
amVjdD4mJiB2YWx1ZXMsIFJlZjxKU09OOjpWYWx1ZT4mJiBwYXlsb2FkLCBpbnQgZGF0YWJhc2VJ
ZCwgUmVmPEpTT046Ok9iamVjdD4mJiBzcWxFcnJvciwgY29uc3QgU3RyaW5nJiBzY3JlZW5Db2xv
ciwgUmVmPEpTT046OkFycmF5PiYmIGFsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nJiBwcmlu
dENvbG9yKSA9IDA7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKQEAgLTEzMSwxMSAr
MTMxLDE0IEBAIHB1YmxpYzoKIAogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2lu
Y2x1ZGUgPHR1cGxlPgorI2luY2x1ZGUgPHd0Zi9FeHBlY3RlZC5oPgorI2luY2x1ZGUgPHd0Zi9P
cHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKIAotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKIAogI2lmIEVOQUJM
RShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogY2xhc3MgQWx0ZXJuYXRlRGF0YWJh
c2VCYWNrZW5kRGlzcGF0Y2hlcjsKQEAgLTE0MywxNSArMTQ2LDggQEAgY2xhc3MgQWx0ZXJuYXRl
RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjsKIAogY2xhc3MgRGF0YWJhc2VCYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXIgewogcHVibGljOgotICAgIC8vIE5hbWVkIGFmdGVyIHBhcmFtZXRlciAncHJp
bnRDb2xvcicgd2hpbGUgZ2VuZXJhdGluZyBjb21tYW5kL2V2ZW50IGV4ZWN1dGVBbGxPcHRpb25h
bFBhcmFtZXRlcnMuCi0gICAgZW51bSBjbGFzcyBQcmludENvbG9yIHsKLSAgICAgICAgQ3lhbiA9
IDMsCi0gICAgICAgIE1hZ2VudGEgPSA0LAotICAgICAgICBZZWxsb3cgPSA1LAotICAgICAgICBC
bGFjayA9IDYsCi0gICAgfTsgLy8gZW51bSBjbGFzcyBQcmludENvbG9yCi0gICAgdmlydHVhbCB2
b2lkIGV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMoRXJyb3JTdHJpbmcmLCBjb25zdCBKU09O
OjpBcnJheSogb3B0X2luX2NvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcqIG9wdF9pbl9ub3Rlcywg
Y29uc3QgZG91YmxlKiBvcHRfaW5fdGltZXN0YW1wLCBjb25zdCBKU09OOjpPYmplY3QqIG9wdF9p
bl92YWx1ZXMsIGNvbnN0IEpTT046OlZhbHVlKiBvcHRfaW5fcGF5bG9hZCwgY29uc3QgaW50KiBv
cHRfaW5fZGF0YWJhc2VJZCwgY29uc3QgSlNPTjo6T2JqZWN0KiBvcHRfaW5fc3FsRXJyb3IsIGNv
bnN0IFN0cmluZyogb3B0X2luX3NjcmVlbkNvbG9yLCBjb25zdCBKU09OOjpBcnJheSogb3B0X2lu
X2FsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nKiBvcHRfaW5fcHJpbnRDb2xvciwgUmVmUHRy
PEpTT046OkFycmF5T2Y8U3RyaW5nPj4mIG9wdF9vdXRfY29sdW1uTmFtZXMsIE9wdGlvbmFsPFN0
cmluZz4mIG9wdF9vdXRfbm90ZXMsIE9wdGlvbmFsPGRvdWJsZT4mIG9wdF9vdXRfdGltZXN0YW1w
LCBPcHRpb25hbDxKU09OOjpPYmplY3Q+JiBvcHRfb3V0X3ZhbHVlcywgT3B0aW9uYWw8SlNPTjo6
VmFsdWU+JiBvcHRfb3V0X3BheWxvYWQsIE9wdGlvbmFsPGludD4mIG9wdF9vdXRfZGF0YWJhc2VJ
ZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4mIG9wdF9vdXRf
c3FsRXJyb3IsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzKiBv
cHRfb3V0X3NjcmVlbkNvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6
OkNvbG9yTGlzdD4mIG9wdF9vdXRfYWx0ZXJuYXRlQ29sb3JzLCBEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVySGFuZGxlcjo6UHJpbnRDb2xvciogb3B0X291dF9wcmludENvbG9yKSA9IDA7Ci0gICAg
dmlydHVhbCB2b2lkIGV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhFcnJvclN0cmluZyYsIGNv
bnN0IEpTT046OkFycmF5JiBpbl9jb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBpbl9ub3Rlcywg
ZG91YmxlIGluX3RpbWVzdGFtcCwgY29uc3QgSlNPTjo6T2JqZWN0JiBpbl92YWx1ZXMsIEpTT046
OlZhbHVlIGluX3BheWxvYWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBKU09OOjpPYmplY3Qm
IGluX3NxbEVycm9yLCBjb25zdCBTdHJpbmcmIGluX3NjcmVlbkNvbG9yLCBjb25zdCBKU09OOjpB
cnJheSYgaW5fYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcmIGluX3ByaW50Q29sb3IsIFJl
ZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+JiBvdXRfY29sdW1uTmFtZXMsIFN0cmluZyogb3V0
X25vdGVzLCBkb3VibGUqIG91dF90aW1lc3RhbXAsIEpTT046Ok9iamVjdCogb3V0X3ZhbHVlcywg
SlNPTjo6VmFsdWUqIG91dF9wYXlsb2FkLCBpbnQqIG91dF9kYXRhYmFzZUlkLCBSZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiYgb3V0X3NxbEVycm9yLCBJbnNwZWN0
b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyogb3V0X3NjcmVlbkNvbG9yLCBS
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4mIG91dF9hbHRl
cm5hdGVDb2xvcnMsIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQcmludENvbG9y
KiBvdXRfcHJpbnRDb2xvcikgPSAwOworICAgIHZpcnR1YWwgUHJvdG9jb2w6OkVycm9yU3RyaW5n
T3I8c3RkOjp0dXBsZTxSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiAvKiBvcHRfY29sdW1u
TmFtZXMgKi8sIFN0cmluZyAvKiBvcHRfbm90ZXMgKi8sIE9wdGlvbmFsPGRvdWJsZT4gLyogb3B0
X3RpbWVzdGFtcCAqLywgUmVmUHRyPEpTT046Ok9iamVjdD4gLyogb3B0X3ZhbHVlcyAqLywgUmVm
UHRyPEpTT046OlZhbHVlPiAvKiBvcHRfcGF5bG9hZCAqLywgT3B0aW9uYWw8aW50PiAvKiBvcHRf
ZGF0YWJhc2VJZCAqLywgUmVmUHRyPFByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IC8qIG9wdF9z
cWxFcnJvciAqLywgT3B0aW9uYWw8UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPiAv
KiBvcHRfc2NyZWVuQ29sb3IgKi8sIFJlZlB0cjxQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlz
dD4gLyogb3B0X2FsdGVybmF0ZUNvbG9ycyAqLywgU3RyaW5nIC8qIG9wdF9wcmludENvbG9yICov
Pj4gZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhSZWZQdHI8SlNPTjo6QXJyYXk+JiYgb3B0
X2NvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIG9wdF9ub3RlcywgT3B0aW9uYWw8ZG91YmxlPiYm
IG9wdF90aW1lc3RhbXAsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgb3B0X3ZhbHVlcywgUmVmUHRy
PEpTT046OlZhbHVlPiYmIG9wdF9wYXlsb2FkLCBPcHRpb25hbDxpbnQ+JiYgb3B0X2RhdGFiYXNl
SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgb3B0X3NxbEVycm9yLCBPcHRpb25hbDxQcm90b2Nv
bDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+JiYgb3B0X3NjcmVlbkNvbG9yLCBSZWZQdHI8SlNP
Tjo6QXJyYXk+JiYgb3B0X2FsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nJiBvcHRfcHJpbnRD
b2xvcikgPSAwOworICAgIHZpcnR1YWwgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8c3RkOjp0dXBs
ZTxSZWY8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiAvKiBjb2x1bW5OYW1lcyAqLywgU3RyaW5nIC8q
IG5vdGVzICovLCBkb3VibGUgLyogdGltZXN0YW1wICovLCBSZWY8SlNPTjo6T2JqZWN0PiAvKiB2
YWx1ZXMgKi8sIFJlZjxKU09OOjpWYWx1ZT4gLyogcGF5bG9hZCAqLywgaW50IC8qIGRhdGFiYXNl
SWQgKi8sIFJlZjxQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiAvKiBzcWxFcnJvciAqLywgUHJv
dG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzIC8qIHNjcmVlbkNvbG9yICovLCBSZWY8UHJv
dG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+IC8qIGFsdGVybmF0ZUNvbG9ycyAqLywgU3RyaW5n
IC8qIHByaW50Q29sb3IgKi8+PiBleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMoUmVmPEpTT046
OkFycmF5PiYmIGNvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIG5vdGVzLCBkb3VibGUgdGltZXN0
YW1wLCBSZWY8SlNPTjo6T2JqZWN0PiYmIHZhbHVlcywgUmVmPEpTT046OlZhbHVlPiYmIHBheWxv
YWQsIGludCBkYXRhYmFzZUlkLCBSZWY8SlNPTjo6T2JqZWN0PiYmIHNxbEVycm9yLCBQcm90b2Nv
bDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMgc2NyZWVuQ29sb3IsIFJlZjxKU09OOjpBcnJheT4m
JiBhbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyYgcHJpbnRDb2xvcikgPSAwOwogcHJvdGVj
dGVkOgogICAgIHZpcnR1YWwgfkRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCk7CiB9
OwpAQCAtMTU5LDEwICsxNTUsMTAgQEAgcHJvdGVjdGVkOgogY2xhc3MgRGF0YWJhc2VCYWNrZW5k
RGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7
CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyPiBjcmVh
dGUoQmFja2VuZERpc3BhdGNoZXImLCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciop
OwotICAgIHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9k
LCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpIGZpbmFsOworICAgIHZvaWQgZGlzcGF0Y2go
bG9uZyBwcm90b2NvbF9jYWxsSWQsIGNvbnN0IFN0cmluZyYgcHJvdG9jb2xfbWV0aG9kLCBSZWY8
SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX21lc3NhZ2UpIGZpbmFsOwogcHJpdmF0ZToKLSAgICB2
b2lkIGV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxK
U09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7Ci0gICAgdm9pZCBleGVjdXRlTm9PcHRpb25hbFBh
cmFtZXRlcnMobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVy
cyk7CisgICAgdm9pZCBleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcHJvdG9jbF9j
YWxsSWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfcGFyYW1ldGVycyk7CisgICAg
dm9pZCBleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMobG9uZyBwcm90b2NsX2NhbGxJZCwgUmVm
UHRyPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9wYXJhbWV0ZXJzKTsKICNpZiBFTkFCTEUoSU5T
UEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIHB1YmxpYzoKICAgICB2b2lkIHNldEFsdGVy
bmF0ZURpc3BhdGNoZXIoQWx0ZXJuYXRlRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciogYWx0ZXJu
YXRlRGlzcGF0Y2hlcikgeyBtX2FsdGVybmF0ZURpc3BhdGNoZXIgPSBhbHRlcm5hdGVEaXNwYXRj
aGVyOyB9CkBAIC0yMTEsOSArMjA3LDcgQEAgcHJpdmF0ZToKICNpbmNsdWRlICJUZXN0QmFja2Vu
ZERpc3BhdGNoZXJzLmgiCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9u
dGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CiAjaW5jbHVkZSA8d3Rm
L05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiAjaWYg
RU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAjaW5jbHVkZSAiVGVzdEFs
dGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgpAQCAtMjM1LDQ3ICsyMjksMzYgQEAgRGF0YWJh
c2VCYWNrZW5kRGlzcGF0Y2hlcjo6RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlz
cGF0Y2hlciYgYmFja2VuZEQKICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3Bh
dGNoZXJGb3JEb21haW4oIkRhdGFiYXNlIl9zLCB0aGlzKTsKIH0KIAotdm9pZCBEYXRhYmFzZUJh
Y2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBt
ZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkKK3ZvaWQgRGF0YWJhc2VCYWNrZW5k
RGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyBwcm90b2NvbF9jYWxsSWQsIGNvbnN0IFN0cmluZyYg
cHJvdG9jb2xfbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX21lc3NhZ2UpCiB7
CiAgICAgUmVmPERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOwogCi0g
ICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVyczsKLSAgICBtZXNzYWdlLT5nZXRPYmpl
Y3QoInBhcmFtcyJfcywgcGFyYW1ldGVycyk7CisgICAgYXV0byBwcm90b2NvbF9wYXJhbWV0ZXJz
ID0gcHJvdG9jb2xfbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3MpOwogCi0gICAgaWYgKG1l
dGhvZCA9PSAiZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyIpIHsKLSAgICAgICAgZXhlY3V0
ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykpOwor
ICAgIGlmIChwcm90b2NvbF9tZXRob2QgPT0gImV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMi
KSB7CisgICAgICAgIGV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMocHJvdG9jb2xfY2FsbElk
LCBXVEZNb3ZlKHByb3RvY29sX3BhcmFtZXRlcnMpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
LSAgICBpZiAobWV0aG9kID09ICJleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMiKSB7Ci0gICAg
ICAgIGV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1l
dGVycykpOworICAgIGlmIChwcm90b2NvbF9tZXRob2QgPT0gImV4ZWN1dGVOb09wdGlvbmFsUGFy
YW1ldGVycyIpIHsKKyAgICAgICAgZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKHByb3RvY29s
X2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9wYXJhbWV0ZXJzKSk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJh
Y2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEYXRhYmFzZS4iICsgbWV0aG9kICsg
Iicgd2FzIG5vdCBmb3VuZCIpOworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3Rv
Y29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RhdGFiYXNlLiIg
KyBwcm90b2NvbF9tZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7CiB9CiAKLXZvaWQgRGF0YWJh
c2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhsb25nIHJl
cXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKQordm9pZCBEYXRhYmFz
ZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcHJv
dG9jb2xfY2FsbElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX3BhcmFtZXRlcnMp
CiB7Ci0gICAgYm9vbCBvcHRfaW5fY29sdW1uTmFtZXNfdmFsdWVGb3VuZCA9IGZhbHNlOwotICAg
IFJlZlB0cjxKU09OOjpBcnJheT4gb3B0X2luX2NvbHVtbk5hbWVzID0gbV9iYWNrZW5kRGlzcGF0
Y2hlci0+Z2V0QXJyYXkocGFyYW1ldGVycy5nZXQoKSwgImNvbHVtbk5hbWVzIl9zLCAmb3B0X2lu
X2NvbHVtbk5hbWVzX3ZhbHVlRm91bmQpOwotICAgIGJvb2wgb3B0X2luX25vdGVzX3ZhbHVlRm91
bmQgPSBmYWxzZTsKLSAgICBTdHJpbmcgb3B0X2luX25vdGVzID0gbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+Z2V0U3RyaW5nKHBhcmFtZXRlcnMuZ2V0KCksICJub3RlcyJfcywgJm9wdF9pbl9ub3Rlc192
YWx1ZUZvdW5kKTsKLSAgICBib29sIG9wdF9pbl90aW1lc3RhbXBfdmFsdWVGb3VuZCA9IGZhbHNl
OwotICAgIGRvdWJsZSBvcHRfaW5fdGltZXN0YW1wID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0
RG91YmxlKHBhcmFtZXRlcnMuZ2V0KCksICJ0aW1lc3RhbXAiX3MsICZvcHRfaW5fdGltZXN0YW1w
X3ZhbHVlRm91bmQpOwotICAgIGJvb2wgb3B0X2luX3ZhbHVlc192YWx1ZUZvdW5kID0gZmFsc2U7
Ci0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gb3B0X2luX3ZhbHVlcyA9IG1fYmFja2VuZERpc3Bh
dGNoZXItPmdldE9iamVjdChwYXJhbWV0ZXJzLmdldCgpLCAidmFsdWVzIl9zLCAmb3B0X2luX3Zh
bHVlc192YWx1ZUZvdW5kKTsKLSAgICBib29sIG9wdF9pbl9wYXlsb2FkX3ZhbHVlRm91bmQgPSBm
YWxzZTsKLSAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IG9wdF9pbl9wYXlsb2FkID0gbV9iYWNrZW5k
RGlzcGF0Y2hlci0+Z2V0VmFsdWUocGFyYW1ldGVycy5nZXQoKSwgInBheWxvYWQiX3MsICZvcHRf
aW5fcGF5bG9hZF92YWx1ZUZvdW5kKTsKLSAgICBib29sIG9wdF9pbl9kYXRhYmFzZUlkX3ZhbHVl
Rm91bmQgPSBmYWxzZTsKLSAgICBpbnQgb3B0X2luX2RhdGFiYXNlSWQgPSBtX2JhY2tlbmREaXNw
YXRjaGVyLT5nZXRJbnRlZ2VyKHBhcmFtZXRlcnMuZ2V0KCksICJkYXRhYmFzZUlkIl9zLCAmb3B0
X2luX2RhdGFiYXNlSWRfdmFsdWVGb3VuZCk7Ci0gICAgYm9vbCBvcHRfaW5fc3FsRXJyb3JfdmFs
dWVGb3VuZCA9IGZhbHNlOwotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG9wdF9pbl9zcWxFcnJv
ciA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldE9iamVjdChwYXJhbWV0ZXJzLmdldCgpLCAic3Fs
RXJyb3IiX3MsICZvcHRfaW5fc3FsRXJyb3JfdmFsdWVGb3VuZCk7Ci0gICAgYm9vbCBvcHRfaW5f
c2NyZWVuQ29sb3JfdmFsdWVGb3VuZCA9IGZhbHNlOwotICAgIFN0cmluZyBvcHRfaW5fc2NyZWVu
Q29sb3IgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRTdHJpbmcocGFyYW1ldGVycy5nZXQoKSwg
InNjcmVlbkNvbG9yIl9zLCAmb3B0X2luX3NjcmVlbkNvbG9yX3ZhbHVlRm91bmQpOwotICAgIGJv
b2wgb3B0X2luX2FsdGVybmF0ZUNvbG9yc192YWx1ZUZvdW5kID0gZmFsc2U7Ci0gICAgUmVmUHRy
PEpTT046OkFycmF5PiBvcHRfaW5fYWx0ZXJuYXRlQ29sb3JzID0gbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+Z2V0QXJyYXkocGFyYW1ldGVycy5nZXQoKSwgImFsdGVybmF0ZUNvbG9ycyJfcywgJm9wdF9p
bl9hbHRlcm5hdGVDb2xvcnNfdmFsdWVGb3VuZCk7Ci0gICAgYm9vbCBvcHRfaW5fcHJpbnRDb2xv
cl92YWx1ZUZvdW5kID0gZmFsc2U7Ci0gICAgU3RyaW5nIG9wdF9pbl9wcmludENvbG9yID0gbV9i
YWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3RyaW5nKHBhcmFtZXRlcnMuZ2V0KCksICJwcmludENvbG9y
Il9zLCAmb3B0X2luX3ByaW50Q29sb3JfdmFsdWVGb3VuZCk7CisgICAgYXV0byBpbl9vcHRfY29s
dW1uTmFtZXMgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRBcnJheShwcm90b2NvbF9wYXJhbWV0
ZXJzLmdldCgpLCAiY29sdW1uTmFtZXMiX3MsIGZhbHNlKTsKKyAgICBhdXRvIGluX29wdF9ub3Rl
cyA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFN0cmluZyhwcm90b2NvbF9wYXJhbWV0ZXJzLmdl
dCgpLCAibm90ZXMiX3MsIGZhbHNlKTsKKyAgICBhdXRvIGluX29wdF90aW1lc3RhbXAgPSBtX2Jh
Y2tlbmREaXNwYXRjaGVyLT5nZXREb3VibGUocHJvdG9jb2xfcGFyYW1ldGVycy5nZXQoKSwgInRp
bWVzdGFtcCJfcywgZmFsc2UpOworICAgIGF1dG8gaW5fb3B0X3ZhbHVlcyA9IG1fYmFja2VuZERp
c3BhdGNoZXItPmdldE9iamVjdChwcm90b2NvbF9wYXJhbWV0ZXJzLmdldCgpLCAidmFsdWVzIl9z
LCBmYWxzZSk7CisgICAgYXV0byBpbl9vcHRfcGF5bG9hZCA9IG1fYmFja2VuZERpc3BhdGNoZXIt
PmdldFZhbHVlKHByb3RvY29sX3BhcmFtZXRlcnMuZ2V0KCksICJwYXlsb2FkIl9zLCBmYWxzZSk7
CisgICAgYXV0byBpbl9vcHRfZGF0YWJhc2VJZCA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldElu
dGVnZXIocHJvdG9jb2xfcGFyYW1ldGVycy5nZXQoKSwgImRhdGFiYXNlSWQiX3MsIGZhbHNlKTsK
KyAgICBhdXRvIGluX29wdF9zcWxFcnJvciA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldE9iamVj
dChwcm90b2NvbF9wYXJhbWV0ZXJzLmdldCgpLCAic3FsRXJyb3IiX3MsIGZhbHNlKTsKKyAgICBh
dXRvIGluX29wdF9zY3JlZW5Db2xvcl9qc29uID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3Ry
aW5nKHByb3RvY29sX3BhcmFtZXRlcnMuZ2V0KCksICJzY3JlZW5Db2xvciJfcywgZmFsc2UpOwor
ICAgIGF1dG8gaW5fb3B0X2FsdGVybmF0ZUNvbG9ycyA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdl
dEFycmF5KHByb3RvY29sX3BhcmFtZXRlcnMuZ2V0KCksICJhbHRlcm5hdGVDb2xvcnMiX3MsIGZh
bHNlKTsKKyAgICBhdXRvIGluX29wdF9wcmludENvbG9yID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+
Z2V0U3RyaW5nKHByb3RvY29sX3BhcmFtZXRlcnMuZ2V0KCksICJwcmludENvbG9yIl9zLCBmYWxz
ZSk7CiAgICAgaWYgKG1fYmFja2VuZERpc3BhdGNoZXItPmhhc1Byb3RvY29sRXJyb3JzKCkpIHsK
ICAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5k
RGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFtcywgIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnRGF0
YWJhc2UuZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycycgY2FuJ3QgYmUgcHJvY2Vzc2VkIl9z
KTsKICAgICAgICAgcmV0dXJuOwpAQCAtMjgzLDY1ICsyNjYsNTggQEAgdm9pZCBEYXRhYmFzZUJh
Y2tlbmREaXNwYXRjaGVyOjpleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcmVxdWVz
dElkLCBSZWYKIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQog
ICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVEaXNw
YXRjaGVyLT5leGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKHJlcXVlc3RJZCwgb3B0X2luX2Nv
bHVtbk5hbWVzX3ZhbHVlRm91bmQgPyBvcHRfaW5fY29sdW1uTmFtZXMuZ2V0KCkgOiBudWxscHRy
LCBvcHRfaW5fbm90ZXNfdmFsdWVGb3VuZCA/ICZvcHRfaW5fbm90ZXMgOiBudWxscHRyLCBvcHRf
aW5fdGltZXN0YW1wX3ZhbHVlRm91bmQgPyAmb3B0X2luX3RpbWVzdGFtcCA6IG51bGxwdHIsIG9w
dF9pbl92YWx1ZXNfdmFsdWVGb3VuZCA/IG9wdF9pbl92YWx1ZXMuZ2V0KCkgOiBudWxscHRyLCBv
cHRfaW5fcGF5bG9hZF92YWx1ZUZvdW5kID8gb3B0X2luX3BheWxvYWQuZ2V0KCkgOiBudWxscHRy
LCBvcHRfaW5fZGF0YWJhc2VJZF92YWx1ZUZvdW5kID8gJm9wdF9pbl9kYXRhYmFzZUlkIDogbnVs
bHB0ciwgb3B0X2luX3NxbEVycm9yX3ZhbHVlRm91bmQgPyBvcHRfaW5fc3FsRXJyb3IuZ2V0KCkg
OiBudWxscHRyLCBvcHRfaW5fc2NyZWVuQ29sb3JfdmFsdWVGb3VuZCA/ICZvcHRfaW5fc2NyZWVu
Q29sb3IgOiBudWxscHRyLCBvcHRfaW5fYWx0ZXJuYXRlQ29sb3JzX3ZhbHVlRm91bmQgPyBvcHRf
aW5fYWx0ZXJuYXRlQ29sb3JzLmdldCgpIDogbnVsbHB0ciwgb3B0X2luX3ByaW50Q29sb3JfdmFs
dWVGb3VuZCA/ICZvcHRfaW5fcHJpbnRDb2xvciA6IG51bGxwdHIpOworICAgICAgICBtX2FsdGVy
bmF0ZURpc3BhdGNoZXItPmV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMocHJvdG9jb2xfY2Fs
bElkLCBXVEZNb3ZlKGluX29wdF9jb2x1bW5OYW1lcyksIGluX29wdF9ub3RlcywgV1RGTW92ZShp
bl9vcHRfdGltZXN0YW1wKSwgV1RGTW92ZShpbl9vcHRfdmFsdWVzKSwgV1RGTW92ZShpbl9vcHRf
cGF5bG9hZCksIFdURk1vdmUoaW5fb3B0X2RhdGFiYXNlSWQpLCBXVEZNb3ZlKGluX29wdF9zcWxF
cnJvciksIGluX29wdF9zY3JlZW5Db2xvcl9qc29uLCBXVEZNb3ZlKGluX29wdF9hbHRlcm5hdGVD
b2xvcnMpLCBpbl9vcHRfcHJpbnRDb2xvcik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5k
aWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAKLSAgICBFcnJv
clN0cmluZyBlcnJvcjsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmpl
Y3Q6OmNyZWF0ZSgpOwotICAgIFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+IG91dF9jb2x1
bW5OYW1lczsKLSAgICBPcHRpb25hbDxTdHJpbmc+IG91dF9ub3RlczsKLSAgICBPcHRpb25hbDxk
b3VibGU+IG91dF90aW1lc3RhbXA7Ci0gICAgT3B0aW9uYWw8SlNPTjo6T2JqZWN0PiBvdXRfdmFs
dWVzOwotICAgIE9wdGlvbmFsPEpTT046OlZhbHVlPiBvdXRfcGF5bG9hZDsKLSAgICBPcHRpb25h
bDxpbnQ+IG91dF9kYXRhYmFzZUlkOwotICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpE
YXRhYmFzZTo6RXJyb3I+IG91dF9zcWxFcnJvcjsKLSAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpE
YXRhYmFzZTo6UHJpbWFyeUNvbG9ycyBvdXRfc2NyZWVuQ29sb3I7Ci0gICAgUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+IG91dF9hbHRlcm5hdGVDb2xvcnM7
Ci0gICAgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3Igb3V0X3By
aW50Q29sb3I7Ci0gICAgbV9hZ2VudC0+ZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhlcnJv
ciwgb3B0X2luX2NvbHVtbk5hbWVzX3ZhbHVlRm91bmQgPyBvcHRfaW5fY29sdW1uTmFtZXMuZ2V0
KCkgOiBudWxscHRyLCBvcHRfaW5fbm90ZXNfdmFsdWVGb3VuZCA/ICZvcHRfaW5fbm90ZXMgOiBu
dWxscHRyLCBvcHRfaW5fdGltZXN0YW1wX3ZhbHVlRm91bmQgPyAmb3B0X2luX3RpbWVzdGFtcCA6
IG51bGxwdHIsIG9wdF9pbl92YWx1ZXNfdmFsdWVGb3VuZCA/IG9wdF9pbl92YWx1ZXMuZ2V0KCkg
OiBudWxscHRyLCBvcHRfaW5fcGF5bG9hZF92YWx1ZUZvdW5kID8gb3B0X2luX3BheWxvYWQuZ2V0
KCkgOiBudWxscHRyLCBvcHRfaW5fZGF0YWJhc2VJZF92YWx1ZUZvdW5kID8gJm9wdF9pbl9kYXRh
YmFzZUlkIDogbnVsbHB0ciwgb3B0X2luX3NxbEVycm9yX3ZhbHVlRm91bmQgPyBvcHRfaW5fc3Fs
RXJyb3IuZ2V0KCkgOiBudWxscHRyLCBvcHRfaW5fc2NyZWVuQ29sb3JfdmFsdWVGb3VuZCA/ICZv
cHRfaW5fc2NyZWVuQ29sb3IgOiBudWxscHRyLCBvcHRfaW5fYWx0ZXJuYXRlQ29sb3JzX3ZhbHVl
Rm91bmQgPyBvcHRfaW5fYWx0ZXJuYXRlQ29sb3JzLmdldCgpIDogbnVsbHB0ciwgb3B0X2luX3By
aW50Q29sb3JfdmFsdWVGb3VuZCA/ICZvcHRfaW5fcHJpbnRDb2xvciA6IG51bGxwdHIsIG91dF9j
b2x1bW5OYW1lcywgb3V0X25vdGVzLCBvdXRfdGltZXN0YW1wLCBvdXRfdmFsdWVzLCBvdXRfcGF5
bG9hZCwgb3V0X2RhdGFiYXNlSWQsIG91dF9zcWxFcnJvciwgb3V0X3NjcmVlbkNvbG9yLCBvdXRf
YWx0ZXJuYXRlQ29sb3JzLCBvdXRfcHJpbnRDb2xvcik7CisgICAgYXV0byBpbl9vcHRfc2NyZWVu
Q29sb3IgPSBQcm90b2NvbDo6VGVzdEhlbHBlcnM6OnBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxQ
cm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+KGluX29wdF9zY3JlZW5Db2xvcl9qc29u
KTsKIAotICAgIGlmICghZXJyb3IubGVuZ3RoKCkpIHsKLSAgICAgICAgaWYgKG91dF9jb2x1bW5O
YW1lcykKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCBvdXRf
Y29sdW1uTmFtZXMpOwotICAgICAgICBpZiAob3V0X25vdGVzLmhhc1ZhbHVlKCkpCi0gICAgICAg
ICAgICByZXN1bHQtPnNldFN0cmluZygibm90ZXMiX3MsICpvdXRfbm90ZXMpOwotICAgICAgICBp
ZiAob3V0X3RpbWVzdGFtcC5oYXNWYWx1ZSgpKQotICAgICAgICAgICAgcmVzdWx0LT5zZXREb3Vi
bGUoInRpbWVzdGFtcCJfcywgKm91dF90aW1lc3RhbXApOwotICAgICAgICBpZiAob3V0X3ZhbHVl
cy5oYXNWYWx1ZSgpKQotICAgICAgICAgICAgcmVzdWx0LT5zZXRPYmplY3QoInZhbHVlcyJfcywg
Km91dF92YWx1ZXMpOwotICAgICAgICBpZiAob3V0X3BheWxvYWQuaGFzVmFsdWUoKSkKLSAgICAg
ICAgICAgIHJlc3VsdC0+c2V0VmFsdWUoInBheWxvYWQiX3MsICpvdXRfcGF5bG9hZCk7Ci0gICAg
ICAgIGlmIChvdXRfZGF0YWJhc2VJZC5oYXNWYWx1ZSgpKQotICAgICAgICAgICAgcmVzdWx0LT5z
ZXRJbnRlZ2VyKCJkYXRhYmFzZUlkIl9zLCAqb3V0X2RhdGFiYXNlSWQpOwotICAgICAgICBpZiAo
b3V0X3NxbEVycm9yKQotICAgICAgICAgICAgcmVzdWx0LT5zZXRPYmplY3QoInNxbEVycm9yIl9z
LCBvdXRfc3FsRXJyb3IpOwotICAgICAgICBpZiAob3V0X3NjcmVlbkNvbG9yLmhhc1ZhbHVlKCkp
Ci0gICAgICAgICAgICByZXN1bHQtPnNldFN0cmluZygic2NyZWVuQ29sb3IiX3MsICpvdXRfc2Ny
ZWVuQ29sb3IpOwotICAgICAgICBpZiAob3V0X2FsdGVybmF0ZUNvbG9ycykKLSAgICAgICAgICAg
IHJlc3VsdC0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywgb3V0X2FsdGVybmF0ZUNvbG9y
cyk7Ci0gICAgICAgIGlmIChvdXRfcHJpbnRDb2xvci5oYXNWYWx1ZSgpKQotICAgICAgICAgICAg
cmVzdWx0LT5zZXRTdHJpbmcoInByaW50Q29sb3IiX3MsICpvdXRfcHJpbnRDb2xvcik7CisgICAg
YXV0byByZXN1bHQgPSBtX2FnZW50LT5leGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKFdURk1v
dmUoaW5fb3B0X2NvbHVtbk5hbWVzKSwgaW5fb3B0X25vdGVzLCBXVEZNb3ZlKGluX29wdF90aW1l
c3RhbXApLCBXVEZNb3ZlKGluX29wdF92YWx1ZXMpLCBXVEZNb3ZlKGluX29wdF9wYXlsb2FkKSwg
V1RGTW92ZShpbl9vcHRfZGF0YWJhc2VJZCksIFdURk1vdmUoaW5fb3B0X3NxbEVycm9yKSwgV1RG
TW92ZShpbl9vcHRfc2NyZWVuQ29sb3IpLCBXVEZNb3ZlKGluX29wdF9hbHRlcm5hdGVDb2xvcnMp
LCBpbl9vcHRfcHJpbnRDb2xvcik7CisgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAgICAgQVNTRVJU
KCFyZXN1bHQuZXJyb3IoKS5pc0VtcHR5KCkpOworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVy
LT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgcmVz
dWx0LmVycm9yKCkpOworICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmICghZXJyb3IubGVu
Z3RoKCkpCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0
SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2UpOwotICAgIGVsc2UKLSAgICAgICAgbV9iYWNrZW5k
RGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVy
RXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKKworICAgIGF1dG8gW291dF9vcHRfY29sdW1uTmFtZXMs
IG91dF9vcHRfbm90ZXMsIG91dF9vcHRfdGltZXN0YW1wLCBvdXRfb3B0X3ZhbHVlcywgb3V0X29w
dF9wYXlsb2FkLCBvdXRfb3B0X2RhdGFiYXNlSWQsIG91dF9vcHRfc3FsRXJyb3IsIG91dF9vcHRf
c2NyZWVuQ29sb3IsIG91dF9vcHRfYWx0ZXJuYXRlQ29sb3JzLCBvdXRfb3B0X3ByaW50Q29sb3Jd
ID0gV1RGTW92ZShyZXN1bHQudmFsdWUoKSk7CisKKyAgICBhdXRvIHByb3RvY29sX2pzb25NZXNz
YWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBpZiAoISFvdXRfb3B0X2NvbHVtbk5h
bWVzKQorICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0QXJyYXkoImNvbHVtbk5hbWVz
Il9zLCBvdXRfb3B0X2NvbHVtbk5hbWVzLnJlbGVhc2VOb25OdWxsKCkpOworICAgIGlmICghIW91
dF9vcHRfbm90ZXMpCisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm5v
dGVzIl9zLCBvdXRfb3B0X25vdGVzKTsKKyAgICBpZiAoISFvdXRfb3B0X3RpbWVzdGFtcCkKKyAg
ICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCAqb3V0
X29wdF90aW1lc3RhbXApOworICAgIGlmICghIW91dF9vcHRfdmFsdWVzKQorICAgICAgICBwcm90
b2NvbF9qc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIG91dF9vcHRfdmFsdWVzLnJl
bGVhc2VOb25OdWxsKCkpOworICAgIGlmICghIW91dF9vcHRfcGF5bG9hZCkKKyAgICAgICAgcHJv
dG9jb2xfanNvbk1lc3NhZ2UtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCBvdXRfb3B0X3BheWxvYWQu
cmVsZWFzZU5vbk51bGwoKSk7CisgICAgaWYgKCEhb3V0X29wdF9kYXRhYmFzZUlkKQorICAgICAg
ICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0SW50ZWdlcigiZGF0YWJhc2VJZCJfcywgKm91dF9v
cHRfZGF0YWJhc2VJZCk7CisgICAgaWYgKCEhb3V0X29wdF9zcWxFcnJvcikKKyAgICAgICAgcHJv
dG9jb2xfanNvbk1lc3NhZ2UtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIG91dF9vcHRfc3FsRXJy
b3IucmVsZWFzZU5vbk51bGwoKSk7CisgICAgaWYgKCEhb3V0X29wdF9zY3JlZW5Db2xvcikKKyAg
ICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygic2NyZWVuQ29sb3IiX3MsIFBy
b3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUoKm91dF9vcHRfc2NyZWVu
Q29sb3IpKTsKKyAgICBpZiAoISFvdXRfb3B0X2FsdGVybmF0ZUNvbG9ycykKKyAgICAgICAgcHJv
dG9jb2xfanNvbk1lc3NhZ2UtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIG91dF9vcHRf
YWx0ZXJuYXRlQ29sb3JzLnJlbGVhc2VOb25OdWxsKCkpOworICAgIGlmICghIW91dF9vcHRfcHJp
bnRDb2xvcikKKyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygicHJpbnRD
b2xvciJfcywgb3V0X29wdF9wcmludENvbG9yKTsKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5z
ZW5kUmVzcG9uc2UocHJvdG9jb2xfY2FsbElkLCBXVEZNb3ZlKHByb3RvY29sX2pzb25NZXNzYWdl
KSwgZmFsc2UpOwogfQogCi12b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVO
b09wdGlvbmFsUGFyYW1ldGVycyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4m
JiBwYXJhbWV0ZXJzKQordm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlTm9P
cHRpb25hbFBhcmFtZXRlcnMobG9uZyBwcm90b2NvbF9jYWxsSWQsIFJlZlB0cjxKU09OOjpPYmpl
Y3Q+JiYgcHJvdG9jb2xfcGFyYW1ldGVycykKIHsKLSAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IGlu
X2NvbHVtbk5hbWVzID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0QXJyYXkocGFyYW1ldGVycy5n
ZXQoKSwgImNvbHVtbk5hbWVzIl9zLCBudWxscHRyKTsKLSAgICBTdHJpbmcgaW5fbm90ZXMgPSBt
X2JhY2tlbmREaXNwYXRjaGVyLT5nZXRTdHJpbmcocGFyYW1ldGVycy5nZXQoKSwgIm5vdGVzIl9z
LCBudWxscHRyKTsKLSAgICBkb3VibGUgaW5fdGltZXN0YW1wID0gbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+Z2V0RG91YmxlKHBhcmFtZXRlcnMuZ2V0KCksICJ0aW1lc3RhbXAiX3MsIG51bGxwdHIpOwot
ICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IGluX3ZhbHVlcyA9IG1fYmFja2VuZERpc3BhdGNoZXIt
PmdldE9iamVjdChwYXJhbWV0ZXJzLmdldCgpLCAidmFsdWVzIl9zLCBudWxscHRyKTsKLSAgICBS
ZWZQdHI8SlNPTjo6VmFsdWU+IGluX3BheWxvYWQgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRW
YWx1ZShwYXJhbWV0ZXJzLmdldCgpLCAicGF5bG9hZCJfcywgbnVsbHB0cik7Ci0gICAgaW50IGlu
X2RhdGFiYXNlSWQgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRJbnRlZ2VyKHBhcmFtZXRlcnMu
Z2V0KCksICJkYXRhYmFzZUlkIl9zLCBudWxscHRyKTsKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0
PiBpbl9zcWxFcnJvciA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldE9iamVjdChwYXJhbWV0ZXJz
LmdldCgpLCAic3FsRXJyb3IiX3MsIG51bGxwdHIpOwotICAgIFN0cmluZyBpbl9zY3JlZW5Db2xv
ciA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFN0cmluZyhwYXJhbWV0ZXJzLmdldCgpLCAic2Ny
ZWVuQ29sb3IiX3MsIG51bGxwdHIpOwotICAgIFJlZlB0cjxKU09OOjpBcnJheT4gaW5fYWx0ZXJu
YXRlQ29sb3JzID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0QXJyYXkocGFyYW1ldGVycy5nZXQo
KSwgImFsdGVybmF0ZUNvbG9ycyJfcywgbnVsbHB0cik7Ci0gICAgU3RyaW5nIGluX3ByaW50Q29s
b3IgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRTdHJpbmcocGFyYW1ldGVycy5nZXQoKSwgInBy
aW50Q29sb3IiX3MsIG51bGxwdHIpOworICAgIGF1dG8gaW5fY29sdW1uTmFtZXMgPSBtX2JhY2tl
bmREaXNwYXRjaGVyLT5nZXRBcnJheShwcm90b2NvbF9wYXJhbWV0ZXJzLmdldCgpLCAiY29sdW1u
TmFtZXMiX3MsIHRydWUpOworICAgIGF1dG8gaW5fbm90ZXMgPSBtX2JhY2tlbmREaXNwYXRjaGVy
LT5nZXRTdHJpbmcocHJvdG9jb2xfcGFyYW1ldGVycy5nZXQoKSwgIm5vdGVzIl9zLCB0cnVlKTsK
KyAgICBhdXRvIGluX3RpbWVzdGFtcCA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldERvdWJsZShw
cm90b2NvbF9wYXJhbWV0ZXJzLmdldCgpLCAidGltZXN0YW1wIl9zLCB0cnVlKTsKKyAgICBhdXRv
IGluX3ZhbHVlcyA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldE9iamVjdChwcm90b2NvbF9wYXJh
bWV0ZXJzLmdldCgpLCAidmFsdWVzIl9zLCB0cnVlKTsKKyAgICBhdXRvIGluX3BheWxvYWQgPSBt
X2JhY2tlbmREaXNwYXRjaGVyLT5nZXRWYWx1ZShwcm90b2NvbF9wYXJhbWV0ZXJzLmdldCgpLCAi
cGF5bG9hZCJfcywgdHJ1ZSk7CisgICAgYXV0byBpbl9kYXRhYmFzZUlkID0gbV9iYWNrZW5kRGlz
cGF0Y2hlci0+Z2V0SW50ZWdlcihwcm90b2NvbF9wYXJhbWV0ZXJzLmdldCgpLCAiZGF0YWJhc2VJ
ZCJfcywgdHJ1ZSk7CisgICAgYXV0byBpbl9zcWxFcnJvciA9IG1fYmFja2VuZERpc3BhdGNoZXIt
PmdldE9iamVjdChwcm90b2NvbF9wYXJhbWV0ZXJzLmdldCgpLCAic3FsRXJyb3IiX3MsIHRydWUp
OworICAgIGF1dG8gaW5fc2NyZWVuQ29sb3JfanNvbiA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdl
dFN0cmluZyhwcm90b2NvbF9wYXJhbWV0ZXJzLmdldCgpLCAic2NyZWVuQ29sb3IiX3MsIHRydWUp
OworICAgIGF1dG8gaW5fYWx0ZXJuYXRlQ29sb3JzID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0
QXJyYXkocHJvdG9jb2xfcGFyYW1ldGVycy5nZXQoKSwgImFsdGVybmF0ZUNvbG9ycyJfcywgdHJ1
ZSk7CisgICAgYXV0byBpbl9wcmludENvbG9yID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3Ry
aW5nKHByb3RvY29sX3BhcmFtZXRlcnMuZ2V0KCksICJwcmludENvbG9yIl9zLCB0cnVlKTsKICAg
ICBpZiAobV9iYWNrZW5kRGlzcGF0Y2hlci0+aGFzUHJvdG9jb2xFcnJvcnMoKSkgewogICAgICAg
ICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRj
aGVyOjpJbnZhbGlkUGFyYW1zLCAiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICdEYXRhYmFzZS5l
eGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMnIGNhbid0IGJlIHByb2Nlc3NlZCJfcyk7CiAgICAg
ICAgIHJldHVybjsKQEAgLTM0OSw0MSArMzI1LDM4IEBAIHZvaWQgRGF0YWJhc2VCYWNrZW5kRGlz
cGF0Y2hlcjo6ZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcmVxdWVzdElkLCBSZWZQ
CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKICAgICBpZiAo
bV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+
ZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKHJlcXVlc3RJZCwgKmluX2NvbHVtbk5hbWVzLCBp
bl9ub3RlcywgaW5fdGltZXN0YW1wLCAqaW5fdmFsdWVzLCAqaW5fcGF5bG9hZCwgaW5fZGF0YWJh
c2VJZCwgKmluX3NxbEVycm9yLCBpbl9zY3JlZW5Db2xvciwgKmluX2FsdGVybmF0ZUNvbG9ycywg
aW5fcHJpbnRDb2xvcik7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+ZXhlY3V0ZU5v
T3B0aW9uYWxQYXJhbWV0ZXJzKHByb3RvY29sX2NhbGxJZCwgaW5fY29sdW1uTmFtZXMucmVsZWFz
ZU5vbk51bGwoKSwgaW5fbm90ZXMsICppbl90aW1lc3RhbXAsIGluX3ZhbHVlcy5yZWxlYXNlTm9u
TnVsbCgpLCBpbl9wYXlsb2FkLnJlbGVhc2VOb25OdWxsKCksICppbl9kYXRhYmFzZUlkLCBpbl9z
cWxFcnJvci5yZWxlYXNlTm9uTnVsbCgpLCBpbl9zY3JlZW5Db2xvcl9qc29uLCBpbl9hbHRlcm5h
dGVDb2xvcnMucmVsZWFzZU5vbk51bGwoKSwgaW5fcHJpbnRDb2xvcik7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hF
UlMpCiAKLSAgICBFcnJvclN0cmluZyBlcnJvcjsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1
bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIFJlZlB0cjxKU09OOjpBcnJheU9mPFN0
cmluZz4+IG91dF9jb2x1bW5OYW1lczsKLSAgICBTdHJpbmcgb3V0X25vdGVzOwotICAgIGRvdWJs
ZSBvdXRfdGltZXN0YW1wOwotICAgIEpTT046Ok9iamVjdCBvdXRfdmFsdWVzOwotICAgIEpTT046
OlZhbHVlIG91dF9wYXlsb2FkOwotICAgIGludCBvdXRfZGF0YWJhc2VJZDsKLSAgICBSZWZQdHI8
SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiBvdXRfc3FsRXJyb3I7Ci0gICAg
SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMgb3V0X3NjcmVlbkNv
bG9yOwotICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0
PiBvdXRfYWx0ZXJuYXRlQ29sb3JzOwotICAgIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyOjpQcmludENvbG9yIG91dF9wcmludENvbG9yOwotICAgIG1fYWdlbnQtPmV4ZWN1dGVOb09w
dGlvbmFsUGFyYW1ldGVycyhlcnJvciwgKmluX2NvbHVtbk5hbWVzLCBpbl9ub3RlcywgaW5fdGlt
ZXN0YW1wLCAqaW5fdmFsdWVzLCAqaW5fcGF5bG9hZCwgaW5fZGF0YWJhc2VJZCwgKmluX3NxbEVy
cm9yLCBpbl9zY3JlZW5Db2xvciwgKmluX2FsdGVybmF0ZUNvbG9ycywgaW5fcHJpbnRDb2xvciwg
b3V0X2NvbHVtbk5hbWVzLCAmb3V0X25vdGVzLCAmb3V0X3RpbWVzdGFtcCwgb3V0X3ZhbHVlcywg
Jm91dF9wYXlsb2FkLCAmb3V0X2RhdGFiYXNlSWQsIG91dF9zcWxFcnJvciwgJm91dF9zY3JlZW5D
b2xvciwgb3V0X2FsdGVybmF0ZUNvbG9ycywgJm91dF9wcmludENvbG9yKTsKLQotICAgIGlmICgh
ZXJyb3IubGVuZ3RoKCkpIHsKLSAgICAgICAgcmVzdWx0LT5zZXRBcnJheSgiY29sdW1uTmFtZXMi
X3MsIG91dF9jb2x1bW5OYW1lcyk7Ci0gICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJub3RlcyJf
cywgb3V0X25vdGVzKTsKLSAgICAgICAgcmVzdWx0LT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywg
b3V0X3RpbWVzdGFtcCk7Ci0gICAgICAgIHJlc3VsdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIG91
dF92YWx1ZXMpOwotICAgICAgICByZXN1bHQtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCBvdXRfcGF5
bG9hZCk7Ci0gICAgICAgIHJlc3VsdC0+c2V0SW50ZWdlcigiZGF0YWJhc2VJZCJfcywgb3V0X2Rh
dGFiYXNlSWQpOwotICAgICAgICByZXN1bHQtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIG91dF9z
cWxFcnJvcik7Ci0gICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgSW5z
cGVjdG9yOjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKG91dF9z
Y3JlZW5Db2xvcikpOwotICAgICAgICByZXN1bHQtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMi
X3MsIG91dF9hbHRlcm5hdGVDb2xvcnMpOwotICAgICAgICByZXN1bHQtPnNldFN0cmluZygicHJp
bnRDb2xvciJfcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25z
dGFudFZhbHVlKG91dF9wcmludENvbG9yKSk7CisgICAgYXV0byBpbl9zY3JlZW5Db2xvciA9IFBy
b3RvY29sOjpUZXN0SGVscGVyczo6cGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPFByb3RvY29sOjpE
YXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4oaW5fc2NyZWVuQ29sb3JfanNvbik7CisgICAgaWYgKCFp
bl9zY3JlZW5Db2xvcikgeworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90
b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgbWFrZVN0cmluZygiVW5r
bm93biBzY3JlZW5Db2xvcjogIl9zLCBpbl9zY3JlZW5Db2xvcl9qc29uKSk7CisgICAgICAgIHJl
dHVybjsKICAgICB9Ci0gICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKLSAgICAgICAgbV9iYWNrZW5k
RGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxz
ZSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2Nv
bEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOwor
CisgICAgYXV0byByZXN1bHQgPSBtX2FnZW50LT5leGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMo
aW5fY29sdW1uTmFtZXMucmVsZWFzZU5vbk51bGwoKSwgaW5fbm90ZXMsICppbl90aW1lc3RhbXAs
IGluX3ZhbHVlcy5yZWxlYXNlTm9uTnVsbCgpLCBpbl9wYXlsb2FkLnJlbGVhc2VOb25OdWxsKCks
ICppbl9kYXRhYmFzZUlkLCBpbl9zcWxFcnJvci5yZWxlYXNlTm9uTnVsbCgpLCAqaW5fc2NyZWVu
Q29sb3IsIGluX2FsdGVybmF0ZUNvbG9ycy5yZWxlYXNlTm9uTnVsbCgpLCBpbl9wcmludENvbG9y
KTsKKyAgICBpZiAoIXJlc3VsdCkgeworICAgICAgICBBU1NFUlQoIXJlc3VsdC5lcnJvcigpLmlz
RW1wdHkoKSk7CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJy
b3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCByZXN1bHQuZXJyb3IoKSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBhdXRvIFtvdXRfY29sdW1uTmFtZXMsIG91dF9ub3Rl
cywgb3V0X3RpbWVzdGFtcCwgb3V0X3ZhbHVlcywgb3V0X3BheWxvYWQsIG91dF9kYXRhYmFzZUlk
LCBvdXRfc3FsRXJyb3IsIG91dF9zY3JlZW5Db2xvciwgb3V0X2FsdGVybmF0ZUNvbG9ycywgb3V0
X3ByaW50Q29sb3JdID0gV1RGTW92ZShyZXN1bHQudmFsdWUoKSk7CisKKyAgICBhdXRvIHByb3Rv
Y29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBwcm90b2NvbF9q
c29uTWVzc2FnZS0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCBXVEZNb3ZlKG91dF9jb2x1bW5O
YW1lcykpOworICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm5vdGVzIl9zLCBv
dXRfbm90ZXMpOworICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXREb3VibGUoInRpbWVzdGFt
cCJfcywgb3V0X3RpbWVzdGFtcCk7CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldE9iamVj
dCgidmFsdWVzIl9zLCBXVEZNb3ZlKG91dF92YWx1ZXMpKTsKKyAgICBwcm90b2NvbF9qc29uTWVz
c2FnZS0+c2V0VmFsdWUoInBheWxvYWQiX3MsIFdURk1vdmUob3V0X3BheWxvYWQpKTsKKyAgICBw
cm90b2NvbF9qc29uTWVzc2FnZS0+c2V0SW50ZWdlcigiZGF0YWJhc2VJZCJfcywgb3V0X2RhdGFi
YXNlSWQpOworICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRPYmplY3QoInNxbEVycm9yIl9z
LCBXVEZNb3ZlKG91dF9zcWxFcnJvcikpOworICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRT
dHJpbmcoInNjcmVlbkNvbG9yIl9zLCBQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25z
dGFudFZhbHVlKG91dF9zY3JlZW5Db2xvcikpOworICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5z
ZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCBXVEZNb3ZlKG91dF9hbHRlcm5hdGVDb2xvcnMp
KTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCBv
dXRfcHJpbnRDb2xvcik7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHBy
b3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSksIGZhbHNlKTsKIH0K
IAogfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCkBAIC00MjQsNiArMzk3LDcgQEAgdm9pZCBEYXRh
YmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMobG9uZyBy
ZXF1ZXN0SWQsIFJlZlAKIAogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNs
dWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKQEAgLTQ2
Nyw3ICs0NDEsNiBAQCBjbGFzcyBGcm9udGVuZFJvdXRlcjsKICNpbmNsdWRlICJUZXN0RnJvbnRl
bmREaXNwYXRjaGVycy5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJv
bnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKIG5hbWVzcGFj
ZSBJbnNwZWN0b3IgewogCkBAIC01MDgsNyArNDgxLDkgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7
CiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3Rv
Y29sVHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9K
U09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC01MzAsNyArNTA1
LDcgQEAgZW51bSBjbGFzcyBQcmltYXJ5Q29sb3JzOwogbmFtZXNwYWNlIERhdGFiYXNlIHsKIC8q
IFVuaXF1ZSBpZGVudGlmaWVyIG9mIERhdGFiYXNlIG9iamVjdC4gKi8KIHVzaW5nIERhdGFiYXNl
SWQgPSBpbnQ7Ci11c2luZyBDb2xvckxpc3QgPSBKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPjsKK3VzaW5nIENvbG9yTGlzdCA9IEpTT046
OkFycmF5T2Y8UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPjsKIH0gLy8gRGF0YWJh
c2UKIC8vIEVuZCBvZiB0eXBlZGVmcy4KIApAQCAtNTU0LDcgKzUyOSw3IEBAIGVudW0gY2xhc3Mg
UHJpbWFyeUNvbG9ycyB7CiB9OyAvLyBlbnVtIGNsYXNzIFByaW1hcnlDb2xvcnMKIAogLyogRGF0
YWJhc2UgZXJyb3IuICovCi1jbGFzcyBFcnJvciA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsK
K2NsYXNzIEVycm9yIGZpbmFsIDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgewogcHVibGljOgog
ICAgIGVudW0gewogICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCkBAIC01ODEsMTcgKzU1NiwxNyBA
QCBwdWJsaWM6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBFcnJvcjsKICAgICBwdWJsaWM6CiAKLSAg
ICAgICAgQnVpbGRlcjxTVEFURSB8IE1lc3NhZ2VTZXQ+JiBzZXRNZXNzYWdlKGNvbnN0IFN0cmlu
ZyYgdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBNZXNzYWdlU2V0PiYgc2V0TWVzc2Fn
ZShjb25zdCBTdHJpbmcmIGluX21lc3NhZ2UpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKCEoU1RBVEUgJiBNZXNzYWdlU2V0KSwgcHJvcGVydHlfbWVzc2FnZV9hbHJlYWR5
X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJtZXNzYWdlIl9zLCB2YWx1
ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJtZXNzYWdlIl9zLCBpbl9tZXNz
YWdlKTsKICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TWVzc2FnZVNldD4oKTsKICAgICAg
ICAgfQogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDb2RlU2V0PiYgc2V0Q29kZShpbnQgdmFs
dWUpCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDb2RlU2V0PiYgc2V0Q29kZShpbnQgaW5fY29k
ZSkKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIENvZGVT
ZXQpLCBwcm9wZXJ0eV9jb2RlX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5z
ZXRJbnRlZ2VyKCJjb2RlIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0SW50
ZWdlcigiY29kZSJfcywgaW5fY29kZSk7CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENv
ZGVTZXQ+KCk7CiAgICAgICAgIH0KIApAQCAtNjMwLDcgKzYwNSw3IEBAIE9wdGlvbmFsPFByb3Rv
Y29sRW51bVR5cGU+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZyhjb25zdCBTdHJpbmcmKTsKIAog
Ly8gRW51bXMgaW4gdGhlICdEYXRhYmFzZScgRG9tYWluCiB0ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJ
bnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4gcGFyc2VFbnVtVmFs
dWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3Jz
Pihjb25zdCBTdHJpbmcmKTsKK09wdGlvbmFsPFByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNv
bG9ycz4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPFByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFy
eUNvbG9ycz4oY29uc3QgU3RyaW5nJik7CiAKIH0gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCiAK
QEAgLTY4Miw4ICs2NTcsNyBAQCBzdHJ1Y3QgRGVmYXVsdEhhc2g8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+IDogSW50SGFzaDxJbnNwZQogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKIAotI2luY2x1ZGUgPHd0
Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3
dGYvQXNzZXJ0aW9ucy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtNzA4LDE2ICs2
ODIsMTYgQEAgU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKSB7CiAvLyBFbnVt
cyBpbiB0aGUgJ0RhdGFiYXNlJyBEb21haW4KIAogdGVtcGxhdGU8PgotT3B0aW9uYWw8SW5zcGVj
dG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+IHBhcnNlRW51bVZhbHVlRnJv
bVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4oY29u
c3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKK09wdGlvbmFsPFByb3RvY29sOjpEYXRhYmFzZTo6
UHJpbWFyeUNvbG9ycz4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPFByb3RvY29sOjpEYXRhYmFz
ZTo6UHJpbWFyeUNvbG9ycz4oY29uc3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKIHsKICAgICBz
dGF0aWMgY29uc3Qgc2l6ZV90IGNvbnN0YW50VmFsdWVzW10gPSB7Ci0gICAgICAgIChzaXplX3Qp
SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM6OlJlZCwKLSAgICAg
ICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9yczo6
R3JlZW4sCi0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlBy
aW1hcnlDb2xvcnM6OkJsdWUsCisgICAgICAgIChzaXplX3QpUHJvdG9jb2w6OkRhdGFiYXNlOjpQ
cmltYXJ5Q29sb3JzOjpSZWQsCisgICAgICAgIChzaXplX3QpUHJvdG9jb2w6OkRhdGFiYXNlOjpQ
cmltYXJ5Q29sb3JzOjpHcmVlbiwKKyAgICAgICAgKHNpemVfdClQcm90b2NvbDo6RGF0YWJhc2U6
OlByaW1hcnlDb2xvcnM6OkJsdWUsCiAgICAgfTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IDM7ICsraSkKICAgICAgICAgaWYgKHByb3RvY29sU3RyaW5nID09IGVudW1fY29uc3RhbnRfdmFs
dWVzW2NvbnN0YW50VmFsdWVzW2ldXSkKLSAgICAgICAgICAgIHJldHVybiAoSW5zcGVjdG9yOjpQ
cm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMpY29uc3RhbnRWYWx1ZXNbaV07CisgICAg
ICAgICAgICByZXR1cm4gKFByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyljb25zdGFu
dFZhbHVlc1tpXTsKIAogICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiB9CkBAIC03NzQsOCArNzQ4
LDggQEAgY2xhc3MgT2JqQ0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIgZmluYWwg
OiBwdWJsaWMgQWx0ZXJuYXRlRGF0YWJhc2VCYWMKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKIHB1YmxpYzoKICAgICBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcihp
ZDxUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkhhbmRsZXI+IGhhbmRsZXIpIHsgbV9kZWxlZ2F0
ZSA9IGhhbmRsZXI7IH0KLSAgICB2b2lkIGV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMobG9u
ZyByZXF1ZXN0SWQsIGNvbnN0IEpTT046OkFycmF5KiBpbl9jb2x1bW5OYW1lcywgY29uc3QgU3Ry
aW5nKiBpbl9ub3RlcywgY29uc3QgZG91YmxlKiBpbl90aW1lc3RhbXAsIGNvbnN0IEpTT046Ok9i
amVjdCogaW5fdmFsdWVzLCBjb25zdCBKU09OOjpWYWx1ZSogaW5fcGF5bG9hZCwgY29uc3QgaW50
KiBpbl9kYXRhYmFzZUlkLCBjb25zdCBKU09OOjpPYmplY3QqIGluX3NxbEVycm9yLCBjb25zdCBT
dHJpbmcqIGluX3NjcmVlbkNvbG9yLCBjb25zdCBKU09OOjpBcnJheSogaW5fYWx0ZXJuYXRlQ29s
b3JzLCBjb25zdCBTdHJpbmcqIGluX3ByaW50Q29sb3IpIGZpbmFsOwotICAgIHZvaWQgZXhlY3V0
ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcmVxdWVzdElkLCBjb25zdCBKU09OOjpBcnJheSYg
aW5fY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgaW5fbm90ZXMsIGRvdWJsZSBpbl90aW1lc3Rh
bXAsIGNvbnN0IEpTT046Ok9iamVjdCYgaW5fdmFsdWVzLCBKU09OOjpWYWx1ZSBpbl9wYXlsb2Fk
LCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgSlNPTjo6T2JqZWN0JiBpbl9zcWxFcnJvciwgY29u
c3QgU3RyaW5nJiBpbl9zY3JlZW5Db2xvciwgY29uc3QgSlNPTjo6QXJyYXkmIGluX2FsdGVybmF0
ZUNvbG9ycywgY29uc3QgU3RyaW5nJiBpbl9wcmludENvbG9yKSBmaW5hbDsKKyAgICB2b2lkIGV4
ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMobG9uZyBwcm90b2NvbF9jYWxsSWQsIFJlZlB0cjxK
U09OOjpBcnJheT4mJiBvcHRfY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgb3B0X25vdGVzLCBP
cHRpb25hbDxkb3VibGU+JiYgb3B0X3RpbWVzdGFtcCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBv
cHRfdmFsdWVzLCBSZWZQdHI8SlNPTjo6VmFsdWU+JiYgb3B0X3BheWxvYWQsIE9wdGlvbmFsPGlu
dD4mJiBvcHRfZGF0YWJhc2VJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBvcHRfc3FsRXJyb3Is
IGNvbnN0IFN0cmluZyYgb3B0X3NjcmVlbkNvbG9yLCBSZWZQdHI8SlNPTjo6QXJyYXk+JiYgb3B0
X2FsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nJiBvcHRfcHJpbnRDb2xvcikgZmluYWw7Cisg
ICAgdm9pZCBleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMobG9uZyBwcm90b2NvbF9jYWxsSWQs
IFJlZjxKU09OOjpBcnJheT4mJiBjb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBub3RlcywgZG91
YmxlIHRpbWVzdGFtcCwgUmVmPEpTT046Ok9iamVjdD4mJiB2YWx1ZXMsIFJlZjxKU09OOjpWYWx1
ZT4mJiBwYXlsb2FkLCBpbnQgZGF0YWJhc2VJZCwgUmVmPEpTT046Ok9iamVjdD4mJiBzcWxFcnJv
ciwgY29uc3QgU3RyaW5nJiBzY3JlZW5Db2xvciwgUmVmPEpTT046OkFycmF5PiYmIGFsdGVybmF0
ZUNvbG9ycywgY29uc3QgU3RyaW5nJiBwcmludENvbG9yKSBmaW5hbDsKIHByaXZhdGU6CiAgICAg
UmV0YWluUHRyPGlkPFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluSGFuZGxlcj4+IG1fZGVsZWdh
dGU7CiB9OwpAQCAtODIzLDEzNyArNzk3LDEzNSBAQCBwcml2YXRlOgogCiBuYW1lc3BhY2UgSW5z
cGVjdG9yIHsKIAotdm9pZCBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6
ZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhsb25nIHJlcXVlc3RJZCwgY29uc3QgSlNPTjo6
QXJyYXkqIGluX2NvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcqIGluX25vdGVzLCBjb25zdCBkb3Vi
bGUqIGluX3RpbWVzdGFtcCwgY29uc3QgSlNPTjo6T2JqZWN0KiBpbl92YWx1ZXMsIGNvbnN0IEpT
T046OlZhbHVlKiBpbl9wYXlsb2FkLCBjb25zdCBpbnQqIGluX2RhdGFiYXNlSWQsIGNvbnN0IEpT
T046Ok9iamVjdCogaW5fc3FsRXJyb3IsIGNvbnN0IFN0cmluZyogaW5fc2NyZWVuQ29sb3IsIGNv
bnN0IEpTT046OkFycmF5KiBpbl9hbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyogaW5fcHJp
bnRDb2xvcikKK3ZvaWQgT2JqQ0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4
ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMobG9uZyBwcm90b2NvbF9jYWxsSWQsIFJlZlB0cjxK
U09OOjpBcnJheT4mJiBpbl9vcHRfY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgaW5fb3B0X25v
dGVzLCBPcHRpb25hbDxkb3VibGU+JiYgaW5fb3B0X3RpbWVzdGFtcCwgUmVmUHRyPEpTT046Ok9i
amVjdD4mJiBpbl9vcHRfdmFsdWVzLCBSZWZQdHI8SlNPTjo6VmFsdWU+JiYgaW5fb3B0X3BheWxv
YWQsIE9wdGlvbmFsPGludD4mJiBpbl9vcHRfZGF0YWJhc2VJZCwgUmVmUHRyPEpTT046Ok9iamVj
dD4mJiBpbl9vcHRfc3FsRXJyb3IsIGNvbnN0IFN0cmluZyYgaW5fb3B0X3NjcmVlbkNvbG9yLCBS
ZWZQdHI8SlNPTjo6QXJyYXk+JiYgaW5fb3B0X2FsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5n
JiBpbl9vcHRfcHJpbnRDb2xvcikKIHsKICAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9T
ZWxlY3RvcjpAc2VsZWN0b3IoZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1dpdGhFcnJvckNh
bGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazpjb2x1bW5OYW1lczpub3Rlczp0aW1lc3RhbXA6dmFsdWVz
OnBheWxvYWQ6ZGF0YWJhc2VJZDpzcWxFcnJvcjpzY3JlZW5Db2xvcjphbHRlcm5hdGVDb2xvcnM6
cHJpbnRDb2xvcjopXSkgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90
b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAi
J0RhdGFiYXNlLmV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMnIHdhcyBub3QgZm91bmQiX3Mp
OworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHByb3Rv
Y29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RhdGFiYXNl
LmV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMnIHdhcyBub3QgZm91bmQiX3MpOwogICAgICAg
ICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCiAgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7
Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVz
dElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAgICAgYmFj
a2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxsSWQsIEJh
Y2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwogICAgICAgICBiYWNrZW5kRGlz
cGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgIH07CiAKLSAgICBpZCBzdWNjZXNz
Q2FsbGJhY2sgPSBeKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKmNvbHVtbk5hbWVzLCBOU1N0cmlu
ZyAqKm5vdGVzLCBkb3VibGUgKnRpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqdmFs
dWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKipwYXlsb2FkLCBpbnQgKmRhdGFiYXNlSWQsIFRl
c3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKipzcWxFcnJvciwgVGVzdFByb3RvY29sRGF0YWJhc2VQ
cmltYXJ5Q29sb3JzICpzY3JlZW5Db2xvciwgTlNBcnJheS8qPE5TU3RyaW5nPiovICoqYWx0ZXJu
YXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRl
cnNQcmludENvbG9yICpwcmludENvbG9yKSB7Ci0gICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IHJl
c3VsdE9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgICAgIFRIUk9XX0VYQ0VQ
VElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihjb2x1bW5OYW1lcywgQCJjb2x1bW5OYW1l
cyIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIo
bm90ZXMsIEAibm90ZXMiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9O
QUxfUEFSQU1FVEVSKHZhbHVlcywgQCJ2YWx1ZXMiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9O
X0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKHBheWxvYWQsIEAicGF5bG9hZCIpOwotICAgICAg
ICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIoc3FsRXJyb3IsIEAi
c3FsRXJyb3IiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFS
QU1FVEVSKGFsdGVybmF0ZUNvbG9ycywgQCJhbHRlcm5hdGVDb2xvcnMiKTsKLSAgICAgICAgaWYg
KGNvbHVtbk5hbWVzKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRBcnJheSgiY29sdW1u
TmFtZXMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KCpjb2x1bW5OYW1lcykpOwotICAgICAgICBpZiAo
bm90ZXMpCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZygibm90ZXMiX3MsICpu
b3Rlcyk7Ci0gICAgICAgIGlmICh0aW1lc3RhbXApCi0gICAgICAgICAgICByZXN1bHRPYmplY3Qt
PnNldERvdWJsZSgidGltZXN0YW1wIl9zLCAqdGltZXN0YW1wKTsKLSAgICAgICAgaWYgKHZhbHVl
cykKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIFsqdmFs
dWVzIHRvSlNPTk9iamVjdF0pOwotICAgICAgICBpZiAocGF5bG9hZCkKLSAgICAgICAgICAgIHJl
c3VsdE9iamVjdC0+c2V0VmFsdWUoInBheWxvYWQiX3MsIFsqcGF5bG9hZCB0b0pTT05PYmplY3Rd
KTsKLSAgICAgICAgaWYgKGRhdGFiYXNlSWQpCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNl
dEludGVnZXIoImRhdGFiYXNlSWQiX3MsICpkYXRhYmFzZUlkKTsKLSAgICAgICAgaWYgKHNxbEVy
cm9yKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBb
KnNxbEVycm9yIHRvSlNPTk9iamVjdF0pOwotICAgICAgICBpZiAoc2NyZWVuQ29sb3IpCi0gICAg
ICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZygic2NyZWVuQ29sb3IiX3MsIHRvUHJvdG9j
b2xTdHJpbmcoKnNjcmVlbkNvbG9yKSk7Ci0gICAgICAgIGlmIChhbHRlcm5hdGVDb2xvcnMpCi0g
ICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIHRv
SlNPTlN0cmluZ0FycmF5KCphbHRlcm5hdGVDb2xvcnMpKTsKLSAgICAgICAgaWYgKHByaW50Q29s
b3IpCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZygicHJpbnRDb2xvciJfcywg
dG9Qcm90b2NvbFN0cmluZygqcHJpbnRDb2xvcikpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hl
cigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdE9iamVjdCksIGZhbHNl
KTsKKyAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKm91
dF9vcHRfY29sdW1uTmFtZXMsIE5TU3RyaW5nICoqb3V0X29wdF9ub3RlcywgZG91YmxlICpvdXRf
b3B0X3RpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqb3V0X29wdF92YWx1ZXMsIFJX
SVByb3RvY29sSlNPTk9iamVjdCAqKm91dF9vcHRfcGF5bG9hZCwgaW50ICpvdXRfb3B0X2RhdGFi
YXNlSWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKipvdXRfb3B0X3NxbEVycm9yLCBUZXN0
UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgKm91dF9vcHRfc2NyZWVuQ29sb3IsIE5TQXJy
YXkvKjxOU1N0cmluZz4qLyAqKm91dF9vcHRfYWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xE
YXRhYmFzZShhbm9ueW1vdXMpICpvdXRfb3B0X3ByaW50Q29sb3IpIHsKKyAgICAgICAgYXV0byBw
cm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIFRI
Uk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihvdXRfb3B0X2NvbHVtbk5h
bWVzLCBAImNvbHVtbk5hbWVzIik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09Q
VElPTkFMX1BBUkFNRVRFUihvdXRfb3B0X25vdGVzLCBAIm5vdGVzIik7CisgICAgICAgIFRIUk9X
X0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihvdXRfb3B0X3ZhbHVlcywgQCJ2
YWx1ZXMiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1F
VEVSKG91dF9vcHRfcGF5bG9hZCwgQCJwYXlsb2FkIik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihvdXRfb3B0X3NxbEVycm9yLCBAInNxbEVycm9y
Iik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihv
dXRfb3B0X2FsdGVybmF0ZUNvbG9ycywgQCJhbHRlcm5hdGVDb2xvcnMiKTsKKyAgICAgICAgaWYg
KCEhb3V0X29wdF9jb2x1bW5OYW1lcykKKyAgICAgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdl
LT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KCpvdXRfb3B0X2Nv
bHVtbk5hbWVzKSk7CisgICAgICAgIGlmICghIW91dF9vcHRfbm90ZXMpCisgICAgICAgICAgICBw
cm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJub3RlcyJfcywgKm91dF9vcHRfbm90ZXMp
OworICAgICAgICBpZiAoISFvdXRfb3B0X3RpbWVzdGFtcCkKKyAgICAgICAgICAgIHByb3RvY29s
X2pzb25NZXNzYWdlLT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywgKm91dF9vcHRfdGltZXN0YW1w
KTsKKyAgICAgICAgaWYgKCEhb3V0X29wdF92YWx1ZXMpCisgICAgICAgICAgICBwcm90b2NvbF9q
c29uTWVzc2FnZS0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIFsqb3V0X29wdF92YWx1ZXMgdG9KU09O
T2JqZWN0XSk7CisgICAgICAgIGlmICghIW91dF9vcHRfcGF5bG9hZCkKKyAgICAgICAgICAgIHBy
b3RvY29sX2pzb25NZXNzYWdlLT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgWypvdXRfb3B0X3BheWxv
YWQgdG9KU09OT2JqZWN0XSk7CisgICAgICAgIGlmICghIW91dF9vcHRfZGF0YWJhc2VJZCkKKyAg
ICAgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRJbnRlZ2VyKCJkYXRhYmFzZUlkIl9z
LCAqb3V0X29wdF9kYXRhYmFzZUlkKTsKKyAgICAgICAgaWYgKCEhb3V0X29wdF9zcWxFcnJvcikK
KyAgICAgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRPYmplY3QoInNxbEVycm9yIl9z
LCBbKm91dF9vcHRfc3FsRXJyb3IgdG9KU09OT2JqZWN0XSk7CisgICAgICAgIGlmICghIW91dF9v
cHRfc2NyZWVuQ29sb3IpCisgICAgICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3Ry
aW5nKCJzY3JlZW5Db2xvciJfcywgdG9Qcm90b2NvbFN0cmluZygqb3V0X29wdF9zY3JlZW5Db2xv
cikpOworICAgICAgICBpZiAoISFvdXRfb3B0X2FsdGVybmF0ZUNvbG9ycykKKyAgICAgICAgICAg
IHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCB0b0pT
T05TdHJpbmdBcnJheSgqb3V0X29wdF9hbHRlcm5hdGVDb2xvcnMpKTsKKyAgICAgICAgaWYgKCEh
b3V0X29wdF9wcmludENvbG9yKQorICAgICAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNl
dFN0cmluZygicHJpbnRDb2xvciJfcywgdG9Qcm90b2NvbFN0cmluZygqb3V0X29wdF9wcmludENv
bG9yKSk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShwcm90b2Nv
bF9jYWxsSWQsIFdURk1vdmUocHJvdG9jb2xfanNvbk1lc3NhZ2UpLCBmYWxzZSk7CiAgICAgfTsK
IAotICAgIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqb19pbl9jb2x1bW5OYW1lczsKLSAgICBpZiAo
aW5fY29sdW1uTmFtZXMpCi0gICAgICAgIG9faW5fY29sdW1uTmFtZXMgPSB0b09iakNTdHJpbmdB
cnJheShpbl9jb2x1bW5OYW1lcyk7Ci0gICAgTlNTdHJpbmcgKm9faW5fbm90ZXM7Ci0gICAgaWYg
KGluX25vdGVzKQotICAgICAgICBvX2luX25vdGVzID0gKmluX25vdGVzOwotICAgIGRvdWJsZSBv
X2luX3RpbWVzdGFtcDsKLSAgICBpZiAoaW5fdGltZXN0YW1wKQotICAgICAgICBvX2luX3RpbWVz
dGFtcCA9ICppbl90aW1lc3RhbXA7Ci0gICAgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpvX2luX3Zh
bHVlczsKLSAgICBpZiAoaW5fdmFsdWVzKQotICAgICAgICBvX2luX3ZhbHVlcyA9IFtbW1JXSVBy
b3RvY29sSlNPTk9iamVjdCBhbGxvY10gaW5pdFdpdGhKU09OT2JqZWN0OmluX3ZhbHVlc10gYXV0
b3JlbGVhc2VdOwotICAgIFJXSVByb3RvY29sSlNPTk9iamVjdCAqb19pbl9wYXlsb2FkOwotICAg
IGlmIChpbl9wYXlsb2FkKQotICAgICAgICBvX2luX3BheWxvYWQgPSBbW1tSV0lQcm90b2NvbEpT
T05PYmplY3QgYWxsb2NdIGluaXRXaXRoSlNPTk9iamVjdDppbl9wYXlsb2FkXSBhdXRvcmVsZWFz
ZV07Ci0gICAgaW50IG9faW5fZGF0YWJhc2VJZDsKLSAgICBpZiAoaW5fZGF0YWJhc2VJZCkKLSAg
ICAgICAgb19pbl9kYXRhYmFzZUlkID0gKmluX2RhdGFiYXNlSWQ7Ci0gICAgVGVzdFByb3RvY29s
RGF0YWJhc2VFcnJvciAqb19pbl9zcWxFcnJvcjsKLSAgICBpZiAoaW5fc3FsRXJyb3IpCi0gICAg
ICAgIG9faW5fc3FsRXJyb3IgPSBbW1tUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yIGFsbG9jXSBp
bml0V2l0aEpTT05PYmplY3Q6aW5fc3FsRXJyb3JdIGF1dG9yZWxlYXNlXTsKLSAgICBPcHRpb25h
bDxUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnM+IG9faW5fc2NyZWVuQ29sb3I7Ci0g
ICAgaWYgKGluX3NjcmVlbkNvbG9yKQotICAgICAgICBvX2luX3NjcmVlbkNvbG9yID0gZnJvbVBy
b3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycz4oKmluX3NjcmVl
bkNvbG9yKTsKLSAgICBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKm9faW5fYWx0ZXJuYXRlQ29sb3Jz
OwotICAgIGlmIChpbl9hbHRlcm5hdGVDb2xvcnMpCi0gICAgICAgIG9faW5fYWx0ZXJuYXRlQ29s
b3JzID0gdG9PYmpDU3RyaW5nQXJyYXkoaW5fYWx0ZXJuYXRlQ29sb3JzKTsKLSAgICBPcHRpb25h
bDxUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENv
bG9yPiBvX2luX3ByaW50Q29sb3I7Ci0gICAgaWYgKGluX3ByaW50Q29sb3IpCi0gICAgICAgIG9f
aW5fcHJpbnRDb2xvciA9IGZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xEYXRhYmFzZUV4
ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yPigqaW5fcHJpbnRDb2xvcik7Ci0K
LSAgICBbbV9kZWxlZ2F0ZSBleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzV2l0aEVycm9yQ2Fs
bGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrIGNvbHVt
bk5hbWVzOihpbl9jb2x1bW5OYW1lcyA/ICZvX2luX2NvbHVtbk5hbWVzIDogbmlsKSBub3Rlczoo
aW5fbm90ZXMgPyAmb19pbl9ub3RlcyA6IG5pbCkgdGltZXN0YW1wOihpbl90aW1lc3RhbXAgPyAm
b19pbl90aW1lc3RhbXAgOiBuaWwpIHZhbHVlczooaW5fdmFsdWVzID8gJm9faW5fdmFsdWVzIDog
bmlsKSBwYXlsb2FkOihpbl9wYXlsb2FkID8gJm9faW5fcGF5bG9hZCA6IG5pbCkgZGF0YWJhc2VJ
ZDooaW5fZGF0YWJhc2VJZCA/ICZvX2luX2RhdGFiYXNlSWQgOiBuaWwpIHNxbEVycm9yOihpbl9z
cWxFcnJvciA/ICZvX2luX3NxbEVycm9yIDogbmlsKSBzY3JlZW5Db2xvcjooaW5fc2NyZWVuQ29s
b3IgPyAmb19pbl9zY3JlZW5Db2xvci52YWx1ZSgpIDogbmlsKSBhbHRlcm5hdGVDb2xvcnM6KGlu
X2FsdGVybmF0ZUNvbG9ycyA/ICZvX2luX2FsdGVybmF0ZUNvbG9ycyA6IG5pbCkgcHJpbnRDb2xv
cjooaW5fcHJpbnRDb2xvciA/ICZvX2luX3ByaW50Q29sb3IudmFsdWUoKSA6IG5pbCldOworICAg
IE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqb19pbl9vcHRfY29sdW1uTmFtZXM7CisgICAgaWYgKCEh
aW5fb3B0X2NvbHVtbk5hbWVzKQorICAgICAgICBvX2luX29wdF9jb2x1bW5OYW1lcyA9IHRvT2Jq
Q1N0cmluZ0FycmF5KGluX29wdF9jb2x1bW5OYW1lcy5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICBO
U1N0cmluZyAqb19pbl9vcHRfbm90ZXM7CisgICAgaWYgKCEhaW5fb3B0X25vdGVzKQorICAgICAg
ICBvX2luX29wdF9ub3RlcyA9IGluX29wdF9ub3RlczsKKyAgICBkb3VibGUgb19pbl9vcHRfdGlt
ZXN0YW1wOworICAgIGlmICghIWluX29wdF90aW1lc3RhbXApCisgICAgICAgIG9faW5fb3B0X3Rp
bWVzdGFtcCA9ICppbl9vcHRfdGltZXN0YW1wOworICAgIFJXSVByb3RvY29sSlNPTk9iamVjdCAq
b19pbl9vcHRfdmFsdWVzOworICAgIGlmICghIWluX29wdF92YWx1ZXMpCisgICAgICAgIG9faW5f
b3B0X3ZhbHVlcyA9IFtbW1JXSVByb3RvY29sSlNPTk9iamVjdCBhbGxvY10gaW5pdFdpdGhKU09O
T2JqZWN0OmluX29wdF92YWx1ZXMucmVsZWFzZU5vbk51bGwoKV0gYXV0b3JlbGVhc2VdOworICAg
IFJXSVByb3RvY29sSlNPTk9iamVjdCAqb19pbl9vcHRfcGF5bG9hZDsKKyAgICBpZiAoISFpbl9v
cHRfcGF5bG9hZCkKKyAgICAgICAgb19pbl9vcHRfcGF5bG9hZCA9IFtbW1JXSVByb3RvY29sSlNP
Tk9iamVjdCBhbGxvY10gaW5pdFdpdGhKU09OT2JqZWN0OmluX29wdF9wYXlsb2FkLnJlbGVhc2VO
b25OdWxsKCldIGF1dG9yZWxlYXNlXTsKKyAgICBpbnQgb19pbl9vcHRfZGF0YWJhc2VJZDsKKyAg
ICBpZiAoISFpbl9vcHRfZGF0YWJhc2VJZCkKKyAgICAgICAgb19pbl9vcHRfZGF0YWJhc2VJZCA9
ICppbl9vcHRfZGF0YWJhc2VJZDsKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICpvX2lu
X29wdF9zcWxFcnJvcjsKKyAgICBpZiAoISFpbl9vcHRfc3FsRXJyb3IpCisgICAgICAgIG9faW5f
b3B0X3NxbEVycm9yID0gW1tbVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciBhbGxvY10gaW5pdFdp
dGhKU09OT2JqZWN0OmluX29wdF9zcWxFcnJvci5yZWxlYXNlTm9uTnVsbCgpXSBhdXRvcmVsZWFz
ZV07CisgICAgT3B0aW9uYWw8VGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzPiBvX2lu
X29wdF9zY3JlZW5Db2xvcjsKKyAgICBpZiAoISFpbl9vcHRfc2NyZWVuQ29sb3IpCisgICAgICAg
IG9faW5fb3B0X3NjcmVlbkNvbG9yID0gZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbERh
dGFiYXNlUHJpbWFyeUNvbG9ycz4oaW5fb3B0X3NjcmVlbkNvbG9yKTsKKyAgICBOU0FycmF5Lyo8
TlNTdHJpbmc+Ki8gKm9faW5fb3B0X2FsdGVybmF0ZUNvbG9yczsKKyAgICBpZiAoISFpbl9vcHRf
YWx0ZXJuYXRlQ29sb3JzKQorICAgICAgICBvX2luX29wdF9hbHRlcm5hdGVDb2xvcnMgPSB0b09i
akNTdHJpbmdBcnJheShpbl9vcHRfYWx0ZXJuYXRlQ29sb3JzLnJlbGVhc2VOb25OdWxsKCkpOwor
ICAgIE9wdGlvbmFsPFRlc3RQcm90b2NvbERhdGFiYXNlKGFub255bW91cyk+IG9faW5fb3B0X3By
aW50Q29sb3I7CisgICAgaWYgKCEhaW5fb3B0X3ByaW50Q29sb3IpCisgICAgICAgIG9faW5fb3B0
X3ByaW50Q29sb3IgPSBmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sRGF0YWJhc2UoYW5v
bnltb3VzKT4oaW5fb3B0X3ByaW50Q29sb3IpOworICAgIFttX2RlbGVnYXRlIGV4ZWN1dGVBbGxP
cHRpb25hbFBhcmFtZXRlcnNXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3ND
YWxsYmFjazpzdWNjZXNzQ2FsbGJhY2sgY29sdW1uTmFtZXM6KCEhaW5fb3B0X2NvbHVtbk5hbWVz
ID8gJm9faW5fb3B0X2NvbHVtbk5hbWVzIDogbmlsKSBub3RlczooISFpbl9vcHRfbm90ZXMgPyAm
b19pbl9vcHRfbm90ZXMgOiBuaWwpIHRpbWVzdGFtcDooISFpbl9vcHRfdGltZXN0YW1wID8gJm9f
aW5fb3B0X3RpbWVzdGFtcCA6IG5pbCkgdmFsdWVzOighIWluX29wdF92YWx1ZXMgPyAmb19pbl9v
cHRfdmFsdWVzIDogbmlsKSBwYXlsb2FkOighIWluX29wdF9wYXlsb2FkID8gJm9faW5fb3B0X3Bh
eWxvYWQgOiBuaWwpIGRhdGFiYXNlSWQ6KCEhaW5fb3B0X2RhdGFiYXNlSWQgPyAmb19pbl9vcHRf
ZGF0YWJhc2VJZCA6IG5pbCkgc3FsRXJyb3I6KCEhaW5fb3B0X3NxbEVycm9yID8gJm9faW5fb3B0
X3NxbEVycm9yIDogbmlsKSBzY3JlZW5Db2xvcjooISFpbl9vcHRfc2NyZWVuQ29sb3IgPyAmb19p
bl9vcHRfc2NyZWVuQ29sb3IudmFsdWUoKSA6IG5pbCkgYWx0ZXJuYXRlQ29sb3JzOighIWluX29w
dF9hbHRlcm5hdGVDb2xvcnMgPyAmb19pbl9vcHRfYWx0ZXJuYXRlQ29sb3JzIDogbmlsKSBwcmlu
dENvbG9yOighIWluX29wdF9wcmludENvbG9yID8gJm9faW5fb3B0X3ByaW50Q29sb3IudmFsdWUo
KSA6IG5pbCldOwogfQogCi12b2lkIE9iakNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRj
aGVyOjpleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMobG9uZyByZXF1ZXN0SWQsIGNvbnN0IEpT
T046OkFycmF5JiBpbl9jb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBpbl9ub3RlcywgZG91Ymxl
IGluX3RpbWVzdGFtcCwgY29uc3QgSlNPTjo6T2JqZWN0JiBpbl92YWx1ZXMsIEpTT046OlZhbHVl
IGluX3BheWxvYWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBKU09OOjpPYmplY3QmIGluX3Nx
bEVycm9yLCBjb25zdCBTdHJpbmcmIGluX3NjcmVlbkNvbG9yLCBjb25zdCBKU09OOjpBcnJheSYg
aW5fYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcmIGluX3ByaW50Q29sb3IpCit2b2lkIE9i
akNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlTm9PcHRpb25hbFBh
cmFtZXRlcnMobG9uZyBwcm90b2NvbF9jYWxsSWQsIFJlZjxKU09OOjpBcnJheT4mJiBpbl9jb2x1
bW5OYW1lcywgY29uc3QgU3RyaW5nJiBpbl9ub3RlcywgZG91YmxlIGluX3RpbWVzdGFtcCwgUmVm
PEpTT046Ok9iamVjdD4mJiBpbl92YWx1ZXMsIFJlZjxKU09OOjpWYWx1ZT4mJiBpbl9wYXlsb2Fk
LCBpbnQgaW5fZGF0YWJhc2VJZCwgUmVmPEpTT046Ok9iamVjdD4mJiBpbl9zcWxFcnJvciwgY29u
c3QgU3RyaW5nJiBpbl9zY3JlZW5Db2xvciwgUmVmPEpTT046OkFycmF5PiYmIGluX2FsdGVybmF0
ZUNvbG9ycywgY29uc3QgU3RyaW5nJiBpbl9wcmludENvbG9yKQogewogICAgIGlmICghW21fZGVs
ZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihleGVjdXRlTm9PcHRpb25hbFBhcmFt
ZXRlcnNXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6Y29sdW1uTmFtZXM6bm90ZXM6
dGltZXN0YW1wOnZhbHVlczpwYXlsb2FkOmRhdGFiYXNlSWQ6c3FsRXJyb3I6c2NyZWVuQ29sb3I6
YWx0ZXJuYXRlQ29sb3JzOnByaW50Q29sb3I6KV0pIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNo
ZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpN
ZXRob2ROb3RGb3VuZCwgIidEYXRhYmFzZS5leGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMnIHdh
cyBub3QgZm91bmQiX3MpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90
b2NvbEVycm9yKHByb3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZv
dW5kLCAiJ0RhdGFiYXNlLmV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycycgd2FzIG5vdCBmb3Vu
ZCJfcyk7CiAgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0
cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9j
b2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3Ip
OworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHByb3Rv
Y29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CiAgICAg
ICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgfTsKIAot
ICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF4oTlNBcnJheS8qPE5TU3RyaW5nPiovICpjb2x1bW5O
YW1lcywgTlNTdHJpbmcgKm5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05P
YmplY3QgKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpwYXlsb2FkLCBpbnQgZGF0YWJh
c2VJZCwgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqc3FsRXJyb3IsIFRlc3RQcm90b2NvbERh
dGFiYXNlUHJpbWFyeUNvbG9ycyBzY3JlZW5Db2xvciwgTlNBcnJheS8qPE5TU3RyaW5nPiovICph
bHRlcm5hdGVDb2xvcnMsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJh
bWV0ZXJzUHJpbnRDb2xvciBwcmludENvbG9yKSB7Ci0gICAgICAgIFJlZjxKU09OOjpPYmplY3Q+
IHJlc3VsdE9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKGNvbHVtbk5hbWVzLCBAImNvbHVtbk5hbWVz
Iik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKG5vdGVz
LCBAIm5vdGVzIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1F
VEVSKHZhbHVlcywgQCJ2YWx1ZXMiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFV
SVJFRF9QQVJBTUVURVIocGF5bG9hZCwgQCJwYXlsb2FkIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQ
VElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKHNxbEVycm9yLCBAInNxbEVycm9yIik7Ci0gICAg
ICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKGFsdGVybmF0ZUNvbG9y
cywgQCJhbHRlcm5hdGVDb2xvcnMiKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRBcnJheSgi
Y29sdW1uTmFtZXMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KGNvbHVtbk5hbWVzKSk7Ci0gICAgICAg
IHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKCJub3RlcyJfcywgbm90ZXMpOwotICAgICAgICByZXN1
bHRPYmplY3QtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCB0aW1lc3RhbXApOwotICAgICAgICBy
ZXN1bHRPYmplY3QtPnNldE9iamVjdCgidmFsdWVzIl9zLCBbdmFsdWVzIHRvSlNPTk9iamVjdF0p
OwotICAgICAgICByZXN1bHRPYmplY3QtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCBbcGF5bG9hZCB0
b0pTT05PYmplY3RdKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRJbnRlZ2VyKCJkYXRhYmFz
ZUlkIl9zLCBkYXRhYmFzZUlkKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRPYmplY3QoInNx
bEVycm9yIl9zLCBbc3FsRXJyb3IgdG9KU09OT2JqZWN0XSk7Ci0gICAgICAgIHJlc3VsdE9iamVj
dC0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgdG9Qcm90b2NvbFN0cmluZyhzY3JlZW5Db2xv
cikpOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3Ms
IHRvSlNPTlN0cmluZ0FycmF5KGFsdGVybmF0ZUNvbG9ycykpOwotICAgICAgICByZXN1bHRPYmpl
Y3QtPnNldFN0cmluZygicHJpbnRDb2xvciJfcywgdG9Qcm90b2NvbFN0cmluZyhwcmludENvbG9y
KSk7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQs
IFdURk1vdmUocmVzdWx0T2JqZWN0KSwgZmFsc2UpOworICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9
IF4oTlNBcnJheS8qPE5TU3RyaW5nPiovICpvdXRfY29sdW1uTmFtZXMsIE5TU3RyaW5nICpvdXRf
bm90ZXMsIGRvdWJsZSBvdXRfdGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKm91dF92
YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqb3V0X3BheWxvYWQsIGludCBvdXRfZGF0YWJh
c2VJZCwgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqb3V0X3NxbEVycm9yLCBUZXN0UHJvdG9j
b2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgb3V0X3NjcmVlbkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJp
bmc+Ki8gKm91dF9hbHRlcm5hdGVDb2xvcnMsIFRlc3RQcm90b2NvbERhdGFiYXNlKGFub255bW91
cykgb3V0X3ByaW50Q29sb3IpIHsKKyAgICAgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9
IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVR
VUlSRURfUEFSQU1FVEVSKG91dF9jb2x1bW5OYW1lcywgQCJjb2x1bW5OYW1lcyIpOworICAgICAg
ICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihvdXRfbm90ZXMsIEAibm90
ZXMiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIob3V0
X3ZhbHVlcywgQCJ2YWx1ZXMiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJF
RF9QQVJBTUVURVIob3V0X3BheWxvYWQsIEAicGF5bG9hZCIpOworICAgICAgICBUSFJPV19FWENF
UFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihvdXRfc3FsRXJyb3IsIEAic3FsRXJyb3IiKTsK
KyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIob3V0X2FsdGVy
bmF0ZUNvbG9ycywgQCJhbHRlcm5hdGVDb2xvcnMiKTsKKyAgICAgICAgcHJvdG9jb2xfanNvbk1l
c3NhZ2UtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgdG9KU09OU3RyaW5nQXJyYXkob3V0X2Nv
bHVtbk5hbWVzKSk7CisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm5v
dGVzIl9zLCBvdXRfbm90ZXMpOworICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0RG91
YmxlKCJ0aW1lc3RhbXAiX3MsIG91dF90aW1lc3RhbXApOworICAgICAgICBwcm90b2NvbF9qc29u
TWVzc2FnZS0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIFtvdXRfdmFsdWVzIHRvSlNPTk9iamVjdF0p
OworICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0VmFsdWUoInBheWxvYWQiX3MsIFtv
dXRfcGF5bG9hZCB0b0pTT05PYmplY3RdKTsKKyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2Ut
PnNldEludGVnZXIoImRhdGFiYXNlSWQiX3MsIG91dF9kYXRhYmFzZUlkKTsKKyAgICAgICAgcHJv
dG9jb2xfanNvbk1lc3NhZ2UtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIFtvdXRfc3FsRXJyb3Ig
dG9KU09OT2JqZWN0XSk7CisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJpbmco
InNjcmVlbkNvbG9yIl9zLCB0b1Byb3RvY29sU3RyaW5nKG91dF9zY3JlZW5Db2xvcikpOworICAg
ICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywg
dG9KU09OU3RyaW5nQXJyYXkob3V0X2FsdGVybmF0ZUNvbG9ycykpOworICAgICAgICBwcm90b2Nv
bF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCB0b1Byb3RvY29sU3RyaW5n
KG91dF9wcmludENvbG9yKSk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNw
b25zZShwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJvdG9jb2xfanNvbk1lc3NhZ2UpLCBmYWxz
ZSk7CiAgICAgfTsKIAotICAgIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqb19pbl9jb2x1bW5OYW1l
cyA9IHRvT2JqQ1N0cmluZ0FycmF5KCZpbl9jb2x1bW5OYW1lcyk7CisgICAgTlNBcnJheS8qPE5T
U3RyaW5nPiovICpvX2luX2NvbHVtbk5hbWVzID0gdG9PYmpDU3RyaW5nQXJyYXkoV1RGTW92ZShp
bl9jb2x1bW5OYW1lcykpOwogICAgIE5TU3RyaW5nICpvX2luX25vdGVzID0gaW5fbm90ZXM7CiAg
ICAgZG91YmxlIG9faW5fdGltZXN0YW1wID0gaW5fdGltZXN0YW1wOwotICAgIFJXSVByb3RvY29s
SlNPTk9iamVjdCAqb19pbl92YWx1ZXMgPSBbW1tSV0lQcm90b2NvbEpTT05PYmplY3QgYWxsb2Nd
IGluaXRXaXRoSlNPTk9iamVjdDomaW5fdmFsdWVzXSBhdXRvcmVsZWFzZV07Ci0gICAgUldJUHJv
dG9jb2xKU09OT2JqZWN0ICpvX2luX3BheWxvYWQgPSBbW1tSV0lQcm90b2NvbEpTT05PYmplY3Qg
YWxsb2NdIGluaXRXaXRoSlNPTk9iamVjdDomaW5fcGF5bG9hZF0gYXV0b3JlbGVhc2VdOworICAg
IFJXSVByb3RvY29sSlNPTk9iamVjdCAqb19pbl92YWx1ZXMgPSBbW1tSV0lQcm90b2NvbEpTT05P
YmplY3QgYWxsb2NdIGluaXRXaXRoSlNPTk9iamVjdDpXVEZNb3ZlKGluX3ZhbHVlcyldIGF1dG9y
ZWxlYXNlXTsKKyAgICBSV0lQcm90b2NvbEpTT05PYmplY3QgKm9faW5fcGF5bG9hZCA9IFtbW1JX
SVByb3RvY29sSlNPTk9iamVjdCBhbGxvY10gaW5pdFdpdGhKU09OT2JqZWN0OldURk1vdmUoaW5f
cGF5bG9hZCldIGF1dG9yZWxlYXNlXTsKICAgICBpbnQgb19pbl9kYXRhYmFzZUlkID0gaW5fZGF0
YWJhc2VJZDsKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICpvX2luX3NxbEVycm9yID0g
W1tbVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciBhbGxvY10gaW5pdFdpdGhKU09OT2JqZWN0OiZp
bl9zcWxFcnJvcl0gYXV0b3JlbGVhc2VdOworICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3Ig
Km9faW5fc3FsRXJyb3IgPSBbW1tUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yIGFsbG9jXSBpbml0
V2l0aEpTT05PYmplY3Q6V1RGTW92ZShpbl9zcWxFcnJvcildIGF1dG9yZWxlYXNlXTsKICAgICBP
cHRpb25hbDxUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnM+IG9faW5fc2NyZWVuQ29s
b3IgPSBmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3Jz
Pihpbl9zY3JlZW5Db2xvcik7CiAgICAgaWYgKCFvX2luX3NjcmVlbkNvbG9yKSB7CiAgICAgICAg
IGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNo
ZXI6OkludmFsaWRQYXJhbXMsICJQYXJhbWV0ZXIgJ3NjcmVlbkNvbG9yJyBvZiBtZXRob2QgJ0Rh
dGFiYXNlLmV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycycgY2Fubm90IGJlIHByb2Nlc3NlZCJf
cyk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgTlNBcnJheS8qPE5TU3RyaW5nPiovICpv
X2luX2FsdGVybmF0ZUNvbG9ycyA9IHRvT2JqQ1N0cmluZ0FycmF5KCZpbl9hbHRlcm5hdGVDb2xv
cnMpOwotICAgIE9wdGlvbmFsPFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQ
YXJhbWV0ZXJzUHJpbnRDb2xvcj4gb19pbl9wcmludENvbG9yID0gZnJvbVByb3RvY29sU3RyaW5n
PFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xv
cj4oaW5fcHJpbnRDb2xvcik7CisgICAgTlNBcnJheS8qPE5TU3RyaW5nPiovICpvX2luX2FsdGVy
bmF0ZUNvbG9ycyA9IHRvT2JqQ1N0cmluZ0FycmF5KFdURk1vdmUoaW5fYWx0ZXJuYXRlQ29sb3Jz
KSk7CisgICAgT3B0aW9uYWw8VGVzdFByb3RvY29sRGF0YWJhc2UoYW5vbnltb3VzKT4gb19pbl9w
cmludENvbG9yID0gZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbERhdGFiYXNlKGFub255
bW91cyk+KGluX3ByaW50Q29sb3IpOwogICAgIGlmICghb19pbl9wcmludENvbG9yKSB7CiAgICAg
ICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3Bh
dGNoZXI6OkludmFsaWRQYXJhbXMsICJQYXJhbWV0ZXIgJ3ByaW50Q29sb3InIG9mIG1ldGhvZCAn
RGF0YWJhc2UuZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzJyBjYW5ub3QgYmUgcHJvY2Vzc2Vk
Il9zKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLQogICAgIFttX2RlbGVnYXRlIGV4ZWN1dGVO
b09wdGlvbmFsUGFyYW1ldGVyc1dpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vz
c0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjayBjb2x1bW5OYW1lczpvX2luX2NvbHVtbk5hbWVzIG5v
dGVzOm9faW5fbm90ZXMgdGltZXN0YW1wOm9faW5fdGltZXN0YW1wIHZhbHVlczpvX2luX3ZhbHVl
cyBwYXlsb2FkOm9faW5fcGF5bG9hZCBkYXRhYmFzZUlkOm9faW5fZGF0YWJhc2VJZCBzcWxFcnJv
cjpvX2luX3NxbEVycm9yIHNjcmVlbkNvbG9yOm9faW5fc2NyZWVuQ29sb3IudmFsdWUoKSBhbHRl
cm5hdGVDb2xvcnM6b19pbl9hbHRlcm5hdGVDb2xvcnMgcHJpbnRDb2xvcjpvX2luX3ByaW50Q29s
b3IudmFsdWUoKV07CiB9CiAKQEAgLTEyMTMsOCArMTE4NSw4IEBAIF9fYXR0cmlidXRlX18oKHZp
c2liaWxpdHkgKCJkZWZhdWx0IikpKQogCiBAcHJvdG9jb2wgVGVzdFByb3RvY29sRGF0YWJhc2VE
b21haW5IYW5kbGVyIDxOU09iamVjdD4KIEBvcHRpb25hbAotLSAodm9pZClleGVjdXRlQWxsT3B0
aW9uYWxQYXJhbWV0ZXJzV2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9y
KSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKShOU0FycmF5Lyo8TlNTdHJp
bmc+Ki8gKipjb2x1bW5OYW1lcywgTlNTdHJpbmcgKipub3RlcywgZG91YmxlICp0aW1lc3RhbXAs
IFJXSVByb3RvY29sSlNPTk9iamVjdCAqKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICoq
cGF5bG9hZCwgaW50ICpkYXRhYmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoqc3Fs
RXJyb3IsIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyAqc2NyZWVuQ29sb3IsIE5T
QXJyYXkvKjxOU1N0cmluZz4qLyAqKmFsdGVybmF0ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0YWJh
c2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvciAqcHJpbnRDb2xvcikpc3Vj
Y2Vzc0NhbGxiYWNrIGNvbHVtbk5hbWVzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiopY29sdW1u
TmFtZXMgbm90ZXM6KE5TU3RyaW5nICoqKW5vdGVzIHRpbWVzdGFtcDooZG91YmxlICopdGltZXN0
YW1wIHZhbHVlczooUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqKXZhbHVlcyBwYXlsb2FkOihSV0lQ
cm90b2NvbEpTT05PYmplY3QgKiopcGF5bG9hZCBkYXRhYmFzZUlkOihpbnQgKilkYXRhYmFzZUlk
IHNxbEVycm9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoqKXNxbEVycm9yIHNjcmVlbkNv
bG9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgKilzY3JlZW5Db2xvciBhbHRl
cm5hdGVDb2xvcnM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKilhbHRlcm5hdGVDb2xvcnMgcHJp
bnRDb2xvcjooVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJz
UHJpbnRDb2xvciAqKXByaW50Q29sb3I7Ci0tICh2b2lkKWV4ZWN1dGVOb09wdGlvbmFsUGFyYW1l
dGVyc1dpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxs
YmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikoTlNBcnJheS8qPE5TU3RyaW5nPiovICpjb2x1
bW5OYW1lcywgTlNTdHJpbmcgKm5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBSV0lQcm90b2NvbEpT
T05PYmplY3QgKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpwYXlsb2FkLCBpbnQgZGF0
YWJhc2VJZCwgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqc3FsRXJyb3IsIFRlc3RQcm90b2Nv
bERhdGFiYXNlUHJpbWFyeUNvbG9ycyBzY3JlZW5Db2xvciwgTlNBcnJheS8qPE5TU3RyaW5nPiov
ICphbHRlcm5hdGVDb2xvcnMsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQ
YXJhbWV0ZXJzUHJpbnRDb2xvciBwcmludENvbG9yKSlzdWNjZXNzQ2FsbGJhY2sgY29sdW1uTmFt
ZXM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWNvbHVtbk5hbWVzIG5vdGVzOihOU1N0cmluZyAq
KW5vdGVzIHRpbWVzdGFtcDooZG91YmxlKXRpbWVzdGFtcCB2YWx1ZXM6KFJXSVByb3RvY29sSlNP
Tk9iamVjdCAqKXZhbHVlcyBwYXlsb2FkOihSV0lQcm90b2NvbEpTT05PYmplY3QgKilwYXlsb2Fk
IGRhdGFiYXNlSWQ6KGludClkYXRhYmFzZUlkIHNxbEVycm9yOihUZXN0UHJvdG9jb2xEYXRhYmFz
ZUVycm9yICopc3FsRXJyb3Igc2NyZWVuQ29sb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFy
eUNvbG9ycylzY3JlZW5Db2xvciBhbHRlcm5hdGVDb2xvcnM6KE5TQXJyYXkvKjxOU1N0cmluZz4q
LyAqKWFsdGVybmF0ZUNvbG9ycyBwcmludENvbG9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1
dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3IpcHJpbnRDb2xvcjsKKy0gKHZvaWQpZXhl
Y3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1dpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3Ry
aW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikoTlNBcnJh
eS8qPE5TU3RyaW5nPiovICoqY29sdW1uTmFtZXMsIE5TU3RyaW5nICoqbm90ZXMsIGRvdWJsZSAq
dGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKip2YWx1ZXMsIFJXSVByb3RvY29sSlNP
Tk9iamVjdCAqKnBheWxvYWQsIGludCAqZGF0YWJhc2VJZCwgVGVzdFByb3RvY29sRGF0YWJhc2VF
cnJvciAqKnNxbEVycm9yLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgKnNjcmVl
bkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiphbHRlcm5hdGVDb2xvcnMsIFRlc3RQcm90
b2NvbERhdGFiYXNlKGFub255bW91cykgKnByaW50Q29sb3IpKXN1Y2Nlc3NDYWxsYmFjayBjb2x1
bW5OYW1lczooTlNBcnJheS8qPE5TU3RyaW5nPiovICoqKWNvbHVtbk5hbWVzIG5vdGVzOihOU1N0
cmluZyAqKilub3RlcyB0aW1lc3RhbXA6KGRvdWJsZSAqKXRpbWVzdGFtcCB2YWx1ZXM6KFJXSVBy
b3RvY29sSlNPTk9iamVjdCAqKil2YWx1ZXMgcGF5bG9hZDooUldJUHJvdG9jb2xKU09OT2JqZWN0
ICoqKXBheWxvYWQgZGF0YWJhc2VJZDooaW50ICopZGF0YWJhc2VJZCBzcWxFcnJvcjooVGVzdFBy
b3RvY29sRGF0YWJhc2VFcnJvciAqKilzcWxFcnJvciBzY3JlZW5Db2xvcjooVGVzdFByb3RvY29s
RGF0YWJhc2VQcmltYXJ5Q29sb3JzICopc2NyZWVuQ29sb3IgYWx0ZXJuYXRlQ29sb3JzOihOU0Fy
cmF5Lyo8TlNTdHJpbmc+Ki8gKiopYWx0ZXJuYXRlQ29sb3JzIHByaW50Q29sb3I6KFRlc3RQcm90
b2NvbERhdGFiYXNlKGFub255bW91cykgKilwcmludENvbG9yOworLSAodm9pZClleGVjdXRlTm9P
cHRpb25hbFBhcmFtZXRlcnNXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJy
b3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKE5TQXJyYXkvKjxOU1N0
cmluZz4qLyAqY29sdW1uTmFtZXMsIE5TU3RyaW5nICpub3RlcywgZG91YmxlIHRpbWVzdGFtcCwg
UldJUHJvdG9jb2xKU09OT2JqZWN0ICp2YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqcGF5
bG9hZCwgaW50IGRhdGFiYXNlSWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKnNxbEVycm9y
LCBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgc2NyZWVuQ29sb3IsIE5TQXJyYXkv
KjxOU1N0cmluZz4qLyAqYWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZShhbm9u
eW1vdXMpIHByaW50Q29sb3IpKXN1Y2Nlc3NDYWxsYmFjayBjb2x1bW5OYW1lczooTlNBcnJheS8q
PE5TU3RyaW5nPiovICopY29sdW1uTmFtZXMgbm90ZXM6KE5TU3RyaW5nICopbm90ZXMgdGltZXN0
YW1wOihkb3VibGUpdGltZXN0YW1wIHZhbHVlczooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopdmFs
dWVzIHBheWxvYWQ6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXBheWxvYWQgZGF0YWJhc2VJZDoo
aW50KWRhdGFiYXNlSWQgc3FsRXJyb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKilzcWxF
cnJvciBzY3JlZW5Db2xvcjooVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzKXNjcmVl
bkNvbG9yIGFsdGVybmF0ZUNvbG9yczooTlNBcnJheS8qPE5TU3RyaW5nPiovICopYWx0ZXJuYXRl
Q29sb3JzIHByaW50Q29sb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlKGFub255bW91cykpcHJpbnRD
b2xvcjsKIEBlbmQKIAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0u
anNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZXhwZWN0ZWQvZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbi1yZXN1bHQKaW5k
ZXggZDAyYmVkN2I4ZDZlMmZlMDJhNTI0MmVkMTIyZjRhMjg0ZjkwYzliOS4uYjMwZGYxNzBhYWJh
NTk3YjM2MTk2MjRiYWQ2NzkzNTE1MzNlNDQ4YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2RlZmluaXRpb25zLXdpdGgt
bWFjLXBsYXRmb3JtLmpzb24tcmVzdWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9kZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9y
bS5qc29uLXJlc3VsdApAQCAtNzYsNyArNzYsNyBAQCBJbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRl
RG9tYWluKCJOZXR3b3JrIiwgbnVsbCk7CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKIAotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVk
ZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yRnJvbnRlbmRSb3V0ZXIuaD4KIApAQCAtOTYsNyArOTYsNyBAQCBjbGFzcyBBbHRlcm5hdGVO
ZXR3b3JrQmFja2VuZERpc3BhdGNoZXIgOiBwdWJsaWMgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNo
ZXIgewogcHVibGljOgogICAgIHZpcnR1YWwgfkFsdGVybmF0ZU5ldHdvcmtCYWNrZW5kRGlzcGF0
Y2hlcigpIHsgfQogI2lmIENPTU1BTkQtTUFDCi0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJj
ZShsb25nIGNhbGxJZCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UobG9uZyBw
cm90b2NvbF9jYWxsSWQpID0gMDsKICNlbmRpZiAvLyBDT01NQU5ELU1BQwogfTsKICNlbmRpZiAv
LyBET01BSU4tTUFDCkBAIC0xNDAsMTEgKzE0MCwxNCBAQCBwdWJsaWM6CiAKICNpbmNsdWRlICJU
ZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx0dXBsZT4KKyNpbmNsdWRlIDx3dGYvRXhw
ZWN0ZWQuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKLXR5cGVkZWYgU3RyaW5nIEVy
cm9yU3RyaW5nOworCiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVS
UykKICNpZiBET01BSU4tTUFDCkBAIC0xNTYsNyArMTU5LDcgQEAgY2xhc3MgQWx0ZXJuYXRlTmV0
d29ya0JhY2tlbmREaXNwYXRjaGVyOwogY2xhc3MgTmV0d29ya0JhY2tlbmREaXNwYXRjaGVySGFu
ZGxlciB7CiBwdWJsaWM6CiAjaWYgQ09NTUFORC1NQUMKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJl
c291cmNlKEVycm9yU3RyaW5nJikgPSAwOworICAgIHZpcnR1YWwgUHJvdG9jb2w6OkVycm9yU3Ry
aW5nT3I8dm9pZD4gbG9hZFJlc291cmNlKCkgPSAwOwogI2VuZGlmIC8vIENPTU1BTkQtTUFDCiBw
cm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB+TmV0d29ya0JhY2tlbmREaXNwYXRjaGVySGFuZGxlcigp
OwpAQCAtMTY3LDEwICsxNzAsMTAgQEAgcHJvdGVjdGVkOgogY2xhc3MgTmV0d29ya0JhY2tlbmRE
aXNwYXRjaGVyIGZpbmFsIDogcHVibGljIFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIHsK
IHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRl
KEJhY2tlbmREaXNwYXRjaGVyJiwgTmV0d29ya0JhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwot
ICAgIHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBS
ZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpIGZpbmFsOworICAgIHZvaWQgZGlzcGF0Y2gobG9u
ZyBwcm90b2NvbF9jYWxsSWQsIGNvbnN0IFN0cmluZyYgcHJvdG9jb2xfbWV0aG9kLCBSZWY8SlNP
Tjo6T2JqZWN0PiYmIHByb3RvY29sX21lc3NhZ2UpIGZpbmFsOwogcHJpdmF0ZToKICNpZiBDT01N
QU5ELU1BQwotICAgIHZvaWQgbG9hZFJlc291cmNlKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNP
Tjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOworICAgIHZvaWQgbG9hZFJlc291cmNlKGxvbmcgcHJv
dG9jbF9jYWxsSWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfcGFyYW1ldGVycyk7
CiAjZW5kaWYgLy8gQ09NTUFORC1NQUMKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9E
SVNQQVRDSEVSUykKIHB1YmxpYzoKQEAgLTIyMSw5ICsyMjQsNyBAQCBwcml2YXRlOgogI2luY2x1
ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4K
ICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3Ry
aW5nLmg+CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKICNp
bmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCkBAIC0yNDgsNDEgKzI0
OSw0MSBAQCBOZXR3b3JrQmFja2VuZERpc3BhdGNoZXI6Ok5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hl
cihCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpcwogICAgIG1fYmFja2VuZERpc3BhdGNoZXIt
PnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbigiTmV0d29yayJfcywgdGhpcyk7CiB9CiAKLXZv
aWQgTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29u
c3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkKK3ZvaWQgTmV0
d29ya0JhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHByb3RvY29sX2NhbGxJZCwgY29u
c3QgU3RyaW5nJiBwcm90b2NvbF9tZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xf
bWVzc2FnZSkKIHsKICAgICBSZWY8TmV0d29ya0JhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0
aGlzKTsKIAotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnM7Ci0gICAgbWVzc2Fn
ZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3MsIHBhcmFtZXRlcnMpOworICAgIGF1dG8gcHJvdG9jb2xf
cGFyYW1ldGVycyA9IHByb3RvY29sX21lc3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9zKTsKIAog
I2lmIENPTU1BTkQtTUFDCi0gICAgaWYgKG1ldGhvZCA9PSAibG9hZFJlc291cmNlIikgewotICAg
ICAgICBsb2FkUmVzb3VyY2UocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKKyAgICBp
ZiAocHJvdG9jb2xfbWV0aG9kID09ICJsb2FkUmVzb3VyY2UiKSB7CisgICAgICAgIGxvYWRSZXNv
dXJjZShwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJvdG9jb2xfcGFyYW1ldGVycykpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmIC8vIENPTU1BTkQtTUFDCiAKLSAgICBtX2JhY2tl
bmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRo
b2ROb3RGb3VuZCwgIidOZXR3b3JrLiIgKyBtZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7Cisg
ICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0
Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29yay4iICsgcHJvdG9jb2xfbWV0aG9kICsgIicg
d2FzIG5vdCBmb3VuZCIpOwogfQogCiAjaWYgQ09NTUFORC1NQUMKLXZvaWQgTmV0d29ya0JhY2tl
bmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpP
YmplY3Q+JiYpCit2b2lkIE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlKGxv
bmcgcHJvdG9jb2xfY2FsbElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQogewogI2lmIEVOQUJM
RShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogICAgIGlmIChtX2FsdGVybmF0ZURp
c3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVzb3VyY2Uo
cmVxdWVzdElkKTsKKyAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVzb3VyY2Uo
cHJvdG9jb2xfY2FsbElkKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZiAvLyBFTkFC
TEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIAotICAgIEVycm9yU3RyaW5nIGVy
cm9yOwotICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRl
KCk7Ci0gICAgbV9hZ2VudC0+bG9hZFJlc291cmNlKGVycm9yKTsKKyAgICBhdXRvIHJlc3VsdCA9
IG1fYWdlbnQtPmxvYWRSZXNvdXJjZSgpOworICAgIGlmICghcmVzdWx0KSB7CisgICAgICAgIEFT
U0VSVCghcmVzdWx0LmVycm9yKCkuaXNFbXB0eSgpKTsKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0
Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3Is
IHJlc3VsdC5lcnJvcigpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIGlmICghZXJy
b3IubGVuZ3RoKCkpCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShy
ZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2UpOwotICAgIGVsc2UKLSAgICAgICAgbV9i
YWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6
U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKKyAgICBhdXRvIHByb3RvY29sX2pzb25NZXNz
YWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5z
ZW5kUmVzcG9uc2UocHJvdG9jb2xfY2FsbElkLCBXVEZNb3ZlKHByb3RvY29sX2pzb25NZXNzYWdl
KSwgZmFsc2UpOwogfQogI2VuZGlmIC8vIENPTU1BTkQtTUFDCiAjZW5kaWYgLy8gRE9NQUlOLU1B
QwpAQCAtMzI1LDYgKzMyNiw3IEBAIHZvaWQgTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyOjpsb2Fk
UmVzb3VyY2UobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+CiAKICNpbmNsdWRl
ICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNp
bmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
IAogbmFtZXNwYWNlIEluc3BlY3RvciB7CkBAIC0zODEsNyArMzgzLDYgQEAgcHJpdmF0ZToKICNp
bmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3Ry
aW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC0zODksMTAgKzM5MCwxMCBAQCBu
YW1lc3BhY2UgSW5zcGVjdG9yIHsKICNpZiBFVkVOVC1NQUMKIHZvaWQgTmV0d29ya0Zyb250ZW5k
RGlzcGF0Y2hlcjo6cmVzb3VyY2VMb2FkZWQoKQogewotICAgIFJlZjxKU09OOjpPYmplY3Q+IGpz
b25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0
U3RyaW5nKCJtZXRob2QiX3MsICJOZXR3b3JrLnJlc291cmNlTG9hZGVkIl9zKTsKKyAgICBhdXRv
IHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBwcm90
b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJOZXR3b3JrLnJlc291cmNl
TG9hZGVkIl9zKTsKIAotICAgIG1fZnJvbnRlbmRSb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdl
LT50b0pTT05TdHJpbmcoKSk7CisgICAgbV9mcm9udGVuZFJvdXRlci5zZW5kRXZlbnQocHJvdG9j
b2xfanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKIH0KICNlbmRpZiAvLyBFVkVOVC1NQUMK
ICNlbmRpZiAvLyBET01BSU4tTUFDCkBAIC00MzQsNyArNDM1LDkgQEAgdm9pZCBOZXR3b3JrRnJv
bnRlbmREaXNwYXRjaGVyOjpyZXNvdXJjZUxvYWRlZCgpCiAjcHJhZ21hIG9uY2UKIAogI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KLSNpbmNsdWRlIDx3
dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8
d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVz
cGFjZSBJbnNwZWN0b3IgewogCkBAIC00NjEsNyArNDY0LDcgQEAgY2xhc3MgTmV0d29ya0Vycm9y
OwogbmFtZXNwYWNlIE5ldHdvcmsgewogCiAjaWYgVFlQRS1NQUMKLWNsYXNzIE5ldHdvcmtFcnJv
ciA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKK2NsYXNzIE5ldHdvcmtFcnJvciBmaW5hbCA6
IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKIHB1YmxpYzoKICAgICBlbnVtIHsKICAgICAgICAg
Tm9GaWVsZHNTZXQgPSAwLApAQCAtNDg4LDE3ICs0OTEsMTcgQEAgcHVibGljOgogICAgICAgICBm
cmllbmQgY2xhc3MgTmV0d29ya0Vycm9yOwogICAgIHB1YmxpYzoKIAotICAgICAgICBCdWlsZGVy
PFNUQVRFIHwgTWVzc2FnZVNldD4mIHNldE1lc3NhZ2UoY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAg
ICAgICAgQnVpbGRlcjxTVEFURSB8IE1lc3NhZ2VTZXQ+JiBzZXRNZXNzYWdlKGNvbnN0IFN0cmlu
ZyYgaW5fbWVzc2FnZSkKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShT
VEFURSAmIE1lc3NhZ2VTZXQpLCBwcm9wZXJ0eV9tZXNzYWdlX2FscmVhZHlfc2V0KTsKLSAgICAg
ICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm1lc3NhZ2UiX3MsIHZhbHVlKTsKKyAgICAgICAg
ICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm1lc3NhZ2UiX3MsIGluX21lc3NhZ2UpOwogICAgICAg
ICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxNZXNzYWdlU2V0PigpOwogICAgICAgICB9CiAKLSAgICAg
ICAgQnVpbGRlcjxTVEFURSB8IENvZGVTZXQ+JiBzZXRDb2RlKGludCB2YWx1ZSkKKyAgICAgICAg
QnVpbGRlcjxTVEFURSB8IENvZGVTZXQ+JiBzZXRDb2RlKGludCBpbl9jb2RlKQogICAgICAgICB7
CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQ29kZVNldCksIHByb3BlcnR5
X2NvZGVfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldEludGVnZXIoImNv
ZGUiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRJbnRlZ2VyKCJjb2RlIl9z
LCBpbl9jb2RlKTsKICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Q29kZVNldD4oKTsKICAg
ICAgICAgfQogCkBAIC01NzAsOCArNTczLDcgQEAgcHVibGljOgogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKIAotI2luY2x1ZGUgPHd0Zi9PcHRp
b25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvQXNz
ZXJ0aW9ucy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtNjMxLDcgKzYzMyw3IEBA
IGNsYXNzIE9iakNJbnNwZWN0b3JOZXR3b3JrQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJs
aWMgQWx0ZXJuYXRlTmV0d29ya0JhY2tlCiBwdWJsaWM6CiAgICAgT2JqQ0luc3BlY3Rvck5ldHdv
cmtCYWNrZW5kRGlzcGF0Y2hlcihpZDxUZXN0UHJvdG9jb2xOZXR3b3JrRG9tYWluSGFuZGxlcj4g
aGFuZGxlcikgeyBtX2RlbGVnYXRlID0gaGFuZGxlcjsgfQogI2lmIENPTU1BTkQtTUFDCi0gICAg
dm9pZCBsb2FkUmVzb3VyY2UobG9uZyByZXF1ZXN0SWQpIGZpbmFsOworICAgIHZvaWQgbG9hZFJl
c291cmNlKGxvbmcgcHJvdG9jb2xfY2FsbElkKSBmaW5hbDsKICNlbmRpZiAvLyBDT01NQU5ELU1B
QwogcHJpdmF0ZToKICAgICBSZXRhaW5QdHI8aWQ8VGVzdFByb3RvY29sTmV0d29ya0RvbWFpbkhh
bmRsZXI+PiBtX2RlbGVnYXRlOwpAQCAtNjgzLDIxICs2ODUsMjIgQEAgbmFtZXNwYWNlIEluc3Bl
Y3RvciB7CiAKICNpZiBET01BSU4tTUFDCiAjaWYgQ09NTUFORC1NQUMKLXZvaWQgT2JqQ0luc3Bl
Y3Rvck5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlKGxvbmcgcmVxdWVzdElk
KQordm9pZCBPYmpDSW5zcGVjdG9yTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3Vy
Y2UobG9uZyBwcm90b2NvbF9jYWxsSWQpCiB7CiAgICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25k
c1RvU2VsZWN0b3I6QHNlbGVjdG9yKGxvYWRSZXNvdXJjZVdpdGhFcnJvckNhbGxiYWNrOnN1Y2Nl
c3NDYWxsYmFjazopXSkgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90
b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAi
J05ldHdvcmsubG9hZFJlc291cmNlJyB3YXMgbm90IGZvdW5kIl9zKTsKKyAgICAgICAgYmFja2Vu
ZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxsSWQsIEJhY2tl
bmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidOZXR3b3JrLmxvYWRSZXNvdXJjZScgd2Fz
IG5vdCBmb3VuZCJfcyk7CiAgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5n
RXJyb3JzKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZCBlcnJvckNhbGxiYWNr
ID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVw
b3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJv
ciwgZXJyb3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVy
cm9yKHByb3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJv
cik7CiAgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CiAg
ICAgfTsKIAogICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF57Ci0gICAgICAgIGJhY2tlbmREaXNw
YXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIEpTT046Ok9iamVjdDo6Y3JlYXRlKCks
IGZhbHNlKTsKKyAgICAgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVj
dDo6Y3JlYXRlKCk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShw
cm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJvdG9jb2xfanNvbk1lc3NhZ2UpLCBmYWxzZSk7CiAg
ICAgfTsKIAogICAgIFttX2RlbGVnYXRlIGxvYWRSZXNvdXJjZVdpdGhFcnJvckNhbGxiYWNrOmVy
cm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107CkBAIC05MTEsOSAr
OTE0LDkgQEAgdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKIHsKICAgICBjb25zdCBGcm9udGVu
ZFJvdXRlciYgcm91dGVyID0gX2NvbnRyb2xsZXItPmZyb250ZW5kUm91dGVyKCk7CiAKLSAgICBS
ZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0g
ICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiTmV0d29yay5yZXNvdXJjZUxv
YWRlZCJfcyk7Ci0gICAgcm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5n
KCkpOworICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0
ZSgpOworICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIk5l
dHdvcmsucmVzb3VyY2VMb2FkZWQiX3MpOworICAgIHJvdXRlci5zZW5kRXZlbnQocHJvdG9jb2xf
anNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKIH0KICNlbmRpZiAvLyBFVkVOVC1NQUMKIApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2V4cGVjdGVkL2RvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZG9tYWluLWRlYnVn
Z2FibGVUeXBlcy5qc29uLXJlc3VsdAppbmRleCBhNDhmNmY5YjVhMTk3OTgyYWQ2OTEwMjlhZWFh
ZGM2NzUyZjgxMzJhLi5jODc1MTQ4ZjNkYWYwNWVkMzFhY2VkOTdjMzJlYjNiYjc1NDdmOGFiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
ZXhwZWN0ZWQvZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5qc29uLXJlc3VsdAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZG9tYWluLWRl
YnVnZ2FibGVUeXBlcy5qc29uLXJlc3VsdApAQCAtNzAsNyArNzAsNyBAQCBJbnNwZWN0b3JCYWNr
ZW5kLmFjdGl2YXRlRG9tYWluKCJEb21haW4iLCBbIndlYi1wYWdlIl0pOwogCiAjaWYgRU5BQkxF
KElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAKLSNpbmNsdWRlICJUZXN0UHJvdG9j
b2xUeXBlcy5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgogI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CiAKQEAgLTg4LDcgKzg4LDcg
QEAgcHJpdmF0ZToKIGNsYXNzIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyIDogcHVi
bGljIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5B
bHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlcigpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBD
b21tYW5kKGxvbmcgY2FsbElkKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIENvbW1hbmQobG9uZyBw
cm90b2NvbF9jYWxsSWQpID0gMDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgpAQCAt
MTMwLDExICsxMzAsMTQgQEAgcHVibGljOgogCiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0
cy5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
Lmg+CisjaW5jbHVkZSA8dHVwbGU+CisjaW5jbHVkZSA8d3RmL0V4cGVjdGVkLmg+CisjaW5jbHVk
ZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5h
bWVzcGFjZSBJbnNwZWN0b3IgewogCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKwogCiAj
aWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiBjbGFzcyBBbHRlcm5h
dGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjsKQEAgLTE0Miw3ICsxNDUsNyBAQCBjbGFzcyBBbHRl
cm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjsKIAogY2xhc3MgRG9tYWluQmFja2VuZERpc3Bh
dGNoZXJIYW5kbGVyIHsKIHB1YmxpYzoKLSAgICB2aXJ0dWFsIHZvaWQgQ29tbWFuZChFcnJvclN0
cmluZyYpID0gMDsKKyAgICB2aXJ0dWFsIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IENv
bW1hbmQoKSA9IDA7CiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB+RG9tYWluQmFja2VuZERpc3Bh
dGNoZXJIYW5kbGVyKCk7CiB9OwpAQCAtMTUwLDkgKzE1Myw5IEBAIHByb3RlY3RlZDoKIGNsYXNz
IERvbWFpbkJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIFN1cHBsZW1lbnRhbEJhY2tl
bmREaXNwYXRjaGVyIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPERvbWFpbkJhY2tlbmREaXNw
YXRjaGVyPiBjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImLCBEb21haW5CYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXIqKTsKLSAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJp
bmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKSBmaW5hbDsKKyAgICB2b2lk
IGRpc3BhdGNoKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBjb25zdCBTdHJpbmcmIHByb3RvY29sX21l
dGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9tZXNzYWdlKSBmaW5hbDsKIHByaXZh
dGU6Ci0gICAgdm9pZCBDb21tYW5kKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0
PiYmIHBhcmFtZXRlcnMpOworICAgIHZvaWQgQ29tbWFuZChsb25nIHByb3RvY2xfY2FsbElkLCBS
ZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX3BhcmFtZXRlcnMpOwogI2lmIEVOQUJMRShJ
TlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogcHVibGljOgogICAgIHZvaWQgc2V0QWx0
ZXJuYXRlRGlzcGF0Y2hlcihBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlciogYWx0ZXJu
YXRlRGlzcGF0Y2hlcikgeyBtX2FsdGVybmF0ZURpc3BhdGNoZXIgPSBhbHRlcm5hdGVEaXNwYXRj
aGVyOyB9CkBAIC0yMDEsOSArMjA0LDcgQEAgcHJpdmF0ZToKICNpbmNsdWRlICJUZXN0QmFja2Vu
ZERpc3BhdGNoZXJzLmgiCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9u
dGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CiAjaW5jbHVkZSA8d3Rm
L05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiAjaWYg
RU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAjaW5jbHVkZSAiVGVzdEFs
dGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgpAQCAtMjI1LDM4ICsyMjYsMzggQEAgRG9tYWlu
QmFja2VuZERpc3BhdGNoZXI6OkRvbWFpbkJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRj
aGVyJiBiYWNrZW5kRGlzcGEKICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3Bh
dGNoZXJGb3JEb21haW4oIkRvbWFpbiJfcywgdGhpcyk7CiB9CiAKLXZvaWQgRG9tYWluQmFja2Vu
ZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhv
ZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKQordm9pZCBEb21haW5CYWNrZW5kRGlzcGF0
Y2hlcjo6ZGlzcGF0Y2gobG9uZyBwcm90b2NvbF9jYWxsSWQsIGNvbnN0IFN0cmluZyYgcHJvdG9j
b2xfbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX21lc3NhZ2UpCiB7CiAgICAg
UmVmPERvbWFpbkJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKIAotICAgIFJlZlB0
cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnM7Ci0gICAgbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJh
bXMiX3MsIHBhcmFtZXRlcnMpOworICAgIGF1dG8gcHJvdG9jb2xfcGFyYW1ldGVycyA9IHByb3Rv
Y29sX21lc3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9zKTsKIAotICAgIGlmIChtZXRob2QgPT0g
IkNvbW1hbmQiKSB7Ci0gICAgICAgIENvbW1hbmQocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRl
cnMpKTsKKyAgICBpZiAocHJvdG9jb2xfbWV0aG9kID09ICJDb21tYW5kIikgeworICAgICAgICBD
b21tYW5kKHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9wYXJhbWV0ZXJzKSk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQ
cm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEb21haW4u
IiArIG1ldGhvZCArICInIHdhcyBub3QgZm91bmQiKTsKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVy
LT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwg
IidEb21haW4uIiArIHByb3RvY29sX21ldGhvZCArICInIHdhcyBub3QgZm91bmQiKTsKIH0KIAot
dm9pZCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Q29tbWFuZChsb25nIHJlcXVlc3RJZCwgUmVm
UHRyPEpTT046Ok9iamVjdD4mJikKK3ZvaWQgRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkNvbW1h
bmQobG9uZyBwcm90b2NvbF9jYWxsSWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCiB7CiAjaWYg
RU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAgICAgaWYgKG1fYWx0ZXJu
YXRlRGlzcGF0Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPkNvbW1hbmQo
cmVxdWVzdElkKTsKKyAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5Db21tYW5kKHByb3Rv
Y29sX2NhbGxJZCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKElO
U1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAKLSAgICBFcnJvclN0cmluZyBlcnJvcjsK
LSAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwot
ICAgIG1fYWdlbnQtPkNvbW1hbmQoZXJyb3IpOworICAgIGF1dG8gcmVzdWx0ID0gbV9hZ2VudC0+
Q29tbWFuZCgpOworICAgIGlmICghcmVzdWx0KSB7CisgICAgICAgIEFTU0VSVCghcmVzdWx0LmVy
cm9yKCkuaXNFbXB0eSgpKTsKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJv
dG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIHJlc3VsdC5lcnJvcigp
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCi0g
ICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1v
dmUocmVzdWx0KSwgZmFsc2UpOwotICAgIGVsc2UKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdU
Rk1vdmUoZXJyb3IpKTsKKyAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2Jq
ZWN0OjpjcmVhdGUoKTsKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocHJv
dG9jb2xfY2FsbElkLCBXVEZNb3ZlKHByb3RvY29sX2pzb25NZXNzYWdlKSwgZmFsc2UpOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKQEAgLTI5Nyw2ICsyOTgsNyBAQCB2b2lkIERvbWFp
bkJhY2tlbmREaXNwYXRjaGVyOjpDb21tYW5kKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6
T2JqZWN0PiYmKQogCiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUg
PHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewpAQCAtMzQ5LDE2
ICszNTEsMTUgQEAgcHJpdmF0ZToKICNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5o
IgogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4K
LSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3Igewog
CiB2b2lkIERvbWFpbkZyb250ZW5kRGlzcGF0Y2hlcjo6RXZlbnQoKQogewotICAgIFJlZjxKU09O
OjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBqc29u
TWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJEb21haW4uRXZlbnQiX3MpOworICAgIGF1
dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIHBy
b3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRvbWFpbi5FdmVudCJf
cyk7CiAKLSAgICBtX2Zyb250ZW5kUm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09O
U3RyaW5nKCkpOworICAgIG1fZnJvbnRlbmRSb3V0ZXIuc2VuZEV2ZW50KHByb3RvY29sX2pzb25N
ZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgpA
QCAtMzk4LDcgKzM5OSw5IEBAIHZvaWQgRG9tYWluRnJvbnRlbmREaXNwYXRjaGVyOjpFdmVudCgp
CiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3Rv
Y29sVHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9K
U09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC00NTIsOCArNDU1
LDcgQEAgbmFtZXNwYWNlIFByb3RvY29sIHsKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRl
ICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAKLSNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KLSNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4K
IAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKQEAgLTUwOSw3ICs1MTEsNyBAQCBjbGFzcyBPYmpD
SW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgQWx0ZXJuYXRl
RG9tYWluQmFja2VuZAogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAg
IE9iakNJbnNwZWN0b3JEb21haW5CYWNrZW5kRGlzcGF0Y2hlcihpZDxUZXN0UHJvdG9jb2xEb21h
aW5Eb21haW5IYW5kbGVyPiBoYW5kbGVyKSB7IG1fZGVsZWdhdGUgPSBoYW5kbGVyOyB9Ci0gICAg
dm9pZCBDb21tYW5kKGxvbmcgcmVxdWVzdElkKSBmaW5hbDsKKyAgICB2b2lkIENvbW1hbmQobG9u
ZyBwcm90b2NvbF9jYWxsSWQpIGZpbmFsOwogcHJpdmF0ZToKICAgICBSZXRhaW5QdHI8aWQ8VGVz
dFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4+IG1fZGVsZWdhdGU7CiB9OwpAQCAtNTU3LDIx
ICs1NTksMjIgQEAgcHJpdmF0ZToKIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKLXZvaWQgT2Jq
Q0luc3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpDb21tYW5kKGxvbmcgcmVxdWVzdElk
KQordm9pZCBPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkNvbW1hbmQobG9u
ZyBwcm90b2NvbF9jYWxsSWQpCiB7CiAgICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25kc1RvU2Vs
ZWN0b3I6QHNlbGVjdG9yKENvbW1hbmRXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6
KV0pIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihy
ZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEb21haW4uQ29t
bWFuZCcgd2FzIG5vdCBmb3VuZCJfcyk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJl
cG9ydFByb3RvY29sRXJyb3IocHJvdG9jb2xfY2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0
aG9kTm90Rm91bmQsICInRG9tYWluLkNvbW1hbmQnIHdhcyBub3QgZm91bmQiX3MpOwogICAgICAg
ICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCiAgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7
Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVz
dElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAgICAgYmFj
a2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxsSWQsIEJh
Y2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwogICAgICAgICBiYWNrZW5kRGlz
cGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgIH07CiAKICAgICBpZCBzdWNjZXNz
Q2FsbGJhY2sgPSBeewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2Uo
cmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7CisgICAgICAgIGF1dG8g
cHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBi
YWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocHJvdG9jb2xfY2FsbElkLCBXVEZNb3Zl
KHByb3RvY29sX2pzb25NZXNzYWdlKSwgZmFsc2UpOwogICAgIH07CiAKICAgICBbbV9kZWxlZ2F0
ZSBDb21tYW5kV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6
c3VjY2Vzc0NhbGxiYWNrXTsKQEAgLTc3Myw5ICs3NzYsOSBAQCB1c2luZyBuYW1lc3BhY2UgSW5z
cGVjdG9yOwogewogICAgIGNvbnN0IEZyb250ZW5kUm91dGVyJiByb3V0ZXIgPSBfY29udHJvbGxl
ci0+ZnJvbnRlbmRSb3V0ZXIoKTsKIAotICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdl
ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJt
ZXRob2QiX3MsICJEb21haW4uRXZlbnQiX3MpOwotICAgIHJvdXRlci5zZW5kRXZlbnQoanNvbk1l
c3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKKyAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0g
SlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3Ry
aW5nKCJtZXRob2QiX3MsICJEb21haW4uRXZlbnQiX3MpOworICAgIHJvdXRlci5zZW5kRXZlbnQo
cHJvdG9jb2xfanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKIH0KIAogQGVuZApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVj
dGVkL2RvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29u
LXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9l
eHBlY3RlZC9kb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUu
anNvbi1yZXN1bHQKaW5kZXggYTc3ZmUzNTg5Nzg4NTM0NzUwNTYyMjNlMDE5YTFiMGZiMWQ0N2U2
OC4uOTQyZGNjYThmMjYwMWVjNjk3MmJiYzYwOTg0YmRjNzU1NzQxYzNlZiAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2Rv
bWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uLXJlc3Vs
dAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhw
ZWN0ZWQvZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpz
b24tcmVzdWx0CkBAIC03MCw3ICs3MCw3IEBAIEluc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21h
aW4oIkRvbWFpbiIsIFsicGFnZSJdKTsKIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRF
X0RJU1BBVENIRVJTKQogCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKKyNpbmNsdWRl
ICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXIuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JGcm9udGVuZFJvdXRlci5oPgogCkBAIC04OCw3ICs4OCw3IEBAIHByaXZhdGU6CiBjbGFzcyBB
bHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlciA6IHB1YmxpYyBBbHRlcm5hdGVCYWNrZW5k
RGlzcGF0Y2hlciB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+QWx0ZXJuYXRlRG9tYWluQmFja2Vu
ZERpc3BhdGNoZXIoKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgQ29tbWFuZChsb25nIGNhbGxJZCkg
PSAwOworICAgIHZpcnR1YWwgdm9pZCBDb21tYW5kKGxvbmcgcHJvdG9jb2xfY2FsbElkKSA9IDA7
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKQEAgLTEzMCwxMSArMTMwLDE0IEBAIHB1
YmxpYzoKIAogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHR1cGxl
PgorI2luY2x1ZGUgPHd0Zi9FeHBlY3RlZC5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgog
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsK
IAotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKIAogI2lmIEVOQUJMRShJTlNQRUNUT1Jf
QUxURVJOQVRFX0RJU1BBVENIRVJTKQogY2xhc3MgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3Bh
dGNoZXI7CkBAIC0xNDIsNyArMTQ1LDcgQEAgY2xhc3MgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERp
c3BhdGNoZXI7CiAKIGNsYXNzIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7CiBwdWJs
aWM6Ci0gICAgdmlydHVhbCB2b2lkIENvbW1hbmQoRXJyb3JTdHJpbmcmKSA9IDA7CisgICAgdmly
dHVhbCBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBDb21tYW5kKCkgPSAwOwogcHJvdGVj
dGVkOgogICAgIHZpcnR1YWwgfkRvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpOwogfTsK
QEAgLTE1MCw5ICsxNTMsOSBAQCBwcm90ZWN0ZWQ6CiBjbGFzcyBEb21haW5CYWNrZW5kRGlzcGF0
Y2hlciBmaW5hbCA6IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7CiBwdWJs
aWM6CiAgICAgc3RhdGljIFJlZjxEb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEJhY2tl
bmREaXNwYXRjaGVyJiwgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7Ci0gICAgdm9p
ZCBkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09O
OjpPYmplY3Q+JiYgbWVzc2FnZSkgZmluYWw7CisgICAgdm9pZCBkaXNwYXRjaChsb25nIHByb3Rv
Y29sX2NhbGxJZCwgY29uc3QgU3RyaW5nJiBwcm90b2NvbF9tZXRob2QsIFJlZjxKU09OOjpPYmpl
Y3Q+JiYgcHJvdG9jb2xfbWVzc2FnZSkgZmluYWw7CiBwcml2YXRlOgotICAgIHZvaWQgQ29tbWFu
ZChsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKKyAg
ICB2b2lkIENvbW1hbmQobG9uZyBwcm90b2NsX2NhbGxJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4m
JiBwcm90b2NvbF9wYXJhbWV0ZXJzKTsKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9E
SVNQQVRDSEVSUykKIHB1YmxpYzoKICAgICB2b2lkIHNldEFsdGVybmF0ZURpc3BhdGNoZXIoQWx0
ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIqIGFsdGVybmF0ZURpc3BhdGNoZXIpIHsgbV9h
bHRlcm5hdGVEaXNwYXRjaGVyID0gYWx0ZXJuYXRlRGlzcGF0Y2hlcjsgfQpAQCAtMjAxLDkgKzIw
NCw3IEBAIHByaXZhdGU6CiAjaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgogCiAj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNs
dWRlIDx3dGYvSlNPTlZhbHVlcy5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgot
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQogI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0
Y2hlcnMuaCIKQEAgLTIyNSwzOCArMjI2LDM4IEBAIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpE
b21haW5CYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhCiAg
ICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRjaGVyRm9yRG9tYWluKCJEb21h
aW4iX3MsIHRoaXMpOwogfQogCi12b2lkIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRj
aChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+
JiYgbWVzc2FnZSkKK3ZvaWQgRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcg
cHJvdG9jb2xfY2FsbElkLCBjb25zdCBTdHJpbmcmIHByb3RvY29sX21ldGhvZCwgUmVmPEpTT046
Ok9iamVjdD4mJiBwcm90b2NvbF9tZXNzYWdlKQogewogICAgIFJlZjxEb21haW5CYWNrZW5kRGlz
cGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7CiAKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJh
bWV0ZXJzOwotICAgIG1lc3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9zLCBwYXJhbWV0ZXJzKTsK
KyAgICBhdXRvIHByb3RvY29sX3BhcmFtZXRlcnMgPSBwcm90b2NvbF9tZXNzYWdlLT5nZXRPYmpl
Y3QoInBhcmFtcyJfcyk7CiAKLSAgICBpZiAobWV0aG9kID09ICJDb21tYW5kIikgewotICAgICAg
ICBDb21tYW5kKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7CisgICAgaWYgKHByb3Rv
Y29sX21ldGhvZCA9PSAiQ29tbWFuZCIpIHsKKyAgICAgICAgQ29tbWFuZChwcm90b2NvbF9jYWxs
SWQsIFdURk1vdmUocHJvdG9jb2xfcGFyYW1ldGVycykpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5k
RGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRG9tYWluLiIgKyBtZXRob2QgKyAiJyB3YXMg
bm90IGZvdW5kIik7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJv
cihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRG9tYWluLiIgKyBwcm90b2Nv
bF9tZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7CiB9CiAKLXZvaWQgRG9tYWluQmFja2VuZERp
c3BhdGNoZXI6OkNvbW1hbmQobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYp
Cit2b2lkIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpDb21tYW5kKGxvbmcgcHJvdG9jb2xfY2Fs
bElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQogewogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQogICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAg
ICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5Db21tYW5kKHJlcXVlc3RJZCk7CisgICAgICAg
IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+Q29tbWFuZChwcm90b2NvbF9jYWxsSWQpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJ
U1BBVENIRVJTKQogCi0gICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVmPEpTT046Ok9iamVj
dD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBtX2FnZW50LT5Db21tYW5k
KGVycm9yKTsKKyAgICBhdXRvIHJlc3VsdCA9IG1fYWdlbnQtPkNvbW1hbmQoKTsKKyAgICBpZiAo
IXJlc3VsdCkgeworICAgICAgICBBU1NFUlQoIXJlc3VsdC5lcnJvcigpLmlzRW1wdHkoKSk7Cisg
ICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERp
c3BhdGNoZXI6OlNlcnZlckVycm9yLCByZXN1bHQuZXJyb3IoKSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CiAKLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQotICAgICAgICBtX2JhY2tlbmREaXNw
YXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsK
LSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJy
b3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7CisgICAg
YXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAg
bV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHByb3RvY29sX2NhbGxJZCwgV1RGTW92
ZShwcm90b2NvbF9qc29uTWVzc2FnZSksIGZhbHNlKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCkBAIC0yOTcsNiArMjk4LDcgQEAgdm9pZCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6
Q29tbWFuZChsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikKIAogI2luY2x1
ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgor
I2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKQEAgLTM0OSwxNiArMzUxLDE1IEBAIHByaXZhdGU6
CiAjaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKIAogI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAogdm9pZCBEb21haW5Gcm9udGVu
ZERpc3BhdGNoZXI6OkV2ZW50KCkKIHsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2Fn
ZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygi
bWV0aG9kIl9zLCAiRG9tYWluLkV2ZW50Il9zKTsKKyAgICBhdXRvIHByb3RvY29sX2pzb25NZXNz
YWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+
c2V0U3RyaW5nKCJtZXRob2QiX3MsICJEb21haW4uRXZlbnQiX3MpOwogCi0gICAgbV9mcm9udGVu
ZFJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKKyAgICBtX2Zy
b250ZW5kUm91dGVyLnNlbmRFdmVudChwcm90b2NvbF9qc29uTWVzc2FnZS0+dG9KU09OU3RyaW5n
KCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKQEAgLTM5OCw3ICszOTksOSBAQCB2
b2lkIERvbWFpbkZyb250ZW5kRGlzcGF0Y2hlcjo6RXZlbnQoKQogI3ByYWdtYSBvbmNlCiAKICNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+Ci0jaW5jbHVk
ZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1
ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBu
YW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtNDUyLDggKzQ1NSw3IEBAIG5hbWVzcGFjZSBQcm90
b2NvbCB7CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0
cy5oIgogCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0
b3IgewogCkBAIC01MDksNyArNTExLDcgQEAgY2xhc3MgT2JqQ0luc3BlY3RvckRvbWFpbkJhY2tl
bmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEFsdGVybmF0ZURvbWFpbkJhY2tlbmQKICAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBPYmpDSW5zcGVjdG9yRG9tYWlu
QmFja2VuZERpc3BhdGNoZXIoaWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4gaGFu
ZGxlcikgeyBtX2RlbGVnYXRlID0gaGFuZGxlcjsgfQotICAgIHZvaWQgQ29tbWFuZChsb25nIHJl
cXVlc3RJZCkgZmluYWw7CisgICAgdm9pZCBDb21tYW5kKGxvbmcgcHJvdG9jb2xfY2FsbElkKSBm
aW5hbDsKIHByaXZhdGU6CiAgICAgUmV0YWluUHRyPGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFp
bkhhbmRsZXI+PiBtX2RlbGVnYXRlOwogfTsKQEAgLTU1NywyMSArNTU5LDIyIEBAIHByaXZhdGU6
CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCi12b2lkIE9iakNJbnNwZWN0b3JEb21haW5CYWNr
ZW5kRGlzcGF0Y2hlcjo6Q29tbWFuZChsb25nIHJlcXVlc3RJZCkKK3ZvaWQgT2JqQ0luc3BlY3Rv
ckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpDb21tYW5kKGxvbmcgcHJvdG9jb2xfY2FsbElkKQog
ewogICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihDb21t
YW5kV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7Ci0gICAgICAgIGJhY2tl
bmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlz
cGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRG9tYWluLkNvbW1hbmQnIHdhcyBub3QgZm91bmQi
X3MpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHBy
b3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RvbWFp
bi5Db21tYW5kJyB3YXMgbm90IGZvdW5kIl9zKTsKICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIo
KS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlk
IGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgewotICAgICAgICBiYWNrZW5kRGlz
cGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNo
ZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJl
cG9ydFByb3RvY29sRXJyb3IocHJvdG9jb2xfY2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2Vy
dmVyRXJyb3IsIGVycm9yKTsKICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRp
bmdFcnJvcnMoKTsKICAgICB9OwogCiAgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKLSAgICAg
ICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgSlNPTjo6T2Jq
ZWN0OjpjcmVhdGUoKSwgZmFsc2UpOworICAgICAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdl
ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+
c2VuZFJlc3BvbnNlKHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2Fn
ZSksIGZhbHNlKTsKICAgICB9OwogCiAgICAgW21fZGVsZWdhdGUgQ29tbWFuZFdpdGhFcnJvckNh
bGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107CkBA
IC03NzMsOSArNzc2LDkgQEAgdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKIHsKICAgICBjb25z
dCBGcm9udGVuZFJvdXRlciYgcm91dGVyID0gX2NvbnRyb2xsZXItPmZyb250ZW5kUm91dGVyKCk7
CiAKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3Jl
YXRlKCk7Ci0gICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiRG9tYWluLkV2
ZW50Il9zKTsKLSAgICByb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmco
KSk7CisgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRl
KCk7CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiRG9t
YWluLkV2ZW50Il9zKTsKKyAgICByb3V0ZXIuc2VuZEV2ZW50KHByb3RvY29sX2pzb25NZXNzYWdl
LT50b0pTT05TdHJpbmcoKSk7CiB9CiAKIEBlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9kb21haW4tdGFyZ2V0VHlw
ZXMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZXhwZWN0ZWQvZG9tYWluLXRhcmdldFR5cGVzLmpzb24tcmVzdWx0CmluZGV4IDBhZDZk
MDQ0NjAxYzJlYTQwODM4OGJjZjI1NGZjNjY1NDVmN2NkMDQuLjg0OWYzYjcyOWNhY2Q4YjlmMTE0
YzhiOWJmYjIxNzE5MWQyNzI5MWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9kb21haW4tdGFyZ2V0VHlwZXMuanNvbi1y
ZXN1bHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2V4cGVjdGVkL2RvbWFpbi10YXJnZXRUeXBlcy5qc29uLXJlc3VsdApAQCAtNzAsNyArNzAsNyBA
QCBJbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJEb21haW4iLCBudWxsKTsKIAogI2lm
IEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogCi0jaW5jbHVkZSAiVGVz
dFByb3RvY29sVHlwZXMuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KICNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgogCkBAIC04OCw3
ICs4OCw3IEBAIHByaXZhdGU6CiBjbGFzcyBBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hl
ciA6IHB1YmxpYyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7CiBwdWJsaWM6CiAgICAgdmly
dHVhbCB+QWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIoKSB7IH0KLSAgICB2aXJ0dWFs
IHZvaWQgQ29tbWFuZChsb25nIGNhbGxJZCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBDb21tYW5k
KGxvbmcgcHJvdG9jb2xfY2FsbElkKSA9IDA7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKQEAgLTEzMCwxMSArMTMwLDE0IEBAIHB1YmxpYzoKIAogI2luY2x1ZGUgIlRlc3RQcm90b2Nv
bE9iamVjdHMuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlci5oPgorI2luY2x1ZGUgPHR1cGxlPgorI2luY2x1ZGUgPHd0Zi9FeHBlY3RlZC5oPgor
I2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7
CisKIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogY2xhc3Mg
QWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXI7CkBAIC0xNDIsNyArMTQ1LDcgQEAgY2xh
c3MgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXI7CiAKIGNsYXNzIERvbWFpbkJhY2tl
bmREaXNwYXRjaGVySGFuZGxlciB7CiBwdWJsaWM6Ci0gICAgdmlydHVhbCB2b2lkIENvbW1hbmQo
RXJyb3JTdHJpbmcmKSA9IDA7CisgICAgdmlydHVhbCBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2
b2lkPiBDb21tYW5kKCkgPSAwOwogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgfkRvbWFpbkJhY2tl
bmREaXNwYXRjaGVySGFuZGxlcigpOwogfTsKQEAgLTE1MCw5ICsxNTMsOSBAQCBwcm90ZWN0ZWQ6
CiBjbGFzcyBEb21haW5CYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBTdXBwbGVtZW50
YWxCYWNrZW5kRGlzcGF0Y2hlciB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxEb21haW5CYWNr
ZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiwgRG9tYWluQmFja2VuZERp
c3BhdGNoZXJIYW5kbGVyKik7Ci0gICAgdm9pZCBkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29u
c3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkgZmluYWw7Cisg
ICAgdm9pZCBkaXNwYXRjaChsb25nIHByb3RvY29sX2NhbGxJZCwgY29uc3QgU3RyaW5nJiBwcm90
b2NvbF9tZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfbWVzc2FnZSkgZmluYWw7
CiBwcml2YXRlOgotICAgIHZvaWQgQ29tbWFuZChsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046
Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKKyAgICB2b2lkIENvbW1hbmQobG9uZyBwcm90b2NsX2Nh
bGxJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9wYXJhbWV0ZXJzKTsKICNpZiBF
TkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIHB1YmxpYzoKICAgICB2b2lk
IHNldEFsdGVybmF0ZURpc3BhdGNoZXIoQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIq
IGFsdGVybmF0ZURpc3BhdGNoZXIpIHsgbV9hbHRlcm5hdGVEaXNwYXRjaGVyID0gYWx0ZXJuYXRl
RGlzcGF0Y2hlcjsgfQpAQCAtMjAxLDkgKzIwNCw3IEBAIHByaXZhdGU6CiAjaW5jbHVkZSAiVGVz
dEJhY2tlbmREaXNwYXRjaGVycy5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgogI2luY2x1
ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
IAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogI2luY2x1ZGUg
IlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKQEAgLTIyNSwzOCArMjI2LDM4IEBA
IERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpEb21haW5CYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5k
RGlzcGF0Y2hlciYgYmFja2VuZERpc3BhCiAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0
ZXJEaXNwYXRjaGVyRm9yRG9tYWluKCJEb21haW4iX3MsIHRoaXMpOwogfQogCi12b2lkIERvbWFp
bkJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5n
JiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkKK3ZvaWQgRG9tYWluQmFja2Vu
ZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBjb25zdCBTdHJpbmcm
IHByb3RvY29sX21ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9tZXNzYWdlKQog
ewogICAgIFJlZjxEb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7CiAKLSAg
ICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzOwotICAgIG1lc3NhZ2UtPmdldE9iamVj
dCgicGFyYW1zIl9zLCBwYXJhbWV0ZXJzKTsKKyAgICBhdXRvIHByb3RvY29sX3BhcmFtZXRlcnMg
PSBwcm90b2NvbF9tZXNzYWdlLT5nZXRPYmplY3QoInBhcmFtcyJfcyk7CiAKLSAgICBpZiAobWV0
aG9kID09ICJDb21tYW5kIikgewotICAgICAgICBDb21tYW5kKHJlcXVlc3RJZCwgV1RGTW92ZShw
YXJhbWV0ZXJzKSk7CisgICAgaWYgKHByb3RvY29sX21ldGhvZCA9PSAiQ29tbWFuZCIpIHsKKyAg
ICAgICAgQ29tbWFuZChwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJvdG9jb2xfcGFyYW1ldGVy
cykpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+
cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICIn
RG9tYWluLiIgKyBtZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7CisgICAgbV9iYWNrZW5kRGlz
cGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90
Rm91bmQsICInRG9tYWluLiIgKyBwcm90b2NvbF9tZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7
CiB9CiAKLXZvaWQgRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkNvbW1hbmQobG9uZyByZXF1ZXN0
SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCit2b2lkIERvbWFpbkJhY2tlbmREaXNwYXRjaGVy
OjpDb21tYW5kKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQog
ewogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogICAgIGlmICht
X2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5D
b21tYW5kKHJlcXVlc3RJZCk7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+Q29tbWFu
ZChwcm90b2NvbF9jYWxsSWQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmIC8vIEVO
QUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogCi0gICAgRXJyb3JTdHJpbmcg
ZXJyb3I7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVh
dGUoKTsKLSAgICBtX2FnZW50LT5Db21tYW5kKGVycm9yKTsKKyAgICBhdXRvIHJlc3VsdCA9IG1f
YWdlbnQtPkNvbW1hbmQoKTsKKyAgICBpZiAoIXJlc3VsdCkgeworICAgICAgICBBU1NFUlQoIXJl
c3VsdC5lcnJvcigpLmlzRW1wdHkoKSk7CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJl
cG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCByZXN1bHQu
ZXJyb3IoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBpZiAoIWVycm9yLmxlbmd0
aCgpKQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElk
LCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERp
c3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVy
cm9yLCBXVEZNb3ZlKGVycm9yKSk7CisgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpT
T046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3Bv
bnNlKHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSksIGZhbHNl
KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCkBAIC0yOTcsNiArMjk4LDcgQEAgdm9p
ZCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Q29tbWFuZChsb25nIHJlcXVlc3RJZCwgUmVmUHRy
PEpTT046Ok9iamVjdD4mJikKIAogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNp
bmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKQEAg
LTM0OSwxNiArMzUxLDE1IEBAIHByaXZhdGU6CiAjaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0
Y2hlcnMuaCIKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91
dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVj
dG9yIHsKIAogdm9pZCBEb21haW5Gcm9udGVuZERpc3BhdGNoZXI6OkV2ZW50KCkKIHsKLSAgICBS
ZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0g
ICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiRG9tYWluLkV2ZW50Il9zKTsK
KyAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsK
KyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJEb21haW4u
RXZlbnQiX3MpOwogCi0gICAgbV9mcm9udGVuZFJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2Ut
PnRvSlNPTlN0cmluZygpKTsKKyAgICBtX2Zyb250ZW5kUm91dGVyLnNlbmRFdmVudChwcm90b2Nv
bF9qc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKQEAgLTM5OCw3ICszOTksOSBAQCB2b2lkIERvbWFpbkZyb250ZW5kRGlzcGF0Y2hlcjo6
RXZlbnQoKQogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JQcm90b2NvbFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRl
IDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtNDUy
LDggKzQ1NSw3IEBAIG5hbWVzcGFjZSBQcm90b2NvbCB7CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFs
Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRp
b25zLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC01MDksNyArNTExLDcgQEAgY2xh
c3MgT2JqQ0luc3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEFs
dGVybmF0ZURvbWFpbkJhY2tlbmQKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1Ymxp
YzoKICAgICBPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXIoaWQ8VGVzdFByb3Rv
Y29sRG9tYWluRG9tYWluSGFuZGxlcj4gaGFuZGxlcikgeyBtX2RlbGVnYXRlID0gaGFuZGxlcjsg
fQotICAgIHZvaWQgQ29tbWFuZChsb25nIHJlcXVlc3RJZCkgZmluYWw7CisgICAgdm9pZCBDb21t
YW5kKGxvbmcgcHJvdG9jb2xfY2FsbElkKSBmaW5hbDsKIHByaXZhdGU6CiAgICAgUmV0YWluUHRy
PGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+PiBtX2RlbGVnYXRlOwogfTsKQEAg
LTU1NywyMSArNTU5LDIyIEBAIHByaXZhdGU6CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCi12
b2lkIE9iakNJbnNwZWN0b3JEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Q29tbWFuZChsb25nIHJl
cXVlc3RJZCkKK3ZvaWQgT2JqQ0luc3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpDb21t
YW5kKGxvbmcgcHJvdG9jb2xfY2FsbElkKQogewogICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9u
ZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihDb21tYW5kV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0Nh
bGxiYWNrOildKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29s
RXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRG9t
YWluLkNvbW1hbmQnIHdhcyBub3QgZm91bmQiX3MpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hl
cigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHByb3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNo
ZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RvbWFpbi5Db21tYW5kJyB3YXMgbm90IGZvdW5kIl9zKTsK
ICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICpl
cnJvcikgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9y
KHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CisgICAg
ICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocHJvdG9jb2xfY2Fs
bElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKICAgICAgICAgYmFj
a2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKICAgICB9OwogCiAgICAgaWQg
c3VjY2Vzc0NhbGxiYWNrID0gXnsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJl
c3BvbnNlKHJlcXVlc3RJZCwgSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSwgZmFsc2UpOworICAgICAg
ICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAg
ICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHByb3RvY29sX2NhbGxJZCwg
V1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSksIGZhbHNlKTsKICAgICB9OwogCiAgICAgW21f
ZGVsZWdhdGUgQ29tbWFuZFdpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0Nh
bGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107CkBAIC03NzMsOSArNzc2LDkgQEAgdXNpbmcgbmFtZXNw
YWNlIEluc3BlY3RvcjsKIHsKICAgICBjb25zdCBGcm9udGVuZFJvdXRlciYgcm91dGVyID0gX2Nv
bnRyb2xsZXItPmZyb250ZW5kUm91dGVyKCk7CiAKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29u
TWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAganNvbk1lc3NhZ2UtPnNldFN0
cmluZygibWV0aG9kIl9zLCAiRG9tYWluLkV2ZW50Il9zKTsKLSAgICByb3V0ZXIuc2VuZEV2ZW50
KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7CisgICAgYXV0byBwcm90b2NvbF9qc29uTWVz
c2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2Ut
PnNldFN0cmluZygibWV0aG9kIl9zLCAiRG9tYWluLkV2ZW50Il9zKTsKKyAgICByb3V0ZXIuc2Vu
ZEV2ZW50KHByb3RvY29sX2pzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7CiB9CiAKIEBlbmQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9leHBlY3RlZC9kb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24tcmVzdWx0
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVk
L2RvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbi1yZXN1bHQKaW5kZXggNDc1
Yjg3YmQwYzhkYTg1MmI1Zjk5MGNiMjFjYjNjMmUwNzYwOTk4NC4uNDE5ZjkyZWRhMTNhZWMyMmQ4
ZjRhZjJhZjE3ZjA1Zjc1ZDI0MWE3OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2RvbWFpbnMtd2l0aC12YXJ5aW5nLWNv
bW1hbmQtc2l6ZXMuanNvbi1yZXN1bHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2RvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQt
c2l6ZXMuanNvbi1yZXN1bHQKQEAgLTc5LDcgKzc5LDcgQEAgSW5zcGVjdG9yQmFja2VuZC5hY3Rp
dmF0ZURvbWFpbigiTmV0d29yazMiLCBudWxsKTsKIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQogCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKKyNp
bmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9J
bnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgogCkBAIC05NywxOSArOTcsMTkgQEAgcHJpdmF0ZToK
IGNsYXNzIEFsdGVybmF0ZU5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIgOiBwdWJsaWMgQWx0ZXJu
YXRlQmFja2VuZERpc3BhdGNoZXIgewogcHVibGljOgogICAgIHZpcnR1YWwgfkFsdGVybmF0ZU5l
dHdvcmsxQmFja2VuZERpc3BhdGNoZXIoKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291
cmNlMShsb25nIGNhbGxJZCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UxKGxv
bmcgcHJvdG9jb2xfY2FsbElkKSA9IDA7CiB9OwogCiBjbGFzcyBBbHRlcm5hdGVOZXR3b3JrM0Jh
Y2tlbmREaXNwYXRjaGVyIDogcHVibGljIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKIHB1
YmxpYzoKICAgICB2aXJ0dWFsIH5BbHRlcm5hdGVOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyKCkg
eyB9Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTEobG9uZyBjYWxsSWQpID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlMihsb25nIGNhbGxJZCkgPSAwOwotICAgIHZpcnR1
YWwgdm9pZCBsb2FkUmVzb3VyY2UzKGxvbmcgY2FsbElkKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lk
IGxvYWRSZXNvdXJjZTQobG9uZyBjYWxsSWQpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJl
c291cmNlNShsb25nIGNhbGxJZCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2U2
KGxvbmcgY2FsbElkKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTcobG9uZyBj
YWxsSWQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlMShsb25nIHByb3RvY29s
X2NhbGxJZCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UyKGxvbmcgcHJvdG9j
b2xfY2FsbElkKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTMobG9uZyBwcm90
b2NvbF9jYWxsSWQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlNChsb25nIHBy
b3RvY29sX2NhbGxJZCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2U1KGxvbmcg
cHJvdG9jb2xfY2FsbElkKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTYobG9u
ZyBwcm90b2NvbF9jYWxsSWQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlNyhs
b25nIHByb3RvY29sX2NhbGxJZCkgPSAwOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
CkBAIC0xNTEsMTEgKzE1MSwxNCBAQCBwdWJsaWM6CiAKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xP
YmplY3RzLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXIuaD4KKyNpbmNsdWRlIDx0dXBsZT4KKyNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4KKyNp
bmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
IAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwor
CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIGNsYXNzIEFs
dGVybmF0ZU5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI7CkBAIC0xNjQsMjAgKzE2NywyMCBAQCBj
bGFzcyBBbHRlcm5hdGVOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOwogCiBjbGFzcyBOZXR3b3Jr
MUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7CiBwdWJsaWM6Ci0gICAgdmlydHVhbCB2b2lkIGxv
YWRSZXNvdXJjZTEoRXJyb3JTdHJpbmcmKSA9IDA7CisgICAgdmlydHVhbCBQcm90b2NvbDo6RXJy
b3JTdHJpbmdPcjx2b2lkPiBsb2FkUmVzb3VyY2UxKCkgPSAwOwogcHJvdGVjdGVkOgogICAgIHZp
cnR1YWwgfk5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCk7CiB9OwogCiBjbGFzcyBO
ZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7CiBwdWJsaWM6Ci0gICAgdmlydHVhbCB2
b2lkIGxvYWRSZXNvdXJjZTEoRXJyb3JTdHJpbmcmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGxv
YWRSZXNvdXJjZTIoRXJyb3JTdHJpbmcmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNv
dXJjZTMoRXJyb3JTdHJpbmcmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTQo
RXJyb3JTdHJpbmcmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTUoRXJyb3JT
dHJpbmcmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTYoRXJyb3JTdHJpbmcm
KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTcoRXJyb3JTdHJpbmcmKSA9IDA7
CisgICAgdmlydHVhbCBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBsb2FkUmVzb3VyY2Ux
KCkgPSAwOworICAgIHZpcnR1YWwgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gbG9hZFJl
c291cmNlMigpID0gMDsKKyAgICB2aXJ0dWFsIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+
IGxvYWRSZXNvdXJjZTMoKSA9IDA7CisgICAgdmlydHVhbCBQcm90b2NvbDo6RXJyb3JTdHJpbmdP
cjx2b2lkPiBsb2FkUmVzb3VyY2U0KCkgPSAwOworICAgIHZpcnR1YWwgUHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8dm9pZD4gbG9hZFJlc291cmNlNSgpID0gMDsKKyAgICB2aXJ0dWFsIFByb3RvY29s
OjpFcnJvclN0cmluZ09yPHZvaWQ+IGxvYWRSZXNvdXJjZTYoKSA9IDA7CisgICAgdmlydHVhbCBQ
cm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBsb2FkUmVzb3VyY2U3KCkgPSAwOwogcHJvdGVj
dGVkOgogICAgIHZpcnR1YWwgfk5ldHdvcmszQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCk7CiB9
OwpAQCAtMTg1LDkgKzE4OCw5IEBAIHByb3RlY3RlZDoKIGNsYXNzIE5ldHdvcmsxQmFja2VuZERp
c3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIgewog
cHVibGljOgogICAgIHN0YXRpYyBSZWY8TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRl
KEJhY2tlbmREaXNwYXRjaGVyJiwgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsK
LSAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwg
UmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKSBmaW5hbDsKKyAgICB2b2lkIGRpc3BhdGNoKGxv
bmcgcHJvdG9jb2xfY2FsbElkLCBjb25zdCBTdHJpbmcmIHByb3RvY29sX21ldGhvZCwgUmVmPEpT
T046Ok9iamVjdD4mJiBwcm90b2NvbF9tZXNzYWdlKSBmaW5hbDsKIHByaXZhdGU6Ci0gICAgdm9p
ZCBsb2FkUmVzb3VyY2UxKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBh
cmFtZXRlcnMpOworICAgIHZvaWQgbG9hZFJlc291cmNlMShsb25nIHByb3RvY2xfY2FsbElkLCBS
ZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX3BhcmFtZXRlcnMpOwogI2lmIEVOQUJMRShJ
TlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogcHVibGljOgogICAgIHZvaWQgc2V0QWx0
ZXJuYXRlRGlzcGF0Y2hlcihBbHRlcm5hdGVOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyKiBhbHRl
cm5hdGVEaXNwYXRjaGVyKSB7IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IGFsdGVybmF0ZURpc3Bh
dGNoZXI7IH0KQEAgLTIwMiwxNSArMjA1LDE1IEBAIHByaXZhdGU6CiBjbGFzcyBOZXR3b3JrM0Jh
Y2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRj
aGVyIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI+
IGNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYsIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyKik7Ci0gICAgdm9pZCBkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBt
ZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkgZmluYWw7CisgICAgdm9pZCBkaXNw
YXRjaChsb25nIHByb3RvY29sX2NhbGxJZCwgY29uc3QgU3RyaW5nJiBwcm90b2NvbF9tZXRob2Qs
IFJlZjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfbWVzc2FnZSkgZmluYWw7CiBwcml2YXRlOgot
ICAgIHZvaWQgbG9hZFJlc291cmNlMShsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVj
dD4mJiBwYXJhbWV0ZXJzKTsKLSAgICB2b2lkIGxvYWRSZXNvdXJjZTIobG9uZyByZXF1ZXN0SWQs
IFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7Ci0gICAgdm9pZCBsb2FkUmVzb3Vy
Y2UzKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOwot
ICAgIHZvaWQgbG9hZFJlc291cmNlNChsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVj
dD4mJiBwYXJhbWV0ZXJzKTsKLSAgICB2b2lkIGxvYWRSZXNvdXJjZTUobG9uZyByZXF1ZXN0SWQs
IFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7Ci0gICAgdm9pZCBsb2FkUmVzb3Vy
Y2U2KGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOwot
ICAgIHZvaWQgbG9hZFJlc291cmNlNyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVj
dD4mJiBwYXJhbWV0ZXJzKTsKKyAgICB2b2lkIGxvYWRSZXNvdXJjZTEobG9uZyBwcm90b2NsX2Nh
bGxJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9wYXJhbWV0ZXJzKTsKKyAgICB2
b2lkIGxvYWRSZXNvdXJjZTIobG9uZyBwcm90b2NsX2NhbGxJZCwgUmVmUHRyPEpTT046Ok9iamVj
dD4mJiBwcm90b2NvbF9wYXJhbWV0ZXJzKTsKKyAgICB2b2lkIGxvYWRSZXNvdXJjZTMobG9uZyBw
cm90b2NsX2NhbGxJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9wYXJhbWV0ZXJz
KTsKKyAgICB2b2lkIGxvYWRSZXNvdXJjZTQobG9uZyBwcm90b2NsX2NhbGxJZCwgUmVmUHRyPEpT
T046Ok9iamVjdD4mJiBwcm90b2NvbF9wYXJhbWV0ZXJzKTsKKyAgICB2b2lkIGxvYWRSZXNvdXJj
ZTUobG9uZyBwcm90b2NsX2NhbGxJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9w
YXJhbWV0ZXJzKTsKKyAgICB2b2lkIGxvYWRSZXNvdXJjZTYobG9uZyBwcm90b2NsX2NhbGxJZCwg
UmVmUHRyPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9wYXJhbWV0ZXJzKTsKKyAgICB2b2lkIGxv
YWRSZXNvdXJjZTcobG9uZyBwcm90b2NsX2NhbGxJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBw
cm90b2NvbF9wYXJhbWV0ZXJzKTsKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQ
QVRDSEVSUykKIHB1YmxpYzoKICAgICB2b2lkIHNldEFsdGVybmF0ZURpc3BhdGNoZXIoQWx0ZXJu
YXRlTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlciogYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeyBtX2Fs
dGVybmF0ZURpc3BhdGNoZXIgPSBhbHRlcm5hdGVEaXNwYXRjaGVyOyB9CkBAIC0yNTksOSArMjYy
LDcgQEAgcHJpdmF0ZToKICNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCiAKICNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1
ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0j
aW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRF
Uk5BVEVfRElTUEFUQ0hFUlMpCiAjaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRj
aGVycy5oIgpAQCAtMjg0LDM4ICsyODUsMzggQEAgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6
TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZEQKICAg
ICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4oIk5ldHdv
cmsxIl9zLCB0aGlzKTsKIH0KIAotdm9pZCBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpkaXNw
YXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmpl
Y3Q+JiYgbWVzc2FnZSkKK3ZvaWQgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2go
bG9uZyBwcm90b2NvbF9jYWxsSWQsIGNvbnN0IFN0cmluZyYgcHJvdG9jb2xfbWV0aG9kLCBSZWY8
SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX21lc3NhZ2UpCiB7CiAgICAgUmVmPE5ldHdvcmsxQmFj
a2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOwogCi0gICAgUmVmUHRyPEpTT046Ok9iamVj
dD4gcGFyYW1ldGVyczsKLSAgICBtZXNzYWdlLT5nZXRPYmplY3QoInBhcmFtcyJfcywgcGFyYW1l
dGVycyk7CisgICAgYXV0byBwcm90b2NvbF9wYXJhbWV0ZXJzID0gcHJvdG9jb2xfbWVzc2FnZS0+
Z2V0T2JqZWN0KCJwYXJhbXMiX3MpOwogCi0gICAgaWYgKG1ldGhvZCA9PSAibG9hZFJlc291cmNl
MSIpIHsKLSAgICAgICAgbG9hZFJlc291cmNlMShyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVy
cykpOworICAgIGlmIChwcm90b2NvbF9tZXRob2QgPT0gImxvYWRSZXNvdXJjZTEiKSB7CisgICAg
ICAgIGxvYWRSZXNvdXJjZTEocHJvdG9jb2xfY2FsbElkLCBXVEZNb3ZlKHByb3RvY29sX3BhcmFt
ZXRlcnMpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1fYmFja2VuZERpc3BhdGNo
ZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5k
LCAiJ05ldHdvcmsxLiIgKyBtZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7CisgICAgbV9iYWNr
ZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0
aG9kTm90Rm91bmQsICInTmV0d29yazEuIiArIHByb3RvY29sX21ldGhvZCArICInIHdhcyBub3Qg
Zm91bmQiKTsKIH0KIAotdm9pZCBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3Vy
Y2UxKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQordm9pZCBOZXR3b3Jr
MUJhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UxKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBS
ZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQogewogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRF
X0RJU1BBVENIRVJTKQogICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAg
bV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVzb3VyY2UxKHJlcXVlc3RJZCk7CisgICAgICAg
IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJlc291cmNlMShwcm90b2NvbF9jYWxsSWQpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJO
QVRFX0RJU1BBVENIRVJTKQogCi0gICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVmPEpTT046
Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBtX2FnZW50LT5s
b2FkUmVzb3VyY2UxKGVycm9yKTsKKyAgICBhdXRvIHJlc3VsdCA9IG1fYWdlbnQtPmxvYWRSZXNv
dXJjZTEoKTsKKyAgICBpZiAoIXJlc3VsdCkgeworICAgICAgICBBU1NFUlQoIXJlc3VsdC5lcnJv
cigpLmlzRW1wdHkoKSk7CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3Rv
Y29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCByZXN1bHQuZXJyb3IoKSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQotICAg
ICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3Zl
KHJlc3VsdCksIGZhbHNlKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXIt
PnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZN
b3ZlKGVycm9yKSk7CisgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVj
dDo6Y3JlYXRlKCk7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHByb3Rv
Y29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSksIGZhbHNlKTsKIH0KIAog
UmVmPE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI+IE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6
OmNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIsIE5ldHdvcmszQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKQEAgLTMzMCwxNCArMzMxLDEzIEBAIE5ldHdv
cmszQmFja2VuZERpc3BhdGNoZXI6Ok5ldHdvcmszQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERp
c3BhdGNoZXImIGJhY2tlbmRECiAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNw
YXRjaGVyRm9yRG9tYWluKCJOZXR3b3JrMyJfcywgdGhpcyk7CiB9CiAKLXZvaWQgTmV0d29yazNC
YWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYg
bWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpCit2b2lkIE5ldHdvcmszQmFja2Vu
ZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBjb25zdCBTdHJpbmcm
IHByb3RvY29sX21ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9tZXNzYWdlKQog
ewogICAgIFJlZjxOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKIAot
ICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnM7Ci0gICAgbWVzc2FnZS0+Z2V0T2Jq
ZWN0KCJwYXJhbXMiX3MsIHBhcmFtZXRlcnMpOworICAgIGF1dG8gcHJvdG9jb2xfcGFyYW1ldGVy
cyA9IHByb3RvY29sX21lc3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9zKTsKIAotICAgIHVzaW5n
IENhbGxIYW5kbGVyID0gdm9pZCAoTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6KikobG9uZyBy
ZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSk7CisgICAgdXNpbmcgQ2Fs
bEhhbmRsZXIgPSB2b2lkIChOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjoqKShsb25nIHByb3Rv
Y29sX2NhbGxJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9tZXNzYWdlKTsKICAg
ICB1c2luZyBEaXNwYXRjaE1hcCA9IEhhc2hNYXA8U3RyaW5nLCBDYWxsSGFuZGxlcj47CiAgICAg
c3RhdGljIE5ldmVyRGVzdHJveWVkPERpc3BhdGNoTWFwPiBkaXNwYXRjaE1hcDsKICAgICBpZiAo
ZGlzcGF0Y2hNYXAuZ2V0KCkuaXNFbXB0eSgpKSB7CkBAIC0zNTgsMTQ2ICszNTgsMTUzIEBAIHZv
aWQgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNv
bnN0IFN0cmluZyYgbWV0aG9kLCBSCiAgICAgICAgICAgICBkaXNwYXRjaE1hcC5nZXQoKS5hZGQo
Y29tbWFuZHNbaV0ubmFtZSwgY29tbWFuZHNbaV0uaGFuZGxlcik7CiAgICAgfQogCi0gICAgYXV0
byBmaW5kUmVzdWx0ID0gZGlzcGF0Y2hNYXAuZ2V0KCkuZmluZChtZXRob2QpOworICAgIGF1dG8g
ZmluZFJlc3VsdCA9IGRpc3BhdGNoTWFwLmdldCgpLmZpbmQocHJvdG9jb2xfbWV0aG9kKTsKICAg
ICBpZiAoZmluZFJlc3VsdCA9PSBkaXNwYXRjaE1hcC5nZXQoKS5lbmQoKSkgewotICAgICAgICBt
X2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVy
OjpNZXRob2ROb3RGb3VuZCwgIidOZXR3b3JrMy4iICsgbWV0aG9kICsgIicgd2FzIG5vdCBmb3Vu
ZCIpOworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJh
Y2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidOZXR3b3JrMy4iICsgcHJvdG9jb2xf
bWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgKCgqdGhpcykuKmZpbmRSZXN1bHQtPnZhbHVlKShyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1l
dGVycykpOworICAgICgoKnRoaXMpLipmaW5kUmVzdWx0LT52YWx1ZSkocHJvdG9jb2xfY2FsbElk
LCBXVEZNb3ZlKHByb3RvY29sX3BhcmFtZXRlcnMpKTsKIH0KIAotdm9pZCBOZXR3b3JrM0JhY2tl
bmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UxKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6
T2JqZWN0PiYmKQordm9pZCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2Ux
KGxvbmcgcHJvdG9jb2xfY2FsbElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQogewogI2lmIEVO
QUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogICAgIGlmIChtX2FsdGVybmF0
ZURpc3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVzb3Vy
Y2UxKHJlcXVlc3RJZCk7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJlc291
cmNlMShwcm90b2NvbF9jYWxsSWQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmIC8v
IEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogCi0gICAgRXJyb3JTdHJp
bmcgZXJyb3I7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0Ojpj
cmVhdGUoKTsKLSAgICBtX2FnZW50LT5sb2FkUmVzb3VyY2UxKGVycm9yKTsKKyAgICBhdXRvIHJl
c3VsdCA9IG1fYWdlbnQtPmxvYWRSZXNvdXJjZTEoKTsKKyAgICBpZiAoIXJlc3VsdCkgeworICAg
ICAgICBBU1NFUlQoIXJlc3VsdC5lcnJvcigpLmlzRW1wdHkoKSk7CisgICAgICAgIG1fYmFja2Vu
ZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZl
ckVycm9yLCByZXN1bHQuZXJyb3IoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBp
ZiAoIWVycm9yLmxlbmd0aCgpKQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVz
cG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKLSAgICBlbHNlCi0gICAg
ICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3Bh
dGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7CisgICAgYXV0byBwcm90b2NvbF9q
c29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgbV9iYWNrZW5kRGlzcGF0
Y2hlci0+c2VuZFJlc3BvbnNlKHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9qc29u
TWVzc2FnZSksIGZhbHNlKTsKIH0KIAotdm9pZCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjps
b2FkUmVzb3VyY2UyKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQordm9p
ZCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UyKGxvbmcgcHJvdG9jb2xf
Y2FsbElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQogewogI2lmIEVOQUJMRShJTlNQRUNUT1Jf
QUxURVJOQVRFX0RJU1BBVENIRVJTKQogICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsK
LSAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVzb3VyY2UyKHJlcXVlc3RJZCk7
CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJlc291cmNlMihwcm90b2NvbF9j
YWxsSWQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNU
T1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogCi0gICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAg
UmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBt
X2FnZW50LT5sb2FkUmVzb3VyY2UyKGVycm9yKTsKKyAgICBhdXRvIHJlc3VsdCA9IG1fYWdlbnQt
PmxvYWRSZXNvdXJjZTIoKTsKKyAgICBpZiAoIXJlc3VsdCkgeworICAgICAgICBBU1NFUlQoIXJl
c3VsdC5lcnJvcigpLmlzRW1wdHkoKSk7CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJl
cG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCByZXN1bHQu
ZXJyb3IoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBpZiAoIWVycm9yLmxlbmd0
aCgpKQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElk
LCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERp
c3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVy
cm9yLCBXVEZNb3ZlKGVycm9yKSk7CisgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpT
T046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3Bv
bnNlKHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSksIGZhbHNl
KTsKIH0KIAotdm9pZCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UzKGxv
bmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQordm9pZCBOZXR3b3JrM0JhY2tl
bmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UzKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBSZWZQdHI8
SlNPTjo6T2JqZWN0PiYmKQogewogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BB
VENIRVJTKQogICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRl
cm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVzb3VyY2UzKHJlcXVlc3RJZCk7CisgICAgICAgIG1fYWx0
ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJlc291cmNlMyhwcm90b2NvbF9jYWxsSWQpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJ
U1BBVENIRVJTKQogCi0gICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVmPEpTT046Ok9iamVj
dD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBtX2FnZW50LT5sb2FkUmVz
b3VyY2UzKGVycm9yKTsKKyAgICBhdXRvIHJlc3VsdCA9IG1fYWdlbnQtPmxvYWRSZXNvdXJjZTMo
KTsKKyAgICBpZiAoIXJlc3VsdCkgeworICAgICAgICBBU1NFUlQoIXJlc3VsdC5lcnJvcigpLmlz
RW1wdHkoKSk7CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJy
b3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCByZXN1bHQuZXJyb3IoKSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQotICAgICAgICBt
X2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3Vs
dCksIGZhbHNlKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9y
dFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVy
cm9yKSk7CisgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3Jl
YXRlKCk7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHByb3RvY29sX2Nh
bGxJZCwgV1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSksIGZhbHNlKTsKIH0KIAotdm9pZCBO
ZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U0KGxvbmcgcmVxdWVzdElkLCBS
ZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQordm9pZCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjps
b2FkUmVzb3VyY2U0KGxvbmcgcHJvdG9jb2xfY2FsbElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYm
KQogewogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogICAgIGlm
IChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVy
LT5sb2FkUmVzb3VyY2U0KHJlcXVlc3RJZCk7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hl
ci0+bG9hZFJlc291cmNlNChwcm90b2NvbF9jYWxsSWQpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogCi0g
ICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNP
Tjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBtX2FnZW50LT5sb2FkUmVzb3VyY2U0KGVycm9yKTsK
KyAgICBhdXRvIHJlc3VsdCA9IG1fYWdlbnQtPmxvYWRSZXNvdXJjZTQoKTsKKyAgICBpZiAoIXJl
c3VsdCkgeworICAgICAgICBBU1NFUlQoIXJlc3VsdC5lcnJvcigpLmlzRW1wdHkoKSk7CisgICAg
ICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3Bh
dGNoZXI6OlNlcnZlckVycm9yLCByZXN1bHQuZXJyb3IoKSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CiAKLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQotICAgICAgICBtX2JhY2tlbmREaXNwYXRj
aGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKLSAg
ICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3Io
QmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7CisgICAgYXV0
byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgbV9i
YWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShw
cm90b2NvbF9qc29uTWVzc2FnZSksIGZhbHNlKTsKIH0KIAotdm9pZCBOZXR3b3JrM0JhY2tlbmRE
aXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U1KGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiYmKQordm9pZCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U1KGxv
bmcgcHJvdG9jb2xfY2FsbElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQogewogI2lmIEVOQUJM
RShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogICAgIGlmIChtX2FsdGVybmF0ZURp
c3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVzb3VyY2U1
KHJlcXVlc3RJZCk7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJlc291cmNl
NShwcm90b2NvbF9jYWxsSWQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmIC8vIEVO
QUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogCi0gICAgRXJyb3JTdHJpbmcg
ZXJyb3I7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVh
dGUoKTsKLSAgICBtX2FnZW50LT5sb2FkUmVzb3VyY2U1KGVycm9yKTsKKyAgICBhdXRvIHJlc3Vs
dCA9IG1fYWdlbnQtPmxvYWRSZXNvdXJjZTUoKTsKKyAgICBpZiAoIXJlc3VsdCkgeworICAgICAg
ICBBU1NFUlQoIXJlc3VsdC5lcnJvcigpLmlzRW1wdHkoKSk7CisgICAgICAgIG1fYmFja2VuZERp
c3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVy
cm9yLCByZXN1bHQuZXJyb3IoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBpZiAo
IWVycm9yLmxlbmd0aCgpKQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9u
c2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKLSAgICBlbHNlCi0gICAgICAg
IG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNo
ZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7CisgICAgYXV0byBwcm90b2NvbF9qc29u
TWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+c2VuZFJlc3BvbnNlKHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9qc29uTWVz
c2FnZSksIGZhbHNlKTsKIH0KIAotdm9pZCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2Fk
UmVzb3VyY2U2KGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQordm9pZCBO
ZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U2KGxvbmcgcHJvdG9jb2xfY2Fs
bElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQogewogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQogICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAg
ICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVzb3VyY2U2KHJlcXVlc3RJZCk7Cisg
ICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJlc291cmNlNihwcm90b2NvbF9jYWxs
SWQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1Jf
QUxURVJOQVRFX0RJU1BBVENIRVJTKQogCi0gICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVm
PEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBtX2Fn
ZW50LT5sb2FkUmVzb3VyY2U2KGVycm9yKTsKKyAgICBhdXRvIHJlc3VsdCA9IG1fYWdlbnQtPmxv
YWRSZXNvdXJjZTYoKTsKKyAgICBpZiAoIXJlc3VsdCkgeworICAgICAgICBBU1NFUlQoIXJlc3Vs
dC5lcnJvcigpLmlzRW1wdHkoKSk7CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9y
dFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCByZXN1bHQuZXJy
b3IoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBpZiAoIWVycm9yLmxlbmd0aCgp
KQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBX
VEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3Bh
dGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9y
LCBXVEZNb3ZlKGVycm9yKSk7CisgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046
Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNl
KHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSksIGZhbHNlKTsK
IH0KIAotdm9pZCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U3KGxvbmcg
cmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQordm9pZCBOZXR3b3JrM0JhY2tlbmRE
aXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U3KGxvbmcgcHJvdG9jb2xfY2FsbElkLCBSZWZQdHI8SlNP
Tjo6T2JqZWN0PiYmKQogewogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENI
RVJTKQogICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5h
dGVEaXNwYXRjaGVyLT5sb2FkUmVzb3VyY2U3KHJlcXVlc3RJZCk7CisgICAgICAgIG1fYWx0ZXJu
YXRlRGlzcGF0Y2hlci0+bG9hZFJlc291cmNlNyhwcm90b2NvbF9jYWxsSWQpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BB
VENIRVJTKQogCi0gICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4g
cmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBtX2FnZW50LT5sb2FkUmVzb3Vy
Y2U3KGVycm9yKTsKKyAgICBhdXRvIHJlc3VsdCA9IG1fYWdlbnQtPmxvYWRSZXNvdXJjZTcoKTsK
KyAgICBpZiAoIXJlc3VsdCkgeworICAgICAgICBBU1NFUlQoIXJlc3VsdC5lcnJvcigpLmlzRW1w
dHkoKSk7CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3Io
QmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCByZXN1bHQuZXJyb3IoKSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CiAKLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQotICAgICAgICBtX2Jh
Y2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCks
IGZhbHNlKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFBy
b3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9y
KSk7CisgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRl
KCk7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHByb3RvY29sX2NhbGxJ
ZCwgV1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSksIGZhbHNlKTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgSW5zcGVjdG9yCkBAIC01MzgsNiArNTQ1LDcgQEAgdm9pZCBOZXR3b3JrM0JhY2tlbmRE
aXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U3KGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2Jq
ZWMKIAogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDx3dGYvSlNP
TlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKQEAgLTU4MSw3ICs1ODksNiBA
QCBjbGFzcyBGcm9udGVuZFJvdXRlcjsKICNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVy
cy5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIu
aD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3Ig
ewogCkBAIC02MjIsNyArNjI5LDkgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiAjcHJhZ21hIG9u
Y2UKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4K
LSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+
CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC02ODEsOCArNjkwLDcgQEAgdXNpbmcg
TG9hZGVySWQgPSBTdHJpbmc7CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGVzdFBy
b3RvY29sT2JqZWN0cy5oIgogCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8
d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAKIG5hbWVz
cGFjZSBJbnNwZWN0b3IgewogCkBAIC03MzksNyArNzQ3LDcgQEAgY2xhc3MgT2JqQ0luc3BlY3Rv
ck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgQWx0ZXJuYXRlTmV0d29y
azFCYWMKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBPYmpDSW5z
cGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcihpZDxUZXN0UHJvdG9jb2xOZXR3b3JrMURv
bWFpbkhhbmRsZXI+IGhhbmRsZXIpIHsgbV9kZWxlZ2F0ZSA9IGhhbmRsZXI7IH0KLSAgICB2b2lk
IGxvYWRSZXNvdXJjZTEobG9uZyByZXF1ZXN0SWQpIGZpbmFsOworICAgIHZvaWQgbG9hZFJlc291
cmNlMShsb25nIHByb3RvY29sX2NhbGxJZCkgZmluYWw7CiBwcml2YXRlOgogICAgIFJldGFpblB0
cjxpZDxUZXN0UHJvdG9jb2xOZXR3b3JrMURvbWFpbkhhbmRsZXI+PiBtX2RlbGVnYXRlOwogfTsK
QEAgLTc0OCwxMyArNzU2LDEzIEBAIGNsYXNzIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmRE
aXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEFsdGVybmF0ZU5ldHdvcmszQmFjCiAgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgT2JqQ0luc3BlY3Rvck5ldHdvcmszQmFj
a2VuZERpc3BhdGNoZXIoaWQ8VGVzdFByb3RvY29sTmV0d29yazNEb21haW5IYW5kbGVyPiBoYW5k
bGVyKSB7IG1fZGVsZWdhdGUgPSBoYW5kbGVyOyB9Ci0gICAgdm9pZCBsb2FkUmVzb3VyY2UxKGxv
bmcgcmVxdWVzdElkKSBmaW5hbDsKLSAgICB2b2lkIGxvYWRSZXNvdXJjZTIobG9uZyByZXF1ZXN0
SWQpIGZpbmFsOwotICAgIHZvaWQgbG9hZFJlc291cmNlMyhsb25nIHJlcXVlc3RJZCkgZmluYWw7
Ci0gICAgdm9pZCBsb2FkUmVzb3VyY2U0KGxvbmcgcmVxdWVzdElkKSBmaW5hbDsKLSAgICB2b2lk
IGxvYWRSZXNvdXJjZTUobG9uZyByZXF1ZXN0SWQpIGZpbmFsOwotICAgIHZvaWQgbG9hZFJlc291
cmNlNihsb25nIHJlcXVlc3RJZCkgZmluYWw7Ci0gICAgdm9pZCBsb2FkUmVzb3VyY2U3KGxvbmcg
cmVxdWVzdElkKSBmaW5hbDsKKyAgICB2b2lkIGxvYWRSZXNvdXJjZTEobG9uZyBwcm90b2NvbF9j
YWxsSWQpIGZpbmFsOworICAgIHZvaWQgbG9hZFJlc291cmNlMihsb25nIHByb3RvY29sX2NhbGxJ
ZCkgZmluYWw7CisgICAgdm9pZCBsb2FkUmVzb3VyY2UzKGxvbmcgcHJvdG9jb2xfY2FsbElkKSBm
aW5hbDsKKyAgICB2b2lkIGxvYWRSZXNvdXJjZTQobG9uZyBwcm90b2NvbF9jYWxsSWQpIGZpbmFs
OworICAgIHZvaWQgbG9hZFJlc291cmNlNShsb25nIHByb3RvY29sX2NhbGxJZCkgZmluYWw7Cisg
ICAgdm9pZCBsb2FkUmVzb3VyY2U2KGxvbmcgcHJvdG9jb2xfY2FsbElkKSBmaW5hbDsKKyAgICB2
b2lkIGxvYWRSZXNvdXJjZTcobG9uZyBwcm90b2NvbF9jYWxsSWQpIGZpbmFsOwogcHJpdmF0ZToK
ICAgICBSZXRhaW5QdHI8aWQ8VGVzdFByb3RvY29sTmV0d29yazNEb21haW5IYW5kbGVyPj4gbV9k
ZWxlZ2F0ZTsKIH07CkBAIC04MDIsMTYxICs4MTAsMTY5IEBAIHByaXZhdGU6CiAKIG5hbWVzcGFj
ZSBJbnNwZWN0b3IgewogCi12b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRj
aGVyOjpsb2FkUmVzb3VyY2UxKGxvbmcgcmVxdWVzdElkKQordm9pZCBPYmpDSW5zcGVjdG9yTmV0
d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMShsb25nIHByb3RvY29sX2NhbGxJ
ZCkKIHsKICAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Io
bG9hZFJlc291cmNlMVdpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazopXSkgewotICAg
ICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwg
QmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdvcmsxLmxvYWRSZXNvdXJj
ZTEnIHdhcyBub3QgZm91bmQiX3MpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBv
cnRQcm90b2NvbEVycm9yKHByb3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhv
ZE5vdEZvdW5kLCAiJ05ldHdvcmsxLmxvYWRSZXNvdXJjZTEnIHdhcyBub3QgZm91bmQiX3MpOwog
ICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCiAgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVy
cm9yKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3Io
cmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAg
ICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxs
SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwogICAgICAgICBiYWNr
ZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgIH07CiAKICAgICBpZCBz
dWNjZXNzQ2FsbGJhY2sgPSBeewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVz
cG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7CisgICAgICAg
IGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAg
ICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocHJvdG9jb2xfY2FsbElkLCBX
VEZNb3ZlKHByb3RvY29sX2pzb25NZXNzYWdlKSwgZmFsc2UpOwogICAgIH07CiAKICAgICBbbV9k
ZWxlZ2F0ZSBsb2FkUmVzb3VyY2UxV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNj
ZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsKIH0KIAotdm9pZCBPYmpDSW5zcGVjdG9yTmV0
d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMShsb25nIHJlcXVlc3RJZCkKK3Zv
aWQgT2JqQ0luc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTEo
bG9uZyBwcm90b2NvbF9jYWxsSWQpCiB7CiAgICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25kc1Rv
U2VsZWN0b3I6QHNlbGVjdG9yKGxvYWRSZXNvdXJjZTFXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNz
Q2FsbGJhY2s6KV0pIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9j
b2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidO
ZXR3b3JrMy5sb2FkUmVzb3VyY2UxJyB3YXMgbm90IGZvdW5kIl9zKTsKKyAgICAgICAgYmFja2Vu
ZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxsSWQsIEJhY2tl
bmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidOZXR3b3JrMy5sb2FkUmVzb3VyY2UxJyB3
YXMgbm90IGZvdW5kIl9zKTsKICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRp
bmdFcnJvcnMoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlkIGVycm9yQ2FsbGJh
Y2sgPSBeKE5TU3RyaW5nICplcnJvcikgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5y
ZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVy
cm9yLCBlcnJvcik7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29s
RXJyb3IocHJvdG9jb2xfY2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVy
cm9yKTsKICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsK
ICAgICB9OwogCiAgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKLSAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgSlNPTjo6T2JqZWN0OjpjcmVhdGUo
KSwgZmFsc2UpOworICAgICAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2Jq
ZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNl
KHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSksIGZhbHNlKTsK
ICAgICB9OwogCiAgICAgW21fZGVsZWdhdGUgbG9hZFJlc291cmNlMVdpdGhFcnJvckNhbGxiYWNr
OmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107CiB9CiAKLXZv
aWQgT2JqQ0luc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTIo
bG9uZyByZXF1ZXN0SWQpCit2b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRj
aGVyOjpsb2FkUmVzb3VyY2UyKGxvbmcgcHJvdG9jb2xfY2FsbElkKQogewogICAgIGlmICghW21f
ZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihsb2FkUmVzb3VyY2UyV2l0aEVy
cm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRj
aGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6
TWV0aG9kTm90Rm91bmQsICInTmV0d29yazMubG9hZFJlc291cmNlMicgd2FzIG5vdCBmb3VuZCJf
cyk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocHJv
dG9jb2xfY2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29y
azMubG9hZFJlc291cmNlMicgd2FzIG5vdCBmb3VuZCJfcyk7CiAgICAgICAgIGJhY2tlbmREaXNw
YXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
ICAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFj
a2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmRE
aXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hl
cigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHByb3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNo
ZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CiAgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNl
bmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgfTsKIAogICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF57
Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIEpT
T046Ok9iamVjdDo6Y3JlYXRlKCksIGZhbHNlKTsKKyAgICAgICAgYXV0byBwcm90b2NvbF9qc29u
TWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIGJhY2tlbmREaXNwYXRj
aGVyKCktPnNlbmRSZXNwb25zZShwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJvdG9jb2xfanNv
bk1lc3NhZ2UpLCBmYWxzZSk7CiAgICAgfTsKIAogICAgIFttX2RlbGVnYXRlIGxvYWRSZXNvdXJj
ZTJXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNz
Q2FsbGJhY2tdOwogfQogCi12b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRj
aGVyOjpsb2FkUmVzb3VyY2UzKGxvbmcgcmVxdWVzdElkKQordm9pZCBPYmpDSW5zcGVjdG9yTmV0
d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMyhsb25nIHByb3RvY29sX2NhbGxJ
ZCkKIHsKICAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Io
bG9hZFJlc291cmNlM1dpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazopXSkgewotICAg
ICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwg
QmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdvcmszLmxvYWRSZXNvdXJj
ZTMnIHdhcyBub3QgZm91bmQiX3MpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBv
cnRQcm90b2NvbEVycm9yKHByb3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhv
ZE5vdEZvdW5kLCAiJ05ldHdvcmszLmxvYWRSZXNvdXJjZTMnIHdhcyBub3QgZm91bmQiX3MpOwog
ICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCiAgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVy
cm9yKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3Io
cmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAg
ICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxs
SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwogICAgICAgICBiYWNr
ZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgIH07CiAKICAgICBpZCBz
dWNjZXNzQ2FsbGJhY2sgPSBeewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVz
cG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7CisgICAgICAg
IGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAg
ICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocHJvdG9jb2xfY2FsbElkLCBX
VEZNb3ZlKHByb3RvY29sX2pzb25NZXNzYWdlKSwgZmFsc2UpOwogICAgIH07CiAKICAgICBbbV9k
ZWxlZ2F0ZSBsb2FkUmVzb3VyY2UzV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNj
ZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsKIH0KIAotdm9pZCBPYmpDSW5zcGVjdG9yTmV0
d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNChsb25nIHJlcXVlc3RJZCkKK3Zv
aWQgT2JqQ0luc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTQo
bG9uZyBwcm90b2NvbF9jYWxsSWQpCiB7CiAgICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25kc1Rv
U2VsZWN0b3I6QHNlbGVjdG9yKGxvYWRSZXNvdXJjZTRXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNz
Q2FsbGJhY2s6KV0pIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9j
b2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidO
ZXR3b3JrMy5sb2FkUmVzb3VyY2U0JyB3YXMgbm90IGZvdW5kIl9zKTsKKyAgICAgICAgYmFja2Vu
ZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxsSWQsIEJhY2tl
bmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidOZXR3b3JrMy5sb2FkUmVzb3VyY2U0JyB3
YXMgbm90IGZvdW5kIl9zKTsKICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRp
bmdFcnJvcnMoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlkIGVycm9yQ2FsbGJh
Y2sgPSBeKE5TU3RyaW5nICplcnJvcikgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5y
ZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVy
cm9yLCBlcnJvcik7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29s
RXJyb3IocHJvdG9jb2xfY2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVy
cm9yKTsKICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsK
ICAgICB9OwogCiAgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKLSAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgSlNPTjo6T2JqZWN0OjpjcmVhdGUo
KSwgZmFsc2UpOworICAgICAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2Jq
ZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNl
KHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSksIGZhbHNlKTsK
ICAgICB9OwogCiAgICAgW21fZGVsZWdhdGUgbG9hZFJlc291cmNlNFdpdGhFcnJvckNhbGxiYWNr
OmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107CiB9CiAKLXZv
aWQgT2JqQ0luc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTUo
bG9uZyByZXF1ZXN0SWQpCit2b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRj
aGVyOjpsb2FkUmVzb3VyY2U1KGxvbmcgcHJvdG9jb2xfY2FsbElkKQogewogICAgIGlmICghW21f
ZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihsb2FkUmVzb3VyY2U1V2l0aEVy
cm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRj
aGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6
TWV0aG9kTm90Rm91bmQsICInTmV0d29yazMubG9hZFJlc291cmNlNScgd2FzIG5vdCBmb3VuZCJf
cyk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocHJv
dG9jb2xfY2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29y
azMubG9hZFJlc291cmNlNScgd2FzIG5vdCBmb3VuZCJfcyk7CiAgICAgICAgIGJhY2tlbmREaXNw
YXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
ICAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFj
a2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmRE
aXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hl
cigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHByb3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNo
ZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CiAgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNl
bmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgfTsKIAogICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF57
Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIEpT
T046Ok9iamVjdDo6Y3JlYXRlKCksIGZhbHNlKTsKKyAgICAgICAgYXV0byBwcm90b2NvbF9qc29u
TWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIGJhY2tlbmREaXNwYXRj
aGVyKCktPnNlbmRSZXNwb25zZShwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJvdG9jb2xfanNv
bk1lc3NhZ2UpLCBmYWxzZSk7CiAgICAgfTsKIAogICAgIFttX2RlbGVnYXRlIGxvYWRSZXNvdXJj
ZTVXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNz
Q2FsbGJhY2tdOwogfQogCi12b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRj
aGVyOjpsb2FkUmVzb3VyY2U2KGxvbmcgcmVxdWVzdElkKQordm9pZCBPYmpDSW5zcGVjdG9yTmV0
d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNihsb25nIHByb3RvY29sX2NhbGxJ
ZCkKIHsKICAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Io
bG9hZFJlc291cmNlNldpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazopXSkgewotICAg
ICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwg
QmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdvcmszLmxvYWRSZXNvdXJj
ZTYnIHdhcyBub3QgZm91bmQiX3MpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBv
cnRQcm90b2NvbEVycm9yKHByb3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhv
ZE5vdEZvdW5kLCAiJ05ldHdvcmszLmxvYWRSZXNvdXJjZTYnIHdhcyBub3QgZm91bmQiX3MpOwog
ICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCiAgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVy
cm9yKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3Io
cmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAg
ICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxs
SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwogICAgICAgICBiYWNr
ZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgIH07CiAKICAgICBpZCBz
dWNjZXNzQ2FsbGJhY2sgPSBeewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVz
cG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7CisgICAgICAg
IGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAg
ICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocHJvdG9jb2xfY2FsbElkLCBX
VEZNb3ZlKHByb3RvY29sX2pzb25NZXNzYWdlKSwgZmFsc2UpOwogICAgIH07CiAKICAgICBbbV9k
ZWxlZ2F0ZSBsb2FkUmVzb3VyY2U2V2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNj
ZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsKIH0KIAotdm9pZCBPYmpDSW5zcGVjdG9yTmV0
d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNyhsb25nIHJlcXVlc3RJZCkKK3Zv
aWQgT2JqQ0luc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTco
bG9uZyBwcm90b2NvbF9jYWxsSWQpCiB7CiAgICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25kc1Rv
U2VsZWN0b3I6QHNlbGVjdG9yKGxvYWRSZXNvdXJjZTdXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNz
Q2FsbGJhY2s6KV0pIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9j
b2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidO
ZXR3b3JrMy5sb2FkUmVzb3VyY2U3JyB3YXMgbm90IGZvdW5kIl9zKTsKKyAgICAgICAgYmFja2Vu
ZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxsSWQsIEJhY2tl
bmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidOZXR3b3JrMy5sb2FkUmVzb3VyY2U3JyB3
YXMgbm90IGZvdW5kIl9zKTsKICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRp
bmdFcnJvcnMoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlkIGVycm9yQ2FsbGJh
Y2sgPSBeKE5TU3RyaW5nICplcnJvcikgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5y
ZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVy
cm9yLCBlcnJvcik7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29s
RXJyb3IocHJvdG9jb2xfY2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVy
cm9yKTsKICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsK
ICAgICB9OwogCiAgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKLSAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgSlNPTjo6T2JqZWN0OjpjcmVhdGUo
KSwgZmFsc2UpOworICAgICAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2Jq
ZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNl
KHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSksIGZhbHNlKTsK
ICAgICB9OwogCiAgICAgW21fZGVsZWdhdGUgbG9hZFJlc291cmNlN1dpdGhFcnJvckNhbGxiYWNr
OmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0
ZWQvZW51bS12YWx1ZXMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZW51bS12YWx1ZXMuanNvbi1yZXN1bHQKaW5kZXgg
Nzk1M2NiZjIxODM4OGY4NDc3NzJiZDQxM2QxODAyNjI5YTdiODA1Yi4uOTkzZjlhYTI4YzcxMzY2
ZGRlZTdhZGExZjFjNjEwYzY3MWMxZmIyNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2VudW0tdmFsdWVzLmpzb24tcmVz
dWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9l
eHBlY3RlZC9lbnVtLXZhbHVlcy5qc29uLXJlc3VsdApAQCAtMzAsMTggKzMwLDE5IEBACiAKIC8v
IFR5cGVEb21haW4KIEluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW4oIlR5cGVEb21haW4i
LCBudWxsKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFbnVtKCJUeXBlRG9tYWluLlR5cGVE
b21haW5FbnVtIiwge1NoYXJlZDogInNoYXJlZCIsIFJlZDogInJlZCIsIEdyZWVuOiAiZ3JlZW4i
LCBCbHVlOiAiYmx1ZSJ9KTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFbnVtKCJUeXBlRG9t
YWluLkVudW0iLCB7U2hhcmVkOiAic2hhcmVkIiwgMTogIjEiLCAyOiAiMiJ9KTsKIEluc3BlY3Rv
ckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIlR5cGVEb21haW4iLCBudWxsKTsKIAogLy8gQ29tbWFu
ZERvbWFpbgogSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbigiQ29tbWFuZERvbWFpbiIs
IG51bGwpOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIkNvbW1hbmREb21haW4u
Y29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUiLCBudWxsLCBbXSwgWyJyZXR1cm5WYWx1ZSJdKTsK
K0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJDb21tYW5kRG9tYWluLmNvbW1hbmQi
LCBudWxsLCBbeyJuYW1lIjogImVudW1SZXF1aXJlZCIsICJ0eXBlIjogInN0cmluZyJ9LCB7Im5h
bWUiOiAiZW51bU9wdGlvbmFsIiwgInR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjogdHJ1ZX0s
IHsibmFtZSI6ICJwYXJhbWV0ZXJSZXF1aXJlZCIsICJ0eXBlIjogInN0cmluZyJ9LCB7Im5hbWUi
OiAicGFyYW1ldGVyT3B0aW9uYWwiLCAidHlwZSI6ICJzdHJpbmciLCAib3B0aW9uYWwiOiB0cnVl
fV0sIFsiZW51bVJlcXVpcmVkIiwgImVudW1PcHRpb25hbCIsICJyZXR1cm5SZXF1aXJlZCIsICJy
ZXR1cm5PcHRpb25hbCJdKTsKIEluc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIkNvbW1h
bmREb21haW4iLCBudWxsKTsKIAogLy8gRXZlbnREb21haW4KIEluc3BlY3RvckJhY2tlbmQucmVn
aXN0ZXJEb21haW4oIkV2ZW50RG9tYWluIiwgbnVsbCk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lz
dGVyRW51bSgiRXZlbnREb21haW4uRXZlbnRXaXRoRW51bVBhcmFtZXRlclBhcmFtZXRlciIsIHtT
aGFyZWQ6ICJzaGFyZWQiLCBCbGFjazogImJsYWNrIiwgV2hpdGU6ICJ3aGl0ZSJ9KTsKLUluc3Bl
Y3RvckJhY2tlbmQucmVnaXN0ZXJFdmVudCgiRXZlbnREb21haW4uZXZlbnRXaXRoRW51bVBhcmFt
ZXRlciIsIG51bGwsIFsicGFyYW1ldGVyIl0pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckVu
dW0oIkV2ZW50RG9tYWluLkV2ZW50UGFyYW1ldGVyUmVxdWlyZWQiLCB7U2hhcmVkOiAic2hhcmVk
IiwgU2hhcmVkUmVxdWlyZWQ6ICJzaGFyZWRSZXF1aXJlZCIsIEdyZXk6ICJncmV5In0pOworSW5z
cGVjdG9yQmFja2VuZC5yZWdpc3RlckVudW0oIkV2ZW50RG9tYWluLkV2ZW50UGFyYW1ldGVyT3B0
aW9uYWwiLCB7U2hhcmVkOiAic2hhcmVkIiwgU2hhcmVkT3B0aW9uYWw6ICJzaGFyZWRPcHRpb25h
bCIsIEdyZWVuOiAiZ3JlZW4ifSk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRXZlbnQoIkV2
ZW50RG9tYWluLmV2ZW50IiwgbnVsbCwgWyJlbnVtUmVxdWlyZWQiLCAiZW51bU9wdGlvbmFsIiwg
InBhcmFtZXRlclJlcXVpcmVkIiwgInBhcmFtZXRlck9wdGlvbmFsIl0pOwogSW5zcGVjdG9yQmFj
a2VuZC5yZWdpc3RlckV2ZW50RG9tYWluRGlzcGF0Y2hlciA9IEluc3BlY3RvckJhY2tlbmQucmVn
aXN0ZXJEaXNwYXRjaGVyLmJpbmQoSW5zcGVjdG9yQmFja2VuZCwgIkV2ZW50RG9tYWluIik7CiBJ
bnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJFdmVudERvbWFpbiIsIG51bGwpOwogIyMj
IEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMuaW4KQEAgLTgwLDcgKzgxLDcg
QEAgSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiRXZlbnREb21haW4iLCBudWxsKTsK
IAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogCi0jaW5jbHVk
ZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgi
CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4K
ICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgogCkBA
IC05OCw3ICs5OSw3IEBAIHByaXZhdGU6CiBjbGFzcyBBbHRlcm5hdGVDb21tYW5kRG9tYWluQmFj
a2VuZERpc3BhdGNoZXIgOiBwdWJsaWMgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewogcHVi
bGljOgogICAgIHZpcnR1YWwgfkFsdGVybmF0ZUNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hl
cigpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBjb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZShsb25n
IGNhbGxJZCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBjb21tYW5kKGxvbmcgcHJvdG9jb2xfY2Fs
bElkLCBjb25zdCBTdHJpbmcmIGVudW1SZXF1aXJlZCwgY29uc3QgU3RyaW5nJiBvcHRfZW51bU9w
dGlvbmFsLCBjb25zdCBTdHJpbmcmIHBhcmFtZXRlclJlcXVpcmVkLCBjb25zdCBTdHJpbmcmIG9w
dF9wYXJhbWV0ZXJPcHRpb25hbCkgPSAwOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
CkBAIC0xNDAsMTEgKzE0MSwxNCBAQCBwdWJsaWM6CiAKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xP
YmplY3RzLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXIuaD4KKyNpbmNsdWRlIDx0dXBsZT4KKyNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4KKyNp
bmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
IAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwor
CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIGNsYXNzIEFs
dGVybmF0ZUNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcjsKQEAgLTE1MiwxNCArMTU2LDcg
QEAgY2xhc3MgQWx0ZXJuYXRlQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOwogCiBjbGFz
cyBDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKIHB1YmxpYzoKLSAgICAv
LyBOYW1lZCBhZnRlciBwYXJhbWV0ZXIgJ3JldHVyblZhbHVlJyB3aGlsZSBnZW5lcmF0aW5nIGNv
bW1hbmQvZXZlbnQgY29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUuCi0gICAgZW51bSBjbGFzcyBS
ZXR1cm5WYWx1ZSB7Ci0gICAgICAgIFNoYXJlZCA9IDAsCi0gICAgICAgIEN5YW4gPSA2LAotICAg
ICAgICBNYWdlbnRhID0gNywKLSAgICAgICAgWWVsbG93ID0gOCwKLSAgICB9OyAvLyBlbnVtIGNs
YXNzIFJldHVyblZhbHVlCi0gICAgdmlydHVhbCB2b2lkIGNvbW1hbmRXaXRoRW51bVJldHVyblZh
bHVlKEVycm9yU3RyaW5nJiwgQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6
UmV0dXJuVmFsdWUqIG91dF9yZXR1cm5WYWx1ZSkgPSAwOworICAgIHZpcnR1YWwgUHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8c3RkOjp0dXBsZTxQcm90b2NvbDo6VHlwZURvbWFpbjo6RW51bSAvKiBl
bnVtUmVxdWlyZWQgKi8sIE9wdGlvbmFsPFByb3RvY29sOjpUeXBlRG9tYWluOjpFbnVtPiAvKiBv
cHRfZW51bU9wdGlvbmFsICovLCBTdHJpbmcgLyogcmV0dXJuUmVxdWlyZWQgKi8sIFN0cmluZyAv
KiBvcHRfcmV0dXJuT3B0aW9uYWwgKi8+PiBjb21tYW5kKFByb3RvY29sOjpUeXBlRG9tYWluOjpF
bnVtIGVudW1SZXF1aXJlZCwgT3B0aW9uYWw8UHJvdG9jb2w6OlR5cGVEb21haW46OkVudW0+JiYg
b3B0X2VudW1PcHRpb25hbCwgY29uc3QgU3RyaW5nJiBwYXJhbWV0ZXJSZXF1aXJlZCwgY29uc3Qg
U3RyaW5nJiBvcHRfcGFyYW1ldGVyT3B0aW9uYWwpID0gMDsKIHByb3RlY3RlZDoKICAgICB2aXJ0
dWFsIH5Db21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCk7CiB9OwpAQCAtMTY3
LDkgKzE2NCw5IEBAIHByb3RlY3RlZDoKIGNsYXNzIENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0
Y2hlciBmaW5hbCA6IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7CiBwdWJs
aWM6CiAgICAgc3RhdGljIFJlZjxDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0
ZShCYWNrZW5kRGlzcGF0Y2hlciYsIENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXIqKTsKLSAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1l
dGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKSBmaW5hbDsKKyAgICB2b2lkIGRpc3Bh
dGNoKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBjb25zdCBTdHJpbmcmIHByb3RvY29sX21ldGhvZCwg
UmVmPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9tZXNzYWdlKSBmaW5hbDsKIHByaXZhdGU6Ci0g
ICAgdm9pZCBjb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZShsb25nIHJlcXVlc3RJZCwgUmVmUHRy
PEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKKyAgICB2b2lkIGNvbW1hbmQobG9uZyBwcm90
b2NsX2NhbGxJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9wYXJhbWV0ZXJzKTsK
ICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIHB1YmxpYzoKICAg
ICB2b2lkIHNldEFsdGVybmF0ZURpc3BhdGNoZXIoQWx0ZXJuYXRlQ29tbWFuZERvbWFpbkJhY2tl
bmREaXNwYXRjaGVyKiBhbHRlcm5hdGVEaXNwYXRjaGVyKSB7IG1fYWx0ZXJuYXRlRGlzcGF0Y2hl
ciA9IGFsdGVybmF0ZURpc3BhdGNoZXI7IH0KQEAgLTIxOCw5ICsyMTUsNyBAQCBwcml2YXRlOgog
I2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKIAogI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0pTT05WYWx1
ZXMuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVS
UykKICNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCkBAIC0yNDIs
NDIgKzIzNyw2MyBAQCBDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkNvbW1hbmREb21h
aW5CYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlcgogICAgIG1fYmFja2VuZERpc3Bh
dGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbigiQ29tbWFuZERvbWFpbiJfcywgdGhp
cyk7CiB9CiAKLXZvaWQgQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChs
b25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYg
bWVzc2FnZSkKK3ZvaWQgQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChs
b25nIHByb3RvY29sX2NhbGxJZCwgY29uc3QgU3RyaW5nJiBwcm90b2NvbF9tZXRob2QsIFJlZjxK
U09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfbWVzc2FnZSkKIHsKICAgICBSZWY8Q29tbWFuZERvbWFp
bkJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKIAotICAgIFJlZlB0cjxKU09OOjpP
YmplY3Q+IHBhcmFtZXRlcnM7Ci0gICAgbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3MsIHBh
cmFtZXRlcnMpOworICAgIGF1dG8gcHJvdG9jb2xfcGFyYW1ldGVycyA9IHByb3RvY29sX21lc3Nh
Z2UtPmdldE9iamVjdCgicGFyYW1zIl9zKTsKIAotICAgIGlmIChtZXRob2QgPT0gImNvbW1hbmRX
aXRoRW51bVJldHVyblZhbHVlIikgewotICAgICAgICBjb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1
ZShyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykpOworICAgIGlmIChwcm90b2NvbF9tZXRo
b2QgPT0gImNvbW1hbmQiKSB7CisgICAgICAgIGNvbW1hbmQocHJvdG9jb2xfY2FsbElkLCBXVEZN
b3ZlKHByb3RvY29sX3BhcmFtZXRlcnMpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNo
ZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0NvbW1hbmREb21haW4uIiArIG1ldGhvZCArICInIHdhcyBu
b3QgZm91bmQiKTsKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9y
KEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidDb21tYW5kRG9tYWluLiIgKyBw
cm90b2NvbF9tZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7CiB9CiAKLXZvaWQgQ29tbWFuZERv
bWFpbkJhY2tlbmREaXNwYXRjaGVyOjpjb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZShsb25nIHJl
cXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikKK3ZvaWQgQ29tbWFuZERvbWFpbkJhY2tl
bmREaXNwYXRjaGVyOjpjb21tYW5kKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBSZWZQdHI8SlNPTjo6
T2JqZWN0PiYmIHByb3RvY29sX3BhcmFtZXRlcnMpCiB7CisgICAgYXV0byBpbl9lbnVtUmVxdWly
ZWRfanNvbiA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFN0cmluZyhwcm90b2NvbF9wYXJhbWV0
ZXJzLmdldCgpLCAiZW51bVJlcXVpcmVkIl9zLCB0cnVlKTsKKyAgICBhdXRvIGluX29wdF9lbnVt
T3B0aW9uYWxfanNvbiA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFN0cmluZyhwcm90b2NvbF9w
YXJhbWV0ZXJzLmdldCgpLCAiZW51bU9wdGlvbmFsIl9zLCBmYWxzZSk7CisgICAgYXV0byBpbl9w
YXJhbWV0ZXJSZXF1aXJlZCA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFN0cmluZyhwcm90b2Nv
bF9wYXJhbWV0ZXJzLmdldCgpLCAicGFyYW1ldGVyUmVxdWlyZWQiX3MsIHRydWUpOworICAgIGF1
dG8gaW5fb3B0X3BhcmFtZXRlck9wdGlvbmFsID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3Ry
aW5nKHByb3RvY29sX3BhcmFtZXRlcnMuZ2V0KCksICJwYXJhbWV0ZXJPcHRpb25hbCJfcywgZmFs
c2UpOworICAgIGlmIChtX2JhY2tlbmREaXNwYXRjaGVyLT5oYXNQcm90b2NvbEVycm9ycygpKSB7
CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2Vu
ZERpc3BhdGNoZXI6OkludmFsaWRQYXJhbXMsICJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJ0Nv
bW1hbmREb21haW4uY29tbWFuZCcgY2FuJ3QgYmUgcHJvY2Vzc2VkIl9zKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKwogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJT
KQogICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVE
aXNwYXRjaGVyLT5jb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZShyZXF1ZXN0SWQpOworICAgICAg
ICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmNvbW1hbmQocHJvdG9jb2xfY2FsbElkLCBpbl9lbnVt
UmVxdWlyZWRfanNvbiwgaW5fb3B0X2VudW1PcHRpb25hbF9qc29uLCBpbl9wYXJhbWV0ZXJSZXF1
aXJlZCwgaW5fb3B0X3BhcmFtZXRlck9wdGlvbmFsKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
ICNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIAotICAg
IEVycm9yU3RyaW5nIGVycm9yOwotICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046
Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFu
ZGxlcjo6UmV0dXJuVmFsdWUgb3V0X3JldHVyblZhbHVlOwotICAgIG1fYWdlbnQtPmNvbW1hbmRX
aXRoRW51bVJldHVyblZhbHVlKGVycm9yLCAmb3V0X3JldHVyblZhbHVlKTsKKyAgICBhdXRvIGlu
X2VudW1SZXF1aXJlZCA9IFByb3RvY29sOjpUZXN0SGVscGVyczo6cGFyc2VFbnVtVmFsdWVGcm9t
U3RyaW5nPFByb3RvY29sOjpUeXBlRG9tYWluOjpFbnVtPihpbl9lbnVtUmVxdWlyZWRfanNvbik7
CisgICAgaWYgKCFpbl9lbnVtUmVxdWlyZWQpIHsKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIG1h
a2VTdHJpbmcoIlVua25vd24gZW51bVJlcXVpcmVkOiAiX3MsIGluX2VudW1SZXF1aXJlZF9qc29u
KSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQot
ICAgICAgICByZXN1bHQtPnNldFN0cmluZygicmV0dXJuVmFsdWUiX3MsIEluc3BlY3Rvcjo6UHJv
dG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShvdXRfcmV0dXJuVmFsdWUp
KTsKKyAgICBhdXRvIGluX29wdF9lbnVtT3B0aW9uYWwgPSBQcm90b2NvbDo6VGVzdEhlbHBlcnM6
OnBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxQcm90b2NvbDo6VHlwZURvbWFpbjo6RW51bT4oaW5f
b3B0X2VudW1PcHRpb25hbF9qc29uKTsKIAotICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCi0gICAg
ICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUo
cmVzdWx0KSwgZmFsc2UpOwotICAgIGVsc2UKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+
cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1v
dmUoZXJyb3IpKTsKKyAgICBhdXRvIHJlc3VsdCA9IG1fYWdlbnQtPmNvbW1hbmQoKmluX2VudW1S
ZXF1aXJlZCwgV1RGTW92ZShpbl9vcHRfZW51bU9wdGlvbmFsKSwgaW5fcGFyYW1ldGVyUmVxdWly
ZWQsIGluX29wdF9wYXJhbWV0ZXJPcHRpb25hbCk7CisgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAg
ICAgQVNTRVJUKCFyZXN1bHQuZXJyb3IoKS5pc0VtcHR5KCkpOworICAgICAgICBtX2JhY2tlbmRE
aXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJF
cnJvciwgcmVzdWx0LmVycm9yKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYXV0
byBbb3V0X2VudW1SZXF1aXJlZCwgb3V0X29wdF9lbnVtT3B0aW9uYWwsIG91dF9yZXR1cm5SZXF1
aXJlZCwgb3V0X29wdF9yZXR1cm5PcHRpb25hbF0gPSBXVEZNb3ZlKHJlc3VsdC52YWx1ZSgpKTsK
KworICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgp
OworICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoImVudW1SZXF1aXJlZCJfcywg
UHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShvdXRfZW51bVJlcXVp
cmVkKSk7CisgICAgaWYgKCEhb3V0X29wdF9lbnVtT3B0aW9uYWwpCisgICAgICAgIHByb3RvY29s
X2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoImVudW1PcHRpb25hbCJfcywgUHJvdG9jb2w6OlRlc3RI
ZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZSgqb3V0X29wdF9lbnVtT3B0aW9uYWwpKTsKKyAg
ICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJyZXR1cm5SZXF1aXJlZCJfcywgb3V0
X3JldHVyblJlcXVpcmVkKTsKKyAgICBpZiAoISFvdXRfb3B0X3JldHVybk9wdGlvbmFsKQorICAg
ICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJyZXR1cm5PcHRpb25hbCJfcywg
b3V0X29wdF9yZXR1cm5PcHRpb25hbCk7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJl
c3BvbnNlKHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSksIGZh
bHNlKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCkBAIC0zMTgsNiArMzM0LDcgQEAg
dm9pZCBDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OmNvbW1hbmRXaXRoRW51bVJldHVy
blZhbHVlKGxvbmcgcmVxdWVzdElkLAogCiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5o
IgogI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+
CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3Ig
ewpAQCAtMzI4LDEzICszNDUsMTkgQEAgY2xhc3MgRXZlbnREb21haW5Gcm9udGVuZERpc3BhdGNo
ZXIgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIEV2ZW50RG9t
YWluRnJvbnRlbmREaXNwYXRjaGVyKEZyb250ZW5kUm91dGVyJiBmcm9udGVuZFJvdXRlcikgOiBt
X2Zyb250ZW5kUm91dGVyKGZyb250ZW5kUm91dGVyKSB7IH0KLSAgICAgICAgLy8gTmFtZWQgYWZ0
ZXIgcGFyYW1ldGVyICdwYXJhbWV0ZXInIHdoaWxlIGdlbmVyYXRpbmcgY29tbWFuZC9ldmVudCBl
dmVudFdpdGhFbnVtUGFyYW1ldGVyLgotICAgICAgICBlbnVtIGNsYXNzIFBhcmFtZXRlciB7Cisg
ICAgICAgIC8vIE5hbWVkIGFmdGVyIHBhcmFtZXRlciAncGFyYW1ldGVyUmVxdWlyZWQnIHdoaWxl
IGdlbmVyYXRpbmcgY29tbWFuZC9ldmVudCBldmVudC4KKyAgICAgICAgZW51bSBjbGFzcyBQYXJh
bWV0ZXJSZXF1aXJlZCB7CiAgICAgICAgICAgICBTaGFyZWQgPSAwLAotICAgICAgICAgICAgQmxh
Y2sgPSA0LAotICAgICAgICAgICAgV2hpdGUgPSA1LAotICAgICAgICB9OyAvLyBlbnVtIGNsYXNz
IFBhcmFtZXRlcgotICAgIHZvaWQgZXZlbnRXaXRoRW51bVBhcmFtZXRlcihQYXJhbWV0ZXIgcGFy
YW1ldGVyKTsKKyAgICAgICAgICAgIFNoYXJlZFJlcXVpcmVkID0gMywKKyAgICAgICAgICAgIEdy
ZXkgPSA0LAorICAgICAgICB9OyAvLyBlbnVtIGNsYXNzIFBhcmFtZXRlclJlcXVpcmVkCisgICAg
ICAgIC8vIE5hbWVkIGFmdGVyIHBhcmFtZXRlciAncGFyYW1ldGVyT3B0aW9uYWwnIHdoaWxlIGdl
bmVyYXRpbmcgY29tbWFuZC9ldmVudCBldmVudC4KKyAgICAgICAgZW51bSBjbGFzcyBQYXJhbWV0
ZXJPcHRpb25hbCB7CisgICAgICAgICAgICBTaGFyZWQgPSAwLAorICAgICAgICAgICAgU2hhcmVk
T3B0aW9uYWwgPSA1LAorICAgICAgICAgICAgR3JlZW4gPSA2LAorICAgICAgICB9OyAvLyBlbnVt
IGNsYXNzIFBhcmFtZXRlck9wdGlvbmFsCisgICAgdm9pZCBldmVudChQcm90b2NvbDo6VHlwZURv
bWFpbjo6RW51bSBlbnVtUmVxdWlyZWQsIE9wdGlvbmFsPFByb3RvY29sOjpUeXBlRG9tYWluOjpF
bnVtPiYmIG9wdF9lbnVtT3B0aW9uYWwsIGNvbnN0IFN0cmluZyYgcGFyYW1ldGVyUmVxdWlyZWQs
IGNvbnN0IFN0cmluZyYgb3B0X3BhcmFtZXRlck9wdGlvbmFsKTsKIHByaXZhdGU6CiAgICAgRnJv
bnRlbmRSb3V0ZXImIG1fZnJvbnRlbmRSb3V0ZXI7CiB9OwpAQCAtMzc2LDE5ICszOTksMjMgQEAg
cHJpdmF0ZToKICNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgogCiAjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3
dGYvdGV4dC9DU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCi12b2lkIEV2ZW50
RG9tYWluRnJvbnRlbmREaXNwYXRjaGVyOjpldmVudFdpdGhFbnVtUGFyYW1ldGVyKFBhcmFtZXRl
ciBwYXJhbWV0ZXIpCit2b2lkIEV2ZW50RG9tYWluRnJvbnRlbmREaXNwYXRjaGVyOjpldmVudChQ
cm90b2NvbDo6VHlwZURvbWFpbjo6RW51bSBlbnVtUmVxdWlyZWQsIE9wdGlvbmFsPFByb3RvY29s
OjpUeXBlRG9tYWluOjpFbnVtPiYmIG9wdF9lbnVtT3B0aW9uYWwsIGNvbnN0IFN0cmluZyYgcGFy
YW1ldGVyUmVxdWlyZWQsIGNvbnN0IFN0cmluZyYgb3B0X3BhcmFtZXRlck9wdGlvbmFsKQogewot
ICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUo
KTsKLSAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJFdmVudERvbWFpbi5l
dmVudFdpdGhFbnVtUGFyYW1ldGVyIl9zKTsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBwYXJhbXNP
YmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIHBhcmFtc09iamVjdC0+c2V0U3Ry
aW5nKCJwYXJhbWV0ZXIiX3MsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRF
bnVtQ29uc3RhbnRWYWx1ZShwYXJhbWV0ZXIpKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0
KCJwYXJhbXMiX3MsIFdURk1vdmUocGFyYW1zT2JqZWN0KSk7CisgICAgYXV0byBwcm90b2NvbF9q
c29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgcHJvdG9jb2xfanNvbk1l
c3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiRXZlbnREb21haW4uZXZlbnQiX3MpOworICAg
IGF1dG8gcHJvdG9jb2xfcGFyYW1zT2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAg
ICBwcm90b2NvbF9wYXJhbXNPYmplY3QtPnNldFN0cmluZygiZW51bVJlcXVpcmVkIl9zLCBQcm90
b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKGVudW1SZXF1aXJlZCkpOwor
ICAgIGlmICghIW9wdF9lbnVtT3B0aW9uYWwpCisgICAgICAgIHByb3RvY29sX3BhcmFtc09iamVj
dC0+c2V0U3RyaW5nKCJlbnVtT3B0aW9uYWwiX3MsIFByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0
RW51bUNvbnN0YW50VmFsdWUoKm9wdF9lbnVtT3B0aW9uYWwpKTsKKyAgICBwcm90b2NvbF9wYXJh
bXNPYmplY3QtPnNldFN0cmluZygicGFyYW1ldGVyUmVxdWlyZWQiX3MsIHBhcmFtZXRlclJlcXVp
cmVkKTsKKyAgICBpZiAoISFvcHRfcGFyYW1ldGVyT3B0aW9uYWwpCisgICAgICAgIHByb3RvY29s
X3BhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJwYXJhbWV0ZXJPcHRpb25hbCJfcywgb3B0X3BhcmFt
ZXRlck9wdGlvbmFsKTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJh
bXMiX3MsIFdURk1vdmUocHJvdG9jb2xfcGFyYW1zT2JqZWN0KSk7CiAKLSAgICBtX2Zyb250ZW5k
Um91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOworICAgIG1fZnJv
bnRlbmRSb3V0ZXIuc2VuZEV2ZW50KHByb3RvY29sX2pzb25NZXNzYWdlLT50b0pTT05TdHJpbmco
KSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgpAQCAtNDI4LDcgKzQ1NSw5IEBAIHZv
aWQgRXZlbnREb21haW5Gcm9udGVuZERpc3BhdGNoZXI6OmV2ZW50V2l0aEVudW1QYXJhbWV0ZXIo
UGFyYW1ldGVyIHBhcmFtZXRlcikKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25z
Lmg+CisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwu
aD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3Rv
ciB7CiAKQEAgLTQ0MCw3ICs0NjksNyBAQCBuYW1lc3BhY2UgUHJvdG9jb2wgewogCiAvLyBGb3J3
YXJkIGRlY2xhcmF0aW9ucy4KIG5hbWVzcGFjZSBUeXBlRG9tYWluIHsKLWVudW0gY2xhc3MgVHlw
ZURvbWFpbkVudW07CitlbnVtIGNsYXNzIEVudW07CiB9IC8vIFR5cGVEb21haW4KIC8vIEVuZCBv
ZiBmb3J3YXJkIGRlY2xhcmF0aW9ucy4KIApAQCAtNDYwLDEyICs0ODksMTEgQEAgdGVtcGxhdGU8
dHlwZW5hbWUgVD4gU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKFQgZW51bVZhbHVlKQogCiBu
YW1lc3BhY2UgVHlwZURvbWFpbiB7CiAKLWVudW0gY2xhc3MgVHlwZURvbWFpbkVudW0geworZW51
bSBjbGFzcyBFbnVtIHsKICAgICBTaGFyZWQgPSAwLAotICAgIFJlZCA9IDEsCi0gICAgR3JlZW4g
PSAyLAotICAgIEJsdWUgPSAzLAotfTsgLy8gZW51bSBjbGFzcyBUeXBlRG9tYWluRW51bQorICAg
IDEgPSAxLAorICAgIDIgPSAyLAorfTsgLy8gZW51bSBjbGFzcyBFbnVtCiAKIH0gLy8gVHlwZURv
bWFpbgogCkBAIC00NzgsNyArNTA2LDcgQEAgT3B0aW9uYWw8UHJvdG9jb2xFbnVtVHlwZT4gcGFy
c2VFbnVtVmFsdWVGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYpOwogCiAvLyBFbnVtcyBpbiB0aGUg
J1R5cGVEb21haW4nIERvbWFpbgogdGVtcGxhdGU8PgotT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90
b2NvbDo6VHlwZURvbWFpbjo6VHlwZURvbWFpbkVudW0+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmlu
ZzxJbnNwZWN0b3I6OlByb3RvY29sOjpUeXBlRG9tYWluOjpUeXBlRG9tYWluRW51bT4oY29uc3Qg
U3RyaW5nJik7CitPcHRpb25hbDxQcm90b2NvbDo6VHlwZURvbWFpbjo6RW51bT4gcGFyc2VFbnVt
VmFsdWVGcm9tU3RyaW5nPFByb3RvY29sOjpUeXBlRG9tYWluOjpFbnVtPihjb25zdCBTdHJpbmcm
KTsKIAogfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKIApAQCAtNDkyLDcgKzUyMCw3IEBAIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsKIAogLy8gSGFzaCBkZWNsYXJh
dGlvbnMgaW4gdGhlICdUeXBlRG9tYWluJyBEb21haW4KIHRlbXBsYXRlPD4KLXN0cnVjdCBEZWZh
dWx0SGFzaDxJbnNwZWN0b3I6OlByb3RvY29sOjpUeXBlRG9tYWluOjpUeXBlRG9tYWluRW51bT4g
OiBJbnRIYXNoPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlR5cGVEb21haW46OlR5cGVEb21haW5FbnVt
PiB7IH07CitzdHJ1Y3QgRGVmYXVsdEhhc2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6VHlwZURvbWFp
bjo6RW51bT4gOiBJbnRIYXNoPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlR5cGVEb21haW46OkVudW0+
IHsgfTsKIAogfSAvLyBuYW1lc3BhY2UgV1RGCiAjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9i
amVjdHMuaApAQCAtNTMwLDggKzU1OCw3IEBAIHN0cnVjdCBEZWZhdWx0SGFzaDxJbnNwZWN0b3I6
OlByb3RvY29sOjpUeXBlRG9tYWluOjpUeXBlRG9tYWluRW51bT4gOiBJbnRIYXNoPEluCiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogCi0jaW5j
bHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2lu
Y2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC01
NDEsMTQgKzU2OCwxNiBAQCBuYW1lc3BhY2UgVGVzdEhlbHBlcnMgewogCiBzdGF0aWMgY29uc3Qg
Y2hhciogY29uc3QgZW51bV9jb25zdGFudF92YWx1ZXNbXSA9IHsKICAgICAic2hhcmVkIiwKLSAg
ICAicmVkIiwKKyAgICAiMSIsCisgICAgIjIiLAorICAgICJzaGFyZWRSZXF1aXJlZCIsCisgICAg
ImdyZXkiLAorICAgICJzaGFyZWRPcHRpb25hbCIsCiAgICAgImdyZWVuIiwKLSAgICAiYmx1ZSIs
CiAgICAgImJsYWNrIiwKKyAgICAicmVkIiwKICAgICAid2hpdGUiLAotICAgICJjeWFuIiwKLSAg
ICAibWFnZW50YSIsCi0gICAgInllbGxvdyIsCisgICAgImJsdWUiLAogfTsKIAogU3RyaW5nIGdl
dEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKSB7CkBAIC01NTgsMTcgKzU4NywxNiBAQCBTdHJp
bmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpIHsKIC8vIEVudW1zIGluIHRoZSAnVHlw
ZURvbWFpbicgRG9tYWluCiAKIHRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlR5cGVEb21haW46OlR5cGVEb21haW5FbnVtPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8
SW5zcGVjdG9yOjpQcm90b2NvbDo6VHlwZURvbWFpbjo6VHlwZURvbWFpbkVudW0+KGNvbnN0IFN0
cmluZyYgcHJvdG9jb2xTdHJpbmcpCitPcHRpb25hbDxQcm90b2NvbDo6VHlwZURvbWFpbjo6RW51
bT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPFByb3RvY29sOjpUeXBlRG9tYWluOjpFbnVtPihj
b25zdCBTdHJpbmcmIHByb3RvY29sU3RyaW5nKQogewogICAgIHN0YXRpYyBjb25zdCBzaXplX3Qg
Y29uc3RhbnRWYWx1ZXNbXSA9IHsKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29s
OjpUeXBlRG9tYWluOjpUeXBlRG9tYWluRW51bTo6U2hhcmVkLAotICAgICAgICAoc2l6ZV90KUlu
c3BlY3Rvcjo6UHJvdG9jb2w6OlR5cGVEb21haW46OlR5cGVEb21haW5FbnVtOjpSZWQsCi0gICAg
ICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6VHlwZURvbWFpbjo6VHlwZURvbWFpbkVu
dW06OkdyZWVuLAotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlR5cGVEb21h
aW46OlR5cGVEb21haW5FbnVtOjpCbHVlLAorICAgICAgICAoc2l6ZV90KVByb3RvY29sOjpUeXBl
RG9tYWluOjpFbnVtOjpTaGFyZWQsCisgICAgICAgIChzaXplX3QpUHJvdG9jb2w6OlR5cGVEb21h
aW46OkVudW06OjEsCisgICAgICAgIChzaXplX3QpUHJvdG9jb2w6OlR5cGVEb21haW46OkVudW06
OjIsCiAgICAgfTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDQ7ICsraSkKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IDM7ICsraSkKICAgICAgICAgaWYgKHByb3RvY29sU3RyaW5nID09
IGVudW1fY29uc3RhbnRfdmFsdWVzW2NvbnN0YW50VmFsdWVzW2ldXSkKLSAgICAgICAgICAgIHJl
dHVybiAoSW5zcGVjdG9yOjpQcm90b2NvbDo6VHlwZURvbWFpbjo6VHlwZURvbWFpbkVudW0pY29u
c3RhbnRWYWx1ZXNbaV07CisgICAgICAgICAgICByZXR1cm4gKFByb3RvY29sOjpUeXBlRG9tYWlu
OjpFbnVtKWNvbnN0YW50VmFsdWVzW2ldOwogCiAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0K
QEAgLTYyNSw3ICs2NTMsNyBAQCBjbGFzcyBPYmpDSW5zcGVjdG9yQ29tbWFuZERvbWFpbkJhY2tl
bmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEFsdGVybmF0ZUNvbW1hbgogICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIE9iakNJbnNwZWN0b3JDb21tYW5kRG9tYWlu
QmFja2VuZERpc3BhdGNoZXIoaWQ8VGVzdFByb3RvY29sQ29tbWFuZERvbWFpbkRvbWFpbkhhbmRs
ZXI+IGhhbmRsZXIpIHsgbV9kZWxlZ2F0ZSA9IGhhbmRsZXI7IH0KLSAgICB2b2lkIGNvbW1hbmRX
aXRoRW51bVJldHVyblZhbHVlKGxvbmcgcmVxdWVzdElkKSBmaW5hbDsKKyAgICB2b2lkIGNvbW1h
bmQobG9uZyBwcm90b2NvbF9jYWxsSWQsIGNvbnN0IFN0cmluZyYgZW51bVJlcXVpcmVkLCBjb25z
dCBTdHJpbmcmIG9wdF9lbnVtT3B0aW9uYWwsIGNvbnN0IFN0cmluZyYgcGFyYW1ldGVyUmVxdWly
ZWQsIGNvbnN0IFN0cmluZyYgb3B0X3BhcmFtZXRlck9wdGlvbmFsKSBmaW5hbDsKIHByaXZhdGU6
CiAgICAgUmV0YWluUHRyPGlkPFRlc3RQcm90b2NvbENvbW1hbmREb21haW5Eb21haW5IYW5kbGVy
Pj4gbV9kZWxlZ2F0ZTsKIH07CkBAIC02NzMsMjYgKzcwMSw0NyBAQCBwcml2YXRlOgogCiBuYW1l
c3BhY2UgSW5zcGVjdG9yIHsKIAotdm9pZCBPYmpDSW5zcGVjdG9yQ29tbWFuZERvbWFpbkJhY2tl
bmREaXNwYXRjaGVyOjpjb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZShsb25nIHJlcXVlc3RJZCkK
K3ZvaWQgT2JqQ0luc3BlY3RvckNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Y29tbWFu
ZChsb25nIHByb3RvY29sX2NhbGxJZCwgY29uc3QgU3RyaW5nJiBpbl9lbnVtUmVxdWlyZWQsIGNv
bnN0IFN0cmluZyYgaW5fb3B0X2VudW1PcHRpb25hbCwgY29uc3QgU3RyaW5nJiBpbl9wYXJhbWV0
ZXJSZXF1aXJlZCwgY29uc3QgU3RyaW5nJiBpbl9vcHRfcGFyYW1ldGVyT3B0aW9uYWwpCiB7Ci0g
ICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGNvbW1hbmRX
aXRoRW51bVJldHVyblZhbHVlV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7
Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVz
dElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInQ29tbWFuZERvbWFpbi5j
b21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZScgd2FzIG5vdCBmb3VuZCJfcyk7CisgICAgaWYgKCFb
bV9kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGNvbW1hbmRXaXRoRXJyb3JD
YWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6ZW51bVJlcXVpcmVkOmVudW1PcHRpb25hbDpwYXJhbWV0
ZXJSZXF1aXJlZDpwYXJhbWV0ZXJPcHRpb25hbDopXSkgeworICAgICAgICBiYWNrZW5kRGlzcGF0
Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHByb3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3Bh
dGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0NvbW1hbmREb21haW4uY29tbWFuZCcgd2FzIG5vdCBm
b3VuZCJfcyk7CiAgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3Jz
KCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZCBlcnJvckNhbGxiYWNrID0gXihO
U1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJv
dG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJy
b3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHBy
b3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CiAg
ICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgfTsK
IAotICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF4oVGVzdFByb3RvY29sQ29tbWFuZERvbWFpbkNv
bW1hbmRXaXRoRW51bVJldHVyblZhbHVlUmV0dXJuVmFsdWUgcmV0dXJuVmFsdWUpIHsKLSAgICAg
ICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0T2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUo
KTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoInJldHVyblZhbHVlIl9zLCB0b1By
b3RvY29sU3RyaW5nKHJldHVyblZhbHVlKSk7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCkt
PnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0T2JqZWN0KSwgZmFsc2UpOwor
ICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF4oVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW0gb3V0
X2VudW1SZXF1aXJlZCwgVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW0gKm91dF9vcHRfZW51bU9w
dGlvbmFsLCBUZXN0UHJvdG9jb2xDb21tYW5kRG9tYWluKGFub255bW91cykgb3V0X3JldHVyblJl
cXVpcmVkLCBUZXN0UHJvdG9jb2xDb21tYW5kRG9tYWluKGFub255bW91cykgKm91dF9vcHRfcmV0
dXJuT3B0aW9uYWwpIHsKKyAgICAgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046
Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJp
bmcoImVudW1SZXF1aXJlZCJfcywgdG9Qcm90b2NvbFN0cmluZyhvdXRfZW51bVJlcXVpcmVkKSk7
CisgICAgICAgIGlmICghIW91dF9vcHRfZW51bU9wdGlvbmFsKQorICAgICAgICAgICAgcHJvdG9j
b2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygiZW51bU9wdGlvbmFsIl9zLCB0b1Byb3RvY29sU3Ry
aW5nKCpvdXRfb3B0X2VudW1PcHRpb25hbCkpOworICAgICAgICBwcm90b2NvbF9qc29uTWVzc2Fn
ZS0+c2V0U3RyaW5nKCJyZXR1cm5SZXF1aXJlZCJfcywgdG9Qcm90b2NvbFN0cmluZyhvdXRfcmV0
dXJuUmVxdWlyZWQpKTsKKyAgICAgICAgaWYgKCEhb3V0X29wdF9yZXR1cm5PcHRpb25hbCkKKyAg
ICAgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoInJldHVybk9wdGlvbmFs
Il9zLCB0b1Byb3RvY29sU3RyaW5nKCpvdXRfb3B0X3JldHVybk9wdGlvbmFsKSk7CisgICAgICAg
IGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShwcm90b2NvbF9jYWxsSWQsIFdURk1v
dmUocHJvdG9jb2xfanNvbk1lc3NhZ2UpLCBmYWxzZSk7CiAgICAgfTsKIAotICAgIFttX2RlbGVn
YXRlIGNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxs
YmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsKKyAgICBPcHRpb25hbDxUZXN0
UHJvdG9jb2xUeXBlRG9tYWluRW51bT4gb19pbl9lbnVtUmVxdWlyZWQgPSBmcm9tUHJvdG9jb2xT
dHJpbmc8VGVzdFByb3RvY29sVHlwZURvbWFpbkVudW0+KGluX2VudW1SZXF1aXJlZCk7CisgICAg
aWYgKCFvX2luX2VudW1SZXF1aXJlZCkgeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5y
ZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCAiUGFy
YW1ldGVyICdlbnVtUmVxdWlyZWQnIG9mIG1ldGhvZCAnQ29tbWFuZERvbWFpbi5jb21tYW5kJyBj
YW5ub3QgYmUgcHJvY2Vzc2VkIl9zKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBPcHRp
b25hbDxUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bT4gb19pbl9vcHRfZW51bU9wdGlvbmFsOwor
ICAgIGlmICghIWluX29wdF9lbnVtT3B0aW9uYWwpCisgICAgICAgIG9faW5fb3B0X2VudW1PcHRp
b25hbCA9IGZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bT4oaW5f
b3B0X2VudW1PcHRpb25hbCk7CisgICAgT3B0aW9uYWw8VGVzdFByb3RvY29sQ29tbWFuZERvbWFp
bihhbm9ueW1vdXMpPiBvX2luX3BhcmFtZXRlclJlcXVpcmVkID0gZnJvbVByb3RvY29sU3RyaW5n
PFRlc3RQcm90b2NvbENvbW1hbmREb21haW4oYW5vbnltb3VzKT4oaW5fcGFyYW1ldGVyUmVxdWly
ZWQpOworICAgIGlmICghb19pbl9wYXJhbWV0ZXJSZXF1aXJlZCkgeworICAgICAgICBiYWNrZW5k
RGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpJbnZh
bGlkUGFyYW1zLCAiUGFyYW1ldGVyICdwYXJhbWV0ZXJSZXF1aXJlZCcgb2YgbWV0aG9kICdDb21t
YW5kRG9tYWluLmNvbW1hbmQnIGNhbm5vdCBiZSBwcm9jZXNzZWQiX3MpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIE9wdGlvbmFsPFRlc3RQcm90b2NvbENvbW1hbmREb21haW4oYW5vbnlt
b3VzKT4gb19pbl9vcHRfcGFyYW1ldGVyT3B0aW9uYWw7CisgICAgaWYgKCEhaW5fb3B0X3BhcmFt
ZXRlck9wdGlvbmFsKQorICAgICAgICBvX2luX29wdF9wYXJhbWV0ZXJPcHRpb25hbCA9IGZyb21Q
cm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xDb21tYW5kRG9tYWluKGFub255bW91cyk+KGluX29w
dF9wYXJhbWV0ZXJPcHRpb25hbCk7CisgICAgW21fZGVsZWdhdGUgY29tbWFuZFdpdGhFcnJvckNh
bGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjayBlbnVt
UmVxdWlyZWQ6b19pbl9lbnVtUmVxdWlyZWQudmFsdWUoKSBlbnVtT3B0aW9uYWw6KCEhaW5fb3B0
X2VudW1PcHRpb25hbCA/ICZvX2luX29wdF9lbnVtT3B0aW9uYWwudmFsdWUoKSA6IG5pbCkgcGFy
YW1ldGVyUmVxdWlyZWQ6b19pbl9wYXJhbWV0ZXJSZXF1aXJlZC52YWx1ZSgpIHBhcmFtZXRlck9w
dGlvbmFsOighIWluX29wdF9wYXJhbWV0ZXJPcHRpb25hbCA/ICZvX2luX29wdF9wYXJhbWV0ZXJP
cHRpb25hbC52YWx1ZSgpIDogbmlsKV07CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgpA
QCAtODg3LDE2ICs5MzYsMjEgQEAgdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKICAgICByZXR1
cm4gc2VsZjsKIH0KIAotLSAodm9pZClldmVudFdpdGhFbnVtUGFyYW1ldGVyV2l0aFBhcmFtZXRl
cjooVGVzdFByb3RvY29sRXZlbnREb21haW5FdmVudFdpdGhFbnVtUGFyYW1ldGVyUGFyYW1ldGVy
KXBhcmFtZXRlcgorLSAodm9pZClldmVudFdpdGhFbnVtUmVxdWlyZWQ6KFRlc3RQcm90b2NvbFR5
cGVEb21haW5FbnVtKWVudW1SZXF1aXJlZCBlbnVtT3B0aW9uYWw6KFRlc3RQcm90b2NvbFR5cGVE
b21haW5FbnVtICopZW51bU9wdGlvbmFsIHBhcmFtZXRlclJlcXVpcmVkOihUZXN0UHJvdG9jb2xF
dmVudERvbWFpbihhbm9ueW1vdXMpKXBhcmFtZXRlclJlcXVpcmVkIHBhcmFtZXRlck9wdGlvbmFs
OihUZXN0UHJvdG9jb2xFdmVudERvbWFpbihhbm9ueW1vdXMpICopcGFyYW1ldGVyT3B0aW9uYWwK
IHsKICAgICBjb25zdCBGcm9udGVuZFJvdXRlciYgcm91dGVyID0gX2NvbnRyb2xsZXItPmZyb250
ZW5kUm91dGVyKCk7CiAKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046
Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9z
LCAiRXZlbnREb21haW4uZXZlbnRXaXRoRW51bVBhcmFtZXRlciJfcyk7Ci0gICAgUmVmPEpTT046
Ok9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBwYXJh
bXNPYmplY3QtPnNldFN0cmluZygicGFyYW1ldGVyIl9zLCB0b1Byb3RvY29sU3RyaW5nKHBhcmFt
ZXRlcikpOwotICAgIGpzb25NZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyJfcywgV1RGTW92ZShw
YXJhbXNPYmplY3QpKTsKLSAgICByb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05T
dHJpbmcoKSk7CisgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6
Y3JlYXRlKCk7CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9z
LCAiRXZlbnREb21haW4uZXZlbnQiX3MpOworICAgIGF1dG8gcHJvdG9jb2xfcGFyYW1zT2JqZWN0
ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBwcm90b2NvbF9wYXJhbXNPYmplY3QtPnNl
dFN0cmluZygiZW51bVJlcXVpcmVkIl9zLCB0b1Byb3RvY29sU3RyaW5nKGVudW1SZXF1aXJlZCkp
OworICAgIGlmIChlbnVtT3B0aW9uYWwpCisgICAgICAgIHByb3RvY29sX3BhcmFtc09iamVjdC0+
c2V0U3RyaW5nKCJlbnVtT3B0aW9uYWwiX3MsIHRvUHJvdG9jb2xTdHJpbmcoKCplbnVtT3B0aW9u
YWwpKSk7CisgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInBhcmFtZXRlclJl
cXVpcmVkIl9zLCB0b1Byb3RvY29sU3RyaW5nKHBhcmFtZXRlclJlcXVpcmVkKSk7CisgICAgaWYg
KHBhcmFtZXRlck9wdGlvbmFsKQorICAgICAgICBwcm90b2NvbF9wYXJhbXNPYmplY3QtPnNldFN0
cmluZygicGFyYW1ldGVyT3B0aW9uYWwiX3MsIHRvUHJvdG9jb2xTdHJpbmcoKCpwYXJhbWV0ZXJP
cHRpb25hbCkpKTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMi
X3MsIFdURk1vdmUocHJvdG9jb2xfcGFyYW1zT2JqZWN0KSk7CisgICAgcm91dGVyLnNlbmRFdmVu
dChwcm90b2NvbF9qc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwogfQogCiBAZW5kCkBAIC05
NDMsMjEgKzk5NywyMCBAQCB1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwogCiB0eXBlZGVmIE5T
X0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bSkgewogICAgIFRlc3RQ
cm90b2NvbFR5cGVEb21haW5FbnVtU2hhcmVkLAotICAgIFRlc3RQcm90b2NvbFR5cGVEb21haW5F
bnVtUmVkLAotICAgIFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtR3JlZW4sCi0gICAgVGVzdFBy
b3RvY29sVHlwZURvbWFpbkVudW1CbHVlLAorICAgIFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVt
MSwKKyAgICBUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bTIsCiB9OwogCiAKIAogQHByb3RvY29s
IFRlc3RQcm90b2NvbENvbW1hbmREb21haW5Eb21haW5IYW5kbGVyIDxOU09iamVjdD4KIEBvcHRp
b25hbAotLSAodm9pZCljb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZVdpdGhFcnJvckNhbGxiYWNr
Oih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6
KHZvaWQoXikoVGVzdFByb3RvY29sQ29tbWFuZERvbWFpbkNvbW1hbmRXaXRoRW51bVJldHVyblZh
bHVlUmV0dXJuVmFsdWUgcmV0dXJuVmFsdWUpKXN1Y2Nlc3NDYWxsYmFjazsKKy0gKHZvaWQpY29t
bWFuZFdpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxs
YmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikoVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW0g
ZW51bVJlcXVpcmVkLCBUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bSAqZW51bU9wdGlvbmFsLCBU
ZXN0UHJvdG9jb2xDb21tYW5kRG9tYWluKGFub255bW91cykgcmV0dXJuUmVxdWlyZWQsIFRlc3RQ
cm90b2NvbENvbW1hbmREb21haW4oYW5vbnltb3VzKSAqcmV0dXJuT3B0aW9uYWwpKXN1Y2Nlc3ND
YWxsYmFjayBlbnVtUmVxdWlyZWQ6KFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtKWVudW1SZXF1
aXJlZCBlbnVtT3B0aW9uYWw6KFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtICopZW51bU9wdGlv
bmFsIHBhcmFtZXRlclJlcXVpcmVkOihUZXN0UHJvdG9jb2xDb21tYW5kRG9tYWluKGFub255bW91
cykpcGFyYW1ldGVyUmVxdWlyZWQgcGFyYW1ldGVyT3B0aW9uYWw6KFRlc3RQcm90b2NvbENvbW1h
bmREb21haW4oYW5vbnltb3VzKSAqKXBhcmFtZXRlck9wdGlvbmFsOwogQGVuZAogCiBfX2F0dHJp
YnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKIEBpbnRlcmZhY2UgVGVzdFByb3RvY29s
RXZlbnREb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgOiBOU09iamVjdAotLSAodm9pZClldmVu
dFdpdGhFbnVtUGFyYW1ldGVyV2l0aFBhcmFtZXRlcjooVGVzdFByb3RvY29sRXZlbnREb21haW5F
dmVudFdpdGhFbnVtUGFyYW1ldGVyUGFyYW1ldGVyKXBhcmFtZXRlcjsKKy0gKHZvaWQpZXZlbnRX
aXRoRW51bVJlcXVpcmVkOihUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bSllbnVtUmVxdWlyZWQg
ZW51bU9wdGlvbmFsOihUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bSAqKWVudW1PcHRpb25hbCBw
YXJhbWV0ZXJSZXF1aXJlZDooVGVzdFByb3RvY29sRXZlbnREb21haW4oYW5vbnltb3VzKSlwYXJh
bWV0ZXJSZXF1aXJlZCBwYXJhbWV0ZXJPcHRpb25hbDooVGVzdFByb3RvY29sRXZlbnREb21haW4o
YW5vbnltb3VzKSAqKXBhcmFtZXRlck9wdGlvbmFsOwogQGVuZAogCiAKQEAgLTEwNTAsMTIgKzEx
MDMsMTAgQEAgaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbFR5cGVE
b21haW5FbnVtIHZhbHVlKQogICAgIHN3aXRjaCh2YWx1ZSkgewogICAgIGNhc2UgVGVzdFByb3Rv
Y29sVHlwZURvbWFpbkVudW1TaGFyZWQ6CiAgICAgICAgIHJldHVybiAic2hhcmVkIl9zOwotICAg
IGNhc2UgVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW1SZWQ6Ci0gICAgICAgIHJldHVybiAicmVk
Il9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW1HcmVlbjoKLSAgICAgICAg
cmV0dXJuICJncmVlbiJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtQmx1
ZToKLSAgICAgICAgcmV0dXJuICJibHVlIl9zOworICAgIGNhc2UgVGVzdFByb3RvY29sVHlwZURv
bWFpbkVudW0xOgorICAgICAgICByZXR1cm4gIjEiX3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xU
eXBlRG9tYWluRW51bTI6CisgICAgICAgIHJldHVybiAiMiJfczsKICAgICB9CiB9CiAKQEAgLTEw
NjQsMTIgKzExMTUsMTAgQEAgaW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbFR5cGVEb21haW5F
bnVtPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWwKIHsKICAgICBpZiAodmFs
dWUgPT0gInNoYXJlZCIpCiAgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51
bVNoYXJlZDsKLSAgICBpZiAodmFsdWUgPT0gInJlZCIpCi0gICAgICAgIHJldHVybiBUZXN0UHJv
dG9jb2xUeXBlRG9tYWluRW51bVJlZDsKLSAgICBpZiAodmFsdWUgPT0gImdyZWVuIikKLSAgICAg
ICAgcmV0dXJuIFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtR3JlZW47Ci0gICAgaWYgKHZhbHVl
ID09ICJibHVlIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtQmx1
ZTsKKyAgICBpZiAodmFsdWUgPT0gIjEiKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sVHlw
ZURvbWFpbkVudW0xOworICAgIGlmICh2YWx1ZSA9PSAiMiIpCisgICAgICAgIHJldHVybiBUZXN0
UHJvdG9jb2xUeXBlRG9tYWluRW51bTI7CiAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KIApA
QCAtMTExNywxNyArMTE2NiwxNyBAQCB1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwogCiBAaW50
ZXJmYWNlIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoVHlwZURvbWFpbkRvbWFpbikKIAot
KyAodm9pZClfcGFyc2VUeXBlRG9tYWluRW51bTooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBh
eWxvYWQ6KGlkKXBheWxvYWQ7CisrICh2b2lkKV9wYXJzZUVudW06KE5TTnVtYmVyICoqKW91dFZh
bHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwogCiBAZW5kCiAKIEBpbXBsZW1lbnRhdGlvbiBU
ZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKFR5cGVEb21haW5Eb21haW4pCiAKLSsgKHZvaWQp
X3BhcnNlVHlwZURvbWFpbkVudW06KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihp
ZClwYXlsb2FkCisrICh2b2lkKV9wYXJzZUVudW06KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21Q
YXlsb2FkOihpZClwYXlsb2FkCiB7CiAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShw
YXlsb2FkLCBbTlNTdHJpbmcgY2xhc3NdKTsKICAgICBPcHRpb25hbDxUZXN0UHJvdG9jb2xUeXBl
RG9tYWluRW51bT4gcmVzdWx0ID0gSW5zcGVjdG9yOjpmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFBy
b3RvY29sVHlwZURvbWFpbkVudW0+KHBheWxvYWQpOwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1Jf
QkFEX0VOVU1fVkFMVUUocmVzdWx0LCBAIlR5cGVEb21haW5FbnVtIik7CisgICAgVEhST1dfRVhD
RVBUSU9OX0ZPUl9CQURfRU5VTV9WQUxVRShyZXN1bHQsIEAiRW51bSIpOwogICAgICpvdXRWYWx1
ZSA9IEAocmVzdWx0LnZhbHVlKCkpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZXZlbnQtdGFyZ2V0VHlwZS1t
YXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZXZlbnQtdGFyZ2V0VHlw
ZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbi1yZXN1bHQKaW5kZXggZTJlZDlm
ODg5NGNlNzc2YjI3MmQ2MTEzZTUzNmNhYTc0NmViY2I4NS4uYmU5NGIzNTk0MDAzMmIzZTlhMzM2
ZDU0MTM0NDc3Yjk2NWNkM2E1NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2V2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmct
ZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24tcmVzdWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9ldmVudC10YXJnZXRUeXBlLW1h
dGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uLXJlc3VsdApAQCAtNzAsNyArNzAsNyBA
QCBJbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJEb21haW4iLCBbInBhZ2UiXSk7CiAK
ICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIAotI2luY2x1ZGUg
IlRlc3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgog
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CiAj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KIApAQCAt
ODgsNyArODgsNyBAQCBwcml2YXRlOgogY2xhc3MgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3Bh
dGNoZXIgOiBwdWJsaWMgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewogcHVibGljOgogICAg
IHZpcnR1YWwgfkFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyKCkgeyB9Ci0gICAgdmly
dHVhbCB2b2lkIENvbW1hbmQobG9uZyBjYWxsSWQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgQ29t
bWFuZChsb25nIHByb3RvY29sX2NhbGxJZCkgPSAwOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCkBAIC0xMzAsMTEgKzEzMCwxNCBAQCBwdWJsaWM6CiAKICNpbmNsdWRlICJUZXN0UHJv
dG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx0dXBsZT4KKyNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQu
aD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3Ry
aW5nOworCiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIGNs
YXNzIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyOwpAQCAtMTQyLDcgKzE0NSw3IEBA
IGNsYXNzIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyOwogCiBjbGFzcyBEb21haW5C
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewogcHVibGljOgotICAgIHZpcnR1YWwgdm9pZCBDb21t
YW5kKEVycm9yU3RyaW5nJikgPSAwOworICAgIHZpcnR1YWwgUHJvdG9jb2w6OkVycm9yU3RyaW5n
T3I8dm9pZD4gQ29tbWFuZCgpID0gMDsKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIH5Eb21haW5C
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKTsKIH07CkBAIC0xNTAsOSArMTUzLDkgQEAgcHJvdGVj
dGVkOgogY2xhc3MgRG9tYWluQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgU3VwcGxl
bWVudGFsQmFja2VuZERpc3BhdGNoZXIgewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8RG9tYWlu
QmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYsIERvbWFpbkJhY2tl
bmREaXNwYXRjaGVySGFuZGxlciopOwotICAgIHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQs
IGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpIGZpbmFs
OworICAgIHZvaWQgZGlzcGF0Y2gobG9uZyBwcm90b2NvbF9jYWxsSWQsIGNvbnN0IFN0cmluZyYg
cHJvdG9jb2xfbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX21lc3NhZ2UpIGZp
bmFsOwogcHJpdmF0ZToKLSAgICB2b2lkIENvbW1hbmQobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxK
U09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7CisgICAgdm9pZCBDb21tYW5kKGxvbmcgcHJvdG9j
bF9jYWxsSWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfcGFyYW1ldGVycyk7CiAj
aWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiBwdWJsaWM6CiAgICAg
dm9pZCBzZXRBbHRlcm5hdGVEaXNwYXRjaGVyKEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRj
aGVyKiBhbHRlcm5hdGVEaXNwYXRjaGVyKSB7IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IGFsdGVy
bmF0ZURpc3BhdGNoZXI7IH0KQEAgLTIwMSw5ICsyMDQsNyBAQCBwcml2YXRlOgogI2luY2x1ZGUg
IlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0lu
c3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KICNp
bmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5n
Lmg+CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKICNpbmNs
dWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCkBAIC0yMjUsMzggKzIyNiwz
OCBAQCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6RG9tYWluQmFja2VuZERpc3BhdGNoZXIoQmFj
a2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYQogICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJl
Z2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbigiRG9tYWluIl9zLCB0aGlzKTsKIH0KIAotdm9pZCBE
b21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0
cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpCit2b2lkIERvbWFpbkJh
Y2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHByb3RvY29sX2NhbGxJZCwgY29uc3QgU3Ry
aW5nJiBwcm90b2NvbF9tZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfbWVzc2Fn
ZSkKIHsKICAgICBSZWY8RG9tYWluQmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOwog
Ci0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVyczsKLSAgICBtZXNzYWdlLT5nZXRP
YmplY3QoInBhcmFtcyJfcywgcGFyYW1ldGVycyk7CisgICAgYXV0byBwcm90b2NvbF9wYXJhbWV0
ZXJzID0gcHJvdG9jb2xfbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3MpOwogCi0gICAgaWYg
KG1ldGhvZCA9PSAiQ29tbWFuZCIpIHsKLSAgICAgICAgQ29tbWFuZChyZXF1ZXN0SWQsIFdURk1v
dmUocGFyYW1ldGVycykpOworICAgIGlmIChwcm90b2NvbF9tZXRob2QgPT0gIkNvbW1hbmQiKSB7
CisgICAgICAgIENvbW1hbmQocHJvdG9jb2xfY2FsbElkLCBXVEZNb3ZlKHByb3RvY29sX3BhcmFt
ZXRlcnMpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1fYmFja2VuZERpc3BhdGNo
ZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5k
LCAiJ0RvbWFpbi4iICsgbWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOworICAgIG1fYmFja2Vu
ZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhv
ZE5vdEZvdW5kLCAiJ0RvbWFpbi4iICsgcHJvdG9jb2xfbWV0aG9kICsgIicgd2FzIG5vdCBmb3Vu
ZCIpOwogfQogCi12b2lkIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpDb21tYW5kKGxvbmcgcmVx
dWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQordm9pZCBEb21haW5CYWNrZW5kRGlzcGF0
Y2hlcjo6Q29tbWFuZChsb25nIHByb3RvY29sX2NhbGxJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4m
JikKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKICAgICBp
ZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hl
ci0+Q29tbWFuZChyZXF1ZXN0SWQpOworICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPkNv
bW1hbmQocHJvdG9jb2xfY2FsbElkKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZiAv
LyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIAotICAgIEVycm9yU3Ry
aW5nIGVycm9yOwotICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6
Y3JlYXRlKCk7Ci0gICAgbV9hZ2VudC0+Q29tbWFuZChlcnJvcik7CisgICAgYXV0byByZXN1bHQg
PSBtX2FnZW50LT5Db21tYW5kKCk7CisgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAgICAgQVNTRVJU
KCFyZXN1bHQuZXJyb3IoKS5pc0VtcHR5KCkpOworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVy
LT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgcmVz
dWx0LmVycm9yKCkpOworICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgaWYgKCFlcnJvci5s
ZW5ndGgoKSkKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVl
c3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tl
bmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2
ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOworICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2Ug
PSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRS
ZXNwb25zZShwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJvdG9jb2xfanNvbk1lc3NhZ2UpLCBm
YWxzZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgpAQCAtMjk3LDYgKzI5OCw3IEBA
IHZvaWQgRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkNvbW1hbmQobG9uZyByZXF1ZXN0SWQsIFJl
ZlB0cjxKU09OOjpPYmplY3Q+JiYpCiAKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgi
CiAjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4K
ICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7
CkBAIC0zNDksMTYgKzM1MSwxNSBAQCBwcml2YXRlOgogI2luY2x1ZGUgIlRlc3RGcm9udGVuZERp
c3BhdGNoZXJzLmgiCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVu
ZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogbmFtZXNwYWNlIElu
c3BlY3RvciB7CiAKIHZvaWQgRG9tYWluRnJvbnRlbmREaXNwYXRjaGVyOjpFdmVudCgpCiB7Ci0g
ICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgp
OwotICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRvbWFpbi5FdmVudCJf
cyk7CisgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRl
KCk7CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiRG9t
YWluLkV2ZW50Il9zKTsKIAotICAgIG1fZnJvbnRlbmRSb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNz
YWdlLT50b0pTT05TdHJpbmcoKSk7CisgICAgbV9mcm9udGVuZFJvdXRlci5zZW5kRXZlbnQocHJv
dG9jb2xfanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCkBAIC0zOTgsNyArMzk5LDkgQEAgdm9pZCBEb21haW5Gcm9udGVuZERpc3BhdGNo
ZXI6OkV2ZW50KCkKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yUHJvdG9jb2xUeXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5j
bHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKQEAg
LTQ1Miw4ICs0NTUsNyBAQCBuYW1lc3BhY2UgUHJvdG9jb2wgewogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKIAotI2luY2x1ZGUgPHd0Zi9PcHRp
b25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvQXNz
ZXJ0aW9ucy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtNTA5LDcgKzUxMSw3IEBA
IGNsYXNzIE9iakNJbnNwZWN0b3JEb21haW5CYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1Ymxp
YyBBbHRlcm5hdGVEb21haW5CYWNrZW5kCiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBw
dWJsaWM6CiAgICAgT2JqQ0luc3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyKGlkPFRlc3RQ
cm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+IGhhbmRsZXIpIHsgbV9kZWxlZ2F0ZSA9IGhhbmRs
ZXI7IH0KLSAgICB2b2lkIENvbW1hbmQobG9uZyByZXF1ZXN0SWQpIGZpbmFsOworICAgIHZvaWQg
Q29tbWFuZChsb25nIHByb3RvY29sX2NhbGxJZCkgZmluYWw7CiBwcml2YXRlOgogICAgIFJldGFp
blB0cjxpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPj4gbV9kZWxlZ2F0ZTsKIH07
CkBAIC01NTcsMjEgKzU1OSwyMiBAQCBwcml2YXRlOgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsK
IAotdm9pZCBPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkNvbW1hbmQobG9u
ZyByZXF1ZXN0SWQpCit2b2lkIE9iakNJbnNwZWN0b3JEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6
Q29tbWFuZChsb25nIHByb3RvY29sX2NhbGxJZCkKIHsKICAgICBpZiAoIVttX2RlbGVnYXRlIHJl
c3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoQ29tbWFuZFdpdGhFcnJvckNhbGxiYWNrOnN1Y2Nl
c3NDYWxsYmFjazopXSkgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90
b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAi
J0RvbWFpbi5Db21tYW5kJyB3YXMgbm90IGZvdW5kIl9zKTsKKyAgICAgICAgYmFja2VuZERpc3Bh
dGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxsSWQsIEJhY2tlbmREaXNw
YXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEb21haW4uQ29tbWFuZCcgd2FzIG5vdCBmb3VuZCJf
cyk7CiAgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmlu
ZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xF
cnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwor
ICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHByb3RvY29s
X2NhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CiAgICAgICAg
IGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgfTsKIAogICAg
IGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF57Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNl
bmRSZXNwb25zZShyZXF1ZXN0SWQsIEpTT046Ok9iamVjdDo6Y3JlYXRlKCksIGZhbHNlKTsKKyAg
ICAgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7
CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShwcm90b2NvbF9jYWxs
SWQsIFdURk1vdmUocHJvdG9jb2xfanNvbk1lc3NhZ2UpLCBmYWxzZSk7CiAgICAgfTsKIAogICAg
IFttX2RlbGVnYXRlIENvbW1hbmRXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nl
c3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOwpAQCAtNzczLDkgKzc3Niw5IEBAIHVzaW5nIG5h
bWVzcGFjZSBJbnNwZWN0b3I7CiB7CiAgICAgY29uc3QgRnJvbnRlbmRSb3V0ZXImIHJvdXRlciA9
IF9jb250cm9sbGVyLT5mcm9udGVuZFJvdXRlcigpOwogCi0gICAgUmVmPEpTT046Ok9iamVjdD4g
anNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIGpzb25NZXNzYWdlLT5z
ZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRvbWFpbi5FdmVudCJfcyk7Ci0gICAgcm91dGVyLnNlbmRF
dmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOworICAgIGF1dG8gcHJvdG9jb2xfanNv
bk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIHByb3RvY29sX2pzb25NZXNz
YWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRvbWFpbi5FdmVudCJfcyk7CisgICAgcm91dGVy
LnNlbmRFdmVudChwcm90b2NvbF9qc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwogfQogCiBA
ZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZXhwZWN0ZWQvZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uLXJlc3Vs
dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3Rl
ZC9ldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0CmluZGV4IDkwZTE0
ZThjN2JiNGYwNTE1MTNjYmQ3YzNjNmRjN2I5NmZjYzFhNzQuLjg0N2I0OTNmNzFjNTdlNDI3M2Q4
NDk2MmJhZTlmNmM5MjBmZGM5ZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9ldmVudHMtd2l0aC1vcHRpb25hbC1wYXJh
bWV0ZXJzLmpzb24tcmVzdWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9leHBlY3RlZC9ldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpz
b24tcmVzdWx0CkBAIC03MCw3ICs3MCw3IEBAIEluc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21h
aW4oIkRhdGFiYXNlIiwgbnVsbCk7CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9E
SVNQQVRDSEVSUykKIAotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVkZSAi
VGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
RnJvbnRlbmRSb3V0ZXIuaD4KIApAQCAtMTI2LDExICsxMjYsMTQgQEAgcHJpdmF0ZToKIAogI2lu
Y2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9J
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHR1cGxlPgorI2luY2x1ZGUg
PHd0Zi9FeHBlY3RlZC5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAotdHlwZWRlZiBT
dHJpbmcgRXJyb3JTdHJpbmc7CisKIAogCiAKQEAgLTE3MSw5ICsxNzQsNyBAQCB0eXBlZGVmIFN0
cmluZyBFcnJvclN0cmluZzsKICNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCiAK
ICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2lu
Y2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+
Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9B
TFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAjaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNw
YXRjaGVycy5oIgpAQCAtMjIxLDYgKzIyMiw3IEBAIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCiAj
aW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVz
Lmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewpAQCAtMjMxLDggKzIzMyw4IEBAIGNsYXNz
IERhdGFiYXNlRnJvbnRlbmREaXNwYXRjaGVyIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKIHB1YmxpYzoKICAgICBEYXRhYmFzZUZyb250ZW5kRGlzcGF0Y2hlcihGcm9udGVuZFJvdXRl
ciYgZnJvbnRlbmRSb3V0ZXIpIDogbV9mcm9udGVuZFJvdXRlcihmcm9udGVuZFJvdXRlcikgeyB9
Ci0gICAgdm9pZCBkaWRFeGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJzKFJlZlB0cjxKU09OOjpBcnJh
eU9mPFN0cmluZz4+IGNvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcqIG5vdGVzLCBjb25zdCBkb3Vi
bGUqIHRpbWVzdGFtcCwgUmVmUHRyPEpTT046Ok9iamVjdD4gdmFsdWVzLCBSZWZQdHI8SlNPTjo6
VmFsdWU+IHBheWxvYWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJy
b3I+IHNxbEVycm9yLCBjb25zdCBTdHJpbmcqIHNjcmVlbkNvbG9yLCBSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4gYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBT
dHJpbmcqIHByaW50Q29sb3IpOwotICAgIHZvaWQgZGlkRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0
ZXJzKFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+IGNvbHVtbk5hbWVzLCBjb25zdCBTdHJp
bmcmIG5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiB2YWx1ZXMs
IFJlZlB0cjxKU09OOjpWYWx1ZT4gcGF5bG9hZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRhdGFiYXNlOjpFcnJvcj4gc3FsRXJyb3IsIGNvbnN0IFN0cmluZyYgc2NyZWVuQ29sb3IsIFJl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiBhbHRlcm5hdGVD
b2xvcnMsIGNvbnN0IFN0cmluZyYgcHJpbnRDb2xvcik7CisgICAgdm9pZCBkaWRFeGVjdXRlT3B0
aW9uYWxQYXJhbWV0ZXJzKFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+JiYgb3B0X2NvbHVt
bk5hbWVzLCBjb25zdCBTdHJpbmcmIG9wdF9ub3RlcywgT3B0aW9uYWw8ZG91YmxlPiYmIG9wdF90
aW1lc3RhbXAsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgb3B0X3ZhbHVlcywgUmVmUHRyPEpTT046
OlZhbHVlPiYmIG9wdF9wYXlsb2FkLCBSZWZQdHI8UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4m
JiBvcHRfc3FsRXJyb3IsIGNvbnN0IFN0cmluZyYgb3B0X3NjcmVlbkNvbG9yLCBSZWZQdHI8UHJv
dG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+JiYgb3B0X2FsdGVybmF0ZUNvbG9ycywgY29uc3Qg
U3RyaW5nJiBvcHRfcHJpbnRDb2xvcik7CisgICAgdm9pZCBkaWRFeGVjdXRlTm9PcHRpb25hbFBh
cmFtZXRlcnMoUmVmPEpTT046OkFycmF5T2Y8U3RyaW5nPj4mJiBjb2x1bW5OYW1lcywgY29uc3Qg
U3RyaW5nJiBub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgUmVmPEpTT046Ok9iamVjdD4mJiB2YWx1
ZXMsIFJlZjxKU09OOjpWYWx1ZT4mJiBwYXlsb2FkLCBSZWY8UHJvdG9jb2w6OkRhdGFiYXNlOjpF
cnJvcj4mJiBzcWxFcnJvciwgY29uc3QgU3RyaW5nJiBzY3JlZW5Db2xvciwgUmVmPFByb3RvY29s
OjpEYXRhYmFzZTo6Q29sb3JMaXN0PiYmIGFsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nJiBw
cmludENvbG9yKTsKIHByaXZhdGU6CiAgICAgRnJvbnRlbmRSb3V0ZXImIG1fZnJvbnRlbmRSb3V0
ZXI7CiB9OwpAQCAtMjc0LDU1ICsyNzYsNTQgQEAgcHJpdmF0ZToKICNpbmNsdWRlICJUZXN0RnJv
bnRlbmREaXNwYXRjaGVycy5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
RnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKIG5hbWVz
cGFjZSBJbnNwZWN0b3IgewogCi12b2lkIERhdGFiYXNlRnJvbnRlbmREaXNwYXRjaGVyOjpkaWRF
eGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJzKFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+IGNv
bHVtbk5hbWVzLCBjb25zdCBTdHJpbmcqIG5vdGVzLCBjb25zdCBkb3VibGUqIHRpbWVzdGFtcCwg
UmVmUHRyPEpTT046Ok9iamVjdD4gdmFsdWVzLCBSZWZQdHI8SlNPTjo6VmFsdWU+IHBheWxvYWQs
IFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IHNxbEVycm9yLCBj
b25zdCBTdHJpbmcqIHNjcmVlbkNvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0
YWJhc2U6OkNvbG9yTGlzdD4gYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcqIHByaW50Q29s
b3IpCit2b2lkIERhdGFiYXNlRnJvbnRlbmREaXNwYXRjaGVyOjpkaWRFeGVjdXRlT3B0aW9uYWxQ
YXJhbWV0ZXJzKFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+JiYgb3B0X2NvbHVtbk5hbWVz
LCBjb25zdCBTdHJpbmcmIG9wdF9ub3RlcywgT3B0aW9uYWw8ZG91YmxlPiYmIG9wdF90aW1lc3Rh
bXAsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgb3B0X3ZhbHVlcywgUmVmUHRyPEpTT046OlZhbHVl
PiYmIG9wdF9wYXlsb2FkLCBSZWZQdHI8UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4mJiBvcHRf
c3FsRXJyb3IsIGNvbnN0IFN0cmluZyYgb3B0X3NjcmVlbkNvbG9yLCBSZWZQdHI8UHJvdG9jb2w6
OkRhdGFiYXNlOjpDb2xvckxpc3Q+JiYgb3B0X2FsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5n
JiBvcHRfcHJpbnRDb2xvcikKIHsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9
IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0
aG9kIl9zLCAiRGF0YWJhc2UuZGlkRXhlY3V0ZU9wdGlvbmFsUGFyYW1ldGVycyJfcyk7Ci0gICAg
UmVmPEpTT046Ok9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsK
LSAgICBpZiAoY29sdW1uTmFtZXMpCi0gICAgICAgIHBhcmFtc09iamVjdC0+c2V0QXJyYXkoImNv
bHVtbk5hbWVzIl9zLCBjb2x1bW5OYW1lcyk7Ci0gICAgaWYgKG5vdGVzKQotICAgICAgICBwYXJh
bXNPYmplY3QtPnNldFN0cmluZygibm90ZXMiX3MsICpub3Rlcyk7Ci0gICAgaWYgKHRpbWVzdGFt
cCkKLSAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywgKnRpbWVz
dGFtcCk7Ci0gICAgaWYgKHZhbHVlcykKLSAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRPYmplY3Qo
InZhbHVlcyJfcywgdmFsdWVzKTsKLSAgICBpZiAocGF5bG9hZCkKLSAgICAgICAgcGFyYW1zT2Jq
ZWN0LT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgKnBheWxvYWQpOwotICAgIGlmIChzcWxFcnJvcikK
LSAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBzcWxFcnJvcik7
Ci0gICAgaWYgKHNjcmVlbkNvbG9yKQotICAgICAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygi
c2NyZWVuQ29sb3IiX3MsICpzY3JlZW5Db2xvcik7Ci0gICAgaWYgKGFsdGVybmF0ZUNvbG9ycykK
LSAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCBhbHRl
cm5hdGVDb2xvcnMpOwotICAgIGlmIChwcmludENvbG9yKQotICAgICAgICBwYXJhbXNPYmplY3Qt
PnNldFN0cmluZygicHJpbnRDb2xvciJfcywgKnByaW50Q29sb3IpOwotICAgIGpzb25NZXNzYWdl
LT5zZXRPYmplY3QoInBhcmFtcyJfcywgV1RGTW92ZShwYXJhbXNPYmplY3QpKTsKKyAgICBhdXRv
IHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBwcm90
b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJEYXRhYmFzZS5kaWRFeGVj
dXRlT3B0aW9uYWxQYXJhbWV0ZXJzIl9zKTsKKyAgICBhdXRvIHByb3RvY29sX3BhcmFtc09iamVj
dCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgaWYgKCEhb3B0X2NvbHVtbk5hbWVzKQor
ICAgICAgICBwcm90b2NvbF9wYXJhbXNPYmplY3QtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywg
b3B0X2NvbHVtbk5hbWVzLnJlbGVhc2VOb25OdWxsKCkpOworICAgIGlmICghIW9wdF9ub3RlcykK
KyAgICAgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCBvcHRf
bm90ZXMpOworICAgIGlmICghIW9wdF90aW1lc3RhbXApCisgICAgICAgIHByb3RvY29sX3BhcmFt
c09iamVjdC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsICpvcHRfdGltZXN0YW1wKTsKKyAgICBp
ZiAoISFvcHRfdmFsdWVzKQorICAgICAgICBwcm90b2NvbF9wYXJhbXNPYmplY3QtPnNldE9iamVj
dCgidmFsdWVzIl9zLCBvcHRfdmFsdWVzLnJlbGVhc2VOb25OdWxsKCkpOworICAgIGlmICghIW9w
dF9wYXlsb2FkKQorICAgICAgICBwcm90b2NvbF9wYXJhbXNPYmplY3QtPnNldFZhbHVlKCJwYXls
b2FkIl9zLCBvcHRfcGF5bG9hZC5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICBpZiAoISFvcHRfc3Fs
RXJyb3IpCisgICAgICAgIHByb3RvY29sX3BhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJzcWxFcnJv
ciJfcywgb3B0X3NxbEVycm9yLnJlbGVhc2VOb25OdWxsKCkpOworICAgIGlmICghIW9wdF9zY3Jl
ZW5Db2xvcikKKyAgICAgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInNjcmVl
bkNvbG9yIl9zLCBvcHRfc2NyZWVuQ29sb3IpOworICAgIGlmICghIW9wdF9hbHRlcm5hdGVDb2xv
cnMpCisgICAgICAgIHByb3RvY29sX3BhcmFtc09iamVjdC0+c2V0QXJyYXkoImFsdGVybmF0ZUNv
bG9ycyJfcywgb3B0X2FsdGVybmF0ZUNvbG9ycy5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICBpZiAo
ISFvcHRfcHJpbnRDb2xvcikKKyAgICAgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRTdHJp
bmcoInByaW50Q29sb3IiX3MsIG9wdF9wcmludENvbG9yKTsKKyAgICBwcm90b2NvbF9qc29uTWVz
c2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiX3MsIFdURk1vdmUocHJvdG9jb2xfcGFyYW1zT2JqZWN0
KSk7CiAKLSAgICBtX2Zyb250ZW5kUm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09O
U3RyaW5nKCkpOworICAgIG1fZnJvbnRlbmRSb3V0ZXIuc2VuZEV2ZW50KHByb3RvY29sX2pzb25N
ZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7CiB9CiAKLXZvaWQgRGF0YWJhc2VGcm9udGVuZERpc3Bh
dGNoZXI6OmRpZEV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhSZWZQdHI8SlNPTjo6QXJyYXlP
ZjxTdHJpbmc+PiBjb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBub3RlcywgZG91YmxlIHRpbWVz
dGFtcCwgUmVmUHRyPEpTT046Ok9iamVjdD4gdmFsdWVzLCBSZWZQdHI8SlNPTjo6VmFsdWU+IHBh
eWxvYWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IHNxbEVy
cm9yLCBjb25zdCBTdHJpbmcmIHNjcmVlbkNvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4gYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcmIHBy
aW50Q29sb3IpCit2b2lkIERhdGFiYXNlRnJvbnRlbmREaXNwYXRjaGVyOjpkaWRFeGVjdXRlTm9P
cHRpb25hbFBhcmFtZXRlcnMoUmVmPEpTT046OkFycmF5T2Y8U3RyaW5nPj4mJiBjb2x1bW5OYW1l
cywgY29uc3QgU3RyaW5nJiBub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgUmVmPEpTT046Ok9iamVj
dD4mJiB2YWx1ZXMsIFJlZjxKU09OOjpWYWx1ZT4mJiBwYXlsb2FkLCBSZWY8UHJvdG9jb2w6OkRh
dGFiYXNlOjpFcnJvcj4mJiBzcWxFcnJvciwgY29uc3QgU3RyaW5nJiBzY3JlZW5Db2xvciwgUmVm
PFByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiYmIGFsdGVybmF0ZUNvbG9ycywgY29uc3Qg
U3RyaW5nJiBwcmludENvbG9yKQogewotICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdl
ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJt
ZXRob2QiX3MsICJEYXRhYmFzZS5kaWRFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMiX3MpOwot
ICAgIFJlZjxKU09OOjpPYmplY3Q+IHBhcmFtc09iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRl
KCk7Ci0gICAgcGFyYW1zT2JqZWN0LT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIGNvbHVtbk5h
bWVzKTsKLSAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygibm90ZXMiX3MsIG5vdGVzKTsKLSAg
ICBwYXJhbXNPYmplY3QtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCB0aW1lc3RhbXApOwotICAg
IHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIHZhbHVlcyk7Ci0gICAgcGFyYW1z
T2JqZWN0LT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgcGF5bG9hZCk7Ci0gICAgcGFyYW1zT2JqZWN0
LT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBzcWxFcnJvcik7Ci0gICAgcGFyYW1zT2JqZWN0LT5z
ZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCBzY3JlZW5Db2xvcik7Ci0gICAgcGFyYW1zT2JqZWN0
LT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCBhbHRlcm5hdGVDb2xvcnMpOwotICAgIHBh
cmFtc09iamVjdC0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCBwcmludENvbG9yKTsKLSAgICBq
c29uTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiX3MsIFdURk1vdmUocGFyYW1zT2JqZWN0KSk7
CisgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7
CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiRGF0YWJh
c2UuZGlkRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzIl9zKTsKKyAgICBhdXRvIHByb3RvY29s
X3BhcmFtc09iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgcHJvdG9jb2xfcGFy
YW1zT2JqZWN0LT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIFdURk1vdmUoY29sdW1uTmFtZXMp
KTsKKyAgICBwcm90b2NvbF9wYXJhbXNPYmplY3QtPnNldFN0cmluZygibm90ZXMiX3MsIG5vdGVz
KTsKKyAgICBwcm90b2NvbF9wYXJhbXNPYmplY3QtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCB0
aW1lc3RhbXApOworICAgIHByb3RvY29sX3BhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJ2YWx1ZXMi
X3MsIFdURk1vdmUodmFsdWVzKSk7CisgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRWYWx1
ZSgicGF5bG9hZCJfcywgV1RGTW92ZShwYXlsb2FkKSk7CisgICAgcHJvdG9jb2xfcGFyYW1zT2Jq
ZWN0LT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBXVEZNb3ZlKHNxbEVycm9yKSk7CisgICAgcHJv
dG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCBzY3JlZW5Db2xv
cik7CisgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3Jz
Il9zLCBXVEZNb3ZlKGFsdGVybmF0ZUNvbG9ycykpOworICAgIHByb3RvY29sX3BhcmFtc09iamVj
dC0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCBwcmludENvbG9yKTsKKyAgICBwcm90b2NvbF9q
c29uTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiX3MsIFdURk1vdmUocHJvdG9jb2xfcGFyYW1z
T2JqZWN0KSk7CiAKLSAgICBtX2Zyb250ZW5kUm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+
dG9KU09OU3RyaW5nKCkpOworICAgIG1fZnJvbnRlbmRSb3V0ZXIuc2VuZEV2ZW50KHByb3RvY29s
X2pzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEluc3Bl
Y3RvcgpAQCAtMzYyLDcgKzM2Myw5IEBAIHZvaWQgRGF0YWJhc2VGcm9udGVuZERpc3BhdGNoZXI6
OmRpZEV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhSZWZQdHI8SlNPTjo6QXJyCiAjcHJhZ21h
IG9uY2UKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMu
aD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVz
Lmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC0zOTEsNyArMzk0LDcgQEAgdXNp
bmcgQ29sb3JMaXN0ID0gSlNPTjo6QXJyYXlPZjxTdHJpbmc+OwogbmFtZXNwYWNlIERhdGFiYXNl
IHsKIAogLyogRGF0YWJhc2UgZXJyb3IuICovCi1jbGFzcyBFcnJvciA6IHB1YmxpYyBKU09OOjpP
YmplY3RCYXNlIHsKK2NsYXNzIEVycm9yIGZpbmFsIDogcHVibGljIEpTT046Ok9iamVjdEJhc2Ug
ewogcHVibGljOgogICAgIGVudW0gewogICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCkBAIC00MTgs
MTcgKzQyMSwxNyBAQCBwdWJsaWM6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBFcnJvcjsKICAgICBw
dWJsaWM6CiAKLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IE1lc3NhZ2VTZXQ+JiBzZXRNZXNzYWdl
KGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBNZXNzYWdlU2V0
PiYgc2V0TWVzc2FnZShjb25zdCBTdHJpbmcmIGluX21lc3NhZ2UpCiAgICAgICAgIHsKICAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBNZXNzYWdlU2V0KSwgcHJvcGVydHlfbWVz
c2FnZV9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJtZXNz
YWdlIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJtZXNzYWdl
Il9zLCBpbl9tZXNzYWdlKTsKICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TWVzc2FnZVNl
dD4oKTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDb2RlU2V0PiYgc2V0
Q29kZShpbnQgdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDb2RlU2V0PiYgc2V0Q29k
ZShpbnQgaW5fY29kZSkKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShT
VEFURSAmIENvZGVTZXQpLCBwcm9wZXJ0eV9jb2RlX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAg
IG1fcmVzdWx0LT5zZXRJbnRlZ2VyKCJjb2RlIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICBtX3Jl
c3VsdC0+c2V0SW50ZWdlcigiY29kZSJfcywgaW5fY29kZSk7CiAgICAgICAgICAgICByZXR1cm4g
Y2FzdFN0YXRlPENvZGVTZXQ+KCk7CiAgICAgICAgIH0KIApAQCAtNDk4LDggKzUwMSw3IEBAIHB1
YmxpYzoKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3Rz
LmgiCiAKLSNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3Ry
aW5nLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KIAogbmFtZXNwYWNlIEluc3BlY3Rv
ciB7CiAKQEAgLTc3OCwyOSArNzgwLDI5IEBAIHVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CiAg
ICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKGFsdGVybmF0ZUNv
bG9ycywgQCJhbHRlcm5hdGVDb2xvcnMiKTsKICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9P
UFRJT05BTF9QQVJBTUVURVIocHJpbnRDb2xvciwgQCJwcmludENvbG9yIik7CiAKLSAgICBSZWY8
SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAg
anNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiRGF0YWJhc2UuZGlkRXhlY3V0ZU9w
dGlvbmFsUGFyYW1ldGVycyJfcyk7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4gcGFyYW1zT2JqZWN0
ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdl
ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0
U3RyaW5nKCJtZXRob2QiX3MsICJEYXRhYmFzZS5kaWRFeGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJz
Il9zKTsKKyAgICBhdXRvIHByb3RvY29sX3BhcmFtc09iamVjdCA9IEpTT046Ok9iamVjdDo6Y3Jl
YXRlKCk7CiAgICAgaWYgKGNvbHVtbk5hbWVzKQotICAgICAgICBwYXJhbXNPYmplY3QtPnNldEFy
cmF5KCJjb2x1bW5OYW1lcyJfcywgdG9KU09OU3RyaW5nQXJyYXkoKCpjb2x1bW5OYW1lcykpKTsK
KyAgICAgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3Ms
IHRvSlNPTlN0cmluZ0FycmF5KCgqY29sdW1uTmFtZXMpKSk7CiAgICAgaWYgKG5vdGVzKQotICAg
ICAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygibm90ZXMiX3MsICgqbm90ZXMpKTsKKyAgICAg
ICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCAoKm5vdGVzKSk7
CiAgICAgaWYgKHRpbWVzdGFtcCkKLSAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXREb3VibGUoInRp
bWVzdGFtcCJfcywgKCp0aW1lc3RhbXApKTsKKyAgICAgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0
LT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywgKCp0aW1lc3RhbXApKTsKICAgICBpZiAodmFsdWVz
KQotICAgICAgICBwYXJhbXNPYmplY3QtPnNldE9iamVjdCgidmFsdWVzIl9zLCBbKCp2YWx1ZXMp
IHRvSlNPTk9iamVjdF0pOworICAgICAgICBwcm90b2NvbF9wYXJhbXNPYmplY3QtPnNldE9iamVj
dCgidmFsdWVzIl9zLCBbKCp2YWx1ZXMpIHRvSlNPTk9iamVjdF0pOwogICAgIGlmIChwYXlsb2Fk
KQotICAgICAgICBwYXJhbXNPYmplY3QtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCBbKCpwYXlsb2Fk
KSB0b0pTT05PYmplY3RdKTsKKyAgICAgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRWYWx1
ZSgicGF5bG9hZCJfcywgWygqcGF5bG9hZCkgdG9KU09OT2JqZWN0XSk7CiAgICAgaWYgKHNxbEVy
cm9yKQotICAgICAgICBwYXJhbXNPYmplY3QtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIFsoKnNx
bEVycm9yKSB0b0pTT05PYmplY3RdKTsKKyAgICAgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT5z
ZXRPYmplY3QoInNxbEVycm9yIl9zLCBbKCpzcWxFcnJvcikgdG9KU09OT2JqZWN0XSk7CiAgICAg
aWYgKHNjcmVlbkNvbG9yKQotICAgICAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygic2NyZWVu
Q29sb3IiX3MsICgqc2NyZWVuQ29sb3IpKTsKKyAgICAgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0
LT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCAoKnNjcmVlbkNvbG9yKSk7CiAgICAgaWYgKGFs
dGVybmF0ZUNvbG9ycykKLSAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRBcnJheSgiYWx0ZXJuYXRl
Q29sb3JzIl9zLCB0b0pTT05TdHJpbmdBcnJheSgoKmFsdGVybmF0ZUNvbG9ycykpKTsKKyAgICAg
ICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCB0
b0pTT05TdHJpbmdBcnJheSgoKmFsdGVybmF0ZUNvbG9ycykpKTsKICAgICBpZiAocHJpbnRDb2xv
cikKLSAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInByaW50Q29sb3IiX3MsICgqcHJp
bnRDb2xvcikpOwotICAgIGpzb25NZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyJfcywgV1RGTW92
ZShwYXJhbXNPYmplY3QpKTsKLSAgICByb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pT
T05TdHJpbmcoKSk7CisgICAgICAgIHByb3RvY29sX3BhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJw
cmludENvbG9yIl9zLCAoKnByaW50Q29sb3IpKTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+
c2V0T2JqZWN0KCJwYXJhbXMiX3MsIFdURk1vdmUocHJvdG9jb2xfcGFyYW1zT2JqZWN0KSk7Cisg
ICAgcm91dGVyLnNlbmRFdmVudChwcm90b2NvbF9qc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkp
OwogfQogCiAtICh2b2lkKWRpZEV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1dpdGhDb2x1bW5O
YW1lczooTlNBcnJheS8qPE5TU3RyaW5nPiovICopY29sdW1uTmFtZXMgbm90ZXM6KE5TU3RyaW5n
ICopbm90ZXMgdGltZXN0YW1wOihkb3VibGUpdGltZXN0YW1wIHZhbHVlczooUldJUHJvdG9jb2xK
U09OT2JqZWN0ICopdmFsdWVzIHBheWxvYWQ6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXBheWxv
YWQgc3FsRXJyb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKilzcWxFcnJvciBzY3JlZW5D
b2xvcjooTlNTdHJpbmcgKilzY3JlZW5Db2xvciBhbHRlcm5hdGVDb2xvcnM6KE5TQXJyYXkvKjxO
U1N0cmluZz4qLyAqKWFsdGVybmF0ZUNvbG9ycyBwcmludENvbG9yOihOU1N0cmluZyAqKXByaW50
Q29sb3IKQEAgLTgxNiwyMCArODE4LDIwIEBAIHVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CiAg
ICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoYWx0ZXJuYXRlQ29sb3Jz
LCBAImFsdGVybmF0ZUNvbG9ycyIpOwogICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURf
UEFSQU1FVEVSKHByaW50Q29sb3IsIEAicHJpbnRDb2xvciIpOwogCi0gICAgUmVmPEpTT046Ok9i
amVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIGpzb25NZXNz
YWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRhdGFiYXNlLmRpZEV4ZWN1dGVOb09wdGlvbmFs
UGFyYW1ldGVycyJfcyk7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSlNP
Tjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBwYXJhbXNPYmplY3QtPnNldEFycmF5KCJjb2x1bW5O
YW1lcyJfcywgdG9KU09OU3RyaW5nQXJyYXkoY29sdW1uTmFtZXMpKTsKLSAgICBwYXJhbXNPYmpl
Y3QtPnNldFN0cmluZygibm90ZXMiX3MsIG5vdGVzKTsKLSAgICBwYXJhbXNPYmplY3QtPnNldERv
dWJsZSgidGltZXN0YW1wIl9zLCB0aW1lc3RhbXApOwotICAgIHBhcmFtc09iamVjdC0+c2V0T2Jq
ZWN0KCJ2YWx1ZXMiX3MsIFt2YWx1ZXMgdG9KU09OT2JqZWN0XSk7Ci0gICAgcGFyYW1zT2JqZWN0
LT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgW3BheWxvYWQgdG9KU09OT2JqZWN0XSk7Ci0gICAgcGFy
YW1zT2JqZWN0LT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBbc3FsRXJyb3IgdG9KU09OT2JqZWN0
XSk7Ci0gICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCBzY3JlZW5D
b2xvcik7Ci0gICAgcGFyYW1zT2JqZWN0LT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCB0
b0pTT05TdHJpbmdBcnJheShhbHRlcm5hdGVDb2xvcnMpKTsKLSAgICBwYXJhbXNPYmplY3QtPnNl
dFN0cmluZygicHJpbnRDb2xvciJfcywgcHJpbnRDb2xvcik7Ci0gICAganNvbk1lc3NhZ2UtPnNl
dE9iamVjdCgicGFyYW1zIl9zLCBXVEZNb3ZlKHBhcmFtc09iamVjdCkpOwotICAgIHJvdXRlci5z
ZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKKyAgICBhdXRvIHByb3RvY29s
X2pzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBwcm90b2NvbF9qc29u
TWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJEYXRhYmFzZS5kaWRFeGVjdXRlTm9PcHRp
b25hbFBhcmFtZXRlcnMiX3MpOworICAgIGF1dG8gcHJvdG9jb2xfcGFyYW1zT2JqZWN0ID0gSlNP
Tjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBwcm90b2NvbF9wYXJhbXNPYmplY3QtPnNldEFycmF5
KCJjb2x1bW5OYW1lcyJfcywgdG9KU09OU3RyaW5nQXJyYXkoY29sdW1uTmFtZXMpKTsKKyAgICBw
cm90b2NvbF9wYXJhbXNPYmplY3QtPnNldFN0cmluZygibm90ZXMiX3MsIG5vdGVzKTsKKyAgICBw
cm90b2NvbF9wYXJhbXNPYmplY3QtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCB0aW1lc3RhbXAp
OworICAgIHByb3RvY29sX3BhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIFt2YWx1
ZXMgdG9KU09OT2JqZWN0XSk7CisgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRWYWx1ZSgi
cGF5bG9hZCJfcywgW3BheWxvYWQgdG9KU09OT2JqZWN0XSk7CisgICAgcHJvdG9jb2xfcGFyYW1z
T2JqZWN0LT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBbc3FsRXJyb3IgdG9KU09OT2JqZWN0XSk7
CisgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCBz
Y3JlZW5Db2xvcik7CisgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRBcnJheSgiYWx0ZXJu
YXRlQ29sb3JzIl9zLCB0b0pTT05TdHJpbmdBcnJheShhbHRlcm5hdGVDb2xvcnMpKTsKKyAgICBw
cm90b2NvbF9wYXJhbXNPYmplY3QtPnNldFN0cmluZygicHJpbnRDb2xvciJfcywgcHJpbnRDb2xv
cik7CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIl9zLCBXVEZN
b3ZlKHByb3RvY29sX3BhcmFtc09iamVjdCkpOworICAgIHJvdXRlci5zZW5kRXZlbnQocHJvdG9j
b2xfanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKIH0KIAogQGVuZApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2dl
bmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uLXJlc3VsdCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9nZW5lcmF0ZS1k
b21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbi1yZXN1bHQKaW5kZXggMjk0YmE5MDgxMjE4
YTM1MDJkOTZkNDU1ZDRkNjNkMmIzZjVhYWU5YS4uMzljMzY2M2FmZjJmNmZiOWMwZWE3Yjg0OWNm
MzkwYWZkYTNiZmJhYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2dlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1
YXJkcy5qc29uLXJlc3VsdAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZXhwZWN0ZWQvZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRz
Lmpzb24tcmVzdWx0CkBAIC03NCw3ICs3NCw3IEBAIEluc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVE
b21haW4oIk5ldHdvcmszIiwgbnVsbCk7CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKIAotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVk
ZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yRnJvbnRlbmRSb3V0ZXIuaD4KIApAQCAtOTIsNyArOTIsNyBAQCBwcml2YXRlOgogY2xhc3Mg
QWx0ZXJuYXRlTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlciA6IHB1YmxpYyBBbHRlcm5hdGVCYWNr
ZW5kRGlzcGF0Y2hlciB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+QWx0ZXJuYXRlTmV0d29yazFC
YWNrZW5kRGlzcGF0Y2hlcigpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UobG9u
ZyBjYWxsSWQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlKGxvbmcgcHJvdG9j
b2xfY2FsbElkKSA9IDA7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKQEAgLTEzNCwx
MSArMTM0LDE0IEBAIHB1YmxpYzoKIAogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIK
ICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgor
I2luY2x1ZGUgPHR1cGxlPgorI2luY2x1ZGUgPHd0Zi9FeHBlY3RlZC5oPgorI2luY2x1ZGUgPHd0
Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKIAotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKIAogI2lmIEVO
QUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogY2xhc3MgQWx0ZXJuYXRlTmV0
d29yazFCYWNrZW5kRGlzcGF0Y2hlcjsKQEAgLTE0Niw3ICsxNDksNyBAQCBjbGFzcyBBbHRlcm5h
dGVOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOwogCiBjbGFzcyBOZXR3b3JrMUJhY2tlbmREaXNw
YXRjaGVySGFuZGxlciB7CiBwdWJsaWM6Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZShF
cnJvclN0cmluZyYpID0gMDsKKyAgICB2aXJ0dWFsIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZv
aWQ+IGxvYWRSZXNvdXJjZSgpID0gMDsKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIH5OZXR3b3Jr
MUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpOwogfTsKQEAgLTE1NCw5ICsxNTcsOSBAQCBwcm90
ZWN0ZWQ6CiBjbGFzcyBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIFN1
cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPE5l
dHdvcmsxQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYsIE5ldHdv
cmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7Ci0gICAgdm9pZCBkaXNwYXRjaChsb25nIHJl
cXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2Fn
ZSkgZmluYWw7CisgICAgdm9pZCBkaXNwYXRjaChsb25nIHByb3RvY29sX2NhbGxJZCwgY29uc3Qg
U3RyaW5nJiBwcm90b2NvbF9tZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfbWVz
c2FnZSkgZmluYWw7CiBwcml2YXRlOgotICAgIHZvaWQgbG9hZFJlc291cmNlKGxvbmcgcmVxdWVz
dElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOworICAgIHZvaWQgbG9hZFJl
c291cmNlKGxvbmcgcHJvdG9jbF9jYWxsSWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcHJvdG9j
b2xfcGFyYW1ldGVycyk7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hF
UlMpCiBwdWJsaWM6CiAgICAgdm9pZCBzZXRBbHRlcm5hdGVEaXNwYXRjaGVyKEFsdGVybmF0ZU5l
dHdvcmsxQmFja2VuZERpc3BhdGNoZXIqIGFsdGVybmF0ZURpc3BhdGNoZXIpIHsgbV9hbHRlcm5h
dGVEaXNwYXRjaGVyID0gYWx0ZXJuYXRlRGlzcGF0Y2hlcjsgfQpAQCAtMjA1LDkgKzIwOCw3IEBA
IHByaXZhdGU6CiAjaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgogCiAjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3
dGYvSlNPTlZhbHVlcy5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRF
X0RJU1BBVENIRVJTKQogI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMu
aCIKQEAgLTIyOSwzOCArMjMwLDM4IEBAIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI6Ok5ldHdv
cmsxQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmRECiAgICAgbV9i
YWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRjaGVyRm9yRG9tYWluKCJOZXR3b3JrMSJf
cywgdGhpcyk7CiB9CiAKLXZvaWQgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2go
bG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYm
IG1lc3NhZ2UpCit2b2lkIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcg
cHJvdG9jb2xfY2FsbElkLCBjb25zdCBTdHJpbmcmIHByb3RvY29sX21ldGhvZCwgUmVmPEpTT046
Ok9iamVjdD4mJiBwcm90b2NvbF9tZXNzYWdlKQogewogICAgIFJlZjxOZXR3b3JrMUJhY2tlbmRE
aXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKIAotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBh
cmFtZXRlcnM7Ci0gICAgbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3MsIHBhcmFtZXRlcnMp
OworICAgIGF1dG8gcHJvdG9jb2xfcGFyYW1ldGVycyA9IHByb3RvY29sX21lc3NhZ2UtPmdldE9i
amVjdCgicGFyYW1zIl9zKTsKIAotICAgIGlmIChtZXRob2QgPT0gImxvYWRSZXNvdXJjZSIpIHsK
LSAgICAgICAgbG9hZFJlc291cmNlKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7Cisg
ICAgaWYgKHByb3RvY29sX21ldGhvZCA9PSAibG9hZFJlc291cmNlIikgeworICAgICAgICBsb2Fk
UmVzb3VyY2UocHJvdG9jb2xfY2FsbElkLCBXVEZNb3ZlKHByb3RvY29sX3BhcmFtZXRlcnMpKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9y
dFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdv
cmsxLiIgKyBtZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7CisgICAgbV9iYWNrZW5kRGlzcGF0
Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91
bmQsICInTmV0d29yazEuIiArIHByb3RvY29sX21ldGhvZCArICInIHdhcyBub3QgZm91bmQiKTsK
IH0KIAotdm9pZCBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UobG9uZyBy
ZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCit2b2lkIE5ldHdvcmsxQmFja2VuZERp
c3BhdGNoZXI6OmxvYWRSZXNvdXJjZShsb25nIHByb3RvY29sX2NhbGxJZCwgUmVmUHRyPEpTT046
Ok9iamVjdD4mJikKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVS
UykKICAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRl
RGlzcGF0Y2hlci0+bG9hZFJlc291cmNlKHJlcXVlc3RJZCk7CisgICAgICAgIG1fYWx0ZXJuYXRl
RGlzcGF0Y2hlci0+bG9hZFJlc291cmNlKHByb3RvY29sX2NhbGxJZCk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hF
UlMpCiAKLSAgICBFcnJvclN0cmluZyBlcnJvcjsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1
bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJjZShl
cnJvcik7CisgICAgYXV0byByZXN1bHQgPSBtX2FnZW50LT5sb2FkUmVzb3VyY2UoKTsKKyAgICBp
ZiAoIXJlc3VsdCkgeworICAgICAgICBBU1NFUlQoIXJlc3VsdC5lcnJvcigpLmlzRW1wdHkoKSk7
CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2Vu
ZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCByZXN1bHQuZXJyb3IoKSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CiAKLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQotICAgICAgICBtX2JhY2tlbmRE
aXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNl
KTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29s
RXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7Cisg
ICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Cisg
ICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHByb3RvY29sX2NhbGxJZCwgV1RG
TW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSksIGZhbHNlKTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCkBAIC0zMDEsNiArMzAyLDcgQEAgdm9pZCBOZXR3b3JrMUJhY2tlbmREaXNwYXRj
aGVyOjpsb2FkUmVzb3VyY2UobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3QKIAog
I2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDx3dGYvSlNPTlZhbHVl
cy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKQEAgLTM1MywxNiArMzU1LDE1IEBAIHBy
aXZhdGU6CiAjaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKIAogI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3Rm
L3RleHQvQ1N0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAogdm9pZCBOZXR3b3Jr
M0Zyb250ZW5kRGlzcGF0Y2hlcjo6cmVzb3VyY2VMb2FkZWQoKQogewotICAgIFJlZjxKU09OOjpP
YmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBqc29uTWVz
c2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJOZXR3b3JrMy5yZXNvdXJjZUxvYWRlZCJfcyk7
CisgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7
CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiTmV0d29y
azMucmVzb3VyY2VMb2FkZWQiX3MpOwogCi0gICAgbV9mcm9udGVuZFJvdXRlci5zZW5kRXZlbnQo
anNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKKyAgICBtX2Zyb250ZW5kUm91dGVyLnNlbmRF
dmVudChwcm90b2NvbF9qc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKQEAgLTQwMiw3ICs0MDMsOSBAQCB2b2lkIE5ldHdvcmszRnJvbnRl
bmREaXNwYXRjaGVyOjpyZXNvdXJjZUxvYWRlZCgpCiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYv
QXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3Rm
L09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFj
ZSBJbnNwZWN0b3IgewogCkBAIC00MjMsNyArNDI2LDcgQEAgY2xhc3MgTmV0d29ya0Vycm9yOwog
CiBuYW1lc3BhY2UgTmV0d29yazIgewogCi1jbGFzcyBOZXR3b3JrRXJyb3IgOiBwdWJsaWMgSlNP
Tjo6T2JqZWN0QmFzZSB7CitjbGFzcyBOZXR3b3JrRXJyb3IgZmluYWwgOiBwdWJsaWMgSlNPTjo6
T2JqZWN0QmFzZSB7CiBwdWJsaWM6CiAgICAgZW51bSB7CiAgICAgICAgIE5vRmllbGRzU2V0ID0g
MCwKQEAgLTQ1MCwxNyArNDUzLDE3IEBAIHB1YmxpYzoKICAgICAgICAgZnJpZW5kIGNsYXNzIE5l
dHdvcmtFcnJvcjsKICAgICBwdWJsaWM6CiAKLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IE1lc3Nh
Z2VTZXQ+JiBzZXRNZXNzYWdlKGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCBNZXNzYWdlU2V0PiYgc2V0TWVzc2FnZShjb25zdCBTdHJpbmcmIGluX21lc3NhZ2Up
CiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBNZXNzYWdl
U2V0KSwgcHJvcGVydHlfbWVzc2FnZV9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3Vs
dC0+c2V0U3RyaW5nKCJtZXNzYWdlIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+
c2V0U3RyaW5nKCJtZXNzYWdlIl9zLCBpbl9tZXNzYWdlKTsKICAgICAgICAgICAgIHJldHVybiBj
YXN0U3RhdGU8TWVzc2FnZVNldD4oKTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1aWxkZXI8U1RB
VEUgfCBDb2RlU2V0PiYgc2V0Q29kZShpbnQgdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8U1RBVEUg
fCBDb2RlU2V0PiYgc2V0Q29kZShpbnQgaW5fY29kZSkKICAgICAgICAgewogICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoIShTVEFURSAmIENvZGVTZXQpLCBwcm9wZXJ0eV9jb2RlX2FscmVhZHlf
c2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRJbnRlZ2VyKCJjb2RlIl9zLCB2YWx1ZSk7
CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0SW50ZWdlcigiY29kZSJfcywgaW5fY29kZSk7CiAg
ICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENvZGVTZXQ+KCk7CiAgICAgICAgIH0KIApAQCAt
NTMwLDggKzUzMyw3IEBAIHB1YmxpYzoKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJU
ZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAKLSNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNs
dWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KIAog
bmFtZXNwYWNlIEluc3BlY3RvciB7CiAKQEAgLTU4Nyw3ICs1ODksNyBAQCBjbGFzcyBPYmpDSW5z
cGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBBbHRlcm5hdGVO
ZXR3b3JrMUJhYwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIE9i
akNJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyKGlkPFRlc3RQcm90b2NvbE5ldHdv
cmsxRG9tYWluSGFuZGxlcj4gaGFuZGxlcikgeyBtX2RlbGVnYXRlID0gaGFuZGxlcjsgfQotICAg
IHZvaWQgbG9hZFJlc291cmNlKGxvbmcgcmVxdWVzdElkKSBmaW5hbDsKKyAgICB2b2lkIGxvYWRS
ZXNvdXJjZShsb25nIHByb3RvY29sX2NhbGxJZCkgZmluYWw7CiBwcml2YXRlOgogICAgIFJldGFp
blB0cjxpZDxUZXN0UHJvdG9jb2xOZXR3b3JrMURvbWFpbkhhbmRsZXI+PiBtX2RlbGVnYXRlOwog
fTsKQEAgLTYzNSwyMSArNjM3LDIyIEBAIHByaXZhdGU6CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3Ig
ewogCi12b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVz
b3VyY2UobG9uZyByZXF1ZXN0SWQpCit2b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmRE
aXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UobG9uZyBwcm90b2NvbF9jYWxsSWQpCiB7CiAgICAgaWYg
KCFbbV9kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGxvYWRSZXNvdXJjZVdp
dGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazopXSkgewotICAgICAgICBiYWNrZW5kRGlz
cGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNo
ZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdvcmsxLmxvYWRSZXNvdXJjZScgd2FzIG5vdCBmb3Vu
ZCJfcyk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3Io
cHJvdG9jb2xfY2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0
d29yazEubG9hZFJlc291cmNlJyB3YXMgbm90IGZvdW5kIl9zKTsKICAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAogICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgewotICAgICAgICBi
YWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2Vu
ZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CisgICAgICAgIGJhY2tlbmREaXNwYXRj
aGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocHJvdG9jb2xfY2FsbElkLCBCYWNrZW5kRGlzcGF0
Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+
c2VuZFBlbmRpbmdFcnJvcnMoKTsKICAgICB9OwogCiAgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0g
XnsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwg
SlNPTjo6T2JqZWN0OjpjcmVhdGUoKSwgZmFsc2UpOworICAgICAgICBhdXRvIHByb3RvY29sX2pz
b25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgYmFja2VuZERpc3Bh
dGNoZXIoKS0+c2VuZFJlc3BvbnNlKHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9q
c29uTWVzc2FnZSksIGZhbHNlKTsKICAgICB9OwogCiAgICAgW21fZGVsZWdhdGUgbG9hZFJlc291
cmNlV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vz
c0NhbGxiYWNrXTsKQEAgLTg1MSw5ICs4NTQsOSBAQCB1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9y
OwogewogICAgIGNvbnN0IEZyb250ZW5kUm91dGVyJiByb3V0ZXIgPSBfY29udHJvbGxlci0+ZnJv
bnRlbmRSb3V0ZXIoKTsKIAotICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNP
Tjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2Qi
X3MsICJOZXR3b3JrMy5yZXNvdXJjZUxvYWRlZCJfcyk7Ci0gICAgcm91dGVyLnNlbmRFdmVudChq
c29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOworICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3Nh
Z2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5z
ZXRTdHJpbmcoIm1ldGhvZCJfcywgIk5ldHdvcmszLnJlc291cmNlTG9hZGVkIl9zKTsKKyAgICBy
b3V0ZXIuc2VuZEV2ZW50KHByb3RvY29sX2pzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7CiB9
CiAKIEBlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9leHBlY3RlZC9zYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uLXJl
c3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBl
Y3RlZC9zYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uLXJlc3VsdAppbmRleCA0NTNl
ZjZlNDk0OGVhYjAyNWFiNTYxMzc4ZDJiOGFhOTRmNTVjODhkLi41NmVmNjM0ZGU5ODA2ODU4NmRi
ZGNkMDg4MWI5MWQ4NDllMmZiYTE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvc2FtZS10eXBlLWlkLWRpZmZlcmVudC1k
b21haW4uanNvbi1yZXN1bHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3NhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24t
cmVzdWx0CkBAIC02Myw3ICs2Myw3IEBACiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKIAotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVk
ZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yRnJvbnRlbmRSb3V0ZXIuaD4KIApAQCAtMTE5LDExICsxMTksMTQgQEAgcHJpdmF0ZToKIAog
I2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHR1cGxlPgorI2luY2x1
ZGUgPHd0Zi9FeHBlY3RlZC5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAotdHlwZWRl
ZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKIAogCiAKQEAgLTE2NCw5ICsxNjcsNyBAQCB0eXBlZGVm
IFN0cmluZyBFcnJvclN0cmluZzsKICNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgi
CiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgot
I2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVk
Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiAjaWYgRU5BQkxFKElOU1BFQ1RP
Ul9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAjaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmRE
aXNwYXRjaGVycy5oIgpAQCAtMjE0LDYgKzIxNSw3IEBAIG5hbWVzcGFjZSBJbnNwZWN0b3Igewog
CiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPHd0Zi9KU09OVmFs
dWVzLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewpAQCAtMjU3LDcgKzI1OSw2IEBAIGNs
YXNzIEZyb250ZW5kUm91dGVyOwogI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgi
CiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgot
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAK
QEAgLTI5OCw3ICsyOTksOSBAQCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKICNwcmFnbWEgb25jZQog
CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgotI2lu
Y2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNp
bmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
IAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKQEAgLTM2Miw4ICszNjUsNyBAQCB1c2luZyBSZW1v
dGVPYmplY3RJZCA9IFN0cmluZzsKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJUZXN0
UHJvdG9jb2xPYmplY3RzLmgiCiAKLSNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KIAogbmFt
ZXNwYWNlIEluc3BlY3RvciB7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9zaGFkb3dlZC1vcHRpb25hbC10eXBlLXNl
dHRlcnMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZXhwZWN0ZWQvc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24tcmVz
dWx0CmluZGV4IDVmMmNkNzkzMzA0MjQ3ZTc2NTVmM2U5ODFlYTcwMGY1N2M3NzBmZDkuLjhlY2Vj
YzcwMTAzNDA0ZGE3ZGMyNzhjYTk3NTE5YTJkZWJmYzAwNWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9zaGFkb3dlZC1v
cHRpb25hbC10eXBlLXNldHRlcnMuanNvbi1yZXN1bHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3NoYWRvd2VkLW9wdGlvbmFsLXR5
cGUtc2V0dGVycy5qc29uLXJlc3VsdApAQCAtNjMsNyArNjMsNyBAQAogCiAjaWYgRU5BQkxFKElO
U1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xU
eXBlcy5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgogI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CiAKQEAgLTExOSwxMSArMTE5LDE0
IEBAIHByaXZhdGU6CiAKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRl
IDx0dXBsZT4KKyNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9u
YWwuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3Bl
Y3RvciB7CiAKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCiAKIAogCkBAIC0xNjQsOSAr
MTY3LDcgQEAgdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiAjaW5jbHVkZSAiVGVzdEJhY2tl
bmREaXNwYXRjaGVycy5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJv
bnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgogI2luY2x1ZGUgPHd0
Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogI2lm
IEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogI2luY2x1ZGUgIlRlc3RB
bHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKQEAgLTIxNCw2ICsyMTUsNyBAQCBuYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKIAogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNs
dWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKQEAgLTI1
Nyw3ICsyNTksNiBAQCBjbGFzcyBGcm9udGVuZFJvdXRlcjsKICNpbmNsdWRlICJUZXN0RnJvbnRl
bmREaXNwYXRjaGVycy5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJv
bnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKIG5hbWVzcGFj
ZSBJbnNwZWN0b3IgewogCkBAIC0yOTgsNyArMjk5LDkgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7
CiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3Rv
Y29sVHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9K
U09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC0zMzEsNyArMzM0
LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKFQg
ZW51bVZhbHVlKQogbmFtZXNwYWNlIFJ1bnRpbWUgewogCiAvKiBLZXkgcGF0aC4gKi8KLWNsYXNz
IEtleVBhdGggOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7CitjbGFzcyBLZXlQYXRoIGZpbmFs
IDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgewogcHVibGljOgogICAgIC8vIE5hbWVkIGFmdGVy
IHByb3BlcnR5IG5hbWUgJ3R5cGUnIHdoaWxlIGdlbmVyYXRpbmcgS2V5UGF0aC4KICAgICBlbnVt
IGNsYXNzIFR5cGUgewpAQCAtMzM5LDYgKzM0Miw3IEBAIHB1YmxpYzoKICAgICAgICAgU3RyaW5n
ID0gMSwKICAgICAgICAgQXJyYXkgPSAyLAogICAgIH07IC8vIGVudW0gY2xhc3MgVHlwZQorCiAg
ICAgZW51bSB7CiAgICAgICAgIE5vRmllbGRzU2V0ID0gMCwKICAgICAgICAgVHlwZVNldCA9IDEg
PDwgMCwKQEAgLTM2MywxMCArMzY3LDEwIEBAIHB1YmxpYzoKICAgICAgICAgZnJpZW5kIGNsYXNz
IEtleVBhdGg7CiAgICAgcHVibGljOgogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBUeXBlU2V0
PiYgc2V0VHlwZShUeXBlIHZhbHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVHlwZVNldD4m
IHNldFR5cGUoVHlwZSBpbl90eXBlKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FT
U0VSVCghKFNUQVRFICYgVHlwZVNldCksIHByb3BlcnR5X3R5cGVfYWxyZWFkeV9zZXQpOwotICAg
ICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygidHlwZSJfcywgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKHZhbHVlKSk7CisgICAgICAgICAg
ICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ0eXBlIl9zLCBQcm90b2NvbDo6VGVzdEhlbHBlcnM6Omdl
dEVudW1Db25zdGFudFZhbHVlKGluX3R5cGUpKTsKICAgICAgICAgICAgIHJldHVybiBjYXN0U3Rh
dGU8VHlwZVNldD4oKTsKICAgICAgICAgfQogCkBAIC0zOTIsMTQgKzM5NiwxNCBAQCBwdWJsaWM6
CiAgICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihKU09OOjpPYmplY3Q6OmNyZWF0
ZSgpKTsKICAgICB9CiAKLSAgICB2b2lkIHNldFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQor
ICAgIHZvaWQgc2V0U3RyaW5nKGNvbnN0IFN0cmluZyYgaW5fb3B0X3N0cmluZykKICAgICB7Ci0g
ICAgICAgIEpTT046Ok9iamVjdEJhc2U6OnNldFN0cmluZygic3RyaW5nIl9zLCB2YWx1ZSk7Cisg
ICAgICAgIEpTT046Ok9iamVjdEJhc2U6OnNldFN0cmluZygic3RyaW5nIl9zLCBpbl9vcHRfc3Ry
aW5nKTsKICAgICB9CiAKLSAgICB2b2lkIHNldEFycmF5KFJlZlB0cjxKU09OOjpBcnJheU9mPFN0
cmluZz4+IHZhbHVlKQorICAgIHZvaWQgc2V0QXJyYXkoUmVmPEpTT046OkFycmF5T2Y8U3RyaW5n
Pj4mJiBpbl9vcHRfYXJyYXkpCiAgICAgewotICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXRB
cnJheSgiYXJyYXkiX3MsIFdURk1vdmUodmFsdWUpKTsKKyAgICAgICAgSlNPTjo6T2JqZWN0QmFz
ZTo6c2V0QXJyYXkoImFycmF5Il9zLCBXVEZNb3ZlKGluX29wdF9hcnJheSkpOwogICAgIH0KIH07
CiAKQEAgLTQxNCw3ICs0MTgsNyBAQCBPcHRpb25hbDxQcm90b2NvbEVudW1UeXBlPiBwYXJzZUVu
dW1WYWx1ZUZyb21TdHJpbmcoY29uc3QgU3RyaW5nJik7CiAKIC8vIEVudW1zIGluIHRoZSAnUnVu
dGltZScgRG9tYWluCiB0ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpS
dW50aW1lOjpLZXlQYXRoOjpUeXBlPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9y
OjpQcm90b2NvbDo6UnVudGltZTo6S2V5UGF0aDo6VHlwZT4oY29uc3QgU3RyaW5nJik7CitPcHRp
b25hbDxQcm90b2NvbDo6UnVudGltZTo6S2V5UGF0aDo6VHlwZT4gcGFyc2VFbnVtVmFsdWVGcm9t
U3RyaW5nPFByb3RvY29sOjpSdW50aW1lOjpLZXlQYXRoOjpUeXBlPihjb25zdCBTdHJpbmcmKTsK
IAogfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKIApAQCAtNDU2LDggKzQ2MCw3IEBAIE9wdGlv
bmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OktleVBhdGg6OlR5cGU+IHBhcnNlRW51
bVZhbHVlRnJvbVN0cmluZzxJCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGVzdFBy
b3RvY29sT2JqZWN0cy5oIgogCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8
d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAKIG5hbWVz
cGFjZSBJbnNwZWN0b3IgewogCkBAIC00NzgsMTYgKzQ4MSwxNiBAQCBTdHJpbmcgZ2V0RW51bUNv
bnN0YW50VmFsdWUoaW50IGNvZGUpIHsKIC8vIEVudW1zIGluIHRoZSAnUnVudGltZScgRG9tYWlu
CiAKIHRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6Oktl
eVBhdGg6OlR5cGU+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29s
OjpSdW50aW1lOjpLZXlQYXRoOjpUeXBlPihjb25zdCBTdHJpbmcmIHByb3RvY29sU3RyaW5nKQor
T3B0aW9uYWw8UHJvdG9jb2w6OlJ1bnRpbWU6OktleVBhdGg6OlR5cGU+IHBhcnNlRW51bVZhbHVl
RnJvbVN0cmluZzxQcm90b2NvbDo6UnVudGltZTo6S2V5UGF0aDo6VHlwZT4oY29uc3QgU3RyaW5n
JiBwcm90b2NvbFN0cmluZykKIHsKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNvbnN0YW50VmFs
dWVzW10gPSB7Ci0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6
S2V5UGF0aDo6VHlwZTo6TnVsbCwKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29s
OjpSdW50aW1lOjpLZXlQYXRoOjpUeXBlOjpTdHJpbmcsCi0gICAgICAgIChzaXplX3QpSW5zcGVj
dG9yOjpQcm90b2NvbDo6UnVudGltZTo6S2V5UGF0aDo6VHlwZTo6QXJyYXksCisgICAgICAgIChz
aXplX3QpUHJvdG9jb2w6OlJ1bnRpbWU6OktleVBhdGg6OlR5cGU6Ok51bGwsCisgICAgICAgIChz
aXplX3QpUHJvdG9jb2w6OlJ1bnRpbWU6OktleVBhdGg6OlR5cGU6OlN0cmluZywKKyAgICAgICAg
KHNpemVfdClQcm90b2NvbDo6UnVudGltZTo6S2V5UGF0aDo6VHlwZTo6QXJyYXksCiAgICAgfTsK
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDM7ICsraSkKICAgICAgICAgaWYgKHByb3RvY29s
U3RyaW5nID09IGVudW1fY29uc3RhbnRfdmFsdWVzW2NvbnN0YW50VmFsdWVzW2ldXSkKLSAgICAg
ICAgICAgIHJldHVybiAoSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6S2V5UGF0aDo6VHlw
ZSljb25zdGFudFZhbHVlc1tpXTsKKyAgICAgICAgICAgIHJldHVybiAoUHJvdG9jb2w6OlJ1bnRp
bWU6OktleVBhdGg6OlR5cGUpY29uc3RhbnRWYWx1ZXNbaV07CiAKICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3Nob3VsZC1zdHJpcC1jb21tZW50cy5qc29uLXJlc3VsdCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9z
aG91bGQtc3RyaXAtY29tbWVudHMuanNvbi1yZXN1bHQKaW5kZXggMzQ4YWNlOTNiYWIwOTQ3ZGFm
ODViNDVmNTljOWZjYWE2NzAyZGUwMC4uMDBhYTM2ZmEzZDAyNDkxM2M1YjhkMjczODExZGE1YTAx
NTQ4MzEyOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2V4cGVjdGVkL3Nob3VsZC1zdHJpcC1jb21tZW50cy5qc29uLXJlc3VsdAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQv
c2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpzb24tcmVzdWx0CkBAIC02Myw3ICs2Myw3IEBACiAKICNp
ZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIAotI2luY2x1ZGUgIlRl
c3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CiAjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KIApAQCAtMTE5
LDExICsxMTksMTQgQEAgcHJpdmF0ZToKIAogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMu
aCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5o
PgorI2luY2x1ZGUgPHR1cGxlPgorI2luY2x1ZGUgPHd0Zi9FeHBlY3RlZC5oPgorI2luY2x1ZGUg
PHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1l
c3BhY2UgSW5zcGVjdG9yIHsKIAotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKIAogCiAK
QEAgLTE2NCw5ICsxNjcsNyBAQCB0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKICNpbmNsdWRl
ICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9J
bnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CiAj
aW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAjaW5j
bHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgpAQCAtMjE0LDYgKzIxNSw3
IEBAIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0
cy5oIgogI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFs
Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0
b3IgewpAQCAtMjU3LDcgKzI1OSw2IEBAIGNsYXNzIEZyb250ZW5kUm91dGVyOwogI2luY2x1ZGUg
IlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9J
bnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
IAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKQEAgLTI5OCw3ICsyOTksOSBAQCBuYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yUHJvdG9jb2xUeXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5j
bHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKQEAg
LTM1Miw4ICszNTUsNyBAQCBuYW1lc3BhY2UgUHJvdG9jb2wgewogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKIAotI2luY2x1ZGUgPHd0Zi9PcHRp
b25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvQXNz
ZXJ0aW9ucy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVj
bGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0
aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbi1yZXN1bHQKaW5kZXggNzljYjk4NTQ1OWY4
ODI0NTY3N2M1ZTNjMjYwNWY3MzQ0ZTExNmJmYy4uMzRiMWFjYmJjYWVjODEyZDg0ZDE2OWZlM2Iy
YjgyNzI1NjdhYmQ0MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRp
dmUtdHlwZS5qc29uLXJlc3VsdAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2
ZS10eXBlLmpzb24tcmVzdWx0CkBAIC02Myw3ICs2Myw3IEBACiAKICNpZiBFTkFCTEUoSU5TUEVD
VE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIAotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVz
LmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KIApAQCAtMTE5LDExICsxMTksMTQgQEAg
cHJpdmF0ZToKIAogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHR1
cGxlPgorI2luY2x1ZGUgPHd0Zi9FeHBlY3RlZC5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5o
PgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9y
IHsKIAotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKIAogCiAKQEAgLTE2NCw5ICsxNjcs
NyBAQCB0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKICNpbmNsdWRlICJUZXN0QmFja2VuZERp
c3BhdGNoZXJzLmgiCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVu
ZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CiAjaW5jbHVkZSA8d3RmL05l
dmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiAjaWYgRU5B
QkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAjaW5jbHVkZSAiVGVzdEFsdGVy
bmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgpAQCAtMjE0LDYgKzIxNSw3IEBAIG5hbWVzcGFjZSBJ
bnNwZWN0b3IgewogCiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUg
PHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewpAQCAtMjU3LDcg
KzI1OSw2IEBAIGNsYXNzIEZyb250ZW5kUm91dGVyOwogI2luY2x1ZGUgIlRlc3RGcm9udGVuZERp
c3BhdGNoZXJzLmgiCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVu
ZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogbmFtZXNwYWNlIElu
c3BlY3RvciB7CiAKQEAgLTI5OCw3ICsyOTksOSBAQCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKICNw
cmFnbWEgb25jZQogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xU
eXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL0pTT05W
YWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKQEAgLTM1Nyw4ICszNjAsNyBA
QCB1c2luZyBSZW1vdGVPYmplY3RJZCA9IGludDsKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAKLSNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4K
LSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMu
aD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9u
LWFycmF5LXR5cGUuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24t
cmVzdWx0CmluZGV4IGQ4ODgwYzYzZTMzNzhjNWNmZTMwOGNhZmRmODRjYzk4NzQ5MmJiZmMuLjk0
MGYxNTgwYmRjMWQ5YmNhNDQwMTQ3NDE1MmEyM2JiMjU0YjE5MGYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRl
Y2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbi1yZXN1bHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tYXJy
YXktdHlwZS5qc29uLXJlc3VsdApAQCAtNjgsNyArNjgsNyBAQCBJbnNwZWN0b3JCYWNrZW5kLmFj
dGl2YXRlRG9tYWluKCJEZWJ1Z2dlciIsIG51bGwpOwogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9B
TFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgor
I2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CiAKQEAgLTEyNCwxMSArMTI0LDE0IEBAIHByaXZh
dGU6CiAKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx0dXBsZT4K
KyNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAK
LXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCiAKIAogCkBAIC0xNjksOSArMTcyLDcgQEAg
dHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiAjaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRj
aGVycy5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0
ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRl
c3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogI2lmIEVOQUJMRShJ
TlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVC
YWNrZW5kRGlzcGF0Y2hlcnMuaCIKQEAgLTIxOSw2ICsyMjAsNyBAQCBuYW1lc3BhY2UgSW5zcGVj
dG9yIHsKIAogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDx3dGYv
SlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKQEAgLTI2Miw3ICsyNjQs
NiBAQCBjbGFzcyBGcm9udGVuZFJvdXRlcjsKICNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRj
aGVycy5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0
ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0
b3IgewogCkBAIC0zMDMsNyArMzA0LDkgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiAjcHJhZ21h
IG9uY2UKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMu
aD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVz
Lmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC0zMzEsNyArMzM0LDcgQEAgdXNp
bmcgTHVja3lOdW1iZXJzID0gSlNPTjo6QXJyYXlPZjxpbnQ+OwogdXNpbmcgQmFieU5hbWVzID0g
SlNPTjo6QXJyYXlPZjxTdHJpbmc+OwogdXNpbmcgTmV3T2JqZWN0cyA9IEpTT046OkFycmF5T2Y8
aW50PjsKIHVzaW5nIE9sZE9iamVjdHMgPSBKU09OOjpBcnJheU9mPGludD47Ci11c2luZyBTdG9w
UmVhc29ucyA9IEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OlJl
YXNvbj47Cit1c2luZyBTdG9wUmVhc29ucyA9IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkRlYnVn
Z2VyOjpSZWFzb24+OwogfSAvLyBSdW50aW1lCiAvLyBFbmQgb2YgdHlwZWRlZnMuCiAKQEAgLTM2
NSw3ICszNjgsNyBAQCBPcHRpb25hbDxQcm90b2NvbEVudW1UeXBlPiBwYXJzZUVudW1WYWx1ZUZy
b21TdHJpbmcoY29uc3QgU3RyaW5nJik7CiAKIC8vIEVudW1zIGluIHRoZSAnRGVidWdnZXInIERv
bWFpbgogdGVtcGxhdGU8PgotT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6
OlJlYXNvbj4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRl
YnVnZ2VyOjpSZWFzb24+KGNvbnN0IFN0cmluZyYpOworT3B0aW9uYWw8UHJvdG9jb2w6OkRlYnVn
Z2VyOjpSZWFzb24+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxQcm90b2NvbDo6RGVidWdnZXI6
OlJlYXNvbj4oY29uc3QgU3RyaW5nJik7CiAKIH0gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCiAK
QEAgLTQxNyw4ICs0MjAsNyBAQCBzdHJ1Y3QgRGVmYXVsdEhhc2g8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6RGVidWdnZXI6OlJlYXNvbj4gOiBJbnRIYXNoPEluc3BlY3Rvcjo6UAogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKIAotI2luY2x1ZGUgPHd0
Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3
dGYvQXNzZXJ0aW9ucy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtNDM5LDE2ICs0
NDEsMTYgQEAgU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKSB7CiAvLyBFbnVt
cyBpbiB0aGUgJ0RlYnVnZ2VyJyBEb21haW4KIAogdGVtcGxhdGU8PgotT3B0aW9uYWw8SW5zcGVj
dG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OlJlYXNvbj4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5n
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpSZWFzb24+KGNvbnN0IFN0cmluZyYgcHJv
dG9jb2xTdHJpbmcpCitPcHRpb25hbDxQcm90b2NvbDo6RGVidWdnZXI6OlJlYXNvbj4gcGFyc2VF
bnVtVmFsdWVGcm9tU3RyaW5nPFByb3RvY29sOjpEZWJ1Z2dlcjo6UmVhc29uPihjb25zdCBTdHJp
bmcmIHByb3RvY29sU3RyaW5nKQogewogICAgIHN0YXRpYyBjb25zdCBzaXplX3QgY29uc3RhbnRW
YWx1ZXNbXSA9IHsKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dl
cjo6UmVhc29uOjpEaWVkLAotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRl
YnVnZ2VyOjpSZWFzb246OkZhaW50ZWQsCi0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90
b2NvbDo6RGVidWdnZXI6OlJlYXNvbjo6SHVuZ3J5LAorICAgICAgICAoc2l6ZV90KVByb3RvY29s
OjpEZWJ1Z2dlcjo6UmVhc29uOjpEaWVkLAorICAgICAgICAoc2l6ZV90KVByb3RvY29sOjpEZWJ1
Z2dlcjo6UmVhc29uOjpGYWludGVkLAorICAgICAgICAoc2l6ZV90KVByb3RvY29sOjpEZWJ1Z2dl
cjo6UmVhc29uOjpIdW5ncnksCiAgICAgfTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDM7
ICsraSkKICAgICAgICAgaWYgKHByb3RvY29sU3RyaW5nID09IGVudW1fY29uc3RhbnRfdmFsdWVz
W2NvbnN0YW50VmFsdWVzW2ldXSkKLSAgICAgICAgICAgIHJldHVybiAoSW5zcGVjdG9yOjpQcm90
b2NvbDo6RGVidWdnZXI6OlJlYXNvbiljb25zdGFudFZhbHVlc1tpXTsKKyAgICAgICAgICAgIHJl
dHVybiAoUHJvdG9jb2w6OkRlYnVnZ2VyOjpSZWFzb24pY29uc3RhbnRWYWx1ZXNbaV07CiAKICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tZW51
bS10eXBlLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24tcmVzdWx0
CmluZGV4IDNhMmMyMDUyODMwNDRlMDAwNmIzMzFlZTMxNWIwNDM3YTRmYTViZjkuLjk1MTE2YmM1
MGFiZjI3OTQwNjQ1OTA3MTBmY2QzZTI0NmJmMGM1OGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0
aW9uLWVudW0tdHlwZS5qc29uLXJlc3VsdAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUu
anNvbi1yZXN1bHQKQEAgLTY5LDcgKzY5LDcgQEAgSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURv
bWFpbigiUnVudGltZSIsIG51bGwpOwogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVf
RElTUEFUQ0hFUlMpCiAKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgorI2luY2x1ZGUg
IlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3Rv
ckZyb250ZW5kUm91dGVyLmg+CiAKQEAgLTEyNSwxMSArMTI1LDE0IEBAIHByaXZhdGU6CiAKICNp
bmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx0dXBsZT4KKyNpbmNsdWRl
IDx3dGYvRXhwZWN0ZWQuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKLXR5cGVkZWYg
U3RyaW5nIEVycm9yU3RyaW5nOworCiAKIAogCkBAIC0xNzAsOSArMTczLDcgQEAgdHlwZWRlZiBT
dHJpbmcgRXJyb3JTdHJpbmc7CiAjaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgog
CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNp
bmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5o
PgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogI2lmIEVOQUJMRShJTlNQRUNUT1Jf
QUxURVJOQVRFX0RJU1BBVENIRVJTKQogI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlz
cGF0Y2hlcnMuaCIKQEAgLTIyMCw2ICsyMjEsNyBAQCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAog
I2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDx3dGYvSlNPTlZhbHVl
cy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKQEAgLTI2Myw3ICsyNjUsNiBAQCBjbGFz
cyBGcm9udGVuZFJvdXRlcjsKICNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgog
CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBA
IC0zMDQsNyArMzA1LDkgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiAjcHJhZ21hIG9uY2UKIAog
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KLSNpbmNs
dWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5j
bHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAK
IG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC0zNjIsOSArMzY1LDkgQEAgT3B0aW9uYWw8UHJv
dG9jb2xFbnVtVHlwZT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYpOwog
CiAvLyBFbnVtcyBpbiB0aGUgJ1J1bnRpbWUnIERvbWFpbgogdGVtcGxhdGU8PgotT3B0aW9uYWw8
SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHM+IHBhcnNlRW51bVZhbHVl
RnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpGYXJtQW5pbWFscz4oY29u
c3QgU3RyaW5nJik7CitPcHRpb25hbDxQcm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHM+IHBh
cnNlRW51bVZhbHVlRnJvbVN0cmluZzxQcm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHM+KGNv
bnN0IFN0cmluZyYpOwogdGVtcGxhdGU8PgotT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6
UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFscz4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlR3b0xlZ2dlZEFuaW1hbHM+KGNvbnN0IFN0cmluZyYp
OworT3B0aW9uYWw8UHJvdG9jb2w6OlJ1bnRpbWU6OlR3b0xlZ2dlZEFuaW1hbHM+IHBhcnNlRW51
bVZhbHVlRnJvbVN0cmluZzxQcm90b2NvbDo6UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFscz4oY29u
c3QgU3RyaW5nJik7CiAKIH0gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCiAKQEAgLTQxOCw4ICs0
MjEsNyBAQCBzdHJ1Y3QgRGVmYXVsdEhhc2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6
VHdvTGVnZ2VkQW5pbWFscz4gOiBJbnRIYXNoPElucwogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKIAotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5o
PgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9u
cy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtNDQ0LDMzICs0NDYsMzMgQEAgU3Ry
aW5nIGdldEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKSB7CiAvLyBFbnVtcyBpbiB0aGUgJ1J1
bnRpbWUnIERvbWFpbgogCiB0ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29s
OjpSdW50aW1lOjpGYXJtQW5pbWFscz4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkZhcm1BbmltYWxzPihjb25zdCBTdHJpbmcmIHByb3RvY29s
U3RyaW5nKQorT3B0aW9uYWw8UHJvdG9jb2w6OlJ1bnRpbWU6OkZhcm1BbmltYWxzPiBwYXJzZUVu
dW1WYWx1ZUZyb21TdHJpbmc8UHJvdG9jb2w6OlJ1bnRpbWU6OkZhcm1BbmltYWxzPihjb25zdCBT
dHJpbmcmIHByb3RvY29sU3RyaW5nKQogewogICAgIHN0YXRpYyBjb25zdCBzaXplX3QgY29uc3Rh
bnRWYWx1ZXNbXSA9IHsKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50
aW1lOjpGYXJtQW5pbWFsczo6UGlncywKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3Rv
Y29sOjpSdW50aW1lOjpGYXJtQW5pbWFsczo6Q293cywKLSAgICAgICAgKHNpemVfdClJbnNwZWN0
b3I6OlByb3RvY29sOjpSdW50aW1lOjpGYXJtQW5pbWFsczo6Q2F0cywKLSAgICAgICAgKHNpemVf
dClJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpGYXJtQW5pbWFsczo6SGVucywKKyAgICAg
ICAgKHNpemVfdClQcm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHM6OlBpZ3MsCisgICAgICAg
IChzaXplX3QpUHJvdG9jb2w6OlJ1bnRpbWU6OkZhcm1BbmltYWxzOjpDb3dzLAorICAgICAgICAo
c2l6ZV90KVByb3RvY29sOjpSdW50aW1lOjpGYXJtQW5pbWFsczo6Q2F0cywKKyAgICAgICAgKHNp
emVfdClQcm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHM6OkhlbnMsCiAgICAgfTsKICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IDQ7ICsraSkKICAgICAgICAgaWYgKHByb3RvY29sU3RyaW5n
ID09IGVudW1fY29uc3RhbnRfdmFsdWVzW2NvbnN0YW50VmFsdWVzW2ldXSkKLSAgICAgICAgICAg
IHJldHVybiAoSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHMpY29uc3Rh
bnRWYWx1ZXNbaV07CisgICAgICAgICAgICByZXR1cm4gKFByb3RvY29sOjpSdW50aW1lOjpGYXJt
QW5pbWFscyljb25zdGFudFZhbHVlc1tpXTsKIAogICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiB9
CiAKIHRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlR3
b0xlZ2dlZEFuaW1hbHM+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpSdW50aW1lOjpUd29MZWdnZWRBbmltYWxzPihjb25zdCBTdHJpbmcmIHByb3RvY29sU3Ry
aW5nKQorT3B0aW9uYWw8UHJvdG9jb2w6OlJ1bnRpbWU6OlR3b0xlZ2dlZEFuaW1hbHM+IHBhcnNl
RW51bVZhbHVlRnJvbVN0cmluZzxQcm90b2NvbDo6UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFscz4o
Y29uc3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKIHsKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90
IGNvbnN0YW50VmFsdWVzW10gPSB7Ci0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2Nv
bDo6UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFsczo6RHVja3MsCi0gICAgICAgIChzaXplX3QpSW5z
cGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFsczo6SGVucywKLSAgICAg
ICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpUd29MZWdnZWRBbmltYWxz
OjpDcm93cywKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpU
d29MZWdnZWRBbmltYWxzOjpGbGFtaW5nb3MsCisgICAgICAgIChzaXplX3QpUHJvdG9jb2w6OlJ1
bnRpbWU6OlR3b0xlZ2dlZEFuaW1hbHM6OkR1Y2tzLAorICAgICAgICAoc2l6ZV90KVByb3RvY29s
OjpSdW50aW1lOjpUd29MZWdnZWRBbmltYWxzOjpIZW5zLAorICAgICAgICAoc2l6ZV90KVByb3Rv
Y29sOjpSdW50aW1lOjpUd29MZWdnZWRBbmltYWxzOjpDcm93cywKKyAgICAgICAgKHNpemVfdClQ
cm90b2NvbDo6UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFsczo6RmxhbWluZ29zLAogICAgIH07CiAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCA0OyArK2kpCiAgICAgICAgIGlmIChwcm90b2NvbFN0
cmluZyA9PSBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb25zdGFudFZhbHVlc1tpXV0pCi0gICAgICAg
ICAgICByZXR1cm4gKEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlR3b0xlZ2dlZEFuaW1h
bHMpY29uc3RhbnRWYWx1ZXNbaV07CisgICAgICAgICAgICByZXR1cm4gKFByb3RvY29sOjpSdW50
aW1lOjpUd29MZWdnZWRBbmltYWxzKWNvbnN0YW50VmFsdWVzW2ldOwogCiAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpz
b24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbi1yZXN1bHQKaW5kZXgg
MzI4ZmVkMjNkYzRjYTdmMTg4NTkwYjYzNDRkNWJmN2U0NzNkZGMwMy4uYmE5ZjE3YzYyNTBkY2Uw
NjhjZjk0NjU1OTQ3MGRkNDViNjE3NzQwNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tb2Jq
ZWN0LXR5cGUuanNvbi1yZXN1bHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNv
bi1yZXN1bHQKQEAgLTcwLDcgKzcwLDcgQEAgSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFp
bigiRGF0YWJhc2UiLCBudWxsKTsKIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJ
U1BBVENIRVJTKQogCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKKyNpbmNsdWRlICJU
ZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXIuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JG
cm9udGVuZFJvdXRlci5oPgogCkBAIC0xMjYsMTEgKzEyNiwxNCBAQCBwcml2YXRlOgogCiAjaW5j
bHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0lu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8dHVwbGU+CisjaW5jbHVkZSA8
d3RmL0V4cGVjdGVkLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCi10eXBlZGVmIFN0
cmluZyBFcnJvclN0cmluZzsKKwogCiAKIApAQCAtMTcxLDkgKzE3NCw3IEBAIHR5cGVkZWYgU3Ry
aW5nIEVycm9yU3RyaW5nOwogI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKIAog
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5j
bHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4K
LSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FM
VEVSTkFURV9ESVNQQVRDSEVSUykKICNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3Bh
dGNoZXJzLmgiCkBAIC0yMjEsNiArMjIyLDcgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKICNp
bmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMu
aD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CkBAIC0yNjQsNyArMjY2LDYgQEAgY2xhc3Mg
RnJvbnRlbmRSb3V0ZXI7CiAjaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKIAog
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5j
bHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAt
MzA1LDcgKzMwNiw5IEBAIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogI3ByYWdtYSBvbmNlCiAKICNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+Ci0jaW5jbHVk
ZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1
ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBu
YW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtMzMzLDcgKzMzNiw3IEBAIGNsYXNzIFBhcmFtZXRl
ckJ1bmRsZTsKIAogLy8gVHlwZWRlZnMuCiBuYW1lc3BhY2UgRGF0YWJhc2UgewotdXNpbmcgRXJy
b3JMaXN0ID0gSlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJy
b3I+OwordXNpbmcgRXJyb3JMaXN0ID0gSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6RGF0YWJhc2U6
OkVycm9yPjsKIH0gLy8gRGF0YWJhc2UKIC8vIEVuZCBvZiB0eXBlZGVmcy4KIApAQCAtMzUxLDcg
KzM1NCw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFN0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1
ZShUIGVudW1WYWx1ZSkKIG5hbWVzcGFjZSBEYXRhYmFzZSB7CiAKIC8qIERhdGFiYXNlIGVycm9y
LiAqLwotY2xhc3MgRXJyb3IgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7CitjbGFzcyBFcnJv
ciBmaW5hbCA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKIHB1YmxpYzoKICAgICBlbnVtIHsK
ICAgICAgICAgTm9GaWVsZHNTZXQgPSAwLApAQCAtMzc4LDE3ICszODEsMTcgQEAgcHVibGljOgog
ICAgICAgICBmcmllbmQgY2xhc3MgRXJyb3I7CiAgICAgcHVibGljOgogCi0gICAgICAgIEJ1aWxk
ZXI8U1RBVEUgfCBNZXNzYWdlU2V0PiYgc2V0TWVzc2FnZShjb25zdCBTdHJpbmcmIHZhbHVlKQor
ICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTWVzc2FnZVNldD4mIHNldE1lc3NhZ2UoY29uc3QgU3Ry
aW5nJiBpbl9tZXNzYWdlKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCgh
KFNUQVRFICYgTWVzc2FnZVNldCksIHByb3BlcnR5X21lc3NhZ2VfYWxyZWFkeV9zZXQpOwotICAg
ICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibWVzc2FnZSJfcywgdmFsdWUpOworICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibWVzc2FnZSJfcywgaW5fbWVzc2FnZSk7CiAgICAg
ICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE1lc3NhZ2VTZXQ+KCk7CiAgICAgICAgIH0KIAotICAg
ICAgICBCdWlsZGVyPFNUQVRFIHwgQ29kZVNldD4mIHNldENvZGUoaW50IHZhbHVlKQorICAgICAg
ICBCdWlsZGVyPFNUQVRFIHwgQ29kZVNldD4mIHNldENvZGUoaW50IGluX2NvZGUpCiAgICAgICAg
IHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBDb2RlU2V0KSwgcHJvcGVy
dHlfY29kZV9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0SW50ZWdlcigi
Y29kZSJfcywgdmFsdWUpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldEludGVnZXIoImNvZGUi
X3MsIGluX2NvZGUpOwogICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxDb2RlU2V0PigpOwog
ICAgICAgICB9CiAKQEAgLTQyNCwxMyArNDI3LDE0IEBAIGVudW0gY2xhc3MgTW91c2VCdXR0b24g
ewogICAgIFJpZ2h0ID0gMywKIH07IC8vIGVudW0gY2xhc3MgTW91c2VCdXR0b24KIAotY2xhc3Mg
T3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGUgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7CitjbGFz
cyBPcHRpb25hbFBhcmFtZXRlckJ1bmRsZSBmaW5hbCA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNl
IHsKIHB1YmxpYzoKICAgICAvLyBOYW1lZCBhZnRlciBwcm9wZXJ0eSBuYW1lICdkaXJlY3Rpb25h
bGl0eScgd2hpbGUgZ2VuZXJhdGluZyBPcHRpb25hbFBhcmFtZXRlckJ1bmRsZS4KICAgICBlbnVt
IGNsYXNzIERpcmVjdGlvbmFsaXR5IHsKICAgICAgICAgTFRSID0gNCwKICAgICAgICAgUlRMID0g
NSwKICAgICB9OyAvLyBlbnVtIGNsYXNzIERpcmVjdGlvbmFsaXR5CisKICAgICBlbnVtIHsKICAg
ICAgICAgTm9GaWVsZHNTZXQgPSAwLAogICAgICAgICBBbGxGaWVsZHNTZXQgPSAwCkBAIC00NzUs
NTkgKzQ3OSw2MCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0
PihKU09OOjpPYmplY3Q6OmNyZWF0ZSgpKTsKICAgICB9CiAKLSAgICB2b2lkIHNldENvbHVtbk5h
bWVzKFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+IHZhbHVlKQorICAgIHZvaWQgc2V0Q29s
dW1uTmFtZXMoUmVmPEpTT046OkFycmF5T2Y8U3RyaW5nPj4mJiBpbl9vcHRfY29sdW1uTmFtZXMp
CiAgICAgewotICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXRBcnJheSgiY29sdW1uTmFtZXMi
X3MsIFdURk1vdmUodmFsdWUpKTsKKyAgICAgICAgSlNPTjo6T2JqZWN0QmFzZTo6c2V0QXJyYXko
ImNvbHVtbk5hbWVzIl9zLCBXVEZNb3ZlKGluX29wdF9jb2x1bW5OYW1lcykpOwogICAgIH0KIAot
ICAgIHZvaWQgc2V0QnV0dG9ucyhSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpEYXRhYmFzZTo6TW91c2VCdXR0b24+PiB2YWx1ZSkKKyAgICB2b2lkIHNldEJ1dHRvbnMo
UmVmPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbj4+JiYgaW5f
b3B0X2J1dHRvbnMpCiAgICAgewotICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXRBcnJheSgi
YnV0dG9ucyJfcywgV1RGTW92ZSh2YWx1ZSkpOworICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpz
ZXRBcnJheSgiYnV0dG9ucyJfcywgV1RGTW92ZShpbl9vcHRfYnV0dG9ucykpOwogICAgIH0KIAot
ICAgIHZvaWQgc2V0RGlyZWN0aW9uYWxpdHkoRGlyZWN0aW9uYWxpdHkgdmFsdWUpCisgICAgdm9p
ZCBzZXREaXJlY3Rpb25hbGl0eShEaXJlY3Rpb25hbGl0eSBpbl9vcHRfZGlyZWN0aW9uYWxpdHkp
CiAgICAgewotICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXRTdHJpbmcoImRpcmVjdGlvbmFs
aXR5Il9zLCBJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50
VmFsdWUodmFsdWUpKTsKKyAgICAgICAgSlNPTjo6T2JqZWN0QmFzZTo6c2V0U3RyaW5nKCJkaXJl
Y3Rpb25hbGl0eSJfcywgUHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1
ZShpbl9vcHRfZGlyZWN0aW9uYWxpdHkpKTsKICAgICB9CiAKLSAgICB2b2lkIHNldE5vdGVzKGNv
bnN0IFN0cmluZyYgdmFsdWUpCisgICAgdm9pZCBzZXROb3Rlcyhjb25zdCBTdHJpbmcmIGluX29w
dF9ub3RlcykKICAgICB7Ci0gICAgICAgIEpTT046Ok9iamVjdEJhc2U6OnNldFN0cmluZygibm90
ZXMiX3MsIHZhbHVlKTsKKyAgICAgICAgSlNPTjo6T2JqZWN0QmFzZTo6c2V0U3RyaW5nKCJub3Rl
cyJfcywgaW5fb3B0X25vdGVzKTsKICAgICB9CiAKLSAgICB2b2lkIHNldFRpbWVzdGFtcChkb3Vi
bGUgdmFsdWUpCisgICAgdm9pZCBzZXRUaW1lc3RhbXAoZG91YmxlIGluX29wdF90aW1lc3RhbXAp
CiAgICAgewotICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXREb3VibGUoInRpbWVzdGFtcCJf
cywgdmFsdWUpOworICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXREb3VibGUoInRpbWVzdGFt
cCJfcywgaW5fb3B0X3RpbWVzdGFtcCk7CiAgICAgfQogCi0gICAgdm9pZCBzZXRWYWx1ZXMoUmVm
UHRyPEpTT046Ok9iamVjdD4gdmFsdWUpCisgICAgdm9pZCBzZXRWYWx1ZXMoUmVmPEpTT046Ok9i
amVjdD4mJiBpbl9vcHRfdmFsdWVzKQogICAgIHsKLSAgICAgICAgSlNPTjo6T2JqZWN0QmFzZTo6
c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIFdURk1vdmUodmFsdWUpKTsKKyAgICAgICAgSlNPTjo6T2Jq
ZWN0QmFzZTo6c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIFdURk1vdmUoaW5fb3B0X3ZhbHVlcykpOwog
ICAgIH0KIAotICAgIHZvaWQgc2V0UGF5bG9hZChSZWZQdHI8SlNPTjo6VmFsdWU+IHZhbHVlKQor
ICAgIHZvaWQgc2V0UGF5bG9hZChSZWY8SlNPTjo6VmFsdWU+JiYgaW5fb3B0X3BheWxvYWQpCiAg
ICAgewotICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXRWYWx1ZSgicGF5bG9hZCJfcywgV1RG
TW92ZSh2YWx1ZSkpOworICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXRWYWx1ZSgicGF5bG9h
ZCJfcywgV1RGTW92ZShpbl9vcHRfcGF5bG9hZCkpOwogICAgIH0KIAotICAgIHZvaWQgc2V0RXJy
b3IoUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4gdmFsdWUpCisg
ICAgdm9pZCBzZXRFcnJvcihSZWY8UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4mJiBpbl9vcHRf
ZXJyb3IpCiAgICAgewotICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXRPYmplY3QoImVycm9y
Il9zLCBXVEZNb3ZlKHZhbHVlKSk7CisgICAgICAgIEpTT046Ok9iamVjdEJhc2U6OnNldE9iamVj
dCgiZXJyb3IiX3MsIFdURk1vdmUoaW5fb3B0X2Vycm9yKSk7CiAgICAgfQogCi0gICAgdm9pZCBz
ZXRFcnJvckxpc3QoUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvckxp
c3Q+IHZhbHVlKQorICAgIHZvaWQgc2V0RXJyb3JMaXN0KFJlZjxQcm90b2NvbDo6RGF0YWJhc2U6
OkVycm9yTGlzdD4mJiBpbl9vcHRfZXJyb3JMaXN0KQogICAgIHsKLSAgICAgICAgSlNPTjo6T2Jq
ZWN0QmFzZTo6c2V0QXJyYXkoImVycm9yTGlzdCJfcywgV1RGTW92ZSh2YWx1ZSkpOworICAgICAg
ICBKU09OOjpPYmplY3RCYXNlOjpzZXRBcnJheSgiZXJyb3JMaXN0Il9zLCBXVEZNb3ZlKGluX29w
dF9lcnJvckxpc3QpKTsKICAgICB9CiB9OwogCi1jbGFzcyBQYXJhbWV0ZXJCdW5kbGUgOiBwdWJs
aWMgSlNPTjo6T2JqZWN0QmFzZSB7CitjbGFzcyBQYXJhbWV0ZXJCdW5kbGUgZmluYWwgOiBwdWJs
aWMgSlNPTjo6T2JqZWN0QmFzZSB7CiBwdWJsaWM6CiAgICAgLy8gTmFtZWQgYWZ0ZXIgcHJvcGVy
dHkgbmFtZSAnZGlyZWN0aW9uYWxpdHknIHdoaWxlIGdlbmVyYXRpbmcgUGFyYW1ldGVyQnVuZGxl
LgogICAgIGVudW0gY2xhc3MgRGlyZWN0aW9uYWxpdHkgewogICAgICAgICBMVFIgPSA0LAogICAg
ICAgICBSVEwgPSA1LAogICAgIH07IC8vIGVudW0gY2xhc3MgRGlyZWN0aW9uYWxpdHkKKwogICAg
IGVudW0gewogICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCiAgICAgICAgIENvbHVtbk5hbWVzU2V0
ID0gMSA8PCAwLApAQCAtNTYwLDY2ICs1NjUsNjYgQEAgcHVibGljOgogICAgICAgICBmcmllbmQg
Y2xhc3MgUGFyYW1ldGVyQnVuZGxlOwogICAgIHB1YmxpYzoKIAotICAgICAgICBCdWlsZGVyPFNU
QVRFIHwgQ29sdW1uTmFtZXNTZXQ+JiBzZXRDb2x1bW5OYW1lcyhSZWZQdHI8SlNPTjo6QXJyYXlP
ZjxTdHJpbmc+PiB2YWx1ZSkKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IENvbHVtbk5hbWVzU2V0
PiYgc2V0Q29sdW1uTmFtZXMoUmVmPEpTT046OkFycmF5T2Y8U3RyaW5nPj4mJiBpbl9jb2x1bW5O
YW1lcykKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIENv
bHVtbk5hbWVzU2V0KSwgcHJvcGVydHlfY29sdW1uTmFtZXNfYWxyZWFkeV9zZXQpOwotICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgdmFsdWUpOworICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgV1RGTW92ZShpbl9jb2x1
bW5OYW1lcykpOwogICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxDb2x1bW5OYW1lc1NldD4o
KTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBCdXR0b25zU2V0PiYgc2V0
QnV0dG9ucyhSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFz
ZTo6TW91c2VCdXR0b24+PiB2YWx1ZSkKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IEJ1dHRvbnNT
ZXQ+JiBzZXRCdXR0b25zKFJlZjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpEYXRhYmFzZTo6TW91
c2VCdXR0b24+PiYmIGluX2J1dHRvbnMpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKCEoU1RBVEUgJiBCdXR0b25zU2V0KSwgcHJvcGVydHlfYnV0dG9uc19hbHJlYWR5X3Nl
dCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0QXJyYXkoImJ1dHRvbnMiX3MsIHZhbHVlKTsK
KyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRBcnJheSgiYnV0dG9ucyJfcywgV1RGTW92ZShpbl9i
dXR0b25zKSk7CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEJ1dHRvbnNTZXQ+KCk7CiAg
ICAgICAgIH0KIAotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgRGlyZWN0aW9uYWxpdHlTZXQ+JiBz
ZXREaXJlY3Rpb25hbGl0eShEaXJlY3Rpb25hbGl0eSB2YWx1ZSkKKyAgICAgICAgQnVpbGRlcjxT
VEFURSB8IERpcmVjdGlvbmFsaXR5U2V0PiYgc2V0RGlyZWN0aW9uYWxpdHkoRGlyZWN0aW9uYWxp
dHkgaW5fZGlyZWN0aW9uYWxpdHkpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKCEoU1RBVEUgJiBEaXJlY3Rpb25hbGl0eVNldCksIHByb3BlcnR5X2RpcmVjdGlvbmFsaXR5
X2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoImRpcmVjdGlv
bmFsaXR5Il9zLCBJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0
YW50VmFsdWUodmFsdWUpKTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoImRpcmVj
dGlvbmFsaXR5Il9zLCBQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVl
KGluX2RpcmVjdGlvbmFsaXR5KSk7CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPERpcmVj
dGlvbmFsaXR5U2V0PigpOwogICAgICAgICB9CiAKLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IE5v
dGVzU2V0PiYgc2V0Tm90ZXMoY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICAgICAgQnVpbGRlcjxT
VEFURSB8IE5vdGVzU2V0PiYgc2V0Tm90ZXMoY29uc3QgU3RyaW5nJiBpbl9ub3RlcykKICAgICAg
ICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE5vdGVzU2V0KSwgcHJv
cGVydHlfbm90ZXNfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmlu
Zygibm90ZXMiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm5v
dGVzIl9zLCBpbl9ub3Rlcyk7CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE5vdGVzU2V0
PigpOwogICAgICAgICB9CiAKLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IFRpbWVzdGFtcFNldD4m
IHNldFRpbWVzdGFtcChkb3VibGUgdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBUaW1l
c3RhbXBTZXQ+JiBzZXRUaW1lc3RhbXAoZG91YmxlIGluX3RpbWVzdGFtcCkKICAgICAgICAgewog
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFRpbWVzdGFtcFNldCksIHByb3Bl
cnR5X3RpbWVzdGFtcF9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0RG91
YmxlKCJ0aW1lc3RhbXAiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXREb3Vi
bGUoInRpbWVzdGFtcCJfcywgaW5fdGltZXN0YW1wKTsKICAgICAgICAgICAgIHJldHVybiBjYXN0
U3RhdGU8VGltZXN0YW1wU2V0PigpOwogICAgICAgICB9CiAKLSAgICAgICAgQnVpbGRlcjxTVEFU
RSB8IFZhbHVlc1NldD4mIHNldFZhbHVlcyhSZWZQdHI8SlNPTjo6T2JqZWN0PiB2YWx1ZSkKKyAg
ICAgICAgQnVpbGRlcjxTVEFURSB8IFZhbHVlc1NldD4mIHNldFZhbHVlcyhSZWY8SlNPTjo6T2Jq
ZWN0PiYmIGluX3ZhbHVlcykKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
IShTVEFURSAmIFZhbHVlc1NldCksIHByb3BlcnR5X3ZhbHVlc19hbHJlYWR5X3NldCk7Ci0gICAg
ICAgICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIHZhbHVlKTsKKyAgICAgICAg
ICAgIG1fcmVzdWx0LT5zZXRPYmplY3QoInZhbHVlcyJfcywgV1RGTW92ZShpbl92YWx1ZXMpKTsK
ICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VmFsdWVzU2V0PigpOwogICAgICAgICB9CiAK
LSAgICAgICAgQnVpbGRlcjxTVEFURSB8IFBheWxvYWRTZXQ+JiBzZXRQYXlsb2FkKFJlZlB0cjxK
U09OOjpWYWx1ZT4gdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBQYXlsb2FkU2V0PiYg
c2V0UGF5bG9hZChSZWY8SlNPTjo6VmFsdWU+JiYgaW5fcGF5bG9hZCkKICAgICAgICAgewogICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFBheWxvYWRTZXQpLCBwcm9wZXJ0eV9w
YXlsb2FkX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRWYWx1ZSgicGF5
bG9hZCJfcywgdmFsdWUpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldFZhbHVlKCJwYXlsb2Fk
Il9zLCBXVEZNb3ZlKGluX3BheWxvYWQpKTsKICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8
UGF5bG9hZFNldD4oKTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBFcnJv
clNldD4mIHNldEVycm9yKFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJy
b3I+IHZhbHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRFIHwgRXJyb3JTZXQ+JiBzZXRFcnJvcihS
ZWY8UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4mJiBpbl9lcnJvcikKICAgICAgICAgewogICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEVycm9yU2V0KSwgcHJvcGVydHlfZXJy
b3JfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldE9iamVjdCgiZXJyb3Ii
X3MsIHZhbHVlKTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRPYmplY3QoImVycm9yIl9zLCBX
VEZNb3ZlKGluX2Vycm9yKSk7CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEVycm9yU2V0
PigpOwogICAgICAgICB9CiAKLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IEVycm9yTGlzdFNldD4m
IHNldEVycm9yTGlzdChSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9y
TGlzdD4gdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBFcnJvckxpc3RTZXQ+JiBzZXRF
cnJvckxpc3QoUmVmPFByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3JMaXN0PiYmIGluX2Vycm9yTGlz
dCkKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEVycm9y
TGlzdFNldCksIHByb3BlcnR5X2Vycm9yTGlzdF9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBt
X3Jlc3VsdC0+c2V0QXJyYXkoImVycm9yTGlzdCJfcywgdmFsdWUpOworICAgICAgICAgICAgbV9y
ZXN1bHQtPnNldEFycmF5KCJlcnJvckxpc3QiX3MsIFdURk1vdmUoaW5fZXJyb3JMaXN0KSk7CiAg
ICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEVycm9yTGlzdFNldD4oKTsKICAgICAgICAgfQog
CkBAIC02NTUsNyArNjYwLDcgQEAgcHVibGljOgogfTsKIAogLyogQ29uZmxpY3RlZCBuYW1lcyBt
YXkgY2F1c2UgZ2VuZXJhdGVkIGdldHRlcnMvc2V0dGVycyB0byBjbGFzaCB3aXRoIGJ1aWx0LWlu
IEluc3BlY3Rvck9iamVjdCBtZXRob2RzLiAqLwotY2xhc3MgT2JqZWN0V2l0aFByb3BlcnR5TmFt
ZUNvbmZsaWN0cyA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKK2NsYXNzIE9iamVjdFdpdGhQ
cm9wZXJ0eU5hbWVDb25mbGljdHMgZmluYWwgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7CiBw
dWJsaWM6CiAgICAgZW51bSB7CiAgICAgICAgIE5vRmllbGRzU2V0ID0gMCwKQEAgLTY4NSwzOCAr
NjkwLDM4IEBAIHB1YmxpYzoKICAgICAgICAgZnJpZW5kIGNsYXNzIE9iamVjdFdpdGhQcm9wZXJ0
eU5hbWVDb25mbGljdHM7CiAgICAgcHVibGljOgogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBJ
bnRlZ2VyU2V0PiYgc2V0SW50ZWdlcihjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgICAgICBCdWls
ZGVyPFNUQVRFIHwgSW50ZWdlclNldD4mIHNldEludGVnZXIoY29uc3QgU3RyaW5nJiBpbl9pbnRl
Z2VyKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgSW50
ZWdlclNldCksIHByb3BlcnR5X2ludGVnZXJfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9y
ZXN1bHQtPnNldFN0cmluZygiaW50ZWdlciJfcywgdmFsdWUpOworICAgICAgICAgICAgbV9yZXN1
bHQtPnNldFN0cmluZygiaW50ZWdlciJfcywgaW5faW50ZWdlcik7CiAgICAgICAgICAgICByZXR1
cm4gY2FzdFN0YXRlPEludGVnZXJTZXQ+KCk7CiAgICAgICAgIH0KIAotICAgICAgICBCdWlsZGVy
PFNUQVRFIHwgQXJyYXlTZXQ+JiBzZXRBcnJheShjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgICAg
ICBCdWlsZGVyPFNUQVRFIHwgQXJyYXlTZXQ+JiBzZXRBcnJheShjb25zdCBTdHJpbmcmIGluX2Fy
cmF5KQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQXJy
YXlTZXQpLCBwcm9wZXJ0eV9hcnJheV9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3Vs
dC0+c2V0U3RyaW5nKCJhcnJheSJfcywgdmFsdWUpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNl
dFN0cmluZygiYXJyYXkiX3MsIGluX2FycmF5KTsKICAgICAgICAgICAgIHJldHVybiBjYXN0U3Rh
dGU8QXJyYXlTZXQ+KCk7CiAgICAgICAgIH0KIAotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgU3Ry
aW5nU2V0PiYgc2V0U3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCBTdHJpbmdTZXQ+JiBzZXRTdHJpbmcoY29uc3QgU3RyaW5nJiBpbl9zdHJpbmcpCiAg
ICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTdHJpbmdTZXQp
LCBwcm9wZXJ0eV9zdHJpbmdfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNl
dFN0cmluZygic3RyaW5nIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3Ry
aW5nKCJzdHJpbmciX3MsIGluX3N0cmluZyk7CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRl
PFN0cmluZ1NldD4oKTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBWYWx1
ZVNldD4mIHNldFZhbHVlKGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8U1RB
VEUgfCBWYWx1ZVNldD4mIHNldFZhbHVlKGNvbnN0IFN0cmluZyYgaW5fdmFsdWUpCiAgICAgICAg
IHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBWYWx1ZVNldCksIHByb3Bl
cnR5X3ZhbHVlX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmco
InZhbHVlIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ2YWx1
ZSJfcywgaW5fdmFsdWUpOwogICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxWYWx1ZVNldD4o
KTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBPYmplY3RTZXQ+JiBzZXRP
YmplY3QoY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IE9iamVj
dFNldD4mIHNldE9iamVjdChjb25zdCBTdHJpbmcmIGluX29iamVjdCkKICAgICAgICAgewogICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE9iamVjdFNldCksIHByb3BlcnR5X29i
amVjdF9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJvYmpl
Y3QiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm9iamVjdCJf
cywgaW5fb2JqZWN0KTsKICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8T2JqZWN0U2V0Pigp
OwogICAgICAgICB9CiAKQEAgLTc0NywxNyArNzUyLDY2IEBAIHB1YmxpYzoKICAgICB9CiB9Owog
CisvKiBBbiBvcGVuIG9iamVjdCB0aGF0IGRvZXNuJ3QgaGF2ZSBhbnkgcHJlZGVmaW5lZCBmaWVs
ZHMuICovCitjbGFzcyBEdW1teU9iamVjdCBmaW5hbCA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNl
IHsKK3B1YmxpYzoKKyAgICBlbnVtIHsKKyAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAorICAgICAg
ICBBbGxGaWVsZHNTZXQgPSAwCisgICAgfTsKKworICAgIHRlbXBsYXRlPGludCBTVEFURT4KKyAg
ICBjbGFzcyBCdWlsZGVyIHsKKyAgICBwcml2YXRlOgorICAgICAgICBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiBtX3Jlc3VsdDsKKworICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFU
RSB8IFNURVA+JiBjYXN0U3RhdGUoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gKnJl
aW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CisgICAgICAgIH0K
KworICAgICAgICBCdWlsZGVyKFJlZjwvKkR1bW15T2JqZWN0Ki9KU09OOjpPYmplY3Q+JiYgb2Jq
ZWN0KQorICAgICAgICAgICAgOiBtX3Jlc3VsdChXVEZNb3ZlKG9iamVjdCkpCisgICAgICAgIHsK
KyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVy
X2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOworICAgICAgICB9CisgICAgICAgIGZyaWVuZCBj
bGFzcyBEdW1teU9iamVjdDsKKyAgICBwdWJsaWM6CisKKyAgICAgICAgUmVmPER1bW15T2JqZWN0
PiByZWxlYXNlKCkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUg
PT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKKyAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKHNpemVvZihEdW1teU9iamVjdCkgPT0gc2l6ZW9mKEpTT046Ok9iamVjdCksIGNh
bm5vdF9jYXN0KTsKKworICAgICAgICAgICAgUmVmPEpTT046Ok9iamVjdD4ganNvblJlc3VsdCA9
IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7CisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFdU
Rk1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPER1bW15T2JqZWN0Pio+KCZqc29uUmVzdWx0KSk7
CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgfTsKKworICAgIC8q
CisgICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgorICAgICAqIFJlZjxEdW1teU9iamVjdD4g
cmVzdWx0ID0gRHVtbXlPYmplY3Q6OmNyZWF0ZSgpCisgICAgICogICAgIC5yZWxlYXNlKCk7Cisg
ICAgICovCisgICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCisgICAgewor
ICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSlNPTjo6T2JqZWN0OjpjcmVhdGUo
KSk7CisgICAgfQorfTsKKwogfSAvLyBEYXRhYmFzZQogCiBuYW1lc3BhY2UgVGVzdCB7CiAKLWNs
YXNzIFBhcmFtZXRlckJ1bmRsZSA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKK2NsYXNzIFBh
cmFtZXRlckJ1bmRsZSBmaW5hbCA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKIHB1YmxpYzoK
ICAgICAvLyBOYW1lZCBhZnRlciBwcm9wZXJ0eSBuYW1lICdkaXJlY3Rpb25hbGl0eScgd2hpbGUg
Z2VuZXJhdGluZyBQYXJhbWV0ZXJCdW5kbGUuCiAgICAgZW51bSBjbGFzcyBEaXJlY3Rpb25hbGl0
eSB7CiAgICAgICAgIExUUiA9IDQsCiAgICAgICAgIFJUTCA9IDUsCiAgICAgfTsgLy8gZW51bSBj
bGFzcyBEaXJlY3Rpb25hbGl0eQorCiAgICAgZW51bSB7CiAgICAgICAgIE5vRmllbGRzU2V0ID0g
MCwKICAgICAgICAgRGlyZWN0aW9uYWxpdHlTZXQgPSAxIDw8IDAsCkBAIC03ODksNTkgKzg0Myw1
OSBAQCBwdWJsaWM6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBQYXJhbWV0ZXJCdW5kbGU7CiAgICAg
cHVibGljOgogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBEaXJlY3Rpb25hbGl0eVNldD4mIHNl
dERpcmVjdGlvbmFsaXR5KERpcmVjdGlvbmFsaXR5IHZhbHVlKQorICAgICAgICBCdWlsZGVyPFNU
QVRFIHwgRGlyZWN0aW9uYWxpdHlTZXQ+JiBzZXREaXJlY3Rpb25hbGl0eShEaXJlY3Rpb25hbGl0
eSBpbl9kaXJlY3Rpb25hbGl0eSkKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoIShTVEFURSAmIERpcmVjdGlvbmFsaXR5U2V0KSwgcHJvcGVydHlfZGlyZWN0aW9uYWxpdHlf
YWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygiZGlyZWN0aW9u
YWxpdHkiX3MsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29uc3Rh
bnRWYWx1ZSh2YWx1ZSkpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygiZGlyZWN0
aW9uYWxpdHkiX3MsIFByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUo
aW5fZGlyZWN0aW9uYWxpdHkpKTsKICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8RGlyZWN0
aW9uYWxpdHlTZXQ+KCk7CiAgICAgICAgIH0KIAotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQnV0
dG9uc1NldD4mIHNldEJ1dHRvbnMoUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90
b2NvbDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9uPj4gdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8U1RB
VEUgfCBCdXR0b25zU2V0PiYgc2V0QnV0dG9ucyhSZWY8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6
RGF0YWJhc2U6Ok1vdXNlQnV0dG9uPj4mJiBpbl9idXR0b25zKQogICAgICAgICB7CiAgICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQnV0dG9uc1NldCksIHByb3BlcnR5X2J1dHRv
bnNfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldEFycmF5KCJidXR0b25z
Il9zLCB2YWx1ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0QXJyYXkoImJ1dHRvbnMiX3Ms
IFdURk1vdmUoaW5fYnV0dG9ucykpOwogICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxCdXR0
b25zU2V0PigpOwogICAgICAgICB9CiAKLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IENvbHVtbk5h
bWVzU2V0PiYgc2V0Q29sdW1uTmFtZXMoUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4gdmFs
dWUpCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDb2x1bW5OYW1lc1NldD4mIHNldENvbHVtbk5h
bWVzKFJlZjxKU09OOjpBcnJheU9mPFN0cmluZz4+JiYgaW5fY29sdW1uTmFtZXMpCiAgICAgICAg
IHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBDb2x1bW5OYW1lc1NldCks
IHByb3BlcnR5X2NvbHVtbk5hbWVzX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0
LT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIG1fcmVzdWx0
LT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIFdURk1vdmUoaW5fY29sdW1uTmFtZXMpKTsKICAg
ICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Q29sdW1uTmFtZXNTZXQ+KCk7CiAgICAgICAgIH0K
IAotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTm90ZXNTZXQ+JiBzZXROb3Rlcyhjb25zdCBTdHJp
bmcmIHZhbHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTm90ZXNTZXQ+JiBzZXROb3Rlcyhj
b25zdCBTdHJpbmcmIGluX25vdGVzKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FT
U0VSVCghKFNUQVRFICYgTm90ZXNTZXQpLCBwcm9wZXJ0eV9ub3Rlc19hbHJlYWR5X3NldCk7Ci0g
ICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJub3RlcyJfcywgdmFsdWUpOworICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibm90ZXMiX3MsIGluX25vdGVzKTsKICAgICAgICAg
ICAgIHJldHVybiBjYXN0U3RhdGU8Tm90ZXNTZXQ+KCk7CiAgICAgICAgIH0KIAotICAgICAgICBC
dWlsZGVyPFNUQVRFIHwgVGltZXN0YW1wU2V0PiYgc2V0VGltZXN0YW1wKGRvdWJsZSB2YWx1ZSkK
KyAgICAgICAgQnVpbGRlcjxTVEFURSB8IFRpbWVzdGFtcFNldD4mIHNldFRpbWVzdGFtcChkb3Vi
bGUgaW5fdGltZXN0YW1wKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCgh
KFNUQVRFICYgVGltZXN0YW1wU2V0KSwgcHJvcGVydHlfdGltZXN0YW1wX2FscmVhZHlfc2V0KTsK
LSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywgdmFsdWUpOwor
ICAgICAgICAgICAgbV9yZXN1bHQtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCBpbl90aW1lc3Rh
bXApOwogICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxUaW1lc3RhbXBTZXQ+KCk7CiAgICAg
ICAgIH0KIAotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVmFsdWVzU2V0PiYgc2V0VmFsdWVzKFJl
ZlB0cjxKU09OOjpPYmplY3Q+IHZhbHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVmFsdWVz
U2V0PiYgc2V0VmFsdWVzKFJlZjxKU09OOjpPYmplY3Q+JiYgaW5fdmFsdWVzKQogICAgICAgICB7
CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVmFsdWVzU2V0KSwgcHJvcGVy
dHlfdmFsdWVzX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRPYmplY3Qo
InZhbHVlcyJfcywgdmFsdWUpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldE9iamVjdCgidmFs
dWVzIl9zLCBXVEZNb3ZlKGluX3ZhbHVlcykpOwogICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0
ZTxWYWx1ZXNTZXQ+KCk7CiAgICAgICAgIH0KIAotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgUGF5
bG9hZFNldD4mIHNldFBheWxvYWQoUmVmUHRyPEpTT046OlZhbHVlPiB2YWx1ZSkKKyAgICAgICAg
QnVpbGRlcjxTVEFURSB8IFBheWxvYWRTZXQ+JiBzZXRQYXlsb2FkKFJlZjxKU09OOjpWYWx1ZT4m
JiBpbl9wYXlsb2FkKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNU
QVRFICYgUGF5bG9hZFNldCksIHByb3BlcnR5X3BheWxvYWRfYWxyZWFkeV9zZXQpOwotICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCB2YWx1ZSk7CisgICAgICAgICAg
ICBtX3Jlc3VsdC0+c2V0VmFsdWUoInBheWxvYWQiX3MsIFdURk1vdmUoaW5fcGF5bG9hZCkpOwog
ICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxQYXlsb2FkU2V0PigpOwogICAgICAgICB9CiAK
LSAgICAgICAgQnVpbGRlcjxTVEFURSB8IEVycm9yU2V0PiYgc2V0RXJyb3IoUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4gdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCBFcnJvclNldD4mIHNldEVycm9yKFJlZjxQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9y
PiYmIGluX2Vycm9yKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNU
QVRFICYgRXJyb3JTZXQpLCBwcm9wZXJ0eV9lcnJvcl9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAg
ICBtX3Jlc3VsdC0+c2V0T2JqZWN0KCJlcnJvciJfcywgdmFsdWUpOworICAgICAgICAgICAgbV9y
ZXN1bHQtPnNldE9iamVjdCgiZXJyb3IiX3MsIFdURk1vdmUoaW5fZXJyb3IpKTsKICAgICAgICAg
ICAgIHJldHVybiBjYXN0U3RhdGU8RXJyb3JTZXQ+KCk7CiAgICAgICAgIH0KIApAQCAtODg2LDE1
ICs5NDAsMTUgQEAgT3B0aW9uYWw8UHJvdG9jb2xFbnVtVHlwZT4gcGFyc2VFbnVtVmFsdWVGcm9t
U3RyaW5nKGNvbnN0IFN0cmluZyYpOwogCiAvLyBFbnVtcyBpbiB0aGUgJ0RhdGFiYXNlJyBEb21h
aW4KIHRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpN
b3VzZUJ1dHRvbj4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbj4oY29uc3QgU3RyaW5nJik7CitPcHRpb25hbDxQcm90b2Nv
bDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9uPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8UHJvdG9j
b2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbj4oY29uc3QgU3RyaW5nJik7CiB0ZW1wbGF0ZTw+Ci1P
cHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6T3B0aW9uYWxQYXJhbWV0ZXJC
dW5kbGU6OkRpcmVjdGlvbmFsaXR5PiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9y
OjpQcm90b2NvbDo6RGF0YWJhc2U6Ok9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25h
bGl0eT4oY29uc3QgU3RyaW5nJik7CitPcHRpb25hbDxQcm90b2NvbDo6RGF0YWJhc2U6Ok9wdGlv
bmFsUGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eT4gcGFyc2VFbnVtVmFsdWVGcm9tU3Ry
aW5nPFByb3RvY29sOjpEYXRhYmFzZTo6T3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlv
bmFsaXR5Pihjb25zdCBTdHJpbmcmKTsKIHRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRhdGFiYXNlOjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5PiBwYXJz
ZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlBhcmFt
ZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk+KGNvbnN0IFN0cmluZyYpOworT3B0aW9uYWw8UHJv
dG9jb2w6OkRhdGFiYXNlOjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5PiBwYXJzZUVu
dW1WYWx1ZUZyb21TdHJpbmc8UHJvdG9jb2w6OkRhdGFiYXNlOjpQYXJhbWV0ZXJCdW5kbGU6OkRp
cmVjdGlvbmFsaXR5Pihjb25zdCBTdHJpbmcmKTsKIAogLy8gRW51bXMgaW4gdGhlICdUZXN0JyBE
b21haW4KIHRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlBh
cmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJ
bnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5
Pihjb25zdCBTdHJpbmcmKTsKK09wdGlvbmFsPFByb3RvY29sOjpUZXN0OjpQYXJhbWV0ZXJCdW5k
bGU6OkRpcmVjdGlvbmFsaXR5PiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8UHJvdG9jb2w6OlRl
c3Q6OlBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk+KGNvbnN0IFN0cmluZyYpOwogCiB9
IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycwogCkBAIC05NDYsOCArMTAwMCw3IEBAIHN0cnVjdCBE
ZWZhdWx0SGFzaDxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6TW91c2VCdXR0b24+IDog
SW50SGFzaDxJbnNwZWN0CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGVzdFByb3Rv
Y29sT2JqZWN0cy5oIgogCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3Rm
L3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAKIG5hbWVzcGFj
ZSBJbnNwZWN0b3IgewogCkBAIC05NzEsNDUgKzEwMjQsNDUgQEAgU3RyaW5nIGdldEVudW1Db25z
dGFudFZhbHVlKGludCBjb2RlKSB7CiAvLyBFbnVtcyBpbiB0aGUgJ0RhdGFiYXNlJyBEb21haW4K
IAogdGVtcGxhdGU8PgotT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6Ok1v
dXNlQnV0dG9uPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6
RGF0YWJhc2U6Ok1vdXNlQnV0dG9uPihjb25zdCBTdHJpbmcmIHByb3RvY29sU3RyaW5nKQorT3B0
aW9uYWw8UHJvdG9jb2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbj4gcGFyc2VFbnVtVmFsdWVGcm9t
U3RyaW5nPFByb3RvY29sOjpEYXRhYmFzZTo6TW91c2VCdXR0b24+KGNvbnN0IFN0cmluZyYgcHJv
dG9jb2xTdHJpbmcpCiB7CiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBjb25zdGFudFZhbHVlc1td
ID0gewotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpNb3Vz
ZUJ1dHRvbjo6Tm9uZSwKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRh
YmFzZTo6TW91c2VCdXR0b246OkxlZnQsCi0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90
b2NvbDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9uOjpNaWRkbGUsCi0gICAgICAgIChzaXplX3QpSW5z
cGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9uOjpSaWdodCwKKyAgICAgICAg
KHNpemVfdClQcm90b2NvbDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9uOjpOb25lLAorICAgICAgICAo
c2l6ZV90KVByb3RvY29sOjpEYXRhYmFzZTo6TW91c2VCdXR0b246OkxlZnQsCisgICAgICAgIChz
aXplX3QpUHJvdG9jb2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbjo6TWlkZGxlLAorICAgICAgICAo
c2l6ZV90KVByb3RvY29sOjpEYXRhYmFzZTo6TW91c2VCdXR0b246OlJpZ2h0LAogICAgIH07CiAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCA0OyArK2kpCiAgICAgICAgIGlmIChwcm90b2NvbFN0
cmluZyA9PSBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb25zdGFudFZhbHVlc1tpXV0pCi0gICAgICAg
ICAgICByZXR1cm4gKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbilj
b25zdGFudFZhbHVlc1tpXTsKKyAgICAgICAgICAgIHJldHVybiAoUHJvdG9jb2w6OkRhdGFiYXNl
OjpNb3VzZUJ1dHRvbiljb25zdGFudFZhbHVlc1tpXTsKIAogICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CiB9CiAKIHRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFi
YXNlOjpPcHRpb25hbFBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk+IHBhcnNlRW51bVZh
bHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6T3B0aW9uYWxQYXJh
bWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5Pihjb25zdCBTdHJpbmcmIHByb3RvY29sU3RyaW5n
KQorT3B0aW9uYWw8UHJvdG9jb2w6OkRhdGFiYXNlOjpPcHRpb25hbFBhcmFtZXRlckJ1bmRsZTo6
RGlyZWN0aW9uYWxpdHk+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxQcm90b2NvbDo6RGF0YWJh
c2U6Ok9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eT4oY29uc3QgU3RyaW5n
JiBwcm90b2NvbFN0cmluZykKIHsKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNvbnN0YW50VmFs
dWVzW10gPSB7Ci0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6
Ok9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eTo6TFRSLAotICAgICAgICAo
c2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpPcHRpb25hbFBhcmFtZXRlckJ1
bmRsZTo6RGlyZWN0aW9uYWxpdHk6OlJUTCwKKyAgICAgICAgKHNpemVfdClQcm90b2NvbDo6RGF0
YWJhc2U6Ok9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eTo6TFRSLAorICAg
ICAgICAoc2l6ZV90KVByb3RvY29sOjpEYXRhYmFzZTo6T3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU6
OkRpcmVjdGlvbmFsaXR5OjpSVEwsCiAgICAgfTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IDI7ICsraSkKICAgICAgICAgaWYgKHByb3RvY29sU3RyaW5nID09IGVudW1fY29uc3RhbnRfdmFs
dWVzW2NvbnN0YW50VmFsdWVzW2ldXSkKLSAgICAgICAgICAgIHJldHVybiAoSW5zcGVjdG9yOjpQ
cm90b2NvbDo6RGF0YWJhc2U6Ok9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0
eSljb25zdGFudFZhbHVlc1tpXTsKKyAgICAgICAgICAgIHJldHVybiAoUHJvdG9jb2w6OkRhdGFi
YXNlOjpPcHRpb25hbFBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHkpY29uc3RhbnRWYWx1
ZXNbaV07CiAKICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQogCiB0ZW1wbGF0ZTw+Ci1PcHRp
b25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UGFyYW1ldGVyQnVuZGxlOjpEaXJl
Y3Rpb25hbGl0eT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRhdGFiYXNlOjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5Pihjb25zdCBTdHJpbmcm
IHByb3RvY29sU3RyaW5nKQorT3B0aW9uYWw8UHJvdG9jb2w6OkRhdGFiYXNlOjpQYXJhbWV0ZXJC
dW5kbGU6OkRpcmVjdGlvbmFsaXR5PiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8UHJvdG9jb2w6
OkRhdGFiYXNlOjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5Pihjb25zdCBTdHJpbmcm
IHByb3RvY29sU3RyaW5nKQogewogICAgIHN0YXRpYyBjb25zdCBzaXplX3QgY29uc3RhbnRWYWx1
ZXNbXSA9IHsKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6
UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eTo6TFRSLAotICAgICAgICAoc2l6ZV90KUlu
c3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFs
aXR5OjpSVEwsCisgICAgICAgIChzaXplX3QpUHJvdG9jb2w6OkRhdGFiYXNlOjpQYXJhbWV0ZXJC
dW5kbGU6OkRpcmVjdGlvbmFsaXR5OjpMVFIsCisgICAgICAgIChzaXplX3QpUHJvdG9jb2w6OkRh
dGFiYXNlOjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5OjpSVEwsCiAgICAgfTsKICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDI7ICsraSkKICAgICAgICAgaWYgKHByb3RvY29sU3Ry
aW5nID09IGVudW1fY29uc3RhbnRfdmFsdWVzW2NvbnN0YW50VmFsdWVzW2ldXSkKLSAgICAgICAg
ICAgIHJldHVybiAoSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlBhcmFtZXRlckJ1bmRs
ZTo6RGlyZWN0aW9uYWxpdHkpY29uc3RhbnRWYWx1ZXNbaV07CisgICAgICAgICAgICByZXR1cm4g
KFByb3RvY29sOjpEYXRhYmFzZTo6UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eSljb25z
dGFudFZhbHVlc1tpXTsKIAogICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiB9CkBAIC0xMDE3LDE1
ICsxMDcwLDE1IEBAIE9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQYXJh
bWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5PiBwYXJzZUVuCiAvLyBFbnVtcyBpbiB0aGUgJ1Rl
c3QnIERvbWFpbgogCiB0ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpU
ZXN0OjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5PiBwYXJzZUVudW1WYWx1ZUZyb21T
dHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rp
b25hbGl0eT4oY29uc3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKK09wdGlvbmFsPFByb3RvY29s
OjpUZXN0OjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5PiBwYXJzZUVudW1WYWx1ZUZy
b21TdHJpbmc8UHJvdG9jb2w6OlRlc3Q6OlBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk+
KGNvbnN0IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcpCiB7CiAgICAgc3RhdGljIGNvbnN0IHNpemVf
dCBjb25zdGFudFZhbHVlc1tdID0gewotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9j
b2w6OlRlc3Q6OlBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk6OkxUUiwKLSAgICAgICAg
KHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVj
dGlvbmFsaXR5OjpSVEwsCisgICAgICAgIChzaXplX3QpUHJvdG9jb2w6OlRlc3Q6OlBhcmFtZXRl
ckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk6OkxUUiwKKyAgICAgICAgKHNpemVfdClQcm90b2NvbDo6
VGVzdDo6UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eTo6UlRMLAogICAgIH07CiAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCAyOyArK2kpCiAgICAgICAgIGlmIChwcm90b2NvbFN0cmlu
ZyA9PSBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb25zdGFudFZhbHVlc1tpXV0pCi0gICAgICAgICAg
ICByZXR1cm4gKEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlBhcmFtZXRlckJ1bmRsZTo6RGly
ZWN0aW9uYWxpdHkpY29uc3RhbnRWYWx1ZXNbaV07CisgICAgICAgICAgICByZXR1cm4gKFByb3Rv
Y29sOjpUZXN0OjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5KWNvbnN0YW50VmFsdWVz
W2ldOwogCiAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLXJlcXVp
cmluZy1ydW50aW1lLWNhc3RzLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2Fz
dHMuanNvbi1yZXN1bHQKaW5kZXggMjZiNzUwYzY2YjIwMWIwZDRlY2JmMmYzNzQ4YWI5ZjQwMzA5
YTllYy4uNGRlMDRhYjRiNmQ5MWRjOTdmMDA2MzU5YThkNmM3NjgwZDkyZjM3YyAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVk
L3R5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbi1yZXN1bHQKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtcmVxdWly
aW5nLXJ1bnRpbWUtY2FzdHMuanNvbi1yZXN1bHQKQEAgLTY5LDcgKzY5LDcgQEAgSW5zcGVjdG9y
QmFja2VuZC5hY3RpdmF0ZURvbWFpbigiVGVzdCIsIG51bGwpOwogCiAjaWYgRU5BQkxFKElOU1BF
Q1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBl
cy5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgogI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CiAKQEAgLTEyNSwxMSArMTI1LDE0IEBA
IHByaXZhdGU6CiAKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx0
dXBsZT4KKyNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwu
aD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3Rv
ciB7CiAKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCiAKIAogCkBAIC0xNzAsOSArMTcz
LDcgQEAgdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiAjaW5jbHVkZSAiVGVzdEJhY2tlbmRE
aXNwYXRjaGVycy5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRl
bmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgogI2luY2x1ZGUgPHd0Zi9O
ZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogI2lmIEVO
QUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogI2luY2x1ZGUgIlRlc3RBbHRl
cm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKQEAgLTIyMCw2ICsyMjEsNyBAQCBuYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKIAogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRl
IDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKQEAgLTI2Myw3
ICsyNjUsNiBAQCBjbGFzcyBGcm9udGVuZFJvdXRlcjsKICNpbmNsdWRlICJUZXN0RnJvbnRlbmRE
aXNwYXRjaGVycy5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRl
bmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJ
bnNwZWN0b3IgewogCkBAIC0zMDQsNyArMzA1LDkgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiAj
cHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29s
VHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9KU09O
VmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC0zNDYsNyArMzQ5LDcg
QEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKFQgZW51
bVZhbHVlKQogbmFtZXNwYWNlIFRlc3QgewogCiAvKiBBIGR1bW15IHR5cGUgdGhhdCByZXF1aXJl
cyBydW50aW1lIGNhc3RzLCBhbmQgZm9yY2VzIG5vbi1wcmltaXRpdmUgcmVmZXJlbmNlZCB0eXBl
cyB0byBhbHNvIGVtaXQgcnVudGltZSBjYXN0IGhlbHBlcnMuICovCi1jbGFzcyBUeXBlTmVlZGlu
Z0Nhc3QgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7CitjbGFzcyBUeXBlTmVlZGluZ0Nhc3Qg
ZmluYWwgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7CiBwdWJsaWM6CiAgICAgZW51bSB7CiAg
ICAgICAgIE5vRmllbGRzU2V0ID0gMCwKQEAgLTM3NiwzOCArMzc5LDM4IEBAIHB1YmxpYzoKICAg
ICAgICAgZnJpZW5kIGNsYXNzIFR5cGVOZWVkaW5nQ2FzdDsKICAgICBwdWJsaWM6CiAKLSAgICAg
ICAgQnVpbGRlcjxTVEFURSB8IFN0cmluZ1NldD4mIHNldFN0cmluZyhjb25zdCBTdHJpbmcmIHZh
bHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRFIHwgU3RyaW5nU2V0PiYgc2V0U3RyaW5nKGNvbnN0
IFN0cmluZyYgaW5fc3RyaW5nKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VS
VCghKFNUQVRFICYgU3RyaW5nU2V0KSwgcHJvcGVydHlfc3RyaW5nX2FscmVhZHlfc2V0KTsKLSAg
ICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInN0cmluZyJfcywgdmFsdWUpOworICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygic3RyaW5nIl9zLCBpbl9zdHJpbmcpOwogICAgICAg
ICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxTdHJpbmdTZXQ+KCk7CiAgICAgICAgIH0KIAotICAgICAg
ICBCdWlsZGVyPFNUQVRFIHwgTnVtYmVyU2V0PiYgc2V0TnVtYmVyKGludCB2YWx1ZSkKKyAgICAg
ICAgQnVpbGRlcjxTVEFURSB8IE51bWJlclNldD4mIHNldE51bWJlcihpbnQgaW5fbnVtYmVyKQog
ICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTnVtYmVyU2V0
KSwgcHJvcGVydHlfbnVtYmVyX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5z
ZXRJbnRlZ2VyKCJudW1iZXIiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRJ
bnRlZ2VyKCJudW1iZXIiX3MsIGluX251bWJlcik7CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0
YXRlPE51bWJlclNldD4oKTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBB
bmltYWxzU2V0PiYgc2V0QW5pbWFscyhJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRB
bmltYWxzIHZhbHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQW5pbWFsc1NldD4mIHNldEFu
aW1hbHMoUHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHMgaW5fYW5pbWFscykKICAgICAgICAg
ewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEFuaW1hbHNTZXQpLCBwcm9w
ZXJ0eV9hbmltYWxzX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJp
bmcoImFuaW1hbHMiX3MsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVt
Q29uc3RhbnRWYWx1ZSh2YWx1ZSkpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygi
YW5pbWFscyJfcywgUHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShp
bl9hbmltYWxzKSk7CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEFuaW1hbHNTZXQ+KCk7
CiAgICAgICAgIH0KIAotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgSWRTZXQ+JiBzZXRJZChpbnQg
dmFsdWUpCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBJZFNldD4mIHNldElkKGludCBpbl9pZCkK
ICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIElkU2V0KSwg
cHJvcGVydHlfaWRfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldEludGVn
ZXIoImlkIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0SW50ZWdlcigiaWQi
X3MsIGluX2lkKTsKICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8SWRTZXQ+KCk7CiAgICAg
ICAgIH0KIAotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVHJlZVNldD4mIHNldFRyZWUoUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDE+IHZhbHVlKQorICAg
ICAgICBCdWlsZGVyPFNUQVRFIHwgVHJlZVNldD4mIHNldFRyZWUoUmVmPFByb3RvY29sOjpUZXN0
OjpSZWN1cnNpdmVPYmplY3QxPiYmIGluX3RyZWUpCiAgICAgICAgIHsKICAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBUcmVlU2V0KSwgcHJvcGVydHlfdHJlZV9hbHJlYWR5X3Nl
dCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0KCJ0cmVlIl9zLCB2YWx1ZSk7Cisg
ICAgICAgICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0KCJ0cmVlIl9zLCBXVEZNb3ZlKGluX3RyZWUp
KTsKICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VHJlZVNldD4oKTsKICAgICAgICAgfQog
CkBAIC00NTIsNyArNDU1LDcgQEAgZW51bSBjbGFzcyBDYXN0ZWRBbmltYWxzIHsKICAgICBGbGFt
aW5nb3MgPSAzLAogfTsgLy8gZW51bSBjbGFzcyBDYXN0ZWRBbmltYWxzCiAKLWNsYXNzIFJlY3Vy
c2l2ZU9iamVjdDEgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7CitjbGFzcyBSZWN1cnNpdmVP
YmplY3QxIGZpbmFsIDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgewogcHVibGljOgogICAgIGVu
dW0gewogICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCkBAIC00OTgsMTMgKzUwMSwxMyBAQCBwdWJs
aWM6CiAgICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihKU09OOjpPYmplY3Q6OmNy
ZWF0ZSgpKTsKICAgICB9CiAKLSAgICB2b2lkIHNldE9iaihSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0Mj4gdmFsdWUpCisgICAgdm9pZCBzZXRPYmooUmVm
PFByb3RvY29sOjpUZXN0OjpSZWN1cnNpdmVPYmplY3QyPiYmIGluX29wdF9vYmopCiAgICAgewot
ICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXRPYmplY3QoIm9iaiJfcywgV1RGTW92ZSh2YWx1
ZSkpOworICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXRPYmplY3QoIm9iaiJfcywgV1RGTW92
ZShpbl9vcHRfb2JqKSk7CiAgICAgfQogfTsKIAotY2xhc3MgUmVjdXJzaXZlT2JqZWN0MiA6IHB1
YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKK2NsYXNzIFJlY3Vyc2l2ZU9iamVjdDIgZmluYWwgOiBw
dWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7CiBwdWJsaWM6CiAgICAgZW51bSB7CiAgICAgICAgIE5v
RmllbGRzU2V0ID0gMCwKQEAgLTU1MCwyNSArNTUzLDI1IEBAIHB1YmxpYzoKICAgICAgICAgcmV0
dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEpTT046Ok9iamVjdDo6Y3JlYXRlKCkpOwogICAgIH0K
IAotICAgIHZvaWQgc2V0T2JqKFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpSZWN1
cnNpdmVPYmplY3QxPiB2YWx1ZSkKKyAgICB2b2lkIHNldE9iaihSZWY8UHJvdG9jb2w6OlRlc3Q6
OlJlY3Vyc2l2ZU9iamVjdDE+JiYgaW5fb3B0X29iaikKICAgICB7Ci0gICAgICAgIEpTT046Ok9i
amVjdEJhc2U6OnNldE9iamVjdCgib2JqIl9zLCBXVEZNb3ZlKHZhbHVlKSk7CisgICAgICAgIEpT
T046Ok9iamVjdEJhc2U6OnNldE9iamVjdCgib2JqIl9zLCBXVEZNb3ZlKGluX29wdF9vYmopKTsK
ICAgICB9CiB9OwogCiB9IC8vIFRlc3QKIAotdGVtcGxhdGU8PiBzdHJ1Y3QgQmluZGluZ1RyYWl0
czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzPiB7Cit0ZW1wbGF0ZTw+
IHN0cnVjdCBCaW5kaW5nVHJhaXRzPFByb3RvY29sOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3Q+IHsK
K3N0YXRpYyBSZWY8UHJvdG9jb2w6OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdD4gcnVudGltZUNhc3Qo
UmVmPEpTT046OlZhbHVlPiYmIHZhbHVlKTsKIHN0YXRpYyB2b2lkIGFzc2VydFZhbHVlSGFzRXhw
ZWN0ZWRUeXBlKEpTT046OlZhbHVlKik7CiB9OwotdGVtcGxhdGU8PiBzdHJ1Y3QgQmluZGluZ1Ry
YWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3Q+IHsKLXN0YXRp
YyBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0PiBydW50
aW1lQ2FzdChSZWZQdHI8SlNPTjo6VmFsdWU+JiYgdmFsdWUpOwordGVtcGxhdGU8PiBzdHJ1Y3Qg
QmluZGluZ1RyYWl0czxQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFscz4gewogc3RhdGljIHZv
aWQgYXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoSlNPTjo6VmFsdWUqKTsKIH07Ci10ZW1wbGF0
ZTw+IHN0cnVjdCBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlJlY3Vy
c2l2ZU9iamVjdDE+IHsKK3RlbXBsYXRlPD4gc3RydWN0IEJpbmRpbmdUcmFpdHM8UHJvdG9jb2w6
OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDE+IHsKIHN0YXRpYyB2b2lkIGFzc2VydFZhbHVlSGFzRXhw
ZWN0ZWRUeXBlKEpTT046OlZhbHVlKik7CiB9OwotdGVtcGxhdGU8PiBzdHJ1Y3QgQmluZGluZ1Ry
YWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpSZWN1cnNpdmVPYmplY3QyPiB7Cit0ZW1w
bGF0ZTw+IHN0cnVjdCBCaW5kaW5nVHJhaXRzPFByb3RvY29sOjpUZXN0OjpSZWN1cnNpdmVPYmpl
Y3QyPiB7CiBzdGF0aWMgdm9pZCBhc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShKU09OOjpWYWx1
ZSopOwogfTsKIApAQCAtNTc5LDkgKzU4Miw5IEBAIE9wdGlvbmFsPFByb3RvY29sRW51bVR5cGU+
IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZyhjb25zdCBTdHJpbmcmKTsKIAogLy8gRW51bXMgaW4g
dGhlICdUZXN0JyBEb21haW4KIHRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlRlc3Q6OlVuY2FzdGVkQW5pbWFscz4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlVuY2FzdGVkQW5pbWFscz4oY29uc3QgU3RyaW5nJik7CitP
cHRpb25hbDxQcm90b2NvbDo6VGVzdDo6VW5jYXN0ZWRBbmltYWxzPiBwYXJzZUVudW1WYWx1ZUZy
b21TdHJpbmc8UHJvdG9jb2w6OlRlc3Q6OlVuY2FzdGVkQW5pbWFscz4oY29uc3QgU3RyaW5nJik7
CiB0ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRB
bmltYWxzPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVz
dDo6Q2FzdGVkQW5pbWFscz4oY29uc3QgU3RyaW5nJik7CitPcHRpb25hbDxQcm90b2NvbDo6VGVz
dDo6Q2FzdGVkQW5pbWFscz4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPFByb3RvY29sOjpUZXN0
OjpDYXN0ZWRBbmltYWxzPihjb25zdCBTdHJpbmcmKTsKIAogfSAvLyBuYW1lc3BhY2UgVGVzdEhl
bHBlcnMKIApAQCAtNjM1LDggKzYzOCw3IEBAIHN0cnVjdCBEZWZhdWx0SGFzaDxJbnNwZWN0b3I6
OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzPiA6IEludEhhc2g8SW5zcGVjdG9yCiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogCi0jaW5j
bHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2lu
Y2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC02
NjEsMzMgKzY2MywzMyBAQCBTdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpIHsK
IC8vIEVudW1zIGluIHRoZSAnVGVzdCcgRG9tYWluCiAKIHRlbXBsYXRlPD4KLU9wdGlvbmFsPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlVuY2FzdGVkQW5pbWFscz4gcGFyc2VFbnVtVmFsdWVG
cm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlVuY2FzdGVkQW5pbWFscz4oY29u
c3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKK09wdGlvbmFsPFByb3RvY29sOjpUZXN0OjpVbmNh
c3RlZEFuaW1hbHM+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxQcm90b2NvbDo6VGVzdDo6VW5j
YXN0ZWRBbmltYWxzPihjb25zdCBTdHJpbmcmIHByb3RvY29sU3RyaW5nKQogewogICAgIHN0YXRp
YyBjb25zdCBzaXplX3QgY29uc3RhbnRWYWx1ZXNbXSA9IHsKLSAgICAgICAgKHNpemVfdClJbnNw
ZWN0b3I6OlByb3RvY29sOjpUZXN0OjpVbmNhc3RlZEFuaW1hbHM6OlBpZ3MsCi0gICAgICAgIChz
aXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VW5jYXN0ZWRBbmltYWxzOjpDb3dzLAot
ICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlVuY2FzdGVkQW5pbWFs
czo6Q2F0cywKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpVbmNh
c3RlZEFuaW1hbHM6OkhlbnMsCisgICAgICAgIChzaXplX3QpUHJvdG9jb2w6OlRlc3Q6OlVuY2Fz
dGVkQW5pbWFsczo6UGlncywKKyAgICAgICAgKHNpemVfdClQcm90b2NvbDo6VGVzdDo6VW5jYXN0
ZWRBbmltYWxzOjpDb3dzLAorICAgICAgICAoc2l6ZV90KVByb3RvY29sOjpUZXN0OjpVbmNhc3Rl
ZEFuaW1hbHM6OkNhdHMsCisgICAgICAgIChzaXplX3QpUHJvdG9jb2w6OlRlc3Q6OlVuY2FzdGVk
QW5pbWFsczo6SGVucywKICAgICB9OwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgNDsgKytp
KQogICAgICAgICBpZiAocHJvdG9jb2xTdHJpbmcgPT0gZW51bV9jb25zdGFudF92YWx1ZXNbY29u
c3RhbnRWYWx1ZXNbaV1dKQotICAgICAgICAgICAgcmV0dXJuIChJbnNwZWN0b3I6OlByb3RvY29s
OjpUZXN0OjpVbmNhc3RlZEFuaW1hbHMpY29uc3RhbnRWYWx1ZXNbaV07CisgICAgICAgICAgICBy
ZXR1cm4gKFByb3RvY29sOjpUZXN0OjpVbmNhc3RlZEFuaW1hbHMpY29uc3RhbnRWYWx1ZXNbaV07
CiAKICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQogCiB0ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJ
bnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzPiBwYXJzZUVudW1WYWx1ZUZy
b21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFscz4oY29uc3Qg
U3RyaW5nJiBwcm90b2NvbFN0cmluZykKK09wdGlvbmFsPFByb3RvY29sOjpUZXN0OjpDYXN0ZWRB
bmltYWxzPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFu
aW1hbHM+KGNvbnN0IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcpCiB7CiAgICAgc3RhdGljIGNvbnN0
IHNpemVfdCBjb25zdGFudFZhbHVlc1tdID0gewotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6
UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM6OkR1Y2tzLAotICAgICAgICAoc2l6ZV90KUlu
c3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM6OkhlbnMsCi0gICAgICAgIChz
aXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFsczo6Q3Jvd3MsCi0g
ICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFsczo6
RmxhbWluZ29zLAorICAgICAgICAoc2l6ZV90KVByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxz
OjpEdWNrcywKKyAgICAgICAgKHNpemVfdClQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFsczo6
SGVucywKKyAgICAgICAgKHNpemVfdClQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFsczo6Q3Jv
d3MsCisgICAgICAgIChzaXplX3QpUHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM6OkZsYW1p
bmdvcywKICAgICB9OwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgNDsgKytpKQogICAgICAg
ICBpZiAocHJvdG9jb2xTdHJpbmcgPT0gZW51bV9jb25zdGFudF92YWx1ZXNbY29uc3RhbnRWYWx1
ZXNbaV1dKQotICAgICAgICAgICAgcmV0dXJuIChJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpD
YXN0ZWRBbmltYWxzKWNvbnN0YW50VmFsdWVzW2ldOworICAgICAgICAgICAgcmV0dXJuIChQcm90
b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFscyljb25zdGFudFZhbHVlc1tpXTsKIAogICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CiB9CkBAIC02OTYsMTE1ICs2OTgsMTAxIEBAIE9wdGlvbmFsPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM+IHBhcnNlRW51bVZhbHVlRnJvbVN0
cmluZzxJbnNwCiAKIAogCi12b2lkIEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6
VGVzdDo6Q2FzdGVkQW5pbWFscz46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKEpTT046OlZh
bHVlKiB2YWx1ZSkKK3ZvaWQgQmluZGluZ1RyYWl0czxQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5p
bWFscz46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKEpTT046OlZhbHVlKiB2YWx1ZSkKIHsK
KyAgICBBU1NFUlRfVU5VU0VEKHZhbHVlLCB2YWx1ZSk7CiAjaWYgQVNTRVJUX0VOQUJMRUQKLSAg
ICBBU1NFUlRfQVJHKHZhbHVlLCB2YWx1ZSk7Ci0gICAgU3RyaW5nIHJlc3VsdDsKLSAgICBib29s
IGNhc3RTdWNjZWVkZWQgPSB2YWx1ZS0+YXNTdHJpbmcocmVzdWx0KTsKLSAgICBBU1NFUlQoY2Fz
dFN1Y2NlZWRlZCk7CisgICAgYXV0byByZXN1bHQgPSB2YWx1ZS0+YXNTdHJpbmcoKTsKKyAgICBB
U1NFUlQocmVzdWx0KTsKICAgICBBU1NFUlQocmVzdWx0ID09ICJEdWNrcyIgfHwgcmVzdWx0ID09
ICJIZW5zIiB8fCByZXN1bHQgPT0gIkNyb3dzIiB8fCByZXN1bHQgPT0gIkZsYW1pbmdvcyIpOwot
I2Vsc2UgLy8gQVNTRVJUX0VOQUJMRUQKLSAgICBVTlVTRURfUEFSQU0odmFsdWUpOwotI2VuZGlm
IC8vIEFTU0VSVF9FTkFCTEVECisjZW5kaWYKIH0KIAotdm9pZCBCaW5kaW5nVHJhaXRzPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdD46OmFzc2VydFZhbHVlSGFzRXhw
ZWN0ZWRUeXBlKEpTT046OlZhbHVlKiB2YWx1ZSkKK3ZvaWQgQmluZGluZ1RyYWl0czxQcm90b2Nv
bDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0Pjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoSlNP
Tjo6VmFsdWUqIHZhbHVlKQogeworICAgIEFTU0VSVF9VTlVTRUQodmFsdWUsIHZhbHVlKTsKICNp
ZiBBU1NFUlRfRU5BQkxFRAotICAgIEFTU0VSVF9BUkcodmFsdWUsIHZhbHVlKTsKLSAgICBSZWZQ
dHI8SlNPTjo6T2JqZWN0PiBvYmplY3Q7Ci0gICAgYm9vbCBjYXN0U3VjY2VlZGVkID0gdmFsdWUt
PmFzT2JqZWN0KG9iamVjdCk7Ci0gICAgQVNTRVJUX1VOVVNFRChjYXN0U3VjY2VlZGVkLCBjYXN0
U3VjY2VlZGVkKTsKKyAgICBhdXRvIG9iamVjdCA9IHZhbHVlLT5hc09iamVjdCgpOworICAgIEFT
U0VSVChvYmplY3QpOwogICAgIHsKICAgICAgICAgYXV0byBzdHJpbmdQb3MgPSBvYmplY3QtPmZp
bmQoInN0cmluZyJfcyk7CiAgICAgICAgIEFTU0VSVChzdHJpbmdQb3MgIT0gb2JqZWN0LT5lbmQo
KSk7Ci0gICAgICAgIEJpbmRpbmdUcmFpdHM8U3RyaW5nPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3Rl
ZFR5cGUoc3RyaW5nUG9zLT52YWx1ZS5nZXQoKSk7CisgICAgICAgIEJpbmRpbmdUcmFpdHM8U3Ry
aW5nPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoc3RyaW5nUG9zLT52YWx1ZS5wdHIoKSk7
CiAgICAgfQogICAgIHsKICAgICAgICAgYXV0byBudW1iZXJQb3MgPSBvYmplY3QtPmZpbmQoIm51
bWJlciJfcyk7CiAgICAgICAgIEFTU0VSVChudW1iZXJQb3MgIT0gb2JqZWN0LT5lbmQoKSk7Ci0g
ICAgICAgIEJpbmRpbmdUcmFpdHM8aW50Pjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUobnVt
YmVyUG9zLT52YWx1ZS5nZXQoKSk7CisgICAgICAgIEJpbmRpbmdUcmFpdHM8aW50Pjo6YXNzZXJ0
VmFsdWVIYXNFeHBlY3RlZFR5cGUobnVtYmVyUG9zLT52YWx1ZS5wdHIoKSk7CiAgICAgfQogICAg
IHsKICAgICAgICAgYXV0byBhbmltYWxzUG9zID0gb2JqZWN0LT5maW5kKCJhbmltYWxzIl9zKTsK
ICAgICAgICAgQVNTRVJUKGFuaW1hbHNQb3MgIT0gb2JqZWN0LT5lbmQoKSk7Ci0gICAgICAgIEJp
bmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFscz46OmFz
c2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKGFuaW1hbHNQb3MtPnZhbHVlLmdldCgpKTsKKyAgICAg
ICAgQmluZGluZ1RyYWl0czxQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFscz46OmFzc2VydFZh
bHVlSGFzRXhwZWN0ZWRUeXBlKGFuaW1hbHNQb3MtPnZhbHVlLnB0cigpKTsKICAgICB9CiAgICAg
ewogICAgICAgICBhdXRvIGlkUG9zID0gb2JqZWN0LT5maW5kKCJpZCJfcyk7CiAgICAgICAgIEFT
U0VSVChpZFBvcyAhPSBvYmplY3QtPmVuZCgpKTsKLSAgICAgICAgQmluZGluZ1RyYWl0czxpbnQ+
Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShpZFBvcy0+dmFsdWUuZ2V0KCkpOworICAgICAg
ICBCaW5kaW5nVHJhaXRzPGludD46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKGlkUG9zLT52
YWx1ZS5wdHIoKSk7CiAgICAgfQogICAgIHsKICAgICAgICAgYXV0byB0cmVlUG9zID0gb2JqZWN0
LT5maW5kKCJ0cmVlIl9zKTsKICAgICAgICAgQVNTRVJUKHRyZWVQb3MgIT0gb2JqZWN0LT5lbmQo
KSk7Ci0gICAgICAgIEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UmVj
dXJzaXZlT2JqZWN0MT46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKHRyZWVQb3MtPnZhbHVl
LmdldCgpKTsKKyAgICAgICAgQmluZGluZ1RyYWl0czxQcm90b2NvbDo6VGVzdDo6UmVjdXJzaXZl
T2JqZWN0MT46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKHRyZWVQb3MtPnZhbHVlLnB0cigp
KTsKICAgICB9CiAKLSAgICBpbnQgZm91bmRQcm9wZXJ0aWVzQ291bnQgPSA1OworICAgIHNpemVf
dCBmb3VuZFByb3BlcnRpZXNDb3VudCA9IDU7CiAgICAgaWYgKGZvdW5kUHJvcGVydGllc0NvdW50
ICE9IG9iamVjdC0+c2l6ZSgpKQogICAgICAgICBGQVRBTCgiVW5leHBlY3RlZCBwcm9wZXJ0aWVz
IGluIG9iamVjdDogJXNcbiIsIG9iamVjdC0+dG9KU09OU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkp
OwotI2Vsc2UgLy8gQVNTRVJUX0VOQUJMRUQKLSAgICBVTlVTRURfUEFSQU0odmFsdWUpOwotI2Vu
ZGlmIC8vIEFTU0VSVF9FTkFCTEVECisjZW5kaWYKIH0KIAotUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdD4gQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlBy
b3RvY29sOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3Q+OjpydW50aW1lQ2FzdChSZWZQdHI8SlNPTjo6
VmFsdWU+JiYgdmFsdWUpCitSZWY8UHJvdG9jb2w6OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdD4gQmlu
ZGluZ1RyYWl0czxQcm90b2NvbDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0Pjo6cnVudGltZUNhc3Qo
UmVmPEpTT046OlZhbHVlPiYmIHZhbHVlKQogewotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHJl
c3VsdDsKLSAgICBib29sIGNhc3RTdWNjZWVkZWQgPSB2YWx1ZS0+YXNPYmplY3QocmVzdWx0KTsK
LSAgICBBU1NFUlRfVU5VU0VEKGNhc3RTdWNjZWVkZWQsIGNhc3RTdWNjZWVkZWQpOwotICAgIEJp
bmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0Pjo6
YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUocmVzdWx0LmdldCgpKTsKLSAgICBDT01QSUxFX0FT
U0VSVChzaXplb2YoSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0KSA9
PSBzaXplb2YoSlNPTjo6T2JqZWN0QmFzZSksIHR5cGVfY2FzdF9wcm9ibGVtKTsKLSAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0
Kj4oc3RhdGljX2Nhc3Q8SlNPTjo6T2JqZWN0QmFzZSo+KHJlc3VsdC5nZXQoKSkpOworICAgIGF1
dG8gcmVzdWx0ID0gdmFsdWUtPmFzT2JqZWN0KCk7CisgICAgQmluZGluZ1RyYWl0czxQcm90b2Nv
bDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0Pjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUocmVz
dWx0LmdldCgpKTsKKyAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoUHJvdG9jb2w6OlRlc3Q6OlR5
cGVOZWVkaW5nQ2FzdCkgPT0gc2l6ZW9mKEpTT046Ok9iamVjdEJhc2UpLCB0eXBlX2Nhc3RfcHJv
YmxlbSk7CisgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxQcm90b2NvbDo6VGVzdDo6
VHlwZU5lZWRpbmdDYXN0PihzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SlNPTjo6T2JqZWN0QmFzZT4o
cmVzdWx0LnJlbGVhc2VOb25OdWxsKCkpKTsKIH0KIAogCi12b2lkIEJpbmRpbmdUcmFpdHM8SW5z
cGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0MT46OmFzc2VydFZhbHVlSGFz
RXhwZWN0ZWRUeXBlKEpTT046OlZhbHVlKiB2YWx1ZSkKK3ZvaWQgQmluZGluZ1RyYWl0czxQcm90
b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0MT46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBl
KEpTT046OlZhbHVlKiB2YWx1ZSkKIHsKKyAgICBBU1NFUlRfVU5VU0VEKHZhbHVlLCB2YWx1ZSk7
CiAjaWYgQVNTRVJUX0VOQUJMRUQKLSAgICBBU1NFUlRfQVJHKHZhbHVlLCB2YWx1ZSk7Ci0gICAg
UmVmUHRyPEpTT046Ok9iamVjdD4gb2JqZWN0OwotICAgIGJvb2wgY2FzdFN1Y2NlZWRlZCA9IHZh
bHVlLT5hc09iamVjdChvYmplY3QpOwotICAgIEFTU0VSVF9VTlVTRUQoY2FzdFN1Y2NlZWRlZCwg
Y2FzdFN1Y2NlZWRlZCk7CisgICAgYXV0byBvYmplY3QgPSB2YWx1ZS0+YXNPYmplY3QoKTsKKyAg
ICBBU1NFUlQob2JqZWN0KTsKIAotICAgIGludCBmb3VuZFByb3BlcnRpZXNDb3VudCA9IDA7Cisg
ICAgc2l6ZV90IGZvdW5kUHJvcGVydGllc0NvdW50ID0gMDsKICAgICB7CiAgICAgICAgIGF1dG8g
b2JqUG9zID0gb2JqZWN0LT5maW5kKCJvYmoiX3MpOwogICAgICAgICBpZiAob2JqUG9zICE9IG9i
amVjdC0+ZW5kKCkpIHsKLSAgICAgICAgICAgIEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90
b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0Mj46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBl
KG9ialBvcy0+dmFsdWUuZ2V0KCkpOworICAgICAgICAgICAgQmluZGluZ1RyYWl0czxQcm90b2Nv
bDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0Mj46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKG9i
alBvcy0+dmFsdWUucHRyKCkpOwogICAgICAgICAgICAgKytmb3VuZFByb3BlcnRpZXNDb3VudDsK
ICAgICAgICAgfQogICAgIH0KICAgICBpZiAoZm91bmRQcm9wZXJ0aWVzQ291bnQgIT0gb2JqZWN0
LT5zaXplKCkpCiAgICAgICAgIEZBVEFMKCJVbmV4cGVjdGVkIHByb3BlcnRpZXMgaW4gb2JqZWN0
OiAlc1xuIiwgb2JqZWN0LT50b0pTT05TdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSk7Ci0jZWxzZSAv
LyBBU1NFUlRfRU5BQkxFRAotICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7Ci0jZW5kaWYgLy8gQVNT
RVJUX0VOQUJMRUQKKyNlbmRpZgogfQogCi12b2lkIEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0Mj46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRU
eXBlKEpTT046OlZhbHVlKiB2YWx1ZSkKK3ZvaWQgQmluZGluZ1RyYWl0czxQcm90b2NvbDo6VGVz
dDo6UmVjdXJzaXZlT2JqZWN0Mj46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKEpTT046OlZh
bHVlKiB2YWx1ZSkKIHsKKyAgICBBU1NFUlRfVU5VU0VEKHZhbHVlLCB2YWx1ZSk7CiAjaWYgQVNT
RVJUX0VOQUJMRUQKLSAgICBBU1NFUlRfQVJHKHZhbHVlLCB2YWx1ZSk7Ci0gICAgUmVmUHRyPEpT
T046Ok9iamVjdD4gb2JqZWN0OwotICAgIGJvb2wgY2FzdFN1Y2NlZWRlZCA9IHZhbHVlLT5hc09i
amVjdChvYmplY3QpOwotICAgIEFTU0VSVF9VTlVTRUQoY2FzdFN1Y2NlZWRlZCwgY2FzdFN1Y2Nl
ZWRlZCk7CisgICAgYXV0byBvYmplY3QgPSB2YWx1ZS0+YXNPYmplY3QoKTsKKyAgICBBU1NFUlQo
b2JqZWN0KTsKIAotICAgIGludCBmb3VuZFByb3BlcnRpZXNDb3VudCA9IDA7CisgICAgc2l6ZV90
IGZvdW5kUHJvcGVydGllc0NvdW50ID0gMDsKICAgICB7CiAgICAgICAgIGF1dG8gb2JqUG9zID0g
b2JqZWN0LT5maW5kKCJvYmoiX3MpOwogICAgICAgICBpZiAob2JqUG9zICE9IG9iamVjdC0+ZW5k
KCkpIHsKLSAgICAgICAgICAgIEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVz
dDo6UmVjdXJzaXZlT2JqZWN0MT46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKG9ialBvcy0+
dmFsdWUuZ2V0KCkpOworICAgICAgICAgICAgQmluZGluZ1RyYWl0czxQcm90b2NvbDo6VGVzdDo6
UmVjdXJzaXZlT2JqZWN0MT46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKG9ialBvcy0+dmFs
dWUucHRyKCkpOwogICAgICAgICAgICAgKytmb3VuZFByb3BlcnRpZXNDb3VudDsKICAgICAgICAg
fQogICAgIH0KICAgICBpZiAoZm91bmRQcm9wZXJ0aWVzQ291bnQgIT0gb2JqZWN0LT5zaXplKCkp
CiAgICAgICAgIEZBVEFMKCJVbmV4cGVjdGVkIHByb3BlcnRpZXMgaW4gb2JqZWN0OiAlc1xuIiwg
b2JqZWN0LT50b0pTT05TdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSk7Ci0jZWxzZSAvLyBBU1NFUlRf
RU5BQkxFRAotICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7Ci0jZW5kaWYgLy8gQVNTRVJUX0VOQUJM
RUQKKyNlbmRpZgogfQogCiB9IC8vIG5hbWVzcGFjZSBQcm90b2NvbApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUt
d2l0aC1vcGVuLXBhcmFtZXRlcnMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS13aXRoLW9wZW4tcGFyYW1ldGVy
cy5qc29uLXJlc3VsdAppbmRleCA3ZDU3NzYyYThmZjhiZTRhOWFlNDlkYzllZjU0N2I5ZDMyMTNk
YzdiLi5iOTg0Y2IwN2MyYjM3NTUxYTFmNzdjMjNiMDk0MDYyMjkxNmVlNWUxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQv
dHlwZS13aXRoLW9wZW4tcGFyYW1ldGVycy5qc29uLXJlc3VsdAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS13aXRoLW9wZW4t
cGFyYW1ldGVycy5qc29uLXJlc3VsdApAQCAtNjMsNyArNjMsNyBAQAogCiAjaWYgRU5BQkxFKElO
U1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xU
eXBlcy5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgogI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CiAKQEAgLTExOSwxMSArMTE5LDE0
IEBAIHByaXZhdGU6CiAKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRl
IDx0dXBsZT4KKyNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9u
YWwuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3Bl
Y3RvciB7CiAKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCiAKIAogCkBAIC0xNjQsOSAr
MTY3LDcgQEAgdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiAjaW5jbHVkZSAiVGVzdEJhY2tl
bmREaXNwYXRjaGVycy5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJv
bnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgogI2luY2x1ZGUgPHd0
Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogI2lm
IEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogI2luY2x1ZGUgIlRlc3RB
bHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKQEAgLTIxNCw2ICsyMTUsNyBAQCBuYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKIAogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNs
dWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKQEAgLTI1
Nyw3ICsyNTksNiBAQCBjbGFzcyBGcm9udGVuZFJvdXRlcjsKICNpbmNsdWRlICJUZXN0RnJvbnRl
bmREaXNwYXRjaGVycy5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJv
bnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKIG5hbWVzcGFj
ZSBJbnNwZWN0b3IgewogCkBAIC0yOTgsNyArMjk5LDkgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7
CiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3Rv
Y29sVHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9K
U09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC0zMjAsNyArMzIz
LDcgQEAgY2xhc3MgT3BlblBhcmFtZXRlcnM7CiAKIG5hbWVzcGFjZSBUZXN0IHsKIAotY2xhc3Mg
Tm9PcGVuUGFyYW1ldGVycyA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKK2NsYXNzIE5vT3Bl
blBhcmFtZXRlcnMgZmluYWwgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7CiBwdWJsaWM6CiAg
ICAgZW51bSB7CiAgICAgICAgIE5vRmllbGRzU2V0ID0gMCwKQEAgLTM0NywxNyArMzUwLDE3IEBA
IHB1YmxpYzoKICAgICAgICAgZnJpZW5kIGNsYXNzIE5vT3BlblBhcmFtZXRlcnM7CiAgICAgcHVi
bGljOgogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBPbmVTZXQ+JiBzZXRPbmUoZG91YmxlIHZh
bHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRFIHwgT25lU2V0PiYgc2V0T25lKGRvdWJsZSBpbl9v
bmUpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBPbmVT
ZXQpLCBwcm9wZXJ0eV9vbmVfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNl
dERvdWJsZSgib25lIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0RG91Ymxl
KCJvbmUiX3MsIGluX29uZSk7CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE9uZVNldD4o
KTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBUd29TZXQ+JiBzZXRUd28o
ZG91YmxlIHZhbHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVHdvU2V0PiYgc2V0VHdvKGRv
dWJsZSBpbl90d28pCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RB
VEUgJiBUd29TZXQpLCBwcm9wZXJ0eV90d29fYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9y
ZXN1bHQtPnNldERvdWJsZSgidHdvIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+
c2V0RG91YmxlKCJ0d28iX3MsIGluX3R3byk7CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRl
PFR3b1NldD4oKTsKICAgICAgICAgfQogCkBAIC0zODUsNyArMzg4LDcgQEAgcHVibGljOgogICAg
IH0KIH07CiAKLWNsYXNzIE9wZW5QYXJhbWV0ZXJzIDogcHVibGljIEpTT046Ok9iamVjdCB7Citj
bGFzcyBPcGVuUGFyYW1ldGVycyBmaW5hbCA6IHB1YmxpYyBKU09OOjpPYmplY3QgewogcHVibGlj
OgogICAgIGVudW0gewogICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCkBAIC00MTIsMTcgKzQxNSwx
NyBAQCBwdWJsaWM6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBPcGVuUGFyYW1ldGVyczsKICAgICBw
dWJsaWM6CiAKLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IEFscGhhU2V0PiYgc2V0QWxwaGEoZG91
YmxlIHZhbHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQWxwaGFTZXQ+JiBzZXRBbHBoYShk
b3VibGUgaW5fYWxwaGEpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEo
U1RBVEUgJiBBbHBoYVNldCksIHByb3BlcnR5X2FscGhhX2FscmVhZHlfc2V0KTsKLSAgICAgICAg
ICAgIG1fcmVzdWx0LT5zZXREb3VibGUoImFscGhhIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICBt
X3Jlc3VsdC0+c2V0RG91YmxlKCJhbHBoYSJfcywgaW5fYWxwaGEpOwogICAgICAgICAgICAgcmV0
dXJuIGNhc3RTdGF0ZTxBbHBoYVNldD4oKTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCBCZXRhU2V0PiYgc2V0QmV0YShkb3VibGUgdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCBCZXRhU2V0PiYgc2V0QmV0YShkb3VibGUgaW5fYmV0YSkKICAgICAgICAgewogICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEJldGFTZXQpLCBwcm9wZXJ0eV9iZXRh
X2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXREb3VibGUoImJldGEiX3Ms
IHZhbHVlKTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXREb3VibGUoImJldGEiX3MsIGluX2Jl
dGEpOwogICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxCZXRhU2V0PigpOwogICAgICAgICB9
CiAKQEAgLTQ1MCw3ICs0NTMsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgLy8gUHJvcGVydHkg
bmFtZXMgZm9yIHR5cGUgZ2VuZXJhdGVkIGFzIG9wZW4uCi0gICAgTm9uZSBzdGF0aWMgY29uc3Qg
Y2hhciogQWxwaGE7CisgICAgTm9uZSBzdGF0aWMgY29uc3QgY2hhciogYWxwaGFLZXk7CiB9Owog
CiB9IC8vIFRlc3QKQEAgLTQ5NSwxNCArNDk4LDEzIEBAIHB1YmxpYzoKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAKLSNpbmNsdWRlIDx3dGYv
T3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3Rm
L0Fzc2VydGlvbnMuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKIG5hbWVzcGFjZSBQcm90
b2NvbCB7CiAKLWNvbnN0IGNoYXIqIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6Ok9wZW5QYXJh
bWV0ZXJzOjpBbHBoYSA9ICJhbHBoYSI7Citjb25zdCBjaGFyKiBQcm90b2NvbDo6VGVzdDo6T3Bl
blBhcmFtZXRlcnM6OmFscGhhS2V5ID0gImFscGhhIjsKIAogfSAvLyBuYW1lc3BhY2UgUHJvdG9j
b2wKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2V4cGVjdGVkL3ZlcnNpb24uanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdmVyc2lvbi5qc29uLXJlc3VsdApp
bmRleCBlZjc3OGEwNmM3ZjI1MTFmNmMyMzQxODY3MjU1MDU2ODM3ZmJmYTNmLi5jMDRhYjU5NzNl
NzY2MTIxZTZiZTg2OTk5ODU0MWQ1YTcxMjcyZThkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdmVyc2lvbi5qc29uLXJl
c3VsdAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
ZXhwZWN0ZWQvdmVyc2lvbi5qc29uLXJlc3VsdApAQCAtNjgsNyArNjgsNyBAQCBJbnNwZWN0b3JC
YWNrZW5kLmFjdGl2YXRlRG9tYWluKCJWZXJzaW9uRG9tYWluIiwgbnVsbCk7CiAKICNpZiBFTkFC
TEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIAotI2luY2x1ZGUgIlRlc3RQcm90
b2NvbFR5cGVzLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CiAjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KIApAQCAtMTI0LDExICsx
MjQsMTQgQEAgcHJpdmF0ZToKIAogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2lu
Y2x1ZGUgPHR1cGxlPgorI2luY2x1ZGUgPHd0Zi9FeHBlY3RlZC5oPgorI2luY2x1ZGUgPHd0Zi9P
cHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKIAotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKIAogCiAKQEAgLTE2
OSw5ICsxNzIsNyBAQCB0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKICNpbmNsdWRlICJUZXN0
QmFja2VuZERpc3BhdGNoZXJzLmgiCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CiAjaW5jbHVk
ZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgog
CiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAjaW5jbHVkZSAi
VGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgpAQCAtMjE5LDYgKzIyMCw3IEBAIG5h
bWVzcGFjZSBJbnNwZWN0b3IgewogCiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgog
I2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAj
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewpA
QCAtMjYyLDcgKzI2NCw2IEBAIGNsYXNzIEZyb250ZW5kUm91dGVyOwogI2luY2x1ZGUgIlRlc3RG
cm9udGVuZERpc3BhdGNoZXJzLmgiCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogbmFt
ZXNwYWNlIEluc3BlY3RvciB7CiAKQEAgLTMwMyw3ICszMDQsOSBAQCBuYW1lc3BhY2UgSW5zcGVj
dG9yIHsKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
UHJvdG9jb2xUeXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8
d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKQEAgLTM2Miw4
ICszNjUsNyBAQCBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFZFUlNJT04gPSA0MjsKICNpbmNs
dWRlICJjb25maWcuaCIKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAKLSNpbmNs
dWRlIDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5j
bHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVTZXQuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVNldC5jcHAKaW5kZXggZDk5ZmYzMTFkYjc1NTRh
MmIwMTMwZDI3MjI0OWM3YjA0ZDA1YjhhNS4uNjVlYTM1NDU5YzQ0OTc4NDJiNThhYTNiNGQyYzE2
YWJjYzlmZTE1NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlw
ZVNldC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVNldC5jcHAK
QEAgLTUwMSwxNCArNTAxLDE0IEBAIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpT
dHJ1Y3R1cmVEZXNjcmlwdGlvbj4gU3RydWN0dXJlU2hhcGU6Omluc3BlY3RvCiAgICAgICAgIGZv
ciAoY29uc3QgYXV0byYgZmllbGQgOiBjdXJyZW50U2hhcGUtPm1fb3B0aW9uYWxGaWVsZHMpCiAg
ICAgICAgICAgICBvcHRpb25hbEZpZWxkcy0+YWRkSXRlbShmaWVsZC5nZXQoKSk7CiAKLSAgICAg
ICAgY3VycmVudE9iamVjdC0+c2V0RmllbGRzKCZmaWVsZHMuZ2V0KCkpOwotICAgICAgICBjdXJy
ZW50T2JqZWN0LT5zZXRPcHRpb25hbEZpZWxkcygmb3B0aW9uYWxGaWVsZHMuZ2V0KCkpOworICAg
ICAgICBjdXJyZW50T2JqZWN0LT5zZXRGaWVsZHMoV1RGTW92ZShmaWVsZHMpKTsKKyAgICAgICAg
Y3VycmVudE9iamVjdC0+c2V0T3B0aW9uYWxGaWVsZHMoV1RGTW92ZShvcHRpb25hbEZpZWxkcykp
OwogICAgICAgICBjdXJyZW50T2JqZWN0LT5zZXRDb25zdHJ1Y3Rvck5hbWUoY3VycmVudFNoYXBl
LT5tX2NvbnN0cnVjdG9yTmFtZSk7CiAgICAgICAgIGN1cnJlbnRPYmplY3QtPnNldElzSW1wcmVj
aXNlKGN1cnJlbnRTaGFwZS0+bV9pc0luRGljdGlvbmFyeU1vZGUpOwogCiAgICAgICAgIGlmIChj
dXJyZW50U2hhcGUtPm1fcHJvdG8pIHsKICAgICAgICAgICAgIGF1dG8gbmV4dE9iamVjdCA9IElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlN0cnVjdHVyZURlc2NyaXB0aW9uOjpjcmVhdGUo
KS5yZWxlYXNlKCk7Ci0gICAgICAgICAgICBjdXJyZW50T2JqZWN0LT5zZXRQcm90b3R5cGVTdHJ1
Y3R1cmUoJm5leHRPYmplY3QuZ2V0KCkpOworICAgICAgICAgICAgY3VycmVudE9iamVjdC0+c2V0
UHJvdG90eXBlU3RydWN0dXJlKG5leHRPYmplY3QuY29weVJlZigpKTsKICAgICAgICAgICAgIGN1
cnJlbnRPYmplY3QgPSBXVEZNb3ZlKG5leHRPYmplY3QpOwogICAgICAgICB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XVEYvd3RmL0pTT05WYWx1ZXMuY3BwIGIvU291cmNlL1dURi93dGYvSlNPTlZh
bHVlcy5jcHAKaW5kZXggNDA1MjA3OGYzZjk3YzJlOTBmYWNkMDUxZGMxOTJlYzY1MjYxNGMzNC4u
NDliM2YwY2EyZmYxZjhlNjlkMGM0ZjQzYWFhY2ZjYzZhYmRhNmI2MCAxMDA2NDQKLS0tIGEvU291
cmNlL1dURi93dGYvSlNPTlZhbHVlcy5jcHAKKysrIGIvU291cmNlL1dURi93dGYvSlNPTlZhbHVl
cy5jcHAKQEAgLTU3LDkgKzU3LDkgQEAgZW51bSBjbGFzcyBUb2tlbiB7CiAgICAgSW52YWxpZCwK
IH07CiAKLWNvbnN0IGNoYXIqIGNvbnN0IG51bGxTdHJpbmcgPSAibnVsbCI7Ci1jb25zdCBjaGFy
KiBjb25zdCB0cnVlU3RyaW5nID0gInRydWUiOwotY29uc3QgY2hhciogY29uc3QgZmFsc2VTdHJp
bmcgPSAiZmFsc2UiOworY29uc3QgY2hhciogY29uc3QgbnVsbFRva2VuID0gIm51bGwiOworY29u
c3QgY2hhciogY29uc3QgdHJ1ZVRva2VuID0gInRydWUiOworY29uc3QgY2hhciogY29uc3QgZmFs
c2VUb2tlbiA9ICJmYWxzZSI7CiAKIGJvb2wgcGFyc2VDb25zdFRva2VuKGNvbnN0IFVDaGFyKiBz
dGFydCwgY29uc3QgVUNoYXIqIGVuZCwgY29uc3QgVUNoYXIqKiB0b2tlbkVuZCwgY29uc3QgY2hh
ciogdG9rZW4pCiB7CkBAIC0yMDksMTUgKzIwOSwxNSBAQCBUb2tlbiBwYXJzZVRva2VuKGNvbnN0
IFVDaGFyKiBzdGFydCwgY29uc3QgVUNoYXIqIGVuZCwgY29uc3QgVUNoYXIqKiB0b2tlblN0YXJ0
LAogCiAgICAgc3dpdGNoICgqc3RhcnQpIHsKICAgICBjYXNlICduJzoKLSAgICAgICAgaWYgKHBh
cnNlQ29uc3RUb2tlbihzdGFydCwgZW5kLCB0b2tlbkVuZCwgbnVsbFN0cmluZykpCisgICAgICAg
IGlmIChwYXJzZUNvbnN0VG9rZW4oc3RhcnQsIGVuZCwgdG9rZW5FbmQsIG51bGxUb2tlbikpCiAg
ICAgICAgICAgICByZXR1cm4gVG9rZW46Ok51bGw7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
J3QnOgotICAgICAgICBpZiAocGFyc2VDb25zdFRva2VuKHN0YXJ0LCBlbmQsIHRva2VuRW5kLCB0
cnVlU3RyaW5nKSkKKyAgICAgICAgaWYgKHBhcnNlQ29uc3RUb2tlbihzdGFydCwgZW5kLCB0b2tl
bkVuZCwgdHJ1ZVRva2VuKSkKICAgICAgICAgICAgIHJldHVybiBUb2tlbjo6Qm9vbFRydWU7CiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgJ2YnOgotICAgICAgICBpZiAocGFyc2VDb25zdFRva2Vu
KHN0YXJ0LCBlbmQsIHRva2VuRW5kLCBmYWxzZVN0cmluZykpCisgICAgICAgIGlmIChwYXJzZUNv
bnN0VG9rZW4oc3RhcnQsIGVuZCwgdG9rZW5FbmQsIGZhbHNlVG9rZW4pKQogICAgICAgICAgICAg
cmV0dXJuIFRva2VuOjpCb29sRmFsc2U7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgJ1snOgpA
QCAtMzgwLDcgKzM4MCw3IEBAIFJlZlB0cjxKU09OOjpWYWx1ZT4gYnVpbGRWYWx1ZShjb25zdCBV
Q2hhciogc3RhcnQsIGNvbnN0IFVDaGFyKiBlbmQsIGNvbnN0IFVDaGFyCiAgICAgICAgICAgICBS
ZWZQdHI8SlNPTjo6VmFsdWU+IGFycmF5Tm9kZSA9IGJ1aWxkVmFsdWUoc3RhcnQsIGVuZCwgJnRv
a2VuRW5kLCBkZXB0aCArIDEpOwogICAgICAgICAgICAgaWYgKCFhcnJheU5vZGUpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgICAgICBhcnJheS0+cHVzaFZhbHVlKFdU
Rk1vdmUoYXJyYXlOb2RlKSk7CisgICAgICAgICAgICBhcnJheS0+cHVzaFZhbHVlKGFycmF5Tm9k
ZS5yZWxlYXNlTm9uTnVsbCgpKTsKIAogICAgICAgICAgICAgLy8gQWZ0ZXIgYSBsaXN0IHZhbHVl
LCB3ZSBleHBlY3QgYSBjb21tYSBvciB0aGUgZW5kIG9mIHRoZSBsaXN0LgogICAgICAgICAgICAg
c3RhcnQgPSB0b2tlbkVuZDsKQEAgLTQyMCw3ICs0MjAsNyBAQCBSZWZQdHI8SlNPTjo6VmFsdWU+
IGJ1aWxkVmFsdWUoY29uc3QgVUNoYXIqIHN0YXJ0LCBjb25zdCBVQ2hhciogZW5kLCBjb25zdCBV
Q2hhcgogICAgICAgICAgICAgUmVmUHRyPEpTT046OlZhbHVlPiB2YWx1ZSA9IGJ1aWxkVmFsdWUo
c3RhcnQsIGVuZCwgJnRva2VuRW5kLCBkZXB0aCArIDEpOwogICAgICAgICAgICAgaWYgKCF2YWx1
ZSkKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgICAgIG9iamVjdC0+
c2V0VmFsdWUoa2V5LCBXVEZNb3ZlKHZhbHVlKSk7CisgICAgICAgICAgICBvYmplY3QtPnNldFZh
bHVlKGtleSwgdmFsdWUucmVsZWFzZU5vbk51bGwoKSk7CiAgICAgICAgICAgICBzdGFydCA9IHRv
a2VuRW5kOwogCiAgICAgICAgICAgICAvLyBBZnRlciBhIGtleS92YWx1ZSBwYWlyLCB3ZSBleHBl
Y3QgYSBjb21tYSBvciB0aGUgZW5kIG9mIHRoZQpAQCAtNDg5LDQwICs0ODksMzggQEAgUmVmPFZh
bHVlPiBWYWx1ZTo6Y3JlYXRlKGNvbnN0IGNoYXIqIHZhbHVlKQogICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IFZhbHVlKHZhbHVlKSk7CiB9CiAKLWJvb2wgVmFsdWU6OmFzVmFsdWUoUmVmUHRyPFZh
bHVlPiYgdmFsdWUpCitSZWZQdHI8VmFsdWU+IFZhbHVlOjphc1ZhbHVlKCkKIHsKLSAgICB2YWx1
ZSA9IHRoaXM7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHRoaXM7CiB9CiAKLWJvb2wg
VmFsdWU6OmFzT2JqZWN0KFJlZlB0cjxPYmplY3Q+JikKK1JlZlB0cjxPYmplY3Q+IFZhbHVlOjph
c09iamVjdCgpCiB7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBudWxscHRyOwogfQog
Ci1ib29sIFZhbHVlOjphc0FycmF5KFJlZlB0cjxBcnJheT4mKQorUmVmUHRyPEFycmF5PiBWYWx1
ZTo6YXNBcnJheSgpCiB7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBudWxscHRyOwog
fQogCi1ib29sIFZhbHVlOjpwYXJzZUpTT04oY29uc3QgU3RyaW5nJiBqc29uSW5wdXQsIFJlZlB0
cjxWYWx1ZT4mIG91dHB1dCkKK1JlZlB0cjxWYWx1ZT4gVmFsdWU6OnBhcnNlSlNPTihjb25zdCBT
dHJpbmcmIGpzb24pCiB7CiAgICAgLy8gRklYTUU6IFRoaXMgd2hvbGUgZmlsZSBzaG91bGQganVz
dCB1c2UgU3RyaW5nVmlldyBpbnN0ZWFkIG9mIFVDaGFyL2xlbmd0aCBhbmQgYXZvaWQgdXBjb252
ZXJ0aW5nLgotICAgIGF1dG8gY2hhcmFjdGVycyA9IFN0cmluZ1ZpZXcoanNvbklucHV0KS51cGNv
bnZlcnRlZENoYXJhY3RlcnMoKTsKKyAgICBhdXRvIGNoYXJhY3RlcnMgPSBTdHJpbmdWaWV3KGpz
b24pLnVwY29udmVydGVkQ2hhcmFjdGVycygpOwogICAgIGNvbnN0IFVDaGFyKiBzdGFydCA9IGNo
YXJhY3RlcnM7Ci0gICAgY29uc3QgVUNoYXIqIGVuZCA9IHN0YXJ0ICsganNvbklucHV0Lmxlbmd0
aCgpOworICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBzdGFydCArIGpzb24ubGVuZ3RoKCk7CiAgICAg
Y29uc3QgVUNoYXIqIHRva2VuRW5kOwogICAgIGF1dG8gcmVzdWx0ID0gYnVpbGRWYWx1ZShzdGFy
dCwgZW5kLCAmdG9rZW5FbmQsIDApOwogICAgIGlmICghcmVzdWx0KQotICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgZm9yIChjb25zdCBVQ2hhciog
dmFsdWVFbmQgPSB0b2tlbkVuZDsgdmFsdWVFbmQgPCBlbmQ7ICsrdmFsdWVFbmQpIHsKICAgICAg
ICAgaWYgKCFpc1NwYWNlT3JOZXdsaW5lKCp2YWx1ZUVuZCkpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKLSAgICBvdXRwdXQg
PSBXVEZNb3ZlKHJlc3VsdCk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIAogdm9pZCBWYWx1ZTo6ZXNjYXBlU3RyaW5nKFN0cmluZ0J1aWxkZXImIGJ1aWxkZXIsIFN0
cmluZ1ZpZXcgc3RyaW5nKQpAQCAtNTczLDk0ICs1NzEsMzIgQEAgU3RyaW5nIFZhbHVlOjp0b0pT
T05TdHJpbmcoKSBjb25zdAogICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKIH0KIAotYm9v
bCBWYWx1ZTo6YXNCb29sZWFuKGJvb2wmIG91dHB1dCkgY29uc3QKK09wdGlvbmFsPGJvb2w+IFZh
bHVlOjphc0Jvb2xlYW4oKSBjb25zdAogewogICAgIGlmICh0eXBlKCkgIT0gVHlwZTo6Qm9vbGVh
bikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgb3V0cHV0ID0gbV92YWx1ZS5ib29sZWFu
OwotICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHJl
dHVybiBtX3ZhbHVlLmJvb2xlYW47CiB9CiAKLWJvb2wgVmFsdWU6OmFzRG91YmxlKGRvdWJsZSYg
b3V0cHV0KSBjb25zdAorT3B0aW9uYWw8ZG91YmxlPiBWYWx1ZTo6YXNEb3VibGUoKSBjb25zdAog
ewotICAgIGlmICh0eXBlKCkgIT0gVHlwZTo6RG91YmxlKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBvdXRwdXQgPSBtX3ZhbHVlLm51bWJlcjsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBp
ZiAodHlwZSgpICE9IFR5cGU6OkRvdWJsZSAmJiB0eXBlKCkgIT0gVHlwZTo6SW50ZWdlcikKKyAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICByZXR1cm4gbV92YWx1ZS5udW1iZXI7CiB9
CiAKLWJvb2wgVmFsdWU6OmFzRG91YmxlKGZsb2F0JiBvdXRwdXQpIGNvbnN0CitPcHRpb25hbDxp
bnQ+IFZhbHVlOjphc0ludGVnZXIoKSBjb25zdAogewotICAgIGlmICh0eXBlKCkgIT0gVHlwZTo6
RG91YmxlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBvdXRwdXQgPSBzdGF0aWNfY2Fz
dDxmbG9hdD4obV92YWx1ZS5udW1iZXIpOwotICAgIHJldHVybiB0cnVlOworICAgIGlmICh0eXBl
KCkgIT0gVHlwZTo6RG91YmxlICYmIHR5cGUoKSAhPSBUeXBlOjpJbnRlZ2VyKQorICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KG1fdmFsdWUu
bnVtYmVyKTsKIH0KIAotYm9vbCBWYWx1ZTo6YXNJbnRlZ2VyKGludCYgb3V0cHV0KSBjb25zdAot
ewotICAgIGlmICh0eXBlKCkgIT0gVHlwZTo6SW50ZWdlciAmJiB0eXBlKCkgIT0gVHlwZTo6RG91
YmxlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBvdXRwdXQgPSBzdGF0aWNfY2FzdDxp
bnQ+KG1fdmFsdWUubnVtYmVyKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBWYWx1ZTo6
YXNJbnRlZ2VyKHVuc2lnbmVkJiBvdXRwdXQpIGNvbnN0Ci17Ci0gICAgaWYgKHR5cGUoKSAhPSBU
eXBlOjpJbnRlZ2VyICYmIHR5cGUoKSAhPSBUeXBlOjpEb3VibGUpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIG91dHB1dCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX3ZhbHVlLm51bWJl
cik7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgVmFsdWU6OmFzSW50ZWdlcihsb25nJiBv
dXRwdXQpIGNvbnN0Ci17Ci0gICAgaWYgKHR5cGUoKSAhPSBUeXBlOjpJbnRlZ2VyICYmIHR5cGUo
KSAhPSBUeXBlOjpEb3VibGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIG91dHB1dCA9
IHN0YXRpY19jYXN0PGxvbmc+KG1fdmFsdWUubnVtYmVyKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotYm9vbCBWYWx1ZTo6YXNJbnRlZ2VyKGxvbmcgbG9uZyYgb3V0cHV0KSBjb25zdAotewotICAg
IGlmICh0eXBlKCkgIT0gVHlwZTo6SW50ZWdlciAmJiB0eXBlKCkgIT0gVHlwZTo6RG91YmxlKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBvdXRwdXQgPSBzdGF0aWNfY2FzdDxsb25nIGxv
bmc+KG1fdmFsdWUubnVtYmVyKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBWYWx1ZTo6
YXNJbnRlZ2VyKHVuc2lnbmVkIGxvbmcmIG91dHB1dCkgY29uc3QKLXsKLSAgICBpZiAodHlwZSgp
ICE9IFR5cGU6OkludGVnZXIgJiYgdHlwZSgpICE9IFR5cGU6OkRvdWJsZSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgb3V0cHV0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4obV92
YWx1ZS5udW1iZXIpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFZhbHVlOjphc0ludGVn
ZXIodW5zaWduZWQgbG9uZyBsb25nJiBvdXRwdXQpIGNvbnN0Ci17Ci0gICAgaWYgKHR5cGUoKSAh
PSBUeXBlOjpJbnRlZ2VyICYmIHR5cGUoKSAhPSBUeXBlOjpEb3VibGUpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIG91dHB1dCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4o
bV92YWx1ZS5udW1iZXIpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFZhbHVlOjphc1N0
cmluZyhTdHJpbmcmIG91dHB1dCkgY29uc3QKK1N0cmluZyBWYWx1ZTo6YXNTdHJpbmcoKSBjb25z
dAogewogICAgIGlmICh0eXBlKCkgIT0gVHlwZTo6U3RyaW5nKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBvdXRwdXQgPSBtX3ZhbHVlLnN0cmluZzsKLSAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgcmV0dXJuIG51bGxTdHJpbmcoKTsKKyAgICByZXR1cm4gbV92YWx1ZS5zdHJpbmc7CiB9
CiAKIHZvaWQgVmFsdWU6OndyaXRlSlNPTihTdHJpbmdCdWlsZGVyJiBvdXRwdXQpIGNvbnN0CkBA
IC03MDMsNzYgKzYzOSw3NCBAQCBPYmplY3RCYXNlOjp+T2JqZWN0QmFzZSgpCiB7CiB9CiAKLWJv
b2wgT2JqZWN0QmFzZTo6YXNPYmplY3QoUmVmUHRyPE9iamVjdD4mIG91dHB1dCkKK1JlZlB0cjxP
YmplY3Q+IE9iamVjdEJhc2U6OmFzT2JqZWN0KCkKIHsKICAgICBDT01QSUxFX0FTU0VSVChzaXpl
b2YoT2JqZWN0KSA9PSBzaXplb2YoT2JqZWN0QmFzZSksIGNhbm5vdF9jYXN0KTsKLQotICAgIG91
dHB1dCA9IHN0YXRpY19jYXN0PE9iamVjdCo+KHRoaXMpOwotICAgIHJldHVybiB0cnVlOwotfQot
Ci1PYmplY3QqIE9iamVjdEJhc2U6Om9wZW5BY2Nlc3NvcnMoKQotewotICAgIENPTVBJTEVfQVNT
RVJUKHNpemVvZihPYmplY3QpID09IHNpemVvZihPYmplY3RCYXNlKSwgY2Fubm90X2Nhc3QpOwot
CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PE9iamVjdCo+KHRoaXMpOwogfQogCiBzaXplX3QgT2Jq
ZWN0QmFzZTo6bWVtb3J5Q29zdCgpIGNvbnN0CiB7CiAgICAgc2l6ZV90IG1lbW9yeUNvc3QgPSBW
YWx1ZTo6bWVtb3J5Q29zdCgpOwotICAgIGZvciAoY29uc3QgYXV0byYgZW50cnkgOiBtX21hcCkg
ewotICAgICAgICBtZW1vcnlDb3N0ICs9IGVudHJ5LmtleS5zaXplSW5CeXRlcygpOwotICAgICAg
ICBpZiAoZW50cnkudmFsdWUpCi0gICAgICAgICAgICBtZW1vcnlDb3N0ICs9IGVudHJ5LnZhbHVl
LT5tZW1vcnlDb3N0KCk7Ci0gICAgfQorICAgIGZvciAoY29uc3QgYXV0byYgZW50cnkgOiBtX21h
cCkKKyAgICAgICAgbWVtb3J5Q29zdCArPSBlbnRyeS5rZXkuc2l6ZUluQnl0ZXMoKSArIGVudHJ5
LnZhbHVlLT5tZW1vcnlDb3N0KCk7CiAgICAgcmV0dXJuIG1lbW9yeUNvc3Q7CiB9CiAKLWJvb2wg
T2JqZWN0QmFzZTo6Z2V0Qm9vbGVhbihjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wmIG91dHB1dCkg
Y29uc3QKK09wdGlvbmFsPGJvb2w+IE9iamVjdEJhc2U6OmdldEJvb2xlYW4oY29uc3QgU3RyaW5n
JiBuYW1lKSBjb25zdAogewotICAgIFJlZlB0cjxWYWx1ZT4gdmFsdWU7Ci0gICAgaWYgKCFnZXRW
YWx1ZShuYW1lLCB2YWx1ZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB2
YWx1ZS0+YXNCb29sZWFuKG91dHB1dCk7CisgICAgYXV0byB2YWx1ZSA9IGdldFZhbHVlKG5hbWUp
OworICAgIGlmICghdmFsdWUpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgcmV0
dXJuIHZhbHVlLT5hc0Jvb2xlYW4oKTsKIH0KIAotYm9vbCBPYmplY3RCYXNlOjpnZXRTdHJpbmco
Y29uc3QgU3RyaW5nJiBuYW1lLCBTdHJpbmcmIG91dHB1dCkgY29uc3QKK09wdGlvbmFsPGRvdWJs
ZT4gT2JqZWN0QmFzZTo6Z2V0RG91YmxlKGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3QKIHsKLSAg
ICBSZWZQdHI8VmFsdWU+IHZhbHVlOwotICAgIGlmICghZ2V0VmFsdWUobmFtZSwgdmFsdWUpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gdmFsdWUtPmFzU3RyaW5nKG91dHB1
dCk7CisgICAgYXV0byB2YWx1ZSA9IGdldFZhbHVlKG5hbWUpOworICAgIGlmICghdmFsdWUpCisg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgcmV0dXJuIHZhbHVlLT5hc0RvdWJsZSgp
OwogfQogCi1ib29sIE9iamVjdEJhc2U6OmdldE9iamVjdChjb25zdCBTdHJpbmcmIG5hbWUsIFJl
ZlB0cjxPYmplY3Q+JiBvdXRwdXQpIGNvbnN0CitPcHRpb25hbDxpbnQ+IE9iamVjdEJhc2U6Omdl
dEludGVnZXIoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdAogewotICAgIFJlZlB0cjxWYWx1ZT4g
dmFsdWU7Ci0gICAgaWYgKCFnZXRWYWx1ZShuYW1lLCB2YWx1ZSkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIHJldHVybiB2YWx1ZS0+YXNPYmplY3Qob3V0cHV0KTsKKyAgICBhdXRvIHZh
bHVlID0gZ2V0VmFsdWUobmFtZSk7CisgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKKyAgICByZXR1cm4gdmFsdWUtPmFzSW50ZWdlcigpOwogfQogCi1ib29sIE9i
amVjdEJhc2U6OmdldEFycmF5KGNvbnN0IFN0cmluZyYgbmFtZSwgUmVmUHRyPEFycmF5PiYgb3V0
cHV0KSBjb25zdAorU3RyaW5nIE9iamVjdEJhc2U6OmdldFN0cmluZyhjb25zdCBTdHJpbmcmIG5h
bWUpIGNvbnN0CiB7Ci0gICAgUmVmUHRyPFZhbHVlPiB2YWx1ZTsKLSAgICBpZiAoIWdldFZhbHVl
KG5hbWUsIHZhbHVlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHZhbHVl
LT5hc0FycmF5KG91dHB1dCk7CisgICAgYXV0byB2YWx1ZSA9IGdldFZhbHVlKG5hbWUpOworICAg
IGlmICghdmFsdWUpCisgICAgICAgIHJldHVybiBudWxsU3RyaW5nKCk7CisgICAgcmV0dXJuIHZh
bHVlLT5hc1N0cmluZygpOwogfQogCi1ib29sIE9iamVjdEJhc2U6OmdldFZhbHVlKGNvbnN0IFN0
cmluZyYgbmFtZSwgUmVmUHRyPFZhbHVlPiYgb3V0cHV0KSBjb25zdAorUmVmUHRyPE9iamVjdD4g
T2JqZWN0QmFzZTo6Z2V0T2JqZWN0KGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3QKIHsKLSAgICBE
aWN0aW9uYXJ5Ojpjb25zdF9pdGVyYXRvciBmaW5kUmVzdWx0ID0gbV9tYXAuZmluZChuYW1lKTsK
KyAgICBhdXRvIHZhbHVlID0gZ2V0VmFsdWUobmFtZSk7CisgICAgaWYgKCF2YWx1ZSkKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIHZhbHVlLT5hc09iamVjdCgpOworfQorCitS
ZWZQdHI8QXJyYXk+IE9iamVjdEJhc2U6OmdldEFycmF5KGNvbnN0IFN0cmluZyYgbmFtZSkgY29u
c3QKK3sKKyAgICBhdXRvIHZhbHVlID0gZ2V0VmFsdWUobmFtZSk7CisgICAgaWYgKCF2YWx1ZSkK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIHZhbHVlLT5hc0FycmF5KCk7Cit9
CisKK1JlZlB0cjxWYWx1ZT4gT2JqZWN0QmFzZTo6Z2V0VmFsdWUoY29uc3QgU3RyaW5nJiBuYW1l
KSBjb25zdAoreworICAgIGF1dG8gZmluZFJlc3VsdCA9IG1fbWFwLmZpbmQobmFtZSk7CiAgICAg
aWYgKGZpbmRSZXN1bHQgPT0gbV9tYXAuZW5kKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIG91dHB1dCA9IGZpbmRSZXN1bHQtPnZhbHVlOwotICAgIHJldHVybiB0cnVlOworICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gZmluZFJlc3VsdC0+dmFsdWUuY29weVJlZigp
OwogfQogCiB2b2lkIE9iamVjdEJhc2U6OnJlbW92ZShjb25zdCBTdHJpbmcmIG5hbWUpCkBAIC03
OTgsOCArNzMyLDYgQEAgdm9pZCBPYmplY3RCYXNlOjp3cml0ZUpTT04oU3RyaW5nQnVpbGRlciYg
b3V0cHV0KSBjb25zdAogCiBPYmplY3RCYXNlOjpPYmplY3RCYXNlKCkKICAgICA6IFZhbHVlKFR5
cGU6Ok9iamVjdCkKLSAgICAsIG1fbWFwKCkKLSAgICAsIG1fb3JkZXIoKQogewogfQogCkBAIC04
MDcsMTcgKzczOSwxNiBAQCBBcnJheUJhc2U6On5BcnJheUJhc2UoKQogewogfQogCi1ib29sIEFy
cmF5QmFzZTo6YXNBcnJheShSZWZQdHI8QXJyYXk+JiBvdXRwdXQpCitSZWZQdHI8QXJyYXk+IEFy
cmF5QmFzZTo6YXNBcnJheSgpCiB7CiAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKEFycmF5QmFz
ZSkgPT0gc2l6ZW9mKEFycmF5KSwgY2Fubm90X2Nhc3QpOwotICAgIG91dHB1dCA9IHN0YXRpY19j
YXN0PEFycmF5Kj4odGhpcyk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHN0YXRpY19j
YXN0PEFycmF5Kj4odGhpcyk7CiB9CiAKIHZvaWQgQXJyYXlCYXNlOjp3cml0ZUpTT04oU3RyaW5n
QnVpbGRlciYgb3V0cHV0KSBjb25zdAogewogICAgIG91dHB1dC5hcHBlbmQoJ1snKTsKLSAgICBm
b3IgKFZlY3RvcjxSZWZQdHI8VmFsdWU+Pjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX21hcC5iZWdp
bigpOyBpdCAhPSBtX21hcC5lbmQoKTsgKytpdCkgeworICAgIGZvciAoYXV0byBpdCA9IG1fbWFw
LmJlZ2luKCk7IGl0ICE9IG1fbWFwLmVuZCgpOyArK2l0KSB7CiAgICAgICAgIGlmIChpdCAhPSBt
X21hcC5iZWdpbigpKQogICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgnLCcpOwogICAgICAgICAo
Kml0KS0+d3JpdGVKU09OKG91dHB1dCk7CkBAIC04MjcsMTEgKzc1OCwxMCBAQCB2b2lkIEFycmF5
QmFzZTo6d3JpdGVKU09OKFN0cmluZ0J1aWxkZXImIG91dHB1dCkgY29uc3QKIAogQXJyYXlCYXNl
OjpBcnJheUJhc2UoKQogICAgIDogVmFsdWUoVHlwZTo6QXJyYXkpCi0gICAgLCBtX21hcCgpCiB7
CiB9CiAKLVJlZlB0cjxWYWx1ZT4gQXJyYXlCYXNlOjpnZXQoc2l6ZV90IGluZGV4KSBjb25zdAor
UmVmPFZhbHVlPiBBcnJheUJhc2U6OmdldChzaXplX3QgaW5kZXgpIGNvbnN0CiB7CiAgICAgUkVM
RUFTRV9BU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihpbmRleCA8IG1fbWFwLnNpemUo
KSk7CiAgICAgcmV0dXJuIG1fbWFwW2luZGV4XTsKQEAgLTg1MCwxMCArNzgwLDggQEAgUmVmPEFy
cmF5PiBBcnJheTo6Y3JlYXRlKCkKIHNpemVfdCBBcnJheUJhc2U6Om1lbW9yeUNvc3QoKSBjb25z
dAogewogICAgIHNpemVfdCBtZW1vcnlDb3N0ID0gVmFsdWU6Om1lbW9yeUNvc3QoKTsKLSAgICBm
b3IgKGNvbnN0IGF1dG8mIGl0ZW0gOiBtX21hcCkgewotICAgICAgICBpZiAoaXRlbSkKLSAgICAg
ICAgICAgIG1lbW9yeUNvc3QgKz0gaXRlbS0+bWVtb3J5Q29zdCgpOwotICAgIH0KKyAgICBmb3Ig
KGNvbnN0IGF1dG8mIGl0ZW0gOiBtX21hcCkKKyAgICAgICAgbWVtb3J5Q29zdCArPSBpdGVtLT5t
ZW1vcnlDb3N0KCk7CiAgICAgcmV0dXJuIG1lbW9yeUNvc3Q7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XVEYvd3RmL0pTT05WYWx1ZXMuaCBiL1NvdXJjZS9XVEYvd3RmL0pTT05WYWx1ZXMuaApp
bmRleCBlYmFiYzQ0OWY4ODBiMzlkM2ZhZGU3OGNkNjFiMWM0ZDVlMGU2ODYzLi40MzA3NDUzZDlj
YzhmODhjYzE2OTljZDg4NTcyMTY4NzdmZGM5YjA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0
Zi9KU09OVmFsdWVzLmgKKysrIGIvU291cmNlL1dURi93dGYvSlNPTlZhbHVlcy5oCkBAIC05Miwy
MiArOTIsMTUgQEAgcHVibGljOgogICAgIFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlw
ZTsgfQogICAgIGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1cm4gbV90eXBlID09IFR5cGU6Ok51
bGw7IH0KIAotICAgIGJvb2wgYXNCb29sZWFuKGJvb2wmKSBjb25zdDsKLSAgICBib29sIGFzSW50
ZWdlcihpbnQmKSBjb25zdDsKLSAgICBib29sIGFzSW50ZWdlcih1bnNpZ25lZCYpIGNvbnN0Owot
ICAgIGJvb2wgYXNJbnRlZ2VyKGxvbmcmKSBjb25zdDsKLSAgICBib29sIGFzSW50ZWdlcihsb25n
IGxvbmcmKSBjb25zdDsKLSAgICBib29sIGFzSW50ZWdlcih1bnNpZ25lZCBsb25nJikgY29uc3Q7
Ci0gICAgYm9vbCBhc0ludGVnZXIodW5zaWduZWQgbG9uZyBsb25nJikgY29uc3Q7Ci0gICAgYm9v
bCBhc0RvdWJsZShkb3VibGUmKSBjb25zdDsKLSAgICBib29sIGFzRG91YmxlKGZsb2F0JikgY29u
c3Q7Ci0gICAgYm9vbCBhc1N0cmluZyhTdHJpbmcmKSBjb25zdDsKLSAgICBib29sIGFzVmFsdWUo
UmVmUHRyPFZhbHVlPiYpOworICAgIE9wdGlvbmFsPGJvb2w+IGFzQm9vbGVhbigpIGNvbnN0Owor
ICAgIE9wdGlvbmFsPGludD4gYXNJbnRlZ2VyKCkgY29uc3Q7CisgICAgT3B0aW9uYWw8ZG91Ymxl
PiBhc0RvdWJsZSgpIGNvbnN0OworICAgIFN0cmluZyBhc1N0cmluZygpIGNvbnN0OworICAgIFJl
ZlB0cjxWYWx1ZT4gYXNWYWx1ZSgpOworICAgIHZpcnR1YWwgUmVmUHRyPE9iamVjdD4gYXNPYmpl
Y3QoKTsKKyAgICB2aXJ0dWFsIFJlZlB0cjxBcnJheT4gYXNBcnJheSgpOwogCi0gICAgdmlydHVh
bCBib29sIGFzT2JqZWN0KFJlZlB0cjxPYmplY3Q+Jik7Ci0gICAgdmlydHVhbCBib29sIGFzQXJy
YXkoUmVmUHRyPEFycmF5PiYpOwotCi0gICAgc3RhdGljIGJvb2wgcGFyc2VKU09OKGNvbnN0IFN0
cmluZyYganNvbklucHV0LCBSZWZQdHI8VmFsdWU+JiBvdXRwdXQpOworICAgIHN0YXRpYyBSZWZQ
dHI8VmFsdWU+IHBhcnNlSlNPTihjb25zdCBTdHJpbmcmKTsKICAgICBzdGF0aWMgdm9pZCBlc2Nh
cGVTdHJpbmcoU3RyaW5nQnVpbGRlciYsIFN0cmluZ1ZpZXcpOwogCiAgICAgU3RyaW5nIHRvSlNP
TlN0cmluZygpIGNvbnN0OwpAQCAtMTcyLDk1ICsxNjUsNjMgQEAgcHJpdmF0ZToKIAogY2xhc3Mg
V1RGX0VYUE9SVF9QUklWQVRFIE9iamVjdEJhc2UgOiBwdWJsaWMgVmFsdWUgewogcHJpdmF0ZToK
LSAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8VmFsdWU+PiBEaWN0aW9uYXJ5Owor
ICAgIHVzaW5nIERhdGFTdG9yYWdlID0gSGFzaE1hcDxTdHJpbmcsIFJlZjxWYWx1ZT4+OworICAg
IHVzaW5nIE9yZGVyU3RvcmFnZSA9IFZlY3RvcjxTdHJpbmc+OwogCiBwdWJsaWM6Ci0gICAgdHlw
ZWRlZiBEaWN0aW9uYXJ5OjppdGVyYXRvciBpdGVyYXRvcjsKLSAgICB0eXBlZGVmIERpY3Rpb25h
cnk6OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOworICAgIHVzaW5nIGl0ZXJhdG9yID0g
RGF0YVN0b3JhZ2U6Oml0ZXJhdG9yOworICAgIHVzaW5nIGNvbnN0X2l0ZXJhdG9yID0gRGF0YVN0
b3JhZ2U6OmNvbnN0X2l0ZXJhdG9yOwogCi0gICAgT2JqZWN0KiBvcGVuQWNjZXNzb3JzKCk7Cisg
ICAgUmVmUHRyPE9iamVjdD4gYXNPYmplY3QoKSBmaW5hbDsKIAogICAgIHNpemVfdCBtZW1vcnlD
b3N0KCkgY29uc3QgZmluYWw7CiAKIHByb3RlY3RlZDoKICAgICB+T2JqZWN0QmFzZSgpIG92ZXJy
aWRlOwogCi0gICAgYm9vbCBhc09iamVjdChSZWZQdHI8T2JqZWN0PiYgb3V0cHV0KSBvdmVycmlk
ZTsKLQogICAgIC8vIEZJWE1FOiB1c2UgdGVtcGxhdGVzIHRvIHJlZHVjZSB0aGUgYW1vdW50IG9m
IGR1cGxpY2F0ZWQgc2V0KigpIG1ldGhvZHMuCiAgICAgdm9pZCBzZXRCb29sZWFuKGNvbnN0IFN0
cmluZyYgbmFtZSwgYm9vbCk7CiAgICAgdm9pZCBzZXRJbnRlZ2VyKGNvbnN0IFN0cmluZyYgbmFt
ZSwgaW50KTsKICAgICB2b2lkIHNldERvdWJsZShjb25zdCBTdHJpbmcmIG5hbWUsIGRvdWJsZSk7
CiAgICAgdm9pZCBzZXRTdHJpbmcoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmKTsK
LSAgICB2b2lkIHNldFZhbHVlKGNvbnN0IFN0cmluZyYgbmFtZSwgUmVmUHRyPFZhbHVlPiYmKTsK
LSAgICB2b2lkIHNldE9iamVjdChjb25zdCBTdHJpbmcmIG5hbWUsIFJlZlB0cjxPYmplY3RCYXNl
PiYmKTsKLSAgICB2b2lkIHNldEFycmF5KGNvbnN0IFN0cmluZyYgbmFtZSwgUmVmUHRyPEFycmF5
QmFzZT4mJik7CisgICAgdm9pZCBzZXRWYWx1ZShjb25zdCBTdHJpbmcmIG5hbWUsIFJlZjxWYWx1
ZT4mJik7CisgICAgdm9pZCBzZXRPYmplY3QoY29uc3QgU3RyaW5nJiBuYW1lLCBSZWY8T2JqZWN0
QmFzZT4mJik7CisgICAgdm9pZCBzZXRBcnJheShjb25zdCBTdHJpbmcmIG5hbWUsIFJlZjxBcnJh
eUJhc2U+JiYpOwogCiAgICAgaXRlcmF0b3IgZmluZChjb25zdCBTdHJpbmcmIG5hbWUpOwogICAg
IGNvbnN0X2l0ZXJhdG9yIGZpbmQoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdDsKIAotICAgIC8v
IEZJWE1FOiB1c2UgdGVtcGxhdGVzIHRvIHJlZHVjZSB0aGUgYW1vdW50IG9mIGR1cGxpY2F0ZWQg
Z2V0KigpIG1ldGhvZHMuCi0gICAgYm9vbCBnZXRCb29sZWFuKGNvbnN0IFN0cmluZyYgbmFtZSwg
Ym9vbCYgb3V0cHV0KSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBUPiBib29sIGdldERvdWJs
ZShjb25zdCBTdHJpbmcmIG5hbWUsIFQmIG91dHB1dCkgY29uc3QKLSAgICB7Ci0gICAgICAgIFJl
ZlB0cjxWYWx1ZT4gdmFsdWU7Ci0gICAgICAgIGlmICghZ2V0VmFsdWUobmFtZSwgdmFsdWUpKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIHJldHVybiB2YWx1ZS0+YXNEb3Vi
bGUob3V0cHV0KTsKLSAgICB9Ci0gICAgdGVtcGxhdGU8Y2xhc3MgVD4gYm9vbCBnZXRJbnRlZ2Vy
KGNvbnN0IFN0cmluZyYgbmFtZSwgVCYgb3V0cHV0KSBjb25zdAotICAgIHsKLSAgICAgICAgUmVm
UHRyPFZhbHVlPiB2YWx1ZTsKLSAgICAgICAgaWYgKCFnZXRWYWx1ZShuYW1lLCB2YWx1ZSkpCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgcmV0dXJuIHZhbHVlLT5hc0ludGVn
ZXIob3V0cHV0KTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTxjbGFzcyBUPiBPcHRpb25hbDxUPiBn
ZXROdW1iZXIoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdAotICAgIHsKLSAgICAgICAgUmVmUHRy
PFZhbHVlPiB2YWx1ZTsKLSAgICAgICAgaWYgKCFnZXRWYWx1ZShuYW1lLCB2YWx1ZSkpCi0gICAg
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgICAgIFQgcmVzdWx0OwotICAgICAg
ICBpZiAoIXZhbHVlLT5hc0RvdWJsZShyZXN1bHQpKQotICAgICAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKLQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIGJvb2wgZ2V0
U3RyaW5nKGNvbnN0IFN0cmluZyYgbmFtZSwgU3RyaW5nJiBvdXRwdXQpIGNvbnN0OwotICAgIGJv
b2wgZ2V0T2JqZWN0KGNvbnN0IFN0cmluZyYgbmFtZSwgUmVmUHRyPE9iamVjdD4mKSBjb25zdDsK
LSAgICBib29sIGdldEFycmF5KGNvbnN0IFN0cmluZyYgbmFtZSwgUmVmUHRyPEFycmF5PiYpIGNv
bnN0OwotICAgIGJvb2wgZ2V0VmFsdWUoY29uc3QgU3RyaW5nJiBuYW1lLCBSZWZQdHI8VmFsdWU+
JikgY29uc3Q7CisgICAgT3B0aW9uYWw8Ym9vbD4gZ2V0Qm9vbGVhbihjb25zdCBTdHJpbmcmIG5h
bWUpIGNvbnN0OworICAgIE9wdGlvbmFsPGRvdWJsZT4gZ2V0RG91YmxlKGNvbnN0IFN0cmluZyYg
bmFtZSkgY29uc3Q7CisgICAgT3B0aW9uYWw8aW50PiBnZXRJbnRlZ2VyKGNvbnN0IFN0cmluZyYg
bmFtZSkgY29uc3Q7CisgICAgU3RyaW5nIGdldFN0cmluZyhjb25zdCBTdHJpbmcmIG5hbWUpIGNv
bnN0OworICAgIFJlZlB0cjxPYmplY3Q+IGdldE9iamVjdChjb25zdCBTdHJpbmcmIG5hbWUpIGNv
bnN0OworICAgIFJlZlB0cjxBcnJheT4gZ2V0QXJyYXkoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25z
dDsKKyAgICBSZWZQdHI8VmFsdWU+IGdldFZhbHVlKGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3Q7
CiAKICAgICB2b2lkIHJlbW92ZShjb25zdCBTdHJpbmcmIG5hbWUpOwogCi0gICAgdm9pZCB3cml0
ZUpTT04oU3RyaW5nQnVpbGRlciYgb3V0cHV0KSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIHdy
aXRlSlNPTihTdHJpbmdCdWlsZGVyJiBvdXRwdXQpIGNvbnN0IGZpbmFsOwogCiAgICAgaXRlcmF0
b3IgYmVnaW4oKSB7IHJldHVybiBtX21hcC5iZWdpbigpOyB9CiAgICAgaXRlcmF0b3IgZW5kKCkg
eyByZXR1cm4gbV9tYXAuZW5kKCk7IH0KICAgICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0
IHsgcmV0dXJuIG1fbWFwLmJlZ2luKCk7IH0KICAgICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25z
dCB7IHJldHVybiBtX21hcC5lbmQoKTsgfQogCi0gICAgaW50IHNpemUoKSBjb25zdCB7IHJldHVy
biBtX21hcC5zaXplKCk7IH0KKyAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9t
YXAuc2l6ZSgpOyB9CiAKIHByb3RlY3RlZDoKICAgICBPYmplY3RCYXNlKCk7CiAKIHByaXZhdGU6
Ci0gICAgRGljdGlvbmFyeSBtX21hcDsKLSAgICBWZWN0b3I8U3RyaW5nPiBtX29yZGVyOworICAg
IERhdGFTdG9yYWdlIG1fbWFwOworICAgIE9yZGVyU3RvcmFnZSBtX29yZGVyOwogfTsKIAogY2xh
c3MgT2JqZWN0IDogcHVibGljIE9iamVjdEJhc2UgewogcHVibGljOgogICAgIHN0YXRpYyBXVEZf
RVhQT1JUX1BSSVZBVEUgUmVmPE9iamVjdD4gY3JlYXRlKCk7CiAKLSAgICB1c2luZyBPYmplY3RC
YXNlOjphc09iamVjdDsKLQogICAgIC8vIFRoaXMgY2xhc3MgZXhwZWN0ZWQgbm9uLWN5Y2xpYyB2
YWx1ZXMsIGFzIHdlIGNhbm5vdCBzZXJpYWxpemUgY3ljbGVzIGluIEpTT04uCiAgICAgdXNpbmcg
T2JqZWN0QmFzZTo6c2V0Qm9vbGVhbjsKICAgICB1c2luZyBPYmplY3RCYXNlOjpzZXRJbnRlZ2Vy
OwpAQCAtMjc0LDcgKzIzNSw2IEBAIHB1YmxpYzoKICAgICB1c2luZyBPYmplY3RCYXNlOjpnZXRC
b29sZWFuOwogICAgIHVzaW5nIE9iamVjdEJhc2U6OmdldEludGVnZXI7CiAgICAgdXNpbmcgT2Jq
ZWN0QmFzZTo6Z2V0RG91YmxlOwotICAgIHVzaW5nIE9iamVjdEJhc2U6OmdldE51bWJlcjsKICAg
ICB1c2luZyBPYmplY3RCYXNlOjpnZXRTdHJpbmc7CiAgICAgdXNpbmcgT2JqZWN0QmFzZTo6Z2V0
T2JqZWN0OwogICAgIHVzaW5nIE9iamVjdEJhc2U6OmdldEFycmF5OwpAQCAtMjkwLDQ5ICsyNTAs
NDkgQEAgcHVibGljOgogCiAKIGNsYXNzIFdURl9FWFBPUlRfUFJJVkFURSBBcnJheUJhc2UgOiBw
dWJsaWMgVmFsdWUgeworcHJpdmF0ZToKKyAgICB1c2luZyBEYXRhU3RvcmFnZSA9IFZlY3RvcjxS
ZWY8VmFsdWU+PjsKKwogcHVibGljOgotICAgIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxWYWx1ZT4+
OjppdGVyYXRvciBpdGVyYXRvcjsKLSAgICB0eXBlZGVmIFZlY3RvcjxSZWZQdHI8VmFsdWU+Pjo6
Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CisgICAgdXNpbmcgaXRlcmF0b3IgPSBEYXRh
U3RvcmFnZTo6aXRlcmF0b3I7CisgICAgdXNpbmcgY29uc3RfaXRlcmF0b3IgPSBEYXRhU3RvcmFn
ZTo6Y29uc3RfaXRlcmF0b3I7CiAKLSAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7IHJldHVy
biBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9tYXAuc2l6ZSgpKTsgfQorICAgIHNpemVfdCBsZW5n
dGgoKSBjb25zdCB7IHJldHVybiBtX21hcC5zaXplKCk7IH0KIAotICAgIFJlZlB0cjxWYWx1ZT4g
Z2V0KHNpemVfdCBpbmRleCkgY29uc3Q7CisgICAgUmVmPFZhbHVlPiBnZXQoc2l6ZV90IGluZGV4
KSBjb25zdDsKIAogICAgIHNpemVfdCBtZW1vcnlDb3N0KCkgY29uc3QgZmluYWw7CiAKKyAgICBS
ZWZQdHI8QXJyYXk+IGFzQXJyYXkoKSBmaW5hbDsKKwogcHJvdGVjdGVkOgogICAgIH5BcnJheUJh
c2UoKSBvdmVycmlkZTsKIAotICAgIGJvb2wgYXNBcnJheShSZWZQdHI8QXJyYXk+Jikgb3ZlcnJp
ZGU7Ci0KICAgICB2b2lkIHB1c2hCb29sZWFuKGJvb2wpOwogICAgIHZvaWQgcHVzaEludGVnZXIo
aW50KTsKICAgICB2b2lkIHB1c2hEb3VibGUoZG91YmxlKTsKICAgICB2b2lkIHB1c2hTdHJpbmco
Y29uc3QgU3RyaW5nJik7Ci0gICAgdm9pZCBwdXNoVmFsdWUoUmVmUHRyPFZhbHVlPiYmKTsKLSAg
ICB2b2lkIHB1c2hPYmplY3QoUmVmUHRyPE9iamVjdEJhc2U+JiYpOwotICAgIHZvaWQgcHVzaEFy
cmF5KFJlZlB0cjxBcnJheUJhc2U+JiYpOwotCi0gICAgdm9pZCB3cml0ZUpTT04oU3RyaW5nQnVp
bGRlciYgb3V0cHV0KSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIHB1c2hWYWx1ZShSZWY8VmFs
dWU+JiYpOworICAgIHZvaWQgcHVzaE9iamVjdChSZWY8T2JqZWN0QmFzZT4mJik7CisgICAgdm9p
ZCBwdXNoQXJyYXkoUmVmPEFycmF5QmFzZT4mJik7CiAKICAgICBpdGVyYXRvciBiZWdpbigpIHsg
cmV0dXJuIG1fbWFwLmJlZ2luKCk7IH0KICAgICBpdGVyYXRvciBlbmQoKSB7IHJldHVybiBtX21h
cC5lbmQoKTsgfQogICAgIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gbV9t
YXAuYmVnaW4oKTsgfQogICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1f
bWFwLmVuZCgpOyB9CisgICAgdm9pZCB3cml0ZUpTT04oU3RyaW5nQnVpbGRlciYgb3V0cHV0KSBj
b25zdCBmaW5hbDsKIAogcHJvdGVjdGVkOgogICAgIEFycmF5QmFzZSgpOwogCiBwcml2YXRlOgot
ICAgIFZlY3RvcjxSZWZQdHI8VmFsdWU+PiBtX21hcDsKKyAgICBEYXRhU3RvcmFnZSBtX21hcDsK
IH07CiAKLWNsYXNzIEFycmF5IDogcHVibGljIEFycmF5QmFzZSB7CitjbGFzcyBBcnJheSBmaW5h
bCA6IHB1YmxpYyBBcnJheUJhc2UgewogcHVibGljOgogICAgIHN0YXRpYyBXVEZfRVhQT1JUX1BS
SVZBVEUgUmVmPEFycmF5PiBjcmVhdGUoKTsKIAotICAgIHVzaW5nIEFycmF5QmFzZTo6YXNBcnJh
eTsKLQogICAgIC8vIFRoaXMgY2xhc3MgZXhwZWN0ZWQgbm9uLWN5Y2xpYyB2YWx1ZXMsIGFzIHdl
IGNhbm5vdCBzZXJpYWxpemUgY3ljbGVzIGluIEpTT04uCiAgICAgdXNpbmcgQXJyYXlCYXNlOjpw
dXNoQm9vbGVhbjsKICAgICB1c2luZyBBcnJheUJhc2U6OnB1c2hJbnRlZ2VyOwpAQCAtMzQ4LDcg
KzMwOCw2IEBAIHB1YmxpYzoKICAgICB1c2luZyBBcnJheUJhc2U6OmVuZDsKIH07CiAKLQogaW5s
aW5lIE9iamVjdEJhc2U6Oml0ZXJhdG9yIE9iamVjdEJhc2U6OmZpbmQoY29uc3QgU3RyaW5nJiBu
YW1lKQogewogICAgIHJldHVybiBtX21hcC5maW5kKG5hbWUpOwpAQCAtMzc5LDIzICszMzgsMjAg
QEAgaW5saW5lIHZvaWQgT2JqZWN0QmFzZTo6c2V0U3RyaW5nKGNvbnN0IFN0cmluZyYgbmFtZSwg
Y29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICBzZXRWYWx1ZShuYW1lLCBWYWx1ZTo6Y3JlYXRlKHZh
bHVlKSk7CiB9CiAKLWlubGluZSB2b2lkIE9iamVjdEJhc2U6OnNldFZhbHVlKGNvbnN0IFN0cmlu
ZyYgbmFtZSwgUmVmUHRyPFZhbHVlPiYmIHZhbHVlKQoraW5saW5lIHZvaWQgT2JqZWN0QmFzZTo6
c2V0VmFsdWUoY29uc3QgU3RyaW5nJiBuYW1lLCBSZWY8VmFsdWU+JiYgdmFsdWUpCiB7Ci0gICAg
QVNTRVJUKHZhbHVlKTsKICAgICBpZiAobV9tYXAuc2V0KG5hbWUsIFdURk1vdmUodmFsdWUpKS5p
c05ld0VudHJ5KQogICAgICAgICBtX29yZGVyLmFwcGVuZChuYW1lKTsKIH0KIAotaW5saW5lIHZv
aWQgT2JqZWN0QmFzZTo6c2V0T2JqZWN0KGNvbnN0IFN0cmluZyYgbmFtZSwgUmVmUHRyPE9iamVj
dEJhc2U+JiYgdmFsdWUpCitpbmxpbmUgdm9pZCBPYmplY3RCYXNlOjpzZXRPYmplY3QoY29uc3Qg
U3RyaW5nJiBuYW1lLCBSZWY8T2JqZWN0QmFzZT4mJiB2YWx1ZSkKIHsKLSAgICBBU1NFUlQodmFs
dWUpOwogICAgIGlmIChtX21hcC5zZXQobmFtZSwgV1RGTW92ZSh2YWx1ZSkpLmlzTmV3RW50cnkp
CiAgICAgICAgIG1fb3JkZXIuYXBwZW5kKG5hbWUpOwogfQogCi1pbmxpbmUgdm9pZCBPYmplY3RC
YXNlOjpzZXRBcnJheShjb25zdCBTdHJpbmcmIG5hbWUsIFJlZlB0cjxBcnJheUJhc2U+JiYgdmFs
dWUpCitpbmxpbmUgdm9pZCBPYmplY3RCYXNlOjpzZXRBcnJheShjb25zdCBTdHJpbmcmIG5hbWUs
IFJlZjxBcnJheUJhc2U+JiYgdmFsdWUpCiB7Ci0gICAgQVNTRVJUKHZhbHVlKTsKICAgICBpZiAo
bV9tYXAuc2V0KG5hbWUsIFdURk1vdmUodmFsdWUpKS5pc05ld0VudHJ5KQogICAgICAgICBtX29y
ZGVyLmFwcGVuZChuYW1lKTsKIH0KQEAgLTQyMCwyNiArMzc2LDIzIEBAIGlubGluZSB2b2lkIEFy
cmF5QmFzZTo6cHVzaFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgIG1fbWFwLmFwcGVu
ZChWYWx1ZTo6Y3JlYXRlKHZhbHVlKSk7CiB9CiAKLWlubGluZSB2b2lkIEFycmF5QmFzZTo6cHVz
aFZhbHVlKFJlZlB0cjxWYWx1ZT4mJiB2YWx1ZSkKK2lubGluZSB2b2lkIEFycmF5QmFzZTo6cHVz
aFZhbHVlKFJlZjxWYWx1ZT4mJiB2YWx1ZSkKIHsKLSAgICBBU1NFUlQodmFsdWUpOwogICAgIG1f
bWFwLmFwcGVuZChXVEZNb3ZlKHZhbHVlKSk7CiB9CiAKLWlubGluZSB2b2lkIEFycmF5QmFzZTo6
cHVzaE9iamVjdChSZWZQdHI8T2JqZWN0QmFzZT4mJiB2YWx1ZSkKK2lubGluZSB2b2lkIEFycmF5
QmFzZTo6cHVzaE9iamVjdChSZWY8T2JqZWN0QmFzZT4mJiB2YWx1ZSkKIHsKLSAgICBBU1NFUlQo
dmFsdWUpOwogICAgIG1fbWFwLmFwcGVuZChXVEZNb3ZlKHZhbHVlKSk7CiB9CiAKLWlubGluZSB2
b2lkIEFycmF5QmFzZTo6cHVzaEFycmF5KFJlZlB0cjxBcnJheUJhc2U+JiYgdmFsdWUpCitpbmxp
bmUgdm9pZCBBcnJheUJhc2U6OnB1c2hBcnJheShSZWY8QXJyYXlCYXNlPiYmIHZhbHVlKQogewot
ICAgIEFTU0VSVCh2YWx1ZSk7CiAgICAgbV9tYXAuYXBwZW5kKFdURk1vdmUodmFsdWUpKTsKIH0K
IAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KLWNsYXNzIEFycmF5T2YgOiBwdWJsaWMgQXJyYXlCYXNl
IHsKK2NsYXNzIEFycmF5T2YgZmluYWwgOiBwdWJsaWMgQXJyYXlCYXNlIHsKIHByaXZhdGU6CiAg
ICAgQXJyYXlPZigpIHsgfQogCkBAIC00NTAsNyArNDAzLDcgQEAgcHJpdmF0ZToKICAgICB9CiAK
IHB1YmxpYzoKLSAgICB2b2lkIGFkZEl0ZW0oUmVmUHRyPFQ+JiYgdmFsdWUpCisgICAgdm9pZCBh
ZGRJdGVtKFJlZjxUPiYmIHZhbHVlKQogICAgIHsKICAgICAgICAgY2FzdGVkQXJyYXkoKS5wdXNo
VmFsdWUoV1RGTW92ZSh2YWx1ZSkpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvYXBwbGljYXRpb25tYW5pZmVzdC9BcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXBwbGljYXRpb25tYW5pZmVzdC9BcHBsaWNhdGlv
bk1hbmlmZXN0UGFyc2VyLmNwcAppbmRleCA4ZGM3NmZhMmU1OWVhNjdlMDIxNzM4YzMxMWEzNTc3
ZjRkMzZlNjkxLi5mODhjYWRhNjYwZjM5YWRlZmEwMDZkMDk1ZWM1ODdmYjI5MzQ2MjBmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FwcGxpY2F0aW9ubWFuaWZlc3QvQXBwbGlj
YXRpb25NYW5pZmVzdFBhcnNlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBs
aWNhdGlvbm1hbmlmZXN0L0FwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXIuY3BwCkBAIC01NCwxNCAr
NTQsMTQgQEAgQXBwbGljYXRpb25NYW5pZmVzdCBBcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyOjpw
YXJzZU1hbmlmZXN0KGNvbnN0IFN0cmluZyYgdGV4dCwKIHsKICAgICBtX21hbmlmZXN0VVJMID0g
bWFuaWZlc3RVUkw7CiAKLSAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IGpzb25WYWx1ZTsKLSAgICBp
ZiAoIUpTT046OlZhbHVlOjpwYXJzZUpTT04odGV4dCwganNvblZhbHVlKSkgeworICAgIGF1dG8g
anNvblZhbHVlID0gSlNPTjo6VmFsdWU6OnBhcnNlSlNPTih0ZXh0KTsKKyAgICBpZiAoIWpzb25W
YWx1ZSkgewogICAgICAgICBsb2dEZXZlbG9wZXJXYXJuaW5nKCJUaGUgbWFuaWZlc3QgaXMgbm90
IHZhbGlkIEpTT04gZGF0YS4iX3MpOwogICAgICAgICBqc29uVmFsdWUgPSBKU09OOjpPYmplY3Q6
OmNyZWF0ZSgpOwogICAgIH0KIAotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG1hbmlmZXN0Owot
ICAgIGlmICghanNvblZhbHVlLT5hc09iamVjdChtYW5pZmVzdCkpIHsKKyAgICBhdXRvIG1hbmlm
ZXN0ID0ganNvblZhbHVlLT5hc09iamVjdCgpOworICAgIGlmICghbWFuaWZlc3QpIHsKICAgICAg
ICAgbG9nRGV2ZWxvcGVyV2FybmluZygiVGhlIG1hbmlmZXN0IGlzIG5vdCBhIEpTT04gdmFsdWUg
b2YgdHlwZSBcIm9iamVjdFwiLiJfcyk7CiAgICAgICAgIG1hbmlmZXN0ID0gSlNPTjo6T2JqZWN0
OjpjcmVhdGUoKTsKICAgICB9CkBAIC05NiwxMiArOTYsMTIgQEAgdm9pZCBBcHBsaWNhdGlvbk1h
bmlmZXN0UGFyc2VyOjpsb2dEZXZlbG9wZXJXYXJuaW5nKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkK
IAogVVJMIEFwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXI6OnBhcnNlU3RhcnRVUkwoY29uc3QgSlNP
Tjo6T2JqZWN0JiBtYW5pZmVzdCwgY29uc3QgVVJMJiBkb2N1bWVudFVSTCkKIHsKLSAgICBSZWZQ
dHI8SlNPTjo6VmFsdWU+IHZhbHVlOwotICAgIGlmICghbWFuaWZlc3QuZ2V0VmFsdWUoInN0YXJ0
X3VybCIsIHZhbHVlKSkKKyAgICBhdXRvIHZhbHVlID0gbWFuaWZlc3QuZ2V0VmFsdWUoInN0YXJ0
X3VybCJfcyk7CisgICAgaWYgKCF2YWx1ZSkKICAgICAgICAgcmV0dXJuIGRvY3VtZW50VVJMOwog
Ci0gICAgU3RyaW5nIHN0cmluZ1ZhbHVlOwotICAgIGlmICghdmFsdWUtPmFzU3RyaW5nKHN0cmlu
Z1ZhbHVlKSkgeworICAgIGF1dG8gc3RyaW5nVmFsdWUgPSB2YWx1ZS0+YXNTdHJpbmcoKTsKKyAg
ICBpZiAoIXN0cmluZ1ZhbHVlKSB7CiAgICAgICAgIGxvZ01hbmlmZXN0UHJvcGVydHlOb3RBU3Ry
aW5nKCJzdGFydF91cmwiX3MpOwogICAgICAgICByZXR1cm4gZG9jdW1lbnRVUkw7CiAgICAgfQpA
QCAtMTI3LDEyICsxMjcsMTIgQEAgVVJMIEFwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXI6OnBhcnNl
U3RhcnRVUkwoY29uc3QgSlNPTjo6T2JqZWN0JiBtYW5pZmVzdCwgY29uc3QKIAogQXBwbGljYXRp
b25NYW5pZmVzdDo6RGlzcGxheSBBcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyOjpwYXJzZURpc3Bs
YXkoY29uc3QgSlNPTjo6T2JqZWN0JiBtYW5pZmVzdCkKIHsKLSAgICBSZWZQdHI8SlNPTjo6VmFs
dWU+IHZhbHVlOwotICAgIGlmICghbWFuaWZlc3QuZ2V0VmFsdWUoImRpc3BsYXkiX3MsIHZhbHVl
KSkKKyAgICBhdXRvIHZhbHVlID0gbWFuaWZlc3QuZ2V0VmFsdWUoImRpc3BsYXkiX3MpOworICAg
IGlmICghdmFsdWUpCiAgICAgICAgIHJldHVybiBBcHBsaWNhdGlvbk1hbmlmZXN0OjpEaXNwbGF5
OjpCcm93c2VyOwogCi0gICAgU3RyaW5nIHN0cmluZ1ZhbHVlOwotICAgIGlmICghdmFsdWUtPmFz
U3RyaW5nKHN0cmluZ1ZhbHVlKSkgeworICAgIGF1dG8gc3RyaW5nVmFsdWUgPSB2YWx1ZS0+YXNT
dHJpbmcoKTsKKyAgICBpZiAoIXN0cmluZ1ZhbHVlKSB7CiAgICAgICAgIGxvZ01hbmlmZXN0UHJv
cGVydHlOb3RBU3RyaW5nKCJkaXNwbGF5Il9zKTsKICAgICAgICAgcmV0dXJuIEFwcGxpY2F0aW9u
TWFuaWZlc3Q6OkRpc3BsYXk6OkJyb3dzZXI7CiAgICAgfQpAQCAtMTk1LDEyICsxOTUsMTIgQEAg
VVJMIEFwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXI6OnBhcnNlU2NvcGUoY29uc3QgSlNPTjo6T2Jq
ZWN0JiBtYW5pZmVzdCwgY29uc3QgVVIKIHsKICAgICBVUkwgZGVmYXVsdFNjb3BlIHsgc3RhcnRV
UkwsICIuLyIgfTsKIAotICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gdmFsdWU7Ci0gICAgaWYgKCFt
YW5pZmVzdC5nZXRWYWx1ZSgic2NvcGUiLCB2YWx1ZSkpCisgICAgYXV0byB2YWx1ZSA9IG1hbmlm
ZXN0LmdldFZhbHVlKCJzY29wZSIpOworICAgIGlmICghdmFsdWUpCiAgICAgICAgIHJldHVybiBk
ZWZhdWx0U2NvcGU7CiAKLSAgICBTdHJpbmcgc3RyaW5nVmFsdWU7Ci0gICAgaWYgKCF2YWx1ZS0+
YXNTdHJpbmcoc3RyaW5nVmFsdWUpKSB7CisgICAgYXV0byBzdHJpbmdWYWx1ZSA9IHZhbHVlLT5h
c1N0cmluZygpOworICAgIGlmICghc3RyaW5nVmFsdWUpIHsKICAgICAgICAgbG9nTWFuaWZlc3RQ
cm9wZXJ0eU5vdEFTdHJpbmcoInNjb3BlIl9zKTsKICAgICAgICAgcmV0dXJuIGRlZmF1bHRTY29w
ZTsKICAgICB9CkBAIC0yMzEsMTIgKzIzMSwxMiBAQCBVUkwgQXBwbGljYXRpb25NYW5pZmVzdFBh
cnNlcjo6cGFyc2VTY29wZShjb25zdCBKU09OOjpPYmplY3QmIG1hbmlmZXN0LCBjb25zdCBVUgog
CiBTdHJpbmcgQXBwbGljYXRpb25NYW5pZmVzdFBhcnNlcjo6cGFyc2VHZW5lcmljU3RyaW5nKGNv
bnN0IEpTT046Ok9iamVjdCYgbWFuaWZlc3QsIGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKQog
ewotICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gdmFsdWU7Ci0gICAgaWYgKCFtYW5pZmVzdC5nZXRW
YWx1ZShwcm9wZXJ0eU5hbWUsIHZhbHVlKSkKKyAgICBhdXRvIHZhbHVlID0gbWFuaWZlc3QuZ2V0
VmFsdWUocHJvcGVydHlOYW1lKTsKKyAgICBpZiAoIXZhbHVlKQogICAgICAgICByZXR1cm4geyB9
OwogCi0gICAgU3RyaW5nIHN0cmluZ1ZhbHVlOwotICAgIGlmICghdmFsdWUtPmFzU3RyaW5nKHN0
cmluZ1ZhbHVlKSkgeworICAgIGF1dG8gc3RyaW5nVmFsdWUgPSB2YWx1ZS0+YXNTdHJpbmcoKTsK
KyAgICBpZiAoIXN0cmluZ1ZhbHVlKSB7CiAgICAgICAgIGxvZ01hbmlmZXN0UHJvcGVydHlOb3RB
U3RyaW5nKHByb3BlcnR5TmFtZSk7CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9Jbml0RGF0YVJlZ2lz
dHJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW5jcnlwdGVkbWVkaWEvSW5pdERhdGFS
ZWdpc3RyeS5jcHAKaW5kZXggM2IyNWQwNmIxMjNhMWE1MWEwYTJhY2ZiNGY2NTZmOGQ5NGFkYjNm
Yy4uNmFiMmY4NzhhM2Y4Y2E5OGU4MmIwZTQyZTVmMGJhYWEyMjhiMWM1YyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9Jbml0RGF0YVJlZ2lzdHJ5LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL0luaXREYXRhUmVn
aXN0cnkuY3BwCkBAIC02MiwyMiArNjIsMjIgQEAgc3RhdGljIE9wdGlvbmFsPFZlY3RvcjxSZWY8
U2hhcmVkQnVmZmVyPj4+IGV4dHJhY3RLZXlJRHNLZXlpZHMoY29uc3QgU2hhcmVkQnVmZmUKICAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICBTdHJpbmcganNvbiB7IGJ1ZmZlci5kYXRh
KCksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihidWZmZXIuc2l6ZSgpKSB9OwogCi0gICAgUmVmUHRy
PEpTT046OlZhbHVlPiB2YWx1ZTsKLSAgICBpZiAoIUpTT046OlZhbHVlOjpwYXJzZUpTT04oanNv
biwgdmFsdWUpKQorICAgIGF1dG8gdmFsdWUgPSBKU09OOjpWYWx1ZTo6cGFyc2VKU09OKGpzb24p
OworICAgIGlmICghdmFsdWUpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBS
ZWZQdHI8SlNPTjo6T2JqZWN0PiBvYmplY3Q7Ci0gICAgaWYgKCF2YWx1ZS0+YXNPYmplY3Qob2Jq
ZWN0KSkKKyAgICBhdXRvIG9iamVjdCA9IHZhbHVlLT5hc09iamVjdCgpOworICAgIGlmICghb2Jq
ZWN0KQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgUmVmUHRyPEpTT046OkFy
cmF5PiBraWRzQXJyYXk7Ci0gICAgaWYgKCFvYmplY3QtPmdldEFycmF5KCJraWRzIiwga2lkc0Fy
cmF5KSkKKyAgICBhdXRvIGtpZHNBcnJheSA9IG9iamVjdC0+Z2V0QXJyYXkoImtpZHMiX3MpOwor
ICAgIGlmICgha2lkc0FycmF5KQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAg
VmVjdG9yPFJlZjxTaGFyZWRCdWZmZXI+PiBrZXlJRHM7CiAgICAgZm9yIChhdXRvJiB2YWx1ZSA6
ICpraWRzQXJyYXkpIHsKLSAgICAgICAgU3RyaW5nIGtleUlEOwotICAgICAgICBpZiAoIXZhbHVl
LT5hc1N0cmluZyhrZXlJRCkpCisgICAgICAgIGF1dG8ga2V5SUQgPSB2YWx1ZS0+YXNTdHJpbmco
KTsKKyAgICAgICAgaWYgKCFrZXlJRCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAg
IFZlY3RvcjxjaGFyPiBrZXlJRERhdGE7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvQ29tbWFuZExpbmVBUElIb3N0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9D
b21tYW5kTGluZUFQSUhvc3QuY3BwCmluZGV4IGRjZTM1OWU3NjhlZjlhMTNhNmM2ZGUxNmQxZjhk
M2M4YmJmZjdhOTcuLjk0ZDAzZDg1ZDZkYTlmNGY4OGY4Y2QxMmU0YmZmYmQzM2I0ZGM1NjcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db21tYW5kTGluZUFQSUhvc3QuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db21tYW5kTGluZUFQSUhvc3QuY3BwCkBA
IC03Myw3ICs3Myw3IEBAIHZvaWQgQ29tbWFuZExpbmVBUElIb3N0OjpkaXNjb25uZWN0KCkKICAg
ICBtX2luc3RydW1lbnRpbmdBZ2VudHMgPSBudWxscHRyOwogfQogCi12b2lkIENvbW1hbmRMaW5l
QVBJSG9zdDo6aW5zcGVjdChKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBKU0M6OkpTVmFsdWUgdmFsdWVUb0luc3BlY3QsIEpTQzo6SlNWYWx1ZSBoaW50c1ZhbHVlKQor
dm9pZCBDb21tYW5kTGluZUFQSUhvc3Q6Omluc3BlY3QoSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4
aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIG9iamVjdCwgSlNDOjpKU1ZhbHVlIGhpbnRz
KQogewogICAgIGlmICghbV9pbnN0cnVtZW50aW5nQWdlbnRzKQogICAgICAgICByZXR1cm47CkBA
IC04MiwxMiArODIsMjAgQEAgdm9pZCBDb21tYW5kTGluZUFQSUhvc3Q6Omluc3BlY3QoSlNDOjpK
U0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjoKICAgICBpZiAoIWluc3Bl
Y3RvckFnZW50KQogICAgICAgICByZXR1cm47CiAKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBo
aW50c09iamVjdDsKLSAgICBpZiAoIUluc3BlY3Rvcjo6dG9JbnNwZWN0b3JWYWx1ZSgmbGV4aWNh
bEdsb2JhbE9iamVjdCwgaGludHNWYWx1ZSktPmFzT2JqZWN0KGhpbnRzT2JqZWN0KSkKKyAgICBh
dXRvIG9iamVjdFZhbHVlID0gSW5zcGVjdG9yOjp0b0luc3BlY3RvclZhbHVlKCZsZXhpY2FsR2xv
YmFsT2JqZWN0LCBvYmplY3QpOworICAgIGlmICghb2JqZWN0VmFsdWUpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIGF1dG8gcmVtb3RlT2JqZWN0ID0gQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlBy
b3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+OjpydW50aW1lQ2FzdChJbnNwZWN0b3I6OnRv
SW5zcGVjdG9yVmFsdWUoJmxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlVG9JbnNwZWN0KSk7Ci0g
ICAgaW5zcGVjdG9yQWdlbnQtPmluc3BlY3QoV1RGTW92ZShyZW1vdGVPYmplY3QpLCBXVEZNb3Zl
KGhpbnRzT2JqZWN0KSk7CisgICAgYXV0byBoaW50c1ZhbHVlID0gSW5zcGVjdG9yOjp0b0luc3Bl
Y3RvclZhbHVlKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCBoaW50cyk7CisgICAgaWYgKCFoaW50c1Zh
bHVlKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIGhpbnRzT2JqZWN0ID0gaGludHNWYWx1
ZS0+YXNPYmplY3QoKTsKKyAgICBpZiAoIWhpbnRzT2JqZWN0KQorICAgICAgICByZXR1cm47CisK
KyAgICBhdXRvIHJlbW90ZU9iamVjdCA9IFByb3RvY29sOjpCaW5kaW5nVHJhaXRzPFByb3RvY29s
OjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+OjpydW50aW1lQ2FzdChvYmplY3RWYWx1ZS5yZWxlYXNl
Tm9uTnVsbCgpKTsKKyAgICBpbnNwZWN0b3JBZ2VudC0+aW5zcGVjdChXVEZNb3ZlKHJlbW90ZU9i
amVjdCksIGhpbnRzT2JqZWN0LnJlbGVhc2VOb25OdWxsKCkpOwogfQogCiBDb21tYW5kTGluZUFQ
SUhvc3Q6OkV2ZW50TGlzdGVuZXJzUmVjb3JkIENvbW1hbmRMaW5lQVBJSG9zdDo6Z2V0RXZlbnRM
aXN0ZW5lcnMoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEV2ZW50VGFyZ2V0
JiB0YXJnZXQpCkBAIC0xMzYsOCArMTQ0LDcgQEAgdm9pZCBDb21tYW5kTGluZUFQSUhvc3Q6OmNs
ZWFyQ29uc29sZU1lc3NhZ2VzKCkKICAgICBpZiAoIWNvbnNvbGVBZ2VudCkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgRXJyb3JTdHJpbmcgaWdub3JlZDsKLSAgICBjb25zb2xlQWdlbnQtPmNsZWFy
TWVzc2FnZXMoaWdub3JlZCk7CisgICAgY29uc29sZUFnZW50LT5jbGVhck1lc3NhZ2VzKCk7CiB9
CiAKIHZvaWQgQ29tbWFuZExpbmVBUElIb3N0Ojpjb3B5VGV4dChjb25zdCBTdHJpbmcmIHRleHQp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQXVkaXRSZXNv
dXJjZXNPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckF1ZGl0
UmVzb3VyY2VzT2JqZWN0LmNwcAppbmRleCAwMDE0OGUwZmY0OTQ0YWJkMDkwYjgzNmVhOTMwNWVj
Zjc0OGM2ZmE0Li5iN2ZmMGUxMDRhNTUwNjkxNmNjZmE5ZDIzMGM4YjJiYmIzNjNkZjNhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQXVkaXRSZXNvdXJjZXNP
YmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBdWRpdFJl
c291cmNlc09iamVjdC5jcHAKQEAgLTEwNSw3ICsxMDUsNyBAQCBFeGNlcHRpb25PcjxJbnNwZWN0
b3JBdWRpdFJlc291cmNlc09iamVjdDo6UmVzb3VyY2VDb250ZW50PiBJbnNwZWN0b3JBdWRpdFJl
c291cgogICAgIGlmICghY2FjaGVkUmVzb3VyY2UpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24g
eyBOb3RGb3VuZEVycm9yLCBtYWtlU3RyaW5nKCJVbmtub3duIGlkZW50aWZpZXIgIl9zLCBpZCkg
fTsKIAotICAgIEVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworICAgIFByb3RvY29sOjpFcnJvclN0
cmluZyBlcnJvclN0cmluZzsKICAgICBSZXNvdXJjZUNvbnRlbnQgcmVzb3VyY2VDb250ZW50Owog
ICAgIEluc3BlY3RvclBhZ2VBZ2VudDo6cmVzb3VyY2VDb250ZW50KGVycm9yU3RyaW5nLCBmcmFt
ZSwgY2FjaGVkUmVzb3VyY2UtPnVybCgpLCAmcmVzb3VyY2VDb250ZW50LmRhdGEsICZyZXNvdXJj
ZUNvbnRlbnQuYmFzZTY0RW5jb2RlZCk7CiAgICAgaWYgKCFlcnJvclN0cmluZy5pc0VtcHR5KCkp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDYW52YXMuY3BwCmluZGV4IDVj
NTdiNjA1NzRlY2E1NzIyZDE1NDk5MmFmZGJkYzc1NWU2MzE5OWYuLmE2MWI4ZWVkYTA0MTZjZjdm
MTU0YWEwMTFjODYwY2U4ZmIwYjMyNWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JDYW52YXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JDYW52YXMuY3BwCkBAIC0zNTYsMTMgKzM1NiwxMyBAQCB2b2lkIEluc3BlY3RvckNh
bnZhczo6cmVjb3JkQWN0aW9uKGNvbnN0IFN0cmluZyYgbmFtZSwgc3RkOjppbml0aWFsaXplcl9s
aXN0PFJlYwogICAgIH0KIAogICAgIGlmICghbV9mcmFtZXMpCi0gICAgICAgIG1fZnJhbWVzID0g
SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpSZWNvcmRpbmc6OkZyYW1lPjo6Y3Jl
YXRlKCk7CisgICAgICAgIG1fZnJhbWVzID0gSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UmVjb3Jk
aW5nOjpGcmFtZT46OmNyZWF0ZSgpOwogCiAgICAgaWYgKCFtX2N1cnJlbnRBY3Rpb25zKSB7CiAg
ICAgICAgIG1fY3VycmVudEFjdGlvbnMgPSBKU09OOjpBcnJheU9mPEpTT046OlZhbHVlPjo6Y3Jl
YXRlKCk7CiAKLSAgICAgICAgYXV0byBmcmFtZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlY29y
ZGluZzo6RnJhbWU6OmNyZWF0ZSgpCi0gICAgICAgICAgICAuc2V0QWN0aW9ucyhtX2N1cnJlbnRB
Y3Rpb25zKQorICAgICAgICBhdXRvIGZyYW1lID0gUHJvdG9jb2w6OlJlY29yZGluZzo6RnJhbWU6
OmNyZWF0ZSgpCisgICAgICAgICAgICAuc2V0QWN0aW9ucygqbV9jdXJyZW50QWN0aW9ucykKICAg
ICAgICAgICAgIC5yZWxlYXNlKCk7CiAKICAgICAgICAgbV9mcmFtZXMtPmFkZEl0ZW0oV1RGTW92
ZShmcmFtZSkpOwpAQCAtMzc1LDcgKzM3NSw3IEBAIHZvaWQgSW5zcGVjdG9yQ2FudmFzOjpyZWNv
cmRBY3Rpb24oY29uc3QgU3RyaW5nJiBuYW1lLCBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8UmVjCiAK
ICAgICBtX2xhc3RSZWNvcmRlZEFjdGlvbiA9IGJ1aWxkQWN0aW9uKG5hbWUsIFdURk1vdmUocGFy
YW1ldGVycykpOwogICAgIG1fYnVmZmVyVXNlZCArPSBtX2xhc3RSZWNvcmRlZEFjdGlvbi0+bWVt
b3J5Q29zdCgpOwotICAgIG1fY3VycmVudEFjdGlvbnMtPmFkZEl0ZW0obV9sYXN0UmVjb3JkZWRB
Y3Rpb24uZ2V0KCkpOworICAgIG1fY3VycmVudEFjdGlvbnMtPmFkZEl0ZW0oKm1fbGFzdFJlY29y
ZGVkQWN0aW9uKTsKIAogICAgIGF1dG8qIGNvbnRleHQgPSBjYW52YXNDb250ZXh0KCk7CiAgICAg
QVNTRVJUKGNvbnRleHQpOwpAQCAtMzk4LDcgKzM5OCw3IEBAIHZvaWQgSW5zcGVjdG9yQ2FudmFz
OjpmaW5hbGl6ZUZyYW1lKCkKICAgICBhcHBlbmRBY3Rpb25TbmFwc2hvdElmTmVlZGVkKCk7CiAK
ICAgICBpZiAobV9mcmFtZXMgJiYgbV9mcmFtZXMtPmxlbmd0aCgpICYmICFzdGQ6OmlzbmFuKG1f
Y3VycmVudEZyYW1lU3RhcnRUaW1lKSkgewotICAgICAgICBhdXRvIGN1cnJlbnRGcmFtZSA9IHN0
YXRpY19jYXN0PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlY29yZGluZzo6RnJhbWUqPihtX2ZyYW1l
cy0+Z2V0KG1fZnJhbWVzLT5sZW5ndGgoKSAtIDEpLmdldCgpKTsKKyAgICAgICAgYXV0byBjdXJy
ZW50RnJhbWUgPSBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8UHJvdG9jb2w6OlJlY29yZGluZzo6RnJh
bWU+KG1fZnJhbWVzLT5nZXQobV9mcmFtZXMtPmxlbmd0aCgpIC0gMSkpOwogICAgICAgICBjdXJy
ZW50RnJhbWUtPnNldER1cmF0aW9uKChNb25vdG9uaWNUaW1lOjpub3coKSAtIG1fY3VycmVudEZy
YW1lU3RhcnRUaW1lKS5taWxsaXNlY29uZHMoKSk7CiAKICAgICAgICAgbV9jdXJyZW50RnJhbWVT
dGFydFRpbWUgPSBNb25vdG9uaWNUaW1lOjpuYW4oKTsKQEAgLTQxMiw3ICs0MTIsOCBAQCB2b2lk
IEluc3BlY3RvckNhbnZhczo6bWFya0N1cnJlbnRGcmFtZUluY29tcGxldGUoKQogICAgIGlmICgh
bV9jdXJyZW50QWN0aW9ucyB8fCAhbV9mcmFtZXMgfHwgIW1fZnJhbWVzLT5sZW5ndGgoKSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgc3RhdGljX2Nhc3Q8SW5zcGVjdG9yOjpQcm90b2NvbDo6UmVj
b3JkaW5nOjpGcmFtZSo+KG1fZnJhbWVzLT5nZXQobV9mcmFtZXMtPmxlbmd0aCgpIC0gMSkuZ2V0
KCkpLT5zZXRJbmNvbXBsZXRlKHRydWUpOworICAgIGF1dG8gY3VycmVudEZyYW1lID0gc3RhdGlj
X3JlZmVyZW5jZV9jYXN0PFByb3RvY29sOjpSZWNvcmRpbmc6OkZyYW1lPihtX2ZyYW1lcy0+Z2V0
KG1fZnJhbWVzLT5sZW5ndGgoKSAtIDEpKTsKKyAgICBjdXJyZW50RnJhbWUtPnNldEluY29tcGxl
dGUodHJ1ZSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ2FudmFzOjpzZXRCdWZmZXJMaW1pdChsb25n
IG1lbW9yeUxpbWl0KQpAQCAtNDM4LDI5ICs0MzksMjkgQEAgYm9vbCBJbnNwZWN0b3JDYW52YXM6
Om92ZXJGcmFtZUNvdW50KCkgY29uc3QKICAgICByZXR1cm4gbV9mcmFtZUNvdW50ICYmIG1fZnJh
bWVzQ2FwdHVyZWQgPj0gbV9mcmFtZUNvdW50LnZhbHVlKCk7CiB9CiAKLVJlZjxJbnNwZWN0b3I6
OlByb3RvY29sOjpDYW52YXM6OkNhbnZhcz4gSW5zcGVjdG9yQ2FudmFzOjpidWlsZE9iamVjdEZv
ckNhbnZhcyhib29sIGNhcHR1cmVCYWNrdHJhY2UpCitSZWY8UHJvdG9jb2w6OkNhbnZhczo6Q2Fu
dmFzPiBJbnNwZWN0b3JDYW52YXM6OmJ1aWxkT2JqZWN0Rm9yQ2FudmFzKGJvb2wgY2FwdHVyZUJh
Y2t0cmFjZSkKIHsKLSAgICB1c2luZyBDb250ZXh0VHlwZVR5cGUgPSBPcHRpb25hbDxJbnNwZWN0
b3I6OlByb3RvY29sOjpDYW52YXM6OkNvbnRleHRUeXBlPjsKKyAgICB1c2luZyBDb250ZXh0VHlw
ZVR5cGUgPSBPcHRpb25hbDxQcm90b2NvbDo6Q2FudmFzOjpDb250ZXh0VHlwZT47CiAgICAgYXV0
byBjb250ZXh0VHlwZSA9IFdURjo6c3dpdGNoT24obV9jb250ZXh0LAogICAgICAgICBbXSAoc3Rk
OjpyZWZlcmVuY2Vfd3JhcHBlcjxDYW52YXNSZW5kZXJpbmdDb250ZXh0PiBjb250ZXh0V3JhcHBl
cikgLT4gQ29udGV4dFR5cGVUeXBlIHsKICAgICAgICAgICAgIGF1dG8mIGNvbnRleHQgPSBjb250
ZXh0V3JhcHBlci5nZXQoKTsKICAgICAgICAgICAgIGlmIChpczxDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQ+KGNvbnRleHQpKQotICAgICAgICAgICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpDYW52YXM6OkNvbnRleHRUeXBlOjpDYW52YXMyRDsKKyAgICAgICAgICAgICAgICByZXR1
cm4gUHJvdG9jb2w6OkNhbnZhczo6Q29udGV4dFR5cGU6OkNhbnZhczJEOwogICAgICAgICAgICAg
aWYgKGlzPEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dD4oY29udGV4dCkpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6Q29udGV4dFR5cGU6OkJp
dG1hcFJlbmRlcmVyOworICAgICAgICAgICAgICAgIHJldHVybiBQcm90b2NvbDo6Q2FudmFzOjpD
b250ZXh0VHlwZTo6Qml0bWFwUmVuZGVyZXI7CiAjaWYgRU5BQkxFKFdFQkdMKQogICAgICAgICAg
ICAgaWYgKGlzPFdlYkdMUmVuZGVyaW5nQ29udGV4dD4oY29udGV4dCkpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6Q29udGV4dFR5cGU6OldlYkdM
OworICAgICAgICAgICAgICAgIHJldHVybiBQcm90b2NvbDo6Q2FudmFzOjpDb250ZXh0VHlwZTo6
V2ViR0w7CiAjZW5kaWYKICNpZiBFTkFCTEUoV0VCR0wyKQogICAgICAgICAgICAgaWYgKGlzPFdl
YkdMMlJlbmRlcmluZ0NvbnRleHQ+KGNvbnRleHQpKQotICAgICAgICAgICAgICAgIHJldHVybiBJ
bnNwZWN0b3I6OlByb3RvY29sOjpDYW52YXM6OkNvbnRleHRUeXBlOjpXZWJHTDI7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIFByb3RvY29sOjpDYW52YXM6OkNvbnRleHRUeXBlOjpXZWJHTDI7CiAj
ZW5kaWYKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAgIH0sCiAjaWYg
RU5BQkxFKFdFQkdQVSkKICAgICAgICAgW10gKHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8V2ViR1BV
RGV2aWNlPikgewotICAgICAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZh
czo6Q29udGV4dFR5cGU6OldlYkdQVTsKKyAgICAgICAgICAgIHJldHVybiBQcm90b2NvbDo6Q2Fu
dmFzOjpDb250ZXh0VHlwZTo6V2ViR1BVOwogICAgICAgICB9LAogI2VuZGlmCiAgICAgICAgIFtd
IChNb25vc3RhdGUpIHsKQEAgLTQ3MCwxMCArNDcxLDEwIEBAIFJlZjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpDYW52YXM6OkNhbnZhcz4gSW5zcGVjdG9yQ2FudmFzOjpidWlsZE9iamVjdEZvckNhbnZh
cyhiCiAgICAgKTsKICAgICBpZiAoIWNvbnRleHRUeXBlKSB7CiAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgICAgICBjb250ZXh0VHlwZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNh
bnZhczo6Q29udGV4dFR5cGU6OkNhbnZhczJEOworICAgICAgICBjb250ZXh0VHlwZSA9IFByb3Rv
Y29sOjpDYW52YXM6OkNvbnRleHRUeXBlOjpDYW52YXMyRDsKICAgICB9CiAKLSAgICBhdXRvIGNh
bnZhcyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6Q2FudmFzOjpjcmVhdGUoKQorICAg
IGF1dG8gY2FudmFzID0gUHJvdG9jb2w6OkNhbnZhczo6Q2FudmFzOjpjcmVhdGUoKQogICAgICAg
ICAuc2V0Q2FudmFzSWQobV9pZGVudGlmaWVyKQogICAgICAgICAuc2V0Q29udGV4dFR5cGUoY29u
dGV4dFR5cGUudmFsdWUoKSkKICAgICAgICAgLnJlbGVhc2UoKTsKQEAgLTQ4NiwxMiArNDg3LDEy
IEBAIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDYW52YXM6OkNhbnZhcz4gSW5zcGVjdG9yQ2Fu
dmFzOjpidWlsZE9iamVjdEZvckNhbnZhcyhiCiAgICAgICAgIC8vIEZJWE1FOiA8aHR0cHM6Ly93
ZWJraXQub3JnL2IvMTc4MjgyPiBXZWIgSW5zcGVjdG9yOiBzZW5kIGEgRE9NIG5vZGUgd2l0aCBl
YWNoIENhbnZhcyBwYXlsb2FkIGFuZCBlbGltaW5hdGUgQ2FudmFzLnJlcXVlc3ROb2RlCiAgICAg
fQogCi0gICAgdXNpbmcgQ29udGV4dEF0dHJpYnV0ZXNUeXBlID0gUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkNhbnZhczo6Q29udGV4dEF0dHJpYnV0ZXM+OworICAgIHVzaW5nIENvbnRleHRB
dHRyaWJ1dGVzVHlwZSA9IFJlZlB0cjxQcm90b2NvbDo6Q2FudmFzOjpDb250ZXh0QXR0cmlidXRl
cz47CiAgICAgYXV0byBjb250ZXh0QXR0cmlidXRlcyA9IFdURjo6c3dpdGNoT24obV9jb250ZXh0
LAogICAgICAgICBbXSAoc3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxDYW52YXNSZW5kZXJpbmdDb250
ZXh0PiBjb250ZXh0V3JhcHBlcikgLT4gQ29udGV4dEF0dHJpYnV0ZXNUeXBlIHsKICAgICAgICAg
ICAgIGF1dG8mIGNvbnRleHQgPSBjb250ZXh0V3JhcHBlci5nZXQoKTsKICAgICAgICAgICAgIGlm
IChpczxJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQ+KGNvbnRleHQpKSB7Ci0gICAgICAgICAg
ICAgICAgYXV0byBjb250ZXh0QXR0cmlidXRlc1BheWxvYWQgPSBJbnNwZWN0b3I6OlByb3RvY29s
OjpDYW52YXM6OkNvbnRleHRBdHRyaWJ1dGVzOjpjcmVhdGUoKQorICAgICAgICAgICAgICAgIGF1
dG8gY29udGV4dEF0dHJpYnV0ZXNQYXlsb2FkID0gUHJvdG9jb2w6OkNhbnZhczo6Q29udGV4dEF0
dHJpYnV0ZXM6OmNyZWF0ZSgpCiAgICAgICAgICAgICAgICAgICAgIC5yZWxlYXNlKCk7CiAgICAg
ICAgICAgICAgICAgY29udGV4dEF0dHJpYnV0ZXNQYXlsb2FkLT5zZXRBbHBoYShkb3duY2FzdDxJ
bWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQ+KGNvbnRleHQpLmhhc0FscGhhKCkpOwogICAgICAg
ICAgICAgICAgIHJldHVybiBjb250ZXh0QXR0cmlidXRlc1BheWxvYWQ7CkBAIC01MDAsNyArNTAx
LDcgQEAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6Q2FudmFzPiBJbnNwZWN0b3JD
YW52YXM6OmJ1aWxkT2JqZWN0Rm9yQ2FudmFzKGIKICNpZiBFTkFCTEUoV0VCR0wpCiAgICAgICAg
ICAgICBpZiAoaXM8V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZT4oY29udGV4dCkpIHsKICAgICAg
ICAgICAgICAgICBpZiAoY29uc3QgYXV0byYgYXR0cmlidXRlcyA9IGRvd25jYXN0PFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U+KGNvbnRleHQpLmdldENvbnRleHRBdHRyaWJ1dGVzKCkpIHsKLSAg
ICAgICAgICAgICAgICAgICAgYXV0byBjb250ZXh0QXR0cmlidXRlc1BheWxvYWQgPSBJbnNwZWN0
b3I6OlByb3RvY29sOjpDYW52YXM6OkNvbnRleHRBdHRyaWJ1dGVzOjpjcmVhdGUoKQorICAgICAg
ICAgICAgICAgICAgICBhdXRvIGNvbnRleHRBdHRyaWJ1dGVzUGF5bG9hZCA9IFByb3RvY29sOjpD
YW52YXM6OkNvbnRleHRBdHRyaWJ1dGVzOjpjcmVhdGUoKQogICAgICAgICAgICAgICAgICAgICAg
ICAgLnJlbGVhc2UoKTsKICAgICAgICAgICAgICAgICAgICAgY29udGV4dEF0dHJpYnV0ZXNQYXls
b2FkLT5zZXRBbHBoYShhdHRyaWJ1dGVzLT5hbHBoYSk7CiAgICAgICAgICAgICAgICAgICAgIGNv
bnRleHRBdHRyaWJ1dGVzUGF5bG9hZC0+c2V0RGVwdGgoYXR0cmlidXRlcy0+ZGVwdGgpOwpAQCAt
NTMwLDcgKzUzMSw3IEBAIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDYW52YXM6OkNhbnZhcz4g
SW5zcGVjdG9yQ2FudmFzOjpidWlsZE9iamVjdEZvckNhbnZhcyhiCiAgICAgICAgIFtdIChzdGQ6
OnJlZmVyZW5jZV93cmFwcGVyPFdlYkdQVURldmljZT4gZGV2aWNlV3JhcHBlcikgLT4gQ29udGV4
dEF0dHJpYnV0ZXNUeXBlIHsKICAgICAgICAgICAgIGF1dG8mIGRldmljZSA9IGRldmljZVdyYXBw
ZXIuZ2V0KCk7CiAgICAgICAgICAgICBpZiAoY29uc3QgYXV0byYgb3B0aW9ucyA9IGRldmljZS5h
ZGFwdGVyKCkub3B0aW9ucygpKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBjb250ZXh0QXR0cmli
dXRlc1BheWxvYWQgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpDYW52YXM6OkNvbnRleHRBdHRyaWJ1
dGVzOjpjcmVhdGUoKQorICAgICAgICAgICAgICAgIGF1dG8gY29udGV4dEF0dHJpYnV0ZXNQYXls
b2FkID0gUHJvdG9jb2w6OkNhbnZhczo6Q29udGV4dEF0dHJpYnV0ZXM6OmNyZWF0ZSgpCiAgICAg
ICAgICAgICAgICAgICAgIC5yZWxlYXNlKCk7CiAgICAgICAgICAgICAgICAgaWYgKGNvbnN0IGF1
dG8mIHBvd2VyUHJlZmVyZW5jZSA9IG9wdGlvbnMtPnBvd2VyUHJlZmVyZW5jZSkgewogICAgICAg
ICAgICAgICAgICAgICBzd2l0Y2ggKHBvd2VyUHJlZmVyZW5jZS52YWx1ZSgpKSB7CkBAIC01NTQs
NyArNTU1LDcgQEAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6Q2FudmFzPiBJbnNw
ZWN0b3JDYW52YXM6OmJ1aWxkT2JqZWN0Rm9yQ2FudmFzKGIKICAgICAgICAgfQogICAgICk7CiAg
ICAgaWYgKGNvbnRleHRBdHRyaWJ1dGVzKQotICAgICAgICBjYW52YXMtPnNldENvbnRleHRBdHRy
aWJ1dGVzKFdURk1vdmUoY29udGV4dEF0dHJpYnV0ZXMpKTsKKyAgICAgICAgY2FudmFzLT5zZXRD
b250ZXh0QXR0cmlidXRlcyhjb250ZXh0QXR0cmlidXRlcy5yZWxlYXNlTm9uTnVsbCgpKTsKIAog
ICAgIC8vIEZJWE1FOiA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMTgwODMzPiBXZWIgSW5zcGVjdG9y
OiBzdXBwb3J0IE9mZnNjcmVlbkNhbnZhcyBmb3IgQ2FudmFzIHJlbGF0ZWQgb3BlcmF0aW9ucwog
CkBAIC01NzEsNyArNTcyLDcgQEAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6Q2Fu
dmFzPiBJbnNwZWN0b3JDYW52YXM6OmJ1aWxkT2JqZWN0Rm9yQ2FudmFzKGIKICAgICByZXR1cm4g
Y2FudmFzOwogfQogCi1SZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6UmVjb3JkaW5nOjpSZWNvcmRp
bmc+IEluc3BlY3RvckNhbnZhczo6cmVsZWFzZU9iamVjdEZvclJlY29yZGluZygpCitSZWY8UHJv
dG9jb2w6OlJlY29yZGluZzo6UmVjb3JkaW5nPiBJbnNwZWN0b3JDYW52YXM6OnJlbGVhc2VPYmpl
Y3RGb3JSZWNvcmRpbmcoKQogewogICAgIEFTU0VSVCghbV9jdXJyZW50QWN0aW9ucyk7CiAgICAg
QVNTRVJUKCFtX2xhc3RSZWNvcmRlZEFjdGlvbik7CkBAIC01ODEsMjYgKzU4MiwyNiBAQCBSZWY8
SW5zcGVjdG9yOjpQcm90b2NvbDo6UmVjb3JkaW5nOjpSZWNvcmRpbmc+IEluc3BlY3RvckNhbnZh
czo6cmVsZWFzZU9iamVjdEZvcgogICAgIEFTU0VSVChjb250ZXh0KTsKICAgICAvLyBGSVhNRTog
PGh0dHBzOi8vd2Via2l0Lm9yZy9iLzIwMTY1MT4gV2ViIEluc3BlY3RvcjogQ2FudmFzOiBzdXBw
b3J0IGNhbnZhcyByZWNvcmRpbmdzIGZvciBXZWJHUFVEZXZpY2UKIAotICAgIEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlJlY29yZGluZzo6VHlwZSB0eXBlOworICAgIFByb3RvY29sOjpSZWNvcmRpbmc6
OlR5cGUgdHlwZTsKICAgICBpZiAoaXM8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPihjb250ZXh0
KSkKLSAgICAgICAgdHlwZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlY29yZGluZzo6VHlwZTo6
Q2FudmFzMkQ7CisgICAgICAgIHR5cGUgPSBQcm90b2NvbDo6UmVjb3JkaW5nOjpUeXBlOjpDYW52
YXMyRDsKICAgICBlbHNlIGlmIChpczxJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQ+KGNvbnRl
eHQpKQotICAgICAgICB0eXBlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6UmVjb3JkaW5nOjpUeXBl
OjpDYW52YXNCaXRtYXBSZW5kZXJlcjsKKyAgICAgICAgdHlwZSA9IFByb3RvY29sOjpSZWNvcmRp
bmc6OlR5cGU6OkNhbnZhc0JpdG1hcFJlbmRlcmVyOwogI2lmIEVOQUJMRShXRUJHTCkKICAgICBl
bHNlIGlmIChpczxXZWJHTFJlbmRlcmluZ0NvbnRleHQ+KGNvbnRleHQpKQotICAgICAgICB0eXBl
ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6UmVjb3JkaW5nOjpUeXBlOjpDYW52YXNXZWJHTDsKKyAg
ICAgICAgdHlwZSA9IFByb3RvY29sOjpSZWNvcmRpbmc6OlR5cGU6OkNhbnZhc1dlYkdMOwogI2Vu
ZGlmCiAjaWYgRU5BQkxFKFdFQkdMMikKICAgICBlbHNlIGlmIChpczxXZWJHTDJSZW5kZXJpbmdD
b250ZXh0Pihjb250ZXh0KSkKLSAgICAgICAgdHlwZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJl
Y29yZGluZzo6VHlwZTo6Q2FudmFzV2ViR0wyOworICAgICAgICB0eXBlID0gUHJvdG9jb2w6OlJl
Y29yZGluZzo6VHlwZTo6Q2FudmFzV2ViR0wyOwogI2VuZGlmCiAgICAgZWxzZSB7CiAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICB0eXBlID0gSW5zcGVjdG9yOjpQcm90b2Nv
bDo6UmVjb3JkaW5nOjpUeXBlOjpDYW52YXMyRDsKKyAgICAgICAgdHlwZSA9IFByb3RvY29sOjpS
ZWNvcmRpbmc6OlR5cGU6OkNhbnZhczJEOwogICAgIH0KIAotICAgIGF1dG8gcmVjb3JkaW5nID0g
SW5zcGVjdG9yOjpQcm90b2NvbDo6UmVjb3JkaW5nOjpSZWNvcmRpbmc6OmNyZWF0ZSgpCi0gICAg
ICAgIC5zZXRWZXJzaW9uKEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlY29yZGluZzo6VkVSU0lPTikK
KyAgICBhdXRvIHJlY29yZGluZyA9IFByb3RvY29sOjpSZWNvcmRpbmc6OlJlY29yZGluZzo6Y3Jl
YXRlKCkKKyAgICAgICAgLnNldFZlcnNpb24oUHJvdG9jb2w6OlJlY29yZGluZzo6VkVSU0lPTikK
ICAgICAgICAgLnNldFR5cGUodHlwZSkKICAgICAgICAgLnNldEluaXRpYWxTdGF0ZShtX2luaXRp
YWxTdGF0ZS5yZWxlYXNlTm9uTnVsbCgpKQogICAgICAgICAuc2V0RGF0YShtX3NlcmlhbGl6ZWRE
dXBsaWNhdGVEYXRhLnJlbGVhc2VOb25OdWxsKCkpCkBAIC02MTQsNyArNjE1LDcgQEAgUmVmPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlJlY29yZGluZzo6UmVjb3JkaW5nPiBJbnNwZWN0b3JDYW52YXM6
OnJlbGVhc2VPYmplY3RGb3IKICAgICByZXR1cm4gcmVjb3JkaW5nOwogfQogCi1TdHJpbmcgSW5z
cGVjdG9yQ2FudmFzOjpnZXRDYW52YXNDb250ZW50QXNEYXRhVVJMKEVycm9yU3RyaW5nJiBlcnJv
clN0cmluZykKK1N0cmluZyBJbnNwZWN0b3JDYW52YXM6OmdldENhbnZhc0NvbnRlbnRBc0RhdGFV
UkwoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZykKIHsKICAgICBhdXRvKiBub2Rl
ID0gY2FudmFzRWxlbWVudCgpOwogICAgIGlmICghbm9kZSkgewpAQCAtNjUxLDcgKzY1Miw3IEBA
IHZvaWQgSW5zcGVjdG9yQ2FudmFzOjphcHBlbmRBY3Rpb25TbmFwc2hvdElmTmVlZGVkKCkKICAg
ICBpZiAobV9jb250ZW50Q2hhbmdlZCkgewogICAgICAgICBtX2J1ZmZlclVzZWQgLT0gbV9sYXN0
UmVjb3JkZWRBY3Rpb24tPm1lbW9yeUNvc3QoKTsKIAotICAgICAgICBFcnJvclN0cmluZyBpZ25v
cmVkOworICAgICAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgaWdub3JlZDsKICAgICAgICAgbV9s
YXN0UmVjb3JkZWRBY3Rpb24tPmFkZEl0ZW0oaW5kZXhGb3JEYXRhKGdldENhbnZhc0NvbnRlbnRB
c0RhdGFVUkwoaWdub3JlZCkpKTsKIAogICAgICAgICBtX2J1ZmZlclVzZWQgKz0gbV9sYXN0UmVj
b3JkZWRBY3Rpb24tPm1lbW9yeUNvc3QoKTsKQEAgLTc3NSw3ICs3NzYsNyBAQCBpbnQgSW5zcGVj
dG9yQ2FudmFzOjppbmRleEZvckRhdGEoRHVwbGljYXRlRGF0YVZhcmlhbnQgZGF0YSkKIAogICAg
IGlmIChpdGVtKSB7CiAgICAgICAgIG1fYnVmZmVyVXNlZCArPSBpdGVtLT5tZW1vcnlDb3N0KCk7
Ci0gICAgICAgIG1fc2VyaWFsaXplZER1cGxpY2F0ZURhdGEtPmFkZEl0ZW0oV1RGTW92ZShpdGVt
KSk7CisgICAgICAgIG1fc2VyaWFsaXplZER1cGxpY2F0ZURhdGEtPmFkZEl0ZW0oaXRlbS5yZWxl
YXNlTm9uTnVsbCgpKTsKIAogICAgICAgICBtX2luZGV4ZWREdXBsaWNhdGVEYXRhLmFwcGVuZChk
YXRhKTsKICAgICAgICAgaW5kZXggPSBtX2luZGV4ZWREdXBsaWNhdGVEYXRhLnNpemUoKSAtIDE7
CkBAIC04MTAsMTMgKzgxMSwxMyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGF0aWMgUmVmPEpT
T046OkFycmF5T2Y8SlNPTjo6VmFsdWU+PiBidWlsZEFycmF5Rm9yVmVjdG9yKAogICAgIHJldHVy
biBhcnJheTsKIH0KIAotUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlY29yZGluZzo6SW5pdGlh
bFN0YXRlPiBJbnNwZWN0b3JDYW52YXM6OmJ1aWxkSW5pdGlhbFN0YXRlKCkKK1JlZjxQcm90b2Nv
bDo6UmVjb3JkaW5nOjpJbml0aWFsU3RhdGU+IEluc3BlY3RvckNhbnZhczo6YnVpbGRJbml0aWFs
U3RhdGUoKQogewogICAgIGF1dG8qIGNvbnRleHQgPSBjYW52YXNDb250ZXh0KCk7CiAgICAgQVNT
RVJUKGNvbnRleHQpOwogICAgIC8vIEZJWE1FOiA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMjAxNjUx
PiBXZWIgSW5zcGVjdG9yOiBDYW52YXM6IHN1cHBvcnQgY2FudmFzIHJlY29yZGluZ3MgZm9yIFdl
YkdQVURldmljZQogCi0gICAgYXV0byBpbml0aWFsU3RhdGVQYXlsb2FkID0gSW5zcGVjdG9yOjpQ
cm90b2NvbDo6UmVjb3JkaW5nOjpJbml0aWFsU3RhdGU6OmNyZWF0ZSgpLnJlbGVhc2UoKTsKKyAg
ICBhdXRvIGluaXRpYWxTdGF0ZVBheWxvYWQgPSBQcm90b2NvbDo6UmVjb3JkaW5nOjpJbml0aWFs
U3RhdGU6OmNyZWF0ZSgpLnJlbGVhc2UoKTsKIAogICAgIGF1dG8gYXR0cmlidXRlc1BheWxvYWQg
PSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgIGF0dHJpYnV0ZXNQYXlsb2FkLT5zZXRJbnRl
Z2VyKCJ3aWR0aCJfcywgY29udGV4dC0+Y2FudmFzQmFzZSgpLndpZHRoKCkpOwpAQCAtOTA4LDcg
KzkwOSw3IEBAIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpSZWNvcmRpbmc6OkluaXRpYWxTdGF0
ZT4gSW5zcGVjdG9yQ2FudmFzOjpidWlsZEluaXRpYWxTCiAgICAgaWYgKHBhcmFtZXRlcnNQYXls
b2FkLT5sZW5ndGgoKSkKICAgICAgICAgaW5pdGlhbFN0YXRlUGF5bG9hZC0+c2V0UGFyYW1ldGVy
cyhXVEZNb3ZlKHBhcmFtZXRlcnNQYXlsb2FkKSk7CiAKLSAgICBFcnJvclN0cmluZyBpZ25vcmVk
OworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBpZ25vcmVkOwogICAgIGluaXRpYWxTdGF0ZVBh
eWxvYWQtPnNldENvbnRlbnQoZ2V0Q2FudmFzQ29udGVudEFzRGF0YVVSTChpZ25vcmVkKSk7CiAK
ICAgICByZXR1cm4gaW5pdGlhbFN0YXRlUGF5bG9hZDsKQEAgLTk0Niw3ICs5NDcsNyBAQCBSZWY8
SlNPTjo6QXJyYXlPZjxKU09OOjpWYWx1ZT4+IEluc3BlY3RvckNhbnZhczo6YnVpbGRBY3Rpb24o
Y29uc3QgU3RyaW5nJiBuYW1lLAogICAgICAgICAgICAgICAgIGFycmF5LT5hZGRJdGVtKHZhbHVl
LmQudmFsdWVPcigxKSk7CiAgICAgICAgICAgICAgICAgYXJyYXktPmFkZEl0ZW0odmFsdWUuZS52
YWx1ZU9yKDApKTsKICAgICAgICAgICAgICAgICBhcnJheS0+YWRkSXRlbSh2YWx1ZS5mLnZhbHVl
T3IoMCkpOwotICAgICAgICAgICAgICAgIGFkZFBhcmFtZXRlcihhcnJheS5wdHIoKSwgUmVjb3Jk
aW5nU3dpenpsZVR5cGVzOjpET01NYXRyaXgpOworICAgICAgICAgICAgICAgIGFkZFBhcmFtZXRl
cihXVEZNb3ZlKGFycmF5KSwgUmVjb3JkaW5nU3dpenpsZVR5cGVzOjpET01NYXRyaXgpOwogICAg
ICAgICAgICAgfSwKICAgICAgICAgICAgIFsmXSAoY29uc3QgRWxlbWVudCogdmFsdWUpIHsKICAg
ICAgICAgICAgICAgICBpZiAodmFsdWUpIHsKQEAgLTExMDYsMTYgKzExMDcsMTYgQEAgUmVmPEpT
T046OkFycmF5T2Y8SlNPTjo6VmFsdWU+PiBJbnNwZWN0b3JDYW52YXM6OmJ1aWxkQWN0aW9uKGNv
bnN0IFN0cmluZyYgbmFtZSwKICAgICAgICAgICAgICAgICBhdXRvIGRlZHVwbGljYXRlZCA9IHZh
bHVlLm1hcChbJl0gKGNvbnN0IFN0cmluZyYgaXRlbSkgewogICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gaW5kZXhGb3JEYXRhKGl0ZW0pOwogICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAg
ICAgICAgIGFkZFBhcmFtZXRlcihidWlsZEFycmF5Rm9yVmVjdG9yKGRlZHVwbGljYXRlZCkucHRy
KCksIFJlY29yZGluZ1N3aXp6bGVUeXBlczo6U3RyaW5nKTsKKyAgICAgICAgICAgICAgICBhZGRQ
YXJhbWV0ZXIoYnVpbGRBcnJheUZvclZlY3RvcihkZWR1cGxpY2F0ZWQpLCBSZWNvcmRpbmdTd2l6
emxlVHlwZXM6OlN0cmluZyk7CiAgICAgICAgICAgICB9LAotICAgICAgICAgICAgWyZdIChjb25z
dCBWZWN0b3I8ZmxvYXQ+JiB2YWx1ZSkgeyBhZGRQYXJhbWV0ZXIoYnVpbGRBcnJheUZvclZlY3Rv
cih2YWx1ZSkucHRyKCksIFJlY29yZGluZ1N3aXp6bGVUeXBlczo6QXJyYXkpOyB9LAorICAgICAg
ICAgICAgWyZdIChjb25zdCBWZWN0b3I8ZmxvYXQ+JiB2YWx1ZSkgeyBhZGRQYXJhbWV0ZXIoYnVp
bGRBcnJheUZvclZlY3Rvcih2YWx1ZSksIFJlY29yZGluZ1N3aXp6bGVUeXBlczo6QXJyYXkpOyB9
LAogICAgICAgICAgICAgWyZdIChjb25zdCBWZWN0b3I8dWludDMyX3Q+JiB2YWx1ZSkgewogICAg
ICAgICAgICAgICAgIGF1dG8gbWFwcGVkID0gdmFsdWUubWFwKFsmXSAodWludDMyX3QgaXRlbSkg
ewogICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZG91YmxlPihpdGVtKTsK
ICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICBhZGRQYXJhbWV0ZXIoYnVpbGRB
cnJheUZvclZlY3RvcihtYXBwZWQpLnB0cigpLCBSZWNvcmRpbmdTd2l6emxlVHlwZXM6OkFycmF5
KTsKKyAgICAgICAgICAgICAgICBhZGRQYXJhbWV0ZXIoYnVpbGRBcnJheUZvclZlY3RvcihtYXBw
ZWQpLCBSZWNvcmRpbmdTd2l6emxlVHlwZXM6OkFycmF5KTsKICAgICAgICAgICAgIH0sCi0gICAg
ICAgICAgICBbJl0gKGNvbnN0IFZlY3RvcjxpbnQzMl90PiYgdmFsdWUpIHsgYWRkUGFyYW1ldGVy
KGJ1aWxkQXJyYXlGb3JWZWN0b3IodmFsdWUpLnB0cigpLCBSZWNvcmRpbmdTd2l6emxlVHlwZXM6
OkFycmF5KTsgfSwKKyAgICAgICAgICAgIFsmXSAoY29uc3QgVmVjdG9yPGludDMyX3Q+JiB2YWx1
ZSkgeyBhZGRQYXJhbWV0ZXIoYnVpbGRBcnJheUZvclZlY3Rvcih2YWx1ZSksIFJlY29yZGluZ1N3
aXp6bGVUeXBlczo6QXJyYXkpOyB9LAogI2lmIEVOQUJMRShXRUJHTCkKICAgICAgICAgICAgIFsm
XSAoY29uc3QgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6RmxvYXQzMkxpc3Q6OlZhcmlhbnRU
eXBlJiB2YWx1ZSkgewogICAgICAgICAgICAgICAgIFdURjo6dmlzaXQocGFyc2VQYXJhbWV0ZXIs
IHZhbHVlKTsKQEAgLTExNTksNyArMTE2MCw3IEBAIFJlZjxKU09OOjpBcnJheU9mPEpTT046OlZh
bHVlPj4gSW5zcGVjdG9yQ2FudmFzOjpidWlsZEFjdGlvbihjb25zdCBTdHJpbmcmIG5hbWUsCiBS
ZWY8SlNPTjo6QXJyYXlPZjxKU09OOjpWYWx1ZT4+IEluc3BlY3RvckNhbnZhczo6YnVpbGRBcnJh
eUZvckNhbnZhc0dyYWRpZW50KGNvbnN0IENhbnZhc0dyYWRpZW50JiBjYW52YXNHcmFkaWVudCkK
IHsKICAgICBBU0NJSUxpdGVyYWwgdHlwZSA9ICJsaW5lYXItZ3JhZGllbnQiX3M7Ci0gICAgYXV0
byBwYXJhbWV0ZXJzID0gSlNPTjo6QXJyYXlPZjxmbG9hdD46OmNyZWF0ZSgpOworICAgIGF1dG8g
cGFyYW1ldGVycyA9IEpTT046OkFycmF5T2Y8ZG91YmxlPjo6Y3JlYXRlKCk7CiAgICAgV1RGOjpz
d2l0Y2hPbihjYW52YXNHcmFkaWVudC5ncmFkaWVudCgpLmRhdGEoKSwKICAgICAgICAgWyZdIChj
b25zdCBHcmFkaWVudDo6TGluZWFyRGF0YSYgZGF0YSkgewogICAgICAgICAgICAgcGFyYW1ldGVy
cy0+YWRkSXRlbShkYXRhLnBvaW50MC54KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckNhbnZhcy5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckNhbnZhcy5oCmluZGV4IDc4Y2I2YThhM2I4YWI3ODBlOTVmYjNmYWVkM2FiYzU5NGQx
NDY1OTguLmIyN2JjOGQ0OTIzOTExN2JlZTUyNWQ1ZmU2YWMyNmUyZDYxNmI1YzcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDYW52YXMuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzLmgKQEAgLTU4LDggKzU4LDYgQEAg
Y2xhc3MgT2Zmc2NyZWVuQ2FudmFzOwogY2xhc3MgVHlwZWRPTUNTU0ltYWdlVmFsdWU7CiAjZW5k
aWYKIAotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7Ci0KIGNsYXNzIEluc3BlY3RvckNhbnZh
cyBmaW5hbCA6IHB1YmxpYyBSZWZDb3VudGVkPEluc3BlY3RvckNhbnZhcz4gewogcHVibGljOgog
ICAgIHN0YXRpYyBSZWY8SW5zcGVjdG9yQ2FudmFzPiBjcmVhdGUoQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dCYpOwpAQCAtMTA3LDcgKzEwNSw3IEBAIHB1YmxpYzoKICAgICBSZWY8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6Q2FudmFzOjpDYW52YXM+IGJ1aWxkT2JqZWN0Rm9yQ2FudmFzKGJvb2wgY2FwdHVy
ZUJhY2t0cmFjZSk7CiAgICAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlY29yZGluZzo6UmVj
b3JkaW5nPiByZWxlYXNlT2JqZWN0Rm9yUmVjb3JkaW5nKCk7CiAKLSAgICBTdHJpbmcgZ2V0Q2Fu
dmFzQ29udGVudEFzRGF0YVVSTChFcnJvclN0cmluZyYpOworICAgIFN0cmluZyBnZXRDYW52YXND
b250ZW50QXNEYXRhVVJMKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nJik7CiAKIHBy
aXZhdGU6CiAgICAgSW5zcGVjdG9yQ2FudmFzKENhbnZhc1JlbmRlcmluZ0NvbnRleHQmKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAppbmRl
eCAyZTkwYzExOTQ4YTdlMGViNjEwNWE4M2UyYzA4Y2I0ZjgyYThmMmZlLi42MzBkZjcxNzkwYzYz
YjZlNzU4NzM0NTFhMTc0MGY4NmY2N2UwMmRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCkBAIC00NzgsMTAgKzQ3OCw4IEBAIHZvaWQg
SW5zcGVjdG9yQ29udHJvbGxlcjo6ZnJvbnRlbmRJbml0aWFsaXplZCgpCiB7CiAgICAgaWYgKG1f
cGF1c2VBZnRlckluaXRpYWxpemF0aW9uKSB7CiAgICAgICAgIG1fcGF1c2VBZnRlckluaXRpYWxp
emF0aW9uID0gZmFsc2U7Ci0gICAgICAgIGlmIChhdXRvKiBkZWJ1Z2dlckFnZW50ID0gbV9pbnN0
cnVtZW50aW5nQWdlbnRzLT5lbmFibGVkUGFnZURlYnVnZ2VyQWdlbnQoKSkgewotICAgICAgICAg
ICAgRXJyb3JTdHJpbmcgaWdub3JlZDsKLSAgICAgICAgICAgIGRlYnVnZ2VyQWdlbnQtPnBhdXNl
KGlnbm9yZWQpOwotICAgICAgICB9CisgICAgICAgIGlmIChhdXRvKiBkZWJ1Z2dlckFnZW50ID0g
bV9pbnN0cnVtZW50aW5nQWdlbnRzLT5lbmFibGVkUGFnZURlYnVnZ2VyQWdlbnQoKSkKKyAgICAg
ICAgICAgIGRlYnVnZ2VyQWdlbnQtPnBhdXNlKCk7CiAgICAgfQogCiAjaWYgRU5BQkxFKFJFTU9U
RV9JTlNQRUNUT1IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yRnJvbnRlbmRIb3N0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JG
cm9udGVuZEhvc3QuY3BwCmluZGV4IDUwZTBjODNiYzkyMDY2MmU3NjgwMjU1Nzc1MmIzNmYyMzc1
YjAzOWMuLmE2YmI4NzdhMjJhMGFhODZiZjg5OTgzOWE3NWY1YWZmNmVmOGRlMzAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuY3BwCkBA
IC02MDcsNyArNjA3LDcgQEAgYm9vbCBJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OmRpYWdub3N0aWNM
b2dnaW5nQXZhaWxhYmxlKCkKICAgICByZXR1cm4gbV9jbGllbnQgJiYgbV9jbGllbnQtPmRpYWdu
b3N0aWNMb2dnaW5nQXZhaWxhYmxlKCk7CiB9CiAKLXN0YXRpYyBPcHRpb25hbDxEaWFnbm9zdGlj
TG9nZ2luZ0NsaWVudDo6VmFsdWVQYXlsb2FkPiB2YWx1ZVBheWxvYWRGcm9tSlNPTlZhbHVlKGNv
bnN0IFJlZlB0cjxKU09OOjpWYWx1ZT4mIHZhbHVlKQorc3RhdGljIE9wdGlvbmFsPERpYWdub3N0
aWNMb2dnaW5nQ2xpZW50OjpWYWx1ZVBheWxvYWQ+IHZhbHVlUGF5bG9hZEZyb21KU09OVmFsdWUo
UmVmPEpTT046OlZhbHVlPiYmIHZhbHVlKQogewogICAgIHN3aXRjaCAodmFsdWUtPnR5cGUoKSkg
ewogICAgIGNhc2UgSlNPTjo6VmFsdWU6OlR5cGU6OkFycmF5OgpAQCAtNjE3LDI0ICs2MTcsMTYg
QEAgc3RhdGljIE9wdGlvbmFsPERpYWdub3N0aWNMb2dnaW5nQ2xpZW50OjpWYWx1ZVBheWxvYWQ+
IHZhbHVlUGF5bG9hZEZyb21KU09OVmFsdWUKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
IAogICAgIGNhc2UgSlNPTjo6VmFsdWU6OlR5cGU6OkJvb2xlYW46Ci0gICAgICAgIGJvb2wgYm9v
bFZhbHVlOwotICAgICAgICB2YWx1ZS0+YXNCb29sZWFuKGJvb2xWYWx1ZSk7Ci0gICAgICAgIHJl
dHVybiBEaWFnbm9zdGljTG9nZ2luZ0NsaWVudDo6VmFsdWVQYXlsb2FkKGJvb2xWYWx1ZSk7Cisg
ICAgICAgIHJldHVybiBEaWFnbm9zdGljTG9nZ2luZ0NsaWVudDo6VmFsdWVQYXlsb2FkKHZhbHVl
LT5hc0Jvb2xlYW4oKS52YWx1ZU9yKGZhbHNlKSk7CiAKICAgICBjYXNlIEpTT046OlZhbHVlOjpU
eXBlOjpEb3VibGU6Ci0gICAgICAgIGRvdWJsZSBkb3VibGVWYWx1ZTsKLSAgICAgICAgdmFsdWUt
PmFzRG91YmxlKGRvdWJsZVZhbHVlKTsKLSAgICAgICAgcmV0dXJuIERpYWdub3N0aWNMb2dnaW5n
Q2xpZW50OjpWYWx1ZVBheWxvYWQoZG91YmxlVmFsdWUpOworICAgICAgICByZXR1cm4gRGlhZ25v
c3RpY0xvZ2dpbmdDbGllbnQ6OlZhbHVlUGF5bG9hZCh2YWx1ZS0+YXNEb3VibGUoKS52YWx1ZU9y
KDApKTsKIAogICAgIGNhc2UgSlNPTjo6VmFsdWU6OlR5cGU6OkludGVnZXI6Ci0gICAgICAgIGxv
bmcgbG9uZyBpbnRWYWx1ZTsKLSAgICAgICAgdmFsdWUtPmFzSW50ZWdlcihpbnRWYWx1ZSk7Ci0g
ICAgICAgIHJldHVybiBEaWFnbm9zdGljTG9nZ2luZ0NsaWVudDo6VmFsdWVQYXlsb2FkKGludFZh
bHVlKTsKKyAgICAgICAgcmV0dXJuIERpYWdub3N0aWNMb2dnaW5nQ2xpZW50OjpWYWx1ZVBheWxv
YWQoc3RhdGljX2Nhc3Q8bG9uZyBsb25nPih2YWx1ZS0+YXNJbnRlZ2VyKCkudmFsdWVPcigwKSkp
OwogCiAgICAgY2FzZSBKU09OOjpWYWx1ZTo6VHlwZTo6U3RyaW5nOgotICAgICAgICBTdHJpbmcg
c3RyaW5nVmFsdWU7Ci0gICAgICAgIHZhbHVlLT5hc1N0cmluZyhzdHJpbmdWYWx1ZSk7Ci0gICAg
ICAgIHJldHVybiBEaWFnbm9zdGljTG9nZ2luZ0NsaWVudDo6VmFsdWVQYXlsb2FkKHN0cmluZ1Zh
bHVlKTsKKyAgICAgICAgcmV0dXJuIERpYWdub3N0aWNMb2dnaW5nQ2xpZW50OjpWYWx1ZVBheWxv
YWQodmFsdWUtPmFzU3RyaW5nKCkpOwogICAgIH0KIAogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwpAQCAtNjQ2LDE3ICs2MzgsMTcgQEAgdm9pZCBJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OmxvZ0Rp
YWdub3N0aWNFdmVudChjb25zdCBTdHJpbmcmIGV2ZW50TmFtZSwgY29uc3QgU3QKICAgICBpZiAo
IXN1cHBvcnRzRGlhZ25vc3RpY0xvZ2dpbmcoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVm
UHRyPEpTT046OlZhbHVlPiBwYXlsb2FkVmFsdWU7Ci0gICAgaWYgKCFKU09OOjpWYWx1ZTo6cGFy
c2VKU09OKHBheWxvYWRTdHJpbmcsIHBheWxvYWRWYWx1ZSkpCisgICAgYXV0byBwYXlsb2FkVmFs
dWUgPSBKU09OOjpWYWx1ZTo6cGFyc2VKU09OKHBheWxvYWRTdHJpbmcpOworICAgIGlmICghcGF5
bG9hZFZhbHVlKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBw
YXlsb2FkT2JqZWN0OwotICAgIGlmICghcGF5bG9hZFZhbHVlLT5hc09iamVjdChwYXlsb2FkT2Jq
ZWN0KSkKKyAgICBhdXRvIHBheWxvYWRPYmplY3QgPSBwYXlsb2FkVmFsdWUtPmFzT2JqZWN0KCk7
CisgICAgaWYgKCFwYXlsb2FkT2JqZWN0KQogICAgICAgICByZXR1cm47CiAKICAgICBEaWFnbm9z
dGljTG9nZ2luZ0NsaWVudDo6VmFsdWVEaWN0aW9uYXJ5IGRpY3Rpb25hcnk7Ci0gICAgZm9yIChj
b25zdCBhdXRvJiBba2V5LCB2YWx1ZV0gOiAqcGF5bG9hZE9iamVjdCkgewotICAgICAgICBpZiAo
YXV0byB2YWx1ZVBheWxvYWQgPSB2YWx1ZVBheWxvYWRGcm9tSlNPTlZhbHVlKHZhbHVlKSkKKyAg
ICBmb3IgKGF1dG8mIFtrZXksIHZhbHVlXSA6ICpwYXlsb2FkT2JqZWN0KSB7CisgICAgICAgIGlm
IChhdXRvIHZhbHVlUGF5bG9hZCA9IHZhbHVlUGF5bG9hZEZyb21KU09OVmFsdWUoV1RGTW92ZSh2
YWx1ZSkpKQogICAgICAgICAgICAgZGljdGlvbmFyeS5zZXQoa2V5LCBXVEZNb3ZlKHZhbHVlUGF5
bG9hZC52YWx1ZSgpKSk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yU3R5bGVTaGVldC5jcHAKaW5kZXggYWUwZmVmNWRmZTM5YjlhNTE2ZTU1MTAzMDdl
YWJjYjY2MGQxYWJjYi4uOTc2NjllZmI2ODdkMzM1NTRkNTJiYzY4ZTE4YzY4NDFhZWI0Y2Y0ZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNw
cApAQCAtMzgwLDcgKzM4MCw3IEBAIHZvaWQgU3R5bGVTaGVldEhhbmRsZXI6Om9ic2VydmVDb21t
ZW50KHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQpCiAgICAgbV9jdXJy
ZW50UnVsZURhdGFTdGFjay5sYXN0KCktPnN0eWxlU291cmNlRGF0YS0+cHJvcGVydHlEYXRhLmFw
cGVuZChDU1NQcm9wZXJ0eVNvdXJjZURhdGEocHJvcGVydHlEYXRhLm5hbWUsIHByb3BlcnR5RGF0
YS52YWx1ZSwgZmFsc2UsIHRydWUsIHRydWUsIFNvdXJjZVJhbmdlKHN0YXJ0T2Zmc2V0IC0gdG9w
UnVsZUJvZHlSYW5nZS5zdGFydCwgZW5kT2Zmc2V0IC0gdG9wUnVsZUJvZHlSYW5nZS5zdGFydCkp
KTsKIH0KIAotc3RhdGljIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlNvdXJjZVJh
bmdlPiBidWlsZFNvdXJjZVJhbmdlT2JqZWN0KGNvbnN0IFNvdXJjZVJhbmdlJiByYW5nZSwgY29u
c3QgVmVjdG9yPHNpemVfdD4mIGxpbmVFbmRpbmdzLCBpbnQqIGVuZGluZ0xpbmUgPSBudWxscHRy
KQorc3RhdGljIFJlZlB0cjxQcm90b2NvbDo6Q1NTOjpTb3VyY2VSYW5nZT4gYnVpbGRTb3VyY2VS
YW5nZU9iamVjdChjb25zdCBTb3VyY2VSYW5nZSYgcmFuZ2UsIGNvbnN0IFZlY3RvcjxzaXplX3Q+
JiBsaW5lRW5kaW5ncywgaW50KiBlbmRpbmdMaW5lID0gbnVsbHB0cikKIHsKICAgICBpZiAobGlu
ZUVuZGluZ3MuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTM5MSw3ICsz
OTEsNyBAQCBzdGF0aWMgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U291cmNlUmFu
Z2U+IGJ1aWxkU291cmNlUmFuZ2VPYmplY3QoY29ucwogICAgIGlmIChlbmRpbmdMaW5lKQogICAg
ICAgICAqZW5kaW5nTGluZSA9IGVuZC5tX2xpbmUuemVyb0Jhc2VkSW50KCk7CiAKLSAgICByZXR1
cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTb3VyY2VSYW5nZTo6Y3JlYXRlKCkKKyAgICBy
ZXR1cm4gUHJvdG9jb2w6OkNTUzo6U291cmNlUmFuZ2U6OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRT
dGFydExpbmUoc3RhcnQubV9saW5lLnplcm9CYXNlZEludCgpKQogICAgICAgICAuc2V0U3RhcnRD
b2x1bW4oc3RhcnQubV9jb2x1bW4uemVyb0Jhc2VkSW50KCkpCiAgICAgICAgIC5zZXRFbmRMaW5l
KGVuZC5tX2xpbmUuemVyb0Jhc2VkSW50KCkpCkBAIC00MjgsMzQgKzQyOCwzNCBAQCBzdGF0aWMg
UmVmUHRyPENTU1J1bGVMaXN0PiBhc0NTU1J1bGVMaXN0KENTU1J1bGUqIHJ1bGUpCiAgICAgcmV0
dXJuIG51bGxwdHI7CiB9CiAKLXN0YXRpYyBSZWY8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpDU1M6Okdyb3VwaW5nPj4gYnVpbGRBcnJheUZvckdyb3VwaW5ncyhDU1NSdWxlJiBy
dWxlKQorc3RhdGljIFJlZjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpDU1M6Okdyb3VwaW5nPj4g
YnVpbGRBcnJheUZvckdyb3VwaW5ncyhDU1NSdWxlJiBydWxlKQogewotICAgIGF1dG8gZ3JvdXBp
bmdzUGF5bG9hZCA9IEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpHcm91
cGluZz46OmNyZWF0ZSgpOworICAgIGF1dG8gZ3JvdXBpbmdzUGF5bG9hZCA9IEpTT046OkFycmF5
T2Y8UHJvdG9jb2w6OkNTUzo6R3JvdXBpbmc+OjpjcmVhdGUoKTsKIAogICAgIGF1dG8qIHBhcmVu
dFJ1bGUgPSAmcnVsZTsKICAgICB3aGlsZSAocGFyZW50UnVsZSkgewotICAgICAgICBSZWZQdHI8
SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpHcm91cGluZz4gcnVsZUdyb3VwaW5nUGF5bG9hZDsK
KyAgICAgICAgUmVmUHRyPFByb3RvY29sOjpDU1M6Okdyb3VwaW5nPiBydWxlR3JvdXBpbmdQYXls
b2FkOwogCiAgICAgICAgIGlmIChpczxDU1NNZWRpYVJ1bGU+KHBhcmVudFJ1bGUpKSB7CiAgICAg
ICAgICAgICBhdXRvKiBtZWRpYSA9IGRvd25jYXN0PENTU01lZGlhUnVsZT4ocGFyZW50UnVsZSkt
Pm1lZGlhKCk7CiAgICAgICAgICAgICBpZiAobWVkaWEgJiYgbWVkaWEtPmxlbmd0aCgpICYmIG1l
ZGlhLT5tZWRpYVRleHQoKSAhPSAiYWxsIikgewotICAgICAgICAgICAgICAgIHJ1bGVHcm91cGlu
Z1BheWxvYWQgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6Okdyb3VwaW5nOjpjcmVhdGUoKQor
ICAgICAgICAgICAgICAgIHJ1bGVHcm91cGluZ1BheWxvYWQgPSBQcm90b2NvbDo6Q1NTOjpHcm91
cGluZzo6Y3JlYXRlKCkKICAgICAgICAgICAgICAgICAgICAgLnNldFRleHQobWVkaWEtPm1lZGlh
VGV4dCgpKQotICAgICAgICAgICAgICAgICAgICAuc2V0VHlwZShJbnNwZWN0b3I6OlByb3RvY29s
OjpDU1M6Okdyb3VwaW5nOjpUeXBlOjpNZWRpYVJ1bGUpCisgICAgICAgICAgICAgICAgICAgIC5z
ZXRUeXBlKFByb3RvY29sOjpDU1M6Okdyb3VwaW5nOjpUeXBlOjpNZWRpYVJ1bGUpCiAgICAgICAg
ICAgICAgICAgICAgIC5yZWxlYXNlKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBp
ZiAoaXM8Q1NTSW1wb3J0UnVsZT4ocGFyZW50UnVsZSkpIHsKICAgICAgICAgICAgIGF1dG8mIG1l
ZGlhID0gZG93bmNhc3Q8Q1NTSW1wb3J0UnVsZT4ocGFyZW50UnVsZSktPm1lZGlhKCk7CiAgICAg
ICAgICAgICBpZiAobWVkaWEubGVuZ3RoKCkgJiYgbWVkaWEubWVkaWFUZXh0KCkgIT0gImFsbCIp
IHsKLSAgICAgICAgICAgICAgICBydWxlR3JvdXBpbmdQYXlsb2FkID0gSW5zcGVjdG9yOjpQcm90
b2NvbDo6Q1NTOjpHcm91cGluZzo6Y3JlYXRlKCkKKyAgICAgICAgICAgICAgICBydWxlR3JvdXBp
bmdQYXlsb2FkID0gUHJvdG9jb2w6OkNTUzo6R3JvdXBpbmc6OmNyZWF0ZSgpCiAgICAgICAgICAg
ICAgICAgICAgIC5zZXRUZXh0KG1lZGlhLm1lZGlhVGV4dCgpKQotICAgICAgICAgICAgICAgICAg
ICAuc2V0VHlwZShJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6Okdyb3VwaW5nOjpUeXBlOjpNZWRp
YUltcG9ydFJ1bGUpCisgICAgICAgICAgICAgICAgICAgIC5zZXRUeXBlKFByb3RvY29sOjpDU1M6
Okdyb3VwaW5nOjpUeXBlOjpNZWRpYUltcG9ydFJ1bGUpCiAgICAgICAgICAgICAgICAgICAgIC5y
ZWxlYXNlKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAoaXM8Q1NTU3VwcG9y
dHNSdWxlPihwYXJlbnRSdWxlKSkgewotICAgICAgICAgICAgcnVsZUdyb3VwaW5nUGF5bG9hZCA9
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6R3JvdXBpbmc6OmNyZWF0ZSgpCisgICAgICAgICAg
ICBydWxlR3JvdXBpbmdQYXlsb2FkID0gUHJvdG9jb2w6OkNTUzo6R3JvdXBpbmc6OmNyZWF0ZSgp
CiAgICAgICAgICAgICAgICAgLnNldFRleHQoZG93bmNhc3Q8Q1NTU3VwcG9ydHNSdWxlPihwYXJl
bnRSdWxlKS0+Y29uZGl0aW9uVGV4dCgpKQotICAgICAgICAgICAgICAgIC5zZXRUeXBlKEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkNTUzo6R3JvdXBpbmc6OlR5cGU6OlN1cHBvcnRzUnVsZSkKKyAgICAg
ICAgICAgICAgICAuc2V0VHlwZShQcm90b2NvbDo6Q1NTOjpHcm91cGluZzo6VHlwZTo6U3VwcG9y
dHNSdWxlKQogICAgICAgICAgICAgICAgIC5yZWxlYXNlKCk7CiAgICAgICAgIH0KIApAQCAtNDcw
LDcgKzQ3MCw3IEBAIHN0YXRpYyBSZWY8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29s
OjpDU1M6Okdyb3VwaW5nPj4gYnVpbGRBcnJheUZvckdyb3VwCiAgICAgICAgICAgICAgICAgICAg
IHJ1bGVHcm91cGluZ1BheWxvYWQtPnNldFNvdXJjZVVSTChzb3VyY2VVUkwpOwogICAgICAgICAg
ICAgfQogCi0gICAgICAgICAgICBncm91cGluZ3NQYXlsb2FkLT5hZGRJdGVtKFdURk1vdmUocnVs
ZUdyb3VwaW5nUGF5bG9hZCkpOworICAgICAgICAgICAgZ3JvdXBpbmdzUGF5bG9hZC0+YWRkSXRl
bShydWxlR3JvdXBpbmdQYXlsb2FkLnJlbGVhc2VOb25OdWxsKCkpOwogICAgICAgICB9CiAKICAg
ICAgICAgaWYgKHBhcmVudFJ1bGUtPnBhcmVudFJ1bGUoKSkgewpAQCAtNDgyLDkgKzQ4Miw5IEBA
IHN0YXRpYyBSZWY8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6Okdyb3Vw
aW5nPj4gYnVpbGRBcnJheUZvckdyb3VwCiAgICAgICAgIHdoaWxlIChzdHlsZVNoZWV0KSB7CiAg
ICAgICAgICAgICBhdXRvKiBtZWRpYSA9IHN0eWxlU2hlZXQtPm1lZGlhKCk7CiAgICAgICAgICAg
ICBpZiAobWVkaWEgJiYgbWVkaWEtPmxlbmd0aCgpICYmIG1lZGlhLT5tZWRpYVRleHQoKSAhPSAi
YWxsIikgewotICAgICAgICAgICAgICAgIGF1dG8gc2hlZXRHcm91cGluZ1BheWxvYWQgPSBJbnNw
ZWN0b3I6OlByb3RvY29sOjpDU1M6Okdyb3VwaW5nOjpjcmVhdGUoKQorICAgICAgICAgICAgICAg
IGF1dG8gc2hlZXRHcm91cGluZ1BheWxvYWQgPSBQcm90b2NvbDo6Q1NTOjpHcm91cGluZzo6Y3Jl
YXRlKCkKICAgICAgICAgICAgICAgICAgICAgLnNldFRleHQobWVkaWEtPm1lZGlhVGV4dCgpKQot
ICAgICAgICAgICAgICAgICAgICAuc2V0VHlwZShpczxIVE1MU3R5bGVFbGVtZW50PihzdHlsZVNo
ZWV0LT5vd25lck5vZGUoKSkgPyBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6Okdyb3VwaW5nOjpU
eXBlOjpNZWRpYVN0eWxlTm9kZTogSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpHcm91cGluZzo6
VHlwZTo6TWVkaWFMaW5rTm9kZSkKKyAgICAgICAgICAgICAgICAgICAgLnNldFR5cGUoaXM8SFRN
TFN0eWxlRWxlbWVudD4oc3R5bGVTaGVldC0+b3duZXJOb2RlKCkpID8gUHJvdG9jb2w6OkNTUzo6
R3JvdXBpbmc6OlR5cGU6Ok1lZGlhU3R5bGVOb2RlOiBQcm90b2NvbDo6Q1NTOjpHcm91cGluZzo6
VHlwZTo6TWVkaWFMaW5rTm9kZSkKICAgICAgICAgICAgICAgICAgICAgLnJlbGVhc2UoKTsKIAog
ICAgICAgICAgICAgICAgIFN0cmluZyBzb3VyY2VVUkw7CkBAIC01MjMsMjggKzUyMywzMCBAQCBJ
bnNwZWN0b3JTdHlsZTo6SW5zcGVjdG9yU3R5bGUoY29uc3QgSW5zcGVjdG9yQ1NTSWQmIHN0eWxl
SWQsIFJlZjxDU1NTdHlsZURlY2xhcgogCiBJbnNwZWN0b3JTdHlsZTo6fkluc3BlY3RvclN0eWxl
KCkgPSBkZWZhdWx0OwogCi1SZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHls
ZT4gSW5zcGVjdG9yU3R5bGU6OmJ1aWxkT2JqZWN0Rm9yU3R5bGUoKSBjb25zdAorUmVmPFByb3Rv
Y29sOjpDU1M6OkNTU1N0eWxlPiBJbnNwZWN0b3JTdHlsZTo6YnVpbGRPYmplY3RGb3JTdHlsZSgp
IGNvbnN0CiB7Ci0gICAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+IHJl
c3VsdCA9IHN0eWxlV2l0aFByb3BlcnRpZXMoKTsKLSAgICBpZiAoIW1fc3R5bGVJZC5pc0VtcHR5
KCkpCi0gICAgICAgIHJlc3VsdC0+c2V0U3R5bGVJZChtX3N0eWxlSWQuYXNQcm90b2NvbFZhbHVl
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGVJZD4oKSk7CisgICAgUmVmPFByb3Rv
Y29sOjpDU1M6OkNTU1N0eWxlPiByZXN1bHQgPSBzdHlsZVdpdGhQcm9wZXJ0aWVzKCk7CisgICAg
aWYgKGF1dG8gc3R5bGVJZCA9IG1fc3R5bGVJZC5hc1Byb3RvY29sVmFsdWU8UHJvdG9jb2w6OkNT
Uzo6Q1NTU3R5bGVJZD4oKSkKKyAgICAgICAgcmVzdWx0LT5zZXRTdHlsZUlkKHN0eWxlSWQucmVs
ZWFzZU5vbk51bGwoKSk7CiAKICAgICByZXN1bHQtPnNldFdpZHRoKG1fc3R5bGUtPmdldFByb3Bl
cnR5VmFsdWUoIndpZHRoIikpOwogICAgIHJlc3VsdC0+c2V0SGVpZ2h0KG1fc3R5bGUtPmdldFBy
b3BlcnR5VmFsdWUoImhlaWdodCIpKTsKIAogICAgIFJlZlB0cjxDU1NSdWxlU291cmNlRGF0YT4g
c291cmNlRGF0YSA9IGV4dHJhY3RTb3VyY2VEYXRhKCk7Ci0gICAgaWYgKHNvdXJjZURhdGEpCi0g
ICAgICAgIHJlc3VsdC0+c2V0UmFuZ2UoYnVpbGRTb3VyY2VSYW5nZU9iamVjdChzb3VyY2VEYXRh
LT5ydWxlQm9keVJhbmdlLCBtX3BhcmVudFN0eWxlU2hlZXQtPmxpbmVFbmRpbmdzKCkpKTsKKyAg
ICBpZiAoc291cmNlRGF0YSkgeworICAgICAgICBpZiAoYXV0byByYW5nZSA9IGJ1aWxkU291cmNl
UmFuZ2VPYmplY3Qoc291cmNlRGF0YS0+cnVsZUJvZHlSYW5nZSwgbV9wYXJlbnRTdHlsZVNoZWV0
LT5saW5lRW5kaW5ncygpKSkKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0UmFuZ2UocmFuZ2UucmVs
ZWFzZU5vbk51bGwoKSk7CisgICAgfQogCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotUmVmPEpT
T046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NDb21wdXRlZFN0eWxlUHJv
cGVydHk+PiBJbnNwZWN0b3JTdHlsZTo6YnVpbGRBcnJheUZvckNvbXB1dGVkU3R5bGUoKSBjb25z
dAorUmVmPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkNTUzo6Q1NTQ29tcHV0ZWRTdHlsZVByb3Bl
cnR5Pj4gSW5zcGVjdG9yU3R5bGU6OmJ1aWxkQXJyYXlGb3JDb21wdXRlZFN0eWxlKCkgY29uc3QK
IHsKLSAgICBhdXRvIHJlc3VsdCA9IEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6
Q1NTOjpDU1NDb21wdXRlZFN0eWxlUHJvcGVydHk+OjpjcmVhdGUoKTsKKyAgICBhdXRvIHJlc3Vs
dCA9IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkNTUzo6Q1NTQ29tcHV0ZWRTdHlsZVByb3BlcnR5
Pjo6Y3JlYXRlKCk7CiAgICAgZm9yIChhdXRvJiBwcm9wZXJ0eSA6IGNvbGxlY3RQcm9wZXJ0aWVz
KHRydWUpKSB7CiAgICAgICAgIGNvbnN0IENTU1Byb3BlcnR5U291cmNlRGF0YSYgcHJvcGVydHlF
bnRyeSA9IHByb3BlcnR5LnNvdXJjZURhdGE7Ci0gICAgICAgIGF1dG8gZW50cnkgPSBJbnNwZWN0
b3I6OlByb3RvY29sOjpDU1M6OkNTU0NvbXB1dGVkU3R5bGVQcm9wZXJ0eTo6Y3JlYXRlKCkKKyAg
ICAgICAgYXV0byBlbnRyeSA9IFByb3RvY29sOjpDU1M6OkNTU0NvbXB1dGVkU3R5bGVQcm9wZXJ0
eTo6Y3JlYXRlKCkKICAgICAgICAgICAgIC5zZXROYW1lKHByb3BlcnR5RW50cnkubmFtZSkKICAg
ICAgICAgICAgIC5zZXRWYWx1ZShwcm9wZXJ0eUVudHJ5LnZhbHVlKQogICAgICAgICAgICAgLnJl
bGVhc2UoKTsKQEAgLTYyMywxMyArNjI1LDEzIEBAIFZlY3RvcjxJbnNwZWN0b3JTdHlsZVByb3Bl
cnR5PiBJbnNwZWN0b3JTdHlsZTo6Y29sbGVjdFByb3BlcnRpZXMoYm9vbCBpbmNsdWRlQWxsCiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NT
U3R5bGU+IEluc3BlY3RvclN0eWxlOjpzdHlsZVdpdGhQcm9wZXJ0aWVzKCkgY29uc3QKK1JlZjxQ
cm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4gSW5zcGVjdG9yU3R5bGU6OnN0eWxlV2l0aFByb3BlcnRp
ZXMoKSBjb25zdAogewogICAgIGF1dG8gcHJvcGVydGllcyA9IGNvbGxlY3RQcm9wZXJ0aWVzKGZh
bHNlKTsKIAotICAgIGF1dG8gcHJvcGVydGllc09iamVjdCA9IEpTT046OkFycmF5T2Y8SW5zcGVj
dG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0eT46OmNyZWF0ZSgpOwotICAgIGF1dG8gc2hv
cnRoYW5kRW50cmllcyA9IEFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTaG9ydGhh
bmRFbnRyeT46OmNyZWF0ZSgpOwotICAgIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0eT4+IHByb3BlcnR5TmFtZVRvUHJldmlvdXNBY3Rp
dmVQcm9wZXJ0eTsKKyAgICBhdXRvIHByb3BlcnRpZXNPYmplY3QgPSBKU09OOjpBcnJheU9mPFBy
b3RvY29sOjpDU1M6OkNTU1Byb3BlcnR5Pjo6Y3JlYXRlKCk7CisgICAgYXV0byBzaG9ydGhhbmRF
bnRyaWVzID0gQXJyYXlPZjxQcm90b2NvbDo6Q1NTOjpTaG9ydGhhbmRFbnRyeT46OmNyZWF0ZSgp
OworICAgIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8UHJvdG9jb2w6OkNTUzo6Q1NTUHJvcGVydHk+
PiBwcm9wZXJ0eU5hbWVUb1ByZXZpb3VzQWN0aXZlUHJvcGVydHk7CiAgICAgSGFzaFNldDxTdHJp
bmc+IGZvdW5kU2hvcnRoYW5kczsKICAgICBTdHJpbmcgcHJldmlvdXNQcmlvcml0eTsKICAgICBT
dHJpbmcgcHJldmlvdXNTdGF0dXM7CkBAIC02NDEsOSArNjQzLDkgQEAgUmVmPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+IEluc3BlY3RvclN0eWxlOjpzdHlsZVdpdGhQcm9wZXJ0
aWVzKCkgY28KICAgICAgICAgY29uc3QgQ1NTUHJvcGVydHlTb3VyY2VEYXRhJiBwcm9wZXJ0eUVu
dHJ5ID0gaXQtPnNvdXJjZURhdGE7CiAgICAgICAgIGNvbnN0IFN0cmluZyYgbmFtZSA9IHByb3Bl
cnR5RW50cnkubmFtZTsKIAotICAgICAgICBhdXRvIHN0YXR1cyA9IGl0LT5kaXNhYmxlZCA/IElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUHJvcGVydHlTdGF0dXM6OkRpc2FibGVkIDogSW5z
cGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0eVN0YXR1czo6QWN0aXZlOworICAgICAg
ICBhdXRvIHN0YXR1cyA9IGl0LT5kaXNhYmxlZCA/IFByb3RvY29sOjpDU1M6OkNTU1Byb3BlcnR5
U3RhdHVzOjpEaXNhYmxlZCA6IFByb3RvY29sOjpDU1M6OkNTU1Byb3BlcnR5U3RhdHVzOjpBY3Rp
dmU7CiAKLSAgICAgICAgYXV0byBwcm9wZXJ0eSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6
Q1NTUHJvcGVydHk6OmNyZWF0ZSgpCisgICAgICAgIGF1dG8gcHJvcGVydHkgPSBQcm90b2NvbDo6
Q1NTOjpDU1NQcm9wZXJ0eTo6Y3JlYXRlKCkKICAgICAgICAgICAgIC5zZXROYW1lKG5hbWUuY29u
dmVydFRvQVNDSUlMb3dlcmNhc2UoKSkKICAgICAgICAgICAgIC5zZXRWYWx1ZShwcm9wZXJ0eUVu
dHJ5LnZhbHVlKQogICAgICAgICAgICAgLnJlbGVhc2UoKTsKQEAgLTY2OSw3ICs2NzEsOCBAQCBS
ZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4gSW5zcGVjdG9yU3R5bGU6OnN0
eWxlV2l0aFByb3BlcnRpZXMoKSBjbwogICAgICAgICAgICAgU291cmNlUmFuZ2UgYWJzb2x1dGVQ
cm9wZXJ0eVJhbmdlID0gcHJvcGVydHlFbnRyeS5yYW5nZTsKICAgICAgICAgICAgIGFic29sdXRl
UHJvcGVydHlSYW5nZS5zdGFydCArPSBydWxlQm9keVJhbmdlU3RhcnQ7CiAgICAgICAgICAgICBh
YnNvbHV0ZVByb3BlcnR5UmFuZ2UuZW5kICs9IHJ1bGVCb2R5UmFuZ2VTdGFydDsKLSAgICAgICAg
ICAgIHByb3BlcnR5LT5zZXRSYW5nZShidWlsZFNvdXJjZVJhbmdlT2JqZWN0KGFic29sdXRlUHJv
cGVydHlSYW5nZSwgbGluZUVuZGluZ3MpKTsKKyAgICAgICAgICAgIGlmIChhdXRvIHJhbmdlID0g
YnVpbGRTb3VyY2VSYW5nZU9iamVjdChhYnNvbHV0ZVByb3BlcnR5UmFuZ2UsIGxpbmVFbmRpbmdz
KSkKKyAgICAgICAgICAgICAgICBwcm9wZXJ0eS0+c2V0UmFuZ2UocmFuZ2UucmVsZWFzZU5vbk51
bGwoKSk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoIWl0LT5kaXNhYmxlZCkgewpAQCAtNjgz
LDMwICs2ODYsMzUgQEAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+IElu
c3BlY3RvclN0eWxlOjpzdHlsZVdpdGhQcm9wZXJ0aWVzKCkgY28KIAogICAgICAgICAgICAgICAg
IC8vIENhbm9uaWNhbGl6ZSBwcm9wZXJ0eSBuYW1lcyB0byB0cmVhdCBub24tcHJlZml4ZWQgYW5k
IHZlbmRvci1wcmVmaXhlZCBwcm9wZXJ0eSBuYW1lcyB0aGUgc2FtZSAob3BhY2l0eSB2cy4gLXdl
YmtpdC1vcGFjaXR5KS4KICAgICAgICAgICAgICAgICBTdHJpbmcgY2Fub25pY2FsUHJvcGVydHlO
YW1lID0gcHJvcGVydHlJZCA/IGdldFByb3BlcnR5TmFtZVN0cmluZyhwcm9wZXJ0eUlkKSA6IG5h
bWU7Ci0gICAgICAgICAgICAgICAgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpDU1M6OkNTU1Byb3BlcnR5Pj46Oml0ZXJhdG9yIGFjdGl2ZUl0ID0gcHJvcGVydHlO
YW1lVG9QcmV2aW91c0FjdGl2ZVByb3BlcnR5LmZpbmQoY2Fub25pY2FsUHJvcGVydHlOYW1lKTsK
KyAgICAgICAgICAgICAgICBIYXNoTWFwPFN0cmluZywgUmVmUHRyPFByb3RvY29sOjpDU1M6OkNT
U1Byb3BlcnR5Pj46Oml0ZXJhdG9yIGFjdGl2ZUl0ID0gcHJvcGVydHlOYW1lVG9QcmV2aW91c0Fj
dGl2ZVByb3BlcnR5LmZpbmQoY2Fub25pY2FsUHJvcGVydHlOYW1lKTsKICAgICAgICAgICAgICAg
ICBpZiAoYWN0aXZlSXQgIT0gcHJvcGVydHlOYW1lVG9QcmV2aW91c0FjdGl2ZVByb3BlcnR5LmVu
ZCgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0eUVudHJ5LnBhcnNlZE9rKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBib29sIHN1Y2Nlc3NQcmlvcml0eSA9IGFjdGl2ZUl0
LT52YWx1ZS0+Z2V0U3RyaW5nKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUHJvcGVydHk6
OlByaW9yaXR5LCBwcmV2aW91c1ByaW9yaXR5KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJv
b2wgc3VjY2Vzc1N0YXR1cyA9IGFjdGl2ZUl0LT52YWx1ZS0+Z2V0U3RyaW5nKEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkNTUzo6Q1NTUHJvcGVydHk6OlN0YXR1cywgcHJldmlvdXNTdGF0dXMpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Y2Nlc3NTdGF0dXMgJiYgcHJldmlvdXNTdGF0dXMg
IT0gImluYWN0aXZlIikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0
eUVudHJ5LmltcG9ydGFudCB8fCAhc3VjY2Vzc1ByaW9yaXR5KSAvLyBQcmlvcml0eSBub3Qgc2V0
ID09ICJub3QgaW1wb3J0YW50Ii4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hv
dWxkSW5hY3RpdmF0ZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBp
ZiAoc3RhdHVzID09IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUHJvcGVydHlTdGF0dXM6
OkFjdGl2ZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJbmFjdGl2YXRl
IGEgbm9uLWltcG9ydGFudCBwcm9wZXJ0eSBmb2xsb3dpbmcgdGhlIHNhbWUtbmFtZWQgaW1wb3J0
YW50IHByb3BlcnR5LgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSBJ
bnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1Byb3BlcnR5U3RhdHVzOjpJbmFjdGl2ZTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGF1dG8gbmV3UHJpb3JpdHkgPSBhY3RpdmVJdC0+dmFsdWUt
PmdldFN0cmluZyhQcm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0eTo6cHJpb3JpdHlLZXkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCEhbmV3UHJpb3JpdHkpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcHJldmlvdXNQcmlvcml0eSA9IG5ld1ByaW9yaXR5OworCisgICAgICAgICAg
ICAgICAgICAgICAgICBhdXRvIG5ld1N0YXR1cyA9IGFjdGl2ZUl0LT52YWx1ZS0+Z2V0U3RyaW5n
KFByb3RvY29sOjpDU1M6OkNTU1Byb3BlcnR5OjpzdGF0dXNLZXkpOworICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCEhbmV3U3RhdHVzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cHJldmlvdXNTdGF0dXMgPSBuZXdTdGF0dXM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHByZXZpb3VzU3RhdHVzICE9IFByb3RvY29sOjpIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRW
YWx1ZShQcm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0eVN0YXR1czo6SW5hY3RpdmUpKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0eUVudHJ5LmltcG9ydGFudCB8
fCAhIW5ld1ByaW9yaXR5KSAvLyBQcmlvcml0eSBub3Qgc2V0ID09ICJub3QgaW1wb3J0YW50Ii4K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3VsZEluYWN0aXZhdGUgPSB0
cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChzdGF0dXMgPT0g
UHJvdG9jb2w6OkNTUzo6Q1NTUHJvcGVydHlTdGF0dXM6OkFjdGl2ZSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gSW5hY3RpdmF0ZSBhIG5vbi1pbXBvcnRhbnQgcHJv
cGVydHkgZm9sbG93aW5nIHRoZSBzYW1lLW5hbWVkIGltcG9ydGFudCBwcm9wZXJ0eS4KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IFByb3RvY29sOjpDU1M6OkNT
U1Byb3BlcnR5U3RhdHVzOjpJbmFjdGl2ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGJvb2wgcHJldmlvdXNQYXJzZWRPazsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wg
c3VjY2VzcyA9IGFjdGl2ZUl0LT52YWx1ZS0+Z2V0Qm9vbGVhbihJbnNwZWN0b3I6OlByb3RvY29s
OjpDU1M6OkNTU1Byb3BlcnR5OjpQYXJzZWRPaywgcHJldmlvdXNQYXJzZWRPayk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoc3VjY2VzcyAmJiAhcHJldmlvdXNQYXJzZWRPaykKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGF1dG8gcHJldmlvdXNQYXJzZWRPayA9IGFjdGl2ZUl0LT52YWx1
ZS0+Z2V0Qm9vbGVhbihQcm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0eTo6cGFyc2VkT2tLZXkpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByZXZpb3VzUGFyc2VkT2sgJiYgIXByZXZpb3Vz
UGFyc2VkT2spCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvdWxkSW5hY3RpdmF0ZSA9
IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9IGVsc2UKICAg
ICAgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lVG9QcmV2aW91c0FjdGl2ZVByb3BlcnR5LnNl
dChjYW5vbmljYWxQcm9wZXJ0eU5hbWUsIHByb3BlcnR5LmNvcHlSZWYoKSk7CiAKICAgICAgICAg
ICAgICAgICBpZiAoc2hvdWxkSW5hY3RpdmF0ZSkgewotICAgICAgICAgICAgICAgICAgICBhY3Rp
dmVJdC0+dmFsdWUtPnNldFN0YXR1cyhJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1Byb3Bl
cnR5U3RhdHVzOjpJbmFjdGl2ZSk7CisgICAgICAgICAgICAgICAgICAgIGFjdGl2ZUl0LT52YWx1
ZS0+c2V0U3RhdHVzKFByb3RvY29sOjpDU1M6OkNTU1Byb3BlcnR5U3RhdHVzOjpJbmFjdGl2ZSk7
CiAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZVRvUHJldmlvdXNBY3RpdmVQcm9wZXJ0
eS5zZXQoY2Fub25pY2FsUHJvcGVydHlOYW1lLCBwcm9wZXJ0eS5jb3B5UmVmKCkpOwogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSB7CkBAIC03MTQsMTMgKzcyMiwxMyBAQCBS
ZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4gSW5zcGVjdG9yU3R5bGU6OnN0
eWxlV2l0aFByb3BlcnRpZXMoKSBjbwogICAgICAgICAgICAgICAgIC8vIERlZmF1bHQgImltcGxp
Y2l0IiA9PSBmYWxzZS4KICAgICAgICAgICAgICAgICBpZiAoaW1wbGljaXQpCiAgICAgICAgICAg
ICAgICAgICAgIHByb3BlcnR5LT5zZXRJbXBsaWNpdCh0cnVlKTsKLSAgICAgICAgICAgICAgICBz
dGF0dXMgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1Byb3BlcnR5U3RhdHVzOjpTdHls
ZTsKKyAgICAgICAgICAgICAgICBzdGF0dXMgPSBQcm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0eVN0
YXR1czo6U3R5bGU7CiAKICAgICAgICAgICAgICAgICBTdHJpbmcgc2hvcnRoYW5kID0gbV9zdHls
ZS0+Z2V0UHJvcGVydHlTaG9ydGhhbmQobmFtZSk7CiAgICAgICAgICAgICAgICAgaWYgKCFzaG9y
dGhhbmQuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmICghZm91bmRTaG9ydGhh
bmRzLmNvbnRhaW5zKHNob3J0aGFuZCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5k
U2hvcnRoYW5kcy5hZGQoc2hvcnRoYW5kKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8g
ZW50cnkgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlNob3J0aGFuZEVudHJ5OjpjcmVhdGUo
KQorICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBlbnRyeSA9IFByb3RvY29sOjpDU1M6OlNo
b3J0aGFuZEVudHJ5OjpjcmVhdGUoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRO
YW1lKHNob3J0aGFuZCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0VmFsdWUoc2hv
cnRoYW5kVmFsdWUoc2hvcnRoYW5kKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVs
ZWFzZSgpOwpAQCAtNzMxLDExICs3MzksMTEgQEAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNT
Uzo6Q1NTU3R5bGU+IEluc3BlY3RvclN0eWxlOjpzdHlsZVdpdGhQcm9wZXJ0aWVzKCkgY28KICAg
ICAgICAgfQogCiAgICAgICAgIC8vIERlZmF1bHQgInN0YXR1cyIgPT0gInN0eWxlIi4KLSAgICAg
ICAgaWYgKHN0YXR1cyAhPSBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1Byb3BlcnR5U3Rh
dHVzOjpTdHlsZSkKKyAgICAgICAgaWYgKHN0YXR1cyAhPSBQcm90b2NvbDo6Q1NTOjpDU1NQcm9w
ZXJ0eVN0YXR1czo6U3R5bGUpCiAgICAgICAgICAgICBwcm9wZXJ0eS0+c2V0U3RhdHVzKHN0YXR1
cyk7CiAgICAgfQogCi0gICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5
bGU6OmNyZWF0ZSgpCisgICAgcmV0dXJuIFByb3RvY29sOjpDU1M6OkNTU1N0eWxlOjpjcmVhdGUo
KQogICAgICAgICAuc2V0Q3NzUHJvcGVydGllcyhXVEZNb3ZlKHByb3BlcnRpZXNPYmplY3QpKQog
ICAgICAgICAuc2V0U2hvcnRoYW5kRW50cmllcyhXVEZNb3ZlKHNob3J0aGFuZEVudHJpZXMpKQog
ICAgICAgICAucmVsZWFzZSgpOwpAQCAtODA1LDcgKzgxMyw3IEBAIFZlY3RvcjxTdHJpbmc+IElu
c3BlY3RvclN0eWxlOjpsb25naGFuZFByb3BlcnRpZXMoY29uc3QgU3RyaW5nJiBzaG9ydGhhbmRQ
cm9wZXJ0CiAgICAgcmV0dXJuIHByb3BlcnRpZXM7CiB9CiAKLVJlZjxJbnNwZWN0b3JTdHlsZVNo
ZWV0PiBJbnNwZWN0b3JTdHlsZVNoZWV0OjpjcmVhdGUoSW5zcGVjdG9yUGFnZUFnZW50KiBwYWdl
QWdlbnQsIGNvbnN0IFN0cmluZyYgaWQsIFJlZlB0cjxDU1NTdHlsZVNoZWV0PiYmIHBhZ2VTdHls
ZVNoZWV0LCBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW4gb3JpZ2lu
LCBjb25zdCBTdHJpbmcmIGRvY3VtZW50VVJMLCBMaXN0ZW5lciogbGlzdGVuZXIpCitSZWY8SW5z
cGVjdG9yU3R5bGVTaGVldD4gSW5zcGVjdG9yU3R5bGVTaGVldDo6Y3JlYXRlKEluc3BlY3RvclBh
Z2VBZ2VudCogcGFnZUFnZW50LCBjb25zdCBTdHJpbmcmIGlkLCBSZWZQdHI8Q1NTU3R5bGVTaGVl
dD4mJiBwYWdlU3R5bGVTaGVldCwgUHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbiBvcmln
aW4sIGNvbnN0IFN0cmluZyYgZG9jdW1lbnRVUkwsIExpc3RlbmVyKiBsaXN0ZW5lcikKIHsKICAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJbnNwZWN0b3JTdHlsZVNoZWV0KHBhZ2VBZ2VudCwgaWQs
IFdURk1vdmUocGFnZVN0eWxlU2hlZXQpLCBvcmlnaW4sIGRvY3VtZW50VVJMLCBsaXN0ZW5lcikp
OwogfQpAQCAtODE3LDcgKzgyNSw3IEBAIFN0cmluZyBJbnNwZWN0b3JTdHlsZVNoZWV0OjpzdHls
ZVNoZWV0VVJMKENTU1N0eWxlU2hlZXQqIHBhZ2VTdHlsZVNoZWV0KQogICAgIHJldHVybiBlbXB0
eVN0cmluZygpOwogfQogCi1JbnNwZWN0b3JTdHlsZVNoZWV0OjpJbnNwZWN0b3JTdHlsZVNoZWV0
KEluc3BlY3RvclBhZ2VBZ2VudCogcGFnZUFnZW50LCBjb25zdCBTdHJpbmcmIGlkLCBSZWZQdHI8
Q1NTU3R5bGVTaGVldD4mJiBwYWdlU3R5bGVTaGVldCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NT
OjpTdHlsZVNoZWV0T3JpZ2luIG9yaWdpbiwgY29uc3QgU3RyaW5nJiBkb2N1bWVudFVSTCwgTGlz
dGVuZXIqIGxpc3RlbmVyKQorSW5zcGVjdG9yU3R5bGVTaGVldDo6SW5zcGVjdG9yU3R5bGVTaGVl
dChJbnNwZWN0b3JQYWdlQWdlbnQqIHBhZ2VBZ2VudCwgY29uc3QgU3RyaW5nJiBpZCwgUmVmUHRy
PENTU1N0eWxlU2hlZXQ+JiYgcGFnZVN0eWxlU2hlZXQsIFByb3RvY29sOjpDU1M6OlN0eWxlU2hl
ZXRPcmlnaW4gb3JpZ2luLCBjb25zdCBTdHJpbmcmIGRvY3VtZW50VVJMLCBMaXN0ZW5lciogbGlz
dGVuZXIpCiAgICAgOiBtX3BhZ2VBZ2VudChwYWdlQWdlbnQpCiAgICAgLCBtX2lkKGlkKQogICAg
ICwgbV9wYWdlU3R5bGVTaGVldChXVEZNb3ZlKHBhZ2VTdHlsZVNoZWV0KSkKQEAgLTk0Nyw3ICs5
NTUsNyBAQCBFeGNlcHRpb25PcjxDU1NTdHlsZVJ1bGUqPiBJbnNwZWN0b3JTdHlsZVNoZWV0Ojph
ZGRSdWxlKGNvbnN0IFN0cmluZyYgc2VsZWN0b3IpCiAgICAgc2V0VGV4dChzdHlsZVNoZWV0VGV4
dC50b1N0cmluZygpKTsKIAogICAgIC8vIEluc3BlY3RvciBTdHlsZSBTaGVldHMgYXJlIGFsd2F5
cyB0cmVhdGVkIGFzIHRob3VnaCB0aGVpciBwYXJzZWQgZGF0YSBpcyByZWFkeS4KLSAgICBpZiAo
bV9vcmlnaW4gPT0gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luOjpJ
bnNwZWN0b3IpCisgICAgaWYgKG1fb3JpZ2luID09IFByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRP
cmlnaW46Okluc3BlY3RvcikKICAgICAgICAgZmlyZVN0eWxlU2hlZXRDaGFuZ2VkKCk7CiAgICAg
ZWxzZQogICAgICAgICByZXBhcnNlU3R5bGVTaGVldChzdHlsZVNoZWV0VGV4dC50b1N0cmluZygp
KTsKQEAgLTEwMDcsNyArMTAxNSw3IEBAIENTU1N0eWxlUnVsZSogSW5zcGVjdG9yU3R5bGVTaGVl
dDo6cnVsZUZvcklkKGNvbnN0IEluc3BlY3RvckNTU0lkJiBpZCkgY29uc3QKICAgICByZXR1cm4g
aWQub3JkaW5hbCgpID49IG1fZmxhdFJ1bGVzLnNpemUoKSA/IG51bGxwdHIgOiBtX2ZsYXRSdWxl
cy5hdChpZC5vcmRpbmFsKCkpLmdldCgpOwogfQogCi1SZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6Q1NTOjpDU1NTdHlsZVNoZWV0Qm9keT4gSW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGRPYmpl
Y3RGb3JTdHlsZVNoZWV0KCkKK1JlZlB0cjxQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZVNoZWV0Qm9k
eT4gSW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGRPYmplY3RGb3JTdHlsZVNoZWV0KCkKIHsKICAg
ICBDU1NTdHlsZVNoZWV0KiBzdHlsZVNoZWV0ID0gcGFnZVN0eWxlU2hlZXQoKTsKICAgICBpZiAo
IXN0eWxlU2hlZXQpCkBAIC0xMDE1LDcgKzEwMjMsNyBAQCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6Q1NTOjpDU1NTdHlsZVNoZWV0Qm9keT4gSW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGRP
YgogCiAgICAgUmVmUHRyPENTU1J1bGVMaXN0PiBjc3NSdWxlTGlzdCA9IGFzQ1NTUnVsZUxpc3Qo
c3R5bGVTaGVldCk7CiAKLSAgICBhdXRvIHJlc3VsdCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNT
Uzo6Q1NTU3R5bGVTaGVldEJvZHk6OmNyZWF0ZSgpCisgICAgYXV0byByZXN1bHQgPSBQcm90b2Nv
bDo6Q1NTOjpDU1NTdHlsZVNoZWV0Qm9keTo6Y3JlYXRlKCkKICAgICAgICAgLnNldFN0eWxlU2hl
ZXRJZChpZCgpKQogICAgICAgICAuc2V0UnVsZXMoYnVpbGRBcnJheUZvclJ1bGVMaXN0KGNzc1J1
bGVMaXN0LmdldCgpKSkKICAgICAgICAgLnJlbGVhc2UoKTsKQEAgLTEwMjcsNyArMTAzNSw3IEBA
IFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlU2hlZXRCb2R5PiBJbnNw
ZWN0b3JTdHlsZVNoZWV0OjpidWlsZE9iCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGVTaGVldEhlYWRlcj4gSW5zcGVjdG9y
U3R5bGVTaGVldDo6YnVpbGRPYmplY3RGb3JTdHlsZVNoZWV0SW5mbygpCitSZWZQdHI8UHJvdG9j
b2w6OkNTUzo6Q1NTU3R5bGVTaGVldEhlYWRlcj4gSW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGRP
YmplY3RGb3JTdHlsZVNoZWV0SW5mbygpCiB7CiAgICAgQ1NTU3R5bGVTaGVldCogc3R5bGVTaGVl
dCA9IHBhZ2VTdHlsZVNoZWV0KCk7CiAgICAgaWYgKCFzdHlsZVNoZWV0KQpAQCAtMTAzNSw3ICsx
MDQzLDcgQEAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGVTaGVldEhl
YWRlcj4gSW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGQKIAogICAgIERvY3VtZW50KiBkb2N1bWVu
dCA9IHN0eWxlU2hlZXQtPm93bmVyRG9jdW1lbnQoKTsKICAgICBGcmFtZSogZnJhbWUgPSBkb2N1
bWVudCA/IGRvY3VtZW50LT5mcmFtZSgpIDogbnVsbHB0cjsKLSAgICByZXR1cm4gSW5zcGVjdG9y
OjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZVNoZWV0SGVhZGVyOjpjcmVhdGUoKQorICAgIHJldHVy
biBQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZVNoZWV0SGVhZGVyOjpjcmVhdGUoKQogICAgICAgICAu
c2V0U3R5bGVTaGVldElkKGlkKCkpCiAgICAgICAgIC5zZXRPcmlnaW4obV9vcmlnaW4pCiAgICAg
ICAgIC5zZXREaXNhYmxlZChzdHlsZVNoZWV0LT5kaXNhYmxlZCgpKQpAQCAtMTA0OCw5ICsxMDU2
LDkgQEAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGVTaGVldEhlYWRl
cj4gSW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGQKICAgICAgICAgLnJlbGVhc2UoKTsKIH0KIAot
c3RhdGljIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1NlbGVjdG9yPiBidWlsZE9i
amVjdEZvclNlbGVjdG9ySGVscGVyKGNvbnN0IFN0cmluZyYgc2VsZWN0b3JUZXh0LCBjb25zdCBD
U1NTZWxlY3RvciYgc2VsZWN0b3IpCitzdGF0aWMgUmVmPFByb3RvY29sOjpDU1M6OkNTU1NlbGVj
dG9yPiBidWlsZE9iamVjdEZvclNlbGVjdG9ySGVscGVyKGNvbnN0IFN0cmluZyYgc2VsZWN0b3JU
ZXh0LCBjb25zdCBDU1NTZWxlY3RvciYgc2VsZWN0b3IpCiB7Ci0gICAgYXV0byBpbnNwZWN0b3JT
ZWxlY3RvciA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU2VsZWN0b3I6OmNyZWF0ZSgp
CisgICAgYXV0byBpbnNwZWN0b3JTZWxlY3RvciA9IFByb3RvY29sOjpDU1M6OkNTU1NlbGVjdG9y
OjpjcmVhdGUoKQogICAgICAgICAuc2V0VGV4dChzZWxlY3RvclRleHQpCiAgICAgICAgIC5yZWxl
YXNlKCk7CiAKQEAgLTEwNjUsMTEgKzEwNzMsMTEgQEAgc3RhdGljIFJlZjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpDU1M6OkNTU1NlbGVjdG9yPiBidWlsZE9iamVjdEZvclNlbGVjdG9ySGVscGVyKGMK
ICAgICByZXR1cm4gaW5zcGVjdG9yU2VsZWN0b3I7CiB9CiAKLXN0YXRpYyBSZWY8SlNPTjo6QXJy
YXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1NlbGVjdG9yPj4gc2VsZWN0b3JzRnJv
bVNvdXJjZShjb25zdCBDU1NSdWxlU291cmNlRGF0YSogc291cmNlRGF0YSwgY29uc3QgU3RyaW5n
JiBzaGVldFRleHQsIGNvbnN0IENTU1NlbGVjdG9yTGlzdCYgc2VsZWN0b3JMaXN0KQorc3RhdGlj
IFJlZjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpDU1M6OkNTU1NlbGVjdG9yPj4gc2VsZWN0b3Jz
RnJvbVNvdXJjZShjb25zdCBDU1NSdWxlU291cmNlRGF0YSogc291cmNlRGF0YSwgY29uc3QgU3Ry
aW5nJiBzaGVldFRleHQsIGNvbnN0IENTU1NlbGVjdG9yTGlzdCYgc2VsZWN0b3JMaXN0KQogewog
ICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxKU0M6OllhcnI6OlJlZ3VsYXJFeHByZXNzaW9uPiBj
b21tZW50KCIvXFwqW15dKj9cXCovIiwgSlNDOjpZYXJyOjpUZXh0Q2FzZVNlbnNpdGl2ZSwgSlND
OjpZYXJyOjpNdWx0aWxpbmVFbmFibGVkKTsKIAotICAgIGF1dG8gcmVzdWx0ID0gSlNPTjo6QXJy
YXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1NlbGVjdG9yPjo6Y3JlYXRlKCk7Cisg
ICAgYXV0byByZXN1bHQgPSBKU09OOjpBcnJheU9mPFByb3RvY29sOjpDU1M6OkNTU1NlbGVjdG9y
Pjo6Y3JlYXRlKCk7CiAgICAgY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yID0gc2VsZWN0b3JM
aXN0LmZpcnN0KCk7CiAgICAgZm9yIChhdXRvJiByYW5nZSA6IHNvdXJjZURhdGEtPnNlbGVjdG9y
UmFuZ2VzKSB7CiAgICAgICAgIC8vIElmIHdlIGRvbid0IGhhdmUgYSBzZWxlY3RvciwgdGhhdCBt
ZWFucyB0aGUgU291cmNlRGF0YSBmb3IgdGhpcyBDU1NTdHlsZVNoZWV0CkBAIC0xMDg5LDE3ICsx
MDk3LDE3IEBAIHN0YXRpYyBSZWY8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpD
U1M6OkNTU1NlbGVjdG9yPj4gc2VsZWN0b3JzRnJvbVNvCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAotUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU2VsZWN0b3I+IEluc3BlY3RvclN0
eWxlU2hlZXQ6OmJ1aWxkT2JqZWN0Rm9yU2VsZWN0b3IoY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVj
dG9yKQorUmVmPFByb3RvY29sOjpDU1M6OkNTU1NlbGVjdG9yPiBJbnNwZWN0b3JTdHlsZVNoZWV0
OjpidWlsZE9iamVjdEZvclNlbGVjdG9yKGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvcikKIHsK
ICAgICByZXR1cm4gYnVpbGRPYmplY3RGb3JTZWxlY3RvckhlbHBlcihzZWxlY3Rvci0+c2VsZWN0
b3JUZXh0KCksICpzZWxlY3Rvcik7CiB9CiAKLVJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6
OlNlbGVjdG9yTGlzdD4gSW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGRPYmplY3RGb3JTZWxlY3Rv
ckxpc3QoQ1NTU3R5bGVSdWxlKiBydWxlLCBpbnQmIGVuZGluZ0xpbmUpCitSZWY8UHJvdG9jb2w6
OkNTUzo6U2VsZWN0b3JMaXN0PiBJbnNwZWN0b3JTdHlsZVNoZWV0OjpidWlsZE9iamVjdEZvclNl
bGVjdG9yTGlzdChDU1NTdHlsZVJ1bGUqIHJ1bGUsIGludCYgZW5kaW5nTGluZSkKIHsKICAgICBS
ZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+IHNvdXJjZURhdGE7CiAgICAgaWYgKGVuc3VyZVBhcnNl
ZERhdGFSZWFkeSgpKQogICAgICAgICBzb3VyY2VEYXRhID0gcnVsZVNvdXJjZURhdGFGb3IoJnJ1
bGUtPnN0eWxlKCkpOwotICAgIFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkNTUzo6Q1NTU2VsZWN0b3I+PiBzZWxlY3RvcnM7CisgICAgUmVmUHRyPEpTT046OkFycmF5
T2Y8UHJvdG9jb2w6OkNTUzo6Q1NTU2VsZWN0b3I+PiBzZWxlY3RvcnM7CiAKICAgICAvLyBUaGlz
IGludGVudGlvbmFsbHkgZG9lcyBub3QgcmVseSBvbiB0aGUgc291cmNlIGRhdGEgdG8gYXZvaWQg
Y2F0Y2hpbmcgdGhlIHRyYWlsaW5nIGNvbW1lbnRzIChiZWZvcmUgdGhlIGRlY2xhcmF0aW9uIHN0
YXJ0aW5nICd7JykuCiAgICAgU3RyaW5nIHNlbGVjdG9yVGV4dCA9IHJ1bGUtPnNlbGVjdG9yVGV4
dCgpOwpAQCAtMTEwNyw0MSArMTExNSw0MiBAQCBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NT
OjpTZWxlY3Rvckxpc3Q+IEluc3BlY3RvclN0eWxlU2hlZXQ6OmJ1aWxkT2JqZWN0Rm9yUwogICAg
IGlmIChzb3VyY2VEYXRhKQogICAgICAgICBzZWxlY3RvcnMgPSBzZWxlY3RvcnNGcm9tU291cmNl
KHNvdXJjZURhdGEuZ2V0KCksIG1fcGFyc2VkU3R5bGVTaGVldC0+dGV4dCgpLCBydWxlLT5zdHls
ZVJ1bGUoKS5zZWxlY3Rvckxpc3QoKSk7CiAgICAgZWxzZSB7Ci0gICAgICAgIHNlbGVjdG9ycyA9
IEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTZWxlY3Rvcj46OmNy
ZWF0ZSgpOworICAgICAgICBzZWxlY3RvcnMgPSBKU09OOjpBcnJheU9mPFByb3RvY29sOjpDU1M6
OkNTU1NlbGVjdG9yPjo6Y3JlYXRlKCk7CiAgICAgICAgIGNvbnN0IENTU1NlbGVjdG9yTGlzdCYg
c2VsZWN0b3JMaXN0ID0gcnVsZS0+c3R5bGVSdWxlKCkuc2VsZWN0b3JMaXN0KCk7CiAgICAgICAg
IGZvciAoY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yID0gc2VsZWN0b3JMaXN0LmZpcnN0KCk7
IHNlbGVjdG9yOyBzZWxlY3RvciA9IENTU1NlbGVjdG9yTGlzdDo6bmV4dChzZWxlY3RvcikpCiAg
ICAgICAgICAgICBzZWxlY3RvcnMtPmFkZEl0ZW0oYnVpbGRPYmplY3RGb3JTZWxlY3RvcihzZWxl
Y3RvcikpOwogICAgIH0KLSAgICBhdXRvIHJlc3VsdCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNT
Uzo6U2VsZWN0b3JMaXN0OjpjcmVhdGUoKQotICAgICAgICAuc2V0U2VsZWN0b3JzKFdURk1vdmUo
c2VsZWN0b3JzKSkKKyAgICBhdXRvIHJlc3VsdCA9IFByb3RvY29sOjpDU1M6OlNlbGVjdG9yTGlz
dDo6Y3JlYXRlKCkKKyAgICAgICAgLnNldFNlbGVjdG9ycyhzZWxlY3RvcnMucmVsZWFzZU5vbk51
bGwoKSkKICAgICAgICAgLnNldFRleHQoc2VsZWN0b3JUZXh0KQogICAgICAgICAucmVsZWFzZSgp
OwotICAgIGlmIChzb3VyY2VEYXRhKQotICAgICAgICByZXN1bHQtPnNldFJhbmdlKGJ1aWxkU291
cmNlUmFuZ2VPYmplY3Qoc291cmNlRGF0YS0+cnVsZUhlYWRlclJhbmdlLCBsaW5lRW5kaW5ncygp
LCAmZW5kaW5nTGluZSkpOworICAgIGlmIChzb3VyY2VEYXRhKSB7CisgICAgICAgIGlmIChhdXRv
IHJhbmdlID0gYnVpbGRTb3VyY2VSYW5nZU9iamVjdChzb3VyY2VEYXRhLT5ydWxlSGVhZGVyUmFu
Z2UsIGxpbmVFbmRpbmdzKCksICZlbmRpbmdMaW5lKSkKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0
UmFuZ2UocmFuZ2UucmVsZWFzZU5vbk51bGwoKSk7CisgICAgfQogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKLVJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1J1bGU+IEluc3BlY3Rv
clN0eWxlU2hlZXQ6OmJ1aWxkT2JqZWN0Rm9yUnVsZShDU1NTdHlsZVJ1bGUqIHJ1bGUpCitSZWZQ
dHI8UHJvdG9jb2w6OkNTUzo6Q1NTUnVsZT4gSW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGRPYmpl
Y3RGb3JSdWxlKENTU1N0eWxlUnVsZSogcnVsZSkKIHsKICAgICBDU1NTdHlsZVNoZWV0KiBzdHls
ZVNoZWV0ID0gcGFnZVN0eWxlU2hlZXQoKTsKICAgICBpZiAoIXN0eWxlU2hlZXQpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwogCiAgICAgaW50IGVuZGluZ0xpbmUgPSAwOwotICAgIGF1dG8gcmVz
dWx0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NSdWxlOjpjcmVhdGUoKQorICAgIGF1
dG8gcmVzdWx0ID0gUHJvdG9jb2w6OkNTUzo6Q1NTUnVsZTo6Y3JlYXRlKCkKICAgICAgICAgLnNl
dFNlbGVjdG9yTGlzdChidWlsZE9iamVjdEZvclNlbGVjdG9yTGlzdChydWxlLCBlbmRpbmdMaW5l
KSkKICAgICAgICAgLnNldFNvdXJjZUxpbmUoZW5kaW5nTGluZSkKICAgICAgICAgLnNldE9yaWdp
bihtX29yaWdpbikKICAgICAgICAgLnNldFN0eWxlKGJ1aWxkT2JqZWN0Rm9yU3R5bGUoJnJ1bGUt
PnN0eWxlKCkpKQogICAgICAgICAucmVsZWFzZSgpOwogCi0gICAgaWYgKG1fb3JpZ2luID09IElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6QXV0aG9yIHx8IG1fb3Jp
Z2luID09IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6VXNlcikK
KyAgICBpZiAobV9vcmlnaW4gPT0gUHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6QXV0
aG9yIHx8IG1fb3JpZ2luID09IFByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW46OlVzZXIp
CiAgICAgICAgIHJlc3VsdC0+c2V0U291cmNlVVJMKGZpbmFsVVJMKCkpOwogCiAgICAgaWYgKGNh
bkJpbmQoKSkgewotICAgICAgICBJbnNwZWN0b3JDU1NJZCBpZChydWxlSWQocnVsZSkpOwotICAg
ICAgICBpZiAoIWlkLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0UnVsZUlkKGlk
LmFzUHJvdG9jb2xWYWx1ZTxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1J1bGVJZD4oKSk7
CisgICAgICAgIGlmIChhdXRvIHJ1bGVJZCA9IHRoaXMtPnJ1bGVJZChydWxlKS5hc1Byb3RvY29s
VmFsdWU8UHJvdG9jb2w6OkNTUzo6Q1NTUnVsZUlkPigpKQorICAgICAgICAgICAgcmVzdWx0LT5z
ZXRSdWxlSWQocnVsZUlkLnJlbGVhc2VOb25OdWxsKCkpOwogICAgIH0KIAogICAgIGF1dG8gZ3Jv
dXBpbmdzUGF5bG9hZCA9IGJ1aWxkQXJyYXlGb3JHcm91cGluZ3MoKnJ1bGUpOwpAQCAtMTE1MSw3
ICsxMTYwLDcgQEAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUnVsZT4gSW5z
cGVjdG9yU3R5bGVTaGVldDo6YnVpbGRPYmplY3RGb3JSdWwKICAgICByZXR1cm4gcmVzdWx0Owog
fQogCi1SZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4gSW5zcGVjdG9y
U3R5bGVTaGVldDo6YnVpbGRPYmplY3RGb3JTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHls
ZSkKK1JlZjxQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4gSW5zcGVjdG9yU3R5bGVTaGVldDo6YnVp
bGRPYmplY3RGb3JTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSkKIHsKICAgICBSZWZQ
dHI8Q1NTUnVsZVNvdXJjZURhdGE+IHNvdXJjZURhdGE7CiAgICAgaWYgKGVuc3VyZVBhcnNlZERh
dGFSZWFkeSgpKQpAQCAtMTE1OSwxMyArMTE2OCwxNSBAQCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6Q1NTOjpDU1NTdHlsZT4gSW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGRPYmplY3RGb3JT
dAogCiAgICAgSW5zcGVjdG9yQ1NTSWQgaWQgPSBydWxlT3JTdHlsZUlkKHN0eWxlKTsKICAgICBp
ZiAoaWQuaXNFbXB0eSgpKSB7Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpD
U1M6OkNTU1N0eWxlOjpjcmVhdGUoKQotICAgICAgICAgICAgLnNldENzc1Byb3BlcnRpZXMoQXJy
YXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1Byb3BlcnR5Pjo6Y3JlYXRlKCkpCi0g
ICAgICAgICAgICAuc2V0U2hvcnRoYW5kRW50cmllcyhBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkNTUzo6U2hvcnRoYW5kRW50cnk+OjpjcmVhdGUoKSkKKyAgICAgICAgcmV0dXJuIFByb3Rv
Y29sOjpDU1M6OkNTU1N0eWxlOjpjcmVhdGUoKQorICAgICAgICAgICAgLnNldENzc1Byb3BlcnRp
ZXMoQXJyYXlPZjxQcm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0eT46OmNyZWF0ZSgpKQorICAgICAg
ICAgICAgLnNldFNob3J0aGFuZEVudHJpZXMoQXJyYXlPZjxQcm90b2NvbDo6Q1NTOjpTaG9ydGhh
bmRFbnRyeT46OmNyZWF0ZSgpKQogICAgICAgICAgICAgLnJlbGVhc2UoKTsKICAgICB9CisKICAg
ICBSZWZQdHI8SW5zcGVjdG9yU3R5bGU+IGluc3BlY3RvclN0eWxlID0gaW5zcGVjdG9yU3R5bGVG
b3JJZChpZCk7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+
IHJlc3VsdCA9IGluc3BlY3RvclN0eWxlLT5idWlsZE9iamVjdEZvclN0eWxlKCk7CisKKyAgICBh
dXRvIHJlc3VsdCA9IGluc3BlY3RvclN0eWxlLT5idWlsZE9iamVjdEZvclN0eWxlKCk7CiAKICAg
ICAvLyBTdHlsZSB0ZXh0IGNhbm5vdCBiZSByZXRyaWV2ZWQgd2l0aG91dCBzdHlsZXNoZWV0LCBz
byBzZXQgY3NzVGV4dCBoZXJlLgogICAgIGlmIChzb3VyY2VEYXRhKSB7CkBAIC0xMjc0LDcgKzEy
ODUsNyBAQCBib29sIEluc3BlY3RvclN0eWxlU2hlZXQ6OnN0eWxlU2hlZXRNdXRhdGVkKCkgY29u
c3QKIAogYm9vbCBJbnNwZWN0b3JTdHlsZVNoZWV0OjplbnN1cmVQYXJzZWREYXRhUmVhZHkoKQog
ewotICAgIGJvb2wgYWxsb3dQYXJzZWREYXRhID0gbV9vcmlnaW4gPT0gSW5zcGVjdG9yOjpQcm90
b2NvbDo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luOjpJbnNwZWN0b3IgfHwgIXN0eWxlU2hlZXRNdXRh
dGVkKCk7CisgICAgYm9vbCBhbGxvd1BhcnNlZERhdGEgPSBtX29yaWdpbiA9PSBQcm90b2NvbDo6
Q1NTOjpTdHlsZVNoZWV0T3JpZ2luOjpJbnNwZWN0b3IgfHwgIXN0eWxlU2hlZXRNdXRhdGVkKCk7
CiAgICAgcmV0dXJuIGFsbG93UGFyc2VkRGF0YSAmJiBlbnN1cmVUZXh0KCkgJiYgZW5zdXJlU291
cmNlRGF0YSgpOwogfQogCkBAIC0xMzcxLDcgKzEzODIsNyBAQCBJbnNwZWN0b3JDU1NJZCBJbnNw
ZWN0b3JTdHlsZVNoZWV0OjpydWxlSWQoQ1NTU3R5bGVSdWxlKiBydWxlKSBjb25zdAogCiBib29s
IEluc3BlY3RvclN0eWxlU2hlZXQ6Om9yaWdpbmFsU3R5bGVTaGVldFRleHQoU3RyaW5nKiByZXN1
bHQpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX3BhZ2VTdHlsZVNoZWV0IHx8IG1fb3JpZ2luID09IElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6VXNlckFnZW50KQorICAg
IGlmICghbV9wYWdlU3R5bGVTaGVldCB8fCBtX29yaWdpbiA9PSBQcm90b2NvbDo6Q1NTOjpTdHls
ZVNoZWV0T3JpZ2luOjpVc2VyQWdlbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1
cm4gaW5saW5lU3R5bGVTaGVldFRleHQocmVzdWx0KSB8fCByZXNvdXJjZVN0eWxlU2hlZXRUZXh0
KHJlc3VsdCkgfHwgZXh0ZW5zaW9uU3R5bGVTaGVldFRleHQocmVzdWx0KTsKIH0KQEAgLTE0MTQs
OSArMTQyNSw5IEBAIGJvb2wgSW5zcGVjdG9yU3R5bGVTaGVldDo6ZXh0ZW5zaW9uU3R5bGVTaGVl
dFRleHQoU3RyaW5nKiByZXN1bHQpIGNvbnN0CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLVJlZjxK
U09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUnVsZT4+IEluc3BlY3Rv
clN0eWxlU2hlZXQ6OmJ1aWxkQXJyYXlGb3JSdWxlTGlzdChDU1NSdWxlTGlzdCogcnVsZUxpc3Qp
CitSZWY8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6Q1NTOjpDU1NSdWxlPj4gSW5zcGVjdG9yU3R5
bGVTaGVldDo6YnVpbGRBcnJheUZvclJ1bGVMaXN0KENTU1J1bGVMaXN0KiBydWxlTGlzdCkKIHsK
LSAgICBhdXRvIHJlc3VsdCA9IEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NT
OjpDU1NSdWxlPjo6Y3JlYXRlKCk7CisgICAgYXV0byByZXN1bHQgPSBKU09OOjpBcnJheU9mPFBy
b3RvY29sOjpDU1M6OkNTU1J1bGU+OjpjcmVhdGUoKTsKICAgICBpZiAoIXJ1bGVMaXN0KQogICAg
ICAgICByZXR1cm4gcmVzdWx0OwogCkBAIC0xNDI0LDggKzE0MzUsMTAgQEAgUmVmPEpTT046OkFy
cmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NSdWxlPj4gSW5zcGVjdG9yU3R5bGVT
aGVldDo6YnVpbGQKICAgICBDU1NTdHlsZVJ1bGVWZWN0b3IgcnVsZXM7CiAgICAgY29sbGVjdEZs
YXRSdWxlcyhXVEZNb3ZlKHJlZlJ1bGVMaXN0KSwgJnJ1bGVzKTsKIAotICAgIGZvciAoYXV0byYg
cnVsZSA6IHJ1bGVzKQotICAgICAgICByZXN1bHQtPmFkZEl0ZW0oYnVpbGRPYmplY3RGb3JSdWxl
KHJ1bGUuZ2V0KCkpKTsKKyAgICBmb3IgKGF1dG8mIHJ1bGUgOiBydWxlcykgeworICAgICAgICBp
ZiAoYXV0byBydWxlT2JqZWN0ID0gYnVpbGRPYmplY3RGb3JSdWxlKHJ1bGUuZ2V0KCkpKQorICAg
ICAgICAgICAgcmVzdWx0LT5hZGRJdGVtKHJ1bGVPYmplY3QucmVsZWFzZU5vbk51bGwoKSk7Cisg
ICAgfQogCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTE0NDgsMTIgKzE0NjEsMTIgQEAgdm9p
ZCBJbnNwZWN0b3JTdHlsZVNoZWV0Ojpjb2xsZWN0RmxhdFJ1bGVzKFJlZlB0cjxDU1NSdWxlTGlz
dD4mJiBydWxlTGlzdCwgQ1NTU3QKICAgICB9CiB9CiAKLVJlZjxJbnNwZWN0b3JTdHlsZVNoZWV0
Rm9ySW5saW5lU3R5bGU+IEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZTo6Y3JlYXRl
KEluc3BlY3RvclBhZ2VBZ2VudCogcGFnZUFnZW50LCBjb25zdCBTdHJpbmcmIGlkLCBSZWY8U3R5
bGVkRWxlbWVudD4mJiBlbGVtZW50LCBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlN0eWxlU2hl
ZXRPcmlnaW4gb3JpZ2luLCBMaXN0ZW5lciogbGlzdGVuZXIpCitSZWY8SW5zcGVjdG9yU3R5bGVT
aGVldEZvcklubGluZVN0eWxlPiBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU6OmNy
ZWF0ZShJbnNwZWN0b3JQYWdlQWdlbnQqIHBhZ2VBZ2VudCwgY29uc3QgU3RyaW5nJiBpZCwgUmVm
PFN0eWxlZEVsZW1lbnQ+JiYgZWxlbWVudCwgUHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdp
biBvcmlnaW4sIExpc3RlbmVyKiBsaXN0ZW5lcikKIHsKICAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGUocGFnZUFnZW50LCBpZCwgV1RGTW92
ZShlbGVtZW50KSwgb3JpZ2luLCBsaXN0ZW5lcikpOwogfQogCi1JbnNwZWN0b3JTdHlsZVNoZWV0
Rm9ySW5saW5lU3R5bGU6Okluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZShJbnNwZWN0
b3JQYWdlQWdlbnQqIHBhZ2VBZ2VudCwgY29uc3QgU3RyaW5nJiBpZCwgUmVmPFN0eWxlZEVsZW1l
bnQ+JiYgZWxlbWVudCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2lu
IG9yaWdpbiwgTGlzdGVuZXIqIGxpc3RlbmVyKQorSW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGlu
ZVN0eWxlOjpJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGUoSW5zcGVjdG9yUGFnZUFn
ZW50KiBwYWdlQWdlbnQsIGNvbnN0IFN0cmluZyYgaWQsIFJlZjxTdHlsZWRFbGVtZW50PiYmIGVs
ZW1lbnQsIFByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW4gb3JpZ2luLCBMaXN0ZW5lciog
bGlzdGVuZXIpCiAgICAgOiBJbnNwZWN0b3JTdHlsZVNoZWV0KHBhZ2VBZ2VudCwgaWQsIG51bGxw
dHIsIG9yaWdpbiwgU3RyaW5nKCksIGxpc3RlbmVyKQogICAgICwgbV9lbGVtZW50KFdURk1vdmUo
ZWxlbWVudCkpCiAgICAgLCBtX3J1bGVTb3VyY2VEYXRhKG51bGxwdHIpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5oIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuaAppbmRleCA3M2QzNjE4ZTVhNDhh
Mzc0NTc2MjZkZDU0OGRjZTdlMzZiMWRlMTM1Li43OGYxNGQyOTE2YmFhNWMzN2UwMTA5MzkyZjIx
ZWY2NmE2NTVmNzZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yU3R5bGVTaGVldC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JT
dHlsZVNoZWV0LmgKQEAgLTQ1LDE4ICs0NSwxOSBAQCBjbGFzcyBFbGVtZW50OwogY2xhc3MgSW5z
cGVjdG9yUGFnZUFnZW50OwogY2xhc3MgSW5zcGVjdG9yU3R5bGVTaGVldDsKIAotdHlwZWRlZiBT
dHJpbmcgRXJyb3JTdHJpbmc7Ci0KIGNsYXNzIEluc3BlY3RvckNTU0lkIHsKIHB1YmxpYzoKICAg
ICBJbnNwZWN0b3JDU1NJZCgpID0gZGVmYXVsdDsKIAogICAgIGV4cGxpY2l0IEluc3BlY3RvckNT
U0lkKGNvbnN0IEpTT046Ok9iamVjdCYgdmFsdWUpCiAgICAgewotICAgICAgICBpZiAoIXZhbHVl
LmdldFN0cmluZygic3R5bGVTaGVldElkIl9zLCBtX3N0eWxlU2hlZXRJZCkpCisgICAgICAgIG1f
c3R5bGVTaGVldElkID0gdmFsdWUuZ2V0U3RyaW5nKCJzdHlsZVNoZWV0SWQiX3MpOworICAgICAg
ICBpZiAoIW1fc3R5bGVTaGVldElkKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIGlm
ICghdmFsdWUuZ2V0SW50ZWdlcigib3JkaW5hbCJfcywgbV9vcmRpbmFsKSkKKyAgICAgICAgaWYg
KGF1dG8gb3JkaW5hbCA9IHZhbHVlLmdldEludGVnZXIoIm9yZGluYWwiX3MpKQorICAgICAgICAg
ICAgbV9vcmRpbmFsID0gKm9yZGluYWw7CisgICAgICAgIGVsc2UKICAgICAgICAgICAgIG1fc3R5
bGVTaGVldElkID0gU3RyaW5nKCk7CiAgICAgfQogCkBAIC0xMjYsNyArMTI3LDcgQEAgcHVibGlj
OgogICAgIH5JbnNwZWN0b3JTdHlsZSgpOwogCiAgICAgQ1NTU3R5bGVEZWNsYXJhdGlvbiYgY3Nz
U3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0eWxlLmdldCgpOyB9Ci0gICAgUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+IGJ1aWxkT2JqZWN0Rm9yU3R5bGUoKSBjb25z
dDsKKyAgICBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4gYnVpbGRPYmpl
Y3RGb3JTdHlsZSgpIGNvbnN0OwogICAgIFJlZjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkNTUzo6Q1NTQ29tcHV0ZWRTdHlsZVByb3BlcnR5Pj4gYnVpbGRBcnJheUZvckNvbXB1
dGVkU3R5bGUoKSBjb25zdDsKIAogICAgIEV4Y2VwdGlvbk9yPFN0cmluZz4gdGV4dCgpIGNvbnN0
OwpAQCAtMTc1LDcgKzE3Niw3IEBAIHB1YmxpYzoKICAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6Q1NTOjpDU1NTdHlsZVNoZWV0Qm9keT4gYnVpbGRPYmplY3RGb3JTdHlsZVNoZWV0KCk7
CiAgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGVTaGVldEhlYWRl
cj4gYnVpbGRPYmplY3RGb3JTdHlsZVNoZWV0SW5mbygpOwogICAgIFJlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpDU1M6OkNTU1J1bGU+IGJ1aWxkT2JqZWN0Rm9yUnVsZShDU1NTdHlsZVJ1bGUq
KTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4gYnVpbGRP
YmplY3RGb3JTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKik7CisgICAgUmVmPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+IGJ1aWxkT2JqZWN0Rm9yU3R5bGUoQ1NTU3R5bGVEZWNs
YXJhdGlvbiopOwogICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IHNldFN0eWxlVGV4dChjb25zdCBJbnNw
ZWN0b3JDU1NJZCYsIGNvbnN0IFN0cmluZyYgdGV4dCwgU3RyaW5nKiBvbGRUZXh0KTsKIAogICAg
IHZpcnR1YWwgRXhjZXB0aW9uT3I8U3RyaW5nPiB0ZXh0KCkgY29uc3Q7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvVGltZWxpbmVSZWNvcmRGYWN0b3J5LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9UaW1lbGluZVJlY29yZEZhY3RvcnkuY3BwCmluZGV4IDM2M2Qx
NjhlODA1ZWEzZjg3ZDdiYzlkODI5ZDQ2ZGU2Y2JmNTJhYWUuLmEwNzAzMzZiNzU2MWRhODVlY2I1
ZmZmNGMxNGI2MWJmZjM5NjIxMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9UaW1lbGluZVJlY29yZEZhY3RvcnkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9UaW1lbGluZVJlY29yZEZhY3RvcnkuY3BwCkBAIC0xNjEsOSArMTYxLDkgQEAgUmVmPEpTT046
Ok9iamVjdD4gVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVQYWludERhdGEoY29uc3QgRmxv
YXRRdWFkJiBxdWFkKQogICAgIHJldHVybiBkYXRhOwogfQogCi12b2lkIFRpbWVsaW5lUmVjb3Jk
RmFjdG9yeTo6YXBwZW5kTGF5b3V0Um9vdChKU09OOjpPYmplY3QqIGRhdGEsIGNvbnN0IEZsb2F0
UXVhZCYgcXVhZCkKK3ZvaWQgVGltZWxpbmVSZWNvcmRGYWN0b3J5OjphcHBlbmRMYXlvdXRSb290
KEpTT046Ok9iamVjdCYgZGF0YSwgY29uc3QgRmxvYXRRdWFkJiBxdWFkKQogewotICAgIGRhdGEt
PnNldEFycmF5KCJyb290Il9zLCBjcmVhdGVRdWFkKHF1YWQpKTsKKyAgICBkYXRhLnNldEFycmF5
KCJyb290Il9zLCBjcmVhdGVRdWFkKHF1YWQpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1RpbWVsaW5lUmVjb3JkRmFj
dG9yeS5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1RpbWVsaW5lUmVjb3JkRmFjdG9yeS5o
CmluZGV4IDQ4ZjQzMGU5YmVkOTNkMWFmZDJiYTM2ZTU5NTdlN2VmMDYxOGIzYWEuLmNhNWRiNDEw
ODk4ZGI5M2NkMGEzNWMyNjI3OTA5YzFkNDllMWMyNjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9UaW1lbGluZVJlY29yZEZhY3RvcnkuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvVGltZWxpbmVSZWNvcmRGYWN0b3J5LmgKQEAgLTU5LDcgKzU5LDcgQEAgcHVi
bGljOgogICAgIHN0YXRpYyBSZWY8SlNPTjo6T2JqZWN0PiBjcmVhdGVPYnNlcnZlckNhbGxiYWNr
RGF0YShjb25zdCBTdHJpbmcmIGNhbGxiYWNrVHlwZSk7CiAgICAgc3RhdGljIFJlZjxKU09OOjpP
YmplY3Q+IGNyZWF0ZVBhaW50RGF0YShjb25zdCBGbG9hdFF1YWQmKTsKIAotICAgIHN0YXRpYyB2
b2lkIGFwcGVuZExheW91dFJvb3QoSlNPTjo6T2JqZWN0KiBkYXRhLCBjb25zdCBGbG9hdFF1YWQm
KTsKKyAgICBzdGF0aWMgdm9pZCBhcHBlbmRMYXlvdXRSb290KEpTT046Ok9iamVjdCYgZGF0YSwg
Y29uc3QgRmxvYXRRdWFkJik7CiAKIHByaXZhdGU6CiAgICAgVGltZWxpbmVSZWNvcmRGYWN0b3J5
KCkgeyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3Bl
Y3RvckFuaW1hdGlvbkFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9yQW5pbWF0aW9uQWdlbnQuY3BwCmluZGV4IDcxMzI1ZjUyMmQzYTEyM2E1MzRmYzdm
ZjNhNTg0YjU4YmM5NGY5MzYuLjAyNTcxMmIwOTQ2NGVjNmIxNTQ3ZWNmNzA2NmUyMGJkZmFiZjQx
Y2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9y
QW5pbWF0aW9uQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9yQW5pbWF0aW9uQWdlbnQuY3BwCkBAIC03Miw0NSArNzIsNDUgQEAgc3RhdGljIE9w
dGlvbmFsPGRvdWJsZT4gcHJvdG9jb2xWYWx1ZUZvclNlY29uZHMoY29uc3QgU2Vjb25kcyYgc2Vj
b25kcykKICAgICByZXR1cm4gc2Vjb25kcy5taWxsaXNlY29uZHMoKTsKIH0KIAotc3RhdGljIE9w
dGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFuaW1hdGlvbjo6UGxheWJhY2tEaXJlY3Rpb24+
IHByb3RvY29sVmFsdWVGb3JQbGF5YmFja0RpcmVjdGlvbihQbGF5YmFja0RpcmVjdGlvbiBwbGF5
YmFja0RpcmVjdGlvbikKK3N0YXRpYyBPcHRpb25hbDxQcm90b2NvbDo6QW5pbWF0aW9uOjpQbGF5
YmFja0RpcmVjdGlvbj4gcHJvdG9jb2xWYWx1ZUZvclBsYXliYWNrRGlyZWN0aW9uKFBsYXliYWNr
RGlyZWN0aW9uIHBsYXliYWNrRGlyZWN0aW9uKQogewogICAgIHN3aXRjaCAocGxheWJhY2tEaXJl
Y3Rpb24pIHsKICAgICBjYXNlIFBsYXliYWNrRGlyZWN0aW9uOjpOb3JtYWw6Ci0gICAgICAgIHJl
dHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpBbmltYXRpb246OlBsYXliYWNrRGlyZWN0aW9uOjpO
b3JtYWw7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6QW5pbWF0aW9uOjpQbGF5YmFja0RpcmVj
dGlvbjo6Tm9ybWFsOwogICAgIGNhc2UgUGxheWJhY2tEaXJlY3Rpb246OlJldmVyc2U6Ci0gICAg
ICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpBbmltYXRpb246OlBsYXliYWNrRGlyZWN0
aW9uOjpSZXZlcnNlOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OkFuaW1hdGlvbjo6UGxheWJh
Y2tEaXJlY3Rpb246OlJldmVyc2U7CiAgICAgY2FzZSBQbGF5YmFja0RpcmVjdGlvbjo6QWx0ZXJu
YXRlOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6QW5pbWF0aW9uOjpQbGF5
YmFja0RpcmVjdGlvbjo6QWx0ZXJuYXRlOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OkFuaW1h
dGlvbjo6UGxheWJhY2tEaXJlY3Rpb246OkFsdGVybmF0ZTsKICAgICBjYXNlIFBsYXliYWNrRGly
ZWN0aW9uOjpBbHRlcm5hdGVSZXZlcnNlOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90
b2NvbDo6QW5pbWF0aW9uOjpQbGF5YmFja0RpcmVjdGlvbjo6QWx0ZXJuYXRlUmV2ZXJzZTsKKyAg
ICAgICAgcmV0dXJuIFByb3RvY29sOjpBbmltYXRpb246OlBsYXliYWNrRGlyZWN0aW9uOjpBbHRl
cm5hdGVSZXZlcnNlOwogICAgIH0KIAogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CiB9CiAKLXN0YXRpYyBPcHRpb25hbDxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpBbmltYXRpb246OkZpbGxNb2RlPiBwcm90b2NvbFZhbHVlRm9yRmlsbE1vZGUoRmlsbE1v
ZGUgZmlsbE1vZGUpCitzdGF0aWMgT3B0aW9uYWw8UHJvdG9jb2w6OkFuaW1hdGlvbjo6RmlsbE1v
ZGU+IHByb3RvY29sVmFsdWVGb3JGaWxsTW9kZShGaWxsTW9kZSBmaWxsTW9kZSkKIHsKICAgICBz
d2l0Y2ggKGZpbGxNb2RlKSB7CiAgICAgY2FzZSBGaWxsTW9kZTo6Tm9uZToKLSAgICAgICAgcmV0
dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFuaW1hdGlvbjo6RmlsbE1vZGU6Ok5vbmU7CisgICAg
ICAgIHJldHVybiBQcm90b2NvbDo6QW5pbWF0aW9uOjpGaWxsTW9kZTo6Tm9uZTsKICAgICBjYXNl
IEZpbGxNb2RlOjpGb3J3YXJkczoKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkFuaW1hdGlvbjo6RmlsbE1vZGU6OkZvcndhcmRzOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6
OkFuaW1hdGlvbjo6RmlsbE1vZGU6OkZvcndhcmRzOwogICAgIGNhc2UgRmlsbE1vZGU6OkJhY2t3
YXJkczoKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFuaW1hdGlvbjo6Rmls
bE1vZGU6OkJhY2t3YXJkczsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpBbmltYXRpb246OkZp
bGxNb2RlOjpCYWNrd2FyZHM7CiAgICAgY2FzZSBGaWxsTW9kZTo6Qm90aDoKLSAgICAgICAgcmV0
dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFuaW1hdGlvbjo6RmlsbE1vZGU6OkJvdGg7CisgICAg
ICAgIHJldHVybiBQcm90b2NvbDo6QW5pbWF0aW9uOjpGaWxsTW9kZTo6Qm90aDsKICAgICBjYXNl
IEZpbGxNb2RlOjpBdXRvOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6QW5p
bWF0aW9uOjpGaWxsTW9kZTo6QXV0bzsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpBbmltYXRp
b246OkZpbGxNb2RlOjpBdXRvOwogICAgIH0KIAogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiB9CiAKLXN0YXRpYyBSZWY8SlNPTjo6QXJyYXlPZjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpBbmltYXRpb246OktleWZyYW1lPj4gYnVpbGRPYmplY3RGb3JL
ZXlmcmFtZXMoS2V5ZnJhbWVFZmZlY3QmIGtleWZyYW1lRWZmZWN0KQorc3RhdGljIFJlZjxKU09O
OjpBcnJheU9mPFByb3RvY29sOjpBbmltYXRpb246OktleWZyYW1lPj4gYnVpbGRPYmplY3RGb3JL
ZXlmcmFtZXMoS2V5ZnJhbWVFZmZlY3QmIGtleWZyYW1lRWZmZWN0KQogewotICAgIGF1dG8ga2V5
ZnJhbWVzUGF5bG9hZCA9IEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6QW5pbWF0
aW9uOjpLZXlmcmFtZT46OmNyZWF0ZSgpOworICAgIGF1dG8ga2V5ZnJhbWVzUGF5bG9hZCA9IEpT
T046OkFycmF5T2Y8UHJvdG9jb2w6OkFuaW1hdGlvbjo6S2V5ZnJhbWU+OjpjcmVhdGUoKTsKIAog
ICAgIGNvbnN0IGF1dG8mIGJsZW5kaW5nS2V5ZnJhbWVzID0ga2V5ZnJhbWVFZmZlY3QuYmxlbmRp
bmdLZXlmcmFtZXMoKTsKICAgICBjb25zdCBhdXRvJiBwYXJzZWRLZXlmcmFtZXMgPSBrZXlmcmFt
ZUVmZmVjdC5wYXJzZWRLZXlmcmFtZXMoKTsKQEAgLTEzMCw3ICsxMzAsNyBAQCBzdGF0aWMgUmVm
PEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6QW5pbWF0aW9uOjpLZXlmcmFtZT4+
IGJ1aWxkT2JqZWN0RgogICAgICAgICAgICAgQVNTRVJUKGJsZW5kaW5nS2V5ZnJhbWUuc3R5bGUo
KSk7CiAgICAgICAgICAgICBhdXRvJiBzdHlsZSA9ICpibGVuZGluZ0tleWZyYW1lLnN0eWxlKCk7
CiAKLSAgICAgICAgICAgIGF1dG8ga2V5ZnJhbWVQYXlsb2FkID0gSW5zcGVjdG9yOjpQcm90b2Nv
bDo6QW5pbWF0aW9uOjpLZXlmcmFtZTo6Y3JlYXRlKCkKKyAgICAgICAgICAgIGF1dG8ga2V5ZnJh
bWVQYXlsb2FkID0gUHJvdG9jb2w6OkFuaW1hdGlvbjo6S2V5ZnJhbWU6OmNyZWF0ZSgpCiAgICAg
ICAgICAgICAgICAgLnNldE9mZnNldChibGVuZGluZ0tleWZyYW1lLmtleSgpKQogICAgICAgICAg
ICAgICAgIC5yZWxlYXNlKCk7CiAKQEAgLTE2Nyw3ICsxNjcsNyBAQCBzdGF0aWMgUmVmPEpTT046
OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6QW5pbWF0aW9uOjpLZXlmcmFtZT4+IGJ1aWxk
T2JqZWN0RgogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgZm9yIChjb25zdCBhdXRv
JiBwYXJzZWRLZXlmcmFtZSA6IHBhcnNlZEtleWZyYW1lcykgewotICAgICAgICAgICAgYXV0byBr
ZXlmcmFtZVBheWxvYWQgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBbmltYXRpb246OktleWZyYW1l
OjpjcmVhdGUoKQorICAgICAgICAgICAgYXV0byBrZXlmcmFtZVBheWxvYWQgPSBQcm90b2NvbDo6
QW5pbWF0aW9uOjpLZXlmcmFtZTo6Y3JlYXRlKCkKICAgICAgICAgICAgICAgICAuc2V0T2Zmc2V0
KHBhcnNlZEtleWZyYW1lLmNvbXB1dGVkT2Zmc2V0KQogICAgICAgICAgICAgICAgIC5yZWxlYXNl
KCk7CiAKQEAgLTE4Niw5ICsxODYsOSBAQCBzdGF0aWMgUmVmPEpTT046OkFycmF5T2Y8SW5zcGVj
dG9yOjpQcm90b2NvbDo6QW5pbWF0aW9uOjpLZXlmcmFtZT4+IGJ1aWxkT2JqZWN0RgogICAgIHJl
dHVybiBrZXlmcmFtZXNQYXlsb2FkOwogfQogCi1zdGF0aWMgUmVmPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkFuaW1hdGlvbjo6RWZmZWN0PiBidWlsZE9iamVjdEZvckVmZmVjdChBbmltYXRpb25FZmZl
Y3QmIGVmZmVjdCkKK3N0YXRpYyBSZWY8UHJvdG9jb2w6OkFuaW1hdGlvbjo6RWZmZWN0PiBidWls
ZE9iamVjdEZvckVmZmVjdChBbmltYXRpb25FZmZlY3QmIGVmZmVjdCkKIHsKLSAgICBhdXRvIGVm
ZmVjdFBheWxvYWQgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBbmltYXRpb246OkVmZmVjdDo6Y3Jl
YXRlKCkKKyAgICBhdXRvIGVmZmVjdFBheWxvYWQgPSBQcm90b2NvbDo6QW5pbWF0aW9uOjpFZmZl
Y3Q6OmNyZWF0ZSgpCiAgICAgICAgIC5yZWxlYXNlKCk7CiAKICAgICBpZiAoYXV0byBzdGFydERl
bGF5ID0gcHJvdG9jb2xWYWx1ZUZvclNlY29uZHMoZWZmZWN0LmRlbGF5KCkpKQpAQCAtMjM4LDIw
ICsyMzgsMTcgQEAgdm9pZCBJbnNwZWN0b3JBbmltYXRpb25BZ2VudDo6ZGlkQ3JlYXRlRnJvbnRl
bmRBbmRCYWNrZW5kKEZyb250ZW5kUm91dGVyKiwgQmFja2UKIAogdm9pZCBJbnNwZWN0b3JBbmlt
YXRpb25BZ2VudDo6d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoRGlzY29ubmVjdFJlYXNv
bikKIHsKLSAgICBFcnJvclN0cmluZyBpZ25vcmVkOwotICAgIHN0b3BUcmFja2luZyhpZ25vcmVk
KTsKLSAgICBkaXNhYmxlKGlnbm9yZWQpOworICAgIHN0b3BUcmFja2luZygpOworICAgIGRpc2Fi
bGUoKTsKIAogICAgIEFTU0VSVChtX2luc3RydW1lbnRpbmdBZ2VudHMucGVyc2lzdGVudEFuaW1h
dGlvbkFnZW50KCkgPT0gdGhpcyk7CiAgICAgbV9pbnN0cnVtZW50aW5nQWdlbnRzLnNldFBlcnNp
c3RlbnRBbmltYXRpb25BZ2VudChudWxscHRyKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JBbmltYXRp
b25BZ2VudDo6ZW5hYmxlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZykKK1Byb3RvY29sOjpFcnJv
clN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckFuaW1hdGlvbkFnZW50OjplbmFibGUoKQogewotICAg
IGlmIChtX2luc3RydW1lbnRpbmdBZ2VudHMuZW5hYmxlZEFuaW1hdGlvbkFnZW50KCkgPT0gdGhp
cykgewotICAgICAgICBlcnJvclN0cmluZyA9ICJBbmltYXRpb24gZG9tYWluIGFscmVhZHkgZW5h
YmxlZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAobV9pbnN0cnVtZW50aW5n
QWdlbnRzLmVuYWJsZWRBbmltYXRpb25BZ2VudCgpID09IHRoaXMpCisgICAgICAgIHJldHVybiBt
YWtlVW5leHBlY3RlZCgiQW5pbWF0aW9uIGRvbWFpbiBhbHJlYWR5IGVuYWJsZWQiX3MpOwogCiAg
ICAgbV9pbnN0cnVtZW50aW5nQWdlbnRzLnNldEVuYWJsZWRBbmltYXRpb25BZ2VudCh0aGlzKTsK
IApAQCAtMjcwLDQ5ICsyNjcsNTEgQEAgdm9pZCBJbnNwZWN0b3JBbmltYXRpb25BZ2VudDo6ZW5h
YmxlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZykKICAgICAgICAgICAgICAgICBiaW5kQW5pbWF0
aW9uKCphbmltYXRpb24sIGZhbHNlKTsKICAgICAgICAgfQogICAgIH0KKworICAgIHJldHVybiB7
IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yQW5pbWF0aW9uQWdlbnQ6OmRpc2FibGUoRXJyb3JTdHJp
bmcmKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yQW5pbWF0aW9uQWdl
bnQ6OmRpc2FibGUoKQogewogICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy5zZXRFbmFibGVkQW5p
bWF0aW9uQWdlbnQobnVsbHB0cik7CiAKICAgICByZXNldCgpOworCisgICAgcmV0dXJuIHsgfTsK
IH0KIAotdm9pZCBJbnNwZWN0b3JBbmltYXRpb25BZ2VudDo6cmVxdWVzdEVmZmVjdFRhcmdldChF
cnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uSWQsIGludCog
bm9kZUlkKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UHJvdG9jb2w6OkRPTTo6Tm9kZUlkPiBJ
bnNwZWN0b3JBbmltYXRpb25BZ2VudDo6cmVxdWVzdEVmZmVjdFRhcmdldChjb25zdCBQcm90b2Nv
bDo6QW5pbWF0aW9uOjpBbmltYXRpb25JZCYgYW5pbWF0aW9uSWQpCiB7CisgICAgUHJvdG9jb2w6
OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAgICAgYXV0byogYW5pbWF0aW9uID0gYXNzZXJ0
QW5pbWF0aW9uKGVycm9yU3RyaW5nLCBhbmltYXRpb25JZCk7CiAgICAgaWYgKCFhbmltYXRpb24p
Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3Ry
aW5nKTsKIAogICAgIGF1dG8qIGRvbUFnZW50ID0gbV9pbnN0cnVtZW50aW5nQWdlbnRzLnBlcnNp
c3RlbnRET01BZ2VudCgpOwotICAgIGlmICghZG9tQWdlbnQpIHsKLSAgICAgICAgZXJyb3JTdHJp
bmcgPSAiRE9NIGRvbWFpbiBtdXN0IGJlIGVuYWJsZWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9CisgICAgaWYgKCFkb21BZ2VudCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJE
T00gZG9tYWluIG11c3QgYmUgZW5hYmxlZCJfcyk7CiAKICAgICBhdXRvKiBlZmZlY3QgPSBhbmlt
YXRpb24tPmVmZmVjdCgpOwotICAgIGlmICghaXM8S2V5ZnJhbWVFZmZlY3Q+KGVmZmVjdCkpIHsK
LSAgICAgICAgZXJyb3JTdHJpbmcgPSAiQW5pbWF0aW9uIGZvciBnaXZlbiBhbmltYXRpb25JZCBk
b2VzIG5vdCBoYXZlIGFuIGVmZmVjdCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBp
ZiAoIWlzPEtleWZyYW1lRWZmZWN0PihlZmZlY3QpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoIkFuaW1hdGlvbiBmb3IgZ2l2ZW4gYW5pbWF0aW9uSWQgZG9lcyBub3QgaGF2ZSBhbiBl
ZmZlY3QiX3MpOwogCiAgICAgYXV0byYga2V5ZnJhbWVFZmZlY3QgPSBkb3duY2FzdDxLZXlmcmFt
ZUVmZmVjdD4oKmVmZmVjdCk7CiAKICAgICBhdXRvKiB0YXJnZXQgPSBrZXlmcmFtZUVmZmVjdC50
YXJnZXRFbGVtZW50T3JQc2V1ZG9FbGVtZW50KCk7Ci0gICAgaWYgKCF0YXJnZXQpIHsKLSAgICAg
ICAgZXJyb3JTdHJpbmcgPSAiQW5pbWF0aW9uIGZvciBnaXZlbiBhbmltYXRpb25JZCBkb2VzIG5v
dCBoYXZlIGEgdGFyZ2V0Il9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghdGFy
Z2V0KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkFuaW1hdGlvbiBmb3IgZ2l2ZW4g
YW5pbWF0aW9uSWQgZG9lcyBub3QgaGF2ZSBhIHRhcmdldCJfcyk7CiAKLSAgICAqbm9kZUlkID0g
ZG9tQWdlbnQtPnB1c2hOb2RlUGF0aFRvRnJvbnRlbmQoZXJyb3JTdHJpbmcsIHRhcmdldCk7Cisg
ICAgcmV0dXJuIGRvbUFnZW50LT5wdXNoTm9kZVBhdGhUb0Zyb250ZW5kKGVycm9yU3RyaW5nLCB0
YXJnZXQpOwogfQogCi12b2lkIEluc3BlY3RvckFuaW1hdGlvbkFnZW50OjpyZXNvbHZlQW5pbWF0
aW9uKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBhbmltYXRpb25JZCwg
Y29uc3QgU3RyaW5nKiBvYmplY3RHcm91cCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1
bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3VsdCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPFJl
ZjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0Pj4gSW5zcGVjdG9yQW5pbWF0aW9uQWdl
bnQ6OnJlc29sdmVBbmltYXRpb24oY29uc3QgUHJvdG9jb2w6OkFuaW1hdGlvbjo6QW5pbWF0aW9u
SWQmIGFuaW1hdGlvbklkLCBjb25zdCBTdHJpbmcmIG9iamVjdEdyb3VwKQogeworICAgIFByb3Rv
Y29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIGF1dG8qIGFuaW1hdGlvbiA9IGFz
c2VydEFuaW1hdGlvbihlcnJvclN0cmluZywgYW5pbWF0aW9uSWQpOwogICAgIGlmICghYW5pbWF0
aW9uKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJv
clN0cmluZyk7CiAKICAgICBhdXRvKiBzdGF0ZSA9IGFuaW1hdGlvbi0+c2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpLT5leGVjU3RhdGUoKTsKICAgICBhdXRvIGluamVjdGVkU2NyaXB0ID0gbV9pbmpl
Y3RlZFNjcmlwdE1hbmFnZXIuaW5qZWN0ZWRTY3JpcHRGb3Ioc3RhdGUpOwpAQCAtMzI4LDM4ICsz
MjcsNDIgQEAgdm9pZCBJbnNwZWN0b3JBbmltYXRpb25BZ2VudDo6cmVzb2x2ZUFuaW1hdGlvbihF
cnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFMKIAogICAgIGlmICghdmFsdWUpIHsKICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIkludGVy
bmFsIGVycm9yOiB1bmtub3duIEFuaW1hdGlvbiBmb3IgZ2l2ZW4gYW5pbWF0aW9uSWQiX3M7Ci0g
ICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJJbnRlcm5hbCBl
cnJvcjogdW5rbm93biBBbmltYXRpb24gZm9yIGdpdmVuIGFuaW1hdGlvbklkIl9zKTsKICAgICB9
CiAKLSAgICBTdHJpbmcgb2JqZWN0R3JvdXBOYW1lID0gb2JqZWN0R3JvdXAgPyAqb2JqZWN0R3Jv
dXAgOiBTdHJpbmcoKTsKLSAgICByZXN1bHQgPSBpbmplY3RlZFNjcmlwdC53cmFwT2JqZWN0KHZh
bHVlLCBvYmplY3RHcm91cE5hbWUpOworICAgIGF1dG8gb2JqZWN0ID0gaW5qZWN0ZWRTY3JpcHQu
d3JhcE9iamVjdCh2YWx1ZSwgb2JqZWN0R3JvdXApOworICAgIGlmICghb2JqZWN0KQorICAgICAg
ICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkludGVybmFsIGVycm9yOiB1bmFibGUgdG8gY2FzdCBB
bmltYXRpb24iKTsKKworICAgIHJldHVybiBvYmplY3QucmVsZWFzZU5vbk51bGwoKTsKIH0KIAot
dm9pZCBJbnNwZWN0b3JBbmltYXRpb25BZ2VudDo6c3RhcnRUcmFja2luZyhFcnJvclN0cmluZyYg
ZXJyb3JTdHJpbmcpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JBbmlt
YXRpb25BZ2VudDo6c3RhcnRUcmFja2luZygpCiB7Ci0gICAgaWYgKG1faW5zdHJ1bWVudGluZ0Fn
ZW50cy50cmFja2luZ0FuaW1hdGlvbkFnZW50KCkgPT0gdGhpcykgewotICAgICAgICBlcnJvclN0
cmluZyA9ICJBbmltYXRpb24gZG9tYWluIGFscmVhZHkgdHJhY2tpbmciX3M7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9CisgICAgaWYgKG1faW5zdHJ1bWVudGluZ0FnZW50cy50cmFja2luZ0FuaW1h
dGlvbkFnZW50KCkgPT0gdGhpcykKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJBbmlt
YXRpb24gZG9tYWluIGFscmVhZHkgdHJhY2tpbmciX3MpOwogCiAgICAgbV9pbnN0cnVtZW50aW5n
QWdlbnRzLnNldFRyYWNraW5nQW5pbWF0aW9uQWdlbnQodGhpcyk7CiAKICAgICBBU1NFUlQobV90
cmFja2VkRGVjbGFyYXRpdmVBbmltYXRpb25EYXRhLmlzRW1wdHkoKSk7CiAKICAgICBtX2Zyb250
ZW5kRGlzcGF0Y2hlci0+dHJhY2tpbmdTdGFydChtX2Vudmlyb25tZW50LmV4ZWN1dGlvblN0b3B3
YXRjaCgpLmVsYXBzZWRUaW1lKCkuc2Vjb25kcygpKTsKKworICAgIHJldHVybiB7IH07CiB9CiAK
LXZvaWQgSW5zcGVjdG9yQW5pbWF0aW9uQWdlbnQ6OnN0b3BUcmFja2luZyhFcnJvclN0cmluZyYp
CitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JBbmltYXRpb25BZ2VudDo6
c3RvcFRyYWNraW5nKCkKIHsKICAgICBpZiAobV9pbnN0cnVtZW50aW5nQWdlbnRzLnRyYWNraW5n
QW5pbWF0aW9uQWdlbnQoKSAhPSB0aGlzKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVy
biB7IH07CiAKICAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMuc2V0VHJhY2tpbmdBbmltYXRpb25B
Z2VudChudWxscHRyKTsKIAogICAgIG1fdHJhY2tlZERlY2xhcmF0aXZlQW5pbWF0aW9uRGF0YS5j
bGVhcigpOwogCiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPnRyYWNraW5nQ29tcGxldGUobV9l
bnZpcm9ubWVudC5leGVjdXRpb25TdG9wd2F0Y2goKS5lbGFwc2VkVGltZSgpLnNlY29uZHMoKSk7
CisKKyAgICByZXR1cm4geyB9OwogfQogCiBzdGF0aWMgYm9vbCBpc0RlbGF5ZWQoQ29tcHV0ZWRF
ZmZlY3RUaW1pbmcmIGNvbXB1dGVkVGltaW5nKQpAQCAtMzgwLDMxICszODMsMzEgQEAgdm9pZCBJ
bnNwZWN0b3JBbmltYXRpb25BZ2VudDo6d2lsbEFwcGx5S2V5ZnJhbWVFZmZlY3QoRWxlbWVudCYg
dGFyZ2V0LCBLZXlmcmFtZUUKICAgICB9KTsKICAgICBhdXRvJiB0cmFja2luZ0RhdGEgPSBlbnN1
cmVSZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwogCi0gICAgT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90
b2NvbDo6QW5pbWF0aW9uOjpBbmltYXRpb25TdGF0ZT4gYW5pbWF0aW9uQW5pbWF0aW9uU3RhdGU7
CisgICAgT3B0aW9uYWw8UHJvdG9jb2w6OkFuaW1hdGlvbjo6QW5pbWF0aW9uU3RhdGU+IGFuaW1h
dGlvbkFuaW1hdGlvblN0YXRlOwogCiAgICAgaWYgKChlbnN1cmVSZXN1bHQuaXNOZXdFbnRyeSB8
fCAhaXNEZWxheWVkKHRyYWNraW5nRGF0YS5sYXN0Q29tcHV0ZWRUaW1pbmcpKSAmJiBpc0RlbGF5
ZWQoY29tcHV0ZWRUaW1pbmcpKQotICAgICAgICBhbmltYXRpb25BbmltYXRpb25TdGF0ZSA9IElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkFuaW1hdGlvbjo6QW5pbWF0aW9uU3RhdGU6OkRlbGF5ZWQ7Cisg
ICAgICAgIGFuaW1hdGlvbkFuaW1hdGlvblN0YXRlID0gUHJvdG9jb2w6OkFuaW1hdGlvbjo6QW5p
bWF0aW9uU3RhdGU6OkRlbGF5ZWQ7CiAgICAgZWxzZSBpZiAoZW5zdXJlUmVzdWx0LmlzTmV3RW50
cnkgfHwgdHJhY2tpbmdEYXRhLmxhc3RDb21wdXRlZFRpbWluZy5waGFzZSAhPSBjb21wdXRlZFRp
bWluZy5waGFzZSkgewogICAgICAgICBzd2l0Y2ggKGNvbXB1dGVkVGltaW5nLnBoYXNlKSB7CiAg
ICAgICAgIGNhc2UgQW5pbWF0aW9uRWZmZWN0UGhhc2U6OkJlZm9yZToKLSAgICAgICAgICAgIGFu
aW1hdGlvbkFuaW1hdGlvblN0YXRlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QW5pbWF0aW9uOjpB
bmltYXRpb25TdGF0ZTo6UmVhZHk7CisgICAgICAgICAgICBhbmltYXRpb25BbmltYXRpb25TdGF0
ZSA9IFByb3RvY29sOjpBbmltYXRpb246OkFuaW1hdGlvblN0YXRlOjpSZWFkeTsKICAgICAgICAg
ICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgQW5pbWF0aW9uRWZmZWN0UGhhc2U6OkFjdGl2ZToK
LSAgICAgICAgICAgIGFuaW1hdGlvbkFuaW1hdGlvblN0YXRlID0gSW5zcGVjdG9yOjpQcm90b2Nv
bDo6QW5pbWF0aW9uOjpBbmltYXRpb25TdGF0ZTo6QWN0aXZlOworICAgICAgICAgICAgYW5pbWF0
aW9uQW5pbWF0aW9uU3RhdGUgPSBQcm90b2NvbDo6QW5pbWF0aW9uOjpBbmltYXRpb25TdGF0ZTo6
QWN0aXZlOwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBBbmltYXRpb25FZmZl
Y3RQaGFzZTo6QWZ0ZXI6Ci0gICAgICAgICAgICBhbmltYXRpb25BbmltYXRpb25TdGF0ZSA9IElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkFuaW1hdGlvbjo6QW5pbWF0aW9uU3RhdGU6OkRvbmU7CisgICAg
ICAgICAgICBhbmltYXRpb25BbmltYXRpb25TdGF0ZSA9IFByb3RvY29sOjpBbmltYXRpb246OkFu
aW1hdGlvblN0YXRlOjpEb25lOwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBB
bmltYXRpb25FZmZlY3RQaGFzZTo6SWRsZToKLSAgICAgICAgICAgIGFuaW1hdGlvbkFuaW1hdGlv
blN0YXRlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QW5pbWF0aW9uOjpBbmltYXRpb25TdGF0ZTo6
Q2FuY2VsZWQ7CisgICAgICAgICAgICBhbmltYXRpb25BbmltYXRpb25TdGF0ZSA9IFByb3RvY29s
OjpBbmltYXRpb246OkFuaW1hdGlvblN0YXRlOjpDYW5jZWxlZDsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAgICAgfSBlbHNlIGlmICh0cmFja2luZ0RhdGEubGFzdENvbXB1dGVkVGlt
aW5nLmN1cnJlbnRJdGVyYXRpb24gIT0gY29tcHV0ZWRUaW1pbmcuY3VycmVudEl0ZXJhdGlvbikg
ewogICAgICAgICAvLyBJdGVyYXRpb25zIGFyZSByZXByZXNlbnRlZCBieSBzZXF1ZW50aWFsICJh
Y3RpdmUiIHN0YXRlIGV2ZW50cy4KLSAgICAgICAgYW5pbWF0aW9uQW5pbWF0aW9uU3RhdGUgPSBJ
bnNwZWN0b3I6OlByb3RvY29sOjpBbmltYXRpb246OkFuaW1hdGlvblN0YXRlOjpBY3RpdmU7Cisg
ICAgICAgIGFuaW1hdGlvbkFuaW1hdGlvblN0YXRlID0gUHJvdG9jb2w6OkFuaW1hdGlvbjo6QW5p
bWF0aW9uU3RhdGU6OkFjdGl2ZTsKICAgICB9CiAKICAgICB0cmFja2luZ0RhdGEubGFzdENvbXB1
dGVkVGltaW5nID0gY29tcHV0ZWRUaW1pbmc7CkBAIC00MTIsNyArNDE1LDcgQEAgdm9pZCBJbnNw
ZWN0b3JBbmltYXRpb25BZ2VudDo6d2lsbEFwcGx5S2V5ZnJhbWVFZmZlY3QoRWxlbWVudCYgdGFy
Z2V0LCBLZXlmcmFtZUUKICAgICBpZiAoIWFuaW1hdGlvbkFuaW1hdGlvblN0YXRlKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBhdXRvIGV2ZW50ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QW5pbWF0
aW9uOjpUcmFja2luZ1VwZGF0ZTo6Y3JlYXRlKCkKKyAgICBhdXRvIGV2ZW50ID0gUHJvdG9jb2w6
OkFuaW1hdGlvbjo6VHJhY2tpbmdVcGRhdGU6OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRUcmFja2lu
Z0FuaW1hdGlvbklkKHRyYWNraW5nRGF0YS50cmFja2luZ0FuaW1hdGlvbklkKQogICAgICAgICAu
c2V0QW5pbWF0aW9uU3RhdGUoYW5pbWF0aW9uQW5pbWF0aW9uU3RhdGUudmFsdWUoKSkKICAgICAg
ICAgLnJlbGVhc2UoKTsKQEAgLTQ0MSw4ICs0NDQsNyBAQCB2b2lkIEluc3BlY3RvckFuaW1hdGlv
bkFnZW50OjpkaWRDaGFuZ2VXZWJBbmltYXRpb25OYW1lKFdlYkFuaW1hdGlvbiYgYW5pbWF0aW9u
KQogICAgIGlmIChhbmltYXRpb25JZC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAg
IGF1dG8gbmFtZSA9IGFuaW1hdGlvbi5pZCgpOwotICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5u
YW1lQ2hhbmdlZChhbmltYXRpb25JZCwgIW5hbWUuaXNFbXB0eSgpID8gJm5hbWUgOiBudWxscHRy
KTsKKyAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+bmFtZUNoYW5nZWQoYW5pbWF0aW9uSWQsIGFu
aW1hdGlvbi5pZCgpKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JBbmltYXRpb25BZ2VudDo6ZGlkU2V0
V2ViQW5pbWF0aW9uRWZmZWN0KFdlYkFuaW1hdGlvbiYgYW5pbWF0aW9uKQpAQCAtNTI1LDcgKzUy
Nyw3IEBAIFN0cmluZyBJbnNwZWN0b3JBbmltYXRpb25BZ2VudDo6ZmluZEFuaW1hdGlvbklkKFdl
YkFuaW1hdGlvbiYgYW5pbWF0aW9uKQogICAgIHJldHVybiBudWxsU3RyaW5nKCk7CiB9CiAKLVdl
YkFuaW1hdGlvbiogSW5zcGVjdG9yQW5pbWF0aW9uQWdlbnQ6OmFzc2VydEFuaW1hdGlvbihFcnJv
clN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uSWQpCitXZWJBbmlt
YXRpb24qIEluc3BlY3RvckFuaW1hdGlvbkFnZW50Ojphc3NlcnRBbmltYXRpb24oUHJvdG9jb2w6
OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBhbmltYXRpb25JZCkKIHsK
ICAgICBhdXRvKiBhbmltYXRpb24gPSBtX2FuaW1hdGlvbklkTWFwLmdldChhbmltYXRpb25JZCk7
CiAgICAgaWYgKCFhbmltYXRpb24pCkBAIC01MzgsNyArNTQwLDcgQEAgdm9pZCBJbnNwZWN0b3JB
bmltYXRpb25BZ2VudDo6YmluZEFuaW1hdGlvbihXZWJBbmltYXRpb24mIGFuaW1hdGlvbiwgYm9v
bCBjYXB0dXIKICAgICBhdXRvIGFuaW1hdGlvbklkID0gbWFrZVN0cmluZygiYW5pbWF0aW9uOiIg
KyBJZGVudGlmaWVyc0ZhY3Rvcnk6OmNyZWF0ZUlkZW50aWZpZXIoKSk7CiAgICAgbV9hbmltYXRp
b25JZE1hcC5zZXQoYW5pbWF0aW9uSWQsICZhbmltYXRpb24pOwogCi0gICAgYXV0byBhbmltYXRp
b25QYXlsb2FkID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QW5pbWF0aW9uOjpBbmltYXRpb246OmNy
ZWF0ZSgpCisgICAgYXV0byBhbmltYXRpb25QYXlsb2FkID0gUHJvdG9jb2w6OkFuaW1hdGlvbjo6
QW5pbWF0aW9uOjpjcmVhdGUoKQogICAgICAgICAuc2V0QW5pbWF0aW9uSWQoYW5pbWF0aW9uSWQp
CiAgICAgICAgIC5yZWxlYXNlKCk7CiAKQEAgLTYwMyw5ICs2MDUsOSBAQCB2b2lkIEluc3BlY3Rv
ckFuaW1hdGlvbkFnZW50OjpzdG9wVHJhY2tpbmdEZWNsYXJhdGl2ZUFuaW1hdGlvbihEZWNsYXJh
dGl2ZUFuaW1hdAogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoaXQtPnZhbHVlLmxhc3RDb21w
dXRlZFRpbWluZy5waGFzZSAhPSBBbmltYXRpb25FZmZlY3RQaGFzZTo6QWZ0ZXIgJiYgaXQtPnZh
bHVlLmxhc3RDb21wdXRlZFRpbWluZy5waGFzZSAhPSBBbmltYXRpb25FZmZlY3RQaGFzZTo6SWRs
ZSkgewotICAgICAgICBhdXRvIGV2ZW50ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QW5pbWF0aW9u
OjpUcmFja2luZ1VwZGF0ZTo6Y3JlYXRlKCkKKyAgICAgICAgYXV0byBldmVudCA9IFByb3RvY29s
OjpBbmltYXRpb246OlRyYWNraW5nVXBkYXRlOjpjcmVhdGUoKQogICAgICAgICAgICAgLnNldFRy
YWNraW5nQW5pbWF0aW9uSWQoaXQtPnZhbHVlLnRyYWNraW5nQW5pbWF0aW9uSWQpCi0gICAgICAg
ICAgICAuc2V0QW5pbWF0aW9uU3RhdGUoSW5zcGVjdG9yOjpQcm90b2NvbDo6QW5pbWF0aW9uOjpB
bmltYXRpb25TdGF0ZTo6Q2FuY2VsZWQpCisgICAgICAgICAgICAuc2V0QW5pbWF0aW9uU3RhdGUo
UHJvdG9jb2w6OkFuaW1hdGlvbjo6QW5pbWF0aW9uU3RhdGU6OkNhbmNlbGVkKQogICAgICAgICAg
ICAgLnJlbGVhc2UoKTsKICAgICAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPnRyYWNraW5nVXBk
YXRlKG1fZW52aXJvbm1lbnQuZXhlY3V0aW9uU3RvcHdhdGNoKCkuZWxhcHNlZFRpbWUoKS5zZWNv
bmRzKCksIFdURk1vdmUoZXZlbnQpKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckFuaW1hdGlvbkFnZW50LmggYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckFuaW1hdGlvbkFnZW50LmgKaW5kZXggOGI1
MTE2MjhjOTdhMjIyYThmOWFjZDhkM2U1YjIwMmE4ZGJiNmJlYy4uMDY0YWM0MDYzYzMwOWZkYjQx
YzcxYmZjZjZjYmQ5ZWE2NGVkOTMxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2FnZW50cy9JbnNwZWN0b3JBbmltYXRpb25BZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQW5pbWF0aW9uQWdlbnQuaApAQCAtNDQsMjYgKzQ0
LDI0IEBAIGNsYXNzIEtleWZyYW1lRWZmZWN0OwogY2xhc3MgUGFnZTsKIGNsYXNzIFdlYkFuaW1h
dGlvbjsKIAotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7Ci0KIGNsYXNzIEluc3BlY3RvckFu
aW1hdGlvbkFnZW50IGZpbmFsIDogcHVibGljIEluc3BlY3RvckFnZW50QmFzZSwgcHVibGljIElu
c3BlY3Rvcjo6QW5pbWF0aW9uQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKICAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShJbnNwZWN0b3JBbmltYXRpb25BZ2VudCk7CiAgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgSW5zcGVjdG9yQW5pbWF0aW9uQWdlbnQoUGFnZUFn
ZW50Q29udGV4dCYpOwotICAgIH5JbnNwZWN0b3JBbmltYXRpb25BZ2VudCgpIG92ZXJyaWRlOwor
ICAgIH5JbnNwZWN0b3JBbmltYXRpb25BZ2VudCgpOwogCiAgICAgLy8gSW5zcGVjdG9yQWdlbnRC
YXNlCi0gICAgdm9pZCBkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9u
dGVuZFJvdXRlciosIEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXIqKSBvdmVycmlkZTsKLSAg
ICB2b2lkIHdpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlzY29ubmVj
dFJlYXNvbikgb3ZlcnJpZGU7CisgICAgdm9pZCBkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQo
SW5zcGVjdG9yOjpGcm9udGVuZFJvdXRlciosIEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXIq
KTsKKyAgICB2b2lkIHdpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlz
Y29ubmVjdFJlYXNvbik7CiAKICAgICAvLyBBbmltYXRpb25CYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXIKLSAgICB2b2lkIGVuYWJsZShFcnJvclN0cmluZyYpIG92ZXJyaWRlOwotICAgIHZvaWQgZGlz
YWJsZShFcnJvclN0cmluZyYpIG92ZXJyaWRlOwotICAgIHZvaWQgcmVxdWVzdEVmZmVjdFRhcmdl
dChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uSWQsIGludCogbm9kZUlkKSBv
dmVycmlkZTsKLSAgICB2b2lkIHJlc29sdmVBbmltYXRpb24oRXJyb3JTdHJpbmcmLCBjb25zdCBT
dHJpbmcmIGFuaW1hdGlvbklkLCBjb25zdCBTdHJpbmcqIG9iamVjdEdyb3VwLCBSZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYpIG92ZXJyaWRlOwotICAg
IHZvaWQgc3RhcnRUcmFja2luZyhFcnJvclN0cmluZyYpIG92ZXJyaWRlOwotICAgIHZvaWQgc3Rv
cFRyYWNraW5nKEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7CisgICAgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBlbmFibGUoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29s
OjpFcnJvclN0cmluZ09yPHZvaWQ+IGRpc2FibGUoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29s
OjpFcnJvclN0cmluZ09yPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkPiByZXF1ZXN0
RWZmZWN0VGFyZ2V0KGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFuaW1hdGlvbjo6QW5pbWF0
aW9uSWQmKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+PiByZXNvbHZlQW5pbWF0aW9u
KGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFuaW1hdGlvbjo6QW5pbWF0aW9uSWQmLCBjb25z
dCBTdHJpbmcmIG9iamVjdEdyb3VwKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0
cmluZ09yPHZvaWQ+IHN0YXJ0VHJhY2tpbmcoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpF
cnJvclN0cmluZ09yPHZvaWQ+IHN0b3BUcmFja2luZygpOwogCiAgICAgLy8gSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uCiAgICAgdm9pZCB3aWxsQXBwbHlLZXlmcmFtZUVmZmVjdChFbGVtZW50Jiwg
S2V5ZnJhbWVFZmZlY3QmLCBDb21wdXRlZEVmZmVjdFRpbWluZyk7CkBAIC03Nyw3ICs3NSw3IEBA
IHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBTdHJpbmcgZmluZEFuaW1hdGlvbklkKFdlYkFuaW1h
dGlvbiYpOwotICAgIFdlYkFuaW1hdGlvbiogYXNzZXJ0QW5pbWF0aW9uKEVycm9yU3RyaW5nJiwg
Y29uc3QgU3RyaW5nJiBhbmltYXRpb25JZCk7CisgICAgV2ViQW5pbWF0aW9uKiBhc3NlcnRBbmlt
YXRpb24oSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGFu
aW1hdGlvbklkKTsKICAgICB2b2lkIGJpbmRBbmltYXRpb24oV2ViQW5pbWF0aW9uJiwgYm9vbCBj
YXB0dXJlQmFja3RyYWNlKTsKICAgICB2b2lkIHVuYmluZEFuaW1hdGlvbihjb25zdCBTdHJpbmcm
IGFuaW1hdGlvbklkKTsKICAgICB2b2lkIGFuaW1hdGlvbkRlc3Ryb3llZFRpbWVyRmlyZWQoKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQXBw
bGljYXRpb25DYWNoZUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50LmNwcAppbmRleCA5MTI5MjY0OGQ2ODJkOWMz
ODFlNTI0ZmQwOTcwMDhhNDdjMzY1MDRhLi5hZjY3Mzc4YTZkZGNkMWFlNzcyNDRlODk5NTM2Nzcz
YTcwMjdiMDNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0lu
c3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuY3BwCkBAIC01Nywz
MSArNTcsMzAgQEAgdm9pZCBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQ6OmRpZENyZWF0
ZUZyb250ZW5kQW5kQmFja2VuZChGcm9udGVuZFJvdXRlcioKIAogdm9pZCBJbnNwZWN0b3JBcHBs
aWNhdGlvbkNhY2hlQWdlbnQ6OndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rv
cjo6RGlzY29ubmVjdFJlYXNvbikKIHsKLSAgICBFcnJvclN0cmluZyBpZ25vcmVkOwotICAgIGRp
c2FibGUoaWdub3JlZCk7CisgICAgZGlzYWJsZSgpOwogfQogCi12b2lkIEluc3BlY3RvckFwcGxp
Y2F0aW9uQ2FjaGVBZ2VudDo6ZW5hYmxlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZykKK1Byb3Rv
Y29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudDo6
ZW5hYmxlKCkKIHsKLSAgICBpZiAobV9pbnN0cnVtZW50aW5nQWdlbnRzLmVuYWJsZWRBcHBsaWNh
dGlvbkNhY2hlQWdlbnQoKSA9PSB0aGlzKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIkFwcGxp
Y2F0aW9uQ2FjaGUgZG9tYWluIGFscmVhZHkgZW5hYmxlZCJfczsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KKyAgICBpZiAobV9pbnN0cnVtZW50aW5nQWdlbnRzLmVuYWJsZWRBcHBsaWNhdGlvbkNh
Y2hlQWdlbnQoKSA9PSB0aGlzKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkFwcGxp
Y2F0aW9uQ2FjaGUgZG9tYWluIGFscmVhZHkgZW5hYmxlZCJfcyk7CiAKICAgICBtX2luc3RydW1l
bnRpbmdBZ2VudHMuc2V0RW5hYmxlZEFwcGxpY2F0aW9uQ2FjaGVBZ2VudCh0aGlzKTsKIAogICAg
IC8vIFdlIG5lZWQgdG8gcGFzcyBpbml0aWFsIG5hdmlnYXRvci5vbk9ubGluZS4KICAgICBuZXR3
b3JrU3RhdGVDaGFuZ2VkKCk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3Rv
ckFwcGxpY2F0aW9uQ2FjaGVBZ2VudDo6ZGlzYWJsZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcp
CitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hl
QWdlbnQ6OmRpc2FibGUoKQogewotICAgIGlmIChtX2luc3RydW1lbnRpbmdBZ2VudHMuZW5hYmxl
ZEFwcGxpY2F0aW9uQ2FjaGVBZ2VudCgpICE9IHRoaXMpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcg
PSAiQXBwbGljYXRpb25DYWNoZSBkb21haW4gYWxyZWFkeSBkaXNhYmxlZCJfczsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KKyAgICBpZiAobV9pbnN0cnVtZW50aW5nQWdlbnRzLmVuYWJsZWRBcHBs
aWNhdGlvbkNhY2hlQWdlbnQoKSAhPSB0aGlzKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0
ZWQoIkFwcGxpY2F0aW9uQ2FjaGUgZG9tYWluIGFscmVhZHkgZGlzYWJsZWQiX3MpOwogCiAgICAg
bV9pbnN0cnVtZW50aW5nQWdlbnRzLnNldEVuYWJsZWRBcHBsaWNhdGlvbkNhY2hlQWdlbnQobnVs
bHB0cik7CisKKyAgICByZXR1cm4geyB9OwogfQogCiB2b2lkIEluc3BlY3RvckFwcGxpY2F0aW9u
Q2FjaGVBZ2VudDo6dXBkYXRlQXBwbGljYXRpb25DYWNoZVN0YXR1cyhGcmFtZSogZnJhbWUpCkBA
IC0xMDksMTYgKzEwOCwxMyBAQCB2b2lkIEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudDo6
bmV0d29ya1N0YXRlQ2hhbmdlZCgpCiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPm5ldHdvcmtT
dGF0ZVVwZGF0ZWQocGxhdGZvcm1TdHJhdGVnaWVzKCktPmxvYWRlclN0cmF0ZWd5KCktPmlzT25M
aW5lKCkpOwogfQogCi12b2lkIEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudDo6Z2V0RnJh
bWVzV2l0aE1hbmlmZXN0cyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIFJlZlB0cjxKU09OOjpB
cnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkZyYW1lV2l0aE1h
bmlmZXN0Pj4mIHJlc3VsdCkKK0V4cGVjdGVkPFJlZjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpB
cHBsaWNhdGlvbkNhY2hlOjpGcmFtZVdpdGhNYW5pZmVzdD4+LCBQcm90b2NvbDo6RXJyb3JTdHJp
bmc+IEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudDo6Z2V0RnJhbWVzV2l0aE1hbmlmZXN0
cygpCiB7CiAgICAgYXV0byogcGFnZUFnZW50ID0gbV9pbnN0cnVtZW50aW5nQWdlbnRzLmVuYWJs
ZWRQYWdlQWdlbnQoKTsKLSAgICBpZiAoIXBhZ2VBZ2VudCkgewotICAgICAgICBlcnJvclN0cmlu
ZyA9ICJQYWdlIGRvbWFpbiBtdXN0IGJlIGVuYWJsZWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICByZXN1bHQgPSBKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFw
cGxpY2F0aW9uQ2FjaGU6OkZyYW1lV2l0aE1hbmlmZXN0Pjo6Y3JlYXRlKCk7CisgICAgaWYgKCFw
YWdlQWdlbnQpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiUGFnZSBkb21haW4gbXVz
dCBiZSBlbmFibGVkIl9zKTsKIAorICAgIGF1dG8gcmVzdWx0ID0gSlNPTjo6QXJyYXlPZjxQcm90
b2NvbDo6QXBwbGljYXRpb25DYWNoZTo6RnJhbWVXaXRoTWFuaWZlc3Q+OjpjcmVhdGUoKTsKICAg
ICBmb3IgKEZyYW1lKiBmcmFtZSA9ICZtX2luc3BlY3RlZFBhZ2UubWFpbkZyYW1lKCk7IGZyYW1l
OyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsKICAgICAgICAgYXV0byog
ZG9jdW1lbnRMb2FkZXIgPSBmcmFtZS0+bG9hZGVyKCkuZG9jdW1lbnRMb2FkZXIoKTsKICAgICAg
ICAgaWYgKCFkb2N1bWVudExvYWRlcikKQEAgLTEyNywxNiArMTIzLDE3IEBAIHZvaWQgSW5zcGVj
dG9yQXBwbGljYXRpb25DYWNoZUFnZW50OjpnZXRGcmFtZXNXaXRoTWFuaWZlc3RzKEVycm9yU3Ry
aW5nJiBlcnJvclN0CiAgICAgICAgIGF1dG8mIGhvc3QgPSBkb2N1bWVudExvYWRlci0+YXBwbGlj
YXRpb25DYWNoZUhvc3QoKTsKICAgICAgICAgU3RyaW5nIG1hbmlmZXN0VVJMID0gaG9zdC5hcHBs
aWNhdGlvbkNhY2hlSW5mbygpLm1hbmlmZXN0LnN0cmluZygpOwogICAgICAgICBpZiAoIW1hbmlm
ZXN0VVJMLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgcmVzdWx0LT5hZGRJdGVtKEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkZyYW1lV2l0aE1hbmlmZXN0OjpjcmVhdGUo
KQorICAgICAgICAgICAgcmVzdWx0LT5hZGRJdGVtKFByb3RvY29sOjpBcHBsaWNhdGlvbkNhY2hl
OjpGcmFtZVdpdGhNYW5pZmVzdDo6Y3JlYXRlKCkKICAgICAgICAgICAgICAgICAuc2V0RnJhbWVJ
ZChwYWdlQWdlbnQtPmZyYW1lSWQoZnJhbWUpKQogICAgICAgICAgICAgICAgIC5zZXRNYW5pZmVz
dFVSTChtYW5pZmVzdFVSTCkKICAgICAgICAgICAgICAgICAuc2V0U3RhdHVzKHN0YXRpY19jYXN0
PGludD4oaG9zdC5zdGF0dXMoKSkpCiAgICAgICAgICAgICAgICAgLnJlbGVhc2UoKSk7CiAgICAg
ICAgIH0KICAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotRG9jdW1lbnRMb2FkZXIqIElu
c3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudDo6YXNzZXJ0RnJhbWVXaXRoRG9jdW1lbnRMb2Fk
ZXIoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGZyYW1lSWQpCitEb2N1
bWVudExvYWRlciogSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50Ojphc3NlcnRGcmFtZVdp
dGhEb2N1bWVudExvYWRlcihQcm90b2NvbDo6RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25z
dCBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpGcmFtZUlkJiBmcmFtZUlkKQogewogICAg
IGF1dG8qIHBhZ2VBZ2VudCA9IG1faW5zdHJ1bWVudGluZ0FnZW50cy5lbmFibGVkUGFnZUFnZW50
KCk7CiAgICAgaWYgKCFwYWdlQWdlbnQpIHsKQEAgLTE1MSwyOCArMTQ4LDMyIEBAIERvY3VtZW50
TG9hZGVyKiBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQ6OmFzc2VydEZyYW1lV2l0aERv
Y3VtZW50TG9hZGVyKEVyCiAgICAgcmV0dXJuIEluc3BlY3RvclBhZ2VBZ2VudDo6YXNzZXJ0RG9j
dW1lbnRMb2FkZXIoZXJyb3JTdHJpbmcsIGZyYW1lKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JBcHBs
aWNhdGlvbkNhY2hlQWdlbnQ6OmdldE1hbmlmZXN0Rm9yRnJhbWUoRXJyb3JTdHJpbmcmIGVycm9y
U3RyaW5nLCBjb25zdCBTdHJpbmcmIGZyYW1lSWQsIFN0cmluZyogbWFuaWZlc3RVUkwpCitFeHBl
Y3RlZDxTdHJpbmcsIFByb3RvY29sOjpFcnJvclN0cmluZz4gSW5zcGVjdG9yQXBwbGljYXRpb25D
YWNoZUFnZW50OjpnZXRNYW5pZmVzdEZvckZyYW1lKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6
Ok5ldHdvcms6OkZyYW1lSWQmIGZyYW1lSWQpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5n
IGVycm9yU3RyaW5nOworCiAgICAgRG9jdW1lbnRMb2FkZXIqIGRvY3VtZW50TG9hZGVyID0gYXNz
ZXJ0RnJhbWVXaXRoRG9jdW1lbnRMb2FkZXIoZXJyb3JTdHJpbmcsIGZyYW1lSWQpOwogICAgIGlm
ICghZG9jdW1lbnRMb2FkZXIpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAotICAgICptYW5pZmVzdFVSTCA9IGRvY3VtZW50TG9h
ZGVyLT5hcHBsaWNhdGlvbkNhY2hlSG9zdCgpLmFwcGxpY2F0aW9uQ2FjaGVJbmZvKCkubWFuaWZl
c3Quc3RyaW5nKCk7CisgICAgcmV0dXJuIGRvY3VtZW50TG9hZGVyLT5hcHBsaWNhdGlvbkNhY2hl
SG9zdCgpLmFwcGxpY2F0aW9uQ2FjaGVJbmZvKCkubWFuaWZlc3Quc3RyaW5nKCk7CiB9CiAKLXZv
aWQgSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50OjpnZXRBcHBsaWNhdGlvbkNhY2hlRm9y
RnJhbWUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGZyYW1lSWQsIFJl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcHBsaWNhdGlvbkNhY2hlOjpBcHBsaWNhdGlvbkNh
Y2hlPiYgYXBwbGljYXRpb25DYWNoZSkKK0V4cGVjdGVkPFJlZjxQcm90b2NvbDo6QXBwbGljYXRp
b25DYWNoZTo6QXBwbGljYXRpb25DYWNoZT4sIFByb3RvY29sOjpFcnJvclN0cmluZz4gSW5zcGVj
dG9yQXBwbGljYXRpb25DYWNoZUFnZW50OjpnZXRBcHBsaWNhdGlvbkNhY2hlRm9yRnJhbWUoY29u
c3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6RnJhbWVJZCYgZnJhbWVJZCkKIHsKKyAg
ICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBhdXRvKiBkb2N1bWVu
dExvYWRlciA9IGFzc2VydEZyYW1lV2l0aERvY3VtZW50TG9hZGVyKGVycm9yU3RyaW5nLCBmcmFt
ZUlkKTsKICAgICBpZiAoIWRvY3VtZW50TG9hZGVyKQotICAgICAgICByZXR1cm47CisgICAgICAg
IHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAgICBhdXRvJiBob3N0ID0g
ZG9jdW1lbnRMb2FkZXItPmFwcGxpY2F0aW9uQ2FjaGVIb3N0KCk7Ci0gICAgYXBwbGljYXRpb25D
YWNoZSA9IGJ1aWxkT2JqZWN0Rm9yQXBwbGljYXRpb25DYWNoZShob3N0LnJlc291cmNlTGlzdCgp
LCBob3N0LmFwcGxpY2F0aW9uQ2FjaGVJbmZvKCkpOworICAgIHJldHVybiBidWlsZE9iamVjdEZv
ckFwcGxpY2F0aW9uQ2FjaGUoaG9zdC5yZXNvdXJjZUxpc3QoKSwgaG9zdC5hcHBsaWNhdGlvbkNh
Y2hlSW5mbygpKTsKIH0KIAotUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2Fj
aGU6OkFwcGxpY2F0aW9uQ2FjaGU+IEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudDo6YnVp
bGRPYmplY3RGb3JBcHBsaWNhdGlvbkNhY2hlKGNvbnN0IFZlY3RvcjxBcHBsaWNhdGlvbkNhY2hl
SG9zdDo6UmVzb3VyY2VJbmZvPiYgYXBwbGljYXRpb25DYWNoZVJlc291cmNlcywgY29uc3QgQXBw
bGljYXRpb25DYWNoZUhvc3Q6OkNhY2hlSW5mbyYgYXBwbGljYXRpb25DYWNoZUluZm8pCitSZWY8
UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkFwcGxpY2F0aW9uQ2FjaGU+IEluc3BlY3RvckFw
cGxpY2F0aW9uQ2FjaGVBZ2VudDo6YnVpbGRPYmplY3RGb3JBcHBsaWNhdGlvbkNhY2hlKGNvbnN0
IFZlY3RvcjxBcHBsaWNhdGlvbkNhY2hlSG9zdDo6UmVzb3VyY2VJbmZvPiYgYXBwbGljYXRpb25D
YWNoZVJlc291cmNlcywgY29uc3QgQXBwbGljYXRpb25DYWNoZUhvc3Q6OkNhY2hlSW5mbyYgYXBw
bGljYXRpb25DYWNoZUluZm8pCiB7Ci0gICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFw
cGxpY2F0aW9uQ2FjaGU6OkFwcGxpY2F0aW9uQ2FjaGU6OmNyZWF0ZSgpCisgICAgcmV0dXJuIFBy
b3RvY29sOjpBcHBsaWNhdGlvbkNhY2hlOjpBcHBsaWNhdGlvbkNhY2hlOjpjcmVhdGUoKQogICAg
ICAgICAuc2V0TWFuaWZlc3RVUkwoYXBwbGljYXRpb25DYWNoZUluZm8ubWFuaWZlc3Quc3RyaW5n
KCkpCiAgICAgICAgIC5zZXRTaXplKGFwcGxpY2F0aW9uQ2FjaGVJbmZvLnNpemUpCiAgICAgICAg
IC5zZXRDcmVhdGlvblRpbWUoYXBwbGljYXRpb25DYWNoZUluZm8uY3JlYXRpb25UaW1lKQpAQCAt
MTgxLDE1ICsxODIsMTUgQEAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2Fj
aGU6OkFwcGxpY2F0aW9uQ2FjaGU+IEluc3BlY3RvckFwcGxpY2F0aW8KICAgICAgICAgLnJlbGVh
c2UoKTsKIH0KIAotUmVmPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXBwbGlj
YXRpb25DYWNoZTo6QXBwbGljYXRpb25DYWNoZVJlc291cmNlPj4gSW5zcGVjdG9yQXBwbGljYXRp
b25DYWNoZUFnZW50OjpidWlsZEFycmF5Rm9yQXBwbGljYXRpb25DYWNoZVJlc291cmNlcyhjb25z
dCBWZWN0b3I8QXBwbGljYXRpb25DYWNoZUhvc3Q6OlJlc291cmNlSW5mbz4mIGFwcGxpY2F0aW9u
Q2FjaGVSZXNvdXJjZXMpCitSZWY8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6QXBwbGljYXRpb25D
YWNoZTo6QXBwbGljYXRpb25DYWNoZVJlc291cmNlPj4gSW5zcGVjdG9yQXBwbGljYXRpb25DYWNo
ZUFnZW50OjpidWlsZEFycmF5Rm9yQXBwbGljYXRpb25DYWNoZVJlc291cmNlcyhjb25zdCBWZWN0
b3I8QXBwbGljYXRpb25DYWNoZUhvc3Q6OlJlc291cmNlSW5mbz4mIGFwcGxpY2F0aW9uQ2FjaGVS
ZXNvdXJjZXMpCiB7Ci0gICAgYXV0byByZXN1bHQgPSBKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZT46OmNy
ZWF0ZSgpOworICAgIGF1dG8gcmVzdWx0ID0gSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6QXBwbGlj
YXRpb25DYWNoZTo6QXBwbGljYXRpb25DYWNoZVJlc291cmNlPjo6Y3JlYXRlKCk7CiAgICAgZm9y
IChhdXRvJiBpbmZvIDogYXBwbGljYXRpb25DYWNoZVJlc291cmNlcykKICAgICAgICAgcmVzdWx0
LT5hZGRJdGVtKGJ1aWxkT2JqZWN0Rm9yQXBwbGljYXRpb25DYWNoZVJlc291cmNlKGluZm8pKTsK
ICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1SZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXBwbGlj
YXRpb25DYWNoZTo6QXBwbGljYXRpb25DYWNoZVJlc291cmNlPiBJbnNwZWN0b3JBcHBsaWNhdGlv
bkNhY2hlQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yQXBwbGljYXRpb25DYWNoZVJlc291cmNlKGNvbnN0
IEFwcGxpY2F0aW9uQ2FjaGVIb3N0OjpSZXNvdXJjZUluZm8mIHJlc291cmNlSW5mbykKK1JlZjxQ
cm90b2NvbDo6QXBwbGljYXRpb25DYWNoZTo6QXBwbGljYXRpb25DYWNoZVJlc291cmNlPiBJbnNw
ZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yQXBwbGljYXRpb25DYWNo
ZVJlc291cmNlKGNvbnN0IEFwcGxpY2F0aW9uQ2FjaGVIb3N0OjpSZXNvdXJjZUluZm8mIHJlc291
cmNlSW5mbykKIHsKICAgICBTdHJpbmdCdWlsZGVyIHR5cGVzOwogCkBAIC0yMDgsNyArMjA5LDcg
QEAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkFwcGxpY2F0aW9u
Q2FjaGVSZXNvdXJjZT4gSW5zcGVjdG9yQXAKICAgICBpZiAocmVzb3VyY2VJbmZvLmlzRXhwbGlj
aXQpCiAgICAgICAgIHR5cGVzLmFwcGVuZExpdGVyYWwoIkV4cGxpY2l0ICIpOwogCi0gICAgcmV0
dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkFwcGxpY2F0aW9uQ2Fj
aGVSZXNvdXJjZTo6Y3JlYXRlKCkKKyAgICByZXR1cm4gUHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2Fj
aGU6OkFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZTo6Y3JlYXRlKCkKICAgICAgICAgLnNldFVybChy
ZXNvdXJjZUluZm8ucmVzb3VyY2Uuc3RyaW5nKCkpCiAgICAgICAgIC5zZXRTaXplKHN0YXRpY19j
YXN0PGludD4ocmVzb3VyY2VJbmZvLnNpemUpKQogICAgICAgICAuc2V0VHlwZSh0eXBlcy50b1N0
cmluZygpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNw
ZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9h
Z2VudHMvSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50LmgKaW5kZXggNTE5ODhmNjE3ZGUx
MWVmMTE3MDhhN2IzOTJjZjBjZTE5NGI0ODZlYS4uODA3Njc5N2NhYjYwOWI5MjM2NzkzZTIyODFh
NTg5YzRjZDE0NjI1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50
cy9JbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5oCkBAIC0zOSwy
NSArMzksMjMgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgRnJhbWU7CiBjbGFzcyBQYWdl
OwogCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQogY2xhc3MgSW5zcGVjdG9yQXBwbGlj
YXRpb25DYWNoZUFnZW50IGZpbmFsIDogcHVibGljIEluc3BlY3RvckFnZW50QmFzZSwgcHVibGlj
IEluc3BlY3Rvcjo6QXBwbGljYXRpb25DYWNoZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7CiAg
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50KTsK
ICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBJbnNwZWN0b3JBcHBs
aWNhdGlvbkNhY2hlQWdlbnQoUGFnZUFnZW50Q29udGV4dCYpOwotICAgIH5JbnNwZWN0b3JBcHBs
aWNhdGlvbkNhY2hlQWdlbnQoKSBvdmVycmlkZTsKKyAgICB+SW5zcGVjdG9yQXBwbGljYXRpb25D
YWNoZUFnZW50KCk7CiAKICAgICAvLyBJbnNwZWN0b3JBZ2VudEJhc2UKLSAgICB2b2lkIGRpZENy
ZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kUm91dGVyKiwgSW5zcGVj
dG9yOjpCYWNrZW5kRGlzcGF0Y2hlciopIG92ZXJyaWRlOwotICAgIHZvaWQgd2lsbERlc3Ryb3lG
cm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKSBvdmVycmlkZTsK
KyAgICB2b2lkIGRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5k
Um91dGVyKiwgSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlciopOworICAgIHZvaWQgd2lsbERl
c3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKTsKIAog
ICAgIC8vIEFwcGxpY2F0aW9uQ2FjaGVCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIKLSAgICB2b2lk
IGVuYWJsZShFcnJvclN0cmluZyYpIG92ZXJyaWRlOwotICAgIHZvaWQgZGlzYWJsZShFcnJvclN0
cmluZyYpIG92ZXJyaWRlOwotICAgIHZvaWQgZ2V0RnJhbWVzV2l0aE1hbmlmZXN0cyhFcnJvclN0
cmluZyYsIFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFwcGxpY2F0
aW9uQ2FjaGU6OkZyYW1lV2l0aE1hbmlmZXN0Pj4mIHJlc3VsdCkgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBnZXRNYW5pZmVzdEZvckZyYW1lKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBmcmFtZUlk
LCBTdHJpbmcqIG1hbmlmZXN0VVJMKSBvdmVycmlkZTsKLSAgICB2b2lkIGdldEFwcGxpY2F0aW9u
Q2FjaGVGb3JGcmFtZShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgZnJhbWVJZCwgUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkFwcGxpY2F0aW9uQ2FjaGU+
Jikgb3ZlcnJpZGU7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lk
PiBlbmFibGUoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+
IGRpc2FibGUoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxK
U09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkZyYW1l
V2l0aE1hbmlmZXN0Pj4+IGdldEZyYW1lc1dpdGhNYW5pZmVzdHMoKTsKKyAgICBJbnNwZWN0b3I6
OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFN0cmluZz4gZ2V0TWFuaWZlc3RGb3JGcmFtZShjb25z
dCBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpGcmFtZUlkJik7CisgICAgSW5zcGVjdG9y
OjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXBwbGlj
YXRpb25DYWNoZTo6QXBwbGljYXRpb25DYWNoZT4+IGdldEFwcGxpY2F0aW9uQ2FjaGVGb3JGcmFt
ZShjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpGcmFtZUlkJik7CiAKICAgICAv
LyBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24KICAgICB2b2lkIHVwZGF0ZUFwcGxpY2F0aW9uQ2Fj
aGVTdGF0dXMoRnJhbWUqKTsKQEAgLTY4LDcgKzY2LDcgQEAgcHJpdmF0ZToKICAgICBSZWY8SlNP
Tjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcHBsaWNhdGlvbkNhY2hlOjpBcHBsaWNh
dGlvbkNhY2hlUmVzb3VyY2U+PiBidWlsZEFycmF5Rm9yQXBwbGljYXRpb25DYWNoZVJlc291cmNl
cyhjb25zdCBWZWN0b3I8QXBwbGljYXRpb25DYWNoZUhvc3Q6OlJlc291cmNlSW5mbz4mKTsKICAg
ICBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXBwbGljYXRpb25DYWNoZTo6QXBwbGljYXRpb25D
YWNoZVJlc291cmNlPiBidWlsZE9iamVjdEZvckFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZShjb25z
dCBBcHBsaWNhdGlvbkNhY2hlSG9zdDo6UmVzb3VyY2VJbmZvJik7CiAKLSAgICBEb2N1bWVudExv
YWRlciogYXNzZXJ0RnJhbWVXaXRoRG9jdW1lbnRMb2FkZXIoRXJyb3JTdHJpbmcmLCBjb25zdCBT
dHJpbmcmIGZyYW1lSWQpOworICAgIERvY3VtZW50TG9hZGVyKiBhc3NlcnRGcmFtZVdpdGhEb2N1
bWVudExvYWRlcihJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZyYsIGNvbnN0IEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OkZyYW1lSWQmKTsKIAogICAgIHN0ZDo6dW5pcXVlX3B0
cjxJbnNwZWN0b3I6OkFwcGxpY2F0aW9uQ2FjaGVGcm9udGVuZERpc3BhdGNoZXI+IG1fZnJvbnRl
bmREaXNwYXRjaGVyOwogICAgIFJlZlB0cjxJbnNwZWN0b3I6OkFwcGxpY2F0aW9uQ2FjaGVCYWNr
ZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ1BVUHJvZmlsZXJBZ2VudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNQVVByb2ZpbGVyQWdlbnQu
Y3BwCmluZGV4IGEwZTZmYzQ1MzE1MTZkOTg5MzIxMTViYjRiOWNhMmIyYzIzMDU2OTMuLjgyODEx
YmU1MWNmNDYzYzQxMTgwYmRlODA0NTgyMmQ0N2ZlMWU1MjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ1BVUHJvZmlsZXJBZ2VudC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDUFVQcm9maWxlckFn
ZW50LmNwcApAQCAtNTMsMTYgKzUzLDE1IEBAIHZvaWQgSW5zcGVjdG9yQ1BVUHJvZmlsZXJBZ2Vu
dDo6ZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEZyb250ZW5kUm91dGVyKiwgQmFjCiAKIHZv
aWQgSW5zcGVjdG9yQ1BVUHJvZmlsZXJBZ2VudDo6d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tl
bmQoRGlzY29ubmVjdFJlYXNvbikKIHsKLSAgICBFcnJvclN0cmluZyBpZ25vcmVkOwotICAgIHN0
b3BUcmFja2luZyhpZ25vcmVkKTsKKyAgICBzdG9wVHJhY2tpbmcoKTsKIAogICAgIG1faW5zdHJ1
bWVudGluZ0FnZW50cy5zZXRQZXJzaXN0ZW50Q1BVUHJvZmlsZXJBZ2VudChudWxscHRyKTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JDUFVQcm9maWxlckFnZW50OjpzdGFydFRyYWNraW5nKEVycm9yU3Ry
aW5nJikKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckNQVVByb2ZpbGVy
QWdlbnQ6OnN0YXJ0VHJhY2tpbmcoKQogewogICAgIGlmIChtX3RyYWNraW5nKQotICAgICAgICBy
ZXR1cm47CisgICAgICAgIHJldHVybiB7IH07CiAKICAgICBSZXNvdXJjZVVzYWdlVGhyZWFkOjph
ZGRPYnNlcnZlcih0aGlzLCBDUFUsIFt0aGlzXSAoY29uc3QgUmVzb3VyY2VVc2FnZURhdGEmIGRh
dGEpIHsKICAgICAgICAgY29sbGVjdFNhbXBsZShkYXRhKTsKQEAgLTcxLDE4ICs3MCwyMiBAQCB2
b2lkIEluc3BlY3RvckNQVVByb2ZpbGVyQWdlbnQ6OnN0YXJ0VHJhY2tpbmcoRXJyb3JTdHJpbmcm
KQogICAgIG1fdHJhY2tpbmcgPSB0cnVlOwogCiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPnRy
YWNraW5nU3RhcnQobV9lbnZpcm9ubWVudC5leGVjdXRpb25TdG9wd2F0Y2goKS5lbGFwc2VkVGlt
ZSgpLnNlY29uZHMoKSk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckNQ
VVByb2ZpbGVyQWdlbnQ6OnN0b3BUcmFja2luZyhFcnJvclN0cmluZyYpCitQcm90b2NvbDo6RXJy
b3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JDUFVQcm9maWxlckFnZW50OjpzdG9wVHJhY2tpbmco
KQogewogICAgIGlmICghbV90cmFja2luZykKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1
cm4geyB9OwogCiAgICAgUmVzb3VyY2VVc2FnZVRocmVhZDo6cmVtb3ZlT2JzZXJ2ZXIodGhpcyk7
CiAKICAgICBtX3RyYWNraW5nID0gZmFsc2U7CiAKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+
dHJhY2tpbmdDb21wbGV0ZShtX2Vudmlyb25tZW50LmV4ZWN1dGlvblN0b3B3YXRjaCgpLmVsYXBz
ZWRUaW1lKCkuc2Vjb25kcygpKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKIHN0YXRpYyBSZWY8
UHJvdG9jb2w6OkNQVVByb2ZpbGVyOjpUaHJlYWRJbmZvPiBidWlsZFRocmVhZEluZm8oY29uc3Qg
VGhyZWFkQ1BVSW5mbyYgdGhyZWFkKQpAQCAtMTEzLDcgKzExNiw3IEBAIHZvaWQgSW5zcGVjdG9y
Q1BVUHJvZmlsZXJBZ2VudDo6Y29sbGVjdFNhbXBsZShjb25zdCBSZXNvdXJjZVVzYWdlRGF0YSYg
ZGF0YSkKICAgICAgICAgLnJlbGVhc2UoKTsKIAogICAgIGlmICghZGF0YS5jcHVUaHJlYWRzLmlz
RW1wdHkoKSkgewotICAgICAgICBSZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6Q1BVUHJv
ZmlsZXI6OlRocmVhZEluZm8+PiB0aHJlYWRzID0gSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6Q1BV
UHJvZmlsZXI6OlRocmVhZEluZm8+OjpjcmVhdGUoKTsKKyAgICAgICAgYXV0byB0aHJlYWRzID0g
SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6Q1BVUHJvZmlsZXI6OlRocmVhZEluZm8+OjpjcmVhdGUo
KTsKICAgICAgICAgZm9yIChhdXRvJiB0aHJlYWRJbmZvIDogZGF0YS5jcHVUaHJlYWRzKQogICAg
ICAgICAgICAgdGhyZWFkcy0+YWRkSXRlbShidWlsZFRocmVhZEluZm8odGhyZWFkSW5mbykpOwog
ICAgICAgICBldmVudC0+c2V0VGhyZWFkcyhXVEZNb3ZlKHRocmVhZHMpKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ1BVUHJvZmlsZXJBZ2Vu
dC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDUFVQcm9maWxl
ckFnZW50LmgKaW5kZXggNGVlOGU5Nzg1M2Q3MTJkM2RhNjQzOWI5ODk3ZTg2NWE4OTZkYmZmZi4u
ZmU1ZTE4NWFiZGIxYzRmMmYxM2I0ZDhhMDdhOTJiZmQ3OWU2OWQwYiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDUFVQcm9maWxlckFnZW50LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDUFVQcm9maWxl
ckFnZW50LmgKQEAgLTM0LDIyICszNCwyMCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXR5
cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCiBjbGFzcyBJbnNwZWN0b3JDUFVQcm9maWxlckFn
ZW50IGZpbmFsIDogcHVibGljIEluc3BlY3RvckFnZW50QmFzZSwgcHVibGljIEluc3BlY3Rvcjo6
Q1BVUHJvZmlsZXJCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewogICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKEluc3BlY3RvckNQVVByb2ZpbGVyQWdlbnQpOwogICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOwogcHVibGljOgogICAgIEluc3BlY3RvckNQVVByb2ZpbGVyQWdlbnQoUGFnZUFnZW50
Q29udGV4dCYpOwotICAgIH5JbnNwZWN0b3JDUFVQcm9maWxlckFnZW50KCkgb3ZlcnJpZGU7Cisg
ICAgfkluc3BlY3RvckNQVVByb2ZpbGVyQWdlbnQoKTsKIAogICAgIC8vIEluc3BlY3RvckFnZW50
QmFzZQotICAgIHZvaWQgZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJv
bnRlbmRSb3V0ZXIqLCBJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyKikgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCB3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5l
Y3RSZWFzb24pIG92ZXJyaWRlOworICAgIHZvaWQgZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5k
KEluc3BlY3Rvcjo6RnJvbnRlbmRSb3V0ZXIqLCBJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVy
Kik7CisgICAgdm9pZCB3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkRp
c2Nvbm5lY3RSZWFzb24pOwogCiAgICAgLy8gQ1BVUHJvZmlsZXJCYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXIKLSAgICB2b2lkIHN0YXJ0VHJhY2tpbmcoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKLSAg
ICB2b2lkIHN0b3BUcmFja2luZyhFcnJvclN0cmluZyYpIG92ZXJyaWRlOworICAgIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc3RhcnRUcmFja2luZygpOworICAgIElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc3RvcFRyYWNraW5nKCk7CiAK
IHByaXZhdGU6CiAgICAgdm9pZCBjb2xsZWN0U2FtcGxlKGNvbnN0IFJlc291cmNlVXNhZ2VEYXRh
Jik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rv
ckNTU0FnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9y
Q1NTQWdlbnQuY3BwCmluZGV4IDU2NWViZTA4MmMwNzhiYjY2ODc3NDAzODllYjM3MmVlMTE5Yjc0
MWIuLjU5NGM4NDVjMThhMzI1ZDUwZDllNWUwMzgyMTA5ZjkyMmIzYmNkMjEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ1NTQWdlbnQuY3Bw
CkBAIC05MiwxMCArOTIsNyBAQCBzdGF0aWMgdW5zaWduZWQgY29tcHV0ZVBzZXVkb0NsYXNzTWFz
ayhjb25zdCBKU09OOjpBcnJheSYgcHNldWRvQ2xhc3NBcnJheSkKIAogICAgIHVuc2lnbmVkIHJl
c3VsdCA9IFBzZXVkb0NsYXNzTm9uZTsKICAgICBmb3IgKGF1dG8mIHBzZXVkb0NsYXNzVmFsdWUg
OiBwc2V1ZG9DbGFzc0FycmF5KSB7Ci0gICAgICAgIFN0cmluZyBwc2V1ZG9DbGFzczsKLSAgICAg
ICAgYm9vbCBzdWNjZXNzID0gcHNldWRvQ2xhc3NWYWx1ZS0+YXNTdHJpbmcocHNldWRvQ2xhc3Mp
OwotICAgICAgICBpZiAoIXN1Y2Nlc3MpCi0gICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
YXV0byBwc2V1ZG9DbGFzcyA9IHBzZXVkb0NsYXNzVmFsdWUtPmFzU3RyaW5nKCk7CiAgICAgICAg
IGlmIChwc2V1ZG9DbGFzcyA9PSBhY3RpdmUpCiAgICAgICAgICAgICByZXN1bHQgfD0gUHNldWRv
Q2xhc3NBY3RpdmU7CiAgICAgICAgIGVsc2UgaWYgKHBzZXVkb0NsYXNzID09IGhvdmVyKQpAQCAt
MzEyLDggKzMwOSw3IEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmRpZENyZWF0ZUZyb250ZW5k
QW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kUm91dGVyKiwKIAogdm9pZCBJbnNwZWN0b3JD
U1NBZ2VudDo6d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25u
ZWN0UmVhc29uKQogewotICAgIFN0cmluZyB1bnVzZWQ7Ci0gICAgZGlzYWJsZSh1bnVzZWQpOwor
ICAgIGRpc2FibGUoKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6cmVzZXQoKQpAQCAt
MzI3LDEwICszMjMsMTAgQEAgdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6cmVzZXQoKQogICAgIHJl
c2V0UHNldWRvU3RhdGVzKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmVuYWJsZShF
cnJvclN0cmluZyYpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JDU1NB
Z2VudDo6ZW5hYmxlKCkKIHsKICAgICBpZiAobV9pbnN0cnVtZW50aW5nQWdlbnRzLmVuYWJsZWRD
U1NBZ2VudCgpID09IHRoaXMpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHsgfTsK
IAogICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy5zZXRFbmFibGVkQ1NTQWdlbnQodGhpcyk7CiAK
QEAgLTMzOCwxMyArMzM0LDE3IEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmVuYWJsZShFcnJv
clN0cmluZyYpCiAgICAgICAgIGZvciAoYXV0byogZG9jdW1lbnQgOiBkb21BZ2VudC0+ZG9jdW1l
bnRzKCkpCiAgICAgICAgICAgICBhY3RpdmVTdHlsZVNoZWV0c1VwZGF0ZWQoKmRvY3VtZW50KTsK
ICAgICB9CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckNTU0FnZW50Ojpk
aXNhYmxlKEVycm9yU3RyaW5nJikKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3Bl
Y3RvckNTU0FnZW50OjpkaXNhYmxlKCkKIHsKICAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMuc2V0
RW5hYmxlZENTU0FnZW50KG51bGxwdHIpOwogCiAgICAgcmVzZXQoKTsKKworICAgIHJldHVybiB7
IH07CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmRvY3VtZW50RGV0YWNoZWQoRG9jdW1l
bnQmIGRvY3VtZW50KQpAQCAtMzg3LDcgKzM4Nyw3IEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6
OnNldEFjdGl2ZVN0eWxlU2hlZXRzRm9yRG9jdW1lbnQoRG9jdW1lbnQmIGRvY3VtZW50LCBWZWN0
CiAgICAgICAgIHByZXZpb3VzbHlLbm93bkFjdGl2ZVN0eWxlU2hlZXRzLnJlbW92ZShjc3NTdHls
ZVNoZWV0KTsKICAgICAgICAgUmVmUHRyPEluc3BlY3RvclN0eWxlU2hlZXQ+IGluc3BlY3RvclN0
eWxlU2hlZXQgPSBtX2Nzc1N0eWxlU2hlZXRUb0luc3BlY3RvclN0eWxlU2hlZXQuZ2V0KGNzc1N0
eWxlU2hlZXQpOwogICAgICAgICBpZiAobV9pZFRvSW5zcGVjdG9yU3R5bGVTaGVldC5jb250YWlu
cyhpbnNwZWN0b3JTdHlsZVNoZWV0LT5pZCgpKSkgewotICAgICAgICAgICAgU3RyaW5nIGlkID0g
dW5iaW5kU3R5bGVTaGVldChpbnNwZWN0b3JTdHlsZVNoZWV0LmdldCgpKTsKKyAgICAgICAgICAg
IGF1dG8gaWQgPSB1bmJpbmRTdHlsZVNoZWV0KGluc3BlY3RvclN0eWxlU2hlZXQuZ2V0KCkpOwog
ICAgICAgICAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPnN0eWxlU2hlZXRSZW1vdmVkKGlkKTsK
ICAgICAgICAgfQogICAgIH0KQEAgLTM5Niw3ICszOTYsOCBAQCB2b2lkIEluc3BlY3RvckNTU0Fn
ZW50OjpzZXRBY3RpdmVTdHlsZVNoZWV0c0ZvckRvY3VtZW50KERvY3VtZW50JiBkb2N1bWVudCwg
VmVjdAogICAgICAgICBwcmV2aW91c2x5S25vd25BY3RpdmVTdHlsZVNoZWV0cy5hZGQoY3NzU3R5
bGVTaGVldCk7CiAgICAgICAgIGlmICghbV9jc3NTdHlsZVNoZWV0VG9JbnNwZWN0b3JTdHlsZVNo
ZWV0LmNvbnRhaW5zKGNzc1N0eWxlU2hlZXQpKSB7CiAgICAgICAgICAgICBJbnNwZWN0b3JTdHls
ZVNoZWV0KiBpbnNwZWN0b3JTdHlsZVNoZWV0ID0gYmluZFN0eWxlU2hlZXQoY3NzU3R5bGVTaGVl
dCk7Ci0gICAgICAgICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+c3R5bGVTaGVldEFkZGVkKGlu
c3BlY3RvclN0eWxlU2hlZXQtPmJ1aWxkT2JqZWN0Rm9yU3R5bGVTaGVldEluZm8oKSk7CisgICAg
ICAgICAgICBpZiAoYXV0byBoZWFkZXIgPSBpbnNwZWN0b3JTdHlsZVNoZWV0LT5idWlsZE9iamVj
dEZvclN0eWxlU2hlZXRJbmZvKCkpCisgICAgICAgICAgICAgICAgbV9mcm9udGVuZERpc3BhdGNo
ZXItPnN0eWxlU2hlZXRBZGRlZChoZWFkZXIucmVsZWFzZU5vbk51bGwoKSk7CiAgICAgICAgIH0K
ICAgICB9CiB9CkBAIC00MTAsNyArNDExLDcgQEAgYm9vbCBJbnNwZWN0b3JDU1NBZ2VudDo6Zm9y
Y2VQc2V1ZG9TdGF0ZShjb25zdCBFbGVtZW50JiBlbGVtZW50LCBDU1NTZWxlY3Rvcjo6UHMKICAg
ICBpZiAoIWRvbUFnZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpbnQgbm9kZUlk
ID0gZG9tQWdlbnQtPmJvdW5kTm9kZUlkKCZlbGVtZW50KTsKKyAgICBhdXRvIG5vZGVJZCA9IGRv
bUFnZW50LT5ib3VuZE5vZGVJZCgmZWxlbWVudCk7CiAgICAgaWYgKCFub2RlSWQpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIApAQCAtNDI5LDM3ICs0MzAsMzcgQEAgYm9vbCBJbnNwZWN0b3JDU1NB
Z2VudDo6Zm9yY2VQc2V1ZG9TdGF0ZShjb25zdCBFbGVtZW50JiBlbGVtZW50LCBDU1NTZWxlY3Rv
cjo6UHMKICAgICB9CiB9CiAKLXN0YXRpYyBPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpD
U1M6OlBzZXVkb0lkPiBwcm90b2NvbFZhbHVlRm9yUHNldWRvSWQoUHNldWRvSWQgcHNldWRvSWQp
CitzdGF0aWMgT3B0aW9uYWw8UHJvdG9jb2w6OkNTUzo6UHNldWRvSWQ+IHByb3RvY29sVmFsdWVG
b3JQc2V1ZG9JZChQc2V1ZG9JZCBwc2V1ZG9JZCkKIHsKICAgICBzd2l0Y2ggKHBzZXVkb0lkKSB7
CiAgICAgY2FzZSBQc2V1ZG9JZDo6Rmlyc3RMaW5lOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9y
OjpQcm90b2NvbDo6Q1NTOjpQc2V1ZG9JZDo6Rmlyc3RMaW5lOworICAgICAgICByZXR1cm4gUHJv
dG9jb2w6OkNTUzo6UHNldWRvSWQ6OkZpcnN0TGluZTsKICAgICBjYXNlIFBzZXVkb0lkOjpGaXJz
dExldHRlcjoKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6UHNldWRv
SWQ6OkZpcnN0TGV0dGVyOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OkNTUzo6UHNldWRvSWQ6
OkZpcnN0TGV0dGVyOwogICAgIGNhc2UgUHNldWRvSWQ6Ok1hcmtlcjoKLSAgICAgICAgcmV0dXJu
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6UHNldWRvSWQ6Ok1hcmtlcjsKKyAgICAgICAgcmV0
dXJuIFByb3RvY29sOjpDU1M6OlBzZXVkb0lkOjpNYXJrZXI7CiAgICAgY2FzZSBQc2V1ZG9JZDo6
QmVmb3JlOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpQc2V1ZG9J
ZDo6QmVmb3JlOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OkNTUzo6UHNldWRvSWQ6OkJlZm9y
ZTsKICAgICBjYXNlIFBzZXVkb0lkOjpBZnRlcjoKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkNTUzo6UHNldWRvSWQ6OkFmdGVyOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6
OkNTUzo6UHNldWRvSWQ6OkFmdGVyOwogICAgIGNhc2UgUHNldWRvSWQ6OlNlbGVjdGlvbjoKLSAg
ICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6UHNldWRvSWQ6OlNlbGVjdGlv
bjsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpDU1M6OlBzZXVkb0lkOjpTZWxlY3Rpb247CiAg
ICAgY2FzZSBQc2V1ZG9JZDo6SGlnaGxpZ2h0OgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQ
cm90b2NvbDo6Q1NTOjpQc2V1ZG9JZDo6SGlnaGxpZ2h0OworICAgICAgICByZXR1cm4gUHJvdG9j
b2w6OkNTUzo6UHNldWRvSWQ6OkhpZ2hsaWdodDsKICAgICBjYXNlIFBzZXVkb0lkOjpTY3JvbGxi
YXI6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlBzZXVkb0lkOjpT
Y3JvbGxiYXI7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6Q1NTOjpQc2V1ZG9JZDo6U2Nyb2xs
YmFyOwogICAgIGNhc2UgUHNldWRvSWQ6OlNjcm9sbGJhclRodW1iOgotICAgICAgICByZXR1cm4g
SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpQc2V1ZG9JZDo6U2Nyb2xsYmFyVGh1bWI7CisgICAg
ICAgIHJldHVybiBQcm90b2NvbDo6Q1NTOjpQc2V1ZG9JZDo6U2Nyb2xsYmFyVGh1bWI7CiAgICAg
Y2FzZSBQc2V1ZG9JZDo6U2Nyb2xsYmFyQnV0dG9uOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9y
OjpQcm90b2NvbDo6Q1NTOjpQc2V1ZG9JZDo6U2Nyb2xsYmFyQnV0dG9uOworICAgICAgICByZXR1
cm4gUHJvdG9jb2w6OkNTUzo6UHNldWRvSWQ6OlNjcm9sbGJhckJ1dHRvbjsKICAgICBjYXNlIFBz
ZXVkb0lkOjpTY3JvbGxiYXJUcmFjazoKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkNTUzo6UHNldWRvSWQ6OlNjcm9sbGJhclRyYWNrOworICAgICAgICByZXR1cm4gUHJvdG9j
b2w6OkNTUzo6UHNldWRvSWQ6OlNjcm9sbGJhclRyYWNrOwogICAgIGNhc2UgUHNldWRvSWQ6OlNj
cm9sbGJhclRyYWNrUGllY2U6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpD
U1M6OlBzZXVkb0lkOjpTY3JvbGxiYXJUcmFja1BpZWNlOworICAgICAgICByZXR1cm4gUHJvdG9j
b2w6OkNTUzo6UHNldWRvSWQ6OlNjcm9sbGJhclRyYWNrUGllY2U7CiAgICAgY2FzZSBQc2V1ZG9J
ZDo6U2Nyb2xsYmFyQ29ybmVyOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6
Q1NTOjpQc2V1ZG9JZDo6U2Nyb2xsYmFyQ29ybmVyOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6
OkNTUzo6UHNldWRvSWQ6OlNjcm9sbGJhckNvcm5lcjsKICAgICBjYXNlIFBzZXVkb0lkOjpSZXNp
emVyOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpQc2V1ZG9JZDo6
UmVzaXplcjsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpDU1M6OlBzZXVkb0lkOjpSZXNpemVy
OwogCiAgICAgZGVmYXVsdDoKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC00Njcs
MzYgKzQ2OCwzNyBAQCBzdGF0aWMgT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpQ
c2V1ZG9JZD4gcHJvdG9jb2xWYWx1ZUZvclBzZXVkb0lkKFBzZQogICAgIH0KIH0KIAotdm9pZCBJ
bnNwZWN0b3JDU1NBZ2VudDo6Z2V0TWF0Y2hlZFN0eWxlc0Zvck5vZGUoRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBpbnQgbm9kZUlkLCBjb25zdCBib29sKiBpbmNsdWRlUHNldWRvLCBjb25zdCBi
b29sKiBpbmNsdWRlSW5oZXJpdGVkLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpDU1M6OlJ1bGVNYXRjaD4+JiBtYXRjaGVkQ1NTUnVsZXMsIFJlZlB0cjxKU09OOjpB
cnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6UHNldWRvSWRNYXRjaGVzPj4mIHBzZXVk
b0lkTWF0Y2hlcywgUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NT
OjpJbmhlcml0ZWRTdHlsZUVudHJ5Pj4mIGluaGVyaXRlZEVudHJpZXMpCitQcm90b2NvbDo6RXJy
b3JTdHJpbmdPcjxzdGQ6OnR1cGxlPFJlZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpDU1M6
OlJ1bGVNYXRjaD4+LCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6Q1NTOjpQc2V1ZG9J
ZE1hdGNoZXM+PiwgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkNTUzo6SW5oZXJpdGVk
U3R5bGVFbnRyeT4+Pj4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldE1hdGNoZWRTdHlsZXNGb3JOb2Rl
KFByb3RvY29sOjpET006Ok5vZGVJZCBub2RlSWQsIE9wdGlvbmFsPGJvb2w+JiYgaW5jbHVkZVBz
ZXVkbywgT3B0aW9uYWw8Ym9vbD4mJiBpbmNsdWRlSW5oZXJpdGVkKQogeworICAgIFByb3RvY29s
OjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBlbGVt
ZW50Rm9ySWQoZXJyb3JTdHJpbmcsIG5vZGVJZCk7CiAgICAgaWYgKCFlbGVtZW50KQotICAgICAg
ICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAK
ICAgICBFbGVtZW50KiBvcmlnaW5hbEVsZW1lbnQgPSBlbGVtZW50OwogICAgIFBzZXVkb0lkIGVs
ZW1lbnRQc2V1ZG9JZCA9IGVsZW1lbnQtPnBzZXVkb0lkKCk7CiAgICAgaWYgKGVsZW1lbnRQc2V1
ZG9JZCAhPSBQc2V1ZG9JZDo6Tm9uZSkgewogICAgICAgICBlbGVtZW50ID0gZG93bmNhc3Q8UHNl
dWRvRWxlbWVudD4oKmVsZW1lbnQpLmhvc3RFbGVtZW50KCk7Ci0gICAgICAgIGlmICghZWxlbWVu
dCkgewotICAgICAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWlzc2luZyBwYXJlbnQgb2YgcHNldWRv
LWVsZW1lbnQgbm9kZSBmb3IgZ2l2ZW4gbm9kZUlkIl9zOwotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB9CisgICAgICAgIGlmICghZWxlbWVudCkKKyAgICAgICAgICAgIHJldHVybiBtYWtl
VW5leHBlY3RlZCgiTWlzc2luZyBwYXJlbnQgb2YgcHNldWRvLWVsZW1lbnQgbm9kZSBmb3IgZ2l2
ZW4gbm9kZUlkIl9zKTsKICAgICB9CiAKICAgICAvLyBNYXRjaGVkIHJ1bGVzLgogICAgIGF1dG8m
IHN0eWxlUmVzb2x2ZXIgPSBlbGVtZW50LT5zdHlsZVJlc29sdmVyKCk7CiAgICAgYXV0byBtYXRj
aGVkUnVsZXMgPSBzdHlsZVJlc29sdmVyLnBzZXVkb1N0eWxlUnVsZXNGb3JFbGVtZW50KGVsZW1l
bnQsIGVsZW1lbnRQc2V1ZG9JZCwgU3R5bGU6OlJlc29sdmVyOjpBbGxDU1NSdWxlcyk7Ci0gICAg
bWF0Y2hlZENTU1J1bGVzID0gYnVpbGRBcnJheUZvck1hdGNoZWRSdWxlTGlzdChtYXRjaGVkUnVs
ZXMsIHN0eWxlUmVzb2x2ZXIsICplbGVtZW50LCBlbGVtZW50UHNldWRvSWQpOworICAgIGF1dG8g
bWF0Y2hlZENTU1J1bGVzID0gYnVpbGRBcnJheUZvck1hdGNoZWRSdWxlTGlzdChtYXRjaGVkUnVs
ZXMsIHN0eWxlUmVzb2x2ZXIsICplbGVtZW50LCBlbGVtZW50UHNldWRvSWQpOworICAgIFJlZlB0
cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpDU1M6OlBzZXVkb0lkTWF0Y2hlcz4+IHBzZXVkb0Vs
ZW1lbnRzOworICAgIFJlZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpDU1M6OkluaGVyaXRl
ZFN0eWxlRW50cnk+PiBpbmhlcml0ZWQ7CiAKICAgICBpZiAoIW9yaWdpbmFsRWxlbWVudC0+aXNQ
c2V1ZG9FbGVtZW50KCkpIHsKLSAgICAgICAgLy8gUHNldWRvIGVsZW1lbnRzLgogICAgICAgICBp
ZiAoIWluY2x1ZGVQc2V1ZG8gfHwgKmluY2x1ZGVQc2V1ZG8pIHsKLSAgICAgICAgICAgIGF1dG8g
cHNldWRvRWxlbWVudHMgPSBKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6
UHNldWRvSWRNYXRjaGVzPjo6Y3JlYXRlKCk7CisgICAgICAgICAgICBwc2V1ZG9FbGVtZW50cyA9
IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkNTUzo6UHNldWRvSWRNYXRjaGVzPjo6Y3JlYXRlKCk7
CiAgICAgICAgICAgICBmb3IgKFBzZXVkb0lkIHBzZXVkb0lkID0gUHNldWRvSWQ6OkZpcnN0UHVi
bGljUHNldWRvSWQ7IHBzZXVkb0lkIDwgUHNldWRvSWQ6OkFmdGVyTGFzdEludGVybmFsUHNldWRv
SWQ7IHBzZXVkb0lkID0gc3RhdGljX2Nhc3Q8UHNldWRvSWQ+KHN0YXRpY19jYXN0PHVuc2lnbmVk
Pihwc2V1ZG9JZCkgKyAxKSkgewogICAgICAgICAgICAgICAgIGlmIChhdXRvIHByb3RvY29sUHNl
dWRvSWQgPSBwcm90b2NvbFZhbHVlRm9yUHNldWRvSWQocHNldWRvSWQpKSB7CiAgICAgICAgICAg
ICAgICAgICAgIGF1dG8gbWF0Y2hlZFJ1bGVzID0gc3R5bGVSZXNvbHZlci5wc2V1ZG9TdHlsZVJ1
bGVzRm9yRWxlbWVudChlbGVtZW50LCBwc2V1ZG9JZCwgU3R5bGU6OlJlc29sdmVyOjpBbGxDU1NS
dWxlcyk7CiAgICAgICAgICAgICAgICAgICAgIGlmICghbWF0Y2hlZFJ1bGVzLmlzRW1wdHkoKSkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBtYXRjaGVzID0gSW5zcGVjdG9yOjpQcm90
b2NvbDo6Q1NTOjpQc2V1ZG9JZE1hdGNoZXM6OmNyZWF0ZSgpCisgICAgICAgICAgICAgICAgICAg
ICAgICBhdXRvIG1hdGNoZXMgPSBQcm90b2NvbDo6Q1NTOjpQc2V1ZG9JZE1hdGNoZXM6OmNyZWF0
ZSgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNldFBzZXVkb0lkKHByb3RvY29sUHNl
dWRvSWQudmFsdWUoKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0TWF0Y2hlcyhi
dWlsZEFycmF5Rm9yTWF0Y2hlZFJ1bGVMaXN0KG1hdGNoZWRSdWxlcywgc3R5bGVSZXNvbHZlciwg
KmVsZW1lbnQsIHBzZXVkb0lkKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVsZWFz
ZSgpOwpAQCAtNTA0LDY2ICs1MDYsNjYgQEAgdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0TWF0
Y2hlZFN0eWxlc0Zvck5vZGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgbm8KICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgcHNldWRvSWRNYXRjaGVzID0gV1RGTW92ZShwc2V1ZG9FbGVtZW50cyk7CiAgICAg
ICAgIH0KIAotICAgICAgICAvLyBJbmhlcml0ZWQgc3R5bGVzLgogICAgICAgICBpZiAoIWluY2x1
ZGVJbmhlcml0ZWQgfHwgKmluY2x1ZGVJbmhlcml0ZWQpIHsKLSAgICAgICAgICAgIGF1dG8gZW50
cmllcyA9IEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpJbmhlcml0ZWRT
dHlsZUVudHJ5Pjo6Y3JlYXRlKCk7CisgICAgICAgICAgICBpbmhlcml0ZWQgPSBKU09OOjpBcnJh
eU9mPFByb3RvY29sOjpDU1M6OkluaGVyaXRlZFN0eWxlRW50cnk+OjpjcmVhdGUoKTsKICAgICAg
ICAgICAgIGZvciAoYXV0byYgYW5jZXN0b3IgOiBhbmNlc3RvcnNPZlR5cGU8RWxlbWVudD4oKmVs
ZW1lbnQpKSB7CiAgICAgICAgICAgICAgICAgYXV0byYgcGFyZW50U3R5bGVSZXNvbHZlciA9IGFu
Y2VzdG9yLnN0eWxlUmVzb2x2ZXIoKTsKICAgICAgICAgICAgICAgICBhdXRvIHBhcmVudE1hdGNo
ZWRSdWxlcyA9IHBhcmVudFN0eWxlUmVzb2x2ZXIuc3R5bGVSdWxlc0ZvckVsZW1lbnQoJmFuY2Vz
dG9yLCBTdHlsZTo6UmVzb2x2ZXI6OkFsbENTU1J1bGVzKTsKLSAgICAgICAgICAgICAgICBhdXRv
IGVudHJ5ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpJbmhlcml0ZWRTdHlsZUVudHJ5Ojpj
cmVhdGUoKQorICAgICAgICAgICAgICAgIGF1dG8gZW50cnkgPSBQcm90b2NvbDo6Q1NTOjpJbmhl
cml0ZWRTdHlsZUVudHJ5OjpjcmVhdGUoKQogICAgICAgICAgICAgICAgICAgICAuc2V0TWF0Y2hl
ZENTU1J1bGVzKGJ1aWxkQXJyYXlGb3JNYXRjaGVkUnVsZUxpc3QocGFyZW50TWF0Y2hlZFJ1bGVz
LCBzdHlsZVJlc29sdmVyLCBhbmNlc3RvciwgUHNldWRvSWQ6Ok5vbmUpKQogICAgICAgICAgICAg
ICAgICAgICAucmVsZWFzZSgpOwogICAgICAgICAgICAgICAgIGlmIChpczxTdHlsZWRFbGVtZW50
PihhbmNlc3RvcikgJiYgZG93bmNhc3Q8U3R5bGVkRWxlbWVudD4oYW5jZXN0b3IpLmNzc29tU3R5
bGUoKS5sZW5ndGgoKSkgewogICAgICAgICAgICAgICAgICAgICBhdXRvJiBzdHlsZVNoZWV0ID0g
YXNJbnNwZWN0b3JTdHlsZVNoZWV0KGRvd25jYXN0PFN0eWxlZEVsZW1lbnQ+KGFuY2VzdG9yKSk7
CiAgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5zZXRJbmxpbmVTdHlsZShzdHlsZVNoZWV0LmJ1
aWxkT2JqZWN0Rm9yU3R5bGUoc3R5bGVTaGVldC5zdHlsZUZvcklkKEluc3BlY3RvckNTU0lkKHN0
eWxlU2hlZXQuaWQoKSwgMCkpKSk7CiAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgZW50cmllcy0+YWRkSXRlbShXVEZNb3ZlKGVudHJ5KSk7CisgICAgICAgICAgICAgICAgaW5o
ZXJpdGVkLT5hZGRJdGVtKFdURk1vdmUoZW50cnkpKTsKICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgaW5oZXJpdGVkRW50cmllcyA9IFdURk1vdmUoZW50cmllcyk7CiAgICAgICAgIH0KICAg
ICB9CisKKyAgICByZXR1cm4geyB7IFdURk1vdmUobWF0Y2hlZENTU1J1bGVzKSwgV1RGTW92ZShw
c2V1ZG9FbGVtZW50cyksIFdURk1vdmUoaW5oZXJpdGVkKSB9IH07CiB9CiAKLXZvaWQgSW5zcGVj
dG9yQ1NTQWdlbnQ6OmdldElubGluZVN0eWxlc0Zvck5vZGUoRXJyb3JTdHJpbmcmIGVycm9yU3Ry
aW5nLCBpbnQgbm9kZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHls
ZT4mIGlubGluZVN0eWxlLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHls
ZT4mIGF0dHJpYnV0ZXNTdHlsZSkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHN0ZDo6dHVwbGU8
UmVmUHRyPFByb3RvY29sOjpDU1M6OkNTU1N0eWxlPiAvKiBpbmxpbmVTdHlsZSAqLywgUmVmUHRy
PFByb3RvY29sOjpDU1M6OkNTU1N0eWxlPiAvKiBhdHRyaWJ1dGVzU3R5bGUgKi8+PiBJbnNwZWN0
b3JDU1NBZ2VudDo6Z2V0SW5saW5lU3R5bGVzRm9yTm9kZShQcm90b2NvbDo6RE9NOjpOb2RlSWQg
bm9kZUlkKQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAg
IGF1dG8qIGVsZW1lbnQgPSBlbGVtZW50Rm9ySWQoZXJyb3JTdHJpbmcsIG5vZGVJZCk7CiAgICAg
aWYgKCFpczxTdHlsZWRFbGVtZW50PihlbGVtZW50KSkKLSAgICAgICAgcmV0dXJuOworICAgICAg
ICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCiAgICAgYXV0byYgc3R5bGVk
RWxlbWVudCA9IGRvd25jYXN0PFN0eWxlZEVsZW1lbnQ+KCplbGVtZW50KTsKICAgICBhdXRvJiBz
dHlsZVNoZWV0ID0gYXNJbnNwZWN0b3JTdHlsZVNoZWV0KHN0eWxlZEVsZW1lbnQpOwotICAgIGlu
bGluZVN0eWxlID0gc3R5bGVTaGVldC5idWlsZE9iamVjdEZvclN0eWxlKCZzdHlsZWRFbGVtZW50
LmNzc29tU3R5bGUoKSk7Ci0gICAgaWYgKGF1dG8gYXR0cmlidXRlcyA9IGJ1aWxkT2JqZWN0Rm9y
QXR0cmlidXRlc1N0eWxlKHN0eWxlZEVsZW1lbnQpKQotICAgICAgICBhdHRyaWJ1dGVzU3R5bGUg
PSBXVEZNb3ZlKGF0dHJpYnV0ZXMpOwotICAgIGVsc2UKLSAgICAgICAgYXR0cmlidXRlc1N0eWxl
ID0gbnVsbHB0cjsKKyAgICByZXR1cm4geyB7IHN0eWxlU2hlZXQuYnVpbGRPYmplY3RGb3JTdHls
ZSgmc3R5bGVkRWxlbWVudC5jc3NvbVN0eWxlKCkpLCBidWlsZE9iamVjdEZvckF0dHJpYnV0ZXNT
dHlsZShzdHlsZWRFbGVtZW50KSB9IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6Omdl
dENvbXB1dGVkU3R5bGVGb3JOb2RlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJ
ZCwgUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NDb21w
dXRlZFN0eWxlUHJvcGVydHk+PiYgc3R5bGUpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8
SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6Q1NTOjpDU1NDb21wdXRlZFN0eWxlUHJvcGVydHk+Pj4g
SW5zcGVjdG9yQ1NTQWdlbnQ6OmdldENvbXB1dGVkU3R5bGVGb3JOb2RlKFByb3RvY29sOjpET006
Ok5vZGVJZCBub2RlSWQpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5n
OworCiAgICAgYXV0byogZWxlbWVudCA9IGVsZW1lbnRGb3JJZChlcnJvclN0cmluZywgbm9kZUlk
KTsKICAgICBpZiAoIWVsZW1lbnQpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1h
a2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgIGF1dG8gY29tcHV0ZWRTdHlsZUluZm8g
PSBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb246OmNyZWF0ZSgqZWxlbWVudCwgdHJ1ZSk7CiAg
ICAgYXV0byBpbnNwZWN0b3JTdHlsZSA9IEluc3BlY3RvclN0eWxlOjpjcmVhdGUoSW5zcGVjdG9y
Q1NTSWQoKSwgV1RGTW92ZShjb21wdXRlZFN0eWxlSW5mbyksIG51bGxwdHIpOwotICAgIHN0eWxl
ID0gaW5zcGVjdG9yU3R5bGUtPmJ1aWxkQXJyYXlGb3JDb21wdXRlZFN0eWxlKCk7CisgICAgcmV0
dXJuIGluc3BlY3RvclN0eWxlLT5idWlsZEFycmF5Rm9yQ29tcHV0ZWRTdHlsZSgpOwogfQogCi12
b2lkIEluc3BlY3RvckNTU0FnZW50OjpnZXRBbGxTdHlsZVNoZWV0cyhFcnJvclN0cmluZyYsIFJl
ZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGVTaGVl
dEhlYWRlcj4+JiBzdHlsZUluZm9zKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEpTT046
OkFycmF5T2Y8UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGVTaGVldEhlYWRlcj4+PiBJbnNwZWN0b3JD
U1NBZ2VudDo6Z2V0QWxsU3R5bGVTaGVldHMoKQogewotICAgIHN0eWxlSW5mb3MgPSBKU09OOjpB
cnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGVTaGVldEhlYWRlcj46OmNy
ZWF0ZSgpOworICAgIGF1dG8gaGVhZGVycyA9IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkNTUzo6
Q1NTU3R5bGVTaGVldEhlYWRlcj46OmNyZWF0ZSgpOwogCiAgICAgVmVjdG9yPEluc3BlY3RvclN0
eWxlU2hlZXQqPiBpbnNwZWN0b3JTdHlsZVNoZWV0czsKICAgICBjb2xsZWN0QWxsU3R5bGVTaGVl
dHMoaW5zcGVjdG9yU3R5bGVTaGVldHMpOwotICAgIGZvciAoYXV0byogaW5zcGVjdG9yU3R5bGVT
aGVldCA6IGluc3BlY3RvclN0eWxlU2hlZXRzKQotICAgICAgICBzdHlsZUluZm9zLT5hZGRJdGVt
KGluc3BlY3RvclN0eWxlU2hlZXQtPmJ1aWxkT2JqZWN0Rm9yU3R5bGVTaGVldEluZm8oKSk7Cisg
ICAgZm9yIChhdXRvKiBpbnNwZWN0b3JTdHlsZVNoZWV0IDogaW5zcGVjdG9yU3R5bGVTaGVldHMp
IHsKKyAgICAgICAgaWYgKGF1dG8gaGVhZGVyID0gaW5zcGVjdG9yU3R5bGVTaGVldC0+YnVpbGRP
YmplY3RGb3JTdHlsZVNoZWV0SW5mbygpKQorICAgICAgICAgICAgaGVhZGVycy0+YWRkSXRlbSho
ZWFkZXIucmVsZWFzZU5vbk51bGwoKSk7CisgICAgfQorCisgICAgcmV0dXJuIFdURk1vdmUoaGVh
ZGVycyk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmNvbGxlY3RBbGxTdHlsZVNoZWV0
cyhWZWN0b3I8SW5zcGVjdG9yU3R5bGVTaGVldCo+JiByZXN1bHQpCkBAIC01OTgsMTE2ICs2MDAs
MTI0IEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmNvbGxlY3RTdHlsZVNoZWV0cyhDU1NTdHls
ZVNoZWV0KiBzdHlsZVNoZWV0LCBWZWN0b3I8Q1NTCiAgICAgfQogfQogCi12b2lkIEluc3BlY3Rv
ckNTU0FnZW50OjpnZXRTdHlsZVNoZWV0KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3Qg
U3RyaW5nJiBzdHlsZVNoZWV0SWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNT
U1N0eWxlU2hlZXRCb2R5PiYgc3R5bGVTaGVldE9iamVjdCkKK1Byb3RvY29sOjpFcnJvclN0cmlu
Z09yPFJlZjxQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZVNoZWV0Qm9keT4+IEluc3BlY3RvckNTU0Fn
ZW50OjpnZXRTdHlsZVNoZWV0KGNvbnN0IFByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRJZCYgc3R5
bGVTaGVldElkKQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwog
ICAgIEluc3BlY3RvclN0eWxlU2hlZXQqIGluc3BlY3RvclN0eWxlU2hlZXQgPSBhc3NlcnRTdHls
ZVNoZWV0Rm9ySWQoZXJyb3JTdHJpbmcsIHN0eWxlU2hlZXRJZCk7CiAgICAgaWYgKCFpbnNwZWN0
b3JTdHlsZVNoZWV0KQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBl
Y3RlZChlcnJvclN0cmluZyk7CiAKLSAgICBzdHlsZVNoZWV0T2JqZWN0ID0gaW5zcGVjdG9yU3R5
bGVTaGVldC0+YnVpbGRPYmplY3RGb3JTdHlsZVNoZWV0KCk7CisgICAgYXV0byBzdHlsZVNoZWV0
ID0gaW5zcGVjdG9yU3R5bGVTaGVldC0+YnVpbGRPYmplY3RGb3JTdHlsZVNoZWV0KCk7CisgICAg
aWYgKCFzdHlsZVNoZWV0KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkludGVybmFs
IGVycm9yOiBtaXNzaW5nIHN0eWxlIHNoZWV0Iik7CisKKyAgICByZXR1cm4gc3R5bGVTaGVldC5y
ZWxlYXNlTm9uTnVsbCgpOwogfQogCi12b2lkIEluc3BlY3RvckNTU0FnZW50OjpnZXRTdHlsZVNo
ZWV0VGV4dChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgc3R5bGVTaGVl
dElkLCBTdHJpbmcqIHJlc3VsdCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPFN0cmluZz4gSW5z
cGVjdG9yQ1NTQWdlbnQ6OmdldFN0eWxlU2hlZXRUZXh0KGNvbnN0IFByb3RvY29sOjpDU1M6OlN0
eWxlU2hlZXRJZCYgc3R5bGVTaGVldElkKQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBl
cnJvclN0cmluZzsKKwogICAgIEluc3BlY3RvclN0eWxlU2hlZXQqIGluc3BlY3RvclN0eWxlU2hl
ZXQgPSBhc3NlcnRTdHlsZVNoZWV0Rm9ySWQoZXJyb3JTdHJpbmcsIHN0eWxlU2hlZXRJZCk7CiAg
ICAgaWYgKCFpbnNwZWN0b3JTdHlsZVNoZWV0KQotICAgICAgICByZXR1cm47CisgICAgICAgIHJl
dHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAgICBhdXRvIHRleHQgPSBpbnNw
ZWN0b3JTdHlsZVNoZWV0LT50ZXh0KCk7Ci0gICAgaWYgKCF0ZXh0Lmhhc0V4Y2VwdGlvbigpKQot
ICAgICAgICAqcmVzdWx0ID0gdGV4dC5yZWxlYXNlUmV0dXJuVmFsdWUoKTsKKyAgICBpZiAodGV4
dC5oYXNFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEluc3BlY3Rv
ckRPTUFnZW50Ojp0b0Vycm9yU3RyaW5nKHRleHQucmVsZWFzZUV4Y2VwdGlvbigpKSk7CisKKyAg
ICByZXR1cm4gdGV4dC5yZWxlYXNlUmV0dXJuVmFsdWUoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JD
U1NBZ2VudDo6c2V0U3R5bGVTaGVldFRleHQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25z
dCBTdHJpbmcmIHN0eWxlU2hlZXRJZCwgY29uc3QgU3RyaW5nJiB0ZXh0KQorUHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yQ1NTQWdlbnQ6OnNldFN0eWxlU2hlZXRUZXh0KGNv
bnN0IFByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRJZCYgc3R5bGVTaGVldElkLCBjb25zdCBTdHJp
bmcmIHRleHQpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAg
ICAgSW5zcGVjdG9yU3R5bGVTaGVldCogaW5zcGVjdG9yU3R5bGVTaGVldCA9IGFzc2VydFN0eWxl
U2hlZXRGb3JJZChlcnJvclN0cmluZywgc3R5bGVTaGVldElkKTsKICAgICBpZiAoIWluc3BlY3Rv
clN0eWxlU2hlZXQpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVj
dGVkKGVycm9yU3RyaW5nKTsKIAogICAgIGF1dG8qIGRvbUFnZW50ID0gbV9pbnN0cnVtZW50aW5n
QWdlbnRzLnBlcnNpc3RlbnRET01BZ2VudCgpOwotICAgIGlmICghZG9tQWdlbnQpIHsKLSAgICAg
ICAgZXJyb3JTdHJpbmcgPSAiRE9NIGRvbWFpbiBtdXN0IGJlIGVuYWJsZWQiX3M7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9CisgICAgaWYgKCFkb21BZ2VudCkKKyAgICAgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKCJET00gZG9tYWluIG11c3QgYmUgZW5hYmxlZCJfcyk7CiAKICAgICBhdXRvIHJl
c3VsdCA9IGRvbUFnZW50LT5oaXN0b3J5KCktPnBlcmZvcm0obWFrZVVuaXF1ZTxTZXRTdHlsZVNo
ZWV0VGV4dEFjdGlvbj4oaW5zcGVjdG9yU3R5bGVTaGVldCwgdGV4dCkpOwogICAgIGlmIChyZXN1
bHQuaGFzRXhjZXB0aW9uKCkpCi0gICAgICAgIGVycm9yU3RyaW5nID0gSW5zcGVjdG9yRE9NQWdl
bnQ6OnRvRXJyb3JTdHJpbmcocmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKSk7CisgICAgICAgIHJl
dHVybiBtYWtlVW5leHBlY3RlZChJbnNwZWN0b3JET01BZ2VudDo6dG9FcnJvclN0cmluZyhyZXN1
bHQucmVsZWFzZUV4Y2VwdGlvbigpKSk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIElu
c3BlY3RvckNTU0FnZW50OjpzZXRTdHlsZVRleHQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBj
b25zdCBKU09OOjpPYmplY3QmIGZ1bGxTdHlsZUlkLCBjb25zdCBTdHJpbmcmIHRleHQsIFJlZlB0
cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlPiYgcmVzdWx0KQorUHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8UmVmPFByb3RvY29sOjpDU1M6OkNTU1N0eWxlPj4gSW5zcGVjdG9yQ1NT
QWdlbnQ6OnNldFN0eWxlVGV4dChSZWY8SlNPTjo6T2JqZWN0PiYmIHN0eWxlSWQsIGNvbnN0IFN0
cmluZyYgdGV4dCkKIHsKLSAgICBJbnNwZWN0b3JDU1NJZCBjb21wb3VuZElkKGZ1bGxTdHlsZUlk
KTsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKKyAgICBJbnNwZWN0
b3JDU1NJZCBjb21wb3VuZElkKHN0eWxlSWQpOwogICAgIEFTU0VSVCghY29tcG91bmRJZC5pc0Vt
cHR5KCkpOwogCiAgICAgSW5zcGVjdG9yU3R5bGVTaGVldCogaW5zcGVjdG9yU3R5bGVTaGVldCA9
IGFzc2VydFN0eWxlU2hlZXRGb3JJZChlcnJvclN0cmluZywgY29tcG91bmRJZC5zdHlsZVNoZWV0
SWQoKSk7CiAgICAgaWYgKCFpbnNwZWN0b3JTdHlsZVNoZWV0KQotICAgICAgICByZXR1cm47Cisg
ICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAgICBhdXRvKiBk
b21BZ2VudCA9IG1faW5zdHJ1bWVudGluZ0FnZW50cy5wZXJzaXN0ZW50RE9NQWdlbnQoKTsKLSAg
ICBpZiAoIWRvbUFnZW50KSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIkRPTSBkb21haW4gbXVz
dCBiZSBlbmFibGVkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghZG9tQWdl
bnQpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiRE9NIGRvbWFpbiBtdXN0IGJlIGVu
YWJsZWQiX3MpOwogCiAgICAgYXV0byBwZXJmb3JtUmVzdWx0ID0gZG9tQWdlbnQtPmhpc3Rvcnko
KS0+cGVyZm9ybShtYWtlVW5pcXVlPFNldFN0eWxlVGV4dEFjdGlvbj4oaW5zcGVjdG9yU3R5bGVT
aGVldCwgY29tcG91bmRJZCwgdGV4dCkpOwotICAgIGlmIChwZXJmb3JtUmVzdWx0Lmhhc0V4Y2Vw
dGlvbigpKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gSW5zcGVjdG9yRE9NQWdlbnQ6OnRvRXJy
b3JTdHJpbmcocGVyZm9ybVJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCkpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQorICAgIGlmIChwZXJmb3JtUmVzdWx0Lmhhc0V4Y2VwdGlvbigpKQorICAgICAg
ICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoSW5zcGVjdG9yRE9NQWdlbnQ6OnRvRXJyb3JTdHJpbmco
cGVyZm9ybVJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCkpKTsKIAotICAgIHJlc3VsdCA9IGluc3Bl
Y3RvclN0eWxlU2hlZXQtPmJ1aWxkT2JqZWN0Rm9yU3R5bGUoaW5zcGVjdG9yU3R5bGVTaGVldC0+
c3R5bGVGb3JJZChjb21wb3VuZElkKSk7CisgICAgcmV0dXJuIGluc3BlY3RvclN0eWxlU2hlZXQt
PmJ1aWxkT2JqZWN0Rm9yU3R5bGUoaW5zcGVjdG9yU3R5bGVTaGVldC0+c3R5bGVGb3JJZChjb21w
b3VuZElkKSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OnNldFJ1bGVTZWxlY3RvcihF
cnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IEpTT046Ok9iamVjdCYgZnVsbFJ1bGVJZCwg
Y29uc3QgU3RyaW5nJiBzZWxlY3RvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6
Q1NTUnVsZT4mIHJlc3VsdCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxQcm90b2NvbDo6
Q1NTOjpDU1NSdWxlPj4gSW5zcGVjdG9yQ1NTQWdlbnQ6OnNldFJ1bGVTZWxlY3RvcihSZWY8SlNP
Tjo6T2JqZWN0PiYmIHJ1bGVJZCwgY29uc3QgU3RyaW5nJiBzZWxlY3RvcikKIHsKLSAgICBJbnNw
ZWN0b3JDU1NJZCBjb21wb3VuZElkKGZ1bGxSdWxlSWQpOworICAgIFByb3RvY29sOjpFcnJvclN0
cmluZyBlcnJvclN0cmluZzsKKworICAgIEluc3BlY3RvckNTU0lkIGNvbXBvdW5kSWQocnVsZUlk
KTsKICAgICBBU1NFUlQoIWNvbXBvdW5kSWQuaXNFbXB0eSgpKTsKIAogICAgIEluc3BlY3RvclN0
eWxlU2hlZXQqIGluc3BlY3RvclN0eWxlU2hlZXQgPSBhc3NlcnRTdHlsZVNoZWV0Rm9ySWQoZXJy
b3JTdHJpbmcsIGNvbXBvdW5kSWQuc3R5bGVTaGVldElkKCkpOwogICAgIGlmICghaW5zcGVjdG9y
U3R5bGVTaGVldCkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0
ZWQoZXJyb3JTdHJpbmcpOwogCiAgICAgYXV0byogZG9tQWdlbnQgPSBtX2luc3RydW1lbnRpbmdB
Z2VudHMucGVyc2lzdGVudERPTUFnZW50KCk7Ci0gICAgaWYgKCFkb21BZ2VudCkgewotICAgICAg
ICBlcnJvclN0cmluZyA9ICJET00gZG9tYWluIG11c3QgYmUgZW5hYmxlZCJfczsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KKyAgICBpZiAoIWRvbUFnZW50KQorICAgICAgICByZXR1cm4gbWFrZVVu
ZXhwZWN0ZWQoIkRPTSBkb21haW4gbXVzdCBiZSBlbmFibGVkIl9zKTsKIAogICAgIGF1dG8gcGVy
Zm9ybVJlc3VsdCA9IGRvbUFnZW50LT5oaXN0b3J5KCktPnBlcmZvcm0obWFrZVVuaXF1ZTxTZXRS
dWxlU2VsZWN0b3JBY3Rpb24+KGluc3BlY3RvclN0eWxlU2hlZXQsIGNvbXBvdW5kSWQsIHNlbGVj
dG9yKSk7Ci0gICAgaWYgKHBlcmZvcm1SZXN1bHQuaGFzRXhjZXB0aW9uKCkpIHsKLSAgICAgICAg
ZXJyb3JTdHJpbmcgPSBJbnNwZWN0b3JET01BZ2VudDo6dG9FcnJvclN0cmluZyhwZXJmb3JtUmVz
dWx0LnJlbGVhc2VFeGNlcHRpb24oKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYg
KHBlcmZvcm1SZXN1bHQuaGFzRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBl
Y3RlZChJbnNwZWN0b3JET01BZ2VudDo6dG9FcnJvclN0cmluZyhwZXJmb3JtUmVzdWx0LnJlbGVh
c2VFeGNlcHRpb24oKSkpOwogCi0gICAgcmVzdWx0ID0gaW5zcGVjdG9yU3R5bGVTaGVldC0+YnVp
bGRPYmplY3RGb3JSdWxlKGluc3BlY3RvclN0eWxlU2hlZXQtPnJ1bGVGb3JJZChjb21wb3VuZElk
KSk7CisgICAgYXV0byBydWxlID0gaW5zcGVjdG9yU3R5bGVTaGVldC0+YnVpbGRPYmplY3RGb3JS
dWxlKGluc3BlY3RvclN0eWxlU2hlZXQtPnJ1bGVGb3JJZChjb21wb3VuZElkKSk7CisgICAgaWYg
KCFydWxlKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkludGVybmFsIGVycm9yOiBt
aXNzaW5nIHN0eWxlIHNoZWV0Iik7CisKKyAgICByZXR1cm4gcnVsZS5yZWxlYXNlTm9uTnVsbCgp
OwogfQogCi12b2lkIEluc3BlY3RvckNTU0FnZW50OjpjcmVhdGVTdHlsZVNoZWV0KEVycm9yU3Ry
aW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBTdHJpbmcqIHN0eWxlU2hl
ZXRJZCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPFByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRJ
ZD4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmNyZWF0ZVN0eWxlU2hlZXQoY29uc3QgUHJvdG9jb2w6Ok5l
dHdvcms6OkZyYW1lSWQmIGZyYW1lSWQpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVy
cm9yU3RyaW5nOworCiAgICAgYXV0byogcGFnZUFnZW50ID0gbV9pbnN0cnVtZW50aW5nQWdlbnRz
LmVuYWJsZWRQYWdlQWdlbnQoKTsKLSAgICBpZiAoIXBhZ2VBZ2VudCkgewotICAgICAgICBlcnJv
clN0cmluZyA9ICJQYWdlIGRvbWFpbiBtdXN0IGJlIGVuYWJsZWQiX3M7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9CisgICAgaWYgKCFwYWdlQWdlbnQpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBl
Y3RlZCgiUGFnZSBkb21haW4gbXVzdCBiZSBlbmFibGVkIl9zKTsKIAogICAgIGF1dG8qIGZyYW1l
ID0gcGFnZUFnZW50LT5hc3NlcnRGcmFtZShlcnJvclN0cmluZywgZnJhbWVJZCk7CiAgICAgaWYg
KCFmcmFtZSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQo
ZXJyb3JTdHJpbmcpOwogCiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gZnJhbWUtPmRvY3VtZW50
KCk7Ci0gICAgaWYgKCFkb2N1bWVudCkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5n
IGRvY3VtZW50IG9mIGZyYW1lIGZvciBnaXZlbiBmcmFtZUlkIl9zOwotICAgICAgICByZXR1cm47
Ci0gICAgfQorICAgIGlmICghZG9jdW1lbnQpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3Rl
ZCgiTWlzc2luZyBkb2N1bWVudCBvZiBmcmFtZSBmb3IgZ2l2ZW4gZnJhbWVJZCJfcyk7CiAKICAg
ICBJbnNwZWN0b3JTdHlsZVNoZWV0KiBpbnNwZWN0b3JTdHlsZVNoZWV0ID0gY3JlYXRlSW5zcGVj
dG9yU3R5bGVTaGVldEZvckRvY3VtZW50KCpkb2N1bWVudCk7Ci0gICAgaWYgKCFpbnNwZWN0b3JT
dHlsZVNoZWV0KSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIkNvdWxkIG5vdCBjcmVhdGUgc3R5
bGUgc2hlZXQgZm9yIGRvY3VtZW50IG9mIGZyYW1lIGZvciBnaXZlbiBmcmFtZUlkIl9zOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghaW5zcGVjdG9yU3R5bGVTaGVldCkKKyAgICAg
ICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJDb3VsZCBub3QgY3JlYXRlIHN0eWxlIHNoZWV0IGZv
ciBkb2N1bWVudCBvZiBmcmFtZSBmb3IgZ2l2ZW4gZnJhbWVJZCJfcyk7CiAKLSAgICAqc3R5bGVT
aGVldElkID0gaW5zcGVjdG9yU3R5bGVTaGVldC0+aWQoKTsKKyAgICByZXR1cm4gaW5zcGVjdG9y
U3R5bGVTaGVldC0+aWQoKTsKIH0KIAogSW5zcGVjdG9yU3R5bGVTaGVldCogSW5zcGVjdG9yQ1NT
QWdlbnQ6OmNyZWF0ZUluc3BlY3RvclN0eWxlU2hlZXRGb3JEb2N1bWVudChEb2N1bWVudCYgZG9j
dW1lbnQpCkBAIC03NTEsNDEgKzc2MSw0MiBAQCBJbnNwZWN0b3JTdHlsZVNoZWV0KiBJbnNwZWN0
b3JDU1NBZ2VudDo6Y3JlYXRlSW5zcGVjdG9yU3R5bGVTaGVldEZvckRvY3VtZW50KERvYwogICAg
IHJldHVybiBpbnNwZWN0b3JTdHlsZVNoZWV0c0ZvckRvY3VtZW50Lmxhc3QoKS5nZXQoKTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6YWRkUnVsZShFcnJvclN0cmluZyYgZXJyb3JTdHJp
bmcsIGNvbnN0IFN0cmluZyYgc3R5bGVTaGVldElkLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yLCBS
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NSdWxlPiYgcmVzdWx0KQorUHJvdG9j
b2w6OkVycm9yU3RyaW5nT3I8UmVmPFByb3RvY29sOjpDU1M6OkNTU1J1bGU+PiBJbnNwZWN0b3JD
U1NBZ2VudDo6YWRkUnVsZShjb25zdCBQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0SWQmIHN0eWxl
U2hlZXRJZCwgY29uc3QgU3RyaW5nJiBzZWxlY3RvcikKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JT
dHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBJbnNwZWN0b3JTdHlsZVNoZWV0KiBpbnNwZWN0b3JT
dHlsZVNoZWV0ID0gYXNzZXJ0U3R5bGVTaGVldEZvcklkKGVycm9yU3RyaW5nLCBzdHlsZVNoZWV0
SWQpOwogICAgIGlmICghaW5zcGVjdG9yU3R5bGVTaGVldCkKLSAgICAgICAgcmV0dXJuOworICAg
ICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCiAgICAgYXV0byogZG9t
QWdlbnQgPSBtX2luc3RydW1lbnRpbmdBZ2VudHMucGVyc2lzdGVudERPTUFnZW50KCk7Ci0gICAg
aWYgKCFkb21BZ2VudCkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJET00gZG9tYWluIG11c3Qg
YmUgZW5hYmxlZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoIWRvbUFnZW50
KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkRPTSBkb21haW4gbXVzdCBiZSBlbmFi
bGVkIl9zKTsKIAogICAgIGF1dG8gYWN0aW9uID0gbWFrZVVuaXF1ZTxBZGRSdWxlQWN0aW9uPihp
bnNwZWN0b3JTdHlsZVNoZWV0LCBzZWxlY3Rvcik7CiAgICAgYXV0byYgcmF3QWN0aW9uID0gKmFj
dGlvbjsKICAgICBhdXRvIHBlcmZvcm1SZXN1bHQgPSBkb21BZ2VudC0+aGlzdG9yeSgpLT5wZXJm
b3JtKFdURk1vdmUoYWN0aW9uKSk7Ci0gICAgaWYgKHBlcmZvcm1SZXN1bHQuaGFzRXhjZXB0aW9u
KCkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSBJbnNwZWN0b3JET01BZ2VudDo6dG9FcnJvclN0
cmluZyhwZXJmb3JtUmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKSk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9CisgICAgaWYgKHBlcmZvcm1SZXN1bHQuaGFzRXhjZXB0aW9uKCkpCisgICAgICAgIHJl
dHVybiBtYWtlVW5leHBlY3RlZChJbnNwZWN0b3JET01BZ2VudDo6dG9FcnJvclN0cmluZyhwZXJm
b3JtUmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKSkpOwogCi0gICAgSW5zcGVjdG9yQ1NTSWQgcnVs
ZUlkID0gcmF3QWN0aW9uLm5ld1J1bGVJZCgpOwotICAgIENTU1N0eWxlUnVsZSogcnVsZSA9IGlu
c3BlY3RvclN0eWxlU2hlZXQtPnJ1bGVGb3JJZChydWxlSWQpOwotICAgIHJlc3VsdCA9IGluc3Bl
Y3RvclN0eWxlU2hlZXQtPmJ1aWxkT2JqZWN0Rm9yUnVsZShydWxlKTsKKyAgICBhdXRvIHJ1bGUg
PSBpbnNwZWN0b3JTdHlsZVNoZWV0LT5idWlsZE9iamVjdEZvclJ1bGUoaW5zcGVjdG9yU3R5bGVT
aGVldC0+cnVsZUZvcklkKHJhd0FjdGlvbi5uZXdSdWxlSWQoKSkpOworICAgIGlmICghcnVsZSkK
KyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJJbnRlcm5hbCBlcnJvcjogbWlzc2luZyBz
dHlsZSBzaGVldCIpOworCisgICAgcmV0dXJuIHJ1bGUucmVsZWFzZU5vbk51bGwoKTsKIH0KIAot
dm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0U3VwcG9ydGVkQ1NTUHJvcGVydGllcyhFcnJvclN0
cmluZyYsIFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NT
UHJvcGVydHlJbmZvPj4mIGNzc1Byb3BlcnRpZXMpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxS
ZWY8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0eUluZm8+Pj4gSW5zcGVj
dG9yQ1NTQWdlbnQ6OmdldFN1cHBvcnRlZENTU1Byb3BlcnRpZXMoKQogewotICAgIGF1dG8gcHJv
cGVydGllcyA9IEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NQcm9w
ZXJ0eUluZm8+OjpjcmVhdGUoKTsKKyAgICBhdXRvIGNzc1Byb3BlcnRpZXMgPSBKU09OOjpBcnJh
eU9mPFByb3RvY29sOjpDU1M6OkNTU1Byb3BlcnR5SW5mbz46OmNyZWF0ZSgpOworCiAgICAgZm9y
IChpbnQgaSA9IGZpcnN0Q1NTUHJvcGVydHk7IGkgPD0gbGFzdENTU1Byb3BlcnR5OyArK2kpIHsK
ICAgICAgICAgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlEID0gY29udmVydFRvQ1NTUHJvcGVydHlJ
RChpKTsKICAgICAgICAgLy8gRklYTUU6IFNob3VsZCB0YWtlIGFjY291bnQgZm9yIGZsYWdzIGlu
IHNldHRpbmdzKCkuCiAgICAgICAgIGlmIChpc0ludGVybmFsQ1NTUHJvcGVydHkocHJvcGVydHlJ
RCkgfHwgIWlzRW5hYmxlZENTU1Byb3BlcnR5KHByb3BlcnR5SUQpKQogICAgICAgICAgICAgY29u
dGludWU7CiAKLSAgICAgICAgYXV0byBwcm9wZXJ0eSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNT
Uzo6Q1NTUHJvcGVydHlJbmZvOjpjcmVhdGUoKQorICAgICAgICBhdXRvIHByb3BlcnR5ID0gUHJv
dG9jb2w6OkNTUzo6Q1NTUHJvcGVydHlJbmZvOjpjcmVhdGUoKQogICAgICAgICAgICAgLnNldE5h
bWUoZ2V0UHJvcGVydHlOYW1lU3RyaW5nKHByb3BlcnR5SUQpKQogICAgICAgICAgICAgLnJlbGVh
c2UoKTsKIApAQCAtODIxLDYzICs4MzIsNjYgQEAgdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0
U3VwcG9ydGVkQ1NTUHJvcGVydGllcyhFcnJvclN0cmluZyYsIFJlZlB0cjxKU09OOjpBcnIKICAg
ICAgICAgaWYgKENTU1Byb3BlcnR5Ojppc0luaGVyaXRlZFByb3BlcnR5KHByb3BlcnR5SUQpKQog
ICAgICAgICAgICAgcHJvcGVydHktPnNldEluaGVyaXRlZCh0cnVlKTsKIAotICAgICAgICBwcm9w
ZXJ0aWVzLT5hZGRJdGVtKFdURk1vdmUocHJvcGVydHkpKTsKKyAgICAgICAgY3NzUHJvcGVydGll
cy0+YWRkSXRlbShXVEZNb3ZlKHByb3BlcnR5KSk7CiAgICAgfQotICAgIGNzc1Byb3BlcnRpZXMg
PSBXVEZNb3ZlKHByb3BlcnRpZXMpOworCisgICAgcmV0dXJuIFdURk1vdmUoY3NzUHJvcGVydGll
cyk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldFN1cHBvcnRlZFN5c3RlbUZvbnRG
YW1pbHlOYW1lcyhFcnJvclN0cmluZyYsIFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+JiBm
b250RmFtaWx5TmFtZXMpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SlNPTjo6QXJyYXlP
ZjxTdHJpbmc+Pj4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldFN1cHBvcnRlZFN5c3RlbUZvbnRGYW1p
bHlOYW1lcygpCiB7Ci0gICAgYXV0byBmYW1pbGllcyA9IEpTT046OkFycmF5T2Y8U3RyaW5nPjo6
Y3JlYXRlKCk7CisgICAgYXV0byBmb250RmFtaWx5TmFtZXMgPSBKU09OOjpBcnJheU9mPFN0cmlu
Zz46OmNyZWF0ZSgpOwogCiAgICAgVmVjdG9yPFN0cmluZz4gc3lzdGVtRm9udEZhbWlsaWVzID0g
Rm9udENhY2hlOjpzaW5nbGV0b24oKS5zeXN0ZW1Gb250RmFtaWxpZXMoKTsKICAgICBmb3IgKGNv
bnN0IGF1dG8mIGZhbWlseU5hbWUgOiBzeXN0ZW1Gb250RmFtaWxpZXMpCi0gICAgICAgIGZhbWls
aWVzLT5hZGRJdGVtKGZhbWlseU5hbWUpOworICAgICAgICBmb250RmFtaWx5TmFtZXMtPmFkZEl0
ZW0oZmFtaWx5TmFtZSk7CiAKLSAgICBmb250RmFtaWx5TmFtZXMgPSBXVEZNb3ZlKGZhbWlsaWVz
KTsKKyAgICByZXR1cm4gV1RGTW92ZShmb250RmFtaWx5TmFtZXMpOwogfQogCi12b2lkIEluc3Bl
Y3RvckNTU0FnZW50Ojpmb3JjZVBzZXVkb1N0YXRlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywg
aW50IG5vZGVJZCwgY29uc3QgSlNPTjo6QXJyYXkmIGZvcmNlZFBzZXVkb0NsYXNzZXMpCitQcm90
b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JDU1NBZ2VudDo6Zm9yY2VQc2V1ZG9T
dGF0ZShQcm90b2NvbDo6RE9NOjpOb2RlSWQgbm9kZUlkLCBSZWY8SlNPTjo6QXJyYXk+JiYgZm9y
Y2VkUHNldWRvQ2xhc3NlcykKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJp
bmc7CisKICAgICBhdXRvKiBkb21BZ2VudCA9IG1faW5zdHJ1bWVudGluZ0FnZW50cy5wZXJzaXN0
ZW50RE9NQWdlbnQoKTsKLSAgICBpZiAoIWRvbUFnZW50KSB7Ci0gICAgICAgIGVycm9yU3RyaW5n
ID0gIkRPTSBkb21haW4gbXVzdCBiZSBlbmFibGVkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAg
fQorICAgIGlmICghZG9tQWdlbnQpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiRE9N
IGRvbWFpbiBtdXN0IGJlIGVuYWJsZWQiX3MpOwogCiAgICAgRWxlbWVudCogZWxlbWVudCA9IGRv
bUFnZW50LT5hc3NlcnRFbGVtZW50KGVycm9yU3RyaW5nLCBub2RlSWQpOwogICAgIGlmICghZWxl
bWVudCkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJy
b3JTdHJpbmcpOwogCiAgICAgLy8gUmV0dXJuIGVhcmx5IGlmIHRoZSBmb3JjZWQgcHNldWRvIHN0
YXRlIHdhcyBhbHJlYWR5IHNldCBjb3JyZWN0bHkuCiAgICAgdW5zaWduZWQgZm9yY2VkUHNldWRv
U3RhdGUgPSBjb21wdXRlUHNldWRvQ2xhc3NNYXNrKGZvcmNlZFBzZXVkb0NsYXNzZXMpOwogICAg
IGlmIChmb3JjZWRQc2V1ZG9TdGF0ZSkgewogICAgICAgICBhdXRvIGl0ZXJhdG9yID0gbV9ub2Rl
SWRUb0ZvcmNlZFBzZXVkb1N0YXRlLmFkZChub2RlSWQsIDApLml0ZXJhdG9yOwogICAgICAgICBp
ZiAoZm9yY2VkUHNldWRvU3RhdGUgPT0gaXRlcmF0b3ItPnZhbHVlKQotICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAgICAgaXRlcmF0b3ItPnZhbHVlID0g
Zm9yY2VkUHNldWRvU3RhdGU7CiAgICAgICAgIG1fZG9jdW1lbnRzV2l0aEZvcmNlZFBzZXVkb1N0
YXRlcy5hZGQoJmVsZW1lbnQtPmRvY3VtZW50KCkpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGlm
ICghbV9ub2RlSWRUb0ZvcmNlZFBzZXVkb1N0YXRlLnJlbW92ZShub2RlSWQpKQotICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAgICAgaWYgKG1fbm9kZUlk
VG9Gb3JjZWRQc2V1ZG9TdGF0ZS5pc0VtcHR5KCkpCiAgICAgICAgICAgICBtX2RvY3VtZW50c1dp
dGhGb3JjZWRQc2V1ZG9TdGF0ZXMuY2xlYXIoKTsKICAgICB9CiAKICAgICBlbGVtZW50LT5kb2N1
bWVudCgpLnN0eWxlU2NvcGUoKS5kaWRDaGFuZ2VTdHlsZVNoZWV0RW52aXJvbm1lbnQoKTsKKwor
ICAgIHJldHVybiB7IH07CiB9CiAKIEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZSYg
SW5zcGVjdG9yQ1NTQWdlbnQ6OmFzSW5zcGVjdG9yU3R5bGVTaGVldChTdHlsZWRFbGVtZW50JiBl
bGVtZW50KQogewogICAgIHJldHVybiBtX25vZGVUb0luc3BlY3RvclN0eWxlU2hlZXQuZW5zdXJl
KCZlbGVtZW50LCBbdGhpcywgJmVsZW1lbnRdIHsKICAgICAgICAgU3RyaW5nIG5ld1N0eWxlU2hl
ZXRJZCA9IFN0cmluZzo6bnVtYmVyKG1fbGFzdFN0eWxlU2hlZXRJZCsrKTsKLSAgICAgICAgYXV0
byBpbnNwZWN0b3JTdHlsZVNoZWV0ID0gSW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxl
OjpjcmVhdGUobV9pbnN0cnVtZW50aW5nQWdlbnRzLmVuYWJsZWRQYWdlQWdlbnQoKSwgbmV3U3R5
bGVTaGVldElkLCBlbGVtZW50LCBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRP
cmlnaW46OkF1dGhvciwgdGhpcyk7CisgICAgICAgIGF1dG8gaW5zcGVjdG9yU3R5bGVTaGVldCA9
IEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZTo6Y3JlYXRlKG1faW5zdHJ1bWVudGlu
Z0FnZW50cy5lbmFibGVkUGFnZUFnZW50KCksIG5ld1N0eWxlU2hlZXRJZCwgZWxlbWVudCwgUHJv
dG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6QXV0aG9yLCB0aGlzKTsKICAgICAgICAgbV9p
ZFRvSW5zcGVjdG9yU3R5bGVTaGVldC5zZXQobmV3U3R5bGVTaGVldElkLCBpbnNwZWN0b3JTdHls
ZVNoZWV0LmNvcHlSZWYoKSk7CiAgICAgICAgIHJldHVybiBpbnNwZWN0b3JTdHlsZVNoZWV0Owog
ICAgIH0pLml0ZXJhdG9yLT52YWx1ZTsKIH0KIAotRWxlbWVudCogSW5zcGVjdG9yQ1NTQWdlbnQ6
OmVsZW1lbnRGb3JJZChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQpCitFbGVt
ZW50KiBJbnNwZWN0b3JDU1NBZ2VudDo6ZWxlbWVudEZvcklkKFByb3RvY29sOjpFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcsIFByb3RvY29sOjpET006Ok5vZGVJZCBub2RlSWQpCiB7CiAgICAgYXV0
byogZG9tQWdlbnQgPSBtX2luc3RydW1lbnRpbmdBZ2VudHMucGVyc2lzdGVudERPTUFnZW50KCk7
CiAgICAgaWYgKCFkb21BZ2VudCkgewpAQCAtOTE0LDcgKzkyOCw3IEBAIEluc3BlY3RvclN0eWxl
U2hlZXQqIEluc3BlY3RvckNTU0FnZW50OjpiaW5kU3R5bGVTaGVldChDU1NTdHlsZVNoZWV0KiBz
dHlsZVNoZWV0CiAgICAgcmV0dXJuIGluc3BlY3RvclN0eWxlU2hlZXQuZ2V0KCk7CiB9CiAKLUlu
c3BlY3RvclN0eWxlU2hlZXQqIEluc3BlY3RvckNTU0FnZW50Ojphc3NlcnRTdHlsZVNoZWV0Rm9y
SWQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHN0eWxlU2hlZXRJZCkK
K0luc3BlY3RvclN0eWxlU2hlZXQqIEluc3BlY3RvckNTU0FnZW50Ojphc3NlcnRTdHlsZVNoZWV0
Rm9ySWQoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBz
dHlsZVNoZWV0SWQpCiB7CiAgICAgSWRUb0luc3BlY3RvclN0eWxlU2hlZXQ6Oml0ZXJhdG9yIGl0
ID0gbV9pZFRvSW5zcGVjdG9yU3R5bGVTaGVldC5maW5kKHN0eWxlU2hlZXRJZCk7CiAgICAgaWYg
KGl0ID09IG1faWRUb0luc3BlY3RvclN0eWxlU2hlZXQuZW5kKCkpIHsKQEAgLTkyNCwyOSArOTM4
LDI5IEBAIEluc3BlY3RvclN0eWxlU2hlZXQqIEluc3BlY3RvckNTU0FnZW50Ojphc3NlcnRTdHls
ZVNoZWV0Rm9ySWQoRXJyb3JTdHJpbmcmIGVycm9yCiAgICAgcmV0dXJuIGl0LT52YWx1ZS5nZXQo
KTsKIH0KIAotSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luIEluc3Bl
Y3RvckNTU0FnZW50OjpkZXRlY3RPcmlnaW4oQ1NTU3R5bGVTaGVldCogcGFnZVN0eWxlU2hlZXQs
IERvY3VtZW50KiBvd25lckRvY3VtZW50KQorUHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdp
biBJbnNwZWN0b3JDU1NBZ2VudDo6ZGV0ZWN0T3JpZ2luKENTU1N0eWxlU2hlZXQqIHBhZ2VTdHls
ZVNoZWV0LCBEb2N1bWVudCogb3duZXJEb2N1bWVudCkKIHsKICAgICBpZiAobV9jcmVhdGluZ1Zp
YUluc3BlY3RvclN0eWxlU2hlZXQpCi0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29s
OjpDU1M6OlN0eWxlU2hlZXRPcmlnaW46Okluc3BlY3RvcjsKKyAgICAgICAgcmV0dXJuIFByb3Rv
Y29sOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW46Okluc3BlY3RvcjsKIAogICAgIGlmIChwYWdlU3R5
bGVTaGVldCAmJiAhcGFnZVN0eWxlU2hlZXQtPm93bmVyTm9kZSgpICYmIHBhZ2VTdHlsZVNoZWV0
LT5ocmVmKCkuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6
Q1NTOjpTdHlsZVNoZWV0T3JpZ2luOjpVc2VyQWdlbnQ7CisgICAgICAgIHJldHVybiBQcm90b2Nv
bDo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luOjpVc2VyQWdlbnQ7CiAKICAgICBpZiAocGFnZVN0eWxl
U2hlZXQgJiYgcGFnZVN0eWxlU2hlZXQtPmNvbnRlbnRzKCkuaXNVc2VyU3R5bGVTaGVldCgpKQot
ICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2lu
OjpVc2VyOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6
VXNlcjsKIAogICAgIGF1dG8gaXRlcmF0b3IgPSBtX2RvY3VtZW50VG9JbnNwZWN0b3JTdHlsZVNo
ZWV0LmZpbmQob3duZXJEb2N1bWVudCk7CiAgICAgaWYgKGl0ZXJhdG9yICE9IG1fZG9jdW1lbnRU
b0luc3BlY3RvclN0eWxlU2hlZXQuZW5kKCkpIHsKICAgICAgICAgZm9yIChhdXRvJiBpbnNwZWN0
b3JTdHlsZVNoZWV0IDogaXRlcmF0b3ItPnZhbHVlKSB7CiAgICAgICAgICAgICBpZiAocGFnZVN0
eWxlU2hlZXQgPT0gaW5zcGVjdG9yU3R5bGVTaGVldC0+cGFnZVN0eWxlU2hlZXQoKSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0T3Jp
Z2luOjpJbnNwZWN0b3I7CisgICAgICAgICAgICAgICAgcmV0dXJuIFByb3RvY29sOjpDU1M6OlN0
eWxlU2hlZXRPcmlnaW46Okluc3BlY3RvcjsKICAgICAgICAgfQogICAgIH0KIAotICAgIHJldHVy
biBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW46OkF1dGhvcjsKKyAg
ICByZXR1cm4gUHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6QXV0aG9yOwogfQogCi1S
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NSdWxlPiBJbnNwZWN0b3JDU1NBZ2Vu
dDo6YnVpbGRPYmplY3RGb3JSdWxlKGNvbnN0IFN0eWxlUnVsZSogc3R5bGVSdWxlLCBTdHlsZTo6
UmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIEVsZW1lbnQmIGVsZW1lbnQpCitSZWZQdHI8UHJvdG9j
b2w6OkNTUzo6Q1NTUnVsZT4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yUnVsZShj
b25zdCBTdHlsZVJ1bGUqIHN0eWxlUnVsZSwgU3R5bGU6OlJlc29sdmVyJiBzdHlsZVJlc29sdmVy
LCBFbGVtZW50JiBlbGVtZW50KQogewogICAgIGlmICghc3R5bGVSdWxlKQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKQEAgLTk2OCw3ICs5ODIsNyBAQCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6Q1NTOjpDU1NSdWxlPiBJbnNwZWN0b3JDU1NBZ2VudDo6YnVpbGRPYmplY3RGb3JSdWxlKAog
ICAgIHJldHVybiBpbnNwZWN0b3JTdHlsZVNoZWV0ID8gaW5zcGVjdG9yU3R5bGVTaGVldC0+YnVp
bGRPYmplY3RGb3JSdWxlKGNzc29tV3JhcHBlcikgOiBudWxscHRyOwogfQogCi1SZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NSdWxlPiBJbnNwZWN0b3JDU1NBZ2VudDo6YnVpbGRP
YmplY3RGb3JSdWxlKENTU1N0eWxlUnVsZSogcnVsZSkKK1JlZlB0cjxQcm90b2NvbDo6Q1NTOjpD
U1NSdWxlPiBJbnNwZWN0b3JDU1NBZ2VudDo6YnVpbGRPYmplY3RGb3JSdWxlKENTU1N0eWxlUnVs
ZSogcnVsZSkKIHsKICAgICBpZiAoIXJ1bGUpCiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAt
OTc4LDE2ICs5OTIsMTYgQEAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUnVs
ZT4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yUnVsZSgKICAgICByZXR1cm4gaW5z
cGVjdG9yU3R5bGVTaGVldCA/IGluc3BlY3RvclN0eWxlU2hlZXQtPmJ1aWxkT2JqZWN0Rm9yUnVs
ZShydWxlKSA6IG51bGxwdHI7CiB9CiAKLVJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkNTUzo6UnVsZU1hdGNoPj4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmJ1aWxkQXJyYXlG
b3JNYXRjaGVkUnVsZUxpc3QoY29uc3QgVmVjdG9yPFJlZlB0cjxjb25zdCBTdHlsZVJ1bGU+PiYg
bWF0Y2hlZFJ1bGVzLCBTdHlsZTo6UmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIEVsZW1lbnQmIGVs
ZW1lbnQsIFBzZXVkb0lkIHBzZXVkb0lkKQorUmVmPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkNT
Uzo6UnVsZU1hdGNoPj4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmJ1aWxkQXJyYXlGb3JNYXRjaGVkUnVs
ZUxpc3QoY29uc3QgVmVjdG9yPFJlZlB0cjxjb25zdCBTdHlsZVJ1bGU+PiYgbWF0Y2hlZFJ1bGVz
LCBTdHlsZTo6UmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIEVsZW1lbnQmIGVsZW1lbnQsIFBzZXVk
b0lkIHBzZXVkb0lkKQogewotICAgIGF1dG8gcmVzdWx0ID0gSlNPTjo6QXJyYXlPZjxJbnNwZWN0
b3I6OlByb3RvY29sOjpDU1M6OlJ1bGVNYXRjaD46OmNyZWF0ZSgpOworICAgIGF1dG8gcmVzdWx0
ID0gSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6Q1NTOjpSdWxlTWF0Y2g+OjpjcmVhdGUoKTsKIAog
ICAgIFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdDb250ZXh0IGNvbnRleHQoU2VsZWN0b3JDaGVj
a2VyOjpNb2RlOjpDb2xsZWN0aW5nUnVsZXMpOwogICAgIGNvbnRleHQucHNldWRvSWQgPSBwc2V1
ZG9JZCAhPSBQc2V1ZG9JZDo6Tm9uZSA/IHBzZXVkb0lkIDogZWxlbWVudC5wc2V1ZG9JZCgpOwog
ICAgIFNlbGVjdG9yQ2hlY2tlciBzZWxlY3RvckNoZWNrZXIoZWxlbWVudC5kb2N1bWVudCgpKTsK
IAogICAgIGZvciAoYXV0byYgbWF0Y2hlZFJ1bGUgOiBtYXRjaGVkUnVsZXMpIHsKLSAgICAgICAg
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUnVsZT4gcnVsZU9iamVjdCA9IGJ1
aWxkT2JqZWN0Rm9yUnVsZShtYXRjaGVkUnVsZS5nZXQoKSwgc3R5bGVSZXNvbHZlciwgZWxlbWVu
dCk7CisgICAgICAgIFJlZlB0cjxQcm90b2NvbDo6Q1NTOjpDU1NSdWxlPiBydWxlT2JqZWN0ID0g
YnVpbGRPYmplY3RGb3JSdWxlKG1hdGNoZWRSdWxlLmdldCgpLCBzdHlsZVJlc29sdmVyLCBlbGVt
ZW50KTsKICAgICAgICAgaWYgKCFydWxlT2JqZWN0KQogICAgICAgICAgICAgY29udGludWU7CiAK
QEAgLTEwMDEsOCArMTAxNSw4IEBAIFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkNTUzo6UnVsZU1hdGNoPj4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmJ1CiAgICAgICAgICAg
ICArK2luZGV4OwogICAgICAgICB9CiAKLSAgICAgICAgYXV0byBtYXRjaCA9IEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkNTUzo6UnVsZU1hdGNoOjpjcmVhdGUoKQotICAgICAgICAgICAgLnNldFJ1bGUo
V1RGTW92ZShydWxlT2JqZWN0KSkKKyAgICAgICAgYXV0byBtYXRjaCA9IFByb3RvY29sOjpDU1M6
OlJ1bGVNYXRjaDo6Y3JlYXRlKCkKKyAgICAgICAgICAgIC5zZXRSdWxlKHJ1bGVPYmplY3QucmVs
ZWFzZU5vbk51bGwoKSkKICAgICAgICAgICAgIC5zZXRNYXRjaGluZ1NlbGVjdG9ycyhXVEZNb3Zl
KG1hdGNoaW5nU2VsZWN0b3JzKSkKICAgICAgICAgICAgIC5yZWxlYXNlKCk7CiAgICAgICAgIHJl
c3VsdC0+YWRkSXRlbShXVEZNb3ZlKG1hdGNoKSk7CkBAIC0xMDExLDcgKzEwMjUsNyBAQCBSZWZQ
dHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlJ1bGVNYXRjaD4+IElu
c3BlY3RvckNTU0FnZW50OjpidQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLVJlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlPiBJbnNwZWN0b3JDU1NBZ2VudDo6YnVpbGRP
YmplY3RGb3JBdHRyaWJ1dGVzU3R5bGUoU3R5bGVkRWxlbWVudCYgZWxlbWVudCkKK1JlZlB0cjxQ
cm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9y
QXR0cmlidXRlc1N0eWxlKFN0eWxlZEVsZW1lbnQmIGVsZW1lbnQpCiB7CiAgICAgLy8gRklYTUU6
IFVnbGluZXNzIGJlbG93LgogICAgIGF1dG8qIGF0dHJpYnV0ZVN0eWxlID0gY29uc3RfY2FzdDxT
dHlsZVByb3BlcnRpZXMqPihlbGVtZW50LnByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKCkpOwpA
QCAtMTAyMyw3ICsxMDM3LDcgQEAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NT
U3R5bGU+IEluc3BlY3RvckNTU0FnZW50OjpidWlsZE9iamVjdEZvckF0dHIKICAgICByZXR1cm4g
aW5zcGVjdG9yU3R5bGUtPmJ1aWxkT2JqZWN0Rm9yU3R5bGUoKTsKIH0KIAotdm9pZCBJbnNwZWN0
b3JDU1NBZ2VudDo6ZGlkUmVtb3ZlRE9NTm9kZShOb2RlJiBub2RlLCBpbnQgbm9kZUlkKQordm9p
ZCBJbnNwZWN0b3JDU1NBZ2VudDo6ZGlkUmVtb3ZlRE9NTm9kZShOb2RlJiBub2RlLCBQcm90b2Nv
bDo6RE9NOjpOb2RlSWQgbm9kZUlkKQogewogICAgIG1fbm9kZUlkVG9Gb3JjZWRQc2V1ZG9TdGF0
ZS5yZW1vdmUobm9kZUlkKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2FnZW50cy9JbnNwZWN0b3JDU1NBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Fn
ZW50cy9JbnNwZWN0b3JDU1NBZ2VudC5oCmluZGV4IGZhMWQ2NzFkZDgzM2IwMDNhNjFkYzI3OTY1
OTY2OTIxNjFhYWRmN2YuLmQyZmNhNzk1ZGM2ODBmOThkZTg2Y2JjYzFkNmU5MGM4Y2E3YzcwYjEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ1NT
QWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNT
U0FnZW50LmgKQEAgLTYxLDcgKzYxLDcgQEAgY2xhc3MgSW5zcGVjdG9yQ1NTQWdlbnQgZmluYWwg
OiBwdWJsaWMgSW5zcGVjdG9yQWdlbnRCYXNlICwgcHVibGljIEluc3BlY3Rvcjo6Q1MKICAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBJbnNwZWN0b3JDU1NBZ2VudChX
ZWJBZ2VudENvbnRleHQmKTsKLSAgICB+SW5zcGVjdG9yQ1NTQWdlbnQoKSBvdmVycmlkZTsKKyAg
ICB+SW5zcGVjdG9yQ1NTQWdlbnQoKTsKIAogICAgIGNsYXNzIElubGluZVN0eWxlT3ZlcnJpZGVT
Y29wZSB7CiAgICAgcHVibGljOgpAQCAtODMsMjkgKzgzLDI5IEBAIHB1YmxpYzoKICAgICBzdGF0
aWMgQ1NTU3R5bGVSdWxlKiBhc0NTU1N0eWxlUnVsZShDU1NSdWxlJik7CiAKICAgICAvLyBJbnNw
ZWN0b3JBZ2VudEJhc2UKLSAgICB2b2lkIGRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJbnNw
ZWN0b3I6OkZyb250ZW5kUm91dGVyKiwgSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlciopIG92
ZXJyaWRlOwotICAgIHZvaWQgd2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9y
OjpEaXNjb25uZWN0UmVhc29uKSBvdmVycmlkZTsKKyAgICB2b2lkIGRpZENyZWF0ZUZyb250ZW5k
QW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kUm91dGVyKiwgSW5zcGVjdG9yOjpCYWNrZW5k
RGlzcGF0Y2hlciopOworICAgIHZvaWQgd2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5z
cGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKTsKIAogICAgIC8vIENTU0JhY2tlbmREaXNwYXRjaGVy
SGFuZGxlcgotICAgIHZvaWQgZW5hYmxlKEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBkaXNhYmxlKEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBnZXRDb21wdXRlZFN0
eWxlRm9yTm9kZShFcnJvclN0cmluZyYsIGludCBub2RlSWQsIFJlZlB0cjxKU09OOjpBcnJheU9m
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTQ29tcHV0ZWRTdHlsZVByb3BlcnR5Pj4mKSBv
dmVycmlkZTsKLSAgICB2b2lkIGdldElubGluZVN0eWxlc0Zvck5vZGUoRXJyb3JTdHJpbmcmLCBp
bnQgbm9kZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4mIGlu
bGluZVN0eWxlLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4mIGF0
dHJpYnV0ZXMpIG92ZXJyaWRlOwotICAgIHZvaWQgZ2V0TWF0Y2hlZFN0eWxlc0Zvck5vZGUoRXJy
b3JTdHJpbmcmLCBpbnQgbm9kZUlkLCBjb25zdCBib29sKiBpbmNsdWRlUHNldWRvLCBjb25zdCBi
b29sKiBpbmNsdWRlSW5oZXJpdGVkLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpDU1M6OlJ1bGVNYXRjaD4+JiBtYXRjaGVkQ1NTUnVsZXMsIFJlZlB0cjxKU09OOjpB
cnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6UHNldWRvSWRNYXRjaGVzPj4mLCBSZWZQ
dHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkluaGVyaXRlZFN0eWxl
RW50cnk+PiYgaW5oZXJpdGVkRW50cmllcykgb3ZlcnJpZGU7Ci0gICAgdm9pZCBnZXRBbGxTdHls
ZVNoZWV0cyhFcnJvclN0cmluZyYsIFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkNTUzo6Q1NTU3R5bGVTaGVldEhlYWRlcj4+JiBzdHlsZVNoZWV0SW5mb3MpIG92ZXJy
aWRlOwotICAgIHZvaWQgZ2V0U3R5bGVTaGVldChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYg
c3R5bGVTaGVldElkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZVNo
ZWV0Qm9keT4mIHJlc3VsdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBnZXRTdHlsZVNoZWV0VGV4dChF
cnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgc3R5bGVTaGVldElkLCBTdHJpbmcqIHJlc3VsdCkg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRTdHlsZVNoZWV0VGV4dChFcnJvclN0cmluZyYsIGNvbnN0
IFN0cmluZyYgc3R5bGVTaGVldElkLCBjb25zdCBTdHJpbmcmIHRleHQpIG92ZXJyaWRlOwotICAg
IHZvaWQgc2V0U3R5bGVUZXh0KEVycm9yU3RyaW5nJiwgY29uc3QgSlNPTjo6T2JqZWN0JiBzdHls
ZUlkLCBjb25zdCBTdHJpbmcmIHRleHQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6
OkNTU1N0eWxlPiYgcmVzdWx0KSBvdmVycmlkZTsKLSAgICB2b2lkIHNldFJ1bGVTZWxlY3RvcihF
cnJvclN0cmluZyYsIGNvbnN0IEpTT046Ok9iamVjdCYgcnVsZUlkLCBjb25zdCBTdHJpbmcmIHNl
bGVjdG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NSdWxlPiYgcmVzdWx0
KSBvdmVycmlkZTsKLSAgICB2b2lkIGNyZWF0ZVN0eWxlU2hlZXQoRXJyb3JTdHJpbmcmLCBjb25z
dCBTdHJpbmcmIGZyYW1lSWQsIFN0cmluZyogc3R5bGVTaGVldElkKSBvdmVycmlkZTsKLSAgICB2
b2lkIGFkZFJ1bGUoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHN0eWxlU2hlZXRJZCwgY29u
c3QgU3RyaW5nJiBzZWxlY3RvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NT
UnVsZT4mIHJlc3VsdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBnZXRTdXBwb3J0ZWRDU1NQcm9wZXJ0
aWVzKEVycm9yU3RyaW5nJiwgUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6Q1NTOjpDU1NQcm9wZXJ0eUluZm8+PiYgcmVzdWx0KSBvdmVycmlkZTsKLSAgICB2b2lkIGdl
dFN1cHBvcnRlZFN5c3RlbUZvbnRGYW1pbHlOYW1lcyhFcnJvclN0cmluZyYsIFJlZlB0cjxKU09O
OjpBcnJheU9mPFN0cmluZz4+JiByZXN1bHQpIG92ZXJyaWRlOwotICAgIHZvaWQgZm9yY2VQc2V1
ZG9TdGF0ZShFcnJvclN0cmluZyYsIGludCBub2RlSWQsIGNvbnN0IEpTT046OkFycmF5JiBmb3Jj
ZWRQc2V1ZG9DbGFzc2VzKSBvdmVycmlkZTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJv
clN0cmluZ09yPHZvaWQ+IGVuYWJsZSgpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8dm9pZD4gZGlzYWJsZSgpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8UmVmPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1ND
b21wdXRlZFN0eWxlUHJvcGVydHk+Pj4gZ2V0Q29tcHV0ZWRTdHlsZUZvck5vZGUoSW5zcGVjdG9y
OjpQcm90b2NvbDo6RE9NOjpOb2RlSWQpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8c3RkOjp0dXBsZTxSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NT
dHlsZT4gLyogaW5saW5lU3R5bGUgKi8sIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6
OkNTU1N0eWxlPiAvKiBhdHRyaWJ1dGVzU3R5bGUgKi8+PiBnZXRJbmxpbmVTdHlsZXNGb3JOb2Rl
KEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkKTsKKyAgICBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpFcnJvclN0cmluZ09yPHN0ZDo6dHVwbGU8UmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVj
dG9yOjpQcm90b2NvbDo6Q1NTOjpSdWxlTWF0Y2g+PiwgUmVmUHRyPEpTT046OkFycmF5T2Y8SW5z
cGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpQc2V1ZG9JZE1hdGNoZXM+PiwgUmVmUHRyPEpTT046OkFy
cmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpJbmhlcml0ZWRTdHlsZUVudHJ5Pj4+PiBn
ZXRNYXRjaGVkU3R5bGVzRm9yTm9kZShJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZCwg
T3B0aW9uYWw8Ym9vbD4mJiBpbmNsdWRlUHNldWRvLCBPcHRpb25hbDxib29sPiYmIGluY2x1ZGVJ
bmhlcml0ZWQpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEpT
T046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZVNoZWV0SGVhZGVy
Pj4+IGdldEFsbFN0eWxlU2hlZXRzKCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JT
dHJpbmdPcjxSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZVNoZWV0Qm9keT4+
IGdldFN0eWxlU2hlZXQoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0
SWQmKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFN0cmluZz4gZ2V0
U3R5bGVTaGVldFRleHQoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0
SWQmKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHNldFN0
eWxlU2hlZXRUZXh0KGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldElk
JiwgY29uc3QgU3RyaW5nJiB0ZXh0KTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0
cmluZ09yPFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlPj4gc2V0U3R5bGVU
ZXh0KFJlZjxKU09OOjpPYmplY3Q+JiYgc3R5bGVJZCwgY29uc3QgU3RyaW5nJiB0ZXh0KTsKKyAg
ICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpDU1M6OkNTU1J1bGU+PiBzZXRSdWxlU2VsZWN0b3IoUmVmPEpTT046Ok9iamVjdD4mJiBy
dWxlSWQsIGNvbnN0IFN0cmluZyYgc2VsZWN0b3IpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0SWQ+IGNy
ZWF0ZVN0eWxlU2hlZXQoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6RnJhbWVJ
ZCYpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkNTUzo6Q1NTUnVsZT4+IGFkZFJ1bGUoY29uc3QgSW5zcGVjdG9yOjpQcm90
b2NvbDo6Q1NTOjpTdHlsZVNoZWV0SWQmLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yKTsKKyAgICBJ
bnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUHJvcGVydHlJbmZvPj4+IGdldFN1cHBvcnRlZENTU1By
b3BlcnRpZXMoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxK
U09OOjpBcnJheU9mPFN0cmluZz4+PiBnZXRTdXBwb3J0ZWRTeXN0ZW1Gb250RmFtaWx5TmFtZXMo
KTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGZvcmNlUHNl
dWRvU3RhdGUoSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQsIFJlZjxKU09OOjpBcnJh
eT4mJiBmb3JjZWRQc2V1ZG9DbGFzc2VzKTsKIAogICAgIC8vIEluc3BlY3RvclN0eWxlU2hlZXQ6
Okxpc3RlbmVyCi0gICAgdm9pZCBzdHlsZVNoZWV0Q2hhbmdlZChJbnNwZWN0b3JTdHlsZVNoZWV0
Kikgb3ZlcnJpZGU7CisgICAgdm9pZCBzdHlsZVNoZWV0Q2hhbmdlZChJbnNwZWN0b3JTdHlsZVNo
ZWV0Kik7CiAKICAgICAvLyBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24KICAgICB2b2lkIGRvY3Vt
ZW50RGV0YWNoZWQoRG9jdW1lbnQmKTsKQEAgLTExNCw3ICsxMTQsNyBAQCBwdWJsaWM6CiAgICAg
Ym9vbCBmb3JjZVBzZXVkb1N0YXRlKGNvbnN0IEVsZW1lbnQmLCBDU1NTZWxlY3Rvcjo6UHNldWRv
Q2xhc3NUeXBlKTsKIAogICAgIC8vIEluc3BlY3RvckRPTUFnZW50IGhvb2tzCi0gICAgdm9pZCBk
aWRSZW1vdmVET01Ob2RlKE5vZGUmLCBpbnQgbm9kZUlkKTsKKyAgICB2b2lkIGRpZFJlbW92ZURP
TU5vZGUoTm9kZSYsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkKTsKICAgICB2b2lk
IGRpZE1vZGlmeURPTUF0dHIoRWxlbWVudCYpOwogCiAgICAgdm9pZCByZXNldCgpOwpAQCAtMTI2
LDI4ICsxMjYsMjggQEAgcHJpdmF0ZToKICAgICBjbGFzcyBTZXRSdWxlU2VsZWN0b3JBY3Rpb247
CiAgICAgY2xhc3MgQWRkUnVsZUFjdGlvbjsKIAotICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcs
IFJlZlB0cjxJbnNwZWN0b3JTdHlsZVNoZWV0Pj4gSWRUb0luc3BlY3RvclN0eWxlU2hlZXQ7Cisg
ICAgdHlwZWRlZiBIYXNoTWFwPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldElk
LCBSZWZQdHI8SW5zcGVjdG9yU3R5bGVTaGVldD4+IElkVG9JbnNwZWN0b3JTdHlsZVNoZWV0Owog
ICAgIHR5cGVkZWYgSGFzaE1hcDxDU1NTdHlsZVNoZWV0KiwgUmVmUHRyPEluc3BlY3RvclN0eWxl
U2hlZXQ+PiBDU1NTdHlsZVNoZWV0VG9JbnNwZWN0b3JTdHlsZVNoZWV0OwogICAgIHR5cGVkZWYg
SGFzaE1hcDxSZWZQdHI8RG9jdW1lbnQ+LCBWZWN0b3I8UmVmUHRyPEluc3BlY3RvclN0eWxlU2hl
ZXQ+Pj4gRG9jdW1lbnRUb1ZpYUluc3BlY3RvclN0eWxlU2hlZXQ7IC8vICJ2aWEgaW5zcGVjdG9y
IiBzdHlsZXNoZWV0cwotICAgIHR5cGVkZWYgSGFzaE1hcDxpbnQsIHVuc2lnbmVkPiBOb2RlSWRU
b0ZvcmNlZFBzZXVkb1N0YXRlOworICAgIHR5cGVkZWYgSGFzaE1hcDxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpET006Ok5vZGVJZCwgdW5zaWduZWQ+IE5vZGVJZFRvRm9yY2VkUHNldWRvU3RhdGU7CiAK
ICAgICBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGUmIGFzSW5zcGVjdG9yU3R5bGVT
aGVldChTdHlsZWRFbGVtZW50Jik7Ci0gICAgRWxlbWVudCogZWxlbWVudEZvcklkKEVycm9yU3Ry
aW5nJiwgaW50IG5vZGVJZCk7CisgICAgRWxlbWVudCogZWxlbWVudEZvcklkKEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkVycm9yU3RyaW5nJiwgSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQp
OwogCiAgICAgdm9pZCBjb2xsZWN0QWxsU3R5bGVTaGVldHMoVmVjdG9yPEluc3BlY3RvclN0eWxl
U2hlZXQqPiYpOwogICAgIHZvaWQgY29sbGVjdEFsbERvY3VtZW50U3R5bGVTaGVldHMoRG9jdW1l
bnQmLCBWZWN0b3I8Q1NTU3R5bGVTaGVldCo+Jik7CiAgICAgdm9pZCBjb2xsZWN0U3R5bGVTaGVl
dHMoQ1NTU3R5bGVTaGVldCosIFZlY3RvcjxDU1NTdHlsZVNoZWV0Kj4mKTsKICAgICB2b2lkIHNl
dEFjdGl2ZVN0eWxlU2hlZXRzRm9yRG9jdW1lbnQoRG9jdW1lbnQmLCBWZWN0b3I8Q1NTU3R5bGVT
aGVldCo+JiBhY3RpdmVTdHlsZVNoZWV0cyk7CiAKLSAgICBTdHJpbmcgdW5iaW5kU3R5bGVTaGVl
dChJbnNwZWN0b3JTdHlsZVNoZWV0Kik7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpT
dHlsZVNoZWV0SWQgdW5iaW5kU3R5bGVTaGVldChJbnNwZWN0b3JTdHlsZVNoZWV0Kik7CiAgICAg
SW5zcGVjdG9yU3R5bGVTaGVldCogYmluZFN0eWxlU2hlZXQoQ1NTU3R5bGVTaGVldCopOwotICAg
IEluc3BlY3RvclN0eWxlU2hlZXQqIGFzc2VydFN0eWxlU2hlZXRGb3JJZChFcnJvclN0cmluZyYs
IGNvbnN0IFN0cmluZyYpOworICAgIEluc3BlY3RvclN0eWxlU2hlZXQqIGFzc2VydFN0eWxlU2hl
ZXRGb3JJZChJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZyYsIGNvbnN0IEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldElkJik7CiAgICAgSW5zcGVjdG9yU3R5bGVTaGVl
dCogY3JlYXRlSW5zcGVjdG9yU3R5bGVTaGVldEZvckRvY3VtZW50KERvY3VtZW50Jik7CiAgICAg
SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luIGRldGVjdE9yaWdpbihD
U1NTdHlsZVNoZWV0KiBwYWdlU3R5bGVTaGVldCwgRG9jdW1lbnQqIG93bmVyRG9jdW1lbnQpOwog
CiAgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUnVsZT4gYnVpbGRPYmpl
Y3RGb3JSdWxlKGNvbnN0IFN0eWxlUnVsZSosIFN0eWxlOjpSZXNvbHZlciYsIEVsZW1lbnQmKTsK
ICAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NSdWxlPiBidWlsZE9iamVj
dEZvclJ1bGUoQ1NTU3R5bGVSdWxlKik7Ci0gICAgUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVj
dG9yOjpQcm90b2NvbDo6Q1NTOjpSdWxlTWF0Y2g+PiBidWlsZEFycmF5Rm9yTWF0Y2hlZFJ1bGVM
aXN0KGNvbnN0IFZlY3RvcjxSZWZQdHI8Y29uc3QgU3R5bGVSdWxlPj4mLCBTdHlsZTo6UmVzb2x2
ZXImLCBFbGVtZW50JiwgUHNldWRvSWQpOworICAgIFJlZjxKU09OOjpBcnJheU9mPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkNTUzo6UnVsZU1hdGNoPj4gYnVpbGRBcnJheUZvck1hdGNoZWRSdWxlTGlz
dChjb25zdCBWZWN0b3I8UmVmUHRyPGNvbnN0IFN0eWxlUnVsZT4+JiwgU3R5bGU6OlJlc29sdmVy
JiwgRWxlbWVudCYsIFBzZXVkb0lkKTsKICAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
Q1NTOjpDU1NTdHlsZT4gYnVpbGRPYmplY3RGb3JBdHRyaWJ1dGVzU3R5bGUoU3R5bGVkRWxlbWVu
dCYpOwogCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5z
cGVjdG9yQ2FudmFzQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9J
bnNwZWN0b3JDYW52YXNBZ2VudC5jcHAKaW5kZXggZDA5MTY4Mjk0MDBmOTQ2ZjA4NjAwOTU4YWE0
NDNlNTcwNzNmZThhYS4uYTg1MDM4ZjVjMDY3N2U3ZDkyODE5NGRiN2QwNDA5YTk0OGJjOTZiOSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDYW52
YXNBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0
b3JDYW52YXNBZ2VudC5jcHAKQEAgLTEwMiw4ICsxMDIsNyBAQCB2b2lkIEluc3BlY3RvckNhbnZh
c0FnZW50OjpkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9udGVuZFJv
dXRlcgogCiB2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5k
QmFja2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24pCiB7Ci0gICAgRXJyb3JTdHJpbmcg
aWdub3JlZDsKLSAgICBkaXNhYmxlKGlnbm9yZWQpOworICAgIGRpc2FibGUoKTsKIH0KIAogdm9p
ZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6ZGlzY2FyZEFnZW50KCkKQEAgLTExMSwxMCArMTEwLDEw
IEBAIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmRpc2NhcmRBZ2VudCgpCiAgICAgcmVzZXQo
KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6ZW5hYmxlKEVycm9yU3RyaW5nJikK
K1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckNhbnZhc0FnZW50OjplbmFi
bGUoKQogewogICAgIGlmIChtX2luc3RydW1lbnRpbmdBZ2VudHMuZW5hYmxlZENhbnZhc0FnZW50
KCkgPT0gdGhpcykKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4geyB9OwogCiAgICAg
bV9pbnN0cnVtZW50aW5nQWdlbnRzLnNldEVuYWJsZWRDYW52YXNBZ2VudCh0aGlzKTsKIApAQCAt
MTcwLDczICsxNjksODQgQEAgdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6ZW5hYmxlKEVycm9y
U3RyaW5nJikKICAgICAgICAgfQogICAgIH0KICNlbmRpZiAvLyBFTkFCTEUoV0VCR1BVKQorCisg
ICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6ZGlzYWJsZShF
cnJvclN0cmluZyYpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JDYW52
YXNBZ2VudDo6ZGlzYWJsZSgpCiB7CiAgICAgbV9pbnN0cnVtZW50aW5nQWdlbnRzLnNldEVuYWJs
ZWRDYW52YXNBZ2VudChudWxscHRyKTsKIAogICAgIHJlc2V0KCk7CiAKICAgICBtX3JlY29yZGlu
Z0F1dG9DYXB0dXJlRnJhbWVDb3VudCA9IFdURjo6bnVsbG9wdDsKKworICAgIHJldHVybiB7IH07
CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnJlcXVlc3ROb2RlKEVycm9yU3RyaW5n
JiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBjYW52YXNJZCwgaW50KiBub2RlSWQpCitQcm90
b2NvbDo6RXJyb3JTdHJpbmdPcjxQcm90b2NvbDo6RE9NOjpOb2RlSWQ+IEluc3BlY3RvckNhbnZh
c0FnZW50OjpyZXF1ZXN0Tm9kZShjb25zdCBQcm90b2NvbDo6Q2FudmFzOjpDYW52YXNJZCYgY2Fu
dmFzSWQpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAgICAg
YXV0byBpbnNwZWN0b3JDYW52YXMgPSBhc3NlcnRJbnNwZWN0b3JDYW52YXMoZXJyb3JTdHJpbmcs
IGNhbnZhc0lkKTsKICAgICBpZiAoIWluc3BlY3RvckNhbnZhcykKLSAgICAgICAgcmV0dXJuOwor
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCiAgICAgYXV0byog
bm9kZSA9IGluc3BlY3RvckNhbnZhcy0+Y2FudmFzRWxlbWVudCgpOwotICAgIGlmICghbm9kZSkg
ewotICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIGVsZW1lbnQgb2YgY2FudmFzIGZvciBn
aXZlbiBjYW52YXNJZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoIW5vZGUp
CisgICAgICAgIG1ha2VVbmV4cGVjdGVkKCJNaXNzaW5nIGVsZW1lbnQgb2YgY2FudmFzIGZvciBn
aXZlbiBjYW52YXNJZCJfcyk7CiAKICAgICAvLyBGSVhNRTogPGh0dHBzOi8vd2Via2l0Lm9yZy9i
LzIxMzQ5OT4gV2ViIEluc3BlY3RvcjogYWxsb3cgRE9NIG5vZGVzIHRvIGJlIGluc3RydW1lbnRl
ZCBhdCBhbnkgcG9pbnQsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGUgbWFpbiBkb2N1bWVudCBo
YXMgYWxzbyBiZWVuIGluc3RydW1lbnRlZAogICAgIGludCBkb2N1bWVudE5vZGVJZCA9IG1faW5z
dHJ1bWVudGluZ0FnZW50cy5wZXJzaXN0ZW50RE9NQWdlbnQoKS0+Ym91bmROb2RlSWQoJm5vZGUt
PmRvY3VtZW50KCkpOwotICAgIGlmICghZG9jdW1lbnROb2RlSWQpIHsKLSAgICAgICAgZXJyb3JT
dHJpbmcgPSAiRG9jdW1lbnQgbXVzdCBoYXZlIGJlZW4gcmVxdWVzdGVkIl9zOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQorICAgIGlmICghZG9jdW1lbnROb2RlSWQpCisgICAgICAgIG1ha2VVbmV4
cGVjdGVkKCJEb2N1bWVudCBtdXN0IGhhdmUgYmVlbiByZXF1ZXN0ZWQiX3MpOwogCi0gICAgKm5v
ZGVJZCA9IG1faW5zdHJ1bWVudGluZ0FnZW50cy5wZXJzaXN0ZW50RE9NQWdlbnQoKS0+cHVzaE5v
ZGVUb0Zyb250ZW5kKGVycm9yU3RyaW5nLCBkb2N1bWVudE5vZGVJZCwgbm9kZSk7CisgICAgcmV0
dXJuIG1faW5zdHJ1bWVudGluZ0FnZW50cy5wZXJzaXN0ZW50RE9NQWdlbnQoKS0+cHVzaE5vZGVU
b0Zyb250ZW5kKGVycm9yU3RyaW5nLCBkb2N1bWVudE5vZGVJZCwgbm9kZSk7CiB9CiAKLXZvaWQg
SW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnJlcXVlc3RDb250ZW50KEVycm9yU3RyaW5nJiBlcnJvclN0
cmluZywgY29uc3QgU3RyaW5nJiBjYW52YXNJZCwgU3RyaW5nKiBjb250ZW50KQorUHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8U3RyaW5nPiBJbnNwZWN0b3JDYW52YXNBZ2VudDo6cmVxdWVzdENvbnRl
bnQoY29uc3QgUHJvdG9jb2w6OkNhbnZhczo6Q2FudmFzSWQmIGNhbnZhc0lkKQogeworICAgIFBy
b3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIGF1dG8gaW5zcGVjdG9yQ2Fu
dmFzID0gYXNzZXJ0SW5zcGVjdG9yQ2FudmFzKGVycm9yU3RyaW5nLCBjYW52YXNJZCk7CiAgICAg
aWYgKCFpbnNwZWN0b3JDYW52YXMpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1h
a2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAotICAgICpjb250ZW50ID0gaW5zcGVjdG9yQ2Fu
dmFzLT5nZXRDYW52YXNDb250ZW50QXNEYXRhVVJMKGVycm9yU3RyaW5nKTsKKyAgICBhdXRvIHJl
c3VsdCA9IGluc3BlY3RvckNhbnZhcy0+Z2V0Q2FudmFzQ29udGVudEFzRGF0YVVSTChlcnJvclN0
cmluZyk7CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChl
cnJvclN0cmluZyk7CisKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIEluc3BlY3RvckNh
bnZhc0FnZW50OjpyZXF1ZXN0Q2xpZW50Tm9kZXMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBj
b25zdCBTdHJpbmcmIGNhbnZhc0lkLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxpbnQ+PiYgY2xpZW50
Tm9kZUlkcykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPFByb3Rv
Y29sOjpET006Ok5vZGVJZD4+PiBJbnNwZWN0b3JDYW52YXNBZ2VudDo6cmVxdWVzdENsaWVudE5v
ZGVzKGNvbnN0IFByb3RvY29sOjpDYW52YXM6OkNhbnZhc0lkJiBjYW52YXNJZCkKIHsKKyAgICBQ
cm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBhdXRvKiBkb21BZ2VudCA9
IG1faW5zdHJ1bWVudGluZ0FnZW50cy5wZXJzaXN0ZW50RE9NQWdlbnQoKTsKLSAgICBpZiAoIWRv
bUFnZW50KSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIkRPTSBkb21haW4gbXVzdCBiZSBlbmFi
bGVkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghZG9tQWdlbnQpCisgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiRE9NIGRvbWFpbiBtdXN0IGJlIGVuYWJsZWQiX3Mp
OwogCiAgICAgYXV0byBpbnNwZWN0b3JDYW52YXMgPSBhc3NlcnRJbnNwZWN0b3JDYW52YXMoZXJy
b3JTdHJpbmcsIGNhbnZhc0lkKTsKICAgICBpZiAoIWluc3BlY3RvckNhbnZhcykKLSAgICAgICAg
cmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCi0g
ICAgY2xpZW50Tm9kZUlkcyA9IEpTT046OkFycmF5T2Y8aW50Pjo6Y3JlYXRlKCk7CisgICAgYXV0
byBjbGllbnROb2RlSWRzID0gSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6RE9NOjpOb2RlSWQ+Ojpj
cmVhdGUoKTsKICAgICBmb3IgKGF1dG8mIGNsaWVudE5vZGUgOiBpbnNwZWN0b3JDYW52YXMtPmNs
aWVudE5vZGVzKCkpIHsKICAgICAgICAgLy8gRklYTUU6IDxodHRwczovL3dlYmtpdC5vcmcvYi8y
MTM0OTk+IFdlYiBJbnNwZWN0b3I6IGFsbG93IERPTSBub2RlcyB0byBiZSBpbnN0cnVtZW50ZWQg
YXQgYW55IHBvaW50LCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlIG1haW4gZG9jdW1lbnQgaGFz
IGFsc28gYmVlbiBpbnN0cnVtZW50ZWQKICAgICAgICAgaWYgKGF1dG8gZG9jdW1lbnROb2RlSWQg
PSBkb21BZ2VudC0+Ym91bmROb2RlSWQoJmNsaWVudE5vZGUtPmRvY3VtZW50KCkpKQogICAgICAg
ICAgICAgY2xpZW50Tm9kZUlkcy0+YWRkSXRlbShkb21BZ2VudC0+cHVzaE5vZGVUb0Zyb250ZW5k
KGVycm9yU3RyaW5nLCBkb2N1bWVudE5vZGVJZCwgY2xpZW50Tm9kZSkpOwogICAgIH0KKyAgICBy
ZXR1cm4gV1RGTW92ZShjbGllbnROb2RlSWRzKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDYW52YXNB
Z2VudDo6cmVzb2x2ZUNvbnRleHQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJp
bmcmIGNhbnZhc0lkLCBjb25zdCBTdHJpbmcqIG9iamVjdEdyb3VwLCBSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0KQorUHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8UmVmPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+PiBJbnNwZWN0
b3JDYW52YXNBZ2VudDo6cmVzb2x2ZUNvbnRleHQoY29uc3QgUHJvdG9jb2w6OkNhbnZhczo6Q2Fu
dmFzSWQmIGNhbnZhc0lkLCBjb25zdCBTdHJpbmcmIG9iamVjdEdyb3VwKQogeworICAgIFByb3Rv
Y29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIGF1dG8gaW5zcGVjdG9yQ2FudmFz
ID0gYXNzZXJ0SW5zcGVjdG9yQ2FudmFzKGVycm9yU3RyaW5nLCBjYW52YXNJZCk7CiAgICAgaWYg
KCFpbnNwZWN0b3JDYW52YXMpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgIGF1dG8qIHN0YXRlID0gaW5zcGVjdG9yQ2Fu
dmFzLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmV4ZWNTdGF0ZSgpOwogICAgIGF1dG8gaW5q
ZWN0ZWRTY3JpcHQgPSBtX2luamVjdGVkU2NyaXB0TWFuYWdlci5pbmplY3RlZFNjcmlwdEZvcihz
dGF0ZSk7CkBAIC0yNDYsMTIyICsyNTYsMTI5IEBAIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6
OnJlc29sdmVDb250ZXh0KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nCiAK
ICAgICBpZiAoIXZhbHVlKSB7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAg
ICBlcnJvclN0cmluZyA9ICJJbnRlcm5hbCBlcnJvcjogdW5rbm93biBjb250ZXh0IG9mIGNhbnZh
cyBmb3IgZ2l2ZW4gY2FudmFzSWQiX3M7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJu
IG1ha2VVbmV4cGVjdGVkKCJJbnRlcm5hbCBlcnJvcjogdW5rbm93biBjb250ZXh0IG9mIGNhbnZh
cyBmb3IgZ2l2ZW4gY2FudmFzSWQiX3MpOwogICAgIH0KIAotICAgIFN0cmluZyBvYmplY3RHcm91
cE5hbWUgPSBvYmplY3RHcm91cCA/ICpvYmplY3RHcm91cCA6IFN0cmluZygpOwotICAgIHJlc3Vs
dCA9IGluamVjdGVkU2NyaXB0LndyYXBPYmplY3QodmFsdWUsIG9iamVjdEdyb3VwTmFtZSk7Cisg
ICAgYXV0byByZXN1bHQgPSBpbmplY3RlZFNjcmlwdC53cmFwT2JqZWN0KHZhbHVlLCBvYmplY3RH
cm91cCk7CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgi
SW50ZXJuYWwgZXJyb3I6IHVuYWJsZSB0byBjYXN0IENvbnRleHQiKTsKKworICAgIHJldHVybiBy
ZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6
c2V0UmVjb3JkaW5nQXV0b0NhcHR1cmVGcmFtZUNvdW50KEVycm9yU3RyaW5nJiwgaW50IGNvdW50
KQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnNl
dFJlY29yZGluZ0F1dG9DYXB0dXJlRnJhbWVDb3VudChpbnQgY291bnQpCiB7CiAgICAgaWYgKGNv
dW50ID4gMCkKICAgICAgICAgbV9yZWNvcmRpbmdBdXRvQ2FwdHVyZUZyYW1lQ291bnQgPSBjb3Vu
dDsKICAgICBlbHNlCiAgICAgICAgIG1fcmVjb3JkaW5nQXV0b0NhcHR1cmVGcmFtZUNvdW50ID0g
V1RGOjpudWxsb3B0OworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ2FudmFz
QWdlbnQ6OnN0YXJ0UmVjb3JkaW5nKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3Ry
aW5nJiBjYW52YXNJZCwgY29uc3QgaW50KiBmcmFtZUNvdW50LCBjb25zdCBpbnQqIG1lbW9yeUxp
bWl0KQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yQ2FudmFzQWdlbnQ6
OnN0YXJ0UmVjb3JkaW5nKGNvbnN0IFByb3RvY29sOjpDYW52YXM6OkNhbnZhc0lkJiBjYW52YXNJ
ZCwgT3B0aW9uYWw8aW50PiYmIGZyYW1lQ291bnQsIE9wdGlvbmFsPGludD4mJiBtZW1vcnlMaW1p
dCkKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBhdXRv
IGluc3BlY3RvckNhbnZhcyA9IGFzc2VydEluc3BlY3RvckNhbnZhcyhlcnJvclN0cmluZywgY2Fu
dmFzSWQpOwogICAgIGlmICghaW5zcGVjdG9yQ2FudmFzKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICAvLyBGSVhNRTogPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzIwMTY1MT4gV2ViIEluc3BlY3Rvcjog
Q2FudmFzOiBzdXBwb3J0IGNhbnZhcyByZWNvcmRpbmdzIGZvciBXZWJHUFVEZXZpY2UKKyAgICAg
ICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgIGF1dG8qIGNvbnRl
eHQgPSBpbnNwZWN0b3JDYW52YXMtPmNhbnZhc0NvbnRleHQoKTsKLSAgICBpZiAoIWNvbnRleHQp
Ci0gICAgICAgIHJldHVybjsKIAotICAgIGlmIChjb250ZXh0LT5jYWxsVHJhY2luZ0FjdGl2ZSgp
KSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIkFscmVhZHkgcmVjb3JkaW5nIGNhbnZhcyJfczsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICAvLyBGSVhNRTogPGh0dHBzOi8vd2Via2l0Lm9y
Zy9iLzIwMTY1MT4gV2ViIEluc3BlY3RvcjogQ2FudmFzOiBzdXBwb3J0IGNhbnZhcyByZWNvcmRp
bmdzIGZvciBXZWJHUFVEZXZpY2UKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJldHVybiBt
YWtlVW5leHBlY3RlZCgiTm90IHN1cHBvcnRlZCJfcyk7CisKKyAgICBpZiAoY29udGV4dC0+Y2Fs
bFRyYWNpbmdBY3RpdmUoKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJBbHJlYWR5
IHJlY29yZGluZyBjYW52YXMiX3MpOwogCiAgICAgUmVjb3JkaW5nT3B0aW9ucyByZWNvcmRpbmdP
cHRpb25zOwogICAgIGlmIChmcmFtZUNvdW50KQogICAgICAgICByZWNvcmRpbmdPcHRpb25zLmZy
YW1lQ291bnQgPSAqZnJhbWVDb3VudDsKICAgICBpZiAobWVtb3J5TGltaXQpCiAgICAgICAgIHJl
Y29yZGluZ09wdGlvbnMubWVtb3J5TGltaXQgPSAqbWVtb3J5TGltaXQ7Ci0gICAgc3RhcnRSZWNv
cmRpbmcoKmluc3BlY3RvckNhbnZhcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6UmVjb3JkaW5nOjpJ
bml0aWF0b3I6OkZyb250ZW5kLCBXVEZNb3ZlKHJlY29yZGluZ09wdGlvbnMpKTsKKyAgICBzdGFy
dFJlY29yZGluZygqaW5zcGVjdG9yQ2FudmFzLCBQcm90b2NvbDo6UmVjb3JkaW5nOjpJbml0aWF0
b3I6OkZyb250ZW5kLCBXVEZNb3ZlKHJlY29yZGluZ09wdGlvbnMpKTsKKworICAgIHJldHVybiB7
IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnN0b3BSZWNvcmRpbmcoRXJyb3JT
dHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGNhbnZhc0lkKQorUHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnN0b3BSZWNvcmRpbmcoY29u
c3QgUHJvdG9jb2w6OkNhbnZhczo6Q2FudmFzSWQmIGNhbnZhc0lkKQogeworICAgIFByb3RvY29s
OjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIGF1dG8gaW5zcGVjdG9yQ2FudmFzID0g
YXNzZXJ0SW5zcGVjdG9yQ2FudmFzKGVycm9yU3RyaW5nLCBjYW52YXNJZCk7CiAgICAgaWYgKCFp
bnNwZWN0b3JDYW52YXMpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEZJWE1FOiA8aHR0cHM6
Ly93ZWJraXQub3JnL2IvMjAxNjUxPiBXZWIgSW5zcGVjdG9yOiBDYW52YXM6IHN1cHBvcnQgY2Fu
dmFzIHJlY29yZGluZ3MgZm9yIFdlYkdQVURldmljZQorICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoZXJyb3JTdHJpbmcpOwogCiAgICAgYXV0byogY29udGV4dCA9IGluc3BlY3RvckNhbnZh
cy0+Y2FudmFzQ29udGV4dCgpOwotICAgIGlmICghY29udGV4dCkKLSAgICAgICAgcmV0dXJuOwog
Ci0gICAgaWYgKCFjb250ZXh0LT5jYWxsVHJhY2luZ0FjdGl2ZSgpKSB7Ci0gICAgICAgIGVycm9y
U3RyaW5nID0gIk5vdCByZWNvcmRpbmcgY2FudmFzIl9zOwotICAgICAgICByZXR1cm47Ci0gICAg
fQorICAgIC8vIEZJWE1FOiA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMjAxNjUxPiBXZWIgSW5zcGVj
dG9yOiBDYW52YXM6IHN1cHBvcnQgY2FudmFzIHJlY29yZGluZ3MgZm9yIFdlYkdQVURldmljZQor
ICAgIGlmICghY29udGV4dCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJOb3Qgc3Vw
cG9ydGVkIl9zKTsKKworICAgIGlmICghY29udGV4dC0+Y2FsbFRyYWNpbmdBY3RpdmUoKSkKKyAg
ICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJOb3QgcmVjb3JkaW5nIGNhbnZhcyJfcyk7CiAK
ICAgICBkaWRGaW5pc2hSZWNvcmRpbmdDYW52YXNGcmFtZSgqY29udGV4dCwgdHJ1ZSk7CisKKyAg
ICByZXR1cm4geyB9OwogfQogCiAjaWYgRU5BQkxFKFdFQkdMKSB8fCBFTkFCTEUoV0VCR1BVKQot
dm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6cmVxdWVzdFNoYWRlclNvdXJjZShFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgcHJvZ3JhbUlkLCBjb25zdCBTdHJpbmcmIHNo
YWRlclR5cGVTdHJpbmcsIFN0cmluZyogb3V0U291cmNlKQorUHJvdG9jb2w6OkVycm9yU3RyaW5n
T3I8U3RyaW5nPiBJbnNwZWN0b3JDYW52YXNBZ2VudDo6cmVxdWVzdFNoYWRlclNvdXJjZShjb25z
dCBQcm90b2NvbDo6Q2FudmFzOjpQcm9ncmFtSWQmIHByb2dyYW1JZCwgUHJvdG9jb2w6OkNhbnZh
czo6U2hhZGVyVHlwZSBzaGFkZXJUeXBlKQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBl
cnJvclN0cmluZzsKKwogICAgIGF1dG8gaW5zcGVjdG9yUHJvZ3JhbSA9IGFzc2VydEluc3BlY3Rv
clByb2dyYW0oZXJyb3JTdHJpbmcsIHByb2dyYW1JZCk7CiAgICAgaWYgKCFpbnNwZWN0b3JQcm9n
cmFtKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJv
clN0cmluZyk7CiAKLSAgICBhdXRvIHNoYWRlclR5cGUgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpJ
bnNwZWN0b3JIZWxwZXJzOjpwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90
b2NvbDo6Q2FudmFzOjpTaGFkZXJUeXBlPihzaGFkZXJUeXBlU3RyaW5nKTsKLSAgICBpZiAoIXNo
YWRlclR5cGUpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSBtYWtlU3RyaW5nKCJVbmtub3duIHNo
YWRlclR5cGU6ICJfcywgc2hhZGVyVHlwZVN0cmluZyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
CisgICAgYXV0byBzb3VyY2UgPSBpbnNwZWN0b3JQcm9ncmFtLT5yZXF1ZXN0U2hhZGVyU291cmNl
KHNoYWRlclR5cGUpOworICAgIGlmICghc291cmNlKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoIk1pc3Npbmcgc2hhZGVyIG9mIGdpdmVuIHNoYWRlclR5cGUgZm9yIGdpdmVuIHByb2dy
YW1JZCJfcyk7CiAKLSAgICBhdXRvIHNvdXJjZSA9IGluc3BlY3RvclByb2dyYW0tPnJlcXVlc3RT
aGFkZXJTb3VyY2Uoc2hhZGVyVHlwZS52YWx1ZSgpKTsKLSAgICBpZiAoIXNvdXJjZSkgewotICAg
ICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIHNoYWRlciBvZiBnaXZlbiBzaGFkZXJUeXBlIGZv
ciBnaXZlbiBwcm9ncmFtSWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAqb3V0
U291cmNlID0gc291cmNlOworICAgIHJldHVybiBzb3VyY2U7CiB9CiAKLXZvaWQgSW5zcGVjdG9y
Q2FudmFzQWdlbnQ6OnVwZGF0ZVNoYWRlcihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0
IFN0cmluZyYgcHJvZ3JhbUlkLCBjb25zdCBTdHJpbmcmIHNoYWRlclR5cGVTdHJpbmcsIGNvbnN0
IFN0cmluZyYgc291cmNlKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9y
Q2FudmFzQWdlbnQ6OnVwZGF0ZVNoYWRlcihjb25zdCBQcm90b2NvbDo6Q2FudmFzOjpQcm9ncmFt
SWQmIHByb2dyYW1JZCwgUHJvdG9jb2w6OkNhbnZhczo6U2hhZGVyVHlwZSBzaGFkZXJUeXBlLCBj
b25zdCBTdHJpbmcmIHNvdXJjZSkKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JT
dHJpbmc7CisKICAgICBhdXRvIGluc3BlY3RvclByb2dyYW0gPSBhc3NlcnRJbnNwZWN0b3JQcm9n
cmFtKGVycm9yU3RyaW5nLCBwcm9ncmFtSWQpOwogICAgIGlmICghaW5zcGVjdG9yUHJvZ3JhbSkK
LSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJp
bmcpOwogCi0gICAgYXV0byBzaGFkZXJUeXBlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6SW5zcGVj
dG9ySGVscGVyczo6cGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkNhbnZhczo6U2hhZGVyVHlwZT4oc2hhZGVyVHlwZVN0cmluZyk7Ci0gICAgaWYgKCFzaGFkZXJU
eXBlKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gbWFrZVN0cmluZygiVW5rbm93biBzaGFkZXJU
eXBlOiAiX3MsIHNoYWRlclR5cGVTdHJpbmcpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAg
IGlmICghaW5zcGVjdG9yUHJvZ3JhbS0+dXBkYXRlU2hhZGVyKHNoYWRlclR5cGUsIHNvdXJjZSkp
CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiRmFpbGVkIHRvIHVwZGF0ZSBzaGFkZXIg
b2YgZ2l2ZW4gc2hhZGVyVHlwZSBmb3IgZ2l2ZW4gcHJvZ3JhbUlkIl9zKTsKIAotICAgIGlmICgh
aW5zcGVjdG9yUHJvZ3JhbS0+dXBkYXRlU2hhZGVyKHNoYWRlclR5cGUudmFsdWUoKSwgc291cmNl
KSkKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiRmFpbGVkIHRvIHVwZGF0ZSBzaGFkZXIgb2YgZ2l2
ZW4gc2hhZGVyVHlwZSBmb3IgZ2l2ZW4gcHJvZ3JhbUlkIl9zOworICAgIHJldHVybiB7IH07CiB9
CiAKICNpZiBFTkFCTEUoV0VCR0wpCi12b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjpzZXRTaGFk
ZXJQcm9ncmFtRGlzYWJsZWQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcm
IHByb2dyYW1JZCwgYm9vbCBkaXNhYmxlZCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+
IEluc3BlY3RvckNhbnZhc0FnZW50OjpzZXRTaGFkZXJQcm9ncmFtRGlzYWJsZWQoY29uc3QgUHJv
dG9jb2w6OkNhbnZhczo6UHJvZ3JhbUlkJiBwcm9ncmFtSWQsIGJvb2wgZGlzYWJsZWQpCiB7Cisg
ICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAgICAgYXV0byBpbnNwZWN0
b3JQcm9ncmFtID0gYXNzZXJ0SW5zcGVjdG9yUHJvZ3JhbShlcnJvclN0cmluZywgcHJvZ3JhbUlk
KTsKICAgICBpZiAoIWluc3BlY3RvclByb2dyYW0pCi0gICAgICAgIHJldHVybjsKKyAgICAgICAg
cmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgIGluc3BlY3RvclByb2dy
YW0tPnNldERpc2FibGVkKGRpc2FibGVkKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQg
SW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnNldFNoYWRlclByb2dyYW1IaWdobGlnaHRlZChFcnJvclN0
cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgcHJvZ3JhbUlkLCBib29sIGhpZ2hsaWdo
dGVkKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yQ2FudmFzQWdlbnQ6
OnNldFNoYWRlclByb2dyYW1IaWdobGlnaHRlZChjb25zdCBQcm90b2NvbDo6Q2FudmFzOjpQcm9n
cmFtSWQmIHByb2dyYW1JZCwgYm9vbCBoaWdobGlnaHRlZCkKIHsKKyAgICBQcm90b2NvbDo6RXJy
b3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBhdXRvIGluc3BlY3RvclByb2dyYW0gPSBhc3Nl
cnRJbnNwZWN0b3JQcm9ncmFtKGVycm9yU3RyaW5nLCBwcm9ncmFtSWQpOwogICAgIGlmICghaW5z
cGVjdG9yUHJvZ3JhbSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoZXJyb3JTdHJpbmcpOwogCiAgICAgaW5zcGVjdG9yUHJvZ3JhbS0+c2V0SGlnaGxpZ2h0
ZWQoaGlnaGxpZ2h0ZWQpOworCisgICAgcmV0dXJuIHsgfTsKIH0KICNlbmRpZiAvLyBFTkFCTEUo
V0VCR0wpCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKSB8fCBFTkFCTEUoV0VCR1BVKQpAQCAtNDEz
LDcgKzQzMCw3IEBAIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmRpZENyZWF0ZUNhbnZhc1Jl
bmRlcmluZ0NvbnRleHQoQ2FudmFzUmVuZGVyaW5nQ29udGV4CiAgICAgaWYgKG1fcmVjb3JkaW5n
QXV0b0NhcHR1cmVGcmFtZUNvdW50KSB7CiAgICAgICAgIFJlY29yZGluZ09wdGlvbnMgcmVjb3Jk
aW5nT3B0aW9uczsKICAgICAgICAgcmVjb3JkaW5nT3B0aW9ucy5mcmFtZUNvdW50ID0gbV9yZWNv
cmRpbmdBdXRvQ2FwdHVyZUZyYW1lQ291bnQudmFsdWUoKTsKLSAgICAgICAgc3RhcnRSZWNvcmRp
bmcoaW5zcGVjdG9yQ2FudmFzLCBJbnNwZWN0b3I6OlByb3RvY29sOjpSZWNvcmRpbmc6OkluaXRp
YXRvcjo6QXV0b0NhcHR1cmUsIFdURk1vdmUocmVjb3JkaW5nT3B0aW9ucykpOworICAgICAgICBz
dGFydFJlY29yZGluZyhpbnNwZWN0b3JDYW52YXMsIFByb3RvY29sOjpSZWNvcmRpbmc6OkluaXRp
YXRvcjo6QXV0b0NhcHR1cmUsIFdURk1vdmUocmVjb3JkaW5nT3B0aW9ucykpOwogICAgIH0KIH0K
IApAQCAtNTczLDcgKzU5MCw3IEBAIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmNvbnNvbGVT
dGFydFJlY29yZGluZ0NhbnZhcyhDYW52YXNSZW5kZXJpbmdDb250ZXh0JiBjCiAgICAgICAgIGlm
IChKU0M6OkpTVmFsdWUgb3B0aW9uTmFtZSA9IG9wdGlvbnMtPmdldCgmZXhlYywgSlNDOjpJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAibmFtZSIpKSkKICAgICAgICAgICAgIHJlY29yZGluZ09w
dGlvbnMubmFtZSA9IG9wdGlvbk5hbWUudG9XVEZTdHJpbmcoJmV4ZWMpOwogICAgIH0KLSAgICBz
dGFydFJlY29yZGluZygqaW5zcGVjdG9yQ2FudmFzLCBJbnNwZWN0b3I6OlByb3RvY29sOjpSZWNv
cmRpbmc6OkluaXRpYXRvcjo6Q29uc29sZSwgV1RGTW92ZShyZWNvcmRpbmdPcHRpb25zKSk7Cisg
ICAgc3RhcnRSZWNvcmRpbmcoKmluc3BlY3RvckNhbnZhcywgUHJvdG9jb2w6OlJlY29yZGluZzo6
SW5pdGlhdG9yOjpDb25zb2xlLCBXVEZNb3ZlKHJlY29yZGluZ09wdGlvbnMpKTsKIH0KIAogdm9p
ZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6Y29uc29sZVN0b3BSZWNvcmRpbmdDYW52YXMoQ2FudmFz
UmVuZGVyaW5nQ29udGV4dCYgY29udGV4dCkKQEAgLTY5OCw3ICs3MTUsNyBAQCB2b2lkIEluc3Bl
Y3RvckNhbnZhc0FnZW50Ojp3aWxsRGVzdHJveVdlYkdQVVBpcGVsaW5lKFdlYkdQVVBpcGVsaW5l
JiBwaXBlbGluZSkKIH0KICNlbmRpZiAvLyBFTkFCTEUoV0VCR1BVKQogCi12b2lkIEluc3BlY3Rv
ckNhbnZhc0FnZW50OjpzdGFydFJlY29yZGluZyhJbnNwZWN0b3JDYW52YXMmIGluc3BlY3RvckNh
bnZhcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6UmVjb3JkaW5nOjpJbml0aWF0b3IgaW5pdGlhdG9y
LCBSZWNvcmRpbmdPcHRpb25zJiYgcmVjb3JkaW5nT3B0aW9ucykKK3ZvaWQgSW5zcGVjdG9yQ2Fu
dmFzQWdlbnQ6OnN0YXJ0UmVjb3JkaW5nKEluc3BlY3RvckNhbnZhcyYgaW5zcGVjdG9yQ2FudmFz
LCBQcm90b2NvbDo6UmVjb3JkaW5nOjpJbml0aWF0b3IgaW5pdGlhdG9yLCBSZWNvcmRpbmdPcHRp
b25zJiYgcmVjb3JkaW5nT3B0aW9ucykKIHsKICAgICBhdXRvKiBjb250ZXh0ID0gaW5zcGVjdG9y
Q2FudmFzLmNhbnZhc0NvbnRleHQoKTsKICAgICBBU1NFUlQoY29udGV4dCk7CkBAIC04NDAsNyAr
ODU3LDcgQEAgdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6dW5iaW5kQ2FudmFzKEluc3BlY3Rv
ckNhbnZhcyYgaW5zcGVjdG9yQ2FudmFzKQogICAgICAgICBtX2NhbnZhc0Rlc3Ryb3llZFRpbWVy
LnN0YXJ0T25lU2hvdCgwX3MpOwogfQogCi1SZWZQdHI8SW5zcGVjdG9yQ2FudmFzPiBJbnNwZWN0
b3JDYW52YXNBZ2VudDo6YXNzZXJ0SW5zcGVjdG9yQ2FudmFzKEVycm9yU3RyaW5nJiBlcnJvclN0
cmluZywgY29uc3QgU3RyaW5nJiBjYW52YXNJZCkKK1JlZlB0cjxJbnNwZWN0b3JDYW52YXM+IElu
c3BlY3RvckNhbnZhc0FnZW50Ojphc3NlcnRJbnNwZWN0b3JDYW52YXMoUHJvdG9jb2w6OkVycm9y
U3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBjYW52YXNJZCkKIHsKICAgICBhdXRv
IGluc3BlY3RvckNhbnZhcyA9IG1faWRlbnRpZmllclRvSW5zcGVjdG9yQ2FudmFzLmdldChjYW52
YXNJZCk7CiAgICAgaWYgKCFpbnNwZWN0b3JDYW52YXMpIHsKQEAgLTg4NSw3ICs5MDIsNyBAQCB2
b2lkIEluc3BlY3RvckNhbnZhc0FnZW50Ojp1bmJpbmRQcm9ncmFtKEluc3BlY3RvclNoYWRlclBy
b2dyYW0mIGluc3BlY3RvclByb2dyYQogICAgICAgICBtX3Byb2dyYW1EZXN0cm95ZWRUaW1lci5z
dGFydE9uZVNob3QoMF9zKTsKIH0KIAotUmVmUHRyPEluc3BlY3RvclNoYWRlclByb2dyYW0+IElu
c3BlY3RvckNhbnZhc0FnZW50Ojphc3NlcnRJbnNwZWN0b3JQcm9ncmFtKEVycm9yU3RyaW5nJiBl
cnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBwcm9ncmFtSWQpCitSZWZQdHI8SW5zcGVjdG9yU2hh
ZGVyUHJvZ3JhbT4gSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmFzc2VydEluc3BlY3RvclByb2dyYW0o
UHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBwcm9ncmFt
SWQpCiB7CiAgICAgYXV0byBpbnNwZWN0b3JQcm9ncmFtID0gbV9pZGVudGlmaWVyVG9JbnNwZWN0
b3JQcm9ncmFtLmdldChwcm9ncmFtSWQpOwogICAgIGlmICghaW5zcGVjdG9yUHJvZ3JhbSkgewpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDYW52
YXNBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDYW52
YXNBZ2VudC5oCmluZGV4IDBlZjFhZWZiNjQ3ZWFkOTliN2QwZWIyNDNmZDBiNDA4Y2U0NWI2MGYu
Ljg2YmRiNTEyNTY5YTMxMWY3YTI1MDg5NWU4ZmZiYzlkZDllYmNkYzAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ2FudmFzQWdlbnQuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNhbnZhc0FnZW50LmgK
QEAgLTU3LDQzICs1Nyw0MSBAQCBjbGFzcyBXZWJHUFVTd2FwQ2hhaW47CiAjZW5kaWYgLy8gRU5B
QkxFKFdFQkdQVSkKICNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpIHx8IEVOQUJMRShXRUJHUFUpCiAK
LXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCiBjbGFzcyBJbnNwZWN0b3JDYW52YXNBZ2Vu
dCBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3JBZ2VudEJhc2UsIHB1YmxpYyBJbnNwZWN0b3I6OkNh
bnZhc0JhY2tlbmREaXNwYXRjaGVySGFuZGxlciwgcHVibGljIENhbnZhc09ic2VydmVyLCBwdWJs
aWMgQ2FuTWFrZVdlYWtQdHI8SW5zcGVjdG9yQ2FudmFzQWdlbnQ+IHsKICAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShJbnNwZWN0b3JDYW52YXNBZ2VudCk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CiBwdWJsaWM6CiAgICAgSW5zcGVjdG9yQ2FudmFzQWdlbnQoUGFnZUFnZW50Q29udGV4
dCYpOwotICAgIH5JbnNwZWN0b3JDYW52YXNBZ2VudCgpIG92ZXJyaWRlOworICAgIH5JbnNwZWN0
b3JDYW52YXNBZ2VudCgpOwogCiAgICAgLy8gSW5zcGVjdG9yQWdlbnRCYXNlCi0gICAgdm9pZCBk
aWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9udGVuZFJvdXRlciosIElu
c3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXIqKSBvdmVycmlkZTsKLSAgICB2b2lkIHdpbGxEZXN0
cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlzY29ubmVjdFJlYXNvbikgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCBkaXNjYXJkQWdlbnQoKSBvdmVycmlkZTsKKyAgICB2b2lkIGRpZENyZWF0
ZUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kUm91dGVyKiwgSW5zcGVjdG9y
OjpCYWNrZW5kRGlzcGF0Y2hlciopOworICAgIHZvaWQgd2lsbERlc3Ryb3lGcm9udGVuZEFuZEJh
Y2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKTsKKyAgICB2b2lkIGRpc2NhcmRBZ2Vu
dCgpOwogCiAgICAgLy8gQ2FudmFzQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyCi0gICAgdm9pZCBl
bmFibGUoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2b2lkIGRpc2FibGUoRXJyb3JTdHJp
bmcmKSBvdmVycmlkZTsKLSAgICB2b2lkIHJlcXVlc3ROb2RlKEVycm9yU3RyaW5nJiwgY29uc3Qg
U3RyaW5nJiBjYW52YXNJZCwgaW50KiBub2RlSWQpIG92ZXJyaWRlOwotICAgIHZvaWQgcmVxdWVz
dENvbnRlbnQoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGNhbnZhc0lkLCBTdHJpbmcqIGNv
bnRlbnQpIG92ZXJyaWRlOwotICAgIHZvaWQgcmVxdWVzdENsaWVudE5vZGVzKEVycm9yU3RyaW5n
JiwgY29uc3QgU3RyaW5nJiBjYW52YXNJZCwgUmVmUHRyPEpTT046OkFycmF5T2Y8aW50Pj4mKSBv
dmVycmlkZTsKLSAgICB2b2lkIHJlc29sdmVDb250ZXh0KEVycm9yU3RyaW5nJiwgY29uc3QgU3Ry
aW5nJiBjYW52YXNJZCwgY29uc3QgU3RyaW5nKiBvYmplY3RHcm91cCwgUmVmUHRyPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mKSBvdmVycmlkZTsKLSAgICB2b2lk
IHNldFJlY29yZGluZ0F1dG9DYXB0dXJlRnJhbWVDb3VudChFcnJvclN0cmluZyYsIGludCBjb3Vu
dCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzdGFydFJlY29yZGluZyhFcnJvclN0cmluZyYsIGNvbnN0
IFN0cmluZyYgY2FudmFzSWQsIGNvbnN0IGludCogZnJhbWVDb3VudCwgY29uc3QgaW50KiBtZW1v
cnlMaW1pdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzdG9wUmVjb3JkaW5nKEVycm9yU3RyaW5nJiwg
Y29uc3QgU3RyaW5nJiBjYW52YXNJZCkgb3ZlcnJpZGU7CisgICAgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBlbmFibGUoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29s
OjpFcnJvclN0cmluZ09yPHZvaWQ+IGRpc2FibGUoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29s
OjpFcnJvclN0cmluZ09yPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkPiByZXF1ZXN0
Tm9kZShjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpDYW52YXM6OkNhbnZhc0lkJik7CisgICAg
SW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxTdHJpbmc+IHJlcXVlc3RDb250ZW50
KGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6Q2FudmFzSWQmKTsKKyAgICBJbnNw
ZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkPj4+IHJlcXVlc3RDbGllbnROb2Rlcyhjb25zdCBJbnNw
ZWN0b3I6OlByb3RvY29sOjpDYW52YXM6OkNhbnZhc0lkJik7CisgICAgSW5zcGVjdG9yOjpQcm90
b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6UmVt
b3RlT2JqZWN0Pj4gcmVzb2x2ZUNvbnRleHQoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6Q2Fu
dmFzOjpDYW52YXNJZCYsIGNvbnN0IFN0cmluZyYgb2JqZWN0R3JvdXApOworICAgIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc2V0UmVjb3JkaW5nQXV0b0NhcHR1cmVG
cmFtZUNvdW50KGludCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2
b2lkPiBzdGFydFJlY29yZGluZyhjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpDYW52YXM6OkNh
bnZhc0lkJiwgT3B0aW9uYWw8aW50PiYmIGZyYW1lQ291bnQsIE9wdGlvbmFsPGludD4mJiBtZW1v
cnlMaW1pdCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBz
dG9wUmVjb3JkaW5nKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6Q2FudmFzSWQm
KTsKICNpZiBFTkFCTEUoV0VCR0wpIHx8IEVOQUJMRShXRUJHUFUpCi0gICAgdm9pZCByZXF1ZXN0
U2hhZGVyU291cmNlKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBwcm9ncmFtSWQsIGNvbnN0
IFN0cmluZyYgc2hhZGVyVHlwZSwgU3RyaW5nKiBzb3VyY2UpIG92ZXJyaWRlOwotICAgIHZvaWQg
dXBkYXRlU2hhZGVyKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBwcm9ncmFtSWQsIGNvbnN0
IFN0cmluZyYgc2hhZGVyVHlwZSwgY29uc3QgU3RyaW5nJiBzb3VyY2UpIG92ZXJyaWRlOworICAg
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8U3RyaW5nPiByZXF1ZXN0U2hhZGVy
U291cmNlKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6UHJvZ3JhbUlkJiwgSW5z
cGVjdG9yOjpQcm90b2NvbDo6Q2FudmFzOjpTaGFkZXJUeXBlKTsKKyAgICBJbnNwZWN0b3I6OlBy
b3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHVwZGF0ZVNoYWRlcihjb25zdCBJbnNwZWN0b3I6
OlByb3RvY29sOjpDYW52YXM6OlByb2dyYW1JZCYsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZh
czo6U2hhZGVyVHlwZSwgY29uc3QgU3RyaW5nJiBzb3VyY2UpOwogI2lmIEVOQUJMRShXRUJHTCkK
LSAgICB2b2lkIHNldFNoYWRlclByb2dyYW1EaXNhYmxlZChFcnJvclN0cmluZyYsIGNvbnN0IFN0
cmluZyYgcHJvZ3JhbUlkLCBib29sIGRpc2FibGVkKSBvdmVycmlkZTsKLSAgICB2b2lkIHNldFNo
YWRlclByb2dyYW1IaWdobGlnaHRlZChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgcHJvZ3Jh
bUlkLCBib29sIGhpZ2hsaWdodGVkKSBvdmVycmlkZTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29s
OjpFcnJvclN0cmluZ09yPHZvaWQ+IHNldFNoYWRlclByb2dyYW1EaXNhYmxlZChjb25zdCBJbnNw
ZWN0b3I6OlByb3RvY29sOjpDYW52YXM6OlByb2dyYW1JZCYsIGJvb2wgZGlzYWJsZWQpOworICAg
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc2V0U2hhZGVyUHJvZ3Jh
bUhpZ2hsaWdodGVkKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6UHJvZ3JhbUlk
JiwgYm9vbCBoaWdobGlnaHRlZCk7CiAjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKQogI2VuZGlmIC8v
IEVOQUJMRShXRUJHTCkgfHwgRU5BQkxFKFdFQkdQVSkKIAogICAgIC8vIENhbnZhc09ic2VydmVy
Ci0gICAgdm9pZCBjYW52YXNDaGFuZ2VkKENhbnZhc0Jhc2UmLCBjb25zdCBGbG9hdFJlY3QmKSBv
dmVycmlkZTsKLSAgICB2b2lkIGNhbnZhc1Jlc2l6ZWQoQ2FudmFzQmFzZSYpIG92ZXJyaWRlIHsg
fQotICAgIHZvaWQgY2FudmFzRGVzdHJveWVkKENhbnZhc0Jhc2UmKSBvdmVycmlkZTsKKyAgICB2
b2lkIGNhbnZhc0NoYW5nZWQoQ2FudmFzQmFzZSYsIGNvbnN0IEZsb2F0UmVjdCYpOworICAgIHZv
aWQgY2FudmFzUmVzaXplZChDYW52YXNCYXNlJikgeyB9CisgICAgdm9pZCBjYW52YXNEZXN0cm95
ZWQoQ2FudmFzQmFzZSYpOwogCiAgICAgLy8gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uCiAgICAg
dm9pZCBmcmFtZU5hdmlnYXRlZChGcmFtZSYpOwpAQCAtMTM4LDcgKzEzNiw3IEBAIHByaXZhdGU6
CiAgICAgSW5zcGVjdG9yQ2FudmFzJiBiaW5kQ2FudmFzKFdlYkdQVURldmljZSYsIGJvb2wgY2Fw
dHVyZUJhY2t0cmFjZSk7CiAjZW5kaWYgLy8gRU5BQkxFKFdFQkdQVSkKICAgICB2b2lkIHVuYmlu
ZENhbnZhcyhJbnNwZWN0b3JDYW52YXMmKTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yQ2FudmFzPiBh
c3NlcnRJbnNwZWN0b3JDYW52YXMoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGNhbnZhc0lk
KTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yQ2FudmFzPiBhc3NlcnRJbnNwZWN0b3JDYW52YXMoSW5z
cGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGNhbnZhc0lkKTsK
ICAgICBSZWZQdHI8SW5zcGVjdG9yQ2FudmFzPiBmaW5kSW5zcGVjdG9yQ2FudmFzKENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQmKTsKICNpZiBFTkFCTEUoV0VCR1BVKQogICAgIFJlZlB0cjxJbnNwZWN0
b3JDYW52YXM+IGZpbmRJbnNwZWN0b3JDYW52YXMoV2ViR1BVRGV2aWNlJik7CkBAIC0xNDYsNyAr
MTQ0LDcgQEAgcHJpdmF0ZToKIAogI2lmIEVOQUJMRShXRUJHTCkgfHwgRU5BQkxFKFdFQkdQVSkK
ICAgICB2b2lkIHVuYmluZFByb2dyYW0oSW5zcGVjdG9yU2hhZGVyUHJvZ3JhbSYpOwotICAgIFJl
ZlB0cjxJbnNwZWN0b3JTaGFkZXJQcm9ncmFtPiBhc3NlcnRJbnNwZWN0b3JQcm9ncmFtKEVycm9y
U3RyaW5nJiwgY29uc3QgU3RyaW5nJiBwcm9ncmFtSWQpOworICAgIFJlZlB0cjxJbnNwZWN0b3JT
aGFkZXJQcm9ncmFtPiBhc3NlcnRJbnNwZWN0b3JQcm9ncmFtKEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBwcm9ncmFtSWQpOwogI2lmIEVOQUJMRShXRUJH
TCkKICAgICBSZWZQdHI8SW5zcGVjdG9yU2hhZGVyUHJvZ3JhbT4gZmluZEluc3BlY3RvclByb2dy
YW0oV2ViR0xQcm9ncmFtJik7CiAjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01BZ2VudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmNwcAppbmRl
eCA4MzlhNThiNTQ4ODU0ZGU3NTc3MGQyNjMzZDhkNTlhZjU5ZjI0MTEyLi5kYmRiODUxOGM5YTFk
YmUxYWFmNzdiMDIyZjYwYTljMTZkNDQwMzg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmNwcApAQCAtMTI5LDQwICsxMjks
MzkgQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIHN0YXRpYyBjb25zdCBzaXplX3QgbWF4
VGV4dFNpemUgPSAxMDAwMDsKIHN0YXRpYyBjb25zdCBVQ2hhciBlbGxpcHNpc1VDaGFyW10gPSB7
IDB4MjAyNiwgMCB9OwogCi1zdGF0aWMgQ29sb3IgcGFyc2VDb2xvcihjb25zdCBKU09OOjpPYmpl
Y3QqIGNvbG9yT2JqZWN0KQorc3RhdGljIENvbG9yIHBhcnNlQ29sb3IoUmVmUHRyPEpTT046Ok9i
amVjdD4mJiBjb2xvck9iamVjdCkKIHsKICAgICBpZiAoIWNvbG9yT2JqZWN0KQogICAgICAgICBy
ZXR1cm4gQ29sb3I6OnRyYW5zcGFyZW50QmxhY2s7CiAKLSAgICBpbnQgciA9IDA7Ci0gICAgaW50
IGcgPSAwOwotICAgIGludCBiID0gMDsKLSAgICBpZiAoIWNvbG9yT2JqZWN0LT5nZXRJbnRlZ2Vy
KCJyIiwgcikgfHwgIWNvbG9yT2JqZWN0LT5nZXRJbnRlZ2VyKCJnIiwgZykgfHwgIWNvbG9yT2Jq
ZWN0LT5nZXRJbnRlZ2VyKCJiIiwgYikpCisgICAgYXV0byByID0gY29sb3JPYmplY3QtPmdldElu
dGVnZXIoUHJvdG9jb2w6OkRPTTo6UkdCQUNvbG9yOjpyS2V5KTsKKyAgICBhdXRvIGcgPSBjb2xv
ck9iamVjdC0+Z2V0SW50ZWdlcihQcm90b2NvbDo6RE9NOjpSR0JBQ29sb3I6OmdLZXkpOworICAg
IGF1dG8gYiA9IGNvbG9yT2JqZWN0LT5nZXRJbnRlZ2VyKFByb3RvY29sOjpET006OlJHQkFDb2xv
cjo6YktleSk7CisgICAgaWYgKCFyIHx8ICFnIHx8ICFiKQogICAgICAgICByZXR1cm4gQ29sb3I6
OnRyYW5zcGFyZW50QmxhY2s7CiAKLSAgICBkb3VibGUgYSA9IDEuMDsKLSAgICBpZiAoIWNvbG9y
T2JqZWN0LT5nZXREb3VibGUoImEiLCBhKSkKLSAgICAgICAgcmV0dXJuIGNsYW1wVG9Db21wb25l
bnRCeXRlczxTUkdCQT4ociwgZywgYik7Ci0gICAgcmV0dXJuIGNsYW1wVG9Db21wb25lbnRCeXRl
czxTUkdCQT4ociwgZywgYiwgY29udmVydFRvQ29tcG9uZW50Qnl0ZShhKSk7CisgICAgYXV0byBh
ID0gY29sb3JPYmplY3QtPmdldERvdWJsZShQcm90b2NvbDo6RE9NOjpSR0JBQ29sb3I6OmFLZXkp
OworICAgIGlmICghYSkKKyAgICAgICAgcmV0dXJuIGNsYW1wVG9Db21wb25lbnRCeXRlczxTUkdC
QT4oKnIsICpnLCAqYik7CisgICAgcmV0dXJuIGNsYW1wVG9Db21wb25lbnRCeXRlczxTUkdCQT4o
KnIsICpnLCAqYiwgY29udmVydFRvQ29tcG9uZW50Qnl0ZSgqYSkpOwogfQogCi1zdGF0aWMgQ29s
b3IgcGFyc2VDb25maWdDb2xvcihjb25zdCBTdHJpbmcmIGZpZWxkTmFtZSwgY29uc3QgSlNPTjo6
T2JqZWN0KiBjb25maWdPYmplY3QpCitzdGF0aWMgQ29sb3IgcGFyc2VDb25maWdDb2xvcihjb25z
dCBTdHJpbmcmIGZpZWxkTmFtZSwgSlNPTjo6T2JqZWN0JiBjb25maWdPYmplY3QpCiB7Ci0gICAg
UmVmUHRyPEpTT046Ok9iamVjdD4gY29sb3JPYmplY3Q7Ci0gICAgY29uZmlnT2JqZWN0LT5nZXRP
YmplY3QoZmllbGROYW1lLCBjb2xvck9iamVjdCk7Ci0KLSAgICByZXR1cm4gcGFyc2VDb2xvcihj
b2xvck9iamVjdC5nZXQoKSk7CisgICAgcmV0dXJuIHBhcnNlQ29sb3IoY29uZmlnT2JqZWN0Lmdl
dE9iamVjdChmaWVsZE5hbWUpKTsKIH0KIAotc3RhdGljIGJvb2wgcGFyc2VRdWFkKGNvbnN0IEpT
T046OkFycmF5JiBxdWFkQXJyYXksIEZsb2F0UXVhZCogcXVhZCkKK3N0YXRpYyBib29sIHBhcnNl
UXVhZChSZWY8SlNPTjo6QXJyYXk+JiYgcXVhZEFycmF5LCBGbG9hdFF1YWQqIHF1YWQpCiB7CiAg
ICAgY29uc3Qgc2l6ZV90IGNvb3JkaW5hdGVzSW5RdWFkID0gODsKICAgICBkb3VibGUgY29vcmRp
bmF0ZXNbY29vcmRpbmF0ZXNJblF1YWRdOwotICAgIGlmIChxdWFkQXJyYXkubGVuZ3RoKCkgIT0g
Y29vcmRpbmF0ZXNJblF1YWQpCisgICAgaWYgKHF1YWRBcnJheS0+bGVuZ3RoKCkgIT0gY29vcmRp
bmF0ZXNJblF1YWQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGNvb3JkaW5hdGVzSW5RdWFkOyArK2kpIHsKLSAgICAgICAgaWYgKCFxdWFkQXJyYXku
Z2V0KGkpLT5hc0RvdWJsZSgqKGNvb3JkaW5hdGVzICsgaSkpKQorICAgICAgICBhdXRvIGNvb3Jk
aW5hdGUgPSBxdWFkQXJyYXktPmdldChpKS0+YXNEb3VibGUoKTsKKyAgICAgICAgaWYgKCFjb29y
ZGluYXRlKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBjb29yZGluYXRlc1tp
XSA9ICpjb29yZGluYXRlOwogICAgIH0KICAgICBxdWFkLT5zZXRQMShGbG9hdFBvaW50KGNvb3Jk
aW5hdGVzWzBdLCBjb29yZGluYXRlc1sxXSkpOwogICAgIHF1YWQtPnNldFAyKEZsb2F0UG9pbnQo
Y29vcmRpbmF0ZXNbMl0sIGNvb3JkaW5hdGVzWzNdKSk7CkBAIC0yNDMsNyArMjQyLDcgQEAgcHVi
bGljOgogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIGF1dG8qIG5vZGUgPSBkb3duY2Fz
dDxOb2RlPihldmVudC50YXJnZXQoKSk7Ci0gICAgICAgIGludCBub2RlSWQgPSBtX2RvbUFnZW50
LnB1c2hOb2RlUGF0aFRvRnJvbnRlbmQobm9kZSk7CisgICAgICAgIGF1dG8gbm9kZUlkID0gbV9k
b21BZ2VudC5wdXNoTm9kZVBhdGhUb0Zyb250ZW5kKG5vZGUpOwogICAgICAgICBpZiAoIW5vZGVJ
ZCkKICAgICAgICAgICAgIHJldHVybjsKIApAQCAtMzIwLDkgKzMxOSw5IEBAIHZvaWQgSW5zcGVj
dG9yRE9NQWdlbnQ6OndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlz
Y29ubmVjdFJlYXNvCiAgICAgbV9tb3VzZWRPdmVyTm9kZSA9IG51bGxwdHI7CiAgICAgbV9pbnNw
ZWN0ZWROb2RlID0gbnVsbHB0cjsKIAotICAgIEVycm9yU3RyaW5nIGlnbm9yZWQ7CisgICAgUHJv
dG9jb2w6OkVycm9yU3RyaW5nIGlnbm9yZWQ7CiAgICAgc2V0U2VhcmNoaW5nRm9yTm9kZShpZ25v
cmVkLCBmYWxzZSwgbnVsbHB0ciwgZmFsc2UpOwotICAgIGhpZGVIaWdobGlnaHQoaWdub3JlZCk7
CisgICAgaGlkZUhpZ2hsaWdodCgpOwogCiAgICAgbV9pbnN0cnVtZW50aW5nQWdlbnRzLnNldFBl
cnNpc3RlbnRET01BZ2VudChudWxscHRyKTsKICAgICBtX2RvY3VtZW50UmVxdWVzdGVkID0gZmFs
c2U7CkBAIC0zNzQsOSArMzczLDkgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6cmVsZWFzZURh
bmdsaW5nTm9kZXMoKQogICAgIG1fZGFuZ2xpbmdOb2RlVG9JZE1hcHMuY2xlYXIoKTsKIH0KIAot
aW50IEluc3BlY3RvckRPTUFnZW50OjpiaW5kKE5vZGUqIG5vZGUsIE5vZGVUb0lkTWFwKiBub2Rl
c01hcCkKK1Byb3RvY29sOjpET006Ok5vZGVJZCBJbnNwZWN0b3JET01BZ2VudDo6YmluZChOb2Rl
KiBub2RlLCBOb2RlVG9JZE1hcCogbm9kZXNNYXApCiB7Ci0gICAgaW50IGlkID0gbm9kZXNNYXAt
PmdldChub2RlKTsKKyAgICBhdXRvIGlkID0gbm9kZXNNYXAtPmdldChub2RlKTsKICAgICBpZiAo
aWQpCiAgICAgICAgIHJldHVybiBpZDsKICAgICBpZCA9IG1fbGFzdE5vZGVJZCsrOwpAQCAtMzg4
LDcgKzM4Nyw3IEBAIGludCBJbnNwZWN0b3JET01BZ2VudDo6YmluZChOb2RlKiBub2RlLCBOb2Rl
VG9JZE1hcCogbm9kZXNNYXApCiAKIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnVuYmluZChOb2Rl
KiBub2RlLCBOb2RlVG9JZE1hcCogbm9kZXNNYXApCiB7Ci0gICAgaW50IGlkID0gbm9kZXNNYXAt
PmdldChub2RlKTsKKyAgICBhdXRvIGlkID0gbm9kZXNNYXAtPmdldChub2RlKTsKICAgICBpZiAo
IWlkKQogICAgICAgICByZXR1cm47CiAKQEAgLTQyMiw3ICs0MjEsNyBAQCB2b2lkIEluc3BlY3Rv
ckRPTUFnZW50Ojp1bmJpbmQoTm9kZSogbm9kZSwgTm9kZVRvSWRNYXAqIG5vZGVzTWFwKQogICAg
IH0KIH0KIAotTm9kZSogSW5zcGVjdG9yRE9NQWdlbnQ6OmFzc2VydE5vZGUoRXJyb3JTdHJpbmcm
IGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkKQorTm9kZSogSW5zcGVjdG9yRE9NQWdlbnQ6OmFzc2Vy
dE5vZGUoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgUHJvdG9jb2w6OkRPTTo6
Tm9kZUlkIG5vZGVJZCkKIHsKICAgICBOb2RlKiBub2RlID0gbm9kZUZvcklkKG5vZGVJZCk7CiAg
ICAgaWYgKCFub2RlKSB7CkBAIC00MzIsNyArNDMxLDcgQEAgTm9kZSogSW5zcGVjdG9yRE9NQWdl
bnQ6OmFzc2VydE5vZGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkKQogICAg
IHJldHVybiBub2RlOwogfQogCi1Eb2N1bWVudCogSW5zcGVjdG9yRE9NQWdlbnQ6OmFzc2VydERv
Y3VtZW50KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJZCkKK0RvY3VtZW50KiBJ
bnNwZWN0b3JET01BZ2VudDo6YXNzZXJ0RG9jdW1lbnQoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBl
cnJvclN0cmluZywgUHJvdG9jb2w6OkRPTTo6Tm9kZUlkIG5vZGVJZCkKIHsKICAgICBOb2RlKiBu
b2RlID0gYXNzZXJ0Tm9kZShlcnJvclN0cmluZywgbm9kZUlkKTsKICAgICBpZiAoIW5vZGUpCkBA
IC00NDQsNyArNDQzLDcgQEAgRG9jdW1lbnQqIEluc3BlY3RvckRPTUFnZW50Ojphc3NlcnREb2N1
bWVudChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQKICAgICByZXR1cm4gZG93
bmNhc3Q8RG9jdW1lbnQ+KG5vZGUpOwogfQogCi1FbGVtZW50KiBJbnNwZWN0b3JET01BZ2VudDo6
YXNzZXJ0RWxlbWVudChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQpCitFbGVt
ZW50KiBJbnNwZWN0b3JET01BZ2VudDo6YXNzZXJ0RWxlbWVudChQcm90b2NvbDo6RXJyb3JTdHJp
bmcmIGVycm9yU3RyaW5nLCBQcm90b2NvbDo6RE9NOjpOb2RlSWQgbm9kZUlkKQogewogICAgIE5v
ZGUqIG5vZGUgPSBhc3NlcnROb2RlKGVycm9yU3RyaW5nLCBub2RlSWQpOwogICAgIGlmICghbm9k
ZSkKQEAgLTQ1Niw3ICs0NTUsNyBAQCBFbGVtZW50KiBJbnNwZWN0b3JET01BZ2VudDo6YXNzZXJ0
RWxlbWVudChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQpCiAgICAgcmV0dXJu
IGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpOwogfQogCi1Ob2RlKiBJbnNwZWN0b3JET01BZ2VudDo6
YXNzZXJ0RWRpdGFibGVOb2RlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJZCkK
K05vZGUqIEluc3BlY3RvckRPTUFnZW50Ojphc3NlcnRFZGl0YWJsZU5vZGUoUHJvdG9jb2w6OkVy
cm9yU3RyaW5nJiBlcnJvclN0cmluZywgUHJvdG9jb2w6OkRPTTo6Tm9kZUlkIG5vZGVJZCkKIHsK
ICAgICBOb2RlKiBub2RlID0gYXNzZXJ0Tm9kZShlcnJvclN0cmluZywgbm9kZUlkKTsKICAgICBp
ZiAoIW5vZGUpCkBAIC00NzIsNyArNDcxLDcgQEAgTm9kZSogSW5zcGVjdG9yRE9NQWdlbnQ6OmFz
c2VydEVkaXRhYmxlTm9kZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQKICAg
ICByZXR1cm4gbm9kZTsKIH0KIAotRWxlbWVudCogSW5zcGVjdG9yRE9NQWdlbnQ6OmFzc2VydEVk
aXRhYmxlRWxlbWVudChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQpCitFbGVt
ZW50KiBJbnNwZWN0b3JET01BZ2VudDo6YXNzZXJ0RWRpdGFibGVFbGVtZW50KFByb3RvY29sOjpF
cnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIFByb3RvY29sOjpET006Ok5vZGVJZCBub2RlSWQpCiB7
CiAgICAgTm9kZSogbm9kZSA9IGFzc2VydEVkaXRhYmxlTm9kZShlcnJvclN0cmluZywgbm9kZUlk
KTsKICAgICBpZiAoIW5vZGUpCkBAIC00ODQsMjcgKzQ4MywyNyBAQCBFbGVtZW50KiBJbnNwZWN0
b3JET01BZ2VudDo6YXNzZXJ0RWRpdGFibGVFbGVtZW50KEVycm9yU3RyaW5nJiBlcnJvclN0cmlu
ZywgaW50CiAgICAgcmV0dXJuIGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpOwogfQogCi12b2lkIElu
c3BlY3RvckRPTUFnZW50OjpnZXREb2N1bWVudChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIFJl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+JiByb290KQorUHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8UmVmPFByb3RvY29sOjpET006Ok5vZGU+PiBJbnNwZWN0b3JET01BZ2VudDo6
Z2V0RG9jdW1lbnQoKQogewogICAgIG1fZG9jdW1lbnRSZXF1ZXN0ZWQgPSB0cnVlOwogCi0gICAg
aWYgKCFtX2RvY3VtZW50KSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIkludGVybmFsIGVycm9y
OiBtaXNzaW5nIGRvY3VtZW50Il9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICgh
bV9kb2N1bWVudCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJJbnRlcm5hbCBlcnJv
cjogbWlzc2luZyBkb2N1bWVudCJfcyk7CiAKICAgICAvLyBSZXNldCBiYWNrZW5kIHN0YXRlLgog
ICAgIFJlZlB0cjxEb2N1bWVudD4gZG9jdW1lbnQgPSBtX2RvY3VtZW50OwogICAgIHJlc2V0KCk7
CiAgICAgbV9kb2N1bWVudCA9IGRvY3VtZW50OwogCi0gICAgcm9vdCA9IGJ1aWxkT2JqZWN0Rm9y
Tm9kZShtX2RvY3VtZW50LmdldCgpLCAyLCAmbV9kb2N1bWVudE5vZGVUb0lkTWFwKTsKKyAgICBh
dXRvIHJvb3QgPSBidWlsZE9iamVjdEZvck5vZGUobV9kb2N1bWVudC5nZXQoKSwgMiwgJm1fZG9j
dW1lbnROb2RlVG9JZE1hcCk7CiAKICAgICBpZiAobV9ub2RlVG9Gb2N1cykKICAgICAgICAgZm9j
dXNOb2RlKCk7CisKKyAgICByZXR1cm4gV1RGTW92ZShyb290KTsKIH0KIAotdm9pZCBJbnNwZWN0
b3JET01BZ2VudDo6cHVzaENoaWxkTm9kZXNUb0Zyb250ZW5kKGludCBub2RlSWQsIGludCBkZXB0
aCkKK3ZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnB1c2hDaGlsZE5vZGVzVG9Gcm9udGVuZChQcm90
b2NvbDo6RE9NOjpOb2RlSWQgbm9kZUlkLCBpbnQgZGVwdGgpCiB7CiAgICAgTm9kZSogbm9kZSA9
IG5vZGVGb3JJZChub2RlSWQpOwogICAgIGlmICghbm9kZSB8fCAobm9kZS0+bm9kZVR5cGUoKSAh
PSBOb2RlOjpFTEVNRU5UX05PREUgJiYgbm9kZS0+bm9kZVR5cGUoKSAhPSBOb2RlOjpET0NVTUVO
VF9OT0RFICYmIG5vZGUtPm5vZGVUeXBlKCkgIT0gTm9kZTo6RE9DVU1FTlRfRlJBR01FTlRfTk9E
RSkpCkBAIC01MTksNyArNTE4LDcgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6cHVzaENoaWxk
Tm9kZXNUb0Zyb250ZW5kKGludCBub2RlSWQsIGludCBkZXB0aCkKICAgICAgICAgZGVwdGgtLTsK
IAogICAgICAgICBmb3IgKG5vZGUgPSBpbm5lckZpcnN0Q2hpbGQobm9kZSk7IG5vZGU7IG5vZGUg
PSBpbm5lck5leHRTaWJsaW5nKG5vZGUpKSB7Ci0gICAgICAgICAgICBpbnQgY2hpbGROb2RlSWQg
PSBub2RlTWFwLT5nZXQobm9kZSk7CisgICAgICAgICAgICBhdXRvIGNoaWxkTm9kZUlkID0gbm9k
ZU1hcC0+Z2V0KG5vZGUpOwogICAgICAgICAgICAgQVNTRVJUKGNoaWxkTm9kZUlkKTsKICAgICAg
ICAgICAgIHB1c2hDaGlsZE5vZGVzVG9Gcm9udGVuZChjaGlsZE5vZGVJZCwgZGVwdGgpOwogICAg
ICAgICB9CkBAIC01NDEsMTggKzU0MCwxOCBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpkaXNj
YXJkQmluZGluZ3MoKQogICAgIG1fY2hpbGRyZW5SZXF1ZXN0ZWQuY2xlYXIoKTsKIH0KIAotaW50
IEluc3BlY3RvckRPTUFnZW50OjpwdXNoTm9kZVRvRnJvbnRlbmQoTm9kZSogbm9kZVRvUHVzaCkK
K1Byb3RvY29sOjpET006Ok5vZGVJZCBJbnNwZWN0b3JET01BZ2VudDo6cHVzaE5vZGVUb0Zyb250
ZW5kKE5vZGUqIG5vZGVUb1B1c2gpCiB7CiAgICAgaWYgKCFub2RlVG9QdXNoKQogICAgICAgICBy
ZXR1cm4gMDsKIAogICAgIC8vIEZJWE1FOiA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMjEzNDk5PiBX
ZWIgSW5zcGVjdG9yOiBhbGxvdyBET00gbm9kZXMgdG8gYmUgaW5zdHJ1bWVudGVkIGF0IGFueSBw
b2ludCwgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZSBtYWluIGRvY3VtZW50IGhhcyBhbHNvIGJl
ZW4gaW5zdHJ1bWVudGVkCiAKLSAgICBFcnJvclN0cmluZyBpZ25vcmVkOworICAgIFByb3RvY29s
OjpFcnJvclN0cmluZyBpZ25vcmVkOwogICAgIHJldHVybiBwdXNoTm9kZVRvRnJvbnRlbmQoaWdu
b3JlZCwgYm91bmROb2RlSWQoJm5vZGVUb1B1c2gtPmRvY3VtZW50KCkpLCBub2RlVG9QdXNoKTsK
IH0KIAotaW50IEluc3BlY3RvckRPTUFnZW50OjpwdXNoTm9kZVRvRnJvbnRlbmQoRXJyb3JTdHJp
bmcmIGVycm9yU3RyaW5nLCBpbnQgZG9jdW1lbnROb2RlSWQsIE5vZGUqIG5vZGVUb1B1c2gpCitQ
cm90b2NvbDo6RE9NOjpOb2RlSWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnB1c2hOb2RlVG9Gcm9udGVu
ZChQcm90b2NvbDo6RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBQcm90b2NvbDo6RE9NOjpOb2Rl
SWQgZG9jdW1lbnROb2RlSWQsIE5vZGUqIG5vZGVUb1B1c2gpCiB7CiAgICAgRG9jdW1lbnQqIGRv
Y3VtZW50ID0gYXNzZXJ0RG9jdW1lbnQoZXJyb3JTdHJpbmcsIGRvY3VtZW50Tm9kZUlkKTsKICAg
ICBpZiAoIWRvY3VtZW50KQpAQCAtNTY1LDcgKzU2NCw3IEBAIGludCBJbnNwZWN0b3JET01BZ2Vu
dDo6cHVzaE5vZGVUb0Zyb250ZW5kKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IGRvY3Vt
ZW50CiAgICAgcmV0dXJuIHB1c2hOb2RlUGF0aFRvRnJvbnRlbmQoZXJyb3JTdHJpbmcsIG5vZGVU
b1B1c2gpOwogfQogCi1Ob2RlKiBJbnNwZWN0b3JET01BZ2VudDo6bm9kZUZvcklkKGludCBpZCkK
K05vZGUqIEluc3BlY3RvckRPTUFnZW50Ojpub2RlRm9ySWQoUHJvdG9jb2w6OkRPTTo6Tm9kZUlk
IGlkKQogewogICAgIGlmICghbV9pZFRvTm9kZS5pc1ZhbGlkS2V5KGlkKSkKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CkBAIC01NzMsNyArNTcyLDcgQEAgTm9kZSogSW5zcGVjdG9yRE9NQWdlbnQ6
Om5vZGVGb3JJZChpbnQgaWQpCiAgICAgcmV0dXJuIG1faWRUb05vZGUuZ2V0KGlkKTsKIH0KIAot
dm9pZCBJbnNwZWN0b3JET01BZ2VudDo6cmVxdWVzdENoaWxkTm9kZXMoRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBpbnQgbm9kZUlkLCBjb25zdCBpbnQqIGRlcHRoKQorUHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yRE9NQWdlbnQ6OnJlcXVlc3RDaGlsZE5vZGVzKFByb3Rv
Y29sOjpET006Ok5vZGVJZCBub2RlSWQsIE9wdGlvbmFsPGludD4mJiBkZXB0aCkKIHsKICAgICBp
bnQgc2FuaXRpemVkRGVwdGg7CiAKQEAgLTU4Myw2NCArNTgyLDY0IEBAIHZvaWQgSW5zcGVjdG9y
RE9NQWdlbnQ6OnJlcXVlc3RDaGlsZE5vZGVzKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50
IG5vZGVJZCwKICAgICAgICAgc2FuaXRpemVkRGVwdGggPSBJTlRfTUFYOwogICAgIGVsc2UgaWYg
KCpkZXB0aCA+IDApCiAgICAgICAgIHNhbml0aXplZERlcHRoID0gKmRlcHRoOwotICAgIGVsc2Ug
ewotICAgICAgICBlcnJvclN0cmluZyA9ICJVbmV4cGVjdGVkIHZhbHVlIGJlbG93IC0xIGZvciBn
aXZlbiBkZXB0aCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBlbHNlCisgICAgICAg
IHJldHVybiBtYWtlVW5leHBlY3RlZCgiVW5leHBlY3RlZCB2YWx1ZSBiZWxvdyAtMSBmb3IgZ2l2
ZW4gZGVwdGgiX3MpOwogCiAgICAgcHVzaENoaWxkTm9kZXNUb0Zyb250ZW5kKG5vZGVJZCwgc2Fu
aXRpemVkRGVwdGgpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01B
Z2VudDo6cXVlcnlTZWxlY3RvcihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQs
IGNvbnN0IFN0cmluZyYgc2VsZWN0b3JzLCBpbnQqIGVsZW1lbnRJZCkKK1Byb3RvY29sOjpFcnJv
clN0cmluZ09yPFByb3RvY29sOjpET006Ok5vZGVJZD4gSW5zcGVjdG9yRE9NQWdlbnQ6OnF1ZXJ5
U2VsZWN0b3IoUHJvdG9jb2w6OkRPTTo6Tm9kZUlkIG5vZGVJZCwgY29uc3QgU3RyaW5nJiBzZWxl
Y3RvcikKIHsKLSAgICAqZWxlbWVudElkID0gMDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcg
ZXJyb3JTdHJpbmc7CisKICAgICBOb2RlKiBub2RlID0gYXNzZXJ0Tm9kZShlcnJvclN0cmluZywg
bm9kZUlkKTsKICAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIWlzPENv
bnRhaW5lck5vZGU+KCpub2RlKSkgewotICAgICAgICBhc3NlcnRFbGVtZW50KGVycm9yU3RyaW5n
LCBub2RlSWQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgICAgICByZXR1cm4gbWFrZVVu
ZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOworICAgIGlmICghaXM8Q29udGFpbmVyTm9kZT4oKm5vZGUp
KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk5vZGUgZm9yIGdpdmVuIG5vZGVJZCBp
cyBub3QgYSBjb250YWluZXIgbm9kZSJfcyk7CiAKLSAgICBhdXRvIHF1ZXJ5UmVzdWx0ID0gZG93
bmNhc3Q8Q29udGFpbmVyTm9kZT4oKm5vZGUpLnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3JzKTsKLSAg
ICBpZiAocXVlcnlSZXN1bHQuaGFzRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcg
PSAiRE9NIEVycm9yIHdoaWxlIHF1ZXJ5aW5nIHdpdGggZ2l2ZW4gc2VsZWN0b3JzIl9zOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQorICAgIGF1dG8gcXVlcnlSZXN1bHQgPSBkb3duY2FzdDxDb250
YWluZXJOb2RlPigqbm9kZSkucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7CisgICAgaWYgKHF1ZXJ5
UmVzdWx0Lmhhc0V4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoSW5z
cGVjdG9yRE9NQWdlbnQ6OnRvRXJyb3JTdHJpbmcocXVlcnlSZXN1bHQucmVsZWFzZUV4Y2VwdGlv
bigpKSk7CiAKLSAgICBpZiAoYXV0byogZWxlbWVudCA9IHF1ZXJ5UmVzdWx0LnJlbGVhc2VSZXR1
cm5WYWx1ZSgpKQotICAgICAgICAqZWxlbWVudElkID0gcHVzaE5vZGVQYXRoVG9Gcm9udGVuZChl
cnJvclN0cmluZywgZWxlbWVudCk7CisgICAgYXV0byByZXN1bHROb2RlSWQgPSBwdXNoTm9kZVBh
dGhUb0Zyb250ZW5kKGVycm9yU3RyaW5nLCBxdWVyeVJlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUo
KSk7CisgICAgaWYgKCFyZXN1bHROb2RlSWQpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3Rl
ZChlcnJvclN0cmluZyk7CisKKyAgICByZXR1cm4gcmVzdWx0Tm9kZUlkOwogfQogCi12b2lkIElu
c3BlY3RvckRPTUFnZW50OjpxdWVyeVNlbGVjdG9yQWxsKEVycm9yU3RyaW5nJiBlcnJvclN0cmlu
ZywgaW50IG5vZGVJZCwgY29uc3QgU3RyaW5nJiBzZWxlY3RvcnMsIFJlZlB0cjxKU09OOjpBcnJh
eU9mPGludD4+JiByZXN1bHQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SlNPTjo6QXJy
YXlPZjxQcm90b2NvbDo6RE9NOjpOb2RlSWQ+Pj4gSW5zcGVjdG9yRE9NQWdlbnQ6OnF1ZXJ5U2Vs
ZWN0b3JBbGwoUHJvdG9jb2w6OkRPTTo6Tm9kZUlkIG5vZGVJZCwgY29uc3QgU3RyaW5nJiBzZWxl
Y3RvcikKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBO
b2RlKiBub2RlID0gYXNzZXJ0Tm9kZShlcnJvclN0cmluZywgbm9kZUlkKTsKICAgICBpZiAoIW5v
ZGUpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIWlzPENvbnRhaW5lck5vZGU+KCpub2RlKSkg
ewotICAgICAgICBhc3NlcnRFbGVtZW50KGVycm9yU3RyaW5nLCBub2RlSWQpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcp
OworICAgIGlmICghaXM8Q29udGFpbmVyTm9kZT4oKm5vZGUpKQorICAgICAgICByZXR1cm4gbWFr
ZVVuZXhwZWN0ZWQoIk5vZGUgZm9yIGdpdmVuIG5vZGVJZCBpcyBub3QgYSBjb250YWluZXIgbm9k
ZSJfcyk7CiAKLSAgICBhdXRvIHF1ZXJ5UmVzdWx0ID0gZG93bmNhc3Q8Q29udGFpbmVyTm9kZT4o
Km5vZGUpLnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3JzKTsKLSAgICBpZiAocXVlcnlSZXN1bHQu
aGFzRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiRE9NIEVycm9yIHdoaWxl
IHF1ZXJ5aW5nIHdpdGggZ2l2ZW4gc2VsZWN0b3JzIl9zOwotICAgICAgICByZXR1cm47Ci0gICAg
fQorICAgIGF1dG8gcXVlcnlSZXN1bHQgPSBkb3duY2FzdDxDb250YWluZXJOb2RlPigqbm9kZSku
cXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7CisgICAgaWYgKHF1ZXJ5UmVzdWx0Lmhhc0V4Y2Vw
dGlvbigpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoSW5zcGVjdG9yRE9NQWdlbnQ6
OnRvRXJyb3JTdHJpbmcocXVlcnlSZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpKSk7CiAKICAgICBh
dXRvIG5vZGVzID0gcXVlcnlSZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCk7Ci0gICAgcmVzdWx0
ID0gSlNPTjo6QXJyYXlPZjxpbnQ+OjpjcmVhdGUoKTsKKworICAgIGF1dG8gbm9kZUlkcyA9IEpT
T046OkFycmF5T2Y8UHJvdG9jb2w6OkRPTTo6Tm9kZUlkPjo6Y3JlYXRlKCk7CiAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG5vZGVzLT5sZW5ndGgoKTsgKytpKQotICAgICAgICByZXN1bHQt
PmFkZEl0ZW0ocHVzaE5vZGVQYXRoVG9Gcm9udGVuZChub2Rlcy0+aXRlbShpKSkpOworICAgICAg
ICBub2RlSWRzLT5hZGRJdGVtKHB1c2hOb2RlUGF0aFRvRnJvbnRlbmQobm9kZXMtPml0ZW0oaSkp
KTsKKyAgICByZXR1cm4gV1RGTW92ZShub2RlSWRzKTsKIH0KIAotaW50IEluc3BlY3RvckRPTUFn
ZW50OjpwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKE5vZGUqIG5vZGVUb1B1c2gpCitQcm90b2NvbDo6
RE9NOjpOb2RlSWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnB1c2hOb2RlUGF0aFRvRnJvbnRlbmQoTm9k
ZSogbm9kZVRvUHVzaCkKIHsKLSAgICBFcnJvclN0cmluZyBpZ25vcmVkOworICAgIFByb3RvY29s
OjpFcnJvclN0cmluZyBpZ25vcmVkOwogICAgIHJldHVybiBwdXNoTm9kZVBhdGhUb0Zyb250ZW5k
KGlnbm9yZWQsIG5vZGVUb1B1c2gpOwogfQogCi1pbnQgSW5zcGVjdG9yRE9NQWdlbnQ6OnB1c2hO
b2RlUGF0aFRvRnJvbnRlbmQoRXJyb3JTdHJpbmcgZXJyb3JTdHJpbmcsIE5vZGUqIG5vZGVUb1B1
c2gpCitQcm90b2NvbDo6RE9NOjpOb2RlSWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnB1c2hOb2RlUGF0
aFRvRnJvbnRlbmQoUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nLCBOb2RlKiBub2Rl
VG9QdXNoKQogewogICAgIEFTU0VSVChub2RlVG9QdXNoKTsgIC8vIEludmFsaWQgaW5wdXQKIApA
QCAtNjU2LDggKzY1NSw3IEBAIGludCBJbnNwZWN0b3JET01BZ2VudDo6cHVzaE5vZGVQYXRoVG9G
cm9udGVuZChFcnJvclN0cmluZyBlcnJvclN0cmluZywgTm9kZSogbm9kCiAgICAgfQogCiAgICAg
Ly8gUmV0dXJuIGlkIGluIGNhc2UgdGhlIG5vZGUgaXMga25vd24uCi0gICAgaW50IHJlc3VsdCA9
IG1fZG9jdW1lbnROb2RlVG9JZE1hcC5nZXQobm9kZVRvUHVzaCk7Ci0gICAgaWYgKHJlc3VsdCkK
KyAgICBpZiAoYXV0byByZXN1bHQgPSBtX2RvY3VtZW50Tm9kZVRvSWRNYXAuZ2V0KG5vZGVUb1B1
c2gpKQogICAgICAgICByZXR1cm4gcmVzdWx0OwogCiAgICAgTm9kZSogbm9kZSA9IG5vZGVUb1B1
c2g7CkBAIC02NzEsNyArNjY5LDcgQEAgaW50IEluc3BlY3RvckRPTUFnZW50OjpwdXNoTm9kZVBh
dGhUb0Zyb250ZW5kKEVycm9yU3RyaW5nIGVycm9yU3RyaW5nLCBOb2RlKiBub2QKICAgICAgICAg
ICAgIGF1dG8gbmV3TWFwID0gbWFrZVVuaXF1ZTxOb2RlVG9JZE1hcD4oKTsKICAgICAgICAgICAg
IGRhbmdsaW5nTWFwID0gbmV3TWFwLmdldCgpOwogICAgICAgICAgICAgbV9kYW5nbGluZ05vZGVU
b0lkTWFwcy5hcHBlbmQobmV3TWFwLnJlbGVhc2UoKSk7Ci0gICAgICAgICAgICBhdXRvIGNoaWxk
cmVuID0gSlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+OjpjcmVh
dGUoKTsKKyAgICAgICAgICAgIGF1dG8gY2hpbGRyZW4gPSBKU09OOjpBcnJheU9mPFByb3RvY29s
OjpET006Ok5vZGU+OjpjcmVhdGUoKTsKICAgICAgICAgICAgIGNoaWxkcmVuLT5hZGRJdGVtKGJ1
aWxkT2JqZWN0Rm9yTm9kZShub2RlLCAwLCBkYW5nbGluZ01hcCkpOwogICAgICAgICAgICAgbV9m
cm9udGVuZERpc3BhdGNoZXItPnNldENoaWxkTm9kZXMoMCwgV1RGTW92ZShjaGlsZHJlbikpOwog
ICAgICAgICAgICAgYnJlYWs7CkBAIC02ODYsMjIxICs2ODQsMjUyIEBAIGludCBJbnNwZWN0b3JE
T01BZ2VudDo6cHVzaE5vZGVQYXRoVG9Gcm9udGVuZChFcnJvclN0cmluZyBlcnJvclN0cmluZywg
Tm9kZSogbm9kCiAKICAgICBOb2RlVG9JZE1hcCogbWFwID0gZGFuZ2xpbmdNYXAgPyBkYW5nbGlu
Z01hcCA6ICZtX2RvY3VtZW50Tm9kZVRvSWRNYXA7CiAgICAgZm9yIChpbnQgaSA9IHBhdGguc2l6
ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKLSAgICAgICAgaW50IG5vZGVJZCA9IG1hcC0+Z2V0KHBh
dGguYXQoaSkpOworICAgICAgICBhdXRvIG5vZGVJZCA9IG1hcC0+Z2V0KHBhdGguYXQoaSkpOwog
ICAgICAgICBBU1NFUlQobm9kZUlkKTsKICAgICAgICAgcHVzaENoaWxkTm9kZXNUb0Zyb250ZW5k
KG5vZGVJZCk7CiAgICAgfQogICAgIHJldHVybiBtYXAtPmdldChub2RlVG9QdXNoKTsKIH0KIAot
aW50IEluc3BlY3RvckRPTUFnZW50Ojpib3VuZE5vZGVJZChjb25zdCBOb2RlKiBub2RlKQorUHJv
dG9jb2w6OkRPTTo6Tm9kZUlkIEluc3BlY3RvckRPTUFnZW50Ojpib3VuZE5vZGVJZChjb25zdCBO
b2RlKiBub2RlKQogewogICAgIHJldHVybiBtX2RvY3VtZW50Tm9kZVRvSWRNYXAuZ2V0KGNvbnN0
X2Nhc3Q8Tm9kZSo+KG5vZGUpKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c2V0QXR0
cmlidXRlVmFsdWUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgZWxlbWVudElkLCBjb25z
dCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCitQcm90b2NvbDo6RXJyb3JTdHJp
bmdPcjx2b2lkPiBJbnNwZWN0b3JET01BZ2VudDo6c2V0QXR0cmlidXRlVmFsdWUoUHJvdG9jb2w6
OkRPTTo6Tm9kZUlkIG5vZGVJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZh
bHVlKQogewotICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBhc3NlcnRFZGl0YWJsZUVsZW1lbnQoZXJy
b3JTdHJpbmcsIGVsZW1lbnRJZCk7Ci0gICAgaWYgKCFlbGVtZW50KQotICAgICAgICByZXR1cm47
CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOwogCi0gICAgbV9kb21FZGl0
b3ItPnNldEF0dHJpYnV0ZSgqZWxlbWVudCwgbmFtZSwgdmFsdWUsIGVycm9yU3RyaW5nKTsKKyAg
ICBFbGVtZW50KiBlbGVtZW50ID0gYXNzZXJ0RWRpdGFibGVFbGVtZW50KGVycm9yU3RyaW5nLCBu
b2RlSWQpOworICAgIGlmICghZWxlbWVudCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVk
KGVycm9yU3RyaW5nKTsKKworICAgIGlmICghbV9kb21FZGl0b3ItPnNldEF0dHJpYnV0ZSgqZWxl
bWVudCwgbmFtZSwgdmFsdWUsIGVycm9yU3RyaW5nKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4
cGVjdGVkKGVycm9yU3RyaW5nKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVj
dG9yRE9NQWdlbnQ6OnNldEF0dHJpYnV0ZXNBc1RleHQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5n
LCBpbnQgZWxlbWVudElkLCBjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFN0cmluZyogbmFtZSkK
K1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRPTUFnZW50OjpzZXRBdHRy
aWJ1dGVzQXNUZXh0KFByb3RvY29sOjpET006Ok5vZGVJZCBub2RlSWQsIGNvbnN0IFN0cmluZyYg
dGV4dCwgY29uc3QgU3RyaW5nJiBuYW1lKQogewotICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBhc3Nl
cnRFZGl0YWJsZUVsZW1lbnQoZXJyb3JTdHJpbmcsIGVsZW1lbnRJZCk7CisgICAgUHJvdG9jb2w6
OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCisgICAgRWxlbWVudCogZWxlbWVudCA9IGFzc2Vy
dEVkaXRhYmxlRWxlbWVudChlcnJvclN0cmluZywgbm9kZUlkKTsKICAgICBpZiAoIWVsZW1lbnQp
Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3Ry
aW5nKTsKIAogICAgIGF1dG8gcGFyc2VkRWxlbWVudCA9IGNyZWF0ZUhUTUxFbGVtZW50KGVsZW1l
bnQtPmRvY3VtZW50KCksIHNwYW5UYWcpOwogICAgIGF1dG8gcmVzdWx0ID0gcGFyc2VkRWxlbWVu
dC5nZXQoKS5zZXRJbm5lckhUTUwoIjxzcGFuICIgKyB0ZXh0ICsgIj48L3NwYW4+Iik7Ci0gICAg
aWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkgewotICAgICAgICBlcnJvclN0cmluZyA9IHRvRXJy
b3JTdHJpbmcocmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKSk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9CisgICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKEluc3BlY3RvckRPTUFnZW50Ojp0b0Vycm9yU3RyaW5nKHJlc3VsdC5yZWxlYXNl
RXhjZXB0aW9uKCkpKTsKIAogICAgIE5vZGUqIGNoaWxkID0gcGFyc2VkRWxlbWVudC0+Zmlyc3RD
aGlsZCgpOwotICAgIGlmICghY2hpbGQpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiQ291bGQg
bm90IHBhcnNlIGdpdmVuIHRleHQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYg
KCFjaGlsZCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJDb3VsZCBub3QgcGFyc2Ug
Z2l2ZW4gdGV4dCJfcyk7CiAKICAgICBFbGVtZW50KiBjaGlsZEVsZW1lbnQgPSBkb3duY2FzdDxF
bGVtZW50PihjaGlsZCk7Ci0gICAgaWYgKCFjaGlsZEVsZW1lbnQtPmhhc0F0dHJpYnV0ZXMoKSAm
JiBuYW1lKSB7Ci0gICAgICAgIG1fZG9tRWRpdG9yLT5yZW1vdmVBdHRyaWJ1dGUoKmVsZW1lbnQs
ICpuYW1lLCBlcnJvclN0cmluZyk7Ci0gICAgICAgIHJldHVybjsKKyAgICBpZiAoIWNoaWxkRWxl
bWVudC0+aGFzQXR0cmlidXRlcygpICYmICEhbmFtZSkgeworICAgICAgICBpZiAoIW1fZG9tRWRp
dG9yLT5yZW1vdmVBdHRyaWJ1dGUoKmVsZW1lbnQsIG5hbWUsIGVycm9yU3RyaW5nKSkKKyAgICAg
ICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CisgICAgICAgIHJldHVy
biB7IH07CiAgICAgfQogCiAgICAgYm9vbCBmb3VuZE9yaWdpbmFsQXR0cmlidXRlID0gZmFsc2U7
CiAgICAgZm9yIChjb25zdCBBdHRyaWJ1dGUmIGF0dHJpYnV0ZSA6IGNoaWxkRWxlbWVudC0+YXR0
cmlidXRlc0l0ZXJhdG9yKCkpIHsKICAgICAgICAgLy8gQWRkIGF0dHJpYnV0ZSBwYWlyCi0gICAg
ICAgIGZvdW5kT3JpZ2luYWxBdHRyaWJ1dGUgPSBmb3VuZE9yaWdpbmFsQXR0cmlidXRlIHx8IChu
YW1lICYmIGF0dHJpYnV0ZS5uYW1lKCkudG9TdHJpbmcoKSA9PSAqbmFtZSk7CisgICAgICAgIGZv
dW5kT3JpZ2luYWxBdHRyaWJ1dGUgPSBmb3VuZE9yaWdpbmFsQXR0cmlidXRlIHx8IGF0dHJpYnV0
ZS5uYW1lKCkudG9TdHJpbmcoKSA9PSBuYW1lOwogICAgICAgICBpZiAoIW1fZG9tRWRpdG9yLT5z
ZXRBdHRyaWJ1dGUoKmVsZW1lbnQsIGF0dHJpYnV0ZS5uYW1lKCkudG9TdHJpbmcoKSwgYXR0cmli
dXRlLnZhbHVlKCksIGVycm9yU3RyaW5nKSkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAgICAgfQogCi0gICAgaWYg
KCFmb3VuZE9yaWdpbmFsQXR0cmlidXRlICYmIG5hbWUgJiYgIW5hbWUtPnN0cmlwV2hpdGVTcGFj
ZSgpLmlzRW1wdHkoKSkKLSAgICAgICAgbV9kb21FZGl0b3ItPnJlbW92ZUF0dHJpYnV0ZSgqZWxl
bWVudCwgKm5hbWUsIGVycm9yU3RyaW5nKTsKKyAgICBpZiAoIWZvdW5kT3JpZ2luYWxBdHRyaWJ1
dGUgJiYgIW5hbWUuc3RyaXBXaGl0ZVNwYWNlKCkuaXNFbXB0eSgpKSB7CisgICAgICAgIGlmICgh
bV9kb21FZGl0b3ItPnJlbW92ZUF0dHJpYnV0ZSgqZWxlbWVudCwgbmFtZSwgZXJyb3JTdHJpbmcp
KQorICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKKyAgICB9
CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpyZW1vdmVB
dHRyaWJ1dGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgZWxlbWVudElkLCBjb25zdCBT
dHJpbmcmIG5hbWUpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JET01B
Z2VudDo6cmVtb3ZlQXR0cmlidXRlKFByb3RvY29sOjpET006Ok5vZGVJZCBub2RlSWQsIGNvbnN0
IFN0cmluZyYgbmFtZSkKIHsKLSAgICBFbGVtZW50KiBlbGVtZW50ID0gYXNzZXJ0RWRpdGFibGVF
bGVtZW50KGVycm9yU3RyaW5nLCBlbGVtZW50SWQpOworICAgIFByb3RvY29sOjpFcnJvclN0cmlu
ZyBlcnJvclN0cmluZzsKKworICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBhc3NlcnRFZGl0YWJsZUVs
ZW1lbnQoZXJyb3JTdHJpbmcsIG5vZGVJZCk7CiAgICAgaWYgKCFlbGVtZW50KQotICAgICAgICBy
ZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKLSAg
ICBtX2RvbUVkaXRvci0+cmVtb3ZlQXR0cmlidXRlKCplbGVtZW50LCBuYW1lLCBlcnJvclN0cmlu
Zyk7CisgICAgaWYgKCFtX2RvbUVkaXRvci0+cmVtb3ZlQXR0cmlidXRlKCplbGVtZW50LCBuYW1l
LCBlcnJvclN0cmluZykpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmlu
Zyk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpyZW1v
dmVOb2RlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJZCkKK1Byb3RvY29sOjpF
cnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRPTUFnZW50OjpyZW1vdmVOb2RlKFByb3RvY29s
OjpET006Ok5vZGVJZCBub2RlSWQpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9y
U3RyaW5nOworCiAgICAgTm9kZSogbm9kZSA9IGFzc2VydEVkaXRhYmxlTm9kZShlcnJvclN0cmlu
Zywgbm9kZUlkKTsKICAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0
dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgIENvbnRhaW5lck5vZGUqIHBh
cmVudE5vZGUgPSBub2RlLT5wYXJlbnROb2RlKCk7Ci0gICAgaWYgKCFwYXJlbnROb2RlKSB7Ci0g
ICAgICAgIGVycm9yU3RyaW5nID0gIkNhbm5vdCByZW1vdmUgZGV0YWNoZWQgbm9kZSJfczsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoIXBhcmVudE5vZGUpCisgICAgICAgIHJldHVy
biBtYWtlVW5leHBlY3RlZCgiQ2Fubm90IHJlbW92ZSBkZXRhY2hlZCBub2RlIl9zKTsKIAotICAg
IG1fZG9tRWRpdG9yLT5yZW1vdmVDaGlsZCgqcGFyZW50Tm9kZSwgKm5vZGUsIGVycm9yU3RyaW5n
KTsKKyAgICBpZiAoIW1fZG9tRWRpdG9yLT5yZW1vdmVDaGlsZCgqcGFyZW50Tm9kZSwgKm5vZGUs
IGVycm9yU3RyaW5nKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5n
KTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNldE5v
ZGVOYW1lKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJZCwgY29uc3QgU3RyaW5n
JiB0YWdOYW1lLCBpbnQqIG5ld0lkKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UHJvdG9jb2w6
OkRPTTo6Tm9kZUlkPiBJbnNwZWN0b3JET01BZ2VudDo6c2V0Tm9kZU5hbWUoUHJvdG9jb2w6OkRP
TTo6Tm9kZUlkIG5vZGVJZCwgY29uc3QgU3RyaW5nJiB0YWdOYW1lKQogewotICAgICpuZXdJZCA9
IDA7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOwogCi0gICAgUmVmUHRy
PE5vZGU+IG9sZE5vZGUgPSBub2RlRm9ySWQobm9kZUlkKTsKLSAgICBpZiAoIWlzPEVsZW1lbnQ+
KG9sZE5vZGUpKQotICAgICAgICByZXR1cm47CisgICAgYXV0byBvbGROb2RlID0gYXNzZXJ0RWxl
bWVudChlcnJvclN0cmluZywgbm9kZUlkKTsKKyAgICBpZiAoIW9sZE5vZGUpCisgICAgICAgIHJl
dHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAgICBhdXRvIGNyZWF0ZUVsZW1l
bnRSZXN1bHQgPSBvbGROb2RlLT5kb2N1bWVudCgpLmNyZWF0ZUVsZW1lbnRGb3JCaW5kaW5ncyh0
YWdOYW1lKTsKICAgICBpZiAoY3JlYXRlRWxlbWVudFJlc3VsdC5oYXNFeGNlcHRpb24oKSkKLSAg
ICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoSW5zcGVjdG9yRE9N
QWdlbnQ6OnRvRXJyb3JTdHJpbmcoY3JlYXRlRWxlbWVudFJlc3VsdC5yZWxlYXNlRXhjZXB0aW9u
KCkpKTsKKwogICAgIGF1dG8gbmV3RWxlbWVudCA9IGNyZWF0ZUVsZW1lbnRSZXN1bHQucmVsZWFz
ZVJldHVyblZhbHVlKCk7CiAKICAgICAvLyBDb3B5IG92ZXIgdGhlIG9yaWdpbmFsIG5vZGUncyBh
dHRyaWJ1dGVzLgotICAgIG5ld0VsZW1lbnQtPmNsb25lQXR0cmlidXRlc0Zyb21FbGVtZW50KGRv
d25jYXN0PEVsZW1lbnQ+KCpvbGROb2RlKSk7CisgICAgbmV3RWxlbWVudC0+Y2xvbmVBdHRyaWJ1
dGVzRnJvbUVsZW1lbnQoKm9sZE5vZGUpOwogCiAgICAgLy8gQ29weSBvdmVyIHRoZSBvcmlnaW5h
bCBub2RlJ3MgY2hpbGRyZW4uCiAgICAgUmVmUHRyPE5vZGU+IGNoaWxkOwogICAgIHdoaWxlICgo
Y2hpbGQgPSBvbGROb2RlLT5maXJzdENoaWxkKCkpKSB7CiAgICAgICAgIGlmICghbV9kb21FZGl0
b3ItPmluc2VydEJlZm9yZShuZXdFbGVtZW50LCAqY2hpbGQsIDAsIGVycm9yU3RyaW5nKSkKLSAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJv
clN0cmluZyk7CiAgICAgfQogCiAgICAgLy8gUmVwbGFjZSB0aGUgb2xkIG5vZGUgd2l0aCB0aGUg
bmV3IG5vZGUKICAgICBSZWZQdHI8Q29udGFpbmVyTm9kZT4gcGFyZW50ID0gb2xkTm9kZS0+cGFy
ZW50Tm9kZSgpOwogICAgIGlmICghbV9kb21FZGl0b3ItPmluc2VydEJlZm9yZSgqcGFyZW50LCBu
ZXdFbGVtZW50LmNvcHlSZWYoKSwgb2xkTm9kZS0+bmV4dFNpYmxpbmcoKSwgZXJyb3JTdHJpbmcp
KQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0
cmluZyk7CiAgICAgaWYgKCFtX2RvbUVkaXRvci0+cmVtb3ZlQ2hpbGQoKnBhcmVudCwgKm9sZE5v
ZGUsIGVycm9yU3RyaW5nKSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVu
ZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCi0gICAgKm5ld0lkID0gcHVzaE5vZGVQYXRoVG9Gcm9u
dGVuZChlcnJvclN0cmluZywgbmV3RWxlbWVudC5wdHIoKSk7CisgICAgYXV0byByZXN1bHROb2Rl
SWQgPSBwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKGVycm9yU3RyaW5nLCBuZXdFbGVtZW50LnB0cigp
KTsKICAgICBpZiAobV9jaGlsZHJlblJlcXVlc3RlZC5jb250YWlucyhub2RlSWQpKQotICAgICAg
ICBwdXNoQ2hpbGROb2Rlc1RvRnJvbnRlbmQoKm5ld0lkKTsKKyAgICAgICAgcHVzaENoaWxkTm9k
ZXNUb0Zyb250ZW5kKHJlc3VsdE5vZGVJZCk7CisKKyAgICByZXR1cm4gcmVzdWx0Tm9kZUlkOwog
fQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpnZXRPdXRlckhUTUwoRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBpbnQgbm9kZUlkLCBXVEY6OlN0cmluZyogb3V0ZXJIVE1MKQorUHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8U3RyaW5nPiBJbnNwZWN0b3JET01BZ2VudDo6Z2V0T3V0ZXJIVE1MKFBy
b3RvY29sOjpET006Ok5vZGVJZCBub2RlSWQpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5n
IGVycm9yU3RyaW5nOworCiAgICAgTm9kZSogbm9kZSA9IGFzc2VydE5vZGUoZXJyb3JTdHJpbmcs
IG5vZGVJZCk7CiAgICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVy
biBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKLSAgICAqb3V0ZXJIVE1MID0gc2VyaWFs
aXplRnJhZ21lbnQoKm5vZGUsIFNlcmlhbGl6ZWROb2Rlczo6U3VidHJlZUluY2x1ZGluZ05vZGUp
OworICAgIHJldHVybiBzZXJpYWxpemVGcmFnbWVudCgqbm9kZSwgU2VyaWFsaXplZE5vZGVzOjpT
dWJ0cmVlSW5jbHVkaW5nTm9kZSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNldE91
dGVySFRNTChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQsIGNvbnN0IFN0cmlu
ZyYgb3V0ZXJIVE1MKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yRE9N
QWdlbnQ6OnNldE91dGVySFRNTChQcm90b2NvbDo6RE9NOjpOb2RlSWQgbm9kZUlkLCBjb25zdCBT
dHJpbmcmIG91dGVySFRNTCkKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJp
bmc7CisKICAgICBpZiAoIW5vZGVJZCkgewogICAgICAgICBET01QYXRjaFN1cHBvcnQgeyAqbV9k
b21FZGl0b3IsICptX2RvY3VtZW50IH0ucGF0Y2hEb2N1bWVudChvdXRlckhUTUwpOwotICAgICAg
ICByZXR1cm47CisgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCiAgICAgTm9kZSogbm9kZSA9
IGFzc2VydEVkaXRhYmxlTm9kZShlcnJvclN0cmluZywgbm9kZUlkKTsKICAgICBpZiAoIW5vZGUp
Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3Ry
aW5nKTsKIAogICAgIERvY3VtZW50JiBkb2N1bWVudCA9IG5vZGUtPmRvY3VtZW50KCk7Ci0gICAg
aWYgKCFkb2N1bWVudC5pc0hUTUxEb2N1bWVudCgpICYmICFkb2N1bWVudC5pc1hNTERvY3VtZW50
KCkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiRG9jdW1lbnQgb2Ygbm9kZSBmb3IgZ2l2ZW4g
bm9kZUlkIGlzIG5vdCBIVE1ML1hNTCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBp
ZiAoIWRvY3VtZW50LmlzSFRNTERvY3VtZW50KCkgJiYgIWRvY3VtZW50LmlzWE1MRG9jdW1lbnQo
KSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJEb2N1bWVudCBvZiBub2RlIGZvciBn
aXZlbiBub2RlSWQgaXMgbm90IEhUTUwvWE1MIl9zKTsKIAogICAgIE5vZGUqIG5ld05vZGUgPSBu
dWxscHRyOwogICAgIGlmICghbV9kb21FZGl0b3ItPnNldE91dGVySFRNTCgqbm9kZSwgb3V0ZXJI
VE1MLCBuZXdOb2RlLCBlcnJvclN0cmluZykpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0
dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgIGlmICghbmV3Tm9kZSkgewog
ICAgICAgICAvLyBUaGUgb25seSBjaGlsZCBub2RlIGhhcyBiZWVuIGRlbGV0ZWQuCi0gICAgICAg
IHJldHVybjsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKLSAgICBpbnQgbmV3SWQgPSBw
dXNoTm9kZVBhdGhUb0Zyb250ZW5kKGVycm9yU3RyaW5nLCBuZXdOb2RlKTsKKyAgICBhdXRvIG5l
d0lkID0gcHVzaE5vZGVQYXRoVG9Gcm9udGVuZChlcnJvclN0cmluZywgbmV3Tm9kZSk7CiAKICAg
ICBib29sIGNoaWxkcmVuUmVxdWVzdGVkID0gbV9jaGlsZHJlblJlcXVlc3RlZC5jb250YWlucyhu
b2RlSWQpOwogICAgIGlmIChjaGlsZHJlblJlcXVlc3RlZCkKICAgICAgICAgcHVzaENoaWxkTm9k
ZXNUb0Zyb250ZW5kKG5ld0lkKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVj
dG9yRE9NQWdlbnQ6Omluc2VydEFkamFjZW50SFRNTChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcs
IGludCBub2RlSWQsIGNvbnN0IFN0cmluZyYgcG9zaXRpb24sIGNvbnN0IFN0cmluZyYgaHRtbCkK
K1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRPTUFnZW50OjppbnNlcnRB
ZGphY2VudEhUTUwoUHJvdG9jb2w6OkRPTTo6Tm9kZUlkIG5vZGVJZCwgY29uc3QgU3RyaW5nJiBw
b3NpdGlvbiwgY29uc3QgU3RyaW5nJiBodG1sKQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmlu
ZyBlcnJvclN0cmluZzsKKwogICAgIE5vZGUqIG5vZGUgPSBhc3NlcnRFZGl0YWJsZU5vZGUoZXJy
b3JTdHJpbmcsIG5vZGVJZCk7CiAgICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm47CisgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKLSAgICBpZiAoIWlzPEVs
ZW1lbnQ+KG5vZGUpKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIk5vZGUgZm9yIGdpdmVuIG5v
ZGVJZCBpcyBub3QgYW4gZWxlbWVudCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBp
ZiAoIWlzPEVsZW1lbnQ+KG5vZGUpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk5v
ZGUgZm9yIGdpdmVuIG5vZGVJZCBpcyBub3QgYW4gZWxlbWVudCJfcyk7CiAKLSAgICBtX2RvbUVk
aXRvci0+aW5zZXJ0QWRqYWNlbnRIVE1MKGRvd25jYXN0PEVsZW1lbnQ+KCpub2RlKSwgcG9zaXRp
b24sIGh0bWwsIGVycm9yU3RyaW5nKTsKKyAgICBpZiAoIW1fZG9tRWRpdG9yLT5pbnNlcnRBZGph
Y2VudEhUTUwoZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUpLCBwb3NpdGlvbiwgaHRtbCwgZXJyb3JT
dHJpbmcpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOworCisg
ICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c2V0Tm9kZVZhbHVl
KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJZCwgY29uc3QgU3RyaW5nJiB2YWx1
ZSkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRPTUFnZW50OjpzZXRO
b2RlVmFsdWUoUHJvdG9jb2w6OkRPTTo6Tm9kZUlkIG5vZGVJZCwgY29uc3QgU3RyaW5nJiB2YWx1
ZSkKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBOb2Rl
KiBub2RlID0gYXNzZXJ0RWRpdGFibGVOb2RlKGVycm9yU3RyaW5nLCBub2RlSWQpOwogICAgIGlm
ICghbm9kZSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQo
ZXJyb3JTdHJpbmcpOwogCi0gICAgaWYgKCFpczxUZXh0Pigqbm9kZSkpIHsKLSAgICAgICAgZXJy
b3JTdHJpbmcgPSAiTm9kZSBmb3IgZ2l2ZW4gbm9kZUlkIGlzIG5vdCB0ZXh0Il9zOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQorICAgIGlmICghaXM8VGV4dD4oKm5vZGUpKQorICAgICAgICByZXR1
cm4gbWFrZVVuZXhwZWN0ZWQoIk5vZGUgZm9yIGdpdmVuIG5vZGVJZCBpcyBub3QgdGV4dCJfcyk7
CiAKLSAgICBtX2RvbUVkaXRvci0+cmVwbGFjZVdob2xlVGV4dChkb3duY2FzdDxUZXh0Pigqbm9k
ZSksIHZhbHVlLCBlcnJvclN0cmluZyk7CisgICAgaWYgKCFtX2RvbUVkaXRvci0+cmVwbGFjZVdo
b2xlVGV4dChkb3duY2FzdDxUZXh0Pigqbm9kZSksIHZhbHVlLCBlcnJvclN0cmluZykpCisgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CisKKyAgICByZXR1cm4geyB9
OwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpnZXRTdXBwb3J0ZWRFdmVudE5hbWVzKEVy
cm9yU3RyaW5nJiwgUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4mIGV2ZW50TmFtZXMpCitQ
cm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SlNPTjo6QXJyYXlPZjxTdHJpbmc+Pj4gSW5zcGVj
dG9yRE9NQWdlbnQ6OmdldFN1cHBvcnRlZEV2ZW50TmFtZXMoKQogewotICAgIGV2ZW50TmFtZXMg
PSBKU09OOjpBcnJheU9mPFN0cmluZz46OmNyZWF0ZSgpOworICAgIGF1dG8gZXZlbnROYW1lcyA9
IEpTT046OkFycmF5T2Y8U3RyaW5nPjo6Y3JlYXRlKCk7CiAKICNkZWZpbmUgRE9NX0VWRU5UX05B
TUVTX0FERChuYW1lKSBldmVudE5hbWVzLT5hZGRJdGVtKCNuYW1lKTsKICAgICBET01fRVZFTlRf
TkFNRVNfRk9SX0VBQ0goRE9NX0VWRU5UX05BTUVTX0FERCkKICN1bmRlZiBET01fRVZFTlRfTkFN
RVNfQURECisKKyAgICByZXR1cm4gV1RGTW92ZShldmVudE5hbWVzKTsKIH0KIAogI2lmIEVOQUJM
RShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotdm9pZCBJbnNwZWN0b3JET01BZ2Vu
dDo6Z2V0RGF0YUJpbmRpbmdzRm9yTm9kZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCAv
KiBub2RlSWQgKi8sIFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRP
TTo6RGF0YUJpbmRpbmc+PiYgLyogZGF0YUJpbmRpbmdzICovKQorUHJvdG9jb2w6OkVycm9yU3Ry
aW5nT3I8UmVmPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkRPTTo6RGF0YUJpbmRpbmc+Pj4gSW5z
cGVjdG9yRE9NQWdlbnQ6OmdldERhdGFCaW5kaW5nc0Zvck5vZGUoUHJvdG9jb2w6OkRPTTo6Tm9k
ZUlkKQogewotICAgIGVycm9yU3RyaW5nID0gIk5vdCBzdXBwb3J0ZWQiX3M7CisgICAgcmV0dXJu
IG1ha2VVbmV4cGVjdGVkKCJOb3Qgc3VwcG9ydGVkIl9zKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JE
T01BZ2VudDo6Z2V0QXNzb2NpYXRlZERhdGFGb3JOb2RlKEVycm9yU3RyaW5nJiBlcnJvclN0cmlu
ZywgaW50IC8qIG5vZGVJZCAqLywgT3B0aW9uYWw8U3RyaW5nPiYgLyogYXNzb2NpYXRlZERhdGEg
Ki8pCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxTdHJpbmc+IEluc3BlY3RvckRPTUFnZW50Ojpn
ZXRBc3NvY2lhdGVkRGF0YUZvck5vZGUoUHJvdG9jb2w6OkRPTTo6Tm9kZUlkKQogewotICAgIGVy
cm9yU3RyaW5nID0gIk5vdCBzdXBwb3J0ZWQiX3M7CisgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVk
KCJOb3Qgc3VwcG9ydGVkIl9zKTsKIH0KICNlbmRpZgogCi12b2lkIEluc3BlY3RvckRPTUFnZW50
OjpnZXRFdmVudExpc3RlbmVyc0Zvck5vZGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQg
bm9kZUlkLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkV2
ZW50TGlzdGVuZXI+PiYgbGlzdGVuZXJzQXJyYXkpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxS
ZWY8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6RE9NOjpFdmVudExpc3RlbmVyPj4+IEluc3BlY3Rv
ckRPTUFnZW50OjpnZXRFdmVudExpc3RlbmVyc0Zvck5vZGUoUHJvdG9jb2w6OkRPTTo6Tm9kZUlk
IG5vZGVJZCkKIHsKLSAgICBsaXN0ZW5lcnNBcnJheSA9IEpTT046OkFycmF5T2Y8SW5zcGVjdG9y
OjpQcm90b2NvbDo6RE9NOjpFdmVudExpc3RlbmVyPjo6Y3JlYXRlKCk7CisgICAgUHJvdG9jb2w6
OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOwogCiAgICAgYXV0byogbm9kZSA9IGFzc2VydE5vZGUo
ZXJyb3JTdHJpbmcsIG5vZGVJZCk7CiAgICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm47Cisg
ICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAgICBWZWN0b3I8
UmVmUHRyPEV2ZW50VGFyZ2V0Pj4gYW5jZXN0b3JzOwogICAgIGFuY2VzdG9ycy5hcHBlbmQobm9k
ZSk7CkBAIC05MjksOCArOTU4LDEwIEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmdldEV2ZW50
TGlzdGVuZXJzRm9yTm9kZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBuCiAgICAgICAg
IH0KICAgICB9CiAKKyAgICBhdXRvIGxpc3RlbmVycyA9IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6
OkRPTTo6RXZlbnRMaXN0ZW5lcj46OmNyZWF0ZSgpOworCiAgICAgYXV0byBhZGRMaXN0ZW5lciA9
IFsmXSAoUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXImIGxpc3RlbmVyLCBjb25zdCBFdmVudExpc3Rl
bmVySW5mbyYgaW5mbykgewotICAgICAgICBpbnQgaWRlbnRpZmllciA9IDA7CisgICAgICAgIFBy
b3RvY29sOjpET006OkV2ZW50TGlzdGVuZXJJZCBpZGVudGlmaWVyID0gMDsKICAgICAgICAgYm9v
bCBkaXNhYmxlZCA9IGZhbHNlOwogICAgICAgICBSZWZQdHI8SlNDOjpCcmVha3BvaW50PiBicmVh
a3BvaW50OwogCkBAIC05NTMsNyArOTg0LDcgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Z2V0
RXZlbnRMaXN0ZW5lcnNGb3JOb2RlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG4KICAg
ICAgICAgICAgIG1fZXZlbnRMaXN0ZW5lckVudHJpZXMuYWRkKGlkZW50aWZpZXIsIGluc3BlY3Rv
ckV2ZW50TGlzdGVuZXIpOwogICAgICAgICB9CiAKLSAgICAgICAgbGlzdGVuZXJzQXJyYXktPmFk
ZEl0ZW0oYnVpbGRPYmplY3RGb3JFdmVudExpc3RlbmVyKGxpc3RlbmVyLCBpZGVudGlmaWVyLCAq
aW5mby5ldmVudFRhcmdldCwgaW5mby5ldmVudFR5cGUsIGRpc2FibGVkLCBicmVha3BvaW50KSk7
CisgICAgICAgIGxpc3RlbmVycy0+YWRkSXRlbShidWlsZE9iamVjdEZvckV2ZW50TGlzdGVuZXIo
bGlzdGVuZXIsIGlkZW50aWZpZXIsICppbmZvLmV2ZW50VGFyZ2V0LCBpbmZvLmV2ZW50VHlwZSwg
ZGlzYWJsZWQsIGJyZWFrcG9pbnQpKTsKICAgICB9OwogCiAgICAgLy8gR2V0IENhcHR1cmluZyBM
aXN0ZW5lcnMgKGluIHRoaXMgb3JkZXIpCkBAIC05NzYsODAgKzEwMDcsODEgQEAgdm9pZCBJbnNw
ZWN0b3JET01BZ2VudDo6Z2V0RXZlbnRMaXN0ZW5lcnNGb3JOb2RlKEVycm9yU3RyaW5nJiBlcnJv
clN0cmluZywgaW50IG4KIAogICAgIGlmIChtX2luc3BlY3RlZE5vZGUgPT0gbm9kZSkKICAgICAg
ICAgbV9zdXBwcmVzc0V2ZW50TGlzdGVuZXJDaGFuZ2VkRXZlbnQgPSBmYWxzZTsKKworICAgIHJl
dHVybiBXVEZNb3ZlKGxpc3RlbmVycyk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNl
dEV2ZW50TGlzdGVuZXJEaXNhYmxlZChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBldmVu
dExpc3RlbmVySWQsIGJvb2wgZGlzYWJsZWQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lk
PiBJbnNwZWN0b3JET01BZ2VudDo6c2V0RXZlbnRMaXN0ZW5lckRpc2FibGVkKFByb3RvY29sOjpE
T006OkV2ZW50TGlzdGVuZXJJZCBldmVudExpc3RlbmVySWQsIGJvb2wgZGlzYWJsZWQpCiB7CiAg
ICAgYXV0byBpdCA9IG1fZXZlbnRMaXN0ZW5lckVudHJpZXMuZmluZChldmVudExpc3RlbmVySWQp
OwotICAgIGlmIChpdCA9PSBtX2V2ZW50TGlzdGVuZXJFbnRyaWVzLmVuZCgpKSB7Ci0gICAgICAg
IGVycm9yU3RyaW5nID0gIk1pc3NpbmcgZXZlbnQgbGlzdGVuZXIgZm9yIGdpdmVuIGV2ZW50TGlz
dGVuZXJJZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoaXQgPT0gbV9ldmVu
dExpc3RlbmVyRW50cmllcy5lbmQoKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJN
aXNzaW5nIGV2ZW50IGxpc3RlbmVyIGZvciBnaXZlbiBldmVudExpc3RlbmVySWQiX3MpOwogCiAg
ICAgaXQtPnZhbHVlLmRpc2FibGVkID0gZGlzYWJsZWQ7CisKKyAgICByZXR1cm4geyB9OwogfQog
Ci12b2lkIEluc3BlY3RvckRPTUFnZW50OjpzZXRCcmVha3BvaW50Rm9yRXZlbnRMaXN0ZW5lcihF
cnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBldmVudExpc3RlbmVySWQsIGNvbnN0IEpTT046
Ok9iamVjdCogb3B0aW9uc1BheWxvYWQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJ
bnNwZWN0b3JET01BZ2VudDo6c2V0QnJlYWtwb2ludEZvckV2ZW50TGlzdGVuZXIoUHJvdG9jb2w6
OkRPTTo6RXZlbnRMaXN0ZW5lcklkIGV2ZW50TGlzdGVuZXJJZCwgUmVmUHRyPEpTT046Ok9iamVj
dD4mJiBvcHRpb25zKQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsK
KwogICAgIGF1dG8gaXQgPSBtX2V2ZW50TGlzdGVuZXJFbnRyaWVzLmZpbmQoZXZlbnRMaXN0ZW5l
cklkKTsKLSAgICBpZiAoaXQgPT0gbV9ldmVudExpc3RlbmVyRW50cmllcy5lbmQoKSkgewotICAg
ICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIGV2ZW50IGxpc3RlbmVyIGZvciBnaXZlbiBldmVu
dExpc3RlbmVySWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKGl0ID09IG1f
ZXZlbnRMaXN0ZW5lckVudHJpZXMuZW5kKCkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3Rl
ZCgiTWlzc2luZyBldmVudCBsaXN0ZW5lciBmb3IgZ2l2ZW4gZXZlbnRMaXN0ZW5lcklkIl9zKTsK
IAotICAgIGlmIChpdC0+dmFsdWUuYnJlYWtwb2ludCkgewotICAgICAgICBlcnJvclN0cmluZyA9
ICJCcmVha3BvaW50IGZvciBnaXZlbiBldmVudExpc3RlbmVySWQgYWxyZWFkeSBleGlzdHMiX3M7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKGl0LT52YWx1ZS5icmVha3BvaW50KQor
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkJyZWFrcG9pbnQgZm9yIGdpdmVuIGV2ZW50
TGlzdGVuZXJJZCBhbHJlYWR5IGV4aXN0cyJfcyk7CiAKLSAgICBpdC0+dmFsdWUuYnJlYWtwb2lu
dCA9IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRlYnVnZ2VyQnJlYWtwb2ludEZyb21QYXlsb2Fk
KGVycm9yU3RyaW5nLCBvcHRpb25zUGF5bG9hZCk7CisgICAgaXQtPnZhbHVlLmJyZWFrcG9pbnQg
PSBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkZWJ1Z2dlckJyZWFrcG9pbnRGcm9tUGF5bG9hZChl
cnJvclN0cmluZywgV1RGTW92ZShvcHRpb25zKSk7CisgICAgaWYgKCFpdC0+dmFsdWUuYnJlYWtw
b2ludCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKKworICAg
IHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnJlbW92ZUJyZWFrcG9p
bnRGb3JFdmVudExpc3RlbmVyKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IGV2ZW50TGlz
dGVuZXJJZCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRPTUFnZW50
OjpyZW1vdmVCcmVha3BvaW50Rm9yRXZlbnRMaXN0ZW5lcihQcm90b2NvbDo6RE9NOjpFdmVudExp
c3RlbmVySWQgZXZlbnRMaXN0ZW5lcklkKQogewogICAgIGF1dG8gaXQgPSBtX2V2ZW50TGlzdGVu
ZXJFbnRyaWVzLmZpbmQoZXZlbnRMaXN0ZW5lcklkKTsKLSAgICBpZiAoaXQgPT0gbV9ldmVudExp
c3RlbmVyRW50cmllcy5lbmQoKSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIGV2
ZW50IGxpc3RlbmVyIGZvciBnaXZlbiBldmVudExpc3RlbmVySWQiX3M7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9CisgICAgaWYgKGl0ID09IG1fZXZlbnRMaXN0ZW5lckVudHJpZXMuZW5kKCkpCisg
ICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTWlzc2luZyBldmVudCBsaXN0ZW5lciBmb3Ig
Z2l2ZW4gZXZlbnRMaXN0ZW5lcklkIl9zKTsKIAogICAgIGlmICghaXQtPnZhbHVlLmJyZWFrcG9p
bnQpCi0gICAgICAgIGVycm9yU3RyaW5nID0gIkJyZWFrcG9pbnQgZm9yIGdpdmVuIGV2ZW50TGlz
dGVuZXJJZCBtaXNzaW5nIl9zOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkJyZWFr
cG9pbnQgZm9yIGdpdmVuIGV2ZW50TGlzdGVuZXJJZCBtaXNzaW5nIl9zKTsKIAogICAgIGl0LT52
YWx1ZS5icmVha3BvaW50ID0gbnVsbHB0cjsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQg
SW5zcGVjdG9yRE9NQWdlbnQ6OmdldEFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzRm9yTm9kZShFcnJv
clN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzPiYgYXhQcm9wZXJ0aWVzKQorUHJvdG9j
b2w6OkVycm9yU3RyaW5nT3I8UmVmPFByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0
aWVzPj4gSW5zcGVjdG9yRE9NQWdlbnQ6OmdldEFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzRm9yTm9k
ZShQcm90b2NvbDo6RE9NOjpOb2RlSWQgbm9kZUlkKQogeworICAgIFByb3RvY29sOjpFcnJvclN0
cmluZyBlcnJvclN0cmluZzsKKwogICAgIE5vZGUqIG5vZGUgPSBhc3NlcnROb2RlKGVycm9yU3Ry
aW5nLCBub2RlSWQpOwogICAgIGlmICghbm9kZSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICBy
ZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCi0gICAgYXhQcm9wZXJ0aWVzID0g
YnVpbGRPYmplY3RGb3JBY2Nlc3NpYmlsaXR5UHJvcGVydGllcyhub2RlKTsKKyAgICByZXR1cm4g
YnVpbGRPYmplY3RGb3JBY2Nlc3NpYmlsaXR5UHJvcGVydGllcygqbm9kZSk7CiB9CiAKLXZvaWQg
SW5zcGVjdG9yRE9NQWdlbnQ6OnBlcmZvcm1TZWFyY2goRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5n
LCBjb25zdCBTdHJpbmcmIHF1ZXJ5LCBjb25zdCBKU09OOjpBcnJheSogbm9kZUlkcywgY29uc3Qg
Ym9vbCogY2FzZVNlbnNpdGl2ZSwgU3RyaW5nKiBzZWFyY2hJZCwgaW50KiByZXN1bHRDb3VudCkK
K1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHN0ZDo6dHVwbGU8U3RyaW5nIC8qIHNlYXJjaElkICov
LCBpbnQgLyogcmVzdWx0Q291bnQgKi8+PiBJbnNwZWN0b3JET01BZ2VudDo6cGVyZm9ybVNlYXJj
aChjb25zdCBTdHJpbmcmIHF1ZXJ5LCBSZWZQdHI8SlNPTjo6QXJyYXk+JiYgbm9kZUlkcywgT3B0
aW9uYWw8Ym9vbD4mJiBjYXNlU2Vuc2l0aXZlKQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmlu
ZyBlcnJvclN0cmluZzsKKwogICAgIC8vIEZJWE1FOiBTZWFyY2ggd29ya3Mgd2l0aCBub2RlIGdy
YW51bGFyaXR5IC0gbnVtYmVyIG9mIG1hdGNoZXMgd2l0aGluIG5vZGUgaXMgbm90IGNhbGN1bGF0
ZWQuCiAgICAgSW5zcGVjdG9yTm9kZUZpbmRlciBmaW5kZXIocXVlcnksIGNhc2VTZW5zaXRpdmUg
JiYgKmNhc2VTZW5zaXRpdmUpOwogCiAgICAgaWYgKG5vZGVJZHMpIHsKICAgICAgICAgZm9yIChh
dXRvJiBub2RlVmFsdWUgOiAqbm9kZUlkcykgewotICAgICAgICAgICAgaWYgKCFub2RlVmFsdWUp
IHsKLSAgICAgICAgICAgICAgICBlcnJvclN0cmluZyA9ICJVbmV4cGVjdGVkIG5vbi1pbnRlZ2Vy
IGl0ZW0gaW4gZ2l2ZW4gbm9kZUlkcyJfczsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBpbnQgbm9kZUlkID0gMDsKLSAgICAgICAgICAgIGlmICgh
bm9kZVZhbHVlLT5hc0ludGVnZXIobm9kZUlkKSkgewotICAgICAgICAgICAgICAgIGVycm9yU3Ry
aW5nID0gIlVuZXhwZWN0ZWQgbm9uLWludGVnZXIgaXRlbSBpbiBnaXZlbiBub2RlSWRzIl9zOwot
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIE5vZGUq
IG5vZGUgPSBhc3NlcnROb2RlKGVycm9yU3RyaW5nLCBub2RlSWQpOwotICAgICAgICAgICAgaWYg
KCFub2RlKSB7Ci0gICAgICAgICAgICAgICAgLy8gYXNzZXJ0Tm9kZSBzaG91bGQgaGF2ZSBmaWxs
ZWQgdGhlIGVycm9yU3RyaW5nIGZvciB1cy4KLSAgICAgICAgICAgICAgICBBU1NFUlQoZXJyb3JT
dHJpbmcubGVuZ3RoKCkpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGF1dG8gbm9kZUlkID0gbm9kZVZhbHVlLT5hc0ludGVnZXIoKTsKKyAgICAg
ICAgICAgIGlmICghbm9kZUlkKQorICAgICAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3Rl
ZCgiVW5leHBlY3RlZCBub24taW50ZWdlciBpdGVtIGluIGdpdmVuIG5vZGVJZHMiX3MpOworCisg
ICAgICAgICAgICBOb2RlKiBub2RlID0gYXNzZXJ0Tm9kZShlcnJvclN0cmluZywgKm5vZGVJZCk7
CisgICAgICAgICAgICBpZiAoIW5vZGUpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4
cGVjdGVkKGVycm9yU3RyaW5nKTsKKwogICAgICAgICAgICAgZmluZGVyLnBlcmZvcm1TZWFyY2go
bm9kZSk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewpAQCAtMTA1OCwzNyArMTA5MCwzNiBAQCB2
b2lkIEluc3BlY3RvckRPTUFnZW50OjpwZXJmb3JtU2VhcmNoKEVycm9yU3RyaW5nJiBlcnJvclN0
cmluZywgY29uc3QgU3RyaW5nJiBxdQogICAgICAgICBmaW5kZXIucGVyZm9ybVNlYXJjaChtX2Rv
Y3VtZW50LmdldCgpKTsKICAgICB9CiAKLSAgICAqc2VhcmNoSWQgPSBJZGVudGlmaWVyc0ZhY3Rv
cnk6OmNyZWF0ZUlkZW50aWZpZXIoKTsKKyAgICBhdXRvIHNlYXJjaElkID0gSWRlbnRpZmllcnNG
YWN0b3J5OjpjcmVhdGVJZGVudGlmaWVyKCk7CiAKLSAgICBhdXRvJiByZXN1bHRzVmVjdG9yID0g
bV9zZWFyY2hSZXN1bHRzLmFkZCgqc2VhcmNoSWQsIFZlY3RvcjxSZWZQdHI8Tm9kZT4+KCkpLml0
ZXJhdG9yLT52YWx1ZTsKKyAgICBhdXRvJiByZXN1bHRzVmVjdG9yID0gbV9zZWFyY2hSZXN1bHRz
LmFkZChzZWFyY2hJZCwgVmVjdG9yPFJlZlB0cjxOb2RlPj4oKSkuaXRlcmF0b3ItPnZhbHVlOwog
ICAgIGZvciAoYXV0byYgcmVzdWx0IDogZmluZGVyLnJlc3VsdHMoKSkKICAgICAgICAgcmVzdWx0
c1ZlY3Rvci5hcHBlbmQocmVzdWx0KTsKIAotICAgICpyZXN1bHRDb3VudCA9IHJlc3VsdHNWZWN0
b3Iuc2l6ZSgpOworICAgIHJldHVybiB7IHsgc2VhcmNoSWQsIHJlc3VsdHNWZWN0b3Iuc2l6ZSgp
IH0gfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Z2V0U2VhcmNoUmVzdWx0cyhFcnJv
clN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgc2VhcmNoSWQsIGludCBmcm9tSW5k
ZXgsIGludCB0b0luZGV4LCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxpbnQ+PiYgbm9kZUlkcykKK1By
b3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpET006Ok5v
ZGVJZD4+PiBJbnNwZWN0b3JET01BZ2VudDo6Z2V0U2VhcmNoUmVzdWx0cyhjb25zdCBTdHJpbmcm
IHNlYXJjaElkLCBpbnQgZnJvbUluZGV4LCBpbnQgdG9JbmRleCkKIHsKICAgICBTZWFyY2hSZXN1
bHRzOjppdGVyYXRvciBpdCA9IG1fc2VhcmNoUmVzdWx0cy5maW5kKHNlYXJjaElkKTsKLSAgICBp
ZiAoaXQgPT0gbV9zZWFyY2hSZXN1bHRzLmVuZCgpKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0g
Ik1pc3Npbmcgc2VhcmNoIHJlc3VsdCBmb3IgZ2l2ZW4gc2VhcmNoSWQiX3M7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9CisgICAgaWYgKGl0ID09IG1fc2VhcmNoUmVzdWx0cy5lbmQoKSkKKyAgICAg
ICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJNaXNzaW5nIHNlYXJjaCByZXN1bHQgZm9yIGdpdmVu
IHNlYXJjaElkIl9zKTsKIAogICAgIGludCBzaXplID0gaXQtPnZhbHVlLnNpemUoKTsKLSAgICBp
ZiAoZnJvbUluZGV4IDwgMCB8fCB0b0luZGV4ID4gc2l6ZSB8fCBmcm9tSW5kZXggPj0gdG9JbmRl
eCkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJJbnZhbGlkIHNlYXJjaCByZXN1bHQgcmFuZ2Ug
Zm9yIGdpdmVuIGZyb21JbmRleCBhbmQgdG9JbmRleCJfczsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KKyAgICBpZiAoZnJvbUluZGV4IDwgMCB8fCB0b0luZGV4ID4gc2l6ZSB8fCBmcm9tSW5kZXgg
Pj0gdG9JbmRleCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJJbnZhbGlkIHNlYXJj
aCByZXN1bHQgcmFuZ2UgZm9yIGdpdmVuIGZyb21JbmRleCBhbmQgdG9JbmRleCJfcyk7CiAKLSAg
ICBub2RlSWRzID0gSlNPTjo6QXJyYXlPZjxpbnQ+OjpjcmVhdGUoKTsKKyAgICBhdXRvIG5vZGVJ
ZHMgPSBKU09OOjpBcnJheU9mPFByb3RvY29sOjpET006Ok5vZGVJZD46OmNyZWF0ZSgpOwogICAg
IGZvciAoaW50IGkgPSBmcm9tSW5kZXg7IGkgPCB0b0luZGV4OyArK2kpCiAgICAgICAgIG5vZGVJ
ZHMtPmFkZEl0ZW0ocHVzaE5vZGVQYXRoVG9Gcm9udGVuZCgoaXQtPnZhbHVlKVtpXS5nZXQoKSkp
OworICAgIHJldHVybiBXVEZNb3ZlKG5vZGVJZHMpOwogfQogCi12b2lkIEluc3BlY3RvckRPTUFn
ZW50OjpkaXNjYXJkU2VhcmNoUmVzdWx0cyhFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgc2Vh
cmNoSWQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JET01BZ2VudDo6
ZGlzY2FyZFNlYXJjaFJlc3VsdHMoY29uc3QgU3RyaW5nJiBzZWFyY2hJZCkKIHsKICAgICBtX3Nl
YXJjaFJlc3VsdHMucmVtb3ZlKHNlYXJjaElkKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKIGJv
b2wgSW5zcGVjdG9yRE9NQWdlbnQ6OmhhbmRsZU1vdXNlUHJlc3MoKQpAQCAtMTExNyw3ICsxMTQ4
LDcgQEAgYm9vbCBJbnNwZWN0b3JET01BZ2VudDo6aGFuZGxlVG91Y2hFdmVudChOb2RlJiBub2Rl
KQogCiB2b2lkIEluc3BlY3RvckRPTUFnZW50OjppbnNwZWN0KE5vZGUqIGluc3BlY3RlZE5vZGUp
CiB7Ci0gICAgRXJyb3JTdHJpbmcgaWdub3JlZDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcg
aWdub3JlZDsKICAgICBSZWZQdHI8Tm9kZT4gbm9kZSA9IGluc3BlY3RlZE5vZGU7CiAgICAgc2V0
U2VhcmNoaW5nRm9yTm9kZShpZ25vcmVkLCBmYWxzZSwgbnVsbHB0ciwgZmFsc2UpOwogCkBAIC0x
MTczLDcgKzEyMDQsNyBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpoaWdobGlnaHRNb3VzZWRP
dmVyTm9kZSgpCiAgICAgICAgIG1fb3ZlcmxheS0+aGlnaGxpZ2h0Tm9kZShub2RlLCAqbV9pbnNw
ZWN0TW9kZUhpZ2hsaWdodENvbmZpZyk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNl
dFNlYXJjaGluZ0Zvck5vZGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBib29sIGVuYWJsZWQs
IGNvbnN0IEpTT046Ok9iamVjdCogaGlnaGxpZ2h0SW5zcGVjdG9yT2JqZWN0LCBib29sIHNob3dS
dWxlcnMpCit2b2lkIEluc3BlY3RvckRPTUFnZW50OjpzZXRTZWFyY2hpbmdGb3JOb2RlKFByb3Rv
Y29sOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGJvb2wgZW5hYmxlZCwgUmVmUHRyPEpTT046
Ok9iamVjdD4mJiBoaWdobGlnaHRJbnNwZWN0b3JPYmplY3QsIGJvb2wgc2hvd1J1bGVycykKIHsK
ICAgICBpZiAobV9zZWFyY2hpbmdGb3JOb2RlID09IGVuYWJsZWQpCiAgICAgICAgIHJldHVybjsK
QEAgLTExODMsMTIgKzEyMTQsMTIgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c2V0U2VhcmNo
aW5nRm9yTm9kZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGJvb2wgZW5hYmwKICAgICBtX292
ZXJsYXktPnNldFNob3dSdWxlcnNEdXJpbmdFbGVtZW50U2VsZWN0aW9uKG1fc2VhcmNoaW5nRm9y
Tm9kZSAmJiBzaG93UnVsZXJzKTsKIAogICAgIGlmIChtX3NlYXJjaGluZ0Zvck5vZGUpIHsKLSAg
ICAgICAgbV9pbnNwZWN0TW9kZUhpZ2hsaWdodENvbmZpZyA9IGhpZ2hsaWdodENvbmZpZ0Zyb21J
bnNwZWN0b3JPYmplY3QoZXJyb3JTdHJpbmcsIGhpZ2hsaWdodEluc3BlY3Rvck9iamVjdCk7Cisg
ICAgICAgIG1faW5zcGVjdE1vZGVIaWdobGlnaHRDb25maWcgPSBoaWdobGlnaHRDb25maWdGcm9t
SW5zcGVjdG9yT2JqZWN0KGVycm9yU3RyaW5nLCBXVEZNb3ZlKGhpZ2hsaWdodEluc3BlY3Rvck9i
amVjdCkpOwogICAgICAgICBpZiAoIW1faW5zcGVjdE1vZGVIaWdobGlnaHRDb25maWcpCiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIGhpZ2hsaWdodE1vdXNlZE92ZXJOb2RlKCk7CiAgICAg
fSBlbHNlCi0gICAgICAgIGhpZGVIaWdobGlnaHQoZXJyb3JTdHJpbmcpOworICAgICAgICBoaWRl
SGlnaGxpZ2h0KCk7CiAKICAgICBtX292ZXJsYXktPmRpZFNldFNlYXJjaGluZ0Zvck5vZGUobV9z
ZWFyY2hpbmdGb3JOb2RlKTsKIApAQCAtMTE5Niw3ICsxMjI3LDcgQEAgdm9pZCBJbnNwZWN0b3JE
T01BZ2VudDo6c2V0U2VhcmNoaW5nRm9yTm9kZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGJv
b2wgZW5hYmwKICAgICAgICAgY2xpZW50LT5lbGVtZW50U2VsZWN0aW9uQ2hhbmdlZChtX3NlYXJj
aGluZ0Zvck5vZGUpOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8SGlnaGxpZ2h0Q29uZmlnPiBJbnNw
ZWN0b3JET01BZ2VudDo6aGlnaGxpZ2h0Q29uZmlnRnJvbUluc3BlY3Rvck9iamVjdChFcnJvclN0
cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IEpTT046Ok9iamVjdCogaGlnaGxpZ2h0SW5zcGVjdG9y
T2JqZWN0KQorc3RkOjp1bmlxdWVfcHRyPEhpZ2hsaWdodENvbmZpZz4gSW5zcGVjdG9yRE9NQWdl
bnQ6OmhpZ2hsaWdodENvbmZpZ0Zyb21JbnNwZWN0b3JPYmplY3QoUHJvdG9jb2w6OkVycm9yU3Ry
aW5nJiBlcnJvclN0cmluZywgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBoaWdobGlnaHRJbnNwZWN0
b3JPYmplY3QpCiB7CiAgICAgaWYgKCFoaWdobGlnaHRJbnNwZWN0b3JPYmplY3QpIHsKICAgICAg
ICAgZXJyb3JTdHJpbmcgPSAiSW50ZXJuYWwgZXJyb3I6IGhpZ2hsaWdodCBjb25maWd1cmF0aW9u
IHBhcmFtZXRlciBpcyBtaXNzaW5nIl9zOwpAQCAtMTIwNCw4MSArMTIzNSw5MyBAQCBzdGQ6OnVu
aXF1ZV9wdHI8SGlnaGxpZ2h0Q29uZmlnPiBJbnNwZWN0b3JET01BZ2VudDo6aGlnaGxpZ2h0Q29u
ZmlnRnJvbUluc3BlY3RvcgogICAgIH0KIAogICAgIGF1dG8gaGlnaGxpZ2h0Q29uZmlnID0gbWFr
ZVVuaXF1ZTxIaWdobGlnaHRDb25maWc+KCk7Ci0gICAgYm9vbCBzaG93SW5mbyA9IGZhbHNlOyAv
LyBEZWZhdWx0OiBmYWxzZSAoZG8gbm90IHNob3cgYSB0b29sdGlwKS4KLSAgICBoaWdobGlnaHRJ
bnNwZWN0b3JPYmplY3QtPmdldEJvb2xlYW4oInNob3dJbmZvIiwgc2hvd0luZm8pOwotICAgIGhp
Z2hsaWdodENvbmZpZy0+c2hvd0luZm8gPSBzaG93SW5mbzsKLSAgICBoaWdobGlnaHRDb25maWct
PmNvbnRlbnQgPSBwYXJzZUNvbmZpZ0NvbG9yKCJjb250ZW50Q29sb3IiLCBoaWdobGlnaHRJbnNw
ZWN0b3JPYmplY3QpOwotICAgIGhpZ2hsaWdodENvbmZpZy0+Y29udGVudE91dGxpbmUgPSBwYXJz
ZUNvbmZpZ0NvbG9yKCJjb250ZW50T3V0bGluZUNvbG9yIiwgaGlnaGxpZ2h0SW5zcGVjdG9yT2Jq
ZWN0KTsKLSAgICBoaWdobGlnaHRDb25maWctPnBhZGRpbmcgPSBwYXJzZUNvbmZpZ0NvbG9yKCJw
YWRkaW5nQ29sb3IiLCBoaWdobGlnaHRJbnNwZWN0b3JPYmplY3QpOwotICAgIGhpZ2hsaWdodENv
bmZpZy0+Ym9yZGVyID0gcGFyc2VDb25maWdDb2xvcigiYm9yZGVyQ29sb3IiLCBoaWdobGlnaHRJ
bnNwZWN0b3JPYmplY3QpOwotICAgIGhpZ2hsaWdodENvbmZpZy0+bWFyZ2luID0gcGFyc2VDb25m
aWdDb2xvcigibWFyZ2luQ29sb3IiLCBoaWdobGlnaHRJbnNwZWN0b3JPYmplY3QpOworICAgIGhp
Z2hsaWdodENvbmZpZy0+c2hvd0luZm8gPSBoaWdobGlnaHRJbnNwZWN0b3JPYmplY3QtPmdldEJv
b2xlYW4oUHJvdG9jb2w6OkRPTTo6SGlnaGxpZ2h0Q29uZmlnOjpzaG93SW5mb0tleSkudmFsdWVP
cihmYWxzZSk7CisgICAgaGlnaGxpZ2h0Q29uZmlnLT5jb250ZW50ID0gcGFyc2VDb25maWdDb2xv
cihQcm90b2NvbDo6RE9NOjpIaWdobGlnaHRDb25maWc6OmNvbnRlbnRDb2xvcktleSwgKmhpZ2hs
aWdodEluc3BlY3Rvck9iamVjdCk7CisgICAgaGlnaGxpZ2h0Q29uZmlnLT5wYWRkaW5nID0gcGFy
c2VDb25maWdDb2xvcihQcm90b2NvbDo6RE9NOjpIaWdobGlnaHRDb25maWc6OnBhZGRpbmdDb2xv
cktleSwgKmhpZ2hsaWdodEluc3BlY3Rvck9iamVjdCk7CisgICAgaGlnaGxpZ2h0Q29uZmlnLT5i
b3JkZXIgPSBwYXJzZUNvbmZpZ0NvbG9yKFByb3RvY29sOjpET006OkhpZ2hsaWdodENvbmZpZzo6
Ym9yZGVyQ29sb3JLZXksICpoaWdobGlnaHRJbnNwZWN0b3JPYmplY3QpOworICAgIGhpZ2hsaWdo
dENvbmZpZy0+bWFyZ2luID0gcGFyc2VDb25maWdDb2xvcihQcm90b2NvbDo6RE9NOjpIaWdobGln
aHRDb25maWc6Om1hcmdpbkNvbG9yS2V5LCAqaGlnaGxpZ2h0SW5zcGVjdG9yT2JqZWN0KTsKICAg
ICByZXR1cm4gaGlnaGxpZ2h0Q29uZmlnOwogfQogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkK
LXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNldEluc3BlY3RNb2RlRW5hYmxlZChFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcsIGJvb2wgZW5hYmxlZCwgY29uc3QgSlNPTjo6T2JqZWN0KiBoaWdobGln
aHRDb25maWcpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JET01BZ2Vu
dDo6c2V0SW5zcGVjdE1vZGVFbmFibGVkKGJvb2wgZW5hYmxlZCwgUmVmUHRyPEpTT046Ok9iamVj
dD4mJiBoaWdobGlnaHRDb25maWcpCiB7Ci0gICAgc2V0U2VhcmNoaW5nRm9yTm9kZShlcnJvclN0
cmluZywgZW5hYmxlZCwgaGlnaGxpZ2h0Q29uZmlnID8gaGlnaGxpZ2h0Q29uZmlnIDogbnVsbHB0
ciwgZmFsc2UpOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKworICAg
IHNldFNlYXJjaGluZ0Zvck5vZGUoZXJyb3JTdHJpbmcsIGVuYWJsZWQsIFdURk1vdmUoaGlnaGxp
Z2h0Q29uZmlnKSwgZmFsc2UpOworCisgICAgaWYgKCEhZXJyb3JTdHJpbmcpCisgICAgICAgIHJl
dHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CisKKyAgICByZXR1cm4geyB9OwogfQog
I2Vsc2UKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNldEluc3BlY3RNb2RlRW5hYmxlZChFcnJv
clN0cmluZyYgZXJyb3JTdHJpbmcsIGJvb2wgZW5hYmxlZCwgY29uc3QgSlNPTjo6T2JqZWN0KiBo
aWdobGlnaHRDb25maWcsIGNvbnN0IGJvb2wqIHNob3dSdWxlcnMpCitQcm90b2NvbDo6RXJyb3JT
dHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JET01BZ2VudDo6c2V0SW5zcGVjdE1vZGVFbmFibGVkKGJv
b2wgZW5hYmxlZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBoaWdobGlnaHRDb25maWcsIE9wdGlv
bmFsPGJvb2w+JiYgc2hvd1J1bGVycykKIHsKLSAgICBzZXRTZWFyY2hpbmdGb3JOb2RlKGVycm9y
U3RyaW5nLCBlbmFibGVkLCBoaWdobGlnaHRDb25maWcgPyBoaWdobGlnaHRDb25maWcgOiBudWxs
cHRyLCBzaG93UnVsZXJzICYmICpzaG93UnVsZXJzKTsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJp
bmcgZXJyb3JTdHJpbmc7CisKKyAgICBzZXRTZWFyY2hpbmdGb3JOb2RlKGVycm9yU3RyaW5nLCBl
bmFibGVkLCBXVEZNb3ZlKGhpZ2hsaWdodENvbmZpZyksIHNob3dSdWxlcnMgJiYgKnNob3dSdWxl
cnMpOworCisgICAgaWYgKCEhZXJyb3JTdHJpbmcpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBl
Y3RlZChlcnJvclN0cmluZyk7CisKKyAgICByZXR1cm4geyB9OwogfQogI2VuZGlmCiAKLXZvaWQg
SW5zcGVjdG9yRE9NQWdlbnQ6OmhpZ2hsaWdodFJlY3QoRXJyb3JTdHJpbmcmLCBpbnQgeCwgaW50
IHksIGludCB3aWR0aCwgaW50IGhlaWdodCwgY29uc3QgSlNPTjo6T2JqZWN0KiBjb2xvciwgY29u
c3QgSlNPTjo6T2JqZWN0KiBvdXRsaW5lQ29sb3IsIGNvbnN0IGJvb2wqIHVzZVBhZ2VDb29yZGlu
YXRlcykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRPTUFnZW50Ojpo
aWdobGlnaHRSZWN0KGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBSZWZQdHI8
SlNPTjo6T2JqZWN0PiYmIGNvbG9yLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIG91dGxpbmVDb2xv
ciwgT3B0aW9uYWw8Ym9vbD4mJiB1c2VQYWdlQ29vcmRpbmF0ZXMpCiB7CiAgICAgYXV0byBxdWFk
ID0gbWFrZVVuaXF1ZTxGbG9hdFF1YWQ+KEZsb2F0UmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KSk7
Ci0gICAgaW5uZXJIaWdobGlnaHRRdWFkKFdURk1vdmUocXVhZCksIGNvbG9yLCBvdXRsaW5lQ29s
b3IsIHVzZVBhZ2VDb29yZGluYXRlcyk7CisgICAgaW5uZXJIaWdobGlnaHRRdWFkKFdURk1vdmUo
cXVhZCksIFdURk1vdmUoY29sb3IpLCBXVEZNb3ZlKG91dGxpbmVDb2xvciksIFdURk1vdmUodXNl
UGFnZUNvb3JkaW5hdGVzKSk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3Rv
ckRPTUFnZW50OjpoaWdobGlnaHRRdWFkKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3Qg
SlNPTjo6QXJyYXkmIHF1YWRBcnJheSwgY29uc3QgSlNPTjo6T2JqZWN0KiBjb2xvciwgY29uc3Qg
SlNPTjo6T2JqZWN0KiBvdXRsaW5lQ29sb3IsIGNvbnN0IGJvb2wqIHVzZVBhZ2VDb29yZGluYXRl
cykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRPTUFnZW50OjpoaWdo
bGlnaHRRdWFkKFJlZjxKU09OOjpBcnJheT4mJiBxdWFkT2JqZWN0LCBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiYmIGNvbG9yLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIG91dGxpbmVDb2xvciwgT3B0aW9u
YWw8Ym9vbD4mJiB1c2VQYWdlQ29vcmRpbmF0ZXMpCiB7CiAgICAgYXV0byBxdWFkID0gbWFrZVVu
aXF1ZTxGbG9hdFF1YWQ+KCk7Ci0gICAgaWYgKCFwYXJzZVF1YWQocXVhZEFycmF5LCBxdWFkLmdl
dCgpKSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJVbmV4cGVjdGVkIGludmFsaWQgcXVhZEFy
cmF5Il9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlubmVySGlnaGxpZ2h0UXVhZChX
VEZNb3ZlKHF1YWQpLCBjb2xvciwgb3V0bGluZUNvbG9yLCB1c2VQYWdlQ29vcmRpbmF0ZXMpOwor
ICAgIGlmICghcGFyc2VRdWFkKFdURk1vdmUocXVhZE9iamVjdCksIHF1YWQuZ2V0KCkpKQorICAg
ICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIlVuZXhwZWN0ZWQgaW52YWxpZCBxdWFkIl9zKTsK
KworICAgIGlubmVySGlnaGxpZ2h0UXVhZChXVEZNb3ZlKHF1YWQpLCBXVEZNb3ZlKGNvbG9yKSwg
V1RGTW92ZShvdXRsaW5lQ29sb3IpLCBXVEZNb3ZlKHVzZVBhZ2VDb29yZGluYXRlcykpOworCisg
ICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6aW5uZXJIaWdobGln
aHRRdWFkKHN0ZDo6dW5pcXVlX3B0cjxGbG9hdFF1YWQ+IHF1YWQsIGNvbnN0IEpTT046Ok9iamVj
dCogY29sb3IsIGNvbnN0IEpTT046Ok9iamVjdCogb3V0bGluZUNvbG9yLCBjb25zdCBib29sKiB1
c2VQYWdlQ29vcmRpbmF0ZXMpCit2b2lkIEluc3BlY3RvckRPTUFnZW50Ojppbm5lckhpZ2hsaWdo
dFF1YWQoc3RkOjp1bmlxdWVfcHRyPEZsb2F0UXVhZD4gcXVhZCwgUmVmUHRyPEpTT046Ok9iamVj
dD4mJiBjb2xvciwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBvdXRsaW5lQ29sb3IsIE9wdGlvbmFs
PGJvb2w+JiYgdXNlUGFnZUNvb3JkaW5hdGVzKQogewogICAgIGF1dG8gaGlnaGxpZ2h0Q29uZmln
ID0gbWFrZVVuaXF1ZTxIaWdobGlnaHRDb25maWc+KCk7Ci0gICAgaGlnaGxpZ2h0Q29uZmlnLT5j
b250ZW50ID0gcGFyc2VDb2xvcihjb2xvcik7Ci0gICAgaGlnaGxpZ2h0Q29uZmlnLT5jb250ZW50
T3V0bGluZSA9IHBhcnNlQ29sb3Iob3V0bGluZUNvbG9yKTsKKyAgICBoaWdobGlnaHRDb25maWct
PmNvbnRlbnQgPSBwYXJzZUNvbG9yKFdURk1vdmUoY29sb3IpKTsKKyAgICBoaWdobGlnaHRDb25m
aWctPmNvbnRlbnRPdXRsaW5lID0gcGFyc2VDb2xvcihXVEZNb3ZlKG91dGxpbmVDb2xvcikpOwog
ICAgIGhpZ2hsaWdodENvbmZpZy0+dXNlUGFnZUNvb3JkaW5hdGVzID0gdXNlUGFnZUNvb3JkaW5h
dGVzID8gKnVzZVBhZ2VDb29yZGluYXRlcyA6IGZhbHNlOwogICAgIG1fb3ZlcmxheS0+aGlnaGxp
Z2h0UXVhZChXVEZNb3ZlKHF1YWQpLCAqaGlnaGxpZ2h0Q29uZmlnKTsKIH0KIAotdm9pZCBJbnNw
ZWN0b3JET01BZ2VudDo6aGlnaGxpZ2h0U2VsZWN0b3IoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5n
LCBjb25zdCBKU09OOjpPYmplY3QmIGhpZ2hsaWdodEluc3BlY3Rvck9iamVjdCwgY29uc3QgU3Ry
aW5nJiBzZWxlY3RvclN0cmluZywgY29uc3QgU3RyaW5nKiBmcmFtZUlkKQorUHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yRE9NQWdlbnQ6OmhpZ2hsaWdodFNlbGVjdG9yKFJl
ZjxKU09OOjpPYmplY3Q+JiYgaGlnaGxpZ2h0SW5zcGVjdG9yT2JqZWN0LCBjb25zdCBTdHJpbmcm
IHNlbGVjdG9yU3RyaW5nLCBjb25zdCBQcm90b2NvbDo6TmV0d29yazo6RnJhbWVJZCYgZnJhbWVJ
ZCkKIHsKLSAgICBhdXRvIGhpZ2hsaWdodENvbmZpZyA9IGhpZ2hsaWdodENvbmZpZ0Zyb21JbnNw
ZWN0b3JPYmplY3QoZXJyb3JTdHJpbmcsICZoaWdobGlnaHRJbnNwZWN0b3JPYmplY3QpOworICAg
IFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKworICAgIGF1dG8gaGlnaGxpZ2h0
Q29uZmlnID0gaGlnaGxpZ2h0Q29uZmlnRnJvbUluc3BlY3Rvck9iamVjdChlcnJvclN0cmluZywg
V1RGTW92ZShoaWdobGlnaHRJbnNwZWN0b3JPYmplY3QpKTsKICAgICBpZiAoIWhpZ2hsaWdodENv
bmZpZykKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJy
b3JTdHJpbmcpOwogCiAgICAgUmVmUHRyPERvY3VtZW50PiBkb2N1bWVudDsKIAotICAgIGlmIChm
cmFtZUlkKSB7CisgICAgaWYgKCEhZnJhbWVJZCkgewogICAgICAgICBhdXRvKiBwYWdlQWdlbnQg
PSBtX2luc3RydW1lbnRpbmdBZ2VudHMuZW5hYmxlZFBhZ2VBZ2VudCgpOwotICAgICAgICBpZiAo
IXBhZ2VBZ2VudCkgewotICAgICAgICAgICAgZXJyb3JTdHJpbmcgPSAiUGFnZSBkb21haW4gbXVz
dCBiZSBlbmFibGVkIl9zOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9CisgICAgICAg
IGlmICghcGFnZUFnZW50KQorICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJQYWdl
IGRvbWFpbiBtdXN0IGJlIGVuYWJsZWQiX3MpOwogCi0gICAgICAgIGF1dG8qIGZyYW1lID0gcGFn
ZUFnZW50LT5hc3NlcnRGcmFtZShlcnJvclN0cmluZywgKmZyYW1lSWQpOworICAgICAgICBhdXRv
KiBmcmFtZSA9IHBhZ2VBZ2VudC0+YXNzZXJ0RnJhbWUoZXJyb3JTdHJpbmcsIGZyYW1lSWQpOwog
ICAgICAgICBpZiAoIWZyYW1lKQotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgcmV0
dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgICAgICBkb2N1bWVudCA9IGZy
YW1lLT5kb2N1bWVudCgpOwogICAgIH0gZWxzZQogICAgICAgICBkb2N1bWVudCA9IG1fZG9jdW1l
bnQ7CiAKLSAgICBpZiAoIWRvY3VtZW50KSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIk1pc3Np
bmcgZG9jdW1lbnQgb2YgZnJhbWUgZm9yIGdpdmVuIGZyYW1lSWQiX3M7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9CisgICAgaWYgKCFkb2N1bWVudCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVj
dGVkKCJNaXNzaW5nIGRvY3VtZW50IG9mIGZyYW1lIGZvciBnaXZlbiBmcmFtZUlkIl9zKTsKIAog
ICAgIENTU1BhcnNlciBwYXJzZXIoKmRvY3VtZW50KTsKICAgICBDU1NTZWxlY3Rvckxpc3Qgc2Vs
ZWN0b3JMaXN0OwpAQCAtMTMzOSwxNTggKzEzODIsMTczIEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdl
bnQ6OmhpZ2hsaWdodFNlbGVjdG9yKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgSlNP
Tjo6CiAgICAgfQogCiAgICAgbV9vdmVybGF5LT5oaWdobGlnaHROb2RlTGlzdChTdGF0aWNOb2Rl
TGlzdDo6Y3JlYXRlKFdURk1vdmUobm9kZUxpc3QpKSwgKmhpZ2hsaWdodENvbmZpZyk7CisKKyAg
ICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpoaWdobGlnaHROb2Rl
KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgSlNPTjo6T2JqZWN0JiBoaWdobGlnaHRJ
bnNwZWN0b3JPYmplY3QsIGNvbnN0IGludCogbm9kZUlkLCBjb25zdCBTdHJpbmcqIG9iamVjdElk
KQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yRE9NQWdlbnQ6OmhpZ2hs
aWdodE5vZGUoUmVmPEpTT046Ok9iamVjdD4mJiBoaWdobGlnaHRJbnNwZWN0b3JPYmplY3QsIE9w
dGlvbmFsPFByb3RvY29sOjpET006Ok5vZGVJZD4mJiBub2RlSWQsIGNvbnN0IFByb3RvY29sOjpS
dW50aW1lOjpSZW1vdGVPYmplY3RJZCYgb2JqZWN0SWQpCiB7CisgICAgUHJvdG9jb2w6OkVycm9y
U3RyaW5nIGVycm9yU3RyaW5nOworCiAgICAgTm9kZSogbm9kZSA9IG51bGxwdHI7CiAgICAgaWYg
KG5vZGVJZCkKICAgICAgICAgbm9kZSA9IGFzc2VydE5vZGUoZXJyb3JTdHJpbmcsICpub2RlSWQp
OwotICAgIGVsc2UgaWYgKG9iamVjdElkKSB7Ci0gICAgICAgIG5vZGUgPSBub2RlRm9yT2JqZWN0
SWQoKm9iamVjdElkKTsKLSAgICAgICAgaWYgKCFub2RlKQotICAgICAgICAgICAgZXJyb3JTdHJp
bmcgPSAiTWlzc2luZyBub2RlIGZvciBnaXZlbiBvYmplY3RJZCJfczsKKyAgICBlbHNlIGlmICgh
IW9iamVjdElkKSB7CisgICAgICAgIG5vZGUgPSBub2RlRm9yT2JqZWN0SWQob2JqZWN0SWQpOwor
ICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIG5vZGUgZm9yIGdpdmVuIG9iamVjdElkIl9z
OwogICAgIH0gZWxzZQogICAgICAgICBlcnJvclN0cmluZyA9ICJFaXRoZXIgbm9kZUlkIG9yIG9i
amVjdElkIG11c3QgYmUgc3BlY2lmaWVkIl9zOwogCiAgICAgaWYgKCFub2RlKQotICAgICAgICBy
ZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKLSAg
ICBzdGQ6OnVuaXF1ZV9wdHI8SGlnaGxpZ2h0Q29uZmlnPiBoaWdobGlnaHRDb25maWcgPSBoaWdo
bGlnaHRDb25maWdGcm9tSW5zcGVjdG9yT2JqZWN0KGVycm9yU3RyaW5nLCAmaGlnaGxpZ2h0SW5z
cGVjdG9yT2JqZWN0KTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SGlnaGxpZ2h0Q29uZmlnPiBoaWdo
bGlnaHRDb25maWcgPSBoaWdobGlnaHRDb25maWdGcm9tSW5zcGVjdG9yT2JqZWN0KGVycm9yU3Ry
aW5nLCBXVEZNb3ZlKGhpZ2hsaWdodEluc3BlY3Rvck9iamVjdCkpOwogICAgIGlmICghaGlnaGxp
Z2h0Q29uZmlnKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3Rl
ZChlcnJvclN0cmluZyk7CiAKICAgICBtX292ZXJsYXktPmhpZ2hsaWdodE5vZGUobm9kZSwgKmhp
Z2hsaWdodENvbmZpZyk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckRP
TUFnZW50OjpoaWdobGlnaHROb2RlTGlzdChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0
IEpTT046OkFycmF5JiBub2RlSWRzLCBjb25zdCBKU09OOjpPYmplY3QmIGhpZ2hsaWdodEluc3Bl
Y3Rvck9iamVjdCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRPTUFn
ZW50OjpoaWdobGlnaHROb2RlTGlzdChSZWY8SlNPTjo6QXJyYXk+JiYgbm9kZUlkcywgUmVmPEpT
T046Ok9iamVjdD4mJiBoaWdobGlnaHRJbnNwZWN0b3JPYmplY3QpCiB7Ci0gICAgVmVjdG9yPFJl
ZjxOb2RlPj4gbm9kZXM7Ci0gICAgZm9yIChhdXRvJiBub2RlVmFsdWUgOiBub2RlSWRzKSB7Ci0g
ICAgICAgIGlmICghbm9kZVZhbHVlKSB7Ci0gICAgICAgICAgICBlcnJvclN0cmluZyA9ICJVbmV4
cGVjdGVkIG5vbi1pbnRlZ2VyIGl0ZW0gaW4gZ2l2ZW4gbm9kZUlkcyJfczsKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfQorICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmlu
ZzsKIAotICAgICAgICBpbnQgbm9kZUlkID0gMDsKLSAgICAgICAgaWYgKCFub2RlVmFsdWUtPmFz
SW50ZWdlcihub2RlSWQpKSB7Ci0gICAgICAgICAgICBlcnJvclN0cmluZyA9ICJVbmV4cGVjdGVk
IG5vbi1pbnRlZ2VyIGl0ZW0gaW4gZ2l2ZW4gbm9kZUlkcyJfczsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQorICAgIFZlY3RvcjxSZWY8Tm9kZT4+IG5vZGVzOworICAgIGZvciAoYXV0
byYgbm9kZUlkVmFsdWUgOiBub2RlSWRzLmdldCgpKSB7CisgICAgICAgIGF1dG8gbm9kZUlkID0g
bm9kZUlkVmFsdWUtPmFzSW50ZWdlcigpOworICAgICAgICBpZiAoIW5vZGVJZCkKKyAgICAgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiVW5leHBlY3RlZCBub24taW50ZWdlciBpdGVtIGlu
IGdpdmVuIG5vZGVJZHMiX3MpOwogCiAgICAgICAgIC8vIEluIHRoZSBjYXNlIHRoYXQgYSBub2Rl
IGlzIHJlbW92ZWQgaW4gdGhlIHRpbWUgYmV0d2VlbiB3aGVuIGhpZ2hsaWdodE5vZGVMaXN0IGlz
IGludm9rZWQKICAgICAgICAgLy8gYnkgdGhlIGZyb250ZW5kIGFuZCBpdCBpcyBleGVjdXRlZCBi
eSB0aGUgYmFja2VuZCwgd2Ugc2hvdWxkIHN0aWxsIGF0dGVtcHQgdG8gaGlnaGxpZ2h0CiAgICAg
ICAgIC8vIGFzIG1hbnkgbm9kZXMgYXMgcG9zc2libGUuIEFzIHN1Y2gsIHdlIHNob3VsZCBpZ25v
cmUgYW55IGVycm9ycyBnZW5lcmF0ZWQgd2hlbiBhdHRlbXB0aW5nCiAgICAgICAgIC8vIHRvIGdl
dCBhIE5vZGUgZnJvbSBhIGdpdmVuIG5vZGVJZC4gCi0gICAgICAgIEVycm9yU3RyaW5nIGlnbm9y
ZWQ7Ci0gICAgICAgIE5vZGUqIG5vZGUgPSBhc3NlcnROb2RlKGlnbm9yZWQsIG5vZGVJZCk7Cisg
ICAgICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBpZ25vcmVkOworICAgICAgICBOb2RlKiBub2Rl
ID0gYXNzZXJ0Tm9kZShpZ25vcmVkLCAqbm9kZUlkKTsKICAgICAgICAgaWYgKCFub2RlKQogICAg
ICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgbm9kZXMuYXBwZW5kKCpub2RlKTsKICAgICB9
CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SGlnaGxpZ2h0Q29uZmlnPiBoaWdobGlnaHRDb25maWcg
PSBoaWdobGlnaHRDb25maWdGcm9tSW5zcGVjdG9yT2JqZWN0KGVycm9yU3RyaW5nLCAmaGlnaGxp
Z2h0SW5zcGVjdG9yT2JqZWN0KTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SGlnaGxpZ2h0Q29uZmln
PiBoaWdobGlnaHRDb25maWcgPSBoaWdobGlnaHRDb25maWdGcm9tSW5zcGVjdG9yT2JqZWN0KGVy
cm9yU3RyaW5nLCBXVEZNb3ZlKGhpZ2hsaWdodEluc3BlY3Rvck9iamVjdCkpOwogICAgIGlmICgh
aGlnaGxpZ2h0Q29uZmlnKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5l
eHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAgICBtX292ZXJsYXktPmhpZ2hsaWdodE5vZGVMaXN0
KFN0YXRpY05vZGVMaXN0OjpjcmVhdGUoV1RGTW92ZShub2RlcykpLCAqaGlnaGxpZ2h0Q29uZmln
KTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmhpZ2hs
aWdodEZyYW1lKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBmcmFtZUlk
LCBjb25zdCBKU09OOjpPYmplY3QqIGNvbG9yLCBjb25zdCBKU09OOjpPYmplY3QqIG91dGxpbmVD
b2xvcikKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRPTUFnZW50Ojpo
aWdobGlnaHRGcmFtZShjb25zdCBQcm90b2NvbDo6TmV0d29yazo6RnJhbWVJZCYgZnJhbWVJZCwg
UmVmUHRyPEpTT046Ok9iamVjdD4mJiBjb2xvciwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBvdXRs
aW5lQ29sb3IpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAg
ICAgYXV0byogcGFnZUFnZW50ID0gbV9pbnN0cnVtZW50aW5nQWdlbnRzLmVuYWJsZWRQYWdlQWdl
bnQoKTsKLSAgICBpZiAoIXBhZ2VBZ2VudCkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJQYWdl
IGRvbWFpbiBtdXN0IGJlIGVuYWJsZWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAg
aWYgKCFwYWdlQWdlbnQpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiUGFnZSBkb21h
aW4gbXVzdCBiZSBlbmFibGVkIl9zKTsKIAogICAgIGF1dG8qIGZyYW1lID0gcGFnZUFnZW50LT5h
c3NlcnRGcmFtZShlcnJvclN0cmluZywgZnJhbWVJZCk7CiAgICAgaWYgKCFmcmFtZSkKLSAgICAg
ICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwog
CiAgICAgaWYgKGZyYW1lLT5vd25lckVsZW1lbnQoKSkgewogICAgICAgICBhdXRvIGhpZ2hsaWdo
dENvbmZpZyA9IG1ha2VVbmlxdWU8SGlnaGxpZ2h0Q29uZmlnPigpOwogICAgICAgICBoaWdobGln
aHRDb25maWctPnNob3dJbmZvID0gdHJ1ZTsgLy8gQWx3YXlzIHNob3cgdG9vbHRpcHMgZm9yIGZy
YW1lcy4KLSAgICAgICAgaGlnaGxpZ2h0Q29uZmlnLT5jb250ZW50ID0gcGFyc2VDb2xvcihjb2xv
cik7Ci0gICAgICAgIGhpZ2hsaWdodENvbmZpZy0+Y29udGVudE91dGxpbmUgPSBwYXJzZUNvbG9y
KG91dGxpbmVDb2xvcik7CisgICAgICAgIGhpZ2hsaWdodENvbmZpZy0+Y29udGVudCA9IHBhcnNl
Q29sb3IoV1RGTW92ZShjb2xvcikpOworICAgICAgICBoaWdobGlnaHRDb25maWctPmNvbnRlbnRP
dXRsaW5lID0gcGFyc2VDb2xvcihXVEZNb3ZlKG91dGxpbmVDb2xvcikpOwogICAgICAgICBtX292
ZXJsYXktPmhpZ2hsaWdodE5vZGUoZnJhbWUtPm93bmVyRWxlbWVudCgpLCAqaGlnaGxpZ2h0Q29u
ZmlnKTsKICAgICB9CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckRPTUFn
ZW50OjpoaWRlSGlnaGxpZ2h0KEVycm9yU3RyaW5nJikKK1Byb3RvY29sOjpFcnJvclN0cmluZ09y
PHZvaWQ+IEluc3BlY3RvckRPTUFnZW50OjpoaWRlSGlnaGxpZ2h0KCkKIHsKICAgICBtX292ZXJs
YXktPmhpZGVIaWdobGlnaHQoKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVj
dG9yRE9NQWdlbnQ6Om1vdmVUbyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQs
IGludCB0YXJnZXRFbGVtZW50SWQsIGNvbnN0IGludCogYW5jaG9yTm9kZUlkLCBpbnQqIG5ld05v
ZGVJZCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPFByb3RvY29sOjpET006Ok5vZGVJZD4gSW5z
cGVjdG9yRE9NQWdlbnQ6Om1vdmVUbyhQcm90b2NvbDo6RE9NOjpOb2RlSWQgbm9kZUlkLCBQcm90
b2NvbDo6RE9NOjpOb2RlSWQgdGFyZ2V0Tm9kZUlkLCBPcHRpb25hbDxQcm90b2NvbDo6RE9NOjpO
b2RlSWQ+JiYgaW5zZXJ0QmVmb3JlTm9kZUlkKQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmlu
ZyBlcnJvclN0cmluZzsKKwogICAgIE5vZGUqIG5vZGUgPSBhc3NlcnRFZGl0YWJsZU5vZGUoZXJy
b3JTdHJpbmcsIG5vZGVJZCk7CiAgICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm47CisgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKLSAgICBFbGVtZW50KiB0
YXJnZXRFbGVtZW50ID0gYXNzZXJ0RWRpdGFibGVFbGVtZW50KGVycm9yU3RyaW5nLCB0YXJnZXRF
bGVtZW50SWQpOworICAgIEVsZW1lbnQqIHRhcmdldEVsZW1lbnQgPSBhc3NlcnRFZGl0YWJsZUVs
ZW1lbnQoZXJyb3JTdHJpbmcsIHRhcmdldE5vZGVJZCk7CiAgICAgaWYgKCF0YXJnZXRFbGVtZW50
KQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0
cmluZyk7CiAKLSAgICBOb2RlKiBhbmNob3JOb2RlID0gMDsKLSAgICBpZiAoYW5jaG9yTm9kZUlk
ICYmICphbmNob3JOb2RlSWQpIHsKLSAgICAgICAgYW5jaG9yTm9kZSA9IGFzc2VydEVkaXRhYmxl
Tm9kZShlcnJvclN0cmluZywgKmFuY2hvck5vZGVJZCk7CisgICAgTm9kZSogYW5jaG9yTm9kZSA9
IG51bGxwdHI7CisgICAgaWYgKGluc2VydEJlZm9yZU5vZGVJZCAmJiAqaW5zZXJ0QmVmb3JlTm9k
ZUlkKSB7CisgICAgICAgIGFuY2hvck5vZGUgPSBhc3NlcnRFZGl0YWJsZU5vZGUoZXJyb3JTdHJp
bmcsICppbnNlcnRCZWZvcmVOb2RlSWQpOwogICAgICAgICBpZiAoIWFuY2hvck5vZGUpCi0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmIChhbmNob3JOb2RlLT5wYXJlbnROb2RlKCkgIT0g
dGFyZ2V0RWxlbWVudCkgewotICAgICAgICAgICAgZXJyb3JTdHJpbmcgPSAiR2l2ZW4gYW5jaG9y
Tm9kZUlkIG11c3QgYmUgYSBjaGlsZCBvZiBnaXZlbiB0YXJnZXRFbGVtZW50SWQiX3M7Ci0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBl
Y3RlZChlcnJvclN0cmluZyk7CisgICAgICAgIGlmIChhbmNob3JOb2RlLT5wYXJlbnROb2RlKCkg
IT0gdGFyZ2V0RWxlbWVudCkKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiR2l2
ZW4gaW5zZXJ0QmVmb3JlTm9kZUlkIG11c3QgYmUgYSBjaGlsZCBvZiBnaXZlbiB0YXJnZXROb2Rl
SWQiX3MpOwogICAgIH0KIAogICAgIGlmICghbV9kb21FZGl0b3ItPmluc2VydEJlZm9yZSgqdGFy
Z2V0RWxlbWVudCwgKm5vZGUsIGFuY2hvck5vZGUsIGVycm9yU3RyaW5nKSkKLSAgICAgICAgcmV0
dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCi0gICAg
Km5ld05vZGVJZCA9IHB1c2hOb2RlUGF0aFRvRnJvbnRlbmQoZXJyb3JTdHJpbmcsIG5vZGUpOwor
ICAgIHJldHVybiBwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKGVycm9yU3RyaW5nLCBub2RlKTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6dW5kbyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcp
CitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JET01BZ2VudDo6dW5kbygp
CiB7CiAgICAgYXV0byByZXN1bHQgPSBtX2hpc3RvcnktPnVuZG8oKTsKICAgICBpZiAocmVzdWx0
Lmhhc0V4Y2VwdGlvbigpKQotICAgICAgICBlcnJvclN0cmluZyA9IHRvRXJyb3JTdHJpbmcocmVz
dWx0LnJlbGVhc2VFeGNlcHRpb24oKSk7CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChJ
bnNwZWN0b3JET01BZ2VudDo6dG9FcnJvclN0cmluZyhyZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigp
KSk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpyZWRv
KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+
IEluc3BlY3RvckRPTUFnZW50OjpyZWRvKCkKIHsKICAgICBhdXRvIHJlc3VsdCA9IG1faGlzdG9y
eS0+cmVkbygpOwogICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpCi0gICAgICAgIGVycm9y
U3RyaW5nID0gdG9FcnJvclN0cmluZyhyZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpKTsKKyAgICAg
ICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEluc3BlY3RvckRPTUFnZW50Ojp0b0Vycm9yU3RyaW5n
KHJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCkpKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZv
aWQgSW5zcGVjdG9yRE9NQWdlbnQ6Om1hcmtVbmRvYWJsZVN0YXRlKEVycm9yU3RyaW5nJikKK1By
b3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRPTUFnZW50OjptYXJrVW5kb2Fi
bGVTdGF0ZSgpCiB7CiAgICAgbV9oaXN0b3J5LT5tYXJrVW5kb2FibGVTdGF0ZSgpOworCisgICAg
cmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Zm9jdXMoRXJyb3JTdHJp
bmcmIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9p
ZD4gSW5zcGVjdG9yRE9NQWdlbnQ6OmZvY3VzKFByb3RvY29sOjpET006Ok5vZGVJZCBub2RlSWQp
CiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAgICAgRWxlbWVu
dCogZWxlbWVudCA9IGFzc2VydEVsZW1lbnQoZXJyb3JTdHJpbmcsIG5vZGVJZCk7CiAgICAgaWYg
KCFlbGVtZW50KQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKCFlbGVtZW50LT5pc0ZvY3VzYWJs
ZSgpKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIkVsZW1lbnQgZm9yIGdpdmVuIG5vZGVJZCBp
cyBub3QgZm9jdXNhYmxlIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgICAgICByZXR1
cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOworICAgIGlmICghZWxlbWVudC0+aXNGb2N1
c2FibGUoKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJFbGVtZW50IGZvciBnaXZl
biBub2RlSWQgaXMgbm90IGZvY3VzYWJsZSJfcyk7CisKICAgICBlbGVtZW50LT5mb2N1cygpOwor
CisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c2V0SW5zcGVj
dGVkTm9kZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQpCitQcm90b2NvbDo6
RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JET01BZ2VudDo6c2V0SW5zcGVjdGVkTm9kZShQ
cm90b2NvbDo6RE9NOjpOb2RlSWQgbm9kZUlkKQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmlu
ZyBlcnJvclN0cmluZzsKKwogICAgIE5vZGUqIG5vZGUgPSBhc3NlcnROb2RlKGVycm9yU3RyaW5n
LCBub2RlSWQpOwogICAgIGlmICghbm9kZSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1
cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCi0gICAgaWYgKG5vZGUtPmlzSW5Vc2Vy
QWdlbnRTaGFkb3dUcmVlKCkgJiYgIW1fYWxsb3dFZGl0aW5nVXNlckFnZW50U2hhZG93VHJlZXMp
IHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiTm9kZSBmb3IgZ2l2ZW4gbm9kZUlkIGlzIGluIGEg
c2hhZG93IHRyZWUiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKG5vZGUtPmlz
SW5Vc2VyQWdlbnRTaGFkb3dUcmVlKCkgJiYgIW1fYWxsb3dFZGl0aW5nVXNlckFnZW50U2hhZG93
VHJlZXMpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTm9kZSBmb3IgZ2l2ZW4gbm9k
ZUlkIGlzIGluIGEgc2hhZG93IHRyZWUiX3MpOwogCiAgICAgbV9pbnNwZWN0ZWROb2RlID0gbm9k
ZTsKIApAQCAtMTQ5OCwzOCArMTU1Niw0OSBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpzZXRJ
bnNwZWN0ZWROb2RlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJZCkKICAgICAg
ICAgY29tbWFuZExpbmVBUElIb3N0LT5hZGRJbnNwZWN0ZWRPYmplY3QobWFrZVVuaXF1ZTxJbnNw
ZWN0YWJsZU5vZGU+KG5vZGUpKTsKIAogICAgIG1fc3VwcHJlc3NFdmVudExpc3RlbmVyQ2hhbmdl
ZEV2ZW50ID0gZmFsc2U7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckRP
TUFnZW50OjpyZXNvbHZlTm9kZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQs
IGNvbnN0IFN0cmluZyogb2JqZWN0R3JvdXAsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpS
dW50aW1lOjpSZW1vdGVPYmplY3Q+JiByZXN1bHQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxS
ZWY8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4+IEluc3BlY3RvckRPTUFnZW50Ojpy
ZXNvbHZlTm9kZShQcm90b2NvbDo6RE9NOjpOb2RlSWQgbm9kZUlkLCBjb25zdCBTdHJpbmcmIG9i
amVjdEdyb3VwKQogewotICAgIFN0cmluZyBvYmplY3RHcm91cE5hbWUgPSBvYmplY3RHcm91cCA/
ICpvYmplY3RHcm91cCA6IGVtcHR5U3RyaW5nKCk7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5n
IGVycm9yU3RyaW5nOworCiAgICAgTm9kZSogbm9kZSA9IGFzc2VydE5vZGUoZXJyb3JTdHJpbmcs
IG5vZGVJZCk7CiAgICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm47Ci0gICAgUmVmUHRyPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4gb2JqZWN0ID0gcmVzb2x2
ZU5vZGUobm9kZSwgb2JqZWN0R3JvdXBOYW1lKTsKLSAgICBpZiAoIW9iamVjdCkgewotICAgICAg
ICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIGluamVjdGVkIHNjcmlwdCBmb3IgZ2l2ZW4gbm9kZUlk
Il9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIHJlc3VsdCA9IG9iamVjdDsKKyAgICAg
ICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKKworICAgIFJlZlB0cjxQcm90
b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiBvYmplY3QgPSByZXNvbHZlTm9kZShub2RlLCBv
YmplY3RHcm91cCk7CisgICAgaWYgKCFvYmplY3QpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBl
Y3RlZCgiTWlzc2luZyBpbmplY3RlZCBzY3JpcHQgZm9yIGdpdmVuIG5vZGVJZCJfcyk7CisKKyAg
ICByZXR1cm4gb2JqZWN0LnJlbGVhc2VOb25OdWxsKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9N
QWdlbnQ6OmdldEF0dHJpYnV0ZXMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlk
LCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiYgcmVzdWx0KQorUHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8UmVmPEpTT046OkFycmF5T2Y8U3RyaW5nPj4+IEluc3BlY3RvckRPTUFnZW50Ojpn
ZXRBdHRyaWJ1dGVzKFByb3RvY29sOjpET006Ok5vZGVJZCBub2RlSWQpCiB7CisgICAgUHJvdG9j
b2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAgICAgRWxlbWVudCogZWxlbWVudCA9IGFz
c2VydEVsZW1lbnQoZXJyb3JTdHJpbmcsIG5vZGVJZCk7CiAgICAgaWYgKCFlbGVtZW50KQotICAg
ICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7
CiAKLSAgICByZXN1bHQgPSBidWlsZEFycmF5Rm9yRWxlbWVudEF0dHJpYnV0ZXMoZWxlbWVudCk7
CisgICAgcmV0dXJuIGJ1aWxkQXJyYXlGb3JFbGVtZW50QXR0cmlidXRlcyhlbGVtZW50KTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6cmVxdWVzdE5vZGUoRXJyb3JTdHJpbmcmIGVycm9y
U3RyaW5nLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBpbnQqIG5vZGVJZCkKK1Byb3RvY29sOjpF
cnJvclN0cmluZ09yPFByb3RvY29sOjpET006Ok5vZGVJZD4gSW5zcGVjdG9yRE9NQWdlbnQ6OnJl
cXVlc3ROb2RlKGNvbnN0IFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3RJZCYgb2JqZWN0
SWQpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAgICAgTm9k
ZSogbm9kZSA9IG5vZGVGb3JPYmplY3RJZChvYmplY3RJZCk7Ci0gICAgaWYgKG5vZGUpCi0gICAg
ICAgICpub2RlSWQgPSBwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKGVycm9yU3RyaW5nLCBub2RlKTsK
LSAgICBlbHNlCi0gICAgICAgICpub2RlSWQgPSAwOworICAgIGlmICghbm9kZSkKKyAgICAgICAg
cmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJNaXNzaW5nIG5vZGUgZm9yIGdpdmVuIG9iamVjdElkIl9z
KTsKKworICAgIGF1dG8gbm9kZUlkID0gcHVzaE5vZGVQYXRoVG9Gcm9udGVuZChlcnJvclN0cmlu
Zywgbm9kZSk7CisgICAgaWYgKCFub2RlSWQpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3Rl
ZChlcnJvclN0cmluZyk7CisKKyAgICByZXR1cm4gbm9kZUlkOwogfQogCiBTdHJpbmcgSW5zcGVj
dG9yRE9NQWdlbnQ6OmRvY3VtZW50VVJMU3RyaW5nKERvY3VtZW50KiBkb2N1bWVudCkKQEAgLTE1
NDQsNDQgKzE2MTMsNDQgQEAgc3RhdGljIFN0cmluZyBkb2N1bWVudEJhc2VVUkxTdHJpbmcoRG9j
dW1lbnQqIGRvY3VtZW50KQogICAgIHJldHVybiBkb2N1bWVudC0+Y29tcGxldGVVUkwoZW1wdHlT
dHJpbmcoKSkuc3RyaW5nKCk7CiB9CiAKLXN0YXRpYyBib29sIHBzZXVkb0VsZW1lbnRUeXBlKFBz
ZXVkb0lkIHBzZXVkb0lkLCBJbnNwZWN0b3I6OlByb3RvY29sOjpET006OlBzZXVkb1R5cGUqIHR5
cGUpCitzdGF0aWMgYm9vbCBwc2V1ZG9FbGVtZW50VHlwZShQc2V1ZG9JZCBwc2V1ZG9JZCwgUHJv
dG9jb2w6OkRPTTo6UHNldWRvVHlwZSogdHlwZSkKIHsKICAgICBzd2l0Y2ggKHBzZXVkb0lkKSB7
CiAgICAgY2FzZSBQc2V1ZG9JZDo6QmVmb3JlOgotICAgICAgICAqdHlwZSA9IEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRPTTo6UHNldWRvVHlwZTo6QmVmb3JlOworICAgICAgICAqdHlwZSA9IFByb3Rv
Y29sOjpET006OlBzZXVkb1R5cGU6OkJlZm9yZTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
Y2FzZSBQc2V1ZG9JZDo6QWZ0ZXI6Ci0gICAgICAgICp0eXBlID0gSW5zcGVjdG9yOjpQcm90b2Nv
bDo6RE9NOjpQc2V1ZG9UeXBlOjpBZnRlcjsKKyAgICAgICAgKnR5cGUgPSBQcm90b2NvbDo6RE9N
OjpQc2V1ZG9UeXBlOjpBZnRlcjsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgZGVmYXVsdDoK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIH0KIAotc3RhdGljIEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRPTTo6U2hhZG93Um9vdFR5cGUgc2hhZG93Um9vdFR5cGUoU2hhZG93Um9vdE1vZGUg
bW9kZSkKK3N0YXRpYyBQcm90b2NvbDo6RE9NOjpTaGFkb3dSb290VHlwZSBzaGFkb3dSb290VHlw
ZShTaGFkb3dSb290TW9kZSBtb2RlKQogewogICAgIHN3aXRjaCAobW9kZSkgewogICAgIGNhc2Ug
U2hhZG93Um9vdE1vZGU6OlVzZXJBZ2VudDoKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRPTTo6U2hhZG93Um9vdFR5cGU6OlVzZXJBZ2VudDsKKyAgICAgICAgcmV0dXJuIFBy
b3RvY29sOjpET006OlNoYWRvd1Jvb3RUeXBlOjpVc2VyQWdlbnQ7CiAgICAgY2FzZSBTaGFkb3dS
b290TW9kZTo6Q2xvc2VkOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9N
OjpTaGFkb3dSb290VHlwZTo6Q2xvc2VkOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OkRPTTo6
U2hhZG93Um9vdFR5cGU6OkNsb3NlZDsKICAgICBjYXNlIFNoYWRvd1Jvb3RNb2RlOjpPcGVuOgot
ICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpTaGFkb3dSb290VHlwZTo6
T3BlbjsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpET006OlNoYWRvd1Jvb3RUeXBlOjpPcGVu
OwogICAgIH0KIAogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBJbnNwZWN0
b3I6OlByb3RvY29sOjpET006OlNoYWRvd1Jvb3RUeXBlOjpVc2VyQWdlbnQ7CisgICAgcmV0dXJu
IFByb3RvY29sOjpET006OlNoYWRvd1Jvb3RUeXBlOjpVc2VyQWdlbnQ7CiB9CiAKLXN0YXRpYyBJ
bnNwZWN0b3I6OlByb3RvY29sOjpET006OkN1c3RvbUVsZW1lbnRTdGF0ZSBjdXN0b21FbGVtZW50
U3RhdGUoY29uc3QgRWxlbWVudCYgZWxlbWVudCkKK3N0YXRpYyBQcm90b2NvbDo6RE9NOjpDdXN0
b21FbGVtZW50U3RhdGUgY3VzdG9tRWxlbWVudFN0YXRlKGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQp
CiB7CiAgICAgaWYgKGVsZW1lbnQuaXNEZWZpbmVkQ3VzdG9tRWxlbWVudCgpKQotICAgICAgICBy
ZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpDdXN0b21FbGVtZW50U3RhdGU6OkN1c3Rv
bTsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpET006OkN1c3RvbUVsZW1lbnRTdGF0ZTo6Q3Vz
dG9tOwogICAgIGlmIChlbGVtZW50LmlzRmFpbGVkQ3VzdG9tRWxlbWVudCgpKQotICAgICAgICBy
ZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpDdXN0b21FbGVtZW50U3RhdGU6OkZhaWxl
ZDsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpET006OkN1c3RvbUVsZW1lbnRTdGF0ZTo6RmFp
bGVkOwogICAgIGlmIChlbGVtZW50LmlzVW5kZWZpbmVkQ3VzdG9tRWxlbWVudCgpIHx8IGVsZW1l
bnQuaXNDdXN0b21FbGVtZW50VXBncmFkZUNhbmRpZGF0ZSgpKQotICAgICAgICByZXR1cm4gSW5z
cGVjdG9yOjpQcm90b2NvbDo6RE9NOjpDdXN0b21FbGVtZW50U3RhdGU6OldhaXRpbmc7Ci0gICAg
cmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Q3VzdG9tRWxlbWVudFN0YXRlOjpCdWls
dGluOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OkRPTTo6Q3VzdG9tRWxlbWVudFN0YXRlOjpX
YWl0aW5nOworICAgIHJldHVybiBQcm90b2NvbDo6RE9NOjpDdXN0b21FbGVtZW50U3RhdGU6OkJ1
aWx0aW47CiB9CiAKIHN0YXRpYyBTdHJpbmcgY29tcHV0ZUNvbnRlbnRTZWN1cml0eVBvbGljeVNI
QTI1Nkhhc2goY29uc3QgRWxlbWVudCYgZWxlbWVudCkKQEAgLTE1OTcsOSArMTY2Niw5IEBAIHN0
YXRpYyBTdHJpbmcgY29tcHV0ZUNvbnRlbnRTZWN1cml0eVBvbGljeVNIQTI1Nkhhc2goY29uc3Qg
RWxlbWVudCYgZWxlbWVudCkKICAgICByZXR1cm4gbWFrZVN0cmluZygic2hhMjU2LSIsIGJhc2U2
NEVuY29kZShkaWdlc3QuZGF0YSgpLCBkaWdlc3Quc2l6ZSgpKSk7CiB9CiAKLVJlZjxJbnNwZWN0
b3I6OlByb3RvY29sOjpET006Ok5vZGU+IEluc3BlY3RvckRPTUFnZW50OjpidWlsZE9iamVjdEZv
ck5vZGUoTm9kZSogbm9kZSwgaW50IGRlcHRoLCBOb2RlVG9JZE1hcCogbm9kZXNNYXApCitSZWY8
UHJvdG9jb2w6OkRPTTo6Tm9kZT4gSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yTm9k
ZShOb2RlKiBub2RlLCBpbnQgZGVwdGgsIE5vZGVUb0lkTWFwKiBub2Rlc01hcCkKIHsKLSAgICBp
bnQgaWQgPSBiaW5kKG5vZGUsIG5vZGVzTWFwKTsKKyAgICBhdXRvIGlkID0gYmluZChub2RlLCBu
b2Rlc01hcCk7CiAgICAgU3RyaW5nIG5vZGVOYW1lOwogICAgIFN0cmluZyBsb2NhbE5hbWU7CiAg
ICAgU3RyaW5nIG5vZGVWYWx1ZTsKQEAgLTE2MzAsNyArMTY5OSw3IEBAIFJlZjxJbnNwZWN0b3I6
OlByb3RvY29sOjpET006Ok5vZGU+IEluc3BlY3RvckRPTUFnZW50OjpidWlsZE9iamVjdEZvck5v
ZGUoTm9kZSoKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgYXV0byB2YWx1ZSA9IEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZTo6Y3JlYXRlKCkKKyAgICBhdXRvIHZhbHVlID0gUHJv
dG9jb2w6OkRPTTo6Tm9kZTo6Y3JlYXRlKCkKICAgICAgICAgLnNldE5vZGVJZChpZCkKICAgICAg
ICAgLnNldE5vZGVUeXBlKHN0YXRpY19jYXN0PGludD4obm9kZS0+bm9kZVR5cGUoKSkpCiAgICAg
ICAgIC5zZXROb2RlTmFtZShub2RlTmFtZSkKQEAgLTE2NDEsNyArMTcxMCw3IEBAIFJlZjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+IEluc3BlY3RvckRPTUFnZW50OjpidWlsZE9iamVj
dEZvck5vZGUoTm9kZSoKICAgICBpZiAobm9kZS0+aXNDb250YWluZXJOb2RlKCkpIHsKICAgICAg
ICAgaW50IG5vZGVDb3VudCA9IGlubmVyQ2hpbGROb2RlQ291bnQobm9kZSk7CiAgICAgICAgIHZh
bHVlLT5zZXRDaGlsZE5vZGVDb3VudChub2RlQ291bnQpOwotICAgICAgICBSZWY8SlNPTjo6QXJy
YXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+PiBjaGlsZHJlbiA9IGJ1aWxkQXJy
YXlGb3JDb250YWluZXJDaGlsZHJlbihub2RlLCBkZXB0aCwgbm9kZXNNYXApOworICAgICAgICBS
ZWY8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6RE9NOjpOb2RlPj4gY2hpbGRyZW4gPSBidWlsZEFy
cmF5Rm9yQ29udGFpbmVyQ2hpbGRyZW4obm9kZSwgZGVwdGgsIG5vZGVzTWFwKTsKICAgICAgICAg
aWYgKGNoaWxkcmVuLT5sZW5ndGgoKSA+IDApCiAgICAgICAgICAgICB2YWx1ZS0+c2V0Q2hpbGRy
ZW4oV1RGTW92ZShjaGlsZHJlbikpOwogICAgIH0KQEAgLTE2NjEsNyArMTczMCw3IEBAIFJlZjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+IEluc3BlY3RvckRPTUFnZW50OjpidWlsZE9i
amVjdEZvck5vZGUoTm9kZSoKICAgICAgICAgfQogCiAgICAgICAgIGlmIChTaGFkb3dSb290KiBy
b290ID0gZWxlbWVudC5zaGFkb3dSb290KCkpIHsKLSAgICAgICAgICAgIGF1dG8gc2hhZG93Um9v
dHMgPSBKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZT46OmNyZWF0
ZSgpOworICAgICAgICAgICAgYXV0byBzaGFkb3dSb290cyA9IEpTT046OkFycmF5T2Y8UHJvdG9j
b2w6OkRPTTo6Tm9kZT46OmNyZWF0ZSgpOwogICAgICAgICAgICAgc2hhZG93Um9vdHMtPmFkZEl0
ZW0oYnVpbGRPYmplY3RGb3JOb2RlKHJvb3QsIDAsIG5vZGVzTWFwKSk7CiAgICAgICAgICAgICB2
YWx1ZS0+c2V0U2hhZG93Um9vdHMoV1RGTW92ZShzaGFkb3dSb290cykpOwogICAgICAgICB9CkBA
IC0xNjczLDE2ICsxNzQyLDE2IEBAIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+
IEluc3BlY3RvckRPTUFnZW50OjpidWlsZE9iamVjdEZvck5vZGUoTm9kZSoKICAgICAgICAgICAg
IHZhbHVlLT5zZXRDb250ZW50U2VjdXJpdHlQb2xpY3lIYXNoKGNvbXB1dGVDb250ZW50U2VjdXJp
dHlQb2xpY3lTSEEyNTZIYXNoKGVsZW1lbnQpKTsKIAogICAgICAgICBhdXRvIHN0YXRlID0gY3Vz
dG9tRWxlbWVudFN0YXRlKGVsZW1lbnQpOwotICAgICAgICBpZiAoc3RhdGUgIT0gSW5zcGVjdG9y
OjpQcm90b2NvbDo6RE9NOjpDdXN0b21FbGVtZW50U3RhdGU6OkJ1aWx0aW4pCisgICAgICAgIGlm
IChzdGF0ZSAhPSBQcm90b2NvbDo6RE9NOjpDdXN0b21FbGVtZW50U3RhdGU6OkJ1aWx0aW4pCiAg
ICAgICAgICAgICB2YWx1ZS0+c2V0Q3VzdG9tRWxlbWVudFN0YXRlKHN0YXRlKTsKIAogICAgICAg
ICBpZiAoZWxlbWVudC5wc2V1ZG9JZCgpICE9IFBzZXVkb0lkOjpOb25lKSB7Ci0gICAgICAgICAg
ICBJbnNwZWN0b3I6OlByb3RvY29sOjpET006OlBzZXVkb1R5cGUgcHNldWRvVHlwZTsKKyAgICAg
ICAgICAgIFByb3RvY29sOjpET006OlBzZXVkb1R5cGUgcHNldWRvVHlwZTsKICAgICAgICAgICAg
IGlmIChwc2V1ZG9FbGVtZW50VHlwZShlbGVtZW50LnBzZXVkb0lkKCksICZwc2V1ZG9UeXBlKSkK
ICAgICAgICAgICAgICAgICB2YWx1ZS0+c2V0UHNldWRvVHlwZShwc2V1ZG9UeXBlKTsKICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgIGlmIChhdXRvIHBzZXVkb0VsZW1lbnRzID0gYnVpbGRB
cnJheUZvclBzZXVkb0VsZW1lbnRzKGVsZW1lbnQsIG5vZGVzTWFwKSkKLSAgICAgICAgICAgICAg
ICB2YWx1ZS0+c2V0UHNldWRvRWxlbWVudHMoV1RGTW92ZShwc2V1ZG9FbGVtZW50cykpOworICAg
ICAgICAgICAgICAgIHZhbHVlLT5zZXRQc2V1ZG9FbGVtZW50cyhwc2V1ZG9FbGVtZW50cy5yZWxl
YXNlTm9uTnVsbCgpKTsKICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAoaXM8RG9jdW1lbnQ+KCpu
b2RlKSkgewogICAgICAgICBEb2N1bWVudCYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4o
Km5vZGUpOwpAQCAtMTcyMSw5ICsxNzkwLDkgQEAgUmVmPEpTT046OkFycmF5T2Y8U3RyaW5nPj4g
SW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkQXJyYXlGb3JFbGVtZW50QXR0cmlidXRlcyhFbGUKICAg
ICByZXR1cm4gYXR0cmlidXRlc1ZhbHVlOwogfQogCi1SZWY8SlNPTjo6QXJyYXlPZjxJbnNwZWN0
b3I6OlByb3RvY29sOjpET006Ok5vZGU+PiBJbnNwZWN0b3JET01BZ2VudDo6YnVpbGRBcnJheUZv
ckNvbnRhaW5lckNoaWxkcmVuKE5vZGUqIGNvbnRhaW5lciwgaW50IGRlcHRoLCBOb2RlVG9JZE1h
cCogbm9kZXNNYXApCitSZWY8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6RE9NOjpOb2RlPj4gSW5z
cGVjdG9yRE9NQWdlbnQ6OmJ1aWxkQXJyYXlGb3JDb250YWluZXJDaGlsZHJlbihOb2RlKiBjb250
YWluZXIsIGludCBkZXB0aCwgTm9kZVRvSWRNYXAqIG5vZGVzTWFwKQogewotICAgIGF1dG8gY2hp
bGRyZW4gPSBKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZT46OmNy
ZWF0ZSgpOworICAgIGF1dG8gY2hpbGRyZW4gPSBKU09OOjpBcnJheU9mPFByb3RvY29sOjpET006
Ok5vZGU+OjpjcmVhdGUoKTsKICAgICBpZiAoZGVwdGggPT0gMCkgewogICAgICAgICAvLyBTcGVj
aWFsLWNhc2UgdGhlIG9ubHkgdGV4dCBjaGlsZCAtIHByZXRlbmQgdGhhdCBjb250YWluZXIncyBj
aGlsZHJlbiBoYXZlIGJlZW4gcmVxdWVzdGVkLgogICAgICAgICBOb2RlKiBmaXJzdENoaWxkID0g
Y29udGFpbmVyLT5maXJzdENoaWxkKCk7CkBAIC0xNzQ1LDE0ICsxODE0LDE0IEBAIFJlZjxKU09O
OjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZT4+IEluc3BlY3RvckRPTUFn
ZW50OjpidWlsZEFycmF5CiAgICAgcmV0dXJuIGNoaWxkcmVuOwogfQogCi1SZWZQdHI8SlNPTjo6
QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+PiBJbnNwZWN0b3JET01BZ2Vu
dDo6YnVpbGRBcnJheUZvclBzZXVkb0VsZW1lbnRzKGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQsIE5v
ZGVUb0lkTWFwKiBub2Rlc01hcCkKK1JlZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpET006
Ok5vZGU+PiBJbnNwZWN0b3JET01BZ2VudDo6YnVpbGRBcnJheUZvclBzZXVkb0VsZW1lbnRzKGNv
bnN0IEVsZW1lbnQmIGVsZW1lbnQsIE5vZGVUb0lkTWFwKiBub2Rlc01hcCkKIHsKICAgICBQc2V1
ZG9FbGVtZW50KiBiZWZvcmVFbGVtZW50ID0gZWxlbWVudC5iZWZvcmVQc2V1ZG9FbGVtZW50KCk7
CiAgICAgUHNldWRvRWxlbWVudCogYWZ0ZXJFbGVtZW50ID0gZWxlbWVudC5hZnRlclBzZXVkb0Vs
ZW1lbnQoKTsKICAgICBpZiAoIWJlZm9yZUVsZW1lbnQgJiYgIWFmdGVyRWxlbWVudCkKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBhdXRvIHBzZXVkb0VsZW1lbnRzID0gSlNPTjo6QXJy
YXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+OjpjcmVhdGUoKTsKKyAgICBhdXRv
IHBzZXVkb0VsZW1lbnRzID0gSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6RE9NOjpOb2RlPjo6Y3Jl
YXRlKCk7CiAgICAgaWYgKGJlZm9yZUVsZW1lbnQpCiAgICAgICAgIHBzZXVkb0VsZW1lbnRzLT5h
ZGRJdGVtKGJ1aWxkT2JqZWN0Rm9yTm9kZShiZWZvcmVFbGVtZW50LCAwLCBub2Rlc01hcCkpOwog
ICAgIGlmIChhZnRlckVsZW1lbnQpCkBAIC0xNzYwLDcgKzE4MjksNyBAQCBSZWZQdHI8SlNPTjo6
QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+PiBJbnNwZWN0b3JET01BZ2Vu
dDo6YnVpbGRBcgogICAgIHJldHVybiBwc2V1ZG9FbGVtZW50czsKIH0KIAotUmVmPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRPTTo6RXZlbnRMaXN0ZW5lcj4gSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxk
T2JqZWN0Rm9yRXZlbnRMaXN0ZW5lcihjb25zdCBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lciYgcmVn
aXN0ZXJlZEV2ZW50TGlzdGVuZXIsIGludCBpZGVudGlmaWVyLCBFdmVudFRhcmdldCYgZXZlbnRU
YXJnZXQsIGNvbnN0IEF0b21TdHJpbmcmIGV2ZW50VHlwZSwgYm9vbCBkaXNhYmxlZCwgY29uc3Qg
UmVmUHRyPEpTQzo6QnJlYWtwb2ludD4mIGJyZWFrcG9pbnQpCitSZWY8UHJvdG9jb2w6OkRPTTo6
RXZlbnRMaXN0ZW5lcj4gSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yRXZlbnRMaXN0
ZW5lcihjb25zdCBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lciYgcmVnaXN0ZXJlZEV2ZW50TGlzdGVu
ZXIsIFByb3RvY29sOjpET006OkV2ZW50TGlzdGVuZXJJZCBpZGVudGlmaWVyLCBFdmVudFRhcmdl
dCYgZXZlbnRUYXJnZXQsIGNvbnN0IEF0b21TdHJpbmcmIGV2ZW50VHlwZSwgYm9vbCBkaXNhYmxl
ZCwgY29uc3QgUmVmUHRyPEpTQzo6QnJlYWtwb2ludD4mIGJyZWFrcG9pbnQpCiB7CiAgICAgUmVm
PEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIgPSByZWdpc3RlcmVkRXZlbnRMaXN0ZW5lci5j
YWxsYmFjaygpOwogCkBAIC0xODIyLDcgKzE4OTEsNyBAQCBSZWY8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6RE9NOjpFdmVudExpc3RlbmVyPiBJbnNwZWN0b3JET01BZ2VudDo6YnVpbGRPYmplY3RGb3JF
dgogICAgICAgICB9CiAgICAgfQogCi0gICAgYXV0byB2YWx1ZSA9IEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRPTTo6RXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKCkKKyAgICBhdXRvIHZhbHVlID0gUHJvdG9j
b2w6OkRPTTo6RXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKCkKICAgICAgICAgLnNldEV2ZW50TGlzdGVu
ZXJJZChpZGVudGlmaWVyKQogICAgICAgICAuc2V0VHlwZShldmVudFR5cGUpCiAgICAgICAgIC5z
ZXRVc2VDYXB0dXJlKHJlZ2lzdGVyZWRFdmVudExpc3RlbmVyLnVzZUNhcHR1cmUoKSkKQEAgLTE4
MzMsNyArMTkwMiw3IEBAIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkV2ZW50TGlzdGVu
ZXI+IEluc3BlY3RvckRPTUFnZW50OjpidWlsZE9iamVjdEZvckV2CiAgICAgZWxzZSBpZiAoaXM8
RE9NV2luZG93PihldmVudFRhcmdldCkpCiAgICAgICAgIHZhbHVlLT5zZXRPbldpbmRvdyh0cnVl
KTsKICAgICBpZiAoIXNjcmlwdElELmlzTnVsbCgpKSB7Ci0gICAgICAgIGF1dG8gbG9jYXRpb24g
PSBJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6TG9jYXRpb246OmNyZWF0ZSgpCisgICAg
ICAgIGF1dG8gbG9jYXRpb24gPSBQcm90b2NvbDo6RGVidWdnZXI6OkxvY2F0aW9uOjpjcmVhdGUo
KQogICAgICAgICAgICAgLnNldFNjcmlwdElkKHNjcmlwdElEKQogICAgICAgICAgICAgLnNldExp
bmVOdW1iZXIobGluZU51bWJlcikKICAgICAgICAgICAgIC5yZWxlYXNlKCk7CkBAIC0xODUzLDcg
KzE5MjIsNyBAQCBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpFdmVudExpc3RlbmVyPiBJ
bnNwZWN0b3JET01BZ2VudDo6YnVpbGRPYmplY3RGb3JFdgogICAgIHJldHVybiB2YWx1ZTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6cHJvY2Vzc0FjY2Vzc2liaWxpdHlDaGlsZHJlbihB
WENvcmVPYmplY3QmIGF4T2JqZWN0LCBKU09OOjpBcnJheU9mPGludD4mIGNoaWxkTm9kZUlkcykK
K3ZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnByb2Nlc3NBY2Nlc3NpYmlsaXR5Q2hpbGRyZW4oQVhD
b3JlT2JqZWN0JiBheE9iamVjdCwgSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6RE9NOjpOb2RlSWQ+
JiBjaGlsZE5vZGVJZHMpCiB7CiAgICAgY29uc3QgYXV0byYgY2hpbGRyZW4gPSBheE9iamVjdC5j
aGlsZHJlbigpOwogICAgIGlmICghY2hpbGRyZW4uc2l6ZSgpKQpAQCAtMTg2Nyw0MyArMTkzNiwz
OSBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50Ojpwcm9jZXNzQWNjZXNzaWJpbGl0eUNoaWxkcmVu
KEFYQ29yZU9iamVjdCYgYXhPYmplY3QsIEpTTwogICAgIH0KIH0KICAgICAKLVJlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzPiBJbnNwZWN0b3JE
T01BZ2VudDo6YnVpbGRPYmplY3RGb3JBY2Nlc3NpYmlsaXR5UHJvcGVydGllcyhOb2RlKiBub2Rl
KQorUmVmPFByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzPiBJbnNwZWN0b3JE
T01BZ2VudDo6YnVpbGRPYmplY3RGb3JBY2Nlc3NpYmlsaXR5UHJvcGVydGllcyhOb2RlJiBub2Rl
KQogewotICAgIEFTU0VSVChub2RlKTsKLSAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJldHVybiBu
dWxscHRyOwotCiAgICAgaWYgKCFXZWJDb3JlOjpBWE9iamVjdENhY2hlOjphY2Nlc3NpYmlsaXR5
RW5hYmxlZCgpKQogICAgICAgICBXZWJDb3JlOjpBWE9iamVjdENhY2hlOjplbmFibGVBY2Nlc3Np
YmlsaXR5KCk7CiAKICAgICBOb2RlKiBhY3RpdmVEZXNjZW5kYW50Tm9kZSA9IG51bGxwdHI7CiAg
ICAgYm9vbCBidXN5ID0gZmFsc2U7Ci0gICAgYXV0byBjaGVja2VkID0gSW5zcGVjdG9yOjpQcm90
b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6Q2hlY2tlZDo6RmFsc2U7Ci0gICAg
UmVmUHRyPEpTT046OkFycmF5T2Y8aW50Pj4gY2hpbGROb2RlSWRzOwotICAgIFJlZlB0cjxKU09O
OjpBcnJheU9mPGludD4+IGNvbnRyb2xsZWROb2RlSWRzOwotICAgIGF1dG8gY3VycmVudFN0YXRl
ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6Q3Vy
cmVudDo6RmFsc2U7CisgICAgYXV0byBjaGVja2VkID0gUHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJp
bGl0eVByb3BlcnRpZXM6OkNoZWNrZWQ6OkZhbHNlOworICAgIFJlZlB0cjxKU09OOjpBcnJheU9m
PFByb3RvY29sOjpET006Ok5vZGVJZD4+IGNoaWxkTm9kZUlkczsKKyAgICBSZWZQdHI8SlNPTjo6
QXJyYXlPZjxQcm90b2NvbDo6RE9NOjpOb2RlSWQ+PiBjb250cm9sbGVkTm9kZUlkczsKKyAgICBh
dXRvIGN1cnJlbnRTdGF0ZSA9IFByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVz
OjpDdXJyZW50OjpGYWxzZTsKICAgICBib29sIGV4aXN0cyA9IGZhbHNlOwogICAgIGJvb2wgZXhw
YW5kZWQgPSBmYWxzZTsKICAgICBib29sIGRpc2FibGVkID0gZmFsc2U7Ci0gICAgUmVmUHRyPEpT
T046OkFycmF5T2Y8aW50Pj4gZmxvd2VkTm9kZUlkczsKKyAgICBSZWZQdHI8SlNPTjo6QXJyYXlP
ZjxQcm90b2NvbDo6RE9NOjpOb2RlSWQ+PiBmbG93ZWROb2RlSWRzOwogICAgIGJvb2wgZm9jdXNl
ZCA9IGZhbHNlOwogICAgIGJvb2wgaWdub3JlZCA9IHRydWU7CiAgICAgYm9vbCBpZ25vcmVkQnlE
ZWZhdWx0ID0gZmFsc2U7Ci0gICAgYXV0byBpbnZhbGlkID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6
RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6SW52YWxpZDo6RmFsc2U7CisgICAgYXV0byBp
bnZhbGlkID0gUHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6OkludmFsaWQ6
OkZhbHNlOwogICAgIGJvb2wgaGlkZGVuID0gZmFsc2U7CiAgICAgU3RyaW5nIGxhYmVsOwogICAg
IGJvb2wgbGl2ZVJlZ2lvbkF0b21pYyA9IGZhbHNlOwogICAgIFJlZlB0cjxKU09OOjpBcnJheU9m
PFN0cmluZz4+IGxpdmVSZWdpb25SZWxldmFudDsKLSAgICBhdXRvIGxpdmVSZWdpb25TdGF0dXMg
PSBJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpMaXZl
UmVnaW9uU3RhdHVzOjpPZmY7CisgICAgYXV0byBsaXZlUmVnaW9uU3RhdHVzID0gUHJvdG9jb2w6
OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6OkxpdmVSZWdpb25TdGF0dXM6Ok9mZjsKICAg
ICBOb2RlKiBtb3VzZUV2ZW50Tm9kZSA9IG51bGxwdHI7Ci0gICAgUmVmUHRyPEpTT046OkFycmF5
T2Y8aW50Pj4gb3duZWROb2RlSWRzOworICAgIFJlZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29s
OjpET006Ok5vZGVJZD4+IG93bmVkTm9kZUlkczsKICAgICBOb2RlKiBwYXJlbnROb2RlID0gbnVs
bHB0cjsKICAgICBib29sIHByZXNzZWQgPSBmYWxzZTsKICAgICBib29sIHJlYWRvbmx5ID0gZmFs
c2U7CiAgICAgYm9vbCByZXF1aXJlZCA9IGZhbHNlOwogICAgIFN0cmluZyByb2xlOwogICAgIGJv
b2wgc2VsZWN0ZWQgPSBmYWxzZTsKLSAgICBSZWZQdHI8SlNPTjo6QXJyYXlPZjxpbnQ+PiBzZWxl
Y3RlZENoaWxkTm9kZUlkczsKKyAgICBSZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6RE9N
OjpOb2RlSWQ+PiBzZWxlY3RlZENoaWxkTm9kZUlkczsKICAgICBib29sIHN1cHBvcnRzQ2hlY2tl
ZCA9IGZhbHNlOwogICAgIGJvb2wgc3VwcG9ydHNFeHBhbmRlZCA9IGZhbHNlOwogICAgIGJvb2wg
c3VwcG9ydHNMaXZlUmVnaW9uID0gZmFsc2U7CkBAIC0xOTE1LDggKzE5ODAsOCBAQCBSZWZQdHI8
SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllcz4gSW5zcGVj
dG9yRE9NQWdlbnQ6OmJ1aQogICAgIHVuc2lnbmVkIGhpZXJhcmNoaWNhbExldmVsID0gMDsKICAg
ICB1bnNpZ25lZCBsZXZlbCA9IDA7CiAKLSAgICBpZiAoQVhPYmplY3RDYWNoZSogYXhPYmplY3RD
YWNoZSA9IG5vZGUtPmRvY3VtZW50KCkuYXhPYmplY3RDYWNoZSgpKSB7Ci0gICAgICAgIGlmIChB
WENvcmVPYmplY3QqIGF4T2JqZWN0ID0gYXhPYmplY3RDYWNoZS0+Z2V0T3JDcmVhdGUobm9kZSkp
IHsKKyAgICBpZiAoQVhPYmplY3RDYWNoZSogYXhPYmplY3RDYWNoZSA9IG5vZGUuZG9jdW1lbnQo
KS5heE9iamVjdENhY2hlKCkpIHsKKyAgICAgICAgaWYgKEFYQ29yZU9iamVjdCogYXhPYmplY3Qg
PSBheE9iamVjdENhY2hlLT5nZXRPckNyZWF0ZSgmbm9kZSkpIHsKIAogICAgICAgICAgICAgaWYg
KEFYQ29yZU9iamVjdCogYWN0aXZlRGVzY2VuZGFudCA9IGF4T2JqZWN0LT5hY3RpdmVEZXNjZW5k
YW50KCkpCiAgICAgICAgICAgICAgICAgYWN0aXZlRGVzY2VuZGFudE5vZGUgPSBhY3RpdmVEZXNj
ZW5kYW50LT5ub2RlKCk7CkBAIC0xOTMyLDQ3ICsxOTk3LDQ5IEBAIFJlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzPiBJbnNwZWN0b3JET01BZ2Vu
dDo6YnVpCiAgICAgICAgICAgICBpZiAoc3VwcG9ydHNDaGVja2VkKSB7CiAgICAgICAgICAgICAg
ICAgQWNjZXNzaWJpbGl0eUJ1dHRvblN0YXRlIGNoZWNrVmFsdWUgPSBheE9iamVjdC0+Y2hlY2ti
b3hPclJhZGlvVmFsdWUoKTsgLy8gRWxlbWVudCB1c2luZyBhcmlhLWNoZWNrZWQuCiAgICAgICAg
ICAgICAgICAgaWYgKGNoZWNrVmFsdWUgPT0gQWNjZXNzaWJpbGl0eUJ1dHRvblN0YXRlOjpPbikK
LSAgICAgICAgICAgICAgICAgICAgY2hlY2tlZCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6
QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6OkNoZWNrZWQ6OlRydWU7CisgICAgICAgICAgICAgICAg
ICAgIGNoZWNrZWQgPSBQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6Q2hl
Y2tlZDo6VHJ1ZTsKICAgICAgICAgICAgICAgICBlbHNlIGlmIChjaGVja1ZhbHVlID09IEFjY2Vz
c2liaWxpdHlCdXR0b25TdGF0ZTo6TWl4ZWQpCi0gICAgICAgICAgICAgICAgICAgIGNoZWNrZWQg
PSBJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpDaGVj
a2VkOjpNaXhlZDsKKyAgICAgICAgICAgICAgICAgICAgY2hlY2tlZCA9IFByb3RvY29sOjpET006
OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpDaGVja2VkOjpNaXhlZDsKICAgICAgICAgICAgICAg
ICBlbHNlIGlmIChheE9iamVjdC0+aXNDaGVja2VkKCkpIC8vIE5hdGl2ZSBjaGVja2JveC4KLSAg
ICAgICAgICAgICAgICAgICAgY2hlY2tlZCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6QWNj
ZXNzaWJpbGl0eVByb3BlcnRpZXM6OkNoZWNrZWQ6OlRydWU7CisgICAgICAgICAgICAgICAgICAg
IGNoZWNrZWQgPSBQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6Q2hlY2tl
ZDo6VHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKCFh
eE9iamVjdC0+Y2hpbGRyZW4oKS5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICBjaGlsZE5v
ZGVJZHMgPSBKU09OOjpBcnJheU9mPGludD46OmNyZWF0ZSgpOworICAgICAgICAgICAgICAgIGNo
aWxkTm9kZUlkcyA9IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkRPTTo6Tm9kZUlkPjo6Y3JlYXRl
KCk7CiAgICAgICAgICAgICAgICAgcHJvY2Vzc0FjY2Vzc2liaWxpdHlDaGlsZHJlbigqYXhPYmpl
Y3QsICpjaGlsZE5vZGVJZHMpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAg
ICAgICBWZWN0b3I8RWxlbWVudCo+IGNvbnRyb2xsZWRFbGVtZW50czsKICAgICAgICAgICAgIGF4
T2JqZWN0LT5lbGVtZW50c0Zyb21BdHRyaWJ1dGUoY29udHJvbGxlZEVsZW1lbnRzLCBhcmlhX2Nv
bnRyb2xzQXR0cik7CiAgICAgICAgICAgICBpZiAoY29udHJvbGxlZEVsZW1lbnRzLnNpemUoKSkg
ewotICAgICAgICAgICAgICAgIGNvbnRyb2xsZWROb2RlSWRzID0gSlNPTjo6QXJyYXlPZjxpbnQ+
OjpjcmVhdGUoKTsKLSAgICAgICAgICAgICAgICBmb3IgKEVsZW1lbnQqIGNvbnRyb2xsZWRFbGVt
ZW50IDogY29udHJvbGxlZEVsZW1lbnRzKQotICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVk
Tm9kZUlkcy0+YWRkSXRlbShwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKGNvbnRyb2xsZWRFbGVtZW50
KSk7CisgICAgICAgICAgICAgICAgY29udHJvbGxlZE5vZGVJZHMgPSBKU09OOjpBcnJheU9mPFBy
b3RvY29sOjpET006Ok5vZGVJZD46OmNyZWF0ZSgpOworICAgICAgICAgICAgICAgIGZvciAoRWxl
bWVudCogY29udHJvbGxlZEVsZW1lbnQgOiBjb250cm9sbGVkRWxlbWVudHMpIHsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKGF1dG8gY29udHJvbGxlZEVsZW1lbnRJZCA9IHB1c2hOb2RlUGF0aFRv
RnJvbnRlbmQoY29udHJvbGxlZEVsZW1lbnQpKQorICAgICAgICAgICAgICAgICAgICAgICAgY29u
dHJvbGxlZE5vZGVJZHMtPmFkZEl0ZW0oY29udHJvbGxlZEVsZW1lbnRJZCk7CisgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICBzd2l0Y2gg
KGF4T2JqZWN0LT5jdXJyZW50U3RhdGUoKSkgewogICAgICAgICAgICAgY2FzZSBBY2Nlc3NpYmls
aXR5Q3VycmVudFN0YXRlOjpGYWxzZToKLSAgICAgICAgICAgICAgICBjdXJyZW50U3RhdGUgPSBJ
bnNwZWN0b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpDdXJyZW50
OjpGYWxzZTsKKyAgICAgICAgICAgICAgICBjdXJyZW50U3RhdGUgPSBQcm90b2NvbDo6RE9NOjpB
Y2Nlc3NpYmlsaXR5UHJvcGVydGllczo6Q3VycmVudDo6RmFsc2U7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICBjYXNlIEFjY2Vzc2liaWxpdHlDdXJyZW50U3RhdGU6OlBhZ2U6
Ci0gICAgICAgICAgICAgICAgY3VycmVudFN0YXRlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9N
OjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6Q3VycmVudDo6UGFnZTsKKyAgICAgICAgICAgICAg
ICBjdXJyZW50U3RhdGUgPSBQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6
Q3VycmVudDo6UGFnZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2Ug
QWNjZXNzaWJpbGl0eUN1cnJlbnRTdGF0ZTo6U3RlcDoKLSAgICAgICAgICAgICAgICBjdXJyZW50
U3RhdGUgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVz
OjpDdXJyZW50OjpTdGVwOworICAgICAgICAgICAgICAgIGN1cnJlbnRTdGF0ZSA9IFByb3RvY29s
OjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpDdXJyZW50OjpTdGVwOwogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBBY2Nlc3NpYmlsaXR5Q3VycmVudFN0YXRl
OjpMb2NhdGlvbjoKLSAgICAgICAgICAgICAgICBjdXJyZW50U3RhdGUgPSBJbnNwZWN0b3I6OlBy
b3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpDdXJyZW50OjpMb2NhdGlvbjsK
KyAgICAgICAgICAgICAgICBjdXJyZW50U3RhdGUgPSBQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmls
aXR5UHJvcGVydGllczo6Q3VycmVudDo6TG9jYXRpb247CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICBjYXNlIEFjY2Vzc2liaWxpdHlDdXJyZW50U3RhdGU6OkRhdGU6Ci0gICAg
ICAgICAgICAgICAgY3VycmVudFN0YXRlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nl
c3NpYmlsaXR5UHJvcGVydGllczo6Q3VycmVudDo6RGF0ZTsKKyAgICAgICAgICAgICAgICBjdXJy
ZW50U3RhdGUgPSBQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6Q3VycmVu
dDo6RGF0ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgQWNjZXNz
aWJpbGl0eUN1cnJlbnRTdGF0ZTo6VGltZToKLSAgICAgICAgICAgICAgICBjdXJyZW50U3RhdGUg
PSBJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpDdXJy
ZW50OjpUaW1lOworICAgICAgICAgICAgICAgIGN1cnJlbnRTdGF0ZSA9IFByb3RvY29sOjpET006
OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpDdXJyZW50OjpUaW1lOwogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgY2FzZSBBY2Nlc3NpYmlsaXR5Q3VycmVudFN0YXRlOjpUcnVl
OgotICAgICAgICAgICAgICAgIGN1cnJlbnRTdGF0ZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRP
TTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6OkN1cnJlbnQ6OlRydWU7CisgICAgICAgICAgICAg
ICAgY3VycmVudFN0YXRlID0gUHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6
OkN1cnJlbnQ6OlRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAK
QEAgLTE5ODYsMTIgKzIwNTMsMTQgQEAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6
QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM+IEluc3BlY3RvckRPTUFnZW50OjpidWkKICAgICAgICAg
ICAgIFZlY3RvcjxFbGVtZW50Kj4gZmxvd2VkRWxlbWVudHM7CiAgICAgICAgICAgICBheE9iamVj
dC0+ZWxlbWVudHNGcm9tQXR0cmlidXRlKGZsb3dlZEVsZW1lbnRzLCBhcmlhX2Zsb3d0b0F0dHIp
OwogICAgICAgICAgICAgaWYgKGZsb3dlZEVsZW1lbnRzLnNpemUoKSkgewotICAgICAgICAgICAg
ICAgIGZsb3dlZE5vZGVJZHMgPSBKU09OOjpBcnJheU9mPGludD46OmNyZWF0ZSgpOwotICAgICAg
ICAgICAgICAgIGZvciAoRWxlbWVudCogZmxvd2VkRWxlbWVudCA6IGZsb3dlZEVsZW1lbnRzKQot
ICAgICAgICAgICAgICAgICAgICBmbG93ZWROb2RlSWRzLT5hZGRJdGVtKHB1c2hOb2RlUGF0aFRv
RnJvbnRlbmQoZmxvd2VkRWxlbWVudCkpOworICAgICAgICAgICAgICAgIGZsb3dlZE5vZGVJZHMg
PSBKU09OOjpBcnJheU9mPFByb3RvY29sOjpET006Ok5vZGVJZD46OmNyZWF0ZSgpOworICAgICAg
ICAgICAgICAgIGZvciAoRWxlbWVudCogZmxvd2VkRWxlbWVudCA6IGZsb3dlZEVsZW1lbnRzKSB7
CisgICAgICAgICAgICAgICAgICAgIGlmIChhdXRvIGZsb3dlZEVsZW1lbnRJZCA9IHB1c2hOb2Rl
UGF0aFRvRnJvbnRlbmQoZmxvd2VkRWxlbWVudCkpCisgICAgICAgICAgICAgICAgICAgICAgICBm
bG93ZWROb2RlSWRzLT5hZGRJdGVtKGZsb3dlZEVsZW1lbnRJZCk7CisgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoaXM8RWxlbWVu
dD4oKm5vZGUpKSB7CisgICAgICAgICAgICBpZiAoaXM8RWxlbWVudD4obm9kZSkpIHsKICAgICAg
ICAgICAgICAgICBzdXBwb3J0c0ZvY3VzZWQgPSBheE9iamVjdC0+Y2FuU2V0Rm9jdXNBdHRyaWJ1
dGUoKTsKICAgICAgICAgICAgICAgICBpZiAoc3VwcG9ydHNGb2N1c2VkKQogICAgICAgICAgICAg
ICAgICAgICBmb2N1c2VkID0gYXhPYmplY3QtPmlzRm9jdXNlZCgpOwpAQCAtMjAwMiwxMyArMjA3
MSwxMyBAQCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJv
cGVydGllcz4gSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aQogICAgICAgICAgICAgCiAgICAgICAgICAg
ICBTdHJpbmcgaW52YWxpZFZhbHVlID0gYXhPYmplY3QtPmludmFsaWRTdGF0dXMoKTsKICAgICAg
ICAgICAgIGlmIChpbnZhbGlkVmFsdWUgPT0gImZhbHNlIikKLSAgICAgICAgICAgICAgICBpbnZh
bGlkID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6
SW52YWxpZDo6RmFsc2U7CisgICAgICAgICAgICAgICAgaW52YWxpZCA9IFByb3RvY29sOjpET006
OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpJbnZhbGlkOjpGYWxzZTsKICAgICAgICAgICAgIGVs
c2UgaWYgKGludmFsaWRWYWx1ZSA9PSAiZ3JhbW1hciIpCi0gICAgICAgICAgICAgICAgaW52YWxp
ZCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6Oklu
dmFsaWQ6OkdyYW1tYXI7CisgICAgICAgICAgICAgICAgaW52YWxpZCA9IFByb3RvY29sOjpET006
OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpJbnZhbGlkOjpHcmFtbWFyOwogICAgICAgICAgICAg
ZWxzZSBpZiAoaW52YWxpZFZhbHVlID09ICJzcGVsbGluZyIpCi0gICAgICAgICAgICAgICAgaW52
YWxpZCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6
OkludmFsaWQ6OlNwZWxsaW5nOworICAgICAgICAgICAgICAgIGludmFsaWQgPSBQcm90b2NvbDo6
RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6SW52YWxpZDo6U3BlbGxpbmc7CiAgICAgICAg
ICAgICBlbHNlIC8vIEZ1dHVyZSB2ZXJzaW9ucyBvZiBBUklBIG1heSBhbGxvdyBhZGRpdGlvbmFs
IHRydXRoeSB2YWx1ZXMuIEV4LiBmb3JtYXQsIG9yZGVyLCBvciBzaXplLgotICAgICAgICAgICAg
ICAgIGludmFsaWQgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9w
ZXJ0aWVzOjpJbnZhbGlkOjpUcnVlOworICAgICAgICAgICAgICAgIGludmFsaWQgPSBQcm90b2Nv
bDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6SW52YWxpZDo6VHJ1ZTsKICAgICAgICAg
ICAgIAogICAgICAgICAgICAgaWYgKGF4T2JqZWN0LT5pc0FYSGlkZGVuKCkgfHwgYXhPYmplY3Qt
PmlzRE9NSGlkZGVuKCkpCiAgICAgICAgICAgICAgICAgaGlkZGVuID0gdHJ1ZTsKQEAgLTIwMjIs
OSArMjA5MSw5IEBAIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxp
dHlQcm9wZXJ0aWVzPiBJbnNwZWN0b3JET01BZ2VudDo6YnVpCiAgICAgICAgICAgICAgICAgU3Ry
aW5nIGFyaWFSZWxldmFudEF0dHJWYWx1ZSA9IGF4T2JqZWN0LT5saXZlUmVnaW9uUmVsZXZhbnQo
KTsKICAgICAgICAgICAgICAgICBpZiAoIWFyaWFSZWxldmFudEF0dHJWYWx1ZS5pc0VtcHR5KCkp
IHsKICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFBhc3MgZW51bSB2YWx1ZXMgcmF0aGVy
IHRoYW4gc3RyaW5ncyBvbmNlIHVuYmxvY2tlZC4gaHR0cDovL3dlYmtpdC5vcmcvYi8xMzM3MTEK
LSAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGFyaWFSZWxldmFudEFkZGl0aW9ucyA9IEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6Okluc3BlY3RvckhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6TGl2ZVJlZ2lvblJlbGV2YW50OjpBZGRpdGlvbnMpOwot
ICAgICAgICAgICAgICAgICAgICBTdHJpbmcgYXJpYVJlbGV2YW50UmVtb3ZhbHMgPSBJbnNwZWN0
b3I6OlByb3RvY29sOjpJbnNwZWN0b3JIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShJbnNw
ZWN0b3I6OlByb3RvY29sOjpET006OkxpdmVSZWdpb25SZWxldmFudDo6UmVtb3ZhbHMpOwotICAg
ICAgICAgICAgICAgICAgICBTdHJpbmcgYXJpYVJlbGV2YW50VGV4dCA9IEluc3BlY3Rvcjo6UHJv
dG9jb2w6Okluc3BlY3RvckhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRPTTo6TGl2ZVJlZ2lvblJlbGV2YW50OjpUZXh0KTsKKyAgICAgICAgICAgICAg
ICAgICAgU3RyaW5nIGFyaWFSZWxldmFudEFkZGl0aW9ucyA9IFByb3RvY29sOjpIZWxwZXJzOjpn
ZXRFbnVtQ29uc3RhbnRWYWx1ZShQcm90b2NvbDo6RE9NOjpMaXZlUmVnaW9uUmVsZXZhbnQ6OkFk
ZGl0aW9ucyk7CisgICAgICAgICAgICAgICAgICAgIFN0cmluZyBhcmlhUmVsZXZhbnRSZW1vdmFs
cyA9IFByb3RvY29sOjpIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShQcm90b2NvbDo6RE9N
OjpMaXZlUmVnaW9uUmVsZXZhbnQ6OlJlbW92YWxzKTsKKyAgICAgICAgICAgICAgICAgICAgU3Ry
aW5nIGFyaWFSZWxldmFudFRleHQgPSBQcm90b2NvbDo6SGVscGVyczo6Z2V0RW51bUNvbnN0YW50
VmFsdWUoUHJvdG9jb2w6OkRPTTo6TGl2ZVJlZ2lvblJlbGV2YW50OjpUZXh0KTsKICAgICAgICAg
ICAgICAgICAgICAgbGl2ZVJlZ2lvblJlbGV2YW50ID0gSlNPTjo6QXJyYXlPZjxTdHJpbmc+Ojpj
cmVhdGUoKTsKICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3BhY2VTcGxpdFN0cmluZyYgdmFs
dWVzID0gU3BhY2VTcGxpdFN0cmluZyhhcmlhUmVsZXZhbnRBdHRyVmFsdWUsIHRydWUpOwogICAg
ICAgICAgICAgICAgICAgICAvLyBAYXJpYS1yZWxldmFudD0iYWxsIiBpcyBleHBvc2VkIGFzIFsi
YWRkaXRpb25zIiwicmVtb3ZhbHMiLCJ0ZXh0Il0sIGluIG9yZGVyLgpAQCAtMjA0NSw5ICsyMTE0
LDkgQEAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3Bl
cnRpZXM+IEluc3BlY3RvckRPTUFnZW50OjpidWkKIAogICAgICAgICAgICAgICAgIFN0cmluZyBh
cmlhTGl2ZSA9IGF4T2JqZWN0LT5saXZlUmVnaW9uU3RhdHVzKCk7CiAgICAgICAgICAgICAgICAg
aWYgKGFyaWFMaXZlID09ICJhc3NlcnRpdmUiKQotICAgICAgICAgICAgICAgICAgICBsaXZlUmVn
aW9uU3RhdHVzID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVy
dGllczo6TGl2ZVJlZ2lvblN0YXR1czo6QXNzZXJ0aXZlOworICAgICAgICAgICAgICAgICAgICBs
aXZlUmVnaW9uU3RhdHVzID0gUHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6
OkxpdmVSZWdpb25TdGF0dXM6OkFzc2VydGl2ZTsKICAgICAgICAgICAgICAgICBlbHNlIGlmIChh
cmlhTGl2ZSA9PSAicG9saXRlIikKLSAgICAgICAgICAgICAgICAgICAgbGl2ZVJlZ2lvblN0YXR1
cyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6Okxp
dmVSZWdpb25TdGF0dXM6OlBvbGl0ZTsKKyAgICAgICAgICAgICAgICAgICAgbGl2ZVJlZ2lvblN0
YXR1cyA9IFByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpMaXZlUmVnaW9u
U3RhdHVzOjpQb2xpdGU7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChpczxBY2Nl
c3NpYmlsaXR5Tm9kZU9iamVjdD4oKmF4T2JqZWN0KSkKQEAgLTIwNTcsOSArMjEyNiwxMSBAQCBS
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllcz4g
SW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aQogICAgICAgICAgICAgICAgIFZlY3RvcjxFbGVtZW50Kj4g
b3duZWRFbGVtZW50czsKICAgICAgICAgICAgICAgICBheE9iamVjdC0+ZWxlbWVudHNGcm9tQXR0
cmlidXRlKG93bmVkRWxlbWVudHMsIGFyaWFfb3duc0F0dHIpOwogICAgICAgICAgICAgICAgIGlm
IChvd25lZEVsZW1lbnRzLnNpemUoKSkgewotICAgICAgICAgICAgICAgICAgICBvd25lZE5vZGVJ
ZHMgPSBKU09OOjpBcnJheU9mPGludD46OmNyZWF0ZSgpOwotICAgICAgICAgICAgICAgICAgICBm
b3IgKEVsZW1lbnQqIG93bmVkRWxlbWVudCA6IG93bmVkRWxlbWVudHMpCi0gICAgICAgICAgICAg
ICAgICAgICAgICBvd25lZE5vZGVJZHMtPmFkZEl0ZW0ocHVzaE5vZGVQYXRoVG9Gcm9udGVuZChv
d25lZEVsZW1lbnQpKTsKKyAgICAgICAgICAgICAgICAgICAgb3duZWROb2RlSWRzID0gSlNPTjo6
QXJyYXlPZjxQcm90b2NvbDo6RE9NOjpOb2RlSWQ+OjpjcmVhdGUoKTsKKyAgICAgICAgICAgICAg
ICAgICAgZm9yIChFbGVtZW50KiBvd25lZEVsZW1lbnQgOiBvd25lZEVsZW1lbnRzKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoYXV0byBvd25lZEVsZW1lbnRJZCA9IHB1c2hOb2RlUGF0
aFRvRnJvbnRlbmQob3duZWRFbGVtZW50KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBv
d25lZE5vZGVJZHMtPmFkZEl0ZW0ob3duZWRFbGVtZW50SWQpOworICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCkBAIC0yMDgzLDEwICsyMTU0
LDEyIEBAIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9w
ZXJ0aWVzPiBJbnNwZWN0b3JET01BZ2VudDo6YnVpCiAgICAgICAgICAgICBBWENvcmVPYmplY3Q6
OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBzZWxlY3RlZENoaWxkcmVuOwogICAgICAgICAg
ICAgYXhPYmplY3QtPnNlbGVjdGVkQ2hpbGRyZW4oc2VsZWN0ZWRDaGlsZHJlbik7CiAgICAgICAg
ICAgICBpZiAoc2VsZWN0ZWRDaGlsZHJlbi5zaXplKCkpIHsKLSAgICAgICAgICAgICAgICBzZWxl
Y3RlZENoaWxkTm9kZUlkcyA9IEpTT046OkFycmF5T2Y8aW50Pjo6Y3JlYXRlKCk7CisgICAgICAg
ICAgICAgICAgc2VsZWN0ZWRDaGlsZE5vZGVJZHMgPSBKU09OOjpBcnJheU9mPFByb3RvY29sOjpE
T006Ok5vZGVJZD46OmNyZWF0ZSgpOwogICAgICAgICAgICAgICAgIGZvciAoYXV0byYgc2VsZWN0
ZWRDaGlsZE9iamVjdCA6IHNlbGVjdGVkQ2hpbGRyZW4pIHsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKE5vZGUqIHNlbGVjdGVkQ2hpbGROb2RlID0gc2VsZWN0ZWRDaGlsZE9iamVjdC0+bm9kZSgp
KQotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRDaGlsZE5vZGVJZHMtPmFkZEl0ZW0o
cHVzaE5vZGVQYXRoVG9Gcm9udGVuZChzZWxlY3RlZENoaWxkTm9kZSkpOworICAgICAgICAgICAg
ICAgICAgICBpZiAoTm9kZSogc2VsZWN0ZWRDaGlsZE5vZGUgPSBzZWxlY3RlZENoaWxkT2JqZWN0
LT5ub2RlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhdXRvIHNlbGVjdGVkQ2hp
bGROb2RlSWQgPSBwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKHNlbGVjdGVkQ2hpbGROb2RlKSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZENoaWxkTm9kZUlkcy0+YWRkSXRlbShz
ZWxlY3RlZENoaWxkTm9kZUlkKTsKKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAtMjA5OCw1NCArMjE3MSw2MCBA
QCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGll
cz4gSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aQogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIFJl
ZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzPiB2YWx1
ZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6OmNy
ZWF0ZSgpCisgICAgUmVmPFByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzPiB2
YWx1ZSA9IFByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpjcmVhdGUoKQog
ICAgICAgICAuc2V0RXhpc3RzKGV4aXN0cykKICAgICAgICAgLnNldExhYmVsKGxhYmVsKQogICAg
ICAgICAuc2V0Um9sZShyb2xlKQotICAgICAgICAuc2V0Tm9kZUlkKHB1c2hOb2RlUGF0aFRvRnJv
bnRlbmQobm9kZSkpCisgICAgICAgIC5zZXROb2RlSWQocHVzaE5vZGVQYXRoVG9Gcm9udGVuZCgm
bm9kZSkpCiAgICAgICAgIC5yZWxlYXNlKCk7CiAKICAgICBpZiAoZXhpc3RzKSB7Ci0gICAgICAg
IGlmIChhY3RpdmVEZXNjZW5kYW50Tm9kZSkKLSAgICAgICAgICAgIHZhbHVlLT5zZXRBY3RpdmVE
ZXNjZW5kYW50Tm9kZUlkKHB1c2hOb2RlUGF0aFRvRnJvbnRlbmQoYWN0aXZlRGVzY2VuZGFudE5v
ZGUpKTsKKyAgICAgICAgaWYgKGFjdGl2ZURlc2NlbmRhbnROb2RlKSB7CisgICAgICAgICAgICBp
ZiAoYXV0byBhY3RpdmVEZXNjZW5kYW50Tm9kZUlkID0gcHVzaE5vZGVQYXRoVG9Gcm9udGVuZChh
Y3RpdmVEZXNjZW5kYW50Tm9kZSkpCisgICAgICAgICAgICAgICAgdmFsdWUtPnNldEFjdGl2ZURl
c2NlbmRhbnROb2RlSWQoYWN0aXZlRGVzY2VuZGFudE5vZGVJZCk7CisgICAgICAgIH0KICAgICAg
ICAgaWYgKGJ1c3kpCiAgICAgICAgICAgICB2YWx1ZS0+c2V0QnVzeShidXN5KTsKICAgICAgICAg
aWYgKHN1cHBvcnRzQ2hlY2tlZCkKICAgICAgICAgICAgIHZhbHVlLT5zZXRDaGVja2VkKGNoZWNr
ZWQpOwogICAgICAgICBpZiAoY2hpbGROb2RlSWRzKQotICAgICAgICAgICAgdmFsdWUtPnNldENo
aWxkTm9kZUlkcyhjaGlsZE5vZGVJZHMpOworICAgICAgICAgICAgdmFsdWUtPnNldENoaWxkTm9k
ZUlkcyhjaGlsZE5vZGVJZHMucmVsZWFzZU5vbk51bGwoKSk7CiAgICAgICAgIGlmIChjb250cm9s
bGVkTm9kZUlkcykKLSAgICAgICAgICAgIHZhbHVlLT5zZXRDb250cm9sbGVkTm9kZUlkcyhjb250
cm9sbGVkTm9kZUlkcyk7Ci0gICAgICAgIGlmIChjdXJyZW50U3RhdGUgIT0gSW5zcGVjdG9yOjpQ
cm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6Q3VycmVudDo6RmFsc2UpCisg
ICAgICAgICAgICB2YWx1ZS0+c2V0Q29udHJvbGxlZE5vZGVJZHMoY29udHJvbGxlZE5vZGVJZHMu
cmVsZWFzZU5vbk51bGwoKSk7CisgICAgICAgIGlmIChjdXJyZW50U3RhdGUgIT0gUHJvdG9jb2w6
OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6OkN1cnJlbnQ6OkZhbHNlKQogICAgICAgICAg
ICAgdmFsdWUtPnNldEN1cnJlbnQoY3VycmVudFN0YXRlKTsKICAgICAgICAgaWYgKGRpc2FibGVk
KQogICAgICAgICAgICAgdmFsdWUtPnNldERpc2FibGVkKGRpc2FibGVkKTsKICAgICAgICAgaWYg
KHN1cHBvcnRzRXhwYW5kZWQpCiAgICAgICAgICAgICB2YWx1ZS0+c2V0RXhwYW5kZWQoZXhwYW5k
ZWQpOwogICAgICAgICBpZiAoZmxvd2VkTm9kZUlkcykKLSAgICAgICAgICAgIHZhbHVlLT5zZXRG
bG93ZWROb2RlSWRzKGZsb3dlZE5vZGVJZHMpOworICAgICAgICAgICAgdmFsdWUtPnNldEZsb3dl
ZE5vZGVJZHMoZmxvd2VkTm9kZUlkcy5yZWxlYXNlTm9uTnVsbCgpKTsKICAgICAgICAgaWYgKHN1
cHBvcnRzRm9jdXNlZCkKICAgICAgICAgICAgIHZhbHVlLT5zZXRGb2N1c2VkKGZvY3VzZWQpOwog
ICAgICAgICBpZiAoaWdub3JlZCkKICAgICAgICAgICAgIHZhbHVlLT5zZXRJZ25vcmVkKGlnbm9y
ZWQpOwogICAgICAgICBpZiAoaWdub3JlZEJ5RGVmYXVsdCkKICAgICAgICAgICAgIHZhbHVlLT5z
ZXRJZ25vcmVkQnlEZWZhdWx0KGlnbm9yZWRCeURlZmF1bHQpOwotICAgICAgICBpZiAoaW52YWxp
ZCAhPSBJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpJ
bnZhbGlkOjpGYWxzZSkKKyAgICAgICAgaWYgKGludmFsaWQgIT0gUHJvdG9jb2w6OkRPTTo6QWNj
ZXNzaWJpbGl0eVByb3BlcnRpZXM6OkludmFsaWQ6OkZhbHNlKQogICAgICAgICAgICAgdmFsdWUt
PnNldEludmFsaWQoaW52YWxpZCk7CiAgICAgICAgIGlmIChoaWRkZW4pCiAgICAgICAgICAgICB2
YWx1ZS0+c2V0SGlkZGVuKGhpZGRlbik7CiAgICAgICAgIGlmIChzdXBwb3J0c0xpdmVSZWdpb24p
IHsKICAgICAgICAgICAgIHZhbHVlLT5zZXRMaXZlUmVnaW9uQXRvbWljKGxpdmVSZWdpb25BdG9t
aWMpOwogICAgICAgICAgICAgaWYgKGxpdmVSZWdpb25SZWxldmFudC0+bGVuZ3RoKCkpCi0gICAg
ICAgICAgICAgICAgdmFsdWUtPnNldExpdmVSZWdpb25SZWxldmFudChsaXZlUmVnaW9uUmVsZXZh
bnQpOworICAgICAgICAgICAgICAgIHZhbHVlLT5zZXRMaXZlUmVnaW9uUmVsZXZhbnQobGl2ZVJl
Z2lvblJlbGV2YW50LnJlbGVhc2VOb25OdWxsKCkpOwogICAgICAgICAgICAgdmFsdWUtPnNldExp
dmVSZWdpb25TdGF0dXMobGl2ZVJlZ2lvblN0YXR1cyk7CiAgICAgICAgIH0KLSAgICAgICAgaWYg
KG1vdXNlRXZlbnROb2RlKQotICAgICAgICAgICAgdmFsdWUtPnNldE1vdXNlRXZlbnROb2RlSWQo
cHVzaE5vZGVQYXRoVG9Gcm9udGVuZChtb3VzZUV2ZW50Tm9kZSkpOworICAgICAgICBpZiAobW91
c2VFdmVudE5vZGUpIHsKKyAgICAgICAgICAgIGlmIChhdXRvIG1vdXNlRXZlbnROb2RlSWQgPSBw
dXNoTm9kZVBhdGhUb0Zyb250ZW5kKG1vdXNlRXZlbnROb2RlKSkKKyAgICAgICAgICAgICAgICB2
YWx1ZS0+c2V0TW91c2VFdmVudE5vZGVJZChtb3VzZUV2ZW50Tm9kZUlkKTsKKyAgICAgICAgfQog
ICAgICAgICBpZiAob3duZWROb2RlSWRzKQotICAgICAgICAgICAgdmFsdWUtPnNldE93bmVkTm9k
ZUlkcyhvd25lZE5vZGVJZHMpOwotICAgICAgICBpZiAocGFyZW50Tm9kZSkKLSAgICAgICAgICAg
IHZhbHVlLT5zZXRQYXJlbnROb2RlSWQocHVzaE5vZGVQYXRoVG9Gcm9udGVuZChwYXJlbnROb2Rl
KSk7CisgICAgICAgICAgICB2YWx1ZS0+c2V0T3duZWROb2RlSWRzKG93bmVkTm9kZUlkcy5yZWxl
YXNlTm9uTnVsbCgpKTsKKyAgICAgICAgaWYgKHBhcmVudE5vZGUpIHsKKyAgICAgICAgICAgIGlm
IChhdXRvIHBhcmVudE5vZGVJZCA9IHB1c2hOb2RlUGF0aFRvRnJvbnRlbmQocGFyZW50Tm9kZSkp
CisgICAgICAgICAgICAgICAgdmFsdWUtPnNldFBhcmVudE5vZGVJZChwYXJlbnROb2RlSWQpOwor
ICAgICAgICB9CiAgICAgICAgIGlmIChzdXBwb3J0c1ByZXNzZWQpCiAgICAgICAgICAgICB2YWx1
ZS0+c2V0UHJlc3NlZChwcmVzc2VkKTsKICAgICAgICAgaWYgKHJlYWRvbmx5KQpAQCAtMjE1NSw3
ICsyMjM0LDcgQEAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0
eVByb3BlcnRpZXM+IEluc3BlY3RvckRPTUFnZW50OjpidWkKICAgICAgICAgaWYgKHNlbGVjdGVk
KQogICAgICAgICAgICAgdmFsdWUtPnNldFNlbGVjdGVkKHNlbGVjdGVkKTsKICAgICAgICAgaWYg
KHNlbGVjdGVkQ2hpbGROb2RlSWRzKQotICAgICAgICAgICAgdmFsdWUtPnNldFNlbGVjdGVkQ2hp
bGROb2RlSWRzKHNlbGVjdGVkQ2hpbGROb2RlSWRzKTsKKyAgICAgICAgICAgIHZhbHVlLT5zZXRT
ZWxlY3RlZENoaWxkTm9kZUlkcyhzZWxlY3RlZENoaWxkTm9kZUlkcy5yZWxlYXNlTm9uTnVsbCgp
KTsKICAgICAgICAgCiAgICAgICAgIC8vIEgxIC0tIEg2IGFsd2F5cyBoYXZlIGEgaGVhZGluZ0xl
dmVsIHByb3BlcnR5IHRoYXQgY2FuIGJlIGNvbXBsaW1lbnRlZCBieSBhIGhpZXJhcmNoaWNhbExl
dmVsCiAgICAgICAgIC8vIHByb3BlcnR5IHdoZW4gYXJpYS1sZXZlbCBpcyBzZXQgb24gdGhlIGVs
ZW1lbnQsIGluIHdoaWNoIGNhc2Ugd2Ugd2FudCB0byByZW1haW4gY2FsbGluZwpAQCAtMjIzNSwy
MiArMjMxNCwyMiBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpkaWRDb21taXRMb2FkKERvY3Vt
ZW50KiBkb2N1bWVudCkKICAgICBpZiAoIWZyYW1lT3duZXIpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIGludCBmcmFtZU93bmVySWQgPSBtX2RvY3VtZW50Tm9kZVRvSWRNYXAuZ2V0KGZyYW1lT3du
ZXIpOworICAgIGF1dG8gZnJhbWVPd25lcklkID0gbV9kb2N1bWVudE5vZGVUb0lkTWFwLmdldChm
cmFtZU93bmVyKTsKICAgICBpZiAoIWZyYW1lT3duZXJJZCkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgLy8gUmUtYWRkIGZyYW1lIG93bmVyIGVsZW1lbnQgdG9nZXRoZXIgd2l0aCBpdHMgbmV3IGNo
aWxkcmVuLgotICAgIGludCBwYXJlbnRJZCA9IG1fZG9jdW1lbnROb2RlVG9JZE1hcC5nZXQoaW5u
ZXJQYXJlbnROb2RlKGZyYW1lT3duZXIuZ2V0KCkpKTsKKyAgICBhdXRvIHBhcmVudElkID0gbV9k
b2N1bWVudE5vZGVUb0lkTWFwLmdldChpbm5lclBhcmVudE5vZGUoZnJhbWVPd25lci5nZXQoKSkp
OwogICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5jaGlsZE5vZGVSZW1vdmVkKHBhcmVudElkLCBm
cmFtZU93bmVySWQpOwogICAgIHVuYmluZChmcmFtZU93bmVyLmdldCgpLCAmbV9kb2N1bWVudE5v
ZGVUb0lkTWFwKTsKIAotICAgIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+IHZh
bHVlID0gYnVpbGRPYmplY3RGb3JOb2RlKGZyYW1lT3duZXIuZ2V0KCksIDAsICZtX2RvY3VtZW50
Tm9kZVRvSWRNYXApOworICAgIFJlZjxQcm90b2NvbDo6RE9NOjpOb2RlPiB2YWx1ZSA9IGJ1aWxk
T2JqZWN0Rm9yTm9kZShmcmFtZU93bmVyLmdldCgpLCAwLCAmbV9kb2N1bWVudE5vZGVUb0lkTWFw
KTsKICAgICBOb2RlKiBwcmV2aW91c1NpYmxpbmcgPSBpbm5lclByZXZpb3VzU2libGluZyhmcmFt
ZU93bmVyLmdldCgpKTsKLSAgICBpbnQgcHJldklkID0gcHJldmlvdXNTaWJsaW5nID8gbV9kb2N1
bWVudE5vZGVUb0lkTWFwLmdldChwcmV2aW91c1NpYmxpbmcpIDogMDsKKyAgICBhdXRvIHByZXZJ
ZCA9IHByZXZpb3VzU2libGluZyA/IG1fZG9jdW1lbnROb2RlVG9JZE1hcC5nZXQocHJldmlvdXNT
aWJsaW5nKSA6IDA7CiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPmNoaWxkTm9kZUluc2VydGVk
KHBhcmVudElkLCBwcmV2SWQsIFdURk1vdmUodmFsdWUpKTsKIH0KIAotaW50IEluc3BlY3RvckRP
TUFnZW50OjppZGVudGlmaWVyRm9yTm9kZShOb2RlJiBub2RlKQorUHJvdG9jb2w6OkRPTTo6Tm9k
ZUlkIEluc3BlY3RvckRPTUFnZW50OjppZGVudGlmaWVyRm9yTm9kZShOb2RlJiBub2RlKQogewog
ICAgIHJldHVybiBwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKCZub2RlKTsKIH0KQEAgLTIzMDcsNyAr
MjM4Niw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmRpZEluc2VydERPTU5vZGUoTm9kZSYg
bm9kZSkKICAgICBpZiAoIXBhcmVudCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaW50IHBhcmVu
dElkID0gbV9kb2N1bWVudE5vZGVUb0lkTWFwLmdldChwYXJlbnQpOworICAgIGF1dG8gcGFyZW50
SWQgPSBtX2RvY3VtZW50Tm9kZVRvSWRNYXAuZ2V0KHBhcmVudCk7CiAgICAgLy8gUmV0dXJuIGlm
IHBhcmVudCBpcyBub3QgbWFwcGVkIHlldC4KICAgICBpZiAoIXBhcmVudElkKQogICAgICAgICBy
ZXR1cm47CkBAIC0yMzE4LDggKzIzOTcsOCBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpkaWRJ
bnNlcnRET01Ob2RlKE5vZGUmIG5vZGUpCiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gQ2hpbGRy
ZW4gaGF2ZSBiZWVuIHJlcXVlc3RlZCAtPiByZXR1cm4gdmFsdWUgb2YgYSBuZXcgY2hpbGQuCiAg
ICAgICAgIE5vZGUqIHByZXZTaWJsaW5nID0gaW5uZXJQcmV2aW91c1NpYmxpbmcoJm5vZGUpOwot
ICAgICAgICBpbnQgcHJldklkID0gcHJldlNpYmxpbmcgPyBtX2RvY3VtZW50Tm9kZVRvSWRNYXAu
Z2V0KHByZXZTaWJsaW5nKSA6IDA7Ci0gICAgICAgIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpE
T006Ok5vZGU+IHZhbHVlID0gYnVpbGRPYmplY3RGb3JOb2RlKCZub2RlLCAwLCAmbV9kb2N1bWVu
dE5vZGVUb0lkTWFwKTsKKyAgICAgICAgYXV0byBwcmV2SWQgPSBwcmV2U2libGluZyA/IG1fZG9j
dW1lbnROb2RlVG9JZE1hcC5nZXQocHJldlNpYmxpbmcpIDogMDsKKyAgICAgICAgUmVmPFByb3Rv
Y29sOjpET006Ok5vZGU+IHZhbHVlID0gYnVpbGRPYmplY3RGb3JOb2RlKCZub2RlLCAwLCAmbV9k
b2N1bWVudE5vZGVUb0lkTWFwKTsKICAgICAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPmNoaWxk
Tm9kZUluc2VydGVkKHBhcmVudElkLCBwcmV2SWQsIFdURk1vdmUodmFsdWUpKTsKICAgICB9CiB9
CkBAIC0yMzM1LDcgKzI0MTQsNyBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpkaWRSZW1vdmVE
T01Ob2RlKE5vZGUmIG5vZGUpCiAgICAgaWYgKCFtX2RvY3VtZW50Tm9kZVRvSWRNYXAuY29udGFp
bnMocGFyZW50KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaW50IHBhcmVudElkID0gbV9kb2N1
bWVudE5vZGVUb0lkTWFwLmdldChwYXJlbnQpOworICAgIGF1dG8gcGFyZW50SWQgPSBtX2RvY3Vt
ZW50Tm9kZVRvSWRNYXAuZ2V0KHBhcmVudCk7CiAKICAgICBpZiAoIW1fY2hpbGRyZW5SZXF1ZXN0
ZWQuY29udGFpbnMocGFyZW50SWQpKSB7CiAgICAgICAgIC8vIE5vIGNoaWxkcmVuIGFyZSBtYXBw
ZWQgeWV0IC0+IG9ubHkgbm90aWZ5IG9uIGNoYW5nZXMgb2YgaGFzQ2hpbGRyZW4uCkBAIC0yMzU4
LDcgKzI0MzcsNyBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpkaWRNb2RpZnlET01BdHRyKEVs
ZW1lbnQmIGVsZW1lbnQsIGNvbnN0IEF0b21TdHJpbmcmIG5hbQogICAgIGlmIChzaG91bGRTdXBw
cmVzc0V2ZW50KQogICAgICAgICByZXR1cm47CiAKLSAgICBpbnQgaWQgPSBib3VuZE5vZGVJZCgm
ZWxlbWVudCk7CisgICAgYXV0byBpZCA9IGJvdW5kTm9kZUlkKCZlbGVtZW50KTsKICAgICBpZiAo
IWlkKQogICAgICAgICByZXR1cm47CiAKQEAgLTIzNzAsNyArMjQ0OSw3IEBAIHZvaWQgSW5zcGVj
dG9yRE9NQWdlbnQ6OmRpZE1vZGlmeURPTUF0dHIoRWxlbWVudCYgZWxlbWVudCwgY29uc3QgQXRv
bVN0cmluZyYgbmFtCiAKIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmRpZFJlbW92ZURPTUF0dHIo
RWxlbWVudCYgZWxlbWVudCwgY29uc3QgQXRvbVN0cmluZyYgbmFtZSkKIHsKLSAgICBpbnQgaWQg
PSBib3VuZE5vZGVJZCgmZWxlbWVudCk7CisgICAgYXV0byBpZCA9IGJvdW5kTm9kZUlkKCZlbGVt
ZW50KTsKICAgICBpZiAoIWlkKQogICAgICAgICByZXR1cm47CiAKQEAgLTIzODIsOSArMjQ2MSw5
IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmRpZFJlbW92ZURPTUF0dHIoRWxlbWVudCYgZWxl
bWVudCwgY29uc3QgQXRvbVN0cmluZyYgbmFtCiAKIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnN0
eWxlQXR0cmlidXRlSW52YWxpZGF0ZWQoY29uc3QgVmVjdG9yPEVsZW1lbnQqPiYgZWxlbWVudHMp
CiB7Ci0gICAgYXV0byBub2RlSWRzID0gSlNPTjo6QXJyYXlPZjxpbnQ+OjpjcmVhdGUoKTsKKyAg
ICBhdXRvIG5vZGVJZHMgPSBKU09OOjpBcnJheU9mPFByb3RvY29sOjpET006Ok5vZGVJZD46OmNy
ZWF0ZSgpOwogICAgIGZvciAoYXV0byYgZWxlbWVudCA6IGVsZW1lbnRzKSB7Ci0gICAgICAgIGlu
dCBpZCA9IGJvdW5kTm9kZUlkKGVsZW1lbnQpOworICAgICAgICBhdXRvIGlkID0gYm91bmROb2Rl
SWQoZWxlbWVudCk7CiAgICAgICAgIGlmICghaWQpCiAgICAgICAgICAgICBjb250aW51ZTsKIApA
QCAtMjM5OCw3ICsyNDc3LDcgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c3R5bGVBdHRyaWJ1
dGVJbnZhbGlkYXRlZChjb25zdCBWZWN0b3I8RWxlbWVudCo+JiBlbGVtZW4KIAogdm9pZCBJbnNw
ZWN0b3JET01BZ2VudDo6Y2hhcmFjdGVyRGF0YU1vZGlmaWVkKENoYXJhY3RlckRhdGEmIGNoYXJh
Y3RlckRhdGEpCiB7Ci0gICAgaW50IGlkID0gbV9kb2N1bWVudE5vZGVUb0lkTWFwLmdldCgmY2hh
cmFjdGVyRGF0YSk7CisgICAgYXV0byBpZCA9IG1fZG9jdW1lbnROb2RlVG9JZE1hcC5nZXQoJmNo
YXJhY3RlckRhdGEpOwogICAgIGlmICghaWQpIHsKICAgICAgICAgLy8gUHVzaCB0ZXh0IG5vZGUg
aWYgaXQgaXMgYmVpbmcgY3JlYXRlZC4KICAgICAgICAgZGlkSW5zZXJ0RE9NTm9kZShjaGFyYWN0
ZXJEYXRhKTsKQEAgLTI0MDksNyArMjQ4OCw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmNo
YXJhY3RlckRhdGFNb2RpZmllZChDaGFyYWN0ZXJEYXRhJiBjaGFyYWN0ZXJEYXRhKQogCiB2b2lk
IEluc3BlY3RvckRPTUFnZW50OjpkaWRJbnZhbGlkYXRlU3R5bGVBdHRyKEVsZW1lbnQmIGVsZW1l
bnQpCiB7Ci0gICAgaW50IGlkID0gbV9kb2N1bWVudE5vZGVUb0lkTWFwLmdldCgmZWxlbWVudCk7
CisgICAgYXV0byBpZCA9IG1fZG9jdW1lbnROb2RlVG9JZE1hcC5nZXQoJmVsZW1lbnQpOwogICAg
IGlmICghaWQpCiAgICAgICAgIHJldHVybjsKIApAQCAtMjQyMCwyMiArMjQ5OSwyMiBAQCB2b2lk
IEluc3BlY3RvckRPTUFnZW50OjpkaWRJbnZhbGlkYXRlU3R5bGVBdHRyKEVsZW1lbnQmIGVsZW1l
bnQpCiAKIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmRpZFB1c2hTaGFkb3dSb290KEVsZW1lbnQm
IGhvc3QsIFNoYWRvd1Jvb3QmIHJvb3QpCiB7Ci0gICAgaW50IGhvc3RJZCA9IG1fZG9jdW1lbnRO
b2RlVG9JZE1hcC5nZXQoJmhvc3QpOworICAgIGF1dG8gaG9zdElkID0gbV9kb2N1bWVudE5vZGVU
b0lkTWFwLmdldCgmaG9zdCk7CiAgICAgaWYgKGhvc3RJZCkKICAgICAgICAgbV9mcm9udGVuZERp
c3BhdGNoZXItPnNoYWRvd1Jvb3RQdXNoZWQoaG9zdElkLCBidWlsZE9iamVjdEZvck5vZGUoJnJv
b3QsIDAsICZtX2RvY3VtZW50Tm9kZVRvSWRNYXApKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JET01B
Z2VudDo6d2lsbFBvcFNoYWRvd1Jvb3QoRWxlbWVudCYgaG9zdCwgU2hhZG93Um9vdCYgcm9vdCkK
IHsKLSAgICBpbnQgaG9zdElkID0gbV9kb2N1bWVudE5vZGVUb0lkTWFwLmdldCgmaG9zdCk7Ci0g
ICAgaW50IHJvb3RJZCA9IG1fZG9jdW1lbnROb2RlVG9JZE1hcC5nZXQoJnJvb3QpOworICAgIGF1
dG8gaG9zdElkID0gbV9kb2N1bWVudE5vZGVUb0lkTWFwLmdldCgmaG9zdCk7CisgICAgYXV0byBy
b290SWQgPSBtX2RvY3VtZW50Tm9kZVRvSWRNYXAuZ2V0KCZyb290KTsKICAgICBpZiAoaG9zdElk
ICYmIHJvb3RJZCkKICAgICAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPnNoYWRvd1Jvb3RQb3Bw
ZWQoaG9zdElkLCByb290SWQpOwogfQogCiB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpkaWRDaGFu
Z2VDdXN0b21FbGVtZW50U3RhdGUoRWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICBpbnQgZWxlbWVu
dElkID0gbV9kb2N1bWVudE5vZGVUb0lkTWFwLmdldCgmZWxlbWVudCk7CisgICAgYXV0byBlbGVt
ZW50SWQgPSBtX2RvY3VtZW50Tm9kZVRvSWRNYXAuZ2V0KCZlbGVtZW50KTsKICAgICBpZiAoIWVs
ZW1lbnRJZCkKICAgICAgICAgcmV0dXJuOwogCkBAIC0yNDYyLDcgKzI1NDEsNyBAQCB2b2lkIElu
c3BlY3RvckRPTUFnZW50Ojpwc2V1ZG9FbGVtZW50Q3JlYXRlZChQc2V1ZG9FbGVtZW50JiBwc2V1
ZG9FbGVtZW50KQogICAgIGlmICghcGFyZW50KQogICAgICAgICByZXR1cm47CiAKLSAgICBpbnQg
cGFyZW50SWQgPSBtX2RvY3VtZW50Tm9kZVRvSWRNYXAuZ2V0KHBhcmVudCk7CisgICAgYXV0byBw
YXJlbnRJZCA9IG1fZG9jdW1lbnROb2RlVG9JZE1hcC5nZXQocGFyZW50KTsKICAgICBpZiAoIXBh
cmVudElkKQogICAgICAgICByZXR1cm47CiAKQEAgLTI0NzIsMTQgKzI1NTEsMTQgQEAgdm9pZCBJ
bnNwZWN0b3JET01BZ2VudDo6cHNldWRvRWxlbWVudENyZWF0ZWQoUHNldWRvRWxlbWVudCYgcHNl
dWRvRWxlbWVudCkKIAogdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6cHNldWRvRWxlbWVudERlc3Ry
b3llZChQc2V1ZG9FbGVtZW50JiBwc2V1ZG9FbGVtZW50KQogewotICAgIGludCBwc2V1ZG9FbGVt
ZW50SWQgPSBtX2RvY3VtZW50Tm9kZVRvSWRNYXAuZ2V0KCZwc2V1ZG9FbGVtZW50KTsKKyAgICBh
dXRvIHBzZXVkb0VsZW1lbnRJZCA9IG1fZG9jdW1lbnROb2RlVG9JZE1hcC5nZXQoJnBzZXVkb0Vs
ZW1lbnQpOwogICAgIGlmICghcHNldWRvRWxlbWVudElkKQogICAgICAgICByZXR1cm47CiAKICAg
ICAvLyBJZiBhIFBzZXVkb0VsZW1lbnQgaXMgYm91bmQsIGl0cyBwYXJlbnQgZWxlbWVudCBtdXN0
IGhhdmUgYmVlbiBib3VuZC4KICAgICBFbGVtZW50KiBwYXJlbnQgPSBwc2V1ZG9FbGVtZW50Lmhv
c3RFbGVtZW50KCk7CiAgICAgQVNTRVJUKHBhcmVudCk7Ci0gICAgaW50IHBhcmVudElkID0gbV9k
b2N1bWVudE5vZGVUb0lkTWFwLmdldChwYXJlbnQpOworICAgIGF1dG8gcGFyZW50SWQgPSBtX2Rv
Y3VtZW50Tm9kZVRvSWRNYXAuZ2V0KHBhcmVudCk7CiAgICAgQVNTRVJUKHBhcmVudElkKTsKIAog
ICAgIHVuYmluZCgmcHNldWRvRWxlbWVudCwgJm1fZG9jdW1lbnROb2RlVG9JZE1hcCk7CkBAIC0y
NDk1LDcgKzI1NzQsNyBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpkaWRBZGRFdmVudExpc3Rl
bmVyKEV2ZW50VGFyZ2V0JiB0YXJnZXQpCiAgICAgaWYgKCFub2RlLmNvbnRhaW5zKG1faW5zcGVj
dGVkTm9kZS5nZXQoKSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGludCBub2RlSWQgPSBib3Vu
ZE5vZGVJZCgmbm9kZSk7CisgICAgYXV0byBub2RlSWQgPSBib3VuZE5vZGVJZCgmbm9kZSk7CiAg
ICAgaWYgKCFub2RlSWQpCiAgICAgICAgIHJldHVybjsKIApAQCAtMjUxNiw3ICsyNTk1LDcgQEAg
dm9pZCBJbnNwZWN0b3JET01BZ2VudDo6d2lsbFJlbW92ZUV2ZW50TGlzdGVuZXIoRXZlbnRUYXJn
ZXQmIHRhcmdldCwgY29uc3QgQXRvbVMKICAgICBpZiAoIW5vZGUuY29udGFpbnMobV9pbnNwZWN0
ZWROb2RlLmdldCgpKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaW50IG5vZGVJZCA9IGJvdW5k
Tm9kZUlkKCZub2RlKTsKKyAgICBhdXRvIG5vZGVJZCA9IGJvdW5kTm9kZUlkKCZub2RlKTsKICAg
ICBpZiAoIW5vZGVJZCkKICAgICAgICAgcmV0dXJuOwogCkBAIC0yNTY2LDcgKzI2NDUsNyBAQCBS
ZWZQdHI8SlNDOjpCcmVha3BvaW50PiBJbnNwZWN0b3JET01BZ2VudDo6YnJlYWtwb2ludEZvckV2
ZW50TGlzdGVuZXIoRXZlbnRUYXJnZQogICAgIHJldHVybiBudWxscHRyOwogfQogCi1pbnQgSW5z
cGVjdG9yRE9NQWdlbnQ6OmlkRm9yRXZlbnRMaXN0ZW5lcihFdmVudFRhcmdldCYgdGFyZ2V0LCBj
b25zdCBBdG9tU3RyaW5nJiBldmVudFR5cGUsIEV2ZW50TGlzdGVuZXImIGxpc3RlbmVyLCBib29s
IGNhcHR1cmUpCitQcm90b2NvbDo6RE9NOjpFdmVudExpc3RlbmVySWQgSW5zcGVjdG9yRE9NQWdl
bnQ6OmlkRm9yRXZlbnRMaXN0ZW5lcihFdmVudFRhcmdldCYgdGFyZ2V0LCBjb25zdCBBdG9tU3Ry
aW5nJiBldmVudFR5cGUsIEV2ZW50TGlzdGVuZXImIGxpc3RlbmVyLCBib29sIGNhcHR1cmUpCiB7
CiAgICAgZm9yIChhdXRvJiBpbnNwZWN0b3JFdmVudExpc3RlbmVyIDogbV9ldmVudExpc3RlbmVy
RW50cmllcy52YWx1ZXMoKSkgewogICAgICAgICBpZiAoaW5zcGVjdG9yRXZlbnRMaXN0ZW5lci5t
YXRjaGVzKHRhcmdldCwgZXZlbnRUeXBlLCBsaXN0ZW5lciwgY2FwdHVyZSkpCkBAIC0yNjA0LDgg
KzI2ODMsNyBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjptZWRpYU1ldHJpY3NUaW1lckZpcmVk
KCkKICAgICAgICAgaWYgKGl0ZXJhdG9yLT52YWx1ZS5pc1Bvd2VyRWZmaWNpZW50ICE9IGlzUG93
ZXJFZmZpY2llbnQpIHsKICAgICAgICAgICAgIGl0ZXJhdG9yLT52YWx1ZS5pc1Bvd2VyRWZmaWNp
ZW50ID0gaXNQb3dlckVmZmljaWVudDsKIAotICAgICAgICAgICAgaW50IG5vZGVJZCA9IHB1c2hO
b2RlUGF0aFRvRnJvbnRlbmQobWVkaWFFbGVtZW50KTsKLSAgICAgICAgICAgIGlmIChub2RlSWQp
IHsKKyAgICAgICAgICAgIGlmIChhdXRvIG5vZGVJZCA9IHB1c2hOb2RlUGF0aFRvRnJvbnRlbmQo
bWVkaWFFbGVtZW50KSkgewogICAgICAgICAgICAgICAgIGF1dG8gdGltZXN0YW1wID0gbV9lbnZp
cm9ubWVudC5leGVjdXRpb25TdG9wd2F0Y2goKS5lbGFwc2VkVGltZSgpLnNlY29uZHMoKTsKICAg
ICAgICAgICAgICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+cG93ZXJFZmZpY2llbnRQbGF5YmFj
a1N0YXRlQ2hhbmdlZChub2RlSWQsIHRpbWVzdGFtcCwgaXRlcmF0b3ItPnZhbHVlLmlzUG93ZXJF
ZmZpY2llbnQpOwogICAgICAgICAgICAgfQpAQCAtMjY1OSw3ICsyNzM3LDcgQEAgTm9kZSogSW5z
cGVjdG9yRE9NQWdlbnQ6Om5vZGVGb3JQYXRoKGNvbnN0IFN0cmluZyYgcGF0aCkKICAgICByZXR1
cm4gbm9kZTsKIH0KIAotTm9kZSogSW5zcGVjdG9yRE9NQWdlbnQ6Om5vZGVGb3JPYmplY3RJZChj
b25zdCBTdHJpbmcmIG9iamVjdElkKQorTm9kZSogSW5zcGVjdG9yRE9NQWdlbnQ6Om5vZGVGb3JP
YmplY3RJZChjb25zdCBQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0SWQmIG9iamVjdElk
KQogewogICAgIEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0ID0gbV9pbmplY3RlZFNjcmlw
dE1hbmFnZXIuaW5qZWN0ZWRTY3JpcHRGb3JPYmplY3RJZChvYmplY3RJZCk7CiAgICAgaWYgKGlu
amVjdGVkU2NyaXB0Lmhhc05vVmFsdWUoKSkKQEAgLTI2NjgsMTUgKzI3NDYsMjAgQEAgTm9kZSog
SW5zcGVjdG9yRE9NQWdlbnQ6Om5vZGVGb3JPYmplY3RJZChjb25zdCBTdHJpbmcmIG9iamVjdElk
KQogICAgIHJldHVybiBzY3JpcHRWYWx1ZUFzTm9kZShpbmplY3RlZFNjcmlwdC5maW5kT2JqZWN0
QnlJZChvYmplY3RJZCkpOwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpwdXNoTm9kZUJ5
UGF0aFRvRnJvbnRlbmQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHBh
dGgsIGludCogbm9kZUlkKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UHJvdG9jb2w6OkRPTTo6
Tm9kZUlkPiBJbnNwZWN0b3JET01BZ2VudDo6cHVzaE5vZGVCeVBhdGhUb0Zyb250ZW5kKGNvbnN0
IFN0cmluZyYgcGF0aCkKIHsKLSAgICBpZiAoTm9kZSogbm9kZSA9IG5vZGVGb3JQYXRoKHBhdGgp
KQotICAgICAgICAqbm9kZUlkID0gcHVzaE5vZGVQYXRoVG9Gcm9udGVuZChlcnJvclN0cmluZywg
bm9kZSk7Ci0gICAgZWxzZQotICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIG5vZGUgZm9y
IGdpdmVuIHBhdGgiX3M7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOwor
CisgICAgaWYgKE5vZGUqIG5vZGUgPSBub2RlRm9yUGF0aChwYXRoKSkgeworICAgICAgICBpZiAo
YXV0byBub2RlSWQgPSBwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKGVycm9yU3RyaW5nLCBub2RlKSkK
KyAgICAgICAgICAgIHJldHVybiBub2RlSWQ7CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3Rl
ZChlcnJvclN0cmluZyk7CisgICAgfQorCisgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJNaXNz
aW5nIG5vZGUgZm9yIGdpdmVuIHBhdGgiX3MpOwogfQogCi1SZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiBJbnNwZWN0b3JET01BZ2VudDo6cmVzb2x2ZU5v
ZGUoTm9kZSogbm9kZSwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCkKK1JlZlB0cjxQcm90b2Nv
bDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiBJbnNwZWN0b3JET01BZ2VudDo6cmVzb2x2ZU5vZGUo
Tm9kZSogbm9kZSwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCkKIHsKICAgICBEb2N1bWVudCog
ZG9jdW1lbnQgPSAmbm9kZS0+ZG9jdW1lbnQoKTsKICAgICBpZiAoYXV0byogdGVtcGxhdGVIb3N0
ID0gZG9jdW1lbnQtPnRlbXBsYXRlRG9jdW1lbnRIb3N0KCkpCkBAIC0yNzA2LDkgKzI3ODksMTEg
QEAgSlNDOjpKU1ZhbHVlIEluc3BlY3RvckRPTUFnZW50Ojpub2RlQXNTY3JpcHRWYWx1ZShKU0M6
OkpTR2xvYmFsT2JqZWN0JiBzdGF0ZSwgTm8KICAgICByZXR1cm4gdG9KUygmc3RhdGUsIGRlcHJl
Y2F0ZWRHbG9iYWxPYmplY3RGb3JQcm90b3R5cGUoJnN0YXRlKSwgQmluZGluZ1NlY3VyaXR5Ojpj
aGVja1NlY3VyaXR5Rm9yTm9kZShzdGF0ZSwgbm9kZSkpOwogfQogCi12b2lkIEluc3BlY3RvckRP
TUFnZW50OjpzZXRBbGxvd0VkaXRpbmdVc2VyQWdlbnRTaGFkb3dUcmVlcyhFcnJvclN0cmluZyYs
IGJvb2wgYWxsb3cpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JET01B
Z2VudDo6c2V0QWxsb3dFZGl0aW5nVXNlckFnZW50U2hhZG93VHJlZXMoYm9vbCBhbGxvdykKIHsK
ICAgICBtX2FsbG93RWRpdGluZ1VzZXJBZ2VudFNoYWRvd1RyZWVzID0gYWxsb3c7CisKKyAgICBy
ZXR1cm4geyB9OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmggYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmgKaW5kZXggM2UzNzcw
N2FmZWNmNzhmNDIxOGFhODMwMWUxZWEyZDQxYzcyNTE3Mi4uN2YyODcyZGY0OWUwZDQwYWIwMjBj
ZDk4ODRkZWQwMDMwOGYxYTJhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2FnZW50cy9JbnNwZWN0b3JET01BZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9hZ2VudHMvSW5zcGVjdG9yRE9NQWdlbnQuaApAQCAtNzYsMTQgKzc2LDEyIEBAIGNsYXNzIFNo
YWRvd1Jvb3Q7CiAKIHN0cnVjdCBIaWdobGlnaHRDb25maWc7CiAKLXR5cGVkZWYgU3RyaW5nIEVy
cm9yU3RyaW5nOwotCiBjbGFzcyBJbnNwZWN0b3JET01BZ2VudCBmaW5hbCA6IHB1YmxpYyBJbnNw
ZWN0b3JBZ2VudEJhc2UsIHB1YmxpYyBJbnNwZWN0b3I6OkRPTUJhY2tlbmREaXNwYXRjaGVySGFu
ZGxlciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW5zcGVjdG9yRE9NQWdlbnQpOwogICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIEluc3BlY3RvckRPTUFnZW50
KFBhZ2VBZ2VudENvbnRleHQmLCBJbnNwZWN0b3JPdmVybGF5Kik7Ci0gICAgfkluc3BlY3RvckRP
TUFnZW50KCkgb3ZlcnJpZGU7CisgICAgfkluc3BlY3RvckRPTUFnZW50KCk7CiAKICAgICBzdGF0
aWMgU3RyaW5nIHRvRXJyb3JTdHJpbmcoRXhjZXB0aW9uQ29kZSk7CiAgICAgc3RhdGljIFN0cmlu
ZyB0b0Vycm9yU3RyaW5nKEV4Y2VwdGlvbiYmKTsKQEAgLTEwMiw2MiArMTAwLDYyIEBAIHB1Ymxp
YzoKICAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIG5vZGVBc1NjcmlwdFZhbHVlKEpTQzo6SlNHbG9i
YWxPYmplY3QmLCBOb2RlKik7CiAKICAgICAvLyBJbnNwZWN0b3JBZ2VudEJhc2UKLSAgICB2b2lk
IGRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kUm91dGVyKiwg
SW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlciopIG92ZXJyaWRlOwotICAgIHZvaWQgd2lsbERl
c3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKSBvdmVy
cmlkZTsKKyAgICB2b2lkIGRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkZy
b250ZW5kUm91dGVyKiwgSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlciopOworICAgIHZvaWQg
d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29u
KTsKIAogICAgIC8vIERPTUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcgotICAgIHZvaWQgcXVlcnlT
ZWxlY3RvcihFcnJvclN0cmluZyYsIGludCBub2RlSWQsIGNvbnN0IFN0cmluZyYgc2VsZWN0b3Jz
LCBpbnQqIGVsZW1lbnRJZCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBxdWVyeVNlbGVjdG9yQWxsKEVy
cm9yU3RyaW5nJiwgaW50IG5vZGVJZCwgY29uc3QgU3RyaW5nJiBzZWxlY3RvcnMsIFJlZlB0cjxK
U09OOjpBcnJheU9mPGludD4+JiByZXN1bHQpIG92ZXJyaWRlOwotICAgIHZvaWQgZ2V0RG9jdW1l
bnQoRXJyb3JTdHJpbmcmLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlPiYg
cm9vdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZXF1ZXN0Q2hpbGROb2RlcyhFcnJvclN0cmluZyYs
IGludCBub2RlSWQsIGNvbnN0IGludCogZGVwdGgpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0QXR0
cmlidXRlVmFsdWUoRXJyb3JTdHJpbmcmLCBpbnQgZWxlbWVudElkLCBjb25zdCBTdHJpbmcmIG5h
bWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0QXR0cmlidXRl
c0FzVGV4dChFcnJvclN0cmluZyYsIGludCBlbGVtZW50SWQsIGNvbnN0IFN0cmluZyYgdGV4dCwg
Y29uc3QgU3RyaW5nKiBuYW1lKSBvdmVycmlkZTsKLSAgICB2b2lkIHJlbW92ZUF0dHJpYnV0ZShF
cnJvclN0cmluZyYsIGludCBlbGVtZW50SWQsIGNvbnN0IFN0cmluZyYgbmFtZSkgb3ZlcnJpZGU7
Ci0gICAgdm9pZCByZW1vdmVOb2RlKEVycm9yU3RyaW5nJiwgaW50IG5vZGVJZCkgb3ZlcnJpZGU7
Ci0gICAgdm9pZCBzZXROb2RlTmFtZShFcnJvclN0cmluZyYsIGludCBub2RlSWQsIGNvbnN0IFN0
cmluZyYgbmFtZSwgaW50KiBuZXdJZCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBnZXRPdXRlckhUTUwo
RXJyb3JTdHJpbmcmLCBpbnQgbm9kZUlkLCBXVEY6OlN0cmluZyogb3V0ZXJIVE1MKSBvdmVycmlk
ZTsKLSAgICB2b2lkIHNldE91dGVySFRNTChFcnJvclN0cmluZyYsIGludCBub2RlSWQsIGNvbnN0
IFN0cmluZyYgb3V0ZXJIVE1MKSBvdmVycmlkZTsKLSAgICB2b2lkIGluc2VydEFkamFjZW50SFRN
TChFcnJvclN0cmluZyYsIGludCBub2RlSWQsIGNvbnN0IFN0cmluZyYgcG9zaXRpb24sIGNvbnN0
IFN0cmluZyYgaHRtbCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXROb2RlVmFsdWUoRXJyb3JTdHJp
bmcmLCBpbnQgbm9kZUlkLCBjb25zdCBTdHJpbmcmIHZhbHVlKSBvdmVycmlkZTsKLSAgICB2b2lk
IGdldFN1cHBvcnRlZEV2ZW50TmFtZXMoRXJyb3JTdHJpbmcmLCBSZWZQdHI8SlNPTjo6QXJyYXlP
ZjxTdHJpbmc+PiYgZXZlbnROYW1lcykgb3ZlcnJpZGU7CisgICAgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6RXJyb3JTdHJpbmdPcjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZD4gcXVlcnlT
ZWxlY3RvcihJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZCwgY29uc3QgU3RyaW5nJiBz
ZWxlY3Rvcik7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SlNP
Tjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZD4+PiBxdWVyeVNlbGVj
dG9yQWxsKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkLCBjb25zdCBTdHJpbmcmIHNl
bGVjdG9yKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+PiBnZXREb2N1bWVudCgpOworICAgIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gcmVxdWVzdENoaWxkTm9kZXMoSW5zcGVj
dG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQsIE9wdGlvbmFsPGludD4mJiBkZXB0aCk7CisgICAg
SW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzZXRBdHRyaWJ1dGVWYWx1
ZShJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBj
b25zdCBTdHJpbmcmIHZhbHVlKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmlu
Z09yPHZvaWQ+IHNldEF0dHJpYnV0ZXNBc1RleHQoSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpO
b2RlSWQsIGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgU3RyaW5nJiBuYW1lKTsKKyAgICBJbnNw
ZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHJlbW92ZUF0dHJpYnV0ZShJbnNw
ZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZCwgY29uc3QgU3RyaW5nJiBuYW1lKTsKKyAgICBJ
bnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHJlbW92ZU5vZGUoSW5zcGVj
dG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQ+IHNldE5vZGVOYW1l
KEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkLCBjb25zdCBTdHJpbmcmKTsKKyAgICBJ
bnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFN0cmluZz4gZ2V0T3V0ZXJIVE1MKElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29s
OjpFcnJvclN0cmluZ09yPHZvaWQ+IHNldE91dGVySFRNTChJbnNwZWN0b3I6OlByb3RvY29sOjpE
T006Ok5vZGVJZCwgY29uc3QgU3RyaW5nJik7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJy
b3JTdHJpbmdPcjx2b2lkPiBpbnNlcnRBZGphY2VudEhUTUwoSW5zcGVjdG9yOjpQcm90b2NvbDo6
RE9NOjpOb2RlSWQsIGNvbnN0IFN0cmluZyYgcG9zaXRpb24sIGNvbnN0IFN0cmluZyYgaHRtbCk7
CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzZXROb2RlVmFs
dWUoSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQsIGNvbnN0IFN0cmluZyYpOworICAg
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEpTT046OkFycmF5T2Y8U3Ry
aW5nPj4+IGdldFN1cHBvcnRlZEV2ZW50TmFtZXMoKTsKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FM
VEVSTkFURV9ESVNQQVRDSEVSUykKLSAgICB2b2lkIGdldERhdGFCaW5kaW5nc0Zvck5vZGUoRXJy
b3JTdHJpbmcmLCBpbnQgbm9kZUlkLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpET006OkRhdGFCaW5kaW5nPj4mIGRhdGFBcnJheSkgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBnZXRBc3NvY2lhdGVkRGF0YUZvck5vZGUoRXJyb3JTdHJpbmcmLCBpbnQgbm9kZUlkLCBPcHRp
b25hbDxTdHJpbmc+JiBhc3NvY2lhdGVkRGF0YSkgb3ZlcnJpZGU7CisgICAgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpET006OkRhdGFCaW5kaW5nPj4+IGdldERhdGFCaW5kaW5nc0Zvck5vZGUoSW5zcGVjdG9y
OjpQcm90b2NvbDo6RE9NOjpOb2RlSWQpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8U3RyaW5nPiBnZXRBc3NvY2lhdGVkRGF0YUZvck5vZGUoSW5zcGVjdG9yOjpQcm90
b2NvbDo6RE9NOjpOb2RlSWQpOwogI2VuZGlmCi0gICAgdm9pZCBnZXRFdmVudExpc3RlbmVyc0Zv
ck5vZGUoRXJyb3JTdHJpbmcmLCBpbnQgbm9kZUlkLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpET006OkV2ZW50TGlzdGVuZXI+PiYgbGlzdGVuZXJzQXJyYXkpIG92
ZXJyaWRlOwotICAgIHZvaWQgc2V0RXZlbnRMaXN0ZW5lckRpc2FibGVkKEVycm9yU3RyaW5nJiwg
aW50IGV2ZW50TGlzdGVuZXJJZCwgYm9vbCBkaXNhYmxlZCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBz
ZXRCcmVha3BvaW50Rm9yRXZlbnRMaXN0ZW5lcihFcnJvclN0cmluZyYsIGludCBldmVudExpc3Rl
bmVySWQsIGNvbnN0IEpTT046Ok9iamVjdCogb3B0aW9ucykgZmluYWw7Ci0gICAgdm9pZCByZW1v
dmVCcmVha3BvaW50Rm9yRXZlbnRMaXN0ZW5lcihFcnJvclN0cmluZyYsIGludCBldmVudExpc3Rl
bmVySWQpIG92ZXJyaWRlOwotICAgIHZvaWQgZ2V0QWNjZXNzaWJpbGl0eVByb3BlcnRpZXNGb3JO
b2RlKEVycm9yU3RyaW5nJiwgaW50IG5vZGVJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM+JiBheFByb3BlcnRpZXMpIG92ZXJyaWRlOwot
ICAgIHZvaWQgcGVyZm9ybVNlYXJjaChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgcXVlcnks
IGNvbnN0IEpTT046OkFycmF5KiBub2RlSWRzLCBjb25zdCBib29sKiBjYXNlU2Vuc2l0aXZlLCBT
dHJpbmcqIHNlYXJjaElkLCBpbnQqIHJlc3VsdENvdW50KSBvdmVycmlkZTsKLSAgICB2b2lkIGdl
dFNlYXJjaFJlc3VsdHMoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHNlYXJjaElkLCBpbnQg
ZnJvbUluZGV4LCBpbnQgdG9JbmRleCwgUmVmUHRyPEpTT046OkFycmF5T2Y8aW50Pj4mKSBvdmVy
cmlkZTsKLSAgICB2b2lkIGRpc2NhcmRTZWFyY2hSZXN1bHRzKEVycm9yU3RyaW5nJiwgY29uc3Qg
U3RyaW5nJiBzZWFyY2hJZCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZXNvbHZlTm9kZShFcnJvclN0
cmluZyYsIGludCBub2RlSWQsIGNvbnN0IFN0cmluZyogb2JqZWN0R3JvdXAsIFJlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiByZXN1bHQpIG92ZXJyaWRl
OwotICAgIHZvaWQgZ2V0QXR0cmlidXRlcyhFcnJvclN0cmluZyYsIGludCBub2RlSWQsIFJlZlB0
cjxKU09OOjpBcnJheU9mPFN0cmluZz4+JiByZXN1bHQpIG92ZXJyaWRlOworICAgIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6RE9NOjpFdmVudExpc3RlbmVyPj4+IGdldEV2ZW50TGlzdGVuZXJzRm9yTm9kZShJ
bnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzZXRFdmVudExpc3RlbmVyRGlzYWJsZWQoSW5zcGVjdG9y
OjpQcm90b2NvbDo6RE9NOjpFdmVudExpc3RlbmVySWQsIGJvb2wpOworICAgIEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc2V0QnJlYWtwb2ludEZvckV2ZW50TGlzdGVu
ZXIoSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpFdmVudExpc3RlbmVySWQsIFJlZlB0cjxKU09O
OjpPYmplY3Q+JiYgb3B0aW9ucyk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJp
bmdPcjx2b2lkPiByZW1vdmVCcmVha3BvaW50Rm9yRXZlbnRMaXN0ZW5lcihJbnNwZWN0b3I6OlBy
b3RvY29sOjpET006OkV2ZW50TGlzdGVuZXJJZCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6
RXJyb3JTdHJpbmdPcjxSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5
UHJvcGVydGllcz4+IGdldEFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzRm9yTm9kZShJbnNwZWN0b3I6
OlByb3RvY29sOjpET006Ok5vZGVJZCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JT
dHJpbmdPcjxzdGQ6OnR1cGxlPFN0cmluZyAvKiBzZWFyY2hJZCAqLywgaW50IC8qIHJlc3VsdENv
dW50ICovPj4gcGVyZm9ybVNlYXJjaChjb25zdCBTdHJpbmcmIHF1ZXJ5LCBSZWZQdHI8SlNPTjo6
QXJyYXk+JiYgbm9kZUlkcywgT3B0aW9uYWw8Ym9vbD4mJiBjYXNlU2Vuc2l0aXZlKTsKKyAgICBJ
bnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkPj4+IGdldFNlYXJjaFJlc3VsdHMoY29uc3QgU3Ry
aW5nJiBzZWFyY2hJZCwgaW50IGZyb21JbmRleCwgaW50IHRvSW5kZXgpOworICAgIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZGlzY2FyZFNlYXJjaFJlc3VsdHMoY29u
c3QgU3RyaW5nJiBzZWFyY2hJZCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJp
bmdPcjxSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0Pj4gcmVz
b2x2ZU5vZGUoSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQsIGNvbnN0IFN0cmluZyYg
b2JqZWN0R3JvdXApOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVm
PEpTT046OkFycmF5T2Y8U3RyaW5nPj4+IGdldEF0dHJpYnV0ZXMoSW5zcGVjdG9yOjpQcm90b2Nv
bDo6RE9NOjpOb2RlSWQpOwogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgdm9pZCBzZXRJ
bnNwZWN0TW9kZUVuYWJsZWQoRXJyb3JTdHJpbmcmLCBib29sIGVuYWJsZWQsIGNvbnN0IEpTT046
Ok9iamVjdCogaGlnaGxpZ2h0Q29uZmlnKSBvdmVycmlkZTsKKyAgICBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHNldEluc3BlY3RNb2RlRW5hYmxlZChib29sLCBSZWZQ
dHI8SlNPTjo6T2JqZWN0PiYmIGhpZ2hsaWdodENvbmZpZyk7CiAjZWxzZQotICAgIHZvaWQgc2V0
SW5zcGVjdE1vZGVFbmFibGVkKEVycm9yU3RyaW5nJiwgYm9vbCBlbmFibGVkLCBjb25zdCBKU09O
OjpPYmplY3QqIGhpZ2hsaWdodENvbmZpZywgY29uc3QgYm9vbCogc2hvd1J1bGVycykgb3ZlcnJp
ZGU7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzZXRJbnNw
ZWN0TW9kZUVuYWJsZWQoYm9vbCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBoaWdobGlnaHRDb25m
aWcsIE9wdGlvbmFsPGJvb2w+JiYgc2hvd1J1bGVycyk7CiAjZW5kaWYKLSAgICB2b2lkIHJlcXVl
c3ROb2RlKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBvYmplY3RJZCwgaW50KiBub2RlSWQp
IG92ZXJyaWRlOwotICAgIHZvaWQgcHVzaE5vZGVCeVBhdGhUb0Zyb250ZW5kKEVycm9yU3RyaW5n
JiwgY29uc3QgU3RyaW5nJiBwYXRoLCBpbnQqIG5vZGVJZCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBo
aWRlSGlnaGxpZ2h0KEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBoaWdobGlnaHRS
ZWN0KEVycm9yU3RyaW5nJiwgaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGNv
bnN0IEpTT046Ok9iamVjdCogY29sb3IsIGNvbnN0IEpTT046Ok9iamVjdCogb3V0bGluZUNvbG9y
LCBjb25zdCBib29sKiB1c2VQYWdlQ29vcmRpbmF0ZXMpIG92ZXJyaWRlOwotICAgIHZvaWQgaGln
aGxpZ2h0UXVhZChFcnJvclN0cmluZyYsIGNvbnN0IEpTT046OkFycmF5JiBxdWFkLCBjb25zdCBK
U09OOjpPYmplY3QqIGNvbG9yLCBjb25zdCBKU09OOjpPYmplY3QqIG91dGxpbmVDb2xvciwgY29u
c3QgYm9vbCogdXNlUGFnZUNvb3JkaW5hdGVzKSBvdmVycmlkZTsKLSAgICB2b2lkIGhpZ2hsaWdo
dFNlbGVjdG9yKEVycm9yU3RyaW5nJiwgY29uc3QgSlNPTjo6T2JqZWN0JiBoaWdobGlnaHRDb25m
aWcsIGNvbnN0IFN0cmluZyYgc2VsZWN0b3JTdHJpbmcsIGNvbnN0IFN0cmluZyogZnJhbWVJZCkg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBoaWdobGlnaHROb2RlKEVycm9yU3RyaW5nJiwgY29uc3QgSlNP
Tjo6T2JqZWN0JiBoaWdobGlnaHRDb25maWcsIGNvbnN0IGludCogbm9kZUlkLCBjb25zdCBTdHJp
bmcqIG9iamVjdElkKSBvdmVycmlkZTsKLSAgICB2b2lkIGhpZ2hsaWdodE5vZGVMaXN0KEVycm9y
U3RyaW5nJiwgY29uc3QgSlNPTjo6QXJyYXkmIG5vZGVJZHMsIGNvbnN0IEpTT046Ok9iamVjdCYg
aGlnaGxpZ2h0Q29uZmlnKSBvdmVycmlkZTsKLSAgICB2b2lkIGhpZ2hsaWdodEZyYW1lKEVycm9y
U3RyaW5nJiwgY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBjb25zdCBKU09OOjpPYmplY3QqIGNvbG9y
LCBjb25zdCBKU09OOjpPYmplY3QqIG91dGxpbmVDb2xvcikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBt
b3ZlVG8oRXJyb3JTdHJpbmcmLCBpbnQgbm9kZUlkLCBpbnQgdGFyZ2V0Tm9kZUlkLCBjb25zdCBp
bnQqIGFuY2hvck5vZGVJZCwgaW50KiBuZXdOb2RlSWQpIG92ZXJyaWRlOwotICAgIHZvaWQgdW5k
byhFcnJvclN0cmluZyYpIG92ZXJyaWRlOwotICAgIHZvaWQgcmVkbyhFcnJvclN0cmluZyYpIG92
ZXJyaWRlOwotICAgIHZvaWQgbWFya1VuZG9hYmxlU3RhdGUoRXJyb3JTdHJpbmcmKSBvdmVycmlk
ZTsKLSAgICB2b2lkIGZvY3VzKEVycm9yU3RyaW5nJiwgaW50IG5vZGVJZCkgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCBzZXRJbnNwZWN0ZWROb2RlKEVycm9yU3RyaW5nJiwgaW50IG5vZGVJZCkgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCBzZXRBbGxvd0VkaXRpbmdVc2VyQWdlbnRTaGFkb3dUcmVlcyhFcnJvclN0
cmluZyYsIGJvb2wgYWxsb3cpIGZpbmFsOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQ+IHJlcXVlc3ROb2RlKGNv
bnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdElkJik7CisgICAg
SW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxJbnNwZWN0b3I6OlByb3RvY29sOjpE
T006Ok5vZGVJZD4gcHVzaE5vZGVCeVBhdGhUb0Zyb250ZW5kKGNvbnN0IFN0cmluZyYgcGF0aCk7
CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBoaWRlSGlnaGxp
Z2h0KCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBoaWdo
bGlnaHRSZWN0KGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBSZWZQdHI8SlNP
Tjo6T2JqZWN0PiYmIGNvbG9yLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIG91dGxpbmVDb2xvciwg
T3B0aW9uYWw8Ym9vbD4mJiB1c2VQYWdlQ29vcmRpbmF0ZXMpOworICAgIEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gaGlnaGxpZ2h0UXVhZChSZWY8SlNPTjo6QXJyYXk+
JiYgcXVhZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBjb2xvciwgUmVmUHRyPEpTT046Ok9iamVj
dD4mJiBvdXRsaW5lQ29sb3IsIE9wdGlvbmFsPGJvb2w+JiYgdXNlUGFnZUNvb3JkaW5hdGVzKTsK
KyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGhpZ2hsaWdodFNl
bGVjdG9yKFJlZjxKU09OOjpPYmplY3Q+JiYgaGlnaGxpZ2h0Q29uZmlnLCBjb25zdCBTdHJpbmcm
IHNlbGVjdG9yU3RyaW5nLCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpGcmFt
ZUlkJik7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBoaWdo
bGlnaHROb2RlKFJlZjxKU09OOjpPYmplY3Q+JiYgaGlnaGxpZ2h0Q29uZmlnLCBPcHRpb25hbDxJ
bnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZD4mJiwgY29uc3QgSW5zcGVjdG9yOjpQcm90
b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0SWQmKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29s
OjpFcnJvclN0cmluZ09yPHZvaWQ+IGhpZ2hsaWdodE5vZGVMaXN0KFJlZjxKU09OOjpBcnJheT4m
JiBub2RlSWRzLCBSZWY8SlNPTjo6T2JqZWN0PiYmIGhpZ2hsaWdodENvbmZpZyk7CisgICAgSW5z
cGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBoaWdobGlnaHRGcmFtZShjb25z
dCBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpGcmFtZUlkJiwgUmVmUHRyPEpTT046Ok9i
amVjdD4mJiBjb2xvciwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBvdXRsaW5lQ29sb3IpOworICAg
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8SW5zcGVjdG9yOjpQcm90b2NvbDo6
RE9NOjpOb2RlSWQ+IG1vdmVUbyhJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZCBub2Rl
SWQsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkIHRhcmdldE5vZGVJZCwgT3B0aW9u
YWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQ+JiYgaW5zZXJ0QmVmb3JlTm9kZUlk
KTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHVuZG8oKTsK
KyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHJlZG8oKTsKKyAg
ICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IG1hcmtVbmRvYWJsZVN0
YXRlKCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBmb2N1
cyhJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZCk7CisgICAgSW5zcGVjdG9yOjpQcm90
b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzZXRJbnNwZWN0ZWROb2RlKEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRPTTo6Tm9kZUlkKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmlu
Z09yPHZvaWQ+IHNldEFsbG93RWRpdGluZ1VzZXJBZ2VudFNoYWRvd1RyZWVzKGJvb2wpOwogCiAg
ICAgLy8gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uCi0gICAgaW50IGlkZW50aWZpZXJGb3JOb2Rl
KE5vZGUmKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZCBpZGVudGlmaWVy
Rm9yTm9kZShOb2RlJik7CiAgICAgdm9pZCBhZGRFdmVudExpc3RlbmVyc1RvTm9kZShOb2RlJik7
CiAgICAgdm9pZCBkaWRJbnNlcnRET01Ob2RlKE5vZGUmKTsKICAgICB2b2lkIGRpZFJlbW92ZURP
TU5vZGUoTm9kZSYpOwpAQCAtMTg1LDEyICsxODMsMTIgQEAgcHVibGljOgogCiAgICAgdm9pZCBz
dHlsZUF0dHJpYnV0ZUludmFsaWRhdGVkKGNvbnN0IFZlY3RvcjxFbGVtZW50Kj4mIGVsZW1lbnRz
KTsKIAotICAgIGludCBwdXNoTm9kZVRvRnJvbnRlbmQoTm9kZSopOwotICAgIGludCBwdXNoTm9k
ZVRvRnJvbnRlbmQoRXJyb3JTdHJpbmcmLCBpbnQgZG9jdW1lbnROb2RlSWQsIE5vZGUqKTsKLSAg
ICBpbnQgcHVzaE5vZGVQYXRoVG9Gcm9udGVuZChOb2RlKik7Ci0gICAgaW50IHB1c2hOb2RlUGF0
aFRvRnJvbnRlbmQoRXJyb3JTdHJpbmcsIE5vZGUqKTsKLSAgICBOb2RlKiBub2RlRm9ySWQoaW50
IG5vZGVJZCk7Ci0gICAgaW50IGJvdW5kTm9kZUlkKGNvbnN0IE5vZGUqKTsKKyAgICBJbnNwZWN0
b3I6OlByb3RvY29sOjpET006Ok5vZGVJZCBwdXNoTm9kZVRvRnJvbnRlbmQoTm9kZSopOworICAg
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkIHB1c2hOb2RlVG9Gcm9udGVuZChJbnNw
ZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZyYsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6
Tm9kZUlkIGRvY3VtZW50Tm9kZUlkLCBOb2RlKik7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6
RE9NOjpOb2RlSWQgcHVzaE5vZGVQYXRoVG9Gcm9udGVuZChOb2RlKik7CisgICAgSW5zcGVjdG9y
OjpQcm90b2NvbDo6RE9NOjpOb2RlSWQgcHVzaE5vZGVQYXRoVG9Gcm9udGVuZChJbnNwZWN0b3I6
OlByb3RvY29sOjpFcnJvclN0cmluZywgTm9kZSopOworICAgIE5vZGUqIG5vZGVGb3JJZChJbnNw
ZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6
RE9NOjpOb2RlSWQgYm91bmROb2RlSWQoY29uc3QgTm9kZSopOwogCiAgICAgUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4gcmVzb2x2ZU5vZGUoTm9kZSos
IGNvbnN0IFN0cmluZyYgb2JqZWN0R3JvdXApOwogICAgIGJvb2wgaGFuZGxlTW91c2VQcmVzcygp
OwpAQCAtMjAyLDEyICsyMDAsMTIgQEAgcHVibGljOgogICAgIFZlY3RvcjxEb2N1bWVudCo+IGRv
Y3VtZW50cygpOwogICAgIHZvaWQgcmVzZXQoKTsKIAotICAgIE5vZGUqIGFzc2VydE5vZGUoRXJy
b3JTdHJpbmcmLCBpbnQgbm9kZUlkKTsKLSAgICBFbGVtZW50KiBhc3NlcnRFbGVtZW50KEVycm9y
U3RyaW5nJiwgaW50IG5vZGVJZCk7Ci0gICAgRG9jdW1lbnQqIGFzc2VydERvY3VtZW50KEVycm9y
U3RyaW5nJiwgaW50IG5vZGVJZCk7CisgICAgTm9kZSogYXNzZXJ0Tm9kZShJbnNwZWN0b3I6OlBy
b3RvY29sOjpFcnJvclN0cmluZyYsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkKTsK
KyAgICBFbGVtZW50KiBhc3NlcnRFbGVtZW50KEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3Ry
aW5nJiwgSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQpOworICAgIERvY3VtZW50KiBh
c3NlcnREb2N1bWVudChJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZyYsIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkKTsKIAogICAgIFJlZlB0cjxKU0M6OkJyZWFrcG9pbnQ+
IGJyZWFrcG9pbnRGb3JFdmVudExpc3RlbmVyKEV2ZW50VGFyZ2V0JiwgY29uc3QgQXRvbVN0cmlu
ZyYgZXZlbnRUeXBlLCBFdmVudExpc3RlbmVyJiwgYm9vbCBjYXB0dXJlKTsKLSAgICBpbnQgaWRG
b3JFdmVudExpc3RlbmVyKEV2ZW50VGFyZ2V0JiwgY29uc3QgQXRvbVN0cmluZyYgZXZlbnRUeXBl
LCBFdmVudExpc3RlbmVyJiwgYm9vbCBjYXB0dXJlKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29s
OjpET006OkV2ZW50TGlzdGVuZXJJZCBpZEZvckV2ZW50TGlzdGVuZXIoRXZlbnRUYXJnZXQmLCBj
b25zdCBBdG9tU3RyaW5nJiBldmVudFR5cGUsIEV2ZW50TGlzdGVuZXImLCBib29sIGNhcHR1cmUp
OwogCiBwcml2YXRlOgogI2lmIEVOQUJMRShWSURFTykKQEAgLTIxNSwzMyArMjEzLDMzIEBAIHBy
aXZhdGU6CiAjZW5kaWYKIAogICAgIHZvaWQgaGlnaGxpZ2h0TW91c2VkT3Zlck5vZGUoKTsKLSAg
ICB2b2lkIHNldFNlYXJjaGluZ0Zvck5vZGUoRXJyb3JTdHJpbmcmLCBib29sIGVuYWJsZWQsIGNv
bnN0IEpTT046Ok9iamVjdCogaGlnaGxpZ2h0Q29uZmlnLCBib29sIHNob3dSdWxlcnMpOwotICAg
IHN0ZDo6dW5pcXVlX3B0cjxIaWdobGlnaHRDb25maWc+IGhpZ2hsaWdodENvbmZpZ0Zyb21JbnNw
ZWN0b3JPYmplY3QoRXJyb3JTdHJpbmcmLCBjb25zdCBKU09OOjpPYmplY3QqIGhpZ2hsaWdodElu
c3BlY3Rvck9iamVjdCk7CisgICAgdm9pZCBzZXRTZWFyY2hpbmdGb3JOb2RlKEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkVycm9yU3RyaW5nJiwgYm9vbCBlbmFibGVkLCBSZWZQdHI8SlNPTjo6T2JqZWN0
PiYmIGhpZ2hsaWdodENvbmZpZywgYm9vbCBzaG93UnVsZXJzKTsKKyAgICBzdGQ6OnVuaXF1ZV9w
dHI8SGlnaGxpZ2h0Q29uZmlnPiBoaWdobGlnaHRDb25maWdGcm9tSW5zcGVjdG9yT2JqZWN0KElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nJiwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBo
aWdobGlnaHRJbnNwZWN0b3JPYmplY3QpOwogCiAgICAgLy8gTm9kZS1yZWxhdGVkIG1ldGhvZHMu
Ci0gICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxOb2RlPiwgaW50PiBOb2RlVG9JZE1hcDsKLSAg
ICBpbnQgYmluZChOb2RlKiwgTm9kZVRvSWRNYXAqKTsKKyAgICB0eXBlZGVmIEhhc2hNYXA8UmVm
UHRyPE5vZGU+LCBJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZD4gTm9kZVRvSWRNYXA7
CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQgYmluZChOb2RlKiwgTm9kZVRv
SWRNYXAqKTsKICAgICB2b2lkIHVuYmluZChOb2RlKiwgTm9kZVRvSWRNYXAqKTsKIAotICAgIE5v
ZGUqIGFzc2VydEVkaXRhYmxlTm9kZShFcnJvclN0cmluZyYsIGludCBub2RlSWQpOwotICAgIEVs
ZW1lbnQqIGFzc2VydEVkaXRhYmxlRWxlbWVudChFcnJvclN0cmluZyYsIGludCBub2RlSWQpOwor
ICAgIE5vZGUqIGFzc2VydEVkaXRhYmxlTm9kZShJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0
cmluZyYsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkKTsKKyAgICBFbGVtZW50KiBh
c3NlcnRFZGl0YWJsZUVsZW1lbnQoSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBJ
bnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZCk7CiAKLSAgICB2b2lkIHB1c2hDaGlsZE5v
ZGVzVG9Gcm9udGVuZChpbnQgbm9kZUlkLCBpbnQgZGVwdGggPSAxKTsKKyAgICB2b2lkIHB1c2hD
aGlsZE5vZGVzVG9Gcm9udGVuZChJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZCwgaW50
IGRlcHRoID0gMSk7CiAKICAgICBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlPiBi
dWlsZE9iamVjdEZvck5vZGUoTm9kZSosIGludCBkZXB0aCwgTm9kZVRvSWRNYXAqKTsKICAgICBS
ZWY8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiBidWlsZEFycmF5Rm9yRWxlbWVudEF0dHJpYnV0ZXMo
RWxlbWVudCopOwogICAgIFJlZjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRP
TTo6Tm9kZT4+IGJ1aWxkQXJyYXlGb3JDb250YWluZXJDaGlsZHJlbihOb2RlKiBjb250YWluZXIs
IGludCBkZXB0aCwgTm9kZVRvSWRNYXAqIG5vZGVzTWFwKTsKICAgICBSZWZQdHI8SlNPTjo6QXJy
YXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+PiBidWlsZEFycmF5Rm9yUHNldWRv
RWxlbWVudHMoY29uc3QgRWxlbWVudCYsIE5vZGVUb0lkTWFwKiBub2Rlc01hcCk7Ci0gICAgUmVm
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6RXZlbnRMaXN0ZW5lcj4gYnVpbGRPYmplY3RGb3JF
dmVudExpc3RlbmVyKGNvbnN0IFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyJiwgaW50IGlkZW50aWZp
ZXIsIEV2ZW50VGFyZ2V0JiwgY29uc3QgQXRvbVN0cmluZyYgZXZlbnRUeXBlLCBib29sIGRpc2Fi
bGVkLCBjb25zdCBSZWZQdHI8SlNDOjpCcmVha3BvaW50PiYpOwotICAgIFJlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzPiBidWlsZE9iamVjdEZv
ckFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzKE5vZGUqKTsKLSAgICB2b2lkIHByb2Nlc3NBY2Nlc3Np
YmlsaXR5Q2hpbGRyZW4oQVhDb3JlT2JqZWN0JiwgSlNPTjo6QXJyYXlPZjxpbnQ+Jik7CisgICAg
UmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6RXZlbnRMaXN0ZW5lcj4gYnVpbGRPYmplY3RG
b3JFdmVudExpc3RlbmVyKGNvbnN0IFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyJiwgSW5zcGVjdG9y
OjpQcm90b2NvbDo6RE9NOjpFdmVudExpc3RlbmVySWQgaWRlbnRpZmllciwgRXZlbnRUYXJnZXQm
LCBjb25zdCBBdG9tU3RyaW5nJiBldmVudFR5cGUsIGJvb2wgZGlzYWJsZWQsIGNvbnN0IFJlZlB0
cjxKU0M6OkJyZWFrcG9pbnQ+Jik7CisgICAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6
QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM+IGJ1aWxkT2JqZWN0Rm9yQWNjZXNzaWJpbGl0eVByb3Bl
cnRpZXMoTm9kZSYpOworICAgIHZvaWQgcHJvY2Vzc0FjY2Vzc2liaWxpdHlDaGlsZHJlbihBWENv
cmVPYmplY3QmLCBKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlk
PiYpOwogICAgIAogICAgIE5vZGUqIG5vZGVGb3JQYXRoKGNvbnN0IFN0cmluZyYgcGF0aCk7Ci0g
ICAgTm9kZSogbm9kZUZvck9iamVjdElkKGNvbnN0IFN0cmluZyYgb2JqZWN0SWQpOworICAgIE5v
ZGUqIG5vZGVGb3JPYmplY3RJZChjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpS
ZW1vdGVPYmplY3RJZCYpOwogCiAgICAgdm9pZCBkaXNjYXJkQmluZGluZ3MoKTsKIAotICAgIHZv
aWQgaW5uZXJIaWdobGlnaHRRdWFkKHN0ZDo6dW5pcXVlX3B0cjxGbG9hdFF1YWQ+LCBjb25zdCBK
U09OOjpPYmplY3QqIGNvbG9yLCBjb25zdCBKU09OOjpPYmplY3QqIG91dGxpbmVDb2xvciwgY29u
c3QgYm9vbCogdXNlUGFnZUNvb3JkaW5hdGVzKTsKKyAgICB2b2lkIGlubmVySGlnaGxpZ2h0UXVh
ZChzdGQ6OnVuaXF1ZV9wdHI8RmxvYXRRdWFkPiwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBjb2xv
ciwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBvdXRsaW5lQ29sb3IsIE9wdGlvbmFsPGJvb2w+JiYg
dXNlUGFnZUNvb3JkaW5hdGVzKTsKIAogICAgIEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHRNYW5h
Z2VyJiBtX2luamVjdGVkU2NyaXB0TWFuYWdlcjsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW5zcGVj
dG9yOjpET01Gcm9udGVuZERpc3BhdGNoZXI+IG1fZnJvbnRlbmREaXNwYXRjaGVyOwpAQCAtMjUx
LDEwICsyNDksMTAgQEAgcHJpdmF0ZToKICAgICBOb2RlVG9JZE1hcCBtX2RvY3VtZW50Tm9kZVRv
SWRNYXA7CiAgICAgLy8gT3ducyBub2RlIG1hcHBpbmdzIGZvciBkYW5nbGluZyBub2Rlcy4KICAg
ICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPE5vZGVUb0lkTWFwPj4gbV9kYW5nbGluZ05vZGVUb0lk
TWFwczsKLSAgICBIYXNoTWFwPGludCwgTm9kZSo+IG1faWRUb05vZGU7Ci0gICAgSGFzaE1hcDxp
bnQsIE5vZGVUb0lkTWFwKj4gbV9pZFRvTm9kZXNNYXA7Ci0gICAgSGFzaFNldDxpbnQ+IG1fY2hp
bGRyZW5SZXF1ZXN0ZWQ7Ci0gICAgaW50IG1fbGFzdE5vZGVJZCB7IDEgfTsKKyAgICBIYXNoTWFw
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkLCBOb2RlKj4gbV9pZFRvTm9kZTsKKyAg
ICBIYXNoTWFwPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkLCBOb2RlVG9JZE1hcCo+
IG1faWRUb05vZGVzTWFwOworICAgIEhhc2hTZXQ8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpO
b2RlSWQ+IG1fY2hpbGRyZW5SZXF1ZXN0ZWQ7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9N
OjpOb2RlSWQgbV9sYXN0Tm9kZUlkIHsgMSB9OwogICAgIFJlZlB0cjxEb2N1bWVudD4gbV9kb2N1
bWVudDsKICAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBWZWN0b3I8UmVmUHRyPE5vZGU+Pj4g
U2VhcmNoUmVzdWx0czsKICAgICBTZWFyY2hSZXN1bHRzIG1fc2VhcmNoUmVzdWx0czsKQEAgLTI4
NSw3ICsyODMsNyBAQCBwcml2YXRlOgogI2VuZGlmCiAKICAgICBzdHJ1Y3QgSW5zcGVjdG9yRXZl
bnRMaXN0ZW5lciB7Ci0gICAgICAgIGludCBpZGVudGlmaWVyIHsgMSB9OworICAgICAgICBJbnNw
ZWN0b3I6OlByb3RvY29sOjpET006OkV2ZW50TGlzdGVuZXJJZCBpZGVudGlmaWVyIHsgMSB9Owog
ICAgICAgICBSZWZQdHI8RXZlbnRUYXJnZXQ+IGV2ZW50VGFyZ2V0OwogICAgICAgICBSZWZQdHI8
RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcjsKICAgICAgICAgQXRvbVN0cmluZyBldmVudFR5
cGU7CkBAIC0yOTUsNyArMjkzLDcgQEAgcHJpdmF0ZToKIAogICAgICAgICBJbnNwZWN0b3JFdmVu
dExpc3RlbmVyKCkgeyB9CiAKLSAgICAgICAgSW5zcGVjdG9yRXZlbnRMaXN0ZW5lcihpbnQgaWRl
bnRpZmllciwgRXZlbnRUYXJnZXQmIHRhcmdldCwgY29uc3QgQXRvbVN0cmluZyYgdHlwZSwgRXZl
bnRMaXN0ZW5lciYgbGlzdGVuZXIsIGJvb2wgY2FwdHVyZSkKKyAgICAgICAgSW5zcGVjdG9yRXZl
bnRMaXN0ZW5lcihJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkV2ZW50TGlzdGVuZXJJZCBpZGVu
dGlmaWVyLCBFdmVudFRhcmdldCYgdGFyZ2V0LCBjb25zdCBBdG9tU3RyaW5nJiB0eXBlLCBFdmVu
dExpc3RlbmVyJiBsaXN0ZW5lciwgYm9vbCBjYXB0dXJlKQogICAgICAgICAgICAgOiBpZGVudGlm
aWVyKGlkZW50aWZpZXIpCiAgICAgICAgICAgICAsIGV2ZW50VGFyZ2V0KCZ0YXJnZXQpCiAgICAg
ICAgICAgICAsIGV2ZW50TGlzdGVuZXIoJmxpc3RlbmVyKQpAQCAtMzIxLDggKzMxOSw4IEBAIHBy
aXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEV2ZW50RmlyZWRDYWxsYmFjazsKIAogICAgIEhhc2hT
ZXQ8Y29uc3QgRXZlbnQqPiBtX2Rpc3BhdGNoZWRFdmVudHM7Ci0gICAgSGFzaE1hcDxpbnQsIElu
c3BlY3RvckV2ZW50TGlzdGVuZXI+IG1fZXZlbnRMaXN0ZW5lckVudHJpZXM7Ci0gICAgaW50IG1f
bGFzdEV2ZW50TGlzdGVuZXJJZCB7IDEgfTsKKyAgICBIYXNoTWFwPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRPTTo6RXZlbnRMaXN0ZW5lcklkLCBJbnNwZWN0b3JFdmVudExpc3RlbmVyPiBtX2V2ZW50
TGlzdGVuZXJFbnRyaWVzOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6RXZlbnRMaXN0
ZW5lcklkIG1fbGFzdEV2ZW50TGlzdGVuZXJJZCB7IDEgfTsKIAogICAgIGJvb2wgbV9zZWFyY2hp
bmdGb3JOb2RlIHsgZmFsc2UgfTsKICAgICBib29sIG1fc3VwcHJlc3NBdHRyaWJ1dGVNb2RpZmll
ZEV2ZW50IHsgZmFsc2UgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9h
Z2VudHMvSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQuY3BwCmluZGV4IDA3OWExMTY4
NmU0OThiODQ3OTk1NTljZjNjZDhhZjJmN2MwOTE4MTcuLmMzMmU1YTM5MTRlNzlmMzBiYzE0ZTY4
ZGQ2Y2ZiZDMxYjAwNTQ5ZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9h
Z2VudHMvSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50LmNwcApAQCAtMTI4LDEw
OSArMTI4LDk0IEBAIHZvaWQgSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudDo6bWFpbkZyYW1lTmF2
aWdhdGVkKCkKICAgICAgICAgbV9wYXVzZU9uQWxsVGltZW91dHNCcmVha3BvaW50LT5yZXNldEhp
dENvdW50KCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudDo6c2V0RXZlbnRC
cmVha3BvaW50KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBicmVha3Bv
aW50VHlwZVN0cmluZywgY29uc3QgU3RyaW5nKiBldmVudE5hbWUsIGNvbnN0IEpTT046Ok9iamVj
dCogb3B0aW9uc1BheWxvYWQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0
b3JET01EZWJ1Z2dlckFnZW50OjpzZXRFdmVudEJyZWFrcG9pbnQoUHJvdG9jb2w6OkRPTURlYnVn
Z2VyOjpFdmVudEJyZWFrcG9pbnRUeXBlIGJyZWFrcG9pbnRUeXBlLCBjb25zdCBTdHJpbmcmIGV2
ZW50TmFtZSwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBvcHRpb25zKQogewotICAgIGlmIChicmVh
a3BvaW50VHlwZVN0cmluZy5pc0VtcHR5KCkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiYnJl
YWtwb2ludFR5cGUgaXMgZW1wdHkiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgUHJv
dG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOwogCi0gICAgYXV0byBicmVha3BvaW50VHlw
ZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6Okluc3BlY3RvckhlbHBlcnM6OnBhcnNlRW51bVZhbHVl
RnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpET01EZWJ1Z2dlcjo6RXZlbnRCcmVha3Bv
aW50VHlwZT4oYnJlYWtwb2ludFR5cGVTdHJpbmcpOwotICAgIGlmICghYnJlYWtwb2ludFR5cGUp
IHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSBtYWtlU3RyaW5nKCJVbmtub3duIGJyZWFrcG9pbnRU
eXBlOiAiX3MsIGJyZWFrcG9pbnRUeXBlU3RyaW5nKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIGF1dG8gYnJlYWtwb2ludCA9IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRlYnVnZ2Vy
QnJlYWtwb2ludEZyb21QYXlsb2FkKGVycm9yU3RyaW5nLCBvcHRpb25zUGF5bG9hZCk7CisgICAg
YXV0byBicmVha3BvaW50ID0gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGVidWdnZXJCcmVha3Bv
aW50RnJvbVBheWxvYWQoZXJyb3JTdHJpbmcsIFdURk1vdmUob3B0aW9ucykpOwogICAgIGlmICgh
YnJlYWtwb2ludCkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0
ZWQoZXJyb3JTdHJpbmcpOwogCi0gICAgaWYgKGV2ZW50TmFtZSAmJiAhZXZlbnROYW1lLT5pc0Vt
cHR5KCkpIHsKLSAgICAgICAgaWYgKGJyZWFrcG9pbnRUeXBlLnZhbHVlKCkgPT0gSW5zcGVjdG9y
OjpQcm90b2NvbDo6RE9NRGVidWdnZXI6OkV2ZW50QnJlYWtwb2ludFR5cGU6Okxpc3RlbmVyKSB7
Ci0gICAgICAgICAgICBpZiAoIW1fbGlzdGVuZXJCcmVha3BvaW50cy5hZGQoKmV2ZW50TmFtZSwg
YnJlYWtwb2ludC5yZWxlYXNlTm9uTnVsbCgpKSkKLSAgICAgICAgICAgICAgICBlcnJvclN0cmlu
ZyA9ICJCcmVha3BvaW50IHdpdGggZXZlbnROYW1lIGFscmVhZHkgZXhpc3RzIl9zOwotICAgICAg
ICAgICAgcmV0dXJuOworICAgIGlmICghZXZlbnROYW1lLmlzRW1wdHkoKSkgeworICAgICAgICBp
ZiAoYnJlYWtwb2ludFR5cGUgPT0gUHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpFdmVudEJyZWFrcG9p
bnRUeXBlOjpMaXN0ZW5lcikgeworICAgICAgICAgICAgaWYgKCFtX2xpc3RlbmVyQnJlYWtwb2lu
dHMuYWRkKGV2ZW50TmFtZSwgYnJlYWtwb2ludC5yZWxlYXNlTm9uTnVsbCgpKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkJyZWFrcG9pbnQgd2l0aCBldmVudE5hbWUg
YWxyZWFkeSBleGlzdHMiX3MpOworICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAgICAgfQog
Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIlVuZXhwZWN0ZWQgZXZlbnROYW1lIl9zOwotICAgICAg
ICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiVW5leHBlY3RlZCBldmVu
dE5hbWUiX3MpOwogICAgIH0KIAotICAgIHN3aXRjaCAoYnJlYWtwb2ludFR5cGUudmFsdWUoKSkg
ewotICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NRGVidWdnZXI6OkV2ZW50QnJlYWtw
b2ludFR5cGU6OkFuaW1hdGlvbkZyYW1lOgotICAgICAgICBzZXRBbmltYXRpb25GcmFtZUJyZWFr
cG9pbnQoZXJyb3JTdHJpbmcsIFdURk1vdmUoYnJlYWtwb2ludCkpOwotICAgICAgICBicmVhazsK
KyAgICBzd2l0Y2ggKGJyZWFrcG9pbnRUeXBlKSB7CisgICAgY2FzZSBQcm90b2NvbDo6RE9NRGVi
dWdnZXI6OkV2ZW50QnJlYWtwb2ludFR5cGU6OkFuaW1hdGlvbkZyYW1lOgorICAgICAgICBpZiAo
IXNldEFuaW1hdGlvbkZyYW1lQnJlYWtwb2ludChlcnJvclN0cmluZywgV1RGTW92ZShicmVha3Bv
aW50KSkpCisgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwor
ICAgICAgICByZXR1cm4geyB9OwogCi0gICAgY2FzZSBJbnNwZWN0b3I6OlByb3RvY29sOjpET01E
ZWJ1Z2dlcjo6RXZlbnRCcmVha3BvaW50VHlwZTo6SW50ZXJ2YWw6Ci0gICAgICAgIGlmICghbV9w
YXVzZU9uQWxsSW50ZXJ2YWxzQnJlYWtwb2ludCkKLSAgICAgICAgICAgIG1fcGF1c2VPbkFsbElu
dGVydmFsc0JyZWFrcG9pbnQgPSBXVEZNb3ZlKGJyZWFrcG9pbnQpOwotICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBlcnJvclN0cmluZyA9ICJCcmVha3BvaW50IGZvciBJbnRlcnZhbCBhbHJlYWR5
IGV4aXN0cyJfczsKLSAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQcm90b2NvbDo6RE9NRGVidWdn
ZXI6OkV2ZW50QnJlYWtwb2ludFR5cGU6OkludGVydmFsOgorICAgICAgICBpZiAobV9wYXVzZU9u
QWxsSW50ZXJ2YWxzQnJlYWtwb2ludCkKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3Rl
ZCgiQnJlYWtwb2ludCBmb3IgSW50ZXJ2YWwgYWxyZWFkeSBleGlzdHMiX3MpOworICAgICAgICBt
X3BhdXNlT25BbGxJbnRlcnZhbHNCcmVha3BvaW50ID0gV1RGTW92ZShicmVha3BvaW50KTsKKyAg
ICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NRGVi
dWdnZXI6OkV2ZW50QnJlYWtwb2ludFR5cGU6Okxpc3RlbmVyOgotICAgICAgICBpZiAoIW1fcGF1
c2VPbkFsbExpc3RlbmVyc0JyZWFrcG9pbnQpCi0gICAgICAgICAgICBtX3BhdXNlT25BbGxMaXN0
ZW5lcnNCcmVha3BvaW50ID0gV1RGTW92ZShicmVha3BvaW50KTsKLSAgICAgICAgZWxzZQotICAg
ICAgICAgICAgZXJyb3JTdHJpbmcgPSAiQnJlYWtwb2ludCBmb3IgTGlzdGVuZXIgYWxyZWFkeSBl
eGlzdHMiX3M7Ci0gICAgICAgIGJyZWFrOworICAgIGNhc2UgUHJvdG9jb2w6OkRPTURlYnVnZ2Vy
OjpFdmVudEJyZWFrcG9pbnRUeXBlOjpMaXN0ZW5lcjoKKyAgICAgICAgaWYgKG1fcGF1c2VPbkFs
bExpc3RlbmVyc0JyZWFrcG9pbnQpCisgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQo
IkJyZWFrcG9pbnQgZm9yIExpc3RlbmVyIGFscmVhZHkgZXhpc3RzIl9zKTsKKyAgICAgICAgbV9w
YXVzZU9uQWxsTGlzdGVuZXJzQnJlYWtwb2ludCA9IFdURk1vdmUoYnJlYWtwb2ludCk7CisgICAg
ICAgIHJldHVybiB7IH07CiAKLSAgICBjYXNlIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTURlYnVn
Z2VyOjpFdmVudEJyZWFrcG9pbnRUeXBlOjpUaW1lb3V0OgotICAgICAgICBpZiAoIW1fcGF1c2VP
bkFsbFRpbWVvdXRzQnJlYWtwb2ludCkKLSAgICAgICAgICAgIG1fcGF1c2VPbkFsbFRpbWVvdXRz
QnJlYWtwb2ludCA9IFdURk1vdmUoYnJlYWtwb2ludCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIGVycm9yU3RyaW5nID0gIkJyZWFrcG9pbnQgZm9yIFRpbWVvdXQgYWxyZWFkeSBleGlzdHMi
X3M7Ci0gICAgICAgIGJyZWFrOworICAgIGNhc2UgUHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpFdmVu
dEJyZWFrcG9pbnRUeXBlOjpUaW1lb3V0OgorICAgICAgICBpZiAobV9wYXVzZU9uQWxsVGltZW91
dHNCcmVha3BvaW50KQorICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJCcmVha3Bv
aW50IGZvciBUaW1lb3V0IGFscmVhZHkgZXhpc3RzIl9zKTsKKyAgICAgICAgbV9wYXVzZU9uQWxs
VGltZW91dHNCcmVha3BvaW50ID0gV1RGTW92ZShicmVha3BvaW50KTsKKyAgICAgICAgcmV0dXJu
IHsgfTsKICAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gbWFr
ZVVuZXhwZWN0ZWQoIk5vdCBzdXBwb3J0ZWQiKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01EZWJ1
Z2dlckFnZW50OjpyZW1vdmVFdmVudEJyZWFrcG9pbnQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5n
LCBjb25zdCBTdHJpbmcmIGJyZWFrcG9pbnRUeXBlU3RyaW5nLCBjb25zdCBTdHJpbmcqIGV2ZW50
TmFtZSkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRPTURlYnVnZ2Vy
QWdlbnQ6OnJlbW92ZUV2ZW50QnJlYWtwb2ludChQcm90b2NvbDo6RE9NRGVidWdnZXI6OkV2ZW50
QnJlYWtwb2ludFR5cGUgYnJlYWtwb2ludFR5cGUsIGNvbnN0IFN0cmluZyYgZXZlbnROYW1lKQog
ewotICAgIGlmIChicmVha3BvaW50VHlwZVN0cmluZy5pc0VtcHR5KCkpIHsKLSAgICAgICAgZXJy
b3JTdHJpbmcgPSAiYnJlYWtwb2ludFR5cGUgaXMgZW1wdHkiX3M7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOwogCi0gICAgYXV0
byBicmVha3BvaW50VHlwZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6Okluc3BlY3RvckhlbHBlcnM6
OnBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpET01EZWJ1Z2dl
cjo6RXZlbnRCcmVha3BvaW50VHlwZT4oYnJlYWtwb2ludFR5cGVTdHJpbmcpOwotICAgIGlmICgh
YnJlYWtwb2ludFR5cGUpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSBtYWtlU3RyaW5nKCJVbmtu
b3duIGJyZWFrcG9pbnRUeXBlOiAiX3MsIGJyZWFrcG9pbnRUeXBlU3RyaW5nKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIGlmIChldmVudE5hbWUgJiYgIWV2ZW50TmFtZS0+aXNFbXB0
eSgpKSB7Ci0gICAgICAgIGlmIChicmVha3BvaW50VHlwZS52YWx1ZSgpID09IEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpFdmVudEJyZWFrcG9pbnRUeXBlOjpMaXN0ZW5lcikgewot
ICAgICAgICAgICAgaWYgKCFtX2xpc3RlbmVyQnJlYWtwb2ludHMucmVtb3ZlKCpldmVudE5hbWUp
KQotICAgICAgICAgICAgICAgIGVycm9yU3RyaW5nID0gIkJyZWFrcG9pbnQgZm9yIGdpdmVuIGV2
ZW50TmFtZSBtaXNzaW5nIl9zOwotICAgICAgICAgICAgcmV0dXJuOworICAgIGlmICghZXZlbnRO
YW1lLmlzRW1wdHkoKSkgeworICAgICAgICBpZiAoYnJlYWtwb2ludFR5cGUgPT0gUHJvdG9jb2w6
OkRPTURlYnVnZ2VyOjpFdmVudEJyZWFrcG9pbnRUeXBlOjpMaXN0ZW5lcikgeworICAgICAgICAg
ICAgaWYgKCFtX2xpc3RlbmVyQnJlYWtwb2ludHMucmVtb3ZlKGV2ZW50TmFtZSkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJCcmVha3BvaW50IGZvciBnaXZlbiBldmVu
dE5hbWUgbWlzc2luZyJfcyk7CisgICAgICAgICAgICByZXR1cm4geyB9OwogICAgICAgICB9CiAK
LSAgICAgICAgZXJyb3JTdHJpbmcgPSAiVW5leHBlY3RlZCBldmVudE5hbWUiX3M7Ci0gICAgICAg
IHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJVbmV4cGVjdGVkIGV2ZW50
TmFtZSJfcyk7CiAgICAgfQogCi0gICAgc3dpdGNoIChicmVha3BvaW50VHlwZS52YWx1ZSgpKSB7
Ci0gICAgY2FzZSBJbnNwZWN0b3I6OlByb3RvY29sOjpET01EZWJ1Z2dlcjo6RXZlbnRCcmVha3Bv
aW50VHlwZTo6QW5pbWF0aW9uRnJhbWU6Ci0gICAgICAgIHNldEFuaW1hdGlvbkZyYW1lQnJlYWtw
b2ludChlcnJvclN0cmluZywgbnVsbHB0cik7Ci0gICAgICAgIGJyZWFrOworICAgIHN3aXRjaCAo
YnJlYWtwb2ludFR5cGUpIHsKKyAgICBjYXNlIFByb3RvY29sOjpET01EZWJ1Z2dlcjo6RXZlbnRC
cmVha3BvaW50VHlwZTo6QW5pbWF0aW9uRnJhbWU6CisgICAgICAgIGlmICghc2V0QW5pbWF0aW9u
RnJhbWVCcmVha3BvaW50KGVycm9yU3RyaW5nLCBudWxscHRyKSkKKyAgICAgICAgICAgIHJldHVy
biBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CisgICAgICAgIHJldHVybiB7IH07CiAKLSAg
ICBjYXNlIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpFdmVudEJyZWFrcG9pbnRU
eXBlOjpJbnRlcnZhbDoKKyAgICBjYXNlIFByb3RvY29sOjpET01EZWJ1Z2dlcjo6RXZlbnRCcmVh
a3BvaW50VHlwZTo6SW50ZXJ2YWw6CiAgICAgICAgIGlmICghbV9wYXVzZU9uQWxsSW50ZXJ2YWxz
QnJlYWtwb2ludCkKLSAgICAgICAgICAgIGVycm9yU3RyaW5nID0gIkJyZWFrcG9pbnQgZm9yIElu
dGVydmFscyBtaXNzaW5nIl9zOworICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJC
cmVha3BvaW50IGZvciBJbnRlcnZhbHMgbWlzc2luZyJfcyk7CiAgICAgICAgIG1fcGF1c2VPbkFs
bEludGVydmFsc0JyZWFrcG9pbnQgPSBudWxscHRyOwotICAgICAgICBicmVhazsKKyAgICAgICAg
cmV0dXJuIHsgfTsKIAotICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NRGVidWdnZXI6
OkV2ZW50QnJlYWtwb2ludFR5cGU6Okxpc3RlbmVyOgorICAgIGNhc2UgUHJvdG9jb2w6OkRPTURl
YnVnZ2VyOjpFdmVudEJyZWFrcG9pbnRUeXBlOjpMaXN0ZW5lcjoKICAgICAgICAgaWYgKCFtX3Bh
dXNlT25BbGxMaXN0ZW5lcnNCcmVha3BvaW50KQotICAgICAgICAgICAgZXJyb3JTdHJpbmcgPSAi
QnJlYWtwb2ludCBmb3IgTGlzdGVuZXJzIG1pc3NpbmciX3M7CisgICAgICAgICAgICByZXR1cm4g
bWFrZVVuZXhwZWN0ZWQoIkJyZWFrcG9pbnQgZm9yIExpc3RlbmVycyBtaXNzaW5nIl9zKTsKICAg
ICAgICAgbV9wYXVzZU9uQWxsTGlzdGVuZXJzQnJlYWtwb2ludCA9IG51bGxwdHI7Ci0gICAgICAg
IGJyZWFrOworICAgICAgICByZXR1cm4geyB9OwogCi0gICAgY2FzZSBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpET01EZWJ1Z2dlcjo6RXZlbnRCcmVha3BvaW50VHlwZTo6VGltZW91dDoKKyAgICBjYXNl
IFByb3RvY29sOjpET01EZWJ1Z2dlcjo6RXZlbnRCcmVha3BvaW50VHlwZTo6VGltZW91dDoKICAg
ICAgICAgaWYgKCFtX3BhdXNlT25BbGxUaW1lb3V0c0JyZWFrcG9pbnQpCi0gICAgICAgICAgICBl
cnJvclN0cmluZyA9ICJCcmVha3BvaW50IGZvciBUaW1lb3V0cyBtaXNzaW5nIl9zOworICAgICAg
ICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJCcmVha3BvaW50IGZvciBUaW1lb3V0cyBtaXNz
aW5nIl9zKTsKICAgICAgICAgbV9wYXVzZU9uQWxsVGltZW91dHNCcmVha3BvaW50ID0gbnVsbHB0
cjsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybiB7IH07CiAgICAgfQorCisgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJOb3Qgc3VwcG9y
dGVkIik7CiB9CiAKIHZvaWQgSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudDo6d2lsbEhhbmRsZUV2
ZW50KEV2ZW50JiBldmVudCwgY29uc3QgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXImIHJlZ2lzdGVy
ZWRFdmVudExpc3RlbmVyKQpAQCAtMzI5LDQ1ICszMTQsNTAgQEAgdm9pZCBJbnNwZWN0b3JET01E
ZWJ1Z2dlckFnZW50OjpkaWRGaXJlVGltZXIoYm9vbCBvbmVTaG90KQogICAgIG1fZGVidWdnZXJB
Z2VudC0+Y2FuY2VsUGF1c2VGb3JTcGVjaWFsQnJlYWtwb2ludCgqYnJlYWtwb2ludCk7CiB9CiAK
LXZvaWQgSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudDo6c2V0VVJMQnJlYWtwb2ludChFcnJvclN0
cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBib29sKiBvcHRpb25h
bElzUmVnZXgsIGNvbnN0IEpTT046Ok9iamVjdCogb3B0aW9uc1BheWxvYWQpCitQcm90b2NvbDo6
RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50OjpzZXRVUkxCcmVh
a3BvaW50KGNvbnN0IFN0cmluZyYgdXJsLCBPcHRpb25hbDxib29sPiYmIGlzUmVnZXgsIFJlZlB0
cjxKU09OOjpPYmplY3Q+JiYgb3B0aW9ucykKIHsKLSAgICBhdXRvIGJyZWFrcG9pbnQgPSBJbnNw
ZWN0b3JEZWJ1Z2dlckFnZW50OjpkZWJ1Z2dlckJyZWFrcG9pbnRGcm9tUGF5bG9hZChlcnJvclN0
cmluZywgb3B0aW9uc1BheWxvYWQpOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0
cmluZzsKKworICAgIGF1dG8gYnJlYWtwb2ludCA9IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRl
YnVnZ2VyQnJlYWtwb2ludEZyb21QYXlsb2FkKGVycm9yU3RyaW5nLCBXVEZNb3ZlKG9wdGlvbnMp
KTsKICAgICBpZiAoIWJyZWFrcG9pbnQpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJu
IG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgIGlmICh1cmwuaXNFbXB0eSgpKSB7
Ci0gICAgICAgIGlmICghbV9wYXVzZU9uQWxsVVJMc0JyZWFrcG9pbnQpCi0gICAgICAgICAgICBt
X3BhdXNlT25BbGxVUkxzQnJlYWtwb2ludCA9IFdURk1vdmUoYnJlYWtwb2ludCk7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIGVycm9yU3RyaW5nID0gIkJyZWFrcG9pbnQgZm9yIGFsbCBVUkxz
IGFscmVhZHkgZXhpc3RzIl9zOwotICAgICAgICByZXR1cm47CisgICAgICAgIGlmIChtX3BhdXNl
T25BbGxVUkxzQnJlYWtwb2ludCkKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgi
QnJlYWtwb2ludCBmb3IgYWxsIFVSTHMgYWxyZWFkeSBleGlzdHMiX3MpOworICAgICAgICBtX3Bh
dXNlT25BbGxVUkxzQnJlYWtwb2ludCA9IFdURk1vdmUoYnJlYWtwb2ludCk7CisgICAgICAgIHJl
dHVybiB7IH07CiAgICAgfQogCi0gICAgaWYgKG9wdGlvbmFsSXNSZWdleCAmJiAqb3B0aW9uYWxJ
c1JlZ2V4KSB7CisgICAgaWYgKGlzUmVnZXggJiYgKmlzUmVnZXgpIHsKICAgICAgICAgaWYgKCFt
X3VybFJlZ2V4QnJlYWtwb2ludHMuYWRkKHVybCwgYnJlYWtwb2ludC5yZWxlYXNlTm9uTnVsbCgp
KSkKLSAgICAgICAgICAgIGVycm9yU3RyaW5nID0gIkJyZWFrcG9pbnQgZm9yIGdpdmVuIHJlZ2V4
IGFscmVhZHkgZXhpc3RzIl9zOworICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJC
cmVha3BvaW50IGZvciBnaXZlbiByZWdleCBhbHJlYWR5IGV4aXN0cyJfcyk7CiAgICAgfSBlbHNl
IHsKICAgICAgICAgaWYgKCFtX3VybFRleHRCcmVha3BvaW50cy5hZGQodXJsLCBicmVha3BvaW50
LnJlbGVhc2VOb25OdWxsKCkpKQotICAgICAgICAgICAgZXJyb3JTdHJpbmcgPSAiQnJlYWtwb2lu
dCBmb3IgZ2l2ZW4gVVJMIGFscmVhZHkgZXhpc3RzIl9zOworICAgICAgICAgICAgcmV0dXJuIG1h
a2VVbmV4cGVjdGVkKCJCcmVha3BvaW50IGZvciBnaXZlbiBVUkwgYWxyZWFkeSBleGlzdHMiX3Mp
OwogICAgIH0KKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NRGVidWdn
ZXJBZ2VudDo6cmVtb3ZlVVJMQnJlYWtwb2ludChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNv
bnN0IFN0cmluZyYgdXJsLCBjb25zdCBib29sKiBvcHRpb25hbElzUmVnZXgpCitQcm90b2NvbDo6
RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50OjpyZW1vdmVVUkxC
cmVha3BvaW50KGNvbnN0IFN0cmluZyYgdXJsLCBPcHRpb25hbDxib29sPiYmIGlzUmVnZXgpCiB7
CiAgICAgaWYgKHVybC5pc0VtcHR5KCkpIHsKICAgICAgICAgaWYgKCFtX3BhdXNlT25BbGxVUkxz
QnJlYWtwb2ludCkKLSAgICAgICAgICAgIGVycm9yU3RyaW5nID0gIkJyZWFrcG9pbnQgZm9yIGFs
bCBVUkxzIG1pc3NpbmciX3M7CisgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkJy
ZWFrcG9pbnQgZm9yIGFsbCBVUkxzIG1pc3NpbmciX3MpOwogICAgICAgICBtX3BhdXNlT25BbGxV
UkxzQnJlYWtwb2ludCA9IG51bGxwdHI7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJu
IHsgfTsKICAgICB9CiAKLSAgICBpZiAob3B0aW9uYWxJc1JlZ2V4ICYmICpvcHRpb25hbElzUmVn
ZXgpIHsKKyAgICBpZiAoaXNSZWdleCAmJiAqaXNSZWdleCkgewogICAgICAgICBpZiAoIW1fdXJs
UmVnZXhCcmVha3BvaW50cy5yZW1vdmUodXJsKSkKLSAgICAgICAgICAgIGVycm9yU3RyaW5nID0g
Ik1pc3NpbmcgYnJlYWtwb2ludCBmb3IgZ2l2ZW4gcmVnZXgiX3M7CisgICAgICAgICAgICByZXR1
cm4gbWFrZVVuZXhwZWN0ZWQoIk1pc3NpbmcgYnJlYWtwb2ludCBmb3IgZ2l2ZW4gcmVnZXgiX3Mp
OwogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmICghbV91cmxUZXh0QnJlYWtwb2ludHMucmVtb3Zl
KHVybCkpCi0gICAgICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIGJyZWFrcG9pbnQgZm9y
IGdpdmVuIFVSTCJfczsKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTWlzc2lu
ZyBicmVha3BvaW50IGZvciBnaXZlbiBVUkwiX3MpOwogICAgIH0KKworICAgIHJldHVybiB7IH07
CiB9CiAKIHZvaWQgSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudDo6YnJlYWtPblVSTElmTmVlZGVk
KGNvbnN0IFN0cmluZyYgdXJsLCBVUkxCcmVha3BvaW50U291cmNlIHNvdXJjZSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NRGVidWdnZXJB
Z2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01EZWJ1
Z2dlckFnZW50LmgKaW5kZXggNGVjMGYwOGM5YjVhMWMyN2RkNDNlYTg1NDA0ZWNlNjJjOTM2ZjFm
YS4uODk2MDllY2ZjMGQ4Nzk2NzQxZDQ1NWEwM2U3ZGFjMDkxZThkY2M4ZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01EZWJ1
Z2dlckFnZW50LmgKQEAgLTUwLDggKzUwLDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3Mg
RXZlbnQ7CiBjbGFzcyBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lcjsKIAotdHlwZWRlZiBTdHJpbmcg
RXJyb3JTdHJpbmc7Ci0KIGNsYXNzIEluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQgOiBwdWJsaWMg
SW5zcGVjdG9yQWdlbnRCYXNlLCBwdWJsaWMgSW5zcGVjdG9yOjpET01EZWJ1Z2dlckJhY2tlbmRE
aXNwYXRjaGVySGFuZGxlciwgcHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yRGVidWdnZXJBZ2Vu
dDo6TGlzdGVuZXIgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEluc3BlY3RvckRPTURlYnVn
Z2VyQWdlbnQpOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwpAQCAtNjUsMTAgKzYzLDEw
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgZW5hYmxlZCgpIGNvbnN0OwogCiAgICAgLy8g
RE9NRGVidWdnZXJCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIKLSAgICB2b2lkIHNldFVSTEJyZWFr
cG9pbnQoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgYm9vbCogaXNSZWdl
eCwgY29uc3QgSlNPTjo6T2JqZWN0KiBvcHRpb25zKSBmaW5hbDsKLSAgICB2b2lkIHJlbW92ZVVS
TEJyZWFrcG9pbnQoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgYm9vbCog
aXNSZWdleCkgZmluYWw7Ci0gICAgdm9pZCBzZXRFdmVudEJyZWFrcG9pbnQoRXJyb3JTdHJpbmcm
LCBjb25zdCBTdHJpbmcmIGJyZWFrcG9pbnRUeXBlLCBjb25zdCBTdHJpbmcqIGV2ZW50TmFtZSwg
Y29uc3QgSlNPTjo6T2JqZWN0KiBvcHRpb25zKSBmaW5hbDsKLSAgICB2b2lkIHJlbW92ZUV2ZW50
QnJlYWtwb2ludChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgYnJlYWtwb2ludFR5cGUsIGNv
bnN0IFN0cmluZyogZXZlbnROYW1lKSBmaW5hbDsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpF
cnJvclN0cmluZ09yPHZvaWQ+IHNldFVSTEJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiB1cmwsIE9w
dGlvbmFsPGJvb2w+JiYgaXNSZWdleCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBvcHRpb25zKSBm
aW5hbDsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHJlbW92
ZVVSTEJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiB1cmwsIE9wdGlvbmFsPGJvb2w+JiYgaXNSZWdl
eCkgZmluYWw7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBz
ZXRFdmVudEJyZWFrcG9pbnQoSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NRGVidWdnZXI6OkV2ZW50
QnJlYWtwb2ludFR5cGUsIGNvbnN0IFN0cmluZyYgZXZlbnROYW1lLCBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiYmIG9wdGlvbnMpIGZpbmFsOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3Ry
aW5nT3I8dm9pZD4gcmVtb3ZlRXZlbnRCcmVha3BvaW50KEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRP
TURlYnVnZ2VyOjpFdmVudEJyZWFrcG9pbnRUeXBlLCBjb25zdCBTdHJpbmcmIGV2ZW50TmFtZSkg
ZmluYWw7CiAKICAgICAvLyBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpMaXN0ZW5lcgogICAgIHZv
aWQgZGVidWdnZXJXYXNFbmFibGVkKCkgb3ZlcnJpZGU7CkBAIC04OCw3ICs4Niw3IEBAIHByb3Rl
Y3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgZW5hYmxlKCk7CiAgICAgdmlydHVhbCB2b2lkIGRpc2Fi
bGUoKTsKIAotICAgIHZpcnR1YWwgdm9pZCBzZXRBbmltYXRpb25GcmFtZUJyZWFrcG9pbnQoRXJy
b3JTdHJpbmcmLCBSZWZQdHI8SlNDOjpCcmVha3BvaW50PiYmKSA9IDA7CisgICAgdmlydHVhbCBi
b29sIHNldEFuaW1hdGlvbkZyYW1lQnJlYWtwb2ludChJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJv
clN0cmluZyYsIFJlZlB0cjxKU0M6OkJyZWFrcG9pbnQ+JiYpID0gMDsKIAogICAgIEluc3BlY3Rv
cjo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudCogbV9kZWJ1Z2dlckFnZW50IHsgbnVsbHB0ciB9Owog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRP
TVN0b3JhZ2VBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3Bl
Y3RvckRPTVN0b3JhZ2VBZ2VudC5jcHAKaW5kZXggZTU5MWU5MTY5ZGYzMDQ1NDU2MjBiNTQwMzJi
NjJmYTJiYWRlY2I2ZS4uMDNhN2ZkMDhkMjA1N2MyMmNhY2RjZjg1MDU4ZjFlNGRmMDRkZDdmMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01T
dG9yYWdlQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5z
cGVjdG9yRE9NU3RvcmFnZUFnZW50LmNwcApAQCAtNzAsNDEgKzcwLDM5IEBAIHZvaWQgSW5zcGVj
dG9yRE9NU3RvcmFnZUFnZW50OjpkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9y
OjpGcm9udGVuZFJvCiAKIHZvaWQgSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50Ojp3aWxsRGVzdHJv
eUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24pCiB7Ci0gICAg
RXJyb3JTdHJpbmcgaWdub3JlZDsKLSAgICBkaXNhYmxlKGlnbm9yZWQpOworICAgIGRpc2FibGUo
KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OmVuYWJsZShFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JE
T01TdG9yYWdlQWdlbnQ6OmVuYWJsZSgpCiB7Ci0gICAgaWYgKG1faW5zdHJ1bWVudGluZ0FnZW50
cy5lbmFibGVkRE9NU3RvcmFnZUFnZW50KCkgPT0gdGhpcykgewotICAgICAgICBlcnJvclN0cmlu
ZyA9ICJET01TdG9yYWdlIGRvbWFpbiBhbHJlYWR5IGVuYWJsZWQiX3M7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9CisgICAgaWYgKG1faW5zdHJ1bWVudGluZ0FnZW50cy5lbmFibGVkRE9NU3RvcmFn
ZUFnZW50KCkgPT0gdGhpcykKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJET01TdG9y
YWdlIGRvbWFpbiBhbHJlYWR5IGVuYWJsZWQiX3MpOwogCiAgICAgbV9pbnN0cnVtZW50aW5nQWdl
bnRzLnNldEVuYWJsZWRET01TdG9yYWdlQWdlbnQodGhpcyk7CisKKyAgICByZXR1cm4geyB9Owog
fQogCi12b2lkIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6ZGlzYWJsZShFcnJvclN0cmluZyYg
ZXJyb3JTdHJpbmcpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JET01T
dG9yYWdlQWdlbnQ6OmRpc2FibGUoKQogewotICAgIGlmIChtX2luc3RydW1lbnRpbmdBZ2VudHMu
ZW5hYmxlZERPTVN0b3JhZ2VBZ2VudCgpICE9IHRoaXMpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcg
PSAiRE9NU3RvcmFnZSBkb21haW4gYWxyZWFkeSBkaXNhYmxlZCJfczsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KKyAgICBpZiAobV9pbnN0cnVtZW50aW5nQWdlbnRzLmVuYWJsZWRET01TdG9yYWdl
QWdlbnQoKSAhPSB0aGlzKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkRPTVN0b3Jh
Z2UgZG9tYWluIGFscmVhZHkgZGlzYWJsZWQiX3MpOwogCiAgICAgbV9pbnN0cnVtZW50aW5nQWdl
bnRzLnNldEVuYWJsZWRET01TdG9yYWdlQWdlbnQobnVsbHB0cik7CisKKyAgICByZXR1cm4geyB9
OwogfQogCi12b2lkIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6Z2V0RE9NU3RvcmFnZUl0ZW1z
KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgSlNPTjo6T2JqZWN0JiBzdG9yYWdlSWQs
IFJlZlB0cjxKU09OOjpBcnJheU9mPEpTT046OkFycmF5T2Y8U3RyaW5nPj4+JiBpdGVtcykKK1By
b3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpET01TdG9y
YWdlOjpJdGVtPj4+IEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6Z2V0RE9NU3RvcmFnZUl0ZW1z
KFJlZjxKU09OOjpPYmplY3Q+JiYgc3RvcmFnZUlkKQogeworICAgIFByb3RvY29sOjpFcnJvclN0
cmluZyBlcnJvclN0cmluZzsKKwogICAgIEZyYW1lKiBmcmFtZTsKLSAgICBSZWZQdHI8U3RvcmFn
ZUFyZWE+IHN0b3JhZ2VBcmVhID0gZmluZFN0b3JhZ2VBcmVhKGVycm9yU3RyaW5nLCBzdG9yYWdl
SWQsIGZyYW1lKTsKLSAgICBpZiAoIXN0b3JhZ2VBcmVhKSB7Ci0gICAgICAgIGVycm9yU3RyaW5n
ID0gIk1pc3Npbmcgc3RvcmFnZSBmb3IgZ2l2ZW4gc3RvcmFnZUlkIl9zOwotICAgICAgICByZXR1
cm47Ci0gICAgfQorICAgIFJlZlB0cjxTdG9yYWdlQXJlYT4gc3RvcmFnZUFyZWEgPSBmaW5kU3Rv
cmFnZUFyZWEoZXJyb3JTdHJpbmcsIFdURk1vdmUoc3RvcmFnZUlkKSwgZnJhbWUpOworICAgIGlm
ICghc3RvcmFnZUFyZWEpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmlu
Zyk7CiAKICAgICBhdXRvIHN0b3JhZ2VJdGVtcyA9IEpTT046OkFycmF5T2Y8SlNPTjo6QXJyYXlP
ZjxTdHJpbmc+Pjo6Y3JlYXRlKCk7Ci0KICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3Rv
cmFnZUFyZWEtPmxlbmd0aCgpOyArK2kpIHsKICAgICAgICAgU3RyaW5nIGtleSA9IHN0b3JhZ2VB
cmVhLT5rZXkoaSk7CiAgICAgICAgIFN0cmluZyB2YWx1ZSA9IHN0b3JhZ2VBcmVhLT5pdGVtKGtl
eSk7CkBAIC0xMTQsNDcgKzExMiw1MiBAQCB2b2lkIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6
Z2V0RE9NU3RvcmFnZUl0ZW1zKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29ucwogICAgICAg
ICBlbnRyeS0+YWRkSXRlbSh2YWx1ZSk7CiAgICAgICAgIHN0b3JhZ2VJdGVtcy0+YWRkSXRlbShX
VEZNb3ZlKGVudHJ5KSk7CiAgICAgfQotCi0gICAgaXRlbXMgPSBXVEZNb3ZlKHN0b3JhZ2VJdGVt
cyk7CisgICAgcmV0dXJuIFdURk1vdmUoc3RvcmFnZUl0ZW1zKTsKIH0KIAotdm9pZCBJbnNwZWN0
b3JET01TdG9yYWdlQWdlbnQ6OnNldERPTVN0b3JhZ2VJdGVtKEVycm9yU3RyaW5nJiBlcnJvclN0
cmluZywgY29uc3QgSlNPTjo6T2JqZWN0JiBzdG9yYWdlSWQsIGNvbnN0IFN0cmluZyYga2V5LCBj
b25zdCBTdHJpbmcmIHZhbHVlKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVj
dG9yRE9NU3RvcmFnZUFnZW50OjpzZXRET01TdG9yYWdlSXRlbShSZWY8SlNPTjo6T2JqZWN0PiYm
IHN0b3JhZ2VJZCwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7Cisg
ICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAgICAgRnJhbWUqIGZyYW1l
OwotICAgIFJlZlB0cjxTdG9yYWdlQXJlYT4gc3RvcmFnZUFyZWEgPSBmaW5kU3RvcmFnZUFyZWEo
ZXJyb3JTdHJpbmcsIHN0b3JhZ2VJZCwgZnJhbWUpOwotICAgIGlmICghc3RvcmFnZUFyZWEpIHsK
LSAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWlzc2luZyBzdG9yYWdlIGZvciBnaXZlbiBzdG9yYWdl
SWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgUmVmUHRyPFN0b3JhZ2VBcmVhPiBz
dG9yYWdlQXJlYSA9IGZpbmRTdG9yYWdlQXJlYShlcnJvclN0cmluZywgV1RGTW92ZShzdG9yYWdl
SWQpLCBmcmFtZSk7CisgICAgaWYgKCFzdG9yYWdlQXJlYSkKKyAgICAgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgIGJvb2wgcXVvdGFFeGNlcHRpb24gPSBmYWxz
ZTsKICAgICBzdG9yYWdlQXJlYS0+c2V0SXRlbShmcmFtZSwga2V5LCB2YWx1ZSwgcXVvdGFFeGNl
cHRpb24pOwogICAgIGlmIChxdW90YUV4Y2VwdGlvbikKLSAgICAgICAgZXJyb3JTdHJpbmcgPSBE
T01FeGNlcHRpb246Om5hbWUoUXVvdGFFeGNlZWRlZEVycm9yKTsKKyAgICAgICAgcmV0dXJuIG1h
a2VVbmV4cGVjdGVkKERPTUV4Y2VwdGlvbjo6bmFtZShRdW90YUV4Y2VlZGVkRXJyb3IpKTsKKwor
ICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjpyZW1v
dmVET01TdG9yYWdlSXRlbShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IEpTT046Ok9i
amVjdCYgc3RvcmFnZUlkLCBjb25zdCBTdHJpbmcmIGtleSkKK1Byb3RvY29sOjpFcnJvclN0cmlu
Z09yPHZvaWQ+IEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6cmVtb3ZlRE9NU3RvcmFnZUl0ZW0o
UmVmPEpTT046Ok9iamVjdD4mJiBzdG9yYWdlSWQsIGNvbnN0IFN0cmluZyYga2V5KQogeworICAg
IFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIEZyYW1lKiBmcmFtZTsK
LSAgICBSZWZQdHI8U3RvcmFnZUFyZWE+IHN0b3JhZ2VBcmVhID0gZmluZFN0b3JhZ2VBcmVhKGVy
cm9yU3RyaW5nLCBzdG9yYWdlSWQsIGZyYW1lKTsKLSAgICBpZiAoIXN0b3JhZ2VBcmVhKSB7Ci0g
ICAgICAgIGVycm9yU3RyaW5nID0gIk1pc3Npbmcgc3RvcmFnZSBmb3IgZ2l2ZW4gc3RvcmFnZUlk
Il9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIFJlZlB0cjxTdG9yYWdlQXJlYT4gc3Rv
cmFnZUFyZWEgPSBmaW5kU3RvcmFnZUFyZWEoZXJyb3JTdHJpbmcsIFdURk1vdmUoc3RvcmFnZUlk
KSwgZnJhbWUpOworICAgIGlmICghc3RvcmFnZUFyZWEpCisgICAgICAgIHJldHVybiBtYWtlVW5l
eHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAgICBzdG9yYWdlQXJlYS0+cmVtb3ZlSXRlbShmcmFt
ZSwga2V5KTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NU3RvcmFn
ZUFnZW50OjpjbGVhckRPTVN0b3JhZ2VJdGVtcyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNv
bnN0IEpTT046Ok9iamVjdCYgc3RvcmFnZUlkKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9p
ZD4gSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjpjbGVhckRPTVN0b3JhZ2VJdGVtcyhSZWY8SlNP
Tjo6T2JqZWN0PiYmIHN0b3JhZ2VJZCkKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJy
b3JTdHJpbmc7CisKICAgICBGcmFtZSogZnJhbWU7Ci0gICAgYXV0byBzdG9yYWdlQXJlYSA9IGZp
bmRTdG9yYWdlQXJlYShlcnJvclN0cmluZywgc3RvcmFnZUlkLCBmcmFtZSk7Ci0gICAgaWYgKCFz
dG9yYWdlQXJlYSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIHN0b3JhZ2UgZm9y
IGdpdmVuIHN0b3JhZ2VJZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBhdXRvIHN0
b3JhZ2VBcmVhID0gZmluZFN0b3JhZ2VBcmVhKGVycm9yU3RyaW5nLCBXVEZNb3ZlKHN0b3JhZ2VJ
ZCksIGZyYW1lKTsKKyAgICBpZiAoIXN0b3JhZ2VBcmVhKQorICAgICAgICByZXR1cm4gbWFrZVVu
ZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCiAgICAgc3RvcmFnZUFyZWEtPmNsZWFyKGZyYW1lKTsK
KworICAgIHJldHVybiB7IH07CiB9CiAKIFN0cmluZyBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6
OnN0b3JhZ2VJZChTdG9yYWdlJiBzdG9yYWdlKQpAQCAtMTY4LDkgKzE3MSw5IEBAIFN0cmluZyBJ
bnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OnN0b3JhZ2VJZChTdG9yYWdlJiBzdG9yYWdlKQogICAg
IHJldHVybiBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OnN0b3JhZ2VJZChzZWN1cml0eU9yaWdp
bi5wdHIoKSwgaXNMb2NhbFN0b3JhZ2UpLT50b0pTT05TdHJpbmcoKTsKIH0KIAotUmVmUHRyPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkRPTVN0b3JhZ2U6OlN0b3JhZ2VJZD4gSW5zcGVjdG9yRE9NU3Rv
cmFnZUFnZW50OjpzdG9yYWdlSWQoU2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2luLCBib29s
IGlzTG9jYWxTdG9yYWdlKQorUmVmPFByb3RvY29sOjpET01TdG9yYWdlOjpTdG9yYWdlSWQ+IElu
c3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6c3RvcmFnZUlkKFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0
eU9yaWdpbiwgYm9vbCBpc0xvY2FsU3RvcmFnZSkKIHsKLSAgICByZXR1cm4gSW5zcGVjdG9yOjpQ
cm90b2NvbDo6RE9NU3RvcmFnZTo6U3RvcmFnZUlkOjpjcmVhdGUoKQorICAgIHJldHVybiBQcm90
b2NvbDo6RE9NU3RvcmFnZTo6U3RvcmFnZUlkOjpjcmVhdGUoKQogICAgICAgICAuc2V0U2VjdXJp
dHlPcmlnaW4oc2VjdXJpdHlPcmlnaW4tPnRvUmF3U3RyaW5nKCkpCiAgICAgICAgIC5zZXRJc0xv
Y2FsU3RvcmFnZShpc0xvY2FsU3RvcmFnZSkKICAgICAgICAgLnJlbGVhc2UoKTsKQEAgLTE3OCwy
OCArMTgxLDI4IEBAIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpET01TdG9yYWdlOjpTdG9y
YWdlSWQ+IEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6c3RvCiAKIHZvaWQgSW5zcGVjdG9yRE9N
U3RvcmFnZUFnZW50OjpkaWREaXNwYXRjaERPTVN0b3JhZ2VFdmVudChjb25zdCBTdHJpbmcmIGtl
eSwgY29uc3QgU3RyaW5nJiBvbGRWYWx1ZSwgY29uc3QgU3RyaW5nJiBuZXdWYWx1ZSwgU3RvcmFn
ZVR5cGUgc3RvcmFnZVR5cGUsIFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbikKIHsKLSAg
ICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NU3RvcmFnZTo6U3RvcmFnZUlkPiBpZCA9
IEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6c3RvcmFnZUlkKHNlY3VyaXR5T3JpZ2luLCBzdG9y
YWdlVHlwZSA9PSBTdG9yYWdlVHlwZTo6TG9jYWwpOworICAgIGF1dG8gaWQgPSBJbnNwZWN0b3JE
T01TdG9yYWdlQWdlbnQ6OnN0b3JhZ2VJZChzZWN1cml0eU9yaWdpbiwgc3RvcmFnZVR5cGUgPT0g
U3RvcmFnZVR5cGU6OkxvY2FsKTsKIAogICAgIGlmIChrZXkuaXNOdWxsKCkpCi0gICAgICAgIG1f
ZnJvbnRlbmREaXNwYXRjaGVyLT5kb21TdG9yYWdlSXRlbXNDbGVhcmVkKGlkKTsKKyAgICAgICAg
bV9mcm9udGVuZERpc3BhdGNoZXItPmRvbVN0b3JhZ2VJdGVtc0NsZWFyZWQoV1RGTW92ZShpZCkp
OwogICAgIGVsc2UgaWYgKG5ld1ZhbHVlLmlzTnVsbCgpKQotICAgICAgICBtX2Zyb250ZW5kRGlz
cGF0Y2hlci0+ZG9tU3RvcmFnZUl0ZW1SZW1vdmVkKGlkLCBrZXkpOworICAgICAgICBtX2Zyb250
ZW5kRGlzcGF0Y2hlci0+ZG9tU3RvcmFnZUl0ZW1SZW1vdmVkKFdURk1vdmUoaWQpLCBrZXkpOwog
ICAgIGVsc2UgaWYgKG9sZFZhbHVlLmlzTnVsbCgpKQotICAgICAgICBtX2Zyb250ZW5kRGlzcGF0
Y2hlci0+ZG9tU3RvcmFnZUl0ZW1BZGRlZChpZCwga2V5LCBuZXdWYWx1ZSk7CisgICAgICAgIG1f
ZnJvbnRlbmREaXNwYXRjaGVyLT5kb21TdG9yYWdlSXRlbUFkZGVkKFdURk1vdmUoaWQpLCBrZXks
IG5ld1ZhbHVlKTsKICAgICBlbHNlCi0gICAgICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5kb21T
dG9yYWdlSXRlbVVwZGF0ZWQoaWQsIGtleSwgb2xkVmFsdWUsIG5ld1ZhbHVlKTsKKyAgICAgICAg
bV9mcm9udGVuZERpc3BhdGNoZXItPmRvbVN0b3JhZ2VJdGVtVXBkYXRlZChXVEZNb3ZlKGlkKSwg
a2V5LCBvbGRWYWx1ZSwgbmV3VmFsdWUpOwogfQogCi1SZWZQdHI8U3RvcmFnZUFyZWE+IEluc3Bl
Y3RvckRPTVN0b3JhZ2VBZ2VudDo6ZmluZFN0b3JhZ2VBcmVhKEVycm9yU3RyaW5nJiBlcnJvclN0
cmluZywgY29uc3QgSlNPTjo6T2JqZWN0JiBzdG9yYWdlSWQsIEZyYW1lKiYgdGFyZ2V0RnJhbWUp
CitSZWZQdHI8U3RvcmFnZUFyZWE+IEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6ZmluZFN0b3Jh
Z2VBcmVhKFByb3RvY29sOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIFJlZjxKU09OOjpPYmpl
Y3Q+JiYgc3RvcmFnZUlkLCBGcmFtZSomIHRhcmdldEZyYW1lKQogewotICAgIFN0cmluZyBzZWN1
cml0eU9yaWdpbjsKLSAgICBpZiAoIXN0b3JhZ2VJZC5nZXRTdHJpbmcoInNlY3VyaXR5T3JpZ2lu
Il9zLCBzZWN1cml0eU9yaWdpbikpIHsKKyAgICBhdXRvIHNlY3VyaXR5T3JpZ2luID0gc3RvcmFn
ZUlkLT5nZXRTdHJpbmcoUHJvdG9jb2w6OkRPTVN0b3JhZ2U6OlN0b3JhZ2VJZDo6c2VjdXJpdHlP
cmlnaW5LZXkpOworICAgIGlmICghc2VjdXJpdHlPcmlnaW4pIHsKICAgICAgICAgZXJyb3JTdHJp
bmcgPSAiTWlzc2luZyBzZWN1cml0eU9yaWdpbiBpbiBnaXZlbiBzdG9yYWdlSWQiOwogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKLSAgICBib29sIGlzTG9jYWxTdG9yYWdlID0gZmFs
c2U7Ci0gICAgaWYgKCFzdG9yYWdlSWQuZ2V0Qm9vbGVhbigiaXNMb2NhbFN0b3JhZ2UiX3MsIGlz
TG9jYWxTdG9yYWdlKSkgeworICAgIGF1dG8gaXNMb2NhbFN0b3JhZ2UgPSBzdG9yYWdlSWQtPmdl
dEJvb2xlYW4oUHJvdG9jb2w6OkRPTVN0b3JhZ2U6OlN0b3JhZ2VJZDo6aXNMb2NhbFN0b3JhZ2VL
ZXkpOworICAgIGlmICghaXNMb2NhbFN0b3JhZ2UpIHsKICAgICAgICAgZXJyb3JTdHJpbmcgPSAi
TWlzc2luZyBpc0xvY2FsU3RvcmFnZSBpbiBnaXZlbiBzdG9yYWdlSWQiOwogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKICAgICB9CkBAIC0yMTAsNyArMjEzLDcgQEAgUmVmUHRyPFN0b3JhZ2VBcmVh
PiBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OmZpbmRTdG9yYWdlQXJlYShFcnJvclN0cmluZyYg
ZXJyb3IKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCi0gICAgaWYgKCFpc0xvY2Fs
U3RvcmFnZSkKKyAgICBpZiAoISppc0xvY2FsU3RvcmFnZSkKICAgICAgICAgcmV0dXJuIG1faW5z
cGVjdGVkUGFnZS5zZXNzaW9uU3RvcmFnZSgpLT5zdG9yYWdlQXJlYSh0YXJnZXRGcmFtZS0+ZG9j
dW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKS5kYXRhKCkpOwogICAgIHJldHVybiBtX2luc3BlY3Rl
ZFBhZ2Uuc3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyKCkubG9jYWxTdG9yYWdlQXJlYSgqdGFyZ2V0
RnJhbWUtPmRvY3VtZW50KCkpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2FnZW50cy9JbnNwZWN0b3JET01TdG9yYWdlQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50LmgKaW5kZXggZGRiYjVkNTM0
N2YzYmVhYmUzY2ZhYjIwMWQ2ODM4Yzg5NmQyMWUzOS4uMzM4NmNiODc5ZjExNzhjMWI5NjM1Nzc1
YzlhMGU4NjRmNWI5NGM1MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Fn
ZW50cy9JbnNwZWN0b3JET01TdG9yYWdlQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTVN0b3JhZ2VBZ2VudC5oCkBAIC00NSwzNiArNDUsMzQg
QEAgY2xhc3MgUGFnZTsKIGNsYXNzIFNlY3VyaXR5T3JpZ2luOwogY2xhc3MgU3RvcmFnZTsKIAot
dHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7Ci0KIGNsYXNzIEluc3BlY3RvckRPTVN0b3JhZ2VB
Z2VudCBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3JBZ2VudEJhc2UsIHB1YmxpYyBJbnNwZWN0b3I6
OkRPTVN0b3JhZ2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewogICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudCk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CiBwdWJsaWM6CiAgICAgSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50KFBhZ2VBZ2VudENv
bnRleHQmKTsKLSAgICB+SW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50KCkgb3ZlcnJpZGU7CisgICAg
fkluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudCgpOwogCiAgICAgLy8gSW5zcGVjdG9yQWdlbnRCYXNl
Ci0gICAgdm9pZCBkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9udGVu
ZFJvdXRlciosIEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXIqKSBvdmVycmlkZTsKLSAgICB2
b2lkIHdpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlzY29ubmVjdFJl
YXNvbikgb3ZlcnJpZGU7CisgICAgdm9pZCBkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5z
cGVjdG9yOjpGcm9udGVuZFJvdXRlciosIEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXIqKTsK
KyAgICB2b2lkIHdpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlzY29u
bmVjdFJlYXNvbik7CiAKICAgICAvLyBET01TdG9yYWdlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVy
Ci0gICAgdm9pZCBlbmFibGUoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2b2lkIGRpc2Fi
bGUoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2b2lkIGdldERPTVN0b3JhZ2VJdGVtcyhF
cnJvclN0cmluZyYsIGNvbnN0IEpTT046Ok9iamVjdCYgc3RvcmFnZUlkLCBSZWZQdHI8SlNPTjo6
QXJyYXlPZjxKU09OOjpBcnJheU9mPFN0cmluZz4+PiYgaXRlbXMpIG92ZXJyaWRlOwotICAgIHZv
aWQgc2V0RE9NU3RvcmFnZUl0ZW0oRXJyb3JTdHJpbmcmLCBjb25zdCBKU09OOjpPYmplY3QmIHN0
b3JhZ2VJZCwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUpIG92ZXJyaWRl
OwotICAgIHZvaWQgcmVtb3ZlRE9NU3RvcmFnZUl0ZW0oRXJyb3JTdHJpbmcmLCBjb25zdCBKU09O
OjpPYmplY3QmIHN0b3JhZ2VJZCwgY29uc3QgU3RyaW5nJiBrZXkpIG92ZXJyaWRlOwotICAgIHZv
aWQgY2xlYXJET01TdG9yYWdlSXRlbXMoRXJyb3JTdHJpbmcmLCBjb25zdCBKU09OOjpPYmplY3Qm
IHN0b3JhZ2VJZCkgb3ZlcnJpZGU7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJp
bmdPcjx2b2lkPiBlbmFibGUoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmlu
Z09yPHZvaWQ+IGRpc2FibGUoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmlu
Z09yPFJlZjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTVN0b3JhZ2U6Okl0
ZW0+Pj4gZ2V0RE9NU3RvcmFnZUl0ZW1zKFJlZjxKU09OOjpPYmplY3Q+JiYgc3RvcmFnZUlkKTsK
KyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHNldERPTVN0b3Jh
Z2VJdGVtKFJlZjxKU09OOjpPYmplY3Q+JiYgc3RvcmFnZUlkLCBjb25zdCBTdHJpbmcmIGtleSwg
Y29uc3QgU3RyaW5nJiB2YWx1ZSk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJp
bmdPcjx2b2lkPiByZW1vdmVET01TdG9yYWdlSXRlbShSZWY8SlNPTjo6T2JqZWN0PiYmIHN0b3Jh
Z2VJZCwgY29uc3QgU3RyaW5nJiBrZXkpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8dm9pZD4gY2xlYXJET01TdG9yYWdlSXRlbXMoUmVmPEpTT046Ok9iamVjdD4mJiBz
dG9yYWdlSWQpOwogCiAgICAgLy8gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uCiAgICAgdm9pZCBk
aWREaXNwYXRjaERPTVN0b3JhZ2VFdmVudChjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5n
JiBvbGRWYWx1ZSwgY29uc3QgU3RyaW5nJiBuZXdWYWx1ZSwgU3RvcmFnZVR5cGUsIFNlY3VyaXR5
T3JpZ2luKik7CiAKICAgICAvLyBDb21tYW5kTGluZUFQSQogICAgIHN0YXRpYyBTdHJpbmcgc3Rv
cmFnZUlkKFN0b3JhZ2UmKTsKLSAgICBzdGF0aWMgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRPTVN0b3JhZ2U6OlN0b3JhZ2VJZD4gc3RvcmFnZUlkKFNlY3VyaXR5T3JpZ2luKiwgYm9vbCBp
c0xvY2FsU3RvcmFnZSk7CisgICAgc3RhdGljIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET01T
dG9yYWdlOjpTdG9yYWdlSWQ+IHN0b3JhZ2VJZChTZWN1cml0eU9yaWdpbiosIGJvb2wgaXNMb2Nh
bFN0b3JhZ2UpOwogCiBwcml2YXRlOgotICAgIFJlZlB0cjxTdG9yYWdlQXJlYT4gZmluZFN0b3Jh
Z2VBcmVhKEVycm9yU3RyaW5nJiwgY29uc3QgSlNPTjo6T2JqZWN0JiwgRnJhbWUqJik7CisgICAg
UmVmUHRyPFN0b3JhZ2VBcmVhPiBmaW5kU3RvcmFnZUFyZWEoSW5zcGVjdG9yOjpQcm90b2NvbDo6
RXJyb3JTdHJpbmcmLCBSZWY8SlNPTjo6T2JqZWN0PiYmIHN0b3JhZ2VJZCwgRnJhbWUqJik7CiAK
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW5zcGVjdG9yOjpET01TdG9yYWdlRnJvbnRlbmREaXNwYXRj
aGVyPiBtX2Zyb250ZW5kRGlzcGF0Y2hlcjsKICAgICBSZWZQdHI8SW5zcGVjdG9yOjpET01TdG9y
YWdlQmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRhdGFiYXNlQWdlbnQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JEYXRhYmFzZUFnZW50
LmNwcAppbmRleCA0YjlhNTVkZTU1N2JlOTQ2NzE2ZjVlMDIxMTE0NDM3MTE4MmQ2ZDUyLi4yOWMx
MTRmMjY3NjgzZDI1MDY1MjdhZDdjZjlkNTdmYmIxZTkyZjNjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRhdGFiYXNlQWdlbnQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5j
cHAKQEAgLTU5LDcgKzU5LDcgQEAgbmFtZXNwYWNlIHsKIAogdm9pZCByZXBvcnRUcmFuc2FjdGlv
bkZhaWxlZChFeGVjdXRlU1FMQ2FsbGJhY2smIHJlcXVlc3RDYWxsYmFjaywgU1FMRXJyb3ImIGVy
cm9yKQogewotICAgIGF1dG8gZXJyb3JPYmplY3QgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRh
YmFzZTo6RXJyb3I6OmNyZWF0ZSgpCisgICAgYXV0byBlcnJvck9iamVjdCA9IFByb3RvY29sOjpE
YXRhYmFzZTo6RXJyb3I6OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRNZXNzYWdlKGVycm9yLm1lc3Nh
Z2VJc29sYXRlZENvcHkoKSkKICAgICAgICAgLnNldENvZGUoZXJyb3IuY29kZSgpKQogICAgICAg
ICAucmVsZWFzZSgpOwpAQCAtMjMwLDUxICsyMzAsNDggQEAgdm9pZCBJbnNwZWN0b3JEYXRhYmFz
ZUFnZW50OjpkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9udGVuZFJv
dXQKIAogdm9pZCBJbnNwZWN0b3JEYXRhYmFzZUFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5k
QmFja2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24pCiB7Ci0gICAgRXJyb3JTdHJpbmcg
aWdub3JlZDsKLSAgICBkaXNhYmxlKGlnbm9yZWQpOworICAgIGRpc2FibGUoKTsKIH0KIAotdm9p
ZCBJbnNwZWN0b3JEYXRhYmFzZUFnZW50OjplbmFibGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5n
KQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yRGF0YWJhc2VBZ2VudDo6
ZW5hYmxlKCkKIHsKLSAgICBpZiAobV9pbnN0cnVtZW50aW5nQWdlbnRzLmVuYWJsZWREYXRhYmFz
ZUFnZW50KCkgPT0gdGhpcykgewotICAgICAgICBlcnJvclN0cmluZyA9ICJEYXRhYmFzZSBkb21h
aW4gYWxyZWFkeSBlbmFibGVkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICht
X2luc3RydW1lbnRpbmdBZ2VudHMuZW5hYmxlZERhdGFiYXNlQWdlbnQoKSA9PSB0aGlzKQorICAg
ICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkRhdGFiYXNlIGRvbWFpbiBhbHJlYWR5IGVuYWJs
ZWQiX3MpOwogCiAgICAgbV9pbnN0cnVtZW50aW5nQWdlbnRzLnNldEVuYWJsZWREYXRhYmFzZUFn
ZW50KHRoaXMpOwogCiAgICAgZm9yIChhdXRvJiBkYXRhYmFzZSA6IERhdGFiYXNlVHJhY2tlcjo6
c2luZ2xldG9uKCkub3BlbkRhdGFiYXNlcygpKQogICAgICAgICBkaWRPcGVuRGF0YWJhc2UoZGF0
YWJhc2UuZ2V0KCkpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JEYXRh
YmFzZUFnZW50OjpkaXNhYmxlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZykKK1Byb3RvY29sOjpF
cnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRhdGFiYXNlQWdlbnQ6OmRpc2FibGUoKQogewot
ICAgIGlmIChtX2luc3RydW1lbnRpbmdBZ2VudHMuZW5hYmxlZERhdGFiYXNlQWdlbnQoKSAhPSB0
aGlzKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIkRhdGFiYXNlIGRvbWFpbiBhbHJlYWR5IGRp
c2FibGVkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmIChtX2luc3RydW1lbnRp
bmdBZ2VudHMuZW5hYmxlZERhdGFiYXNlQWdlbnQoKSAhPSB0aGlzKQorICAgICAgICByZXR1cm4g
bWFrZVVuZXhwZWN0ZWQoIkRhdGFiYXNlIGRvbWFpbiBhbHJlYWR5IGRpc2FibGVkIl9zKTsKIAog
ICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy5zZXRFbmFibGVkRGF0YWJhc2VBZ2VudChudWxscHRy
KTsKIAogICAgIG1fcmVzb3VyY2VzLmNsZWFyKCk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12
b2lkIEluc3BlY3RvckRhdGFiYXNlQWdlbnQ6OmdldERhdGFiYXNlVGFibGVOYW1lcyhFcnJvclN0
cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VJZCwgUmVmUHRyPEpTT046
OkFycmF5T2Y8U3RyaW5nPj4mIG5hbWVzKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEpT
T046OkFycmF5T2Y8U3RyaW5nPj4+IEluc3BlY3RvckRhdGFiYXNlQWdlbnQ6OmdldERhdGFiYXNl
VGFibGVOYW1lcyhjb25zdCBQcm90b2NvbDo6RGF0YWJhc2U6OkRhdGFiYXNlSWQmIGRhdGFiYXNl
SWQpCiB7Ci0gICAgaWYgKG1faW5zdHJ1bWVudGluZ0FnZW50cy5lbmFibGVkRGF0YWJhc2VBZ2Vu
dCgpICE9IHRoaXMpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiRGF0YWJhc2UgZG9tYWluIG11
c3QgYmUgZW5hYmxlZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG5hbWVzID0g
SlNPTjo6QXJyYXlPZjxTdHJpbmc+OjpjcmVhdGUoKTsKKyAgICBpZiAobV9pbnN0cnVtZW50aW5n
QWdlbnRzLmVuYWJsZWREYXRhYmFzZUFnZW50KCkgIT0gdGhpcykKKyAgICAgICAgcmV0dXJuIG1h
a2VVbmV4cGVjdGVkKCJEYXRhYmFzZSBkb21haW4gbXVzdCBiZSBlbmFibGVkIl9zKTsKIAorICAg
IGF1dG8gbmFtZXMgPSBKU09OOjpBcnJheU9mPFN0cmluZz46OmNyZWF0ZSgpOwogICAgIGlmIChh
dXRvKiBkYXRhYmFzZSA9IGRhdGFiYXNlRm9ySWQoZGF0YWJhc2VJZCkpIHsKICAgICAgICAgZm9y
IChhdXRvJiB0YWJsZU5hbWUgOiBkYXRhYmFzZS0+dGFibGVOYW1lcygpKQogICAgICAgICAgICAg
bmFtZXMtPmFkZEl0ZW0odGFibGVOYW1lKTsKICAgICB9CisgICAgcmV0dXJuIFdURk1vdmUobmFt
ZXMpOwogfQogCi12b2lkIEluc3BlY3RvckRhdGFiYXNlQWdlbnQ6OmV4ZWN1dGVTUUwoY29uc3Qg
U3RyaW5nJiBkYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIHF1ZXJ5LCBSZWY8RXhlY3V0ZVNRTENh
bGxiYWNrPiYmIHJlcXVlc3RDYWxsYmFjaykKK3ZvaWQgSW5zcGVjdG9yRGF0YWJhc2VBZ2VudDo6
ZXhlY3V0ZVNRTChjb25zdCBQcm90b2NvbDo6RGF0YWJhc2U6OkRhdGFiYXNlSWQmIGRhdGFiYXNl
SWQsIGNvbnN0IFN0cmluZyYgcXVlcnksIFJlZjxFeGVjdXRlU1FMQ2FsbGJhY2s+JiYgcmVxdWVz
dENhbGxiYWNrKQogewogICAgIGlmIChtX2luc3RydW1lbnRpbmdBZ2VudHMuZW5hYmxlZERhdGFi
YXNlQWdlbnQoKSAhPSB0aGlzKSB7CiAgICAgICAgIHJlcXVlc3RDYWxsYmFjay0+c2VuZEZhaWx1
cmUoIkRhdGFiYXNlIGRvbWFpbiBtdXN0IGJlIGVuYWJsZWQiX3MpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JEYXRhYmFzZUFnZW50LmggYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRhdGFiYXNlQWdlbnQuaApp
bmRleCA0MzA1MDMxOTFjZGNiOTg3OWZkYjY1NTEzOWMxNGJiNzdhNzM3NDJmLi4wMWNlZjQzOWI0
YWM2ZGFkMmU0MTI2YjU0MzQxNmM1Mzk0MzJjYmM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRhdGFiYXNlQWdlbnQuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRhdGFiYXNlQWdlbnQuaApAQCAtNDEs
MjQgKzQxLDIyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIERhdGFiYXNlOwogY2xhc3Mg
SW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZTsKIAotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7
Ci0KIGNsYXNzIEluc3BlY3RvckRhdGFiYXNlQWdlbnQgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9y
QWdlbnRCYXNlLCBwdWJsaWMgSW5zcGVjdG9yOjpEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFu
ZGxlciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW5zcGVjdG9yRGF0YWJhc2VBZ2VudCk7
CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgSW5zcGVjdG9yRGF0
YWJhc2VBZ2VudChXZWJBZ2VudENvbnRleHQmKTsKLSAgICB+SW5zcGVjdG9yRGF0YWJhc2VBZ2Vu
dCgpIG92ZXJyaWRlOworICAgIH5JbnNwZWN0b3JEYXRhYmFzZUFnZW50KCk7CiAKICAgICAvLyBJ
bnNwZWN0b3JBZ2VudEJhc2UKLSAgICB2b2lkIGRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJ
bnNwZWN0b3I6OkZyb250ZW5kUm91dGVyKiwgSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlciop
IG92ZXJyaWRlOwotICAgIHZvaWQgd2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVj
dG9yOjpEaXNjb25uZWN0UmVhc29uKSBvdmVycmlkZTsKKyAgICB2b2lkIGRpZENyZWF0ZUZyb250
ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kUm91dGVyKiwgSW5zcGVjdG9yOjpCYWNr
ZW5kRGlzcGF0Y2hlciopOworICAgIHZvaWQgd2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQo
SW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKTsKIAogICAgIC8vIERhdGFiYXNlQmFja2VuZERp
c3BhdGNoZXJIYW5kbGVyCi0gICAgdm9pZCBlbmFibGUoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsK
LSAgICB2b2lkIGRpc2FibGUoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2b2lkIGdldERh
dGFiYXNlVGFibGVOYW1lcyhFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VJZCwg
UmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4mIG5hbWVzKSBvdmVycmlkZTsKLSAgICB2b2lk
IGV4ZWN1dGVTUUwoY29uc3QgU3RyaW5nJiBkYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIHF1ZXJ5
LCBSZWY8RXhlY3V0ZVNRTENhbGxiYWNrPiYmKSBvdmVycmlkZTsKKyAgICBJbnNwZWN0b3I6OlBy
b3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGVuYWJsZSgpOworICAgIEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZGlzYWJsZSgpOworICAgIEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEpTT046OkFycmF5T2Y8U3RyaW5nPj4+IGdldERhdGFi
YXNlVGFibGVOYW1lcyhjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RGF0YWJh
c2VJZCYpOworICAgIHZvaWQgZXhlY3V0ZVNRTChjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpE
YXRhYmFzZTo6RGF0YWJhc2VJZCYsIGNvbnN0IFN0cmluZyYgcXVlcnksIFJlZjxFeGVjdXRlU1FM
Q2FsbGJhY2s+JiYpOwogCiAgICAgLy8gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uCiAgICAgdm9p
ZCBkaWRDb21taXRMb2FkKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
YWdlbnRzL0luc3BlY3RvckluZGV4ZWREQkFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9hZ2VudHMvSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQuY3BwCmluZGV4IGZmOGYzMGY0MDNm
ODVjN2RkYmUzMWIxMGUwM2NlZjVmY2RmN2YwMDYuLmExNDVlMDRlYjIxOGRlOGE0MmZmODk4Mjk4
YjhiZWE2ODJjNGVkZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2Vu
dHMvSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9hZ2VudHMvSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQuY3BwCkBAIC03MCwyNiArNzAsNiBA
QAogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdDb25j
YXRlbmF0ZU51bWJlcnMuaD4KIAotdXNpbmcgSlNPTjo6QXJyYXlPZjsKLXVzaW5nIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkluZGV4ZWREQjo6RGF0YWJhc2VXaXRoT2JqZWN0U3RvcmVzOwotdXNpbmcg
SW5zcGVjdG9yOjpQcm90b2NvbDo6SW5kZXhlZERCOjpEYXRhRW50cnk7Ci11c2luZyBJbnNwZWN0
b3I6OlByb3RvY29sOjpJbmRleGVkREI6OktleTsKLXVzaW5nIEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkluZGV4ZWREQjo6S2V5UGF0aDsKLXVzaW5nIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkluZGV4ZWRE
Qjo6S2V5UmFuZ2U7Ci11c2luZyBJbnNwZWN0b3I6OlByb3RvY29sOjpJbmRleGVkREI6Ok9iamVj
dFN0b3JlOwotdXNpbmcgSW5zcGVjdG9yOjpQcm90b2NvbDo6SW5kZXhlZERCOjpPYmplY3RTdG9y
ZUluZGV4OwotCi10eXBlZGVmIEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNr
QmFzZSBSZXF1ZXN0Q2FsbGJhY2s7Ci10eXBlZGVmIEluc3BlY3Rvcjo6SW5kZXhlZERCQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyOjpSZXF1ZXN0RGF0YWJhc2VOYW1lc0NhbGxiYWNrIFJlcXVlc3RE
YXRhYmFzZU5hbWVzQ2FsbGJhY2s7Ci10eXBlZGVmIEluc3BlY3Rvcjo6SW5kZXhlZERCQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyOjpSZXF1ZXN0RGF0YWJhc2VDYWxsYmFjayBSZXF1ZXN0RGF0YWJh
c2VDYWxsYmFjazsKLXR5cGVkZWYgSW5zcGVjdG9yOjpJbmRleGVkREJCYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXI6OlJlcXVlc3REYXRhQ2FsbGJhY2sgUmVxdWVzdERhdGFDYWxsYmFjazsKLXR5cGVk
ZWYgSW5zcGVjdG9yOjpJbmRleGVkREJCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkNsZWFyT2Jq
ZWN0U3RvcmVDYWxsYmFjayBDbGVhck9iamVjdFN0b3JlQ2FsbGJhY2s7Ci0KLXR5cGVkZWYgU3Ry
aW5nIEVycm9yU3RyaW5nOwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLXVzaW5nIEVycm9yU3Ry
aW5nT3IgPSBFeHBlY3RlZDxULCBFcnJvclN0cmluZz47Ci0KIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKQEAgLTEwMyw3ICs4Myw3IEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIH5FeGVjdXRhYmxlV2l0aERhdGFiYXNlKCkgPSBkZWZhdWx0OwogICAgIHZv
aWQgc3RhcnQoSURCRmFjdG9yeSosIFNlY3VyaXR5T3JpZ2luKiwgY29uc3QgU3RyaW5nJiBkYXRh
YmFzZU5hbWUpOwogICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlKElEQkRhdGFiYXNlJikgPSAwOwot
ICAgIHZpcnR1YWwgUmVxdWVzdENhbGxiYWNrJiByZXF1ZXN0Q2FsbGJhY2soKSA9IDA7CisgICAg
dmlydHVhbCBCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlJiByZXF1ZXN0Q2FsbGJhY2so
KSA9IDA7CiAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCgpIGNvbnN0IHsgcmV0
dXJuIG1fY29udGV4dDsgfQogcHJpdmF0ZToKICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBt
X2NvbnRleHQ7CkBAIC0xNzEsMjAgKzE1MSwyMCBAQCB2b2lkIEV4ZWN1dGFibGVXaXRoRGF0YWJh
c2U6OnN0YXJ0KElEQkZhY3RvcnkqIGlkYkZhY3RvcnksIFNlY3VyaXR5T3JpZ2luKiwgY29ucwog
fQogCiAKLXN0YXRpYyBSZWZQdHI8S2V5UGF0aD4ga2V5UGF0aEZyb21JREJLZXlQYXRoKGNvbnN0
IE9wdGlvbmFsPElEQktleVBhdGg+JiBpZGJLZXlQYXRoKQorc3RhdGljIFJlZjxQcm90b2NvbDo6
SW5kZXhlZERCOjpLZXlQYXRoPiBrZXlQYXRoRnJvbUlEQktleVBhdGgoY29uc3QgT3B0aW9uYWw8
SURCS2V5UGF0aD4mIGlkYktleVBhdGgpCiB7CiAgICAgaWYgKCFpZGJLZXlQYXRoKQotICAgICAg
ICByZXR1cm4gS2V5UGF0aDo6Y3JlYXRlKCkuc2V0VHlwZShLZXlQYXRoOjpUeXBlOjpOdWxsKS5y
ZWxlYXNlKCk7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6SW5kZXhlZERCOjpLZXlQYXRoOjpj
cmVhdGUoKS5zZXRUeXBlKFByb3RvY29sOjpJbmRleGVkREI6OktleVBhdGg6OlR5cGU6Ok51bGwp
LnJlbGVhc2UoKTsKIAogICAgIGF1dG8gdmlzaXRvciA9IFdURjo6bWFrZVZpc2l0b3IoW10oY29u
c3QgU3RyaW5nJiBzdHJpbmcpIHsKLSAgICAgICAgYXV0byBrZXlQYXRoID0gS2V5UGF0aDo6Y3Jl
YXRlKCkuc2V0VHlwZShLZXlQYXRoOjpUeXBlOjpTdHJpbmcpLnJlbGVhc2UoKTsKKyAgICAgICAg
YXV0byBrZXlQYXRoID0gUHJvdG9jb2w6OkluZGV4ZWREQjo6S2V5UGF0aDo6Y3JlYXRlKCkuc2V0
VHlwZShQcm90b2NvbDo6SW5kZXhlZERCOjpLZXlQYXRoOjpUeXBlOjpTdHJpbmcpLnJlbGVhc2Uo
KTsKICAgICAgICAga2V5UGF0aC0+c2V0U3RyaW5nKHN0cmluZyk7CiAgICAgICAgIHJldHVybiBr
ZXlQYXRoOwogICAgIH0sIFtdKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiB2ZWN0b3IpIHsKICAgICAg
ICAgYXV0byBhcnJheSA9IEpTT046OkFycmF5T2Y8U3RyaW5nPjo6Y3JlYXRlKCk7CiAgICAgICAg
IGZvciAoYXV0byYgc3RyaW5nIDogdmVjdG9yKQogICAgICAgICAgICAgYXJyYXktPmFkZEl0ZW0o
c3RyaW5nKTsKLSAgICAgICAgYXV0byBrZXlQYXRoID0gS2V5UGF0aDo6Y3JlYXRlKCkuc2V0VHlw
ZShLZXlQYXRoOjpUeXBlOjpBcnJheSkucmVsZWFzZSgpOworICAgICAgICBhdXRvIGtleVBhdGgg
PSBQcm90b2NvbDo6SW5kZXhlZERCOjpLZXlQYXRoOjpjcmVhdGUoKS5zZXRUeXBlKFByb3RvY29s
OjpJbmRleGVkREI6OktleVBhdGg6OlR5cGU6OkFycmF5KS5yZWxlYXNlKCk7CiAgICAgICAgIGtl
eVBhdGgtPnNldEFycmF5KFdURk1vdmUoYXJyYXkpKTsKICAgICAgICAgcmV0dXJuIGtleVBhdGg7
CiAgICAgfSk7CkBAIC0yMTcsNyArMTk3LDcgQEAgc3RhdGljIFJlZlB0cjxJREJJbmRleD4gaW5k
ZXhGb3JPYmplY3RTdG9yZShJREJPYmplY3RTdG9yZSogaWRiT2JqZWN0U3RvcmUsIGNvbnMKIAog
Y2xhc3MgRGF0YWJhc2VMb2FkZXIgZmluYWwgOiBwdWJsaWMgRXhlY3V0YWJsZVdpdGhEYXRhYmFz
ZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxEYXRhYmFzZUxvYWRlcj4gY3JlYXRlKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFJlZjxSZXF1ZXN0RGF0YWJhc2VDYWxsYmFjaz4m
JiByZXF1ZXN0Q2FsbGJhY2spCisgICAgc3RhdGljIFJlZjxEYXRhYmFzZUxvYWRlcj4gY3JlYXRl
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFJlZjxJbmRleGVkREJCYWNrZW5kRGlz
cGF0Y2hlckhhbmRsZXI6OlJlcXVlc3REYXRhYmFzZUNhbGxiYWNrPiYmIHJlcXVlc3RDYWxsYmFj
aykKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERhdGFiYXNlTG9hZGVyKGNv
bnRleHQsIFdURk1vdmUocmVxdWVzdENhbGxiYWNrKSkpOwogICAgIH0KQEAgLTIzMCwxNyArMjEw
LDE3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybjsKICAgICAKICAgICAgICAgYXV0byYg
ZGF0YWJhc2VJbmZvID0gZGF0YWJhc2UuaW5mbygpOwotICAgICAgICBhdXRvIG9iamVjdFN0b3Jl
cyA9IEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6SW5kZXhlZERCOjpPYmplY3RT
dG9yZT46OmNyZWF0ZSgpOworICAgICAgICBhdXRvIG9iamVjdFN0b3JlcyA9IEpTT046OkFycmF5
T2Y8UHJvdG9jb2w6OkluZGV4ZWREQjo6T2JqZWN0U3RvcmU+OjpjcmVhdGUoKTsKICAgICAgICAg
YXV0byBvYmplY3RTdG9yZU5hbWVzID0gZGF0YWJhc2VJbmZvLm9iamVjdFN0b3JlTmFtZXMoKTsK
ICAgICAgICAgZm9yIChhdXRvJiBuYW1lIDogb2JqZWN0U3RvcmVOYW1lcykgewogICAgICAgICAg
ICAgYXV0byogb2JqZWN0U3RvcmVJbmZvID0gZGF0YWJhc2VJbmZvLmluZm9Gb3JFeGlzdGluZ09i
amVjdFN0b3JlKG5hbWUpOwogICAgICAgICAgICAgaWYgKCFvYmplY3RTdG9yZUluZm8pCiAgICAg
ICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgICAgIGF1dG8gaW5kZXhlcyA9IEpTT046
OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6SW5kZXhlZERCOjpPYmplY3RTdG9yZUluZGV4
Pjo6Y3JlYXRlKCk7CisgICAgICAgICAgICBhdXRvIGluZGV4ZXMgPSBKU09OOjpBcnJheU9mPFBy
b3RvY29sOjpJbmRleGVkREI6Ok9iamVjdFN0b3JlSW5kZXg+OjpjcmVhdGUoKTsKICAgICAKICAg
ICAgICAgICAgIGZvciAoYXV0byYgaW5kZXhJbmZvIDogb2JqZWN0U3RvcmVJbmZvLT5pbmRleE1h
cCgpLnZhbHVlcygpKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBvYmplY3RTdG9yZUluZGV4ID0g
T2JqZWN0U3RvcmVJbmRleDo6Y3JlYXRlKCkKKyAgICAgICAgICAgICAgICBhdXRvIG9iamVjdFN0
b3JlSW5kZXggPSBQcm90b2NvbDo6SW5kZXhlZERCOjpPYmplY3RTdG9yZUluZGV4OjpjcmVhdGUo
KQogICAgICAgICAgICAgICAgICAgICAuc2V0TmFtZShpbmRleEluZm8ubmFtZSgpKQogICAgICAg
ICAgICAgICAgICAgICAuc2V0S2V5UGF0aChrZXlQYXRoRnJvbUlEQktleVBhdGgoaW5kZXhJbmZv
LmtleVBhdGgoKSkpCiAgICAgICAgICAgICAgICAgICAgIC5zZXRVbmlxdWUoaW5kZXhJbmZvLnVu
aXF1ZSgpKQpAQCAtMjQ5LDcgKzIyOSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBpbmRl
eGVzLT5hZGRJdGVtKFdURk1vdmUob2JqZWN0U3RvcmVJbmRleCkpOwogICAgICAgICAgICAgfQog
ICAgIAotICAgICAgICAgICAgYXV0byBvYmplY3RTdG9yZSA9IE9iamVjdFN0b3JlOjpjcmVhdGUo
KQorICAgICAgICAgICAgYXV0byBvYmplY3RTdG9yZSA9IFByb3RvY29sOjpJbmRleGVkREI6Ok9i
amVjdFN0b3JlOjpjcmVhdGUoKQogICAgICAgICAgICAgICAgIC5zZXROYW1lKG9iamVjdFN0b3Jl
SW5mby0+bmFtZSgpKQogICAgICAgICAgICAgICAgIC5zZXRLZXlQYXRoKGtleVBhdGhGcm9tSURC
S2V5UGF0aChvYmplY3RTdG9yZUluZm8tPmtleVBhdGgoKSkpCiAgICAgICAgICAgICAgICAgLnNl
dEF1dG9JbmNyZW1lbnQob2JqZWN0U3RvcmVJbmZvLT5hdXRvSW5jcmVtZW50KCkpCkBAIC0yNTgs
NyArMjM4LDcgQEAgcHVibGljOgogICAgICAgICAgICAgb2JqZWN0U3RvcmVzLT5hZGRJdGVtKFdU
Rk1vdmUob2JqZWN0U3RvcmUpKTsKICAgICAgICAgfQogICAgIAotICAgICAgICBhdXRvIHJlc3Vs
dCA9IERhdGFiYXNlV2l0aE9iamVjdFN0b3Jlczo6Y3JlYXRlKCkKKyAgICAgICAgYXV0byByZXN1
bHQgPSBQcm90b2NvbDo6SW5kZXhlZERCOjpEYXRhYmFzZVdpdGhPYmplY3RTdG9yZXM6OmNyZWF0
ZSgpCiAgICAgICAgICAgICAuc2V0TmFtZShkYXRhYmFzZUluZm8ubmFtZSgpKQogICAgICAgICAg
ICAgLnNldFZlcnNpb24oZGF0YWJhc2VJbmZvLnZlcnNpb24oKSkKICAgICAgICAgICAgIC5zZXRP
YmplY3RTdG9yZXMoV1RGTW92ZShvYmplY3RTdG9yZXMpKQpAQCAtMjY2LDkyICsyNDYsOTYgQEAg
cHVibGljOgogICAgICAgICBtX3JlcXVlc3RDYWxsYmFjay0+c2VuZFN1Y2Nlc3MoV1RGTW92ZShy
ZXN1bHQpKTsKICAgICB9CiAKLSAgICBSZXF1ZXN0Q2FsbGJhY2smIHJlcXVlc3RDYWxsYmFjaygp
IG92ZXJyaWRlIHsgcmV0dXJuIG1fcmVxdWVzdENhbGxiYWNrLmdldCgpOyB9CisgICAgQmFja2Vu
ZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZSYgcmVxdWVzdENhbGxiYWNrKCkgb3ZlcnJpZGUgeyBy
ZXR1cm4gbV9yZXF1ZXN0Q2FsbGJhY2suZ2V0KCk7IH0KIHByaXZhdGU6Ci0gICAgRGF0YWJhc2VM
b2FkZXIoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUmVmPFJlcXVlc3REYXRhYmFz
ZUNhbGxiYWNrPiYmIHJlcXVlc3RDYWxsYmFjaykKKyAgICBEYXRhYmFzZUxvYWRlcihTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBSZWY8SW5kZXhlZERCQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyOjpSZXF1ZXN0RGF0YWJhc2VDYWxsYmFjaz4mJiByZXF1ZXN0Q2FsbGJhY2spCiAgICAg
ICAgIDogRXhlY3V0YWJsZVdpdGhEYXRhYmFzZShjb250ZXh0KQogICAgICAgICAsIG1fcmVxdWVz
dENhbGxiYWNrKFdURk1vdmUocmVxdWVzdENhbGxiYWNrKSkgeyB9Ci0gICAgUmVmPFJlcXVlc3RE
YXRhYmFzZUNhbGxiYWNrPiBtX3JlcXVlc3RDYWxsYmFjazsKKyAgICBSZWY8SW5kZXhlZERCQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyOjpSZXF1ZXN0RGF0YWJhc2VDYWxsYmFjaz4gbV9yZXF1ZXN0
Q2FsbGJhY2s7CiB9OwogCi1zdGF0aWMgUmVmUHRyPElEQktleT4gaWRiS2V5RnJvbUluc3BlY3Rv
ck9iamVjdChKU09OOjpPYmplY3QqIGtleSkKK3N0YXRpYyBSZWZQdHI8SURCS2V5PiBpZGJLZXlG
cm9tSW5zcGVjdG9yT2JqZWN0KFJlZjxKU09OOjpPYmplY3Q+JiYga2V5KQogewotICAgIFN0cmlu
ZyB0eXBlOwotICAgIGlmICgha2V5LT5nZXRTdHJpbmcoInR5cGUiLCB0eXBlKSkKKyAgICBhdXRv
IHR5cGVTdHJpbmcgPSBrZXktPmdldFN0cmluZyhQcm90b2NvbDo6SW5kZXhlZERCOjpLZXk6OnR5
cGVLZXkpOworICAgIGlmICghdHlwZVN0cmluZykKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAK
LSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiBudW1iZXJUeXBlKE1BS0Vf
U1RBVElDX1NUUklOR19JTVBMKCJudW1iZXIiKSk7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVk
PGNvbnN0IFN0cmluZz4gc3RyaW5nVHlwZShNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgic3RyaW5n
IikpOwotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IGRhdGVUeXBlKE1B
S0VfU1RBVElDX1NUUklOR19JTVBMKCJkYXRlIikpOwotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxjb25zdCBTdHJpbmc+IGFycmF5VHlwZShNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgiYXJyYXki
KSk7CisgICAgYXV0byB0eXBlID0gUHJvdG9jb2w6OkhlbHBlcnM6OnBhcnNlRW51bVZhbHVlRnJv
bVN0cmluZzxQcm90b2NvbDo6SW5kZXhlZERCOjpLZXk6OlR5cGU+KHR5cGVTdHJpbmcpOworICAg
IGlmICghdHlwZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBSZWZQdHI8SURCS2V5
PiBpZGJLZXk7Ci0gICAgaWYgKHR5cGUgPT0gbnVtYmVyVHlwZSkgewotICAgICAgICBkb3VibGUg
bnVtYmVyOwotICAgICAgICBpZiAoIWtleS0+Z2V0RG91YmxlKCJudW1iZXIiLCBudW1iZXIpKQor
ICAgIHN3aXRjaCAoKnR5cGUpIHsKKyAgICBjYXNlIFByb3RvY29sOjpJbmRleGVkREI6OktleTo6
VHlwZTo6TnVtYmVyOiB7CisgICAgICAgIGF1dG8gbnVtYmVyID0ga2V5LT5nZXREb3VibGUoUHJv
dG9jb2w6OkluZGV4ZWREQjo6S2V5OjpudW1iZXJLZXkpOworICAgICAgICBpZiAoIW51bWJlcikK
ICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICBpZGJLZXkgPSBJREJLZXk6OmNy
ZWF0ZU51bWJlcihudW1iZXIpOwotICAgIH0gZWxzZSBpZiAodHlwZSA9PSBzdHJpbmdUeXBlKSB7
Ci0gICAgICAgIFN0cmluZyBzdHJpbmc7Ci0gICAgICAgIGlmICgha2V5LT5nZXRTdHJpbmcoInN0
cmluZyIsIHN0cmluZykpCisgICAgICAgIHJldHVybiBJREJLZXk6OmNyZWF0ZU51bWJlcigqbnVt
YmVyKTsKKyAgICB9CisKKyAgICBjYXNlIFByb3RvY29sOjpJbmRleGVkREI6OktleTo6VHlwZTo6
U3RyaW5nOiB7CisgICAgICAgIGF1dG8gc3RyaW5nID0ga2V5LT5nZXRTdHJpbmcoUHJvdG9jb2w6
OkluZGV4ZWREQjo6S2V5OjpzdHJpbmdLZXkpOworICAgICAgICBpZiAoIXN0cmluZykKICAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICBpZGJLZXkgPSBJREJLZXk6OmNyZWF0ZVN0
cmluZyhzdHJpbmcpOwotICAgIH0gZWxzZSBpZiAodHlwZSA9PSBkYXRlVHlwZSkgewotICAgICAg
ICBkb3VibGUgZGF0ZTsKLSAgICAgICAgaWYgKCFrZXktPmdldERvdWJsZSgiZGF0ZSIsIGRhdGUp
KQorICAgICAgICByZXR1cm4gSURCS2V5OjpjcmVhdGVTdHJpbmcoc3RyaW5nKTsKKyAgICB9CisK
KyAgICBjYXNlIFByb3RvY29sOjpJbmRleGVkREI6OktleTo6VHlwZTo6RGF0ZTogeworICAgICAg
ICBhdXRvIGRhdGUgPSBrZXktPmdldERvdWJsZShQcm90b2NvbDo6SW5kZXhlZERCOjpLZXk6OmRh
dGVLZXkpOworICAgICAgICBpZiAoIWRhdGUpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICAgICAgaWRiS2V5ID0gSURCS2V5OjpjcmVhdGVEYXRlKGRhdGUpOwotICAgIH0gZWxzZSBp
ZiAodHlwZSA9PSBhcnJheVR5cGUpIHsKKyAgICAgICAgcmV0dXJuIElEQktleTo6Y3JlYXRlRGF0
ZSgqZGF0ZSk7CisgICAgfQorCisgICAgY2FzZSBQcm90b2NvbDo6SW5kZXhlZERCOjpLZXk6OlR5
cGU6OkFycmF5OiB7CisgICAgICAgIGF1dG8gYXJyYXkgPSBrZXktPmdldEFycmF5KFByb3RvY29s
OjpJbmRleGVkREI6OktleTo6YXJyYXlLZXkpOworICAgICAgICBpZiAoIWFycmF5KQorICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisKICAgICAgICAgVmVjdG9yPFJlZlB0cjxJREJLZXk+PiBr
ZXlBcnJheTsKLSAgICAgICAgUmVmUHRyPEpTT046OkFycmF5PiBhcnJheTsKLSAgICAgICAgaWYg
KCFrZXktPmdldEFycmF5KCJhcnJheSIsIGFycmF5KSkKLSAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFycmF5LT5sZW5ndGgoKTsgKytp
KSB7Ci0gICAgICAgICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHZhbHVlID0gYXJyYXktPmdldChp
KTsKLSAgICAgICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG9iamVjdDsKLSAgICAgICAgICAg
IGlmICghdmFsdWUtPmFzT2JqZWN0KG9iamVjdCkpCisgICAgICAgICAgICBhdXRvIG9iamVjdCA9
IGFycmF5LT5nZXQoaSktPmFzT2JqZWN0KCk7CisgICAgICAgICAgICBpZiAoIW9iamVjdCkKICAg
ICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgICAgIGtleUFycmF5LmFwcGVu
ZChpZGJLZXlGcm9tSW5zcGVjdG9yT2JqZWN0KG9iamVjdC5nZXQoKSkpOworICAgICAgICAgICAg
a2V5QXJyYXkuYXBwZW5kKGlkYktleUZyb21JbnNwZWN0b3JPYmplY3Qob2JqZWN0LnJlbGVhc2VO
b25OdWxsKCkpKTsKICAgICAgICAgfQotICAgICAgICBpZGJLZXkgPSBJREJLZXk6OmNyZWF0ZUFy
cmF5KGtleUFycmF5KTsKLSAgICB9IGVsc2UKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
ICAgIHJldHVybiBJREJLZXk6OmNyZWF0ZUFycmF5KGtleUFycmF5KTsKKyAgICB9CisgICAgfQog
Ci0gICAgcmV0dXJuIGlkYktleTsKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1
cm4gbnVsbHB0cjsKIH0KIAotc3RhdGljIFJlZlB0cjxJREJLZXlSYW5nZT4gaWRiS2V5UmFuZ2VG
cm9tS2V5UmFuZ2UoY29uc3QgSlNPTjo6T2JqZWN0KiBrZXlSYW5nZSkKK3N0YXRpYyBSZWZQdHI8
SURCS2V5UmFuZ2U+IGlkYktleVJhbmdlRnJvbUtleVJhbmdlKEpTT046Ok9iamVjdCYga2V5UmFu
Z2UpCiB7CiAgICAgUmVmUHRyPElEQktleT4gaWRiTG93ZXI7Ci0gICAgUmVmUHRyPEpTT046Ok9i
amVjdD4gbG93ZXI7Ci0gICAgaWYgKGtleVJhbmdlLT5nZXRPYmplY3QoImxvd2VyIl9zLCBsb3dl
cikpIHsKLSAgICAgICAgaWRiTG93ZXIgPSBpZGJLZXlGcm9tSW5zcGVjdG9yT2JqZWN0KGxvd2Vy
LmdldCgpKTsKKyAgICBpZiAoYXV0byBsb3dlciA9IGtleVJhbmdlLmdldE9iamVjdChQcm90b2Nv
bDo6SW5kZXhlZERCOjpLZXlSYW5nZTo6bG93ZXJLZXkpKSB7CisgICAgICAgIGlkYkxvd2VyID0g
aWRiS2V5RnJvbUluc3BlY3Rvck9iamVjdChsb3dlci5yZWxlYXNlTm9uTnVsbCgpKTsKICAgICAg
ICAgaWYgKCFpZGJMb3dlcikKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAog
ICAgIFJlZlB0cjxJREJLZXk+IGlkYlVwcGVyOwotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHVw
cGVyOwotICAgIGlmIChrZXlSYW5nZS0+Z2V0T2JqZWN0KCJ1cHBlciJfcywgdXBwZXIpKSB7Ci0g
ICAgICAgIGlkYlVwcGVyID0gaWRiS2V5RnJvbUluc3BlY3Rvck9iamVjdCh1cHBlci5nZXQoKSk7
CisgICAgaWYgKGF1dG8gdXBwZXIgPSBrZXlSYW5nZS5nZXRPYmplY3QoUHJvdG9jb2w6OkluZGV4
ZWREQjo6S2V5UmFuZ2U6OnVwcGVyS2V5KSkgeworICAgICAgICBpZGJVcHBlciA9IGlkYktleUZy
b21JbnNwZWN0b3JPYmplY3QodXBwZXIucmVsZWFzZU5vbk51bGwoKSk7CiAgICAgICAgIGlmICgh
aWRiVXBwZXIpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKLSAgICBib29s
IGxvd2VyT3BlbjsKLSAgICBpZiAoIWtleVJhbmdlLT5nZXRCb29sZWFuKCJsb3dlck9wZW4iX3Ms
IGxvd2VyT3BlbikpCisgICAgYXV0byBsb3dlck9wZW4gPSBrZXlSYW5nZS5nZXRCb29sZWFuKFBy
b3RvY29sOjpJbmRleGVkREI6OktleVJhbmdlOjpsb3dlck9wZW5LZXkpOworICAgIGlmICghbG93
ZXJPcGVuKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIGJvb2wgdXBwZXJPcGVuOwot
ICAgIGlmICgha2V5UmFuZ2UtPmdldEJvb2xlYW4oInVwcGVyT3BlbiJfcywgdXBwZXJPcGVuKSkK
KyAgICBhdXRvIHVwcGVyT3BlbiA9IGtleVJhbmdlLmdldEJvb2xlYW4oUHJvdG9jb2w6OkluZGV4
ZWREQjo6S2V5UmFuZ2U6OnVwcGVyT3BlbktleSk7CisgICAgaWYgKCF1cHBlck9wZW4pCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJuIElEQktleVJhbmdlOjpjcmVhdGUoV1RG
TW92ZShpZGJMb3dlciksIFdURk1vdmUoaWRiVXBwZXIpLCBsb3dlck9wZW4sIHVwcGVyT3Blbik7
CisgICAgcmV0dXJuIElEQktleVJhbmdlOjpjcmVhdGUoV1RGTW92ZShpZGJMb3dlciksIFdURk1v
dmUoaWRiVXBwZXIpLCAqbG93ZXJPcGVuLCAqdXBwZXJPcGVuKTsKIH0KIAogY2xhc3MgT3BlbkN1
cnNvckNhbGxiYWNrIGZpbmFsIDogcHVibGljIEV2ZW50TGlzdGVuZXIgewogcHVibGljOgotICAg
IHN0YXRpYyBSZWY8T3BlbkN1cnNvckNhbGxiYWNrPiBjcmVhdGUoSW5qZWN0ZWRTY3JpcHQgaW5q
ZWN0ZWRTY3JpcHQsIFJlZjxSZXF1ZXN0RGF0YUNhbGxiYWNrPiYmIHJlcXVlc3RDYWxsYmFjaywg
aW50IHNraXBDb3VudCwgdW5zaWduZWQgcGFnZVNpemUpCisgICAgc3RhdGljIFJlZjxPcGVuQ3Vy
c29yQ2FsbGJhY2s+IGNyZWF0ZShJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdCwgUmVmPElu
ZGV4ZWREQkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UmVxdWVzdERhdGFDYWxsYmFjaz4mJiBy
ZXF1ZXN0Q2FsbGJhY2ssIGludCBza2lwQ291bnQsIHVuc2lnbmVkIHBhZ2VTaXplKQogICAgIHsK
ICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgT3BlbkN1cnNvckNhbGxiYWNrKGluamVjdGVk
U2NyaXB0LCBXVEZNb3ZlKHJlcXVlc3RDYWxsYmFjayksIHNraXBDb3VudCwgcGFnZVNpemUpKTsK
ICAgICB9CkBAIC00MDUsMTMgKzM4OSwyMyBAQCBwdWJsaWM6CiAgICAgICAgIH0KIAogICAgICAg
ICBhdXRvKiBsZXhpY2FsR2xvYmFsT2JqZWN0ID0gY29udGV4dC5leGVjU3RhdGUoKTsKLSAgICAg
ICAgYXV0byBrZXkgPSAgdG9KUygqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmxleGljYWxHbG9iYWxP
YmplY3QsIGN1cnNvci0+a2V5KCkpOwotICAgICAgICBhdXRvIHByaW1hcnlLZXkgPSB0b0pTKCps
ZXhpY2FsR2xvYmFsT2JqZWN0LCAqbGV4aWNhbEdsb2JhbE9iamVjdCwgY3Vyc29yLT5wcmltYXJ5
S2V5KCkpOwotICAgICAgICBhdXRvIHZhbHVlID0gZGVzZXJpYWxpemVJREJWYWx1ZVRvSlNWYWx1
ZSgqbGV4aWNhbEdsb2JhbE9iamVjdCwgY3Vyc29yLT52YWx1ZSgpKTsKLSAgICAgICAgYXV0byBk
YXRhRW50cnkgPSBEYXRhRW50cnk6OmNyZWF0ZSgpCi0gICAgICAgICAgICAuc2V0S2V5KG1faW5q
ZWN0ZWRTY3JpcHQud3JhcE9iamVjdChrZXksIFN0cmluZygpLCB0cnVlKSkKLSAgICAgICAgICAg
IC5zZXRQcmltYXJ5S2V5KG1faW5qZWN0ZWRTY3JpcHQud3JhcE9iamVjdChwcmltYXJ5S2V5LCBT
dHJpbmcoKSwgdHJ1ZSkpCi0gICAgICAgICAgICAuc2V0VmFsdWUobV9pbmplY3RlZFNjcmlwdC53
cmFwT2JqZWN0KHZhbHVlLCBTdHJpbmcoKSwgdHJ1ZSkpCisKKyAgICAgICAgYXV0byBrZXkgPSBt
X2luamVjdGVkU2NyaXB0LndyYXBPYmplY3QodG9KUygqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmxl
eGljYWxHbG9iYWxPYmplY3QsIGN1cnNvci0+a2V5KCkpLCBTdHJpbmcoKSwgdHJ1ZSk7CisgICAg
ICAgIGlmICgha2V5KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGF1dG8gcHJpbWFy
eUtleSA9IG1faW5qZWN0ZWRTY3JpcHQud3JhcE9iamVjdCh0b0pTKCpsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCAqbGV4aWNhbEdsb2JhbE9iamVjdCwgY3Vyc29yLT5wcmltYXJ5S2V5KCkpLCBTdHJpbmco
KSwgdHJ1ZSk7CisgICAgICAgIGlmICghcHJpbWFyeUtleSkKKyAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICBhdXRvIHZhbHVlID0gbV9pbmplY3RlZFNjcmlwdC53cmFwT2JqZWN0KGRlc2Vy
aWFsaXplSURCVmFsdWVUb0pTVmFsdWUoKmxleGljYWxHbG9iYWxPYmplY3QsIGN1cnNvci0+dmFs
dWUoKSksIFN0cmluZygpLCB0cnVlKTsKKyAgICAgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgICAg
IHJldHVybjsKKworICAgICAgICBhdXRvIGRhdGFFbnRyeSA9IFByb3RvY29sOjpJbmRleGVkREI6
OkRhdGFFbnRyeTo6Y3JlYXRlKCkKKyAgICAgICAgICAgIC5zZXRLZXkoa2V5LnJlbGVhc2VOb25O
dWxsKCkpCisgICAgICAgICAgICAuc2V0UHJpbWFyeUtleShwcmltYXJ5S2V5LnJlbGVhc2VOb25O
dWxsKCkpCisgICAgICAgICAgICAuc2V0VmFsdWUodmFsdWUucmVsZWFzZU5vbk51bGwoKSkKICAg
ICAgICAgICAgIC5yZWxlYXNlKCk7CiAgICAgICAgIG1fcmVzdWx0LT5hZGRJdGVtKFdURk1vdmUo
ZGF0YUVudHJ5KSk7CiAgICAgfQpAQCAtNDI0LDI1ICs0MTgsMjUgQEAgcHVibGljOgogICAgIH0K
IAogcHJpdmF0ZToKLSAgICBPcGVuQ3Vyc29yQ2FsbGJhY2soSW5qZWN0ZWRTY3JpcHQgaW5qZWN0
ZWRTY3JpcHQsIFJlZjxSZXF1ZXN0RGF0YUNhbGxiYWNrPiYmIHJlcXVlc3RDYWxsYmFjaywgaW50
IHNraXBDb3VudCwgdW5zaWduZWQgcGFnZVNpemUpCisgICAgT3BlbkN1cnNvckNhbGxiYWNrKElu
amVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0LCBSZWY8SW5kZXhlZERCQmFja2VuZERpc3BhdGNo
ZXJIYW5kbGVyOjpSZXF1ZXN0RGF0YUNhbGxiYWNrPiYmIHJlcXVlc3RDYWxsYmFjaywgaW50IHNr
aXBDb3VudCwgdW5zaWduZWQgcGFnZVNpemUpCiAgICAgICAgIDogRXZlbnRMaXN0ZW5lcihFdmVu
dExpc3RlbmVyOjpDUFBFdmVudExpc3RlbmVyVHlwZSkKICAgICAgICAgLCBtX2luamVjdGVkU2Ny
aXB0KGluamVjdGVkU2NyaXB0KQogICAgICAgICAsIG1fcmVxdWVzdENhbGxiYWNrKFdURk1vdmUo
cmVxdWVzdENhbGxiYWNrKSkKLSAgICAgICAgLCBtX3Jlc3VsdChKU09OOjpBcnJheU9mPERhdGFF
bnRyeT46OmNyZWF0ZSgpKQorICAgICAgICAsIG1fcmVzdWx0KEpTT046OkFycmF5T2Y8UHJvdG9j
b2w6OkluZGV4ZWREQjo6RGF0YUVudHJ5Pjo6Y3JlYXRlKCkpCiAgICAgICAgICwgbV9za2lwQ291
bnQoc2tpcENvdW50KQogICAgICAgICAsIG1fcGFnZVNpemUocGFnZVNpemUpCiAgICAgewogICAg
IH0KICAgICBJbmplY3RlZFNjcmlwdCBtX2luamVjdGVkU2NyaXB0OwotICAgIFJlZjxSZXF1ZXN0
RGF0YUNhbGxiYWNrPiBtX3JlcXVlc3RDYWxsYmFjazsKLSAgICBSZWY8SlNPTjo6QXJyYXlPZjxE
YXRhRW50cnk+PiBtX3Jlc3VsdDsKKyAgICBSZWY8SW5kZXhlZERCQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyOjpSZXF1ZXN0RGF0YUNhbGxiYWNrPiBtX3JlcXVlc3RDYWxsYmFjazsKKyAgICBSZWY8
SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6SW5kZXhlZERCOjpEYXRhRW50cnk+PiBtX3Jlc3VsdDsK
ICAgICBpbnQgbV9za2lwQ291bnQ7CiAgICAgdW5zaWduZWQgbV9wYWdlU2l6ZTsKIH07CiAKIGNs
YXNzIERhdGFMb2FkZXIgZmluYWwgOiBwdWJsaWMgRXhlY3V0YWJsZVdpdGhEYXRhYmFzZSB7CiBw
dWJsaWM6Ci0gICAgc3RhdGljIFJlZjxEYXRhTG9hZGVyPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogY29udGV4dCwgUmVmPFJlcXVlc3REYXRhQ2FsbGJhY2s+JiYgcmVxdWVzdENhbGxi
YWNrLCBjb25zdCBJbmplY3RlZFNjcmlwdCYgaW5qZWN0ZWRTY3JpcHQsIGNvbnN0IFN0cmluZyYg
b2JqZWN0U3RvcmVOYW1lLCBjb25zdCBTdHJpbmcmIGluZGV4TmFtZSwgUmVmUHRyPElEQktleVJh
bmdlPiYmIGlkYktleVJhbmdlLCBpbnQgc2tpcENvdW50LCB1bnNpZ25lZCBwYWdlU2l6ZSkKKyAg
ICBzdGF0aWMgUmVmPERhdGFMb2FkZXI+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBj
b250ZXh0LCBSZWY8SW5kZXhlZERCQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpSZXF1ZXN0RGF0
YUNhbGxiYWNrPiYmIHJlcXVlc3RDYWxsYmFjaywgY29uc3QgSW5qZWN0ZWRTY3JpcHQmIGluamVj
dGVkU2NyaXB0LCBjb25zdCBTdHJpbmcmIG9iamVjdFN0b3JlTmFtZSwgY29uc3QgU3RyaW5nJiBp
bmRleE5hbWUsIFJlZlB0cjxJREJLZXlSYW5nZT4mJiBpZGJLZXlSYW5nZSwgaW50IHNraXBDb3Vu
dCwgdW5zaWduZWQgcGFnZVNpemUpCiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBEYXRhTG9hZGVyKGNvbnRleHQsIFdURk1vdmUocmVxdWVzdENhbGxiYWNrKSwgaW5qZWN0ZWRT
Y3JpcHQsIG9iamVjdFN0b3JlTmFtZSwgaW5kZXhOYW1lLCBXVEZNb3ZlKGlkYktleVJhbmdlKSwg
c2tpcENvdW50LCBwYWdlU2l6ZSkpOwogICAgIH0KQEAgLTQ5OCw4ICs0OTIsOCBAQCBwdWJsaWM6
CiAgICAgICAgIGlkYlJlcXVlc3QtPmFkZEV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLnN1Y2Nl
c3NFdmVudCwgV1RGTW92ZShvcGVuQ3Vyc29yQ2FsbGJhY2spLCBmYWxzZSk7CiAgICAgfQogCi0g
ICAgUmVxdWVzdENhbGxiYWNrJiByZXF1ZXN0Q2FsbGJhY2soKSBvdmVycmlkZSB7IHJldHVybiBt
X3JlcXVlc3RDYWxsYmFjay5nZXQoKTsgfQotICAgIERhdGFMb2FkZXIoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgUmVmPFJlcXVlc3REYXRhQ2FsbGJhY2s+
JiYgcmVxdWVzdENhbGxiYWNrLCBjb25zdCBJbmplY3RlZFNjcmlwdCYgaW5qZWN0ZWRTY3JpcHQs
IGNvbnN0IFN0cmluZyYgb2JqZWN0U3RvcmVOYW1lLCBjb25zdCBTdHJpbmcmIGluZGV4TmFtZSwg
UmVmUHRyPElEQktleVJhbmdlPiBpZGJLZXlSYW5nZSwgaW50IHNraXBDb3VudCwgdW5zaWduZWQg
cGFnZVNpemUpCisgICAgQmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZSYgcmVxdWVzdENh
bGxiYWNrKCkgb3ZlcnJpZGUgeyByZXR1cm4gbV9yZXF1ZXN0Q2FsbGJhY2suZ2V0KCk7IH0KKyAg
ICBEYXRhTG9hZGVyKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQsIFJlZjxJbmRleGVkREJCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlJlcXVlc3REYXRhQ2Fs
bGJhY2s+JiYgcmVxdWVzdENhbGxiYWNrLCBjb25zdCBJbmplY3RlZFNjcmlwdCYgaW5qZWN0ZWRT
Y3JpcHQsIGNvbnN0IFN0cmluZyYgb2JqZWN0U3RvcmVOYW1lLCBjb25zdCBTdHJpbmcmIGluZGV4
TmFtZSwgUmVmUHRyPElEQktleVJhbmdlPiBpZGJLZXlSYW5nZSwgaW50IHNraXBDb3VudCwgdW5z
aWduZWQgcGFnZVNpemUpCiAgICAgICAgIDogRXhlY3V0YWJsZVdpdGhEYXRhYmFzZShzY3JpcHRF
eGVjdXRpb25Db250ZXh0KQogICAgICAgICAsIG1fcmVxdWVzdENhbGxiYWNrKFdURk1vdmUocmVx
dWVzdENhbGxiYWNrKSkKICAgICAgICAgLCBtX2luamVjdGVkU2NyaXB0KGluamVjdGVkU2NyaXB0
KQpAQCAtNTA4LDcgKzUwMiw3IEBAIHB1YmxpYzoKICAgICAgICAgLCBtX2lkYktleVJhbmdlKFdU
Rk1vdmUoaWRiS2V5UmFuZ2UpKQogICAgICAgICAsIG1fc2tpcENvdW50KHNraXBDb3VudCkKICAg
ICAgICAgLCBtX3BhZ2VTaXplKHBhZ2VTaXplKSB7IH0KLSAgICBSZWY8UmVxdWVzdERhdGFDYWxs
YmFjaz4gbV9yZXF1ZXN0Q2FsbGJhY2s7CisgICAgUmVmPEluZGV4ZWREQkJhY2tlbmREaXNwYXRj
aGVySGFuZGxlcjo6UmVxdWVzdERhdGFDYWxsYmFjaz4gbV9yZXF1ZXN0Q2FsbGJhY2s7CiAgICAg
SW5qZWN0ZWRTY3JpcHQgbV9pbmplY3RlZFNjcmlwdDsKICAgICBTdHJpbmcgbV9vYmplY3RTdG9y
ZU5hbWU7CiAgICAgU3RyaW5nIG1faW5kZXhOYW1lOwpAQCAtNTM1LDE5ICs1MjksMjAgQEAgdm9p
ZCBJbnNwZWN0b3JJbmRleGVkREJBZ2VudDo6ZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKElu
c3BlY3Rvcjo6RnJvbnRlbmRSb3UKIAogdm9pZCBJbnNwZWN0b3JJbmRleGVkREJBZ2VudDo6d2ls
bERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKQog
ewotICAgIEVycm9yU3RyaW5nIGlnbm9yZWQ7Ci0gICAgZGlzYWJsZShpZ25vcmVkKTsKKyAgICBk
aXNhYmxlKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQ6OmVuYWJsZShFcnJv
clN0cmluZyYpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JJbmRleGVk
REJBZ2VudDo6ZW5hYmxlKCkKIHsKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3Rv
ckluZGV4ZWREQkFnZW50OjpkaXNhYmxlKEVycm9yU3RyaW5nJikKK1Byb3RvY29sOjpFcnJvclN0
cmluZ09yPHZvaWQ+IEluc3BlY3RvckluZGV4ZWREQkFnZW50OjpkaXNhYmxlKCkKIHsKKyAgICBy
ZXR1cm4geyB9OwogfQogCi1zdGF0aWMgRXJyb3JTdHJpbmdPcjxEb2N1bWVudCo+IGRvY3VtZW50
RnJvbUZyYW1lKEZyYW1lKiBmcmFtZSkKK3N0YXRpYyBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxE
b2N1bWVudCo+IGRvY3VtZW50RnJvbUZyYW1lKEZyYW1lKiBmcmFtZSkKIHsKICAgICBEb2N1bWVu
dCogZG9jdW1lbnQgPSBmcmFtZSA/IGZyYW1lLT5kb2N1bWVudCgpIDogbnVsbHB0cjsKICAgICBp
ZiAoIWRvY3VtZW50KQpAQCAtNTU2LDcgKzU1MSw3IEBAIHN0YXRpYyBFcnJvclN0cmluZ09yPERv
Y3VtZW50Kj4gZG9jdW1lbnRGcm9tRnJhbWUoRnJhbWUqIGZyYW1lKQogICAgIHJldHVybiBkb2N1
bWVudDsKIH0KIAotc3RhdGljIEVycm9yU3RyaW5nT3I8SURCRmFjdG9yeSo+IElEQkZhY3RvcnlG
cm9tRG9jdW1lbnQoRG9jdW1lbnQqIGRvY3VtZW50KQorc3RhdGljIFByb3RvY29sOjpFcnJvclN0
cmluZ09yPElEQkZhY3RvcnkqPiBJREJGYWN0b3J5RnJvbURvY3VtZW50KERvY3VtZW50KiBkb2N1
bWVudCkKIHsKICAgICBET01XaW5kb3cqIGRvbVdpbmRvdyA9IGRvY3VtZW50LT5kb21XaW5kb3co
KTsKICAgICBpZiAoIWRvbVdpbmRvdykKQEAgLTU3MSwxMyArNTY2LDEzIEBAIHN0YXRpYyBFcnJv
clN0cmluZ09yPElEQkZhY3RvcnkqPiBJREJGYWN0b3J5RnJvbURvY3VtZW50KERvY3VtZW50KiBk
b2N1bWVudCkKIAogc3RhdGljIGJvb2wgZ2V0RG9jdW1lbnRBbmRJREJGYWN0b3J5RnJvbUZyYW1l
T3JTZW5kRmFpbHVyZShGcmFtZSogZnJhbWUsIERvY3VtZW50KiYgb3V0X2RvY3VtZW50LCBJREJG
YWN0b3J5KiYgb3V0X2lkYkZhY3RvcnksIEJhY2tlbmREaXNwYXRjaGVyOjpDYWxsYmFja0Jhc2Um
IGNhbGxiYWNrKQogewotICAgIEVycm9yU3RyaW5nT3I8RG9jdW1lbnQqPiBkb2N1bWVudCA9IGRv
Y3VtZW50RnJvbUZyYW1lKGZyYW1lKTsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxEb2N1
bWVudCo+IGRvY3VtZW50ID0gZG9jdW1lbnRGcm9tRnJhbWUoZnJhbWUpOwogICAgIGlmICghZG9j
dW1lbnQuaGFzX3ZhbHVlKCkpIHsKICAgICAgICAgY2FsbGJhY2suc2VuZEZhaWx1cmUoZG9jdW1l
bnQuZXJyb3IoKSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBFcnJvclN0
cmluZ09yPElEQkZhY3RvcnkqPiBpZGJGYWN0b3J5ID0gSURCRmFjdG9yeUZyb21Eb2N1bWVudChk
b2N1bWVudC52YWx1ZSgpKTsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxJREJGYWN0b3J5
Kj4gaWRiRmFjdG9yeSA9IElEQkZhY3RvcnlGcm9tRG9jdW1lbnQoZG9jdW1lbnQudmFsdWUoKSk7
CiAgICAgaWYgKCFpZGJGYWN0b3J5Lmhhc192YWx1ZSgpKSB7CiAgICAgICAgIGNhbGxiYWNrLnNl
bmRGYWlsdXJlKGlkYkZhY3RvcnkuZXJyb3IoKSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAg
LTYyMCw3ICs2MTUsNyBAQCB2b2lkIEluc3BlY3RvckluZGV4ZWREQkFnZW50OjpyZXF1ZXN0RGF0
YWJhc2UoY29uc3QgU3RyaW5nJiBzZWN1cml0eU9yaWdpbiwgY29ucwogICAgIGRhdGFiYXNlTG9h
ZGVyLT5zdGFydChpZGJGYWN0b3J5LCAmZG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luKCksIGRhdGFi
YXNlTmFtZSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQ6OnJlcXVlc3REYXRh
KGNvbnN0IFN0cmluZyYgc2VjdXJpdHlPcmlnaW4sIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VOYW1l
LCBjb25zdCBTdHJpbmcmIG9iamVjdFN0b3JlTmFtZSwgY29uc3QgU3RyaW5nJiBpbmRleE5hbWUs
IGludCBza2lwQ291bnQsIGludCBwYWdlU2l6ZSwgY29uc3QgSlNPTjo6T2JqZWN0KiBrZXlSYW5n
ZSwgUmVmPFJlcXVlc3REYXRhQ2FsbGJhY2s+JiYgY2FsbGJhY2spCit2b2lkIEluc3BlY3Rvcklu
ZGV4ZWREQkFnZW50OjpyZXF1ZXN0RGF0YShjb25zdCBTdHJpbmcmIHNlY3VyaXR5T3JpZ2luLCBj
b25zdCBTdHJpbmcmIGRhdGFiYXNlTmFtZSwgY29uc3QgU3RyaW5nJiBvYmplY3RTdG9yZU5hbWUs
IGNvbnN0IFN0cmluZyYgaW5kZXhOYW1lLCBpbnQgc2tpcENvdW50LCBpbnQgcGFnZVNpemUsIFJl
ZlB0cjxKU09OOjpPYmplY3Q+JiYga2V5UmFuZ2UsIFJlZjxSZXF1ZXN0RGF0YUNhbGxiYWNrPiYm
IGNhbGxiYWNrKQogewogICAgIGF1dG8qIGZyYW1lID0gSW5zcGVjdG9yUGFnZUFnZW50OjpmaW5k
RnJhbWVXaXRoU2VjdXJpdHlPcmlnaW4obV9pbnNwZWN0ZWRQYWdlLCBzZWN1cml0eU9yaWdpbik7
CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50OwpAQCAtNjI5LDcgKzYyNCw3IEBAIHZvaWQgSW5zcGVj
dG9ySW5kZXhlZERCQWdlbnQ6OnJlcXVlc3REYXRhKGNvbnN0IFN0cmluZyYgc2VjdXJpdHlPcmln
aW4sIGNvbnN0IFN0CiAgICAgICAgIHJldHVybjsKIAogICAgIEluamVjdGVkU2NyaXB0IGluamVj
dGVkU2NyaXB0ID0gbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIuaW5qZWN0ZWRTY3JpcHRGb3IobWFp
bldvcmxkRXhlY1N0YXRlKGZyYW1lKSk7Ci0gICAgUmVmUHRyPElEQktleVJhbmdlPiBpZGJLZXlS
YW5nZSA9IGtleVJhbmdlID8gaWRiS2V5UmFuZ2VGcm9tS2V5UmFuZ2Uoa2V5UmFuZ2UpIDogbnVs
bHB0cjsKKyAgICBSZWZQdHI8SURCS2V5UmFuZ2U+IGlkYktleVJhbmdlID0ga2V5UmFuZ2UgPyBp
ZGJLZXlSYW5nZUZyb21LZXlSYW5nZSgqa2V5UmFuZ2UpIDogbnVsbHB0cjsKICAgICBpZiAoa2V5
UmFuZ2UgJiYgIWlkYktleVJhbmdlKSB7CiAgICAgICAgIGNhbGxiYWNrLT5zZW5kRmFpbHVyZSgi
Q291bGQgbm90IHBhcnNlIGtleSByYW5nZS4iX3MpOwogICAgICAgICByZXR1cm47CkBAIC02NDQs
NyArNjM5LDcgQEAgbmFtZXNwYWNlIHsKIGNsYXNzIENsZWFyT2JqZWN0U3RvcmVMaXN0ZW5lciBm
aW5hbCA6IHB1YmxpYyBFdmVudExpc3RlbmVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShD
bGVhck9iamVjdFN0b3JlTGlzdGVuZXIpOwogcHVibGljOgotICAgIHN0YXRpYyBSZWY8Q2xlYXJP
YmplY3RTdG9yZUxpc3RlbmVyPiBjcmVhdGUoUmVmPENsZWFyT2JqZWN0U3RvcmVDYWxsYmFjaz4g
cmVxdWVzdENhbGxiYWNrKQorICAgIHN0YXRpYyBSZWY8Q2xlYXJPYmplY3RTdG9yZUxpc3RlbmVy
PiBjcmVhdGUoUmVmPEluZGV4ZWREQkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6Q2xlYXJPYmpl
Y3RTdG9yZUNhbGxiYWNrPiByZXF1ZXN0Q2FsbGJhY2spCiAgICAgewogICAgICAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBDbGVhck9iamVjdFN0b3JlTGlzdGVuZXIoV1RGTW92ZShyZXF1ZXN0Q2Fs
bGJhY2spKSk7CiAgICAgfQpAQCAtNjY4LDIzICs2NjMsMjMgQEAgcHVibGljOgogICAgICAgICBt
X3JlcXVlc3RDYWxsYmFjay0+c2VuZFN1Y2Nlc3MoKTsKICAgICB9CiBwcml2YXRlOgotICAgIENs
ZWFyT2JqZWN0U3RvcmVMaXN0ZW5lcihSZWY8Q2xlYXJPYmplY3RTdG9yZUNhbGxiYWNrPiYmIHJl
cXVlc3RDYWxsYmFjaykKKyAgICBDbGVhck9iamVjdFN0b3JlTGlzdGVuZXIoUmVmPEluZGV4ZWRE
QkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6Q2xlYXJPYmplY3RTdG9yZUNhbGxiYWNrPiYmIHJl
cXVlc3RDYWxsYmFjaykKICAgICAgICAgOiBFdmVudExpc3RlbmVyKEV2ZW50TGlzdGVuZXI6OkNQ
UEV2ZW50TGlzdGVuZXJUeXBlKQogICAgICAgICAsIG1fcmVxdWVzdENhbGxiYWNrKFdURk1vdmUo
cmVxdWVzdENhbGxiYWNrKSkKICAgICB7CiAgICAgfQogCi0gICAgUmVmPENsZWFyT2JqZWN0U3Rv
cmVDYWxsYmFjaz4gbV9yZXF1ZXN0Q2FsbGJhY2s7CisgICAgUmVmPEluZGV4ZWREQkJhY2tlbmRE
aXNwYXRjaGVySGFuZGxlcjo6Q2xlYXJPYmplY3RTdG9yZUNhbGxiYWNrPiBtX3JlcXVlc3RDYWxs
YmFjazsKIH07CiAKIGNsYXNzIENsZWFyT2JqZWN0U3RvcmUgZmluYWwgOiBwdWJsaWMgRXhlY3V0
YWJsZVdpdGhEYXRhYmFzZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxDbGVhck9iamVjdFN0
b3JlPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5n
JiBvYmplY3RTdG9yZU5hbWUsIFJlZjxDbGVhck9iamVjdFN0b3JlQ2FsbGJhY2s+JiYgcmVxdWVz
dENhbGxiYWNrKQorICAgIHN0YXRpYyBSZWY8Q2xlYXJPYmplY3RTdG9yZT4gY3JlYXRlKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgb2JqZWN0U3RvcmVOYW1l
LCBSZWY8SW5kZXhlZERCQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpDbGVhck9iamVjdFN0b3Jl
Q2FsbGJhY2s+JiYgcmVxdWVzdENhbGxiYWNrKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgQ2xlYXJPYmplY3RTdG9yZShjb250ZXh0LCBvYmplY3RTdG9yZU5hbWUsIFdURk1v
dmUocmVxdWVzdENhbGxiYWNrKSkpOwogICAgIH0KIAotICAgIENsZWFyT2JqZWN0U3RvcmUoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiBvYmplY3RTdG9yZU5h
bWUsIFJlZjxDbGVhck9iamVjdFN0b3JlQ2FsbGJhY2s+JiYgcmVxdWVzdENhbGxiYWNrKQorICAg
IENsZWFyT2JqZWN0U3RvcmUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3Qg
U3RyaW5nJiBvYmplY3RTdG9yZU5hbWUsIFJlZjxJbmRleGVkREJCYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXI6OkNsZWFyT2JqZWN0U3RvcmVDYWxsYmFjaz4mJiByZXF1ZXN0Q2FsbGJhY2spCiAgICAg
ICAgIDogRXhlY3V0YWJsZVdpdGhEYXRhYmFzZShjb250ZXh0KQogICAgICAgICAsIG1fb2JqZWN0
U3RvcmVOYW1lKG9iamVjdFN0b3JlTmFtZSkKICAgICAgICAgLCBtX3JlcXVlc3RDYWxsYmFjayhX
VEZNb3ZlKHJlcXVlc3RDYWxsYmFjaykpCkBAIC03MjMsMTAgKzcxOCwxMCBAQCBwdWJsaWM6CiAg
ICAgICAgIGlkYlRyYW5zYWN0aW9uLT5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5jb21w
bGV0ZUV2ZW50LCBDbGVhck9iamVjdFN0b3JlTGlzdGVuZXI6OmNyZWF0ZShtX3JlcXVlc3RDYWxs
YmFjay5jb3B5UmVmKCkpLCBmYWxzZSk7CiAgICAgfQogCi0gICAgUmVxdWVzdENhbGxiYWNrJiBy
ZXF1ZXN0Q2FsbGJhY2soKSBvdmVycmlkZSB7IHJldHVybiBtX3JlcXVlc3RDYWxsYmFjay5nZXQo
KTsgfQorICAgIEJhY2tlbmREaXNwYXRjaGVyOjpDYWxsYmFja0Jhc2UmIHJlcXVlc3RDYWxsYmFj
aygpIG92ZXJyaWRlIHsgcmV0dXJuIG1fcmVxdWVzdENhbGxiYWNrLmdldCgpOyB9CiBwcml2YXRl
OgogICAgIGNvbnN0IFN0cmluZyBtX29iamVjdFN0b3JlTmFtZTsKLSAgICBSZWY8Q2xlYXJPYmpl
Y3RTdG9yZUNhbGxiYWNrPiBtX3JlcXVlc3RDYWxsYmFjazsKKyAgICBSZWY8SW5kZXhlZERCQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyOjpDbGVhck9iamVjdFN0b3JlQ2FsbGJhY2s+IG1fcmVxdWVz
dENhbGxiYWNrOwogfTsKIAogfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckluZGV4ZWREQkFnZW50Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckluZGV4ZWREQkFnZW50
LmgKaW5kZXggZGIyOTdiZDljZGE4ZGE2YzA0N2FiODJmZjM1MGEyZjRmNTc0OGZlOS4uZTU0NGY5
YzZmMjUzOWM0MTE3MmQ1YzY5MmU0ZDI4MGU1NDMwMjM5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JJbmRleGVkREJBZ2VudC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQuaApA
QCAtNDUsMjYgKzQ1LDI0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgUGFnZTsKIAot
dHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7Ci0KIGNsYXNzIEluc3BlY3RvckluZGV4ZWREQkFn
ZW50IGZpbmFsIDogcHVibGljIEluc3BlY3RvckFnZW50QmFzZSwgcHVibGljIEluc3BlY3Rvcjo6
SW5kZXhlZERCQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShJbnNwZWN0b3JJbmRleGVkREJBZ2VudCk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CiBwdWJsaWM6CiAgICAgSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQoUGFnZUFnZW50Q29udGV4
dCYpOwotICAgIH5JbnNwZWN0b3JJbmRleGVkREJBZ2VudCgpIG92ZXJyaWRlOworICAgIH5JbnNw
ZWN0b3JJbmRleGVkREJBZ2VudCgpOwogCiAgICAgLy8gSW5zcGVjdG9yQWdlbnRCYXNlCi0gICAg
dm9pZCBkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9udGVuZFJvdXRl
ciosIEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXIqKSBvdmVycmlkZTsKLSAgICB2b2lkIHdp
bGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlzY29ubmVjdFJlYXNvbikg
b3ZlcnJpZGU7CisgICAgdm9pZCBkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9y
OjpGcm9udGVuZFJvdXRlciosIEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXIqKTsKKyAgICB2
b2lkIHdpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlzY29ubmVjdFJl
YXNvbik7CiAKICAgICAvLyBJbmRleGVkREJCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIKLSAgICB2
b2lkIGVuYWJsZShFcnJvclN0cmluZyYpIG92ZXJyaWRlOwotICAgIHZvaWQgZGlzYWJsZShFcnJv
clN0cmluZyYpIG92ZXJyaWRlOwotICAgIHZvaWQgcmVxdWVzdERhdGFiYXNlTmFtZXMoY29uc3Qg
U3RyaW5nJiBzZWN1cml0eU9yaWdpbiwgUmVmPFJlcXVlc3REYXRhYmFzZU5hbWVzQ2FsbGJhY2s+
JiYpIG92ZXJyaWRlOwotICAgIHZvaWQgcmVxdWVzdERhdGFiYXNlKGNvbnN0IFN0cmluZyYgc2Vj
dXJpdHlPcmlnaW4sIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VOYW1lLCBSZWY8UmVxdWVzdERhdGFi
YXNlQ2FsbGJhY2s+JiYpIG92ZXJyaWRlOwotICAgIHZvaWQgcmVxdWVzdERhdGEoY29uc3QgU3Ry
aW5nJiBzZWN1cml0eU9yaWdpbiwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZU5hbWUsIGNvbnN0IFN0
cmluZyYgb2JqZWN0U3RvcmVOYW1lLCBjb25zdCBTdHJpbmcmIGluZGV4TmFtZSwgaW50IHNraXBD
b3VudCwgaW50IHBhZ2VTaXplLCBjb25zdCBKU09OOjpPYmplY3QqIGtleVJhbmdlLCBSZWY8UmVx
dWVzdERhdGFDYWxsYmFjaz4mJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjbGVhck9iamVjdFN0b3Jl
KGNvbnN0IFN0cmluZyYgc2VjdXJpdHlPcmlnaW4sIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VOYW1l
LCBjb25zdCBTdHJpbmcmIG9iamVjdFN0b3JlTmFtZSwgUmVmPENsZWFyT2JqZWN0U3RvcmVDYWxs
YmFjaz4mJikgb3ZlcnJpZGU7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdP
cjx2b2lkPiBlbmFibGUoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09y
PHZvaWQ+IGRpc2FibGUoKTsKKyAgICB2b2lkIHJlcXVlc3REYXRhYmFzZU5hbWVzKGNvbnN0IFN0
cmluZyYgc2VjdXJpdHlPcmlnaW4sIFJlZjxSZXF1ZXN0RGF0YWJhc2VOYW1lc0NhbGxiYWNrPiYm
KTsKKyAgICB2b2lkIHJlcXVlc3REYXRhYmFzZShjb25zdCBTdHJpbmcmIHNlY3VyaXR5T3JpZ2lu
LCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlTmFtZSwgUmVmPFJlcXVlc3REYXRhYmFzZUNhbGxiYWNr
PiYmKTsKKyAgICB2b2lkIHJlcXVlc3REYXRhKGNvbnN0IFN0cmluZyYgc2VjdXJpdHlPcmlnaW4s
IGNvbnN0IFN0cmluZyYgZGF0YWJhc2VOYW1lLCBjb25zdCBTdHJpbmcmIG9iamVjdFN0b3JlTmFt
ZSwgY29uc3QgU3RyaW5nJiBpbmRleE5hbWUsIGludCBza2lwQ291bnQsIGludCBwYWdlU2l6ZSwg
UmVmUHRyPEpTT046Ok9iamVjdD4mJiBrZXlSYW5nZSwgUmVmPFJlcXVlc3REYXRhQ2FsbGJhY2s+
JiYpOworICAgIHZvaWQgY2xlYXJPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIHNlY3VyaXR5T3Jp
Z2luLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlTmFtZSwgY29uc3QgU3RyaW5nJiBvYmplY3RTdG9y
ZU5hbWUsIFJlZjxDbGVhck9iamVjdFN0b3JlQ2FsbGJhY2s+JiYpOwogCiBwcml2YXRlOgogICAg
IEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHRNYW5hZ2VyJiBtX2luamVjdGVkU2NyaXB0TWFuYWdl
cjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9y
TGF5ZXJUcmVlQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNw
ZWN0b3JMYXllclRyZWVBZ2VudC5jcHAKaW5kZXggYmI5OTRiZjk5ZmMyNTE2NjlmOGQ3M2E0ZGYw
YjU1ZWMwZjU2YzYxMy4uNTJkM2ZkNzBmNmEyOTlkOWFmMDQ2OTI0ZjRiYWUzZGQ1ZDYwYjExYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JMYXll
clRyZWVBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNw
ZWN0b3JMYXllclRyZWVBZ2VudC5jcHAKQEAgLTYxLDggKzYxLDcgQEAgdm9pZCBJbnNwZWN0b3JM
YXllclRyZWVBZ2VudDo6ZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJv
bnRlbmRSb3UKIAogdm9pZCBJbnNwZWN0b3JMYXllclRyZWVBZ2VudDo6d2lsbERlc3Ryb3lGcm9u
dGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKQogewotICAgIEVycm9y
U3RyaW5nIGlnbm9yZWQ7Ci0gICAgZGlzYWJsZShpZ25vcmVkKTsKKyAgICBkaXNhYmxlKCk7CiB9
CiAKIHZvaWQgSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OnJlc2V0KCkKQEAgLTc0LDE2ICs3Mywy
MCBAQCB2b2lkIEluc3BlY3RvckxheWVyVHJlZUFnZW50OjpyZXNldCgpCiAgICAgbV9zdXBwcmVz
c0xheWVyQ2hhbmdlRXZlbnRzID0gZmFsc2U7CiB9CiAKLXZvaWQgSW5zcGVjdG9yTGF5ZXJUcmVl
QWdlbnQ6OmVuYWJsZShFcnJvclN0cmluZyYpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lk
PiBJbnNwZWN0b3JMYXllclRyZWVBZ2VudDo6ZW5hYmxlKCkKIHsKICAgICBtX2luc3RydW1lbnRp
bmdBZ2VudHMuc2V0RW5hYmxlZExheWVyVHJlZUFnZW50KHRoaXMpOworCisgICAgcmV0dXJuIHsg
fTsKIH0KIAotdm9pZCBJbnNwZWN0b3JMYXllclRyZWVBZ2VudDo6ZGlzYWJsZShFcnJvclN0cmlu
ZyYpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JMYXllclRyZWVBZ2Vu
dDo6ZGlzYWJsZSgpCiB7CiAgICAgbV9pbnN0cnVtZW50aW5nQWdlbnRzLnNldEVuYWJsZWRMYXll
clRyZWVBZ2VudChudWxscHRyKTsKIAogICAgIHJlc2V0KCk7CisKKyAgICByZXR1cm4geyB9Owog
fQogCiB2b2lkIEluc3BlY3RvckxheWVyVHJlZUFnZW50OjpsYXllclRyZWVEaWRDaGFuZ2UoKQpA
QCAtMTA2LDUxICsxMDksNDkgQEAgdm9pZCBJbnNwZWN0b3JMYXllclRyZWVBZ2VudDo6cHNldWRv
RWxlbWVudERlc3Ryb3llZChQc2V1ZG9FbGVtZW50JiBwc2V1ZG9FbGVtZW4KICAgICB1bmJpbmRQ
c2V1ZG9FbGVtZW50KCZwc2V1ZG9FbGVtZW50KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JMYXllclRy
ZWVBZ2VudDo6bGF5ZXJzRm9yTm9kZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2Rl
SWQsIFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkxheWVyVHJlZTo6
TGF5ZXI+PiYgbGF5ZXJzKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEpTT046OkFycmF5
T2Y8UHJvdG9jb2w6OkxheWVyVHJlZTo6TGF5ZXI+Pj4gSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6
OmxheWVyc0Zvck5vZGUoUHJvdG9jb2w6OkRPTTo6Tm9kZUlkIG5vZGVJZCkKIHsKLSAgICBsYXll
cnMgPSBKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkxheWVyVHJlZTo6TGF5ZXI+
OjpjcmVhdGUoKTsKLQogICAgIGF1dG8qIG5vZGUgPSBtX2luc3RydW1lbnRpbmdBZ2VudHMucGVy
c2lzdGVudERPTUFnZW50KCktPm5vZGVGb3JJZChub2RlSWQpOwotICAgIGlmICghbm9kZSkgewot
ICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIG5vZGUgZm9yIGdpdmVuIG5vZGVJZCJfczsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybiBt
YWtlVW5leHBlY3RlZCgiTWlzc2luZyBub2RlIGZvciBnaXZlbiBub2RlSWQiX3MpOwogCiAgICAg
YXV0byogcmVuZGVyZXIgPSBub2RlLT5yZW5kZXJlcigpOwotICAgIGlmICghcmVuZGVyZXIpIHsK
LSAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWlzc2luZyByZW5kZXJlciBvZiBub2RlIGZvciBnaXZl
biBub2RlSWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKCFyZW5kZXJlcikK
KyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJNaXNzaW5nIHJlbmRlcmVyIG9mIG5vZGUg
Zm9yIGdpdmVuIG5vZGVJZCJfcyk7CiAKICAgICBpZiAoIWlzPFJlbmRlckVsZW1lbnQ+KCpyZW5k
ZXJlcikpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJN
aXNzaW5nIHJlbmRlcmVyIG9mIGVsZW1lbnQgZm9yIGdpdmVuIG5vZGVJZCJfcyk7CiAKLSAgICBn
YXRoZXJMYXllcnNVc2luZ1JlbmRlck9iamVjdEhpZXJhcmNoeShlcnJvclN0cmluZywgZG93bmNh
c3Q8UmVuZGVyRWxlbWVudD4oKnJlbmRlcmVyKSwgbGF5ZXJzKTsKKyAgICBhdXRvIGxheWVycyA9
IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkxheWVyVHJlZTo6TGF5ZXI+OjpjcmVhdGUoKTsKKwor
ICAgIGdhdGhlckxheWVyc1VzaW5nUmVuZGVyT2JqZWN0SGllcmFyY2h5KGRvd25jYXN0PFJlbmRl
ckVsZW1lbnQ+KCpyZW5kZXJlciksIGxheWVycyk7CiAKICAgICBtX3N1cHByZXNzTGF5ZXJDaGFu
Z2VFdmVudHMgPSBmYWxzZTsKKworICAgIHJldHVybiBXVEZNb3ZlKGxheWVycyk7CiB9CiAKLXZv
aWQgSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OmdhdGhlckxheWVyc1VzaW5nUmVuZGVyT2JqZWN0
SGllcmFyY2h5KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgUmVuZGVyRWxlbWVudCYgcmVuZGVy
ZXIsIFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkxheWVyVHJlZTo6
TGF5ZXI+PiYgbGF5ZXJzKQordm9pZCBJbnNwZWN0b3JMYXllclRyZWVBZ2VudDo6Z2F0aGVyTGF5
ZXJzVXNpbmdSZW5kZXJPYmplY3RIaWVyYXJjaHkoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIEpT
T046OkFycmF5T2Y8UHJvdG9jb2w6OkxheWVyVHJlZTo6TGF5ZXI+JiBsYXllcnMpCiB7CiAgICAg
aWYgKHJlbmRlcmVyLmhhc0xheWVyKCkpIHsKLSAgICAgICAgZ2F0aGVyTGF5ZXJzVXNpbmdSZW5k
ZXJMYXllckhpZXJhcmNoeShlcnJvclN0cmluZywgZG93bmNhc3Q8UmVuZGVyTGF5ZXJNb2RlbE9i
amVjdD4ocmVuZGVyZXIpLmxheWVyKCksIGxheWVycyk7CisgICAgICAgIGdhdGhlckxheWVyc1Vz
aW5nUmVuZGVyTGF5ZXJIaWVyYXJjaHkoZG93bmNhc3Q8UmVuZGVyTGF5ZXJNb2RlbE9iamVjdD4o
cmVuZGVyZXIpLmxheWVyKCksIGxheWVycyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAg
ICBmb3IgKGF1dG8mIGNoaWxkIDogY2hpbGRyZW5PZlR5cGU8UmVuZGVyRWxlbWVudD4ocmVuZGVy
ZXIpKQotICAgICAgICBnYXRoZXJMYXllcnNVc2luZ1JlbmRlck9iamVjdEhpZXJhcmNoeShlcnJv
clN0cmluZywgY2hpbGQsIGxheWVycyk7CisgICAgICAgIGdhdGhlckxheWVyc1VzaW5nUmVuZGVy
T2JqZWN0SGllcmFyY2h5KGNoaWxkLCBsYXllcnMpOwogfQogCi12b2lkIEluc3BlY3RvckxheWVy
VHJlZUFnZW50OjpnYXRoZXJMYXllcnNVc2luZ1JlbmRlckxheWVySGllcmFyY2h5KEVycm9yU3Ry
aW5nJiBlcnJvclN0cmluZywgUmVuZGVyTGF5ZXIqIHJlbmRlckxheWVyLCBSZWZQdHI8SlNPTjo6
QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpMYXllclRyZWU6OkxheWVyPj4mIGxheWVycykK
K3ZvaWQgSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OmdhdGhlckxheWVyc1VzaW5nUmVuZGVyTGF5
ZXJIaWVyYXJjaHkoUmVuZGVyTGF5ZXIqIHJlbmRlckxheWVyLCBKU09OOjpBcnJheU9mPFByb3Rv
Y29sOjpMYXllclRyZWU6OkxheWVyPiYgbGF5ZXJzKQogewogICAgIGlmIChyZW5kZXJMYXllci0+
aXNDb21wb3NpdGVkKCkpCi0gICAgICAgIGxheWVycy0+YWRkSXRlbShidWlsZE9iamVjdEZvckxh
eWVyKGVycm9yU3RyaW5nLCByZW5kZXJMYXllcikpOworICAgICAgICBsYXllcnMuYWRkSXRlbShi
dWlsZE9iamVjdEZvckxheWVyKHJlbmRlckxheWVyKSk7CiAKICAgICBmb3IgKHJlbmRlckxheWVy
ID0gcmVuZGVyTGF5ZXItPmZpcnN0Q2hpbGQoKTsgcmVuZGVyTGF5ZXI7IHJlbmRlckxheWVyID0g
cmVuZGVyTGF5ZXItPm5leHRTaWJsaW5nKCkpCi0gICAgICAgIGdhdGhlckxheWVyc1VzaW5nUmVu
ZGVyTGF5ZXJIaWVyYXJjaHkoZXJyb3JTdHJpbmcsIHJlbmRlckxheWVyLCBsYXllcnMpOworICAg
ICAgICBnYXRoZXJMYXllcnNVc2luZ1JlbmRlckxheWVySGllcmFyY2h5KHJlbmRlckxheWVyLCBs
YXllcnMpOwogfQogCi1SZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6TGF5ZXJUcmVlOjpMYXllcj4g
SW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yTGF5ZXIoRXJyb3JTdHJpbmcm
IGVycm9yU3RyaW5nLCBSZW5kZXJMYXllciogcmVuZGVyTGF5ZXIpCitSZWY8UHJvdG9jb2w6Okxh
eWVyVHJlZTo6TGF5ZXI+IEluc3BlY3RvckxheWVyVHJlZUFnZW50OjpidWlsZE9iamVjdEZvckxh
eWVyKFJlbmRlckxheWVyKiByZW5kZXJMYXllcikKIHsKICAgICBSZW5kZXJPYmplY3QqIHJlbmRl
cmVyID0gJnJlbmRlckxheWVyLT5yZW5kZXJlcigpOwogICAgIFJlbmRlckxheWVyQmFja2luZyog
YmFja2luZyA9IHJlbmRlckxheWVyLT5iYWNraW5nKCk7CkBAIC0xNzAsOSArMTcxLDkgQEAgUmVm
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkxheWVyVHJlZTo6TGF5ZXI+IEluc3BlY3RvckxheWVyVHJl
ZUFnZW50OjpidWlsZE9iamVjdEYKICAgICAgICAgbm9kZSA9IHJlbmRlcmVyLT5wYXJlbnQoKS0+
ZWxlbWVudCgpOwogCiAgICAgLy8gQmFzaWMgc2V0IG9mIHByb3BlcnRpZXMuCi0gICAgYXV0byBs
YXllck9iamVjdCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkxheWVyVHJlZTo6TGF5ZXI6OmNyZWF0
ZSgpCisgICAgYXV0byBsYXllck9iamVjdCA9IFByb3RvY29sOjpMYXllclRyZWU6OkxheWVyOjpj
cmVhdGUoKQogICAgICAgICAuc2V0TGF5ZXJJZChiaW5kKHJlbmRlckxheWVyKSkKLSAgICAgICAg
LnNldE5vZGVJZChpZEZvck5vZGUoZXJyb3JTdHJpbmcsIG5vZGUpKQorICAgICAgICAuc2V0Tm9k
ZUlkKGlkRm9yTm9kZShub2RlKSkKICAgICAgICAgLnNldEJvdW5kcyhidWlsZE9iamVjdEZvcklu
dFJlY3QocmVuZGVyZXItPmFic29sdXRlQm91bmRpbmdCb3hSZWN0KCkpKQogICAgICAgICAuc2V0
TWVtb3J5KGJhY2tpbmctPmJhY2tpbmdTdG9yZU1lbW9yeUVzdGltYXRlKCkpCiAgICAgICAgIC5z
ZXRDb21wb3NpdGVkQm91bmRzKGJ1aWxkT2JqZWN0Rm9ySW50UmVjdChlbmNsb3NpbmdJbnRSZWN0
KGJhY2tpbmctPmNvbXBvc2l0ZWRCb3VuZHMoKSkpKQpAQCAtMjA5LDI1ICsyMTAsMjUgQEAgUmVm
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkxheWVyVHJlZTo6TGF5ZXI+IEluc3BlY3RvckxheWVyVHJl
ZUFnZW50OjpidWlsZE9iamVjdEYKICAgICByZXR1cm4gbGF5ZXJPYmplY3Q7CiB9CiAKLWludCBJ
bnNwZWN0b3JMYXllclRyZWVBZ2VudDo6aWRGb3JOb2RlKEVycm9yU3RyaW5nJiBlcnJvclN0cmlu
ZywgTm9kZSogbm9kZSkKK1Byb3RvY29sOjpET006Ok5vZGVJZCBJbnNwZWN0b3JMYXllclRyZWVB
Z2VudDo6aWRGb3JOb2RlKE5vZGUqIG5vZGUpCiB7CiAgICAgaWYgKCFub2RlKQogICAgICAgICBy
ZXR1cm4gMDsKIAogICAgIEluc3BlY3RvckRPTUFnZW50KiBkb21BZ2VudCA9IG1faW5zdHJ1bWVu
dGluZ0FnZW50cy5wZXJzaXN0ZW50RE9NQWdlbnQoKTsKICAgICAKLSAgICBpbnQgbm9kZUlkID0g
ZG9tQWdlbnQtPmJvdW5kTm9kZUlkKG5vZGUpOworICAgIGF1dG8gbm9kZUlkID0gZG9tQWdlbnQt
PmJvdW5kTm9kZUlkKG5vZGUpOwogICAgIGlmICghbm9kZUlkKSB7CiAgICAgICAgIC8vIEZJWE1F
OiA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMjEzNDk5PiBXZWIgSW5zcGVjdG9yOiBhbGxvdyBET00g
bm9kZXMgdG8gYmUgaW5zdHJ1bWVudGVkIGF0IGFueSBwb2ludCwgcmVnYXJkbGVzcyBvZiB3aGV0
aGVyIHRoZSBtYWluIGRvY3VtZW50IGhhcyBhbHNvIGJlZW4gaW5zdHJ1bWVudGVkCi0gICAgICAg
IG5vZGVJZCA9IGRvbUFnZW50LT5wdXNoTm9kZVRvRnJvbnRlbmQoZXJyb3JTdHJpbmcsIGRvbUFn
ZW50LT5ib3VuZE5vZGVJZCgmbm9kZS0+ZG9jdW1lbnQoKSksIG5vZGUpOworICAgICAgICBub2Rl
SWQgPSBkb21BZ2VudC0+cHVzaE5vZGVUb0Zyb250ZW5kKG5vZGUpOwogICAgIH0KIAogICAgIHJl
dHVybiBub2RlSWQ7CiB9CiAKLVJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpMYXllclRyZWU6Oklu
dFJlY3Q+IEluc3BlY3RvckxheWVyVHJlZUFnZW50OjpidWlsZE9iamVjdEZvckludFJlY3QoY29u
c3QgSW50UmVjdCYgcmVjdCkKK1JlZjxQcm90b2NvbDo6TGF5ZXJUcmVlOjpJbnRSZWN0PiBJbnNw
ZWN0b3JMYXllclRyZWVBZ2VudDo6YnVpbGRPYmplY3RGb3JJbnRSZWN0KGNvbnN0IEludFJlY3Qm
IHJlY3QpCiB7Ci0gICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkxheWVyVHJlZTo6SW50
UmVjdDo6Y3JlYXRlKCkKKyAgICByZXR1cm4gUHJvdG9jb2w6OkxheWVyVHJlZTo6SW50UmVjdDo6
Y3JlYXRlKCkKICAgICAgICAgLnNldFgocmVjdC54KCkpCiAgICAgICAgIC5zZXRZKHJlY3QueSgp
KQogICAgICAgICAuc2V0V2lkdGgocmVjdC53aWR0aCgpKQpAQCAtMjM1LDE3ICsyMzYsMTUgQEAg
UmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkxheWVyVHJlZTo6SW50UmVjdD4gSW5zcGVjdG9yTGF5
ZXJUcmVlQWdlbnQ6OmJ1aWxkT2JqZWMKICAgICAgICAgLnJlbGVhc2UoKTsKIH0KIAotdm9pZCBJ
bnNwZWN0b3JMYXllclRyZWVBZ2VudDo6cmVhc29uc0ZvckNvbXBvc2l0aW5nTGF5ZXIoRXJyb3JT
dHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGxheWVySWQsIFJlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpMYXllclRyZWU6OkNvbXBvc2l0aW5nUmVhc29ucz4mIGNvbXBvc2l0aW5n
UmVhc29uc1Jlc3VsdCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxQcm90b2NvbDo6TGF5
ZXJUcmVlOjpDb21wb3NpdGluZ1JlYXNvbnM+PiBJbnNwZWN0b3JMYXllclRyZWVBZ2VudDo6cmVh
c29uc0ZvckNvbXBvc2l0aW5nTGF5ZXIoY29uc3QgUHJvdG9jb2w6OkxheWVyVHJlZTo6TGF5ZXJJ
ZCYgbGF5ZXJJZCkKIHsKICAgICBjb25zdCBSZW5kZXJMYXllciogcmVuZGVyTGF5ZXIgPSBtX2lk
VG9MYXllci5nZXQobGF5ZXJJZCk7CiAKLSAgICBpZiAoIXJlbmRlckxheWVyKSB7Ci0gICAgICAg
IGVycm9yU3RyaW5nID0gIk1pc3NpbmcgcmVuZGVyIGxheWVyIGZvciBnaXZlbiBsYXllcklkIl9z
OwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghcmVuZGVyTGF5ZXIpCisgICAgICAg
IHJldHVybiBtYWtlVW5leHBlY3RlZCgiTWlzc2luZyByZW5kZXIgbGF5ZXIgZm9yIGdpdmVuIGxh
eWVySWQiX3MpOwogCiAgICAgT3B0aW9uU2V0PENvbXBvc2l0aW5nUmVhc29uPiByZWFzb25zID0g
cmVuZGVyTGF5ZXItPmNvbXBvc2l0b3IoKS5yZWFzb25zRm9yQ29tcG9zaXRpbmcoKnJlbmRlckxh
eWVyKTsKLSAgICBhdXRvIGNvbXBvc2l0aW5nUmVhc29ucyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkxheWVyVHJlZTo6Q29tcG9zaXRpbmdSZWFzb25zOjpjcmVhdGUoKS5yZWxlYXNlKCk7CisgICAg
YXV0byBjb21wb3NpdGluZ1JlYXNvbnMgPSBQcm90b2NvbDo6TGF5ZXJUcmVlOjpDb21wb3NpdGlu
Z1JlYXNvbnM6OmNyZWF0ZSgpLnJlbGVhc2UoKTsKIAogICAgIGlmIChyZWFzb25zLmNvbnRhaW5z
KENvbXBvc2l0aW5nUmVhc29uOjpUcmFuc2Zvcm0zRCkpCiAgICAgICAgIGNvbXBvc2l0aW5nUmVh
c29ucy0+c2V0VHJhbnNmb3JtM0QodHJ1ZSk7CkBAIC0zMjQsNyArMzIzLDcgQEAgdm9pZCBJbnNw
ZWN0b3JMYXllclRyZWVBZ2VudDo6cmVhc29uc0ZvckNvbXBvc2l0aW5nTGF5ZXIoRXJyb3JTdHJp
bmcmIGVycm9yU3RyaW4KICAgICBpZiAocmVhc29ucy5jb250YWlucyhDb21wb3NpdGluZ1JlYXNv
bjo6Um9vdCkpCiAgICAgICAgIGNvbXBvc2l0aW5nUmVhc29ucy0+c2V0Um9vdCh0cnVlKTsKIAot
ICAgIGNvbXBvc2l0aW5nUmVhc29uc1Jlc3VsdCA9IFdURk1vdmUoY29tcG9zaXRpbmdSZWFzb25z
KTsKKyAgICByZXR1cm4gV1RGTW92ZShjb21wb3NpdGluZ1JlYXNvbnMpOwogfQogCiBTdHJpbmcg
SW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OmJpbmQoY29uc3QgUmVuZGVyTGF5ZXIqIGxheWVyKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JMYXll
clRyZWVBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JM
YXllclRyZWVBZ2VudC5oCmluZGV4IDg3MjM1ODBjNjUzMDEwZTFlZWE2MGQ0MGU5Y2Q5ZDczMjM1
OGQ5ZmIuLjVmMTE1MzFjYzY0NDQyOWY0OGQxZDZkODE1NTFkZDg0YjlmOTRjY2MgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yTGF5ZXJUcmVlQWdl
bnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckxheWVy
VHJlZUFnZW50LmgKQEAgLTQyLDI0ICs0MiwyMiBAQCBjbGFzcyBQc2V1ZG9FbGVtZW50OwogY2xh
c3MgUmVuZGVyRWxlbWVudDsKIGNsYXNzIFJlbmRlckxheWVyOwogCi10eXBlZGVmIFN0cmluZyBF
cnJvclN0cmluZzsKLQogY2xhc3MgSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQgZmluYWwgOiBwdWJs
aWMgSW5zcGVjdG9yQWdlbnRCYXNlLCBwdWJsaWMgSW5zcGVjdG9yOjpMYXllclRyZWVCYWNrZW5k
RGlzcGF0Y2hlckhhbmRsZXIgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEluc3BlY3Rvckxh
eWVyVHJlZUFnZW50KTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAg
ICBJbnNwZWN0b3JMYXllclRyZWVBZ2VudChXZWJBZ2VudENvbnRleHQmKTsKLSAgICB+SW5zcGVj
dG9yTGF5ZXJUcmVlQWdlbnQoKSBvdmVycmlkZTsKKyAgICB+SW5zcGVjdG9yTGF5ZXJUcmVlQWdl
bnQoKTsKIAogICAgIC8vIEluc3BlY3RvckFnZW50QmFzZQotICAgIHZvaWQgZGlkQ3JlYXRlRnJv
bnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRSb3V0ZXIqLCBJbnNwZWN0b3I6OkJh
Y2tlbmREaXNwYXRjaGVyKikgb3ZlcnJpZGU7Ci0gICAgdm9pZCB3aWxsRGVzdHJveUZyb250ZW5k
QW5kQmFja2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24pIG92ZXJyaWRlOworICAgIHZv
aWQgZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRSb3V0ZXIq
LCBJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyKik7CisgICAgdm9pZCB3aWxsRGVzdHJveUZy
b250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24pOwogCiAgICAgLy8g
TGF5ZXJUcmVlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyCi0gICAgdm9pZCBlbmFibGUoRXJyb3JT
dHJpbmcmKSBvdmVycmlkZTsKLSAgICB2b2lkIGRpc2FibGUoRXJyb3JTdHJpbmcmKSBvdmVycmlk
ZTsKLSAgICB2b2lkIGxheWVyc0Zvck5vZGUoRXJyb3JTdHJpbmcmLCBpbnQgbm9kZUlkLCBSZWZQ
dHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpMYXllclRyZWU6OkxheWVyPj4m
KSBvdmVycmlkZTsKLSAgICB2b2lkIHJlYXNvbnNGb3JDb21wb3NpdGluZ0xheWVyKEVycm9yU3Ry
aW5nJiwgY29uc3QgU3RyaW5nJiBsYXllcklkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
TGF5ZXJUcmVlOjpDb21wb3NpdGluZ1JlYXNvbnM+Jikgb3ZlcnJpZGU7CisgICAgSW5zcGVjdG9y
OjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBlbmFibGUoKTsKKyAgICBJbnNwZWN0b3I6
OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGRpc2FibGUoKTsKKyAgICBJbnNwZWN0b3I6
OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkxheWVyVHJlZTo6TGF5ZXI+Pj4gbGF5ZXJzRm9yTm9kZShJbnNwZWN0b3I6OlByb3Rv
Y29sOjpET006Ok5vZGVJZCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdP
cjxSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6TGF5ZXJUcmVlOjpDb21wb3NpdGluZ1JlYXNvbnM+
PiByZWFzb25zRm9yQ29tcG9zaXRpbmdMYXllcihjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpM
YXllclRyZWU6OkxheWVySWQmKTsKIAogICAgIC8vIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbgog
ICAgIHZvaWQgbGF5ZXJUcmVlRGlkQ2hhbmdlKCk7CkBAIC03MiwxMyArNzAsMTMgQEAgcHJpdmF0
ZToKICAgICBTdHJpbmcgYmluZChjb25zdCBSZW5kZXJMYXllciopOwogICAgIHZvaWQgdW5iaW5k
KGNvbnN0IFJlbmRlckxheWVyKik7CiAKLSAgICB2b2lkIGdhdGhlckxheWVyc1VzaW5nUmVuZGVy
T2JqZWN0SGllcmFyY2h5KEVycm9yU3RyaW5nJiwgUmVuZGVyRWxlbWVudCYsIFJlZlB0cjxKU09O
OjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkxheWVyVHJlZTo6TGF5ZXI+PiYpOwotICAg
IHZvaWQgZ2F0aGVyTGF5ZXJzVXNpbmdSZW5kZXJMYXllckhpZXJhcmNoeShFcnJvclN0cmluZyYs
IFJlbmRlckxheWVyKiwgUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6
TGF5ZXJUcmVlOjpMYXllcj4+Jik7CisgICAgdm9pZCBnYXRoZXJMYXllcnNVc2luZ1JlbmRlck9i
amVjdEhpZXJhcmNoeShSZW5kZXJFbGVtZW50JiwgSlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpMYXllclRyZWU6OkxheWVyPiYpOworICAgIHZvaWQgZ2F0aGVyTGF5ZXJzVXNpbmdS
ZW5kZXJMYXllckhpZXJhcmNoeShSZW5kZXJMYXllciosIEpTT046OkFycmF5T2Y8SW5zcGVjdG9y
OjpQcm90b2NvbDo6TGF5ZXJUcmVlOjpMYXllcj4mKTsKIAotICAgIFJlZjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpMYXllclRyZWU6OkxheWVyPiBidWlsZE9iamVjdEZvckxheWVyKEVycm9yU3RyaW5n
JiwgUmVuZGVyTGF5ZXIqKTsKKyAgICBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6TGF5ZXJUcmVl
OjpMYXllcj4gYnVpbGRPYmplY3RGb3JMYXllcihSZW5kZXJMYXllciopOwogICAgIFJlZjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpMYXllclRyZWU6OkludFJlY3Q+IGJ1aWxkT2JqZWN0Rm9ySW50UmVj
dChjb25zdCBJbnRSZWN0Jik7CiAKLSAgICBpbnQgaWRGb3JOb2RlKEVycm9yU3RyaW5nJiwgTm9k
ZSopOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkIGlkRm9yTm9kZShOb2Rl
Kik7CiAKICAgICBTdHJpbmcgYmluZFBzZXVkb0VsZW1lbnQoUHNldWRvRWxlbWVudCopOwogICAg
IHZvaWQgdW5iaW5kUHNldWRvRWxlbWVudChQc2V1ZG9FbGVtZW50Kik7CkBAIC04NiwxMSArODQs
MTEgQEAgcHJpdmF0ZToKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW5zcGVjdG9yOjpMYXllclRyZWVG
cm9udGVuZERpc3BhdGNoZXI+IG1fZnJvbnRlbmREaXNwYXRjaGVyOwogICAgIFJlZlB0cjxJbnNw
ZWN0b3I6OkxheWVyVHJlZUJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOwog
Ci0gICAgSGFzaE1hcDxjb25zdCBSZW5kZXJMYXllciosIFN0cmluZz4gbV9kb2N1bWVudExheWVy
VG9JZE1hcDsKLSAgICBIYXNoTWFwPFN0cmluZywgY29uc3QgUmVuZGVyTGF5ZXIqPiBtX2lkVG9M
YXllcjsKKyAgICBIYXNoTWFwPGNvbnN0IFJlbmRlckxheWVyKiwgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6TGF5ZXJUcmVlOjpMYXllcklkPiBtX2RvY3VtZW50TGF5ZXJUb0lkTWFwOworICAgIEhhc2hN
YXA8SW5zcGVjdG9yOjpQcm90b2NvbDo6TGF5ZXJUcmVlOjpMYXllcklkLCBjb25zdCBSZW5kZXJM
YXllcio+IG1faWRUb0xheWVyOwogCi0gICAgSGFzaE1hcDxQc2V1ZG9FbGVtZW50KiwgU3RyaW5n
PiBtX3BzZXVkb0VsZW1lbnRUb0lkTWFwOwotICAgIEhhc2hNYXA8U3RyaW5nLCBQc2V1ZG9FbGVt
ZW50Kj4gbV9pZFRvUHNldWRvRWxlbWVudDsKKyAgICBIYXNoTWFwPFBzZXVkb0VsZW1lbnQqLCBJ
bnNwZWN0b3I6OlByb3RvY29sOjpMYXllclRyZWU6OlBzZXVkb0VsZW1lbnRJZD4gbV9wc2V1ZG9F
bGVtZW50VG9JZE1hcDsKKyAgICBIYXNoTWFwPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkxheWVyVHJl
ZTo6UHNldWRvRWxlbWVudElkLCBQc2V1ZG9FbGVtZW50Kj4gbV9pZFRvUHNldWRvRWxlbWVudDsK
IAogICAgIGJvb2wgbV9zdXBwcmVzc0xheWVyQ2hhbmdlRXZlbnRzIHsgZmFsc2UgfTsKIH07CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rvck1lbW9y
eUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yTWVt
b3J5QWdlbnQuY3BwCmluZGV4IGQwZThhYTY4ODMzNjU5ZTY0YWZlNTUzNDdjYjU2Zjc3M2ViN2Q3
YTUuLjE0Y2U2NzA5NmEyNDI0NDk0YzU5MjQ2NjA4NmExZDFlMjg3NzQxMDkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yTWVtb3J5QWdlbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yTWVtb3J5QWdl
bnQuY3BwCkBAIC01NCw0MCArNTQsMzkgQEAgdm9pZCBJbnNwZWN0b3JNZW1vcnlBZ2VudDo6ZGlk
Q3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEZyb250ZW5kUm91dGVyKiwgQmFja2VuZEQKIAogdm9p
ZCBJbnNwZWN0b3JNZW1vcnlBZ2VudDo6d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoRGlz
Y29ubmVjdFJlYXNvbikKIHsKLSAgICBFcnJvclN0cmluZyBpZ25vcmVkOwotICAgIGRpc2FibGUo
aWdub3JlZCk7CisgICAgZGlzYWJsZSgpOwogCiAgICAgbV9pbnN0cnVtZW50aW5nQWdlbnRzLnNl
dFBlcnNpc3RlbnRNZW1vcnlBZ2VudChudWxscHRyKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JNZW1v
cnlBZ2VudDo6ZW5hYmxlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZykKK1Byb3RvY29sOjpFcnJv
clN0cmluZ09yPHZvaWQ+IEluc3BlY3Rvck1lbW9yeUFnZW50OjplbmFibGUoKQogewotICAgIGlm
IChtX2luc3RydW1lbnRpbmdBZ2VudHMuZW5hYmxlZE1lbW9yeUFnZW50KCkgPT0gdGhpcykgewot
ICAgICAgICBlcnJvclN0cmluZyA9ICJNZW1vcnkgZG9tYWluIGFscmVhZHkgZW5hYmxlZCJfczsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAobV9pbnN0cnVtZW50aW5nQWdlbnRzLmVu
YWJsZWRNZW1vcnlBZ2VudCgpID09IHRoaXMpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3Rl
ZCgiTWVtb3J5IGRvbWFpbiBhbHJlYWR5IGVuYWJsZWQiX3MpOwogCiAgICAgbV9pbnN0cnVtZW50
aW5nQWdlbnRzLnNldEVuYWJsZWRNZW1vcnlBZ2VudCh0aGlzKTsKKworICAgIHJldHVybiB7IH07
CiB9CiAKLXZvaWQgSW5zcGVjdG9yTWVtb3J5QWdlbnQ6OmRpc2FibGUoRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yTWVtb3J5
QWdlbnQ6OmRpc2FibGUoKQogewotICAgIGlmIChtX2luc3RydW1lbnRpbmdBZ2VudHMuZW5hYmxl
ZE1lbW9yeUFnZW50KCkgIT0gdGhpcykgewotICAgICAgICBlcnJvclN0cmluZyA9ICJNZW1vcnkg
ZG9tYWluIGFscmVhZHkgZGlzYWJsZWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAg
aWYgKG1faW5zdHJ1bWVudGluZ0FnZW50cy5lbmFibGVkTWVtb3J5QWdlbnQoKSAhPSB0aGlzKQor
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk1lbW9yeSBkb21haW4gYWxyZWFkeSBkaXNh
YmxlZCJfcyk7CiAKICAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMuc2V0RW5hYmxlZE1lbW9yeUFn
ZW50KG51bGxwdHIpOwogCiAgICAgbV90cmFja2luZyA9IGZhbHNlOwogCiAgICAgUmVzb3VyY2VV
c2FnZVRocmVhZDo6cmVtb3ZlT2JzZXJ2ZXIodGhpcyk7CisKKyAgICByZXR1cm4geyB9OwogfQog
Ci12b2lkIEluc3BlY3Rvck1lbW9yeUFnZW50OjpzdGFydFRyYWNraW5nKEVycm9yU3RyaW5nJikK
K1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3Rvck1lbW9yeUFnZW50OjpzdGFy
dFRyYWNraW5nKCkKIHsKICAgICBpZiAobV90cmFja2luZykKLSAgICAgICAgcmV0dXJuOworICAg
ICAgICByZXR1cm4geyB9OwogCiAgICAgUmVzb3VyY2VVc2FnZVRocmVhZDo6YWRkT2JzZXJ2ZXIo
dGhpcywgTWVtb3J5LCBbdGhpc10gKGNvbnN0IFJlc291cmNlVXNhZ2VEYXRhJiBkYXRhKSB7CiAg
ICAgICAgIGNvbGxlY3RTYW1wbGUoZGF0YSk7CkBAIC05NiwyNCArOTUsMjggQEAgdm9pZCBJbnNw
ZWN0b3JNZW1vcnlBZ2VudDo6c3RhcnRUcmFja2luZyhFcnJvclN0cmluZyYpCiAgICAgbV90cmFj
a2luZyA9IHRydWU7CiAKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+dHJhY2tpbmdTdGFydCht
X2Vudmlyb25tZW50LmV4ZWN1dGlvblN0b3B3YXRjaCgpLmVsYXBzZWRUaW1lKCkuc2Vjb25kcygp
KTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yTWVtb3J5QWdlbnQ6OnN0
b3BUcmFja2luZyhFcnJvclN0cmluZyYpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJ
bnNwZWN0b3JNZW1vcnlBZ2VudDo6c3RvcFRyYWNraW5nKCkKIHsKICAgICBpZiAoIW1fdHJhY2tp
bmcpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIFJlc291cmNl
VXNhZ2VUaHJlYWQ6OnJlbW92ZU9ic2VydmVyKHRoaXMpOwogCiAgICAgbV90cmFja2luZyA9IGZh
bHNlOwogCiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPnRyYWNraW5nQ29tcGxldGUobV9lbnZp
cm9ubWVudC5leGVjdXRpb25TdG9wd2F0Y2goKS5lbGFwc2VkVGltZSgpLnNlY29uZHMoKSk7CisK
KyAgICByZXR1cm4geyB9OwogfQogCiB2b2lkIEluc3BlY3Rvck1lbW9yeUFnZW50OjpkaWRIYW5k
bGVNZW1vcnlQcmVzc3VyZShDcml0aWNhbCBjcml0aWNhbCkKIHsKICAgICBNZW1vcnlGcm9udGVu
ZERpc3BhdGNoZXI6OlNldmVyaXR5IHNldmVyaXR5ID0gY3JpdGljYWwgPT0gQ3JpdGljYWw6Olll
cyA/IE1lbW9yeUZyb250ZW5kRGlzcGF0Y2hlcjo6U2V2ZXJpdHk6OkNyaXRpY2FsIDogTWVtb3J5
RnJvbnRlbmREaXNwYXRjaGVyOjpTZXZlcml0eTo6Tm9uQ3JpdGljYWw7Ci0gICAgbV9mcm9udGVu
ZERpc3BhdGNoZXItPm1lbW9yeVByZXNzdXJlKG1fZW52aXJvbm1lbnQuZXhlY3V0aW9uU3RvcHdh
dGNoKCkuZWxhcHNlZFRpbWUoKS5zZWNvbmRzKCksIHNldmVyaXR5KTsKKyAgICBtX2Zyb250ZW5k
RGlzcGF0Y2hlci0+bWVtb3J5UHJlc3N1cmUobV9lbnZpcm9ubWVudC5leGVjdXRpb25TdG9wd2F0
Y2goKS5lbGFwc2VkVGltZSgpLnNlY29uZHMoKSwgUHJvdG9jb2w6OkhlbHBlcnM6OmdldEVudW1D
b25zdGFudFZhbHVlKHNldmVyaXR5KSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yTWVtb3J5QWdlbnQ6
OmNvbGxlY3RTYW1wbGUoY29uc3QgUmVzb3VyY2VVc2FnZURhdGEmIGRhdGEpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rvck1lbW9yeUFnZW50Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rvck1lbW9yeUFnZW50LmgK
aW5kZXggYzQ0NzcyZGJlYWJmOTExNGNmYTQ0N2ZlOTZlODRlM2QyYjUyNjI4ZS4uMWE3NjQwOGVm
OTNjOTYxYjVhMDBhYWMxZjkyNWE4OTM2NDMyOTQ3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JNZW1vcnlBZ2VudC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yTWVtb3J5QWdlbnQuaApAQCAtMzUsMjQg
KzM1LDIyIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdHlwZWRlZiBTdHJpbmcgRXJyb3JT
dHJpbmc7Ci0KIGNsYXNzIEluc3BlY3Rvck1lbW9yeUFnZW50IGZpbmFsIDogcHVibGljIEluc3Bl
Y3RvckFnZW50QmFzZSwgcHVibGljIEluc3BlY3Rvcjo6TWVtb3J5QmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbnNwZWN0b3JNZW1vcnlBZ2VudCk7
CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgSW5zcGVjdG9yTWVt
b3J5QWdlbnQoUGFnZUFnZW50Q29udGV4dCYpOwotICAgIH5JbnNwZWN0b3JNZW1vcnlBZ2VudCgp
IG92ZXJyaWRlOworICAgIH5JbnNwZWN0b3JNZW1vcnlBZ2VudCgpOwogCiAgICAgLy8gSW5zcGVj
dG9yQWdlbnRCYXNlCi0gICAgdm9pZCBkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVj
dG9yOjpGcm9udGVuZFJvdXRlciosIEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXIqKSBvdmVy
cmlkZTsKLSAgICB2b2lkIHdpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6
RGlzY29ubmVjdFJlYXNvbikgb3ZlcnJpZGU7CisgICAgdm9pZCBkaWRDcmVhdGVGcm9udGVuZEFu
ZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9udGVuZFJvdXRlciosIEluc3BlY3Rvcjo6QmFja2VuZERp
c3BhdGNoZXIqKTsKKyAgICB2b2lkIHdpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3Bl
Y3Rvcjo6RGlzY29ubmVjdFJlYXNvbik7CiAKICAgICAvLyBNZW1vcnlCYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXIKLSAgICB2b2lkIGVuYWJsZShFcnJvclN0cmluZyYpIG92ZXJyaWRlOwotICAgIHZv
aWQgZGlzYWJsZShFcnJvclN0cmluZyYpIG92ZXJyaWRlOwotICAgIHZvaWQgc3RhcnRUcmFja2lu
ZyhFcnJvclN0cmluZyYpIG92ZXJyaWRlOwotICAgIHZvaWQgc3RvcFRyYWNraW5nKEVycm9yU3Ry
aW5nJikgb3ZlcnJpZGU7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2
b2lkPiBlbmFibGUoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZv
aWQ+IGRpc2FibGUoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZv
aWQ+IHN0YXJ0VHJhY2tpbmcoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmlu
Z09yPHZvaWQ+IHN0b3BUcmFja2luZygpOwogCiAgICAgLy8gSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uCiAgICAgdm9pZCBkaWRIYW5kbGVNZW1vcnlQcmVzc3VyZShDcml0aWNhbCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rvck5ldHdvcmtBZ2Vu
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rvck5ldHdvcmtB
Z2VudC5jcHAKaW5kZXggMDlmMjc3ZjE5NWQzNTZjZjZkMzE0ZmJmNzJjZmNiZWFkNjY3ZTE1Yy4u
MDllNmM2ZDRjOTZkNjQ0MTgyM2RkMDUxMGJmOWRjOTI2ODQ5NzAzNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JOZXR3b3JrQWdlbnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yTmV0d29ya0FnZW50
LmNwcApAQCAtMTcyLDkgKzE3Miw5IEBAIHByaXZhdGU6CiAgICAgaW50IG1fc3RhdHVzQ29kZTsK
IH07CiAKLVJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpXZWJTb2NrZXRGcmFtZT4g
YnVpbGRXZWJTb2NrZXRNZXNzYWdlKGNvbnN0IFdlYlNvY2tldEZyYW1lJiBmcmFtZSkKK1JlZjxQ
cm90b2NvbDo6TmV0d29yazo6V2ViU29ja2V0RnJhbWU+IGJ1aWxkV2ViU29ja2V0TWVzc2FnZShj
b25zdCBXZWJTb2NrZXRGcmFtZSYgZnJhbWUpCiB7Ci0gICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJv
dG9jb2w6Ok5ldHdvcms6OldlYlNvY2tldEZyYW1lOjpjcmVhdGUoKQorICAgIHJldHVybiBQcm90
b2NvbDo6TmV0d29yazo6V2ViU29ja2V0RnJhbWU6OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRPcGNv
ZGUoZnJhbWUub3BDb2RlKQogICAgICAgICAuc2V0TWFzayhmcmFtZS5tYXNrZWQpCiAgICAgICAg
IC5zZXRQYXlsb2FkRGF0YShmcmFtZS5vcENvZGUgPT0gMSA/IFN0cmluZzo6ZnJvbVVURjhXaXRo
TGF0aW4xRmFsbGJhY2soZnJhbWUucGF5bG9hZCwgZnJhbWUucGF5bG9hZExlbmd0aCkgOiBiYXNl
NjRFbmNvZGUoZnJhbWUucGF5bG9hZCwgZnJhbWUucGF5bG9hZExlbmd0aCkpCkBAIC0yMDEsMjAg
KzIwMSwyMSBAQCB2b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6ZGlkQ3JlYXRlRnJvbnRlbmRB
bmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRSb3V0ZQogCiB2b2lkIEluc3BlY3Rvck5ldHdv
cmtBZ2VudDo6d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25u
ZWN0UmVhc29uKQogewotICAgIEVycm9yU3RyaW5nIGlnbm9yZWQ7Ci0gICAgZGlzYWJsZShpZ25v
cmVkKTsKKyAgICBkaXNhYmxlKCk7CiB9CiAKLXN0YXRpYyBSZWY8SlNPTjo6T2JqZWN0PiBidWls
ZE9iamVjdEZvckhlYWRlcnMoY29uc3QgSFRUUEhlYWRlck1hcCYgaGVhZGVycykKK3N0YXRpYyBS
ZWY8UHJvdG9jb2w6Ok5ldHdvcms6OkhlYWRlcnM+IGJ1aWxkT2JqZWN0Rm9ySGVhZGVycyhjb25z
dCBIVFRQSGVhZGVyTWFwJiBoZWFkZXJzKQogewotICAgIFJlZjxKU09OOjpPYmplY3Q+IGhlYWRl
cnNPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGF1dG8gaGVhZGVyc1ZhbHVl
ID0gUHJvdG9jb2w6Ok5ldHdvcms6OkhlYWRlcnM6OmNyZWF0ZSgpLnJlbGVhc2UoKTsKIAorICAg
IGF1dG8gaGVhZGVyc09iamVjdCA9IGhlYWRlcnNWYWx1ZS0+YXNPYmplY3QoKTsKICAgICBmb3Ig
KGNvbnN0IGF1dG8mIGhlYWRlciA6IGhlYWRlcnMpCiAgICAgICAgIGhlYWRlcnNPYmplY3QtPnNl
dFN0cmluZyhoZWFkZXIua2V5LCBoZWFkZXIudmFsdWUpOwotICAgIHJldHVybiBoZWFkZXJzT2Jq
ZWN0OworCisgICAgcmV0dXJuIGhlYWRlcnNWYWx1ZTsKIH0KIAotUmVmPEluc3BlY3Rvcjo6UHJv
dG9jb2w6Ok5ldHdvcms6OlJlc291cmNlVGltaW5nPiBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmJ1
aWxkT2JqZWN0Rm9yVGltaW5nKGNvbnN0IE5ldHdvcmtMb2FkTWV0cmljcyogdGltaW5nLCBSZXNv
dXJjZUxvYWRlciYgcmVzb3VyY2VMb2FkZXIpCitSZWY8UHJvdG9jb2w6Ok5ldHdvcms6OlJlc291
cmNlVGltaW5nPiBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yVGltaW5nKGNv
bnN0IE5ldHdvcmtMb2FkTWV0cmljcyogdGltaW5nLCBSZXNvdXJjZUxvYWRlciYgcmVzb3VyY2VM
b2FkZXIpCiB7CiAgICAgYXV0byYgbG9hZFRpbWluZyA9IHJlc291cmNlTG9hZGVyLmxvYWRUaW1p
bmcoKTsKIApAQCAtMjI3LDcgKzIyOCw3IEBAIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3
b3JrOjpSZXNvdXJjZVRpbWluZz4gSW5zcGVjdG9yTmV0d29ya0FnZW50OjpidWlsZE9iCiAgICAg
ICAgIHRpbWluZyA9ICZlbXB0eS52YWx1ZSgpOwogICAgIH0KIAotICAgIHJldHVybiBJbnNwZWN0
b3I6OlByb3RvY29sOjpOZXR3b3JrOjpSZXNvdXJjZVRpbWluZzo6Y3JlYXRlKCkKKyAgICByZXR1
cm4gUHJvdG9jb2w6Ok5ldHdvcms6OlJlc291cmNlVGltaW5nOjpjcmVhdGUoKQogICAgICAgICAu
c2V0U3RhcnRUaW1lKGVsYXBzZWRUaW1lU2luY2UobG9hZFRpbWluZy5zdGFydFRpbWUoKSkpCiAg
ICAgICAgIC5zZXRSZWRpcmVjdFN0YXJ0KGVsYXBzZWRUaW1lU2luY2UobG9hZFRpbWluZy5yZWRp
cmVjdFN0YXJ0KCkpKQogICAgICAgICAuc2V0UmVkaXJlY3RFbmQoZWxhcHNlZFRpbWVTaW5jZShs
b2FkVGltaW5nLnJlZGlyZWN0RW5kKCkpKQpAQCAtMjQzLDI2ICsyNDQsMjYgQEAgUmVmPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OlJlc291cmNlVGltaW5nPiBJbnNwZWN0b3JOZXR3b3Jr
QWdlbnQ6OmJ1aWxkT2IKICAgICAgICAgLnJlbGVhc2UoKTsKIH0KIAotc3RhdGljIEluc3BlY3Rv
cjo6UHJvdG9jb2w6Ok5ldHdvcms6Ok1ldHJpY3M6OlByaW9yaXR5IHRvUHJvdG9jb2woTmV0d29y
a0xvYWRQcmlvcml0eSBwcmlvcml0eSkKK3N0YXRpYyBQcm90b2NvbDo6TmV0d29yazo6TWV0cmlj
czo6UHJpb3JpdHkgdG9Qcm90b2NvbChOZXR3b3JrTG9hZFByaW9yaXR5IHByaW9yaXR5KQogewog
ICAgIHN3aXRjaCAocHJpb3JpdHkpIHsKICAgICBjYXNlIE5ldHdvcmtMb2FkUHJpb3JpdHk6Okxv
dzoKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6Ok1ldHJpY3M6
OlByaW9yaXR5OjpMb3c7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6TmV0d29yazo6TWV0cmlj
czo6UHJpb3JpdHk6OkxvdzsKICAgICBjYXNlIE5ldHdvcmtMb2FkUHJpb3JpdHk6Ok1lZGl1bToK
LSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6Ok1ldHJpY3M6OlBy
aW9yaXR5OjpNZWRpdW07CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6TmV0d29yazo6TWV0cmlj
czo6UHJpb3JpdHk6Ok1lZGl1bTsKICAgICBjYXNlIE5ldHdvcmtMb2FkUHJpb3JpdHk6OkhpZ2g6
Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpNZXRyaWNzOjpQ
cmlvcml0eTo6SGlnaDsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpOZXR3b3JrOjpNZXRyaWNz
OjpQcmlvcml0eTo6SGlnaDsKICAgICBjYXNlIE5ldHdvcmtMb2FkUHJpb3JpdHk6OlVua25vd246
CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAg
IHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpNZXRyaWNzOjpQcmlvcml0eTo6
TWVkaXVtOworICAgIHJldHVybiBQcm90b2NvbDo6TmV0d29yazo6TWV0cmljczo6UHJpb3JpdHk6
Ok1lZGl1bTsKIH0KIAotUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6Ok1ldHJpY3M+
IEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6YnVpbGRPYmplY3RGb3JNZXRyaWNzKGNvbnN0IE5ldHdv
cmtMb2FkTWV0cmljcyYgbmV0d29ya0xvYWRNZXRyaWNzKQorUmVmPFByb3RvY29sOjpOZXR3b3Jr
OjpNZXRyaWNzPiBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yTWV0cmljcyhj
b25zdCBOZXR3b3JrTG9hZE1ldHJpY3MmIG5ldHdvcmtMb2FkTWV0cmljcykKIHsKLSAgICBhdXRv
IG1ldHJpY3MgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpNZXRyaWNzOjpjcmVhdGUo
KS5yZWxlYXNlKCk7CisgICAgYXV0byBtZXRyaWNzID0gUHJvdG9jb2w6Ok5ldHdvcms6Ok1ldHJp
Y3M6OmNyZWF0ZSgpLnJlbGVhc2UoKTsKIAogICAgIGlmICghbmV0d29ya0xvYWRNZXRyaWNzLnBy
b3RvY29sLmlzTnVsbCgpKQogICAgICAgICBtZXRyaWNzLT5zZXRQcm90b2NvbChuZXR3b3JrTG9h
ZE1ldHJpY3MucHJvdG9jb2wpOwpAQCAtMjg2LDcgKzI4Nyw3IEBAIFJlZjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpOZXR3b3JrOjpNZXRyaWNzPiBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmJ1aWxkT2Jq
ZWN0Rm9yCiAgICAgaWYgKG5ldHdvcmtMb2FkTWV0cmljcy5yZXNwb25zZUJvZHlEZWNvZGVkU2l6
ZSAhPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQ2NF90Pjo6bWF4KCkpCiAgICAgICAgIG1ldHJp
Y3MtPnNldFJlc3BvbnNlQm9keURlY29kZWRTaXplKG5ldHdvcmtMb2FkTWV0cmljcy5yZXNwb25z
ZUJvZHlEZWNvZGVkU2l6ZSk7CiAKLSAgICBhdXRvIGNvbm5lY3Rpb25QYXlsb2FkID0gSW5zcGVj
dG9yOjpQcm90b2NvbDo6U2VjdXJpdHk6OkNvbm5lY3Rpb246OmNyZWF0ZSgpCisgICAgYXV0byBj
b25uZWN0aW9uUGF5bG9hZCA9IFByb3RvY29sOjpTZWN1cml0eTo6Q29ubmVjdGlvbjo6Y3JlYXRl
KCkKICAgICAgICAgLnJlbGVhc2UoKTsKIAogICAgIGlmICghbmV0d29ya0xvYWRNZXRyaWNzLnRs
c1Byb3RvY29sLmlzRW1wdHkoKSkKQEAgLTMwMCw5ICszMDEsOSBAQCBSZWY8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6TmV0d29yazo6TWV0cmljcz4gSW5zcGVjdG9yTmV0d29ya0FnZW50OjpidWlsZE9i
amVjdEZvcgogICAgIHJldHVybiBtZXRyaWNzOwogfQogCi1zdGF0aWMgUmVmPEluc3BlY3Rvcjo6
UHJvdG9jb2w6Ok5ldHdvcms6OlJlcXVlc3Q+IGJ1aWxkT2JqZWN0Rm9yUmVzb3VyY2VSZXF1ZXN0
KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKK3N0YXRpYyBSZWY8UHJvdG9jb2w6Ok5l
dHdvcms6OlJlcXVlc3Q+IGJ1aWxkT2JqZWN0Rm9yUmVzb3VyY2VSZXF1ZXN0KGNvbnN0IFJlc291
cmNlUmVxdWVzdCYgcmVxdWVzdCkKIHsKLSAgICBhdXRvIHJlcXVlc3RPYmplY3QgPSBJbnNwZWN0
b3I6OlByb3RvY29sOjpOZXR3b3JrOjpSZXF1ZXN0OjpjcmVhdGUoKQorICAgIGF1dG8gcmVxdWVz
dE9iamVjdCA9IFByb3RvY29sOjpOZXR3b3JrOjpSZXF1ZXN0OjpjcmVhdGUoKQogICAgICAgICAu
c2V0VXJsKHJlcXVlc3QudXJsKCkuc3RyaW5nKCkpCiAgICAgICAgIC5zZXRNZXRob2QocmVxdWVz
dC5odHRwTWV0aG9kKCkpCiAgICAgICAgIC5zZXRIZWFkZXJzKGJ1aWxkT2JqZWN0Rm9ySGVhZGVy
cyhyZXF1ZXN0Lmh0dHBIZWFkZXJGaWVsZHMoKSkpCkBAIC0zMTQsNDQgKzMxNSw0MiBAQCBzdGF0
aWMgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OlJlcXVlc3Q+IGJ1aWxkT2JqZWN0
Rm9yUmVzb3VyY2VSZXF1ZXN0KAogICAgIHJldHVybiByZXF1ZXN0T2JqZWN0OwogfQogCi1zdGF0
aWMgSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6UmVzcG9uc2U6OlNvdXJjZSByZXNwb25z
ZVNvdXJjZShSZXNvdXJjZVJlc3BvbnNlOjpTb3VyY2Ugc291cmNlKQorc3RhdGljIFByb3RvY29s
OjpOZXR3b3JrOjpSZXNwb25zZTo6U291cmNlIHJlc3BvbnNlU291cmNlKFJlc291cmNlUmVzcG9u
c2U6OlNvdXJjZSBzb3VyY2UpCiB7CiAgICAgc3dpdGNoIChzb3VyY2UpIHsKICAgICBjYXNlIFJl
c291cmNlUmVzcG9uc2U6OlNvdXJjZTo6RE9NQ2FjaGU6CiAgICAgY2FzZSBSZXNvdXJjZVJlc3Bv
bnNlOjpTb3VyY2U6OkFwcGxpY2F0aW9uQ2FjaGU6CiAgICAgICAgIC8vIEZJWE1FOiBBZGQgc3Vw
cG9ydCBmb3IgQXBwbGljYXRpb25DYWNoZSBpbiBpbnNwZWN0b3IuCiAgICAgY2FzZSBSZXNvdXJj
ZVJlc3BvbnNlOjpTb3VyY2U6OlVua25vd246Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlBy
b3RvY29sOjpOZXR3b3JrOjpSZXNwb25zZTo6U291cmNlOjpVbmtub3duOworICAgICAgICByZXR1
cm4gUHJvdG9jb2w6Ok5ldHdvcms6OlJlc3BvbnNlOjpTb3VyY2U6OlVua25vd247CiAgICAgY2Fz
ZSBSZXNvdXJjZVJlc3BvbnNlOjpTb3VyY2U6Ok5ldHdvcms6Ci0gICAgICAgIHJldHVybiBJbnNw
ZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpSZXNwb25zZTo6U291cmNlOjpOZXR3b3JrOworICAg
ICAgICByZXR1cm4gUHJvdG9jb2w6Ok5ldHdvcms6OlJlc3BvbnNlOjpTb3VyY2U6Ok5ldHdvcms7
CiAgICAgY2FzZSBSZXNvdXJjZVJlc3BvbnNlOjpTb3VyY2U6Ok1lbW9yeUNhY2hlOgogICAgIGNh
c2UgUmVzb3VyY2VSZXNwb25zZTo6U291cmNlOjpNZW1vcnlDYWNoZUFmdGVyVmFsaWRhdGlvbjoK
LSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OlJlc3BvbnNlOjpT
b3VyY2U6Ok1lbW9yeUNhY2hlOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6Ok5ldHdvcms6OlJl
c3BvbnNlOjpTb3VyY2U6Ok1lbW9yeUNhY2hlOwogICAgIGNhc2UgUmVzb3VyY2VSZXNwb25zZTo6
U291cmNlOjpEaXNrQ2FjaGU6CiAgICAgY2FzZSBSZXNvdXJjZVJlc3BvbnNlOjpTb3VyY2U6OkRp
c2tDYWNoZUFmdGVyVmFsaWRhdGlvbjoKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9j
b2w6Ok5ldHdvcms6OlJlc3BvbnNlOjpTb3VyY2U6OkRpc2tDYWNoZTsKKyAgICAgICAgcmV0dXJu
IFByb3RvY29sOjpOZXR3b3JrOjpSZXNwb25zZTo6U291cmNlOjpEaXNrQ2FjaGU7CiAgICAgY2Fz
ZSBSZXNvdXJjZVJlc3BvbnNlOjpTb3VyY2U6OlNlcnZpY2VXb3JrZXI6Ci0gICAgICAgIHJldHVy
biBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpSZXNwb25zZTo6U291cmNlOjpTZXJ2aWNl
V29ya2VyOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6Ok5ldHdvcms6OlJlc3BvbnNlOjpTb3Vy
Y2U6OlNlcnZpY2VXb3JrZXI7CiAgICAgY2FzZSBSZXNvdXJjZVJlc3BvbnNlOjpTb3VyY2U6Oklu
c3BlY3Rvck92ZXJyaWRlOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0
d29yazo6UmVzcG9uc2U6OlNvdXJjZTo6SW5zcGVjdG9yT3ZlcnJpZGU7CisgICAgICAgIHJldHVy
biBQcm90b2NvbDo6TmV0d29yazo6UmVzcG9uc2U6OlNvdXJjZTo6SW5zcGVjdG9yT3ZlcnJpZGU7
CiAgICAgfQogCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIEluc3BlY3Rv
cjo6UHJvdG9jb2w6Ok5ldHdvcms6OlJlc3BvbnNlOjpTb3VyY2U6OlVua25vd247CisgICAgcmV0
dXJuIFByb3RvY29sOjpOZXR3b3JrOjpSZXNwb25zZTo6U291cmNlOjpVbmtub3duOwogfQogCi1S
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6UmVzcG9uc2U+IEluc3BlY3Rvck5l
dHdvcmtBZ2VudDo6YnVpbGRPYmplY3RGb3JSZXNvdXJjZVJlc3BvbnNlKGNvbnN0IFJlc291cmNl
UmVzcG9uc2UmIHJlc3BvbnNlLCBSZXNvdXJjZUxvYWRlciogcmVzb3VyY2VMb2FkZXIpCitSZWZQ
dHI8UHJvdG9jb2w6Ok5ldHdvcms6OlJlc3BvbnNlPiBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmJ1
aWxkT2JqZWN0Rm9yUmVzb3VyY2VSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNw
b25zZSwgUmVzb3VyY2VMb2FkZXIqIHJlc291cmNlTG9hZGVyKQogewogICAgIGlmIChyZXNwb25z
ZS5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBSZWY8SlNPTjo6T2Jq
ZWN0PiBoZWFkZXJzID0gYnVpbGRPYmplY3RGb3JIZWFkZXJzKHJlc3BvbnNlLmh0dHBIZWFkZXJG
aWVsZHMoKSk7Ci0KLSAgICBhdXRvIHJlc3BvbnNlT2JqZWN0ID0gSW5zcGVjdG9yOjpQcm90b2Nv
bDo6TmV0d29yazo6UmVzcG9uc2U6OmNyZWF0ZSgpCisgICAgYXV0byByZXNwb25zZU9iamVjdCA9
IFByb3RvY29sOjpOZXR3b3JrOjpSZXNwb25zZTo6Y3JlYXRlKCkKICAgICAgICAgLnNldFVybChy
ZXNwb25zZS51cmwoKS5zdHJpbmcoKSkKICAgICAgICAgLnNldFN0YXR1cyhyZXNwb25zZS5odHRw
U3RhdHVzQ29kZSgpKQogICAgICAgICAuc2V0U3RhdHVzVGV4dChyZXNwb25zZS5odHRwU3RhdHVz
VGV4dCgpKQotICAgICAgICAuc2V0SGVhZGVycyhXVEZNb3ZlKGhlYWRlcnMpKQorICAgICAgICAu
c2V0SGVhZGVycyhidWlsZE9iamVjdEZvckhlYWRlcnMocmVzcG9uc2UuaHR0cEhlYWRlckZpZWxk
cygpKSkKICAgICAgICAgLnNldE1pbWVUeXBlKHJlc3BvbnNlLm1pbWVUeXBlKCkpCiAgICAgICAg
IC5zZXRTb3VyY2UocmVzcG9uc2VTb3VyY2UocmVzcG9uc2Uuc291cmNlKCkpKQogICAgICAgICAu
cmVsZWFzZSgpOwpAQCAtMzYwLDExICszNTksMTEgQEAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9j
b2w6Ok5ldHdvcms6OlJlc3BvbnNlPiBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmJ1aWxkT2JqZWMK
ICAgICAgICAgcmVzcG9uc2VPYmplY3QtPnNldFRpbWluZyhidWlsZE9iamVjdEZvclRpbWluZyhy
ZXNwb25zZS5kZXByZWNhdGVkTmV0d29ya0xvYWRNZXRyaWNzT3JOdWxsKCksICpyZXNvdXJjZUxv
YWRlcikpOwogCiAgICAgaWYgKGF1dG8mIGNlcnRpZmljYXRlSW5mbyA9IHJlc3BvbnNlLmNlcnRp
ZmljYXRlSW5mbygpKSB7Ci0gICAgICAgIGF1dG8gc2VjdXJpdHlQYXlsb2FkID0gSW5zcGVjdG9y
OjpQcm90b2NvbDo6U2VjdXJpdHk6OlNlY3VyaXR5OjpjcmVhdGUoKQorICAgICAgICBhdXRvIHNl
Y3VyaXR5UGF5bG9hZCA9IFByb3RvY29sOjpTZWN1cml0eTo6U2VjdXJpdHk6OmNyZWF0ZSgpCiAg
ICAgICAgICAgICAucmVsZWFzZSgpOwogCiAgICAgICAgIGlmIChhdXRvIGNlcnRpZmljYXRlU3Vt
bWFyeUluZm8gPSBjZXJ0aWZpY2F0ZUluZm8udmFsdWUoKS5zdW1tYXJ5KCkpIHsKLSAgICAgICAg
ICAgIGF1dG8gY2VydGlmaWNhdGVQYXlsb2FkID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6U2VjdXJp
dHk6OkNlcnRpZmljYXRlOjpjcmVhdGUoKQorICAgICAgICAgICAgYXV0byBjZXJ0aWZpY2F0ZVBh
eWxvYWQgPSBQcm90b2NvbDo6U2VjdXJpdHk6OkNlcnRpZmljYXRlOjpjcmVhdGUoKQogICAgICAg
ICAgICAgICAgIC5yZWxlYXNlKCk7CiAKICAgICAgICAgICAgIGNlcnRpZmljYXRlUGF5bG9hZC0+
c2V0U3ViamVjdChjZXJ0aWZpY2F0ZVN1bW1hcnlJbmZvLnZhbHVlKCkuc3ViamVjdCk7CkBAIC0z
OTYsMTYgKzM5NSwxNiBAQCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6UmVz
cG9uc2U+IEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6YnVpbGRPYmplYwogICAgIHJldHVybiByZXNw
b25zZU9iamVjdDsKIH0KIAotUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OkNhY2hl
ZFJlc291cmNlPiBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yQ2FjaGVkUmVz
b3VyY2UoQ2FjaGVkUmVzb3VyY2UqIGNhY2hlZFJlc291cmNlKQorUmVmPFByb3RvY29sOjpOZXR3
b3JrOjpDYWNoZWRSZXNvdXJjZT4gSW5zcGVjdG9yTmV0d29ya0FnZW50OjpidWlsZE9iamVjdEZv
ckNhY2hlZFJlc291cmNlKENhY2hlZFJlc291cmNlKiBjYWNoZWRSZXNvdXJjZSkKIHsKLSAgICBh
dXRvIHJlc291cmNlT2JqZWN0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6Q2FjaGVk
UmVzb3VyY2U6OmNyZWF0ZSgpCisgICAgYXV0byByZXNvdXJjZU9iamVjdCA9IFByb3RvY29sOjpO
ZXR3b3JrOjpDYWNoZWRSZXNvdXJjZTo6Y3JlYXRlKCkKICAgICAgICAgLnNldFVybChjYWNoZWRS
ZXNvdXJjZS0+dXJsKCkuc3RyaW5nKCkpCiAgICAgICAgIC5zZXRUeXBlKEluc3BlY3RvclBhZ2VB
Z2VudDo6Y2FjaGVkUmVzb3VyY2VUeXBlSlNPTigqY2FjaGVkUmVzb3VyY2UpKQogICAgICAgICAu
c2V0Qm9keVNpemUoY2FjaGVkUmVzb3VyY2UtPmVuY29kZWRTaXplKCkpCiAgICAgICAgIC5yZWxl
YXNlKCk7CiAKLSAgICBhdXRvIHJlc291cmNlUmVzcG9uc2UgPSBidWlsZE9iamVjdEZvclJlc291
cmNlUmVzcG9uc2UoY2FjaGVkUmVzb3VyY2UtPnJlc3BvbnNlKCksIGNhY2hlZFJlc291cmNlLT5s
b2FkZXIoKSk7Ci0gICAgcmVzb3VyY2VPYmplY3QtPnNldFJlc3BvbnNlKFdURk1vdmUocmVzb3Vy
Y2VSZXNwb25zZSkpOworICAgIGlmIChhdXRvIHJlc291cmNlUmVzcG9uc2UgPSBidWlsZE9iamVj
dEZvclJlc291cmNlUmVzcG9uc2UoY2FjaGVkUmVzb3VyY2UtPnJlc3BvbnNlKCksIGNhY2hlZFJl
c291cmNlLT5sb2FkZXIoKSkpCisgICAgICAgIHJlc291cmNlT2JqZWN0LT5zZXRSZXNwb25zZShy
ZXNvdXJjZVJlc3BvbnNlLnJlbGVhc2VOb25OdWxsKCkpOwogCiAgICAgU3RyaW5nIHNvdXJjZU1h
cHBpbmdVUkwgPSBJbnNwZWN0b3JQYWdlQWdlbnQ6OnNvdXJjZU1hcFVSTEZvclJlc291cmNlKGNh
Y2hlZFJlc291cmNlKTsKICAgICBpZiAoIXNvdXJjZU1hcHBpbmdVUkwuaXNFbXB0eSgpKQpAQCAt
NDI5LDkgKzQyOCw5IEBAIHZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50Ojp3aWxsU2VuZFJlcXVl
c3QodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBEb2N1bWVudExvCiAgICAgZG91YmxlIHNlbmRU
aW1lc3RhbXAgPSB0aW1lc3RhbXAoKTsKICAgICBXYWxsVGltZSB3YWxsdGltZSA9IFdhbGxUaW1l
Ojpub3coKTsKIAotICAgIFN0cmluZyByZXF1ZXN0SWQgPSBJZGVudGlmaWVyc0ZhY3Rvcnk6OnJl
cXVlc3RJZChpZGVudGlmaWVyKTsKLSAgICBTdHJpbmcgZnJhbWVJZCA9IGZyYW1lSWRlbnRpZmll
cihsb2FkZXIpOwotICAgIFN0cmluZyBsb2FkZXJJZCA9IGxvYWRlcklkZW50aWZpZXIobG9hZGVy
KTsKKyAgICBhdXRvIHJlcXVlc3RJZCA9IElkZW50aWZpZXJzRmFjdG9yeTo6cmVxdWVzdElkKGlk
ZW50aWZpZXIpOworICAgIGF1dG8gZnJhbWVJZCA9IGZyYW1lSWRlbnRpZmllcihsb2FkZXIpOwor
ICAgIGF1dG8gbG9hZGVySWQgPSBsb2FkZXJJZGVudGlmaWVyKGxvYWRlcik7CiAgICAgU3RyaW5n
IHRhcmdldElkID0gcmVxdWVzdC5pbml0aWF0b3JJZGVudGlmaWVyKCk7CiAKICAgICBpZiAodHlw
ZSA9PSBJbnNwZWN0b3JQYWdlQWdlbnQ6Ok90aGVyUmVzb3VyY2UpIHsKQEAgLTQ2Miw3ICs0NjEs
MTAgQEAgdm9pZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OndpbGxTZW5kUmVxdWVzdCh1bnNpZ25l
ZCBsb25nIGlkZW50aWZpZXIsIERvY3VtZW50TG8KICAgICBhdXRvIGluaXRpYXRvck9iamVjdCA9
IGJ1aWxkSW5pdGlhdG9yT2JqZWN0KGRvY3VtZW50LCAmcmVxdWVzdCk7CiAKICAgICBTdHJpbmcg
dXJsID0gbG9hZGVyID8gbG9hZGVyLT51cmwoKS5zdHJpbmcoKSA6IHJlcXVlc3QudXJsKCkuc3Ry
aW5nKCk7Ci0gICAgbV9mcm9udGVuZERpc3BhdGNoZXItPnJlcXVlc3RXaWxsQmVTZW50KHJlcXVl
c3RJZCwgZnJhbWVJZCwgbG9hZGVySWQsIHVybCwgYnVpbGRPYmplY3RGb3JSZXNvdXJjZVJlcXVl
c3QocmVxdWVzdCksIHNlbmRUaW1lc3RhbXAsIHdhbGx0aW1lLnNlY29uZHNTaW5jZUVwb2NoKCku
c2Vjb25kcygpLCBpbml0aWF0b3JPYmplY3QsIGJ1aWxkT2JqZWN0Rm9yUmVzb3VyY2VSZXNwb25z
ZShyZWRpcmVjdFJlc3BvbnNlLCBudWxscHRyKSwgdHlwZSAhPSBJbnNwZWN0b3JQYWdlQWdlbnQ6
Ok90aGVyUmVzb3VyY2UgPyAmcHJvdG9jb2xSZXNvdXJjZVR5cGUgOiBudWxscHRyLCB0YXJnZXRJ
ZC5pc0VtcHR5KCkgPyBudWxscHRyIDogJnRhcmdldElkKTsKKyAgICBPcHRpb25hbDxQcm90b2Nv
bDo6UGFnZTo6UmVzb3VyY2VUeXBlPiB0eXBlUGF5bG9hZDsKKyAgICBpZiAodHlwZSAhPSBJbnNw
ZWN0b3JQYWdlQWdlbnQ6Ok90aGVyUmVzb3VyY2UpCisgICAgICAgIHR5cGVQYXlsb2FkID0gcHJv
dG9jb2xSZXNvdXJjZVR5cGU7CisgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPnJlcXVlc3RXaWxs
QmVTZW50KHJlcXVlc3RJZCwgZnJhbWVJZCwgbG9hZGVySWQsIHVybCwgYnVpbGRPYmplY3RGb3JS
ZXNvdXJjZVJlcXVlc3QocmVxdWVzdCksIHNlbmRUaW1lc3RhbXAsIHdhbGx0aW1lLnNlY29uZHNT
aW5jZUVwb2NoKCkuc2Vjb25kcygpLCBXVEZNb3ZlKGluaXRpYXRvck9iamVjdCksIGJ1aWxkT2Jq
ZWN0Rm9yUmVzb3VyY2VSZXNwb25zZShyZWRpcmVjdFJlc3BvbnNlLCBudWxscHRyKSwgV1RGTW92
ZSh0eXBlUGF5bG9hZCksIHRhcmdldElkKTsKIH0KIAogc3RhdGljIEluc3BlY3RvclBhZ2VBZ2Vu
dDo6UmVzb3VyY2VUeXBlIHJlc291cmNlVHlwZUZvckNhY2hlZFJlc291cmNlKENhY2hlZFJlc291
cmNlKiByZXNvdXJjZSkKQEAgLTUxNCw3ICs1MTYsOCBAQCB2b2lkIEluc3BlY3Rvck5ldHdvcmtB
Z2VudDo6ZGlkUmVjZWl2ZVJlc3BvbnNlKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgRG9jdW1l
bgogICAgICAgICB9KTsKICAgICB9CiAKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
TmV0d29yazo6UmVzcG9uc2U+IHJlc291cmNlUmVzcG9uc2UgPSBidWlsZE9iamVjdEZvclJlc291
cmNlUmVzcG9uc2UocmVhbFJlc3BvbnNlID8gKnJlYWxSZXNwb25zZSA6IHJlc3BvbnNlLCByZXNv
dXJjZUxvYWRlcik7CisgICAgUmVmUHRyPFByb3RvY29sOjpOZXR3b3JrOjpSZXNwb25zZT4gcmVz
b3VyY2VSZXNwb25zZSA9IGJ1aWxkT2JqZWN0Rm9yUmVzb3VyY2VSZXNwb25zZShyZWFsUmVzcG9u
c2UgPyAqcmVhbFJlc3BvbnNlIDogcmVzcG9uc2UsIHJlc291cmNlTG9hZGVyKTsKKyAgICBBU1NF
UlQocmVzb3VyY2VSZXNwb25zZSk7CiAKICAgICBib29sIGlzTm90TW9kaWZpZWQgPSByZXNwb25z
ZS5odHRwU3RhdHVzQ29kZSgpID09IDMwNDsKIApAQCAtNTI3LDcgKzUzMCw3IEBAIHZvaWQgSW5z
cGVjdG9yTmV0d29ya0FnZW50OjpkaWRSZWNlaXZlUmVzcG9uc2UodW5zaWduZWQgbG9uZyBpZGVu
dGlmaWVyLCBEb2N1bWVuCiAgICAgaWYgKGNhY2hlZFJlc291cmNlKSB7CiAgICAgICAgIC8vIFVz
ZSBtaW1lIHR5cGUgZnJvbSBjYWNoZWQgcmVzb3VyY2UgaW4gY2FzZSB0aGUgb25lIGluIHJlc3Bv
bnNlIGlzIGVtcHR5LgogICAgICAgICBpZiAocmVzb3VyY2VSZXNwb25zZSAmJiByZXNwb25zZS5t
aW1lVHlwZSgpLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJlc291cmNlUmVzcG9uc2UtPnNldFN0
cmluZyhJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpSZXNwb25zZTo6TWltZVR5cGUsIGNh
Y2hlZFJlc291cmNlLT5yZXNwb25zZSgpLm1pbWVUeXBlKCkpOworICAgICAgICAgICAgcmVzb3Vy
Y2VSZXNwb25zZS0+c2V0U3RyaW5nKFByb3RvY29sOjpOZXR3b3JrOjpSZXNwb25zZTo6bWltZVR5
cGVLZXksIGNhY2hlZFJlc291cmNlLT5yZXNwb25zZSgpLm1pbWVUeXBlKCkpOwogICAgICAgICBt
X3Jlc291cmNlc0RhdGEtPmFkZENhY2hlZFJlc291cmNlKHJlcXVlc3RJZCwgY2FjaGVkUmVzb3Vy
Y2UpOwogICAgIH0KIApAQCAtNTQ5LDIxICs1NTIsMjEgQEAgdm9pZCBJbnNwZWN0b3JOZXR3b3Jr
QWdlbnQ6OmRpZFJlY2VpdmVSZXNwb25zZSh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIERvY3Vt
ZW4KICAgICAgICAgICAgICAgICBtX3Jlc291cmNlc0RhdGEtPm1heWJlQWRkUmVzb3VyY2VEYXRh
KHJlcXVlc3RJZCwgcHJldmlvdXNCdWZmZXItPmRhdGEoKSwgcHJldmlvdXNCdWZmZXItPnNpemUo
KSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIHJlc291cmNlUmVz
cG9uc2UtPnNldFN0cmluZygibWltZVR5cGUiX3MsIHByZXZpb3VzUmVzb3VyY2VEYXRhLT5taW1l
VHlwZSgpKTsKKyAgICAgICAgICAgIHJlc291cmNlUmVzcG9uc2UtPnNldFN0cmluZyhQcm90b2Nv
bDo6TmV0d29yazo6UmVzcG9uc2U6Om1pbWVUeXBlS2V5LCBwcmV2aW91c1Jlc291cmNlRGF0YS0+
bWltZVR5cGUoKSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIHJlc291cmNlUmVzcG9uc2Ut
PnNldEludGVnZXIoInN0YXR1cyJfcywgcHJldmlvdXNSZXNvdXJjZURhdGEtPmh0dHBTdGF0dXND
b2RlKCkpOwotICAgICAgICAgICAgcmVzb3VyY2VSZXNwb25zZS0+c2V0U3RyaW5nKCJzdGF0dXNU
ZXh0Il9zLCBwcmV2aW91c1Jlc291cmNlRGF0YS0+aHR0cFN0YXR1c1RleHQoKSk7CisgICAgICAg
ICAgICByZXNvdXJjZVJlc3BvbnNlLT5zZXRJbnRlZ2VyKFByb3RvY29sOjpOZXR3b3JrOjpSZXNw
b25zZTo6c3RhdHVzS2V5LCBwcmV2aW91c1Jlc291cmNlRGF0YS0+aHR0cFN0YXR1c0NvZGUoKSk7
CisgICAgICAgICAgICByZXNvdXJjZVJlc3BvbnNlLT5zZXRTdHJpbmcoUHJvdG9jb2w6Ok5ldHdv
cms6OlJlc3BvbnNlOjpzdGF0dXNUZXh0S2V5LCBwcmV2aW91c1Jlc291cmNlRGF0YS0+aHR0cFN0
YXR1c1RleHQoKSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIHJlc291cmNlUmVzcG9uc2Ut
PnNldFN0cmluZygic291cmNlIl9zLCBJbnNwZWN0b3I6OlByb3RvY29sOjpJbnNwZWN0b3JIZWxw
ZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpS
ZXNwb25zZTo6U291cmNlOjpEaXNrQ2FjaGUpKTsKKyAgICAgICAgICAgIHJlc291cmNlUmVzcG9u
c2UtPnNldFN0cmluZyhQcm90b2NvbDo6TmV0d29yazo6UmVzcG9uc2U6OnNvdXJjZUtleSwgUHJv
dG9jb2w6OkhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKFByb3RvY29sOjpOZXR3b3JrOjpS
ZXNwb25zZTo6U291cmNlOjpEaXNrQ2FjaGUpKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIFN0
cmluZyBmcmFtZUlkID0gZnJhbWVJZGVudGlmaWVyKGxvYWRlcik7Ci0gICAgU3RyaW5nIGxvYWRl
cklkID0gbG9hZGVySWRlbnRpZmllcihsb2FkZXIpOworICAgIFByb3RvY29sOjpOZXR3b3JrOjpG
cmFtZUlkIGZyYW1lSWQgPSBmcmFtZUlkZW50aWZpZXIobG9hZGVyKTsKKyAgICBQcm90b2NvbDo6
TmV0d29yazo6TG9hZGVySWQgbG9hZGVySWQgPSBsb2FkZXJJZGVudGlmaWVyKGxvYWRlcik7CiAK
ICAgICBtX3Jlc291cmNlc0RhdGEtPnJlc3BvbnNlUmVjZWl2ZWQocmVxdWVzdElkLCBmcmFtZUlk
LCByZXNwb25zZSwgdHlwZSwgc2hvdWxkRm9yY2VCdWZmZXJpbmdOZXR3b3JrUmVzb3VyY2VEYXRh
KCkpOwogCi0gICAgbV9mcm9udGVuZERpc3BhdGNoZXItPnJlc3BvbnNlUmVjZWl2ZWQocmVxdWVz
dElkLCBmcmFtZUlkLCBsb2FkZXJJZCwgdGltZXN0YW1wKCksIEluc3BlY3RvclBhZ2VBZ2VudDo6
cmVzb3VyY2VUeXBlSlNPTih0eXBlKSwgcmVzb3VyY2VSZXNwb25zZSk7CisgICAgbV9mcm9udGVu
ZERpc3BhdGNoZXItPnJlc3BvbnNlUmVjZWl2ZWQocmVxdWVzdElkLCBmcmFtZUlkLCBsb2FkZXJJ
ZCwgdGltZXN0YW1wKCksIEluc3BlY3RvclBhZ2VBZ2VudDo6cmVzb3VyY2VUeXBlSlNPTih0eXBl
KSwgcmVzb3VyY2VSZXNwb25zZS5yZWxlYXNlTm9uTnVsbCgpKTsKIAogICAgIC8vIElmIHdlIHJl
dmFsaWRhdGVkIHRoZSByZXNvdXJjZSBhbmQgZ290IE5vdCBtb2RpZmllZCwgc2VuZCBjb250ZW50
IGxlbmd0aCBmb2xsb3dpbmcgZGlkUmVjZWl2ZVJlc3BvbnNlCiAgICAgLy8gYXMgdGhlcmUgd2ls
bCBiZSBubyBjYWxscyB0byBkaWRSZWNlaXZlRGF0YSBmcm9tIHRoZSBuZXR3b3JrIHN0YWNrLgpA
QCAtNjIxLDkgKzYyNCw5IEBAIHZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50OjpkaWRGaW5pc2hM
b2FkaW5nKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgRG9jdW1lbnRMCiAgICAgICAgICAgICBy
ZWFsTWV0cmljcyA9IHBsYXRmb3JtU3RyYXRlZ2llcygpLT5sb2FkZXJTdHJhdGVneSgpLT5uZXR3
b3JrTWV0cmljc0Zyb21SZXNvdXJjZUxvYWRJZGVudGlmaWVyKGlkZW50aWZpZXIpLmlzb2xhdGVk
Q29weSgpOwogICAgICAgICB9KTsKICAgICB9Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9j
b2w6Ok5ldHdvcms6Ok1ldHJpY3M+IG1ldHJpY3MgPSBidWlsZE9iamVjdEZvck1ldHJpY3MocmVh
bE1ldHJpY3MgPyAqcmVhbE1ldHJpY3MgOiBuZXR3b3JrTG9hZE1ldHJpY3MpOworICAgIFJlZlB0
cjxQcm90b2NvbDo6TmV0d29yazo6TWV0cmljcz4gbWV0cmljcyA9IGJ1aWxkT2JqZWN0Rm9yTWV0
cmljcyhyZWFsTWV0cmljcyA/ICpyZWFsTWV0cmljcyA6IG5ldHdvcmtMb2FkTWV0cmljcyk7CiAK
LSAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+bG9hZGluZ0ZpbmlzaGVkKHJlcXVlc3RJZCwgZWxh
cHNlZEZpbmlzaFRpbWUsICFzb3VyY2VNYXBwaW5nVVJMLmlzRW1wdHkoKSA/ICZzb3VyY2VNYXBw
aW5nVVJMIDogbnVsbHB0ciwgbWV0cmljcyk7CisgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPmxv
YWRpbmdGaW5pc2hlZChyZXF1ZXN0SWQsIGVsYXBzZWRGaW5pc2hUaW1lLCBzb3VyY2VNYXBwaW5n
VVJMLCBXVEZNb3ZlKG1ldHJpY3MpKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6
OmRpZEZhaWxMb2FkaW5nKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgRG9jdW1lbnRMb2FkZXIq
IGxvYWRlciwgY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCkBAIC02NDIsOCArNjQ1LDcgQEAg
dm9pZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmRpZEZhaWxMb2FkaW5nKHVuc2lnbmVkIGxvbmcg
aWRlbnRpZmllciwgRG9jdW1lbnRMb2EKICAgICAgICAgfQogICAgIH0KIAotICAgIGJvb2wgY2Fu
Y2VsZWQgPSBlcnJvci5pc0NhbmNlbGxhdGlvbigpOwotICAgIG1fZnJvbnRlbmREaXNwYXRjaGVy
LT5sb2FkaW5nRmFpbGVkKHJlcXVlc3RJZCwgdGltZXN0YW1wKCksIGVycm9yLmxvY2FsaXplZERl
c2NyaXB0aW9uKCksIGNhbmNlbGVkID8gJmNhbmNlbGVkIDogbnVsbHB0cik7CisgICAgbV9mcm9u
dGVuZERpc3BhdGNoZXItPmxvYWRpbmdGYWlsZWQocmVxdWVzdElkLCB0aW1lc3RhbXAoKSwgZXJy
b3IubG9jYWxpemVkRGVzY3JpcHRpb24oKSwgZXJyb3IuaXNDYW5jZWxsYXRpb24oKSk7CiB9CiAK
IHZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50OjpkaWRMb2FkUmVzb3VyY2VGcm9tTWVtb3J5Q2Fj
aGUoRG9jdW1lbnRMb2FkZXIqIGxvYWRlciwgQ2FjaGVkUmVzb3VyY2UmIHJlc291cmNlKQpAQCAt
NjU0LDggKzY1Niw4IEBAIHZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50OjpkaWRMb2FkUmVzb3Vy
Y2VGcm9tTWVtb3J5Q2FjaGUoRG9jdW1lbnRMb2FkZXIqIGxvYWRlCiAKICAgICB1bnNpZ25lZCBs
b25nIGlkZW50aWZpZXIgPSBsb2FkZXItPmZyYW1lKCktPnBhZ2UoKS0+cHJvZ3Jlc3MoKS5jcmVh
dGVVbmlxdWVJZGVudGlmaWVyKCk7CiAgICAgU3RyaW5nIHJlcXVlc3RJZCA9IElkZW50aWZpZXJz
RmFjdG9yeTo6cmVxdWVzdElkKGlkZW50aWZpZXIpOwotICAgIFN0cmluZyBsb2FkZXJJZCA9IGxv
YWRlcklkZW50aWZpZXIobG9hZGVyKTsKLSAgICBTdHJpbmcgZnJhbWVJZCA9IGZyYW1lSWRlbnRp
Zmllcihsb2FkZXIpOworICAgIFByb3RvY29sOjpOZXR3b3JrOjpMb2FkZXJJZCBsb2FkZXJJZCA9
IGxvYWRlcklkZW50aWZpZXIobG9hZGVyKTsKKyAgICBQcm90b2NvbDo6TmV0d29yazo6RnJhbWVJ
ZCBmcmFtZUlkID0gZnJhbWVJZGVudGlmaWVyKGxvYWRlcik7CiAKICAgICBtX3Jlc291cmNlc0Rh
dGEtPnJlc291cmNlQ3JlYXRlZChyZXF1ZXN0SWQsIGxvYWRlcklkLCByZXNvdXJjZSk7CiAKQEAg
LTY2NSw3ICs2NjcsNyBAQCB2b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6ZGlkTG9hZFJlc291
cmNlRnJvbU1lbW9yeUNhY2hlKERvY3VtZW50TG9hZGVyKiBsb2FkZQogICAgIC8vIGluc3RlYWQg
b2Ygd2hhdGV2ZXIgUmVzb3VyY2VSZXNwb25zZTo6U291cmNlIHRoZSBDYWNoZWRSZXNvdXJjZXMn
cyByZXNwb25zZSBoYXMuCiAgICAgLy8gVGhlIGZyb250ZW5kIGFscmVhZHkga25vd3MgZm9yIGNl
cnRhaW4gdGhhdCB0aGlzIHdhcyBzZXJ2ZWQgZnJvbSB0aGUgbWVtb3J5IGNhY2hlLgogCi0gICAg
bV9mcm9udGVuZERpc3BhdGNoZXItPnJlcXVlc3RTZXJ2ZWRGcm9tTWVtb3J5Q2FjaGUocmVxdWVz
dElkLCBmcmFtZUlkLCBsb2FkZXJJZCwgbG9hZGVyLT51cmwoKS5zdHJpbmcoKSwgdGltZXN0YW1w
KCksIGluaXRpYXRvck9iamVjdCwgYnVpbGRPYmplY3RGb3JDYWNoZWRSZXNvdXJjZSgmcmVzb3Vy
Y2UpKTsKKyAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+cmVxdWVzdFNlcnZlZEZyb21NZW1vcnlD
YWNoZShyZXF1ZXN0SWQsIGZyYW1lSWQsIGxvYWRlcklkLCBsb2FkZXItPnVybCgpLnN0cmluZygp
LCB0aW1lc3RhbXAoKSwgV1RGTW92ZShpbml0aWF0b3JPYmplY3QpLCBidWlsZE9iamVjdEZvckNh
Y2hlZFJlc291cmNlKCZyZXNvdXJjZSkpOwogfQogCiB2b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2Vu
dDo6c2V0SW5pdGlhbFNjcmlwdENvbnRlbnQodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25z
dCBTdHJpbmcmIHNvdXJjZVN0cmluZykKQEAgLTcyOSwyNiArNzMxLDI2IEBAIHZvaWQgSW5zcGVj
dG9yTmV0d29ya0FnZW50OjpkaWRTY2hlZHVsZVN0eWxlUmVjYWxjdWxhdGlvbihEb2N1bWVudCYg
ZG9jdW1lbnQpCiAgICAgICAgIG1fc3R5bGVSZWNhbGN1bGF0aW9uSW5pdGlhdG9yID0gYnVpbGRJ
bml0aWF0b3JPYmplY3QoJmRvY3VtZW50KTsKIH0KIAotUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9j
b2w6Ok5ldHdvcms6OkluaXRpYXRvcj4gSW5zcGVjdG9yTmV0d29ya0FnZW50OjpidWlsZEluaXRp
YXRvck9iamVjdChEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCogcmVz
b3VyY2VSZXF1ZXN0KQorUmVmPFByb3RvY29sOjpOZXR3b3JrOjpJbml0aWF0b3I+IEluc3BlY3Rv
ck5ldHdvcmtBZ2VudDo6YnVpbGRJbml0aWF0b3JPYmplY3QoRG9jdW1lbnQqIGRvY3VtZW50LCBj
b25zdCBSZXNvdXJjZVJlcXVlc3QqIHJlc291cmNlUmVxdWVzdCkKIHsKICAgICAvLyBGSVhNRTog
V29ya2VyIHN1cHBvcnQuCiAgICAgaWYgKCFpc01haW5UaHJlYWQoKSkgewotICAgICAgICByZXR1
cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6SW5pdGlhdG9yOjpjcmVhdGUoKQotICAg
ICAgICAgICAgLnNldFR5cGUoSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6SW5pdGlhdG9y
OjpUeXBlOjpPdGhlcikKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpOZXR3b3JrOjpJbml0aWF0
b3I6OmNyZWF0ZSgpCisgICAgICAgICAgICAuc2V0VHlwZShQcm90b2NvbDo6TmV0d29yazo6SW5p
dGlhdG9yOjpUeXBlOjpPdGhlcikKICAgICAgICAgICAgIC5yZWxlYXNlKCk7CiAgICAgfQogCi0g
ICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OkluaXRpYXRvcj4gaW5pdGlh
dG9yT2JqZWN0OworICAgIFJlZlB0cjxQcm90b2NvbDo6TmV0d29yazo6SW5pdGlhdG9yPiBpbml0
aWF0b3JPYmplY3Q7CiAKICAgICBSZWY8U2NyaXB0Q2FsbFN0YWNrPiBzdGFja1RyYWNlID0gY3Jl
YXRlU2NyaXB0Q2FsbFN0YWNrKEpTRXhlY1N0YXRlOjpjdXJyZW50U3RhdGUoKSk7CiAgICAgaWYg
KHN0YWNrVHJhY2UtPnNpemUoKSA+IDApIHsKLSAgICAgICAgaW5pdGlhdG9yT2JqZWN0ID0gSW5z
cGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6SW5pdGlhdG9yOjpjcmVhdGUoKQotICAgICAgICAg
ICAgLnNldFR5cGUoSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6SW5pdGlhdG9yOjpUeXBl
OjpTY3JpcHQpCisgICAgICAgIGluaXRpYXRvck9iamVjdCA9IFByb3RvY29sOjpOZXR3b3JrOjpJ
bml0aWF0b3I6OmNyZWF0ZSgpCisgICAgICAgICAgICAuc2V0VHlwZShQcm90b2NvbDo6TmV0d29y
azo6SW5pdGlhdG9yOjpUeXBlOjpTY3JpcHQpCiAgICAgICAgICAgICAucmVsZWFzZSgpOwogICAg
ICAgICBpbml0aWF0b3JPYmplY3QtPnNldFN0YWNrVHJhY2Uoc3RhY2tUcmFjZS0+YnVpbGRJbnNw
ZWN0b3JBcnJheSgpKTsKICAgICB9IGVsc2UgaWYgKGRvY3VtZW50ICYmIGRvY3VtZW50LT5zY3Jp
cHRhYmxlRG9jdW1lbnRQYXJzZXIoKSkgewotICAgICAgICBpbml0aWF0b3JPYmplY3QgPSBJbnNw
ZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpJbml0aWF0b3I6OmNyZWF0ZSgpCi0gICAgICAgICAg
ICAuc2V0VHlwZShJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpJbml0aWF0b3I6OlR5cGU6
OlBhcnNlcikKKyAgICAgICAgaW5pdGlhdG9yT2JqZWN0ID0gUHJvdG9jb2w6Ok5ldHdvcms6Oklu
aXRpYXRvcjo6Y3JlYXRlKCkKKyAgICAgICAgICAgIC5zZXRUeXBlKFByb3RvY29sOjpOZXR3b3Jr
OjpJbml0aWF0b3I6OlR5cGU6OlBhcnNlcikKICAgICAgICAgICAgIC5yZWxlYXNlKCk7CiAgICAg
ICAgIGluaXRpYXRvck9iamVjdC0+c2V0VXJsKGRvY3VtZW50LT51cmwoKS5zdHJpbmcoKSk7CiAg
ICAgICAgIGluaXRpYXRvck9iamVjdC0+c2V0TGluZU51bWJlcihkb2N1bWVudC0+c2NyaXB0YWJs
ZURvY3VtZW50UGFyc2VyKCktPnRleHRQb3NpdGlvbigpLm1fbGluZS5vbmVCYXNlZEludCgpKTsK
QEAgLTc1OCw4ICs3NjAsOCBAQCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6
SW5pdGlhdG9yPiBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmJ1aWxkSW5pdAogICAgIGlmIChkb21B
Z2VudCAmJiByZXNvdXJjZVJlcXVlc3QpIHsKICAgICAgICAgaWYgKGF1dG8gaW5zcGVjdG9ySW5p
dGlhdG9yTm9kZUlkZW50aWZpZXIgPSByZXNvdXJjZVJlcXVlc3QtPmluc3BlY3RvckluaXRpYXRv
ck5vZGVJZGVudGlmaWVyKCkpIHsKICAgICAgICAgICAgIGlmICghaW5pdGlhdG9yT2JqZWN0KSB7
Ci0gICAgICAgICAgICAgICAgaW5pdGlhdG9yT2JqZWN0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6
TmV0d29yazo6SW5pdGlhdG9yOjpjcmVhdGUoKQotICAgICAgICAgICAgICAgICAgICAuc2V0VHlw
ZShJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpJbml0aWF0b3I6OlR5cGU6Ok90aGVyKQor
ICAgICAgICAgICAgICAgIGluaXRpYXRvck9iamVjdCA9IFByb3RvY29sOjpOZXR3b3JrOjpJbml0
aWF0b3I6OmNyZWF0ZSgpCisgICAgICAgICAgICAgICAgICAgIC5zZXRUeXBlKFByb3RvY29sOjpO
ZXR3b3JrOjpJbml0aWF0b3I6OlR5cGU6Ok90aGVyKQogICAgICAgICAgICAgICAgICAgICAucmVs
ZWFzZSgpOwogICAgICAgICAgICAgfQogCkBAIC03NjgsMTMgKzc3MCwxMyBAQCBSZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6SW5pdGlhdG9yPiBJbnNwZWN0b3JOZXR3b3JrQWdl
bnQ6OmJ1aWxkSW5pdAogICAgIH0KIAogICAgIGlmIChpbml0aWF0b3JPYmplY3QpCi0gICAgICAg
IHJldHVybiBpbml0aWF0b3JPYmplY3Q7CisgICAgICAgIHJldHVybiBpbml0aWF0b3JPYmplY3Qu
cmVsZWFzZU5vbk51bGwoKTsKIAogICAgIGlmIChtX2lzUmVjYWxjdWxhdGluZ1N0eWxlICYmIG1f
c3R5bGVSZWNhbGN1bGF0aW9uSW5pdGlhdG9yKQotICAgICAgICByZXR1cm4gbV9zdHlsZVJlY2Fs
Y3VsYXRpb25Jbml0aWF0b3I7CisgICAgICAgIHJldHVybiAqbV9zdHlsZVJlY2FsY3VsYXRpb25J
bml0aWF0b3I7CiAKLSAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6SW5p
dGlhdG9yOjpjcmVhdGUoKQotICAgICAgICAuc2V0VHlwZShJbnNwZWN0b3I6OlByb3RvY29sOjpO
ZXR3b3JrOjpJbml0aWF0b3I6OlR5cGU6Ok90aGVyKQorICAgIHJldHVybiBQcm90b2NvbDo6TmV0
d29yazo6SW5pdGlhdG9yOjpjcmVhdGUoKQorICAgICAgICAuc2V0VHlwZShQcm90b2NvbDo6TmV0
d29yazo6SW5pdGlhdG9yOjpUeXBlOjpPdGhlcikKICAgICAgICAgLnJlbGVhc2UoKTsKIH0KIApA
QCAtNzg1LDcgKzc4Nyw3IEBAIHZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50OjpkaWRDcmVhdGVX
ZWJTb2NrZXQodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBVCiAKIHZvaWQgSW5zcGVj
dG9yTmV0d29ya0FnZW50Ojp3aWxsU2VuZFdlYlNvY2tldEhhbmRzaGFrZVJlcXVlc3QodW5zaWdu
ZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCiB7Ci0g
ICAgYXV0byByZXF1ZXN0T2JqZWN0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6V2Vi
U29ja2V0UmVxdWVzdDo6Y3JlYXRlKCkKKyAgICBhdXRvIHJlcXVlc3RPYmplY3QgPSBQcm90b2Nv
bDo6TmV0d29yazo6V2ViU29ja2V0UmVxdWVzdDo6Y3JlYXRlKCkKICAgICAgICAgLnNldEhlYWRl
cnMoYnVpbGRPYmplY3RGb3JIZWFkZXJzKHJlcXVlc3QuaHR0cEhlYWRlckZpZWxkcygpKSkKICAg
ICAgICAgLnJlbGVhc2UoKTsKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+d2ViU29ja2V0V2ls
bFNlbmRIYW5kc2hha2VSZXF1ZXN0KElkZW50aWZpZXJzRmFjdG9yeTo6cmVxdWVzdElkKGlkZW50
aWZpZXIpLCB0aW1lc3RhbXAoKSwgV2FsbFRpbWU6Om5vdygpLnNlY29uZHNTaW5jZUVwb2NoKCku
c2Vjb25kcygpLCBXVEZNb3ZlKHJlcXVlc3RPYmplY3QpKTsKQEAgLTc5Myw3ICs3OTUsNyBAQCB2
b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6d2lsbFNlbmRXZWJTb2NrZXRIYW5kc2hha2VSZXF1
ZXN0KHVuc2lnbmVkIGxvbmcgaWRlbgogCiB2b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6ZGlk
UmVjZWl2ZVdlYlNvY2tldEhhbmRzaGFrZVJlc3BvbnNlKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmll
ciwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCiB7Ci0gICAgYXV0byByZXNwb25z
ZU9iamVjdCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OldlYlNvY2tldFJlc3BvbnNl
OjpjcmVhdGUoKQorICAgIGF1dG8gcmVzcG9uc2VPYmplY3QgPSBQcm90b2NvbDo6TmV0d29yazo6
V2ViU29ja2V0UmVzcG9uc2U6OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRTdGF0dXMocmVzcG9uc2Uu
aHR0cFN0YXR1c0NvZGUoKSkKICAgICAgICAgLnNldFN0YXR1c1RleHQocmVzcG9uc2UuaHR0cFN0
YXR1c1RleHQoKSkKICAgICAgICAgLnNldEhlYWRlcnMoYnVpbGRPYmplY3RGb3JIZWFkZXJzKHJl
c3BvbnNlLmh0dHBIZWFkZXJGaWVsZHMoKSkpCkBAIC04MjAsMTIgKzgyMiw3IEBAIHZvaWQgSW5z
cGVjdG9yTmV0d29ya0FnZW50OjpkaWRSZWNlaXZlV2ViU29ja2V0RnJhbWVFcnJvcih1bnNpZ25l
ZCBsb25nIGlkZW50aWZpCiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPndlYlNvY2tldEZyYW1l
RXJyb3IoSWRlbnRpZmllcnNGYWN0b3J5OjpyZXF1ZXN0SWQoaWRlbnRpZmllciksIHRpbWVzdGFt
cCgpLCBlcnJvck1lc3NhZ2UpOwogfQogCi12b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6ZW5h
YmxlKEVycm9yU3RyaW5nJikKLXsKLSAgICBlbmFibGUoKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JO
ZXR3b3JrQWdlbnQ6OmVuYWJsZSgpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNw
ZWN0b3JOZXR3b3JrQWdlbnQ6OmVuYWJsZSgpCiB7CiAgICAgbV9lbmFibGVkID0gdHJ1ZTsKICAg
ICBtX2luc3RydW1lbnRpbmdBZ2VudHMuc2V0RW5hYmxlZE5ldHdvcmtBZ2VudCh0aGlzKTsKQEAg
LTg1Nyw5ICs4NTQsMTEgQEAgdm9pZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmVuYWJsZSgpCiAg
ICAgICAgICAgICAgICAgZGlkQ2xvc2VXZWJTb2NrZXQoaWRlbnRpZmllcik7CiAgICAgICAgIH0K
ICAgICB9CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2Vu
dDo6ZGlzYWJsZShFcnJvclN0cmluZyYpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJ
bnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmRpc2FibGUoKQogewogICAgIG1fZW5hYmxlZCA9IGZhbHNl
OwogICAgIG1faW50ZXJjZXB0aW9uRW5hYmxlZCA9IGZhbHNlOwpAQCAtODcyLDkgKzg3MSwxMSBA
QCB2b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6ZGlzYWJsZShFcnJvclN0cmluZyYpCiAgICAg
Y29udGludWVQZW5kaW5nUmVzcG9uc2VzKCk7CiAKICAgICBzZXRSZXNvdXJjZUNhY2hpbmdEaXNh
YmxlZChmYWxzZSk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi1ib29sIEluc3BlY3Rvck5ldHdv
cmtBZ2VudDo6c2hvdWxkSW50ZXJjZXB0KFVSTCB1cmwsIE5ldHdvcmtTdGFnZSBuZXR3b3JrU3Rh
Z2UpCitib29sIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6c2hvdWxkSW50ZXJjZXB0KFVSTCB1cmws
IFByb3RvY29sOjpOZXR3b3JrOjpOZXR3b3JrU3RhZ2UgbmV0d29ya1N0YWdlKQogewogICAgIHVy
bC5yZW1vdmVGcmFnbWVudElkZW50aWZpZXIoKTsKIApAQCAtOTExLDU2ICs5MTIsNTUgQEAgdm9p
ZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmNvbnRpbnVlUGVuZGluZ1Jlc3BvbnNlcygpCiAgICAg
bV9wZW5kaW5nSW50ZXJjZXB0UmVzcG9uc2VzLmNsZWFyKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9y
TmV0d29ya0FnZW50OjpzZXRFeHRyYUhUVFBIZWFkZXJzKEVycm9yU3RyaW5nJiwgY29uc3QgSlNP
Tjo6T2JqZWN0JiBoZWFkZXJzKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVj
dG9yTmV0d29ya0FnZW50OjpzZXRFeHRyYUhUVFBIZWFkZXJzKFJlZjxKU09OOjpPYmplY3Q+JiYg
aGVhZGVycykKIHsKLSAgICBmb3IgKGF1dG8mIGVudHJ5IDogaGVhZGVycykgewotICAgICAgICBT
dHJpbmcgc3RyaW5nVmFsdWU7Ci0gICAgICAgIGlmIChlbnRyeS52YWx1ZS0+YXNTdHJpbmcoc3Ry
aW5nVmFsdWUpKQorICAgIGZvciAoYXV0byYgZW50cnkgOiBoZWFkZXJzLmdldCgpKSB7CisgICAg
ICAgIGF1dG8gc3RyaW5nVmFsdWUgPSBlbnRyeS52YWx1ZS0+YXNTdHJpbmcoKTsKKyAgICAgICAg
aWYgKCEhc3RyaW5nVmFsdWUpCiAgICAgICAgICAgICBtX2V4dHJhUmVxdWVzdEhlYWRlcnMuc2V0
KGVudHJ5LmtleSwgc3RyaW5nVmFsdWUpOwogICAgIH0KKworICAgIHJldHVybiB7IH07CiB9CiAK
LXZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50OjpnZXRSZXNwb25zZUJvZHkoRXJyb3JTdHJpbmcm
IGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgU3RyaW5nKiBjb250ZW50LCBi
b29sKiBiYXNlNjRFbmNvZGVkKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8c3RkOjp0dXBsZTxT
dHJpbmcsIGJvb2wgLyogYmFzZTY0RW5jb2RlZCAqLz4+IEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6
Z2V0UmVzcG9uc2VCb2R5KGNvbnN0IFByb3RvY29sOjpOZXR3b3JrOjpSZXF1ZXN0SWQmIHJlcXVl
c3RJZCkKIHsKICAgICBOZXR3b3JrUmVzb3VyY2VzRGF0YTo6UmVzb3VyY2VEYXRhIGNvbnN0KiBy
ZXNvdXJjZURhdGEgPSBtX3Jlc291cmNlc0RhdGEtPmRhdGEocmVxdWVzdElkKTsKLSAgICBpZiAo
IXJlc291cmNlRGF0YSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIHJlc291cmNl
IGZvciBnaXZlbiByZXF1ZXN0SWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYg
KCFyZXNvdXJjZURhdGEpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTWlzc2luZyBy
ZXNvdXJjZSBmb3IgZ2l2ZW4gcmVxdWVzdElkIl9zKTsKIAotICAgIGlmIChyZXNvdXJjZURhdGEt
Pmhhc0NvbnRlbnQoKSkgewotICAgICAgICAqYmFzZTY0RW5jb2RlZCA9IHJlc291cmNlRGF0YS0+
YmFzZTY0RW5jb2RlZCgpOwotICAgICAgICAqY29udGVudCA9IHJlc291cmNlRGF0YS0+Y29udGVu
dCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmIChyZXNvdXJjZURhdGEtPmhhc0Nv
bnRlbnQoKSkKKyAgICAgICAgcmV0dXJuIHsgeyByZXNvdXJjZURhdGEtPmNvbnRlbnQoKSwgcmVz
b3VyY2VEYXRhLT5iYXNlNjRFbmNvZGVkKCkgfSB9OwogCi0gICAgaWYgKHJlc291cmNlRGF0YS0+
aXNDb250ZW50RXZpY3RlZCgpKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIlJlc291cmNlIGNv
bnRlbnQgd2FzIGV2aWN0ZWQgZnJvbSBpbnNwZWN0b3IgY2FjaGUiX3M7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9CisgICAgaWYgKHJlc291cmNlRGF0YS0+aXNDb250ZW50RXZpY3RlZCgpKQorICAg
ICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIlJlc291cmNlIGNvbnRlbnQgd2FzIGV2aWN0ZWQg
ZnJvbSBpbnNwZWN0b3IgY2FjaGUiX3MpOwogCiAgICAgaWYgKHJlc291cmNlRGF0YS0+YnVmZmVy
KCkgJiYgIXJlc291cmNlRGF0YS0+dGV4dEVuY29kaW5nTmFtZSgpLmlzTnVsbCgpKSB7Ci0gICAg
ICAgICpiYXNlNjRFbmNvZGVkID0gZmFsc2U7Ci0gICAgICAgIGlmIChJbnNwZWN0b3JQYWdlQWdl
bnQ6OnNoYXJlZEJ1ZmZlckNvbnRlbnQocmVzb3VyY2VEYXRhLT5idWZmZXIoKSwgcmVzb3VyY2VE
YXRhLT50ZXh0RW5jb2RpbmdOYW1lKCksICpiYXNlNjRFbmNvZGVkLCBjb250ZW50KSkKLSAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgU3RyaW5nIGJvZHk7CisgICAgICAgIGlmIChJbnNwZWN0
b3JQYWdlQWdlbnQ6OnNoYXJlZEJ1ZmZlckNvbnRlbnQocmVzb3VyY2VEYXRhLT5idWZmZXIoKSwg
cmVzb3VyY2VEYXRhLT50ZXh0RW5jb2RpbmdOYW1lKCksIGZhbHNlLCAmYm9keSkpCisgICAgICAg
ICAgICByZXR1cm4geyB7IGJvZHksIGZhbHNlIH0gfTsKICAgICB9CiAKICAgICBpZiAocmVzb3Vy
Y2VEYXRhLT5jYWNoZWRSZXNvdXJjZSgpKSB7Ci0gICAgICAgIGlmIChJbnNwZWN0b3JOZXR3b3Jr
QWdlbnQ6OmNhY2hlZFJlc291cmNlQ29udGVudCgqcmVzb3VyY2VEYXRhLT5jYWNoZWRSZXNvdXJj
ZSgpLCBjb250ZW50LCBiYXNlNjRFbmNvZGVkKSkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgU3RyaW5nIGJvZHk7CisgICAgICAgIGJvb2wgYmFzZTY0RW5jb2RlZDsKKyAgICAgICAgaWYg
KEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6Y2FjaGVkUmVzb3VyY2VDb250ZW50KCpyZXNvdXJjZURh
dGEtPmNhY2hlZFJlc291cmNlKCksICZib2R5LCAmYmFzZTY0RW5jb2RlZCkpCisgICAgICAgICAg
ICByZXR1cm4geyB7IGJvZHksIGJhc2U2NEVuY29kZWQgfSB9OwogICAgIH0KIAotICAgIGVycm9y
U3RyaW5nID0gIk1pc3NpbmcgY29udGVudCBvZiByZXNvdXJjZSBmb3IgZ2l2ZW4gcmVxdWVzdElk
Il9zOworICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTWlzc2luZyBjb250ZW50IG9mIHJlc291
cmNlIGZvciBnaXZlbiByZXF1ZXN0SWQiX3MpOwogfQogCi12b2lkIEluc3BlY3Rvck5ldHdvcmtB
Z2VudDo6c2V0UmVzb3VyY2VDYWNoaW5nRGlzYWJsZWQoRXJyb3JTdHJpbmcmLCBib29sIGRpc2Fi
bGVkKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yTmV0d29ya0FnZW50
OjpzZXRSZXNvdXJjZUNhY2hpbmdEaXNhYmxlZChib29sIGRpc2FibGVkKQogewotICAgIHNldFJl
c291cmNlQ2FjaGluZ0Rpc2FibGVkKGRpc2FibGVkKTsKKyAgICBzZXRSZXNvdXJjZUNhY2hpbmdE
aXNhYmxlZEludGVyYWwoZGlzYWJsZWQpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJ
bnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmxvYWRSZXNvdXJjZShjb25zdCBTdHJpbmcmIGZyYW1lSWQs
IGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nLCBSZWY8TG9hZFJlc291cmNlQ2FsbGJhY2s+JiYgY2Fs
bGJhY2spCit2b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6bG9hZFJlc291cmNlKGNvbnN0IFBy
b3RvY29sOjpOZXR3b3JrOjpGcmFtZUlkJiBmcmFtZUlkLCBjb25zdCBTdHJpbmcmIHVybFN0cmlu
ZywgUmVmPExvYWRSZXNvdXJjZUNhbGxiYWNrPiYmIGNhbGxiYWNrKQogewotICAgIEVycm9yU3Ry
aW5nIGVycm9yU3RyaW5nOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsK
ICAgICBhdXRvKiBjb250ZXh0ID0gc2NyaXB0RXhlY3V0aW9uQ29udGV4dChlcnJvclN0cmluZywg
ZnJhbWVJZCk7CiAgICAgaWYgKCFjb250ZXh0KSB7CiAgICAgICAgIGNhbGxiYWNrLT5zZW5kRmFp
bHVyZShlcnJvclN0cmluZyk7CkBAIC05OTQsMjYgKzk5NCwyMiBAQCB2b2lkIEluc3BlY3Rvck5l
dHdvcmtBZ2VudDo6bG9hZFJlc291cmNlKGNvbnN0IFN0cmluZyYgZnJhbWVJZCwgY29uc3QgU3Ry
aW5nJiB1cgogICAgIGluc3BlY3RvclRocmVhZGFibGVMb2FkZXJDbGllbnQtPnNldExvYWRlcihX
VEZNb3ZlKGxvYWRlcikpOwogfQogCi12b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6Z2V0U2Vy
aWFsaXplZENlcnRpZmljYXRlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5n
JiByZXF1ZXN0SWQsIFN0cmluZyogc2VyaWFsaXplZENlcnRpZmljYXRlKQorUHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8U3RyaW5nPiBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmdldFNlcmlhbGl6ZWRD
ZXJ0aWZpY2F0ZShjb25zdCBQcm90b2NvbDo6TmV0d29yazo6UmVxdWVzdElkJiByZXF1ZXN0SWQp
CiB7CiAgICAgYXV0byogcmVzb3VyY2VEYXRhID0gbV9yZXNvdXJjZXNEYXRhLT5kYXRhKHJlcXVl
c3RJZCk7Ci0gICAgaWYgKCFyZXNvdXJjZURhdGEpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAi
TWlzc2luZyByZXNvdXJjZSBmb3IgZ2l2ZW4gcmVxdWVzdElkIl9zOwotICAgICAgICByZXR1cm47
Ci0gICAgfQorICAgIGlmICghcmVzb3VyY2VEYXRhKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoIk1pc3NpbmcgcmVzb3VyY2UgZm9yIGdpdmVuIHJlcXVlc3RJZCJfcyk7CiAKICAgICBh
dXRvJiBjZXJ0aWZpY2F0ZSA9IHJlc291cmNlRGF0YS0+Y2VydGlmaWNhdGVJbmZvKCk7Ci0gICAg
aWYgKCFjZXJ0aWZpY2F0ZSB8fCBjZXJ0aWZpY2F0ZS52YWx1ZSgpLmlzRW1wdHkoKSkgewotICAg
ICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIGNlcnRpZmljYXRlIG9mIHJlc291cmNlIGZvciBn
aXZlbiByZXF1ZXN0SWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKCFjZXJ0
aWZpY2F0ZSB8fCBjZXJ0aWZpY2F0ZS52YWx1ZSgpLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJu
IG1ha2VVbmV4cGVjdGVkKCJNaXNzaW5nIGNlcnRpZmljYXRlIG9mIHJlc291cmNlIGZvciBnaXZl
biByZXF1ZXN0SWQiX3MpOwogCiAgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2RlciBlbmNvZGVy
OwogICAgIFdURjo6UGVyc2lzdGVuY2U6OkNvZGVyPFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbz46
OmVuY29kZShlbmNvZGVyLCBjZXJ0aWZpY2F0ZS52YWx1ZSgpKTsKLSAgICAqc2VyaWFsaXplZENl
cnRpZmljYXRlID0gYmFzZTY0RW5jb2RlKGVuY29kZXIuYnVmZmVyKCksIGVuY29kZXIuYnVmZmVy
U2l6ZSgpKTsKKyAgICByZXR1cm4gYmFzZTY0RW5jb2RlKGVuY29kZXIuYnVmZmVyKCksIGVuY29k
ZXIuYnVmZmVyU2l6ZSgpKTsKIH0KIAotV2ViU29ja2V0KiBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6
OndlYlNvY2tldEZvclJlcXVlc3RJZChjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCkKK1dlYlNvY2tl
dCogSW5zcGVjdG9yTmV0d29ya0FnZW50Ojp3ZWJTb2NrZXRGb3JSZXF1ZXN0SWQoY29uc3QgUHJv
dG9jb2w6Ok5ldHdvcms6OlJlcXVlc3RJZCYgcmVxdWVzdElkKQogewogICAgIExvY2tIb2xkZXIg
bG9jayhXZWJTb2NrZXQ6OmFsbEFjdGl2ZVdlYlNvY2tldHNNdXRleCgpKTsKIApAQCAtMTAzMSwz
OSArMTAyNywzNiBAQCBzdGF0aWMgSlNDOjpKU1ZhbHVlIHdlYlNvY2tldEFzU2NyaXB0VmFsdWUo
SlNDOjpKU0dsb2JhbE9iamVjdCYgc3RhdGUsIFdlYlNvY2tldAogICAgIHJldHVybiB0b0pTKCZz
dGF0ZSwgZGVwcmVjYXRlZEdsb2JhbE9iamVjdEZvclByb3RvdHlwZSgmc3RhdGUpLCB3ZWJTb2Nr
ZXQpOwogfQogCi12b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6cmVzb2x2ZVdlYlNvY2tldChF
cnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBjb25zdCBT
dHJpbmcqIG9iamVjdEdyb3VwLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6
UmVtb3RlT2JqZWN0PiYgcmVzdWx0KQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPFByb3Rv
Y29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+PiBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OnJlc29s
dmVXZWJTb2NrZXQoY29uc3QgUHJvdG9jb2w6Ok5ldHdvcms6OlJlcXVlc3RJZCYgcmVxdWVzdElk
LCBjb25zdCBTdHJpbmcmIG9iamVjdEdyb3VwKQogewogICAgIFdlYlNvY2tldCogd2ViU29ja2V0
ID0gd2ViU29ja2V0Rm9yUmVxdWVzdElkKHJlcXVlc3RJZCk7Ci0gICAgaWYgKCF3ZWJTb2NrZXQp
IHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWlzc2luZyB3ZWIgc29ja2V0IGZvciBnaXZlbiBy
ZXF1ZXN0SWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKCF3ZWJTb2NrZXQp
CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTWlzc2luZyB3ZWIgc29ja2V0IGZvciBn
aXZlbiByZXF1ZXN0SWQiX3MpOwogCiAgICAgLy8gRklYTUU6IDxodHRwczovL3dlYmtpdC5vcmcv
Yi8xNjg0NzU+IFdlYiBJbnNwZWN0b3I6IENvcnJlY3RseSBkaXNwbGF5IGlmcmFtZSdzIGFuZCB3
b3JrZXIncyBXZWJTb2NrZXRzCiAgICAgaWYgKCFpczxEb2N1bWVudD4od2ViU29ja2V0LT5zY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCkpKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBt
YWtlVW5leHBlY3RlZCgiTm90IHN1cHBvcnRlZCIpOwogCiAgICAgYXV0byogZG9jdW1lbnQgPSBk
b3duY2FzdDxEb2N1bWVudD4od2ViU29ja2V0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOwog
ICAgIGF1dG8qIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSkgewot
ICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIGZyYW1lIG9mIHdlYiBzb2NrZXQgZm9yIGdp
dmVuIHJlcXVlc3RJZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoIWZyYW1l
KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk1pc3NpbmcgZnJhbWUgb2Ygd2ViIHNv
Y2tldCBmb3IgZ2l2ZW4gcmVxdWVzdElkIl9zKTsKIAogICAgIGF1dG8mIHN0YXRlID0gKm1haW5X
b3JsZEV4ZWNTdGF0ZShmcmFtZSk7CiAgICAgYXV0byBpbmplY3RlZFNjcmlwdCA9IG1faW5qZWN0
ZWRTY3JpcHRNYW5hZ2VyLmluamVjdGVkU2NyaXB0Rm9yKCZzdGF0ZSk7CiAgICAgQVNTRVJUKCFp
bmplY3RlZFNjcmlwdC5oYXNOb1ZhbHVlKCkpOwogCi0gICAgU3RyaW5nIG9iamVjdEdyb3VwTmFt
ZSA9IG9iamVjdEdyb3VwID8gKm9iamVjdEdyb3VwIDogU3RyaW5nKCk7Ci0gICAgcmVzdWx0ID0g
aW5qZWN0ZWRTY3JpcHQud3JhcE9iamVjdCh3ZWJTb2NrZXRBc1NjcmlwdFZhbHVlKHN0YXRlLCB3
ZWJTb2NrZXQpLCBvYmplY3RHcm91cE5hbWUpOworICAgIGF1dG8gb2JqZWN0ID0gaW5qZWN0ZWRT
Y3JpcHQud3JhcE9iamVjdCh3ZWJTb2NrZXRBc1NjcmlwdFZhbHVlKHN0YXRlLCB3ZWJTb2NrZXQp
LCBvYmplY3RHcm91cCk7CisgICAgaWYgKCFvYmplY3QpCisgICAgICAgIHJldHVybiBtYWtlVW5l
eHBlY3RlZCgiSW50ZXJuYWwgZXJyb3I6IHVuYWJsZSB0byBjYXN0IFdlYlNvY2tldCIpOworCisg
ICAgcmV0dXJuIG9iamVjdC5yZWxlYXNlTm9uTnVsbCgpOwogfQogCi12b2lkIEluc3BlY3Rvck5l
dHdvcmtBZ2VudDo6c2V0SW50ZXJjZXB0aW9uRW5hYmxlZChFcnJvclN0cmluZyYgZXJyb3JTdHJp
bmcsIGJvb2wgZW5hYmxlZCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3Rv
ck5ldHdvcmtBZ2VudDo6c2V0SW50ZXJjZXB0aW9uRW5hYmxlZChib29sIGVuYWJsZWQpCiB7Ci0g
ICAgaWYgKG1faW50ZXJjZXB0aW9uRW5hYmxlZCA9PSBlbmFibGVkKSB7Ci0gICAgICAgIGVycm9y
U3RyaW5nID0gbV9pbnRlcmNlcHRpb25FbmFibGVkID8gIkludGVyY2VwdGlvbiBhbHJlYWR5IGVu
YWJsZWQiX3MgOiAiSW50ZXJjZXB0aW9uIGFscmVhZHkgZGlzYWJsZWQiX3M7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9CisgICAgaWYgKG1faW50ZXJjZXB0aW9uRW5hYmxlZCA9PSBlbmFibGVkKQor
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQobV9pbnRlcmNlcHRpb25FbmFibGVkID8gIklu
dGVyY2VwdGlvbiBhbHJlYWR5IGVuYWJsZWQiX3MgOiAiSW50ZXJjZXB0aW9uIGFscmVhZHkgZGlz
YWJsZWQiX3MpOwogCiAgICAgbV9pbnRlcmNlcHRpb25FbmFibGVkID0gZW5hYmxlZDsKIApAQCAt
MTA3MSw0NiArMTA2NCw0MCBAQCB2b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6c2V0SW50ZXJj
ZXB0aW9uRW5hYmxlZChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGJvbwogICAgICAgICBjb250
aW51ZVBlbmRpbmdSZXF1ZXN0cygpOwogICAgICAgICBjb250aW51ZVBlbmRpbmdSZXNwb25zZXMo
KTsKICAgICB9CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3Rvck5ldHdvcmtB
Z2VudDo6YWRkSW50ZXJjZXB0aW9uKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3Ry
aW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgbmV0d29ya1N0YWdlU3RyaW5nLCBjb25zdCBib29sKiBv
cHRpb25hbENhc2VTZW5zaXRpdmUsIGNvbnN0IGJvb2wqIG9wdGlvbmFsSXNSZWdleCkKK1Byb3Rv
Y29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6YWRkSW50ZXJj
ZXB0aW9uKGNvbnN0IFN0cmluZyYgdXJsLCBQcm90b2NvbDo6TmV0d29yazo6TmV0d29ya1N0YWdl
IG5ldHdvcmtTdGFnZSwgT3B0aW9uYWw8Ym9vbD4mJiBjYXNlU2Vuc2l0aXZlLCBPcHRpb25hbDxi
b29sPiYmIGlzUmVnZXgpCiB7Ci0gICAgYXV0byBuZXR3b3JrU3RhZ2UgPSBJbnNwZWN0b3I6OlBy
b3RvY29sOjpJbnNwZWN0b3JIZWxwZXJzOjpwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVj
dG9yOjpQcm90b2NvbDo6TmV0d29yazo6TmV0d29ya1N0YWdlPihuZXR3b3JrU3RhZ2VTdHJpbmcp
OwotICAgIGlmICghbmV0d29ya1N0YWdlKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gbWFrZVN0
cmluZygiVW5rbm93biBuZXR3b3JrU3RhZ2U6ICJfcywgbmV0d29ya1N0YWdlU3RyaW5nKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIEludGVyY2VwdCBpbnRlcmNlcHQ7CiAgICAgaW50
ZXJjZXB0LnVybCA9IHVybDsKLSAgICBpZiAob3B0aW9uYWxDYXNlU2Vuc2l0aXZlKQotICAgICAg
ICBpbnRlcmNlcHQuY2FzZVNlbnNpdGl2ZSA9ICpvcHRpb25hbENhc2VTZW5zaXRpdmU7Ci0gICAg
aWYgKG9wdGlvbmFsSXNSZWdleCkKLSAgICAgICAgaW50ZXJjZXB0LmlzUmVnZXggPSAqb3B0aW9u
YWxJc1JlZ2V4OwotICAgIGludGVyY2VwdC5uZXR3b3JrU3RhZ2UgPSBuZXR3b3JrU3RhZ2UudmFs
dWUoKTsKKyAgICBpZiAoY2FzZVNlbnNpdGl2ZSkKKyAgICAgICAgaW50ZXJjZXB0LmNhc2VTZW5z
aXRpdmUgPSAqY2FzZVNlbnNpdGl2ZTsKKyAgICBpZiAoaXNSZWdleCkKKyAgICAgICAgaW50ZXJj
ZXB0LmlzUmVnZXggPSAqaXNSZWdleDsKKyAgICBpbnRlcmNlcHQubmV0d29ya1N0YWdlID0gbmV0
d29ya1N0YWdlOwogCiAgICAgaWYgKCFtX2ludGVyY2VwdHMuYXBwZW5kSWZOb3RDb250YWlucyhp
bnRlcmNlcHQpKQotICAgICAgICBlcnJvclN0cmluZyA9ICJJbnRlcmNlcHQgZm9yIGdpdmVuIHVy
bCwgZ2l2ZW4gaXNSZWdleCwgYW5kIGdpdmVuIHN0YWdlIGFscmVhZHkgZXhpc3RzIl9zOworICAg
ICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkludGVyY2VwdCBmb3IgZ2l2ZW4gdXJsLCBnaXZl
biBpc1JlZ2V4LCBhbmQgZ2l2ZW4gc3RhZ2UgYWxyZWFkeSBleGlzdHMiX3MpOworCisgICAgcmV0
dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OnJlbW92ZUludGVyY2Vw
dGlvbihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBT
dHJpbmcmIG5ldHdvcmtTdGFnZVN0cmluZywgY29uc3QgYm9vbCogb3B0aW9uYWxDYXNlU2Vuc2l0
aXZlLCBjb25zdCBib29sKiBvcHRpb25hbElzUmVnZXgpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdP
cjx2b2lkPiBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OnJlbW92ZUludGVyY2VwdGlvbihjb25zdCBT
dHJpbmcmIHVybCwgUHJvdG9jb2w6Ok5ldHdvcms6Ok5ldHdvcmtTdGFnZSBuZXR3b3JrU3RhZ2Us
IE9wdGlvbmFsPGJvb2w+JiYgY2FzZVNlbnNpdGl2ZSwgT3B0aW9uYWw8Ym9vbD4mJiBpc1JlZ2V4
KQogewotICAgIGF1dG8gbmV0d29ya1N0YWdlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6SW5zcGVj
dG9ySGVscGVyczo6cGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6
Ok5ldHdvcms6Ok5ldHdvcmtTdGFnZT4obmV0d29ya1N0YWdlU3RyaW5nKTsKLSAgICBpZiAoIW5l
dHdvcmtTdGFnZSkgewotICAgICAgICBlcnJvclN0cmluZyA9IG1ha2VTdHJpbmcoIlVua25vd24g
bmV0d29ya1N0YWdlOiAiX3MsIG5ldHdvcmtTdGFnZVN0cmluZyk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KICAgICBJbnRlcmNlcHQgaW50ZXJjZXB0OwogICAgIGludGVyY2VwdC51cmwgPSB1
cmw7Ci0gICAgaWYgKG9wdGlvbmFsQ2FzZVNlbnNpdGl2ZSkKLSAgICAgICAgaW50ZXJjZXB0LmNh
c2VTZW5zaXRpdmUgPSAqb3B0aW9uYWxDYXNlU2Vuc2l0aXZlOwotICAgIGlmIChvcHRpb25hbElz
UmVnZXgpCi0gICAgICAgIGludGVyY2VwdC5pc1JlZ2V4ID0gKm9wdGlvbmFsSXNSZWdleDsKLSAg
ICBpbnRlcmNlcHQubmV0d29ya1N0YWdlID0gbmV0d29ya1N0YWdlLnZhbHVlKCk7CisgICAgaWYg
KGNhc2VTZW5zaXRpdmUpCisgICAgICAgIGludGVyY2VwdC5jYXNlU2Vuc2l0aXZlID0gKmNhc2VT
ZW5zaXRpdmU7CisgICAgaWYgKGlzUmVnZXgpCisgICAgICAgIGludGVyY2VwdC5pc1JlZ2V4ID0g
KmlzUmVnZXg7CisgICAgaW50ZXJjZXB0Lm5ldHdvcmtTdGFnZSA9IG5ldHdvcmtTdGFnZTsKIAog
ICAgIGlmICghbV9pbnRlcmNlcHRzLnJlbW92ZUFsbChpbnRlcmNlcHQpKQotICAgICAgICBlcnJv
clN0cmluZyA9ICJNaXNzaW5nIGludGVyY2VwdCBmb3IgZ2l2ZW4gdXJsLCBnaXZlbiBpc1JlZ2V4
LCBhbmQgZ2l2ZW4gc3RhZ2UiX3M7CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTWlz
c2luZyBpbnRlcmNlcHQgZm9yIGdpdmVuIHVybCwgZ2l2ZW4gaXNSZWdleCwgYW5kIGdpdmVuIHN0
YWdlIl9zKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKIGJvb2wgSW5zcGVjdG9yTmV0d29ya0Fn
ZW50Ojp3aWxsSW50ZXJjZXB0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKQEAgLTEx
MTgsOCArMTEwNSw4IEBAIGJvb2wgSW5zcGVjdG9yTmV0d29ya0FnZW50Ojp3aWxsSW50ZXJjZXB0
KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKICAgICBpZiAoIW1faW50ZXJjZXB0aW9u
RW5hYmxlZCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmV0dXJuIHNob3VsZEludGVy
Y2VwdChyZXF1ZXN0LnVybCgpLCBOZXR3b3JrU3RhZ2U6OlJlcXVlc3QpCi0gICAgICAgIHx8IHNo
b3VsZEludGVyY2VwdChyZXF1ZXN0LnVybCgpLCBOZXR3b3JrU3RhZ2U6OlJlc3BvbnNlKTsKKyAg
ICByZXR1cm4gc2hvdWxkSW50ZXJjZXB0KHJlcXVlc3QudXJsKCksIFByb3RvY29sOjpOZXR3b3Jr
OjpOZXR3b3JrU3RhZ2U6OlJlcXVlc3QpCisgICAgICAgIHx8IHNob3VsZEludGVyY2VwdChyZXF1
ZXN0LnVybCgpLCBQcm90b2NvbDo6TmV0d29yazo6TmV0d29ya1N0YWdlOjpSZXNwb25zZSk7CiB9
CiAKIGJvb2wgSW5zcGVjdG9yTmV0d29ya0FnZW50OjpzaG91bGRJbnRlcmNlcHRSZXF1ZXN0KGNv
bnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKQEAgLTExMjcsNyArMTExNCw3IEBAIGJvb2wg
SW5zcGVjdG9yTmV0d29ya0FnZW50OjpzaG91bGRJbnRlcmNlcHRSZXF1ZXN0KGNvbnN0IFJlc291
cmNlUmVxdWVzdCYgcmVxdWVzCiAgICAgaWYgKCFtX2ludGVyY2VwdGlvbkVuYWJsZWQpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiBzaG91bGRJbnRlcmNlcHQocmVxdWVzdC51
cmwoKSwgTmV0d29ya1N0YWdlOjpSZXF1ZXN0KTsKKyAgICByZXR1cm4gc2hvdWxkSW50ZXJjZXB0
KHJlcXVlc3QudXJsKCksIFByb3RvY29sOjpOZXR3b3JrOjpOZXR3b3JrU3RhZ2U6OlJlcXVlc3Qp
OwogfQogCiBib29sIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6c2hvdWxkSW50ZXJjZXB0UmVzcG9u
c2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCkBAIC0xMTM1LDcgKzExMjIsNyBA
QCBib29sIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6c2hvdWxkSW50ZXJjZXB0UmVzcG9uc2UoY29u
c3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcAogICAgIGlmICghbV9pbnRlcmNlcHRpb25FbmFibGVk
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gc2hvdWxkSW50ZXJjZXB0KHJl
c3BvbnNlLnVybCgpLCBOZXR3b3JrU3RhZ2U6OlJlc3BvbnNlKTsKKyAgICByZXR1cm4gc2hvdWxk
SW50ZXJjZXB0KHJlc3BvbnNlLnVybCgpLCBQcm90b2NvbDo6TmV0d29yazo6TmV0d29ya1N0YWdl
OjpSZXNwb25zZSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50OjppbnRlcmNlcHRS
ZXF1ZXN0KFJlc291cmNlTG9hZGVyJiBsb2FkZXIsIEZ1bmN0aW9uPHZvaWQoY29uc3QgUmVzb3Vy
Y2VSZXF1ZXN0Jik+JiYgaGFuZGxlcikKQEAgLTExNjYsOTIgKzExNTMsODkgQEAgdm9pZCBJbnNw
ZWN0b3JOZXR3b3JrQWdlbnQ6OmludGVyY2VwdFJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9u
c2UmIHJlc3BvbnNlLAogCiAgICAgbV9wZW5kaW5nSW50ZXJjZXB0UmVzcG9uc2VzLnNldChyZXF1
ZXN0SWQsIG1ha2VVbmlxdWU8UGVuZGluZ0ludGVyY2VwdFJlc3BvbnNlPihyZXNwb25zZSwgV1RG
TW92ZShoYW5kbGVyKSkpOwogCi0gICAgbV9mcm9udGVuZERpc3BhdGNoZXItPnJlc3BvbnNlSW50
ZXJjZXB0ZWQocmVxdWVzdElkLCBidWlsZE9iamVjdEZvclJlc291cmNlUmVzcG9uc2UocmVzcG9u
c2UsIG51bGxwdHIpKTsKKyAgICBhdXRvIHJlc291cmNlUmVzcG9uc2UgPSBidWlsZE9iamVjdEZv
clJlc291cmNlUmVzcG9uc2UocmVzcG9uc2UsIG51bGxwdHIpOworICAgIGlmICghcmVzb3VyY2VS
ZXNwb25zZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPnJl
c3BvbnNlSW50ZXJjZXB0ZWQocmVxdWVzdElkLCByZXNvdXJjZVJlc3BvbnNlLnJlbGVhc2VOb25O
dWxsKCkpOwogfQogCi12b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6aW50ZXJjZXB0Q29udGlu
dWUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgY29u
c3QgU3RyaW5nJiBuZXR3b3JrU3RhZ2VTdHJpbmcpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2
b2lkPiBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmludGVyY2VwdENvbnRpbnVlKGNvbnN0IFByb3Rv
Y29sOjpOZXR3b3JrOjpSZXF1ZXN0SWQmIHJlcXVlc3RJZCwgUHJvdG9jb2w6Ok5ldHdvcms6Ok5l
dHdvcmtTdGFnZSBuZXR3b3JrU3RhZ2UpCiB7Ci0gICAgYXV0byBuZXR3b3JrU3RhZ2UgPSBJbnNw
ZWN0b3I6OlByb3RvY29sOjpJbnNwZWN0b3JIZWxwZXJzOjpwYXJzZUVudW1WYWx1ZUZyb21TdHJp
bmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6TmV0d29ya1N0YWdlPihuZXR3b3JrU3Rh
Z2VTdHJpbmcpOwotICAgIGlmICghbmV0d29ya1N0YWdlKSB7Ci0gICAgICAgIGVycm9yU3RyaW5n
ID0gbWFrZVN0cmluZygiVW5rbm93biBuZXR3b3JrU3RhZ2U6ICJfcywgbmV0d29ya1N0YWdlU3Ry
aW5nKTsKLSAgICAgICAgcmV0dXJuOworICAgIHN3aXRjaCAobmV0d29ya1N0YWdlKSB7CisgICAg
Y2FzZSBQcm90b2NvbDo6TmV0d29yazo6TmV0d29ya1N0YWdlOjpSZXF1ZXN0OgorICAgICAgICBp
ZiAoYXV0byBwZW5kaW5nSW50ZXJjZXB0UmVxdWVzdCA9IG1fcGVuZGluZ0ludGVyY2VwdFJlcXVl
c3RzLnRha2UocmVxdWVzdElkKSkgeworICAgICAgICAgICAgcGVuZGluZ0ludGVyY2VwdFJlcXVl
c3QtPmNvbnRpbnVlV2l0aE9yaWdpbmFsUmVxdWVzdCgpOworICAgICAgICAgICAgcmV0dXJuIHsg
fTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk1pc3NpbmcgcGVu
ZGluZyBpbnRlcmNlcHQgcmVxdWVzdCBmb3IgZ2l2ZW4gcmVxdWVzdElkIl9zKTsKKworICAgIGNh
c2UgUHJvdG9jb2w6Ok5ldHdvcms6Ok5ldHdvcmtTdGFnZTo6UmVzcG9uc2U6CisgICAgICAgIGlm
IChhdXRvIHBlbmRpbmdJbnRlcmNlcHRSZXNwb25zZSA9IG1fcGVuZGluZ0ludGVyY2VwdFJlc3Bv
bnNlcy50YWtlKHJlcXVlc3RJZCkpIHsKKyAgICAgICAgICAgIHBlbmRpbmdJbnRlcmNlcHRSZXNw
b25zZS0+cmVzcG9uZFdpdGhPcmlnaW5hbFJlc3BvbnNlKCk7CisgICAgICAgICAgICByZXR1cm4g
eyB9OworICAgICAgICB9CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTWlzc2luZyBw
ZW5kaW5nIGludGVyY2VwdCByZXNwb25zZSBmb3IgZ2l2ZW4gcmVxdWVzdElkIl9zKTsKICAgICB9
CiAKLSAgICBzd2l0Y2ggKG5ldHdvcmtTdGFnZS52YWx1ZSgpKSB7Ci0gICAgY2FzZSBOZXR3b3Jr
U3RhZ2U6OlJlcXVlc3Q6Ci0gICAgICAgIGlmIChhdXRvIHBlbmRpbmdJbnRlcmNlcHRSZXF1ZXN0
ID0gbV9wZW5kaW5nSW50ZXJjZXB0UmVxdWVzdHMudGFrZShyZXF1ZXN0SWQpKQotICAgICAgICAg
ICAgcGVuZGluZ0ludGVyY2VwdFJlcXVlc3QtPmNvbnRpbnVlV2l0aE9yaWdpbmFsUmVxdWVzdCgp
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIHBlbmRp
bmcgaW50ZXJjZXB0IHJlcXVlc3QgZm9yIGdpdmVuIHJlcXVlc3RJZCJfczsKLSAgICAgICAgcmV0
dXJuOwotICAgIGNhc2UgTmV0d29ya1N0YWdlOjpSZXNwb25zZToKLSAgICAgICAgaWYgKGF1dG8g
cGVuZGluZ0ludGVyY2VwdFJlc3BvbnNlID0gbV9wZW5kaW5nSW50ZXJjZXB0UmVzcG9uc2VzLnRh
a2UocmVxdWVzdElkKSkKLSAgICAgICAgICAgIHBlbmRpbmdJbnRlcmNlcHRSZXNwb25zZS0+cmVz
cG9uZFdpdGhPcmlnaW5hbFJlc3BvbnNlKCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGVy
cm9yU3RyaW5nID0gIk1pc3NpbmcgcGVuZGluZyBpbnRlcmNlcHQgcmVzcG9uc2UgZm9yIGdpdmVu
IHJlcXVlc3RJZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2Vu
dDo6aW50ZXJjZXB0V2l0aFJlcXVlc3QoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBT
dHJpbmcmIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nKiB1cmwsIGNvbnN0IFN0cmluZyogbWV0aG9k
LCBjb25zdCBKU09OOjpPYmplY3QqIGhlYWRlcnMsIGNvbnN0IFN0cmluZyogcG9zdERhdGEpCitQ
cm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmludGVy
Y2VwdFdpdGhSZXF1ZXN0KGNvbnN0IFByb3RvY29sOjpOZXR3b3JrOjpSZXF1ZXN0SWQmIHJlcXVl
c3RJZCwgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWZQdHI8SlNP
Tjo6T2JqZWN0PiYmIGhlYWRlcnMsIGNvbnN0IFN0cmluZyYgcG9zdERhdGEpCiB7CiAgICAgYXV0
byBwZW5kaW5nUmVxdWVzdCA9IG1fcGVuZGluZ0ludGVyY2VwdFJlcXVlc3RzLnRha2UocmVxdWVz
dElkKTsKLSAgICBpZiAoIXBlbmRpbmdSZXF1ZXN0KSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0g
Ik1pc3NpbmcgcGVuZGluZyBpbnRlcmNlcHQgcmVxdWVzdCBmb3IgZ2l2ZW4gcmVxdWVzdElkIl9z
OwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghcGVuZGluZ1JlcXVlc3QpCisgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTWlzc2luZyBwZW5kaW5nIGludGVyY2VwdCByZXF1
ZXN0IGZvciBnaXZlbiByZXF1ZXN0SWQiX3MpOwogCiAgICAgYXV0byYgbG9hZGVyID0gKnBlbmRp
bmdSZXF1ZXN0LT5tX2xvYWRlcjsKICAgICBSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdCA9IGxvYWRl
ci5yZXF1ZXN0KCk7Ci0gICAgaWYgKHVybCkKLSAgICAgICAgcmVxdWVzdC5zZXRVUkwoVVJMKHsg
fSwgKnVybCkpOwotICAgIGlmIChtZXRob2QpCi0gICAgICAgIHJlcXVlc3Quc2V0SFRUUE1ldGhv
ZCgqbWV0aG9kKTsKKyAgICBpZiAoISF1cmwpCisgICAgICAgIHJlcXVlc3Quc2V0VVJMKFVSTCh7
IH0sIHVybCkpOworICAgIGlmICghIW1ldGhvZCkKKyAgICAgICAgcmVxdWVzdC5zZXRIVFRQTWV0
aG9kKG1ldGhvZCk7CiAgICAgaWYgKGhlYWRlcnMpIHsKICAgICAgICAgSFRUUEhlYWRlck1hcCBl
eHBsaWNpdEhlYWRlcnM7CiAgICAgICAgIGZvciAoYXV0byYgaGVhZGVyIDogKmhlYWRlcnMpIHsK
LSAgICAgICAgICAgIFN0cmluZyBoZWFkZXJWYWx1ZTsKLSAgICAgICAgICAgIGlmIChoZWFkZXIu
dmFsdWUtPmFzU3RyaW5nKGhlYWRlclZhbHVlKSkKKyAgICAgICAgICAgIGF1dG8gaGVhZGVyVmFs
dWUgPSBoZWFkZXIudmFsdWUtPmFzU3RyaW5nKCk7CisgICAgICAgICAgICBpZiAoISFoZWFkZXJW
YWx1ZSkKICAgICAgICAgICAgICAgICBleHBsaWNpdEhlYWRlcnMuYWRkKGhlYWRlci5rZXksIGhl
YWRlclZhbHVlKTsKICAgICAgICAgfQogICAgICAgICByZXF1ZXN0LnNldEhUVFBIZWFkZXJGaWVs
ZHMoV1RGTW92ZShleHBsaWNpdEhlYWRlcnMpKTsKICAgICB9Ci0gICAgaWYgKHBvc3REYXRhKSB7
CisgICAgaWYgKCEhcG9zdERhdGEpIHsKICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGJ1ZmZlcjsK
LSAgICAgICAgaWYgKCFiYXNlNjREZWNvZGUoKnBvc3REYXRhLCBidWZmZXIpKSB7Ci0gICAgICAg
ICAgICBlcnJvclN0cmluZyA9ICJVbmFibGUgdG8gZGVjb2RlIGdpdmVuIHBvc3REYXRhIl9zOwot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9CisgICAgICAgIGlmICghYmFzZTY0RGVjb2Rl
KHBvc3REYXRhLCBidWZmZXIpKQorICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJV
bmFibGUgdG8gZGVjb2RlIGdpdmVuIHBvc3REYXRhIl9zKTsKIAogICAgICAgICByZXF1ZXN0LnNl
dEhUVFBCb2R5KEZvcm1EYXRhOjpjcmVhdGUoYnVmZmVyKSk7CiAgICAgfQogICAgIC8vIEZJWE1F
OiBmaWd1cmUgb3V0IGhvdyB0byBpZGVudGlmeSB3aGVuIGEgcmVxdWVzdCBoYXMgYmVlbiBvdmVy
cmlkZGVuIHdoZW4gd2UgYWRkIHRoaXMgdG8gdGhlIGZyb250ZW5kLgogICAgIHBlbmRpbmdSZXF1
ZXN0LT5jb250aW51ZVdpdGhSZXF1ZXN0KHJlcXVlc3QpOworCisgICAgcmV0dXJuIHsgfTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmludGVyY2VwdFdpdGhSZXNwb25zZShFcnJv
clN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBjb25zdCBTdHJp
bmcmIGNvbnRlbnQsIGJvb2wgYmFzZTY0RW5jb2RlZCwgY29uc3QgU3RyaW5nKiBtaW1lVHlwZSwg
Y29uc3QgaW50KiBzdGF0dXMsIGNvbnN0IFN0cmluZyogc3RhdHVzVGV4dCwgY29uc3QgSlNPTjo6
T2JqZWN0KiBoZWFkZXJzKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9y
TmV0d29ya0FnZW50OjppbnRlcmNlcHRXaXRoUmVzcG9uc2UoY29uc3QgUHJvdG9jb2w6Ok5ldHdv
cms6OlJlcXVlc3RJZCYgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQsIGJvb2wgYmFz
ZTY0RW5jb2RlZCwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8aW50PiYmIHN0YXR1
cywgY29uc3QgU3RyaW5nJiBzdGF0dXNUZXh0LCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIGhlYWRl
cnMpCiB7CiAgICAgYXV0byBwZW5kaW5nSW50ZXJjZXB0UmVzcG9uc2UgPSBtX3BlbmRpbmdJbnRl
cmNlcHRSZXNwb25zZXMudGFrZShyZXF1ZXN0SWQpOwotICAgIGlmICghcGVuZGluZ0ludGVyY2Vw
dFJlc3BvbnNlKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIk1pc3NpbmcgcGVuZGluZyBpbnRl
cmNlcHQgcmVzcG9uc2UgZm9yIGdpdmVuIHJlcXVlc3RJZCJfczsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KKyAgICBpZiAoIXBlbmRpbmdJbnRlcmNlcHRSZXNwb25zZSkKKyAgICAgICAgcmV0dXJu
IG1ha2VVbmV4cGVjdGVkKCJNaXNzaW5nIHBlbmRpbmcgaW50ZXJjZXB0IHJlc3BvbnNlIGZvciBn
aXZlbiByZXF1ZXN0SWQiX3MpOwogCiAgICAgUmVzb3VyY2VSZXNwb25zZSBvdmVycmlkZVJlc3Bv
bnNlKHBlbmRpbmdJbnRlcmNlcHRSZXNwb25zZS0+b3JpZ2luYWxSZXNwb25zZSgpKTsKICAgICBv
dmVycmlkZVJlc3BvbnNlLnNldFNvdXJjZShSZXNvdXJjZVJlc3BvbnNlOjpTb3VyY2U6Okluc3Bl
Y3Rvck92ZXJyaWRlKTsKIAogICAgIGlmIChzdGF0dXMpCiAgICAgICAgIG92ZXJyaWRlUmVzcG9u
c2Uuc2V0SFRUUFN0YXR1c0NvZGUoKnN0YXR1cyk7Ci0gICAgaWYgKHN0YXR1c1RleHQpCi0gICAg
ICAgIG92ZXJyaWRlUmVzcG9uc2Uuc2V0SFRUUFN0YXR1c1RleHQoKnN0YXR1c1RleHQpOwotICAg
IGlmIChtaW1lVHlwZSkKLSAgICAgICAgb3ZlcnJpZGVSZXNwb25zZS5zZXRNaW1lVHlwZSgqbWlt
ZVR5cGUpOworICAgIGlmICghIXN0YXR1c1RleHQpCisgICAgICAgIG92ZXJyaWRlUmVzcG9uc2Uu
c2V0SFRUUFN0YXR1c1RleHQoc3RhdHVzVGV4dCk7CisgICAgaWYgKCEhbWltZVR5cGUpCisgICAg
ICAgIG92ZXJyaWRlUmVzcG9uc2Uuc2V0TWltZVR5cGUobWltZVR5cGUpOwogICAgIGlmIChoZWFk
ZXJzKSB7CiAgICAgICAgIEhUVFBIZWFkZXJNYXAgZXhwbGljaXRIZWFkZXJzOwogICAgICAgICBm
b3IgKGF1dG8mIGhlYWRlciA6ICpoZWFkZXJzKSB7Ci0gICAgICAgICAgICBTdHJpbmcgaGVhZGVy
VmFsdWU7Ci0gICAgICAgICAgICBpZiAoaGVhZGVyLnZhbHVlLT5hc1N0cmluZyhoZWFkZXJWYWx1
ZSkpCisgICAgICAgICAgICBhdXRvIGhlYWRlclZhbHVlID0gaGVhZGVyLnZhbHVlLT5hc1N0cmlu
ZygpOworICAgICAgICAgICAgaWYgKCEhaGVhZGVyVmFsdWUpCiAgICAgICAgICAgICAgICAgZXhw
bGljaXRIZWFkZXJzLmFkZChoZWFkZXIua2V5LCBoZWFkZXJWYWx1ZSk7CiAgICAgICAgIH0KICAg
ICAgICAgb3ZlcnJpZGVSZXNwb25zZS5zZXRIVFRQSGVhZGVyRmllbGRzKFdURk1vdmUoZXhwbGlj
aXRIZWFkZXJzKSk7CkBAIC0xMjYxLDQxICsxMjQ1LDM0IEBAIHZvaWQgSW5zcGVjdG9yTmV0d29y
a0FnZW50OjppbnRlcmNlcHRXaXRoUmVzcG9uc2UoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBj
b25zCiAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gb3ZlcnJpZGVEYXRhOwogICAgIGlmIChiYXNl
NjRFbmNvZGVkKSB7CiAgICAgICAgIFZlY3Rvcjx1aW50OF90PiBidWZmZXI7Ci0gICAgICAgIGlm
ICghYmFzZTY0RGVjb2RlKGNvbnRlbnQsIGJ1ZmZlcikpIHsKLSAgICAgICAgICAgIGVycm9yU3Ry
aW5nID0gIlVuYWJsZSB0byBkZWNvZGUgZ2l2ZW4gY29udGVudCJfczsKLSAgICAgICAgICAgIHBl
bmRpbmdJbnRlcmNlcHRSZXNwb25zZS0+cmVzcG9uZFdpdGhPcmlnaW5hbFJlc3BvbnNlKCk7Ci0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKCFiYXNlNjREZWNvZGUo
Y29udGVudCwgYnVmZmVyKSkKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiVW5h
YmxlIHRvIGRlY29kZSBnaXZlbiBjb250ZW50Il9zKTsKIAogICAgICAgICBvdmVycmlkZURhdGEg
PSBTaGFyZWRCdWZmZXI6OmNyZWF0ZShXVEZNb3ZlKGJ1ZmZlcikpOwogICAgIH0gZWxzZQogICAg
ICAgICBvdmVycmlkZURhdGEgPSBTaGFyZWRCdWZmZXI6OmNyZWF0ZShjb250ZW50LnV0ZjgoKS5k
YXRhKCksIGNvbnRlbnQudXRmOCgpLmxlbmd0aCgpKTsKIAogICAgIHBlbmRpbmdJbnRlcmNlcHRS
ZXNwb25zZS0+cmVzcG9uZChvdmVycmlkZVJlc3BvbnNlLCBvdmVycmlkZURhdGEpOworCisgICAg
cmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmludGVyY2VwdFJl
cXVlc3RXaXRoUmVzcG9uc2UoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcm
IHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBjb250ZW50LCBib29sIGJhc2U2NEVuY29kZWQsIGNv
bnN0IFN0cmluZyYgbWltZVR5cGUsIGludCBzdGF0dXMsIGNvbnN0IFN0cmluZyYgc3RhdHVzVGV4
dCwgY29uc3QgSlNPTjo6T2JqZWN0JiBoZWFkZXJzKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8
dm9pZD4gSW5zcGVjdG9yTmV0d29ya0FnZW50OjppbnRlcmNlcHRSZXF1ZXN0V2l0aFJlc3BvbnNl
KGNvbnN0IFByb3RvY29sOjpOZXR3b3JrOjpSZXF1ZXN0SWQmIHJlcXVlc3RJZCwgY29uc3QgU3Ry
aW5nJiBjb250ZW50LCBib29sIGJhc2U2NEVuY29kZWQsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUs
IGludCBzdGF0dXMsIGNvbnN0IFN0cmluZyYgc3RhdHVzVGV4dCwgUmVmPEpTT046Ok9iamVjdD4m
JiBoZWFkZXJzKQogewogICAgIGF1dG8gcGVuZGluZ1JlcXVlc3QgPSBtX3BlbmRpbmdJbnRlcmNl
cHRSZXF1ZXN0cy50YWtlKHJlcXVlc3RJZCk7Ci0gICAgaWYgKCFwZW5kaW5nUmVxdWVzdCkgewot
ICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIHBlbmRpbmcgaW50ZXJjZXB0IHJlcXVlc3Qg
Zm9yIGdpdmVuIHJlcXVlc3RJZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAo
IXBlbmRpbmdSZXF1ZXN0KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk1pc3Npbmcg
cGVuZGluZyBpbnRlcmNlcHQgcmVxdWVzdCBmb3IgZ2l2ZW4gcmVxdWVzdElkIl9zKTsKIAogICAg
IC8vIExvYWRlciB3aWxsIGJlIHJldGFpbmVkIGluIHRoZSBkaWRSZWNlaXZlUmVzcG9uc2UgbGFt
YmRhIGJlbG93LgogICAgIFJlZlB0cjxSZXNvdXJjZUxvYWRlcj4gbG9hZGVyID0gcGVuZGluZ1Jl
cXVlc3QtPm1fbG9hZGVyLmdldCgpOwotICAgIGlmIChsb2FkZXItPnJlYWNoZWRUZXJtaW5hbFN0
YXRlKCkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiVW5hYmxlIHRvIGZ1bGZpbGwgcmVxdWVz
dCwgaXQgaGFzIGFscmVhZHkgYmVlbiBwcm9jZXNzZWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9CisgICAgaWYgKGxvYWRlci0+cmVhY2hlZFRlcm1pbmFsU3RhdGUoKSkKKyAgICAgICAgcmV0
dXJuIG1ha2VVbmV4cGVjdGVkKCJVbmFibGUgdG8gZnVsZmlsbCByZXF1ZXN0LCBpdCBoYXMgYWxy
ZWFkeSBiZWVuIHByb2Nlc3NlZCJfcyk7CiAKICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBkYXRh
OwogICAgIGlmIChiYXNlNjRFbmNvZGVkKSB7CiAgICAgICAgIFZlY3Rvcjx1aW50OF90PiBidWZm
ZXI7Ci0gICAgICAgIGlmICghYmFzZTY0RGVjb2RlKGNvbnRlbnQsIGJ1ZmZlcikpIHsKLSAgICAg
ICAgICAgIGVycm9yU3RyaW5nID0gIlVuYWJsZSB0byBkZWNvZGUgZ2l2ZW4gY29udGVudCJfczsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQorICAgICAgICBpZiAoIWJhc2U2NERlY29k
ZShjb250ZW50LCBidWZmZXIpKQorICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJV
bmFibGUgdG8gZGVjb2RlIGdpdmVuIGNvbnRlbnQiX3MpOwogCiAgICAgICAgIGRhdGEgPSBTaGFy
ZWRCdWZmZXI6OmNyZWF0ZShXVEZNb3ZlKGJ1ZmZlcikpOwogICAgIH0gZWxzZQpAQCAtMTMwNyw5
ICsxMjg0LDkgQEAgdm9pZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmludGVyY2VwdFJlcXVlc3RX
aXRoUmVzcG9uc2UoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW4KICAgICByZXNwb25zZS5zZXRIVFRQ
U3RhdHVzQ29kZShzdGF0dXMpOwogICAgIHJlc3BvbnNlLnNldEhUVFBTdGF0dXNUZXh0KHN0YXR1
c1RleHQpOwogICAgIEhUVFBIZWFkZXJNYXAgZXhwbGljaXRIZWFkZXJzOwotICAgIGZvciAoYXV0
byYgaGVhZGVyIDogaGVhZGVycykgewotICAgICAgICBTdHJpbmcgaGVhZGVyVmFsdWU7Ci0gICAg
ICAgIGlmIChoZWFkZXIudmFsdWUtPmFzU3RyaW5nKGhlYWRlclZhbHVlKSkKKyAgICBmb3IgKGF1
dG8mIGhlYWRlciA6IGhlYWRlcnMuZ2V0KCkpIHsKKyAgICAgICAgYXV0byBoZWFkZXJWYWx1ZSA9
IGhlYWRlci52YWx1ZS0+YXNTdHJpbmcoKTsKKyAgICAgICAgaWYgKCEhaGVhZGVyVmFsdWUpCiAg
ICAgICAgICAgICBleHBsaWNpdEhlYWRlcnMuYWRkKGhlYWRlci5rZXksIGhlYWRlclZhbHVlKTsK
ICAgICB9CiAgICAgcmVzcG9uc2Uuc2V0SFRUUEhlYWRlckZpZWxkcyhXVEZNb3ZlKGV4cGxpY2l0
SGVhZGVycykpOwpAQCAtMTMxOSw0NCArMTI5Niw0MCBAQCB2b2lkIEluc3BlY3Rvck5ldHdvcmtB
Z2VudDo6aW50ZXJjZXB0UmVxdWVzdFdpdGhSZXNwb25zZShFcnJvclN0cmluZyYgZXJyb3JTdHJp
bgogICAgICAgICAgICAgbG9hZGVyLT5kaWRSZWNlaXZlQnVmZmVyKFdURk1vdmUoYnVmZmVyKSwg
YnVmZmVyLT5zaXplKCksIERhdGFQYXlsb2FkV2hvbGVSZXNvdXJjZSk7CiAgICAgICAgIGxvYWRl
ci0+ZGlkRmluaXNoTG9hZGluZyhOZXR3b3JrTG9hZE1ldHJpY3MoKSk7CiAgICAgfSk7CisKKyAg
ICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6aW50ZXJjZXB0
UmVxdWVzdFdpdGhFcnJvcihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYg
cmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIGVycm9yVHlwZVN0cmluZykKK1Byb3RvY29sOjpFcnJv
clN0cmluZ09yPHZvaWQ+IEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6aW50ZXJjZXB0UmVxdWVzdFdp
dGhFcnJvcihjb25zdCBQcm90b2NvbDo6TmV0d29yazo6UmVxdWVzdElkJiByZXF1ZXN0SWQsIFBy
b3RvY29sOjpOZXR3b3JrOjpSZXNvdXJjZUVycm9yVHlwZSBlcnJvclR5cGUpCiB7CiAgICAgYXV0
byBwZW5kaW5nUmVxdWVzdCA9IG1fcGVuZGluZ0ludGVyY2VwdFJlcXVlc3RzLnRha2UocmVxdWVz
dElkKTsKLSAgICBpZiAoIXBlbmRpbmdSZXF1ZXN0KSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0g
Ik1pc3NpbmcgcGVuZGluZyBpbnRlcmNlcHQgcmVxdWVzdCBmb3IgZ2l2ZW4gcmVxdWVzdElkIl9z
OwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghcGVuZGluZ1JlcXVlc3QpCisgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTWlzc2luZyBwZW5kaW5nIGludGVyY2VwdCByZXF1
ZXN0IGZvciBnaXZlbiByZXF1ZXN0SWQiX3MpOwogCiAgICAgYXV0byYgbG9hZGVyID0gKnBlbmRp
bmdSZXF1ZXN0LT5tX2xvYWRlcjsKLSAgICBpZiAobG9hZGVyLnJlYWNoZWRUZXJtaW5hbFN0YXRl
KCkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiVW5hYmxlIHRvIGFib3J0IHJlcXVlc3QsIGl0
IGhhcyBhbHJlYWR5IGJlZW4gcHJvY2Vzc2VkIl9zOwotICAgICAgICByZXR1cm47CisgICAgaWYg
KGxvYWRlci5yZWFjaGVkVGVybWluYWxTdGF0ZSgpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoIlVuYWJsZSB0byBhYm9ydCByZXF1ZXN0LCBpdCBoYXMgYWxyZWFkeSBiZWVuIHByb2Nl
c3NlZCJfcyk7CisKKyAgICBzd2l0Y2ggKGVycm9yVHlwZSkgeworICAgIGNhc2UgUHJvdG9jb2w6
Ok5ldHdvcms6OlJlc291cmNlRXJyb3JUeXBlOjpHZW5lcmFsOgorICAgICAgICBsb2FkZXIuZGlk
RmFpbChSZXNvdXJjZUVycm9yKGVycm9yRG9tYWluV2ViS2l0SW50ZXJuYWwsIDAsIGxvYWRlci51
cmwoKSwgIlJlcXVlc3QgaW50ZXJjZXB0ZWQiX3MsIFJlc291cmNlRXJyb3I6OlR5cGU6OkdlbmVy
YWwpKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIGNhc2UgUHJvdG9jb2w6Ok5ldHdvcms6
OlJlc291cmNlRXJyb3JUeXBlOjpBY2Nlc3NDb250cm9sOgorICAgICAgICBsb2FkZXIuZGlkRmFp
bChSZXNvdXJjZUVycm9yKGVycm9yRG9tYWluV2ViS2l0SW50ZXJuYWwsIDAsIGxvYWRlci51cmwo
KSwgIkFjY2VzcyBkZW5pZWQiX3MsIFJlc291cmNlRXJyb3I6OlR5cGU6OkFjY2Vzc0NvbnRyb2wp
KTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIGNhc2UgUHJvdG9jb2w6Ok5ldHdvcms6OlJl
c291cmNlRXJyb3JUeXBlOjpDYW5jZWxsYXRpb246CisgICAgICAgIGxvYWRlci5kaWRGYWlsKFJl
c291cmNlRXJyb3IoZXJyb3JEb21haW5XZWJLaXRJbnRlcm5hbCwgMCwgbG9hZGVyLnVybCgpLCAi
UmVxdWVzdCBjYW5jZWxlZCJfcywgUmVzb3VyY2VFcnJvcjo6VHlwZTo6Q2FuY2VsbGF0aW9uKSk7
CisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBjYXNlIFByb3RvY29sOjpOZXR3b3JrOjpSZXNv
dXJjZUVycm9yVHlwZTo6VGltZW91dDoKKyAgICAgICAgbG9hZGVyLmRpZEZhaWwoUmVzb3VyY2VF
cnJvcihlcnJvckRvbWFpbldlYktpdEludGVybmFsLCAwLCBsb2FkZXIudXJsKCksICJSZXF1ZXN0
IHRpbWVkIG91dCJfcywgUmVzb3VyY2VFcnJvcjo6VHlwZTo6VGltZW91dCkpOworICAgICAgICBy
ZXR1cm4geyB9OwogICAgIH0KIAotICAgIGF1dG8gZXJyb3JUeXBlID0gSW5zcGVjdG9yOjpQcm90
b2NvbDo6SW5zcGVjdG9ySGVscGVyczo6cGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rv
cjo6UHJvdG9jb2w6Ok5ldHdvcms6OlJlc291cmNlRXJyb3JUeXBlPihlcnJvclR5cGVTdHJpbmcp
OwotICAgIGlmICghZXJyb3JUeXBlKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gbWFrZVN0cmlu
ZygiVW5rbm93biBlcnJvclR5cGU6ICJfcywgZXJyb3JUeXBlU3RyaW5nKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIFJlc291cmNlRXJyb3IgZXJyb3I7Ci0gICAgc3dpdGNoIChlcnJv
clR5cGUudmFsdWUoKSkgewotICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6
UmVzb3VyY2VFcnJvclR5cGU6OkdlbmVyYWw6Ci0gICAgICAgIGVycm9yID0gUmVzb3VyY2VFcnJv
cihlcnJvckRvbWFpbldlYktpdEludGVybmFsLCAwLCBsb2FkZXIudXJsKCksICJSZXF1ZXN0IGlu
dGVyY2VwdGVkIl9zLCBSZXNvdXJjZUVycm9yOjpUeXBlOjpHZW5lcmFsKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpSZXNvdXJjZUVycm9y
VHlwZTo6QWNjZXNzQ29udHJvbDoKLSAgICAgICAgZXJyb3IgPSBSZXNvdXJjZUVycm9yKGVycm9y
RG9tYWluV2ViS2l0SW50ZXJuYWwsIDAsIGxvYWRlci51cmwoKSwgIkFjY2VzcyBkZW5pZWQiX3Ms
IFJlc291cmNlRXJyb3I6OlR5cGU6OkFjY2Vzc0NvbnRyb2wpOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OlJlc291cmNlRXJyb3JUeXBlOjpD
YW5jZWxsYXRpb246Ci0gICAgICAgIGVycm9yID0gUmVzb3VyY2VFcnJvcihlcnJvckRvbWFpbldl
YktpdEludGVybmFsLCAwLCBsb2FkZXIudXJsKCksICJSZXF1ZXN0IGNhbmNlbGVkIl9zLCBSZXNv
dXJjZUVycm9yOjpUeXBlOjpDYW5jZWxsYXRpb24pOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OlJlc291cmNlRXJyb3JUeXBlOjpUaW1lb3V0
OgotICAgICAgICBlcnJvciA9IFJlc291cmNlRXJyb3IoZXJyb3JEb21haW5XZWJLaXRJbnRlcm5h
bCwgMCwgbG9hZGVyLnVybCgpLCAiUmVxdWVzdCB0aW1lZCBvdXQiX3MsIFJlc291cmNlRXJyb3I6
OlR5cGU6OlRpbWVvdXQpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgbG9hZGVyLmRpZEZh
aWwoZXJyb3IpOworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiB7IH07CiB9
CiAKIGJvb2wgSW5zcGVjdG9yTmV0d29ya0FnZW50OjpzaG91bGRUcmVhdEFzVGV4dChjb25zdCBT
dHJpbmcmIG1pbWVUeXBlKQpAQCAtMTQzOSw5ICsxNDEyLDkgQEAgYm9vbCBJbnNwZWN0b3JOZXR3
b3JrQWdlbnQ6OmNhY2hlZFJlc291cmNlQ29udGVudChDYWNoZWRSZXNvdXJjZSYgcmVzb3VyY2Us
IFN0cmkKICAgICB9CiB9CiAKLXN0YXRpYyBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6
U2VhcmNoUmVzdWx0PiBidWlsZE9iamVjdEZvclNlYXJjaFJlc3VsdChjb25zdCBTdHJpbmcmIHJl
cXVlc3RJZCwgY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBjb25zdCBTdHJpbmcmIHVybCwgaW50IG1h
dGNoZXNDb3VudCkKK3N0YXRpYyBSZWY8UHJvdG9jb2w6OlBhZ2U6OlNlYXJjaFJlc3VsdD4gYnVp
bGRPYmplY3RGb3JTZWFyY2hSZXN1bHQoY29uc3QgUHJvdG9jb2w6Ok5ldHdvcms6OlJlcXVlc3RJ
ZCYgcmVxdWVzdElkLCBjb25zdCBQcm90b2NvbDo6TmV0d29yazo6RnJhbWVJZCYgZnJhbWVJZCwg
Y29uc3QgU3RyaW5nJiB1cmwsIGludCBtYXRjaGVzQ291bnQpCiB7Ci0gICAgYXV0byBzZWFyY2hS
ZXN1bHQgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpTZWFyY2hSZXN1bHQ6OmNyZWF0ZSgp
CisgICAgYXV0byBzZWFyY2hSZXN1bHQgPSBQcm90b2NvbDo6UGFnZTo6U2VhcmNoUmVzdWx0Ojpj
cmVhdGUoKQogICAgICAgICAuc2V0VXJsKHVybCkKICAgICAgICAgLnNldEZyYW1lSWQoZnJhbWVJ
ZCkKICAgICAgICAgLnNldE1hdGNoZXNDb3VudChtYXRjaGVzQ291bnQpCkBAIC0xNDYxLDcgKzE0
MzQsNyBAQCBzdGF0aWMgT3B0aW9uYWw8U3RyaW5nPiB0ZXh0Q29udGVudEZvclJlc291cmNlRGF0
YShjb25zdCBOZXR3b3JrUmVzb3VyY2VzRGF0YTo6UgogICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CiB9CiAKLXZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50OjpzZWFyY2hPdGhlclJlcXVlc3RzKGNv
bnN0IEpTQzo6WWFycjo6UmVndWxhckV4cHJlc3Npb24mIHJlZ2V4LCBSZWZQdHI8SlNPTjo6QXJy
YXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpTZWFyY2hSZXN1bHQ+PiYgcmVzdWx0KQor
dm9pZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OnNlYXJjaE90aGVyUmVxdWVzdHMoY29uc3QgSlND
OjpZYXJyOjpSZWd1bGFyRXhwcmVzc2lvbiYgcmVnZXgsIFJlZjxKU09OOjpBcnJheU9mPFByb3Rv
Y29sOjpQYWdlOjpTZWFyY2hSZXN1bHQ+PiYgcmVzdWx0KQogewogICAgIFZlY3RvcjxOZXR3b3Jr
UmVzb3VyY2VzRGF0YTo6UmVzb3VyY2VEYXRhKj4gcmVzb3VyY2VzID0gbV9yZXNvdXJjZXNEYXRh
LT5yZXNvdXJjZXMoKTsKICAgICBmb3IgKGF1dG8qIHJlc291cmNlRGF0YSA6IHJlc291cmNlcykg
ewpAQCAtMTQ3Myw3ICsxNDQ2LDcgQEAgdm9pZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OnNlYXJj
aE90aGVyUmVxdWVzdHMoY29uc3QgSlNDOjpZYXJyOjpSZWd1bGFyRXhwcmVzc2kKICAgICB9CiB9
CiAKLXZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50OjpzZWFyY2hJblJlcXVlc3QoRXJyb3JTdHJp
bmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBx
dWVyeSwgYm9vbCBjYXNlU2Vuc2l0aXZlLCBib29sIGlzUmVnZXgsIFJlZlB0cjxKU09OOjpBcnJh
eU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkdlbmVyaWNUeXBlczo6U2VhcmNoTWF0Y2g+PiYgcmVz
dWx0cykKK3ZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50OjpzZWFyY2hJblJlcXVlc3QoUHJvdG9j
b2w6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgUHJvdG9jb2w6Ok5ldHdvcms6OlJl
cXVlc3RJZCYgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIHF1ZXJ5LCBib29sIGNhc2VTZW5zaXRp
dmUsIGJvb2wgaXNSZWdleCwgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkdlbmVyaWNU
eXBlczo6U2VhcmNoTWF0Y2g+PiYgcmVzdWx0cykKIHsKICAgICBOZXR3b3JrUmVzb3VyY2VzRGF0
YTo6UmVzb3VyY2VEYXRhIGNvbnN0KiByZXNvdXJjZURhdGEgPSBtX3Jlc291cmNlc0RhdGEtPmRh
dGEocmVxdWVzdElkKTsKICAgICBpZiAoIXJlc291cmNlRGF0YSkgewpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JOZXR3b3JrQWdlbnQuaCBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yTmV0d29ya0FnZW50LmgKaW5k
ZXggMzQ0MGU3MWE1ZWQ1ZWYzODQ2MjBhOWY2MjgwMzc1MWU5ODNkYjViMS4uNDBlMjNjNDNhNzBl
NzliMGMyYzBiMWQ2YTE1M2VkZTM5NTgwMmFhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JOZXR3b3JrQWdlbnQuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rvck5ldHdvcmtBZ2VudC5oCkBAIC02MSw4ICs2
MSw2IEBAIGNsYXNzIFdlYlNvY2tldDsKIAogc3RydWN0IFdlYlNvY2tldEZyYW1lOwogCi10eXBl
ZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQogY2xhc3MgSW5zcGVjdG9yTmV0d29ya0FnZW50IDog
cHVibGljIEluc3BlY3RvckFnZW50QmFzZSwgcHVibGljIEluc3BlY3Rvcjo6TmV0d29ya0JhY2tl
bmREaXNwYXRjaGVySGFuZGxlciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW5zcGVjdG9y
TmV0d29ya0FnZW50KTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKQEAgLTc5LDIyICs3
NywyMiBAQCBwdWJsaWM6CiAgICAgdm9pZCB3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJ
bnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24pIGZpbmFsOwogCiAgICAgLy8gTmV0d29ya0JhY2tl
bmREaXNwYXRjaGVySGFuZGxlcgotICAgIHZvaWQgZW5hYmxlKEVycm9yU3RyaW5nJikgZmluYWw7
Ci0gICAgdm9pZCBkaXNhYmxlKEVycm9yU3RyaW5nJikgZmluYWw7Ci0gICAgdm9pZCBzZXRFeHRy
YUhUVFBIZWFkZXJzKEVycm9yU3RyaW5nJiwgY29uc3QgSlNPTjo6T2JqZWN0JiBoZWFkZXJzKSBm
aW5hbDsKLSAgICB2b2lkIGdldFJlc3BvbnNlQm9keShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmlu
ZyYgcmVxdWVzdElkLCBTdHJpbmcqIGNvbnRlbnQsIGJvb2wqIGJhc2U2NEVuY29kZWQpIGZpbmFs
OwotICAgIHZvaWQgc2V0UmVzb3VyY2VDYWNoaW5nRGlzYWJsZWQoRXJyb3JTdHJpbmcmLCBib29s
IGRpc2FibGVkKSBmaW5hbDsKLSAgICB2b2lkIGxvYWRSZXNvdXJjZShjb25zdCBTdHJpbmcmIGZy
YW1lSWQsIGNvbnN0IFN0cmluZyYgdXJsLCBSZWY8TG9hZFJlc291cmNlQ2FsbGJhY2s+JiYpIGZp
bmFsOwotICAgIHZvaWQgZ2V0U2VyaWFsaXplZENlcnRpZmljYXRlKEVycm9yU3RyaW5nJiwgY29u
c3QgU3RyaW5nJiByZXF1ZXN0SWQsIFN0cmluZyogc2VyaWFsaXplZENlcnRpZmljYXRlKSBmaW5h
bDsKLSAgICB2b2lkIHJlc29sdmVXZWJTb2NrZXQoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcm
IHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nKiBvYmplY3RHcm91cCwgUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mKSBmaW5hbDsKLSAgICB2b2lkIHNldElu
dGVyY2VwdGlvbkVuYWJsZWQoRXJyb3JTdHJpbmcmLCBib29sIGVuYWJsZWQpIGZpbmFsOwotICAg
IHZvaWQgYWRkSW50ZXJjZXB0aW9uKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiB1cmwsIGNv
bnN0IFN0cmluZyYgbmV0d29ya1N0YWdlU3RyaW5nLCBjb25zdCBib29sKiBjYXNlU2Vuc2l0aXZl
LCBjb25zdCBib29sKiBpc1JlZ2V4KSBmaW5hbDsKLSAgICB2b2lkIHJlbW92ZUludGVyY2VwdGlv
bihFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIG5ldHdvcmtT
dGFnZVN0cmluZywgY29uc3QgYm9vbCogY2FzZVNlbnNpdGl2ZSwgY29uc3QgYm9vbCogaXNSZWdl
eCkgZmluYWw7Ci0gICAgdm9pZCBpbnRlcmNlcHRDb250aW51ZShFcnJvclN0cmluZyYsIGNvbnN0
IFN0cmluZyYgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG5ldHdvcmtTdGFnZVN0cmluZykgZmlu
YWw7Ci0gICAgdm9pZCBpbnRlcmNlcHRXaXRoUmVxdWVzdChFcnJvclN0cmluZyYsIGNvbnN0IFN0
cmluZyYgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcqIHVybCwgY29uc3QgU3RyaW5nKiBtZXRob2Qs
IGNvbnN0IEpTT046Ok9iamVjdCogaGVhZGVycywgY29uc3QgU3RyaW5nKiBwb3N0RGF0YSkgZmlu
YWw7Ci0gICAgdm9pZCBpbnRlcmNlcHRXaXRoUmVzcG9uc2UoRXJyb3JTdHJpbmcmLCBjb25zdCBT
dHJpbmcmIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBjb250ZW50LCBib29sIGJhc2U2NEVuY29k
ZWQsIGNvbnN0IFN0cmluZyogbWltZVR5cGUsIGNvbnN0IGludCogc3RhdHVzLCBjb25zdCBTdHJp
bmcqIHN0YXR1c1RleHQsIGNvbnN0IEpTT046Ok9iamVjdCogaGVhZGVycykgZmluYWw7Ci0gICAg
dm9pZCBpbnRlcmNlcHRSZXF1ZXN0V2l0aFJlc3BvbnNlKEVycm9yU3RyaW5nJiwgY29uc3QgU3Ry
aW5nJiByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgY29udGVudCwgYm9vbCBiYXNlNjRFbmNvZGVk
LCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBpbnQgc3RhdHVzLCBjb25zdCBTdHJpbmcmIHN0YXR1
c1RleHQsIGNvbnN0IEpTT046Ok9iamVjdCYgaGVhZGVycykgZmluYWw7Ci0gICAgdm9pZCBpbnRl
cmNlcHRSZXF1ZXN0V2l0aEVycm9yKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiByZXF1ZXN0
SWQsIGNvbnN0IFN0cmluZyYgZXJyb3JUeXBlKSBmaW5hbDsKKyAgICBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGVuYWJsZSgpIGZpbmFsOworICAgIEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZGlzYWJsZSgpIGZpbmFsOworICAgIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc2V0RXh0cmFIVFRQSGVhZGVycyhS
ZWY8SlNPTjo6T2JqZWN0PiYmKSBmaW5hbDsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJv
clN0cmluZ09yPHN0ZDo6dHVwbGU8U3RyaW5nLCBib29sIC8qIGJhc2U2NEVuY29kZWQgKi8+PiBn
ZXRSZXNwb25zZUJvZHkoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6UmVxdWVz
dElkJikgZmluYWw7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lk
PiBzZXRSZXNvdXJjZUNhY2hpbmdEaXNhYmxlZChib29sKSBmaW5hbDsKKyAgICB2b2lkIGxvYWRS
ZXNvdXJjZShjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpGcmFtZUlkJiwgY29u
c3QgU3RyaW5nJiB1cmwsIFJlZjxMb2FkUmVzb3VyY2VDYWxsYmFjaz4mJikgZmluYWw7CisgICAg
SW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxTdHJpbmc+IGdldFNlcmlhbGl6ZWRD
ZXJ0aWZpY2F0ZShjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpSZXF1ZXN0SWQm
KSBmaW5hbDsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+PiByZXNvbHZlV2ViU29ja2V0
KGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OlJlcXVlc3RJZCYsIGNvbnN0IFN0
cmluZyYgb2JqZWN0R3JvdXApIGZpbmFsOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8dm9pZD4gc2V0SW50ZXJjZXB0aW9uRW5hYmxlZChib29sKSBmaW5hbDsKKyAgICBJ
bnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGFkZEludGVyY2VwdGlvbihj
b25zdCBTdHJpbmcmIHVybCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6TmV0d29ya1N0
YWdlLCBPcHRpb25hbDxib29sPiYmIGNhc2VTZW5zaXRpdmUsIE9wdGlvbmFsPGJvb2w+JiYgaXNS
ZWdleCkgZmluYWw7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lk
PiByZW1vdmVJbnRlcmNlcHRpb24oY29uc3QgU3RyaW5nJiB1cmwsIEluc3BlY3Rvcjo6UHJvdG9j
b2w6Ok5ldHdvcms6Ok5ldHdvcmtTdGFnZSwgT3B0aW9uYWw8Ym9vbD4mJiBjYXNlU2Vuc2l0aXZl
LCBPcHRpb25hbDxib29sPiYmIGlzUmVnZXgpIGZpbmFsOworICAgIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gaW50ZXJjZXB0Q29udGludWUoY29uc3QgSW5zcGVjdG9y
OjpQcm90b2NvbDo6TmV0d29yazo6UmVxdWVzdElkJiwgSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0
d29yazo6TmV0d29ya1N0YWdlKSBmaW5hbDsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJv
clN0cmluZ09yPHZvaWQ+IGludGVyY2VwdFdpdGhSZXF1ZXN0KGNvbnN0IEluc3BlY3Rvcjo6UHJv
dG9jb2w6Ok5ldHdvcms6OlJlcXVlc3RJZCYsIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJp
bmcmIG1ldGhvZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBoZWFkZXJzLCBjb25zdCBTdHJpbmcm
IHBvc3REYXRhKSBmaW5hbDsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09y
PHZvaWQ+IGludGVyY2VwdFdpdGhSZXNwb25zZShjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpO
ZXR3b3JrOjpSZXF1ZXN0SWQmLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQsIGJvb2wgYmFzZTY0RW5j
b2RlZCwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8aW50PiYmIHN0YXR1cywgY29u
c3QgU3RyaW5nJiBzdGF0dXNUZXh0LCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIGhlYWRlcnMpIGZp
bmFsOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gaW50ZXJj
ZXB0UmVxdWVzdFdpdGhSZXNwb25zZShjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3Jr
OjpSZXF1ZXN0SWQmLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQsIGJvb2wgYmFzZTY0RW5jb2RlZCwg
Y29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgaW50IHN0YXR1cywgY29uc3QgU3RyaW5nJiBzdGF0dXNU
ZXh0LCBSZWY8SlNPTjo6T2JqZWN0PiYmIGhlYWRlcnMpIGZpbmFsOworICAgIEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gaW50ZXJjZXB0UmVxdWVzdFdpdGhFcnJvcihj
b25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpSZXF1ZXN0SWQmLCBJbnNwZWN0b3I6
OlByb3RvY29sOjpOZXR3b3JrOjpSZXNvdXJjZUVycm9yVHlwZSkgZmluYWw7CiAKICAgICAvLyBJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb24KICAgICB2b2lkIHdpbGxSZWNhbGN1bGF0ZVN0eWxlKCk7
CkBAIC0xMjcsMzIgKzEyNSwyOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBpbnRlcmNlcHRSZXNwb25z
ZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmLCBSZWZQdHI8U2hhcmVk
QnVmZmVyPik+JiYpOwogICAgIHZvaWQgaW50ZXJjZXB0UmVxdWVzdChSZXNvdXJjZUxvYWRlciYs
IEZ1bmN0aW9uPHZvaWQoY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jik+JiYpOwogCi0gICAgdm9pZCBz
ZWFyY2hPdGhlclJlcXVlc3RzKGNvbnN0IEpTQzo6WWFycjo6UmVndWxhckV4cHJlc3Npb24mLCBS
ZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpTZWFyY2hSZXN1
bHQ+PiYpOwotICAgIHZvaWQgc2VhcmNoSW5SZXF1ZXN0KEVycm9yU3RyaW5nJiwgY29uc3QgU3Ry
aW5nJiByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgcXVlcnksIGJvb2wgY2FzZVNlbnNpdGl2ZSwg
Ym9vbCBpc1JlZ2V4LCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpH
ZW5lcmljVHlwZXM6OlNlYXJjaE1hdGNoPj4mKTsKKyAgICB2b2lkIHNlYXJjaE90aGVyUmVxdWVz
dHMoY29uc3QgSlNDOjpZYXJyOjpSZWd1bGFyRXhwcmVzc2lvbiYsIFJlZjxKU09OOjpBcnJheU9m
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OlNlYXJjaFJlc3VsdD4+Jik7CisgICAgdm9pZCBz
ZWFyY2hJblJlcXVlc3QoSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBjb25zdCBJ
bnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpSZXF1ZXN0SWQmLCBjb25zdCBTdHJpbmcmIHF1
ZXJ5LCBib29sIGNhc2VTZW5zaXRpdmUsIGJvb2wgaXNSZWdleCwgUmVmUHRyPEpTT046OkFycmF5
T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6R2VuZXJpY1R5cGVzOjpTZWFyY2hNYXRjaD4+Jik7CiAK
IHByb3RlY3RlZDoKICAgICBJbnNwZWN0b3JOZXR3b3JrQWdlbnQoV2ViQWdlbnRDb250ZXh0Jik7
CiAKLSAgICB2aXJ0dWFsIFN0cmluZyBsb2FkZXJJZGVudGlmaWVyKERvY3VtZW50TG9hZGVyKikg
PSAwOwotICAgIHZpcnR1YWwgU3RyaW5nIGZyYW1lSWRlbnRpZmllcihEb2N1bWVudExvYWRlciop
ID0gMDsKKyAgICB2aXJ0dWFsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OkxvYWRlcklk
IGxvYWRlcklkZW50aWZpZXIoRG9jdW1lbnRMb2FkZXIqKSA9IDA7CisgICAgdmlydHVhbCBJbnNw
ZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpGcmFtZUlkIGZyYW1lSWRlbnRpZmllcihEb2N1bWVu
dExvYWRlciopID0gMDsKICAgICB2aXJ0dWFsIFZlY3RvcjxXZWJTb2NrZXQqPiBhY3RpdmVXZWJT
b2NrZXRzKGNvbnN0IExvY2tIb2xkZXImKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldFJlc291
cmNlQ2FjaGluZ0Rpc2FibGVkKGJvb2wpID0gMDsKLSAgICB2aXJ0dWFsIFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJp
bmcmIGZyYW1lSWQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0UmVzb3VyY2VDYWNoaW5nRGlz
YWJsZWRJbnRlcmFsKGJvb2wpID0gMDsKKyAgICB2aXJ0dWFsIFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJp
bmcmLCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpGcmFtZUlkJikgPSAwOwog
ICAgIHZpcnR1YWwgYm9vbCBzaG91bGRGb3JjZUJ1ZmZlcmluZ05ldHdvcmtSZXNvdXJjZURhdGEo
KSBjb25zdCA9IDA7CiAKIHByaXZhdGU6Ci0gICAgdm9pZCBlbmFibGUoKTsKLQogICAgIHZvaWQg
d2lsbFNlbmRSZXF1ZXN0KHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgRG9jdW1lbnRMb2FkZXIq
LCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZWRpcmVjdFJlc3Bv
bnNlLCBJbnNwZWN0b3JQYWdlQWdlbnQ6OlJlc291cmNlVHlwZSk7CiAKLSAgICB1c2luZyBOZXR3
b3JrU3RhZ2UgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpOZXR3b3JrU3RhZ2U7Ci0g
ICAgYm9vbCBzaG91bGRJbnRlcmNlcHQoVVJMLCBOZXR3b3JrU3RhZ2UpOworICAgIGJvb2wgc2hv
dWxkSW50ZXJjZXB0KFVSTCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6TmV0d29ya1N0
YWdlKTsKICAgICB2b2lkIGNvbnRpbnVlUGVuZGluZ1JlcXVlc3RzKCk7CiAgICAgdm9pZCBjb250
aW51ZVBlbmRpbmdSZXNwb25zZXMoKTsKIAotICAgIFdlYlNvY2tldCogd2ViU29ja2V0Rm9yUmVx
dWVzdElkKGNvbnN0IFN0cmluZyYgcmVxdWVzdElkKTsKKyAgICBXZWJTb2NrZXQqIHdlYlNvY2tl
dEZvclJlcXVlc3RJZChjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpSZXF1ZXN0
SWQmKTsKIAotICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpJbml0aWF0
b3I+IGJ1aWxkSW5pdGlhdG9yT2JqZWN0KERvY3VtZW50KiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0
KiA9IG51bGxwdHIpOworICAgIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpJbml0
aWF0b3I+IGJ1aWxkSW5pdGlhdG9yT2JqZWN0KERvY3VtZW50KiwgY29uc3QgUmVzb3VyY2VSZXF1
ZXN0KiA9IG51bGxwdHIpOwogICAgIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpS
ZXNvdXJjZVRpbWluZz4gYnVpbGRPYmplY3RGb3JUaW1pbmcoY29uc3QgTmV0d29ya0xvYWRNZXRy
aWNzKiwgUmVzb3VyY2VMb2FkZXImKTsKICAgICBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0
d29yazo6TWV0cmljcz4gYnVpbGRPYmplY3RGb3JNZXRyaWNzKGNvbnN0IE5ldHdvcmtMb2FkTWV0
cmljcyYpOwogICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpSZXNwb25z
ZT4gYnVpbGRPYmplY3RGb3JSZXNvdXJjZVJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2Um
LCBSZXNvdXJjZUxvYWRlciopOwpAQCAtMjM2LDcgKzIzMSw3IEBAIHByaXZhdGU6CiAgICAgICAg
IFN0cmluZyB1cmw7CiAgICAgICAgIGJvb2wgY2FzZVNlbnNpdGl2ZSB7IHRydWUgfTsKICAgICAg
ICAgYm9vbCBpc1JlZ2V4IHsgZmFsc2UgfTsKLSAgICAgICAgTmV0d29ya1N0YWdlIG5ldHdvcmtT
dGFnZSB7IE5ldHdvcmtTdGFnZTo6UmVzcG9uc2UgfTsKKyAgICAgICAgSW5zcGVjdG9yOjpQcm90
b2NvbDo6TmV0d29yazo6TmV0d29ya1N0YWdlIG5ldHdvcmtTdGFnZSB7IEluc3BlY3Rvcjo6UHJv
dG9jb2w6Ok5ldHdvcms6Ok5ldHdvcmtTdGFnZTo6UmVzcG9uc2UgfTsKIAogICAgICAgICBpbmxp
bmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEludGVyY2VwdCYgb3RoZXIpIGNvbnN0CiAgICAgICAg
IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9y
UGFnZUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9y
UGFnZUFnZW50LmNwcAppbmRleCA1MzllODEwNWI2NmU3YjJhNmEwNTU3MWExZTFjOGNkNmJkZjI3
YzkwLi44YmY3YWUxZTBkMDVhMjY0OWMxM2FiYjBkMTRkMjA4NDM3NzU4MDk5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JQYWdlQWdlbnQu
Y3BwCkBAIC0xNTEsNyArMTUxLDcgQEAgVmVjdG9yPENhY2hlZFJlc291cmNlKj4gSW5zcGVjdG9y
UGFnZUFnZW50OjpjYWNoZWRSZXNvdXJjZXNGb3JGcmFtZShGcmFtZSogZnJhbWUKICAgICByZXR1
cm4gcmVzdWx0OwogfQogCi12b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6cmVzb3VyY2VDb250ZW50
KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgRnJhbWUqIGZyYW1lLCBjb25zdCBVUkwmIHVybCwg
U3RyaW5nKiByZXN1bHQsIGJvb2wqIGJhc2U2NEVuY29kZWQpCit2b2lkIEluc3BlY3RvclBhZ2VB
Z2VudDo6cmVzb3VyY2VDb250ZW50KFByb3RvY29sOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcs
IEZyYW1lKiBmcmFtZSwgY29uc3QgVVJMJiB1cmwsIFN0cmluZyogcmVzdWx0LCBib29sKiBiYXNl
NjRFbmNvZGVkKQogewogICAgIERvY3VtZW50TG9hZGVyKiBsb2FkZXIgPSBhc3NlcnREb2N1bWVu
dExvYWRlcihlcnJvclN0cmluZywgZnJhbWUpOwogICAgIGlmICghbG9hZGVyKQpAQCAtMjEzLDM3
ICsyMTMsMzcgQEAgQ2FjaGVkUmVzb3VyY2UqIEluc3BlY3RvclBhZ2VBZ2VudDo6Y2FjaGVkUmVz
b3VyY2UoRnJhbWUqIGZyYW1lLCBjb25zdCBVUkwmIHVybCkKICAgICByZXR1cm4gY2FjaGVkUmVz
b3VyY2U7CiB9CiAKLUluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OlJlc291cmNlVHlwZSBJbnNw
ZWN0b3JQYWdlQWdlbnQ6OnJlc291cmNlVHlwZUpTT04oSW5zcGVjdG9yUGFnZUFnZW50OjpSZXNv
dXJjZVR5cGUgcmVzb3VyY2VUeXBlKQorUHJvdG9jb2w6OlBhZ2U6OlJlc291cmNlVHlwZSBJbnNw
ZWN0b3JQYWdlQWdlbnQ6OnJlc291cmNlVHlwZUpTT04oSW5zcGVjdG9yUGFnZUFnZW50OjpSZXNv
dXJjZVR5cGUgcmVzb3VyY2VUeXBlKQogewogICAgIHN3aXRjaCAocmVzb3VyY2VUeXBlKSB7CiAg
ICAgY2FzZSBEb2N1bWVudFJlc291cmNlOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90
b2NvbDo6UGFnZTo6UmVzb3VyY2VUeXBlOjpEb2N1bWVudDsKKyAgICAgICAgcmV0dXJuIFByb3Rv
Y29sOjpQYWdlOjpSZXNvdXJjZVR5cGU6OkRvY3VtZW50OwogICAgIGNhc2UgSW1hZ2VSZXNvdXJj
ZToKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OlJlc291cmNlVHlw
ZTo6SW1hZ2U7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6UGFnZTo6UmVzb3VyY2VUeXBlOjpJ
bWFnZTsKICAgICBjYXNlIEZvbnRSZXNvdXJjZToKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlBhZ2U6OlJlc291cmNlVHlwZTo6Rm9udDsKKyAgICAgICAgcmV0dXJuIFByb3Rv
Y29sOjpQYWdlOjpSZXNvdXJjZVR5cGU6OkZvbnQ7CiAgICAgY2FzZSBTdHlsZVNoZWV0UmVzb3Vy
Y2U6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpSZXNvdXJjZVR5
cGU6OlN0eWxlU2hlZXQ7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6UGFnZTo6UmVzb3VyY2VU
eXBlOjpTdHlsZVNoZWV0OwogICAgIGNhc2UgU2NyaXB0UmVzb3VyY2U6Ci0gICAgICAgIHJldHVy
biBJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpSZXNvdXJjZVR5cGU6OlNjcmlwdDsKKyAgICAg
ICAgcmV0dXJuIFByb3RvY29sOjpQYWdlOjpSZXNvdXJjZVR5cGU6OlNjcmlwdDsKICAgICBjYXNl
IFhIUlJlc291cmNlOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6
UmVzb3VyY2VUeXBlOjpYSFI7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6UGFnZTo6UmVzb3Vy
Y2VUeXBlOjpYSFI7CiAgICAgY2FzZSBGZXRjaFJlc291cmNlOgotICAgICAgICByZXR1cm4gSW5z
cGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6UmVzb3VyY2VUeXBlOjpGZXRjaDsKKyAgICAgICAgcmV0
dXJuIFByb3RvY29sOjpQYWdlOjpSZXNvdXJjZVR5cGU6OkZldGNoOwogICAgIGNhc2UgUGluZ1Jl
c291cmNlOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6UmVzb3Vy
Y2VUeXBlOjpQaW5nOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OlBhZ2U6OlJlc291cmNlVHlw
ZTo6UGluZzsKICAgICBjYXNlIEJlYWNvblJlc291cmNlOgotICAgICAgICByZXR1cm4gSW5zcGVj
dG9yOjpQcm90b2NvbDo6UGFnZTo6UmVzb3VyY2VUeXBlOjpCZWFjb247CisgICAgICAgIHJldHVy
biBQcm90b2NvbDo6UGFnZTo6UmVzb3VyY2VUeXBlOjpCZWFjb247CiAgICAgY2FzZSBXZWJTb2Nr
ZXRSZXNvdXJjZToKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OlJl
c291cmNlVHlwZTo6V2ViU29ja2V0OworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OlBhZ2U6OlJl
c291cmNlVHlwZTo6V2ViU29ja2V0OwogICAgIGNhc2UgT3RoZXJSZXNvdXJjZToKLSAgICAgICAg
cmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OlJlc291cmNlVHlwZTo6T3RoZXI7Cisg
ICAgICAgIHJldHVybiBQcm90b2NvbDo6UGFnZTo6UmVzb3VyY2VUeXBlOjpPdGhlcjsKICNpZiBF
TkFCTEUoQVBQTElDQVRJT05fTUFOSUZFU1QpCiAgICAgY2FzZSBBcHBsaWNhdGlvbk1hbmlmZXN0
UmVzb3VyY2U6CiAgICAgICAgIGJyZWFrOwogI2VuZGlmCiAgICAgfQotICAgIHJldHVybiBJbnNw
ZWN0b3I6OlByb3RvY29sOjpQYWdlOjpSZXNvdXJjZVR5cGU6Ok90aGVyOworICAgIHJldHVybiBQ
cm90b2NvbDo6UGFnZTo6UmVzb3VyY2VUeXBlOjpPdGhlcjsKIH0KIAogSW5zcGVjdG9yUGFnZUFn
ZW50OjpSZXNvdXJjZVR5cGUgSW5zcGVjdG9yUGFnZUFnZW50OjppbnNwZWN0b3JSZXNvdXJjZVR5
cGUoQ2FjaGVkUmVzb3VyY2U6OlR5cGUgdHlwZSkKQEAgLTI5Nyw3ICsyOTcsNyBAQCBJbnNwZWN0
b3JQYWdlQWdlbnQ6OlJlc291cmNlVHlwZSBJbnNwZWN0b3JQYWdlQWdlbnQ6Omluc3BlY3RvclJl
c291cmNlVHlwZShjb25zdAogICAgIHJldHVybiBpbnNwZWN0b3JSZXNvdXJjZVR5cGUoY2FjaGVk
UmVzb3VyY2UudHlwZSgpKTsKIH0KIAotSW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6UmVzb3Vy
Y2VUeXBlIEluc3BlY3RvclBhZ2VBZ2VudDo6Y2FjaGVkUmVzb3VyY2VUeXBlSlNPTihjb25zdCBD
YWNoZWRSZXNvdXJjZSYgY2FjaGVkUmVzb3VyY2UpCitQcm90b2NvbDo6UGFnZTo6UmVzb3VyY2VU
eXBlIEluc3BlY3RvclBhZ2VBZ2VudDo6Y2FjaGVkUmVzb3VyY2VUeXBlSlNPTihjb25zdCBDYWNo
ZWRSZXNvdXJjZSYgY2FjaGVkUmVzb3VyY2UpCiB7CiAgICAgcmV0dXJuIHJlc291cmNlVHlwZUpT
T04oaW5zcGVjdG9yUmVzb3VyY2VUeXBlKGNhY2hlZFJlc291cmNlKSk7CiB9CkBAIC0zMTEsNyAr
MzExLDcgQEAgRnJhbWUqIEluc3BlY3RvclBhZ2VBZ2VudDo6ZmluZEZyYW1lV2l0aFNlY3VyaXR5
T3JpZ2luKFBhZ2UmIHBhZ2UsIGNvbnN0IFN0cmluZyYKICAgICByZXR1cm4gbnVsbHB0cjsKIH0K
IAotRG9jdW1lbnRMb2FkZXIqIEluc3BlY3RvclBhZ2VBZ2VudDo6YXNzZXJ0RG9jdW1lbnRMb2Fk
ZXIoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBGcmFtZSogZnJhbWUpCitEb2N1bWVudExvYWRl
ciogSW5zcGVjdG9yUGFnZUFnZW50Ojphc3NlcnREb2N1bWVudExvYWRlcihQcm90b2NvbDo6RXJy
b3JTdHJpbmcmIGVycm9yU3RyaW5nLCBGcmFtZSogZnJhbWUpCiB7CiAgICAgRnJhbWVMb2FkZXIm
IGZyYW1lTG9hZGVyID0gZnJhbWUtPmxvYWRlcigpOwogICAgIERvY3VtZW50TG9hZGVyKiBkb2N1
bWVudExvYWRlciA9IGZyYW1lTG9hZGVyLmRvY3VtZW50TG9hZGVyKCk7CkBAIC0zMzgsMTYgKzMz
OCwxMyBAQCB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6ZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNr
ZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRSb3V0ZXIqLAogCiB2b2lkIEluc3BlY3RvclBhZ2VBZ2Vu
dDo6d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVh
c29uKQogewotICAgIEVycm9yU3RyaW5nIHVudXNlZDsKLSAgICBkaXNhYmxlKHVudXNlZCk7Cisg
ICAgZGlzYWJsZSgpOwogfQogCi12b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6ZW5hYmxlKEVycm9y
U3RyaW5nJiBlcnJvclN0cmluZykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3Bl
Y3RvclBhZ2VBZ2VudDo6ZW5hYmxlKCkKIHsKLSAgICBpZiAobV9pbnN0cnVtZW50aW5nQWdlbnRz
LmVuYWJsZWRQYWdlQWdlbnQoKSA9PSB0aGlzKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIlBh
Z2UgZG9tYWluIGFscmVhZHkgZW5hYmxlZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAg
ICBpZiAobV9pbnN0cnVtZW50aW5nQWdlbnRzLmVuYWJsZWRQYWdlQWdlbnQoKSA9PSB0aGlzKQor
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIlBhZ2UgZG9tYWluIGFscmVhZHkgZW5hYmxl
ZCJfcyk7CiAKICAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMuc2V0RW5hYmxlZFBhZ2VBZ2VudCh0
aGlzKTsKIApAQCAtMzU4LDIxICszNTUsMjIgQEAgdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmVu
YWJsZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCiAjaWYgRU5BQkxFKERBUktfTU9ERV9DU1Mp
IHx8IEhBVkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCiAgICAgZGVmYXVsdEFwcGVhcmFuY2VEaWRD
aGFuZ2UobV9pbnNwZWN0ZWRQYWdlLmRlZmF1bHRVc2VEYXJrQXBwZWFyYW5jZSgpKTsKICNlbmRp
ZgorCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmRpc2Fi
bGUoRXJyb3JTdHJpbmcmKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9y
UGFnZUFnZW50OjpkaXNhYmxlKCkKIHsKICAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMuc2V0RW5h
YmxlZFBhZ2VBZ2VudChudWxscHRyKTsKIAotICAgIEVycm9yU3RyaW5nIHVudXNlZDsKLSAgICBz
ZXRTaG93UGFpbnRSZWN0cyh1bnVzZWQsIGZhbHNlKTsKKyAgICBzZXRTaG93UGFpbnRSZWN0cyhm
YWxzZSk7CiAjaWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgc2V0U2hvd1J1bGVycyh1bnVz
ZWQsIGZhbHNlKTsKKyAgICBzZXRTaG93UnVsZXJzKGZhbHNlKTsKICNlbmRpZgotICAgIG92ZXJy
aWRlVXNlckFnZW50KHVudXNlZCwgbnVsbHB0cik7Ci0gICAgc2V0RW11bGF0ZWRNZWRpYSh1bnVz
ZWQsIGVtcHR5U3RyaW5nKCkpOworICAgIG92ZXJyaWRlVXNlckFnZW50KG51bGxTdHJpbmcoKSk7
CisgICAgc2V0RW11bGF0ZWRNZWRpYShlbXB0eVN0cmluZygpKTsKICNpZiBFTkFCTEUoREFSS19N
T0RFX0NTUykgfHwgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKLSAgICBzZXRGb3JjZWRBcHBl
YXJhbmNlKHVudXNlZCwgZW1wdHlTdHJpbmcoKSk7CisgICAgc2V0Rm9yY2VkQXBwZWFyYW5jZShX
VEY6Om51bGxvcHQpOwogI2VuZGlmCiAKICAgICBhdXRvJiBpbnNwZWN0ZWRQYWdlU2V0dGluZ3Mg
PSBtX2luc3BlY3RlZFBhZ2Uuc2V0dGluZ3MoKTsKQEAgLTM5MSw2ICszODksOCBAQCB2b2lkIElu
c3BlY3RvclBhZ2VBZ2VudDo6ZGlzYWJsZShFcnJvclN0cmluZyYpCiAgICAgbV9jbGllbnQtPnNl
dERldmVsb3BlclByZWZlcmVuY2VPdmVycmlkZShJbnNwZWN0b3JDbGllbnQ6OkRldmVsb3BlclBy
ZWZlcmVuY2U6OkFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZUVuYWJsZWQsIFdURjo6bnVsbG9w
dCk7CiAgICAgbV9jbGllbnQtPnNldERldmVsb3BlclByZWZlcmVuY2VPdmVycmlkZShJbnNwZWN0
b3JDbGllbnQ6OkRldmVsb3BlclByZWZlcmVuY2U6OklUUERlYnVnTW9kZUVuYWJsZWQsIFdURjo6
bnVsbG9wdCk7CiAgICAgbV9jbGllbnQtPnNldERldmVsb3BlclByZWZlcmVuY2VPdmVycmlkZShJ
bnNwZWN0b3JDbGllbnQ6OkRldmVsb3BlclByZWZlcmVuY2U6Ok1vY2tDYXB0dXJlRGV2aWNlc0Vu
YWJsZWQsIFdURjo6bnVsbG9wdCk7CisKKyAgICByZXR1cm4geyB9OwogfQogCiBkb3VibGUgSW5z
cGVjdG9yUGFnZUFnZW50Ojp0aW1lc3RhbXAoKQpAQCAtMzk4LDIxICszOTgsMTkgQEAgZG91Ymxl
IEluc3BlY3RvclBhZ2VBZ2VudDo6dGltZXN0YW1wKCkKICAgICByZXR1cm4gbV9lbnZpcm9ubWVu
dC5leGVjdXRpb25TdG9wd2F0Y2goKS5lbGFwc2VkVGltZSgpLnNlY29uZHMoKTsKIH0KIAotdm9p
ZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OnJlbG9hZChFcnJvclN0cmluZyYsIGNvbnN0IGJvb2wqIG9w
dGlvbmFsUmVsb2FkRnJvbU9yaWdpbiwgY29uc3QgYm9vbCogb3B0aW9uYWxSZXZhbGlkYXRlQWxs
UmVzb3VyY2VzKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yUGFnZUFn
ZW50OjpyZWxvYWQoT3B0aW9uYWw8Ym9vbD4mJiBpZ25vcmVDYWNoZSwgT3B0aW9uYWw8Ym9vbD4m
JiByZXZhbGlkYXRlQWxsUmVzb3VyY2VzKQogewotICAgIGJvb2wgcmVsb2FkRnJvbU9yaWdpbiA9
IG9wdGlvbmFsUmVsb2FkRnJvbU9yaWdpbiAmJiAqb3B0aW9uYWxSZWxvYWRGcm9tT3JpZ2luOwot
ICAgIGJvb2wgcmV2YWxpZGF0ZUFsbFJlc291cmNlcyA9IG9wdGlvbmFsUmV2YWxpZGF0ZUFsbFJl
c291cmNlcyAmJiAqb3B0aW9uYWxSZXZhbGlkYXRlQWxsUmVzb3VyY2VzOwotCiAgICAgT3B0aW9u
U2V0PFJlbG9hZE9wdGlvbj4gcmVsb2FkT3B0aW9uczsKLSAgICBpZiAocmVsb2FkRnJvbU9yaWdp
bikKKyAgICBpZiAoaWdub3JlQ2FjaGUgJiYgKmlnbm9yZUNhY2hlKQogICAgICAgICByZWxvYWRP
cHRpb25zLmFkZChSZWxvYWRPcHRpb246OkZyb21PcmlnaW4pOwotICAgIGlmICghcmV2YWxpZGF0
ZUFsbFJlc291cmNlcykKKyAgICBpZiAoIXJldmFsaWRhdGVBbGxSZXNvdXJjZXMgfHwgISpyZXZh
bGlkYXRlQWxsUmVzb3VyY2VzKQogICAgICAgICByZWxvYWRPcHRpb25zLmFkZChSZWxvYWRPcHRp
b246OkV4cGlyZWRPbmx5KTsKLQogICAgIG1faW5zcGVjdGVkUGFnZS5tYWluRnJhbWUoKS5sb2Fk
ZXIoKS5yZWxvYWQocmVsb2FkT3B0aW9ucyk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lk
IEluc3BlY3RvclBhZ2VBZ2VudDo6bmF2aWdhdGUoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcm
IHVybCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvclBhZ2VBZ2VudDo6
bmF2aWdhdGUoY29uc3QgU3RyaW5nJiB1cmwpCiB7CiAgICAgVXNlckdlc3R1cmVJbmRpY2F0b3Ig
aW5kaWNhdG9yIHsgUHJvY2Vzc2luZ1VzZXJHZXN0dXJlIH07CiAgICAgRnJhbWUmIGZyYW1lID0g
bV9pbnNwZWN0ZWRQYWdlLm1haW5GcmFtZSgpOwpAQCAtNDIxLDExMSArNDE5LDk3IEBAIHZvaWQg
SW5zcGVjdG9yUGFnZUFnZW50OjpuYXZpZ2F0ZShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYg
dXJsKQogICAgIEZyYW1lTG9hZFJlcXVlc3QgZnJhbWVMb2FkUmVxdWVzdCB7ICpmcmFtZS5kb2N1
bWVudCgpLCBmcmFtZS5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLCBXVEZNb3ZlKHJlc291
cmNlUmVxdWVzdCksICJfc2VsZiJfcywgSW5pdGlhdGVkQnlNYWluRnJhbWU6OlVua25vd24gfTsK
ICAgICBmcmFtZUxvYWRSZXF1ZXN0LmRpc2FibGVOYXZpZ2F0aW9uVG9JbnZhbGlkVVJMKCk7CiAg
ICAgZnJhbWUubG9hZGVyKCkuY2hhbmdlTG9jYXRpb24oV1RGTW92ZShmcmFtZUxvYWRSZXF1ZXN0
KSk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6b3Zl
cnJpZGVVc2VyQWdlbnQoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcqIHZhbHVlKQorUHJvdG9j
b2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yUGFnZUFnZW50OjpvdmVycmlkZVVzZXJB
Z2VudChjb25zdCBTdHJpbmcmIHZhbHVlKQogewotICAgIG1fdXNlckFnZW50T3ZlcnJpZGUgPSB2
YWx1ZSA/ICp2YWx1ZSA6IFN0cmluZygpOworICAgIG1fdXNlckFnZW50T3ZlcnJpZGUgPSB2YWx1
ZTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXN0YXRpYyBpbmxpbmUgT3B0aW9uYWw8Ym9vbD4g
YXNPcHRpb25hbEJvb2woY29uc3QgYm9vbCogdmFsdWUpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdP
cjx2b2lkPiBJbnNwZWN0b3JQYWdlQWdlbnQ6Om92ZXJyaWRlU2V0dGluZyhQcm90b2NvbDo6UGFn
ZTo6U2V0dGluZyBzZXR0aW5nLCBPcHRpb25hbDxib29sPiYmIHZhbHVlKQogewotICAgIGlmICgh
dmFsdWUpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgcmV0dXJuICp2YWx1ZTsK
LX0KLQotdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6Om92ZXJyaWRlU2V0dGluZyhFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgc2V0dGluZ1N0cmluZywgY29uc3QgYm9vbCog
dmFsdWUpCi17Ci0gICAgaWYgKHNldHRpbmdTdHJpbmcuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGVy
cm9yU3RyaW5nID0gInNldHRpbmdTdHJpbmcgaXMgZW1wdHkiX3M7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBhdXRvIHNldHRpbmcgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpJbnNwZWN0
b3JIZWxwZXJzOjpwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6
UGFnZTo6U2V0dGluZz4oc2V0dGluZ1N0cmluZyk7Ci0gICAgaWYgKCFzZXR0aW5nKSB7Ci0gICAg
ICAgIGVycm9yU3RyaW5nID0gbWFrZVN0cmluZygiVW5rbm93biBzZXR0aW5nU3RyaW5nOiAiX3Ms
IHNldHRpbmdTdHJpbmcpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgYXV0byYgaW5z
cGVjdGVkUGFnZVNldHRpbmdzID0gbV9pbnNwZWN0ZWRQYWdlLnNldHRpbmdzKCk7CiAKLSAgICBh
dXRvIG92ZXJyaWRlVmFsdWUgPSBhc09wdGlvbmFsQm9vbCh2YWx1ZSk7Ci0gICAgc3dpdGNoIChz
ZXR0aW5nLnZhbHVlKCkpIHsKLSAgICBjYXNlIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OlNl
dHRpbmc6OkFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZUVuYWJsZWQ6Ci0gICAgICAgIG1fY2xp
ZW50LT5zZXREZXZlbG9wZXJQcmVmZXJlbmNlT3ZlcnJpZGUoSW5zcGVjdG9yQ2xpZW50OjpEZXZl
bG9wZXJQcmVmZXJlbmNlOjpBZENsaWNrQXR0cmlidXRpb25EZWJ1Z01vZGVFbmFibGVkLCBvdmVy
cmlkZVZhbHVlKTsKLSAgICAgICAgcmV0dXJuOworICAgIHN3aXRjaCAoc2V0dGluZykgeworICAg
IGNhc2UgUHJvdG9jb2w6OlBhZ2U6OlNldHRpbmc6OkFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9k
ZUVuYWJsZWQ6CisgICAgICAgIG1fY2xpZW50LT5zZXREZXZlbG9wZXJQcmVmZXJlbmNlT3ZlcnJp
ZGUoSW5zcGVjdG9yQ2xpZW50OjpEZXZlbG9wZXJQcmVmZXJlbmNlOjpBZENsaWNrQXR0cmlidXRp
b25EZWJ1Z01vZGVFbmFibGVkLCB2YWx1ZSk7CisgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBj
YXNlIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OlNldHRpbmc6OkF1dGhvckFuZFVzZXJTdHls
ZXNFbmFibGVkOgotICAgICAgICBpbnNwZWN0ZWRQYWdlU2V0dGluZ3Muc2V0QXV0aG9yQW5kVXNl
clN0eWxlc0VuYWJsZWRJbnNwZWN0b3JPdmVycmlkZShvdmVycmlkZVZhbHVlKTsKLSAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgUHJvdG9jb2w6OlBhZ2U6OlNldHRpbmc6OkF1dGhvckFuZFVzZXJT
dHlsZXNFbmFibGVkOgorICAgICAgICBpbnNwZWN0ZWRQYWdlU2V0dGluZ3Muc2V0QXV0aG9yQW5k
VXNlclN0eWxlc0VuYWJsZWRJbnNwZWN0b3JPdmVycmlkZSh2YWx1ZSk7CisgICAgICAgIHJldHVy
biB7IH07CiAKLSAgICBjYXNlIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OlNldHRpbmc6OklD
RUNhbmRpZGF0ZUZpbHRlcmluZ0VuYWJsZWQ6Ci0gICAgICAgIGluc3BlY3RlZFBhZ2VTZXR0aW5n
cy5zZXRJQ0VDYW5kaWRhdGVGaWx0ZXJpbmdFbmFibGVkSW5zcGVjdG9yT3ZlcnJpZGUob3ZlcnJp
ZGVWYWx1ZSk7Ci0gICAgICAgIHJldHVybjsKKyAgICBjYXNlIFByb3RvY29sOjpQYWdlOjpTZXR0
aW5nOjpJQ0VDYW5kaWRhdGVGaWx0ZXJpbmdFbmFibGVkOgorICAgICAgICBpbnNwZWN0ZWRQYWdl
U2V0dGluZ3Muc2V0SUNFQ2FuZGlkYXRlRmlsdGVyaW5nRW5hYmxlZEluc3BlY3Rvck92ZXJyaWRl
KHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90
b2NvbDo6UGFnZTo6U2V0dGluZzo6SVRQRGVidWdNb2RlRW5hYmxlZDoKLSAgICAgICAgbV9jbGll
bnQtPnNldERldmVsb3BlclByZWZlcmVuY2VPdmVycmlkZShJbnNwZWN0b3JDbGllbnQ6OkRldmVs
b3BlclByZWZlcmVuY2U6OklUUERlYnVnTW9kZUVuYWJsZWQsIG92ZXJyaWRlVmFsdWUpOwotICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBQcm90b2NvbDo6UGFnZTo6U2V0dGluZzo6SVRQRGVidWdN
b2RlRW5hYmxlZDoKKyAgICAgICAgbV9jbGllbnQtPnNldERldmVsb3BlclByZWZlcmVuY2VPdmVy
cmlkZShJbnNwZWN0b3JDbGllbnQ6OkRldmVsb3BlclByZWZlcmVuY2U6OklUUERlYnVnTW9kZUVu
YWJsZWQsIHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGNhc2UgSW5zcGVjdG9y
OjpQcm90b2NvbDo6UGFnZTo6U2V0dGluZzo6SW1hZ2VzRW5hYmxlZDoKLSAgICAgICAgaW5zcGVj
dGVkUGFnZVNldHRpbmdzLnNldEltYWdlc0VuYWJsZWRJbnNwZWN0b3JPdmVycmlkZShvdmVycmlk
ZVZhbHVlKTsKLSAgICAgICAgcmV0dXJuOworICAgIGNhc2UgUHJvdG9jb2w6OlBhZ2U6OlNldHRp
bmc6OkltYWdlc0VuYWJsZWQ6CisgICAgICAgIGluc3BlY3RlZFBhZ2VTZXR0aW5ncy5zZXRJbWFn
ZXNFbmFibGVkSW5zcGVjdG9yT3ZlcnJpZGUodmFsdWUpOworICAgICAgICByZXR1cm4geyB9Owog
Ci0gICAgY2FzZSBJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpTZXR0aW5nOjpNZWRpYUNhcHR1
cmVSZXF1aXJlc1NlY3VyZUNvbm5lY3Rpb246Ci0gICAgICAgIGluc3BlY3RlZFBhZ2VTZXR0aW5n
cy5zZXRNZWRpYUNhcHR1cmVSZXF1aXJlc1NlY3VyZUNvbm5lY3Rpb25JbnNwZWN0b3JPdmVycmlk
ZShvdmVycmlkZVZhbHVlKTsKLSAgICAgICAgcmV0dXJuOworICAgIGNhc2UgUHJvdG9jb2w6OlBh
Z2U6OlNldHRpbmc6Ok1lZGlhQ2FwdHVyZVJlcXVpcmVzU2VjdXJlQ29ubmVjdGlvbjoKKyAgICAg
ICAgaW5zcGVjdGVkUGFnZVNldHRpbmdzLnNldE1lZGlhQ2FwdHVyZVJlcXVpcmVzU2VjdXJlQ29u
bmVjdGlvbkluc3BlY3Rvck92ZXJyaWRlKHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAot
ICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6U2V0dGluZzo6TW9ja0NhcHR1cmVE
ZXZpY2VzRW5hYmxlZDoKLSAgICAgICAgaW5zcGVjdGVkUGFnZVNldHRpbmdzLnNldE1vY2tDYXB0
dXJlRGV2aWNlc0VuYWJsZWRJbnNwZWN0b3JPdmVycmlkZShvdmVycmlkZVZhbHVlKTsKLSAgICAg
ICAgbV9jbGllbnQtPnNldERldmVsb3BlclByZWZlcmVuY2VPdmVycmlkZShJbnNwZWN0b3JDbGll
bnQ6OkRldmVsb3BlclByZWZlcmVuY2U6Ok1vY2tDYXB0dXJlRGV2aWNlc0VuYWJsZWQsIG92ZXJy
aWRlVmFsdWUpOwotICAgICAgICByZXR1cm47CisgICAgY2FzZSBQcm90b2NvbDo6UGFnZTo6U2V0
dGluZzo6TW9ja0NhcHR1cmVEZXZpY2VzRW5hYmxlZDoKKyAgICAgICAgaW5zcGVjdGVkUGFnZVNl
dHRpbmdzLnNldE1vY2tDYXB0dXJlRGV2aWNlc0VuYWJsZWRJbnNwZWN0b3JPdmVycmlkZSh2YWx1
ZSk7CisgICAgICAgIG1fY2xpZW50LT5zZXREZXZlbG9wZXJQcmVmZXJlbmNlT3ZlcnJpZGUoSW5z
cGVjdG9yQ2xpZW50OjpEZXZlbG9wZXJQcmVmZXJlbmNlOjpNb2NrQ2FwdHVyZURldmljZXNFbmFi
bGVkLCB2YWx1ZSk7CisgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBjYXNlIEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlBhZ2U6OlNldHRpbmc6Ok5lZWRzU2l0ZVNwZWNpZmljUXVpcmtzOgotICAgICAg
ICBpbnNwZWN0ZWRQYWdlU2V0dGluZ3Muc2V0TmVlZHNTaXRlU3BlY2lmaWNRdWlya3NJbnNwZWN0
b3JPdmVycmlkZShvdmVycmlkZVZhbHVlKTsKLSAgICAgICAgcmV0dXJuOworICAgIGNhc2UgUHJv
dG9jb2w6OlBhZ2U6OlNldHRpbmc6Ok5lZWRzU2l0ZVNwZWNpZmljUXVpcmtzOgorICAgICAgICBp
bnNwZWN0ZWRQYWdlU2V0dGluZ3Muc2V0TmVlZHNTaXRlU3BlY2lmaWNRdWlya3NJbnNwZWN0b3JP
dmVycmlkZSh2YWx1ZSk7CisgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBjYXNlIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlBhZ2U6OlNldHRpbmc6OlNjcmlwdEVuYWJsZWQ6Ci0gICAgICAgIGluc3Bl
Y3RlZFBhZ2VTZXR0aW5ncy5zZXRTY3JpcHRFbmFibGVkSW5zcGVjdG9yT3ZlcnJpZGUob3ZlcnJp
ZGVWYWx1ZSk7Ci0gICAgICAgIHJldHVybjsKKyAgICBjYXNlIFByb3RvY29sOjpQYWdlOjpTZXR0
aW5nOjpTY3JpcHRFbmFibGVkOgorICAgICAgICBpbnNwZWN0ZWRQYWdlU2V0dGluZ3Muc2V0U2Ny
aXB0RW5hYmxlZEluc3BlY3Rvck92ZXJyaWRlKHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHsgfTsK
IAotICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6U2V0dGluZzo6U2hvd0RlYnVn
Qm9yZGVyczoKLSAgICAgICAgaW5zcGVjdGVkUGFnZVNldHRpbmdzLnNldFNob3dEZWJ1Z0JvcmRl
cnNJbnNwZWN0b3JPdmVycmlkZShvdmVycmlkZVZhbHVlKTsKLSAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgUHJvdG9jb2w6OlBhZ2U6OlNldHRpbmc6OlNob3dEZWJ1Z0JvcmRlcnM6CisgICAgICAg
IGluc3BlY3RlZFBhZ2VTZXR0aW5ncy5zZXRTaG93RGVidWdCb3JkZXJzSW5zcGVjdG9yT3ZlcnJp
ZGUodmFsdWUpOworICAgICAgICByZXR1cm4geyB9OwogCi0gICAgY2FzZSBJbnNwZWN0b3I6OlBy
b3RvY29sOjpQYWdlOjpTZXR0aW5nOjpTaG93UmVwYWludENvdW50ZXI6Ci0gICAgICAgIGluc3Bl
Y3RlZFBhZ2VTZXR0aW5ncy5zZXRTaG93UmVwYWludENvdW50ZXJJbnNwZWN0b3JPdmVycmlkZShv
dmVycmlkZVZhbHVlKTsKLSAgICAgICAgcmV0dXJuOworICAgIGNhc2UgUHJvdG9jb2w6OlBhZ2U6
OlNldHRpbmc6OlNob3dSZXBhaW50Q291bnRlcjoKKyAgICAgICAgaW5zcGVjdGVkUGFnZVNldHRp
bmdzLnNldFNob3dSZXBhaW50Q291bnRlckluc3BlY3Rvck92ZXJyaWRlKHZhbHVlKTsKKyAgICAg
ICAgcmV0dXJuIHsgfTsKIAotICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6U2V0
dGluZzo6V2ViUlRDRW5jcnlwdGlvbkVuYWJsZWQ6Ci0gICAgICAgIGluc3BlY3RlZFBhZ2VTZXR0
aW5ncy5zZXRXZWJSVENFbmNyeXB0aW9uRW5hYmxlZEluc3BlY3Rvck92ZXJyaWRlKG92ZXJyaWRl
VmFsdWUpOwotICAgICAgICByZXR1cm47CisgICAgY2FzZSBQcm90b2NvbDo6UGFnZTo6U2V0dGlu
Zzo6V2ViUlRDRW5jcnlwdGlvbkVuYWJsZWQ6CisgICAgICAgIGluc3BlY3RlZFBhZ2VTZXR0aW5n
cy5zZXRXZWJSVENFbmNyeXB0aW9uRW5hYmxlZEluc3BlY3Rvck92ZXJyaWRlKHZhbHVlKTsKKyAg
ICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6
U2V0dGluZzo6V2ViU2VjdXJpdHlFbmFibGVkOgotICAgICAgICBpbnNwZWN0ZWRQYWdlU2V0dGlu
Z3Muc2V0V2ViU2VjdXJpdHlFbmFibGVkSW5zcGVjdG9yT3ZlcnJpZGUob3ZlcnJpZGVWYWx1ZSk7
Ci0gICAgICAgIHJldHVybjsKKyAgICBjYXNlIFByb3RvY29sOjpQYWdlOjpTZXR0aW5nOjpXZWJT
ZWN1cml0eUVuYWJsZWQ6CisgICAgICAgIGluc3BlY3RlZFBhZ2VTZXR0aW5ncy5zZXRXZWJTZWN1
cml0eUVuYWJsZWRJbnNwZWN0b3JPdmVycmlkZSh2YWx1ZSk7CisgICAgICAgIHJldHVybiB7IH07
CiAgICAgfQogCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIHsgfTsKIH0K
IAotc3RhdGljIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkNvb2tpZVNhbWVTaXRlUG9saWN5
IGNvb2tpZVNhbWVTaXRlUG9saWN5SlNPTihDb29raWU6OlNhbWVTaXRlUG9saWN5IHBvbGljeSkK
K3N0YXRpYyBQcm90b2NvbDo6UGFnZTo6Q29va2llU2FtZVNpdGVQb2xpY3kgY29va2llU2FtZVNp
dGVQb2xpY3lKU09OKENvb2tpZTo6U2FtZVNpdGVQb2xpY3kgcG9saWN5KQogewogICAgIHN3aXRj
aCAocG9saWN5KSB7CiAgICAgY2FzZSBDb29raWU6OlNhbWVTaXRlUG9saWN5OjpOb25lOgotICAg
ICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6Q29va2llU2FtZVNpdGVQb2xp
Y3k6Ok5vbmU7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6UGFnZTo6Q29va2llU2FtZVNpdGVQ
b2xpY3k6Ok5vbmU7CiAgICAgY2FzZSBDb29raWU6OlNhbWVTaXRlUG9saWN5OjpMYXg6Ci0gICAg
ICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpDb29raWVTYW1lU2l0ZVBvbGlj
eTo6TGF4OworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OlBhZ2U6OkNvb2tpZVNhbWVTaXRlUG9s
aWN5OjpMYXg7CiAgICAgY2FzZSBDb29raWU6OlNhbWVTaXRlUG9saWN5OjpTdHJpY3Q6Ci0gICAg
ICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpDb29raWVTYW1lU2l0ZVBvbGlj
eTo6U3RyaWN0OworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OlBhZ2U6OkNvb2tpZVNhbWVTaXRl
UG9saWN5OjpTdHJpY3Q7CiAgICAgfQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJl
dHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpDb29raWVTYW1lU2l0ZVBvbGljeTo6Tm9u
ZTsKKyAgICByZXR1cm4gUHJvdG9jb2w6OlBhZ2U6OkNvb2tpZVNhbWVTaXRlUG9saWN5OjpOb25l
OwogfQogCi1zdGF0aWMgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkNvb2tpZT4gYnVp
bGRPYmplY3RGb3JDb29raWUoY29uc3QgQ29va2llJiBjb29raWUpCitzdGF0aWMgUmVmPFByb3Rv
Y29sOjpQYWdlOjpDb29raWU+IGJ1aWxkT2JqZWN0Rm9yQ29va2llKGNvbnN0IENvb2tpZSYgY29v
a2llKQogewotICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpDb29raWU6OmNy
ZWF0ZSgpCisgICAgcmV0dXJuIFByb3RvY29sOjpQYWdlOjpDb29raWU6OmNyZWF0ZSgpCiAgICAg
ICAgIC5zZXROYW1lKGNvb2tpZS5uYW1lKQogICAgICAgICAuc2V0VmFsdWUoY29va2llLnZhbHVl
KQogICAgICAgICAuc2V0RG9tYWluKGNvb2tpZS5kb21haW4pCkBAIC01MzgsOSArNTIyLDkgQEAg
c3RhdGljIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpDb29raWU+IGJ1aWxkT2JqZWN0
Rm9yQ29va2llKGNvbnN0IENvb2tpZSYKICAgICAgICAgLnJlbGVhc2UoKTsKIH0KIAotc3RhdGlj
IFJlZjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkNvb2tpZT4+IGJ1
aWxkQXJyYXlGb3JDb29raWVzKExpc3RIYXNoU2V0PENvb2tpZT4mIGNvb2tpZXNMaXN0KQorc3Rh
dGljIFJlZjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpQYWdlOjpDb29raWU+PiBidWlsZEFycmF5
Rm9yQ29va2llcyhMaXN0SGFzaFNldDxDb29raWU+JiBjb29raWVzTGlzdCkKIHsKLSAgICBhdXRv
IGNvb2tpZXMgPSBKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkNvb2tp
ZT46OmNyZWF0ZSgpOworICAgIGF1dG8gY29va2llcyA9IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6
OlBhZ2U6OkNvb2tpZT46OmNyZWF0ZSgpOwogCiAgICAgZm9yIChjb25zdCBhdXRvJiBjb29raWUg
OiBjb29raWVzTGlzdCkKICAgICAgICAgY29va2llcy0+YWRkSXRlbShidWlsZE9iamVjdEZvckNv
b2tpZShjb29raWUpKTsKQEAgLTU2MCw3ICs1NDQsNyBAQCBzdGF0aWMgVmVjdG9yPFVSTD4gYWxs
UmVzb3VyY2VzVVJMc0ZvckZyYW1lKEZyYW1lKiBmcmFtZSkKICAgICByZXR1cm4gcmVzdWx0Owog
fQogCi12b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6Z2V0Q29va2llcyhFcnJvclN0cmluZyYsIFJl
ZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkNvb2tpZT4+JiBj
b29raWVzKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEpTT046OkFycmF5T2Y8UHJvdG9j
b2w6OlBhZ2U6OkNvb2tpZT4+PiBJbnNwZWN0b3JQYWdlQWdlbnQ6OmdldENvb2tpZXMoKQogewog
ICAgIExpc3RIYXNoU2V0PENvb2tpZT4gYWxsUmF3Q29va2llczsKIApAQCAtNTc5LDcyICs1NjMs
ODQgQEAgdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmdldENvb2tpZXMoRXJyb3JTdHJpbmcmLCBS
ZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3IKICAgICAgICAgfQogICAgIH0KIAotICAgIGNv
b2tpZXMgPSBidWlsZEFycmF5Rm9yQ29va2llcyhhbGxSYXdDb29raWVzKTsKKyAgICByZXR1cm4g
YnVpbGRBcnJheUZvckNvb2tpZXMoYWxsUmF3Q29va2llcyk7CiB9CiAKLXN0YXRpYyBPcHRpb25h
bDxDb29raWU+IHBhcnNlQ29va2llT2JqZWN0KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29u
c3QgSlNPTjo6T2JqZWN0JiBjb29raWVPYmplY3QpCitzdGF0aWMgT3B0aW9uYWw8Q29va2llPiBw
YXJzZUNvb2tpZU9iamVjdChQcm90b2NvbDo6RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBSZWY8
SlNPTjo6T2JqZWN0PiYmIGNvb2tpZU9iamVjdCkKIHsKICAgICBDb29raWUgY29va2llOwogCi0g
ICAgaWYgKCFjb29raWVPYmplY3QuZ2V0U3RyaW5nKCJuYW1lIl9zLCBjb29raWUubmFtZSkpIHsK
KyAgICBjb29raWUubmFtZSA9IGNvb2tpZU9iamVjdC0+Z2V0U3RyaW5nKFByb3RvY29sOjpQYWdl
OjpDb29raWU6Om5hbWVLZXkpOworICAgIGlmICghY29va2llLm5hbWUpIHsKICAgICAgICAgZXJy
b3JTdHJpbmcgPSAiSW52YWxpZCB2YWx1ZSBmb3Iga2V5IG5hbWUgaW4gZ2l2ZW4gY29va2llIjsK
ICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICB9CiAKLSAgICBpZiAoIWNvb2tpZU9i
amVjdC5nZXRTdHJpbmcoInZhbHVlIl9zLCBjb29raWUudmFsdWUpKSB7CisgICAgY29va2llLnZh
bHVlID0gY29va2llT2JqZWN0LT5nZXRTdHJpbmcoUHJvdG9jb2w6OlBhZ2U6OkNvb2tpZTo6dmFs
dWVLZXkpOworICAgIGlmICghY29va2llLnZhbHVlKSB7CiAgICAgICAgIGVycm9yU3RyaW5nID0g
IkludmFsaWQgdmFsdWUgZm9yIGtleSB2YWx1ZSBpbiBnaXZlbiBjb29raWUiOwogICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIH0KIAotICAgIGlmICghY29va2llT2JqZWN0LmdldFN0
cmluZygiZG9tYWluIl9zLCBjb29raWUuZG9tYWluKSkgeworICAgIGNvb2tpZS5kb21haW4gPSBj
b29raWVPYmplY3QtPmdldFN0cmluZyhQcm90b2NvbDo6UGFnZTo6Q29va2llOjpkb21haW5LZXkp
OworICAgIGlmICghY29va2llLmRvbWFpbikgewogICAgICAgICBlcnJvclN0cmluZyA9ICJJbnZh
bGlkIHZhbHVlIGZvciBrZXkgZG9tYWluIGluIGdpdmVuIGNvb2tpZSI7CiAgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CiAgICAgfQogCi0gICAgaWYgKCFjb29raWVPYmplY3QuZ2V0U3RyaW5n
KCJwYXRoIl9zLCBjb29raWUucGF0aCkpIHsKKyAgICBjb29raWUucGF0aCA9IGNvb2tpZU9iamVj
dC0+Z2V0U3RyaW5nKFByb3RvY29sOjpQYWdlOjpDb29raWU6OnBhdGhLZXkpOworICAgIGlmICgh
Y29va2llLnBhdGgpIHsKICAgICAgICAgZXJyb3JTdHJpbmcgPSAiSW52YWxpZCB2YWx1ZSBmb3Ig
a2V5IHBhdGggaW4gZ2l2ZW4gY29va2llIjsKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
ICAgICB9CiAKLSAgICBpZiAoIWNvb2tpZU9iamVjdC5nZXRCb29sZWFuKCJodHRwT25seSJfcywg
Y29va2llLmh0dHBPbmx5KSkgeworICAgIGF1dG8gaHR0cE9ubHkgPSBjb29raWVPYmplY3QtPmdl
dEJvb2xlYW4oUHJvdG9jb2w6OlBhZ2U6OkNvb2tpZTo6aHR0cE9ubHlLZXkpOworICAgIGlmICgh
aHR0cE9ubHkpIHsKICAgICAgICAgZXJyb3JTdHJpbmcgPSAiSW52YWxpZCB2YWx1ZSBmb3Iga2V5
IGh0dHBPbmx5IGluIGdpdmVuIGNvb2tpZSI7CiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CiAgICAgfQogCi0gICAgaWYgKCFjb29raWVPYmplY3QuZ2V0Qm9vbGVhbigic2VjdXJlIl9zLCBj
b29raWUuc2VjdXJlKSkgeworICAgIGNvb2tpZS5odHRwT25seSA9ICpodHRwT25seTsKKworICAg
IGF1dG8gc2VjdXJlID0gY29va2llT2JqZWN0LT5nZXRCb29sZWFuKFByb3RvY29sOjpQYWdlOjpD
b29raWU6OnNlY3VyZUtleSk7CisgICAgaWYgKCFzZWN1cmUpIHsKICAgICAgICAgZXJyb3JTdHJp
bmcgPSAiSW52YWxpZCB2YWx1ZSBmb3Iga2V5IHNlY3VyZSBpbiBnaXZlbiBjb29raWUiOwogICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIH0KIAotICAgIGJvb2wgdmFsaWRTZXNzaW9u
ID0gY29va2llT2JqZWN0LmdldEJvb2xlYW4oInNlc3Npb24iX3MsIGNvb2tpZS5zZXNzaW9uKTsK
LSAgICBjb29raWUuZXhwaXJlcyA9IGNvb2tpZU9iamVjdC5nZXROdW1iZXI8ZG91YmxlPigiZXhw
aXJlcyJfcyk7Ci0gICAgaWYgKCF2YWxpZFNlc3Npb24gJiYgIWNvb2tpZS5leHBpcmVzKSB7Cisg
ICAgY29va2llLnNlY3VyZSA9ICpzZWN1cmU7CisKKyAgICBhdXRvIHNlc3Npb24gPSBjb29raWVP
YmplY3QtPmdldEJvb2xlYW4oUHJvdG9jb2w6OlBhZ2U6OkNvb2tpZTo6c2Vzc2lvbktleSk7Cisg
ICAgY29va2llLmV4cGlyZXMgPSBjb29raWVPYmplY3QtPmdldERvdWJsZShQcm90b2NvbDo6UGFn
ZTo6Q29va2llOjpleHBpcmVzS2V5KTsKKyAgICBpZiAoIXNlc3Npb24gJiYgIWNvb2tpZS5leHBp
cmVzKSB7CiAgICAgICAgIGVycm9yU3RyaW5nID0gIkludmFsaWQgdmFsdWUgZm9yIGtleSBleHBp
cmVzIGluIGdpdmVuIGNvb2tpZSI7CiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAg
fQogCi0gICAgU3RyaW5nIHNhbWVTaXRlU3RyaW5nOwotICAgIGlmICghY29va2llT2JqZWN0Lmdl
dFN0cmluZygic2FtZVNpdGUiX3MsIHNhbWVTaXRlU3RyaW5nKSkgeworICAgIGNvb2tpZS5zZXNz
aW9uID0gKnNlc3Npb247CisKKyAgICBhdXRvIHNhbWVTaXRlU3RyaW5nID0gY29va2llT2JqZWN0
LT5nZXRTdHJpbmcoUHJvdG9jb2w6OlBhZ2U6OkNvb2tpZTo6c2FtZVNpdGVLZXkpOworICAgIGlm
ICghc2FtZVNpdGVTdHJpbmcpIHsKICAgICAgICAgZXJyb3JTdHJpbmcgPSAiSW52YWxpZCB2YWx1
ZSBmb3Iga2V5IHNhbWVTaXRlIGluIGdpdmVuIGNvb2tpZSI7CiAgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CiAgICAgfQogCi0gICAgYXV0byBzYW1lU2l0ZSA9IEluc3BlY3Rvcjo6UHJvdG9j
b2w6Okluc3BlY3RvckhlbHBlcnM6OnBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6
OlByb3RvY29sOjpQYWdlOjpDb29raWVTYW1lU2l0ZVBvbGljeT4oc2FtZVNpdGVTdHJpbmcpOwor
ICAgIGF1dG8gc2FtZVNpdGUgPSBQcm90b2NvbDo6SGVscGVyczo6cGFyc2VFbnVtVmFsdWVGcm9t
U3RyaW5nPFByb3RvY29sOjpQYWdlOjpDb29raWVTYW1lU2l0ZVBvbGljeT4oc2FtZVNpdGVTdHJp
bmcpOwogICAgIGlmICghc2FtZVNpdGUpIHsKICAgICAgICAgZXJyb3JTdHJpbmcgPSAiSW52YWxp
ZCB2YWx1ZSBmb3Iga2V5IHNhbWVTaXRlIGluIGdpdmVuIGNvb2tpZSI7CiAgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CiAgICAgfQogCiAgICAgc3dpdGNoIChzYW1lU2l0ZS52YWx1ZSgpKSB7
Ci0gICAgY2FzZSBJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpDb29raWVTYW1lU2l0ZVBvbGlj
eTo6Tm9uZToKKyAgICBjYXNlIFByb3RvY29sOjpQYWdlOjpDb29raWVTYW1lU2l0ZVBvbGljeTo6
Tm9uZToKICAgICAgICAgY29va2llLnNhbWVTaXRlID0gQ29va2llOjpTYW1lU2l0ZVBvbGljeTo6
Tm9uZTsKLQogICAgICAgICBicmVhazsKLSAgICBjYXNlIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBh
Z2U6OkNvb2tpZVNhbWVTaXRlUG9saWN5OjpMYXg6CisKKyAgICBjYXNlIFByb3RvY29sOjpQYWdl
OjpDb29raWVTYW1lU2l0ZVBvbGljeTo6TGF4OgogICAgICAgICBjb29raWUuc2FtZVNpdGUgPSBD
b29raWU6OlNhbWVTaXRlUG9saWN5OjpMYXg7Ci0KICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJ
bnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpDb29raWVTYW1lU2l0ZVBvbGljeTo6U3RyaWN0Ogor
CisgICAgY2FzZSBQcm90b2NvbDo6UGFnZTo6Q29va2llU2FtZVNpdGVQb2xpY3k6OlN0cmljdDoK
ICAgICAgICAgY29va2llLnNhbWVTaXRlID0gQ29va2llOjpTYW1lU2l0ZVBvbGljeTo6U3RyaWN0
OwogICAgICAgICBicmVhazsKICAgICB9CkBAIC02NTIsMTEgKzY0OCwxMyBAQCBzdGF0aWMgT3B0
aW9uYWw8Q29va2llPiBwYXJzZUNvb2tpZU9iamVjdChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcs
IGNvbnN0IEpTT046OgogICAgIHJldHVybiBjb29raWU7CiB9CiAKLXZvaWQgSW5zcGVjdG9yUGFn
ZUFnZW50OjpzZXRDb29raWUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBKU09OOjpP
YmplY3QmIGNvb2tpZU9iamVjdCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3Bl
Y3RvclBhZ2VBZ2VudDo6c2V0Q29va2llKFJlZjxKU09OOjpPYmplY3Q+JiYgY29va2llT2JqZWN0
KQogewotICAgIGF1dG8gY29va2llID0gcGFyc2VDb29raWVPYmplY3QoZXJyb3JTdHJpbmcsIGNv
b2tpZU9iamVjdCk7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCisg
ICAgYXV0byBjb29raWUgPSBwYXJzZUNvb2tpZU9iamVjdChlcnJvclN0cmluZywgV1RGTW92ZShj
b29raWVPYmplY3QpKTsKICAgICBpZiAoIWNvb2tpZSkKLSAgICAgICAgcmV0dXJuOworICAgICAg
ICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCiAgICAgZm9yIChhdXRvKiBm
cmFtZSA9ICZtX2luc3BlY3RlZFBhZ2UubWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1l
LT50cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsKICAgICAgICAgaWYgKGF1dG8qIGRvY3VtZW50ID0g
ZnJhbWUtPmRvY3VtZW50KCkpIHsKQEAgLTY2NCw5ICs2NjIsMTEgQEAgdm9pZCBJbnNwZWN0b3JQ
YWdlQWdlbnQ6OnNldENvb2tpZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IEpTT046
Ok9iamVjdCYKICAgICAgICAgICAgICAgICBwYWdlLT5jb29raWVKYXIoKS5zZXRSYXdDb29raWUo
KmRvY3VtZW50LCBjb29raWUudmFsdWUoKSk7CiAgICAgICAgIH0KICAgICB9CisKKyAgICByZXR1
cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6ZGVsZXRlQ29va2llKEVycm9y
U3RyaW5nJiwgY29uc3QgU3RyaW5nJiBjb29raWVOYW1lLCBjb25zdCBTdHJpbmcmIHVybCkKK1By
b3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvclBhZ2VBZ2VudDo6ZGVsZXRlQ29v
a2llKGNvbnN0IFN0cmluZyYgY29va2llTmFtZSwgY29uc3QgU3RyaW5nJiB1cmwpCiB7CiAgICAg
VVJMIHBhcnNlZFVSTCh7IH0sIHVybCk7CiAgICAgZm9yIChGcmFtZSogZnJhbWUgPSAmbV9pbnNw
ZWN0ZWRQYWdlLm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZl
cnNlTmV4dCgpKSB7CkBAIC02NzUsNDggKzY3NSw1OSBAQCB2b2lkIEluc3BlY3RvclBhZ2VBZ2Vu
dDo6ZGVsZXRlQ29va2llKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBjb29raWVOYW1lLCBj
bwogICAgICAgICAgICAgICAgIHBhZ2UtPmNvb2tpZUphcigpLmRlbGV0ZUNvb2tpZSgqZG9jdW1l
bnQsIHBhcnNlZFVSTCwgY29va2llTmFtZSk7CiAgICAgICAgIH0KICAgICB9CisKKyAgICByZXR1
cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6Z2V0UmVzb3VyY2VUcmVlKEVy
cm9yU3RyaW5nJiwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkZyYW1lUmVzb3Vy
Y2VUcmVlPiYgb2JqZWN0KQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPFByb3RvY29sOjpQ
YWdlOjpGcmFtZVJlc291cmNlVHJlZT4+IEluc3BlY3RvclBhZ2VBZ2VudDo6Z2V0UmVzb3VyY2VU
cmVlKCkKIHsKLSAgICBvYmplY3QgPSBidWlsZE9iamVjdEZvckZyYW1lVHJlZSgmbV9pbnNwZWN0
ZWRQYWdlLm1haW5GcmFtZSgpKTsKKyAgICByZXR1cm4gYnVpbGRPYmplY3RGb3JGcmFtZVRyZWUo
Jm1faW5zcGVjdGVkUGFnZS5tYWluRnJhbWUoKSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yUGFnZUFn
ZW50OjpnZXRSZXNvdXJjZUNvbnRlbnQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBT
dHJpbmcmIGZyYW1lSWQsIGNvbnN0IFN0cmluZyYgdXJsLCBTdHJpbmcqIGNvbnRlbnQsIGJvb2wq
IGJhc2U2NEVuY29kZWQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxzdGQ6OnR1cGxlPFN0cmlu
ZywgYm9vbCAvKiBiYXNlNjRFbmNvZGVkICovPj4gSW5zcGVjdG9yUGFnZUFnZW50OjpnZXRSZXNv
dXJjZUNvbnRlbnQoY29uc3QgUHJvdG9jb2w6Ok5ldHdvcms6OkZyYW1lSWQmIGZyYW1lSWQsIGNv
bnN0IFN0cmluZyYgdXJsKQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmlu
ZzsKKwogICAgIEZyYW1lKiBmcmFtZSA9IGFzc2VydEZyYW1lKGVycm9yU3RyaW5nLCBmcmFtZUlk
KTsKICAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtl
VW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKLSAgICByZXNvdXJjZUNvbnRlbnQoZXJyb3JTdHJp
bmcsIGZyYW1lLCBVUkwoeyB9LCB1cmwpLCBjb250ZW50LCBiYXNlNjRFbmNvZGVkKTsKKyAgICBT
dHJpbmcgY29udGVudDsKKyAgICBib29sIGJhc2U2NEVuY29kZWQ7CisKKyAgICByZXNvdXJjZUNv
bnRlbnQoZXJyb3JTdHJpbmcsIGZyYW1lLCBVUkwoeyB9LCB1cmwpLCAmY29udGVudCwgJmJhc2U2
NEVuY29kZWQpOworCisgICAgcmV0dXJuIHsgeyBjb250ZW50LCBiYXNlNjRFbmNvZGVkIH0gfTsK
IH0KIAotdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OnNldEJvb3RzdHJhcFNjcmlwdChFcnJvclN0
cmluZyYsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxTb3VyY2UpCitQcm90b2NvbDo6RXJyb3JTdHJp
bmdPcjx2b2lkPiBJbnNwZWN0b3JQYWdlQWdlbnQ6OnNldEJvb3RzdHJhcFNjcmlwdChjb25zdCBT
dHJpbmcmIHNvdXJjZSkKIHsKLSAgICBtX2Jvb3RzdHJhcFNjcmlwdCA9IG9wdGlvbmFsU291cmNl
ID8gKm9wdGlvbmFsU291cmNlIDogbnVsbFN0cmluZygpOworICAgIG1fYm9vdHN0cmFwU2NyaXB0
ID0gc291cmNlOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JQYWdlQWdl
bnQ6OnNlYXJjaEluUmVzb3VyY2UoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJp
bmcmIGZyYW1lSWQsIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIHF1ZXJ5LCBjb25z
dCBib29sKiBvcHRpb25hbENhc2VTZW5zaXRpdmUsIGNvbnN0IGJvb2wqIG9wdGlvbmFsSXNSZWdl
eCwgY29uc3QgU3RyaW5nKiBvcHRpb25hbFJlcXVlc3RJZCwgUmVmUHRyPEpTT046OkFycmF5T2Y8
SW5zcGVjdG9yOjpQcm90b2NvbDo6R2VuZXJpY1R5cGVzOjpTZWFyY2hNYXRjaD4+JiByZXN1bHRz
KQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6Okdl
bmVyaWNUeXBlczo6U2VhcmNoTWF0Y2g+Pj4gSW5zcGVjdG9yUGFnZUFnZW50OjpzZWFyY2hJblJl
c291cmNlKGNvbnN0IFByb3RvY29sOjpOZXR3b3JrOjpGcmFtZUlkJiBmcmFtZUlkLCBjb25zdCBT
dHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBxdWVyeSwgT3B0aW9uYWw8Ym9vbD4mJiBjYXNlU2Vu
c2l0aXZlLCBPcHRpb25hbDxib29sPiYmIGlzUmVnZXgsIGNvbnN0IFByb3RvY29sOjpOZXR3b3Jr
OjpSZXF1ZXN0SWQmIHJlcXVlc3RJZCkKIHsKLSAgICByZXN1bHRzID0gSlNPTjo6QXJyYXlPZjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpHZW5lcmljVHlwZXM6OlNlYXJjaE1hdGNoPjo6Y3JlYXRlKCk7
CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOwogCi0gICAgYm9vbCBpc1Jl
Z2V4ID0gb3B0aW9uYWxJc1JlZ2V4ID8gKm9wdGlvbmFsSXNSZWdleCA6IGZhbHNlOwotICAgIGJv
b2wgY2FzZVNlbnNpdGl2ZSA9IG9wdGlvbmFsQ2FzZVNlbnNpdGl2ZSA/ICpvcHRpb25hbENhc2VT
ZW5zaXRpdmUgOiBmYWxzZTsKLQotICAgIGlmIChvcHRpb25hbFJlcXVlc3RJZCkgeworICAgIGlm
ICghIXJlcXVlc3RJZCkgewogICAgICAgICBpZiAoYXV0byogbmV0d29ya0FnZW50ID0gbV9pbnN0
cnVtZW50aW5nQWdlbnRzLmVuYWJsZWROZXR3b3JrQWdlbnQoKSkgewotICAgICAgICAgICAgbmV0
d29ya0FnZW50LT5zZWFyY2hJblJlcXVlc3QoZXJyb3JTdHJpbmcsICpvcHRpb25hbFJlcXVlc3RJ
ZCwgcXVlcnksIGNhc2VTZW5zaXRpdmUsIGlzUmVnZXgsIHJlc3VsdHMpOwotICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkdlbmVy
aWNUeXBlczo6U2VhcmNoTWF0Y2g+PiByZXN1bHQ7CisgICAgICAgICAgICBuZXR3b3JrQWdlbnQt
PnNlYXJjaEluUmVxdWVzdChlcnJvclN0cmluZywgcmVxdWVzdElkLCBxdWVyeSwgY2FzZVNlbnNp
dGl2ZSAmJiAqY2FzZVNlbnNpdGl2ZSwgaXNSZWdleCAmJiAqaXNSZWdleCwgcmVzdWx0KTsKKyAg
ICAgICAgICAgIGlmICghcmVzdWx0KQorICAgICAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBl
Y3RlZChlcnJvclN0cmluZyk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2VOb25O
dWxsKCk7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBGcmFtZSogZnJhbWUgPSBhc3NlcnRGcmFt
ZShlcnJvclN0cmluZywgZnJhbWVJZCk7CiAgICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJu
OworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCiAgICAgRG9j
dW1lbnRMb2FkZXIqIGxvYWRlciA9IGFzc2VydERvY3VtZW50TG9hZGVyKGVycm9yU3RyaW5nLCBm
cmFtZSk7CiAgICAgaWYgKCFsb2FkZXIpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJu
IG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgIFVSTCBrdXJsKHsgfSwgdXJsKTsK
IApAQCAtNzM1LDI5ICs3NDYsMjYgQEAgdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OnNlYXJjaElu
UmVzb3VyY2UoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcKICAgICB9CiAK
ICAgICBpZiAoIXN1Y2Nlc3MpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIEpTT046
OkFycmF5T2Y8UHJvdG9jb2w6OkdlbmVyaWNUeXBlczo6U2VhcmNoTWF0Y2g+OjpjcmVhdGUoKTsK
IAotICAgIHJlc3VsdHMgPSBDb250ZW50U2VhcmNoVXRpbGl0aWVzOjpzZWFyY2hJblRleHRCeUxp
bmVzKGNvbnRlbnQsIHF1ZXJ5LCBjYXNlU2Vuc2l0aXZlLCBpc1JlZ2V4KTsKKyAgICByZXR1cm4g
Q29udGVudFNlYXJjaFV0aWxpdGllczo6c2VhcmNoSW5UZXh0QnlMaW5lcyhjb250ZW50LCBxdWVy
eSwgY2FzZVNlbnNpdGl2ZSAmJiAqY2FzZVNlbnNpdGl2ZSwgaXNSZWdleCAmJiAqaXNSZWdleCk7
CiB9CiAKLXN0YXRpYyBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6U2VhcmNoUmVzdWx0
PiBidWlsZE9iamVjdEZvclNlYXJjaFJlc3VsdChjb25zdCBTdHJpbmcmIGZyYW1lSWQsIGNvbnN0
IFN0cmluZyYgdXJsLCBpbnQgbWF0Y2hlc0NvdW50KQorc3RhdGljIFJlZjxQcm90b2NvbDo6UGFn
ZTo6U2VhcmNoUmVzdWx0PiBidWlsZE9iamVjdEZvclNlYXJjaFJlc3VsdChjb25zdCBQcm90b2Nv
bDo6TmV0d29yazo6RnJhbWVJZCYgZnJhbWVJZCwgY29uc3QgU3RyaW5nJiB1cmwsIGludCBtYXRj
aGVzQ291bnQpCiB7Ci0gICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OlNlYXJj
aFJlc3VsdDo6Y3JlYXRlKCkKKyAgICByZXR1cm4gUHJvdG9jb2w6OlBhZ2U6OlNlYXJjaFJlc3Vs
dDo6Y3JlYXRlKCkKICAgICAgICAgLnNldFVybCh1cmwpCiAgICAgICAgIC5zZXRGcmFtZUlkKGZy
YW1lSWQpCiAgICAgICAgIC5zZXRNYXRjaGVzQ291bnQobWF0Y2hlc0NvdW50KQogICAgICAgICAu
cmVsZWFzZSgpOwogfQogCi12b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6c2VhcmNoSW5SZXNvdXJj
ZXMoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IGJvb2wqIG9wdGlvbmFs
Q2FzZVNlbnNpdGl2ZSwgY29uc3QgYm9vbCogb3B0aW9uYWxJc1JlZ2V4LCBSZWZQdHI8SlNPTjo6
QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpTZWFyY2hSZXN1bHQ+PiYgcmVzdWx0
KQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlBh
Z2U6OlNlYXJjaFJlc3VsdD4+PiBJbnNwZWN0b3JQYWdlQWdlbnQ6OnNlYXJjaEluUmVzb3VyY2Vz
KGNvbnN0IFN0cmluZyYgdGV4dCwgT3B0aW9uYWw8Ym9vbD4mJiBjYXNlU2Vuc2l0aXZlLCBPcHRp
b25hbDxib29sPiYmIGlzUmVnZXgpCiB7Ci0gICAgcmVzdWx0ID0gSlNPTjo6QXJyYXlPZjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpQYWdlOjpTZWFyY2hSZXN1bHQ+OjpjcmVhdGUoKTsKKyAgICBhdXRv
IHJlc3VsdCA9IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlBhZ2U6OlNlYXJjaFJlc3VsdD46OmNy
ZWF0ZSgpOwogCi0gICAgYm9vbCBjYXNlU2Vuc2l0aXZlID0gb3B0aW9uYWxDYXNlU2Vuc2l0aXZl
ID8gKm9wdGlvbmFsQ2FzZVNlbnNpdGl2ZSA6IGZhbHNlOwotICAgIGJvb2wgaXNSZWdleCA9IG9w
dGlvbmFsSXNSZWdleCA/ICpvcHRpb25hbElzUmVnZXggOiBmYWxzZTsKLQotICAgIGF1dG8gc2Vh
cmNoU3RyaW5nVHlwZSA9IGlzUmVnZXggPyBDb250ZW50U2VhcmNoVXRpbGl0aWVzOjpTZWFyY2hT
dHJpbmdUeXBlOjpSZWdleCA6IENvbnRlbnRTZWFyY2hVdGlsaXRpZXM6OlNlYXJjaFN0cmluZ1R5
cGU6OkNvbnRhaW5zU3RyaW5nOwotICAgIGF1dG8gcmVnZXggPSBDb250ZW50U2VhcmNoVXRpbGl0
aWVzOjpjcmVhdGVSZWd1bGFyRXhwcmVzc2lvbkZvclNlYXJjaFN0cmluZyh0ZXh0LCBjYXNlU2Vu
c2l0aXZlLCBzZWFyY2hTdHJpbmdUeXBlKTsKKyAgICBhdXRvIHNlYXJjaFN0cmluZ1R5cGUgPSAo
aXNSZWdleCAmJiAqaXNSZWdleCkgPyBDb250ZW50U2VhcmNoVXRpbGl0aWVzOjpTZWFyY2hTdHJp
bmdUeXBlOjpSZWdleCA6IENvbnRlbnRTZWFyY2hVdGlsaXRpZXM6OlNlYXJjaFN0cmluZ1R5cGU6
OkNvbnRhaW5zU3RyaW5nOworICAgIGF1dG8gcmVnZXggPSBDb250ZW50U2VhcmNoVXRpbGl0aWVz
OjpjcmVhdGVSZWd1bGFyRXhwcmVzc2lvbkZvclNlYXJjaFN0cmluZyh0ZXh0LCBjYXNlU2Vuc2l0
aXZlICYmICpjYXNlU2Vuc2l0aXZlLCBzZWFyY2hTdHJpbmdUeXBlKTsKIAogICAgIGZvciAoRnJh
bWUqIGZyYW1lID0gJm1faW5zcGVjdGVkUGFnZS5tYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0g
ZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoKSkgewogICAgICAgICBmb3IgKGF1dG8qIGNhY2hl
ZFJlc291cmNlIDogY2FjaGVkUmVzb3VyY2VzRm9yRnJhbWUoZnJhbWUpKSB7CkBAIC03NzEsMjQg
Kzc3OSwzMCBAQCB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6c2VhcmNoSW5SZXNvdXJjZXMoRXJy
b3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHRleHQsIGNvbgogCiAgICAgaWYgKGF1dG8qIG5ldHdv
cmtBZ2VudCA9IG1faW5zdHJ1bWVudGluZ0FnZW50cy5lbmFibGVkTmV0d29ya0FnZW50KCkpCiAg
ICAgICAgIG5ldHdvcmtBZ2VudC0+c2VhcmNoT3RoZXJSZXF1ZXN0cyhyZWdleCwgcmVzdWx0KTsK
KworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKICNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKLXZv
aWQgSW5zcGVjdG9yUGFnZUFnZW50OjpzZXRTaG93UnVsZXJzKEVycm9yU3RyaW5nJiwgYm9vbCBz
aG93UnVsZXJzKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yUGFnZUFn
ZW50OjpzZXRTaG93UnVsZXJzKGJvb2wgc2hvd1J1bGVycykKIHsKICAgICBtX292ZXJsYXktPnNl
dFNob3dSdWxlcnMoc2hvd1J1bGVycyk7CisKKyAgICByZXR1cm4geyB9OwogfQogI2VuZGlmCiAK
LXZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpzZXRTaG93UGFpbnRSZWN0cyhFcnJvclN0cmluZyYs
IGJvb2wgc2hvdykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvclBhZ2VB
Z2VudDo6c2V0U2hvd1BhaW50UmVjdHMoYm9vbCBzaG93KQogewogICAgIG1fc2hvd1BhaW50UmVj
dHMgPSBzaG93OwogICAgIG1fY2xpZW50LT5zZXRTaG93UGFpbnRSZWN0cyhzaG93KTsKIAogICAg
IGlmIChtX2NsaWVudC0+b3ZlcnJpZGVzU2hvd1BhaW50UmVjdHMoKSkKLSAgICAgICAgcmV0dXJu
OworICAgICAgICByZXR1cm4geyB9OwogCiAgICAgbV9vdmVybGF5LT5zZXRTaG93UGFpbnRSZWN0
cyhzaG93KTsKKworICAgIHJldHVybiB7IH07CiB9CiAKIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50
Ojpkb21Db250ZW50RXZlbnRGaXJlZCgpCkBAIC04MTYsNyArODMwLDcgQEAgdm9pZCBJbnNwZWN0
b3JQYWdlQWdlbnQ6OmZyYW1lRGV0YWNoZWQoRnJhbWUmIGZyYW1lKQogICAgIG1faWRlbnRpZmll
clRvRnJhbWUucmVtb3ZlKGlkZW50aWZpZXIpOwogfQogCi1GcmFtZSogSW5zcGVjdG9yUGFnZUFn
ZW50OjpmcmFtZUZvcklkKGNvbnN0IFN0cmluZyYgZnJhbWVJZCkKK0ZyYW1lKiBJbnNwZWN0b3JQ
YWdlQWdlbnQ6OmZyYW1lRm9ySWQoY29uc3QgUHJvdG9jb2w6Ok5ldHdvcms6OkZyYW1lSWQmIGZy
YW1lSWQpCiB7CiAgICAgcmV0dXJuIGZyYW1lSWQuaXNFbXB0eSgpID8gbnVsbHB0ciA6IG1faWRl
bnRpZmllclRvRnJhbWUuZ2V0KGZyYW1lSWQpOwogfQpAQCAtODQxLDcgKzg1NSw3IEBAIFN0cmlu
ZyBJbnNwZWN0b3JQYWdlQWdlbnQ6OmxvYWRlcklkKERvY3VtZW50TG9hZGVyKiBsb2FkZXIpCiAg
ICAgfSkuaXRlcmF0b3ItPnZhbHVlOwogfQogCi1GcmFtZSogSW5zcGVjdG9yUGFnZUFnZW50Ojph
c3NlcnRGcmFtZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgZnJhbWVJ
ZCkKK0ZyYW1lKiBJbnNwZWN0b3JQYWdlQWdlbnQ6OmFzc2VydEZyYW1lKFByb3RvY29sOjpFcnJv
clN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFByb3RvY29sOjpOZXR3b3JrOjpGcmFtZUlkJiBm
cmFtZUlkKQogewogICAgIEZyYW1lKiBmcmFtZSA9IGZyYW1lRm9ySWQoZnJhbWVJZCk7CiAgICAg
aWYgKCFmcmFtZSkKQEAgLTg3Nyw3ICs4OTEsNyBAQCB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6
ZnJhbWVDbGVhcmVkU2NoZWR1bGVkTmF2aWdhdGlvbihGcmFtZSYgZnJhbWUpCiAjaWYgRU5BQkxF
KERBUktfTU9ERV9DU1MpIHx8IEhBVkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCiB2b2lkIEluc3Bl
Y3RvclBhZ2VBZ2VudDo6ZGVmYXVsdEFwcGVhcmFuY2VEaWRDaGFuZ2UoYm9vbCB1c2VEYXJrQXBw
ZWFyYW5jZSkKIHsKLSAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+ZGVmYXVsdEFwcGVhcmFuY2VE
aWRDaGFuZ2UodXNlRGFya0FwcGVhcmFuY2UgPyBJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpB
cHBlYXJhbmNlOjpEYXJrIDogSW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6QXBwZWFyYW5jZTo6
TGlnaHQpOworICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5kZWZhdWx0QXBwZWFyYW5jZURpZENo
YW5nZSh1c2VEYXJrQXBwZWFyYW5jZSA/IFByb3RvY29sOjpQYWdlOjpBcHBlYXJhbmNlOjpEYXJr
IDogUHJvdG9jb2w6OlBhZ2U6OkFwcGVhcmFuY2U6OkxpZ2h0KTsKIH0KICNlbmRpZgogCkBAIC05
MzMsMTEgKzk0NywxMSBAQCB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6ZGlkUmVjYWxjdWxhdGVT
dHlsZSgpCiAgICAgbV9vdmVybGF5LT51cGRhdGUoKTsKIH0KIAotUmVmPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OlBhZ2U6OkZyYW1lPiBJbnNwZWN0b3JQYWdlQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yRnJh
bWUoRnJhbWUqIGZyYW1lKQorUmVmPFByb3RvY29sOjpQYWdlOjpGcmFtZT4gSW5zcGVjdG9yUGFn
ZUFnZW50OjpidWlsZE9iamVjdEZvckZyYW1lKEZyYW1lKiBmcmFtZSkKIHsKICAgICBBU1NFUlRf
QVJHKGZyYW1lLCBmcmFtZSk7CiAKLSAgICBhdXRvIGZyYW1lT2JqZWN0ID0gSW5zcGVjdG9yOjpQ
cm90b2NvbDo6UGFnZTo6RnJhbWU6OmNyZWF0ZSgpCisgICAgYXV0byBmcmFtZU9iamVjdCA9IFBy
b3RvY29sOjpQYWdlOjpGcmFtZTo6Y3JlYXRlKCkKICAgICAgICAgLnNldElkKGZyYW1lSWQoZnJh
bWUpKQogICAgICAgICAuc2V0TG9hZGVySWQobG9hZGVySWQoZnJhbWUtPmxvYWRlcigpLmRvY3Vt
ZW50TG9hZGVyKCkpKQogICAgICAgICAuc2V0VXJsKGZyYW1lLT5kb2N1bWVudCgpLT51cmwoKS5z
dHJpbmcoKSkKQEAgLTk1NiwxOSArOTcwLDE5IEBAIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpQ
YWdlOjpGcmFtZT4gSW5zcGVjdG9yUGFnZUFnZW50OjpidWlsZE9iamVjdEZvckZyYW1lKEZyCiAg
ICAgcmV0dXJuIGZyYW1lT2JqZWN0OwogfQogCi1SZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFn
ZTo6RnJhbWVSZXNvdXJjZVRyZWU+IEluc3BlY3RvclBhZ2VBZ2VudDo6YnVpbGRPYmplY3RGb3JG
cmFtZVRyZWUoRnJhbWUqIGZyYW1lKQorUmVmPFByb3RvY29sOjpQYWdlOjpGcmFtZVJlc291cmNl
VHJlZT4gSW5zcGVjdG9yUGFnZUFnZW50OjpidWlsZE9iamVjdEZvckZyYW1lVHJlZShGcmFtZSog
ZnJhbWUpCiB7CiAgICAgQVNTRVJUX0FSRyhmcmFtZSwgZnJhbWUpOwogCi0gICAgUmVmPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkZyYW1lPiBmcmFtZU9iamVjdCA9IGJ1aWxkT2JqZWN0Rm9y
RnJhbWUoZnJhbWUpOwotICAgIGF1dG8gc3VicmVzb3VyY2VzID0gSlNPTjo6QXJyYXlPZjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpQYWdlOjpGcmFtZVJlc291cmNlPjo6Y3JlYXRlKCk7Ci0gICAgYXV0
byByZXN1bHQgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpGcmFtZVJlc291cmNlVHJlZTo6
Y3JlYXRlKCkKKyAgICBSZWY8UHJvdG9jb2w6OlBhZ2U6OkZyYW1lPiBmcmFtZU9iamVjdCA9IGJ1
aWxkT2JqZWN0Rm9yRnJhbWUoZnJhbWUpOworICAgIGF1dG8gc3VicmVzb3VyY2VzID0gSlNPTjo6
QXJyYXlPZjxQcm90b2NvbDo6UGFnZTo6RnJhbWVSZXNvdXJjZT46OmNyZWF0ZSgpOworICAgIGF1
dG8gcmVzdWx0ID0gUHJvdG9jb2w6OlBhZ2U6OkZyYW1lUmVzb3VyY2VUcmVlOjpjcmVhdGUoKQog
ICAgICAgICAuc2V0RnJhbWUoV1RGTW92ZShmcmFtZU9iamVjdCkpCiAgICAgICAgIC5zZXRSZXNv
dXJjZXMoc3VicmVzb3VyY2VzLmNvcHlSZWYoKSkKICAgICAgICAgLnJlbGVhc2UoKTsKIAogICAg
IGZvciAoYXV0byogY2FjaGVkUmVzb3VyY2UgOiBjYWNoZWRSZXNvdXJjZXNGb3JGcmFtZShmcmFt
ZSkpIHsKLSAgICAgICAgYXV0byByZXNvdXJjZU9iamVjdCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlBhZ2U6OkZyYW1lUmVzb3VyY2U6OmNyZWF0ZSgpCisgICAgICAgIGF1dG8gcmVzb3VyY2VPYmpl
Y3QgPSBQcm90b2NvbDo6UGFnZTo6RnJhbWVSZXNvdXJjZTo6Y3JlYXRlKCkKICAgICAgICAgICAg
IC5zZXRVcmwoY2FjaGVkUmVzb3VyY2UtPnVybCgpLnN0cmluZygpKQogICAgICAgICAgICAgLnNl
dFR5cGUoY2FjaGVkUmVzb3VyY2VUeXBlSlNPTigqY2FjaGVkUmVzb3VyY2UpKQogICAgICAgICAg
ICAgLnNldE1pbWVUeXBlKGNhY2hlZFJlc291cmNlLT5yZXNwb25zZSgpLm1pbWVUeXBlKCkpCkBA
IC05ODYsMjEgKzEwMDAsMjEgQEAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkZyYW1l
UmVzb3VyY2VUcmVlPiBJbnNwZWN0b3JQYWdlQWdlbnQ6OmJ1aWxkT2JqZWMKICAgICAgICAgc3Vi
cmVzb3VyY2VzLT5hZGRJdGVtKFdURk1vdmUocmVzb3VyY2VPYmplY3QpKTsKICAgICB9CiAKLSAg
ICBSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpGcmFtZVJl
c291cmNlVHJlZT4+IGNoaWxkcmVuQXJyYXk7CisgICAgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJv
dG9jb2w6OlBhZ2U6OkZyYW1lUmVzb3VyY2VUcmVlPj4gY2hpbGRyZW5BcnJheTsKICAgICBmb3Ig
KEZyYW1lKiBjaGlsZCA9IGZyYW1lLT50cmVlKCkuZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQg
PSBjaGlsZC0+dHJlZSgpLm5leHRTaWJsaW5nKCkpIHsKICAgICAgICAgaWYgKCFjaGlsZHJlbkFy
cmF5KSB7Ci0gICAgICAgICAgICBjaGlsZHJlbkFycmF5ID0gSlNPTjo6QXJyYXlPZjxJbnNwZWN0
b3I6OlByb3RvY29sOjpQYWdlOjpGcmFtZVJlc291cmNlVHJlZT46OmNyZWF0ZSgpOwotICAgICAg
ICAgICAgcmVzdWx0LT5zZXRDaGlsZEZyYW1lcyhjaGlsZHJlbkFycmF5KTsKKyAgICAgICAgICAg
IGNoaWxkcmVuQXJyYXkgPSBKU09OOjpBcnJheU9mPFByb3RvY29sOjpQYWdlOjpGcmFtZVJlc291
cmNlVHJlZT46OmNyZWF0ZSgpOworICAgICAgICAgICAgcmVzdWx0LT5zZXRDaGlsZEZyYW1lcygq
Y2hpbGRyZW5BcnJheSk7CiAgICAgICAgIH0KICAgICAgICAgY2hpbGRyZW5BcnJheS0+YWRkSXRl
bShidWlsZE9iamVjdEZvckZyYW1lVHJlZShjaGlsZCkpOwogICAgIH0KICAgICByZXR1cm4gcmVz
dWx0OwogfQogCi12b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6c2V0RW11bGF0ZWRNZWRpYShFcnJv
clN0cmluZyYsIGNvbnN0IFN0cmluZyYgbWVkaWEpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2
b2lkPiBJbnNwZWN0b3JQYWdlQWdlbnQ6OnNldEVtdWxhdGVkTWVkaWEoY29uc3QgU3RyaW5nJiBt
ZWRpYSkKIHsKICAgICBpZiAobWVkaWEgPT0gbV9lbXVsYXRlZE1lZGlhKQotICAgICAgICByZXR1
cm47CisgICAgICAgIHJldHVybiB7IH07CiAKICAgICBtX2VtdWxhdGVkTWVkaWEgPSBtZWRpYTsK
IApAQCAtMTAwOSwyMSArMTAyMywzNCBAQCB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6c2V0RW11
bGF0ZWRNZWRpYShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgbWVkaWEpCiAKICAgICBhdXRv
IGRvY3VtZW50ID0gbWFrZVJlZlB0cihtX2luc3BlY3RlZFBhZ2UubWFpbkZyYW1lKCkuZG9jdW1l
bnQoKSk7CiAgICAgaWYgKCFkb2N1bWVudCkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1
cm4geyB9OwogCiAgICAgZG9jdW1lbnQtPnVwZGF0ZUxheW91dCgpOwogICAgIGRvY3VtZW50LT5l
dmFsdWF0ZU1lZGlhUXVlcmllc0FuZFJlcG9ydENoYW5nZXMoKTsKKworICAgIHJldHVybiB7IH07
CiB9CiAKICNpZiBFTkFCTEUoREFSS19NT0RFX0NTUykgfHwgSEFWRShPU19EQVJLX01PREVfU1VQ
UE9SVCkKLXZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpzZXRGb3JjZWRBcHBlYXJhbmNlKEVycm9y
U3RyaW5nJiwgY29uc3QgU3RyaW5nJiBhcHBlYXJhbmNlKQorUHJvdG9jb2w6OkVycm9yU3RyaW5n
T3I8dm9pZD4gSW5zcGVjdG9yUGFnZUFnZW50OjpzZXRGb3JjZWRBcHBlYXJhbmNlKE9wdGlvbmFs
PFByb3RvY29sOjpQYWdlOjpBcHBlYXJhbmNlPiYmIGFwcGVhcmFuY2UpCiB7Ci0gICAgaWYgKGFw
cGVhcmFuY2UgPT0gIkxpZ2h0Il9zKQotICAgICAgICBtX2luc3BlY3RlZFBhZ2Uuc2V0VXNlRGFy
a0FwcGVhcmFuY2VPdmVycmlkZShmYWxzZSk7Ci0gICAgZWxzZSBpZiAoYXBwZWFyYW5jZSA9PSAi
RGFyayJfcykKLSAgICAgICAgbV9pbnNwZWN0ZWRQYWdlLnNldFVzZURhcmtBcHBlYXJhbmNlT3Zl
cnJpZGUodHJ1ZSk7Ci0gICAgZWxzZQorICAgIGlmICghYXBwZWFyYW5jZSkgewogICAgICAgICBt
X2luc3BlY3RlZFBhZ2Uuc2V0VXNlRGFya0FwcGVhcmFuY2VPdmVycmlkZShXVEY6Om51bGxvcHQp
OworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIHN3aXRjaCAoKmFwcGVhcmFuY2Up
IHsKKyAgICBjYXNlIFByb3RvY29sOjpQYWdlOjpBcHBlYXJhbmNlOjpMaWdodDoKKyAgICAgICAg
bV9pbnNwZWN0ZWRQYWdlLnNldFVzZURhcmtBcHBlYXJhbmNlT3ZlcnJpZGUoZmFsc2UpOworICAg
ICAgICByZXR1cm4geyB9OworCisgICAgY2FzZSBQcm90b2NvbDo6UGFnZTo6QXBwZWFyYW5jZTo6
RGFyazoKKyAgICAgICAgbV9pbnNwZWN0ZWRQYWdlLnNldFVzZURhcmtBcHBlYXJhbmNlT3ZlcnJp
ZGUodHJ1ZSk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgcmV0dXJuIHsgfTsKIH0KICNlbmRpZgogCkBAIC0xMDM5LDUxICsxMDY2
LDQ3IEBAIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjphcHBseUVtdWxhdGVkTWVkaWEoU3RyaW5n
JiBtZWRpYSkKICAgICAgICAgbWVkaWEgPSBtX2VtdWxhdGVkTWVkaWE7CiB9CiAKLXZvaWQgSW5z
cGVjdG9yUGFnZUFnZW50OjpzbmFwc2hvdE5vZGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBp
bnQgbm9kZUlkLCBTdHJpbmcqIG91dERhdGFVUkwpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxT
dHJpbmc+IEluc3BlY3RvclBhZ2VBZ2VudDo6c25hcHNob3ROb2RlKFByb3RvY29sOjpET006Ok5v
ZGVJZCBub2RlSWQpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOwor
CiAgICAgSW5zcGVjdG9yRE9NQWdlbnQqIGRvbUFnZW50ID0gbV9pbnN0cnVtZW50aW5nQWdlbnRz
LnBlcnNpc3RlbnRET01BZ2VudCgpOwogICAgIEFTU0VSVChkb21BZ2VudCk7CiAgICAgTm9kZSog
bm9kZSA9IGRvbUFnZW50LT5hc3NlcnROb2RlKGVycm9yU3RyaW5nLCBub2RlSWQpOwogICAgIGlm
ICghbm9kZSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQo
ZXJyb3JTdHJpbmcpOwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBzbmFwc2hv
dCA9IFdlYkNvcmU6OnNuYXBzaG90Tm9kZShtX2luc3BlY3RlZFBhZ2UubWFpbkZyYW1lKCksICpu
b2RlKTsKLSAgICBpZiAoIXNuYXBzaG90KSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIkNvdWxk
IG5vdCBjYXB0dXJlIHNuYXBzaG90Il9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlm
ICghc25hcHNob3QpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiQ291bGQgbm90IGNh
cHR1cmUgc25hcHNob3QiX3MpOwogCi0gICAgKm91dERhdGFVUkwgPSBzbmFwc2hvdC0+dG9EYXRh
VVJMKCJpbWFnZS9wbmciX3MsIFdURjo6bnVsbG9wdCwgUHJlc2VydmVSZXNvbHV0aW9uOjpZZXMp
OworICAgIHJldHVybiBzbmFwc2hvdC0+dG9EYXRhVVJMKCJpbWFnZS9wbmciX3MsIFdURjo6bnVs
bG9wdCwgUHJlc2VydmVSZXNvbHV0aW9uOjpZZXMpOwogfQogCi12b2lkIEluc3BlY3RvclBhZ2VB
Z2VudDo6c25hcHNob3RSZWN0KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IHgsIGludCB5
LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGNvbnN0IFN0cmluZyYgY29vcmRpbmF0ZVN5c3RlbSwg
U3RyaW5nKiBvdXREYXRhVVJMKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8U3RyaW5nPiBJbnNw
ZWN0b3JQYWdlQWdlbnQ6OnNuYXBzaG90UmVjdChpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50
IGhlaWdodCwgUHJvdG9jb2w6OlBhZ2U6OkNvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3Rl
bSkKIHsKICAgICBTbmFwc2hvdE9wdGlvbnMgb3B0aW9ucyA9IFNuYXBzaG90T3B0aW9uc05vbmU7
Ci0gICAgaWYgKGNvb3JkaW5hdGVTeXN0ZW0gPT0gIlZpZXdwb3J0IikKKyAgICBpZiAoY29vcmRp
bmF0ZVN5c3RlbSA9PSBQcm90b2NvbDo6UGFnZTo6Q29vcmRpbmF0ZVN5c3RlbTo6Vmlld3BvcnQp
CiAgICAgICAgIG9wdGlvbnMgfD0gU25hcHNob3RPcHRpb25zSW5WaWV3Q29vcmRpbmF0ZXM7CiAK
ICAgICBJbnRSZWN0IHJlY3RhbmdsZSh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKICAgICBzdGQ6OnVu
aXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IHNuYXBzaG90ID0gc25hcHNob3RGcmFtZVJlY3QobV9pbnNw
ZWN0ZWRQYWdlLm1haW5GcmFtZSgpLCByZWN0YW5nbGUsIG9wdGlvbnMpOwogCi0gICAgaWYgKCFz
bmFwc2hvdCkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJDb3VsZCBub3QgY2FwdHVyZSBzbmFw
c2hvdCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoIXNuYXBzaG90KQorICAg
ICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkNvdWxkIG5vdCBjYXB0dXJlIHNuYXBzaG90Il9z
KTsKIAotICAgICpvdXREYXRhVVJMID0gc25hcHNob3QtPnRvRGF0YVVSTCgiaW1hZ2UvcG5nIl9z
LCBXVEY6Om51bGxvcHQsIFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKTsKKyAgICByZXR1cm4gc25h
cHNob3QtPnRvRGF0YVVSTCgiaW1hZ2UvcG5nIl9zLCBXVEY6Om51bGxvcHQsIFByZXNlcnZlUmVz
b2x1dGlvbjo6WWVzKTsKIH0KIAogI2lmIEVOQUJMRShXRUJfQVJDSElWRSkgJiYgVVNFKENGKQot
dm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmFyY2hpdmUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5n
LCBTdHJpbmcqIGRhdGEpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxTdHJpbmc+IEluc3BlY3Rv
clBhZ2VBZ2VudDo6YXJjaGl2ZSgpCiB7CiAgICAgYXV0byBhcmNoaXZlID0gTGVnYWN5V2ViQXJj
aGl2ZTo6Y3JlYXRlKG1faW5zcGVjdGVkUGFnZS5tYWluRnJhbWUoKSk7Ci0gICAgaWYgKCFhcmNo
aXZlKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIkNvdWxkIG5vdCBjcmVhdGUgd2ViIGFyY2hp
dmUgZm9yIG1haW4gZnJhbWUiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKCFh
cmNoaXZlKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkNvdWxkIG5vdCBjcmVhdGUg
d2ViIGFyY2hpdmUgZm9yIG1haW4gZnJhbWUiX3MpOwogCiAgICAgUmV0YWluUHRyPENGRGF0YVJl
Zj4gYnVmZmVyID0gYXJjaGl2ZS0+cmF3RGF0YVJlcHJlc2VudGF0aW9uKCk7Ci0gICAgKmRhdGEg
PSBiYXNlNjRFbmNvZGUoQ0ZEYXRhR2V0Qnl0ZVB0cihidWZmZXIuZ2V0KCkpLCBDRkRhdGFHZXRM
ZW5ndGgoYnVmZmVyLmdldCgpKSk7CisgICAgcmV0dXJuIGJhc2U2NEVuY29kZShDRkRhdGFHZXRC
eXRlUHRyKGJ1ZmZlci5nZXQoKSksIENGRGF0YUdldExlbmd0aChidWZmZXIuZ2V0KCkpKTsKIH0K
ICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0lu
c3BlY3RvclBhZ2VBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNw
ZWN0b3JQYWdlQWdlbnQuaAppbmRleCAzYmNkMDQ4N2NmYzg3NjZiYWEwMWM3ODA0MTczYTE1NzQ3
YjQ3YjJkLi5kMmIwNjVlMTM2NTFmYWZlNzQ3MzI1ZjAyZTc3MDFmYmYxZThlNDVlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclBhZ2VBZ2VudC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUGFnZUFnZW50
LmgKQEAgLTUxLDE0ICs1MSwxMiBAQCBjbGFzcyBQYWdlOwogY2xhc3MgUmVuZGVyT2JqZWN0Owog
Y2xhc3MgU2hhcmVkQnVmZmVyOwogCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQogY2xh
c3MgSW5zcGVjdG9yUGFnZUFnZW50IGZpbmFsIDogcHVibGljIEluc3BlY3RvckFnZW50QmFzZSwg
cHVibGljIEluc3BlY3Rvcjo6UGFnZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7CiAgICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoSW5zcGVjdG9yUGFnZUFnZW50KTsKICAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBJbnNwZWN0b3JQYWdlQWdlbnQoUGFnZUFnZW50Q29u
dGV4dCYsIEluc3BlY3RvckNsaWVudCosIEluc3BlY3Rvck92ZXJsYXkqKTsKLSAgICB+SW5zcGVj
dG9yUGFnZUFnZW50KCkgb3ZlcnJpZGU7CisgICAgfkluc3BlY3RvclBhZ2VBZ2VudCgpOwogCiAg
ICAgZW51bSBSZXNvdXJjZVR5cGUgewogICAgICAgICBEb2N1bWVudFJlc291cmNlLApAQCAtNzks
NyArNzcsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgYm9vbCBzaGFyZWRCdWZmZXJDb250ZW50
KFJlZlB0cjxTaGFyZWRCdWZmZXI+JiYsIGNvbnN0IFN0cmluZyYgdGV4dEVuY29kaW5nTmFtZSwg
Ym9vbCB3aXRoQmFzZTY0RW5jb2RlLCBTdHJpbmcqIHJlc3VsdCk7CiAgICAgc3RhdGljIFZlY3Rv
cjxDYWNoZWRSZXNvdXJjZSo+IGNhY2hlZFJlc291cmNlc0ZvckZyYW1lKEZyYW1lKik7Ci0gICAg
c3RhdGljIHZvaWQgcmVzb3VyY2VDb250ZW50KEVycm9yU3RyaW5nJiwgRnJhbWUqLCBjb25zdCBV
UkwmLCBTdHJpbmcqIHJlc3VsdCwgYm9vbCogYmFzZTY0RW5jb2RlZCk7CisgICAgc3RhdGljIHZv
aWQgcmVzb3VyY2VDb250ZW50KEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nJiwgRnJh
bWUqLCBjb25zdCBVUkwmLCBTdHJpbmcqIHJlc3VsdCwgYm9vbCogYmFzZTY0RW5jb2RlZCk7CiAg
ICAgc3RhdGljIFN0cmluZyBzb3VyY2VNYXBVUkxGb3JSZXNvdXJjZShDYWNoZWRSZXNvdXJjZSop
OwogICAgIHN0YXRpYyBDYWNoZWRSZXNvdXJjZSogY2FjaGVkUmVzb3VyY2UoRnJhbWUqLCBjb25z
dCBVUkwmKTsKICAgICBzdGF0aWMgSW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6UmVzb3VyY2VU
eXBlIHJlc291cmNlVHlwZUpTT04oUmVzb3VyY2VUeXBlKTsKQEAgLTg3LDM5ICs4NSwzOSBAQCBw
dWJsaWM6CiAgICAgc3RhdGljIFJlc291cmNlVHlwZSBpbnNwZWN0b3JSZXNvdXJjZVR5cGUoY29u
c3QgQ2FjaGVkUmVzb3VyY2UmKTsKICAgICBzdGF0aWMgSW5zcGVjdG9yOjpQcm90b2NvbDo6UGFn
ZTo6UmVzb3VyY2VUeXBlIGNhY2hlZFJlc291cmNlVHlwZUpTT04oY29uc3QgQ2FjaGVkUmVzb3Vy
Y2UmKTsKICAgICBzdGF0aWMgRnJhbWUqIGZpbmRGcmFtZVdpdGhTZWN1cml0eU9yaWdpbihQYWdl
JiwgY29uc3QgU3RyaW5nJiBvcmlnaW5SYXdTdHJpbmcpOwotICAgIHN0YXRpYyBEb2N1bWVudExv
YWRlciogYXNzZXJ0RG9jdW1lbnRMb2FkZXIoRXJyb3JTdHJpbmcmLCBGcmFtZSopOworICAgIHN0
YXRpYyBEb2N1bWVudExvYWRlciogYXNzZXJ0RG9jdW1lbnRMb2FkZXIoSW5zcGVjdG9yOjpQcm90
b2NvbDo6RXJyb3JTdHJpbmcmLCBGcmFtZSopOwogCiAgICAgLy8gSW5zcGVjdG9yQWdlbnRCYXNl
Ci0gICAgdm9pZCBkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9udGVu
ZFJvdXRlciosIEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXIqKSBvdmVycmlkZTsKLSAgICB2
b2lkIHdpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlzY29ubmVjdFJl
YXNvbikgb3ZlcnJpZGU7CisgICAgdm9pZCBkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5z
cGVjdG9yOjpGcm9udGVuZFJvdXRlciosIEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXIqKTsK
KyAgICB2b2lkIHdpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlzY29u
bmVjdFJlYXNvbik7CiAKICAgICAvLyBQYWdlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyCi0gICAg
dm9pZCBlbmFibGUoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2b2lkIGRpc2FibGUoRXJy
b3JTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2b2lkIHJlbG9hZChFcnJvclN0cmluZyYsIGNvbnN0
IGJvb2wqIG9wdGlvbmFsUmVsb2FkRnJvbU9yaWdpbiwgY29uc3QgYm9vbCogb3B0aW9uYWxSZXZh
bGlkYXRlQWxsUmVzb3VyY2VzKSBvdmVycmlkZTsKLSAgICB2b2lkIG5hdmlnYXRlKEVycm9yU3Ry
aW5nJiwgY29uc3QgU3RyaW5nJiB1cmwpIG92ZXJyaWRlOwotICAgIHZvaWQgb3ZlcnJpZGVVc2Vy
QWdlbnQoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcqIHZhbHVlKSBvdmVycmlkZTsKLSAgICB2
b2lkIG92ZXJyaWRlU2V0dGluZyhFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgc2V0dGluZywg
Y29uc3QgYm9vbCogdmFsdWUpIG92ZXJyaWRlOwotICAgIHZvaWQgZ2V0Q29va2llcyhFcnJvclN0
cmluZyYsIFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkNv
b2tpZT4+JiBjb29raWVzKSBvdmVycmlkZTsKLSAgICB2b2lkIHNldENvb2tpZShFcnJvclN0cmlu
ZyYsIGNvbnN0IEpTT046Ok9iamVjdCYgY29va2llT2JqZWN0KSBvdmVycmlkZTsKLSAgICB2b2lk
IGRlbGV0ZUNvb2tpZShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgY29va2llTmFtZSwgY29u
c3QgU3RyaW5nJiB1cmwpIG92ZXJyaWRlOwotICAgIHZvaWQgZ2V0UmVzb3VyY2VUcmVlKEVycm9y
U3RyaW5nJiwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkZyYW1lUmVzb3VyY2VU
cmVlPiYpIG92ZXJyaWRlOwotICAgIHZvaWQgZ2V0UmVzb3VyY2VDb250ZW50KEVycm9yU3RyaW5n
JiwgY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBjb25zdCBTdHJpbmcmIHVybCwgU3RyaW5nKiBjb250
ZW50LCBib29sKiBiYXNlNjRFbmNvZGVkKSBvdmVycmlkZTsKLSAgICB2b2lkIHNldEJvb3RzdHJh
cFNjcmlwdChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxTb3VyY2UpIGZpbmFs
OwotICAgIHZvaWQgc2VhcmNoSW5SZXNvdXJjZShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYg
ZnJhbWVJZCwgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgcXVlcnksIGNvbnN0IGJv
b2wqIG9wdGlvbmFsQ2FzZVNlbnNpdGl2ZSwgY29uc3QgYm9vbCogb3B0aW9uYWxJc1JlZ2V4LCBj
b25zdCBTdHJpbmcqIG9wdGlvbmFsUmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpHZW5lcmljVHlwZXM6OlNlYXJjaE1hdGNoPj4mKSBvdmVycmlkZTsK
LSAgICB2b2lkIHNlYXJjaEluUmVzb3VyY2VzKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwg
Y29uc3QgYm9vbCogY2FzZVNlbnNpdGl2ZSwgY29uc3QgYm9vbCogaXNSZWdleCwgUmVmUHRyPEpT
T046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6U2VhcmNoUmVzdWx0Pj4mKSBv
dmVycmlkZTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGVu
YWJsZSgpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZGlz
YWJsZSgpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gcmVs
b2FkKE9wdGlvbmFsPGJvb2w+JiYgaWdub3JlQ2FjaGUsIE9wdGlvbmFsPGJvb2w+JiYgcmV2YWxp
ZGF0ZUFsbFJlc291cmNlcyk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdP
cjx2b2lkPiBuYXZpZ2F0ZShjb25zdCBTdHJpbmcmIHVybCk7CisgICAgSW5zcGVjdG9yOjpQcm90
b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBvdmVycmlkZVVzZXJBZ2VudChjb25zdCBTdHJpbmcm
KTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IG92ZXJyaWRl
U2V0dGluZyhJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpTZXR0aW5nLCBPcHRpb25hbDxib29s
PiYmIHZhbHVlKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxK
U09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkNvb2tpZT4+PiBnZXRDb29r
aWVzKCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzZXRD
b29raWUoUmVmPEpTT046Ok9iamVjdD4mJik7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJy
b3JTdHJpbmdPcjx2b2lkPiBkZWxldGVDb29raWUoY29uc3QgU3RyaW5nJiBjb29raWVOYW1lLCBj
b25zdCBTdHJpbmcmIHVybCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdP
cjxSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6RnJhbWVSZXNvdXJjZVRyZWU+PiBnZXRS
ZXNvdXJjZVRyZWUoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHN0
ZDo6dHVwbGU8U3RyaW5nLCBib29sIC8qIGJhc2U2NEVuY29kZWQgKi8+PiBnZXRSZXNvdXJjZUNv
bnRlbnQoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6RnJhbWVJZCYsIGNvbnN0
IFN0cmluZyYgdXJsKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZv
aWQ+IHNldEJvb3RzdHJhcFNjcmlwdChjb25zdCBTdHJpbmcmIHNvdXJjZSk7CisgICAgSW5zcGVj
dG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6
OlByb3RvY29sOjpHZW5lcmljVHlwZXM6OlNlYXJjaE1hdGNoPj4+IHNlYXJjaEluUmVzb3VyY2Uo
Y29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6RnJhbWVJZCYsIGNvbnN0IFN0cmlu
ZyYgdXJsLCBjb25zdCBTdHJpbmcmIHF1ZXJ5LCBPcHRpb25hbDxib29sPiYmIGNhc2VTZW5zaXRp
dmUsIE9wdGlvbmFsPGJvb2w+JiYgaXNSZWdleCwgY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6
TmV0d29yazo6UmVxdWVzdElkJik7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJp
bmdPcjxSZWY8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpTZWFyY2hS
ZXN1bHQ+Pj4gc2VhcmNoSW5SZXNvdXJjZXMoY29uc3QgU3RyaW5nJiwgT3B0aW9uYWw8Ym9vbD4m
JiBjYXNlU2Vuc2l0aXZlLCBPcHRpb25hbDxib29sPiYmIGlzUmVnZXgpOwogI2lmICFQTEFURk9S
TShJT1NfRkFNSUxZKQotICAgIHZvaWQgc2V0U2hvd1J1bGVycyhFcnJvclN0cmluZyYsIGJvb2wp
IG92ZXJyaWRlOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4g
c2V0U2hvd1J1bGVycyhib29sKTsKICNlbmRpZgotICAgIHZvaWQgc2V0U2hvd1BhaW50UmVjdHMo
RXJyb3JTdHJpbmcmLCBib29sIHNob3cpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0RW11bGF0ZWRN
ZWRpYShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlOworICAgIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc2V0U2hvd1BhaW50UmVjdHMoYm9vbCk7
CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzZXRFbXVsYXRl
ZE1lZGlhKGNvbnN0IFN0cmluZyYpOwogI2lmIEVOQUJMRShEQVJLX01PREVfQ1NTKSB8fCBIQVZF
KE9TX0RBUktfTU9ERV9TVVBQT1JUKQotICAgIHZvaWQgc2V0Rm9yY2VkQXBwZWFyYW5jZShFcnJv
clN0cmluZyYsIGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlOworICAgIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc2V0Rm9yY2VkQXBwZWFyYW5jZShPcHRpb25hbDxJbnNw
ZWN0b3I6OlByb3RvY29sOjpQYWdlOjpBcHBlYXJhbmNlPiYmKTsKICNlbmRpZgotICAgIHZvaWQg
c25hcHNob3ROb2RlKEVycm9yU3RyaW5nJiwgaW50IG5vZGVJZCwgU3RyaW5nKiBvdXREYXRhVVJM
KSBvdmVycmlkZTsKLSAgICB2b2lkIHNuYXBzaG90UmVjdChFcnJvclN0cmluZyYsIGludCB4LCBp
bnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBjb25zdCBTdHJpbmcmIGNvb3JkaW5hdGVTeXN0
ZW0sIFN0cmluZyogb3V0RGF0YVVSTCkgb3ZlcnJpZGU7CisgICAgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6RXJyb3JTdHJpbmdPcjxTdHJpbmc+IHNuYXBzaG90Tm9kZShJbnNwZWN0b3I6OlByb3RvY29s
OjpET006Ok5vZGVJZCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxT
dHJpbmc+IHNuYXBzaG90UmVjdChpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCwg
SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6Q29vcmRpbmF0ZVN5c3RlbSk7CiAjaWYgRU5BQkxF
KFdFQl9BUkNISVZFKSAmJiBVU0UoQ0YpCi0gICAgdm9pZCBhcmNoaXZlKEVycm9yU3RyaW5nJiwg
U3RyaW5nKiBkYXRhKSBvdmVycmlkZTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0
cmluZ09yPFN0cmluZz4gYXJjaGl2ZSgpOwogI2VuZGlmCiAKICAgICAvLyBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb24KQEAgLTE0MywxMCArMTQxLDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIGRpZFNj
cm9sbCgpOwogICAgIHZvaWQgZGlkUmVjYWxjdWxhdGVTdHlsZSgpOwogCi0gICAgRnJhbWUqIGZy
YW1lRm9ySWQoY29uc3QgU3RyaW5nJiBmcmFtZUlkKTsKKyAgICBGcmFtZSogZnJhbWVGb3JJZChj
b25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpGcmFtZUlkJik7CiAgICAgV0VCQ09S
RV9FWFBPUlQgU3RyaW5nIGZyYW1lSWQoRnJhbWUqKTsKICAgICBTdHJpbmcgbG9hZGVySWQoRG9j
dW1lbnRMb2FkZXIqKTsKLSAgICBGcmFtZSogYXNzZXJ0RnJhbWUoRXJyb3JTdHJpbmcmLCBjb25z
dCBTdHJpbmcmIGZyYW1lSWQpOworICAgIEZyYW1lKiBhc3NlcnRGcmFtZShJbnNwZWN0b3I6OlBy
b3RvY29sOjpFcnJvclN0cmluZyYsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6
OkZyYW1lSWQmKTsKIAogcHJpdmF0ZToKICAgICBkb3VibGUgdGltZXN0YW1wKCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclRpbWVsaW5lQWdl
bnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JUaW1lbGlu
ZUFnZW50LmNwcAppbmRleCAwYjQ2NjA2OGQ5MGZlMTQ5NWE4NDI5Yjc2MzlmMzEzNWJkNDMzZjQ4
Li4wZGY5NTA1NzAzZDBiMzgxODExMjVlNTMwMWUyMDQxMTI3ZmMzYjU1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclRpbWVsaW5lQWdlbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yVGltZWxpbmVB
Z2VudC5jcHAKQEAgLTEwMiw4MCArMTAyLDgyIEBAIHZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2Vu
dDo6ZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRSb3V0CiAK
IHZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tl
bmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKQogewotICAgIEVycm9yU3RyaW5nIGlnbm9y
ZWQ7Ci0gICAgZGlzYWJsZShpZ25vcmVkKTsKKyAgICBkaXNhYmxlKCk7CiB9CiAKLXZvaWQgSW5z
cGVjdG9yVGltZWxpbmVBZ2VudDo6ZW5hYmxlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZykKK1By
b3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OmVuYWJs
ZSgpCiB7Ci0gICAgaWYgKG1faW5zdHJ1bWVudGluZ0FnZW50cy5lbmFibGVkVGltZWxpbmVBZ2Vu
dCgpID09IHRoaXMpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiVGltZWxpbmUgZG9tYWluIGFs
cmVhZHkgZW5hYmxlZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAobV9pbnN0
cnVtZW50aW5nQWdlbnRzLmVuYWJsZWRUaW1lbGluZUFnZW50KCkgPT0gdGhpcykKKyAgICAgICAg
cmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJUaW1lbGluZSBkb21haW4gYWxyZWFkeSBlbmFibGVkIl9z
KTsKIAogICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy5zZXRFbmFibGVkVGltZWxpbmVBZ2VudCh0
aGlzKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2Vu
dDo6ZGlzYWJsZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCitQcm90b2NvbDo6RXJyb3JTdHJp
bmdPcjx2b2lkPiBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpkaXNhYmxlKCkKIHsKLSAgICBpZiAo
bV9pbnN0cnVtZW50aW5nQWdlbnRzLmVuYWJsZWRUaW1lbGluZUFnZW50KCkgIT0gdGhpcykgewot
ICAgICAgICBlcnJvclN0cmluZyA9ICJUaW1lbGluZSBkb21haW4gYWxyZWFkeSBkaXNhYmxlZCJf
czsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAobV9pbnN0cnVtZW50aW5nQWdlbnRz
LmVuYWJsZWRUaW1lbGluZUFnZW50KCkgIT0gdGhpcykKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4
cGVjdGVkKCJUaW1lbGluZSBkb21haW4gYWxyZWFkeSBkaXNhYmxlZCJfcyk7CiAKICAgICBtX2lu
c3RydW1lbnRpbmdBZ2VudHMuc2V0RW5hYmxlZFRpbWVsaW5lQWdlbnQobnVsbHB0cik7CiAKLSAg
ICBFcnJvclN0cmluZyBpZ25vcmVkOwotICAgIHN0b3AoaWdub3JlZCk7CisgICAgc3RvcCgpOwog
CiAgICAgbV9hdXRvQ2FwdHVyZUVuYWJsZWQgPSBmYWxzZTsKICAgICBtX2luc3RydW1lbnRzLmNs
ZWFyKCk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvclRpbWVsaW5lQWdl
bnQ6OnN0YXJ0KEVycm9yU3RyaW5nJiwgY29uc3QgaW50KiBtYXhDYWxsU3RhY2tEZXB0aCkKK1By
b3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OnN0YXJ0
KE9wdGlvbmFsPGludD4mJiBtYXhDYWxsU3RhY2tEZXB0aCkKIHsKICAgICBtX3RyYWNraW5nRnJv
bUZyb250ZW5kID0gdHJ1ZTsKIAotICAgIGludGVybmFsU3RhcnQobWF4Q2FsbFN0YWNrRGVwdGgp
OworICAgIGludGVybmFsU3RhcnQoV1RGTW92ZShtYXhDYWxsU3RhY2tEZXB0aCkpOworCisgICAg
cmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpzdG9wKEVycm9y
U3RyaW5nJikKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvclRpbWVsaW5l
QWdlbnQ6OnN0b3AoKQogewogICAgIGludGVybmFsU3RvcCgpOwogCiAgICAgbV90cmFja2luZ0Zy
b21Gcm9udGVuZCA9IGZhbHNlOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0
b3JUaW1lbGluZUFnZW50OjpzZXRBdXRvQ2FwdHVyZUVuYWJsZWQoRXJyb3JTdHJpbmcmLCBib29s
IGVuYWJsZWQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JUaW1lbGlu
ZUFnZW50OjpzZXRBdXRvQ2FwdHVyZUVuYWJsZWQoYm9vbCBlbmFibGVkKQogewogICAgIG1fYXV0
b0NhcHR1cmVFbmFibGVkID0gZW5hYmxlZDsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQg
SW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6c2V0SW5zdHJ1bWVudHMoRXJyb3JTdHJpbmcmIGVycm9y
U3RyaW5nLCBjb25zdCBKU09OOjpBcnJheSYgaW5zdHJ1bWVudHMpCitQcm90b2NvbDo6RXJyb3JT
dHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpzZXRJbnN0cnVtZW50cyhSZWY8
SlNPTjo6QXJyYXk+JiYgaW5zdHJ1bWVudHMpCiB7CiAgICAgVmVjdG9yPFByb3RvY29sOjpUaW1l
bGluZTo6SW5zdHJ1bWVudD4gbmV3SW5zdHJ1bWVudHM7Ci0gICAgbmV3SW5zdHJ1bWVudHMucmVz
ZXJ2ZUNhcGFjaXR5KGluc3RydW1lbnRzLmxlbmd0aCgpKTsKKyAgICBuZXdJbnN0cnVtZW50cy5y
ZXNlcnZlQ2FwYWNpdHkoaW5zdHJ1bWVudHMtPmxlbmd0aCgpKTsKIAotICAgIGZvciAoY29uc3Qg
YXV0byYgaW5zdHJ1bWVudFZhbHVlIDogaW5zdHJ1bWVudHMpIHsKLSAgICAgICAgU3RyaW5nIGVu
dW1WYWx1ZVN0cmluZzsKLSAgICAgICAgaWYgKCFpbnN0cnVtZW50VmFsdWUtPmFzU3RyaW5nKGVu
dW1WYWx1ZVN0cmluZykpIHsKLSAgICAgICAgICAgIGVycm9yU3RyaW5nID0gIlVuZXhwZWN0ZWQg
bm9uLXN0cmluZyB2YWx1ZSBpbiBnaXZlbiBpbnN0cnVtZW50cyJfczsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQorICAgIGZvciAoY29uc3QgYXV0byYgaW5zdHJ1bWVudFZhbHVlIDog
aW5zdHJ1bWVudHMuZ2V0KCkpIHsKKyAgICAgICAgYXV0byBpbnN0cnVtZW50U3RyaW5nID0gaW5z
dHJ1bWVudFZhbHVlLT5hc1N0cmluZygpOworICAgICAgICBpZiAoIWluc3RydW1lbnRTdHJpbmcp
CisgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIlVuZXhwZWN0ZWQgbm9uLXN0cmlu
ZyB2YWx1ZSBpbiBnaXZlbiBpbnN0cnVtZW50cyJfcyk7CiAKLSAgICAgICAgT3B0aW9uYWw8UHJv
dG9jb2w6OlRpbWVsaW5lOjpJbnN0cnVtZW50PiBpbnN0cnVtZW50VHlwZSA9IFByb3RvY29sOjpJ
bnNwZWN0b3JIZWxwZXJzOjpwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8UHJvdG9jb2w6OlRpbWVs
aW5lOjpJbnN0cnVtZW50PihlbnVtVmFsdWVTdHJpbmcpOwotICAgICAgICBpZiAoIWluc3RydW1l
bnRUeXBlKSB7Ci0gICAgICAgICAgICBlcnJvclN0cmluZyA9IG1ha2VTdHJpbmcoIlVua25vd24g
aXRlbSBpbiBnaXZlbiBpbnN0cnVtZW50czogIiwgZW51bVZhbHVlU3RyaW5nKTsKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQorICAgICAgICBhdXRvIGluc3RydW1lbnQgPSBQcm90b2Nv
bDo6SGVscGVyczo6cGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPFByb3RvY29sOjpUaW1lbGluZTo6
SW5zdHJ1bWVudD4oaW5zdHJ1bWVudFN0cmluZyk7CisgICAgICAgIGlmICghaW5zdHJ1bWVudCkK
KyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChtYWtlU3RyaW5nKCJVbmtub3duIGlu
c3RydW1lbnQ6ICIsIGluc3RydW1lbnRTdHJpbmcpKTsKIAotICAgICAgICBuZXdJbnN0cnVtZW50
cy51bmNoZWNrZWRBcHBlbmQoKmluc3RydW1lbnRUeXBlKTsKKyAgICAgICAgbmV3SW5zdHJ1bWVu
dHMudW5jaGVja2VkQXBwZW5kKCppbnN0cnVtZW50KTsKICAgICB9CiAKICAgICBtX2luc3RydW1l
bnRzLnN3YXAobmV3SW5zdHJ1bWVudHMpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJ
bnNwZWN0b3JUaW1lbGluZUFnZW50OjppbnRlcm5hbFN0YXJ0KGNvbnN0IGludCogbWF4Q2FsbFN0
YWNrRGVwdGgpCit2b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OmludGVybmFsU3RhcnQoT3B0
aW9uYWw8aW50PiYmIG1heENhbGxTdGFja0RlcHRoKQogewogICAgIGlmIChtX3RyYWNraW5nKQog
ICAgICAgICByZXR1cm47CkBAIC0yOTIsOCArMjk0LDcgQEAgdm9pZCBJbnNwZWN0b3JUaW1lbGlu
ZUFnZW50OjpzdGFydEZyb21Db25zb2xlKEpTQzo6SlNHbG9iYWxPYmplY3QqIGV4ZWMsIGNvbnN0
IFMKICAgICAvLyBBbGxvdyBkdXBsaWNhdGUgdW5uYW1lZCBwcm9maWxlcy4gRGlzYWxsb3cgZHVw
bGljYXRlIG5hbWVkIHByb2ZpbGVzLgogICAgIGlmICghdGl0bGUuaXNFbXB0eSgpKSB7CiAgICAg
ICAgIGZvciAoY29uc3QgVGltZWxpbmVSZWNvcmRFbnRyeSYgcmVjb3JkIDogbV9wZW5kaW5nQ29u
c29sZVByb2ZpbGVSZWNvcmRzKSB7Ci0gICAgICAgICAgICBTdHJpbmcgcmVjb3JkVGl0bGU7Ci0g
ICAgICAgICAgICByZWNvcmQuZGF0YS0+Z2V0U3RyaW5nKCJ0aXRsZSJfcywgcmVjb3JkVGl0bGUp
OworICAgICAgICAgICAgYXV0byByZWNvcmRUaXRsZSA9IHJlY29yZC5kYXRhLT5nZXRTdHJpbmco
InRpdGxlIl9zKTsKICAgICAgICAgICAgIGlmIChyZWNvcmRUaXRsZSA9PSB0aXRsZSkgewogICAg
ICAgICAgICAgICAgIGlmIChhdXRvKiBjb25zb2xlQWdlbnQgPSBtX2luc3RydW1lbnRpbmdBZ2Vu
dHMud2ViQ29uc29sZUFnZW50KCkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFNl
bmQgYW4gZW51bSB0byB0aGUgZnJvbnRlbmQgZm9yIGxvY2FsaXphdGlvbj8KQEAgLTMxOCw4ICsz
MTksNyBAQCB2b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OnN0b3BGcm9tQ29uc29sZShKU0M6
OkpTR2xvYmFsT2JqZWN0KiwgY29uc3QgU3RyaW5nJgogICAgIGZvciAoaW50IGkgPSBtX3BlbmRp
bmdDb25zb2xlUHJvZmlsZVJlY29yZHMuc2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKICAgICAg
ICAgY29uc3QgVGltZWxpbmVSZWNvcmRFbnRyeSYgcmVjb3JkID0gbV9wZW5kaW5nQ29uc29sZVBy
b2ZpbGVSZWNvcmRzW2ldOwogCi0gICAgICAgIFN0cmluZyByZWNvcmRUaXRsZTsKLSAgICAgICAg
cmVjb3JkLmRhdGEtPmdldFN0cmluZygidGl0bGUiX3MsIHJlY29yZFRpdGxlKTsKKyAgICAgICAg
YXV0byByZWNvcmRUaXRsZSA9IHJlY29yZC5kYXRhLT5nZXRTdHJpbmcoInRpdGxlIl9zKTsKICAg
ICAgICAgaWYgKHRpdGxlLmlzRW1wdHkoKSB8fCByZWNvcmRUaXRsZSA9PSB0aXRsZSkgewogICAg
ICAgICAgICAgZGlkQ29tcGxldGVSZWNvcmRFbnRyeShyZWNvcmQpOwogICAgICAgICAgICAgbV9w
ZW5kaW5nQ29uc29sZVByb2ZpbGVSZWNvcmRzLnJlbW92ZShpKTsKQEAgLTQ5NiwxMCArNDk2LDgg
QEAgdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjptYWluRnJhbWVTdGFydGVkTG9hZGluZygp
CiAgICAgbV9hdXRvQ2FwdHVyZVBoYXNlID0gQXV0b0NhcHR1cmVQaGFzZTo6QmVmb3JlTG9hZDsK
IAogICAgIC8vIFByZS1lbXB0aXZlbHkgZGlzYWJsZSBicmVha3BvaW50cy4gVGhlIGZyb250ZW5k
IG11c3QgcmUtZW5hYmxlIHRoZW0uCi0gICAgaWYgKGF1dG8qIHdlYkRlYnVnZ2VyQWdlbnQgPSBt
X2luc3RydW1lbnRpbmdBZ2VudHMuZW5hYmxlZFdlYkRlYnVnZ2VyQWdlbnQoKSkgewotICAgICAg
ICBFcnJvclN0cmluZyBpZ25vcmVkOwotICAgICAgICB3ZWJEZWJ1Z2dlckFnZW50LT5zZXRCcmVh
a3BvaW50c0FjdGl2ZShpZ25vcmVkLCBmYWxzZSk7Ci0gICAgfQorICAgIGlmIChhdXRvKiB3ZWJE
ZWJ1Z2dlckFnZW50ID0gbV9pbnN0cnVtZW50aW5nQWdlbnRzLmVuYWJsZWRXZWJEZWJ1Z2dlckFn
ZW50KCkpCisgICAgICAgIHdlYkRlYnVnZ2VyQWdlbnQtPnNldEJyZWFrcG9pbnRzQWN0aXZlKGZh
bHNlKTsKIAogICAgIC8vIEluZm9ybSB0aGUgZnJvbnRlbmQgd2Ugc3RhcnRlZCBhbiBhdXRvIGNh
cHR1cmUuIFRoZSBmcm9udGVuZCBtdXN0IHN0b3AgY2FwdHVyZS4KICAgICBtX2Zyb250ZW5kRGlz
cGF0Y2hlci0+YXV0b0NhcHR1cmVTdGFydGVkKCk7CkBAIC01MjMsMTAgKzUyMSw4IEBAIHZvaWQg
SW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6c3RhcnRQcm9ncmFtbWF0aWNDYXB0dXJlKCkKICAgICAv
LyBEaXNhYmxlIGJyZWFrcG9pbnRzIGR1cmluZyBwcm9ncmFtbWF0aWMgY2FwdHVyZS4KICAgICBp
ZiAoYXV0byogd2ViRGVidWdnZXJBZ2VudCA9IG1faW5zdHJ1bWVudGluZ0FnZW50cy5lbmFibGVk
V2ViRGVidWdnZXJBZ2VudCgpKSB7CiAgICAgICAgIG1fcHJvZ3JhbW1hdGljQ2FwdHVyZVJlc3Rv
cmVCcmVha3BvaW50QWN0aXZlVmFsdWUgPSB3ZWJEZWJ1Z2dlckFnZW50LT5icmVha3BvaW50c0Fj
dGl2ZSgpOwotICAgICAgICBpZiAobV9wcm9ncmFtbWF0aWNDYXB0dXJlUmVzdG9yZUJyZWFrcG9p
bnRBY3RpdmVWYWx1ZSkgewotICAgICAgICAgICAgRXJyb3JTdHJpbmcgaWdub3JlZDsKLSAgICAg
ICAgICAgIHdlYkRlYnVnZ2VyQWdlbnQtPnNldEJyZWFrcG9pbnRzQWN0aXZlKGlnbm9yZWQsIGZh
bHNlKTsKLSAgICAgICAgfQorICAgICAgICBpZiAobV9wcm9ncmFtbWF0aWNDYXB0dXJlUmVzdG9y
ZUJyZWFrcG9pbnRBY3RpdmVWYWx1ZSkKKyAgICAgICAgICAgIHdlYkRlYnVnZ2VyQWdlbnQtPnNl
dEJyZWFrcG9pbnRzQWN0aXZlKGZhbHNlKTsKICAgICB9IGVsc2UKICAgICAgICAgbV9wcm9ncmFt
bWF0aWNDYXB0dXJlUmVzdG9yZUJyZWFrcG9pbnRBY3RpdmVWYWx1ZSA9IGZhbHNlOwogCkBAIC01
NDYsMTAgKzU0Miw4IEBAIHZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6c3RvcFByb2dyYW1t
YXRpY0NhcHR1cmUoKQogCiAgICAgLy8gUmUtZW5hYmxlIGJyZWFrcG9pbnRzIGlmIHRoZXkgd2Vy
ZSBlbmFibGVkLgogICAgIGlmIChtX3Byb2dyYW1tYXRpY0NhcHR1cmVSZXN0b3JlQnJlYWtwb2lu
dEFjdGl2ZVZhbHVlKSB7Ci0gICAgICAgIGlmIChhdXRvKiB3ZWJEZWJ1Z2dlckFnZW50ID0gbV9p
bnN0cnVtZW50aW5nQWdlbnRzLmVuYWJsZWRXZWJEZWJ1Z2dlckFnZW50KCkpIHsKLSAgICAgICAg
ICAgIEVycm9yU3RyaW5nIGlnbm9yZWQ7Ci0gICAgICAgICAgICB3ZWJEZWJ1Z2dlckFnZW50LT5z
ZXRCcmVha3BvaW50c0FjdGl2ZShpZ25vcmVkLCB0cnVlKTsKLSAgICAgICAgfQorICAgICAgICBp
ZiAoYXV0byogd2ViRGVidWdnZXJBZ2VudCA9IG1faW5zdHJ1bWVudGluZ0FnZW50cy5lbmFibGVk
V2ViRGVidWdnZXJBZ2VudCgpKQorICAgICAgICAgICAgd2ViRGVidWdnZXJBZ2VudC0+c2V0QnJl
YWtwb2ludHNBY3RpdmUodHJ1ZSk7CiAgICAgfQogfQogCkBAIC01NTcsMjYgKzU1MSwyNiBAQCB2
b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OnRvZ2dsZUluc3RydW1lbnRzKEluc3RydW1lbnRT
dGF0ZSBzdGF0ZSkKIHsKICAgICBmb3IgKGF1dG8gaW5zdHJ1bWVudFR5cGUgOiBtX2luc3RydW1l
bnRzKSB7CiAgICAgICAgIHN3aXRjaCAoaW5zdHJ1bWVudFR5cGUpIHsKLSAgICAgICAgY2FzZSBJ
bnNwZWN0b3I6OlByb3RvY29sOjpUaW1lbGluZTo6SW5zdHJ1bWVudDo6U2NyaXB0UHJvZmlsZXI6
IHsKKyAgICAgICAgY2FzZSBQcm90b2NvbDo6VGltZWxpbmU6Okluc3RydW1lbnQ6OlNjcmlwdFBy
b2ZpbGVyOiB7CiAgICAgICAgICAgICB0b2dnbGVTY3JpcHRQcm9maWxlckluc3RydW1lbnQoc3Rh
dGUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgY2FzZSBJbnNwZWN0
b3I6OlByb3RvY29sOjpUaW1lbGluZTo6SW5zdHJ1bWVudDo6SGVhcDogeworICAgICAgICBjYXNl
IFByb3RvY29sOjpUaW1lbGluZTo6SW5zdHJ1bWVudDo6SGVhcDogewogICAgICAgICAgICAgdG9n
Z2xlSGVhcEluc3RydW1lbnQoc3RhdGUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
LSAgICAgICAgY2FzZSBJbnNwZWN0b3I6OlByb3RvY29sOjpUaW1lbGluZTo6SW5zdHJ1bWVudDo6
Q1BVOiB7CisgICAgICAgIGNhc2UgUHJvdG9jb2w6OlRpbWVsaW5lOjpJbnN0cnVtZW50OjpDUFU6
IHsKICAgICAgICAgICAgIHRvZ2dsZUNQVUluc3RydW1lbnQoc3RhdGUpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgY2FzZSBJbnNwZWN0b3I6OlByb3RvY29sOjpUaW1l
bGluZTo6SW5zdHJ1bWVudDo6TWVtb3J5OiB7CisgICAgICAgIGNhc2UgUHJvdG9jb2w6OlRpbWVs
aW5lOjpJbnN0cnVtZW50OjpNZW1vcnk6IHsKICAgICAgICAgICAgIHRvZ2dsZU1lbW9yeUluc3Ry
dW1lbnQoc3RhdGUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgY2Fz
ZSBJbnNwZWN0b3I6OlByb3RvY29sOjpUaW1lbGluZTo6SW5zdHJ1bWVudDo6VGltZWxpbmU6Cisg
ICAgICAgIGNhc2UgUHJvdG9jb2w6OlRpbWVsaW5lOjpJbnN0cnVtZW50OjpUaW1lbGluZToKICAg
ICAgICAgICAgIHRvZ2dsZVRpbWVsaW5lSW5zdHJ1bWVudChzdGF0ZSk7CiAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBJbnNwZWN0b3I6OlByb3RvY29sOjpUaW1lbGluZTo6SW5zdHJ1
bWVudDo6QW5pbWF0aW9uOgorICAgICAgICBjYXNlIFByb3RvY29sOjpUaW1lbGluZTo6SW5zdHJ1
bWVudDo6QW5pbWF0aW9uOgogICAgICAgICAgICAgdG9nZ2xlQW5pbWF0aW9uSW5zdHJ1bWVudChz
dGF0ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtNTg2LDI0ICs1ODAsMjEg
QEAgdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50Ojp0b2dnbGVJbnN0cnVtZW50cyhJbnN0cnVt
ZW50U3RhdGUgc3RhdGUpCiB2b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OnRvZ2dsZVNjcmlw
dFByb2ZpbGVySW5zdHJ1bWVudChJbnN0cnVtZW50U3RhdGUgc3RhdGUpCiB7CiAgICAgaWYgKGF1
dG8qIHNjcmlwdFByb2ZpbGVyQWdlbnQgPSBtX2luc3RydW1lbnRpbmdBZ2VudHMucGVyc2lzdGVu
dFNjcmlwdFByb2ZpbGVyQWdlbnQoKSkgewotICAgICAgICBFcnJvclN0cmluZyBpZ25vcmVkOwot
ICAgICAgICBpZiAoc3RhdGUgPT0gSW5zdHJ1bWVudFN0YXRlOjpTdGFydCkgewotICAgICAgICAg
ICAgY29uc3QgYm9vbCBpbmNsdWRlU2FtcGxlcyA9IHRydWU7Ci0gICAgICAgICAgICBzY3JpcHRQ
cm9maWxlckFnZW50LT5zdGFydFRyYWNraW5nKGlnbm9yZWQsICZpbmNsdWRlU2FtcGxlcyk7Ci0g
ICAgICAgIH0gZWxzZQotICAgICAgICAgICAgc2NyaXB0UHJvZmlsZXJBZ2VudC0+c3RvcFRyYWNr
aW5nKGlnbm9yZWQpOworICAgICAgICBpZiAoc3RhdGUgPT0gSW5zdHJ1bWVudFN0YXRlOjpTdGFy
dCkKKyAgICAgICAgICAgIHNjcmlwdFByb2ZpbGVyQWdlbnQtPnN0YXJ0VHJhY2tpbmcodHJ1ZSk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNjcmlwdFByb2ZpbGVyQWdlbnQtPnN0b3BUcmFj
a2luZygpOwogICAgIH0KIH0KIAogdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50Ojp0b2dnbGVI
ZWFwSW5zdHJ1bWVudChJbnN0cnVtZW50U3RhdGUgc3RhdGUpCiB7CiAgICAgaWYgKGF1dG8qIGhl
YXBBZ2VudCA9IG1faW5zdHJ1bWVudGluZ0FnZW50cy5lbmFibGVkUGFnZUhlYXBBZ2VudCgpKSB7
Ci0gICAgICAgIEVycm9yU3RyaW5nIGlnbm9yZWQ7CiAgICAgICAgIGlmIChzdGF0ZSA9PSBJbnN0
cnVtZW50U3RhdGU6OlN0YXJ0KSB7CiAgICAgICAgICAgICBpZiAobV9hdXRvQ2FwdHVyZVBoYXNl
ID09IEF1dG9DYXB0dXJlUGhhc2U6Ok5vbmUgfHwgbV9hdXRvQ2FwdHVyZVBoYXNlID09IEF1dG9D
YXB0dXJlUGhhc2U6OkZpcnN0TmF2aWdhdGlvbikKLSAgICAgICAgICAgICAgICBoZWFwQWdlbnQt
PnN0YXJ0VHJhY2tpbmcoaWdub3JlZCk7CisgICAgICAgICAgICAgICAgaGVhcEFnZW50LT5zdGFy
dFRyYWNraW5nKCk7CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgaGVhcEFnZW50LT5zdG9w
VHJhY2tpbmcoaWdub3JlZCk7CisgICAgICAgICAgICBoZWFwQWdlbnQtPnN0b3BUcmFja2luZygp
OwogICAgIH0KIH0KIApAQCAtNjExLDExICs2MDIsMTAgQEAgdm9pZCBJbnNwZWN0b3JUaW1lbGlu
ZUFnZW50Ojp0b2dnbGVDUFVJbnN0cnVtZW50KEluc3RydW1lbnRTdGF0ZSBzdGF0ZSkKIHsKICNp
ZiBFTkFCTEUoUkVTT1VSQ0VfVVNBR0UpCiAgICAgaWYgKGF1dG8qIGNwdVByb2ZpbGVyQWdlbnQg
PSBtX2luc3RydW1lbnRpbmdBZ2VudHMucGVyc2lzdGVudENQVVByb2ZpbGVyQWdlbnQoKSkgewot
ICAgICAgICBFcnJvclN0cmluZyBpZ25vcmVkOwogICAgICAgICBpZiAoc3RhdGUgPT0gSW5zdHJ1
bWVudFN0YXRlOjpTdGFydCkKLSAgICAgICAgICAgIGNwdVByb2ZpbGVyQWdlbnQtPnN0YXJ0VHJh
Y2tpbmcoaWdub3JlZCk7CisgICAgICAgICAgICBjcHVQcm9maWxlckFnZW50LT5zdGFydFRyYWNr
aW5nKCk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNwdVByb2ZpbGVyQWdlbnQtPnN0b3BU
cmFja2luZyhpZ25vcmVkKTsKKyAgICAgICAgICAgIGNwdVByb2ZpbGVyQWdlbnQtPnN0b3BUcmFj
a2luZygpOwogICAgIH0KICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTYyNiwx
MSArNjE2LDEwIEBAIHZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6dG9nZ2xlTWVtb3J5SW5z
dHJ1bWVudChJbnN0cnVtZW50U3RhdGUgc3RhdGUpCiB7CiAjaWYgRU5BQkxFKFJFU09VUkNFX1VT
QUdFKQogICAgIGlmIChhdXRvKiBtZW1vcnlBZ2VudCA9IG1faW5zdHJ1bWVudGluZ0FnZW50cy5w
ZXJzaXN0ZW50TWVtb3J5QWdlbnQoKSkgewotICAgICAgICBFcnJvclN0cmluZyBpZ25vcmVkOwog
ICAgICAgICBpZiAoc3RhdGUgPT0gSW5zdHJ1bWVudFN0YXRlOjpTdGFydCkKLSAgICAgICAgICAg
IG1lbW9yeUFnZW50LT5zdGFydFRyYWNraW5nKGlnbm9yZWQpOworICAgICAgICAgICAgbWVtb3J5
QWdlbnQtPnN0YXJ0VHJhY2tpbmcoKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbWVtb3J5
QWdlbnQtPnN0b3BUcmFja2luZyhpZ25vcmVkKTsKKyAgICAgICAgICAgIG1lbW9yeUFnZW50LT5z
dG9wVHJhY2tpbmcoKTsKICAgICB9CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBA
IC02NDAsNyArNjI5LDcgQEAgdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50Ojp0b2dnbGVNZW1v
cnlJbnN0cnVtZW50KEluc3RydW1lbnRTdGF0ZSBzdGF0ZSkKIHZvaWQgSW5zcGVjdG9yVGltZWxp
bmVBZ2VudDo6dG9nZ2xlVGltZWxpbmVJbnN0cnVtZW50KEluc3RydW1lbnRTdGF0ZSBzdGF0ZSkK
IHsKICAgICBpZiAoc3RhdGUgPT0gSW5zdHJ1bWVudFN0YXRlOjpTdGFydCkKLSAgICAgICAgaW50
ZXJuYWxTdGFydCgpOworICAgICAgICBpbnRlcm5hbFN0YXJ0KFdURjo6bnVsbG9wdCk7CiAgICAg
ZWxzZQogICAgICAgICBpbnRlcm5hbFN0b3AoKTsKIH0KQEAgLTY0OCwxMSArNjM3LDEwIEBAIHZv
aWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6dG9nZ2xlVGltZWxpbmVJbnN0cnVtZW50KEluc3Ry
dW1lbnRTdGF0ZSBzdGF0ZSkKIHZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6dG9nZ2xlQW5p
bWF0aW9uSW5zdHJ1bWVudChJbnN0cnVtZW50U3RhdGUgc3RhdGUpCiB7CiAgICAgaWYgKGF1dG8q
IGFuaW1hdGlvbkFnZW50ID0gbV9pbnN0cnVtZW50aW5nQWdlbnRzLnBlcnNpc3RlbnRBbmltYXRp
b25BZ2VudCgpKSB7Ci0gICAgICAgIEVycm9yU3RyaW5nIGlnbm9yZWQ7CiAgICAgICAgIGlmIChz
dGF0ZSA9PSBJbnN0cnVtZW50U3RhdGU6OlN0YXJ0KQotICAgICAgICAgICAgYW5pbWF0aW9uQWdl
bnQtPnN0YXJ0VHJhY2tpbmcoaWdub3JlZCk7CisgICAgICAgICAgICBhbmltYXRpb25BZ2VudC0+
c3RhcnRUcmFja2luZygpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBhbmltYXRpb25BZ2Vu
dC0+c3RvcFRyYWNraW5nKGlnbm9yZWQpOworICAgICAgICAgICAgYW5pbWF0aW9uQWdlbnQtPnN0
b3BUcmFja2luZygpOwogICAgIH0KIH0KIApAQCAtNjkxLDcxICs2NzksNzEgQEAgdm9pZCBJbnNw
ZWN0b3JUaW1lbGluZUFnZW50OjpicmVha3BvaW50QWN0aW9uUHJvYmUoSlNDOjpKU0dsb2JhbE9i
amVjdCogbGV4aWNhbEcKICAgICBhcHBlbmRSZWNvcmQoVGltZWxpbmVSZWNvcmRGYWN0b3J5Ojpj
cmVhdGVQcm9iZVNhbXBsZURhdGEoYWN0aW9uSUQsIHNhbXBsZUlkKSwgVGltZWxpbmVSZWNvcmRU
eXBlOjpQcm9iZVNhbXBsZSwgZmFsc2UsIGZyYW1lRnJvbUV4ZWNTdGF0ZShsZXhpY2FsR2xvYmFs
T2JqZWN0KSk7CiB9CiAKLXN0YXRpYyBJbnNwZWN0b3I6OlByb3RvY29sOjpUaW1lbGluZTo6RXZl
bnRUeXBlIHRvUHJvdG9jb2woVGltZWxpbmVSZWNvcmRUeXBlIHR5cGUpCitzdGF0aWMgUHJvdG9j
b2w6OlRpbWVsaW5lOjpFdmVudFR5cGUgdG9Qcm90b2NvbChUaW1lbGluZVJlY29yZFR5cGUgdHlw
ZSkKIHsKICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICBjYXNlIFRpbWVsaW5lUmVjb3JkVHlwZTo6
RXZlbnREaXNwYXRjaDoKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRpbWVs
aW5lOjpFdmVudFR5cGU6OkV2ZW50RGlzcGF0Y2g7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6
VGltZWxpbmU6OkV2ZW50VHlwZTo6RXZlbnREaXNwYXRjaDsKICAgICBjYXNlIFRpbWVsaW5lUmVj
b3JkVHlwZTo6U2NoZWR1bGVTdHlsZVJlY2FsY3VsYXRpb246Ci0gICAgICAgIHJldHVybiBJbnNw
ZWN0b3I6OlByb3RvY29sOjpUaW1lbGluZTo6RXZlbnRUeXBlOjpTY2hlZHVsZVN0eWxlUmVjYWxj
dWxhdGlvbjsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpUaW1lbGluZTo6RXZlbnRUeXBlOjpT
Y2hlZHVsZVN0eWxlUmVjYWxjdWxhdGlvbjsKICAgICBjYXNlIFRpbWVsaW5lUmVjb3JkVHlwZTo6
UmVjYWxjdWxhdGVTdHlsZXM6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpU
aW1lbGluZTo6RXZlbnRUeXBlOjpSZWNhbGN1bGF0ZVN0eWxlczsKKyAgICAgICAgcmV0dXJuIFBy
b3RvY29sOjpUaW1lbGluZTo6RXZlbnRUeXBlOjpSZWNhbGN1bGF0ZVN0eWxlczsKICAgICBjYXNl
IFRpbWVsaW5lUmVjb3JkVHlwZTo6SW52YWxpZGF0ZUxheW91dDoKLSAgICAgICAgcmV0dXJuIElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlRpbWVsaW5lOjpFdmVudFR5cGU6OkludmFsaWRhdGVMYXlvdXQ7
CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6VGltZWxpbmU6OkV2ZW50VHlwZTo6SW52YWxpZGF0
ZUxheW91dDsKICAgICBjYXNlIFRpbWVsaW5lUmVjb3JkVHlwZTo6TGF5b3V0OgotICAgICAgICBy
ZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6VGltZWxpbmU6OkV2ZW50VHlwZTo6TGF5b3V0Owor
ICAgICAgICByZXR1cm4gUHJvdG9jb2w6OlRpbWVsaW5lOjpFdmVudFR5cGU6OkxheW91dDsKICAg
ICBjYXNlIFRpbWVsaW5lUmVjb3JkVHlwZTo6UGFpbnQ6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0
b3I6OlByb3RvY29sOjpUaW1lbGluZTo6RXZlbnRUeXBlOjpQYWludDsKKyAgICAgICAgcmV0dXJu
IFByb3RvY29sOjpUaW1lbGluZTo6RXZlbnRUeXBlOjpQYWludDsKICAgICBjYXNlIFRpbWVsaW5l
UmVjb3JkVHlwZTo6Q29tcG9zaXRlOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2Nv
bDo6VGltZWxpbmU6OkV2ZW50VHlwZTo6Q29tcG9zaXRlOworICAgICAgICByZXR1cm4gUHJvdG9j
b2w6OlRpbWVsaW5lOjpFdmVudFR5cGU6OkNvbXBvc2l0ZTsKICAgICBjYXNlIFRpbWVsaW5lUmVj
b3JkVHlwZTo6UmVuZGVyaW5nRnJhbWU6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpUaW1lbGluZTo6RXZlbnRUeXBlOjpSZW5kZXJpbmdGcmFtZTsKKyAgICAgICAgcmV0dXJu
IFByb3RvY29sOjpUaW1lbGluZTo6RXZlbnRUeXBlOjpSZW5kZXJpbmdGcmFtZTsKIAogICAgIGNh
c2UgVGltZWxpbmVSZWNvcmRUeXBlOjpUaW1lckluc3RhbGw6Ci0gICAgICAgIHJldHVybiBJbnNw
ZWN0b3I6OlByb3RvY29sOjpUaW1lbGluZTo6RXZlbnRUeXBlOjpUaW1lckluc3RhbGw7CisgICAg
ICAgIHJldHVybiBQcm90b2NvbDo6VGltZWxpbmU6OkV2ZW50VHlwZTo6VGltZXJJbnN0YWxsOwog
ICAgIGNhc2UgVGltZWxpbmVSZWNvcmRUeXBlOjpUaW1lclJlbW92ZToKLSAgICAgICAgcmV0dXJu
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRpbWVsaW5lOjpFdmVudFR5cGU6OlRpbWVyUmVtb3ZlOwor
ICAgICAgICByZXR1cm4gUHJvdG9jb2w6OlRpbWVsaW5lOjpFdmVudFR5cGU6OlRpbWVyUmVtb3Zl
OwogICAgIGNhc2UgVGltZWxpbmVSZWNvcmRUeXBlOjpUaW1lckZpcmU6Ci0gICAgICAgIHJldHVy
biBJbnNwZWN0b3I6OlByb3RvY29sOjpUaW1lbGluZTo6RXZlbnRUeXBlOjpUaW1lckZpcmU7Cisg
ICAgICAgIHJldHVybiBQcm90b2NvbDo6VGltZWxpbmU6OkV2ZW50VHlwZTo6VGltZXJGaXJlOwog
CiAgICAgY2FzZSBUaW1lbGluZVJlY29yZFR5cGU6OkV2YWx1YXRlU2NyaXB0OgotICAgICAgICBy
ZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6VGltZWxpbmU6OkV2ZW50VHlwZTo6RXZhbHVhdGVT
Y3JpcHQ7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6VGltZWxpbmU6OkV2ZW50VHlwZTo6RXZh
bHVhdGVTY3JpcHQ7CiAKICAgICBjYXNlIFRpbWVsaW5lUmVjb3JkVHlwZTo6VGltZVN0YW1wOgot
ICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6VGltZWxpbmU6OkV2ZW50VHlwZTo6
VGltZVN0YW1wOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OlRpbWVsaW5lOjpFdmVudFR5cGU6
OlRpbWVTdGFtcDsKICAgICBjYXNlIFRpbWVsaW5lUmVjb3JkVHlwZTo6VGltZToKLSAgICAgICAg
cmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRpbWVsaW5lOjpFdmVudFR5cGU6OlRpbWU7Cisg
ICAgICAgIHJldHVybiBQcm90b2NvbDo6VGltZWxpbmU6OkV2ZW50VHlwZTo6VGltZTsKICAgICBj
YXNlIFRpbWVsaW5lUmVjb3JkVHlwZTo6VGltZUVuZDoKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlRpbWVsaW5lOjpFdmVudFR5cGU6OlRpbWVFbmQ7CisgICAgICAgIHJldHVy
biBQcm90b2NvbDo6VGltZWxpbmU6OkV2ZW50VHlwZTo6VGltZUVuZDsKIAogICAgIGNhc2UgVGlt
ZWxpbmVSZWNvcmRUeXBlOjpGdW5jdGlvbkNhbGw6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6
OlByb3RvY29sOjpUaW1lbGluZTo6RXZlbnRUeXBlOjpGdW5jdGlvbkNhbGw7CisgICAgICAgIHJl
dHVybiBQcm90b2NvbDo6VGltZWxpbmU6OkV2ZW50VHlwZTo6RnVuY3Rpb25DYWxsOwogICAgIGNh
c2UgVGltZWxpbmVSZWNvcmRUeXBlOjpQcm9iZVNhbXBsZToKLSAgICAgICAgcmV0dXJuIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlRpbWVsaW5lOjpFdmVudFR5cGU6OlByb2JlU2FtcGxlOworICAgICAg
ICByZXR1cm4gUHJvdG9jb2w6OlRpbWVsaW5lOjpFdmVudFR5cGU6OlByb2JlU2FtcGxlOwogICAg
IGNhc2UgVGltZWxpbmVSZWNvcmRUeXBlOjpDb25zb2xlUHJvZmlsZToKLSAgICAgICAgcmV0dXJu
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRpbWVsaW5lOjpFdmVudFR5cGU6OkNvbnNvbGVQcm9maWxl
OworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OlRpbWVsaW5lOjpFdmVudFR5cGU6OkNvbnNvbGVQ
cm9maWxlOwogCiAgICAgY2FzZSBUaW1lbGluZVJlY29yZFR5cGU6OlJlcXVlc3RBbmltYXRpb25G
cmFtZToKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRpbWVsaW5lOjpFdmVu
dFR5cGU6OlJlcXVlc3RBbmltYXRpb25GcmFtZTsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpU
aW1lbGluZTo6RXZlbnRUeXBlOjpSZXF1ZXN0QW5pbWF0aW9uRnJhbWU7CiAgICAgY2FzZSBUaW1l
bGluZVJlY29yZFR5cGU6OkNhbmNlbEFuaW1hdGlvbkZyYW1lOgotICAgICAgICByZXR1cm4gSW5z
cGVjdG9yOjpQcm90b2NvbDo6VGltZWxpbmU6OkV2ZW50VHlwZTo6Q2FuY2VsQW5pbWF0aW9uRnJh
bWU7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6VGltZWxpbmU6OkV2ZW50VHlwZTo6Q2FuY2Vs
QW5pbWF0aW9uRnJhbWU7CiAgICAgY2FzZSBUaW1lbGluZVJlY29yZFR5cGU6OkZpcmVBbmltYXRp
b25GcmFtZToKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRpbWVsaW5lOjpF
dmVudFR5cGU6OkZpcmVBbmltYXRpb25GcmFtZTsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpU
aW1lbGluZTo6RXZlbnRUeXBlOjpGaXJlQW5pbWF0aW9uRnJhbWU7CiAKICAgICBjYXNlIFRpbWVs
aW5lUmVjb3JkVHlwZTo6T2JzZXJ2ZXJDYWxsYmFjazoKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlRpbWVsaW5lOjpFdmVudFR5cGU6Ok9ic2VydmVyQ2FsbGJhY2s7CisgICAg
ICAgIHJldHVybiBQcm90b2NvbDo6VGltZWxpbmU6OkV2ZW50VHlwZTo6T2JzZXJ2ZXJDYWxsYmFj
azsKICAgICB9CiAKLSAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6VGltZWxpbmU6OkV2
ZW50VHlwZTo6VGltZVN0YW1wOworICAgIHJldHVybiBQcm90b2NvbDo6VGltZWxpbmU6OkV2ZW50
VHlwZTo6VGltZVN0YW1wOwogfQogCi12b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OmFkZFJl
Y29yZFRvVGltZWxpbmUoUmVmUHRyPEpTT046Ok9iamVjdD4mJiByZWNvcmQsIFRpbWVsaW5lUmVj
b3JkVHlwZSB0eXBlKQordm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjphZGRSZWNvcmRUb1Rp
bWVsaW5lKFJlZjxKU09OOjpPYmplY3Q+JiYgcmVjb3JkLCBUaW1lbGluZVJlY29yZFR5cGUgdHlw
ZSkKIHsKLSAgICBBU1NFUlRfQVJHKHJlY29yZCwgcmVjb3JkKTsKLSAgICByZWNvcmQtPnNldFN0
cmluZygidHlwZSIsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Okluc3BlY3RvckhlbHBlcnM6OmdldEVu
dW1Db25zdGFudFZhbHVlKHRvUHJvdG9jb2wodHlwZSkpKTsKKyAgICByZWNvcmQtPnNldFN0cmlu
ZyhQcm90b2NvbDo6VGltZWxpbmU6OlRpbWVsaW5lRXZlbnQ6OnR5cGVLZXksIFByb3RvY29sOjpI
ZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZSh0b1Byb3RvY29sKHR5cGUpKSk7CiAKICAgICBp
ZiAobV9yZWNvcmRTdGFjay5pc0VtcHR5KCkpIHsKLSAgICAgICAgYXV0byByZWNvcmRPYmplY3Qg
PSBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRpbWVsaW5lOjpUaW1lbGluZUV2
ZW50Pjo6cnVudGltZUNhc3QoV1RGTW92ZShyZWNvcmQpKTsKKyAgICAgICAgLy8gRklYTUU6IHJ1
bnRpbWVDYXN0IGlzIGEgaGFjay4gV2UgZG8gaXQgYmVjYXVzZSB3ZSBjYW4ndCBidWlsZCBUaW1l
bGluZUV2ZW50IGRpcmVjdGx5IG5vdy4KKyAgICAgICAgYXV0byByZWNvcmRPYmplY3QgPSBQcm90
b2NvbDo6QmluZGluZ1RyYWl0czxQcm90b2NvbDo6VGltZWxpbmU6OlRpbWVsaW5lRXZlbnQ+Ojpy
dW50aW1lQ2FzdChXVEZNb3ZlKHJlY29yZCkpOwogICAgICAgICBzZW5kRXZlbnQoV1RGTW92ZShy
ZWNvcmRPYmplY3QpKTsKICAgICB9IGVsc2UgewogICAgICAgICBjb25zdCBUaW1lbGluZVJlY29y
ZEVudHJ5JiBwYXJlbnQgPSBtX3JlY29yZFN0YWNrLmxhc3QoKTsKQEAgLTc4MSw4ICs3NjksOSBA
QCB2b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OnNldEZyYW1lSWRlbnRpZmllcihKU09OOjpP
YmplY3QqIHJlY29yZCwgRnJhbWUqIGZyYQogCiB2b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6
OmRpZENvbXBsZXRlUmVjb3JkRW50cnkoY29uc3QgVGltZWxpbmVSZWNvcmRFbnRyeSYgZW50cnkp
CiB7Ci0gICAgZW50cnkucmVjb3JkLT5zZXRPYmplY3QoImRhdGEiX3MsIGVudHJ5LmRhdGEpOwot
ICAgIGVudHJ5LnJlY29yZC0+c2V0QXJyYXkoImNoaWxkcmVuIl9zLCBlbnRyeS5jaGlsZHJlbik7
CisgICAgZW50cnkucmVjb3JkLT5zZXRPYmplY3QoUHJvdG9jb2w6OlRpbWVsaW5lOjpUaW1lbGlu
ZUV2ZW50OjpkYXRhS2V5LCBlbnRyeS5kYXRhLmNvcHlSZWYoKSk7CisgICAgaWYgKGVudHJ5LmNo
aWxkcmVuKQorICAgICAgICBlbnRyeS5yZWNvcmQtPnNldEFycmF5KFByb3RvY29sOjpUaW1lbGlu
ZTo6VGltZWxpbmVFdmVudDo6Y2hpbGRyZW5LZXksICplbnRyeS5jaGlsZHJlbik7CiAgICAgZW50
cnkucmVjb3JkLT5zZXREb3VibGUoImVuZFRpbWUiX3MsIHRpbWVzdGFtcCgpKTsKICAgICBhZGRS
ZWNvcmRUb1RpbWVsaW5lKGVudHJ5LnJlY29yZC5jb3B5UmVmKCksIGVudHJ5LnR5cGUpOwogfQpA
QCAtODA0LDI5ICs3OTMsMjkgQEAgdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpkaWRDb21w
bGV0ZUN1cnJlbnRSZWNvcmQoVGltZWxpbmVSZWNvcmRUeXBlIHR5cGUpCiAgICAgfQogfQogCi12
b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OmFwcGVuZFJlY29yZChSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiYmIGRhdGEsIFRpbWVsaW5lUmVjb3JkVHlwZSB0eXBlLCBib29sIGNhcHR1cmVDYWxsU3Rh
Y2ssIEZyYW1lKiBmcmFtZSkKK3ZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6YXBwZW5kUmVj
b3JkKFJlZjxKU09OOjpPYmplY3Q+JiYgZGF0YSwgVGltZWxpbmVSZWNvcmRUeXBlIHR5cGUsIGJv
b2wgY2FwdHVyZUNhbGxTdGFjaywgRnJhbWUqIGZyYW1lKQogewogICAgIFJlZjxKU09OOjpPYmpl
Y3Q+IHJlY29yZCA9IFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlR2VuZXJpY1JlY29yZCh0
aW1lc3RhbXAoKSwgY2FwdHVyZUNhbGxTdGFjayA/IG1fbWF4Q2FsbFN0YWNrRGVwdGggOiAwKTsK
LSAgICByZWNvcmQtPnNldE9iamVjdCgiZGF0YSIsIFdURk1vdmUoZGF0YSkpOworICAgIHJlY29y
ZC0+c2V0T2JqZWN0KFByb3RvY29sOjpUaW1lbGluZTo6VGltZWxpbmVFdmVudDo6ZGF0YUtleSwg
V1RGTW92ZShkYXRhKSk7CiAgICAgc2V0RnJhbWVJZGVudGlmaWVyKCZyZWNvcmQuZ2V0KCksIGZy
YW1lKTsKICAgICBhZGRSZWNvcmRUb1RpbWVsaW5lKFdURk1vdmUocmVjb3JkKSwgdHlwZSk7CiB9
CiAKLXZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6c2VuZEV2ZW50KFJlZlB0cjxKU09OOjpP
YmplY3Q+JiYgZXZlbnQpCit2b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OnNlbmRFdmVudChS
ZWY8SlNPTjo6T2JqZWN0PiYmIGV2ZW50KQogewogICAgIC8vIEZJWE1FOiBydW50aW1lQ2FzdCBp
cyBhIGhhY2suIFdlIGRvIGl0IGJlY2F1c2Ugd2UgY2FuJ3QgYnVpbGQgVGltZWxpbmVFdmVudCBk
aXJlY3RseSBub3cuCi0gICAgYXV0byByZWNvcmRDaGVja2VkID0gQmluZGluZ1RyYWl0czxJbnNw
ZWN0b3I6OlByb3RvY29sOjpUaW1lbGluZTo6VGltZWxpbmVFdmVudD46OnJ1bnRpbWVDYXN0KFdU
Rk1vdmUoZXZlbnQpKTsKKyAgICBhdXRvIHJlY29yZENoZWNrZWQgPSBQcm90b2NvbDo6QmluZGlu
Z1RyYWl0czxQcm90b2NvbDo6VGltZWxpbmU6OlRpbWVsaW5lRXZlbnQ+OjpydW50aW1lQ2FzdChX
VEZNb3ZlKGV2ZW50KSk7CiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPmV2ZW50UmVjb3JkZWQo
V1RGTW92ZShyZWNvcmRDaGVja2VkKSk7CiB9CiAKLUluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OlRp
bWVsaW5lUmVjb3JkRW50cnkgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6Y3JlYXRlUmVjb3JkRW50
cnkoUmVmUHRyPEpTT046Ok9iamVjdD4mJiBkYXRhLCBUaW1lbGluZVJlY29yZFR5cGUgdHlwZSwg
Ym9vbCBjYXB0dXJlQ2FsbFN0YWNrLCBGcmFtZSogZnJhbWUpCitJbnNwZWN0b3JUaW1lbGluZUFn
ZW50OjpUaW1lbGluZVJlY29yZEVudHJ5IEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OmNyZWF0ZVJl
Y29yZEVudHJ5KFJlZjxKU09OOjpPYmplY3Q+JiYgZGF0YSwgVGltZWxpbmVSZWNvcmRUeXBlIHR5
cGUsIGJvb2wgY2FwdHVyZUNhbGxTdGFjaywgRnJhbWUqIGZyYW1lKQogewogICAgIFJlZjxKU09O
OjpPYmplY3Q+IHJlY29yZCA9IFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlR2VuZXJpY1Jl
Y29yZCh0aW1lc3RhbXAoKSwgY2FwdHVyZUNhbGxTdGFjayA/IG1fbWF4Q2FsbFN0YWNrRGVwdGgg
OiAwKTsKICAgICBzZXRGcmFtZUlkZW50aWZpZXIoJnJlY29yZC5nZXQoKSwgZnJhbWUpOwogICAg
IHJldHVybiBUaW1lbGluZVJlY29yZEVudHJ5KFdURk1vdmUocmVjb3JkKSwgV1RGTW92ZShkYXRh
KSwgSlNPTjo6QXJyYXk6OmNyZWF0ZSgpLCB0eXBlKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JUaW1l
bGluZUFnZW50OjpwdXNoQ3VycmVudFJlY29yZChSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIGRhdGEs
IFRpbWVsaW5lUmVjb3JkVHlwZSB0eXBlLCBib29sIGNhcHR1cmVDYWxsU3RhY2ssIEZyYW1lKiBm
cmFtZSkKK3ZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6cHVzaEN1cnJlbnRSZWNvcmQoUmVm
PEpTT046Ok9iamVjdD4mJiBkYXRhLCBUaW1lbGluZVJlY29yZFR5cGUgdHlwZSwgYm9vbCBjYXB0
dXJlQ2FsbFN0YWNrLCBGcmFtZSogZnJhbWUpCiB7CiAgICAgcHVzaEN1cnJlbnRSZWNvcmQoY3Jl
YXRlUmVjb3JkRW50cnkoV1RGTW92ZShkYXRhKSwgdHlwZSwgY2FwdHVyZUNhbGxTdGFjaywgZnJh
bWUpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5z
cGVjdG9yVGltZWxpbmVBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9J
bnNwZWN0b3JUaW1lbGluZUFnZW50LmgKaW5kZXggYWU3NTc5YTE1ZjA1NzJiNTJmOWFhZTFhZmJl
ZTA5MmZiODI0YzgxOS4uZmU3NWU0MGI0MzRmODVkOTczYWVkYmI0Mjk3YTk0YmFlMThmYmIyYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JUaW1l
bGluZUFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0
b3JUaW1lbGluZUFnZW50LmgKQEAgLTUwLDggKzUwLDYgQEAgY2xhc3MgRnJhbWU7CiBjbGFzcyBS
ZW5kZXJPYmplY3Q7CiBjbGFzcyBSdW5Mb29wT2JzZXJ2ZXI7CiAKLXR5cGVkZWYgU3RyaW5nIEVy
cm9yU3RyaW5nOwotCiBlbnVtIGNsYXNzIFRpbWVsaW5lUmVjb3JkVHlwZSB7CiAgICAgRXZlbnRE
aXNwYXRjaCwKICAgICBTY2hlZHVsZVN0eWxlUmVjYWxjdWxhdGlvbiwKQEAgLTg4LDIyICs4Niwy
MiBAQCBjbGFzcyBJbnNwZWN0b3JUaW1lbGluZUFnZW50IGZpbmFsIDogcHVibGljIEluc3BlY3Rv
ckFnZW50QmFzZSAsIHB1YmxpYyBJbnNwZWN0bwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OwogcHVibGljOgogICAgIEluc3BlY3RvclRpbWVsaW5lQWdlbnQoUGFnZUFnZW50Q29udGV4dCYp
OwotICAgIH5JbnNwZWN0b3JUaW1lbGluZUFnZW50KCkgb3ZlcnJpZGU7CisgICAgfkluc3BlY3Rv
clRpbWVsaW5lQWdlbnQoKTsKIAogICAgIC8vIEluc3BlY3RvckFnZW50QmFzZQotICAgIHZvaWQg
ZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRSb3V0ZXIqLCBJ
bnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyKikgb3ZlcnJpZGU7Ci0gICAgdm9pZCB3aWxsRGVz
dHJveUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24pIG92ZXJy
aWRlOworICAgIHZvaWQgZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJv
bnRlbmRSb3V0ZXIqLCBJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyKik7CisgICAgdm9pZCB3
aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24p
OwogCiAgICAgLy8gVGltZWxpbmVCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIKLSAgICB2b2lkIGVu
YWJsZShFcnJvclN0cmluZyYpIG92ZXJyaWRlOwotICAgIHZvaWQgZGlzYWJsZShFcnJvclN0cmlu
ZyYpIG92ZXJyaWRlOwotICAgIHZvaWQgc3RhcnQoRXJyb3JTdHJpbmcmLCBjb25zdCBpbnQqIG1h
eENhbGxTdGFja0RlcHRoID0gbnVsbHB0cikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzdG9wKEVycm9y
U3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRBdXRvQ2FwdHVyZUVuYWJsZWQoRXJyb3JT
dHJpbmcmLCBib29sKSBvdmVycmlkZTsKLSAgICB2b2lkIHNldEluc3RydW1lbnRzKEVycm9yU3Ry
aW5nJiwgY29uc3QgSlNPTjo6QXJyYXkmKSBvdmVycmlkZTsKKyAgICBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGVuYWJsZSgpOworICAgIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZGlzYWJsZSgpOworICAgIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc3RhcnQoT3B0aW9uYWw8aW50PiYmIG1heENhbGxTdGFj
a0RlcHRoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHN0
b3AoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHNldEF1
dG9DYXB0dXJlRW5hYmxlZChib29sKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0
cmluZ09yPHZvaWQ+IHNldEluc3RydW1lbnRzKFJlZjxKU09OOjpBcnJheT4mJik7CiAKICAgICAv
LyBKU0M6OkRlYnVnZ2VyOjpPYnNlcnZlcgotICAgIHZvaWQgYnJlYWtwb2ludEFjdGlvblByb2Jl
KEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkJyZWFrcG9pbnRBY3Rpb25JRCwgdW5zaWduZWQg
YmF0Y2hJZCwgdW5zaWduZWQgc2FtcGxlSWQsIEpTQzo6SlNWYWx1ZSByZXN1bHQpIGZpbmFsOwor
ICAgIHZvaWQgYnJlYWtwb2ludEFjdGlvblByb2JlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6
OkJyZWFrcG9pbnRBY3Rpb25JRCwgdW5zaWduZWQgYmF0Y2hJZCwgdW5zaWduZWQgc2FtcGxlSWQs
IEpTQzo6SlNWYWx1ZSByZXN1bHQpOwogCiAgICAgLy8gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
CiAgICAgdm9pZCBkaWRJbnN0YWxsVGltZXIoaW50IHRpbWVySWQsIFNlY29uZHMgdGltZW91dCwg
Ym9vbCBzaW5nbGVTaG90LCBGcmFtZSopOwpAQCAtMTYwLDkgKzE1OCw3IEBAIHByaXZhdGU6CiAg
ICAgZnJpZW5kIGNsYXNzIFRpbWVsaW5lUmVjb3JkU3RhY2s7CiAKICAgICBzdHJ1Y3QgVGltZWxp
bmVSZWNvcmRFbnRyeSB7Ci0gICAgICAgIFRpbWVsaW5lUmVjb3JkRW50cnkoKQotICAgICAgICAg
ICAgOiB0eXBlKFRpbWVsaW5lUmVjb3JkVHlwZTo6RXZlbnREaXNwYXRjaCkgeyB9Ci0gICAgICAg
IFRpbWVsaW5lUmVjb3JkRW50cnkoUmVmUHRyPEpTT046Ok9iamVjdD4mJiByZWNvcmQsIFJlZlB0
cjxKU09OOjpPYmplY3Q+JiYgZGF0YSwgUmVmUHRyPEpTT046OkFycmF5PiYmIGNoaWxkcmVuLCBU
aW1lbGluZVJlY29yZFR5cGUgdHlwZSkKKyAgICAgICAgVGltZWxpbmVSZWNvcmRFbnRyeShSZWY8
SlNPTjo6T2JqZWN0PiYmIHJlY29yZCwgUmVmPEpTT046Ok9iamVjdD4mJiBkYXRhLCBSZWZQdHI8
SlNPTjo6QXJyYXk+JiYgY2hpbGRyZW4sIFRpbWVsaW5lUmVjb3JkVHlwZSB0eXBlKQogICAgICAg
ICAgICAgOiByZWNvcmQoV1RGTW92ZShyZWNvcmQpKQogICAgICAgICAgICAgLCBkYXRhKFdURk1v
dmUoZGF0YSkpCiAgICAgICAgICAgICAsIGNoaWxkcmVuKFdURk1vdmUoY2hpbGRyZW4pKQpAQCAt
MTcwLDI5ICsxNjYsMjkgQEAgcHJpdmF0ZToKICAgICAgICAgewogICAgICAgICB9CiAKLSAgICAg
ICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcmVjb3JkOwotICAgICAgICBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiBkYXRhOworICAgICAgICBSZWY8SlNPTjo6T2JqZWN0PiByZWNvcmQ7CisgICAgICAgIFJl
ZjxKU09OOjpPYmplY3Q+IGRhdGE7CiAgICAgICAgIFJlZlB0cjxKU09OOjpBcnJheT4gY2hpbGRy
ZW47CiAgICAgICAgIFRpbWVsaW5lUmVjb3JkVHlwZSB0eXBlOwogICAgIH07CiAKLSAgICB2b2lk
IGludGVybmFsU3RhcnQoY29uc3QgaW50KiBtYXhDYWxsU3RhY2tEZXB0aCA9IG51bGxwdHIpOwor
ICAgIHZvaWQgaW50ZXJuYWxTdGFydChPcHRpb25hbDxpbnQ+JiYgbWF4Q2FsbFN0YWNrRGVwdGgp
OwogICAgIHZvaWQgaW50ZXJuYWxTdG9wKCk7CiAgICAgZG91YmxlIHRpbWVzdGFtcCgpOwogCi0g
ICAgdm9pZCBzZW5kRXZlbnQoUmVmUHRyPEpTT046Ok9iamVjdD4mJik7Ci0gICAgdm9pZCBhcHBl
bmRSZWNvcmQoUmVmUHRyPEpTT046Ok9iamVjdD4mJiBkYXRhLCBUaW1lbGluZVJlY29yZFR5cGUs
IGJvb2wgY2FwdHVyZUNhbGxTdGFjaywgRnJhbWUqKTsKLSAgICB2b2lkIHB1c2hDdXJyZW50UmVj
b3JkKFJlZlB0cjxKU09OOjpPYmplY3Q+JiYsIFRpbWVsaW5lUmVjb3JkVHlwZSwgYm9vbCBjYXB0
dXJlQ2FsbFN0YWNrLCBGcmFtZSopOworICAgIHZvaWQgc2VuZEV2ZW50KFJlZjxKU09OOjpPYmpl
Y3Q+JiYpOworICAgIHZvaWQgYXBwZW5kUmVjb3JkKFJlZjxKU09OOjpPYmplY3Q+JiYgZGF0YSwg
VGltZWxpbmVSZWNvcmRUeXBlLCBib29sIGNhcHR1cmVDYWxsU3RhY2ssIEZyYW1lKik7CisgICAg
dm9pZCBwdXNoQ3VycmVudFJlY29yZChSZWY8SlNPTjo6T2JqZWN0PiYmLCBUaW1lbGluZVJlY29y
ZFR5cGUsIGJvb2wgY2FwdHVyZUNhbGxTdGFjaywgRnJhbWUqKTsKICAgICB2b2lkIHB1c2hDdXJy
ZW50UmVjb3JkKGNvbnN0IFRpbWVsaW5lUmVjb3JkRW50cnkmIHJlY29yZCkgeyBtX3JlY29yZFN0
YWNrLmFwcGVuZChyZWNvcmQpOyB9CiAKLSAgICBUaW1lbGluZVJlY29yZEVudHJ5IGNyZWF0ZVJl
Y29yZEVudHJ5KFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgZGF0YSwgVGltZWxpbmVSZWNvcmRUeXBl
LCBib29sIGNhcHR1cmVDYWxsU3RhY2ssIEZyYW1lKik7CisgICAgVGltZWxpbmVSZWNvcmRFbnRy
eSBjcmVhdGVSZWNvcmRFbnRyeShSZWY8SlNPTjo6T2JqZWN0PiYmIGRhdGEsIFRpbWVsaW5lUmVj
b3JkVHlwZSwgYm9vbCBjYXB0dXJlQ2FsbFN0YWNrLCBGcmFtZSopOwogCiAgICAgdm9pZCBzZXRG
cmFtZUlkZW50aWZpZXIoSlNPTjo6T2JqZWN0KiByZWNvcmQsIEZyYW1lKik7CiAKICAgICB2b2lk
IGRpZENvbXBsZXRlUmVjb3JkRW50cnkoY29uc3QgVGltZWxpbmVSZWNvcmRFbnRyeSYpOwogICAg
IHZvaWQgZGlkQ29tcGxldGVDdXJyZW50UmVjb3JkKFRpbWVsaW5lUmVjb3JkVHlwZSk7CiAKLSAg
ICB2b2lkIGFkZFJlY29yZFRvVGltZWxpbmUoUmVmUHRyPEpTT046Ok9iamVjdD4mJiwgVGltZWxp
bmVSZWNvcmRUeXBlKTsKKyAgICB2b2lkIGFkZFJlY29yZFRvVGltZWxpbmUoUmVmPEpTT046Ok9i
amVjdD4mJiwgVGltZWxpbmVSZWNvcmRUeXBlKTsKIAogICAgIHZvaWQgbG9jYWxUb1BhZ2VRdWFk
KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IExheW91dFJlY3QmLCBGbG9hdFF1YWQqKTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JXb3Jr
ZXJBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rvcldv
cmtlckFnZW50LmNwcAppbmRleCA5MDljNDY2Zjg3ZTliZmE4YzRjMTcyOGM0NmFkNmU3ZTU5MDdi
NDZlLi4zM2NhYTBhYTIwNzlhZDQwODFjYzI5NjA1YTUzNTM3YzI0ZDY2YmVmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvcldvcmtlckFnZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvcldvcmtlckFn
ZW50LmNwcApAQCAtNTMsNTUgKzUzLDU2IEBAIHZvaWQgSW5zcGVjdG9yV29ya2VyQWdlbnQ6Ondp
bGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKERpc2Nvbm5lY3RSZWFzb24pCiB7CiAgICAgbV9p
bnN0cnVtZW50aW5nQWdlbnRzLnNldFBlcnNpc3RlbnRXb3JrZXJBZ2VudChudWxscHRyKTsKIAot
ICAgIEVycm9yU3RyaW5nIGlnbm9yZWQ7Ci0gICAgZGlzYWJsZShpZ25vcmVkKTsKKyAgICBkaXNh
YmxlKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yV29ya2VyQWdlbnQ6OmVuYWJsZShFcnJvclN0cmlu
ZyYpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JXb3JrZXJBZ2VudDo6
ZW5hYmxlKCkKIHsKICAgICBpZiAobV9lbmFibGVkKQotICAgICAgICByZXR1cm47CisgICAgICAg
IHJldHVybiB7IH07CiAKICAgICBtX2VuYWJsZWQgPSB0cnVlOwogCiAgICAgY29ubmVjdFRvQWxs
V29ya2VySW5zcGVjdG9yUHJveGllc0ZvclBhZ2UoKTsKKworICAgIHJldHVybiB7IH07CiB9CiAK
LXZvaWQgSW5zcGVjdG9yV29ya2VyQWdlbnQ6OmRpc2FibGUoRXJyb3JTdHJpbmcmKQorUHJvdG9j
b2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yV29ya2VyQWdlbnQ6OmRpc2FibGUoKQog
ewogICAgIGlmICghbV9lbmFibGVkKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB7
IH07CiAKICAgICBtX2VuYWJsZWQgPSBmYWxzZTsKIAogICAgIGRpc2Nvbm5lY3RGcm9tQWxsV29y
a2VySW5zcGVjdG9yUHJveGllcygpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNw
ZWN0b3JXb3JrZXJBZ2VudDo6aW5pdGlhbGl6ZWQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBj
b25zdCBTdHJpbmcmIHdvcmtlcklkKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5z
cGVjdG9yV29ya2VyQWdlbnQ6OmluaXRpYWxpemVkKGNvbnN0IFN0cmluZyYgd29ya2VySWQpCiB7
CiAgICAgV29ya2VySW5zcGVjdG9yUHJveHkqIHByb3h5ID0gbV9jb25uZWN0ZWRQcm94aWVzLmdl
dCh3b3JrZXJJZCk7Ci0gICAgaWYgKCFwcm94eSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJN
aXNzaW5nIHdvcmtlciBmb3IgZ2l2ZW4gd29ya2VySWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9CisgICAgaWYgKCFwcm94eSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJNaXNz
aW5nIHdvcmtlciBmb3IgZ2l2ZW4gd29ya2VySWQiX3MpOwogCiAgICAgcHJveHktPnJlc3VtZVdv
cmtlcklmUGF1c2VkKCk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3Rvcldv
cmtlckFnZW50OjpzZW5kTWVzc2FnZVRvV29ya2VyKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywg
Y29uc3QgU3RyaW5nJiB3b3JrZXJJZCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQorUHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yV29ya2VyQWdlbnQ6OnNlbmRNZXNzYWdlVG9X
b3JrZXIoY29uc3QgU3RyaW5nJiB3b3JrZXJJZCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQogewot
ICAgIGlmICghbV9lbmFibGVkKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIldvcmtlciBkb21h
aW4gbXVzdCBiZSBlbmFibGVkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICgh
bV9lbmFibGVkKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIldvcmtlciBkb21haW4g
bXVzdCBiZSBlbmFibGVkIl9zKTsKIAogICAgIFdvcmtlckluc3BlY3RvclByb3h5KiBwcm94eSA9
IG1fY29ubmVjdGVkUHJveGllcy5nZXQod29ya2VySWQpOwotICAgIGlmICghcHJveHkpIHsKLSAg
ICAgICAgZXJyb3JTdHJpbmcgPSAiTWlzc2luZyB3b3JrZXIgZm9yIGdpdmVuIHdvcmtlcklkIl9z
OwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghcHJveHkpCisgICAgICAgIHJldHVy
biBtYWtlVW5leHBlY3RlZCgiTWlzc2luZyB3b3JrZXIgZm9yIGdpdmVuIHdvcmtlcklkIl9zKTsK
IAogICAgIHByb3h5LT5zZW5kTWVzc2FnZVRvV29ya2VySW5zcGVjdG9yQ29udHJvbGxlcihtZXNz
YWdlKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKIHZvaWQgSW5zcGVjdG9yV29ya2VyQWdlbnQ6
OnNlbmRNZXNzYWdlRnJvbVdvcmtlclRvRnJvbnRlbmQoV29ya2VySW5zcGVjdG9yUHJveHkmIHBy
b3h5LCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvcldvcmtlckFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvcldvcmtlckFnZW50LmgKaW5kZXggMTdkMWJlYWU5MDEw
ZjMyMDAxYWM2NGRkOWQ4OTJhOTNmMTBhN2Q1Ni4uNjM2YmM4MWRkNWE1MGFlZTA1M2MyZTA0ZTY4
Njk5ZDNmYTZiNjRlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50
cy9JbnNwZWN0b3JXb3JrZXJBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9h
Z2VudHMvSW5zcGVjdG9yV29ya2VyQWdlbnQuaApAQCAtMzUsMjcgKzM1LDI1IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogY2xhc3MgUGFnZTsKIAotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7
Ci0KIGNsYXNzIEluc3BlY3RvcldvcmtlckFnZW50IGZpbmFsIDogcHVibGljIEluc3BlY3RvckFn
ZW50QmFzZSwgcHVibGljIEluc3BlY3Rvcjo6V29ya2VyQmFja2VuZERpc3BhdGNoZXJIYW5kbGVy
LCBwdWJsaWMgV29ya2VySW5zcGVjdG9yUHJveHk6OlBhZ2VDaGFubmVsIHsKICAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShJbnNwZWN0b3JXb3JrZXJBZ2VudCk7CiAgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgSW5zcGVjdG9yV29ya2VyQWdlbnQoUGFnZUFnZW50Q29u
dGV4dCYpOwotICAgIH5JbnNwZWN0b3JXb3JrZXJBZ2VudCgpIG92ZXJyaWRlOworICAgIH5JbnNw
ZWN0b3JXb3JrZXJBZ2VudCgpOwogCiAgICAgLy8gSW5zcGVjdG9yQWdlbnRCYXNlCi0gICAgdm9p
ZCBkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9udGVuZFJvdXRlcios
IEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXIqKSBvdmVycmlkZTsKLSAgICB2b2lkIHdpbGxE
ZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlzY29ubmVjdFJlYXNvbikgb3Zl
cnJpZGU7CisgICAgdm9pZCBkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpG
cm9udGVuZFJvdXRlciosIEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXIqKTsKKyAgICB2b2lk
IHdpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlzY29ubmVjdFJlYXNv
bik7CiAKICAgICAvLyBXb3JrZXJCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIKLSAgICB2b2lkIGVu
YWJsZShFcnJvclN0cmluZyYpIG92ZXJyaWRlOwotICAgIHZvaWQgZGlzYWJsZShFcnJvclN0cmlu
ZyYpIG92ZXJyaWRlOwotICAgIHZvaWQgaW5pdGlhbGl6ZWQoRXJyb3JTdHJpbmcmLCBjb25zdCBT
dHJpbmcmIHdvcmtlcklkKSBvdmVycmlkZTsKLSAgICB2b2lkIHNlbmRNZXNzYWdlVG9Xb3JrZXIo
RXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHdvcmtlcklkLCBjb25zdCBTdHJpbmcmIG1lc3Nh
Z2UpIG92ZXJyaWRlOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9p
ZD4gZW5hYmxlKCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lk
PiBkaXNhYmxlKCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lk
PiBpbml0aWFsaXplZChjb25zdCBTdHJpbmcmIHdvcmtlcklkKTsKKyAgICBJbnNwZWN0b3I6OlBy
b3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHNlbmRNZXNzYWdlVG9Xb3JrZXIoY29uc3QgU3Ry
aW5nJiB3b3JrZXJJZCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKIAogICAgIC8vIFdvcmtlcklu
c3BlY3RvclByb3h5OjpQYWdlQ2hhbm5lbAotICAgIHZvaWQgc2VuZE1lc3NhZ2VGcm9tV29ya2Vy
VG9Gcm9udGVuZChXb3JrZXJJbnNwZWN0b3JQcm94eSYsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkg
b3ZlcnJpZGU7CisgICAgdm9pZCBzZW5kTWVzc2FnZUZyb21Xb3JrZXJUb0Zyb250ZW5kKFdvcmtl
ckluc3BlY3RvclByb3h5JiwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKIAogICAgIC8vIEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbgogICAgIGJvb2wgc2hvdWxkV2FpdEZvckRlYnVnZ2VyT25TdGFy
dCgpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9X
ZWJDb25zb2xlQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvV2ViQ29u
c29sZUFnZW50LmgKaW5kZXggZjdkODI3ODA3MGZlNDcwMjk5ZjJkZDZiYWI2NjQ2MmQ1ODU4ODkw
NS4uMGI4ZjIwZWFjMzQzYjY2ODE3YWM5ZjBmMGM2YzhjYjIwYzliYWM3YiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9XZWJDb25zb2xlQWdlbnQuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL1dlYkNvbnNvbGVBZ2VudC5oCkBAIC0zMyw3
ICszMyw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIERPTVdpbmRvdzsKIGNsYXNzIFJl
c291cmNlRXJyb3I7CiBjbGFzcyBSZXNvdXJjZVJlc3BvbnNlOwotdHlwZWRlZiBTdHJpbmcgRXJy
b3JTdHJpbmc7CiAKIGNsYXNzIFdlYkNvbnNvbGVBZ2VudCA6IHB1YmxpYyBJbnNwZWN0b3I6Oklu
c3BlY3RvckNvbnNvbGVBZ2VudCB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoV2ViQ29uc29s
ZUFnZW50KTsKQEAgLTQ2LDggKzQ1LDYgQEAgcHVibGljOgogICAgIHZvaWQgZnJhbWVXaW5kb3dE
aXNjYXJkZWQoRE9NV2luZG93Kik7CiAgICAgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UodW5zaWdu
ZWQgbG9uZyByZXF1ZXN0SWRlbnRpZmllciwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOwogICAg
IHZvaWQgZGlkRmFpbExvYWRpbmcodW5zaWduZWQgbG9uZyByZXF1ZXN0SWRlbnRpZmllciwgY29u
c3QgUmVzb3VyY2VFcnJvciYpOwotCi1wcm90ZWN0ZWQ6CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL1dlYkRl
YnVnZ2VyQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9XZWJEZWJ1
Z2dlckFnZW50LmNwcAppbmRleCBiOTNhODFmYmY0ZjUwNjQ2NmFkYjNlMTNiYmU4OGNjNTM5MjM1
YjdlLi4xYzYxMzU3YWZkY2UzNTBhZTIzYWJjMjA3ZjIyNzA0Yzk0ZWJmNGYzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL1dlYkRlYnVnZ2VyQWdlbnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvV2ViRGVidWdnZXJBZ2VudC5jcHAK
QEAgLTQ5LDE4ICs0OSwxOCBAQCBib29sIFdlYkRlYnVnZ2VyQWdlbnQ6OmVuYWJsZWQoKSBjb25z
dAogICAgIHJldHVybiBtX2luc3RydW1lbnRpbmdBZ2VudHMuZW5hYmxlZFdlYkRlYnVnZ2VyQWdl
bnQoKSA9PSB0aGlzICYmIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmVuYWJsZWQoKTsKIH0KIAot
dm9pZCBXZWJEZWJ1Z2dlckFnZW50OjplbmFibGUoKQordm9pZCBXZWJEZWJ1Z2dlckFnZW50Ojpp
bnRlcm5hbEVuYWJsZSgpCiB7CiAgICAgbV9pbnN0cnVtZW50aW5nQWdlbnRzLnNldEVuYWJsZWRX
ZWJEZWJ1Z2dlckFnZW50KHRoaXMpOwogCi0gICAgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZW5h
YmxlKCk7CisgICAgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6aW50ZXJuYWxFbmFibGUoKTsKIH0K
IAotdm9pZCBXZWJEZWJ1Z2dlckFnZW50OjpkaXNhYmxlKGJvb2wgaXNCZWluZ0Rlc3Ryb3llZCkK
K3ZvaWQgV2ViRGVidWdnZXJBZ2VudDo6aW50ZXJuYWxEaXNhYmxlKGJvb2wgaXNCZWluZ0Rlc3Ry
b3llZCkKIHsKICAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMuc2V0RW5hYmxlZFdlYkRlYnVnZ2Vy
QWdlbnQobnVsbHB0cik7CiAKLSAgICBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkaXNhYmxlKGlz
QmVpbmdEZXN0cm95ZWQpOworICAgIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmludGVybmFsRGlz
YWJsZShpc0JlaW5nRGVzdHJveWVkKTsKIH0KIAogdm9pZCBXZWJEZWJ1Z2dlckFnZW50OjpkaWRB
ZGRFdmVudExpc3RlbmVyKEV2ZW50VGFyZ2V0JiB0YXJnZXQsIGNvbnN0IEF0b21TdHJpbmcmIGV2
ZW50VHlwZSwgRXZlbnRMaXN0ZW5lciYgbGlzdGVuZXIsIGJvb2wgY2FwdHVyZSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvV2ViRGVidWdnZXJBZ2VudC5oIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9XZWJEZWJ1Z2dlckFnZW50LmgKaW5kZXgg
MTBiOTY0ODg4MWFhMDE1NjRmY2JlNzJlNzRmZmJhYzc5Njg0NTc2Mi4uYTkyMzcxZGE1ZDIzYWEw
NWVkYjY4OTg3NTllYTQxMWVlNzVhNjk4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2FnZW50cy9XZWJEZWJ1Z2dlckFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2FnZW50cy9XZWJEZWJ1Z2dlckFnZW50LmgKQEAgLTM1LDcgKzM1LDYgQEAgY2xhc3Mg
RXZlbnRUYXJnZXQ7CiBjbGFzcyBJbnN0cnVtZW50aW5nQWdlbnRzOwogY2xhc3MgUmVnaXN0ZXJl
ZEV2ZW50TGlzdGVuZXI7CiBjbGFzcyBUaW1lckJhc2U7Ci10eXBlZGVmIFN0cmluZyBFcnJvclN0
cmluZzsKIAogY2xhc3MgV2ViRGVidWdnZXJBZ2VudCA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3Bl
Y3RvckRlYnVnZ2VyQWdlbnQgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFdlYkRlYnVnZ2Vy
QWdlbnQpOwpAQCAtNTYsOCArNTUsOCBAQCBwdWJsaWM6CiAKIHByb3RlY3RlZDoKICAgICBXZWJE
ZWJ1Z2dlckFnZW50KFdlYkFnZW50Q29udGV4dCYpOwotICAgIHZvaWQgZW5hYmxlKCkgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCBkaXNhYmxlKGJvb2wgaXNCZWluZ0Rlc3Ryb3llZCkgb3ZlcnJpZGU7Cisg
ICAgdm9pZCBpbnRlcm5hbEVuYWJsZSgpIG92ZXJyaWRlOworICAgIHZvaWQgaW50ZXJuYWxEaXNh
YmxlKGJvb2wgaXNCZWluZ0Rlc3Ryb3llZCkgb3ZlcnJpZGU7CiAKICAgICB2b2lkIGRpZENsZWFy
QXN5bmNTdGFja1RyYWNlRGF0YSgpIGZpbmFsOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvYWdlbnRzL1dlYkhlYXBBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvYWdlbnRzL1dlYkhlYXBBZ2VudC5jcHAKaW5kZXggNWFhNzQ1M2QwOTU2MDc2Mjc4ZWIw
MzBmODA4ZGRmMDE0ZGFiZmI4NS4uOTI3NWU4Zjc5ZDAwZmUxYTExODIxZWQ4YTg2OWMwZTE3YjQw
ODAyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9XZWJIZWFw
QWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvV2ViSGVhcEFn
ZW50LmNwcApAQCAtMzUsNyArMzUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1l
c3BhY2UgSW5zcGVjdG9yOwogCiBzdHJ1Y3QgR2FyYmFnZUNvbGxlY3Rpb25EYXRhIHsKLSAgICBJ
bnNwZWN0b3I6OlByb3RvY29sOjpIZWFwOjpHYXJiYWdlQ29sbGVjdGlvbjo6VHlwZSB0eXBlOwor
ICAgIFByb3RvY29sOjpIZWFwOjpHYXJiYWdlQ29sbGVjdGlvbjo6VHlwZSB0eXBlOwogICAgIFNl
Y29uZHMgc3RhcnRUaW1lOwogICAgIFNlY29uZHMgZW5kVGltZTsKIH07CkBAIC0xMDMsMjUgKzEw
MywyNyBAQCBXZWJIZWFwQWdlbnQ6OldlYkhlYXBBZ2VudChXZWJBZ2VudENvbnRleHQmIGNvbnRl
eHQpCiAKIFdlYkhlYXBBZ2VudDo6fldlYkhlYXBBZ2VudCgpID0gZGVmYXVsdDsKIAotdm9pZCBX
ZWJIZWFwQWdlbnQ6OmVuYWJsZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCitQcm90b2NvbDo6
RXJyb3JTdHJpbmdPcjx2b2lkPiBXZWJIZWFwQWdlbnQ6OmVuYWJsZSgpCiB7Ci0gICAgSW5zcGVj
dG9ySGVhcEFnZW50OjplbmFibGUoZXJyb3JTdHJpbmcpOworICAgIGF1dG8gcmVzdWx0ID0gSW5z
cGVjdG9ySGVhcEFnZW50OjplbmFibGUoKTsKIAogICAgIGlmIChhdXRvKiBjb25zb2xlQWdlbnQg
PSBtX2luc3RydW1lbnRpbmdBZ2VudHMud2ViQ29uc29sZUFnZW50KCkpCiAgICAgICAgIGNvbnNv
bGVBZ2VudC0+c2V0SGVhcEFnZW50KHRoaXMpOworCisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAot
dm9pZCBXZWJIZWFwQWdlbnQ6OmRpc2FibGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nKQorUHJv
dG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gV2ViSGVhcEFnZW50OjpkaXNhYmxlKCkKIHsKICAg
ICBtX3NlbmRHYXJiYWdlQ29sbGVjdGlvbkV2ZW50c1Rhc2stPnJlc2V0KCk7CiAKICAgICBpZiAo
YXV0byogY29uc29sZUFnZW50ID0gbV9pbnN0cnVtZW50aW5nQWdlbnRzLndlYkNvbnNvbGVBZ2Vu
dCgpKQogICAgICAgICBjb25zb2xlQWdlbnQtPnNldEhlYXBBZ2VudChudWxscHRyKTsKIAotICAg
IEluc3BlY3RvckhlYXBBZ2VudDo6ZGlzYWJsZShlcnJvclN0cmluZyk7CisgICAgcmV0dXJuIElu
c3BlY3RvckhlYXBBZ2VudDo6ZGlzYWJsZSgpOwogfQogCi12b2lkIFdlYkhlYXBBZ2VudDo6ZGlz
cGF0Y2hHYXJiYWdlQ29sbGVjdGVkRXZlbnQoSW5zcGVjdG9yOjpQcm90b2NvbDo6SGVhcDo6R2Fy
YmFnZUNvbGxlY3Rpb246OlR5cGUgdHlwZSwgU2Vjb25kcyBzdGFydFRpbWUsIFNlY29uZHMgZW5k
VGltZSkKK3ZvaWQgV2ViSGVhcEFnZW50OjpkaXNwYXRjaEdhcmJhZ2VDb2xsZWN0ZWRFdmVudChQ
cm90b2NvbDo6SGVhcDo6R2FyYmFnZUNvbGxlY3Rpb246OlR5cGUgdHlwZSwgU2Vjb25kcyBzdGFy
dFRpbWUsIFNlY29uZHMgZW5kVGltZSkKIHsKICAgICAvLyBEaXNwYXRjaCB0aGUgZXZlbnQgYXN5
bmNocm9ub3VzbHkgYmVjYXVzZSB0aGlzIG1ldGhvZCBtYXkgYmUKICAgICAvLyBjYWxsZWQgYmV0
d2VlbiBjb2xsZWN0aW9uIGFuZCBzd2VlcGluZyBhbmQgd2UgZG9uJ3Qgd2FudCB0bwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9XZWJIZWFwQWdlbnQuaCBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvV2ViSGVhcEFnZW50LmgKaW5kZXggMGJjOGU2
NGFmNWE4NmE3MmQ1ZjgwNDQwZmRiMTE2M2ZlMTdlMTU3My4uYTM1ZTU3Y2M3YTcxZjhhZjQxMzg2
Mzc4N2NlZjM2YmVlNDE2ZjZiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2FnZW50cy9XZWJIZWFwQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdl
bnRzL1dlYkhlYXBBZ2VudC5oCkBAIC0zMyw3ICszMyw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogY2xhc3MgU2VuZEdhcmJhZ2VDb2xsZWN0aW9uRXZlbnRzVGFzazsKIHN0cnVjdCBHYXJiYWdl
Q29sbGVjdGlvbkRhdGE7Ci10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKIAogY2xhc3MgV2Vi
SGVhcEFnZW50IDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9ySGVhcEFnZW50IHsKICAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShXZWJIZWFwQWdlbnQpOwpAQCAtNDQsOCArNDMsOCBAQCBwdWJs
aWM6CiAgICAgfldlYkhlYXBBZ2VudCgpIG92ZXJyaWRlOwogCiAgICAgLy8gSGVhcEJhY2tlbmRE
aXNwYXRjaGVySGFuZGxlcgotICAgIHZvaWQgZW5hYmxlKEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7
Ci0gICAgdm9pZCBkaXNhYmxlKEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7CisgICAgSW5zcGVjdG9y
OjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBlbmFibGUoKSBvdmVycmlkZTsKKyAgICBJ
bnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGRpc2FibGUoKSBvdmVycmlk
ZTsKIAogcHJvdGVjdGVkOgogICAgIHZvaWQgZGlzcGF0Y2hHYXJiYWdlQ29sbGVjdGVkRXZlbnQo
SW5zcGVjdG9yOjpQcm90b2NvbDo6SGVhcDo6R2FyYmFnZUNvbGxlY3Rpb246OlR5cGUsIFNlY29u
ZHMgc3RhcnRUaW1lLCBTZWNvbmRzIGVuZFRpbWUpIGZpbmFsOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VBdWRpdEFnZW50LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlQXVkaXRBZ2VudC5jcHAKaW5kZXgg
ZGRkNTNiYTVkZmJjYTU1MzdiYmI2YjdiZTA2NTA1N2Q3MmZiYWJkOC4uOWFjZmU0ZGQ0YjE2MGVl
OWIzODkxMGNjOWM3NWEyNDEyNGNlZmVkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VBdWRpdEFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZUF1ZGl0QWdlbnQuY3BwCkBAIC01Niw3ICs1Niw3
IEBAIFBhZ2VBdWRpdEFnZW50OjpQYWdlQXVkaXRBZ2VudChQYWdlQWdlbnRDb250ZXh0JiBjb250
ZXh0KQogCiBQYWdlQXVkaXRBZ2VudDo6flBhZ2VBdWRpdEFnZW50KCkgPSBkZWZhdWx0OwogCi1J
bmplY3RlZFNjcmlwdCBQYWdlQXVkaXRBZ2VudDo6aW5qZWN0ZWRTY3JpcHRGb3JFdmFsKGNvbnN0
IGludCogZXhlY3V0aW9uQ29udGV4dElkKQorSW5qZWN0ZWRTY3JpcHQgUGFnZUF1ZGl0QWdlbnQ6
OmluamVjdGVkU2NyaXB0Rm9yRXZhbChPcHRpb25hbDxQcm90b2NvbDo6UnVudGltZTo6RXhlY3V0
aW9uQ29udGV4dElkPiYmIGV4ZWN1dGlvbkNvbnRleHRJZCkKIHsKICAgICBpZiAoZXhlY3V0aW9u
Q29udGV4dElkKQogICAgICAgICByZXR1cm4gaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKCkuaW5qZWN0
ZWRTY3JpcHRGb3JJZCgqZXhlY3V0aW9uQ29udGV4dElkKTsKQEAgLTY1LDkgKzY1LDkgQEAgSW5q
ZWN0ZWRTY3JpcHQgUGFnZUF1ZGl0QWdlbnQ6OmluamVjdGVkU2NyaXB0Rm9yRXZhbChjb25zdCBp
bnQqIGV4ZWN1dGlvbkNvbnRleHQKICAgICByZXR1cm4gaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKCku
aW5qZWN0ZWRTY3JpcHRGb3Ioc2NyaXB0U3RhdGUpOwogfQogCi1JbmplY3RlZFNjcmlwdCBQYWdl
QXVkaXRBZ2VudDo6aW5qZWN0ZWRTY3JpcHRGb3JFdmFsKEVycm9yU3RyaW5nJiBlcnJvclN0cmlu
ZywgY29uc3QgaW50KiBleGVjdXRpb25Db250ZXh0SWQpCitJbmplY3RlZFNjcmlwdCBQYWdlQXVk
aXRBZ2VudDo6aW5qZWN0ZWRTY3JpcHRGb3JFdmFsKFByb3RvY29sOjpFcnJvclN0cmluZyYgZXJy
b3JTdHJpbmcsIE9wdGlvbmFsPFByb3RvY29sOjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0SWQ+
JiYgZXhlY3V0aW9uQ29udGV4dElkKQogewotICAgIEluamVjdGVkU2NyaXB0IGluamVjdGVkU2Ny
aXB0ID0gaW5qZWN0ZWRTY3JpcHRGb3JFdmFsKGV4ZWN1dGlvbkNvbnRleHRJZCk7CisgICAgSW5q
ZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHQgPSBpbmplY3RlZFNjcmlwdEZvckV2YWwoV1RGTW92
ZShleGVjdXRpb25Db250ZXh0SWQpKTsKICAgICBpZiAoaW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1
ZSgpKSB7CiAgICAgICAgIGlmIChleGVjdXRpb25Db250ZXh0SWQpCiAgICAgICAgICAgICBlcnJv
clN0cmluZyA9ICJNaXNzaW5nIGluamVjdGVkIHNjcmlwdCBmb3IgZ2l2ZW4gZXhlY3V0aW9uQ29u
dGV4dElkIl9zOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9w
YWdlL1BhZ2VBdWRpdEFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3Bh
Z2UvUGFnZUF1ZGl0QWdlbnQuaAppbmRleCBkZGVjNDY1MTdlMWEwNWNiZjViZjhmZmQ3ZDFhYzg4
OGEwODk0Zjc5Li42OTNmYWMzMjc0NjlhOTA0NGQ4NzAxNzZmYWEyYTFkNDlmYmExYjM5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZUF1ZGl0QWdl
bnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZUF1ZGl0
QWdlbnQuaApAQCAtMzcsMTYgKzM3LDE2IEBAIGNsYXNzIFBhZ2VBdWRpdEFnZW50IGZpbmFsIDog
cHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yQXVkaXRBZ2VudCB7CiAgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgUGFnZUF1ZGl0QWdlbnQoUGFnZUFnZW50Q29udGV4
dCYpOwotICAgIH5QYWdlQXVkaXRBZ2VudCgpIG92ZXJyaWRlOworICAgIH5QYWdlQXVkaXRBZ2Vu
dCgpOwogCiBwcml2YXRlOgotICAgIEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRT
Y3JpcHRGb3JFdmFsKGNvbnN0IGludCogZXhlY3V0aW9uQ29udGV4dElkKTsKLSAgICBJbnNwZWN0
b3I6OkluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0Rm9yRXZhbChJbnNwZWN0b3I6OkVycm9y
U3RyaW5nJiwgY29uc3QgaW50KiBleGVjdXRpb25Db250ZXh0SWQpIG92ZXJyaWRlOworICAgIElu
c3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHRGb3JFdmFsKE9wdGlvbmFsPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkV4ZWN1dGlvbkNvbnRleHRJZD4mJik7CisgICAg
SW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdEZvckV2YWwoSW5zcGVjdG9y
OjpQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpS
dW50aW1lOjpFeGVjdXRpb25Db250ZXh0SWQ+JiYpOwogCi0gICAgdm9pZCBwb3B1bGF0ZUF1ZGl0
T2JqZWN0KEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlN0cm9uZzxKU0M6OkpTT2JqZWN0PiYg
YXVkaXRPYmplY3QpIG92ZXJyaWRlOworICAgIHZvaWQgcG9wdWxhdGVBdWRpdE9iamVjdChKU0M6
OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJvbmc8SlNDOjpKU09iamVjdD4mIGF1ZGl0T2JqZWN0
KTsKIAotICAgIHZvaWQgbXV0ZUNvbnNvbGUoKSBvdmVycmlkZTsKLSAgICB2b2lkIHVubXV0ZUNv
bnNvbGUoKSBvdmVycmlkZTsKKyAgICB2b2lkIG11dGVDb25zb2xlKCk7CisgICAgdm9pZCB1bm11
dGVDb25zb2xlKCk7CiAKICAgICBQYWdlJiBtX2luc3BlY3RlZFBhZ2U7CiB9OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VDb25zb2xlQWdlbnQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VDb25zb2xlQWdl
bnQuY3BwCmluZGV4IDEzZmQxZDdkYWJhYTk5ZDBiYjBjNDlmZjdiYjVlNTJmNTRjNjYzZDMuLjEy
MTJiODY2ZDllMjg5OTY3N2E5M2ZkNzE2YzFlODY4ZDNjMWZmZmIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlQ29uc29sZUFnZW50LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZUNvbnNvbGVBZ2VudC5j
cHAKQEAgLTU0LDc5ICs1NCw4MyBAQCBQYWdlQ29uc29sZUFnZW50OjpQYWdlQ29uc29sZUFnZW50
KFBhZ2VBZ2VudENvbnRleHQmIGNvbnRleHQpCiAKIFBhZ2VDb25zb2xlQWdlbnQ6On5QYWdlQ29u
c29sZUFnZW50KCkgPSBkZWZhdWx0OwogCi12b2lkIFBhZ2VDb25zb2xlQWdlbnQ6OmNsZWFyTWVz
c2FnZXMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8
dm9pZD4gUGFnZUNvbnNvbGVBZ2VudDo6Y2xlYXJNZXNzYWdlcygpCiB7CiAgICAgaWYgKGF1dG8q
IGRvbUFnZW50ID0gbV9pbnN0cnVtZW50aW5nQWdlbnRzLnBlcnNpc3RlbnRET01BZ2VudCgpKQog
ICAgICAgICBkb21BZ2VudC0+cmVsZWFzZURhbmdsaW5nTm9kZXMoKTsKIAotICAgIFdlYkNvbnNv
bGVBZ2VudDo6Y2xlYXJNZXNzYWdlcyhlcnJvclN0cmluZyk7CisgICAgcmV0dXJuIFdlYkNvbnNv
bGVBZ2VudDo6Y2xlYXJNZXNzYWdlcygpOwogfQogCi12b2lkIFBhZ2VDb25zb2xlQWdlbnQ6Omdl
dExvZ2dpbmdDaGFubmVscyhFcnJvclN0cmluZyYsIFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWw+PiYgY2hhbm5lbHMpCitQcm90b2NvbDo6
RXJyb3JTdHJpbmdPcjxSZWY8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6Q29uc29sZTo6Q2hhbm5l
bD4+PiBQYWdlQ29uc29sZUFnZW50OjpnZXRMb2dnaW5nQ2hhbm5lbHMoKQogewotICAgIHN0YXRp
YyBjb25zdCBzdHJ1Y3QgQ2hhbm5lbFRhYmxlIHsKLSAgICAgICAgTmV2ZXJEZXN0cm95ZWQ8U3Ry
aW5nPiBuYW1lOwotICAgICAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpDb25zb2xlOjpDaGFubmVs
U291cmNlIHNvdXJjZTsKLSAgICB9IGNoYW5uZWxUYWJsZVtdID0gewotICAgICAgICB7IE1BS0Vf
U1RBVElDX1NUUklOR19JTVBMKCJXZWJSVEMiKSwgSW5zcGVjdG9yOjpQcm90b2NvbDo6Q29uc29s
ZTo6Q2hhbm5lbFNvdXJjZTo6V2ViUlRDIH0sCi0gICAgICAgIHsgTUFLRV9TVEFUSUNfU1RSSU5H
X0lNUEwoIk1lZGlhIiksIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWxTb3Vy
Y2U6Ok1lZGlhIH0sCi0gICAgICAgIHsgTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwoIk1lZGlhU291
cmNlIiksIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWxTb3VyY2U6Ok1lZGlh
U291cmNlIH0sCi0gICAgfTsKKyAgICBhdXRvIGNoYW5uZWxzID0gSlNPTjo6QXJyYXlPZjxQcm90
b2NvbDo6Q29uc29sZTo6Q2hhbm5lbD46OmNyZWF0ZSgpOwogCi0gICAgY2hhbm5lbHMgPSBKU09O
OjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWw+OjpjcmVhdGUo
KTsKLQotICAgIHNpemVfdCBsZW5ndGggPSBXVEZfQVJSQVlfTEVOR1RIKGNoYW5uZWxUYWJsZSk7
Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICBhdXRv
KiBsb2dDaGFubmVsID0gZ2V0TG9nQ2hhbm5lbChjaGFubmVsVGFibGVbaV0ubmFtZSk7CisgICAg
YXV0byBhZGRMb2dDaGFubmVsID0gWyZdIChQcm90b2NvbDo6Q29uc29sZTo6Q2hhbm5lbFNvdXJj
ZSBzb3VyY2UpIHsKKyAgICAgICAgYXV0byogbG9nQ2hhbm5lbCA9IGdldExvZ0NoYW5uZWwoUHJv
dG9jb2w6OkhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKHNvdXJjZSkpOwogICAgICAgICBp
ZiAoIWxvZ0NoYW5uZWwpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgYXV0byBsZXZl
bCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWxMZXZlbDo6T2ZmOworICAg
ICAgICBhdXRvIGxldmVsID0gUHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWxMZXZlbDo6T2ZmOwog
ICAgICAgICBpZiAobG9nQ2hhbm5lbC0+c3RhdGUgIT0gV1RGTG9nQ2hhbm5lbFN0YXRlOjpPZmYp
IHsKICAgICAgICAgICAgIHN3aXRjaCAobG9nQ2hhbm5lbC0+bGV2ZWwpIHsKICAgICAgICAgICAg
IGNhc2UgV1RGTG9nTGV2ZWw6OkFsd2F5czoKICAgICAgICAgICAgIGNhc2UgV1RGTG9nTGV2ZWw6
OkVycm9yOgogICAgICAgICAgICAgY2FzZSBXVEZMb2dMZXZlbDo6V2FybmluZzoKICAgICAgICAg
ICAgIGNhc2UgV1RGTG9nTGV2ZWw6OkluZm86Ci0gICAgICAgICAgICAgICAgbGV2ZWwgPSBJbnNw
ZWN0b3I6OlByb3RvY29sOjpDb25zb2xlOjpDaGFubmVsTGV2ZWw6OkJhc2ljOworICAgICAgICAg
ICAgICAgIGxldmVsID0gUHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWxMZXZlbDo6QmFzaWM7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CisKICAgICAgICAgICAgIGNhc2UgV1RGTG9nTGV2ZWw6OkRl
YnVnOgotICAgICAgICAgICAgICAgIGxldmVsID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q29uc29s
ZTo6Q2hhbm5lbExldmVsOjpWZXJib3NlOworICAgICAgICAgICAgICAgIGxldmVsID0gUHJvdG9j
b2w6OkNvbnNvbGU6OkNoYW5uZWxMZXZlbDo6VmVyYm9zZTsKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIGF1dG8gY2hhbm5lbCA9IElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWw6OmNyZWF0ZSgpCi0gICAgICAgICAg
ICAuc2V0U291cmNlKGNoYW5uZWxUYWJsZVtpXS5zb3VyY2UpCisgICAgICAgIGF1dG8gY2hhbm5l
bCA9IFByb3RvY29sOjpDb25zb2xlOjpDaGFubmVsOjpjcmVhdGUoKQorICAgICAgICAgICAgLnNl
dFNvdXJjZShzb3VyY2UpCiAgICAgICAgICAgICAuc2V0TGV2ZWwobGV2ZWwpCiAgICAgICAgICAg
ICAucmVsZWFzZSgpOwogICAgICAgICBjaGFubmVscy0+YWRkSXRlbShXVEZNb3ZlKGNoYW5uZWwp
KTsKLSAgICB9CisgICAgfTsKKyAgICBhZGRMb2dDaGFubmVsKFByb3RvY29sOjpDb25zb2xlOjpD
aGFubmVsU291cmNlOjpYTUwpOworICAgIGFkZExvZ0NoYW5uZWwoUHJvdG9jb2w6OkNvbnNvbGU6
OkNoYW5uZWxTb3VyY2U6OkphdmFTY3JpcHQpOworICAgIGFkZExvZ0NoYW5uZWwoUHJvdG9jb2w6
OkNvbnNvbGU6OkNoYW5uZWxTb3VyY2U6Ok5ldHdvcmspOworICAgIGFkZExvZ0NoYW5uZWwoUHJv
dG9jb2w6OkNvbnNvbGU6OkNoYW5uZWxTb3VyY2U6OkNvbnNvbGVBUEkpOworICAgIGFkZExvZ0No
YW5uZWwoUHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWxTb3VyY2U6OlN0b3JhZ2UpOworICAgIGFk
ZExvZ0NoYW5uZWwoUHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWxTb3VyY2U6OkFwcGNhY2hlKTsK
KyAgICBhZGRMb2dDaGFubmVsKFByb3RvY29sOjpDb25zb2xlOjpDaGFubmVsU291cmNlOjpSZW5k
ZXJpbmcpOworICAgIGFkZExvZ0NoYW5uZWwoUHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWxTb3Vy
Y2U6OkNTUyk7CisgICAgYWRkTG9nQ2hhbm5lbChQcm90b2NvbDo6Q29uc29sZTo6Q2hhbm5lbFNv
dXJjZTo6U2VjdXJpdHkpOworICAgIGFkZExvZ0NoYW5uZWwoUHJvdG9jb2w6OkNvbnNvbGU6OkNo
YW5uZWxTb3VyY2U6OkNvbnRlbnRCbG9ja2VyKTsKKyAgICBhZGRMb2dDaGFubmVsKFByb3RvY29s
OjpDb25zb2xlOjpDaGFubmVsU291cmNlOjpNZWRpYSk7CisgICAgYWRkTG9nQ2hhbm5lbChQcm90
b2NvbDo6Q29uc29sZTo6Q2hhbm5lbFNvdXJjZTo6TWVkaWFTb3VyY2UpOworICAgIGFkZExvZ0No
YW5uZWwoUHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWxTb3VyY2U6OldlYlJUQyk7CisgICAgYWRk
TG9nQ2hhbm5lbChQcm90b2NvbDo6Q29uc29sZTo6Q2hhbm5lbFNvdXJjZTo6SVRQRGVidWcpOwor
ICAgIGFkZExvZ0NoYW5uZWwoUHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWxTb3VyY2U6OkFkQ2xp
Y2tBdHRyaWJ1dGlvbik7CisgICAgYWRkTG9nQ2hhbm5lbChQcm90b2NvbDo6Q29uc29sZTo6Q2hh
bm5lbFNvdXJjZTo6T3RoZXIpOworCisgICAgcmV0dXJuIFdURk1vdmUoY2hhbm5lbHMpOwogfQog
Ci1zdGF0aWMgT3B0aW9uYWw8c3RkOjpwYWlyPFdURkxvZ0NoYW5uZWxTdGF0ZSwgV1RGTG9nTGV2
ZWw+PiBjaGFubmVsQ29uZmlndXJhdGlvbkZvclN0cmluZyhjb25zdCBTdHJpbmcmIGxldmVsU3Ry
aW5nKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gUGFnZUNvbnNvbGVBZ2VudDo6c2V0
TG9nZ2luZ0NoYW5uZWxMZXZlbChQcm90b2NvbDo6Q29uc29sZTo6Q2hhbm5lbFNvdXJjZSBzb3Vy
Y2UsIFByb3RvY29sOjpDb25zb2xlOjpDaGFubmVsTGV2ZWwgbGV2ZWwpCiB7Ci0gICAgaWYgKGVx
dWFsSWdub3JpbmdBU0NJSUNhc2UobGV2ZWxTdHJpbmcsICJvZmYiKSkKLSAgICAgICAgcmV0dXJu
IHsgeyBXVEZMb2dDaGFubmVsU3RhdGU6Ok9mZiwgV1RGTG9nTGV2ZWw6OkVycm9yIH0gfTsKKyAg
ICBzd2l0Y2ggKGxldmVsKSB7CisgICAgY2FzZSBQcm90b2NvbDo6Q29uc29sZTo6Q2hhbm5lbExl
dmVsOjpPZmY6CisgICAgICAgIG1faW5zcGVjdGVkUGFnZS5jb25maWd1cmVMb2dnaW5nQ2hhbm5l
bChQcm90b2NvbDo6SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUoc291cmNlKSwgV1RGTG9n
Q2hhbm5lbFN0YXRlOjpPZmYsIFdURkxvZ0xldmVsOjpFcnJvcik7CisgICAgICAgIHJldHVybiB7
IH07CiAKLSAgICBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShsZXZlbFN0cmluZywgImJhc2lj
IikpCi0gICAgICAgIHJldHVybiB7IHsgV1RGTG9nQ2hhbm5lbFN0YXRlOjpPbiwgV1RGTG9nTGV2
ZWw6OkluZm8gfSB9OworICAgIGNhc2UgUHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWxMZXZlbDo6
QmFzaWM6CisgICAgICAgIG1faW5zcGVjdGVkUGFnZS5jb25maWd1cmVMb2dnaW5nQ2hhbm5lbChQ
cm90b2NvbDo6SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUoc291cmNlKSwgV1RGTG9nQ2hh
bm5lbFN0YXRlOjpPbiwgV1RGTG9nTGV2ZWw6OkluZm8pOworICAgICAgICByZXR1cm4geyB9Owog
Ci0gICAgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UobGV2ZWxTdHJpbmcsICJ2ZXJib3NlIikp
Ci0gICAgICAgIHJldHVybiB7IHsgV1RGTG9nQ2hhbm5lbFN0YXRlOjpPbiwgV1RGTG9nTGV2ZWw6
OkRlYnVnIH0gfTsKLQotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLXZvaWQgUGFnZUNv
bnNvbGVBZ2VudDo6c2V0TG9nZ2luZ0NoYW5uZWxMZXZlbChFcnJvclN0cmluZyYgZXJyb3JTdHJp
bmcsIGNvbnN0IFN0cmluZyYgY2hhbm5lbE5hbWUsIGNvbnN0IFN0cmluZyYgY2hhbm5lbExldmVs
KQotewotICAgIGF1dG8gY29uZmlndXJhdGlvbiA9IGNoYW5uZWxDb25maWd1cmF0aW9uRm9yU3Ry
aW5nKGNoYW5uZWxMZXZlbCk7Ci0gICAgaWYgKCFjb25maWd1cmF0aW9uKSB7Ci0gICAgICAgIGVy
cm9yU3RyaW5nID0gbWFrZVN0cmluZygiVW5rbm93biBjaGFubmVsTGV2ZWw6ICJfcywgY2hhbm5l
bExldmVsKTsKLSAgICAgICAgcmV0dXJuOworICAgIGNhc2UgUHJvdG9jb2w6OkNvbnNvbGU6OkNo
YW5uZWxMZXZlbDo6VmVyYm9zZToKKyAgICAgICAgbV9pbnNwZWN0ZWRQYWdlLmNvbmZpZ3VyZUxv
Z2dpbmdDaGFubmVsKFByb3RvY29sOjpIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShzb3Vy
Y2UpLCBXVEZMb2dDaGFubmVsU3RhdGU6Ok9uLCBXVEZMb2dMZXZlbDo6RGVidWcpOworICAgICAg
ICByZXR1cm4geyB9OwogICAgIH0KIAotICAgIG1faW5zcGVjdGVkUGFnZS5jb25maWd1cmVMb2dn
aW5nQ2hhbm5lbChjaGFubmVsTmFtZSwgY29uZmlndXJhdGlvbi52YWx1ZSgpLmZpcnN0LCBjb25m
aWd1cmF0aW9uLnZhbHVlKCkuc2Vjb25kKTsKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICByZXR1cm4geyB9OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZUNvbnNvbGVBZ2VudC5oIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VDb25zb2xlQWdlbnQuaApp
bmRleCA0YzQ1ZjJkYWQwZjdjMWI0MDQ1MzlmZTRmNTdlNWE4NmRiMjA2MzE4Li40MWZlNzZkMDMy
MDcwZTBkNDEwM2U0MGEyYzE0NGNlMzc5ODFjODMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZUNvbnNvbGVBZ2VudC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlQ29uc29sZUFnZW50LmgKQEAgLTQxLDEy
ICs0MSwxMiBAQCBjbGFzcyBQYWdlQ29uc29sZUFnZW50IGZpbmFsIDogcHVibGljIFdlYkNvbnNv
bGVBZ2VudCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgUGFn
ZUNvbnNvbGVBZ2VudChQYWdlQWdlbnRDb250ZXh0Jik7Ci0gICAgflBhZ2VDb25zb2xlQWdlbnQo
KSBvdmVycmlkZTsKKyAgICB+UGFnZUNvbnNvbGVBZ2VudCgpOwogCiAgICAgLy8gQ29uc29sZUJh
Y2tlbmREaXNwYXRjaGVySGFuZGxlcgotICAgIHZvaWQgY2xlYXJNZXNzYWdlcyhFcnJvclN0cmlu
ZyYpIG92ZXJyaWRlOwotICAgIHZvaWQgZ2V0TG9nZ2luZ0NoYW5uZWxzKEVycm9yU3RyaW5nJiwg
UmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q29uc29sZTo6Q2hhbm5l
bD4+Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRMb2dnaW5nQ2hhbm5lbExldmVsKEVycm9yU3Ry
aW5nJiwgY29uc3QgU3RyaW5nJiBjaGFubmVsLCBjb25zdCBTdHJpbmcmIGxldmVsKSBvdmVycmlk
ZTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGNsZWFyTWVz
c2FnZXMoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxKU09O
OjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWw+Pj4gZ2V0TG9n
Z2luZ0NoYW5uZWxzKCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2
b2lkPiBzZXRMb2dnaW5nQ2hhbm5lbExldmVsKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNvbnNvbGU6
OkNoYW5uZWxTb3VyY2UsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWxMZXZl
bCk7CiAKIHByaXZhdGU6CiAgICAgSW5zdHJ1bWVudGluZ0FnZW50cyYgbV9pbnN0cnVtZW50aW5n
QWdlbnRzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdl
L1BhZ2VET01EZWJ1Z2dlckFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2Vu
dHMvcGFnZS9QYWdlRE9NRGVidWdnZXJBZ2VudC5jcHAKaW5kZXggN2M1ZmZhNGUzODNmNTJjYWI1
ZTJhMjdmZDkxNTkwOWZiY2VmNTE0Yy4uYzg4YmJkYzAzZDI1NDEwZmI2OTU4YjBmMDlhZmM1YmYx
ODhkYjI1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdl
L1BhZ2VET01EZWJ1Z2dlckFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
YWdlbnRzL3BhZ2UvUGFnZURPTURlYnVnZ2VyQWdlbnQuY3BwCkBAIC02OSw4NCArNjksNzQgQEAg
dm9pZCBQYWdlRE9NRGVidWdnZXJBZ2VudDo6ZGlzYWJsZSgpCiAgICAgSW5zcGVjdG9yRE9NRGVi
dWdnZXJBZ2VudDo6ZGlzYWJsZSgpOwogfQogCi12b2lkIFBhZ2VET01EZWJ1Z2dlckFnZW50Ojpz
ZXRET01CcmVha3BvaW50KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJZCwgY29u
c3QgU3RyaW5nJiB0eXBlU3RyaW5nLCBjb25zdCBKU09OOjpPYmplY3QqIG9wdGlvbnNQYXlsb2Fk
KQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gUGFnZURPTURlYnVnZ2VyQWdlbnQ6OnNl
dERPTUJyZWFrcG9pbnQoUHJvdG9jb2w6OkRPTTo6Tm9kZUlkIG5vZGVJZCwgUHJvdG9jb2w6OkRP
TURlYnVnZ2VyOjpET01CcmVha3BvaW50VHlwZSB0eXBlLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYm
IG9wdGlvbnMpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAg
ICAgYXV0byogZG9tQWdlbnQgPSBtX2luc3RydW1lbnRpbmdBZ2VudHMucGVyc2lzdGVudERPTUFn
ZW50KCk7Ci0gICAgaWYgKCFkb21BZ2VudCkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJET00g
ZG9tYWluIG11c3QgYmUgZW5hYmxlZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBp
ZiAoIWRvbUFnZW50KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkRPTSBkb21haW4g
bXVzdCBiZSBlbmFibGVkIl9zKTsKIAogICAgIE5vZGUqIG5vZGUgPSBkb21BZ2VudC0+YXNzZXJ0
Tm9kZShlcnJvclN0cmluZywgbm9kZUlkKTsKICAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJldHVy
bjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAotICAgIGF1
dG8gdHlwZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6Okluc3BlY3RvckhlbHBlcnM6OnBhcnNlRW51
bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpET01EZWJ1Z2dlcjo6RE9NQnJl
YWtwb2ludFR5cGU+KHR5cGVTdHJpbmcpOwotICAgIGlmICghdHlwZSkgewotICAgICAgICBlcnJv
clN0cmluZyA9IG1ha2VTdHJpbmcoIlVua25vd24gdHlwZTogIl9zLCB0eXBlU3RyaW5nKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8gYnJlYWtwb2ludCA9IEluc3BlY3RvckRl
YnVnZ2VyQWdlbnQ6OmRlYnVnZ2VyQnJlYWtwb2ludEZyb21QYXlsb2FkKGVycm9yU3RyaW5nLCBv
cHRpb25zUGF5bG9hZCk7CisgICAgYXV0byBicmVha3BvaW50ID0gSW5zcGVjdG9yRGVidWdnZXJB
Z2VudDo6ZGVidWdnZXJCcmVha3BvaW50RnJvbVBheWxvYWQoZXJyb3JTdHJpbmcsIFdURk1vdmUo
b3B0aW9ucykpOwogICAgIGlmICghYnJlYWtwb2ludCkKLSAgICAgICAgcmV0dXJuOworICAgICAg
ICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCi0gICAgc3dpdGNoICgqdHlw
ZSkgewotICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NRGVidWdnZXI6OkRPTUJyZWFr
cG9pbnRUeXBlOjpTdWJ0cmVlTW9kaWZpZWQ6CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2Fz
ZSBQcm90b2NvbDo6RE9NRGVidWdnZXI6OkRPTUJyZWFrcG9pbnRUeXBlOjpTdWJ0cmVlTW9kaWZp
ZWQ6CiAgICAgICAgIGlmICghbV9kb21TdWJ0cmVlTW9kaWZpZWRCcmVha3BvaW50cy5hZGQobm9k
ZSwgYnJlYWtwb2ludC5yZWxlYXNlTm9uTnVsbCgpKSkKLSAgICAgICAgICAgIGVycm9yU3RyaW5n
ID0gIkJyZWFrcG9pbnQgZm9yIGdpdmVuIG5vZGUgYW5kIGdpdmVuIHR5cGUgYWxyZWFkeSBleGlz
dHMiX3M7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3Rl
ZCgiQnJlYWtwb2ludCBmb3IgZ2l2ZW4gbm9kZSBhbmQgZ2l2ZW4gdHlwZSBhbHJlYWR5IGV4aXN0
cyJfcyk7CisgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBjYXNlIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRPTURlYnVnZ2VyOjpET01CcmVha3BvaW50VHlwZTo6QXR0cmlidXRlTW9kaWZpZWQ6Cisg
ICAgY2FzZSBQcm90b2NvbDo6RE9NRGVidWdnZXI6OkRPTUJyZWFrcG9pbnRUeXBlOjpBdHRyaWJ1
dGVNb2RpZmllZDoKICAgICAgICAgaWYgKCFtX2RvbUF0dHJpYnV0ZU1vZGlmaWVkQnJlYWtwb2lu
dHMuYWRkKG5vZGUsIGJyZWFrcG9pbnQucmVsZWFzZU5vbk51bGwoKSkpCi0gICAgICAgICAgICBl
cnJvclN0cmluZyA9ICJCcmVha3BvaW50IGZvciBnaXZlbiBub2RlIGFuZCBnaXZlbiB0eXBlIGFs
cmVhZHkgZXhpc3RzIl9zOwotICAgICAgICByZXR1cm47CisgICAgICAgICAgICByZXR1cm4gbWFr
ZVVuZXhwZWN0ZWQoIkJyZWFrcG9pbnQgZm9yIGdpdmVuIG5vZGUgYW5kIGdpdmVuIHR5cGUgYWxy
ZWFkeSBleGlzdHMiX3MpOworICAgICAgICByZXR1cm4geyB9OwogCi0gICAgY2FzZSBJbnNwZWN0
b3I6OlByb3RvY29sOjpET01EZWJ1Z2dlcjo6RE9NQnJlYWtwb2ludFR5cGU6Ok5vZGVSZW1vdmVk
OgorICAgIGNhc2UgUHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpET01CcmVha3BvaW50VHlwZTo6Tm9k
ZVJlbW92ZWQ6CiAgICAgICAgIGlmICghbV9kb21Ob2RlUmVtb3ZlZEJyZWFrcG9pbnRzLmFkZChu
b2RlLCBicmVha3BvaW50LnJlbGVhc2VOb25OdWxsKCkpKQotICAgICAgICAgICAgZXJyb3JTdHJp
bmcgPSAiQnJlYWtwb2ludCBmb3IgZ2l2ZW4gbm9kZSBhbmQgZ2l2ZW4gdHlwZSBhbHJlYWR5IGV4
aXN0cyJfczsKLSAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVj
dGVkKCJCcmVha3BvaW50IGZvciBnaXZlbiBub2RlIGFuZCBnaXZlbiB0eXBlIGFscmVhZHkgZXhp
c3RzIl9zKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk5vdCBzdXBwb3J0ZWQiKTsKIH0K
IAotdm9pZCBQYWdlRE9NRGVidWdnZXJBZ2VudDo6cmVtb3ZlRE9NQnJlYWtwb2ludChFcnJvclN0
cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQsIGNvbnN0IFN0cmluZyYgdHlwZVN0cmluZykK
K1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IFBhZ2VET01EZWJ1Z2dlckFnZW50OjpyZW1v
dmVET01CcmVha3BvaW50KFByb3RvY29sOjpET006Ok5vZGVJZCBub2RlSWQsIFByb3RvY29sOjpE
T01EZWJ1Z2dlcjo6RE9NQnJlYWtwb2ludFR5cGUgdHlwZSkKIHsKKyAgICBQcm90b2NvbDo6RXJy
b3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBhdXRvKiBkb21BZ2VudCA9IG1faW5zdHJ1bWVu
dGluZ0FnZW50cy5wZXJzaXN0ZW50RE9NQWdlbnQoKTsKLSAgICBpZiAoIWRvbUFnZW50KSB7Ci0g
ICAgICAgIGVycm9yU3RyaW5nID0gIkRPTSBkb21haW4gbXVzdCBiZSBlbmFibGVkIl9zOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghZG9tQWdlbnQpCisgICAgICAgIHJldHVybiBt
YWtlVW5leHBlY3RlZCgiRE9NIGRvbWFpbiBtdXN0IGJlIGVuYWJsZWQiX3MpOwogCiAgICAgTm9k
ZSogbm9kZSA9IGRvbUFnZW50LT5hc3NlcnROb2RlKGVycm9yU3RyaW5nLCBub2RlSWQpOwogICAg
IGlmICghbm9kZSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0
ZWQoZXJyb3JTdHJpbmcpOwogCi0gICAgYXV0byB0eXBlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6
SW5zcGVjdG9ySGVscGVyczo6cGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRPTURlYnVnZ2VyOjpET01CcmVha3BvaW50VHlwZT4odHlwZVN0cmluZyk7Ci0gICAg
aWYgKCF0eXBlKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gbWFrZVN0cmluZygiVW5rbm93biB0
eXBlOiAiX3MsIHR5cGVTdHJpbmcpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgc3dp
dGNoICgqdHlwZSkgewotICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NRGVidWdnZXI6
OkRPTUJyZWFrcG9pbnRUeXBlOjpTdWJ0cmVlTW9kaWZpZWQ6CisgICAgc3dpdGNoICh0eXBlKSB7
CisgICAgY2FzZSBQcm90b2NvbDo6RE9NRGVidWdnZXI6OkRPTUJyZWFrcG9pbnRUeXBlOjpTdWJ0
cmVlTW9kaWZpZWQ6CiAgICAgICAgIGlmICghbV9kb21TdWJ0cmVlTW9kaWZpZWRCcmVha3BvaW50
cy5yZW1vdmUobm9kZSkpCi0gICAgICAgICAgICBlcnJvclN0cmluZyA9ICJCcmVha3BvaW50IGZv
ciBnaXZlbiBub2RlIGFuZCBnaXZlbiB0eXBlIG1pc3NpbmciX3M7Ci0gICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiQnJlYWtwb2ludCBmb3IgZ2l2ZW4g
bm9kZSBhbmQgZ2l2ZW4gdHlwZSBtaXNzaW5nIl9zKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAot
ICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NRGVidWdnZXI6OkRPTUJyZWFrcG9pbnRU
eXBlOjpBdHRyaWJ1dGVNb2RpZmllZDoKKyAgICBjYXNlIFByb3RvY29sOjpET01EZWJ1Z2dlcjo6
RE9NQnJlYWtwb2ludFR5cGU6OkF0dHJpYnV0ZU1vZGlmaWVkOgogICAgICAgICBpZiAoIW1fZG9t
QXR0cmlidXRlTW9kaWZpZWRCcmVha3BvaW50cy5yZW1vdmUobm9kZSkpCi0gICAgICAgICAgICBl
cnJvclN0cmluZyA9ICJCcmVha3BvaW50IGZvciBnaXZlbiBub2RlIGFuZCBnaXZlbiB0eXBlIG1p
c3NpbmciX3M7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBl
Y3RlZCgiQnJlYWtwb2ludCBmb3IgZ2l2ZW4gbm9kZSBhbmQgZ2l2ZW4gdHlwZSBtaXNzaW5nIl9z
KTsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6
RE9NRGVidWdnZXI6OkRPTUJyZWFrcG9pbnRUeXBlOjpOb2RlUmVtb3ZlZDoKKyAgICBjYXNlIFBy
b3RvY29sOjpET01EZWJ1Z2dlcjo6RE9NQnJlYWtwb2ludFR5cGU6Ok5vZGVSZW1vdmVkOgogICAg
ICAgICBpZiAoIW1fZG9tTm9kZVJlbW92ZWRCcmVha3BvaW50cy5yZW1vdmUobm9kZSkpCi0gICAg
ICAgICAgICBlcnJvclN0cmluZyA9ICJCcmVha3BvaW50IGZvciBnaXZlbiBub2RlIGFuZCBnaXZl
biB0eXBlIG1pc3NpbmciX3M7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVybiBt
YWtlVW5leHBlY3RlZCgiQnJlYWtwb2ludCBmb3IgZ2l2ZW4gbm9kZSBhbmQgZ2l2ZW4gdHlwZSBt
aXNzaW5nIl9zKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk5vdCBzdXBwb3J0ZWQiKTsK
IH0KIAogdm9pZCBQYWdlRE9NRGVidWdnZXJBZ2VudDo6bWFpbkZyYW1lTmF2aWdhdGVkKCkKQEAg
LTIxMyw3ICsyMDMsNyBAQCB2b2lkIFBhZ2VET01EZWJ1Z2dlckFnZW50Ojp3aWxsSW5zZXJ0RE9N
Tm9kZShOb2RlJiBwYXJlbnQpCiAKICAgICBBU1NFUlQoY2xvc2VzdEJyZWFrcG9pbnRPd25lcik7
CiAKLSAgICBhdXRvIHBhdXNlRGF0YSA9IGJ1aWxkUGF1c2VEYXRhRm9yRE9NQnJlYWtwb2ludChJ
bnNwZWN0b3I6OlByb3RvY29sOjpET01EZWJ1Z2dlcjo6RE9NQnJlYWtwb2ludFR5cGU6OlN1YnRy
ZWVNb2RpZmllZCwgKmNsb3Nlc3RCcmVha3BvaW50T3duZXIpOworICAgIGF1dG8gcGF1c2VEYXRh
ID0gYnVpbGRQYXVzZURhdGFGb3JET01CcmVha3BvaW50KFByb3RvY29sOjpET01EZWJ1Z2dlcjo6
RE9NQnJlYWtwb2ludFR5cGU6OlN1YnRyZWVNb2RpZmllZCwgKmNsb3Nlc3RCcmVha3BvaW50T3du
ZXIpOwogICAgIHBhdXNlRGF0YS0+c2V0Qm9vbGVhbigiaW5zZXJ0aW9uIiwgdHJ1ZSk7CiAgICAg
Ly8gRklYTUU6IDxodHRwczovL3dlYmtpdC5vcmcvYi8yMTM0OTk+IFdlYiBJbnNwZWN0b3I6IGFs
bG93IERPTSBub2RlcyB0byBiZSBpbnN0cnVtZW50ZWQgYXQgYW55IHBvaW50LCByZWdhcmRsZXNz
IG9mIHdoZXRoZXIgdGhlIG1haW4gZG9jdW1lbnQgaGFzIGFsc28gYmVlbiBpbnN0cnVtZW50ZWQK
ICAgICAvLyBJbmNsdWRlIHRoZSBuZXcgY2hpbGQgbm9kZSBJRCBzbyB0aGUgZnJvbnRlbmQgY2Fu
IHNob3cgdGhlIG5vZGUgdGhhdCdzIGFib3V0IHRvIGJlIGluc2VydGVkLgpAQCAtMjMwLDcgKzIy
MCw3IEBAIHZvaWQgUGFnZURPTURlYnVnZ2VyQWdlbnQ6OndpbGxSZW1vdmVET01Ob2RlKE5vZGUm
IG5vZGUpCiAKICAgICBPcHRpb25hbDxzaXplX3Q+IGNsb3Nlc3REaXN0YW5jZTsKICAgICBSZWZQ
dHI8SlNDOjpCcmVha3BvaW50PiBjbG9zZXN0QnJlYWtwb2ludDsKLSAgICBPcHRpb25hbDxJbnNw
ZWN0b3I6OlByb3RvY29sOjpET01EZWJ1Z2dlcjo6RE9NQnJlYWtwb2ludFR5cGU+IGNsb3Nlc3RC
cmVha3BvaW50VHlwZTsKKyAgICBPcHRpb25hbDxQcm90b2NvbDo6RE9NRGVidWdnZXI6OkRPTUJy
ZWFrcG9pbnRUeXBlPiBjbG9zZXN0QnJlYWtwb2ludFR5cGU7CiAgICAgTm9kZSogY2xvc2VzdEJy
ZWFrcG9pbnRPd25lciA9IG51bGxwdHI7CiAKICAgICBmb3IgKGF1dG8gW2JyZWFrcG9pbnRPd25l
ciwgYnJlYWtwb2ludF0gOiBtX2RvbU5vZGVSZW1vdmVkQnJlYWtwb2ludHMpIHsKQEAgLTI0MSw3
ICsyMzEsNyBAQCB2b2lkIFBhZ2VET01EZWJ1Z2dlckFnZW50Ojp3aWxsUmVtb3ZlRE9NTm9kZShO
b2RlJiBub2RlKQogICAgICAgICBpZiAoIWNsb3Nlc3REaXN0YW5jZSB8fCBkaXN0YW5jZSA8IGNs
b3Nlc3REaXN0YW5jZSkgewogICAgICAgICAgICAgY2xvc2VzdERpc3RhbmNlID0gZGlzdGFuY2U7
CiAgICAgICAgICAgICBjbG9zZXN0QnJlYWtwb2ludCA9IGJyZWFrcG9pbnQuY29weVJlZigpOwot
ICAgICAgICAgICAgY2xvc2VzdEJyZWFrcG9pbnRUeXBlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6
RE9NRGVidWdnZXI6OkRPTUJyZWFrcG9pbnRUeXBlOjpOb2RlUmVtb3ZlZDsKKyAgICAgICAgICAg
IGNsb3Nlc3RCcmVha3BvaW50VHlwZSA9IFByb3RvY29sOjpET01EZWJ1Z2dlcjo6RE9NQnJlYWtw
b2ludFR5cGU6Ok5vZGVSZW1vdmVkOwogICAgICAgICAgICAgY2xvc2VzdEJyZWFrcG9pbnRPd25l
ciA9IGJyZWFrcG9pbnRPd25lcjsKICAgICAgICAgfQogICAgIH0KQEAgLTI1NSw3ICsyNDUsNyBA
QCB2b2lkIFBhZ2VET01EZWJ1Z2dlckFnZW50Ojp3aWxsUmVtb3ZlRE9NTm9kZShOb2RlJiBub2Rl
KQogICAgICAgICAgICAgaWYgKCFjbG9zZXN0RGlzdGFuY2UgfHwgZGlzdGFuY2UgPCBjbG9zZXN0
RGlzdGFuY2UpIHsKICAgICAgICAgICAgICAgICBjbG9zZXN0RGlzdGFuY2UgPSBkaXN0YW5jZTsK
ICAgICAgICAgICAgICAgICBjbG9zZXN0QnJlYWtwb2ludCA9IGJyZWFrcG9pbnQuY29weVJlZigp
OwotICAgICAgICAgICAgICAgIGNsb3Nlc3RCcmVha3BvaW50VHlwZSA9IEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRPTURlYnVnZ2VyOjpET01CcmVha3BvaW50VHlwZTo6U3VidHJlZU1vZGlmaWVkOwor
ICAgICAgICAgICAgICAgIGNsb3Nlc3RCcmVha3BvaW50VHlwZSA9IFByb3RvY29sOjpET01EZWJ1
Z2dlcjo6RE9NQnJlYWtwb2ludFR5cGU6OlN1YnRyZWVNb2RpZmllZDsKICAgICAgICAgICAgICAg
ICBjbG9zZXN0QnJlYWtwb2ludE93bmVyID0gYnJlYWtwb2ludE93bmVyOwogICAgICAgICAgICAg
fQogICAgICAgICB9CkBAIC0yOTYsNyArMjg2LDcgQEAgdm9pZCBQYWdlRE9NRGVidWdnZXJBZ2Vu
dDo6d2lsbE1vZGlmeURPTUF0dHIoRWxlbWVudCYgZWxlbWVudCkKICAgICBpZiAoaXQgPT0gbV9k
b21BdHRyaWJ1dGVNb2RpZmllZEJyZWFrcG9pbnRzLmVuZCgpKQogICAgICAgICByZXR1cm47CiAK
LSAgICBhdXRvIHBhdXNlRGF0YSA9IGJ1aWxkUGF1c2VEYXRhRm9yRE9NQnJlYWtwb2ludChJbnNw
ZWN0b3I6OlByb3RvY29sOjpET01EZWJ1Z2dlcjo6RE9NQnJlYWtwb2ludFR5cGU6OkF0dHJpYnV0
ZU1vZGlmaWVkLCBlbGVtZW50KTsKKyAgICBhdXRvIHBhdXNlRGF0YSA9IGJ1aWxkUGF1c2VEYXRh
Rm9yRE9NQnJlYWtwb2ludChQcm90b2NvbDo6RE9NRGVidWdnZXI6OkRPTUJyZWFrcG9pbnRUeXBl
OjpBdHRyaWJ1dGVNb2RpZmllZCwgZWxlbWVudCk7CiAgICAgbV9kZWJ1Z2dlckFnZW50LT5icmVh
a1Byb2dyYW0oSW5zcGVjdG9yOjpEZWJ1Z2dlckZyb250ZW5kRGlzcGF0Y2hlcjo6UmVhc29uOjpE
T00sIFdURk1vdmUocGF1c2VEYXRhKSwgaXQtPnZhbHVlLmNvcHlSZWYoKSk7CiB9CiAKQEAgLTMz
MywyNyArMzIzLDI4IEBAIHZvaWQgUGFnZURPTURlYnVnZ2VyQWdlbnQ6OndpbGxJbnZhbGlkYXRl
U3R5bGVBdHRyKEVsZW1lbnQmIGVsZW1lbnQpCiAgICAgaWYgKGl0ID09IG1fZG9tQXR0cmlidXRl
TW9kaWZpZWRCcmVha3BvaW50cy5lbmQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byBw
YXVzZURhdGEgPSBidWlsZFBhdXNlRGF0YUZvckRPTUJyZWFrcG9pbnQoSW5zcGVjdG9yOjpQcm90
b2NvbDo6RE9NRGVidWdnZXI6OkRPTUJyZWFrcG9pbnRUeXBlOjpBdHRyaWJ1dGVNb2RpZmllZCwg
ZWxlbWVudCk7CisgICAgYXV0byBwYXVzZURhdGEgPSBidWlsZFBhdXNlRGF0YUZvckRPTUJyZWFr
cG9pbnQoUHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpET01CcmVha3BvaW50VHlwZTo6QXR0cmlidXRl
TW9kaWZpZWQsIGVsZW1lbnQpOwogICAgIG1fZGVidWdnZXJBZ2VudC0+YnJlYWtQcm9ncmFtKElu
c3BlY3Rvcjo6RGVidWdnZXJGcm9udGVuZERpc3BhdGNoZXI6OlJlYXNvbjo6RE9NLCBXVEZNb3Zl
KHBhdXNlRGF0YSksIGl0LT52YWx1ZS5jb3B5UmVmKCkpOwogfQogCi12b2lkIFBhZ2VET01EZWJ1
Z2dlckFnZW50OjpzZXRBbmltYXRpb25GcmFtZUJyZWFrcG9pbnQoRXJyb3JTdHJpbmcmIGVycm9y
U3RyaW5nLCBSZWZQdHI8SlNDOjpCcmVha3BvaW50PiYmIGJyZWFrcG9pbnQpCitib29sIFBhZ2VE
T01EZWJ1Z2dlckFnZW50OjpzZXRBbmltYXRpb25GcmFtZUJyZWFrcG9pbnQoUHJvdG9jb2w6OkVy
cm9yU3RyaW5nJiBlcnJvclN0cmluZywgUmVmUHRyPEpTQzo6QnJlYWtwb2ludD4mJiBicmVha3Bv
aW50KQogewogICAgIGlmICghbV9wYXVzZU9uQWxsQW5pbWF0aW9uRnJhbWVzQnJlYWtwb2ludCA9
PSAhYnJlYWtwb2ludCkgewogICAgICAgICBlcnJvclN0cmluZyA9IG1fcGF1c2VPbkFsbEFuaW1h
dGlvbkZyYW1lc0JyZWFrcG9pbnQgPyAiQnJlYWtwb2ludCBmb3IgQW5pbWF0aW9uRnJhbWUgYWxy
ZWFkeSBleGlzdHMiX3MgOiAiQnJlYWtwb2ludCBmb3IgQW5pbWF0aW9uRnJhbWUgbWlzc2luZyJf
czsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAg
bV9wYXVzZU9uQWxsQW5pbWF0aW9uRnJhbWVzQnJlYWtwb2ludCA9IFdURk1vdmUoYnJlYWtwb2lu
dCk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKLVJlZjxKU09OOjpPYmplY3Q+IFBhZ2VET01EZWJ1
Z2dlckFnZW50OjpidWlsZFBhdXNlRGF0YUZvckRPTUJyZWFrcG9pbnQoSW5zcGVjdG9yOjpQcm90
b2NvbDo6RE9NRGVidWdnZXI6OkRPTUJyZWFrcG9pbnRUeXBlIGJyZWFrcG9pbnRUeXBlLCBOb2Rl
JiBicmVha3BvaW50T3duZXIpCitSZWY8SlNPTjo6T2JqZWN0PiBQYWdlRE9NRGVidWdnZXJBZ2Vu
dDo6YnVpbGRQYXVzZURhdGFGb3JET01CcmVha3BvaW50KFByb3RvY29sOjpET01EZWJ1Z2dlcjo6
RE9NQnJlYWtwb2ludFR5cGUgYnJlYWtwb2ludFR5cGUsIE5vZGUmIGJyZWFrcG9pbnRPd25lcikK
IHsKICAgICBBU1NFUlQobV9kZWJ1Z2dlckFnZW50LT5icmVha3BvaW50c0FjdGl2ZSgpKTsKICAg
ICBBU1NFUlQobV9kb21TdWJ0cmVlTW9kaWZpZWRCcmVha3BvaW50cy5jb250YWlucygmYnJlYWtw
b2ludE93bmVyKSB8fCBtX2RvbUF0dHJpYnV0ZU1vZGlmaWVkQnJlYWtwb2ludHMuY29udGFpbnMo
JmJyZWFrcG9pbnRPd25lcikgfHwgbV9kb21Ob2RlUmVtb3ZlZEJyZWFrcG9pbnRzLmNvbnRhaW5z
KCZicmVha3BvaW50T3duZXIpKTsKIAogICAgIGF1dG8gcGF1c2VEYXRhID0gSlNPTjo6T2JqZWN0
OjpjcmVhdGUoKTsKLSAgICBwYXVzZURhdGEtPnNldFN0cmluZygidHlwZSIsIEluc3BlY3Rvcjo6
UHJvdG9jb2w6Okluc3BlY3RvckhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKGJyZWFrcG9p
bnRUeXBlKSk7CisgICAgcGF1c2VEYXRhLT5zZXRTdHJpbmcoInR5cGUiLCBQcm90b2NvbDo6SGVs
cGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUoYnJlYWtwb2ludFR5cGUpKTsKICAgICBpZiAoYXV0
byogZG9tQWdlbnQgPSBtX2luc3RydW1lbnRpbmdBZ2VudHMucGVyc2lzdGVudERPTUFnZW50KCkp
IHsKICAgICAgICAgaWYgKGF1dG8gYnJlYWtwb2ludE93bmVyTm9kZUlkID0gZG9tQWdlbnQtPnB1
c2hOb2RlVG9Gcm9udGVuZCgmYnJlYWtwb2ludE93bmVyKSkKICAgICAgICAgICAgIHBhdXNlRGF0
YS0+c2V0SW50ZWdlcigibm9kZUlkIiwgYnJlYWtwb2ludE93bmVyTm9kZUlkKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlRE9NRGVidWdnZXJB
Z2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VET01EZWJ1
Z2dlckFnZW50LmgKaW5kZXggYWQwMWM2NzdlNWQyMjI1YTA2NWNmMDEwNDUxNTY5YjE3OTRkNjlh
OS4uZDg3MjgyOTI1ZWM2OTMxMGUwYmMwZTc4ODNjZGNhNTA4ZDEwMzUyMiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VET01EZWJ1Z2dlckFnZW50
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VET01EZWJ1
Z2dlckFnZW50LmgKQEAgLTM2LDIxICszNiwxOSBAQCBjbGFzcyBFbGVtZW50OwogY2xhc3MgRnJh
bWU7CiBjbGFzcyBOb2RlOwogCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQogY2xhc3Mg
UGFnZURPTURlYnVnZ2VyQWdlbnQgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yRE9NRGVidWdnZXJB
Z2VudCB7CiBwdWJsaWM6CiAgICAgUGFnZURPTURlYnVnZ2VyQWdlbnQoUGFnZUFnZW50Q29udGV4
dCYsIEluc3BlY3Rvcjo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudCopOwotICAgIH5QYWdlRE9NRGVi
dWdnZXJBZ2VudCgpIG92ZXJyaWRlOworICAgIH5QYWdlRE9NRGVidWdnZXJBZ2VudCgpOwogCi0g
ICAgYm9vbCBlbmFibGVkKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBlbmFibGVkKCkgY29u
c3Q7CiAKICAgICAvLyBET01EZWJ1Z2dlckJhY2tlbmREaXNwYXRjaGVySGFuZGxlcgotICAgIHZv
aWQgc2V0RE9NQnJlYWtwb2ludChFcnJvclN0cmluZyYsIGludCBub2RlSWQsIGNvbnN0IFN0cmlu
ZyYgdHlwZSwgY29uc3QgSlNPTjo6T2JqZWN0KiBvcHRpb25zKSBvdmVycmlkZTsKLSAgICB2b2lk
IHJlbW92ZURPTUJyZWFrcG9pbnQoRXJyb3JTdHJpbmcmLCBpbnQgbm9kZUlkLCBjb25zdCBTdHJp
bmcmIHR5cGUpIG92ZXJyaWRlOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5n
T3I8dm9pZD4gc2V0RE9NQnJlYWtwb2ludChJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJ
ZCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NRGVidWdnZXI6OkRPTUJyZWFrcG9pbnRUeXBlLCBS
ZWZQdHI8SlNPTjo6T2JqZWN0PiYmIG9wdGlvbnMpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8dm9pZD4gcmVtb3ZlRE9NQnJlYWtwb2ludChJbnNwZWN0b3I6OlByb3Rv
Y29sOjpET006Ok5vZGVJZCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NRGVidWdnZXI6OkRPTUJy
ZWFrcG9pbnRUeXBlKTsKIAogICAgIC8vIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbgotICAgIHZv
aWQgbWFpbkZyYW1lTmF2aWdhdGVkKCkgZmluYWw7CisgICAgdm9pZCBtYWluRnJhbWVOYXZpZ2F0
ZWQoKTsKICAgICB2b2lkIGZyYW1lRG9jdW1lbnRVcGRhdGVkKEZyYW1lJik7CiAgICAgdm9pZCB3
aWxsSW5zZXJ0RE9NTm9kZShOb2RlJiBwYXJlbnQpOwogICAgIHZvaWQgd2lsbFJlbW92ZURPTU5v
ZGUoTm9kZSYpOwpAQCAtNjEsMTAgKzU5LDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIGRpZEZpcmVB
bmltYXRpb25GcmFtZSgpOwogCiBwcml2YXRlOgotICAgIHZvaWQgZW5hYmxlKCkgb3ZlcnJpZGU7
Ci0gICAgdm9pZCBkaXNhYmxlKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBlbmFibGUoKTsKKyAgICB2
b2lkIGRpc2FibGUoKTsKIAotICAgIHZvaWQgc2V0QW5pbWF0aW9uRnJhbWVCcmVha3BvaW50KEVy
cm9yU3RyaW5nJiwgUmVmUHRyPEpTQzo6QnJlYWtwb2ludD4mJikgb3ZlcnJpZGU7CisgICAgYm9v
bCBzZXRBbmltYXRpb25GcmFtZUJyZWFrcG9pbnQoSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JT
dHJpbmcmLCBSZWZQdHI8SlNDOjpCcmVha3BvaW50PiYmKTsKIAogICAgIFJlZjxKU09OOjpPYmpl
Y3Q+IGJ1aWxkUGF1c2VEYXRhRm9yRE9NQnJlYWtwb2ludChJbnNwZWN0b3I6OlByb3RvY29sOjpE
T01EZWJ1Z2dlcjo6RE9NQnJlYWtwb2ludFR5cGUsIE5vZGUmIGJyZWFrcG9pbnRPd25lcik7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlRGVi
dWdnZXJBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFn
ZURlYnVnZ2VyQWdlbnQuY3BwCmluZGV4IDBjMjAzOTgyNzMzYjRlZThiYWJkMDU1OGZhMzNiMmEx
ZGM0ZjhmMjUuLjYxODcyNjhiZDI3NTE4MWU5OGY0NWVlMGZhN2UxNmE3NTA5YmMxNjAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlRGVidWdnZXJB
Z2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VE
ZWJ1Z2dlckFnZW50LmNwcApAQCAtNjgsMjYgKzY4LDI1IEBAIGJvb2wgUGFnZURlYnVnZ2VyQWdl
bnQ6OmVuYWJsZWQoKSBjb25zdAogICAgIHJldHVybiBtX2luc3RydW1lbnRpbmdBZ2VudHMuZW5h
YmxlZFBhZ2VEZWJ1Z2dlckFnZW50KCkgPT0gdGhpcyAmJiBXZWJEZWJ1Z2dlckFnZW50OjplbmFi
bGVkKCk7CiB9CiAKLXZvaWQgUGFnZURlYnVnZ2VyQWdlbnQ6OmV2YWx1YXRlT25DYWxsRnJhbWUo
RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGNhbGxGcmFtZUlkLCBjb25z
dCBTdHJpbmcmIGV4cHJlc3Npb24sIGNvbnN0IFN0cmluZyogb2JqZWN0R3JvdXAsIGNvbnN0IGJv
b2wqIGluY2x1ZGVDb21tYW5kTGluZUFQSSwgY29uc3QgYm9vbCogZG9Ob3RQYXVzZU9uRXhjZXB0
aW9uc0FuZE11dGVDb25zb2xlLCBjb25zdCBib29sKiByZXR1cm5CeVZhbHVlLCBjb25zdCBib29s
KiBnZW5lcmF0ZVByZXZpZXcsIGNvbnN0IGJvb2wqIHNhdmVSZXN1bHQsIGNvbnN0IGJvb2wqIGVt
dWxhdGVVc2VyR2VzdHVyZSwgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+
JiByZXN1bHQsIE9wdGlvbmFsPGJvb2w+JiB3YXNUaHJvd24sIE9wdGlvbmFsPGludD4mIHNhdmVk
UmVzdWx0SW5kZXgpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxzdGQ6OnR1cGxlPFJlZjxQcm90
b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiwgT3B0aW9uYWw8Ym9vbD4gLyogd2FzVGhyb3du
ICovLCBPcHRpb25hbDxpbnQ+IC8qIHNhdmVkUmVzdWx0SW5kZXggKi8+PiBQYWdlRGVidWdnZXJB
Z2VudDo6ZXZhbHVhdGVPbkNhbGxGcmFtZShjb25zdCBQcm90b2NvbDo6RGVidWdnZXI6OkNhbGxG
cmFtZUlkJiBjYWxsRnJhbWVJZCwgY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBjb25zdCBTdHJp
bmcmIG9iamVjdEdyb3VwLCBPcHRpb25hbDxib29sPiYmIGluY2x1ZGVDb21tYW5kTGluZUFQSSwg
T3B0aW9uYWw8Ym9vbD4mJiBkb05vdFBhdXNlT25FeGNlcHRpb25zQW5kTXV0ZUNvbnNvbGUsIE9w
dGlvbmFsPGJvb2w+JiYgcmV0dXJuQnlWYWx1ZSwgT3B0aW9uYWw8Ym9vbD4mJiBnZW5lcmF0ZVBy
ZXZpZXcsIE9wdGlvbmFsPGJvb2w+JiYgc2F2ZVJlc3VsdCwgT3B0aW9uYWw8Ym9vbD4mJiBlbXVs
YXRlVXNlckdlc3R1cmUpCiB7Ci0gICAgYXV0byBzaG91bGRFbXVsYXRlVXNlckdlc3R1cmUgPSBl
bXVsYXRlVXNlckdlc3R1cmUgJiYgKmVtdWxhdGVVc2VyR2VzdHVyZTsKLSAgICBVc2VyR2VzdHVy
ZUVtdWxhdGlvblNjb3BlIHVzZXJHZXN0dXJlU2NvcGUobV9pbnNwZWN0ZWRQYWdlLCBzaG91bGRF
bXVsYXRlVXNlckdlc3R1cmUpOworICAgIFVzZXJHZXN0dXJlRW11bGF0aW9uU2NvcGUgdXNlckdl
c3R1cmVTY29wZShtX2luc3BlY3RlZFBhZ2UsIGVtdWxhdGVVc2VyR2VzdHVyZSAmJiAqZW11bGF0
ZVVzZXJHZXN0dXJlKTsKIAotICAgIFdlYkRlYnVnZ2VyQWdlbnQ6OmV2YWx1YXRlT25DYWxsRnJh
bWUoZXJyb3JTdHJpbmcsIGNhbGxGcmFtZUlkLCBleHByZXNzaW9uLCBvYmplY3RHcm91cCwgaW5j
bHVkZUNvbW1hbmRMaW5lQVBJLCBkb05vdFBhdXNlT25FeGNlcHRpb25zQW5kTXV0ZUNvbnNvbGUs
IHJldHVybkJ5VmFsdWUsIGdlbmVyYXRlUHJldmlldywgc2F2ZVJlc3VsdCwgZW11bGF0ZVVzZXJH
ZXN0dXJlLCByZXN1bHQsIHdhc1Rocm93biwgc2F2ZWRSZXN1bHRJbmRleCk7CisgICAgcmV0dXJu
IFdlYkRlYnVnZ2VyQWdlbnQ6OmV2YWx1YXRlT25DYWxsRnJhbWUoY2FsbEZyYW1lSWQsIGV4cHJl
c3Npb24sIG9iamVjdEdyb3VwLCBXVEZNb3ZlKGluY2x1ZGVDb21tYW5kTGluZUFQSSksIFdURk1v
dmUoZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xlKSwgV1RGTW92ZShyZXR1cm5C
eVZhbHVlKSwgV1RGTW92ZShnZW5lcmF0ZVByZXZpZXcpLCBXVEZNb3ZlKHNhdmVSZXN1bHQpLCBX
VEZNb3ZlKGVtdWxhdGVVc2VyR2VzdHVyZSkpOwogfQogCi12b2lkIFBhZ2VEZWJ1Z2dlckFnZW50
OjplbmFibGUoKQordm9pZCBQYWdlRGVidWdnZXJBZ2VudDo6aW50ZXJuYWxFbmFibGUoKQogewog
ICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy5zZXRFbmFibGVkUGFnZURlYnVnZ2VyQWdlbnQodGhp
cyk7CiAKLSAgICBXZWJEZWJ1Z2dlckFnZW50OjplbmFibGUoKTsKKyAgICBXZWJEZWJ1Z2dlckFn
ZW50OjppbnRlcm5hbEVuYWJsZSgpOwogfQogCi12b2lkIFBhZ2VEZWJ1Z2dlckFnZW50OjpkaXNh
YmxlKGJvb2wgaXNCZWluZ0Rlc3Ryb3llZCkKK3ZvaWQgUGFnZURlYnVnZ2VyQWdlbnQ6OmludGVy
bmFsRGlzYWJsZShib29sIGlzQmVpbmdEZXN0cm95ZWQpCiB7CiAgICAgbV9pbnN0cnVtZW50aW5n
QWdlbnRzLnNldEVuYWJsZWRQYWdlRGVidWdnZXJBZ2VudChudWxscHRyKTsKIAotICAgIFdlYkRl
YnVnZ2VyQWdlbnQ6OmRpc2FibGUoaXNCZWluZ0Rlc3Ryb3llZCk7CisgICAgV2ViRGVidWdnZXJB
Z2VudDo6aW50ZXJuYWxEaXNhYmxlKGlzQmVpbmdEZXN0cm95ZWQpOwogfQogCiBTdHJpbmcgUGFn
ZURlYnVnZ2VyQWdlbnQ6OnNvdXJjZU1hcFVSTEZvclNjcmlwdChjb25zdCBKU0M6OkRlYnVnZ2Vy
OjpTY3JpcHQmIHNjcmlwdCkKQEAgLTEyNiw3ICsxMjUsNyBAQCB2b2lkIFBhZ2VEZWJ1Z2dlckFn
ZW50OjpicmVha3BvaW50QWN0aW9uTG9nKEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9i
YWxPYgogICAgIG1faW5zcGVjdGVkUGFnZS5jb25zb2xlKCkuYWRkTWVzc2FnZShNZXNzYWdlU291
cmNlOjpKUywgTWVzc2FnZUxldmVsOjpMb2csIG1lc3NhZ2UsIGNyZWF0ZVNjcmlwdENhbGxTdGFj
ayhsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CiB9CiAKLUluamVjdGVkU2NyaXB0IFBhZ2VEZWJ1Z2dl
ckFnZW50OjppbmplY3RlZFNjcmlwdEZvckV2YWwoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBj
b25zdCBpbnQqIGV4ZWN1dGlvbkNvbnRleHRJZCkKK0luamVjdGVkU2NyaXB0IFBhZ2VEZWJ1Z2dl
ckFnZW50OjppbmplY3RlZFNjcmlwdEZvckV2YWwoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJv
clN0cmluZywgT3B0aW9uYWw8UHJvdG9jb2w6OlJ1bnRpbWU6OkV4ZWN1dGlvbkNvbnRleHRJZD4m
JiBleGVjdXRpb25Db250ZXh0SWQpCiB7CiAgICAgaWYgKCFleGVjdXRpb25Db250ZXh0SWQpIHsK
ICAgICAgICAgSlNDOjpKU0dsb2JhbE9iamVjdCogc2NyaXB0U3RhdGUgPSBtYWluV29ybGRFeGVj
U3RhdGUoJm1faW5zcGVjdGVkUGFnZS5tYWluRnJhbWUoKSk7CkBAIC0xNTMsOCArMTUyLDcgQEAg
dm9pZCBQYWdlRGVidWdnZXJBZ2VudDo6bWFpbkZyYW1lU3RhcnRlZExvYWRpbmcoKQogICAgIGlm
IChpc1BhdXNlZCgpKSB7CiAgICAgICAgIHNldFN1cHByZXNzQWxsUGF1c2VzKHRydWUpOwogCi0g
ICAgICAgIEVycm9yU3RyaW5nIGlnbm9yZWQ7Ci0gICAgICAgIHJlc3VtZShpZ25vcmVkKTsKKyAg
ICAgICAgcmVzdW1lKCk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZURlYnVnZ2VyQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlRGVidWdnZXJBZ2VudC5oCmluZGV4IDRjMjdkZDFj
NzRiMTJlODU3YjZjZjY1MTBmODk5NzYwN2ExNjYyMDcuLmJmZWJlOTM2MmM0OTM1ZTEwMWUxYTFm
MTNjN2EwMmJlMTUzYzllYjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9h
Z2VudHMvcGFnZS9QYWdlRGVidWdnZXJBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9hZ2VudHMvcGFnZS9QYWdlRGVidWdnZXJBZ2VudC5oCkBAIC00NSwxNCArNDUsMTQgQEAg
Y2xhc3MgUGFnZURlYnVnZ2VyQWdlbnQgZmluYWwgOiBwdWJsaWMgV2ViRGVidWdnZXJBZ2VudCB7
CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgUGFnZURlYnVnZ2Vy
QWdlbnQoUGFnZUFnZW50Q29udGV4dCYpOwotICAgIH5QYWdlRGVidWdnZXJBZ2VudCgpIG92ZXJy
aWRlOwotICAgIGJvb2wgZW5hYmxlZCgpIGNvbnN0IGZpbmFsOworICAgIH5QYWdlRGVidWdnZXJB
Z2VudCgpOworICAgIGJvb2wgZW5hYmxlZCgpIGNvbnN0OwogCiAgICAgLy8gRGVidWdnZXJCYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXIKLSAgICB2b2lkIGV2YWx1YXRlT25DYWxsRnJhbWUoRXJyb3JT
dHJpbmcmLCBjb25zdCBTdHJpbmcmIGNhbGxGcmFtZUlkLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Np
b24sIGNvbnN0IFN0cmluZyogb2JqZWN0R3JvdXAsIGNvbnN0IGJvb2wqIGluY2x1ZGVDb21tYW5k
TGluZUFQSSwgY29uc3QgYm9vbCogZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xl
LCBjb25zdCBib29sKiByZXR1cm5CeVZhbHVlLCBjb25zdCBib29sKiBnZW5lcmF0ZVByZXZpZXcs
IGNvbnN0IGJvb2wqIHNhdmVSZXN1bHQsIGNvbnN0IGJvb2wqIGVtdWxhdGVVc2VyR2VzdHVyZSwg
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3Vs
dCwgT3B0aW9uYWw8Ym9vbD4mIHdhc1Rocm93biwgT3B0aW9uYWw8aW50PiYgc2F2ZWRSZXN1bHRJ
bmRleCkgb3ZlcnJpZGU7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxz
dGQ6OnR1cGxlPFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+
LCBPcHRpb25hbDxib29sPiAvKiB3YXNUaHJvd24gKi8sIE9wdGlvbmFsPGludD4gLyogc2F2ZWRS
ZXN1bHRJbmRleCAqLz4+IGV2YWx1YXRlT25DYWxsRnJhbWUoY29uc3QgSW5zcGVjdG9yOjpQcm90
b2NvbDo6RGVidWdnZXI6OkNhbGxGcmFtZUlkJiwgY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBj
b25zdCBTdHJpbmcmIG9iamVjdEdyb3VwLCBPcHRpb25hbDxib29sPiYmIGluY2x1ZGVDb21tYW5k
TGluZUFQSSwgT3B0aW9uYWw8Ym9vbD4mJiBkb05vdFBhdXNlT25FeGNlcHRpb25zQW5kTXV0ZUNv
bnNvbGUsIE9wdGlvbmFsPGJvb2w+JiYgcmV0dXJuQnlWYWx1ZSwgT3B0aW9uYWw8Ym9vbD4mJiBn
ZW5lcmF0ZVByZXZpZXcsIE9wdGlvbmFsPGJvb2w+JiYgc2F2ZVJlc3VsdCwgT3B0aW9uYWw8Ym9v
bD4mJiBlbXVsYXRlVXNlckdlc3R1cmUpOwogCiAgICAgLy8gSlNDOjpEZWJ1Z2dlcjo6T2JzZXJ2
ZXIKLSAgICB2b2lkIGJyZWFrcG9pbnRBY3Rpb25Mb2coSlNDOjpKU0dsb2JhbE9iamVjdCosIGNv
bnN0IFN0cmluZyYgZGF0YSkgZmluYWw7CisgICAgdm9pZCBicmVha3BvaW50QWN0aW9uTG9nKEpT
Qzo6SlNHbG9iYWxPYmplY3QqLCBjb25zdCBTdHJpbmcmIGRhdGEpOwogCiAgICAgLy8gSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uCiAgICAgdm9pZCBkaWRDbGVhcldpbmRvd09iamVjdEluV29ybGQo
RnJhbWUmLCBET01XcmFwcGVyV29ybGQmKTsKQEAgLTY0LDE1ICs2NCwxNSBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBkaWRDYW5jZWxBbmltYXRpb25GcmFtZShpbnQgY2FsbGJhY2tJZCk7CiAKIHByaXZh
dGU6Ci0gICAgdm9pZCBlbmFibGUoKSBvdmVycmlkZTsKLSAgICB2b2lkIGRpc2FibGUoYm9vbCBp
c0JlaW5nRGVzdHJveWVkKSBvdmVycmlkZTsKKyAgICB2b2lkIGludGVybmFsRW5hYmxlKCk7Cisg
ICAgdm9pZCBpbnRlcm5hbERpc2FibGUoYm9vbCBpc0JlaW5nRGVzdHJveWVkKTsKIAotICAgIFN0
cmluZyBzb3VyY2VNYXBVUkxGb3JTY3JpcHQoY29uc3QgSlNDOjpEZWJ1Z2dlcjo6U2NyaXB0Jikg
b3ZlcnJpZGU7CisgICAgU3RyaW5nIHNvdXJjZU1hcFVSTEZvclNjcmlwdChjb25zdCBKU0M6OkRl
YnVnZ2VyOjpTY3JpcHQmKTsKIAotICAgIHZvaWQgbXV0ZUNvbnNvbGUoKSBvdmVycmlkZTsKLSAg
ICB2b2lkIHVubXV0ZUNvbnNvbGUoKSBvdmVycmlkZTsKKyAgICB2b2lkIG11dGVDb25zb2xlKCk7
CisgICAgdm9pZCB1bm11dGVDb25zb2xlKCk7CiAKLSAgICBJbnNwZWN0b3I6OkluamVjdGVkU2Ny
aXB0IGluamVjdGVkU2NyaXB0Rm9yRXZhbChFcnJvclN0cmluZyYsIGNvbnN0IGludCogZXhlY3V0
aW9uQ29udGV4dElkKSBvdmVycmlkZTsKKyAgICBJbnNwZWN0b3I6OkluamVjdGVkU2NyaXB0IGlu
amVjdGVkU2NyaXB0Rm9yRXZhbChJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZyYsIE9w
dGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkV4ZWN1dGlvbkNvbnRleHRJZD4m
Jik7CiAKICAgICBQYWdlJiBtX2luc3BlY3RlZFBhZ2U7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VIZWFwQWdlbnQuY3BwIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VIZWFwQWdlbnQuY3BwCmluZGV4IDQ5
MjE4ZWYxMjgzZWJkNGRkNzU0MjExMzY5YjM0OWE0ODI1MjJkOTguLjQwMzZhMjNjNjg1MDdlNTk0
YWIyZTk3NGY1YjYyZGI4NjdjNzg3NjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9hZ2VudHMvcGFnZS9QYWdlSGVhcEFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZUhlYXBBZ2VudC5jcHAKQEAgLTM5LDE2ICszOSwyMCBA
QCBQYWdlSGVhcEFnZW50OjpQYWdlSGVhcEFnZW50KFBhZ2VBZ2VudENvbnRleHQmIGNvbnRleHQp
CiAKIFBhZ2VIZWFwQWdlbnQ6On5QYWdlSGVhcEFnZW50KCkgPSBkZWZhdWx0OwogCi12b2lkIFBh
Z2VIZWFwQWdlbnQ6OmVuYWJsZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCitQcm90b2NvbDo6
RXJyb3JTdHJpbmdPcjx2b2lkPiBQYWdlSGVhcEFnZW50OjplbmFibGUoKQogewotICAgIFdlYkhl
YXBBZ2VudDo6ZW5hYmxlKGVycm9yU3RyaW5nKTsKKyAgICBhdXRvIHJlc3VsdCA9IFdlYkhlYXBB
Z2VudDo6ZW5hYmxlKCk7CisKICAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMuc2V0RW5hYmxlZFBh
Z2VIZWFwQWdlbnQodGhpcyk7CisKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIFBhZ2VI
ZWFwQWdlbnQ6OmRpc2FibGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nKQorUHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8dm9pZD4gUGFnZUhlYXBBZ2VudDo6ZGlzYWJsZSgpCiB7CiAgICAgbV9pbnN0
cnVtZW50aW5nQWdlbnRzLnNldEVuYWJsZWRQYWdlSGVhcEFnZW50KG51bGxwdHIpOwotICAgIFdl
YkhlYXBBZ2VudDo6ZGlzYWJsZShlcnJvclN0cmluZyk7CisKKyAgICByZXR1cm4gV2ViSGVhcEFn
ZW50OjpkaXNhYmxlKCk7CiB9CiAKIHZvaWQgUGFnZUhlYXBBZ2VudDo6bWFpbkZyYW1lTmF2aWdh
dGVkKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9Q
YWdlSGVhcEFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFn
ZUhlYXBBZ2VudC5oCmluZGV4IDFiZDZjYTBmYzllZjE1YTFkN2EyNTI4NDI5NWE4ZTE5ZTg1ZjEw
ZGUuLmYyNmZmODRiMzhiOTRjOTcyZDlmNDZjYzljNGE3NGVhZmY3NGM3YWIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlSGVhcEFnZW50LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VIZWFwQWdlbnQuaApA
QCAtMzEsMTggKzMxLDE2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdHlwZWRlZiBTdHJp
bmcgRXJyb3JTdHJpbmc7Ci0KIGNsYXNzIFBhZ2VIZWFwQWdlbnQgZmluYWwgOiBwdWJsaWMgV2Vi
SGVhcEFnZW50IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShQYWdlSGVhcEFnZW50KTsKICAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBQYWdlSGVhcEFnZW50KFBh
Z2VBZ2VudENvbnRleHQmKTsKLSAgICB+UGFnZUhlYXBBZ2VudCgpIG92ZXJyaWRlOworICAgIH5Q
YWdlSGVhcEFnZW50KCk7CiAKICAgICAvLyBIZWFwQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyCi0g
ICAgdm9pZCBlbmFibGUoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2b2lkIGRpc2FibGUo
RXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0
cmluZ09yPHZvaWQ+IGVuYWJsZSgpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3Ry
aW5nT3I8dm9pZD4gZGlzYWJsZSgpOwogCiAgICAgLy8gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
CiAgICAgdm9pZCBtYWluRnJhbWVOYXZpZ2F0ZWQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlTmV0d29ya0FnZW50LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlTmV0d29ya0FnZW50LmNwcAppbmRleCAy
YzY1YjgxMDQ5NGJiZWI3M2Q1MzRlNjYyYWMzMTE5M2Y0MGMzYzY4Li45ZmUxMzk5YzNiNzI2MjM1
NTJiNDIzYjAwMzNlMzNmOTgxYzNiM2Q0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZU5ldHdvcmtBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VOZXR3b3JrQWdlbnQuY3BwCkBAIC00Nyw3ICs0
Nyw3IEBAIFBhZ2VOZXR3b3JrQWdlbnQ6OlBhZ2VOZXR3b3JrQWdlbnQoUGFnZUFnZW50Q29udGV4
dCYgY29udGV4dCkKIAogUGFnZU5ldHdvcmtBZ2VudDo6flBhZ2VOZXR3b3JrQWdlbnQoKSA9IGRl
ZmF1bHQ7CiAKLVN0cmluZyBQYWdlTmV0d29ya0FnZW50Ojpsb2FkZXJJZGVudGlmaWVyKERvY3Vt
ZW50TG9hZGVyKiBsb2FkZXIpCitQcm90b2NvbDo6TmV0d29yazo6TG9hZGVySWQgUGFnZU5ldHdv
cmtBZ2VudDo6bG9hZGVySWRlbnRpZmllcihEb2N1bWVudExvYWRlciogbG9hZGVyKQogewogICAg
IGlmIChsb2FkZXIpIHsKICAgICAgICAgaWYgKGF1dG8qIHBhZ2VBZ2VudCA9IG1faW5zdHJ1bWVu
dGluZ0FnZW50cy5lbmFibGVkUGFnZUFnZW50KCkpCkBAIC01Niw3ICs1Niw3IEBAIFN0cmluZyBQ
YWdlTmV0d29ya0FnZW50Ojpsb2FkZXJJZGVudGlmaWVyKERvY3VtZW50TG9hZGVyKiBsb2FkZXIp
CiAgICAgcmV0dXJuIHsgfTsKIH0KIAotU3RyaW5nIFBhZ2VOZXR3b3JrQWdlbnQ6OmZyYW1lSWRl
bnRpZmllcihEb2N1bWVudExvYWRlciogbG9hZGVyKQorUHJvdG9jb2w6Ok5ldHdvcms6OkZyYW1l
SWQgUGFnZU5ldHdvcmtBZ2VudDo6ZnJhbWVJZGVudGlmaWVyKERvY3VtZW50TG9hZGVyKiBsb2Fk
ZXIpCiB7CiAgICAgaWYgKGxvYWRlcikgewogICAgICAgICBpZiAoYXV0byogcGFnZUFnZW50ID0g
bV9pbnN0cnVtZW50aW5nQWdlbnRzLmVuYWJsZWRQYWdlQWdlbnQoKSkKQEAgLTkxLDEyICs5MSwx
MiBAQCBWZWN0b3I8V2ViU29ja2V0Kj4gUGFnZU5ldHdvcmtBZ2VudDo6YWN0aXZlV2ViU29ja2V0
cyhjb25zdCBMb2NrSG9sZGVyJiBsb2NrKQogICAgIHJldHVybiB3ZWJTb2NrZXRzOwogfQogCi12
b2lkIFBhZ2VOZXR3b3JrQWdlbnQ6OnNldFJlc291cmNlQ2FjaGluZ0Rpc2FibGVkKGJvb2wgZGlz
YWJsZWQpCit2b2lkIFBhZ2VOZXR3b3JrQWdlbnQ6OnNldFJlc291cmNlQ2FjaGluZ0Rpc2FibGVk
SW50ZXJhbChib29sIGRpc2FibGVkKQogewogICAgIG1faW5zcGVjdGVkUGFnZS5zZXRSZXNvdXJj
ZUNhY2hpbmdEaXNhYmxlZEJ5V2ViSW5zcGVjdG9yKGRpc2FibGVkKTsKIH0KIAotU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogUGFnZU5ldHdvcmtBZ2VudDo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dChF
cnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgZnJhbWVJZCkKK1NjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIFBhZ2VOZXR3b3JrQWdlbnQ6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
UHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgUHJvdG9jb2w6Ok5ldHdv
cms6OkZyYW1lSWQmIGZyYW1lSWQpCiB7CiAgICAgYXV0byogcGFnZUFnZW50ID0gbV9pbnN0cnVt
ZW50aW5nQWdlbnRzLmVuYWJsZWRQYWdlQWdlbnQoKTsKICAgICBpZiAoIXBhZ2VBZ2VudCkgewpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VOZXR3
b3JrQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlTmV0
d29ya0FnZW50LmgKaW5kZXggYmVkY2UzZThkYmI3YzlkMjJiMmUxYjk3MmQyMmIyYTViY2U0MGFj
YS4uMDJkNGJlYjIxYzUyZmMxYjM0NjcyZGNlYWEzNzUwNDUxYmU1MjQxZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VOZXR3b3JrQWdlbnQuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZU5ldHdvcmtBZ2Vu
dC5oCkBAIC0zNiwxNSArMzYsMTUgQEAgY2xhc3MgUGFnZU5ldHdvcmtBZ2VudCBmaW5hbCA6IHB1
YmxpYyBJbnNwZWN0b3JOZXR3b3JrQWdlbnQgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OwogcHVibGljOgogICAgIFBhZ2VOZXR3b3JrQWdlbnQoUGFnZUFnZW50Q29udGV4dCYpOwotICAg
IH5QYWdlTmV0d29ya0FnZW50KCkgb3ZlcnJpZGU7CisgICAgflBhZ2VOZXR3b3JrQWdlbnQoKTsK
IAogcHJpdmF0ZToKLSAgICBTdHJpbmcgbG9hZGVySWRlbnRpZmllcihEb2N1bWVudExvYWRlciop
IG92ZXJyaWRlOwotICAgIFN0cmluZyBmcmFtZUlkZW50aWZpZXIoRG9jdW1lbnRMb2FkZXIqKSBv
dmVycmlkZTsKLSAgICBWZWN0b3I8V2ViU29ja2V0Kj4gYWN0aXZlV2ViU29ja2V0cyhjb25zdCBM
b2NrSG9sZGVyJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRSZXNvdXJjZUNhY2hpbmdEaXNhYmxl
ZChib29sKSBvdmVycmlkZTsKLSAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVj
dXRpb25Db250ZXh0KEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBmcmFtZUlkKSBvdmVycmlk
ZTsKLSAgICBib29sIHNob3VsZEZvcmNlQnVmZmVyaW5nTmV0d29ya1Jlc291cmNlRGF0YSgpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6
TmV0d29yazo6TG9hZGVySWQgbG9hZGVySWRlbnRpZmllcihEb2N1bWVudExvYWRlciopOworICAg
IEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OkZyYW1lSWQgZnJhbWVJZGVudGlmaWVyKERv
Y3VtZW50TG9hZGVyKik7CisgICAgVmVjdG9yPFdlYlNvY2tldCo+IGFjdGl2ZVdlYlNvY2tldHMo
Y29uc3QgTG9ja0hvbGRlciYpOworICAgIHZvaWQgc2V0UmVzb3VyY2VDYWNoaW5nRGlzYWJsZWRJ
bnRlcmFsKGJvb2wpOworICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBjb25zdCBJbnNwZWN0
b3I6OlByb3RvY29sOjpOZXR3b3JrOjpGcmFtZUlkJik7CisgICAgYm9vbCBzaG91bGRGb3JjZUJ1
ZmZlcmluZ05ldHdvcmtSZXNvdXJjZURhdGEoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCiAg
ICAgUGFnZSYgbV9pbnNwZWN0ZWRQYWdlOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlUnVudGltZUFnZW50LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlUnVudGltZUFnZW50LmNwcAppbmRleCBlOGFi
NWY0Yzg5YWRlNGZjODVjMDQyYjQzNDMzYjcyNjU2M2FiZGQyLi4wMGU2OWYxYWEyZTNmOGVhMmY0
NDVlOGRkNDQ2ZGQxNmVhNjM2M2RmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvYWdlbnRzL3BhZ2UvUGFnZVJ1bnRpbWVBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VSdW50aW1lQWdlbnQuY3BwCkBAIC01MiwxMSArNTIs
NiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CiAK
LXN0YXRpYyBib29sIGFzQm9vbChjb25zdCBib29sKiBiKQotewotICAgIHJldHVybiBiICYmICpi
OwotfQotCiBQYWdlUnVudGltZUFnZW50OjpQYWdlUnVudGltZUFnZW50KFBhZ2VBZ2VudENvbnRl
eHQmIGNvbnRleHQpCiAgICAgOiBJbnNwZWN0b3JSdW50aW1lQWdlbnQoY29udGV4dCkKICAgICAs
IG1fZnJvbnRlbmREaXNwYXRjaGVyKG1ha2VVbmlxdWU8SW5zcGVjdG9yOjpSdW50aW1lRnJvbnRl
bmREaXNwYXRjaGVyPihjb250ZXh0LmZyb250ZW5kUm91dGVyKSkKQEAgLTY4LDI3ICs2MywyOSBA
QCBQYWdlUnVudGltZUFnZW50OjpQYWdlUnVudGltZUFnZW50KFBhZ2VBZ2VudENvbnRleHQmIGNv
bnRleHQpCiAKIFBhZ2VSdW50aW1lQWdlbnQ6On5QYWdlUnVudGltZUFnZW50KCkgPSBkZWZhdWx0
OwogCi12b2lkIFBhZ2VSdW50aW1lQWdlbnQ6OmVuYWJsZShFcnJvclN0cmluZyYgZXJyb3JTdHJp
bmcpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBQYWdlUnVudGltZUFnZW50OjplbmFi
bGUoKQogewogICAgIGlmIChtX2luc3RydW1lbnRpbmdBZ2VudHMuZW5hYmxlZFBhZ2VSdW50aW1l
QWdlbnQoKSA9PSB0aGlzKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB7IH07CiAK
LSAgICBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmVuYWJsZShlcnJvclN0cmluZyk7Ci0gICAgaWYg
KCFlcnJvclN0cmluZy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKKyAgICBhdXRvIHJlc3Vs
dCA9IEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6ZW5hYmxlKCk7CisgICAgaWYgKCFyZXN1bHQpCisg
ICAgICAgIHJldHVybiByZXN1bHQ7CiAKICAgICAvLyBSZXBvcnQgaW5pdGlhbCBjb250ZXh0cyBi
ZWZvcmUgZW5hYmxpbmcgaW5zdHJ1bWVudGF0aW9uIGFzIHRoZSByZXBvcnRpbmcKICAgICAvLyBj
YW4gZm9yY2UgY3JlYXRpb24gb2Ygc2NyaXB0IHN0YXRlIHdoaWNoIGNvdWxkIHJlc3VsdCBpbiBk
dXBsaWNhdGUgbm90aWZpY2F0aW9ucy4KICAgICByZXBvcnRFeGVjdXRpb25Db250ZXh0Q3JlYXRp
b24oKTsKIAogICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy5zZXRFbmFibGVkUGFnZVJ1bnRpbWVB
Z2VudCh0aGlzKTsKKworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgUGFnZVJ1bnRpbWVB
Z2VudDo6ZGlzYWJsZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCitQcm90b2NvbDo6RXJyb3JT
dHJpbmdPcjx2b2lkPiBQYWdlUnVudGltZUFnZW50OjpkaXNhYmxlKCkKIHsKICAgICBtX2luc3Ry
dW1lbnRpbmdBZ2VudHMuc2V0RW5hYmxlZFBhZ2VSdW50aW1lQWdlbnQobnVsbHB0cik7CiAKLSAg
ICBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmRpc2FibGUoZXJyb3JTdHJpbmcpOworICAgIHJldHVy
biBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmRpc2FibGUoKTsKIH0KIAogdm9pZCBQYWdlUnVudGlt
ZUFnZW50OjpmcmFtZU5hdmlnYXRlZChGcmFtZSYgZnJhbWUpCkBAIC0xMDYsNyArMTAzLDcgQEAg
dm9pZCBQYWdlUnVudGltZUFnZW50OjpkaWRDbGVhcldpbmRvd09iamVjdEluV29ybGQoRnJhbWUm
IGZyYW1lLCBET01XcmFwcGVyV29ybGQKICAgICBub3RpZnlDb250ZXh0Q3JlYXRlZChwYWdlQWdl
bnQtPmZyYW1lSWQoJmZyYW1lKSwgZnJhbWUuc2NyaXB0KCkuZ2xvYmFsT2JqZWN0KHdvcmxkKSwg
d29ybGQpOwogfQogCi1JbmplY3RlZFNjcmlwdCBQYWdlUnVudGltZUFnZW50OjppbmplY3RlZFNj
cmlwdEZvckV2YWwoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBpbnQqIGV4ZWN1dGlv
bkNvbnRleHRJZCkKK0luamVjdGVkU2NyaXB0IFBhZ2VSdW50aW1lQWdlbnQ6OmluamVjdGVkU2Ny
aXB0Rm9yRXZhbChQcm90b2NvbDo6RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBPcHRpb25hbDxQ
cm90b2NvbDo6UnVudGltZTo6RXhlY3V0aW9uQ29udGV4dElkPiYmIGV4ZWN1dGlvbkNvbnRleHRJ
ZCkKIHsKICAgICBpZiAoIWV4ZWN1dGlvbkNvbnRleHRJZCkgewogICAgICAgICBKU0M6OkpTR2xv
YmFsT2JqZWN0KiBzY3JpcHRTdGF0ZSA9IG1haW5Xb3JsZEV4ZWNTdGF0ZSgmbV9pbnNwZWN0ZWRQ
YWdlLm1haW5GcmFtZSgpKTsKQEAgLTE1OSwyMiArMTU2LDIyIEBAIHZvaWQgUGFnZVJ1bnRpbWVB
Z2VudDo6cmVwb3J0RXhlY3V0aW9uQ29udGV4dENyZWF0aW9uKCkKICAgICB9CiB9CiAKLXN0YXRp
YyBJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0VHlwZSB0b1By
b3RvY29sKERPTVdyYXBwZXJXb3JsZDo6VHlwZSB0eXBlKQorc3RhdGljIFByb3RvY29sOjpSdW50
aW1lOjpFeGVjdXRpb25Db250ZXh0VHlwZSB0b1Byb3RvY29sKERPTVdyYXBwZXJXb3JsZDo6VHlw
ZSB0eXBlKQogewogICAgIHN3aXRjaCAodHlwZSkgewogICAgIGNhc2UgRE9NV3JhcHBlcldvcmxk
OjpUeXBlOjpOb3JtYWw6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50
aW1lOjpFeGVjdXRpb25Db250ZXh0VHlwZTo6Tm9ybWFsOworICAgICAgICByZXR1cm4gUHJvdG9j
b2w6OlJ1bnRpbWU6OkV4ZWN1dGlvbkNvbnRleHRUeXBlOjpOb3JtYWw7CiAgICAgY2FzZSBET01X
cmFwcGVyV29ybGQ6OlR5cGU6OlVzZXI6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0VHlwZTo6VXNlcjsKKyAgICAgICAgcmV0dXJu
IFByb3RvY29sOjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0VHlwZTo6VXNlcjsKICAgICBjYXNl
IERPTVdyYXBwZXJXb3JsZDo6VHlwZTo6SW50ZXJuYWw6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0
b3I6OlByb3RvY29sOjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0VHlwZTo6SW50ZXJuYWw7Cisg
ICAgICAgIHJldHVybiBQcm90b2NvbDo6UnVudGltZTo6RXhlY3V0aW9uQ29udGV4dFR5cGU6Oklu
dGVybmFsOwogICAgIH0KIAogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBJ
bnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0VHlwZTo6SW50ZXJu
YWw7CisgICAgcmV0dXJuIFByb3RvY29sOjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0VHlwZTo6
SW50ZXJuYWw7CiB9CiAKLXZvaWQgUGFnZVJ1bnRpbWVBZ2VudDo6bm90aWZ5Q29udGV4dENyZWF0
ZWQoY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIGNvbnN0IERPTVdyYXBwZXJXb3JsZCYgd29ybGQsIFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0
eU9yaWdpbikKK3ZvaWQgUGFnZVJ1bnRpbWVBZ2VudDo6bm90aWZ5Q29udGV4dENyZWF0ZWQoY29u
c3QgUHJvdG9jb2w6Ok5ldHdvcms6OkZyYW1lSWQmIGZyYW1lSWQsIEpTQzo6SlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgY29uc3QgRE9NV3JhcHBlcldvcmxkJiB3b3JsZCwgU2VjdXJpdHlP
cmlnaW4qIHNlY3VyaXR5T3JpZ2luKQogewogICAgIGF1dG8gaW5qZWN0ZWRTY3JpcHQgPSBpbmpl
Y3RlZFNjcmlwdE1hbmFnZXIoKS5pbmplY3RlZFNjcmlwdEZvcihnbG9iYWxPYmplY3QpOwogICAg
IGlmIChpbmplY3RlZFNjcmlwdC5oYXNOb1ZhbHVlKCkpCkBAIC0xODQsNyArMTgxLDcgQEAgdm9p
ZCBQYWdlUnVudGltZUFnZW50Ojpub3RpZnlDb250ZXh0Q3JlYXRlZChjb25zdCBTdHJpbmcmIGZy
YW1lSWQsIEpTQzo6SlNHbG9iYWwKICAgICBpZiAobmFtZS5pc0VtcHR5KCkgJiYgc2VjdXJpdHlP
cmlnaW4pCiAgICAgICAgIG5hbWUgPSBzZWN1cml0eU9yaWdpbi0+dG9SYXdTdHJpbmcoKTsKIAot
ICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5leGVjdXRpb25Db250ZXh0Q3JlYXRlZChJbnNwZWN0
b3I6OlByb3RvY29sOjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0RGVzY3JpcHRpb246OmNyZWF0
ZSgpCisgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPmV4ZWN1dGlvbkNvbnRleHRDcmVhdGVkKFBy
b3RvY29sOjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0RGVzY3JpcHRpb246OmNyZWF0ZSgpCiAg
ICAgICAgIC5zZXRJZChpbmplY3RlZFNjcmlwdE1hbmFnZXIoKS5pbmplY3RlZFNjcmlwdElkRm9y
KGdsb2JhbE9iamVjdCkpCiAgICAgICAgIC5zZXRUeXBlKHRvUHJvdG9jb2wod29ybGQudHlwZSgp
KSkKICAgICAgICAgLnNldE5hbWUobmFtZSkKQEAgLTE5MiwxNiArMTg5LDE2IEBAIHZvaWQgUGFn
ZVJ1bnRpbWVBZ2VudDo6bm90aWZ5Q29udGV4dENyZWF0ZWQoY29uc3QgU3RyaW5nJiBmcmFtZUlk
LCBKU0M6OkpTR2xvYmFsCiAgICAgICAgIC5yZWxlYXNlKCkpOwogfQogCi12b2lkIFBhZ2VSdW50
aW1lQWdlbnQ6OmV2YWx1YXRlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5n
JiBleHByZXNzaW9uLCBjb25zdCBTdHJpbmcqIG9iamVjdEdyb3VwLCBjb25zdCBib29sKiBpbmNs
dWRlQ29tbWFuZExpbmVBUEksIGNvbnN0IGJvb2wqIGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRN
dXRlQ29uc29sZSwgY29uc3QgaW50KiBleGVjdXRpb25Db250ZXh0SWQsIGNvbnN0IGJvb2wqIHJl
dHVybkJ5VmFsdWUsIGNvbnN0IGJvb2wqIGdlbmVyYXRlUHJldmlldywgY29uc3QgYm9vbCogc2F2
ZVJlc3VsdCwgY29uc3QgYm9vbCogZW11bGF0ZVVzZXJHZXN0dXJlLCBSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0LCBPcHRpb25hbDxib29s
PiYgd2FzVGhyb3duLCBPcHRpb25hbDxpbnQ+JiBzYXZlZFJlc3VsdEluZGV4KQorUHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8c3RkOjp0dXBsZTxSZWY8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9i
amVjdD4sIE9wdGlvbmFsPGJvb2w+IC8qIHdhc1Rocm93biAqLywgT3B0aW9uYWw8aW50PiAvKiBz
YXZlZFJlc3VsdEluZGV4ICovPj4gUGFnZVJ1bnRpbWVBZ2VudDo6ZXZhbHVhdGUoY29uc3QgU3Ry
aW5nJiBleHByZXNzaW9uLCBjb25zdCBTdHJpbmcmIG9iamVjdEdyb3VwLCBPcHRpb25hbDxib29s
PiYmIGluY2x1ZGVDb21tYW5kTGluZUFQSSwgT3B0aW9uYWw8Ym9vbD4mJiBkb05vdFBhdXNlT25F
eGNlcHRpb25zQW5kTXV0ZUNvbnNvbGUsIE9wdGlvbmFsPFByb3RvY29sOjpSdW50aW1lOjpFeGVj
dXRpb25Db250ZXh0SWQ+JiYgZXhlY3V0aW9uQ29udGV4dElkLCBPcHRpb25hbDxib29sPiYmIHJl
dHVybkJ5VmFsdWUsIE9wdGlvbmFsPGJvb2w+JiYgZ2VuZXJhdGVQcmV2aWV3LCBPcHRpb25hbDxi
b29sPiYmIHNhdmVSZXN1bHQsIE9wdGlvbmFsPGJvb2w+JiYgZW11bGF0ZVVzZXJHZXN0dXJlKQog
ewotICAgIFVzZXJHZXN0dXJlRW11bGF0aW9uU2NvcGUgdXNlckdlc3R1cmVTY29wZShtX2luc3Bl
Y3RlZFBhZ2UsIGFzQm9vbChlbXVsYXRlVXNlckdlc3R1cmUpKTsKLSAgICBJbnNwZWN0b3JSdW50
aW1lQWdlbnQ6OmV2YWx1YXRlKGVycm9yU3RyaW5nLCBleHByZXNzaW9uLCBvYmplY3RHcm91cCwg
aW5jbHVkZUNvbW1hbmRMaW5lQVBJLCBkb05vdFBhdXNlT25FeGNlcHRpb25zQW5kTXV0ZUNvbnNv
bGUsIGV4ZWN1dGlvbkNvbnRleHRJZCwgcmV0dXJuQnlWYWx1ZSwgZ2VuZXJhdGVQcmV2aWV3LCBz
YXZlUmVzdWx0LCBlbXVsYXRlVXNlckdlc3R1cmUsIHJlc3VsdCwgd2FzVGhyb3duLCBzYXZlZFJl
c3VsdEluZGV4KTsKKyAgICBVc2VyR2VzdHVyZUVtdWxhdGlvblNjb3BlIHVzZXJHZXN0dXJlU2Nv
cGUobV9pbnNwZWN0ZWRQYWdlLCBlbXVsYXRlVXNlckdlc3R1cmUgJiYgKmVtdWxhdGVVc2VyR2Vz
dHVyZSk7CisgICAgcmV0dXJuIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6ZXZhbHVhdGUoZXhwcmVz
c2lvbiwgb2JqZWN0R3JvdXAsIFdURk1vdmUoaW5jbHVkZUNvbW1hbmRMaW5lQVBJKSwgV1RGTW92
ZShkb05vdFBhdXNlT25FeGNlcHRpb25zQW5kTXV0ZUNvbnNvbGUpLCBXVEZNb3ZlKGV4ZWN1dGlv
bkNvbnRleHRJZCksIFdURk1vdmUocmV0dXJuQnlWYWx1ZSksIFdURk1vdmUoZ2VuZXJhdGVQcmV2
aWV3KSwgV1RGTW92ZShzYXZlUmVzdWx0KSwgV1RGTW92ZShlbXVsYXRlVXNlckdlc3R1cmUpKTsK
IH0KIAotdm9pZCBQYWdlUnVudGltZUFnZW50OjpjYWxsRnVuY3Rpb25PbihFcnJvclN0cmluZyYg
ZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgb2JqZWN0SWQsIGNvbnN0IFN0cmluZyYgZXhwcmVz
c2lvbiwgY29uc3QgSlNPTjo6QXJyYXkqIG9wdGlvbmFsQXJndW1lbnRzLCBjb25zdCBib29sKiBk
b05vdFBhdXNlT25FeGNlcHRpb25zQW5kTXV0ZUNvbnNvbGUsIGNvbnN0IGJvb2wqIHJldHVybkJ5
VmFsdWUsIGNvbnN0IGJvb2wqIGdlbmVyYXRlUHJldmlldywgY29uc3QgYm9vbCogZW11bGF0ZVVz
ZXJHZXN0dXJlLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2Jq
ZWN0PiYgcmVzdWx0LCBPcHRpb25hbDxib29sPiYgd2FzVGhyb3duKQorUHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8c3RkOjp0dXBsZTxSZWY8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4s
IE9wdGlvbmFsPGJvb2w+IC8qIHdhc1Rocm93biAqLz4+IFBhZ2VSdW50aW1lQWdlbnQ6OmNhbGxG
dW5jdGlvbk9uKGNvbnN0IFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3RJZCYgb2JqZWN0
SWQsIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgUmVmUHRyPEpTT046OkFycmF5PiYmIG9wdGlv
bmFsQXJndW1lbnRzLCBPcHRpb25hbDxib29sPiYmIGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRN
dXRlQ29uc29sZSwgT3B0aW9uYWw8Ym9vbD4mJiByZXR1cm5CeVZhbHVlLCBPcHRpb25hbDxib29s
PiYmIGdlbmVyYXRlUHJldmlldywgT3B0aW9uYWw8Ym9vbD4mJiBlbXVsYXRlVXNlckdlc3R1cmUp
CiB7Ci0gICAgVXNlckdlc3R1cmVFbXVsYXRpb25TY29wZSB1c2VyR2VzdHVyZVNjb3BlKG1faW5z
cGVjdGVkUGFnZSwgYXNCb29sKGVtdWxhdGVVc2VyR2VzdHVyZSkpOwotICAgIEluc3BlY3RvclJ1
bnRpbWVBZ2VudDo6Y2FsbEZ1bmN0aW9uT24oZXJyb3JTdHJpbmcsIG9iamVjdElkLCBleHByZXNz
aW9uLCBvcHRpb25hbEFyZ3VtZW50cywgZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25z
b2xlLCByZXR1cm5CeVZhbHVlLCBnZW5lcmF0ZVByZXZpZXcsIGVtdWxhdGVVc2VyR2VzdHVyZSwg
cmVzdWx0LCB3YXNUaHJvd24pOworICAgIFVzZXJHZXN0dXJlRW11bGF0aW9uU2NvcGUgdXNlckdl
c3R1cmVTY29wZShtX2luc3BlY3RlZFBhZ2UsIGVtdWxhdGVVc2VyR2VzdHVyZSAmJiAqZW11bGF0
ZVVzZXJHZXN0dXJlKTsKKyAgICByZXR1cm4gSW5zcGVjdG9yUnVudGltZUFnZW50OjpjYWxsRnVu
Y3Rpb25PbihvYmplY3RJZCwgZXhwcmVzc2lvbiwgV1RGTW92ZShvcHRpb25hbEFyZ3VtZW50cyks
IFdURk1vdmUoZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xlKSwgV1RGTW92ZShy
ZXR1cm5CeVZhbHVlKSwgV1RGTW92ZShnZW5lcmF0ZVByZXZpZXcpLCBXVEZNb3ZlKGVtdWxhdGVV
c2VyR2VzdHVyZSkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZVJ1bnRpbWVBZ2VudC5oIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VSdW50aW1lQWdlbnQuaApp
bmRleCAyYWYzNzM5YjdmZTdjMTZmYWE3ZDhkMjc5N2NlNmQwMTAyMTUzOThkLi4yOTg0NjVjNTJi
NDI0NjRjMjczMzY1OWUwN2YzZjc2MDE3NGE5NWViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZVJ1bnRpbWVBZ2VudC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlUnVudGltZUFnZW50LmgKQEAgLTQ1LDMx
ICs0NSwzMCBAQCBjbGFzcyBET01XcmFwcGVyV29ybGQ7CiBjbGFzcyBGcmFtZTsKIGNsYXNzIFBh
Z2U7CiBjbGFzcyBTZWN1cml0eU9yaWdpbjsKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwog
CiBjbGFzcyBQYWdlUnVudGltZUFnZW50IGZpbmFsIDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVj
dG9yUnVudGltZUFnZW50IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShQYWdlUnVudGltZUFn
ZW50KTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBQYWdlUnVu
dGltZUFnZW50KFBhZ2VBZ2VudENvbnRleHQmKTsKLSAgICB+UGFnZVJ1bnRpbWVBZ2VudCgpIG92
ZXJyaWRlOworICAgIH5QYWdlUnVudGltZUFnZW50KCk7CiAKICAgICAvLyBSdW50aW1lQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyCi0gICAgdm9pZCBlbmFibGUoRXJyb3JTdHJpbmcmKSBvdmVycmlk
ZTsKLSAgICB2b2lkIGRpc2FibGUoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2b2lkIGV2
YWx1YXRlKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBjb25zdCBTdHJp
bmcqIG9iamVjdEdyb3VwLCBjb25zdCBib29sKiBpbmNsdWRlQ29tbWFuZExpbmVBUEksIGNvbnN0
IGJvb2wqIGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29sZSwgY29uc3QgaW50KiBl
eGVjdXRpb25Db250ZXh0SWQsIGNvbnN0IGJvb2wqIHJldHVybkJ5VmFsdWUsIGNvbnN0IGJvb2wq
IGdlbmVyYXRlUHJldmlldywgY29uc3QgYm9vbCogc2F2ZVJlc3VsdCwgY29uc3QgYm9vbCogZW11
bGF0ZVVzZXJHZXN0dXJlLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6UmVt
b3RlT2JqZWN0PiYgcmVzdWx0LCBPcHRpb25hbDxib29sPiYgd2FzVGhyb3duLCBPcHRpb25hbDxp
bnQ+JiBzYXZlZFJlc3VsdEluZGV4KSBvdmVycmlkZTsKLSAgICB2b2lkIGNhbGxGdW5jdGlvbk9u
KEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBvYmplY3RJZCwgY29uc3QgU3RyaW5nJiBleHBy
ZXNzaW9uLCBjb25zdCBKU09OOjpBcnJheSogb3B0aW9uYWxBcmd1bWVudHMsIGNvbnN0IGJvb2wq
IGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29sZSwgY29uc3QgYm9vbCogcmV0dXJu
QnlWYWx1ZSwgY29uc3QgYm9vbCogZ2VuZXJhdGVQcmV2aWV3LCBjb25zdCBib29sKiBlbXVsYXRl
VXNlckdlc3R1cmUsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVP
YmplY3Q+JiByZXN1bHQsIE9wdGlvbmFsPGJvb2w+JiB3YXNUaHJvd24pIG92ZXJyaWRlOworICAg
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZW5hYmxlKCk7CisgICAg
SW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBkaXNhYmxlKCk7CisgICAg
SW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxzdGQ6OnR1cGxlPFJlZjxJbnNwZWN0
b3I6OlByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+LCBPcHRpb25hbDxib29sPiAvKiB3
YXNUaHJvd24gKi8sIE9wdGlvbmFsPGludD4gLyogc2F2ZWRSZXN1bHRJbmRleCAqLz4+IGV2YWx1
YXRlKGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCwg
T3B0aW9uYWw8Ym9vbD4mJiBpbmNsdWRlQ29tbWFuZExpbmVBUEksIE9wdGlvbmFsPGJvb2w+JiYg
ZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xlLCBPcHRpb25hbDxJbnNwZWN0b3I6
OlByb3RvY29sOjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0SWQ+JiYsIE9wdGlvbmFsPGJvb2w+
JiYgcmV0dXJuQnlWYWx1ZSwgT3B0aW9uYWw8Ym9vbD4mJiBnZW5lcmF0ZVByZXZpZXcsIE9wdGlv
bmFsPGJvb2w+JiYgc2F2ZVJlc3VsdCwgT3B0aW9uYWw8Ym9vbD4mJiBlbXVsYXRlVXNlckdlc3R1
cmUpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8c3RkOjp0dXBsZTxS
ZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiwgT3B0aW9uYWw8
Ym9vbD4gLyogd2FzVGhyb3duICovPj4gY2FsbEZ1bmN0aW9uT24oY29uc3QgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0SWQmLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Np
b24sIFJlZlB0cjxKU09OOjpBcnJheT4mJiBhcmd1bWVudHMsIE9wdGlvbmFsPGJvb2w+JiYgZG9O
b3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xlLCBPcHRpb25hbDxib29sPiYmIHJldHVy
bkJ5VmFsdWUsIE9wdGlvbmFsPGJvb2w+JiYgZ2VuZXJhdGVQcmV2aWV3LCBPcHRpb25hbDxib29s
PiYmIGVtdWxhdGVVc2VyR2VzdHVyZSk7CiAKICAgICAvLyBJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b24KICAgICB2b2lkIGZyYW1lTmF2aWdhdGVkKEZyYW1lJik7CiAgICAgdm9pZCBkaWRDbGVhcldp
bmRvd09iamVjdEluV29ybGQoRnJhbWUmLCBET01XcmFwcGVyV29ybGQmKTsKIAogcHJpdmF0ZToK
LSAgICBJbnNwZWN0b3I6OkluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0Rm9yRXZhbChFcnJv
clN0cmluZyYsIGNvbnN0IGludCogZXhlY3V0aW9uQ29udGV4dElkKSBvdmVycmlkZTsKLSAgICB2
b2lkIG11dGVDb25zb2xlKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCB1bm11dGVDb25zb2xlKCkgb3Zl
cnJpZGU7CisgICAgSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdEZvckV2
YWwoSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBPcHRpb25hbDxJbnNwZWN0b3I6
OlByb3RvY29sOjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0SWQ+JiYpOworICAgIHZvaWQgbXV0
ZUNvbnNvbGUoKTsKKyAgICB2b2lkIHVubXV0ZUNvbnNvbGUoKTsKICAgICB2b2lkIHJlcG9ydEV4
ZWN1dGlvbkNvbnRleHRDcmVhdGlvbigpOwotICAgIHZvaWQgbm90aWZ5Q29udGV4dENyZWF0ZWQo
Y29uc3QgU3RyaW5nJiBmcmFtZUlkLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgY29uc3QgRE9NV3Jh
cHBlcldvcmxkJiwgU2VjdXJpdHlPcmlnaW4qID0gbnVsbHB0cik7CisgICAgdm9pZCBub3RpZnlD
b250ZXh0Q3JlYXRlZChjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpGcmFtZUlk
JiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIGNvbnN0IERPTVdyYXBwZXJXb3JsZCYsIFNlY3VyaXR5
T3JpZ2luKiA9IG51bGxwdHIpOwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPEluc3BlY3Rvcjo6UnVu
dGltZUZyb250ZW5kRGlzcGF0Y2hlcj4gbV9mcm9udGVuZERpc3BhdGNoZXI7CiAgICAgUmVmUHRy
PEluc3BlY3Rvcjo6UnVudGltZUJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVy
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvU2Vy
dmljZVdvcmtlckFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29y
a2VyL1NlcnZpY2VXb3JrZXJBZ2VudC5jcHAKaW5kZXggMThhNjBjM2MxY2IyZmExMTMzZTg5NDE5
MTI2MzlmOTM3MmVmZjJhNi4uYmJlMmNjMDNkNjQ1ZmMxMjkwODRkYmVlOWRkODA0MjJiYmQ2M2Zk
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvU2Vy
dmljZVdvcmtlckFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRz
L3dvcmtlci9TZXJ2aWNlV29ya2VyQWdlbnQuY3BwCkBAIC01NCw5ICs1NCw5IEBAIHZvaWQgU2Vy
dmljZVdvcmtlckFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6
OkRpc2Nvbm5lY3RSZWFzCiB7CiB9CiAKLXZvaWQgU2VydmljZVdvcmtlckFnZW50OjpnZXRJbml0
aWFsaXphdGlvbkluZm8oRXJyb3JTdHJpbmcmLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
U2VydmljZVdvcmtlcjo6Q29uZmlndXJhdGlvbj4mIGluZm8pCitQcm90b2NvbDo6RXJyb3JTdHJp
bmdPcjxSZWY8UHJvdG9jb2w6OlNlcnZpY2VXb3JrZXI6OkNvbmZpZ3VyYXRpb24+PiBTZXJ2aWNl
V29ya2VyQWdlbnQ6OmdldEluaXRpYWxpemF0aW9uSW5mbygpCiB7Ci0gICAgaW5mbyA9IEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlNlcnZpY2VXb3JrZXI6OkNvbmZpZ3VyYXRpb246OmNyZWF0ZSgpCisg
ICAgcmV0dXJuIFByb3RvY29sOjpTZXJ2aWNlV29ya2VyOjpDb25maWd1cmF0aW9uOjpjcmVhdGUo
KQogICAgICAgICAuc2V0VGFyZ2V0SWQobV9zZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGUuaWRlbnRp
ZmllcigpKQogICAgICAgICAuc2V0U2VjdXJpdHlPcmlnaW4obV9zZXJ2aWNlV29ya2VyR2xvYmFs
U2NvcGUuc2VjdXJpdHlPcmlnaW4oKS0+dG9SYXdTdHJpbmcoKSkKICAgICAgICAgLnNldFVybCht
X3NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZS50aHJlYWQoKS5jb250ZXh0RGF0YSgpLnNjcmlwdFVS
TC5zdHJpbmcoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMv
d29ya2VyL1NlcnZpY2VXb3JrZXJBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Fn
ZW50cy93b3JrZXIvU2VydmljZVdvcmtlckFnZW50LmgKaW5kZXggODE0OWZmM2RhYzM1NzhmYzA0
OGI2NThlNjMxN2RlMzJiMTk3ZDQwMC4uMGJhNWNjNWNjN2YzM2Q2MTFiNDVhMDQ5ODc0NTA1NWI4
ZjI5ZmZjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93b3Jr
ZXIvU2VydmljZVdvcmtlckFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Fn
ZW50cy93b3JrZXIvU2VydmljZVdvcmtlckFnZW50LmgKQEAgLTM0LDIxICszNCwxOSBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFNlcnZpY2VXb3JrZXJHbG9iYWxTY29wZTsKIAotdHlw
ZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7Ci0KIGNsYXNzIFNlcnZpY2VXb3JrZXJBZ2VudCBmaW5h
bCA6IHB1YmxpYyBJbnNwZWN0b3JBZ2VudEJhc2UsIHB1YmxpYyBJbnNwZWN0b3I6OlNlcnZpY2VX
b3JrZXJCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KFNlcnZpY2VXb3JrZXJBZ2VudCk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJs
aWM6CiAgICAgU2VydmljZVdvcmtlckFnZW50KFdvcmtlckFnZW50Q29udGV4dCYpOwotICAgIH5T
ZXJ2aWNlV29ya2VyQWdlbnQoKSBvdmVycmlkZTsKKyAgICB+U2VydmljZVdvcmtlckFnZW50KCk7
CiAKICAgICAvLyBJbnNwZWN0b3JBZ2VudEJhc2UKLSAgICB2b2lkIGRpZENyZWF0ZUZyb250ZW5k
QW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kUm91dGVyKiwgSW5zcGVjdG9yOjpCYWNrZW5k
RGlzcGF0Y2hlciopIG92ZXJyaWRlOwotICAgIHZvaWQgd2lsbERlc3Ryb3lGcm9udGVuZEFuZEJh
Y2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKSBvdmVycmlkZTsKKyAgICB2b2lkIGRp
ZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kUm91dGVyKiwgSW5z
cGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlciopOworICAgIHZvaWQgd2lsbERlc3Ryb3lGcm9udGVu
ZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKTsKIAogICAgIC8vIFNlcnZp
Y2VXb3JrZXJCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIKLSAgICB2b2lkIGdldEluaXRpYWxpemF0
aW9uSW5mbyhFcnJvclN0cmluZyYsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpTZXJ2aWNl
V29ya2VyOjpDb25maWd1cmF0aW9uPiYpIG92ZXJyaWRlOworICAgIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkVycm9yU3RyaW5nT3I8UmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlNlcnZpY2VXb3JrZXI6
OkNvbmZpZ3VyYXRpb24+PiBnZXRJbml0aWFsaXphdGlvbkluZm8oKTsKIAogcHJpdmF0ZToKICAg
ICBTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGUmIG1fc2VydmljZVdvcmtlckdsb2JhbFNjb3BlOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2Vy
QXVkaXRBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9X
b3JrZXJBdWRpdEFnZW50LmNwcAppbmRleCBjMTJiNWFhNDEzMmY4OWFjNTgyZGViOWY3MmYxODUx
YTllZWY5NTNmLi44OTI0MTkwZWU2MjBmMTU1MTRhMjUwZDc2MmUyYmU0YTE5MzMwNjNkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJBdWRp
dEFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9X
b3JrZXJBdWRpdEFnZW50LmNwcApAQCAtNDgsNyArNDgsNyBAQCBXb3JrZXJBdWRpdEFnZW50OjpX
b3JrZXJBdWRpdEFnZW50KFdvcmtlckFnZW50Q29udGV4dCYgY29udGV4dCkKIAogV29ya2VyQXVk
aXRBZ2VudDo6fldvcmtlckF1ZGl0QWdlbnQoKSA9IGRlZmF1bHQ7CiAKLUluamVjdGVkU2NyaXB0
IFdvcmtlckF1ZGl0QWdlbnQ6OmluamVjdGVkU2NyaXB0Rm9yRXZhbChFcnJvclN0cmluZyYgZXJy
b3JTdHJpbmcsIGNvbnN0IGludCogZXhlY3V0aW9uQ29udGV4dElkKQorSW5qZWN0ZWRTY3JpcHQg
V29ya2VyQXVkaXRBZ2VudDo6aW5qZWN0ZWRTY3JpcHRGb3JFdmFsKFByb3RvY29sOjpFcnJvclN0
cmluZyYgZXJyb3JTdHJpbmcsIE9wdGlvbmFsPFByb3RvY29sOjpSdW50aW1lOjpFeGVjdXRpb25D
b250ZXh0SWQ+JiYgZXhlY3V0aW9uQ29udGV4dElkKQogewogICAgIGlmIChleGVjdXRpb25Db250
ZXh0SWQpIHsKICAgICAgICAgZXJyb3JTdHJpbmcgPSAiZXhlY3V0aW9uQ29udGV4dElkIGlzIG5v
dCBzdXBwb3J0ZWQgZm9yIHdvcmtlcnMgYXMgdGhlcmUgaXMgb25seSBvbmUgZXhlY3V0aW9uIGNv
bnRleHQiX3M7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dv
cmtlci9Xb3JrZXJBdWRpdEFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRz
L3dvcmtlci9Xb3JrZXJBdWRpdEFnZW50LmgKaW5kZXggZDZhY2RjMGVhM2U4OWYwZmFkMzFjY2Iy
ZDc2OGUwZTE0NmJkMzIzNS4uZDI1OWM2YTc2YzJlY2IwZWViOGVkZDczMzllYzA0NTliZDM3MmIz
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29y
a2VyQXVkaXRBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29y
a2VyL1dvcmtlckF1ZGl0QWdlbnQuaApAQCAtMzcsMTAgKzM3LDEwIEBAIGNsYXNzIFdvcmtlckF1
ZGl0QWdlbnQgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JBdWRpdEFnZW50IHsK
ICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBXb3JrZXJBdWRpdEFn
ZW50KFdvcmtlckFnZW50Q29udGV4dCYpOwotICAgIH5Xb3JrZXJBdWRpdEFnZW50KCkgb3ZlcnJp
ZGU7CisgICAgfldvcmtlckF1ZGl0QWdlbnQoKTsKIAogcHJpdmF0ZToKLSAgICBJbnNwZWN0b3I6
OkluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0Rm9yRXZhbChJbnNwZWN0b3I6OkVycm9yU3Ry
aW5nJiwgY29uc3QgaW50KiBleGVjdXRpb25Db250ZXh0SWQpIG92ZXJyaWRlOworICAgIEluc3Bl
Y3Rvcjo6SW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHRGb3JFdmFsKEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkVycm9yU3RyaW5nJiwgT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGlt
ZTo6RXhlY3V0aW9uQ29udGV4dElkPiYmKTsKIAogICAgIFdvcmtlckdsb2JhbFNjb3BlJiBtX3dv
cmtlckdsb2JhbFNjb3BlOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9hZ2VudHMvd29ya2VyL1dvcmtlckNvbnNvbGVBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2VyQ29uc29sZUFnZW50LmgKaW5kZXggYjdiNTVkMDA2
NTkwZWZiMDgzZmViYjk0ZTQzYjQxMmQ2M2NlYWZkMC4uNTcxNTk5MTI0N2NhZmI5ZDY3ZWYzMzE3
MWFkZmQxYzk2YzdlNDgyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Fn
ZW50cy93b3JrZXIvV29ya2VyQ29uc29sZUFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2VyQ29uc29sZUFnZW50LmgKQEAgLTM1LDcgKzM1LDcg
QEAgY2xhc3MgV29ya2VyQ29uc29sZUFnZW50IGZpbmFsIDogcHVibGljIFdlYkNvbnNvbGVBZ2Vu
dCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgV29ya2VyQ29u
c29sZUFnZW50KFdvcmtlckFnZW50Q29udGV4dCYpOwotICAgIH5Xb3JrZXJDb25zb2xlQWdlbnQo
KSBvdmVycmlkZTsKKyAgICB+V29ya2VyQ29uc29sZUFnZW50KCk7CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRz
L3dvcmtlci9Xb3JrZXJET01EZWJ1Z2dlckFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlckRPTURlYnVnZ2VyQWdlbnQuY3BwCmluZGV4IGJkNWQ4
YTgzNGVhZTg2MzMwZmNiOTcyYzU5MmQ1ZjcwYTdlNzMwNGMuLjkyMjc0MzUwYzYzNzE0NjA1MWQ3
NDk5YzliZmI3NDYwNzAzMjIxMTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9hZ2VudHMvd29ya2VyL1dvcmtlckRPTURlYnVnZ2VyQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlckRPTURlYnVnZ2VyQWdlbnQuY3Bw
CkBAIC0zNywxOSArMzcsMjAgQEAgV29ya2VyRE9NRGVidWdnZXJBZ2VudDo6V29ya2VyRE9NRGVi
dWdnZXJBZ2VudChXb3JrZXJBZ2VudENvbnRleHQmIGNvbnRleHQsIEluc3AKIAogV29ya2VyRE9N
RGVidWdnZXJBZ2VudDo6fldvcmtlckRPTURlYnVnZ2VyQWdlbnQoKSA9IGRlZmF1bHQ7CiAKLXZv
aWQgV29ya2VyRE9NRGVidWdnZXJBZ2VudDo6c2V0RE9NQnJlYWtwb2ludChFcnJvclN0cmluZyYg
ZXJyb3JTdHJpbmcsIGludCAvKiBub2RlSWQgKi8sIGNvbnN0IFN0cmluZyYgLyogdHlwZVN0cmlu
ZyAqLywgY29uc3QgSlNPTjo6T2JqZWN0KiAvKiBvcHRpb25zUGF5bG9hZCAqLykKK1Byb3RvY29s
OjpFcnJvclN0cmluZ09yPHZvaWQ+IFdvcmtlckRPTURlYnVnZ2VyQWdlbnQ6OnNldERPTUJyZWFr
cG9pbnQoUHJvdG9jb2w6OkRPTTo6Tm9kZUlkLCBQcm90b2NvbDo6RE9NRGVidWdnZXI6OkRPTUJy
ZWFrcG9pbnRUeXBlLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIC8qIG9wdGlvbnMgKi8pCiB7Ci0g
ICAgZXJyb3JTdHJpbmcgPSAiTm90IHN1cHBvcnRlZCJfczsKKyAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoIk5vdCBzdXBwb3J0ZWQiX3MpOwogfQogCi12b2lkIFdvcmtlckRPTURlYnVnZ2VyQWdl
bnQ6OnJlbW92ZURPTUJyZWFrcG9pbnQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgLyog
bm9kZUlkICovLCBjb25zdCBTdHJpbmcmIC8qIHR5cGVTdHJpbmcgKi8pCitQcm90b2NvbDo6RXJy
b3JTdHJpbmdPcjx2b2lkPiBXb3JrZXJET01EZWJ1Z2dlckFnZW50OjpyZW1vdmVET01CcmVha3Bv
aW50KFByb3RvY29sOjpET006Ok5vZGVJZCwgUHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpET01CcmVh
a3BvaW50VHlwZSkKIHsKLSAgICBlcnJvclN0cmluZyA9ICJOb3Qgc3VwcG9ydGVkIl9zOworICAg
IHJldHVybiBtYWtlVW5leHBlY3RlZCgiTm90IHN1cHBvcnRlZCJfcyk7CiB9CiAKLXZvaWQgV29y
a2VyRE9NRGVidWdnZXJBZ2VudDo6c2V0QW5pbWF0aW9uRnJhbWVCcmVha3BvaW50KEVycm9yU3Ry
aW5nJiBlcnJvclN0cmluZywgUmVmUHRyPEpTQzo6QnJlYWtwb2ludD4mJikKK2Jvb2wgV29ya2Vy
RE9NRGVidWdnZXJBZ2VudDo6c2V0QW5pbWF0aW9uRnJhbWVCcmVha3BvaW50KFByb3RvY29sOjpF
cnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIFJlZlB0cjxKU0M6OkJyZWFrcG9pbnQ+JiYpCiB7CiAg
ICAgZXJyb3JTdHJpbmcgPSAiTm90IHN1cHBvcnRlZCJfczsKKyAgICByZXR1cm4gZmFsc2U7CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlckRPTURlYnVnZ2VyQWdlbnQuaCBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlckRPTURlYnVnZ2VyQWdlbnQuaApp
bmRleCA4NmViOTNmNWUxOTc1NTFiYmQyMDk2OTY1NzljNzA4OTRkNThjMjFjLi41NmY1YTA5MGEz
MzA4NjAxZGJkYmE5YzRmMmI0ZDNmN2MxMTMzZDE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJET01EZWJ1Z2dlckFnZW50LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2VyRE9NRGVidWdnZXJB
Z2VudC5oCkBAIC0zMSwxOSArMzEsMTcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi10eXBl
ZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQogY2xhc3MgV29ya2VyRE9NRGVidWdnZXJBZ2VudCBm
aW5hbCA6IHB1YmxpYyBJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50IHsKIHB1YmxpYzoKICAgICBX
b3JrZXJET01EZWJ1Z2dlckFnZW50KFdvcmtlckFnZW50Q29udGV4dCYsIEluc3BlY3Rvcjo6SW5z
cGVjdG9yRGVidWdnZXJBZ2VudCopOwotICAgIH5Xb3JrZXJET01EZWJ1Z2dlckFnZW50KCkgb3Zl
cnJpZGU7CisgICAgfldvcmtlckRPTURlYnVnZ2VyQWdlbnQoKTsKIAogICAgIC8vIERPTURlYnVn
Z2VyQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyCi0gICAgdm9pZCBzZXRET01CcmVha3BvaW50KEVy
cm9yU3RyaW5nJiwgaW50IG5vZGVJZCwgY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBKU09OOjpP
YmplY3QqIG9wdGlvbnMpIG92ZXJyaWRlOwotICAgIHZvaWQgcmVtb3ZlRE9NQnJlYWtwb2ludChF
cnJvclN0cmluZyYsIGludCBub2RlSWQsIGNvbnN0IFN0cmluZyYgdHlwZSkgb3ZlcnJpZGU7Cisg
ICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzZXRET01CcmVha3Bv
aW50KEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkLCBJbnNwZWN0b3I6OlByb3RvY29s
OjpET01EZWJ1Z2dlcjo6RE9NQnJlYWtwb2ludFR5cGUsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYg
b3B0aW9ucyk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBy
ZW1vdmVET01CcmVha3BvaW50KEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkLCBJbnNw
ZWN0b3I6OlByb3RvY29sOjpET01EZWJ1Z2dlcjo6RE9NQnJlYWtwb2ludFR5cGUpOwogCiBwcml2
YXRlOgotICAgIHZvaWQgc2V0QW5pbWF0aW9uRnJhbWVCcmVha3BvaW50KEVycm9yU3RyaW5nJiwg
UmVmUHRyPEpTQzo6QnJlYWtwb2ludD4mJikgb3ZlcnJpZGU7CisgICAgYm9vbCBzZXRBbmltYXRp
b25GcmFtZUJyZWFrcG9pbnQoSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBSZWZQ
dHI8SlNDOjpCcmVha3BvaW50PiYmKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlckRl
YnVnZ2VyQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93b3JrZXIv
V29ya2VyRGVidWdnZXJBZ2VudC5jcHAKaW5kZXggY2JjNjIwNTIyMTk0ZjI5YTk0MTg3YThhMjdh
YzEyYjQxOWQzNTllMC4uN2FhNzJiNmE0YzY0Y2E5ZjY3ODE1MGQwNmEzMmQwMjk0YzUwODgyNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2Vy
RGVidWdnZXJBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93
b3JrZXIvV29ya2VyRGVidWdnZXJBZ2VudC5jcHAKQEAgLTUzLDcgKzUzLDcgQEAgdm9pZCBXb3Jr
ZXJEZWJ1Z2dlckFnZW50OjpicmVha3BvaW50QWN0aW9uTG9nKEpTR2xvYmFsT2JqZWN0KiBsZXhp
Y2FsR2xvYmFsT2JqZWMKICAgICBtX3dvcmtlckdsb2JhbFNjb3BlLmFkZENvbnNvbGVNZXNzYWdl
KG1ha2VVbmlxdWU8Q29uc29sZU1lc3NhZ2U+KE1lc3NhZ2VTb3VyY2U6OkpTLCBNZXNzYWdlVHlw
ZTo6TG9nLCBNZXNzYWdlTGV2ZWw6OkxvZywgbWVzc2FnZSwgY3JlYXRlU2NyaXB0Q2FsbFN0YWNr
KGxleGljYWxHbG9iYWxPYmplY3QpKSk7CiB9CiAKLUluamVjdGVkU2NyaXB0IFdvcmtlckRlYnVn
Z2VyQWdlbnQ6OmluamVjdGVkU2NyaXB0Rm9yRXZhbChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcs
IGNvbnN0IGludCogZXhlY3V0aW9uQ29udGV4dElkKQorSW5qZWN0ZWRTY3JpcHQgV29ya2VyRGVi
dWdnZXJBZ2VudDo6aW5qZWN0ZWRTY3JpcHRGb3JFdmFsKFByb3RvY29sOjpFcnJvclN0cmluZyYg
ZXJyb3JTdHJpbmcsIE9wdGlvbmFsPFByb3RvY29sOjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0
SWQ+JiYgZXhlY3V0aW9uQ29udGV4dElkKQogewogICAgIGlmIChleGVjdXRpb25Db250ZXh0SWQp
IHsKICAgICAgICAgZXJyb3JTdHJpbmcgPSAiZXhlY3V0aW9uQ29udGV4dElkIGlzIG5vdCBzdXBw
b3J0ZWQgZm9yIHdvcmtlcnMgYXMgdGhlcmUgaXMgb25seSBvbmUgZXhlY3V0aW9uIGNvbnRleHQi
X3M7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9X
b3JrZXJEZWJ1Z2dlckFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dv
cmtlci9Xb3JrZXJEZWJ1Z2dlckFnZW50LmgKaW5kZXggNGFjMDdkNmNjMzdjMjI4MDMzMzhlYjgw
ZDM0MjE5NTIxYjk2ZjNkZS4uN2NhNjRlNDAxM2E1NGI0MThkNTNlNDc0ODAyZTczMmJmMTkwOGM5
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29y
a2VyRGVidWdnZXJBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMv
d29ya2VyL1dvcmtlckRlYnVnZ2VyQWdlbnQuaApAQCAtMzYsMTcgKzM2LDE3IEBAIGNsYXNzIFdv
cmtlckRlYnVnZ2VyQWdlbnQgZmluYWwgOiBwdWJsaWMgV2ViRGVidWdnZXJBZ2VudCB7CiAgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgV29ya2VyRGVidWdnZXJBZ2Vu
dChXb3JrZXJBZ2VudENvbnRleHQmKTsKLSAgICB+V29ya2VyRGVidWdnZXJBZ2VudCgpIG92ZXJy
aWRlOworICAgIH5Xb3JrZXJEZWJ1Z2dlckFnZW50KCk7CiAKICAgICAvLyBKU0M6OkRlYnVnZ2Vy
OjpPYnNlcnZlcgotICAgIHZvaWQgYnJlYWtwb2ludEFjdGlvbkxvZyhKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiwgY29uc3QgU3RyaW5nJiBkYXRhKSBmaW5hbDsKKyAgICB2b2lkIGJyZWFrcG9pbnRBY3Rp
b25Mb2coSlNDOjpKU0dsb2JhbE9iamVjdCosIGNvbnN0IFN0cmluZyYgZGF0YSk7CiAKIHByaXZh
dGU6CiAgICAgLy8gV2UgZG9uJ3QgbmVlZCB0byBtdXRlIGNvbnNvbGUgZm9yIHdvcmtlcnMuCi0g
ICAgdm9pZCBtdXRlQ29uc29sZSgpIG92ZXJyaWRlIHsgfQotICAgIHZvaWQgdW5tdXRlQ29uc29s
ZSgpIG92ZXJyaWRlIHsgfQorICAgIHZvaWQgbXV0ZUNvbnNvbGUoKSB7IH0KKyAgICB2b2lkIHVu
bXV0ZUNvbnNvbGUoKSB7IH0KIAotICAgIEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHQgaW5qZWN0
ZWRTY3JpcHRGb3JFdmFsKEVycm9yU3RyaW5nJiwgY29uc3QgaW50KiBleGVjdXRpb25Db250ZXh0
SWQpIG92ZXJyaWRlOworICAgIEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3Jp
cHRGb3JFdmFsKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nJiwgT3B0aW9uYWw8SW5z
cGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RXhlY3V0aW9uQ29udGV4dElkPiYmKTsKIAogICAg
IFdvcmtlckdsb2JhbFNjb3BlJiBtX3dvcmtlckdsb2JhbFNjb3BlOwogfTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlck5ldHdvcmtBZ2Vu
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJOZXR3
b3JrQWdlbnQuY3BwCmluZGV4IDUzZmE4ODNhZDk3MTg4Njg0Y2I5NGMwOTBlNzk2MTY5MDgxYjZi
NGQuLjJiMTY4ZTZkM2E3YTFiZTE0NjgzNjljMzBjYzJlYjZjOWIzOWQyNzcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlck5ldHdvcmtBZ2Vu
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2Vy
TmV0d29ya0FnZW50LmNwcApAQCAtNDMsMTIgKzQzLDEyIEBAIFdvcmtlck5ldHdvcmtBZ2VudDo6
V29ya2VyTmV0d29ya0FnZW50KFdvcmtlckFnZW50Q29udGV4dCYgY29udGV4dCkKIAogV29ya2Vy
TmV0d29ya0FnZW50Ojp+V29ya2VyTmV0d29ya0FnZW50KCkgPSBkZWZhdWx0OwogCi1TdHJpbmcg
V29ya2VyTmV0d29ya0FnZW50Ojpsb2FkZXJJZGVudGlmaWVyKERvY3VtZW50TG9hZGVyKikKK1By
b3RvY29sOjpOZXR3b3JrOjpMb2FkZXJJZCBXb3JrZXJOZXR3b3JrQWdlbnQ6OmxvYWRlcklkZW50
aWZpZXIoRG9jdW1lbnRMb2FkZXIqKQogewogICAgIHJldHVybiB7IH07CiB9CiAKLVN0cmluZyBX
b3JrZXJOZXR3b3JrQWdlbnQ6OmZyYW1lSWRlbnRpZmllcihEb2N1bWVudExvYWRlciopCitQcm90
b2NvbDo6TmV0d29yazo6RnJhbWVJZCBXb3JrZXJOZXR3b3JrQWdlbnQ6OmZyYW1lSWRlbnRpZmll
cihEb2N1bWVudExvYWRlciopCiB7CiAgICAgcmV0dXJuIHsgfTsKIH0KQEAgLTU5LDEyICs1OSwx
MiBAQCBWZWN0b3I8V2ViU29ja2V0Kj4gV29ya2VyTmV0d29ya0FnZW50OjphY3RpdmVXZWJTb2Nr
ZXRzKGNvbnN0IExvY2tIb2xkZXImKQogICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgV29ya2Vy
TmV0d29ya0FnZW50OjpzZXRSZXNvdXJjZUNhY2hpbmdEaXNhYmxlZChib29sIGRpc2FibGVkKQor
dm9pZCBXb3JrZXJOZXR3b3JrQWdlbnQ6OnNldFJlc291cmNlQ2FjaGluZ0Rpc2FibGVkSW50ZXJh
bChib29sIGRpc2FibGVkKQogewogICAgIG1fd29ya2VyR2xvYmFsU2NvcGUudGhyZWFkKCkud29y
a2VyRGVidWdnZXJQcm94eSgpLnNldFJlc291cmNlQ2FjaGluZ0Rpc2FibGVkQnlXZWJJbnNwZWN0
b3IoZGlzYWJsZWQpOwogfQogCi1TY3JpcHRFeGVjdXRpb25Db250ZXh0KiBXb3JrZXJOZXR3b3Jr
QWdlbnQ6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcm
KQorU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogV29ya2VyTmV0d29ya0FnZW50OjpzY3JpcHRFeGVj
dXRpb25Db250ZXh0KFByb3RvY29sOjpFcnJvclN0cmluZyYsIGNvbnN0IFByb3RvY29sOjpOZXR3
b3JrOjpGcmFtZUlkJikKIHsKICAgICByZXR1cm4gJm1fd29ya2VyR2xvYmFsU2NvcGU7CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJO
ZXR3b3JrQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dv
cmtlck5ldHdvcmtBZ2VudC5oCmluZGV4IDg5OWYwYTU2ZmQxYjdkYTk0M2E0NTUzYjhjOTRjZjNj
N2JmYjBiOTQuLjkxYjA1YjljMjMwZWM3Y2QzNWE0NmNlNTdjNTY2MzkyNzIyMmRmZjMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlck5ldHdv
cmtBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dv
cmtlck5ldHdvcmtBZ2VudC5oCkBAIC0zNCwxNSArMzQsMTUgQEAgY2xhc3MgV29ya2VyTmV0d29y
a0FnZW50IGZpbmFsIDogcHVibGljIEluc3BlY3Rvck5ldHdvcmtBZ2VudCB7CiAgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgV29ya2VyTmV0d29ya0FnZW50KFdvcmtl
ckFnZW50Q29udGV4dCYpOwotICAgIH5Xb3JrZXJOZXR3b3JrQWdlbnQoKSBvdmVycmlkZTsKKyAg
ICB+V29ya2VyTmV0d29ya0FnZW50KCk7CiAKIHByaXZhdGU6Ci0gICAgU3RyaW5nIGxvYWRlcklk
ZW50aWZpZXIoRG9jdW1lbnRMb2FkZXIqKSBvdmVycmlkZTsKLSAgICBTdHJpbmcgZnJhbWVJZGVu
dGlmaWVyKERvY3VtZW50TG9hZGVyKikgb3ZlcnJpZGU7Ci0gICAgVmVjdG9yPFdlYlNvY2tldCo+
IGFjdGl2ZVdlYlNvY2tldHMoY29uc3QgTG9ja0hvbGRlciYpIG92ZXJyaWRlOwotICAgIHZvaWQg
c2V0UmVzb3VyY2VDYWNoaW5nRGlzYWJsZWQoYm9vbCkgb3ZlcnJpZGU7Ci0gICAgU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dChFcnJvclN0cmluZyYsIGNvbnN0
IFN0cmluZyYgZnJhbWVJZCkgb3ZlcnJpZGU7Ci0gICAgYm9vbCBzaG91bGRGb3JjZUJ1ZmZlcmlu
Z05ldHdvcmtSZXNvdXJjZURhdGEoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9Cisg
ICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6TG9hZGVySWQgbG9hZGVySWRlbnRpZmll
cihEb2N1bWVudExvYWRlciopOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OkZy
YW1lSWQgZnJhbWVJZGVudGlmaWVyKERvY3VtZW50TG9hZGVyKik7CisgICAgVmVjdG9yPFdlYlNv
Y2tldCo+IGFjdGl2ZVdlYlNvY2tldHMoY29uc3QgTG9ja0hvbGRlciYpOworICAgIHZvaWQgc2V0
UmVzb3VyY2VDYWNoaW5nRGlzYWJsZWRJbnRlcmFsKGJvb2wpOworICAgIFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJy
b3JTdHJpbmcmLCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpGcmFtZUlkJik7
CisgICAgYm9vbCBzaG91bGRGb3JjZUJ1ZmZlcmluZ05ldHdvcmtSZXNvdXJjZURhdGEoKSBjb25z
dCB7IHJldHVybiB0cnVlOyB9CiAKICAgICBXb3JrZXJHbG9iYWxTY29wZSYgbV93b3JrZXJHbG9i
YWxTY29wZTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRz
L3dvcmtlci9Xb3JrZXJSdW50aW1lQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2FnZW50cy93b3JrZXIvV29ya2VyUnVudGltZUFnZW50LmNwcAppbmRleCBkOTIzMDgxYzUxZTNi
ZDI3NTIxYWEyNDFjN2NhYzhmYjQwZDNlMjgzLi5mZmZkM2NlYTIxNTM1OWZlNmYwZWQxZWRkNzcy
ZDE2YjcwOTUxZGViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRz
L3dvcmtlci9Xb3JrZXJSdW50aW1lQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlclJ1bnRpbWVBZ2VudC5jcHAKQEAgLTUxLDcgKzUxLDcg
QEAgV29ya2VyUnVudGltZUFnZW50OjpXb3JrZXJSdW50aW1lQWdlbnQoV29ya2VyQWdlbnRDb250
ZXh0JiBjb250ZXh0KQogCiBXb3JrZXJSdW50aW1lQWdlbnQ6On5Xb3JrZXJSdW50aW1lQWdlbnQo
KSA9IGRlZmF1bHQ7CiAKLUluamVjdGVkU2NyaXB0IFdvcmtlclJ1bnRpbWVBZ2VudDo6aW5qZWN0
ZWRTY3JpcHRGb3JFdmFsKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgaW50KiBleGVj
dXRpb25Db250ZXh0SWQpCitJbmplY3RlZFNjcmlwdCBXb3JrZXJSdW50aW1lQWdlbnQ6OmluamVj
dGVkU2NyaXB0Rm9yRXZhbChQcm90b2NvbDo6RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBPcHRp
b25hbDxQcm90b2NvbDo6UnVudGltZTo6RXhlY3V0aW9uQ29udGV4dElkPiYmIGV4ZWN1dGlvbkNv
bnRleHRJZCkKIHsKICAgICBpZiAoZXhlY3V0aW9uQ29udGV4dElkKSB7CiAgICAgICAgIGVycm9y
U3RyaW5nID0gImV4ZWN1dGlvbkNvbnRleHRJZCBpcyBub3Qgc3VwcG9ydGVkIGZvciB3b3JrZXJz
IGFzIHRoZXJlIGlzIG9ubHkgb25lIGV4ZWN1dGlvbiBjb250ZXh0Il9zOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2VyUnVudGltZUFnZW50
LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJSdW50aW1l
QWdlbnQuaAppbmRleCA1MzA4ZWI0Mzg4ZDRkMTA1MmVjNzQ1ODUwNDdhMWU4OGU3ZDQzYjRiLi42
Yjk5OGY0ZDE3MzE4NTFmOTliNjdlZTE1YTVkMjAwMTU4N2Y0ZDA2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJSdW50aW1lQWdlbnQuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJSdW50aW1l
QWdlbnQuaApAQCAtMzcsMjEgKzM3LDIwIEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNz
IFdvcmtlckdsb2JhbFNjb3BlOwotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiAKIGNsYXNz
IFdvcmtlclJ1bnRpbWVBZ2VudCBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3BlY3RvclJ1
bnRpbWVBZ2VudCB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoV29ya2VyUnVudGltZUFnZW50
KTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBXb3JrZXJSdW50
aW1lQWdlbnQoV29ya2VyQWdlbnRDb250ZXh0Jik7Ci0gICAgfldvcmtlclJ1bnRpbWVBZ2VudCgp
IG92ZXJyaWRlOworICAgIH5Xb3JrZXJSdW50aW1lQWdlbnQoKTsKIAogcHJpdmF0ZToKLSAgICBJ
bnNwZWN0b3I6OkluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0Rm9yRXZhbChFcnJvclN0cmlu
ZyYsIGNvbnN0IGludCogZXhlY3V0aW9uQ29udGV4dElkKSBvdmVycmlkZTsKKyAgICBJbnNwZWN0
b3I6OkluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0Rm9yRXZhbChJbnNwZWN0b3I6OlByb3Rv
Y29sOjpFcnJvclN0cmluZyYsIE9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6
OkV4ZWN1dGlvbkNvbnRleHRJZD4mJik7CiAKICAgICAvLyBXZSBkb24ndCBuZWVkIHRvIG11dGUg
Y29uc29sZSBmb3Igd29ya2Vycy4KLSAgICB2b2lkIG11dGVDb25zb2xlKCkgb3ZlcnJpZGUgeyB9
Ci0gICAgdm9pZCB1bm11dGVDb25zb2xlKCkgb3ZlcnJpZGUgeyB9CisgICAgdm9pZCBtdXRlQ29u
c29sZSgpIHsgfQorICAgIHZvaWQgdW5tdXRlQ29uc29sZSgpIHsgfQogCiAgICAgUmVmUHRyPElu
c3BlY3Rvcjo6UnVudGltZUJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOwog
ICAgIFdvcmtlckdsb2JhbFNjb3BlJiBtX3dvcmtlckdsb2JhbFNjb3BlOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNVXRpbGl0aWVzLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NETVV0aWxpdGllcy5jcHAK
aW5kZXggNWU4ODVhZDZlNTg2OTA5YzBlZDIxNWJlZTViZThlOGVmN2MyN2FmOC4uNWJlYmNiNDlh
YThlYjlhMmJiMDcxMWVhZTA4MGYzNzdlMjJiOTgzNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNVXRpbGl0aWVzLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1VdGlsaXRpZXMuY3BwCkBAIC00Nywx
MiArNDcsMTIgQEAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyc2VKU09OT2JqZWN0KGNvbnN0IFNo
YXJlZEJ1ZmZlciYgYnVmZmVyKQogCiAgICAgLy8gUGFyc2UgdGhlIGJ1ZmZlciBjb250ZW50cyBh
cyBKU09OLCByZXR1cm5pbmcgdGhlIHJvb3Qgb2JqZWN0IChpZiBhbnkpLgogICAgIFN0cmluZyBq
c29uIHsgYnVmZmVyLmRhdGEoKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHNpemUpIH07Ci0gICAg
UmVmUHRyPEpTT046OlZhbHVlPiB2YWx1ZTsKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBvYmpl
Y3Q7Ci0gICAgaWYgKCFKU09OOjpWYWx1ZTo6cGFyc2VKU09OKGpzb24sIHZhbHVlKSB8fCAhdmFs
dWUtPmFzT2JqZWN0KG9iamVjdCkpCisKKyAgICBhdXRvIHZhbHVlID0gSlNPTjo6VmFsdWU6OnBh
cnNlSlNPTihqc29uKTsKKyAgICBpZiAoIXZhbHVlKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
IAotICAgIHJldHVybiBvYmplY3Q7CisgICAgcmV0dXJuIHZhbHVlLT5hc09iamVjdCgpOwogfQog
CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEv
Y2xlYXJrZXkvQ0RNQ2xlYXJLZXkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlw
dGVkbWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJLZXkuY3BwCmluZGV4IGU2Y2MyMmQ5MGM3YWMzOWI1
NmZkODJhMTZiMDc2NWVjMWUxY2ZhODcuLjVhMTgyZmRmNDUyNjQyYWE4ZWY0NjBiNzc0YWM5ZTdi
NDBjMmVjNTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1l
ZGlhL2NsZWFya2V5L0NETUNsZWFyS2V5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9lbmNyeXB0ZWRtZWRpYS9jbGVhcmtleS9DRE1DbGVhcktleS5jcHAKQEAgLTU1LDIzICs1NSwy
NyBAQCBzdGF0aWMgT3B0aW9uYWw8VmVjdG9yPFJlZlB0cjxLZXlIYW5kbGU+Pj4gcGFyc2VMaWNl
bnNlRm9ybWF0KGNvbnN0IEpTT046Ok9iamVjdAogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OwogCiAgICAgLy8gUmV0cmlldmUgdGhlIGtleXMgYXJyYXkuCi0gICAgUmVmUHRyPEpTT046OkFy
cmF5PiBrZXlzQXJyYXk7Ci0gICAgaWYgKCFpdC0+dmFsdWUtPmFzQXJyYXkoa2V5c0FycmF5KSkK
KyAgICBhdXRvIGtleXNBcnJheSA9IGl0LT52YWx1ZS0+YXNBcnJheSgpOworICAgIGlmICgha2V5
c0FycmF5KQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgVmVjdG9yPFJlZlB0
cjxLZXlIYW5kbGU+PiBkZWNvZGVkS2V5czsKICAgICBib29sIHZhbGlkRm9ybWF0ID0gc3RkOjph
bGxfb2Yoa2V5c0FycmF5LT5iZWdpbigpLCBrZXlzQXJyYXktPmVuZCgpLAogICAgICAgICBbJmRl
Y29kZWRLZXlzXSAoY29uc3QgYXV0byYgdmFsdWUpIHsKLSAgICAgICAgICAgIFJlZlB0cjxKU09O
OjpPYmplY3Q+IGtleU9iamVjdDsKLSAgICAgICAgICAgIGlmICghdmFsdWUtPmFzT2JqZWN0KGtl
eU9iamVjdCkpCisgICAgICAgICAgICBhdXRvIGtleU9iamVjdCA9IHZhbHVlLT5hc09iamVjdCgp
OworICAgICAgICAgICAgaWYgKCFrZXlPYmplY3QpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgICAgICAgICBTdHJpbmcga2V5VHlwZTsKLSAgICAgICAgICAgIGlmICgha2V5
T2JqZWN0LT5nZXRTdHJpbmcoImt0eSIsIGtleVR5cGUpIHx8ICFlcXVhbExldHRlcnNJZ25vcmlu
Z0FTQ0lJQ2FzZShrZXlUeXBlLCAib2N0IikpCisgICAgICAgICAgICBhdXRvIGtleVR5cGUgPSBr
ZXlPYmplY3QtPmdldFN0cmluZygia3R5Iik7CisgICAgICAgICAgICBpZiAoIWtleVR5cGUgfHwg
IWVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGtleVR5cGUsICJvY3QiKSkKICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgICAgIFN0cmluZyBrZXlJRCwga2V5VmFs
dWU7Ci0gICAgICAgICAgICBpZiAoIWtleU9iamVjdC0+Z2V0U3RyaW5nKCJraWQiLCBrZXlJRCkg
fHwgIWtleU9iamVjdC0+Z2V0U3RyaW5nKCJrIiwga2V5VmFsdWUpKQorICAgICAgICAgICAgYXV0
byBrZXlJRCA9IGtleU9iamVjdC0+Z2V0U3RyaW5nKCJraWQiKTsKKyAgICAgICAgICAgIGlmICgh
a2V5SUQpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICBhdXRv
IGtleVZhbHVlID0ga2V5T2JqZWN0LT5nZXRTdHJpbmcoImsiKTsKKyAgICAgICAgICAgIGlmICgh
a2V5VmFsdWUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgICAgICBL
ZXlJRFR5cGUga2V5SUREYXRhOwpAQCAtOTYsOCArMTAwLDggQEAgc3RhdGljIGJvb2wgcGFyc2VM
aWNlbnNlUmVsZWFzZUFja25vd2xlZGdlbWVudEZvcm1hdChjb25zdCBKU09OOjpPYmplY3QmIHJv
b3QpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIFJldHJpZXZlIHRoZSBraWRzIGFy
cmF5LgotICAgIFJlZlB0cjxKU09OOjpBcnJheT4ga2lkc0FycmF5OwotICAgIGlmICghaXQtPnZh
bHVlLT5hc0FycmF5KGtpZHNBcnJheSkpCisgICAgYXV0byBraWRzQXJyYXkgPSBpdC0+dmFsdWUt
PmFzQXJyYXkoKTsKKyAgICBpZiAoIWtpZHNBcnJheSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CiAgICAgLy8gRklYTUU6IFJldHVybiB0aGUga2V5IElEcyBhbmQgdmFsaWRhdGUgdGhlbS4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9D
RE1GYWlyUGxheVN0cmVhbWluZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9hdmZvdW5kYXRpb24vQ0RNRmFpclBsYXlTdHJlYW1pbmcuY3BwCmluZGV4IDhhYzQ4ZWM1ZGM2
OWIzMTQ5NTdiYTQzM2Y5NzEwMWVhMjc3Njk2NDQuLjRmNDJjNDkzY2MzNTcwZGRjNmFmMDhkZTM5
MDVkMGNjODQ5ZDlhNzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2F2Zm91bmRhdGlvbi9DRE1GYWlyUGxheVN0cmVhbWluZy5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0NETUZhaXJQbGF5U3RyZWFtaW5n
LmNwcApAQCAtOTIsMjQgKzkyLDI0IEBAIHN0YXRpYyBWZWN0b3I8UmVmPFNoYXJlZEJ1ZmZlcj4+
IGV4dHJhY3RTaW5mRGF0YShjb25zdCBTaGFyZWRCdWZmZXImIGJ1ZmZlcikKICAgICAgICAgcmV0
dXJuIHsgfTsKICAgICBTdHJpbmcganNvbiB7IGJ1ZmZlci5kYXRhKCksIHN0YXRpY19jYXN0PHVu
c2lnbmVkPihidWZmZXIuc2l6ZSgpKSB9OwogCi0gICAgUmVmUHRyPEpTT046OlZhbHVlPiB2YWx1
ZTsKLSAgICBpZiAoIUpTT046OlZhbHVlOjpwYXJzZUpTT04oanNvbiwgdmFsdWUpKQorICAgIGF1
dG8gdmFsdWUgPSBKU09OOjpWYWx1ZTo6cGFyc2VKU09OKGpzb24pOworICAgIGlmICghdmFsdWUp
CiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBvYmplY3Q7
Ci0gICAgaWYgKCF2YWx1ZS0+YXNPYmplY3Qob2JqZWN0KSkKKyAgICBhdXRvIG9iamVjdCA9IHZh
bHVlLT5hc09iamVjdCgpOworICAgIGlmICghb2JqZWN0KQogICAgICAgICByZXR1cm4geyB9Owog
Ci0gICAgUmVmUHRyPEpTT046OkFycmF5PiBzaW5mQXJyYXk7Ci0gICAgaWYgKCFvYmplY3QtPmdl
dEFycmF5KENETVByaXZhdGVGYWlyUGxheVN0cmVhbWluZzo6c2luZk5hbWUoKSwgc2luZkFycmF5
KSkKKyAgICBhdXRvIHNpbmZBcnJheSA9IG9iamVjdC0+Z2V0QXJyYXkoQ0RNUHJpdmF0ZUZhaXJQ
bGF5U3RyZWFtaW5nOjpzaW5mTmFtZSgpKTsKKyAgICBpZiAoIXNpbmZBcnJheSkKICAgICAgICAg
cmV0dXJuIHsgfTsKIAogICAgIFZlY3RvcjxSZWY8U2hhcmVkQnVmZmVyPj4gc2luZnM7CiAgICAg
c2luZnMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShzaW5mQXJyYXktPmxlbmd0aCgpKTsKIAogICAg
IGZvciAoYXV0byYgdmFsdWUgOiAqc2luZkFycmF5KSB7Ci0gICAgICAgIFN0cmluZyBrZXlJRDsK
LSAgICAgICAgaWYgKCF2YWx1ZS0+YXNTdHJpbmcoa2V5SUQpKQorICAgICAgICBhdXRvIGtleUlE
ID0gdmFsdWUtPmFzU3RyaW5nKCk7CisgICAgICAgIGlmICgha2V5SUQpCiAgICAgICAgICAgICBj
b250aW51ZTsKIAogICAgICAgICBWZWN0b3I8Y2hhcj4gc2luZkRhdGE7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1JbnN0
YW5jZUZhaXJQbGF5U3RyZWFtaW5nQVZGT2JqQy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NETUluc3RhbmNlRmFpclBsYXlTdHJlYW1pbmdB
VkZPYmpDLm1tCmluZGV4IGMwNTE5YThjMjIxOTMwZjVjNjFhMGE4MGU5ZWMzYTFlOTljOGYxZDQu
LjFjNDlmODg3NTNhOTRjOTA3YmRmNmRiMDE5ZjIxOTViODQ3YjQ4M2QgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NETUluc3Rh
bmNlRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NETUluc3RhbmNlRmFpclBsYXlTdHJlYW1p
bmdBVkZPYmpDLm1tCkBAIC0zMTIsMTEgKzMxMiw4IEBAIHN0YXRpYyBSZWZQdHI8SlNPTjo6VmFs
dWU+IHBhcnNlSlNPTlZhbHVlKGNvbnN0IFNoYXJlZEJ1ZmZlciYgYnVmZmVyKQogCiAgICAgLy8g
UGFyc2UgdGhlIGJ1ZmZlciBjb250ZW50cyBhcyBKU09OLCByZXR1cm5pbmcgdGhlIHJvb3Qgb2Jq
ZWN0IChpZiBhbnkpLgogICAgIFN0cmluZyBqc29uIHsgYnVmZmVyLmRhdGEoKSwgc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KHNpemUpIH07Ci0gICAgUmVmUHRyPEpTT046OlZhbHVlPiB2YWx1ZTsKLSAg
ICBpZiAoIUpTT046OlZhbHVlOjpwYXJzZUpTT04oanNvbiwgdmFsdWUpKQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiB2YWx1ZTsKKyAgICByZXR1cm4gSlNPTjo6VmFsdWU6
OnBhcnNlSlNPTihqc29uKTsKIH0KIAogYm9vbCBDRE1JbnN0YW5jZUZhaXJQbGF5U3RyZWFtaW5n
QVZGT2JqQzo6c3VwcG9ydHNQZXJzaXN0YWJsZVN0YXRlKCkKQEAgLTgwNCwxOSArODAxLDI0IEBA
IHZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9uRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDOjp1cGRhdGVM
aWNlbnNlKGNvbnN0IFN0cmluZyYsIExpCiAgICAgICAgIH0pOwogCiAgICAgICAgIGF1dG8gcm9v
dCA9IHBhcnNlSlNPTlZhbHVlKHJlc3BvbnNlRGF0YSk7Ci0gICAgICAgIFJlZlB0cjxKU09OOjpB
cnJheT4gYXJyYXk7Ci0gICAgICAgIGlmICghcm9vdCB8fCAhcm9vdC0+YXNBcnJheShhcnJheSkp
IHsKKyAgICAgICAgaWYgKCFyb290KSB7CiAgICAgICAgICAgICBjYWxsYmFjayhmYWxzZSwgV1RG
OjpudWxsb3B0LCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCwgRmFpbGVkKTsKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIGF1dG8gcGFyc2VSZXNwb25zZSA9IFsm
XShSZWZQdHI8SlNPTjo6VmFsdWU+JiB2YWx1ZSkgLT4gYm9vbCB7Ci0gICAgICAgICAgICBSZWZQ
dHI8SlNPTjo6T2JqZWN0PiBvYmplY3Q7Ci0gICAgICAgICAgICBpZiAoIXZhbHVlLT5hc09iamVj
dChvYmplY3QpKQorICAgICAgICBhdXRvIGFycmF5ID0gcm9vdC0+YXNBcnJheSgpOworICAgICAg
ICBpZiAoIWFycmF5KSB7CisgICAgICAgICAgICBjYWxsYmFjayhmYWxzZSwgV1RGOjpudWxsb3B0
LCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCwgRmFpbGVkKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorCisgICAgICAgIGF1dG8gcGFyc2VSZXNwb25zZSA9IFsmXShSZWY8SlNP
Tjo6VmFsdWU+JiYgdmFsdWUpIC0+IGJvb2wgeworICAgICAgICAgICAgYXV0byBvYmplY3QgPSB2
YWx1ZS0+YXNPYmplY3QoKTsKKyAgICAgICAgICAgIGlmICghb2JqZWN0KQogICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICAgICAgU3RyaW5nIGtleUlEU3RyaW5nOwotICAg
ICAgICAgICAgaWYgKCFvYmplY3QtPmdldFN0cmluZygia2V5SUQiLCBrZXlJRFN0cmluZykpCisg
ICAgICAgICAgICBhdXRvIGtleUlEU3RyaW5nID0gb2JqZWN0LT5nZXRTdHJpbmcoImtleUlEIik7
CisgICAgICAgICAgICBpZiAoIWtleUlEU3RyaW5nKQogICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKIAogICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGtleUlEVmVjdG9yOwpAQCAtODQz
LDE0ICs4NDUsMTQgQEAgdm9pZCBDRE1JbnN0YW5jZVNlc3Npb25GYWlyUGxheVN0cmVhbWluZ0FW
Rk9iakM6OnVwZGF0ZUxpY2Vuc2UoY29uc3QgU3RyaW5nJiwgTGkKICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKICAgICAgICAgICAgIGlmIChoYXNFcnJvcikgewotICAgICAgICAgICAg
ICAgIE5TSW50ZWdlciBlcnJvckNvZGU7Ci0gICAgICAgICAgICAgICAgaWYgKCFlcnJvckZpbmRS
ZXN1bHRzLT52YWx1ZS0+YXNJbnRlZ2VyKGVycm9yQ29kZSkpCisgICAgICAgICAgICAgICAgYXV0
byBlcnJvckNvZGUgPSBlcnJvckZpbmRSZXN1bHRzLT52YWx1ZS0+YXNJbnRlZ2VyKCk7CisgICAg
ICAgICAgICAgICAgaWYgKCFlcnJvckNvZGUpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgICAgICAgICBhdXRvIGVycm9yID0gYWRvcHROUyhbW05TRXJyb3IgYWxs
b2NdIGluaXRXaXRoRG9tYWluOkAib3JnLndlYmtpdC5lbWUiIGNvZGU6ZXJyb3JDb2RlIHVzZXJJ
bmZvOm5pbF0pOworICAgICAgICAgICAgICAgIGF1dG8gZXJyb3IgPSBhZG9wdE5TKFtbTlNFcnJv
ciBhbGxvY10gaW5pdFdpdGhEb21haW46QCJvcmcud2Via2l0LmVtZSIgY29kZToqZXJyb3JDb2Rl
IHVzZXJJbmZvOm5pbF0pOwogICAgICAgICAgICAgICAgIFtyZXF1ZXN0IHByb2Nlc3NDb250ZW50
S2V5UmVzcG9uc2VFcnJvcjplcnJvci5nZXQoKV07CiAgICAgICAgICAgICB9IGVsc2UgaWYgKGhh
c1BheWxvYWQpIHsKLSAgICAgICAgICAgICAgICBTdHJpbmcgcGF5bG9hZFN0cmluZzsKLSAgICAg
ICAgICAgICAgICBpZiAoIXBheWxvYWRGaW5kUmVzdWx0cy0+dmFsdWUtPmFzU3RyaW5nKHBheWxv
YWRTdHJpbmcpKQorICAgICAgICAgICAgICAgIGF1dG8gcGF5bG9hZFN0cmluZyA9IHBheWxvYWRG
aW5kUmVzdWx0cy0+dmFsdWUtPmFzU3RyaW5nKCk7CisgICAgICAgICAgICAgICAgaWYgKCFwYXls
b2FkU3RyaW5nKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAg
ICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHBheWxvYWRWZWN0b3I7CiAgICAgICAgICAgICAgICAgaWYg
KCFiYXNlNjREZWNvZGUocGF5bG9hZFN0cmluZywgcGF5bG9hZFZlY3RvcikpCkBAIC04NjEsNyAr
ODYzLDcgQEAgdm9pZCBDRE1JbnN0YW5jZVNlc3Npb25GYWlyUGxheVN0cmVhbWluZ0FWRk9iakM6
OnVwZGF0ZUxpY2Vuc2UoY29uc3QgU3RyaW5nJiwgTGkKICAgICAgICAgICAgIHJldHVybiB0cnVl
OwogICAgICAgICB9OwogICAgICAgICBmb3IgKGF1dG8gdmFsdWUgOiAqYXJyYXkpIHsKLSAgICAg
ICAgICAgIGlmICghcGFyc2VSZXNwb25zZSh2YWx1ZSkpIHsKKyAgICAgICAgICAgIGlmICghcGFy
c2VSZXNwb25zZShXVEZNb3ZlKHZhbHVlKSkpIHsKICAgICAgICAgICAgICAgICBERUJVR19MT0df
SUZfUE9TU0lCTEUoTE9HSURFTlRJRklFUiwgIidjZW5jJyBpbml0RGF0YSwgRmFpbGVkLCBjb3Vs
ZCBub3QgcGFyc2UgcmVzcG9uc2UiKTsKICAgICAgICAgICAgICAgICBjYWxsYmFjayhmYWxzZSwg
V1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCwgRmFpbGVkKTsKICAgICAg
ICAgICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViRHJpdmVyL0NvbW1hbmRS
ZXN1bHQuY3BwIGIvU291cmNlL1dlYkRyaXZlci9Db21tYW5kUmVzdWx0LmNwcAppbmRleCBhNzIw
NzA5OTA4OTNkYjE1NmQ3ZmQ2ZmUzMDdhNTNmMjBjYjIzNTBhLi4wODMxYWY3MTIxYTFmOTBiMDdj
NmM4Y2FjNDgxNzZkNTkwNWEyNjQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViRHJpdmVyL0NvbW1h
bmRSZXN1bHQuY3BwCisrKyBiL1NvdXJjZS9XZWJEcml2ZXIvQ29tbWFuZFJlc3VsdC5jcHAKQEAg
LTQ5LDE4ICs0OSwxOSBAQCBDb21tYW5kUmVzdWx0OjpDb21tYW5kUmVzdWx0KFJlZlB0cjxKU09O
OjpWYWx1ZT4mJiByZXN1bHQsIE9wdGlvbmFsPEVycm9yQ29kZT4gZQogICAgIGlmICghcmVzdWx0
KQogICAgICAgICByZXR1cm47CiAKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBlcnJvck9iamVj
dDsKLSAgICBpZiAoIXJlc3VsdC0+YXNPYmplY3QoZXJyb3JPYmplY3QpKQorICAgIGF1dG8gZXJy
b3JPYmplY3QgPSByZXN1bHQtPmFzT2JqZWN0KCk7CisgICAgaWYgKCFlcnJvck9iamVjdCkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgaW50IGVycm9yOwotICAgIGlmICghZXJyb3JPYmplY3QtPmdl
dEludGVnZXIoImNvZGUiLCBlcnJvcikpCi0gICAgICAgIHJldHVybjsKLSAgICBTdHJpbmcgZXJy
b3JNZXNzYWdlOwotICAgIGlmICghZXJyb3JPYmplY3QtPmdldFN0cmluZygibWVzc2FnZSIsIGVy
cm9yTWVzc2FnZSkpCisgICAgYXV0byBlcnJvciA9IGVycm9yT2JqZWN0LT5nZXRJbnRlZ2VyKCJj
b2RlIik7CisgICAgaWYgKCFlcnJvcikKICAgICAgICAgcmV0dXJuOwogCi0gICAgc3dpdGNoIChl
cnJvcikgeworICAgIGF1dG8gZXJyb3JNZXNzYWdlID0gZXJyb3JPYmplY3QtPmdldFN0cmluZygi
bWVzc2FnZSIpOworICAgIGlmICghZXJyb3JNZXNzYWdlKQorICAgICAgICByZXR1cm47CisKKyAg
ICBzd2l0Y2ggKCplcnJvcikgewogICAgIGNhc2UgUHJvdG9jb2xFcnJvckNvZGU6OlBhcnNlRXJy
b3I6CiAgICAgY2FzZSBQcm90b2NvbEVycm9yQ29kZTo6SW52YWxpZFJlcXVlc3Q6CiAgICAgY2Fz
ZSBQcm90b2NvbEVycm9yQ29kZTo6TWV0aG9kTm90Rm91bmQ6CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViRHJpdmVyL1Nlc3Npb24uY3BwIGIvU291cmNlL1dlYkRyaXZlci9TZXNzaW9uLmNwcAppbmRl
eCBhNTVmYTQ5MzgwYzQ5NTEzMGZlMzFhOTZjODRlMDg5Yjc2ZDFjYWM4Li42ODU0NWJkNjc4MmI0
N2RjYTdhNDA5MjhhZTM4NDNlMGVjNDNiOTFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViRHJpdmVy
L1Nlc3Npb24uY3BwCisrKyBiL1NvdXJjZS9XZWJEcml2ZXIvU2Vzc2lvbi5jcHAKQEAgLTgzLDEx
ICs4MywxMCBAQCBib29sIFNlc3Npb246OmlzQ29ubmVjdGVkKCkgY29uc3QKIAogc3RhdGljIE9w
dGlvbmFsPFN0cmluZz4gZmlyc3RXaW5kb3dIYW5kbGVJblJlc3VsdChKU09OOjpWYWx1ZSYgcmVz
dWx0KQogewotICAgIFJlZlB0cjxKU09OOjpBcnJheT4gaGFuZGxlczsKLSAgICBpZiAocmVzdWx0
LmFzQXJyYXkoaGFuZGxlcykgJiYgaGFuZGxlcy0+bGVuZ3RoKCkpIHsKLSAgICAgICAgYXV0byBo
YW5kbGVWYWx1ZSA9IGhhbmRsZXMtPmdldCgwKTsKLSAgICAgICAgU3RyaW5nIGhhbmRsZTsKLSAg
ICAgICAgaWYgKGhhbmRsZVZhbHVlLT5hc1N0cmluZyhoYW5kbGUpKQorICAgIGF1dG8gaGFuZGxl
cyA9IHJlc3VsdC5hc0FycmF5KCk7CisgICAgaWYgKGhhbmRsZXMgJiYgaGFuZGxlcy0+bGVuZ3Ro
KCkpIHsKKyAgICAgICAgYXV0byBoYW5kbGUgPSBoYW5kbGVzLT5nZXQoMCktPmFzU3RyaW5nKCk7
CisgICAgICAgIGlmICghIWhhbmRsZSkKICAgICAgICAgICAgIHJldHVybiBoYW5kbGU7CiAgICAg
fQogICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CkBAIC0xMjYsNyArMTI1LDcgQEAgdm9pZCBTZXNz
aW9uOjpjbG9zZShGdW5jdGlvbjx2b2lkIChDb21tYW5kUmVzdWx0JiYpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQogCiB2b2lkIFNlc3Npb246OmdldFRpbWVvdXRzKEZ1bmN0aW9uPHZvaWQgKENvbW1h
bmRSZXN1bHQmJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgUmVmUHRyPEpTT046Ok9i
amVjdD4gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgYXV0byBwYXJh
bWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICBpZiAobV9zY3JpcHRUaW1lb3V0
ID09IHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6aW5maW5pdHkoKSkKICAgICAgICAgcGFy
YW1ldGVycy0+c2V0VmFsdWUoInNjcmlwdCJfcywgSlNPTjo6VmFsdWU6Om51bGwoKSk7CiAgICAg
ZWxzZQpAQCAtMTg3LDExICsxODYsMTMgQEAgdm9pZCBTZXNzaW9uOjpjcmVhdGVUb3BMZXZlbEJy
b3dzaW5nQ29udGV4dChGdW5jdGlvbjx2b2lkIChDb21tYW5kUmVzdWx0JiYpPiYmIGMKICAgICAg
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoV1RGTW92ZShyZXNw
b25zZS5yZXNwb25zZU9iamVjdCkpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQot
ICAgICAgICBTdHJpbmcgaGFuZGxlOwotICAgICAgICBpZiAoIXJlc3BvbnNlLnJlc3BvbnNlT2Jq
ZWN0LT5nZXRTdHJpbmcoImhhbmRsZSJfcywgaGFuZGxlKSkgeworCisgICAgICAgIGF1dG8gaGFu
ZGxlID0gcmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdldFN0cmluZygiaGFuZGxlIl9zKTsKKyAg
ICAgICAgaWYgKCFoYW5kbGUpIHsKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1h
bmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQorCiAgICAgICAgIHN3aXRjaFRvVG9wTGV2
ZWxCcm93c2luZ0NvbnRleHQoaGFuZGxlKTsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29t
bWFuZFJlc3VsdDo6c3VjY2VzcygpKTsKICAgICB9KTsKQEAgLTE5OSwxNSArMjAwLDE2IEBAIHZv
aWQgU2Vzc2lvbjo6Y3JlYXRlVG9wTGV2ZWxCcm93c2luZ0NvbnRleHQoRnVuY3Rpb248dm9pZCAo
Q29tbWFuZFJlc3VsdCYmKT4mJiBjCiAKIHZvaWQgU2Vzc2lvbjo6aGFuZGxlVXNlclByb21wdHMo
RnVuY3Rpb248dm9pZCAoQ29tbWFuZFJlc3VsdCYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsK
LSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVh
dGUoKTsKKyAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAg
IHBhcmFtZXRlcnMtPnNldFN0cmluZygiYnJvd3NpbmdDb250ZXh0SGFuZGxlIl9zLCBtX3RvcGxl
dmVsQnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwogICAgIG1faG9zdC0+c2VuZENvbW1hbmRUb0Jh
Y2tlbmQoImlzU2hvd2luZ0phdmFTY3JpcHREaWFsb2ciX3MsIFdURk1vdmUocGFyYW1ldGVycyks
IFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVy
ID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKFNlc3Npb25Ib3N0OjpDb21tYW5kUmVzcG9u
c2UmJiByZXNwb25zZSkgbXV0YWJsZSB7CiAgICAgICAgIGlmIChyZXNwb25zZS5pc0Vycm9yIHx8
ICFyZXNwb25zZS5yZXNwb25zZU9iamVjdCkgewogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChXVEZNb3ZlKHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0KSkp
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIGJvb2wgaXNTaG93aW5n
SmF2YVNjcmlwdERpYWxvZzsKLSAgICAgICAgaWYgKCFyZXNwb25zZS5yZXNwb25zZU9iamVjdC0+
Z2V0Qm9vbGVhbigicmVzdWx0IiwgaXNTaG93aW5nSmF2YVNjcmlwdERpYWxvZykpIHsKKworICAg
ICAgICBhdXRvIGlzU2hvd2luZ0phdmFTY3JpcHREaWFsb2cgPSByZXNwb25zZS5yZXNwb25zZU9i
amVjdC0+Z2V0Qm9vbGVhbigicmVzdWx0Iik7CisgICAgICAgIGlmICghaXNTaG93aW5nSmF2YVNj
cmlwdERpYWxvZykgewogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3Vs
dDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikpOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC0yNzMsMTMgKzI3NSwxMyBAQCB2b2lkIFNlc3Np
b246OnJlcG9ydFVuZXhwZWN0ZWRBbGVydE9wZW4oRnVuY3Rpb248dm9pZCAoQ29tbWFuZFJlc3Vs
dCYmKT4mJiBjb21wbAogICAgIGdldEFsZXJ0VGV4dChbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oQ29tbWFuZFJlc3VsdCYmIHJlc3VsdCkgewogICAgICAg
ICBPcHRpb25hbDxTdHJpbmc+IGFsZXJ0VGV4dDsKICAgICAgICAgaWYgKCFyZXN1bHQuaXNFcnJv
cigpKSB7Ci0gICAgICAgICAgICBTdHJpbmcgdmFsdWVTdHJpbmc7Ci0gICAgICAgICAgICBpZiAo
cmVzdWx0LnJlc3VsdCgpLT5hc1N0cmluZyh2YWx1ZVN0cmluZykpCisgICAgICAgICAgICBhdXRv
IHZhbHVlU3RyaW5nID0gcmVzdWx0LnJlc3VsdCgpLT5hc1N0cmluZygpOworICAgICAgICAgICAg
aWYgKCEhdmFsdWVTdHJpbmcpCiAgICAgICAgICAgICAgICAgYWxlcnRUZXh0ID0gdmFsdWVTdHJp
bmc7CiAgICAgICAgIH0KICAgICAgICAgYXV0byBlcnJvclJlc3VsdCA9IENvbW1hbmRSZXN1bHQ6
OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmV4cGVjdGVkQWxlcnRPcGVuKTsKICAg
ICAgICAgaWYgKGFsZXJ0VGV4dCkgewotICAgICAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4g
YWRkaXRvbmFsRGF0YSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgICAgICBhdXRv
IGFkZGl0b25hbERhdGEgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICAgICAgYWRk
aXRvbmFsRGF0YS0+c2V0U3RyaW5nKCJ0ZXh0Il9zLCBhbGVydFRleHQudmFsdWUoKSk7CiAgICAg
ICAgICAgICBlcnJvclJlc3VsdC5zZXRBZGRpdGlvbmFsRXJyb3JEYXRhKFdURk1vdmUoYWRkaXRv
bmFsRGF0YSkpOwogICAgICAgICB9CkBAIC0zMDAsNyArMzAyLDcgQEAgdm9pZCBTZXNzaW9uOjpn
byhjb25zdCBTdHJpbmcmIHVybCwgRnVuY3Rpb248dm9pZCAoQ29tbWFuZFJlc3VsdCYmKT4mJiBj
b21wbGV0aW8KICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIFJlZlB0
cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAg
ICAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICBw
YXJhbWV0ZXJzLT5zZXRTdHJpbmcoImhhbmRsZSJfcywgbV90b3BsZXZlbEJyb3dzaW5nQ29udGV4
dC52YWx1ZSgpKTsKICAgICAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJ1cmwiX3MsIHVybCk7
CiAgICAgICAgIHBhcmFtZXRlcnMtPnNldERvdWJsZSgicGFnZUxvYWRUaW1lb3V0Il9zLCBtX3Bh
Z2VMb2FkVGltZW91dCk7CkBAIC0zMzAsMjMgKzMzMiwyNiBAQCB2b2lkIFNlc3Npb246OmdldEN1
cnJlbnRVUkwoRnVuY3Rpb248dm9pZCAoQ29tbWFuZFJlc3VsdCYmKT4mJiBjb21wbGV0aW9uSGFu
ZGxlcgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgUmVmUHRyPEpT
T046Ok9iamVjdD4gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAg
IGF1dG8gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgIHBhcmFt
ZXRlcnMtPnNldFN0cmluZygiaGFuZGxlIl9zLCBtX3RvcGxldmVsQnJvd3NpbmdDb250ZXh0LnZh
bHVlKCkpOwogICAgICAgICBtX2hvc3QtPnNlbmRDb21tYW5kVG9CYWNrZW5kKCJnZXRCcm93c2lu
Z0NvbnRleHQiX3MsIFdURk1vdmUocGFyYW1ldGVycyksIFtwcm90ZWN0ZWRUaGlzLCBjb21wbGV0
aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXShTZXNzaW9uSG9zdDo6Q29t
bWFuZFJlc3BvbnNlJiYgcmVzcG9uc2UpIHsKICAgICAgICAgICAgIGlmIChyZXNwb25zZS5pc0Vy
cm9yIHx8ICFyZXNwb25zZS5yZXNwb25zZU9iamVjdCkgewogICAgICAgICAgICAgICAgIGNvbXBs
ZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoV1RGTW92ZShyZXNwb25zZS5yZXNwb25z
ZU9iamVjdCkpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBicm93c2luZ0NvbnRleHQ7Ci0gICAgICAgICAg
ICBpZiAoIXJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRPYmplY3QoImNvbnRleHQiLCBicm93
c2luZ0NvbnRleHQpKSB7CisKKyAgICAgICAgICAgIGF1dG8gYnJvd3NpbmdDb250ZXh0ID0gcmVz
cG9uc2UucmVzcG9uc2VPYmplY3QtPmdldE9iamVjdCgiY29udGV4dCIpOworICAgICAgICAgICAg
aWYgKCFicm93c2luZ0NvbnRleHQpIHsKICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVy
cm9yKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQotICAgICAgICAg
ICAgU3RyaW5nIHVybDsKLSAgICAgICAgICAgIGlmICghYnJvd3NpbmdDb250ZXh0LT5nZXRTdHJp
bmcoInVybCIsIHVybCkpIHsKKworICAgICAgICAgICAgYXV0byB1cmwgPSBicm93c2luZ0NvbnRl
eHQtPmdldFN0cmluZygidXJsIik7CisgICAgICAgICAgICBpZiAoIXVybCkgewogICAgICAgICAg
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3Vs
dDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgICAgICB9CisKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1
bHQ6OnN1Y2Nlc3MoSlNPTjo6VmFsdWU6OmNyZWF0ZSh1cmwpKSk7CiAgICAgICAgIH0pOwogICAg
IH0pOwpAQCAtMzY0LDcgKzM2OSw3IEBAIHZvaWQgU2Vzc2lvbjo6YmFjayhGdW5jdGlvbjx2b2lk
IChDb21tYW5kUmVzdWx0JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogICAgICAgICAgICAgY29t
cGxldGlvbkhhbmRsZXIoV1RGTW92ZShyZXN1bHQpKTsKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQotICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzID0gSlNPTjo6
T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgYXV0byBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0
OjpjcmVhdGUoKTsKICAgICAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJoYW5kbGUiX3MsIG1f
dG9wbGV2ZWxCcm93c2luZ0NvbnRleHQudmFsdWUoKSk7CiAgICAgICAgIHBhcmFtZXRlcnMtPnNl
dERvdWJsZSgicGFnZUxvYWRUaW1lb3V0Il9zLCBtX3BhZ2VMb2FkVGltZW91dCk7CiAgICAgICAg
IGlmIChhdXRvIHBhZ2VMb2FkU3RyYXRlZ3kgPSBwYWdlTG9hZFN0cmF0ZWd5U3RyaW5nKCkpCkBA
IC0zOTIsNyArMzk3LDcgQEAgdm9pZCBTZXNzaW9uOjpmb3J3YXJkKEZ1bmN0aW9uPHZvaWQgKENv
bW1hbmRSZXN1bHQmJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiAgICAgICAgICAgICBjb21wbGV0
aW9uSGFuZGxlcihXVEZNb3ZlKHJlc3VsdCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9Ci0gICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnMgPSBKU09OOjpPYmpl
Y3Q6OmNyZWF0ZSgpOworICAgICAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNy
ZWF0ZSgpOwogICAgICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoImhhbmRsZSJfcywgbV90b3Bs
ZXZlbEJyb3dzaW5nQ29udGV4dC52YWx1ZSgpKTsKICAgICAgICAgcGFyYW1ldGVycy0+c2V0RG91
YmxlKCJwYWdlTG9hZFRpbWVvdXQiX3MsIG1fcGFnZUxvYWRUaW1lb3V0KTsKICAgICAgICAgaWYg
KGF1dG8gcGFnZUxvYWRTdHJhdGVneSA9IHBhZ2VMb2FkU3RyYXRlZ3lTdHJpbmcoKSkKQEAgLTQy
MCw3ICs0MjUsNyBAQCB2b2lkIFNlc3Npb246OnJlZnJlc2goRnVuY3Rpb248dm9pZCAoQ29tbWFu
ZFJlc3VsdCYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKICAgICAgICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKFdURk1vdmUocmVzdWx0KSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
LSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6
Y3JlYXRlKCk7CisgICAgICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRl
KCk7CiAgICAgICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiaGFuZGxlIl9zLCBtX3RvcGxldmVs
QnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwogICAgICAgICBwYXJhbWV0ZXJzLT5zZXREb3VibGUo
InBhZ2VMb2FkVGltZW91dCJfcywgbV9wYWdlTG9hZFRpbWVvdXQpOwogICAgICAgICBpZiAoYXV0
byBwYWdlTG9hZFN0cmF0ZWd5ID0gcGFnZUxvYWRTdHJhdGVneVN0cmluZygpKQpAQCAtNDQ4LDcg
KzQ1Myw3IEBAIHZvaWQgU2Vzc2lvbjo6Z2V0VGl0bGUoRnVuY3Rpb248dm9pZCAoQ29tbWFuZFJl
c3VsdCYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5k
bGVyKFdURk1vdmUocmVzdWx0KSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAg
ICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3Jl
YXRlKCk7CisgICAgICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7
CiAgICAgICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiYnJvd3NpbmdDb250ZXh0SGFuZGxlIl9z
LCBtX3RvcGxldmVsQnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwogICAgICAgICBwYXJhbWV0ZXJz
LT5zZXRTdHJpbmcoImZ1bmN0aW9uIl9zLCAiZnVuY3Rpb24oKSB7IHJldHVybiBkb2N1bWVudC50
aXRsZTsgfSJfcyk7CiAgICAgICAgIHBhcmFtZXRlcnMtPnNldEFycmF5KCJhcmd1bWVudHMiX3Ms
IEpTT046OkFycmF5OjpjcmVhdGUoKSk7CkBAIC00NTcsMTYgKzQ2MiwxOSBAQCB2b2lkIFNlc3Np
b246OmdldFRpdGxlKEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSZXN1bHQmJik+JiYgY29tcGxldGlv
bkhhbmRsZXIpCiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3Vs
dDo6ZmFpbChXVEZNb3ZlKHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0KSkpOwogICAgICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFN0cmluZyB2YWx1ZVN0cmlu
ZzsKLSAgICAgICAgICAgIGlmICghcmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdldFN0cmluZygi
cmVzdWx0Il9zLCB2YWx1ZVN0cmluZykpIHsKKworICAgICAgICAgICAgYXV0byB2YWx1ZVN0cmlu
ZyA9IHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRTdHJpbmcoInJlc3VsdCJfcyk7CisgICAg
ICAgICAgICBpZiAoIXZhbHVlU3RyaW5nKSB7CiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhh
bmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OlVua25v
d25FcnJvcikpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gcmVzdWx0VmFsdWU7Ci0gICAgICAgICAgICBpZiAo
IUpTT046OlZhbHVlOjpwYXJzZUpTT04odmFsdWVTdHJpbmcsIHJlc3VsdFZhbHVlKSkgeworCisg
ICAgICAgICAgICBhdXRvIHJlc3VsdFZhbHVlID0gSlNPTjo6VmFsdWU6OnBhcnNlSlNPTih2YWx1
ZVN0cmluZyk7CisgICAgICAgICAgICBpZiAoIXJlc3VsdFZhbHVlKSB7CiAgICAgICAgICAgICAg
ICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpF
cnJvckNvZGU6OlVua25vd25FcnJvcikpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgICAgIH0KKwogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6
c3VjY2VzcyhXVEZNb3ZlKHJlc3VsdFZhbHVlKSkpOwogICAgICAgICB9KTsKICAgICB9KTsKQEAg
LTQ3OSwzMCArNDg3LDMzIEBAIHZvaWQgU2Vzc2lvbjo6Z2V0V2luZG93SGFuZGxlKEZ1bmN0aW9u
PHZvaWQgKENvbW1hbmRSZXN1bHQmJik+JiYgY29tcGxldGlvbkhhbmRsCiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzID0gSlNPTjo6
T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNy
ZWF0ZSgpOwogICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiaGFuZGxlIl9zLCBtX3RvcGxldmVs
QnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwogICAgIG1faG9zdC0+c2VuZENvbW1hbmRUb0JhY2tl
bmQoImdldEJyb3dzaW5nQ29udGV4dCJfcywgV1RGTW92ZShwYXJhbWV0ZXJzKSwgW3Byb3RlY3Rl
ZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKV0oU2Vzc2lvbkhvc3Q6OkNvbW1hbmRSZXNwb25zZSYmIHJlc3BvbnNlKSB7
CiAgICAgICAgIGlmIChyZXNwb25zZS5pc0Vycm9yIHx8ICFyZXNwb25zZS5yZXNwb25zZU9iamVj
dCkgewogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChX
VEZNb3ZlKHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0KSkpOwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9Ci0gICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IGJyb3dzaW5nQ29udGV4dDsK
LSAgICAgICAgaWYgKCFyZXNwb25zZS5yZXNwb25zZU9iamVjdC0+Z2V0T2JqZWN0KCJjb250ZXh0
Il9zLCBicm93c2luZ0NvbnRleHQpKSB7CisKKyAgICAgICAgYXV0byBicm93c2luZ0NvbnRleHQg
PSByZXNwb25zZS5yZXNwb25zZU9iamVjdC0+Z2V0T2JqZWN0KCJjb250ZXh0Il9zKTsKKyAgICAg
ICAgaWYgKCFicm93c2luZ0NvbnRleHQpIHsKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVy
KENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtub3duRXJy
b3IpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBTdHJpbmcgaGFu
ZGxlOwotICAgICAgICBpZiAoIWJyb3dzaW5nQ29udGV4dC0+Z2V0U3RyaW5nKCJoYW5kbGUiX3Ms
IGhhbmRsZSkpIHsKKworICAgICAgICBhdXRvIGhhbmRsZSA9IGJyb3dzaW5nQ29udGV4dC0+Z2V0
U3RyaW5nKCJoYW5kbGUiX3MpOworICAgICAgICBpZiAoIWhhbmRsZSkgewogICAgICAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJv
ckNvZGU6OlVua25vd25FcnJvcikpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CisK
ICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6c3VjY2VzcyhKU09OOjpW
YWx1ZTo6Y3JlYXRlKGhhbmRsZSkpKTsKICAgICB9KTsKIH0KIAogdm9pZCBTZXNzaW9uOjpjbG9z
ZVRvcExldmVsQnJvd3NpbmdDb250ZXh0KGNvbnN0IFN0cmluZyYgdG9wbGV2ZWxCcm93c2luZ0Nv
bnRleHQsIEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSZXN1bHQmJik+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCiB7Ci0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVycyA9IEpTT046Ok9iamVj
dDo6Y3JlYXRlKCk7CisgICAgYXV0byBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUo
KTsKICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoImhhbmRsZSJfcywgdG9wbGV2ZWxCcm93c2lu
Z0NvbnRleHQpOwogICAgIG1faG9zdC0+c2VuZENvbW1hbmRUb0JhY2tlbmQoImNsb3NlQnJvd3Np
bmdDb250ZXh0Il9zLCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9
IG1ha2VSZWYoKnRoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpXShTZXNzaW9uSG9zdDo6Q29tbWFuZFJlc3BvbnNlJiYgcmVzcG9uc2UpIG11dGFibGUg
ewogICAgICAgICBpZiAoIW1faG9zdC0+aXNDb25uZWN0ZWQoKSkgewpAQCAtNTQ1LDcgKzU1Niw3
IEBAIHZvaWQgU2Vzc2lvbjo6Y2xvc2VXaW5kb3coRnVuY3Rpb248dm9pZCAoQ29tbWFuZFJlc3Vs
dCYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIAogdm9pZCBTZXNzaW9uOjpzd2l0Y2hUb1dpbmRv
dyhjb25zdCBTdHJpbmcmIHdpbmRvd0hhbmRsZSwgRnVuY3Rpb248dm9pZCAoQ29tbWFuZFJlc3Vs
dCYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBw
YXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBhdXRvIHBhcmFtZXRlcnMg
PSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiYnJv
d3NpbmdDb250ZXh0SGFuZGxlIl9zLCB3aW5kb3dIYW5kbGUpOwogICAgIG1faG9zdC0+c2VuZENv
bW1hbmRUb0JhY2tlbmQoInN3aXRjaFRvQnJvd3NpbmdDb250ZXh0Il9zLCBXVEZNb3ZlKHBhcmFt
ZXRlcnMpLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCB3aW5kb3dIYW5k
bGUsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKFNlc3Np
b25Ib3N0OjpDb21tYW5kUmVzcG9uc2UmJiByZXNwb25zZSkgewogICAgICAgICBpZiAocmVzcG9u
c2UuaXNFcnJvcikgewpAQCAtNTY0LDIyICs1NzUsMjMgQEAgdm9pZCBTZXNzaW9uOjpnZXRXaW5k
b3dIYW5kbGVzKEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSZXN1bHQmJik+JiYgY29tcGxldGlvbkhh
bmQKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoV1RG
TW92ZShyZXNwb25zZS5yZXNwb25zZU9iamVjdCkpKTsKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQotICAgICAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IGJyb3dzaW5nQ29udGV4dEFycmF5
OwotICAgICAgICBpZiAoIXJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRBcnJheSgiY29udGV4
dHMiX3MsIGJyb3dzaW5nQ29udGV4dEFycmF5KSkgeworCisgICAgICAgIGF1dG8gYnJvd3NpbmdD
b250ZXh0QXJyYXkgPSByZXNwb25zZS5yZXNwb25zZU9iamVjdC0+Z2V0QXJyYXkoImNvbnRleHRz
Il9zKTsKKyAgICAgICAgaWYgKCFicm93c2luZ0NvbnRleHRBcnJheSkgewogICAgICAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJv
ckNvZGU6OlVua25vd25FcnJvcikpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0g
ICAgICAgIFJlZlB0cjxKU09OOjpBcnJheT4gd2luZG93SGFuZGxlcyA9IEpTT046OkFycmF5Ojpj
cmVhdGUoKTsKKworICAgICAgICBhdXRvIHdpbmRvd0hhbmRsZXMgPSBKU09OOjpBcnJheTo6Y3Jl
YXRlKCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBicm93c2luZ0NvbnRleHRB
cnJheS0+bGVuZ3RoKCk7ICsraSkgewotICAgICAgICAgICAgUmVmUHRyPEpTT046OlZhbHVlPiBi
cm93c2luZ0NvbnRleHRWYWx1ZSA9IGJyb3dzaW5nQ29udGV4dEFycmF5LT5nZXQoaSk7Ci0gICAg
ICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBicm93c2luZ0NvbnRleHQ7Ci0gICAgICAgICAg
ICBpZiAoIWJyb3dzaW5nQ29udGV4dFZhbHVlLT5hc09iamVjdChicm93c2luZ0NvbnRleHQpKSB7
CisgICAgICAgICAgICBhdXRvIGJyb3dzaW5nQ29udGV4dCA9IGJyb3dzaW5nQ29udGV4dEFycmF5
LT5nZXQoaSktPmFzT2JqZWN0KCk7CisgICAgICAgICAgICBpZiAoIWJyb3dzaW5nQ29udGV4dCkg
ewogICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwo
Q29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKICAgICAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIFN0cmluZyBoYW5kbGU7Ci0g
ICAgICAgICAgICBpZiAoIWJyb3dzaW5nQ29udGV4dC0+Z2V0U3RyaW5nKCJoYW5kbGUiX3MsIGhh
bmRsZSkpIHsKKyAgICAgICAgICAgIGF1dG8gaGFuZGxlID0gYnJvd3NpbmdDb250ZXh0LT5nZXRT
dHJpbmcoImhhbmRsZSJfcyk7CisgICAgICAgICAgICBpZiAoIWhhbmRsZSkgewogICAgICAgICAg
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3Vs
dDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgICAgICB9CkBAIC02MTMsMTcgKzYyNSwyMCBAQCB2b2lkIFNlc3Npb246Om5ld1dpbmRv
dyhPcHRpb25hbDxTdHJpbmc+IHR5cGVIaW50LCBGdW5jdGlvbjx2b2lkIChDb21tYW5kUmVzdWx0
JgogICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwo
V1RGTW92ZShyZXNwb25zZS5yZXNwb25zZU9iamVjdCkpKTsKICAgICAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBTdHJpbmcgaGFuZGxlOwotICAgICAgICAg
ICAgaWYgKCFyZXNwb25zZS5yZXNwb25zZU9iamVjdC0+Z2V0U3RyaW5nKCJoYW5kbGUiX3MsIGhh
bmRsZSkpIHsKKworICAgICAgICAgICAgYXV0byBoYW5kbGUgPSByZXNwb25zZS5yZXNwb25zZU9i
amVjdC0+Z2V0U3RyaW5nKCJoYW5kbGUiX3MpOworICAgICAgICAgICAgaWYgKCFoYW5kbGUpIHsK
ICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENv
bW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVycm9yKSk7CiAgICAgICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgU3RyaW5nIHByZXNlbnRhdGlvbjsK
LSAgICAgICAgICAgIGlmICghcmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdldFN0cmluZygicHJl
c2VudGF0aW9uIl9zLCBwcmVzZW50YXRpb24pKSB7CisKKyAgICAgICAgICAgIGF1dG8gcHJlc2Vu
dGF0aW9uID0gcmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdldFN0cmluZygicHJlc2VudGF0aW9u
Il9zKTsKKyAgICAgICAgICAgIGlmICghcHJlc2VudGF0aW9uKSB7CiAgICAgICAgICAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJv
ckNvZGU6OlVua25vd25FcnJvcikpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9i
amVjdDo6Y3JlYXRlKCk7CisKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gSlNPTjo6T2JqZWN0
OjpjcmVhdGUoKTsKICAgICAgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJoYW5kbGUiX3MsIGhh
bmRsZSk7CiAgICAgICAgICAgICByZXN1bHQtPnNldFN0cmluZygidHlwZSJfcywgcHJlc2VudGF0
aW9uID09ICJXaW5kb3ciX3MgPyAid2luZG93Il9zIDogInRhYiJfcyk7CiAgICAgICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpzdWNjZXNzKFdURk1vdmUocmVzdWx0KSkp
OwpAQCAtNjQ5LDE1ICs2NjQsMTQgQEAgdm9pZCBTZXNzaW9uOjpzd2l0Y2hUb0ZyYW1lKFJlZlB0
cjxKU09OOjpWYWx1ZT4mJiBmcmFtZUlELCBGdW5jdGlvbjx2b2lkIChDb21tYW4KICAgICAgICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUocmVzdWx0KSk7CiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KLSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVycyA9
IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTT046
Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiYnJvd3Np
bmdDb250ZXh0SGFuZGxlIl9zLCBtX3RvcGxldmVsQnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwog
ICAgICAgICBpZiAobV9jdXJyZW50QnJvd3NpbmdDb250ZXh0KQogICAgICAgICAgICAgcGFyYW1l
dGVycy0+c2V0U3RyaW5nKCJmcmFtZUhhbmRsZSJfcywgbV9jdXJyZW50QnJvd3NpbmdDb250ZXh0
LnZhbHVlKCkpOwogCi0gICAgICAgIGludCBmcmFtZUluZGV4OwotICAgICAgICBpZiAoZnJhbWVJ
RC0+YXNJbnRlZ2VyKGZyYW1lSW5kZXgpKSB7CisgICAgICAgIGlmIChhdXRvIGZyYW1lSW5kZXgg
PSBmcmFtZUlELT5hc0ludGVnZXIoKSkgewogICAgICAgICAgICAgQVNTRVJUKGZyYW1lSW5kZXgg
Pj0gMCAmJiBmcmFtZUluZGV4IDwgc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZCBzaG9ydD46
Om1heCgpKTsKLSAgICAgICAgICAgIHBhcmFtZXRlcnMtPnNldEludGVnZXIoIm9yZGluYWwiX3Ms
IGZyYW1lSW5kZXgpOworICAgICAgICAgICAgcGFyYW1ldGVycy0+c2V0SW50ZWdlcigib3JkaW5h
bCJfcywgKmZyYW1lSW5kZXgpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgU3RyaW5n
IGZyYW1lRWxlbWVudElEID0gZXh0cmFjdEVsZW1lbnRJRCgqZnJhbWVJRCk7CiAgICAgICAgICAg
ICBBU1NFUlQoIWZyYW1lRWxlbWVudElELmlzRW1wdHkoKSk7CkBAIC02NjksMTEgKzY4MywxMyBA
QCB2b2lkIFNlc3Npb246OnN3aXRjaFRvRnJhbWUoUmVmUHRyPEpTT046OlZhbHVlPiYmIGZyYW1l
SUQsIEZ1bmN0aW9uPHZvaWQgKENvbW1hbgogICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5k
bGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoV1RGTW92ZShyZXNwb25zZS5yZXNwb25zZU9iamVjdCkp
KTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBT
dHJpbmcgZnJhbWVIYW5kbGU7Ci0gICAgICAgICAgICBpZiAoIXJlc3BvbnNlLnJlc3BvbnNlT2Jq
ZWN0LT5nZXRTdHJpbmcoInJlc3VsdCJfcywgZnJhbWVIYW5kbGUpKSB7CisKKyAgICAgICAgICAg
IGF1dG8gZnJhbWVIYW5kbGUgPSByZXNwb25zZS5yZXNwb25zZU9iamVjdC0+Z2V0U3RyaW5nKCJy
ZXN1bHQiX3MpOworICAgICAgICAgICAgaWYgKCFmcmFtZUhhbmRsZSkgewogICAgICAgICAgICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6
RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgICAgICB9CisKICAgICAgICAgICAgIHN3aXRjaFRvQnJvd3NpbmdDb250ZXh0KGZyYW1lSGFu
ZGxlKTsKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OnN1Y2Nl
c3MoKSk7CiAgICAgICAgIH0pOwpAQCAtNjk3LDcgKzcxMyw3IEBAIHZvaWQgU2Vzc2lvbjo6c3dp
dGNoVG9QYXJlbnRGcmFtZShGdW5jdGlvbjx2b2lkIChDb21tYW5kUmVzdWx0JiYpPiYmIGNvbXBs
ZXRpb25ICiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKHJlc3VsdCkpOwog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIFJlZlB0cjxKU09OOjpPYmpl
Y3Q+IHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBhdXRvIHBh
cmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICBwYXJhbWV0ZXJzLT5z
ZXRTdHJpbmcoImJyb3dzaW5nQ29udGV4dEhhbmRsZSJfcywgbV90b3BsZXZlbEJyb3dzaW5nQ29u
dGV4dC52YWx1ZSgpKTsKICAgICAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJmcmFtZUhhbmRs
ZSJfcywgbV9jdXJyZW50QnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwogICAgICAgICBtX2hvc3Qt
PnNlbmRDb21tYW5kVG9CYWNrZW5kKCJyZXNvbHZlUGFyZW50RnJhbWVIYW5kbGUiX3MsIFdURk1v
dmUocGFyYW1ldGVycyksIFt0aGlzLCBwcm90ZWN0ZWRUaGlzLCBjb21wbGV0aW9uSGFuZGxlciA9
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXShTZXNzaW9uSG9zdDo6Q29tbWFuZFJlc3BvbnNl
JiYgcmVzcG9uc2UpIHsKQEAgLTcwNSwxMSArNzIxLDEzIEBAIHZvaWQgU2Vzc2lvbjo6c3dpdGNo
VG9QYXJlbnRGcmFtZShGdW5jdGlvbjx2b2lkIChDb21tYW5kUmVzdWx0JiYpPiYmIGNvbXBsZXRp
b25ICiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFp
bChXVEZNb3ZlKHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0KSkpOwogICAgICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFN0cmluZyBmcmFtZUhhbmRsZTsKLSAg
ICAgICAgICAgIGlmICghcmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdldFN0cmluZygicmVzdWx0
Il9zLCBmcmFtZUhhbmRsZSkpIHsKKworICAgICAgICAgICAgYXV0byBmcmFtZUhhbmRsZSA9IHJl
c3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRTdHJpbmcoInJlc3VsdCJfcyk7CisgICAgICAgICAg
ICBpZiAoIWZyYW1lSGFuZGxlKSB7CiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIo
Q29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OlVua25vd25FcnJv
cikpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KKwogICAgICAgICAg
ICAgc3dpdGNoVG9Ccm93c2luZ0NvbnRleHQoZnJhbWVIYW5kbGUpOwogICAgICAgICAgICAgY29t
cGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6c3VjY2VzcygpKTsKICAgICAgICAgfSk7CkBA
IC03MTgsMzkgKzczNiw2MSBAQCB2b2lkIFNlc3Npb246OnN3aXRjaFRvUGFyZW50RnJhbWUoRnVu
Y3Rpb248dm9pZCAoQ29tbWFuZFJlc3VsdCYmKT4mJiBjb21wbGV0aW9uSAogCiB2b2lkIFNlc3Np
b246OmdldFRvcGxldmVsQnJvd3NpbmdDb250ZXh0UmVjdChGdW5jdGlvbjx2b2lkIChDb21tYW5k
UmVzdWx0JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIFJlZlB0cjxKU09OOjpPYmpl
Y3Q+IHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGF1dG8gcGFyYW1l
dGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5n
KCJoYW5kbGUiX3MsIG1fdG9wbGV2ZWxCcm93c2luZ0NvbnRleHQudmFsdWUoKSk7CiAgICAgbV9o
b3N0LT5zZW5kQ29tbWFuZFRvQmFja2VuZCgiZ2V0QnJvd3NpbmdDb250ZXh0Il9zLCBXVEZNb3Zl
KHBhcmFtZXRlcnMpLCBbcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjb21wbGV0aW9u
SGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXShTZXNzaW9uSG9zdDo6Q29tbWFu
ZFJlc3BvbnNlJiYgcmVzcG9uc2UpIHsKICAgICAgICAgaWYgKHJlc3BvbnNlLmlzRXJyb3IgfHwg
IXJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0KSB7CiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cihDb21tYW5kUmVzdWx0OjpmYWlsKFdURk1vdmUocmVzcG9uc2UucmVzcG9uc2VPYmplY3QpKSk7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgUmVmUHRyPEpTT046Ok9i
amVjdD4gYnJvd3NpbmdDb250ZXh0OwotICAgICAgICBpZiAoIXJlc3BvbnNlLnJlc3BvbnNlT2Jq
ZWN0LT5nZXRPYmplY3QoImNvbnRleHQiX3MsIGJyb3dzaW5nQ29udGV4dCkpIHsKKworICAgICAg
ICBhdXRvIGJyb3dzaW5nQ29udGV4dCA9IHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRPYmpl
Y3QoImNvbnRleHQiX3MpOworICAgICAgICBpZiAoIWJyb3dzaW5nQ29udGV4dCkgewogICAgICAg
ICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0
OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9Ci0gICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHdpbmRvd09yaWdpbjsKLSAgICAgICAg
ZG91YmxlIHggPSAwLCB5ID0gMDsKLSAgICAgICAgaWYgKCFicm93c2luZ0NvbnRleHQtPmdldE9i
amVjdCgid2luZG93T3JpZ2luIl9zLCB3aW5kb3dPcmlnaW4pCi0gICAgICAgICAgICB8fCAhd2lu
ZG93T3JpZ2luLT5nZXREb3VibGUoIngiX3MsIHgpCi0gICAgICAgICAgICB8fCAhd2luZG93T3Jp
Z2luLT5nZXREb3VibGUoInkiX3MsIHkpKSB7CisKKyAgICAgICAgYXV0byB3aW5kb3dPcmlnaW4g
PSBicm93c2luZ0NvbnRleHQtPmdldE9iamVjdCgid2luZG93T3JpZ2luIl9zKTsKKyAgICAgICAg
aWYgKCF3aW5kb3dPcmlnaW4pIHsKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1h
bmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiB3aW5kb3dTaXplOwotICAgICAgICBkb3VibGUgd2lkdGggPSAwLCBoZWlnaHQgPSAwOwot
ICAgICAgICBpZiAoIWJyb3dzaW5nQ29udGV4dC0+Z2V0T2JqZWN0KCJ3aW5kb3dTaXplIl9zLCB3
aW5kb3dTaXplKQotICAgICAgICAgICAgfHwgIXdpbmRvd1NpemUtPmdldERvdWJsZSgid2lkdGgi
X3MsIHdpZHRoKQotICAgICAgICAgICAgfHwgIXdpbmRvd1NpemUtPmdldERvdWJsZSgiaGVpZ2h0
Il9zLCBoZWlnaHQpKSB7CisKKyAgICAgICAgYXV0byB4ID0gd2luZG93T3JpZ2luLT5nZXREb3Vi
bGUoIngiX3MpOworICAgICAgICBpZiAoIXgpIHsKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5k
bGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtub3du
RXJyb3IpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQorCisgICAgICAgIGF1dG8g
eSA9IHdpbmRvd09yaWdpbi0+Z2V0RG91YmxlKCJ5Il9zKTsKKyAgICAgICAgaWYgKCF5KSB7Cisg
ICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRS
ZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVycm9yKSk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKworICAgICAgICBhdXRvIHdpbmRvd1NpemUgPSBicm93c2luZ0NvbnRleHQtPmdl
dE9iamVjdCgid2luZG93U2l6ZSJfcyk7CisgICAgICAgIGlmICghd2luZG93U2l6ZSkgeworICAg
ICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVz
dWx0OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisKKyAgICAgICAgYXV0byB3aWR0aCA9IHdpbmRvd1NpemUtPmdldERvdWJsZSgid2lk
dGgiX3MpOworICAgICAgICBpZiAoIXdpZHRoKSB7CisgICAgICAgICAgICBjb21wbGV0aW9uSGFu
ZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93
bkVycm9yKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBhdXRv
IGhlaWdodCA9IHdpbmRvd1NpemUtPmdldERvdWJsZSgiaGVpZ2h0Il9zKTsKKyAgICAgICAgaWYg
KCFoZWlnaHQpIHsKKyAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6
OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorCiAgICAgICAgIGF1dG8gd2luZG93UmVjdCA9IEpTT046
Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgICAgIHdpbmRvd1JlY3QtPnNldERvdWJsZSgieCJfcywg
eCk7Ci0gICAgICAgIHdpbmRvd1JlY3QtPnNldERvdWJsZSgieSJfcywgeSk7Ci0gICAgICAgIHdp
bmRvd1JlY3QtPnNldERvdWJsZSgid2lkdGgiX3MsIHdpZHRoKTsKLSAgICAgICAgd2luZG93UmVj
dC0+c2V0RG91YmxlKCJoZWlnaHQiX3MsIGhlaWdodCk7CisgICAgICAgIHdpbmRvd1JlY3QtPnNl
dERvdWJsZSgieCJfcywgKngpOworICAgICAgICB3aW5kb3dSZWN0LT5zZXREb3VibGUoInkiX3Ms
ICp5KTsKKyAgICAgICAgd2luZG93UmVjdC0+c2V0RG91YmxlKCJ3aWR0aCJfcywgKndpZHRoKTsK
KyAgICAgICAgd2luZG93UmVjdC0+c2V0RG91YmxlKCJoZWlnaHQiX3MsICpoZWlnaHQpOwogICAg
ICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpzdWNjZXNzKFdURk1vdmUod2lu
ZG93UmVjdCkpKTsKICAgICB9KTsKIH0KQEAgLTc4NCwxNiArODI0LDE2IEBAIHZvaWQgU2Vzc2lv
bjo6c2V0V2luZG93UmVjdChPcHRpb25hbDxkb3VibGU+IHgsIE9wdGlvbmFsPGRvdWJsZT4geSwg
T3B0aW9uYWw8ZG91CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBS
ZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsK
KyAgICAgICAgYXV0byBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICAg
ICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJoYW5kbGUiX3MsIG1fdG9wbGV2ZWxCcm93c2luZ0Nv
bnRleHQudmFsdWUoKSk7CiAgICAgICAgIGlmICh4ICYmIHkpIHsKLSAgICAgICAgICAgIFJlZlB0
cjxKU09OOjpPYmplY3Q+IHdpbmRvd09yaWdpbiA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Cisg
ICAgICAgICAgICBhdXRvIHdpbmRvd09yaWdpbiA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAg
ICAgICAgICAgICB3aW5kb3dPcmlnaW4tPnNldERvdWJsZSgieCIsIHgudmFsdWUoKSk7CiAgICAg
ICAgICAgICB3aW5kb3dPcmlnaW4tPnNldERvdWJsZSgieSIsIHkudmFsdWUoKSk7CiAgICAgICAg
ICAgICBwYXJhbWV0ZXJzLT5zZXRPYmplY3QoIm9yaWdpbiJfcywgV1RGTW92ZSh3aW5kb3dPcmln
aW4pKTsKICAgICAgICAgfQogICAgICAgICBpZiAod2lkdGggJiYgaGVpZ2h0KSB7Ci0gICAgICAg
ICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiB3aW5kb3dTaXplID0gSlNPTjo6T2JqZWN0OjpjcmVh
dGUoKTsKKyAgICAgICAgICAgIGF1dG8gd2luZG93U2l6ZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRl
KCk7CiAgICAgICAgICAgICB3aW5kb3dTaXplLT5zZXREb3VibGUoIndpZHRoIiwgd2lkdGgudmFs
dWUoKSk7CiAgICAgICAgICAgICB3aW5kb3dTaXplLT5zZXREb3VibGUoImhlaWdodCIsIGhlaWdo
dC52YWx1ZSgpKTsKICAgICAgICAgICAgIHBhcmFtZXRlcnMtPnNldE9iamVjdCgic2l6ZSJfcywg
V1RGTW92ZSh3aW5kb3dTaXplKSk7CkBAIC04MjEsNyArODYxLDcgQEAgdm9pZCBTZXNzaW9uOjpt
YXhpbWl6ZVdpbmRvdyhGdW5jdGlvbjx2b2lkIChDb21tYW5kUmVzdWx0JiYpPiYmIGNvbXBsZXRp
b25IYW5kbGUKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIFJlZlB0
cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAg
ICAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICBw
YXJhbWV0ZXJzLT5zZXRTdHJpbmcoImhhbmRsZSJfcywgbV90b3BsZXZlbEJyb3dzaW5nQ29udGV4
dC52YWx1ZSgpKTsKICAgICAgICAgbV9ob3N0LT5zZW5kQ29tbWFuZFRvQmFja2VuZCgibWF4aW1p
emVXaW5kb3dPZkJyb3dzaW5nQ29udGV4dCJfcywgV1RGTW92ZShwYXJhbWV0ZXJzKSwgW3RoaXMs
IHByb3RlY3RlZFRoaXMsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcildIChTZXNzaW9uSG9zdDo6Q29tbWFuZFJlc3BvbnNlJiYgcmVzcG9uc2UpIG11dGFibGUg
ewogICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmlzRXJyb3IpIHsKQEAgLTg0Niw3ICs4ODYsNyBA
QCB2b2lkIFNlc3Npb246Om1pbmltaXplV2luZG93KEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSZXN1
bHQmJik+JiYgY29tcGxldGlvbkhhbmRsZQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CiAKLSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVycyA9IEpTT046Ok9iamVj
dDo6Y3JlYXRlKCk7CisgICAgICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3Jl
YXRlKCk7CiAgICAgICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiaGFuZGxlIl9zLCBtX3RvcGxl
dmVsQnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwogICAgICAgICBtX2hvc3QtPnNlbmRDb21tYW5k
VG9CYWNrZW5kKCJoaWRlV2luZG93T2ZCcm93c2luZ0NvbnRleHQiX3MsIFdURk1vdmUocGFyYW1l
dGVycyksIFt0aGlzLCBwcm90ZWN0ZWRUaGlzLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpXSAoU2Vzc2lvbkhvc3Q6OkNvbW1hbmRSZXNwb25zZSYmIHJlc3Bv
bnNlKSBtdXRhYmxlIHsKICAgICAgICAgICAgIGlmIChyZXNwb25zZS5pc0Vycm9yKSB7CkBAIC04
NzEsNyArOTExLDcgQEAgdm9pZCBTZXNzaW9uOjpmdWxsc2NyZWVuV2luZG93KEZ1bmN0aW9uPHZv
aWQgKENvbW1hbmRSZXN1bHQmJik+JiYgY29tcGxldGlvbkhhbmQKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQogCi0gICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnMg
PSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU09O
OjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoImJyb3dz
aW5nQ29udGV4dEhhbmRsZSJfcywgbV90b3BsZXZlbEJyb3dzaW5nQ29udGV4dC52YWx1ZSgpKTsK
ICAgICAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJmdW5jdGlvbiJfcywgU3RyaW5nKEVudGVy
RnVsbHNjcmVlbkphdmFTY3JpcHQsIHNpemVvZihFbnRlckZ1bGxzY3JlZW5KYXZhU2NyaXB0KSkp
OwogICAgICAgICBwYXJhbWV0ZXJzLT5zZXRBcnJheSgiYXJndW1lbnRzIl9zLCBKU09OOjpBcnJh
eTo6Y3JlYXRlKCkpOwpAQCAtODgyLDEzICs5MjIsMTQgQEAgdm9pZCBTZXNzaW9uOjpmdWxsc2Ny
ZWVuV2luZG93KEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSZXN1bHQmJik+JiYgY29tcGxldGlvbkhh
bmQKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
IFN0cmluZyB2YWx1ZVN0cmluZzsKLSAgICAgICAgICAgIGlmICghcmVzcG9uc2UucmVzcG9uc2VP
YmplY3QtPmdldFN0cmluZygicmVzdWx0Il9zLCB2YWx1ZVN0cmluZykpIHsKKyAgICAgICAgICAg
IGF1dG8gdmFsdWVTdHJpbmcgPSByZXNwb25zZS5yZXNwb25zZU9iamVjdC0+Z2V0U3RyaW5nKCJy
ZXN1bHQiX3MpOworICAgICAgICAgICAgaWYgKCF2YWx1ZVN0cmluZykgewogICAgICAgICAgICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6
RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHJlc3VsdFZhbHVlOwot
ICAgICAgICAgICAgaWYgKCFKU09OOjpWYWx1ZTo6cGFyc2VKU09OKHZhbHVlU3RyaW5nLCByZXN1
bHRWYWx1ZSkpIHsKKworICAgICAgICAgICAgYXV0byByZXN1bHRWYWx1ZSA9IEpTT046OlZhbHVl
OjpwYXJzZUpTT04odmFsdWVTdHJpbmcpOworICAgICAgICAgICAgaWYgKCFyZXN1bHRWYWx1ZSkg
ewogICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwo
Q29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKICAgICAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgICAgICB9CkBAIC05MDAsMjIgKzk0MSwyNSBAQCB2b2lkIFNlc3Np
b246OmZ1bGxzY3JlZW5XaW5kb3coRnVuY3Rpb248dm9pZCAoQ29tbWFuZFJlc3VsdCYmKT4mJiBj
b21wbGV0aW9uSGFuZAogCiBSZWZQdHI8SlNPTjo6T2JqZWN0PiBTZXNzaW9uOjpjcmVhdGVFbGVt
ZW50KFJlZlB0cjxKU09OOjpWYWx1ZT4mJiB2YWx1ZSkKIHsKLSAgICBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiB2YWx1ZU9iamVjdDsKLSAgICBpZiAoIXZhbHVlLT5hc09iamVjdCh2YWx1ZU9iamVjdCkp
CisgICAgaWYgKCF2YWx1ZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBTdHJpbmcg
ZWxlbWVudElEOwotICAgIGlmICghdmFsdWVPYmplY3QtPmdldFN0cmluZygic2Vzc2lvbi1ub2Rl
LSIgKyBpZCgpLCBlbGVtZW50SUQpKQorICAgIGF1dG8gdmFsdWVPYmplY3QgPSB2YWx1ZS0+YXNP
YmplY3QoKTsKKyAgICBpZiAoIXZhbHVlT2JqZWN0KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
IAotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IGVsZW1lbnRPYmplY3QgPSBKU09OOjpPYmplY3Q6
OmNyZWF0ZSgpOworICAgIGF1dG8gZWxlbWVudElEID0gdmFsdWVPYmplY3QtPmdldFN0cmluZygi
c2Vzc2lvbi1ub2RlLSIgKyBpZCgpKTsKKyAgICBpZiAoIWVsZW1lbnRJRCkKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisKKyAgICBhdXRvIGVsZW1lbnRPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNy
ZWF0ZSgpOwogICAgIGVsZW1lbnRPYmplY3QtPnNldFN0cmluZyh3ZWJFbGVtZW50SWRlbnRpZmll
cigpLCBlbGVtZW50SUQpOwogICAgIHJldHVybiBlbGVtZW50T2JqZWN0OwogfQogCi1SZWZQdHI8
SlNPTjo6T2JqZWN0PiBTZXNzaW9uOjpjcmVhdGVFbGVtZW50KGNvbnN0IFN0cmluZyYgZWxlbWVu
dElEKQorUmVmPEpTT046Ok9iamVjdD4gU2Vzc2lvbjo6Y3JlYXRlRWxlbWVudChjb25zdCBTdHJp
bmcmIGVsZW1lbnRJRCkKIHsKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBlbGVtZW50T2JqZWN0
ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBhdXRvIGVsZW1lbnRPYmplY3QgPSBKU09O
OjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgIGVsZW1lbnRPYmplY3QtPnNldFN0cmluZygic2Vzc2lv
bi1ub2RlLSIgKyBpZCgpLCBlbGVtZW50SUQpOwogICAgIHJldHVybiBlbGVtZW50T2JqZWN0Owog
fQpAQCAtOTIzLDE3ICs5NjcsMTcgQEAgUmVmUHRyPEpTT046Ok9iamVjdD4gU2Vzc2lvbjo6Y3Jl
YXRlRWxlbWVudChjb25zdCBTdHJpbmcmIGVsZW1lbnRJRCkKIFJlZlB0cjxKU09OOjpPYmplY3Q+
IFNlc3Npb246OmV4dHJhY3RFbGVtZW50KEpTT046OlZhbHVlJiB2YWx1ZSkKIHsKICAgICBTdHJp
bmcgZWxlbWVudElEID0gZXh0cmFjdEVsZW1lbnRJRCh2YWx1ZSk7Ci0gICAgcmV0dXJuICFlbGVt
ZW50SUQuaXNFbXB0eSgpID8gY3JlYXRlRWxlbWVudChlbGVtZW50SUQpIDogbnVsbHB0cjsKKyAg
ICByZXR1cm4gIWVsZW1lbnRJRC5pc0VtcHR5KCkgPyBjcmVhdGVFbGVtZW50KGVsZW1lbnRJRCku
cHRyKCkgOiBudWxscHRyOwogfQogCiBTdHJpbmcgU2Vzc2lvbjo6ZXh0cmFjdEVsZW1lbnRJRChK
U09OOjpWYWx1ZSYgdmFsdWUpCiB7Ci0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gdmFsdWVPYmpl
Y3Q7Ci0gICAgaWYgKCF2YWx1ZS5hc09iamVjdCh2YWx1ZU9iamVjdCkpCisgICAgYXV0byB2YWx1
ZU9iamVjdCA9IHZhbHVlLmFzT2JqZWN0KCk7CisgICAgaWYgKCF2YWx1ZU9iamVjdCkKICAgICAg
ICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CiAKLSAgICBTdHJpbmcgZWxlbWVudElEOwotICAgIGlm
ICghdmFsdWVPYmplY3QtPmdldFN0cmluZyh3ZWJFbGVtZW50SWRlbnRpZmllcigpLCBlbGVtZW50
SUQpKQorICAgIGF1dG8gZWxlbWVudElEID0gdmFsdWVPYmplY3QtPmdldFN0cmluZyh3ZWJFbGVt
ZW50SWRlbnRpZmllcigpKTsKKyAgICBpZiAoIWVsZW1lbnRJRCkKICAgICAgICAgcmV0dXJuIGVt
cHR5U3RyaW5nKCk7CiAKICAgICByZXR1cm4gZWxlbWVudElEOwpAQCAtOTQzLDcgKzk4Nyw3IEBA
IHZvaWQgU2Vzc2lvbjo6Y29tcHV0ZUVsZW1lbnRMYXlvdXQoY29uc3QgU3RyaW5nJiBlbGVtZW50
SUQsIE9wdGlvblNldDxFbGVtZW50TGF5CiB7CiAgICAgQVNTRVJUKG1fdG9wbGV2ZWxCcm93c2lu
Z0NvbnRleHQudmFsdWUoKSk7CiAKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJz
ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU09OOjpP
YmplY3Q6OmNyZWF0ZSgpOwogICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiYnJvd3NpbmdDb250
ZXh0SGFuZGxlIl9zLCBtX3RvcGxldmVsQnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwogICAgIHBh
cmFtZXRlcnMtPnNldFN0cmluZygiZnJhbWVIYW5kbGUiX3MsIG1fY3VycmVudEJyb3dzaW5nQ29u
dGV4dC52YWx1ZU9yKGVtcHR5U3RyaW5nKCkpKTsKICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmco
Im5vZGVIYW5kbGUiX3MsIGVsZW1lbnRJRCk7CkBAIC05NTQsNTkgKzk5OCw2MCBAQCB2b2lkIFNl
c3Npb246OmNvbXB1dGVFbGVtZW50TGF5b3V0KGNvbnN0IFN0cmluZyYgZWxlbWVudElELCBPcHRp
b25TZXQ8RWxlbWVudExheQogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGOjpudWxs
b3B0LCBXVEY6Om51bGxvcHQsIGZhbHNlLCBXVEZNb3ZlKHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0
KSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgUmVmUHRyPEpTT046
Ok9iamVjdD4gcmVjdE9iamVjdDsKLSAgICAgICAgaWYgKCFyZXNwb25zZS5yZXNwb25zZU9iamVj
dC0+Z2V0T2JqZWN0KCJyZWN0Il9zLCByZWN0T2JqZWN0KSkgeworCisgICAgICAgIGF1dG8gcmVj
dE9iamVjdCA9IHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRPYmplY3QoInJlY3QiX3MpOwor
ICAgICAgICBpZiAoIXJlY3RPYmplY3QpIHsKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVy
KFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0LCBmYWxzZSwgbnVsbHB0cik7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KKwogICAgICAgICBPcHRpb25hbDxpbnQ+IGVsZW1lbnRYOwog
ICAgICAgICBPcHRpb25hbDxpbnQ+IGVsZW1lbnRZOwotICAgICAgICBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiBlbGVtZW50UG9zaXRpb247Ci0gICAgICAgIGlmIChyZWN0T2JqZWN0LT5nZXRPYmplY3Qo
Im9yaWdpbiJfcywgZWxlbWVudFBvc2l0aW9uKSkgewotICAgICAgICAgICAgaW50IHgsIHk7Ci0g
ICAgICAgICAgICBpZiAoZWxlbWVudFBvc2l0aW9uLT5nZXRJbnRlZ2VyKCJ4Il9zLCB4KSAmJiBl
bGVtZW50UG9zaXRpb24tPmdldEludGVnZXIoInkiX3MsIHkpKSB7Ci0gICAgICAgICAgICAgICAg
ZWxlbWVudFggPSB4OwotICAgICAgICAgICAgICAgIGVsZW1lbnRZID0geTsKLSAgICAgICAgICAg
IH0KKyAgICAgICAgYXV0byBlbGVtZW50UG9zaXRpb24gPSByZWN0T2JqZWN0LT5nZXRPYmplY3Qo
Im9yaWdpbiJfcyk7CisgICAgICAgIGlmIChlbGVtZW50UG9zaXRpb24pIHsKKyAgICAgICAgICAg
IGVsZW1lbnRYID0gZWxlbWVudFBvc2l0aW9uLT5nZXRJbnRlZ2VyKCJ4Il9zKTsKKyAgICAgICAg
ICAgIGVsZW1lbnRZID0gZWxlbWVudFBvc2l0aW9uLT5nZXRJbnRlZ2VyKCJ5Il9zKTsKICAgICAg
ICAgfQogICAgICAgICBpZiAoIWVsZW1lbnRYIHx8ICFlbGVtZW50WSkgewogICAgICAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIoV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQsIGZhbHNlLCBudWxs
cHRyKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQorCiAgICAgICAgIE9wdGlvbmFs
PGludD4gZWxlbWVudFdpZHRoOwogICAgICAgICBPcHRpb25hbDxpbnQ+IGVsZW1lbnRIZWlnaHQ7
Ci0gICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IGVsZW1lbnRTaXplOwotICAgICAgICBpZiAo
cmVjdE9iamVjdC0+Z2V0T2JqZWN0KCJzaXplIl9zLCBlbGVtZW50U2l6ZSkpIHsKLSAgICAgICAg
ICAgIGludCB3aWR0aCwgaGVpZ2h0OwotICAgICAgICAgICAgaWYgKGVsZW1lbnRTaXplLT5nZXRJ
bnRlZ2VyKCJ3aWR0aCJfcywgd2lkdGgpICYmIGVsZW1lbnRTaXplLT5nZXRJbnRlZ2VyKCJoZWln
aHQiX3MsIGhlaWdodCkpIHsKLSAgICAgICAgICAgICAgICBlbGVtZW50V2lkdGggPSB3aWR0aDsK
LSAgICAgICAgICAgICAgICBlbGVtZW50SGVpZ2h0ID0gaGVpZ2h0OwotICAgICAgICAgICAgfQor
ICAgICAgICBhdXRvIGVsZW1lbnRTaXplID0gcmVjdE9iamVjdC0+Z2V0T2JqZWN0KCJzaXplIl9z
KTsKKyAgICAgICAgaWYgKGVsZW1lbnRTaXplKSB7CisgICAgICAgICAgICBlbGVtZW50V2lkdGgg
PSBlbGVtZW50U2l6ZS0+Z2V0SW50ZWdlcigid2lkdGgiX3MpOworICAgICAgICAgICAgZWxlbWVu
dEhlaWdodCA9IGVsZW1lbnRTaXplLT5nZXRJbnRlZ2VyKCJoZWlnaHQiX3MpOwogICAgICAgICB9
CiAgICAgICAgIGlmICghZWxlbWVudFdpZHRoIHx8ICFlbGVtZW50SGVpZ2h0KSB7CiAgICAgICAg
ICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCwgZmFsc2Us
IG51bGxwdHIpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CisKICAgICAgICAgUmVj
dCByZWN0ID0geyB7IGVsZW1lbnRYLnZhbHVlKCksIGVsZW1lbnRZLnZhbHVlKCkgfSwgeyBlbGVt
ZW50V2lkdGgudmFsdWUoKSwgZWxlbWVudEhlaWdodC52YWx1ZSgpIH0gfTsKIAotICAgICAgICBi
b29sIGlzT2JzY3VyZWQ7Ci0gICAgICAgIGlmICghcmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdl
dEJvb2xlYW4oImlzT2JzY3VyZWQiX3MsIGlzT2JzY3VyZWQpKSB7CisgICAgICAgIGF1dG8gaXNP
YnNjdXJlZCA9IHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRCb29sZWFuKCJpc09ic2N1cmVk
Il9zKTsKKyAgICAgICAgaWYgKCFpc09ic2N1cmVkKSB7CiAgICAgICAgICAgICBjb21wbGV0aW9u
SGFuZGxlcihXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCwgZmFsc2UsIG51bGxwdHIpOwogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+
IGluVmlld0NlbnRlclBvaW50T2JqZWN0OwotICAgICAgICBpZiAoIXJlc3BvbnNlLnJlc3BvbnNl
T2JqZWN0LT5nZXRPYmplY3QoImluVmlld0NlbnRlclBvaW50Il9zLCBpblZpZXdDZW50ZXJQb2lu
dE9iamVjdCkpIHsKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHJlY3QsIFdURjo6bnVs
bG9wdCwgaXNPYnNjdXJlZCwgbnVsbHB0cik7CisKKyAgICAgICAgYXV0byBpblZpZXdDZW50ZXJQ
b2ludE9iamVjdCA9IHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRPYmplY3QoImluVmlld0Nl
bnRlclBvaW50Il9zKTsKKyAgICAgICAgaWYgKCFpblZpZXdDZW50ZXJQb2ludE9iamVjdCkgewor
ICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIocmVjdCwgV1RGOjpudWxsb3B0LCAqaXNPYnNj
dXJlZCwgbnVsbHB0cik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAg
aW50IGluVmlld0NlbnRlclBvaW50WCA9IDAsIGluVmlld0NlbnRlclBvaW50WSA9IDA7Ci0gICAg
ICAgIGlmICghaW5WaWV3Q2VudGVyUG9pbnRPYmplY3QtPmdldEludGVnZXIoIngiX3MsIGluVmll
d0NlbnRlclBvaW50WCkKLSAgICAgICAgICAgIHx8ICFpblZpZXdDZW50ZXJQb2ludE9iamVjdC0+
Z2V0SW50ZWdlcigieSJfcywgaW5WaWV3Q2VudGVyUG9pbnRZKSkgewotICAgICAgICAgICAgY29t
cGxldGlvbkhhbmRsZXIoV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQsIGlzT2JzY3VyZWQsIG51
bGxwdHIpOworCisgICAgICAgIGF1dG8gaW5WaWV3Q2VudGVyUG9pbnRYID0gaW5WaWV3Q2VudGVy
UG9pbnRPYmplY3QtPmdldEludGVnZXIoIngiX3MpOworICAgICAgICBhdXRvIGluVmlld0NlbnRl
clBvaW50WSA9IGluVmlld0NlbnRlclBvaW50T2JqZWN0LT5nZXRJbnRlZ2VyKCJ5Il9zKTsKKyAg
ICAgICAgaWYgKCFpblZpZXdDZW50ZXJQb2ludFggfHwgIWluVmlld0NlbnRlclBvaW50WSkgewor
ICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQs
ICppc09ic2N1cmVkLCBudWxscHRyKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQot
ICAgICAgICBQb2ludCBpblZpZXdDZW50ZXJQb2ludCA9IHsgaW5WaWV3Q2VudGVyUG9pbnRYLCBp
blZpZXdDZW50ZXJQb2ludFkgfTsKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIocmVjdCwgaW5W
aWV3Q2VudGVyUG9pbnQsIGlzT2JzY3VyZWQsIG51bGxwdHIpOworCisgICAgICAgIFBvaW50IGlu
Vmlld0NlbnRlclBvaW50ID0geyAqaW5WaWV3Q2VudGVyUG9pbnRYLCAqaW5WaWV3Q2VudGVyUG9p
bnRZIH07CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHJlY3QsIGluVmlld0NlbnRlclBvaW50
LCAqaXNPYnNjdXJlZCwgbnVsbHB0cik7CiAgICAgfSk7CiB9CiAKQEAgLTEwMjIsNyArMTA2Nyw3
IEBAIHZvaWQgU2Vzc2lvbjo6ZmluZEVsZW1lbnRzKGNvbnN0IFN0cmluZyYgc3RyYXRlZ3ksIGNv
bnN0IFN0cmluZyYgc2VsZWN0b3IsIEZpbmRFCiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cihXVEZNb3ZlKHJlc3VsdCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAg
ICAgIFJlZlB0cjxKU09OOjpBcnJheT4gYXJndW1lbnRzID0gSlNPTjo6QXJyYXk6OmNyZWF0ZSgp
OworICAgICAgICBhdXRvIGFyZ3VtZW50cyA9IEpTT046OkFycmF5OjpjcmVhdGUoKTsKICAgICAg
ICAgYXJndW1lbnRzLT5wdXNoU3RyaW5nKEpTT046OlZhbHVlOjpjcmVhdGUoc3RyYXRlZ3kpLT50
b0pTT05TdHJpbmcoKSk7CiAgICAgICAgIGlmIChyb290RWxlbWVudElELmlzRW1wdHkoKSkKICAg
ICAgICAgICAgIGFyZ3VtZW50cy0+cHVzaFN0cmluZyhKU09OOjpWYWx1ZTo6bnVsbCgpLT50b0pT
T05TdHJpbmcoKSk7CkBAIC0xMDMyLDcgKzEwNzcsNyBAQCB2b2lkIFNlc3Npb246OmZpbmRFbGVt
ZW50cyhjb25zdCBTdHJpbmcmIHN0cmF0ZWd5LCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yLCBGaW5k
RQogICAgICAgICBhcmd1bWVudHMtPnB1c2hTdHJpbmcoSlNPTjo6VmFsdWU6OmNyZWF0ZShtb2Rl
ID09IEZpbmRFbGVtZW50c01vZGU6OlNpbmdsZSktPnRvSlNPTlN0cmluZygpKTsKICAgICAgICAg
YXJndW1lbnRzLT5wdXNoU3RyaW5nKEpTT046OlZhbHVlOjpjcmVhdGUobV9pbXBsaWNpdFdhaXRU
aW1lb3V0KS0+dG9KU09OU3RyaW5nKCkpOwogCi0gICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+
IHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBhdXRvIHBhcmFt
ZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICBwYXJhbWV0ZXJzLT5zZXRT
dHJpbmcoImJyb3dzaW5nQ29udGV4dEhhbmRsZSJfcywgbV90b3BsZXZlbEJyb3dzaW5nQ29udGV4
dC52YWx1ZSgpKTsKICAgICAgICAgaWYgKG1fY3VycmVudEJyb3dzaW5nQ29udGV4dCkKICAgICAg
ICAgICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiZnJhbWVIYW5kbGUiX3MsIG1fY3VycmVudEJy
b3dzaW5nQ29udGV4dC52YWx1ZSgpKTsKQEAgLTEwNDgsMjAgKzEwOTMsMjMgQEAgdm9pZCBTZXNz
aW9uOjpmaW5kRWxlbWVudHMoY29uc3QgU3RyaW5nJiBzdHJhdGVneSwgY29uc3QgU3RyaW5nJiBz
ZWxlY3RvciwgRmluZEUKICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5k
UmVzdWx0OjpmYWlsKFdURk1vdmUocmVzcG9uc2UucmVzcG9uc2VPYmplY3QpKSk7CiAgICAgICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgU3RyaW5nIHZhbHVl
U3RyaW5nOwotICAgICAgICAgICAgaWYgKCFyZXNwb25zZS5yZXNwb25zZU9iamVjdC0+Z2V0U3Ry
aW5nKCJyZXN1bHQiX3MsIHZhbHVlU3RyaW5nKSkgewotICAgICAgICAgICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpV
bmtub3duRXJyb3IpKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHJlc3VsdFZhbHVlOwotICAgICAgICAgICAg
aWYgKCFKU09OOjpWYWx1ZTo6cGFyc2VKU09OKHZhbHVlU3RyaW5nLCByZXN1bHRWYWx1ZSkpIHsK
KworICAgICAgICAgICAgYXV0byB2YWx1ZVN0cmluZyA9IHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0
LT5nZXRTdHJpbmcoInJlc3VsdCJfcyk7CisgICAgICAgICAgICBpZiAoIXZhbHVlU3RyaW5nKSB7
CiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChD
b21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikpOwogICAgICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgICAgIH0KIAorICAgICAgICAgICAgYXV0byByZXN1bHRWYWx1ZSA9
IEpTT046OlZhbHVlOjpwYXJzZUpTT04odmFsdWVTdHJpbmcpOworICAgICAgICAgICAgaWYgKCFy
ZXN1bHRWYWx1ZSkgeworICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRS
ZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKwogICAgICAgICAgICAgc3dp
dGNoIChtb2RlKSB7CiAgICAgICAgICAgICBjYXNlIEZpbmRFbGVtZW50c01vZGU6OlNpbmdsZTog
ewotICAgICAgICAgICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IGVsZW1lbnRPYmplY3QgPSBj
cmVhdGVFbGVtZW50KFdURk1vdmUocmVzdWx0VmFsdWUpKTsKKyAgICAgICAgICAgICAgICBhdXRv
IGVsZW1lbnRPYmplY3QgPSBjcmVhdGVFbGVtZW50KFdURk1vdmUocmVzdWx0VmFsdWUpKTsKICAg
ICAgICAgICAgICAgICBpZiAoIWVsZW1lbnRPYmplY3QpIHsKICAgICAgICAgICAgICAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJv
ckNvZGU6Ok5vU3VjaEVsZW1lbnQpKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAt
MTA3MCwxNiArMTExOCwxNyBAQCB2b2lkIFNlc3Npb246OmZpbmRFbGVtZW50cyhjb25zdCBTdHJp
bmcmIHN0cmF0ZWd5LCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yLCBGaW5kRQogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgY2FzZSBGaW5kRWxlbWVudHNN
b2RlOjpNdWx0aXBsZTogewotICAgICAgICAgICAgICAgIFJlZlB0cjxKU09OOjpBcnJheT4gZWxl
bWVudHNBcnJheTsKLSAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdFZhbHVlLT5hc0FycmF5KGVs
ZW1lbnRzQXJyYXkpKSB7CisgICAgICAgICAgICAgICAgYXV0byBlbGVtZW50c0FycmF5ID0gcmVz
dWx0VmFsdWUtPmFzQXJyYXkoKTsKKyAgICAgICAgICAgICAgICBpZiAoIWVsZW1lbnRzQXJyYXkp
IHsKICAgICAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6
ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6Ok5vU3VjaEVsZW1lbnQpKTsKICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBS
ZWZQdHI8SlNPTjo6QXJyYXk+IGVsZW1lbnRPYmplY3RzQXJyYXkgPSBKU09OOjpBcnJheTo6Y3Jl
YXRlKCk7CisKKyAgICAgICAgICAgICAgICBhdXRvIGVsZW1lbnRPYmplY3RzQXJyYXkgPSBKU09O
OjpBcnJheTo6Y3JlYXRlKCk7CiAgICAgICAgICAgICAgICAgdW5zaWduZWQgZWxlbWVudHNBcnJh
eUxlbmd0aCA9IGVsZW1lbnRzQXJyYXktPmxlbmd0aCgpOwogICAgICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBlbGVtZW50c0FycmF5TGVuZ3RoOyArK2kpIHsKICAgICAgICAg
ICAgICAgICAgICAgaWYgKGF1dG8gZWxlbWVudE9iamVjdCA9IGNyZWF0ZUVsZW1lbnQoZWxlbWVu
dHNBcnJheS0+Z2V0KGkpKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRPYmplY3Rz
QXJyYXktPnB1c2hPYmplY3QoV1RGTW92ZShlbGVtZW50T2JqZWN0KSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBlbGVtZW50T2JqZWN0c0FycmF5LT5wdXNoT2JqZWN0KGVsZW1lbnRPYmplY3Qu
cmVsZWFzZU5vbk51bGwoKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGNv
bXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OnN1Y2Nlc3MoV1RGTW92ZShlbGVtZW50T2Jq
ZWN0c0FycmF5KSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTEwMSw3ICsxMTUwLDcg
QEAgdm9pZCBTZXNzaW9uOjpnZXRBY3RpdmVFbGVtZW50KEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRS
ZXN1bHQmJik+JiYgY29tcGxldGlvbkhhbmQKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVy
KFdURk1vdmUocmVzdWx0KSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAg
ICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRl
KCk7CisgICAgICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAg
ICAgICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiYnJvd3NpbmdDb250ZXh0SGFuZGxlIl9zLCBt
X3RvcGxldmVsQnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwogICAgICAgICBwYXJhbWV0ZXJzLT5z
ZXRTdHJpbmcoImZ1bmN0aW9uIl9zLCAiZnVuY3Rpb24oKSB7IHJldHVybiBkb2N1bWVudC5hY3Rp
dmVFbGVtZW50OyB9Il9zKTsKICAgICAgICAgcGFyYW1ldGVycy0+c2V0QXJyYXkoImFyZ3VtZW50
cyJfcywgSlNPTjo6QXJyYXk6OmNyZWF0ZSgpKTsKQEAgLTExMTAsMTcgKzExNTksMjAgQEAgdm9p
ZCBTZXNzaW9uOjpnZXRBY3RpdmVFbGVtZW50KEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSZXN1bHQm
Jik+JiYgY29tcGxldGlvbkhhbmQKICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihD
b21tYW5kUmVzdWx0OjpmYWlsKFdURk1vdmUocmVzcG9uc2UucmVzcG9uc2VPYmplY3QpKSk7CiAg
ICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgU3RyaW5n
IHZhbHVlU3RyaW5nOwotICAgICAgICAgICAgaWYgKCFyZXNwb25zZS5yZXNwb25zZU9iamVjdC0+
Z2V0U3RyaW5nKCJyZXN1bHQiX3MsIHZhbHVlU3RyaW5nKSkgeworCisgICAgICAgICAgICBhdXRv
IHZhbHVlU3RyaW5nID0gcmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdldFN0cmluZygicmVzdWx0
Il9zKTsKKyAgICAgICAgICAgIGlmICghdmFsdWVTdHJpbmcpIHsKICAgICAgICAgICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9y
Q29kZTo6VW5rbm93bkVycm9yKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAg
ICAgfQotICAgICAgICAgICAgUmVmUHRyPEpTT046OlZhbHVlPiByZXN1bHRWYWx1ZTsKLSAgICAg
ICAgICAgIGlmICghSlNPTjo6VmFsdWU6OnBhcnNlSlNPTih2YWx1ZVN0cmluZywgcmVzdWx0VmFs
dWUpKSB7CisKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0VmFsdWUgPSBKU09OOjpWYWx1ZTo6cGFy
c2VKU09OKHZhbHVlU3RyaW5nKTsKKyAgICAgICAgICAgIGlmICghcmVzdWx0VmFsdWUpIHsKICAg
ICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1h
bmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVycm9yKSk7CiAgICAgICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gZWxl
bWVudE9iamVjdCA9IGNyZWF0ZUVsZW1lbnQoV1RGTW92ZShyZXN1bHRWYWx1ZSkpOworCisgICAg
ICAgICAgICBhdXRvIGVsZW1lbnRPYmplY3QgPSBjcmVhdGVFbGVtZW50KFdURk1vdmUocmVzdWx0
VmFsdWUpKTsKICAgICAgICAgICAgIGlmICghZWxlbWVudE9iamVjdCkgewogICAgICAgICAgICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6
RXJyb3JDb2RlOjpOb1N1Y2hFbGVtZW50KSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAt
MTE0MiwxMSArMTE5NCwxMSBAQCB2b2lkIFNlc3Npb246OmlzRWxlbWVudFNlbGVjdGVkKGNvbnN0
IFN0cmluZyYgZWxlbWVudElELCBGdW5jdGlvbjx2b2lkIChDb21tYW5kUgogICAgICAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShyZXN1bHQpKTsKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQotICAgICAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IGFyZ3VtZW50cyA9IEpTT046
OkFycmF5OjpjcmVhdGUoKTsKKyAgICAgICAgYXV0byBhcmd1bWVudHMgPSBKU09OOjpBcnJheTo6
Y3JlYXRlKCk7CiAgICAgICAgIGFyZ3VtZW50cy0+cHVzaFN0cmluZyhjcmVhdGVFbGVtZW50KGVs
ZW1lbnRJRCktPnRvSlNPTlN0cmluZygpKTsKICAgICAgICAgYXJndW1lbnRzLT5wdXNoU3RyaW5n
KEpTT046OlZhbHVlOjpjcmVhdGUoInNlbGVjdGVkIiktPnRvSlNPTlN0cmluZygpKTsKIAotICAg
ICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVh
dGUoKTsKKyAgICAgICAgYXV0byBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsK
ICAgICAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJicm93c2luZ0NvbnRleHRIYW5kbGUiX3Ms
IG1fdG9wbGV2ZWxCcm93c2luZ0NvbnRleHQudmFsdWUoKSk7CiAgICAgICAgIGlmIChtX2N1cnJl
bnRCcm93c2luZ0NvbnRleHQpCiAgICAgICAgICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoImZy
YW1lSGFuZGxlIl9zLCBtX2N1cnJlbnRCcm93c2luZ0NvbnRleHQudmFsdWUoKSk7CkBAIC0xMTU3
LDI1ICsxMjA5LDMwIEBAIHZvaWQgU2Vzc2lvbjo6aXNFbGVtZW50U2VsZWN0ZWQoY29uc3QgU3Ry
aW5nJiBlbGVtZW50SUQsIEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSCiAgICAgICAgICAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChXVEZNb3ZlKHJlc3BvbnNlLnJl
c3BvbnNlT2JqZWN0KSkpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIFN0cmluZyB2YWx1ZVN0cmluZzsKLSAgICAgICAgICAgIGlmICghcmVzcG9u
c2UucmVzcG9uc2VPYmplY3QtPmdldFN0cmluZygicmVzdWx0Il9zLCB2YWx1ZVN0cmluZykpIHsK
KworICAgICAgICAgICAgYXV0byB2YWx1ZVN0cmluZyA9IHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0
LT5nZXRTdHJpbmcoInJlc3VsdCJfcyk7CisgICAgICAgICAgICBpZiAoIXZhbHVlU3RyaW5nKSB7
CiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChD
b21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikpOwogICAgICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4g
cmVzdWx0VmFsdWU7Ci0gICAgICAgICAgICBpZiAoIUpTT046OlZhbHVlOjpwYXJzZUpTT04odmFs
dWVTdHJpbmcsIHJlc3VsdFZhbHVlKSkgeworCisgICAgICAgICAgICBhdXRvIHJlc3VsdFZhbHVl
ID0gSlNPTjo6VmFsdWU6OnBhcnNlSlNPTih2YWx1ZVN0cmluZyk7CisgICAgICAgICAgICBpZiAo
IXJlc3VsdFZhbHVlKSB7CiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFu
ZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikpOwog
ICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgaWYg
KHJlc3VsdFZhbHVlLT5pc051bGwoKSkgewogICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5k
bGVyKENvbW1hbmRSZXN1bHQ6OnN1Y2Nlc3MoSlNPTjo6VmFsdWU6OmNyZWF0ZShmYWxzZSkpKTsK
ICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBTdHJp
bmcgYm9vbGVhblJlc3VsdDsKLSAgICAgICAgICAgIGlmICghcmVzdWx0VmFsdWUtPmFzU3RyaW5n
KGJvb2xlYW5SZXN1bHQpIHx8IGJvb2xlYW5SZXN1bHQgIT0gInRydWUiKSB7CisKKyAgICAgICAg
ICAgIGF1dG8gYm9vbGVhblJlc3VsdCA9IHJlc3VsdFZhbHVlLT5hc1N0cmluZygpOworICAgICAg
ICAgICAgaWYgKCFib29sZWFuUmVzdWx0IHx8IGJvb2xlYW5SZXN1bHQgIT0gInRydWUiKSB7CiAg
ICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21t
YW5kUmVzdWx0OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikpOwogICAgICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29t
bWFuZFJlc3VsdDo6c3VjY2VzcyhKU09OOjpWYWx1ZTo6Y3JlYXRlKHRydWUpKSk7CiAgICAgICAg
IH0pOwogICAgIH0pOwpAQCAtMTE5MywxMCArMTI1MCwxMCBAQCB2b2lkIFNlc3Npb246OmdldEVs
ZW1lbnRUZXh0KGNvbnN0IFN0cmluZyYgZWxlbWVudElELCBGdW5jdGlvbjx2b2lkIChDb21tYW5k
UmVzdQogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShyZXN1bHQpKTsKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBSZWZQdHI8SlNPTjo6QXJyYXk+
IGFyZ3VtZW50cyA9IEpTT046OkFycmF5OjpjcmVhdGUoKTsKKyAgICAgICAgYXV0byBhcmd1bWVu
dHMgPSBKU09OOjpBcnJheTo6Y3JlYXRlKCk7CiAgICAgICAgIGFyZ3VtZW50cy0+cHVzaFN0cmlu
ZyhjcmVhdGVFbGVtZW50KGVsZW1lbnRJRCktPnRvSlNPTlN0cmluZygpKTsKIAotICAgICAgICBS
ZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsK
KyAgICAgICAgYXV0byBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICAg
ICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJicm93c2luZ0NvbnRleHRIYW5kbGUiX3MsIG1fdG9w
bGV2ZWxCcm93c2luZ0NvbnRleHQudmFsdWUoKSk7CiAgICAgICAgIGlmIChtX2N1cnJlbnRCcm93
c2luZ0NvbnRleHQpCiAgICAgICAgICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoImZyYW1lSGFu
ZGxlIl9zLCBtX2N1cnJlbnRCcm93c2luZ0NvbnRleHQudmFsdWUoKSk7CkBAIC0xMjA4LDE2ICsx
MjY1LDE5IEBAIHZvaWQgU2Vzc2lvbjo6Z2V0RWxlbWVudFRleHQoY29uc3QgU3RyaW5nJiBlbGVt
ZW50SUQsIEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSZXN1CiAgICAgICAgICAgICAgICAgY29tcGxl
dGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChXVEZNb3ZlKHJlc3BvbnNlLnJlc3BvbnNl
T2JqZWN0KSkpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIFN0cmluZyB2YWx1ZVN0cmluZzsKLSAgICAgICAgICAgIGlmICghcmVzcG9uc2UucmVz
cG9uc2VPYmplY3QtPmdldFN0cmluZygicmVzdWx0Il9zLCB2YWx1ZVN0cmluZykpIHsKKworICAg
ICAgICAgICAgYXV0byB2YWx1ZVN0cmluZyA9IHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRT
dHJpbmcoInJlc3VsdCJfcyk7CisgICAgICAgICAgICBpZiAoIXZhbHVlU3RyaW5nKSB7CiAgICAg
ICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5k
UmVzdWx0OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikpOwogICAgICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gcmVzdWx0
VmFsdWU7Ci0gICAgICAgICAgICBpZiAoIUpTT046OlZhbHVlOjpwYXJzZUpTT04odmFsdWVTdHJp
bmcsIHJlc3VsdFZhbHVlKSkgeworCisgICAgICAgICAgICBhdXRvIHJlc3VsdFZhbHVlID0gSlNP
Tjo6VmFsdWU6OnBhcnNlSlNPTih2YWx1ZVN0cmluZyk7CisgICAgICAgICAgICBpZiAoIXJlc3Vs
dFZhbHVlKSB7CiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3Vs
dDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikpOwogICAgICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgY29tcGxldGlv
bkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6c3VjY2VzcyhXVEZNb3ZlKHJlc3VsdFZhbHVlKSkpOwog
ICAgICAgICB9KTsKICAgICB9KTsKQEAgLTEyMzUsMTAgKzEyOTUsMTAgQEAgdm9pZCBTZXNzaW9u
OjpnZXRFbGVtZW50VGFnTmFtZShjb25zdCBTdHJpbmcmIGVsZW1lbnRJRCwgRnVuY3Rpb248dm9p
ZCAoQ29tbWFuZFIKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUocmVzdWx0
KSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgUmVmUHRyPEpTT046
OkFycmF5PiBhcmd1bWVudHMgPSBKU09OOjpBcnJheTo6Y3JlYXRlKCk7CisgICAgICAgIGF1dG8g
YXJndW1lbnRzID0gSlNPTjo6QXJyYXk6OmNyZWF0ZSgpOwogICAgICAgICBhcmd1bWVudHMtPnB1
c2hTdHJpbmcoY3JlYXRlRWxlbWVudChlbGVtZW50SUQpLT50b0pTT05TdHJpbmcoKSk7CiAKLSAg
ICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3Jl
YXRlKCk7CisgICAgICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7
CiAgICAgICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiYnJvd3NpbmdDb250ZXh0SGFuZGxlIl9z
LCBtX3RvcGxldmVsQnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwogICAgICAgICBpZiAobV9jdXJy
ZW50QnJvd3NpbmdDb250ZXh0KQogICAgICAgICAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJm
cmFtZUhhbmRsZSJfcywgbV9jdXJyZW50QnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwpAQCAtMTI0
OSwxNiArMTMwOSwxOSBAQCB2b2lkIFNlc3Npb246OmdldEVsZW1lbnRUYWdOYW1lKGNvbnN0IFN0
cmluZyYgZWxlbWVudElELCBGdW5jdGlvbjx2b2lkIChDb21tYW5kUgogICAgICAgICAgICAgICAg
IGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoV1RGTW92ZShyZXNwb25zZS5y
ZXNwb25zZU9iamVjdCkpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICBTdHJpbmcgdmFsdWVTdHJpbmc7Ci0gICAgICAgICAgICBpZiAoIXJlc3Bv
bnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRTdHJpbmcoInJlc3VsdCJfcywgdmFsdWVTdHJpbmcpKSB7
CisKKyAgICAgICAgICAgIGF1dG8gdmFsdWVTdHJpbmcgPSByZXNwb25zZS5yZXNwb25zZU9iamVj
dC0+Z2V0U3RyaW5nKCJyZXN1bHQiX3MpOworICAgICAgICAgICAgaWYgKCF2YWx1ZVN0cmluZykg
ewogICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwo
Q29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKICAgICAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+
IHJlc3VsdFZhbHVlOwotICAgICAgICAgICAgaWYgKCFKU09OOjpWYWx1ZTo6cGFyc2VKU09OKHZh
bHVlU3RyaW5nLCByZXN1bHRWYWx1ZSkpIHsKKworICAgICAgICAgICAgYXV0byByZXN1bHRWYWx1
ZSA9IEpTT046OlZhbHVlOjpwYXJzZUpTT04odmFsdWVTdHJpbmcpOworICAgICAgICAgICAgaWYg
KCFyZXN1bHRWYWx1ZSkgewogICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1h
bmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsK
ICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CisKICAgICAgICAgICAgIGNv
bXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OnN1Y2Nlc3MoV1RGTW92ZShyZXN1bHRWYWx1
ZSkpKTsKICAgICAgICAgfSk7CiAgICAgfSk7CkBAIC0xMjgxLDcgKzEzNDQsNyBAQCB2b2lkIFNl
c3Npb246OmdldEVsZW1lbnRSZWN0KGNvbnN0IFN0cmluZyYgZWxlbWVudElELCBGdW5jdGlvbjx2
b2lkIChDb21tYW5kUmVzdQogICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1h
bmRSZXN1bHQ6OmZhaWwoV1RGTW92ZShlcnJvcikpKTsKICAgICAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiByZWN0T2Jq
ZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgICAgIGF1dG8gcmVjdE9iamVj
dCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgICAgICByZWN0T2JqZWN0LT5zZXRJ
bnRlZ2VyKCJ4Il9zLCByZWN0LnZhbHVlKCkub3JpZ2luLngpOwogICAgICAgICAgICAgcmVjdE9i
amVjdC0+c2V0SW50ZWdlcigieSJfcywgcmVjdC52YWx1ZSgpLm9yaWdpbi55KTsKICAgICAgICAg
ICAgIHJlY3RPYmplY3QtPnNldEludGVnZXIoIndpZHRoIl9zLCByZWN0LnZhbHVlKCkuc2l6ZS53
aWR0aCk7CkBAIC0xMzAzLDEwICsxMzY2LDEwIEBAIHZvaWQgU2Vzc2lvbjo6aXNFbGVtZW50RW5h
YmxlZChjb25zdCBTdHJpbmcmIGVsZW1lbnRJRCwgRnVuY3Rpb248dm9pZCAoQ29tbWFuZFJlCiAg
ICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKHJlc3VsdCkpOwogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIFJlZlB0cjxKU09OOjpBcnJheT4gYXJndW1l
bnRzID0gSlNPTjo6QXJyYXk6OmNyZWF0ZSgpOworICAgICAgICBhdXRvIGFyZ3VtZW50cyA9IEpT
T046OkFycmF5OjpjcmVhdGUoKTsKICAgICAgICAgYXJndW1lbnRzLT5wdXNoU3RyaW5nKGNyZWF0
ZUVsZW1lbnQoZWxlbWVudElEKS0+dG9KU09OU3RyaW5nKCkpOwogCi0gICAgICAgIFJlZlB0cjxK
U09OOjpPYmplY3Q+IHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgICAg
ICBhdXRvIHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICBwYXJh
bWV0ZXJzLT5zZXRTdHJpbmcoImJyb3dzaW5nQ29udGV4dEhhbmRsZSJfcywgbV90b3BsZXZlbEJy
b3dzaW5nQ29udGV4dC52YWx1ZSgpKTsKICAgICAgICAgaWYgKG1fY3VycmVudEJyb3dzaW5nQ29u
dGV4dCkKICAgICAgICAgICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiZnJhbWVIYW5kbGUiX3Ms
IG1fY3VycmVudEJyb3dzaW5nQ29udGV4dC52YWx1ZSgpKTsKQEAgLTEzMTcsMTYgKzEzODAsMTkg
QEAgdm9pZCBTZXNzaW9uOjppc0VsZW1lbnRFbmFibGVkKGNvbnN0IFN0cmluZyYgZWxlbWVudElE
LCBGdW5jdGlvbjx2b2lkIChDb21tYW5kUmUKICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFu
ZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKFdURk1vdmUocmVzcG9uc2UucmVzcG9uc2VPYmplY3Qp
KSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQotICAgICAgICAgICAg
U3RyaW5nIHZhbHVlU3RyaW5nOwotICAgICAgICAgICAgaWYgKCFyZXNwb25zZS5yZXNwb25zZU9i
amVjdC0+Z2V0U3RyaW5nKCJyZXN1bHQiX3MsIHZhbHVlU3RyaW5nKSkgeworCisgICAgICAgICAg
ICBhdXRvIHZhbHVlU3RyaW5nID0gcmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdldFN0cmluZygi
cmVzdWx0Il9zKTsKKyAgICAgICAgICAgIGlmICghdmFsdWVTdHJpbmcpIHsKICAgICAgICAgICAg
ICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6
OkVycm9yQ29kZTo6VW5rbm93bkVycm9yKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAgICAgfQotICAgICAgICAgICAgUmVmUHRyPEpTT046OlZhbHVlPiByZXN1bHRWYWx1ZTsK
LSAgICAgICAgICAgIGlmICghSlNPTjo6VmFsdWU6OnBhcnNlSlNPTih2YWx1ZVN0cmluZywgcmVz
dWx0VmFsdWUpKSB7CisKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0VmFsdWUgPSBKU09OOjpWYWx1
ZTo6cGFyc2VKU09OKHZhbHVlU3RyaW5nKTsKKyAgICAgICAgICAgIGlmICghcmVzdWx0VmFsdWUp
IHsKICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWls
KENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVycm9yKSk7CiAgICAgICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cihDb21tYW5kUmVzdWx0OjpzdWNjZXNzKFdURk1vdmUocmVzdWx0VmFsdWUpKSk7CiAgICAgICAg
IH0pOwogICAgIH0pOwpAQCAtMTM0NCwxMCArMTQxMCwxMCBAQCB2b2lkIFNlc3Npb246OmlzRWxl
bWVudERpc3BsYXllZChjb25zdCBTdHJpbmcmIGVsZW1lbnRJRCwgRnVuY3Rpb248dm9pZCAoQ29t
bWFuZAogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShyZXN1bHQpKTsKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBSZWZQdHI8SlNPTjo6QXJyYXk+
IGFyZ3VtZW50cyA9IEpTT046OkFycmF5OjpjcmVhdGUoKTsKKyAgICAgICAgYXV0byBhcmd1bWVu
dHMgPSBKU09OOjpBcnJheTo6Y3JlYXRlKCk7CiAgICAgICAgIGFyZ3VtZW50cy0+cHVzaFN0cmlu
ZyhjcmVhdGVFbGVtZW50KGVsZW1lbnRJRCktPnRvSlNPTlN0cmluZygpKTsKIAotICAgICAgICBS
ZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsK
KyAgICAgICAgYXV0byBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICAg
ICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJicm93c2luZ0NvbnRleHRIYW5kbGUiX3MsIG1fdG9w
bGV2ZWxCcm93c2luZ0NvbnRleHQudmFsdWUoKSk7CiAgICAgICAgIGlmIChtX2N1cnJlbnRCcm93
c2luZ0NvbnRleHQpCiAgICAgICAgICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoImZyYW1lSGFu
ZGxlIl9zLCBtX2N1cnJlbnRCcm93c2luZ0NvbnRleHQudmFsdWUoKSk7CkBAIC0xMzU4LDE2ICsx
NDI0LDE5IEBAIHZvaWQgU2Vzc2lvbjo6aXNFbGVtZW50RGlzcGxheWVkKGNvbnN0IFN0cmluZyYg
ZWxlbWVudElELCBGdW5jdGlvbjx2b2lkIChDb21tYW5kCiAgICAgICAgICAgICAgICAgY29tcGxl
dGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChXVEZNb3ZlKHJlc3BvbnNlLnJlc3BvbnNl
T2JqZWN0KSkpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIFN0cmluZyB2YWx1ZVN0cmluZzsKLSAgICAgICAgICAgIGlmICghcmVzcG9uc2UucmVz
cG9uc2VPYmplY3QtPmdldFN0cmluZygicmVzdWx0Il9zLCB2YWx1ZVN0cmluZykpIHsKKworICAg
ICAgICAgICAgYXV0byB2YWx1ZVN0cmluZyA9IHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRT
dHJpbmcoInJlc3VsdCJfcyk7CisgICAgICAgICAgICBpZiAoIXZhbHVlU3RyaW5nKSB7CiAgICAg
ICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5k
UmVzdWx0OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikpOwogICAgICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gcmVzdWx0
VmFsdWU7Ci0gICAgICAgICAgICBpZiAoIUpTT046OlZhbHVlOjpwYXJzZUpTT04odmFsdWVTdHJp
bmcsIHJlc3VsdFZhbHVlKSkgeworCisgICAgICAgICAgICBhdXRvIHJlc3VsdFZhbHVlID0gSlNP
Tjo6VmFsdWU6OnBhcnNlSlNPTih2YWx1ZVN0cmluZyk7CisgICAgICAgICAgICBpZiAoIXJlc3Vs
dFZhbHVlKSB7CiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3Vs
dDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikpOwogICAgICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgY29tcGxldGlv
bkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6c3VjY2VzcyhXVEZNb3ZlKHJlc3VsdFZhbHVlKSkpOwog
ICAgICAgICB9KTsKICAgICB9KTsKQEAgLTEzODUsMTEgKzE0NTQsMTEgQEAgdm9pZCBTZXNzaW9u
OjpnZXRFbGVtZW50QXR0cmlidXRlKGNvbnN0IFN0cmluZyYgZWxlbWVudElELCBjb25zdCBTdHJp
bmcmIGF0dHJpYnUKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUocmVzdWx0
KSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgUmVmUHRyPEpTT046
OkFycmF5PiBhcmd1bWVudHMgPSBKU09OOjpBcnJheTo6Y3JlYXRlKCk7CisgICAgICAgIGF1dG8g
YXJndW1lbnRzID0gSlNPTjo6QXJyYXk6OmNyZWF0ZSgpOwogICAgICAgICBhcmd1bWVudHMtPnB1
c2hTdHJpbmcoY3JlYXRlRWxlbWVudChlbGVtZW50SUQpLT50b0pTT05TdHJpbmcoKSk7CiAgICAg
ICAgIGFyZ3VtZW50cy0+cHVzaFN0cmluZyhKU09OOjpWYWx1ZTo6Y3JlYXRlKGF0dHJpYnV0ZSkt
PnRvSlNPTlN0cmluZygpKTsKIAotICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0
ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgYXV0byBwYXJhbWV0ZXJzID0g
SlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJi
cm93c2luZ0NvbnRleHRIYW5kbGUiX3MsIG1fdG9wbGV2ZWxCcm93c2luZ0NvbnRleHQudmFsdWUo
KSk7CiAgICAgICAgIGlmIChtX2N1cnJlbnRCcm93c2luZ0NvbnRleHQpCiAgICAgICAgICAgICBw
YXJhbWV0ZXJzLT5zZXRTdHJpbmcoImZyYW1lSGFuZGxlIl9zLCBtX2N1cnJlbnRCcm93c2luZ0Nv
bnRleHQudmFsdWUoKSk7CkBAIC0xNDAwLDE2ICsxNDY5LDE5IEBAIHZvaWQgU2Vzc2lvbjo6Z2V0
RWxlbWVudEF0dHJpYnV0ZShjb25zdCBTdHJpbmcmIGVsZW1lbnRJRCwgY29uc3QgU3RyaW5nJiBh
dHRyaWJ1CiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6
ZmFpbChXVEZNb3ZlKHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0KSkpOwogICAgICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFN0cmluZyB2YWx1ZVN0cmluZzsK
LSAgICAgICAgICAgIGlmICghcmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdldFN0cmluZygicmVz
dWx0Il9zLCB2YWx1ZVN0cmluZykpIHsKKworICAgICAgICAgICAgYXV0byB2YWx1ZVN0cmluZyA9
IHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRTdHJpbmcoInJlc3VsdCJfcyk7CisgICAgICAg
ICAgICBpZiAoIXZhbHVlU3RyaW5nKSB7CiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OlVua25vd25F
cnJvcikpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gcmVzdWx0VmFsdWU7Ci0gICAgICAgICAgICBpZiAoIUpT
T046OlZhbHVlOjpwYXJzZUpTT04odmFsdWVTdHJpbmcsIHJlc3VsdFZhbHVlKSkgeworCisgICAg
ICAgICAgICBhdXRvIHJlc3VsdFZhbHVlID0gSlNPTjo6VmFsdWU6OnBhcnNlSlNPTih2YWx1ZVN0
cmluZyk7CisgICAgICAgICAgICBpZiAoIXJlc3VsdFZhbHVlKSB7CiAgICAgICAgICAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJv
ckNvZGU6OlVua25vd25FcnJvcikpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
ICAgIH0KKwogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6c3Vj
Y2VzcyhXVEZNb3ZlKHJlc3VsdFZhbHVlKSkpOwogICAgICAgICB9KTsKICAgICB9KTsKQEAgLTE0
MjcsMTAgKzE0OTksMTAgQEAgdm9pZCBTZXNzaW9uOjpnZXRFbGVtZW50UHJvcGVydHkoY29uc3Qg
U3RyaW5nJiBlbGVtZW50SUQsIGNvbnN0IFN0cmluZyYgcHJvcGVydHkKICAgICAgICAgICAgIGNv
bXBsZXRpb25IYW5kbGVyKFdURk1vdmUocmVzdWx0KSk7CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KLSAgICAgICAgUmVmUHRyPEpTT046OkFycmF5PiBhcmd1bWVudHMgPSBKU09OOjpB
cnJheTo6Y3JlYXRlKCk7CisgICAgICAgIGF1dG8gYXJndW1lbnRzID0gSlNPTjo6QXJyYXk6OmNy
ZWF0ZSgpOwogICAgICAgICBhcmd1bWVudHMtPnB1c2hTdHJpbmcoY3JlYXRlRWxlbWVudChlbGVt
ZW50SUQpLT50b0pTT05TdHJpbmcoKSk7CiAKLSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4g
cGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIGF1dG8gcGFyYW1l
dGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgIHBhcmFtZXRlcnMtPnNldFN0
cmluZygiYnJvd3NpbmdDb250ZXh0SGFuZGxlIl9zLCBtX3RvcGxldmVsQnJvd3NpbmdDb250ZXh0
LnZhbHVlKCkpOwogICAgICAgICBpZiAobV9jdXJyZW50QnJvd3NpbmdDb250ZXh0KQogICAgICAg
ICAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJmcmFtZUhhbmRsZSJfcywgbV9jdXJyZW50QnJv
d3NpbmdDb250ZXh0LnZhbHVlKCkpOwpAQCAtMTQ0MSwxNiArMTUxMywxOSBAQCB2b2lkIFNlc3Np
b246OmdldEVsZW1lbnRQcm9wZXJ0eShjb25zdCBTdHJpbmcmIGVsZW1lbnRJRCwgY29uc3QgU3Ry
aW5nJiBwcm9wZXJ0eQogICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRS
ZXN1bHQ6OmZhaWwoV1RGTW92ZShyZXNwb25zZS5yZXNwb25zZU9iamVjdCkpKTsKICAgICAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBTdHJpbmcgdmFsdWVT
dHJpbmc7Ci0gICAgICAgICAgICBpZiAoIXJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRTdHJp
bmcoInJlc3VsdCJfcywgdmFsdWVTdHJpbmcpKSB7CisKKyAgICAgICAgICAgIGF1dG8gdmFsdWVT
dHJpbmcgPSByZXNwb25zZS5yZXNwb25zZU9iamVjdC0+Z2V0U3RyaW5nKCJyZXN1bHQiX3MpOwor
ICAgICAgICAgICAgaWYgKCF2YWx1ZVN0cmluZykgewogICAgICAgICAgICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpV
bmtub3duRXJyb3IpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHJlc3VsdFZhbHVlOwotICAgICAgICAgICAg
aWYgKCFKU09OOjpWYWx1ZTo6cGFyc2VKU09OKHZhbHVlU3RyaW5nLCByZXN1bHRWYWx1ZSkpIHsK
KworICAgICAgICAgICAgYXV0byByZXN1bHRWYWx1ZSA9IEpTT046OlZhbHVlOjpwYXJzZUpTT04o
dmFsdWVTdHJpbmcpOworICAgICAgICAgICAgaWYgKCFyZXN1bHRWYWx1ZSkgewogICAgICAgICAg
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3Vs
dDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgICAgICB9CisKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1
bHQ6OnN1Y2Nlc3MoV1RGTW92ZShyZXN1bHRWYWx1ZSkpKTsKICAgICAgICAgfSk7CiAgICAgfSk7
CkBAIC0xNDY4LDEwICsxNTQzLDEwIEBAIHZvaWQgU2Vzc2lvbjo6Z2V0RWxlbWVudENTU1ZhbHVl
KGNvbnN0IFN0cmluZyYgZWxlbWVudElELCBjb25zdCBTdHJpbmcmIGNzc1Byb3BlCiAgICAgICAg
ICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKHJlc3VsdCkpOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9Ci0gICAgICAgIFJlZlB0cjxKU09OOjpBcnJheT4gYXJndW1lbnRzID0g
SlNPTjo6QXJyYXk6OmNyZWF0ZSgpOworICAgICAgICBhdXRvIGFyZ3VtZW50cyA9IEpTT046OkFy
cmF5OjpjcmVhdGUoKTsKICAgICAgICAgYXJndW1lbnRzLT5wdXNoU3RyaW5nKGNyZWF0ZUVsZW1l
bnQoZWxlbWVudElEKS0+dG9KU09OU3RyaW5nKCkpOwogCi0gICAgICAgIFJlZlB0cjxKU09OOjpP
YmplY3Q+IHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBhdXRv
IHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICBwYXJhbWV0ZXJz
LT5zZXRTdHJpbmcoImJyb3dzaW5nQ29udGV4dEhhbmRsZSJfcywgbV90b3BsZXZlbEJyb3dzaW5n
Q29udGV4dC52YWx1ZSgpKTsKICAgICAgICAgaWYgKG1fY3VycmVudEJyb3dzaW5nQ29udGV4dCkK
ICAgICAgICAgICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiZnJhbWVIYW5kbGUiX3MsIG1fY3Vy
cmVudEJyb3dzaW5nQ29udGV4dC52YWx1ZSgpKTsKQEAgLTE0ODIsMTYgKzE1NTcsMTkgQEAgdm9p
ZCBTZXNzaW9uOjpnZXRFbGVtZW50Q1NTVmFsdWUoY29uc3QgU3RyaW5nJiBlbGVtZW50SUQsIGNv
bnN0IFN0cmluZyYgY3NzUHJvcGUKICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihD
b21tYW5kUmVzdWx0OjpmYWlsKFdURk1vdmUocmVzcG9uc2UucmVzcG9uc2VPYmplY3QpKSk7CiAg
ICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgU3RyaW5n
IHZhbHVlU3RyaW5nOwotICAgICAgICAgICAgaWYgKCFyZXNwb25zZS5yZXNwb25zZU9iamVjdC0+
Z2V0U3RyaW5nKCJyZXN1bHQiX3MsIHZhbHVlU3RyaW5nKSkgeworCisgICAgICAgICAgICBhdXRv
IHZhbHVlU3RyaW5nID0gcmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdldFN0cmluZygicmVzdWx0
Il9zKTsKKyAgICAgICAgICAgIGlmICghdmFsdWVTdHJpbmcpIHsKICAgICAgICAgICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9y
Q29kZTo6VW5rbm93bkVycm9yKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAg
ICAgfQotICAgICAgICAgICAgUmVmUHRyPEpTT046OlZhbHVlPiByZXN1bHRWYWx1ZTsKLSAgICAg
ICAgICAgIGlmICghSlNPTjo6VmFsdWU6OnBhcnNlSlNPTih2YWx1ZVN0cmluZywgcmVzdWx0VmFs
dWUpKSB7CisKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0VmFsdWUgPSBKU09OOjpWYWx1ZTo6cGFy
c2VKU09OKHZhbHVlU3RyaW5nKTsKKyAgICAgICAgICAgIGlmICghcmVzdWx0VmFsdWUpIHsKICAg
ICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1h
bmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVycm9yKSk7CiAgICAgICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21t
YW5kUmVzdWx0OjpzdWNjZXNzKFdURk1vdmUocmVzdWx0VmFsdWUpKSk7CiAgICAgICAgIH0pOwog
ICAgIH0pOwpAQCAtMTUwNCw3ICsxNTgyLDcgQEAgdm9pZCBTZXNzaW9uOjp3YWl0Rm9yTmF2aWdh
dGlvblRvQ29tcGxldGUoRnVuY3Rpb248dm9pZCAoQ29tbWFuZFJlc3VsdCYmKT4mJiBjb20KICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRl
cnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTT046
Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJicm93c2luZ0Nv
bnRleHRIYW5kbGUiX3MsIG1fdG9wbGV2ZWxCcm93c2luZ0NvbnRleHQudmFsdWUoKSk7CiAgICAg
aWYgKG1fY3VycmVudEJyb3dzaW5nQ29udGV4dCkKICAgICAgICAgcGFyYW1ldGVycy0+c2V0U3Ry
aW5nKCJmcmFtZUhhbmRsZSJfcywgbV9jdXJyZW50QnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwpA
QCAtMTUzNCw3ICsxNjEyLDcgQEAgdm9pZCBTZXNzaW9uOjp3YWl0Rm9yTmF2aWdhdGlvblRvQ29t
cGxldGUoRnVuY3Rpb248dm9pZCAoQ29tbWFuZFJlc3VsdCYmKT4mJiBjb20KIAogdm9pZCBTZXNz
aW9uOjplbGVtZW50SXNGaWxlVXBsb2FkKGNvbnN0IFN0cmluZyYgZWxlbWVudElELCBGdW5jdGlv
bjx2b2lkIChDb21tYW5kUmVzdWx0JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIFJl
ZlB0cjxKU09OOjpBcnJheT4gYXJndW1lbnRzID0gSlNPTjo6QXJyYXk6OmNyZWF0ZSgpOworICAg
IGF1dG8gYXJndW1lbnRzID0gSlNPTjo6QXJyYXk6OmNyZWF0ZSgpOwogICAgIGFyZ3VtZW50cy0+
cHVzaFN0cmluZyhjcmVhdGVFbGVtZW50KGVsZW1lbnRJRCktPnRvSlNPTlN0cmluZygpKTsKIAog
ICAgIHN0YXRpYyBjb25zdCBjaGFyIGlzRmlsZVVwbG9hZFNjcmlwdFtdID0KQEAgLTE1NDQsNyAr
MTYyMiw3IEBAIHZvaWQgU2Vzc2lvbjo6ZWxlbWVudElzRmlsZVVwbG9hZChjb25zdCBTdHJpbmcm
IGVsZW1lbnRJRCwgRnVuY3Rpb248dm9pZCAoQ29tbWFuCiAgICAgICAgICIgICAgcmV0dXJuIHsg
J2ZpbGVVcGxvYWQnOiBmYWxzZSB9OyIKICAgICAgICAgIn0iOwogCi0gICAgUmVmUHRyPEpTT046
Ok9iamVjdD4gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgYXV0byBw
YXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICBwYXJhbWV0ZXJzLT5zZXRT
dHJpbmcoImJyb3dzaW5nQ29udGV4dEhhbmRsZSJfcywgbV90b3BsZXZlbEJyb3dzaW5nQ29udGV4
dC52YWx1ZSgpKTsKICAgICBpZiAobV9jdXJyZW50QnJvd3NpbmdDb250ZXh0KQogICAgICAgICBw
YXJhbWV0ZXJzLT5zZXRTdHJpbmcoImZyYW1lSGFuZGxlIl9zLCBtX2N1cnJlbnRCcm93c2luZ0Nv
bnRleHQudmFsdWUoKSk7CkBAIC0xNTU1LDMyICsxNjMzLDM4IEBAIHZvaWQgU2Vzc2lvbjo6ZWxl
bWVudElzRmlsZVVwbG9hZChjb25zdCBTdHJpbmcmIGVsZW1lbnRJRCwgRnVuY3Rpb248dm9pZCAo
Q29tbWFuCiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWls
KFdURk1vdmUocmVzcG9uc2UucmVzcG9uc2VPYmplY3QpKSk7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KLSAgICAgICAgU3RyaW5nIHZhbHVlU3RyaW5nOwotICAgICAgICBpZiAoIXJl
c3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRTdHJpbmcoInJlc3VsdCJfcywgdmFsdWVTdHJpbmcp
KSB7CisKKyAgICAgICAgYXV0byB2YWx1ZVN0cmluZyA9IHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0
LT5nZXRTdHJpbmcoInJlc3VsdCJfcyk7CisgICAgICAgIGlmICghdmFsdWVTdHJpbmcpIHsKICAg
ICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJl
c3VsdDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQotICAgICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHJlc3VsdFZhbHVlOwotICAgICAg
ICBpZiAoIUpTT046OlZhbHVlOjpwYXJzZUpTT04odmFsdWVTdHJpbmcsIHJlc3VsdFZhbHVlKSkg
eworCisgICAgICAgIGF1dG8gcmVzdWx0VmFsdWUgPSBKU09OOjpWYWx1ZTo6cGFyc2VKU09OKHZh
bHVlU3RyaW5nKTsKKyAgICAgICAgaWYgKCFyZXN1bHRWYWx1ZSkgewogICAgICAgICAgICAgY29t
cGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNv
ZGU6OlVua25vd25FcnJvcikpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CisKICAg
ICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6c3VjY2VzcyhXVEZNb3ZlKHJl
c3VsdFZhbHVlKSkpOwogICAgIH0pOwogfQogCiBPcHRpb25hbDxTZXNzaW9uOjpGaWxlVXBsb2Fk
VHlwZT4gU2Vzc2lvbjo6cGFyc2VFbGVtZW50SXNGaWxlVXBsb2FkUmVzdWx0KGNvbnN0IFJlZlB0
cjxKU09OOjpWYWx1ZT4mIHJlc3VsdFZhbHVlKQogewotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+
IHJlc3VsdDsKLSAgICBpZiAoIXJlc3VsdFZhbHVlLT5hc09iamVjdChyZXN1bHQpKQorICAgIGlm
ICghcmVzdWx0VmFsdWUpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBib29s
IGlzRmlsZVVwbG9hZDsKLSAgICBpZiAoIXJlc3VsdC0+Z2V0Qm9vbGVhbigiZmlsZVVwbG9hZCJf
cywgaXNGaWxlVXBsb2FkKSB8fCAhaXNGaWxlVXBsb2FkKQorICAgIGF1dG8gcmVzdWx0ID0gcmVz
dWx0VmFsdWUtPmFzT2JqZWN0KCk7CisgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CiAKLSAgICBib29sIG11bHRpcGxlOwotICAgIGlmICghcmVzdWx0LT5nZXRC
b29sZWFuKCJtdWx0aXBsZSJfcywgbXVsdGlwbGUpIHx8ICFtdWx0aXBsZSkKKyAgICBhdXRvIGlz
RmlsZVVwbG9hZCA9IHJlc3VsdC0+Z2V0Qm9vbGVhbigiZmlsZVVwbG9hZCJfcyk7CisgICAgaWYg
KCFpc0ZpbGVVcGxvYWQgfHwgISppc0ZpbGVVcGxvYWQpCisgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CisKKyAgICBhdXRvIG11bHRpcGxlID0gcmVzdWx0LT5nZXRCb29sZWFuKCJtdWx0aXBs
ZSJfcyk7CisgICAgaWYgKCFtdWx0aXBsZSB8fCAhKm11bHRpcGxlKQogICAgICAgICByZXR1cm4g
RmlsZVVwbG9hZFR5cGU6OlNpbmdsZTsKIAogICAgIHJldHVybiBGaWxlVXBsb2FkVHlwZTo6TXVs
dGlwbGU7CkBAIC0xNTg4LDcgKzE2NzIsNyBAQCBPcHRpb25hbDxTZXNzaW9uOjpGaWxlVXBsb2Fk
VHlwZT4gU2Vzc2lvbjo6cGFyc2VFbGVtZW50SXNGaWxlVXBsb2FkUmVzdWx0KGNvbnN0CiAKIHZv
aWQgU2Vzc2lvbjo6c2VsZWN0T3B0aW9uRWxlbWVudChjb25zdCBTdHJpbmcmIGVsZW1lbnRJRCwg
RnVuY3Rpb248dm9pZCAoQ29tbWFuZFJlc3VsdCYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsK
LSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVh
dGUoKTsKKyAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAg
IHBhcmFtZXRlcnMtPnNldFN0cmluZygiYnJvd3NpbmdDb250ZXh0SGFuZGxlIl9zLCBtX3RvcGxl
dmVsQnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwogICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygi
ZnJhbWVIYW5kbGUiX3MsIG1fY3VycmVudEJyb3dzaW5nQ29udGV4dC52YWx1ZU9yKGVtcHR5U3Ry
aW5nKCkpKTsKICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoIm5vZGVIYW5kbGUiX3MsIGVsZW1l
bnRJRCk7CkBAIC0xNjQxLDggKzE3MjUsOCBAQCB2b2lkIFNlc3Npb246OmVsZW1lbnRDbGljayhj
b25zdCBTdHJpbmcmIGVsZW1lbnRJRCwgRnVuY3Rpb248dm9pZCAoQ29tbWFuZFJlc3VsdAogICAg
ICAgICAgICAgICAgIGdldEVsZW1lbnRUYWdOYW1lKGVsZW1lbnRJRCwgW3RoaXMsIGVsZW1lbnRJ
RCwgaW5WaWV3Q2VudGVyID0gV1RGTW92ZShpblZpZXdDZW50ZXIpLCBjb21wbGV0aW9uSGFuZGxl
ciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXShDb21tYW5kUmVzdWx0JiYgcmVzdWx0KSBt
dXRhYmxlIHsKICAgICAgICAgICAgICAgICAgICAgYm9vbCBpc09wdGlvbkVsZW1lbnQgPSBmYWxz
ZTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQuaXNFcnJvcigpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBTdHJpbmcgdGFnTmFtZTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChyZXN1bHQucmVzdWx0KCktPmFzU3RyaW5nKHRhZ05hbWUpKQorICAgICAgICAgICAgICAg
ICAgICAgICAgYXV0byB0YWdOYW1lID0gcmVzdWx0LnJlc3VsdCgpLT5hc1N0cmluZygpOworICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCEhdGFnTmFtZSkKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpc09wdGlvbkVsZW1lbnQgPSB0YWdOYW1lID09ICJvcHRpb24iOwogICAgICAgICAg
ICAgICAgICAgICB9CiAKQEAgLTE2NjYsNyArMTc1MCw3IEBAIHZvaWQgU2Vzc2lvbjo6ZWxlbWVu
dENsaWNrKGNvbnN0IFN0cmluZyYgZWxlbWVudElELCBGdW5jdGlvbjx2b2lkIChDb21tYW5kUmVz
dWx0CiAKIHZvaWQgU2Vzc2lvbjo6ZWxlbWVudElzRWRpdGFibGUoY29uc3QgU3RyaW5nJiBlbGVt
ZW50SUQsIEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSZXN1bHQmJik+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCiB7Ci0gICAgUmVmUHRyPEpTT046OkFycmF5PiBhcmd1bWVudHMgPSBKU09OOjpBcnJheTo6
Y3JlYXRlKCk7CisgICAgYXV0byBhcmd1bWVudHMgPSBKU09OOjpBcnJheTo6Y3JlYXRlKCk7CiAg
ICAgYXJndW1lbnRzLT5wdXNoU3RyaW5nKGNyZWF0ZUVsZW1lbnQoZWxlbWVudElEKS0+dG9KU09O
U3RyaW5nKCkpOwogCiAgICAgc3RhdGljIGNvbnN0IGNoYXIgaXNFZGl0YWJsZVNjcmlwdFtdID0K
QEAgLTE2ODYsNyArMTc3MCw3IEBAIHZvaWQgU2Vzc2lvbjo6ZWxlbWVudElzRWRpdGFibGUoY29u
c3QgU3RyaW5nJiBlbGVtZW50SUQsIEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSCiAgICAgICAgICIg
ICAgcmV0dXJuIGZhbHNlOyIKICAgICAgICAgIn0iOwogCi0gICAgUmVmUHRyPEpTT046Ok9iamVj
dD4gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgYXV0byBwYXJhbWV0
ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmco
ImJyb3dzaW5nQ29udGV4dEhhbmRsZSJfcywgbV90b3BsZXZlbEJyb3dzaW5nQ29udGV4dC52YWx1
ZSgpKTsKICAgICBpZiAobV9jdXJyZW50QnJvd3NpbmdDb250ZXh0KQogICAgICAgICBwYXJhbWV0
ZXJzLT5zZXRTdHJpbmcoImZyYW1lSGFuZGxlIl9zLCBtX2N1cnJlbnRCcm93c2luZ0NvbnRleHQu
dmFsdWUoKSk7CkBAIC0xNjk3LDE2ICsxNzgxLDE5IEBAIHZvaWQgU2Vzc2lvbjo6ZWxlbWVudElz
RWRpdGFibGUoY29uc3QgU3RyaW5nJiBlbGVtZW50SUQsIEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRS
CiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKFdURk1v
dmUocmVzcG9uc2UucmVzcG9uc2VPYmplY3QpKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KLSAgICAgICAgU3RyaW5nIHZhbHVlU3RyaW5nOwotICAgICAgICBpZiAoIXJlc3BvbnNl
LnJlc3BvbnNlT2JqZWN0LT5nZXRTdHJpbmcoInJlc3VsdCJfcywgdmFsdWVTdHJpbmcpKSB7CisK
KyAgICAgICAgYXV0byB2YWx1ZVN0cmluZyA9IHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRT
dHJpbmcoInJlc3VsdCJfcyk7CisgICAgICAgIGlmICghdmFsdWVTdHJpbmcpIHsKICAgICAgICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6
RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQotICAgICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHJlc3VsdFZhbHVlOwotICAgICAgICBpZiAo
IUpTT046OlZhbHVlOjpwYXJzZUpTT04odmFsdWVTdHJpbmcsIHJlc3VsdFZhbHVlKSkgeworCisg
ICAgICAgIGF1dG8gcmVzdWx0VmFsdWUgPSBKU09OOjpWYWx1ZTo6cGFyc2VKU09OKHZhbHVlU3Ry
aW5nKTsKKyAgICAgICAgaWYgKCFyZXN1bHRWYWx1ZSkgewogICAgICAgICAgICAgY29tcGxldGlv
bkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OlVu
a25vd25FcnJvcikpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CisKICAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6c3VjY2VzcyhXVEZNb3ZlKHJlc3VsdFZh
bHVlKSkpOwogICAgIH0pOwogfQpAQCAtMTczMCw4ICsxODE3LDggQEAgdm9pZCBTZXNzaW9uOjpl
bGVtZW50Q2xlYXIoY29uc3QgU3RyaW5nJiBlbGVtZW50SUQsIEZ1bmN0aW9uPHZvaWQgKENvbW1h
bmRSZXN1bHQKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAKLSAgICAg
ICAgICAgIGJvb2wgaXNFZGl0YWJsZTsKLSAgICAgICAgICAgIGlmICghcmVzdWx0LnJlc3VsdCgp
LT5hc0Jvb2xlYW4oaXNFZGl0YWJsZSkgfHwgIWlzRWRpdGFibGUpIHsKKyAgICAgICAgICAgIGF1
dG8gaXNFZGl0YWJsZSA9IHJlc3VsdC5yZXN1bHQoKS0+YXNCb29sZWFuKCk7CisgICAgICAgICAg
ICBpZiAoIWlzRWRpdGFibGUgfHwgISppc0VkaXRhYmxlKSB7CiAgICAgICAgICAgICAgICAgY29t
cGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNv
ZGU6OkludmFsaWRFbGVtZW50U3RhdGUpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgICAgICB9CkBAIC0xNzQ2LDEwICsxODMzLDEwIEBAIHZvaWQgU2Vzc2lvbjo6ZWxlbWVudENs
ZWFyKGNvbnN0IFN0cmluZyYgZWxlbWVudElELCBGdW5jdGlvbjx2b2lkIChDb21tYW5kUmVzdWx0
CiAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZh
aWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpFbGVtZW50Tm90SW50ZXJhY3RhYmxlKSk7CiAg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgUmVmUHRyPEpTT046OkFycmF5PiBhcmd1bWVudHMgPSBKU09OOjpBcnJheTo6Y3JlYXRl
KCk7CisgICAgICAgICAgICAgICAgYXV0byBhcmd1bWVudHMgPSBKU09OOjpBcnJheTo6Y3JlYXRl
KCk7CiAgICAgICAgICAgICAgICAgYXJndW1lbnRzLT5wdXNoU3RyaW5nKGNyZWF0ZUVsZW1lbnQo
ZWxlbWVudElEKS0+dG9KU09OU3RyaW5nKCkpOwogCi0gICAgICAgICAgICAgICAgUmVmUHRyPEpT
T046Ok9iamVjdD4gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAg
ICAgICAgICAgYXV0byBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICAg
ICAgICAgICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoImJyb3dzaW5nQ29udGV4dEhhbmRsZSJf
cywgbV90b3BsZXZlbEJyb3dzaW5nQ29udGV4dC52YWx1ZSgpKTsKICAgICAgICAgICAgICAgICBp
ZiAobV9jdXJyZW50QnJvd3NpbmdDb250ZXh0KQogICAgICAgICAgICAgICAgICAgICBwYXJhbWV0
ZXJzLT5zZXRTdHJpbmcoImZyYW1lSGFuZGxlIl9zLCBtX2N1cnJlbnRCcm93c2luZ0NvbnRleHQu
dmFsdWUoKSk7CkBAIC0xNzgwLDcgKzE4NjcsNyBAQCB2b2lkIFNlc3Npb246OnNldElucHV0Rmls
ZVVwbG9hZEZpbGVzKGNvbnN0IFN0cmluZyYgZWxlbWVudElELCBjb25zdCBTdHJpbmcmIHRleAog
ICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgUmVmUHRyPEpTT046OkFycmF5PiBmaWxlbmFt
ZXMgPSBKU09OOjpBcnJheTo6Y3JlYXRlKCk7CisgICAgYXV0byBmaWxlbmFtZXMgPSBKU09OOjpB
cnJheTo6Y3JlYXRlKCk7CiAgICAgZm9yIChjb25zdCBhdXRvJiBmaWxlIDogZmlsZXMpIHsKICAg
ICAgICAgaWYgKCFGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKGZpbGUpKSB7CiAgICAgICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9y
Q29kZTo6SW52YWxpZEFyZ3VtZW50KSk7CkBAIC0xNzg5LDcgKzE4NzYsNyBAQCB2b2lkIFNlc3Np
b246OnNldElucHV0RmlsZVVwbG9hZEZpbGVzKGNvbnN0IFN0cmluZyYgZWxlbWVudElELCBjb25z
dCBTdHJpbmcmIHRleAogICAgICAgICBmaWxlbmFtZXMtPnB1c2hTdHJpbmcoZmlsZSk7CiAgICAg
fQogCi0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6
Y3JlYXRlKCk7CisgICAgYXV0byBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsK
ICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoImJyb3dzaW5nQ29udGV4dEhhbmRsZSJfcywgbV90
b3BsZXZlbEJyb3dzaW5nQ29udGV4dC52YWx1ZSgpKTsKICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJp
bmcoImZyYW1lSGFuZGxlIl9zLCBtX2N1cnJlbnRCcm93c2luZ0NvbnRleHQudmFsdWVPcihlbXB0
eVN0cmluZygpKSk7CiAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJub2RlSGFuZGxlIl9zLCBl
bGVtZW50SUQpOwpAQCAtMTk4MCw5ICsyMDY3LDkgQEAgdm9pZCBTZXNzaW9uOjplbGVtZW50U2Vu
ZEtleXMoY29uc3QgU3RyaW5nJiBlbGVtZW50SUQsIGNvbnN0IFN0cmluZyYgdGV4dCwgRnVuY3QK
ICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgdGhyb3cge25hbWU6ICdFbGVtZW50Tm90SW50
ZXJhY3RhYmxlJywgbWVzc2FnZTogJ0VsZW1lbnQgaXMgbm90IGZvY3VzYWJsZS4nfTsiCiAgICAg
ICAgICAgICAgICAgICAgICJ9IjsKIAotICAgICAgICAgICAgICAgIFJlZlB0cjxKU09OOjpBcnJh
eT4gYXJndW1lbnRzID0gSlNPTjo6QXJyYXk6OmNyZWF0ZSgpOworICAgICAgICAgICAgICAgIGF1
dG8gYXJndW1lbnRzID0gSlNPTjo6QXJyYXk6OmNyZWF0ZSgpOwogICAgICAgICAgICAgICAgIGFy
Z3VtZW50cy0+cHVzaFN0cmluZyhjcmVhdGVFbGVtZW50KGVsZW1lbnRJRCktPnRvSlNPTlN0cmlu
ZygpKTsKLSAgICAgICAgICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzID0g
SlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgICAgICAgICBhdXRvIHBhcmFtZXRlcnMg
PSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMtPnNl
dFN0cmluZygiYnJvd3NpbmdDb250ZXh0SGFuZGxlIl9zLCBtX3RvcGxldmVsQnJvd3NpbmdDb250
ZXh0LnZhbHVlKCkpOwogICAgICAgICAgICAgICAgIGlmIChtX2N1cnJlbnRCcm93c2luZ0NvbnRl
eHQpCiAgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiZnJhbWVIYW5k
bGUiX3MsIG1fY3VycmVudEJyb3dzaW5nQ29udGV4dC52YWx1ZSgpKTsKQEAgLTIwNTYsNyArMjE0
Myw3IEBAIHZvaWQgU2Vzc2lvbjo6Z2V0UGFnZVNvdXJjZShGdW5jdGlvbjx2b2lkIChDb21tYW5k
UmVzdWx0JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyCiAgICAgICAgICAgICBjb21wbGV0aW9uSGFu
ZGxlcihXVEZNb3ZlKHJlc3VsdCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0g
ICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNy
ZWF0ZSgpOworICAgICAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgp
OwogICAgICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoImJyb3dzaW5nQ29udGV4dEhhbmRsZSJf
cywgbV90b3BsZXZlbEJyb3dzaW5nQ29udGV4dC52YWx1ZSgpKTsKICAgICAgICAgcGFyYW1ldGVy
cy0+c2V0U3RyaW5nKCJmdW5jdGlvbiJfcywgImZ1bmN0aW9uKCkgeyByZXR1cm4gZG9jdW1lbnQu
ZG9jdW1lbnRFbGVtZW50Lm91dGVySFRNTDsgfSJfcyk7CiAgICAgICAgIHBhcmFtZXRlcnMtPnNl
dEFycmF5KCJhcmd1bWVudHMiX3MsIEpTT046OkFycmF5OjpjcmVhdGUoKSk7CkBAIC0yMDY1LDM4
ICsyMTUyLDM5IEBAIHZvaWQgU2Vzc2lvbjo6Z2V0UGFnZVNvdXJjZShGdW5jdGlvbjx2b2lkIChD
b21tYW5kUmVzdWx0JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyCiAgICAgICAgICAgICAgICAgY29t
cGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChXVEZNb3ZlKHJlc3BvbnNlLnJlc3Bv
bnNlT2JqZWN0KSkpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIFN0cmluZyB2YWx1ZVN0cmluZzsKLSAgICAgICAgICAgIGlmICghcmVzcG9uc2Uu
cmVzcG9uc2VPYmplY3QtPmdldFN0cmluZygicmVzdWx0Il9zLCB2YWx1ZVN0cmluZykpIHsKKwor
ICAgICAgICAgICAgYXV0byB2YWx1ZVN0cmluZyA9IHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5n
ZXRTdHJpbmcoInJlc3VsdCJfcyk7CisgICAgICAgICAgICBpZiAoIXZhbHVlU3RyaW5nKSB7CiAg
ICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21t
YW5kUmVzdWx0OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikpOwogICAgICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gcmVz
dWx0VmFsdWU7Ci0gICAgICAgICAgICBpZiAoIUpTT046OlZhbHVlOjpwYXJzZUpTT04odmFsdWVT
dHJpbmcsIHJlc3VsdFZhbHVlKSkgeworCisgICAgICAgICAgICBhdXRvIHJlc3VsdFZhbHVlID0g
SlNPTjo6VmFsdWU6OnBhcnNlSlNPTih2YWx1ZVN0cmluZyk7CisgICAgICAgICAgICBpZiAoIXJl
c3VsdFZhbHVlKSB7CiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJl
c3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikpOwogICAg
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgY29tcGxl
dGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6c3VjY2VzcyhXVEZNb3ZlKHJlc3VsdFZhbHVlKSkp
OwogICAgICAgICB9KTsKICAgICB9KTsKIH0KIAotUmVmUHRyPEpTT046OlZhbHVlPiBTZXNzaW9u
OjpoYW5kbGVTY3JpcHRSZXN1bHQoUmVmUHRyPEpTT046OlZhbHVlPiYmIHJlc3VsdFZhbHVlKQor
UmVmPEpTT046OlZhbHVlPiBTZXNzaW9uOjpoYW5kbGVTY3JpcHRSZXN1bHQoUmVmPEpTT046OlZh
bHVlPiYmIHJlc3VsdFZhbHVlKQogewotICAgIFJlZlB0cjxKU09OOjpBcnJheT4gcmVzdWx0QXJy
YXk7Ci0gICAgaWYgKHJlc3VsdFZhbHVlLT5hc0FycmF5KHJlc3VsdEFycmF5KSkgewotICAgICAg
ICBSZWZQdHI8SlNPTjo6QXJyYXk+IHJldHVyblZhbHVlQXJyYXkgPSBKU09OOjpBcnJheTo6Y3Jl
YXRlKCk7CisgICAgaWYgKGF1dG8gcmVzdWx0QXJyYXkgPSByZXN1bHRWYWx1ZS0+YXNBcnJheSgp
KSB7CisgICAgICAgIGF1dG8gcmV0dXJuVmFsdWVBcnJheSA9IEpTT046OkFycmF5OjpjcmVhdGUo
KTsKICAgICAgICAgdW5zaWduZWQgcmVzdWx0QXJyYXlMZW5ndGggPSByZXN1bHRBcnJheS0+bGVu
Z3RoKCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZXN1bHRBcnJheUxlbmd0
aDsgKytpKQotICAgICAgICAgICAgcmV0dXJuVmFsdWVBcnJheS0+cHVzaFZhbHVlKGhhbmRsZVNj
cmlwdFJlc3VsdChyZXN1bHRBcnJheS0+Z2V0KGkpKSk7CisgICAgICAgICAgICByZXR1cm5WYWx1
ZUFycmF5LT5wdXNoVmFsdWUoaGFuZGxlU2NyaXB0UmVzdWx0KFdURk1vdmUocmVzdWx0QXJyYXkt
PmdldChpKSkpKTsKICAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlQXJyYXk7CiAgICAgfQogCi0g
ICAgaWYgKGF1dG8gZWxlbWVudCA9IGNyZWF0ZUVsZW1lbnQoUmVmUHRyPEpTT046OlZhbHVlPihy
ZXN1bHRWYWx1ZSkpKQotICAgICAgICByZXR1cm4gZWxlbWVudDsKKyAgICBpZiAoYXV0byBlbGVt
ZW50ID0gY3JlYXRlRWxlbWVudChyZXN1bHRWYWx1ZS5jb3B5UmVmKCkpKQorICAgICAgICByZXR1
cm4gZWxlbWVudC5yZWxlYXNlTm9uTnVsbCgpOwogCi0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4g
cmVzdWx0T2JqZWN0OwotICAgIGlmIChyZXN1bHRWYWx1ZS0+YXNPYmplY3QocmVzdWx0T2JqZWN0
KSkgewotICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiByZXR1cm5WYWx1ZU9iamVjdCA9IEpT
T046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgaWYgKGF1dG8gcmVzdWx0T2JqZWN0ID0gcmVzdWx0
VmFsdWUtPmFzT2JqZWN0KCkpIHsKKyAgICAgICAgYXV0byByZXR1cm5WYWx1ZU9iamVjdCA9IEpT
T046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgIGF1dG8gZW5kID0gcmVzdWx0T2JqZWN0LT5l
bmQoKTsKICAgICAgICAgZm9yIChhdXRvIGl0ID0gcmVzdWx0T2JqZWN0LT5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpCiAgICAgICAgICAgICByZXR1cm5WYWx1ZU9iamVjdC0+c2V0VmFsdWUoaXQt
PmtleSwgaGFuZGxlU2NyaXB0UmVzdWx0KFdURk1vdmUoaXQtPnZhbHVlKSkpOwpAQCAtMjExOCwx
OCArMjIwNiwxNyBAQCB2b2lkIFNlc3Npb246OmV4ZWN1dGVTY3JpcHQoY29uc3QgU3RyaW5nJiBz
Y3JpcHQsIFJlZlB0cjxKU09OOjpBcnJheT4mJiBhcmd1bWVudAogICAgICAgICAgICAgY29tcGxl
dGlvbkhhbmRsZXIoV1RGTW92ZShyZXN1bHQpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQotICAgICAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IGFyZ3VtZW50cyA9IEpTT046OkFycmF5
OjpjcmVhdGUoKTsKKyAgICAgICAgYXV0byBhcmd1bWVudHMgPSBKU09OOjpBcnJheTo6Y3JlYXRl
KCk7CiAgICAgICAgIHVuc2lnbmVkIGFyZ3VtZW50c0xlbmd0aCA9IGFyZ3VtZW50c0FycmF5LT5s
ZW5ndGgoKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFyZ3VtZW50c0xlbmd0
aDsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoYXV0byBhcmd1bWVudCA9IGFyZ3VtZW50c0FycmF5
LT5nZXQoaSkpIHsKLSAgICAgICAgICAgICAgICBpZiAoYXV0byBlbGVtZW50ID0gZXh0cmFjdEVs
ZW1lbnQoKmFyZ3VtZW50KSkKLSAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRzLT5wdXNoU3Ry
aW5nKGVsZW1lbnQtPnRvSlNPTlN0cmluZygpKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgICAgIGFyZ3VtZW50cy0+cHVzaFN0cmluZyhhcmd1bWVudC0+dG9KU09OU3Ry
aW5nKCkpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgYXV0byBhcmd1bWVudCA9IGFyZ3Vt
ZW50c0FycmF5LT5nZXQoaSk7CisgICAgICAgICAgICBpZiAoYXV0byBlbGVtZW50ID0gZXh0cmFj
dEVsZW1lbnQoYXJndW1lbnQpKQorICAgICAgICAgICAgICAgIGFyZ3VtZW50cy0+cHVzaFN0cmlu
ZyhlbGVtZW50LT50b0pTT05TdHJpbmcoKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgYXJndW1lbnRzLT5wdXNoU3RyaW5nKGFyZ3VtZW50LT50b0pTT05TdHJpbmcoKSk7CiAg
ICAgICAgIH0KIAotICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzID0gSlNP
Tjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgYXV0byBwYXJhbWV0ZXJzID0gSlNPTjo6T2Jq
ZWN0OjpjcmVhdGUoKTsKICAgICAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJicm93c2luZ0Nv
bnRleHRIYW5kbGUiX3MsIG1fdG9wbGV2ZWxCcm93c2luZ0NvbnRleHQudmFsdWUoKSk7CiAgICAg
ICAgIGlmIChtX2N1cnJlbnRCcm93c2luZ0NvbnRleHQpCiAgICAgICAgICAgICBwYXJhbWV0ZXJz
LT5zZXRTdHJpbmcoImZyYW1lSGFuZGxlIl9zLCBtX2N1cnJlbnRCcm93c2luZ0NvbnRleHQudmFs
dWUoKSk7CkBAIC0yMTQ4LDE3ICsyMjM1LDIwIEBAIHZvaWQgU2Vzc2lvbjo6ZXhlY3V0ZVNjcmlw
dChjb25zdCBTdHJpbmcmIHNjcmlwdCwgUmVmUHRyPEpTT046OkFycmF5PiYmIGFyZ3VtZW50CiAg
ICAgICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUocmVzdWx0KSk7CiAg
ICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgU3RyaW5n
IHZhbHVlU3RyaW5nOwotICAgICAgICAgICAgaWYgKCFyZXNwb25zZS5yZXNwb25zZU9iamVjdC0+
Z2V0U3RyaW5nKCJyZXN1bHQiX3MsIHZhbHVlU3RyaW5nKSkgeworCisgICAgICAgICAgICBhdXRv
IHZhbHVlU3RyaW5nID0gcmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdldFN0cmluZygicmVzdWx0
Il9zKTsKKyAgICAgICAgICAgIGlmICghdmFsdWVTdHJpbmcpIHsKICAgICAgICAgICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9y
Q29kZTo6VW5rbm93bkVycm9yKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAg
ICAgfQotICAgICAgICAgICAgUmVmUHRyPEpTT046OlZhbHVlPiByZXN1bHRWYWx1ZTsKLSAgICAg
ICAgICAgIGlmICghSlNPTjo6VmFsdWU6OnBhcnNlSlNPTih2YWx1ZVN0cmluZywgcmVzdWx0VmFs
dWUpKSB7CisKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0VmFsdWUgPSBKU09OOjpWYWx1ZTo6cGFy
c2VKU09OKHZhbHVlU3RyaW5nKTsKKyAgICAgICAgICAgIGlmICghcmVzdWx0VmFsdWUpIHsKICAg
ICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1h
bmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVycm9yKSk7CiAgICAgICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFu
ZFJlc3VsdDo6c3VjY2VzcyhoYW5kbGVTY3JpcHRSZXN1bHQoV1RGTW92ZShyZXN1bHRWYWx1ZSkp
KSk7CisKKyAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OnN1Y2Nl
c3MoaGFuZGxlU2NyaXB0UmVzdWx0KHJlc3VsdFZhbHVlLnJlbGVhc2VOb25OdWxsKCkpKSk7CiAg
ICAgICAgIH0pOwogICAgIH0pOwogfQpAQCAtMjE4MSw5ICsyMjcxLDkgQEAgc3RhdGljIFN0cmlu
ZyBtb3VzZUJ1dHRvbkZvckF1dG9tYXRpb24oTW91c2VCdXR0b24gYnV0dG9uKQogCiB2b2lkIFNl
c3Npb246OnBlcmZvcm1Nb3VzZUludGVyYWN0aW9uKGludCB4LCBpbnQgeSwgTW91c2VCdXR0b24g
YnV0dG9uLCBNb3VzZUludGVyYWN0aW9uIGludGVyYWN0aW9uLCBGdW5jdGlvbjx2b2lkIChDb21t
YW5kUmVzdWx0JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIFJlZlB0cjxKU09OOjpP
YmplY3Q+IHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGF1dG8gcGFy
YW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgcGFyYW1ldGVycy0+c2V0U3Ry
aW5nKCJoYW5kbGUiX3MsIG1fdG9wbGV2ZWxCcm93c2luZ0NvbnRleHQudmFsdWUoKSk7Ci0gICAg
UmVmUHRyPEpTT046Ok9iamVjdD4gcG9zaXRpb24gPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwor
ICAgIGF1dG8gcG9zaXRpb24gPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgIHBvc2l0aW9u
LT5zZXRJbnRlZ2VyKCJ4Il9zLCB4KTsKICAgICBwb3NpdGlvbi0+c2V0SW50ZWdlcigieSJfcywg
eSk7CiAgICAgcGFyYW1ldGVycy0+c2V0T2JqZWN0KCJwb3NpdGlvbiJfcywgV1RGTW92ZShwb3Np
dGlvbikpOwpAQCAtMjIxNywxMSArMjMwNywxMSBAQCB2b2lkIFNlc3Npb246OnBlcmZvcm1Nb3Vz
ZUludGVyYWN0aW9uKGludCB4LCBpbnQgeSwgTW91c2VCdXR0b24gYnV0dG9uLCBNb3VzZUludAog
CiB2b2lkIFNlc3Npb246OnBlcmZvcm1LZXlib2FyZEludGVyYWN0aW9ucyhWZWN0b3I8S2V5Ym9h
cmRJbnRlcmFjdGlvbj4mJiBpbnRlcmFjdGlvbnMsIEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSZXN1
bHQmJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4g
cGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgYXV0byBwYXJhbWV0ZXJz
ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoImhh
bmRsZSJfcywgbV90b3BsZXZlbEJyb3dzaW5nQ29udGV4dC52YWx1ZSgpKTsKLSAgICBSZWZQdHI8
SlNPTjo6QXJyYXk+IGludGVyYWN0aW9uc0FycmF5ID0gSlNPTjo6QXJyYXk6OmNyZWF0ZSgpOwor
ICAgIGF1dG8gaW50ZXJhY3Rpb25zQXJyYXkgPSBKU09OOjpBcnJheTo6Y3JlYXRlKCk7CiAgICAg
Zm9yIChjb25zdCBhdXRvJiBpbnRlcmFjdGlvbiA6IGludGVyYWN0aW9ucykgewotICAgICAgICBS
ZWZQdHI8SlNPTjo6T2JqZWN0PiBpbnRlcmFjdGlvbk9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3Jl
YXRlKCk7CisgICAgICAgIGF1dG8gaW50ZXJhY3Rpb25PYmplY3QgPSBKU09OOjpPYmplY3Q6OmNy
ZWF0ZSgpOwogICAgICAgICBzd2l0Y2ggKGludGVyYWN0aW9uLnR5cGUpIHsKICAgICAgICAgY2Fz
ZSBLZXlib2FyZEludGVyYWN0aW9uVHlwZTo6S2V5UHJlc3M6CiAgICAgICAgICAgICBpbnRlcmFj
dGlvbk9iamVjdC0+c2V0U3RyaW5nKCJ0eXBlIl9zLCAiS2V5UHJlc3MiX3MpOwpAQCAtMjI1Miwz
NyArMjM0Miw0MyBAQCB2b2lkIFNlc3Npb246OnBlcmZvcm1LZXlib2FyZEludGVyYWN0aW9ucyhW
ZWN0b3I8S2V5Ym9hcmRJbnRlcmFjdGlvbj4mJiBpbnRlcmFjdAogc3RhdGljIE9wdGlvbmFsPFNl
c3Npb246OkNvb2tpZT4gcGFyc2VBdXRvbWF0aW9uQ29va2llKGNvbnN0IEpTT046Ok9iamVjdCYg
Y29va2llT2JqZWN0KQogewogICAgIFNlc3Npb246OkNvb2tpZSBjb29raWU7Ci0gICAgaWYgKCFj
b29raWVPYmplY3QuZ2V0U3RyaW5nKCJuYW1lIl9zLCBjb29raWUubmFtZSkpCi0gICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgaWYgKCFjb29raWVPYmplY3QuZ2V0U3RyaW5nKCJ2YWx1
ZSJfcywgY29va2llLnZhbHVlKSkKKworICAgIGNvb2tpZS5uYW1lID0gY29va2llT2JqZWN0Lmdl
dFN0cmluZygibmFtZSJfcyk7CisgICAgaWYgKCFjb29raWUubmFtZSkKICAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKIAotICAgIFN0cmluZyBwYXRoOwotICAgIGlmIChjb29raWVPYmplY3Qu
Z2V0U3RyaW5nKCJwYXRoIl9zLCBwYXRoKSkKKyAgICBjb29raWUudmFsdWUgPSBjb29raWVPYmpl
Y3QuZ2V0U3RyaW5nKCJ2YWx1ZSJfcyk7CisgICAgaWYgKCFjb29raWUudmFsdWUpCisgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBhdXRvIHBhdGggPSBjb29raWVPYmplY3QuZ2V0
U3RyaW5nKCJwYXRoIl9zKTsKKyAgICBpZiAoISFwYXRoKQogICAgICAgICBjb29raWUucGF0aCA9
IHBhdGg7Ci0gICAgU3RyaW5nIGRvbWFpbjsKLSAgICBpZiAoY29va2llT2JqZWN0LmdldFN0cmlu
ZygiZG9tYWluIl9zLCBkb21haW4pKQorCisgICAgYXV0byBkb21haW4gPSBjb29raWVPYmplY3Qu
Z2V0U3RyaW5nKCJkb21haW4iX3MpOworICAgIGlmICghIWRvbWFpbikKICAgICAgICAgY29va2ll
LmRvbWFpbiA9IGRvbWFpbjsKLSAgICBib29sIHNlY3VyZTsKLSAgICBpZiAoY29va2llT2JqZWN0
LmdldEJvb2xlYW4oInNlY3VyZSJfcywgc2VjdXJlKSkKLSAgICAgICAgY29va2llLnNlY3VyZSA9
IHNlY3VyZTsKLSAgICBib29sIGh0dHBPbmx5OwotICAgIGlmIChjb29raWVPYmplY3QuZ2V0Qm9v
bGVhbigiaHR0cE9ubHkiX3MsIGh0dHBPbmx5KSkKLSAgICAgICAgY29va2llLmh0dHBPbmx5ID0g
aHR0cE9ubHk7Ci0gICAgYm9vbCBzZXNzaW9uID0gZmFsc2U7Ci0gICAgY29va2llT2JqZWN0Lmdl
dEJvb2xlYW4oInNlc3Npb24iX3MsIHNlc3Npb24pOworCisgICAgYXV0byBzZWN1cmUgPSBjb29r
aWVPYmplY3QuZ2V0Qm9vbGVhbigic2VjdXJlIl9zKTsKKyAgICBpZiAoc2VjdXJlKQorICAgICAg
ICBjb29raWUuc2VjdXJlID0gKnNlY3VyZTsKKworICAgIGF1dG8gaHR0cE9ubHkgPSBjb29raWVP
YmplY3QuZ2V0Qm9vbGVhbigiaHR0cE9ubHkiX3MpOworICAgIGlmIChodHRwT25seSkKKyAgICAg
ICAgY29va2llLmh0dHBPbmx5ID0gKmh0dHBPbmx5OworCisgICAgYXV0byBzZXNzaW9uID0gY29v
a2llT2JqZWN0LmdldEJvb2xlYW4oInNlc3Npb24iX3MpOwogICAgIGlmICghc2Vzc2lvbikgewot
ICAgICAgICBkb3VibGUgZXhwaXJ5OwotICAgICAgICBpZiAoY29va2llT2JqZWN0LmdldERvdWJs
ZSgiZXhwaXJlcyJfcywgZXhwaXJ5KSkKLSAgICAgICAgICAgIGNvb2tpZS5leHBpcnkgPSBleHBp
cnk7CisgICAgICAgIGlmIChhdXRvIGV4cGlyeSA9IGNvb2tpZU9iamVjdC5nZXREb3VibGUoImV4
cGlyZXMiX3MpKQorICAgICAgICAgICAgY29va2llLmV4cGlyeSA9ICpleHBpcnk7CiAgICAgfQog
CiAgICAgcmV0dXJuIGNvb2tpZTsKIH0KIAotc3RhdGljIFJlZlB0cjxKU09OOjpPYmplY3Q+IGJ1
aWx0QXV0b21hdGlvbkNvb2tpZShjb25zdCBTZXNzaW9uOjpDb29raWUmIGNvb2tpZSkKK3N0YXRp
YyBSZWY8SlNPTjo6T2JqZWN0PiBidWlsdEF1dG9tYXRpb25Db29raWUoY29uc3QgU2Vzc2lvbjo6
Q29va2llJiBjb29raWUpCiB7Ci0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gY29va2llT2JqZWN0
ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBhdXRvIGNvb2tpZU9iamVjdCA9IEpTT046
Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgY29va2llT2JqZWN0LT5zZXRTdHJpbmcoIm5hbWUiX3Ms
IGNvb2tpZS5uYW1lKTsKICAgICBjb29raWVPYmplY3QtPnNldFN0cmluZygidmFsdWUiX3MsIGNv
b2tpZS52YWx1ZSk7CiAgICAgY29va2llT2JqZWN0LT5zZXRTdHJpbmcoInBhdGgiX3MsIGNvb2tp
ZS5wYXRoLnZhbHVlT3IoIi8iKSk7CkBAIC0yMjk0LDkgKzIzOTAsOSBAQCBzdGF0aWMgUmVmUHRy
PEpTT046Ok9iamVjdD4gYnVpbHRBdXRvbWF0aW9uQ29va2llKGNvbnN0IFNlc3Npb246OkNvb2tp
ZSYgY29va2llKQogICAgIHJldHVybiBjb29raWVPYmplY3Q7CiB9CiAKLXN0YXRpYyBSZWZQdHI8
SlNPTjo6T2JqZWN0PiBzZXJpYWxpemVDb29raWUoY29uc3QgU2Vzc2lvbjo6Q29va2llJiBjb29r
aWUpCitzdGF0aWMgUmVmPEpTT046Ok9iamVjdD4gc2VyaWFsaXplQ29va2llKGNvbnN0IFNlc3Np
b246OkNvb2tpZSYgY29va2llKQogewotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IGNvb2tpZU9i
amVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgYXV0byBjb29raWVPYmplY3QgPSBK
U09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgIGNvb2tpZU9iamVjdC0+c2V0U3RyaW5nKCJuYW1l
Il9zLCBjb29raWUubmFtZSk7CiAgICAgY29va2llT2JqZWN0LT5zZXRTdHJpbmcoInZhbHVlIl9z
LCBjb29raWUudmFsdWUpOwogICAgIGlmIChjb29raWUucGF0aCkKQEAgLTIzMjUsMjMgKzI0MjEs
MjQgQEAgdm9pZCBTZXNzaW9uOjpnZXRBbGxDb29raWVzKEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRS
ZXN1bHQmJik+JiYgY29tcGxldGlvbkhhbmRsZXIKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQogCi0gICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnMgPSBKU09OOjpP
YmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6
OmNyZWF0ZSgpOwogICAgICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoImJyb3dzaW5nQ29udGV4
dEhhbmRsZSJfcywgbV90b3BsZXZlbEJyb3dzaW5nQ29udGV4dC52YWx1ZSgpKTsKICAgICAgICAg
bV9ob3N0LT5zZW5kQ29tbWFuZFRvQmFja2VuZCgiZ2V0QWxsQ29va2llcyJfcywgV1RGTW92ZShw
YXJhbWV0ZXJzKSwgW3Byb3RlY3RlZFRoaXMsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcildKFNlc3Npb25Ib3N0OjpDb21tYW5kUmVzcG9uc2UmJiByZXNwb25z
ZSkgbXV0YWJsZSB7CiAgICAgICAgICAgICBpZiAocmVzcG9uc2UuaXNFcnJvciB8fCAhcmVzcG9u
c2UucmVzcG9uc2VPYmplY3QpIHsKICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihD
b21tYW5kUmVzdWx0OjpmYWlsKFdURk1vdmUocmVzcG9uc2UucmVzcG9uc2VPYmplY3QpKSk7CiAg
ICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgUmVmUHRy
PEpTT046OkFycmF5PiBjb29raWVzQXJyYXk7Ci0gICAgICAgICAgICBpZiAoIXJlc3BvbnNlLnJl
c3BvbnNlT2JqZWN0LT5nZXRBcnJheSgiY29va2llcyJfcywgY29va2llc0FycmF5KSkgeworCisg
ICAgICAgICAgICBhdXRvIGNvb2tpZXNBcnJheSA9IHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5n
ZXRBcnJheSgiY29va2llcyJfcyk7CisgICAgICAgICAgICBpZiAoIWNvb2tpZXNBcnJheSkgewog
ICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29t
bWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKICAgICAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IGNv
b2tpZXMgPSBKU09OOjpBcnJheTo6Y3JlYXRlKCk7CisKKyAgICAgICAgICAgIGF1dG8gY29va2ll
cyA9IEpTT046OkFycmF5OjpjcmVhdGUoKTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBjb29raWVzQXJyYXktPmxlbmd0aCgpOyArK2kpIHsKLSAgICAgICAgICAgICAgICBS
ZWZQdHI8SlNPTjo6VmFsdWU+IGNvb2tpZVZhbHVlID0gY29va2llc0FycmF5LT5nZXQoaSk7Ci0g
ICAgICAgICAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gY29va2llT2JqZWN0OwotICAgICAg
ICAgICAgICAgIGlmICghY29va2llVmFsdWUtPmFzT2JqZWN0KGNvb2tpZU9iamVjdCkpIHsKKyAg
ICAgICAgICAgICAgICBhdXRvIGNvb2tpZU9iamVjdCA9IGNvb2tpZXNBcnJheS0+Z2V0KGkpLT5h
c09iamVjdCgpOworICAgICAgICAgICAgICAgIGlmICghY29va2llT2JqZWN0KSB7CiAgICAgICAg
ICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFu
ZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICAgICAgICAgIH0KQEAgLTIzNjUsMTQgKzI0NjIsMTEgQEAgdm9pZCBT
ZXNzaW9uOjpnZXROYW1lZENvb2tpZShjb25zdCBTdHJpbmcmIG5hbWUsIEZ1bmN0aW9uPHZvaWQg
KENvbW1hbmRSZXN1bHQmJikKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUo
cmVzdWx0KSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgUmVmUHRy
PEpTT046OkFycmF5PiBjb29raWVzQXJyYXk7Ci0gICAgICAgIHJlc3VsdC5yZXN1bHQoKS0+YXNB
cnJheShjb29raWVzQXJyYXkpOworCisgICAgICAgIGF1dG8gY29va2llc0FycmF5ID0gcmVzdWx0
LnJlc3VsdCgpLT5hc0FycmF5KCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBj
b29raWVzQXJyYXktPmxlbmd0aCgpOyArK2kpIHsKLSAgICAgICAgICAgIFJlZlB0cjxKU09OOjpW
YWx1ZT4gY29va2llVmFsdWUgPSBjb29raWVzQXJyYXktPmdldChpKTsKLSAgICAgICAgICAgIFJl
ZlB0cjxKU09OOjpPYmplY3Q+IGNvb2tpZU9iamVjdDsKLSAgICAgICAgICAgIGNvb2tpZVZhbHVl
LT5hc09iamVjdChjb29raWVPYmplY3QpOwotICAgICAgICAgICAgU3RyaW5nIGNvb2tpZU5hbWU7
Ci0gICAgICAgICAgICBjb29raWVPYmplY3QtPmdldFN0cmluZygibmFtZSJfcywgY29va2llTmFt
ZSk7CisgICAgICAgICAgICBhdXRvIGNvb2tpZU9iamVjdCA9IGNvb2tpZXNBcnJheS0+Z2V0KGkp
LT5hc09iamVjdCgpOworICAgICAgICAgICAgYXV0byBjb29raWVOYW1lID0gY29va2llT2JqZWN0
LT5nZXRTdHJpbmcoIm5hbWUiX3MpOwogICAgICAgICAgICAgaWYgKGNvb2tpZU5hbWUgPT0gbmFt
ZSkgewogICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OnN1
Y2Nlc3MoV1RGTW92ZShjb29raWVPYmplY3QpKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwpA
QCAtMjM5NCw3ICsyNDg4LDcgQEAgdm9pZCBTZXNzaW9uOjphZGRDb29raWUoY29uc3QgQ29va2ll
JiBjb29raWUsIEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSZXN1bHQmJik+JiYKICAgICAgICAgICAg
IGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUocmVzdWx0KSk7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KLSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVycyA9IEpT
T046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTT046Ok9i
amVjdDo6Y3JlYXRlKCk7CiAgICAgICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiYnJvd3NpbmdD
b250ZXh0SGFuZGxlIl9zLCBtX3RvcGxldmVsQnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwogICAg
ICAgICBwYXJhbWV0ZXJzLT5zZXRPYmplY3QoImNvb2tpZSJfcywgV1RGTW92ZShjb29raWUpKTsK
ICAgICAgICAgbV9ob3N0LT5zZW5kQ29tbWFuZFRvQmFja2VuZCgiYWRkU2luZ2xlQ29va2llIl9z
LCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBbcHJvdGVjdGVkVGhpcywgY29tcGxldGlvbkhhbmRsZXIg
PSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oU2Vzc2lvbkhvc3Q6OkNvbW1hbmRSZXNwb25z
ZSYmIHJlc3BvbnNlKSB7CkBAIC0yNDE5LDcgKzI1MTMsNyBAQCB2b2lkIFNlc3Npb246OmRlbGV0
ZUNvb2tpZShjb25zdCBTdHJpbmcmIG5hbWUsIEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSZXN1bHQm
Jik+JgogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShyZXN1bHQpKTsKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0
PiBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgYXV0byBwYXJh
bWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICAgcGFyYW1ldGVycy0+c2V0
U3RyaW5nKCJicm93c2luZ0NvbnRleHRIYW5kbGUiX3MsIG1fdG9wbGV2ZWxCcm93c2luZ0NvbnRl
eHQudmFsdWUoKSk7CiAgICAgICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiY29va2llTmFtZSJf
cywgbmFtZSk7CiAgICAgICAgIG1faG9zdC0+c2VuZENvbW1hbmRUb0JhY2tlbmQoImRlbGV0ZVNp
bmdsZUNvb2tpZSJfcywgV1RGTW92ZShwYXJhbWV0ZXJzKSwgW3Byb3RlY3RlZFRoaXMsIGNvbXBs
ZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKFNlc3Npb25Ib3N0OjpD
b21tYW5kUmVzcG9uc2UmJiByZXNwb25zZSkgewpAQCAtMjQ0NCw3ICsyNTM4LDcgQEAgdm9pZCBT
ZXNzaW9uOjpkZWxldGVBbGxDb29raWVzKEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSZXN1bHQmJik+
JiYgY29tcGxldGlvbkhhbmQKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUo
cmVzdWx0KSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgUmVmUHRy
PEpTT046Ok9iamVjdD4gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAg
ICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgIHBh
cmFtZXRlcnMtPnNldFN0cmluZygiYnJvd3NpbmdDb250ZXh0SGFuZGxlIl9zLCBtX3RvcGxldmVs
QnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwogICAgICAgICBtX2hvc3QtPnNlbmRDb21tYW5kVG9C
YWNrZW5kKCJkZWxldGVBbGxDb29raWVzIl9zLCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBbcHJvdGVj
dGVkVGhpcywgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0o
U2Vzc2lvbkhvc3Q6OkNvbW1hbmRSZXNwb25zZSYmIHJlc3BvbnNlKSB7CiAgICAgICAgICAgICBp
ZiAocmVzcG9uc2UuaXNFcnJvcikgewpAQCAtMjUxNywyMyArMjYxMSwyMyBAQCB2b2lkIFNlc3Np
b246OnBlcmZvcm1BY3Rpb25zKFZlY3RvcjxWZWN0b3I8QWN0aW9uPj4mJiBhY3Rpb25zQnlUaWNr
LCBGdW5jdGlvbjx2bwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAg
UmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7
CisgICAgICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAg
ICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiaGFuZGxlIl9zLCBtX3RvcGxldmVsQnJvd3NpbmdD
b250ZXh0LnZhbHVlKCkpOwogICAgICAgICBpZiAobV9jdXJyZW50QnJvd3NpbmdDb250ZXh0KQog
ICAgICAgICAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJmcmFtZUhhbmRsZSJfcywgbV9jdXJy
ZW50QnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwotICAgICAgICBSZWZQdHI8SlNPTjo6QXJyYXk+
IGlucHV0U291cmNlcyA9IEpTT046OkFycmF5OjpjcmVhdGUoKTsKKyAgICAgICAgYXV0byBpbnB1
dFNvdXJjZXMgPSBKU09OOjpBcnJheTo6Y3JlYXRlKCk7CiAgICAgICAgIGZvciAoY29uc3QgYXV0
byYgaW5wdXRTb3VyY2UgOiBtX2FjdGl2ZUlucHV0U291cmNlcykgewotICAgICAgICAgICAgUmVm
UHRyPEpTT046Ok9iamVjdD4gaW5wdXRTb3VyY2VPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0
ZSgpOworICAgICAgICAgICAgYXV0byBpbnB1dFNvdXJjZU9iamVjdCA9IEpTT046Ok9iamVjdDo6
Y3JlYXRlKCk7CiAgICAgICAgICAgICBpbnB1dFNvdXJjZU9iamVjdC0+c2V0U3RyaW5nKCJzb3Vy
Y2VJZCJfcywgaW5wdXRTb3VyY2Uua2V5KTsKICAgICAgICAgICAgIGlucHV0U291cmNlT2JqZWN0
LT5zZXRTdHJpbmcoInNvdXJjZVR5cGUiX3MsIGF1dG9tYXRpb25Tb3VyY2VUeXBlKGlucHV0U291
cmNlLnZhbHVlLnR5cGUpKTsKICAgICAgICAgICAgIGlucHV0U291cmNlcy0+cHVzaE9iamVjdChX
VEZNb3ZlKGlucHV0U291cmNlT2JqZWN0KSk7CiAgICAgICAgIH0KICAgICAgICAgcGFyYW1ldGVy
cy0+c2V0QXJyYXkoImlucHV0U291cmNlcyJfcywgV1RGTW92ZShpbnB1dFNvdXJjZXMpKTsKLSAg
ICAgICAgUmVmUHRyPEpTT046OkFycmF5PiBzdGVwcyA9IEpTT046OkFycmF5OjpjcmVhdGUoKTsK
KyAgICAgICAgYXV0byBzdGVwcyA9IEpTT046OkFycmF5OjpjcmVhdGUoKTsKICAgICAgICAgZm9y
IChjb25zdCBhdXRvJiB0aWNrIDogYWN0aW9uc0J5VGljaykgewotICAgICAgICAgICAgUmVmUHRy
PEpTT046OkFycmF5PiBzdGF0ZXMgPSBKU09OOjpBcnJheTo6Y3JlYXRlKCk7CisgICAgICAgICAg
ICBhdXRvIHN0YXRlcyA9IEpTT046OkFycmF5OjpjcmVhdGUoKTsKICAgICAgICAgICAgIGZvciAo
Y29uc3QgYXV0byYgYWN0aW9uIDogdGljaykgewotICAgICAgICAgICAgICAgIFJlZlB0cjxKU09O
OjpPYmplY3Q+IHN0YXRlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgICAgICAg
ICBhdXRvIHN0YXRlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICAgICAgICAgICBh
dXRvJiBjdXJyZW50U3RhdGUgPSBpbnB1dFNvdXJjZVN0YXRlKGFjdGlvbi5pZCk7CiAgICAgICAg
ICAgICAgICAgc3RhdGUtPnNldFN0cmluZygic291cmNlSWQiX3MsIGFjdGlvbi5pZCk7CiAgICAg
ICAgICAgICAgICAgc3dpdGNoIChhY3Rpb24udHlwZSkgewpAQCAtMjU1MSw3ICsyNjQ1LDcgQEAg
dm9pZCBTZXNzaW9uOjpwZXJmb3JtQWN0aW9ucyhWZWN0b3I8VmVjdG9yPEFjdGlvbj4+JiYgYWN0
aW9uc0J5VGljaywgRnVuY3Rpb248dm8KICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgICAgICBjYXNlIEFjdGlvbjo6U3VidHlwZTo6UG9pbnRlck1vdmU6IHsK
ICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5zZXRTdHJpbmcoIm9yaWdpbiJfcywgYXV0
b21hdGlvbk9yaWdpblR5cGUoYWN0aW9uLm9yaWdpbi0+dHlwZSkpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gbG9jYXRpb24gPSBKU09OOjpPYmplY3Q6OmNy
ZWF0ZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBsb2NhdGlvbiA9IEpTT046Ok9i
amVjdDo6Y3JlYXRlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbi0+c2V0SW50
ZWdlcigieCJfcywgYWN0aW9uLngudmFsdWUoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBs
b2NhdGlvbi0+c2V0SW50ZWdlcigieSJfcywgYWN0aW9uLnkudmFsdWUoKSk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBzdGF0ZS0+c2V0T2JqZWN0KCJsb2NhdGlvbiJfcywgV1RGTW92ZShsb2Nh
dGlvbikpOwpAQCAtMjYxNyw3ICsyNzExLDcgQEAgdm9pZCBTZXNzaW9uOjpwZXJmb3JtQWN0aW9u
cyhWZWN0b3I8VmVjdG9yPEFjdGlvbj4+JiYgYWN0aW9uc0J5VGljaywgRnVuY3Rpb248dm8KICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgc3RhdGVzLT5wdXNoT2JqZWN0KFdURk1v
dmUoc3RhdGUpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFJlZlB0cjxKU09OOjpPYmpl
Y3Q+IHN0ZXBTdGF0ZXMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICAgICAgYXV0
byBzdGVwU3RhdGVzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICAgICAgIHN0ZXBT
dGF0ZXMtPnNldEFycmF5KCJzdGF0ZXMiX3MsIFdURk1vdmUoc3RhdGVzKSk7CiAgICAgICAgICAg
ICBzdGVwcy0+cHVzaE9iamVjdChXVEZNb3ZlKHN0ZXBTdGF0ZXMpKTsKICAgICAgICAgfQpAQCAt
MjY0Myw3ICsyNzM3LDcgQEAgdm9pZCBTZXNzaW9uOjpyZWxlYXNlQWN0aW9ucyhGdW5jdGlvbjx2
b2lkIChDb21tYW5kUmVzdWx0JiYpPiYmIGNvbXBsZXRpb25IYW5kbGUKICAgICBtX2FjdGl2ZUlu
cHV0U291cmNlcy5jbGVhcigpOwogICAgIG1faW5wdXRTdGF0ZVRhYmxlLmNsZWFyKCk7CiAKLSAg
ICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUo
KTsKKyAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgIHBh
cmFtZXRlcnMtPnNldFN0cmluZygiaGFuZGxlIl9zLCBtX3RvcGxldmVsQnJvd3NpbmdDb250ZXh0
LnZhbHVlKCkpOwogICAgIG1faG9zdC0+c2VuZENvbW1hbmRUb0JhY2tlbmQoImNhbmNlbEludGVy
YWN0aW9uU2VxdWVuY2UiX3MsIFdURk1vdmUocGFyYW1ldGVycyksIFtwcm90ZWN0ZWRUaGlzID0g
bWFrZVJlZigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcildKFNlc3Npb25Ib3N0OjpDb21tYW5kUmVzcG9uc2UmJiByZXNwb25zZSkgewogICAgICAg
ICBpZiAocmVzcG9uc2UuaXNFcnJvcikgewpAQCAtMjY2MSw3ICsyNzU1LDcgQEAgdm9pZCBTZXNz
aW9uOjpkaXNtaXNzQWxlcnQoRnVuY3Rpb248dm9pZCAoQ29tbWFuZFJlc3VsdCYmKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFJlZlB0cjxKU09O
OjpPYmplY3Q+IHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGF1dG8g
cGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgcGFyYW1ldGVycy0+c2V0
U3RyaW5nKCJicm93c2luZ0NvbnRleHRIYW5kbGUiX3MsIG1fdG9wbGV2ZWxCcm93c2luZ0NvbnRl
eHQudmFsdWUoKSk7CiAgICAgbV9ob3N0LT5zZW5kQ29tbWFuZFRvQmFja2VuZCgiZGlzbWlzc0N1
cnJlbnRKYXZhU2NyaXB0RGlhbG9nIl9zLCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBbcHJvdGVjdGVk
VGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxl
dGlvbkhhbmRsZXIpXShTZXNzaW9uSG9zdDo6Q29tbWFuZFJlc3BvbnNlJiYgcmVzcG9uc2UpIHsK
ICAgICAgICAgaWYgKHJlc3BvbnNlLmlzRXJyb3IpIHsKQEAgLTI2NzksNyArMjc3Myw3IEBAIHZv
aWQgU2Vzc2lvbjo6YWNjZXB0QWxlcnQoRnVuY3Rpb248dm9pZCAoQ29tbWFuZFJlc3VsdCYmKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFJlZlB0
cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAg
IGF1dG8gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgcGFyYW1ldGVy
cy0+c2V0U3RyaW5nKCJicm93c2luZ0NvbnRleHRIYW5kbGUiX3MsIG1fdG9wbGV2ZWxCcm93c2lu
Z0NvbnRleHQudmFsdWUoKSk7CiAgICAgbV9ob3N0LT5zZW5kQ29tbWFuZFRvQmFja2VuZCgiYWNj
ZXB0Q3VycmVudEphdmFTY3JpcHREaWFsb2ciX3MsIFdURk1vdmUocGFyYW1ldGVycyksIFtwcm90
ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcildKFNlc3Npb25Ib3N0OjpDb21tYW5kUmVzcG9uc2UmJiByZXNwb25z
ZSkgewogICAgICAgICBpZiAocmVzcG9uc2UuaXNFcnJvcikgewpAQCAtMjY5NywxOCArMjc5MSwy
MCBAQCB2b2lkIFNlc3Npb246OmdldEFsZXJ0VGV4dChGdW5jdGlvbjx2b2lkIChDb21tYW5kUmVz
dWx0JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRl
KCk7CisgICAgYXV0byBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICBw
YXJhbWV0ZXJzLT5zZXRTdHJpbmcoImJyb3dzaW5nQ29udGV4dEhhbmRsZSJfcywgbV90b3BsZXZl
bEJyb3dzaW5nQ29udGV4dC52YWx1ZSgpKTsKICAgICBtX2hvc3QtPnNlbmRDb21tYW5kVG9CYWNr
ZW5kKCJtZXNzYWdlT2ZDdXJyZW50SmF2YVNjcmlwdERpYWxvZyJfcywgV1RGTW92ZShwYXJhbWV0
ZXJzKSwgW3Byb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY29tcGxldGlvbkhhbmRsZXIg
PSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oU2Vzc2lvbkhvc3Q6OkNvbW1hbmRSZXNwb25z
ZSYmIHJlc3BvbnNlKSB7CiAgICAgICAgIGlmIChyZXNwb25zZS5pc0Vycm9yIHx8ICFyZXNwb25z
ZS5yZXNwb25zZU9iamVjdCkgewogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFu
ZFJlc3VsdDo6ZmFpbChXVEZNb3ZlKHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0KSkpOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIFN0cmluZyB2YWx1ZVN0cmluZzsKLSAg
ICAgICAgaWYgKCFyZXNwb25zZS5yZXNwb25zZU9iamVjdC0+Z2V0U3RyaW5nKCJtZXNzYWdlIl9z
LCB2YWx1ZVN0cmluZykpIHsKKworICAgICAgICBhdXRvIHZhbHVlU3RyaW5nID0gcmVzcG9uc2Uu
cmVzcG9uc2VPYmplY3QtPmdldFN0cmluZygibWVzc2FnZSJfcyk7CisgICAgICAgIGlmICghdmFs
dWVTdHJpbmcpIHsKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6
OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQorCiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1h
bmRSZXN1bHQ6OnN1Y2Nlc3MoSlNPTjo6VmFsdWU6OmNyZWF0ZSh2YWx1ZVN0cmluZykpKTsKICAg
ICB9KTsKIH0KQEAgLTI3MjAsNyArMjgxNiw3IEBAIHZvaWQgU2Vzc2lvbjo6c2VuZEFsZXJ0VGV4
dChjb25zdCBTdHJpbmcmIHRleHQsIEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSZXN1bHQmJik+CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0
ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU09O
OjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiYnJvd3NpbmdD
b250ZXh0SGFuZGxlIl9zLCBtX3RvcGxldmVsQnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwogICAg
IHBhcmFtZXRlcnMtPnNldFN0cmluZygidXNlcklucHV0Il9zLCB0ZXh0KTsKICAgICBtX2hvc3Qt
PnNlbmRDb21tYW5kVG9CYWNrZW5kKCJzZXRVc2VySW5wdXRGb3JDdXJyZW50SmF2YVNjcmlwdFBy
b21wdCJfcywgV1RGTW92ZShwYXJhbWV0ZXJzKSwgW3Byb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0
aGlzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oU2Vz
c2lvbkhvc3Q6OkNvbW1hbmRSZXNwb25zZSYmIHJlc3BvbnNlKSB7CkBAIC0yNzQ0LDcgKzI4NDAs
NyBAQCB2b2lkIFNlc3Npb246OnRha2VTY3JlZW5zaG90KE9wdGlvbmFsPFN0cmluZz4gZWxlbWVu
dElELCBPcHRpb25hbDxib29sPiBzY3JvbGxJbgogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIoV1RGTW92ZShyZXN1bHQpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAg
ICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVh
dGUoKTsKKyAgICAgICAgYXV0byBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsK
ICAgICAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJoYW5kbGUiX3MsIG1fdG9wbGV2ZWxCcm93
c2luZ0NvbnRleHQudmFsdWUoKSk7CiAgICAgICAgIGlmIChtX2N1cnJlbnRCcm93c2luZ0NvbnRl
eHQpCiAgICAgICAgICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoImZyYW1lSGFuZGxlIl9zLCBt
X2N1cnJlbnRCcm93c2luZ0NvbnRleHQudmFsdWUoKSk7CkBAIC0yNzU4LDExICsyODU0LDEzIEBA
IHZvaWQgU2Vzc2lvbjo6dGFrZVNjcmVlbnNob3QoT3B0aW9uYWw8U3RyaW5nPiBlbGVtZW50SUQs
IE9wdGlvbmFsPGJvb2w+IHNjcm9sbEluCiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChXVEZNb3ZlKHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0KSkp
OwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFN0
cmluZyBkYXRhOwotICAgICAgICAgICAgaWYgKCFyZXNwb25zZS5yZXNwb25zZU9iamVjdC0+Z2V0
U3RyaW5nKCJkYXRhIl9zLCBkYXRhKSkgeworCisgICAgICAgICAgICBhdXRvIGRhdGEgPSByZXNw
b25zZS5yZXNwb25zZU9iamVjdC0+Z2V0U3RyaW5nKCJkYXRhIl9zKTsKKyAgICAgICAgICAgIGlm
ICghZGF0YSkgewogICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1
bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKICAgICAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CisKICAgICAgICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OnN1Y2Nlc3MoSlNPTjo6VmFsdWU6OmNyZWF0ZShkYXRh
KSkpOwogICAgICAgICB9KTsKICAgICB9KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJEcml2ZXIv
U2Vzc2lvbi5oIGIvU291cmNlL1dlYkRyaXZlci9TZXNzaW9uLmgKaW5kZXggODQ0OWFhODk4OGI3
NzkzNzRmODgyZmVkN2QyZmNkY2QzNDQ3MzRlMi4uYWQwNTYzYmI5MTlmMWUzZTg3OWVlNzFlZjIz
OWI4YTdhZjVkNDcxNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkRyaXZlci9TZXNzaW9uLmgKKysr
IGIvU291cmNlL1dlYkRyaXZlci9TZXNzaW9uLmgKQEAgLTE0MywxMCArMTQzLDEwIEBAIHByaXZh
dGU6CiAgICAgdm9pZCByZXBvcnRVbmV4cGVjdGVkQWxlcnRPcGVuKEZ1bmN0aW9uPHZvaWQgKENv
bW1hbmRSZXN1bHQmJik+JiYpOwogCiAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gY3JlYXRlRWxl
bWVudChSZWZQdHI8SlNPTjo6VmFsdWU+JiYpOwotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IGNy
ZWF0ZUVsZW1lbnQoY29uc3QgU3RyaW5nJiBlbGVtZW50SUQpOworICAgIFJlZjxKU09OOjpPYmpl
Y3Q+IGNyZWF0ZUVsZW1lbnQoY29uc3QgU3RyaW5nJiBlbGVtZW50SUQpOwogICAgIFJlZlB0cjxK
U09OOjpPYmplY3Q+IGV4dHJhY3RFbGVtZW50KEpTT046OlZhbHVlJik7CiAgICAgU3RyaW5nIGV4
dHJhY3RFbGVtZW50SUQoSlNPTjo6VmFsdWUmKTsKLSAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IGhh
bmRsZVNjcmlwdFJlc3VsdChSZWZQdHI8SlNPTjo6VmFsdWU+JiYpOworICAgIFJlZjxKU09OOjpW
YWx1ZT4gaGFuZGxlU2NyaXB0UmVzdWx0KFJlZjxKU09OOjpWYWx1ZT4mJik7CiAgICAgdm9pZCBl
bGVtZW50SXNFZGl0YWJsZShjb25zdCBTdHJpbmcmIGVsZW1lbnRJRCwgRnVuY3Rpb248dm9pZCAo
Q29tbWFuZFJlc3VsdCYmKT4mJik7CiAKICAgICBzdHJ1Y3QgUG9pbnQgewpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkRyaXZlci9TZXNzaW9uSG9zdC5jcHAgYi9Tb3VyY2UvV2ViRHJpdmVyL1Nlc3Np
b25Ib3N0LmNwcAppbmRleCBkMTY5Yjk1YzRiNmNlZTQyODlkOGM4ODllNTUzZGY3NjM5NTVhYWJj
Li40NzJlYmRmYWY0YTYyYjZiMjAwYjRkMWVjN2IyMWJlNTkxMTg1ZTAxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViRHJpdmVyL1Nlc3Npb25Ib3N0LmNwcAorKysgYi9Tb3VyY2UvV2ViRHJpdmVyL1Nl
c3Npb25Ib3N0LmNwcApAQCAtNjIsMzEgKzYyLDI3IEBAIGxvbmcgU2Vzc2lvbkhvc3Q6OnNlbmRD
b21tYW5kVG9CYWNrZW5kKGNvbnN0IFN0cmluZyYgY29tbWFuZCwgUmVmUHRyPEpTT046Ok9iamVj
CiAKIHZvaWQgU2Vzc2lvbkhvc3Q6OmRpc3BhdGNoTWVzc2FnZShjb25zdCBTdHJpbmcmIG1lc3Nh
Z2UpCiB7Ci0gICAgUmVmUHRyPEpTT046OlZhbHVlPiBtZXNzYWdlVmFsdWU7Ci0gICAgaWYgKCFK
U09OOjpWYWx1ZTo6cGFyc2VKU09OKG1lc3NhZ2UsIG1lc3NhZ2VWYWx1ZSkpCisgICAgYXV0byBt
ZXNzYWdlVmFsdWUgPSBKU09OOjpWYWx1ZTo6cGFyc2VKU09OKG1lc3NhZ2UpOworICAgIGlmICgh
bWVzc2FnZVZhbHVlKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0
PiBtZXNzYWdlT2JqZWN0OwotICAgIGlmICghbWVzc2FnZVZhbHVlLT5hc09iamVjdChtZXNzYWdl
T2JqZWN0KSkKKyAgICBhdXRvIG1lc3NhZ2VPYmplY3QgPSBtZXNzYWdlVmFsdWUtPmFzT2JqZWN0
KCk7CisgICAgaWYgKCFtZXNzYWdlT2JqZWN0KQogICAgICAgICByZXR1cm47CiAKLSAgICBsb25n
IHNlcXVlbmNlSUQ7Ci0gICAgaWYgKCFtZXNzYWdlT2JqZWN0LT5nZXRJbnRlZ2VyKCJpZCJfcywg
c2VxdWVuY2VJRCkpCisgICAgYXV0byBzZXF1ZW5jZUlEID0gbWVzc2FnZU9iamVjdC0+Z2V0SW50
ZWdlcigiaWQiX3MpOworICAgIGlmICghc2VxdWVuY2VJRCkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgYXV0byByZXNwb25zZUhhbmRsZXIgPSBtX2NvbW1hbmRSZXF1ZXN0cy50YWtlKHNlcXVlbmNl
SUQpOworICAgIGF1dG8gcmVzcG9uc2VIYW5kbGVyID0gbV9jb21tYW5kUmVxdWVzdHMudGFrZSgq
c2VxdWVuY2VJRCk7CiAgICAgQVNTRVJUKHJlc3BvbnNlSGFuZGxlcik7CiAKICAgICBDb21tYW5k
UmVzcG9uc2UgcmVzcG9uc2U7Ci0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gZXJyb3JPYmplY3Q7
Ci0gICAgaWYgKG1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgiZXJyb3IiX3MsIGVycm9yT2JqZWN0
KSkgeworICAgIGlmIChhdXRvIGVycm9yT2JqZWN0ID0gbWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0
KCJlcnJvciJfcykpIHsKICAgICAgICAgcmVzcG9uc2UucmVzcG9uc2VPYmplY3QgPSBXVEZNb3Zl
KGVycm9yT2JqZWN0KTsKICAgICAgICAgcmVzcG9uc2UuaXNFcnJvciA9IHRydWU7Ci0gICAgfSBl
bHNlIHsKLSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcmVzdWx0T2JqZWN0OwotICAgICAg
ICBpZiAobWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJyZXN1bHQiX3MsIHJlc3VsdE9iamVjdCkg
JiYgcmVzdWx0T2JqZWN0LT5zaXplKCkpCi0gICAgICAgICAgICByZXNwb25zZS5yZXNwb25zZU9i
amVjdCA9IFdURk1vdmUocmVzdWx0T2JqZWN0KTsKLSAgICB9CisgICAgfSBlbHNlIGlmIChhdXRv
IHJlc3VsdE9iamVjdCA9IG1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgicmVzdWx0Il9zKSkKKyAg
ICAgICAgcmVzcG9uc2UucmVzcG9uc2VPYmplY3QgPSBXVEZNb3ZlKHJlc3VsdE9iamVjdCk7CiAK
ICAgICByZXNwb25zZUhhbmRsZXIoV1RGTW92ZShyZXNwb25zZSkpOwogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkRyaXZlci9XZWJEcml2ZXJTZXJ2aWNlLmNwcCBiL1NvdXJjZS9XZWJEcml2ZXIv
V2ViRHJpdmVyU2VydmljZS5jcHAKaW5kZXggOWJiOTc2ZDlmMGM1ZTNiNDg5YjIwOWYzZGI4NTBk
YzMyMWI2MGY0ZS4uMjQ2Zjc3MmFkNGE0ODBmMzZhMmQxNDQxNzU0MzIwNTQ1YzJkZjRmMCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkRyaXZlci9XZWJEcml2ZXJTZXJ2aWNlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViRHJpdmVyL1dlYkRyaXZlclNlcnZpY2UuY3BwCkBAIC0yMzksMTMgKzIzOSwxNCBAQCB2
b2lkIFdlYkRyaXZlclNlcnZpY2U6OmhhbmRsZVJlcXVlc3QoSFRUUFJlcXVlc3RIYW5kbGVyOjpS
ZXF1ZXN0JiYgcmVxdWVzdCwgRnVuYwogCiAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1l
dGVyc09iamVjdDsKICAgICBpZiAobWV0aG9kLnZhbHVlKCkgPT0gSFRUUE1ldGhvZDo6UG9zdCkg
ewotICAgICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IG1lc3NhZ2VWYWx1ZTsKLSAgICAgICAgaWYg
KCFKU09OOjpWYWx1ZTo6cGFyc2VKU09OKFN0cmluZzo6ZnJvbVVURjgocmVxdWVzdC5kYXRhLCBy
ZXF1ZXN0LmRhdGFMZW5ndGgpLCBtZXNzYWdlVmFsdWUpKSB7CisgICAgICAgIGF1dG8gbWVzc2Fn
ZVZhbHVlID0gSlNPTjo6VmFsdWU6OnBhcnNlSlNPTihTdHJpbmc6OmZyb21VVEY4KHJlcXVlc3Qu
ZGF0YSwgcmVxdWVzdC5kYXRhTGVuZ3RoKSk7CisgICAgICAgIGlmICghbWVzc2FnZVZhbHVlKSB7
CiAgICAgICAgICAgICBzZW5kUmVzcG9uc2UoV1RGTW92ZShyZXBseUhhbmRsZXIpLCBDb21tYW5k
UmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6SW52YWxpZEFyZ3VtZW50KSk7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoIW1lc3NhZ2VW
YWx1ZS0+YXNPYmplY3QocGFyYW1ldGVyc09iamVjdCkpIHsKKyAgICAgICAgcGFyYW1ldGVyc09i
amVjdCA9IG1lc3NhZ2VWYWx1ZS0+YXNPYmplY3QoKTsKKyAgICAgICAgaWYgKCFwYXJhbWV0ZXJz
T2JqZWN0KSB7CiAgICAgICAgICAgICBzZW5kUmVzcG9uc2UoV1RGTW92ZShyZXBseUhhbmRsZXIp
LCBDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6SW52YWxpZEFy
Z3VtZW50KSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTI3NCw3ICsyNzUs
NyBAQCB2b2lkIFdlYkRyaXZlclNlcnZpY2U6OnNlbmRSZXNwb25zZShGdW5jdGlvbjx2b2lkIChI
VFRQUmVxdWVzdEhhbmRsZXI6OlJlc3BvbnNlJgogICAgICAgICBlcnJvck9iamVjdC0+c2V0U3Ry
aW5nKCJzdGFja3RyYWNlIl9zLCBlbXB0eVN0cmluZygpKTsKICAgICAgICAgLy8gSWYgdGhlIGVy
cm9yIGRhdGEgZGljdGlvbmFyeSBjb250YWlucyBhbnkgZW50cmllcywgc2V0IHRoZSAiZGF0YSIg
ZmllbGQgb24gYm9keSB0byBhIG5ldyBKU09OIE9iamVjdCBwb3B1bGF0ZWQgd2l0aCB0aGUgZGlj
dGlvbmFyeS4KICAgICAgICAgaWYgKGF1dG8mIGFkZGl0aW9uYWxEYXRhID0gcmVzdWx0LmFkZGl0
aW9uYWxFcnJvckRhdGEoKSkKLSAgICAgICAgICAgIGVycm9yT2JqZWN0LT5zZXRPYmplY3QoImRh
dGEiX3MsIFJlZlB0cjxKU09OOjpPYmplY3Q+IHsgYWRkaXRpb25hbERhdGEgfSk7CisgICAgICAg
ICAgICBlcnJvck9iamVjdC0+c2V0T2JqZWN0KCJkYXRhIl9zLCAqYWRkaXRpb25hbERhdGEpOwog
ICAgICAgICAvLyBTZW5kIGEgcmVzcG9uc2Ugd2l0aCBzdGF0dXMgYW5kIGJvZHkgYXMgYXJndW1l
bnRzLgogICAgICAgICByZXN1bHRWYWx1ZSA9IFdURk1vdmUoZXJyb3JPYmplY3QpOwogICAgIH0g
ZWxzZSBpZiAoYXV0byB2YWx1ZSA9IHJlc3VsdC5yZXN1bHQoKSkKQEAgLTI4NCwyNCArMjg1LDI0
IEBAIHZvaWQgV2ViRHJpdmVyU2VydmljZTo6c2VuZFJlc3BvbnNlKEZ1bmN0aW9uPHZvaWQgKEhU
VFBSZXF1ZXN0SGFuZGxlcjo6UmVzcG9uc2UmCiAKICAgICAvLyBXaGVuIHJlcXVpcmVkIHRvIHNl
bmQgYSByZXNwb25zZS4KICAgICAvLyBodHRwczovL3czYy5naXRodWIuaW8vd2ViZHJpdmVyL3dl
YmRyaXZlci1zcGVjLmh0bWwjZGZuLXNlbmQtYS1yZXNwb25zZQotICAgIFJlZlB0cjxKU09OOjpP
YmplY3Q+IHJlc3BvbnNlT2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICByZXNw
b25zZU9iamVjdC0+c2V0VmFsdWUoInZhbHVlIl9zLCBXVEZNb3ZlKHJlc3VsdFZhbHVlKSk7Cisg
ICAgYXV0byByZXNwb25zZU9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgcmVz
cG9uc2VPYmplY3QtPnNldFZhbHVlKCJ2YWx1ZSJfcywgcmVzdWx0VmFsdWUucmVsZWFzZU5vbk51
bGwoKSk7CiAgICAgcmVwbHlIYW5kbGVyKHsgcmVzdWx0Lmh0dHBTdGF0dXNDb2RlKCksIHJlc3Bv
bnNlT2JqZWN0LT50b0pTT05TdHJpbmcoKS51dGY4KCksICJhcHBsaWNhdGlvbi9qc29uOyBjaGFy
c2V0PXV0Zi04Il9zIH0pOwogfQogCiBzdGF0aWMgT3B0aW9uYWw8ZG91YmxlPiB2YWx1ZUFzTnVt
YmVySW5SYW5nZShjb25zdCBKU09OOjpWYWx1ZSYgdmFsdWUsIGRvdWJsZSBtaW5BbGxvd2VkID0g
MCwgZG91YmxlIG1heEFsbG93ZWQgPSBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpKQog
ewotICAgIGRvdWJsZSBudW1iZXI7Ci0gICAgaWYgKCF2YWx1ZS5hc0RvdWJsZShudW1iZXIpKQor
ICAgIGF1dG8gbnVtYmVyID0gdmFsdWUuYXNEb3VibGUoKTsKKyAgICBpZiAoIW51bWJlcikKICAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIGlmIChzdGQ6OmlzbmFuKG51bWJlcikg
fHwgc3RkOjppc2luZihudW1iZXIpKQorICAgIGlmIChzdGQ6OmlzbmFuKCpudW1iZXIpIHx8IHN0
ZDo6aXNpbmYoKm51bWJlcikpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBp
ZiAobnVtYmVyIDwgbWluQWxsb3dlZCB8fCBudW1iZXIgPiBtYXhBbGxvd2VkKQorICAgIGlmICgq
bnVtYmVyIDwgbWluQWxsb3dlZCB8fCAqbnVtYmVyID4gbWF4QWxsb3dlZCkKICAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHJldHVybiBudW1iZXI7CisgICAgcmV0dXJuICpudW1i
ZXI7CiB9CiAKIHN0YXRpYyBPcHRpb25hbDx1aW50NjRfdD4gdW5zaWduZWRWYWx1ZShKU09OOjpW
YWx1ZSYgdmFsdWUpCkBAIC0zMzgsNyArMzM5LDcgQEAgc3RhdGljIE9wdGlvbmFsPFRpbWVvdXRz
PiBkZXNlcmlhbGl6ZVRpbWVvdXRzKEpTT046Ok9iamVjdCYgdGltZW91dHNPYmplY3QsIElnbm8K
ICAgICAgICAgfQogCiAgICAgICAgIC8vIElmIHZhbHVlIGlzIG5vdCBhbiBpbnRlZ2VyLCBvciBp
dCBpcyBsZXNzIHRoYW4gMCBvciBncmVhdGVyIHRoYW4gdGhlIG1heGltdW0gc2FmZSBpbnRlZ2Vy
LCByZXR1cm4gZXJyb3Igd2l0aCBlcnJvciBjb2RlIGludmFsaWQgYXJndW1lbnQuCi0gICAgICAg
IGF1dG8gdGltZW91dE1TID0gdW5zaWduZWRWYWx1ZSgqaXQtPnZhbHVlKTsKKyAgICAgICAgYXV0
byB0aW1lb3V0TVMgPSB1bnNpZ25lZFZhbHVlKGl0LT52YWx1ZSk7CiAgICAgICAgIGlmICghdGlt
ZW91dE1TKQogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIApAQCAtMzU5LDYxICsz
NjAsNjEgQEAgc3RhdGljIE9wdGlvbmFsPFByb3h5PiBkZXNlcmlhbGl6ZVByb3h5KEpTT046Ok9i
amVjdCYgcHJveHlPYmplY3QpCiAgICAgLy8gwqc3LjEgUHJveHkuCiAgICAgLy8gaHR0cHM6Ly93
M2MuZ2l0aHViLmlvL3dlYmRyaXZlci8jcHJveHkKICAgICBQcm94eSBwcm94eTsKLSAgICBpZiAo
IXByb3h5T2JqZWN0LmdldFN0cmluZygicHJveHlUeXBlIl9zLCBwcm94eS50eXBlKSkKKworICAg
IHByb3h5LnR5cGUgPSBwcm94eU9iamVjdC5nZXRTdHJpbmcoInByb3h5VHlwZSJfcyk7CisgICAg
aWYgKCFwcm94eS50eXBlKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgaWYg
KHByb3h5LnR5cGUgPT0gImRpcmVjdCIgfHwgcHJveHkudHlwZSA9PSAiYXV0b2RldGVjdCIgfHwg
cHJveHkudHlwZSA9PSAic3lzdGVtIikKICAgICAgICAgcmV0dXJuIHByb3h5OwogCiAgICAgaWYg
KHByb3h5LnR5cGUgPT0gInBhYyIpIHsKLSAgICAgICAgU3RyaW5nIGF1dG9jb25maWdVUkw7Ci0g
ICAgICAgIGlmICghcHJveHlPYmplY3QuZ2V0U3RyaW5nKCJwcm94eUF1dG9jb25maWdVcmwiX3Ms
IGF1dG9jb25maWdVUkwpKQorICAgICAgICBwcm94eS5hdXRvY29uZmlnVVJMID0gcHJveHlPYmpl
Y3QuZ2V0U3RyaW5nKCJwcm94eUF1dG9jb25maWdVcmwiX3MpOworICAgICAgICBpZiAoIXByb3h5
LmF1dG9jb25maWdVUkwpCiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAg
ICAgIHByb3h5LmF1dG9jb25maWdVUkwgPSBhdXRvY29uZmlnVVJMOwogICAgICAgICByZXR1cm4g
cHJveHk7CiAgICAgfQogCiAgICAgaWYgKHByb3h5LnR5cGUgPT0gIm1hbnVhbCIpIHsKLSAgICAg
ICAgUmVmUHRyPEpTT046OlZhbHVlPiB2YWx1ZTsKLSAgICAgICAgaWYgKHByb3h5T2JqZWN0Lmdl
dFZhbHVlKCJmdHBQcm94eSJfcywgdmFsdWUpKSB7Ci0gICAgICAgICAgICBTdHJpbmcgZnRwUHJv
eHk7Ci0gICAgICAgICAgICBpZiAoIXZhbHVlLT5hc1N0cmluZyhmdHBQcm94eSkpCisgICAgICAg
IGlmIChhdXRvIHZhbHVlID0gcHJveHlPYmplY3QuZ2V0VmFsdWUoImZ0cFByb3h5Il9zKSkgewor
ICAgICAgICAgICAgYXV0byBmdHBQcm94eSA9IHZhbHVlLT5hc1N0cmluZygpOworICAgICAgICAg
ICAgaWYgKCFmdHBQcm94eSkKICAgICAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owog
CiAgICAgICAgICAgICBwcm94eS5mdHBVUkwgPSBVUkwoeyB9LCBtYWtlU3RyaW5nKCJmdHA6Ly8i
LCBmdHBQcm94eSkpOwogICAgICAgICAgICAgaWYgKCFwcm94eS5mdHBVUkwtPmlzVmFsaWQoKSkK
ICAgICAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAgICB9Ci0gICAgICAg
IGlmIChwcm94eU9iamVjdC5nZXRWYWx1ZSgiaHR0cFByb3h5Il9zLCB2YWx1ZSkpIHsKLSAgICAg
ICAgICAgIFN0cmluZyBodHRwUHJveHk7Ci0gICAgICAgICAgICBpZiAoIXZhbHVlLT5hc1N0cmlu
ZyhodHRwUHJveHkpKQorICAgICAgICBpZiAoYXV0byB2YWx1ZSA9IHByb3h5T2JqZWN0LmdldFZh
bHVlKCJodHRwUHJveHkiX3MpKSB7CisgICAgICAgICAgICBhdXRvIGh0dHBQcm94eSA9IHZhbHVl
LT5hc1N0cmluZygpOworICAgICAgICAgICAgaWYgKCFodHRwUHJveHkpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgICAgICAgICAgcHJveHkuaHR0cFVSTCA9IFVS
TCh7IH0sIG1ha2VTdHJpbmcoImh0dHA6Ly8iLCBodHRwUHJveHkpKTsKICAgICAgICAgICAgIGlm
ICghcHJveHkuaHR0cFVSTC0+aXNWYWxpZCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHByb3h5T2JqZWN0LmdldFZhbHVlKCJz
c2xQcm94eSJfcywgdmFsdWUpKSB7Ci0gICAgICAgICAgICBTdHJpbmcgc3NsUHJveHk7Ci0gICAg
ICAgICAgICBpZiAoIXZhbHVlLT5hc1N0cmluZyhzc2xQcm94eSkpCisgICAgICAgIGlmIChhdXRv
IHZhbHVlID0gcHJveHlPYmplY3QuZ2V0VmFsdWUoInNzbFByb3h5Il9zKSkgeworICAgICAgICAg
ICAgYXV0byBzc2xQcm94eSA9IHZhbHVlLT5hc1N0cmluZygpOworICAgICAgICAgICAgaWYgKCFz
c2xQcm94eSkKICAgICAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgICAg
ICAgICBwcm94eS5odHRwc1VSTCA9IFVSTCh7IH0sIG1ha2VTdHJpbmcoImh0dHBzOi8vIiwgc3Ns
UHJveHkpKTsKICAgICAgICAgICAgIGlmICghcHJveHkuaHR0cHNVUkwtPmlzVmFsaWQoKSkKICAg
ICAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAgICB9Ci0gICAgICAgIGlm
IChwcm94eU9iamVjdC5nZXRWYWx1ZSgic29ja3NQcm94eSIsIHZhbHVlKSkgewotICAgICAgICAg
ICAgU3RyaW5nIHNvY2tzUHJveHk7Ci0gICAgICAgICAgICBpZiAoIXZhbHVlLT5hc1N0cmluZyhz
b2Nrc1Byb3h5KSkKKyAgICAgICAgaWYgKGF1dG8gdmFsdWUgPSBwcm94eU9iamVjdC5nZXRWYWx1
ZSgic29ja3NQcm94eSIpKSB7CisgICAgICAgICAgICBhdXRvIHNvY2tzUHJveHkgPSB2YWx1ZS0+
YXNTdHJpbmcoKTsKKyAgICAgICAgICAgIGlmICghc29ja3NQcm94eSkKICAgICAgICAgICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgICAgICAgICBwcm94eS5zb2Nrc1VSTCA9IFVS
TCh7IH0sIG1ha2VTdHJpbmcoInNvY2tzOi8vIiwgc29ja3NQcm94eSkpOwogICAgICAgICAgICAg
aWYgKCFwcm94eS5zb2Nrc1VSTC0+aXNWYWxpZCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CiAKLSAgICAgICAgICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gc29ja3NWZXJz
aW9uVmFsdWU7Ci0gICAgICAgICAgICBpZiAoIXByb3h5T2JqZWN0LmdldFZhbHVlKCJzb2Nrc1Zl
cnNpb24iLCBzb2Nrc1ZlcnNpb25WYWx1ZSkpCisgICAgICAgICAgICBhdXRvIHNvY2tzVmVyc2lv
blZhbHVlID0gcHJveHlPYmplY3QuZ2V0VmFsdWUoInNvY2tzVmVyc2lvbiIpOworICAgICAgICAg
ICAgaWYgKCFzb2Nrc1ZlcnNpb25WYWx1ZSkKICAgICAgICAgICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwogCiAgICAgICAgICAgICBhdXRvIHNvY2tzVmVyc2lvbiA9IHVuc2lnbmVkVmFsdWUo
KnNvY2tzVmVyc2lvblZhbHVlKTsKQEAgLTQyMSwxOCArNDIyLDE3IEBAIHN0YXRpYyBPcHRpb25h
bDxQcm94eT4gZGVzZXJpYWxpemVQcm94eShKU09OOjpPYmplY3QmIHByb3h5T2JqZWN0KQogICAg
ICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAgICAgICBwcm94eS5zb2Nr
c1ZlcnNpb24gPSBzb2Nrc1ZlcnNpb24udmFsdWUoKTsKICAgICAgICAgfQotICAgICAgICBpZiAo
cHJveHlPYmplY3QuZ2V0VmFsdWUoIm5vUHJveHkiX3MsIHZhbHVlKSkgewotICAgICAgICAgICAg
UmVmUHRyPEpTT046OkFycmF5PiBub1Byb3h5OwotICAgICAgICAgICAgaWYgKCF2YWx1ZS0+YXNB
cnJheShub1Byb3h5KSkKKyAgICAgICAgaWYgKGF1dG8gdmFsdWUgPSBwcm94eU9iamVjdC5nZXRW
YWx1ZSgibm9Qcm94eSJfcykpIHsKKyAgICAgICAgICAgIGF1dG8gbm9Qcm94eSA9IHZhbHVlLT5h
c0FycmF5KCk7CisgICAgICAgICAgICBpZiAoIW5vUHJveHkpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKIAogICAgICAgICAgICAgYXV0byBub1Byb3h5TGVuZ3RoID0gbm9Q
cm94eS0+bGVuZ3RoKCk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbm9Q
cm94eUxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgUmVmUHRyPEpTT046OlZhbHVlPiBh
ZGRyZXNzVmFsdWUgPSBub1Byb3h5LT5nZXQoaSk7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIGFk
ZHJlc3M7Ci0gICAgICAgICAgICAgICAgaWYgKCFhZGRyZXNzVmFsdWUtPmFzU3RyaW5nKGFkZHJl
c3MpKQorICAgICAgICAgICAgICAgIGF1dG8gYWRkcmVzcyA9IG5vUHJveHktPmdldChpKS0+YXNT
dHJpbmcoKTsKKyAgICAgICAgICAgICAgICBpZiAoIWFkZHJlc3MpCiAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgICAgICAgICAgICAgcHJveHkuaWdub3JlQWRk
cmVzc0xpc3QuYXBwZW5kKFdURk1vdmUoYWRkcmVzcykpOworICAgICAgICAgICAgICAgIHByb3h5
Lmlnbm9yZUFkZHJlc3NMaXN0LmFwcGVuZChhZGRyZXNzKTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQogCkBAIC00NzEsNDMgKzQ3MSw1MyBAQCBzdGF0aWMgT3B0aW9uYWw8VW5oYW5kbGVkUHJv
bXB0QmVoYXZpb3I+IGRlc2VyaWFsaXplVW5oYW5kbGVkUHJvbXB0QmVoYXZpb3IoY29ucwogdm9p
ZCBXZWJEcml2ZXJTZXJ2aWNlOjpwYXJzZUNhcGFiaWxpdGllcyhjb25zdCBKU09OOjpPYmplY3Qm
IG1hdGNoZWRDYXBhYmlsaXRpZXMsIENhcGFiaWxpdGllcyYgY2FwYWJpbGl0aWVzKSBjb25zdAog
ewogICAgIC8vIE1hdGNoZWQgY2FwYWJpbGl0aWVzIGhhdmUgYWxyZWFkeSBiZWVuIHZhbGlkYXRl
ZC4KLSAgICBib29sIGFjY2VwdEluc2VjdXJlQ2VydHM7Ci0gICAgaWYgKG1hdGNoZWRDYXBhYmls
aXRpZXMuZ2V0Qm9vbGVhbigiYWNjZXB0SW5zZWN1cmVDZXJ0cyJfcywgYWNjZXB0SW5zZWN1cmVD
ZXJ0cykpCi0gICAgICAgIGNhcGFiaWxpdGllcy5hY2NlcHRJbnNlY3VyZUNlcnRzID0gYWNjZXB0
SW5zZWN1cmVDZXJ0czsKLSAgICBib29sIHNldFdpbmRvd1JlY3Q7Ci0gICAgaWYgKG1hdGNoZWRD
YXBhYmlsaXRpZXMuZ2V0Qm9vbGVhbigic2V0V2luZG93UmVjdCJfcywgc2V0V2luZG93UmVjdCkp
Ci0gICAgICAgIGNhcGFiaWxpdGllcy5zZXRXaW5kb3dSZWN0ID0gc2V0V2luZG93UmVjdDsKLSAg
ICBTdHJpbmcgYnJvd3Nlck5hbWU7Ci0gICAgaWYgKG1hdGNoZWRDYXBhYmlsaXRpZXMuZ2V0U3Ry
aW5nKCJicm93c2VyTmFtZSJfcywgYnJvd3Nlck5hbWUpKQorICAgIGF1dG8gYWNjZXB0SW5zZWN1
cmVDZXJ0cyA9IG1hdGNoZWRDYXBhYmlsaXRpZXMuZ2V0Qm9vbGVhbigiYWNjZXB0SW5zZWN1cmVD
ZXJ0cyJfcyk7CisgICAgaWYgKGFjY2VwdEluc2VjdXJlQ2VydHMpCisgICAgICAgIGNhcGFiaWxp
dGllcy5hY2NlcHRJbnNlY3VyZUNlcnRzID0gKmFjY2VwdEluc2VjdXJlQ2VydHM7CisKKyAgICBh
dXRvIHNldFdpbmRvd1JlY3QgPSBtYXRjaGVkQ2FwYWJpbGl0aWVzLmdldEJvb2xlYW4oInNldFdp
bmRvd1JlY3QiX3MpOworICAgIGlmIChzZXRXaW5kb3dSZWN0KQorICAgICAgICBjYXBhYmlsaXRp
ZXMuc2V0V2luZG93UmVjdCA9ICpzZXRXaW5kb3dSZWN0OworCisgICAgYXV0byBicm93c2VyTmFt
ZSA9IG1hdGNoZWRDYXBhYmlsaXRpZXMuZ2V0U3RyaW5nKCJicm93c2VyTmFtZSJfcyk7CisgICAg
aWYgKCEhYnJvd3Nlck5hbWUpCiAgICAgICAgIGNhcGFiaWxpdGllcy5icm93c2VyTmFtZSA9IGJy
b3dzZXJOYW1lOwotICAgIFN0cmluZyBicm93c2VyVmVyc2lvbjsKLSAgICBpZiAobWF0Y2hlZENh
cGFiaWxpdGllcy5nZXRTdHJpbmcoImJyb3dzZXJWZXJzaW9uIl9zLCBicm93c2VyVmVyc2lvbikp
CisKKyAgICBhdXRvIGJyb3dzZXJWZXJzaW9uID0gbWF0Y2hlZENhcGFiaWxpdGllcy5nZXRTdHJp
bmcoImJyb3dzZXJWZXJzaW9uIl9zKTsKKyAgICBpZiAoISFicm93c2VyVmVyc2lvbikKICAgICAg
ICAgY2FwYWJpbGl0aWVzLmJyb3dzZXJWZXJzaW9uID0gYnJvd3NlclZlcnNpb247Ci0gICAgU3Ry
aW5nIHBsYXRmb3JtTmFtZTsKLSAgICBpZiAobWF0Y2hlZENhcGFiaWxpdGllcy5nZXRTdHJpbmco
InBsYXRmb3JtTmFtZSJfcywgcGxhdGZvcm1OYW1lKSkKKworICAgIGF1dG8gcGxhdGZvcm1OYW1l
ID0gbWF0Y2hlZENhcGFiaWxpdGllcy5nZXRTdHJpbmcoInBsYXRmb3JtTmFtZSJfcyk7CisgICAg
aWYgKCEhcGxhdGZvcm1OYW1lKQogICAgICAgICBjYXBhYmlsaXRpZXMucGxhdGZvcm1OYW1lID0g
cGxhdGZvcm1OYW1lOwotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHByb3h5OwotICAgIGlmICht
YXRjaGVkQ2FwYWJpbGl0aWVzLmdldE9iamVjdCgicHJveHkiX3MsIHByb3h5KSkKKworICAgIGF1
dG8gcHJveHkgPSBtYXRjaGVkQ2FwYWJpbGl0aWVzLmdldE9iamVjdCgicHJveHkiX3MpOworICAg
IGlmIChwcm94eSkKICAgICAgICAgY2FwYWJpbGl0aWVzLnByb3h5ID0gZGVzZXJpYWxpemVQcm94
eSgqcHJveHkpOwotICAgIGJvb2wgc3RyaWN0RmlsZUludGVyYWN0YWJpbGl0eTsKLSAgICBpZiAo
bWF0Y2hlZENhcGFiaWxpdGllcy5nZXRCb29sZWFuKCJzdHJpY3RGaWxlSW50ZXJhY3RhYmlsaXR5
Il9zLCBzdHJpY3RGaWxlSW50ZXJhY3RhYmlsaXR5KSkKLSAgICAgICAgY2FwYWJpbGl0aWVzLnN0
cmljdEZpbGVJbnRlcmFjdGFiaWxpdHkgPSBzdHJpY3RGaWxlSW50ZXJhY3RhYmlsaXR5OwotICAg
IFJlZlB0cjxKU09OOjpPYmplY3Q+IHRpbWVvdXRzOwotICAgIGlmIChtYXRjaGVkQ2FwYWJpbGl0
aWVzLmdldE9iamVjdCgidGltZW91dHMiX3MsIHRpbWVvdXRzKSkKKworICAgIGF1dG8gc3RyaWN0
RmlsZUludGVyYWN0YWJpbGl0eSA9IG1hdGNoZWRDYXBhYmlsaXRpZXMuZ2V0Qm9vbGVhbigic3Ry
aWN0RmlsZUludGVyYWN0YWJpbGl0eSJfcyk7CisgICAgaWYgKHN0cmljdEZpbGVJbnRlcmFjdGFi
aWxpdHkpCisgICAgICAgIGNhcGFiaWxpdGllcy5zdHJpY3RGaWxlSW50ZXJhY3RhYmlsaXR5ID0g
KnN0cmljdEZpbGVJbnRlcmFjdGFiaWxpdHk7CisKKyAgICBhdXRvIHRpbWVvdXRzID0gbWF0Y2hl
ZENhcGFiaWxpdGllcy5nZXRPYmplY3QoInRpbWVvdXRzIl9zKTsKKyAgICBpZiAodGltZW91dHMp
CiAgICAgICAgIGNhcGFiaWxpdGllcy50aW1lb3V0cyA9IGRlc2VyaWFsaXplVGltZW91dHMoKnRp
bWVvdXRzLCBJZ25vcmVVbmtub3duVGltZW91dDo6Tm8pOwotICAgIFN0cmluZyBwYWdlTG9hZFN0
cmF0ZWd5OwotICAgIGlmIChtYXRjaGVkQ2FwYWJpbGl0aWVzLmdldFN0cmluZygicGFnZUxvYWRT
dHJhdGVneSJfcywgcGFnZUxvYWRTdHJhdGVneSkpCisKKyAgICBhdXRvIHBhZ2VMb2FkU3RyYXRl
Z3kgPSBtYXRjaGVkQ2FwYWJpbGl0aWVzLmdldFN0cmluZygicGFnZUxvYWRTdHJhdGVneSJfcyk7
CisgICAgaWYgKCEhcGFnZUxvYWRTdHJhdGVneSkKICAgICAgICAgY2FwYWJpbGl0aWVzLnBhZ2VM
b2FkU3RyYXRlZ3kgPSBkZXNlcmlhbGl6ZVBhZ2VMb2FkU3RyYXRlZ3kocGFnZUxvYWRTdHJhdGVn
eSk7Ci0gICAgU3RyaW5nIHVuaGFuZGxlZFByb21wdEJlaGF2aW9yOwotICAgIGlmIChtYXRjaGVk
Q2FwYWJpbGl0aWVzLmdldFN0cmluZygidW5oYW5kbGVkUHJvbXB0QmVoYXZpb3IiX3MsIHVuaGFu
ZGxlZFByb21wdEJlaGF2aW9yKSkKKworICAgIGF1dG8gdW5oYW5kbGVkUHJvbXB0QmVoYXZpb3Ig
PSBtYXRjaGVkQ2FwYWJpbGl0aWVzLmdldFN0cmluZygidW5oYW5kbGVkUHJvbXB0QmVoYXZpb3Ii
X3MpOworICAgIGlmICghIXVuaGFuZGxlZFByb21wdEJlaGF2aW9yKQogICAgICAgICBjYXBhYmls
aXRpZXMudW5oYW5kbGVkUHJvbXB0QmVoYXZpb3IgPSBkZXNlcmlhbGl6ZVVuaGFuZGxlZFByb21w
dEJlaGF2aW9yKHVuaGFuZGxlZFByb21wdEJlaGF2aW9yKTsKKwogICAgIHBsYXRmb3JtUGFyc2VD
YXBhYmlsaXRpZXMobWF0Y2hlZENhcGFiaWxpdGllcywgY2FwYWJpbGl0aWVzKTsKIH0KIAogYm9v
bCBXZWJEcml2ZXJTZXJ2aWNlOjpmaW5kU2Vzc2lvbk9yQ29tcGxldGVXaXRoRXJyb3IoSlNPTjo6
T2JqZWN0JiBwYXJhbWV0ZXJzLCBGdW5jdGlvbjx2b2lkIChDb21tYW5kUmVzdWx0JiYpPiYgY29t
cGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgU3RyaW5nIHNlc3Npb25JRDsKLSAgICBpZiAoIXBhcmFt
ZXRlcnMuZ2V0U3RyaW5nKCJzZXNzaW9uSWQiX3MsIHNlc3Npb25JRCkpIHsKKyAgICBhdXRvIHNl
c3Npb25JRCA9IHBhcmFtZXRlcnMuZ2V0U3RyaW5nKCJzZXNzaW9uSWQiX3MpOworICAgIGlmICgh
c2Vzc2lvbklEKSB7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZh
aWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpJbnZhbGlkQXJndW1lbnQpKTsKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTUzMCw1MCArNTQwLDUwIEBAIFJlZlB0cjxKU09OOjpP
YmplY3Q+IFdlYkRyaXZlclNlcnZpY2U6OnZhbGlkYXRlZENhcGFiaWxpdGllcyhjb25zdCBKU09O
OjpPYmplY3QmCiB7CiAgICAgLy8gwqc3LjIgUHJvY2Vzc2luZyBDYXBhYmlsaXRpZXMuCiAgICAg
Ly8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmRyaXZlci93ZWJkcml2ZXItc3BlYy5odG1sI2Rm
bi12YWxpZGF0ZS1jYXBhYmlsaXRpZXMKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiByZXN1bHQg
PSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGF1dG8gcmVzdWx0ID0gSlNPTjo6T2JqZWN0
OjpjcmVhdGUoKTsKICAgICBhdXRvIGVuZCA9IGNhcGFiaWxpdGllcy5lbmQoKTsKICAgICBmb3Ig
KGF1dG8gaXQgPSBjYXBhYmlsaXRpZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAg
ICAgIGlmIChpdC0+dmFsdWUtPmlzTnVsbCgpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgIGlmIChpdC0+a2V5ID09ICJhY2NlcHRJbnNlY3VyZUNlcnRzIikgewotICAgICAgICAgICAg
Ym9vbCBhY2NlcHRJbnNlY3VyZUNlcnRzOwotICAgICAgICAgICAgaWYgKCFpdC0+dmFsdWUtPmFz
Qm9vbGVhbihhY2NlcHRJbnNlY3VyZUNlcnRzKSkKKyAgICAgICAgICAgIGF1dG8gYWNjZXB0SW5z
ZWN1cmVDZXJ0cyA9IGl0LT52YWx1ZS0+YXNCb29sZWFuKCk7CisgICAgICAgICAgICBpZiAoIWFj
Y2VwdEluc2VjdXJlQ2VydHMpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAg
ICAgICAgICByZXN1bHQtPnNldEJvb2xlYW4oaXQtPmtleSwgYWNjZXB0SW5zZWN1cmVDZXJ0cyk7
CisgICAgICAgICAgICByZXN1bHQtPnNldEJvb2xlYW4oaXQtPmtleSwgKmFjY2VwdEluc2VjdXJl
Q2VydHMpOwogICAgICAgICB9IGVsc2UgaWYgKGl0LT5rZXkgPT0gImJyb3dzZXJOYW1lIiB8fCBp
dC0+a2V5ID09ICJicm93c2VyVmVyc2lvbiIgfHwgaXQtPmtleSA9PSAicGxhdGZvcm1OYW1lIikg
ewotICAgICAgICAgICAgU3RyaW5nIHN0cmluZ1ZhbHVlOwotICAgICAgICAgICAgaWYgKCFpdC0+
dmFsdWUtPmFzU3RyaW5nKHN0cmluZ1ZhbHVlKSkKKyAgICAgICAgICAgIGF1dG8gc3RyaW5nVmFs
dWUgPSBpdC0+dmFsdWUtPmFzU3RyaW5nKCk7CisgICAgICAgICAgICBpZiAoIXN0cmluZ1ZhbHVl
KQogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICAgICAgcmVzdWx0LT5z
ZXRTdHJpbmcoaXQtPmtleSwgc3RyaW5nVmFsdWUpOwogICAgICAgICB9IGVsc2UgaWYgKGl0LT5r
ZXkgPT0gInBhZ2VMb2FkU3RyYXRlZ3kiKSB7Ci0gICAgICAgICAgICBTdHJpbmcgcGFnZUxvYWRT
dHJhdGVneTsKLSAgICAgICAgICAgIGlmICghaXQtPnZhbHVlLT5hc1N0cmluZyhwYWdlTG9hZFN0
cmF0ZWd5KSB8fCAhZGVzZXJpYWxpemVQYWdlTG9hZFN0cmF0ZWd5KHBhZ2VMb2FkU3RyYXRlZ3kp
KQorICAgICAgICAgICAgYXV0byBwYWdlTG9hZFN0cmF0ZWd5ID0gaXQtPnZhbHVlLT5hc1N0cmlu
ZygpOworICAgICAgICAgICAgaWYgKCFwYWdlTG9hZFN0cmF0ZWd5IHx8ICFkZXNlcmlhbGl6ZVBh
Z2VMb2FkU3RyYXRlZ3kocGFnZUxvYWRTdHJhdGVneSkpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgICAgICAgICByZXN1bHQtPnNldFN0cmluZyhpdC0+a2V5LCBwYWdlTG9h
ZFN0cmF0ZWd5KTsKICAgICAgICAgfSBlbHNlIGlmIChpdC0+a2V5ID09ICJwcm94eSIpIHsKLSAg
ICAgICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHByb3h5OwotICAgICAgICAgICAgaWYgKCFp
dC0+dmFsdWUtPmFzT2JqZWN0KHByb3h5KSB8fCAhZGVzZXJpYWxpemVQcm94eSgqcHJveHkpKQor
ICAgICAgICAgICAgYXV0byBwcm94eSA9IGl0LT52YWx1ZS0+YXNPYmplY3QoKTsKKyAgICAgICAg
ICAgIGlmICghcHJveHkgfHwgIWRlc2VyaWFsaXplUHJveHkoKnByb3h5KSkKICAgICAgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0VmFsdWUoaXQtPmtl
eSwgUmVmUHRyPEpTT046OlZhbHVlPihpdC0+dmFsdWUpKTsKKyAgICAgICAgICAgIHJlc3VsdC0+
c2V0VmFsdWUoaXQtPmtleSwgKnByb3h5KTsKICAgICAgICAgfSBlbHNlIGlmIChpdC0+a2V5ID09
ICJzdHJpY3RGaWxlSW50ZXJhY3RhYmlsaXR5IikgewotICAgICAgICAgICAgYm9vbCBzdHJpY3RG
aWxlSW50ZXJhY3RhYmlsaXR5OwotICAgICAgICAgICAgaWYgKCFpdC0+dmFsdWUtPmFzQm9vbGVh
bihzdHJpY3RGaWxlSW50ZXJhY3RhYmlsaXR5KSkKKyAgICAgICAgICAgIGF1dG8gc3RyaWN0Rmls
ZUludGVyYWN0YWJpbGl0eSA9IGl0LT52YWx1ZS0+YXNCb29sZWFuKCk7CisgICAgICAgICAgICBp
ZiAoIXN0cmljdEZpbGVJbnRlcmFjdGFiaWxpdHkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0gICAgICAgICAgICByZXN1bHQtPnNldEJvb2xlYW4oaXQtPmtleSwgc3RyaWN0Rmls
ZUludGVyYWN0YWJpbGl0eSk7CisgICAgICAgICAgICByZXN1bHQtPnNldEJvb2xlYW4oaXQtPmtl
eSwgKnN0cmljdEZpbGVJbnRlcmFjdGFiaWxpdHkpOwogICAgICAgICB9IGVsc2UgaWYgKGl0LT5r
ZXkgPT0gInRpbWVvdXRzIikgewotICAgICAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gdGlt
ZW91dHM7Ci0gICAgICAgICAgICBpZiAoIWl0LT52YWx1ZS0+YXNPYmplY3QodGltZW91dHMpIHx8
ICFkZXNlcmlhbGl6ZVRpbWVvdXRzKCp0aW1lb3V0cywgSWdub3JlVW5rbm93blRpbWVvdXQ6Ok5v
KSkKKyAgICAgICAgICAgIGF1dG8gdGltZW91dHMgPSBpdC0+dmFsdWUtPmFzT2JqZWN0KCk7Cisg
ICAgICAgICAgICBpZiAoIXRpbWVvdXRzIHx8ICFkZXNlcmlhbGl6ZVRpbWVvdXRzKCp0aW1lb3V0
cywgSWdub3JlVW5rbm93blRpbWVvdXQ6Ok5vKSkKICAgICAgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0VmFsdWUoaXQtPmtleSwgUmVmUHRyPEpTT046
OlZhbHVlPihpdC0+dmFsdWUpKTsKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0VmFsdWUoaXQtPmtl
eSwgKnRpbWVvdXRzKTsKICAgICAgICAgfSBlbHNlIGlmIChpdC0+a2V5ID09ICJ1bmhhbmRsZWRQ
cm9tcHRCZWhhdmlvciIpIHsKLSAgICAgICAgICAgIFN0cmluZyB1bmhhbmRsZWRQcm9tcHRCZWhh
dmlvcjsKLSAgICAgICAgICAgIGlmICghaXQtPnZhbHVlLT5hc1N0cmluZyh1bmhhbmRsZWRQcm9t
cHRCZWhhdmlvcikgfHwgIWRlc2VyaWFsaXplVW5oYW5kbGVkUHJvbXB0QmVoYXZpb3IodW5oYW5k
bGVkUHJvbXB0QmVoYXZpb3IpKQorICAgICAgICAgICAgYXV0byB1bmhhbmRsZWRQcm9tcHRCZWhh
dmlvciA9IGl0LT52YWx1ZS0+YXNTdHJpbmcoKTsKKyAgICAgICAgICAgIGlmICghdW5oYW5kbGVk
UHJvbXB0QmVoYXZpb3IgfHwgIWRlc2VyaWFsaXplVW5oYW5kbGVkUHJvbXB0QmVoYXZpb3IodW5o
YW5kbGVkUHJvbXB0QmVoYXZpb3IpKQogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwog
ICAgICAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoaXQtPmtleSwgdW5oYW5kbGVkUHJvbXB0QmVo
YXZpb3IpOwogICAgICAgICB9IGVsc2UgaWYgKGl0LT5rZXkuZmluZCgiOiIpICE9IG5vdEZvdW5k
KSB7CiAgICAgICAgICAgICBpZiAoIXBsYXRmb3JtVmFsaWRhdGVDYXBhYmlsaXR5KGl0LT5rZXks
IGl0LT52YWx1ZSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgICAg
ICByZXN1bHQtPnNldFZhbHVlKGl0LT5rZXksIFJlZlB0cjxKU09OOjpWYWx1ZT4oaXQtPnZhbHVl
KSk7CisgICAgICAgICAgICByZXN1bHQtPnNldFZhbHVlKGl0LT5rZXksIGl0LT52YWx1ZS5jb3B5
UmVmKCkpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAg
IH0KQEAgLTU4NCwxNCArNTk0LDE0IEBAIFJlZlB0cjxKU09OOjpPYmplY3Q+IFdlYkRyaXZlclNl
cnZpY2U6Om1lcmdlQ2FwYWJpbGl0aWVzKGNvbnN0IEpTT046Ok9iamVjdCYgcmVxCiB7CiAgICAg
Ly8gwqc3LjIgUHJvY2Vzc2luZyBDYXBhYmlsaXRpZXMuCiAgICAgLy8gaHR0cHM6Ly93M2MuZ2l0
aHViLmlvL3dlYmRyaXZlci93ZWJkcml2ZXItc3BlYy5odG1sI2Rmbi1tZXJnaW5nLWNhcGFiaWxp
dGllcwotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3Jl
YXRlKCk7CisgICAgYXV0byByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgIGF1
dG8gcmVxdWlyZWRFbmQgPSByZXF1aXJlZENhcGFiaWxpdGllcy5lbmQoKTsKICAgICBmb3IgKGF1
dG8gaXQgPSByZXF1aXJlZENhcGFiaWxpdGllcy5iZWdpbigpOyBpdCAhPSByZXF1aXJlZEVuZDsg
KytpdCkKLSAgICAgICAgcmVzdWx0LT5zZXRWYWx1ZShpdC0+a2V5LCBSZWZQdHI8SlNPTjo6VmFs
dWU+KGl0LT52YWx1ZSkpOworICAgICAgICByZXN1bHQtPnNldFZhbHVlKGl0LT5rZXksIGl0LT52
YWx1ZS5jb3B5UmVmKCkpOwogCiAgICAgYXV0byBmaXJzdE1hdGNoRW5kID0gZmlyc3RNYXRjaENh
cGFiaWxpdGllcy5lbmQoKTsKICAgICBmb3IgKGF1dG8gaXQgPSBmaXJzdE1hdGNoQ2FwYWJpbGl0
aWVzLmJlZ2luKCk7IGl0ICE9IGZpcnN0TWF0Y2hFbmQ7ICsraXQpCi0gICAgICAgIHJlc3VsdC0+
c2V0VmFsdWUoaXQtPmtleSwgUmVmUHRyPEpTT046OlZhbHVlPihpdC0+dmFsdWUpKTsKKyAgICAg
ICAgcmVzdWx0LT5zZXRWYWx1ZShpdC0+a2V5LCBpdC0+dmFsdWUuY29weVJlZigpKTsKIAogICAg
IHJldHVybiByZXN1bHQ7CiB9CkBAIC02MDQsNyArNjE0LDcgQEAgUmVmUHRyPEpTT046Ok9iamVj
dD4gV2ViRHJpdmVyU2VydmljZTo6bWF0Y2hDYXBhYmlsaXRpZXMoY29uc3QgSlNPTjo6T2JqZWN0
JiBtZXIKIAogICAgIC8vIFNvbWUgY2FwYWJpbGl0aWVzIGxpa2UgYnJvd3NlciBuYW1lIGFuZCB2
ZXJzaW9uIG1pZ2h0IG5lZWQgdG8gbGF1bmNoIHRoZSBicm93c2VyLAogICAgIC8vIHNvIHdlIG9u
bHkgcmVqZWN0IHRoZSBrbm93biBjYXBhYmlsaXRpZXMgdGhhdCBkb24ndCBtYXRjaC4KLSAgICBS
ZWZQdHI8SlNPTjo6T2JqZWN0PiBtYXRjaGVkQ2FwYWJpbGl0aWVzID0gSlNPTjo6T2JqZWN0Ojpj
cmVhdGUoKTsKKyAgICBhdXRvIG1hdGNoZWRDYXBhYmlsaXRpZXMgPSBKU09OOjpPYmplY3Q6OmNy
ZWF0ZSgpOwogICAgIGlmIChwbGF0Zm9ybUNhcGFiaWxpdGllcy5icm93c2VyTmFtZSkKICAgICAg
ICAgbWF0Y2hlZENhcGFiaWxpdGllcy0+c2V0U3RyaW5nKCJicm93c2VyTmFtZSJfcywgcGxhdGZv
cm1DYXBhYmlsaXRpZXMuYnJvd3Nlck5hbWUudmFsdWUoKSk7CiAgICAgaWYgKHBsYXRmb3JtQ2Fw
YWJpbGl0aWVzLmJyb3dzZXJWZXJzaW9uKQpAQCAtNjIxLDM1ICs2MzEsMjggQEAgUmVmUHRyPEpT
T046Ok9iamVjdD4gV2ViRHJpdmVyU2VydmljZTo6bWF0Y2hDYXBhYmlsaXRpZXMoY29uc3QgSlNP
Tjo6T2JqZWN0JiBtZXIKICAgICBhdXRvIGVuZCA9IG1lcmdlZENhcGFiaWxpdGllcy5lbmQoKTsK
ICAgICBmb3IgKGF1dG8gaXQgPSBtZXJnZWRDYXBhYmlsaXRpZXMuYmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KSB7CiAgICAgICAgIGlmIChpdC0+a2V5ID09ICJicm93c2VyTmFtZSIgJiYgcGxhdGZv
cm1DYXBhYmlsaXRpZXMuYnJvd3Nlck5hbWUpIHsKLSAgICAgICAgICAgIFN0cmluZyBicm93c2Vy
TmFtZTsKLSAgICAgICAgICAgIGl0LT52YWx1ZS0+YXNTdHJpbmcoYnJvd3Nlck5hbWUpOworICAg
ICAgICAgICAgYXV0byBicm93c2VyTmFtZSA9IGl0LT52YWx1ZS0+YXNTdHJpbmcoKTsKICAgICAg
ICAgICAgIGlmICghZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShwbGF0Zm9ybUNhcGFiaWxpdGllcy5i
cm93c2VyTmFtZS52YWx1ZSgpLCBicm93c2VyTmFtZSkpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgICAgIH0gZWxzZSBpZiAoaXQtPmtleSA9PSAiYnJvd3NlclZlcnNpb24i
ICYmIHBsYXRmb3JtQ2FwYWJpbGl0aWVzLmJyb3dzZXJWZXJzaW9uKSB7Ci0gICAgICAgICAgICBT
dHJpbmcgYnJvd3NlclZlcnNpb247Ci0gICAgICAgICAgICBpdC0+dmFsdWUtPmFzU3RyaW5nKGJy
b3dzZXJWZXJzaW9uKTsKKyAgICAgICAgICAgIGF1dG8gYnJvd3NlclZlcnNpb24gPSBpdC0+dmFs
dWUtPmFzU3RyaW5nKCk7CiAgICAgICAgICAgICBpZiAoIXBsYXRmb3JtQ29tcGFyZUJyb3dzZXJW
ZXJzaW9ucyhicm93c2VyVmVyc2lvbiwgcGxhdGZvcm1DYXBhYmlsaXRpZXMuYnJvd3NlclZlcnNp
b24udmFsdWUoKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIH0g
ZWxzZSBpZiAoaXQtPmtleSA9PSAicGxhdGZvcm1OYW1lIiAmJiBwbGF0Zm9ybUNhcGFiaWxpdGll
cy5wbGF0Zm9ybU5hbWUpIHsKLSAgICAgICAgICAgIFN0cmluZyBwbGF0Zm9ybU5hbWU7Ci0gICAg
ICAgICAgICBpdC0+dmFsdWUtPmFzU3RyaW5nKHBsYXRmb3JtTmFtZSk7CisgICAgICAgICAgICBh
dXRvIHBsYXRmb3JtTmFtZSA9IGl0LT52YWx1ZS0+YXNTdHJpbmcoKTsKICAgICAgICAgICAgIGlm
ICghZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UocGxhdGZvcm1OYW1lLCAiYW55IikgJiYg
cGxhdGZvcm1DYXBhYmlsaXRpZXMucGxhdGZvcm1OYW1lLnZhbHVlKCkgIT0gcGxhdGZvcm1OYW1l
KQogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICB9IGVsc2UgaWYgKGl0
LT5rZXkgPT0gImFjY2VwdEluc2VjdXJlQ2VydHMiICYmIHBsYXRmb3JtQ2FwYWJpbGl0aWVzLmFj
Y2VwdEluc2VjdXJlQ2VydHMpIHsKLSAgICAgICAgICAgIGJvb2wgYWNjZXB0SW5zZWN1cmVDZXJ0
czsKLSAgICAgICAgICAgIGl0LT52YWx1ZS0+YXNCb29sZWFuKGFjY2VwdEluc2VjdXJlQ2VydHMp
OworICAgICAgICAgICAgYXV0byBhY2NlcHRJbnNlY3VyZUNlcnRzID0gaXQtPnZhbHVlLT5hc0Jv
b2xlYW4oKTsKICAgICAgICAgICAgIGlmIChhY2NlcHRJbnNlY3VyZUNlcnRzICYmICFwbGF0Zm9y
bUNhcGFiaWxpdGllcy5hY2NlcHRJbnNlY3VyZUNlcnRzLnZhbHVlKCkpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIH0gZWxzZSBpZiAoaXQtPmtleSA9PSAicHJveHki
KSB7Ci0gICAgICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwcm94eTsKLSAgICAgICAgICAg
IGl0LT52YWx1ZS0+YXNPYmplY3QocHJveHkpOwotICAgICAgICAgICAgU3RyaW5nIHByb3h5VHlw
ZTsKLSAgICAgICAgICAgIHByb3h5LT5nZXRTdHJpbmcoInByb3h5VHlwZSJfcywgcHJveHlUeXBl
KTsKKyAgICAgICAgICAgIGF1dG8gcHJveHlUeXBlID0gaXQtPnZhbHVlLT5hc09iamVjdCgpLT5n
ZXRTdHJpbmcoInByb3h5VHlwZSJfcyk7CiAgICAgICAgICAgICBpZiAoIXBsYXRmb3JtU3VwcG9y
dFByb3h5VHlwZShwcm94eVR5cGUpKQogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwog
ICAgICAgICB9IGVsc2UgaWYgKCFwbGF0Zm9ybU1hdGNoQ2FwYWJpbGl0eShpdC0+a2V5LCBpdC0+
dmFsdWUpKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIG1hdGNoZWRDYXBh
YmlsaXRpZXMtPnNldFZhbHVlKGl0LT5rZXksIFJlZlB0cjxKU09OOjpWYWx1ZT4oaXQtPnZhbHVl
KSk7CisgICAgICAgIG1hdGNoZWRDYXBhYmlsaXRpZXMtPnNldFZhbHVlKGl0LT5rZXksIGl0LT52
YWx1ZS5jb3B5UmVmKCkpOwogICAgIH0KIAogICAgIHJldHVybiBtYXRjaGVkQ2FwYWJpbGl0aWVz
OwpAQCAtNjYxLDE5ICs2NjQsMTkgQEAgVmVjdG9yPENhcGFiaWxpdGllcz4gV2ViRHJpdmVyU2Vy
dmljZTo6cHJvY2Vzc0NhcGFiaWxpdGllcyhjb25zdCBKU09OOjpPYmplY3QmIHAKICAgICAvLyBo
dHRwczovL3czYy5naXRodWIuaW8vd2ViZHJpdmVyL3dlYmRyaXZlci1zcGVjLmh0bWwjcHJvY2Vz
c2luZy1jYXBhYmlsaXRpZXMKIAogICAgIC8vIDEuIExldCBjYXBhYmlsaXRpZXMgcmVxdWVzdCBi
ZSB0aGUgcmVzdWx0IG9mIGdldHRpbmcgdGhlIHByb3BlcnR5ICJjYXBhYmlsaXRpZXMiIGZyb20g
cGFyYW1ldGVycy4KLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBjYXBhYmlsaXRpZXNPYmplY3Q7
Ci0gICAgaWYgKCFwYXJhbWV0ZXJzLmdldE9iamVjdCgiY2FwYWJpbGl0aWVzIl9zLCBjYXBhYmls
aXRpZXNPYmplY3QpKSB7CisgICAgYXV0byBjYXBhYmlsaXRpZXNPYmplY3QgPSBwYXJhbWV0ZXJz
LmdldE9iamVjdCgiY2FwYWJpbGl0aWVzIl9zKTsKKyAgICBpZiAoIWNhcGFiaWxpdGllc09iamVj
dCkgewogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1h
bmRSZXN1bHQ6OkVycm9yQ29kZTo6SW52YWxpZEFyZ3VtZW50KSk7CiAgICAgICAgIHJldHVybiB7
IH07CiAgICAgfQogCiAgICAgLy8gMi4gTGV0IHJlcXVpcmVkIGNhcGFiaWxpdGllcyBiZSB0aGUg
cmVzdWx0IG9mIGdldHRpbmcgdGhlIHByb3BlcnR5ICJhbHdheXNNYXRjaCIgZnJvbSBjYXBhYmls
aXRpZXMgcmVxdWVzdC4KLSAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHJlcXVpcmVkQ2FwYWJpbGl0
aWVzVmFsdWU7CiAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcmVxdWlyZWRDYXBhYmlsaXRpZXM7
Ci0gICAgaWYgKCFjYXBhYmlsaXRpZXNPYmplY3QtPmdldFZhbHVlKCJhbHdheXNNYXRjaCJfcywg
cmVxdWlyZWRDYXBhYmlsaXRpZXNWYWx1ZSkpCisgICAgYXV0byByZXF1aXJlZENhcGFiaWxpdGll
c1ZhbHVlID0gY2FwYWJpbGl0aWVzT2JqZWN0LT5nZXRWYWx1ZSgiYWx3YXlzTWF0Y2giX3MpOwor
ICAgIGlmICghcmVxdWlyZWRDYXBhYmlsaXRpZXNWYWx1ZSkgewogICAgICAgICAvLyAyLjEuIElm
IHJlcXVpcmVkIGNhcGFiaWxpdGllcyBpcyB1bmRlZmluZWQsIHNldCB0aGUgdmFsdWUgdG8gYW4g
ZW1wdHkgSlNPTiBPYmplY3QuCiAgICAgICAgIHJlcXVpcmVkQ2FwYWJpbGl0aWVzID0gSlNPTjo6
T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBlbHNlIGlmICghcmVxdWlyZWRDYXBhYmlsaXRpZXNWYWx1
ZS0+YXNPYmplY3QocmVxdWlyZWRDYXBhYmlsaXRpZXMpKSB7CisgICAgfSBlbHNlIGlmICghKHJl
cXVpcmVkQ2FwYWJpbGl0aWVzID0gcmVxdWlyZWRDYXBhYmlsaXRpZXNWYWx1ZS0+YXNPYmplY3Qo
KSkpIHsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21t
YW5kUmVzdWx0OjpFcnJvckNvZGU6OkludmFsaWRBcmd1bWVudCwgU3RyaW5nKCJhbHdheXNNYXRj
aCBpcyBpbnZhbGlkIGluIGNhcGFiaWxpdGllcyIpKSk7CiAgICAgICAgIHJldHVybiB7IH07CiAg
ICAgfQpAQCAtNjg2LDEzICs2ODksMTMgQEAgVmVjdG9yPENhcGFiaWxpdGllcz4gV2ViRHJpdmVy
U2VydmljZTo6cHJvY2Vzc0NhcGFiaWxpdGllcyhjb25zdCBKU09OOjpPYmplY3QmIHAKICAgICB9
CiAKICAgICAvLyAzLiBMZXQgYWxsIGZpcnN0IG1hdGNoIGNhcGFiaWxpdGllcyBiZSB0aGUgcmVz
dWx0IG9mIGdldHRpbmcgdGhlIHByb3BlcnR5ICJmaXJzdE1hdGNoIiBmcm9tIGNhcGFiaWxpdGll
cyByZXF1ZXN0LgotICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gZmlyc3RNYXRjaENhcGFiaWxpdGll
c1ZhbHVlOwogICAgIFJlZlB0cjxKU09OOjpBcnJheT4gZmlyc3RNYXRjaENhcGFiaWxpdGllc0xp
c3Q7Ci0gICAgaWYgKCFjYXBhYmlsaXRpZXNPYmplY3QtPmdldFZhbHVlKCJmaXJzdE1hdGNoIl9z
LCBmaXJzdE1hdGNoQ2FwYWJpbGl0aWVzVmFsdWUpKSB7CisgICAgYXV0byBmaXJzdE1hdGNoQ2Fw
YWJpbGl0aWVzVmFsdWUgPSBjYXBhYmlsaXRpZXNPYmplY3QtPmdldFZhbHVlKCJmaXJzdE1hdGNo
Il9zKTsKKyAgICBpZiAoIWZpcnN0TWF0Y2hDYXBhYmlsaXRpZXNWYWx1ZSkgewogICAgICAgICAv
LyAzLjEuIElmIGFsbCBmaXJzdCBtYXRjaCBjYXBhYmlsaXRpZXMgaXMgdW5kZWZpbmVkLCBzZXQg
dGhlIHZhbHVlIHRvIGEgSlNPTiBMaXN0IHdpdGggYSBzaW5nbGUgZW50cnkgb2YgYW4gZW1wdHkg
SlNPTiBPYmplY3QuCiAgICAgICAgIGZpcnN0TWF0Y2hDYXBhYmlsaXRpZXNMaXN0ID0gSlNPTjo6
QXJyYXk6OmNyZWF0ZSgpOwogICAgICAgICBmaXJzdE1hdGNoQ2FwYWJpbGl0aWVzTGlzdC0+cHVz
aE9iamVjdChKU09OOjpPYmplY3Q6OmNyZWF0ZSgpKTsKLSAgICB9IGVsc2UgaWYgKCFmaXJzdE1h
dGNoQ2FwYWJpbGl0aWVzVmFsdWUtPmFzQXJyYXkoZmlyc3RNYXRjaENhcGFiaWxpdGllc0xpc3Qp
KSB7CisgICAgfSBlbHNlIGlmICghKGZpcnN0TWF0Y2hDYXBhYmlsaXRpZXNMaXN0ID0gZmlyc3RN
YXRjaENhcGFiaWxpdGllc1ZhbHVlLT5hc0FycmF5KCkpKSB7CiAgICAgICAgIC8vIDMuMi4gSWYg
YWxsIGZpcnN0IG1hdGNoIGNhcGFiaWxpdGllcyBpcyBub3QgYSBKU09OIExpc3QsIHJldHVybiBl
cnJvciB3aXRoIGVycm9yIGNvZGUgaW52YWxpZCBhcmd1bWVudC4KICAgICAgICAgY29tcGxldGlv
bkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6Oklu
dmFsaWRBcmd1bWVudCwgU3RyaW5nKCJmaXJzdE1hdGNoIGlzIGludmFsaWQgaW4gY2FwYWJpbGl0
aWVzIikpKTsKICAgICAgICAgcmV0dXJuIHsgfTsKQEAgLTcwNCw5ICs3MDcsOCBAQCBWZWN0b3I8
Q2FwYWJpbGl0aWVzPiBXZWJEcml2ZXJTZXJ2aWNlOjpwcm9jZXNzQ2FwYWJpbGl0aWVzKGNvbnN0
IEpTT046Ok9iamVjdCYgcAogICAgIHZhbGlkYXRlZEZpcnN0TWF0Y2hDYXBhYmlsaXRpZXNMaXN0
LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoZmlyc3RNYXRjaENhcGFiaWxpdGllc0xpc3RMZW5ndGgp
OwogICAgIC8vIDUuIEZvciBlYWNoIGZpcnN0IG1hdGNoIGNhcGFiaWxpdGllcyBjb3JyZXNwb25k
aW5nIHRvIGFuIGluZGV4ZWQgcHJvcGVydHkgaW4gYWxsIGZpcnN0IG1hdGNoIGNhcGFiaWxpdGll
cy4KICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZmlyc3RNYXRjaENhcGFiaWxpdGllc0xp
c3RMZW5ndGg7ICsraSkgewotICAgICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IGZpcnN0TWF0Y2hD
YXBhYmlsaXRpZXNWYWx1ZSA9IGZpcnN0TWF0Y2hDYXBhYmlsaXRpZXNMaXN0LT5nZXQoaSk7Ci0g
ICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IGZpcnN0TWF0Y2hDYXBhYmlsaXRpZXM7Ci0gICAg
ICAgIGlmICghZmlyc3RNYXRjaENhcGFiaWxpdGllc1ZhbHVlLT5hc09iamVjdChmaXJzdE1hdGNo
Q2FwYWJpbGl0aWVzKSkgeworICAgICAgICBhdXRvIGZpcnN0TWF0Y2hDYXBhYmlsaXRpZXMgPSBm
aXJzdE1hdGNoQ2FwYWJpbGl0aWVzTGlzdC0+Z2V0KGkpLT5hc09iamVjdCgpOworICAgICAgICBp
ZiAoIWZpcnN0TWF0Y2hDYXBhYmlsaXRpZXMpIHsKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5k
bGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpJbnZhbGlk
QXJndW1lbnQsIFN0cmluZygiSW52YWxpZCBjYXBhYmlsaXRpZXMgZm91bmQgaW4gZmlyc3RNYXRj
aCIpKSk7CiAgICAgICAgICAgICByZXR1cm4geyB9OwogICAgICAgICB9CkBAIC04MTUsOSArODE3
LDkgQEAgdm9pZCBXZWJEcml2ZXJTZXJ2aWNlOjpjcmVhdGVTZXNzaW9uKFZlY3RvcjxDYXBhYmls
aXRpZXM+JiYgY2FwYWJpbGl0aWVzTGlzdCwgc3QKIAogICAgICAgICAgICAgbV9zZXNzaW9uID0g
V1RGTW92ZShzZXNzaW9uKTsKIAotICAgICAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcmVz
dWx0T2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgICAgIGF1dG8gcmVz
dWx0T2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICAgICAgIHJlc3VsdE9i
amVjdC0+c2V0U3RyaW5nKCJzZXNzaW9uSWQiX3MsIG1fc2Vzc2lvbi0+aWQoKSk7Ci0gICAgICAg
ICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBjYXBhYmlsaXRpZXNPYmplY3QgPSBKU09OOjpPYmpl
Y3Q6OmNyZWF0ZSgpOworICAgICAgICAgICAgYXV0byBjYXBhYmlsaXRpZXNPYmplY3QgPSBKU09O
OjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICAgICAgY29uc3QgYXV0byYgY2FwYWJpbGl0aWVz
ID0gbV9zZXNzaW9uLT5jYXBhYmlsaXRpZXMoKTsKICAgICAgICAgICAgIGNhcGFiaWxpdGllc09i
amVjdC0+c2V0U3RyaW5nKCJicm93c2VyTmFtZSJfcywgY2FwYWJpbGl0aWVzLmJyb3dzZXJOYW1l
LnZhbHVlT3IoZW1wdHlTdHJpbmcoKSkpOwogICAgICAgICAgICAgY2FwYWJpbGl0aWVzT2JqZWN0
LT5zZXRTdHJpbmcoImJyb3dzZXJWZXJzaW9uIl9zLCBjYXBhYmlsaXRpZXMuYnJvd3NlclZlcnNp
b24udmFsdWVPcihlbXB0eVN0cmluZygpKSk7CkBAIC04NTUsNyArODU3LDcgQEAgdm9pZCBXZWJE
cml2ZXJTZXJ2aWNlOjpjcmVhdGVTZXNzaW9uKFZlY3RvcjxDYXBhYmlsaXRpZXM+JiYgY2FwYWJp
bGl0aWVzTGlzdCwgc3QKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmICghY2FwYWJpbGl0
aWVzLnByb3h5KQogICAgICAgICAgICAgICAgIGNhcGFiaWxpdGllc09iamVjdC0+c2V0T2JqZWN0
KCJwcm94eSJfcywgSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSk7Ci0gICAgICAgICAgICBSZWZQdHI8
SlNPTjo6T2JqZWN0PiB0aW1lb3V0c09iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Cisg
ICAgICAgICAgICBhdXRvIHRpbWVvdXRzT2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsK
ICAgICAgICAgICAgIGlmIChtX3Nlc3Npb24tPnNjcmlwdFRpbWVvdXQoKSA9PSBzdGQ6Om51bWVy
aWNfbGltaXRzPGRvdWJsZT46OmluZmluaXR5KCkpCiAgICAgICAgICAgICAgICAgdGltZW91dHNP
YmplY3QtPnNldFZhbHVlKCJzY3JpcHQiX3MsIEpTT046OlZhbHVlOjpudWxsKCkpOwogICAgICAg
ICAgICAgZWxzZQpAQCAtODc0LDggKzg3Niw4IEBAIHZvaWQgV2ViRHJpdmVyU2VydmljZTo6ZGVs
ZXRlU2Vzc2lvbihSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMsIEZ1bmN0aW9uCiB7
CiAgICAgLy8gwqc4LjIgRGVsZXRlIFNlc3Npb24uCiAgICAgLy8gaHR0cHM6Ly93d3cudzMub3Jn
L1RSL3dlYmRyaXZlci8jZGVsZXRlLXNlc3Npb24KLSAgICBTdHJpbmcgc2Vzc2lvbklEOwotICAg
IGlmICghcGFyYW1ldGVycy0+Z2V0U3RyaW5nKCJzZXNzaW9uSWQiX3MsIHNlc3Npb25JRCkpIHsK
KyAgICBhdXRvIHNlc3Npb25JRCA9IHBhcmFtZXRlcnMtPmdldFN0cmluZygic2Vzc2lvbklkIl9z
KTsKKyAgICBpZiAoIXNlc3Npb25JRCkgewogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21t
YW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6SW52YWxpZEFyZ3VtZW50
KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC05MzgsOCArOTQwLDggQEAgdm9pZCBXZWJE
cml2ZXJTZXJ2aWNlOjpnbyhSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMsIEZ1bmN0
aW9uPHZvaWQgKENvbW0KICAgICBpZiAoIWZpbmRTZXNzaW9uT3JDb21wbGV0ZVdpdGhFcnJvcigq
cGFyYW1ldGVycywgY29tcGxldGlvbkhhbmRsZXIpKQogICAgICAgICByZXR1cm47CiAKLSAgICBT
dHJpbmcgdXJsOwotICAgIGlmICghcGFyYW1ldGVycy0+Z2V0U3RyaW5nKCJ1cmwiX3MsIHVybCkp
IHsKKyAgICBhdXRvIHVybCA9IHBhcmFtZXRlcnMtPmdldFN0cmluZygidXJsIl9zKTsKKyAgICBp
ZiAoIXVybCkgewogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWls
KENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6SW52YWxpZEFyZ3VtZW50KSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CkBAIC0xMDUzLDkgKzEwNTUsOCBAQCB2b2lkIFdlYkRyaXZlclNlcnZpY2U6
OnNldFdpbmRvd1JlY3QoUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzLCBGdW5jdGlv
bgogewogICAgIC8vIMKnMTAuNy4yIFNldCBXaW5kb3cgUmVjdC4KICAgICAvLyBodHRwczovL3cz
Yy5naXRodWIuaW8vd2ViZHJpdmVyL3dlYmRyaXZlci1zcGVjLmh0bWwjc2V0LXdpbmRvdy1yZWN0
Ci0gICAgUmVmUHRyPEpTT046OlZhbHVlPiB2YWx1ZTsKICAgICBPcHRpb25hbDxkb3VibGU+IHdp
ZHRoOwotICAgIGlmIChwYXJhbWV0ZXJzLT5nZXRWYWx1ZSgid2lkdGgiX3MsIHZhbHVlKSkgewor
ICAgIGlmIChhdXRvIHZhbHVlID0gcGFyYW1ldGVycy0+Z2V0VmFsdWUoIndpZHRoIl9zKSkgewog
ICAgICAgICBpZiAoYXV0byBudW1iZXIgPSB2YWx1ZUFzTnVtYmVySW5SYW5nZSgqdmFsdWUpKQog
ICAgICAgICAgICAgd2lkdGggPSBudW1iZXI7CiAgICAgICAgIGVsc2UgaWYgKCF2YWx1ZS0+aXNO
dWxsKCkpIHsKQEAgLTEwNjQsNyArMTA2NSw3IEBAIHZvaWQgV2ViRHJpdmVyU2VydmljZTo6c2V0
V2luZG93UmVjdChSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMsIEZ1bmN0aW9uCiAg
ICAgICAgIH0KICAgICB9CiAgICAgT3B0aW9uYWw8ZG91YmxlPiBoZWlnaHQ7Ci0gICAgaWYgKHBh
cmFtZXRlcnMtPmdldFZhbHVlKCJoZWlnaHQiX3MsIHZhbHVlKSkgeworICAgIGlmIChhdXRvIHZh
bHVlID0gcGFyYW1ldGVycy0+Z2V0VmFsdWUoImhlaWdodCJfcykpIHsKICAgICAgICAgaWYgKGF1
dG8gbnVtYmVyID0gdmFsdWVBc051bWJlckluUmFuZ2UoKnZhbHVlKSkKICAgICAgICAgICAgIGhl
aWdodCA9IG51bWJlcjsKICAgICAgICAgZWxzZSBpZiAoIXZhbHVlLT5pc051bGwoKSkgewpAQCAt
MTA3Myw3ICsxMDc0LDcgQEAgdm9pZCBXZWJEcml2ZXJTZXJ2aWNlOjpzZXRXaW5kb3dSZWN0KFJl
ZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycywgRnVuY3Rpb24KICAgICAgICAgfQogICAg
IH0KICAgICBPcHRpb25hbDxkb3VibGU+IHg7Ci0gICAgaWYgKHBhcmFtZXRlcnMtPmdldFZhbHVl
KCJ4Il9zLCB2YWx1ZSkpIHsKKyAgICBpZiAoYXV0byB2YWx1ZSA9IHBhcmFtZXRlcnMtPmdldFZh
bHVlKCJ4Il9zKSkgewogICAgICAgICBpZiAoYXV0byBudW1iZXIgPSB2YWx1ZUFzTnVtYmVySW5S
YW5nZSgqdmFsdWUsIElOVF9NSU4pKQogICAgICAgICAgICAgeCA9IG51bWJlcjsKICAgICAgICAg
ZWxzZSBpZiAoIXZhbHVlLT5pc051bGwoKSkgewpAQCAtMTA4Miw3ICsxMDgzLDcgQEAgdm9pZCBX
ZWJEcml2ZXJTZXJ2aWNlOjpzZXRXaW5kb3dSZWN0KFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFy
YW1ldGVycywgRnVuY3Rpb24KICAgICAgICAgfQogICAgIH0KICAgICBPcHRpb25hbDxkb3VibGU+
IHk7Ci0gICAgaWYgKHBhcmFtZXRlcnMtPmdldFZhbHVlKCJ5Il9zLCB2YWx1ZSkpIHsKKyAgICBp
ZiAoYXV0byB2YWx1ZSA9IHBhcmFtZXRlcnMtPmdldFZhbHVlKCJ5Il9zKSkgewogICAgICAgICBp
ZiAoYXV0byBudW1iZXIgPSB2YWx1ZUFzTnVtYmVySW5SYW5nZSgqdmFsdWUsIElOVF9NSU4pKQog
ICAgICAgICAgICAgeSA9IG51bWJlcjsKICAgICAgICAgZWxzZSBpZiAoIXZhbHVlLT5pc051bGwo
KSkgewpAQCAtMTEzNSw4ICsxMTM2LDggQEAgdm9pZCBXZWJEcml2ZXJTZXJ2aWNlOjpjbG9zZVdp
bmRvdyhSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMsIEZ1bmN0aW9uPHYKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIFJlZlB0cjxKU09OOjpBcnJheT4g
aGFuZGxlczsKLSAgICAgICAgaWYgKHJlc3VsdC5yZXN1bHQoKS0+YXNBcnJheShoYW5kbGVzKSAm
JiAhaGFuZGxlcy0+bGVuZ3RoKCkpCisgICAgICAgIGF1dG8gaGFuZGxlcyA9IHJlc3VsdC5yZXN1
bHQoKS0+YXNBcnJheSgpOworICAgICAgICBpZiAoaGFuZGxlcyAmJiAhaGFuZGxlcy0+bGVuZ3Ro
KCkpCiAgICAgICAgICAgICBtX3Nlc3Npb24gPSBudWxscHRyOwogCiAgICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKFdURk1vdmUocmVzdWx0KSk7CkBAIC0xMTUwLDggKzExNTEsOCBAQCB2b2lkIFdl
YkRyaXZlclNlcnZpY2U6OnN3aXRjaFRvV2luZG93KFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFy
YW1ldGVycywgRnVuY3RpbwogICAgIGlmICghZmluZFNlc3Npb25PckNvbXBsZXRlV2l0aEVycm9y
KCpwYXJhbWV0ZXJzLCBjb21wbGV0aW9uSGFuZGxlcikpCiAgICAgICAgIHJldHVybjsKIAotICAg
IFN0cmluZyBoYW5kbGU7Ci0gICAgaWYgKCFwYXJhbWV0ZXJzLT5nZXRTdHJpbmcoImhhbmRsZSJf
cywgaGFuZGxlKSkgeworICAgIGF1dG8gaGFuZGxlID0gcGFyYW1ldGVycy0+Z2V0U3RyaW5nKCJo
YW5kbGUiX3MpOworICAgIGlmICghaGFuZGxlKSB7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVy
KENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpJbnZhbGlkQXJn
dW1lbnQpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTExNzUsMTMgKzExNzYsMTEgQEAg
dm9pZCBXZWJEcml2ZXJTZXJ2aWNlOjpuZXdXaW5kb3coUmVmUHRyPEpTT046Ok9iamVjdD4mJiBw
YXJhbWV0ZXJzLCBGdW5jdGlvbjx2b2kKICAgICAgICAgcmV0dXJuOwogCiAgICAgT3B0aW9uYWw8
U3RyaW5nPiB0eXBlSGludDsKLSAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHZhbHVlOwotICAgIGlm
IChwYXJhbWV0ZXJzLT5nZXRWYWx1ZSgidHlwZSJfcywgdmFsdWUpKSB7Ci0gICAgICAgIFN0cmlu
ZyB2YWx1ZVN0cmluZzsKLSAgICAgICAgaWYgKHZhbHVlLT5hc1N0cmluZyh2YWx1ZVN0cmluZykp
IHsKLSAgICAgICAgICAgIGlmICh2YWx1ZVN0cmluZyA9PSAid2luZG93IiB8fCB2YWx1ZVN0cmlu
ZyA9PSAidGFiIikKLSAgICAgICAgICAgICAgICB0eXBlSGludCA9IHZhbHVlU3RyaW5nOwotICAg
ICAgICB9IGVsc2UgaWYgKCF2YWx1ZS0+aXNOdWxsKCkpIHsKKyAgICBpZiAoYXV0byB2YWx1ZSA9
IHBhcmFtZXRlcnMtPmdldFZhbHVlKCJ0eXBlIl9zKSkgeworICAgICAgICBhdXRvIHZhbHVlU3Ry
aW5nID0gdmFsdWUtPmFzU3RyaW5nKCk7CisgICAgICAgIGlmICh2YWx1ZVN0cmluZyA9PSAid2lu
ZG93IiB8fCB2YWx1ZVN0cmluZyA9PSAidGFiIikKKyAgICAgICAgICAgIHR5cGVIaW50ID0gdmFs
dWVTdHJpbmc7CisgICAgICAgIGVsc2UgaWYgKCF2YWx1ZS0+aXNOdWxsKCkpIHsKICAgICAgICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6
RXJyb3JDb2RlOjpJbnZhbGlkQXJndW1lbnQpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQpAQCAtMTE5Nyw4ICsxMTk2LDggQEAgdm9pZCBXZWJEcml2ZXJTZXJ2aWNlOjpzd2l0Y2hU
b0ZyYW1lKFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycywgRnVuY3Rpb24KICAgICBp
ZiAoIWZpbmRTZXNzaW9uT3JDb21wbGV0ZVdpdGhFcnJvcigqcGFyYW1ldGVycywgY29tcGxldGlv
bkhhbmRsZXIpKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IGZy
YW1lSUQ7Ci0gICAgaWYgKCFwYXJhbWV0ZXJzLT5nZXRWYWx1ZSgiaWQiX3MsIGZyYW1lSUQpKSB7
CisgICAgYXV0byBmcmFtZUlEID0gcGFyYW1ldGVycy0+Z2V0VmFsdWUoImlkIl9zKTsKKyAgICBp
ZiAoIWZyYW1lSUQpIHsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6
ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OkludmFsaWRBcmd1bWVudCkpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQpAQCAtMTIxNCw4ICsxMjEzLDcgQEAgdm9pZCBXZWJEcml2ZXJTZXJ2
aWNlOjpzd2l0Y2hUb0ZyYW1lKFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycywgRnVu
Y3Rpb24KICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICBjYXNlIEpTT046OlZhbHVlOjpU
eXBlOjpPYmplY3Q6IHsKLSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gZnJhbWVJRE9iamVj
dDsKLSAgICAgICAgZnJhbWVJRC0+YXNPYmplY3QoZnJhbWVJRE9iamVjdCk7CisgICAgICAgIGF1
dG8gZnJhbWVJRE9iamVjdCA9IGZyYW1lSUQtPmFzT2JqZWN0KCk7CiAgICAgICAgIGlmIChmcmFt
ZUlET2JqZWN0LT5maW5kKFNlc3Npb246OndlYkVsZW1lbnRJZGVudGlmaWVyKCkpID09IGZyYW1l
SURPYmplY3QtPmVuZCgpKSB7CiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5k
UmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6SW52YWxpZEFyZ3VtZW50KSk7
CiAgICAgICAgICAgICByZXR1cm47CkBAIC0xMjU2LDggKzEyNTQsOCBAQCB2b2lkIFdlYkRyaXZl
clNlcnZpY2U6OnN3aXRjaFRvUGFyZW50RnJhbWUoUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJh
bWV0ZXJzLCBGdQogCiBzdGF0aWMgT3B0aW9uYWw8U3RyaW5nPiBmaW5kRWxlbWVudE9yQ29tcGxl
dGVXaXRoRXJyb3IoSlNPTjo6T2JqZWN0JiBwYXJhbWV0ZXJzLCBGdW5jdGlvbjx2b2lkIChDb21t
YW5kUmVzdWx0JiYpPiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgU3RyaW5nIGVsZW1lbnRJ
RDsKLSAgICBpZiAoIXBhcmFtZXRlcnMuZ2V0U3RyaW5nKCJlbGVtZW50SWQiX3MsIGVsZW1lbnRJ
RCkgfHwgZWxlbWVudElELmlzRW1wdHkoKSkgeworICAgIGF1dG8gZWxlbWVudElEID0gcGFyYW1l
dGVycy5nZXRTdHJpbmcoImVsZW1lbnRJZCJfcyk7CisgICAgaWYgKGVsZW1lbnRJRC5pc0VtcHR5
KCkpIHsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21t
YW5kUmVzdWx0OjpFcnJvckNvZGU6OkludmFsaWRBcmd1bWVudCkpOwogICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwogICAgIH0KQEAgLTEyNzcsMTEgKzEyNzUsMTMgQEAgc3RhdGljIGlubGlu
ZSBib29sIGlzVmFsaWRTdHJhdGVneShjb25zdCBTdHJpbmcmIHN0cmF0ZWd5KQogCiBzdGF0aWMg
Ym9vbCBmaW5kU3RyYXRlZ3lBbmRTZWxlY3Rvck9yQ29tcGxldGVXaXRoRXJyb3IoSlNPTjo6T2Jq
ZWN0JiBwYXJhbWV0ZXJzLCBGdW5jdGlvbjx2b2lkIChDb21tYW5kUmVzdWx0JiYpPiYgY29tcGxl
dGlvbkhhbmRsZXIsIFN0cmluZyYgc3RyYXRlZ3ksIFN0cmluZyYgc2VsZWN0b3IpCiB7Ci0gICAg
aWYgKCFwYXJhbWV0ZXJzLmdldFN0cmluZygidXNpbmciX3MsIHN0cmF0ZWd5KSB8fCAhaXNWYWxp
ZFN0cmF0ZWd5KHN0cmF0ZWd5KSkgeworICAgIHN0cmF0ZWd5ID0gcGFyYW1ldGVycy5nZXRTdHJp
bmcoInVzaW5nIl9zKTsKKyAgICBpZiAoIWlzVmFsaWRTdHJhdGVneShzdHJhdGVneSkpIHsKICAg
ICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0
OjpFcnJvckNvZGU6OkludmFsaWRBcmd1bWVudCkpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgfQotICAgIGlmICghcGFyYW1ldGVycy5nZXRTdHJpbmcoInZhbHVlIl9zLCBzZWxlY3Rvcikp
IHsKKyAgICBzZWxlY3RvciA9IHBhcmFtZXRlcnMuZ2V0U3RyaW5nKCJ2YWx1ZSJfcyk7CisgICAg
aWYgKCFzZWxlY3RvcikgewogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0
OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6SW52YWxpZEFyZ3VtZW50KSk7CiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICB9CkBAIC0xNDA1LDggKzE0MDUsOCBAQCB2b2lkIFdlYkRy
aXZlclNlcnZpY2U6OmdldEVsZW1lbnRBdHRyaWJ1dGUoUmVmUHRyPEpTT046Ok9iamVjdD4mJiBw
YXJhbWV0ZXJzLCBGdQogICAgIGlmICghZWxlbWVudElEKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBTdHJpbmcgYXR0cmlidXRlOwotICAgIGlmICghcGFyYW1ldGVycy0+Z2V0U3RyaW5nKCJuYW1l
Il9zLCBhdHRyaWJ1dGUpKSB7CisgICAgYXV0byBhdHRyaWJ1dGUgPSBwYXJhbWV0ZXJzLT5nZXRT
dHJpbmcoIm5hbWUiX3MpOworICAgIGlmICghYXR0cmlidXRlKSB7CiAgICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpJ
bnZhbGlkQXJndW1lbnQpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTE0MjUsOCArMTQy
NSw4IEBAIHZvaWQgV2ViRHJpdmVyU2VydmljZTo6Z2V0RWxlbWVudFByb3BlcnR5KFJlZlB0cjxK
U09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycywgRnVuCiAgICAgaWYgKCFlbGVtZW50SUQpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIFN0cmluZyBhdHRyaWJ1dGU7Ci0gICAgaWYgKCFwYXJhbWV0ZXJz
LT5nZXRTdHJpbmcoIm5hbWUiX3MsIGF0dHJpYnV0ZSkpIHsKKyAgICBhdXRvIGF0dHJpYnV0ZSA9
IHBhcmFtZXRlcnMtPmdldFN0cmluZygibmFtZSJfcyk7CisgICAgaWYgKCFhdHRyaWJ1dGUpIHsK
ICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVz
dWx0OjpFcnJvckNvZGU6OkludmFsaWRBcmd1bWVudCkpOwogICAgICAgICByZXR1cm47CiAgICAg
fQpAQCAtMTQ0NSw4ICsxNDQ1LDggQEAgdm9pZCBXZWJEcml2ZXJTZXJ2aWNlOjpnZXRFbGVtZW50
Q1NTVmFsdWUoUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzLCBGdW4KICAgICBpZiAo
IWVsZW1lbnRJRCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgU3RyaW5nIGNzc1Byb3BlcnR5Owot
ICAgIGlmICghcGFyYW1ldGVycy0+Z2V0U3RyaW5nKCJuYW1lIl9zLCBjc3NQcm9wZXJ0eSkpIHsK
KyAgICBhdXRvIGNzc1Byb3BlcnR5ID0gcGFyYW1ldGVycy0+Z2V0U3RyaW5nKCJuYW1lIl9zKTsK
KyAgICBpZiAoIWNzc1Byb3BlcnR5KSB7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1h
bmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpJbnZhbGlkQXJndW1lbnQp
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTE1NjMsOCArMTU2Myw4IEBAIHZvaWQgV2Vi
RHJpdmVyU2VydmljZTo6ZWxlbWVudFNlbmRLZXlzKFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFy
YW1ldGVycywgRnVuY3RpCiAgICAgaWYgKCFlbGVtZW50SUQpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIFN0cmluZyB0ZXh0OwotICAgIGlmICghcGFyYW1ldGVycy0+Z2V0U3RyaW5nKCJ0ZXh0Il9z
LCB0ZXh0KSB8fCB0ZXh0LmlzRW1wdHkoKSkgeworICAgIGF1dG8gdGV4dCA9IHBhcmFtZXRlcnMt
PmdldFN0cmluZygidGV4dCJfcyk7CisgICAgaWYgKHRleHQuaXNFbXB0eSgpKSB7CiAgICAgICAg
IGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJy
b3JDb2RlOjpJbnZhbGlkQXJndW1lbnQpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTE1
ODQsMTEgKzE1ODQsMTMgQEAgdm9pZCBXZWJEcml2ZXJTZXJ2aWNlOjpnZXRQYWdlU291cmNlKFJl
ZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycywgRnVuY3Rpb24KIAogc3RhdGljIGJvb2wg
ZmluZFNjcmlwdEFuZEFyZ3VtZW50c09yQ29tcGxldGVXaXRoRXJyb3IoSlNPTjo6T2JqZWN0JiBw
YXJhbWV0ZXJzLCBGdW5jdGlvbjx2b2lkIChDb21tYW5kUmVzdWx0JiYpPiYgY29tcGxldGlvbkhh
bmRsZXIsIFN0cmluZyYgc2NyaXB0LCBSZWZQdHI8SlNPTjo6QXJyYXk+JiBhcmd1bWVudHMpCiB7
Ci0gICAgaWYgKCFwYXJhbWV0ZXJzLmdldFN0cmluZygic2NyaXB0Il9zLCBzY3JpcHQpKSB7Cisg
ICAgc2NyaXB0ID0gcGFyYW1ldGVycy5nZXRTdHJpbmcoInNjcmlwdCJfcyk7CisgICAgaWYgKCFz
Y3JpcHQpIHsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChD
b21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OkludmFsaWRBcmd1bWVudCkpOwogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgfQotICAgIGlmICghcGFyYW1ldGVycy5nZXRBcnJheSgiYXJncyJfcywg
YXJndW1lbnRzKSkgeworICAgIGFyZ3VtZW50cyA9IHBhcmFtZXRlcnMuZ2V0QXJyYXkoImFyZ3Mi
X3MpOworICAgIGlmICghYXJndW1lbnRzKSB7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENv
bW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpJbnZhbGlkQXJndW1l
bnQpKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTE2NjAsOCArMTY2Miw4IEBA
IHZvaWQgV2ViRHJpdmVyU2VydmljZTo6Z2V0TmFtZWRDb29raWUoUmVmUHRyPEpTT046Ok9iamVj
dD4mJiBwYXJhbWV0ZXJzLCBGdW5jdGlvCiAgICAgaWYgKCFmaW5kU2Vzc2lvbk9yQ29tcGxldGVX
aXRoRXJyb3IoKnBhcmFtZXRlcnMsIGNvbXBsZXRpb25IYW5kbGVyKSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgU3RyaW5nIG5hbWU7Ci0gICAgaWYgKCFwYXJhbWV0ZXJzLT5nZXRTdHJpbmcoIm5h
bWUiX3MsIG5hbWUpKSB7CisgICAgYXV0byBuYW1lID0gcGFyYW1ldGVycy0+Z2V0U3RyaW5nKCJu
YW1lIl9zKTsKKyAgICBpZiAoIW5hbWUpIHsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29t
bWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OkludmFsaWRBcmd1bWVu
dCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTY3OCwzNyArMTY4MCw0MCBAQCB2b2lk
IFdlYkRyaXZlclNlcnZpY2U6OmdldE5hbWVkQ29va2llKFJlZlB0cjxKU09OOjpPYmplY3Q+JiYg
cGFyYW1ldGVycywgRnVuY3Rpbwogc3RhdGljIE9wdGlvbmFsPFNlc3Npb246OkNvb2tpZT4gZGVz
ZXJpYWxpemVDb29raWUoSlNPTjo6T2JqZWN0JiBjb29raWVPYmplY3QpCiB7CiAgICAgU2Vzc2lv
bjo6Q29va2llIGNvb2tpZTsKLSAgICBpZiAoIWNvb2tpZU9iamVjdC5nZXRTdHJpbmcoIm5hbWUi
X3MsIGNvb2tpZS5uYW1lKSB8fCBjb29raWUubmFtZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7Ci0gICAgaWYgKCFjb29raWVPYmplY3QuZ2V0U3RyaW5nKCJ2YWx1ZSJf
cywgY29va2llLnZhbHVlKSB8fCBjb29raWUudmFsdWUuaXNFbXB0eSgpKQorCisgICAgY29va2ll
Lm5hbWUgPSBjb29raWVPYmplY3QuZ2V0U3RyaW5nKCJuYW1lIl9zKTsKKyAgICBpZiAoY29va2ll
Lm5hbWUuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgUmVm
UHRyPEpTT046OlZhbHVlPiB2YWx1ZTsKLSAgICBpZiAoY29va2llT2JqZWN0LmdldFZhbHVlKCJw
YXRoIl9zLCB2YWx1ZSkpIHsKLSAgICAgICAgU3RyaW5nIHBhdGg7Ci0gICAgICAgIGlmICghdmFs
dWUtPmFzU3RyaW5nKHBhdGgpKQorICAgIGNvb2tpZS52YWx1ZSA9IGNvb2tpZU9iamVjdC5nZXRT
dHJpbmcoInZhbHVlIl9zKTsKKyAgICBpZiAoY29va2llLnZhbHVlLmlzRW1wdHkoKSkKKyAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIGlmIChhdXRvIHZhbHVlID0gY29va2llT2Jq
ZWN0LmdldFZhbHVlKCJwYXRoIl9zKSkgeworICAgICAgICBhdXRvIHBhdGggPSB2YWx1ZS0+YXNT
dHJpbmcoKTsKKyAgICAgICAgaWYgKCFwYXRoKQogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKICAgICAgICAgY29va2llLnBhdGggPSBwYXRoOwogICAgIH0KLSAgICBpZiAoY29va2ll
T2JqZWN0LmdldFZhbHVlKCJkb21haW4iX3MsIHZhbHVlKSkgewotICAgICAgICBTdHJpbmcgZG9t
YWluOwotICAgICAgICBpZiAoIXZhbHVlLT5hc1N0cmluZyhkb21haW4pKQorICAgIGlmIChhdXRv
IHZhbHVlID0gY29va2llT2JqZWN0LmdldFZhbHVlKCJkb21haW4iX3MpKSB7CisgICAgICAgIGF1
dG8gZG9tYWluID0gdmFsdWUtPmFzU3RyaW5nKCk7CisgICAgICAgIGlmICghZG9tYWluKQogICAg
ICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAgICAgY29va2llLmRvbWFpbiA9IGRv
bWFpbjsKICAgICB9Ci0gICAgaWYgKGNvb2tpZU9iamVjdC5nZXRWYWx1ZSgic2VjdXJlIl9zLCB2
YWx1ZSkpIHsKLSAgICAgICAgYm9vbCBzZWN1cmU7Ci0gICAgICAgIGlmICghdmFsdWUtPmFzQm9v
bGVhbihzZWN1cmUpKQorICAgIGlmIChhdXRvIHZhbHVlID0gY29va2llT2JqZWN0LmdldFZhbHVl
KCJzZWN1cmUiX3MpKSB7CisgICAgICAgIGF1dG8gc2VjdXJlID0gdmFsdWUtPmFzQm9vbGVhbigp
OworICAgICAgICBpZiAoIXNlY3VyZSkKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CiAgICAgICAgIGNvb2tpZS5zZWN1cmUgPSBzZWN1cmU7CiAgICAgfQotICAgIGlmIChjb29raWVP
YmplY3QuZ2V0VmFsdWUoImh0dHBPbmx5Il9zLCB2YWx1ZSkpIHsKLSAgICAgICAgYm9vbCBodHRw
T25seTsKLSAgICAgICAgaWYgKCF2YWx1ZS0+YXNCb29sZWFuKGh0dHBPbmx5KSkKKyAgICBpZiAo
YXV0byB2YWx1ZSA9IGNvb2tpZU9iamVjdC5nZXRWYWx1ZSgiaHR0cE9ubHkiX3MpKSB7CisgICAg
ICAgIGF1dG8gaHR0cE9ubHkgPSB2YWx1ZS0+YXNCb29sZWFuKCk7CisgICAgICAgIGlmICghaHR0
cE9ubHkpCiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAgICBjb29raWUu
aHR0cE9ubHkgPSBodHRwT25seTsKICAgICB9Ci0gICAgaWYgKGNvb2tpZU9iamVjdC5nZXRWYWx1
ZSgiZXhwaXJ5Il9zLCB2YWx1ZSkpIHsKKyAgICBpZiAoYXV0byB2YWx1ZSA9IGNvb2tpZU9iamVj
dC5nZXRWYWx1ZSgiZXhwaXJ5Il9zKSkgewogICAgICAgICBhdXRvIGV4cGlyeSA9IHVuc2lnbmVk
VmFsdWUoKnZhbHVlKTsKICAgICAgICAgaWYgKCFleHBpcnkpCiAgICAgICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwpAQCAtMTcyNSw4ICsxNzMwLDggQEAgdm9pZCBXZWJEcml2ZXJTZXJ2aWNl
OjphZGRDb29raWUoUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzLCBGdW5jdGlvbjx2
b2kKICAgICBpZiAoIWZpbmRTZXNzaW9uT3JDb21wbGV0ZVdpdGhFcnJvcigqcGFyYW1ldGVycywg
Y29tcGxldGlvbkhhbmRsZXIpKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZWZQdHI8SlNPTjo6
T2JqZWN0PiBjb29raWVPYmplY3Q7Ci0gICAgaWYgKCFwYXJhbWV0ZXJzLT5nZXRPYmplY3QoImNv
b2tpZSJfcywgY29va2llT2JqZWN0KSkgeworICAgIGF1dG8gY29va2llT2JqZWN0ID0gcGFyYW1l
dGVycy0+Z2V0T2JqZWN0KCJjb29raWUiX3MpOworICAgIGlmICghY29va2llT2JqZWN0KSB7CiAg
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3Vs
dDo6RXJyb3JDb2RlOjpJbnZhbGlkQXJndW1lbnQpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
QEAgLTE3NTMsOCArMTc1OCw4IEBAIHZvaWQgV2ViRHJpdmVyU2VydmljZTo6ZGVsZXRlQ29va2ll
KFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycywgRnVuY3Rpb248CiAgICAgaWYgKCFm
aW5kU2Vzc2lvbk9yQ29tcGxldGVXaXRoRXJyb3IoKnBhcmFtZXRlcnMsIGNvbXBsZXRpb25IYW5k
bGVyKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgU3RyaW5nIG5hbWU7Ci0gICAgaWYgKCFwYXJh
bWV0ZXJzLT5nZXRTdHJpbmcoIm5hbWUiX3MsIG5hbWUpKSB7CithdXRvIG5hbWUgPSBwYXJhbWV0
ZXJzLT5nZXRTdHJpbmcoIm5hbWUiX3MpOworICAgIGlmICghbmFtZSkgewogICAgICAgICBjb21w
bGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29k
ZTo6SW52YWxpZEFyZ3VtZW50KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xNzg2LDgg
KzE3OTEsOCBAQCB2b2lkIFdlYkRyaXZlclNlcnZpY2U6OmRlbGV0ZUFsbENvb2tpZXMoUmVmUHRy
PEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzLCBGdW5jdAogCiBzdGF0aWMgYm9vbCBwcm9jZXNz
UGF1c2VBY3Rpb24oSlNPTjo6T2JqZWN0JiBhY3Rpb25JdGVtLCBBY3Rpb24mIGFjdGlvbiwgT3B0
aW9uYWw8U3RyaW5nPiYgZXJyb3JNZXNzYWdlKQogewotICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4g
ZHVyYXRpb25WYWx1ZTsKLSAgICBpZiAoIWFjdGlvbkl0ZW0uZ2V0VmFsdWUoImR1cmF0aW9uIl9z
LCBkdXJhdGlvblZhbHVlKSkKKyAgICBhdXRvIGR1cmF0aW9uVmFsdWUgPSBhY3Rpb25JdGVtLmdl
dFZhbHVlKCJkdXJhdGlvbiJfcyk7CisgICAgaWYgKCFkdXJhdGlvblZhbHVlKQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKIAogICAgIGF1dG8gZHVyYXRpb24gPSB1bnNpZ25lZFZhbHVlKCpkdXJhdGlv
blZhbHVlKTsKQEAgLTE4MDIsOCArMTgwNyw3IEBAIHN0YXRpYyBib29sIHByb2Nlc3NQYXVzZUFj
dGlvbihKU09OOjpPYmplY3QmIGFjdGlvbkl0ZW0sIEFjdGlvbiYgYWN0aW9uLCBPcHRpb25hCiAK
IHN0YXRpYyBPcHRpb25hbDxBY3Rpb24+IHByb2Nlc3NOdWxsQWN0aW9uKGNvbnN0IFN0cmluZyYg
aWQsIEpTT046Ok9iamVjdCYgYWN0aW9uSXRlbSwgT3B0aW9uYWw8U3RyaW5nPiYgZXJyb3JNZXNz
YWdlKQogewotICAgIFN0cmluZyBzdWJ0eXBlOwotICAgIGFjdGlvbkl0ZW0uZ2V0U3RyaW5nKCJ0
eXBlIl9zLCBzdWJ0eXBlKTsKKyAgICBhdXRvIHN1YnR5cGUgPSBhY3Rpb25JdGVtLmdldFN0cmlu
ZygidHlwZSJfcyk7CiAgICAgaWYgKHN1YnR5cGUgIT0gInBhdXNlIikgewogICAgICAgICBlcnJv
ck1lc3NhZ2UgPSBTdHJpbmcoIlRoZSBwYXJhbWV0ZXIgJ3R5cGUnIGluIG51bGwgYWN0aW9uIGlz
IGludmFsaWQgb3IgbWlzc2luZyIpOwogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwpAQCAt
MTgxOSw4ICsxODIzLDcgQEAgc3RhdGljIE9wdGlvbmFsPEFjdGlvbj4gcHJvY2Vzc051bGxBY3Rp
b24oY29uc3QgU3RyaW5nJiBpZCwgSlNPTjo6T2JqZWN0JiBhY3Rpb24KIHN0YXRpYyBPcHRpb25h
bDxBY3Rpb24+IHByb2Nlc3NLZXlBY3Rpb24oY29uc3QgU3RyaW5nJiBpZCwgSlNPTjo6T2JqZWN0
JiBhY3Rpb25JdGVtLCBPcHRpb25hbDxTdHJpbmc+JiBlcnJvck1lc3NhZ2UpCiB7CiAgICAgQWN0
aW9uOjpTdWJ0eXBlIGFjdGlvblN1YnR5cGU7Ci0gICAgU3RyaW5nIHN1YnR5cGU7Ci0gICAgYWN0
aW9uSXRlbS5nZXRTdHJpbmcoInR5cGUiX3MsIHN1YnR5cGUpOworICAgIGF1dG8gc3VidHlwZSA9
IGFjdGlvbkl0ZW0uZ2V0U3RyaW5nKCJ0eXBlIl9zKTsKICAgICBpZiAoc3VidHlwZSA9PSAicGF1
c2UiKQogICAgICAgICBhY3Rpb25TdWJ0eXBlID0gQWN0aW9uOjpTdWJ0eXBlOjpQYXVzZTsKICAg
ICBlbHNlIGlmIChzdWJ0eXBlID09ICJrZXlVcCIpCkBAIC0xODQxLDEzICsxODQ0LDEzIEBAIHN0
YXRpYyBPcHRpb25hbDxBY3Rpb24+IHByb2Nlc3NLZXlBY3Rpb24oY29uc3QgU3RyaW5nJiBpZCwg
SlNPTjo6T2JqZWN0JiBhY3Rpb25JCiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQWN0aW9uOjpT
dWJ0eXBlOjpLZXlVcDoKICAgICBjYXNlIEFjdGlvbjo6U3VidHlwZTo6S2V5RG93bjogewotICAg
ICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IGtleVZhbHVlOwotICAgICAgICBpZiAoIWFjdGlvbkl0
ZW0uZ2V0VmFsdWUoInZhbHVlIl9zLCBrZXlWYWx1ZSkpIHsKKyAgICAgICAgYXV0byBrZXlWYWx1
ZSA9IGFjdGlvbkl0ZW0uZ2V0VmFsdWUoInZhbHVlIl9zKTsKKyAgICAgICAgaWYgKCFrZXlWYWx1
ZSkgewogICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gU3RyaW5nKCJUaGUgcGFyYW1hdGVyICd2
YWx1ZScgaXMgbWlzc2luZyBmb3Iga2V5IHVwL2Rvd24gYWN0aW9uIik7CiAgICAgICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAgICB9Ci0gICAgICAgIFN0cmluZyBrZXk7Ci0gICAg
ICAgIGlmICgha2V5VmFsdWUtPmFzU3RyaW5nKGtleSkgfHwga2V5LmlzRW1wdHkoKSkgeworICAg
ICAgICBhdXRvIGtleSA9IGtleVZhbHVlLT5hc1N0cmluZygpOworICAgICAgICBpZiAoIWtleS5p
c0VtcHR5KCkpIHsKICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IFN0cmluZygiVGhlIHBhcmFt
YXRlciAndmFsdWUnIGlzIGludmFsaWQgZm9yIGtleSB1cC9kb3duIGFjdGlvbiIpOwogICAgICAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAgICAgfQpAQCAtMTg4NCw4ICsxODg3LDcg
QEAgc3RhdGljIE1vdXNlQnV0dG9uIGFjdGlvbk1vdXNlQnV0dG9uKHVuc2lnbmVkIGJ1dHRvbikK
IHN0YXRpYyBPcHRpb25hbDxBY3Rpb24+IHByb2Nlc3NQb2ludGVyQWN0aW9uKGNvbnN0IFN0cmlu
ZyYgaWQsIFBvaW50ZXJQYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzLCBKU09OOjpPYmplY3QmIGFjdGlv
bkl0ZW0sIE9wdGlvbmFsPFN0cmluZz4mIGVycm9yTWVzc2FnZSkKIHsKICAgICBBY3Rpb246OlN1
YnR5cGUgYWN0aW9uU3VidHlwZTsKLSAgICBTdHJpbmcgc3VidHlwZTsKLSAgICBhY3Rpb25JdGVt
LmdldFN0cmluZygidHlwZSJfcywgc3VidHlwZSk7CisgICAgYXV0byBzdWJ0eXBlID0gYWN0aW9u
SXRlbS5nZXRTdHJpbmcoInR5cGUiX3MpOwogICAgIGlmIChzdWJ0eXBlID09ICJwYXVzZSIpCiAg
ICAgICAgIGFjdGlvblN1YnR5cGUgPSBBY3Rpb246OlN1YnR5cGU6OlBhdXNlOwogICAgIGVsc2Ug
aWYgKHN1YnR5cGUgPT0gInBvaW50ZXJVcCIpCkBAIC0xOTExLDggKzE5MTMsOCBAQCBzdGF0aWMg
T3B0aW9uYWw8QWN0aW9uPiBwcm9jZXNzUG9pbnRlckFjdGlvbihjb25zdCBTdHJpbmcmIGlkLCBQ
b2ludGVyUGFyYW1ldGVycwogICAgICAgICBicmVhazsKICAgICBjYXNlIEFjdGlvbjo6U3VidHlw
ZTo6UG9pbnRlclVwOgogICAgIGNhc2UgQWN0aW9uOjpTdWJ0eXBlOjpQb2ludGVyRG93bjogewot
ICAgICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IGJ1dHRvblZhbHVlOwotICAgICAgICBpZiAoIWFj
dGlvbkl0ZW0uZ2V0VmFsdWUoImJ1dHRvbiJfcywgYnV0dG9uVmFsdWUpKSB7CisgICAgICAgIGF1
dG8gYnV0dG9uVmFsdWUgPSBhY3Rpb25JdGVtLmdldFZhbHVlKCJidXR0b24iX3MpOworICAgICAg
ICBpZiAoIWJ1dHRvblZhbHVlKSB7CiAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBTdHJpbmco
IlRoZSBwYXJhbWF0ZXIgJ2J1dHRvbicgaXMgbWlzc2luZyBmb3IgcG9pbnRlciB1cC9kb3duIGFj
dGlvbiIpOwogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAgICAgfQpAQCAt
MTkyNSw4ICsxOTI3LDcgQEAgc3RhdGljIE9wdGlvbmFsPEFjdGlvbj4gcHJvY2Vzc1BvaW50ZXJB
Y3Rpb24oY29uc3QgU3RyaW5nJiBpZCwgUG9pbnRlclBhcmFtZXRlcnMKICAgICAgICAgYnJlYWs7
CiAgICAgfQogICAgIGNhc2UgQWN0aW9uOjpTdWJ0eXBlOjpQb2ludGVyTW92ZTogewotICAgICAg
ICBSZWZQdHI8SlNPTjo6VmFsdWU+IGR1cmF0aW9uVmFsdWU7Ci0gICAgICAgIGlmIChhY3Rpb25J
dGVtLmdldFZhbHVlKCJkdXJhdGlvbiJfcywgZHVyYXRpb25WYWx1ZSkpIHsKKyAgICAgICAgaWYg
KGF1dG8gZHVyYXRpb25WYWx1ZSA9IGFjdGlvbkl0ZW0uZ2V0VmFsdWUoImR1cmF0aW9uIl9zKSkg
ewogICAgICAgICAgICAgYXV0byBkdXJhdGlvbiA9IHVuc2lnbmVkVmFsdWUoKmR1cmF0aW9uVmFs
dWUpOwogICAgICAgICAgICAgaWYgKCFkdXJhdGlvbikgewogICAgICAgICAgICAgICAgIGVycm9y
TWVzc2FnZSA9IFN0cmluZygiVGhlIHBhcmFtZXRlciAnZHVyYXRpb24nIGlzIGludmFsaWQgaW4g
cG9pbnRlciBtb3ZlIGFjdGlvbiIpOwpAQCAtMTkzNSwyMCArMTkzNiwxNiBAQCBzdGF0aWMgT3B0
aW9uYWw8QWN0aW9uPiBwcm9jZXNzUG9pbnRlckFjdGlvbihjb25zdCBTdHJpbmcmIGlkLCBQb2lu
dGVyUGFyYW1ldGVycwogICAgICAgICAgICAgYWN0aW9uLmR1cmF0aW9uID0gZHVyYXRpb24udmFs
dWUoKTsKICAgICAgICAgfQogCi0gICAgICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gb3JpZ2luVmFs
dWU7Ci0gICAgICAgIGlmIChhY3Rpb25JdGVtLmdldFZhbHVlKCJvcmlnaW4iX3MsIG9yaWdpblZh
bHVlKSkgewotICAgICAgICAgICAgaWYgKG9yaWdpblZhbHVlLT50eXBlKCkgPT0gSlNPTjo6VmFs
dWU6OlR5cGU6Ok9iamVjdCkgewotICAgICAgICAgICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+
IG9yaWdpbk9iamVjdDsKLSAgICAgICAgICAgICAgICBvcmlnaW5WYWx1ZS0+YXNPYmplY3Qob3Jp
Z2luT2JqZWN0KTsKLSAgICAgICAgICAgICAgICBTdHJpbmcgZWxlbWVudElEOwotICAgICAgICAg
ICAgICAgIGlmICghb3JpZ2luT2JqZWN0LT5nZXRTdHJpbmcoU2Vzc2lvbjo6d2ViRWxlbWVudElk
ZW50aWZpZXIoKSwgZWxlbWVudElEKSkgeworICAgICAgICBpZiAoYXV0byBvcmlnaW5WYWx1ZSA9
IGFjdGlvbkl0ZW0uZ2V0VmFsdWUoIm9yaWdpbiJfcykpIHsKKyAgICAgICAgICAgIGlmIChhdXRv
IG9yaWdpbk9iamVjdCA9IG9yaWdpblZhbHVlLT5hc09iamVjdCgpKSB7CisgICAgICAgICAgICAg
ICAgYXV0byBlbGVtZW50SUQgPSBvcmlnaW5PYmplY3QtPmdldFN0cmluZyhTZXNzaW9uOjp3ZWJF
bGVtZW50SWRlbnRpZmllcigpKTsKKyAgICAgICAgICAgICAgICBpZiAoIWVsZW1lbnRJRCkgewog
ICAgICAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBTdHJpbmcoIlRoZSBwYXJhbWV0ZXIg
J29yaWdpbicgaXMgbm90IGEgdmFsaWQgd2ViIGVsZW1lbnQgb2JqZWN0IGluIHBvaW50ZXIgbW92
ZSBhY3Rpb24iKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYWN0aW9uLm9yaWdpbiA9IFBvaW50ZXJP
cmlnaW4geyBQb2ludGVyT3JpZ2luOjpUeXBlOjpFbGVtZW50LCBlbGVtZW50SUQgfTsKICAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIG9yaWdpbjsKLSAgICAgICAg
ICAgICAgICBvcmlnaW5WYWx1ZS0+YXNTdHJpbmcob3JpZ2luKTsKKyAgICAgICAgICAgICAgICBh
dXRvIG9yaWdpbiA9IG9yaWdpblZhbHVlLT5hc1N0cmluZygpOwogICAgICAgICAgICAgICAgIGlm
IChvcmlnaW4gPT0gInZpZXdwb3J0IikKICAgICAgICAgICAgICAgICAgICAgYWN0aW9uLm9yaWdp
biA9IFBvaW50ZXJPcmlnaW4geyBQb2ludGVyT3JpZ2luOjpUeXBlOjpWaWV3cG9ydCwgV1RGOjpu
dWxsb3B0IH07CiAgICAgICAgICAgICAgICAgZWxzZSBpZiAob3JpZ2luID09ICJwb2ludGVyIikK
QEAgLTE5NjEsOCArMTk1OCw3IEBAIHN0YXRpYyBPcHRpb25hbDxBY3Rpb24+IHByb2Nlc3NQb2lu
dGVyQWN0aW9uKGNvbnN0IFN0cmluZyYgaWQsIFBvaW50ZXJQYXJhbWV0ZXJzCiAgICAgICAgIH0g
ZWxzZQogICAgICAgICAgICAgYWN0aW9uLm9yaWdpbiA9IFBvaW50ZXJPcmlnaW4geyBQb2ludGVy
T3JpZ2luOjpUeXBlOjpWaWV3cG9ydCwgV1RGOjpudWxsb3B0IH07CiAKLSAgICAgICAgUmVmUHRy
PEpTT046OlZhbHVlPiB4VmFsdWU7Ci0gICAgICAgIGlmIChhY3Rpb25JdGVtLmdldFZhbHVlKCJ4
Il9zLCB4VmFsdWUpKSB7CisgICAgICAgIGlmIChhdXRvIHhWYWx1ZSA9IGFjdGlvbkl0ZW0uZ2V0
VmFsdWUoIngiX3MpKSB7CiAgICAgICAgICAgICBhdXRvIHggPSB2YWx1ZUFzTnVtYmVySW5SYW5n
ZSgqeFZhbHVlLCBJTlRfTUlOKTsKICAgICAgICAgICAgIGlmICgheCkgewogICAgICAgICAgICAg
ICAgIGVycm9yTWVzc2FnZSA9IFN0cmluZygiVGhlIHBhcmFtYXRlciAneCcgaXMgaW52YWxpZCBm
b3IgcG9pbnRlciBtb3ZlIGFjdGlvbiIpOwpAQCAtMTk3MSw4ICsxOTY3LDcgQEAgc3RhdGljIE9w
dGlvbmFsPEFjdGlvbj4gcHJvY2Vzc1BvaW50ZXJBY3Rpb24oY29uc3QgU3RyaW5nJiBpZCwgUG9p
bnRlclBhcmFtZXRlcnMKICAgICAgICAgICAgIGFjdGlvbi54ID0geC52YWx1ZSgpOwogICAgICAg
ICB9CiAKLSAgICAgICAgUmVmUHRyPEpTT046OlZhbHVlPiB5VmFsdWU7Ci0gICAgICAgIGlmIChh
Y3Rpb25JdGVtLmdldFZhbHVlKCJ5Il9zLCB5VmFsdWUpKSB7CisgICAgICAgIGlmIChhdXRvIHlW
YWx1ZSA9IGFjdGlvbkl0ZW0uZ2V0VmFsdWUoInkiX3MpKSB7CiAgICAgICAgICAgICBhdXRvIHkg
PSB2YWx1ZUFzTnVtYmVySW5SYW5nZSgqeVZhbHVlLCBJTlRfTUlOKTsKICAgICAgICAgICAgIGlm
ICgheSkgewogICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IFN0cmluZygiVGhlIHBhcmFt
YXRlciAneScgaXMgaW52YWxpZCBmb3IgcG9pbnRlciBtb3ZlIGFjdGlvbiIpOwpAQCAtMTk5NSwx
OCArMTk5MCwxOSBAQCBzdGF0aWMgT3B0aW9uYWw8QWN0aW9uPiBwcm9jZXNzUG9pbnRlckFjdGlv
bihjb25zdCBTdHJpbmcmIGlkLCBQb2ludGVyUGFyYW1ldGVycwogc3RhdGljIE9wdGlvbmFsPFBv
aW50ZXJQYXJhbWV0ZXJzPiBwcm9jZXNzUG9pbnRlclBhcmFtZXRlcnMoSlNPTjo6T2JqZWN0JiBh
Y3Rpb25TZXF1ZW5jZSwgT3B0aW9uYWw8U3RyaW5nPiYgZXJyb3JNZXNzYWdlKQogewogICAgIFBv
aW50ZXJQYXJhbWV0ZXJzIHBhcmFtZXRlcnM7Ci0gICAgUmVmUHRyPEpTT046OlZhbHVlPiBwYXJh
bWV0ZXJzRGF0YVZhbHVlOwotICAgIGlmICghYWN0aW9uU2VxdWVuY2UuZ2V0VmFsdWUoInBhcmFt
ZXRlcnMiX3MsIHBhcmFtZXRlcnNEYXRhVmFsdWUpKQorCisgICAgYXV0byBwYXJhbWV0ZXJzRGF0
YVZhbHVlID0gYWN0aW9uU2VxdWVuY2UuZ2V0VmFsdWUoInBhcmFtZXRlcnMiX3MpOworICAgIGlm
ICghcGFyYW1ldGVyc0RhdGFWYWx1ZSkKICAgICAgICAgcmV0dXJuIHBhcmFtZXRlcnM7CiAKLSAg
ICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzRGF0YTsKLSAgICBpZiAoIXBhcmFtZXRl
cnNEYXRhVmFsdWUtPmFzT2JqZWN0KHBhcmFtZXRlcnNEYXRhKSkgeworICAgIGF1dG8gcGFyYW1l
dGVyc0RhdGEgPSBwYXJhbWV0ZXJzRGF0YVZhbHVlLT5hc09iamVjdCgpOworICAgIGlmICghcGFy
YW1ldGVyc0RhdGEpIHsKICAgICAgICAgZXJyb3JNZXNzYWdlID0gU3RyaW5nKCJBY3Rpb24gc2Vx
dWVuY2UgcG9pbnRlciBwYXJhbWV0ZXJzIGlzIG5vdCBhbiBvYmplY3QiKTsKICAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKICAgICB9CiAKLSAgICBTdHJpbmcgcG9pbnRlclR5cGU7Ci0gICAg
aWYgKCFwYXJhbWV0ZXJzRGF0YS0+Z2V0U3RyaW5nKCJwb2ludGVyVHlwZSJfcywgcG9pbnRlclR5
cGUpKQorICAgIGF1dG8gcG9pbnRlclR5cGUgPSBwYXJhbWV0ZXJzRGF0YS0+Z2V0U3RyaW5nKCJw
b2ludGVyVHlwZSJfcyk7CisgICAgaWYgKCFwb2ludGVyVHlwZSkKICAgICAgICAgcmV0dXJuIHBh
cmFtZXRlcnM7CiAKICAgICBpZiAocG9pbnRlclR5cGUgPT0gIm1vdXNlIikKQEAgLTIwMjUsMTQg
KzIwMjEsMTMgQEAgc3RhdGljIE9wdGlvbmFsPFBvaW50ZXJQYXJhbWV0ZXJzPiBwcm9jZXNzUG9p
bnRlclBhcmFtZXRlcnMoSlNPTjo6T2JqZWN0JiBhY3Rpb24KIAogc3RhdGljIE9wdGlvbmFsPFZl
Y3RvcjxBY3Rpb24+PiBwcm9jZXNzSW5wdXRBY3Rpb25TZXF1ZW5jZShTZXNzaW9uJiBzZXNzaW9u
LCBKU09OOjpWYWx1ZSYgYWN0aW9uU2VxdWVuY2VWYWx1ZSwgT3B0aW9uYWw8U3RyaW5nPiYgZXJy
b3JNZXNzYWdlKQogewotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IGFjdGlvblNlcXVlbmNlOwot
ICAgIGlmICghYWN0aW9uU2VxdWVuY2VWYWx1ZS5hc09iamVjdChhY3Rpb25TZXF1ZW5jZSkpIHsK
KyAgICBhdXRvIGFjdGlvblNlcXVlbmNlID0gYWN0aW9uU2VxdWVuY2VWYWx1ZS5hc09iamVjdCgp
OworICAgIGlmICghYWN0aW9uU2VxdWVuY2UpIHsKICAgICAgICAgZXJyb3JNZXNzYWdlID0gU3Ry
aW5nKCJUaGUgYWN0aW9uIHNlcXVlbmNlIGlzIG5vdCBhbiBvYmplY3QiKTsKICAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKICAgICB9CiAKLSAgICBTdHJpbmcgdHlwZTsKLSAgICBhY3Rpb25T
ZXF1ZW5jZS0+Z2V0U3RyaW5nKCJ0eXBlIl9zLCB0eXBlKTsKKyAgICBhdXRvIHR5cGUgPSBhY3Rp
b25TZXF1ZW5jZS0+Z2V0U3RyaW5nKCJ0eXBlIl9zKTsKICAgICBJbnB1dFNvdXJjZTo6VHlwZSBp
bnB1dFNvdXJjZVR5cGU7CiAgICAgaWYgKHR5cGUgPT0gImtleSIpCiAgICAgICAgIGlucHV0U291
cmNlVHlwZSA9IElucHV0U291cmNlOjpUeXBlOjpLZXk7CkBAIC0yMDQ1LDggKzIwNDAsOCBAQCBz
dGF0aWMgT3B0aW9uYWw8VmVjdG9yPEFjdGlvbj4+IHByb2Nlc3NJbnB1dEFjdGlvblNlcXVlbmNl
KFNlc3Npb24mIHNlc3Npb24sIEpTTwogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAg
IH0KIAotICAgIFN0cmluZyBpZDsKLSAgICBpZiAoIWFjdGlvblNlcXVlbmNlLT5nZXRTdHJpbmco
ImlkIl9zLCBpZCkpIHsKKyAgICBhdXRvIGlkID0gYWN0aW9uU2VxdWVuY2UtPmdldFN0cmluZygi
aWQiX3MpOworICAgIGlmICghaWQpIHsKICAgICAgICAgZXJyb3JNZXNzYWdlID0gU3RyaW5nKCJU
aGUgcGFyYW1ldGVyICdpZCcgaXMgaW52YWxpZCBvciBtaXNzaW5nIGluIGFjdGlvbiBzZXF1ZW5j
ZSIpOwogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIH0KQEAgLTIwNzIsOCArMjA2
Nyw4IEBAIHN0YXRpYyBPcHRpb25hbDxWZWN0b3I8QWN0aW9uPj4gcHJvY2Vzc0lucHV0QWN0aW9u
U2VxdWVuY2UoU2Vzc2lvbiYgc2Vzc2lvbiwgSlNPCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CiAgICAgfQogCi0gICAgUmVmUHRyPEpTT046OkFycmF5PiBhY3Rpb25JdGVtczsKLSAgICBp
ZiAoIWFjdGlvblNlcXVlbmNlLT5nZXRBcnJheSgiYWN0aW9ucyJfcywgYWN0aW9uSXRlbXMpKSB7
CisgICAgYXV0byBhY3Rpb25JdGVtcyA9IGFjdGlvblNlcXVlbmNlLT5nZXRBcnJheSgiYWN0aW9u
cyJfcyk7CisgICAgaWYgKCFhY3Rpb25JdGVtcykgewogICAgICAgICBlcnJvck1lc3NhZ2UgPSBT
dHJpbmcoIlRoZSBwYXJhbWV0ZXIgJ2FjdGlvbnMnIGlzIGludmFsaWQgb3Igbm90IHByZXNlbnQg
aW4gYWN0aW9uIHNlcXVlbmNlIik7CiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAg
fQpAQCAtMjA4MSw5ICsyMDc2LDggQEAgc3RhdGljIE9wdGlvbmFsPFZlY3RvcjxBY3Rpb24+PiBw
cm9jZXNzSW5wdXRBY3Rpb25TZXF1ZW5jZShTZXNzaW9uJiBzZXNzaW9uLCBKU08KICAgICBWZWN0
b3I8QWN0aW9uPiBhY3Rpb25zOwogICAgIHVuc2lnbmVkIGFjdGlvbkl0ZW1zTGVuZ3RoID0gYWN0
aW9uSXRlbXMtPmxlbmd0aCgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhY3Rpb25J
dGVtc0xlbmd0aDsgKytpKSB7Ci0gICAgICAgIGF1dG8gYWN0aW9uSXRlbVZhbHVlID0gYWN0aW9u
SXRlbXMtPmdldChpKTsKLSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gYWN0aW9uSXRlbTsK
LSAgICAgICAgaWYgKCFhY3Rpb25JdGVtVmFsdWUtPmFzT2JqZWN0KGFjdGlvbkl0ZW0pKSB7Cisg
ICAgICAgIGF1dG8gYWN0aW9uSXRlbSA9IGFjdGlvbkl0ZW1zLT5nZXQoaSktPmFzT2JqZWN0KCk7
CisgICAgICAgIGlmICghYWN0aW9uSXRlbSkgewogICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0g
U3RyaW5nKCJBbiBhY3Rpb24gaW4gYWN0aW9uIHNlcXVlbmNlIGlzIG5vdCBhbiBvYmplY3QiKTsK
ICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAgIH0KQEAgLTIxMTEsOCAr
MjEwNSw4IEBAIHZvaWQgV2ViRHJpdmVyU2VydmljZTo6cGVyZm9ybUFjdGlvbnMoUmVmUHRyPEpT
T046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzLCBGdW5jdGlvCiAgICAgaWYgKCFmaW5kU2Vzc2lvbk9y
Q29tcGxldGVXaXRoRXJyb3IoKnBhcmFtZXRlcnMsIGNvbXBsZXRpb25IYW5kbGVyKSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgUmVmUHRyPEpTT046OkFycmF5PiBhY3Rpb25zQXJyYXk7Ci0gICAg
aWYgKCFwYXJhbWV0ZXJzLT5nZXRBcnJheSgiYWN0aW9ucyJfcywgYWN0aW9uc0FycmF5KSkgewor
ICAgIGF1dG8gYWN0aW9uc0FycmF5ID0gcGFyYW1ldGVycy0+Z2V0QXJyYXkoImFjdGlvbnMiX3Mp
OworICAgIGlmICghYWN0aW9uc0FycmF5KSB7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENv
bW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpJbnZhbGlkQXJndW1l
bnQsIFN0cmluZygiVGhlIHBhcmFtYXRlciAnYWN0aW9ucycgaXMgaW52YWxpZCBvciBub3QgcHJl
c2VudCIpKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0yMTIyLDcgKzIxMTYsNyBAQCB2
b2lkIFdlYkRyaXZlclNlcnZpY2U6OnBlcmZvcm1BY3Rpb25zKFJlZlB0cjxKU09OOjpPYmplY3Q+
JiYgcGFyYW1ldGVycywgRnVuY3RpbwogICAgIHVuc2lnbmVkIGFjdGlvbnNBcnJheUxlbmd0aCA9
IGFjdGlvbnNBcnJheS0+bGVuZ3RoKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFj
dGlvbnNBcnJheUxlbmd0aDsgKytpKSB7CiAgICAgICAgIGF1dG8gYWN0aW9uU2VxdWVuY2UgPSBh
Y3Rpb25zQXJyYXktPmdldChpKTsKLSAgICAgICAgYXV0byBpbnB1dFNvdXJjZUFjdGlvbnMgPSBw
cm9jZXNzSW5wdXRBY3Rpb25TZXF1ZW5jZSgqbV9zZXNzaW9uLCAqYWN0aW9uU2VxdWVuY2UsIGVy
cm9yTWVzc2FnZSk7CisgICAgICAgIGF1dG8gaW5wdXRTb3VyY2VBY3Rpb25zID0gcHJvY2Vzc0lu
cHV0QWN0aW9uU2VxdWVuY2UoKm1fc2Vzc2lvbiwgYWN0aW9uU2VxdWVuY2UsIGVycm9yTWVzc2Fn
ZSk7CiAgICAgICAgIGlmICghaW5wdXRTb3VyY2VBY3Rpb25zKSB7CiAgICAgICAgICAgICBjb21w
bGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29k
ZTo6SW52YWxpZEFyZ3VtZW50LCBlcnJvck1lc3NhZ2UudmFsdWUoKSkpOwogICAgICAgICAgICAg
cmV0dXJuOwpAQCAtMjIwMiw4ICsyMTk2LDggQEAgdm9pZCBXZWJEcml2ZXJTZXJ2aWNlOjpzZW5k
QWxlcnRUZXh0KFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycywgRnVuY3Rpb24KICAg
ICBpZiAoIWZpbmRTZXNzaW9uT3JDb21wbGV0ZVdpdGhFcnJvcigqcGFyYW1ldGVycywgY29tcGxl
dGlvbkhhbmRsZXIpKQogICAgICAgICByZXR1cm47CiAKLSAgICBTdHJpbmcgdGV4dDsKLSAgICBp
ZiAoIXBhcmFtZXRlcnMtPmdldFN0cmluZygidGV4dCJfcywgdGV4dCkpIHsKKyAgICBhdXRvIHRl
eHQgPSBwYXJhbWV0ZXJzLT5nZXRTdHJpbmcoInRleHQiX3MpOworICAgIGlmICghdGV4dCkgewog
ICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1
bHQ6OkVycm9yQ29kZTo6SW52YWxpZEFyZ3VtZW50KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViRHJpdmVyL1dlYkRyaXZlclNlcnZpY2UuaCBiL1NvdXJj
ZS9XZWJEcml2ZXIvV2ViRHJpdmVyU2VydmljZS5oCmluZGV4IGEzNGJlYjhmMGRkM2Q2NDA0Y2M5
Njc2ZGYyMGI0MGI4MjAxOTU4MGIuLmVkOWRiMDg4NTdiOTQ3NDlmNGU3YTQ4ZThmMGE5NmY0YjQ0
MzJiMzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJEcml2ZXIvV2ViRHJpdmVyU2VydmljZS5oCisr
KyBiL1NvdXJjZS9XZWJEcml2ZXIvV2ViRHJpdmVyU2VydmljZS5oCkBAIC0xMjIsOCArMTIyLDgg
QEAgcHJpdmF0ZToKICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiB2YWxpZGF0ZWRDYXBhYmlsaXRp
ZXMoY29uc3QgSlNPTjo6T2JqZWN0JikgY29uc3Q7CiAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4g
bWVyZ2VDYXBhYmlsaXRpZXMoY29uc3QgSlNPTjo6T2JqZWN0JiwgY29uc3QgSlNPTjo6T2JqZWN0
JikgY29uc3Q7CiAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gbWF0Y2hDYXBhYmlsaXRpZXMoY29u
c3QgSlNPTjo6T2JqZWN0JikgY29uc3Q7Ci0gICAgYm9vbCBwbGF0Zm9ybVZhbGlkYXRlQ2FwYWJp
bGl0eShjb25zdCBTdHJpbmcmLCBjb25zdCBSZWZQdHI8SlNPTjo6VmFsdWU+JikgY29uc3Q7Ci0g
ICAgYm9vbCBwbGF0Zm9ybU1hdGNoQ2FwYWJpbGl0eShjb25zdCBTdHJpbmcmLCBjb25zdCBSZWZQ
dHI8SlNPTjo6VmFsdWU+JikgY29uc3Q7CisgICAgYm9vbCBwbGF0Zm9ybVZhbGlkYXRlQ2FwYWJp
bGl0eShjb25zdCBTdHJpbmcmLCBjb25zdCBSZWY8SlNPTjo6VmFsdWU+JikgY29uc3Q7CisgICAg
Ym9vbCBwbGF0Zm9ybU1hdGNoQ2FwYWJpbGl0eShjb25zdCBTdHJpbmcmLCBjb25zdCBSZWY8SlNP
Tjo6VmFsdWU+JikgY29uc3Q7CiAgICAgYm9vbCBwbGF0Zm9ybVN1cHBvcnRQcm94eVR5cGUoY29u
c3QgU3RyaW5nJikgY29uc3Q7CiAgICAgdm9pZCBwYXJzZUNhcGFiaWxpdGllcyhjb25zdCBKU09O
OjpPYmplY3QmIGRlc2lyZWRDYXBhYmlsaXRpZXMsIENhcGFiaWxpdGllcyYpIGNvbnN0OwogICAg
IHZvaWQgcGxhdGZvcm1QYXJzZUNhcGFiaWxpdGllcyhjb25zdCBKU09OOjpPYmplY3QmIGRlc2ly
ZWRDYXBhYmlsaXRpZXMsIENhcGFiaWxpdGllcyYpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkRyaXZlci9ndGsvV2ViRHJpdmVyU2VydmljZUd0ay5jcHAgYi9Tb3VyY2UvV2ViRHJpdmVy
L2d0ay9XZWJEcml2ZXJTZXJ2aWNlR3RrLmNwcAppbmRleCAyNGQxYmRkMDE0YTA3MGI1OTc2NDRi
NTUzNjdkNDM3NDA3ZTJjMTk0Li40NGM5MWFhNWY2NzM3NWUxNTk5NDBiNGIwYTBkZDk0NGJmZDBm
MmYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViRHJpdmVyL2d0ay9XZWJEcml2ZXJTZXJ2aWNlR3Rr
LmNwcAorKysgYi9Tb3VyY2UvV2ViRHJpdmVyL2d0ay9XZWJEcml2ZXJTZXJ2aWNlR3RrLmNwcApA
QCAtNDAsNjQgKzQwLDQ4IEBAIENhcGFiaWxpdGllcyBXZWJEcml2ZXJTZXJ2aWNlOjpwbGF0Zm9y
bUNhcGFiaWxpdGllcygpCiAgICAgcmV0dXJuIGNhcGFiaWxpdGllczsKIH0KIAotYm9vbCBXZWJE
cml2ZXJTZXJ2aWNlOjpwbGF0Zm9ybVZhbGlkYXRlQ2FwYWJpbGl0eShjb25zdCBTdHJpbmcmIG5h
bWUsIGNvbnN0IFJlZlB0cjxKU09OOjpWYWx1ZT4mIHZhbHVlKSBjb25zdAorYm9vbCBXZWJEcml2
ZXJTZXJ2aWNlOjpwbGF0Zm9ybVZhbGlkYXRlQ2FwYWJpbGl0eShjb25zdCBTdHJpbmcmIG5hbWUs
IGNvbnN0IFJlZjxKU09OOjpWYWx1ZT4mIHZhbHVlKSBjb25zdAogewogICAgIGlmIChuYW1lICE9
ICJ3ZWJraXRndGs6YnJvd3Nlck9wdGlvbnMiKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAg
IFJlZlB0cjxKU09OOjpPYmplY3Q+IGJyb3dzZXJPcHRpb25zOwotICAgIGlmICghdmFsdWUtPmFz
T2JqZWN0KGJyb3dzZXJPcHRpb25zKSkKKyAgICBhdXRvIGJyb3dzZXJPcHRpb25zID0gdmFsdWUt
PmFzT2JqZWN0KCk7CisgICAgaWYgKCFicm93c2VyT3B0aW9ucykKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCiAgICAgaWYgKGJyb3dzZXJPcHRpb25zLT5pc051bGwoKSkKICAgICAgICAgcmV0dXJu
IHRydWU7CiAKLSAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IGJpbmFyeVZhbHVlOwotICAgIFN0cmlu
ZyBiaW5hcnk7Ci0gICAgaWYgKGJyb3dzZXJPcHRpb25zLT5nZXRWYWx1ZSgiYmluYXJ5Il9zLCBi
aW5hcnlWYWx1ZSkgJiYgIWJpbmFyeVZhbHVlLT5hc1N0cmluZyhiaW5hcnkpKQorICAgIGF1dG8g
YmluYXJ5ID0gYnJvd3Nlck9wdGlvbnMtPmdldFN0cmluZygiYmluYXJ5Il9zKTsKKyAgICBpZiAo
IWJpbmFyeSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgUmVmUHRyPEpTT046OlZhbHVl
PiB1c2VPdmVybGF5U2Nyb2xsYmFyc1ZhbHVlOwotICAgIGJvb2wgdXNlT3ZlcmxheVNjcm9sbGJh
cnM7Ci0gICAgaWYgKGJyb3dzZXJPcHRpb25zLT5nZXRWYWx1ZSgidXNlT3ZlcmxheVNjcm9sbGJh
cnMiX3MsIHVzZU92ZXJsYXlTY3JvbGxiYXJzVmFsdWUpICYmICF1c2VPdmVybGF5U2Nyb2xsYmFy
c1ZhbHVlLT5hc0Jvb2xlYW4odXNlT3ZlcmxheVNjcm9sbGJhcnMpKQorICAgIGF1dG8gdXNlT3Zl
cmxheVNjcm9sbGJhcnMgPSBicm93c2VyT3B0aW9ucy0+Z2V0Qm9vbGVhbigidXNlT3ZlcmxheVNj
cm9sbGJhcnMiX3MpOworICAgIGlmICghdXNlT3ZlcmxheVNjcm9sbGJhcnMpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gYnJvd3NlckFyZ3VtZW50c1Zh
bHVlOwotICAgIFJlZlB0cjxKU09OOjpBcnJheT4gYnJvd3NlckFyZ3VtZW50czsKLSAgICBpZiAo
YnJvd3Nlck9wdGlvbnMtPmdldFZhbHVlKCJhcmdzIl9zLCBicm93c2VyQXJndW1lbnRzVmFsdWUp
KSB7Ci0gICAgICAgIGlmICghYnJvd3NlckFyZ3VtZW50c1ZhbHVlLT5hc0FycmF5KGJyb3dzZXJB
cmd1bWVudHMpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCisgICAgaWYgKGF1dG8gYnJv
d3NlckFyZ3VtZW50cyA9IGJyb3dzZXJPcHRpb25zLT5nZXRBcnJheSgiYXJncyJfcykpIHsKICAg
ICAgICAgdW5zaWduZWQgYnJvd3NlckFyZ3VtZW50c0xlbmd0aCA9IGJyb3dzZXJBcmd1bWVudHMt
Pmxlbmd0aCgpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYnJvd3NlckFyZ3Vt
ZW50c0xlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHZhbHVl
ID0gYnJvd3NlckFyZ3VtZW50cy0+Z2V0KGkpOwotICAgICAgICAgICAgU3RyaW5nIGFyZ3VtZW50
OwotICAgICAgICAgICAgaWYgKCF2YWx1ZS0+YXNTdHJpbmcoYXJndW1lbnQpKQorICAgICAgICAg
ICAgYXV0byBhcmd1bWVudCA9IGJyb3dzZXJBcmd1bWVudHMtPmdldChpKS0+YXNTdHJpbmcoKTsK
KyAgICAgICAgICAgIGlmICghYXJndW1lbnQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICB9CiAgICAgfQogCi0gICAgUmVmUHRyPEpTT046OlZhbHVlPiBjZXJ0aWZpY2F0
ZXNWYWx1ZTsKLSAgICBpZiAoYnJvd3Nlck9wdGlvbnMtPmdldFZhbHVlKCJjZXJ0aWZpY2F0ZXMi
X3MsIGNlcnRpZmljYXRlc1ZhbHVlKSkgewotICAgICAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IGNl
cnRpZmljYXRlczsKLSAgICAgICAgaWYgKCFjZXJ0aWZpY2F0ZXNWYWx1ZS0+YXNBcnJheShjZXJ0
aWZpY2F0ZXMpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCisgICAgaWYgKGF1dG8gY2Vy
dGlmaWNhdGVzID0gYnJvd3Nlck9wdGlvbnMtPmdldEFycmF5KCJjZXJ0aWZpY2F0ZXMiX3MpKSB7
CiAgICAgICAgIHVuc2lnbmVkIGNlcnRpZmljYXRlc0xlbmd0aCA9IGNlcnRpZmljYXRlcy0+bGVu
Z3RoKCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjZXJ0aWZpY2F0ZXNMZW5n
dGg7ICsraSkgewotICAgICAgICAgICAgUmVmUHRyPEpTT046OlZhbHVlPiBjZXJ0aWZpY2F0ZVZh
bHVlID0gY2VydGlmaWNhdGVzLT5nZXQoaSk7Ci0gICAgICAgICAgICBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiBjZXJ0aWZpY2F0ZTsKLSAgICAgICAgICAgIGlmICghY2VydGlmaWNhdGVWYWx1ZS0+YXNP
YmplY3QoY2VydGlmaWNhdGUpKQorICAgICAgICAgICAgYXV0byBjZXJ0aWZpY2F0ZSA9IGNlcnRp
ZmljYXRlcy0+Z2V0KGkpLT5hc09iamVjdCgpOworICAgICAgICAgICAgaWYgKCFjZXJ0aWZpY2F0
ZSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgICAgIFJlZlB0cjxK
U09OOjpWYWx1ZT4gaG9zdFZhbHVlOwotICAgICAgICAgICAgU3RyaW5nIGhvc3Q7Ci0gICAgICAg
ICAgICBpZiAoIWNlcnRpZmljYXRlLT5nZXRWYWx1ZSgiaG9zdCJfcywgaG9zdFZhbHVlKSB8fCAh
aG9zdFZhbHVlLT5hc1N0cmluZyhob3N0KSkKKyAgICAgICAgICAgIGF1dG8gaG9zdCA9IGNlcnRp
ZmljYXRlLT5nZXRTdHJpbmcoImhvc3QiX3MpOworICAgICAgICAgICAgaWYgKCFob3N0KQogICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICAgICAgUmVmUHRyPEpTT046OlZh
bHVlPiBjZXJ0aWZpY2F0ZUZpbGVWYWx1ZTsKLSAgICAgICAgICAgIFN0cmluZyBjZXJ0aWZpY2F0
ZUZpbGU7Ci0gICAgICAgICAgICBpZiAoIWNlcnRpZmljYXRlLT5nZXRWYWx1ZSgiY2VydGlmaWNh
dGVGaWxlIl9zLCBjZXJ0aWZpY2F0ZUZpbGVWYWx1ZSkgfHwgIWNlcnRpZmljYXRlRmlsZVZhbHVl
LT5hc1N0cmluZyhjZXJ0aWZpY2F0ZUZpbGUpKQorICAgICAgICAgICAgYXV0byBjZXJ0aWZpY2F0
ZUZpbGUgPSBjZXJ0aWZpY2F0ZS0+Z2V0U3RyaW5nKCJjZXJ0aWZpY2F0ZUZpbGUiX3MpOworICAg
ICAgICAgICAgaWYgKCFjZXJ0aWZpY2F0ZUZpbGUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICB9CiAgICAgfQpAQCAtMTA1LDcgKzg5LDcgQEAgYm9vbCBXZWJEcml2ZXJT
ZXJ2aWNlOjpwbGF0Zm9ybVZhbGlkYXRlQ2FwYWJpbGl0eShjb25zdCBTdHJpbmcmIG5hbWUsIGNv
bnN0IFJlZlAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBXZWJEcml2ZXJTZXJ2aWNlOjpw
bGF0Zm9ybU1hdGNoQ2FwYWJpbGl0eShjb25zdCBTdHJpbmcmLCBjb25zdCBSZWZQdHI8SlNPTjo6
VmFsdWU+JikgY29uc3QKK2Jvb2wgV2ViRHJpdmVyU2VydmljZTo6cGxhdGZvcm1NYXRjaENhcGFi
aWxpdHkoY29uc3QgU3RyaW5nJiwgY29uc3QgUmVmPEpTT046OlZhbHVlPiYpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIHRydWU7CiB9CkBAIC0xMTYsNTMgKzEwMCw0NiBAQCB2b2lkIFdlYkRyaXZlclNl
cnZpY2U6OnBsYXRmb3JtUGFyc2VDYXBhYmlsaXRpZXMoY29uc3QgSlNPTjo6T2JqZWN0JiBtYXRj
aGVkQ2FwYQogICAgIGNhcGFiaWxpdGllcy5icm93c2VyQXJndW1lbnRzID0gVmVjdG9yPFN0cmlu
Zz4geyAiLS1hdXRvbWF0aW9uIl9zIH07CiAgICAgY2FwYWJpbGl0aWVzLnVzZU92ZXJsYXlTY3Jv
bGxiYXJzID0gdHJ1ZTsKIAotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IGJyb3dzZXJPcHRpb25z
OwotICAgIGlmICghbWF0Y2hlZENhcGFiaWxpdGllcy5nZXRPYmplY3QoIndlYmtpdGd0azpicm93
c2VyT3B0aW9ucyJfcywgYnJvd3Nlck9wdGlvbnMpKQorICAgIGF1dG8gYnJvd3Nlck9wdGlvbnMg
PSBtYXRjaGVkQ2FwYWJpbGl0aWVzLmdldE9iamVjdCgid2Via2l0Z3RrOmJyb3dzZXJPcHRpb25z
Il9zKTsKKyAgICBpZiAoIWJyb3dzZXJPcHRpb25zKQogICAgICAgICByZXR1cm47CiAKLSAgICBT
dHJpbmcgYnJvd3NlckJpbmFyeTsKLSAgICBpZiAoYnJvd3Nlck9wdGlvbnMtPmdldFN0cmluZygi
YmluYXJ5Il9zLCBicm93c2VyQmluYXJ5KSkgeworICAgIGF1dG8gYnJvd3NlckJpbmFyeSA9IGJy
b3dzZXJPcHRpb25zLT5nZXRTdHJpbmcoImJpbmFyeSJfcyk7CisgICAgaWYgKCEhYnJvd3NlckJp
bmFyeSkgewogICAgICAgICBjYXBhYmlsaXRpZXMuYnJvd3NlckJpbmFyeSA9IGJyb3dzZXJCaW5h
cnk7CiAgICAgICAgIGNhcGFiaWxpdGllcy5icm93c2VyQXJndW1lbnRzID0gV1RGOjpudWxsb3B0
OwogICAgIH0KIAotICAgIFJlZlB0cjxKU09OOjpBcnJheT4gYnJvd3NlckFyZ3VtZW50czsKLSAg
ICBpZiAoYnJvd3Nlck9wdGlvbnMtPmdldEFycmF5KCJhcmdzIl9zLCBicm93c2VyQXJndW1lbnRz
KSAmJiBicm93c2VyQXJndW1lbnRzLT5sZW5ndGgoKSkgeworICAgIGF1dG8gYnJvd3NlckFyZ3Vt
ZW50cyA9IGJyb3dzZXJPcHRpb25zLT5nZXRBcnJheSgiYXJncyJfcyk7CisgICAgaWYgKGJyb3dz
ZXJBcmd1bWVudHMgJiYgYnJvd3NlckFyZ3VtZW50cy0+bGVuZ3RoKCkpIHsKICAgICAgICAgdW5z
aWduZWQgYnJvd3NlckFyZ3VtZW50c0xlbmd0aCA9IGJyb3dzZXJBcmd1bWVudHMtPmxlbmd0aCgp
OwogICAgICAgICBjYXBhYmlsaXRpZXMuYnJvd3NlckFyZ3VtZW50cyA9IFZlY3RvcjxTdHJpbmc+
KCk7CiAgICAgICAgIGNhcGFiaWxpdGllcy5icm93c2VyQXJndW1lbnRzLT5yZXNlcnZlSW5pdGlh
bENhcGFjaXR5KGJyb3dzZXJBcmd1bWVudHNMZW5ndGgpOwogICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgYnJvd3NlckFyZ3VtZW50c0xlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICBS
ZWZQdHI8SlNPTjo6VmFsdWU+IHZhbHVlID0gYnJvd3NlckFyZ3VtZW50cy0+Z2V0KGkpOwotICAg
ICAgICAgICAgU3RyaW5nIGFyZ3VtZW50OwotICAgICAgICAgICAgdmFsdWUtPmFzU3RyaW5nKGFy
Z3VtZW50KTsKKyAgICAgICAgICAgIGF1dG8gYXJndW1lbnQgPSBicm93c2VyQXJndW1lbnRzLT5n
ZXQoaSktPmFzU3RyaW5nKCk7CiAgICAgICAgICAgICBBU1NFUlQoIWFyZ3VtZW50LmlzTnVsbCgp
KTsKICAgICAgICAgICAgIGNhcGFiaWxpdGllcy5icm93c2VyQXJndW1lbnRzLT51bmNoZWNrZWRB
cHBlbmQoV1RGTW92ZShhcmd1bWVudCkpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgYm9vbCB1
c2VPdmVybGF5U2Nyb2xsYmFyczsKLSAgICBpZiAoYnJvd3Nlck9wdGlvbnMtPmdldEJvb2xlYW4o
InVzZU92ZXJsYXlTY3JvbGxiYXJzIl9zLCB1c2VPdmVybGF5U2Nyb2xsYmFycykpCisgICAgaWYg
KGF1dG8gdXNlT3ZlcmxheVNjcm9sbGJhcnMgPSBicm93c2VyT3B0aW9ucy0+Z2V0Qm9vbGVhbigi
dXNlT3ZlcmxheVNjcm9sbGJhcnMiX3MpKQogICAgICAgICBjYXBhYmlsaXRpZXMudXNlT3Zlcmxh
eVNjcm9sbGJhcnMgPSB1c2VPdmVybGF5U2Nyb2xsYmFyczsKICAgICBlbHNlCiAgICAgICAgIGNh
cGFiaWxpdGllcy51c2VPdmVybGF5U2Nyb2xsYmFycyA9IHRydWU7CiAKLSAgICBSZWZQdHI8SlNP
Tjo6QXJyYXk+IGNlcnRpZmljYXRlczsKLSAgICBpZiAoYnJvd3Nlck9wdGlvbnMtPmdldEFycmF5
KCJjZXJ0aWZpY2F0ZXMiX3MsIGNlcnRpZmljYXRlcykgJiYgY2VydGlmaWNhdGVzLT5sZW5ndGgo
KSkgeworICAgIGF1dG8gY2VydGlmaWNhdGVzID0gYnJvd3Nlck9wdGlvbnMtPmdldEFycmF5KCJj
ZXJ0aWZpY2F0ZXMiX3MpOworICAgIGlmIChjZXJ0aWZpY2F0ZXMgJiYgY2VydGlmaWNhdGVzLT5s
ZW5ndGgoKSkgewogICAgICAgICB1bnNpZ25lZCBjZXJ0aWZpY2F0ZXNMZW5ndGggPSBjZXJ0aWZp
Y2F0ZXMtPmxlbmd0aCgpOwogICAgICAgICBjYXBhYmlsaXRpZXMuY2VydGlmaWNhdGVzID0gVmVj
dG9yPHN0ZDo6cGFpcjxTdHJpbmcsIFN0cmluZz4+KCk7CiAgICAgICAgIGNhcGFiaWxpdGllcy5j
ZXJ0aWZpY2F0ZXMtPnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoY2VydGlmaWNhdGVzTGVuZ3RoKTsK
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNlcnRpZmljYXRlc0xlbmd0aDsgKytp
KSB7Ci0gICAgICAgICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHZhbHVlID0gY2VydGlmaWNhdGVz
LT5nZXQoaSk7Ci0gICAgICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBjZXJ0aWZpY2F0ZTsK
LSAgICAgICAgICAgIHZhbHVlLT5hc09iamVjdChjZXJ0aWZpY2F0ZSk7CisgICAgICAgICAgICBh
dXRvIGNlcnRpZmljYXRlID0gY2VydGlmaWNhdGVzLT5nZXQoaSktPmFzT2JqZWN0KCk7CiAgICAg
ICAgICAgICBBU1NFUlQoY2VydGlmaWNhdGUpOwogCi0gICAgICAgICAgICBTdHJpbmcgaG9zdDsK
LSAgICAgICAgICAgIGNlcnRpZmljYXRlLT5nZXRTdHJpbmcoImhvc3QiX3MsIGhvc3QpOworICAg
ICAgICAgICAgYXV0byBob3N0ID0gY2VydGlmaWNhdGUtPmdldFN0cmluZygiaG9zdCJfcyk7CiAg
ICAgICAgICAgICBBU1NFUlQoIWhvc3QuaXNOdWxsKCkpOwogCi0gICAgICAgICAgICBTdHJpbmcg
Y2VydGlmaWNhdGVGaWxlOwotICAgICAgICAgICAgY2VydGlmaWNhdGUtPmdldFN0cmluZygiY2Vy
dGlmaWNhdGVGaWxlIl9zLCBjZXJ0aWZpY2F0ZUZpbGUpOworICAgICAgICAgICAgYXV0byBjZXJ0
aWZpY2F0ZUZpbGUgPSBjZXJ0aWZpY2F0ZS0+Z2V0U3RyaW5nKCJjZXJ0aWZpY2F0ZUZpbGUiX3Mp
OwogICAgICAgICAgICAgQVNTRVJUKCFjZXJ0aWZpY2F0ZUZpbGUuaXNOdWxsKCkpOwogCiAgICAg
ICAgICAgICBjYXBhYmlsaXRpZXMuY2VydGlmaWNhdGVzLT51bmNoZWNrZWRBcHBlbmQoeyBXVEZN
b3ZlKGhvc3QpLCBXVEZNb3ZlKGNlcnRpZmljYXRlRmlsZSkgfSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViRHJpdmVyL3dpbi9XZWJEcml2ZXJTZXJ2aWNlV2luLmNwcCBiL1NvdXJjZS9XZWJEcml2
ZXIvd2luL1dlYkRyaXZlclNlcnZpY2VXaW4uY3BwCmluZGV4IGVjZmU0Y2QxMDUyNmVhYTFlY2Nh
Y2EwNDM5ODhjZDYzMzA0ZDM4NGQuLjlhOTYwZjBiYmYyZGEzODhhOTZmNjlmNGFmNzQxN2VlNjBl
ZDM3MzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJEcml2ZXIvd2luL1dlYkRyaXZlclNlcnZpY2VX
aW4uY3BwCisrKyBiL1NvdXJjZS9XZWJEcml2ZXIvd2luL1dlYkRyaXZlclNlcnZpY2VXaW4uY3Bw
CkBAIC00NCwxMiArNDQsMTIgQEAgYm9vbCBXZWJEcml2ZXJTZXJ2aWNlOjpwbGF0Zm9ybUNvbXBh
cmVCcm93c2VyVmVyc2lvbnMoY29uc3QgU3RyaW5nJiByZXF1aXJlZFZlcnMKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotYm9vbCBXZWJEcml2ZXJTZXJ2aWNlOjpwbGF0Zm9ybVZhbGlkYXRlQ2FwYWJp
bGl0eShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFJlZlB0cjxKU09OOjpWYWx1ZT4mIHZhbHVl
KSBjb25zdAorYm9vbCBXZWJEcml2ZXJTZXJ2aWNlOjpwbGF0Zm9ybVZhbGlkYXRlQ2FwYWJpbGl0
eShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFJlZjxKU09OOjpWYWx1ZT4mIHZhbHVlKSBjb25z
dAogewogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFdlYkRyaXZlclNlcnZpY2U6OnBsYXRm
b3JtTWF0Y2hDYXBhYmlsaXR5KGNvbnN0IFN0cmluZyYsIGNvbnN0IFJlZlB0cjxKU09OOjpWYWx1
ZT4mKSBjb25zdAorYm9vbCBXZWJEcml2ZXJTZXJ2aWNlOjpwbGF0Zm9ybU1hdGNoQ2FwYWJpbGl0
eShjb25zdCBTdHJpbmcmLCBjb25zdCBSZWY8SlNPTjo6VmFsdWU+JikgY29uc3QKIHsKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJEcml2ZXIvd3BlL1dlYkRyaXZl
clNlcnZpY2VXUEUuY3BwIGIvU291cmNlL1dlYkRyaXZlci93cGUvV2ViRHJpdmVyU2VydmljZVdQ
RS5jcHAKaW5kZXggMDZkM2E1YzJhODI1MjkxOGU3NGYxMDNlYmM4OWNiNTIzNzllOTAzNy4uMmI3
YjE3MWYyMmRhNTNmZWY5NTgxYmRmNmRiNzY2M2NiMWRjYTMxMCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkRyaXZlci93cGUvV2ViRHJpdmVyU2VydmljZVdQRS5jcHAKKysrIGIvU291cmNlL1dlYkRy
aXZlci93cGUvV2ViRHJpdmVyU2VydmljZVdQRS5jcHAKQEAgLTQwLDU3ICs0MCw0NyBAQCBDYXBh
YmlsaXRpZXMgV2ViRHJpdmVyU2VydmljZTo6cGxhdGZvcm1DYXBhYmlsaXRpZXMoKQogICAgIHJl
dHVybiBjYXBhYmlsaXRpZXM7CiB9CiAKLWJvb2wgV2ViRHJpdmVyU2VydmljZTo6cGxhdGZvcm1W
YWxpZGF0ZUNhcGFiaWxpdHkoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBSZWZQdHI8SlNPTjo6
VmFsdWU+JiB2YWx1ZSkgY29uc3QKK2Jvb2wgV2ViRHJpdmVyU2VydmljZTo6cGxhdGZvcm1WYWxp
ZGF0ZUNhcGFiaWxpdHkoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBSZWY8SlNPTjo6VmFsdWU+
JiB2YWx1ZSkgY29uc3QKIHsKICAgICBpZiAobmFtZSAhPSAid3BlOmJyb3dzZXJPcHRpb25zIikK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBicm93c2Vy
T3B0aW9uczsKLSAgICBpZiAoIXZhbHVlLT5hc09iamVjdChicm93c2VyT3B0aW9ucykpCisgICAg
YXV0byBicm93c2VyT3B0aW9ucyA9IHZhbHVlLT5hc09iamVjdCgpOworICAgIGlmICghYnJvd3Nl
ck9wdGlvbnMpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChicm93c2VyT3B0aW9u
cy0+aXNOdWxsKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgLy8gSWYgYnJvd3NlciBv
cHRpb25zIGFyZSBwcm92aWRlZCwgYmluYXJ5IGlzIHJlcXVpcmVkLgotICAgIFN0cmluZyBiaW5h
cnk7Ci0gICAgaWYgKCFicm93c2VyT3B0aW9ucy0+Z2V0U3RyaW5nKCJiaW5hcnkiX3MsIGJpbmFy
eSkpCisgICAgYXV0byBiaW5hcnkgPSBicm93c2VyT3B0aW9ucy0+Z2V0U3RyaW5nKCJiaW5hcnki
X3MpOworICAgIGlmICghYmluYXJ5KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBSZWZQ
dHI8SlNPTjo6VmFsdWU+IGJyb3dzZXJBcmd1bWVudHNWYWx1ZTsKLSAgICBSZWZQdHI8SlNPTjo6
QXJyYXk+IGJyb3dzZXJBcmd1bWVudHM7Ci0gICAgaWYgKGJyb3dzZXJPcHRpb25zLT5nZXRWYWx1
ZSgiYXJncyJfcywgYnJvd3NlckFyZ3VtZW50c1ZhbHVlKSAmJiAhYnJvd3NlckFyZ3VtZW50c1Zh
bHVlLT5hc0FycmF5KGJyb3dzZXJBcmd1bWVudHMpKQorICAgIGF1dG8gYnJvd3NlckFyZ3VtZW50
cyA9IGJyb3dzZXJPcHRpb25zLT5nZXRBcnJheSgiYXJncyJfcyk7CisgICAgaWYgKCFicm93c2Vy
QXJndW1lbnRzKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICB1bnNpZ25lZCBicm93c2Vy
QXJndW1lbnRzTGVuZ3RoID0gYnJvd3NlckFyZ3VtZW50cy0+bGVuZ3RoKCk7CiAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGJyb3dzZXJBcmd1bWVudHNMZW5ndGg7ICsraSkgewotICAgICAg
ICBSZWZQdHI8SlNPTjo6VmFsdWU+IHZhbHVlID0gYnJvd3NlckFyZ3VtZW50cy0+Z2V0KGkpOwot
ICAgICAgICBTdHJpbmcgYXJndW1lbnQ7Ci0gICAgICAgIGlmICghdmFsdWUtPmFzU3RyaW5nKGFy
Z3VtZW50KSkKKyAgICAgICAgYXV0byBhcmd1bWVudCA9IGJyb3dzZXJBcmd1bWVudHMtPmdldChp
KS0+YXNTdHJpbmcoKTsKKyAgICAgICAgaWYgKCFhcmd1bWVudCkKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICB9CiAKLSAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IGNlcnRpZmljYXRlc1Zh
bHVlOwotICAgIGlmIChicm93c2VyT3B0aW9ucy0+Z2V0VmFsdWUoImNlcnRpZmljYXRlcyJfcywg
Y2VydGlmaWNhdGVzVmFsdWUpKSB7Ci0gICAgICAgIFJlZlB0cjxKU09OOjpBcnJheT4gY2VydGlm
aWNhdGVzOwotICAgICAgICBpZiAoIWNlcnRpZmljYXRlc1ZhbHVlLT5hc0FycmF5KGNlcnRpZmlj
YXRlcykpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KKyAgICBpZiAoYXV0byBjZXJ0aWZp
Y2F0ZXMgPSBicm93c2VyT3B0aW9ucy0+Z2V0QXJyYXkoImNlcnRpZmljYXRlcyJfcykpIHsKICAg
ICAgICAgdW5zaWduZWQgY2VydGlmaWNhdGVzTGVuZ3RoID0gY2VydGlmaWNhdGVzLT5sZW5ndGgo
KTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNlcnRpZmljYXRlc0xlbmd0aDsg
KytpKSB7Ci0gICAgICAgICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IGNlcnRpZmljYXRlVmFsdWUg
PSBjZXJ0aWZpY2F0ZXMtPmdldChpKTsKLSAgICAgICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+
IGNlcnRpZmljYXRlOwotICAgICAgICAgICAgaWYgKCFjZXJ0aWZpY2F0ZVZhbHVlLT5hc09iamVj
dChjZXJ0aWZpY2F0ZSkpCisgICAgICAgICAgICBhdXRvIGNlcnRpZmljYXRlID0gY2VydGlmaWNh
dGVzLT5nZXQoaSktPmFzT2JqZWN0KCk7CisgICAgICAgICAgICBpZiAoIWNlcnRpZmljYXRlKQog
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICAgICAgUmVmUHRyPEpTT046
OlZhbHVlPiBob3N0VmFsdWU7Ci0gICAgICAgICAgICBTdHJpbmcgaG9zdDsKLSAgICAgICAgICAg
IGlmICghY2VydGlmaWNhdGUtPmdldFZhbHVlKCJob3N0Il9zLCBob3N0VmFsdWUpIHx8ICFob3N0
VmFsdWUtPmFzU3RyaW5nKGhvc3QpKQorICAgICAgICAgICAgYXV0byBob3N0ID0gY2VydGlmaWNh
dGUtPmdldFN0cmluZygiaG9zdCJfcyk7CisgICAgICAgICAgICBpZiAoIWhvc3QpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+
IGNlcnRpZmljYXRlRmlsZVZhbHVlOwotICAgICAgICAgICAgU3RyaW5nIGNlcnRpZmljYXRlRmls
ZTsKLSAgICAgICAgICAgIGlmICghY2VydGlmaWNhdGUtPmdldFZhbHVlKCJjZXJ0aWZpY2F0ZUZp
bGUiX3MsIGNlcnRpZmljYXRlRmlsZVZhbHVlKSB8fCAhY2VydGlmaWNhdGVGaWxlVmFsdWUtPmFz
U3RyaW5nKGNlcnRpZmljYXRlRmlsZSkpCisgICAgICAgICAgICBhdXRvIGNlcnRpZmljYXRlRmls
ZSA9IGNlcnRpZmljYXRlLT5nZXRTdHJpbmcoImNlcnRpZmljYXRlRmlsZSJfcyk7CisgICAgICAg
ICAgICBpZiAoIWNlcnRpZmljYXRlRmlsZSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgIH0KICAgICB9CkBAIC05OCw3ICs4OCw3IEBAIGJvb2wgV2ViRHJpdmVyU2Vydmlj
ZTo6cGxhdGZvcm1WYWxpZGF0ZUNhcGFiaWxpdHkoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBS
ZWZQCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgV2ViRHJpdmVyU2VydmljZTo6cGxhdGZv
cm1NYXRjaENhcGFiaWxpdHkoY29uc3QgU3RyaW5nJiwgY29uc3QgUmVmUHRyPEpTT046OlZhbHVl
PiYpIGNvbnN0Citib29sIFdlYkRyaXZlclNlcnZpY2U6OnBsYXRmb3JtTWF0Y2hDYXBhYmlsaXR5
KGNvbnN0IFN0cmluZyYsIGNvbnN0IFJlZjxKU09OOjpWYWx1ZT4mKSBjb25zdAogewogICAgIHJl
dHVybiB0cnVlOwogfQpAQCAtMTA4LDQ3ICs5OCw0MSBAQCB2b2lkIFdlYkRyaXZlclNlcnZpY2U6
OnBsYXRmb3JtUGFyc2VDYXBhYmlsaXRpZXMoY29uc3QgSlNPTjo6T2JqZWN0JiBtYXRjaGVkQ2Fw
YQogICAgIGNhcGFiaWxpdGllcy5icm93c2VyQmluYXJ5ID0gU3RyaW5nKCJNaW5pQnJvd3NlciIp
OwogICAgIGNhcGFiaWxpdGllcy5icm93c2VyQXJndW1lbnRzID0gVmVjdG9yPFN0cmluZz4geyAi
LS1hdXRvbWF0aW9uIl9zIH07CiAKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBicm93c2VyT3B0
aW9uczsKLSAgICBpZiAoIW1hdGNoZWRDYXBhYmlsaXRpZXMuZ2V0T2JqZWN0KCJ3cGU6YnJvd3Nl
ck9wdGlvbnMiX3MsIGJyb3dzZXJPcHRpb25zKSkKKyAgICBhdXRvIGJyb3dzZXJPcHRpb25zID0g
bWF0Y2hlZENhcGFiaWxpdGllcy5nZXRPYmplY3QoIndwZTpicm93c2VyT3B0aW9ucyJfcyk7Cisg
ICAgaWYgKCFicm93c2VyT3B0aW9ucykKICAgICAgICAgcmV0dXJuOwogCi0gICAgU3RyaW5nIGJy
b3dzZXJCaW5hcnk7Ci0gICAgaWYgKGJyb3dzZXJPcHRpb25zLT5nZXRTdHJpbmcoImJpbmFyeSJf
cywgYnJvd3NlckJpbmFyeSkpIHsKKyAgICBhdXRvIGJyb3dzZXJCaW5hcnkgPSBicm93c2VyT3B0
aW9ucy0+Z2V0U3RyaW5nKCJiaW5hcnkiX3MpOworICAgIGlmICghIWJyb3dzZXJCaW5hcnkpIHsK
ICAgICAgICAgY2FwYWJpbGl0aWVzLmJyb3dzZXJCaW5hcnkgPSBicm93c2VyQmluYXJ5OwogICAg
ICAgICBjYXBhYmlsaXRpZXMuYnJvd3NlckFyZ3VtZW50cyA9IFdURjo6bnVsbG9wdDsKICAgICB9
CiAKLSAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IGJyb3dzZXJBcmd1bWVudHM7Ci0gICAgaWYgKGJy
b3dzZXJPcHRpb25zLT5nZXRBcnJheSgiYXJncyJfcywgYnJvd3NlckFyZ3VtZW50cykgJiYgYnJv
d3NlckFyZ3VtZW50cy0+bGVuZ3RoKCkpIHsKKyAgICBhdXRvIGJyb3dzZXJBcmd1bWVudHMgPSBi
cm93c2VyT3B0aW9ucy0+Z2V0QXJyYXkoImFyZ3MiX3MpOworICAgIGlmIChicm93c2VyQXJndW1l
bnRzICYmIGJyb3dzZXJBcmd1bWVudHMtPmxlbmd0aCgpKSB7CiAgICAgICAgIHVuc2lnbmVkIGJy
b3dzZXJBcmd1bWVudHNMZW5ndGggPSBicm93c2VyQXJndW1lbnRzLT5sZW5ndGgoKTsKICAgICAg
ICAgY2FwYWJpbGl0aWVzLmJyb3dzZXJBcmd1bWVudHMgPSBWZWN0b3I8U3RyaW5nPigpOwogICAg
ICAgICBjYXBhYmlsaXRpZXMuYnJvd3NlckFyZ3VtZW50cy0+cmVzZXJ2ZUluaXRpYWxDYXBhY2l0
eShicm93c2VyQXJndW1lbnRzTGVuZ3RoKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGJyb3dzZXJBcmd1bWVudHNMZW5ndGg7ICsraSkgewotICAgICAgICAgICAgUmVmUHRyPEpT
T046OlZhbHVlPiB2YWx1ZSA9IGJyb3dzZXJBcmd1bWVudHMtPmdldChpKTsKLSAgICAgICAgICAg
IFN0cmluZyBhcmd1bWVudDsKLSAgICAgICAgICAgIHZhbHVlLT5hc1N0cmluZyhhcmd1bWVudCk7
CisgICAgICAgICAgICBhdXRvIGFyZ3VtZW50ID0gYnJvd3NlckFyZ3VtZW50cy0+Z2V0KGkpLT5h
c1N0cmluZygpOwogICAgICAgICAgICAgQVNTRVJUKCFhcmd1bWVudC5pc051bGwoKSk7CiAgICAg
ICAgICAgICBjYXBhYmlsaXRpZXMuYnJvd3NlckFyZ3VtZW50cy0+dW5jaGVja2VkQXBwZW5kKFdU
Rk1vdmUoYXJndW1lbnQpKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIFJlZlB0cjxKU09OOjpB
cnJheT4gY2VydGlmaWNhdGVzOwotICAgIGlmIChicm93c2VyT3B0aW9ucy0+Z2V0QXJyYXkoImNl
cnRpZmljYXRlcyJfcywgY2VydGlmaWNhdGVzKSAmJiBjZXJ0aWZpY2F0ZXMtPmxlbmd0aCgpKSB7
CisgICAgYXV0byBjZXJ0aWZpY2F0ZXMgPSBicm93c2VyT3B0aW9ucy0+Z2V0QXJyYXkoImNlcnRp
ZmljYXRlcyJfcyk7CisgICAgaWYgKGNlcnRpZmljYXRlcyAmJiBjZXJ0aWZpY2F0ZXMtPmxlbmd0
aCgpKSB7CiAgICAgICAgIHVuc2lnbmVkIGNlcnRpZmljYXRlc0xlbmd0aCA9IGNlcnRpZmljYXRl
cy0+bGVuZ3RoKCk7CiAgICAgICAgIGNhcGFiaWxpdGllcy5jZXJ0aWZpY2F0ZXMgPSBWZWN0b3I8
c3RkOjpwYWlyPFN0cmluZywgU3RyaW5nPj4oKTsKICAgICAgICAgY2FwYWJpbGl0aWVzLmNlcnRp
ZmljYXRlcy0+cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShjZXJ0aWZpY2F0ZXNMZW5ndGgpOwogICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY2VydGlmaWNhdGVzTGVuZ3RoOyArK2kpIHsK
LSAgICAgICAgICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gdmFsdWUgPSBjZXJ0aWZpY2F0ZXMtPmdl
dChpKTsKLSAgICAgICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IGNlcnRpZmljYXRlOwotICAg
ICAgICAgICAgdmFsdWUtPmFzT2JqZWN0KGNlcnRpZmljYXRlKTsKKyAgICAgICAgICAgIGF1dG8g
Y2VydGlmaWNhdGUgPSBjZXJ0aWZpY2F0ZXMtPmdldChpKS0+YXNPYmplY3QoKTsKICAgICAgICAg
ICAgIEFTU0VSVChjZXJ0aWZpY2F0ZSk7CiAKLSAgICAgICAgICAgIFN0cmluZyBob3N0OwotICAg
ICAgICAgICAgY2VydGlmaWNhdGUtPmdldFN0cmluZygiaG9zdCJfcywgaG9zdCk7CisgICAgICAg
ICAgICBhdXRvIGhvc3QgPSBjZXJ0aWZpY2F0ZS0+Z2V0U3RyaW5nKCJob3N0Il9zKTsKICAgICAg
ICAgICAgIEFTU0VSVCghaG9zdC5pc051bGwoKSk7CiAKLSAgICAgICAgICAgIFN0cmluZyBjZXJ0
aWZpY2F0ZUZpbGU7Ci0gICAgICAgICAgICBjZXJ0aWZpY2F0ZS0+Z2V0U3RyaW5nKCJjZXJ0aWZp
Y2F0ZUZpbGUiX3MsIGNlcnRpZmljYXRlRmlsZSk7CisgICAgICAgICAgICBhdXRvIGNlcnRpZmlj
YXRlRmlsZSA9IGNlcnRpZmljYXRlLT5nZXRTdHJpbmcoImNlcnRpZmljYXRlRmlsZSJfcyk7CiAg
ICAgICAgICAgICBBU1NFUlQoIWNlcnRpZmljYXRlRmlsZS5pc051bGwoKSk7CiAKICAgICAgICAg
ICAgIGNhcGFiaWxpdGllcy5jZXJ0aWZpY2F0ZXMtPnVuY2hlY2tlZEFwcGVuZCh7IFdURk1vdmUo
aG9zdCksIFdURk1vdmUoY2VydGlmaWNhdGVGaWxlKSB9KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0NTU01hbmFnZXIuanMgYi9T
b3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9DU1NNYW5hZ2Vy
LmpzCmluZGV4IDY4YWVhYTk3ODcwMjhlZThkMTg1OGExZDI3MDc1MDMzNjBiZDRlOTIuLjE1YjYy
MzFhZjMzYjRjZjdlZWI4ZDI5MDk4NzNiNGRhNGE1YmE3YTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0NTU01hbmFnZXIuanMKKysr
IGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvQ1NTTWFu
YWdlci5qcwpAQCAtMjAzLDMyICsyMDMsMzQgQEAgV0kuQ1NTTWFuYWdlciA9IGNsYXNzIENTU01h
bmFnZXIgZXh0ZW5kcyBXSS5PYmplY3QKICAgICAgICAgaWYgKCF0aGlzLmNhbkZvcmNlQXBwZWFy
YW5jZSgpKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIGxldCBwcm90b2NvbE5hbWUg
PSAiIjsKKyAgICAgICAgbGV0IGNvbW1hbmRBcmd1bWVudHMgPSB7fTsKIAogICAgICAgICBzd2l0
Y2ggKG5hbWUpIHsKICAgICAgICAgY2FzZSBXSS5DU1NNYW5hZ2VyLkFwcGVhcmFuY2UuTGlnaHQ6
Ci0gICAgICAgICAgICBwcm90b2NvbE5hbWUgPSBJbnNwZWN0b3JCYWNrZW5kLkVudW0uUGFnZS5B
cHBlYXJhbmNlLkxpZ2h0OworICAgICAgICAgICAgY29tbWFuZEFyZ3VtZW50cy5hcHBlYXJhbmNl
ID0gSW5zcGVjdG9yQmFja2VuZC5FbnVtLlBhZ2UuQXBwZWFyYW5jZS5MaWdodDsKICAgICAgICAg
ICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgV0kuQ1NTTWFuYWdlci5BcHBlYXJhbmNlLkRhcms6
Ci0gICAgICAgICAgICBwcm90b2NvbE5hbWUgPSBJbnNwZWN0b3JCYWNrZW5kLkVudW0uUGFnZS5B
cHBlYXJhbmNlLkRhcms7CisgICAgICAgICAgICBjb21tYW5kQXJndW1lbnRzLmFwcGVhcmFuY2Ug
PSBJbnNwZWN0b3JCYWNrZW5kLkVudW0uUGFnZS5BcHBlYXJhbmNlLkRhcms7CiAgICAgICAgICAg
ICBicmVhazsKIAogICAgICAgICBjYXNlIG51bGw6Ci0gICAgICAgIGNhc2UgdW5kZWZpbmVkOgot
ICAgICAgICBjYXNlICIiOgotICAgICAgICAgICAgcHJvdG9jb2xOYW1lID0gIiI7CisgICAgICAg
ICAgICAvLyBDT01QQVRJQklMSVRZIChpT1MgMTQpOiB0aGUgYGFwcGVhcmFuY2VgYCBwYXJhbWV0
ZXIgb2YgYFBhZ2Uuc2V0Rm9yY2VkQXBwZWFyYW5jZWAgd2FzIG5vdCBvcHRpb25hbC4KKyAgICAg
ICAgICAgIC8vIFNpbmNlIHN1cHBvcnQgY2FuJ3QgYmUgdGVzdGVkIGRpcmVjdGx5LCBjaGVjayBm
b3IgdGhlIGBvcHRpb25zYGAgcGFyYW1ldGVyIG9mIGBET01EZWJ1Z2dlci5zZXRET01CcmVha3Bv
aW50YCAoaU9TIDE0LjArKS4KKyAgICAgICAgICAgIC8vIEZJWE1FOiBVc2UgZXhwbGljaXQgdmVy
c2lvbiBjaGVja2luZyBvbmNlIGh0dHBzOi8vd2Via2l0Lm9yZy9iLzE0ODY4MCBpcyBmaXhlZC4K
KyAgICAgICAgICAgIGlmICghSW5zcGVjdG9yQmFja2VuZC5oYXNDb21tYW5kKCJET01EZWJ1Z2dl
ci5zZXRET01CcmVha3BvaW50IiwgIm9wdGlvbnMiKSkKKyAgICAgICAgICAgICAgICBjb21tYW5k
QXJndW1lbnRzLmFwcGVhcmFuY2UgPSAiIjsKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICAvLyBBYm9ydCBmb3IgdW5rbm93biB2YWx1ZXMuCisgICAg
ICAgICAgICBjb25zb2xlLmFzc2VydChmYWxzZSwgIlVua25vd24gYXBwZWFyYW5jZSIsIG5hbWUp
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgdGhpcy5fZm9yY2Vk
QXBwZWFyYW5jZSA9IG5hbWUgfHwgbnVsbDsKIAogICAgICAgICBsZXQgdGFyZ2V0ID0gV0kuYXNz
dW1pbmdNYWluVGFyZ2V0KCk7Ci0gICAgICAgIHRhcmdldC5QYWdlQWdlbnQuc2V0Rm9yY2VkQXBw
ZWFyYW5jZShwcm90b2NvbE5hbWUpLnRoZW4oKCkgPT4geworICAgICAgICB0YXJnZXQuUGFnZUFn
ZW50LnNldEZvcmNlZEFwcGVhcmFuY2UuaW52b2tlKGNvbW1hbmRBcmd1bWVudHMpLnRoZW4oKCkg
PT4gewogICAgICAgICAgICAgdGhpcy5tZWRpYVF1ZXJ5UmVzdWx0Q2hhbmdlZCgpOwogICAgICAg
ICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV0kuQ1NTTWFuYWdlci5FdmVudC5G
b3JjZWRBcHBlYXJhbmNlRGlkQ2hhbmdlLCB7YXBwZWFyYW5jZTogdGhpcy5fZm9yY2VkQXBwZWFy
YW5jZX0pOwogICAgICAgICB9KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9V
c2VySW50ZXJmYWNlL1ZpZXdzL1NldHRpbmdzVGFiQ29udGVudFZpZXcuanMgYi9Tb3VyY2UvV2Vi
SW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9TZXR0aW5nc1RhYkNvbnRlbnRWaWV3Lmpz
CmluZGV4IDQ4MmUxNDJhZTExZDYzYzAwMTVmOTZjNzRiY2IyZGVhMmZlNTA2OWQuLjkxODM2ZWNj
NzY5Nzc1NmE5NjZlZmVhNzEwM2M5MmQzNDA4ZTQ0NjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJ
bnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1NldHRpbmdzVGFiQ29udGVudFZpZXcuanMK
KysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvU2V0dGluZ3NU
YWJDb250ZW50Vmlldy5qcwpAQCAtMzQ2LDE0ICszNDYsMTggQEAgV0kuU2V0dGluZ3NUYWJDb250
ZW50VmlldyA9IGNsYXNzIFNldHRpbmdzVGFiQ29udGVudFZpZXcgZXh0ZW5kcyBXSS5UYWJDb250
ZW50VmkKICAgICAgICAgICAgICAgICBbV0kuTG9nZ2luZ0NoYW5uZWwuTGV2ZWwuVmVyYm9zZSwg
V0kuVUlTdHJpbmcoIlZlcmJvc2UiKV0sCiAgICAgICAgICAgICBdOwogICAgICAgICAgICAgY29u
c3QgZWRpdG9yTGFiZWxzID0gewotICAgICAgICAgICAgICAgIG1lZGlhOiBXSS5VSVN0cmluZygi
TWVkaWEgTG9nZ2luZzoiKSwKLSAgICAgICAgICAgICAgICBtZWRpYXNvdXJjZTogV0kuVUlTdHJp
bmcoIk1TRSBMb2dnaW5nOiIpLAotICAgICAgICAgICAgICAgIHdlYnJ0YzogV0kuVUlTdHJpbmco
IldlYlJUQyBMb2dnaW5nOiIpLAorICAgICAgICAgICAgICAgIFtXSS5Db25zb2xlTWVzc2FnZS5N
ZXNzYWdlU291cmNlLk1lZGlhXTogV0kuVUlTdHJpbmcoIk1lZGlhIExvZ2dpbmc6IiksCisgICAg
ICAgICAgICAgICAgW1dJLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VTb3VyY2UuTWVkaWFTb3VyY2Vd
OiBXSS5VSVN0cmluZygiTVNFIExvZ2dpbmc6IiksCisgICAgICAgICAgICAgICAgW1dJLkNvbnNv
bGVNZXNzYWdlLk1lc3NhZ2VTb3VyY2UuV2ViUlRDXTogV0kuVUlTdHJpbmcoIldlYlJUQyBMb2dn
aW5nOiIpLAogICAgICAgICAgICAgfTsKIAogICAgICAgICAgICAgbGV0IGNoYW5uZWxzID0gV0ku
Y29uc29sZU1hbmFnZXIuY3VzdG9tTG9nZ2luZ0NoYW5uZWxzOwogICAgICAgICAgICAgZm9yIChs
ZXQgY2hhbm5lbCBvZiBjaGFubmVscykgewotICAgICAgICAgICAgICAgIGxldCBsb2dFZGl0b3Ig
PSBjb25zb2xlU2V0dGluZ3NWaWV3LmFkZEdyb3VwV2l0aEN1c3RvbVNldHRpbmcoZWRpdG9yTGFi
ZWxzW2NoYW5uZWwuc291cmNlXSwgV0kuU2V0dGluZ0VkaXRvci5UeXBlLlNlbGVjdCwge3ZhbHVl
czogbG9nTGV2ZWxzfSk7CisgICAgICAgICAgICAgICAgbGV0IGxhYmVsID0gZWRpdG9yTGFiZWxz
W2NoYW5uZWwuc291cmNlXTsKKyAgICAgICAgICAgICAgICBpZiAoIWxhYmVsKQorICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgICAgIGxldCBsb2dFZGl0b3IgPSBj
b25zb2xlU2V0dGluZ3NWaWV3LmFkZEdyb3VwV2l0aEN1c3RvbVNldHRpbmcobGFiZWwsIFdJLlNl
dHRpbmdFZGl0b3IuVHlwZS5TZWxlY3QsIHt2YWx1ZXM6IGxvZ0xldmVsc30pOwogICAgICAgICAg
ICAgICAgIGxvZ0VkaXRvci52YWx1ZSA9IGNoYW5uZWwubGV2ZWw7CiAgICAgICAgICAgICAgICAg
bG9nRWRpdG9yLmFkZEV2ZW50TGlzdGVuZXIoV0kuU2V0dGluZ0VkaXRvci5FdmVudC5WYWx1ZURp
ZENoYW5nZSwgKCkgPT4gewogICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCB0YXJnZXQgb2Yg
V0kudGFyZ2V0cykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRp
b24vQXV0b21hdGlvbi5qc29uIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9B
dXRvbWF0aW9uLmpzb24KaW5kZXggM2RjYjIxNDFlYjBkMjc5NDcwN2RlMjg0Yzg3MDcxMGU4Nzcy
MWMzOS4uZWIzY2RiNWY4NjZjNWY5M2E4ODIyOTgzYTQ5ZDkxNmYzZTZlYWZlNSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9BdXRvbWF0aW9uLmpzb24KKysr
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9BdXRvbWF0aW9uLmpzb24KQEAg
LTMyLDcgKzMyLDggQEAKICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJUaGUgY29vcmRpbmF0
ZSBzeXN0ZW0gaW4gd2hpY2ggcmVjdHMsIHBvaW50cywgYW5kIHNpemVzIGFyZSB0byBiZSBpbnRl
cnByZXRlZC4iLAogICAgICAgICAgICAgImVudW0iOiBbCiAgICAgICAgICAgICAgICAgIlBhZ2Ui
LAotICAgICAgICAgICAgICAgICJWaWV3cG9ydCIKKyAgICAgICAgICAgICAgICAiVmlld3BvcnQi
LAorICAgICAgICAgICAgICAgICJMYXlvdXRWaWV3cG9ydCIKICAgICAgICAgICAgIF0KICAgICAg
ICAgfSwKICAgICAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0
b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbi5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmNwcAppbmRleCBkODdhNGRmZWM3OTRm
MzFkY2I2NGU1ZTllZjRiY2U0YjE4YzE5MmEyLi4zZjdlNDBlNThkNGFkODFhZjc0MjA4YmNhNjEw
YmE5ZjhmNTE3Nzg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0
aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmNwcApAQCAtMzA1LDcgKzMwNSw3IEBA
IHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OmdldEJyb3dzaW5nQ29udGV4dHMoUmVmPEdldEJy
b3dzaW5nQ29udGV4dHNDYWxsYmFjaz4mCiAgICAgZ2V0TmV4dENvbnRleHQobWFrZVJlZigqdGhp
cyksIFdURk1vdmUocGFnZXMpLCBKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1
dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dD46OmNyZWF0ZSgpLCBXVEZNb3ZlKGNhbGxiYWNrKSk7
CiB9CiAKLXZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OmdldEJyb3dzaW5nQ29udGV4dChjb25z
dCBTdHJpbmcmIGhhbmRsZSwgUmVmPEdldEJyb3dzaW5nQ29udGV4dENhbGxiYWNrPiYmIGNhbGxi
YWNrKQordm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6Z2V0QnJvd3NpbmdDb250ZXh0KGNvbnN0
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYg
aGFuZGxlLCBSZWY8R2V0QnJvd3NpbmdDb250ZXh0Q2FsbGJhY2s+JiYgY2FsbGJhY2spCiB7CiAg
ICAgV2ViUGFnZVByb3h5KiBwYWdlID0gd2ViUGFnZVByb3h5Rm9ySGFuZGxlKGhhbmRsZSk7CiAg
ICAgaWYgKCFwYWdlKQpAQCAtMzI4LDcgKzMyOCw3IEBAIHN0YXRpYyBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRQcmVzZW50YXRpb24gdG9Qcm90b2NvbChB
CiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAotdm9pZCBXZWJBdXRvbWF0
aW9uU2Vzc2lvbjo6Y3JlYXRlQnJvd3NpbmdDb250ZXh0KGNvbnN0IFN0cmluZyogb3B0aW9uYWxQ
cmVzZW50YXRpb25IaW50LCBSZWY8Q3JlYXRlQnJvd3NpbmdDb250ZXh0Q2FsbGJhY2s+JiYgY2Fs
bGJhY2spCit2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpjcmVhdGVCcm93c2luZ0NvbnRleHQo
T3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0
UHJlc2VudGF0aW9uPiYmIHByZXNlbnRhdGlvbkhpbnQsIFJlZjxDcmVhdGVCcm93c2luZ0NvbnRl
eHRDYWxsYmFjaz4mJiBjYWxsYmFjaykKIHsKICAgICBBU1NFUlQobV9jbGllbnQpOwogICAgIGlm
ICghbV9jbGllbnQpCkBAIC0zMzYsMTEgKzMzNiw4IEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Np
b246OmNyZWF0ZUJyb3dzaW5nQ29udGV4dChjb25zdCBTdHJpbmcqIG9wdGlvbmFsUHJlc2VudGF0
CiAKICAgICB1aW50MTZfdCBvcHRpb25zID0gMDsKIAotICAgIGlmIChvcHRpb25hbFByZXNlbnRh
dGlvbkhpbnQpIHsKLSAgICAgICAgYXV0byBwYXJzZWRQcmVzZW50YXRpb25IaW50ID0gSW5zcGVj
dG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbkhlbHBlcnM6OnBhcnNlRW51bVZhbHVlRnJvbVN0cmlu
ZzxJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRQcmVzZW50
YXRpb24+KCpvcHRpb25hbFByZXNlbnRhdGlvbkhpbnQpOwotICAgICAgICBpZiAocGFyc2VkUHJl
c2VudGF0aW9uSGludC5oYXNWYWx1ZSgpICYmIHBhcnNlZFByZXNlbnRhdGlvbkhpbnQudmFsdWUo
KSA9PSBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRQcmVz
ZW50YXRpb246OlRhYikKLSAgICAgICAgICAgIG9wdGlvbnMgfD0gQVBJOjpBdXRvbWF0aW9uU2Vz
c2lvbkJyb3dzaW5nQ29udGV4dE9wdGlvbnNQcmVmZXJOZXdUYWI7Ci0gICAgfQorICAgIGlmIChw
cmVzZW50YXRpb25IaW50ID09IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dz
aW5nQ29udGV4dFByZXNlbnRhdGlvbjo6VGFiKQorICAgICAgICBvcHRpb25zIHw9IEFQSTo6QXV0
b21hdGlvblNlc3Npb25Ccm93c2luZ0NvbnRleHRPcHRpb25zUHJlZmVyTmV3VGFiOwogCiAgICAg
bV9jbGllbnQtPnJlcXVlc3ROZXdQYWdlV2l0aE9wdGlvbnMoKnRoaXMsIHN0YXRpY19jYXN0PEFQ
STo6QXV0b21hdGlvblNlc3Npb25Ccm93c2luZ0NvbnRleHRPcHRpb25zPihvcHRpb25zKSwgW3By
b3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNr
KV0oV2ViUGFnZVByb3h5KiBwYWdlKSB7CiAgICAgICAgIGlmICghcGFnZSkKQEAgLTM1MiwyMyAr
MzQ5LDI1IEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OmNyZWF0ZUJyb3dzaW5nQ29udGV4
dChjb25zdCBTdHJpbmcqIG9wdGlvbmFsUHJlc2VudGF0CiAgICAgfSk7CiB9CiAKLXZvaWQgV2Vi
QXV0b21hdGlvblNlc3Npb246OmNsb3NlQnJvd3NpbmdDb250ZXh0KEluc3BlY3Rvcjo6RXJyb3JT
dHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGhhbmRsZSkKK0luc3BlY3Rvcjo6UHJv
dG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gV2ViQXV0b21hdGlvblNlc3Npb246OmNsb3NlQnJv
d3NpbmdDb250ZXh0KGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dz
aW5nQ29udGV4dEhhbmRsZSYgaGFuZGxlKQogewogICAgIFdlYlBhZ2VQcm94eSogcGFnZSA9IHdl
YlBhZ2VQcm94eUZvckhhbmRsZShoYW5kbGUpOwogICAgIGlmICghcGFnZSkKICAgICAgICAgU1lO
Q19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUihXaW5kb3dOb3RGb3VuZCk7CiAKICAgICBwYWdl
LT5jbG9zZVBhZ2UoKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgV2ViQXV0b21hdGlv
blNlc3Npb246OnN3aXRjaFRvQnJvd3NpbmdDb250ZXh0KGNvbnN0IFN0cmluZyYgYnJvd3NpbmdD
b250ZXh0SGFuZGxlLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsRnJhbWVIYW5kbGUsIFJlZjxTd2l0
Y2hUb0Jyb3dzaW5nQ29udGV4dENhbGxiYWNrPiYmIGNhbGxiYWNrKQordm9pZCBXZWJBdXRvbWF0
aW9uU2Vzc2lvbjo6c3dpdGNoVG9Ccm93c2luZ0NvbnRleHQoY29uc3QgSW5zcGVjdG9yOjpQcm90
b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJiBicm93c2luZ0NvbnRleHRI
YW5kbGUsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkZyYW1lSGFuZGxl
JiBmcmFtZUhhbmRsZSwgUmVmPFN3aXRjaFRvQnJvd3NpbmdDb250ZXh0Q2FsbGJhY2s+JiYgY2Fs
bGJhY2spCiB7CiAgICAgV2ViUGFnZVByb3h5KiBwYWdlID0gd2ViUGFnZVByb3h5Rm9ySGFuZGxl
KGJyb3dzaW5nQ29udGV4dEhhbmRsZSk7CiAgICAgaWYgKCFwYWdlKQogICAgICAgICBBU1lOQ19G
QUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUihXaW5kb3dOb3RGb3VuZCk7CiAKICAgICBib29sIGZy
YW1lTm90Rm91bmQgPSBmYWxzZTsKLSAgICBhdXRvIGZyYW1lSUQgPSB3ZWJGcmFtZUlERm9ySGFu
ZGxlKG9wdGlvbmFsRnJhbWVIYW5kbGUgPyAqb3B0aW9uYWxGcmFtZUhhbmRsZSA6IGVtcHR5U3Ry
aW5nKCksIGZyYW1lTm90Rm91bmQpOworICAgIGF1dG8gZnJhbWVJRCA9IHdlYkZyYW1lSURGb3JI
YW5kbGUoZnJhbWVIYW5kbGUsIGZyYW1lTm90Rm91bmQpOwogICAgIGlmIChmcmFtZU5vdEZvdW5k
KQogICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUihGcmFtZU5vdEZvdW5k
KTsKIApAQCAtMzgxLDI1ICszODAsMjUgQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6c3dp
dGNoVG9Ccm93c2luZ0NvbnRleHQoY29uc3QgU3RyaW5nJiBicm93c2luZ0NvbnRleHQKICAgICB9
KTsKIH0KIAotdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6c2V0V2luZG93RnJhbWVPZkJyb3dz
aW5nQ29udGV4dChjb25zdCBTdHJpbmcmIGhhbmRsZSwgY29uc3QgSlNPTjo6T2JqZWN0KiBvcHRp
b25hbE9yaWdpbk9iamVjdCwgY29uc3QgSlNPTjo6T2JqZWN0KiBvcHRpb25hbFNpemVPYmplY3Qs
IFJlZjxTZXRXaW5kb3dGcmFtZU9mQnJvd3NpbmdDb250ZXh0Q2FsbGJhY2s+JiYgY2FsbGJhY2sp
Cit2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpzZXRXaW5kb3dGcmFtZU9mQnJvd3NpbmdDb250
ZXh0KGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4
dEhhbmRsZSYgaGFuZGxlLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIG9yaWdpbiwgUmVmUHRyPEpT
T046Ok9iamVjdD4mJiBzaXplLCBSZWY8U2V0V2luZG93RnJhbWVPZkJyb3dzaW5nQ29udGV4dENh
bGxiYWNrPiYmIGNhbGxiYWNrKQogewotICAgIE9wdGlvbmFsPGZsb2F0PiB4OwotICAgIE9wdGlv
bmFsPGZsb2F0PiB5OwotICAgIGlmIChvcHRpb25hbE9yaWdpbk9iamVjdCkgewotICAgICAgICBp
ZiAoISh4ID0gb3B0aW9uYWxPcmlnaW5PYmplY3QtPmdldE51bWJlcjxmbG9hdD4oIngiX3MpKSkK
KyAgICBPcHRpb25hbDxkb3VibGU+IHg7CisgICAgT3B0aW9uYWw8ZG91YmxlPiB5OworICAgIGlm
IChvcmlnaW4pIHsKKyAgICAgICAgaWYgKCEoeCA9IG9yaWdpbi0+Z2V0RG91YmxlKCJ4Il9zKSkp
CiAgICAgICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlM
UyhNaXNzaW5nUGFyYW1ldGVyLCAiVGhlICd4JyBwYXJhbWV0ZXIgd2FzIG5vdCBmb3VuZCBvciBp
bnZhbGlkLiIpOwogCi0gICAgICAgIGlmICghKHkgPSBvcHRpb25hbE9yaWdpbk9iamVjdC0+Z2V0
TnVtYmVyPGZsb2F0PigieSJfcykpKQorICAgICAgICBpZiAoISh5ID0gb3JpZ2luLT5nZXREb3Vi
bGUoInkiX3MpKSkKICAgICAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9S
X0FORF9ERVRBSUxTKE1pc3NpbmdQYXJhbWV0ZXIsICJUaGUgJ3knIHBhcmFtZXRlciB3YXMgbm90
IGZvdW5kIG9yIGludmFsaWQuIik7CiAgICAgfQogCi0gICAgT3B0aW9uYWw8ZmxvYXQ+IHdpZHRo
OwotICAgIE9wdGlvbmFsPGZsb2F0PiBoZWlnaHQ7Ci0gICAgaWYgKG9wdGlvbmFsU2l6ZU9iamVj
dCkgewotICAgICAgICBpZiAoISh3aWR0aCA9IG9wdGlvbmFsU2l6ZU9iamVjdC0+Z2V0TnVtYmVy
PGZsb2F0Pigid2lkdGgiX3MpKSkKKyAgICBPcHRpb25hbDxkb3VibGU+IHdpZHRoOworICAgIE9w
dGlvbmFsPGRvdWJsZT4gaGVpZ2h0OworICAgIGlmIChzaXplKSB7CisgICAgICAgIGlmICghKHdp
ZHRoID0gc2l6ZS0+Z2V0RG91YmxlKCJ3aWR0aCJfcykpKQogICAgICAgICAgICAgQVNZTkNfRkFJ
TF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoTWlzc2luZ1BhcmFtZXRlciwgIlRo
ZSAnd2lkdGgnIHBhcmFtZXRlciB3YXMgbm90IGZvdW5kIG9yIGludmFsaWQuIik7CiAKLSAgICAg
ICAgaWYgKCEoaGVpZ2h0ID0gb3B0aW9uYWxTaXplT2JqZWN0LT5nZXROdW1iZXI8ZmxvYXQ+KCJo
ZWlnaHQiX3MpKSkKKyAgICAgICAgaWYgKCEoaGVpZ2h0ID0gc2l6ZS0+Z2V0RG91YmxlKCJoZWln
aHQiX3MpKSkKICAgICAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FO
RF9ERVRBSUxTKE1pc3NpbmdQYXJhbWV0ZXIsICJUaGUgJ2hlaWdodCcgcGFyYW1ldGVyIHdhcyBu
b3QgZm91bmQgb3IgaW52YWxpZC4iKTsKIAogICAgICAgICBpZiAod2lkdGgudmFsdWUoKSA8IDAp
CkBAIC00MjgsMjYgKzQyNywxOCBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpzZXRXaW5k
b3dGcmFtZU9mQnJvd3NpbmdDb250ZXh0KGNvbnN0IFN0cmluZyYgaGFuZGxlLAogICAgIH0pOwog
fQogCi1zdGF0aWMgT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6UGFn
ZUxvYWRTdHJhdGVneT4gcGFnZUxvYWRTdHJhdGVneUZyb21TdHJpbmdQYXJhbWV0ZXIoY29uc3Qg
U3RyaW5nKiBvcHRpb25hbFBhZ2VMb2FkU3RyYXRlZ3lTdHJpbmcpCitzdGF0aWMgSW5zcGVjdG9y
OjpQcm90b2NvbDo6QXV0b21hdGlvbjo6UGFnZUxvYWRTdHJhdGVneSBwYWdlTG9hZFN0cmF0ZWd5
RnJvbVBhcmFtZXRlcihPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpQ
YWdlTG9hZFN0cmF0ZWd5PiYmIG9wdGlvbmFsUGFnZUxvYWRTdHJhdGVneSkKIHsKLSAgICBpZiAo
IW9wdGlvbmFsUGFnZUxvYWRTdHJhdGVneVN0cmluZykKLSAgICAgICAgcmV0dXJuIGRlZmF1bHRQ
YWdlTG9hZFN0cmF0ZWd5OwotCi0gICAgYXV0byBwYXJzZWRQYWdlTG9hZFN0cmF0ZWd5ID0gSW5z
cGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbkhlbHBlcnM6OnBhcnNlRW51bVZhbHVlRnJvbVN0
cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpQYWdlTG9hZFN0cmF0ZWd5Pigq
b3B0aW9uYWxQYWdlTG9hZFN0cmF0ZWd5U3RyaW5nKTsKLSAgICBpZiAoIXBhcnNlZFBhZ2VMb2Fk
U3RyYXRlZ3kpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgcmV0dXJuIHBhcnNl
ZFBhZ2VMb2FkU3RyYXRlZ3k7CisgICAgcmV0dXJuIG9wdGlvbmFsUGFnZUxvYWRTdHJhdGVneS52
YWx1ZU9yKGRlZmF1bHRQYWdlTG9hZFN0cmF0ZWd5KTsKIH0KIAotdm9pZCBXZWJBdXRvbWF0aW9u
U2Vzc2lvbjo6d2FpdEZvck5hdmlnYXRpb25Ub0NvbXBsZXRlKGNvbnN0IFN0cmluZyYgYnJvd3Np
bmdDb250ZXh0SGFuZGxlLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsRnJhbWVIYW5kbGUsIGNvbnN0
IFN0cmluZyogb3B0aW9uYWxQYWdlTG9hZFN0cmF0ZWd5U3RyaW5nLCBjb25zdCBkb3VibGUqIG9w
dGlvbmFsUGFnZUxvYWRUaW1lb3V0LCBSZWY8V2FpdEZvck5hdmlnYXRpb25Ub0NvbXBsZXRlQ2Fs
bGJhY2s+JiYgY2FsbGJhY2spCit2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjp3YWl0Rm9yTmF2
aWdhdGlvblRvQ29tcGxldGUoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6
QnJvd3NpbmdDb250ZXh0SGFuZGxlJiBicm93c2luZ0NvbnRleHRIYW5kbGUsIGNvbnN0IEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkZyYW1lSGFuZGxlJiBvcHRpb25hbEZyYW1lSGFu
ZGxlLCBPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpQYWdlTG9hZFN0
cmF0ZWd5PiYmIG9wdGlvbmFsUGFnZUxvYWRTdHJhdGVneSwgT3B0aW9uYWw8ZG91YmxlPiYmIG9w
dGlvbmFsUGFnZUxvYWRUaW1lb3V0LCBSZWY8V2FpdEZvck5hdmlnYXRpb25Ub0NvbXBsZXRlQ2Fs
bGJhY2s+JiYgY2FsbGJhY2spCiB7CiAgICAgV2ViUGFnZVByb3h5KiBwYWdlID0gd2ViUGFnZVBy
b3h5Rm9ySGFuZGxlKGJyb3dzaW5nQ29udGV4dEhhbmRsZSk7CiAgICAgaWYgKCFwYWdlKQogICAg
ICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUihXaW5kb3dOb3RGb3VuZCk7CiAK
LSAgICBhdXRvIHBhZ2VMb2FkU3RyYXRlZ3kgPSBwYWdlTG9hZFN0cmF0ZWd5RnJvbVN0cmluZ1Bh
cmFtZXRlcihvcHRpb25hbFBhZ2VMb2FkU3RyYXRlZ3lTdHJpbmcpOwotICAgIGlmICghcGFnZUxv
YWRTdHJhdGVneSkKLSAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5E
X0RFVEFJTFMoSW52YWxpZFBhcmFtZXRlciwgIlRoZSBwYXJhbWV0ZXIgJ3BhZ2VMb2FkU3RyYXRl
Z3knIGlzIGludmFsaWQuIik7CisgICAgYXV0byBwYWdlTG9hZFN0cmF0ZWd5ID0gcGFnZUxvYWRT
dHJhdGVneUZyb21QYXJhbWV0ZXIoV1RGTW92ZShvcHRpb25hbFBhZ2VMb2FkU3RyYXRlZ3kpKTsK
ICAgICBhdXRvIHBhZ2VMb2FkVGltZW91dCA9IG9wdGlvbmFsUGFnZUxvYWRUaW1lb3V0ID8gU2Vj
b25kczo6ZnJvbU1pbGxpc2Vjb25kcygqb3B0aW9uYWxQYWdlTG9hZFRpbWVvdXQpIDogZGVmYXVs
dFBhZ2VMb2FkVGltZW91dDsKIAogICAgIC8vIElmIHBhZ2UgaXMgbG9hZGluZyBhbmQgdGhlcmUn
cyBhbiBhY3RpdmUgSmF2YVNjcmlwdCBkaWFsb2cgaXMgcHJvYmFibHkgYmVjYXVzZSB0aGUKQEAg
LTQ1NSwyMiArNDQ2LDIyIEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OndhaXRGb3JOYXZp
Z2F0aW9uVG9Db21wbGV0ZShjb25zdCBTdHJpbmcmIGJyb3dzaW5nQ29uCiAgICAgLy8gbG9hZCB3
aWxsIG5vdCBmaW5pc2ggdW50aWwgdGhlIGRpYWxvZyBpcyBkaXNtaXNzZWQuIEluc3RlYWQgb2Yg
d2FpdGluZyBmb3IgdGhlIHRpbWVvdXQsCiAgICAgLy8gd2UgcmV0dXJuIHdpdGhvdXQgd2FpdGlu
ZyBzaW5jZSB3ZSBrbm93IGl0IHdpbGwgdGltZW91dCBmb3Igc3VyZS4gV2Ugd2FudCB0byBjaGVj
awogICAgIC8vIGFyZ3VtZW50cyBmaXJzdCwgdGhvdWdoLgotICAgIGJvb2wgc2hvdWxkVGltZW91
dER1ZVRvVW5leHBlY3RlZEFsZXJ0ID0gcGFnZUxvYWRTdHJhdGVneS52YWx1ZSgpID09IEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OlBhZ2VMb2FkU3RyYXRlZ3k6Ok5vcm1hbAorICAg
IGJvb2wgc2hvdWxkVGltZW91dER1ZVRvVW5leHBlY3RlZEFsZXJ0ID0gcGFnZUxvYWRTdHJhdGVn
eSA9PSBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpQYWdlTG9hZFN0cmF0ZWd5OjpO
b3JtYWwKICAgICAgICAgJiYgcGFnZS0+cGFnZUxvYWRTdGF0ZSgpLmlzTG9hZGluZygpICYmIG1f
Y2xpZW50LT5pc1Nob3dpbmdKYXZhU2NyaXB0RGlhbG9nT25QYWdlKCp0aGlzLCAqcGFnZSk7CiAK
LSAgICBpZiAob3B0aW9uYWxGcmFtZUhhbmRsZSAmJiAhb3B0aW9uYWxGcmFtZUhhbmRsZS0+aXNF
bXB0eSgpKSB7CisgICAgaWYgKCFvcHRpb25hbEZyYW1lSGFuZGxlLmlzRW1wdHkoKSkgewogICAg
ICAgICBib29sIGZyYW1lTm90Rm91bmQgPSBmYWxzZTsKLSAgICAgICAgYXV0byBmcmFtZUlEID0g
d2ViRnJhbWVJREZvckhhbmRsZSgqb3B0aW9uYWxGcmFtZUhhbmRsZSwgZnJhbWVOb3RGb3VuZCk7
CisgICAgICAgIGF1dG8gZnJhbWVJRCA9IHdlYkZyYW1lSURGb3JIYW5kbGUob3B0aW9uYWxGcmFt
ZUhhbmRsZSwgZnJhbWVOb3RGb3VuZCk7CiAgICAgICAgIGlmIChmcmFtZU5vdEZvdW5kKQogICAg
ICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1IoRnJhbWVOb3RGb3VuZCk7
CiAgICAgICAgIFdlYkZyYW1lUHJveHkqIGZyYW1lID0gcGFnZS0+cHJvY2VzcygpLndlYkZyYW1l
KGZyYW1lSUQudmFsdWUoKSk7CiAgICAgICAgIGlmICghZnJhbWUpCiAgICAgICAgICAgICBBU1lO
Q19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUihGcmFtZU5vdEZvdW5kKTsKICAgICAgICAgaWYg
KCFzaG91bGRUaW1lb3V0RHVlVG9VbmV4cGVjdGVkQWxlcnQpCi0gICAgICAgICAgICB3YWl0Rm9y
TmF2aWdhdGlvblRvQ29tcGxldGVPbkZyYW1lKCpmcmFtZSwgcGFnZUxvYWRTdHJhdGVneS52YWx1
ZSgpLCBwYWdlTG9hZFRpbWVvdXQsIFdURk1vdmUoY2FsbGJhY2spKTsKKyAgICAgICAgICAgIHdh
aXRGb3JOYXZpZ2F0aW9uVG9Db21wbGV0ZU9uRnJhbWUoKmZyYW1lLCBwYWdlTG9hZFN0cmF0ZWd5
LCBwYWdlTG9hZFRpbWVvdXQsIFdURk1vdmUoY2FsbGJhY2spKTsKICAgICB9IGVsc2UgewogICAg
ICAgICBpZiAoIXNob3VsZFRpbWVvdXREdWVUb1VuZXhwZWN0ZWRBbGVydCkKLSAgICAgICAgICAg
IHdhaXRGb3JOYXZpZ2F0aW9uVG9Db21wbGV0ZU9uUGFnZSgqcGFnZSwgcGFnZUxvYWRTdHJhdGVn
eS52YWx1ZSgpLCBwYWdlTG9hZFRpbWVvdXQsIFdURk1vdmUoY2FsbGJhY2spKTsKKyAgICAgICAg
ICAgIHdhaXRGb3JOYXZpZ2F0aW9uVG9Db21wbGV0ZU9uUGFnZSgqcGFnZSwgcGFnZUxvYWRTdHJh
dGVneSwgcGFnZUxvYWRUaW1lb3V0LCBXVEZNb3ZlKGNhbGxiYWNrKSk7CiAgICAgfQogCiAgICAg
aWYgKHNob3VsZFRpbWVvdXREdWVUb1VuZXhwZWN0ZWRBbGVydCkgewpAQCAtNTI3LDcgKzUxOCw3
IEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OndhaXRGb3JOYXZpZ2F0aW9uVG9Db21wbGV0
ZU9uRnJhbWUoV2ViRnJhbWVQcm94eSYgZnJhCiAKIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246
OnJlc3BvbmRUb1BlbmRpbmdQYWdlTmF2aWdhdGlvbkNhbGxiYWNrc1dpdGhUaW1lb3V0KEhhc2hN
YXA8V2ViUGFnZVByb3h5SWRlbnRpZmllciwgUmVmUHRyPEluc3BlY3Rvcjo6QmFja2VuZERpc3Bh
dGNoZXI6OkNhbGxiYWNrQmFzZT4+JiBtYXApCiB7Ci0gICAgSW5zcGVjdG9yOjpFcnJvclN0cmlu
ZyB0aW1lb3V0RXJyb3IgPSBTVFJJTkdfRk9SX1BSRURFRklORURfRVJST1JfTkFNRShUaW1lb3V0
KTsKKyAgICBhdXRvIHRpbWVvdXRFcnJvciA9IFNUUklOR19GT1JfUFJFREVGSU5FRF9FUlJPUl9O
QU1FKFRpbWVvdXQpOwogICAgIGZvciAoYXV0byBpZCA6IGNvcHlUb1ZlY3RvcihtYXAua2V5cygp
KSkgewogICAgICAgICBhdXRvIHBhZ2UgPSBXZWJQcm9jZXNzUHJveHk6OndlYlBhZ2UoaWQpOwog
ICAgICAgICBhdXRvIGNhbGxiYWNrID0gbWFwLnRha2UoaWQpOwpAQCAtNTQ5LDcgKzU0MCw3IEBA
IHN0YXRpYyBXZWJQYWdlUHJveHkqIGZpbmRQYWdlRm9yRnJhbWVJRChjb25zdCBXZWJQcm9jZXNz
UG9vbCYgcHJvY2Vzc1Bvb2wsIEZyYW1lCiAKIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OnJl
c3BvbmRUb1BlbmRpbmdGcmFtZU5hdmlnYXRpb25DYWxsYmFja3NXaXRoVGltZW91dChIYXNoTWFw
PEZyYW1lSWRlbnRpZmllciwgUmVmUHRyPEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXI6OkNh
bGxiYWNrQmFzZT4+JiBtYXApCiB7Ci0gICAgSW5zcGVjdG9yOjpFcnJvclN0cmluZyB0aW1lb3V0
RXJyb3IgPSBTVFJJTkdfRk9SX1BSRURFRklORURfRVJST1JfTkFNRShUaW1lb3V0KTsKKyAgICBh
dXRvIHRpbWVvdXRFcnJvciA9IFNUUklOR19GT1JfUFJFREVGSU5FRF9FUlJPUl9OQU1FKFRpbWVv
dXQpOwogICAgIGZvciAoYXV0byBpZCA6IGNvcHlUb1ZlY3RvcihtYXAua2V5cygpKSkgewogICAg
ICAgICBhdXRvKiBwYWdlID0gZmluZFBhZ2VGb3JGcmFtZUlEKCptX3Byb2Nlc3NQb29sLCBpZCk7
CiAgICAgICAgIGF1dG8gY2FsbGJhY2sgPSBtYXAudGFrZShpZCk7CkBAIC01NjgsNyArNTU5LDcg
QEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6bG9hZFRpbWVyRmlyZWQoKQogICAgIHJlc3Bv
bmRUb1BlbmRpbmdQYWdlTmF2aWdhdGlvbkNhbGxiYWNrc1dpdGhUaW1lb3V0KG1fcGVuZGluZ0Vh
Z2VyTmF2aWdhdGlvbkluQnJvd3NpbmdDb250ZXh0Q2FsbGJhY2tzUGVyUGFnZSk7CiB9CiAKLXZv
aWQgV2ViQXV0b21hdGlvblNlc3Npb246Om1heGltaXplV2luZG93T2ZCcm93c2luZ0NvbnRleHQo
Y29uc3QgU3RyaW5nJiBicm93c2luZ0NvbnRleHRIYW5kbGUsIFJlZjxNYXhpbWl6ZVdpbmRvd09m
QnJvd3NpbmdDb250ZXh0Q2FsbGJhY2s+JiYgY2FsbGJhY2spCit2b2lkIFdlYkF1dG9tYXRpb25T
ZXNzaW9uOjptYXhpbWl6ZVdpbmRvd09mQnJvd3NpbmdDb250ZXh0KGNvbnN0IEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYgYnJvd3NpbmdDb250
ZXh0SGFuZGxlLCBSZWY8TWF4aW1pemVXaW5kb3dPZkJyb3dzaW5nQ29udGV4dENhbGxiYWNrPiYm
IGNhbGxiYWNrKQogewogICAgIGF1dG8qIHBhZ2UgPSB3ZWJQYWdlUHJveHlGb3JIYW5kbGUoYnJv
d3NpbmdDb250ZXh0SGFuZGxlKTsKICAgICBpZiAoIXBhZ2UpCkBAIC01ODQsNyArNTc1LDcgQEAg
dm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6bWF4aW1pemVXaW5kb3dPZkJyb3dzaW5nQ29udGV4
dChjb25zdCBTdHJpbmcmIGJyb3dzaW4KICAgICB9KTsKIH0KIAotdm9pZCBXZWJBdXRvbWF0aW9u
U2Vzc2lvbjo6aGlkZVdpbmRvd09mQnJvd3NpbmdDb250ZXh0KGNvbnN0IFN0cmluZyYgYnJvd3Np
bmdDb250ZXh0SGFuZGxlLCBSZWY8SGlkZVdpbmRvd09mQnJvd3NpbmdDb250ZXh0Q2FsbGJhY2s+
JiYgY2FsbGJhY2spCit2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpoaWRlV2luZG93T2ZCcm93
c2luZ0NvbnRleHQoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3Np
bmdDb250ZXh0SGFuZGxlJiBicm93c2luZ0NvbnRleHRIYW5kbGUsIFJlZjxIaWRlV2luZG93T2ZC
cm93c2luZ0NvbnRleHRDYWxsYmFjaz4mJiBjYWxsYmFjaykKIHsKICAgICBXZWJQYWdlUHJveHkq
IHBhZ2UgPSB3ZWJQYWdlUHJveHlGb3JIYW5kbGUoYnJvd3NpbmdDb250ZXh0SGFuZGxlKTsKICAg
ICBpZiAoIXBhZ2UpCkBAIC02OTMsNjQgKzY4NCw1NiBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNz
aW9uOjpkaWRFeGl0RnVsbFNjcmVlbkZvclBhZ2UoY29uc3QgV2ViUGFnZVByb3h5JikKICAgICAg
ICAgbV93aW5kb3dTdGF0ZVRyYW5zaXRpb25DYWxsYmFjayhXaW5kb3dUcmFuc2l0aW9uZWRUb1N0
YXRlOjpVbmZ1bGxzY3JlZW4pOwogfQogCi12b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpuYXZp
Z2F0ZUJyb3dzaW5nQ29udGV4dChjb25zdCBTdHJpbmcmIGhhbmRsZSwgY29uc3QgU3RyaW5nJiB1
cmwsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxQYWdlTG9hZFN0cmF0ZWd5U3RyaW5nLCBjb25zdCBk
b3VibGUqIG9wdGlvbmFsUGFnZUxvYWRUaW1lb3V0LCBSZWY8TmF2aWdhdGVCcm93c2luZ0NvbnRl
eHRDYWxsYmFjaz4mJiBjYWxsYmFjaykKK3ZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246Om5hdmln
YXRlQnJvd3NpbmdDb250ZXh0KGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246
OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYgaGFuZGxlLCBjb25zdCBTdHJpbmcmIHVybCwgT3B0aW9u
YWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6UGFnZUxvYWRTdHJhdGVneT4mJiBv
cHRpb25hbFBhZ2VMb2FkU3RyYXRlZ3ksIE9wdGlvbmFsPGRvdWJsZT4mJiBvcHRpb25hbFBhZ2VM
b2FkVGltZW91dCwgUmVmPE5hdmlnYXRlQnJvd3NpbmdDb250ZXh0Q2FsbGJhY2s+JiYgY2FsbGJh
Y2spCiB7CiAgICAgV2ViUGFnZVByb3h5KiBwYWdlID0gd2ViUGFnZVByb3h5Rm9ySGFuZGxlKGhh
bmRsZSk7CiAgICAgaWYgKCFwYWdlKQogICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5F
RF9FUlJPUihXaW5kb3dOb3RGb3VuZCk7CiAKLSAgICBhdXRvIHBhZ2VMb2FkU3RyYXRlZ3kgPSBw
YWdlTG9hZFN0cmF0ZWd5RnJvbVN0cmluZ1BhcmFtZXRlcihvcHRpb25hbFBhZ2VMb2FkU3RyYXRl
Z3lTdHJpbmcpOwotICAgIGlmICghcGFnZUxvYWRTdHJhdGVneSkKLSAgICAgICAgQVNZTkNfRkFJ
TF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoSW52YWxpZFBhcmFtZXRlciwgIlRo
ZSBwYXJhbWV0ZXIgJ3BhZ2VMb2FkU3RyYXRlZ3knIGlzIGludmFsaWQuIik7CisgICAgYXV0byBw
YWdlTG9hZFN0cmF0ZWd5ID0gcGFnZUxvYWRTdHJhdGVneUZyb21QYXJhbWV0ZXIoV1RGTW92ZShv
cHRpb25hbFBhZ2VMb2FkU3RyYXRlZ3kpKTsKICAgICBhdXRvIHBhZ2VMb2FkVGltZW91dCA9IG9w
dGlvbmFsUGFnZUxvYWRUaW1lb3V0ID8gU2Vjb25kczo6ZnJvbU1pbGxpc2Vjb25kcygqb3B0aW9u
YWxQYWdlTG9hZFRpbWVvdXQpIDogZGVmYXVsdFBhZ2VMb2FkVGltZW91dDsKIAogICAgIHBhZ2Ut
PmxvYWRSZXF1ZXN0KFVSTChVUkwoKSwgdXJsKSk7Ci0gICAgd2FpdEZvck5hdmlnYXRpb25Ub0Nv
bXBsZXRlT25QYWdlKCpwYWdlLCBwYWdlTG9hZFN0cmF0ZWd5LnZhbHVlKCksIHBhZ2VMb2FkVGlt
ZW91dCwgV1RGTW92ZShjYWxsYmFjaykpOworICAgIHdhaXRGb3JOYXZpZ2F0aW9uVG9Db21wbGV0
ZU9uUGFnZSgqcGFnZSwgcGFnZUxvYWRTdHJhdGVneSwgcGFnZUxvYWRUaW1lb3V0LCBXVEZNb3Zl
KGNhbGxiYWNrKSk7CiB9CiAKLXZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OmdvQmFja0luQnJv
d3NpbmdDb250ZXh0KGNvbnN0IFN0cmluZyYgaGFuZGxlLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFs
UGFnZUxvYWRTdHJhdGVneVN0cmluZywgY29uc3QgZG91YmxlKiBvcHRpb25hbFBhZ2VMb2FkVGlt
ZW91dCwgUmVmPEdvQmFja0luQnJvd3NpbmdDb250ZXh0Q2FsbGJhY2s+JiYgY2FsbGJhY2spCit2
b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpnb0JhY2tJbkJyb3dzaW5nQ29udGV4dChjb25zdCBJ
bnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRIYW5kbGUmIGhh
bmRsZSwgT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6UGFnZUxvYWRT
dHJhdGVneT4mJiBvcHRpb25hbFBhZ2VMb2FkU3RyYXRlZ3ksIE9wdGlvbmFsPGRvdWJsZT4mJiBv
cHRpb25hbFBhZ2VMb2FkVGltZW91dCwgUmVmPEdvQmFja0luQnJvd3NpbmdDb250ZXh0Q2FsbGJh
Y2s+JiYgY2FsbGJhY2spCiB7CiAgICAgV2ViUGFnZVByb3h5KiBwYWdlID0gd2ViUGFnZVByb3h5
Rm9ySGFuZGxlKGhhbmRsZSk7CiAgICAgaWYgKCFwYWdlKQogICAgICAgICBBU1lOQ19GQUlMX1dJ
VEhfUFJFREVGSU5FRF9FUlJPUihXaW5kb3dOb3RGb3VuZCk7CiAKLSAgICBhdXRvIHBhZ2VMb2Fk
U3RyYXRlZ3kgPSBwYWdlTG9hZFN0cmF0ZWd5RnJvbVN0cmluZ1BhcmFtZXRlcihvcHRpb25hbFBh
Z2VMb2FkU3RyYXRlZ3lTdHJpbmcpOwotICAgIGlmICghcGFnZUxvYWRTdHJhdGVneSkKLSAgICAg
ICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoSW52YWxpZFBh
cmFtZXRlciwgIlRoZSBwYXJhbWV0ZXIgJ3BhZ2VMb2FkU3RyYXRlZ3knIGlzIGludmFsaWQuIik7
CisgICAgYXV0byBwYWdlTG9hZFN0cmF0ZWd5ID0gcGFnZUxvYWRTdHJhdGVneUZyb21QYXJhbWV0
ZXIoV1RGTW92ZShvcHRpb25hbFBhZ2VMb2FkU3RyYXRlZ3kpKTsKICAgICBhdXRvIHBhZ2VMb2Fk
VGltZW91dCA9IG9wdGlvbmFsUGFnZUxvYWRUaW1lb3V0ID8gU2Vjb25kczo6ZnJvbU1pbGxpc2Vj
b25kcygqb3B0aW9uYWxQYWdlTG9hZFRpbWVvdXQpIDogZGVmYXVsdFBhZ2VMb2FkVGltZW91dDsK
IAogICAgIHBhZ2UtPmdvQmFjaygpOwotICAgIHdhaXRGb3JOYXZpZ2F0aW9uVG9Db21wbGV0ZU9u
UGFnZSgqcGFnZSwgcGFnZUxvYWRTdHJhdGVneS52YWx1ZSgpLCBwYWdlTG9hZFRpbWVvdXQsIFdU
Rk1vdmUoY2FsbGJhY2spKTsKKyAgICB3YWl0Rm9yTmF2aWdhdGlvblRvQ29tcGxldGVPblBhZ2Uo
KnBhZ2UsIHBhZ2VMb2FkU3RyYXRlZ3ksIHBhZ2VMb2FkVGltZW91dCwgV1RGTW92ZShjYWxsYmFj
aykpOwogfQogCi12b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpnb0ZvcndhcmRJbkJyb3dzaW5n
Q29udGV4dChjb25zdCBTdHJpbmcmIGhhbmRsZSwgY29uc3QgU3RyaW5nKiBvcHRpb25hbFBhZ2VM
b2FkU3RyYXRlZ3lTdHJpbmcsIGNvbnN0IGRvdWJsZSogb3B0aW9uYWxQYWdlTG9hZFRpbWVvdXQs
IFJlZjxHb0ZvcndhcmRJbkJyb3dzaW5nQ29udGV4dENhbGxiYWNrPiYmIGNhbGxiYWNrKQordm9p
ZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6Z29Gb3J3YXJkSW5Ccm93c2luZ0NvbnRleHQoY29uc3Qg
SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJiBo
YW5kbGUsIE9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OlBhZ2VMb2Fk
U3RyYXRlZ3k+JiYgb3B0aW9uYWxQYWdlTG9hZFN0cmF0ZWd5LCBPcHRpb25hbDxkb3VibGU+JiYg
b3B0aW9uYWxQYWdlTG9hZFRpbWVvdXQsIFJlZjxHb0ZvcndhcmRJbkJyb3dzaW5nQ29udGV4dENh
bGxiYWNrPiYmIGNhbGxiYWNrKQogewogICAgIFdlYlBhZ2VQcm94eSogcGFnZSA9IHdlYlBhZ2VQ
cm94eUZvckhhbmRsZShoYW5kbGUpOwogICAgIGlmICghcGFnZSkKICAgICAgICAgQVNZTkNfRkFJ
TF9XSVRIX1BSRURFRklORURfRVJST1IoV2luZG93Tm90Rm91bmQpOwogCi0gICAgYXV0byBwYWdl
TG9hZFN0cmF0ZWd5ID0gcGFnZUxvYWRTdHJhdGVneUZyb21TdHJpbmdQYXJhbWV0ZXIob3B0aW9u
YWxQYWdlTG9hZFN0cmF0ZWd5U3RyaW5nKTsKLSAgICBpZiAoIXBhZ2VMb2FkU3RyYXRlZ3kpCi0g
ICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxTKEludmFs
aWRQYXJhbWV0ZXIsICJUaGUgcGFyYW1ldGVyICdwYWdlTG9hZFN0cmF0ZWd5JyBpcyBpbnZhbGlk
LiIpOworICAgIGF1dG8gcGFnZUxvYWRTdHJhdGVneSA9IHBhZ2VMb2FkU3RyYXRlZ3lGcm9tUGFy
YW1ldGVyKFdURk1vdmUob3B0aW9uYWxQYWdlTG9hZFN0cmF0ZWd5KSk7CiAgICAgYXV0byBwYWdl
TG9hZFRpbWVvdXQgPSBvcHRpb25hbFBhZ2VMb2FkVGltZW91dCA/IFNlY29uZHM6OmZyb21NaWxs
aXNlY29uZHMoKm9wdGlvbmFsUGFnZUxvYWRUaW1lb3V0KSA6IGRlZmF1bHRQYWdlTG9hZFRpbWVv
dXQ7CiAKICAgICBwYWdlLT5nb0ZvcndhcmQoKTsKLSAgICB3YWl0Rm9yTmF2aWdhdGlvblRvQ29t
cGxldGVPblBhZ2UoKnBhZ2UsIHBhZ2VMb2FkU3RyYXRlZ3kudmFsdWUoKSwgcGFnZUxvYWRUaW1l
b3V0LCBXVEZNb3ZlKGNhbGxiYWNrKSk7CisgICAgd2FpdEZvck5hdmlnYXRpb25Ub0NvbXBsZXRl
T25QYWdlKCpwYWdlLCBwYWdlTG9hZFN0cmF0ZWd5LCBwYWdlTG9hZFRpbWVvdXQsIFdURk1vdmUo
Y2FsbGJhY2spKTsKIH0KIAotdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6cmVsb2FkQnJvd3Np
bmdDb250ZXh0KGNvbnN0IFN0cmluZyYgaGFuZGxlLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsUGFn
ZUxvYWRTdHJhdGVneVN0cmluZywgY29uc3QgZG91YmxlKiBvcHRpb25hbFBhZ2VMb2FkVGltZW91
dCwgUmVmPFJlbG9hZEJyb3dzaW5nQ29udGV4dENhbGxiYWNrPiYmIGNhbGxiYWNrKQordm9pZCBX
ZWJBdXRvbWF0aW9uU2Vzc2lvbjo6cmVsb2FkQnJvd3NpbmdDb250ZXh0KGNvbnN0IEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYgaGFuZGxlLCBP
cHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpQYWdlTG9hZFN0cmF0ZWd5
PiYmIG9wdGlvbmFsUGFnZUxvYWRTdHJhdGVneSwgT3B0aW9uYWw8ZG91YmxlPiYmIG9wdGlvbmFs
UGFnZUxvYWRUaW1lb3V0LCBSZWY8UmVsb2FkQnJvd3NpbmdDb250ZXh0Q2FsbGJhY2s+JiYgY2Fs
bGJhY2spCiB7CiAgICAgV2ViUGFnZVByb3h5KiBwYWdlID0gd2ViUGFnZVByb3h5Rm9ySGFuZGxl
KGhhbmRsZSk7CiAgICAgaWYgKCFwYWdlKQogICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVG
SU5FRF9FUlJPUihXaW5kb3dOb3RGb3VuZCk7CiAKLSAgICBhdXRvIHBhZ2VMb2FkU3RyYXRlZ3kg
PSBwYWdlTG9hZFN0cmF0ZWd5RnJvbVN0cmluZ1BhcmFtZXRlcihvcHRpb25hbFBhZ2VMb2FkU3Ry
YXRlZ3lTdHJpbmcpOwotICAgIGlmICghcGFnZUxvYWRTdHJhdGVneSkKLSAgICAgICAgQVNZTkNf
RkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoSW52YWxpZFBhcmFtZXRlciwg
IlRoZSBwYXJhbWV0ZXIgJ3BhZ2VMb2FkU3RyYXRlZ3knIGlzIGludmFsaWQuIik7CisgICAgYXV0
byBwYWdlTG9hZFN0cmF0ZWd5ID0gcGFnZUxvYWRTdHJhdGVneUZyb21QYXJhbWV0ZXIoV1RGTW92
ZShvcHRpb25hbFBhZ2VMb2FkU3RyYXRlZ3kpKTsKICAgICBhdXRvIHBhZ2VMb2FkVGltZW91dCA9
IG9wdGlvbmFsUGFnZUxvYWRUaW1lb3V0ID8gU2Vjb25kczo6ZnJvbU1pbGxpc2Vjb25kcygqb3B0
aW9uYWxQYWdlTG9hZFRpbWVvdXQpIDogZGVmYXVsdFBhZ2VMb2FkVGltZW91dDsKIAogICAgIHBh
Z2UtPnJlbG9hZCh7IH0pOwotICAgIHdhaXRGb3JOYXZpZ2F0aW9uVG9Db21wbGV0ZU9uUGFnZSgq
cGFnZSwgcGFnZUxvYWRTdHJhdGVneS52YWx1ZSgpLCBwYWdlTG9hZFRpbWVvdXQsIFdURk1vdmUo
Y2FsbGJhY2spKTsKKyAgICB3YWl0Rm9yTmF2aWdhdGlvblRvQ29tcGxldGVPblBhZ2UoKnBhZ2Us
IHBhZ2VMb2FkU3RyYXRlZ3ksIHBhZ2VMb2FkVGltZW91dCwgV1RGTW92ZShjYWxsYmFjaykpOwog
fQogCiB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpuYXZpZ2F0aW9uT2NjdXJyZWRGb3JGcmFt
ZShjb25zdCBXZWJGcmFtZVByb3h5JiBmcmFtZSkKQEAgLTkyMiwzNSArOTA1LDI3IEBAIHZvaWQg
V2ViQXV0b21hdGlvblNlc3Npb246OmhhbmRsZVJ1bk9wZW5QYW5lbChjb25zdCBXZWJQYWdlUHJv
eHkmIHBhZ2UsIGNvbnN0IFdlCiAgICAgbV9kb21haW5Ob3RpZmllci0+ZmlsZUNob29zZXJEaXNt
aXNzZWQoYnJvd3NpbmdDb250ZXh0SGFuZGxlLCBmYWxzZSk7CiB9CiAKLXZvaWQgV2ViQXV0b21h
dGlvblNlc3Npb246OmV2YWx1YXRlSmF2YVNjcmlwdEZ1bmN0aW9uKGNvbnN0IFN0cmluZyYgYnJv
d3NpbmdDb250ZXh0SGFuZGxlLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsRnJhbWVIYW5kbGUsIGNv
bnN0IFN0cmluZyYgZnVuY3Rpb24sIGNvbnN0IEpTT046OkFycmF5JiBhcmd1bWVudHMsIGNvbnN0
IGJvb2wqIG9wdGlvbmFsRXhwZWN0c0ltcGxpY2l0Q2FsbGJhY2tBcmd1bWVudCwgY29uc3QgZG91
YmxlKiBvcHRpb25hbENhbGxiYWNrVGltZW91dCwgUmVmPEV2YWx1YXRlSmF2YVNjcmlwdEZ1bmN0
aW9uQ2FsbGJhY2s+JiYgY2FsbGJhY2spCit2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpldmFs
dWF0ZUphdmFTY3JpcHRGdW5jdGlvbihjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0
aW9uOjpCcm93c2luZ0NvbnRleHRIYW5kbGUmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSwgY29uc3Qg
SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6RnJhbWVIYW5kbGUmIGZyYW1lSGFuZGxl
LCBjb25zdCBTdHJpbmcmIGZ1bmN0aW9uLCBSZWY8SlNPTjo6QXJyYXk+JiYgYXJndW1lbnRzLCBP
cHRpb25hbDxib29sPiYmIGV4cGVjdHNJbXBsaWNpdENhbGxiYWNrQXJndW1lbnQsIE9wdGlvbmFs
PGRvdWJsZT4mJiBjYWxsYmFja1RpbWVvdXQsIFJlZjxFdmFsdWF0ZUphdmFTY3JpcHRGdW5jdGlv
bkNhbGxiYWNrPiYmIGNhbGxiYWNrKQogewogICAgIFdlYlBhZ2VQcm94eSogcGFnZSA9IHdlYlBh
Z2VQcm94eUZvckhhbmRsZShicm93c2luZ0NvbnRleHRIYW5kbGUpOwogICAgIGlmICghcGFnZSkK
ICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1IoV2luZG93Tm90Rm91bmQp
OwogCiAgICAgYm9vbCBmcmFtZU5vdEZvdW5kID0gZmFsc2U7Ci0gICAgYXV0byBmcmFtZUlEID0g
d2ViRnJhbWVJREZvckhhbmRsZShvcHRpb25hbEZyYW1lSGFuZGxlID8gKm9wdGlvbmFsRnJhbWVI
YW5kbGUgOiBlbXB0eVN0cmluZygpLCBmcmFtZU5vdEZvdW5kKTsKKyAgICBhdXRvIGZyYW1lSUQg
PSB3ZWJGcmFtZUlERm9ySGFuZGxlKGZyYW1lSGFuZGxlLCBmcmFtZU5vdEZvdW5kKTsKICAgICBp
ZiAoZnJhbWVOb3RGb3VuZCkKICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJS
T1IoRnJhbWVOb3RGb3VuZCk7CiAKICAgICBWZWN0b3I8U3RyaW5nPiBhcmd1bWVudHNWZWN0b3I7
Ci0gICAgYXJndW1lbnRzVmVjdG9yLnJlc2VydmVDYXBhY2l0eShhcmd1bWVudHMubGVuZ3RoKCkp
OworICAgIGFyZ3VtZW50c1ZlY3Rvci5yZXNlcnZlQ2FwYWNpdHkoYXJndW1lbnRzLT5sZW5ndGgo
KSk7CiAKLSAgICBmb3IgKGF1dG8mIGFyZ3VtZW50IDogYXJndW1lbnRzKSB7Ci0gICAgICAgIFN0
cmluZyBhcmd1bWVudFN0cmluZzsKLSAgICAgICAgYXJndW1lbnQtPmFzU3RyaW5nKGFyZ3VtZW50
U3RyaW5nKTsKLSAgICAgICAgYXJndW1lbnRzVmVjdG9yLnVuY2hlY2tlZEFwcGVuZChhcmd1bWVu
dFN0cmluZyk7Ci0gICAgfQotCi0gICAgYm9vbCBleHBlY3RzSW1wbGljaXRDYWxsYmFja0FyZ3Vt
ZW50ID0gb3B0aW9uYWxFeHBlY3RzSW1wbGljaXRDYWxsYmFja0FyZ3VtZW50ID8gKm9wdGlvbmFs
RXhwZWN0c0ltcGxpY2l0Q2FsbGJhY2tBcmd1bWVudCA6IGZhbHNlOwotICAgIE9wdGlvbmFsPGRv
dWJsZT4gY2FsbGJhY2tUaW1lb3V0OwotICAgIGlmIChvcHRpb25hbENhbGxiYWNrVGltZW91dCkK
LSAgICAgICAgY2FsbGJhY2tUaW1lb3V0ID0gKm9wdGlvbmFsQ2FsbGJhY2tUaW1lb3V0OworICAg
IGZvciAoY29uc3QgYXV0byYgYXJndW1lbnQgOiBhcmd1bWVudHMuZ2V0KCkpCisgICAgICAgIGFy
Z3VtZW50c1ZlY3Rvci51bmNoZWNrZWRBcHBlbmQoYXJndW1lbnQtPmFzU3RyaW5nKCkpOwogCiAg
ICAgdWludDY0X3QgY2FsbGJhY2tJRCA9IG1fbmV4dEV2YWx1YXRlSmF2YVNjcmlwdENhbGxiYWNr
SUQrKzsKICAgICBtX2V2YWx1YXRlSmF2YVNjcmlwdEZ1bmN0aW9uQ2FsbGJhY2tzLnNldChjYWxs
YmFja0lELCBXVEZNb3ZlKGNhbGxiYWNrKSk7CiAKLSAgICBwYWdlLT5wcm9jZXNzKCkuc2VuZChN
ZXNzYWdlczo6V2ViQXV0b21hdGlvblNlc3Npb25Qcm94eTo6RXZhbHVhdGVKYXZhU2NyaXB0RnVu
Y3Rpb24ocGFnZS0+d2ViUGFnZUlEKCksIGZyYW1lSUQsIGZ1bmN0aW9uLCBhcmd1bWVudHNWZWN0
b3IsIGV4cGVjdHNJbXBsaWNpdENhbGxiYWNrQXJndW1lbnQsIGNhbGxiYWNrVGltZW91dCwgY2Fs
bGJhY2tJRCksIDApOworICAgIHBhZ2UtPnByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpXZWJBdXRv
bWF0aW9uU2Vzc2lvblByb3h5OjpFdmFsdWF0ZUphdmFTY3JpcHRGdW5jdGlvbihwYWdlLT53ZWJQ
YWdlSUQoKSwgZnJhbWVJRCwgZnVuY3Rpb24sIGFyZ3VtZW50c1ZlY3RvciwgZXhwZWN0c0ltcGxp
Y2l0Q2FsbGJhY2tBcmd1bWVudC52YWx1ZU9yKGZhbHNlKSwgV1RGTW92ZShjYWxsYmFja1RpbWVv
dXQpLCBjYWxsYmFja0lEKSwgMCk7CiB9CiAKIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OmRp
ZEV2YWx1YXRlSmF2YVNjcmlwdEZ1bmN0aW9uKHVpbnQ2NF90IGNhbGxiYWNrSUQsIGNvbnN0IFN0
cmluZyYgcmVzdWx0LCBjb25zdCBTdHJpbmcmIGVycm9yVHlwZSkKQEAgLTk2NSw3ICs5NDAsNyBA
QCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpkaWRFdmFsdWF0ZUphdmFTY3JpcHRGdW5jdGlv
bih1aW50NjRfdCBjYWxsYmFja0lELCBjbwogICAgICAgICBjYWxsYmFjay0+c2VuZFN1Y2Nlc3Mo
cmVzdWx0KTsKIH0KIAotdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6cmVzb2x2ZUNoaWxkRnJh
bWVIYW5kbGUoY29uc3QgU3RyaW5nJiBicm93c2luZ0NvbnRleHRIYW5kbGUsIGNvbnN0IFN0cmlu
Zyogb3B0aW9uYWxGcmFtZUhhbmRsZSwgY29uc3QgaW50KiBvcHRpb25hbE9yZGluYWwsIGNvbnN0
IFN0cmluZyogb3B0aW9uYWxOYW1lLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsTm9kZUhhbmRsZSwg
UmVmPFJlc29sdmVDaGlsZEZyYW1lSGFuZGxlQ2FsbGJhY2s+JiYgY2FsbGJhY2spCit2b2lkIFdl
YkF1dG9tYXRpb25TZXNzaW9uOjpyZXNvbHZlQ2hpbGRGcmFtZUhhbmRsZShjb25zdCBJbnNwZWN0
b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRIYW5kbGUmIGJyb3dzaW5n
Q29udGV4dEhhbmRsZSwgY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6RnJh
bWVIYW5kbGUmIGZyYW1lSGFuZGxlLCBPcHRpb25hbDxpbnQ+JiYgb3B0aW9uYWxPcmRpbmFsLCBj
b25zdCBTdHJpbmcmIG9wdGlvbmFsTmFtZSwgY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0
b21hdGlvbjo6Tm9kZUhhbmRsZSYgb3B0aW9uYWxOb2RlSGFuZGxlLCBSZWY8UmVzb2x2ZUNoaWxk
RnJhbWVIYW5kbGVDYWxsYmFjaz4mJiBjYWxsYmFjaykKIHsKICAgICBpZiAoIW9wdGlvbmFsT3Jk
aW5hbCAmJiAhb3B0aW9uYWxOYW1lICYmICFvcHRpb25hbE5vZGVIYW5kbGUpCiAgICAgICAgIEFT
WU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxTKE1pc3NpbmdQYXJhbWV0
ZXIsICJDb21tYW5kIG11c3Qgc3BlY2lmeSBhIGNoaWxkIGZyYW1lIGJ5IG9yZGluYWwsIG5hbWUs
IG9yIGVsZW1lbnQgaGFuZGxlLiIpOwpAQCAtOTc1LDcgKzk1MCw3IEBAIHZvaWQgV2ViQXV0b21h
dGlvblNlc3Npb246OnJlc29sdmVDaGlsZEZyYW1lSGFuZGxlKGNvbnN0IFN0cmluZyYgYnJvd3Np
bmdDb250ZXh0CiAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SKFdpbmRv
d05vdEZvdW5kKTsKIAogICAgIGJvb2wgZnJhbWVOb3RGb3VuZCA9IGZhbHNlOwotICAgIGF1dG8g
ZnJhbWVJRCA9IHdlYkZyYW1lSURGb3JIYW5kbGUob3B0aW9uYWxGcmFtZUhhbmRsZSA/ICpvcHRp
b25hbEZyYW1lSGFuZGxlIDogZW1wdHlTdHJpbmcoKSwgZnJhbWVOb3RGb3VuZCk7CisgICAgYXV0
byBmcmFtZUlEID0gd2ViRnJhbWVJREZvckhhbmRsZShmcmFtZUhhbmRsZSwgZnJhbWVOb3RGb3Vu
ZCk7CiAgICAgaWYgKGZyYW1lTm90Rm91bmQpCiAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVE
RUZJTkVEX0VSUk9SKEZyYW1lTm90Rm91bmQpOwogCkBAIC05ODgsMTMgKzk2MywxMyBAQCB2b2lk
IFdlYkF1dG9tYXRpb25TZXNzaW9uOjpyZXNvbHZlQ2hpbGRGcmFtZUhhbmRsZShjb25zdCBTdHJp
bmcmIGJyb3dzaW5nQ29udGV4dAogICAgICAgICBjYWxsYmFjay0+c2VuZFN1Y2Nlc3MoaGFuZGxl
Rm9yV2ViRnJhbWVJRChmcmFtZUlEKSk7CiAgICAgfTsKIAotICAgIGlmIChvcHRpb25hbE5vZGVI
YW5kbGUpIHsKLSAgICAgICAgcGFnZS0+cHJvY2VzcygpLnNlbmRXaXRoQXN5bmNSZXBseShNZXNz
YWdlczo6V2ViQXV0b21hdGlvblNlc3Npb25Qcm94eTo6UmVzb2x2ZUNoaWxkRnJhbWVXaXRoTm9k
ZUhhbmRsZShwYWdlLT53ZWJQYWdlSUQoKSwgZnJhbWVJRCwgKm9wdGlvbmFsTm9kZUhhbmRsZSks
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICBpZiAoISFvcHRpb25hbE5vZGVIYW5k
bGUpIHsKKyAgICAgICAgcGFnZS0+cHJvY2VzcygpLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdl
czo6V2ViQXV0b21hdGlvblNlc3Npb25Qcm94eTo6UmVzb2x2ZUNoaWxkRnJhbWVXaXRoTm9kZUhh
bmRsZShwYWdlLT53ZWJQYWdlSUQoKSwgZnJhbWVJRCwgb3B0aW9uYWxOb2RlSGFuZGxlKSwgV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
aWYgKG9wdGlvbmFsTmFtZSkgewotICAgICAgICBwYWdlLT5wcm9jZXNzKCkuc2VuZFdpdGhBc3lu
Y1JlcGx5KE1lc3NhZ2VzOjpXZWJBdXRvbWF0aW9uU2Vzc2lvblByb3h5OjpSZXNvbHZlQ2hpbGRG
cmFtZVdpdGhOYW1lKHBhZ2UtPndlYlBhZ2VJRCgpLCBmcmFtZUlELCAqb3B0aW9uYWxOYW1lKSwg
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworICAgIGlmICghIW9wdGlvbmFsTmFtZSkgewor
ICAgICAgICBwYWdlLT5wcm9jZXNzKCkuc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJB
dXRvbWF0aW9uU2Vzc2lvblByb3h5OjpSZXNvbHZlQ2hpbGRGcmFtZVdpdGhOYW1lKHBhZ2UtPndl
YlBhZ2VJRCgpLCBmcmFtZUlELCBvcHRpb25hbE5hbWUpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTEwMDYsNyArOTgxLDcgQEAgdm9p
ZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6cmVzb2x2ZUNoaWxkRnJhbWVIYW5kbGUoY29uc3QgU3Ry
aW5nJiBicm93c2luZ0NvbnRleHQKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAotdm9p
ZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6cmVzb2x2ZVBhcmVudEZyYW1lSGFuZGxlKGNvbnN0IFN0
cmluZyYgYnJvd3NpbmdDb250ZXh0SGFuZGxlLCBjb25zdCBTdHJpbmcmIGZyYW1lSGFuZGxlLCBS
ZWY8UmVzb2x2ZVBhcmVudEZyYW1lSGFuZGxlQ2FsbGJhY2s+JiYgY2FsbGJhY2spCit2b2lkIFdl
YkF1dG9tYXRpb25TZXNzaW9uOjpyZXNvbHZlUGFyZW50RnJhbWVIYW5kbGUoY29uc3QgSW5zcGVj
dG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJiBicm93c2lu
Z0NvbnRleHRIYW5kbGUsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkZy
YW1lSGFuZGxlJiBmcmFtZUhhbmRsZSwgUmVmPFJlc29sdmVQYXJlbnRGcmFtZUhhbmRsZUNhbGxi
YWNrPiYmIGNhbGxiYWNrKQogewogICAgIFdlYlBhZ2VQcm94eSogcGFnZSA9IHdlYlBhZ2VQcm94
eUZvckhhbmRsZShicm93c2luZ0NvbnRleHRIYW5kbGUpOwogICAgIGlmICghcGFnZSkKQEAgLTEw
MjksMTYgKzEwMDQsMjIgQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6cmVzb2x2ZVBhcmVu
dEZyYW1lSGFuZGxlKGNvbnN0IFN0cmluZyYgYnJvd3NpbmdDb250ZXgKICAgICBwYWdlLT5wcm9j
ZXNzKCkuc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJBdXRvbWF0aW9uU2Vzc2lvblBy
b3h5OjpSZXNvbHZlUGFyZW50RnJhbWUocGFnZS0+d2ViUGFnZUlEKCksIGZyYW1lSUQpLCBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKLXN0YXRpYyBPcHRpb25hbDxDb29yZGluYXRl
U3lzdGVtPiBwcm90b2NvbFN0cmluZ1RvQ29vcmRpbmF0ZVN5c3RlbShjb25zdCBTdHJpbmcmIGNv
b3JkaW5hdGVTeXN0ZW1TdHJpbmcpCitzdGF0aWMgT3B0aW9uYWw8Q29vcmRpbmF0ZVN5c3RlbT4g
cHJvdG9jb2xTdHJpbmdUb0Nvb3JkaW5hdGVTeXN0ZW0oSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0
b21hdGlvbjo6Q29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtKQogewotICAgIGlmIChj
b29yZGluYXRlU3lzdGVtU3RyaW5nID09ICJQYWdlIikKKyAgICBzd2l0Y2ggKGNvb3JkaW5hdGVT
eXN0ZW0pIHsKKyAgICBjYXNlIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkNvb3Jk
aW5hdGVTeXN0ZW06OlBhZ2U6CiAgICAgICAgIHJldHVybiBDb29yZGluYXRlU3lzdGVtOjpQYWdl
OwotICAgIGlmIChjb29yZGluYXRlU3lzdGVtU3RyaW5nID09ICJMYXlvdXRWaWV3cG9ydCIpCisK
KyAgICBjYXNlIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkNvb3JkaW5hdGVTeXN0
ZW06OlZpZXdwb3J0OgorICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6
Q29vcmRpbmF0ZVN5c3RlbTo6TGF5b3V0Vmlld3BvcnQ6CiAgICAgICAgIHJldHVybiBDb29yZGlu
YXRlU3lzdGVtOjpMYXlvdXRWaWV3cG9ydDsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQogCi12b2lkIFdlYkF1dG9tYXRpb25T
ZXNzaW9uOjpjb21wdXRlRWxlbWVudExheW91dChjb25zdCBTdHJpbmcmIGJyb3dzaW5nQ29udGV4
dEhhbmRsZSwgY29uc3QgU3RyaW5nJiBmcmFtZUhhbmRsZSwgY29uc3QgU3RyaW5nJiBub2RlSGFu
ZGxlLCBjb25zdCBib29sKiBvcHRpb25hbFNjcm9sbEludG9WaWV3SWZOZWVkZWQsIGNvbnN0IFN0
cmluZyYgY29vcmRpbmF0ZVN5c3RlbVN0cmluZywgUmVmPENvbXB1dGVFbGVtZW50TGF5b3V0Q2Fs
bGJhY2s+JiYgY2FsbGJhY2spCit2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpjb21wdXRlRWxl
bWVudExheW91dChjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2lu
Z0NvbnRleHRIYW5kbGUmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSwgY29uc3QgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6QXV0b21hdGlvbjo6RnJhbWVIYW5kbGUmIGZyYW1lSGFuZGxlLCBjb25zdCBJbnNw
ZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpOb2RlSGFuZGxlJiBub2RlSGFuZGxlLCBPcHRp
b25hbDxib29sPiYmIG9wdGlvbmFsU2Nyb2xsSW50b1ZpZXdJZk5lZWRlZCwgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6QXV0b21hdGlvbjo6Q29vcmRpbmF0ZVN5c3RlbSBjb29yZGluYXRlU3lzdGVtVmFs
dWUsIFJlZjxDb21wdXRlRWxlbWVudExheW91dENhbGxiYWNrPiYmIGNhbGxiYWNrKQogewogICAg
IFdlYlBhZ2VQcm94eSogcGFnZSA9IHdlYlBhZ2VQcm94eUZvckhhbmRsZShicm93c2luZ0NvbnRl
eHRIYW5kbGUpOwogICAgIGlmICghcGFnZSkKQEAgLTEwNDksNyArMTAzMCw3IEBAIHZvaWQgV2Vi
QXV0b21hdGlvblNlc3Npb246OmNvbXB1dGVFbGVtZW50TGF5b3V0KGNvbnN0IFN0cmluZyYgYnJv
d3NpbmdDb250ZXh0SGFuCiAgICAgaWYgKGZyYW1lTm90Rm91bmQpCiAgICAgICAgIEFTWU5DX0ZB
SUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SKEZyYW1lTm90Rm91bmQpOwogCi0gICAgT3B0aW9uYWw8
Q29vcmRpbmF0ZVN5c3RlbT4gY29vcmRpbmF0ZVN5c3RlbSA9IHByb3RvY29sU3RyaW5nVG9Db29y
ZGluYXRlU3lzdGVtKGNvb3JkaW5hdGVTeXN0ZW1TdHJpbmcpOworICAgIE9wdGlvbmFsPENvb3Jk
aW5hdGVTeXN0ZW0+IGNvb3JkaW5hdGVTeXN0ZW0gPSBwcm90b2NvbFN0cmluZ1RvQ29vcmRpbmF0
ZVN5c3RlbShjb29yZGluYXRlU3lzdGVtVmFsdWUpOwogICAgIGlmICghY29vcmRpbmF0ZVN5c3Rl
bSkKICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMo
SW52YWxpZFBhcmFtZXRlciwgIlRoZSBwYXJhbWV0ZXIgJ2Nvb3JkaW5hdGVTeXN0ZW0nIGlzIGlu
dmFsaWQuIik7CiAKQEAgLTEwOTEsNyArMTA3Miw3IEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Np
b246OmNvbXB1dGVFbGVtZW50TGF5b3V0KGNvbnN0IFN0cmluZyYgYnJvd3NpbmdDb250ZXh0SGFu
CiAgICAgcGFnZS0+cHJvY2VzcygpLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQXV0
b21hdGlvblNlc3Npb25Qcm94eTo6Q29tcHV0ZUVsZW1lbnRMYXlvdXQocGFnZS0+d2ViUGFnZUlE
KCksIGZyYW1lSUQsIG5vZGVIYW5kbGUsIHNjcm9sbEludG9WaWV3SWZOZWVkZWQsIGNvb3JkaW5h
dGVTeXN0ZW0udmFsdWUoKSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAotdm9p
ZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6c2VsZWN0T3B0aW9uRWxlbWVudChjb25zdCBTdHJpbmcm
IGJyb3dzaW5nQ29udGV4dEhhbmRsZSwgY29uc3QgU3RyaW5nJiBmcmFtZUhhbmRsZSwgY29uc3Qg
U3RyaW5nJiBub2RlSGFuZGxlLCBSZWY8U2VsZWN0T3B0aW9uRWxlbWVudENhbGxiYWNrPiYmIGNh
bGxiYWNrKQordm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6c2VsZWN0T3B0aW9uRWxlbWVudChj
b25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRIYW5k
bGUmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSwgY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0
b21hdGlvbjo6RnJhbWVIYW5kbGUmIGZyYW1lSGFuZGxlLCBjb25zdCBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpBdXRvbWF0aW9uOjpOb2RlSGFuZGxlJiBub2RlSGFuZGxlLCBSZWY8U2VsZWN0T3B0aW9u
RWxlbWVudENhbGxiYWNrPiYmIGNhbGxiYWNrKQogewogICAgIFdlYlBhZ2VQcm94eSogcGFnZSA9
IHdlYlBhZ2VQcm94eUZvckhhbmRsZShicm93c2luZ0NvbnRleHRIYW5kbGUpOwogICAgIGlmICgh
cGFnZSkKQEAgLTExMTQsNyArMTA5NSw3IEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OnNl
bGVjdE9wdGlvbkVsZW1lbnQoY29uc3QgU3RyaW5nJiBicm93c2luZ0NvbnRleHRIYW5kCiAgICAg
cGFnZS0+cHJvY2VzcygpLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQXV0b21hdGlv
blNlc3Npb25Qcm94eTo6U2VsZWN0T3B0aW9uRWxlbWVudChwYWdlLT53ZWJQYWdlSUQoKSwgZnJh
bWVJRCwgbm9kZUhhbmRsZSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAotdm9p
ZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6aXNTaG93aW5nSmF2YVNjcmlwdERpYWxvZyhJbnNwZWN0
b3I6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBicm93c2luZ0NvbnRl
eHRIYW5kbGUsIGJvb2wqIHJlc3VsdCkKK0luc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5n
T3I8Ym9vbD4gV2ViQXV0b21hdGlvblNlc3Npb246OmlzU2hvd2luZ0phdmFTY3JpcHREaWFsb2co
Y29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFu
ZGxlJiBicm93c2luZ0NvbnRleHRIYW5kbGUpCiB7CiAgICAgQVNTRVJUKG1fY2xpZW50KTsKICAg
ICBpZiAoIW1fY2xpZW50KQpAQCAtMTEyNCwxMCArMTEwNSwxMCBAQCB2b2lkIFdlYkF1dG9tYXRp
b25TZXNzaW9uOjppc1Nob3dpbmdKYXZhU2NyaXB0RGlhbG9nKEluc3BlY3Rvcjo6RXJyb3JTdHJp
bmcmIGVycgogICAgIGlmICghcGFnZSkKICAgICAgICAgU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5F
RF9FUlJPUihXaW5kb3dOb3RGb3VuZCk7CiAKLSAgICAqcmVzdWx0ID0gbV9jbGllbnQtPmlzU2hv
d2luZ0phdmFTY3JpcHREaWFsb2dPblBhZ2UoKnRoaXMsICpwYWdlKTsKKyAgICByZXR1cm4gbV9j
bGllbnQtPmlzU2hvd2luZ0phdmFTY3JpcHREaWFsb2dPblBhZ2UoKnRoaXMsICpwYWdlKTsKIH0K
IAotdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6ZGlzbWlzc0N1cnJlbnRKYXZhU2NyaXB0RGlh
bG9nKEluc3BlY3Rvcjo6RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGJy
b3dzaW5nQ29udGV4dEhhbmRsZSkKK0luc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8
dm9pZD4gV2ViQXV0b21hdGlvblNlc3Npb246OmRpc21pc3NDdXJyZW50SmF2YVNjcmlwdERpYWxv
Zyhjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRI
YW5kbGUmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSkKIHsKICAgICBBU1NFUlQobV9jbGllbnQpOwog
ICAgIGlmICghbV9jbGllbnQpCkBAIC0xMTQxLDkgKzExMjIsMTEgQEAgdm9pZCBXZWJBdXRvbWF0
aW9uU2Vzc2lvbjo6ZGlzbWlzc0N1cnJlbnRKYXZhU2NyaXB0RGlhbG9nKEluc3BlY3Rvcjo6RXJy
b3JTdHJpbmcKICAgICAgICAgU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUihOb0phdmFT
Y3JpcHREaWFsb2cpOwogCiAgICAgbV9jbGllbnQtPmRpc21pc3NDdXJyZW50SmF2YVNjcmlwdERp
YWxvZ09uUGFnZSgqdGhpcywgKnBhZ2UpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBX
ZWJBdXRvbWF0aW9uU2Vzc2lvbjo6YWNjZXB0Q3VycmVudEphdmFTY3JpcHREaWFsb2coSW5zcGVj
dG9yOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgYnJvd3NpbmdDb250
ZXh0SGFuZGxlKQorSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBXZWJB
dXRvbWF0aW9uU2Vzc2lvbjo6YWNjZXB0Q3VycmVudEphdmFTY3JpcHREaWFsb2coY29uc3QgSW5z
cGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJiBicm93
c2luZ0NvbnRleHRIYW5kbGUpCiB7CiAgICAgQVNTRVJUKG1fY2xpZW50KTsKICAgICBpZiAoIW1f
Y2xpZW50KQpAQCAtMTE1Nyw5ICsxMTQwLDExIEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246
OmFjY2VwdEN1cnJlbnRKYXZhU2NyaXB0RGlhbG9nKEluc3BlY3Rvcjo6RXJyb3JTdHJpbmcmCiAg
ICAgICAgIFNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1IoTm9KYXZhU2NyaXB0RGlhbG9n
KTsKIAogICAgIG1fY2xpZW50LT5hY2NlcHRDdXJyZW50SmF2YVNjcmlwdERpYWxvZ09uUGFnZSgq
dGhpcywgKnBhZ2UpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBXZWJBdXRvbWF0aW9u
U2Vzc2lvbjo6bWVzc2FnZU9mQ3VycmVudEphdmFTY3JpcHREaWFsb2coSW5zcGVjdG9yOjpFcnJv
clN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgYnJvd3NpbmdDb250ZXh0SGFuZGxl
LCBTdHJpbmcqIHRleHQpCitJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFN0cmlu
Zz4gV2ViQXV0b21hdGlvblNlc3Npb246Om1lc3NhZ2VPZkN1cnJlbnRKYXZhU2NyaXB0RGlhbG9n
KGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhh
bmRsZSYgYnJvd3NpbmdDb250ZXh0SGFuZGxlKQogewogICAgIEFTU0VSVChtX2NsaWVudCk7CiAg
ICAgaWYgKCFtX2NsaWVudCkKQEAgLTExNzIsMTAgKzExNTcsMTAgQEAgdm9pZCBXZWJBdXRvbWF0
aW9uU2Vzc2lvbjo6bWVzc2FnZU9mQ3VycmVudEphdmFTY3JpcHREaWFsb2coSW5zcGVjdG9yOjpF
cnJvclN0cmkKICAgICBpZiAoIW1fY2xpZW50LT5pc1Nob3dpbmdKYXZhU2NyaXB0RGlhbG9nT25Q
YWdlKCp0aGlzLCAqcGFnZSkpCiAgICAgICAgIFNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJS
T1IoTm9KYXZhU2NyaXB0RGlhbG9nKTsKIAotICAgICp0ZXh0ID0gbV9jbGllbnQtPm1lc3NhZ2VP
ZkN1cnJlbnRKYXZhU2NyaXB0RGlhbG9nT25QYWdlKCp0aGlzLCAqcGFnZSk7CisgICAgcmV0dXJu
IG1fY2xpZW50LT5tZXNzYWdlT2ZDdXJyZW50SmF2YVNjcmlwdERpYWxvZ09uUGFnZSgqdGhpcywg
KnBhZ2UpOwogfQogCi12b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpzZXRVc2VySW5wdXRGb3JD
dXJyZW50SmF2YVNjcmlwdFByb21wdChJbnNwZWN0b3I6OkVycm9yU3RyaW5nJiBlcnJvclN0cmlu
ZywgY29uc3QgU3RyaW5nJiBicm93c2luZ0NvbnRleHRIYW5kbGUsIGNvbnN0IFN0cmluZyYgcHJv
bXB0VmFsdWUpCitJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IFdlYkF1
dG9tYXRpb25TZXNzaW9uOjpzZXRVc2VySW5wdXRGb3JDdXJyZW50SmF2YVNjcmlwdFByb21wdChj
b25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRIYW5k
bGUmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSwgY29uc3QgU3RyaW5nJiBwcm9tcHRWYWx1ZSkKIHsK
ICAgICBBU1NFUlQobV9jbGllbnQpOwogICAgIGlmICghbV9jbGllbnQpCkBAIC0xMjA3LDE5ICsx
MTkyLDIxIEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OnNldFVzZXJJbnB1dEZvckN1cnJl
bnRKYXZhU2NyaXB0UHJvbXB0KEluc3BlY3Rvcjo6RXJyCiAgICAgfQogCiAgICAgbV9jbGllbnQt
PnNldFVzZXJJbnB1dEZvckN1cnJlbnRKYXZhU2NyaXB0UHJvbXB0T25QYWdlKCp0aGlzLCAqcGFn
ZSwgcHJvbXB0VmFsdWUpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBXZWJBdXRvbWF0
aW9uU2Vzc2lvbjo6c2V0RmlsZXNUb1NlbGVjdEZvckZpbGVVcGxvYWQoRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSwgY29uc3QgSlNP
Tjo6QXJyYXkmIGZpbGVuYW1lcywgY29uc3QgSlNPTjo6QXJyYXkqIGZpbGVDb250ZW50cykKK0lu
c3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gV2ViQXV0b21hdGlvblNlc3Np
b246OnNldEZpbGVzVG9TZWxlY3RGb3JGaWxlVXBsb2FkKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYgYnJvd3NpbmdDb250ZXh0SGFu
ZGxlLCBSZWY8SlNPTjo6QXJyYXk+JiYgZmlsZW5hbWVzLCBSZWZQdHI8SlNPTjo6QXJyYXk+JiYg
ZmlsZUNvbnRlbnRzKQogewogICAgIFZlY3RvcjxTdHJpbmc+IG5ld0ZpbGVMaXN0OwotICAgIG5l
d0ZpbGVMaXN0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoZmlsZW5hbWVzLmxlbmd0aCgpKTsKKyAg
ICBuZXdGaWxlTGlzdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGZpbGVuYW1lcy0+bGVuZ3RoKCkp
OwogCi0gICAgaWYgKGZpbGVDb250ZW50cyAmJiBmaWxlQ29udGVudHMtPmxlbmd0aCgpICE9IGZp
bGVuYW1lcy5sZW5ndGgoKSkKKyAgICBpZiAoZmlsZUNvbnRlbnRzICYmIGZpbGVDb250ZW50cy0+
bGVuZ3RoKCkgIT0gZmlsZW5hbWVzLT5sZW5ndGgoKSkKICAgICAgICAgU1lOQ19GQUlMX1dJVEhf
UFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhJbnRlcm5hbEVycm9yLCAiVGhlIHBhcmFtZXRl
cnMgJ2ZpbGVuYW1lcycgYW5kICdmaWxlQ29udGVudHMnIG11c3QgaGF2ZSBlcXVhbCBsZW5ndGgu
Iik7CiAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZpbGVuYW1lcy5sZW5ndGgoKTsgKytp
KSB7Ci0gICAgICAgIFN0cmluZyBmaWxlbmFtZTsKLSAgICAgICAgaWYgKCFmaWxlbmFtZXMuZ2V0
KGkpLT5hc1N0cmluZyhmaWxlbmFtZSkpCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaWxl
bmFtZXMtPmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgYXV0byBmaWxlbmFtZSA9IGZpbGVuYW1l
cy0+Z2V0KGkpLT5hc1N0cmluZygpOworICAgICAgICBpZiAoIWZpbGVuYW1lKQogICAgICAgICAg
ICAgU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhJbnRlcm5hbEVy
cm9yLCAiVGhlIHBhcmFtZXRlciAnZmlsZW5hbWVzJyBjb250YWlucyBhIG5vbi1zdHJpbmcgdmFs
dWUuIik7CiAKICAgICAgICAgaWYgKCFmaWxlQ29udGVudHMpIHsKQEAgLTEyMjcsOCArMTIxNCw4
IEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OnNldEZpbGVzVG9TZWxlY3RGb3JGaWxlVXBs
b2FkKEVycm9yU3RyaW5nJiBlcnJvclN0cmluCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgfQogCi0gICAgICAgIFN0cmluZyBmaWxlRGF0YTsKLSAgICAgICAgaWYgKCFmaWxlQ29udGVu
dHMtPmdldChpKS0+YXNTdHJpbmcoZmlsZURhdGEpKQorICAgICAgICBhdXRvIGZpbGVEYXRhID0g
ZmlsZUNvbnRlbnRzLT5nZXQoaSktPmFzU3RyaW5nKCk7CisgICAgICAgIGlmICghZmlsZURhdGEp
CiAgICAgICAgICAgICBTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxT
KEludGVybmFsRXJyb3IsICJUaGUgcGFyYW1ldGVyICdmaWxlQ29udGVudHMnIGNvbnRhaW5zIGEg
bm9uLXN0cmluZyB2YWx1ZS4iKTsKIAogICAgICAgICBPcHRpb25hbDxTdHJpbmc+IGxvY2FsRmls
ZVBhdGggPSBwbGF0Zm9ybUdlbmVyYXRlTG9jYWxGaWxlUGF0aEZvclJlbW90ZUZpbGUoZmlsZW5h
bWUsIGZpbGVEYXRhKTsKQEAgLTEyMzksOSArMTIyNiwxMSBAQCB2b2lkIFdlYkF1dG9tYXRpb25T
ZXNzaW9uOjpzZXRGaWxlc1RvU2VsZWN0Rm9yRmlsZVVwbG9hZChFcnJvclN0cmluZyYgZXJyb3JT
dHJpbgogICAgIH0KIAogICAgIG1fZmlsZXNUb1NlbGVjdEZvckZpbGVVcGxvYWQuc3dhcChuZXdG
aWxlTGlzdCk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIFdlYkF1dG9tYXRpb25TZXNz
aW9uOjpzZXRGaWxlc0ZvcklucHV0RmlsZVVwbG9hZChjb25zdCBTdHJpbmcmIGJyb3dzaW5nQ29u
dGV4dEhhbmRsZSwgY29uc3QgU3RyaW5nJiBmcmFtZUhhbmRsZSwgY29uc3QgU3RyaW5nJiBub2Rl
SGFuZGxlLCBjb25zdCBKU09OOjpBcnJheSYgZmlsZW5hbWVzLCBSZWY8U2V0RmlsZXNGb3JJbnB1
dEZpbGVVcGxvYWRDYWxsYmFjaz4mJiBjYWxsYmFjaykKK3ZvaWQgV2ViQXV0b21hdGlvblNlc3Np
b246OnNldEZpbGVzRm9ySW5wdXRGaWxlVXBsb2FkKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYgYnJvd3NpbmdDb250ZXh0SGFuZGxl
LCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpGcmFtZUhhbmRsZSYgZnJh
bWVIYW5kbGUsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246Ok5vZGVIYW5k
bGUmIG5vZGVIYW5kbGUsIFJlZjxKU09OOjpBcnJheT4mJiBmaWxlbmFtZXMsIFJlZjxTZXRGaWxl
c0ZvcklucHV0RmlsZVVwbG9hZENhbGxiYWNrPiYmIGNhbGxiYWNrKQogewogICAgIFdlYlBhZ2VQ
cm94eSogcGFnZSA9IHdlYlBhZ2VQcm94eUZvckhhbmRsZShicm93c2luZ0NvbnRleHRIYW5kbGUp
OwogICAgIGlmICghcGFnZSkKQEAgLTEyNTMsMTAgKzEyNDIsMTAgQEAgdm9pZCBXZWJBdXRvbWF0
aW9uU2Vzc2lvbjo6c2V0RmlsZXNGb3JJbnB1dEZpbGVVcGxvYWQoY29uc3QgU3RyaW5nJiBicm93
c2luZ0NvbnQKICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1IoRnJhbWVO
b3RGb3VuZCk7CiAKICAgICBWZWN0b3I8U3RyaW5nPiBuZXdGaWxlTGlzdDsKLSAgICBuZXdGaWxl
TGlzdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGZpbGVuYW1lcy5sZW5ndGgoKSk7Ci0gICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBmaWxlbmFtZXMubGVuZ3RoKCk7ICsraSkgewotICAgICAgICBT
dHJpbmcgZmlsZW5hbWU7Ci0gICAgICAgIGlmICghZmlsZW5hbWVzLmdldChpKS0+YXNTdHJpbmco
ZmlsZW5hbWUpKQorICAgIG5ld0ZpbGVMaXN0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoZmlsZW5h
bWVzLT5sZW5ndGgoKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaWxlbmFtZXMtPmxl
bmd0aCgpOyArK2kpIHsKKyAgICAgICAgYXV0byBmaWxlbmFtZSA9IGZpbGVuYW1lcy0+Z2V0KGkp
LT5hc1N0cmluZygpOworICAgICAgICBpZiAoIWZpbGVuYW1lKQogICAgICAgICAgICAgQVNZTkNf
RkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoSW50ZXJuYWxFcnJvciwgIlRo
ZSBwYXJhbWV0ZXIgJ2ZpbGVuYW1lcycgY29udGFpbnMgYSBub24tc3RyaW5nIHZhbHVlLiIpOwog
CiAgICAgICAgIG5ld0ZpbGVMaXN0LmFwcGVuZChmaWxlbmFtZSk7CkBAIC0xMjk5LDcgKzEyODgs
NyBAQCBzdGF0aWMgUmVmPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21h
dGlvbjo6Q29va2llPj4gYnVpbGRBcnJheUZvcgogICAgIHJldHVybiBjb29raWVzOwogfQogCi12
b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpnZXRBbGxDb29raWVzKGNvbnN0IFN0cmluZyYgYnJv
d3NpbmdDb250ZXh0SGFuZGxlLCBSZWY8R2V0QWxsQ29va2llc0NhbGxiYWNrPiYmIGNhbGxiYWNr
KQordm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6Z2V0QWxsQ29va2llcyhjb25zdCBJbnNwZWN0
b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRIYW5kbGUmIGJyb3dzaW5n
Q29udGV4dEhhbmRsZSwgUmVmPEdldEFsbENvb2tpZXNDYWxsYmFjaz4mJiBjYWxsYmFjaykKIHsK
ICAgICBXZWJQYWdlUHJveHkqIHBhZ2UgPSB3ZWJQYWdlUHJveHlGb3JIYW5kbGUoYnJvd3NpbmdD
b250ZXh0SGFuZGxlKTsKICAgICBpZiAoIXBhZ2UpCkBAIC0xMzE3LDcgKzEzMDYsNyBAQCB2b2lk
IFdlYkF1dG9tYXRpb25TZXNzaW9uOjpnZXRBbGxDb29raWVzKGNvbnN0IFN0cmluZyYgYnJvd3Np
bmdDb250ZXh0SGFuZGxlLCBSZQogICAgIHBhZ2UtPnByb2Nlc3MoKS5zZW5kV2l0aEFzeW5jUmVw
bHkoTWVzc2FnZXM6OldlYkF1dG9tYXRpb25TZXNzaW9uUHJveHk6OkdldENvb2tpZXNGb3JGcmFt
ZShwYWdlLT53ZWJQYWdlSUQoKSwgV1RGOjpudWxsb3B0KSwgV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcikpOwogfQogCi12b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpkZWxldGVTaW5nbGVDb29r
aWUoY29uc3QgU3RyaW5nJiBicm93c2luZ0NvbnRleHRIYW5kbGUsIGNvbnN0IFN0cmluZyYgY29v
a2llTmFtZSwgUmVmPERlbGV0ZVNpbmdsZUNvb2tpZUNhbGxiYWNrPiYmIGNhbGxiYWNrKQordm9p
ZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6ZGVsZXRlU2luZ2xlQ29va2llKGNvbnN0IEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYgYnJvd3NpbmdD
b250ZXh0SGFuZGxlLCBjb25zdCBTdHJpbmcmIGNvb2tpZU5hbWUsIFJlZjxEZWxldGVTaW5nbGVD
b29raWVDYWxsYmFjaz4mJiBjYWxsYmFjaykKIHsKICAgICBXZWJQYWdlUHJveHkqIHBhZ2UgPSB3
ZWJQYWdlUHJveHlGb3JIYW5kbGUoYnJvd3NpbmdDb250ZXh0SGFuZGxlKTsKICAgICBpZiAoIXBh
Z2UpCkBAIC0xMzQ3LDcgKzEzMzYsNyBAQCBzdGF0aWMgU3RyaW5nIGRvbWFpbkJ5QWRkaW5nRG90
UHJlZml4SWZOZWVkZWQoU3RyaW5nIGRvbWFpbikKICAgICByZXR1cm4gZG9tYWluOwogfQogICAg
IAotdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6YWRkU2luZ2xlQ29va2llKGNvbnN0IFN0cmlu
ZyYgYnJvd3NpbmdDb250ZXh0SGFuZGxlLCBjb25zdCBKU09OOjpPYmplY3QmIGNvb2tpZU9iamVj
dCwgUmVmPEFkZFNpbmdsZUNvb2tpZUNhbGxiYWNrPiYmIGNhbGxiYWNrKQordm9pZCBXZWJBdXRv
bWF0aW9uU2Vzc2lvbjo6YWRkU2luZ2xlQ29va2llKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYgYnJvd3NpbmdDb250ZXh0SGFuZGxl
LCBSZWY8SlNPTjo6T2JqZWN0PiYmIGNvb2tpZU9iamVjdCwgUmVmPEFkZFNpbmdsZUNvb2tpZUNh
bGxiYWNrPiYmIGNhbGxiYWNrKQogewogICAgIFdlYlBhZ2VQcm94eSogcGFnZSA9IHdlYlBhZ2VQ
cm94eUZvckhhbmRsZShicm93c2luZ0NvbnRleHRIYW5kbGUpOwogICAgIGlmICghcGFnZSkKQEAg
LTEzNTgsMTQgKzEzNDcsMTYgQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6YWRkU2luZ2xl
Q29va2llKGNvbnN0IFN0cmluZyYgYnJvd3NpbmdDb250ZXh0SGFuZGxlLAogCiAgICAgV2ViQ29y
ZTo6Q29va2llIGNvb2tpZTsKIAotICAgIGlmICghY29va2llT2JqZWN0LmdldFN0cmluZygibmFt
ZSJfcywgY29va2llLm5hbWUpKQorICAgIGNvb2tpZS5uYW1lID0gY29va2llT2JqZWN0LT5nZXRT
dHJpbmcoIm5hbWUiX3MpOworICAgIGlmICghY29va2llLm5hbWUpCiAgICAgICAgIEFTWU5DX0ZB
SUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxTKE1pc3NpbmdQYXJhbWV0ZXIsICJU
aGUgcGFyYW1ldGVyICduYW1lJyB3YXMgbm90IGZvdW5kLiIpOwogCi0gICAgaWYgKCFjb29raWVP
YmplY3QuZ2V0U3RyaW5nKCJ2YWx1ZSJfcywgY29va2llLnZhbHVlKSkKKyAgICBjb29raWUudmFs
dWUgPSBjb29raWVPYmplY3QtPmdldFN0cmluZygidmFsdWUiX3MpOworICAgIGlmICghY29va2ll
LnZhbHVlKQogICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUl9BTkRfREVU
QUlMUyhNaXNzaW5nUGFyYW1ldGVyLCAiVGhlIHBhcmFtZXRlciAndmFsdWUnIHdhcyBub3QgZm91
bmQuIik7CiAKLSAgICBTdHJpbmcgZG9tYWluOwotICAgIGlmICghY29va2llT2JqZWN0LmdldFN0
cmluZygiZG9tYWluIl9zLCBkb21haW4pKQorICAgIGF1dG8gZG9tYWluID0gY29va2llT2JqZWN0
LT5nZXRTdHJpbmcoImRvbWFpbiJfcyk7CisgICAgaWYgKCFkb21haW4pCiAgICAgICAgIEFTWU5D
X0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxTKE1pc3NpbmdQYXJhbWV0ZXIs
ICJUaGUgcGFyYW1ldGVyICdkb21haW4nIHdhcyBub3QgZm91bmQuIik7CiAKICAgICAvLyBJbmhl
cml0IHRoZSBkb21haW4vaG9zdCBmcm9tIHRoZSBtYWluIGZyYW1lJ3MgVVJMIGlmIGl0IGlzIG5v
dCBleHBsaWNpdGx5IHNldC4KQEAgLTEzNzQsMzEgKzEzNjUsNDEgQEAgdm9pZCBXZWJBdXRvbWF0
aW9uU2Vzc2lvbjo6YWRkU2luZ2xlQ29va2llKGNvbnN0IFN0cmluZyYgYnJvd3NpbmdDb250ZXh0
SGFuZGxlLAogICAgIGVsc2UKICAgICAgICAgY29va2llLmRvbWFpbiA9IGRvbWFpbkJ5QWRkaW5n
RG90UHJlZml4SWZOZWVkZWQoZG9tYWluKTsKIAotICAgIGlmICghY29va2llT2JqZWN0LmdldFN0
cmluZygicGF0aCJfcywgY29va2llLnBhdGgpKQorICAgIGNvb2tpZS5wYXRoID0gY29va2llT2Jq
ZWN0LT5nZXRTdHJpbmcoInBhdGgiX3MpOworICAgIGlmICghY29va2llLnBhdGgpCiAgICAgICAg
IEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxTKE1pc3NpbmdQYXJh
bWV0ZXIsICJUaGUgcGFyYW1ldGVyICdwYXRoJyB3YXMgbm90IGZvdW5kLiIpOwogCi0gICAgZG91
YmxlIGV4cGlyZXM7Ci0gICAgaWYgKCFjb29raWVPYmplY3QuZ2V0RG91YmxlKCJleHBpcmVzIl9z
LCBleHBpcmVzKSkKKyAgICBhdXRvIGV4cGlyZXMgPSBjb29raWVPYmplY3QtPmdldERvdWJsZSgi
ZXhwaXJlcyJfcyk7CisgICAgaWYgKCFleHBpcmVzKQogICAgICAgICBBU1lOQ19GQUlMX1dJVEhf
UFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhNaXNzaW5nUGFyYW1ldGVyLCAiVGhlIHBhcmFt
ZXRlciAnZXhwaXJlcycgd2FzIG5vdCBmb3VuZC4iKTsKIAotICAgIGNvb2tpZS5leHBpcmVzID0g
ZXhwaXJlcyAqIDEwMDAuMDsKKyAgICBjb29raWUuZXhwaXJlcyA9ICpleHBpcmVzICogMTAwMC4w
OwogCi0gICAgaWYgKCFjb29raWVPYmplY3QuZ2V0Qm9vbGVhbigic2VjdXJlIl9zLCBjb29raWUu
c2VjdXJlKSkKKyAgICBhdXRvIHNlY3VyZSA9IGNvb2tpZU9iamVjdC0+Z2V0Qm9vbGVhbigic2Vj
dXJlIl9zKTsKKyAgICBpZiAoIXNlY3VyZSkKICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURF
RklORURfRVJST1JfQU5EX0RFVEFJTFMoTWlzc2luZ1BhcmFtZXRlciwgIlRoZSBwYXJhbWV0ZXIg
J3NlY3VyZScgd2FzIG5vdCBmb3VuZC4iKTsKIAotICAgIGlmICghY29va2llT2JqZWN0LmdldEJv
b2xlYW4oInNlc3Npb24iX3MsIGNvb2tpZS5zZXNzaW9uKSkKKyAgICBjb29raWUuc2VjdXJlID0g
KnNlY3VyZTsKKworICAgIGF1dG8gc2Vzc2lvbiA9IGNvb2tpZU9iamVjdC0+Z2V0Qm9vbGVhbigi
c2Vzc2lvbiJfcyk7CisgICAgaWYgKCFzZXNzaW9uKQogICAgICAgICBBU1lOQ19GQUlMX1dJVEhf
UFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhNaXNzaW5nUGFyYW1ldGVyLCAiVGhlIHBhcmFt
ZXRlciAnc2Vzc2lvbicgd2FzIG5vdCBmb3VuZC4iKTsKIAotICAgIGlmICghY29va2llT2JqZWN0
LmdldEJvb2xlYW4oImh0dHBPbmx5Il9zLCBjb29raWUuaHR0cE9ubHkpKQorICAgIGNvb2tpZS5z
ZXNzaW9uID0gKnNlc3Npb247CisKKyAgICBhdXRvIGh0dHBPbmx5ID0gY29va2llT2JqZWN0LT5n
ZXRCb29sZWFuKCJodHRwT25seSJfcyk7CisgICAgaWYgKCFodHRwT25seSkKICAgICAgICAgQVNZ
TkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoTWlzc2luZ1BhcmFtZXRl
ciwgIlRoZSBwYXJhbWV0ZXIgJ2h0dHBPbmx5JyB3YXMgbm90IGZvdW5kLiIpOwogCisgICAgY29v
a2llLmh0dHBPbmx5ID0gKmh0dHBPbmx5OworCiAgICAgV2ViQ29va2llTWFuYWdlclByb3h5KiBj
b29raWVNYW5hZ2VyID0gbV9wcm9jZXNzUG9vbC0+c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2Vy
UHJveHk+KCk7CiAgICAgY29va2llTWFuYWdlci0+c2V0Q29va2llcyhwYWdlLT53ZWJzaXRlRGF0
YVN0b3JlKCkuc2Vzc2lvbklEKCksIHsgY29va2llIH0sIFtjYWxsYmFja10oKSB7CiAgICAgICAg
IGNhbGxiYWNrLT5zZW5kU3VjY2VzcygpOwogICAgIH0pOwogfQogCi12b2lkIFdlYkF1dG9tYXRp
b25TZXNzaW9uOjpkZWxldGVBbGxDb29raWVzKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29u
c3QgU3RyaW5nJiBicm93c2luZ0NvbnRleHRIYW5kbGUpCitJbnNwZWN0b3I6OlByb3RvY29sOjpF
cnJvclN0cmluZ09yPHZvaWQ+IFdlYkF1dG9tYXRpb25TZXNzaW9uOjpkZWxldGVBbGxDb29raWVz
KGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhh
bmRsZSYgYnJvd3NpbmdDb250ZXh0SGFuZGxlKQogewogICAgIFdlYlBhZ2VQcm94eSogcGFnZSA9
IHdlYlBhZ2VQcm94eUZvckhhbmRsZShicm93c2luZ0NvbnRleHRIYW5kbGUpOwogICAgIGlmICgh
cGFnZSkKQEAgLTE0MTEsOSArMTQxMiwxMSBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpk
ZWxldGVBbGxDb29raWVzKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaQogCiAg
ICAgV2ViQ29va2llTWFuYWdlclByb3h5KiBjb29raWVNYW5hZ2VyID0gbV9wcm9jZXNzUG9vbC0+
c3VwcGxlbWVudDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCk7CiAgICAgY29va2llTWFuYWdlci0+
ZGVsZXRlQ29va2llc0Zvckhvc3RuYW1lcyhwYWdlLT53ZWJzaXRlRGF0YVN0b3JlKCkuc2Vzc2lv
bklEKCksIHsgaG9zdCwgZG9tYWluQnlBZGRpbmdEb3RQcmVmaXhJZk5lZWRlZChob3N0KSB9KTsK
KworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OmdldFNl
c3Npb25QZXJtaXNzaW9ucyhFcnJvclN0cmluZyYsIFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OlNlc3Npb25QZXJtaXNzaW9uRGF0YT4+JiBvdXRf
cGVybWlzc2lvbnMpCitJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxKU09O
OjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OlNlc3Npb25QZXJtaXNz
aW9uRGF0YT4+PiBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6Z2V0U2Vzc2lvblBlcm1pc3Npb25zKCkK
IHsKICAgICBhdXRvIHBlcm1pc3Npb25zT2JqZWN0QXJyYXkgPSBKU09OOjpBcnJheU9mPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OlNlc3Npb25QZXJtaXNzaW9uRGF0YT46OmNyZWF0
ZSgpOwogICAgIGF1dG8gZ2V0VXNlck1lZGlhUGVybWlzc2lvbk9iamVjdCA9IEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkF1dG9tYXRpb246OlNlc3Npb25QZXJtaXNzaW9uRGF0YTo6Y3JlYXRlKCkKQEAg
LTE0MjIsMzQgKzE0MjUsMzYgQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6Z2V0U2Vzc2lv
blBlcm1pc3Npb25zKEVycm9yU3RyaW5nJiwgUmVmUHRyPEpTT046OkFycmEKICAgICAgICAgLnJl
bGVhc2UoKTsKIAogICAgIHBlcm1pc3Npb25zT2JqZWN0QXJyYXktPmFkZEl0ZW0oV1RGTW92ZShn
ZXRVc2VyTWVkaWFQZXJtaXNzaW9uT2JqZWN0KSk7Ci0gICAgb3V0X3Blcm1pc3Npb25zID0gV1RG
TW92ZShwZXJtaXNzaW9uc09iamVjdEFycmF5KTsKKyAgICByZXR1cm4gV1RGTW92ZShwZXJtaXNz
aW9uc09iamVjdEFycmF5KTsKIH0KIAotdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6c2V0U2Vz
c2lvblBlcm1pc3Npb25zKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgSlNPTjo6QXJy
YXkmIHBlcm1pc3Npb25zKQorSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lk
PiBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6c2V0U2Vzc2lvblBlcm1pc3Npb25zKFJlZjxKU09OOjpB
cnJheT4mJiBwZXJtaXNzaW9ucykKIHsKLSAgICBmb3IgKGF1dG8gaXQgPSBwZXJtaXNzaW9ucy5i
ZWdpbigpOyBpdCAhPSBwZXJtaXNzaW9ucy5lbmQoKTsgKytpdCkgewotICAgICAgICBSZWZQdHI8
SlNPTjo6T2JqZWN0PiBwZXJtaXNzaW9uOwotICAgICAgICBpZiAoIWl0LT5nZXQoKS0+YXNPYmpl
Y3QocGVybWlzc2lvbikpCisgICAgZm9yIChhdXRvIGl0ID0gcGVybWlzc2lvbnMtPmJlZ2luKCk7
IGl0ICE9IHBlcm1pc3Npb25zLT5lbmQoKTsgKytpdCkgeworICAgICAgICBhdXRvIHBlcm1pc3Np
b24gPSBpdC0+Z2V0KCkuYXNPYmplY3QoKTsKKyAgICAgICAgaWYgKCFwZXJtaXNzaW9uKQogICAg
ICAgICAgICAgU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhJbnZh
bGlkUGFyYW1ldGVyLCAiVGhlIHBhcmFtZXRlciAncGVybWlzc2lvbnMnIGlzIGludmFsaWQuIik7
CiAKLSAgICAgICAgU3RyaW5nIHBlcm1pc3Npb25OYW1lOwotICAgICAgICBpZiAoIXBlcm1pc3Np
b24tPmdldFN0cmluZygicGVybWlzc2lvbiJfcywgcGVybWlzc2lvbk5hbWUpKQorICAgICAgICBh
dXRvIHBlcm1pc3Npb25OYW1lID0gcGVybWlzc2lvbi0+Z2V0U3RyaW5nKCJwZXJtaXNzaW9uIl9z
KTsKKyAgICAgICAgaWYgKCFwZXJtaXNzaW9uTmFtZSkKICAgICAgICAgICAgIFNZTkNfRkFJTF9X
SVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoSW52YWxpZFBhcmFtZXRlciwgIlRoZSBw
YXJhbWV0ZXIgJ3Blcm1pc3Npb24nIGlzIG1pc3Npbmcgb3IgaW52YWxpZC4iKTsKIAogICAgICAg
ICBhdXRvIHBhcnNlZFBlcm1pc3Npb25OYW1lID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21h
dGlvbkhlbHBlcnM6OnBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29s
OjpBdXRvbWF0aW9uOjpTZXNzaW9uUGVybWlzc2lvbj4ocGVybWlzc2lvbk5hbWUpOwogICAgICAg
ICBpZiAoIXBhcnNlZFBlcm1pc3Npb25OYW1lKQogICAgICAgICAgICAgU1lOQ19GQUlMX1dJVEhf
UFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhJbnZhbGlkUGFyYW1ldGVyLCAiVGhlIHBhcmFt
ZXRlciAncGVybWlzc2lvbicgaGFzIGFuIHVua25vd24gdmFsdWUuIik7CiAKLSAgICAgICAgYm9v
bCBwZXJtaXNzaW9uVmFsdWU7Ci0gICAgICAgIGlmICghcGVybWlzc2lvbi0+Z2V0Qm9vbGVhbigi
dmFsdWUiX3MsIHBlcm1pc3Npb25WYWx1ZSkpCisgICAgICAgIGF1dG8gcGVybWlzc2lvblZhbHVl
ID0gcGVybWlzc2lvbi0+Z2V0Qm9vbGVhbigidmFsdWUiX3MpOworICAgICAgICBpZiAoIXBlcm1p
c3Npb25WYWx1ZSkKICAgICAgICAgICAgIFNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1Jf
QU5EX0RFVEFJTFMoSW52YWxpZFBhcmFtZXRlciwgIlRoZSBwYXJhbWV0ZXIgJ3ZhbHVlJyBpcyBt
aXNzaW5nIG9yIGludmFsaWQuIik7CiAKICAgICAgICAgc3dpdGNoIChwYXJzZWRQZXJtaXNzaW9u
TmFtZS52YWx1ZSgpKSB7CiAgICAgICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21h
dGlvbjo6U2Vzc2lvblBlcm1pc3Npb246OkdldFVzZXJNZWRpYToKLSAgICAgICAgICAgIG1fcGVy
bWlzc2lvbkZvckdldFVzZXJNZWRpYSA9IHBlcm1pc3Npb25WYWx1ZTsKKyAgICAgICAgICAgIG1f
cGVybWlzc2lvbkZvckdldFVzZXJNZWRpYSA9ICpwZXJtaXNzaW9uVmFsdWU7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogICAgIH0KKworICAgIHJldHVybiB7IH07CiB9CiAKIGJvb2wg
V2ViQXV0b21hdGlvblNlc3Npb246OnNob3VsZEFsbG93R2V0VXNlck1lZGlhRm9yUGFnZShjb25z
dCBXZWJQYWdlUHJveHkmKSBjb25zdApAQCAtMTQ5NCw3ICsxNDk5LDcgQEAgU2ltdWxhdGVkSW5w
dXRTb3VyY2UqIFdlYkF1dG9tYXRpb25TZXNzaW9uOjppbnB1dFNvdXJjZUZvclR5cGUoU2ltdWxh
dGVkSW5wdXRTb3UKIH0KIAogLy8gTUFSSzogU2ltdWxhdGVkSW5wdXREaXNwYXRjaGVyOjpDbGll
bnQgQVBJCi12b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjp2aWV3cG9ydEluVmlld0NlbnRlclBv
aW50T2ZFbGVtZW50KFdlYlBhZ2VQcm94eSYgcGFnZSwgT3B0aW9uYWw8RnJhbWVJZGVudGlmaWVy
PiBmcmFtZUlELCBjb25zdCBTdHJpbmcmIG5vZGVIYW5kbGUsIEZ1bmN0aW9uPHZvaWQgKE9wdGlv
bmFsPFdlYkNvcmU6OkludFBvaW50PiwgT3B0aW9uYWw8QXV0b21hdGlvbkNvbW1hbmRFcnJvcj4p
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQordm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6dmlld3Bv
cnRJblZpZXdDZW50ZXJQb2ludE9mRWxlbWVudChXZWJQYWdlUHJveHkmIHBhZ2UsIE9wdGlvbmFs
PEZyYW1lSWRlbnRpZmllcj4gZnJhbWVJRCwgY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0
b21hdGlvbjo6Tm9kZUhhbmRsZSYgbm9kZUhhbmRsZSwgRnVuY3Rpb248dm9pZChPcHRpb25hbDxX
ZWJDb3JlOjpJbnRQb2ludD4sIE9wdGlvbmFsPEF1dG9tYXRpb25Db21tYW5kRXJyb3I+KT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBXVEY6OkNvbXBsZXRpb25IYW5kbGVyPHZvaWQoT3B0
aW9uYWw8U3RyaW5nPiwgV2ViQ29yZTo6SW50UmVjdCwgT3B0aW9uYWw8V2ViQ29yZTo6SW50UG9p
bnQ+LCBib29sKT4gZGlkQ29tcHV0ZUVsZW1lbnRMYXlvdXRIYW5kbGVyID0gW2NvbXBsZXRpb25I
YW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKE9wdGlvbmFsPFN0cmluZz4gZXJy
b3JUeXBlLCBXZWJDb3JlOjpJbnRSZWN0LCBPcHRpb25hbDxXZWJDb3JlOjpJbnRQb2ludD4gaW5W
aWV3Q2VudGVyUG9pbnQsIGJvb2wpIG11dGFibGUgewogICAgICAgICBpZiAoZXJyb3JUeXBlKSB7
CkBAIC0xNjM1LDcgKzE2NDAsNyBAQCBzdGF0aWMgV2ViRXZlbnQ6Ok1vZGlmaWVyIHByb3RvY29s
TW9kaWZpZXJUb1dlYkV2ZW50TW9kaWZpZXIoSW5zcGVjdG9yOjpQcm90b2NvbAogfQogI2VuZGlm
IC8vIEVOQUJMRShXRUJEUklWRVJfTU9VU0VfSU5URVJBQ1RJT05TKQogCi12b2lkIFdlYkF1dG9t
YXRpb25TZXNzaW9uOjpwZXJmb3JtTW91c2VJbnRlcmFjdGlvbihjb25zdCBTdHJpbmcmIGhhbmRs
ZSwgY29uc3QgSlNPTjo6T2JqZWN0JiByZXF1ZXN0ZWRQb3NpdGlvbk9iamVjdCwgY29uc3QgU3Ry
aW5nJiBtb3VzZUJ1dHRvblN0cmluZywgY29uc3QgU3RyaW5nJiBtb3VzZUludGVyYWN0aW9uU3Ry
aW5nLCBjb25zdCBKU09OOjpBcnJheSYga2V5TW9kaWZpZXJTdHJpbmdzLCBSZWY8UGVyZm9ybU1v
dXNlSW50ZXJhY3Rpb25DYWxsYmFjaz4mJiBjYWxsYmFjaykKK3ZvaWQgV2ViQXV0b21hdGlvblNl
c3Npb246OnBlcmZvcm1Nb3VzZUludGVyYWN0aW9uKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYgaGFuZGxlLCBSZWY8SlNPTjo6T2Jq
ZWN0PiYmIHJlcXVlc3RlZFBvc2l0aW9uLCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9u
OjpNb3VzZUJ1dHRvbiBtb3VzZUJ1dHRvbiwgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlv
bjo6TW91c2VJbnRlcmFjdGlvbiBtb3VzZUludGVyYWN0aW9uLCBSZWY8SlNPTjo6QXJyYXk+JiYg
a2V5TW9kaWZpZXJTdHJpbmdzLCBSZWY8UGVyZm9ybU1vdXNlSW50ZXJhY3Rpb25DYWxsYmFjaz4m
JiBjYWxsYmFjaykKIHsKICNpZiAhRU5BQkxFKFdFQkRSSVZFUl9NT1VTRV9JTlRFUkFDVElPTlMp
CiAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1IoTm90SW1wbGVtZW50ZWQpOwpA
QCAtMTY0NCw0OCArMTY0OSw0NCBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpwZXJmb3Jt
TW91c2VJbnRlcmFjdGlvbihjb25zdCBTdHJpbmcmIGhhbmRsZSwgY29uc3QgSgogICAgIGlmICgh
cGFnZSkKICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1IoV2luZG93Tm90
Rm91bmQpOwogCi0gICAgZmxvYXQgeDsKLSAgICBpZiAoIXJlcXVlc3RlZFBvc2l0aW9uT2JqZWN0
LmdldERvdWJsZSgieCJfcywgeCkpCisgICAgYXV0byB4ID0gcmVxdWVzdGVkUG9zaXRpb24tPmdl
dERvdWJsZSgieCJfcyk7CisgICAgaWYgKCF4KQogICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJF
REVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhNaXNzaW5nUGFyYW1ldGVyLCAiVGhlIHBhcmFtZXRl
ciAneCcgd2FzIG5vdCBmb3VuZC4iKTsKIAotICAgIGZsb2F0IHk7Ci0gICAgaWYgKCFyZXF1ZXN0
ZWRQb3NpdGlvbk9iamVjdC5nZXREb3VibGUoInkiX3MsIHkpKQorICAgIGF1dG8gZmxvYXRYID0g
c3RhdGljX2Nhc3Q8ZmxvYXQ+KCp4KTsKKworICAgIGF1dG8geSA9IHJlcXVlc3RlZFBvc2l0aW9u
LT5nZXREb3VibGUoInkiX3MpOworICAgIGlmICgheSkKICAgICAgICAgQVNZTkNfRkFJTF9XSVRI
X1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoTWlzc2luZ1BhcmFtZXRlciwgIlRoZSBwYXJh
bWV0ZXIgJ3knIHdhcyBub3QgZm91bmQuIik7CiAKKyAgICBhdXRvIGZsb2F0WSA9IHN0YXRpY19j
YXN0PGZsb2F0PigqeSk7CisKICAgICBPcHRpb25TZXQ8V2ViRXZlbnQ6Ok1vZGlmaWVyPiBrZXlN
b2RpZmllcnM7Ci0gICAgZm9yIChhdXRvIGl0ID0ga2V5TW9kaWZpZXJTdHJpbmdzLmJlZ2luKCk7
IGl0ICE9IGtleU1vZGlmaWVyU3RyaW5ncy5lbmQoKTsgKytpdCkgewotICAgICAgICBTdHJpbmcg
bW9kaWZpZXJTdHJpbmc7Ci0gICAgICAgIGlmICghaXQtPmdldCgpLT5hc1N0cmluZyhtb2RpZmll
clN0cmluZykpCisgICAgZm9yIChhdXRvIGl0ID0ga2V5TW9kaWZpZXJTdHJpbmdzLT5iZWdpbigp
OyBpdCAhPSBrZXlNb2RpZmllclN0cmluZ3MtPmVuZCgpOyArK2l0KSB7CisgICAgICAgIGF1dG8g
bW9kaWZpZXJTdHJpbmcgPSBpdC0+Z2V0KCkuYXNTdHJpbmcoKTsKKyAgICAgICAgaWYgKCFtb2Rp
ZmllclN0cmluZykKICAgICAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9S
X0FORF9ERVRBSUxTKEludmFsaWRQYXJhbWV0ZXIsICJUaGUgcGFyYW1ldGVyICdtb2RpZmllcnMn
IGlzIGludmFsaWQuIik7CiAKICAgICAgICAgYXV0byBwYXJzZWRNb2RpZmllciA9IEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkF1dG9tYXRpb25IZWxwZXJzOjpwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8
SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6S2V5TW9kaWZpZXI+KG1vZGlmaWVyU3Ry
aW5nKTsKICAgICAgICAgaWYgKCFwYXJzZWRNb2RpZmllcikKICAgICAgICAgICAgIEFTWU5DX0ZB
SUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxTKEludmFsaWRQYXJhbWV0ZXIsICJB
IG1vZGlmaWVyIGluIHRoZSAnbW9kaWZpZXJzJyBhcnJheSBpcyBpbnZhbGlkLiIpOworCiAgICAg
ICAgIGtleU1vZGlmaWVycy5hZGQocHJvdG9jb2xNb2RpZmllclRvV2ViRXZlbnRNb2RpZmllcihw
YXJzZWRNb2RpZmllci52YWx1ZSgpKSk7CiAgICAgfQogCi0gICAgcGFnZS0+Z2V0V2luZG93RnJh
bWVXaXRoQ2FsbGJhY2soW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY2Fs
bGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgcGFnZSA9IG1ha2VSZWYoKnBhZ2UpLCB4LCB5LCBt
b3VzZUludGVyYWN0aW9uU3RyaW5nLCBtb3VzZUJ1dHRvblN0cmluZywga2V5TW9kaWZpZXJzXShX
ZWJDb3JlOjpGbG9hdFJlY3Qgd2luZG93RnJhbWUpIG11dGFibGUgeworICAgIHBhZ2UtPmdldFdp
bmRvd0ZyYW1lV2l0aENhbGxiYWNrKFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhp
cyksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIHBhZ2UgPSBtYWtlUmVmKCpwYWdlKSwg
ZmxvYXRYLCBmbG9hdFksIG1vdXNlSW50ZXJhY3Rpb24sIG1vdXNlQnV0dG9uLCBrZXlNb2RpZmll
cnNdKFdlYkNvcmU6OkZsb2F0UmVjdCB3aW5kb3dGcmFtZSkgbXV0YWJsZSB7CisgICAgICAgIGZs
b2F0WCA9IHN0ZDo6bWluKHN0ZDo6bWF4KDAuMGYsIGZsb2F0WCksIHdpbmRvd0ZyYW1lLnNpemUo
KS53aWR0aCgpKTsKKyAgICAgICAgZmxvYXRZID0gc3RkOjptaW4oc3RkOjptYXgoMC4wZiwgZmxv
YXRZKSwgd2luZG93RnJhbWUuc2l6ZSgpLmhlaWdodCgpKTsKIAotICAgICAgICB4ID0gc3RkOjpt
aW4oc3RkOjptYXgoMC4wZiwgeCksIHdpbmRvd0ZyYW1lLnNpemUoKS53aWR0aCgpKTsKLSAgICAg
ICAgeSA9IHN0ZDo6bWluKHN0ZDo6bWF4KDAuMGYsIHkpLCB3aW5kb3dGcmFtZS5zaXplKCkuaGVp
Z2h0KCkpOworICAgICAgICBXZWJDb3JlOjpJbnRQb2ludCBsb2NhdGlvbkluVmlld3BvcnQgPSBX
ZWJDb3JlOjpJbnRQb2ludChzdGF0aWNfY2FzdDxpbnQ+KGZsb2F0WCksIHN0YXRpY19jYXN0PGlu
dD4oZmxvYXRZKSk7CiAKLSAgICAgICAgV2ViQ29yZTo6SW50UG9pbnQgbG9jYXRpb25JblZpZXdw
b3J0ID0gV2ViQ29yZTo6SW50UG9pbnQoc3RhdGljX2Nhc3Q8aW50Pih4KSwgc3RhdGljX2Nhc3Q8
aW50Pih5KSk7Ci0KLSAgICAgICAgYXV0byBwYXJzZWRJbnRlcmFjdGlvbiA9IEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkF1dG9tYXRpb25IZWxwZXJzOjpwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5z
cGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6TW91c2VJbnRlcmFjdGlvbj4obW91c2VJbnRl
cmFjdGlvblN0cmluZyk7Ci0gICAgICAgIGlmICghcGFyc2VkSW50ZXJhY3Rpb24pCi0gICAgICAg
ICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhJbnZhbGlk
UGFyYW1ldGVyLCAiVGhlIHBhcmFtZXRlciAnaW50ZXJhY3Rpb24nIGlzIGludmFsaWQuIik7Ci0K
LSAgICAgICAgYXV0byBwYXJzZWRCdXR0b24gPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0
aW9uSGVscGVyczo6cGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkF1dG9tYXRpb246Ok1vdXNlQnV0dG9uPihtb3VzZUJ1dHRvblN0cmluZyk7Ci0gICAgICAgIGlm
ICghcGFyc2VkQnV0dG9uKQotICAgICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURf
RVJST1JfQU5EX0RFVEFJTFMoSW52YWxpZFBhcmFtZXRlciwgIlRoZSBwYXJhbWV0ZXIgJ2J1dHRv
bicgaXMgaW52YWxpZC4iKTsKLQotICAgICAgICBhdXRvIG1vdXNlRXZlbnRzRmx1c2hlZENhbGxi
YWNrID0gW3Byb3RlY3RlZFRoaXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRoaXMpLCBjYWxsYmFjayA9
IFdURk1vdmUoY2FsbGJhY2spLCBwYWdlLCB4LCB5XShPcHRpb25hbDxBdXRvbWF0aW9uQ29tbWFu
ZEVycm9yPiBlcnJvcikgeworICAgICAgICBhdXRvIG1vdXNlRXZlbnRzRmx1c2hlZENhbGxiYWNr
ID0gW3Byb3RlY3RlZFRoaXMgPSBXVEZNb3ZlKHByb3RlY3RlZFRoaXMpLCBjYWxsYmFjayA9IFdU
Rk1vdmUoY2FsbGJhY2spLCBwYWdlLCBmbG9hdFgsIGZsb2F0WV0oT3B0aW9uYWw8QXV0b21hdGlv
bkNvbW1hbmRFcnJvcj4gZXJyb3IpIHsKICAgICAgICAgICAgIGlmIChlcnJvcikKICAgICAgICAg
ICAgICAgICBjYWxsYmFjay0+c2VuZEZhaWx1cmUoZXJyb3IudmFsdWUoKS50b1Byb3RvY29sU3Ry
aW5nKCkpOwogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgY2FsbGJhY2stPnNl
bmRTdWNjZXNzKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OlBvaW50OjpjcmVhdGUo
KQotICAgICAgICAgICAgICAgICAgICAuc2V0WCh4KQotICAgICAgICAgICAgICAgICAgICAuc2V0
WSh5IC0gcGFnZS0+dG9wQ29udGVudEluc2V0KCkpCisgICAgICAgICAgICAgICAgICAgIC5zZXRY
KGZsb2F0WCkKKyAgICAgICAgICAgICAgICAgICAgLnNldFkoZmxvYXRZIC0gcGFnZS0+dG9wQ29u
dGVudEluc2V0KCkpCiAgICAgICAgICAgICAgICAgICAgIC5yZWxlYXNlKCkpOwogICAgICAgICAg
ICAgfQogICAgICAgICB9OwpAQCAtMTY5NSw3ICsxNjk2LDcgQEAgdm9pZCBXZWJBdXRvbWF0aW9u
U2Vzc2lvbjo6cGVyZm9ybU1vdXNlSW50ZXJhY3Rpb24oY29uc3QgU3RyaW5nJiBoYW5kbGUsIGNv
bnN0IEoKICAgICAgICAgICAgIGNhbGxiYWNrSW5NYXAoQVVUT01BVElPTl9DT01NQU5EX0VSUk9S
X1dJVEhfTkFNRShUaW1lb3V0KSk7CiAgICAgICAgIGNhbGxiYWNrSW5NYXAgPSBXVEZNb3ZlKG1v
dXNlRXZlbnRzRmx1c2hlZENhbGxiYWNrKTsKIAotICAgICAgICBwbGF0Zm9ybVNpbXVsYXRlTW91
c2VJbnRlcmFjdGlvbihwYWdlLCBwYXJzZWRJbnRlcmFjdGlvbi52YWx1ZSgpLCBwYXJzZWRCdXR0
b24udmFsdWUoKSwgbG9jYXRpb25JblZpZXdwb3J0LCBrZXlNb2RpZmllcnMpOworICAgICAgICBw
bGF0Zm9ybVNpbXVsYXRlTW91c2VJbnRlcmFjdGlvbihwYWdlLCBtb3VzZUludGVyYWN0aW9uLCBt
b3VzZUJ1dHRvbiwgbG9jYXRpb25JblZpZXdwb3J0LCBrZXlNb2RpZmllcnMpOwogCiAgICAgICAg
IC8vIElmIHRoZSBldmVudCBsb2NhdGlvbiB3YXMgcHJldmlvdXNseSBjbGlwcGVkIGFuZCBkb2Vz
IG5vdCBoaXQgdGVzdCBhbnl0aGluZyBpbiB0aGUgd2luZG93LCB0aGVuIGl0IHdpbGwgbm90IGJl
IHByb2Nlc3NlZC4KICAgICAgICAgLy8gRm9yIGNvbXBhdGliaWxpdHkgd2l0aCBwcmUtVzNDIGRy
aXZlciBpbXBsZW1lbnRhdGlvbnMsIGRvbid0IG1ha2UgdGhpcyBhIGhhcmQgZXJyb3I7IGp1c3Qg
ZG8gbm90aGluZyBzaWxlbnRseS4KQEAgLTE3MDgsNyArMTcwOSw3IEBAIHZvaWQgV2ViQXV0b21h
dGlvblNlc3Npb246OnBlcmZvcm1Nb3VzZUludGVyYWN0aW9uKGNvbnN0IFN0cmluZyYgaGFuZGxl
LCBjb25zdCBKCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkRSSVZFUl9NT1VTRV9JTlRFUkFDVElPTlMp
CiB9CiAKLXZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OnBlcmZvcm1LZXlib2FyZEludGVyYWN0
aW9ucyhjb25zdCBTdHJpbmcmIGhhbmRsZSwgY29uc3QgSlNPTjo6QXJyYXkmIGludGVyYWN0aW9u
cywgUmVmPFBlcmZvcm1LZXlib2FyZEludGVyYWN0aW9uc0NhbGxiYWNrPiYmIGNhbGxiYWNrKQor
dm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6cGVyZm9ybUtleWJvYXJkSW50ZXJhY3Rpb25zKGNv
bnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRs
ZSYgaGFuZGxlLCBSZWY8SlNPTjo6QXJyYXk+JiYgaW50ZXJhY3Rpb25zLCBSZWY8UGVyZm9ybUtl
eWJvYXJkSW50ZXJhY3Rpb25zQ2FsbGJhY2s+JiYgY2FsbGJhY2spCiB7CiAjaWYgIUVOQUJMRShX
RUJEUklWRVJfS0VZQk9BUkRfSU5URVJBQ1RJT05TKQogICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVE
RUZJTkVEX0VSUk9SKE5vdEltcGxlbWVudGVkKTsKQEAgLTE3MTcsMjggKzE3MTgsMjcgQEAgdm9p
ZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6cGVyZm9ybUtleWJvYXJkSW50ZXJhY3Rpb25zKGNvbnN0
IFN0cmluZyYgaGFuZGxlLCBjb24KICAgICBpZiAoIXBhZ2UpCiAgICAgICAgIEFTWU5DX0ZBSUxf
V0lUSF9QUkVERUZJTkVEX0VSUk9SKFdpbmRvd05vdEZvdW5kKTsKIAotICAgIGlmICghaW50ZXJh
Y3Rpb25zLmxlbmd0aCgpKQorICAgIGlmICghaW50ZXJhY3Rpb25zLT5sZW5ndGgoKSkKICAgICAg
ICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoSW52YWxpZFBh
cmFtZXRlciwgIlRoZSBwYXJhbWV0ZXIgJ2ludGVyYWN0aW9ucycgd2FzIG5vdCBmb3VuZCBvciBl
bXB0eS4iKTsKIAogICAgIC8vIFZhbGlkYXRlIGFsbCBvZiB0aGUgcGFyYW1ldGVycyBiZWZvcmUg
cGVyZm9ybWluZyBhbnkgaW50ZXJhY3Rpb25zIHdpdGggdGhlIGJyb3dzaW5nIGNvbnRleHQgdW5k
ZXIgdGVzdC4KICAgICBWZWN0b3I8V1RGOjpGdW5jdGlvbjx2b2lkKCk+PiBhY3Rpb25zVG9QZXJm
b3JtOwotICAgIGFjdGlvbnNUb1BlcmZvcm0ucmVzZXJ2ZUNhcGFjaXR5KGludGVyYWN0aW9ucy5s
ZW5ndGgoKSk7CisgICAgYWN0aW9uc1RvUGVyZm9ybS5yZXNlcnZlQ2FwYWNpdHkoaW50ZXJhY3Rp
b25zLT5sZW5ndGgoKSk7CiAKLSAgICBmb3IgKGNvbnN0IGF1dG8mIGludGVyYWN0aW9uIDogaW50
ZXJhY3Rpb25zKSB7Ci0gICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IGludGVyYWN0aW9uT2Jq
ZWN0OwotICAgICAgICBpZiAoIWludGVyYWN0aW9uLT5hc09iamVjdChpbnRlcmFjdGlvbk9iamVj
dCkpCisgICAgZm9yIChjb25zdCBhdXRvJiBpbnRlcmFjdGlvblZhbHVlIDogaW50ZXJhY3Rpb25z
LmdldCgpKSB7CisgICAgICAgIGF1dG8gaW50ZXJhY3Rpb25PYmplY3QgPSBpbnRlcmFjdGlvblZh
bHVlLT5hc09iamVjdCgpOworICAgICAgICBpZiAoIWludGVyYWN0aW9uT2JqZWN0KQogICAgICAg
ICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoSW52YWxp
ZFBhcmFtZXRlciwgIkFuIGludGVyYWN0aW9uIGluIHRoZSAnaW50ZXJhY3Rpb25zJyBwYXJhbWV0
ZXIgd2FzIGludmFsaWQuIik7CiAKLSAgICAgICAgU3RyaW5nIGludGVyYWN0aW9uVHlwZVN0cmlu
ZzsKLSAgICAgICAgaWYgKCFpbnRlcmFjdGlvbk9iamVjdC0+Z2V0U3RyaW5nKCJ0eXBlIl9zLCBp
bnRlcmFjdGlvblR5cGVTdHJpbmcpKQorICAgICAgICBhdXRvIGludGVyYWN0aW9uVHlwZVN0cmlu
ZyA9IGludGVyYWN0aW9uT2JqZWN0LT5nZXRTdHJpbmcoInR5cGUiX3MpOworICAgICAgICBpZiAo
IWludGVyYWN0aW9uVHlwZVN0cmluZykKICAgICAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVE
RUZJTkVEX0VSUk9SX0FORF9ERVRBSUxTKEludmFsaWRQYXJhbWV0ZXIsICJBbiBpbnRlcmFjdGlv
biBpbiB0aGUgJ2ludGVyYWN0aW9ucycgcGFyYW1ldGVyIGlzIG1pc3NpbmcgdGhlICd0eXBlJyBr
ZXkuIik7CiAgICAgICAgIGF1dG8gaW50ZXJhY3Rpb25UeXBlID0gSW5zcGVjdG9yOjpQcm90b2Nv
bDo6QXV0b21hdGlvbkhlbHBlcnM6OnBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6
OlByb3RvY29sOjpBdXRvbWF0aW9uOjpLZXlib2FyZEludGVyYWN0aW9uVHlwZT4oaW50ZXJhY3Rp
b25UeXBlU3RyaW5nKTsKICAgICAgICAgaWYgKCFpbnRlcmFjdGlvblR5cGUpCiAgICAgICAgICAg
ICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhJbnZhbGlkUGFy
YW1ldGVyLCAiQW4gaW50ZXJhY3Rpb24gaW4gdGhlICdpbnRlcmFjdGlvbnMnIHBhcmFtZXRlciBo
YXMgYW4gaW52YWxpZCAndHlwZScga2V5LiIpOwogCi0gICAgICAgIFN0cmluZyB2aXJ0dWFsS2V5
U3RyaW5nOwotICAgICAgICBib29sIGZvdW5kVmlydHVhbEtleSA9IGludGVyYWN0aW9uT2JqZWN0
LT5nZXRTdHJpbmcoImtleSJfcywgdmlydHVhbEtleVN0cmluZyk7Ci0gICAgICAgIGlmIChmb3Vu
ZFZpcnR1YWxLZXkpIHsKKyAgICAgICAgYXV0byB2aXJ0dWFsS2V5U3RyaW5nID0gaW50ZXJhY3Rp
b25PYmplY3QtPmdldFN0cmluZygia2V5Il9zKTsKKyAgICAgICAgaWYgKCEhdmlydHVhbEtleVN0
cmluZykgewogICAgICAgICAgICAgT3B0aW9uYWw8VmlydHVhbEtleT4gdmlydHVhbEtleSA9IElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb25IZWxwZXJzOjpwYXJzZUVudW1WYWx1ZUZyb21T
dHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6VmlydHVhbEtleT4odmlydHVh
bEtleVN0cmluZyk7CiAgICAgICAgICAgICBpZiAoIXZpcnR1YWxLZXkpCiAgICAgICAgICAgICAg
ICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoSW52YWxpZFBh
cmFtZXRlciwgIkFuIGludGVyYWN0aW9uIGluIHRoZSAnaW50ZXJhY3Rpb25zJyBwYXJhbWV0ZXIg
aGFzIGFuIGludmFsaWQgJ2tleScgdmFsdWUuIik7CkBAIC0xNzQ4LDkgKzE3NDgsOCBAQCB2b2lk
IFdlYkF1dG9tYXRpb25TZXNzaW9uOjpwZXJmb3JtS2V5Ym9hcmRJbnRlcmFjdGlvbnMoY29uc3Qg
U3RyaW5nJiBoYW5kbGUsIGNvbgogICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KIAotICAgICAg
ICBTdHJpbmcga2V5U2VxdWVuY2U7Ci0gICAgICAgIGJvb2wgZm91bmRLZXlTZXF1ZW5jZSA9IGlu
dGVyYWN0aW9uT2JqZWN0LT5nZXRTdHJpbmcoInRleHQiX3MsIGtleVNlcXVlbmNlKTsKLSAgICAg
ICAgaWYgKGZvdW5kS2V5U2VxdWVuY2UpIHsKKyAgICAgICAgYXV0byBrZXlTZXF1ZW5jZSA9IGlu
dGVyYWN0aW9uT2JqZWN0LT5nZXRTdHJpbmcoInRleHQiX3MpOworICAgICAgICBpZiAoISFrZXlT
ZXF1ZW5jZSkgewogICAgICAgICAgICAgc3dpdGNoIChpbnRlcmFjdGlvblR5cGUudmFsdWUoKSkg
ewogICAgICAgICAgICAgY2FzZSBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpLZXli
b2FyZEludGVyYWN0aW9uVHlwZTo6S2V5UHJlc3M6CiAgICAgICAgICAgICBjYXNlIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OktleWJvYXJkSW50ZXJhY3Rpb25UeXBlOjpLZXlSZWxl
YXNlOgpAQCAtMTc2NSw3ICsxNzY0LDcgQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6cGVy
Zm9ybUtleWJvYXJkSW50ZXJhY3Rpb25zKGNvbnN0IFN0cmluZyYgaGFuZGxlLCBjb24KICAgICAg
ICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIGlmICghZm91bmRWaXJ0dWFsS2V5ICYmICFm
b3VuZEtleVNlcXVlbmNlKQorICAgICAgICBpZiAoIXZpcnR1YWxLZXlTdHJpbmcgJiYgIWtleVNl
cXVlbmNlKQogICAgICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5E
X0RFVEFJTFMoTWlzc2luZ1BhcmFtZXRlciwgIkFuIGludGVyYWN0aW9uIGluIHRoZSAnaW50ZXJh
Y3Rpb25zJyBwYXJhbWV0ZXIgaXMgbWlzc2luZyBib3RoICdrZXknIGFuZCAndGV4dCcuIE9uZSBt
dXN0IGJlIHByb3ZpZGVkLiIpOwogICAgIH0KIApAQCAtMTgwOCw3ICsxODA3LDcgQEAgc3RhdGlj
IFNpbXVsYXRlZElucHV0U291cmNlVHlwZSBzaW11bGF0ZWRJbnB1dFNvdXJjZVR5cGVGcm9tUHJv
dG9jb2xTb3VyY2VUeXBlKEkKIH0KICNlbmRpZiAvLyBFTkFCTEUoV0VCRFJJVkVSX0FDVElPTlNf
QVBJKQogCi12b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpwZXJmb3JtSW50ZXJhY3Rpb25TZXF1
ZW5jZShjb25zdCBTdHJpbmcmIGhhbmRsZSwgY29uc3QgU3RyaW5nKiBvcHRpb25hbEZyYW1lSGFu
ZGxlLCBjb25zdCBKU09OOjpBcnJheSYgaW5wdXRTb3VyY2VzLCBjb25zdCBKU09OOjpBcnJheSYg
c3RlcHMsIFJlZjxXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6UGVyZm9ybUludGVyYWN0aW9uU2VxdWVu
Y2VDYWxsYmFjaz4mJiBjYWxsYmFjaykKK3ZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OnBlcmZv
cm1JbnRlcmFjdGlvblNlcXVlbmNlKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRp
b246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYgaGFuZGxlLCBjb25zdCBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpBdXRvbWF0aW9uOjpGcmFtZUhhbmRsZSYgZnJhbWVIYW5kbGUsIFJlZjxKU09OOjpBcnJh
eT4mJiBpbnB1dFNvdXJjZXMsIFJlZjxKU09OOjpBcnJheT4mJiBzdGVwcywgUmVmPFdlYkF1dG9t
YXRpb25TZXNzaW9uOjpQZXJmb3JtSW50ZXJhY3Rpb25TZXF1ZW5jZUNhbGxiYWNrPiYmIGNhbGxi
YWNrKQogewogICAgIC8vIFRoaXMgY29tbWFuZCBpbXBsZW1lbnRzIFdlYktpdCBzdXBwb3J0IGZv
ciDCpzE3LjUgUGVyZm9ybSBBY3Rpb25zLgogCkBAIC0xODIwLDcgKzE4MTksNyBAQCB2b2lkIFdl
YkF1dG9tYXRpb25TZXNzaW9uOjpwZXJmb3JtSW50ZXJhY3Rpb25TZXF1ZW5jZShjb25zdCBTdHJp
bmcmIGhhbmRsZSwgY29ucwogICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJP
UihXaW5kb3dOb3RGb3VuZCk7CiAKICAgICBib29sIGZyYW1lTm90Rm91bmQgPSBmYWxzZTsKLSAg
ICBhdXRvIGZyYW1lSUQgPSB3ZWJGcmFtZUlERm9ySGFuZGxlKG9wdGlvbmFsRnJhbWVIYW5kbGUg
PyAqb3B0aW9uYWxGcmFtZUhhbmRsZSA6IGVtcHR5U3RyaW5nKCksIGZyYW1lTm90Rm91bmQpOwor
ICAgIGF1dG8gZnJhbWVJRCA9IHdlYkZyYW1lSURGb3JIYW5kbGUoZnJhbWVIYW5kbGUsIGZyYW1l
Tm90Rm91bmQpOwogICAgIGlmIChmcmFtZU5vdEZvdW5kKQogICAgICAgICBBU1lOQ19GQUlMX1dJ
VEhfUFJFREVGSU5FRF9FUlJPUihGcmFtZU5vdEZvdW5kKTsKIApAQCAtMTgyOSwyMCArMTgyOCwy
MCBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpwZXJmb3JtSW50ZXJhY3Rpb25TZXF1ZW5j
ZShjb25zdCBTdHJpbmcmIGhhbmRsZSwgY29ucwogCiAgICAgLy8gUGFyc2UgYW5kIHZhbGlkYXRl
IEF1dG9tYXRpb24gcHJvdG9jb2wgYXJndW1lbnRzLiBCeSB0aGlzIHBvaW50LCB0aGUgZHJpdmVy
IGhhcwogICAgIC8vIGFscmVhZHkgcGVyZm9ybWVkIHRoZSBzdGVwcyBpbiDCpzE3LjMgUHJvY2Vz
c2luZyBBY3Rpb25zIFJlcXVlc3RzLgotICAgIGlmICghaW5wdXRTb3VyY2VzLmxlbmd0aCgpKQor
ICAgIGlmICghaW5wdXRTb3VyY2VzLT5sZW5ndGgoKSkKICAgICAgICAgQVNZTkNfRkFJTF9XSVRI
X1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoSW52YWxpZFBhcmFtZXRlciwgIlRoZSBwYXJh
bWV0ZXIgJ2lucHV0U291cmNlcycgd2FzIG5vdCBmb3VuZCBvciBlbXB0eS4iKTsKIAotICAgIGZv
ciAoY29uc3QgYXV0byYgaW5wdXRTb3VyY2UgOiBpbnB1dFNvdXJjZXMpIHsKLSAgICAgICAgUmVm
UHRyPEpTT046Ok9iamVjdD4gaW5wdXRTb3VyY2VPYmplY3Q7Ci0gICAgICAgIGlmICghaW5wdXRT
b3VyY2UtPmFzT2JqZWN0KGlucHV0U291cmNlT2JqZWN0KSkKKyAgICBmb3IgKGNvbnN0IGF1dG8m
IGlucHV0U291cmNlVmFsdWUgOiBpbnB1dFNvdXJjZXMuZ2V0KCkpIHsKKyAgICAgICAgYXV0byBp
bnB1dFNvdXJjZU9iamVjdCA9IGlucHV0U291cmNlVmFsdWUtPmFzT2JqZWN0KCk7CisgICAgICAg
IGlmICghaW5wdXRTb3VyY2VPYmplY3QpCiAgICAgICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJF
REVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhJbnZhbGlkUGFyYW1ldGVyLCAiQW4gaW5wdXQgc291
cmNlIGluIHRoZSAnaW5wdXRTb3VyY2VzJyBwYXJhbWV0ZXIgd2FzIGludmFsaWQuIik7Ci0gICAg
ICAgIAotICAgICAgICBTdHJpbmcgc291cmNlSWQ7Ci0gICAgICAgIGlmICghaW5wdXRTb3VyY2VP
YmplY3QtPmdldFN0cmluZygic291cmNlSWQiX3MsIHNvdXJjZUlkKSkKKworICAgICAgICBhdXRv
IHNvdXJjZUlkID0gaW5wdXRTb3VyY2VPYmplY3QtPmdldFN0cmluZygic291cmNlSWQiX3MpOwor
ICAgICAgICBpZiAoIXNvdXJjZUlkKQogICAgICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURF
RklORURfRVJST1JfQU5EX0RFVEFJTFMoSW52YWxpZFBhcmFtZXRlciwgIkFuIGlucHV0IHNvdXJj
ZSBpbiB0aGUgJ2lucHV0U291cmNlcycgcGFyYW1ldGVyIGlzIG1pc3NpbmcgYSAnc291cmNlSWQn
LiIpOwogCi0gICAgICAgIFN0cmluZyBzb3VyY2VUeXBlOwotICAgICAgICBpZiAoIWlucHV0U291
cmNlT2JqZWN0LT5nZXRTdHJpbmcoInNvdXJjZVR5cGUiX3MsIHNvdXJjZVR5cGUpKQorICAgICAg
ICBhdXRvIHNvdXJjZVR5cGUgPSBpbnB1dFNvdXJjZU9iamVjdC0+Z2V0U3RyaW5nKCJzb3VyY2VU
eXBlIl9zKTsKKyAgICAgICAgaWYgKCFzb3VyY2VUeXBlKQogICAgICAgICAgICAgQVNZTkNfRkFJ
TF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoSW52YWxpZFBhcmFtZXRlciwgIkFu
IGlucHV0IHNvdXJjZSBpbiB0aGUgJ2lucHV0U291cmNlcycgcGFyYW1ldGVyIGlzIG1pc3Npbmcg
YSAnc291cmNlVHlwZScuIik7CiAKICAgICAgICAgYXV0byBwYXJzZWRJbnB1dFNvdXJjZVR5cGUg
PSBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uSGVscGVyczo6cGFyc2VFbnVtVmFsdWVG
cm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OklucHV0U291cmNlVHlw
ZT4oc291cmNlVHlwZSk7CkBAIC0xODgxLDI4ICsxODgwLDI4IEBAIHZvaWQgV2ViQXV0b21hdGlv
blNlc3Npb246OnBlcmZvcm1JbnRlcmFjdGlvblNlcXVlbmNlKGNvbnN0IFN0cmluZyYgaGFuZGxl
LCBjb25zCiAKICAgICBWZWN0b3I8U2ltdWxhdGVkSW5wdXRLZXlGcmFtZT4ga2V5RnJhbWVzOwog
Ci0gICAgaWYgKCFzdGVwcy5sZW5ndGgoKSkKKyAgICBpZiAoIXN0ZXBzLT5sZW5ndGgoKSkKICAg
ICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoSW52YWxp
ZFBhcmFtZXRlciwgIlRoZSBwYXJhbWV0ZXIgJ3N0ZXBzJyB3YXMgbm90IGZvdW5kIG9yIGVtcHR5
LiIpOwogCi0gICAgZm9yIChjb25zdCBhdXRvJiBzdGVwIDogc3RlcHMpIHsKLSAgICAgICAgUmVm
UHRyPEpTT046Ok9iamVjdD4gc3RlcE9iamVjdDsKLSAgICAgICAgaWYgKCFzdGVwLT5hc09iamVj
dChzdGVwT2JqZWN0KSkKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHN0ZXBWYWx1ZSA6IHN0ZXBzLmdl
dCgpKSB7CisgICAgICAgIGF1dG8gc3RlcE9iamVjdCA9IHN0ZXBWYWx1ZS0+YXNPYmplY3QoKTsK
KyAgICAgICAgaWYgKCFzdGVwT2JqZWN0KQogICAgICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BS
RURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoSW52YWxpZFBhcmFtZXRlciwgIkEgc3RlcCBpbiB0
aGUgJ3N0ZXBzJyBwYXJhbWV0ZXIgd2FzIG5vdCBhbiBvYmplY3QuIik7CiAKLSAgICAgICAgUmVm
UHRyPEpTT046OkFycmF5PiBzdGVwU3RhdGVzOwotICAgICAgICBpZiAoIXN0ZXBPYmplY3QtPmdl
dEFycmF5KCJzdGF0ZXMiX3MsIHN0ZXBTdGF0ZXMpKQorICAgICAgICBhdXRvIHN0ZXBTdGF0ZXMg
PSBzdGVwT2JqZWN0LT5nZXRBcnJheSgic3RhdGVzIl9zKTsKKyAgICAgICAgaWYgKCFzdGVwU3Rh
dGVzKQogICAgICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RF
VEFJTFMoSW52YWxpZFBhcmFtZXRlciwgIkEgc3RlcCBpcyBtaXNzaW5nIHRoZSAnc3RhdGVzJyBw
cm9wZXJ0eS4iKTsKIAogICAgICAgICBWZWN0b3I8U2ltdWxhdGVkSW5wdXRLZXlGcmFtZTo6U3Rh
dGVFbnRyeT4gZW50cmllczsKICAgICAgICAgZW50cmllcy5yZXNlcnZlQ2FwYWNpdHkoc3RlcFN0
YXRlcy0+bGVuZ3RoKCkpOwogCi0gICAgICAgIGZvciAoY29uc3QgYXV0byYgc3RhdGUgOiAqc3Rl
cFN0YXRlcykgewotICAgICAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gc3RhdGVPYmplY3Q7
Ci0gICAgICAgICAgICBpZiAoIXN0YXRlLT5hc09iamVjdChzdGF0ZU9iamVjdCkpCisgICAgICAg
IGZvciAoY29uc3QgYXV0byYgc3RhdGVWYWx1ZSA6ICpzdGVwU3RhdGVzKSB7CisgICAgICAgICAg
ICBhdXRvIHN0YXRlT2JqZWN0ID0gc3RhdGVWYWx1ZS0+YXNPYmplY3QoKTsKKyAgICAgICAgICAg
IGlmICghc3RhdGVPYmplY3QpCiAgICAgICAgICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURF
RklORURfRVJST1JfQU5EX0RFVEFJTFMoSW52YWxpZFBhcmFtZXRlciwgIkVuY291bnRlcmVkIGEg
bm9uLW9iamVjdCBzdGVwIHN0YXRlLiIpOwogCi0gICAgICAgICAgICBTdHJpbmcgc291cmNlSWQ7
Ci0gICAgICAgICAgICBpZiAoIXN0YXRlT2JqZWN0LT5nZXRTdHJpbmcoInNvdXJjZUlkIl9zLCBz
b3VyY2VJZCkpCisgICAgICAgICAgICBhdXRvIHNvdXJjZUlkID0gc3RhdGVPYmplY3QtPmdldFN0
cmluZygic291cmNlSWQiX3MpOworICAgICAgICAgICAgaWYgKCFzb3VyY2VJZCkKICAgICAgICAg
ICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhJbnZh
bGlkUGFyYW1ldGVyLCAiU3RlcCBzdGF0ZSBsYWNrcyByZXF1aXJlZCAnc291cmNlSWQnIHByb3Bl
cnR5LiIpOwogCiAgICAgICAgICAgICBpZiAoIXNvdXJjZUlkVG9JbnB1dFNvdXJjZU1hcC5jb250
YWlucyhzb3VyY2VJZCkpCkBAIC0xOTExLDE3ICsxOTEwLDE2IEBAIHZvaWQgV2ViQXV0b21hdGlv
blNlc3Npb246OnBlcmZvcm1JbnRlcmFjdGlvblNlcXVlbmNlKGNvbnN0IFN0cmluZyYgaGFuZGxl
LCBjb25zCiAgICAgICAgICAgICBTaW11bGF0ZWRJbnB1dFNvdXJjZSYgaW5wdXRTb3VyY2UgPSAq
c291cmNlSWRUb0lucHV0U291cmNlTWFwLmdldChzb3VyY2VJZCk7CiAgICAgICAgICAgICBTaW11
bGF0ZWRJbnB1dFNvdXJjZVN0YXRlIHNvdXJjZVN0YXRlIHsgfTsKIAotICAgICAgICAgICAgU3Ry
aW5nIHByZXNzZWRDaGFyS2V5U3RyaW5nOwotICAgICAgICAgICAgaWYgKHN0YXRlT2JqZWN0LT5n
ZXRTdHJpbmcoInByZXNzZWRDaGFyS2V5Il9zLCBwcmVzc2VkQ2hhcktleVN0cmluZykpCisgICAg
ICAgICAgICBhdXRvIHByZXNzZWRDaGFyS2V5U3RyaW5nID0gc3RhdGVPYmplY3QtPmdldFN0cmlu
ZygicHJlc3NlZENoYXJLZXkiX3MpOworICAgICAgICAgICAgaWYgKCEhcHJlc3NlZENoYXJLZXlT
dHJpbmcpCiAgICAgICAgICAgICAgICAgc291cmNlU3RhdGUucHJlc3NlZENoYXJLZXkgPSBwcmVz
c2VkQ2hhcktleVN0cmluZy5jaGFyYWN0ZXJBdCgwKTsKIAotICAgICAgICAgICAgUmVmUHRyPEpT
T046OkFycmF5PiBwcmVzc2VkVmlydHVhbEtleXNBcnJheTsKLSAgICAgICAgICAgIGlmIChzdGF0
ZU9iamVjdC0+Z2V0QXJyYXkoInByZXNzZWRWaXJ0dWFsS2V5cyJfcywgcHJlc3NlZFZpcnR1YWxL
ZXlzQXJyYXkpKSB7CisgICAgICAgICAgICBpZiAoYXV0byBwcmVzc2VkVmlydHVhbEtleXNBcnJh
eSA9IHN0YXRlT2JqZWN0LT5nZXRBcnJheSgicHJlc3NlZFZpcnR1YWxLZXlzIl9zKSkgewogICAg
ICAgICAgICAgICAgIFZpcnR1YWxLZXlTZXQgcHJlc3NlZFZpcnR1YWxLZXlzIHsgfTsKIAogICAg
ICAgICAgICAgICAgIGZvciAoYXV0byBpdCA9IHByZXNzZWRWaXJ0dWFsS2V5c0FycmF5LT5iZWdp
bigpOyBpdCAhPSBwcmVzc2VkVmlydHVhbEtleXNBcnJheS0+ZW5kKCk7ICsraXQpIHsKLSAgICAg
ICAgICAgICAgICAgICAgU3RyaW5nIHByZXNzZWRWaXJ0dWFsS2V5U3RyaW5nOwotICAgICAgICAg
ICAgICAgICAgICBpZiAoISgqaXQpLT5hc1N0cmluZyhwcmVzc2VkVmlydHVhbEtleVN0cmluZykp
CisgICAgICAgICAgICAgICAgICAgIGF1dG8gcHJlc3NlZFZpcnR1YWxLZXlTdHJpbmcgPSAoKml0
KS0+YXNTdHJpbmcoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFwcmVzc2VkVmlydHVhbEtl
eVN0cmluZykKICAgICAgICAgICAgICAgICAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJ
TkVEX0VSUk9SX0FORF9ERVRBSUxTKEludmFsaWRQYXJhbWV0ZXIsICJFbmNvdW50ZXJlZCBhIG5v
bi1zdHJpbmcgdmlydHVhbCBrZXkgdmFsdWUuIik7CiAKICAgICAgICAgICAgICAgICAgICAgT3B0
aW9uYWw8VmlydHVhbEtleT4gcGFyc2VkVmlydHVhbEtleSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkF1dG9tYXRpb25IZWxwZXJzOjpwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6QXV0b21hdGlvbjo6VmlydHVhbEtleT4ocHJlc3NlZFZpcnR1YWxLZXlTdHJpbmcp
OwpAQCAtMTkzNCwzMyArMTkzMiwzMiBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpwZXJm
b3JtSW50ZXJhY3Rpb25TZXF1ZW5jZShjb25zdCBTdHJpbmcmIGhhbmRsZSwgY29ucwogICAgICAg
ICAgICAgICAgIHNvdXJjZVN0YXRlLnByZXNzZWRWaXJ0dWFsS2V5cyA9IHByZXNzZWRWaXJ0dWFs
S2V5czsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgU3RyaW5nIHByZXNzZWRCdXR0b25T
dHJpbmc7Ci0gICAgICAgICAgICBpZiAoc3RhdGVPYmplY3QtPmdldFN0cmluZygicHJlc3NlZEJ1
dHRvbiJfcywgcHJlc3NlZEJ1dHRvblN0cmluZykpIHsKKyAgICAgICAgICAgIGF1dG8gcHJlc3Nl
ZEJ1dHRvblN0cmluZyA9IHN0YXRlT2JqZWN0LT5nZXRTdHJpbmcoInByZXNzZWRCdXR0b24iX3Mp
OworICAgICAgICAgICAgaWYgKCEhcHJlc3NlZEJ1dHRvblN0cmluZykgewogICAgICAgICAgICAg
ICAgIGF1dG8gcHJvdG9jb2xCdXR0b24gPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9u
SGVscGVyczo6cGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1
dG9tYXRpb246Ok1vdXNlQnV0dG9uPihwcmVzc2VkQnV0dG9uU3RyaW5nKTsKICAgICAgICAgICAg
ICAgICBzb3VyY2VTdGF0ZS5wcmVzc2VkTW91c2VCdXR0b24gPSBwcm90b2NvbEJ1dHRvbi52YWx1
ZU9yKE1vdXNlQnV0dG9uOjpOb25lKTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgU3Ry
aW5nIG9yaWdpblN0cmluZzsKLSAgICAgICAgICAgIGlmIChzdGF0ZU9iamVjdC0+Z2V0U3RyaW5n
KCJvcmlnaW4iX3MsIG9yaWdpblN0cmluZykpCisgICAgICAgICAgICBhdXRvIG9yaWdpblN0cmlu
ZyA9IHN0YXRlT2JqZWN0LT5nZXRTdHJpbmcoIm9yaWdpbiJfcyk7CisgICAgICAgICAgICBpZiAo
ISFvcmlnaW5TdHJpbmcpCiAgICAgICAgICAgICAgICAgc291cmNlU3RhdGUub3JpZ2luID0gSW5z
cGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbkhlbHBlcnM6OnBhcnNlRW51bVZhbHVlRnJvbVN0
cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpNb3VzZU1vdmVPcmlnaW4+KG9y
aWdpblN0cmluZyk7CiAKICAgICAgICAgICAgIGlmIChzb3VyY2VTdGF0ZS5vcmlnaW4gJiYgc291
cmNlU3RhdGUub3JpZ2luLnZhbHVlKCkgPT0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlv
bjo6TW91c2VNb3ZlT3JpZ2luOjpFbGVtZW50KSB7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIG5v
ZGVIYW5kbGVTdHJpbmc7Ci0gICAgICAgICAgICAgICAgaWYgKCFzdGF0ZU9iamVjdC0+Z2V0U3Ry
aW5nKCJub2RlSGFuZGxlIl9zLCBub2RlSGFuZGxlU3RyaW5nKSkKKyAgICAgICAgICAgICAgICBh
dXRvIG5vZGVIYW5kbGVTdHJpbmcgPSBzdGF0ZU9iamVjdC0+Z2V0U3RyaW5nKCJub2RlSGFuZGxl
Il9zKTsKKyAgICAgICAgICAgICAgICBpZiAoIW5vZGVIYW5kbGVTdHJpbmcpCiAgICAgICAgICAg
ICAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxTKElu
dmFsaWRQYXJhbWV0ZXIsICJOb2RlIGhhbmRsZSBub3QgcHJvdmlkZWQgZm9yICdFbGVtZW50JyBv
cmlnaW4iKTsKICAgICAgICAgICAgICAgICBzb3VyY2VTdGF0ZS5ub2RlSGFuZGxlID0gbm9kZUhh
bmRsZVN0cmluZzsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgUmVmUHRyPEpTT046Ok9i
amVjdD4gbG9jYXRpb25PYmplY3Q7Ci0gICAgICAgICAgICBpZiAoc3RhdGVPYmplY3QtPmdldE9i
amVjdCgibG9jYXRpb24iX3MsIGxvY2F0aW9uT2JqZWN0KSkgewotICAgICAgICAgICAgICAgIGlu
dCB4ID0gMCwgeSA9IDA7Ci0gICAgICAgICAgICAgICAgaWYgKGxvY2F0aW9uT2JqZWN0LT5nZXRJ
bnRlZ2VyKCJ4Il9zLCB4KSAmJiBsb2NhdGlvbk9iamVjdC0+Z2V0SW50ZWdlcigieSJfcywgeSkp
Ci0gICAgICAgICAgICAgICAgICAgIHNvdXJjZVN0YXRlLmxvY2F0aW9uID0gV2ViQ29yZTo6SW50
UG9pbnQoeCwgeSk7CisgICAgICAgICAgICBpZiAoYXV0byBsb2NhdGlvbk9iamVjdCA9IHN0YXRl
T2JqZWN0LT5nZXRPYmplY3QoImxvY2F0aW9uIl9zKSkgeworICAgICAgICAgICAgICAgIGF1dG8g
eCA9IGxvY2F0aW9uT2JqZWN0LT5nZXRJbnRlZ2VyKCJ4Il9zKTsKKyAgICAgICAgICAgICAgICBh
dXRvIHkgPSBsb2NhdGlvbk9iamVjdC0+Z2V0SW50ZWdlcigieSJfcyk7CisgICAgICAgICAgICAg
ICAgaWYgKHggJiYgeSkKKyAgICAgICAgICAgICAgICAgICAgc291cmNlU3RhdGUubG9jYXRpb24g
PSBXZWJDb3JlOjpJbnRQb2ludCgqeCwgKnkpOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAg
ICBpbnQgcGFyc2VkRHVyYXRpb247Ci0gICAgICAgICAgICBpZiAoc3RhdGVPYmplY3QtPmdldElu
dGVnZXIoImR1cmF0aW9uIl9zLCBwYXJzZWREdXJhdGlvbikpCi0gICAgICAgICAgICAgICAgc291
cmNlU3RhdGUuZHVyYXRpb24gPSBTZWNvbmRzOjpmcm9tTWlsbGlzZWNvbmRzKHBhcnNlZER1cmF0
aW9uKTsKKyAgICAgICAgICAgIGlmIChhdXRvIGR1cmF0aW9uID0gc3RhdGVPYmplY3QtPmdldElu
dGVnZXIoImR1cmF0aW9uIl9zKSkKKyAgICAgICAgICAgICAgICBzb3VyY2VTdGF0ZS5kdXJhdGlv
biA9IFNlY29uZHM6OmZyb21NaWxsaXNlY29uZHMoKmR1cmF0aW9uKTsKIAogICAgICAgICAgICAg
ZW50cmllcy51bmNoZWNrZWRBcHBlbmQoc3RkOjpwYWlyPFNpbXVsYXRlZElucHV0U291cmNlJiwg
U2ltdWxhdGVkSW5wdXRTb3VyY2VTdGF0ZT4geyBpbnB1dFNvdXJjZSwgc291cmNlU3RhdGUgfSk7
CiAgICAgICAgIH0KQEAgLTE5ODQsNyArMTk4MSw3IEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Np
b246OnBlcmZvcm1JbnRlcmFjdGlvblNlcXVlbmNlKGNvbnN0IFN0cmluZyYgaGFuZGxlLCBjb25z
CiAjZW5kaWYgLy8gRU5BQkxFKFdFQkRSSVZFUl9BQ1RJT05TX0FQSSkKIH0KIAotdm9pZCBXZWJB
dXRvbWF0aW9uU2Vzc2lvbjo6Y2FuY2VsSW50ZXJhY3Rpb25TZXF1ZW5jZShjb25zdCBTdHJpbmcm
IGhhbmRsZSwgY29uc3QgU3RyaW5nKiBvcHRpb25hbEZyYW1lSGFuZGxlLCBSZWY8Q2FuY2VsSW50
ZXJhY3Rpb25TZXF1ZW5jZUNhbGxiYWNrPiYmIGNhbGxiYWNrKQordm9pZCBXZWJBdXRvbWF0aW9u
U2Vzc2lvbjo6Y2FuY2VsSW50ZXJhY3Rpb25TZXF1ZW5jZShjb25zdCBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRIYW5kbGUmIGhhbmRsZSwgY29uc3QgSW5z
cGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6RnJhbWVIYW5kbGUmIGZyYW1lSGFuZGxlLCBS
ZWY8Q2FuY2VsSW50ZXJhY3Rpb25TZXF1ZW5jZUNhbGxiYWNrPiYmIGNhbGxiYWNrKQogewogICAg
IC8vIFRoaXMgY29tbWFuZCBpbXBsZW1lbnRzIFdlYktpdCBzdXBwb3J0IGZvciDCpzE3LjYgUmVs
ZWFzZSBBY3Rpb25zLgogCkBAIC0xOTk2LDcgKzE5OTMsNyBAQCB2b2lkIFdlYkF1dG9tYXRpb25T
ZXNzaW9uOjpjYW5jZWxJbnRlcmFjdGlvblNlcXVlbmNlKGNvbnN0IFN0cmluZyYgaGFuZGxlLCBj
b25zdAogICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUihXaW5kb3dOb3RG
b3VuZCk7CiAKICAgICBib29sIGZyYW1lTm90Rm91bmQgPSBmYWxzZTsKLSAgICBhdXRvIGZyYW1l
SUQgPSB3ZWJGcmFtZUlERm9ySGFuZGxlKG9wdGlvbmFsRnJhbWVIYW5kbGUgPyAqb3B0aW9uYWxG
cmFtZUhhbmRsZSA6IGVtcHR5U3RyaW5nKCksIGZyYW1lTm90Rm91bmQpOworICAgIGF1dG8gZnJh
bWVJRCA9IHdlYkZyYW1lSURGb3JIYW5kbGUoZnJhbWVIYW5kbGUsIGZyYW1lTm90Rm91bmQpOwog
ICAgIGlmIChmcmFtZU5vdEZvdW5kKQogICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5F
RF9FUlJPUihGcmFtZU5vdEZvdW5kKTsKIApAQCAtMjAxMywxOSArMjAxMCwxOCBAQCB2b2lkIFdl
YkF1dG9tYXRpb25TZXNzaW9uOjpjYW5jZWxJbnRlcmFjdGlvblNlcXVlbmNlKGNvbnN0IFN0cmlu
ZyYgaGFuZGxlLCBjb25zdAogI2VuZGlmIC8vIEVOQUJMRShXRUJEUklWRVJfQUNUSU9OU19BUEkp
CiB9CiAKLXZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OnRha2VTY3JlZW5zaG90KGNvbnN0IFN0
cmluZyYgaGFuZGxlLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsRnJhbWVIYW5kbGUsIGNvbnN0IFN0
cmluZyogb3B0aW9uYWxOb2RlSGFuZGxlLCBjb25zdCBib29sKiBvcHRpb25hbFNjcm9sbEludG9W
aWV3SWZOZWVkZWQsIGNvbnN0IGJvb2wqIG9wdGlvbmFsQ2xpcFRvVmlld3BvcnQsIFJlZjxUYWtl
U2NyZWVuc2hvdENhbGxiYWNrPiYmIGNhbGxiYWNrKQordm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lv
bjo6dGFrZVNjcmVlbnNob3QoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6
QnJvd3NpbmdDb250ZXh0SGFuZGxlJiBoYW5kbGUsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkF1dG9tYXRpb246OkZyYW1lSGFuZGxlJiBmcmFtZUhhbmRsZSwgY29uc3QgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6QXV0b21hdGlvbjo6Tm9kZUhhbmRsZSYgbm9kZUhhbmRsZSwgT3B0aW9uYWw8Ym9v
bD4mJiBvcHRpb25hbFNjcm9sbEludG9WaWV3SWZOZWVkZWQsIE9wdGlvbmFsPGJvb2w+JiYgb3B0
aW9uYWxDbGlwVG9WaWV3cG9ydCwgUmVmPFRha2VTY3JlZW5zaG90Q2FsbGJhY2s+JiYgY2FsbGJh
Y2spCiB7CiAgICAgV2ViUGFnZVByb3h5KiBwYWdlID0gd2ViUGFnZVByb3h5Rm9ySGFuZGxlKGhh
bmRsZSk7CiAgICAgaWYgKCFwYWdlKQogICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5F
RF9FUlJPUihXaW5kb3dOb3RGb3VuZCk7CiAKICAgICBib29sIGZyYW1lTm90Rm91bmQgPSBmYWxz
ZTsKLSAgICBhdXRvIGZyYW1lSUQgPSB3ZWJGcmFtZUlERm9ySGFuZGxlKG9wdGlvbmFsRnJhbWVI
YW5kbGUgPyAqb3B0aW9uYWxGcmFtZUhhbmRsZSA6IGVtcHR5U3RyaW5nKCksIGZyYW1lTm90Rm91
bmQpOworICAgIGF1dG8gZnJhbWVJRCA9IHdlYkZyYW1lSURGb3JIYW5kbGUoZnJhbWVIYW5kbGUs
IGZyYW1lTm90Rm91bmQpOwogICAgIGlmIChmcmFtZU5vdEZvdW5kKQogICAgICAgICBBU1lOQ19G
QUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUihGcmFtZU5vdEZvdW5kKTsKIAogICAgIGJvb2wgc2Ny
b2xsSW50b1ZpZXdJZk5lZWRlZCA9IG9wdGlvbmFsU2Nyb2xsSW50b1ZpZXdJZk5lZWRlZCA/ICpv
cHRpb25hbFNjcm9sbEludG9WaWV3SWZOZWVkZWQgOiBmYWxzZTsKLSAgICBTdHJpbmcgbm9kZUhh
bmRsZSA9IG9wdGlvbmFsTm9kZUhhbmRsZSA/ICpvcHRpb25hbE5vZGVIYW5kbGUgOiBlbXB0eVN0
cmluZygpOwogICAgIGJvb2wgY2xpcFRvVmlld3BvcnQgPSBvcHRpb25hbENsaXBUb1ZpZXdwb3J0
ID8gKm9wdGlvbmFsQ2xpcFRvVmlld3BvcnQgOiBmYWxzZTsKIAogI2lmIFBMQVRGT1JNKEdUSykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21h
dGlvblNlc3Npb24uaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0
b21hdGlvblNlc3Npb24uaAppbmRleCAzNjI3NjYwMzk1Y2I1ZjQ0ZTc3YTlmODYxZDQyZTk3MWRi
YTFiYmZjLi44ZDkwODkyYTRiMTM0MjY0YTRlODViZTRmNjVkZmEyMGZjMDEzYTJlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNz
aW9uLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0
aW9uU2Vzc2lvbi5oCkBAIC0xMzUsMTAgKzEzNSwxMCBAQCBwdWJsaWM6CiAKICNpZiBFTkFCTEUo
UkVNT1RFX0lOU1BFQ1RPUikKICAgICAvLyBJbnNwZWN0b3I6OlJlbW90ZUF1dG9tYXRpb25UYXJn
ZXQgQVBJCi0gICAgU3RyaW5nIG5hbWUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3Nlc3Np
b25JZGVudGlmaWVyOyB9Ci0gICAgdm9pZCBkaXNwYXRjaE1lc3NhZ2VGcm9tUmVtb3RlKGNvbnN0
IFN0cmluZyYgbWVzc2FnZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjb25uZWN0KEluc3BlY3Rvcjo6
RnJvbnRlbmRDaGFubmVsJiwgYm9vbCBpc0F1dG9tYXRpY0Nvbm5lY3Rpb24gPSBmYWxzZSwgYm9v
bCBpbW1lZGlhdGVseVBhdXNlID0gZmFsc2UpIG92ZXJyaWRlOwotICAgIHZvaWQgZGlzY29ubmVj
dChJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbCYpIG92ZXJyaWRlOworICAgIFN0cmluZyBuYW1l
KCkgY29uc3QgeyByZXR1cm4gbV9zZXNzaW9uSWRlbnRpZmllcjsgfQorICAgIHZvaWQgZGlzcGF0
Y2hNZXNzYWdlRnJvbVJlbW90ZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOworICAgIHZvaWQgY29u
bmVjdChJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbCYsIGJvb2wgaXNBdXRvbWF0aWNDb25uZWN0
aW9uID0gZmFsc2UsIGJvb2wgaW1tZWRpYXRlbHlQYXVzZSA9IGZhbHNlKTsKKyAgICB2b2lkIGRp
c2Nvbm5lY3QoSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWwmKTsKICNlbmRpZgogICAgIHZvaWQg
dGVybWluYXRlKCk7CiAKQEAgLTE0NiwxNSArMTQ2LDE1IEBAIHB1YmxpYzoKIAogICAgIC8vIFNp
bXVsYXRlZElucHV0RGlzcGF0Y2hlcjo6Q2xpZW50IEFQSQogI2lmIEVOQUJMRShXRUJEUklWRVJf
TU9VU0VfSU5URVJBQ1RJT05TKQotICAgIHZvaWQgc2ltdWxhdGVNb3VzZUludGVyYWN0aW9uKFdl
YlBhZ2VQcm94eSYsIE1vdXNlSW50ZXJhY3Rpb24sIE1vdXNlQnV0dG9uLCBjb25zdCBXZWJDb3Jl
OjpJbnRQb2ludCYgbG9jYXRpb25JblZpZXcsIEF1dG9tYXRpb25Db21wbGV0aW9uSGFuZGxlciYm
KSBmaW5hbDsKKyAgICB2b2lkIHNpbXVsYXRlTW91c2VJbnRlcmFjdGlvbihXZWJQYWdlUHJveHkm
LCBNb3VzZUludGVyYWN0aW9uLCBNb3VzZUJ1dHRvbiwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQm
IGxvY2F0aW9uSW5WaWV3LCBBdXRvbWF0aW9uQ29tcGxldGlvbkhhbmRsZXImJik7CiAjZW5kaWYK
ICNpZiBFTkFCTEUoV0VCRFJJVkVSX1RPVUNIX0lOVEVSQUNUSU9OUykKLSAgICB2b2lkIHNpbXVs
YXRlVG91Y2hJbnRlcmFjdGlvbihXZWJQYWdlUHJveHkmLCBUb3VjaEludGVyYWN0aW9uLCBjb25z
dCBXZWJDb3JlOjpJbnRQb2ludCYgbG9jYXRpb25JblZpZXcsIE9wdGlvbmFsPFNlY29uZHM+IGR1
cmF0aW9uLCBBdXRvbWF0aW9uQ29tcGxldGlvbkhhbmRsZXImJikgZmluYWw7CisgICAgdm9pZCBz
aW11bGF0ZVRvdWNoSW50ZXJhY3Rpb24oV2ViUGFnZVByb3h5JiwgVG91Y2hJbnRlcmFjdGlvbiwg
Y29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGxvY2F0aW9uSW5WaWV3LCBPcHRpb25hbDxTZWNvbmRz
PiBkdXJhdGlvbiwgQXV0b21hdGlvbkNvbXBsZXRpb25IYW5kbGVyJiYpOwogI2VuZGlmCiAjaWYg
RU5BQkxFKFdFQkRSSVZFUl9LRVlCT0FSRF9JTlRFUkFDVElPTlMpCi0gICAgdm9pZCBzaW11bGF0
ZUtleWJvYXJkSW50ZXJhY3Rpb24oV2ViUGFnZVByb3h5JiwgS2V5Ym9hcmRJbnRlcmFjdGlvbiwg
V1RGOjpWYXJpYW50PFZpcnR1YWxLZXksIENoYXJLZXk+JiYsIEF1dG9tYXRpb25Db21wbGV0aW9u
SGFuZGxlciYmKSBmaW5hbDsKKyAgICB2b2lkIHNpbXVsYXRlS2V5Ym9hcmRJbnRlcmFjdGlvbihX
ZWJQYWdlUHJveHkmLCBLZXlib2FyZEludGVyYWN0aW9uLCBXVEY6OlZhcmlhbnQ8VmlydHVhbEtl
eSwgQ2hhcktleT4mJiwgQXV0b21hdGlvbkNvbXBsZXRpb25IYW5kbGVyJiYpOwogI2VuZGlmCi0g
ICAgdm9pZCB2aWV3cG9ydEluVmlld0NlbnRlclBvaW50T2ZFbGVtZW50KFdlYlBhZ2VQcm94eSYs
IE9wdGlvbmFsPFdlYkNvcmU6OkZyYW1lSWRlbnRpZmllcj4sIGNvbnN0IFN0cmluZyYgbm9kZUhh
bmRsZSwgRnVuY3Rpb248dm9pZCAoT3B0aW9uYWw8V2ViQ29yZTo6SW50UG9pbnQ+LCBPcHRpb25h
bDxBdXRvbWF0aW9uQ29tbWFuZEVycm9yPik+JiYpIGZpbmFsOworICAgIHZvaWQgdmlld3BvcnRJ
blZpZXdDZW50ZXJQb2ludE9mRWxlbWVudChXZWJQYWdlUHJveHkmLCBPcHRpb25hbDxXZWJDb3Jl
OjpGcmFtZUlkZW50aWZpZXI+LCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9u
OjpOb2RlSGFuZGxlJiwgRnVuY3Rpb248dm9pZChPcHRpb25hbDxXZWJDb3JlOjpJbnRQb2ludD4s
IE9wdGlvbmFsPEF1dG9tYXRpb25Db21tYW5kRXJyb3I+KT4mJik7CiAKICNlbmRpZiAvLyBFTkFC
TEUoV0VCRFJJVkVSX0FDVElPTlNfQVBJKQogCkBAIC0xNjMsNDUgKzE2Myw0NSBAQCBwdWJsaWM6
CiAgICAgLy8gYW5kIHRoZSAtLXBsYXRmb3JtIGFyZ3VtZW50IHBhc3NlZCB0byB0aGUgcHJvdG9j
b2wgYmluZGluZ3MgZ2VuZXJhdG9yLgogCiAgICAgLy8gUGxhdGZvcm06IEdlbmVyaWMKLSAgICB2
b2lkIGdldEJyb3dzaW5nQ29udGV4dHMoUmVmPEdldEJyb3dzaW5nQ29udGV4dHNDYWxsYmFjaz4m
JikgZmluYWw7Ci0gICAgdm9pZCBnZXRCcm93c2luZ0NvbnRleHQoY29uc3QgU3RyaW5nJiwgUmVm
PEdldEJyb3dzaW5nQ29udGV4dENhbGxiYWNrPiYmKSBmaW5hbDsKLSAgICB2b2lkIGNyZWF0ZUJy
b3dzaW5nQ29udGV4dChjb25zdCBTdHJpbmcqIG9wdGlvbmFsUHJlc2VudGF0aW9uSGludCwgUmVm
PENyZWF0ZUJyb3dzaW5nQ29udGV4dENhbGxiYWNrPiYmKSBmaW5hbDsKLSAgICB2b2lkIGNsb3Nl
QnJvd3NpbmdDb250ZXh0KEluc3BlY3Rvcjo6RXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmKSBm
aW5hbDsKLSAgICB2b2lkIHN3aXRjaFRvQnJvd3NpbmdDb250ZXh0KGNvbnN0IFN0cmluZyYgYnJv
d3NpbmdDb250ZXh0SGFuZGxlLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsRnJhbWVIYW5kbGUsIFJl
ZjxTd2l0Y2hUb0Jyb3dzaW5nQ29udGV4dENhbGxiYWNrPiYmKSBmaW5hbDsKLSAgICB2b2lkIHNl
dFdpbmRvd0ZyYW1lT2ZCcm93c2luZ0NvbnRleHQoY29uc3QgU3RyaW5nJiBoYW5kbGUsIGNvbnN0
IEpTT046Ok9iamVjdCogb3JpZ2luLCBjb25zdCBKU09OOjpPYmplY3QqIHNpemUsIFJlZjxTZXRX
aW5kb3dGcmFtZU9mQnJvd3NpbmdDb250ZXh0Q2FsbGJhY2s+JiYpIGZpbmFsOwotICAgIHZvaWQg
bWF4aW1pemVXaW5kb3dPZkJyb3dzaW5nQ29udGV4dChjb25zdCBTdHJpbmcmIGhhbmRsZSwgUmVm
PE1heGltaXplV2luZG93T2ZCcm93c2luZ0NvbnRleHRDYWxsYmFjaz4mJikgZmluYWw7Ci0gICAg
dm9pZCBoaWRlV2luZG93T2ZCcm93c2luZ0NvbnRleHQoY29uc3QgU3RyaW5nJiBoYW5kbGUsIFJl
ZjxIaWRlV2luZG93T2ZCcm93c2luZ0NvbnRleHRDYWxsYmFjaz4mJikgZmluYWw7Ci0gICAgdm9p
ZCBuYXZpZ2F0ZUJyb3dzaW5nQ29udGV4dChjb25zdCBTdHJpbmcmIGhhbmRsZSwgY29uc3QgU3Ry
aW5nJiB1cmwsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxQYWdlTG9hZFN0cmF0ZWd5U3RyaW5nLCBj
b25zdCBkb3VibGUqIG9wdGlvbmFsUGFnZUxvYWRUaW1lb3V0LCBSZWY8TmF2aWdhdGVCcm93c2lu
Z0NvbnRleHRDYWxsYmFjaz4mJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBnb0JhY2tJbkJyb3dzaW5n
Q29udGV4dChjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsUGFnZUxvYWRTdHJh
dGVneVN0cmluZywgY29uc3QgZG91YmxlKiBvcHRpb25hbFBhZ2VMb2FkVGltZW91dCwgUmVmPEdv
QmFja0luQnJvd3NpbmdDb250ZXh0Q2FsbGJhY2s+JiYpIG92ZXJyaWRlOwotICAgIHZvaWQgZ29G
b3J3YXJkSW5Ccm93c2luZ0NvbnRleHQoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nKiBvcHRp
b25hbFBhZ2VMb2FkU3RyYXRlZ3lTdHJpbmcsIGNvbnN0IGRvdWJsZSogb3B0aW9uYWxQYWdlTG9h
ZFRpbWVvdXQsIFJlZjxHb0ZvcndhcmRJbkJyb3dzaW5nQ29udGV4dENhbGxiYWNrPiYmKSBvdmVy
cmlkZTsKLSAgICB2b2lkIHJlbG9hZEJyb3dzaW5nQ29udGV4dChjb25zdCBTdHJpbmcmLCBjb25z
dCBTdHJpbmcqIG9wdGlvbmFsUGFnZUxvYWRTdHJhdGVneVN0cmluZywgY29uc3QgZG91YmxlKiBv
cHRpb25hbFBhZ2VMb2FkVGltZW91dCwgUmVmPFJlbG9hZEJyb3dzaW5nQ29udGV4dENhbGxiYWNr
PiYmKSBvdmVycmlkZTsKLSAgICB2b2lkIHdhaXRGb3JOYXZpZ2F0aW9uVG9Db21wbGV0ZShjb25z
dCBTdHJpbmcmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSwgY29uc3QgU3RyaW5nKiBvcHRpb25hbEZy
YW1lSGFuZGxlLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsUGFnZUxvYWRTdHJhdGVneVN0cmluZywg
Y29uc3QgZG91YmxlKiBvcHRpb25hbFBhZ2VMb2FkVGltZW91dCwgUmVmPFdhaXRGb3JOYXZpZ2F0
aW9uVG9Db21wbGV0ZUNhbGxiYWNrPiYmKSBvdmVycmlkZTsKLSAgICB2b2lkIGV2YWx1YXRlSmF2
YVNjcmlwdEZ1bmN0aW9uKGNvbnN0IFN0cmluZyYgYnJvd3NpbmdDb250ZXh0SGFuZGxlLCBjb25z
dCBTdHJpbmcqIG9wdGlvbmFsRnJhbWVIYW5kbGUsIGNvbnN0IFN0cmluZyYgZnVuY3Rpb24sIGNv
bnN0IEpTT046OkFycmF5JiBhcmd1bWVudHMsIGNvbnN0IGJvb2wqIG9wdGlvbmFsRXhwZWN0c0lt
cGxpY2l0Q2FsbGJhY2tBcmd1bWVudCwgY29uc3QgZG91YmxlKiBvcHRpb25hbENhbGxiYWNrVGlt
ZW91dCwgUmVmPEluc3BlY3Rvcjo6QXV0b21hdGlvbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6
RXZhbHVhdGVKYXZhU2NyaXB0RnVuY3Rpb25DYWxsYmFjaz4mJikgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBwZXJmb3JtTW91c2VJbnRlcmFjdGlvbihjb25zdCBTdHJpbmcmIGhhbmRsZSwgY29uc3QgSlNP
Tjo6T2JqZWN0JiByZXF1ZXN0ZWRQb3NpdGlvbiwgY29uc3QgU3RyaW5nJiBtb3VzZUJ1dHRvbiwg
Y29uc3QgU3RyaW5nJiBtb3VzZUludGVyYWN0aW9uLCBjb25zdCBKU09OOjpBcnJheSYga2V5TW9k
aWZpZXJzLCBSZWY8UGVyZm9ybU1vdXNlSW50ZXJhY3Rpb25DYWxsYmFjaz4mJikgZmluYWw7Ci0g
ICAgdm9pZCBwZXJmb3JtS2V5Ym9hcmRJbnRlcmFjdGlvbnMoY29uc3QgU3RyaW5nJiBoYW5kbGUs
IGNvbnN0IEpTT046OkFycmF5JiBpbnRlcmFjdGlvbnMsIFJlZjxQZXJmb3JtS2V5Ym9hcmRJbnRl
cmFjdGlvbnNDYWxsYmFjaz4mJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBwZXJmb3JtSW50ZXJhY3Rp
b25TZXF1ZW5jZShjb25zdCBTdHJpbmcmIGhhbmRsZSwgY29uc3QgU3RyaW5nKiBvcHRpb25hbEZy
YW1lSGFuZGxlLCBjb25zdCBKU09OOjpBcnJheSYgc291cmNlcywgY29uc3QgSlNPTjo6QXJyYXkm
IHN0ZXBzLCBSZWY8UGVyZm9ybUludGVyYWN0aW9uU2VxdWVuY2VDYWxsYmFjaz4mJikgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCBjYW5jZWxJbnRlcmFjdGlvblNlcXVlbmNlKGNvbnN0IFN0cmluZyYgaGFu
ZGxlLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsRnJhbWVIYW5kbGUsIFJlZjxDYW5jZWxJbnRlcmFj
dGlvblNlcXVlbmNlQ2FsbGJhY2s+JiYpIG92ZXJyaWRlOwotICAgIHZvaWQgdGFrZVNjcmVlbnNo
b3QoY29uc3QgU3RyaW5nJiBoYW5kbGUsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxGcmFtZUhhbmRs
ZSwgY29uc3QgU3RyaW5nKiBvcHRpb25hbE5vZGVIYW5kbGUsIGNvbnN0IGJvb2wqIG9wdGlvbmFs
U2Nyb2xsSW50b1ZpZXdJZk5lZWRlZCwgY29uc3QgYm9vbCogb3B0aW9uYWxDbGlwVG9WaWV3cG9y
dCwgUmVmPFRha2VTY3JlZW5zaG90Q2FsbGJhY2s+JiYpIG92ZXJyaWRlOwotICAgIHZvaWQgcmVz
b2x2ZUNoaWxkRnJhbWVIYW5kbGUoY29uc3QgU3RyaW5nJiBicm93c2luZ0NvbnRleHRIYW5kbGUs
IGNvbnN0IFN0cmluZyogb3B0aW9uYWxGcmFtZUhhbmRsZSwgY29uc3QgaW50KiBvcHRpb25hbE9y
ZGluYWwsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxOYW1lLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFs
Tm9kZUhhbmRsZSwgUmVmPFJlc29sdmVDaGlsZEZyYW1lSGFuZGxlQ2FsbGJhY2s+JiYpIG92ZXJy
aWRlOwotICAgIHZvaWQgcmVzb2x2ZVBhcmVudEZyYW1lSGFuZGxlKGNvbnN0IFN0cmluZyYgYnJv
d3NpbmdDb250ZXh0SGFuZGxlLCBjb25zdCBTdHJpbmcmIGZyYW1lSGFuZGxlLCBSZWY8UmVzb2x2
ZVBhcmVudEZyYW1lSGFuZGxlQ2FsbGJhY2s+JiYpIG92ZXJyaWRlOwotICAgIHZvaWQgY29tcHV0
ZUVsZW1lbnRMYXlvdXQoY29uc3QgU3RyaW5nJiBicm93c2luZ0NvbnRleHRIYW5kbGUsIGNvbnN0
IFN0cmluZyYgZnJhbWVIYW5kbGUsIGNvbnN0IFN0cmluZyYgbm9kZUhhbmRsZSwgY29uc3QgYm9v
bCogb3B0aW9uYWxTY3JvbGxJbnRvVmlld0lmTmVlZGVkLCBjb25zdCBTdHJpbmcmIGNvb3JkaW5h
dGVTeXN0ZW0sIFJlZjxJbnNwZWN0b3I6OkF1dG9tYXRpb25CYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXI6OkNvbXB1dGVFbGVtZW50TGF5b3V0Q2FsbGJhY2s+JiYpIG92ZXJyaWRlOwotICAgIHZvaWQg
c2VsZWN0T3B0aW9uRWxlbWVudChjb25zdCBTdHJpbmcmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSwg
Y29uc3QgU3RyaW5nJiBmcmFtZUhhbmRsZSwgY29uc3QgU3RyaW5nJiBub2RlSGFuZGxlLCBSZWY8
SW5zcGVjdG9yOjpBdXRvbWF0aW9uQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpTZWxlY3RPcHRp
b25FbGVtZW50Q2FsbGJhY2s+JiYpIG92ZXJyaWRlOwotICAgIHZvaWQgaXNTaG93aW5nSmF2YVNj
cmlwdERpYWxvZyhJbnNwZWN0b3I6OkVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBicm93c2lu
Z0NvbnRleHRIYW5kbGUsIGJvb2wqIHJlc3VsdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkaXNtaXNz
Q3VycmVudEphdmFTY3JpcHREaWFsb2coSW5zcGVjdG9yOjpFcnJvclN0cmluZyYsIGNvbnN0IFN0
cmluZyYgYnJvd3NpbmdDb250ZXh0SGFuZGxlKSBvdmVycmlkZTsKLSAgICB2b2lkIGFjY2VwdEN1
cnJlbnRKYXZhU2NyaXB0RGlhbG9nKEluc3BlY3Rvcjo6RXJyb3JTdHJpbmcmLCBjb25zdCBTdHJp
bmcmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBtZXNzYWdlT2ZD
dXJyZW50SmF2YVNjcmlwdERpYWxvZyhJbnNwZWN0b3I6OkVycm9yU3RyaW5nJiwgY29uc3QgU3Ry
aW5nJiBicm93c2luZ0NvbnRleHRIYW5kbGUsIFN0cmluZyogdGV4dCkgb3ZlcnJpZGU7Ci0gICAg
dm9pZCBzZXRVc2VySW5wdXRGb3JDdXJyZW50SmF2YVNjcmlwdFByb21wdChJbnNwZWN0b3I6OkVy
cm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBicm93c2luZ0NvbnRleHRIYW5kbGUsIGNvbnN0IFN0
cmluZyYgdGV4dCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRGaWxlc1RvU2VsZWN0Rm9yRmlsZVVw
bG9hZChJbnNwZWN0b3I6OkVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBicm93c2luZ0NvbnRl
eHRIYW5kbGUsIGNvbnN0IEpTT046OkFycmF5JiBmaWxlbmFtZXMsIGNvbnN0IEpTT046OkFycmF5
KiBvcHRpb25hbEZpbGVDb250ZW50cykgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRGaWxlc0Zvcklu
cHV0RmlsZVVwbG9hZChjb25zdCBTdHJpbmcmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSwgY29uc3Qg
U3RyaW5nJiBmcmFtZUhhbmRsZSwgY29uc3QgU3RyaW5nJiBub2RlSGFuZGxlLCBjb25zdCBKU09O
OjpBcnJheSYgZmlsZW5hbWVzLCBSZWY8U2V0RmlsZXNGb3JJbnB1dEZpbGVVcGxvYWRDYWxsYmFj
az4mJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBnZXRBbGxDb29raWVzKGNvbnN0IFN0cmluZyYgYnJv
d3NpbmdDb250ZXh0SGFuZGxlLCBSZWY8R2V0QWxsQ29va2llc0NhbGxiYWNrPiYmKSBvdmVycmlk
ZTsKLSAgICB2b2lkIGRlbGV0ZVNpbmdsZUNvb2tpZShjb25zdCBTdHJpbmcmIGJyb3dzaW5nQ29u
dGV4dEhhbmRsZSwgY29uc3QgU3RyaW5nJiBjb29raWVOYW1lLCBSZWY8RGVsZXRlU2luZ2xlQ29v
a2llQ2FsbGJhY2s+JiYpIG92ZXJyaWRlOwotICAgIHZvaWQgYWRkU2luZ2xlQ29va2llKGNvbnN0
IFN0cmluZyYgYnJvd3NpbmdDb250ZXh0SGFuZGxlLCBjb25zdCBKU09OOjpPYmplY3QmIGNvb2tp
ZSwgUmVmPEFkZFNpbmdsZUNvb2tpZUNhbGxiYWNrPiYmKSBvdmVycmlkZTsKLSAgICB2b2lkIGRl
bGV0ZUFsbENvb2tpZXMoSW5zcGVjdG9yOjpFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgYnJv
d3NpbmdDb250ZXh0SGFuZGxlKSBvdmVycmlkZTsKLSAgICB2b2lkIGdldFNlc3Npb25QZXJtaXNz
aW9ucyhJbnNwZWN0b3I6OkVycm9yU3RyaW5nJiwgUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVj
dG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6U2Vzc2lvblBlcm1pc3Npb25EYXRhPj4mIG91dF9w
ZXJtaXNzaW9ucykgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRTZXNzaW9uUGVybWlzc2lvbnMoSW5z
cGVjdG9yOjpFcnJvclN0cmluZyYsIGNvbnN0IEpTT046OkFycmF5JiBpbl9wZXJtaXNzaW9ucykg
b3ZlcnJpZGU7CisgICAgdm9pZCBnZXRCcm93c2luZ0NvbnRleHRzKFJlZjxHZXRCcm93c2luZ0Nv
bnRleHRzQ2FsbGJhY2s+JiYpOworICAgIHZvaWQgZ2V0QnJvd3NpbmdDb250ZXh0KGNvbnN0IElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYsIFJl
ZjxHZXRCcm93c2luZ0NvbnRleHRDYWxsYmFjaz4mJik7CisgICAgdm9pZCBjcmVhdGVCcm93c2lu
Z0NvbnRleHQoT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3Np
bmdDb250ZXh0UHJlc2VudGF0aW9uPiYmLCBSZWY8Q3JlYXRlQnJvd3NpbmdDb250ZXh0Q2FsbGJh
Y2s+JiYpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gY2xv
c2VCcm93c2luZ0NvbnRleHQoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6
QnJvd3NpbmdDb250ZXh0SGFuZGxlJik7CisgICAgdm9pZCBzd2l0Y2hUb0Jyb3dzaW5nQ29udGV4
dChjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRI
YW5kbGUmLCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpGcmFtZUhhbmRs
ZSYsIFJlZjxTd2l0Y2hUb0Jyb3dzaW5nQ29udGV4dENhbGxiYWNrPiYmKTsKKyAgICB2b2lkIHNl
dFdpbmRvd0ZyYW1lT2ZCcm93c2luZ0NvbnRleHQoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6
QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJiwgUmVmUHRyPEpTT046Ok9iamVjdD4m
JiBvcmlnaW4sIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgc2l6ZSwgUmVmPFNldFdpbmRvd0ZyYW1l
T2ZCcm93c2luZ0NvbnRleHRDYWxsYmFjaz4mJik7CisgICAgdm9pZCBtYXhpbWl6ZVdpbmRvd09m
QnJvd3NpbmdDb250ZXh0KGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJy
b3dzaW5nQ29udGV4dEhhbmRsZSYsIFJlZjxNYXhpbWl6ZVdpbmRvd09mQnJvd3NpbmdDb250ZXh0
Q2FsbGJhY2s+JiYpOworICAgIHZvaWQgaGlkZVdpbmRvd09mQnJvd3NpbmdDb250ZXh0KGNvbnN0
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYs
IFJlZjxIaWRlV2luZG93T2ZCcm93c2luZ0NvbnRleHRDYWxsYmFjaz4mJik7CisgICAgdm9pZCBu
YXZpZ2F0ZUJyb3dzaW5nQ29udGV4dChjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0
aW9uOjpCcm93c2luZ0NvbnRleHRIYW5kbGUmLCBjb25zdCBTdHJpbmcmIHVybCwgT3B0aW9uYWw8
SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6UGFnZUxvYWRTdHJhdGVneT4mJiwgT3B0
aW9uYWw8ZG91YmxlPiYmIHBhZ2VMb2FkVGltZW91dCwgUmVmPE5hdmlnYXRlQnJvd3NpbmdDb250
ZXh0Q2FsbGJhY2s+JiYpOworICAgIHZvaWQgZ29CYWNrSW5Ccm93c2luZ0NvbnRleHQoY29uc3Qg
U3RyaW5nJiwgT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6UGFnZUxv
YWRTdHJhdGVneT4mJiwgT3B0aW9uYWw8ZG91YmxlPiYmIHBhZ2VMb2FkVGltZW91dCwgUmVmPEdv
QmFja0luQnJvd3NpbmdDb250ZXh0Q2FsbGJhY2s+JiYpOworICAgIHZvaWQgZ29Gb3J3YXJkSW5C
cm93c2luZ0NvbnRleHQoY29uc3QgU3RyaW5nJiwgT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6QXV0b21hdGlvbjo6UGFnZUxvYWRTdHJhdGVneT4mJiwgT3B0aW9uYWw8ZG91YmxlPiYmIHBh
Z2VMb2FkVGltZW91dCwgUmVmPEdvRm9yd2FyZEluQnJvd3NpbmdDb250ZXh0Q2FsbGJhY2s+JiYp
OworICAgIHZvaWQgcmVsb2FkQnJvd3NpbmdDb250ZXh0KGNvbnN0IFN0cmluZyYsIE9wdGlvbmFs
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OlBhZ2VMb2FkU3RyYXRlZ3k+JiYsIE9w
dGlvbmFsPGRvdWJsZT4mJiBwYWdlTG9hZFRpbWVvdXQsIFJlZjxSZWxvYWRCcm93c2luZ0NvbnRl
eHRDYWxsYmFjaz4mJik7CisgICAgdm9pZCB3YWl0Rm9yTmF2aWdhdGlvblRvQ29tcGxldGUoY29u
c3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxl
JiwgY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6RnJhbWVIYW5kbGUmLCBP
cHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpQYWdlTG9hZFN0cmF0ZWd5
PiYmLCBPcHRpb25hbDxkb3VibGU+JiYgcGFnZUxvYWRUaW1lb3V0LCBSZWY8V2FpdEZvck5hdmln
YXRpb25Ub0NvbXBsZXRlQ2FsbGJhY2s+JiYpOworICAgIHZvaWQgZXZhbHVhdGVKYXZhU2NyaXB0
RnVuY3Rpb24oY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdD
b250ZXh0SGFuZGxlJiwgY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6RnJh
bWVIYW5kbGUmLCBjb25zdCBTdHJpbmcmIGZ1bmN0aW9uLCBSZWY8SlNPTjo6QXJyYXk+JiYgYXJn
dW1lbnRzLCBPcHRpb25hbDxib29sPiYmIGV4cGVjdHNJbXBsaWNpdENhbGxiYWNrQXJndW1lbnQs
IE9wdGlvbmFsPGRvdWJsZT4mJiBjYWxsYmFja1RpbWVvdXQsIFJlZjxFdmFsdWF0ZUphdmFTY3Jp
cHRGdW5jdGlvbkNhbGxiYWNrPiYmKTsKKyAgICB2b2lkIHBlcmZvcm1Nb3VzZUludGVyYWN0aW9u
KGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhh
bmRsZSYsIFJlZjxKU09OOjpPYmplY3Q+JiYgcmVxdWVzdGVkUG9zaXRpb24sIEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkF1dG9tYXRpb246Ok1vdXNlQnV0dG9uLCBJbnNwZWN0b3I6OlByb3RvY29sOjpB
dXRvbWF0aW9uOjpNb3VzZUludGVyYWN0aW9uLCBSZWY8SlNPTjo6QXJyYXk+JiYga2V5TW9kaWZp
ZXJzLCBSZWY8UGVyZm9ybU1vdXNlSW50ZXJhY3Rpb25DYWxsYmFjaz4mJik7CisgICAgdm9pZCBw
ZXJmb3JtS2V5Ym9hcmRJbnRlcmFjdGlvbnMoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0
b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJiwgUmVmPEpTT046OkFycmF5PiYmIGludGVy
YWN0aW9ucywgUmVmPFBlcmZvcm1LZXlib2FyZEludGVyYWN0aW9uc0NhbGxiYWNrPiYmKTsKKyAg
ICB2b2lkIHBlcmZvcm1JbnRlcmFjdGlvblNlcXVlbmNlKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYsIGNvbnN0IEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkF1dG9tYXRpb246OkZyYW1lSGFuZGxlJiwgUmVmPEpTT046OkFycmF5PiYmIHNv
dXJjZXMsIFJlZjxKU09OOjpBcnJheT4mJiBzdGVwcywgUmVmPFBlcmZvcm1JbnRlcmFjdGlvblNl
cXVlbmNlQ2FsbGJhY2s+JiYpOworICAgIHZvaWQgY2FuY2VsSW50ZXJhY3Rpb25TZXF1ZW5jZShj
b25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRIYW5k
bGUmLCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpGcmFtZUhhbmRsZSYs
IFJlZjxDYW5jZWxJbnRlcmFjdGlvblNlcXVlbmNlQ2FsbGJhY2s+JiYpOworICAgIHZvaWQgdGFr
ZVNjcmVlbnNob3QoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3Np
bmdDb250ZXh0SGFuZGxlJiwgY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6
RnJhbWVIYW5kbGUmLCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpOb2Rl
SGFuZGxlJiwgT3B0aW9uYWw8Ym9vbD4mJiBzY3JvbGxJbnRvVmlld0lmTmVlZGVkLCBPcHRpb25h
bDxib29sPiYmIGNsaXBUb1ZpZXdwb3J0LCBSZWY8VGFrZVNjcmVlbnNob3RDYWxsYmFjaz4mJik7
CisgICAgdm9pZCByZXNvbHZlQ2hpbGRGcmFtZUhhbmRsZShjb25zdCBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRIYW5kbGUmLCBjb25zdCBJbnNwZWN0b3I6
OlByb3RvY29sOjpBdXRvbWF0aW9uOjpGcmFtZUhhbmRsZSYsIE9wdGlvbmFsPGludD4mJiBvcmRp
bmFsLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9t
YXRpb246Ok5vZGVIYW5kbGUmLCBSZWY8UmVzb2x2ZUNoaWxkRnJhbWVIYW5kbGVDYWxsYmFjaz4m
Jik7CisgICAgdm9pZCByZXNvbHZlUGFyZW50RnJhbWVIYW5kbGUoY29uc3QgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJiwgY29uc3QgSW5zcGVj
dG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6RnJhbWVIYW5kbGUmLCBSZWY8UmVzb2x2ZVBhcmVu
dEZyYW1lSGFuZGxlQ2FsbGJhY2s+JiYpOworICAgIHZvaWQgY29tcHV0ZUVsZW1lbnRMYXlvdXQo
Y29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFu
ZGxlJiwgY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6RnJhbWVIYW5kbGUm
LCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpOb2RlSGFuZGxlJiwgT3B0
aW9uYWw8Ym9vbD4mJiBzY3JvbGxJbnRvVmlld0lmTmVlZGVkLCBJbnNwZWN0b3I6OlByb3RvY29s
OjpBdXRvbWF0aW9uOjpDb29yZGluYXRlU3lzdGVtLCBSZWY8Q29tcHV0ZUVsZW1lbnRMYXlvdXRD
YWxsYmFjaz4mJik7CisgICAgdm9pZCBzZWxlY3RPcHRpb25FbGVtZW50KGNvbnN0IEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYsIGNvbnN0IElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkZyYW1lSGFuZGxlJiwgY29uc3QgSW5zcGVj
dG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6Tm9kZUhhbmRsZSYsIFJlZjxTZWxlY3RPcHRpb25F
bGVtZW50Q2FsbGJhY2s+JiYpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5n
T3I8Ym9vbD4gaXNTaG93aW5nSmF2YVNjcmlwdERpYWxvZyhjb25zdCBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRIYW5kbGUmKTsKKyAgICBJbnNwZWN0b3I6
OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGRpc21pc3NDdXJyZW50SmF2YVNjcmlwdERp
YWxvZyhjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRl
eHRIYW5kbGUmKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+
IGFjY2VwdEN1cnJlbnRKYXZhU2NyaXB0RGlhbG9nKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYpOworICAgIEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkVycm9yU3RyaW5nT3I8U3RyaW5nPiBtZXNzYWdlT2ZDdXJyZW50SmF2YVNjcmlwdERp
YWxvZyhjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRl
eHRIYW5kbGUmKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+
IHNldFVzZXJJbnB1dEZvckN1cnJlbnRKYXZhU2NyaXB0UHJvbXB0KGNvbnN0IEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYsIGNvbnN0IFN0cmlu
ZyYgdGV4dCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBz
ZXRGaWxlc1RvU2VsZWN0Rm9yRmlsZVVwbG9hZChjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpB
dXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRIYW5kbGUmLCBSZWY8SlNPTjo6QXJyYXk+JiYgZmls
ZW5hbWVzLCBSZWZQdHI8SlNPTjo6QXJyYXk+JiYgZmlsZUNvbnRlbnRzKTsKKyAgICB2b2lkIHNl
dEZpbGVzRm9ySW5wdXRGaWxlVXBsb2FkKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9t
YXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkF1dG9tYXRpb246OkZyYW1lSGFuZGxlJiwgY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0
b21hdGlvbjo6Tm9kZUhhbmRsZSYsIFJlZjxKU09OOjpBcnJheT4mJiBmaWxlbmFtZXMsIFJlZjxT
ZXRGaWxlc0ZvcklucHV0RmlsZVVwbG9hZENhbGxiYWNrPiYmKTsKKyAgICB2b2lkIGdldEFsbENv
b2tpZXMoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250
ZXh0SGFuZGxlJiwgUmVmPEdldEFsbENvb2tpZXNDYWxsYmFjaz4mJik7CisgICAgdm9pZCBkZWxl
dGVTaW5nbGVDb29raWUoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJv
d3NpbmdDb250ZXh0SGFuZGxlJiwgY29uc3QgU3RyaW5nJiBjb29raWVOYW1lLCBSZWY8RGVsZXRl
U2luZ2xlQ29va2llQ2FsbGJhY2s+JiYpOworICAgIHZvaWQgYWRkU2luZ2xlQ29va2llKGNvbnN0
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYs
IFJlZjxKU09OOjpPYmplY3Q+JiYgY29va2llLCBSZWY8QWRkU2luZ2xlQ29va2llQ2FsbGJhY2s+
JiYpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZGVsZXRl
QWxsQ29va2llcyhjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2lu
Z0NvbnRleHRIYW5kbGUmKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09y
PFJlZjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OlNlc3Np
b25QZXJtaXNzaW9uRGF0YT4+PiBnZXRTZXNzaW9uUGVybWlzc2lvbnMoKTsKKyAgICBJbnNwZWN0
b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHNldFNlc3Npb25QZXJtaXNzaW9ucyhS
ZWY8SlNPTjo6QXJyYXk+JiYpOwogCiAjaWYgUExBVEZPUk0oTUFDKQotICAgIHZvaWQgaW5zcGVj
dEJyb3dzaW5nQ29udGV4dChjb25zdCBTdHJpbmcmLCBjb25zdCBib29sKiBvcHRpb25hbEVuYWJs
ZUF1dG9DYXB0dXJpbmcsIFJlZjxJbnNwZWN0QnJvd3NpbmdDb250ZXh0Q2FsbGJhY2s+JiYpIG92
ZXJyaWRlOworICAgIHZvaWQgaW5zcGVjdEJyb3dzaW5nQ29udGV4dChjb25zdCBJbnNwZWN0b3I6
OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRIYW5kbGUmLCBPcHRpb25hbDxi
b29sPiYmIGVuYWJsZUF1dG9DYXB0dXJpbmcsIFJlZjxJbnNwZWN0QnJvd3NpbmdDb250ZXh0Q2Fs
bGJhY2s+JiYpOwogI2VuZGlmCiAKICAgICAvLyBFdmVudCBTaW11bGF0aW9uIFN1cHBvcnQuCkBA
IC0yMzgsNyArMjM4LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGhpZGVXaW5kb3dGb3JQYWdlKFdl
YlBhZ2VQcm94eSYsIFdURjo6Q29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmKTsKIAogICAgIC8v
IElQQzo6TWVzc2FnZVJlY2VpdmVyIChJbXBsZW1lbnRlZCBieSBnZW5lcmF0ZWQgY29kZSBpbiBX
ZWJBdXRvbWF0aW9uU2Vzc2lvbk1lc3NhZ2VSZWNlaXZlci5jcHApLgotICAgIHZvaWQgZGlkUmVj
ZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJikgb3ZlcnJpZGU7Cisg
ICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6OkRlY29kZXIm
KTsKIAogICAgIC8vIENhbGxlZCBieSBXZWJBdXRvbWF0aW9uU2Vzc2lvbiBtZXNzYWdlcy4KICAg
ICB2b2lkIGRpZEV2YWx1YXRlSmF2YVNjcmlwdEZ1bmN0aW9uKHVpbnQ2NF90IGNhbGxiYWNrSUQs
IGNvbnN0IFN0cmluZyYgcmVzdWx0LCBjb25zdCBTdHJpbmcmIGVycm9yVHlwZSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNz
aW9uTWFjcm9zLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9t
YXRpb25TZXNzaW9uTWFjcm9zLmgKaW5kZXggOTNhZjVhYmM3MDhiZDU5OGYwZjQwYmNjMjk0ODUy
YTM3MDUyOTdhZS4uNGQzNmQ2NGZkNDBmNDNmM2U3ODFkNWU1OTVhM2JlODRjY2VlZDY1MyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9u
U2Vzc2lvbk1hY3Jvcy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24v
V2ViQXV0b21hdGlvblNlc3Npb25NYWNyb3MuaApAQCAtNDQsMTQgKzQ0LDEyIEBACiAvLyBDb252
ZW5pZW5jZSBtYWNyb3MgZm9yIGZpbGxpbmcgaW4gdGhlIGVycm9yIHN0cmluZyBvZiBzeW5jaHJv
bm91cyBjb21tYW5kcyBpbiBiYWlsb3V0IGJyYW5jaGVzLgogI2RlZmluZSBTWU5DX0ZBSUxfV0lU
SF9QUkVERUZJTkVEX0VSUk9SKGVycm9yTmFtZSkgXAogZG8geyBcCi0gICAgZXJyb3JTdHJpbmcg
PSBTVFJJTkdfRk9SX1BSRURFRklORURfRVJST1JfTkFNRShlcnJvck5hbWUpOyBcCi0gICAgcmV0
dXJuOyBcCisgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKFNUUklOR19GT1JfUFJFREVGSU5FRF9F
UlJPUl9OQU1FKGVycm9yTmFtZSkpOyBcCiB9IHdoaWxlIChmYWxzZSkKIAogI2RlZmluZSBTWU5D
X0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxTKGVycm9yTmFtZSwgZGV0YWls
c1N0cmluZykgXAogZG8geyBcCi0gICAgZXJyb3JTdHJpbmcgPSBTVFJJTkdfRk9SX1BSRURFRklO
RURfRVJST1JfTkFNRV9BTkRfREVUQUlMUyhlcnJvck5hbWUsIGRldGFpbHNTdHJpbmcpOyBcCi0g
ICAgcmV0dXJuOyBcCisgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKFNUUklOR19GT1JfUFJFREVG
SU5FRF9FUlJPUl9OQU1FX0FORF9ERVRBSUxTKGVycm9yTmFtZSwgZGV0YWlsc1N0cmluZykpOyBc
CiB9IHdoaWxlIChmYWxzZSkKIAogI2RlZmluZSBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9F
UlJPUihlcnJvck5hbWUpIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1
dG9tYXRpb24vbWFjL1dlYkF1dG9tYXRpb25TZXNzaW9uTWFjLm1tIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQXV0b21hdGlvbi9tYWMvV2ViQXV0b21hdGlvblNlc3Npb25NYWMubW0KaW5kZXgg
M2NhZWNjMzM3ZDA5OTc5NTM0ZTdmY2JmNWUxZTEwYmQ4MzVmNzZjZC4uOWRiZjJlMDc4N2FhOTk3
MDZjNmYyOTA3NTRhOTEzOTBhYmYxZjcwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQXV0b21hdGlvbi9tYWMvV2ViQXV0b21hdGlvblNlc3Npb25NYWMubW0KKysrIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9tYWMvV2ViQXV0b21hdGlvblNlc3Npb25N
YWMubW0KQEAgLTQ0LDcgKzQ0LDcgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKICNwcmFn
bWEgbWFyayBDb21tYW5kcyBmb3IgJ1BMQVRGT1JNKE1BQyknCiAKLXZvaWQgV2ViQXV0b21hdGlv
blNlc3Npb246Omluc3BlY3RCcm93c2luZ0NvbnRleHQoY29uc3QgU3RyaW5nJiBoYW5kbGUsIGNv
bnN0IGJvb2wqIG9wdGlvbmFsRW5hYmxlQXV0b0NhcHR1cmluZywgUmVmPEluc3BlY3RCcm93c2lu
Z0NvbnRleHRDYWxsYmFjaz4mJiBjYWxsYmFjaykKK3ZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246
Omluc3BlY3RCcm93c2luZ0NvbnRleHQoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21h
dGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJiBoYW5kbGUsIE9wdGlvbmFsPGJvb2w+JiYgZW5h
YmxlQXV0b0NhcHR1cmluZywgUmVmPEluc3BlY3RCcm93c2luZ0NvbnRleHRDYWxsYmFjaz4mJiBj
YWxsYmFjaykKIHsKICAgICBXZWJQYWdlUHJveHkqIHBhZ2UgPSB3ZWJQYWdlUHJveHlGb3JIYW5k
bGUoaGFuZGxlKTsKICAgICBpZiAoIXBhZ2UpCkBAIC02MCw3ICs2MCw3IEBAIHZvaWQgV2ViQXV0
b21hdGlvblNlc3Npb246Omluc3BlY3RCcm93c2luZ0NvbnRleHQoY29uc3QgU3RyaW5nJiBoYW5k
bGUsIGNvbnN0IGJvCiAgICAgICAgIHBhZ2UtPmluc3BlY3RvcigpLT5zaG93KCk7CiAKICAgICAg
ICAgLy8gU3RhcnQgY29sbGVjdGluZyBwcm9maWxlIGluZm9ybWF0aW9uIGltbWVkaWF0ZWx5IHNv
IHRoZSBlbnRpcmUgc2Vzc2lvbiBpcyBjYXB0dXJlZC4KLSAgICAgICAgaWYgKG9wdGlvbmFsRW5h
YmxlQXV0b0NhcHR1cmluZyAmJiAqb3B0aW9uYWxFbmFibGVBdXRvQ2FwdHVyaW5nKQorICAgICAg
ICBpZiAoZW5hYmxlQXV0b0NhcHR1cmluZyAmJiAqZW5hYmxlQXV0b0NhcHR1cmluZykKICAgICAg
ICAgICAgIHBhZ2UtPmluc3BlY3RvcigpLT50b2dnbGVQYWdlUHJvZmlsaW5nKCk7CiAgICAgfQog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL0FnZW50cy9J
bnNwZWN0b3JCcm93c2VyQWdlbnQuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVj
dG9yL0FnZW50cy9JbnNwZWN0b3JCcm93c2VyQWdlbnQuY3BwCmluZGV4IGMxZmZhNmNmNjE0NjY2
ZTRjOGI1ZWM1YjQzY2M2NGY4MDcwZTY1OTkuLmRmNGExMGE0MGY4YjAyZmM1ZDc1MDllOTZjNTk0
ZWJiYzVhYzlmMTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rv
ci9BZ2VudHMvSW5zcGVjdG9yQnJvd3NlckFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9JbnNwZWN0b3IvQWdlbnRzL0luc3BlY3RvckJyb3dzZXJBZ2VudC5jcHAKQEAgLTYw
LDM1ICs2MCwzNCBAQCB2b2lkIEluc3BlY3RvckJyb3dzZXJBZ2VudDo6ZGlkQ3JlYXRlRnJvbnRl
bmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRSb3V0ZQogCiB2b2lkIEluc3BlY3RvckJy
b3dzZXJBZ2VudDo6d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNj
b25uZWN0UmVhc29uKQogewotICAgIEVycm9yU3RyaW5nIGlnbm9yZWQ7Ci0gICAgZGlzYWJsZShp
Z25vcmVkKTsKKyAgICBkaXNhYmxlKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQnJvd3NlckFnZW50
OjplbmFibGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nKQorSW5zcGVjdG9yOjpQcm90b2NvbDo6
RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JCcm93c2VyQWdlbnQ6OmVuYWJsZSgpCiB7Ci0g
ICAgaWYgKGVuYWJsZWQoKSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJCcm93c2VyIGRvbWFp
biBhbHJlYWR5IGVuYWJsZWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKGVu
YWJsZWQoKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJCcm93c2VyIGRvbWFpbiBh
bHJlYWR5IGVuYWJsZWQiX3MpOwogCiAgICAgbV9pbnNwZWN0ZWRQYWdlLmluc3BlY3RvckNvbnRy
b2xsZXIoKS5zZXRFbmFibGVkQnJvd3NlckFnZW50KHRoaXMpOwogCiAgICAgYXV0byogaW5zcGVj
dG9yID0gbV9pbnNwZWN0ZWRQYWdlLmluc3BlY3RvcigpOwogICAgIEFTU0VSVChpbnNwZWN0b3Ip
OwogICAgIG1faW5zcGVjdGVkUGFnZS5pbnNwZWN0b3JDbGllbnQoKS5icm93c2VyRG9tYWluRW5h
YmxlZChtX2luc3BlY3RlZFBhZ2UsICppbnNwZWN0b3IpOworCisgICAgcmV0dXJuIHsgfTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JCcm93c2VyQWdlbnQ6OmRpc2FibGUoRXJyb3JTdHJpbmcmIGVycm9y
U3RyaW5nKQorSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0
b3JCcm93c2VyQWdlbnQ6OmRpc2FibGUoKQogewotICAgIGlmICghZW5hYmxlZCgpKSB7Ci0gICAg
ICAgIGVycm9yU3RyaW5nID0gIkJyb3dzZXIgZG9tYWluIGFscmVhZHkgZGlzYWJsZWQiX3M7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKCFlbmFibGVkKCkpCisgICAgICAgIHJldHVy
biBtYWtlVW5leHBlY3RlZCgiQnJvd3NlciBkb21haW4gYWxyZWFkeSBkaXNhYmxlZCJfcyk7CiAK
ICAgICBtX2luc3BlY3RlZFBhZ2UuaW5zcGVjdG9yQ29udHJvbGxlcigpLnNldEVuYWJsZWRCcm93
c2VyQWdlbnQobnVsbHB0cik7CiAKICAgICBpZiAoYXV0byogaW5zcGVjdG9yID0gbV9pbnNwZWN0
ZWRQYWdlLmluc3BlY3RvcigpKQogICAgICAgICBtX2luc3BlY3RlZFBhZ2UuaW5zcGVjdG9yQ2xp
ZW50KCkuYnJvd3NlckRvbWFpbkRpc2FibGVkKG1faW5zcGVjdGVkUGFnZSwgKmluc3BlY3Rvcik7
CisKKyAgICByZXR1cm4geyB9OwogfQogCiB2b2lkIEluc3BlY3RvckJyb3dzZXJBZ2VudDo6ZXh0
ZW5zaW9uc0VuYWJsZWQoSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mJiBleHRlbnNpb25JRFRvTmFt
ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9BZ2VudHMv
SW5zcGVjdG9yQnJvd3NlckFnZW50LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0
b3IvQWdlbnRzL0luc3BlY3RvckJyb3dzZXJBZ2VudC5oCmluZGV4IGExMzk1ODNjZDhkODQyMzI5
ZjRiM2YzNTIxYjM2MjQwZWFiNTM5MTEuLjMzMWJmYWJiNTU3NDRlZTk4YTdmZjBmN2RhNzY5NTMx
YWM0YzcyNzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9B
Z2VudHMvSW5zcGVjdG9yQnJvd3NlckFnZW50LmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvSW5zcGVjdG9yL0FnZW50cy9JbnNwZWN0b3JCcm93c2VyQWdlbnQuaApAQCAtMzMsMjMgKzMz
LDIyIEBACiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgV2ViUGFnZVByb3h5OwotdHlwZWRl
ZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiAKIGNsYXNzIEluc3BlY3RvckJyb3dzZXJBZ2VudCBmaW5h
bCA6IHB1YmxpYyBJbnNwZWN0b3JBZ2VudEJhc2UsIHB1YmxpYyBJbnNwZWN0b3I6OkJyb3dzZXJC
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEluc3Bl
Y3RvckJyb3dzZXJBZ2VudCk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6
CiAgICAgSW5zcGVjdG9yQnJvd3NlckFnZW50KFdlYlBhZ2VBZ2VudENvbnRleHQmKTsKLSAgICB+
SW5zcGVjdG9yQnJvd3NlckFnZW50KCkgb3ZlcnJpZGU7CisgICAgfkluc3BlY3RvckJyb3dzZXJB
Z2VudCgpOwogICAgIGJvb2wgZW5hYmxlZCgpIGNvbnN0OwogCiAgICAgLy8gSW5zcGVjdG9yQWdl
bnRCYXNlCi0gICAgdm9pZCBkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpG
cm9udGVuZFJvdXRlciosIEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXIqKSBvdmVycmlkZTsK
LSAgICB2b2lkIHdpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlzY29u
bmVjdFJlYXNvbikgb3ZlcnJpZGU7CisgICAgdm9pZCBkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tl
bmQoSW5zcGVjdG9yOjpGcm9udGVuZFJvdXRlciosIEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNo
ZXIqKTsKKyAgICB2b2lkIHdpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6
RGlzY29ubmVjdFJlYXNvbik7CiAKICAgICAvLyBCcm93c2VyQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyCi0gICAgdm9pZCBlbmFibGUoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2b2lkIGRp
c2FibGUoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpF
cnJvclN0cmluZ09yPHZvaWQ+IGVuYWJsZSgpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8dm9pZD4gZGlzYWJsZSgpOwogCiAgICAgdm9pZCBleHRlbnNpb25zRW5hYmxl
ZChIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYmKTsKICAgICB2b2lkIGV4dGVuc2lvbnNEaXNhYmxl
ZChIYXNoU2V0PFN0cmluZz4mJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9JbnNwZWN0b3Ivc29ja2V0L1JlbW90ZUluc3BlY3RvckNsaWVudC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3Ivc29ja2V0L1JlbW90ZUluc3BlY3RvckNsaWVudC5jcHAK
aW5kZXggZmJlZTVjZGZmMzhiM2M3NzlhMjYyNzM4YzQxOTUxNWI0NDU4YjlkZC4uNWY1MTdmMTBh
NDg3NzBkOWNiODljZjg4ZjlkNjAzNzhiYmQ1MmFkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvSW5zcGVjdG9yL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JDbGllbnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9zb2NrZXQvUmVtb3RlSW5zcGVj
dG9yQ2xpZW50LmNwcApAQCAtMjA2LDI1ICsyMDYsMzggQEAgdm9pZCBSZW1vdGVJbnNwZWN0b3JD
bGllbnQ6OnNldFRhcmdldExpc3QoY29uc3QgRXZlbnQmIGV2ZW50KQogICAgIGlmICghZXZlbnQu
Y29ubmVjdGlvbklEIHx8ICFldmVudC5tZXNzYWdlKQogICAgICAgICByZXR1cm47CiAKLSAgICBS
ZWZQdHI8SlNPTjo6VmFsdWU+IG1lc3NhZ2VWYWx1ZTsKLSAgICBpZiAoIUpTT046OlZhbHVlOjpw
YXJzZUpTT04oZXZlbnQubWVzc2FnZS52YWx1ZSgpLCBtZXNzYWdlVmFsdWUpKQorICAgIGF1dG8g
bWVzc2FnZVZhbHVlID0gSlNPTjo6VmFsdWU6OnBhcnNlSlNPTihldmVudC5tZXNzYWdlLnZhbHVl
KCkpOworICAgIGlmICghbWVzc2FnZVZhbHVlKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZWZQ
dHI8SlNPTjo6QXJyYXk+IG1lc3NhZ2VBcnJheTsKLSAgICBpZiAoIW1lc3NhZ2VWYWx1ZS0+YXNB
cnJheShtZXNzYWdlQXJyYXkpKQorICAgIGF1dG8gbWVzc2FnZUFycmF5ID0gbWVzc2FnZVZhbHVl
LT5hc0FycmF5KCk7CisgICAgaWYgKCFtZXNzYWdlQXJyYXkpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIFZlY3RvcjxUYXJnZXQ+IHRhcmdldExpc3Q7CiAgICAgZm9yIChhdXRvJiBpdGVtVmFsdWUg
OiAqbWVzc2FnZUFycmF5KSB7Ci0gICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IGl0ZW1PYmpl
Y3Q7Ci0gICAgICAgIGlmICghaXRlbVZhbHVlLT5hc09iamVjdChpdGVtT2JqZWN0KSkKKyAgICAg
ICAgYXV0byBpdGVtT2JqZWN0ID0gaXRlbVZhbHVlLT5hc09iamVjdCgpOworICAgICAgICBpZiAo
IWl0ZW1PYmplY3QpCiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBUYXJnZXQgdGFy
Z2V0OwotICAgICAgICBpZiAoIWl0ZW1PYmplY3QtPmdldEludGVnZXIoInRhcmdldElEIl9zLCB0
YXJnZXQuaWQpCi0gICAgICAgICAgICB8fCAhaXRlbU9iamVjdC0+Z2V0U3RyaW5nKCJuYW1lIl9z
LCB0YXJnZXQubmFtZSkKLSAgICAgICAgICAgIHx8ICFpdGVtT2JqZWN0LT5nZXRTdHJpbmcoInVy
bCJfcywgdGFyZ2V0LnVybCkKLSAgICAgICAgICAgIHx8ICFpdGVtT2JqZWN0LT5nZXRTdHJpbmco
InR5cGUiX3MsIHRhcmdldC50eXBlKSkKKworICAgICAgICBhdXRvIHRhcmdldElEID0gaXRlbU9i
amVjdC0+Z2V0SW50ZWdlcigidGFyZ2V0SUQiX3MpOworICAgICAgICBpZiAoIXRhcmdldElEKQor
ICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgdGFyZ2V0LnRhcmdldElEID0gKnRhcmdl
dElEOworCisgICAgICAgIHRhcmdldC5uYW1lID0gaXRlbU9iamVjdC0+Z2V0U3RyaW5nKCJuYW1l
Il9zKTsKKyAgICAgICAgaWYgKCF0YXJnZXQubmFtZSkKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
CisgICAgICAgIHRhcmdldC51cmwgPSBpdGVtT2JqZWN0LT5nZXRTdHJpbmcoInVybCJfcyk7Cisg
ICAgICAgIGlmICghdGFyZ2V0LnVybCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAg
IHRhcmdldC50eXBlID0gaXRlbU9iamVjdC0+Z2V0U3RyaW5nKCJ0eXBlIl9zKTsKKyAgICAgICAg
aWYgKCF0YXJnZXQudHlwZSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIHRhcmdl
dExpc3QuYXBwZW5kKFdURk1vdmUodGFyZ2V0KSk7CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VM
b2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZTg4Yjk4MWM4N2M5YmEyYTFiODg0MmQ4NjkzMmE3
YjZlM2VhNTJlMi4uNmU3ODkxMzc4N2RlOTRlZmNlZDYxNWU1MTRjNzA5ZTc1N2I0OTE2OCAxMDA2
NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDEzIEBACisyMDIwLTA5LTA4ICBEZXZpbiBSb3Vzc28gIDxkcm91c3NvQGFwcGxlLmNvbT4KKwor
ICAgICAgICBXZWIgSW5zcGVjdG9yOiBtb2Rlcm5pemUgZ2VuZXJhdGVkIGJhY2tlbmQgcHJvdG9j
b2wgY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjE2MzAyCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS82ODU0NzY0OT4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMv
V1RGL0pTT05WYWx1ZS5jcHA6CisKIDIwMjAtMDktMDQgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hy
aXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBNb3ZlIFBERiBoZWFkcy11cCBkaXNwbGF5
IHRvIFVJIHByb2Nlc3Mgb24gbWFjT1MKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV1RGL0pTT05WYWx1ZS5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9K
U09OVmFsdWUuY3BwCmluZGV4IDkxZWM0MWMzYjdkNDE2MmQyM2VjNDVlNGRiMzYzN2E5M2NkY2Ji
NDUuLmMzODA2Mjc2NDRkZjY5MTY2NDAxNmZkYzZjMTE0OTA4ZmE4ZjgyMTUgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0pTT05WYWx1ZS5jcHAKKysrIGIvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvSlNPTlZhbHVlLmNwcApAQCAtNDIsODIgKzQyLDY4IEBA
IFRFU1QoSlNPTlZhbHVlLCBDb25zdHJ1Y3QpCiAgICAgewogICAgICAgICBSZWY8SlNPTjo6VmFs
dWU+IHZhbHVlID0gSlNPTjo6VmFsdWU6OmNyZWF0ZSh0cnVlKTsKICAgICAgICAgRVhQRUNUX1RS
VUUodmFsdWUtPnR5cGUoKSA9PSBKU09OOjpWYWx1ZTo6VHlwZTo6Qm9vbGVhbik7Ci0gICAgICAg
IGJvb2wgYm9vbGVhblZhbHVlOwotICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+YXNCb29sZWFu
KGJvb2xlYW5WYWx1ZSkpOwotICAgICAgICBFWFBFQ1RfRVEoYm9vbGVhblZhbHVlLCB0cnVlKTsK
KyAgICAgICAgYXV0byBib29sZWFuVmFsdWUgPSB2YWx1ZS0+YXNCb29sZWFuKCk7CisgICAgICAg
IEVYUEVDVF9UUlVFKGJvb2xlYW5WYWx1ZSk7CisgICAgICAgIEVYUEVDVF9FUSgqYm9vbGVhblZh
bHVlLCB0cnVlKTsKIAogICAgICAgICB2YWx1ZSA9IEpTT046OlZhbHVlOjpjcmVhdGUoZmFsc2Up
OwogICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+dHlwZSgpID09IEpTT046OlZhbHVlOjpUeXBl
OjpCb29sZWFuKTsKLSAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUtPmFzQm9vbGVhbihib29sZWFu
VmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX0VRKGJvb2xlYW5WYWx1ZSwgZmFsc2UpOworICAgICAg
ICBib29sZWFuVmFsdWUgPSB2YWx1ZS0+YXNCb29sZWFuKCk7CisgICAgICAgIEVYUEVDVF9UUlVF
KGJvb2xlYW5WYWx1ZSk7CisgICAgICAgIEVYUEVDVF9FUSgqYm9vbGVhblZhbHVlLCBmYWxzZSk7
CiAgICAgfQogCiAgICAgewogICAgICAgICBSZWY8SlNPTjo6VmFsdWU+IHZhbHVlID0gSlNPTjo6
VmFsdWU6OmNyZWF0ZSgxKTsKICAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUtPnR5cGUoKSA9PSBK
U09OOjpWYWx1ZTo6VHlwZTo6SW50ZWdlcik7Ci0gICAgICAgIGludCBpbnRlZ2VyVmFsdWU7Ci0g
ICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlLT5hc0ludGVnZXIoaW50ZWdlclZhbHVlKSk7Ci0gICAg
ICAgIEVYUEVDVF9FUShpbnRlZ2VyVmFsdWUsIDEpOworICAgICAgICBhdXRvIGludGVnZXJWYWx1
ZSA9IHZhbHVlLT5hc0ludGVnZXIoKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoaW50ZWdlclZhbHVl
KTsKKyAgICAgICAgRVhQRUNUX0VRKCppbnRlZ2VyVmFsdWUsIDEpOwogCi0gICAgICAgIC8vIERv
dWJsZXMgY2FuIGJlIGdldCBhcyBpbnRlZ2VycywgYnV0IG5vdCB0aGUgb3RoZXIgd2F5IGFyb3Vu
ZC4KLSAgICAgICAgZmxvYXQgZmxvYXRWYWx1ZTsKLSAgICAgICAgRVhQRUNUX0ZBTFNFKHZhbHVl
LT5hc0RvdWJsZShmbG9hdFZhbHVlKSk7CisgICAgICAgIC8vIEludGVnZXJzIGNhbiBiZSBnZXQg
YXMgZG91Ymxlcy4KKyAgICAgICAgYXV0byBkb3VibGVWYWx1ZSA9IHZhbHVlLT5hc0RvdWJsZSgp
OworICAgICAgICBFWFBFQ1RfVFJVRShkb3VibGVWYWx1ZSk7CisgICAgICAgIEVYUEVDVF9FUSgq
ZG91YmxlVmFsdWUsIDEpOwogCiAgICAgICAgIHZhbHVlID0gSlNPTjo6VmFsdWU6OmNyZWF0ZShz
dGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpKTsKLSAgICAgICAgRVhQRUNUX1RSVUUodmFs
dWUtPmFzSW50ZWdlcihpbnRlZ2VyVmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX0VRKGludGVnZXJW
YWx1ZSwgc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSk7Ci0gICAgICAgIHVuc2lnbmVk
IHVuc2lnbmVkVmFsdWU7Ci0gICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlLT5hc0ludGVnZXIodW5z
aWduZWRWYWx1ZSkpOwotICAgICAgICBsb25nIGxvbmdWYWx1ZTsKLSAgICAgICAgRVhQRUNUX1RS
VUUodmFsdWUtPmFzSW50ZWdlcihsb25nVmFsdWUpKTsKLSAgICAgICAgbG9uZyBsb25nIGxvbmdM
b25nVmFsdWU7Ci0gICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlLT5hc0ludGVnZXIobG9uZ0xvbmdW
YWx1ZSkpOwotICAgICAgICB1bnNpZ25lZCBsb25nIHVuc2lnbmVkTG9uZ1ZhbHVlOwotICAgICAg
ICBFWFBFQ1RfVFJVRSh2YWx1ZS0+YXNJbnRlZ2VyKHVuc2lnbmVkTG9uZ1ZhbHVlKSk7Ci0gICAg
ICAgIHVuc2lnbmVkIGxvbmcgbG9uZyB1bnNpZ25lZExvbmdMb25nVmFsdWU7Ci0gICAgICAgIEVY
UEVDVF9UUlVFKHZhbHVlLT5hc0ludGVnZXIodW5zaWduZWRMb25nTG9uZ1ZhbHVlKSk7CisgICAg
ICAgIGludGVnZXJWYWx1ZSA9IHZhbHVlLT5hc0ludGVnZXIoKTsKKyAgICAgICAgRVhQRUNUX1RS
VUUoaW50ZWdlclZhbHVlKTsKKyAgICAgICAgRVhQRUNUX0VRKCppbnRlZ2VyVmFsdWUsIHN0ZDo6
bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpOwogICAgIH0KIAogICAgIHsKICAgICAgICAgUmVm
PEpTT046OlZhbHVlPiB2YWx1ZSA9IEpTT046OlZhbHVlOjpjcmVhdGUoMS41KTsKICAgICAgICAg
RVhQRUNUX1RSVUUodmFsdWUtPnR5cGUoKSA9PSBKU09OOjpWYWx1ZTo6VHlwZTo6RG91YmxlKTsK
LSAgICAgICAgZG91YmxlIGRvdWJsZVZhbHVlOwotICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+
YXNEb3VibGUoZG91YmxlVmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX0VRKGRvdWJsZVZhbHVlLCAx
LjUpOwogCi0gICAgICAgIGZsb2F0IGZsb2F0VmFsdWU7Ci0gICAgICAgIEVYUEVDVF9UUlVFKHZh
bHVlLT5hc0RvdWJsZShmbG9hdFZhbHVlKSk7CisgICAgICAgIGF1dG8gZG91YmxlVmFsdWUgPSB2
YWx1ZS0+YXNEb3VibGUoKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoZG91YmxlVmFsdWUpOworICAg
ICAgICBFWFBFQ1RfRVEoKmRvdWJsZVZhbHVlLCAxLjUpOwogCi0gICAgICAgIGludCBpbnRlZ2Vy
VmFsdWU7Ci0gICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlLT5hc0ludGVnZXIoaW50ZWdlclZhbHVl
KSk7Ci0gICAgICAgIEVYUEVDVF9FUShpbnRlZ2VyVmFsdWUsIHN0YXRpY19jYXN0PGludD4oMS41
KSk7Ci0KLSAgICAgICAgdW5zaWduZWQgdW5zaWduZWRWYWx1ZTsKLSAgICAgICAgRVhQRUNUX1RS
VUUodmFsdWUtPmFzSW50ZWdlcih1bnNpZ25lZFZhbHVlKSk7Ci0gICAgICAgIGxvbmcgbG9uZ1Zh
bHVlOwotICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+YXNJbnRlZ2VyKGxvbmdWYWx1ZSkpOwot
ICAgICAgICBsb25nIGxvbmcgbG9uZ0xvbmdWYWx1ZTsKLSAgICAgICAgRVhQRUNUX1RSVUUodmFs
dWUtPmFzSW50ZWdlcihsb25nTG9uZ1ZhbHVlKSk7Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcgdW5z
aWduZWRMb25nVmFsdWU7Ci0gICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlLT5hc0ludGVnZXIodW5z
aWduZWRMb25nVmFsdWUpKTsKLSAgICAgICAgdW5zaWduZWQgbG9uZyBsb25nIHVuc2lnbmVkTG9u
Z0xvbmdWYWx1ZTsKLSAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUtPmFzSW50ZWdlcih1bnNpZ25l
ZExvbmdMb25nVmFsdWUpKTsKKyAgICAgICAgLy8gRG91YmxlcyBjYW4gYmUgZ2V0IGFzIGludGVn
ZXJzLgorICAgICAgICBhdXRvIGludGVnZXJWYWx1ZSA9IHZhbHVlLT5hc0ludGVnZXIoKTsKKyAg
ICAgICAgRVhQRUNUX1RSVUUoaW50ZWdlclZhbHVlKTsKKyAgICAgICAgRVhQRUNUX0VRKCppbnRl
Z2VyVmFsdWUsIHN0YXRpY19jYXN0PGludD4oMS41KSk7CiAgICAgfQogCiAgICAgewogICAgICAg
ICBSZWY8SlNPTjo6VmFsdWU+IHZhbHVlID0gSlNPTjo6VmFsdWU6OmNyZWF0ZSgid2Via2l0Iik7
CiAgICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlLT50eXBlKCkgPT0gSlNPTjo6VmFsdWU6OlR5cGU6
OlN0cmluZyk7Ci0gICAgICAgIFN0cmluZyBzdHJpbmdWYWx1ZTsKLSAgICAgICAgRVhQRUNUX1RS
VUUodmFsdWUtPmFzU3RyaW5nKHN0cmluZ1ZhbHVlKSk7CisgICAgICAgIGF1dG8gc3RyaW5nVmFs
dWUgPSB2YWx1ZS0+YXNTdHJpbmcoKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoISFzdHJpbmdWYWx1
ZSk7CiAgICAgICAgIEVYUEVDVF9FUShzdHJpbmdWYWx1ZSwgIndlYmtpdCIpOwogCiAgICAgICAg
IFN0cmluZyBudWxsU3RyaW5nOwogICAgICAgICB2YWx1ZSA9IEpTT046OlZhbHVlOjpjcmVhdGUo
bnVsbFN0cmluZyk7Ci0gICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlLT5hc1N0cmluZyhzdHJpbmdW
YWx1ZSkpOworICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+dHlwZSgpID09IEpTT046OlZhbHVl
OjpUeXBlOjpTdHJpbmcpOworICAgICAgICBzdHJpbmdWYWx1ZSA9IHZhbHVlLT5hc1N0cmluZygp
OworICAgICAgICBFWFBFQ1RfRkFMU0UoISFzdHJpbmdWYWx1ZSk7CiAgICAgICAgIEVYUEVDVF9U
UlVFKHN0cmluZ1ZhbHVlLmlzTnVsbCgpKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoc3RyaW5nVmFs
dWUuaXNFbXB0eSgpKTsKIAogICAgICAgICB2YWx1ZSA9IEpTT046OlZhbHVlOjpjcmVhdGUoZW1w
dHlTdHJpbmcoKSk7Ci0gICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlLT5hc1N0cmluZyhzdHJpbmdW
YWx1ZSkpOworICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+dHlwZSgpID09IEpTT046OlZhbHVl
OjpUeXBlOjpTdHJpbmcpOworICAgICAgICBzdHJpbmdWYWx1ZSA9IHZhbHVlLT5hc1N0cmluZygp
OworICAgICAgICBFWFBFQ1RfVFJVRSghIXN0cmluZ1ZhbHVlKTsKICAgICAgICAgRVhQRUNUX0ZB
TFNFKHN0cmluZ1ZhbHVlLmlzTnVsbCgpKTsKICAgICAgICAgRVhQRUNUX1RSVUUoc3RyaW5nVmFs
dWUuaXNFbXB0eSgpKTsKICAgICB9CkBAIC0xMzEsNyArMTE3LDcgQEAgVEVTVChKU09OVmFsdWUs
IENvbnN0cnVjdCkKICAgICB7CiAgICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IG9iamVjdCA9IEpT
T046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgIEVYUEVDVF9UUlVFKG9iamVjdC0+dHlwZSgp
ID09IEpTT046OlZhbHVlOjpUeXBlOjpPYmplY3QpOwotICAgICAgICBFWFBFQ1RfRVEob2JqZWN0
LT5zaXplKCksIDApOworICAgICAgICBFWFBFQ1RfRVEob2JqZWN0LT5zaXplKCksIDBVKTsKICAg
ICB9CiAKICAgICB7CkBAIC0xNTQsNDggKzE0MCw0OCBAQCBURVNUKEpTT05BcnJheSwgQmFzaWMp
CiAgICAgRVhQRUNUX0VRKGFycmF5LT5sZW5ndGgoKSwgMlUpOwogICAgIHZhbHVlID0gYXJyYXkt
PmdldCgxKTsKICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+dHlwZSgpID09IEpTT046OlZhbHVlOjpU
eXBlOjpCb29sZWFuKTsKLSAgICBib29sIGJvb2xlYW5WYWx1ZTsKLSAgICBFWFBFQ1RfVFJVRSh2
YWx1ZS0+YXNCb29sZWFuKGJvb2xlYW5WYWx1ZSkpOwotICAgIEVYUEVDVF9FUShib29sZWFuVmFs
dWUsIHRydWUpOworICAgIGF1dG8gYm9vbGVhblZhbHVlID0gdmFsdWUtPmFzQm9vbGVhbigpOwor
ICAgIEVYUEVDVF9UUlVFKGJvb2xlYW5WYWx1ZSk7CisgICAgRVhQRUNUX0VRKCpib29sZWFuVmFs
dWUsIHRydWUpOwogCiAgICAgYXJyYXktPnB1c2hJbnRlZ2VyKDEpOwogICAgIEVYUEVDVF9FUShh
cnJheS0+bGVuZ3RoKCksIDNVKTsKICAgICB2YWx1ZSA9IGFycmF5LT5nZXQoMik7CiAgICAgRVhQ
RUNUX1RSVUUodmFsdWUtPnR5cGUoKSA9PSBKU09OOjpWYWx1ZTo6VHlwZTo6SW50ZWdlcik7Ci0g
ICAgaW50IGludGVnZXJWYWx1ZTsKLSAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+YXNJbnRlZ2VyKGlu
dGVnZXJWYWx1ZSkpOwotICAgIEVYUEVDVF9FUShpbnRlZ2VyVmFsdWUsIDEpOworICAgIGF1dG8g
aW50ZWdlclZhbHVlID0gdmFsdWUtPmFzSW50ZWdlcigpOworICAgIEVYUEVDVF9UUlVFKGludGVn
ZXJWYWx1ZSk7CisgICAgRVhQRUNUX0VRKCppbnRlZ2VyVmFsdWUsIDEpOwogCiAgICAgYXJyYXkt
PnB1c2hEb3VibGUoMS41KTsKICAgICBFWFBFQ1RfRVEoYXJyYXktPmxlbmd0aCgpLCA0VSk7CiAg
ICAgdmFsdWUgPSBhcnJheS0+Z2V0KDMpOwogICAgIEVYUEVDVF9UUlVFKHZhbHVlLT50eXBlKCkg
PT0gSlNPTjo6VmFsdWU6OlR5cGU6OkRvdWJsZSk7Ci0gICAgZG91YmxlIGRvdWJsZVZhbHVlOwot
ICAgIEVYUEVDVF9UUlVFKHZhbHVlLT5hc0RvdWJsZShkb3VibGVWYWx1ZSkpOwotICAgIEVYUEVD
VF9FUShkb3VibGVWYWx1ZSwgMS41KTsKKyAgICBhdXRvIGRvdWJsZVZhbHVlID0gdmFsdWUtPmFz
RG91YmxlKCk7CisgICAgRVhQRUNUX1RSVUUoZG91YmxlVmFsdWUpOworICAgIEVYUEVDVF9FUSgq
ZG91YmxlVmFsdWUsIDEuNSk7CiAKICAgICBhcnJheS0+cHVzaFN0cmluZygid2Via2l0Iik7CiAg
ICAgRVhQRUNUX0VRKGFycmF5LT5sZW5ndGgoKSwgNVUpOwogICAgIHZhbHVlID0gYXJyYXktPmdl
dCg0KTsKICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+dHlwZSgpID09IEpTT046OlZhbHVlOjpUeXBl
OjpTdHJpbmcpOwotICAgIFN0cmluZyBzdHJpbmdWYWx1ZTsKLSAgICBFWFBFQ1RfVFJVRSh2YWx1
ZS0+YXNTdHJpbmcoc3RyaW5nVmFsdWUpKTsKKyAgICBhdXRvIHN0cmluZ1ZhbHVlID0gdmFsdWUt
PmFzU3RyaW5nKCk7CisgICAgRVhQRUNUX1RSVUUoISFzdHJpbmdWYWx1ZSk7CiAgICAgRVhQRUNU
X0VRKHN0cmluZ1ZhbHVlLCAid2Via2l0Iik7CiAKICAgICBhcnJheS0+cHVzaE9iamVjdChKU09O
OjpPYmplY3Q6OmNyZWF0ZSgpKTsKICAgICBFWFBFQ1RfRVEoYXJyYXktPmxlbmd0aCgpLCA2VSk7
CiAgICAgdmFsdWUgPSBhcnJheS0+Z2V0KDUpOwogICAgIEVYUEVDVF9UUlVFKHZhbHVlLT50eXBl
KCkgPT0gSlNPTjo6VmFsdWU6OlR5cGU6Ok9iamVjdCk7Ci0gICAgUmVmUHRyPEpTT046Ok9iamVj
dD4gb2JqZWN0VmFsdWU7Ci0gICAgRVhQRUNUX1RSVUUodmFsdWUtPmFzT2JqZWN0KG9iamVjdFZh
bHVlKSk7Ci0gICAgRVhQRUNUX0VRKG9iamVjdFZhbHVlLT5zaXplKCksIDApOworICAgIGF1dG8g
b2JqZWN0VmFsdWUgPSB2YWx1ZS0+YXNPYmplY3QoKTsKKyAgICBFWFBFQ1RfVFJVRShvYmplY3RW
YWx1ZSk7CisgICAgRVhQRUNUX0VRKG9iamVjdFZhbHVlLT5zaXplKCksIDBVKTsKIAogICAgIGFy
cmF5LT5wdXNoQXJyYXkoSlNPTjo6QXJyYXk6OmNyZWF0ZSgpKTsKICAgICBFWFBFQ1RfRVEoYXJy
YXktPmxlbmd0aCgpLCA3VSk7CiAgICAgdmFsdWUgPSBhcnJheS0+Z2V0KDYpOwogICAgIEVYUEVD
VF9UUlVFKHZhbHVlLT50eXBlKCkgPT0gSlNPTjo6VmFsdWU6OlR5cGU6OkFycmF5KTsKLSAgICBS
ZWZQdHI8SlNPTjo6QXJyYXk+IGFycmF5VmFsdWU7Ci0gICAgRVhQRUNUX1RSVUUodmFsdWUtPmFz
QXJyYXkoYXJyYXlWYWx1ZSkpOworICAgIGF1dG8gYXJyYXlWYWx1ZSA9IHZhbHVlLT5hc0FycmF5
KCk7CisgICAgRVhQRUNUX1RSVUUoYXJyYXlWYWx1ZSk7CiAgICAgRVhQRUNUX0VRKGFycmF5VmFs
dWUtPmxlbmd0aCgpLCAwVSk7CiAKICAgICBhdXRvIGl0ID0gYXJyYXktPmJlZ2luKCk7CkBAIC0y
NTEsNDAgKzIzNyw0MCBAQCBURVNUKEpTT05BcnJheU9mLCBCYXNpYykKICAgICBFWFBFQ1RfRVEo
YXJyYXktPmxlbmd0aCgpLCAyVSk7CiAgICAgdmFsdWUgPSBhcnJheS0+Z2V0KDEpOwogICAgIEVY
UEVDVF9UUlVFKHZhbHVlLT50eXBlKCkgPT0gSlNPTjo6VmFsdWU6OlR5cGU6OkludGVnZXIpOwot
ICAgIGludCBpbnRlZ2VyVmFsdWU7Ci0gICAgRVhQRUNUX1RSVUUodmFsdWUtPmFzSW50ZWdlcihp
bnRlZ2VyVmFsdWUpKTsKLSAgICBFWFBFQ1RfRVEoaW50ZWdlclZhbHVlLCAxKTsKKyAgICBhdXRv
IGludGVnZXJWYWx1ZSA9IHZhbHVlLT5hc0ludGVnZXIoKTsKKyAgICBFWFBFQ1RfVFJVRShpbnRl
Z2VyVmFsdWUpOworICAgIEVYUEVDVF9FUSgqaW50ZWdlclZhbHVlLCAxKTsKIAogICAgIGFycmF5
LT5hZGRJdGVtKDEuNSk7CiAgICAgRVhQRUNUX0VRKGFycmF5LT5sZW5ndGgoKSwgM1UpOwogICAg
IHZhbHVlID0gYXJyYXktPmdldCgyKTsKICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+dHlwZSgpID09
IEpTT046OlZhbHVlOjpUeXBlOjpEb3VibGUpOwotICAgIGRvdWJsZSBkb3VibGVWYWx1ZTsKLSAg
ICBFWFBFQ1RfVFJVRSh2YWx1ZS0+YXNEb3VibGUoZG91YmxlVmFsdWUpKTsKLSAgICBFWFBFQ1Rf
RVEoZG91YmxlVmFsdWUsIDEuNSk7CisgICAgYXV0byBkb3VibGVWYWx1ZSA9IHZhbHVlLT5hc0Rv
dWJsZSgpOworICAgIEVYUEVDVF9UUlVFKGRvdWJsZVZhbHVlKTsKKyAgICBFWFBFQ1RfRVEoKmRv
dWJsZVZhbHVlLCAxLjUpOwogCiAgICAgYXJyYXktPmFkZEl0ZW0oIndlYmtpdCIpOwogICAgIEVY
UEVDVF9FUShhcnJheS0+bGVuZ3RoKCksIDRVKTsKICAgICB2YWx1ZSA9IGFycmF5LT5nZXQoMyk7
CiAgICAgRVhQRUNUX1RSVUUodmFsdWUtPnR5cGUoKSA9PSBKU09OOjpWYWx1ZTo6VHlwZTo6U3Ry
aW5nKTsKLSAgICBTdHJpbmcgc3RyaW5nVmFsdWU7Ci0gICAgRVhQRUNUX1RSVUUodmFsdWUtPmFz
U3RyaW5nKHN0cmluZ1ZhbHVlKSk7CisgICAgYXV0byBzdHJpbmdWYWx1ZSA9IHZhbHVlLT5hc1N0
cmluZygpOworICAgIEVYUEVDVF9UUlVFKCEhc3RyaW5nVmFsdWUpOwogICAgIEVYUEVDVF9FUShz
dHJpbmdWYWx1ZSwgIndlYmtpdCIpOwogCiAgICAgYXJyYXktPmFkZEl0ZW0oSlNPTjo6T2JqZWN0
OjpjcmVhdGUoKSk7CiAgICAgRVhQRUNUX0VRKGFycmF5LT5sZW5ndGgoKSwgNVUpOwogICAgIHZh
bHVlID0gYXJyYXktPmdldCg0KTsKICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+dHlwZSgpID09IEpT
T046OlZhbHVlOjpUeXBlOjpPYmplY3QpOwotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG9iamVj
dFZhbHVlOwotICAgIEVYUEVDVF9UUlVFKHZhbHVlLT5hc09iamVjdChvYmplY3RWYWx1ZSkpOwot
ICAgIEVYUEVDVF9FUShvYmplY3RWYWx1ZS0+c2l6ZSgpLCAwKTsKKyAgICBhdXRvIG9iamVjdFZh
bHVlID0gdmFsdWUtPmFzT2JqZWN0KCk7CisgICAgRVhQRUNUX1RSVUUob2JqZWN0VmFsdWUpOwor
ICAgIEVYUEVDVF9FUShvYmplY3RWYWx1ZS0+c2l6ZSgpLCAwVSk7CiAKICAgICBhcnJheS0+YWRk
SXRlbShKU09OOjpBcnJheTo6Y3JlYXRlKCkpOwogICAgIEVYUEVDVF9FUShhcnJheS0+bGVuZ3Ro
KCksIDZVKTsKICAgICB2YWx1ZSA9IGFycmF5LT5nZXQoNSk7CiAgICAgRVhQRUNUX1RSVUUodmFs
dWUtPnR5cGUoKSA9PSBKU09OOjpWYWx1ZTo6VHlwZTo6QXJyYXkpOwotICAgIFJlZlB0cjxKU09O
OjpBcnJheT4gYXJyYXlWYWx1ZTsKLSAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+YXNBcnJheShhcnJh
eVZhbHVlKSk7CisgICAgYXV0byBhcnJheVZhbHVlID0gdmFsdWUtPmFzQXJyYXkoKTsKKyAgICBF
WFBFQ1RfVFJVRShhcnJheVZhbHVlKTsKICAgICBFWFBFQ1RfRVEoYXJyYXlWYWx1ZS0+bGVuZ3Ro
KCksIDBVKTsKIAogICAgIGF1dG8gaXQgPSBhcnJheS0+YmVnaW4oKTsKQEAgLTMyNCw0NSArMzEw
LDQ1IEBAIFRFU1QoSlNPTk9iamVjdCwgQmFzaWMpCiAgICAgUmVmPEpTT046Ok9iamVjdD4gb2Jq
ZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKIAogICAgIG9iamVjdC0+c2V0VmFsdWUoIm51
bGwiLCBKU09OOjpWYWx1ZTo6bnVsbCgpKTsKLSAgICBFWFBFQ1RfRVEob2JqZWN0LT5zaXplKCks
IDEpOwotICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gdmFsdWU7Ci0gICAgRVhQRUNUX1RSVUUob2Jq
ZWN0LT5nZXRWYWx1ZSgibnVsbCIsIHZhbHVlKSk7CisgICAgRVhQRUNUX0VRKG9iamVjdC0+c2l6
ZSgpLCAxVSk7CisgICAgYXV0byB2YWx1ZSA9IG9iamVjdC0+Z2V0VmFsdWUoIm51bGwiKTsKKyAg
ICBFWFBFQ1RfVFJVRSh2YWx1ZSk7CiAgICAgRVhQRUNUX1RSVUUodmFsdWUtPmlzTnVsbCgpKTsK
IAogICAgIG9iamVjdC0+c2V0Qm9vbGVhbigiYm9vbGVhbiIsIHRydWUpOwotICAgIEVYUEVDVF9F
UShvYmplY3QtPnNpemUoKSwgMik7Ci0gICAgYm9vbCBib29sZWFuVmFsdWU7Ci0gICAgRVhQRUNU
X1RSVUUob2JqZWN0LT5nZXRCb29sZWFuKCJib29sZWFuIiwgYm9vbGVhblZhbHVlKSk7Ci0gICAg
RVhQRUNUX0VRKGJvb2xlYW5WYWx1ZSwgdHJ1ZSk7CisgICAgRVhQRUNUX0VRKG9iamVjdC0+c2l6
ZSgpLCAyVSk7CisgICAgYXV0byBib29sZWFuVmFsdWUgPSBvYmplY3QtPmdldEJvb2xlYW4oImJv
b2xlYW4iKTsKKyAgICBFWFBFQ1RfVFJVRShib29sZWFuVmFsdWUpOworICAgIEVYUEVDVF9FUSgq
Ym9vbGVhblZhbHVlLCB0cnVlKTsKIAogICAgIG9iamVjdC0+c2V0SW50ZWdlcigiaW50ZWdlciIs
IDEpOwotICAgIEVYUEVDVF9FUShvYmplY3QtPnNpemUoKSwgMyk7Ci0gICAgaW50IGludGVnZXJW
YWx1ZTsKLSAgICBFWFBFQ1RfVFJVRShvYmplY3QtPmdldEludGVnZXIoImludGVnZXIiLCBpbnRl
Z2VyVmFsdWUpKTsKLSAgICBFWFBFQ1RfRVEoaW50ZWdlclZhbHVlLCAxKTsKKyAgICBFWFBFQ1Rf
RVEob2JqZWN0LT5zaXplKCksIDNVKTsKKyAgICBhdXRvIGludGVnZXJWYWx1ZSA9IG9iamVjdC0+
Z2V0SW50ZWdlcigiaW50ZWdlciIpOworICAgIEVYUEVDVF9UUlVFKGludGVnZXJWYWx1ZSk7Cisg
ICAgRVhQRUNUX0VRKCppbnRlZ2VyVmFsdWUsIDEpOwogCiAgICAgb2JqZWN0LT5zZXREb3VibGUo
ImRvdWJsZSIsIDEuNSk7Ci0gICAgRVhQRUNUX0VRKG9iamVjdC0+c2l6ZSgpLCA0KTsKLSAgICBk
b3VibGUgZG91YmxlVmFsdWU7Ci0gICAgRVhQRUNUX1RSVUUob2JqZWN0LT5nZXREb3VibGUoImRv
dWJsZSIsIGRvdWJsZVZhbHVlKSk7Ci0gICAgRVhQRUNUX0VRKGRvdWJsZVZhbHVlLCAxLjUpOwor
ICAgIEVYUEVDVF9FUShvYmplY3QtPnNpemUoKSwgNFUpOworICAgIGF1dG8gZG91YmxlVmFsdWUg
PSBvYmplY3QtPmdldERvdWJsZSgiZG91YmxlIik7CisgICAgRVhQRUNUX1RSVUUoZG91YmxlVmFs
dWUpOworICAgIEVYUEVDVF9FUSgqZG91YmxlVmFsdWUsIDEuNSk7CiAKICAgICBvYmplY3QtPnNl
dFN0cmluZygic3RyaW5nIiwgIndlYmtpdCIpOwotICAgIEVYUEVDVF9FUShvYmplY3QtPnNpemUo
KSwgNSk7Ci0gICAgU3RyaW5nIHN0cmluZ1ZhbHVlOwotICAgIEVYUEVDVF9UUlVFKG9iamVjdC0+
Z2V0U3RyaW5nKCJzdHJpbmciLCBzdHJpbmdWYWx1ZSkpOworICAgIEVYUEVDVF9FUShvYmplY3Qt
PnNpemUoKSwgNVUpOworICAgIGF1dG8gc3RyaW5nVmFsdWUgPSBvYmplY3QtPmdldFN0cmluZygi
c3RyaW5nIik7CisgICAgRVhQRUNUX1RSVUUoISFzdHJpbmdWYWx1ZSk7CiAgICAgRVhQRUNUX0VR
KHN0cmluZ1ZhbHVlLCAid2Via2l0Iik7CiAKICAgICBvYmplY3QtPnNldE9iamVjdCgib2JqZWN0
IiwgSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSk7Ci0gICAgRVhQRUNUX0VRKG9iamVjdC0+c2l6ZSgp
LCA2KTsKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBvYmplY3RWYWx1ZTsKLSAgICBFWFBFQ1Rf
VFJVRShvYmplY3QtPmdldE9iamVjdCgib2JqZWN0Iiwgb2JqZWN0VmFsdWUpKTsKLSAgICBFWFBF
Q1RfRVEob2JqZWN0VmFsdWUtPnNpemUoKSwgMCk7CisgICAgRVhQRUNUX0VRKG9iamVjdC0+c2l6
ZSgpLCA2VSk7CisgICAgYXV0byBvYmplY3RWYWx1ZSA9IG9iamVjdC0+Z2V0T2JqZWN0KCJvYmpl
Y3QiKTsKKyAgICBFWFBFQ1RfVFJVRShvYmplY3RWYWx1ZSk7CisgICAgRVhQRUNUX0VRKG9iamVj
dFZhbHVlLT5zaXplKCksIDBVKTsKIAogICAgIG9iamVjdC0+c2V0QXJyYXkoImFycmF5IiwgSlNP
Tjo6QXJyYXk6OmNyZWF0ZSgpKTsKLSAgICBFWFBFQ1RfRVEob2JqZWN0LT5zaXplKCksIDcpOwot
ICAgIFJlZlB0cjxKU09OOjpBcnJheT4gYXJyYXlWYWx1ZTsKLSAgICBFWFBFQ1RfVFJVRShvYmpl
Y3QtPmdldEFycmF5KCJhcnJheSIsIGFycmF5VmFsdWUpKTsKKyAgICBFWFBFQ1RfRVEob2JqZWN0
LT5zaXplKCksIDdVKTsKKyAgICBhdXRvIGFycmF5VmFsdWUgPSBvYmplY3QtPmdldEFycmF5KCJh
cnJheSIpOworICAgIEVYUEVDVF9UUlVFKGFycmF5VmFsdWUpOwogICAgIEVYUEVDVF9FUShhcnJh
eVZhbHVlLT5sZW5ndGgoKSwgMFUpOwogCiAgICAgVmVjdG9yPGNvbnN0IGNoYXIqPiBrZXlzID0g
eyAibnVsbCIsICJib29sZWFuIiwgImludGVnZXIiLCAiZG91YmxlIiwgInN0cmluZyIsICJvYmpl
Y3QiLCAiYXJyYXkiIH07CkBAIC0zNzYsMzEgKzM2MiwzMSBAQCBURVNUKEpTT05PYmplY3QsIEJh
c2ljKQogICAgIEVYUEVDVF9UUlVFKGtleXMuaXNFbXB0eSgpKTsKIAogICAgIG9iamVjdC0+cmVt
b3ZlKCJudWxsIik7Ci0gICAgRVhQRUNUX0VRKG9iamVjdC0+c2l6ZSgpLCA2KTsKKyAgICBFWFBF
Q1RfRVEob2JqZWN0LT5zaXplKCksIDZVKTsKICAgICBFWFBFQ1RfVFJVRShvYmplY3QtPmZpbmQo
Im51bGwiKSA9PSBvYmplY3QtPmVuZCgpKTsKIAogICAgIG9iamVjdC0+cmVtb3ZlKCJib29sZWFu
Iik7Ci0gICAgRVhQRUNUX0VRKG9iamVjdC0+c2l6ZSgpLCA1KTsKKyAgICBFWFBFQ1RfRVEob2Jq
ZWN0LT5zaXplKCksIDVVKTsKICAgICBFWFBFQ1RfVFJVRShvYmplY3QtPmZpbmQoImJvb2xlYW4i
KSA9PSBvYmplY3QtPmVuZCgpKTsKIAogICAgIG9iamVjdC0+cmVtb3ZlKCJpbnRlZ2VyIik7Ci0g
ICAgRVhQRUNUX0VRKG9iamVjdC0+c2l6ZSgpLCA0KTsKKyAgICBFWFBFQ1RfRVEob2JqZWN0LT5z
aXplKCksIDRVKTsKICAgICBFWFBFQ1RfVFJVRShvYmplY3QtPmZpbmQoImludGVnZXIiKSA9PSBv
YmplY3QtPmVuZCgpKTsKIAogICAgIG9iamVjdC0+cmVtb3ZlKCJkb3VibGUiKTsKLSAgICBFWFBF
Q1RfRVEob2JqZWN0LT5zaXplKCksIDMpOworICAgIEVYUEVDVF9FUShvYmplY3QtPnNpemUoKSwg
M1UpOwogICAgIEVYUEVDVF9UUlVFKG9iamVjdC0+ZmluZCgiZG91YmxlIikgPT0gb2JqZWN0LT5l
bmQoKSk7CiAKICAgICBvYmplY3QtPnJlbW92ZSgic3RyaW5nIik7Ci0gICAgRVhQRUNUX0VRKG9i
amVjdC0+c2l6ZSgpLCAyKTsKKyAgICBFWFBFQ1RfRVEob2JqZWN0LT5zaXplKCksIDJVKTsKICAg
ICBFWFBFQ1RfVFJVRShvYmplY3QtPmZpbmQoInN0cmluZyIpID09IG9iamVjdC0+ZW5kKCkpOwog
CiAgICAgb2JqZWN0LT5yZW1vdmUoIm9iamVjdCIpOwotICAgIEVYUEVDVF9FUShvYmplY3QtPnNp
emUoKSwgMSk7CisgICAgRVhQRUNUX0VRKG9iamVjdC0+c2l6ZSgpLCAxVSk7CiAgICAgRVhQRUNU
X1RSVUUob2JqZWN0LT5maW5kKCJvYmplY3QiKSA9PSBvYmplY3QtPmVuZCgpKTsKIAogICAgIG9i
amVjdC0+cmVtb3ZlKCJhcnJheSIpOwotICAgIEVYUEVDVF9FUShvYmplY3QtPnNpemUoKSwgMCk7
CisgICAgRVhQRUNUX0VRKG9iamVjdC0+c2l6ZSgpLCAwVSk7CiAgICAgRVhQRUNUX1RSVUUob2Jq
ZWN0LT5maW5kKCJhcnJheSIpID09IG9iamVjdC0+ZW5kKCkpOwogfQogCkBAIC00NzksMjAxICs0
NjUsMjA0IEBAIFRFU1QoSlNPTlZhbHVlLCBUb0pTT05TdHJpbmcpCiBURVNUKEpTT05WYWx1ZSwg
UGFyc2VKU09OKQogewogICAgIHsKLSAgICAgICAgUmVmUHRyPEpTT046OlZhbHVlPiB2YWx1ZTsK
LSAgICAgICAgRVhQRUNUX1RSVUUoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigibnVsbCIsIHZhbHVl
KSk7CisgICAgICAgIGF1dG8gdmFsdWUgPSBKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJudWxsIik7
CisgICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlKTsKICAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUt
PmlzTnVsbCgpKTsKICAgICB9CiAKICAgICB7Ci0gICAgICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4g
dmFsdWU7Ci0gICAgICAgIEVYUEVDVF9UUlVFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oInRydWUi
LCB2YWx1ZSkpOworICAgICAgICBhdXRvIHZhbHVlID0gSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigi
dHJ1ZSIpOworICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1ZSk7CiAgICAgICAgIEVYUEVDVF9UUlVF
KHZhbHVlLT50eXBlKCkgPT0gSlNPTjo6VmFsdWU6OlR5cGU6OkJvb2xlYW4pOwotICAgICAgICBi
b29sIGJvb2xlYW5WYWx1ZTsKLSAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUtPmFzQm9vbGVhbihi
b29sZWFuVmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX0VRKGJvb2xlYW5WYWx1ZSwgdHJ1ZSk7Cisg
ICAgICAgIGF1dG8gYm9vbGVhblZhbHVlID0gdmFsdWUtPmFzQm9vbGVhbigpOworICAgICAgICBF
WFBFQ1RfVFJVRShib29sZWFuVmFsdWUpOworICAgICAgICBFWFBFQ1RfRVEoKmJvb2xlYW5WYWx1
ZSwgdHJ1ZSk7CiAKLSAgICAgICAgRVhQRUNUX1RSVUUoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigi
ZmFsc2UiLCB2YWx1ZSkpOworICAgICAgICB2YWx1ZSA9IEpTT046OlZhbHVlOjpwYXJzZUpTT04o
ImZhbHNlIik7CisgICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlKTsKICAgICAgICAgRVhQRUNUX1RS
VUUodmFsdWUtPnR5cGUoKSA9PSBKU09OOjpWYWx1ZTo6VHlwZTo6Qm9vbGVhbik7Ci0gICAgICAg
IEVYUEVDVF9UUlVFKHZhbHVlLT5hc0Jvb2xlYW4oYm9vbGVhblZhbHVlKSk7Ci0gICAgICAgIEVY
UEVDVF9FUShib29sZWFuVmFsdWUsIGZhbHNlKTsKKyAgICAgICAgYm9vbGVhblZhbHVlID0gdmFs
dWUtPmFzQm9vbGVhbigpOworICAgICAgICBFWFBFQ1RfVFJVRShib29sZWFuVmFsdWUpOworICAg
ICAgICBFWFBFQ1RfRVEoKmJvb2xlYW5WYWx1ZSwgZmFsc2UpOwogICAgIH0KIAogICAgIHsKLSAg
ICAgICAgUmVmUHRyPEpTT046OlZhbHVlPiB2YWx1ZTsKLSAgICAgICAgRVhQRUNUX1RSVUUoSlNP
Tjo6VmFsdWU6OnBhcnNlSlNPTigiMSIsIHZhbHVlKSk7CisgICAgICAgIGF1dG8gdmFsdWUgPSBK
U09OOjpWYWx1ZTo6cGFyc2VKU09OKCIxIik7CisgICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlKTsK
ICAgICAgICAgLy8gTnVtYmVycyBhcmUgYWx3YXlzIHBhcnNlZCBhcyBkb3VibGUuCiAgICAgICAg
IEVYUEVDVF9UUlVFKHZhbHVlLT50eXBlKCkgPT0gSlNPTjo6VmFsdWU6OlR5cGU6OkRvdWJsZSk7
Ci0gICAgICAgIGRvdWJsZSBkb3VibGVWYWx1ZTsKLSAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUt
PmFzRG91YmxlKGRvdWJsZVZhbHVlKSk7Ci0gICAgICAgIEVYUEVDVF9FUShkb3VibGVWYWx1ZSwg
MS4wKTsKKyAgICAgICAgYXV0byBkb3VibGVWYWx1ZSA9IHZhbHVlLT5hc0RvdWJsZSgpOworICAg
ICAgICBFWFBFQ1RfVFJVRShkb3VibGVWYWx1ZSk7CisgICAgICAgIEVYUEVDVF9FUSgqZG91Ymxl
VmFsdWUsIDEuMCk7CiAKLSAgICAgICAgRVhQRUNUX1RSVUUoSlNPTjo6VmFsdWU6OnBhcnNlSlNP
TigiMS41IiwgdmFsdWUpKTsKKyAgICAgICAgdmFsdWUgPSBKU09OOjpWYWx1ZTo6cGFyc2VKU09O
KCIxLjUiKTsKKyAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUpOwogICAgICAgICBFWFBFQ1RfVFJV
RSh2YWx1ZS0+dHlwZSgpID09IEpTT046OlZhbHVlOjpUeXBlOjpEb3VibGUpOwotICAgICAgICBF
WFBFQ1RfVFJVRSh2YWx1ZS0+YXNEb3VibGUoZG91YmxlVmFsdWUpKTsKLSAgICAgICAgRVhQRUNU
X0VRKGRvdWJsZVZhbHVlLCAxLjUpOworICAgICAgICBkb3VibGVWYWx1ZSA9IHZhbHVlLT5hc0Rv
dWJsZSgpOworICAgICAgICBFWFBFQ1RfVFJVRShkb3VibGVWYWx1ZSk7CisgICAgICAgIEVYUEVD
VF9FUSgqZG91YmxlVmFsdWUsIDEuNSk7CiAgICAgfQogCiAgICAgewotICAgICAgICBSZWZQdHI8
SlNPTjo6VmFsdWU+IHZhbHVlOwotICAgICAgICBFWFBFQ1RfVFJVRShKU09OOjpWYWx1ZTo6cGFy
c2VKU09OKCJcInN0cmluZ1wiIiwgdmFsdWUpKTsKKyAgICAgICAgYXV0byB2YWx1ZSA9IEpTT046
OlZhbHVlOjpwYXJzZUpTT04oIlwic3RyaW5nXCIiKTsKKyAgICAgICAgRVhQRUNUX1RSVUUodmFs
dWUpOwogICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+dHlwZSgpID09IEpTT046OlZhbHVlOjpU
eXBlOjpTdHJpbmcpOwotICAgICAgICBTdHJpbmcgc3RyaW5nVmFsdWU7Ci0gICAgICAgIEVYUEVD
VF9UUlVFKHZhbHVlLT5hc1N0cmluZyhzdHJpbmdWYWx1ZSkpOworICAgICAgICBhdXRvIHN0cmlu
Z1ZhbHVlID0gdmFsdWUtPmFzU3RyaW5nKCk7CisgICAgICAgIEVYUEVDVF9UUlVFKCEhc3RyaW5n
VmFsdWUpOwogICAgICAgICBFWFBFQ1RfRVEoc3RyaW5nVmFsdWUsICJzdHJpbmciKTsKICAgICB9
CiAKICAgICB7Ci0gICAgICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gdmFsdWU7Ci0gICAgICAgIEVY
UEVDVF9UUlVFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIltdIiwgdmFsdWUpKTsKKyAgICAgICAg
YXV0byB2YWx1ZSA9IEpTT046OlZhbHVlOjpwYXJzZUpTT04oIltdIik7CisgICAgICAgIEVYUEVD
VF9UUlVFKHZhbHVlKTsKICAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUtPnR5cGUoKSA9PSBKU09O
OjpWYWx1ZTo6VHlwZTo6QXJyYXkpOwotICAgICAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IGFycmF5
VmFsdWU7Ci0gICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlLT5hc0FycmF5KGFycmF5VmFsdWUpKTsK
KyAgICAgICAgYXV0byBhcnJheVZhbHVlID0gdmFsdWUtPmFzQXJyYXkoKTsKKyAgICAgICAgRVhQ
RUNUX1RSVUUoYXJyYXlWYWx1ZSk7CiAgICAgICAgIEVYUEVDVF9FUShhcnJheVZhbHVlLT5sZW5n
dGgoKSwgMFUpOwogCi0gICAgICAgIEVYUEVDVF9UUlVFKEpTT046OlZhbHVlOjpwYXJzZUpTT04o
IltudWxsLCAxICwyLjUsW3tcImZvb1wiOlwiYmFyXCJ9LHtcImJhelwiOmZhbHNlfV0sXCJ3ZWJr
aXRcIl0iLCB2YWx1ZSkpOworICAgICAgICB2YWx1ZSA9IEpTT046OlZhbHVlOjpwYXJzZUpTT04o
IltudWxsLCAxICwyLjUsW3tcImZvb1wiOlwiYmFyXCJ9LHtcImJhelwiOmZhbHNlfV0sXCJ3ZWJr
aXRcIl0iKTsKKyAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUpOwogICAgICAgICBFWFBFQ1RfVFJV
RSh2YWx1ZS0+dHlwZSgpID09IEpTT046OlZhbHVlOjpUeXBlOjpBcnJheSk7Ci0gICAgICAgIEVY
UEVDVF9UUlVFKHZhbHVlLT5hc0FycmF5KGFycmF5VmFsdWUpKTsKKyAgICAgICAgYXJyYXlWYWx1
ZSA9IHZhbHVlLT5hc0FycmF5KCk7CisgICAgICAgIEVYUEVDVF9UUlVFKGFycmF5VmFsdWUpOwog
ICAgICAgICBFWFBFQ1RfRVEoYXJyYXlWYWx1ZS0+bGVuZ3RoKCksIDVVKTsKICAgICAgICAgYXV0
byBpdCA9IGFycmF5VmFsdWUtPmJlZ2luKCk7Ci0gICAgICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4g
aXRlbVZhbHVlID0gaXQtPmdldCgpOwotICAgICAgICBFWFBFQ1RfVFJVRShpdGVtVmFsdWUtPnR5
cGUoKSA9PSBKU09OOjpWYWx1ZTo6VHlwZTo6TnVsbCk7CisgICAgICAgIEVYUEVDVF9UUlVFKCgq
aXQpLT50eXBlKCkgPT0gSlNPTjo6VmFsdWU6OlR5cGU6Ok51bGwpOwogICAgICAgICArK2l0Owog
ICAgICAgICBFWFBFQ1RfRkFMU0UoaXQgPT0gYXJyYXlWYWx1ZS0+ZW5kKCkpOwogCi0gICAgICAg
IGl0ZW1WYWx1ZSA9IGl0LT5nZXQoKTsKLSAgICAgICAgRVhQRUNUX1RSVUUoaXRlbVZhbHVlLT50
eXBlKCkgPT0gSlNPTjo6VmFsdWU6OlR5cGU6OkRvdWJsZSk7Ci0gICAgICAgIGludCBpbnRlZ2Vy
VmFsdWU7Ci0gICAgICAgIEVYUEVDVF9UUlVFKGl0ZW1WYWx1ZS0+YXNJbnRlZ2VyKGludGVnZXJW
YWx1ZSkpOwotICAgICAgICBFWFBFQ1RfRVEoaW50ZWdlclZhbHVlLCAxKTsKKyAgICAgICAgRVhQ
RUNUX1RSVUUoKCppdCktPnR5cGUoKSA9PSBKU09OOjpWYWx1ZTo6VHlwZTo6RG91YmxlKTsKKyAg
ICAgICAgYXV0byBpbnRlZ2VyVmFsdWUgPSAoKml0KS0+YXNJbnRlZ2VyKCk7CisgICAgICAgIEVY
UEVDVF9UUlVFKGludGVnZXJWYWx1ZSk7CisgICAgICAgIEVYUEVDVF9FUSgqaW50ZWdlclZhbHVl
LCAxKTsKICAgICAgICAgKytpdDsKICAgICAgICAgRVhQRUNUX0ZBTFNFKGl0ID09IGFycmF5VmFs
dWUtPmVuZCgpKTsKIAotICAgICAgICBpdGVtVmFsdWUgPSBpdC0+Z2V0KCk7Ci0gICAgICAgIEVY
UEVDVF9UUlVFKGl0ZW1WYWx1ZS0+dHlwZSgpID09IEpTT046OlZhbHVlOjpUeXBlOjpEb3VibGUp
OwotICAgICAgICBkb3VibGUgZG91YmxlVmFsdWU7Ci0gICAgICAgIEVYUEVDVF9UUlVFKGl0ZW1W
YWx1ZS0+YXNEb3VibGUoZG91YmxlVmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX0VRKGRvdWJsZVZh
bHVlLCAyLjUpOworICAgICAgICBFWFBFQ1RfVFJVRSgoKml0KS0+dHlwZSgpID09IEpTT046OlZh
bHVlOjpUeXBlOjpEb3VibGUpOworICAgICAgICBhdXRvIGRvdWJsZVZhbHVlID0gKCppdCktPmFz
RG91YmxlKCk7CisgICAgICAgIEVYUEVDVF9UUlVFKGRvdWJsZVZhbHVlKTsKKyAgICAgICAgRVhQ
RUNUX0VRKCpkb3VibGVWYWx1ZSwgMi41KTsKICAgICAgICAgKytpdDsKICAgICAgICAgRVhQRUNU
X0ZBTFNFKGl0ID09IGFycmF5VmFsdWUtPmVuZCgpKTsKIAotICAgICAgICBpdGVtVmFsdWUgPSBp
dC0+Z2V0KCk7Ci0gICAgICAgIEVYUEVDVF9UUlVFKGl0ZW1WYWx1ZS0+dHlwZSgpID09IEpTT046
OlZhbHVlOjpUeXBlOjpBcnJheSk7Ci0gICAgICAgIFJlZlB0cjxKU09OOjpBcnJheT4gc3ViQXJy
YXlWYWx1ZTsKLSAgICAgICAgRVhQRUNUX1RSVUUoaXRlbVZhbHVlLT5hc0FycmF5KHN1YkFycmF5
VmFsdWUpKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoKCppdCktPnR5cGUoKSA9PSBKU09OOjpWYWx1
ZTo6VHlwZTo6QXJyYXkpOworICAgICAgICBhdXRvIHN1YkFycmF5VmFsdWUgPSAoKml0KS0+YXNB
cnJheSgpOworICAgICAgICBFWFBFQ1RfVFJVRShzdWJBcnJheVZhbHVlKTsKICAgICAgICAgRVhQ
RUNUX0VRKHN1YkFycmF5VmFsdWUtPmxlbmd0aCgpLCAyVSk7Ci0gICAgICAgIFJlZlB0cjxKU09O
OjpWYWx1ZT4gb2JqZWN0VmFsdWUgPSBzdWJBcnJheVZhbHVlLT5nZXQoMCk7CisgICAgICAgIGF1
dG8gb2JqZWN0VmFsdWUgPSBzdWJBcnJheVZhbHVlLT5nZXQoMCk7CiAgICAgICAgIEVYUEVDVF9U
UlVFKG9iamVjdFZhbHVlLT50eXBlKCkgPT0gSlNPTjo6VmFsdWU6OlR5cGU6Ok9iamVjdCk7Ci0g
ICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG9iamVjdDsKLSAgICAgICAgRVhQRUNUX1RSVUUo
b2JqZWN0VmFsdWUtPmFzT2JqZWN0KG9iamVjdCkpOwotICAgICAgICBFWFBFQ1RfRVEob2JqZWN0
LT5zaXplKCksIDEpOwotICAgICAgICBTdHJpbmcgc3RyaW5nVmFsdWU7Ci0gICAgICAgIEVYUEVD
VF9UUlVFKG9iamVjdC0+Z2V0U3RyaW5nKCJmb28iLCBzdHJpbmdWYWx1ZSkpOworICAgICAgICBh
dXRvIG9iamVjdCA9IG9iamVjdFZhbHVlLT5hc09iamVjdCgpOworICAgICAgICBFWFBFQ1RfVFJV
RShvYmplY3QpOworICAgICAgICBFWFBFQ1RfRVEob2JqZWN0LT5zaXplKCksIDFVKTsKKyAgICAg
ICAgYXV0byBzdHJpbmdWYWx1ZSA9IG9iamVjdC0+Z2V0U3RyaW5nKCJmb28iKTsKKyAgICAgICAg
RVhQRUNUX1RSVUUoISFzdHJpbmdWYWx1ZSk7CiAgICAgICAgIEVYUEVDVF9FUShzdHJpbmdWYWx1
ZSwgImJhciIpOwogICAgICAgICBvYmplY3RWYWx1ZSA9IHN1YkFycmF5VmFsdWUtPmdldCgxKTsK
ICAgICAgICAgRVhQRUNUX1RSVUUob2JqZWN0VmFsdWUtPnR5cGUoKSA9PSBKU09OOjpWYWx1ZTo6
VHlwZTo6T2JqZWN0KTsKLSAgICAgICAgRVhQRUNUX1RSVUUob2JqZWN0VmFsdWUtPmFzT2JqZWN0
KG9iamVjdCkpOwotICAgICAgICBFWFBFQ1RfRVEob2JqZWN0LT5zaXplKCksIDEpOwotICAgICAg
ICBib29sIGJvb2xlYW5WYWx1ZTsKLSAgICAgICAgRVhQRUNUX1RSVUUob2JqZWN0LT5nZXRCb29s
ZWFuKCJiYXoiLCBib29sZWFuVmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX0VRKGJvb2xlYW5WYWx1
ZSwgZmFsc2UpOworICAgICAgICBvYmplY3QgPW9iamVjdFZhbHVlLT5hc09iamVjdCgpOworICAg
ICAgICBFWFBFQ1RfVFJVRShvYmplY3QpOworICAgICAgICBFWFBFQ1RfRVEob2JqZWN0LT5zaXpl
KCksIDFVKTsKKyAgICAgICAgYXV0byBib29sZWFuVmFsdWUgPSBvYmplY3QtPmdldEJvb2xlYW4o
ImJheiIpOworICAgICAgICBFWFBFQ1RfVFJVRShib29sZWFuVmFsdWUpOworICAgICAgICBFWFBF
Q1RfRVEoKmJvb2xlYW5WYWx1ZSwgZmFsc2UpOwogICAgICAgICArK2l0OwogICAgICAgICBFWFBF
Q1RfRkFMU0UoaXQgPT0gYXJyYXlWYWx1ZS0+ZW5kKCkpOwogCi0gICAgICAgIGl0ZW1WYWx1ZSA9
IGl0LT5nZXQoKTsKLSAgICAgICAgRVhQRUNUX1RSVUUoaXRlbVZhbHVlLT50eXBlKCkgPT0gSlNP
Tjo6VmFsdWU6OlR5cGU6OlN0cmluZyk7Ci0gICAgICAgIEVYUEVDVF9UUlVFKGl0ZW1WYWx1ZS0+
YXNTdHJpbmcoc3RyaW5nVmFsdWUpKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoKCppdCktPnR5cGUo
KSA9PSBKU09OOjpWYWx1ZTo6VHlwZTo6U3RyaW5nKTsKKyAgICAgICAgc3RyaW5nVmFsdWUgPSAo
Kml0KS0+YXNTdHJpbmcoKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoISFzdHJpbmdWYWx1ZSk7CiAg
ICAgICAgIEVYUEVDVF9FUShzdHJpbmdWYWx1ZSwgIndlYmtpdCIpOwogICAgICAgICArK2l0Owog
ICAgICAgICBFWFBFQ1RfVFJVRShpdCA9PSBhcnJheVZhbHVlLT5lbmQoKSk7CiAgICAgfQogCiAg
ICAgewotICAgICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHZhbHVlOwotICAgICAgICBFWFBFQ1Rf
VFJVRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJ7fSIsIHZhbHVlKSk7CisgICAgICAgIGF1dG8g
dmFsdWUgPSBKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJ7fSIpOworICAgICAgICBFWFBFQ1RfVFJV
RSh2YWx1ZSk7CiAgICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlLT50eXBlKCkgPT0gSlNPTjo6VmFs
dWU6OlR5cGU6Ok9iamVjdCk7Ci0gICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG9iamVjdFZh
bHVlOwotICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+YXNPYmplY3Qob2JqZWN0VmFsdWUpKTsK
LSAgICAgICAgRVhQRUNUX0VRKG9iamVjdFZhbHVlLT5zaXplKCksIDApOworICAgICAgICBhdXRv
IG9iamVjdFZhbHVlID0gdmFsdWUtPmFzT2JqZWN0KCk7CisgICAgICAgIEVYUEVDVF9UUlVFKG9i
amVjdFZhbHVlKTsKKyAgICAgICAgRVhQRUNUX0VRKG9iamVjdFZhbHVlLT5zaXplKCksIDBVKTsK
IAotICAgICAgICBFWFBFQ1RfVFJVRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJ7XCJmb29cIjog
XCJiYXJcIiwgXCJiYXpcIjoge1wic3ViXCI6W251bGwsZmFsc2VdfX0iLCB2YWx1ZSkpOworICAg
ICAgICB2YWx1ZSA9IEpTT046OlZhbHVlOjpwYXJzZUpTT04oIntcImZvb1wiOiBcImJhclwiLCBc
ImJhelwiOiB7XCJzdWJcIjpbbnVsbCxmYWxzZV19fSIpOworICAgICAgICBFWFBFQ1RfVFJVRSh2
YWx1ZSk7CiAgICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlLT50eXBlKCkgPT0gSlNPTjo6VmFsdWU6
OlR5cGU6Ok9iamVjdCk7Ci0gICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlLT5hc09iamVjdChvYmpl
Y3RWYWx1ZSkpOwotICAgICAgICBFWFBFQ1RfRVEob2JqZWN0VmFsdWUtPnNpemUoKSwgMik7Cisg
ICAgICAgIG9iamVjdFZhbHVlID0gdmFsdWUtPmFzT2JqZWN0KCk7CisgICAgICAgIEVYUEVDVF9U
UlVFKG9iamVjdFZhbHVlKTsKKyAgICAgICAgRVhQRUNUX0VRKG9iamVjdFZhbHVlLT5zaXplKCks
IDJVKTsKIAotICAgICAgICBTdHJpbmcgc3RyaW5nVmFsdWU7Ci0gICAgICAgIEVYUEVDVF9UUlVF
KG9iamVjdFZhbHVlLT5nZXRTdHJpbmcoImZvbyIsIHN0cmluZ1ZhbHVlKSk7CisgICAgICAgIGF1
dG8gc3RyaW5nVmFsdWUgPSBvYmplY3RWYWx1ZS0+Z2V0U3RyaW5nKCJmb28iKTsKKyAgICAgICAg
RVhQRUNUX1RSVUUoISFzdHJpbmdWYWx1ZSk7CiAgICAgICAgIEVYUEVDVF9FUShzdHJpbmdWYWx1
ZSwgImJhciIpOwogCi0gICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG9iamVjdDsKLSAgICAg
ICAgRVhQRUNUX1RSVUUob2JqZWN0VmFsdWUtPmdldE9iamVjdCgiYmF6Iiwgb2JqZWN0KSk7Ci0g
ICAgICAgIEVYUEVDVF9FUShvYmplY3QtPnNpemUoKSwgMSk7Ci0gICAgICAgIFJlZlB0cjxKU09O
OjpBcnJheT4gYXJyYXk7Ci0gICAgICAgIEVYUEVDVF9UUlVFKG9iamVjdC0+Z2V0QXJyYXkoInN1
YiIsIGFycmF5KSk7CisgICAgICAgIGF1dG8gb2JqZWN0ID0gb2JqZWN0VmFsdWUtPmdldE9iamVj
dCgiYmF6Iik7CisgICAgICAgIEVYUEVDVF9UUlVFKG9iamVjdCk7CisgICAgICAgIEVYUEVDVF9F
UShvYmplY3QtPnNpemUoKSwgMVUpOworICAgICAgICBhdXRvIGFycmF5ID0gb2JqZWN0LT5nZXRB
cnJheSgic3ViIik7CisgICAgICAgIEVYUEVDVF9UUlVFKGFycmF5KTsKICAgICAgICAgRVhQRUNU
X0VRKGFycmF5LT5sZW5ndGgoKSwgMlUpOwogICAgIH0KIAogICAgIHsKLSAgICAgICAgUmVmUHRy
PEpTT046OlZhbHVlPiB2YWx1ZTsKLSAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpw
YXJzZUpTT04oIiwiLCB2YWx1ZSkpOwotICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6
OnBhcnNlSlNPTigiXCJmb28iLCB2YWx1ZSkpOwotICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6
VmFsdWU6OnBhcnNlSlNPTigiZm9vXCIiLCB2YWx1ZSkpOwotICAgICAgICBFWFBFQ1RfRkFMU0Uo
SlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiVHJVZSIsIHZhbHVlKSk7Ci0gICAgICAgIEVYUEVDVF9G
QUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJGYWxzZSIsIHZhbHVlKSk7Ci0gICAgICAgIEVY
UEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCIxLmQiLCB2YWx1ZSkpOwotICAgICAg
ICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiWzEsXSIsIHZhbHVlKSk7Ci0g
ICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCIxLDJdIiwgdmFsdWUp
KTsKLSAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIlsxLDIiLCB2
YWx1ZSkpOwotICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiWzEg
Ml0iLCB2YWx1ZSkpOwotICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNP
TigiWzEsMl1dIiwgdmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpw
YXJzZUpTT04oIlsxLDJdLCIsIHZhbHVlKSk7Ci0gICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpW
YWx1ZTo6cGFyc2VKU09OKCJ7Zm9vOlwiYmFyXCJ9IiwgdmFsdWUpKTsKLSAgICAgICAgRVhQRUNU
X0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIntcImZvb1wiOmJhcn0iLCB2YWx1ZSkpOwot
ICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigie1wiZm9vOlwiYmFy
XCJ9IiwgdmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpT
T04oIntmb29cIjpcImJhclwifSIsIHZhbHVlKSk7Ci0gICAgICAgIEVYUEVDVF9GQUxTRShKU09O
OjpWYWx1ZTo6cGFyc2VKU09OKCJ7e1wiZm9vXCI6XCJiYXJcIn19IiwgdmFsdWUpKTsKLSAgICAg
ICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIntcImZvb1wiOlwiYmFyXCJ9
LCIsIHZhbHVlKSk7Ci0gICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09O
KCJbe1wiZm9vXCI6XCJiYXJcIn0se1wiYmF6XCI6ZmFsc2V9LF0iLCB2YWx1ZSkpOwotICAgICAg
ICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiW3tcImZvb1wiOntcImJhelwi
OmZhbHNlfV0iLCB2YWx1ZSkpOworICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBh
cnNlSlNPTigiLCIpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpT
T04oIlwiZm9vIikpOworICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNP
TigiZm9vXCIiKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09O
KCJUclVlIikpOworICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigi
RmFsc2UiKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCIx
LmQiKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJbMSxd
IikpOworICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiMSwyXSIp
KTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIlsxLDIiKSk7
CisgICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJbMSAyXSIpKTsK
KyAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIlsxLDJdXSIpKTsK
KyAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIlsxLDJdLCIpKTsK
KyAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIntmb286XCJiYXJc
In0iKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJ7XCJm
b29cIjpiYXJ9IikpOworICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNP
Tigie1wiZm9vOlwiYmFyXCJ9IikpOworICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6
OnBhcnNlSlNPTigie2Zvb1wiOlwiYmFyXCJ9IikpOworICAgICAgICBFWFBFQ1RfRkFMU0UoSlNP
Tjo6VmFsdWU6OnBhcnNlSlNPTigie3tcImZvb1wiOlwiYmFyXCJ9fSIpKTsKKyAgICAgICAgRVhQ
RUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIntcImZvb1wiOlwiYmFyXCJ9LCIpKTsK
KyAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIlt7XCJmb29cIjpc
ImJhclwifSx7XCJiYXpcIjpmYWxzZX0sXSIpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046
OlZhbHVlOjpwYXJzZUpTT04oIlt7XCJmb29cIjp7XCJiYXpcIjpmYWxzZX1dIikpOwogICAgIH0K
IAogICAgIHsKLSAgICAgICAgUmVmUHRyPEpTT046OlZhbHVlPiB2YWx1ZTsKLSAgICAgICAgRVhQ
RUNUX1RSVUUoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiIFwiZm9vXCIgXG4iLCB2YWx1ZSkpOwot
ICAgICAgICBTdHJpbmcgc3RyaW5nVmFsdWU7Ci0gICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlLT5h
c1N0cmluZyhzdHJpbmdWYWx1ZSkpOworICAgICAgICBhdXRvIHZhbHVlID0gSlNPTjo6VmFsdWU6
OnBhcnNlSlNPTigiIFwiZm9vXCIgXG4iKTsKKyAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUpOwor
ICAgICAgICBhdXRvIHN0cmluZ1ZhbHVlID0gdmFsdWUtPmFzU3RyaW5nKCk7CisgICAgICAgIEVY
UEVDVF9UUlVFKCEhc3RyaW5nVmFsdWUpOwogICAgICAgICBFWFBFQ1RfRVEoImZvbyIsIHN0cmlu
Z1ZhbHVlKTsKICAgICB9CiAKICAgICB7Ci0gICAgICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gdmFs
dWU7Ci0gICAgICAgIEVYUEVDVF9UUlVFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIiAxIiwgdmFs
dWUpKTsKLSAgICAgICAgRVhQRUNUX1RSVUUoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiXHQxIiwg
dmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX1RSVUUoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiXG4x
IiwgdmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX1RSVUUoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigi
MSAiLCB2YWx1ZSkpOwotICAgICAgICBFWFBFQ1RfVFJVRShKU09OOjpWYWx1ZTo6cGFyc2VKU09O
KCIxXHQiLCB2YWx1ZSkpOwotICAgICAgICBFWFBFQ1RfVFJVRShKU09OOjpWYWx1ZTo6cGFyc2VK
U09OKCIxXG4iLCB2YWx1ZSkpOwotICAgICAgICBFWFBFQ1RfVFJVRShKU09OOjpWYWx1ZTo6cGFy
c2VKU09OKCIgMSAiLCB2YWx1ZSkpOwotICAgICAgICBFWFBFQ1RfVFJVRShKU09OOjpWYWx1ZTo6
cGFyc2VKU09OKCIge30gIiwgdmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX1RSVUUoSlNPTjo6VmFs
dWU6OnBhcnNlSlNPTigiIFtdICIsIHZhbHVlKSk7Ci0gICAgICAgIEVYUEVDVF9UUlVFKEpTT046
OlZhbHVlOjpwYXJzZUpTT04oIlwiXFx4RkZcIiIsIHZhbHVlKSk7Ci0gICAgICAgIEVYUEVDVF9U
UlVFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIlwiXFx1MTIzNFwiIiwgdmFsdWUpKTsKKyAgICAg
ICAgRVhQRUNUX1RSVUUoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiIDEiKSk7CisgICAgICAgIEVY
UEVDVF9UUlVFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIlx0MSIpKTsKKyAgICAgICAgRVhQRUNU
X1RSVUUoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiXG4xIikpOworICAgICAgICBFWFBFQ1RfVFJV
RShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCIxICIpKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoSlNP
Tjo6VmFsdWU6OnBhcnNlSlNPTigiMVx0IikpOworICAgICAgICBFWFBFQ1RfVFJVRShKU09OOjpW
YWx1ZTo6cGFyc2VKU09OKCIxXG4iKSk7CisgICAgICAgIEVYUEVDVF9UUlVFKEpTT046OlZhbHVl
OjpwYXJzZUpTT04oIiAxICIpKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoSlNPTjo6VmFsdWU6OnBh
cnNlSlNPTigiIHt9ICIpKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoSlNPTjo6VmFsdWU6OnBhcnNl
SlNPTigiIFtdICIpKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoSlNPTjo6VmFsdWU6OnBhcnNlSlNP
TigiXCJcXHhGRlwiIikpOworICAgICAgICBFWFBFQ1RfVFJVRShKU09OOjpWYWx1ZTo6cGFyc2VK
U09OKCJcIlxcdTEyMzRcIiIpKTsKIAotICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6
OnBhcnNlSlNPTigiMSAxIiwgdmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZh
bHVlOjpwYXJzZUpTT04oInt9IHt9IiwgdmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX0ZBTFNFKEpT
T046OlZhbHVlOjpwYXJzZUpTT04oIltdIFtdIiwgdmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX0ZB
TFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIlwiXFwiLCB2YWx1ZSkpOwotICAgICAgICBFWFBF
Q1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiXCJcXHhGIiwgdmFsdWUpKTsKLSAgICAg
ICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIlwiXFx4RlwiIiwgdmFsdWUp
KTsKLSAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIlwiXFx4RiBc
IiIsIHZhbHVlKSk7Ci0gICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09O
KCJcIlxcdTEiLCB2YWx1ZSkpOwotICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBh
cnNlSlNPTigiXCJcXHUxXCIiLCB2YWx1ZSkpOwotICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6
VmFsdWU6OnBhcnNlSlNPTigiXCJcXHUxICAgXCIiLCB2YWx1ZSkpOwotICAgICAgICBFWFBFQ1Rf
RkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiXCJcXHUxMiIsIHZhbHVlKSk7Ci0gICAgICAg
IEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJcIlxcdTEyXCIiLCB2YWx1ZSkp
OwotICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiXCJcXHUxMiAg
XCIiLCB2YWx1ZSkpOwotICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNP
TigiXCJcXHUxMjMiLCB2YWx1ZSkpOwotICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6
OnBhcnNlSlNPTigiXCJcXHUxMjNcIiIsIHZhbHVlKSk7Ci0gICAgICAgIEVYUEVDVF9GQUxTRShK
U09OOjpWYWx1ZTo6cGFyc2VKU09OKCJcIlxcdTEyMyBcIiIsIHZhbHVlKSk7CisgICAgICAgIEVY
UEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCIxIDEiKSk7CisgICAgICAgIEVYUEVD
VF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJ7fSB7fSIpKTsKKyAgICAgICAgRVhQRUNU
X0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIltdIFtdIikpOworICAgICAgICBFWFBFQ1Rf
RkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiXCJcXCIpKTsKKyAgICAgICAgRVhQRUNUX0ZB
TFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIlwiXFx4RiIpKTsKKyAgICAgICAgRVhQRUNUX0ZB
TFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIlwiXFx4RlwiIikpOworICAgICAgICBFWFBFQ1Rf
RkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiXCJcXHhGIFwiIikpOworICAgICAgICBFWFBF
Q1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiXCJcXHUxIikpOworICAgICAgICBFWFBF
Q1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiXCJcXHUxXCIiKSk7CisgICAgICAgIEVY
UEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJcIlxcdTEgICBcIiIpKTsKKyAgICAg
ICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIlwiXFx1MTIiKSk7CisgICAg
ICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJcIlxcdTEyXCIiKSk7Cisg
ICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJcIlxcdTEyICBcIiIp
KTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIlwiXFx1MTIz
IikpOworICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiXCJcXHUx
MjNcIiIpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIlwi
XFx1MTIzIFwiIikpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDdiZWE4YWQwZDMxNjNkY2IzNTllY2Ji
ZWJhNzVkMTY5YmI0Mzc0NzYuLjQ0MjIzNGYzNzgwN2FiM2IyYTI4M2YzODQxMzU4ZWJmZDNkZmRj
N2MgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAyMC0wOS0wOCAgRGV2aW4gUm91c3NvICA8ZHJv
dXNzb0BhcHBsZS5jb20+CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogbW9kZXJuaXplIGdlbmVy
YXRlZCBiYWNrZW5kIHByb3RvY29sIGNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIxNjMwMgorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNjg1NDc2
NDk+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBp
bnNwZWN0b3IvY2FudmFzL3JlcXVlc3RTaGFkZXJTb3VyY2UtZXhwZWN0ZWQudHh0OgorICAgICAg
ICAqIGluc3BlY3Rvci9jYW52YXMvdXBkYXRlU2hhZGVyLWV4cGVjdGVkLnR4dDoKKyAgICAgICAg
KiBpbnNwZWN0b3IvY29uc29sZS93ZWJjb3JlLWxvZ2dpbmctZXhwZWN0ZWQudHh0OgorICAgICAg
ICAqIGluc3BlY3Rvci9kb20vaGlnaGxpZ2h0UXVhZC1leHBlY3RlZC50eHQ6CisgICAgICAgICog
aW5zcGVjdG9yL3dvcmtlci9kb20tZGVidWdnZXItZG9tLWJyZWFrcG9pbnRzLWV4cGVjdGVkLnR4
dDoKKwogMjAyMC0wOS0wNSAgRGV2aW4gUm91c3NvICA8ZHJvdXNzb0BhcHBsZS5jb20+CiAKICAg
ICAgICAgV2ViIEluc3BlY3RvcjogYWxsb3cgRE9NIGJyZWFrcG9pbnRzIHRvIGJlIGNvbmZpZ3Vy
ZWQKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9jYW52YXMvcmVxdWVzdFNoYWRl
clNvdXJjZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvY2FudmFzL3JlcXVl
c3RTaGFkZXJTb3VyY2UtZXhwZWN0ZWQudHh0CmluZGV4IGY5MmY0OTVkMzhjZTY4NTNhM2E1MzU0
YWE1ODEzZTBiYzRjZTE1NWUuLjJjNWRjZTgzMjA0MTI1ZDBhZTBkMGJmYTBjMjMzOThlNjUzZDRk
MzEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9jYW52YXMvcmVxdWVzdFNoYWRl
clNvdXJjZS1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2NhbnZhcy9y
ZXF1ZXN0U2hhZGVyU291cmNlLWV4cGVjdGVkLnR4dApAQCAtNCw1ICs0LDUgQEAgQ29tbW9uIHRl
c3RzIGZvciBDYW52YXMucmVxdWVzdFNoYWRlclNvdXJjZSBjb21tYW5kLgogPT0gUnVubmluZyB0
ZXN0IHN1aXRlOiBDYW52YXMucmVxdWVzdFNoYWRlclNvdXJjZQogLS0gUnVubmluZyB0ZXN0IGNh
c2U6IENhbnZhcy5yZXF1ZXN0U2hhZGVyU291cmNlLlByb2dyYW1JZC5JbnZhbGlkCiBQQVNTOiBT
aG91bGQgcHJvZHVjZSBhbiBlcnJvci4KLUVycm9yOiBNaXNzaW5nIHByb2dyYW0gZm9yIGdpdmVu
IHByb2dyYW1JZAorRXJyb3I6IFVua25vd24gc2hhZGVyVHlwZTogSU5WQUxJRF9TSEFERVJfVFlQ
RQogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvY2FudmFzL3VwZGF0ZVNoYWRl
ci1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvY2FudmFzL3VwZGF0ZVNoYWRl
ci1leHBlY3RlZC50eHQKaW5kZXggY2UzN2U4ZTZhOWM4MDBlZmM4ZjdmMDZlY2M0NTJjYTQzMWNi
MTAxNy4uMzRmMWJkMmY5MjEyNjlkNzBmNjJiYjdmYWZiOGQwMjY0MzQyYTgwYiAxMDA2NDQKLS0t
IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2NhbnZhcy91cGRhdGVTaGFkZXItZXhwZWN0ZWQudHh0
CisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9jYW52YXMvdXBkYXRlU2hhZGVyLWV4cGVjdGVk
LnR4dApAQCAtNCw1ICs0LDUgQEAgQ29tbW9uIHRlc3RzIGZvciBDYW52YXMudXBkYXRlU2hhZGVy
IGNvbW1hbmQuCiA9PSBSdW5uaW5nIHRlc3Qgc3VpdGU6IENhbnZhcy51cGRhdGVTaGFkZXIKIC0t
IFJ1bm5pbmcgdGVzdCBjYXNlOiBDYW52YXMudXBkYXRlU2hhZGVyLlByb2dyYW1JZC5JbnZhbGlk
CiBQQVNTOiBTaG91bGQgcHJvZHVjZSBhbiBlcnJvci4KLUVycm9yOiBNaXNzaW5nIHByb2dyYW0g
Zm9yIGdpdmVuIHByb2dyYW1JZAorRXJyb3I6IFVua25vd24gc2hhZGVyVHlwZTogSU5WQUxJRF9T
SEFERVJfVFlQRQogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvY29uc29sZS93
ZWJjb3JlLWxvZ2dpbmctZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2NvbnNv
bGUvd2ViY29yZS1sb2dnaW5nLWV4cGVjdGVkLnR4dAppbmRleCA1YjUyZTJhNzJjYTgxYzcwMmNi
YmY1ZmU1OWMzYzZiMGZhMjc1N2EzLi41Mjg0YzkyMDZiZmU4OTNhMjQwMDBlN2Q3MWJjODBjNWE1
MzhkYTQwIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvY29uc29sZS93ZWJjb3Jl
LWxvZ2dpbmctZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9jb25zb2xl
L3dlYmNvcmUtbG9nZ2luZy1leHBlY3RlZC50eHQKQEAgLTE1LDkgKzE1LDEzIEBAIFBBU1M6IExv
ZyBjaGFubmVsIGhhcyBrbm93biBzb3VyY2UuCiBQQVNTOiBMb2cgY2hhbm5lbCBkaXNhYmxlZCBi
eSBkZWZhdWx0LgogUEFTUzogTG9nIGNoYW5uZWwgaGFzIGtub3duIHNvdXJjZS4KIFBBU1M6IExv
ZyBjaGFubmVsIGRpc2FibGVkIGJ5IGRlZmF1bHQuCitQQVNTOiBMb2cgY2hhbm5lbCBoYXMga25v
d24gc291cmNlLgorUEFTUzogTG9nIGNoYW5uZWwgZGlzYWJsZWQgYnkgZGVmYXVsdC4KK1BBU1M6
IExvZyBjaGFubmVsIGhhcyBrbm93biBzb3VyY2UuCitQQVNTOiBMb2cgY2hhbm5lbCBkaXNhYmxl
ZCBieSBkZWZhdWx0LgogCiAtLSBSdW5uaW5nIHRlc3QgY2FzZTogQ29uc29sZS5Mb2dnaW5nLklu
dmFsaWRMZXZlbAotUEFTUzogVW5rbm93biBjaGFubmVsTGV2ZWw6IERPRVNfTk9UX0VYSVNUCitQ
QVNTOiBVbmtub3duIGxldmVsOiBET0VTX05PVF9FWElTVAogCiAtLSBSdW5uaW5nIHRlc3QgY2Fz
ZTogQ29uc29sZS5Mb2dnaW5nLk5vTG9nZ2luZwogUEFTUzogTWVkaWEgbG9nZ2luZyBkaXNhYmxl
ZC4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9kb20vaGlnaGxpZ2h0UXVhZC1l
eHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZG9tL2hpZ2hsaWdodFF1YWQtZXhw
ZWN0ZWQudHh0CmluZGV4IGU3ODExN2EzYTUwZmFjOTc1OWI0ZjM0ZTFlODI1Y2UwN2VkMTFhODUu
LmExZjNiMmZlNzY1ODI3YmZiMTRhYTJiYjA2ZDBhZDg2NDY3NDY2NTUgMTAwNjQ0Ci0tLSBhL0xh
eW91dFRlc3RzL2luc3BlY3Rvci9kb20vaGlnaGxpZ2h0UXVhZC1leHBlY3RlZC50eHQKKysrIGIv
TGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RvbS9oaWdobGlnaHRRdWFkLWV4cGVjdGVkLnR4dApAQCAt
MzEsNSArMzEsNSBAQCBIaWdobGlnaHQgUmVjdDogeyJ4IjotMTAsInkiOi0xMCwid2lkdGgiOjEw
MDAsImhlaWdodCI6MjAwMCwidG9wIjotMTAsInJpZ2h0Ijo5OQogCiAtLSBSdW5uaW5nIHRlc3Qg
Y2FzZTogQmFkUXVhZFNob3VsZEVycm9yCiBQQVNTOiBTaG91bGQgcHJvZHVjZSBhbiBlcnJvci4K
LUVycm9yOiBVbmV4cGVjdGVkIGludmFsaWQgcXVhZEFycmF5CitFcnJvcjogVW5leHBlY3RlZCBp
bnZhbGlkIHF1YWQKIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3dvcmtlci9k
b20tZGVidWdnZXItZG9tLWJyZWFrcG9pbnRzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2lu
c3BlY3Rvci93b3JrZXIvZG9tLWRlYnVnZ2VyLWRvbS1icmVha3BvaW50cy1leHBlY3RlZC50eHQK
aW5kZXggZmE4ZTc2MmFhMzJjZTVhZTFjZmU4NTFmOTc0OGIzNTM5ZjUxZTI0Zi4uM2RmMjI4ODZl
MzEyYmVmNTY5YjEzOTRjNGE0NGM4MzNlYzNiNTY0MyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMv
aW5zcGVjdG9yL3dvcmtlci9kb20tZGVidWdnZXItZG9tLWJyZWFrcG9pbnRzLWV4cGVjdGVkLnR4
dAorKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3Ivd29ya2VyL2RvbS1kZWJ1Z2dlci1kb20tYnJl
YWtwb2ludHMtZXhwZWN0ZWQudHh0CkBAIC00LDkgKzQsOSBAQCBUZXN0cyBmb3IgRE9NIGJyZWFr
cG9pbnQgZnVuY3Rpb25hbGl0eSAoRE9NRGVidWdnZXIpIGluIGEgV29ya2VyLgogPT0gUnVubmlu
ZyB0ZXN0IHN1aXRlOiBXb3JrZXIuRE9NRGVidWdnZXIuRE9NQnJlYWtwb2ludAogLS0gUnVubmlu
ZyB0ZXN0IGNhc2U6IFdvcmtlci5ET01EZWJ1Z2dlci5ET01CcmVha3BvaW50LnNldERPTUJyZWFr
cG9pbnQKIFBBU1M6IFNob3VsZCBwcm9kdWNlIGFuIGV4Y2VwdGlvbi4KLUVycm9yOiBOb3Qgc3Vw
cG9ydGVkCitFcnJvcjogVW5rbm93biB0eXBlOiBJTlZBTElECiAKIC0tIFJ1bm5pbmcgdGVzdCBj
YXNlOiBXb3JrZXIuRE9NRGVidWdnZXIuRE9NQnJlYWtwb2ludC5yZW1vdmVET01CcmVha3BvaW50
CiBQQVNTOiBTaG91bGQgcHJvZHVjZSBhbiBleGNlcHRpb24uCi1FcnJvcjogTm90IHN1cHBvcnRl
ZAorRXJyb3I6IFVua25vd24gdHlwZTogSU5WQUxJRAogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>408316</attachid>
            <date>2020-09-09 00:03:44 -0700</date>
            <delta_ts>2020-09-09 00:29:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216302-20200909000342.patch</filename>
            <type>text/plain</type>
            <size>1526174</size>
            <attacher name="Devin Rousso">hi</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDdhMGViNGY4YTlhMTBhMTkyZjg2MGNjMTc1MjI4
ZDNkMWRhMzQ0NDEuLjM1Y2IwMThmMTA5ZDk4MTRiODk3MmE2MDcwM2M4ZTliYTY3YmU4ODYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyOCBAQAorMjAyMC0wOS0wOCAgRGV2
aW4gUm91c3NvICA8ZHJvdXNzb0BhcHBsZS5jb20+CisKKyAgICAgICAgV2ViIEluc3BlY3Rvcjog
bW9kZXJuaXplIGdlbmVyYXRlZCBiYWNrZW5kIHByb3RvY29sIGNvZGUKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNjMwMgorICAgICAgICA8cmRhcjov
L3Byb2JsZW0vNjg1NDc2NDk+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgUHJldmlvdXNseSwgdGhlIGluc3BlY3RvciBwcm90b2NvbCB3YXMgZXhwcmVz
c2VkIGluIGNvZGUgaW4gYSBzb21ld2hhdCBjb25mdXNpbmcgd2F5OgorICAgICAgICAgLSB0aGUg
ZXJyb3Igc3RyaW5nIHdhcyB0aGUgZmlyc3QgYXJndW1lbnQKKyAgICAgICAgIC0gcmVxdWlyZWQg
cGFyYW1ldGVycyB3ZXJlIGBUYCBvciBgY29uc3QgVCZgCisgICAgICAgICAtIG9wdGlvbmFsIHBh
cmFtZXRlcnMgd2VyZSBgY29uc3QgVCpgCisgICAgICAgICAtIGVudW0gcGFyYW1ldGVycyB3ZXJl
IHRoZSB1bmRlcmx5aW5nIHR5cGUgcmVxdWlyaW5nIHRoZSBiYWNrZW5kIGRpc3BhdGNoZXIgaGFu
ZGxlciB0bworICAgICAgICAgICBwcm9jZXNzIGl0IGluc3RlYWQgb2YgaXQgYmVpbmcgcHJlcHJv
Y2Vzc2VkCisgICAgICAgICAtIHJlcXVpcmVkIHJldHVybnMgd2VyZSBgVCZgCisgICAgICAgICAt
IG9wdGlvbmFsIHJldHVybnMgd2VyZSBgVCpgCisgICAgICAgIFRoaXMgZG9lc24ndCByZWFsbHkg
bWFrZSBmb3IgZWFzeS9vYnZpb3VzIHJlYWRpbmcgb2YgY29kZSBzaW5jZSB0aGUgb3JkZXIgb2Yg
YXJndW1lbnRzIGlzCisgICAgICAgIG5vdCB3ZWlyZCAoZS5nLiBlcnJvciBzdHJpbmcgZmlyc3Qp
LCBhbmQgdGhhdCB0aGVyZSBhcmUgcmVmZXJlbmNlcy9wb2ludGVycyB0byBwcmltaXRpdmUKKyAg
ICAgICAgdHlwZXMuCisKKyAgICAgICAgVGhpcyBwYXRjaCBjbGVhbnMgdXAgdGhlIGdlbmVyYXRl
ZCBpbnNwZWN0b3IgcHJvdG9jb2wgY29kZSB0byBiZToKKyAgICAgICAgIC0gcmVxdWlyZWQgcGFy
YW1ldGVycyBhcmUgYFRgIG9yIGBSZWY8VD4mJmAKKyAgICAgICAgIC0gb3B0aW9uYWwgcGFyYW1l
dGVycyBhcmUgYE9wdGlvbmFsPFQ+JiZgIG9yIGBSZWZQdHI8VD4mJmAKKyAgICAgICAgIC0gZW51
bSBwYXJhbWV0ZXJzIGFyZSBwcmVwcm9jZXNzZWQgYW5kIHBhc3NlZCB0byB0aGUgYmFja2VuZCBk
aXNwYXRjaGVyIGhhbmRsZXIgaWYgdmFsaWQKKyAgICAgICAgIC0gc3luY2hyb25vdXMgY29tbWFu
ZHMgcmV0dXJuIGBFeHBlY3RlZDxYLCBFcnJvclN0cmluZz5gIHVzaW5nIHRoZSBzYW1lIHR5cGVz
L3J1bGVzIGFib3ZlCisgICAgICAgICAgIHdoZXJlIGBYYCBpcyBlaXRoZXIgYSBzaW5nbGUgcmV0
dXJuIG9yIGEgYHN0ZDo6dHVwbGVgIG9mIG11bHRpcGxlIHJldHVybnMKKworICAgICAgICBUaGUg
b25lIGV4Y2VwdGlvbiB0byB0aGUgYWJvdmUgaXMgYFN0cmluZ2AsIHdoaWNoIGlzIGFscmVhZHkg
YSB0cmktc3RhdGUgb2YgYG51bGxTdHJpbmcoKWAsCisgICAgICAgIGBlbXB0eVN0cmluZygpYCwg
YW5kIHNvbWV0aGluZyBzZXQsIHNvIHRoZXJlJ3Mgbm8gbmVlZCB0byB1c2UgYE9wdGlvbmFsPFN0
cmluZz5gLgorCisgICAgICAgIEFsc28gdXNlIGBQcm90b2NvbGAgb2JqZWN0cy9gdHlwZWRlZnNg
IHdoZXJldmVyIHBvc3NpYmxlIHRvIGZ1cnRoZXIgcmVsYXRlIHRoZSBwcm90b2NvbAorICAgICAg
ICBKU09OIGFuZCB0aGUgYWN0dWFsIGJhY2tlbmQgZGlzcGF0Y2hlciBoYW5kbGVyIGltcGxlbWVu
dGF0aW9uLgorCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0b3Iu
cHk6CisgICAgICAgIChHZW5lcmF0b3IuZ2VuZXJhdGVfaW5jbHVkZXNfZnJvbV9lbnRyaWVzKToK
KyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2NwcF9nZW5lcmF0b3JfdGVtcGxh
dGVzLnB5OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vY3BwX2dlbmVyYXRv
ci5weToKKyAgICAgICAgKENwcEdlbmVyYXRvci5oZWxwZXJzX25hbWVzcGFjZSk6CisgICAgICAg
IChDcHBHZW5lcmF0b3IuY3BwX2dldHRlcl9tZXRob2RfZm9yX3R5cGUpOgorICAgICAgICAoQ3Bw
R2VuZXJhdG9yLmNwcF9zZXR0ZXJfbWV0aG9kX2Zvcl90eXBlKToKKyAgICAgICAgKENwcEdlbmVy
YXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZSk6CisgICAgICAgIChDcHBHZW5lcmF0b3Iu
Y3BwX3R5cGVfZm9yX3R5cGVfbWVtYmVyX2FyZ3VtZW50KTogQWRkZWQuCisgICAgICAgIChDcHBH
ZW5lcmF0b3IuY3BwX3R5cGVfZm9yX2NvbW1hbmRfcGFyYW1ldGVyKTogQWRkZWQuCisgICAgICAg
IChDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX2NvbW1hbmRfcmV0dXJuX2RlY2xhcmF0aW9uKTog
QWRkZWQuCisgICAgICAgIChDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX2NvbW1hbmRfcmV0dXJu
X2FyZ3VtZW50KTogQWRkZWQuCisgICAgICAgIChDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX2V2
ZW50X3BhcmFtZXRlcik6IEFkZGVkLgorICAgICAgICAoQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zv
cl9lbnVtKTogQWRkZWQuCisgICAgICAgIChDcHBHZW5lcmF0b3Iuc2hvdWxkX21vdmVfYXJndW1l
bnQpOiBBZGRlZC4KKyAgICAgICAgKENwcEdlbmVyYXRvci5zaG91bGRfcmVsZWFzZV9hcmd1bWVu
dCk6IEFkZGVkLgorICAgICAgICAoQ3BwR2VuZXJhdG9yLnNob3VsZF9kZXJlZmVyZW5jZV9hcmd1
bWVudCk6IEFkZGVkLgorICAgICAgICAoQ3BwR2VuZXJhdG9yLmNwcF9wcm90b2NvbF90eXBlX2Zv
cl90eXBlX21lbWJlcik6IERlbGV0ZWQuCisgICAgICAgIChDcHBHZW5lcmF0b3IuY3BwX3R5cGVf
Zm9yX3VuY2hlY2tlZF9mb3JtYWxfaW5fcGFyYW1ldGVyKTogRGVsZXRlZC4KKyAgICAgICAgKENw
cEdlbmVyYXRvci5jcHBfdHlwZV9mb3JfY2hlY2tlZF9mb3JtYWxfZXZlbnRfcGFyYW1ldGVyKTog
RGVsZXRlZC4KKyAgICAgICAgKENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3JfdHlwZV9tZW1iZXIp
OiBEZWxldGVkLgorICAgICAgICAoQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl90eXBlX3dpdGhf
bmFtZSk6IERlbGV0ZWQuCisgICAgICAgIChDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX2Zvcm1h
bF9vdXRfcGFyYW1ldGVyKTogRGVsZXRlZC4KKyAgICAgICAgKENwcEdlbmVyYXRvci5jcHBfdHlw
ZV9mb3JfZm9ybWFsX2FzeW5jX3BhcmFtZXRlcik6IERlbGV0ZWQuCisgICAgICAgIChDcHBHZW5l
cmF0b3IuY3BwX3R5cGVfZm9yX3N0YWNrX2luX3BhcmFtZXRlcik6IERlbGV0ZWQuCisgICAgICAg
IChDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX3N0YWNrX291dF9wYXJhbWV0ZXIpOiBEZWxldGVk
LgorICAgICAgICAoQ3BwR2VuZXJhdG9yLmNwcF9hc3NlcnRpb25fbWV0aG9kX2Zvcl90eXBlX21l
bWJlcik6IERlbGV0ZWQuCisgICAgICAgIChDcHBHZW5lcmF0b3IuY3BwX2Fzc2VydGlvbl9tZXRo
b2RfZm9yX3R5cGVfbWVtYmVyLmFzc2VydGlvbl9tZXRob2RfZm9yX3R5cGUpOiBEZWxldGVkLgor
ICAgICAgICAoQ3BwR2VuZXJhdG9yLnNob3VsZF91c2Vfd3JhcHBlcl9mb3JfcmV0dXJuX3R5cGUp
OiBEZWxldGVkLgorICAgICAgICAoQ3BwR2VuZXJhdG9yLnNob3VsZF91c2VfcmVmZXJlbmNlc19m
b3JfdHlwZSk6IERlbGV0ZWQuCisgICAgICAgIChDcHBHZW5lcmF0b3Iuc2hvdWxkX3Bhc3NfYnlf
Y29weV9mb3JfcmV0dXJuX3R5cGUpOiBEZWxldGVkLgorICAgICAgICAqIGluc3BlY3Rvci9zY3Jp
cHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2FsdGVybmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVh
ZGVyLnB5OgorICAgICAgICAoQ3BwQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5l
cmF0b3IuX2dlbmVyYXRlX3NlY29uZGFyeV9oZWFkZXJfaW5jbHVkZXMpOgorICAgICAgICAoQ3Bw
QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRlX2hhbmRs
ZXJfZGVjbGFyYXRpb25fZm9yX2NvbW1hbmQpOgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRz
L2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHk6CisgICAg
ICAgIChDcHBCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvci5nZW5lcmF0ZV9vdXRwdXQp
OgorICAgICAgICAoQ3BwQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRl
X3NlY29uZGFyeV9oZWFkZXJfaW5jbHVkZXMpOgorICAgICAgICAoQ3BwQmFja2VuZERpc3BhdGNo
ZXJIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRlX2hhbmRsZXJfZGVjbGFyYXRpb25zX2Zvcl9kb21h
aW4pOgorICAgICAgICAoQ3BwQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IuX2dlbmVy
YXRlX2hhbmRsZXJfZGVjbGFyYXRpb25fZm9yX2NvbW1hbmQpOgorICAgICAgICAoQ3BwQmFja2Vu
ZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRlX2FzeW5jX2hhbmRsZXJfZGVjbGFy
YXRpb25fZm9yX2NvbW1hbmQpOgorICAgICAgICAoQ3BwQmFja2VuZERpc3BhdGNoZXJIZWFkZXJH
ZW5lcmF0b3IuX2dlbmVyYXRlX2Rpc3BhdGNoZXJfZGVjbGFyYXRpb25fZm9yX2NvbW1hbmQpOgor
ICAgICAgICAoQ3BwQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRlX2Fu
b255bW91c19lbnVtX2Zvcl9wYXJhbWV0ZXIpOiBEZWxldGVkLgorICAgICAgICAqIGluc3BlY3Rv
ci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1l
bnRhdGlvbi5weToKKyAgICAgICAgKENwcEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25H
ZW5lcmF0b3IuX2dlbmVyYXRlX3NlY29uZGFyeV9oZWFkZXJfaW5jbHVkZXMpOgorICAgICAgICAo
Q3BwQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfc21h
bGxfZGlzcGF0Y2hlcl9zd2l0Y2hfaW1wbGVtZW50YXRpb25fZm9yX2RvbWFpbik6CisgICAgICAg
IChDcHBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9h
c3luY19kaXNwYXRjaGVyX2NsYXNzX2Zvcl9kb21haW4pOgorICAgICAgICAoQ3BwQmFja2VuZERp
c3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfZGlzcGF0Y2hlcl9pbXBs
ZW1lbnRhdGlvbl9mb3JfY29tbWFuZCk6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29k
ZWdlbi9nZW5lcmF0ZV9jcHBfZnJvbnRlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHk6CisgICAgICAg
IChDcHBGcm9udGVuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRlX3NlY29uZGFy
eV9oZWFkZXJfaW5jbHVkZXMpOgorICAgICAgICAoQ3BwRnJvbnRlbmREaXNwYXRjaGVySGVhZGVy
R2VuZXJhdG9yLl9nZW5lcmF0ZV9kaXNwYXRjaGVyX2RlY2xhcmF0aW9uX2Zvcl9ldmVudCk6Cisg
ICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfZnJvbnRlbmRf
ZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weToKKyAgICAgICAgKENwcEZyb250ZW5kRGlzcGF0
Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9zZWNvbmRhcnlfaGVhZGVyX2lu
Y2x1ZGVzKToKKyAgICAgICAgKENwcEZyb250ZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2Vu
ZXJhdG9yLl9nZW5lcmF0ZV9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uX2Zvcl9ldmVudCk6Cisg
ICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfcHJvdG9jb2xf
dHlwZXNfaGVhZGVyLnB5OgorICAgICAgICAoQ3BwUHJvdG9jb2xUeXBlc0hlYWRlckdlbmVyYXRv
ci5fZ2VuZXJhdGVfc2Vjb25kYXJ5X2hlYWRlcl9pbmNsdWRlcyk6CisgICAgICAgICogaW5zcGVj
dG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfcHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50
YXRpb24ucHk6CisgICAgICAgIChDcHBQcm90b2NvbFR5cGVzSW1wbGVtZW50YXRpb25HZW5lcmF0
b3IuX2dlbmVyYXRlX3NlY29uZGFyeV9oZWFkZXJfaW5jbHVkZXMpOgorICAgICAgICAoQ3BwUHJv
dG9jb2xUeXBlc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9lbnVtX2NvbnZlcnNp
b25fbWV0aG9kc19mb3JfZG9tYWluKToKKyAgICAgICAgKENwcFByb3RvY29sVHlwZXNJbXBsZW1l
bnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfb3Blbl9maWVsZF9uYW1lcyk6CisgICAgICAgIChD
cHBQcm90b2NvbFR5cGVzSW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX2Fzc2VydGlv
bl9mb3JfZW51bSk6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0
ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHk6CisgICAgICAgIChPYmpDQmFja2Vu
ZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRlX29iamNfaGFuZGxlcl9kZWNsYXJh
dGlvbl9mb3JfY29tbWFuZCk6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9n
ZW5lcmF0ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weToKKyAgICAg
ICAgKE9iakNCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0
ZV9oYW5kbGVyX2ltcGxlbWVudGF0aW9uX2Zvcl9jb21tYW5kKToKKyAgICAgICAgKE9iakNCYWNr
ZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9zdWNjZXNzX2Js
b2NrX2Zvcl9jb21tYW5kKToKKyAgICAgICAgKE9iakNCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVu
dGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9zdWNjZXNzX2Jsb2NrX2Zvcl9jb21tYW5kLmFuZCk6
CisgICAgICAgIChPYmpDQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5f
Z2VuZXJhdGVfY29udmVyc2lvbnNfZm9yX2NvbW1hbmQuaW5fcGFyYW1fZXhwcmVzc2lvbik6Cisg
ICAgICAgIChPYmpDQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2Vu
ZXJhdGVfY29udmVyc2lvbnNfZm9yX2NvbW1hbmQpOgorICAgICAgICAoT2JqQ0JhY2tlbmREaXNw
YXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX2ludm9jYXRpb25fZm9yX2Nv
bW1hbmQpOgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2Jq
Y19mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5OgorICAgICAgICAoT2JqQ0Zy
b250ZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9ldmVudCk6
CisgICAgICAgIChPYmpDRnJvbnRlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3Iu
X2dlbmVyYXRlX2V2ZW50X291dF9wYXJhbWV0ZXJzKToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2Ny
aXB0cy9jb2RlZ2VuL29iamNfZ2VuZXJhdG9yX3RlbXBsYXRlcy5weToKKyAgICAgICAgKiBpbnNw
ZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL29iamNfZ2VuZXJhdG9yLnB5OgorICAgICAgICAoT2JqQ0dl
bmVyYXRvci5wcm90b2NvbF90eXBlX2Zvcl90eXBlKToKKyAgICAgICAgKE9iakNHZW5lcmF0b3Iu
b2JqY190eXBlX2Zvcl9wYXJhbV9pbnRlcm5hbCk6CisgICAgICAgIChPYmpDR2VuZXJhdG9yLm9i
amNfcHJvdG9jb2xfaW1wb3J0X2V4cHJlc3Npb25fZm9yX3BhcmFtZXRlcik6CisKKyAgICAgICAg
KiBpbnNwZWN0b3IvcHJvdG9jb2wvUGFnZS5qc29uOgorICAgICAgICBOb3cgdGhhdCBlbnVtcyBh
cmUgcHJvY2Vzc2VkIGJlZm9yZSBiZWluZyBwYXNzZWQgdG8gYmFja2VuZCBkaXNwYWNoZXIgaGFu
ZGxlcnMsIHRoZQorICAgICAgICBgYXBwZWFyYW5jZWAgcGFyYW1ldGVyIG9mIGBQYWdlLnNldEZv
cmNlZEFwcGVhcmFuY2VgIG11c3QgYmUgbWFya2VkIGBvcHRpb25hbGAgYXMKKyAgICAgICAgdGhl
cmUncyBubyB3YXkgZm9yIGl0IHRvIGFjY2VwdCBhbiBlbXB0eSBzdHJpbmcsIGFzIHRoYXQncyBu
b3QgcG9zc2libGUgZm9yIGFuIGVudW0uCisKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0lu
c3BlY3RvckFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBZ2Vu
dC5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBdWRpdEFnZW50Lmg6
CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBdWRpdEFnZW50LmNwcDoKKyAg
ICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNvbnNvbGVBZ2VudC5oOgorICAgICAg
ICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ29uc29sZUFnZW50LmNwcDoKKyAgICAgICAg
KiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuaDoKKyAgICAgICAgKiBp
bnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwOgorICAgICAgICAqIGlu
c3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9ySGVhcEFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9y
L2FnZW50cy9JbnNwZWN0b3JIZWFwQWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2Vu
dHMvSW5zcGVjdG9yUnVudGltZUFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9J
bnNwZWN0b3JSdW50aW1lQWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5z
cGVjdG9yU2NyaXB0UHJvZmlsZXJBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9yU2NyaXB0UHJvZmlsZXJBZ2VudC5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL2Fn
ZW50cy9JbnNwZWN0b3JUYXJnZXRBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9yVGFyZ2V0QWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSlNH
bG9iYWxPYmplY3RBdWRpdEFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9KU0ds
b2JhbE9iamVjdEF1ZGl0QWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSlNH
bG9iYWxPYmplY3REZWJ1Z2dlckFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9K
U0dsb2JhbE9iamVjdERlYnVnZ2VyQWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2Vu
dHMvSlNHbG9iYWxPYmplY3RSdW50aW1lQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdl
bnRzL0pTR2xvYmFsT2JqZWN0UnVudGltZUFnZW50LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3Iv
SlNHbG9iYWxPYmplY3RDb25zb2xlQ2xpZW50LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSlNH
bG9iYWxPYmplY3RJbnNwZWN0b3JDb250cm9sbGVyLmNwcDoKKyAgICAgICAgRWxpZGVkIGJhY2tl
bmQgZGlzcGF0Y2hlciBoYW5kbGVyIGNoYW5nZXMgZGVzY3JpYmUgYWJvdmUuCisKKyAgICAgICAg
KiBiaW5kaW5ncy9TY3JpcHRWYWx1ZS5jcHA6CisgICAgICAgIChJbnNwZWN0b3I6OmpzVG9JbnNw
ZWN0b3JWYWx1ZSk6CisgICAgICAgICogaW5zcGVjdG9yL0FzeW5jU3RhY2tUcmFjZS5oOgorICAg
ICAgICAqIGluc3BlY3Rvci9Bc3luY1N0YWNrVHJhY2UuY3BwOgorICAgICAgICAoSW5zcGVjdG9y
OjpBc3luY1N0YWNrVHJhY2U6OmJ1aWxkSW5zcGVjdG9yT2JqZWN0IGNvbnN0KToKKyAgICAgICAg
KiBpbnNwZWN0b3IvQ29uc29sZU1lc3NhZ2UuY3BwOgorICAgICAgICAoSW5zcGVjdG9yOjpDb25z
b2xlTWVzc2FnZTo6YWRkVG9Gcm9udGVuZCk6CisgICAgICAgICogaW5zcGVjdG9yL0luamVjdGVk
U2NyaXB0QmFzZS5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbmplY3RlZFNjcmlwdEJhc2UuY3Bw
OgorICAgICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdEJhc2U6Om1ha2VFdmFsQ2FsbCk6
CisgICAgICAgIChJbnNwZWN0b3I6OkluamVjdGVkU2NyaXB0QmFzZTo6Y2hlY2tDYWxsUmVzdWx0
KToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHRCYXNlOjpjaGVja0FzeW5jQ2Fs
bFJlc3VsdCk6CisgICAgICAgICogaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0Lmg6CisgICAgICAg
ICogaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0LmNwcDoKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5q
ZWN0ZWRTY3JpcHQ6OmV4ZWN1dGUpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlw
dDo6ZXZhbHVhdGUpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdDo6Y2FsbEZ1
bmN0aW9uT24pOgorICAgICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdDo6ZXZhbHVhdGVP
bkNhbGxGcmFtZSk6CisgICAgICAgIChJbnNwZWN0b3I6OkluamVjdGVkU2NyaXB0OjpnZXRGdW5j
dGlvbkRldGFpbHMpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdDo6ZnVuY3Rp
b25EZXRhaWxzKToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHQ6OmdldFByZXZp
ZXcpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdDo6Z2V0UHJvcGVydGllcyk6
CisgICAgICAgIChJbnNwZWN0b3I6OkluamVjdGVkU2NyaXB0OjpnZXREaXNwbGF5YWJsZVByb3Bl
cnRpZXMpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdDo6Z2V0SW50ZXJuYWxQ
cm9wZXJ0aWVzKToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHQ6OmdldENvbGxl
Y3Rpb25FbnRyaWVzKToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHQ6OnNhdmVS
ZXN1bHQpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdDo6d3JhcENhbGxGcmFt
ZXMgY29uc3QpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdDo6d3JhcE9iamVj
dCBjb25zdCk6CisgICAgICAgIChJbnNwZWN0b3I6OkluamVjdGVkU2NyaXB0Ojp3cmFwSlNPTlN0
cmluZyBjb25zdCk6CisgICAgICAgIChJbnNwZWN0b3I6OkluamVjdGVkU2NyaXB0Ojp3cmFwVGFi
bGUgY29uc3QpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdDo6cHJldmlld1Zh
bHVlIGNvbnN0KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmNw
cDoKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOjppbmplY3RlZFNj
cmlwdEZvck9iamVjdElkKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXIuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXIuY3BwOgorICAgICAgICAoSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tC
YXNlOjpzZW5kU3VjY2Vzcyk6CisgICAgICAgIChJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVy
OjpkaXNwYXRjaCk6CisgICAgICAgIChJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyOjpzZW5k
UmVzcG9uc2UpOgorICAgICAgICAoSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0UHJv
cGVydHlWYWx1ZSk6CisgICAgICAgIChJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyOjpnZXRC
b29sZWFuKToKKyAgICAgICAgKEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXI6OmdldEludGVn
ZXIpOgorICAgICAgICAoSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0RG91YmxlKToK
KyAgICAgICAgKEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXI6OmdldFN0cmluZyk6CisgICAg
ICAgIChJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyOjpnZXRWYWx1ZSk6CisgICAgICAgIChJ
bnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyOjpnZXRPYmplY3QpOgorICAgICAgICAoSW5zcGVj
dG9yOjpCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0QXJyYXkpOgorICAgICAgICAoSW5zcGVjdG9yOjpj
YXN0VG9JbnRlZ2VyKTogRGVsZXRlZC4KKyAgICAgICAgKEluc3BlY3Rvcjo6Y2FzdFRvTnVtYmVy
KTogRGVsZXRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5o
OgorICAgICAgICAoSW5zcGVjdG9yOjpQcm90b2NvbDo6QmluZGluZ1RyYWl0czxKU09OOjpBcnJh
eU9mPFQ+Pjo6cnVudGltZUNhc3QpOgorICAgICAgICAoSW5zcGVjdG9yOjpQcm90b2NvbDo6Qmlu
ZGluZ1RyYWl0czxKU09OOjpBcnJheU9mPFQ+Pjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUp
OgorICAgICAgICAqIGluc3BlY3Rvci9yZW1vdGUvc29ja2V0L1JlbW90ZUluc3BlY3RvckNvbm5l
Y3Rpb25DbGllbnQuY3BwOgorICAgICAgICAoSW5zcGVjdG9yOjpSZW1vdGVJbnNwZWN0b3JDb25u
ZWN0aW9uQ2xpZW50OjpleHRyYWN0RXZlbnQpOgorICAgICAgICAqIHJ1bnRpbWUvVHlwZVNldC5j
cHA6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVNoYXBlOjppbnNwZWN0b3JSZXByZXNlbnRhdGlv
bik6CisgICAgICAgIGBKU09OYCBjbGFzc2VzIG5vdyB1c2UgYFJlZiYmYCB3aGVyZXZlciBwb3Nz
aWJsZSBhbmQgYE9wdGlvbmFsYCBpbnN0ZWFkIG9mIGFuIG91dCBwYXJhbWV0ZXIKKyAgICAgICAg
Zm9yIGBnZXQqYC9gYXMqYCBzbyB0aGF0IHZhbHVlcyBjYW4gYmUgbW9yZSBlYXNpbHkgbWFuaXB1
bGF0ZWQgYW5kIGNhbiBiZSBjb25maWRlbnRseSBrbm93bgorICAgICAgICB0byBleGlzdC4KKwor
ICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2VudW0tdmFsdWVzLmpzb246CisgICAg
ICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvY29tbWFuZC10YXJnZXRUeXBl
LW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uLXJlc3VsdDoKKyAgICAgICAgKiBp
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9jb21tYW5kcy13aXRoLWFzeW5jLWF0dHJp
YnV0ZS5qc29uLXJlc3VsdDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBl
Y3RlZC9jb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbi1y
ZXN1bHQ6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZGVmaW5p
dGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbi1yZXN1bHQ6CisgICAgICAgICogaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5qc29uLXJlc3Vs
dDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9kb21haW4tdGFy
Z2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbi1yZXN1bHQ6CisgICAg
ICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZG9tYWluLXRhcmdldFR5cGVz
Lmpzb24tcmVzdWx0OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVk
L2RvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbi1yZXN1bHQ6CisgICAgICAg
ICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZW51bS12YWx1ZXMuanNvbi1yZXN1
bHQ6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZXZlbnQtdGFy
Z2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbi1yZXN1bHQ6CisgICAg
ICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZXZlbnRzLXdpdGgtb3B0aW9u
YWwtcGFyYW1ldGVycy5qc29uLXJlc3VsdDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9leHBlY3RlZC9nZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbi1y
ZXN1bHQ6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvc2FtZS10
eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbi1yZXN1bHQ6CisgICAgICAgICogaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpz
b24tcmVzdWx0OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3No
b3VsZC1zdHJpcC1jb21tZW50cy5qc29uLXJlc3VsdDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5
cGUuanNvbi1yZXN1bHQ6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0
ZWQvdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24tcmVzdWx0OgorICAgICAgICAqIGlu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tZW51bS10eXBl
Lmpzb24tcmVzdWx0OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVk
L3R5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbi1yZXN1bHQ6CisgICAgICAgICogaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0
cy5qc29uLXJlc3VsdDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3Rl
ZC90eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0OgorICAgICAgICAqIGluc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3ZlcnNpb24uanNvbi1yZXN1bHQ6CisKIDIwMjAt
MDktMDUgIERldmluIFJvdXNzbyAgPGRyb3Vzc29AYXBwbGUuY29tPgogCiAgICAgICAgIFdlYiBJ
bnNwZWN0b3I6IGFsbG93IERPTSBicmVha3BvaW50cyB0byBiZSBjb25maWd1cmVkCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGQw
YjUxZWRiODA2MDg2MGI3YmIxM2MwNjJhNTAzMTFmYTQyNGYxZGEuLjIwMzZiZDMyOWQzMTAxMzk3
Yjg5YmFkNjQyYjhiOTYwNTkwNDZlNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTIgQEAKKzIwMjAtMDktMDgg
IERldmluIFJvdXNzbyAgPGRyb3Vzc29AYXBwbGUuY29tPgorCisgICAgICAgIFdlYiBJbnNwZWN0
b3I6IG1vZGVybml6ZSBnZW5lcmF0ZWQgYmFja2VuZCBwcm90b2NvbCBjb2RlCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTYzMDIKKyAgICAgICAgPHJk
YXI6Ly9wcm9ibGVtLzY4NTQ3NjQ5PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogd3RmL0pTT05WYWx1ZXMuaDoKKyAgICAgICAgKFdURjo6SlNPTklt
cGw6Ok9iamVjdEJhc2U6OnNldFZhbHVlKToKKyAgICAgICAgKFdURjo6SlNPTkltcGw6Ok9iamVj
dEJhc2U6OnNldE9iamVjdCk6CisgICAgICAgIChXVEY6OkpTT05JbXBsOjpPYmplY3RCYXNlOjpz
ZXRBcnJheSk6CisgICAgICAgIChXVEY6OkpTT05JbXBsOjpBcnJheUJhc2U6OnB1c2hWYWx1ZSk6
CisgICAgICAgIChXVEY6OkpTT05JbXBsOjpBcnJheUJhc2U6OnB1c2hPYmplY3QpOgorICAgICAg
ICAoV1RGOjpKU09OSW1wbDo6QXJyYXlCYXNlOjpwdXNoQXJyYXkpOgorICAgICAgICAoV1RGOjpK
U09OSW1wbDo6QXJyYXlPZjo6QXJyYXlPZik6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OkpTT05J
bXBsOjpBcnJheU9mOjpjYXN0ZWRBcnJheSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OkpTT05J
bXBsOjpBcnJheU9mOjphZGRJdGVtKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6SlNPTkltcGw6
OkFycmF5T2Y6OmNyZWF0ZSk6IERlbGV0ZWQuCisgICAgICAgICogd3RmL0pTT05WYWx1ZXMuY3Bw
OgorICAgICAgICAoV1RGOjpKU09OSW1wbDo6VmFsdWU6OmFzVmFsdWUpOgorICAgICAgICAoV1RG
OjpKU09OSW1wbDo6VmFsdWU6OmFzT2JqZWN0KToKKyAgICAgICAgKFdURjo6SlNPTkltcGw6OlZh
bHVlOjphc0FycmF5KToKKyAgICAgICAgKFdURjo6SlNPTkltcGw6OlZhbHVlOjpwYXJzZUpTT04p
OgorICAgICAgICAoV1RGOjpKU09OSW1wbDo6VmFsdWU6OmFzQm9vbGVhbiBjb25zdCk6CisgICAg
ICAgIChXVEY6OkpTT05JbXBsOjpWYWx1ZTo6YXNEb3VibGUgY29uc3QpOgorICAgICAgICAoV1RG
OjpKU09OSW1wbDo6VmFsdWU6OmFzSW50ZWdlciBjb25zdCk6CisgICAgICAgIChXVEY6OkpTT05J
bXBsOjpWYWx1ZTo6YXNTdHJpbmcgY29uc3QpOgorICAgICAgICAoV1RGOjpKU09OSW1wbDo6T2Jq
ZWN0QmFzZTo6YXNPYmplY3QpOgorICAgICAgICAoV1RGOjpKU09OSW1wbDo6T2JqZWN0QmFzZTo6
bWVtb3J5Q29zdCBjb25zdCk6CisgICAgICAgIChXVEY6OkpTT05JbXBsOjpPYmplY3RCYXNlOjpn
ZXRCb29sZWFuIGNvbnN0KToKKyAgICAgICAgKFdURjo6SlNPTkltcGw6Ok9iamVjdEJhc2U6Omdl
dERvdWJsZSBjb25zdCk6CisgICAgICAgIChXVEY6OkpTT05JbXBsOjpPYmplY3RCYXNlOjpnZXRJ
bnRlZ2VyIGNvbnN0KToKKyAgICAgICAgKFdURjo6SlNPTkltcGw6Ok9iamVjdEJhc2U6OmdldFN0
cmluZyBjb25zdCk6CisgICAgICAgIChXVEY6OkpTT05JbXBsOjpPYmplY3RCYXNlOjpnZXRPYmpl
Y3QgY29uc3QpOgorICAgICAgICAoV1RGOjpKU09OSW1wbDo6T2JqZWN0QmFzZTo6Z2V0QXJyYXkg
Y29uc3QpOgorICAgICAgICAoV1RGOjpKU09OSW1wbDo6T2JqZWN0QmFzZTo6Z2V0VmFsdWUgY29u
c3QpOgorICAgICAgICAoV1RGOjpKU09OSW1wbDo6T2JqZWN0QmFzZTo6T2JqZWN0QmFzZSk6Cisg
ICAgICAgIChXVEY6OkpTT05JbXBsOjpBcnJheUJhc2U6OmFzQXJyYXkpOgorICAgICAgICAoV1RG
OjpKU09OSW1wbDo6QXJyYXlCYXNlOjp3cml0ZUpTT04gY29uc3QpOgorICAgICAgICAoV1RGOjpK
U09OSW1wbDo6QXJyYXlCYXNlOjpBcnJheUJhc2UpOgorICAgICAgICAoV1RGOjpKU09OSW1wbDo6
QXJyYXlCYXNlOjpnZXQgY29uc3QpOgorICAgICAgICAoV1RGOjpKU09OSW1wbDo6QXJyYXlCYXNl
OjptZW1vcnlDb3N0IGNvbnN0KToKKyAgICAgICAgKFdURjo6SlNPTkltcGw6Ok9iamVjdEJhc2U6
Om9wZW5BY2Nlc3NvcnMpOiBEZWxldGVkLgorICAgICAgICBVc2UgYFJlZiYmYCB3aGVyZXZlciBw
b3NzaWJsZSBhbmQgYE9wdGlvbmFsYCBpbnN0ZWFkIG9mIGFuIG91dCBwYXJhbWV0ZXIgZm9yIGBn
ZXQqYC9gYXMqYAorICAgICAgICBzbyB0aGF0IHZhbHVlcyBjYW4gYmUgbW9yZSBlYXNpbHkgbWFu
aXB1bGF0ZWQgYW5kIGNhbiBiZSBjb25maWRlbnRseSBhc3N1bWVkIHRvIGV4aXN0LgorICAgICAg
ICBSZW1vdmUgdW51c2VkIG92ZXJsb2FkcyBhbmQgYWxsb3cgc3ViY2xhc3NlcyB0byBjYWxsIGBh
cypgIGluc3RlYWQgb2YgYG9wZW5BY2Nlc3NvcnNgIGFzCisgICAgICAgIHRoZXkncmUgZWZmZWN0
aXZlbHkgdGhlIHNhbWUgdGhpbmcuCisKIDIwMjAtMDktMDUgIE15bGVzIEMuIE1heGZpZWxkICA8
bW1heGZpZWxkQGFwcGxlLmNvbT4KIAogICAgICAgICBbQ29jb2FdIENURm9udElzU3lzdGVtVUlG
b250KCkgaXMgZmFzdGVyIHRoYW4gQ1RGb250RGVzY3JpcHRvcklzU3lzdGVtVUlGb250KCkvQ1RG
b250Q29weUZvbnREZXNjcmlwdG9yKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAwN2E1MzVkNGQ4NGMzZTlhYmY4
YjI1ZjBlYWE2ZDI4YmVlMzIzYjlkLi40NGUwOWNiMmU5Y2MxMjE0NGEzZWEyYzdjNzFjYzU1NTBh
YTc0MzgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTM5IEBACisyMDIwLTA5LTA4ICBEZXZpbiBS
b3Vzc28gIDxkcm91c3NvQGFwcGxlLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBtb2Rl
cm5pemUgZ2VuZXJhdGVkIGJhY2tlbmQgcHJvdG9jb2wgY29kZQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE2MzAyCisgICAgICAgIDxyZGFyOi8vcHJv
YmxlbS82ODU0NzY0OT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBQcmV2aW91c2x5LCB0aGUgaW5zcGVjdG9yIHByb3RvY29sIHdhcyBleHByZXNzZWQg
aW4gY29kZSBpbiBhIHNvbWV3aGF0IGNvbmZ1c2luZyB3YXk6CisgICAgICAgICAtIHRoZSBlcnJv
ciBzdHJpbmcgd2FzIHRoZSBmaXJzdCBhcmd1bWVudAorICAgICAgICAgLSByZXF1aXJlZCBwYXJh
bWV0ZXJzIHdlcmUgYFRgIG9yIGBjb25zdCBUJmAKKyAgICAgICAgIC0gb3B0aW9uYWwgcGFyYW1l
dGVycyB3ZXJlIGBjb25zdCBUKmAKKyAgICAgICAgIC0gZW51bSBwYXJhbWV0ZXJzIHdlcmUgdGhl
IHVuZGVybHlpbmcgdHlwZSByZXF1aXJpbmcgdGhlIGJhY2tlbmQgZGlzcGF0Y2hlciBoYW5kbGVy
IHRvCisgICAgICAgICAgIHByb2Nlc3MgaXQgaW5zdGVhZCBvZiBpdCBiZWluZyBwcmVwcm9jZXNz
ZWQKKyAgICAgICAgIC0gcmVxdWlyZWQgcmV0dXJucyB3ZXJlIGBUJmAKKyAgICAgICAgIC0gb3B0
aW9uYWwgcmV0dXJucyB3ZXJlIGBUKmAKKyAgICAgICAgVGhpcyBkb2Vzbid0IHJlYWxseSBtYWtl
IGZvciBlYXN5L29idmlvdXMgcmVhZGluZyBvZiBjb2RlIHNpbmNlIHRoZSBvcmRlciBvZiBhcmd1
bWVudHMgaXMKKyAgICAgICAgbm90IHdlaXJkIChlLmcuIGVycm9yIHN0cmluZyBmaXJzdCksIGFu
ZCB0aGF0IHRoZXJlIGFyZSByZWZlcmVuY2VzL3BvaW50ZXJzIHRvIHByaW1pdGl2ZQorICAgICAg
ICB0eXBlcy4KKworICAgICAgICBUaGlzIHBhdGNoIGNsZWFucyB1cCB0aGUgZ2VuZXJhdGVkIGlu
c3BlY3RvciBwcm90b2NvbCBjb2RlIHRvIGJlOgorICAgICAgICAgLSByZXF1aXJlZCBwYXJhbWV0
ZXJzIGFyZSBgVGAgb3IgYFJlZjxUPiYmYAorICAgICAgICAgLSBvcHRpb25hbCBwYXJhbWV0ZXJz
IGFyZSBgT3B0aW9uYWw8VD4mJmAgb3IgYFJlZlB0cjxUPiYmYAorICAgICAgICAgLSBlbnVtIHBh
cmFtZXRlcnMgYXJlIHByZXByb2Nlc3NlZCBhbmQgcGFzc2VkIHRvIHRoZSBiYWNrZW5kIGRpc3Bh
dGNoZXIgaGFuZGxlciBpZiB2YWxpZAorICAgICAgICAgLSBzeW5jaHJvbm91cyBjb21tYW5kcyBy
ZXR1cm4gYEV4cGVjdGVkPFgsIEVycm9yU3RyaW5nPmAgdXNpbmcgdGhlIHNhbWUgdHlwZXMvcnVs
ZXMgYWJvdmUKKyAgICAgICAgICAgd2hlcmUgYFhgIGlzIGVpdGhlciBhIHNpbmdsZSByZXR1cm4g
b3IgYSBgc3RkOjp0dXBsZWAgb2YgbXVsdGlwbGUgcmV0dXJucworCisgICAgICAgIFRoZSBvbmUg
ZXhjZXB0aW9uIHRvIHRoZSBhYm92ZSBpcyBgU3RyaW5nYCwgd2hpY2ggaXMgYWxyZWFkeSBhIHRy
aS1zdGF0ZSBvZiBgbnVsbFN0cmluZygpYCwKKyAgICAgICAgYGVtcHR5U3RyaW5nKClgLCBhbmQg
c29tZXRoaW5nIHNldCwgc28gdGhlcmUncyBubyBuZWVkIHRvIHVzZSBgT3B0aW9uYWw8U3RyaW5n
PmAuCisKKyAgICAgICAgQWxzbyB1c2UgYFByb3RvY29sYCBvYmplY3RzL2B0eXBlZGVmc2Agd2hl
cmV2ZXIgcG9zc2libGUgdG8gZnVydGhlciByZWxhdGUgdGhlIHByb3RvY29sCisgICAgICAgIEpT
T04gYW5kIHRoZSBhY3R1YWwgYmFja2VuZCBkaXNwYXRjaGVyIGhhbmRsZXIgaW1wbGVtZW50YXRp
b24uCisKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQXVkaXRSZXNvdXJjZXNPYmplY3Qu
Y3BwOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDYW52YXMuaDoKKyAgICAgICAgKiBp
bnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzLmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVj
dG9yQ29udHJvbGxlci5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hl
ZXQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHA6CisgICAg
ICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBbmltYXRpb25BZ2VudC5oOgorICAgICAg
ICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQW5pbWF0aW9uQWdlbnQuY3BwOgorICAgICAg
ICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50Lmg6Cisg
ICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQu
Y3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ1BVUHJvZmlsZXJBZ2Vu
dC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ1BVUHJvZmlsZXJBZ2Vu
dC5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDU1NBZ2VudC5oOgor
ICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwOgorICAgICAg
ICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ2FudmFzQWdlbnQuaDoKKyAgICAgICAgKiBp
bnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNhbnZhc0FnZW50LmNwcDoKKyAgICAgICAgKiBpbnNw
ZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2Fn
ZW50cy9JbnNwZWN0b3JET01BZ2VudC5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9J
bnNwZWN0b3JET01EZWJ1Z2dlckFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9J
bnNwZWN0b3JET01EZWJ1Z2dlckFnZW50LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRz
L0luc3BlY3RvckRPTVN0b3JhZ2VBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRz
L0luc3BlY3RvckRhdGFiYXNlQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0lu
c3BlY3RvckRhdGFiYXNlQWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5z
cGVjdG9ySW5kZXhlZERCQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3Bl
Y3RvckluZGV4ZWREQkFnZW50LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3Bl
Y3RvckxheWVyVHJlZUFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0
b3JMYXllclRyZWVBZ2VudC5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0
b3JNZW1vcnlBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yTWVt
b3J5QWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yTmV0d29y
a0FnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JOZXR3b3JrQWdl
bnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUGFnZUFnZW50Lmg6
CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwOgorICAg
ICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5oOgorICAgICAg
ICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5jcHA6CisgICAgICAg
ICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JXb3JrZXJBZ2VudC5oOgorICAgICAgICAqIGlu
c3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yV29ya2VyQWdlbnQuY3BwOgorICAgICAgICAqIGluc3Bl
Y3Rvci9hZ2VudHMvV2ViQ29uc29sZUFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50
cy9XZWJEZWJ1Z2dlckFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9XZWJEZWJ1
Z2dlckFnZW50LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL1dlYkhlYXBBZ2VudC5o
OgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvV2ViSGVhcEFnZW50LmNwcDoKKyAgICAgICAg
KiBpbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZUF1ZGl0QWdlbnQuaDoKKyAgICAgICAgKiBpbnNw
ZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZUF1ZGl0QWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rv
ci9hZ2VudHMvcGFnZS9QYWdlQ29uc29sZUFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2Fn
ZW50cy9wYWdlL1BhZ2VDb25zb2xlQWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2Vu
dHMvcGFnZS9QYWdlRE9NRGVidWdnZXJBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2Vu
dHMvcGFnZS9QYWdlRE9NRGVidWdnZXJBZ2VudC5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL2Fn
ZW50cy9wYWdlL1BhZ2VEZWJ1Z2dlckFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50
cy9wYWdlL1BhZ2VEZWJ1Z2dlckFnZW50LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRz
L3BhZ2UvUGFnZUhlYXBBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvcGFnZS9Q
YWdlSGVhcEFnZW50LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZU5l
dHdvcmtBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlTmV0d29y
a0FnZW50LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZVJ1bnRpbWVB
Z2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlUnVudGltZUFnZW50
LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9TZXJ2aWNlV29ya2VyQWdl
bnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9TZXJ2aWNlV29ya2VyQWdl
bnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlckF1ZGl0QWdl
bnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJDb25zb2xlQWdl
bnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJBdWRpdEFnZW50
LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJET01EZWJ1Z2dl
ckFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2VyRE9NRGVi
dWdnZXJBZ2VudC5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2Vy
RGVidWdnZXJBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtl
ckRlYnVnZ2VyQWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dv
cmtlck5ldHdvcmtBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dv
cmtlck5ldHdvcmtBZ2VudC5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy93b3JrZXIv
V29ya2VyUnVudGltZUFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy93b3JrZXIv
V29ya2VyUnVudGltZUFnZW50LmNwcDoKKyAgICAgICAgRWxpZGVkIGJhY2tlbmQgZGlzcGF0Y2hl
ciBoYW5kbGVyIGNoYW5nZXMgZGVzY3JpYmUgYWJvdmUuCisKKyAgICAgICAgKiBpbnNwZWN0b3Iv
Q29tbWFuZExpbmVBUElIb3N0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbW1hbmRMaW5lQVBJ
SG9zdDo6aW5zcGVjdCk6CisgICAgICAgIChXZWJDb3JlOjpDb21tYW5kTGluZUFQSUhvc3Q6OmNs
ZWFyQ29uc29sZU1lc3NhZ2VzKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRl
bmRIb3N0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnZhbHVlUGF5bG9hZEZyb21KU09OVmFsdWUp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRnJvbnRlbmRIb3N0Ojpsb2dEaWFnbm9zdGlj
RXZlbnQpOgorICAgICAgICAqIGluc3BlY3Rvci9UaW1lbGluZVJlY29yZEZhY3RvcnkuaDoKKyAg
ICAgICAgKiBpbnNwZWN0b3IvVGltZWxpbmVSZWNvcmRGYWN0b3J5LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6YXBwZW5kTGF5b3V0Um9vdCk6CisgICAgICAg
ICogTW9kdWxlcy9hcHBsaWNhdGlvbm1hbmlmZXN0L0FwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25NYW5pZmVzdFBhcnNlcjo6cGFyc2VN
YW5pZmVzdCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyOjpw
YXJzZVN0YXJ0VVJMKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uTWFuaWZlc3RQYXJz
ZXI6OnBhcnNlRGlzcGxheSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbk1hbmlmZXN0
UGFyc2VyOjpwYXJzZVNjb3BlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uTWFuaWZl
c3RQYXJzZXI6OnBhcnNlR2VuZXJpY1N0cmluZyk6CisgICAgICAgICogTW9kdWxlcy9lbmNyeXB0
ZWRtZWRpYS9Jbml0RGF0YVJlZ2lzdHJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmV4dHJhY3RL
ZXlJRHNLZXlpZHMpOgorICAgICAgICAqIHBsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NETVV0aWxp
dGllcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDRE1VdGlsaXRpZXM6OnBhcnNlSlNPTk9iamVj
dCk6CisgICAgICAgICogcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJL
ZXkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VMaWNlbnNlRm9ybWF0KToKKyAgICAgICAg
KFdlYkNvcmU6OnBhcnNlTGljZW5zZVJlbGVhc2VBY2tub3dsZWRnZW1lbnRGb3JtYXQpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9DRE1GYWlyUGxheVN0cmVhbWlu
Zy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpleHRyYWN0U2luZkRhdGEpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NETUluc3RhbmNlRmFpclBsYXlTdHJl
YW1pbmdBVkZPYmpDLm1tOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VKU09OVmFsdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q0RNSW5zdGFuY2VTZXNzaW9uRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpD
Ojp1cGRhdGVMaWNlbnNlKToKKyAgICAgICAgYEpTT05gIGNsYXNzZXMgbm93IHVzZSBgUmVmJiZg
IHdoZXJldmVyIHBvc3NpYmxlIGFuZCBgT3B0aW9uYWxgIGluc3RlYWQgb2YgYW4gb3V0IHBhcmFt
ZXRlcgorICAgICAgICBmb3IgYGdldCpgL2BhcypgIHNvIHRoYXQgdmFsdWVzIGNhbiBiZSBtb3Jl
IGVhc2lseSBtYW5pcHVsYXRlZCBhbmQgY2FuIGJlIGNvbmZpZGVudGx5IGtub3duCisgICAgICAg
IHRvIGV4aXN0LgorCiAyMDIwLTA5LTA1ICBEZXZpbiBSb3Vzc28gIDxkcm91c3NvQGFwcGxlLmNv
bT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBhbGxvdyBET00gYnJlYWtwb2ludHMgdG8gYmUg
Y29uZmlndXJlZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkRyaXZlci9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViRHJpdmVyL0NoYW5nZUxvZwppbmRleCBkYTNiNjRjYWQ1ZWUxNDk1NjY0YzdmOGNiMGY3
ODQ4OTlmNTc4ODk0Li5mMWM5ZjBlNjI0MzYzMWExOTNmMWUyN2MyZmY5OGU1ZTBiNzg1Y2EyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViRHJpdmVyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViRHJp
dmVyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzNyBAQAorMjAyMC0wOS0wOCAgRGV2aW4gUm91c3Nv
ICA8ZHJvdXNzb0BhcHBsZS5jb20+CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogbW9kZXJuaXpl
IGdlbmVyYXRlZCBiYWNrZW5kIHByb3RvY29sIGNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNjMwMgorICAgICAgICA8cmRhcjovL3Byb2JsZW0v
Njg1NDc2NDk+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBDb21tYW5kUmVzdWx0LmNwcDoKKyAgICAgICAgKFdlYkRyaXZlcjo6Q29tbWFuZFJlc3Vs
dDo6Q29tbWFuZFJlc3VsdCk6CisgICAgICAgICogU2Vzc2lvbi5jcHA6CisgICAgICAgIChXZWJE
cml2ZXI6OmZpcnN0V2luZG93SGFuZGxlSW5SZXN1bHQpOgorICAgICAgICAoV2ViRHJpdmVyOjpT
ZXNzaW9uOjpnZXRUaW1lb3V0cyk6CisgICAgICAgIChXZWJEcml2ZXI6OlNlc3Npb246OmNyZWF0
ZVRvcExldmVsQnJvd3NpbmdDb250ZXh0KToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6
aGFuZGxlVXNlclByb21wdHMpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjpyZXBvcnRV
bmV4cGVjdGVkQWxlcnRPcGVuKToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6Z28pOgor
ICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjpnZXRDdXJyZW50VVJMKToKKyAgICAgICAgKFdl
YkRyaXZlcjo6U2Vzc2lvbjo6YmFjayk6CisgICAgICAgIChXZWJEcml2ZXI6OlNlc3Npb246OmZv
cndhcmQpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjpyZWZyZXNoKToKKyAgICAgICAg
KFdlYkRyaXZlcjo6U2Vzc2lvbjo6Z2V0VGl0bGUpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNz
aW9uOjpnZXRXaW5kb3dIYW5kbGUpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjpjbG9z
ZVRvcExldmVsQnJvd3NpbmdDb250ZXh0KToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6
c3dpdGNoVG9XaW5kb3cpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjpnZXRXaW5kb3dI
YW5kbGVzKToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6bmV3V2luZG93KToKKyAgICAg
ICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6c3dpdGNoVG9GcmFtZSk6CisgICAgICAgIChXZWJEcml2
ZXI6OlNlc3Npb246OnN3aXRjaFRvUGFyZW50RnJhbWUpOgorICAgICAgICAoV2ViRHJpdmVyOjpT
ZXNzaW9uOjpnZXRUb3BsZXZlbEJyb3dzaW5nQ29udGV4dFJlY3QpOgorICAgICAgICAoV2ViRHJp
dmVyOjpTZXNzaW9uOjpzZXRXaW5kb3dSZWN0KToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lv
bjo6bWF4aW1pemVXaW5kb3cpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjptaW5pbWl6
ZVdpbmRvdyk6CisgICAgICAgIChXZWJEcml2ZXI6OlNlc3Npb246OmZ1bGxzY3JlZW5XaW5kb3cp
OgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjpjcmVhdGVFbGVtZW50KToKKyAgICAgICAg
KFdlYkRyaXZlcjo6U2Vzc2lvbjo6ZXh0cmFjdEVsZW1lbnRJRCk6CisgICAgICAgIChXZWJEcml2
ZXI6OlNlc3Npb246OmNvbXB1dGVFbGVtZW50TGF5b3V0KToKKyAgICAgICAgKFdlYkRyaXZlcjo6
U2Vzc2lvbjo6ZmluZEVsZW1lbnRzKToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6Z2V0
QWN0aXZlRWxlbWVudCk6CisgICAgICAgIChXZWJEcml2ZXI6OlNlc3Npb246OmlzRWxlbWVudFNl
bGVjdGVkKToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6Z2V0RWxlbWVudFRleHQpOgor
ICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjpnZXRFbGVtZW50VGFnTmFtZSk6CisgICAgICAg
IChXZWJEcml2ZXI6OlNlc3Npb246OmdldEVsZW1lbnRSZWN0KToKKyAgICAgICAgKFdlYkRyaXZl
cjo6U2Vzc2lvbjo6aXNFbGVtZW50RW5hYmxlZCk6CisgICAgICAgIChXZWJEcml2ZXI6OlNlc3Np
b246OmlzRWxlbWVudERpc3BsYXllZCk6CisgICAgICAgIChXZWJEcml2ZXI6OlNlc3Npb246Omdl
dEVsZW1lbnRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjpnZXRFbGVt
ZW50UHJvcGVydHkpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjpnZXRFbGVtZW50Q1NT
VmFsdWUpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjp3YWl0Rm9yTmF2aWdhdGlvblRv
Q29tcGxldGUpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjplbGVtZW50SXNGaWxlVXBs
b2FkKToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6cGFyc2VFbGVtZW50SXNGaWxlVXBs
b2FkUmVzdWx0KToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6c2VsZWN0T3B0aW9uRWxl
bWVudCk6CisgICAgICAgIChXZWJEcml2ZXI6OlNlc3Npb246OmVsZW1lbnRDbGljayk6CisgICAg
ICAgIChXZWJEcml2ZXI6OlNlc3Npb246OmVsZW1lbnRJc0VkaXRhYmxlKToKKyAgICAgICAgKFdl
YkRyaXZlcjo6U2Vzc2lvbjo6ZWxlbWVudENsZWFyKToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vz
c2lvbjo6c2V0SW5wdXRGaWxlVXBsb2FkRmlsZXMpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNz
aW9uOjplbGVtZW50U2VuZEtleXMpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjpnZXRQ
YWdlU291cmNlKToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6aGFuZGxlU2NyaXB0UmVz
dWx0KToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6ZXhlY3V0ZVNjcmlwdCk6CisgICAg
ICAgIChXZWJEcml2ZXI6OlNlc3Npb246OnBlcmZvcm1Nb3VzZUludGVyYWN0aW9uKToKKyAgICAg
ICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6cGVyZm9ybUtleWJvYXJkSW50ZXJhY3Rpb25zKToKKyAg
ICAgICAgKFdlYkRyaXZlcjo6YnVpbHRBdXRvbWF0aW9uQ29va2llKToKKyAgICAgICAgKFdlYkRy
aXZlcjo6c2VyaWFsaXplQ29va2llKToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6Z2V0
QWxsQ29va2llcyk6CisgICAgICAgIChXZWJEcml2ZXI6OlNlc3Npb246OmdldE5hbWVkQ29va2ll
KToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6YWRkQ29va2llKToKKyAgICAgICAgKFdl
YkRyaXZlcjo6U2Vzc2lvbjo6ZGVsZXRlQ29va2llKToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vz
c2lvbjo6ZGVsZXRlQWxsQ29va2llcyk6CisgICAgICAgIChXZWJEcml2ZXI6OlNlc3Npb246OnBl
cmZvcm1BY3Rpb25zKToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6cmVsZWFzZUFjdGlv
bnMpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjpkaXNtaXNzQWxlcnQpOgorICAgICAg
ICAoV2ViRHJpdmVyOjpTZXNzaW9uOjphY2NlcHRBbGVydCk6CisgICAgICAgIChXZWJEcml2ZXI6
OlNlc3Npb246OmdldEFsZXJ0VGV4dCk6CisgICAgICAgIChXZWJEcml2ZXI6OlNlc3Npb246OnNl
bmRBbGVydFRleHQpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjp0YWtlU2NyZWVuc2hv
dCk6CisgICAgICAgICogU2Vzc2lvbkhvc3QuY3BwOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNz
aW9uSG9zdDo6ZGlzcGF0Y2hNZXNzYWdlKToKKyAgICAgICAgKiBXZWJEcml2ZXJTZXJ2aWNlLmg6
CisgICAgICAgICogV2ViRHJpdmVyU2VydmljZS5jcHA6CisgICAgICAgIChXZWJEcml2ZXI6Oldl
YkRyaXZlclNlcnZpY2U6OmhhbmRsZVJlcXVlc3QpOgorICAgICAgICAoV2ViRHJpdmVyOjpXZWJE
cml2ZXJTZXJ2aWNlOjpzZW5kUmVzcG9uc2UgY29uc3QpOgorICAgICAgICAoV2ViRHJpdmVyOjp2
YWx1ZUFzTnVtYmVySW5SYW5nZSk6CisgICAgICAgIChXZWJEcml2ZXI6OmRlc2VyaWFsaXplVGlt
ZW91dHMpOgorICAgICAgICAoV2ViRHJpdmVyOjpkZXNlcmlhbGl6ZVByb3h5KToKKyAgICAgICAg
KFdlYkRyaXZlcjo6V2ViRHJpdmVyU2VydmljZTo6cGFyc2VDYXBhYmlsaXRpZXMgY29uc3QpOgor
ICAgICAgICAoV2ViRHJpdmVyOjpXZWJEcml2ZXJTZXJ2aWNlOjpmaW5kU2Vzc2lvbk9yQ29tcGxl
dGVXaXRoRXJyb3IpOgorICAgICAgICAoV2ViRHJpdmVyOjpXZWJEcml2ZXJTZXJ2aWNlOjp2YWxp
ZGF0ZWRDYXBhYmlsaXRpZXMgY29uc3QpOgorICAgICAgICAoV2ViRHJpdmVyOjpXZWJEcml2ZXJT
ZXJ2aWNlOjptZXJnZUNhcGFiaWxpdGllcyBjb25zdCk6CisgICAgICAgIChXZWJEcml2ZXI6Oldl
YkRyaXZlclNlcnZpY2U6Om1hdGNoQ2FwYWJpbGl0aWVzIGNvbnN0KToKKyAgICAgICAgKFdlYkRy
aXZlcjo6V2ViRHJpdmVyU2VydmljZTo6cHJvY2Vzc0NhcGFiaWxpdGllcyBjb25zdCk6CisgICAg
ICAgIChXZWJEcml2ZXI6OldlYkRyaXZlclNlcnZpY2U6OmNyZWF0ZVNlc3Npb24pOgorICAgICAg
ICAoV2ViRHJpdmVyOjpXZWJEcml2ZXJTZXJ2aWNlOjpkZWxldGVTZXNzaW9uKToKKyAgICAgICAg
KFdlYkRyaXZlcjo6V2ViRHJpdmVyU2VydmljZTo6Z28pOgorICAgICAgICAoV2ViRHJpdmVyOjpX
ZWJEcml2ZXJTZXJ2aWNlOjpzZXRXaW5kb3dSZWN0KToKKyAgICAgICAgKFdlYkRyaXZlcjo6V2Vi
RHJpdmVyU2VydmljZTo6Y2xvc2VXaW5kb3cpOgorICAgICAgICAoV2ViRHJpdmVyOjpXZWJEcml2
ZXJTZXJ2aWNlOjpzd2l0Y2hUb1dpbmRvdyk6CisgICAgICAgIChXZWJEcml2ZXI6OldlYkRyaXZl
clNlcnZpY2U6Om5ld1dpbmRvdyk6CisgICAgICAgIChXZWJEcml2ZXI6OldlYkRyaXZlclNlcnZp
Y2U6OnN3aXRjaFRvRnJhbWUpOgorICAgICAgICAoV2ViRHJpdmVyOjpmaW5kRWxlbWVudE9yQ29t
cGxldGVXaXRoRXJyb3IpOgorICAgICAgICAoV2ViRHJpdmVyOjpmaW5kU3RyYXRlZ3lBbmRTZWxl
Y3Rvck9yQ29tcGxldGVXaXRoRXJyb3IpOgorICAgICAgICAoV2ViRHJpdmVyOjpXZWJEcml2ZXJT
ZXJ2aWNlOjpnZXRFbGVtZW50QXR0cmlidXRlKToKKyAgICAgICAgKFdlYkRyaXZlcjo6V2ViRHJp
dmVyU2VydmljZTo6Z2V0RWxlbWVudFByb3BlcnR5KToKKyAgICAgICAgKFdlYkRyaXZlcjo6V2Vi
RHJpdmVyU2VydmljZTo6Z2V0RWxlbWVudENTU1ZhbHVlKToKKyAgICAgICAgKFdlYkRyaXZlcjo6
V2ViRHJpdmVyU2VydmljZTo6ZWxlbWVudFNlbmRLZXlzKToKKyAgICAgICAgKFdlYkRyaXZlcjo6
ZmluZFNjcmlwdEFuZEFyZ3VtZW50c09yQ29tcGxldGVXaXRoRXJyb3IpOgorICAgICAgICAoV2Vi
RHJpdmVyOjpXZWJEcml2ZXJTZXJ2aWNlOjpnZXROYW1lZENvb2tpZSk6CisgICAgICAgIChXZWJE
cml2ZXI6OmRlc2VyaWFsaXplQ29va2llKToKKyAgICAgICAgKFdlYkRyaXZlcjo6V2ViRHJpdmVy
U2VydmljZTo6YWRkQ29va2llKToKKyAgICAgICAgKFdlYkRyaXZlcjo6V2ViRHJpdmVyU2Vydmlj
ZTo6ZGVsZXRlQ29va2llKToKKyAgICAgICAgKFdlYkRyaXZlcjo6cHJvY2Vzc1BhdXNlQWN0aW9u
KToKKyAgICAgICAgKFdlYkRyaXZlcjo6cHJvY2Vzc051bGxBY3Rpb24pOgorICAgICAgICAoV2Vi
RHJpdmVyOjpwcm9jZXNzS2V5QWN0aW9uKToKKyAgICAgICAgKFdlYkRyaXZlcjo6cHJvY2Vzc1Bv
aW50ZXJBY3Rpb24pOgorICAgICAgICAoV2ViRHJpdmVyOjpwcm9jZXNzUG9pbnRlclBhcmFtZXRl
cnMpOgorICAgICAgICAoV2ViRHJpdmVyOjpwcm9jZXNzSW5wdXRBY3Rpb25TZXF1ZW5jZSk6Cisg
ICAgICAgIChXZWJEcml2ZXI6OldlYkRyaXZlclNlcnZpY2U6OnBlcmZvcm1BY3Rpb25zKToKKyAg
ICAgICAgKFdlYkRyaXZlcjo6V2ViRHJpdmVyU2VydmljZTo6c2VuZEFsZXJ0VGV4dCk6CisgICAg
ICAgICogV2ViRHJpdmVyL2d0ay9XZWJEcml2ZXJTZXJ2aWNlR3RrLmNwcDoKKyAgICAgICAgKFdl
YkRyaXZlcjo6V2ViRHJpdmVyU2VydmljZTo6cGxhdGZvcm1NYXRjaENhcGFiaWxpdHkpOgorICAg
ICAgICAoV2ViRHJpdmVyOjpXZWJEcml2ZXJTZXJ2aWNlOjpwbGF0Zm9ybVZhbGlkYXRlQ2FwYWJp
bGl0eSk6CisgICAgICAgIChXZWJEcml2ZXI6OldlYkRyaXZlclNlcnZpY2U6OnBsYXRmb3JtUGFy
c2VDYXBhYmlsaXRpZXMpOgorICAgICAgICAqIFdlYkRyaXZlci93aW4vV2ViRHJpdmVyU2Vydmlj
ZVdpbi5jcHA6CisgICAgICAgIChXZWJEcml2ZXI6OldlYkRyaXZlclNlcnZpY2U6OnBsYXRmb3Jt
TWF0Y2hDYXBhYmlsaXR5KToKKyAgICAgICAgKFdlYkRyaXZlcjo6V2ViRHJpdmVyU2VydmljZTo6
cGxhdGZvcm1WYWxpZGF0ZUNhcGFiaWxpdHkpOgorICAgICAgICAoV2ViRHJpdmVyOjpXZWJEcml2
ZXJTZXJ2aWNlOjpwbGF0Zm9ybVBhcnNlQ2FwYWJpbGl0aWVzKToKKyAgICAgICAgKiBXZWJEcml2
ZXIvd3BlL1dlYkRyaXZlclNlcnZpY2VXUEUuY3BwOgorICAgICAgICAoV2ViRHJpdmVyOjpXZWJE
cml2ZXJTZXJ2aWNlOjpwbGF0Zm9ybU1hdGNoQ2FwYWJpbGl0eSk6CisgICAgICAgIChXZWJEcml2
ZXI6OldlYkRyaXZlclNlcnZpY2U6OnBsYXRmb3JtVmFsaWRhdGVDYXBhYmlsaXR5KToKKyAgICAg
ICAgKFdlYkRyaXZlcjo6V2ViRHJpdmVyU2VydmljZTo6cGxhdGZvcm1QYXJzZUNhcGFiaWxpdGll
cyk6CisgICAgICAgIGBKU09OYCBjbGFzc2VzIG5vdyB1c2UgYFJlZiYmYCB3aGVyZXZlciBwb3Nz
aWJsZSBhbmQgYE9wdGlvbmFsYCBpbnN0ZWFkIG9mIGFuIG91dCBwYXJhbWV0ZXIKKyAgICAgICAg
Zm9yIGBnZXQqYC9gYXMqYCBzbyB0aGF0IHZhbHVlcyBjYW4gYmUgbW9yZSBlYXNpbHkgbWFuaXB1
bGF0ZWQgYW5kIGNhbiBiZSBjb25maWRlbnRseSBrbm93bgorICAgICAgICB0byBleGlzdC4KKwog
MjAyMC0wNy0xNSAgRnVqaWkgSGlyb25vcmkgIDxIaXJvbm9yaS5GdWppaUBzb255LmNvbT4KIAog
ICAgICAgICBbQ01ha2VdW1dlYkRyaXZlcl0gR2VuZXJhdGluZyBXZWJEcml2ZXJBdG9tcy5jcHAg
aXMgcmFyZWx5IGZhaWxpbmcgYXMgIkltcG9ydEVycm9yOiBObyBtb2R1bGUgbmFtZWQganNtaW4i
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvQ2hhbmdlTG9nIGIvU291cmNlL1dl
Ykluc3BlY3RvclVJL0NoYW5nZUxvZwppbmRleCA5OWNjMWM3MDFiMTNlYjhlYmZmNGI4MjQ2OTll
NTQ4MDgwZTA5NmNkLi40Y2U4OTQ5Mjg1ODZjMzE4MjhlYzJhNjUwMTUyMTlmYTdlZWJjZjA0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNCBAQAorMjAyMC0wOS0wOCAgRGV2
aW4gUm91c3NvICA8ZHJvdXNzb0BhcHBsZS5jb20+CisKKyAgICAgICAgV2ViIEluc3BlY3Rvcjog
bW9kZXJuaXplIGdlbmVyYXRlZCBiYWNrZW5kIHByb3RvY29sIGNvZGUKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNjMwMgorICAgICAgICA8cmRhcjov
L3Byb2JsZW0vNjg1NDc2NDk+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0NTU01hbmFnZXIuanM6Cisg
ICAgICAgIChXSS5DU1NNYW5hZ2VyLnByb3RvdHlwZS5zZXQgZm9yY2VkQXBwZWFyYW5jZSk6Cisg
ICAgICAgIE5vdyB0aGF0IGVudW1zIGFyZSBwcm9jZXNzZWQgYmVmb3JlIGJlaW5nIHBhc3NlZCB0
byBiYWNrZW5kIGRpc3BhY2hlciBoYW5kbGVycywgdGhlCisgICAgICAgIGBhcHBlYXJhbmNlYCBw
YXJhbWV0ZXIgb2YgYFBhZ2Uuc2V0Rm9yY2VkQXBwZWFyYW5jZWAgbXVzdCBiZSBtYXJrZWQgYG9w
dGlvbmFsYCBhcworICAgICAgICB0aGVyZSdzIG5vIHdheSBmb3IgaXQgdG8gYWNjZXB0IGFuIGVt
cHR5IHN0cmluZywgYXMgdGhhdCdzIG5vdCBwb3NzaWJsZSBmb3IgYW4gZW51bS4KKyAgICAgICAg
QXMgc3VjaCwgcmV3b3JrIHRoZSBmcm9udGVuZCBsb2dpYyBmb3IgaW52b2tpbmcgYFBhZ2Uuc2V0
Rm9yY2VkQXBwZWFyYW5jZWAgdG8gaW5zdGVhZAorICAgICAgICBub3QgcHJvdmlkZSBhbiBgYXBw
ZWFyYW5jZWAgcGFyYW1ldGVyIGF0IGFsbCB3aGVuIHdhbnRpbmcgdG8gInVuc2V0IiBpdC4KKwor
ICAgICAgICAqIFVzZXJJbnRlcmZhY2UvVmlld3MvU2V0dGluZ3NUYWJDb250ZW50Vmlldy5qczoK
KyAgICAgICAgKFdJLlNldHRpbmdzVGFiQ29udGVudFZpZXcucHJvdG90eXBlLl9jcmVhdGVDb25z
b2xlU2V0dGluZ3NWaWV3KToKKyAgICAgICAgTm93IHRoYXQgYWxsIGxvZ2dpbmcgY2hhbm5lbHMg
bWF0Y2hpbmcgYSBgQ29uc29sZS5DaGFubmVsU291cmNlYCBhcmUgcmV0dXJuZWQgaW5zdGVhZCBv
ZgorICAgICAgICBqdXN0IHRoZSBoYXJkY29kZWQgbGlzdCwgY2hlY2sgZm9yIGEgbWF0Y2hpbmcg
YFdJLlVJU3RyaW5nYCBiZWZvcmUgc2hvd2luZyBhIGA8c2VsZWN0PmAuCisKIDIwMjAtMDktMDUg
IERldmluIFJvdXNzbyAgPGRyb3Vzc29AYXBwbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0
b3I6IGFsbG93IERPTSBicmVha3BvaW50cyB0byBiZSBjb25maWd1cmVkCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDFj
ODc4MDc4MzQzYTMyMzdjZGM3YjgxNDJkOTRjMjU5NzJkYjlkNzcuLjJkMzk1ZTlkOWRiMmQ0OTNk
NzgyOTEzZjM1MTc4ODYyODEzODA4YmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdl
TG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTUgQEAKKzIwMjAt
MDktMDggIERldmluIFJvdXNzbyAgPGRyb3Vzc29AYXBwbGUuY29tPgorCisgICAgICAgIFdlYiBJ
bnNwZWN0b3I6IG1vZGVybml6ZSBnZW5lcmF0ZWQgYmFja2VuZCBwcm90b2NvbCBjb2RlCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTYzMDIKKyAgICAg
ICAgPHJkYXI6Ly9wcm9ibGVtLzY4NTQ3NjQ5PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFByZXZpb3VzbHksIHRoZSBpbnNwZWN0b3IgcHJvdG9jb2wg
d2FzIGV4cHJlc3NlZCBpbiBjb2RlIGluIGEgc29tZXdoYXQgY29uZnVzaW5nIHdheToKKyAgICAg
ICAgIC0gdGhlIGVycm9yIHN0cmluZyB3YXMgdGhlIGZpcnN0IGFyZ3VtZW50CisgICAgICAgICAt
IHJlcXVpcmVkIHBhcmFtZXRlcnMgd2VyZSBgVGAgb3IgYGNvbnN0IFQmYAorICAgICAgICAgLSBv
cHRpb25hbCBwYXJhbWV0ZXJzIHdlcmUgYGNvbnN0IFQqYAorICAgICAgICAgLSBlbnVtIHBhcmFt
ZXRlcnMgd2VyZSB0aGUgdW5kZXJseWluZyB0eXBlIHJlcXVpcmluZyB0aGUgYmFja2VuZCBkaXNw
YXRjaGVyIGhhbmRsZXIgdG8KKyAgICAgICAgICAgcHJvY2VzcyBpdCBpbnN0ZWFkIG9mIGl0IGJl
aW5nIHByZXByb2Nlc3NlZAorICAgICAgICAgLSByZXF1aXJlZCByZXR1cm5zIHdlcmUgYFQmYAor
ICAgICAgICAgLSBvcHRpb25hbCByZXR1cm5zIHdlcmUgYFQqYAorICAgICAgICBUaGlzIGRvZXNu
J3QgcmVhbGx5IG1ha2UgZm9yIGVhc3kvb2J2aW91cyByZWFkaW5nIG9mIGNvZGUgc2luY2UgdGhl
IG9yZGVyIG9mIGFyZ3VtZW50cyBpcworICAgICAgICBub3Qgd2VpcmQgKGUuZy4gZXJyb3Igc3Ry
aW5nIGZpcnN0KSwgYW5kIHRoYXQgdGhlcmUgYXJlIHJlZmVyZW5jZXMvcG9pbnRlcnMgdG8gcHJp
bWl0aXZlCisgICAgICAgIHR5cGVzLgorCisgICAgICAgIFRoaXMgcGF0Y2ggY2xlYW5zIHVwIHRo
ZSBnZW5lcmF0ZWQgaW5zcGVjdG9yIHByb3RvY29sIGNvZGUgdG8gYmU6CisgICAgICAgICAtIHJl
cXVpcmVkIHBhcmFtZXRlcnMgYXJlIGBUYCBvciBgUmVmPFQ+JiZgCisgICAgICAgICAtIG9wdGlv
bmFsIHBhcmFtZXRlcnMgYXJlIGBPcHRpb25hbDxUPiYmYCBvciBgUmVmUHRyPFQ+JiZgCisgICAg
ICAgICAtIGVudW0gcGFyYW1ldGVycyBhcmUgcHJlcHJvY2Vzc2VkIGFuZCBwYXNzZWQgdG8gdGhl
IGJhY2tlbmQgZGlzcGF0Y2hlciBoYW5kbGVyIGlmIHZhbGlkCisgICAgICAgICAtIHN5bmNocm9u
b3VzIGNvbW1hbmRzIHJldHVybiBgRXhwZWN0ZWQ8WCwgRXJyb3JTdHJpbmc+YCB1c2luZyB0aGUg
c2FtZSB0eXBlcy9ydWxlcyBhYm92ZQorICAgICAgICAgICB3aGVyZSBgWGAgaXMgZWl0aGVyIGEg
c2luZ2xlIHJldHVybiBvciBhIGBzdGQ6OnR1cGxlYCBvZiBtdWx0aXBsZSByZXR1cm5zCisKKyAg
ICAgICAgVGhlIG9uZSBleGNlcHRpb24gdG8gdGhlIGFib3ZlIGlzIGBTdHJpbmdgLCB3aGljaCBp
cyBhbHJlYWR5IGEgdHJpLXN0YXRlIG9mIGBudWxsU3RyaW5nKClgLAorICAgICAgICBgZW1wdHlT
dHJpbmcoKWAsIGFuZCBzb21ldGhpbmcgc2V0LCBzbyB0aGVyZSdzIG5vIG5lZWQgdG8gdXNlIGBP
cHRpb25hbDxTdHJpbmc+YC4KKworICAgICAgICBBbHNvIHVzZSBgUHJvdG9jb2xgIG9iamVjdHMv
YHR5cGVkZWZzYCB3aGVyZXZlciBwb3NzaWJsZSB0byBmdXJ0aGVyIHJlbGF0ZSB0aGUgcHJvdG9j
b2wKKyAgICAgICAgSlNPTiBhbmQgdGhlIGFjdHVhbCBiYWNrZW5kIGRpc3BhdGNoZXIgaGFuZGxl
ciBpbXBsZW1lbnRhdGlvbi4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BdXRvbWF0aW9uL0F1dG9t
YXRpb24uanNvbjoKKyAgICAgICAgYENvb3JkaW5hdGVTeXN0ZW1gIGhhcyBgUGFnZWAgYW5kIGBW
aWV3cG9ydGAgZW51bSB2YWx1ZXMsIGJ1dCBgV2ViQXV0b21hdGlvblNlc3Npb25gIGNoZWNrcwor
ICAgICAgICBmb3IgYCJQYWdlImAgYW5kIGAiTGF5b3V0Vmlld3BvcnQiYC4gQWRkIGEgYExheW91
dFZpZXdwb3J0YCBlbnVtIHZhbHVlIG5vdyB0aGF0IGVudW1zIGFyZQorICAgICAgICBwcm9jZXNz
ZWQgYmVmb3JlIGJlaW5nIHBhc3NlZCB0byBiYWNrZW5kIGRpc3BhY2hlciBoYW5kbGVycyB0byBw
cmVzZXJ2ZSBmdW5jdGlvbmFsaXR5LgorCisgICAgICAgICogVUlQcm9jZXNzL0luc3BlY3Rvci9B
Z2VudHMvSW5zcGVjdG9yQnJvd3NlckFnZW50Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0luc3Bl
Y3Rvci9BZ2VudHMvSW5zcGVjdG9yQnJvd3NlckFnZW50LmNwcDoKKyAgICAgICAgKiBVSVByb2Nl
c3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbk1hY3Jvcy5oOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmg6CisgICAgICAgICogVUlQ
cm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9BdXRvbWF0aW9uL21hYy9XZWJBdXRvbWF0aW9uU2Vzc2lvbk1hYy5tbToKKyAgICAg
ICAgRWxpZGVkIGJhY2tlbmQgZGlzcGF0Y2hlciBoYW5kbGVyIGNoYW5nZXMgZGVzY3JpYmUgYWJv
dmUuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yL3NvY2tldC9SZW1vdGVJbnNwZWN0
b3JDbGllbnQuY3BwOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbnNwZWN0b3JDbGllbnQ6OnNl
dFRhcmdldExpc3QpOgorICAgICAgICBgSlNPTmAgY2xhc3NlcyBub3cgdXNlIGBSZWYmJmAgd2hl
cmV2ZXIgcG9zc2libGUgYW5kIGBPcHRpb25hbGAgaW5zdGVhZCBvZiBhbiBvdXQgcGFyYW1ldGVy
CisgICAgICAgIGZvciBgZ2V0KmAvYGFzKmAgc28gdGhhdCB2YWx1ZXMgY2FuIGJlIG1vcmUgZWFz
aWx5IG1hbmlwdWxhdGVkIGFuZCBjYW4gYmUgY29uZmlkZW50bHkga25vd24KKyAgICAgICAgdG8g
ZXhpc3QuCisKIDIwMjAtMDktMDUgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgogCiAg
ICAgICAgIFtXZWJJRExdIFJlYWxpZ24gb3VyIElETCBleHRlbmRlZCBhdHRyaWJ1dGUgbmFtZXMg
d2l0aCB0aG9zZSBzcGVjaWZpZWQgaW4gV2ViSURMCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYmluZGluZ3MvU2NyaXB0VmFsdWUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2JpbmRpbmdzL1NjcmlwdFZhbHVlLmNwcAppbmRleCA2Yjg1M2M5MzFmMWRjZTkyNTNiYmFjMDZh
OTVlNmFhYzUyN2NmMjVhLi43OTY4YjkwYTczYjI4MmRmNTk4MjI1NmE2ZWRjYjJkNmU1NzQzOTZl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvU2NyaXB0VmFsdWUu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iaW5kaW5ncy9TY3JpcHRWYWx1ZS5jcHAK
QEAgLTY5LDcgKzY5LDcgQEAgc3RhdGljIFJlZlB0cjxKU09OOjpWYWx1ZT4ganNUb0luc3BlY3Rv
clZhbHVlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmEKICAgICAgICAgICAgICAg
ICBhdXRvIGVsZW1lbnRWYWx1ZSA9IGpzVG9JbnNwZWN0b3JWYWx1ZShnbG9iYWxPYmplY3QsIGFy
cmF5LmdldEluZGV4KGdsb2JhbE9iamVjdCwgaSksIG1heERlcHRoKTsKICAgICAgICAgICAgICAg
ICBpZiAoIWVsZW1lbnRWYWx1ZSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0gICAgICAgICAgICAgICAgaW5zcGVjdG9yQXJyYXktPnB1c2hWYWx1ZShXVEZNb3ZlKGVsZW1l
bnRWYWx1ZSkpOworICAgICAgICAgICAgICAgIGluc3BlY3RvckFycmF5LT5wdXNoVmFsdWUoZWxl
bWVudFZhbHVlLnJlbGVhc2VOb25OdWxsKCkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAg
cmV0dXJuIGluc3BlY3RvckFycmF5OwogICAgICAgICB9CkBAIC04Miw3ICs4Miw3IEBAIHN0YXRp
YyBSZWZQdHI8SlNPTjo6VmFsdWU+IGpzVG9JbnNwZWN0b3JWYWx1ZShKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU1ZhCiAgICAgICAgICAgICBhdXRvIGluc3BlY3RvclZhbHVlID0ganNU
b0luc3BlY3RvclZhbHVlKGdsb2JhbE9iamVjdCwgb2JqZWN0LmdldChnbG9iYWxPYmplY3QsIG5h
bWUpLCBtYXhEZXB0aCk7CiAgICAgICAgICAgICBpZiAoIWluc3BlY3RvclZhbHVlKQogICAgICAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICAgICAgaW5zcGVjdG9yT2JqZWN0LT5z
ZXRWYWx1ZShuYW1lLnN0cmluZygpLCBXVEZNb3ZlKGluc3BlY3RvclZhbHVlKSk7CisgICAgICAg
ICAgICBpbnNwZWN0b3JPYmplY3QtPnNldFZhbHVlKG5hbWUuc3RyaW5nKCksIGluc3BlY3RvclZh
bHVlLnJlbGVhc2VOb25OdWxsKCkpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBpbnNwZWN0
b3JPYmplY3Q7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9Bc3luY1N0YWNrVHJhY2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9Bc3luY1N0YWNrVHJhY2UuY3BwCmluZGV4IDU0NTBlMmYzYzAwOWM2MDE4Y2Y5YzUzMGEwMzZj
M2RiN2E2MzQ1MGUuLmE1OTYzOTVjYmVhNzkxZTcwYmUzZTIzNjJmZTU3ZjQzODM0YTU5NGEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvQXN5bmNTdGFja1RyYWNl
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0FzeW5jU3RhY2tUcmFj
ZS5jcHAKQEAgLTk3LDcgKzk3LDcgQEAgdm9pZCBBc3luY1N0YWNrVHJhY2U6OmRpZENhbmNlbEFz
eW5jQ2FsbCgpCiAgICAgbV9zdGF0ZSA9IFN0YXRlOjpDYW5jZWxlZDsKIH0KIAotUmVmUHRyPFBy
b3RvY29sOjpDb25zb2xlOjpTdGFja1RyYWNlPiBBc3luY1N0YWNrVHJhY2U6OmJ1aWxkSW5zcGVj
dG9yT2JqZWN0KCkgY29uc3QKK1JlZjxQcm90b2NvbDo6Q29uc29sZTo6U3RhY2tUcmFjZT4gQXN5
bmNTdGFja1RyYWNlOjpidWlsZEluc3BlY3Rvck9iamVjdCgpIGNvbnN0CiB7CiAgICAgUmVmUHRy
PFByb3RvY29sOjpDb25zb2xlOjpTdGFja1RyYWNlPiB0b3BTdGFja1RyYWNlOwogICAgIFJlZlB0
cjxQcm90b2NvbDo6Q29uc29sZTo6U3RhY2tUcmFjZT4gcHJldmlvdXNTdGFja1RyYWNlOwpAQCAt
MTIwLDEzICsxMjAsMTMgQEAgUmVmUHRyPFByb3RvY29sOjpDb25zb2xlOjpTdGFja1RyYWNlPiBB
c3luY1N0YWNrVHJhY2U6OmJ1aWxkSW5zcGVjdG9yT2JqZWN0KCkgY28KICAgICAgICAgICAgIHRv
cFN0YWNrVHJhY2UgPSBwcm90b2NvbE9iamVjdC5wdHIoKTsKIAogICAgICAgICBpZiAocHJldmlv
dXNTdGFja1RyYWNlKQotICAgICAgICAgICAgcHJldmlvdXNTdGFja1RyYWNlLT5zZXRQYXJlbnRT
dGFja1RyYWNlKHByb3RvY29sT2JqZWN0LnB0cigpKTsKKyAgICAgICAgICAgIHByZXZpb3VzU3Rh
Y2tUcmFjZS0+c2V0UGFyZW50U3RhY2tUcmFjZShwcm90b2NvbE9iamVjdC5jb3B5UmVmKCkpOwog
CiAgICAgICAgIHByZXZpb3VzU3RhY2tUcmFjZSA9IFdURk1vdmUocHJvdG9jb2xPYmplY3QpOwog
ICAgICAgICBzdGFja1RyYWNlID0gc3RhY2tUcmFjZS0+bV9wYXJlbnQuZ2V0KCk7CiAgICAgfQog
Ci0gICAgcmV0dXJuIHRvcFN0YWNrVHJhY2U7CisgICAgcmV0dXJuIHRvcFN0YWNrVHJhY2UucmVs
ZWFzZU5vbk51bGwoKTsKIH0KIAogdm9pZCBBc3luY1N0YWNrVHJhY2U6OnRydW5jYXRlKHNpemVf
dCBtYXhEZXB0aCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
QXN5bmNTdGFja1RyYWNlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0FzeW5j
U3RhY2tUcmFjZS5oCmluZGV4IDZlZGU2YzQyNWFiY2FhMmQ2MWU1YmI3YjFiYTE5ZTMyZTU3MjNi
NmMuLjQ5OWExZTA1ZmQ1OTQzZjlmYWVkYzMwZTBiZDNkMjBlMGM1ZGRiZWEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvQXN5bmNTdGFja1RyYWNlLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9Bc3luY1N0YWNrVHJhY2UuaApAQCAtNTEs
NyArNTEsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBkaWREaXNwYXRjaEFzeW5jQ2FsbCgpOwogICAg
IHZvaWQgZGlkQ2FuY2VsQXN5bmNDYWxsKCk7CiAKLSAgICBSZWZQdHI8UHJvdG9jb2w6OkNvbnNv
bGU6OlN0YWNrVHJhY2U+IGJ1aWxkSW5zcGVjdG9yT2JqZWN0KCkgY29uc3Q7CisgICAgUmVmPFBy
b3RvY29sOjpDb25zb2xlOjpTdGFja1RyYWNlPiBidWlsZEluc3BlY3Rvck9iamVjdCgpIGNvbnN0
OwogCiAgICAgfkFzeW5jU3RhY2tUcmFjZSgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL0NvbnNvbGVNZXNzYWdlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3IvQ29uc29sZU1lc3NhZ2UuY3BwCmluZGV4IDU0MmM3YzdiMzdlZmIyZTRh
NzZhMzJhMDA4ZDA2M2RiYzgwNWNkZDAuLjkwYTFkZDk2MDQ3MGE1NGVkM2IxNDY2Y2VjZmRlZmE4
MzQ5NDU4MGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvQ29u
c29sZU1lc3NhZ2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvQ29u
c29sZU1lc3NhZ2UuY3BwCkBAIC0yNjEsOSArMjYxLDExIEBAIHZvaWQgQ29uc29sZU1lc3NhZ2U6
OmFkZFRvRnJvbnRlbmQoQ29uc29sZUZyb250ZW5kRGlzcGF0Y2hlciYgY29uc29sZUZyb250ZW5k
RGlzCiAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICBhcmd1bWVudHNPYmplY3QtPmFkZEl0ZW0oV1RGTW92ZShpbnNwZWN0b3JW
YWx1ZSkpOwotICAgICAgICAgICAgICAgICAgICBpZiAobV9hcmd1bWVudHMtPmFyZ3VtZW50Q291
bnQoKSA+IDEpCi0gICAgICAgICAgICAgICAgICAgICAgICBhcmd1bWVudHNPYmplY3QtPmFkZEl0
ZW0oaW5qZWN0ZWRTY3JpcHQud3JhcE9iamVjdChjb2x1bW5zLCAiY29uc29sZSJfcywgdHJ1ZSkp
OworICAgICAgICAgICAgICAgICAgICBhcmd1bWVudHNPYmplY3QtPmFkZEl0ZW0oaW5zcGVjdG9y
VmFsdWUucmVsZWFzZU5vbk51bGwoKSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChtX2FyZ3Vt
ZW50cy0+YXJndW1lbnRDb3VudCgpID4gMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KGF1dG8gaW5zcGVjdG9yT2JqZWN0ID0gaW5qZWN0ZWRTY3JpcHQud3JhcE9iamVjdChjb2x1bW5z
LCAiY29uc29sZSJfcywgdHJ1ZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJndW1l
bnRzT2JqZWN0LT5hZGRJdGVtKGluc3BlY3Rvck9iamVjdC5yZWxlYXNlTm9uTnVsbCgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2FyZ3VtZW50cy0+YXJndW1lbnRD
b3VudCgpOyArK2kpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gaW5zcGVjdG9yVmFs
dWUgPSBpbmplY3RlZFNjcmlwdC53cmFwT2JqZWN0KG1fYXJndW1lbnRzLT5hcmd1bWVudEF0KGkp
LCAiY29uc29sZSJfcywgZ2VuZXJhdGVQcmV2aWV3KTsKQEAgLTI3MSw3ICsyNzMsNyBAQCB2b2lk
IENvbnNvbGVNZXNzYWdlOjphZGRUb0Zyb250ZW5kKENvbnNvbGVGcm9udGVuZERpc3BhdGNoZXIm
IGNvbnNvbGVGcm9udGVuZERpcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50c09i
amVjdC0+YWRkSXRlbShXVEZNb3ZlKGluc3BlY3RvclZhbHVlKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBhcmd1bWVudHNPYmplY3QtPmFkZEl0ZW0oaW5zcGVjdG9yVmFsdWUucmVsZWFzZU5v
bk51bGwoKSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICB9CkBAIC0yODQsNyArMjg2LDcgQEAgdm9pZCBDb25zb2xlTWVzc2FnZTo6YWRkVG9G
cm9udGVuZChDb25zb2xlRnJvbnRlbmREaXNwYXRjaGVyJiBjb25zb2xlRnJvbnRlbmREaXMKICAg
ICAgICAgICAgICAgICAgICAgaWYgKCFpbnNwZWN0b3JWYWx1ZSkKICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50c09iamVjdC0+
YWRkSXRlbShXVEZNb3ZlKGluc3BlY3RvclZhbHVlKSk7CisgICAgICAgICAgICAgICAgICAgIGFy
Z3VtZW50c09iamVjdC0+YWRkSXRlbShpbnNwZWN0b3JWYWx1ZS5yZWxlYXNlTm9uTnVsbCgpKTsK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHQuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdC5jcHAKaW5kZXggY2M4NDlmMDUxZmE0
MDUxOGE5ZDFhMDM0MjliYzJiNGRiY2ZiMzEwMi4uNjkwOWEzMzllYTJlM2RlNjAwZjU1ZmQ2ZmU0
NjgzNjQ2MTcxZTBhNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9JbmplY3RlZFNjcmlwdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9JbmplY3RlZFNjcmlwdC5jcHAKQEAgLTU2LDcgKzU2LDcgQEAgSW5qZWN0ZWRTY3JpcHQ6On5J
bmplY3RlZFNjcmlwdCgpCiB7CiB9CiAKLXZvaWQgSW5qZWN0ZWRTY3JpcHQ6OmV4ZWN1dGUoRXJy
b3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGZ1bmN0aW9uU3RyaW5nLCBFeGVj
dXRlT3B0aW9ucyYmIG9wdGlvbnMsIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2Jq
ZWN0PiYgcmVzdWx0LCBPcHRpb25hbDxib29sPiYgd2FzVGhyb3duLCBPcHRpb25hbDxpbnQ+JiBz
YXZlZFJlc3VsdEluZGV4KQordm9pZCBJbmplY3RlZFNjcmlwdDo6ZXhlY3V0ZShQcm90b2NvbDo6
RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGZ1bmN0aW9uU3RyaW5nLCBF
eGVjdXRlT3B0aW9ucyYmIG9wdGlvbnMsIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3Rl
T2JqZWN0PiYgcmVzdWx0LCBPcHRpb25hbDxib29sPiYgd2FzVGhyb3duLCBPcHRpb25hbDxpbnQ+
JiBzYXZlZFJlc3VsdEluZGV4KQogewogICAgIERlcHJlY2F0ZWQ6OlNjcmlwdEZ1bmN0aW9uQ2Fs
bCBmdW5jdGlvbihpbmplY3RlZFNjcmlwdE9iamVjdCgpLCAiZXhlY3V0ZSJfcywgaW5zcGVjdG9y
RW52aXJvbm1lbnQoKS0+ZnVuY3Rpb25DYWxsSGFuZGxlcigpKTsKICAgICBmdW5jdGlvbi5hcHBl
bmRBcmd1bWVudChmdW5jdGlvblN0cmluZyk7CkBAIC02OSw3ICs2OSw3IEBAIHZvaWQgSW5qZWN0
ZWRTY3JpcHQ6OmV4ZWN1dGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcm
IGZ1bmN0aW9uU3RyCiAgICAgbWFrZUV2YWxDYWxsKGVycm9yU3RyaW5nLCBmdW5jdGlvbiwgcmVz
dWx0LCB3YXNUaHJvd24sIHNhdmVkUmVzdWx0SW5kZXgpOwogfQogCi12b2lkIEluamVjdGVkU2Ny
aXB0OjpldmFsdWF0ZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgZXhw
cmVzc2lvbiwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCwgYm9vbCBpbmNsdWRlQ29tbWFuZExp
bmVBUEksIGJvb2wgcmV0dXJuQnlWYWx1ZSwgYm9vbCBnZW5lcmF0ZVByZXZpZXcsIGJvb2wgc2F2
ZVJlc3VsdCwgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiByZXN1bHQs
IE9wdGlvbmFsPGJvb2w+JiB3YXNUaHJvd24sIE9wdGlvbmFsPGludD4mIHNhdmVkUmVzdWx0SW5k
ZXgpCit2b2lkIEluamVjdGVkU2NyaXB0OjpldmFsdWF0ZShQcm90b2NvbDo6RXJyb3JTdHJpbmcm
IGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIGNvbnN0IFN0cmluZyYgb2Jq
ZWN0R3JvdXAsIGJvb2wgaW5jbHVkZUNvbW1hbmRMaW5lQVBJLCBib29sIHJldHVybkJ5VmFsdWUs
IGJvb2wgZ2VuZXJhdGVQcmV2aWV3LCBib29sIHNhdmVSZXN1bHQsIFJlZlB0cjxQcm90b2NvbDo6
UnVudGltZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0LCBPcHRpb25hbDxib29sPiYgd2FzVGhyb3du
LCBPcHRpb25hbDxpbnQ+JiBzYXZlZFJlc3VsdEluZGV4KQogewogICAgIERlcHJlY2F0ZWQ6OlNj
cmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihpbmplY3RlZFNjcmlwdE9iamVjdCgpLCAiZXZhbHVh
dGUiX3MsIGluc3BlY3RvckVudmlyb25tZW50KCktPmZ1bmN0aW9uQ2FsbEhhbmRsZXIoKSk7CiAg
ICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoZXhwcmVzc2lvbik7CkBAIC05MSw3ICs5MSw3IEBA
IHZvaWQgSW5qZWN0ZWRTY3JpcHQ6OmF3YWl0UHJvbWlzZShjb25zdCBTdHJpbmcmIHByb21pc2VP
YmplY3RJZCwgYm9vbCByZXR1cm5CeVZhCiAgICAgbWFrZUFzeW5jQ2FsbChmdW5jdGlvbiwgV1RG
TW92ZShjYWxsYmFjaykpOwogfQogCi12b2lkIEluamVjdGVkU2NyaXB0OjpjYWxsRnVuY3Rpb25P
bihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgb2JqZWN0SWQsIGNvbnN0
IFN0cmluZyYgZXhwcmVzc2lvbiwgY29uc3QgU3RyaW5nJiBhcmd1bWVudHMsIGJvb2wgcmV0dXJu
QnlWYWx1ZSwgYm9vbCBnZW5lcmF0ZVByZXZpZXcsIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6
UmVtb3RlT2JqZWN0PiYgcmVzdWx0LCBPcHRpb25hbDxib29sPiYgd2FzVGhyb3duKQordm9pZCBJ
bmplY3RlZFNjcmlwdDo6Y2FsbEZ1bmN0aW9uT24oUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJv
clN0cmluZywgY29uc3QgU3RyaW5nJiBvYmplY3RJZCwgY29uc3QgU3RyaW5nJiBleHByZXNzaW9u
LCBjb25zdCBTdHJpbmcmIGFyZ3VtZW50cywgYm9vbCByZXR1cm5CeVZhbHVlLCBib29sIGdlbmVy
YXRlUHJldmlldywgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiByZXN1
bHQsIE9wdGlvbmFsPGJvb2w+JiB3YXNUaHJvd24pCiB7CiAgICAgRGVwcmVjYXRlZDo6U2NyaXB0
RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKGluamVjdGVkU2NyaXB0T2JqZWN0KCksICJjYWxsRnVuY3Rp
b25PbiJfcywgaW5zcGVjdG9yRW52aXJvbm1lbnQoKS0+ZnVuY3Rpb25DYWxsSGFuZGxlcigpKTsK
ICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChvYmplY3RJZCk7CkBAIC0xMDUsNyArMTA1LDcg
QEAgdm9pZCBJbmplY3RlZFNjcmlwdDo6Y2FsbEZ1bmN0aW9uT24oRXJyb3JTdHJpbmcmIGVycm9y
U3RyaW5nLCBjb25zdCBTdHJpbmcmIG9iamUKICAgICBBU1NFUlQoIXNhdmVkUmVzdWx0SW5kZXgp
OwogfQogCi12b2lkIEluamVjdGVkU2NyaXB0OjpldmFsdWF0ZU9uQ2FsbEZyYW1lKEVycm9yU3Ry
aW5nJiBlcnJvclN0cmluZywgSlNDOjpKU1ZhbHVlIGNhbGxGcmFtZXMsIGNvbnN0IFN0cmluZyYg
Y2FsbEZyYW1lSWQsIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgY29uc3QgU3RyaW5nJiBvYmpl
Y3RHcm91cCwgYm9vbCBpbmNsdWRlQ29tbWFuZExpbmVBUEksIGJvb2wgcmV0dXJuQnlWYWx1ZSwg
Ym9vbCBnZW5lcmF0ZVByZXZpZXcsIGJvb2wgc2F2ZVJlc3VsdCwgUmVmUHRyPFByb3RvY29sOjpS
dW50aW1lOjpSZW1vdGVPYmplY3Q+JiByZXN1bHQsIE9wdGlvbmFsPGJvb2w+JiB3YXNUaHJvd24s
IE9wdGlvbmFsPGludD4mIHNhdmVkUmVzdWx0SW5kZXgpCit2b2lkIEluamVjdGVkU2NyaXB0Ojpl
dmFsdWF0ZU9uQ2FsbEZyYW1lKFByb3RvY29sOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIEpT
Qzo6SlNWYWx1ZSBjYWxsRnJhbWVzLCBjb25zdCBTdHJpbmcmIGNhbGxGcmFtZUlkLCBjb25zdCBT
dHJpbmcmIGV4cHJlc3Npb24sIGNvbnN0IFN0cmluZyYgb2JqZWN0R3JvdXAsIGJvb2wgaW5jbHVk
ZUNvbW1hbmRMaW5lQVBJLCBib29sIHJldHVybkJ5VmFsdWUsIGJvb2wgZ2VuZXJhdGVQcmV2aWV3
LCBib29sIHNhdmVSZXN1bHQsIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0
PiYgcmVzdWx0LCBPcHRpb25hbDxib29sPiYgd2FzVGhyb3duLCBPcHRpb25hbDxpbnQ+JiBzYXZl
ZFJlc3VsdEluZGV4KQogewogICAgIERlcHJlY2F0ZWQ6OlNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5j
dGlvbihpbmplY3RlZFNjcmlwdE9iamVjdCgpLCAiZXZhbHVhdGVPbkNhbGxGcmFtZSJfcywgaW5z
cGVjdG9yRW52aXJvbm1lbnQoKS0+ZnVuY3Rpb25DYWxsSGFuZGxlcigpKTsKICAgICBmdW5jdGlv
bi5hcHBlbmRBcmd1bWVudChjYWxsRnJhbWVzKTsKQEAgLTExOSw1MiArMTE5LDU1IEBAIHZvaWQg
SW5qZWN0ZWRTY3JpcHQ6OmV2YWx1YXRlT25DYWxsRnJhbWUoRXJyb3JTdHJpbmcmIGVycm9yU3Ry
aW5nLCBKU0M6OkpTVmFsdWUKICAgICBtYWtlRXZhbENhbGwoZXJyb3JTdHJpbmcsIGZ1bmN0aW9u
LCByZXN1bHQsIHdhc1Rocm93biwgc2F2ZWRSZXN1bHRJbmRleCk7CiB9CiAKLXZvaWQgSW5qZWN0
ZWRTY3JpcHQ6OmdldEZ1bmN0aW9uRGV0YWlscyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNv
bnN0IFN0cmluZyYgZnVuY3Rpb25JZCwgUmVmUHRyPFByb3RvY29sOjpEZWJ1Z2dlcjo6RnVuY3Rp
b25EZXRhaWxzPiYgcmVzdWx0KQordm9pZCBJbmplY3RlZFNjcmlwdDo6Z2V0RnVuY3Rpb25EZXRh
aWxzKFByb3RvY29sOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgZnVu
Y3Rpb25JZCwgUmVmUHRyPFByb3RvY29sOjpEZWJ1Z2dlcjo6RnVuY3Rpb25EZXRhaWxzPiYgcmVz
dWx0KQogewogICAgIERlcHJlY2F0ZWQ6OlNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihpbmpl
Y3RlZFNjcmlwdE9iamVjdCgpLCAiZ2V0RnVuY3Rpb25EZXRhaWxzIl9zLCBpbnNwZWN0b3JFbnZp
cm9ubWVudCgpLT5mdW5jdGlvbkNhbGxIYW5kbGVyKCkpOwogICAgIGZ1bmN0aW9uLmFwcGVuZEFy
Z3VtZW50KGZ1bmN0aW9uSWQpOwogCiAgICAgUmVmUHRyPEpTT046OlZhbHVlPiByZXN1bHRWYWx1
ZSA9IG1ha2VDYWxsKGZ1bmN0aW9uKTsKICAgICBpZiAoIXJlc3VsdFZhbHVlIHx8IHJlc3VsdFZh
bHVlLT50eXBlKCkgIT0gSlNPTjo6VmFsdWU6OlR5cGU6Ok9iamVjdCkgewotICAgICAgICBpZiAo
IXJlc3VsdFZhbHVlLT5hc1N0cmluZyhlcnJvclN0cmluZykpCisgICAgICAgIGVycm9yU3RyaW5n
ID0gcmVzdWx0VmFsdWUtPmFzU3RyaW5nKCk7CisgICAgICAgIGlmICghZXJyb3JTdHJpbmcpCiAg
ICAgICAgICAgICBlcnJvclN0cmluZyA9ICJJbnRlcm5hbCBlcnJvciJfczsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAotICAgIHJlc3VsdCA9IEJpbmRpbmdUcmFpdHM8UHJvdG9jb2w6OkRlYnVn
Z2VyOjpGdW5jdGlvbkRldGFpbHM+OjpydW50aW1lQ2FzdChXVEZNb3ZlKHJlc3VsdFZhbHVlKSk7
CisgICAgcmVzdWx0ID0gUHJvdG9jb2w6OkJpbmRpbmdUcmFpdHM8UHJvdG9jb2w6OkRlYnVnZ2Vy
OjpGdW5jdGlvbkRldGFpbHM+OjpydW50aW1lQ2FzdChyZXN1bHRWYWx1ZS5yZWxlYXNlTm9uTnVs
bCgpKTsKIH0KIAotdm9pZCBJbmplY3RlZFNjcmlwdDo6ZnVuY3Rpb25EZXRhaWxzKEVycm9yU3Ry
aW5nJiBlcnJvclN0cmluZywgSlNDOjpKU1ZhbHVlIHZhbHVlLCBSZWZQdHI8UHJvdG9jb2w6OkRl
YnVnZ2VyOjpGdW5jdGlvbkRldGFpbHM+JiByZXN1bHQpCit2b2lkIEluamVjdGVkU2NyaXB0Ojpm
dW5jdGlvbkRldGFpbHMoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgSlNDOjpK
U1ZhbHVlIHZhbHVlLCBSZWZQdHI8UHJvdG9jb2w6OkRlYnVnZ2VyOjpGdW5jdGlvbkRldGFpbHM+
JiByZXN1bHQpCiB7CiAgICAgRGVwcmVjYXRlZDo6U2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9u
KGluamVjdGVkU2NyaXB0T2JqZWN0KCksICJmdW5jdGlvbkRldGFpbHMiX3MsIGluc3BlY3RvckVu
dmlyb25tZW50KCktPmZ1bmN0aW9uQ2FsbEhhbmRsZXIoKSk7CiAgICAgZnVuY3Rpb24uYXBwZW5k
QXJndW1lbnQodmFsdWUpOwogCiAgICAgUmVmUHRyPEpTT046OlZhbHVlPiByZXN1bHRWYWx1ZSA9
IG1ha2VDYWxsKGZ1bmN0aW9uKTsKICAgICBpZiAoIXJlc3VsdFZhbHVlIHx8IHJlc3VsdFZhbHVl
LT50eXBlKCkgIT0gSlNPTjo6VmFsdWU6OlR5cGU6Ok9iamVjdCkgewotICAgICAgICBpZiAoIXJl
c3VsdFZhbHVlLT5hc1N0cmluZyhlcnJvclN0cmluZykpCisgICAgICAgIGVycm9yU3RyaW5nID0g
cmVzdWx0VmFsdWUtPmFzU3RyaW5nKCk7CisgICAgICAgIGlmICghZXJyb3JTdHJpbmcpCiAgICAg
ICAgICAgICBlcnJvclN0cmluZyA9ICJJbnRlcm5hbCBlcnJvciJfczsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIHJlc3VsdCA9IEJpbmRpbmdUcmFpdHM8UHJvdG9jb2w6OkRlYnVnZ2Vy
OjpGdW5jdGlvbkRldGFpbHM+OjpydW50aW1lQ2FzdChXVEZNb3ZlKHJlc3VsdFZhbHVlKSk7Cisg
ICAgcmVzdWx0ID0gUHJvdG9jb2w6OkJpbmRpbmdUcmFpdHM8UHJvdG9jb2w6OkRlYnVnZ2VyOjpG
dW5jdGlvbkRldGFpbHM+OjpydW50aW1lQ2FzdChyZXN1bHRWYWx1ZS5yZWxlYXNlTm9uTnVsbCgp
KTsKIH0KIAotdm9pZCBJbmplY3RlZFNjcmlwdDo6Z2V0UHJldmlldyhFcnJvclN0cmluZyYgZXJy
b3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgb2JqZWN0SWQsIFJlZlB0cjxQcm90b2NvbDo6UnVudGlt
ZTo6T2JqZWN0UHJldmlldz4mIHJlc3VsdCkKK3ZvaWQgSW5qZWN0ZWRTY3JpcHQ6OmdldFByZXZp
ZXcoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBvYmpl
Y3RJZCwgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpPYmplY3RQcmV2aWV3PiYgcmVzdWx0KQog
ewogICAgIERlcHJlY2F0ZWQ6OlNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihpbmplY3RlZFNj
cmlwdE9iamVjdCgpLCAiZ2V0UHJldmlldyJfcywgaW5zcGVjdG9yRW52aXJvbm1lbnQoKS0+ZnVu
Y3Rpb25DYWxsSGFuZGxlcigpKTsKICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChvYmplY3RJ
ZCk7CiAKICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHJlc3VsdFZhbHVlID0gbWFrZUNhbGwoZnVu
Y3Rpb24pOwogICAgIGlmICghcmVzdWx0VmFsdWUgfHwgcmVzdWx0VmFsdWUtPnR5cGUoKSAhPSBK
U09OOjpWYWx1ZTo6VHlwZTo6T2JqZWN0KSB7Ci0gICAgICAgIGlmICghcmVzdWx0VmFsdWUtPmFz
U3RyaW5nKGVycm9yU3RyaW5nKSkKKyAgICAgICAgZXJyb3JTdHJpbmcgPSByZXN1bHRWYWx1ZS0+
YXNTdHJpbmcoKTsKKyAgICAgICAgaWYgKCFlcnJvclN0cmluZykKICAgICAgICAgICAgIGVycm9y
U3RyaW5nID0gIkludGVybmFsIGVycm9yIl9zOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgcmVzdWx0ID0gQmluZGluZ1RyYWl0czxQcm90b2NvbDo6UnVudGltZTo6T2JqZWN0UHJldmll
dz46OnJ1bnRpbWVDYXN0KFdURk1vdmUocmVzdWx0VmFsdWUpKTsKKyAgICByZXN1bHQgPSBQcm90
b2NvbDo6QmluZGluZ1RyYWl0czxQcm90b2NvbDo6UnVudGltZTo6T2JqZWN0UHJldmlldz46OnJ1
bnRpbWVDYXN0KHJlc3VsdFZhbHVlLnJlbGVhc2VOb25OdWxsKCkpOwogfQogCi12b2lkIEluamVj
dGVkU2NyaXB0OjpnZXRQcm9wZXJ0aWVzKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3Qg
U3RyaW5nJiBvYmplY3RJZCwgYm9vbCBvd25Qcm9wZXJ0aWVzLCBpbnQgZmV0Y2hTdGFydCwgaW50
IGZldGNoQ291bnQsIGJvb2wgZ2VuZXJhdGVQcmV2aWV3LCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxQ
cm90b2NvbDo6UnVudGltZTo6UHJvcGVydHlEZXNjcmlwdG9yPj4mIHByb3BlcnRpZXMpCit2b2lk
IEluamVjdGVkU2NyaXB0OjpnZXRQcm9wZXJ0aWVzKFByb3RvY29sOjpFcnJvclN0cmluZyYgZXJy
b3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgb2JqZWN0SWQsIGJvb2wgb3duUHJvcGVydGllcywgaW50
IGZldGNoU3RhcnQsIGludCBmZXRjaENvdW50LCBib29sIGdlbmVyYXRlUHJldmlldywgUmVmUHRy
PEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OlByb3BlcnR5RGVzY3JpcHRvcj4+JiBw
cm9wZXJ0aWVzKQogewogICAgIEFTU0VSVChmZXRjaFN0YXJ0ID49IDApOwogICAgIEFTU0VSVChm
ZXRjaENvdW50ID49IDApOwpAQCAtMTgyLDEwICsxODUsMTAgQEAgdm9pZCBJbmplY3RlZFNjcmlw
dDo6Z2V0UHJvcGVydGllcyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYg
b2JqZWMKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHByb3BlcnRpZXMgPSBCaW5kaW5n
VHJhaXRzPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OlByb3BlcnR5RGVzY3JpcHRv
cj4+OjpydW50aW1lQ2FzdChXVEZNb3ZlKHJlc3VsdCkpOworICAgIHByb3BlcnRpZXMgPSBQcm90
b2NvbDo6QmluZGluZ1RyYWl0czxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpQcm9w
ZXJ0eURlc2NyaXB0b3I+Pjo6cnVudGltZUNhc3QocmVzdWx0LnJlbGVhc2VOb25OdWxsKCkpOwog
fQogCi12b2lkIEluamVjdGVkU2NyaXB0OjpnZXREaXNwbGF5YWJsZVByb3BlcnRpZXMoRXJyb3JT
dHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBpbnQgZmV0Y2hTdGFy
dCwgaW50IGZldGNoQ291bnQsIGJvb2wgZ2VuZXJhdGVQcmV2aWV3LCBSZWZQdHI8SlNPTjo6QXJy
YXlPZjxQcm90b2NvbDo6UnVudGltZTo6UHJvcGVydHlEZXNjcmlwdG9yPj4mIHByb3BlcnRpZXMp
Cit2b2lkIEluamVjdGVkU2NyaXB0OjpnZXREaXNwbGF5YWJsZVByb3BlcnRpZXMoUHJvdG9jb2w6
OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBvYmplY3RJZCwgaW50IGZl
dGNoU3RhcnQsIGludCBmZXRjaENvdW50LCBib29sIGdlbmVyYXRlUHJldmlldywgUmVmUHRyPEpT
T046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OlByb3BlcnR5RGVzY3JpcHRvcj4+JiBwcm9w
ZXJ0aWVzKQogewogICAgIEFTU0VSVChmZXRjaFN0YXJ0ID49IDApOwogICAgIEFTU0VSVChmZXRj
aENvdW50ID49IDApOwpAQCAtMjAyLDEwICsyMDUsMTAgQEAgdm9pZCBJbmplY3RlZFNjcmlwdDo6
Z2V0RGlzcGxheWFibGVQcm9wZXJ0aWVzKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3Qg
U3QKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHByb3BlcnRpZXMgPSBCaW5kaW5nVHJh
aXRzPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OlByb3BlcnR5RGVzY3JpcHRvcj4+
OjpydW50aW1lQ2FzdChXVEZNb3ZlKHJlc3VsdCkpOworICAgIHByb3BlcnRpZXMgPSBQcm90b2Nv
bDo6QmluZGluZ1RyYWl0czxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpQcm9wZXJ0
eURlc2NyaXB0b3I+Pjo6cnVudGltZUNhc3QocmVzdWx0LnJlbGVhc2VOb25OdWxsKCkpOwogfQog
Ci12b2lkIEluamVjdGVkU2NyaXB0OjpnZXRJbnRlcm5hbFByb3BlcnRpZXMoRXJyb3JTdHJpbmcm
IGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBib29sIGdlbmVyYXRlUHJldmll
dywgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OkludGVybmFsUHJvcGVy
dHlEZXNjcmlwdG9yPj4mIHByb3BlcnRpZXMpCit2b2lkIEluamVjdGVkU2NyaXB0OjpnZXRJbnRl
cm5hbFByb3BlcnRpZXMoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3Qg
U3RyaW5nJiBvYmplY3RJZCwgYm9vbCBnZW5lcmF0ZVByZXZpZXcsIFJlZlB0cjxKU09OOjpBcnJh
eU9mPFByb3RvY29sOjpSdW50aW1lOjpJbnRlcm5hbFByb3BlcnR5RGVzY3JpcHRvcj4+JiBwcm9w
ZXJ0aWVzKQogewogICAgIERlcHJlY2F0ZWQ6OlNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihp
bmplY3RlZFNjcmlwdE9iamVjdCgpLCAiZ2V0SW50ZXJuYWxQcm9wZXJ0aWVzIl9zLCBpbnNwZWN0
b3JFbnZpcm9ubWVudCgpLT5mdW5jdGlvbkNhbGxIYW5kbGVyKCkpOwogICAgIGZ1bmN0aW9uLmFw
cGVuZEFyZ3VtZW50KG9iamVjdElkKTsKQEAgLTIxNywxMSArMjIwLDEyIEBAIHZvaWQgSW5qZWN0
ZWRTY3JpcHQ6OmdldEludGVybmFsUHJvcGVydGllcyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcs
IGNvbnN0IFN0cmluCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvIGFycmF5ID0g
QmluZGluZ1RyYWl0czxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpJbnRlcm5hbFBy
b3BlcnR5RGVzY3JpcHRvcj4+OjpydW50aW1lQ2FzdChXVEZNb3ZlKHJlc3VsdCkpOwotICAgIHBy
b3BlcnRpZXMgPSBhcnJheS0+bGVuZ3RoKCkgPiAwID8gYXJyYXkgOiBudWxscHRyOworICAgIGF1
dG8gYXJyYXkgPSBQcm90b2NvbDo6QmluZGluZ1RyYWl0czxKU09OOjpBcnJheU9mPFByb3RvY29s
OjpSdW50aW1lOjpJbnRlcm5hbFByb3BlcnR5RGVzY3JpcHRvcj4+OjpydW50aW1lQ2FzdChyZXN1
bHQucmVsZWFzZU5vbk51bGwoKSk7CisgICAgaWYgKGFycmF5LT5sZW5ndGgoKSkKKyAgICAgICAg
cHJvcGVydGllcyA9IFdURk1vdmUoYXJyYXkpOwogfQogCi12b2lkIEluamVjdGVkU2NyaXB0Ojpn
ZXRDb2xsZWN0aW9uRW50cmllcyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmlu
ZyYgb2JqZWN0SWQsIGNvbnN0IFN0cmluZyYgb2JqZWN0R3JvdXAsIGludCBmZXRjaFN0YXJ0LCBp
bnQgZmV0Y2hDb3VudCwgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OkNv
bGxlY3Rpb25FbnRyeT4+JiBlbnRyaWVzKQordm9pZCBJbmplY3RlZFNjcmlwdDo6Z2V0Q29sbGVj
dGlvbkVudHJpZXMoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3Ry
aW5nJiBvYmplY3RJZCwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCwgaW50IGZldGNoU3RhcnQs
IGludCBmZXRjaENvdW50LCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UnVudGltZTo6
Q29sbGVjdGlvbkVudHJ5Pj4mIGVudHJpZXMpCiB7CiAgICAgQVNTRVJUKGZldGNoU3RhcnQgPj0g
MCk7CiAgICAgQVNTRVJUKGZldGNoQ291bnQgPj0gMCk7CkBAIC0yMzgsMTAgKzI0MiwxMCBAQCB2
b2lkIEluamVjdGVkU2NyaXB0OjpnZXRDb2xsZWN0aW9uRW50cmllcyhFcnJvclN0cmluZyYgZXJy
b3JTdHJpbmcsIGNvbnN0IFN0cmluZwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgZW50
cmllcyA9IEJpbmRpbmdUcmFpdHM8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UnVudGltZTo6Q29s
bGVjdGlvbkVudHJ5Pj46OnJ1bnRpbWVDYXN0KFdURk1vdmUocmVzdWx0KSk7CisgICAgZW50cmll
cyA9IFByb3RvY29sOjpCaW5kaW5nVHJhaXRzPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRp
bWU6OkNvbGxlY3Rpb25FbnRyeT4+OjpydW50aW1lQ2FzdChyZXN1bHQucmVsZWFzZU5vbk51bGwo
KSk7CiB9CiAKLXZvaWQgSW5qZWN0ZWRTY3JpcHQ6OnNhdmVSZXN1bHQoRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGNhbGxBcmd1bWVudEpTT04sIE9wdGlvbmFsPGludD4m
IHNhdmVkUmVzdWx0SW5kZXgpCit2b2lkIEluamVjdGVkU2NyaXB0OjpzYXZlUmVzdWx0KFByb3Rv
Y29sOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgY2FsbEFyZ3VtZW50
SlNPTiwgT3B0aW9uYWw8aW50PiYgc2F2ZWRSZXN1bHRJbmRleCkKIHsKICAgICBEZXByZWNhdGVk
OjpTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24oaW5qZWN0ZWRTY3JpcHRPYmplY3QoKSwgInNh
dmVSZXN1bHQiX3MsIGluc3BlY3RvckVudmlyb25tZW50KCktPmZ1bmN0aW9uQ2FsbEhhbmRsZXIo
KSk7CiAgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoY2FsbEFyZ3VtZW50SlNPTik7CkBAIC0y
NTIsOSArMjU2LDcgQEAgdm9pZCBJbmplY3RlZFNjcmlwdDo6c2F2ZVJlc3VsdChFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgY2FsbEFyZ3UKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIGludCByZXN1bHRJbmRleCA9IDA7Ci0gICAgaWYgKHJlc3VsdC0+YXNJbnRl
Z2VyKHJlc3VsdEluZGV4KSAmJiByZXN1bHRJbmRleCA+IDApCi0gICAgICAgIHNhdmVkUmVzdWx0
SW5kZXggPSByZXN1bHRJbmRleDsKKyAgICBzYXZlZFJlc3VsdEluZGV4ID0gcmVzdWx0LT5hc0lu
dGVnZXIoKTsKIH0KIAogUmVmPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkRlYnVnZ2VyOjpDYWxs
RnJhbWU+PiBJbmplY3RlZFNjcmlwdDo6d3JhcENhbGxGcmFtZXMoSlNDOjpKU1ZhbHVlIGNhbGxG
cmFtZXMpIGNvbnN0CkBAIC0yNjksOCArMjcxLDggQEAgUmVmPEpTT046OkFycmF5T2Y8UHJvdG9j
b2w6OkRlYnVnZ2VyOjpDYWxsRnJhbWU+PiBJbmplY3RlZFNjcmlwdDo6d3JhcENhbGxGcmFtZXMK
ICAgICAgICAgcmV0dXJuIEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkRlYnVnZ2VyOjpDYWxsRnJh
bWU+OjpjcmVhdGUoKTsKIAogICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gcmVzdWx0ID0gdG9JbnNw
ZWN0b3JWYWx1ZShnbG9iYWxPYmplY3QoKSwgY2FsbFJlc3VsdC52YWx1ZSgpKTsKLSAgICBpZiAo
cmVzdWx0LT50eXBlKCkgPT0gSlNPTjo6VmFsdWU6OlR5cGU6OkFycmF5KQotICAgICAgICByZXR1
cm4gQmluZGluZ1RyYWl0czxKU09OOjpBcnJheU9mPFByb3RvY29sOjpEZWJ1Z2dlcjo6Q2FsbEZy
YW1lPj46OnJ1bnRpbWVDYXN0KFdURk1vdmUocmVzdWx0KSkucmVsZWFzZU5vbk51bGwoKTsKKyAg
ICBpZiAocmVzdWx0ICYmIHJlc3VsdC0+dHlwZSgpID09IEpTT046OlZhbHVlOjpUeXBlOjpBcnJh
eSkKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpCaW5kaW5nVHJhaXRzPEpTT046OkFycmF5T2Y8
UHJvdG9jb2w6OkRlYnVnZ2VyOjpDYWxsRnJhbWU+Pjo6cnVudGltZUNhc3QocmVzdWx0LnJlbGVh
c2VOb25OdWxsKCkpOwogCiAgICAgcmV0dXJuIEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkRlYnVn
Z2VyOjpDYWxsRnJhbWU+OjpjcmVhdGUoKTsKIH0KQEAgLTI4OCwxMSArMjkwLDE1IEBAIFJlZlB0
cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiBJbmplY3RlZFNjcmlwdDo6d3JhcE9i
amVjdChKU0M6OkpTVmFsdWUKICAgICBpZiAoIWNhbGxSZXN1bHQpCiAgICAgICAgIHJldHVybiBu
dWxscHRyOwogCi0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcmVzdWx0T2JqZWN0OwotICAgIGJv
b2wgY2FzdFN1Y2NlZWRlZCA9IHRvSW5zcGVjdG9yVmFsdWUoZ2xvYmFsT2JqZWN0KCksIGNhbGxS
ZXN1bHQudmFsdWUoKSktPmFzT2JqZWN0KHJlc3VsdE9iamVjdCk7Ci0gICAgQVNTRVJUX1VOVVNF
RChjYXN0U3VjY2VlZGVkLCBjYXN0U3VjY2VlZGVkKTsKKyAgICBhdXRvIHJlc3VsdFZhbHVlID0g
dG9JbnNwZWN0b3JWYWx1ZShnbG9iYWxPYmplY3QoKSwgY2FsbFJlc3VsdC52YWx1ZSgpKTsKKyAg
ICBpZiAoIXJlc3VsdFZhbHVlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVy
biBCaW5kaW5nVHJhaXRzPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+OjpydW50aW1l
Q2FzdChyZXN1bHRPYmplY3QpOworICAgIGF1dG8gcmVzdWx0T2JqZWN0ID0gcmVzdWx0VmFsdWUt
PmFzT2JqZWN0KCk7CisgICAgaWYgKCFyZXN1bHRPYmplY3QpCisgICAgICAgIHJldHVybiBudWxs
cHRyOworCisgICAgcmV0dXJuIFByb3RvY29sOjpCaW5kaW5nVHJhaXRzPFByb3RvY29sOjpSdW50
aW1lOjpSZW1vdGVPYmplY3Q+OjpydW50aW1lQ2FzdChyZXN1bHRPYmplY3QucmVsZWFzZU5vbk51
bGwoKSk7CiB9CiAKIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiBJbmpl
Y3RlZFNjcmlwdDo6d3JhcEpTT05TdHJpbmcoY29uc3QgU3RyaW5nJiBqc29uLCBjb25zdCBTdHJp
bmcmIGdyb3VwTmFtZSwgYm9vbCBnZW5lcmF0ZVByZXZpZXcpIGNvbnN0CkBAIC0zMTAsMTEgKzMx
NiwxNSBAQCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4gSW5qZWN0ZWRT
Y3JpcHQ6OndyYXBKU09OU3RyaW5nKGNvbnN0IFN0cgogICAgIGlmIChjYWxsUmVzdWx0LnZhbHVl
KCkuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgUmVmUHRyPEpTT046
Ok9iamVjdD4gcmVzdWx0T2JqZWN0OwotICAgIGJvb2wgY2FzdFN1Y2NlZWRlZCA9IHRvSW5zcGVj
dG9yVmFsdWUoZ2xvYmFsT2JqZWN0KCksIGNhbGxSZXN1bHQudmFsdWUoKSktPmFzT2JqZWN0KHJl
c3VsdE9iamVjdCk7Ci0gICAgQVNTRVJUX1VOVVNFRChjYXN0U3VjY2VlZGVkLCBjYXN0U3VjY2Vl
ZGVkKTsKKyAgICBhdXRvIHJlc3VsdFZhbHVlID0gdG9JbnNwZWN0b3JWYWx1ZShnbG9iYWxPYmpl
Y3QoKSwgY2FsbFJlc3VsdC52YWx1ZSgpKTsKKyAgICBpZiAoIXJlc3VsdFZhbHVlKQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiBCaW5kaW5nVHJhaXRzPFByb3RvY29sOjpS
dW50aW1lOjpSZW1vdGVPYmplY3Q+OjpydW50aW1lQ2FzdChyZXN1bHRPYmplY3QpOworICAgIGF1
dG8gcmVzdWx0T2JqZWN0ID0gcmVzdWx0VmFsdWUtPmFzT2JqZWN0KCk7CisgICAgaWYgKCFyZXN1
bHRPYmplY3QpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuIFByb3RvY29s
OjpCaW5kaW5nVHJhaXRzPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+OjpydW50aW1l
Q2FzdChyZXN1bHRPYmplY3QucmVsZWFzZU5vbk51bGwoKSk7CiB9CiAKIFJlZlB0cjxQcm90b2Nv
bDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiBJbmplY3RlZFNjcmlwdDo6d3JhcFRhYmxlKEpTQzo6
SlNWYWx1ZSB0YWJsZSwgSlNDOjpKU1ZhbHVlIGNvbHVtbnMpIGNvbnN0CkBAIC0zMzIsMTEgKzM0
MiwxNSBAQCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4gSW5qZWN0ZWRT
Y3JpcHQ6OndyYXBUYWJsZShKU0M6OkpTVmFsdWUgdAogICAgIGlmICghY2FsbFJlc3VsdCkKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiByZXN1bHRP
YmplY3Q7Ci0gICAgYm9vbCBjYXN0U3VjY2VlZGVkID0gdG9JbnNwZWN0b3JWYWx1ZShnbG9iYWxP
YmplY3QoKSwgY2FsbFJlc3VsdC52YWx1ZSgpKS0+YXNPYmplY3QocmVzdWx0T2JqZWN0KTsKLSAg
ICBBU1NFUlRfVU5VU0VEKGNhc3RTdWNjZWVkZWQsIGNhc3RTdWNjZWVkZWQpOworICAgIGF1dG8g
cmVzdWx0VmFsdWUgPSB0b0luc3BlY3RvclZhbHVlKGdsb2JhbE9iamVjdCgpLCBjYWxsUmVzdWx0
LnZhbHVlKCkpOworICAgIGlmICghcmVzdWx0VmFsdWUpCisgICAgICAgIHJldHVybiBudWxscHRy
OwogCi0gICAgcmV0dXJuIEJpbmRpbmdUcmFpdHM8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9i
amVjdD46OnJ1bnRpbWVDYXN0KHJlc3VsdE9iamVjdCk7CisgICAgYXV0byByZXN1bHRPYmplY3Qg
PSByZXN1bHRWYWx1ZS0+YXNPYmplY3QoKTsKKyAgICBpZiAoIXJlc3VsdE9iamVjdCkKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gUHJvdG9jb2w6OkJpbmRpbmdUcmFpdHM8
UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD46OnJ1bnRpbWVDYXN0KHJlc3VsdE9iamVj
dC5yZWxlYXNlTm9uTnVsbCgpKTsKIH0KIAogUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpPYmpl
Y3RQcmV2aWV3PiBJbmplY3RlZFNjcmlwdDo6cHJldmlld1ZhbHVlKEpTQzo6SlNWYWx1ZSB2YWx1
ZSkgY29uc3QKQEAgLTM0OSwxMSArMzYzLDE1IEBAIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6
T2JqZWN0UHJldmlldz4gSW5qZWN0ZWRTY3JpcHQ6OnByZXZpZXdWYWx1ZShKU0M6OkpTVmFsCiAg
ICAgaWYgKCFjYWxsUmVzdWx0KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIFJlZlB0
cjxKU09OOjpPYmplY3Q+IHJlc3VsdE9iamVjdDsKLSAgICBib29sIGNhc3RTdWNjZWVkZWQgPSB0
b0luc3BlY3RvclZhbHVlKGdsb2JhbE9iamVjdCgpLCBjYWxsUmVzdWx0LnZhbHVlKCkpLT5hc09i
amVjdChyZXN1bHRPYmplY3QpOwotICAgIEFTU0VSVF9VTlVTRUQoY2FzdFN1Y2NlZWRlZCwgY2Fz
dFN1Y2NlZWRlZCk7CisgICAgYXV0byByZXN1bHRWYWx1ZSA9IHRvSW5zcGVjdG9yVmFsdWUoZ2xv
YmFsT2JqZWN0KCksIGNhbGxSZXN1bHQudmFsdWUoKSk7CisgICAgaWYgKCFyZXN1bHRWYWx1ZSkK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gQmluZGluZ1RyYWl0czxQcm90
b2NvbDo6UnVudGltZTo6T2JqZWN0UHJldmlldz46OnJ1bnRpbWVDYXN0KHJlc3VsdE9iamVjdCk7
CisgICAgYXV0byByZXN1bHRPYmplY3QgPSByZXN1bHRWYWx1ZS0+YXNPYmplY3QoKTsKKyAgICBp
ZiAoIXJlc3VsdE9iamVjdCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4g
UHJvdG9jb2w6OkJpbmRpbmdUcmFpdHM8UHJvdG9jb2w6OlJ1bnRpbWU6Ok9iamVjdFByZXZpZXc+
OjpydW50aW1lQ2FzdChyZXN1bHRPYmplY3QucmVsZWFzZU5vbk51bGwoKSk7CiB9CiAKIHZvaWQg
SW5qZWN0ZWRTY3JpcHQ6OnNldEV2ZW50VmFsdWUoSlNDOjpKU1ZhbHVlIHZhbHVlKQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdC5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdC5oCmluZGV4IGNk
ZWU0NWYyZDZiMzM3N2YxZTA1MjNjZmU0MDFhZTI4YmNmMmRmNmYuLmQ2M2FlZjAyNTk5NjQ4ODQ2
YzY4MzYxNWNiNTZjNjQzYzM4OWIxYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL0luamVjdGVkU2NyaXB0LmgKQEAgLTU5LDIwICs1OSwyMCBAQCBwdWJsaWM6CiAg
ICAgICAgIGJvb2wgc2F2ZVJlc3VsdCB7IGZhbHNlIH07CiAgICAgICAgIFZlY3RvcjxKU0M6OkpT
VmFsdWU+IGFyZ3M7CiAgICAgfTsKLSAgICB2b2lkIGV4ZWN1dGUoRXJyb3JTdHJpbmcmLCBjb25z
dCBTdHJpbmcmIGZ1bmN0aW9uU3RyaW5nLCBFeGVjdXRlT3B0aW9ucyYmLCBSZWZQdHI8UHJvdG9j
b2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3VsdCwgT3B0aW9uYWw8Ym9vbD4mIHdhc1Ro
cm93biwgT3B0aW9uYWw8aW50PiYgc2F2ZWRSZXN1bHRJbmRleCk7CisgICAgdm9pZCBleGVjdXRl
KFByb3RvY29sOjpFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgZnVuY3Rpb25TdHJpbmcsIEV4
ZWN1dGVPcHRpb25zJiYsIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYg
cmVzdWx0LCBPcHRpb25hbDxib29sPiYgd2FzVGhyb3duLCBPcHRpb25hbDxpbnQ+JiBzYXZlZFJl
c3VsdEluZGV4KTsKIAotICAgIHZvaWQgZXZhbHVhdGUoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJp
bmcmIGV4cHJlc3Npb24sIGNvbnN0IFN0cmluZyYgb2JqZWN0R3JvdXAsIGJvb2wgaW5jbHVkZUNv
bW1hbmRMaW5lQVBJLCBib29sIHJldHVybkJ5VmFsdWUsIGJvb2wgZ2VuZXJhdGVQcmV2aWV3LCBi
b29sIHNhdmVSZXN1bHQsIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYg
cmVzdWx0LCBPcHRpb25hbDxib29sPiYgd2FzVGhyb3duLCBPcHRpb25hbDxpbnQ+JiBzYXZlZFJl
c3VsdEluZGV4KTsKKyAgICB2b2lkIGV2YWx1YXRlKFByb3RvY29sOjpFcnJvclN0cmluZyYsIGNv
bnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCwgYm9vbCBp
bmNsdWRlQ29tbWFuZExpbmVBUEksIGJvb2wgcmV0dXJuQnlWYWx1ZSwgYm9vbCBnZW5lcmF0ZVBy
ZXZpZXcsIGJvb2wgc2F2ZVJlc3VsdCwgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVP
YmplY3Q+JiByZXN1bHQsIE9wdGlvbmFsPGJvb2w+JiB3YXNUaHJvd24sIE9wdGlvbmFsPGludD4m
IHNhdmVkUmVzdWx0SW5kZXgpOwogICAgIHZvaWQgYXdhaXRQcm9taXNlKGNvbnN0IFN0cmluZyYg
cHJvbWlzZU9iamVjdElkLCBib29sIHJldHVybkJ5VmFsdWUsIGJvb2wgZ2VuZXJhdGVQcmV2aWV3
LCBib29sIHNhdmVSZXN1bHQsIEFzeW5jQ2FsbENhbGxiYWNrJiYpOwotICAgIHZvaWQgZXZhbHVh
dGVPbkNhbGxGcmFtZShFcnJvclN0cmluZyYsIEpTQzo6SlNWYWx1ZSBjYWxsRnJhbWVzLCBjb25z
dCBTdHJpbmcmIGNhbGxGcmFtZUlkLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIGNvbnN0IFN0
cmluZyYgb2JqZWN0R3JvdXAsIGJvb2wgaW5jbHVkZUNvbW1hbmRMaW5lQVBJLCBib29sIHJldHVy
bkJ5VmFsdWUsIGJvb2wgZ2VuZXJhdGVQcmV2aWV3LCBib29sIHNhdmVSZXN1bHQsIFJlZlB0cjxQ
cm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0LCBPcHRpb25hbDxib29sPiYg
d2FzVGhyb3duLCBPcHRpb25hbDxpbnQ+JiBzYXZlZFJlc3VsdEluZGV4KTsKLSAgICB2b2lkIGNh
bGxGdW5jdGlvbk9uKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBvYmplY3RJZCwgY29uc3Qg
U3RyaW5nJiBleHByZXNzaW9uLCBjb25zdCBTdHJpbmcmIGFyZ3VtZW50cywgYm9vbCByZXR1cm5C
eVZhbHVlLCBib29sIGdlbmVyYXRlUHJldmlldywgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpS
ZW1vdGVPYmplY3Q+JiByZXN1bHQsIE9wdGlvbmFsPGJvb2w+JiB3YXNUaHJvd24pOwotICAgIHZv
aWQgZ2V0RnVuY3Rpb25EZXRhaWxzKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBmdW5jdGlv
bklkLCBSZWZQdHI8UHJvdG9jb2w6OkRlYnVnZ2VyOjpGdW5jdGlvbkRldGFpbHM+JiByZXN1bHQp
OwotICAgIHZvaWQgZnVuY3Rpb25EZXRhaWxzKEVycm9yU3RyaW5nJiwgSlNDOjpKU1ZhbHVlLCBS
ZWZQdHI8UHJvdG9jb2w6OkRlYnVnZ2VyOjpGdW5jdGlvbkRldGFpbHM+JiByZXN1bHQpOwotICAg
IHZvaWQgZ2V0UHJldmlldyhFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgb2JqZWN0SWQsIFJl
ZlB0cjxQcm90b2NvbDo6UnVudGltZTo6T2JqZWN0UHJldmlldz4mIHJlc3VsdCk7Ci0gICAgdm9p
ZCBnZXRQcm9wZXJ0aWVzKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBvYmplY3RJZCwgYm9v
bCBvd25Qcm9wZXJ0aWVzLCBpbnQgZmV0Y2hTdGFydCwgaW50IGZldGNoQ291bnQsIGJvb2wgZ2Vu
ZXJhdGVQcmV2aWV3LCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UnVudGltZTo6UHJv
cGVydHlEZXNjcmlwdG9yPj4mIHJlc3VsdCk7Ci0gICAgdm9pZCBnZXREaXNwbGF5YWJsZVByb3Bl
cnRpZXMoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBpbnQgZmV0Y2hTdGFy
dCwgaW50IGZldGNoQ291bnQsIGJvb2wgZ2VuZXJhdGVQcmV2aWV3LCBSZWZQdHI8SlNPTjo6QXJy
YXlPZjxQcm90b2NvbDo6UnVudGltZTo6UHJvcGVydHlEZXNjcmlwdG9yPj4mIHJlc3VsdCk7Ci0g
ICAgdm9pZCBnZXRJbnRlcm5hbFByb3BlcnRpZXMoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcm
IG9iamVjdElkLCBib29sIGdlbmVyYXRlUHJldmlldywgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJv
dG9jb2w6OlJ1bnRpbWU6OkludGVybmFsUHJvcGVydHlEZXNjcmlwdG9yPj4mIHJlc3VsdCk7Ci0g
ICAgdm9pZCBnZXRDb2xsZWN0aW9uRW50cmllcyhFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYg
b2JqZWN0SWQsIGNvbnN0IFN0cmluZyYgb2JqZWN0R3JvdXAsIGludCBmZXRjaFN0YXJ0LCBpbnQg
ZmV0Y2hDb3VudCwgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OkNvbGxl
Y3Rpb25FbnRyeT4+JiBlbnRyaWVzKTsKLSAgICB2b2lkIHNhdmVSZXN1bHQoRXJyb3JTdHJpbmcm
LCBjb25zdCBTdHJpbmcmIGNhbGxBcmd1bWVudEpTT04sIE9wdGlvbmFsPGludD4mIHNhdmVkUmVz
dWx0SW5kZXgpOworICAgIHZvaWQgZXZhbHVhdGVPbkNhbGxGcmFtZShQcm90b2NvbDo6RXJyb3JT
dHJpbmcmLCBKU0M6OkpTVmFsdWUgY2FsbEZyYW1lcywgY29uc3QgU3RyaW5nJiBjYWxsRnJhbWVJ
ZCwgY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBjb25zdCBTdHJpbmcmIG9iamVjdEdyb3VwLCBi
b29sIGluY2x1ZGVDb21tYW5kTGluZUFQSSwgYm9vbCByZXR1cm5CeVZhbHVlLCBib29sIGdlbmVy
YXRlUHJldmlldywgYm9vbCBzYXZlUmVzdWx0LCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJl
bW90ZU9iamVjdD4mIHJlc3VsdCwgT3B0aW9uYWw8Ym9vbD4mIHdhc1Rocm93biwgT3B0aW9uYWw8
aW50PiYgc2F2ZWRSZXN1bHRJbmRleCk7CisgICAgdm9pZCBjYWxsRnVuY3Rpb25PbihQcm90b2Nv
bDo6RXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBjb25zdCBTdHJpbmcmIGV4
cHJlc3Npb24sIGNvbnN0IFN0cmluZyYgYXJndW1lbnRzLCBib29sIHJldHVybkJ5VmFsdWUsIGJv
b2wgZ2VuZXJhdGVQcmV2aWV3LCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVj
dD4mIHJlc3VsdCwgT3B0aW9uYWw8Ym9vbD4mIHdhc1Rocm93bik7CisgICAgdm9pZCBnZXRGdW5j
dGlvbkRldGFpbHMoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBmdW5jdGlv
bklkLCBSZWZQdHI8UHJvdG9jb2w6OkRlYnVnZ2VyOjpGdW5jdGlvbkRldGFpbHM+JiByZXN1bHQp
OworICAgIHZvaWQgZnVuY3Rpb25EZXRhaWxzKFByb3RvY29sOjpFcnJvclN0cmluZyYsIEpTQzo6
SlNWYWx1ZSwgUmVmUHRyPFByb3RvY29sOjpEZWJ1Z2dlcjo6RnVuY3Rpb25EZXRhaWxzPiYgcmVz
dWx0KTsKKyAgICB2b2lkIGdldFByZXZpZXcoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiwgY29uc3Qg
U3RyaW5nJiBvYmplY3RJZCwgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpPYmplY3RQcmV2aWV3
PiYgcmVzdWx0KTsKKyAgICB2b2lkIGdldFByb3BlcnRpZXMoUHJvdG9jb2w6OkVycm9yU3RyaW5n
JiwgY29uc3QgU3RyaW5nJiBvYmplY3RJZCwgYm9vbCBvd25Qcm9wZXJ0aWVzLCBpbnQgZmV0Y2hT
dGFydCwgaW50IGZldGNoQ291bnQsIGJvb2wgZ2VuZXJhdGVQcmV2aWV3LCBSZWZQdHI8SlNPTjo6
QXJyYXlPZjxQcm90b2NvbDo6UnVudGltZTo6UHJvcGVydHlEZXNjcmlwdG9yPj4mIHJlc3VsdCk7
CisgICAgdm9pZCBnZXREaXNwbGF5YWJsZVByb3BlcnRpZXMoUHJvdG9jb2w6OkVycm9yU3RyaW5n
JiwgY29uc3QgU3RyaW5nJiBvYmplY3RJZCwgaW50IGZldGNoU3RhcnQsIGludCBmZXRjaENvdW50
LCBib29sIGdlbmVyYXRlUHJldmlldywgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1
bnRpbWU6OlByb3BlcnR5RGVzY3JpcHRvcj4+JiByZXN1bHQpOworICAgIHZvaWQgZ2V0SW50ZXJu
YWxQcm9wZXJ0aWVzKFByb3RvY29sOjpFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgb2JqZWN0
SWQsIGJvb2wgZ2VuZXJhdGVQcmV2aWV3LCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6
UnVudGltZTo6SW50ZXJuYWxQcm9wZXJ0eURlc2NyaXB0b3I+PiYgcmVzdWx0KTsKKyAgICB2b2lk
IGdldENvbGxlY3Rpb25FbnRyaWVzKFByb3RvY29sOjpFcnJvclN0cmluZyYsIGNvbnN0IFN0cmlu
ZyYgb2JqZWN0SWQsIGNvbnN0IFN0cmluZyYgb2JqZWN0R3JvdXAsIGludCBmZXRjaFN0YXJ0LCBp
bnQgZmV0Y2hDb3VudCwgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OkNv
bGxlY3Rpb25FbnRyeT4+JiBlbnRyaWVzKTsKKyAgICB2b2lkIHNhdmVSZXN1bHQoUHJvdG9jb2w6
OkVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBjYWxsQXJndW1lbnRKU09OLCBPcHRpb25hbDxp
bnQ+JiBzYXZlZFJlc3VsdEluZGV4KTsKIAogICAgIFJlZjxKU09OOjpBcnJheU9mPFByb3RvY29s
OjpEZWJ1Z2dlcjo6Q2FsbEZyYW1lPj4gd3JhcENhbGxGcmFtZXMoSlNDOjpKU1ZhbHVlKSBjb25z
dDsKICAgICBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4gd3JhcE9iamVj
dChKU0M6OkpTVmFsdWUsIGNvbnN0IFN0cmluZyYgZ3JvdXBOYW1lLCBib29sIGdlbmVyYXRlUHJl
dmlldyA9IGZhbHNlKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRCYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRCYXNlLmNwcAppbmRleCA3NTY5ZjViNWQ5NzU4MDg4MjRm
NjRlYjJlZjBhNDA2YjY0YTRkOTM5Li4wOTAxNjZhOTFmYzY2YWQxY2RlNzE4MTk1M2NmNDc3M2Zm
NjZmMDhmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luamVj
dGVkU2NyaXB0QmFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9J
bmplY3RlZFNjcmlwdEJhc2UuY3BwCkBAIC0xMDAsNyArMTAwLDcgQEAgUmVmPEpTT046OlZhbHVl
PiBJbmplY3RlZFNjcmlwdEJhc2U6Om1ha2VDYWxsKERlcHJlY2F0ZWQ6OlNjcmlwdEZ1bmN0aW9u
Q2FsbCYgZnUKICAgICByZXR1cm4gcmVzdWx0SlNPTlZhbHVlLnJlbGVhc2VOb25OdWxsKCk7CiB9
CiAKLXZvaWQgSW5qZWN0ZWRTY3JpcHRCYXNlOjptYWtlRXZhbENhbGwoRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBEZXByZWNhdGVkOjpTY3JpcHRGdW5jdGlvbkNhbGwmIGZ1bmN0aW9uLCBSZWZQ
dHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIG91dF9yZXN1bHRPYmplY3QsIE9w
dGlvbmFsPGJvb2w+JiBvdXRfd2FzVGhyb3duLCBPcHRpb25hbDxpbnQ+JiBvdXRfc2F2ZWRSZXN1
bHRJbmRleCkKK3ZvaWQgSW5qZWN0ZWRTY3JpcHRCYXNlOjptYWtlRXZhbENhbGwoUHJvdG9jb2w6
OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgRGVwcmVjYXRlZDo6U2NyaXB0RnVuY3Rpb25DYWxs
JiBmdW5jdGlvbiwgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiBvdXRf
cmVzdWx0T2JqZWN0LCBPcHRpb25hbDxib29sPiYgb3V0X3dhc1Rocm93biwgT3B0aW9uYWw8aW50
PiYgb3V0X3NhdmVkUmVzdWx0SW5kZXgpCiB7CiAgICAgY2hlY2tDYWxsUmVzdWx0KGVycm9yU3Ry
aW5nLCBtYWtlQ2FsbChmdW5jdGlvbiksIG91dF9yZXN1bHRPYmplY3QsIG91dF93YXNUaHJvd24s
IG91dF9zYXZlZFJlc3VsdEluZGV4KTsKIH0KQEAgLTE0Myw3ICsxNDMsNyBAQCB2b2lkIEluamVj
dGVkU2NyaXB0QmFzZTo6bWFrZUFzeW5jQ2FsbChEZXByZWNhdGVkOjpTY3JpcHRGdW5jdGlvbkNh
bGwmIGZ1bmN0aW9uLAogICAgIH0KIH0KIAotdm9pZCBJbmplY3RlZFNjcmlwdEJhc2U6OmNoZWNr
Q2FsbFJlc3VsdChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIFJlZlB0cjxKU09OOjpWYWx1ZT4g
cmVzdWx0LCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIG91dF9yZXN1
bHRPYmplY3QsIE9wdGlvbmFsPGJvb2w+JiBvdXRfd2FzVGhyb3duLCBPcHRpb25hbDxpbnQ+JiBv
dXRfc2F2ZWRSZXN1bHRJbmRleCkKK3ZvaWQgSW5qZWN0ZWRTY3JpcHRCYXNlOjpjaGVja0NhbGxS
ZXN1bHQoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgUmVmUHRyPEpTT046OlZh
bHVlPiByZXN1bHQsIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYgb3V0
X3Jlc3VsdE9iamVjdCwgT3B0aW9uYWw8Ym9vbD4mIG91dF93YXNUaHJvd24sIE9wdGlvbmFsPGlu
dD4mIG91dF9zYXZlZFJlc3VsdEluZGV4KQogewogICAgIGlmICghcmVzdWx0KSB7CiAgICAgICAg
IGVycm9yU3RyaW5nID0gIkludGVybmFsIGVycm9yOiByZXN1bHQgdmFsdWUgaXMgZW1wdHkiX3M7
CkBAIC0xNTEsNDkgKzE1MSw0MiBAQCB2b2lkIEluamVjdGVkU2NyaXB0QmFzZTo6Y2hlY2tDYWxs
UmVzdWx0KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgUmVmUHRyPEpTT046OgogICAgIH0KIAog
ICAgIGlmIChyZXN1bHQtPnR5cGUoKSA9PSBKU09OOjpWYWx1ZTo6VHlwZTo6U3RyaW5nKSB7Ci0g
ICAgICAgIHJlc3VsdC0+YXNTdHJpbmcoZXJyb3JTdHJpbmcpOwotICAgICAgICBBU1NFUlQoZXJy
b3JTdHJpbmcubGVuZ3RoKCkpOworICAgICAgICBlcnJvclN0cmluZyA9IHJlc3VsdC0+YXNTdHJp
bmcoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+
IHJlc3VsdFR1cGxlOwotICAgIGlmICghcmVzdWx0LT5hc09iamVjdChyZXN1bHRUdXBsZSkpIHsK
KyAgICBhdXRvIHJlc3VsdFR1cGxlID0gcmVzdWx0LT5hc09iamVjdCgpOworICAgIGlmICghcmVz
dWx0VHVwbGUpIHsKICAgICAgICAgZXJyb3JTdHJpbmcgPSAiSW50ZXJuYWwgZXJyb3I6IHJlc3Vs
dCBpcyBub3QgYW4gT2JqZWN0Il9zOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgUmVm
UHRyPEpTT046Ok9iamVjdD4gcmVzdWx0T2JqZWN0OwotICAgIGlmICghcmVzdWx0VHVwbGUtPmdl
dE9iamVjdCgicmVzdWx0Il9zLCByZXN1bHRPYmplY3QpKSB7CisgICAgYXV0byByZXN1bHRPYmpl
Y3QgPSByZXN1bHRUdXBsZS0+Z2V0T2JqZWN0KCJyZXN1bHQiX3MpOworICAgIGlmICghcmVzdWx0
T2JqZWN0KSB7CiAgICAgICAgIGVycm9yU3RyaW5nID0gIkludGVybmFsIGVycm9yOiByZXN1bHQg
aXMgbm90IGEgcGFpciBvZiB2YWx1ZSBhbmQgd2FzVGhyb3duIGZsYWciX3M7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSAgICBib29sIHdhc1Rocm93biA9IGZhbHNlOwotICAgIGlmICghcmVz
dWx0VHVwbGUtPmdldEJvb2xlYW4oIndhc1Rocm93biJfcywgd2FzVGhyb3duKSkgeworICAgIG91
dF93YXNUaHJvd24gPSByZXN1bHRUdXBsZS0+Z2V0Qm9vbGVhbigid2FzVGhyb3duIl9zKTsKKyAg
ICBpZiAoIW91dF93YXNUaHJvd24pIHsKICAgICAgICAgZXJyb3JTdHJpbmcgPSAiSW50ZXJuYWwg
ZXJyb3I6IHJlc3VsdCBpcyBub3QgYSBwYWlyIG9mIHZhbHVlIGFuZCB3YXNUaHJvd24gZmxhZyJf
czsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG91dF9yZXN1bHRPYmplY3QgPSBCaW5k
aW5nVHJhaXRzPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+OjpydW50aW1lQ2FzdChy
ZXN1bHRPYmplY3QpOwotCi0gICAgaWYgKHdhc1Rocm93bikKLSAgICAgICAgb3V0X3dhc1Rocm93
biA9IHdhc1Rocm93bjsKLQotICAgIGludCBzYXZlZFJlc3VsdEluZGV4OwotICAgIGlmIChyZXN1
bHRUdXBsZS0+Z2V0SW50ZWdlcigic2F2ZWRSZXN1bHRJbmRleCJfcywgc2F2ZWRSZXN1bHRJbmRl
eCkpCi0gICAgICAgIG91dF9zYXZlZFJlc3VsdEluZGV4ID0gc2F2ZWRSZXN1bHRJbmRleDsKKyAg
ICBvdXRfcmVzdWx0T2JqZWN0ID0gUHJvdG9jb2w6OkJpbmRpbmdUcmFpdHM8UHJvdG9jb2w6OlJ1
bnRpbWU6OlJlbW90ZU9iamVjdD46OnJ1bnRpbWVDYXN0KHJlc3VsdE9iamVjdC5yZWxlYXNlTm9u
TnVsbCgpKTsKKyAgICBvdXRfc2F2ZWRSZXN1bHRJbmRleCA9IHJlc3VsdFR1cGxlLT5nZXRJbnRl
Z2VyKCJzYXZlZFJlc3VsdEluZGV4Il9zKTsKIH0KIAogdm9pZCBJbmplY3RlZFNjcmlwdEJhc2U6
OmNoZWNrQXN5bmNDYWxsUmVzdWx0KFJlZlB0cjxKU09OOjpWYWx1ZT4gcmVzdWx0LCBjb25zdCBB
c3luY0NhbGxDYWxsYmFjayYgY2FsbGJhY2spCiB7Ci0gICAgRXJyb3JTdHJpbmcgZXJyb3JTdHJp
bmc7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOwogICAgIFJlZlB0cjxQ
cm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiByZXN1bHRPYmplY3Q7CiAgICAgT3B0aW9u
YWw8Ym9vbD4gd2FzVGhyb3duOwogICAgIE9wdGlvbmFsPGludD4gc2F2ZWRSZXN1bHRJbmRleDsK
IAogICAgIGNoZWNrQ2FsbFJlc3VsdChlcnJvclN0cmluZywgcmVzdWx0LCByZXN1bHRPYmplY3Qs
IHdhc1Rocm93biwgc2F2ZWRSZXN1bHRJbmRleCk7CiAKLSAgICBjYWxsYmFjayhlcnJvclN0cmlu
ZywgV1RGTW92ZShyZXN1bHRPYmplY3QpLCB3YXNUaHJvd24sIHNhdmVkUmVzdWx0SW5kZXgpOwor
ICAgIGNhbGxiYWNrKGVycm9yU3RyaW5nLCBXVEZNb3ZlKHJlc3VsdE9iamVjdCksIFdURk1vdmUo
d2FzVGhyb3duKSwgV1RGTW92ZShzYXZlZFJlc3VsdEluZGV4KSk7CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIEluc3BlY3RvcgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9JbmplY3RlZFNjcmlwdEJhc2UuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
SW5qZWN0ZWRTY3JpcHRCYXNlLmgKaW5kZXggODEyM2YxZDY2ZTliMTNhZDRhZDBlY2IxYTNjYWQz
M2Y1OTc2ZDVkNy4uZjRlNmEwZmVlYTQxMWNkMDU4NTk4NGJkNzRhY2M0YjI0YWE4ZWQwZiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdEJh
c2UuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0
QmFzZS5oCkBAIC00Nyw4ICs0Nyw3IEBAIGNsYXNzIFNjcmlwdEZ1bmN0aW9uQ2FsbDsKIAogbmFt
ZXNwYWNlIEluc3BlY3RvciB7CiAKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotdHlwZWRl
ZiBXVEY6OkZ1bmN0aW9uPHZvaWQoRXJyb3JTdHJpbmcmLCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRp
bWU6OlJlbW90ZU9iamVjdD4mJiwgT3B0aW9uYWw8Ym9vbD4mLCBPcHRpb25hbDxpbnQ+Jik+IEFz
eW5jQ2FsbENhbGxiYWNrOwordXNpbmcgQXN5bmNDYWxsQ2FsbGJhY2sgPSBXVEY6OkZ1bmN0aW9u
PHZvaWQoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiwgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpS
ZW1vdGVPYmplY3Q+JiYsIE9wdGlvbmFsPGJvb2w+JiYsIE9wdGlvbmFsPGludD4mJik+OwogCiBj
bGFzcyBKU19FWFBPUlRfUFJJVkFURSBJbmplY3RlZFNjcmlwdEJhc2UgewogcHVibGljOgpAQCAt
NjksMTEgKzY4LDExIEBAIHByb3RlY3RlZDoKICAgICBjb25zdCBEZXByZWNhdGVkOjpTY3JpcHRP
YmplY3QmIGluamVjdGVkU2NyaXB0T2JqZWN0KCkgY29uc3Q7CiAgICAgRXhwZWN0ZWQ8SlNDOjpK
U1ZhbHVlLCBOYWtlZFB0cjxKU0M6OkV4Y2VwdGlvbj4+IGNhbGxGdW5jdGlvbldpdGhFdmFsRW5h
YmxlZChEZXByZWNhdGVkOjpTY3JpcHRGdW5jdGlvbkNhbGwmKSBjb25zdDsKICAgICBSZWY8SlNP
Tjo6VmFsdWU+IG1ha2VDYWxsKERlcHJlY2F0ZWQ6OlNjcmlwdEZ1bmN0aW9uQ2FsbCYpOwotICAg
IHZvaWQgbWFrZUV2YWxDYWxsKEVycm9yU3RyaW5nJiwgRGVwcmVjYXRlZDo6U2NyaXB0RnVuY3Rp
b25DYWxsJiwgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiByZXN1bHRP
YmplY3QsIE9wdGlvbmFsPGJvb2w+JiB3YXNUaHJvd24sIE9wdGlvbmFsPGludD4mIHNhdmVkUmVz
dWx0SW5kZXgpOworICAgIHZvaWQgbWFrZUV2YWxDYWxsKFByb3RvY29sOjpFcnJvclN0cmluZyYs
IERlcHJlY2F0ZWQ6OlNjcmlwdEZ1bmN0aW9uQ2FsbCYsIFJlZlB0cjxQcm90b2NvbDo6UnVudGlt
ZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0T2JqZWN0LCBPcHRpb25hbDxib29sPiYgd2FzVGhyb3du
LCBPcHRpb25hbDxpbnQ+JiBzYXZlZFJlc3VsdEluZGV4KTsKICAgICB2b2lkIG1ha2VBc3luY0Nh
bGwoRGVwcmVjYXRlZDo6U2NyaXB0RnVuY3Rpb25DYWxsJiwgQXN5bmNDYWxsQ2FsbGJhY2smJik7
CiAKIHByaXZhdGU6Ci0gICAgdm9pZCBjaGVja0NhbGxSZXN1bHQoRXJyb3JTdHJpbmcmLCBSZWZQ
dHI8SlNPTjo6VmFsdWU+IHJlc3VsdCwgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVP
YmplY3Q+JiByZXN1bHRPYmplY3QsIE9wdGlvbmFsPGJvb2w+JiB3YXNUaHJvd24sIE9wdGlvbmFs
PGludD4mIHNhdmVkUmVzdWx0SW5kZXgpOworICAgIHZvaWQgY2hlY2tDYWxsUmVzdWx0KFByb3Rv
Y29sOjpFcnJvclN0cmluZyYsIFJlZlB0cjxKU09OOjpWYWx1ZT4gcmVzdWx0LCBSZWZQdHI8UHJv
dG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3VsdE9iamVjdCwgT3B0aW9uYWw8Ym9v
bD4mIHdhc1Rocm93biwgT3B0aW9uYWw8aW50PiYgc2F2ZWRSZXN1bHRJbmRleCk7CiAgICAgdm9p
ZCBjaGVja0FzeW5jQ2FsbFJlc3VsdChSZWZQdHI8SlNPTjo6VmFsdWU+IHJlc3VsdCwgY29uc3Qg
QXN5bmNDYWxsQ2FsbGJhY2smKTsKIAogICAgIFN0cmluZyBtX25hbWU7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0TWFuYWdlci5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0TWFuYWdlci5j
cHAKaW5kZXggOTBhZjdhOGYzYTMzMDU2MTZiNDk1ZTViM2NhZGYwNTMzMTFlMjM1MC4uZmNjYzhl
ZjE5ODZkODg2ZDc1NjAwZjczNjEwMGE3ZWIzOTZiNTAwNSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdE1hbmFnZXIuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmNwcApA
QCAtMTAyLDE5ICsxMDIsMTkgQEAgaW50IEluamVjdGVkU2NyaXB0TWFuYWdlcjo6aW5qZWN0ZWRT
Y3JpcHRJZEZvcihKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogCiBJbmplY3RlZFNjcmlw
dCBJbmplY3RlZFNjcmlwdE1hbmFnZXI6OmluamVjdGVkU2NyaXB0Rm9yT2JqZWN0SWQoY29uc3Qg
U3RyaW5nJiBvYmplY3RJZCkKIHsKLSAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHBhcnNlZE9iamVj
dElkOwotICAgIGlmICghSlNPTjo6VmFsdWU6OnBhcnNlSlNPTihvYmplY3RJZCwgcGFyc2VkT2Jq
ZWN0SWQpKQorICAgIGF1dG8gcGFyc2VkT2JqZWN0SWQgPSBKU09OOjpWYWx1ZTo6cGFyc2VKU09O
KG9iamVjdElkKTsKKyAgICBpZiAoIXBhcnNlZE9iamVjdElkKQogICAgICAgICByZXR1cm4gSW5q
ZWN0ZWRTY3JpcHQoKTsKIAotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHJlc3VsdE9iamVjdDsK
LSAgICBpZiAoIXBhcnNlZE9iamVjdElkLT5hc09iamVjdChyZXN1bHRPYmplY3QpKQorICAgIGF1
dG8gcmVzdWx0T2JqZWN0ID0gcGFyc2VkT2JqZWN0SWQtPmFzT2JqZWN0KCk7CisgICAgaWYgKCFy
ZXN1bHRPYmplY3QpCiAgICAgICAgIHJldHVybiBJbmplY3RlZFNjcmlwdCgpOwogCi0gICAgbG9u
ZyBpbmplY3RlZFNjcmlwdElkID0gMDsKLSAgICBpZiAoIXJlc3VsdE9iamVjdC0+Z2V0SW50ZWdl
cigiaW5qZWN0ZWRTY3JpcHRJZCJfcywgaW5qZWN0ZWRTY3JpcHRJZCkpCisgICAgYXV0byBpbmpl
Y3RlZFNjcmlwdElkID0gcmVzdWx0T2JqZWN0LT5nZXRJbnRlZ2VyKCJpbmplY3RlZFNjcmlwdElk
Il9zKTsKKyAgICBpZiAoIWluamVjdGVkU2NyaXB0SWQpCiAgICAgICAgIHJldHVybiBJbmplY3Rl
ZFNjcmlwdCgpOwogCi0gICAgcmV0dXJuIG1faWRUb0luamVjdGVkU2NyaXB0LmdldChpbmplY3Rl
ZFNjcmlwdElkKTsKKyAgICByZXR1cm4gbV9pZFRvSW5qZWN0ZWRTY3JpcHQuZ2V0KCppbmplY3Rl
ZFNjcmlwdElkKTsKIH0KIAogdm9pZCBJbmplY3RlZFNjcmlwdE1hbmFnZXI6OnJlbGVhc2VPYmpl
Y3RHcm91cChjb25zdCBTdHJpbmcmIG9iamVjdEdyb3VwKQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
LmNwcAppbmRleCA2OTNlOGIyNWM3Mzc3ODM0MGU4Mzk0MDQ2Nzg2ZDkzMThhOGEwOTI0Li5kYmEx
N2Q0YTY1YTcwZDM1ODUxYzhjNTE5YWQxZWNiZDU3MTc1MmRkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyLmNwcApAQCAtNjgsNyArNjgsNyBAQCB2b2lkIEJhY2tlbmREaXNwYXRjaGVyOjpDYWxs
YmFja0Jhc2U6OnNlbmRGYWlsdXJlKGNvbnN0IEVycm9yU3RyaW5nJiBlcnJvcikKICAgICBtX2Jh
Y2tlbmREaXNwYXRjaGVyLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogfQogCi12b2lkIEJhY2tlbmRE
aXNwYXRjaGVyOjpDYWxsYmFja0Jhc2U6OnNlbmRTdWNjZXNzKFJlZlB0cjxKU09OOjpPYmplY3Q+
JiYgcGFydGlhbE1lc3NhZ2UpCit2b2lkIEJhY2tlbmREaXNwYXRjaGVyOjpDYWxsYmFja0Jhc2U6
OnNlbmRTdWNjZXNzKFJlZjxKU09OOjpPYmplY3Q+JiYgcGFydGlhbE1lc3NhZ2UpCiB7CiAgICAg
aWYgKG1fYWxyZWFkeVNlbnQpCiAgICAgICAgIHJldHVybjsKQEAgLTEwNyw3ICsxMDcsNyBAQCB2
b2lkIEJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCiAK
ICAgICBBU1NFUlQoIW1fcHJvdG9jb2xFcnJvcnMuc2l6ZSgpKTsKIAotICAgIGxvbmcgcmVxdWVz
dElkID0gMDsKKyAgICBpbnQgcmVxdWVzdElkID0gMDsKICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0
PiBtZXNzYWdlT2JqZWN0OwogCiAgICAgewpAQCAtMTE1LDQ2ICsxMTUsNTAgQEAgdm9pZCBCYWNr
ZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2goY29uc3QgU3RyaW5nJiBtZXNzYWdlKQogICAgICAgICAv
LyB0aGUgb3V0ZXIgcmVxdWVzdCdzIGlkIGp1c3QgYmVjYXVzZSB0aGUgaW5uZXIgcmVxdWVzdCBp
cyBib2d1cy4KICAgICAgICAgU2V0Rm9yU2NvcGU8T3B0aW9uYWw8bG9uZz4+IHNjb3BlZFJlcXVl
c3RJZChtX2N1cnJlbnRSZXF1ZXN0SWQsIFdURjo6bnVsbG9wdCk7CiAKLSAgICAgICAgUmVmUHRy
PEpTT046OlZhbHVlPiBwYXJzZWRNZXNzYWdlOwotICAgICAgICBpZiAoIUpTT046OlZhbHVlOjpw
YXJzZUpTT04obWVzc2FnZSwgcGFyc2VkTWVzc2FnZSkpIHsKKyAgICAgICAgYXV0byBwYXJzZWRN
ZXNzYWdlID0gSlNPTjo6VmFsdWU6OnBhcnNlSlNPTihtZXNzYWdlKTsKKyAgICAgICAgaWYgKCFw
YXJzZWRNZXNzYWdlKSB7CiAgICAgICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKFBhcnNlRXJy
b3IsICJNZXNzYWdlIG11c3QgYmUgaW4gSlNPTiBmb3JtYXQiX3MpOwogICAgICAgICAgICAgc2Vu
ZFBlbmRpbmdFcnJvcnMoKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAg
ICAgIGlmICghcGFyc2VkTWVzc2FnZS0+YXNPYmplY3QobWVzc2FnZU9iamVjdCkpIHsKKyAgICAg
ICAgbWVzc2FnZU9iamVjdCA9IHBhcnNlZE1lc3NhZ2UtPmFzT2JqZWN0KCk7CisgICAgICAgIGlm
ICghbWVzc2FnZU9iamVjdCkgewogICAgICAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihJbnZh
bGlkUmVxdWVzdCwgIk1lc3NhZ2UgbXVzdCBiZSBhIEpTT05pZmllZCBvYmplY3QiX3MpOwogICAg
ICAgICAgICAgc2VuZFBlbmRpbmdFcnJvcnMoKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQogCi0gICAgICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gcmVxdWVzdElkVmFsdWU7Ci0gICAg
ICAgIGlmICghbWVzc2FnZU9iamVjdC0+Z2V0VmFsdWUoImlkIl9zLCByZXF1ZXN0SWRWYWx1ZSkp
IHsKKyAgICAgICAgYXV0byByZXF1ZXN0SWRWYWx1ZSA9IG1lc3NhZ2VPYmplY3QtPmdldFZhbHVl
KCJpZCJfcyk7CisgICAgICAgIGlmICghcmVxdWVzdElkVmFsdWUpIHsKICAgICAgICAgICAgIHJl
cG9ydFByb3RvY29sRXJyb3IoSW52YWxpZFJlcXVlc3QsICInaWQnIHByb3BlcnR5IHdhcyBub3Qg
Zm91bmQiX3MpOwogICAgICAgICAgICAgc2VuZFBlbmRpbmdFcnJvcnMoKTsKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIGlmICghcmVxdWVzdElkVmFsdWUtPmFzSW50
ZWdlcihyZXF1ZXN0SWQpKSB7CisgICAgICAgIGF1dG8gcmVxdWVzdElkSW50ID0gcmVxdWVzdElk
VmFsdWUtPmFzSW50ZWdlcigpOworICAgICAgICBpZiAoIXJlcXVlc3RJZEludCkgewogICAgICAg
ICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihJbnZhbGlkUmVxdWVzdCwgIlRoZSB0eXBlIG9mICdp
ZCcgcHJvcGVydHkgbXVzdCBiZSBpbnRlZ2VyIl9zKTsKICAgICAgICAgICAgIHNlbmRQZW5kaW5n
RXJyb3JzKCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KKworICAgICAgICByZXF1
ZXN0SWQgPSAqcmVxdWVzdElkSW50OwogICAgIH0KIAogICAgIHsKICAgICAgICAgLy8gV2UgY291
bGQgYmUgY2FsbGVkIHJlLWVudHJhbnRseSBmcm9tIGEgbmVzdGVkIHJ1biBsb29wLCBzbyByZXN0
b3JlIHRoZSBwcmV2aW91cyBpZC4KICAgICAgICAgU2V0Rm9yU2NvcGU8T3B0aW9uYWw8bG9uZz4+
IHNjb3BlZFJlcXVlc3RJZChtX2N1cnJlbnRSZXF1ZXN0SWQsIHJlcXVlc3RJZCk7CiAKLSAgICAg
ICAgUmVmUHRyPEpTT046OlZhbHVlPiBtZXRob2RWYWx1ZTsKLSAgICAgICAgaWYgKCFtZXNzYWdl
T2JqZWN0LT5nZXRWYWx1ZSgibWV0aG9kIl9zLCBtZXRob2RWYWx1ZSkpIHsKKyAgICAgICAgYXV0
byBtZXRob2RWYWx1ZSA9IG1lc3NhZ2VPYmplY3QtPmdldFZhbHVlKCJtZXRob2QiX3MpOworICAg
ICAgICBpZiAoIW1ldGhvZFZhbHVlKSB7CiAgICAgICAgICAgICByZXBvcnRQcm90b2NvbEVycm9y
KEludmFsaWRSZXF1ZXN0LCAiJ21ldGhvZCcgcHJvcGVydHkgd2Fzbid0IGZvdW5kIl9zKTsKICAg
ICAgICAgICAgIHNlbmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KIAotICAgICAgICBTdHJpbmcgbWV0aG9kU3RyaW5nOwotICAgICAgICBpZiAoIW1ldGhv
ZFZhbHVlLT5hc1N0cmluZyhtZXRob2RTdHJpbmcpKSB7CisgICAgICAgIGF1dG8gbWV0aG9kU3Ry
aW5nID0gbWV0aG9kVmFsdWUtPmFzU3RyaW5nKCk7CisgICAgICAgIGlmICghbWV0aG9kU3RyaW5n
KSB7CiAgICAgICAgICAgICByZXBvcnRQcm90b2NvbEVycm9yKEludmFsaWRSZXF1ZXN0LCAiVGhl
IHR5cGUgb2YgJ21ldGhvZCcgcHJvcGVydHkgbXVzdCBiZSBzdHJpbmciX3MpOwogICAgICAgICAg
ICAgc2VuZFBlbmRpbmdFcnJvcnMoKTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTE4NCwxMiAr
MTg4LDEyIEBAIHZvaWQgQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGNvbnN0IFN0cmluZyYg
bWVzc2FnZSkKIH0KIAogLy8gRklYTUU6IHJlbW92ZSB0aGlzIGZ1bmN0aW9uIHdoZW4gbGVnYWN5
IEluc3BlY3Rvck9iamVjdCBzeW1ib2xzIGFyZSBubyBsb25nZXIgbmVlZGVkIDxodHRwOi8vd2Vi
a2l0Lm9yZy9iLzE3OTg0Nz4uCi12b2lkIEJhY2tlbmREaXNwYXRjaGVyOjpzZW5kUmVzcG9uc2Uo
bG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcmVzdWx0KQordm9pZCBCYWNr
ZW5kRGlzcGF0Y2hlcjo6c2VuZFJlc3BvbnNlKGxvbmcgcmVxdWVzdElkLCBSZWY8SlNPTjo6T2Jq
ZWN0PiYmIHJlc3VsdCkKIHsKICAgICBzZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJl
c3VsdCksIGZhbHNlKTsKIH0KIAotdm9pZCBCYWNrZW5kRGlzcGF0Y2hlcjo6c2VuZFJlc3BvbnNl
KGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHJlc3VsdCwgYm9vbCkKK3Zv
aWQgQmFja2VuZERpc3BhdGNoZXI6OnNlbmRSZXNwb25zZShsb25nIHJlcXVlc3RJZCwgUmVmPEpT
T046Ok9iamVjdD4mJiByZXN1bHQsIGJvb2wpCiB7CiAgICAgQVNTRVJUKCFtX3Byb3RvY29sRXJy
b3JzLnNpemUoKSk7CiAKQEAgLTI3MCw3NCArMjc0LDY0IEBAIHZvaWQgQmFja2VuZERpc3BhdGNo
ZXI6OnJlcG9ydFByb3RvY29sRXJyb3IoT3B0aW9uYWw8bG9uZz4gcmVsYXRlZFJlcXVlc3RJZCwg
Q29tCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1UIEJhY2tlbmREaXNwYXRjaGVyOjpnZXRQ
cm9wZXJ0eVZhbHVlKEpTT046Ok9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJv
b2wqIG91dF9vcHRpb25hbFZhbHVlRm91bmQsIFQgZGVmYXVsdFZhbHVlLCBzdGQ6OmZ1bmN0aW9u
PGJvb2woSlNPTjo6VmFsdWUmLCBUJik+IGFzTWV0aG9kLCBjb25zdCBjaGFyKiB0eXBlTmFtZSkK
K1QgQmFja2VuZERpc3BhdGNoZXI6OmdldFByb3BlcnR5VmFsdWUoSlNPTjo6T2JqZWN0KiBvYmpl
Y3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCByZXF1aXJlZCwgc3RkOjpmdW5jdGlvbjxUKEpT
T046OlZhbHVlJik+IGNvbnZlcnRlciwgY29uc3QgY2hhciogdHlwZU5hbWUpCiB7Ci0gICAgVCBy
ZXN1bHQoZGVmYXVsdFZhbHVlKTsKLSAgICAvLyBvdXRfb3B0aW9uYWxWYWx1ZUZvdW5kIHNpZ25h
bHMgdG8gdGhlIGNhbGxlciB3aGV0aGVyIGFuIG9wdGlvbmFsIHByb3BlcnR5IHdhcyBmb3VuZC4K
LSAgICAvLyBpZiBvdXRfb3B0aW9uYWxWYWx1ZUZvdW5kID09IG51bGxwdHIsIHRoZW4gdGhpcyBp
cyBhIHJlcXVpcmVkIHByb3BlcnR5LgotICAgIGlmIChvdXRfb3B0aW9uYWxWYWx1ZUZvdW5kKQot
ICAgICAgICAqb3V0X29wdGlvbmFsVmFsdWVGb3VuZCA9IGZhbHNlOworICAgIFQgcmVzdWx0Owog
CiAgICAgaWYgKCFvYmplY3QpIHsKLSAgICAgICAgaWYgKCFvdXRfb3B0aW9uYWxWYWx1ZUZvdW5k
KQorICAgICAgICBpZiAocmVxdWlyZWQpCiAgICAgICAgICAgICByZXBvcnRQcm90b2NvbEVycm9y
KEJhY2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCBtYWtlU3RyaW5nKCIncGFyYW1zJyBv
YmplY3QgbXVzdCBjb250YWluIHJlcXVpcmVkIHBhcmFtZXRlciAnIiwgbmFtZSwgIicgd2l0aCB0
eXBlICciLCB0eXBlTmFtZSwgIicuIikpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0K
IAogICAgIGF1dG8gZmluZFJlc3VsdCA9IG9iamVjdC0+ZmluZChuYW1lKTsKICAgICBpZiAoZmlu
ZFJlc3VsdCA9PSBvYmplY3QtPmVuZCgpKSB7Ci0gICAgICAgIGlmICghb3V0X29wdGlvbmFsVmFs
dWVGb3VuZCkKKyAgICAgICAgaWYgKHJlcXVpcmVkKQogICAgICAgICAgICAgcmVwb3J0UHJvdG9j
b2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFtcywgbWFrZVN0cmluZygiUGFy
YW1ldGVyICciLCBuYW1lLCAiJyB3aXRoIHR5cGUgJyIsIHR5cGVOYW1lLCAiJyB3YXMgbm90IGZv
dW5kLiIpKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKLSAgICBpZiAoIWFzTWV0
aG9kKCpmaW5kUmVzdWx0LT52YWx1ZSwgcmVzdWx0KSkgewotICAgICAgICByZXBvcnRQcm90b2Nv
bEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCBtYWtlU3RyaW5nKCJQYXJh
bWV0ZXIgJyIsIG5hbWUsICInIGhhcyB3cm9uZyB0eXBlLiBJdCBtdXN0IGJlICciLCB0eXBlTmFt
ZSwgIicuIikpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KKyAgICByZXN1bHQgPSBj
b252ZXJ0ZXIoZmluZFJlc3VsdC0+dmFsdWUpOwogCi0gICAgaWYgKG91dF9vcHRpb25hbFZhbHVl
Rm91bmQpCi0gICAgICAgICpvdXRfb3B0aW9uYWxWYWx1ZUZvdW5kID0gdHJ1ZTsKKyAgICBpZiAo
IXJlc3VsdCkKKyAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6
SW52YWxpZFBhcmFtcywgbWFrZVN0cmluZygiUGFyYW1ldGVyICciLCBuYW1lLCAiJyBoYXMgd3Jv
bmcgdHlwZS4gSXQgbXVzdCBiZSAnIiwgdHlwZU5hbWUsICInLiIpKTsKIAogICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKLXN0YXRpYyBib29sIGNhc3RUb0ludGVnZXIoSlNPTjo6VmFsdWUmIHZhbHVl
LCBpbnQmIHJlc3VsdCkgeyByZXR1cm4gdmFsdWUuYXNJbnRlZ2VyKHJlc3VsdCk7IH0KLXN0YXRp
YyBib29sIGNhc3RUb051bWJlcihKU09OOjpWYWx1ZSYgdmFsdWUsIGRvdWJsZSYgcmVzdWx0KSB7
IHJldHVybiB2YWx1ZS5hc0RvdWJsZShyZXN1bHQpOyB9Ci0KLWludCBCYWNrZW5kRGlzcGF0Y2hl
cjo6Z2V0SW50ZWdlcihKU09OOjpPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBi
b29sKiB2YWx1ZUZvdW5kKQorT3B0aW9uYWw8Ym9vbD4gQmFja2VuZERpc3BhdGNoZXI6OmdldEJv
b2xlYW4oSlNPTjo6T2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCByZXF1
aXJlZCkKIHsKLSAgICByZXR1cm4gZ2V0UHJvcGVydHlWYWx1ZTxpbnQ+KG9iamVjdCwgbmFtZSwg
dmFsdWVGb3VuZCwgMCwgJmNhc3RUb0ludGVnZXIsICJJbnRlZ2VyIik7CisgICAgcmV0dXJuIGdl
dFByb3BlcnR5VmFsdWU8T3B0aW9uYWw8Ym9vbD4+KG9iamVjdCwgbmFtZSwgcmVxdWlyZWQsICZK
U09OOjpWYWx1ZTo6YXNCb29sZWFuLCAiQm9vbGVhbiIpOwogfQogCi1kb3VibGUgQmFja2VuZERp
c3BhdGNoZXI6OmdldERvdWJsZShKU09OOjpPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBu
YW1lLCBib29sKiB2YWx1ZUZvdW5kKQorT3B0aW9uYWw8aW50PiBCYWNrZW5kRGlzcGF0Y2hlcjo6
Z2V0SW50ZWdlcihKU09OOjpPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29s
IHJlcXVpcmVkKQogewotICAgIHJldHVybiBnZXRQcm9wZXJ0eVZhbHVlPGRvdWJsZT4ob2JqZWN0
LCBuYW1lLCB2YWx1ZUZvdW5kLCAwLCAmY2FzdFRvTnVtYmVyLCAiTnVtYmVyIik7CisgICAgcmV0
dXJuIGdldFByb3BlcnR5VmFsdWU8T3B0aW9uYWw8aW50Pj4ob2JqZWN0LCBuYW1lLCByZXF1aXJl
ZCwgJkpTT046OlZhbHVlOjphc0ludGVnZXIsICJJbnRlZ2VyIik7CiB9CiAKLVN0cmluZyBCYWNr
ZW5kRGlzcGF0Y2hlcjo6Z2V0U3RyaW5nKEpTT046Ok9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJp
bmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQpCitPcHRpb25hbDxkb3VibGU+IEJhY2tlbmREaXNw
YXRjaGVyOjpnZXREb3VibGUoSlNPTjo6T2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFt
ZSwgYm9vbCByZXF1aXJlZCkKIHsKLSAgICByZXR1cm4gZ2V0UHJvcGVydHlWYWx1ZTxTdHJpbmc+
KG9iamVjdCwgbmFtZSwgdmFsdWVGb3VuZCwgIiIsICZKU09OOjpWYWx1ZTo6YXNTdHJpbmcsICJT
dHJpbmciKTsKKyAgICByZXR1cm4gZ2V0UHJvcGVydHlWYWx1ZTxPcHRpb25hbDxkb3VibGU+Pihv
YmplY3QsIG5hbWUsIHJlcXVpcmVkLCAmSlNPTjo6VmFsdWU6OmFzRG91YmxlLCAiTnVtYmVyIik7
CiB9CiAKLWJvb2wgQmFja2VuZERpc3BhdGNoZXI6OmdldEJvb2xlYW4oSlNPTjo6T2JqZWN0KiBv
YmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCkKK1N0cmluZyBCYWNr
ZW5kRGlzcGF0Y2hlcjo6Z2V0U3RyaW5nKEpTT046Ok9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJp
bmcmIG5hbWUsIGJvb2wgcmVxdWlyZWQpCiB7Ci0gICAgcmV0dXJuIGdldFByb3BlcnR5VmFsdWU8
Ym9vbD4ob2JqZWN0LCBuYW1lLCB2YWx1ZUZvdW5kLCBmYWxzZSwgJkpTT046OlZhbHVlOjphc0Jv
b2xlYW4sICJCb29sZWFuIik7CisgICAgcmV0dXJuIGdldFByb3BlcnR5VmFsdWU8U3RyaW5nPihv
YmplY3QsIG5hbWUsIHJlcXVpcmVkLCAmSlNPTjo6VmFsdWU6OmFzU3RyaW5nLCAiU3RyaW5nIik7
CiB9CiAKLVJlZlB0cjxKU09OOjpPYmplY3Q+IEJhY2tlbmREaXNwYXRjaGVyOjpnZXRPYmplY3Qo
SlNPTjo6T2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3Vu
ZCkKK1JlZlB0cjxKU09OOjpWYWx1ZT4gQmFja2VuZERpc3BhdGNoZXI6OmdldFZhbHVlKEpTT046
Ok9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wgcmVxdWlyZWQpCiB7Ci0g
ICAgcmV0dXJuIGdldFByb3BlcnR5VmFsdWU8UmVmUHRyPEpTT046Ok9iamVjdD4+KG9iamVjdCwg
bmFtZSwgdmFsdWVGb3VuZCwgbnVsbHB0ciwgJkpTT046OlZhbHVlOjphc09iamVjdCwgIk9iamVj
dCIpOworICAgIHJldHVybiBnZXRQcm9wZXJ0eVZhbHVlPFJlZlB0cjxKU09OOjpWYWx1ZT4+KG9i
amVjdCwgbmFtZSwgcmVxdWlyZWQsICZKU09OOjpWYWx1ZTo6YXNWYWx1ZSwgIlZhbHVlIik7CiB9
CiAKLVJlZlB0cjxKU09OOjpBcnJheT4gQmFja2VuZERpc3BhdGNoZXI6OmdldEFycmF5KEpTT046
Ok9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQpCitS
ZWZQdHI8SlNPTjo6T2JqZWN0PiBCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0T2JqZWN0KEpTT046Ok9i
amVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wgcmVxdWlyZWQpCiB7Ci0gICAg
cmV0dXJuIGdldFByb3BlcnR5VmFsdWU8UmVmUHRyPEpTT046OkFycmF5Pj4ob2JqZWN0LCBuYW1l
LCB2YWx1ZUZvdW5kLCBudWxscHRyLCAmSlNPTjo6VmFsdWU6OmFzQXJyYXksICJBcnJheSIpOwor
ICAgIHJldHVybiBnZXRQcm9wZXJ0eVZhbHVlPFJlZlB0cjxKU09OOjpPYmplY3Q+PihvYmplY3Qs
IG5hbWUsIHJlcXVpcmVkLCAmSlNPTjo6VmFsdWU6OmFzT2JqZWN0LCAiT2JqZWN0Iik7CiB9CiAK
LVJlZlB0cjxKU09OOjpWYWx1ZT4gQmFja2VuZERpc3BhdGNoZXI6OmdldFZhbHVlKEpTT046Ok9i
amVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQpCitSZWZQ
dHI8SlNPTjo6QXJyYXk+IEJhY2tlbmREaXNwYXRjaGVyOjpnZXRBcnJheShKU09OOjpPYmplY3Qq
IG9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sIHJlcXVpcmVkKQogewotICAgIHJldHVy
biBnZXRQcm9wZXJ0eVZhbHVlPFJlZlB0cjxKU09OOjpWYWx1ZT4+KG9iamVjdCwgbmFtZSwgdmFs
dWVGb3VuZCwgbnVsbHB0ciwgJkpTT046OlZhbHVlOjphc1ZhbHVlLCAiVmFsdWUiKTsKKyAgICBy
ZXR1cm4gZ2V0UHJvcGVydHlWYWx1ZTxSZWZQdHI8SlNPTjo6QXJyYXk+PihvYmplY3QsIG5hbWUs
IHJlcXVpcmVkLCAmSlNPTjo6VmFsdWU6OmFzQXJyYXksICJBcnJheSIpOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaAppbmRleCA5NWQ5ZDgxMTg4
ZTczNWU4ZjFiNzBjYzBkZWVlMjY4MmNiNjcxNGYwLi4wMmM5NmQ3MjYzOGMyMjJmMDMwZDE0OTFj
YzliOTI2MmIwOGJlY2JhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oCkBAIC0yOSw4ICsyOSwx
MCBAQAogI2luY2x1ZGUgIkluc3BlY3RvckZyb250ZW5kUm91dGVyLmgiCiAjaW5jbHVkZSAiSW5z
cGVjdG9yUHJvdG9jb2xUeXBlcy5oIgogI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CisjaW5jbHVkZSA8
d3RmL0Z1bmN0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3Rm
L1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewpAQCAtNTksNyArNjEsNyBA
QCBwdWJsaWM6CiAgICAgICAgIGJvb2wgaXNBY3RpdmUoKSBjb25zdDsKICAgICAgICAgdm9pZCBk
aXNhYmxlKCkgeyBtX2FscmVhZHlTZW50ID0gdHJ1ZTsgfQogCi0gICAgICAgIHZvaWQgc2VuZFN1
Y2Nlc3MoUmVmUHRyPEpTT046Ok9iamVjdD4mJik7CisgICAgICAgIHZvaWQgc2VuZFN1Y2Nlc3Mo
UmVmPEpTT046Ok9iamVjdD4mJik7CiAgICAgICAgIHZvaWQgc2VuZEZhaWx1cmUoY29uc3QgRXJy
b3JTdHJpbmcmKTsKIAogICAgIHByaXZhdGU6CkBAIC04NywyOCArODksMjcgQEAgcHVibGljOgog
ICAgIC8vIE5vdGUgdGhhdCAndW51c2VkJyBpcyBhIHdvcmthcm91bmQgc28gdGhlIGNvbXBpbGVy
IGNhbiBwaWNrIHRoZSByaWdodCBzZW5kUmVzcG9uc2UgYmFzZWQgb24gYXJpdHkuCiAgICAgLy8g
V2hlbiA8aHR0cDovL3dlYmtpdC5vcmcvYi8xNzk4NDc+IGlzIGZpeGVkIG9yIHRoaXMgY2xhc3Mg
aXMgcmVuYW1lZCBmb3IgdGhlIEpTT046Ok9iamVjdCBjYXNlLAogICAgIC8vIHRoZW4gdGhpcyBh
bHRlcm5hdGUgbWV0aG9kIHdpdGggYSBkdW1teSBwYXJhbWV0ZXIgY2FuIGJlIHJlbW92ZWQgaW4g
ZmF2b3Igb2YgdGhlIG9uZSB3aXRob3V0IGl0LgotICAgIHZvaWQgc2VuZFJlc3BvbnNlKGxvbmcg
cmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHJlc3VsdCwgYm9vbCB1bnVzZWQpOwot
ICAgIHZvaWQgc2VuZFJlc3BvbnNlKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0
PiYmIHJlc3VsdCk7CisgICAgdm9pZCBzZW5kUmVzcG9uc2UobG9uZyByZXF1ZXN0SWQsIFJlZjxK
U09OOjpPYmplY3Q+JiYgcmVzdWx0LCBib29sIHVudXNlZCk7CisgICAgdm9pZCBzZW5kUmVzcG9u
c2UobG9uZyByZXF1ZXN0SWQsIFJlZjxKU09OOjpPYmplY3Q+JiYgcmVzdWx0KTsKICAgICB2b2lk
IHNlbmRQZW5kaW5nRXJyb3JzKCk7CiAKICAgICB2b2lkIHJlcG9ydFByb3RvY29sRXJyb3IoQ29t
bW9uRXJyb3JDb2RlLCBjb25zdCBTdHJpbmcmIGVycm9yTWVzc2FnZSk7CiAgICAgdm9pZCByZXBv
cnRQcm90b2NvbEVycm9yKE9wdGlvbmFsPGxvbmc+IHJlbGF0ZWRSZXF1ZXN0SWQsIENvbW1vbkVy
cm9yQ29kZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UpOwogCi0gICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVD4KLSAgICBXVEZfSU5URVJOQUwKLSAgICBUIGdldFByb3BlcnR5VmFsdWUoSlNPTjo6
T2JqZWN0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiBvdXRfb3B0aW9uYWxWYWx1ZUZvdW5k
LCBUIGRlZmF1bHRWYWx1ZSwgc3RkOjpmdW5jdGlvbjxib29sKEpTT046OlZhbHVlJiwgVCYpPiwg
Y29uc3QgY2hhciogdHlwZU5hbWUpOwotCi0gICAgaW50IGdldEludGVnZXIoSlNPTjo6T2JqZWN0
KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kKTsKLSAgICBkb3VibGUgZ2V0
RG91YmxlKEpTT046Ok9iamVjdCosIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3Vu
ZCk7Ci0gICAgU3RyaW5nIGdldFN0cmluZyhKU09OOjpPYmplY3QqLCBjb25zdCBTdHJpbmcmIG5h
bWUsIGJvb2wqIHZhbHVlRm91bmQpOwotICAgIGJvb2wgZ2V0Qm9vbGVhbihKU09OOjpPYmplY3Qq
LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQpOwotICAgIFJlZlB0cjxKU09O
OjpWYWx1ZT4gZ2V0VmFsdWUoSlNPTjo6T2JqZWN0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29s
KiB2YWx1ZUZvdW5kKTsKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBnZXRPYmplY3QoSlNPTjo6
T2JqZWN0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kKTsKLSAgICBSZWZQ
dHI8SlNPTjo6QXJyYXk+IGdldEFycmF5KEpTT046Ok9iamVjdCosIGNvbnN0IFN0cmluZyYgbmFt
ZSwgYm9vbCogdmFsdWVGb3VuZCk7CisgICAgT3B0aW9uYWw8Ym9vbD4gZ2V0Qm9vbGVhbihKU09O
OjpPYmplY3QqLCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wgcmVxdWlyZWQpOworICAgIE9wdGlv
bmFsPGludD4gZ2V0SW50ZWdlcihKU09OOjpPYmplY3QqLCBjb25zdCBTdHJpbmcmIG5hbWUsIGJv
b2wgcmVxdWlyZWQpOworICAgIE9wdGlvbmFsPGRvdWJsZT4gZ2V0RG91YmxlKEpTT046Ok9iamVj
dCosIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCByZXF1aXJlZCk7CisgICAgU3RyaW5nIGdldFN0
cmluZyhKU09OOjpPYmplY3QqLCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wgcmVxdWlyZWQpOwor
ICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gZ2V0VmFsdWUoSlNPTjo6T2JqZWN0KiwgY29uc3QgU3Ry
aW5nJiBuYW1lLCBib29sIHJlcXVpcmVkKTsKKyAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBnZXRP
YmplY3QoSlNPTjo6T2JqZWN0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sIHJlcXVpcmVkKTsK
KyAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IGdldEFycmF5KEpTT046Ok9iamVjdCosIGNvbnN0IFN0
cmluZyYgbmFtZSwgYm9vbCByZXF1aXJlZCk7CiAKIHByaXZhdGU6CiAgICAgQmFja2VuZERpc3Bh
dGNoZXIoUmVmPEZyb250ZW5kUm91dGVyPiYmKTsKIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
CisgICAgVCBnZXRQcm9wZXJ0eVZhbHVlKEpTT046Ok9iamVjdCosIGNvbnN0IFN0cmluZyYgbmFt
ZSwgYm9vbCByZXF1aXJlZCwgc3RkOjpmdW5jdGlvbjxUKEpTT046OlZhbHVlJik+IGNvbnZlcnRl
ciwgY29uc3QgY2hhciogdHlwZU5hbWUpOworCiAgICAgUmVmPEZyb250ZW5kUm91dGVyPiBtX2Zy
b250ZW5kUm91dGVyOwogICAgIEhhc2hNYXA8U3RyaW5nLCBTdXBwbGVtZW50YWxCYWNrZW5kRGlz
cGF0Y2hlcio+IG1fZGlzcGF0Y2hlcnM7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmgKaW5kZXggZDcwMTBhNWM2
MmU4NjMzYTRkZDAxYjJjMDA2MDViYWFjYzljOGM3OS4uNTg3N2UwZDc0MTA4MmY3MTFhNWZmZWQ0
MzVjZWZjMGYyMTMxMzM1ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmgKQEAgLTI3LDEyICsyNywxOSBAQAog
I3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0
Zi9FeHBlY3RlZC5oPgogI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCiBuYW1lc3BhY2Ug
UHJvdG9jb2wgewogCit1c2luZyBFcnJvclN0cmluZyA9IFN0cmluZzsKKwordGVtcGxhdGUgPHR5
cGVuYW1lIFQ+Cit1c2luZyBFcnJvclN0cmluZ09yID0gRXhwZWN0ZWQ8VCwgRXJyb3JTdHJpbmc+
OworCiB0ZW1wbGF0ZTx0eXBlbmFtZT4gc3RydWN0IEJpbmRpbmdUcmFpdHM7CiAKIHRlbXBsYXRl
PEpTT046OlZhbHVlOjpUeXBlIHR5cGU+IHN0cnVjdCBQcmltaXRpdmVCaW5kaW5nVHJhaXRzIHsK
QEAgLTQ0LDI5ICs1MSwyMyBAQCB0ZW1wbGF0ZTxKU09OOjpWYWx1ZTo6VHlwZSB0eXBlPiBzdHJ1
Y3QgUHJpbWl0aXZlQmluZGluZ1RyYWl0cyB7CiB9OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBz
dHJ1Y3QgQmluZGluZ1RyYWl0czxKU09OOjpBcnJheU9mPFQ+PiB7Ci0gICAgc3RhdGljIFJlZlB0
cjxKU09OOjpBcnJheU9mPFQ+PiBydW50aW1lQ2FzdChSZWZQdHI8SlNPTjo6VmFsdWU+JiYgdmFs
dWUpCisgICAgc3RhdGljIFJlZjxKU09OOjpBcnJheU9mPFQ+PiBydW50aW1lQ2FzdChSZWY8SlNP
Tjo6VmFsdWU+JiYgdmFsdWUpCiAgICAgewotICAgICAgICBBU1NFUlRfQVJHKHZhbHVlLCB2YWx1
ZSk7Ci0gICAgICAgIFJlZlB0cjxKU09OOjpBcnJheT4gYXJyYXk7Ci0gICAgICAgIGJvb2wgY2Fz
dFN1Y2NlZWRlZCA9IHZhbHVlLT5hc0FycmF5KGFycmF5KTsKLSAgICAgICAgQVNTRVJUX1VOVVNF
RChjYXN0U3VjY2VlZGVkLCBjYXN0U3VjY2VlZGVkKTsKLSAgICAgICAgYXNzZXJ0VmFsdWVIYXNF
eHBlY3RlZFR5cGUoYXJyYXkuZ2V0KCkpOworICAgICAgICBhdXRvIGFycmF5ID0gdmFsdWUtPmFz
QXJyYXkoKTsKKyAgICAgICAgQmluZGluZ1RyYWl0czxKU09OOjpBcnJheU9mPFQ+Pjo6YXNzZXJ0
VmFsdWVIYXNFeHBlY3RlZFR5cGUoYXJyYXkuZ2V0KCkpOwogICAgICAgICBDT01QSUxFX0FTU0VS
VChzaXplb2YoSlNPTjo6QXJyYXlPZjxUPikgPT0gc2l6ZW9mKEpTT046OkFycmF5KSwgdHlwZV9j
YXN0X3Byb2JsZW0pOwotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SlNPTjo6QXJyYXlPZjxU
Pio+KHN0YXRpY19jYXN0PEpTT046OkFycmF5QmFzZSo+KGFycmF5LmdldCgpKSk7CisgICAgICAg
IHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SlNPTjo6QXJyYXlPZjxUPj4oc3RhdGljX3Jl
ZmVyZW5jZV9jYXN0PEpTT046OkFycmF5QmFzZT4oYXJyYXkucmVsZWFzZU5vbk51bGwoKSkpOwog
ICAgIH0KIAogICAgIHN0YXRpYyB2b2lkIGFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKEpTT046
OlZhbHVlKiB2YWx1ZSkKICAgICB7CisgICAgICAgIEFTU0VSVF9VTlVTRUQodmFsdWUsIHZhbHVl
KTsKICNpZiBBU1NFUlRfRU5BQkxFRAotICAgICAgICBBU1NFUlRfQVJHKHZhbHVlLCB2YWx1ZSk7
Ci0gICAgICAgIFJlZlB0cjxKU09OOjpBcnJheT4gYXJyYXk7Ci0gICAgICAgIGJvb2wgY2FzdFN1
Y2NlZWRlZCA9IHZhbHVlLT5hc0FycmF5KGFycmF5KTsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChj
YXN0U3VjY2VlZGVkLCBjYXN0U3VjY2VlZGVkKTsKKyAgICAgICAgYXV0byBhcnJheSA9IHZhbHVl
LT5hc0FycmF5KCk7CisgICAgICAgIEFTU0VSVChhcnJheSk7CiAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBhcnJheS0+bGVuZ3RoKCk7IGkrKykKLSAgICAgICAgICAgIEJpbmRpbmdU
cmFpdHM8VD46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKGFycmF5LT5nZXQoaSkuZ2V0KCkp
OwotI2Vsc2UKLSAgICAgICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKLSNlbmRpZiAvLyBBU1NFUlRf
RU5BQkxFRAorICAgICAgICAgICAgQmluZGluZ1RyYWl0czxUPjo6YXNzZXJ0VmFsdWVIYXNFeHBl
Y3RlZFR5cGUoYXJyYXktPmdldChpKS5wdHIoKSk7CisjZW5kaWYKICAgICB9CiB9OwogCkBAIC04
NSw2ICs4Niw0IEBAIHRlbXBsYXRlPD4gc3RydWN0IEJpbmRpbmdUcmFpdHM8aW50PiA6IFByaW1p
dGl2ZUJpbmRpbmdUcmFpdHM8SlNPTjo6VmFsdWU6OlR5cGU6CiAKIH0KIAotdXNpbmcgUHJvdG9j
b2w6OkJpbmRpbmdUcmFpdHM7Ci0KIH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0dsb2JhbE9iamVjdENvbnNvbGVD
bGllbnQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0dsb2JhbE9iamVj
dENvbnNvbGVDbGllbnQuY3BwCmluZGV4IDQ2ZDBiNjk0MzI4ZWUwNDE3NjY1MDNmZTU2ZjlkNmMy
Mjk5NzU3YzYuLmJjNjM2OWEwYzM5ZDliYjY0MDk1ZjVkODcwNDRkNjA3NTNjZDQ4N2QgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNHbG9iYWxPYmplY3RDb25z
b2xlQ2xpZW50LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTR2xv
YmFsT2JqZWN0Q29uc29sZUNsaWVudC5jcHAKQEAgLTEzNiwyOCArMTM2LDIyIEBAIHZvaWQgSlNH
bG9iYWxPYmplY3RDb25zb2xlQ2xpZW50Ojpwcm9maWxlRW5kKEpTQzo6SlNHbG9iYWxPYmplY3Qq
LCBjb25zdCBTdHJpbmcmCiAKIHZvaWQgSlNHbG9iYWxPYmplY3RDb25zb2xlQ2xpZW50OjpzdGFy
dENvbnNvbGVQcm9maWxlKCkKIHsKLSAgICBFcnJvclN0cmluZyBpZ25vcmVkOwotCiAgICAgaWYg
KG1fZGVidWdnZXJBZ2VudCkgewogICAgICAgICBtX3Byb2ZpbGVSZXN0b3JlQnJlYWtwb2ludEFj
dGl2ZVZhbHVlID0gbV9kZWJ1Z2dlckFnZW50LT5icmVha3BvaW50c0FjdGl2ZSgpOwotICAgICAg
ICBtX2RlYnVnZ2VyQWdlbnQtPnNldEJyZWFrcG9pbnRzQWN0aXZlKGlnbm9yZWQsIGZhbHNlKTsK
KyAgICAgICAgbV9kZWJ1Z2dlckFnZW50LT5zZXRCcmVha3BvaW50c0FjdGl2ZShmYWxzZSk7CiAg
ICAgfQogCi0gICAgaWYgKG1fc2NyaXB0UHJvZmlsZXJBZ2VudCkgewotICAgICAgICBjb25zdCBi
b29sIGluY2x1ZGVTYW1wbGVzID0gdHJ1ZTsKLSAgICAgICAgbV9zY3JpcHRQcm9maWxlckFnZW50
LT5zdGFydFRyYWNraW5nKGlnbm9yZWQsICZpbmNsdWRlU2FtcGxlcyk7Ci0gICAgfQorICAgIGlm
IChtX3NjcmlwdFByb2ZpbGVyQWdlbnQpCisgICAgICAgIG1fc2NyaXB0UHJvZmlsZXJBZ2VudC0+
c3RhcnRUcmFja2luZyh0cnVlKTsKIH0KIAogdm9pZCBKU0dsb2JhbE9iamVjdENvbnNvbGVDbGll
bnQ6OnN0b3BDb25zb2xlUHJvZmlsZSgpCiB7Ci0gICAgRXJyb3JTdHJpbmcgaWdub3JlZDsKLQog
ICAgIGlmIChtX3NjcmlwdFByb2ZpbGVyQWdlbnQpCi0gICAgICAgIG1fc2NyaXB0UHJvZmlsZXJB
Z2VudC0+c3RvcFRyYWNraW5nKGlnbm9yZWQpOworICAgICAgICBtX3NjcmlwdFByb2ZpbGVyQWdl
bnQtPnN0b3BUcmFja2luZygpOwogCiAgICAgaWYgKG1fZGVidWdnZXJBZ2VudCkKLSAgICAgICAg
bV9kZWJ1Z2dlckFnZW50LT5zZXRCcmVha3BvaW50c0FjdGl2ZShpZ25vcmVkLCBtX3Byb2ZpbGVS
ZXN0b3JlQnJlYWtwb2ludEFjdGl2ZVZhbHVlKTsKKyAgICAgICAgbV9kZWJ1Z2dlckFnZW50LT5z
ZXRCcmVha3BvaW50c0FjdGl2ZShtX3Byb2ZpbGVSZXN0b3JlQnJlYWtwb2ludEFjdGl2ZVZhbHVl
KTsKIH0KIAogdm9pZCBKU0dsb2JhbE9iamVjdENvbnNvbGVDbGllbnQ6OnRha2VIZWFwU25hcHNo
b3QoSlNDOjpKU0dsb2JhbE9iamVjdCosIGNvbnN0IFN0cmluZyYgdGl0bGUpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTR2xvYmFsT2JqZWN0SW5zcGVjdG9y
Q29udHJvbGxlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTR2xvYmFs
T2JqZWN0SW5zcGVjdG9yQ29udHJvbGxlci5jcHAKaW5kZXggZDRkYjU2M2ViZDc2NTMyNjYwNGY1
MTJjMzFlOWRiMjg2ZDEwODNmNC4uYTYwZjI1ZDQzN2ZiZTlmZGZjZTZiYTU4ZDNlODJjMjZkZDU2
ZDYzZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0dsb2Jh
bE9iamVjdEluc3BlY3RvckNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3IvSlNHbG9iYWxPYmplY3RJbnNwZWN0b3JDb250cm9sbGVyLmNwcApAQCAtMjMx
LDkgKzIzMSw4IEBAIHZvaWQgSlNHbG9iYWxPYmplY3RJbnNwZWN0b3JDb250cm9sbGVyOjpmcm9u
dGVuZEluaXRpYWxpemVkKCkKICAgICBpZiAobV9wYXVzZUFmdGVySW5pdGlhbGl6YXRpb24pIHsK
ICAgICAgICAgbV9wYXVzZUFmdGVySW5pdGlhbGl6YXRpb24gPSBmYWxzZTsKIAotICAgICAgICBF
cnJvclN0cmluZyBpZ25vcmVkOwotICAgICAgICBlbnN1cmVEZWJ1Z2dlckFnZW50KCkuZW5hYmxl
KGlnbm9yZWQpOwotICAgICAgICBlbnN1cmVEZWJ1Z2dlckFnZW50KCkucGF1c2UoaWdub3JlZCk7
CisgICAgICAgIGVuc3VyZURlYnVnZ2VyQWdlbnQoKS5lbmFibGUoKTsKKyAgICAgICAgZW5zdXJl
RGVidWdnZXJBZ2VudCgpLnBhdXNlKCk7CiAgICAgfQogCiAjaWYgRU5BQkxFKFJFTU9URV9JTlNQ
RUNUT1IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50
cy9JbnNwZWN0b3JBZ2VudC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2Fn
ZW50cy9JbnNwZWN0b3JBZ2VudC5jcHAKaW5kZXggNWI5YTcxNTQwODUwODY0MWNhMDYxYWVjZjhm
MDExODQ2ZjcxMDQ0OC4uODY4NmQ2OTQxYjc4NDc5OTViMmRmZmRkNjc4YjY2ZDNiNDgxZGRiNSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVj
dG9yQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRz
L0luc3BlY3RvckFnZW50LmNwcApAQCAtNTQsNDQgKzU0LDQ5IEBAIHZvaWQgSW5zcGVjdG9yQWdl
bnQ6OndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKERpc2Nvbm5lY3RSZWFzb24pCiB7CiAg
ICAgbV9wZW5kaW5nRXZhbHVhdGVUZXN0Q29tbWFuZHMuY2xlYXIoKTsKIAotICAgIEVycm9yU3Ry
aW5nIGlnbm9yZWQ7Ci0gICAgZGlzYWJsZShpZ25vcmVkKTsKKyAgICBkaXNhYmxlKCk7CiB9CiAK
LXZvaWQgSW5zcGVjdG9yQWdlbnQ6OmVuYWJsZShFcnJvclN0cmluZyYpCitQcm90b2NvbDo6RXJy
b3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JBZ2VudDo6ZW5hYmxlKCkKIHsKICAgICBtX2VuYWJs
ZWQgPSB0cnVlOwogCiAgICAgaWYgKG1fcGVuZGluZ0luc3BlY3REYXRhLmZpcnN0KQotICAgICAg
ICBpbnNwZWN0KG1fcGVuZGluZ0luc3BlY3REYXRhLmZpcnN0LmNvcHlSZWYoKSwgbV9wZW5kaW5n
SW5zcGVjdERhdGEuc2Vjb25kLmNvcHlSZWYoKSk7CisgICAgICAgIGluc3BlY3QobV9wZW5kaW5n
SW5zcGVjdERhdGEuZmlyc3QucmVsZWFzZU5vbk51bGwoKSwgbV9wZW5kaW5nSW5zcGVjdERhdGEu
c2Vjb25kLnJlbGVhc2VOb25OdWxsKCkpOwogCiAgICAgZm9yIChhdXRvJiB0ZXN0Q29tbWFuZCA6
IG1fcGVuZGluZ0V2YWx1YXRlVGVzdENvbW1hbmRzKQogICAgICAgICBtX2Zyb250ZW5kRGlzcGF0
Y2hlci0+ZXZhbHVhdGVGb3JUZXN0SW5Gcm9udGVuZCh0ZXN0Q29tbWFuZCk7CiAKICAgICBtX3Bl
bmRpbmdFdmFsdWF0ZVRlc3RDb21tYW5kcy5jbGVhcigpOworCisgICAgcmV0dXJuIHsgfTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JBZ2VudDo6ZGlzYWJsZShFcnJvclN0cmluZyYpCitQcm90b2NvbDo6
RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JBZ2VudDo6ZGlzYWJsZSgpCiB7CiAgICAgbV9l
bmFibGVkID0gZmFsc2U7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckFn
ZW50Ojppbml0aWFsaXplZChFcnJvclN0cmluZyYpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2
b2lkPiBJbnNwZWN0b3JBZ2VudDo6aW5pdGlhbGl6ZWQoKQogewogICAgIG1fZW52aXJvbm1lbnQu
ZnJvbnRlbmRJbml0aWFsaXplZCgpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNw
ZWN0b3JBZ2VudDo6aW5zcGVjdChSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVj
dD4mJiBvYmplY3RUb0luc3BlY3QsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgaGludHMpCit2b2lk
IEluc3BlY3RvckFnZW50OjppbnNwZWN0KFJlZjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2Jq
ZWN0PiYmIG9iamVjdCwgUmVmPEpTT046Ok9iamVjdD4mJiBoaW50cykKIHsKICAgICBpZiAobV9l
bmFibGVkKSB7Ci0gICAgICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5pbnNwZWN0KG9iamVjdFRv
SW5zcGVjdCwgaGludHMpOworICAgICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+aW5zcGVjdChX
VEZNb3ZlKG9iamVjdCksIFdURk1vdmUoaGludHMpKTsKICAgICAgICAgbV9wZW5kaW5nSW5zcGVj
dERhdGEuZmlyc3QgPSBudWxscHRyOwogICAgICAgICBtX3BlbmRpbmdJbnNwZWN0RGF0YS5zZWNv
bmQgPSBudWxscHRyOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbV9wZW5kaW5nSW5z
cGVjdERhdGEuZmlyc3QgPSBvYmplY3RUb0luc3BlY3Q7Ci0gICAgbV9wZW5kaW5nSW5zcGVjdERh
dGEuc2Vjb25kID0gaGludHM7CisgICAgbV9wZW5kaW5nSW5zcGVjdERhdGEuZmlyc3QgPSBXVEZN
b3ZlKG9iamVjdCk7CisgICAgbV9wZW5kaW5nSW5zcGVjdERhdGEuc2Vjb25kID0gV1RGTW92ZSho
aW50cyk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQWdlbnQ6OmV2YWx1YXRlRm9yVGVzdEluRnJvbnRl
bmQoY29uc3QgU3RyaW5nJiBzY3JpcHQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBZ2VudC5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQWdlbnQuaAppbmRleCA4NThjNjlhYzJlYjg2
ZGMxODI4YTJmM2UxMjY3MTU4MDllODlmMzVhLi41OTRjZWU3MTc0MDYwNTk5Yzg5OTM2ZDBjMjcz
NmExNTNhYTI3M2Q0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L2FnZW50cy9JbnNwZWN0b3JBZ2VudC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3IvYWdlbnRzL0luc3BlY3RvckFnZW50LmgKQEAgLTQwLDI2ICs0MCwyNCBAQCBuYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKIGNsYXNzIEJhY2tlbmREaXNwYXRjaGVyOwogY2xhc3MgSW5zcGVjdG9y
RW52aXJvbm1lbnQ7CiAKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCiBjbGFzcyBKU19F
WFBPUlRfUFJJVkFURSBJbnNwZWN0b3JBZ2VudCBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3JBZ2Vu
dEJhc2UsIHB1YmxpYyBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewogICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKEluc3BlY3RvckFnZW50KTsKICAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKIHB1YmxpYzoKICAgICBJbnNwZWN0b3JBZ2VudChBZ2VudENvbnRleHQmKTsKLSAg
ICB+SW5zcGVjdG9yQWdlbnQoKSBmaW5hbDsKKyAgICB+SW5zcGVjdG9yQWdlbnQoKTsKIAogICAg
IC8vIEluc3BlY3RvckFnZW50QmFzZQotICAgIHZvaWQgZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNr
ZW5kKEZyb250ZW5kUm91dGVyKiwgQmFja2VuZERpc3BhdGNoZXIqKSBmaW5hbDsKLSAgICB2b2lk
IHdpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKERpc2Nvbm5lY3RSZWFzb24pIGZpbmFsOwor
ICAgIHZvaWQgZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEZyb250ZW5kUm91dGVyKiwgQmFj
a2VuZERpc3BhdGNoZXIqKTsKKyAgICB2b2lkIHdpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5k
KERpc2Nvbm5lY3RSZWFzb24pOwogCiAgICAgLy8gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyCi0gICAgdm9pZCBlbmFibGUoRXJyb3JTdHJpbmcmKSBmaW5hbDsKLSAgICB2b2lkIGRp
c2FibGUoRXJyb3JTdHJpbmcmKSBmaW5hbDsKLSAgICB2b2lkIGluaXRpYWxpemVkKEVycm9yU3Ry
aW5nJikgZmluYWw7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZW5hYmxlKCk7
CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZGlzYWJsZSgpOworICAgIFByb3Rv
Y29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGluaXRpYWxpemVkKCk7CiAKICAgICAvLyBDb21tYW5k
TGluZUFQSQotICAgIHZvaWQgaW5zcGVjdChSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90
ZU9iamVjdD4mJiBvYmplY3RUb0luc3BlY3QsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgaGludHMp
OworICAgIHZvaWQgaW5zcGVjdChSZWY8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4m
JiwgUmVmPEpTT046Ok9iamVjdD4mJiBoaW50cyk7CiAKICAgICB2b2lkIGV2YWx1YXRlRm9yVGVz
dEluRnJvbnRlbmQoY29uc3QgU3RyaW5nJiBzY3JpcHQpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBdWRpdEFnZW50LmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckF1ZGl0QWdl
bnQuY3BwCmluZGV4IDAwYjFlY2MxYWY0ODA3MGVmZWRjNzY2YTNiYTZmZjViNmY0YmE3MDAuLjJm
OWY4ZjA1OWNiMTM5MTNhZmEzMGY2NDk3N2UwMzNiNTM0Yzk0OTMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckF1ZGl0QWdlbnQuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckF1
ZGl0QWdlbnQuY3BwCkBAIC01Nyw0MSArNTcsNDEgQEAgdm9pZCBJbnNwZWN0b3JBdWRpdEFnZW50
Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChEaXNjb25uZWN0UmVhc29uKQogewogfQog
Ci12b2lkIEluc3BlY3RvckF1ZGl0QWdlbnQ6OnNldHVwKEVycm9yU3RyaW5nJiBlcnJvclN0cmlu
ZywgY29uc3QgaW50KiBleGVjdXRpb25Db250ZXh0SWQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdP
cjx2b2lkPiBJbnNwZWN0b3JBdWRpdEFnZW50OjpzZXR1cChPcHRpb25hbDxQcm90b2NvbDo6UnVu
dGltZTo6RXhlY3V0aW9uQ29udGV4dElkPiYmIGV4ZWN1dGlvbkNvbnRleHRJZCkKIHsKLSAgICBp
ZiAoaGFzQWN0aXZlQXVkaXQoKSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJNdXN0IGNhbGwg
dGVhcmRvd24gYmVmb3JlIGNhbGxpbmcgc2V0dXAgYWdhaW4iX3M7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOwogCi0gICAgSW5q
ZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHQgPSBpbmplY3RlZFNjcmlwdEZvckV2YWwoZXJyb3JT
dHJpbmcsIGV4ZWN1dGlvbkNvbnRleHRJZCk7CisgICAgaWYgKGhhc0FjdGl2ZUF1ZGl0KCkpCisg
ICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTXVzdCBjYWxsIHRlYXJkb3duIGJlZm9yZSBj
YWxsaW5nIHNldHVwIGFnYWluIl9zKTsKKworICAgIEluamVjdGVkU2NyaXB0IGluamVjdGVkU2Ny
aXB0ID0gaW5qZWN0ZWRTY3JpcHRGb3JFdmFsKGVycm9yU3RyaW5nLCBXVEZNb3ZlKGV4ZWN1dGlv
bkNvbnRleHRJZCkpOwogICAgIGlmIChpbmplY3RlZFNjcmlwdC5oYXNOb1ZhbHVlKCkpCi0gICAg
ICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsK
IAogICAgIEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGluamVjdGVkU2NyaXB0
Lmdsb2JhbE9iamVjdCgpOwotICAgIGlmICghZ2xvYmFsT2JqZWN0KSB7Ci0gICAgICAgIGVycm9y
U3RyaW5nID0gIk1pc3NpbmcgZXhlY3V0aW9uIHN0YXRlIG9mIGluamVjdGVkIHNjcmlwdCBmb3Ig
Z2l2ZW4gZXhlY3V0aW9uQ29udGV4dElkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAg
IGlmICghZ2xvYmFsT2JqZWN0KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk1pc3Np
bmcgZXhlY3V0aW9uIHN0YXRlIG9mIGluamVjdGVkIHNjcmlwdCBmb3IgZ2l2ZW4gZXhlY3V0aW9u
Q29udGV4dElkIl9zKTsKIAogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKIAogICAg
IEpTQzo6SlNMb2NrSG9sZGVyIGxvY2soZ2xvYmFsT2JqZWN0KTsKIAogICAgIG1faW5qZWN0ZWRX
ZWJJbnNwZWN0b3JBdWRpdFZhbHVlLnNldCh2bSwgY29uc3RydWN0RW1wdHlPYmplY3QoZ2xvYmFs
T2JqZWN0KSk7Ci0gICAgaWYgKCFtX2luamVjdGVkV2ViSW5zcGVjdG9yQXVkaXRWYWx1ZSkgewot
ICAgICAgICBlcnJvclN0cmluZyA9ICJVbmFibGUgdG8gY29uc3RydWN0IGluamVjdGVkIFdlYklu
c3BlY3RvckF1ZGl0IG9iamVjdC4iX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYg
KCFtX2luamVjdGVkV2ViSW5zcGVjdG9yQXVkaXRWYWx1ZSkKKyAgICAgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKCJVbmFibGUgdG8gY29uc3RydWN0IGluamVjdGVkIFdlYkluc3BlY3RvckF1ZGl0
IG9iamVjdC4iX3MpOwogCiAgICAgcG9wdWxhdGVBdWRpdE9iamVjdChnbG9iYWxPYmplY3QsIG1f
aW5qZWN0ZWRXZWJJbnNwZWN0b3JBdWRpdFZhbHVlKTsKKworICAgIHJldHVybiB7IH07CiB9CiAK
LXZvaWQgSW5zcGVjdG9yQXVkaXRBZ2VudDo6cnVuKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywg
Y29uc3QgU3RyaW5nJiB0ZXN0LCBjb25zdCBpbnQqIGV4ZWN1dGlvbkNvbnRleHRJZCwgUmVmUHRy
PFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiByZXN1bHQsIE9wdGlvbmFsPGJvb2w+
JiB3YXNUaHJvd24pCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxzdGQ6OnR1cGxlPFJlZjxQcm90
b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiwgT3B0aW9uYWw8Ym9vbD4gLyogd2FzVGhyb3du
ICovPj4gSW5zcGVjdG9yQXVkaXRBZ2VudDo6cnVuKGNvbnN0IFN0cmluZyYgdGVzdCwgT3B0aW9u
YWw8UHJvdG9jb2w6OlJ1bnRpbWU6OkV4ZWN1dGlvbkNvbnRleHRJZD4mJiBleGVjdXRpb25Db250
ZXh0SWQpCiB7Ci0gICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHQgPSBpbmplY3RlZFNj
cmlwdEZvckV2YWwoZXJyb3JTdHJpbmcsIGV4ZWN1dGlvbkNvbnRleHRJZCk7CisgICAgUHJvdG9j
b2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCisgICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0
ZWRTY3JpcHQgPSBpbmplY3RlZFNjcmlwdEZvckV2YWwoZXJyb3JTdHJpbmcsIFdURk1vdmUoZXhl
Y3V0aW9uQ29udGV4dElkKSk7CiAgICAgaWYgKGluamVjdGVkU2NyaXB0Lmhhc05vVmFsdWUoKSkK
LSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJp
bmcpOwogCiAgICAgU3RyaW5nQnVpbGRlciBmdW5jdGlvblN0cmluZzsKICAgICBmdW5jdGlvblN0
cmluZy5hcHBlbmRMaXRlcmFsKCIoZnVuY3Rpb24oV2ViSW5zcGVjdG9yQXVkaXQpIHsgXCJ1c2Ug
c3RyaWN0XCI7IHJldHVybiBldmFsKGAoIik7CkBAIC0xMDMsNiArMTAzLDggQEAgdm9pZCBJbnNw
ZWN0b3JBdWRpdEFnZW50OjpydW4oRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJp
bmcmIHRlc3QsIGNvbnMKICAgICBpZiAobV9pbmplY3RlZFdlYkluc3BlY3RvckF1ZGl0VmFsdWUp
CiAgICAgICAgIG9wdGlvbnMuYXJncyA9IHsgbV9pbmplY3RlZFdlYkluc3BlY3RvckF1ZGl0VmFs
dWUuZ2V0KCkgfTsKIAorICAgIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0
PiByZXN1bHQ7CisgICAgT3B0aW9uYWw8Ym9vbD4gd2FzVGhyb3duOwogICAgIE9wdGlvbmFsPGlu
dD4gc2F2ZWRSZXN1bHRJbmRleDsKIAogICAgIEpTQzo6RGVidWdnZXI6OlRlbXBvcmFyaWx5RGlz
YWJsZUV4Y2VwdGlvbkJyZWFrcG9pbnRzIHRlbXBvcmFyaWx5RGlzYWJsZUV4Y2VwdGlvbkJyZWFr
cG9pbnRzKG1fZGVidWdnZXIpOwpAQCAtMTEzLDE2ICsxMTUsMjEgQEAgdm9pZCBJbnNwZWN0b3JB
dWRpdEFnZW50OjpydW4oRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHRl
c3QsIGNvbnMKICAgICBpbmplY3RlZFNjcmlwdC5leGVjdXRlKGVycm9yU3RyaW5nLCBmdW5jdGlv
blN0cmluZy50b1N0cmluZygpLCBXVEZNb3ZlKG9wdGlvbnMpLCByZXN1bHQsIHdhc1Rocm93biwg
c2F2ZWRSZXN1bHRJbmRleCk7CiAKICAgICB1bm11dGVDb25zb2xlKCk7CisKKyAgICBpZiAoIXJl
c3VsdCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKKworICAg
IHJldHVybiB7IHsgcmVzdWx0LnJlbGVhc2VOb25OdWxsKCksIFdURk1vdmUod2FzVGhyb3duKSB9
IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yQXVkaXRBZ2VudDo6dGVhcmRvd24oRXJyb3JTdHJpbmcm
IGVycm9yU3RyaW5nKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yQXVk
aXRBZ2VudDo6dGVhcmRvd24oKQogewotICAgIGlmICghaGFzQWN0aXZlQXVkaXQoKSkgewotICAg
ICAgICBlcnJvclN0cmluZyA9ICJNdXN0IGNhbGwgc2V0dXAgYmVmb3JlIGNhbGxpbmcgdGVhcmRv
d24iX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKCFoYXNBY3RpdmVBdWRpdCgp
KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk11c3QgY2FsbCBzZXR1cCBiZWZvcmUg
Y2FsbGluZyB0ZWFyZG93biJfcyk7CiAKICAgICBtX2luamVjdGVkV2ViSW5zcGVjdG9yQXVkaXRW
YWx1ZS5jbGVhcigpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAogYm9vbCBJbnNwZWN0b3JBdWRp
dEFnZW50OjpoYXNBY3RpdmVBdWRpdCgpIGNvbnN0CkBAIC0xMzksNyArMTQ2LDcgQEAgdm9pZCBJ
bnNwZWN0b3JBdWRpdEFnZW50Ojpwb3B1bGF0ZUF1ZGl0T2JqZWN0KEpTQzo6SlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwKICAgICBKU0M6OlZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsK
ICAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKHZtKTsKIAotICAgIGF1ZGl0T2JqZWN0LT5wdXRE
aXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIlZlcnNpb24iKSwgSlND
OjpKU1ZhbHVlKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1ZGl0OjpWRVJTSU9OKSk7CisgICAgYXVk
aXRPYmplY3QtPnB1dERpcmVjdCh2bSwgSlNDOjpJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAi
VmVyc2lvbiIpLCBKU0M6OkpTVmFsdWUoUHJvdG9jb2w6OkF1ZGl0OjpWRVJTSU9OKSk7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQXVkaXRBZ2VudC5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQXVkaXRBZ2VudC5oCmluZGV4IDVi
NmQ4YWFiNzIyNjNmMThhYTY0MTA3ODVjMDFjOWJhOGM0ZDMwZjguLmJmNTA2YzM2ZDJkZmYzZjZm
Y2E1OTlmNjdlNTg1NGEyNjhhN2IxZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckF1ZGl0QWdlbnQuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBdWRpdEFnZW50LmgKQEAgLTQw
LDcgKzQwLDYgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKIGNsYXNzIEluamVjdGVkU2NyaXB0
OwogY2xhc3MgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOwotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJp
bmc7CiAKIGNsYXNzIEpTX0VYUE9SVF9QUklWQVRFIEluc3BlY3RvckF1ZGl0QWdlbnQgOiBwdWJs
aWMgSW5zcGVjdG9yQWdlbnRCYXNlLCBwdWJsaWMgQXVkaXRCYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXIgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEluc3BlY3RvckF1ZGl0QWdlbnQpOwpAQCAt
NTMsOSArNTIsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCB3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFj
a2VuZChEaXNjb25uZWN0UmVhc29uKSBmaW5hbDsKIAogICAgIC8vIEF1ZGl0QmFja2VuZERpc3Bh
dGNoZXJIYW5kbGVyCi0gICAgdm9pZCBzZXR1cChFcnJvclN0cmluZyYsIGNvbnN0IGludCogZXhl
Y3V0aW9uQ29udGV4dElkKSBmaW5hbDsKLSAgICB2b2lkIHJ1bihFcnJvclN0cmluZyYsIGNvbnN0
IFN0cmluZyYgdGVzdCwgY29uc3QgaW50KiBleGVjdXRpb25Db250ZXh0SWQsIFJlZlB0cjxQcm90
b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0LCBPcHRpb25hbDxib29sPiYgd2Fz
VGhyb3duKSBmaW5hbDsKLSAgICB2b2lkIHRlYXJkb3duKEVycm9yU3RyaW5nJikgZmluYWw7Cisg
ICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc2V0dXAoT3B0aW9uYWw8UHJvdG9jb2w6
OlJ1bnRpbWU6OkV4ZWN1dGlvbkNvbnRleHRJZD4mJikgZmluYWw7CisgICAgUHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8c3RkOjp0dXBsZTxSZWY8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVj
dD4sIE9wdGlvbmFsPGJvb2w+IC8qIHdhc1Rocm93biAqLz4+IHJ1bihjb25zdCBTdHJpbmcmIHRl
c3QsIE9wdGlvbmFsPFByb3RvY29sOjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0SWQ+JiYpIGZp
bmFsOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHRlYXJkb3duKCkgZmluYWw7
CiAKICAgICBib29sIGhhc0FjdGl2ZUF1ZGl0KCkgY29uc3Q7CiAKQEAgLTY0LDcgKzYzLDcgQEAg
cHJvdGVjdGVkOgogCiAgICAgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyJiBpbmplY3RlZFNjcmlwdE1h
bmFnZXIoKSB7IHJldHVybiBtX2luamVjdGVkU2NyaXB0TWFuYWdlcjsgfQogCi0gICAgdmlydHVh
bCBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdEZvckV2YWwoRXJyb3JTdHJpbmcmLCBjb25z
dCBpbnQqIGV4ZWN1dGlvbkNvbnRleHRJZCkgPSAwOworICAgIHZpcnR1YWwgSW5qZWN0ZWRTY3Jp
cHQgaW5qZWN0ZWRTY3JpcHRGb3JFdmFsKFByb3RvY29sOjpFcnJvclN0cmluZyYsIE9wdGlvbmFs
PFByb3RvY29sOjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0SWQ+JiYpID0gMDsKIAogICAgIHZp
cnR1YWwgdm9pZCBwb3B1bGF0ZUF1ZGl0T2JqZWN0KEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6
OlN0cm9uZzxKU0M6OkpTT2JqZWN0PiYgYXVkaXRPYmplY3QpOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDb25zb2xlQWdlbnQu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ29u
c29sZUFnZW50LmNwcAppbmRleCAxMDVmZTZmYzZjMjIwOGVmNzYzNzFlYWVkZGJmYTQ3MzFmYmZi
NjU0Li4xM2I2MjM0ZDFmNTMyODUwZTMwMDUyNzk3M2MyMTViNzJlMzZhZTE3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDb25zb2xl
QWdlbnQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0lu
c3BlY3RvckNvbnNvbGVBZ2VudC5jcHAKQEAgLTUzLDggKzUzLDcgQEAgdm9pZCBJbnNwZWN0b3JD
b25zb2xlQWdlbnQ6OmRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChGcm9udGVuZFJvdXRlcios
IEJhY2tlbmQKIAogdm9pZCBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OndpbGxEZXN0cm95RnJvbnRl
bmRBbmRCYWNrZW5kKERpc2Nvbm5lY3RSZWFzb24pCiB7Ci0gICAgU3RyaW5nIGVycm9yU3RyaW5n
OwotICAgIGRpc2FibGUoZXJyb3JTdHJpbmcpOworICAgIGRpc2FibGUoKTsKIH0KIAogdm9pZCBJ
bnNwZWN0b3JDb25zb2xlQWdlbnQ6OmRpc2NhcmRWYWx1ZXMoKQpAQCAtNjMsMTAgKzYyLDEwIEBA
IHZvaWQgSW5zcGVjdG9yQ29uc29sZUFnZW50OjpkaXNjYXJkVmFsdWVzKCkKICAgICBtX2V4cGly
ZWRDb25zb2xlTWVzc2FnZUNvdW50ID0gMDsKIH0KIAotdm9pZCBJbnNwZWN0b3JDb25zb2xlQWdl
bnQ6OmVuYWJsZShFcnJvclN0cmluZyYpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJ
bnNwZWN0b3JDb25zb2xlQWdlbnQ6OmVuYWJsZSgpCiB7CiAgICAgaWYgKG1fZW5hYmxlZCkKLSAg
ICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4geyB9OwogCiAgICAgbV9lbmFibGVkID0gdHJ1
ZTsKIApAQCAtODAsMTcgKzc5LDIxIEBAIHZvaWQgSW5zcGVjdG9yQ29uc29sZUFnZW50OjplbmFi
bGUoRXJyb3JTdHJpbmcmKQogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtZXNzYWdlcy5z
aXplKCk7ICsraSkKICAgICAgICAgbWVzc2FnZXNbaV0tPmFkZFRvRnJvbnRlbmQoKm1fZnJvbnRl
bmREaXNwYXRjaGVyLCBtX2luamVjdGVkU2NyaXB0TWFuYWdlciwgZmFsc2UpOworCisgICAgcmV0
dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OmRpc2FibGUoRXJyb3JT
dHJpbmcmKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yQ29uc29sZUFn
ZW50OjpkaXNhYmxlKCkKIHsKICAgICBpZiAoIW1fZW5hYmxlZCkKLSAgICAgICAgcmV0dXJuOwor
ICAgICAgICByZXR1cm4geyB9OwogCiAgICAgbV9lbmFibGVkID0gZmFsc2U7CisKKyAgICByZXR1
cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckNvbnNvbGVBZ2VudDo6Y2xlYXJNZXNzYWdlcyhF
cnJvclN0cmluZyYpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JDb25z
b2xlQWdlbnQ6OmNsZWFyTWVzc2FnZXMoKQogewogICAgIG1fY29uc29sZU1lc3NhZ2VzLmNsZWFy
KCk7CiAgICAgbV9leHBpcmVkQ29uc29sZU1lc3NhZ2VDb3VudCA9IDA7CkBAIC05OSw2ICsxMDIs
OCBAQCB2b2lkIEluc3BlY3RvckNvbnNvbGVBZ2VudDo6Y2xlYXJNZXNzYWdlcyhFcnJvclN0cmlu
ZyYpCiAKICAgICBpZiAobV9lbmFibGVkKQogICAgICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+
bWVzc2FnZXNDbGVhcmVkKCk7CisKKyAgICByZXR1cm4geyB9OwogfQogCiBib29sIEluc3BlY3Rv
ckNvbnNvbGVBZ2VudDo6ZGV2ZWxvcGVyRXh0cmFzRW5hYmxlZCgpIGNvbnN0CkBAIC0xMDgsOCAr
MTEzLDcgQEAgYm9vbCBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OmRldmVsb3BlckV4dHJhc0VuYWJs
ZWQoKSBjb25zdAogCiB2b2lkIEluc3BlY3RvckNvbnNvbGVBZ2VudDo6cmVzZXQoKQogewotICAg
IEVycm9yU3RyaW5nIGlnbm9yZWQ7Ci0gICAgY2xlYXJNZXNzYWdlcyhpZ25vcmVkKTsKKyAgICBj
bGVhck1lc3NhZ2VzKCk7CiAKICAgICBtX3RpbWVzLmNsZWFyKCk7CiAgICAgbV9jb3VudHMuY2xl
YXIoKTsKQEAgLTExNywxMCArMTIxLDggQEAgdm9pZCBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OnJl
c2V0KCkKIAogdm9pZCBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OmFkZE1lc3NhZ2VUb0NvbnNvbGUo
c3RkOjp1bmlxdWVfcHRyPENvbnNvbGVNZXNzYWdlPiBtZXNzYWdlKQogewotICAgIGlmIChtZXNz
YWdlLT50eXBlKCkgPT0gTWVzc2FnZVR5cGU6OkNsZWFyKSB7Ci0gICAgICAgIEVycm9yU3RyaW5n
IGlnbm9yZWQ7Ci0gICAgICAgIGNsZWFyTWVzc2FnZXMoaWdub3JlZCk7Ci0gICAgfQorICAgIGlm
IChtZXNzYWdlLT50eXBlKCkgPT0gTWVzc2FnZVR5cGU6OkNsZWFyKQorICAgICAgICBjbGVhck1l
c3NhZ2VzKCk7CiAKICAgICBhZGRDb25zb2xlTWVzc2FnZShXVEZNb3ZlKG1lc3NhZ2UpKTsKIH0K
QEAgLTE5MSwxMiArMTkzLDEyIEBAIHZvaWQgSW5zcGVjdG9yQ29uc29sZUFnZW50Ojp0YWtlSGVh
cFNuYXBzaG90KGNvbnN0IFN0cmluZyYgdGl0bGUpCiAgICAgaWYgKCFtX2hlYXBBZ2VudCkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgRXJyb3JTdHJpbmcgaWdub3JlZDsKLSAgICBkb3VibGUgdGlt
ZXN0YW1wOwotICAgIFN0cmluZyBzbmFwc2hvdERhdGE7Ci0gICAgbV9oZWFwQWdlbnQtPnNuYXBz
aG90KGlnbm9yZWQsICZ0aW1lc3RhbXAsICZzbmFwc2hvdERhdGEpOworICAgIGF1dG8gcmVzdWx0
ID0gbV9oZWFwQWdlbnQtPnNuYXBzaG90KCk7CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJl
dHVybjsKIAotICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5oZWFwU25hcHNob3QodGltZXN0YW1w
LCBzbmFwc2hvdERhdGEsIHRpdGxlLmlzRW1wdHkoKSA/IG51bGxwdHIgOiAmdGl0bGUpOworICAg
IGF1dG8gW3RpbWVzdGFtcCwgc25hcHNob3REYXRhXSA9IFdURk1vdmUocmVzdWx0LnZhbHVlKCkp
OworICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5oZWFwU25hcHNob3QodGltZXN0YW1wLCBzbmFw
c2hvdERhdGEsIHRpdGxlKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OmNvdW50
KEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgU3RyaW5nJiBsYWJlbCkK
QEAgLTI1NiwxNSArMjU4LDE1IEBAIHZvaWQgSW5zcGVjdG9yQ29uc29sZUFnZW50OjphZGRDb25z
b2xlTWVzc2FnZShzdGQ6OnVuaXF1ZV9wdHI8Q29uc29sZU1lc3NhZ2U+IGNvCiAgICAgfQogfQog
Ci12b2lkIEluc3BlY3RvckNvbnNvbGVBZ2VudDo6Z2V0TG9nZ2luZ0NoYW5uZWxzKEVycm9yU3Ry
aW5nJiwgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWw+PiYg
Y2hhbm5lbHMpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SlNPTjo6QXJyYXlPZjxQcm90
b2NvbDo6Q29uc29sZTo6Q2hhbm5lbD4+PiBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OmdldExvZ2dp
bmdDaGFubmVscygpCiB7CiAgICAgLy8gRGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBoYXMgbm8gbG9n
Z2luZyBjaGFubmVscy4KLSAgICBjaGFubmVscyA9IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkNv
bnNvbGU6OkNoYW5uZWw+OjpjcmVhdGUoKTsKKyAgICByZXR1cm4gSlNPTjo6QXJyYXlPZjxQcm90
b2NvbDo6Q29uc29sZTo6Q2hhbm5lbD46OmNyZWF0ZSgpOwogfQogCi12b2lkIEluc3BlY3RvckNv
bnNvbGVBZ2VudDo6c2V0TG9nZ2luZ0NoYW5uZWxMZXZlbChFcnJvclN0cmluZyYgZXJyb3JTdHJp
bmcsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdP
cjx2b2lkPiBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OnNldExvZ2dpbmdDaGFubmVsTGV2ZWwoUHJv
dG9jb2w6OkNvbnNvbGU6OkNoYW5uZWxTb3VyY2UsIFByb3RvY29sOjpDb25zb2xlOjpDaGFubmVs
TGV2ZWwpCiB7Ci0gICAgZXJyb3JTdHJpbmcgPSAiTm90IHN1cHBvcnRlZCJfczsKKyAgICByZXR1
cm4gbWFrZVVuZXhwZWN0ZWQoIk5vdCBzdXBwb3J0ZWQiX3MpOwogfQogCiB9IC8vIG5hbWVzcGFj
ZSBJbnNwZWN0b3IKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
YWdlbnRzL0luc3BlY3RvckNvbnNvbGVBZ2VudC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ29uc29sZUFnZW50LmgKaW5kZXggNzhjYWYxYWQwOGFl
NTdiMWUwNzg1YzlhZGQ1MTY3NTM2YWZiZjI5Ni4uZWQ4ZTFmNjk5YTVkMGM5MWNkMDU2NjkxYTdk
YjIxOTgwZjIzNWQyMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9hZ2VudHMvSW5zcGVjdG9yQ29uc29sZUFnZW50LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ29uc29sZUFnZW50LmgKQEAgLTQ2LDcgKzQ2
LDYgQEAgY2xhc3MgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOwogY2xhc3MgSW5zcGVjdG9ySGVhcEFn
ZW50OwogY2xhc3MgU2NyaXB0QXJndW1lbnRzOwogY2xhc3MgU2NyaXB0Q2FsbFN0YWNrOwotdHlw
ZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiAKIGNsYXNzIEpTX0VYUE9SVF9QUklWQVRFIEluc3Bl
Y3RvckNvbnNvbGVBZ2VudCA6IHB1YmxpYyBJbnNwZWN0b3JBZ2VudEJhc2UsIHB1YmxpYyBDb25z
b2xlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJ
bnNwZWN0b3JDb25zb2xlQWdlbnQpOwpAQCAtNjEsMTEgKzYwLDExIEBAIHB1YmxpYzoKICAgICB2
b2lkIGRpc2NhcmRWYWx1ZXMoKSBmaW5hbDsKIAogICAgIC8vIENvbnNvbGVCYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXIKLSAgICB2b2lkIGVuYWJsZShFcnJvclN0cmluZyYpIGZpbmFsOwotICAgIHZv
aWQgZGlzYWJsZShFcnJvclN0cmluZyYpIGZpbmFsOwotICAgIHZvaWQgY2xlYXJNZXNzYWdlcyhF
cnJvclN0cmluZyYpIG92ZXJyaWRlOwotICAgIHZvaWQgZ2V0TG9nZ2luZ0NoYW5uZWxzKEVycm9y
U3RyaW5nJiwgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWw+
PiYpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0TG9nZ2luZ0NoYW5uZWxMZXZlbChFcnJvclN0cmlu
ZyYsIGNvbnN0IFN0cmluZyYgY2hhbm5lbCwgY29uc3QgU3RyaW5nJiBsZXZlbCkgb3ZlcnJpZGU7
CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZW5hYmxlKCkgZmluYWw7CisgICAg
UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZGlzYWJsZSgpIGZpbmFsOworICAgIFByb3Rv
Y29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGNsZWFyTWVzc2FnZXMoKSBvdmVycmlkZTsKKyAgICBQ
cm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6Q29uc29s
ZTo6Q2hhbm5lbD4+PiBnZXRMb2dnaW5nQ2hhbm5lbHMoKSBvdmVycmlkZTsKKyAgICBQcm90b2Nv
bDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzZXRMb2dnaW5nQ2hhbm5lbExldmVsKFByb3RvY29sOjpD
b25zb2xlOjpDaGFubmVsU291cmNlLCBQcm90b2NvbDo6Q29uc29sZTo6Q2hhbm5lbExldmVsKSBv
dmVycmlkZTsKIAogICAgIHZvaWQgc2V0SGVhcEFnZW50KEluc3BlY3RvckhlYXBBZ2VudCogYWdl
bnQpIHsgbV9oZWFwQWdlbnQgPSBhZ2VudDsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRlYnVnZ2VyQWdl
bnQuY3BwCmluZGV4IDEzZmMyYzUzYjVhYzQ2NWU2ZTNkNjZhYmUwNTVjMGVlNmQ0ZGMwNzAuLjQx
ZjRiYTQyN2VhNGY3OWRjMTQ0N2ZlYTU5NjRhZDgwNjNjYmRmNzIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQuY3BwCkBAIC02NCwyNSArNjQsMjUgQEAgc3RhdGljIGJvb2wgaXNXZWJL
aXRJbmplY3RlZFNjcmlwdChjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCkKICAgICByZXR1cm4gc291
cmNlVVJMLnN0YXJ0c1dpdGgoIl9fSW5qZWN0ZWRTY3JpcHRfIikgJiYgc291cmNlVVJMLmVuZHNX
aXRoKCIuanMiKTsKIH0KIAotc3RhdGljIE9wdGlvbmFsPEpTQzo6QnJlYWtwb2ludDo6QWN0aW9u
OjpUeXBlPiBicmVha3BvaW50QWN0aW9uVHlwZUZvclN0cmluZyhFcnJvclN0cmluZyYgZXJyb3JT
dHJpbmcsIGNvbnN0IFN0cmluZyYgdHlwZVN0cmluZykKK3N0YXRpYyBPcHRpb25hbDxKU0M6OkJy
ZWFrcG9pbnQ6OkFjdGlvbjo6VHlwZT4gYnJlYWtwb2ludEFjdGlvblR5cGVGb3JTdHJpbmcoUHJv
dG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiB0eXBlU3RyaW5n
KQogewotICAgIGF1dG8gdHlwZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6Okluc3BlY3RvckhlbHBl
cnM6OnBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dl
cjo6QnJlYWtwb2ludEFjdGlvbjo6VHlwZT4odHlwZVN0cmluZyk7CisgICAgYXV0byB0eXBlID0g
UHJvdG9jb2w6OkhlbHBlcnM6OnBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxQcm90b2NvbDo6RGVi
dWdnZXI6OkJyZWFrcG9pbnRBY3Rpb246OlR5cGU+KHR5cGVTdHJpbmcpOwogICAgIGlmICghdHlw
ZSkgewogICAgICAgICBlcnJvclN0cmluZyA9IG1ha2VTdHJpbmcoIlVua25vd24gYnJlYWtwb2lu
dCBhY3Rpb24gdHlwZTogIl9zLCB0eXBlU3RyaW5nKTsKICAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKICAgICB9CiAKICAgICBzd2l0Y2ggKCp0eXBlKSB7Ci0gICAgY2FzZSBJbnNwZWN0b3I6
OlByb3RvY29sOjpEZWJ1Z2dlcjo6QnJlYWtwb2ludEFjdGlvbjo6VHlwZTo6TG9nOgorICAgIGNh
c2UgUHJvdG9jb2w6OkRlYnVnZ2VyOjpCcmVha3BvaW50QWN0aW9uOjpUeXBlOjpMb2c6CiAgICAg
ICAgIHJldHVybiBKU0M6OkJyZWFrcG9pbnQ6OkFjdGlvbjo6VHlwZTo6TG9nOwogCi0gICAgY2Fz
ZSBJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6QnJlYWtwb2ludEFjdGlvbjo6VHlwZTo6
RXZhbHVhdGU6CisgICAgY2FzZSBQcm90b2NvbDo6RGVidWdnZXI6OkJyZWFrcG9pbnRBY3Rpb246
OlR5cGU6OkV2YWx1YXRlOgogICAgICAgICByZXR1cm4gSlNDOjpCcmVha3BvaW50OjpBY3Rpb246
OlR5cGU6OkV2YWx1YXRlOwogCi0gICAgY2FzZSBJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dl
cjo6QnJlYWtwb2ludEFjdGlvbjo6VHlwZTo6U291bmQ6CisgICAgY2FzZSBQcm90b2NvbDo6RGVi
dWdnZXI6OkJyZWFrcG9pbnRBY3Rpb246OlR5cGU6OlNvdW5kOgogICAgICAgICByZXR1cm4gSlND
OjpCcmVha3BvaW50OjpBY3Rpb246OlR5cGU6OlNvdW5kOwogCi0gICAgY2FzZSBJbnNwZWN0b3I6
OlByb3RvY29sOjpEZWJ1Z2dlcjo6QnJlYWtwb2ludEFjdGlvbjo6VHlwZTo6UHJvYmU6CisgICAg
Y2FzZSBQcm90b2NvbDo6RGVidWdnZXI6OkJyZWFrcG9pbnRBY3Rpb246OlR5cGU6OlByb2JlOgog
ICAgICAgICByZXR1cm4gSlNDOjpCcmVha3BvaW50OjpBY3Rpb246OlR5cGU6OlByb2JlOwogICAg
IH0KIApAQCAtOTEsMzAgKzkxLDI5IEBAIHN0YXRpYyBPcHRpb25hbDxKU0M6OkJyZWFrcG9pbnQ6
OkFjdGlvbjo6VHlwZT4gYnJlYWtwb2ludEFjdGlvblR5cGVGb3JTdHJpbmcoRXJyCiB9CiAKIHRl
bXBsYXRlIDx0eXBlbmFtZSBUPgotc3RhdGljIFQgcGFyc2VCcmVha3BvaW50T3B0aW9ucyhFcnJv
clN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IEpTT046Ok9iamVjdCogb3B0aW9uc1BheWxvYWQs
IEZ1bmN0aW9uPFQoY29uc3QgU3RyaW5nJiwgSlNDOjpCcmVha3BvaW50OjpBY3Rpb25zVmVjdG9y
JiYsIGJvb2wsIHNpemVfdCk+IGNhbGxiYWNrKQorc3RhdGljIFQgcGFyc2VCcmVha3BvaW50T3B0
aW9ucyhQcm90b2NvbDo6RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiYmIG9wdGlvbnMsIEZ1bmN0aW9uPFQoY29uc3QgU3RyaW5nJiwgSlNDOjpCcmVha3BvaW50
OjpBY3Rpb25zVmVjdG9yJiYsIGJvb2wsIHNpemVfdCk+IGNhbGxiYWNrKQogewogICAgIFN0cmlu
ZyBjb25kaXRpb247CiAgICAgSlNDOjpCcmVha3BvaW50OjpBY3Rpb25zVmVjdG9yIGFjdGlvbnM7
CiAgICAgYm9vbCBhdXRvQ29udGludWUgPSBmYWxzZTsKICAgICBzaXplX3QgaWdub3JlQ291bnQg
PSAwOwogCi0gICAgaWYgKG9wdGlvbnNQYXlsb2FkKSB7Ci0gICAgICAgIG9wdGlvbnNQYXlsb2Fk
LT5nZXRTdHJpbmcoImNvbmRpdGlvbiJfcywgY29uZGl0aW9uKTsKKyAgICBpZiAob3B0aW9ucykg
eworICAgICAgICBjb25kaXRpb24gPSBvcHRpb25zLT5nZXRTdHJpbmcoUHJvdG9jb2w6OkRlYnVn
Z2VyOjpCcmVha3BvaW50T3B0aW9uczo6Y29uZGl0aW9uS2V5KTsKIAotICAgICAgICBSZWZQdHI8
SlNPTjo6QXJyYXk+IGFjdGlvbnNQYXlsb2FkOwotICAgICAgICBvcHRpb25zUGF5bG9hZC0+Z2V0
QXJyYXkoImFjdGlvbnMiX3MsIGFjdGlvbnNQYXlsb2FkKTsKKyAgICAgICAgYXV0byBhY3Rpb25z
UGF5bG9hZCA9IG9wdGlvbnMtPmdldEFycmF5KFByb3RvY29sOjpEZWJ1Z2dlcjo6QnJlYWtwb2lu
dE9wdGlvbnM6OmFjdGlvbnNLZXkpOwogICAgICAgICBpZiAoYXV0byBjb3VudCA9IGFjdGlvbnNQ
YXlsb2FkID8gYWN0aW9uc1BheWxvYWQtPmxlbmd0aCgpIDogMCkgewogICAgICAgICAgICAgYWN0
aW9ucy5yZXNlcnZlQ2FwYWNpdHkoY291bnQpOwogCiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewotICAgICAgICAgICAgICAgIFJlZlB0cjxKU09OOjpP
YmplY3Q+IGFjdGlvbk9iamVjdDsKLSAgICAgICAgICAgICAgICBpZiAoIWFjdGlvbnNQYXlsb2Fk
LT5nZXQoaSktPmFzT2JqZWN0KGFjdGlvbk9iamVjdCkpIHsKKyAgICAgICAgICAgICAgICBhdXRv
IGFjdGlvbk9iamVjdCA9IGFjdGlvbnNQYXlsb2FkLT5nZXQoaSktPmFzT2JqZWN0KCk7CisgICAg
ICAgICAgICAgICAgaWYgKCFhY3Rpb25PYmplY3QpIHsKICAgICAgICAgICAgICAgICAgICAgZXJy
b3JTdHJpbmcgPSAiVW5leHBlY3RlZCBub24tb2JqZWN0IGl0ZW0gaW4gZ2l2ZW4gYWN0aW9ucyJf
czsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgICAgICBTdHJpbmcgYWN0aW9uVHlwZVN0cmluZzsKLSAgICAgICAgICAgICAg
ICBpZiAoIWFjdGlvbk9iamVjdC0+Z2V0U3RyaW5nKCJ0eXBlIl9zLCBhY3Rpb25UeXBlU3RyaW5n
KSkgeworICAgICAgICAgICAgICAgIGF1dG8gYWN0aW9uVHlwZVN0cmluZyA9IGFjdGlvbk9iamVj
dC0+Z2V0U3RyaW5nKFByb3RvY29sOjpEZWJ1Z2dlcjo6QnJlYWtwb2ludEFjdGlvbjo6dHlwZUtl
eSk7CisgICAgICAgICAgICAgICAgaWYgKCFhY3Rpb25UeXBlU3RyaW5nKSB7CiAgICAgICAgICAg
ICAgICAgICAgIGVycm9yU3RyaW5nID0gIk1pc3NpbmcgdHlwZSBmb3IgaXRlbSBpbiBnaXZlbiBh
Y3Rpb25zIl9zOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4geyB9OwogICAgICAgICAgICAg
ICAgIH0KQEAgLTEyNSwzMyArMTI0LDMzIEBAIHN0YXRpYyBUIHBhcnNlQnJlYWtwb2ludE9wdGlv
bnMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBKU09OOjpPYmplY3QqIG9wCiAKICAg
ICAgICAgICAgICAgICBKU0M6OkJyZWFrcG9pbnQ6OkFjdGlvbiBhY3Rpb24oKmFjdGlvblR5cGUp
OwogCi0gICAgICAgICAgICAgICAgYWN0aW9uT2JqZWN0LT5nZXRTdHJpbmcoImRhdGEiX3MsIGFj
dGlvbi5kYXRhKTsKKyAgICAgICAgICAgICAgICBhY3Rpb24uZGF0YSA9IGFjdGlvbk9iamVjdC0+
Z2V0U3RyaW5nKFByb3RvY29sOjpEZWJ1Z2dlcjo6QnJlYWtwb2ludEFjdGlvbjo6ZGF0YUtleSk7
CiAKICAgICAgICAgICAgICAgICAvLyBTcGVjaWZ5aW5nIGFuIGlkZW50aWZpZXIgaXMgb3B0aW9u
YWwuIFRoZXkgYXJlIHVzZWQgdG8gY29ycmVsYXRlIHByb2JlIHNhbXBsZXMKICAgICAgICAgICAg
ICAgICAvLyBpbiB0aGUgZnJvbnRlbmQgYWNyb3NzIG11bHRpcGxlIGJhY2tlbmQgcHJvYmUgYWN0
aW9ucyBhbmQgc2VncmVnYXRlIG9iamVjdCBncm91cHMuCi0gICAgICAgICAgICAgICAgYWN0aW9u
T2JqZWN0LT5nZXRJbnRlZ2VyKCJpZCJfcywgYWN0aW9uLmlkKTsKKyAgICAgICAgICAgICAgICBh
Y3Rpb24uaWQgPSBhY3Rpb25PYmplY3QtPmdldEludGVnZXIoUHJvdG9jb2w6OkRlYnVnZ2VyOjpC
cmVha3BvaW50QWN0aW9uOjppZEtleSkudmFsdWVPcihKU0M6Om5vQnJlYWtwb2ludEFjdGlvbklE
KTsKIAogICAgICAgICAgICAgICAgIGFjdGlvbnMuYXBwZW5kKFdURk1vdmUoYWN0aW9uKSk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBvcHRpb25zUGF5bG9hZC0+Z2V0Qm9v
bGVhbigiYXV0b0NvbnRpbnVlIl9zLCBhdXRvQ29udGludWUpOwotICAgICAgICBvcHRpb25zUGF5
bG9hZC0+Z2V0SW50ZWdlcigiaWdub3JlQ291bnQiX3MsIGlnbm9yZUNvdW50KTsKKyAgICAgICAg
YXV0b0NvbnRpbnVlID0gb3B0aW9ucy0+Z2V0Qm9vbGVhbihQcm90b2NvbDo6RGVidWdnZXI6OkJy
ZWFrcG9pbnRPcHRpb25zOjphdXRvQ29udGludWVLZXkpLnZhbHVlT3IoZmFsc2UpOworICAgICAg
ICBpZ25vcmVDb3VudCA9IG9wdGlvbnMtPmdldEludGVnZXIoUHJvdG9jb2w6OkRlYnVnZ2VyOjpC
cmVha3BvaW50T3B0aW9uczo6aWdub3JlQ291bnRLZXkpLnZhbHVlT3IoMCk7CiAgICAgfQogCiAg
ICAgcmV0dXJuIGNhbGxiYWNrKGNvbmRpdGlvbiwgV1RGTW92ZShhY3Rpb25zKSwgYXV0b0NvbnRp
bnVlLCBpZ25vcmVDb3VudCk7CiB9CiAKLU9wdGlvbmFsPEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6
OlByb3RvY29sQnJlYWtwb2ludD4gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6UHJvdG9jb2xCcmVh
a3BvaW50Ojpmcm9tUGF5bG9hZChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIEpTQzo6U291cmNl
SUQgc291cmNlSUQsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIHVuc2lnbmVkIGNvbHVtbk51bWJlciwg
Y29uc3QgSlNPTjo6T2JqZWN0KiBvcHRpb25zUGF5bG9hZCkKK09wdGlvbmFsPEluc3BlY3RvckRl
YnVnZ2VyQWdlbnQ6OlByb3RvY29sQnJlYWtwb2ludD4gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6
UHJvdG9jb2xCcmVha3BvaW50Ojpmcm9tUGF5bG9hZChQcm90b2NvbDo6RXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBKU0M6OlNvdXJjZUlEIHNvdXJjZUlELCB1bnNpZ25lZCBsaW5lTnVtYmVyLCB1
bnNpZ25lZCBjb2x1bW5OdW1iZXIsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgb3B0aW9ucykKIHsK
LSAgICByZXR1cm4gcGFyc2VCcmVha3BvaW50T3B0aW9uczxPcHRpb25hbDxQcm90b2NvbEJyZWFr
cG9pbnQ+PihlcnJvclN0cmluZywgb3B0aW9uc1BheWxvYWQsIFsmXSAoY29uc3QgU3RyaW5nJiBj
b25kaXRpb24sIEpTQzo6QnJlYWtwb2ludDo6QWN0aW9uc1ZlY3RvciYmIGFjdGlvbnMsIGJvb2wg
YXV0b0NvbnRpbnVlLCBzaXplX3QgaWdub3JlQ291bnQpIC0+IE9wdGlvbmFsPFByb3RvY29sQnJl
YWtwb2ludD4geworICAgIHJldHVybiBwYXJzZUJyZWFrcG9pbnRPcHRpb25zPE9wdGlvbmFsPFBy
b3RvY29sQnJlYWtwb2ludD4+KGVycm9yU3RyaW5nLCBXVEZNb3ZlKG9wdGlvbnMpLCBbJl0gKGNv
bnN0IFN0cmluZyYgY29uZGl0aW9uLCBKU0M6OkJyZWFrcG9pbnQ6OkFjdGlvbnNWZWN0b3ImJiBh
Y3Rpb25zLCBib29sIGF1dG9Db250aW51ZSwgc2l6ZV90IGlnbm9yZUNvdW50KSAtPiBPcHRpb25h
bDxQcm90b2NvbEJyZWFrcG9pbnQ+IHsKICAgICAgICAgcmV0dXJuIFByb3RvY29sQnJlYWtwb2lu
dChzb3VyY2VJRCwgbGluZU51bWJlciwgY29sdW1uTnVtYmVyLCBjb25kaXRpb24sIFdURk1vdmUo
YWN0aW9ucyksIGF1dG9Db250aW51ZSwgaWdub3JlQ291bnQpOwogICAgIH0pOwogfQogCi1PcHRp
b25hbDxJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpQcm90b2NvbEJyZWFrcG9pbnQ+IEluc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQ6OlByb3RvY29sQnJlYWtwb2ludDo6ZnJvbVBheWxvYWQoRXJyb3JTdHJp
bmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHVybCwgYm9vbCBpc1JlZ2V4LCB1bnNpZ25l
ZCBsaW5lTnVtYmVyLCB1bnNpZ25lZCBjb2x1bW5OdW1iZXIsIGNvbnN0IEpTT046Ok9iamVjdCog
b3B0aW9uc1BheWxvYWQpCitPcHRpb25hbDxJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpQcm90b2Nv
bEJyZWFrcG9pbnQ+IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OlByb3RvY29sQnJlYWtwb2ludDo6
ZnJvbVBheWxvYWQoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3Ry
aW5nJiB1cmwsIGJvb2wgaXNSZWdleCwgdW5zaWduZWQgbGluZU51bWJlciwgdW5zaWduZWQgY29s
dW1uTnVtYmVyLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIG9wdGlvbnMpCiB7Ci0gICAgcmV0dXJu
IHBhcnNlQnJlYWtwb2ludE9wdGlvbnM8T3B0aW9uYWw8UHJvdG9jb2xCcmVha3BvaW50Pj4oZXJy
b3JTdHJpbmcsIG9wdGlvbnNQYXlsb2FkLCBbJl0gKGNvbnN0IFN0cmluZyYgY29uZGl0aW9uLCBK
U0M6OkJyZWFrcG9pbnQ6OkFjdGlvbnNWZWN0b3ImJiBhY3Rpb25zLCBib29sIGF1dG9Db250aW51
ZSwgc2l6ZV90IGlnbm9yZUNvdW50KSAtPiBPcHRpb25hbDxQcm90b2NvbEJyZWFrcG9pbnQ+IHsK
KyAgICByZXR1cm4gcGFyc2VCcmVha3BvaW50T3B0aW9uczxPcHRpb25hbDxQcm90b2NvbEJyZWFr
cG9pbnQ+PihlcnJvclN0cmluZywgV1RGTW92ZShvcHRpb25zKSwgWyZdIChjb25zdCBTdHJpbmcm
IGNvbmRpdGlvbiwgSlNDOjpCcmVha3BvaW50OjpBY3Rpb25zVmVjdG9yJiYgYWN0aW9ucywgYm9v
bCBhdXRvQ29udGludWUsIHNpemVfdCBpZ25vcmVDb3VudCkgLT4gT3B0aW9uYWw8UHJvdG9jb2xC
cmVha3BvaW50PiB7CiAgICAgICAgIHJldHVybiBQcm90b2NvbEJyZWFrcG9pbnQodXJsLCBpc1Jl
Z2V4LCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIsIGNvbmRpdGlvbiwgV1RGTW92ZShhY3Rpb25z
KSwgYXV0b0NvbnRpbnVlLCBpZ25vcmVDb3VudCk7CiAgICAgfSk7CiB9CkBAIC0yMDcsOSArMjA2
LDkgQEAgYm9vbCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpQcm90b2NvbEJyZWFrcG9pbnQ6Om1h
dGNoZXNTY3JpcHRVUkwoY29uc3QgU3RyaW5nJgogICAgIHJldHVybiBtX3VybCA9PSBzY3JpcHRV
Ukw7CiB9CiAKLVJlZlB0cjxKU0M6OkJyZWFrcG9pbnQ+IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6
OmRlYnVnZ2VyQnJlYWtwb2ludEZyb21QYXlsb2FkKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywg
Y29uc3QgSlNPTjo6T2JqZWN0KiBvcHRpb25zUGF5bG9hZCkKK1JlZlB0cjxKU0M6OkJyZWFrcG9p
bnQ+IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRlYnVnZ2VyQnJlYWtwb2ludEZyb21QYXlsb2Fk
KFByb3RvY29sOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIFJlZlB0cjxKU09OOjpPYmplY3Q+
JiYgb3B0aW9ucykKIHsKLSAgICByZXR1cm4gcGFyc2VCcmVha3BvaW50T3B0aW9uczxSZWZQdHI8
SlNDOjpCcmVha3BvaW50Pj4oZXJyb3JTdHJpbmcsIG9wdGlvbnNQYXlsb2FkLCBbXSAoY29uc3Qg
U3RyaW5nJiBjb25kaXRpb24sIEpTQzo6QnJlYWtwb2ludDo6QWN0aW9uc1ZlY3RvciYmIGFjdGlv
bnMsIGJvb2wgYXV0b0NvbnRpbnVlLCBzaXplX3QgaWdub3JlQ291bnQpIHsKKyAgICByZXR1cm4g
cGFyc2VCcmVha3BvaW50T3B0aW9uczxSZWZQdHI8SlNDOjpCcmVha3BvaW50Pj4oZXJyb3JTdHJp
bmcsIFdURk1vdmUob3B0aW9ucyksIFtdIChjb25zdCBTdHJpbmcmIGNvbmRpdGlvbiwgSlNDOjpC
cmVha3BvaW50OjpBY3Rpb25zVmVjdG9yJiYgYWN0aW9ucywgYm9vbCBhdXRvQ29udGludWUsIHNp
emVfdCBpZ25vcmVDb3VudCkgewogICAgICAgICByZXR1cm4gSlNDOjpCcmVha3BvaW50OjpjcmVh
dGUoSlNDOjpub0JyZWFrcG9pbnRJRCwgY29uZGl0aW9uLCBXVEZNb3ZlKGFjdGlvbnMpLCBhdXRv
Q29udGludWUsIGlnbm9yZUNvdW50KTsKICAgICB9KTsKIH0KQEAgLTIzNCwxMCArMjMzLDEwIEBA
IHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5k
KEZyb250ZW5kUm91dGVyKiwgQmFja2VuCiB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6Ondp
bGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKERpc2Nvbm5lY3RSZWFzb24gcmVhc29uKQogewog
ICAgIGlmIChlbmFibGVkKCkpCi0gICAgICAgIGRpc2FibGUocmVhc29uID09IERpc2Nvbm5lY3RS
ZWFzb246Okluc3BlY3RlZFRhcmdldERlc3Ryb3llZCk7CisgICAgICAgIGludGVybmFsRGlzYWJs
ZShyZWFzb24gPT0gRGlzY29ubmVjdFJlYXNvbjo6SW5zcGVjdGVkVGFyZ2V0RGVzdHJveWVkKTsK
IH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjplbmFibGUoKQordm9pZCBJbnNwZWN0
b3JEZWJ1Z2dlckFnZW50OjppbnRlcm5hbEVuYWJsZSgpCiB7CiAgICAgbV9lbmFibGVkID0gdHJ1
ZTsKIApAQCAtMjU3LDcgKzI1Niw3IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZW5h
YmxlKCkKICAgICB9CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlzYWJsZShi
b29sIGlzQmVpbmdEZXN0cm95ZWQpCit2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmludGVy
bmFsRGlzYWJsZShib29sIGlzQmVpbmdEZXN0cm95ZWQpCiB7CiAgICAgZm9yIChhdXRvKiBsaXN0
ZW5lciA6IGNvcHlUb1ZlY3RvcihtX2xpc3RlbmVycykpCiAgICAgICAgIGxpc3RlbmVyLT5kZWJ1
Z2dlcldhc0Rpc2FibGVkKCk7CkBAIC0yNzcsMTkgKzI3NiwyMSBAQCB2b2lkIEluc3BlY3RvckRl
YnVnZ2VyQWdlbnQ6OmRpc2FibGUoYm9vbCBpc0JlaW5nRGVzdHJveWVkKQogICAgIG1fZW5hYmxl
ZCA9IGZhbHNlOwogfQogCi12b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmVuYWJsZShFcnJv
clN0cmluZyYgZXJyb3JTdHJpbmcpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNw
ZWN0b3JEZWJ1Z2dlckFnZW50OjplbmFibGUoKQogewotICAgIGlmIChlbmFibGVkKCkpIHsKLSAg
ICAgICAgZXJyb3JTdHJpbmcgPSAiRGVidWdnZXIgZG9tYWluIGFscmVhZHkgZW5hYmxlZCJfczsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoZW5hYmxlZCgpKQorICAgICAgICByZXR1
cm4gbWFrZVVuZXhwZWN0ZWQoIkRlYnVnZ2VyIGRvbWFpbiBhbHJlYWR5IGVuYWJsZWQiX3MpOwog
Ci0gICAgZW5hYmxlKCk7CisgICAgaW50ZXJuYWxFbmFibGUoKTsKKworICAgIHJldHVybiB7IH07
CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlzYWJsZShFcnJvclN0cmluZyYp
CitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojpk
aXNhYmxlKCkKIHsKLSAgICBkaXNhYmxlKGZhbHNlKTsKKyAgICBpbnRlcm5hbERpc2FibGUoZmFs
c2UpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAogYm9vbCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50
OjpicmVha3BvaW50c0FjdGl2ZSgpIGNvbnN0CkBAIC0yOTcsMjggKzI5OCwzMCBAQCBib29sIElu
c3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmJyZWFrcG9pbnRzQWN0aXZlKCkgY29uc3QKICAgICByZXR1
cm4gbV9kZWJ1Z2dlci5icmVha3BvaW50c0FjdGl2ZSgpOwogfQogCi12b2lkIEluc3BlY3RvckRl
YnVnZ2VyQWdlbnQ6OnNldEFzeW5jU3RhY2tUcmFjZURlcHRoKEVycm9yU3RyaW5nJiBlcnJvclN0
cmluZywgaW50IGRlcHRoKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9y
RGVidWdnZXJBZ2VudDo6c2V0QXN5bmNTdGFja1RyYWNlRGVwdGgoaW50IGRlcHRoKQogewogICAg
IGlmIChtX2FzeW5jU3RhY2tUcmFjZURlcHRoID09IGRlcHRoKQotICAgICAgICByZXR1cm47Cisg
ICAgICAgIHJldHVybiB7IH07CiAKLSAgICBpZiAoZGVwdGggPCAwKSB7Ci0gICAgICAgIGVycm9y
U3RyaW5nID0gIlVuZXhwZWN0ZWQgbmVnYXRpdmUgZGVwdGgiX3M7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9CisgICAgaWYgKGRlcHRoIDwgMCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVk
KCJVbmV4cGVjdGVkIG5lZ2F0aXZlIGRlcHRoIl9zKTsKIAogICAgIG1fYXN5bmNTdGFja1RyYWNl
RGVwdGggPSBkZXB0aDsKIAogICAgIGlmICghbV9hc3luY1N0YWNrVHJhY2VEZXB0aCkKICAgICAg
ICAgY2xlYXJBc3luY1N0YWNrVHJhY2VEYXRhKCk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12
b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldEJyZWFrcG9pbnRzQWN0aXZlKEVycm9yU3Ry
aW5nJiwgYm9vbCBhY3RpdmUpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0
b3JEZWJ1Z2dlckFnZW50OjpzZXRCcmVha3BvaW50c0FjdGl2ZShib29sIGFjdGl2ZSkKIHsKICAg
ICBpZiAoYWN0aXZlKQogICAgICAgICBtX2RlYnVnZ2VyLmFjdGl2YXRlQnJlYWtwb2ludHMoKTsK
ICAgICBlbHNlCiAgICAgICAgIG1fZGVidWdnZXIuZGVhY3RpdmF0ZUJyZWFrcG9pbnRzKCk7CisK
KyAgICByZXR1cm4geyB9OwogfQogCiBib29sIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmlzUGF1
c2VkKCkgY29uc3QKQEAgLTM0MiwyMCArMzQ1LDIwIEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJB
Z2VudDo6dXBkYXRlUGF1c2VSZWFzb25BbmREYXRhKERlYnVnZ2VyRnJvbnRlbmREaXNwYXRjaGVy
CiAgICAgbV9wYXVzZURhdGEgPSBXVEZNb3ZlKGRhdGEpOwogfQogCi1zdGF0aWMgUmVmUHRyPEpT
T046Ok9iamVjdD4gYnVpbGRBc3NlcnRQYXVzZVJlYXNvbihjb25zdCBTdHJpbmcmIG1lc3NhZ2Up
CitzdGF0aWMgUmVmPEpTT046Ok9iamVjdD4gYnVpbGRBc3NlcnRQYXVzZVJlYXNvbihjb25zdCBT
dHJpbmcmIG1lc3NhZ2UpCiB7CiAgICAgYXV0byByZWFzb24gPSBQcm90b2NvbDo6RGVidWdnZXI6
OkFzc2VydFBhdXNlUmVhc29uOjpjcmVhdGUoKS5yZWxlYXNlKCk7CiAgICAgaWYgKCFtZXNzYWdl
LmlzTnVsbCgpKQogICAgICAgICByZWFzb24tPnNldE1lc3NhZ2UobWVzc2FnZSk7Ci0gICAgcmV0
dXJuIHJlYXNvbi0+b3BlbkFjY2Vzc29ycygpOworICAgIHJldHVybiAqcmVhc29uLT5hc09iamVj
dCgpOwogfQogCi1zdGF0aWMgUmVmUHRyPEpTT046Ok9iamVjdD4gYnVpbGRDU1BWaW9sYXRpb25Q
YXVzZVJlYXNvbihjb25zdCBTdHJpbmcmIGRpcmVjdGl2ZVRleHQpCitzdGF0aWMgUmVmPEpTT046
Ok9iamVjdD4gYnVpbGRDU1BWaW9sYXRpb25QYXVzZVJlYXNvbihjb25zdCBTdHJpbmcmIGRpcmVj
dGl2ZVRleHQpCiB7CiAgICAgYXV0byByZWFzb24gPSBQcm90b2NvbDo6RGVidWdnZXI6OkNTUFZp
b2xhdGlvblBhdXNlUmVhc29uOjpjcmVhdGUoKQogICAgICAgICAuc2V0RGlyZWN0aXZlKGRpcmVj
dGl2ZVRleHQpCiAgICAgICAgIC5yZWxlYXNlKCk7Ci0gICAgcmV0dXJuIHJlYXNvbi0+b3BlbkFj
Y2Vzc29ycygpOworICAgIHJldHVybiAqcmVhc29uLT5hc09iamVjdCgpOwogfQogCiBSZWZQdHI8
SlNPTjo6T2JqZWN0PiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpidWlsZEJyZWFrcG9pbnRQYXVz
ZVJlYXNvbihKU0M6OkJyZWFrcG9pbnRJRCBkZWJ1Z2dlckJyZWFrcG9pbnRJRCkKQEAgLTM2OCw3
ICszNzEsNyBAQCBSZWZQdHI8SlNPTjo6T2JqZWN0PiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojpi
dWlsZEJyZWFrcG9pbnRQYXVzZVJlYXNvbihKU0M6OkJyZQogICAgICAgICAgICAgICAgIGF1dG8g
cmVhc29uID0gUHJvdG9jb2w6OkRlYnVnZ2VyOjpCcmVha3BvaW50UGF1c2VSZWFzb246OmNyZWF0
ZSgpCiAgICAgICAgICAgICAgICAgICAgIC5zZXRCcmVha3BvaW50SWQocHJvdG9jb2xCcmVha3Bv
aW50SUQpCiAgICAgICAgICAgICAgICAgICAgIC5yZWxlYXNlKCk7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIHJlYXNvbi0+b3BlbkFjY2Vzc29ycygpOworICAgICAgICAgICAgICAgIHJldHVybiBy
ZWFzb24tPmFzT2JqZWN0KCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC0z
ODYsNyArMzg5LDExIEBAIFJlZlB0cjxKU09OOjpPYmplY3Q+IEluc3BlY3RvckRlYnVnZ2VyQWdl
bnQ6OmJ1aWxkRXhjZXB0aW9uUGF1c2VSZWFzb24oSlNDOjpKU1ZhCiAgICAgaWYgKGluamVjdGVk
U2NyaXB0Lmhhc05vVmFsdWUoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1
cm4gaW5qZWN0ZWRTY3JpcHQud3JhcE9iamVjdChleGNlcHRpb24sIEluc3BlY3RvckRlYnVnZ2Vy
QWdlbnQ6OmJhY2t0cmFjZU9iamVjdEdyb3VwKS0+b3BlbkFjY2Vzc29ycygpOworICAgIGF1dG8g
ZXhjZXB0aW9uVmFsdWUgPSBpbmplY3RlZFNjcmlwdC53cmFwT2JqZWN0KGV4Y2VwdGlvbiwgSW5z
cGVjdG9yRGVidWdnZXJBZ2VudDo6YmFja3RyYWNlT2JqZWN0R3JvdXApOworICAgIGlmICghZXhj
ZXB0aW9uVmFsdWUpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuIGV4Y2Vw
dGlvblZhbHVlLT5hc09iamVjdCgpOwogfQogCiB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6
OmhhbmRsZUNvbnNvbGVBc3NlcnQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQpAQCAtNDkyLDcgKzQ5
OSw3IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlkRGlzcGF0Y2hBc3luY0NhbGwo
KQogICAgICAgICBtX3BlbmRpbmdBc3luY0NhbGxzLnJlbW92ZShpZGVudGlmaWVyKTsKIH0KIAot
c3RhdGljIFJlZlB0cjxQcm90b2NvbDo6RGVidWdnZXI6OkxvY2F0aW9uPiBidWlsZERlYnVnZ2Vy
TG9jYXRpb24oY29uc3QgSlNDOjpCcmVha3BvaW50JiBkZWJ1Z2dlckJyZWFrcG9pbnQpCitzdGF0
aWMgUmVmPFByb3RvY29sOjpEZWJ1Z2dlcjo6TG9jYXRpb24+IGJ1aWxkRGVidWdnZXJMb2NhdGlv
bihjb25zdCBKU0M6OkJyZWFrcG9pbnQmIGRlYnVnZ2VyQnJlYWtwb2ludCkKIHsKICAgICBBU1NF
UlQoZGVidWdnZXJCcmVha3BvaW50LmlzUmVzb2x2ZWQoKSk7CiAKQEAgLTUwMSw1MCArNTA4LDQ5
IEBAIHN0YXRpYyBSZWZQdHI8UHJvdG9jb2w6OkRlYnVnZ2VyOjpMb2NhdGlvbj4gYnVpbGREZWJ1
Z2dlckxvY2F0aW9uKGNvbnN0IEpTQzo6QnJlCiAgICAgICAgIC5zZXRMaW5lTnVtYmVyKGRlYnVn
Z2VyQnJlYWtwb2ludC5saW5lTnVtYmVyKCkpCiAgICAgICAgIC5yZWxlYXNlKCk7CiAgICAgbG9j
YXRpb24tPnNldENvbHVtbk51bWJlcihkZWJ1Z2dlckJyZWFrcG9pbnQuY29sdW1uTnVtYmVyKCkp
OwotCiAgICAgcmV0dXJuIGxvY2F0aW9uOwogfQogCi1zdGF0aWMgYm9vbCBwYXJzZUxvY2F0aW9u
KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgSlNPTjo6T2JqZWN0JiBsb2NhdGlvbiwg
SlNDOjpTb3VyY2VJRCYgc291cmNlSUQsIHVuc2lnbmVkJiBsaW5lTnVtYmVyLCB1bnNpZ25lZCYg
Y29sdW1uTnVtYmVyKQorc3RhdGljIGJvb2wgcGFyc2VMb2NhdGlvbihQcm90b2NvbDo6RXJyb3JT
dHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBKU09OOjpPYmplY3QmIGxvY2F0aW9uLCBKU0M6OlNv
dXJjZUlEJiBzb3VyY2VJRCwgdW5zaWduZWQmIGxpbmVOdW1iZXIsIHVuc2lnbmVkJiBjb2x1bW5O
dW1iZXIpCiB7Ci0gICAgaWYgKCFsb2NhdGlvbi5nZXRJbnRlZ2VyKCJsaW5lTnVtYmVyIl9zLCBs
aW5lTnVtYmVyKSkgeworICAgIGF1dG8gbGluZU51bWJlclZhbHVlID0gbG9jYXRpb24uZ2V0SW50
ZWdlcihQcm90b2NvbDo6RGVidWdnZXI6OkxvY2F0aW9uOjpsaW5lTnVtYmVyS2V5KTsKKyAgICBp
ZiAoIWxpbmVOdW1iZXJWYWx1ZSkgewogICAgICAgICBlcnJvclN0cmluZyA9ICJVbmV4cGVjdGVk
IG5vbi1pbnRlZ2VyIGxpbmVOdW1iZXIgaW4gZ2l2ZW4gbG9jYXRpb24iX3M7CiAgICAgICAgIHNv
dXJjZUlEID0gSlNDOjpub1NvdXJjZUlEOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQog
Ci0gICAgU3RyaW5nIHNjcmlwdElEU3RyOwotICAgIGlmICghbG9jYXRpb24uZ2V0U3RyaW5nKCJz
Y3JpcHRJZCJfcywgc2NyaXB0SURTdHIpKSB7CisgICAgbGluZU51bWJlciA9ICpsaW5lTnVtYmVy
VmFsdWU7CisKKyAgICBhdXRvIHNjcmlwdElEU3RyID0gbG9jYXRpb24uZ2V0U3RyaW5nKFByb3Rv
Y29sOjpEZWJ1Z2dlcjo6TG9jYXRpb246OnNjcmlwdElkS2V5KTsKKyAgICBpZiAoIXNjcmlwdElE
U3RyKSB7CiAgICAgICAgIHNvdXJjZUlEID0gSlNDOjpub1NvdXJjZUlEOwogICAgICAgICBlcnJv
clN0cmluZyA9ICJVbmV4ZXBjdGVkIG5vbi1zdHJpbmcgc2NyaXB0SWQgaW4gZ2l2ZW4gbG9jYXRp
b24iX3M7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKICAgICBzb3VyY2VJRCA9IHNj
cmlwdElEU3RyLnRvSW50UHRyKCk7Ci0gICAgY29sdW1uTnVtYmVyID0gMDsKLSAgICBsb2NhdGlv
bi5nZXRJbnRlZ2VyKCJjb2x1bW5OdW1iZXIiX3MsIGNvbHVtbk51bWJlcik7CisgICAgY29sdW1u
TnVtYmVyID0gbG9jYXRpb24uZ2V0SW50ZWdlcihQcm90b2NvbDo6RGVidWdnZXI6OkxvY2F0aW9u
Ojpjb2x1bW5OdW1iZXJLZXkpLnZhbHVlT3IoMCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZv
aWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0QnJlYWtwb2ludEJ5VXJsKEVycm9yU3RyaW5n
JiBlcnJvclN0cmluZywgaW50IGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxVUkws
IGNvbnN0IFN0cmluZyogb3B0aW9uYWxVUkxSZWdleCwgY29uc3QgaW50KiBvcHRpb25hbENvbHVt
bk51bWJlciwgY29uc3QgSlNPTjo6T2JqZWN0KiBvcHRpb25zUGF5bG9hZCwgUHJvdG9jb2w6OkRl
YnVnZ2VyOjpCcmVha3BvaW50SWQqIG91dEJyZWFrcG9pbnRJZCwgUmVmUHRyPEpTT046OkFycmF5
T2Y8UHJvdG9jb2w6OkRlYnVnZ2VyOjpMb2NhdGlvbj4+JiBvdXRMb2NhdGlvbnMpCitQcm90b2Nv
bDo6RXJyb3JTdHJpbmdPcjxzdGQ6OnR1cGxlPFByb3RvY29sOjpEZWJ1Z2dlcjo6QnJlYWtwb2lu
dElkLCBSZWY8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6RGVidWdnZXI6OkxvY2F0aW9uPj4+PiBJ
bnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZXRCcmVha3BvaW50QnlVcmwoaW50IGxpbmVOdW1iZXIs
IGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIHVybFJlZ2V4LCBPcHRpb25hbDxpbnQ+
JiYgY29sdW1uTnVtYmVyLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIG9wdGlvbnMpCiB7Ci0gICAg
aWYgKCFvcHRpb25hbFVSTCA9PSAhb3B0aW9uYWxVUkxSZWdleCkgewotICAgICAgICBlcnJvclN0
cmluZyA9ICJFaXRoZXIgdXJsIG9yIHVybFJlZ2V4IG11c3QgYmUgc3BlY2lmaWVkIl9zOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghdXJsID09ICF1cmxSZWdleCkKKyAgICAgICAg
cmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJFaXRoZXIgdXJsIG9yIHVybFJlZ2V4IG11c3QgYmUgc3Bl
Y2lmaWVkIl9zKTsKIAotICAgIGF1dG8gcHJvdG9jb2xCcmVha3BvaW50ID0gUHJvdG9jb2xCcmVh
a3BvaW50Ojpmcm9tUGF5bG9hZChlcnJvclN0cmluZywgb3B0aW9uYWxVUkwgPyAqb3B0aW9uYWxV
UkwgOiAqb3B0aW9uYWxVUkxSZWdleCwgISFvcHRpb25hbFVSTFJlZ2V4LCBsaW5lTnVtYmVyLCBv
cHRpb25hbENvbHVtbk51bWJlciA/ICpvcHRpb25hbENvbHVtbk51bWJlciA6IDAsIG9wdGlvbnNQ
YXlsb2FkKTsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKKyAgICBh
dXRvIHByb3RvY29sQnJlYWtwb2ludCA9IFByb3RvY29sQnJlYWtwb2ludDo6ZnJvbVBheWxvYWQo
ZXJyb3JTdHJpbmcsICEhdXJsID8gdXJsIDogdXJsUmVnZXgsICEhdXJsUmVnZXgsIGxpbmVOdW1i
ZXIsIGNvbHVtbk51bWJlci52YWx1ZU9yKDApLCBXVEZNb3ZlKG9wdGlvbnMpKTsKICAgICBpZiAo
IXByb3RvY29sQnJlYWtwb2ludCkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFr
ZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCi0gICAgaWYgKG1fcHJvdG9jb2xCcmVha3BvaW50
Rm9yUHJvdG9jb2xCcmVha3BvaW50SUQuY29udGFpbnMocHJvdG9jb2xCcmVha3BvaW50LT5pZCgp
KSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJCcmVha3BvaW50IGZvciBnaXZlbiBsb2NhdGlv
biBhbHJlYWR5IGV4aXN0cy4iX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKG1f
cHJvdG9jb2xCcmVha3BvaW50Rm9yUHJvdG9jb2xCcmVha3BvaW50SUQuY29udGFpbnMocHJvdG9j
b2xCcmVha3BvaW50LT5pZCgpKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJCcmVh
a3BvaW50IGZvciBnaXZlbiBsb2NhdGlvbiBhbHJlYWR5IGV4aXN0cy4iX3MpOwogCiAgICAgbV9w
cm90b2NvbEJyZWFrcG9pbnRGb3JQcm90b2NvbEJyZWFrcG9pbnRJRC5zZXQocHJvdG9jb2xCcmVh
a3BvaW50LT5pZCgpLCAqcHJvdG9jb2xCcmVha3BvaW50KTsKIAotICAgIG91dExvY2F0aW9ucyA9
IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkRlYnVnZ2VyOjpMb2NhdGlvbj46OmNyZWF0ZSgpOwor
ICAgIGF1dG8gbG9jYXRpb25zID0gSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6RGVidWdnZXI6Okxv
Y2F0aW9uPjo6Y3JlYXRlKCk7CiAKICAgICBmb3IgKGF1dG8mIFtzb3VyY2VJRCwgc2NyaXB0XSA6
IG1fc2NyaXB0cykgewogICAgICAgICBTdHJpbmcgc2NyaXB0VVJMRm9yQnJlYWtwb2ludHMgPSAh
c2NyaXB0LnNvdXJjZVVSTC5pc0VtcHR5KCkgPyBzY3JpcHQuc291cmNlVVJMIDogc2NyaXB0LnVy
bDsKQEAgLTU2MSwyOSArNTY3LDI5IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0
QnJlYWtwb2ludEJ5VXJsKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IGxpCiAKICAgICAg
ICAgZGlkU2V0QnJlYWtwb2ludCgqcHJvdG9jb2xCcmVha3BvaW50LCBkZWJ1Z2dlckJyZWFrcG9p
bnQpOwogCi0gICAgICAgIG91dExvY2F0aW9ucy0+YWRkSXRlbShidWlsZERlYnVnZ2VyTG9jYXRp
b24oZGVidWdnZXJCcmVha3BvaW50KSk7CisgICAgICAgIGxvY2F0aW9ucy0+YWRkSXRlbShidWls
ZERlYnVnZ2VyTG9jYXRpb24oZGVidWdnZXJCcmVha3BvaW50KSk7CiAgICAgfQogCi0gICAgKm91
dEJyZWFrcG9pbnRJZCA9IHByb3RvY29sQnJlYWtwb2ludC0+aWQoKTsKKyAgICByZXR1cm4geyB7
IHByb3RvY29sQnJlYWtwb2ludC0+aWQoKSwgV1RGTW92ZShsb2NhdGlvbnMpIH0gfTsKIH0KIAot
dm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZXRCcmVha3BvaW50KEVycm9yU3RyaW5nJiBl
cnJvclN0cmluZywgY29uc3QgSlNPTjo6T2JqZWN0JiBsb2NhdGlvbiwgY29uc3QgSlNPTjo6T2Jq
ZWN0KiBvcHRpb25zUGF5bG9hZCwgUHJvdG9jb2w6OkRlYnVnZ2VyOjpCcmVha3BvaW50SWQqIG91
dEJyZWFrcG9pbnRJZCwgUmVmUHRyPFByb3RvY29sOjpEZWJ1Z2dlcjo6TG9jYXRpb24+JiBvdXRB
Y3R1YWxMb2NhdGlvbikKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHN0ZDo6dHVwbGU8UHJvdG9j
b2w6OkRlYnVnZ2VyOjpCcmVha3BvaW50SWQsIFJlZjxQcm90b2NvbDo6RGVidWdnZXI6OkxvY2F0
aW9uPj4+IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldEJyZWFrcG9pbnQoUmVmPEpTT046Ok9i
amVjdD4mJiBsb2NhdGlvbiwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBvcHRpb25zKQogeworICAg
IFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIEpTQzo6U291cmNlSUQg
c291cmNlSUQ7CiAgICAgdW5zaWduZWQgbGluZU51bWJlcjsKICAgICB1bnNpZ25lZCBjb2x1bW5O
dW1iZXI7CiAgICAgaWYgKCFwYXJzZUxvY2F0aW9uKGVycm9yU3RyaW5nLCBsb2NhdGlvbiwgc291
cmNlSUQsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlcikpCi0gICAgICAgIHJldHVybjsKKyAgICAg
ICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgIGF1dG8gc2NyaXB0
SXRlcmF0b3IgPSBtX3NjcmlwdHMuZmluZChzb3VyY2VJRCk7Ci0gICAgaWYgKHNjcmlwdEl0ZXJh
dG9yID09IG1fc2NyaXB0cy5lbmQoKSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5n
IHNjcmlwdCBmb3Igc2NyaXB0SWQgaW4gZ2l2ZW4gbG9jYXRpb24iX3M7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9CisgICAgaWYgKHNjcmlwdEl0ZXJhdG9yID09IG1fc2NyaXB0cy5lbmQoKSkKKyAg
ICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJNaXNzaW5nIHNjcmlwdCBmb3Igc2NyaXB0SWQg
aW4gZ2l2ZW4gbG9jYXRpb24iX3MpOwogCi0gICAgYXV0byBwcm90b2NvbEJyZWFrcG9pbnQgPSBQ
cm90b2NvbEJyZWFrcG9pbnQ6OmZyb21QYXlsb2FkKGVycm9yU3RyaW5nLCBzb3VyY2VJRCwgbGlu
ZU51bWJlciwgY29sdW1uTnVtYmVyLCBvcHRpb25zUGF5bG9hZCk7CisgICAgYXV0byBwcm90b2Nv
bEJyZWFrcG9pbnQgPSBQcm90b2NvbEJyZWFrcG9pbnQ6OmZyb21QYXlsb2FkKGVycm9yU3RyaW5n
LCBzb3VyY2VJRCwgbGluZU51bWJlciwgY29sdW1uTnVtYmVyLCBXVEZNb3ZlKG9wdGlvbnMpKTsK
ICAgICBpZiAoIXByb3RvY29sQnJlYWtwb2ludCkKLSAgICAgICAgcmV0dXJuOworICAgICAgICBy
ZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCiAgICAgLy8gRG9uJ3Qgc2F2ZSBg
cHJvdG9jb2xCcmVha3BvaW50YCBpbiBgbV9wcm90b2NvbEJyZWFrcG9pbnRGb3JQcm90b2NvbEJy
ZWFrcG9pbnRJRGAgYmVjYXVzZSBpdAogICAgIC8vIHdhcyBzZXQgc3BlY2lmaWNhbGx5IGZvciB0
aGUgZ2l2ZW4gYHNvdXJjZUlEYCwgd2hpY2ggaXMgdW5pcXVlLCBtZWFuaW5nIHRoYXQgaXQgd2ls
bCBuZXZlcgpAQCAtNTkxLDIwICs1OTcsMTUgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50
OjpzZXRCcmVha3BvaW50KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgSlNPTjoKIAog
ICAgIGF1dG8gZGVidWdnZXJCcmVha3BvaW50ID0gcHJvdG9jb2xCcmVha3BvaW50LT5jcmVhdGVE
ZWJ1Z2dlckJyZWFrcG9pbnQobV9uZXh0RGVidWdnZXJCcmVha3BvaW50SUQrKywgc291cmNlSUQp
OwogCi0gICAgaWYgKCFyZXNvbHZlQnJlYWtwb2ludChzY3JpcHRJdGVyYXRvci0+dmFsdWUsIGRl
YnVnZ2VyQnJlYWtwb2ludCkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiQ291bGQgbm90IHJl
c29sdmUgYnJlYWtwb2ludCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoIXJl
c29sdmVCcmVha3BvaW50KHNjcmlwdEl0ZXJhdG9yLT52YWx1ZSwgZGVidWdnZXJCcmVha3BvaW50
KSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJDb3VsZCBub3QgcmVzb2x2ZSBicmVh
a3BvaW50Il9zKTsKIAotICAgIGlmICghc2V0QnJlYWtwb2ludChkZWJ1Z2dlckJyZWFrcG9pbnQp
KSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIkJyZWFrcG9pbnQgZm9yIGdpdmVuIGxvY2F0aW9u
IGFscmVhZHkgZXhpc3RzIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghc2V0
QnJlYWtwb2ludChkZWJ1Z2dlckJyZWFrcG9pbnQpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoIkJyZWFrcG9pbnQgZm9yIGdpdmVuIGxvY2F0aW9uIGFscmVhZHkgZXhpc3RzIl9zKTsK
IAogICAgIGRpZFNldEJyZWFrcG9pbnQoKnByb3RvY29sQnJlYWtwb2ludCwgZGVidWdnZXJCcmVh
a3BvaW50KTsKIAotICAgIG91dEFjdHVhbExvY2F0aW9uID0gYnVpbGREZWJ1Z2dlckxvY2F0aW9u
KGRlYnVnZ2VyQnJlYWtwb2ludCk7Ci0gICAgKm91dEJyZWFrcG9pbnRJZCA9IHByb3RvY29sQnJl
YWtwb2ludC0+aWQoKTsKKyAgICByZXR1cm4geyB7IHByb3RvY29sQnJlYWtwb2ludC0+aWQoKSwg
YnVpbGREZWJ1Z2dlckxvY2F0aW9uKGRlYnVnZ2VyQnJlYWtwb2ludCkgfSB9OwogfQogCiB2b2lk
IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpZFNldEJyZWFrcG9pbnQoUHJvdG9jb2xCcmVha3Bv
aW50JiBwcm90b2NvbEJyZWFrcG9pbnQsIEpTQzo6QnJlYWtwb2ludCYgZGVidWdnZXJCcmVha3Bv
aW50KQpAQCAtNjMwLDcgKzYzMSw3IEBAIGJvb2wgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0
QnJlYWtwb2ludChKU0M6OkJyZWFrcG9pbnQmIGRlYnVnZ2VyQnJlYWtwb2ludCkKICAgICByZXR1
cm4gbV9kZWJ1Z2dlci5zZXRCcmVha3BvaW50KGRlYnVnZ2VyQnJlYWtwb2ludCk7CiB9CiAKLXZv
aWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6cmVtb3ZlQnJlYWtwb2ludChFcnJvclN0cmluZyYs
IGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpCcmVha3BvaW50SWQmIHByb3Rv
Y29sQnJlYWtwb2ludElEKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9y
RGVidWdnZXJBZ2VudDo6cmVtb3ZlQnJlYWtwb2ludChjb25zdCBQcm90b2NvbDo6RGVidWdnZXI6
OkJyZWFrcG9pbnRJZCYgcHJvdG9jb2xCcmVha3BvaW50SUQpCiB7CiAgICAgbV9wcm90b2NvbEJy
ZWFrcG9pbnRGb3JQcm90b2NvbEJyZWFrcG9pbnRJRC5yZW1vdmUocHJvdG9jb2xCcmVha3BvaW50
SUQpOwogCkBAIC02NDEsMjQgKzY0MiwzNCBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6
OnJlbW92ZUJyZWFrcG9pbnQoRXJyb3JTdHJpbmcmLCBjb25zdCBJbnNwZWN0b3I6OlBybwogICAg
ICAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrZXIobV9kZWJ1Z2dlci52bSgpKTsKICAgICAgICAg
bV9kZWJ1Z2dlci5yZW1vdmVCcmVha3BvaW50KGRlYnVnZ2VyQnJlYWtwb2ludCk7CiAgICAgfQor
CisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojpjb250
aW51ZVVudGlsTmV4dFJ1bkxvb3AoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nKQorUHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6Y29udGludWVVbnRp
bE5leHRSdW5Mb29wKCkKIHsKLSAgICBpZiAoIWFzc2VydFBhdXNlZChlcnJvclN0cmluZykpCi0g
ICAgICAgIHJldHVybjsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CiAK
LSAgICByZXN1bWUoZXJyb3JTdHJpbmcpOworICAgIGlmICghYXNzZXJ0UGF1c2VkKGVycm9yU3Ry
aW5nKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKKworICAg
IGF1dG8gcmVzdW1lUmVzdWx0ID0gcmVzdW1lKCk7CisgICAgaWYgKCFyZXN1bWVSZXN1bHQpCisg
ICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChyZXN1bWVSZXN1bHQuZXJyb3IoKSk7CiAKICAg
ICBtX2VuYWJsZVBhdXNlV2hlbklkbGUgPSB0cnVlOwogCiAgICAgcmVnaXN0ZXJJZGxlSGFuZGxl
cigpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50
Ojpjb250aW51ZVRvTG9jYXRpb24oRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBKU09O
OjpPYmplY3QmIGxvY2F0aW9uKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVj
dG9yRGVidWdnZXJBZ2VudDo6Y29udGludWVUb0xvY2F0aW9uKFJlZjxKU09OOjpPYmplY3Q+JiYg
bG9jYXRpb24pCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAg
ICAgaWYgKCFhc3NlcnRQYXVzZWQoZXJyb3JTdHJpbmcpKQotICAgICAgICByZXR1cm47CisgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAgICBpZiAobV9jb250
aW51ZVRvTG9jYXRpb25EZWJ1Z2dlckJyZWFrcG9pbnQpIHsKICAgICAgICAgbV9kZWJ1Z2dlci5y
ZW1vdmVCcmVha3BvaW50KCptX2NvbnRpbnVlVG9Mb2NhdGlvbkRlYnVnZ2VyQnJlYWtwb2ludCk7
CkBAIC02NjksMTkgKzY4MCwxOCBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmNvbnRp
bnVlVG9Mb2NhdGlvbihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0CiAgICAgdW5zaWdu
ZWQgbGluZU51bWJlcjsKICAgICB1bnNpZ25lZCBjb2x1bW5OdW1iZXI7CiAgICAgaWYgKCFwYXJz
ZUxvY2F0aW9uKGVycm9yU3RyaW5nLCBsb2NhdGlvbiwgc291cmNlSUQsIGxpbmVOdW1iZXIsIGNv
bHVtbk51bWJlcikpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVj
dGVkKGVycm9yU3RyaW5nKTsKIAogICAgIGF1dG8gc2NyaXB0SXRlcmF0b3IgPSBtX3NjcmlwdHMu
ZmluZChzb3VyY2VJRCk7CiAgICAgaWYgKHNjcmlwdEl0ZXJhdG9yID09IG1fc2NyaXB0cy5lbmQo
KSkgewogICAgICAgICBtX2RlYnVnZ2VyLmNvbnRpbnVlUHJvZ3JhbSgpOwogICAgICAgICBtX2Zy
b250ZW5kRGlzcGF0Y2hlci0+cmVzdW1lZCgpOwotICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNz
aW5nIHNjcmlwdCBmb3Igc2NyaXB0SWQgaW4gZ2l2ZW4gbG9jYXRpb24iX3M7Ci0gICAgICAgIHJl
dHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJNaXNzaW5nIHNjcmlwdCBmb3Ig
c2NyaXB0SWQgaW4gZ2l2ZW4gbG9jYXRpb24iX3MpOwogICAgIH0KIAogICAgIGF1dG8gcHJvdG9j
b2xCcmVha3BvaW50ID0gUHJvdG9jb2xCcmVha3BvaW50Ojpmcm9tUGF5bG9hZChlcnJvclN0cmlu
Zywgc291cmNlSUQsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlcik7CiAgICAgaWYgKCFwcm90b2Nv
bEJyZWFrcG9pbnQpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVj
dGVkKGVycm9yU3RyaW5nKTsKIAogICAgIC8vIERvbid0IHNhdmUgYHByb3RvY29sQnJlYWtwb2lu
dGAgaW4gYG1fcHJvdG9jb2xCcmVha3BvaW50Rm9yUHJvdG9jb2xCcmVha3BvaW50SURgIGJlY2F1
c2UgaXQKICAgICAvLyBpcyBhIHRlbXBvcmFyeSBicmVha3BvaW50IHRoYXQgd2lsbCBiZSByZW1v
dmVkIGFzIHNvb24gYXMgYGxvY2F0aW9uYCBpcyByZWFjaGVkLgpAQCAtNjkxLDggKzcwMSw3IEBA
IHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6Y29udGludWVUb0xvY2F0aW9uKEVycm9yU3Ry
aW5nJiBlcnJvclN0cmluZywgY29uc3QKICAgICBpZiAoIXJlc29sdmVCcmVha3BvaW50KHNjcmlw
dEl0ZXJhdG9yLT52YWx1ZSwgZGVidWdnZXJCcmVha3BvaW50KSkgewogICAgICAgICBtX2RlYnVn
Z2VyLmNvbnRpbnVlUHJvZ3JhbSgpOwogICAgICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+cmVz
dW1lZCgpOwotICAgICAgICBlcnJvclN0cmluZyA9ICJDb3VsZCBub3QgcmVzb2x2ZSBicmVha3Bv
aW50Il9zOwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgi
Q291bGQgbm90IHJlc29sdmUgYnJlYWtwb2ludCJfcyk7CiAgICAgfQogCiAgICAgaWYgKCFzZXRC
cmVha3BvaW50KGRlYnVnZ2VyQnJlYWtwb2ludCkpIHsKQEAgLTcwMSw3ICs3MTAsNyBAQCB2b2lk
IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmNvbnRpbnVlVG9Mb2NhdGlvbihFcnJvclN0cmluZyYg
ZXJyb3JTdHJpbmcsIGNvbnN0CiAgICAgICAgIC8vIGhpdCB0aGlzIG5ldyBicmVha3BvaW50IG9y
IG5vdC4KICAgICAgICAgbV9kZWJ1Z2dlci5jb250aW51ZVByb2dyYW0oKTsKICAgICAgICAgbV9m
cm9udGVuZERpc3BhdGNoZXItPnJlc3VtZWQoKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICBy
ZXR1cm4geyB9OwogICAgIH0KIAogICAgIG1fY29udGludWVUb0xvY2F0aW9uRGVidWdnZXJCcmVh
a3BvaW50ID0gV1RGTW92ZShkZWJ1Z2dlckJyZWFrcG9pbnQpOwpAQCAtNzEwLDQxICs3MTksNDIg
QEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojpjb250aW51ZVRvTG9jYXRpb24oRXJyb3JT
dHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdAogICAgIC8vIFNvIGRvbid0IGlzc3VlIGEgcmVzdW1l
ZCBldmVudCB1bmxlc3Mgd2UgZXhpdCB0aGUgVk0gd2l0aG91dCBwYXVzaW5nLgogICAgIHdpbGxT
dGVwQW5kTWF5QmVjb21lSWRsZSgpOwogICAgIG1fZGVidWdnZXIuY29udGludWVQcm9ncmFtKCk7
CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNl
YXJjaEluQ29udGVudChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgc2Ny
aXB0SURTdHIsIGNvbnN0IFN0cmluZyYgcXVlcnksIGNvbnN0IGJvb2wqIG9wdGlvbmFsQ2FzZVNl
bnNpdGl2ZSwgY29uc3QgYm9vbCogb3B0aW9uYWxJc1JlZ2V4LCBSZWZQdHI8SlNPTjo6QXJyYXlP
ZjxQcm90b2NvbDo6R2VuZXJpY1R5cGVzOjpTZWFyY2hNYXRjaD4+JiByZXN1bHRzKQorUHJvdG9j
b2w6OkVycm9yU3RyaW5nT3I8UmVmPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkdlbmVyaWNUeXBl
czo6U2VhcmNoTWF0Y2g+Pj4gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2VhcmNoSW5Db250ZW50
KGNvbnN0IFByb3RvY29sOjpEZWJ1Z2dlcjo6U2NyaXB0SWQmIHNjcmlwdElkLCBjb25zdCBTdHJp
bmcmIHF1ZXJ5LCBPcHRpb25hbDxib29sPiYmIGNhc2VTZW5zaXRpdmUsIE9wdGlvbmFsPGJvb2w+
JiYgaXNSZWdleCkKIHsKLSAgICBKU0M6OlNvdXJjZUlEIHNvdXJjZUlEID0gc2NyaXB0SURTdHIu
dG9JbnRQdHIoKTsKLSAgICBhdXRvIGl0ID0gbV9zY3JpcHRzLmZpbmQoc291cmNlSUQpOwotICAg
IGlmIChpdCA9PSBtX3NjcmlwdHMuZW5kKCkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWlz
c2luZyBzY3JpcHQgZm9yIGdpdmVuIHNjcmlwdElkIjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
KyAgICBhdXRvIGl0ID0gbV9zY3JpcHRzLmZpbmQoc2NyaXB0SWQudG9JbnRQdHIoKSk7CisgICAg
aWYgKGl0ID09IG1fc2NyaXB0cy5lbmQoKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVk
KCJNaXNzaW5nIHNjcmlwdCBmb3IgZ2l2ZW4gc2NyaXB0SWQiX3MpOwogCi0gICAgYm9vbCBpc1Jl
Z2V4ID0gb3B0aW9uYWxJc1JlZ2V4ID8gKm9wdGlvbmFsSXNSZWdleCA6IGZhbHNlOwotICAgIGJv
b2wgY2FzZVNlbnNpdGl2ZSA9IG9wdGlvbmFsQ2FzZVNlbnNpdGl2ZSA/ICpvcHRpb25hbENhc2VT
ZW5zaXRpdmUgOiBmYWxzZTsKLSAgICByZXN1bHRzID0gQ29udGVudFNlYXJjaFV0aWxpdGllczo6
c2VhcmNoSW5UZXh0QnlMaW5lcyhpdC0+dmFsdWUuc291cmNlLCBxdWVyeSwgY2FzZVNlbnNpdGl2
ZSwgaXNSZWdleCk7CisgICAgcmV0dXJuIENvbnRlbnRTZWFyY2hVdGlsaXRpZXM6OnNlYXJjaElu
VGV4dEJ5TGluZXMoaXQtPnZhbHVlLnNvdXJjZSwgcXVlcnksIGNhc2VTZW5zaXRpdmUudmFsdWVP
cihmYWxzZSksIGlzUmVnZXgudmFsdWVPcihmYWxzZSkpOwogfQogCi12b2lkIEluc3BlY3RvckRl
YnVnZ2VyQWdlbnQ6OmdldFNjcmlwdFNvdXJjZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNv
bnN0IFN0cmluZyYgc2NyaXB0SURTdHIsIFN0cmluZyogc2NyaXB0U291cmNlKQorUHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8U3RyaW5nPiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpnZXRTY3JpcHRT
b3VyY2UoY29uc3QgUHJvdG9jb2w6OkRlYnVnZ2VyOjpTY3JpcHRJZCYgc2NyaXB0SWQpCiB7Ci0g
ICAgSlNDOjpTb3VyY2VJRCBzb3VyY2VJRCA9IHNjcmlwdElEU3RyLnRvSW50UHRyKCk7Ci0gICAg
YXV0byBpdCA9IG1fc2NyaXB0cy5maW5kKHNvdXJjZUlEKTsKLSAgICBpZiAoaXQgIT0gbV9zY3Jp
cHRzLmVuZCgpKQotICAgICAgICAqc2NyaXB0U291cmNlID0gaXQtPnZhbHVlLnNvdXJjZTsKLSAg
ICBlbHNlCi0gICAgICAgIGVycm9yU3RyaW5nID0gIk1pc3Npbmcgc2NyaXB0IGZvciBnaXZlbiBz
Y3JpcHRJZCI7CisgICAgYXV0byBpdCA9IG1fc2NyaXB0cy5maW5kKHNjcmlwdElkLnRvSW50UHRy
KCkpOworICAgIGlmIChpdCA9PSBtX3NjcmlwdHMuZW5kKCkpCisgICAgICAgIHJldHVybiBtYWtl
VW5leHBlY3RlZCgiTWlzc2luZyBzY3JpcHQgZm9yIGdpdmVuIHNjcmlwdElkIik7CisKKyAgICBy
ZXR1cm4gaXQtPnZhbHVlLnNvdXJjZTsKIH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50
OjpnZXRGdW5jdGlvbkRldGFpbHMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJp
bmcmIGZ1bmN0aW9uSWQsIFJlZlB0cjxQcm90b2NvbDo6RGVidWdnZXI6OkZ1bmN0aW9uRGV0YWls
cz4mIGRldGFpbHMpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8UHJvdG9jb2w6OkRlYnVn
Z2VyOjpGdW5jdGlvbkRldGFpbHM+PiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpnZXRGdW5jdGlv
bkRldGFpbHMoY29uc3QgU3RyaW5nJiBmdW5jdGlvbklkKQogeworICAgIFByb3RvY29sOjpFcnJv
clN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0
ID0gbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIuaW5qZWN0ZWRTY3JpcHRGb3JPYmplY3RJZChmdW5j
dGlvbklkKTsKLSAgICBpZiAoaW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKSB7Ci0gICAgICAg
IGVycm9yU3RyaW5nID0gIk1pc3NpbmcgaW5qZWN0ZWQgc2NyaXB0IGZvciBnaXZlbiBmdW5jdGlv
bklkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmIChpbmplY3RlZFNjcmlwdC5o
YXNOb1ZhbHVlKCkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTWlzc2luZyBpbmpl
Y3RlZCBzY3JpcHQgZm9yIGdpdmVuIGZ1bmN0aW9uSWQiX3MpOwogCisgICAgUmVmUHRyPFByb3Rv
Y29sOjpEZWJ1Z2dlcjo6RnVuY3Rpb25EZXRhaWxzPiBkZXRhaWxzOwogICAgIGluamVjdGVkU2Ny
aXB0LmdldEZ1bmN0aW9uRGV0YWlscyhlcnJvclN0cmluZywgZnVuY3Rpb25JZCwgZGV0YWlscyk7
CisgICAgaWYgKCFkZXRhaWxzKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JT
dHJpbmcpOworCisgICAgcmV0dXJuIGRldGFpbHMucmVsZWFzZU5vbk51bGwoKTsKIH0KIAogdm9p
ZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzY2hlZHVsZVBhdXNlQXROZXh0T3Bwb3J0dW5pdHko
RGVidWdnZXJGcm9udGVuZERpc3BhdGNoZXI6OlJlYXNvbiByZWFzb24sIFJlZlB0cjxKU09OOjpP
YmplY3Q+JiYgZGF0YSkKQEAgLTc5Miw1NyArODAyLDc1IEBAIGJvb2wgSW5zcGVjdG9yRGVidWdn
ZXJBZ2VudDo6Y2FuY2VsUGF1c2VGb3JTcGVjaWFsQnJlYWtwb2ludChKU0M6OkJyZWFrcG9pbnQm
IGJyCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6
cGF1c2UoRXJyb3JTdHJpbmcmKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVj
dG9yRGVidWdnZXJBZ2VudDo6cGF1c2UoKQogewogICAgIHNjaGVkdWxlUGF1c2VBdE5leHRPcHBv
cnR1bml0eShEZWJ1Z2dlckZyb250ZW5kRGlzcGF0Y2hlcjo6UmVhc29uOjpQYXVzZU9uTmV4dFN0
YXRlbWVudCk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckRlYnVnZ2Vy
QWdlbnQ6OnJlc3VtZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCitQcm90b2NvbDo6RXJyb3JT
dHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpyZXN1bWUoKQogewotICAgIGlm
ICghbV9wYXVzZWRHbG9iYWxPYmplY3QgJiYgIW1famF2YVNjcmlwdFBhdXNlU2NoZWR1bGVkKSB7
Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIk11c3QgYmUgcGF1c2VkIG9yIHdhaXRpbmcgdG8gcGF1
c2UiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKCFtX3BhdXNlZEdsb2JhbE9i
amVjdCAmJiAhbV9qYXZhU2NyaXB0UGF1c2VTY2hlZHVsZWQpCisgICAgICAgIHJldHVybiBtYWtl
VW5leHBlY3RlZCgiTXVzdCBiZSBwYXVzZWQgb3Igd2FpdGluZyB0byBwYXVzZSJfcyk7CiAKICAg
ICBjYW5jZWxQYXVzZUF0TmV4dE9wcG9ydHVuaXR5KCk7CiAgICAgbV9kZWJ1Z2dlci5jb250aW51
ZVByb2dyYW0oKTsKICAgICBtX2NvbmRpdGlvblRvRGlzcGF0Y2hSZXN1bWVkID0gU2hvdWxkRGlz
cGF0Y2hSZXN1bWVkOjpXaGVuQ29udGludWVkOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9p
ZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzdGVwTmV4dChFcnJvclN0cmluZyYgZXJyb3JTdHJp
bmcpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50
OjpzdGVwTmV4dCgpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOwor
CiAgICAgaWYgKCFhc3NlcnRQYXVzZWQoZXJyb3JTdHJpbmcpKQotICAgICAgICByZXR1cm47Cisg
ICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAgICB3aWxsU3Rl
cEFuZE1heUJlY29tZUlkbGUoKTsKICAgICBtX2RlYnVnZ2VyLnN0ZXBOZXh0RXhwcmVzc2lvbigp
OworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojpz
dGVwT3ZlcihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdP
cjx2b2lkPiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzdGVwT3ZlcigpCiB7CisgICAgUHJvdG9j
b2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAgICAgaWYgKCFhc3NlcnRQYXVzZWQoZXJy
b3JTdHJpbmcpKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3Rl
ZChlcnJvclN0cmluZyk7CiAKICAgICB3aWxsU3RlcEFuZE1heUJlY29tZUlkbGUoKTsKICAgICBt
X2RlYnVnZ2VyLnN0ZXBPdmVyU3RhdGVtZW50KCk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12
b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnN0ZXBJbnRvKEVycm9yU3RyaW5nJiBlcnJvclN0
cmluZykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRlYnVnZ2VyQWdl
bnQ6OnN0ZXBJbnRvKCkKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7
CisKICAgICBpZiAoIWFzc2VydFBhdXNlZChlcnJvclN0cmluZykpCi0gICAgICAgIHJldHVybjsK
KyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgIHdpbGxT
dGVwQW5kTWF5QmVjb21lSWRsZSgpOwogICAgIG1fZGVidWdnZXIuc3RlcEludG9TdGF0ZW1lbnQo
KTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6
c3RlcE91dChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdP
cjx2b2lkPiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzdGVwT3V0KCkKIHsKKyAgICBQcm90b2Nv
bDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBpZiAoIWFzc2VydFBhdXNlZChlcnJv
clN0cmluZykpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVk
KGVycm9yU3RyaW5nKTsKIAogICAgIHdpbGxTdGVwQW5kTWF5QmVjb21lSWRsZSgpOwogICAgIG1f
ZGVidWdnZXIuc3RlcE91dE9mRnVuY3Rpb24oKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKIHZv
aWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6cmVnaXN0ZXJJZGxlSGFuZGxlcigpCkBAIC04Nzcs
ODYgKzkwNSw5OCBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpZEJlY29tZUlkbGUo
KQogCiAgICAgbV9jb25kaXRpb25Ub0Rpc3BhdGNoUmVzdW1lZCA9IFNob3VsZERpc3BhdGNoUmVz
dW1lZDo6Tm87CiAKLSAgICBpZiAobV9lbmFibGVQYXVzZVdoZW5JZGxlKSB7Ci0gICAgICAgIEVy
cm9yU3RyaW5nIGlnbm9yZWQ7Ci0gICAgICAgIHBhdXNlKGlnbm9yZWQpOwotICAgIH0KKyAgICBp
ZiAobV9lbmFibGVQYXVzZVdoZW5JZGxlKQorICAgICAgICBwYXVzZSgpOwogfQogCi12b2lkIElu
c3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldFBhdXNlT25EZWJ1Z2dlclN0YXRlbWVudHMoRXJyb3JT
dHJpbmcmIGVycm9yU3RyaW5nLCBib29sIGVuYWJsZWQsIGNvbnN0IEpTT046Ok9iamVjdCogb3B0
aW9uc1BheWxvYWQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JEZWJ1
Z2dlckFnZW50OjpzZXRQYXVzZU9uRGVidWdnZXJTdGF0ZW1lbnRzKGJvb2wgZW5hYmxlZCwgUmVm
UHRyPEpTT046Ok9iamVjdD4mJiBvcHRpb25zKQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmlu
ZyBlcnJvclN0cmluZzsKKwogICAgIGlmICghZW5hYmxlZCkgewogICAgICAgICBtX2RlYnVnZ2Vy
LnNldFBhdXNlT25EZWJ1Z2dlclN0YXRlbWVudHNCcmVha3BvaW50KG51bGxwdHIpOwotICAgICAg
ICByZXR1cm47CisgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCi0gICAgYXV0byBicmVha3Bv
aW50ID0gZGVidWdnZXJCcmVha3BvaW50RnJvbVBheWxvYWQoZXJyb3JTdHJpbmcsIG9wdGlvbnNQ
YXlsb2FkKTsKKyAgICBhdXRvIGJyZWFrcG9pbnQgPSBkZWJ1Z2dlckJyZWFrcG9pbnRGcm9tUGF5
bG9hZChlcnJvclN0cmluZywgV1RGTW92ZShvcHRpb25zKSk7CiAgICAgaWYgKCFicmVha3BvaW50
KQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0
cmluZyk7CiAKICAgICBtX2RlYnVnZ2VyLnNldFBhdXNlT25EZWJ1Z2dlclN0YXRlbWVudHNCcmVh
a3BvaW50KFdURk1vdmUoYnJlYWtwb2ludCkpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9p
ZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZXRQYXVzZU9uRXhjZXB0aW9ucyhFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgc3RhdGVTdHJpbmcsIGNvbnN0IEpTT046Ok9i
amVjdCogb3B0aW9uc1BheWxvYWQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNw
ZWN0b3JEZWJ1Z2dlckFnZW50OjpzZXRQYXVzZU9uRXhjZXB0aW9ucyhjb25zdCBTdHJpbmcmIHN0
YXRlU3RyaW5nLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIG9wdGlvbnMpCiB7CisgICAgUHJvdG9j
b2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAgICAgUmVmUHRyPEpTQzo6QnJlYWtwb2lu
dD4gYWxsRXhjZXB0aW9uc0JyZWFrcG9pbnQ7CiAgICAgUmVmUHRyPEpTQzo6QnJlYWtwb2ludD4g
dW5jYXVnaHRFeGNlcHRpb25zQnJlYWtwb2ludDsKIAogICAgIGlmIChzdGF0ZVN0cmluZyA9PSAi
YWxsIikgewotICAgICAgICBhbGxFeGNlcHRpb25zQnJlYWtwb2ludCA9IGRlYnVnZ2VyQnJlYWtw
b2ludEZyb21QYXlsb2FkKGVycm9yU3RyaW5nLCBvcHRpb25zUGF5bG9hZCk7CisgICAgICAgIGFs
bEV4Y2VwdGlvbnNCcmVha3BvaW50ID0gZGVidWdnZXJCcmVha3BvaW50RnJvbVBheWxvYWQoZXJy
b3JTdHJpbmcsIFdURk1vdmUob3B0aW9ucykpOwogICAgICAgICBpZiAoIWFsbEV4Y2VwdGlvbnNC
cmVha3BvaW50KQotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKICAgICB9IGVsc2UgaWYgKHN0YXRlU3RyaW5nID09ICJ1
bmNhdWdodCIpIHsKLSAgICAgICAgdW5jYXVnaHRFeGNlcHRpb25zQnJlYWtwb2ludCA9IGRlYnVn
Z2VyQnJlYWtwb2ludEZyb21QYXlsb2FkKGVycm9yU3RyaW5nLCBvcHRpb25zUGF5bG9hZCk7Cisg
ICAgICAgIHVuY2F1Z2h0RXhjZXB0aW9uc0JyZWFrcG9pbnQgPSBkZWJ1Z2dlckJyZWFrcG9pbnRG
cm9tUGF5bG9hZChlcnJvclN0cmluZywgV1RGTW92ZShvcHRpb25zKSk7CiAgICAgICAgIGlmICgh
dW5jYXVnaHRFeGNlcHRpb25zQnJlYWtwb2ludCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9
IGVsc2UgaWYgKHN0YXRlU3RyaW5nICE9ICJub25lIikgewotICAgICAgICBlcnJvclN0cmluZyA9
IG1ha2VTdHJpbmcoIlVua25vd24gc3RhdGU6ICJfcywgc3RhdGVTdHJpbmcpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQorICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3Ry
aW5nKTsKKyAgICB9IGVsc2UgaWYgKHN0YXRlU3RyaW5nICE9ICJub25lIikKKyAgICAgICAgcmV0
dXJuIG1ha2VVbmV4cGVjdGVkKG1ha2VTdHJpbmcoIlVua25vd24gc3RhdGU6ICJfcywgc3RhdGVT
dHJpbmcpKTsKIAogICAgIG1fZGVidWdnZXIuc2V0UGF1c2VPbkFsbEV4Y2VwdGlvbnNCcmVha3Bv
aW50KFdURk1vdmUoYWxsRXhjZXB0aW9uc0JyZWFrcG9pbnQpKTsKICAgICBtX2RlYnVnZ2VyLnNl
dFBhdXNlT25VbmNhdWdodEV4Y2VwdGlvbnNCcmVha3BvaW50KFdURk1vdmUodW5jYXVnaHRFeGNl
cHRpb25zQnJlYWtwb2ludCkpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0
b3JEZWJ1Z2dlckFnZW50OjpzZXRQYXVzZU9uQXNzZXJ0aW9ucyhFcnJvclN0cmluZyYgZXJyb3JT
dHJpbmcsIGJvb2wgZW5hYmxlZCwgY29uc3QgSlNPTjo6T2JqZWN0KiBvcHRpb25zUGF5bG9hZCkK
K1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNl
dFBhdXNlT25Bc3NlcnRpb25zKGJvb2wgZW5hYmxlZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBv
cHRpb25zKQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAg
IGlmICghZW5hYmxlZCkgewogICAgICAgICBtX3BhdXNlT25Bc3NlcnRpb25zQnJlYWtwb2ludCA9
IG51bGxwdHI7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAK
LSAgICBhdXRvIGJyZWFrcG9pbnQgPSBkZWJ1Z2dlckJyZWFrcG9pbnRGcm9tUGF5bG9hZChlcnJv
clN0cmluZywgb3B0aW9uc1BheWxvYWQpOworICAgIGF1dG8gYnJlYWtwb2ludCA9IGRlYnVnZ2Vy
QnJlYWtwb2ludEZyb21QYXlsb2FkKGVycm9yU3RyaW5nLCBXVEZNb3ZlKG9wdGlvbnMpKTsKICAg
ICBpZiAoIWJyZWFrcG9pbnQpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgIG1fcGF1c2VPbkFzc2VydGlvbnNCcmVha3Bv
aW50ID0gV1RGTW92ZShicmVha3BvaW50KTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQg
SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0UGF1c2VPbk1pY3JvdGFza3MoRXJyb3JTdHJpbmcm
IGVycm9yU3RyaW5nLCBib29sIGVuYWJsZWQsIGNvbnN0IEpTT046Ok9iamVjdCogb3B0aW9uc1Bh
eWxvYWQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JEZWJ1Z2dlckFn
ZW50OjpzZXRQYXVzZU9uTWljcm90YXNrcyhib29sIGVuYWJsZWQsIFJlZlB0cjxKU09OOjpPYmpl
Y3Q+JiYgb3B0aW9ucykKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7
CisKICAgICBpZiAoIWVuYWJsZWQpIHsKICAgICAgICAgbV9wYXVzZU9uTWljcm90YXNrc0JyZWFr
cG9pbnQgPSBudWxscHRyOwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB7IH07CiAg
ICAgfQogCi0gICAgYXV0byBicmVha3BvaW50ID0gZGVidWdnZXJCcmVha3BvaW50RnJvbVBheWxv
YWQoZXJyb3JTdHJpbmcsIG9wdGlvbnNQYXlsb2FkKTsKKyAgICBhdXRvIGJyZWFrcG9pbnQgPSBk
ZWJ1Z2dlckJyZWFrcG9pbnRGcm9tUGF5bG9hZChlcnJvclN0cmluZywgV1RGTW92ZShvcHRpb25z
KSk7CiAgICAgaWYgKCFicmVha3BvaW50KQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVy
biBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAgICBtX3BhdXNlT25NaWNyb3Rhc2tz
QnJlYWtwb2ludCA9IFdURk1vdmUoYnJlYWtwb2ludCk7CisKKyAgICByZXR1cm4geyB9OwogfQog
Ci12b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmV2YWx1YXRlT25DYWxsRnJhbWUoRXJyb3JT
dHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGNhbGxGcmFtZUlkLCBjb25zdCBTdHJp
bmcmIGV4cHJlc3Npb24sIGNvbnN0IFN0cmluZyogb2JqZWN0R3JvdXAsIGNvbnN0IGJvb2wqIGlu
Y2x1ZGVDb21tYW5kTGluZUFQSSwgY29uc3QgYm9vbCogZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0Fu
ZE11dGVDb25zb2xlLCBjb25zdCBib29sKiByZXR1cm5CeVZhbHVlLCBjb25zdCBib29sKiBnZW5l
cmF0ZVByZXZpZXcsIGNvbnN0IGJvb2wqIHNhdmVSZXN1bHQsIGNvbnN0IGJvb2wqIC8qIGVtdWxh
dGVVc2VyR2VzdHVyZSAqLywgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+
JiByZXN1bHQsIE9wdGlvbmFsPGJvb2w+JiB3YXNUaHJvd24sIE9wdGlvbmFsPGludD4mIHNhdmVk
UmVzdWx0SW5kZXgpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxzdGQ6OnR1cGxlPFJlZjxQcm90
b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiwgT3B0aW9uYWw8Ym9vbD4gLyogd2FzVGhyb3du
ICovLCBPcHRpb25hbDxpbnQ+IC8qIHNhdmVkUmVzdWx0SW5kZXggKi8+PiBJbnNwZWN0b3JEZWJ1
Z2dlckFnZW50OjpldmFsdWF0ZU9uQ2FsbEZyYW1lKGNvbnN0IFByb3RvY29sOjpEZWJ1Z2dlcjo6
Q2FsbEZyYW1lSWQmIGNhbGxGcmFtZUlkLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIGNvbnN0
IFN0cmluZyYgb2JqZWN0R3JvdXAsIE9wdGlvbmFsPGJvb2w+JiYgaW5jbHVkZUNvbW1hbmRMaW5l
QVBJLCBPcHRpb25hbDxib29sPiYmIGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29s
ZSwgT3B0aW9uYWw8Ym9vbD4mJiByZXR1cm5CeVZhbHVlLCBPcHRpb25hbDxib29sPiYmIGdlbmVy
YXRlUHJldmlldywgT3B0aW9uYWw8Ym9vbD4mJiBzYXZlUmVzdWx0LCBPcHRpb25hbDxib29sPiYm
ICAvKiBlbXVsYXRlVXNlckdlc3R1cmUgKi8pCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5n
IGVycm9yU3RyaW5nOworCiAgICAgaWYgKCFhc3NlcnRQYXVzZWQoZXJyb3JTdHJpbmcpKQotICAg
ICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7
CiAKICAgICBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdCA9IG1faW5qZWN0ZWRTY3JpcHRN
YW5hZ2VyLmluamVjdGVkU2NyaXB0Rm9yT2JqZWN0SWQoY2FsbEZyYW1lSWQpOwotICAgIGlmIChp
bmplY3RlZFNjcmlwdC5oYXNOb1ZhbHVlKCkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWlz
c2luZyBpbmplY3RlZCBzY3JpcHQgZm9yIGdpdmVuIGNhbGxGcmFtZUlkIl9zOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQorICAgIGlmIChpbmplY3RlZFNjcmlwdC5oYXNOb1ZhbHVlKCkpCisgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTWlzc2luZyBpbmplY3RlZCBzY3JpcHQgZm9yIGdp
dmVuIGNhbGxGcmFtZUlkIl9zKTsKIAogICAgIEpTQzo6RGVidWdnZXI6OlRlbXBvcmFyaWx5RGlz
YWJsZUV4Y2VwdGlvbkJyZWFrcG9pbnRzIHRlbXBvcmFyaWx5RGlzYWJsZUV4Y2VwdGlvbkJyZWFr
cG9pbnRzKG1fZGVidWdnZXIpOwogCkBAIC05NjYsMjggKzEwMDYsMzEgQEAgdm9pZCBJbnNwZWN0
b3JEZWJ1Z2dlckFnZW50OjpldmFsdWF0ZU9uQ2FsbEZyYW1lKEVycm9yU3RyaW5nJiBlcnJvclN0
cmluZywgY29uc3QKICAgICAgICAgbXV0ZUNvbnNvbGUoKTsKICAgICB9CiAKLSAgICBpbmplY3Rl
ZFNjcmlwdC5ldmFsdWF0ZU9uQ2FsbEZyYW1lKGVycm9yU3RyaW5nLCBtX2N1cnJlbnRDYWxsU3Rh
Y2suZ2V0KCksIGNhbGxGcmFtZUlkLCBleHByZXNzaW9uLAotICAgICAgICBvYmplY3RHcm91cCA/
ICpvYmplY3RHcm91cCA6IGVtcHR5U3RyaW5nKCksIGluY2x1ZGVDb21tYW5kTGluZUFQSSAmJiAq
aW5jbHVkZUNvbW1hbmRMaW5lQVBJLCByZXR1cm5CeVZhbHVlICYmICpyZXR1cm5CeVZhbHVlLCBn
ZW5lcmF0ZVByZXZpZXcgJiYgKmdlbmVyYXRlUHJldmlldywgc2F2ZVJlc3VsdCAmJiAqc2F2ZVJl
c3VsdCwKLSAgICAgICAgcmVzdWx0LCB3YXNUaHJvd24sIHNhdmVkUmVzdWx0SW5kZXgpOworICAg
IFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiByZXN1bHQ7CisgICAgT3B0
aW9uYWw8Ym9vbD4gd2FzVGhyb3duOworICAgIE9wdGlvbmFsPGludD4gc2F2ZWRSZXN1bHRJbmRl
eDsKKworICAgIGluamVjdGVkU2NyaXB0LmV2YWx1YXRlT25DYWxsRnJhbWUoZXJyb3JTdHJpbmcs
IG1fY3VycmVudENhbGxTdGFjay5nZXQoKSwgY2FsbEZyYW1lSWQsIGV4cHJlc3Npb24sIG9iamVj
dEdyb3VwLCBpbmNsdWRlQ29tbWFuZExpbmVBUEkudmFsdWVPcihmYWxzZSksIHJldHVybkJ5VmFs
dWUudmFsdWVPcihmYWxzZSksIGdlbmVyYXRlUHJldmlldy52YWx1ZU9yKGZhbHNlKSwgc2F2ZVJl
c3VsdC52YWx1ZU9yKGZhbHNlKSwgcmVzdWx0LCB3YXNUaHJvd24sIHNhdmVkUmVzdWx0SW5kZXgp
OwogCiAgICAgaWYgKHBhdXNlQW5kTXV0ZSkKICAgICAgICAgdW5tdXRlQ29uc29sZSgpOworCisg
ICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmlu
Zyk7CisKKyAgICByZXR1cm4geyB7IHJlc3VsdC5yZWxlYXNlTm9uTnVsbCgpLCBXVEZNb3ZlKHdh
c1Rocm93biksIFdURk1vdmUoc2F2ZWRSZXN1bHRJbmRleCkgfSB9OwogfQogCi12b2lkIEluc3Bl
Y3RvckRlYnVnZ2VyQWdlbnQ6OnNldFNob3VsZEJsYWNrYm94VVJMKEVycm9yU3RyaW5nJiBlcnJv
clN0cmluZywgY29uc3QgU3RyaW5nJiB1cmwsIGJvb2wgc2hvdWxkQmxhY2tib3gsIGNvbnN0IGJv
b2wqIG9wdGlvbmFsQ2FzZVNlbnNpdGl2ZSwgY29uc3QgYm9vbCogb3B0aW9uYWxJc1JlZ2V4KQor
UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0
U2hvdWxkQmxhY2tib3hVUkwoY29uc3QgU3RyaW5nJiB1cmwsIGJvb2wgc2hvdWxkQmxhY2tib3gs
IE9wdGlvbmFsPGJvb2w+JiYgb3B0aW9uYWxDYXNlU2Vuc2l0aXZlLCBPcHRpb25hbDxib29sPiYm
IG9wdGlvbmFsSXNSZWdleCkKIHsKLSAgICBpZiAodXJsLmlzRW1wdHkoKSkgewotICAgICAgICBl
cnJvclN0cmluZyA9ICJVUkwgbXVzdCBub3QgYmUgZW1wdHkiX3M7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9CisgICAgaWYgKHVybC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBl
Y3RlZCgiVVJMIG11c3Qgbm90IGJlIGVtcHR5Il9zKTsKIAotICAgIGJvb2wgY2FzZVNlbnNpdGl2
ZSA9IG9wdGlvbmFsQ2FzZVNlbnNpdGl2ZSAmJiAqb3B0aW9uYWxDYXNlU2Vuc2l0aXZlOwotICAg
IGJvb2wgaXNSZWdleCA9IG9wdGlvbmFsSXNSZWdleCAmJiAqb3B0aW9uYWxJc1JlZ2V4OworICAg
IGJvb2wgY2FzZVNlbnNpdGl2ZSA9IG9wdGlvbmFsQ2FzZVNlbnNpdGl2ZS52YWx1ZU9yKGZhbHNl
KTsKKyAgICBib29sIGlzUmVnZXggPSBvcHRpb25hbElzUmVnZXgudmFsdWVPcihmYWxzZSk7CiAK
LSAgICBpZiAoIWNhc2VTZW5zaXRpdmUgJiYgIWlzUmVnZXggJiYgaXNXZWJLaXRJbmplY3RlZFNj
cmlwdCh1cmwpKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIkJsYWNrYm94aW5nIG9mIGludGVy
bmFsIHNjcmlwdHMgaXMgY29udHJvbGxlZCBieSAnRGVidWdnZXIuc2V0UGF1c2VGb3JJbnRlcm5h
bFNjcmlwdHMnIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghY2FzZVNlbnNp
dGl2ZSAmJiAhaXNSZWdleCAmJiBpc1dlYktpdEluamVjdGVkU2NyaXB0KHVybCkpCisgICAgICAg
IHJldHVybiBtYWtlVW5leHBlY3RlZCgiQmxhY2tib3hpbmcgb2YgaW50ZXJuYWwgc2NyaXB0cyBp
cyBjb250cm9sbGVkIGJ5ICdEZWJ1Z2dlci5zZXRQYXVzZUZvckludGVybmFsU2NyaXB0cyciX3Mp
OwogCiAgICAgQmxhY2tib3hDb25maWcgY29uZmlnIHsgdXJsLCBjYXNlU2Vuc2l0aXZlLCBpc1Jl
Z2V4IH07CiAgICAgaWYgKHNob3VsZEJsYWNrYm94KQpAQCAtMTAwNCw2ICsxMDQ3LDggQEAgdm9p
ZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZXRTaG91bGRCbGFja2JveFVSTChFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcsIGNvbnMKICAgICAgICAgICAgIGJsYWNrYm94VHlwZSA9IEpTQzo6RGVi
dWdnZXI6OkJsYWNrYm94VHlwZTo6RGVmZXJyZWQ7CiAgICAgICAgIG1fZGVidWdnZXIuc2V0Qmxh
Y2tib3hUeXBlKHNvdXJjZUlELCBibGFja2JveFR5cGUpOwogICAgIH0KKworICAgIHJldHVybiB7
IH07CiB9CiAKIGJvb2wgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2hvdWxkQmxhY2tib3hVUkwo
Y29uc3QgU3RyaW5nJiB1cmwpIGNvbnN0CkBAIC0xMDM5LDEwICsxMDg0LDEwIEBAIFN0cmluZyBJ
bnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojpzb3VyY2VNYXBVUkxGb3JTY3JpcHQoY29uc3QgSlNDOjpE
ZWJ1Z2dlcjo6U2NyaXB0CiAgICAgcmV0dXJuIHNjcmlwdC5zb3VyY2VNYXBwaW5nVVJMOwogfQog
Ci12b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldFBhdXNlRm9ySW50ZXJuYWxTY3JpcHRz
KEVycm9yU3RyaW5nJiwgYm9vbCBzaG91bGRQYXVzZSkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09y
PHZvaWQ+IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldFBhdXNlRm9ySW50ZXJuYWxTY3JpcHRz
KGJvb2wgc2hvdWxkUGF1c2UpCiB7CiAgICAgaWYgKHNob3VsZFBhdXNlID09IG1fcGF1c2VGb3JJ
bnRlcm5hbFNjcmlwdHMpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAog
ICAgIG1fcGF1c2VGb3JJbnRlcm5hbFNjcmlwdHMgPSBzaG91bGRQYXVzZTsKIApAQCAtMTA1Miw2
ICsxMDk3LDggQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZXRQYXVzZUZvckludGVy
bmFsU2NyaXB0cyhFcnJvclN0cmluZyYsIGJvb2wgc2hvdWwKICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICBtX2RlYnVnZ2VyLnNldEJsYWNrYm94VHlwZShzb3VyY2VJRCwgYmxhY2tib3hU
eXBlKTsKICAgICB9CisKKyAgICByZXR1cm4geyB9OwogfQogCiB2b2lkIEluc3BlY3RvckRlYnVn
Z2VyQWdlbnQ6OmRpZFBhcnNlU291cmNlKEpTQzo6U291cmNlSUQgc291cmNlSUQsIGNvbnN0IEpT
Qzo6RGVidWdnZXI6OlNjcmlwdCYgc2NyaXB0KQpAQCAtMTA2MSwxMiArMTEwOCw3IEBAIHZvaWQg
SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlkUGFyc2VTb3VyY2UoSlNDOjpTb3VyY2VJRCBzb3Vy
Y2VJRCwgY29uc3QgSlNDOjpECiAgICAgU3RyaW5nIHNvdXJjZVVSTCA9IHNjcmlwdC5zb3VyY2VV
Ukw7CiAgICAgU3RyaW5nIHNvdXJjZU1hcHBpbmdVUkwgPSBzb3VyY2VNYXBVUkxGb3JTY3JpcHQo
c2NyaXB0KTsKIAotICAgIGNvbnN0IGJvb2wgaXNNb2R1bGUgPSBzY3JpcHQuc291cmNlUHJvdmlk
ZXItPnNvdXJjZVR5cGUoKSA9PSBKU0M6OlNvdXJjZVByb3ZpZGVyU291cmNlVHlwZTo6TW9kdWxl
OwotICAgIGNvbnN0IGJvb2wqIGlzQ29udGVudFNjcmlwdCA9IHNjcmlwdC5pc0NvbnRlbnRTY3Jp
cHQgPyAmc2NyaXB0LmlzQ29udGVudFNjcmlwdCA6IG51bGxwdHI7Ci0gICAgU3RyaW5nKiBzb3Vy
Y2VVUkxQYXJhbSA9IGhhc1NvdXJjZVVSTCA/ICZzb3VyY2VVUkwgOiBudWxscHRyOwotICAgIFN0
cmluZyogc291cmNlTWFwVVJMUGFyYW0gPSBzb3VyY2VNYXBwaW5nVVJMLmlzRW1wdHkoKSA/IG51
bGxwdHIgOiAmc291cmNlTWFwcGluZ1VSTDsKLQotICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5z
Y3JpcHRQYXJzZWQoc2NyaXB0SURTdHIsIHNjcmlwdC51cmwsIHNjcmlwdC5zdGFydExpbmUsIHNj
cmlwdC5zdGFydENvbHVtbiwgc2NyaXB0LmVuZExpbmUsIHNjcmlwdC5lbmRDb2x1bW4sIGlzQ29u
dGVudFNjcmlwdCwgc291cmNlVVJMUGFyYW0sIHNvdXJjZU1hcFVSTFBhcmFtLCBpc01vZHVsZSA/
ICZpc01vZHVsZSA6IG51bGxwdHIpOworICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5zY3JpcHRQ
YXJzZWQoc2NyaXB0SURTdHIsIHNjcmlwdC51cmwsIHNjcmlwdC5zdGFydExpbmUsIHNjcmlwdC5z
dGFydENvbHVtbiwgc2NyaXB0LmVuZExpbmUsIHNjcmlwdC5lbmRDb2x1bW4sIHNjcmlwdC5pc0Nv
bnRlbnRTY3JpcHQsIHNvdXJjZVVSTCwgc291cmNlTWFwcGluZ1VSTCwgc2NyaXB0LnNvdXJjZVBy
b3ZpZGVyLT5zb3VyY2VUeXBlKCkgPT0gSlNDOjpTb3VyY2VQcm92aWRlclNvdXJjZVR5cGU6Ok1v
ZHVsZSk7CiAKICAgICBtX3NjcmlwdHMuc2V0KHNvdXJjZUlELCBzY3JpcHQpOwogCkBAIC0xMTgw
LDEyICsxMjIyLDEzIEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlkUGF1c2UoSlND
OjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkRlCiAgICAgICAgIGlmIChhdXRv
IGRlYnVnZ2VyQnJlYWtwb2ludElkID0gbV9kZWJ1Z2dlci5wYXVzaW5nQnJlYWtwb2ludElEKCkp
IHsKICAgICAgICAgICAgIEFTU0VSVCghbV9jb250aW51ZVRvTG9jYXRpb25EZWJ1Z2dlckJyZWFr
cG9pbnQgfHwgZGVidWdnZXJCcmVha3BvaW50SWQgIT0gbV9jb250aW51ZVRvTG9jYXRpb25EZWJ1
Z2dlckJyZWFrcG9pbnQtPmlkKCkpOwogICAgICAgICAgICAgZGF0YSA9IEpTT046Ok9iamVjdDo6
Y3JlYXRlKCk7Ci0gICAgICAgICAgICBkYXRhLT5zZXRTdHJpbmcoIm9yaWdpbmFsUmVhc29uIl9z
LCBQcm90b2NvbDo6SW5zcGVjdG9ySGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUoRGVidWdn
ZXJGcm9udGVuZERpc3BhdGNoZXI6OlJlYXNvbjo6QnJlYWtwb2ludCkpOwotICAgICAgICAgICAg
ZGF0YS0+c2V0VmFsdWUoIm9yaWdpbmFsRGF0YSJfcywgYnVpbGRCcmVha3BvaW50UGF1c2VSZWFz
b24oZGVidWdnZXJCcmVha3BvaW50SWQpKTsKKyAgICAgICAgICAgIGRhdGEtPnNldFN0cmluZygi
b3JpZ2luYWxSZWFzb24iX3MsIFByb3RvY29sOjpIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1
ZShEZWJ1Z2dlckZyb250ZW5kRGlzcGF0Y2hlcjo6UmVhc29uOjpCcmVha3BvaW50KSk7CisgICAg
ICAgICAgICBpZiAoYXV0byBwYXVzZVJlYXNvbiA9IGJ1aWxkQnJlYWtwb2ludFBhdXNlUmVhc29u
KGRlYnVnZ2VyQnJlYWtwb2ludElkKSkKKyAgICAgICAgICAgICAgICBkYXRhLT5zZXRWYWx1ZSgi
b3JpZ2luYWxEYXRhIl9zLCBwYXVzZVJlYXNvbi5yZWxlYXNlTm9uTnVsbCgpKTsKICAgICAgICAg
fSBlbHNlIGlmIChtX3ByZUJsYWNrYm94UGF1c2VEYXRhKSB7CiAgICAgICAgICAgICBkYXRhID0g
SlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICAgICAgICAgIGRhdGEtPnNldFN0cmluZygib3Jp
Z2luYWxSZWFzb24iX3MsIFByb3RvY29sOjpJbnNwZWN0b3JIZWxwZXJzOjpnZXRFbnVtQ29uc3Rh
bnRWYWx1ZShtX3ByZUJsYWNrYm94UGF1c2VSZWFzb24pKTsKLSAgICAgICAgICAgIGRhdGEtPnNl
dFZhbHVlKCJvcmlnaW5hbERhdGEiX3MsIG1fcHJlQmxhY2tib3hQYXVzZURhdGEpOworICAgICAg
ICAgICAgZGF0YS0+c2V0U3RyaW5nKCJvcmlnaW5hbFJlYXNvbiJfcywgUHJvdG9jb2w6OkhlbHBl
cnM6OmdldEVudW1Db25zdGFudFZhbHVlKG1fcHJlQmxhY2tib3hQYXVzZVJlYXNvbikpOworICAg
ICAgICAgICAgZGF0YS0+c2V0VmFsdWUoIm9yaWdpbmFsRGF0YSJfcywgbV9wcmVCbGFja2JveFBh
dXNlRGF0YS5yZWxlYXNlTm9uTnVsbCgpKTsKICAgICAgICAgfQogICAgICAgICB1cGRhdGVQYXVz
ZVJlYXNvbkFuZERhdGEoRGVidWdnZXJGcm9udGVuZERpc3BhdGNoZXI6OlJlYXNvbjo6QmxhY2ti
b3hlZFNjcmlwdCwgV1RGTW92ZShkYXRhKSk7CiAgICAgfQpAQCAtMTIwNiw3ICsxMjQ5LDcgQEAg
dm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkaWRQYXVzZShKU0M6OkpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTQzo6RGUKICAgICAgICAgICAgIGFzeW5jU3RhY2tUcmFjZSA9IGl0
LT52YWx1ZS0+YnVpbGRJbnNwZWN0b3JPYmplY3QoKTsKICAgICB9CiAKLSAgICBtX2Zyb250ZW5k
RGlzcGF0Y2hlci0+cGF1c2VkKGN1cnJlbnRDYWxsRnJhbWVzKGluamVjdGVkU2NyaXB0KSwgbV9w
YXVzZVJlYXNvbiwgbV9wYXVzZURhdGEsIGFzeW5jU3RhY2tUcmFjZSk7CisgICAgbV9mcm9udGVu
ZERpc3BhdGNoZXItPnBhdXNlZChjdXJyZW50Q2FsbEZyYW1lcyhpbmplY3RlZFNjcmlwdCksIFBy
b3RvY29sOjpIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShtX3BhdXNlUmVhc29uKSwgbV9w
YXVzZURhdGEuY29weVJlZigpLCBXVEZNb3ZlKGFzeW5jU3RhY2tUcmFjZSkpOwogCiAgICAgbV9q
YXZhU2NyaXB0UGF1c2VTY2hlZHVsZWQgPSBmYWxzZTsKIApAQCAtMTIzMSwxMiArMTI3NCwxNSBA
QCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmJyZWFrcG9pbnRBY3Rpb25Qcm9iZShKU0M6
OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYgogewogICAgIEluamVjdGVkU2NyaXB0IGluamVjdGVk
U2NyaXB0ID0gbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIuaW5qZWN0ZWRTY3JpcHRGb3IoZ2xvYmFs
T2JqZWN0KTsKICAgICBhdXRvIHBheWxvYWQgPSBpbmplY3RlZFNjcmlwdC53cmFwT2JqZWN0KHNh
bXBsZSwgb2JqZWN0R3JvdXBGb3JCcmVha3BvaW50QWN0aW9uKGFjdGlvbklEKSwgdHJ1ZSk7Cisg
ICAgaWYgKCFwYXlsb2FkKQorICAgICAgICByZXR1cm47CisKICAgICBhdXRvIHJlc3VsdCA9IFBy
b3RvY29sOjpEZWJ1Z2dlcjo6UHJvYmVTYW1wbGU6OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRQcm9i
ZUlkKGFjdGlvbklEKQogICAgICAgICAuc2V0QmF0Y2hJZChiYXRjaElkKQogICAgICAgICAuc2V0
U2FtcGxlSWQoc2FtcGxlSWQpCiAgICAgICAgIC5zZXRUaW1lc3RhbXAobV9pbmplY3RlZFNjcmlw
dE1hbmFnZXIuaW5zcGVjdG9yRW52aXJvbm1lbnQoKS5leGVjdXRpb25TdG9wd2F0Y2goKS5lbGFw
c2VkVGltZSgpLnNlY29uZHMoKSkKLSAgICAgICAgLnNldFBheWxvYWQoV1RGTW92ZShwYXlsb2Fk
KSkKKyAgICAgICAgLnNldFBheWxvYWQocGF5bG9hZC5yZWxlYXNlTm9uTnVsbCgpKQogICAgICAg
ICAucmVsZWFzZSgpOwogICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5kaWRTYW1wbGVQcm9iZShX
VEZNb3ZlKHJlc3VsdCkpOwogfQpAQCAtMTI2Nyw5ICsxMzEzLDggQEAgdm9pZCBJbnNwZWN0b3JE
ZWJ1Z2dlckFnZW50OjpicmVha1Byb2dyYW0oRGVidWdnZXJGcm9udGVuZERpc3BhdGNoZXI6OlJl
YXNvbiByZWEKIAogdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpjbGVhckluc3BlY3RvckJy
ZWFrcG9pbnRTdGF0ZSgpCiB7Ci0gICAgRXJyb3JTdHJpbmcgaWdub3JlZDsKICAgICBmb3IgKGF1
dG8mIHByb3RvY29sQnJlYWtwb2ludElEIDogY29weVRvVmVjdG9yKG1fZGVidWdnZXJCcmVha3Bv
aW50c0ZvclByb3RvY29sQnJlYWtwb2ludElELmtleXMoKSkpCi0gICAgICAgIHJlbW92ZUJyZWFr
cG9pbnQoaWdub3JlZCwgcHJvdG9jb2xCcmVha3BvaW50SUQpOworICAgICAgICByZW1vdmVCcmVh
a3BvaW50KHByb3RvY29sQnJlYWtwb2ludElEKTsKIAogICAgIG1fcHJvdG9jb2xCcmVha3BvaW50
Rm9yUHJvdG9jb2xCcmVha3BvaW50SUQuY2xlYXIoKTsKIApAQCAtMTMxNyw3ICsxMzYyLDcgQEAg
dm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkaWRDbGVhckdsb2JhbE9iamVjdCgpCiAgICAg
bV9mcm9udGVuZERpc3BhdGNoZXItPmdsb2JhbE9iamVjdENsZWFyZWQoKTsKIH0KIAotYm9vbCBJ
bnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojphc3NlcnRQYXVzZWQoRXJyb3JTdHJpbmcmIGVycm9yU3Ry
aW5nKQorYm9vbCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojphc3NlcnRQYXVzZWQoUHJvdG9jb2w6
OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZykKIHsKICAgICBpZiAoIW1fcGF1c2VkR2xvYmFsT2Jq
ZWN0KSB7CiAgICAgICAgIGVycm9yU3RyaW5nID0gIk11c3QgYmUgcGF1c2VkIl9zOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRGVi
dWdnZXJBZ2VudC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5z
cGVjdG9yRGVidWdnZXJBZ2VudC5oCmluZGV4IDMwZmY5ZjNjMjZkMWFlMDQ2NmE3MWE1YmY2MzY2
MTgyOTU0ZmEyZDguLjRmYzNmODRhNmUyMTJiODg1YjZhMmYzMjhmODFlZGY3NWY5MGE0NmMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2Fn
ZW50cy9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmgKQEAgLTQ4LDcgKzQ4LDYgQEAgbmFtZXNwYWNl
IEluc3BlY3RvciB7CiBjbGFzcyBBc3luY1N0YWNrVHJhY2U7CiBjbGFzcyBJbmplY3RlZFNjcmlw
dDsKIGNsYXNzIEluamVjdGVkU2NyaXB0TWFuYWdlcjsKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3Ry
aW5nOwogCiBjbGFzcyBKU19FWFBPUlRfUFJJVkFURSBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50IDog
cHVibGljIEluc3BlY3RvckFnZW50QmFzZSwgcHVibGljIERlYnVnZ2VyQmFja2VuZERpc3BhdGNo
ZXJIYW5kbGVyLCBwdWJsaWMgSlNDOjpEZWJ1Z2dlcjo6T2JzZXJ2ZXIgewogICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKEluc3BlY3RvckRlYnVnZ2VyQWdlbnQpOwpAQCAtNTYsNyArNTUsNyBAQCBj
bGFzcyBKU19FWFBPUlRfUFJJVkFURSBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50IDogcHVibGljIElu
c3BlY3RvckFnZW50QmFzZSwgcHVibAogcHVibGljOgogICAgIH5JbnNwZWN0b3JEZWJ1Z2dlckFn
ZW50KCkgb3ZlcnJpZGU7CiAKLSAgICBzdGF0aWMgUmVmUHRyPEpTQzo6QnJlYWtwb2ludD4gZGVi
dWdnZXJCcmVha3BvaW50RnJvbVBheWxvYWQoRXJyb3JTdHJpbmcmLCBjb25zdCBKU09OOjpPYmpl
Y3QqIG9wdGlvbnNQYXlsb2FkKTsKKyAgICBzdGF0aWMgUmVmUHRyPEpTQzo6QnJlYWtwb2ludD4g
ZGVidWdnZXJCcmVha3BvaW50RnJvbVBheWxvYWQoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiwgUmVm
UHRyPEpTT046Ok9iamVjdD4mJiBvcHRpb25zKTsKIAogICAgIHN0YXRpYyBjb25zdCBjaGFyKiBj
b25zdCBiYWNrdHJhY2VPYmplY3RHcm91cDsKIApAQCAtNjYsMzEgKzY1LDMxIEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIGJvb2wgZW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZW5hYmxlZDsgfQog
CiAgICAgLy8gRGVidWdnZXJCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIKLSAgICB2b2lkIGVuYWJs
ZShFcnJvclN0cmluZyYpIGZpbmFsOwotICAgIHZvaWQgZGlzYWJsZShFcnJvclN0cmluZyYpIGZp
bmFsOwotICAgIHZvaWQgc2V0QXN5bmNTdGFja1RyYWNlRGVwdGgoRXJyb3JTdHJpbmcmLCBpbnQg
ZGVwdGgpIGZpbmFsOwotICAgIHZvaWQgc2V0QnJlYWtwb2ludHNBY3RpdmUoRXJyb3JTdHJpbmcm
LCBib29sIGFjdGl2ZSkgZmluYWw7Ci0gICAgdm9pZCBzZXRCcmVha3BvaW50QnlVcmwoRXJyb3JT
dHJpbmcmLCBpbnQgbGluZU51bWJlciwgY29uc3QgU3RyaW5nKiBvcHRpb25hbFVSTCwgY29uc3Qg
U3RyaW5nKiBvcHRpb25hbFVSTFJlZ2V4LCBjb25zdCBpbnQqIG9wdGlvbmFsQ29sdW1uTnVtYmVy
LCBjb25zdCBKU09OOjpPYmplY3QqIG9wdGlvbnMsIFByb3RvY29sOjpEZWJ1Z2dlcjo6QnJlYWtw
b2ludElkKiwgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkRlYnVnZ2VyOjpMb2NhdGlv
bj4+JiBsb2NhdGlvbnMpIGZpbmFsOwotICAgIHZvaWQgc2V0QnJlYWtwb2ludChFcnJvclN0cmlu
ZyYsIGNvbnN0IEpTT046Ok9iamVjdCYgbG9jYXRpb24sIGNvbnN0IEpTT046Ok9iamVjdCogb3B0
aW9ucywgUHJvdG9jb2w6OkRlYnVnZ2VyOjpCcmVha3BvaW50SWQqIG91dEJyZWFrcG9pbnRJZCwg
UmVmUHRyPFByb3RvY29sOjpEZWJ1Z2dlcjo6TG9jYXRpb24+JiBvdXRBY3R1YWxMb2NhdGlvbikg
ZmluYWw7Ci0gICAgdm9pZCByZW1vdmVCcmVha3BvaW50KEVycm9yU3RyaW5nJiwgY29uc3QgU3Ry
aW5nJiBicmVha3BvaW50SWRlbnRpZmllcikgZmluYWw7Ci0gICAgdm9pZCBjb250aW51ZVVudGls
TmV4dFJ1bkxvb3AoRXJyb3JTdHJpbmcmKSBmaW5hbDsKLSAgICB2b2lkIGNvbnRpbnVlVG9Mb2Nh
dGlvbihFcnJvclN0cmluZyYsIGNvbnN0IEpTT046Ok9iamVjdCYgbG9jYXRpb24pIGZpbmFsOwot
ICAgIHZvaWQgc3RlcE5leHQoRXJyb3JTdHJpbmcmKSBmaW5hbDsKLSAgICB2b2lkIHN0ZXBPdmVy
KEVycm9yU3RyaW5nJikgZmluYWw7Ci0gICAgdm9pZCBzdGVwSW50byhFcnJvclN0cmluZyYpIGZp
bmFsOwotICAgIHZvaWQgc3RlcE91dChFcnJvclN0cmluZyYpIGZpbmFsOwotICAgIHZvaWQgcGF1
c2UoRXJyb3JTdHJpbmcmKSBmaW5hbDsKLSAgICB2b2lkIHJlc3VtZShFcnJvclN0cmluZyYpIGZp
bmFsOwotICAgIHZvaWQgc2VhcmNoSW5Db250ZW50KEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5n
JiBzY3JpcHRJRCwgY29uc3QgU3RyaW5nJiBxdWVyeSwgY29uc3QgYm9vbCogb3B0aW9uYWxDYXNl
U2Vuc2l0aXZlLCBjb25zdCBib29sKiBvcHRpb25hbElzUmVnZXgsIFJlZlB0cjxKU09OOjpBcnJh
eU9mPFByb3RvY29sOjpHZW5lcmljVHlwZXM6OlNlYXJjaE1hdGNoPj4mKSBmaW5hbDsKLSAgICB2
b2lkIGdldFNjcmlwdFNvdXJjZShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgc2NyaXB0SUQs
IFN0cmluZyogc2NyaXB0U291cmNlKSBmaW5hbDsKLSAgICB2b2lkIGdldEZ1bmN0aW9uRGV0YWls
cyhFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgZnVuY3Rpb25JZCwgUmVmUHRyPFByb3RvY29s
OjpEZWJ1Z2dlcjo6RnVuY3Rpb25EZXRhaWxzPiYpIGZpbmFsOwotICAgIHZvaWQgc2V0UGF1c2VP
bkRlYnVnZ2VyU3RhdGVtZW50cyhFcnJvclN0cmluZyYsIGJvb2wgZW5hYmxlZCwgY29uc3QgSlNP
Tjo6T2JqZWN0KiBvcHRpb25zKSBmaW5hbDsKLSAgICB2b2lkIHNldFBhdXNlT25FeGNlcHRpb25z
KEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBwYXVzZVN0YXRlLCBjb25zdCBKU09OOjpPYmpl
Y3QqIG9wdGlvbnMpIGZpbmFsOwotICAgIHZvaWQgc2V0UGF1c2VPbkFzc2VydGlvbnMoRXJyb3JT
dHJpbmcmLCBib29sIGVuYWJsZWQsIGNvbnN0IEpTT046Ok9iamVjdCogb3B0aW9ucykgZmluYWw7
Ci0gICAgdm9pZCBzZXRQYXVzZU9uTWljcm90YXNrcyhFcnJvclN0cmluZyYsIGJvb2wgZW5hYmxl
ZCwgY29uc3QgSlNPTjo6T2JqZWN0KiBvcHRpb25zKSBmaW5hbDsKLSAgICB2b2lkIHNldFBhdXNl
Rm9ySW50ZXJuYWxTY3JpcHRzKEVycm9yU3RyaW5nJiwgYm9vbCBzaG91bGRQYXVzZSkgZmluYWw7
Ci0gICAgdm9pZCBldmFsdWF0ZU9uQ2FsbEZyYW1lKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5n
JiBjYWxsRnJhbWVJZCwgY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBjb25zdCBTdHJpbmcqIG9i
amVjdEdyb3VwLCBjb25zdCBib29sKiBpbmNsdWRlQ29tbWFuZExpbmVBUEksIGNvbnN0IGJvb2wq
IGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29sZSwgY29uc3QgYm9vbCogcmV0dXJu
QnlWYWx1ZSwgY29uc3QgYm9vbCogZ2VuZXJhdGVQcmV2aWV3LCBjb25zdCBib29sKiBzYXZlUmVz
dWx0LCBjb25zdCBib29sKiBlbXVsYXRlVXNlckdlc3R1cmUsIFJlZlB0cjxQcm90b2NvbDo6UnVu
dGltZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0LCBPcHRpb25hbDxib29sPiYgd2FzVGhyb3duLCBP
cHRpb25hbDxpbnQ+JiBzYXZlZFJlc3VsdEluZGV4KSBvdmVycmlkZTsKLSAgICB2b2lkIHNldFNo
b3VsZEJsYWNrYm94VVJMKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiB1cmwsIGJvb2wgc2hv
dWxkQmxhY2tib3gsIGNvbnN0IGJvb2wqIGNhc2VTZW5zaXRpdmUsIGNvbnN0IGJvb2wqIGlzUmVn
ZXgpIGZpbmFsOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGVuYWJsZSgpIGZp
bmFsOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGRpc2FibGUoKSBmaW5hbDsK
KyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzZXRBc3luY1N0YWNrVHJhY2VEZXB0
aChpbnQpIGZpbmFsOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHNldEJyZWFr
cG9pbnRzQWN0aXZlKGJvb2wpIGZpbmFsOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHN0
ZDo6dHVwbGU8UHJvdG9jb2w6OkRlYnVnZ2VyOjpCcmVha3BvaW50SWQsIFJlZjxKU09OOjpBcnJh
eU9mPFByb3RvY29sOjpEZWJ1Z2dlcjo6TG9jYXRpb24+Pj4+IHNldEJyZWFrcG9pbnRCeVVybChp
bnQgbGluZU51bWJlciwgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgdXJsUmVnZXgs
IE9wdGlvbmFsPGludD4mJiBjb2x1bW5OdW1iZXIsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgb3B0
aW9ucykgZmluYWw7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8c3RkOjp0dXBsZTxQcm90
b2NvbDo6RGVidWdnZXI6OkJyZWFrcG9pbnRJZCwgUmVmPFByb3RvY29sOjpEZWJ1Z2dlcjo6TG9j
YXRpb24+Pj4gc2V0QnJlYWtwb2ludChSZWY8SlNPTjo6T2JqZWN0PiYmIGxvY2F0aW9uLCBSZWZQ
dHI8SlNPTjo6T2JqZWN0PiYmIG9wdGlvbnMpIGZpbmFsOworICAgIFByb3RvY29sOjpFcnJvclN0
cmluZ09yPHZvaWQ+IHJlbW92ZUJyZWFrcG9pbnQoY29uc3QgUHJvdG9jb2w6OkRlYnVnZ2VyOjpC
cmVha3BvaW50SWQmKSBmaW5hbDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBj
b250aW51ZVVudGlsTmV4dFJ1bkxvb3AoKSBmaW5hbDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJp
bmdPcjx2b2lkPiBjb250aW51ZVRvTG9jYXRpb24oUmVmPEpTT046Ok9iamVjdD4mJiBsb2NhdGlv
bikgZmluYWw7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc3RlcE5leHQoKSBm
aW5hbDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzdGVwT3ZlcigpIGZpbmFs
OworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHN0ZXBJbnRvKCkgZmluYWw7Cisg
ICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc3RlcE91dCgpIGZpbmFsOworICAgIFBy
b3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHBhdXNlKCkgZmluYWw7CisgICAgUHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8dm9pZD4gcmVzdW1lKCkgZmluYWw7CisgICAgUHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8UmVmPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkdlbmVyaWNUeXBlczo6U2VhcmNo
TWF0Y2g+Pj4gc2VhcmNoSW5Db250ZW50KGNvbnN0IFByb3RvY29sOjpEZWJ1Z2dlcjo6U2NyaXB0
SWQmLCBjb25zdCBTdHJpbmcmIHF1ZXJ5LCBPcHRpb25hbDxib29sPiYmIGNhc2VTZW5zaXRpdmUs
IE9wdGlvbmFsPGJvb2w+JiYgaXNSZWdleCkgZmluYWw7CisgICAgUHJvdG9jb2w6OkVycm9yU3Ry
aW5nT3I8U3RyaW5nPiBnZXRTY3JpcHRTb3VyY2UoY29uc3QgUHJvdG9jb2w6OkRlYnVnZ2VyOjpT
Y3JpcHRJZCYpIGZpbmFsOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxQcm90b2Nv
bDo6RGVidWdnZXI6OkZ1bmN0aW9uRGV0YWlscz4+IGdldEZ1bmN0aW9uRGV0YWlscyhjb25zdCBT
dHJpbmcmIGZ1bmN0aW9uSWQpIGZpbmFsOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZv
aWQ+IHNldFBhdXNlT25EZWJ1Z2dlclN0YXRlbWVudHMoYm9vbCBlbmFibGVkLCBSZWZQdHI8SlNP
Tjo6T2JqZWN0PiYmIG9wdGlvbnMpIGZpbmFsOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09y
PHZvaWQ+IHNldFBhdXNlT25FeGNlcHRpb25zKGNvbnN0IFN0cmluZyYgc3RhdGUsIFJlZlB0cjxK
U09OOjpPYmplY3Q+JiYgb3B0aW9ucykgZmluYWw7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5n
T3I8dm9pZD4gc2V0UGF1c2VPbkFzc2VydGlvbnMoYm9vbCBlbmFibGVkLCBSZWZQdHI8SlNPTjo6
T2JqZWN0PiYmIG9wdGlvbnMpIGZpbmFsOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZv
aWQ+IHNldFBhdXNlT25NaWNyb3Rhc2tzKGJvb2wgZW5hYmxlZCwgUmVmUHRyPEpTT046Ok9iamVj
dD4mJiBvcHRpb25zKSBmaW5hbDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBz
ZXRQYXVzZUZvckludGVybmFsU2NyaXB0cyhib29sIHNob3VsZFBhdXNlKSBmaW5hbDsKKyAgICBQ
cm90b2NvbDo6RXJyb3JTdHJpbmdPcjxzdGQ6OnR1cGxlPFJlZjxQcm90b2NvbDo6UnVudGltZTo6
UmVtb3RlT2JqZWN0PiwgT3B0aW9uYWw8Ym9vbD4gLyogd2FzVGhyb3duICovLCBPcHRpb25hbDxp
bnQ+IC8qIHNhdmVkUmVzdWx0SW5kZXggKi8+PiBldmFsdWF0ZU9uQ2FsbEZyYW1lKGNvbnN0IFBy
b3RvY29sOjpEZWJ1Z2dlcjo6Q2FsbEZyYW1lSWQmLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24s
IGNvbnN0IFN0cmluZyYgb2JqZWN0R3JvdXAsIE9wdGlvbmFsPGJvb2w+JiYgaW5jbHVkZUNvbW1h
bmRMaW5lQVBJLCBPcHRpb25hbDxib29sPiYmIGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRl
Q29uc29sZSwgT3B0aW9uYWw8Ym9vbD4mJiByZXR1cm5CeVZhbHVlLCBPcHRpb25hbDxib29sPiYm
IGdlbmVyYXRlUHJldmlldywgT3B0aW9uYWw8Ym9vbD4mJiBzYXZlUmVzdWx0LCBPcHRpb25hbDxi
b29sPiYmIGVtdWxhdGVVc2VyR2VzdHVyZSkgb3ZlcnJpZGU7CisgICAgUHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8dm9pZD4gc2V0U2hvdWxkQmxhY2tib3hVUkwoY29uc3QgU3RyaW5nJiB1cmwsIGJv
b2wgc2hvdWxkQmxhY2tib3gsIE9wdGlvbmFsPGJvb2w+JiYgY2FzZVNlbnNpdGl2ZSwgT3B0aW9u
YWw8Ym9vbD4mJiBpc1JlZ2V4KSBmaW5hbDsKIAogICAgIC8vIEpTQzo6RGVidWdnZXI6Ok9ic2Vy
dmVyCiAgICAgdm9pZCBkaWRQYXJzZVNvdXJjZShKU0M6OlNvdXJjZUlELCBjb25zdCBKU0M6OkRl
YnVnZ2VyOjpTY3JpcHQmKSBmaW5hbDsKQEAgLTE0MiwxMSArMTQxLDExIEBAIHB1YmxpYzoKIAog
cHJvdGVjdGVkOgogICAgIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQoQWdlbnRDb250ZXh0Jik7Ci0g
ICAgdmlydHVhbCB2b2lkIGVuYWJsZSgpOwotICAgIHZpcnR1YWwgdm9pZCBkaXNhYmxlKGJvb2wg
aXNCZWluZ0Rlc3Ryb3llZCk7CisgICAgdmlydHVhbCB2b2lkIGludGVybmFsRW5hYmxlKCk7Cisg
ICAgdmlydHVhbCB2b2lkIGludGVybmFsRGlzYWJsZShib29sIGlzQmVpbmdEZXN0cm95ZWQpOwog
CiAgICAgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyJiBpbmplY3RlZFNjcmlwdE1hbmFnZXIoKSBjb25z
dCB7IHJldHVybiBtX2luamVjdGVkU2NyaXB0TWFuYWdlcjsgfQotICAgIHZpcnR1YWwgSW5qZWN0
ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHRGb3JFdmFsKEVycm9yU3RyaW5nJiwgY29uc3QgaW50KiBl
eGVjdXRpb25Db250ZXh0SWQpID0gMDsKKyAgICB2aXJ0dWFsIEluamVjdGVkU2NyaXB0IGluamVj
dGVkU2NyaXB0Rm9yRXZhbChQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBPcHRpb25hbDxQcm90b2Nv
bDo6UnVudGltZTo6RXhlY3V0aW9uQ29udGV4dElkPiYmKSA9IDA7CiAKICAgICBKU0M6OkRlYnVn
Z2VyJiBkZWJ1Z2dlcigpIHsgcmV0dXJuIG1fZGVidWdnZXI7IH0KIApAQCAtMTY2LDggKzE2NSw4
IEBAIHByaXZhdGU6CiAgICAgY2xhc3MgUHJvdG9jb2xCcmVha3BvaW50IHsKICAgICAgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgcHVibGljOgotICAgICAgICBzdGF0aWMgT3B0aW9u
YWw8UHJvdG9jb2xCcmVha3BvaW50PiBmcm9tUGF5bG9hZChFcnJvclN0cmluZyYsIEpTQzo6U291
cmNlSUQsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIHVuc2lnbmVkIGNvbHVtbk51bWJlciwgY29uc3Qg
SlNPTjo6T2JqZWN0KiBvcHRpb25zUGF5bG9hZCA9IG51bGxwdHIpOwotICAgICAgICBzdGF0aWMg
T3B0aW9uYWw8UHJvdG9jb2xCcmVha3BvaW50PiBmcm9tUGF5bG9hZChFcnJvclN0cmluZyYsIGNv
bnN0IFN0cmluZyYgdXJsLCBib29sIGlzUmVnZXgsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIHVuc2ln
bmVkIGNvbHVtbk51bWJlciwgY29uc3QgSlNPTjo6T2JqZWN0KiBvcHRpb25zUGF5bG9hZCA9IG51
bGxwdHIpOworICAgICAgICBzdGF0aWMgT3B0aW9uYWw8UHJvdG9jb2xCcmVha3BvaW50PiBmcm9t
UGF5bG9hZChQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBKU0M6OlNvdXJjZUlELCB1bnNpZ25lZCBs
aW5lTnVtYmVyLCB1bnNpZ25lZCBjb2x1bW5OdW1iZXIsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYg
b3B0aW9ucyA9IG51bGxwdHIpOworICAgICAgICBzdGF0aWMgT3B0aW9uYWw8UHJvdG9jb2xCcmVh
a3BvaW50PiBmcm9tUGF5bG9hZChQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcm
IHVybCwgYm9vbCBpc1JlZ2V4LCB1bnNpZ25lZCBsaW5lTnVtYmVyLCB1bnNpZ25lZCBjb2x1bW5O
dW1iZXIsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgb3B0aW9ucyA9IG51bGxwdHIpOwogCiAgICAg
ICAgIFByb3RvY29sQnJlYWtwb2ludCgpOwogICAgICAgICBQcm90b2NvbEJyZWFrcG9pbnQoSlND
OjpTb3VyY2VJRCwgdW5zaWduZWQgbGluZU51bWJlciwgdW5zaWduZWQgY29sdW1uTnVtYmVyLCBj
b25zdCBTdHJpbmcmIGNvbmRpdGlvbiA9IG51bGxTdHJpbmcoKSwgSlNDOjpCcmVha3BvaW50OjpB
Y3Rpb25zVmVjdG9yJiYgYWN0aW9ucyA9IHsgfSwgYm9vbCBhdXRvQ29udGludWUgPSBmYWxzZSwg
c2l6ZV90IGlnbm9yZUNvdW50ID0gMCk7CkBAIC0xNzUsMTIgKzE3NCwxMiBAQCBwcml2YXRlOgog
CiAgICAgICAgIFJlZjxKU0M6OkJyZWFrcG9pbnQ+IGNyZWF0ZURlYnVnZ2VyQnJlYWtwb2ludChK
U0M6OkJyZWFrcG9pbnRJRCwgSlNDOjpTb3VyY2VJRCkgY29uc3Q7CiAKLSAgICAgICAgY29uc3Qg
SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OkJyZWFrcG9pbnRJZCYgaWQoKSBjb25zdCB7
IHJldHVybiBtX2lkOyB9CisgICAgICAgIGNvbnN0IFByb3RvY29sOjpEZWJ1Z2dlcjo6QnJlYWtw
b2ludElkJiBpZCgpIGNvbnN0IHsgcmV0dXJuIG1faWQ7IH0KIAogICAgICAgICBib29sIG1hdGNo
ZXNTY3JpcHRVUkwoY29uc3QgU3RyaW5nJikgY29uc3Q7CiAKICAgICBwcml2YXRlOgotICAgICAg
ICBJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6QnJlYWtwb2ludElkIG1faWQ7CisgICAg
ICAgIFByb3RvY29sOjpEZWJ1Z2dlcjo6QnJlYWtwb2ludElkIG1faWQ7CiAKICNpZiBBU1NFUlRf
RU5BQkxFRAogICAgICAgICBKU0M6OlNvdXJjZUlEIG1fc291cmNlSUQgeyBKU0M6Om5vU291cmNl
SUQgfTsKQEAgLTIwMiw3ICsyMDEsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgc2V0QnJlYWtwb2lu
dChKU0M6OkJyZWFrcG9pbnQmKTsKICAgICB2b2lkIGRpZFNldEJyZWFrcG9pbnQoUHJvdG9jb2xC
cmVha3BvaW50JiwgSlNDOjpCcmVha3BvaW50Jik7CiAKLSAgICBib29sIGFzc2VydFBhdXNlZChF
cnJvclN0cmluZyYpOworICAgIGJvb2wgYXNzZXJ0UGF1c2VkKFByb3RvY29sOjpFcnJvclN0cmlu
ZyYpOwogICAgIHZvaWQgY2xlYXJEZWJ1Z2dlckJyZWFrcG9pbnRTdGF0ZSgpOwogICAgIHZvaWQg
Y2xlYXJJbnNwZWN0b3JCcmVha3BvaW50U3RhdGUoKTsKICAgICB2b2lkIGNsZWFyUGF1c2VEZXRh
aWxzKCk7CkBAIC0yNDgsOCArMjQ3LDggQEAgcHJpdmF0ZToKICAgICBKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiBtX3BhdXNlZEdsb2JhbE9iamVjdCB7IG51bGxwdHIgfTsKICAgICBKU0M6OlN0cm9uZzxK
U0M6OlVua25vd24+IG1fY3VycmVudENhbGxTdGFjazsKIAotICAgIEhhc2hNYXA8SW5zcGVjdG9y
OjpQcm90b2NvbDo6RGVidWdnZXI6OkJyZWFrcG9pbnRJZCwgUHJvdG9jb2xCcmVha3BvaW50PiBt
X3Byb3RvY29sQnJlYWtwb2ludEZvclByb3RvY29sQnJlYWtwb2ludElEOwotICAgIEhhc2hNYXA8
SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OkJyZWFrcG9pbnRJZCwgSlNDOjpCcmVha3Bv
aW50c1ZlY3Rvcj4gbV9kZWJ1Z2dlckJyZWFrcG9pbnRzRm9yUHJvdG9jb2xCcmVha3BvaW50SUQ7
CisgICAgSGFzaE1hcDxQcm90b2NvbDo6RGVidWdnZXI6OkJyZWFrcG9pbnRJZCwgUHJvdG9jb2xC
cmVha3BvaW50PiBtX3Byb3RvY29sQnJlYWtwb2ludEZvclByb3RvY29sQnJlYWtwb2ludElEOwor
ICAgIEhhc2hNYXA8UHJvdG9jb2w6OkRlYnVnZ2VyOjpCcmVha3BvaW50SWQsIEpTQzo6QnJlYWtw
b2ludHNWZWN0b3I+IG1fZGVidWdnZXJCcmVha3BvaW50c0ZvclByb3RvY29sQnJlYWtwb2ludElE
OwogICAgIEpTQzo6QnJlYWtwb2ludElEIG1fbmV4dERlYnVnZ2VyQnJlYWtwb2ludElEIHsgSlND
Ojpub0JyZWFrcG9pbnRJRCArIDEgfTsKIAogICAgIFJlZlB0cjxKU0M6OkJyZWFrcG9pbnQ+IG1f
Y29udGludWVUb0xvY2F0aW9uRGVidWdnZXJCcmVha3BvaW50OwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9ySGVhcEFnZW50LmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckhlYXBBZ2Vu
dC5jcHAKaW5kZXggOGM2MjFhZDQxYzRkYTUwMDQzZDMwMjIwMGE0NmZhZTllZmM5NzE4Yy4uODVj
ZWQ5ZjNkZjYyMjMwMWI5NWUzM2U0OTM1Y2JiZjE2MmI3ZTMzMCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9ySGVhcEFnZW50LmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JIZWFw
QWdlbnQuY3BwCkBAIC01NiwyOCArNTYsMjUgQEAgdm9pZCBJbnNwZWN0b3JIZWFwQWdlbnQ6OmRp
ZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChGcm9udGVuZFJvdXRlciosIEJhY2tlbmREaXMKIAog
dm9pZCBJbnNwZWN0b3JIZWFwQWdlbnQ6OndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKERp
c2Nvbm5lY3RSZWFzb24pCiB7Ci0gICAgRXJyb3JTdHJpbmcgaWdub3JlZDsKLSAgICBkaXNhYmxl
KGlnbm9yZWQpOworICAgIGRpc2FibGUoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JIZWFwQWdlbnQ6
OmVuYWJsZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdP
cjx2b2lkPiBJbnNwZWN0b3JIZWFwQWdlbnQ6OmVuYWJsZSgpCiB7Ci0gICAgaWYgKG1fZW5hYmxl
ZCkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJIZWFwIGRvbWFpbiBhbHJlYWR5IGVuYWJsZWQi
X3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKG1fZW5hYmxlZCkKKyAgICAgICAg
cmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJIZWFwIGRvbWFpbiBhbHJlYWR5IGVuYWJsZWQiX3MpOwog
CiAgICAgbV9lbmFibGVkID0gdHJ1ZTsKIAogICAgIG1fZW52aXJvbm1lbnQudm0oKS5oZWFwLmFk
ZE9ic2VydmVyKHRoaXMpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JI
ZWFwQWdlbnQ6OmRpc2FibGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nKQorUHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9ySGVhcEFnZW50OjpkaXNhYmxlKCkKIHsKLSAgICBp
ZiAoIW1fZW5hYmxlZCkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJIZWFwIGRvbWFpbiBhbHJl
YWR5IGRpc2FibGVkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghbV9lbmFi
bGVkKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkhlYXAgZG9tYWluIGFscmVhZHkg
ZGlzYWJsZWQiX3MpOwogCiAgICAgbV9lbmFibGVkID0gZmFsc2U7CiAgICAgbV90cmFja2luZyA9
IGZhbHNlOwpAQCAtODUsMTcgKzgyLDIxIEBAIHZvaWQgSW5zcGVjdG9ySGVhcEFnZW50OjpkaXNh
YmxlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZykKICAgICBtX2Vudmlyb25tZW50LnZtKCkuaGVh
cC5yZW1vdmVPYnNlcnZlcih0aGlzKTsKIAogICAgIGNsZWFySGVhcFNuYXBzaG90cygpOworCisg
ICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JIZWFwQWdlbnQ6OmdjKEVycm9yU3Ry
aW5nJikKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckhlYXBBZ2VudDo6
Z2MoKQogewogICAgIFZNJiB2bSA9IG1fZW52aXJvbm1lbnQudm0oKTsKICAgICBKU0xvY2tIb2xk
ZXIgbG9jayh2bSk7CiAgICAgc2FuaXRpemVTdGFja0ZvclZNKHZtKTsKICAgICB2bS5oZWFwLmNv
bGxlY3ROb3coU3luYywgQ29sbGVjdGlvblNjb3BlOjpGdWxsKTsKKworICAgIHJldHVybiB7IH07
CiB9CiAKLXZvaWQgSW5zcGVjdG9ySGVhcEFnZW50OjpzbmFwc2hvdChFcnJvclN0cmluZyYsIGRv
dWJsZSogdGltZXN0YW1wLCBTdHJpbmcqIHNuYXBzaG90RGF0YSkKK1Byb3RvY29sOjpFcnJvclN0
cmluZ09yPHN0ZDo6dHVwbGU8ZG91YmxlLCBQcm90b2NvbDo6SGVhcDo6SGVhcFNuYXBzaG90RGF0
YT4+IEluc3BlY3RvckhlYXBBZ2VudDo6c25hcHNob3QoKQogewogICAgIFZNJiB2bSA9IG1fZW52
aXJvbm1lbnQudm0oKTsKICAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CkBAIC0xMDMsOCArMTA0
LDggQEAgdm9pZCBJbnNwZWN0b3JIZWFwQWdlbnQ6OnNuYXBzaG90KEVycm9yU3RyaW5nJiwgZG91
YmxlKiB0aW1lc3RhbXAsIFN0cmluZyogc25hcHMKICAgICBIZWFwU25hcHNob3RCdWlsZGVyIHNu
YXBzaG90QnVpbGRlcih2bS5lbnN1cmVIZWFwUHJvZmlsZXIoKSk7CiAgICAgc25hcHNob3RCdWls
ZGVyLmJ1aWxkU25hcHNob3QoKTsKIAotICAgICp0aW1lc3RhbXAgPSBtX2Vudmlyb25tZW50LmV4
ZWN1dGlvblN0b3B3YXRjaCgpLmVsYXBzZWRUaW1lKCkuc2Vjb25kcygpOwotICAgICpzbmFwc2hv
dERhdGEgPSBzbmFwc2hvdEJ1aWxkZXIuanNvbihbJl0gKGNvbnN0IEhlYXBTbmFwc2hvdE5vZGUm
IG5vZGUpIHsKKyAgICBhdXRvIHRpbWVzdGFtcCA9IG1fZW52aXJvbm1lbnQuZXhlY3V0aW9uU3Rv
cHdhdGNoKCkuZWxhcHNlZFRpbWUoKS5zZWNvbmRzKCk7CisgICAgYXV0byBzbmFwc2hvdERhdGEg
PSBzbmFwc2hvdEJ1aWxkZXIuanNvbihbJl0gKGNvbnN0IEhlYXBTbmFwc2hvdE5vZGUmIG5vZGUp
IHsKICAgICAgICAgaWYgKFN0cnVjdHVyZSogc3RydWN0dXJlID0gbm9kZS5jZWxsLT5zdHJ1Y3R1
cmUodm0pKSB7CiAgICAgICAgICAgICBpZiAoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9
IHN0cnVjdHVyZS0+Z2xvYmFsT2JqZWN0KCkpIHsKICAgICAgICAgICAgICAgICBpZiAoIW1fZW52
aXJvbm1lbnQuY2FuQWNjZXNzSW5zcGVjdGVkU2NyaXB0U3RhdGUoZ2xvYmFsT2JqZWN0KSkKQEAg
LTExMywzNyArMTE0LDQ1IEBAIHZvaWQgSW5zcGVjdG9ySGVhcEFnZW50OjpzbmFwc2hvdChFcnJv
clN0cmluZyYsIGRvdWJsZSogdGltZXN0YW1wLCBTdHJpbmcqIHNuYXBzCiAgICAgICAgIH0KICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfSk7CisKKyAgICByZXR1cm4geyB7IHRpbWVzdGFtcCwg
c25hcHNob3REYXRhIH0gfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JIZWFwQWdlbnQ6OnN0YXJ0VHJh
Y2tpbmcoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8
dm9pZD4gSW5zcGVjdG9ySGVhcEFnZW50OjpzdGFydFRyYWNraW5nKCkKIHsKICAgICBpZiAobV90
cmFja2luZykKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4geyB9OwogCiAgICAgbV90
cmFja2luZyA9IHRydWU7CiAKLSAgICBkb3VibGUgdGltZXN0YW1wOwotICAgIFN0cmluZyBzbmFw
c2hvdERhdGE7Ci0gICAgc25hcHNob3QoZXJyb3JTdHJpbmcsICZ0aW1lc3RhbXAsICZzbmFwc2hv
dERhdGEpOworICAgIGF1dG8gcmVzdWx0ID0gc25hcHNob3QoKTsKKyAgICBpZiAoIXJlc3VsdCkK
KyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKFdURk1vdmUocmVzdWx0LmVycm9yKCkpKTsK
IAorICAgIGF1dG8gW3RpbWVzdGFtcCwgc25hcHNob3REYXRhXSA9IFdURk1vdmUocmVzdWx0LnZh
bHVlKCkpOwogICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT50cmFja2luZ1N0YXJ0KHRpbWVzdGFt
cCwgc25hcHNob3REYXRhKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9y
SGVhcEFnZW50OjpzdG9wVHJhY2tpbmcoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nKQorUHJvdG9j
b2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9ySGVhcEFnZW50OjpzdG9wVHJhY2tpbmco
KQogewogICAgIGlmICghbV90cmFja2luZykKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1
cm4geyB9OwogCiAgICAgbV90cmFja2luZyA9IGZhbHNlOwogCi0gICAgZG91YmxlIHRpbWVzdGFt
cDsKLSAgICBTdHJpbmcgc25hcHNob3REYXRhOwotICAgIHNuYXBzaG90KGVycm9yU3RyaW5nLCAm
dGltZXN0YW1wLCAmc25hcHNob3REYXRhKTsKKyAgICBhdXRvIHJlc3VsdCA9IHNuYXBzaG90KCk7
CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChXVEZNb3Zl
KHJlc3VsdC5lcnJvcigpKSk7CiAKKyAgICBhdXRvIFt0aW1lc3RhbXAsIHNuYXBzaG90RGF0YV0g
PSBXVEZNb3ZlKHJlc3VsdC52YWx1ZSgpKTsKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+dHJh
Y2tpbmdDb21wbGV0ZSh0aW1lc3RhbXAsIHNuYXBzaG90RGF0YSk7CisKKyAgICByZXR1cm4geyB9
OwogfQogCi1PcHRpb25hbDxIZWFwU25hcHNob3ROb2RlPiBJbnNwZWN0b3JIZWFwQWdlbnQ6Om5v
ZGVGb3JIZWFwT2JqZWN0SWRlbnRpZmllcihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIHVuc2ln
bmVkIGhlYXBPYmplY3RJZGVudGlmaWVyKQorT3B0aW9uYWw8SGVhcFNuYXBzaG90Tm9kZT4gSW5z
cGVjdG9ySGVhcEFnZW50Ojpub2RlRm9ySGVhcE9iamVjdElkZW50aWZpZXIoUHJvdG9jb2w6OkVy
cm9yU3RyaW5nJiBlcnJvclN0cmluZywgdW5zaWduZWQgaGVhcE9iamVjdElkZW50aWZpZXIpCiB7
CiAgICAgSGVhcFByb2ZpbGVyKiBoZWFwUHJvZmlsZXIgPSBtX2Vudmlyb25tZW50LnZtKCkuaGVh
cFByb2ZpbGVyKCk7CiAgICAgaWYgKCFoZWFwUHJvZmlsZXIpIHsKQEAgLTE2Niw4ICsxNzUsMTAg
QEAgT3B0aW9uYWw8SGVhcFNuYXBzaG90Tm9kZT4gSW5zcGVjdG9ySGVhcEFnZW50Ojpub2RlRm9y
SGVhcE9iamVjdElkZW50aWZpZXIoRXJyb3IKICAgICByZXR1cm4gb3B0aW9uYWxOb2RlOwogfQog
Ci12b2lkIEluc3BlY3RvckhlYXBBZ2VudDo6Z2V0UHJldmlldyhFcnJvclN0cmluZyYgZXJyb3JT
dHJpbmcsIGludCBoZWFwT2JqZWN0SWQsIE9wdGlvbmFsPFN0cmluZz4mIHJlc3VsdFN0cmluZywg
UmVmUHRyPFByb3RvY29sOjpEZWJ1Z2dlcjo6RnVuY3Rpb25EZXRhaWxzPiYgZnVuY3Rpb25EZXRh
aWxzLCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6Ok9iamVjdFByZXZpZXc+JiBvYmplY3RQcmV2
aWV3KQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8c3RkOjp0dXBsZTxTdHJpbmcsIFJlZlB0cjxQ
cm90b2NvbDo6RGVidWdnZXI6OkZ1bmN0aW9uRGV0YWlscz4sIFJlZlB0cjxQcm90b2NvbDo6UnVu
dGltZTo6T2JqZWN0UHJldmlldz4+PiBJbnNwZWN0b3JIZWFwQWdlbnQ6OmdldFByZXZpZXcoaW50
IGhlYXBPYmplY3RJZCkKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7
CisKICAgICAvLyBQcmV2ZW50IHRoZSBjZWxsIGZyb20gZ2V0dGluZyBjb2xsZWN0ZWQgYXMgd2Ug
bG9vayBpdCB1cC4KICAgICBWTSYgdm0gPSBtX2Vudmlyb25tZW50LnZtKCk7CiAgICAgSlNMb2Nr
SG9sZGVyIGxvY2sodm0pOwpAQCAtMTc2LDUzICsxODcsNDggQEAgdm9pZCBJbnNwZWN0b3JIZWFw
QWdlbnQ6OmdldFByZXZpZXcoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgaGVhcE9iamVj
dElkLAogICAgIHVuc2lnbmVkIGhlYXBPYmplY3RJZGVudGlmaWVyID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KGhlYXBPYmplY3RJZCk7CiAgICAgY29uc3QgT3B0aW9uYWw8SGVhcFNuYXBzaG90Tm9k
ZT4gb3B0aW9uYWxOb2RlID0gbm9kZUZvckhlYXBPYmplY3RJZGVudGlmaWVyKGVycm9yU3RyaW5n
LCBoZWFwT2JqZWN0SWRlbnRpZmllcik7CiAgICAgaWYgKCFvcHRpb25hbE5vZGUpCi0gICAgICAg
IHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAog
ICAgIC8vIFN0cmluZyBwcmV2aWV3LgogICAgIEpTQ2VsbCogY2VsbCA9IG9wdGlvbmFsTm9kZS0+
Y2VsbDsKLSAgICBpZiAoY2VsbC0+aXNTdHJpbmcoKSkgewotICAgICAgICByZXN1bHRTdHJpbmcg
PSBhc1N0cmluZyhjZWxsKS0+dHJ5R2V0VmFsdWUoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
KyAgICBpZiAoY2VsbC0+aXNTdHJpbmcoKSkKKyAgICAgICAgcmV0dXJuIHsgeyBhc1N0cmluZyhj
ZWxsKS0+dHJ5R2V0VmFsdWUoKSwgbnVsbHB0ciwgbnVsbHB0ciB9IH07CiAKICAgICAvLyBCaWdJ
bnQgcHJldmlldy4KLSAgICBpZiAoY2VsbC0+aXNIZWFwQmlnSW50KCkpIHsKLSAgICAgICAgcmVz
dWx0U3RyaW5nID0gSlNCaWdJbnQ6OnRyeUdldFN0cmluZyh2bSwgYXNIZWFwQmlnSW50KGNlbGwp
LCAxMCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKGNlbGwtPmlzSGVhcEJpZ0lu
dCgpKQorICAgICAgICByZXR1cm4geyB7IEpTQmlnSW50Ojp0cnlHZXRTdHJpbmcodm0sIGFzSGVh
cEJpZ0ludChjZWxsKSwgMTApLCBudWxscHRyLCBudWxscHRyIH0gfTsKIAogICAgIC8vIEZJWE1F
OiBQcm92aWRlIHByZXZpZXcgaW5mb3JtYXRpb24gZm9yIEludGVybmFsIE9iamVjdHM/IENvZGVC
bG9jaywgRXhlY3V0YWJsZSwgZXRjLgogCiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBjZWxs
LT5zdHJ1Y3R1cmUodm0pOwotICAgIGlmICghc3RydWN0dXJlKSB7Ci0gICAgICAgIGVycm9yU3Ry
aW5nID0gIlVuYWJsZSB0byBnZXQgb2JqZWN0IGRldGFpbHMgLSBTdHJ1Y3R1cmUiX3M7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKCFzdHJ1Y3R1cmUpCisgICAgICAgIHJldHVybiBt
YWtlVW5leHBlY3RlZCgiVW5hYmxlIHRvIGdldCBvYmplY3QgZGV0YWlscyAtIFN0cnVjdHVyZSJf
cyk7CiAKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gc3RydWN0dXJlLT5nbG9i
YWxPYmplY3QoKTsKLSAgICBpZiAoIWdsb2JhbE9iamVjdCkgewotICAgICAgICBlcnJvclN0cmlu
ZyA9ICJVbmFibGUgdG8gZ2V0IG9iamVjdCBkZXRhaWxzIC0gR2xvYmFsT2JqZWN0Il9zOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghZ2xvYmFsT2JqZWN0KQorICAgICAgICByZXR1
cm4gbWFrZVVuZXhwZWN0ZWQoIlVuYWJsZSB0byBnZXQgb2JqZWN0IGRldGFpbHMgLSBHbG9iYWxP
YmplY3QiX3MpOwogCiAgICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHQgPSBtX2luamVj
dGVkU2NyaXB0TWFuYWdlci5pbmplY3RlZFNjcmlwdEZvcihnbG9iYWxPYmplY3QpOwotICAgIGlm
IChpbmplY3RlZFNjcmlwdC5oYXNOb1ZhbHVlKCkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAi
VW5hYmxlIHRvIGdldCBvYmplY3QgZGV0YWlscyAtIEluamVjdGVkU2NyaXB0Il9zOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQorICAgIGlmIChpbmplY3RlZFNjcmlwdC5oYXNOb1ZhbHVlKCkpCisg
ICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiVW5hYmxlIHRvIGdldCBvYmplY3QgZGV0YWls
cyAtIEluamVjdGVkU2NyaXB0Il9zKTsKIAogICAgIC8vIEZ1bmN0aW9uIHByZXZpZXcuCiAgICAg
aWYgKGNlbGwtPmluaGVyaXRzPEpTRnVuY3Rpb24+KHZtKSkgeworICAgICAgICBSZWZQdHI8UHJv
dG9jb2w6OkRlYnVnZ2VyOjpGdW5jdGlvbkRldGFpbHM+IGZ1bmN0aW9uRGV0YWlsczsKICAgICAg
ICAgaW5qZWN0ZWRTY3JpcHQuZnVuY3Rpb25EZXRhaWxzKGVycm9yU3RyaW5nLCBjZWxsLCBmdW5j
dGlvbkRldGFpbHMpOwotICAgICAgICByZXR1cm47CisgICAgICAgIGlmICghZnVuY3Rpb25EZXRh
aWxzKQorICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKKyAg
ICAgICAgcmV0dXJuIHsgeyBudWxsU3RyaW5nKCksIGZ1bmN0aW9uRGV0YWlscywgbnVsbHB0ciB9
IH07CiAgICAgfQogCiAgICAgLy8gT2JqZWN0IHByZXZpZXcuCi0gICAgb2JqZWN0UHJldmlldyA9
IGluamVjdGVkU2NyaXB0LnByZXZpZXdWYWx1ZShjZWxsKTsKKyAgICByZXR1cm4geyB7IG51bGxT
dHJpbmcoKSwgbnVsbHB0ciwgaW5qZWN0ZWRTY3JpcHQucHJldmlld1ZhbHVlKGNlbGwpIH0gfTsK
IH0KIAotdm9pZCBJbnNwZWN0b3JIZWFwQWdlbnQ6OmdldFJlbW90ZU9iamVjdChFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcsIGludCBoZWFwT2JqZWN0SWQsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxP
YmplY3RHcm91cCwgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiByZXN1
bHQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90
ZU9iamVjdD4+IEluc3BlY3RvckhlYXBBZ2VudDo6Z2V0UmVtb3RlT2JqZWN0KGludCBoZWFwT2Jq
ZWN0SWQsIGNvbnN0IFN0cmluZyYgb2JqZWN0R3JvdXApCiB7CisgICAgUHJvdG9jb2w6OkVycm9y
U3RyaW5nIGVycm9yU3RyaW5nOworCiAgICAgLy8gUHJldmVudCB0aGUgY2VsbCBmcm9tIGdldHRp
bmcgY29sbGVjdGVkIGFzIHdlIGxvb2sgaXQgdXAuCiAgICAgVk0mIHZtID0gbV9lbnZpcm9ubWVu
dC52bSgpOwogICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKQEAgLTIzMSwyOSArMjM3LDI2IEBA
IHZvaWQgSW5zcGVjdG9ySGVhcEFnZW50OjpnZXRSZW1vdGVPYmplY3QoRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBpbnQgaGVhcE9iamVjCiAgICAgdW5zaWduZWQgaGVhcE9iamVjdElkZW50aWZp
ZXIgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaGVhcE9iamVjdElkKTsKICAgICBjb25zdCBPcHRp
b25hbDxIZWFwU25hcHNob3ROb2RlPiBvcHRpb25hbE5vZGUgPSBub2RlRm9ySGVhcE9iamVjdElk
ZW50aWZpZXIoZXJyb3JTdHJpbmcsIGhlYXBPYmplY3RJZGVudGlmaWVyKTsKICAgICBpZiAoIW9w
dGlvbmFsTm9kZSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0
ZWQoZXJyb3JTdHJpbmcpOwogCiAgICAgSlNDZWxsKiBjZWxsID0gb3B0aW9uYWxOb2RlLT5jZWxs
OwogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gY2VsbC0+c3RydWN0dXJlKHZtKTsKLSAgICBp
ZiAoIXN0cnVjdHVyZSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJVbmFibGUgdG8gZ2V0IG9i
amVjdCBkZXRhaWxzIC0gU3RydWN0dXJlIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAg
IGlmICghc3RydWN0dXJlKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIlVuYWJsZSB0
byBnZXQgb2JqZWN0IGRldGFpbHMgLSBTdHJ1Y3R1cmUiX3MpOwogCiAgICAgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCA9IHN0cnVjdHVyZS0+Z2xvYmFsT2JqZWN0KCk7Ci0gICAgaWYgKCFn
bG9iYWxPYmplY3QpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiVW5hYmxlIHRvIGdldCBvYmpl
Y3QgZGV0YWlscyAtIEdsb2JhbE9iamVjdCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAg
ICBpZiAoIWdsb2JhbE9iamVjdCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJVbmFi
bGUgdG8gZ2V0IG9iamVjdCBkZXRhaWxzIC0gR2xvYmFsT2JqZWN0Il9zKTsKIAogICAgIEluamVj
dGVkU2NyaXB0IGluamVjdGVkU2NyaXB0ID0gbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIuaW5qZWN0
ZWRTY3JpcHRGb3IoZ2xvYmFsT2JqZWN0KTsKLSAgICBpZiAoaW5qZWN0ZWRTY3JpcHQuaGFzTm9W
YWx1ZSgpKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIlVuYWJsZSB0byBnZXQgb2JqZWN0IGRl
dGFpbHMgLSBJbmplY3RlZFNjcmlwdCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBp
ZiAoaW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoIlVuYWJsZSB0byBnZXQgb2JqZWN0IGRldGFpbHMgLSBJbmplY3RlZFNjcmlwdCJfcyk7
CiAKLSAgICBTdHJpbmcgb2JqZWN0R3JvdXAgPSBvcHRpb25hbE9iamVjdEdyb3VwID8gKm9wdGlv
bmFsT2JqZWN0R3JvdXAgOiBTdHJpbmcoKTsKLSAgICByZXN1bHQgPSBpbmplY3RlZFNjcmlwdC53
cmFwT2JqZWN0KGNlbGwsIG9iamVjdEdyb3VwLCB0cnVlKTsKKyAgICBhdXRvIG9iamVjdCA9IGlu
amVjdGVkU2NyaXB0LndyYXBPYmplY3QoY2VsbCwgb2JqZWN0R3JvdXAsIHRydWUpOworICAgIGlm
ICghb2JqZWN0KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkludGVybmFsIGVycm9y
OiB1bmFibGUgdG8gY2FzdCBPYmplY3QiKTsKKworICAgIHJldHVybiBvYmplY3QucmVsZWFzZU5v
bk51bGwoKTsKIH0KIAogc3RhdGljIFByb3RvY29sOjpIZWFwOjpHYXJiYWdlQ29sbGVjdGlvbjo6
VHlwZSBwcm90b2NvbFR5cGVGb3JIZWFwT3BlcmF0aW9uKENvbGxlY3Rpb25TY29wZSBzY29wZSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3Bl
Y3RvckhlYXBBZ2VudC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9ySGVhcEFnZW50LmgKaW5kZXggZGVmNmFjZGU5NDYwZTcxMjgwMDQxZGFhNjVmY2Nk
Njg1ZTBmN2MwZi4uY2FhNTEyZDBhYjJlMTBhODhlMGVlNjBjMmUzMmQ3NDM5NDIyMjdhZCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9y
SGVhcEFnZW50LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9ySGVhcEFnZW50LmgKQEAgLTQwLDcgKzQwLDYgQEAgc3RydWN0IEhlYXBTbmFwc2hv
dE5vZGU7CiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAogY2xhc3MgSW5qZWN0ZWRTY3JpcHRNYW5h
Z2VyOwotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiAKIGNsYXNzIEpTX0VYUE9SVF9QUklW
QVRFIEluc3BlY3RvckhlYXBBZ2VudCA6IHB1YmxpYyBJbnNwZWN0b3JBZ2VudEJhc2UsIHB1Ymxp
YyBIZWFwQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyLCBwdWJsaWMgSlNDOjpIZWFwT2JzZXJ2ZXIg
ewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEluc3BlY3RvckhlYXBBZ2VudCk7CkBAIC01NCwx
NCArNTMsMTQgQEAgcHVibGljOgogICAgIHZvaWQgd2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tl
bmQoRGlzY29ubmVjdFJlYXNvbikgZmluYWw7CiAKICAgICAvLyBIZWFwQmFja2VuZERpc3BhdGNo
ZXJIYW5kbGVyCi0gICAgdm9pZCBlbmFibGUoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2
b2lkIGRpc2FibGUoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2b2lkIGdjKEVycm9yU3Ry
aW5nJikgZmluYWw7Ci0gICAgdm9pZCBzbmFwc2hvdChFcnJvclN0cmluZyYsIGRvdWJsZSogdGlt
ZXN0YW1wLCBTdHJpbmcqIHNuYXBzaG90RGF0YSkgZmluYWw7Ci0gICAgdm9pZCBzdGFydFRyYWNr
aW5nKEVycm9yU3RyaW5nJikgZmluYWw7Ci0gICAgdm9pZCBzdG9wVHJhY2tpbmcoRXJyb3JTdHJp
bmcmKSBmaW5hbDsKLSAgICB2b2lkIGdldFByZXZpZXcoRXJyb3JTdHJpbmcmLCBpbnQgaGVhcE9i
amVjdElkLCBPcHRpb25hbDxTdHJpbmc+JiByZXN1bHRTdHJpbmcsIFJlZlB0cjxQcm90b2NvbDo6
RGVidWdnZXI6OkZ1bmN0aW9uRGV0YWlscz4mLCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6Ok9i
amVjdFByZXZpZXc+JikgZmluYWw7Ci0gICAgdm9pZCBnZXRSZW1vdGVPYmplY3QoRXJyb3JTdHJp
bmcmLCBpbnQgaGVhcE9iamVjdElkLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsT2JqZWN0R3JvdXAs
IFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0KSBmaW5hbDsK
KyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBlbmFibGUoKSBvdmVycmlkZTsKKyAg
ICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBkaXNhYmxlKCkgb3ZlcnJpZGU7CisgICAg
UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZ2MoKSBmaW5hbDsKKyAgICBQcm90b2NvbDo6
RXJyb3JTdHJpbmdPcjxzdGQ6OnR1cGxlPGRvdWJsZSwgUHJvdG9jb2w6OkhlYXA6OkhlYXBTbmFw
c2hvdERhdGE+PiBzbmFwc2hvdCgpIGZpbmFsOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09y
PHZvaWQ+IHN0YXJ0VHJhY2tpbmcoKSBmaW5hbDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdP
cjx2b2lkPiBzdG9wVHJhY2tpbmcoKSBmaW5hbDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdP
cjxzdGQ6OnR1cGxlPFN0cmluZywgUmVmUHRyPFByb3RvY29sOjpEZWJ1Z2dlcjo6RnVuY3Rpb25E
ZXRhaWxzPiwgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpPYmplY3RQcmV2aWV3Pj4+IGdldFBy
ZXZpZXcoaW50IGhlYXBPYmplY3RJZCkgZmluYWw7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5n
T3I8UmVmPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+PiBnZXRSZW1vdGVPYmplY3Qo
aW50IGhlYXBPYmplY3RJZCwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCkgZmluYWw7CiAKICAg
ICAvLyBKU0M6OkhlYXBPYnNlcnZlcgogICAgIHZvaWQgd2lsbEdhcmJhZ2VDb2xsZWN0KCkgZmlu
YWw7CkBAIC03Myw3ICs3Miw3IEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0
Y2hHYXJiYWdlQ29sbGVjdGVkRXZlbnQoUHJvdG9jb2w6OkhlYXA6OkdhcmJhZ2VDb2xsZWN0aW9u
OjpUeXBlLCBTZWNvbmRzIHN0YXJ0VGltZSwgU2Vjb25kcyBlbmRUaW1lKTsKIAogcHJpdmF0ZToK
LSAgICBPcHRpb25hbDxKU0M6OkhlYXBTbmFwc2hvdE5vZGU+IG5vZGVGb3JIZWFwT2JqZWN0SWRl
bnRpZmllcihFcnJvclN0cmluZyYsIHVuc2lnbmVkIGhlYXBPYmplY3RJZGVudGlmaWVyKTsKKyAg
ICBPcHRpb25hbDxKU0M6OkhlYXBTbmFwc2hvdE5vZGU+IG5vZGVGb3JIZWFwT2JqZWN0SWRlbnRp
ZmllcihQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCB1bnNpZ25lZCBoZWFwT2JqZWN0SWRlbnRpZmll
cik7CiAKICAgICBJbmplY3RlZFNjcmlwdE1hbmFnZXImIG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2Vy
OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxIZWFwRnJvbnRlbmREaXNwYXRjaGVyPiBtX2Zyb250ZW5k
RGlzcGF0Y2hlcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
YWdlbnRzL0luc3BlY3RvclJ1bnRpbWVBZ2VudC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JSdW50aW1lQWdlbnQuY3BwCmluZGV4IDlhYjFhZjc0
ZDQzMzYzNzFmNjQ5MjliZjYwNjVhNDJjZTFiOTlmODQuLjA1MWM5ZjMzNjgyOGJkZTI5OTQwMmQz
Y2E2OTIxZTZlOTIyOTM4MGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3IvYWdlbnRzL0luc3BlY3RvclJ1bnRpbWVBZ2VudC5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUnVudGltZUFnZW50LmNwcApAQCAt
NDksMTggKzQ5LDYgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKIHVzaW5nIG5hbWVzcGFjZSBK
U0M7CiAKLXN0YXRpYyBib29sIGFzQm9vbChjb25zdCBib29sKiBiKQotewotICAgIHJldHVybiBi
ICYmICpiOwotfQotCi1zdGF0aWMgaW50IGFzSW50KGNvbnN0IGludCogaSkKLXsKLSAgICBpZiAo
aSkKLSAgICAgICAgcmV0dXJuICppOwotICAgIHJldHVybiAwOwotfQotCiBJbnNwZWN0b3JSdW50
aW1lQWdlbnQ6Okluc3BlY3RvclJ1bnRpbWVBZ2VudChBZ2VudENvbnRleHQmIGNvbnRleHQpCiAg
ICAgOiBJbnNwZWN0b3JBZ2VudEJhc2UoIlJ1bnRpbWUiX3MpCiAgICAgLCBtX2luamVjdGVkU2Ny
aXB0TWFuYWdlcihjb250ZXh0LmluamVjdGVkU2NyaXB0TWFuYWdlcikKQEAgLTgxLDI1ICs2OSw0
NiBAQCBzdGF0aWMgUmVmPFByb3RvY29sOjpSdW50aW1lOjpFcnJvclJhbmdlPiBidWlsZEVycm9y
UmFuZ2VPYmplY3QoY29uc3QgSlNUb2tlbkxvYwogICAgICAgICAucmVsZWFzZSgpOwogfQogCi12
b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6cGFyc2UoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJp
bmcmIGV4cHJlc3Npb24sIFByb3RvY29sOjpSdW50aW1lOjpTeW50YXhFcnJvclR5cGUqIHJlc3Vs
dCwgT3B0aW9uYWw8U3RyaW5nPiYgbWVzc2FnZSwgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpF
cnJvclJhbmdlPiYgcmFuZ2UpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0
b3JSdW50aW1lQWdlbnQ6OmVuYWJsZSgpCit7CisgICAgbV9lbmFibGVkID0gdHJ1ZTsKKworICAg
IHJldHVybiB7IH07Cit9CisKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3Rv
clJ1bnRpbWVBZ2VudDo6ZGlzYWJsZSgpCit7CisgICAgbV9lbmFibGVkID0gZmFsc2U7CisKKyAg
ICByZXR1cm4geyB9OworfQorCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxzdGQ6OnR1cGxlPFBy
b3RvY29sOjpSdW50aW1lOjpTeW50YXhFcnJvclR5cGUsIFN0cmluZyAvKiBtZXNzYWdlICovLCBS
ZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OkVycm9yUmFuZ2U+Pj4gSW5zcGVjdG9yUnVudGltZUFn
ZW50OjpwYXJzZShjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24pCiB7CiAgICAgSlNMb2NrSG9sZGVy
IGxvY2sobV92bSk7CiAKICAgICBQYXJzZXJFcnJvciBlcnJvcjsKICAgICBjaGVja1N5bnRheCht
X3ZtLCBKU0M6Om1ha2VTb3VyY2UoZXhwcmVzc2lvbiwgeyB9KSwgZXJyb3IpOwogCisgICAgT3B0
aW9uYWw8UHJvdG9jb2w6OlJ1bnRpbWU6OlN5bnRheEVycm9yVHlwZT4gcmVzdWx0OworICAgIFN0
cmluZyBtZXNzYWdlOworICAgIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6RXJyb3JSYW5nZT4g
cmFuZ2U7CisKICAgICBzd2l0Y2ggKGVycm9yLnN5bnRheEVycm9yVHlwZSgpKSB7CiAgICAgY2Fz
ZSBQYXJzZXJFcnJvcjo6U3ludGF4RXJyb3JOb25lOgotICAgICAgICAqcmVzdWx0ID0gUHJvdG9j
b2w6OlJ1bnRpbWU6OlN5bnRheEVycm9yVHlwZTo6Tm9uZTsKKyAgICAgICAgcmVzdWx0ID0gUHJv
dG9jb2w6OlJ1bnRpbWU6OlN5bnRheEVycm9yVHlwZTo6Tm9uZTsKICAgICAgICAgYnJlYWs7CisK
ICAgICBjYXNlIFBhcnNlckVycm9yOjpTeW50YXhFcnJvcklycmVjb3ZlcmFibGU6Ci0gICAgICAg
ICpyZXN1bHQgPSBQcm90b2NvbDo6UnVudGltZTo6U3ludGF4RXJyb3JUeXBlOjpJcnJlY292ZXJh
YmxlOworICAgICAgICByZXN1bHQgPSBQcm90b2NvbDo6UnVudGltZTo6U3ludGF4RXJyb3JUeXBl
OjpJcnJlY292ZXJhYmxlOwogICAgICAgICBicmVhazsKKwogICAgIGNhc2UgUGFyc2VyRXJyb3I6
OlN5bnRheEVycm9yVW50ZXJtaW5hdGVkTGl0ZXJhbDoKLSAgICAgICAgKnJlc3VsdCA9IFByb3Rv
Y29sOjpSdW50aW1lOjpTeW50YXhFcnJvclR5cGU6OlVudGVybWluYXRlZExpdGVyYWw7CisgICAg
ICAgIHJlc3VsdCA9IFByb3RvY29sOjpSdW50aW1lOjpTeW50YXhFcnJvclR5cGU6OlVudGVybWlu
YXRlZExpdGVyYWw7CiAgICAgICAgIGJyZWFrOworCiAgICAgY2FzZSBQYXJzZXJFcnJvcjo6U3lu
dGF4RXJyb3JSZWNvdmVyYWJsZToKLSAgICAgICAgKnJlc3VsdCA9IFByb3RvY29sOjpSdW50aW1l
OjpTeW50YXhFcnJvclR5cGU6OlJlY292ZXJhYmxlOworICAgICAgICByZXN1bHQgPSBQcm90b2Nv
bDo6UnVudGltZTo6U3ludGF4RXJyb3JUeXBlOjpSZWNvdmVyYWJsZTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQogCkBAIC0xMDcsMjkgKzExNiw0MiBAQCB2b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2Vu
dDo6cGFyc2UoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIFByb3RvYwog
ICAgICAgICBtZXNzYWdlID0gZXJyb3IubWVzc2FnZSgpOwogICAgICAgICByYW5nZSA9IGJ1aWxk
RXJyb3JSYW5nZU9iamVjdChlcnJvci50b2tlbigpLm1fbG9jYXRpb24pOwogICAgIH0KKworICAg
IHJldHVybiB7IHsgKnJlc3VsdCwgbWVzc2FnZSwgV1RGTW92ZShyYW5nZSkgfSB9OwogfQogCi12
b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6ZXZhbHVhdGUoRXJyb3JTdHJpbmcmIGVycm9yU3Ry
aW5nLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIGNvbnN0IFN0cmluZyogb2JqZWN0R3JvdXAs
IGNvbnN0IGJvb2wqIGluY2x1ZGVDb21tYW5kTGluZUFQSSwgY29uc3QgYm9vbCogZG9Ob3RQYXVz
ZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xlLCBjb25zdCBpbnQqIGV4ZWN1dGlvbkNvbnRleHRJ
ZCwgY29uc3QgYm9vbCogcmV0dXJuQnlWYWx1ZSwgY29uc3QgYm9vbCogZ2VuZXJhdGVQcmV2aWV3
LCBjb25zdCBib29sKiBzYXZlUmVzdWx0LCBjb25zdCBib29sKiAvKiBlbXVsYXRlVXNlckdlc3R1
cmUgKi8sIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0LCBP
cHRpb25hbDxib29sPiYgd2FzVGhyb3duLCBPcHRpb25hbDxpbnQ+JiBzYXZlZFJlc3VsdEluZGV4
KQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8c3RkOjp0dXBsZTxSZWY8UHJvdG9jb2w6OlJ1bnRp
bWU6OlJlbW90ZU9iamVjdD4sIE9wdGlvbmFsPGJvb2w+IC8qIHdhc1Rocm93biAqLywgT3B0aW9u
YWw8aW50PiAvKiBzYXZlZFJlc3VsdEluZGV4ICovPj4gSW5zcGVjdG9yUnVudGltZUFnZW50Ojpl
dmFsdWF0ZShjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIGNvbnN0IFN0cmluZyYgb2JqZWN0R3Jv
dXAsIE9wdGlvbmFsPGJvb2w+JiYgaW5jbHVkZUNvbW1hbmRMaW5lQVBJLCBPcHRpb25hbDxib29s
PiYmIGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29sZSwgT3B0aW9uYWw8UHJvdG9j
b2w6OlJ1bnRpbWU6OkV4ZWN1dGlvbkNvbnRleHRJZD4mJiBleGVjdXRpb25Db250ZXh0SWQsIE9w
dGlvbmFsPGJvb2w+JiYgcmV0dXJuQnlWYWx1ZSwgT3B0aW9uYWw8Ym9vbD4mJiBnZW5lcmF0ZVBy
ZXZpZXcsIE9wdGlvbmFsPGJvb2w+JiYgc2F2ZVJlc3VsdCwgT3B0aW9uYWw8Ym9vbD4mJiAvKiBl
bXVsYXRlVXNlckdlc3R1cmUgKi8pCiB7Ci0gICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3Jp
cHQgPSBpbmplY3RlZFNjcmlwdEZvckV2YWwoZXJyb3JTdHJpbmcsIGV4ZWN1dGlvbkNvbnRleHRJ
ZCk7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCisgICAgSW5qZWN0
ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHQgPSBpbmplY3RlZFNjcmlwdEZvckV2YWwoZXJyb3JTdHJp
bmcsIFdURk1vdmUoZXhlY3V0aW9uQ29udGV4dElkKSk7CiAgICAgaWYgKGluamVjdGVkU2NyaXB0
Lmhhc05vVmFsdWUoKSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoZXJyb3JTdHJpbmcpOworCisgICAgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1v
dGVPYmplY3Q+IHJlc3VsdDsKKyAgICBPcHRpb25hbDxib29sPiB3YXNUaHJvd247CisgICAgT3B0
aW9uYWw8aW50PiBzYXZlZFJlc3VsdEluZGV4OwogCiAgICAgSlNDOjpEZWJ1Z2dlcjo6VGVtcG9y
YXJpbHlEaXNhYmxlRXhjZXB0aW9uQnJlYWtwb2ludHMgdGVtcG9yYXJpbHlEaXNhYmxlRXhjZXB0
aW9uQnJlYWtwb2ludHMobV9kZWJ1Z2dlcik7CiAKLSAgICBib29sIHBhdXNlQW5kTXV0ZSA9IGFz
Qm9vbChkb05vdFBhdXNlT25FeGNlcHRpb25zQW5kTXV0ZUNvbnNvbGUpOworICAgIGJvb2wgcGF1
c2VBbmRNdXRlID0gZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xlLnZhbHVlT3Io
ZmFsc2UpOwogICAgIGlmIChwYXVzZUFuZE11dGUpIHsKICAgICAgICAgdGVtcG9yYXJpbHlEaXNh
YmxlRXhjZXB0aW9uQnJlYWtwb2ludHMucmVwbGFjZSgpOwogICAgICAgICBtdXRlQ29uc29sZSgp
OwogICAgIH0KIAotICAgIGluamVjdGVkU2NyaXB0LmV2YWx1YXRlKGVycm9yU3RyaW5nLCBleHBy
ZXNzaW9uLCBvYmplY3RHcm91cCA/ICpvYmplY3RHcm91cCA6IFN0cmluZygpLCBhc0Jvb2woaW5j
bHVkZUNvbW1hbmRMaW5lQVBJKSwgYXNCb29sKHJldHVybkJ5VmFsdWUpLCBhc0Jvb2woZ2VuZXJh
dGVQcmV2aWV3KSwgYXNCb29sKHNhdmVSZXN1bHQpLCByZXN1bHQsIHdhc1Rocm93biwgc2F2ZWRS
ZXN1bHRJbmRleCk7CisgICAgaW5qZWN0ZWRTY3JpcHQuZXZhbHVhdGUoZXJyb3JTdHJpbmcsIGV4
cHJlc3Npb24sIG9iamVjdEdyb3VwLCBpbmNsdWRlQ29tbWFuZExpbmVBUEkudmFsdWVPcihmYWxz
ZSksIHJldHVybkJ5VmFsdWUudmFsdWVPcihmYWxzZSksIGdlbmVyYXRlUHJldmlldy52YWx1ZU9y
KGZhbHNlKSwgc2F2ZVJlc3VsdC52YWx1ZU9yKGZhbHNlKSwgcmVzdWx0LCB3YXNUaHJvd24sIHNh
dmVkUmVzdWx0SW5kZXgpOwogCiAgICAgaWYgKHBhdXNlQW5kTXV0ZSkKICAgICAgICAgdW5tdXRl
Q29uc29sZSgpOworCisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBl
Y3RlZChlcnJvclN0cmluZyk7CisKKyAgICByZXR1cm4geyB7cmVzdWx0LnJlbGVhc2VOb25OdWxs
KCksIFdURk1vdmUod2FzVGhyb3duKSwgV1RGTW92ZShzYXZlZFJlc3VsdEluZGV4KSB9IH07CiB9
CiAKLXZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50Ojphd2FpdFByb21pc2UoY29uc3QgU3RyaW5n
JiBwcm9taXNlT2JqZWN0SWQsIGNvbnN0IGJvb2wqIHJldHVybkJ5VmFsdWUsIGNvbnN0IGJvb2wq
IGdlbmVyYXRlUHJldmlldywgY29uc3QgYm9vbCogc2F2ZVJlc3VsdCwgUmVmPEF3YWl0UHJvbWlz
ZUNhbGxiYWNrPiYmIGNhbGxiYWNrKQordm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmF3YWl0
UHJvbWlzZShjb25zdCBQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0SWQmIHByb21pc2VP
YmplY3RJZCwgT3B0aW9uYWw8Ym9vbD4mJiByZXR1cm5CeVZhbHVlLCBPcHRpb25hbDxib29sPiYm
IGdlbmVyYXRlUHJldmlldywgT3B0aW9uYWw8Ym9vbD4mJiBzYXZlUmVzdWx0LCBSZWY8QXdhaXRQ
cm9taXNlQ2FsbGJhY2s+JiYgY2FsbGJhY2spCiB7CiAgICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0
ZWRTY3JpcHQgPSBtX2luamVjdGVkU2NyaXB0TWFuYWdlci5pbmplY3RlZFNjcmlwdEZvck9iamVj
dElkKHByb21pc2VPYmplY3RJZCk7CiAgICAgaWYgKGluamVjdGVkU2NyaXB0Lmhhc05vVmFsdWUo
KSkgewpAQCAtMTM3LDIxOSArMTU5LDI0NCBAQCB2b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6
YXdhaXRQcm9taXNlKGNvbnN0IFN0cmluZyYgcHJvbWlzZU9iamVjdElkLCBjb25zdCBibwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaW5qZWN0ZWRTY3JpcHQuYXdhaXRQcm9taXNlKHBy
b21pc2VPYmplY3RJZCwgYXNCb29sKHJldHVybkJ5VmFsdWUpLCBhc0Jvb2woZ2VuZXJhdGVQcmV2
aWV3KSwgYXNCb29sKHNhdmVSZXN1bHQpLCBbY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0g
KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1v
dGVPYmplY3Q+JiYgcmVzdWx0LCBPcHRpb25hbDxib29sPiYgd2FzVGhyb3duLCBPcHRpb25hbDxp
bnQ+JiBzYXZlZFJlc3VsdEluZGV4KSB7Ci0gICAgICAgIGlmICghZXJyb3JTdHJpbmcuaXNFbXB0
eSgpKQorICAgIGluamVjdGVkU2NyaXB0LmF3YWl0UHJvbWlzZShwcm9taXNlT2JqZWN0SWQsIHJl
dHVybkJ5VmFsdWUudmFsdWVPcihmYWxzZSksIGdlbmVyYXRlUHJldmlldy52YWx1ZU9yKGZhbHNl
KSwgc2F2ZVJlc3VsdC52YWx1ZU9yKGZhbHNlKSwgW2NhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFj
ayldIChQcm90b2NvbDo6RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBSZWZQdHI8UHJvdG9jb2w6
OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mJiByZXN1bHQsIE9wdGlvbmFsPGJvb2w+JiYgd2FzVGhy
b3duLCBPcHRpb25hbDxpbnQ+JiYgc2F2ZWRSZXN1bHRJbmRleCkgeworICAgICAgICBpZiAoIXJl
c3VsdCkKICAgICAgICAgICAgIGNhbGxiYWNrLT5zZW5kRmFpbHVyZShlcnJvclN0cmluZyk7CiAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNhbGxiYWNrLT5zZW5kU3VjY2VzcyhXVEZNb3ZlKHJl
c3VsdCksIHdhc1Rocm93biwgc2F2ZWRSZXN1bHRJbmRleCk7CisgICAgICAgICAgICBjYWxsYmFj
ay0+c2VuZFN1Y2Nlc3MocmVzdWx0LnJlbGVhc2VOb25OdWxsKCksIFdURk1vdmUod2FzVGhyb3du
KSwgV1RGTW92ZShzYXZlZFJlc3VsdEluZGV4KSk7CiAgICAgfSk7CiB9CiAKLXZvaWQgSW5zcGVj
dG9yUnVudGltZUFnZW50OjpjYWxsRnVuY3Rpb25PbihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcs
IGNvbnN0IFN0cmluZyYgb2JqZWN0SWQsIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgY29uc3Qg
SlNPTjo6QXJyYXkqIG9wdGlvbmFsQXJndW1lbnRzLCBjb25zdCBib29sKiBkb05vdFBhdXNlT25F
eGNlcHRpb25zQW5kTXV0ZUNvbnNvbGUsIGNvbnN0IGJvb2wqIHJldHVybkJ5VmFsdWUsIGNvbnN0
IGJvb2wqIGdlbmVyYXRlUHJldmlldywgY29uc3QgYm9vbCogLyogZW11bGF0ZVVzZXJHZXN0dXJl
ICovLCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3VsdCwgT3B0
aW9uYWw8Ym9vbD4mIHdhc1Rocm93bikKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHN0ZDo6dHVw
bGU8UmVmPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+LCBPcHRpb25hbDxib29sPiAv
KiB3YXNUaHJvd24gKi8+PiBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmNhbGxGdW5jdGlvbk9uKGNv
bnN0IFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3RJZCYgb2JqZWN0SWQsIGNvbnN0IFN0
cmluZyYgZnVuY3Rpb25EZWNsYXJhdGlvbiwgUmVmUHRyPEpTT046OkFycmF5PiYmIGFyZ3VtZW50
cywgT3B0aW9uYWw8Ym9vbD4mJiBkb05vdFBhdXNlT25FeGNlcHRpb25zQW5kTXV0ZUNvbnNvbGUs
IE9wdGlvbmFsPGJvb2w+JiYgcmV0dXJuQnlWYWx1ZSwgT3B0aW9uYWw8Ym9vbD4mJiBnZW5lcmF0
ZVByZXZpZXcsIE9wdGlvbmFsPGJvb2w+JiYgLyogZW11bGF0ZVVzZXJHZXN0dXJlICovKQogewot
ICAgIEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0ID0gbV9pbmplY3RlZFNjcmlwdE1hbmFn
ZXIuaW5qZWN0ZWRTY3JpcHRGb3JPYmplY3RJZChvYmplY3RJZCk7Ci0gICAgaWYgKGluamVjdGVk
U2NyaXB0Lmhhc05vVmFsdWUoKSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIGlu
amVjdGVkIHNjcmlwdCBmb3IgZ2l2ZW4gb2JqZWN0SWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOwogCi0gICAgU3RyaW5n
IGFyZ3VtZW50czsKLSAgICBpZiAob3B0aW9uYWxBcmd1bWVudHMpCi0gICAgICAgIGFyZ3VtZW50
cyA9IG9wdGlvbmFsQXJndW1lbnRzLT50b0pTT05TdHJpbmcoKTsKKyAgICBJbmplY3RlZFNjcmlw
dCBpbmplY3RlZFNjcmlwdCA9IG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmluamVjdGVkU2NyaXB0
Rm9yT2JqZWN0SWQob2JqZWN0SWQpOworICAgIGlmIChpbmplY3RlZFNjcmlwdC5oYXNOb1ZhbHVl
KCkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTWlzc2luZyBpbmplY3RlZCBzY3Jp
cHQgZm9yIGdpdmVuIG9iamVjdElkIl9zKTsKKworICAgIFJlZlB0cjxQcm90b2NvbDo6UnVudGlt
ZTo6UmVtb3RlT2JqZWN0PiByZXN1bHQ7CisgICAgT3B0aW9uYWw8Ym9vbD4gd2FzVGhyb3duOwog
CiAgICAgSlNDOjpEZWJ1Z2dlcjo6VGVtcG9yYXJpbHlEaXNhYmxlRXhjZXB0aW9uQnJlYWtwb2lu
dHMgdGVtcG9yYXJpbHlEaXNhYmxlRXhjZXB0aW9uQnJlYWtwb2ludHMobV9kZWJ1Z2dlcik7CiAK
LSAgICBib29sIHBhdXNlQW5kTXV0ZSA9IGFzQm9vbChkb05vdFBhdXNlT25FeGNlcHRpb25zQW5k
TXV0ZUNvbnNvbGUpOworICAgIGJvb2wgcGF1c2VBbmRNdXRlID0gZG9Ob3RQYXVzZU9uRXhjZXB0
aW9uc0FuZE11dGVDb25zb2xlLnZhbHVlT3IoZmFsc2UpOwogICAgIGlmIChwYXVzZUFuZE11dGUp
IHsKICAgICAgICAgdGVtcG9yYXJpbHlEaXNhYmxlRXhjZXB0aW9uQnJlYWtwb2ludHMucmVwbGFj
ZSgpOwogICAgICAgICBtdXRlQ29uc29sZSgpOwogICAgIH0KIAotICAgIGluamVjdGVkU2NyaXB0
LmNhbGxGdW5jdGlvbk9uKGVycm9yU3RyaW5nLCBvYmplY3RJZCwgZXhwcmVzc2lvbiwgYXJndW1l
bnRzLCBhc0Jvb2wocmV0dXJuQnlWYWx1ZSksIGFzQm9vbChnZW5lcmF0ZVByZXZpZXcpLCByZXN1
bHQsIHdhc1Rocm93bik7CisgICAgaW5qZWN0ZWRTY3JpcHQuY2FsbEZ1bmN0aW9uT24oZXJyb3JT
dHJpbmcsIG9iamVjdElkLCBmdW5jdGlvbkRlY2xhcmF0aW9uLCBhcmd1bWVudHMgPyBhcmd1bWVu
dHMtPnRvSlNPTlN0cmluZygpIDogbnVsbFN0cmluZygpLCByZXR1cm5CeVZhbHVlLnZhbHVlT3Io
ZmFsc2UpLCBnZW5lcmF0ZVByZXZpZXcudmFsdWVPcihmYWxzZSksIHJlc3VsdCwgd2FzVGhyb3du
KTsKIAogICAgIGlmIChwYXVzZUFuZE11dGUpCiAgICAgICAgIHVubXV0ZUNvbnNvbGUoKTsKKwor
ICAgIGlmICghcmVzdWx0KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJp
bmcpOworCisgICAgcmV0dXJuIHsgeyByZXN1bHQucmVsZWFzZU5vbk51bGwoKSwgV1RGTW92ZSh3
YXNUaHJvd24pIH0gfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmdldFByZXZp
ZXcoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBSZWZQ
dHI8UHJvdG9jb2w6OlJ1bnRpbWU6Ok9iamVjdFByZXZpZXc+JiBwcmV2aWV3KQorUHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8UmVmPFByb3RvY29sOjpSdW50aW1lOjpPYmplY3RQcmV2aWV3Pj4gSW5z
cGVjdG9yUnVudGltZUFnZW50OjpnZXRQcmV2aWV3KGNvbnN0IFByb3RvY29sOjpSdW50aW1lOjpS
ZW1vdGVPYmplY3RJZCYgb2JqZWN0SWQpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVy
cm9yU3RyaW5nOworCiAgICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHQgPSBtX2luamVj
dGVkU2NyaXB0TWFuYWdlci5pbmplY3RlZFNjcmlwdEZvck9iamVjdElkKG9iamVjdElkKTsKLSAg
ICBpZiAoaW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKSB7Ci0gICAgICAgIGVycm9yU3RyaW5n
ID0gIk1pc3NpbmcgaW5qZWN0ZWQgc2NyaXB0IGZvciBnaXZlbiBvYmplY3RJZCJfczsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoaW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKQor
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk1pc3NpbmcgaW5qZWN0ZWQgc2NyaXB0IGZv
ciBnaXZlbiBvYmplY3RJZCJfcyk7CiAKICAgICBKU0M6OkRlYnVnZ2VyOjpUZW1wb3JhcmlseURp
c2FibGVFeGNlcHRpb25CcmVha3BvaW50cyB0ZW1wb3JhcmlseURpc2FibGVFeGNlcHRpb25CcmVh
a3BvaW50cyhtX2RlYnVnZ2VyKTsKICAgICB0ZW1wb3JhcmlseURpc2FibGVFeGNlcHRpb25CcmVh
a3BvaW50cy5yZXBsYWNlKCk7CiAKKyAgICBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6Ok9iamVj
dFByZXZpZXc+IHByZXZpZXc7CisKICAgICBtdXRlQ29uc29sZSgpOwogCiAgICAgaW5qZWN0ZWRT
Y3JpcHQuZ2V0UHJldmlldyhlcnJvclN0cmluZywgb2JqZWN0SWQsIHByZXZpZXcpOwogCiAgICAg
dW5tdXRlQ29uc29sZSgpOworCisgICAgaWYgKCFwcmV2aWV3KQorICAgICAgICByZXR1cm4gbWFr
ZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOworCisgICAgcmV0dXJuIHByZXZpZXcucmVsZWFzZU5v
bk51bGwoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmdldFByb3BlcnRpZXMo
RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBjb25zdCBi
b29sKiBvd25Qcm9wZXJ0aWVzLCBjb25zdCBpbnQqIGZldGNoU3RhcnQsIGNvbnN0IGludCogZmV0
Y2hDb3VudCwgY29uc3QgYm9vbCogZ2VuZXJhdGVQcmV2aWV3LCBSZWZQdHI8SlNPTjo6QXJyYXlP
ZjxQcm90b2NvbDo6UnVudGltZTo6UHJvcGVydHlEZXNjcmlwdG9yPj4mIHByb3BlcnRpZXMsIFJl
ZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpJbnRlcm5hbFByb3BlcnR5RGVz
Y3JpcHRvcj4+JiBpbnRlcm5hbFByb3BlcnRpZXMpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxz
dGQ6OnR1cGxlPFJlZjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpQcm9wZXJ0eURl
c2NyaXB0b3I+PiwgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OkludGVy
bmFsUHJvcGVydHlEZXNjcmlwdG9yPj4+PiBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmdldFByb3Bl
cnRpZXMoY29uc3QgUHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdElkJiBvYmplY3RJZCwg
T3B0aW9uYWw8Ym9vbD4mJiBvd25Qcm9wZXJ0aWVzLCBPcHRpb25hbDxpbnQ+JiYgZmV0Y2hTdGFy
dCwgT3B0aW9uYWw8aW50PiYmIGZldGNoQ291bnQsIE9wdGlvbmFsPGJvb2w+JiYgZ2VuZXJhdGVQ
cmV2aWV3KQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAg
IEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0ID0gbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIu
aW5qZWN0ZWRTY3JpcHRGb3JPYmplY3RJZChvYmplY3RJZCk7Ci0gICAgaWYgKGluamVjdGVkU2Ny
aXB0Lmhhc05vVmFsdWUoKSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIGluamVj
dGVkIHNjcmlwdCBmb3IgZ2l2ZW4gb2JqZWN0SWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
CisgICAgaWYgKGluamVjdGVkU2NyaXB0Lmhhc05vVmFsdWUoKSkKKyAgICAgICAgcmV0dXJuIG1h
a2VVbmV4cGVjdGVkKCJNaXNzaW5nIGluamVjdGVkIHNjcmlwdCBmb3IgZ2l2ZW4gb2JqZWN0SWQi
X3MpOwogCi0gICAgaW50IHN0YXJ0ID0gYXNJbnQoZmV0Y2hTdGFydCk7Ci0gICAgaWYgKHN0YXJ0
IDwgMCkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJmZXRjaFN0YXJ0IGNhbm5vdCBiZSBuZWdh
dGl2ZSJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpbnQgc3RhcnQgPSBmZXRjaFN0
YXJ0LnZhbHVlT3IoMCk7CisgICAgaWYgKHN0YXJ0IDwgMCkKKyAgICAgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKCJmZXRjaFN0YXJ0IGNhbm5vdCBiZSBuZWdhdGl2ZSJfcyk7CiAKLSAgICBpbnQg
Y291bnQgPSBhc0ludChmZXRjaENvdW50KTsKLSAgICBpZiAoY291bnQgPCAwKSB7Ci0gICAgICAg
IGVycm9yU3RyaW5nID0gImZldGNoQ291bnQgY2Fubm90IGJlIG5lZ2F0aXZlIl9zOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQorICAgIGludCBjb3VudCA9IGZldGNoQ291bnQudmFsdWVPcigwKTsK
KyAgICBpZiAoY291bnQgPCAwKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoImZldGNo
Q291bnQgY2Fubm90IGJlIG5lZ2F0aXZlIl9zKTsKKworICAgIFJlZlB0cjxKU09OOjpBcnJheU9m
PFByb3RvY29sOjpSdW50aW1lOjpQcm9wZXJ0eURlc2NyaXB0b3I+PiBwcm9wZXJ0aWVzOworICAg
IFJlZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpJbnRlcm5hbFByb3BlcnR5
RGVzY3JpcHRvcj4+IGludGVybmFsUHJvcGVydGllczsKIAogICAgIEpTQzo6RGVidWdnZXI6OlRl
bXBvcmFyaWx5RGlzYWJsZUV4Y2VwdGlvbkJyZWFrcG9pbnRzIHRlbXBvcmFyaWx5RGlzYWJsZUV4
Y2VwdGlvbkJyZWFrcG9pbnRzKG1fZGVidWdnZXIpOwogICAgIHRlbXBvcmFyaWx5RGlzYWJsZUV4
Y2VwdGlvbkJyZWFrcG9pbnRzLnJlcGxhY2UoKTsKIAogICAgIG11dGVDb25zb2xlKCk7CiAKLSAg
ICBpbmplY3RlZFNjcmlwdC5nZXRQcm9wZXJ0aWVzKGVycm9yU3RyaW5nLCBvYmplY3RJZCwgYXNC
b29sKG93blByb3BlcnRpZXMpLCBzdGFydCwgY291bnQsIGFzQm9vbChnZW5lcmF0ZVByZXZpZXcp
LCBwcm9wZXJ0aWVzKTsKKyAgICBpbmplY3RlZFNjcmlwdC5nZXRQcm9wZXJ0aWVzKGVycm9yU3Ry
aW5nLCBvYmplY3RJZCwgb3duUHJvcGVydGllcy52YWx1ZU9yKGZhbHNlKSwgc3RhcnQsIGNvdW50
LCBnZW5lcmF0ZVByZXZpZXcudmFsdWVPcihmYWxzZSksIHByb3BlcnRpZXMpOwogCiAgICAgLy8g
T25seSBpbmNsdWRlIGludGVybmFsIHByb3BlcnRpZXMgZm9yIHRoZSBmaXJzdCBmZXRjaC4KICAg
ICBpZiAoIXN0YXJ0KQotICAgICAgICBpbmplY3RlZFNjcmlwdC5nZXRJbnRlcm5hbFByb3BlcnRp
ZXMoZXJyb3JTdHJpbmcsIG9iamVjdElkLCBhc0Jvb2woZ2VuZXJhdGVQcmV2aWV3KSwgaW50ZXJu
YWxQcm9wZXJ0aWVzKTsKKyAgICAgICAgaW5qZWN0ZWRTY3JpcHQuZ2V0SW50ZXJuYWxQcm9wZXJ0
aWVzKGVycm9yU3RyaW5nLCBvYmplY3RJZCwgZ2VuZXJhdGVQcmV2aWV3LnZhbHVlT3IoZmFsc2Up
LCBpbnRlcm5hbFByb3BlcnRpZXMpOwogCiAgICAgdW5tdXRlQ29uc29sZSgpOworCisgICAgaWYg
KCFwcm9wZXJ0aWVzKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcp
OworCisgICAgcmV0dXJuIHsgeyBwcm9wZXJ0aWVzLnJlbGVhc2VOb25OdWxsKCksIFdURk1vdmUo
aW50ZXJuYWxQcm9wZXJ0aWVzKSB9IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50
OjpnZXREaXNwbGF5YWJsZVByb3BlcnRpZXMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25z
dCBTdHJpbmcmIG9iamVjdElkLCBjb25zdCBpbnQqIGZldGNoU3RhcnQsIGNvbnN0IGludCogZmV0
Y2hDb3VudCwgY29uc3QgYm9vbCogZ2VuZXJhdGVQcmV2aWV3LCBSZWZQdHI8SlNPTjo6QXJyYXlP
ZjxQcm90b2NvbDo6UnVudGltZTo6UHJvcGVydHlEZXNjcmlwdG9yPj4mIHByb3BlcnRpZXMsIFJl
ZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpJbnRlcm5hbFByb3BlcnR5RGVz
Y3JpcHRvcj4+JiBpbnRlcm5hbFByb3BlcnRpZXMpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxz
dGQ6OnR1cGxlPFJlZjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpQcm9wZXJ0eURl
c2NyaXB0b3I+PiwgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OkludGVy
bmFsUHJvcGVydHlEZXNjcmlwdG9yPj4+PiBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmdldERpc3Bs
YXlhYmxlUHJvcGVydGllcyhjb25zdCBQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0SWQm
IG9iamVjdElkLCBPcHRpb25hbDxpbnQ+JiYgZmV0Y2hTdGFydCwgT3B0aW9uYWw8aW50PiYmIGZl
dGNoQ291bnQsIE9wdGlvbmFsPGJvb2w+JiYgZ2VuZXJhdGVQcmV2aWV3KQogeworICAgIFByb3Rv
Y29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIEluamVjdGVkU2NyaXB0IGluamVj
dGVkU2NyaXB0ID0gbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIuaW5qZWN0ZWRTY3JpcHRGb3JPYmpl
Y3RJZChvYmplY3RJZCk7Ci0gICAgaWYgKGluamVjdGVkU2NyaXB0Lmhhc05vVmFsdWUoKSkgewot
ICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIGluamVjdGVkIHNjcmlwdCBmb3IgZ2l2ZW4g
b2JqZWN0SWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKGluamVjdGVkU2Ny
aXB0Lmhhc05vVmFsdWUoKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJNaXNzaW5n
IGluamVjdGVkIHNjcmlwdCBmb3IgZ2l2ZW4gb2JqZWN0SWQiX3MpOwogCi0gICAgaW50IHN0YXJ0
ID0gYXNJbnQoZmV0Y2hTdGFydCk7Ci0gICAgaWYgKHN0YXJ0IDwgMCkgewotICAgICAgICBlcnJv
clN0cmluZyA9ICJmZXRjaFN0YXJ0IGNhbm5vdCBiZSBuZWdhdGl2ZSJfczsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KKyAgICBpbnQgc3RhcnQgPSBmZXRjaFN0YXJ0LnZhbHVlT3IoMCk7CisgICAg
aWYgKHN0YXJ0IDwgMCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJmZXRjaFN0YXJ0
IGNhbm5vdCBiZSBuZWdhdGl2ZSJfcyk7CiAKLSAgICBpbnQgY291bnQgPSBhc0ludChmZXRjaENv
dW50KTsKLSAgICBpZiAoY291bnQgPCAwKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gImZldGNo
Q291bnQgY2Fubm90IGJlIG5lZ2F0aXZlIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAg
IGludCBjb3VudCA9IGZldGNoQ291bnQudmFsdWVPcigwKTsKKyAgICBpZiAoY291bnQgPCAwKQor
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoImZldGNoQ291bnQgY2Fubm90IGJlIG5lZ2F0
aXZlIl9zKTsKKworICAgIFJlZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpQ
cm9wZXJ0eURlc2NyaXB0b3I+PiBwcm9wZXJ0aWVzOworICAgIFJlZlB0cjxKU09OOjpBcnJheU9m
PFByb3RvY29sOjpSdW50aW1lOjpJbnRlcm5hbFByb3BlcnR5RGVzY3JpcHRvcj4+IGludGVybmFs
UHJvcGVydGllczsKIAogICAgIEpTQzo6RGVidWdnZXI6OlRlbXBvcmFyaWx5RGlzYWJsZUV4Y2Vw
dGlvbkJyZWFrcG9pbnRzIHRlbXBvcmFyaWx5RGlzYWJsZUV4Y2VwdGlvbkJyZWFrcG9pbnRzKG1f
ZGVidWdnZXIpOwogICAgIHRlbXBvcmFyaWx5RGlzYWJsZUV4Y2VwdGlvbkJyZWFrcG9pbnRzLnJl
cGxhY2UoKTsKIAogICAgIG11dGVDb25zb2xlKCk7CiAKLSAgICBpbmplY3RlZFNjcmlwdC5nZXRE
aXNwbGF5YWJsZVByb3BlcnRpZXMoZXJyb3JTdHJpbmcsIG9iamVjdElkLCBzdGFydCwgY291bnQs
IGFzQm9vbChnZW5lcmF0ZVByZXZpZXcpLCBwcm9wZXJ0aWVzKTsKKyAgICBpbmplY3RlZFNjcmlw
dC5nZXREaXNwbGF5YWJsZVByb3BlcnRpZXMoZXJyb3JTdHJpbmcsIG9iamVjdElkLCBzdGFydCwg
Y291bnQsIGdlbmVyYXRlUHJldmlldy52YWx1ZU9yKGZhbHNlKSwgcHJvcGVydGllcyk7CiAKICAg
ICAvLyBPbmx5IGluY2x1ZGUgaW50ZXJuYWwgcHJvcGVydGllcyBmb3IgdGhlIGZpcnN0IGZldGNo
LgogICAgIGlmICghc3RhcnQpCi0gICAgICAgIGluamVjdGVkU2NyaXB0LmdldEludGVybmFsUHJv
cGVydGllcyhlcnJvclN0cmluZywgb2JqZWN0SWQsIGFzQm9vbChnZW5lcmF0ZVByZXZpZXcpLCBp
bnRlcm5hbFByb3BlcnRpZXMpOworICAgICAgICBpbmplY3RlZFNjcmlwdC5nZXRJbnRlcm5hbFBy
b3BlcnRpZXMoZXJyb3JTdHJpbmcsIG9iamVjdElkLCBnZW5lcmF0ZVByZXZpZXcudmFsdWVPcihm
YWxzZSksIGludGVybmFsUHJvcGVydGllcyk7CiAKICAgICB1bm11dGVDb25zb2xlKCk7CisKKyAg
ICBpZiAoIXByb3BlcnRpZXMpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0
cmluZyk7CisKKyAgICByZXR1cm4geyB7IHByb3BlcnRpZXMucmVsZWFzZU5vbk51bGwoKSwgV1RG
TW92ZShpbnRlcm5hbFByb3BlcnRpZXMpIH0gfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSdW50aW1l
QWdlbnQ6OmdldENvbGxlY3Rpb25FbnRyaWVzKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29u
c3QgU3RyaW5nJiBvYmplY3RJZCwgY29uc3QgU3RyaW5nKiBvYmplY3RHcm91cCwgY29uc3QgaW50
KiBmZXRjaFN0YXJ0LCBjb25zdCBpbnQqIGZldGNoQ291bnQsIFJlZlB0cjxKU09OOjpBcnJheU9m
PFByb3RvY29sOjpSdW50aW1lOjpDb2xsZWN0aW9uRW50cnk+PiYgZW50cmllcykKK1Byb3RvY29s
OjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpDb2xs
ZWN0aW9uRW50cnk+Pj4gSW5zcGVjdG9yUnVudGltZUFnZW50OjpnZXRDb2xsZWN0aW9uRW50cmll
cyhjb25zdCBQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0SWQmIG9iamVjdElkLCBjb25z
dCBTdHJpbmcmIG9iamVjdEdyb3VwLCBPcHRpb25hbDxpbnQ+JiYgZmV0Y2hTdGFydCwgT3B0aW9u
YWw8aW50PiYmIGZldGNoQ291bnQpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9y
U3RyaW5nOworCiAgICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHQgPSBtX2luamVjdGVk
U2NyaXB0TWFuYWdlci5pbmplY3RlZFNjcmlwdEZvck9iamVjdElkKG9iamVjdElkKTsKLSAgICBp
ZiAoaW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0g
Ik1pc3NpbmcgaW5qZWN0ZWQgc2NyaXB0IGZvciBnaXZlbiBvYmplY3RJZCJfczsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KKyAgICBpZiAoaW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKQorICAg
ICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk1pc3NpbmcgaW5qZWN0ZWQgc2NyaXB0IGZvciBn
aXZlbiBvYmplY3RJZCJfcyk7CiAKLSAgICBpbnQgc3RhcnQgPSBhc0ludChmZXRjaFN0YXJ0KTsK
LSAgICBpZiAoc3RhcnQgPCAwKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gImZldGNoU3RhcnQg
Y2Fubm90IGJlIG5lZ2F0aXZlIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGludCBz
dGFydCA9IGZldGNoU3RhcnQudmFsdWVPcigwKTsKKyAgICBpZiAoc3RhcnQgPCAwKQorICAgICAg
ICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoImZldGNoU3RhcnQgY2Fubm90IGJlIG5lZ2F0aXZlIl9z
KTsKIAotICAgIGludCBjb3VudCA9IGFzSW50KGZldGNoQ291bnQpOwotICAgIGlmIChjb3VudCA8
IDApIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiZmV0Y2hDb3VudCBjYW5ub3QgYmUgbmVnYXRp
dmUiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaW50IGNvdW50ID0gZmV0Y2hDb3Vu
dC52YWx1ZU9yKDApOworICAgIGlmIChjb3VudCA8IDApCisgICAgICAgIHJldHVybiBtYWtlVW5l
eHBlY3RlZCgiZmV0Y2hDb3VudCBjYW5ub3QgYmUgbmVnYXRpdmUiX3MpOwogCi0gICAgaW5qZWN0
ZWRTY3JpcHQuZ2V0Q29sbGVjdGlvbkVudHJpZXMoZXJyb3JTdHJpbmcsIG9iamVjdElkLCBvYmpl
Y3RHcm91cCA/ICpvYmplY3RHcm91cCA6IFN0cmluZygpLCBzdGFydCwgY291bnQsIGVudHJpZXMp
OworICAgIFJlZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpDb2xsZWN0aW9u
RW50cnk+PiBlbnRyaWVzOworCisgICAgaW5qZWN0ZWRTY3JpcHQuZ2V0Q29sbGVjdGlvbkVudHJp
ZXMoZXJyb3JTdHJpbmcsIG9iamVjdElkLCBvYmplY3RHcm91cCwgc3RhcnQsIGNvdW50LCBlbnRy
aWVzKTsKKworICAgIGlmICghZW50cmllcykKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVk
KGVycm9yU3RyaW5nKTsKKworICAgIHJldHVybiBlbnRyaWVzLnJlbGVhc2VOb25OdWxsKCk7CiB9
CiAKLXZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50OjpzYXZlUmVzdWx0KEVycm9yU3RyaW5nJiBl
cnJvclN0cmluZywgY29uc3QgSlNPTjo6T2JqZWN0JiBjYWxsQXJndW1lbnQsIGNvbnN0IGludCog
ZXhlY3V0aW9uQ29udGV4dElkLCBPcHRpb25hbDxpbnQ+JiBzYXZlZFJlc3VsdEluZGV4KQorUHJv
dG9jb2w6OkVycm9yU3RyaW5nT3I8T3B0aW9uYWw8aW50PiAvKiBzYXZlUmVzdWx0SW5kZXggKi8+
IEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6c2F2ZVJlc3VsdChSZWY8SlNPTjo6T2JqZWN0PiYmIGNh
bGxBcmd1bWVudCwgT3B0aW9uYWw8UHJvdG9jb2w6OlJ1bnRpbWU6OkV4ZWN1dGlvbkNvbnRleHRJ
ZD4mJiBleGVjdXRpb25Db250ZXh0SWQpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVy
cm9yU3RyaW5nOworCiAgICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHQ7CiAKLSAgICBT
dHJpbmcgb2JqZWN0SWQ7Ci0gICAgaWYgKGNhbGxBcmd1bWVudC5nZXRTdHJpbmcoIm9iamVjdElk
Il9zLCBvYmplY3RJZCkpIHsKLSAgICAgICAgaW5qZWN0ZWRTY3JpcHQgPSBtX2luamVjdGVkU2Ny
aXB0TWFuYWdlci5pbmplY3RlZFNjcmlwdEZvck9iamVjdElkKG9iamVjdElkKTsKLSAgICAgICAg
aWYgKGluamVjdGVkU2NyaXB0Lmhhc05vVmFsdWUoKSkgewotICAgICAgICAgICAgZXJyb3JTdHJp
bmcgPSAiTWlzc2luZyBpbmplY3RlZCBzY3JpcHQgZm9yIGdpdmVuIG9iamVjdElkIl9zOwotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaW5qZWN0
ZWRTY3JpcHQgPSBpbmplY3RlZFNjcmlwdEZvckV2YWwoZXJyb3JTdHJpbmcsIGV4ZWN1dGlvbkNv
bnRleHRJZCk7CisgICAgYXV0byBvYmplY3RJZCA9IGNhbGxBcmd1bWVudC0+Z2V0U3RyaW5nKFBy
b3RvY29sOjpSdW50aW1lOjpDYWxsQXJndW1lbnQ6Om9iamVjdElkS2V5KTsKKyAgICBpZiAoIW9i
amVjdElkKSB7CisgICAgICAgIGluamVjdGVkU2NyaXB0ID0gaW5qZWN0ZWRTY3JpcHRGb3JFdmFs
KGVycm9yU3RyaW5nLCBXVEZNb3ZlKGV4ZWN1dGlvbkNvbnRleHRJZCkpOwogICAgICAgICBpZiAo
aW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKQotICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBpbmplY3RlZFNjcmlwdCA9IG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmluamVjdGVk
U2NyaXB0Rm9yT2JqZWN0SWQob2JqZWN0SWQpOworICAgICAgICBpZiAoaW5qZWN0ZWRTY3JpcHQu
aGFzTm9WYWx1ZSgpKQorICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJNaXNzaW5n
IGluamVjdGVkIHNjcmlwdCBmb3IgZ2l2ZW4gb2JqZWN0SWQiX3MpOwogICAgIH0KLSAgICAKLSAg
ICBpbmplY3RlZFNjcmlwdC5zYXZlUmVzdWx0KGVycm9yU3RyaW5nLCBjYWxsQXJndW1lbnQudG9K
U09OU3RyaW5nKCksIHNhdmVkUmVzdWx0SW5kZXgpOworCisgICAgT3B0aW9uYWw8aW50PiBzYXZl
ZFJlc3VsdEluZGV4OworCisgICAgaW5qZWN0ZWRTY3JpcHQuc2F2ZVJlc3VsdChlcnJvclN0cmlu
ZywgY2FsbEFyZ3VtZW50LT50b0pTT05TdHJpbmcoKSwgc2F2ZWRSZXN1bHRJbmRleCk7CisKKyAg
ICBpZiAoIXNhdmVkUmVzdWx0SW5kZXgpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChl
cnJvclN0cmluZyk7CisKKyAgICByZXR1cm4gV1RGTW92ZShzYXZlZFJlc3VsdEluZGV4KTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OnNldFNhdmVkUmVzdWx0QWxpYXMoRXJyb3JT
dHJpbmcmLCBjb25zdCBTdHJpbmcqIGFsaWFzKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9p
ZD4gSW5zcGVjdG9yUnVudGltZUFnZW50OjpzZXRTYXZlZFJlc3VsdEFsaWFzKGNvbnN0IFN0cmlu
ZyYgc2F2ZWRSZXN1bHRBbGlhcykKIHsKLSAgICBPcHRpb25hbDxTdHJpbmc+IHNhdmVkUmVzdWx0
QWxpYXM7Ci0gICAgaWYgKGFsaWFzICYmICFhbGlhcy0+aXNFbXB0eSgpKQotICAgICAgICBzYXZl
ZFJlc3VsdEFsaWFzID0gKmFsaWFzOwogICAgIG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmluamVj
dGVkU2NyaXB0SG9zdCgpLnNldFNhdmVkUmVzdWx0QWxpYXMoc2F2ZWRSZXN1bHRBbGlhcyk7CisK
KyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6cmVsZWFz
ZU9iamVjdChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgb2JqZWN0SWQpCitQcm90b2NvbDo6
RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OnJlbGVhc2VPYmplY3Qo
Y29uc3QgUHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdElkJiBvYmplY3RJZCkKIHsKICAg
ICBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdCA9IG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2Vy
LmluamVjdGVkU2NyaXB0Rm9yT2JqZWN0SWQob2JqZWN0SWQpOwogICAgIGlmICghaW5qZWN0ZWRT
Y3JpcHQuaGFzTm9WYWx1ZSgpKQogICAgICAgICBpbmplY3RlZFNjcmlwdC5yZWxlYXNlT2JqZWN0
KG9iamVjdElkKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yUnVudGlt
ZUFnZW50OjpyZWxlYXNlT2JqZWN0R3JvdXAoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIG9i
amVjdEdyb3VwKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yUnVudGlt
ZUFnZW50OjpyZWxlYXNlT2JqZWN0R3JvdXAoY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCkKIHsK
ICAgICBtX2luamVjdGVkU2NyaXB0TWFuYWdlci5yZWxlYXNlT2JqZWN0R3JvdXAob2JqZWN0R3Jv
dXApOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6
OmdldFJ1bnRpbWVUeXBlc0ZvclZhcmlhYmxlc0F0T2Zmc2V0cyhFcnJvclN0cmluZyYgZXJyb3JT
dHJpbmcsIGNvbnN0IEpTT046OkFycmF5JiBsb2NhdGlvbnMsIFJlZlB0cjxKU09OOjpBcnJheU9m
PFByb3RvY29sOjpSdW50aW1lOjpUeXBlRGVzY3JpcHRpb24+PiYgdHlwZURlc2NyaXB0aW9ucykK
K1Byb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50
aW1lOjpUeXBlRGVzY3JpcHRpb24+Pj4gSW5zcGVjdG9yUnVudGltZUFnZW50OjpnZXRSdW50aW1l
VHlwZXNGb3JWYXJpYWJsZXNBdE9mZnNldHMoUmVmPEpTT046OkFycmF5PiYmIGxvY2F0aW9ucykK
IHsKICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogCi0gICAgdHlw
ZURlc2NyaXB0aW9ucyA9IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OlR5cGVEZXNj
cmlwdGlvbj46OmNyZWF0ZSgpOwotICAgIGlmICghbV92bS50eXBlUHJvZmlsZXIoKSkgewotICAg
ICAgICBlcnJvclN0cmluZyA9ICJWTSBoYXMgbm8gdHlwZSBpbmZvcm1hdGlvbiJfczsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoIW1fdm0udHlwZVByb2ZpbGVyKCkpCisgICAgICAg
IHJldHVybiBtYWtlVW5leHBlY3RlZCgiVk0gaGFzIG5vIHR5cGUgaW5mb3JtYXRpb24iX3MpOwor
CisgICAgYXV0byB0eXBlcyA9IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OlR5cGVE
ZXNjcmlwdGlvbj46OmNyZWF0ZSgpOwogCiAgICAgTW9ub3RvbmljVGltZSBzdGFydCA9IE1vbm90
b25pY1RpbWU6Om5vdygpOwogICAgIG1fdm0udHlwZVByb2ZpbGVyTG9nKCktPnByb2Nlc3NMb2dF
bnRyaWVzKG1fdm0sICJVc2VyIFF1ZXJ5Il9zKTsKIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbG9jYXRpb25zLmxlbmd0aCgpOyBpKyspIHsKLSAgICAgICAgUmVmUHRyPEpTT046OlZhbHVl
PiB2YWx1ZSA9IGxvY2F0aW9ucy5nZXQoaSk7Ci0gICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+
IGxvY2F0aW9uOwotICAgICAgICBpZiAoIXZhbHVlLT5hc09iamVjdChsb2NhdGlvbikpIHsKLSAg
ICAgICAgICAgIGVycm9yU3RyaW5nID0gIlVuZXhwZWN0ZWQgbm9uLW9iamVjdCBpdGVtIGluIGxv
Y2F0aW9ucyJfczsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQorICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbG9jYXRpb25zLT5sZW5ndGgoKTsgaSsrKSB7CisgICAgICAgIGF1dG8g
bG9jYXRpb24gPSBsb2NhdGlvbnMtPmdldChpKS0+YXNPYmplY3QoKTsKKyAgICAgICAgaWYgKCFs
b2NhdGlvbikKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiVW5leHBlY3RlZCBu
b24tb2JqZWN0IGl0ZW0gaW4gbG9jYXRpb25zIl9zKTsKIAotICAgICAgICBpbnQgZGVzY3JpcHRv
cjsKLSAgICAgICAgU3RyaW5nIHNvdXJjZUlEQXNTdHJpbmc7Ci0gICAgICAgIGludCBkaXZvdDsK
LSAgICAgICAgbG9jYXRpb24tPmdldEludGVnZXIoInR5cGVJbmZvcm1hdGlvbkRlc2NyaXB0b3Ii
X3MsIGRlc2NyaXB0b3IpOwotICAgICAgICBsb2NhdGlvbi0+Z2V0U3RyaW5nKCJzb3VyY2VJRCJf
cywgc291cmNlSURBc1N0cmluZyk7Ci0gICAgICAgIGxvY2F0aW9uLT5nZXRJbnRlZ2VyKCJkaXZv
dCJfcywgZGl2b3QpOworICAgICAgICBhdXRvIGRlc2NyaXB0b3IgPSBsb2NhdGlvbi0+Z2V0SW50
ZWdlcihQcm90b2NvbDo6UnVudGltZTo6VHlwZUxvY2F0aW9uOjp0eXBlSW5mb3JtYXRpb25EZXNj
cmlwdG9yS2V5KS52YWx1ZU9yKFR5cGVQcm9maWxlclNlYXJjaERlc2NyaXB0b3JOb3JtYWwpOwor
ICAgICAgICBhdXRvIHNvdXJjZUlEU3RyaW5nID0gbG9jYXRpb24tPmdldFN0cmluZyhQcm90b2Nv
bDo6UnVudGltZTo6VHlwZUxvY2F0aW9uOjpzb3VyY2VJREtleSk7CisgICAgICAgIGF1dG8gZGl2
b3QgPSBsb2NhdGlvbi0+Z2V0SW50ZWdlcihQcm90b2NvbDo6UnVudGltZTo6VHlwZUxvY2F0aW9u
OjpkaXZvdEtleSkudmFsdWVPcigwKTsKIAogICAgICAgICBib29sIG9rYXk7Ci0gICAgICAgIFR5
cGVMb2NhdGlvbiogdHlwZUxvY2F0aW9uID0gbV92bS50eXBlUHJvZmlsZXIoKS0+ZmluZExvY2F0
aW9uKGRpdm90LCBzb3VyY2VJREFzU3RyaW5nLnRvSW50UHRyU3RyaWN0KCZva2F5KSwgc3RhdGlj
X2Nhc3Q8VHlwZVByb2ZpbGVyU2VhcmNoRGVzY3JpcHRvcj4oZGVzY3JpcHRvciksIG1fdm0pOwor
ICAgICAgICBUeXBlTG9jYXRpb24qIHR5cGVMb2NhdGlvbiA9IG1fdm0udHlwZVByb2ZpbGVyKCkt
PmZpbmRMb2NhdGlvbihkaXZvdCwgc291cmNlSURTdHJpbmcudG9JbnRQdHJTdHJpY3QoJm9rYXkp
LCBzdGF0aWNfY2FzdDxUeXBlUHJvZmlsZXJTZWFyY2hEZXNjcmlwdG9yPihkZXNjcmlwdG9yKSwg
bV92bSk7CiAgICAgICAgIEFTU0VSVChva2F5KTsKIAogICAgICAgICBSZWZQdHI8VHlwZVNldD4g
dHlwZVNldDsKQEAgLTM3MiwxMiArNDE5LDE0IEBAIHZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50
OjpnZXRSdW50aW1lVHlwZXNGb3JWYXJpYWJsZXNBdE9mZnNldHMoRXJyb3JTdHJpbmcmIGVyCiAg
ICAgICAgICAgICBkZXNjcmlwdGlvbi0+c2V0SXNUcnVuY2F0ZWQodHlwZVNldC0+aXNPdmVyZmxv
d24oKSk7CiAgICAgICAgIH0KIAotICAgICAgICB0eXBlRGVzY3JpcHRpb25zLT5hZGRJdGVtKFdU
Rk1vdmUoZGVzY3JpcHRpb24pKTsKKyAgICAgICAgdHlwZXMtPmFkZEl0ZW0oV1RGTW92ZShkZXNj
cmlwdGlvbikpOwogICAgIH0KIAogICAgIE1vbm90b25pY1RpbWUgZW5kID0gTW9ub3RvbmljVGlt
ZTo6bm93KCk7CiAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgIGRhdGFMb2dGKCJJbnNwZWN0b3I6
OmdldFJ1bnRpbWVUeXBlc0ZvclZhcmlhYmxlc0F0T2Zmc2V0cyB0b29rICVsZm1zXG4iLCAoZW5k
IC0gc3RhcnQpLm1pbGxpc2Vjb25kcygpKTsKKworICAgIHJldHVybiBXVEZNb3ZlKHR5cGVzKTsK
IH0KIAogdm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmRpZENyZWF0ZUZyb250ZW5kQW5kQmFj
a2VuZChJbnNwZWN0b3I6OkZyb250ZW5kUm91dGVyKiwgSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0
Y2hlciopCkBAIC0zODksMjggKzQzOCwzNSBAQCB2b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6
d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoRGlzY29ubmVjdFJlYXNvbiByZWFzbwogICAg
IGlmIChyZWFzb24gIT0gRGlzY29ubmVjdFJlYXNvbjo6SW5zcGVjdGVkVGFyZ2V0RGVzdHJveWVk
ICYmIG1faXNUeXBlUHJvZmlsaW5nRW5hYmxlZCkKICAgICAgICAgc2V0VHlwZVByb2ZpbGVyRW5h
YmxlZFN0YXRlKGZhbHNlKTsKIAotICAgIFN0cmluZyB1bnVzZWQ7Ci0gICAgZGlzYWJsZSh1bnVz
ZWQpOworICAgIGRpc2FibGUoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmVu
YWJsZVR5cGVQcm9maWxlcihFcnJvclN0cmluZyYpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2
b2lkPiBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmVuYWJsZVR5cGVQcm9maWxlcigpCiB7CiAgICAg
c2V0VHlwZVByb2ZpbGVyRW5hYmxlZFN0YXRlKHRydWUpOworCisgICAgcmV0dXJuIHsgfTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmRpc2FibGVUeXBlUHJvZmlsZXIoRXJyb3JT
dHJpbmcmKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yUnVudGltZUFn
ZW50OjpkaXNhYmxlVHlwZVByb2ZpbGVyKCkKIHsKICAgICBzZXRUeXBlUHJvZmlsZXJFbmFibGVk
U3RhdGUoZmFsc2UpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSdW50
aW1lQWdlbnQ6OmVuYWJsZUNvbnRyb2xGbG93UHJvZmlsZXIoRXJyb3JTdHJpbmcmKQorUHJvdG9j
b2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yUnVudGltZUFnZW50OjplbmFibGVDb250
cm9sRmxvd1Byb2ZpbGVyKCkKIHsKICAgICBzZXRDb250cm9sRmxvd1Byb2ZpbGVyRW5hYmxlZFN0
YXRlKHRydWUpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSdW50aW1l
QWdlbnQ6OmRpc2FibGVDb250cm9sRmxvd1Byb2ZpbGVyKEVycm9yU3RyaW5nJikKK1Byb3RvY29s
OjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6ZGlzYWJsZUNvbnRy
b2xGbG93UHJvZmlsZXIoKQogewogICAgIHNldENvbnRyb2xGbG93UHJvZmlsZXJFbmFibGVkU3Rh
dGUoZmFsc2UpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAogdm9pZCBJbnNwZWN0b3JSdW50aW1l
QWdlbnQ6OnNldFR5cGVQcm9maWxlckVuYWJsZWRTdGF0ZShib29sIGlzVHlwZVByb2ZpbGluZ0Vu
YWJsZWQpCkBAIC00NDIsMTkgKzQ5OCwxMyBAQCB2b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6
c2V0Q29udHJvbEZsb3dQcm9maWxlckVuYWJsZWRTdGF0ZShib29sIGlzQ29udHJvbEZsbwogICAg
IH0pOwogfQogCi12b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6Z2V0QmFzaWNCbG9ja3MoRXJy
b3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHNvdXJjZUlEQXNTdHJpbmcsIFJl
ZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpCYXNpY0Jsb2NrPj4mIGJhc2lj
QmxvY2tzKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEpTT046OkFycmF5T2Y8UHJvdG9j
b2w6OlJ1bnRpbWU6OkJhc2ljQmxvY2s+Pj4gSW5zcGVjdG9yUnVudGltZUFnZW50OjpnZXRCYXNp
Y0Jsb2Nrcyhjb25zdCBTdHJpbmcmIHNvdXJjZUlEKQogewotICAgIGlmICghbV92bS5jb250cm9s
Rmxvd1Byb2ZpbGVyKCkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiVk0gaGFzIG5vIGNvbnRy
b2wgZmxvdyBpbmZvcm1hdGlvbiJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAo
IW1fdm0uY29udHJvbEZsb3dQcm9maWxlcigpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0
ZWQoIlZNIGhhcyBubyBjb250cm9sIGZsb3cgaW5mb3JtYXRpb24iX3MpOwogCi0gICAgYm9vbCBv
a2F5OwotICAgIGludHB0cl90IHNvdXJjZUlEID0gc291cmNlSURBc1N0cmluZy50b0ludFB0clN0
cmljdCgmb2theSk7Ci0gICAgQVNTRVJUKG9rYXkpOwotICAgIGNvbnN0IFZlY3RvcjxCYXNpY0Js
b2NrUmFuZ2U+JiBiYXNpY0Jsb2NrUmFuZ2VzID0gbV92bS5jb250cm9sRmxvd1Byb2ZpbGVyKCkt
PmdldEJhc2ljQmxvY2tzRm9yU291cmNlSUQoc291cmNlSUQsIG1fdm0pOwotICAgIGJhc2ljQmxv
Y2tzID0gSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UnVudGltZTo6QmFzaWNCbG9jaz46OmNyZWF0
ZSgpOwotICAgIGZvciAoY29uc3QgQmFzaWNCbG9ja1JhbmdlJiBibG9jayA6IGJhc2ljQmxvY2tS
YW5nZXMpIHsKKyAgICBhdXRvIGJhc2ljQmxvY2tzID0gSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6
UnVudGltZTo6QmFzaWNCbG9jaz46OmNyZWF0ZSgpOworICAgIGZvciAoY29uc3QgYXV0byYgYmxv
Y2sgOiBtX3ZtLmNvbnRyb2xGbG93UHJvZmlsZXIoKS0+Z2V0QmFzaWNCbG9ja3NGb3JTb3VyY2VJ
RChzb3VyY2VJRC50b0ludFB0cigpLCBtX3ZtKSkgewogICAgICAgICBhdXRvIGxvY2F0aW9uID0g
UHJvdG9jb2w6OlJ1bnRpbWU6OkJhc2ljQmxvY2s6OmNyZWF0ZSgpCiAgICAgICAgICAgICAuc2V0
U3RhcnRPZmZzZXQoYmxvY2subV9zdGFydE9mZnNldCkKICAgICAgICAgICAgIC5zZXRFbmRPZmZz
ZXQoYmxvY2subV9lbmRPZmZzZXQpCkBAIC00NjMsNiArNTEzLDcgQEAgdm9pZCBJbnNwZWN0b3JS
dW50aW1lQWdlbnQ6OmdldEJhc2ljQmxvY2tzKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29u
c3QgU3RyaW4KICAgICAgICAgICAgIC5yZWxlYXNlKCk7CiAgICAgICAgIGJhc2ljQmxvY2tzLT5h
ZGRJdGVtKFdURk1vdmUobG9jYXRpb24pKTsKICAgICB9CisgICAgcmV0dXJuIFdURk1vdmUoYmFz
aWNCbG9ja3MpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclJ1bnRpbWVBZ2Vu
dC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUnVu
dGltZUFnZW50LmgKaW5kZXggMTc1NjE1MTFhZjk3OWIzYjJiNzkxYzc0ZGQ3MjdkNGFlMzEyNGVj
ZS4uZjQwMjk0NmZmNmRhYTg4YzQ4NWQwOTdhYWM2MWMxZDllYmZjMDlhYSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUnVudGltZUFn
ZW50LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVj
dG9yUnVudGltZUFnZW50LmgKQEAgLTQ1LDcgKzQ1LDYgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7
CiAKIGNsYXNzIEluamVjdGVkU2NyaXB0OwogY2xhc3MgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOwot
dHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiAKIGNsYXNzIEpTX0VYUE9SVF9QUklWQVRFIElu
c3BlY3RvclJ1bnRpbWVBZ2VudCA6IHB1YmxpYyBJbnNwZWN0b3JBZ2VudEJhc2UsIHB1YmxpYyBS
dW50aW1lQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShJbnNwZWN0b3JSdW50aW1lQWdlbnQpOwpAQCAtNTgsMzMgKzU3LDMzIEBAIHB1YmxpYzoKICAg
ICB2b2lkIHdpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKERpc2Nvbm5lY3RSZWFzb24pIGZp
bmFsOwogCiAgICAgLy8gUnVudGltZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcgotICAgIHZvaWQg
ZW5hYmxlKEVycm9yU3RyaW5nJikgb3ZlcnJpZGUgeyBtX2VuYWJsZWQgPSB0cnVlOyB9Ci0gICAg
dm9pZCBkaXNhYmxlKEVycm9yU3RyaW5nJikgb3ZlcnJpZGUgeyBtX2VuYWJsZWQgPSBmYWxzZTsg
fQotICAgIHZvaWQgcGFyc2UoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24s
IFByb3RvY29sOjpSdW50aW1lOjpTeW50YXhFcnJvclR5cGUqIHJlc3VsdCwgT3B0aW9uYWw8U3Ry
aW5nPiYgbWVzc2FnZSwgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpFcnJvclJhbmdlPiYpIGZp
bmFsOwotICAgIHZvaWQgZXZhbHVhdGUoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGV4cHJl
c3Npb24sIGNvbnN0IFN0cmluZyogb2JqZWN0R3JvdXAsIGNvbnN0IGJvb2wqIGluY2x1ZGVDb21t
YW5kTGluZUFQSSwgY29uc3QgYm9vbCogZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25z
b2xlLCBjb25zdCBpbnQqIGV4ZWN1dGlvbkNvbnRleHRJZCwgY29uc3QgYm9vbCogcmV0dXJuQnlW
YWx1ZSwgY29uc3QgYm9vbCogZ2VuZXJhdGVQcmV2aWV3LCBjb25zdCBib29sKiBzYXZlUmVzdWx0
LCBjb25zdCBib29sKiBlbXVsYXRlVXNlckdlc3R1cmUsIFJlZlB0cjxQcm90b2NvbDo6UnVudGlt
ZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0LCBPcHRpb25hbDxib29sPiYgd2FzVGhyb3duLCBPcHRp
b25hbDxpbnQ+JiBzYXZlZFJlc3VsdEluZGV4KSBvdmVycmlkZTsKLSAgICB2b2lkIGF3YWl0UHJv
bWlzZShjb25zdCBTdHJpbmcmIHByb21pc2VPYmplY3RJZCwgY29uc3QgYm9vbCogcmV0dXJuQnlW
YWx1ZSwgY29uc3QgYm9vbCogZ2VuZXJhdGVQcmV2aWV3LCBjb25zdCBib29sKiBzYXZlUmVzdWx0
LCBSZWY8QXdhaXRQcm9taXNlQ2FsbGJhY2s+JiYpIGZpbmFsOwotICAgIHZvaWQgY2FsbEZ1bmN0
aW9uT24oRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBjb25zdCBTdHJpbmcm
IGV4cHJlc3Npb24sIGNvbnN0IEpTT046OkFycmF5KiBvcHRpb25hbEFyZ3VtZW50cywgY29uc3Qg
Ym9vbCogZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xlLCBjb25zdCBib29sKiBy
ZXR1cm5CeVZhbHVlLCBjb25zdCBib29sKiBnZW5lcmF0ZVByZXZpZXcsIGNvbnN0IGJvb2wqIGVt
dWxhdGVVc2VyR2VzdHVyZSwgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+
JiByZXN1bHQsIE9wdGlvbmFsPGJvb2w+JiB3YXNUaHJvd24pIG92ZXJyaWRlOwotICAgIHZvaWQg
cmVsZWFzZU9iamVjdChFcnJvclN0cmluZyYsIGNvbnN0IEVycm9yU3RyaW5nJiBvYmplY3RJZCkg
ZmluYWw7Ci0gICAgdm9pZCBnZXRQcmV2aWV3KEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBv
YmplY3RJZCwgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpPYmplY3RQcmV2aWV3PiYpIGZpbmFs
OwotICAgIHZvaWQgZ2V0UHJvcGVydGllcyhFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgb2Jq
ZWN0SWQsIGNvbnN0IGJvb2wqIG93blByb3BlcnRpZXMsIGNvbnN0IGludCogZmV0Y2hTdGFydCwg
Y29uc3QgaW50KiBmZXRjaENvdW50LCBjb25zdCBib29sKiBnZW5lcmF0ZVByZXZpZXcsIFJlZlB0
cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpQcm9wZXJ0eURlc2NyaXB0b3I+PiYg
cHJvcGVydGllcywgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OkludGVy
bmFsUHJvcGVydHlEZXNjcmlwdG9yPj4mIGludGVybmFsUHJvcGVydGllcykgZmluYWw7Ci0gICAg
dm9pZCBnZXREaXNwbGF5YWJsZVByb3BlcnRpZXMoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcm
IG9iamVjdElkLCBjb25zdCBpbnQqIGZldGNoU3RhcnQsIGNvbnN0IGludCogZmV0Y2hDb3VudCwg
Y29uc3QgYm9vbCogZ2VuZXJhdGVQcmV2aWV3LCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90b2Nv
bDo6UnVudGltZTo6UHJvcGVydHlEZXNjcmlwdG9yPj4mIHByb3BlcnRpZXMsIFJlZlB0cjxKU09O
OjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpJbnRlcm5hbFByb3BlcnR5RGVzY3JpcHRvcj4+
JiBpbnRlcm5hbFByb3BlcnRpZXMpIGZpbmFsOwotICAgIHZvaWQgZ2V0Q29sbGVjdGlvbkVudHJp
ZXMoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBjb25zdCBTdHJpbmcqIG9i
amVjdEdyb3VwLCBjb25zdCBpbnQqIGZldGNoU3RhcnQsIGNvbnN0IGludCogZmV0Y2hDb3VudCwg
UmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OkNvbGxlY3Rpb25FbnRyeT4+
JiBlbnRyaWVzKSBmaW5hbDsKLSAgICB2b2lkIHNhdmVSZXN1bHQoRXJyb3JTdHJpbmcmLCBjb25z
dCBKU09OOjpPYmplY3QmIGNhbGxBcmd1bWVudCwgY29uc3QgaW50KiBleGVjdXRpb25Db250ZXh0
SWQsIE9wdGlvbmFsPGludD4mIHNhdmVkUmVzdWx0SW5kZXgpIGZpbmFsOwotICAgIHZvaWQgc2V0
U2F2ZWRSZXN1bHRBbGlhcyhFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyogYWxpYXMpIGZpbmFs
OwotICAgIHZvaWQgcmVsZWFzZU9iamVjdEdyb3VwKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5n
JiBvYmplY3RHcm91cCkgZmluYWw7Ci0gICAgdm9pZCBnZXRSdW50aW1lVHlwZXNGb3JWYXJpYWJs
ZXNBdE9mZnNldHMoRXJyb3JTdHJpbmcmLCBjb25zdCBKU09OOjpBcnJheSYgbG9jYXRpb25zLCBS
ZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UnVudGltZTo6VHlwZURlc2NyaXB0aW9uPj4m
KSBmaW5hbDsKLSAgICB2b2lkIGVuYWJsZVR5cGVQcm9maWxlcihFcnJvclN0cmluZyYpIGZpbmFs
OwotICAgIHZvaWQgZGlzYWJsZVR5cGVQcm9maWxlcihFcnJvclN0cmluZyYpIGZpbmFsOwotICAg
IHZvaWQgZW5hYmxlQ29udHJvbEZsb3dQcm9maWxlcihFcnJvclN0cmluZyYpIGZpbmFsOwotICAg
IHZvaWQgZGlzYWJsZUNvbnRyb2xGbG93UHJvZmlsZXIoRXJyb3JTdHJpbmcmKSBmaW5hbDsKLSAg
ICB2b2lkIGdldEJhc2ljQmxvY2tzKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBpbl9zb3Vy
Y2VJRCwgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OkJhc2ljQmxvY2s+
PiYgb3V0X2Jhc2ljQmxvY2tzKSBmaW5hbDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2
b2lkPiBlbmFibGUoKSBvdmVycmlkZTsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lk
PiBkaXNhYmxlKCkgb3ZlcnJpZGU7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8c3RkOjp0
dXBsZTxQcm90b2NvbDo6UnVudGltZTo6U3ludGF4RXJyb3JUeXBlLCBTdHJpbmcgLyogbWVzc2Fn
ZSAqLywgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpFcnJvclJhbmdlPj4+IHBhcnNlKGNvbnN0
IFN0cmluZyYgZXhwcmVzc2lvbikgZmluYWw7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8
c3RkOjp0dXBsZTxSZWY8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4sIE9wdGlvbmFs
PGJvb2w+IC8qIHdhc1Rocm93biAqLywgT3B0aW9uYWw8aW50PiAvKiBzYXZlZFJlc3VsdEluZGV4
ICovPj4gZXZhbHVhdGUoY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBjb25zdCBTdHJpbmcmIG9i
amVjdEdyb3VwLCBPcHRpb25hbDxib29sPiYmIGluY2x1ZGVDb21tYW5kTGluZUFQSSwgT3B0aW9u
YWw8Ym9vbD4mJiBkb05vdFBhdXNlT25FeGNlcHRpb25zQW5kTXV0ZUNvbnNvbGUsIE9wdGlvbmFs
PFByb3RvY29sOjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0SWQ+JiYsIE9wdGlvbmFsPGJvb2w+
JiYgcmV0dXJuQnlWYWx1ZSwgT3B0aW9uYWw8Ym9vbD4mJiBnZW5lcmF0ZVByZXZpZXcsIE9wdGlv
bmFsPGJvb2w+JiYgc2F2ZVJlc3VsdCwgT3B0aW9uYWw8Ym9vbD4mJiBlbXVsYXRlVXNlckdlc3R1
cmUpIG92ZXJyaWRlOworICAgIHZvaWQgYXdhaXRQcm9taXNlKGNvbnN0IFByb3RvY29sOjpSdW50
aW1lOjpSZW1vdGVPYmplY3RJZCYsIE9wdGlvbmFsPGJvb2w+JiYgcmV0dXJuQnlWYWx1ZSwgT3B0
aW9uYWw8Ym9vbD4mJiBnZW5lcmF0ZVByZXZpZXcsIE9wdGlvbmFsPGJvb2w+JiYgc2F2ZVJlc3Vs
dCwgUmVmPEF3YWl0UHJvbWlzZUNhbGxiYWNrPiYmKSBmaW5hbDsKKyAgICBQcm90b2NvbDo6RXJy
b3JTdHJpbmdPcjxzdGQ6OnR1cGxlPFJlZjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0
PiwgT3B0aW9uYWw8Ym9vbD4gLyogd2FzVGhyb3duICovPj4gY2FsbEZ1bmN0aW9uT24oY29uc3Qg
UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdElkJiwgY29uc3QgU3RyaW5nJiBmdW5jdGlv
bkRlY2xhcmF0aW9uLCBSZWZQdHI8SlNPTjo6QXJyYXk+JiYgYXJndW1lbnRzLCBPcHRpb25hbDxi
b29sPiYmIGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29sZSwgT3B0aW9uYWw8Ym9v
bD4mJiByZXR1cm5CeVZhbHVlLCBPcHRpb25hbDxib29sPiYmIGdlbmVyYXRlUHJldmlldywgT3B0
aW9uYWw8Ym9vbD4mJiBlbXVsYXRlVXNlckdlc3R1cmUpIG92ZXJyaWRlOworICAgIFByb3RvY29s
OjpFcnJvclN0cmluZ09yPHZvaWQ+IHJlbGVhc2VPYmplY3QoY29uc3QgUHJvdG9jb2w6OlJ1bnRp
bWU6OlJlbW90ZU9iamVjdElkJikgZmluYWw7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8
UmVmPFByb3RvY29sOjpSdW50aW1lOjpPYmplY3RQcmV2aWV3Pj4gZ2V0UHJldmlldyhjb25zdCBQ
cm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0SWQmKSBmaW5hbDsKKyAgICBQcm90b2NvbDo6
RXJyb3JTdHJpbmdPcjxzdGQ6OnR1cGxlPFJlZjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50
aW1lOjpQcm9wZXJ0eURlc2NyaXB0b3I+PiwgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6
OlJ1bnRpbWU6OkludGVybmFsUHJvcGVydHlEZXNjcmlwdG9yPj4+PiBnZXRQcm9wZXJ0aWVzKGNv
bnN0IFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3RJZCYsIE9wdGlvbmFsPGJvb2w+JiYg
b3duUHJvcGVydGllcywgT3B0aW9uYWw8aW50PiYmIGZldGNoU3RhcnQsIE9wdGlvbmFsPGludD4m
JiBmZXRjaENvdW50LCBPcHRpb25hbDxib29sPiYmIGdlbmVyYXRlUHJldmlldykgZmluYWw7Cisg
ICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8c3RkOjp0dXBsZTxSZWY8SlNPTjo6QXJyYXlPZjxQ
cm90b2NvbDo6UnVudGltZTo6UHJvcGVydHlEZXNjcmlwdG9yPj4sIFJlZlB0cjxKU09OOjpBcnJh
eU9mPFByb3RvY29sOjpSdW50aW1lOjpJbnRlcm5hbFByb3BlcnR5RGVzY3JpcHRvcj4+Pj4gZ2V0
RGlzcGxheWFibGVQcm9wZXJ0aWVzKGNvbnN0IFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmpl
Y3RJZCYsIE9wdGlvbmFsPGludD4mJiBmZXRjaFN0YXJ0LCBPcHRpb25hbDxpbnQ+JiYgZmV0Y2hD
b3VudCwgT3B0aW9uYWw8Ym9vbD4mJiBnZW5lcmF0ZVByZXZpZXcpIGZpbmFsOworICAgIFByb3Rv
Y29sOjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpD
b2xsZWN0aW9uRW50cnk+Pj4gZ2V0Q29sbGVjdGlvbkVudHJpZXMoY29uc3QgUHJvdG9jb2w6OlJ1
bnRpbWU6OlJlbW90ZU9iamVjdElkJiwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCwgT3B0aW9u
YWw8aW50PiYmIGZldGNoU3RhcnQsIE9wdGlvbmFsPGludD4mJiBmZXRjaENvdW50KSBmaW5hbDsK
KyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxPcHRpb25hbDxpbnQ+IC8qIHNhdmVSZXN1bHRJ
bmRleCAqLz4gc2F2ZVJlc3VsdChSZWY8SlNPTjo6T2JqZWN0PiYmIGNhbGxBcmd1bWVudCwgT3B0
aW9uYWw8UHJvdG9jb2w6OlJ1bnRpbWU6OkV4ZWN1dGlvbkNvbnRleHRJZD4mJikgZmluYWw7Cisg
ICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc2V0U2F2ZWRSZXN1bHRBbGlhcyhjb25z
dCBTdHJpbmcmKSBmaW5hbDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiByZWxl
YXNlT2JqZWN0R3JvdXAoY29uc3QgU3RyaW5nJikgZmluYWw7CisgICAgUHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8UmVmPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OlR5cGVEZXNjcmlw
dGlvbj4+PiBnZXRSdW50aW1lVHlwZXNGb3JWYXJpYWJsZXNBdE9mZnNldHMoUmVmPEpTT046OkFy
cmF5PiYmIGxvY2F0aW9ucykgZmluYWw7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9p
ZD4gZW5hYmxlVHlwZVByb2ZpbGVyKCkgZmluYWw7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5n
T3I8dm9pZD4gZGlzYWJsZVR5cGVQcm9maWxlcigpIGZpbmFsOworICAgIFByb3RvY29sOjpFcnJv
clN0cmluZ09yPHZvaWQ+IGVuYWJsZUNvbnRyb2xGbG93UHJvZmlsZXIoKSBmaW5hbDsKKyAgICBQ
cm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBkaXNhYmxlQ29udHJvbEZsb3dQcm9maWxlcigp
IGZpbmFsOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPFBy
b3RvY29sOjpSdW50aW1lOjpCYXNpY0Jsb2NrPj4+IGdldEJhc2ljQmxvY2tzKGNvbnN0IFN0cmlu
ZyYgc291cmNlSUQpIGZpbmFsOwogCiBwcm90ZWN0ZWQ6CiAgICAgSW5zcGVjdG9yUnVudGltZUFn
ZW50KEFnZW50Q29udGV4dCYpOwogCiAgICAgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyJiBpbmplY3Rl
ZFNjcmlwdE1hbmFnZXIoKSB7IHJldHVybiBtX2luamVjdGVkU2NyaXB0TWFuYWdlcjsgfQogCi0g
ICAgdmlydHVhbCBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdEZvckV2YWwoRXJyb3JTdHJp
bmcmLCBjb25zdCBpbnQqIGV4ZWN1dGlvbkNvbnRleHRJZCkgPSAwOworICAgIHZpcnR1YWwgSW5q
ZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHRGb3JFdmFsKFByb3RvY29sOjpFcnJvclN0cmluZyYs
IE9wdGlvbmFsPFByb3RvY29sOjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0SWQ+JiYpID0gMDsK
IAogICAgIHZpcnR1YWwgdm9pZCBtdXRlQ29uc29sZSgpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQg
dW5tdXRlQ29uc29sZSgpID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclNjcmlwdFByb2ZpbGVyQWdlbnQuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yU2NyaXB0UHJvZmlsZXJB
Z2VudC5jcHAKaW5kZXggNjgxM2UwNzVhOTRiMzYzMWZiNTJlYWRkOWNlNzk5YjljN2RjZDhkZS4u
N2ViNTFhZjMwZmRhODAyY2E4MWE4YjEwZWNkN2U2ZWJlZTIyMTE3YyAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yU2NyaXB0UHJvZmls
ZXJBZ2VudC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9yU2NyaXB0UHJvZmlsZXJBZ2VudC5jcHAKQEAgLTY0LDEwICs2NCwxMCBAQCB2b2lk
IEluc3BlY3RvclNjcmlwdFByb2ZpbGVyQWdlbnQ6OndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNr
ZW5kKERpc2Nvbm5lY3RSZWFzbwogICAgIH0KIH0KIAotdm9pZCBJbnNwZWN0b3JTY3JpcHRQcm9m
aWxlckFnZW50OjpzdGFydFRyYWNraW5nKEVycm9yU3RyaW5nJiwgY29uc3QgYm9vbCogaW5jbHVk
ZVNhbXBsZXMpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JTY3JpcHRQ
cm9maWxlckFnZW50OjpzdGFydFRyYWNraW5nKE9wdGlvbmFsPGJvb2w+JiYgaW5jbHVkZVNhbXBs
ZXMpCiB7CiAgICAgaWYgKG1fdHJhY2tpbmcpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0
dXJuIHsgfTsKIAogICAgIG1fdHJhY2tpbmcgPSB0cnVlOwogCkBAIC05MSwxMiArOTEsMTQgQEAg
dm9pZCBJbnNwZWN0b3JTY3JpcHRQcm9maWxlckFnZW50OjpzdGFydFRyYWNraW5nKEVycm9yU3Ry
aW5nJiwgY29uc3QgYm9vbCogaW5jbHUKICAgICBtX2Vudmlyb25tZW50LmRlYnVnZ2VyKCkuc2V0
UHJvZmlsaW5nQ2xpZW50KHRoaXMpOwogCiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPnRyYWNr
aW5nU3RhcnQoc3RvcHdhdGNoLmVsYXBzZWRUaW1lKCkuc2Vjb25kcygpKTsKKworICAgIHJldHVy
biB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yU2NyaXB0UHJvZmlsZXJBZ2VudDo6c3RvcFRyYWNr
aW5nKEVycm9yU3RyaW5nJikKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3Rv
clNjcmlwdFByb2ZpbGVyQWdlbnQ6OnN0b3BUcmFja2luZygpCiB7CiAgICAgaWYgKCFtX3RyYWNr
aW5nKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB7IH07CiAKICAgICBtX3RyYWNr
aW5nID0gZmFsc2U7CiAgICAgbV9hY3RpdmVFdmFsdWF0ZVNjcmlwdCA9IGZhbHNlOwpAQCAtMTA0
LDYgKzEwNiw4IEBAIHZvaWQgSW5zcGVjdG9yU2NyaXB0UHJvZmlsZXJBZ2VudDo6c3RvcFRyYWNr
aW5nKEVycm9yU3RyaW5nJikKICAgICBtX2Vudmlyb25tZW50LmRlYnVnZ2VyKCkuc2V0UHJvZmls
aW5nQ2xpZW50KG51bGxwdHIpOwogCiAgICAgdHJhY2tpbmdDb21wbGV0ZSgpOworCisgICAgcmV0
dXJuIHsgfTsKIH0KIAogYm9vbCBJbnNwZWN0b3JTY3JpcHRQcm9maWxlckFnZW50Ojppc0FscmVh
ZHlQcm9maWxpbmcoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yU2NyaXB0UHJvZmlsZXJBZ2VudC5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yU2NyaXB0UHJvZmlsZXJBZ2Vu
dC5oCmluZGV4IDdlN2NkYzlmOTc1MDY3NzY2Mjk3NDBhYWRjYjU0ZmI0ZGEwMGQwOGYuLjI4ZjU0
ODhkMGFmYzA2M2IyOWRkMGZmN2NkZDUwZTVkNTBhNjQ3ODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclNjcmlwdFByb2ZpbGVyQWdl
bnQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0
b3JTY3JpcHRQcm9maWxlckFnZW50LmgKQEAgLTM3LDI3ICszNywyNSBAQCBjbGFzcyBQcm9maWxl
OwogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7
Ci0KIGNsYXNzIEpTX0VYUE9SVF9QUklWQVRFIEluc3BlY3RvclNjcmlwdFByb2ZpbGVyQWdlbnQg
ZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yQWdlbnRCYXNlLCBwdWJsaWMgU2NyaXB0UHJvZmlsZXJC
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIsIHB1YmxpYyBKU0M6OkRlYnVnZ2VyOjpQcm9maWxpbmdD
bGllbnQgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEluc3BlY3RvclNjcmlwdFByb2ZpbGVy
QWdlbnQpOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIEluc3Bl
Y3RvclNjcmlwdFByb2ZpbGVyQWdlbnQoQWdlbnRDb250ZXh0Jik7Ci0gICAgfkluc3BlY3RvclNj
cmlwdFByb2ZpbGVyQWdlbnQoKSBmaW5hbDsKKyAgICB+SW5zcGVjdG9yU2NyaXB0UHJvZmlsZXJB
Z2VudCgpOwogCiAgICAgLy8gSW5zcGVjdG9yQWdlbnRCYXNlCi0gICAgdm9pZCBkaWRDcmVhdGVG
cm9udGVuZEFuZEJhY2tlbmQoRnJvbnRlbmRSb3V0ZXIqLCBCYWNrZW5kRGlzcGF0Y2hlciopIGZp
bmFsOwotICAgIHZvaWQgd2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoRGlzY29ubmVjdFJl
YXNvbikgZmluYWw7CisgICAgdm9pZCBkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoRnJvbnRl
bmRSb3V0ZXIqLCBCYWNrZW5kRGlzcGF0Y2hlciopOworICAgIHZvaWQgd2lsbERlc3Ryb3lGcm9u
dGVuZEFuZEJhY2tlbmQoRGlzY29ubmVjdFJlYXNvbik7CiAKICAgICAvLyBTY3JpcHRQcm9maWxl
ckJhY2tlbmREaXNwYXRjaGVySGFuZGxlcgotICAgIHZvaWQgc3RhcnRUcmFja2luZyhFcnJvclN0
cmluZyYsIGNvbnN0IGJvb2wqIGluY2x1ZGVTYW1wbGVzKSBmaW5hbDsKLSAgICB2b2lkIHN0b3BU
cmFja2luZyhFcnJvclN0cmluZyYpIGZpbmFsOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09y
PHZvaWQ+IHN0YXJ0VHJhY2tpbmcoT3B0aW9uYWw8Ym9vbD4mJiBpbmNsdWRlU2FtcGxlcyk7Cisg
ICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc3RvcFRyYWNraW5nKCk7CiAKICAgICAv
LyBKU0M6OkRlYnVnZ2VyOjpQcm9maWxpbmdDbGllbnQKLSAgICBib29sIGlzQWxyZWFkeVByb2Zp
bGluZygpIGNvbnN0IGZpbmFsOwotICAgIFNlY29uZHMgd2lsbEV2YWx1YXRlU2NyaXB0KCkgZmlu
YWw7Ci0gICAgdm9pZCBkaWRFdmFsdWF0ZVNjcmlwdChTZWNvbmRzLCBKU0M6OlByb2ZpbGluZ1Jl
YXNvbikgZmluYWw7CisgICAgYm9vbCBpc0FscmVhZHlQcm9maWxpbmcoKSBjb25zdDsKKyAgICBT
ZWNvbmRzIHdpbGxFdmFsdWF0ZVNjcmlwdCgpOworICAgIHZvaWQgZGlkRXZhbHVhdGVTY3JpcHQo
U2Vjb25kcywgSlNDOjpQcm9maWxpbmdSZWFzb24pOwogCiBwcml2YXRlOgogICAgIHZvaWQgYWRk
RXZlbnQoU2Vjb25kcyBzdGFydFRpbWUsIFNlY29uZHMgZW5kVGltZSwgSlNDOjpQcm9maWxpbmdS
ZWFzb24pOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2Vu
dHMvSW5zcGVjdG9yVGFyZ2V0QWdlbnQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9hZ2VudHMvSW5zcGVjdG9yVGFyZ2V0QWdlbnQuY3BwCmluZGV4IDhmY2I1YTFlNTU3NTBk
MzI1YTg0ODI0ZDg2YzQ5Y2ZlNmZiMDQyNjguLjUwOGViMDJlYzk1YzUyNDA4Mzg0YTFlMmI3NzY0
OGFmZDQyNmRkOWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
YWdlbnRzL0luc3BlY3RvclRhcmdldEFnZW50LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JUYXJnZXRBZ2VudC5jcHAKQEAgLTU1LDM2ICs1
NSwzNiBAQCB2b2lkIEluc3BlY3RvclRhcmdldEFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5k
QmFja2VuZChEaXNjb25uZWN0UmVhc29uKQogICAgIG1fc2hvdWxkUGF1c2VPblN0YXJ0ID0gZmFs
c2U7CiB9CiAKLXZvaWQgSW5zcGVjdG9yVGFyZ2V0QWdlbnQ6OnNldFBhdXNlT25TdGFydChFcnJv
clN0cmluZyYsIGJvb2wgcGF1c2VPblN0YXJ0KQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9p
ZD4gSW5zcGVjdG9yVGFyZ2V0QWdlbnQ6OnNldFBhdXNlT25TdGFydChib29sIHBhdXNlT25TdGFy
dCkKIHsKICAgICBtX3Nob3VsZFBhdXNlT25TdGFydCA9IHBhdXNlT25TdGFydDsKKworICAgIHJl
dHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yVGFyZ2V0QWdlbnQ6OnJlc3VtZShFcnJvclN0
cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQpCitQcm90b2NvbDo6RXJy
b3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JUYXJnZXRBZ2VudDo6cmVzdW1lKGNvbnN0IFN0cmlu
ZyYgdGFyZ2V0SWQpCiB7CiAgICAgYXV0byogdGFyZ2V0ID0gbV90YXJnZXRzLmdldCh0YXJnZXRJ
ZCk7Ci0gICAgaWYgKCF0YXJnZXQpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWlzc2luZyB0
YXJnZXQgZm9yIGdpdmVuIHRhcmdldElkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAg
IGlmICghdGFyZ2V0KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk1pc3NpbmcgdGFy
Z2V0IGZvciBnaXZlbiB0YXJnZXRJZCJfcyk7CiAKLSAgICBpZiAoIXRhcmdldC0+aXNQYXVzZWQo
KSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJUYXJnZXQgZm9yIGdpdmVuIHRhcmdldElkIGlz
IG5vdCBwYXVzZWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKCF0YXJnZXQt
PmlzUGF1c2VkKCkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiVGFyZ2V0IGZvciBn
aXZlbiB0YXJnZXRJZCBpcyBub3QgcGF1c2VkIl9zKTsKIAogICAgIHRhcmdldC0+cmVzdW1lKCk7
CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvclRhcmdldEFnZW50OjpzZW5k
TWVzc2FnZVRvVGFyZ2V0KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiB0
YXJnZXRJZCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8
dm9pZD4gSW5zcGVjdG9yVGFyZ2V0QWdlbnQ6OnNlbmRNZXNzYWdlVG9UYXJnZXQoY29uc3QgU3Ry
aW5nJiB0YXJnZXRJZCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQogewogICAgIEluc3BlY3RvclRh
cmdldCogdGFyZ2V0ID0gbV90YXJnZXRzLmdldCh0YXJnZXRJZCk7Ci0gICAgaWYgKCF0YXJnZXQp
IHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWlzc2luZyB0YXJnZXQgZm9yIGdpdmVuIHRhcmdl
dElkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghdGFyZ2V0KQorICAgICAg
ICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk1pc3NpbmcgdGFyZ2V0IGZvciBnaXZlbiB0YXJnZXRJ
ZCJfcyk7CiAKICAgICB0YXJnZXQtPnNlbmRNZXNzYWdlVG9UYXJnZXRCYWNrZW5kKG1lc3NhZ2Up
OworCisgICAgcmV0dXJuIHsgfTsKIH0KIAogdm9pZCBJbnNwZWN0b3JUYXJnZXRBZ2VudDo6c2Vu
ZE1lc3NhZ2VGcm9tVGFyZ2V0VG9Gcm9udGVuZChjb25zdCBTdHJpbmcmIHRhcmdldElkLCBjb25z
dCBTdHJpbmcmIG1lc3NhZ2UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL2FnZW50cy9JbnNwZWN0b3JUYXJnZXRBZ2VudC5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yVGFyZ2V0QWdlbnQuaAppbmRleCBiOTI5ZGRm
ZmUyOWMzZmIwODhhYjY3MTQwODdjOTkzMDJjMjc1MjE0Li5lZGNkNDg5Yjc2ZTA4MDgyN2UwNzQx
ZjE0YmFiMDlmOWVhOTMwM2Q0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL2FnZW50cy9JbnNwZWN0b3JUYXJnZXRBZ2VudC5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclRhcmdldEFnZW50LmgKQEAgLTM1LDIz
ICszNSwyMSBAQCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAogY2xhc3MgSW5zcGVjdG9yVGFyZ2V0
OwogCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQogY2xhc3MgSlNfRVhQT1JUX1BSSVZB
VEUgSW5zcGVjdG9yVGFyZ2V0QWdlbnQgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yQWdlbnRCYXNl
LCBwdWJsaWMgVGFyZ2V0QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKICAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShJbnNwZWN0b3JUYXJnZXRBZ2VudCk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CiBwdWJsaWM6CiAgICAgSW5zcGVjdG9yVGFyZ2V0QWdlbnQoRnJvbnRlbmRSb3V0ZXIm
LCBCYWNrZW5kRGlzcGF0Y2hlciYpOwotICAgIH5JbnNwZWN0b3JUYXJnZXRBZ2VudCgpIGZpbmFs
OworICAgIH5JbnNwZWN0b3JUYXJnZXRBZ2VudCgpOwogCiAgICAgLy8gSW5zcGVjdG9yQWdlbnRC
YXNlCi0gICAgdm9pZCBkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoRnJvbnRlbmRSb3V0ZXIq
LCBCYWNrZW5kRGlzcGF0Y2hlciopIGZpbmFsOwotICAgIHZvaWQgd2lsbERlc3Ryb3lGcm9udGVu
ZEFuZEJhY2tlbmQoRGlzY29ubmVjdFJlYXNvbikgZmluYWw7CisgICAgdm9pZCBkaWRDcmVhdGVG
cm9udGVuZEFuZEJhY2tlbmQoRnJvbnRlbmRSb3V0ZXIqLCBCYWNrZW5kRGlzcGF0Y2hlciopOwor
ICAgIHZvaWQgd2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoRGlzY29ubmVjdFJlYXNvbik7
CiAKICAgICAvLyBUYXJnZXRCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIKLSAgICB2b2lkIHNldFBh
dXNlT25TdGFydChFcnJvclN0cmluZyYsIGJvb2wgcGF1c2VPblN0YXJ0KSBmaW5hbDsKLSAgICB2
b2lkIHJlc3VtZShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQpIGZpbmFsOwot
ICAgIHZvaWQgc2VuZE1lc3NhZ2VUb1RhcmdldChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYg
dGFyZ2V0SWQsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkgZmluYWw7CisgICAgUHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8dm9pZD4gc2V0UGF1c2VPblN0YXJ0KGJvb2wpOworICAgIFByb3RvY29sOjpF
cnJvclN0cmluZ09yPHZvaWQ+IHJlc3VtZShjb25zdCBTdHJpbmcmIHRhcmdldElkKTsKKyAgICBQ
cm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzZW5kTWVzc2FnZVRvVGFyZ2V0KGNvbnN0IFN0
cmluZyYgdGFyZ2V0SWQsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7CiAKICAgICAvLyBUYXJnZXQg
bGlmZWN5Y2xlLgogICAgIHZvaWQgdGFyZ2V0Q3JlYXRlZChJbnNwZWN0b3JUYXJnZXQmKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0pTR2xvYmFs
T2JqZWN0QXVkaXRBZ2VudC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2Fn
ZW50cy9KU0dsb2JhbE9iamVjdEF1ZGl0QWdlbnQuY3BwCmluZGV4IDRiZmE5ZjVhYTdmZGUxNTRi
NTMzYzhmMjNjZDdiYWU2Nzc1OGFiMDAuLjI5ZmNlYzk3YmI4ZTdmNDc3MmQ0ZDdjYzhmYWQ2Yzky
MzE3MWY4OTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdl
bnRzL0pTR2xvYmFsT2JqZWN0QXVkaXRBZ2VudC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9hZ2VudHMvSlNHbG9iYWxPYmplY3RBdWRpdEFnZW50LmNwcApAQCAtNDEs
NyArNDEsNyBAQCBKU0dsb2JhbE9iamVjdEF1ZGl0QWdlbnQ6OkpTR2xvYmFsT2JqZWN0QXVkaXRB
Z2VudChKU0FnZW50Q29udGV4dCYgY29udGV4dCkKIAogSlNHbG9iYWxPYmplY3RBdWRpdEFnZW50
Ojp+SlNHbG9iYWxPYmplY3RBdWRpdEFnZW50KCkgPSBkZWZhdWx0OwogCi1JbmplY3RlZFNjcmlw
dCBKU0dsb2JhbE9iamVjdEF1ZGl0QWdlbnQ6OmluamVjdGVkU2NyaXB0Rm9yRXZhbChFcnJvclN0
cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IGludCogZXhlY3V0aW9uQ29udGV4dElkKQorSW5qZWN0
ZWRTY3JpcHQgSlNHbG9iYWxPYmplY3RBdWRpdEFnZW50OjppbmplY3RlZFNjcmlwdEZvckV2YWwo
UHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgT3B0aW9uYWw8UHJvdG9jb2w6OlJ1
bnRpbWU6OkV4ZWN1dGlvbkNvbnRleHRJZD4mJiBleGVjdXRpb25Db250ZXh0SWQpCiB7CiAgICAg
aWYgKGV4ZWN1dGlvbkNvbnRleHRJZCkgewogICAgICAgICBlcnJvclN0cmluZyA9ICJleGVjdXRp
b25Db250ZXh0SWQgaXMgbm90IHN1cHBvcnRlZCBmb3IgSlNDb250ZXh0cyBhcyB0aGVyZSBpcyBv
bmx5IG9uZSBleGVjdXRpb24gY29udGV4dCJfczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0pTR2xvYmFsT2JqZWN0QXVkaXRBZ2VudC5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSlNHbG9iYWxPYmplY3RBdWRpdEFn
ZW50LmgKaW5kZXggN2Q0NjcwZDA0ZGM3ZmQzMzA4M2ExNTA2MWQzNzc2NWIxYTZjM2VlNi4uNTg0
ZDA1MDI2NDU4OWI0ODA1YzYxYjRjNGRiYTM4MTk5YTZmZWRlMCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSlNHbG9iYWxPYmplY3RBdWRpdEFnZW50
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSlNHbG9iYWxP
YmplY3RBdWRpdEFnZW50LmgKQEAgLTM4LDEwICszOCwxMCBAQCBjbGFzcyBKU0dsb2JhbE9iamVj
dEF1ZGl0QWdlbnQgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yQXVkaXRBZ2VudCB7CiAgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgSlNHbG9iYWxPYmplY3RBdWRpdEFn
ZW50KEpTQWdlbnRDb250ZXh0Jik7Ci0gICAgfkpTR2xvYmFsT2JqZWN0QXVkaXRBZ2VudCgpIGZp
bmFsOworICAgIH5KU0dsb2JhbE9iamVjdEF1ZGl0QWdlbnQoKTsKIAogcHJpdmF0ZToKLSAgICBJ
bmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdEZvckV2YWwoRXJyb3JTdHJpbmcmLCBjb25zdCBp
bnQqIGV4ZWN1dGlvbkNvbnRleHRJZCkgZmluYWw7CisgICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0
ZWRTY3JpcHRGb3JFdmFsKFByb3RvY29sOjpFcnJvclN0cmluZyYsIE9wdGlvbmFsPFByb3RvY29s
OjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0SWQ+JiYpOwogCiAgICAgSlNDOjpKU0dsb2JhbE9i
amVjdCYgbV9nbG9iYWxPYmplY3Q7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9hZ2VudHMvSlNHbG9iYWxPYmplY3REZWJ1Z2dlckFnZW50LmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0pTR2xvYmFsT2JqZWN0RGVidWdn
ZXJBZ2VudC5jcHAKaW5kZXggMjU1MWU3YTQyMzkzOTk1ZDZhM2VlYTljZTQ5MTc0OWEzODc4OTE4
OS4uM2I3MDI4NzhhMWNhNTE2MjQ0MDk5OWY0ZTY0YjUzZmMzNGY5NTMyZiAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSlNHbG9iYWxPYmplY3REZWJ1
Z2dlckFnZW50LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50
cy9KU0dsb2JhbE9iamVjdERlYnVnZ2VyQWdlbnQuY3BwCkBAIC00NCw3ICs0NCw3IEBAIEpTR2xv
YmFsT2JqZWN0RGVidWdnZXJBZ2VudDo6SlNHbG9iYWxPYmplY3REZWJ1Z2dlckFnZW50KEpTQWdl
bnRDb250ZXh0JiBjb250ZXh0CiAKIEpTR2xvYmFsT2JqZWN0RGVidWdnZXJBZ2VudDo6fkpTR2xv
YmFsT2JqZWN0RGVidWdnZXJBZ2VudCgpID0gZGVmYXVsdDsKIAotSW5qZWN0ZWRTY3JpcHQgSlNH
bG9iYWxPYmplY3REZWJ1Z2dlckFnZW50OjppbmplY3RlZFNjcmlwdEZvckV2YWwoRXJyb3JTdHJp
bmcmIGVycm9yU3RyaW5nLCBjb25zdCBpbnQqIGV4ZWN1dGlvbkNvbnRleHRJZCkKK0luamVjdGVk
U2NyaXB0IEpTR2xvYmFsT2JqZWN0RGVidWdnZXJBZ2VudDo6aW5qZWN0ZWRTY3JpcHRGb3JFdmFs
KFByb3RvY29sOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIE9wdGlvbmFsPFByb3RvY29sOjpS
dW50aW1lOjpFeGVjdXRpb25Db250ZXh0SWQ+JiYgZXhlY3V0aW9uQ29udGV4dElkKQogewogICAg
IGlmIChleGVjdXRpb25Db250ZXh0SWQpIHsKICAgICAgICAgZXJyb3JTdHJpbmcgPSAiZXhlY3V0
aW9uQ29udGV4dElkIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIEpTQ29udGV4dHMgYXMgdGhlcmUgaXMg
b25seSBvbmUgZXhlY3V0aW9uIGNvbnRleHQiX3M7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9KU0dsb2JhbE9iamVjdERlYnVnZ2VyQWdlbnQuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0pTR2xvYmFsT2JqZWN0RGVi
dWdnZXJBZ2VudC5oCmluZGV4IDZmNzkyNzhkNTMzMTcxZTFmZGQwYWVmZTlkZDI5YjMzYmZkMWZl
OTUuLjEwMGZiMjNlMzE1ZGYwNDdmOWY4NTZjY2M5YTVhNmY4MGU4M2Q3NzYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0pTR2xvYmFsT2JqZWN0RGVi
dWdnZXJBZ2VudC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRz
L0pTR2xvYmFsT2JqZWN0RGVidWdnZXJBZ2VudC5oCkBAIC0zNiwxOCArMzYsMTggQEAgY2xhc3Mg
SlNHbG9iYWxPYmplY3REZWJ1Z2dlckFnZW50IGZpbmFsIDogcHVibGljIEluc3BlY3RvckRlYnVn
Z2VyQWdlbnQgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIEpT
R2xvYmFsT2JqZWN0RGVidWdnZXJBZ2VudChKU0FnZW50Q29udGV4dCYsIEluc3BlY3RvckNvbnNv
bGVBZ2VudCopOwotICAgIH5KU0dsb2JhbE9iamVjdERlYnVnZ2VyQWdlbnQoKSBmaW5hbDsKKyAg
ICB+SlNHbG9iYWxPYmplY3REZWJ1Z2dlckFnZW50KCk7CiAKICAgICAvLyBKU0M6OkRlYnVnZ2Vy
OjpPYnNlcnZlcgotICAgIHZvaWQgYnJlYWtwb2ludEFjdGlvbkxvZyhKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiwgY29uc3QgU3RyaW5nJiBkYXRhKSBmaW5hbDsKKyAgICB2b2lkIGJyZWFrcG9pbnRBY3Rp
b25Mb2coSlNDOjpKU0dsb2JhbE9iamVjdCosIGNvbnN0IFN0cmluZyYgZGF0YSk7CiAKIHByaXZh
dGU6Ci0gICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHRGb3JFdmFsKEVycm9yU3RyaW5n
JiwgY29uc3QgaW50KiBleGVjdXRpb25Db250ZXh0SWQpIGZpbmFsOworICAgIEluamVjdGVkU2Ny
aXB0IGluamVjdGVkU2NyaXB0Rm9yRXZhbChQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBPcHRpb25h
bDxQcm90b2NvbDo6UnVudGltZTo6RXhlY3V0aW9uQ29udGV4dElkPiYmKTsKIAogICAgIC8vIE5P
VEU6IEphdmFTY3JpcHQgaW5zcGVjdG9yIGRvZXMgbm90IHlldCBuZWVkIHRvIG11dGUgYSBjb25z
b2xlIGJlY2F1c2Ugbm8gbWVzc2FnZXMKICAgICAvLyBhcmUgc2VudCB0byB0aGUgY29uc29sZSBv
dXRzaWRlIG9mIHRoZSBBUEkgYm91bmRhcnkgb3IgY29uc29sZSBvYmplY3QuCi0gICAgdm9pZCBt
dXRlQ29uc29sZSgpIGZpbmFsIHsgfQotICAgIHZvaWQgdW5tdXRlQ29uc29sZSgpIGZpbmFsIHsg
fQorICAgIHZvaWQgbXV0ZUNvbnNvbGUoKSB7IH0KKyAgICB2b2lkIHVubXV0ZUNvbnNvbGUoKSB7
IH0KIAogICAgIEluc3BlY3RvckNvbnNvbGVBZ2VudCogbV9jb25zb2xlQWdlbnQgeyBudWxscHRy
IH07CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2Vu
dHMvSlNHbG9iYWxPYmplY3RSdW50aW1lQWdlbnQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9hZ2VudHMvSlNHbG9iYWxPYmplY3RSdW50aW1lQWdlbnQuY3BwCmluZGV4IGM4
NjY5ZWUwYWE1YjhjYTg0ZTVkMjk0MzdmMzQ0NDcxYzFmOWEwNjAuLmUyNTQ0ODc0OGYxNGU1MGEy
ZmM1Y2RlNzZiMDY4OTAyYjAzODNiMWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3IvYWdlbnRzL0pTR2xvYmFsT2JqZWN0UnVudGltZUFnZW50LmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9KU0dsb2JhbE9iamVjdFJ1bnRp
bWVBZ2VudC5jcHAKQEAgLTQzLDkgKzQzLDEyIEBAIEpTR2xvYmFsT2JqZWN0UnVudGltZUFnZW50
OjpKU0dsb2JhbE9iamVjdFJ1bnRpbWVBZ2VudChKU0FnZW50Q29udGV4dCYgY29udGV4dCkKIAog
SlNHbG9iYWxPYmplY3RSdW50aW1lQWdlbnQ6On5KU0dsb2JhbE9iamVjdFJ1bnRpbWVBZ2VudCgp
ID0gZGVmYXVsdDsKIAotSW5qZWN0ZWRTY3JpcHQgSlNHbG9iYWxPYmplY3RSdW50aW1lQWdlbnQ6
OmluamVjdGVkU2NyaXB0Rm9yRXZhbChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IGlu
dCogZXhlY3V0aW9uQ29udGV4dElkKQorSW5qZWN0ZWRTY3JpcHQgSlNHbG9iYWxPYmplY3RSdW50
aW1lQWdlbnQ6OmluamVjdGVkU2NyaXB0Rm9yRXZhbChQcm90b2NvbDo6RXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBPcHRpb25hbDxQcm90b2NvbDo6UnVudGltZTo6RXhlY3V0aW9uQ29udGV4dElk
PiYmIGV4ZWN1dGlvbkNvbnRleHRJZCkKIHsKLSAgICBBU1NFUlRfVU5VU0VEKGV4ZWN1dGlvbkNv
bnRleHRJZCwgIWV4ZWN1dGlvbkNvbnRleHRJZCk7CisgICAgaWYgKGV4ZWN1dGlvbkNvbnRleHRJ
ZCkgeworICAgICAgICBlcnJvclN0cmluZyA9ICJleGVjdXRpb25Db250ZXh0SWQgaXMgbm90IHN1
cHBvcnRlZCBmb3IgSlNDb250ZXh0cyBhcyB0aGVyZSBpcyBvbmx5IG9uZSBleGVjdXRpb24gY29u
dGV4dCJfczsKKyAgICAgICAgcmV0dXJuIEluamVjdGVkU2NyaXB0KCk7CisgICAgfQogCiAgICAg
SW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHQgPSBpbmplY3RlZFNjcmlwdE1hbmFnZXIoKS5p
bmplY3RlZFNjcmlwdEZvcigmbV9nbG9iYWxPYmplY3QpOwogICAgIGlmIChpbmplY3RlZFNjcmlw
dC5oYXNOb1ZhbHVlKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL2FnZW50cy9KU0dsb2JhbE9iamVjdFJ1bnRpbWVBZ2VudC5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSlNHbG9iYWxPYmplY3RSdW50aW1lQWdlbnQuaAppbmRl
eCA2ZjBjZTkwNTlkNzIzMzgzNzhiMWQ0N2E3MWE3MjVjMzkyY2QyNzdhLi5iZmViZGE5MmEwOGE5
MWQzOGNlMmM1MTc1Njc5NjczMWQ1OWEyYzljIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL2FnZW50cy9KU0dsb2JhbE9iamVjdFJ1bnRpbWVBZ2VudC5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0pTR2xvYmFsT2JqZWN0UnVu
dGltZUFnZW50LmgKQEAgLTM5LDE1ICszOSwxNSBAQCBjbGFzcyBKU0dsb2JhbE9iamVjdFJ1bnRp
bWVBZ2VudCBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3JSdW50aW1lQWdlbnQgewogICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIEpTR2xvYmFsT2JqZWN0UnVudGltZUFn
ZW50KEpTQWdlbnRDb250ZXh0Jik7Ci0gICAgfkpTR2xvYmFsT2JqZWN0UnVudGltZUFnZW50KCkg
ZmluYWw7CisgICAgfkpTR2xvYmFsT2JqZWN0UnVudGltZUFnZW50KCk7CiAKIHByaXZhdGU6Ci0g
ICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHRGb3JFdmFsKEVycm9yU3RyaW5nJiwgY29u
c3QgaW50KiBleGVjdXRpb25Db250ZXh0SWQpIGZpbmFsOworICAgIEluamVjdGVkU2NyaXB0IGlu
amVjdGVkU2NyaXB0Rm9yRXZhbChQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBPcHRpb25hbDxQcm90
b2NvbDo6UnVudGltZTo6RXhlY3V0aW9uQ29udGV4dElkPiYmKTsKIAogICAgIC8vIE5PVEU6IEph
dmFTY3JpcHQgaW5zcGVjdG9yIGRvZXMgbm90IHlldCBuZWVkIHRvIG11dGUgYSBjb25zb2xlIGJl
Y2F1c2Ugbm8gbWVzc2FnZXMKICAgICAvLyBhcmUgc2VudCB0byB0aGUgY29uc29sZSBvdXRzaWRl
IG9mIHRoZSBBUEkgYm91bmRhcnkgb3IgY29uc29sZSBvYmplY3QuCi0gICAgdm9pZCBtdXRlQ29u
c29sZSgpIGZpbmFsIHsgfQotICAgIHZvaWQgdW5tdXRlQ29uc29sZSgpIGZpbmFsIHsgfQorICAg
IHZvaWQgbXV0ZUNvbnNvbGUoKSB7IH0KKyAgICB2b2lkIHVubXV0ZUNvbnNvbGUoKSB7IH0KIAog
ICAgIHN0ZDo6dW5pcXVlX3B0cjxSdW50aW1lRnJvbnRlbmREaXNwYXRjaGVyPiBtX2Zyb250ZW5k
RGlzcGF0Y2hlcjsKICAgICBSZWZQdHI8UnVudGltZUJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tl
bmREaXNwYXRjaGVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9wcm90b2NvbC9QYWdlLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3By
b3RvY29sL1BhZ2UuanNvbgppbmRleCAzYjhmYTE4YmQ3ZThkOTVkN2U4Zjk1YjQ0MmFmYzYzZTU1
MGNlNjNhLi5mZGU0ZjY5NjRkNDBlOGE1NjUxMTZiZTJiYzY5MmE0NTFjMmRhMTA2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Byb3RvY29sL1BhZ2UuanNvbgor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Byb3RvY29sL1BhZ2UuanNvbgpA
QCAtMjY3LDcgKzI2Nyw3IEBACiAgICAgICAgICAgICAiY29uZGl0aW9uIjogIihkZWZpbmVkKEVO
QUJMRV9EQVJLX01PREVfQ1NTKSAmJiBFTkFCTEVfREFSS19NT0RFX0NTUykgfHwgKGRlZmluZWQo
SEFWRV9PU19EQVJLX01PREVfU1VQUE9SVCkgJiYgSEFWRV9PU19EQVJLX01PREVfU1VQUE9SVCki
LAogICAgICAgICAgICAgInRhcmdldFR5cGVzIjogWyJwYWdlIl0sCiAgICAgICAgICAgICAicGFy
YW1ldGVycyI6IFsKLSAgICAgICAgICAgICAgICB7ICJuYW1lIjogImFwcGVhcmFuY2UiLCAiJHJl
ZiI6ICJBcHBlYXJhbmNlIiwgImRlc2NyaXB0aW9uIjogIkFwcGVhcmFuY2UgbmFtZSB0byBmb3Jj
ZS4gRW1wdHkgc3RyaW5nIGRpc2FibGVzIHRoZSBvdmVycmlkZS4iIH0KKyAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogImFwcGVhcmFuY2UiLCAiJHJlZiI6ICJBcHBlYXJhbmNlIiwgIm9wdGlvbmFs
IjogdHJ1ZSB9CiAgICAgICAgICAgICBdCiAgICAgICAgIH0sCiAgICAgICAgIHsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcmVtb3RlL3NvY2tldC9SZW1vdGVJ
bnNwZWN0b3JDb25uZWN0aW9uQ2xpZW50LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3IvcmVtb3RlL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JDb25uZWN0aW9uQ2xpZW50LmNwcApp
bmRleCAwNjUyZTEyNzA4YmY4NjIzMGJlNDYyOWZlNjU3MjViYmJjMzViNjcwLi4xMTAwMDA0NzNk
Y2ZjYzQzNjQ3Njg0ODE3ZDk1MzhjNzE1YzcyODU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3JlbW90ZS9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yQ29ubmVjdGlv
bkNsaWVudC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9yZW1vdGUv
c29ja2V0L1JlbW90ZUluc3BlY3RvckNvbm5lY3Rpb25DbGllbnQuY3BwCkBAIC05MiwzMiArOTIs
MjQgQEAgT3B0aW9uYWw8UmVtb3RlSW5zcGVjdG9yQ29ubmVjdGlvbkNsaWVudDo6RXZlbnQ+IFJl
bW90ZUluc3BlY3RvckNvbm5lY3Rpb25DbGllbnQKIAogICAgIFN0cmluZyBqc29uRGF0YSA9IFN0
cmluZzo6ZnJvbVVURjgoZGF0YSk7CiAKLSAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IG1lc3NhZ2VW
YWx1ZTsKLSAgICBpZiAoIUpTT046OlZhbHVlOjpwYXJzZUpTT04oanNvbkRhdGEsIG1lc3NhZ2VW
YWx1ZSkpCisgICAgYXV0byBtZXNzYWdlVmFsdWUgPSBKU09OOjpWYWx1ZTo6cGFyc2VKU09OKGpz
b25EYXRhKTsKKyAgICBpZiAoIW1lc3NhZ2VWYWx1ZSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKIAotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG1lc3NhZ2VPYmplY3Q7Ci0gICAgaWYg
KCFtZXNzYWdlVmFsdWUtPmFzT2JqZWN0KG1lc3NhZ2VPYmplY3QpKQorICAgIGF1dG8gbWVzc2Fn
ZU9iamVjdCA9IG1lc3NhZ2VWYWx1ZS0+YXNPYmplY3QoKTsKKyAgICBpZiAoIW1lc3NhZ2VPYmpl
Y3QpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICBFdmVudCBldmVudDsKLSAg
ICBpZiAoIW1lc3NhZ2VPYmplY3QtPmdldFN0cmluZygiZXZlbnQiX3MsIGV2ZW50Lm1ldGhvZE5h
bWUpKQorCisgICAgZXZlbnQubWV0aG9kTmFtZSA9IG1lc3NhZ2VPYmplY3QtPmdldFN0cmluZygi
ZXZlbnQiX3MpOworICAgIGlmICghZXZlbnQubWV0aG9kTmFtZSkKICAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKIAogICAgIGV2ZW50LmNsaWVudElEID0gY2xpZW50SUQ7Ci0KLSAgICBDb25u
ZWN0aW9uSUQgY29ubmVjdGlvbklEOwotICAgIGlmIChtZXNzYWdlT2JqZWN0LT5nZXRJbnRlZ2Vy
KCJjb25uZWN0aW9uSUQiX3MsIGNvbm5lY3Rpb25JRCkpCi0gICAgICAgIGV2ZW50LmNvbm5lY3Rp
b25JRCA9IGNvbm5lY3Rpb25JRDsKLQotICAgIFRhcmdldElEIHRhcmdldElEOwotICAgIGlmICht
ZXNzYWdlT2JqZWN0LT5nZXRJbnRlZ2VyKCJ0YXJnZXRJRCJfcywgdGFyZ2V0SUQpKQotICAgICAg
ICBldmVudC50YXJnZXRJRCA9IHRhcmdldElEOwotCi0gICAgU3RyaW5nIG1lc3NhZ2U7Ci0gICAg
aWYgKG1lc3NhZ2VPYmplY3QtPmdldFN0cmluZygibWVzc2FnZSJfcywgbWVzc2FnZSkpCi0gICAg
ICAgIGV2ZW50Lm1lc3NhZ2UgPSBtZXNzYWdlOwotCisgICAgZXZlbnQuY29ubmVjdGlvbklEID0g
bWVzc2FnZU9iamVjdC0+Z2V0SW50ZWdlcigiY29ubmVjdGlvbklEIl9zKTsKKyAgICBldmVudC50
YXJnZXRJRCA9IG1lc3NhZ2VPYmplY3QtPmdldEludGVnZXIoInRhcmdldElEIl9zKTsKKyAgICBl
dmVudC5tZXNzYWdlID0gbWVzc2FnZU9iamVjdC0+Z2V0U3RyaW5nKCJtZXNzYWdlIl9zKTsKICAg
ICByZXR1cm4gZXZlbnQ7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2NwcF9nZW5lcmF0b3IucHkgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9jcHBfZ2VuZXJhdG9yLnB5CmluZGV4
IGY3MzM4ZjZkZDNmMTgxZTg5NWUxOWVlYzY2Y2EyMWQ1OWNiYmRhZmEuLjQ2YjkwNjU3YzM5ZTRk
MjUwM2I3YzcxZDJjNGNkZDM3OTc4NWM3Y2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2NwcF9nZW5lcmF0b3IucHkKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vY3BwX2dlbmVyYXRv
ci5weQpAQCAtNTUsMjc5ICs1NSwzMjkgQEAgY2xhc3MgQ3BwR2VuZXJhdG9yKEdlbmVyYXRvcik6
CiAgICAgICAgIHJldHVybiBzZWxmLm1vZGVsKCkuZnJhbWV3b3JrLnNldHRpbmcoJ2NwcF9wcm90
b2NvbF9ncm91cCcsICcnKQogCiAgICAgZGVmIGhlbHBlcnNfbmFtZXNwYWNlKHNlbGYpOgotICAg
ICAgICByZXR1cm4gJyVzSGVscGVycycgJSBzZWxmLnByb3RvY29sX25hbWUoKQorICAgICAgICBu
YW1lc3BhY2UgPSAnSGVscGVycycKKyAgICAgICAgaWYgc2VsZi5wcm90b2NvbF9uYW1lKCkgIT0g
J0luc3BlY3Rvcic6CisgICAgICAgICAgICBuYW1lc3BhY2UgPSBzZWxmLnByb3RvY29sX25hbWUo
KSArIG5hbWVzcGFjZQorICAgICAgICByZXR1cm4gbmFtZXNwYWNlCiAKICAgICAjIE1pc2NlbGxh
bmVvdXMgdGV4dCBtYW5pcHVsYXRpb24gcm91dGluZXMuCiAgICAgQHN0YXRpY21ldGhvZAogICAg
IGRlZiBjcHBfZ2V0dGVyX21ldGhvZF9mb3JfdHlwZShfdHlwZSk6Ci0gICAgICAgIGlmIGlzaW5z
dGFuY2UoX3R5cGUsIE9iamVjdFR5cGUpOgotICAgICAgICAgICAgcmV0dXJuICdnZXRPYmplY3Qn
Ci0gICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEFycmF5VHlwZSk6Ci0gICAgICAgICAgICBy
ZXR1cm4gJ2dldEFycmF5JwotICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBQcmltaXRpdmVU
eXBlKToKLSAgICAgICAgICAgIGlmIF90eXBlLnJhd19uYW1lKCkgPT0gJ2ludGVnZXInOgotICAg
ICAgICAgICAgICAgIHJldHVybiAnZ2V0SW50ZWdlcicKLSAgICAgICAgICAgIGVsaWYgX3R5cGUu
cmF3X25hbWUoKSA9PSAnbnVtYmVyJzoKLSAgICAgICAgICAgICAgICByZXR1cm4gJ2dldERvdWJs
ZScKLSAgICAgICAgICAgIGVsaWYgX3R5cGUucmF3X25hbWUoKSA9PSAnYW55JzoKLSAgICAgICAg
ICAgICAgICByZXR1cm4gJ2dldFZhbHVlJwotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAg
ICAgICByZXR1cm4gJ2dldCcgKyB1Y2ZpcnN0KF90eXBlLnJhd19uYW1lKCkpCiAgICAgICAgIGlm
IGlzaW5zdGFuY2UoX3R5cGUsIEFsaWFzZWRUeXBlKToKLSAgICAgICAgICAgIHJldHVybiBDcHBH
ZW5lcmF0b3IuY3BwX2dldHRlcl9tZXRob2RfZm9yX3R5cGUoX3R5cGUuYWxpYXNlZF90eXBlKQor
ICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5hbGlhc2VkX3R5cGUKKyAgICAgICAgICAgICMgZmFs
bHRocm91Z2gKKwogICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBFbnVtVHlwZSk6Ci0gICAg
ICAgICAgICByZXR1cm4gQ3BwR2VuZXJhdG9yLmNwcF9nZXR0ZXJfbWV0aG9kX2Zvcl90eXBlKF90
eXBlLnByaW1pdGl2ZV90eXBlKQorICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5wcmltaXRpdmVf
dHlwZQorICAgICAgICAgICAgIyBmYWxsdGhyb3VnaAorCisgICAgICAgIGlmIGlzaW5zdGFuY2Uo
X3R5cGUsIE9iamVjdFR5cGUpIG9yIF90eXBlLnF1YWxpZmllZF9uYW1lKCkgaW4gWydvYmplY3Qn
XToKKyAgICAgICAgICAgIHJldHVybiAnZ2V0T2JqZWN0JworCisgICAgICAgIGlmIGlzaW5zdGFu
Y2UoX3R5cGUsIEFycmF5VHlwZSkgb3IgX3R5cGUucXVhbGlmaWVkX25hbWUoKSBpbiBbJ2FycmF5
J106CisgICAgICAgICAgICByZXR1cm4gJ2dldEFycmF5JworCisgICAgICAgIGlmIGlzaW5zdGFu
Y2UoX3R5cGUsIFByaW1pdGl2ZVR5cGUpOgorICAgICAgICAgICAgaWYgX3R5cGUucmF3X25hbWUo
KSA9PSAnbnVtYmVyJzoKKyAgICAgICAgICAgICAgICByZXR1cm4gJ2dldERvdWJsZScKKyAgICAg
ICAgICAgIGlmIF90eXBlLnJhd19uYW1lKCkgPT0gJ2FueSc6CisgICAgICAgICAgICAgICAgcmV0
dXJuICdnZXRWYWx1ZScKKyAgICAgICAgICAgIHJldHVybiAnZ2V0JyArIHVjZmlyc3QoX3R5cGUu
cmF3X25hbWUoKSkKKworICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJ1bmtub3duIHR5cGUiKQog
CiAgICAgQHN0YXRpY21ldGhvZAogICAgIGRlZiBjcHBfc2V0dGVyX21ldGhvZF9mb3JfdHlwZShf
dHlwZSk6Ci0gICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIE9iamVjdFR5cGUpOgotICAgICAg
ICAgICAgcmV0dXJuICdzZXRPYmplY3QnCi0gICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEFy
cmF5VHlwZSk6Ci0gICAgICAgICAgICByZXR1cm4gJ3NldEFycmF5JwotICAgICAgICBpZiBpc2lu
c3RhbmNlKF90eXBlLCBQcmltaXRpdmVUeXBlKToKLSAgICAgICAgICAgIGlmIF90eXBlLnJhd19u
YW1lKCkgPT0gJ2ludGVnZXInOgotICAgICAgICAgICAgICAgIHJldHVybiAnc2V0SW50ZWdlcicK
LSAgICAgICAgICAgIGVsaWYgX3R5cGUucmF3X25hbWUoKSA9PSAnbnVtYmVyJzoKLSAgICAgICAg
ICAgICAgICByZXR1cm4gJ3NldERvdWJsZScKLSAgICAgICAgICAgIGVsaWYgX3R5cGUucmF3X25h
bWUoKSA9PSAnYW55JzoKLSAgICAgICAgICAgICAgICByZXR1cm4gJ3NldFZhbHVlJwotICAgICAg
ICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByZXR1cm4gJ3NldCcgKyB1Y2ZpcnN0KF90eXBl
LnJhd19uYW1lKCkpCiAgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEFsaWFzZWRUeXBlKToK
LSAgICAgICAgICAgIHJldHVybiBDcHBHZW5lcmF0b3IuY3BwX3NldHRlcl9tZXRob2RfZm9yX3R5
cGUoX3R5cGUuYWxpYXNlZF90eXBlKQorICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5hbGlhc2Vk
X3R5cGUKKyAgICAgICAgICAgICMgZmFsbHRocm91Z2gKKwogICAgICAgICBpZiBpc2luc3RhbmNl
KF90eXBlLCBFbnVtVHlwZSk6Ci0gICAgICAgICAgICByZXR1cm4gQ3BwR2VuZXJhdG9yLmNwcF9z
ZXR0ZXJfbWV0aG9kX2Zvcl90eXBlKF90eXBlLnByaW1pdGl2ZV90eXBlKQorICAgICAgICAgICAg
X3R5cGUgPSBfdHlwZS5wcmltaXRpdmVfdHlwZQorICAgICAgICAgICAgIyBmYWxsdGhyb3VnaAor
CisgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIE9iamVjdFR5cGUpIG9yIF90eXBlLnF1YWxp
ZmllZF9uYW1lKCkgaW4gWydvYmplY3QnXToKKyAgICAgICAgICAgIHJldHVybiAnc2V0T2JqZWN0
JworCisgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEFycmF5VHlwZSkgb3IgX3R5cGUucXVh
bGlmaWVkX25hbWUoKSBpbiBbJ2FycmF5J106CisgICAgICAgICAgICByZXR1cm4gJ3NldEFycmF5
JworCisgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIFByaW1pdGl2ZVR5cGUpOgorICAgICAg
ICAgICAgaWYgX3R5cGUucmF3X25hbWUoKSA9PSAnbnVtYmVyJzoKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gJ3NldERvdWJsZScKKyAgICAgICAgICAgIGlmIF90eXBlLnJhd19uYW1lKCkgPT0gJ2Fu
eSc6CisgICAgICAgICAgICAgICAgcmV0dXJuICdzZXRWYWx1ZScKKyAgICAgICAgICAgIHJldHVy
biAnc2V0JyArIHVjZmlyc3QoX3R5cGUucmF3X25hbWUoKSkKKworICAgICAgICByYWlzZSBWYWx1
ZUVycm9yKCJ1bmtub3duIHR5cGUiKQogCiAgICAgIyBHZW5lcmF0ZSB0eXBlIHJlcHJlc2VudGF0
aW9ucyBmb3IgdmFyaW91cyBzaXR1YXRpb25zLgogICAgIEBzdGF0aWNtZXRob2QKICAgICBkZWYg
Y3BwX3Byb3RvY29sX3R5cGVfZm9yX3R5cGUoX3R5cGUpOgogICAgICAgICBpZiBpc2luc3RhbmNl
KF90eXBlLCBBbGlhc2VkVHlwZSk6Ci0gICAgICAgICAgICBfdHlwZSA9IF90eXBlLmFsaWFzZWRf
dHlwZSAgIyBGYWxsIHRocm91Z2ggdG8gZW51bSBvciBwcmltaXRpdmUuCisgICAgICAgICAgICBf
dHlwZSA9IF90eXBlLmFsaWFzZWRfdHlwZQorICAgICAgICAgICAgIyBmYWxsdGhyb3VnaAogCi0g
ICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIE9iamVjdFR5cGUpIGFuZCBsZW4oX3R5cGUubWVt
YmVycykgPT0gMDoKLSAgICAgICAgICAgIHJldHVybiAnSlNPTjo6T2JqZWN0JwogICAgICAgICBp
ZiBpc2luc3RhbmNlKF90eXBlLCBBcnJheVR5cGUpOgotICAgICAgICAgICAgaWYgX3R5cGUucmF3
X25hbWUoKSBpcyBOb25lOiAgIyBPdGhlcndpc2UsIGZhbGwgdGhyb3VnaCBhbmQgdXNlIHR5cGVk
ZWYnZCBuYW1lLgorICAgICAgICAgICAgaWYgX3R5cGUucmF3X25hbWUoKSBpcyBOb25lOgogICAg
ICAgICAgICAgICAgIHJldHVybiAnSlNPTjo6QXJyYXlPZjwlcz4nICUgQ3BwR2VuZXJhdG9yLmNw
cF9wcm90b2NvbF90eXBlX2Zvcl90eXBlKF90eXBlLmVsZW1lbnRfdHlwZSkKKyAgICAgICAgICAg
ICMgZmFsbHRocm91Z2gKKwogICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCAoT2JqZWN0VHlw
ZSwgRW51bVR5cGUsIEFycmF5VHlwZSkpOgotICAgICAgICAgICAgcmV0dXJuICdJbnNwZWN0b3I6
OlByb3RvY29sOjolczo6JXMnICUgKF90eXBlLnR5cGVfZG9tYWluKCkuZG9tYWluX25hbWUsIF90
eXBlLnJhd19uYW1lKCkpCisgICAgICAgICAgICByZXR1cm4gJ1Byb3RvY29sOjolczo6JXMnICUg
KF90eXBlLnR5cGVfZG9tYWluKCkuZG9tYWluX25hbWUsIF90eXBlLnJhd19uYW1lKCkpCisKICAg
ICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgUHJpbWl0aXZlVHlwZSk6CiAgICAgICAgICAgICBy
ZXR1cm4gQ3BwR2VuZXJhdG9yLmNwcF9uYW1lX2Zvcl9wcmltaXRpdmVfdHlwZShfdHlwZSkKIAot
ICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgY3BwX3Byb3RvY29sX3R5cGVfZm9yX3R5cGVfbWVt
YmVyKHR5cGVfbWVtYmVyLCBvYmplY3RfZGVjbGFyYXRpb24pOgotICAgICAgICBpZiBpc2luc3Rh
bmNlKHR5cGVfbWVtYmVyLnR5cGUsIEVudW1UeXBlKSBhbmQgdHlwZV9tZW1iZXIudHlwZS5pc19h
bm9ueW1vdXM6Ci0gICAgICAgICAgICByZXR1cm4gJzo6Jy5qb2luKFtDcHBHZW5lcmF0b3IuY3Bw
X3Byb3RvY29sX3R5cGVfZm9yX3R5cGUob2JqZWN0X2RlY2xhcmF0aW9uLnR5cGUpLCB1Y2ZpcnN0
KHR5cGVfbWVtYmVyLm1lbWJlcl9uYW1lKV0pCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBy
ZXR1cm4gQ3BwR2VuZXJhdG9yLmNwcF9wcm90b2NvbF90eXBlX2Zvcl90eXBlKHR5cGVfbWVtYmVy
LnR5cGUpCisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInVua25vd24gdHlwZSIpCiAKICAgICBA
c3RhdGljbWV0aG9kCi0gICAgZGVmIGNwcF90eXBlX2Zvcl91bmNoZWNrZWRfZm9ybWFsX2luX3Bh
cmFtZXRlcihwYXJhbWV0ZXIpOgotICAgICAgICBfdHlwZSA9IHBhcmFtZXRlci50eXBlCisgICAg
ZGVmIGNwcF90eXBlX2Zvcl90eXBlX21lbWJlcl9hcmd1bWVudChfdHlwZSwgbmFtZSk6CiAgICAg
ICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEFsaWFzZWRUeXBlKToKLSAgICAgICAgICAgIF90eXBl
ID0gX3R5cGUuYWxpYXNlZF90eXBlICAjIEZhbGwgdGhyb3VnaCB0byBlbnVtIG9yIHByaW1pdGl2
ZS4KKyAgICAgICAgICAgIF90eXBlID0gX3R5cGUuYWxpYXNlZF90eXBlCisgICAgICAgICAgICAj
IGZhbGx0aHJvdWdoCiAKLSAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgRW51bVR5cGUpOgot
ICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5wcmltaXRpdmVfdHlwZSAgIyBGYWxsIHRocm91Z2gg
dG8gcHJpbWl0aXZlLgotCi0gICAgICAgICMgVGhpcyBoYW5kbGVzIHRoZSAnYW55JyB0eXBlIGFu
ZCBvYmplY3RzIHdpdGggZGVmaW5lZCBwcm9wZXJ0aWVzLgotICAgICAgICBpZiBpc2luc3RhbmNl
KF90eXBlLCBPYmplY3RUeXBlKSBvciBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpID09ICdvYmplY3Qn
OgotICAgICAgICAgICAgY3BwX25hbWUgPSAnSlNPTjo6T2JqZWN0JwotICAgICAgICAgICAgaWYg
cGFyYW1ldGVyLmlzX29wdGlvbmFsOgotICAgICAgICAgICAgICAgIHJldHVybiAnY29uc3QgJXMq
JyAlIGNwcF9uYW1lCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJldHVybiAn
Y29uc3QgJXMmJyAlIGNwcF9uYW1lCi0gICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEFycmF5
VHlwZSk6Ci0gICAgICAgICAgICBjcHBfbmFtZSA9ICdKU09OOjpBcnJheScKLSAgICAgICAgICAg
IGlmIHBhcmFtZXRlci5pc19vcHRpb25hbDoKLSAgICAgICAgICAgICAgICByZXR1cm4gJ2NvbnN0
ICVzKicgJSBjcHBfbmFtZQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByZXR1
cm4gJ2NvbnN0ICVzJicgJSBjcHBfbmFtZQotICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBQ
cmltaXRpdmVUeXBlKToKLSAgICAgICAgICAgIGNwcF9uYW1lID0gQ3BwR2VuZXJhdG9yLmNwcF9u
YW1lX2Zvcl9wcmltaXRpdmVfdHlwZShfdHlwZSkKLSAgICAgICAgICAgIGlmIHBhcmFtZXRlci5p
c19vcHRpb25hbDoKLSAgICAgICAgICAgICAgICByZXR1cm4gJ2NvbnN0ICVzKicgJSBjcHBfbmFt
ZQotICAgICAgICAgICAgZWxpZiBfdHlwZS5yYXdfbmFtZSgpIGluIFsnc3RyaW5nJ106Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuICdjb25zdCAlcyYnICUgY3BwX25hbWUKLSAgICAgICAgICAgIGVs
c2U6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGNwcF9uYW1lCi0KLSAgICAgICAgcmV0dXJuICJ1
bmtub3duX3VuY2hlY2tlZF9mb3JtYWxfaW5fcGFyYW1ldGVyX3R5cGUiCi0KLSAgICBAc3RhdGlj
bWV0aG9kCi0gICAgZGVmIGNwcF90eXBlX2Zvcl9jaGVja2VkX2Zvcm1hbF9ldmVudF9wYXJhbWV0
ZXIocGFyYW1ldGVyKToKLSAgICAgICAgcmV0dXJuIENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3Jf
dHlwZV93aXRoX25hbWUocGFyYW1ldGVyLnR5cGUsIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwg
cGFyYW1ldGVyLmlzX29wdGlvbmFsKQotCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBjcHBf
dHlwZV9mb3JfdHlwZV9tZW1iZXIobWVtYmVyKToKLSAgICAgICAgcmV0dXJuIENwcEdlbmVyYXRv
ci5jcHBfdHlwZV9mb3JfdHlwZV93aXRoX25hbWUobWVtYmVyLnR5cGUsIG1lbWJlci5tZW1iZXJf
bmFtZSwgRmFsc2UpCi0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIGNwcF90eXBlX2Zvcl90
eXBlX3dpdGhfbmFtZShfdHlwZSwgdHlwZV9uYW1lLCBpc19vcHRpb25hbCk6CiAgICAgICAgIGlm
IGlzaW5zdGFuY2UoX3R5cGUsIChBcnJheVR5cGUsIE9iamVjdFR5cGUpKToKLSAgICAgICAgICAg
IHJldHVybiAnUmVmUHRyPCVzPicgJSBDcHBHZW5lcmF0b3IuY3BwX3Byb3RvY29sX3R5cGVfZm9y
X3R5cGUoX3R5cGUpCi0gICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEFsaWFzZWRUeXBlKToK
LSAgICAgICAgICAgIGJ1aWxkZXJfdHlwZSA9IENwcEdlbmVyYXRvci5jcHBfcHJvdG9jb2xfdHlw
ZV9mb3JfdHlwZShfdHlwZSkKLSAgICAgICAgICAgIGlmIGlzX29wdGlvbmFsOgotICAgICAgICAg
ICAgICAgIHJldHVybiAnY29uc3QgJXMqJyAlIGJ1aWxkZXJfdHlwZQotICAgICAgICAgICAgZWxp
ZiBfdHlwZS5hbGlhc2VkX3R5cGUucXVhbGlmaWVkX25hbWUoKSBpbiBbJ2ludGVnZXInLCAnbnVt
YmVyJ106Ci0gICAgICAgICAgICAgICAgcmV0dXJuIENwcEdlbmVyYXRvci5jcHBfbmFtZV9mb3Jf
cHJpbWl0aXZlX3R5cGUoX3R5cGUuYWxpYXNlZF90eXBlKQotICAgICAgICAgICAgZWxpZiBfdHlw
ZS5hbGlhc2VkX3R5cGUucXVhbGlmaWVkX25hbWUoKSBpbiBbJ3N0cmluZyddOgotICAgICAgICAg
ICAgICAgIHJldHVybiAnY29uc3QgJXMmJyAlIGJ1aWxkZXJfdHlwZQotICAgICAgICAgICAgZWxz
ZToKLSAgICAgICAgICAgICAgICByZXR1cm4gYnVpbGRlcl90eXBlCi0gICAgICAgIGlmIGlzaW5z
dGFuY2UoX3R5cGUsIFByaW1pdGl2ZVR5cGUpOgotICAgICAgICAgICAgY3BwX25hbWUgPSBDcHBH
ZW5lcmF0b3IuY3BwX25hbWVfZm9yX3ByaW1pdGl2ZV90eXBlKF90eXBlKQotICAgICAgICAgICAg
aWYgX3R5cGUucXVhbGlmaWVkX25hbWUoKSBpbiBbJ29iamVjdCddOgotICAgICAgICAgICAgICAg
IHJldHVybiAnUmVmUHRyPEpTT046Ok9iamVjdD4nCi0gICAgICAgICAgICBlbGlmIF90eXBlLnF1
YWxpZmllZF9uYW1lKCkgaW4gWydhbnknXToKLSAgICAgICAgICAgICAgICByZXR1cm4gJ1JlZlB0
cjxKU09OOjpWYWx1ZT4nCi0gICAgICAgICAgICBlbGlmIGlzX29wdGlvbmFsOgotICAgICAgICAg
ICAgICAgIHJldHVybiAnY29uc3QgJXMqJyAlIGNwcF9uYW1lCi0gICAgICAgICAgICBlbGlmIF90
eXBlLnF1YWxpZmllZF9uYW1lKCkgaW4gWydzdHJpbmcnXToKLSAgICAgICAgICAgICAgICByZXR1
cm4gJ2NvbnN0ICVzJicgJSBjcHBfbmFtZQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAg
ICAgICByZXR1cm4gY3BwX25hbWUKKyAgICAgICAgICAgIHJldHVybiAnUmVmPCVzPiYmJyAlIENw
cEdlbmVyYXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZShfdHlwZSkKKworICAgICAgICBp
ZiBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpID09ICdvYmplY3QnOgorICAgICAgICAgICAgcmV0dXJu
ICdSZWY8SlNPTjo6T2JqZWN0PiYmJworCisgICAgICAgIGlmIF90eXBlLnF1YWxpZmllZF9uYW1l
KCkgPT0gJ2FycmF5JzoKKyAgICAgICAgICAgIHJldHVybiAnUmVmPEpTT046OkFycmF5PiYmJwor
CisgICAgICAgIGlmIF90eXBlLnF1YWxpZmllZF9uYW1lKCkgPT0gJ2FueSc6CisgICAgICAgICAg
ICByZXR1cm4gJ1JlZjxKU09OOjpWYWx1ZT4mJicKKworICAgICAgICBpZiBfdHlwZS5xdWFsaWZp
ZWRfbmFtZSgpID09ICdzdHJpbmcnOgorICAgICAgICAgICAgcmV0dXJuICdjb25zdCAlcyYnICUg
Q3BwR2VuZXJhdG9yLmNwcF9uYW1lX2Zvcl9wcmltaXRpdmVfdHlwZShfdHlwZSkKKwogICAgICAg
ICBpZiBpc2luc3RhbmNlKF90eXBlLCBFbnVtVHlwZSk6CiAgICAgICAgICAgICBpZiBfdHlwZS5p
c19hbm9ueW1vdXM6Ci0gICAgICAgICAgICAgICAgZW51bV90eXBlX25hbWUgPSB1Y2ZpcnN0KHR5
cGVfbmFtZSkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgZW51bV90eXBlX25h
bWUgPSAnSW5zcGVjdG9yOjpQcm90b2NvbDo6JXM6OiVzJyAlIChfdHlwZS50eXBlX2RvbWFpbigp
LmRvbWFpbl9uYW1lLCBfdHlwZS5yYXdfbmFtZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiB1
Y2ZpcnN0KG5hbWUpCisgICAgICAgICAgICByZXR1cm4gJ1Byb3RvY29sOjolczo6JXMnICUgKF90
eXBlLnR5cGVfZG9tYWluKCkuZG9tYWluX25hbWUsIF90eXBlLnJhd19uYW1lKCkpCiAKLSAgICAg
ICAgICAgIGlmIGlzX29wdGlvbmFsOgotICAgICAgICAgICAgICAgIHJldHVybiAnJXMqJyAlIGVu
dW1fdHlwZV9uYW1lCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJldHVybiAn
JXMnICUgZW51bV90eXBlX25hbWUKLQotICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgY3BwX3R5
cGVfZm9yX2Zvcm1hbF9vdXRfcGFyYW1ldGVyKHBhcmFtZXRlcik6Ci0gICAgICAgIF90eXBlID0g
cGFyYW1ldGVyLnR5cGUKLQotICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBBbGlhc2VkVHlw
ZSk6Ci0gICAgICAgICAgICBfdHlwZSA9IF90eXBlLmFsaWFzZWRfdHlwZSAgIyBGYWxsIHRocm91
Z2guCi0KLSAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgKE9iamVjdFR5cGUsIEFycmF5VHlw
ZSkpOgotICAgICAgICAgICAgcmV0dXJuICdSZWZQdHI8JXM+JicgJSBDcHBHZW5lcmF0b3IuY3Bw
X3Byb3RvY29sX3R5cGVfZm9yX3R5cGUoX3R5cGUpCiAgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5
cGUsIFByaW1pdGl2ZVR5cGUpOgotICAgICAgICAgICAgY3BwX25hbWUgPSBDcHBHZW5lcmF0b3Iu
Y3BwX25hbWVfZm9yX3ByaW1pdGl2ZV90eXBlKF90eXBlKQotICAgICAgICAgICAgaWYgcGFyYW1l
dGVyLmlzX29wdGlvbmFsOgotICAgICAgICAgICAgICAgIHJldHVybiAiT3B0aW9uYWw8JXM+JiIg
JSBjcHBfbmFtZQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByZXR1cm4gJyVz
KicgJSBjcHBfbmFtZQotICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBFbnVtVHlwZSk6Ci0g
ICAgICAgICAgICBpZiBfdHlwZS5pc19hbm9ueW1vdXM6Ci0gICAgICAgICAgICAgICAgcmV0dXJu
ICclc0JhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6JXMqJyAlIChfdHlwZS50eXBlX2RvbWFpbigp
LmRvbWFpbl9uYW1lLCB1Y2ZpcnN0KHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkpCi0gICAgICAg
ICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJldHVybiAnSW5zcGVjdG9yOjpQcm90b2NvbDo6
JXM6OiVzKicgJSAoX3R5cGUudHlwZV9kb21haW4oKS5kb21haW5fbmFtZSwgX3R5cGUucmF3X25h
bWUoKSkKKyAgICAgICAgICAgIHJldHVybiBDcHBHZW5lcmF0b3IuY3BwX25hbWVfZm9yX3ByaW1p
dGl2ZV90eXBlKF90eXBlKQogCi0gICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInVua25vd24gZm9y
bWFsIG91dCBwYXJhbWV0ZXIgdHlwZS4iKQotCi0gICAgIyBGSVhNRTogdGhpcyBpcyBvbmx5IHNs
aWdodGx5IGRpZmZlcmVudCBmcm9tIG91dCBwYXJhbWV0ZXJzOyB0aGV5IGNvdWxkIGJlIHVuaWZp
ZWQuCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBjcHBfdHlwZV9mb3JfZm9ybWFsX2FzeW5j
X3BhcmFtZXRlcihwYXJhbWV0ZXIpOgotICAgICAgICBfdHlwZSA9IHBhcmFtZXRlci50eXBlCi0g
ICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEFsaWFzZWRUeXBlKToKLSAgICAgICAgICAgIF90
eXBlID0gX3R5cGUuYWxpYXNlZF90eXBlICAjIEZhbGwgdGhyb3VnaC4KLQotICAgICAgICBpZiBp
c2luc3RhbmNlKF90eXBlLCAoT2JqZWN0VHlwZSwgQXJyYXlUeXBlKSk6Ci0gICAgICAgICAgICBy
ZXR1cm4gJ1JlZlB0cjwlcz4mJicgJSBDcHBHZW5lcmF0b3IuY3BwX3Byb3RvY29sX3R5cGVfZm9y
X3R5cGUoX3R5cGUpCi0gICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIFByaW1pdGl2ZVR5cGUp
OgotICAgICAgICAgICAgY3BwX25hbWUgPSBDcHBHZW5lcmF0b3IuY3BwX25hbWVfZm9yX3ByaW1p
dGl2ZV90eXBlKF90eXBlKQotICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgot
ICAgICAgICAgICAgICAgIHJldHVybiAiT3B0aW9uYWw8JXM+JiIgJSBjcHBfbmFtZQotICAgICAg
ICAgICAgZWxpZiBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpIGluIFsnaW50ZWdlcicsICdudW1iZXIn
XToKLSAgICAgICAgICAgICAgICByZXR1cm4gQ3BwR2VuZXJhdG9yLmNwcF9uYW1lX2Zvcl9wcmlt
aXRpdmVfdHlwZShfdHlwZSkKLSAgICAgICAgICAgIGVsaWYgX3R5cGUucXVhbGlmaWVkX25hbWUo
KSBpbiBbJ3N0cmluZyddOgotICAgICAgICAgICAgICAgIHJldHVybiAnY29uc3QgJXMmJyAlIGNw
cF9uYW1lCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJldHVybiBjcHBfbmFt
ZQotICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBFbnVtVHlwZSk6Ci0gICAgICAgICAgICBp
ZiBfdHlwZS5pc19hbm9ueW1vdXM6Ci0gICAgICAgICAgICAgICAgY3BwX25hbWUgPSAnJXNCYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXI6OiVzJyAlIChfdHlwZS50eXBlX2RvbWFpbigpLmRvbWFpbl9u
YW1lLCB1Y2ZpcnN0KHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkpCi0gICAgICAgICAgICBlbHNl
OgotICAgICAgICAgICAgICAgIGNwcF9uYW1lID0gJ0luc3BlY3Rvcjo6UHJvdG9jb2w6OiVzOjol
cycgJSAoX3R5cGUudHlwZV9kb21haW4oKS5kb21haW5fbmFtZSwgX3R5cGUucmF3X25hbWUoKSkK
LQotICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgotICAgICAgICAgICAgICAg
IHJldHVybiAiT3B0aW9uYWw8JXM+IiAlIGNwcF9uYW1lCi0gICAgICAgICAgICBlbHNlOgotICAg
ICAgICAgICAgICAgIHJldHVybiBjcHBfbmFtZQotCi0gICAgICAgIHJhaXNlIFZhbHVlRXJyb3Io
IlVua25vd24gZm9ybWFsIGFzeW5jIHBhcmFtZXRlciB0eXBlLiIpCisgICAgICAgIHJhaXNlIFZh
bHVlRXJyb3IoInVua25vd24gdHlwZSIpCiAKICAgICAjIEluLXBhcmFtZXRlcnMgZG9uJ3QgdXNl
IGJ1aWxkZXIgdHlwZXMsIGJlY2F1c2UgdGhleSBjb3VsZCBiZSBwYXNzZWQKICAgICAjICJvcGVu
IHR5cGVzIiB0aGF0IGFyZSBtYW51YWxseSBjb25zdHJ1Y3RlZCBvdXQgb2YgSW5zcGVjdG9yT2Jq
ZWN0cy4KLQotICAgICMgRklYTUU6IE9ubHkgcGFyYW1ldGVycyB0aGF0IGFyZSBhY3R1YWxseSBv
cGVuIHR5cGVzIHNob3VsZCBuZWVkIG5vbi1idWlsZGVyIHBhcmFtZXRlciB0eXBlcy4KICAgICBA
c3RhdGljbWV0aG9kCi0gICAgZGVmIGNwcF90eXBlX2Zvcl9zdGFja19pbl9wYXJhbWV0ZXIocGFy
YW1ldGVyKToKLSAgICAgICAgX3R5cGUgPSBwYXJhbWV0ZXIudHlwZQorICAgIGRlZiBjcHBfdHlw
ZV9mb3JfY29tbWFuZF9wYXJhbWV0ZXIoX3R5cGUsIGlzX29wdGlvbmFsKToKICAgICAgICAgaWYg
aXNpbnN0YW5jZShfdHlwZSwgQWxpYXNlZFR5cGUpOgotICAgICAgICAgICAgX3R5cGUgPSBfdHlw
ZS5hbGlhc2VkX3R5cGUgICMgRmFsbCB0aHJvdWdoLgorICAgICAgICAgICAgX3R5cGUgPSBfdHlw
ZS5hbGlhc2VkX3R5cGUKKyAgICAgICAgICAgICMgZmFsbHRocm91Z2gKKworICAgICAgICBpZiBp
c2luc3RhbmNlKF90eXBlLCBFbnVtVHlwZSkgYW5kIF90eXBlLmlzX2Fub255bW91czoKKyAgICAg
ICAgICAgIF90eXBlID0gX3R5cGUucHJpbWl0aXZlX3R5cGUKKyAgICAgICAgICAgICMgZmFsbHRo
cm91Z2gKKworICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBPYmplY3RUeXBlKSBvciBfdHlw
ZS5xdWFsaWZpZWRfbmFtZSgpID09ICdvYmplY3QnOgorICAgICAgICAgICAgaWYgaXNfb3B0aW9u
YWw6CisgICAgICAgICAgICAgICAgcmV0dXJuICdSZWZQdHI8SlNPTjo6T2JqZWN0PiYmJworICAg
ICAgICAgICAgcmV0dXJuICdSZWY8SlNPTjo6T2JqZWN0PiYmJworCisgICAgICAgIGlmIGlzaW5z
dGFuY2UoX3R5cGUsIEFycmF5VHlwZSkgb3IgX3R5cGUucXVhbGlmaWVkX25hbWUoKSA9PSAnYXJy
YXknOgorICAgICAgICAgICAgaWYgaXNfb3B0aW9uYWw6CisgICAgICAgICAgICAgICAgcmV0dXJu
ICdSZWZQdHI8SlNPTjo6QXJyYXk+JiYnCisgICAgICAgICAgICByZXR1cm4gJ1JlZjxKU09OOjpB
cnJheT4mJicKKworICAgICAgICBpZiBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpID09ICdhbnknOgor
ICAgICAgICAgICAgaWYgaXNfb3B0aW9uYWw6CisgICAgICAgICAgICAgICAgcmV0dXJuICdSZWZQ
dHI8SlNPTjo6VmFsdWU+JiYnCisgICAgICAgICAgICByZXR1cm4gJ1JlZjxKU09OOjpWYWx1ZT4m
JicKKworICAgICAgICBpZiBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpID09ICdzdHJpbmcnOgorICAg
ICAgICAgICAgcmV0dXJuICdjb25zdCAlcyYnICUgQ3BwR2VuZXJhdG9yLmNwcF9uYW1lX2Zvcl9w
cmltaXRpdmVfdHlwZShfdHlwZSkKIAogICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBFbnVt
VHlwZSk6Ci0gICAgICAgICAgICBfdHlwZSA9IF90eXBlLnByaW1pdGl2ZV90eXBlICAjIEZhbGwg
dGhyb3VnaC4KLQotICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBPYmplY3RUeXBlKToKLSAg
ICAgICAgICAgIHJldHVybiAiUmVmUHRyPEpTT046Ok9iamVjdD4iCi0gICAgICAgIGlmIGlzaW5z
dGFuY2UoX3R5cGUsIEFycmF5VHlwZSk6Ci0gICAgICAgICAgICByZXR1cm4gIlJlZlB0cjxKU09O
OjpBcnJheT4iCi0gICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIFByaW1pdGl2ZVR5cGUpOgor
ICAgICAgICAgICAgY3BwX25hbWUgPSAnUHJvdG9jb2w6OiVzOjolcycgJSAoX3R5cGUudHlwZV9k
b21haW4oKS5kb21haW5fbmFtZSwgX3R5cGUucmF3X25hbWUoKSkKKyAgICAgICAgZWxpZiBpc2lu
c3RhbmNlKF90eXBlLCBQcmltaXRpdmVUeXBlKToKICAgICAgICAgICAgIGNwcF9uYW1lID0gQ3Bw
R2VuZXJhdG9yLmNwcF9uYW1lX2Zvcl9wcmltaXRpdmVfdHlwZShfdHlwZSkKLSAgICAgICAgICAg
IGlmIF90eXBlLnF1YWxpZmllZF9uYW1lKCkgaW4gWydhbnknLCAnb2JqZWN0J106Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuICJSZWZQdHI8JXM+IiAlIENwcEdlbmVyYXRvci5jcHBfbmFtZV9mb3Jf
cHJpbWl0aXZlX3R5cGUoX3R5cGUpCi0gICAgICAgICAgICBlbGlmIHBhcmFtZXRlci5pc19vcHRp
b25hbCBhbmQgX3R5cGUucXVhbGlmaWVkX25hbWUoKSBub3QgaW4gWydib29sZWFuJywgJ3N0cmlu
ZycsICdpbnRlZ2VyJywgJ251bWJlciddOgotICAgICAgICAgICAgICAgIHJldHVybiAiT3B0aW9u
YWw8JXM+IiAlIGNwcF9uYW1lCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJl
dHVybiBjcHBfbmFtZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJv
cigidW5rbm93biB0eXBlIikKKworICAgICAgICBpZiBpc19vcHRpb25hbDoKKyAgICAgICAgICAg
IGNwcF9uYW1lID0gJ09wdGlvbmFsPCVzPiYmJyAlIGNwcF9uYW1lCisgICAgICAgIHJldHVybiBj
cHBfbmFtZQogCiAgICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBjcHBfdHlwZV9mb3Jfc3RhY2tf
b3V0X3BhcmFtZXRlcihwYXJhbWV0ZXIpOgotICAgICAgICBfdHlwZSA9IHBhcmFtZXRlci50eXBl
CisgICAgZGVmIGNwcF90eXBlX2Zvcl9jb21tYW5kX3JldHVybl9kZWNsYXJhdGlvbihfdHlwZSwg
aXNfb3B0aW9uYWwpOgorICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBBbGlhc2VkVHlwZSk6
CisgICAgICAgICAgICBfdHlwZSA9IF90eXBlLmFsaWFzZWRfdHlwZQorICAgICAgICAgICAgIyBm
YWxsdGhyb3VnaAorCisgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKSBhbmQg
X3R5cGUuaXNfYW5vbnltb3VzOgorICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5wcmltaXRpdmVf
dHlwZQorICAgICAgICAgICAgIyBmYWxsdGhyb3VnaAorCiAgICAgICAgIGlmIGlzaW5zdGFuY2Uo
X3R5cGUsIChBcnJheVR5cGUsIE9iamVjdFR5cGUpKToKLSAgICAgICAgICAgIHJldHVybiAnUmVm
UHRyPCVzPicgJSBDcHBHZW5lcmF0b3IuY3BwX3Byb3RvY29sX3R5cGVfZm9yX3R5cGUoX3R5cGUp
Ci0gICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEFsaWFzZWRUeXBlKToKLSAgICAgICAgICAg
IGJ1aWxkZXJfdHlwZSA9IENwcEdlbmVyYXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZShf
dHlwZSkKLSAgICAgICAgICAgIGlmIHBhcmFtZXRlci5pc19vcHRpb25hbDoKLSAgICAgICAgICAg
ICAgICByZXR1cm4gIk9wdGlvbmFsPCVzPiIgJSBidWlsZGVyX3R5cGUKLSAgICAgICAgICAgIHJl
dHVybiAnJXMnICUgYnVpbGRlcl90eXBlCi0gICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIFBy
aW1pdGl2ZVR5cGUpOgotICAgICAgICAgICAgY3BwX25hbWUgPSBDcHBHZW5lcmF0b3IuY3BwX25h
bWVfZm9yX3ByaW1pdGl2ZV90eXBlKF90eXBlKQotICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlz
X29wdGlvbmFsOgotICAgICAgICAgICAgICAgIHJldHVybiAiT3B0aW9uYWw8JXM+IiAlIGNwcF9u
YW1lCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJldHVybiBjcHBfbmFtZQor
ICAgICAgICAgICAgaWYgaXNfb3B0aW9uYWw6CisgICAgICAgICAgICAgICAgcmV0dXJuICdSZWZQ
dHI8JXM+JyAlIENwcEdlbmVyYXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZShfdHlwZSkK
KyAgICAgICAgICAgIHJldHVybiAnUmVmPCVzPicgJSBDcHBHZW5lcmF0b3IuY3BwX3Byb3RvY29s
X3R5cGVfZm9yX3R5cGUoX3R5cGUpCisKKyAgICAgICAgaWYgX3R5cGUucXVhbGlmaWVkX25hbWUo
KSA9PSAnb2JqZWN0JzoKKyAgICAgICAgICAgIGlmIGlzX29wdGlvbmFsOgorICAgICAgICAgICAg
ICAgIHJldHVybiAnUmVmUHRyPEpTT046Ok9iamVjdD4nCisgICAgICAgICAgICByZXR1cm4gJ1Jl
ZjxKU09OOjpPYmplY3Q+JworCisgICAgICAgIGlmIF90eXBlLnF1YWxpZmllZF9uYW1lKCkgPT0g
J2FycmF5JzoKKyAgICAgICAgICAgIGlmIGlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAgIHJl
dHVybiAnUmVmUHRyPEpTT046OkFycmF5PicKKyAgICAgICAgICAgIHJldHVybiAnUmVmPEpTT046
OkFycmF5PicKKworICAgICAgICBpZiBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpID09ICdhbnknOgor
ICAgICAgICAgICAgaWYgaXNfb3B0aW9uYWw6CisgICAgICAgICAgICAgICAgcmV0dXJuICdSZWZQ
dHI8SlNPTjo6VmFsdWU+JworICAgICAgICAgICAgcmV0dXJuICdSZWY8SlNPTjo6VmFsdWU+Jwor
CisgICAgICAgIGlmIF90eXBlLnF1YWxpZmllZF9uYW1lKCkgPT0gJ3N0cmluZyc6CisgICAgICAg
ICAgICByZXR1cm4gQ3BwR2VuZXJhdG9yLmNwcF9uYW1lX2Zvcl9wcmltaXRpdmVfdHlwZShfdHlw
ZSkKKwogICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBFbnVtVHlwZSk6Ci0gICAgICAgICAg
ICBpZiBfdHlwZS5pc19hbm9ueW1vdXM6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICclc0JhY2tl
bmREaXNwYXRjaGVySGFuZGxlcjo6JXMnICUgKF90eXBlLnR5cGVfZG9tYWluKCkuZG9tYWluX25h
bWUsIHVjZmlyc3QocGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKSkKLSAgICAgICAgICAgIGVsc2U6
Ci0gICAgICAgICAgICAgICAgcmV0dXJuICdJbnNwZWN0b3I6OlByb3RvY29sOjolczo6JXMnICUg
KF90eXBlLnR5cGVfZG9tYWluKCkuZG9tYWluX25hbWUsIF90eXBlLnJhd19uYW1lKCkpCisgICAg
ICAgICAgICBjcHBfbmFtZSA9ICdQcm90b2NvbDo6JXM6OiVzJyAlIChfdHlwZS50eXBlX2RvbWFp
bigpLmRvbWFpbl9uYW1lLCBfdHlwZS5yYXdfbmFtZSgpKQorICAgICAgICBlbGlmIGlzaW5zdGFu
Y2UoX3R5cGUsIFByaW1pdGl2ZVR5cGUpOgorICAgICAgICAgICAgY3BwX25hbWUgPSBDcHBHZW5l
cmF0b3IuY3BwX25hbWVfZm9yX3ByaW1pdGl2ZV90eXBlKF90eXBlKQorICAgICAgICBlbHNlOgor
ICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigidW5rbm93biB0eXBlIikKKworICAgICAgICBp
ZiBpc19vcHRpb25hbDoKKyAgICAgICAgICAgIGNwcF9uYW1lID0gJ09wdGlvbmFsPCVzPicgJSBj
cHBfbmFtZQorICAgICAgICByZXR1cm4gY3BwX25hbWUKIAogICAgIEBzdGF0aWNtZXRob2QKLSAg
ICBkZWYgY3BwX2Fzc2VydGlvbl9tZXRob2RfZm9yX3R5cGVfbWVtYmVyKHR5cGVfbWVtYmVyLCBv
YmplY3RfZGVjbGFyYXRpb24pOgorICAgIGRlZiBjcHBfdHlwZV9mb3JfY29tbWFuZF9yZXR1cm5f
YXJndW1lbnQoX3R5cGUsIGlzX29wdGlvbmFsKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlw
ZSwgQWxpYXNlZFR5cGUpOgorICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5hbGlhc2VkX3R5cGUK
KyAgICAgICAgICAgICMgZmFsbHRocm91ZwogCi0gICAgICAgIGRlZiBhc3NlcnRpb25fbWV0aG9k
X2Zvcl90eXBlKF90eXBlKToKLSAgICAgICAgICAgIHJldHVybiAnQmluZGluZ1RyYWl0czwlcz46
OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlJyAlIENwcEdlbmVyYXRvci5jcHBfcHJvdG9jb2xf
dHlwZV9mb3JfdHlwZShfdHlwZSkKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgRW51bVR5
cGUpIGFuZCBfdHlwZS5pc19hbm9ueW1vdXM6CisgICAgICAgICAgICBfdHlwZSA9IF90eXBlLnBy
aW1pdGl2ZV90eXBlCisgICAgICAgICAgICAjIGZhbGx0aHJvdWdoCiAKLSAgICAgICAgaWYgaXNp
bnN0YW5jZSh0eXBlX21lbWJlci50eXBlLCBBbGlhc2VkVHlwZSk6Ci0gICAgICAgICAgICByZXR1
cm4gYXNzZXJ0aW9uX21ldGhvZF9mb3JfdHlwZSh0eXBlX21lbWJlci50eXBlLmFsaWFzZWRfdHlw
ZSkKLSAgICAgICAgaWYgaXNpbnN0YW5jZSh0eXBlX21lbWJlci50eXBlLCBFbnVtVHlwZSkgYW5k
IHR5cGVfbWVtYmVyLnR5cGUuaXNfYW5vbnltb3VzOgotICAgICAgICAgICAgcmV0dXJuICdCaW5k
aW5nVHJhaXRzPCVzPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUnICUgQ3BwR2VuZXJhdG9y
LmNwcF9wcm90b2NvbF90eXBlX2Zvcl90eXBlX21lbWJlcih0eXBlX21lbWJlciwgb2JqZWN0X2Rl
Y2xhcmF0aW9uKQorICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCAoQXJyYXlUeXBlLCBPYmpl
Y3RUeXBlKSk6CisgICAgICAgICAgICBpZiBpc19vcHRpb25hbDoKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gJ1JlZlB0cjwlcz4mJicgJSBDcHBHZW5lcmF0b3IuY3BwX3Byb3RvY29sX3R5cGVfZm9y
X3R5cGUoX3R5cGUpCisgICAgICAgICAgICByZXR1cm4gJ1JlZjwlcz4mJicgJSBDcHBHZW5lcmF0
b3IuY3BwX3Byb3RvY29sX3R5cGVfZm9yX3R5cGUoX3R5cGUpCiAKLSAgICAgICAgcmV0dXJuIGFz
c2VydGlvbl9tZXRob2RfZm9yX3R5cGUodHlwZV9tZW1iZXIudHlwZSkKKyAgICAgICAgaWYgX3R5
cGUucXVhbGlmaWVkX25hbWUoKSA9PSAnb2JqZWN0JzoKKyAgICAgICAgICAgIGlmIGlzX29wdGlv
bmFsOgorICAgICAgICAgICAgICAgIHJldHVybiAnUmVmUHRyPEpTT046Ok9iamVjdD4mJicKKyAg
ICAgICAgICAgIHJldHVybiAnUmVmPEpTT046Ok9iamVjdD4mJicKKworICAgICAgICBpZiBfdHlw
ZS5xdWFsaWZpZWRfbmFtZSgpID09ICdhcnJheSc6CisgICAgICAgICAgICBpZiBpc19vcHRpb25h
bDoKKyAgICAgICAgICAgICAgICByZXR1cm4gJ1JlZlB0cjxKU09OOjpBcnJheT4mJicKKyAgICAg
ICAgICAgIHJldHVybiAnUmVmPEpTT046OkFycmF5PiYmJworCisgICAgICAgIGlmIF90eXBlLnF1
YWxpZmllZF9uYW1lKCkgPT0gJ2FueSc6CisgICAgICAgICAgICBpZiBpc19vcHRpb25hbDoKKyAg
ICAgICAgICAgICAgICByZXR1cm4gJ1JlZlB0cjxKU09OOjpWYWx1ZT4mJicKKyAgICAgICAgICAg
IHJldHVybiAnUmVmPEpTT046OlZhbHVlPiYmJworCisgICAgICAgIGlmIF90eXBlLnF1YWxpZmll
ZF9uYW1lKCkgPT0gJ3N0cmluZyc6CisgICAgICAgICAgICByZXR1cm4gJ2NvbnN0ICVzJicgJSBD
cHBHZW5lcmF0b3IuY3BwX25hbWVfZm9yX3ByaW1pdGl2ZV90eXBlKF90eXBlKQorCisgICAgICAg
IGlmIGlzaW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKToKKyAgICAgICAgICAgIGNwcF9uYW1lID0g
J1Byb3RvY29sOjolczo6JXMnICUgKF90eXBlLnR5cGVfZG9tYWluKCkuZG9tYWluX25hbWUsIF90
eXBlLnJhd19uYW1lKCkpCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShfdHlwZSwgUHJpbWl0aXZl
VHlwZSk6CisgICAgICAgICAgICBjcHBfbmFtZSA9IENwcEdlbmVyYXRvci5jcHBfbmFtZV9mb3Jf
cHJpbWl0aXZlX3R5cGUoX3R5cGUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBW
YWx1ZUVycm9yKCJ1bmtub3duIHR5cGUiKQorCisgICAgICAgIGlmIGlzX29wdGlvbmFsOgorICAg
ICAgICAgICAgY3BwX25hbWUgPSAnT3B0aW9uYWw8JXM+JiYnICUgY3BwX25hbWUKKyAgICAgICAg
cmV0dXJuIGNwcF9uYW1lCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGNwcF90eXBlX2Zv
cl9ldmVudF9wYXJhbWV0ZXIoX3R5cGUsIGlzX29wdGlvbmFsKToKKyAgICAgICAgaWYgaXNpbnN0
YW5jZShfdHlwZSwgQWxpYXNlZFR5cGUpOgorICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5hbGlh
c2VkX3R5cGUKKyAgICAgICAgICAgICMgZmFsbHRocm91Z2gKKworICAgICAgICBpZiBpc2luc3Rh
bmNlKF90eXBlLCBFbnVtVHlwZSkgYW5kIF90eXBlLmlzX2Fub255bW91czoKKyAgICAgICAgICAg
IF90eXBlID0gX3R5cGUucHJpbWl0aXZlX3R5cGUKKyAgICAgICAgICAgICMgZmFsbHRocm91Z2gK
KworICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCAoQXJyYXlUeXBlLCBPYmplY3RUeXBlKSk6
CisgICAgICAgICAgICBpZiBpc19vcHRpb25hbDoKKyAgICAgICAgICAgICAgICByZXR1cm4gJ1Jl
ZlB0cjwlcz4mJicgJSBDcHBHZW5lcmF0b3IuY3BwX3Byb3RvY29sX3R5cGVfZm9yX3R5cGUoX3R5
cGUpCisgICAgICAgICAgICByZXR1cm4gJ1JlZjwlcz4mJicgJSBDcHBHZW5lcmF0b3IuY3BwX3By
b3RvY29sX3R5cGVfZm9yX3R5cGUoX3R5cGUpCisKKyAgICAgICAgaWYgX3R5cGUucXVhbGlmaWVk
X25hbWUoKSA9PSAnb2JqZWN0JzoKKyAgICAgICAgICAgIGlmIGlzX29wdGlvbmFsOgorICAgICAg
ICAgICAgICAgIHJldHVybiAnUmVmUHRyPEpTT046Ok9iamVjdD4mJicKKyAgICAgICAgICAgIHJl
dHVybiAnUmVmPEpTT046Ok9iamVjdD4mJicKKworICAgICAgICBpZiBfdHlwZS5xdWFsaWZpZWRf
bmFtZSgpID09ICdhcnJheSc6CisgICAgICAgICAgICBpZiBpc19vcHRpb25hbDoKKyAgICAgICAg
ICAgICAgICByZXR1cm4gJ1JlZlB0cjxKU09OOjpBcnJheT4mJicKKyAgICAgICAgICAgIHJldHVy
biAnUmVmPEpTT046OkFycmF5PiYmJworCisgICAgICAgIGlmIF90eXBlLnF1YWxpZmllZF9uYW1l
KCkgPT0gJ2FueSc6CisgICAgICAgICAgICBpZiBpc19vcHRpb25hbDoKKyAgICAgICAgICAgICAg
ICByZXR1cm4gJ1JlZlB0cjxKU09OOjpWYWx1ZT4mJicKKyAgICAgICAgICAgIHJldHVybiAnUmVm
PEpTT046OlZhbHVlPiYmJworCisgICAgICAgIGlmIF90eXBlLnF1YWxpZmllZF9uYW1lKCkgPT0g
J3N0cmluZyc6CisgICAgICAgICAgICByZXR1cm4gJ2NvbnN0ICVzJicgJSBDcHBHZW5lcmF0b3Iu
Y3BwX25hbWVfZm9yX3ByaW1pdGl2ZV90eXBlKF90eXBlKQorCisgICAgICAgIGlmIGlzaW5zdGFu
Y2UoX3R5cGUsIEVudW1UeXBlKToKKyAgICAgICAgICAgIGNwcF9uYW1lID0gJ1Byb3RvY29sOjol
czo6JXMnICUgKF90eXBlLnR5cGVfZG9tYWluKCkuZG9tYWluX25hbWUsIF90eXBlLnJhd19uYW1l
KCkpCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShfdHlwZSwgUHJpbWl0aXZlVHlwZSk6CisgICAg
ICAgICAgICBjcHBfbmFtZSA9IENwcEdlbmVyYXRvci5jcHBfbmFtZV9mb3JfcHJpbWl0aXZlX3R5
cGUoX3R5cGUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJ1
bmtub3duIHR5cGUiKQorCisgICAgICAgIGlmIGlzX29wdGlvbmFsOgorICAgICAgICAgICAgY3Bw
X25hbWUgPSAnT3B0aW9uYWw8JXM+JiYnICUgY3BwX25hbWUKKyAgICAgICAgcmV0dXJuIGNwcF9u
YW1lCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGNwcF90eXBlX2Zvcl9lbnVtKGVudW1f
dHlwZSwgbmFtZSk6CisgICAgICAgIGlmIGVudW1fdHlwZS5pc19hbm9ueW1vdXM6CisgICAgICAg
ICAgICByZXR1cm4gJ1Byb3RvY29sOjolczo6JXMnICUgKGVudW1fdHlwZS50eXBlX2RvbWFpbigp
LmRvbWFpbl9uYW1lLCB1Y2ZpcnN0KG5hbWUpKQorICAgICAgICByZXR1cm4gJ1Byb3RvY29sOjol
czo6JXMnICUgKGVudW1fdHlwZS50eXBlX2RvbWFpbigpLmRvbWFpbl9uYW1lLCBlbnVtX3R5cGUu
cmF3X25hbWUoKSkKIAogICAgIEBzdGF0aWNtZXRob2QKICAgICBkZWYgY3BwX25hbWVfZm9yX3By
aW1pdGl2ZV90eXBlKF90eXBlKToKICAgICAgICAgcmV0dXJuIF9QUklNSVRJVkVfVE9fQ1BQX05B
TUVfTUFQLmdldChfdHlwZS5yYXdfbmFtZSgpKQogCi0gICAgIyBEZWNpZGUgd2hldGhlciBjZXJ0
YWluIGhlbHBlcnMgYXJlIG5lY2Vzc2FyeSBpbiBhIHNpdHVhdGlvbi4KICAgICBAc3RhdGljbWV0
aG9kCi0gICAgZGVmIHNob3VsZF91c2Vfd3JhcHBlcl9mb3JfcmV0dXJuX3R5cGUoX3R5cGUpOgot
ICAgICAgICByZXR1cm4gbm90IGlzaW5zdGFuY2UoX3R5cGUsIChBcnJheVR5cGUsIE9iamVjdFR5
cGUpKQorICAgIGRlZiBzaG91bGRfbW92ZV9hcmd1bWVudChfdHlwZSwgaXNfb3B0aW9uYWwpOgor
ICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBBbGlhc2VkVHlwZSk6CisgICAgICAgICAgICBf
dHlwZSA9IF90eXBlLmFsaWFzZWRfdHlwZQorICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBF
bnVtVHlwZSk6CisgICAgICAgICAgICBfdHlwZSA9IF90eXBlLnByaW1pdGl2ZV90eXBlCisKKyAg
ICAgICAgaWYgX3R5cGUucmF3X25hbWUoKSA9PSAnc3RyaW5nJzoKKyAgICAgICAgICAgIHJldHVy
biBGYWxzZQorICAgICAgICByZXR1cm4gaXNfb3B0aW9uYWwgPT0gKF90eXBlLnJhd19uYW1lKCkg
aW4gWydib29sZWFuJywgJ2ludGVnZXInLCAnbnVtYmVyJ10pCiAKICAgICBAc3RhdGljbWV0aG9k
Ci0gICAgZGVmIHNob3VsZF91c2VfcmVmZXJlbmNlc19mb3JfdHlwZShfdHlwZSk6Ci0gICAgICAg
IHJldHVybiBpc2luc3RhbmNlKF90eXBlLCAoQXJyYXlUeXBlLCBPYmplY3RUeXBlKSkgb3IgKGlz
aW5zdGFuY2UoX3R5cGUsIChQcmltaXRpdmVUeXBlKSkgYW5kIF90eXBlLnF1YWxpZmllZF9uYW1l
KCkgaW4gWyJhbnkiLCAib2JqZWN0Il0pCisgICAgZGVmIHNob3VsZF9yZWxlYXNlX2FyZ3VtZW50
KF90eXBlLCBpc19vcHRpb25hbCk6CisgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEFsaWFz
ZWRUeXBlKToKKyAgICAgICAgICAgIF90eXBlID0gX3R5cGUuYWxpYXNlZF90eXBlCisgICAgICAg
IGlmIGlzaW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKToKKyAgICAgICAgICAgIF90eXBlID0gX3R5
cGUucHJpbWl0aXZlX3R5cGUKKworICAgICAgICBpZiBfdHlwZS5yYXdfbmFtZSgpID09ICdzdHJp
bmcnOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGlmIF90eXBlLnJhd19uYW1l
KCkgaW4gWydib29sZWFuJywgJ2ludGVnZXInLCAnbnVtYmVyJ106CisgICAgICAgICAgICByZXR1
cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIGlzX29wdGlvbmFsCiAKICAgICBAc3RhdGljbWV0aG9k
Ci0gICAgZGVmIHNob3VsZF9wYXNzX2J5X2NvcHlfZm9yX3JldHVybl90eXBlKF90eXBlKToKLSAg
ICAgICAgcmV0dXJuIGlzaW5zdGFuY2UoX3R5cGUsIChBcnJheVR5cGUsIE9iamVjdFR5cGUpKSBv
ciAoaXNpbnN0YW5jZShfdHlwZSwgKFByaW1pdGl2ZVR5cGUpKSBhbmQgX3R5cGUucXVhbGlmaWVk
X25hbWUoKSA9PSAib2JqZWN0IikKKyAgICBkZWYgc2hvdWxkX2RlcmVmZXJlbmNlX2FyZ3VtZW50
KF90eXBlLCBpc19vcHRpb25hbCk6CisgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEFsaWFz
ZWRUeXBlKToKKyAgICAgICAgICAgIF90eXBlID0gX3R5cGUuYWxpYXNlZF90eXBlCisgICAgICAg
IGlmIGlzaW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKToKKyAgICAgICAgICAgIF90eXBlID0gX3R5
cGUucHJpbWl0aXZlX3R5cGUKKworICAgICAgICBpZiBfdHlwZS5yYXdfbmFtZSgpID09ICdzdHJp
bmcnOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGlmIF90eXBlLnJhd19uYW1l
KCkgbm90IGluIFsnYm9vbGVhbicsICdpbnRlZ2VyJywgJ251bWJlciddOgorICAgICAgICAgICAg
cmV0dXJuIEZhbHNlCisgICAgICAgIHJldHVybiBpc19vcHRpb25hbApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vY3BwX2dlbmVyYXRv
cl90ZW1wbGF0ZXMucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Y29kZWdlbi9jcHBfZ2VuZXJhdG9yX3RlbXBsYXRlcy5weQppbmRleCAwODJiZTMzZjE1ZGUyNWJl
ODg5NTdjYjE0MjI5MzUyMDM2ZWUyMmNmLi43Yzg0ODU3ODZlOWNkY2YxNDJlOTM5NjJhZTJjZjRk
MTA3MWUxZDg3IDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvY29kZWdlbi9jcHBfZ2VuZXJhdG9yX3RlbXBsYXRlcy5weQorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9jcHBfZ2VuZXJhdG9yX3RlbXBs
YXRlcy5weQpAQCAtOTUsNyArOTUsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgIiIiJHtjbGFzc0FuZEV4
cG9ydE1hY3JvfSAke2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMg
U3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIgewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8
JHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUoQmFja2VuZERpc3BhdGNoZXIm
LCAke2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7Ci0gICAgdm9pZCBkaXNw
YXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmpl
Y3Q+JiYgbWVzc2FnZSkgZmluYWw7CisgICAgdm9pZCBkaXNwYXRjaChsb25nIHByb3RvY29sX2Nh
bGxJZCwgY29uc3QgU3RyaW5nJiBwcm90b2NvbF9tZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYg
cHJvdG9jb2xfbWVzc2FnZSkgZmluYWw7CiAke2NvbW1hbmREZWNsYXJhdGlvbnN9CiBwcml2YXRl
OgogICAgICR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYs
ICR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKQEAgLTExNCwzMiArMTE0
LDMwIEBAIHByaXZhdGU6CiAgICAgIiIiICAgICR7Y2xhc3NBbmRFeHBvcnRNYWNyb30gJHtjYWxs
YmFja05hbWV9IDogcHVibGljIEJhY2tlbmREaXNwYXRjaGVyOjpDYWxsYmFja0Jhc2UgewogICAg
IHB1YmxpYzoKICAgICAgICAgJHtjYWxsYmFja05hbWV9KFJlZjxCYWNrZW5kRGlzcGF0Y2hlcj4m
JiwgaW50IGlkKTsKLSAgICAgICAgdm9pZCBzZW5kU3VjY2Vzcygke291dFBhcmFtZXRlcnN9KTsK
KyAgICAgICAgdm9pZCBzZW5kU3VjY2Vzcygke3JldHVybnN9KTsKICAgICB9OwotICAgIHZpcnR1
YWwgdm9pZCAke2NvbW1hbmROYW1lfSgke2luUGFyYW1ldGVyc30pID0gMDsiIiIpCisgICAgdmly
dHVhbCB2b2lkICR7Y29tbWFuZE5hbWV9KCR7cGFyYW1ldGVyc30pID0gMDsiIiIpCiAKICAgICBC
YWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uU21hbGxTd2l0Y2ggPSAoCi0gICAgIiIidm9p
ZCAke2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElk
LCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKQorICAg
ICIiInZvaWQgJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHBy
b3RvY29sX2NhbGxJZCwgY29uc3QgU3RyaW5nJiBwcm90b2NvbF9tZXRob2QsIFJlZjxKU09OOjpP
YmplY3Q+JiYgcHJvdG9jb2xfbWVzc2FnZSkKIHsKICAgICBSZWY8JHtkb21haW5OYW1lfUJhY2tl
bmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKIAotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+
IHBhcmFtZXRlcnM7Ci0gICAgbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3MsIHBhcmFtZXRl
cnMpOworICAgIGF1dG8gcHJvdG9jb2xfcGFyYW1ldGVycyA9IHByb3RvY29sX21lc3NhZ2UtPmdl
dE9iamVjdCgicGFyYW1zIl9zKTsKIAogJHtkaXNwYXRjaENhc2VzfQogCi0gICAgbV9iYWNrZW5k
RGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9k
Tm90Rm91bmQsICInJHtkb21haW5OYW1lfS4iICsgbWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIp
OworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERp
c3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJyR7ZG9tYWluTmFtZX0uIiArIHByb3RvY29sX21l
dGhvZCArICInIHdhcyBub3QgZm91bmQiKTsKIH0iIiIpCiAKICAgICBCYWNrZW5kRGlzcGF0Y2hl
ckltcGxlbWVudGF0aW9uTGFyZ2VTd2l0Y2ggPSAoCi0iIiJ2b2lkICR7ZG9tYWluTmFtZX1CYWNr
ZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0
aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpCisiIiJ2b2lkICR7ZG9tYWluTmFtZX1C
YWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyBwcm90b2NvbF9jYWxsSWQsIGNvbnN0IFN0
cmluZyYgcHJvdG9jb2xfbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX21lc3Nh
Z2UpCiB7CiAgICAgUmVmPCR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgq
dGhpcyk7CiAKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzOwotICAgIG1lc3Nh
Z2UtPmdldE9iamVjdCgicGFyYW1zIl9zLCBwYXJhbWV0ZXJzKTsKKyAgICBhdXRvIHByb3RvY29s
X3BhcmFtZXRlcnMgPSBwcm90b2NvbF9tZXNzYWdlLT5nZXRPYmplY3QoInBhcmFtcyJfcyk7CiAK
LSAgICB1c2luZyBDYWxsSGFuZGxlciA9IHZvaWQgKCR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0
Y2hlcjo6KikobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSk7
CisgICAgdXNpbmcgQ2FsbEhhbmRsZXIgPSB2b2lkICgke2RvbWFpbk5hbWV9QmFja2VuZERpc3Bh
dGNoZXI6OiopKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBy
b3RvY29sX21lc3NhZ2UpOwogICAgIHVzaW5nIERpc3BhdGNoTWFwID0gSGFzaE1hcDxTdHJpbmcs
IENhbGxIYW5kbGVyPjsKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8RGlzcGF0Y2hNYXA+IGRp
c3BhdGNoTWFwOwogICAgIGlmIChkaXNwYXRjaE1hcC5nZXQoKS5pc0VtcHR5KCkpIHsKQEAgLTE1
NCwxMyArMTUyLDEzIEBAICR7ZGlzcGF0Y2hDYXNlc30KICAgICAgICAgICAgIGRpc3BhdGNoTWFw
LmdldCgpLmFkZChjb21tYW5kc1tpXS5uYW1lLCBjb21tYW5kc1tpXS5oYW5kbGVyKTsKICAgICB9
CiAKLSAgICBhdXRvIGZpbmRSZXN1bHQgPSBkaXNwYXRjaE1hcC5nZXQoKS5maW5kKG1ldGhvZCk7
CisgICAgYXV0byBmaW5kUmVzdWx0ID0gZGlzcGF0Y2hNYXAuZ2V0KCkuZmluZChwcm90b2NvbF9t
ZXRob2QpOwogICAgIGlmIChmaW5kUmVzdWx0ID09IGRpc3BhdGNoTWFwLmdldCgpLmVuZCgpKSB7
Ci0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2Vu
ZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJyR7ZG9tYWluTmFtZX0uIiArIG1ldGhvZCAr
ICInIHdhcyBub3QgZm91bmQiKTsKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0
UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInJHtkb21h
aW5OYW1lfS4iICsgcHJvdG9jb2xfbWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgKCgqdGhpcykuKmZpbmRSZXN1bHQtPnZhbHVlKShyZXF1
ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykpOworICAgICgoKnRoaXMpLipmaW5kUmVzdWx0LT52
YWx1ZSkocHJvdG9jb2xfY2FsbElkLCBXVEZNb3ZlKHByb3RvY29sX3BhcmFtZXRlcnMpKTsKIH0i
IiIpCiAKICAgICBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uRG9tYWluQ29uc3RydWN0
b3IgPSAoCkBAIC0xNzcsNyArMTc1LDcgQEAgJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVy
Ojoke2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXIKIH0iIiIp
CiAKICAgICBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uUHJlcGFyZUNvbW1hbmRBcmd1
bWVudHMgPSAoCi0iIiIke2luUGFyYW1ldGVyRGVjbGFyYXRpb25zfQorIiIiJHtwYXJhbWV0ZXJE
ZWNsYXJhdGlvbnN9CiAgICAgaWYgKG1fYmFja2VuZERpc3BhdGNoZXItPmhhc1Byb3RvY29sRXJy
b3JzKCkpIHsKICAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJv
cihCYWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFtcywgIlNvbWUgYXJndW1lbnRzIG9mIG1l
dGhvZCBcJyR7ZG9tYWluTmFtZX0uJHtjb21tYW5kTmFtZX1cJyBjYW4ndCBiZSBwcm9jZXNzZWQi
X3MpOwogICAgICAgICByZXR1cm47CkBAIC0xODcsMTEgKzE4NSwxMSBAQCAke2RvbWFpbk5hbWV9
QmFja2VuZERpc3BhdGNoZXI6OiR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5k
RGlzcGF0Y2hlcgogICAgIEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25Bc3luY0NvbW1h
bmQgPSAoCiAiIiIke2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjoke2NhbGxi
YWNrTmFtZX06OiR7Y2FsbGJhY2tOYW1lfShSZWY8QmFja2VuZERpc3BhdGNoZXI+JiYgYmFja2Vu
ZERpc3BhdGNoZXIsIGludCBpZCkgOiBCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlKFdU
Rk1vdmUoYmFja2VuZERpc3BhdGNoZXIpLCBpZCkgeyB9CiAKLXZvaWQgJHtkb21haW5OYW1lfUJh
Y2tlbmREaXNwYXRjaGVySGFuZGxlcjo6JHtjYWxsYmFja05hbWV9OjpzZW5kU3VjY2Vzcygke2Zv
cm1hbFBhcmFtZXRlcnN9KQordm9pZCAke2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyOjoke2NhbGxiYWNrTmFtZX06OnNlbmRTdWNjZXNzKCR7Y2FsbGJhY2tQYXJhbWV0ZXJzfSkK
IHsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3Jl
YXRlKCk7Ci0ke291dFBhcmFtZXRlckFzc2lnbm1lbnRzfQotICAgIENhbGxiYWNrQmFzZTo6c2Vu
ZFN1Y2Nlc3MoV1RGTW92ZShqc29uTWVzc2FnZSkpOworICAgIGF1dG8gcHJvdG9jb2xfanNvbk1l
c3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworJHtyZXR1cm5Bc3NpZ25tZW50c30KKyAg
ICBDYWxsYmFja0Jhc2U6OnNlbmRTdWNjZXNzKFdURk1vdmUocHJvdG9jb2xfanNvbk1lc3NhZ2Up
KTsKIH0iIiIpCiAKICAgICBGcm9udGVuZERpc3BhdGNoZXJEb21haW5EaXNwYXRjaGVyRGVjbGFy
YXRpb24gPSAoCkBAIC0yNDYsMTMgKzI0NCwxMSBAQCAke2NvbnN0cnVjdG9yRXhhbXBsZX0KICAg
ICB9IiIiKQogCiAgICAgUHJvdG9jb2xPYmplY3RSdW50aW1lQ2FzdCA9ICgKLSIiIlJlZlB0cjwk
e29iamVjdFR5cGV9PiBCaW5kaW5nVHJhaXRzPCR7b2JqZWN0VHlwZX0+OjpydW50aW1lQ2FzdChS
ZWZQdHI8SlNPTjo6VmFsdWU+JiYgdmFsdWUpCisiIiJSZWY8JHtvYmplY3RUeXBlfT4gQmluZGlu
Z1RyYWl0czwke29iamVjdFR5cGV9Pjo6cnVudGltZUNhc3QoUmVmPEpTT046OlZhbHVlPiYmIHZh
bHVlKQogewotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHJlc3VsdDsKLSAgICBib29sIGNhc3RT
dWNjZWVkZWQgPSB2YWx1ZS0+YXNPYmplY3QocmVzdWx0KTsKLSAgICBBU1NFUlRfVU5VU0VEKGNh
c3RTdWNjZWVkZWQsIGNhc3RTdWNjZWVkZWQpOworICAgIGF1dG8gcmVzdWx0ID0gdmFsdWUtPmFz
T2JqZWN0KCk7CiAgICAgQmluZGluZ1RyYWl0czwke29iamVjdFR5cGV9Pjo6YXNzZXJ0VmFsdWVI
YXNFeHBlY3RlZFR5cGUocmVzdWx0LmdldCgpKTsKICAgICBDT01QSUxFX0FTU0VSVChzaXplb2Yo
JHtvYmplY3RUeXBlfSkgPT0gc2l6ZW9mKEpTT046Ok9iamVjdEJhc2UpLCB0eXBlX2Nhc3RfcHJv
YmxlbSk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PCR7b2JqZWN0VHlwZX0qPihzdGF0aWNfY2Fz
dDxKU09OOjpPYmplY3RCYXNlKj4ocmVzdWx0LmdldCgpKSk7CisgICAgcmV0dXJuIHN0YXRpY19y
ZWZlcmVuY2VfY2FzdDwke29iamVjdFR5cGV9PihzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SlNPTjo6
T2JqZWN0QmFzZT4ocmVzdWx0LnJlbGVhc2VOb25OdWxsKCkpKTsKIH0KICIiIikKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVy
YXRlX2NwcF9hbHRlcm5hdGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weSBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9hbHRl
cm5hdGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weQppbmRleCBlMWE2NjFiYTM3OWNkZWE0
MDY0YzZmNzdjNGVmY2IxMTYyYWNlZmMwLi5iOWM2NjE3NDkyMjQ0ZDAwZTBhNzQ1ZDc5NGJhYjY3
MTAyZTc0NGM1IDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfYWx0ZXJuYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9o
ZWFkZXIucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2Nv
ZGVnZW4vZ2VuZXJhdGVfY3BwX2FsdGVybmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5
CkBAIC0zMyw5ICszMywxMSBAQCBmcm9tIHN0cmluZyBpbXBvcnQgVGVtcGxhdGUKIHRyeToKICAg
ICBmcm9tIC5jcHBfZ2VuZXJhdG9yIGltcG9ydCBDcHBHZW5lcmF0b3IKICAgICBmcm9tIC5jcHBf
Z2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgQ3BwR2VuZXJhdG9yVGVtcGxhdGVzIGFzIENwcFRl
bXBsYXRlcworICAgIGZyb20gLm1vZGVscyBpbXBvcnQgRW51bVR5cGUsIEFsaWFzZWRUeXBlCiBl
eGNlcHQgVmFsdWVFcnJvcjoKICAgICBmcm9tIGNwcF9nZW5lcmF0b3IgaW1wb3J0IENwcEdlbmVy
YXRvcgogICAgIGZyb20gY3BwX2dlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IENwcEdlbmVyYXRv
clRlbXBsYXRlcyBhcyBDcHBUZW1wbGF0ZXMKKyAgICBmcm9tIG1vZGVscyBpbXBvcnQgRW51bVR5
cGUsIEFsaWFzZWRUeXBlCiAKIGxvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdnbG9iYWwnKQogCkBA
IC02NSw3ICs2Nyw3IEBAIGNsYXNzIENwcEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVySGVhZGVy
R2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgZGVmIF9nZW5lcmF0ZV9zZWNvbmRhcnlfaGVh
ZGVyX2luY2x1ZGVzKHNlbGYpOgogICAgICAgICB0YXJnZXRfZnJhbWV3b3JrX25hbWUgPSBzZWxm
Lm1vZGVsKCkuZnJhbWV3b3JrLm5hbWUKICAgICAgICAgaGVhZGVyX2luY2x1ZGVzID0gWwotICAg
ICAgICAgICAgKFt0YXJnZXRfZnJhbWV3b3JrX25hbWVdLCAodGFyZ2V0X2ZyYW1ld29ya19uYW1l
LCAiJXNQcm90b2NvbFR5cGVzLmgiICUgc2VsZi5wcm90b2NvbF9uYW1lKCkpKSwKKyAgICAgICAg
ICAgIChbdGFyZ2V0X2ZyYW1ld29ya19uYW1lXSwgKHRhcmdldF9mcmFtZXdvcmtfbmFtZSwgIiVz
UHJvdG9jb2xPYmplY3RzLmgiICUgc2VsZi5wcm90b2NvbF9uYW1lKCkpKSwKICAgICAgICAgICAg
IChbIkphdmFTY3JpcHRDb3JlIl0sICgiSmF2YVNjcmlwdENvcmUiLCAiaW5zcGVjdG9yL0luc3Bl
Y3RvckZyb250ZW5kUm91dGVyLmgiKSksCiAgICAgICAgICAgICAoWyJKYXZhU2NyaXB0Q29yZSJd
LCAoIkphdmFTY3JpcHRDb3JlIiwgImluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
ci5oIikpLAogICAgICAgICBdCkBAIC05MSw5ICs5MywxOSBAQCBjbGFzcyBDcHBBbHRlcm5hdGVC
YWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogCiAgICAgZGVm
IF9nZW5lcmF0ZV9oYW5kbGVyX2RlY2xhcmF0aW9uX2Zvcl9jb21tYW5kKHNlbGYsIGNvbW1hbmQp
OgogICAgICAgICBsaW5lcyA9IFtdCi0gICAgICAgIHBhcmFtZXRlcnMgPSBbJ2xvbmcgY2FsbElk
J10KLSAgICAgICAgZm9yIF9wYXJhbWV0ZXIgaW4gY29tbWFuZC5jYWxsX3BhcmFtZXRlcnM6Ci0g
ICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZCgnJXMgaW5fJXMnICUgKENwcEdlbmVyYXRvci5j
cHBfdHlwZV9mb3JfdW5jaGVja2VkX2Zvcm1hbF9pbl9wYXJhbWV0ZXIoX3BhcmFtZXRlciksIF9w
YXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpKQorICAgICAgICBwYXJhbWV0ZXJzID0gWydsb25nIHBy
b3RvY29sX2NhbGxJZCddCisgICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gY29tbWFuZC5jYWxsX3Bh
cmFtZXRlcnM6CisgICAgICAgICAgICBwYXJhbWV0ZXJfdHlwZSA9IHBhcmFtZXRlci50eXBlCisg
ICAgICAgICAgICBpZiBpc2luc3RhbmNlKHBhcmFtZXRlcl90eXBlLCBBbGlhc2VkVHlwZSk6Cisg
ICAgICAgICAgICAgICAgcGFyYW1ldGVyX3R5cGUgPSBwYXJhbWV0ZXJfdHlwZS5hbGlhc2VkX3R5
cGUKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UocGFyYW1ldGVyX3R5cGUsIEVudW1UeXBlKToK
KyAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfdHlwZSA9IHBhcmFtZXRlcl90eXBlLnByaW1pdGl2
ZV90eXBlCisKKyAgICAgICAgICAgIHBhcmFtZXRlcl9uYW1lID0gcGFyYW1ldGVyLnBhcmFtZXRl
cl9uYW1lCisgICAgICAgICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6CisgICAgICAgICAg
ICAgICAgcGFyYW1ldGVyX25hbWUgPSAnb3B0XycgKyBwYXJhbWV0ZXJfbmFtZQorCisgICAgICAg
ICAgICBwYXJhbWV0ZXJzLmFwcGVuZCgnJXMgJXMnICUgKENwcEdlbmVyYXRvci5jcHBfdHlwZV9m
b3JfY29tbWFuZF9wYXJhbWV0ZXIocGFyYW1ldGVyX3R5cGUsIHBhcmFtZXRlci5pc19vcHRpb25h
bCksIHBhcmFtZXRlcl9uYW1lKSkKIAogICAgICAgICBjb21tYW5kX2FyZ3MgPSB7CiAgICAgICAg
ICAgICAnY29tbWFuZE5hbWUnOiBjb21tYW5kLmNvbW1hbmRfbmFtZSwKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2Nw
cF9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9o
ZWFkZXIucHkKaW5kZXggMTBkOGYxNGJkNWZlYmViOGExYjA2YjAxNzY3NWExNDNhOGQ0ZjczOC4u
NmQ5ZGQyYTQ4ZGMzNDY5MjA3MWMxZGJjMWI4YjNiNGU3YzczYTkxNSAxMDA3NTUKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3Bw
X2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hl
cl9oZWFkZXIucHkKQEAgLTU1LDEwICs1NSw5IEBAIGNsYXNzIENwcEJhY2tlbmREaXNwYXRjaGVy
SGVhZGVyR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAgIHJldHVybiBbZG9tYWluIGZv
ciBkb21haW4gaW4gR2VuZXJhdG9yLmRvbWFpbnNfdG9fZ2VuZXJhdGUoc2VsZikgaWYgbGVuKHNl
bGYuY29tbWFuZHNfZm9yX2RvbWFpbihkb21haW4pKSA+IDBdCiAKICAgICBkZWYgZ2VuZXJhdGVf
b3V0cHV0KHNlbGYpOgotICAgICAgICB0eXBlZGVmcyA9IFsoJ1N0cmluZycsICdFcnJvclN0cmlu
ZycpXQogICAgICAgICBoZWFkZXJfYXJncyA9IHsKICAgICAgICAgICAgICdpbmNsdWRlcyc6IHNl
bGYuX2dlbmVyYXRlX3NlY29uZGFyeV9oZWFkZXJfaW5jbHVkZXMoKSwKLSAgICAgICAgICAgICd0
eXBlZGVmcyc6ICdcbicuam9pbihbJ3R5cGVkZWYgJXMgJXM7JyAlIHR5cGVkZWYgZm9yIHR5cGVk
ZWYgaW4gdHlwZWRlZnNdKSwKKyAgICAgICAgICAgICd0eXBlZGVmcyc6ICcnLAogICAgICAgICB9
CiAKICAgICAgICAgZG9tYWlucyA9IHNlbGYuZG9tYWluc190b19nZW5lcmF0ZSgpCkBAIC03OSw5
ICs3OCwxMSBAQCBjbGFzcyBDcHBCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvcihDcHBH
ZW5lcmF0b3IpOgogICAgICAgICBoZWFkZXJfaW5jbHVkZXMgPSBbCiAgICAgICAgICAgICAoWyJK
YXZhU2NyaXB0Q29yZSIsICJXZWJLaXQiXSwgKHNlbGYubW9kZWwoKS5mcmFtZXdvcmsubmFtZSwg
IiVzUHJvdG9jb2xPYmplY3RzLmgiICUgc2VsZi5wcm90b2NvbF9uYW1lKCkpKSwKICAgICAgICAg
ICAgIChbIkphdmFTY3JpcHRDb3JlIiwgIldlYktpdCJdLCAoIkphdmFTY3JpcHRDb3JlIiwgImlu
c3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oIikpLAotICAgICAgICAgICAgKFsi
SmF2YVNjcmlwdENvcmUiLCAiV2ViS2l0Il0sICgiV1RGIiwgInd0Zi90ZXh0L1dURlN0cmluZy5o
IikpCisgICAgICAgICAgICAoWyJKYXZhU2NyaXB0Q29yZSIsICJXZWJLaXQiXSwgKCJXVEYiLCAi
d3RmL0V4cGVjdGVkLmgiKSksCisgICAgICAgICAgICAoWyJKYXZhU2NyaXB0Q29yZSIsICJXZWJL
aXQiXSwgKCJXVEYiLCAid3RmL09wdGlvbmFsLmgiKSksCisgICAgICAgICAgICAoWyJKYXZhU2Ny
aXB0Q29yZSIsICJXZWJLaXQiXSwgKCJXVEYiLCAid3RmL3RleHQvV1RGU3RyaW5nLmgiKSksCisg
ICAgICAgICAgICAoWyJKYXZhU2NyaXB0Q29yZSIsICJXZWJLaXQiXSwgKCJzdGQiLCAidHVwbGUi
KSksCiAgICAgICAgIF0KLQogICAgICAgICByZXR1cm4gJ1xuJy5qb2luKHNlbGYuZ2VuZXJhdGVf
aW5jbHVkZXNfZnJvbV9lbnRyaWVzKGhlYWRlcl9pbmNsdWRlcykpCiAKICAgICBkZWYgX2dlbmVy
YXRlX2FsdGVybmF0ZV9oYW5kbGVyX2ZvcndhcmRfZGVjbGFyYXRpb25zX2Zvcl9kb21haW5zKHNl
bGYsIGRvbWFpbnMpOgpAQCAtMTAxLDExICsxMDIsOSBAQCBjbGFzcyBDcHBCYWNrZW5kRGlzcGF0
Y2hlckhlYWRlckdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAgICBpZiBleHBvcnRNYWNy
byBpcyBub3QgTm9uZToKICAgICAgICAgICAgIGNsYXNzQ29tcG9uZW50cy5hcHBlbmQoZXhwb3J0
TWFjcm8pCiAKLSAgICAgICAgdXNlZF9lbnVtX25hbWVzID0gc2V0KCkKLQogICAgICAgICBjb21t
YW5kX2RlY2xhcmF0aW9ucyA9IFtdCiAgICAgICAgIGZvciBjb21tYW5kIGluIHNlbGYuY29tbWFu
ZHNfZm9yX2RvbWFpbihkb21haW4pOgotICAgICAgICAgICAgY29tbWFuZF9kZWNsYXJhdGlvbnMu
YXBwZW5kKHNlbGYuX2dlbmVyYXRlX2hhbmRsZXJfZGVjbGFyYXRpb25fZm9yX2NvbW1hbmQoY29t
bWFuZCwgdXNlZF9lbnVtX25hbWVzKSkKKyAgICAgICAgICAgIGNvbW1hbmRfZGVjbGFyYXRpb25z
LmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9oYW5kbGVyX2RlY2xhcmF0aW9uX2Zvcl9jb21tYW5kKGNv
bW1hbmQpKQogCiAgICAgICAgIGhhbmRsZXJfYXJncyA9IHsKICAgICAgICAgICAgICdjbGFzc0Fu
ZEV4cG9ydE1hY3JvJzogIiAiLmpvaW4oY2xhc3NDb21wb25lbnRzKSwKQEAgLTExNSw2OSArMTE0
LDU2IEBAIGNsYXNzIENwcEJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yKENwcEdlbmVy
YXRvcik6CiAKICAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRp
b24oZG9tYWluLmNvbmRpdGlvbiwgVGVtcGxhdGUoQ3BwVGVtcGxhdGVzLkJhY2tlbmREaXNwYXRj
aGVySGVhZGVyRG9tYWluSGFuZGxlckRlY2xhcmF0aW9uKS5zdWJzdGl0dXRlKE5vbmUsICoqaGFu
ZGxlcl9hcmdzKSkKIAotICAgIGRlZiBfZ2VuZXJhdGVfYW5vbnltb3VzX2VudW1fZm9yX3BhcmFt
ZXRlcihzZWxmLCBwYXJhbWV0ZXIsIGNvbW1hbmQpOgotICAgICAgICBlbnVtX2FyZ3MgPSB7Ci0g
ICAgICAgICAgICAncGFyYW1ldGVyTmFtZSc6IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwKLSAg
ICAgICAgICAgICdjb21tYW5kTmFtZSc6IGNvbW1hbmQuY29tbWFuZF9uYW1lCi0gICAgICAgIH0K
LQotICAgICAgICBsaW5lcyA9IFtdCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIC8vIE5hbWVk
IGFmdGVyIHBhcmFtZXRlciBcJyUocGFyYW1ldGVyTmFtZSlzXCcgd2hpbGUgZ2VuZXJhdGluZyBj
b21tYW5kL2V2ZW50ICUoY29tbWFuZE5hbWUpcy4nICUgZW51bV9hcmdzKQotICAgICAgICBsaW5l
cy5hcHBlbmQoJyAgICBlbnVtIGNsYXNzICVzIHsnICUgdWNmaXJzdChwYXJhbWV0ZXIucGFyYW1l
dGVyX25hbWUpKQotICAgICAgICBmb3IgZW51bV92YWx1ZSBpbiBwYXJhbWV0ZXIudHlwZS5lbnVt
X3ZhbHVlcygpOgotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgICVzID0gJWQsJyAl
IChHZW5lcmF0b3Iuc3R5bGl6ZWRfbmFtZV9mb3JfZW51bV92YWx1ZShlbnVtX3ZhbHVlKSwgc2Vs
Zi5lbmNvZGluZ19mb3JfZW51bV92YWx1ZShlbnVtX3ZhbHVlKSkpCi0gICAgICAgIGxpbmVzLmFw
cGVuZCgnICAgIH07IC8vIGVudW0gY2xhc3MgJXMnICUgdWNmaXJzdChwYXJhbWV0ZXIucGFyYW1l
dGVyX25hbWUpKQotICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQotCi0gICAgZGVmIF9n
ZW5lcmF0ZV9oYW5kbGVyX2RlY2xhcmF0aW9uX2Zvcl9jb21tYW5kKHNlbGYsIGNvbW1hbmQsIHVz
ZWRfZW51bV9uYW1lcyk6CisgICAgZGVmIF9nZW5lcmF0ZV9oYW5kbGVyX2RlY2xhcmF0aW9uX2Zv
cl9jb21tYW5kKHNlbGYsIGNvbW1hbmQpOgogICAgICAgICBpZiBjb21tYW5kLmlzX2FzeW5jOgog
ICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2dlbmVyYXRlX2FzeW5jX2hhbmRsZXJfZGVjbGFyYXRp
b25fZm9yX2NvbW1hbmQoY29tbWFuZCkKIAogICAgICAgICBsaW5lcyA9IFtdCi0gICAgICAgIHBh
cmFtZXRlcnMgPSBbJ0Vycm9yU3RyaW5nJiddCi0gICAgICAgIGZvciBfcGFyYW1ldGVyIGluIGNv
bW1hbmQuY2FsbF9wYXJhbWV0ZXJzOgotICAgICAgICAgICAgcGFyYW1ldGVyX25hbWUgPSAnaW5f
JyArIF9wYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUKLSAgICAgICAgICAgIGlmIF9wYXJhbWV0ZXIu
aXNfb3B0aW9uYWw6CisKKyAgICAgICAgcGFyYW1ldGVycyA9IFtdCisgICAgICAgIGZvciBwYXJh
bWV0ZXIgaW4gY29tbWFuZC5jYWxsX3BhcmFtZXRlcnM6CisgICAgICAgICAgICBwYXJhbWV0ZXJf
bmFtZSA9IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZQorICAgICAgICAgICAgaWYgcGFyYW1ldGVy
LmlzX29wdGlvbmFsOgogICAgICAgICAgICAgICAgIHBhcmFtZXRlcl9uYW1lID0gJ29wdF8nICsg
cGFyYW1ldGVyX25hbWUKKyAgICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKCIlcyAlcyIgJSAo
Q3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl9jb21tYW5kX3BhcmFtZXRlcihwYXJhbWV0ZXIudHlw
ZSwgcGFyYW1ldGVyLmlzX29wdGlvbmFsKSwgcGFyYW1ldGVyX25hbWUpKQogCi0gICAgICAgICAg
ICBwYXJhbWV0ZXJzLmFwcGVuZCgiJXMgJXMiICUgKENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3Jf
dW5jaGVja2VkX2Zvcm1hbF9pbl9wYXJhbWV0ZXIoX3BhcmFtZXRlciksIHBhcmFtZXRlcl9uYW1l
KSkKLQotICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShfcGFyYW1ldGVyLnR5cGUsIEVudW1UeXBl
KSBhbmQgX3BhcmFtZXRlci50eXBlLmlzX2Fub255bW91cyBhbmQgX3BhcmFtZXRlci5wYXJhbWV0
ZXJfbmFtZSBub3QgaW4gdXNlZF9lbnVtX25hbWVzOgotICAgICAgICAgICAgICAgIGxpbmVzLmFw
cGVuZChzZWxmLl9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9mb3JfcGFyYW1ldGVyKF9wYXJhbWV0
ZXIsIGNvbW1hbmQpKQotICAgICAgICAgICAgICAgIHVzZWRfZW51bV9uYW1lcy5hZGQoX3BhcmFt
ZXRlci5wYXJhbWV0ZXJfbmFtZSkKLQotICAgICAgICBmb3IgX3BhcmFtZXRlciBpbiBjb21tYW5k
LnJldHVybl9wYXJhbWV0ZXJzOgotICAgICAgICAgICAgcGFyYW1ldGVyX25hbWUgPSAnb3V0Xycg
KyBfcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lCi0gICAgICAgICAgICBpZiBfcGFyYW1ldGVyLmlz
X29wdGlvbmFsOgorICAgICAgICByZXR1cm5zID0gW10KKyAgICAgICAgZm9yIHBhcmFtZXRlciBp
biBjb21tYW5kLnJldHVybl9wYXJhbWV0ZXJzOgorICAgICAgICAgICAgcGFyYW1ldGVyX25hbWUg
PSBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUKKyAgICAgICAgICAgIGlmIHBhcmFtZXRlci5pc19v
cHRpb25hbDoKICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfbmFtZSA9ICdvcHRfJyArIHBhcmFt
ZXRlcl9uYW1lCi0gICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZCgiJXMgJXMiICUgKENwcEdl
bmVyYXRvci5jcHBfdHlwZV9mb3JfZm9ybWFsX291dF9wYXJhbWV0ZXIoX3BhcmFtZXRlciksIHBh
cmFtZXRlcl9uYW1lKSkKLQotICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShfcGFyYW1ldGVyLnR5
cGUsIEVudW1UeXBlKSBhbmQgX3BhcmFtZXRlci50eXBlLmlzX2Fub255bW91cyBhbmQgX3BhcmFt
ZXRlci5wYXJhbWV0ZXJfbmFtZSBub3QgaW4gdXNlZF9lbnVtX25hbWVzOgotICAgICAgICAgICAg
ICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9mb3JfcGFyYW1l
dGVyKF9wYXJhbWV0ZXIsIGNvbW1hbmQpKQotICAgICAgICAgICAgICAgIHVzZWRfZW51bV9uYW1l
cy5hZGQoX3BhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkKKyAgICAgICAgICAgIHJldHVybnMuYXBw
ZW5kKCclcyAvKiAlcyAqLycgJSAoQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl9jb21tYW5kX3Jl
dHVybl9kZWNsYXJhdGlvbihwYXJhbWV0ZXIudHlwZSwgcGFyYW1ldGVyLmlzX29wdGlvbmFsKSwg
cGFyYW1ldGVyX25hbWUpKQogCiAgICAgICAgIGNvbW1hbmRfYXJncyA9IHsKICAgICAgICAgICAg
ICdjb21tYW5kTmFtZSc6IGNvbW1hbmQuY29tbWFuZF9uYW1lLAotICAgICAgICAgICAgJ3BhcmFt
ZXRlcnMnOiAiLCAiLmpvaW4ocGFyYW1ldGVycykKKyAgICAgICAgICAgICdwYXJhbWV0ZXJzJzog
IiwgIi5qb2luKHBhcmFtZXRlcnMpLAorICAgICAgICAgICAgJ3JldHVybnMnOiAiLCAiLmpvaW4o
cmV0dXJucyksCiAgICAgICAgIH0KLSAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgdmlydHVhbCB2
b2lkICUoY29tbWFuZE5hbWUpcyglKHBhcmFtZXRlcnMpcykgPSAwOycgJSBjb21tYW5kX2FyZ3Mp
CisgICAgICAgIGlmIGxlbihyZXR1cm5zKSA9PSAxOgorICAgICAgICAgICAgbGluZXMuYXBwZW5k
KCcgICAgdmlydHVhbCBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjwlKHJldHVybnMpcz4gJShjb21t
YW5kTmFtZSlzKCUocGFyYW1ldGVycylzKSA9IDA7JyAlIGNvbW1hbmRfYXJncykKKyAgICAgICAg
ZWxpZiBsZW4ocmV0dXJucykgPiAxOgorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgdmly
dHVhbCBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxzdGQ6OnR1cGxlPCUocmV0dXJucylzPj4gJShj
b21tYW5kTmFtZSlzKCUocGFyYW1ldGVycylzKSA9IDA7JyAlIGNvbW1hbmRfYXJncykKKyAgICAg
ICAgZWxzZToKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIHZpcnR1YWwgUHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8dm9pZD4gJShjb21tYW5kTmFtZSlzKCUocGFyYW1ldGVycylzKSA9IDA7
JyAlIGNvbW1hbmRfYXJncykKICAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zv
cl9jb25kaXRpb24oY29tbWFuZC5jb25kaXRpb24sICdcbicuam9pbihsaW5lcykpCiAKICAgICBk
ZWYgX2dlbmVyYXRlX2FzeW5jX2hhbmRsZXJfZGVjbGFyYXRpb25fZm9yX2NvbW1hbmQoc2VsZiwg
Y29tbWFuZCk6CiAgICAgICAgIGNhbGxiYWNrTmFtZSA9ICIlc0NhbGxiYWNrIiAlIHVjZmlyc3Qo
Y29tbWFuZC5jb21tYW5kX25hbWUpCiAKLSAgICAgICAgaW5fcGFyYW1ldGVycyA9IFtdCi0gICAg
ICAgIGZvciBfcGFyYW1ldGVyIGluIGNvbW1hbmQuY2FsbF9wYXJhbWV0ZXJzOgotICAgICAgICAg
ICAgcGFyYW1ldGVyX25hbWUgPSAnaW5fJyArIF9wYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUKLSAg
ICAgICAgICAgIGlmIF9wYXJhbWV0ZXIuaXNfb3B0aW9uYWw6CisgICAgICAgIHBhcmFtZXRlcnMg
PSBbXQorICAgICAgICBmb3IgcGFyYW1ldGVyIGluIGNvbW1hbmQuY2FsbF9wYXJhbWV0ZXJzOgor
ICAgICAgICAgICAgcGFyYW1ldGVyX25hbWUgPSBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUKKyAg
ICAgICAgICAgIGlmIHBhcmFtZXRlci5pc19vcHRpb25hbDoKICAgICAgICAgICAgICAgICBwYXJh
bWV0ZXJfbmFtZSA9ICdvcHRfJyArIHBhcmFtZXRlcl9uYW1lCisgICAgICAgICAgICBwYXJhbWV0
ZXJzLmFwcGVuZCgiJXMgJXMiICUgKENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3JfY29tbWFuZF9w
YXJhbWV0ZXIocGFyYW1ldGVyLnR5cGUsIHBhcmFtZXRlci5pc19vcHRpb25hbCksIHBhcmFtZXRl
cl9uYW1lKSkKKyAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoIlJlZjwlcz4mJiIgJSBjYWxsYmFj
a05hbWUpCiAKLSAgICAgICAgICAgIGluX3BhcmFtZXRlcnMuYXBwZW5kKCIlcyAlcyIgJSAoQ3Bw
R2VuZXJhdG9yLmNwcF90eXBlX2Zvcl91bmNoZWNrZWRfZm9ybWFsX2luX3BhcmFtZXRlcihfcGFy
YW1ldGVyKSwgcGFyYW1ldGVyX25hbWUpKQotICAgICAgICBpbl9wYXJhbWV0ZXJzLmFwcGVuZCgi
UmVmPCVzPiYmIGNhbGxiYWNrIiAlIGNhbGxiYWNrTmFtZSkKLQotICAgICAgICBvdXRfcGFyYW1l
dGVycyA9IFtdCi0gICAgICAgIGZvciBfcGFyYW1ldGVyIGluIGNvbW1hbmQucmV0dXJuX3BhcmFt
ZXRlcnM6Ci0gICAgICAgICAgICBvdXRfcGFyYW1ldGVycy5hcHBlbmQoIiVzICVzIiAlIChDcHBH
ZW5lcmF0b3IuY3BwX3R5cGVfZm9yX2Zvcm1hbF9hc3luY19wYXJhbWV0ZXIoX3BhcmFtZXRlciks
IF9wYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpKQorICAgICAgICByZXR1cm5zID0gW10KKyAgICAg
ICAgZm9yIHBhcmFtZXRlciBpbiBjb21tYW5kLnJldHVybl9wYXJhbWV0ZXJzOgorICAgICAgICAg
ICAgcGFyYW1ldGVyX25hbWUgPSBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUKKyAgICAgICAgICAg
IGlmIHBhcmFtZXRlci5pc19vcHRpb25hbDoKKyAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfbmFt
ZSA9ICdvcHRfJyArIHBhcmFtZXRlcl9uYW1lCisgICAgICAgICAgICByZXR1cm5zLmFwcGVuZCgi
JXMgJXMiICUgKENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3JfY29tbWFuZF9yZXR1cm5fYXJndW1l
bnQocGFyYW1ldGVyLnR5cGUsIHBhcmFtZXRlci5pc19vcHRpb25hbCksIHBhcmFtZXRlcl9uYW1l
KSkKIAogICAgICAgICBjbGFzc19jb21wb25lbnRzID0gWydjbGFzcyddCiAgICAgICAgIGV4cG9y
dF9tYWNybyA9IHNlbGYubW9kZWwoKS5mcmFtZXdvcmsuc2V0dGluZygnZXhwb3J0X21hY3JvJywg
Tm9uZSkKQEAgLTE4OCw4ICsxNzQsOCBAQCBjbGFzcyBDcHBCYWNrZW5kRGlzcGF0Y2hlckhlYWRl
ckdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAgICAgICAgJ2NsYXNzQW5kRXhwb3J0TWFj
cm8nOiAnICcuam9pbihjbGFzc19jb21wb25lbnRzKSwKICAgICAgICAgICAgICdjYWxsYmFja05h
bWUnOiBjYWxsYmFja05hbWUsCiAgICAgICAgICAgICAnY29tbWFuZE5hbWUnOiBjb21tYW5kLmNv
bW1hbmRfbmFtZSwKLSAgICAgICAgICAgICdpblBhcmFtZXRlcnMnOiAiLCAiLmpvaW4oaW5fcGFy
YW1ldGVycyksCi0gICAgICAgICAgICAnb3V0UGFyYW1ldGVycyc6ICIsICIuam9pbihvdXRfcGFy
YW1ldGVycyksCisgICAgICAgICAgICAncGFyYW1ldGVycyc6ICIsICIuam9pbihwYXJhbWV0ZXJz
KSwKKyAgICAgICAgICAgICdyZXR1cm5zJzogIiwgIi5qb2luKHJldHVybnMpLAogICAgICAgICB9
CiAKICAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oY29t
bWFuZC5jb25kaXRpb24sIFRlbXBsYXRlKENwcFRlbXBsYXRlcy5CYWNrZW5kRGlzcGF0Y2hlckhl
YWRlckFzeW5jQ29tbWFuZERlY2xhcmF0aW9uKS5zdWJzdGl0dXRlKE5vbmUsICoqY29tbWFuZF9h
cmdzKSkKQEAgLTIyMyw0ICsyMDksNCBAQCBjbGFzcyBDcHBCYWNrZW5kRGlzcGF0Y2hlckhlYWRl
ckdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhf
Z3VhcmRfZm9yX2NvbmRpdGlvbihkb21haW4uY29uZGl0aW9uLCBUZW1wbGF0ZShDcHBUZW1wbGF0
ZXMuQmFja2VuZERpc3BhdGNoZXJIZWFkZXJEb21haW5EaXNwYXRjaGVyRGVjbGFyYXRpb24pLnN1
YnN0aXR1dGUoTm9uZSwgKipoYW5kbGVyX2FyZ3MpKQogCiAgICAgZGVmIF9nZW5lcmF0ZV9kaXNw
YXRjaGVyX2RlY2xhcmF0aW9uX2Zvcl9jb21tYW5kKHNlbGYsIGNvbW1hbmQpOgotICAgICAgICBy
ZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihjb21tYW5kLmNvbmRpdGlv
biwgIiAgICB2b2lkICVzKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBh
cmFtZXRlcnMpOyIgJSBjb21tYW5kLmNvbW1hbmRfbmFtZSkKKyAgICAgICAgcmV0dXJuIHNlbGYu
d3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oY29tbWFuZC5jb25kaXRpb24sICIgICAgdm9p
ZCAlcyhsb25nIHByb3RvY2xfY2FsbElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29s
X3BhcmFtZXRlcnMpOyIgJSBjb21tYW5kLmNvbW1hbmRfbmFtZSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9i
YWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRj
aGVyX2ltcGxlbWVudGF0aW9uLnB5CmluZGV4IGRhZjE5Yzk1MGZiMDdhYWEyZDhiMzFhMmY0OWM3
Y2FiNTA3MDJjNjAuLjhkZmIyOTRhYjlkMjZlNGU4NTVmNWUxMjlkYjgzMWU3ZjkwMWFiZGUgMTAw
NzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2Vu
L2dlbmVyYXRlX2NwcF9iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVf
Y3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQpAQCAtMzMsMTIgKzMzLDEy
IEBAIHRyeToKICAgICBmcm9tIC5jcHBfZ2VuZXJhdG9yIGltcG9ydCBDcHBHZW5lcmF0b3IKICAg
ICBmcm9tIC5jcHBfZ2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgQ3BwR2VuZXJhdG9yVGVtcGxh
dGVzIGFzIENwcFRlbXBsYXRlcwogICAgIGZyb20gLmdlbmVyYXRvciBpbXBvcnQgR2VuZXJhdG9y
LCB1Y2ZpcnN0Ci0gICAgZnJvbSAubW9kZWxzIGltcG9ydCBPYmplY3RUeXBlLCBBcnJheVR5cGUK
KyAgICBmcm9tIC5tb2RlbHMgaW1wb3J0IE9iamVjdFR5cGUsIEFycmF5VHlwZSwgQWxpYXNlZFR5
cGUsIEVudW1UeXBlCiBleGNlcHQgVmFsdWVFcnJvcjoKICAgICBmcm9tIGNwcF9nZW5lcmF0b3Ig
aW1wb3J0IENwcEdlbmVyYXRvcgogICAgIGZyb20gY3BwX2dlbmVyYXRvcl90ZW1wbGF0ZXMgaW1w
b3J0IENwcEdlbmVyYXRvclRlbXBsYXRlcyBhcyBDcHBUZW1wbGF0ZXMKICAgICBmcm9tIGdlbmVy
YXRvciBpbXBvcnQgR2VuZXJhdG9yLCB1Y2ZpcnN0Ci0gICAgZnJvbSBtb2RlbHMgaW1wb3J0IE9i
amVjdFR5cGUsIEFycmF5VHlwZQorICAgIGZyb20gbW9kZWxzIGltcG9ydCBPYmplY3RUeXBlLCBB
cnJheVR5cGUsIEFsaWFzZWRUeXBlLCBFbnVtVHlwZQogCiBsb2cgPSBsb2dnaW5nLmdldExvZ2dl
cignZ2xvYmFsJykKIApAQCAtODAsMTEgKzgwLDggQEAgY2xhc3MgQ3BwQmFja2VuZERpc3BhdGNo
ZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgIGRlZiBfZ2VuZXJh
dGVfc2Vjb25kYXJ5X2hlYWRlcl9pbmNsdWRlcyhzZWxmKToKICAgICAgICAgaGVhZGVyX2luY2x1
ZGVzID0gWwogICAgICAgICAgICAgKFsiSmF2YVNjcmlwdENvcmUiLCAiV2ViS2l0Il0sICgiSmF2
YVNjcmlwdENvcmUiLCAiaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmgiKSksCi0g
ICAgICAgICAgICAoWyJKYXZhU2NyaXB0Q29yZSIsICJXZWJLaXQiXSwgKCJXVEYiLCAid3RmL0pT
T05WYWx1ZXMuaCIpKSwKICAgICAgICAgICAgIChbIkphdmFTY3JpcHRDb3JlIiwgIldlYktpdCJd
LCAoIldURiIsICJ3dGYvTmV2ZXJEZXN0cm95ZWQuaCIpKSwKLSAgICAgICAgICAgIChbIkphdmFT
Y3JpcHRDb3JlIiwgIldlYktpdCJdLCAoIldURiIsICJ3dGYvdGV4dC9DU3RyaW5nLmgiKSkKICAg
ICAgICAgXQotCiAgICAgICAgIHJldHVybiBzZWxmLmdlbmVyYXRlX2luY2x1ZGVzX2Zyb21fZW50
cmllcyhoZWFkZXJfaW5jbHVkZXMpCiAKIApAQCAtMTIzLDggKzEyMCw4IEBAIGNsYXNzIENwcEJh
Y2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAg
ICAgICAgY2FzZXMgPSBbXQogCiAgICAgICAgIGZpcnN0X2NvbW1hbmRfc3RyaW5nID0gIlxuIi5q
b2luKFsKLSAgICAgICAgICAgICcgICAgaWYgKG1ldGhvZCA9PSAiJXMiKSB7JyAlIGNvbW1hbmRz
WzBdLmNvbW1hbmRfbmFtZSwKLSAgICAgICAgICAgICcgICAgICAgICVzKHJlcXVlc3RJZCwgV1RG
TW92ZShwYXJhbWV0ZXJzKSk7JyAlIGNvbW1hbmRzWzBdLmNvbW1hbmRfbmFtZSwKKyAgICAgICAg
ICAgICcgICAgaWYgKHByb3RvY29sX21ldGhvZCA9PSAiJXMiKSB7JyAlIGNvbW1hbmRzWzBdLmNv
bW1hbmRfbmFtZSwKKyAgICAgICAgICAgICcgICAgICAgICVzKHByb3RvY29sX2NhbGxJZCwgV1RG
TW92ZShwcm90b2NvbF9wYXJhbWV0ZXJzKSk7JyAlIGNvbW1hbmRzWzBdLmNvbW1hbmRfbmFtZSwK
ICAgICAgICAgICAgICcgICAgICAgIHJldHVybjsnLAogICAgICAgICAgICAgJyAgICB9JywKICAg
ICAgICAgXSkKQEAgLTEzMiw4ICsxMjksOCBAQCBjbGFzcyBDcHBCYWNrZW5kRGlzcGF0Y2hlcklt
cGxlbWVudGF0aW9uR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAKICAgICAgICAgZm9yIGNvbW1h
bmQgaW4gY29tbWFuZHNbMTpdOgogICAgICAgICAgICAgYWRkaXRpb25hbF9jb21tYW5kX3N0cmlu
ZyA9ICJcbiIuam9pbihbCi0gICAgICAgICAgICAgICAgJyAgICBpZiAobWV0aG9kID09ICIlcyIp
IHsnICUgY29tbWFuZC5jb21tYW5kX25hbWUsCi0gICAgICAgICAgICAgICAgJyAgICAgICAgJXMo
cmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsnICUgY29tbWFuZC5jb21tYW5kX25hbWUs
CisgICAgICAgICAgICAgICAgJyAgICBpZiAocHJvdG9jb2xfbWV0aG9kID09ICIlcyIpIHsnICUg
Y29tbWFuZC5jb21tYW5kX25hbWUsCisgICAgICAgICAgICAgICAgJyAgICAgICAgJXMocHJvdG9j
b2xfY2FsbElkLCBXVEZNb3ZlKHByb3RvY29sX3BhcmFtZXRlcnMpKTsnICUgY29tbWFuZC5jb21t
YW5kX25hbWUsCiAgICAgICAgICAgICAgICAgJyAgICAgICAgcmV0dXJuOycsCiAgICAgICAgICAg
ICAgICAgJyAgICB9JywKICAgICAgICAgICAgIF0pCkBAIC0xNjUsMTQ2ICsxNjIsMTM2IEBAIGNs
YXNzIENwcEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IoQ3BwR2VuZXJh
dG9yKToKICAgICAgICAgcmV0dXJuIFRlbXBsYXRlKENwcFRlbXBsYXRlcy5CYWNrZW5kRGlzcGF0
Y2hlckltcGxlbWVudGF0aW9uTGFyZ2VTd2l0Y2gpLnN1YnN0aXR1dGUoTm9uZSwgKipzd2l0Y2hf
YXJncykKIAogICAgIGRlZiBfZ2VuZXJhdGVfYXN5bmNfZGlzcGF0Y2hlcl9jbGFzc19mb3JfZG9t
YWluKHNlbGYsIGNvbW1hbmQsIGRvbWFpbik6Ci0gICAgICAgIG91dF9wYXJhbWV0ZXJfYXNzaWdu
bWVudHMgPSBbXQotICAgICAgICBmb3JtYWxfcGFyYW1ldGVycyA9IFtdCisgICAgICAgIHJldHVy
bl9hc3NpZ25tZW50cyA9IFtdCisgICAgICAgIGNhbGxiYWNrX3BhcmFtZXRlcnMgPSBbXQogCiAg
ICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gY29tbWFuZC5yZXR1cm5fcGFyYW1ldGVyczoKKyAgICAg
ICAgICAgIHBhcmFtZXRlcl9uYW1lID0gcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lCisgICAgICAg
ICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6CisgICAgICAgICAgICAgICAgcGFyYW1ldGVy
X25hbWUgPSAnb3B0XycgKyBwYXJhbWV0ZXJfbmFtZQorCisgICAgICAgICAgICBwYXJhbWV0ZXJf
dmFsdWUgPSBwYXJhbWV0ZXJfbmFtZQorCisgICAgICAgICAgICBfdHlwZSA9IHBhcmFtZXRlci50
eXBlCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBBbGlhc2VkVHlwZSk6CisgICAg
ICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5hbGlhc2VkX3R5cGUKKyAgICAgICAgICAgIGlmIGlz
aW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKSBhbmQgX3R5cGUuaXNfYW5vbnltb3VzOgorICAgICAg
ICAgICAgICAgIF90eXBlID0gX3R5cGUucHJpbWl0aXZlX3R5cGUKKworICAgICAgICAgICAgaWYg
X3R5cGUuaXNfZW51bSgpOgorICAgICAgICAgICAgICAgIGlmIHBhcmFtZXRlci5pc19vcHRpb25h
bDoKKyAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyX3ZhbHVlID0gJyonICsgcGFyYW1ldGVy
X3ZhbHVlCisgICAgICAgICAgICAgICAgcGFyYW1ldGVyX3ZhbHVlID0gJ1Byb3RvY29sOjolczo6
Z2V0RW51bUNvbnN0YW50VmFsdWUoJXMpJyAlIChzZWxmLmhlbHBlcnNfbmFtZXNwYWNlKCksIHBh
cmFtZXRlcl92YWx1ZSkKKyAgICAgICAgICAgIGVsaWYgQ3BwR2VuZXJhdG9yLnNob3VsZF9yZWxl
YXNlX2FyZ3VtZW50KF90eXBlLCBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwpOgorICAgICAgICAgICAg
ICAgIHBhcmFtZXRlcl92YWx1ZSA9IHBhcmFtZXRlcl92YWx1ZSArICcucmVsZWFzZU5vbk51bGwo
KScKKyAgICAgICAgICAgIGVsaWYgQ3BwR2VuZXJhdG9yLnNob3VsZF9kZXJlZmVyZW5jZV9hcmd1
bWVudChfdHlwZSwgcGFyYW1ldGVyLmlzX29wdGlvbmFsKToKKyAgICAgICAgICAgICAgICBwYXJh
bWV0ZXJfdmFsdWUgPSAnKicgKyBwYXJhbWV0ZXJfdmFsdWUKKyAgICAgICAgICAgIGVsaWYgQ3Bw
R2VuZXJhdG9yLnNob3VsZF9tb3ZlX2FyZ3VtZW50KF90eXBlLCBwYXJhbWV0ZXIuaXNfb3B0aW9u
YWwpOgorICAgICAgICAgICAgICAgIHBhcmFtZXRlcl92YWx1ZSA9ICdXVEZNb3ZlKCVzKScgJSBw
YXJhbWV0ZXJfdmFsdWUKKwogICAgICAgICAgICAgcGFyYW1fYXJncyA9IHsKLSAgICAgICAgICAg
ICAgICAna2V5ZWRTZXRNZXRob2QnOiBDcHBHZW5lcmF0b3IuY3BwX3NldHRlcl9tZXRob2RfZm9y
X3R5cGUocGFyYW1ldGVyLnR5cGUpLAorICAgICAgICAgICAgICAgICdrZXllZFNldE1ldGhvZCc6
IENwcEdlbmVyYXRvci5jcHBfc2V0dGVyX21ldGhvZF9mb3JfdHlwZShfdHlwZSksCiAgICAgICAg
ICAgICAgICAgJ3BhcmFtZXRlcktleSc6IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwKLSAgICAg
ICAgICAgICAgICAncGFyYW1ldGVyTmFtZSc6IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwKLSAg
ICAgICAgICAgICAgICAncGFyYW1ldGVyVHlwZSc6IENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3Jf
c3RhY2tfaW5fcGFyYW1ldGVyKHBhcmFtZXRlciksCi0gICAgICAgICAgICAgICAgJ2hlbHBlcnNO
YW1lc3BhY2UnOiBzZWxmLmhlbHBlcnNfbmFtZXNwYWNlKCksCisgICAgICAgICAgICAgICAgJ3Bh
cmFtZXRlck5hbWUnOiBwYXJhbWV0ZXJfbmFtZSwKKyAgICAgICAgICAgICAgICAncGFyYW1ldGVy
VmFsdWUnOiBwYXJhbWV0ZXJfdmFsdWUsCiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGZv
cm1hbF9wYXJhbWV0ZXJzLmFwcGVuZCgnJXMgJXMnICUgKENwcEdlbmVyYXRvci5jcHBfdHlwZV9m
b3JfZm9ybWFsX2FzeW5jX3BhcmFtZXRlcihwYXJhbWV0ZXIpLCBwYXJhbWV0ZXIucGFyYW1ldGVy
X25hbWUpKQorICAgICAgICAgICAgY2FsbGJhY2tfcGFyYW1ldGVycy5hcHBlbmQoJyVzICVzJyAl
IChDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX2NvbW1hbmRfcmV0dXJuX2FyZ3VtZW50KF90eXBl
LCBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwpLCBwYXJhbWV0ZXJfbmFtZSkpCiAKICAgICAgICAgICAg
IGlmIHBhcmFtZXRlci5pc19vcHRpb25hbDoKLSAgICAgICAgICAgICAgICBpZiBDcHBHZW5lcmF0
b3Iuc2hvdWxkX3VzZV93cmFwcGVyX2Zvcl9yZXR1cm5fdHlwZShwYXJhbWV0ZXIudHlwZSk6Ci0g
ICAgICAgICAgICAgICAgICAgIG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAg
aWYgKCUocGFyYW1ldGVyTmFtZSlzLmhhc1ZhbHVlKCkpJyAlIHBhcmFtX2FyZ3MpCi0gICAgICAg
ICAgICAgICAgICAgIG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAgICAgIGpz
b25NZXNzYWdlLT4lKGtleWVkU2V0TWV0aG9kKXMoIiUocGFyYW1ldGVyS2V5KXMiX3MsIColKHBh
cmFtZXRlck5hbWUpcyk7JyAlIHBhcmFtX2FyZ3MpCi0gICAgICAgICAgICAgICAgZWxzZToKLSAg
ICAgICAgICAgICAgICAgICAgb3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICBp
ZiAoJShwYXJhbWV0ZXJOYW1lKXMpJyAlIHBhcmFtX2FyZ3MpCi0gICAgICAgICAgICAgICAgICAg
IG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAgICAgIGpzb25NZXNzYWdlLT4l
KGtleWVkU2V0TWV0aG9kKXMoIiUocGFyYW1ldGVyS2V5KXMiX3MsICUocGFyYW1ldGVyTmFtZSlz
KTsnICUgcGFyYW1fYXJncykKLSAgICAgICAgICAgIGVsaWYgcGFyYW1ldGVyLnR5cGUuaXNfZW51
bSgpOgotICAgICAgICAgICAgICAgIG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcg
ICAganNvbk1lc3NhZ2UtPiUoa2V5ZWRTZXRNZXRob2QpcygiJShwYXJhbWV0ZXJLZXkpcyJfcywg
SW5zcGVjdG9yOjpQcm90b2NvbDo6JShoZWxwZXJzTmFtZXNwYWNlKXM6OmdldEVudW1Db25zdGFu
dFZhbHVlKCUocGFyYW1ldGVyTmFtZSlzKSk7JyAlIHBhcmFtX2FyZ3MpCisgICAgICAgICAgICAg
ICAgcmV0dXJuX2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAgIGlmICghISUocGFyYW1ldGVyTmFtZSlz
KScgJSBwYXJhbV9hcmdzKQorICAgICAgICAgICAgICAgIHJldHVybl9hc3NpZ25tZW50cy5hcHBl
bmQoJyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPiUoa2V5ZWRTZXRNZXRob2QpcygiJShw
YXJhbWV0ZXJLZXkpcyJfcywgJShwYXJhbWV0ZXJWYWx1ZSlzKTsnICUgcGFyYW1fYXJncykKICAg
ICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgb3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50
cy5hcHBlbmQoJyAgICBqc29uTWVzc2FnZS0+JShrZXllZFNldE1ldGhvZClzKCIlKHBhcmFtZXRl
cktleSlzIl9zLCAlKHBhcmFtZXRlck5hbWUpcyk7JyAlIHBhcmFtX2FyZ3MpCisgICAgICAgICAg
ICAgICAgcmV0dXJuX2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAgIHByb3RvY29sX2pzb25NZXNzYWdl
LT4lKGtleWVkU2V0TWV0aG9kKXMoIiUocGFyYW1ldGVyS2V5KXMiX3MsICUocGFyYW1ldGVyVmFs
dWUpcyk7JyAlIHBhcmFtX2FyZ3MpCiAKICAgICAgICAgYXN5bmNfYXJncyA9IHsKICAgICAgICAg
ICAgICdkb21haW5OYW1lJzogZG9tYWluLmRvbWFpbl9uYW1lLAogICAgICAgICAgICAgJ2NhbGxi
YWNrTmFtZSc6IHVjZmlyc3QoY29tbWFuZC5jb21tYW5kX25hbWUpICsgJ0NhbGxiYWNrJywKLSAg
ICAgICAgICAgICdmb3JtYWxQYXJhbWV0ZXJzJzogIiwgIi5qb2luKGZvcm1hbF9wYXJhbWV0ZXJz
KSwKLSAgICAgICAgICAgICdvdXRQYXJhbWV0ZXJBc3NpZ25tZW50cyc6ICJcbiIuam9pbihvdXRf
cGFyYW1ldGVyX2Fzc2lnbm1lbnRzKQorICAgICAgICAgICAgJ2NhbGxiYWNrUGFyYW1ldGVycyc6
ICIsICIuam9pbihjYWxsYmFja19wYXJhbWV0ZXJzKSwKKyAgICAgICAgICAgICdyZXR1cm5Bc3Np
Z25tZW50cyc6ICJcbiIuam9pbihyZXR1cm5fYXNzaWdubWVudHMpCiAgICAgICAgIH0KICAgICAg
ICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oY29tbWFuZC5jb25k
aXRpb24sIFRlbXBsYXRlKENwcFRlbXBsYXRlcy5CYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0
aW9uQXN5bmNDb21tYW5kKS5zdWJzdGl0dXRlKE5vbmUsICoqYXN5bmNfYXJncykpCiAKICAgICBk
ZWYgX2dlbmVyYXRlX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb25fZm9yX2NvbW1hbmQoc2VsZiwg
Y29tbWFuZCwgZG9tYWluKToKLSAgICAgICAgaW5fcGFyYW1ldGVyX2RlY2xhcmF0aW9ucyA9IFtd
Ci0gICAgICAgIG91dF9wYXJhbWV0ZXJfZGVjbGFyYXRpb25zID0gW10KLSAgICAgICAgb3V0X3Bh
cmFtZXRlcl9hc3NpZ25tZW50cyA9IFtdCi0gICAgICAgIGFsdGVybmF0ZV9kaXNwYXRjaGVyX21l
dGhvZF9wYXJhbWV0ZXJzID0gWydyZXF1ZXN0SWQnXQorICAgICAgICBwYXJhbWV0ZXJfZGVjbGFy
YXRpb25zID0gW10KKyAgICAgICAgcGFyYW1ldGVyX2VudW1fcmVzb2x1dGlvbnMgPSBbXQorICAg
ICAgICBhbHRlcm5hdGVfZGlzcGF0Y2hlcl9tZXRob2RfcGFyYW1ldGVycyA9IFsncHJvdG9jb2xf
Y2FsbElkJ10KICAgICAgICAgbWV0aG9kX3BhcmFtZXRlcnMgPSBbXQotICAgICAgICBpZiBub3Qg
Y29tbWFuZC5pc19hc3luYzoKLSAgICAgICAgICAgIG1ldGhvZF9wYXJhbWV0ZXJzLmFwcGVuZCgn
ZXJyb3InKQogCiAgICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gY29tbWFuZC5jYWxsX3BhcmFtZXRl
cnM6Ci0gICAgICAgICAgICBwYXJhbWV0ZXJfbmFtZSA9ICdpbl8nICsgcGFyYW1ldGVyLnBhcmFt
ZXRlcl9uYW1lCisgICAgICAgICAgICBwYXJhbWV0ZXJfbmFtZSA9IHBhcmFtZXRlci5wYXJhbWV0
ZXJfbmFtZQogICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgogICAgICAgICAg
ICAgICAgIHBhcmFtZXRlcl9uYW1lID0gJ29wdF8nICsgcGFyYW1ldGVyX25hbWUKKyAgICAgICAg
ICAgIHBhcmFtZXRlcl9uYW1lID0gJ2luXycgKyBwYXJhbWV0ZXJfbmFtZQogCi0gICAgICAgICAg
ICBvdXRfc3VjY2Vzc19hcmd1bWVudCA9ICdudWxscHRyJwotICAgICAgICAgICAgaWYgcGFyYW1l
dGVyLmlzX29wdGlvbmFsOgotICAgICAgICAgICAgICAgIG91dF9zdWNjZXNzX2FyZ3VtZW50ID0g
JyYlc192YWx1ZUZvdW5kJyAlIHBhcmFtZXRlcl9uYW1lCi0gICAgICAgICAgICAgICAgaW5fcGFy
YW1ldGVyX2RlY2xhcmF0aW9ucy5hcHBlbmQoJyAgICBib29sICVzX3ZhbHVlRm91bmQgPSBmYWxz
ZTsnICUgcGFyYW1ldGVyX25hbWUpCisgICAgICAgICAgICB2YXJpYWJsZV9uYW1lID0gcGFyYW1l
dGVyX25hbWUKIAotICAgICAgICAgICAgIyBOb3cgYWRkIGFwcHJvcHJpYXRlIG9wZXJhdG9ycy4K
LSAgICAgICAgICAgIHBhcmFtZXRlcl9leHByZXNzaW9uID0gcGFyYW1ldGVyX25hbWUKKyAgICAg
ICAgICAgIF90eXBlID0gcGFyYW1ldGVyLnR5cGUKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uo
X3R5cGUsIEFsaWFzZWRUeXBlKToKKyAgICAgICAgICAgICAgICBfdHlwZSA9IF90eXBlLmFsaWFz
ZWRfdHlwZQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgRW51bVR5cGUpIGFuZCBf
dHlwZS5pc19hbm9ueW1vdXM6CisgICAgICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5wcmltaXRp
dmVfdHlwZQogCi0gICAgICAgICAgICBpZiBDcHBHZW5lcmF0b3Iuc2hvdWxkX3VzZV9yZWZlcmVu
Y2VzX2Zvcl90eXBlKHBhcmFtZXRlci50eXBlKToKLSAgICAgICAgICAgICAgICBpZiBwYXJhbWV0
ZXIuaXNfb3B0aW9uYWw6Ci0gICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcl9leHByZXNzaW9u
ID0gJyVzLmdldCgpJyAlIHBhcmFtZXRlcl9leHByZXNzaW9uCi0gICAgICAgICAgICAgICAgZWxz
ZToKLSAgICAgICAgICAgICAgICAgICAgIyBUaGlzIGFzc3VtZXMgdGhhdCB3ZSBoYXZlIGFscmVh
ZHkgcHJvdmVkIHRoZSBvYmplY3QgaXMgbm9uLW51bGwuCi0gICAgICAgICAgICAgICAgICAgICMg
SWYgYSByZXF1aXJlZCBwcm9wZXJ0eSBpcyBtaXNzaW5nLCBJbnNwZWN0b3JCYWNrZW5kOjpnZXRP
YmplY3Qgd2lsbAotICAgICAgICAgICAgICAgICAgICAjIGFwcGVuZCBhIHByb3RvY29sIGVycm9y
LCBhbmQgdGhlIG1ldGhvZCBkaXNwYXRjaGVyIHdpbGwgcmV0dXJuIHdpdGhvdXQKLSAgICAgICAg
ICAgICAgICAgICAgIyBpbnZva2luZyB0aGUgYmFja2VuZCBtZXRob2QgKGFuZCBkZXJlZmVyZW5j
aW5nIHRoZSBvYmplY3QpLgotICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfZXhwcmVzc2lv
biA9ICcqJXMnICUgcGFyYW1ldGVyX2V4cHJlc3Npb24KLSAgICAgICAgICAgIGVsaWYgcGFyYW1l
dGVyLmlzX29wdGlvbmFsOgotICAgICAgICAgICAgICAgIHBhcmFtZXRlcl9leHByZXNzaW9uID0g
JyYlcycgJSBwYXJhbWV0ZXJfZXhwcmVzc2lvbgorICAgICAgICAgICAgaWYgX3R5cGUuaXNfZW51
bSgpOgorICAgICAgICAgICAgICAgIHBhcmFtZXRlcl9uYW1lID0gcGFyYW1ldGVyX25hbWUgKyAn
X2pzb24nCiAKLSAgICAgICAgICAgIHBhcmFtX2FyZ3MgPSB7Ci0gICAgICAgICAgICAgICAgJ3Bh
cmFtZXRlclR5cGUnOiBDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX3N0YWNrX2luX3BhcmFtZXRl
cihwYXJhbWV0ZXIpLAotICAgICAgICAgICAgICAgICdwYXJhbWV0ZXJLZXknOiBwYXJhbWV0ZXIu
cGFyYW1ldGVyX25hbWUsCi0gICAgICAgICAgICAgICAgJ3BhcmFtZXRlck5hbWUnOiBwYXJhbWV0
ZXJfbmFtZSwKLSAgICAgICAgICAgICAgICAncGFyYW1ldGVyRXhwcmVzc2lvbic6IHBhcmFtZXRl
cl9leHByZXNzaW9uLAotICAgICAgICAgICAgICAgICdrZXllZEdldE1ldGhvZCc6IENwcEdlbmVy
YXRvci5jcHBfZ2V0dGVyX21ldGhvZF9mb3JfdHlwZShwYXJhbWV0ZXIudHlwZSksCi0gICAgICAg
ICAgICAgICAgJ3N1Y2Nlc3NPdXRQYXJhbSc6IG91dF9zdWNjZXNzX2FyZ3VtZW50Ci0gICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgYWx0ZXJuYXRlX2Rpc3BhdGNoZXJfbWV0aG9kX3BhcmFt
ZXRlcnMuYXBwZW5kKHBhcmFtZXRlcl9uYW1lKQogCi0gICAgICAgICAgICBpbl9wYXJhbWV0ZXJf
ZGVjbGFyYXRpb25zLmFwcGVuZCgnICAgICUocGFyYW1ldGVyVHlwZSlzICUocGFyYW1ldGVyTmFt
ZSlzID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+JShrZXllZEdldE1ldGhvZClzKHBhcmFtZXRlcnMu
Z2V0KCksICIlKHBhcmFtZXRlcktleSlzIl9zLCAlKHN1Y2Nlc3NPdXRQYXJhbSlzKTsnICUgcGFy
YW1fYXJncykKLQotICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgotICAgICAg
ICAgICAgICAgIG9wdGlvbmFsX2luX3BhcmFtZXRlcl9zdHJpbmcgPSAnJShwYXJhbWV0ZXJOYW1l
KXNfdmFsdWVGb3VuZCA/ICUocGFyYW1ldGVyRXhwcmVzc2lvbilzIDogbnVsbHB0cicgJSBwYXJh
bV9hcmdzCi0gICAgICAgICAgICAgICAgYWx0ZXJuYXRlX2Rpc3BhdGNoZXJfbWV0aG9kX3BhcmFt
ZXRlcnMuYXBwZW5kKG9wdGlvbmFsX2luX3BhcmFtZXRlcl9zdHJpbmcpCi0gICAgICAgICAgICAg
ICAgbWV0aG9kX3BhcmFtZXRlcnMuYXBwZW5kKG9wdGlvbmFsX2luX3BhcmFtZXRlcl9zdHJpbmcp
Ci0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGFsdGVybmF0ZV9kaXNwYXRjaGVy
X21ldGhvZF9wYXJhbWV0ZXJzLmFwcGVuZChwYXJhbWV0ZXJfZXhwcmVzc2lvbikKLSAgICAgICAg
ICAgICAgICBtZXRob2RfcGFyYW1ldGVycy5hcHBlbmQocGFyYW1ldGVyX2V4cHJlc3Npb24pCi0K
LSAgICAgICAgaWYgY29tbWFuZC5pc19hc3luYzoKLSAgICAgICAgICAgIGFzeW5jX2FyZ3MgPSB7
Ci0gICAgICAgICAgICAgICAgJ2RvbWFpbk5hbWUnOiBkb21haW4uZG9tYWluX25hbWUsCi0gICAg
ICAgICAgICAgICAgJ2NhbGxiYWNrTmFtZSc6IHVjZmlyc3QoY29tbWFuZC5jb21tYW5kX25hbWUp
ICsgJ0NhbGxiYWNrJwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBvdXRfcGFyYW1ldGVy
X2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAgICAgICBjYWxsYmFjay0+ZGlzYWJsZSgpOycpCi0gICAg
ICAgICAgICBvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAgICAgICBtX2JhY2tl
bmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2
ZXJFcnJvciwgZXJyb3IpOycpCi0gICAgICAgICAgICBvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRz
LmFwcGVuZCgnICAgICAgICByZXR1cm47JykKLSAgICAgICAgICAgIG1ldGhvZF9wYXJhbWV0ZXJz
LmFwcGVuZCgnY2FsbGJhY2suY29weVJlZigpJykKLQotICAgICAgICBlbHNlOgotICAgICAgICAg
ICAgZm9yIHBhcmFtZXRlciBpbiBjb21tYW5kLnJldHVybl9wYXJhbWV0ZXJzOgotICAgICAgICAg
ICAgICAgIHBhcmFtX2FyZ3MgPSB7Ci0gICAgICAgICAgICAgICAgICAgICdwYXJhbWV0ZXJUeXBl
JzogQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl9zdGFja19vdXRfcGFyYW1ldGVyKHBhcmFtZXRl
ciksCi0gICAgICAgICAgICAgICAgICAgICdwYXJhbWV0ZXJLZXknOiBwYXJhbWV0ZXIucGFyYW1l
dGVyX25hbWUsCi0gICAgICAgICAgICAgICAgICAgICdwYXJhbWV0ZXJOYW1lJzogcGFyYW1ldGVy
LnBhcmFtZXRlcl9uYW1lLAotICAgICAgICAgICAgICAgICAgICAna2V5ZWRTZXRNZXRob2QnOiBD
cHBHZW5lcmF0b3IuY3BwX3NldHRlcl9tZXRob2RfZm9yX3R5cGUocGFyYW1ldGVyLnR5cGUpLAor
ICAgICAgICAgICAgICAgIGVudW1fYXJncyA9IHsKICAgICAgICAgICAgICAgICAgICAgJ2hlbHBl
cnNOYW1lc3BhY2UnOiBzZWxmLmhlbHBlcnNfbmFtZXNwYWNlKCksCisgICAgICAgICAgICAgICAg
ICAgICdwYXJhbWV0ZXJLZXknOiBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUsCisgICAgICAgICAg
ICAgICAgICAgICdlbnVtVHlwZSc6IENwcEdlbmVyYXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3Jf
dHlwZShfdHlwZSksCisgICAgICAgICAgICAgICAgICAgICdlbnVtVmFyaWFibGVOYW1lJzogdmFy
aWFibGVfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgJ3N0cmluZ1ZhcmlhYmxlTmFtZSc6IHBh
cmFtZXRlcl9uYW1lLAogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIG91dF9w
YXJhbWV0ZXJfZGVjbGFyYXRpb25zLmFwcGVuZCgnICAgICUocGFyYW1ldGVyVHlwZSlzIG91dF8l
KHBhcmFtZXRlck5hbWUpczsnICUgcGFyYW1fYXJncykKKyAgICAgICAgICAgICAgICBpZiBsZW4o
cGFyYW1ldGVyX2VudW1fcmVzb2x1dGlvbnMpOgorICAgICAgICAgICAgICAgICAgICBwYXJhbWV0
ZXJfZW51bV9yZXNvbHV0aW9ucy5hcHBlbmQoJycpCisgICAgICAgICAgICAgICAgcGFyYW1ldGVy
X2VudW1fcmVzb2x1dGlvbnMuYXBwZW5kKCcgICAgYXV0byAlKGVudW1WYXJpYWJsZU5hbWUpcyA9
IFByb3RvY29sOjolKGhlbHBlcnNOYW1lc3BhY2Upczo6cGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5n
PCUoZW51bVR5cGUpcz4oJShzdHJpbmdWYXJpYWJsZU5hbWUpcyk7JyAlIGVudW1fYXJncykKICAg
ICAgICAgICAgICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6Ci0gICAgICAgICAgICAgICAg
ICAgIGlmIENwcEdlbmVyYXRvci5zaG91bGRfdXNlX3dyYXBwZXJfZm9yX3JldHVybl90eXBlKHBh
cmFtZXRlci50eXBlKToKLSAgICAgICAgICAgICAgICAgICAgICAgIG91dF9wYXJhbWV0ZXJfYXNz
aWdubWVudHMuYXBwZW5kKCcgICAgICAgIGlmIChvdXRfJShwYXJhbWV0ZXJOYW1lKXMuaGFzVmFs
dWUoKSknICUgcGFyYW1fYXJncykKLSAgICAgICAgICAgICAgICAgICAgICAgIG91dF9wYXJhbWV0
ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAgICAgICAgICByZXN1bHQtPiUoa2V5ZWRTZXRNZXRo
b2QpcygiJShwYXJhbWV0ZXJLZXkpcyJfcywgKm91dF8lKHBhcmFtZXRlck5hbWUpcyk7JyAlIHBh
cmFtX2FyZ3MpCi0gICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAgICAgICBpZiAob3V0XyUo
cGFyYW1ldGVyTmFtZSlzKScgJSBwYXJhbV9hcmdzKQotICAgICAgICAgICAgICAgICAgICAgICAg
b3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICAgICAgICAgIHJlc3VsdC0+JShr
ZXllZFNldE1ldGhvZClzKCIlKHBhcmFtZXRlcktleSlzIl9zLCBvdXRfJShwYXJhbWV0ZXJOYW1l
KXMpOycgJSBwYXJhbV9hcmdzKQotICAgICAgICAgICAgICAgIGVsaWYgcGFyYW1ldGVyLnR5cGUu
aXNfZW51bSgpOgotICAgICAgICAgICAgICAgICAgICBvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRz
LmFwcGVuZCgnICAgICAgICByZXN1bHQtPiUoa2V5ZWRTZXRNZXRob2QpcygiJShwYXJhbWV0ZXJL
ZXkpcyJfcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6JShoZWxwZXJzTmFtZXNwYWNlKXM6OmdldEVu
dW1Db25zdGFudFZhbHVlKG91dF8lKHBhcmFtZXRlck5hbWUpcykpOycgJSBwYXJhbV9hcmdzKQor
ICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfZXhwcmVzc2lvbiA9ICdXVEZNb3ZlKCVzKScg
JSB2YXJpYWJsZV9uYW1lCiAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAg
ICAgb3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICAgICAgcmVzdWx0LT4lKGtl
eWVkU2V0TWV0aG9kKXMoIiUocGFyYW1ldGVyS2V5KXMiX3MsIG91dF8lKHBhcmFtZXRlck5hbWUp
cyk7JyAlIHBhcmFtX2FyZ3MpCisgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcl9lbnVtX3Jl
c29sdXRpb25zLmFwcGVuZCgnICAgIGlmICghJShlbnVtVmFyaWFibGVOYW1lKXMpIHsnICUgZW51
bV9hcmdzKQorICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfZW51bV9yZXNvbHV0aW9ucy5h
cHBlbmQoJyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihC
YWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIG1ha2VTdHJpbmcoIlVua25vd24gJShwYXJh
bWV0ZXJLZXkpczogIl9zLCAlKHN0cmluZ1ZhcmlhYmxlTmFtZSlzKSk7JyAlIGVudW1fYXJncykK
KyAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyX2VudW1fcmVzb2x1dGlvbnMuYXBwZW5kKCcg
ICAgICAgIHJldHVybjsnKQorICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfZW51bV9yZXNv
bHV0aW9ucy5hcHBlbmQoJyAgICB9JykKKyAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyX2V4
cHJlc3Npb24gPSAnKicgKyB2YXJpYWJsZV9uYW1lCisgICAgICAgICAgICBlbHNlOgorICAgICAg
ICAgICAgICAgIGlmIF90eXBlLnJhd19uYW1lKCkgPT0gJ3N0cmluZyc6CisgICAgICAgICAgICAg
ICAgICAgIHBhcmFtZXRlcl9leHByZXNzaW9uID0gdmFyaWFibGVfbmFtZQorICAgICAgICAgICAg
ICAgIGVsaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAgICAgICBwYXJh
bWV0ZXJfZXhwcmVzc2lvbiA9ICdXVEZNb3ZlKCVzKScgJSB2YXJpYWJsZV9uYW1lCisgICAgICAg
ICAgICAgICAgZWxpZiBfdHlwZS5yYXdfbmFtZSgpIGluIFsnYm9vbGVhbicsICdpbnRlZ2VyJywg
J251bWJlciddOgorICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfZXhwcmVzc2lvbiA9ICcq
JyArIHZhcmlhYmxlX25hbWUKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAg
ICAgICBwYXJhbWV0ZXJfZXhwcmVzc2lvbiA9IHZhcmlhYmxlX25hbWUgKyAnLnJlbGVhc2VOb25O
dWxsKCknCisgICAgICAgICAgICAgICAgYWx0ZXJuYXRlX2Rpc3BhdGNoZXJfbWV0aG9kX3BhcmFt
ZXRlcnMuYXBwZW5kKHBhcmFtZXRlcl9leHByZXNzaW9uKQorICAgICAgICAgICAgbWV0aG9kX3Bh
cmFtZXRlcnMuYXBwZW5kKHBhcmFtZXRlcl9leHByZXNzaW9uKQogCi0gICAgICAgICAgICAgICAg
aWYgQ3BwR2VuZXJhdG9yLnNob3VsZF9wYXNzX2J5X2NvcHlfZm9yX3JldHVybl90eXBlKHBhcmFt
ZXRlci50eXBlKSBvciBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwgYW5kIENwcEdlbmVyYXRvci5zaG91
bGRfdXNlX3dyYXBwZXJfZm9yX3JldHVybl90eXBlKHBhcmFtZXRlci50eXBlKToKLSAgICAgICAg
ICAgICAgICAgICAgbWV0aG9kX3BhcmFtZXRlcnMuYXBwZW5kKCdvdXRfJyArIHBhcmFtZXRlci5w
YXJhbWV0ZXJfbmFtZSkKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAg
ICBtZXRob2RfcGFyYW1ldGVycy5hcHBlbmQoJyZvdXRfJyArIHBhcmFtZXRlci5wYXJhbWV0ZXJf
bmFtZSkKKyAgICAgICAgICAgIHBhcmFtX2FyZ3MgPSB7CisgICAgICAgICAgICAgICAgJ3BhcmFt
ZXRlcktleSc6IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwKKyAgICAgICAgICAgICAgICAncGFy
YW1ldGVyTmFtZSc6IHBhcmFtZXRlcl9uYW1lLAorICAgICAgICAgICAgICAgICdrZXllZEdldE1l
dGhvZCc6IENwcEdlbmVyYXRvci5jcHBfZ2V0dGVyX21ldGhvZF9mb3JfdHlwZShfdHlwZSksCisg
ICAgICAgICAgICAgICAgJ3JlcXVpcmVkJzogJ2ZhbHNlJyBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9u
YWwgZWxzZSAndHJ1ZScsCisgICAgICAgICAgICB9CisgICAgICAgICAgICBwYXJhbWV0ZXJfZGVj
bGFyYXRpb25zLmFwcGVuZCgnICAgIGF1dG8gJShwYXJhbWV0ZXJOYW1lKXMgPSBtX2JhY2tlbmRE
aXNwYXRjaGVyLT4lKGtleWVkR2V0TWV0aG9kKXMocHJvdG9jb2xfcGFyYW1ldGVycy5nZXQoKSwg
IiUocGFyYW1ldGVyS2V5KXMiX3MsICUocmVxdWlyZWQpcyk7JyAlIHBhcmFtX2FyZ3MpCisKKyAg
ICAgICAgaWYgY29tbWFuZC5pc19hc3luYzoKKyAgICAgICAgICAgIG1ldGhvZF9wYXJhbWV0ZXJz
LmFwcGVuZCgnYWRvcHRSZWYoKm5ldyAlc0JhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6JXMobV9i
YWNrZW5kRGlzcGF0Y2hlci5jb3B5UmVmKCksIHByb3RvY29sX2NhbGxJZCkpJyAlIChkb21haW4u
ZG9tYWluX25hbWUsICclc0NhbGxiYWNrJyAlIHVjZmlyc3QoY29tbWFuZC5jb21tYW5kX25hbWUp
KSkKIAogICAgICAgICBjb21tYW5kX2FyZ3MgPSB7CiAgICAgICAgICAgICAnZG9tYWluTmFtZSc6
IGRvbWFpbi5kb21haW5fbmFtZSwKLSAgICAgICAgICAgICdjYWxsYmFja05hbWUnOiAnJXNDYWxs
YmFjaycgJSB1Y2ZpcnN0KGNvbW1hbmQuY29tbWFuZF9uYW1lKSwKICAgICAgICAgICAgICdjb21t
YW5kTmFtZSc6IGNvbW1hbmQuY29tbWFuZF9uYW1lLAotICAgICAgICAgICAgJ2luUGFyYW1ldGVy
RGVjbGFyYXRpb25zJzogJ1xuJy5qb2luKGluX3BhcmFtZXRlcl9kZWNsYXJhdGlvbnMpLAorICAg
ICAgICAgICAgJ3BhcmFtZXRlckRlY2xhcmF0aW9ucyc6ICdcbicuam9pbihwYXJhbWV0ZXJfZGVj
bGFyYXRpb25zKSwKICAgICAgICAgICAgICdpbnZvY2F0aW9uUGFyYW1ldGVycyc6ICcsICcuam9p
bihtZXRob2RfcGFyYW1ldGVycyksCiAgICAgICAgICAgICAnYWx0ZXJuYXRlSW52b2NhdGlvblBh
cmFtZXRlcnMnOiAnLCAnLmpvaW4oYWx0ZXJuYXRlX2Rpc3BhdGNoZXJfbWV0aG9kX3BhcmFtZXRl
cnMpLAogICAgICAgICB9CiAKICAgICAgICAgbGluZXMgPSBbXQogICAgICAgICBpZiBsZW4oY29t
bWFuZC5jYWxsX3BhcmFtZXRlcnMpID09IDA6Ci0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ3Zv
aWQgJShkb21haW5OYW1lKXNCYWNrZW5kRGlzcGF0Y2hlcjo6JShjb21tYW5kTmFtZSlzKGxvbmcg
cmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKScgJSBjb21tYW5kX2FyZ3MpCisgICAg
ICAgICAgICBsaW5lcy5hcHBlbmQoJ3ZvaWQgJShkb21haW5OYW1lKXNCYWNrZW5kRGlzcGF0Y2hl
cjo6JShjb21tYW5kTmFtZSlzKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiYmKScgJSBjb21tYW5kX2FyZ3MpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBsaW5l
cy5hcHBlbmQoJ3ZvaWQgJShkb21haW5OYW1lKXNCYWNrZW5kRGlzcGF0Y2hlcjo6JShjb21tYW5k
TmFtZSlzKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMp
JyAlIGNvbW1hbmRfYXJncykKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgndm9pZCAlKGRvbWFp
bk5hbWUpc0JhY2tlbmREaXNwYXRjaGVyOjolKGNvbW1hbmROYW1lKXMobG9uZyBwcm90b2NvbF9j
YWxsSWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfcGFyYW1ldGVycyknICUgY29t
bWFuZF9hcmdzKQogICAgICAgICBsaW5lcy5hcHBlbmQoJ3snKQogCiAgICAgICAgIGlmIGxlbihj
b21tYW5kLmNhbGxfcGFyYW1ldGVycykgPiAwOgpAQCAtMzE5LDMxICszMDYsNzEgQEAgY2xhc3Mg
Q3BwQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihDcHBHZW5lcmF0b3Ip
OgogICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9B
TFRFUk5BVEVfRElTUEFUQ0hFUlMpJykKICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnJykKIAor
ICAgICAgICBpZiBsZW4ocGFyYW1ldGVyX2VudW1fcmVzb2x1dGlvbnMpOgorICAgICAgICAgICAg
bGluZXMuZXh0ZW5kKHBhcmFtZXRlcl9lbnVtX3Jlc29sdXRpb25zKQorICAgICAgICAgICAgbGlu
ZXMuYXBwZW5kKCcnKQorCiAgICAgICAgIGlmIGNvbW1hbmQuaXNfYXN5bmM6Ci0gICAgICAgICAg
ICBsaW5lcy5hcHBlbmQoJyAgICBSZWY8JShkb21haW5OYW1lKXNCYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXI6OiUoY2FsbGJhY2tOYW1lKXM+IGNhbGxiYWNrID0gYWRvcHRSZWYoKm5ldyAlKGRvbWFp
bk5hbWUpc0JhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6JShjYWxsYmFja05hbWUpcyhtX2JhY2tl
bmREaXNwYXRjaGVyLmNvcHlSZWYoKSwgcmVxdWVzdElkKSk7JyAlIGNvbW1hbmRfYXJncykKKyAg
ICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIG1fYWdlbnQtPiUoY29tbWFuZE5hbWUpcyglKGlu
dm9jYXRpb25QYXJhbWV0ZXJzKXMpOycgJSBjb21tYW5kX2FyZ3MpCiAgICAgICAgIGVsc2U6Ci0g
ICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBFcnJvclN0cmluZyBlcnJvcjsnKQotICAgICAg
ICAgICAgbGluZXMuYXBwZW5kKCcgICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6
T2JqZWN0OjpjcmVhdGUoKTsnKQorICAgICAgICAgICAgcmVzdWx0X2V4dHJhY3Rpb25fbmFtZXMg
PSBbXQorICAgICAgICAgICAgcmVzdWx0X2NvbnZlcnNpb25fbGluZXMgPSBbXQorICAgICAgICAg
ICAgZm9yIHBhcmFtZXRlciBpbiBjb21tYW5kLnJldHVybl9wYXJhbWV0ZXJzOgorICAgICAgICAg
ICAgICAgIHBhcmFtZXRlcl9uYW1lID0gcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lCisgICAgICAg
ICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAgICAgICBw
YXJhbWV0ZXJfbmFtZSA9ICdvcHRfJyArIHBhcmFtZXRlcl9uYW1lCisgICAgICAgICAgICAgICAg
cGFyYW1ldGVyX25hbWUgPSAnb3V0XycgKyBwYXJhbWV0ZXJfbmFtZQogCi0gICAgICAgIGlmIGxl
bihjb21tYW5kLnJldHVybl9wYXJhbWV0ZXJzKSA+IDA6Ci0gICAgICAgICAgICBsaW5lcy5leHRl
bmQob3V0X3BhcmFtZXRlcl9kZWNsYXJhdGlvbnMpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAg
IG1fYWdlbnQtPiUoY29tbWFuZE5hbWUpcyglKGludm9jYXRpb25QYXJhbWV0ZXJzKXMpOycgJSBj
b21tYW5kX2FyZ3MpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnJykKKyAgICAgICAgICAgICAgICBy
ZXN1bHRfZXh0cmFjdGlvbl9uYW1lcy5hcHBlbmQocGFyYW1ldGVyX25hbWUpCiAKLSAgICAgICAg
aWYgbm90IGNvbW1hbmQuaXNfYXN5bmM6Ci0gICAgICAgICAgICBpZiBsZW4oY29tbWFuZC5yZXR1
cm5fcGFyYW1ldGVycykgPiAxOgotICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGlm
ICghZXJyb3IubGVuZ3RoKCkpIHsnKQotICAgICAgICAgICAgICAgIGxpbmVzLmV4dGVuZChvdXRf
cGFyYW1ldGVyX2Fzc2lnbm1lbnRzKQotICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAg
IH0nKQotICAgICAgICAgICAgZWxpZiBsZW4oY29tbWFuZC5yZXR1cm5fcGFyYW1ldGVycykgPT0g
MToKLSAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBpZiAoIWVycm9yLmxlbmd0aCgp
KScpCi0gICAgICAgICAgICAgICAgbGluZXMuZXh0ZW5kKG91dF9wYXJhbWV0ZXJfYXNzaWdubWVu
dHMpCisgICAgICAgICAgICAgICAgcGFyYW1ldGVyX3ZhbHVlID0gcGFyYW1ldGVyX25hbWUKKwor
ICAgICAgICAgICAgICAgIF90eXBlID0gcGFyYW1ldGVyLnR5cGUKKyAgICAgICAgICAgICAgICBp
ZiBpc2luc3RhbmNlKF90eXBlLCBBbGlhc2VkVHlwZSk6CisgICAgICAgICAgICAgICAgICAgIF90
eXBlID0gX3R5cGUuYWxpYXNlZF90eXBlCisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShf
dHlwZSwgRW51bVR5cGUpIGFuZCBfdHlwZS5pc19hbm9ueW1vdXM6CisgICAgICAgICAgICAgICAg
ICAgIF90eXBlID0gX3R5cGUucHJpbWl0aXZlX3R5cGUKKworICAgICAgICAgICAgICAgIGlmIF90
eXBlLmlzX2VudW0oKToKKyAgICAgICAgICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlv
bmFsOgorICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyX3ZhbHVlID0gJyonICsgcGFy
YW1ldGVyX3ZhbHVlCisgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcl92YWx1ZSA9ICdQcm90
b2NvbDo6JXM6OmdldEVudW1Db25zdGFudFZhbHVlKCVzKScgJSAoc2VsZi5oZWxwZXJzX25hbWVz
cGFjZSgpLCBwYXJhbWV0ZXJfdmFsdWUpCisgICAgICAgICAgICAgICAgZWxpZiBDcHBHZW5lcmF0
b3Iuc2hvdWxkX3JlbGVhc2VfYXJndW1lbnQoX3R5cGUsIHBhcmFtZXRlci5pc19vcHRpb25hbCk6
CisgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcl92YWx1ZSA9IHBhcmFtZXRlcl92YWx1ZSAr
ICcucmVsZWFzZU5vbk51bGwoKScKKyAgICAgICAgICAgICAgICBlbGlmIENwcEdlbmVyYXRvci5z
aG91bGRfZGVyZWZlcmVuY2VfYXJndW1lbnQoX3R5cGUsIHBhcmFtZXRlci5pc19vcHRpb25hbCk6
CisgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcl92YWx1ZSA9ICcqJyArIHBhcmFtZXRlcl92
YWx1ZQorICAgICAgICAgICAgICAgIGVsaWYgQ3BwR2VuZXJhdG9yLnNob3VsZF9tb3ZlX2FyZ3Vt
ZW50KF90eXBlLCBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwpOgorICAgICAgICAgICAgICAgICAgICBw
YXJhbWV0ZXJfdmFsdWUgPSAnV1RGTW92ZSglcyknICUgcGFyYW1ldGVyX3ZhbHVlCisKKyAgICAg
ICAgICAgICAgICBwYXJhbV9hcmdzID0geworICAgICAgICAgICAgICAgICAgICAna2V5ZWRTZXRN
ZXRob2QnOiBDcHBHZW5lcmF0b3IuY3BwX3NldHRlcl9tZXRob2RfZm9yX3R5cGUoX3R5cGUpLAor
ICAgICAgICAgICAgICAgICAgICAncGFyYW1ldGVyS2V5JzogcGFyYW1ldGVyLnBhcmFtZXRlcl9u
YW1lLAorICAgICAgICAgICAgICAgICAgICAncGFyYW1ldGVyTmFtZSc6IHBhcmFtZXRlcl9uYW1l
LAorICAgICAgICAgICAgICAgICAgICAncGFyYW1ldGVyVmFsdWUnOiBwYXJhbWV0ZXJfdmFsdWUs
CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29w
dGlvbmFsOgorICAgICAgICAgICAgICAgICAgICByZXN1bHRfY29udmVyc2lvbl9saW5lcy5hcHBl
bmQoJyAgICBpZiAoISElKHBhcmFtZXRlck5hbWUpcyknICUgcGFyYW1fYXJncykKKyAgICAgICAg
ICAgICAgICAgICAgcmVzdWx0X2NvbnZlcnNpb25fbGluZXMuYXBwZW5kKCcgICAgICAgIHByb3Rv
Y29sX2pzb25NZXNzYWdlLT4lKGtleWVkU2V0TWV0aG9kKXMoIiUocGFyYW1ldGVyS2V5KXMiX3Ms
ICUocGFyYW1ldGVyVmFsdWUpcyk7JyAlIHBhcmFtX2FyZ3MpCisgICAgICAgICAgICAgICAgZWxz
ZToKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0X2NvbnZlcnNpb25fbGluZXMuYXBwZW5kKCcg
ICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPiUoa2V5ZWRTZXRNZXRob2QpcygiJShwYXJhbWV0ZXJL
ZXkpcyJfcywgJShwYXJhbWV0ZXJWYWx1ZSlzKTsnICUgcGFyYW1fYXJncykKKworICAgICAgICAg
ICAgbGluZXMuYXBwZW5kKCcgICAgYXV0byByZXN1bHQgPSBtX2FnZW50LT4lKGNvbW1hbmROYW1l
KXMoJShpbnZvY2F0aW9uUGFyYW1ldGVycylzKTsnICUgY29tbWFuZF9hcmdzKQorICAgICAgICAg
ICAgbGluZXMuYXBwZW5kKCcgICAgaWYgKCFyZXN1bHQpIHsnKQorICAgICAgICAgICAgbGluZXMu
YXBwZW5kKCcgICAgICAgIEFTU0VSVCghcmVzdWx0LmVycm9yKCkuaXNFbXB0eSgpKTsnKQorICAg
ICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9y
dFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCByZXN1bHQuZXJy
b3IoKSk7JykKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICByZXR1cm47JykKKyAg
ICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIH0nKQorICAgICAgICAgICAgbGluZXMuYXBwZW5k
KCcnKQorICAgICAgICAgICAgaWYgbGVuKHJlc3VsdF9leHRyYWN0aW9uX25hbWVzKSA9PSAxOgor
ICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGF1dG8gJXMgPSBXVEZNb3ZlKHJlc3Vs
dC52YWx1ZSgpKTsnICUgcmVzdWx0X2V4dHJhY3Rpb25fbmFtZXNbMF0pCiAgICAgICAgICAgICAg
ICAgbGluZXMuYXBwZW5kKCcnKQotCi0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBpZiAo
IWVycm9yLmxlbmd0aCgpKScpCi0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgbV9i
YWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQp
LCBmYWxzZSk7JykKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGVsc2UnKQotICAgICAg
ICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFBy
b3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9y
KSk7JykKKyAgICAgICAgICAgIGVsaWYgbGVuKHJlc3VsdF9leHRyYWN0aW9uX25hbWVzKSA+IDE6
CisgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgYXV0byBbJXNdID0gV1RGTW92ZShy
ZXN1bHQudmFsdWUoKSk7JyAlICIsICIuam9pbihyZXN1bHRfZXh0cmFjdGlvbl9uYW1lcykpCisg
ICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcnKQorICAgICAgICAgICAgbGluZXMuYXBwZW5k
KCcgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7
JykKKyAgICAgICAgICAgIGxpbmVzLmV4dGVuZChyZXN1bHRfY29udmVyc2lvbl9saW5lcykKKyAg
ICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNw
b25zZShwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJvdG9jb2xfanNvbk1lc3NhZ2UpLCBmYWxz
ZSk7JykKIAogICAgICAgICBsaW5lcy5hcHBlbmQoJ30nKQogICAgICAgICByZXR1cm4gc2VsZi53
cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihjb21tYW5kLmNvbmRpdGlvbiwgIlxuIi5qb2lu
KGxpbmVzKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9mcm9udGVuZF9kaXNwYXRjaGVyX2hlYWRlci5weSBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRl
X2NwcF9mcm9udGVuZF9kaXNwYXRjaGVyX2hlYWRlci5weQppbmRleCAxMTlkMjNjMzhjZGYyNGNm
NTZkMGZmYzY2ZDU3YjhhM2Q0ZTJkYTQ0Li5iZWFhMTdjOTgxNTRiN2VlMjJlM2I1Yjk3NmQwMTgz
OTQwYTQ2OTEzIDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfZnJvbnRlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2Vu
ZXJhdGVfY3BwX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5CkBAIC03Myw5ICs3Myw5IEBA
IGNsYXNzIENwcEZyb250ZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvcihDcHBHZW5lcmF0b3Ip
OgogICAgICAgICBoZWFkZXJfaW5jbHVkZXMgPSBbCiAgICAgICAgICAgICAoWyJKYXZhU2NyaXB0
Q29yZSIsICJXZWJLaXQiXSwgKHNlbGYubW9kZWwoKS5mcmFtZXdvcmsubmFtZSwgIiVzUHJvdG9j
b2xPYmplY3RzLmgiICUgc2VsZi5wcm90b2NvbF9uYW1lKCkpKSwKICAgICAgICAgICAgIChbIkph
dmFTY3JpcHRDb3JlIiwgIldlYktpdCJdLCAoIldURiIsICJ3dGYvSlNPTlZhbHVlcy5oIikpLAot
ICAgICAgICAgICAgKFsiSmF2YVNjcmlwdENvcmUiLCAiV2ViS2l0Il0sICgiV1RGIiwgInd0Zi90
ZXh0L1dURlN0cmluZy5oIikpCisgICAgICAgICAgICAoWyJKYXZhU2NyaXB0Q29yZSIsICJXZWJL
aXQiXSwgKCJXVEYiLCAid3RmL09wdGlvbmFsLmgiKSksCisgICAgICAgICAgICAoWyJKYXZhU2Ny
aXB0Q29yZSIsICJXZWJLaXQiXSwgKCJXVEYiLCAid3RmL3RleHQvV1RGU3RyaW5nLmgiKSksCiAg
ICAgICAgIF0KLQogICAgICAgICByZXR1cm4gJ1xuJy5qb2luKHNlbGYuZ2VuZXJhdGVfaW5jbHVk
ZXNfZnJvbV9lbnRyaWVzKGhlYWRlcl9pbmNsdWRlcykpCiAKICAgICBkZWYgX2dlbmVyYXRlX2Fu
b255bW91c19lbnVtX2Zvcl9wYXJhbWV0ZXIoc2VsZiwgcGFyYW1ldGVyLCBldmVudCk6CkBAIC0x
MTcsOCArMTE3LDEzIEBAIGNsYXNzIENwcEZyb250ZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRv
cihDcHBHZW5lcmF0b3IpOgogICAgICAgICBmb3JtYWxfcGFyYW1ldGVycyA9IFtdCiAgICAgICAg
IGxpbmVzID0gW10KICAgICAgICAgZm9yIHBhcmFtZXRlciBpbiBldmVudC5ldmVudF9wYXJhbWV0
ZXJzOgotICAgICAgICAgICAgZm9ybWFsX3BhcmFtZXRlcnMuYXBwZW5kKCclcyAlcycgJSAoQ3Bw
R2VuZXJhdG9yLmNwcF90eXBlX2Zvcl9jaGVja2VkX2Zvcm1hbF9ldmVudF9wYXJhbWV0ZXIocGFy
YW1ldGVyKSwgcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKSkKLSAgICAgICAgICAgIGlmIGlzaW5z
dGFuY2UocGFyYW1ldGVyLnR5cGUsIEVudW1UeXBlKSBhbmQgcGFyYW1ldGVyLnBhcmFtZXRlcl9u
YW1lIG5vdCBpbiB1c2VkX2VudW1fbmFtZXM6CisgICAgICAgICAgICBwYXJhbWV0ZXJfbmFtZSA9
IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZQorICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29w
dGlvbmFsOgorICAgICAgICAgICAgICAgIHBhcmFtZXRlcl9uYW1lID0gJ29wdF8nICsgcGFyYW1l
dGVyX25hbWUKKworICAgICAgICAgICAgZm9ybWFsX3BhcmFtZXRlcnMuYXBwZW5kKCclcyAlcycg
JSAoQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl9ldmVudF9wYXJhbWV0ZXIocGFyYW1ldGVyLnR5
cGUsIHBhcmFtZXRlci5pc19vcHRpb25hbCksIHBhcmFtZXRlcl9uYW1lKSkKKworICAgICAgICAg
ICAgaWYgaXNpbnN0YW5jZShwYXJhbWV0ZXIudHlwZSwgRW51bVR5cGUpIGFuZCBwYXJhbWV0ZXIu
dHlwZS5pc19hbm9ueW1vdXMgYW5kIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSBub3QgaW4gdXNl
ZF9lbnVtX25hbWVzOgogICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0
ZV9hbm9ueW1vdXNfZW51bV9mb3JfcGFyYW1ldGVyKHBhcmFtZXRlciwgZXZlbnQpKQogICAgICAg
ICAgICAgICAgIHVzZWRfZW51bV9uYW1lcy5hZGQocGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29k
ZWdlbi9nZW5lcmF0ZV9jcHBfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRl
X2NwcF9mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5CmluZGV4IDY2ZGM2ZTE4
NWNmZTJiNjFiMWVjYTc3NTczY2UxNjc0ZTZiMzVhNDkuLjc2M2UwMWRmYjc4Y2RlYzhkNjAzMGQy
ZWRjMzUwNTQ4OTE3Njk4MGMgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9mcm9udGVuZF9kaXNwYXRjaGVyX2lt
cGxlbWVudGF0aW9uLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0
aW9uLnB5CkBAIC0zMywxMiArMzMsMTIgQEAgdHJ5OgogICAgIGZyb20gLmNwcF9nZW5lcmF0b3Ig
aW1wb3J0IENwcEdlbmVyYXRvcgogICAgIGZyb20gLmNwcF9nZW5lcmF0b3JfdGVtcGxhdGVzIGlt
cG9ydCBDcHBHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgQ3BwVGVtcGxhdGVzCiAgICAgZnJvbSAuZ2Vu
ZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IsIHVjZmlyc3QKLSAgICBmcm9tIC5tb2RlbHMgaW1wb3J0
IE9iamVjdFR5cGUsIEFycmF5VHlwZQorICAgIGZyb20gLm1vZGVscyBpbXBvcnQgT2JqZWN0VHlw
ZSwgQXJyYXlUeXBlLCBBbGlhc2VkVHlwZSwgRW51bVR5cGUKIGV4Y2VwdDoKICAgICBmcm9tIGNw
cF9nZW5lcmF0b3IgaW1wb3J0IENwcEdlbmVyYXRvcgogICAgIGZyb20gY3BwX2dlbmVyYXRvcl90
ZW1wbGF0ZXMgaW1wb3J0IENwcEdlbmVyYXRvclRlbXBsYXRlcyBhcyBDcHBUZW1wbGF0ZXMKICAg
ICBmcm9tIGdlbmVyYXRvciBpbXBvcnQgR2VuZXJhdG9yLCB1Y2ZpcnN0Ci0gICAgZnJvbSBtb2Rl
bHMgaW1wb3J0IE9iamVjdFR5cGUsIEFycmF5VHlwZQorICAgIGZyb20gbW9kZWxzIGltcG9ydCBP
YmplY3RUeXBlLCBBcnJheVR5cGUsIEFsaWFzZWRUeXBlLCBFbnVtVHlwZQogCiBsb2cgPSBsb2dn
aW5nLmdldExvZ2dlcignZ2xvYmFsJykKIApAQCAtNzEsOSArNzEsNyBAQCBjbGFzcyBDcHBGcm9u
dGVuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAg
IGRlZiBfZ2VuZXJhdGVfc2Vjb25kYXJ5X2hlYWRlcl9pbmNsdWRlcyhzZWxmKToKICAgICAgICAg
aGVhZGVyX2luY2x1ZGVzID0gWwogICAgICAgICAgICAgKFsiSmF2YVNjcmlwdENvcmUiLCAiV2Vi
S2l0Il0sICgiSmF2YVNjcmlwdENvcmUiLCAiaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kUm91
dGVyLmgiKSksCi0gICAgICAgICAgICAoWyJKYXZhU2NyaXB0Q29yZSIsICJXZWJLaXQiXSwgKCJX
VEYiLCAid3RmL3RleHQvQ1N0cmluZy5oIikpCiAgICAgICAgIF0KLQogICAgICAgICByZXR1cm4g
J1xuJy5qb2luKHNlbGYuZ2VuZXJhdGVfaW5jbHVkZXNfZnJvbV9lbnRyaWVzKGhlYWRlcl9pbmNs
dWRlcykpCiAKICAgICBkZWYgX2dlbmVyYXRlX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb25zX2Zv
cl9kb21haW4oc2VsZiwgZG9tYWluKToKQEAgLTkwLDI3ICs4OCw0MyBAQCBjbGFzcyBDcHBGcm9u
dGVuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAg
ICAgICBmb3JtYWxfcGFyYW1ldGVycyA9IFtdCiAKICAgICAgICAgZm9yIHBhcmFtZXRlciBpbiBl
dmVudC5ldmVudF9wYXJhbWV0ZXJzOgorICAgICAgICAgICAgcGFyYW1ldGVyX25hbWUgPSBwYXJh
bWV0ZXIucGFyYW1ldGVyX25hbWUKKyAgICAgICAgICAgIGlmIHBhcmFtZXRlci5pc19vcHRpb25h
bDoKKyAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfbmFtZSA9ICdvcHRfJyArIHBhcmFtZXRlcl9u
YW1lCiAKLSAgICAgICAgICAgIHBhcmFtZXRlcl92YWx1ZSA9IHBhcmFtZXRlci5wYXJhbWV0ZXJf
bmFtZQotICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsIGFuZCBub3QgQ3BwR2Vu
ZXJhdG9yLnNob3VsZF9wYXNzX2J5X2NvcHlfZm9yX3JldHVybl90eXBlKHBhcmFtZXRlci50eXBl
KToKKyAgICAgICAgICAgIHBhcmFtZXRlcl92YWx1ZSA9IHBhcmFtZXRlcl9uYW1lCisKKyAgICAg
ICAgICAgIF90eXBlID0gcGFyYW1ldGVyLnR5cGUKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uo
X3R5cGUsIEFsaWFzZWRUeXBlKToKKyAgICAgICAgICAgICAgICBfdHlwZSA9IF90eXBlLmFsaWFz
ZWRfdHlwZQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgRW51bVR5cGUpIGFuZCBf
dHlwZS5pc19hbm9ueW1vdXM6CisgICAgICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5wcmltaXRp
dmVfdHlwZQorCisgICAgICAgICAgICBpZiBfdHlwZS5pc19lbnVtKCk6CisgICAgICAgICAgICAg
ICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAgICAgICBwYXJhbWV0
ZXJfdmFsdWUgPSAnKicgKyBwYXJhbWV0ZXJfdmFsdWUKKyAgICAgICAgICAgICAgICBwYXJhbWV0
ZXJfdmFsdWUgPSAnUHJvdG9jb2w6OiVzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZSglcyknICUgKHNl
bGYuaGVscGVyc19uYW1lc3BhY2UoKSwgcGFyYW1ldGVyX3ZhbHVlKQorICAgICAgICAgICAgZWxp
ZiBDcHBHZW5lcmF0b3Iuc2hvdWxkX3JlbGVhc2VfYXJndW1lbnQoX3R5cGUsIHBhcmFtZXRlci5p
c19vcHRpb25hbCk6CisgICAgICAgICAgICAgICAgcGFyYW1ldGVyX3ZhbHVlID0gcGFyYW1ldGVy
X3ZhbHVlICsgJy5yZWxlYXNlTm9uTnVsbCgpJworICAgICAgICAgICAgZWxpZiBDcHBHZW5lcmF0
b3Iuc2hvdWxkX2RlcmVmZXJlbmNlX2FyZ3VtZW50KF90eXBlLCBwYXJhbWV0ZXIuaXNfb3B0aW9u
YWwpOgogICAgICAgICAgICAgICAgIHBhcmFtZXRlcl92YWx1ZSA9ICcqJyArIHBhcmFtZXRlcl92
YWx1ZQotICAgICAgICAgICAgaWYgcGFyYW1ldGVyLnR5cGUuaXNfZW51bSgpOgotICAgICAgICAg
ICAgICAgIHBhcmFtZXRlcl92YWx1ZSA9ICdJbnNwZWN0b3I6OlByb3RvY29sOjolczo6Z2V0RW51
bUNvbnN0YW50VmFsdWUoJXMpJyAlIChzZWxmLmhlbHBlcnNfbmFtZXNwYWNlKCksIHBhcmFtZXRl
cl92YWx1ZSkKKyAgICAgICAgICAgIGVsaWYgQ3BwR2VuZXJhdG9yLnNob3VsZF9tb3ZlX2FyZ3Vt
ZW50KF90eXBlLCBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwpOgorICAgICAgICAgICAgICAgIHBhcmFt
ZXRlcl92YWx1ZSA9ICdXVEZNb3ZlKCVzKScgJSBwYXJhbWV0ZXJfdmFsdWUKIAogICAgICAgICAg
ICAgcGFyYW1ldGVyX2FyZ3MgPSB7Ci0gICAgICAgICAgICAgICAgJ3BhcmFtZXRlclR5cGUnOiBD
cHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX3N0YWNrX291dF9wYXJhbWV0ZXIocGFyYW1ldGVyKSwK
LSAgICAgICAgICAgICAgICAncGFyYW1ldGVyTmFtZSc6IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFt
ZSwKKyAgICAgICAgICAgICAgICAncGFyYW1ldGVyS2V5JzogcGFyYW1ldGVyLnBhcmFtZXRlcl9u
YW1lLAorICAgICAgICAgICAgICAgICdwYXJhbWV0ZXJOYW1lJzogcGFyYW1ldGVyX25hbWUsCiAg
ICAgICAgICAgICAgICAgJ3BhcmFtZXRlclZhbHVlJzogcGFyYW1ldGVyX3ZhbHVlLAotICAgICAg
ICAgICAgICAgICdrZXllZFNldE1ldGhvZCc6IENwcEdlbmVyYXRvci5jcHBfc2V0dGVyX21ldGhv
ZF9mb3JfdHlwZShwYXJhbWV0ZXIudHlwZSksCisgICAgICAgICAgICAgICAgJ2tleWVkU2V0TWV0
aG9kJzogQ3BwR2VuZXJhdG9yLmNwcF9zZXR0ZXJfbWV0aG9kX2Zvcl90eXBlKF90eXBlKSwKICAg
ICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgotICAg
ICAgICAgICAgICAgIHBhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICBpZiAoJShwYXJh
bWV0ZXJOYW1lKXMpJyAlIHBhcmFtZXRlcl9hcmdzKQotICAgICAgICAgICAgICAgIHBhcmFtZXRl
cl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICAgICAgcGFyYW1zT2JqZWN0LT4lKGtleWVkU2V0TWV0
aG9kKXMoIiUocGFyYW1ldGVyTmFtZSlzIl9zLCAlKHBhcmFtZXRlclZhbHVlKXMpOycgJSBwYXJh
bWV0ZXJfYXJncykKKyAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5k
KCcgICAgaWYgKCEhJShwYXJhbWV0ZXJOYW1lKXMpJyAlIHBhcmFtZXRlcl9hcmdzKQorICAgICAg
ICAgICAgICAgIHBhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICAgICAgcHJvdG9jb2xf
cGFyYW1zT2JqZWN0LT4lKGtleWVkU2V0TWV0aG9kKXMoIiUocGFyYW1ldGVyS2V5KXMiX3MsICUo
cGFyYW1ldGVyVmFsdWUpcyk7JyAlIHBhcmFtZXRlcl9hcmdzKQogICAgICAgICAgICAgZWxzZToK
LSAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAgcGFyYW1z
T2JqZWN0LT4lKGtleWVkU2V0TWV0aG9kKXMoIiUocGFyYW1ldGVyTmFtZSlzIl9zLCAlKHBhcmFt
ZXRlclZhbHVlKXMpOycgJSBwYXJhbWV0ZXJfYXJncykKKyAgICAgICAgICAgICAgICBwYXJhbWV0
ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT4lKGtleWVk
U2V0TWV0aG9kKXMoIiUocGFyYW1ldGVyS2V5KXMiX3MsICUocGFyYW1ldGVyVmFsdWUpcyk7JyAl
IHBhcmFtZXRlcl9hcmdzKQogCi0gICAgICAgICAgICBmb3JtYWxfcGFyYW1ldGVycy5hcHBlbmQo
JyVzICVzJyAlIChDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX2NoZWNrZWRfZm9ybWFsX2V2ZW50
X3BhcmFtZXRlcihwYXJhbWV0ZXIpLCBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpKQorICAgICAg
ICAgICAgZm9ybWFsX3BhcmFtZXRlcnMuYXBwZW5kKCclcyAlcycgJSAoQ3BwR2VuZXJhdG9yLmNw
cF90eXBlX2Zvcl9ldmVudF9wYXJhbWV0ZXIoX3R5cGUsIHBhcmFtZXRlci5pc19vcHRpb25hbCks
IHBhcmFtZXRlcl9uYW1lKSkKIAogICAgICAgICBldmVudF9hcmdzID0gewogICAgICAgICAgICAg
J2RvbWFpbk5hbWUnOiBkb21haW4uZG9tYWluX25hbWUsCkBAIC0xMjAsMTUgKzEzNCwxNSBAQCBj
bGFzcyBDcHBGcm9udGVuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihDcHBHZW5l
cmF0b3IpOgogCiAgICAgICAgIGxpbmVzLmFwcGVuZCgndm9pZCAlKGRvbWFpbk5hbWUpc0Zyb250
ZW5kRGlzcGF0Y2hlcjo6JShldmVudE5hbWUpcyglKGZvcm1hbFBhcmFtZXRlcnMpcyknICUgZXZl
bnRfYXJncykKICAgICAgICAgbGluZXMuYXBwZW5kKCd7JykKLSAgICAgICAgbGluZXMuYXBwZW5k
KCcgICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0
ZSgpOycpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmco
Im1ldGhvZCJfcywgIiUoZG9tYWluTmFtZSlzLiUoZXZlbnROYW1lKXMiX3MpOycgJSBldmVudF9h
cmdzKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdl
ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsnKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBw
cm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICIlKGRvbWFpbk5hbWUp
cy4lKGV2ZW50TmFtZSlzIl9zKTsnICUgZXZlbnRfYXJncykKIAogICAgICAgICBpZiBsZW4ocGFy
YW1ldGVyX2Fzc2lnbm1lbnRzKSA+IDA6Ci0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBS
ZWY8SlNPTjo6T2JqZWN0PiBwYXJhbXNPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOycp
CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBhdXRvIHByb3RvY29sX3BhcmFtc09iamVj
dCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7JykKICAgICAgICAgICAgIGxpbmVzLmV4dGVuZChw
YXJhbWV0ZXJfYXNzaWdubWVudHMpCi0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBqc29u
TWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiX3MsIFdURk1vdmUocGFyYW1zT2JqZWN0KSk7JykK
KyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRP
YmplY3QoInBhcmFtcyJfcywgV1RGTW92ZShwcm90b2NvbF9wYXJhbXNPYmplY3QpKTsnKQogCiAg
ICAgICAgIGxpbmVzLmFwcGVuZCgnJykKLSAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgbV9mcm9u
dGVuZFJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsnKQorICAg
ICAgICBsaW5lcy5hcHBlbmQoJyAgICBtX2Zyb250ZW5kUm91dGVyLnNlbmRFdmVudChwcm90b2Nv
bF9qc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOycpCiAgICAgICAgIGxpbmVzLmFwcGVuZCgn
fScpCiAgICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGV2
ZW50LmNvbmRpdGlvbiwgIlxuIi5qb2luKGxpbmVzKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9wcm90b2Nv
bF90eXBlc19oZWFkZXIucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfcHJvdG9jb2xfdHlwZXNfaGVhZGVyLnB5CmluZGV4IDAw
MTkyNGRlMGViMDgyN2Y3NDVkM2Q3MzZjMGFiOTIwMjEyNGRiMzYuLjc4MWQwNmQ5NDA1NjZiMTcy
ZWM1NWMyZWZiZDEwMWEwMDUwZDcxYTggMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9wcm90b2NvbF90eXBlc19o
ZWFkZXIucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2Nv
ZGVnZW4vZ2VuZXJhdGVfY3BwX3Byb3RvY29sX3R5cGVzX2hlYWRlci5weQpAQCAtODUsOSArODUs
MTAgQEAgY2xhc3MgQ3BwUHJvdG9jb2xUeXBlc0hlYWRlckdlbmVyYXRvcihDcHBHZW5lcmF0b3Ip
OgogICAgIGRlZiBfZ2VuZXJhdGVfc2Vjb25kYXJ5X2hlYWRlcl9pbmNsdWRlcyhzZWxmKToKICAg
ICAgICAgaGVhZGVyX2luY2x1ZGVzID0gWwogICAgICAgICAgICAgKFsiSmF2YVNjcmlwdENvcmUi
LCAiV2ViS2l0Il0sICgiSmF2YVNjcmlwdENvcmUiLCAiaW5zcGVjdG9yL0luc3BlY3RvclByb3Rv
Y29sVHlwZXMuaCIpKSwKLSAgICAgICAgICAgIChbIkphdmFTY3JpcHRDb3JlIiwgIldlYktpdCJd
LCAoIldURiIsICJ3dGYvQXNzZXJ0aW9ucy5oIikpCisgICAgICAgICAgICAoWyJKYXZhU2NyaXB0
Q29yZSIsICJXZWJLaXQiXSwgKCJXVEYiLCAid3RmL0pTT05WYWx1ZXMuaCIpKSwKKyAgICAgICAg
ICAgIChbIkphdmFTY3JpcHRDb3JlIiwgIldlYktpdCJdLCAoIldURiIsICJ3dGYvT3B0aW9uYWwu
aCIpKSwKKyAgICAgICAgICAgIChbIkphdmFTY3JpcHRDb3JlIiwgIldlYktpdCJdLCAoIldURiIs
ICJ3dGYvdGV4dC9XVEZTdHJpbmcuaCIpKSwKICAgICAgICAgXQotCiAgICAgICAgIHJldHVybiAn
XG4nLmpvaW4oc2VsZi5nZW5lcmF0ZV9pbmNsdWRlc19mcm9tX2VudHJpZXMoaGVhZGVyX2luY2x1
ZGVzKSkKIAogICAgIGRlZiBfZ2VuZXJhdGVfdmVyc2lvbnMoc2VsZiwgZG9tYWlucyk6CkBAIC0y
MzIsOSArMjMzLDYgQEAgY2xhc3MgQ3BwUHJvdG9jb2xUeXBlc0hlYWRlckdlbmVyYXRvcihDcHBH
ZW5lcmF0b3IpOgogICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRp
dGlvbihkb21haW4uY29uZGl0aW9uLCAnXG4nLmpvaW4obGluZXMpKQogCiAgICAgZGVmIF9nZW5l
cmF0ZV9jbGFzc19mb3Jfb2JqZWN0X2RlY2xhcmF0aW9uKHNlbGYsIHR5cGVfZGVjbGFyYXRpb24s
IGRvbWFpbik6Ci0gICAgICAgIGlmIGxlbih0eXBlX2RlY2xhcmF0aW9uLnR5cGVfbWVtYmVycykg
PT0gMDoKLSAgICAgICAgICAgIHJldHVybiAnJwotCiAgICAgICAgIGVudW1fbWVtYmVycyA9IFtt
ZW1iZXIgZm9yIG1lbWJlciBpbiB0eXBlX2RlY2xhcmF0aW9uLnR5cGVfbWVtYmVycyBpZiBpc2lu
c3RhbmNlKG1lbWJlci50eXBlLCBFbnVtVHlwZSkgYW5kIG1lbWJlci50eXBlLmlzX2Fub255bW91
c10KICAgICAgICAgcmVxdWlyZWRfbWVtYmVycyA9IFttZW1iZXIgZm9yIG1lbWJlciBpbiB0eXBl
X2RlY2xhcmF0aW9uLnR5cGVfbWVtYmVycyBpZiBub3QgbWVtYmVyLmlzX29wdGlvbmFsXQogICAg
ICAgICBvcHRpb25hbF9tZW1iZXJzID0gW21lbWJlciBmb3IgbWVtYmVyIGluIHR5cGVfZGVjbGFy
YXRpb24udHlwZV9tZW1iZXJzIGlmIG1lbWJlci5pc19vcHRpb25hbF0KQEAgLTI0NiwxMSArMjQ0
LDEyIEBAIGNsYXNzIENwcFByb3RvY29sVHlwZXNIZWFkZXJHZW5lcmF0b3IoQ3BwR2VuZXJhdG9y
KToKICAgICAgICAgYmFzZV9jbGFzcyA9ICdKU09OOjpPYmplY3QnCiAgICAgICAgIGlmIG5vdCBH
ZW5lcmF0b3IudHlwZV9oYXNfb3Blbl9maWVsZHModHlwZV9kZWNsYXJhdGlvbi50eXBlKToKICAg
ICAgICAgICAgIGJhc2VfY2xhc3MgPSBiYXNlX2NsYXNzICsgJ0Jhc2UnCi0gICAgICAgIGxpbmVz
LmFwcGVuZCgnY2xhc3MgJXMgOiBwdWJsaWMgJXMgeycgJSAob2JqZWN0X25hbWUsIGJhc2VfY2xh
c3MpKQorICAgICAgICBsaW5lcy5hcHBlbmQoJ2NsYXNzICVzIGZpbmFsIDogcHVibGljICVzIHsn
ICUgKG9iamVjdF9uYW1lLCBiYXNlX2NsYXNzKSkKICAgICAgICAgbGluZXMuYXBwZW5kKCdwdWJs
aWM6JykKICAgICAgICAgZm9yIGVudW1fbWVtYmVyIGluIGVudW1fbWVtYmVyczoKICAgICAgICAg
ICAgIGxpbmVzLmFwcGVuZCgnICAgIC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5IG5hbWUgXCclc1wn
IHdoaWxlIGdlbmVyYXRpbmcgJXMuJyAlIChlbnVtX21lbWJlci5tZW1iZXJfbmFtZSwgb2JqZWN0
X25hbWUpKQogICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX3N0cnVjdF9m
b3JfYW5vbnltb3VzX2VudW1fbWVtYmVyKGVudW1fbWVtYmVyKSkKKyAgICAgICAgICAgIGxpbmVz
LmFwcGVuZCgnJykKICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2J1aWxkZXJf
c3RhdGVfZW51bSh0eXBlX2RlY2xhcmF0aW9uKSkKIAogICAgICAgICBjb25zdHJ1Y3Rvcl9leGFt
cGxlID0gW10KQEAgLTI3Nyw3ICsyNzYsNyBAQCBjbGFzcyBDcHBQcm90b2NvbFR5cGVzSGVhZGVy
R2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAgICAgICBvcGVuX21lbWJlcnMgPSBHZW5l
cmF0b3Iub3Blbl9maWVsZHModHlwZV9kZWNsYXJhdGlvbikKICAgICAgICAgICAgIGZvciB0eXBl
X21lbWJlciBpbiBvcGVuX21lbWJlcnM6CiAgICAgICAgICAgICAgICAgZXhwb3J0X21hY3JvID0g
c2VsZi5tb2RlbCgpLmZyYW1ld29yay5zZXR0aW5nKCdleHBvcnRfbWFjcm8nLCBOb25lKQotICAg
ICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICVzIHN0YXRpYyBjb25zdCBjaGFyKiAlczsn
ICUgKGV4cG9ydF9tYWNybywgdWNmaXJzdCh0eXBlX21lbWJlci5tZW1iZXJfbmFtZSkpKQorICAg
ICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICVzIHN0YXRpYyBjb25zdCBjaGFyKiAlc0tl
eTsnICUgKGV4cG9ydF9tYWNybywgdHlwZV9tZW1iZXIubWVtYmVyX25hbWUpKQogCiAgICAgICAg
IGxpbmVzLmFwcGVuZCgnfTsnKQogICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRf
Zm9yX2NvbmRpdGlvbih0eXBlX2RlY2xhcmF0aW9uLmNvbmRpdGlvbiwgJ1xuJy5qb2luKGxpbmVz
KSkKQEAgLTMyOCw0NyArMzI3LDU2IEBAIGNsYXNzIENwcFByb3RvY29sVHlwZXNIZWFkZXJHZW5l
cmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKIAog
ICAgIGRlZiBfZ2VuZXJhdGVfYnVpbGRlcl9zZXR0ZXJfZm9yX21lbWJlcihzZWxmLCB0eXBlX21l
bWJlciwgZG9tYWluKToKKyAgICAgICAgbWVtYmVyX25hbWUgPSAnaW5fJyArIHR5cGVfbWVtYmVy
Lm1lbWJlcl9uYW1lCisKKyAgICAgICAgbWVtYmVyX3ZhbHVlID0gbWVtYmVyX25hbWUKKyAgICAg
ICAgaWYgdHlwZV9tZW1iZXIudHlwZS5pc19lbnVtKCk6CisgICAgICAgICAgICBtZW1iZXJfdmFs
dWUgPSAnUHJvdG9jb2w6OiVzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZSglcyknICUgKHNlbGYuaGVs
cGVyc19uYW1lc3BhY2UoKSwgbWVtYmVyX3ZhbHVlKQorICAgICAgICBlbGlmIENwcEdlbmVyYXRv
ci5zaG91bGRfbW92ZV9hcmd1bWVudCh0eXBlX21lbWJlci50eXBlLCBGYWxzZSk6CisgICAgICAg
ICAgICBtZW1iZXJfdmFsdWUgPSAnV1RGTW92ZSglcyknICUgbWVtYmVyX3ZhbHVlCisKICAgICAg
ICAgc2V0dGVyX2FyZ3MgPSB7CiAgICAgICAgICAgICAnY2FtZWxOYW1lJzogdWNmaXJzdCh0eXBl
X21lbWJlci5tZW1iZXJfbmFtZSksCi0gICAgICAgICAgICAna2V5ZWRTZXQnOiBDcHBHZW5lcmF0
b3IuY3BwX3NldHRlcl9tZXRob2RfZm9yX3R5cGUodHlwZV9tZW1iZXIudHlwZSksCi0gICAgICAg
ICAgICAnbmFtZSc6IHR5cGVfbWVtYmVyLm1lbWJlcl9uYW1lLAotICAgICAgICAgICAgJ3BhcmFt
ZXRlclR5cGUnOiBDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX3R5cGVfbWVtYmVyKHR5cGVfbWVt
YmVyKSwKLSAgICAgICAgICAgICdoZWxwZXJzTmFtZXNwYWNlJzogc2VsZi5oZWxwZXJzX25hbWVz
cGFjZSgpLAorICAgICAgICAgICAgJ3NldHRlcic6IENwcEdlbmVyYXRvci5jcHBfc2V0dGVyX21l
dGhvZF9mb3JfdHlwZSh0eXBlX21lbWJlci50eXBlKSwKKyAgICAgICAgICAgICdtZW1iZXJUeXBl
JzogQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl90eXBlX21lbWJlcl9hcmd1bWVudCh0eXBlX21l
bWJlci50eXBlLCB0eXBlX21lbWJlci5tZW1iZXJfbmFtZSksCisgICAgICAgICAgICAnbWVtYmVy
S2V5JzogdHlwZV9tZW1iZXIubWVtYmVyX25hbWUsCisgICAgICAgICAgICAnbWVtYmVyTmFtZSc6
IG1lbWJlcl9uYW1lLAorICAgICAgICAgICAgJ21lbWJlclZhbHVlJzogbWVtYmVyX3ZhbHVlLAog
ICAgICAgICB9CiAKICAgICAgICAgbGluZXMgPSBbXQogICAgICAgICBsaW5lcy5hcHBlbmQoJycp
Ci0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBCdWlsZGVyPFNUQVRFIHwgJShjYW1lbE5h
bWUpc1NldD4mIHNldCUoY2FtZWxOYW1lKXMoJShwYXJhbWV0ZXJUeXBlKXMgdmFsdWUpJyAlIHNl
dHRlcl9hcmdzKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgQnVpbGRlcjxTVEFURSB8
ICUoY2FtZWxOYW1lKXNTZXQ+JiBzZXQlKGNhbWVsTmFtZSlzKCUobWVtYmVyVHlwZSlzICUobWVt
YmVyTmFtZSlzKScgJSBzZXR0ZXJfYXJncykKICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAg
IHsnKQotICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEo
U1RBVEUgJiAlKGNhbWVsTmFtZSlzU2V0KSwgcHJvcGVydHlfJShuYW1lKXNfYWxyZWFkeV9zZXQp
OycgJSBzZXR0ZXJfYXJncykKLQotICAgICAgICBpZiBpc2luc3RhbmNlKHR5cGVfbWVtYmVyLnR5
cGUsIEVudW1UeXBlKToKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICAgICAgbV9y
ZXN1bHQtPiUoa2V5ZWRTZXQpcygiJShuYW1lKXMiX3MsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OiUo
aGVscGVyc05hbWVzcGFjZSlzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZSh2YWx1ZSkpOycgJSBzZXR0
ZXJfYXJncykKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAg
ICAgICAgbV9yZXN1bHQtPiUoa2V5ZWRTZXQpcygiJShuYW1lKXMiX3MsIHZhbHVlKTsnICUgc2V0
dGVyX2FyZ3MpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoIShTVEFURSAmICUoY2FtZWxOYW1lKXNTZXQpLCBwcm9wZXJ0eV8lKG1lbWJlcktleSlzX2Fs
cmVhZHlfc2V0KTsnICUgc2V0dGVyX2FyZ3MpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAg
ICAgICAgbV9yZXN1bHQtPiUoc2V0dGVyKXMoIiUobWVtYmVyS2V5KXMiX3MsICUobWVtYmVyVmFs
dWUpcyk7JyAlIHNldHRlcl9hcmdzKQogICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgICAg
IHJldHVybiBjYXN0U3RhdGU8JShjYW1lbE5hbWUpc1NldD4oKTsnICUgc2V0dGVyX2FyZ3MpCiAg
ICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICB9JykKICAgICAgICAgcmV0dXJuICdcbicuam9p
bihsaW5lcykKIAogICAgIGRlZiBfZ2VuZXJhdGVfdW5jaGVja2VkX3NldHRlcl9mb3JfbWVtYmVy
KHNlbGYsIHR5cGVfbWVtYmVyLCBkb21haW4pOgorICAgICAgICBtZW1iZXJfbmFtZSA9ICdpbl9v
cHRfJyArIHR5cGVfbWVtYmVyLm1lbWJlcl9uYW1lCisKKyAgICAgICAgbWVtYmVyX3ZhbHVlID0g
bWVtYmVyX25hbWUKKyAgICAgICAgaWYgdHlwZV9tZW1iZXIudHlwZS5pc19lbnVtKCk6CisgICAg
ICAgICAgICBtZW1iZXJfdmFsdWUgPSAnUHJvdG9jb2w6OiVzOjpnZXRFbnVtQ29uc3RhbnRWYWx1
ZSglcyknICUgKHNlbGYuaGVscGVyc19uYW1lc3BhY2UoKSwgbWVtYmVyX3ZhbHVlKQorICAgICAg
ICBlbGlmIENwcEdlbmVyYXRvci5zaG91bGRfbW92ZV9hcmd1bWVudCh0eXBlX21lbWJlci50eXBl
LCBGYWxzZSk6CisgICAgICAgICAgICBtZW1iZXJfdmFsdWUgPSAnV1RGTW92ZSglcyknICUgbWVt
YmVyX3ZhbHVlCisKICAgICAgICAgc2V0dGVyX2FyZ3MgPSB7CiAgICAgICAgICAgICAnY2FtZWxO
YW1lJzogdWNmaXJzdCh0eXBlX21lbWJlci5tZW1iZXJfbmFtZSksCi0gICAgICAgICAgICAna2V5
ZWRTZXQnOiBDcHBHZW5lcmF0b3IuY3BwX3NldHRlcl9tZXRob2RfZm9yX3R5cGUodHlwZV9tZW1i
ZXIudHlwZSksCi0gICAgICAgICAgICAnbmFtZSc6IHR5cGVfbWVtYmVyLm1lbWJlcl9uYW1lLAot
ICAgICAgICAgICAgJ3BhcmFtZXRlclR5cGUnOiBDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX3R5
cGVfbWVtYmVyKHR5cGVfbWVtYmVyKSwKLSAgICAgICAgICAgICdoZWxwZXJzTmFtZXNwYWNlJzog
c2VsZi5oZWxwZXJzX25hbWVzcGFjZSgpLAorICAgICAgICAgICAgJ3NldHRlcic6IENwcEdlbmVy
YXRvci5jcHBfc2V0dGVyX21ldGhvZF9mb3JfdHlwZSh0eXBlX21lbWJlci50eXBlKSwKKyAgICAg
ICAgICAgICdtZW1iZXJLZXknOiB0eXBlX21lbWJlci5tZW1iZXJfbmFtZSwKKyAgICAgICAgICAg
ICdtZW1iZXJOYW1lJzogbWVtYmVyX25hbWUsCisgICAgICAgICAgICAnbWVtYmVyVmFsdWUnOiBt
ZW1iZXJfdmFsdWUsCisgICAgICAgICAgICAnbWVtYmVyVHlwZSc6IENwcEdlbmVyYXRvci5jcHBf
dHlwZV9mb3JfdHlwZV9tZW1iZXJfYXJndW1lbnQodHlwZV9tZW1iZXIudHlwZSwgdHlwZV9tZW1i
ZXIubWVtYmVyX25hbWUpLAogICAgICAgICB9CiAKICAgICAgICAgbGluZXMgPSBbXQogICAgICAg
ICBsaW5lcy5hcHBlbmQoJycpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIHZvaWQgc2V0JShj
YW1lbE5hbWUpcyglKHBhcmFtZXRlclR5cGUpcyB2YWx1ZSknICUgc2V0dGVyX2FyZ3MpCisgICAg
ICAgIGxpbmVzLmFwcGVuZCgnICAgIHZvaWQgc2V0JShjYW1lbE5hbWUpcyglKG1lbWJlclR5cGUp
cyAlKG1lbWJlck5hbWUpcyknICUgc2V0dGVyX2FyZ3MpCiAgICAgICAgIGxpbmVzLmFwcGVuZCgn
ICAgIHsnKQotICAgICAgICBpZiBpc2luc3RhbmNlKHR5cGVfbWVtYmVyLnR5cGUsIEVudW1UeXBl
KToKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBKU09OOjpPYmplY3RCYXNlOjol
KGtleWVkU2V0KXMoIiUobmFtZSlzIl9zLCBJbnNwZWN0b3I6OlByb3RvY29sOjolKGhlbHBlcnNO
YW1lc3BhY2Upczo6Z2V0RW51bUNvbnN0YW50VmFsdWUodmFsdWUpKTsnICUgc2V0dGVyX2FyZ3Mp
Ci0gICAgICAgIGVsaWYgQ3BwR2VuZXJhdG9yLnNob3VsZF91c2VfcmVmZXJlbmNlc19mb3JfdHlw
ZSh0eXBlX21lbWJlci50eXBlKToKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBK
U09OOjpPYmplY3RCYXNlOjolKGtleWVkU2V0KXMoIiUobmFtZSlzIl9zLCBXVEZNb3ZlKHZhbHVl
KSk7JyAlIHNldHRlcl9hcmdzKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgbGluZXMuYXBw
ZW5kKCcgICAgICAgIEpTT046Ok9iamVjdEJhc2U6OiUoa2V5ZWRTZXQpcygiJShuYW1lKXMiX3Ms
IHZhbHVlKTsnICUgc2V0dGVyX2FyZ3MpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBK
U09OOjpPYmplY3RCYXNlOjolKHNldHRlcilzKCIlKG1lbWJlcktleSlzIl9zLCAlKG1lbWJlclZh
bHVlKXMpOycgJSBzZXR0ZXJfYXJncykKICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgfScpCiAg
ICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCiAKQEAgLTM4MSwxMyArMzg5LDEzIEBAIGNs
YXNzIENwcFByb3RvY29sVHlwZXNIZWFkZXJHZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAg
ICAgICAgIGRlY2xhcmF0aW9uc190b19nZW5lcmF0ZSA9IFtkZWNsIGZvciBkZWNsIGluIHR5cGVf
ZGVjbGFyYXRpb25zIGlmIHNlbGYudHlwZV9uZWVkc19zaGFwZV9hc3NlcnRpb25zKGRlY2wudHlw
ZSldCiAKICAgICAgICAgICAgIGZvciB0eXBlX2RlY2xhcmF0aW9uIGluIGRlY2xhcmF0aW9uc190
b19nZW5lcmF0ZToKLSAgICAgICAgICAgICAgICBmb3IgdHlwZV9tZW1iZXIgaW4gdHlwZV9kZWNs
YXJhdGlvbi50eXBlX21lbWJlcnM6Ci0gICAgICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uo
dHlwZV9tZW1iZXIudHlwZSwgRW51bVR5cGUpOgotICAgICAgICAgICAgICAgICAgICAgICAgdHlw
ZV9hcmd1bWVudHMuYXBwZW5kKChzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKHR5
cGVfZGVjbGFyYXRpb24uY29uZGl0aW9uLCBDcHBHZW5lcmF0b3IuY3BwX3Byb3RvY29sX3R5cGVf
Zm9yX3R5cGVfbWVtYmVyKHR5cGVfbWVtYmVyLCB0eXBlX2RlY2xhcmF0aW9uKSksIEZhbHNlKSkK
LQogICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodHlwZV9kZWNsYXJhdGlvbi50eXBlLCBP
YmplY3RUeXBlKToKICAgICAgICAgICAgICAgICAgICAgdHlwZV9hcmd1bWVudHMuYXBwZW5kKChz
ZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKHR5cGVfZGVjbGFyYXRpb24uY29uZGl0
aW9uLCBDcHBHZW5lcmF0b3IuY3BwX3Byb3RvY29sX3R5cGVfZm9yX3R5cGUodHlwZV9kZWNsYXJh
dGlvbi50eXBlKSksIEdlbmVyYXRvci50eXBlX25lZWRzX3J1bnRpbWVfY2FzdHModHlwZV9kZWNs
YXJhdGlvbi50eXBlKSkpCiAKKyAgICAgICAgICAgICAgICBmb3IgdHlwZV9tZW1iZXIgaW4gdHlw
ZV9kZWNsYXJhdGlvbi50eXBlX21lbWJlcnM6CisgICAgICAgICAgICAgICAgICAgIGlmIGlzaW5z
dGFuY2UodHlwZV9tZW1iZXIudHlwZSwgRW51bVR5cGUpOgorICAgICAgICAgICAgICAgICAgICAg
ICAgdHlwZV9hcmd1bWVudHMuYXBwZW5kKChzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0
aW9uKHR5cGVfZGVjbGFyYXRpb24uY29uZGl0aW9uLCBDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9y
X2VudW0odHlwZV9tZW1iZXIudHlwZSwgJyVzOjolcycgJSAodHlwZV9kZWNsYXJhdGlvbi50eXBl
X25hbWUsIHVjZmlyc3QodHlwZV9tZW1iZXIubWVtYmVyX25hbWUpKSkpLCBGYWxzZSkpCisKICAg
ICAgICAgc3RydWN0X2tleXdvcmRzID0gWydzdHJ1Y3QnXQogICAgICAgICBmdW5jdGlvbl9rZXl3
b3JkcyA9IFsnc3RhdGljIHZvaWQnXQogICAgICAgICBleHBvcnRfbWFjcm8gPSBzZWxmLm1vZGVs
KCkuZnJhbWV3b3JrLnNldHRpbmcoJ2V4cG9ydF9tYWNybycsIE5vbmUpCkBAIC0zOTksNyArNDA3
LDcgQEAgY2xhc3MgQ3BwUHJvdG9jb2xUeXBlc0hlYWRlckdlbmVyYXRvcihDcHBHZW5lcmF0b3Ip
OgogICAgICAgICBmb3IgYXJndW1lbnQgaW4gdHlwZV9hcmd1bWVudHM6CiAgICAgICAgICAgICBs
aW5lcy5hcHBlbmQoJ3RlbXBsYXRlPD4gJXMgQmluZGluZ1RyYWl0czwlcz4geycgJSAoJyAnLmpv
aW4oc3RydWN0X2tleXdvcmRzKSwgYXJndW1lbnRbMF0pKQogICAgICAgICAgICAgaWYgYXJndW1l
bnRbMV06Ci0gICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCdzdGF0aWMgUmVmUHRyPCVzPiBy
dW50aW1lQ2FzdChSZWZQdHI8SlNPTjo6VmFsdWU+JiYgdmFsdWUpOycgJSBhcmd1bWVudFswXSkK
KyAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ3N0YXRpYyBSZWY8JXM+IHJ1bnRpbWVDYXN0
KFJlZjxKU09OOjpWYWx1ZT4mJiB2YWx1ZSk7JyAlIGFyZ3VtZW50WzBdKQogICAgICAgICAgICAg
bGluZXMuYXBwZW5kKCclcyBhc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShKU09OOjpWYWx1ZSop
OycgJSAnICcuam9pbihmdW5jdGlvbl9rZXl3b3JkcykpCiAgICAgICAgICAgICBsaW5lcy5hcHBl
bmQoJ307JykKICAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKQEAgLTQzOCwxMyArNDQ2
LDEzIEBAIGNsYXNzIENwcFByb3RvY29sVHlwZXNIZWFkZXJHZW5lcmF0b3IoQ3BwR2VuZXJhdG9y
KToKICAgICAgICAgICAgIGRvbWFpbl9saW5lcyA9IFtdCiAgICAgICAgICAgICBkb21haW5fbGlu
ZXMuYXBwZW5kKCIvLyBFbnVtcyBpbiB0aGUgJyVzJyBEb21haW4iICUgZG9tYWluLmRvbWFpbl9u
YW1lKQogICAgICAgICAgICAgZm9yIGVudW1fdHlwZSBpbiBlbnVtX3R5cGVzOgotICAgICAgICAg
ICAgICAgIGNwcF9wcm90b2NvbF90eXBlID0gQ3BwR2VuZXJhdG9yLmNwcF9wcm90b2NvbF90eXBl
X2Zvcl90eXBlKGVudW1fdHlwZSkKKyAgICAgICAgICAgICAgICBjcHBfcHJvdG9jb2xfdHlwZSA9
IENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3JfZW51bShlbnVtX3R5cGUsIGVudW1fdHlwZS5yYXdf
bmFtZSgpKQogICAgICAgICAgICAgICAgIGRvbWFpbl9saW5lcy5hcHBlbmQoc2VsZi53cmFwX3dp
dGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihlbnVtX3R5cGUuZGVjbGFyYXRpb24oKS5jb25kaXRpb24s
ICd0ZW1wbGF0ZTw+XG4lcyBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8JXM+KGNvbnN0IFN0cmlu
ZyYpOycgJSAocmV0dXJuX3R5cGVfd2l0aF9leHBvcnRfbWFjcm8oY3BwX3Byb3RvY29sX3R5cGUp
LCBjcHBfcHJvdG9jb2xfdHlwZSkpKQogCiAgICAgICAgICAgICBmb3Igb2JqZWN0X3R5cGUgaW4g
b2JqZWN0X3R5cGVzOgogICAgICAgICAgICAgICAgIG9iamVjdF9saW5lcyA9IFtdCiAgICAgICAg
ICAgICAgICAgZm9yIGVudW1fbWVtYmVyIGluIGZpbHRlcih0eXBlX21lbWJlcl9pc19hbm9ueW1v
dXNfZW51bV90eXBlLCBvYmplY3RfdHlwZS5tZW1iZXJzKToKLSAgICAgICAgICAgICAgICAgICAg
Y3BwX3Byb3RvY29sX3R5cGUgPSBDcHBHZW5lcmF0b3IuY3BwX3Byb3RvY29sX3R5cGVfZm9yX3R5
cGVfbWVtYmVyKGVudW1fbWVtYmVyLCBvYmplY3RfdHlwZS5kZWNsYXJhdGlvbigpKQorICAgICAg
ICAgICAgICAgICAgICBjcHBfcHJvdG9jb2xfdHlwZSA9IENwcEdlbmVyYXRvci5jcHBfdHlwZV9m
b3JfZW51bShlbnVtX21lbWJlci50eXBlLCAnJXM6OiVzJyAlIChvYmplY3RfdHlwZS5yYXdfbmFt
ZSgpLCB1Y2ZpcnN0KGVudW1fbWVtYmVyLm1lbWJlcl9uYW1lKSkpCiAgICAgICAgICAgICAgICAg
ICAgIG9iamVjdF9saW5lcy5hcHBlbmQoJ3RlbXBsYXRlPD5cbiVzIHBhcnNlRW51bVZhbHVlRnJv
bVN0cmluZzwlcz4oY29uc3QgU3RyaW5nJik7JyAlIChyZXR1cm5fdHlwZV93aXRoX2V4cG9ydF9t
YWNybyhjcHBfcHJvdG9jb2xfdHlwZSksIGNwcF9wcm90b2NvbF90eXBlKSkKICAgICAgICAgICAg
ICAgICBpZiBsZW4ob2JqZWN0X2xpbmVzKToKICAgICAgICAgICAgICAgICAgICAgZG9tYWluX2xp
bmVzLmFwcGVuZChzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKG9iamVjdF90eXBl
LmRlY2xhcmF0aW9uKCkuY29uZGl0aW9uLCAnXG4nLmpvaW4ob2JqZWN0X2xpbmVzKSkpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9n
ZW5lcmF0ZV9jcHBfcHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50YXRpb24ucHkgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfcHJvdG9j
b2xfdHlwZXNfaW1wbGVtZW50YXRpb24ucHkKaW5kZXggNWRkNTM0Njk0NDg1NTE1NDhkNjdhYTBi
NDU2YzZhMWE2NjU4ZDU5My4uMTNlNTg5NzI2ZDRjZGI3YTQ1MmM2NzBjODMyNWViMWEzOWVlNjIy
MiAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2Nv
ZGVnZW4vZ2VuZXJhdGVfY3BwX3Byb3RvY29sX3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5CisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRl
X2NwcF9wcm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbi5weQpAQCAtODIsMTAgKzgyLDggQEAg
Y2xhc3MgQ3BwUHJvdG9jb2xUeXBlc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yKENwcEdlbmVyYXRv
cik6CiAKICAgICBkZWYgX2dlbmVyYXRlX3NlY29uZGFyeV9oZWFkZXJfaW5jbHVkZXMoc2VsZik6
CiAgICAgICAgIGhlYWRlcl9pbmNsdWRlcyA9IFsKLSAgICAgICAgICAgIChbIkphdmFTY3JpcHRD
b3JlIiwgIldlYktpdCJdLCAoIldURiIsICJ3dGYvT3B0aW9uYWwuaCIpKSwKLSAgICAgICAgICAg
IChbIkphdmFTY3JpcHRDb3JlIiwgIldlYktpdCJdLCAoIldURiIsICJ3dGYvdGV4dC9DU3RyaW5n
LmgiKSksCisgICAgICAgICAgICAoWyJKYXZhU2NyaXB0Q29yZSIsICJXZWJLaXQiXSwgKCJXVEYi
LCAid3RmL0Fzc2VydGlvbnMuaCIpKSwKICAgICAgICAgXQotCiAgICAgICAgIHJldHVybiAnXG4n
LmpvaW4oc2VsZi5nZW5lcmF0ZV9pbmNsdWRlc19mcm9tX2VudHJpZXMoaGVhZGVyX2luY2x1ZGVz
KSkKIAogICAgIGRlZiBfZ2VuZXJhdGVfZW51bV9tYXBwaW5nKHNlbGYpOgpAQCAtMTQ0LDE0ICsx
NDIsMTQgQEAgY2xhc3MgQ3BwUHJvdG9jb2xUeXBlc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yKENw
cEdlbmVyYXRvcik6CiAgICAgICAgIGxpbmVzID0gW10KICAgICAgICAgbGluZXMuYXBwZW5kKCIv
LyBFbnVtcyBpbiB0aGUgJyVzJyBEb21haW4iICUgZG9tYWluLmRvbWFpbl9uYW1lKQogICAgICAg
ICBmb3IgZW51bV90eXBlIGluIGVudW1fdHlwZXM6Ci0gICAgICAgICAgICBjcHBfcHJvdG9jb2xf
dHlwZSA9IENwcEdlbmVyYXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZShlbnVtX3R5cGUp
CisgICAgICAgICAgICBjcHBfcHJvdG9jb2xfdHlwZSA9IENwcEdlbmVyYXRvci5jcHBfdHlwZV9m
b3JfZW51bShlbnVtX3R5cGUsIGVudW1fdHlwZS5yYXdfbmFtZSgpKQogICAgICAgICAgICAgbGlu
ZXMuYXBwZW5kKCcnKQogICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYud3JhcF93aXRoX2d1
YXJkX2Zvcl9jb25kaXRpb24oZW51bV90eXBlLmRlY2xhcmF0aW9uKCkuY29uZGl0aW9uLCBnZW5l
cmF0ZV9jb252ZXJzaW9uX21ldGhvZF9ib2R5KGVudW1fdHlwZSwgY3BwX3Byb3RvY29sX3R5cGUp
KSkKIAogICAgICAgICBmb3Igb2JqZWN0X3R5cGUgaW4gb2JqZWN0X3R5cGVzOgogICAgICAgICAg
ICAgb2JqZWN0X2xpbmVzID0gW10KICAgICAgICAgICAgIGZvciBlbnVtX21lbWJlciBpbiBmaWx0
ZXIodHlwZV9tZW1iZXJfaXNfYW5vbnltb3VzX2VudW1fdHlwZSwgb2JqZWN0X3R5cGUubWVtYmVy
cyk6Ci0gICAgICAgICAgICAgICAgY3BwX3Byb3RvY29sX3R5cGUgPSBDcHBHZW5lcmF0b3IuY3Bw
X3Byb3RvY29sX3R5cGVfZm9yX3R5cGVfbWVtYmVyKGVudW1fbWVtYmVyLCBvYmplY3RfdHlwZS5k
ZWNsYXJhdGlvbigpKQorICAgICAgICAgICAgICAgIGNwcF9wcm90b2NvbF90eXBlID0gQ3BwR2Vu
ZXJhdG9yLmNwcF90eXBlX2Zvcl9lbnVtKGVudW1fbWVtYmVyLnR5cGUsICclczo6JXMnICUgKG9i
amVjdF90eXBlLnJhd19uYW1lKCksIHVjZmlyc3QoZW51bV9tZW1iZXIubWVtYmVyX25hbWUpKSkK
ICAgICAgICAgICAgICAgICBvYmplY3RfbGluZXMuYXBwZW5kKGdlbmVyYXRlX2NvbnZlcnNpb25f
bWV0aG9kX2JvZHkoZW51bV9tZW1iZXIudHlwZSwgY3BwX3Byb3RvY29sX3R5cGUpKQogICAgICAg
ICAgICAgaWYgbGVuKG9iamVjdF9saW5lcyk6CiAgICAgICAgICAgICAgICAgaWYgbGVuKGxpbmVz
KToKQEAgLTE4Myw4ICsxODEsNyBAQCBjbGFzcyBDcHBQcm90b2NvbFR5cGVzSW1wbGVtZW50YXRp
b25HZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAgICAgICAgIGZvciB0eXBlX2RlY2xhcmF0
aW9uIGluIFtkZWNsIGZvciBkZWNsIGluIHR5cGVfZGVjbGFyYXRpb25zIGlmIEdlbmVyYXRvci50
eXBlX2hhc19vcGVuX2ZpZWxkcyhkZWNsLnR5cGUpXToKICAgICAgICAgICAgICAgICBvcGVuX21l
bWJlcnMgPSBHZW5lcmF0b3Iub3Blbl9maWVsZHModHlwZV9kZWNsYXJhdGlvbikKICAgICAgICAg
ICAgICAgICBmb3IgdHlwZV9tZW1iZXIgaW4gc29ydGVkKG9wZW5fbWVtYmVycywga2V5PWxhbWJk
YSBtZW1iZXI6IG1lbWJlci5tZW1iZXJfbmFtZSk6Ci0gICAgICAgICAgICAgICAgICAgIGZpZWxk
X25hbWUgPSAnOjonLmpvaW4oWydJbnNwZWN0b3InLCAnUHJvdG9jb2wnLCBkb21haW4uZG9tYWlu
X25hbWUsIHVjZmlyc3QodHlwZV9kZWNsYXJhdGlvbi50eXBlX25hbWUpLCB1Y2ZpcnN0KHR5cGVf
bWVtYmVyLm1lbWJlcl9uYW1lKV0pCi0gICAgICAgICAgICAgICAgICAgIGRvbWFpbl9saW5lcy5h
cHBlbmQoJ2NvbnN0IGNoYXIqICVzID0gIiVzIjsnICUgKGZpZWxkX25hbWUsIHR5cGVfbWVtYmVy
Lm1lbWJlcl9uYW1lKSkKKyAgICAgICAgICAgICAgICAgICAgZG9tYWluX2xpbmVzLmFwcGVuZCgn
Y29uc3QgY2hhciogUHJvdG9jb2w6OiVzOjolczo6JXNLZXkgPSAiJXMiOycgJSAoZG9tYWluLmRv
bWFpbl9uYW1lLCB1Y2ZpcnN0KHR5cGVfZGVjbGFyYXRpb24udHlwZV9uYW1lKSwgdHlwZV9tZW1i
ZXIubWVtYmVyX25hbWUsIHR5cGVfbWVtYmVyLm1lbWJlcl9uYW1lKSkKICAgICAgICAgICAgIGlm
IGxlbihkb21haW5fbGluZXMpOgogICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLndy
YXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGRvbWFpbi5jb25kaXRpb24sICdcbicuam9pbihk
b21haW5fbGluZXMpKSkKIApAQCAtMjI3LDM3ICsyMjQsNTQgQEAgY2xhc3MgQ3BwUHJvdG9jb2xU
eXBlc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAKICAgICAgICAgbGlu
ZXMuYXBwZW5kKCd2b2lkIEJpbmRpbmdUcmFpdHM8JXM+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVk
VHlwZShKU09OOjpWYWx1ZSogdmFsdWUpJyAlIChDcHBHZW5lcmF0b3IuY3BwX3Byb3RvY29sX3R5
cGVfZm9yX3R5cGUob2JqZWN0X2RlY2xhcmF0aW9uLnR5cGUpKSkKICAgICAgICAgbGluZXMuYXBw
ZW5kKCIiInsKKyAgICBBU1NFUlRfVU5VU0VEKHZhbHVlLCB2YWx1ZSk7CiAjaWYgQVNTRVJUX0VO
QUJMRUQKLSAgICBBU1NFUlRfQVJHKHZhbHVlLCB2YWx1ZSk7Ci0gICAgUmVmUHRyPEpTT046Ok9i
amVjdD4gb2JqZWN0OwotICAgIGJvb2wgY2FzdFN1Y2NlZWRlZCA9IHZhbHVlLT5hc09iamVjdChv
YmplY3QpOwotICAgIEFTU0VSVF9VTlVTRUQoY2FzdFN1Y2NlZWRlZCwgY2FzdFN1Y2NlZWRlZCk7
IiIiKQorICAgIGF1dG8gb2JqZWN0ID0gdmFsdWUtPmFzT2JqZWN0KCk7CisgICAgQVNTRVJUKG9i
amVjdCk7IiIiKQogICAgICAgICBmb3IgdHlwZV9tZW1iZXIgaW4gcmVxdWlyZWRfbWVtYmVyczoK
KyAgICAgICAgICAgIG1lbWJlcl90eXBlID0gdHlwZV9tZW1iZXIudHlwZQorICAgICAgICAgICAg
aWYgaXNpbnN0YW5jZShtZW1iZXJfdHlwZSwgQWxpYXNlZFR5cGUpOgorICAgICAgICAgICAgICAg
IG1lbWJlcl90eXBlID0gbWVtYmVyX3R5cGUuYWxpYXNlZF90eXBlCisKKyAgICAgICAgICAgIGlm
IGlzaW5zdGFuY2UobWVtYmVyX3R5cGUsIEVudW1UeXBlKToKKyAgICAgICAgICAgICAgICBtZW1i
ZXJfdHlwZSA9IENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3JfZW51bShtZW1iZXJfdHlwZSwgJyVz
OjolcycgJSAob2JqZWN0X2RlY2xhcmF0aW9uLnR5cGVfbmFtZSwgdWNmaXJzdCh0eXBlX21lbWJl
ci5tZW1iZXJfbmFtZSkpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBtZW1i
ZXJfdHlwZSA9IENwcEdlbmVyYXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZShtZW1iZXJf
dHlwZSkKKwogICAgICAgICAgICAgYXJncyA9IHsKICAgICAgICAgICAgICAgICAnbWVtYmVyTmFt
ZSc6IHR5cGVfbWVtYmVyLm1lbWJlcl9uYW1lLAotICAgICAgICAgICAgICAgICdhc3NlcnRNZXRo
b2QnOiBDcHBHZW5lcmF0b3IuY3BwX2Fzc2VydGlvbl9tZXRob2RfZm9yX3R5cGVfbWVtYmVyKHR5
cGVfbWVtYmVyLCBvYmplY3RfZGVjbGFyYXRpb24pCisgICAgICAgICAgICAgICAgJ21lbWJlclR5
cGUnOiBtZW1iZXJfdHlwZQogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBsaW5lcy5hcHBl
bmQoIiIiICAgIHsKICAgICAgICAgYXV0byAlKG1lbWJlck5hbWUpc1BvcyA9IG9iamVjdC0+Zmlu
ZCgiJShtZW1iZXJOYW1lKXMiX3MpOwogICAgICAgICBBU1NFUlQoJShtZW1iZXJOYW1lKXNQb3Mg
IT0gb2JqZWN0LT5lbmQoKSk7Ci0gICAgICAgICUoYXNzZXJ0TWV0aG9kKXMoJShtZW1iZXJOYW1l
KXNQb3MtPnZhbHVlLmdldCgpKTsKKyAgICAgICAgQmluZGluZ1RyYWl0czwlKG1lbWJlclR5cGUp
cz46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKCUobWVtYmVyTmFtZSlzUG9zLT52YWx1ZS5w
dHIoKSk7CiAgICAgfSIiIiAlIGFyZ3MpCiAKICAgICAgICAgaWYgc2hvdWxkX2NvdW50X3Byb3Bl
cnRpZXM6CiAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJycpCi0gICAgICAgICAgICBsaW5lcy5h
cHBlbmQoJyAgICBpbnQgZm91bmRQcm9wZXJ0aWVzQ291bnQgPSAlczsnICUgbGVuKHJlcXVpcmVk
X21lbWJlcnMpKQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgc2l6ZV90IGZvdW5kUHJv
cGVydGllc0NvdW50ID0gJXM7JyAlIGxlbihyZXF1aXJlZF9tZW1iZXJzKSkKIAogICAgICAgICBm
b3IgdHlwZV9tZW1iZXIgaW4gb3B0aW9uYWxfbWVtYmVyczoKKyAgICAgICAgICAgIG1lbWJlcl90
eXBlID0gdHlwZV9tZW1iZXIudHlwZQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShtZW1iZXJf
dHlwZSwgQWxpYXNlZFR5cGUpOgorICAgICAgICAgICAgICAgIG1lbWJlcl90eXBlID0gbWVtYmVy
X3R5cGUuYWxpYXNlZF90eXBlCisKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UobWVtYmVyX3R5
cGUsIEVudW1UeXBlKToKKyAgICAgICAgICAgICAgICBtZW1iZXJfdHlwZSA9IENwcEdlbmVyYXRv
ci5jcHBfdHlwZV9mb3JfZW51bShtZW1iZXJfdHlwZSwgJyVzOjolcycgJSAob2JqZWN0X2RlY2xh
cmF0aW9uLnR5cGVfbmFtZSwgdWNmaXJzdCh0eXBlX21lbWJlci5tZW1iZXJfbmFtZSkpKQorICAg
ICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBtZW1iZXJfdHlwZSA9IENwcEdlbmVyYXRv
ci5jcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZShtZW1iZXJfdHlwZSkKKwogICAgICAgICAgICAg
YXJncyA9IHsKICAgICAgICAgICAgICAgICAnbWVtYmVyTmFtZSc6IHR5cGVfbWVtYmVyLm1lbWJl
cl9uYW1lLAotICAgICAgICAgICAgICAgICdhc3NlcnRNZXRob2QnOiBDcHBHZW5lcmF0b3IuY3Bw
X2Fzc2VydGlvbl9tZXRob2RfZm9yX3R5cGVfbWVtYmVyKHR5cGVfbWVtYmVyLCBvYmplY3RfZGVj
bGFyYXRpb24pCisgICAgICAgICAgICAgICAgJ21lbWJlclR5cGUnOiBtZW1iZXJfdHlwZQogICAg
ICAgICAgICAgfQogCiAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoIiIiICAgIHsKICAgICAgICAg
YXV0byAlKG1lbWJlck5hbWUpc1BvcyA9IG9iamVjdC0+ZmluZCgiJShtZW1iZXJOYW1lKXMiX3Mp
OwogICAgICAgICBpZiAoJShtZW1iZXJOYW1lKXNQb3MgIT0gb2JqZWN0LT5lbmQoKSkgewotICAg
ICAgICAgICAgJShhc3NlcnRNZXRob2QpcyglKG1lbWJlck5hbWUpc1Bvcy0+dmFsdWUuZ2V0KCkp
OyIiIiAlIGFyZ3MpCisgICAgICAgICAgICBCaW5kaW5nVHJhaXRzPCUobWVtYmVyVHlwZSlzPjo6
YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoJShtZW1iZXJOYW1lKXNQb3MtPnZhbHVlLnB0cigp
KTsiIiIgJSBhcmdzKQogCiAgICAgICAgICAgICBpZiBzaG91bGRfY291bnRfcHJvcGVydGllczoK
ICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgICAgICsrZm91bmRQcm9wZXJ0
aWVzQ291bnQ7JykKQEAgLTI2NywyNyArMjgxLDIyIEBAIGNsYXNzIENwcFByb3RvY29sVHlwZXNJ
bXBsZW1lbnRhdGlvbkdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAgICBpZiBzaG91bGRf
Y291bnRfcHJvcGVydGllczoKICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGlmIChmb3Vu
ZFByb3BlcnRpZXNDb3VudCAhPSBvYmplY3QtPnNpemUoKSknKQogICAgICAgICAgICAgbGluZXMu
YXBwZW5kKCcgICAgICAgIEZBVEFMKCJVbmV4cGVjdGVkIHByb3BlcnRpZXMgaW4gb2JqZWN0OiAl
c1xcbiIsIG9iamVjdC0+dG9KU09OU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOycpCi0gICAgICAg
IGxpbmVzLmFwcGVuZCgnI2Vsc2UgLy8gQVNTRVJUX0VOQUJMRUQnKQotICAgICAgICBsaW5lcy5h
cHBlbmQoJyAgICBVTlVTRURfUEFSQU0odmFsdWUpOycpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgn
I2VuZGlmIC8vIEFTU0VSVF9FTkFCTEVEJykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcjZW5kaWYn
KQogICAgICAgICBsaW5lcy5hcHBlbmQoJ30nKQogICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxp
bmVzKQogCiAgICAgZGVmIF9nZW5lcmF0ZV9hc3NlcnRpb25fZm9yX2VudW0oc2VsZiwgZW51bV9t
ZW1iZXIsIG9iamVjdF9kZWNsYXJhdGlvbik6CiAgICAgICAgIGxpbmVzID0gW10KLSAgICAgICAg
bGluZXMuYXBwZW5kKCd2b2lkICVzKEpTT046OlZhbHVlKiB2YWx1ZSknICUgQ3BwR2VuZXJhdG9y
LmNwcF9hc3NlcnRpb25fbWV0aG9kX2Zvcl90eXBlX21lbWJlcihlbnVtX21lbWJlciwgb2JqZWN0
X2RlY2xhcmF0aW9uKSkKKyAgICAgICAgbGluZXMuYXBwZW5kKCd2b2lkIEJpbmRpbmdUcmFpdHM8
JXM+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShKU09OOjpWYWx1ZSogdmFsdWUpJyAlIENw
cEdlbmVyYXRvci5jcHBfdHlwZV9mb3JfZW51bShlbnVtX21lbWJlci50eXBlLCAnJXM6OiVzJyAl
IChvYmplY3RfZGVjbGFyYXRpb24udHlwZV9uYW1lLCB1Y2ZpcnN0KGVudW1fbWVtYmVyLm1lbWJl
cl9uYW1lKSkpKQogICAgICAgICBsaW5lcy5hcHBlbmQoJ3snKQorICAgICAgICBsaW5lcy5hcHBl
bmQoJyAgICBBU1NFUlRfVU5VU0VEKHZhbHVlLCB2YWx1ZSk7JykKICAgICAgICAgbGluZXMuYXBw
ZW5kKCcjaWYgQVNTRVJUX0VOQUJMRUQnKQotICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBBU1NF
UlRfQVJHKHZhbHVlLCB2YWx1ZSk7JykKLSAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgU3RyaW5n
IHJlc3VsdDsnKQotICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBib29sIGNhc3RTdWNjZWVkZWQg
PSB2YWx1ZS0+YXNTdHJpbmcocmVzdWx0KTsnKQotICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBB
U1NFUlQoY2FzdFN1Y2NlZWRlZCk7JykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgYXV0byBy
ZXN1bHQgPSB2YWx1ZS0+YXNTdHJpbmcoKTsnKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBB
U1NFUlQocmVzdWx0KTsnKQogCiAgICAgICAgIGFzc2VydF9jb25kaXRpb24gPSAnIHx8ICcuam9p
bihbJ3Jlc3VsdCA9PSAiJXMiJyAlIGVudW1fdmFsdWUgZm9yIGVudW1fdmFsdWUgaW4gZW51bV9t
ZW1iZXIudHlwZS5lbnVtX3ZhbHVlcygpXSkKICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgQVNT
RVJUKCVzKTsnICUgYXNzZXJ0X2NvbmRpdGlvbikKLSAgICAgICAgbGluZXMuYXBwZW5kKCcjZWxz
ZSAvLyBBU1NFUlRfRU5BQkxFRCcpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIFVOVVNFRF9Q
QVJBTSh2YWx1ZSk7JykKLSAgICAgICAgbGluZXMuYXBwZW5kKCcjZW5kaWYgLy8gQVNTRVJUX0VO
QUJMRUQnKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyNlbmRpZicpCiAgICAgICAgIGxpbmVzLmFw
cGVuZCgnfScpCiAKICAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRl
X29iamNfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfYmFja2VuZF9kaXNwYXRj
aGVyX2hlYWRlci5weQppbmRleCAzZTEzOTc0YWIzNjIxM2RhNzhiNzJjYTIzMmU3N2UxYTk5NGM1
NWY3Li45NmI2YjYxMjZkYzdlZDgxMzJjM2YyZTIzNWRlM2Y3MDFkY2Y4OTExIDEwMDc1NQotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0
ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19iYWNrZW5kX2Rp
c3BhdGNoZXJfaGVhZGVyLnB5CkBAIC0zMywxMyArMzMsMTMgQEAgZnJvbSBzdHJpbmcgaW1wb3J0
IFRlbXBsYXRlCiB0cnk6CiAgICAgZnJvbSAuY3BwX2dlbmVyYXRvciBpbXBvcnQgQ3BwR2VuZXJh
dG9yCiAgICAgZnJvbSAuZ2VuZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IKLSAgICBmcm9tIC5tb2Rl
bHMgaW1wb3J0IEZyYW1ld29ya3MKKyAgICBmcm9tIC5tb2RlbHMgaW1wb3J0IEVudW1UeXBlLCBB
bGlhc2VkVHlwZSwgRnJhbWV3b3JrcwogICAgIGZyb20gLm9iamNfZ2VuZXJhdG9yIGltcG9ydCBP
YmpDR2VuZXJhdG9yCiAgICAgZnJvbSAub2JqY19nZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBP
YmpDR2VuZXJhdG9yVGVtcGxhdGVzIGFzIE9iakNUZW1wbGF0ZXMKIGV4Y2VwdCBWYWx1ZUVycm9y
OgogICAgIGZyb20gY3BwX2dlbmVyYXRvciBpbXBvcnQgQ3BwR2VuZXJhdG9yCiAgICAgZnJvbSBn
ZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvcgotICAgIGZyb20gbW9kZWxzIGltcG9ydCBGcmFtZXdv
cmtzCisgICAgZnJvbSBtb2RlbHMgaW1wb3J0IEVudW1UeXBlLCBBbGlhc2VkVHlwZSwgRnJhbWV3
b3JrcwogICAgIGZyb20gb2JqY19nZW5lcmF0b3IgaW1wb3J0IE9iakNHZW5lcmF0b3IKICAgICBm
cm9tIG9iamNfZ2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgT2JqQ0dlbmVyYXRvclRlbXBsYXRl
cyBhcyBPYmpDVGVtcGxhdGVzCiAKQEAgLTEwMyw5ICsxMDMsMTkgQEAgY2xhc3MgT2JqQ0JhY2tl
bmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yKE9iakNHZW5lcmF0b3IpOgogCiAgICAgZGVmIF9n
ZW5lcmF0ZV9vYmpjX2hhbmRsZXJfZGVjbGFyYXRpb25fZm9yX2NvbW1hbmQoc2VsZiwgY29tbWFu
ZCk6CiAgICAgICAgIGxpbmVzID0gW10KLSAgICAgICAgcGFyYW1ldGVycyA9IFsnbG9uZyByZXF1
ZXN0SWQnXQotICAgICAgICBmb3IgX3BhcmFtZXRlciBpbiBjb21tYW5kLmNhbGxfcGFyYW1ldGVy
czoKLSAgICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKCclcyBpbl8lcycgJSAoQ3BwR2VuZXJh
dG9yLmNwcF90eXBlX2Zvcl91bmNoZWNrZWRfZm9ybWFsX2luX3BhcmFtZXRlcihfcGFyYW1ldGVy
KSwgX3BhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkpCisgICAgICAgIHBhcmFtZXRlcnMgPSBbJ2xv
bmcgcHJvdG9jb2xfY2FsbElkJ10KKyAgICAgICAgZm9yIHBhcmFtZXRlciBpbiBjb21tYW5kLmNh
bGxfcGFyYW1ldGVyczoKKyAgICAgICAgICAgIHBhcmFtZXRlcl90eXBlID0gcGFyYW1ldGVyLnR5
cGUKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UocGFyYW1ldGVyX3R5cGUsIEFsaWFzZWRUeXBl
KToKKyAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfdHlwZSA9IHBhcmFtZXRlcl90eXBlLmFsaWFz
ZWRfdHlwZQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShwYXJhbWV0ZXJfdHlwZSwgRW51bVR5
cGUpOgorICAgICAgICAgICAgICAgIHBhcmFtZXRlcl90eXBlID0gcGFyYW1ldGVyX3R5cGUucHJp
bWl0aXZlX3R5cGUKKworICAgICAgICAgICAgcGFyYW1ldGVyX25hbWUgPSBwYXJhbWV0ZXIucGFy
YW1ldGVyX25hbWUKKyAgICAgICAgICAgIGlmIHBhcmFtZXRlci5pc19vcHRpb25hbDoKKyAgICAg
ICAgICAgICAgICBwYXJhbWV0ZXJfbmFtZSA9ICdvcHRfJyArIHBhcmFtZXRlcl9uYW1lCisKKyAg
ICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKCclcyAlcycgJSAoQ3BwR2VuZXJhdG9yLmNwcF90
eXBlX2Zvcl9jb21tYW5kX3BhcmFtZXRlcihwYXJhbWV0ZXJfdHlwZSwgcGFyYW1ldGVyLmlzX29w
dGlvbmFsKSwgcGFyYW1ldGVyX25hbWUpKQogCiAgICAgICAgIGNvbW1hbmRfYXJncyA9IHsKICAg
ICAgICAgICAgICdjb21tYW5kTmFtZSc6IGNvbW1hbmQuY29tbWFuZF9uYW1lLApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJh
dGVfb2JqY19iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2JhY2tl
bmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQppbmRleCBmNWVlOGU1ODM5OGQ2OWJhZTRi
ZWI0YzE4NjcwNjNjY2Q1MjIwOWVjLi4xYmQ5NjM1YmQzMjUxOTkxNTFjZmQ5ODAxM2E1MTI3Mjg5
ODhkMWI5IDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlv
bi5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdl
bi9nZW5lcmF0ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQpAQCAt
OTAsOSArOTAsMjAgQEAgY2xhc3MgT2JqQ0JhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25H
ZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6CiAKICAgICBkZWYgX2dlbmVyYXRlX2hhbmRsZXJfaW1w
bGVtZW50YXRpb25fZm9yX2NvbW1hbmQoc2VsZiwgZG9tYWluLCBjb21tYW5kKToKICAgICAgICAg
bGluZXMgPSBbXQotICAgICAgICBwYXJhbWV0ZXJzID0gWydsb25nIHJlcXVlc3RJZCddCisgICAg
ICAgIHBhcmFtZXRlcnMgPSBbJ2xvbmcgcHJvdG9jb2xfY2FsbElkJ10KICAgICAgICAgZm9yIHBh
cmFtZXRlciBpbiBjb21tYW5kLmNhbGxfcGFyYW1ldGVyczoKLSAgICAgICAgICAgIHBhcmFtZXRl
cnMuYXBwZW5kKCclcyBpbl8lcycgJSAoQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl91bmNoZWNr
ZWRfZm9ybWFsX2luX3BhcmFtZXRlcihwYXJhbWV0ZXIpLCBwYXJhbWV0ZXIucGFyYW1ldGVyX25h
bWUpKQorICAgICAgICAgICAgcGFyYW1ldGVyX3R5cGUgPSBwYXJhbWV0ZXIudHlwZQorICAgICAg
ICAgICAgaWYgaXNpbnN0YW5jZShwYXJhbWV0ZXJfdHlwZSwgQWxpYXNlZFR5cGUpOgorICAgICAg
ICAgICAgICAgIHBhcmFtZXRlcl90eXBlID0gcGFyYW1ldGVyX3R5cGUuYWxpYXNlZF90eXBlCisg
ICAgICAgICAgICBpZiBpc2luc3RhbmNlKHBhcmFtZXRlcl90eXBlLCBFbnVtVHlwZSk6CisgICAg
ICAgICAgICAgICAgcGFyYW1ldGVyX3R5cGUgPSBwYXJhbWV0ZXJfdHlwZS5wcmltaXRpdmVfdHlw
ZQorCisgICAgICAgICAgICBwYXJhbWV0ZXJfbmFtZSA9IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFt
ZQorICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAg
IHBhcmFtZXRlcl9uYW1lID0gJ29wdF8nICsgcGFyYW1ldGVyX25hbWUKKyAgICAgICAgICAgIHBh
cmFtZXRlcl9uYW1lID0gJ2luXycgKyBwYXJhbWV0ZXJfbmFtZQorCisgICAgICAgICAgICBwYXJh
bWV0ZXJzLmFwcGVuZCgnJXMgJXMnICUgKENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3JfY29tbWFu
ZF9wYXJhbWV0ZXIocGFyYW1ldGVyX3R5cGUsIHBhcmFtZXRlci5pc19vcHRpb25hbCksIHBhcmFt
ZXRlcl9uYW1lKSkKIAogICAgICAgICBjb21tYW5kX2FyZ3MgPSB7CiAgICAgICAgICAgICAnZG9t
YWluTmFtZSc6IGRvbWFpbi5kb21haW5fbmFtZSwKQEAgLTExNSw0NSArMTI2LDU0IEBAIGNsYXNz
IE9iakNCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKE9iakNHZW5lcmF0
b3IpOgogICAgICAgICBpZiBjb21tYW5kLnJldHVybl9wYXJhbWV0ZXJzOgogICAgICAgICAgICAg
c3VjY2Vzc19ibG9ja19wYXJhbWV0ZXJzID0gW10KICAgICAgICAgICAgIGZvciBwYXJhbWV0ZXIg
aW4gY29tbWFuZC5yZXR1cm5fcGFyYW1ldGVyczoKKyAgICAgICAgICAgICAgICBvdXRfcGFyYW1f
bmFtZSA9IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZQorICAgICAgICAgICAgICAgIGlmIHBhcmFt
ZXRlci5pc19vcHRpb25hbDoKKyAgICAgICAgICAgICAgICAgICAgb3V0X3BhcmFtX25hbWUgPSAn
b3B0XycgKyBvdXRfcGFyYW1fbmFtZQorICAgICAgICAgICAgICAgIG91dF9wYXJhbV9uYW1lID0g
J291dF8nICsgb3V0X3BhcmFtX25hbWUKICAgICAgICAgICAgICAgICBvYmpjX3R5cGUgPSBzZWxm
Lm9iamNfdHlwZV9mb3JfcGFyYW0oZG9tYWluLCBjb21tYW5kLmNvbW1hbmRfbmFtZSwgcGFyYW1l
dGVyKQotICAgICAgICAgICAgICAgIHZhcl9uYW1lID0gT2JqQ0dlbmVyYXRvci5pZGVudGlmaWVy
X3RvX29iamNfaWRlbnRpZmllcihwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpCi0gICAgICAgICAg
ICAgICAgc3VjY2Vzc19ibG9ja19wYXJhbWV0ZXJzLmFwcGVuZChqb2luX3R5cGVfYW5kX25hbWUo
b2JqY190eXBlLCB2YXJfbmFtZSkpCisgICAgICAgICAgICAgICAgc3VjY2Vzc19ibG9ja19wYXJh
bWV0ZXJzLmFwcGVuZChqb2luX3R5cGVfYW5kX25hbWUob2JqY190eXBlLCBvdXRfcGFyYW1fbmFt
ZSkpCiAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBe
KCVzKSB7JyAlICcsICcuam9pbihzdWNjZXNzX2Jsb2NrX3BhcmFtZXRlcnMpKQogICAgICAgICBl
bHNlOgogICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0g
XnsnKQogCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBhdXRvIHByb3RvY29sX2pzb25N
ZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsnKQogICAgICAgICBpZiBjb21tYW5kLnJl
dHVybl9wYXJhbWV0ZXJzOgotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIFJlZjxK
U09OOjpPYmplY3Q+IHJlc3VsdE9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7JykKLQog
ICAgICAgICAgICAgcmVxdWlyZWRfcG9pbnRlcl9wYXJhbWV0ZXJzID0gW3BhcmFtZXRlciBmb3Ig
cGFyYW1ldGVyIGluIGNvbW1hbmQucmV0dXJuX3BhcmFtZXRlcnMgaWYgbm90IHBhcmFtZXRlci5p
c19vcHRpb25hbCBhbmQgT2JqQ0dlbmVyYXRvci5pc190eXBlX29iamNfcG9pbnRlcl90eXBlKHBh
cmFtZXRlci50eXBlKV0KICAgICAgICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gcmVxdWlyZWRfcG9p
bnRlcl9wYXJhbWV0ZXJzOgotICAgICAgICAgICAgICAgIHZhcl9uYW1lID0gT2JqQ0dlbmVyYXRv
ci5pZGVudGlmaWVyX3RvX29iamNfaWRlbnRpZmllcihwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUp
Ci0gICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9G
T1JfUkVRVUlSRURfUEFSQU1FVEVSKCVzLCBAIiVzIik7JyAlICh2YXJfbmFtZSwgdmFyX25hbWUp
KQorICAgICAgICAgICAgICAgIG91dF9wYXJhbV9uYW1lID0gcGFyYW1ldGVyLnBhcmFtZXRlcl9u
YW1lCisgICAgICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgorICAgICAgICAg
ICAgICAgICAgICBvdXRfcGFyYW1fbmFtZSA9ICdvcHRfJyArIG91dF9wYXJhbV9uYW1lCisgICAg
ICAgICAgICAgICAgb3V0X3BhcmFtX25hbWUgPSAnb3V0XycgKyBvdXRfcGFyYW1fbmFtZQorICAg
ICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JF
UVVJUkVEX1BBUkFNRVRFUiglcywgQCIlcyIpOycgJSAob3V0X3BhcmFtX25hbWUsIHBhcmFtZXRl
ci5wYXJhbWV0ZXJfbmFtZSkpCiAgICAgICAgICAgICAgICAgb2JqY19hcnJheV9jbGFzcyA9IHNl
bGYub2JqY19jbGFzc19mb3JfYXJyYXlfdHlwZShwYXJhbWV0ZXIudHlwZSkKICAgICAgICAgICAg
ICAgICBpZiBvYmpjX2FycmF5X2NsYXNzIGFuZCBvYmpjX2FycmF5X2NsYXNzLnN0YXJ0c3dpdGgo
c2VsZi5vYmpjX3ByZWZpeCgpKToKLSAgICAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcg
ICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEVfSU5fQVJSQVkoJXMsIFslcyBjbGFz
c10pOycgJSAodmFyX25hbWUsIG9iamNfYXJyYXlfY2xhc3MpKQorICAgICAgICAgICAgICAgICAg
ICBsaW5lcy5hcHBlbmQoJyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRV9JTl9B
UlJBWSglcywgWyVzIGNsYXNzXSk7JyAlIChvdXRfcGFyYW1fbmFtZSwgb2JqY19hcnJheV9jbGFz
cykpCiAKICAgICAgICAgICAgIG9wdGlvbmFsX3BvaW50ZXJfcGFyYW1ldGVycyA9IFtwYXJhbWV0
ZXIgZm9yIHBhcmFtZXRlciBpbiBjb21tYW5kLnJldHVybl9wYXJhbWV0ZXJzIGlmIHBhcmFtZXRl
ci5pc19vcHRpb25hbCBhbmQgT2JqQ0dlbmVyYXRvci5pc190eXBlX29iamNfcG9pbnRlcl90eXBl
KHBhcmFtZXRlci50eXBlKV0KICAgICAgICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gb3B0aW9uYWxf
cG9pbnRlcl9wYXJhbWV0ZXJzOgotICAgICAgICAgICAgICAgIHZhcl9uYW1lID0gT2JqQ0dlbmVy
YXRvci5pZGVudGlmaWVyX3RvX29iamNfaWRlbnRpZmllcihwYXJhbWV0ZXIucGFyYW1ldGVyX25h
bWUpCi0gICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUiglcywgQCIlcyIpOycgJSAodmFyX25hbWUsIHZh
cl9uYW1lKSkKKyAgICAgICAgICAgICAgICBvdXRfcGFyYW1fbmFtZSA9IHBhcmFtZXRlci5wYXJh
bWV0ZXJfbmFtZQorICAgICAgICAgICAgICAgIGlmIHBhcmFtZXRlci5pc19vcHRpb25hbDoKKyAg
ICAgICAgICAgICAgICAgICAgb3V0X3BhcmFtX25hbWUgPSAnb3B0XycgKyBvdXRfcGFyYW1fbmFt
ZQorICAgICAgICAgICAgICAgIG91dF9wYXJhbV9uYW1lID0gJ291dF8nICsgb3V0X3BhcmFtX25h
bWUKKyAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgVEhST1dfRVhDRVBUSU9O
X0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKCVzLCBAIiVzIik7JyAlIChvdXRfcGFyYW1fbmFt
ZSwgcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKSkKICAgICAgICAgICAgICAgICBvYmpjX2FycmF5
X2NsYXNzID0gc2VsZi5vYmpjX2NsYXNzX2Zvcl9hcnJheV90eXBlKHBhcmFtZXRlci50eXBlKQog
ICAgICAgICAgICAgICAgIGlmIG9iamNfYXJyYXlfY2xhc3MgYW5kIG9iamNfYXJyYXlfY2xhc3Mu
c3RhcnRzd2l0aChzZWxmLm9iamNfcHJlZml4KCkpOgotICAgICAgICAgICAgICAgICAgICBsaW5l
cy5hcHBlbmQoJyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRV9JTl9PUFRJT05B
TF9BUlJBWSglcywgWyVzIGNsYXNzXSk7JyAlICh2YXJfbmFtZSwgb2JqY19hcnJheV9jbGFzcykp
CisgICAgICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBUSFJPV19FWENFUFRJ
T05fRk9SX0JBRF9UWVBFX0lOX09QVElPTkFMX0FSUkFZKCVzLCBbJXMgY2xhc3NdKTsnICUgKG91
dF9wYXJhbV9uYW1lLCBvYmpjX2FycmF5X2NsYXNzKSkKIAogICAgICAgICAgICAgZm9yIHBhcmFt
ZXRlciBpbiBjb21tYW5kLnJldHVybl9wYXJhbWV0ZXJzOgorICAgICAgICAgICAgICAgIG91dF9w
YXJhbV9uYW1lID0gcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lCisgICAgICAgICAgICAgICAgaWYg
cGFyYW1ldGVyLmlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAgICAgICBvdXRfcGFyYW1fbmFt
ZSA9ICdvcHRfJyArIG91dF9wYXJhbV9uYW1lCisgICAgICAgICAgICAgICAgb3V0X3BhcmFtX25h
bWUgPSAnb3V0XycgKyBvdXRfcGFyYW1fbmFtZQogICAgICAgICAgICAgICAgIGtleWVkX3NldF9t
ZXRob2QgPSBDcHBHZW5lcmF0b3IuY3BwX3NldHRlcl9tZXRob2RfZm9yX3R5cGUocGFyYW1ldGVy
LnR5cGUpCi0gICAgICAgICAgICAgICAgdmFyX25hbWUgPSBPYmpDR2VuZXJhdG9yLmlkZW50aWZp
ZXJfdG9fb2JqY19pZGVudGlmaWVyKHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkKLSAgICAgICAg
ICAgICAgICB2YXJfZXhwcmVzc2lvbiA9ICcqJXMnICUgdmFyX25hbWUgaWYgcGFyYW1ldGVyLmlz
X29wdGlvbmFsIGVsc2UgdmFyX25hbWUKKyAgICAgICAgICAgICAgICB2YXJfZXhwcmVzc2lvbiA9
ICcqJXMnICUgb3V0X3BhcmFtX25hbWUgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsIGVsc2Ugb3V0
X3BhcmFtX25hbWUKICAgICAgICAgICAgICAgICBleHBvcnRfZXhwcmVzc2lvbiA9IHNlbGYub2Jq
Y19wcm90b2NvbF9leHBvcnRfZXhwcmVzc2lvbl9mb3JfdmFyaWFibGUocGFyYW1ldGVyLnR5cGUs
IHZhcl9leHByZXNzaW9uKQogICAgICAgICAgICAgICAgIGlmIG5vdCBwYXJhbWV0ZXIuaXNfb3B0
aW9uYWw6Ci0gICAgICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICByZXN1bHRP
YmplY3QtPiVzKCIlcyJfcywgJXMpOycgJSAoa2V5ZWRfc2V0X21ldGhvZCwgcGFyYW1ldGVyLnBh
cmFtZXRlcl9uYW1lLCBleHBvcnRfZXhwcmVzc2lvbikpCisgICAgICAgICAgICAgICAgICAgIGxp
bmVzLmFwcGVuZCgnICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+JXMoIiVzIl9zLCAlcyk7
JyAlIChrZXllZF9zZXRfbWV0aG9kLCBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUsIGV4cG9ydF9l
eHByZXNzaW9uKSkKICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBs
aW5lcy5hcHBlbmQoJyAgICAgICAgaWYgKCVzKScgJSB2YXJfbmFtZSkKLSAgICAgICAgICAgICAg
ICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgICAgICByZXN1bHRPYmplY3QtPiVzKCIlcyJfcywg
JXMpOycgJSAoa2V5ZWRfc2V0X21ldGhvZCwgcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lLCBleHBv
cnRfZXhwcmVzc2lvbikpCi0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgYmFja2Vu
ZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHRPYmpl
Y3QpLCBmYWxzZSk7JykKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgn
ICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBKU09O
OjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7JykKKyAgICAgICAgICAgICAgICAgICAgbGluZXMu
YXBwZW5kKCcgICAgICAgIGlmICghISVzKScgJSBvdXRfcGFyYW1fbmFtZSkKKyAgICAgICAgICAg
ICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+
JXMoIiVzIl9zLCAlcyk7JyAlIChrZXllZF9zZXRfbWV0aG9kLCBwYXJhbWV0ZXIucGFyYW1ldGVy
X25hbWUsIGV4cG9ydF9leHByZXNzaW9uKSkKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAg
IGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShwcm90b2NvbF9jYWxsSWQsIFdURk1v
dmUocHJvdG9jb2xfanNvbk1lc3NhZ2UpLCBmYWxzZSk7JykKIAogICAgICAgICBsaW5lcy5hcHBl
bmQoJyAgICB9OycpCiAgICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCkBAIC0xNjYsMTcg
KzE4NiwyNyBAQCBjbGFzcyBPYmpDQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVy
YXRvcihPYmpDR2VuZXJhdG9yKToKICAgICAgICAgZGVmIGluX3BhcmFtX2V4cHJlc3Npb24ocGFy
YW1fbmFtZSwgcGFyYW1ldGVyKToKICAgICAgICAgICAgIF90eXBlID0gcGFyYW1ldGVyLnR5cGUK
ICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEFsaWFzZWRUeXBlKToKLSAgICAgICAg
ICAgICAgICBfdHlwZSA9IF90eXBlLmFsaWFzZWRfdHlwZSAgIyBGYWxsIHRocm91Z2ggdG8gZW51
bSBvciBwcmltaXRpdmUuCisgICAgICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5hbGlhc2VkX3R5
cGUKICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKToKLSAgICAgICAg
ICAgICAgICBfdHlwZSA9IF90eXBlLnByaW1pdGl2ZV90eXBlICAjIEZhbGwgdGhyb3VnaCB0byBw
cmltaXRpdmUuCi0gICAgICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBQcmltaXRpdmVUeXBl
KToKLSAgICAgICAgICAgICAgICBpZiBfdHlwZS5yYXdfbmFtZSgpIGluIFsnYXJyYXknLCAnYW55
JywgJ29iamVjdCddOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gJyYlcycgJSBwYXJhbV9u
YW1lIGlmIG5vdCBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwgZWxzZSBwYXJhbV9uYW1lCi0gICAgICAg
ICAgICAgICAgcmV0dXJuICcqJXMnICUgcGFyYW1fbmFtZSBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9u
YWwgZWxzZSBwYXJhbV9uYW1lCi0gICAgICAgICAgICByZXR1cm4gJyYlcycgJSBwYXJhbV9uYW1l
IGlmIG5vdCBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwgZWxzZSBwYXJhbV9uYW1lCisgICAgICAgICAg
ICAgICAgX3R5cGUgPSBfdHlwZS5wcmltaXRpdmVfdHlwZQorCisgICAgICAgICAgICBpZiBfdHlw
ZS5pc19lbnVtKCk6CisgICAgICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgor
ICAgICAgICAgICAgICAgICAgICBwYXJhbV9uYW1lID0gJyonICsgcGFyYW1fbmFtZQorICAgICAg
ICAgICAgICAgIHJldHVybiAnUHJvdG9jb2w6OkhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVl
KCVzKScgJSBwYXJhbV9uYW1lCisgICAgICAgICAgICBpZiBDcHBHZW5lcmF0b3Iuc2hvdWxkX3Jl
bGVhc2VfYXJndW1lbnQoX3R5cGUsIHBhcmFtZXRlci5pc19vcHRpb25hbCk6CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHBhcmFtX25hbWUgKyAnLnJlbGVhc2VOb25OdWxsKCknCisgICAgICAgICAg
ICBpZiBDcHBHZW5lcmF0b3Iuc2hvdWxkX2RlcmVmZXJlbmNlX2FyZ3VtZW50KF90eXBlLCBwYXJh
bWV0ZXIuaXNfb3B0aW9uYWwpOgorICAgICAgICAgICAgICAgIHJldHVybiAnKicgKyBwYXJhbV9u
YW1lCisgICAgICAgICAgICBpZiBDcHBHZW5lcmF0b3Iuc2hvdWxkX21vdmVfYXJndW1lbnQoX3R5
cGUsIHBhcmFtZXRlci5pc19vcHRpb25hbCk6CisgICAgICAgICAgICAgICAgcmV0dXJuICdXVEZN
b3ZlKCVzKScgJSBwYXJhbV9uYW1lCisgICAgICAgICAgICByZXR1cm4gcGFyYW1fbmFtZQogCiAg
ICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gY29tbWFuZC5jYWxsX3BhcmFtZXRlcnM6Ci0gICAgICAg
ICAgICBpbl9wYXJhbV9uYW1lID0gJ2luXyVzJyAlIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZQor
ICAgICAgICAgICAgaW5fcGFyYW1fbmFtZSA9IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZQorICAg
ICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAgIGluX3Bh
cmFtX25hbWUgPSAnb3B0XycgKyBpbl9wYXJhbV9uYW1lCisgICAgICAgICAgICBpbl9wYXJhbV9u
YW1lID0gJ2luXycgKyBpbl9wYXJhbV9uYW1lCiAgICAgICAgICAgICBvYmpjX2luX3BhcmFtX25h
bWUgPSAnb18lcycgJSBpbl9wYXJhbV9uYW1lCiAgICAgICAgICAgICBvYmpjX3R5cGUgPSBzZWxm
Lm9iamNfdHlwZV9mb3JfcGFyYW0oZG9tYWluLCBjb21tYW5kLmNvbW1hbmRfbmFtZSwgcGFyYW1l
dGVyLCBGYWxzZSkKICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UocGFyYW1ldGVyLnR5cGUsIEVu
dW1UeXBlKToKQEAgLTE5NCwxMSArMjI0LDggQEAgY2xhc3MgT2JqQ0JhY2tlbmREaXNwYXRjaGVy
SW1wbGVtZW50YXRpb25HZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6CiAKICAgICAgICAgICAgIGVs
c2U6CiAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgJXM7JyAlIGpvaW5fdHlwZV9h
bmRfbmFtZShvYmpjX3R5cGUsIG9iamNfaW5fcGFyYW1fbmFtZSkpCi0gICAgICAgICAgICAgICAg
bGluZXMuYXBwZW5kKCcgICAgaWYgKCVzKScgJSBpbl9wYXJhbV9uYW1lKQorICAgICAgICAgICAg
ICAgIGxpbmVzLmFwcGVuZCgnICAgIGlmICghISVzKScgJSBpbl9wYXJhbV9uYW1lKQogICAgICAg
ICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICAlcyA9ICVzOycgJSAob2JqY19pbl9wYXJh
bV9uYW1lLCBpbXBvcnRfZXhwcmVzc2lvbikpCi0KLSAgICAgICAgaWYgbGluZXM6Ci0gICAgICAg
ICAgICBsaW5lcy5hcHBlbmQoJycpCiAgICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCiAK
ICAgICBkZWYgX2dlbmVyYXRlX2ludm9jYXRpb25fZm9yX2NvbW1hbmQoc2VsZiwgZG9tYWluLCBj
b21tYW5kKToKQEAgLTIwNiw3ICsyMzMsMTAgQEAgY2xhc3MgT2JqQ0JhY2tlbmREaXNwYXRjaGVy
SW1wbGVtZW50YXRpb25HZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6CiAgICAgICAgIHBhaXJzLmFw
cGVuZCgnV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjaycpCiAgICAgICAgIHBhaXJzLmFw
cGVuZCgnc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjaycpCiAgICAgICAgIGZvciBwYXJh
bWV0ZXIgaW4gY29tbWFuZC5jYWxsX3BhcmFtZXRlcnM6Ci0gICAgICAgICAgICBpbl9wYXJhbV9u
YW1lID0gJ2luXyVzJyAlIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZQorICAgICAgICAgICAgaW5f
cGFyYW1fbmFtZSA9IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZQorICAgICAgICAgICAgaWYgcGFy
YW1ldGVyLmlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAgIGluX3BhcmFtX25hbWUgPSAnb3B0
XycgKyBpbl9wYXJhbV9uYW1lCisgICAgICAgICAgICBpbl9wYXJhbV9uYW1lID0gJ2luXycgKyBp
bl9wYXJhbV9uYW1lCiAgICAgICAgICAgICBvYmpjX2luX3BhcmFtX2V4cHJlc3Npb24gPSAnb18l
cycgJSBpbl9wYXJhbV9uYW1lCiAgICAgICAgICAgICBpZiBub3QgcGFyYW1ldGVyLmlzX29wdGlv
bmFsOgogICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UocGFyYW1ldGVyLnR5cGUsIEVudW1U
eXBlKToKQEAgLTIxNyw2ICsyNDcsNiBAQCBjbGFzcyBPYmpDQmFja2VuZERpc3BhdGNoZXJJbXBs
ZW1lbnRhdGlvbkdlbmVyYXRvcihPYmpDR2VuZXJhdG9yKToKICAgICAgICAgICAgICAgICBpZiBp
c2luc3RhbmNlKHBhcmFtZXRlci50eXBlLCBFbnVtVHlwZSk6CiAgICAgICAgICAgICAgICAgICAg
IG9iamNfaW5fcGFyYW1fZXhwcmVzc2lvbiA9ICclcy52YWx1ZSgpJyAlIG9iamNfaW5fcGFyYW1f
ZXhwcmVzc2lvbgogCi0gICAgICAgICAgICAgICAgb3B0aW9uYWxfZXhwcmVzc2lvbiA9ICcoJXMg
PyAmJXMgOiBuaWwpJyAlIChpbl9wYXJhbV9uYW1lLCBvYmpjX2luX3BhcmFtX2V4cHJlc3Npb24p
CisgICAgICAgICAgICAgICAgb3B0aW9uYWxfZXhwcmVzc2lvbiA9ICcoISElcyA/ICYlcyA6IG5p
bCknICUgKGluX3BhcmFtX25hbWUsIG9iamNfaW5fcGFyYW1fZXhwcmVzc2lvbikKICAgICAgICAg
ICAgICAgICBwYWlycy5hcHBlbmQoJyVzOiVzJyAlIChwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUs
IG9wdGlvbmFsX2V4cHJlc3Npb24pKQogICAgICAgICByZXR1cm4gJyAgICBbbV9kZWxlZ2F0ZSAl
cyVzXTsnICUgKGNvbW1hbmQuY29tbWFuZF9uYW1lLCAnICcuam9pbihwYWlycykpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5l
cmF0ZV9vYmpjX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2Zy
b250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkKaW5kZXggZGRkYjI3YTg4YzJiYWZm
NWZjNmYyN2JjNDNhMDFlMzFlYTljZDQ5ZC4uOGQ0MTkzODEyM2Y5MDZmYmYwOTFlMmFiN2IzNmE2
MDczM2RiMzk1MiAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVu
dGF0aW9uLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9j
b2RlZ2VuL2dlbmVyYXRlX29iamNfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5w
eQpAQCAtMTI1LDExICsxMjUsMTEgQEAgY2xhc3MgT2JqQ0Zyb250ZW5kRGlzcGF0Y2hlckltcGxl
bWVudGF0aW9uR2VuZXJhdG9yKE9iakNHZW5lcmF0b3IpOgogICAgICAgICBpZiByZXF1aXJlZF9w
b2ludGVyX3BhcmFtZXRlcnMgb3Igb3B0aW9uYWxfcG9pbnRlcl9wYXJhbWV0ZXJzOgogICAgICAg
ICAgICAgbGluZXMuYXBwZW5kKCcnKQogCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIFJlZjxK
U09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsnKQotICAg
ICAgICBsaW5lcy5hcHBlbmQoJyAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3Ms
ICIlcy4lcyJfcyk7JyAlIChkb21haW4uZG9tYWluX25hbWUsIGV2ZW50LmV2ZW50X25hbWUpKQor
ICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNP
Tjo6T2JqZWN0OjpjcmVhdGUoKTsnKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBwcm90b2Nv
bF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICIlcy4lcyJfcyk7JyAlIChkb21h
aW4uZG9tYWluX25hbWUsIGV2ZW50LmV2ZW50X25hbWUpKQogICAgICAgICBpZiBldmVudC5ldmVu
dF9wYXJhbWV0ZXJzOgogICAgICAgICAgICAgbGluZXMuZXh0ZW5kKHNlbGYuX2dlbmVyYXRlX2V2
ZW50X291dF9wYXJhbWV0ZXJzKGRvbWFpbiwgZXZlbnQpKQotICAgICAgICBsaW5lcy5hcHBlbmQo
JyAgICByb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7JykKKyAg
ICAgICAgbGluZXMuYXBwZW5kKCcgICAgcm91dGVyLnNlbmRFdmVudChwcm90b2NvbF9qc29uTWVz
c2FnZS0+dG9KU09OU3RyaW5nKCkpOycpCiAgICAgICAgIGxpbmVzLmFwcGVuZCgnfScpCiAgICAg
ICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGV2ZW50LmNvbmRp
dGlvbiwgJ1xuJy5qb2luKGxpbmVzKSkKIApAQCAtMTQ1LDE2ICsxNDUsMTYgQEAgY2xhc3MgT2Jq
Q0Zyb250ZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKE9iakNHZW5lcmF0b3Ip
OgogCiAgICAgZGVmIF9nZW5lcmF0ZV9ldmVudF9vdXRfcGFyYW1ldGVycyhzZWxmLCBkb21haW4s
IGV2ZW50KToKICAgICAgICAgbGluZXMgPSBbXQotICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBS
ZWY8SlNPTjo6T2JqZWN0PiBwYXJhbXNPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOycp
CisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGF1dG8gcHJvdG9jb2xfcGFyYW1zT2JqZWN0ID0g
SlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsnKQogICAgICAgICBmb3IgcGFyYW1ldGVyIGluIGV2ZW50
LmV2ZW50X3BhcmFtZXRlcnM6CiAgICAgICAgICAgICBrZXllZF9zZXRfbWV0aG9kID0gQ3BwR2Vu
ZXJhdG9yLmNwcF9zZXR0ZXJfbWV0aG9kX2Zvcl90eXBlKHBhcmFtZXRlci50eXBlKQogICAgICAg
ICAgICAgdmFyX25hbWUgPSBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUKICAgICAgICAgICAgIHNh
ZmVfdmFyX25hbWUgPSAnKColcyknICUgdmFyX25hbWUgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFs
IGVsc2UgdmFyX25hbWUKICAgICAgICAgICAgIGV4cG9ydF9leHByZXNzaW9uID0gc2VsZi5vYmpj
X3Byb3RvY29sX2V4cG9ydF9leHByZXNzaW9uX2Zvcl92YXJpYWJsZShwYXJhbWV0ZXIudHlwZSwg
c2FmZV92YXJfbmFtZSkKICAgICAgICAgICAgIGlmIG5vdCBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6
Ci0gICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgcGFyYW1zT2JqZWN0LT4lcygiJXMi
X3MsICVzKTsnICUgKGtleWVkX3NldF9tZXRob2QsIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwg
ZXhwb3J0X2V4cHJlc3Npb24pKQorICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIHBy
b3RvY29sX3BhcmFtc09iamVjdC0+JXMoIiVzIl9zLCAlcyk7JyAlIChrZXllZF9zZXRfbWV0aG9k
LCBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUsIGV4cG9ydF9leHByZXNzaW9uKSkKICAgICAgICAg
ICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgaWYgKCVzKScgJSAo
cGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKSkKLSAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQo
JyAgICAgICAgcGFyYW1zT2JqZWN0LT4lcygiJXMiX3MsICVzKTsnICUgKGtleWVkX3NldF9tZXRo
b2QsIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwgZXhwb3J0X2V4cHJlc3Npb24pKQotICAgICAg
ICBsaW5lcy5hcHBlbmQoJyAgICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiX3MsIFdU
Rk1vdmUocGFyYW1zT2JqZWN0KSk7JykKKyAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAg
ICAgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT4lcygiJXMiX3MsICVzKTsnICUgKGtleWVkX3Nl
dF9tZXRob2QsIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwgZXhwb3J0X2V4cHJlc3Npb24pKQor
ICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0T2JqZWN0
KCJwYXJhbXMiX3MsIFdURk1vdmUocHJvdG9jb2xfcGFyYW1zT2JqZWN0KSk7JykKICAgICAgICAg
cmV0dXJuIGxpbmVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0b3IucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0b3IucHkKaW5kZXggOTRkMThkOWQ2NjE5NGQx
NTg1YzBlMTBjMDQ5NGJiNGIxYTEzYjk1NS4uMjlhMmRlYTcyNGYwYmJlY2ZlYmE2ZGI5MjA2MDgx
NzAxZTUxMGM1MSAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2NvZGVnZW4vZ2VuZXJhdG9yLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRvci5weQpAQCAtNzMsOSArNzMsNiBAQCBf
VFlQRVNfTkVFRElOR19SVU5USU1FX0NBU1RTID0gc2V0KFsKICAgICAiUnVudGltZS5Db2xsZWN0
aW9uRW50cnkiLAogICAgICJEZWJ1Z2dlci5GdW5jdGlvbkRldGFpbHMiLAogICAgICJEZWJ1Z2dl
ci5DYWxsRnJhbWUiLAotICAgICJDYW52YXMuVHJhY2VMb2ciLAotICAgICJDYW52YXMuUmVzb3Vy
Y2VJbmZvIiwKLSAgICAiQ2FudmFzLlJlc291cmNlU3RhdGUiLAogICAgICMgVGhpcyBzaG91bGQg
YmUgYSB0ZW1wb3JhcnkgaGFjay4gVGltZWxpbmVFdmVudCBzaG91bGQgYmUgY3JlYXRlZCB2aWEg
Z2VuZXJhdGVkIEMrKyBBUEkuCiAgICAgIlRpbWVsaW5lLlRpbWVsaW5lRXZlbnQiLAogICAgICMg
Rm9yIHRlc3RpbmcgcHVycG9zZXMgb25seS4KQEAgLTg1LDEwICs4MiwxOSBAQCBfVFlQRVNfTkVF
RElOR19SVU5USU1FX0NBU1RTID0gc2V0KFsKICMgRklYTUU6IFRoaXMgc2hvdWxkIGJlIGNvbnZl
cnRlZCBpbnRvIGEgcHJvcGVydHkgaW4gSlNPTi4KIF9UWVBFU19XSVRIX09QRU5fRklFTERTID0g
ewogICAgICJUaW1lbGluZS5UaW1lbGluZUV2ZW50IjogW10sCi0gICAgIyBJbnNwZWN0b3JTdHls
ZVNoZWV0IG5vdCBvbmx5IGNyZWF0ZXMgdGhpcyBwcm9wZXJ0eSBidXQgd2FudHMgdG8gcmVhZCBp
dCBhbmQgbW9kaWZ5IGl0LgotICAgICJDU1MuQ1NTUHJvcGVydHkiOiBbXSwKLSAgICAjIEluc3Bl
Y3Rvck5ldHdvcmtBZ2VudCBuZWVkcyB0byB1cGRhdGUgbWltZS10eXBlLgotICAgICJOZXR3b3Jr
LlJlc3BvbnNlIjogWyJtaW1lVHlwZSJdLAorICAgICJDU1MuQ1NTUHJvcGVydHkiOiBbInByaW9y
aXR5IiwgInBhcnNlZE9rIiwgInN0YXR1cyJdLAorICAgICJET00uSGlnaGxpZ2h0Q29uZmlnIjog
W10sCisgICAgIkRPTS5SR0JBQ29sb3IiOiBbXSwKKyAgICAiRE9NU3RvcmFnZS5TdG9yYWdlSWQi
OiBbXSwKKyAgICAiRGVidWdnZXIuQnJlYWtwb2ludEFjdGlvbiI6IFtdLAorICAgICJEZWJ1Z2dl
ci5CcmVha3BvaW50T3B0aW9ucyI6IFtdLAorICAgICJEZWJ1Z2dlci5Mb2NhdGlvbiI6IFtdLAor
ICAgICJJbmRleGVkREIuS2V5IjogW10sCisgICAgIkluZGV4ZWREQi5LZXlSYW5nZSI6IFtdLAor
ICAgICJOZXR3b3JrLlJlc3BvbnNlIjogWyJzdGF0dXMiLCAic3RhdHVzVGV4dCIsICJtaW1lVHlw
ZSIsICJzb3VyY2UiXSwKKyAgICAiUGFnZS5Db29raWUiOiBbXSwKKyAgICAiUnVudGltZS5DYWxs
QXJndW1lbnQiOiBbIm9iamVjdElkIl0sCisgICAgIlJ1bnRpbWUuVHlwZUxvY2F0aW9uIjogW10s
CiAgICAgIyBGb3IgdGVzdGluZyBwdXJwb3NlcyBvbmx5LgogICAgICJUZXN0Lk9wZW5QYXJhbWV0
ZXJzIjogWyJhbHBoYSJdLAogfQpAQCAtMTM0LDcgKzE0MCw3IEBAIGNsYXNzIEdlbmVyYXRvcjoK
ICAgICAgICAgICAgIGlmIHNlbGYubW9kZWwoKS5mcmFtZXdvcmsubmFtZSBub3QgaW4gYWxsb3dl
ZF9mcmFtZXdvcmtzOgogICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAKLSAgICAgICAgICAgIGlm
IGZyYW1ld29ya19uYW1lID09ICJXVEYiOgorICAgICAgICAgICAgaWYgZnJhbWV3b3JrX25hbWUg
PT0gIldURiIgb3IgZnJhbWV3b3JrX25hbWUgPT0gInN0ZCI6CiAgICAgICAgICAgICAgICAgaW5j
bHVkZXMuYWRkKCIjaW5jbHVkZSA8JXM+IiAlIGhlYWRlcl9wYXRoKQogICAgICAgICAgICAgZWxp
ZiBzZWxmLm1vZGVsKCkuZnJhbWV3b3JrLm5hbWUgIT0gZnJhbWV3b3JrX25hbWU6CiAgICAgICAg
ICAgICAgICAgaW5jbHVkZXMuYWRkKCIjaW5jbHVkZSA8JXMvJXM+IiAlIChmcmFtZXdvcmtfbmFt
ZSwgb3MucGF0aC5iYXNlbmFtZShoZWFkZXJfcGF0aCkpKQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vb2JqY19nZW5lcmF0b3IucHkg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9vYmpjX2dl
bmVyYXRvci5weQppbmRleCA3MzE1M2I5NTQ2NjcyYjk5MDRlN2Y1ZWI5MTg4NjVmYzhhNTE2OGI2
Li5hMmQzNzZkZjNiOTQzZGRjOTE2NzhiYmJhNWEyZWQzZjAyZTM3MGMwIDEwMDc1NQotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9vYmpjX2dlbmVy
YXRvci5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29k
ZWdlbi9vYmpjX2dlbmVyYXRvci5weQpAQCAtMjYzLDcgKzI2Myw3IEBAIGNsYXNzIE9iakNHZW5l
cmF0b3IoR2VuZXJhdG9yKToKICAgICAgICAgaWYgKGlzaW5zdGFuY2UoX3R5cGUsIEVudW1UeXBl
KSk6CiAgICAgICAgICAgICByZXR1cm4gT2JqQ0dlbmVyYXRvci5wcm90b2NvbF90eXBlX2Zvcl90
eXBlKF90eXBlLnByaW1pdGl2ZV90eXBlKQogICAgICAgICBpZiAoaXNpbnN0YW5jZShfdHlwZSwg
T2JqZWN0VHlwZSkpOgotICAgICAgICAgICAgcmV0dXJuICdJbnNwZWN0b3I6OlByb3RvY29sOjol
czo6JXMnICUgKF90eXBlLnR5cGVfZG9tYWluKCkuZG9tYWluX25hbWUsIF90eXBlLnJhd19uYW1l
KCkpCisgICAgICAgICAgICByZXR1cm4gJ1Byb3RvY29sOjolczo6JXMnICUgKF90eXBlLnR5cGVf
ZG9tYWluKCkuZG9tYWluX25hbWUsIF90eXBlLnJhd19uYW1lKCkpCiAgICAgICAgIGlmIChpc2lu
c3RhbmNlKF90eXBlLCBBcnJheVR5cGUpKToKICAgICAgICAgICAgIHN1Yl90eXBlID0gT2JqQ0dl
bmVyYXRvci5wcm90b2NvbF90eXBlX2Zvcl90eXBlKF90eXBlLmVsZW1lbnRfdHlwZSkKICAgICAg
ICAgICAgIHJldHVybiAnSlNPTjo6QXJyYXlPZjwlcz4nICUgc3ViX3R5cGUKQEAgLTM1Myw4ICsz
NTMsNiBAQCBjbGFzcyBPYmpDR2VuZXJhdG9yKEdlbmVyYXRvcik6CiAgICAgICAgIGlmIChpc2lu
c3RhbmNlKF90eXBlLCBQcmltaXRpdmVUeXBlKSk6CiAgICAgICAgICAgICByZXR1cm4gc2VsZi5v
YmpjX3R5cGVfZm9yX3Jhd19uYW1lKF90eXBlLnJhd19uYW1lKCkpCiAgICAgICAgIGlmIChpc2lu
c3RhbmNlKF90eXBlLCBFbnVtVHlwZSkpOgotICAgICAgICAgICAgaWYgX3R5cGUuaXNfYW5vbnlt
b3VzOgotICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLm9iamNfZW51bV9uYW1lX2Zvcl9hbm9u
eW1vdXNfZW51bV9wYXJhbWV0ZXIoZG9tYWluLCBldmVudF9vcl9jb21tYW5kX25hbWUsIHBhcmFt
ZXRlcikKICAgICAgICAgICAgIHJldHVybiBzZWxmLm9iamNfZW51bV9uYW1lX2Zvcl9ub25fYW5v
bnltb3VzX2VudW0oX3R5cGUpCiAgICAgICAgIGlmIChpc2luc3RhbmNlKF90eXBlLCBPYmplY3RU
eXBlKSk6CiAgICAgICAgICAgICByZXR1cm4gc2VsZi5vYmpjX25hbWVfZm9yX3R5cGUoX3R5cGUp
ICsgJyAqJwpAQCAtMzk4LDggKzM5Niw2IEBAIGNsYXNzIE9iakNHZW5lcmF0b3IoR2VuZXJhdG9y
KToKIAogICAgIGRlZiBvYmpjX3Byb3RvY29sX2ltcG9ydF9leHByZXNzaW9uX2Zvcl9wYXJhbWV0
ZXIoc2VsZiwgbmFtZSwgZG9tYWluLCBldmVudF9vcl9jb21tYW5kX25hbWUsIHBhcmFtZXRlcik6
CiAgICAgICAgIGlmIGlzaW5zdGFuY2UocGFyYW1ldGVyLnR5cGUsIEVudW1UeXBlKToKLSAgICAg
ICAgICAgIGlmIHBhcmFtZXRlci50eXBlLmlzX2Fub255bW91czoKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gJ2Zyb21Qcm90b2NvbFN0cmluZzwlcz4oJXMpJyAlIChzZWxmLm9iamNfZW51bV9uYW1l
X2Zvcl9hbm9ueW1vdXNfZW51bV9wYXJhbWV0ZXIoZG9tYWluLCBldmVudF9vcl9jb21tYW5kX25h
bWUsIHBhcmFtZXRlciksIG5hbWUpCiAgICAgICAgICAgICByZXR1cm4gJ2Zyb21Qcm90b2NvbFN0
cmluZzwlcz4oJXMpJyAlIChzZWxmLm9iamNfZW51bV9uYW1lX2Zvcl9ub25fYW5vbnltb3VzX2Vu
dW0ocGFyYW1ldGVyLnR5cGUpLCBuYW1lKQogICAgICAgICByZXR1cm4gc2VsZi5vYmpjX3Byb3Rv
Y29sX2ltcG9ydF9leHByZXNzaW9uX2Zvcl92YXJpYWJsZShwYXJhbWV0ZXIudHlwZSwgbmFtZSkK
IApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2Nv
ZGVnZW4vb2JqY19nZW5lcmF0b3JfdGVtcGxhdGVzLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vb2JqY19nZW5lcmF0b3JfdGVtcGxhdGVzLnB5Cmlu
ZGV4IDMyNmMyNjI1ZWEzNGYwNjZiMmQ0Y2M5ODQ2ZTE0YTIzNDFiODE4ODEuLmI1NmQxNDgxOTVj
NGI2NWZmZDI0M2E5OTEwYWFkMzYzMzNhMDg1MmQgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL29iamNfZ2VuZXJhdG9yX3RlbXBsYXRl
cy5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdl
bi9vYmpjX2dlbmVyYXRvcl90ZW1wbGF0ZXMucHkKQEAgLTExNCwxMyArMTE0LDEzIEBAIHByaXZh
dGU6CiAgICAgIiIidm9pZCBPYmpDSW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRj
aGVyOjoke2NvbW1hbmROYW1lfSgke3BhcmFtZXRlcnN9KQogewogICAgIGlmICghJHtyZXNwb25k
c1RvU2VsZWN0b3J9KSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3Rv
Y29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICIn
JHtkb21haW5OYW1lfS4ke2NvbW1hbmROYW1lfScgd2FzIG5vdCBmb3VuZCJfcyk7CisgICAgICAg
IGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocHJvdG9jb2xfY2FsbElk
LCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInJHtkb21haW5OYW1lfS4ke2Nv
bW1hbmROYW1lfScgd2FzIG5vdCBmb3VuZCJfcyk7CiAgICAgICAgIGJhY2tlbmREaXNwYXRjaGVy
KCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBp
ZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRj
aGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5y
ZXBvcnRQcm90b2NvbEVycm9yKHByb3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNl
cnZlckVycm9yLCBlcnJvcik7CiAgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5k
aW5nRXJyb3JzKCk7CiAgICAgfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2VudW0tdmFsdWVzLmpzb24gYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZW51bS12YWx1ZXMuanNvbgppbmRleCBj
ZGFkNjFkZjdjOWY5Yzc2ZTY5Mjg5N2MzZGZlMGIwODIzZjkwZTRkLi4yODE1NjFiOTQ4ZTE5YTQx
ZmEwYTJjODBlY2YyZTA5YWYzYThiYzQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZW51bS12YWx1ZXMuanNvbgorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZW51bS12YWx1ZXMuanNvbgpA
QCAtMyw5ICszLDkgQEAKICAgICAiZG9tYWluIjogIlR5cGVEb21haW4iLAogICAgICJ0eXBlcyI6
IFsKICAgICAgICAgewotICAgICAgICAgICAgImlkIjogIlR5cGVEb21haW5FbnVtIiwKKyAgICAg
ICAgICAgICJpZCI6ICJFbnVtIiwKICAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCi0gICAg
ICAgICAgICAiZW51bSI6IFsic2hhcmVkIiwgInJlZCIsICJncmVlbiIsICJibHVlIl0KKyAgICAg
ICAgICAgICJlbnVtIjogWyJzaGFyZWQiLCAiMSIsICIyIl0KICAgICAgICAgfQogICAgIF0KIH0s
CkBAIC0xMywxMCArMTMsMTggQEAKICAgICAiZG9tYWluIjogIkNvbW1hbmREb21haW4iLAogICAg
ICJjb21tYW5kcyI6IFsKICAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAiY29tbWFuZFdp
dGhFbnVtUmV0dXJuVmFsdWUiLAotICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbXSwKKyAgICAg
ICAgICAgICJuYW1lIjogImNvbW1hbmQiLAorICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCisg
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJlbnVtUmVxdWlyZWQiLCAiJHJlZiI6ICJUeXBlRG9t
YWluLkVudW0iIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJlbnVtT3B0aW9uYWwiLCAi
JHJlZiI6ICJUeXBlRG9tYWluLkVudW0iLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJwYXJhbWV0ZXJSZXF1aXJlZCIsICJ0eXBlIjogInN0cmluZyIsICJl
bnVtIjogWyJzaGFyZWQiLCAic2hhcmVkUmVxdWlyZWQiLCAiYmxhY2siXSB9LAorICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAicGFyYW1ldGVyT3B0aW9uYWwiLCAidHlwZSI6ICJzdHJpbmciLCAi
ZW51bSI6IFsic2hhcmVkIiwgInNoYXJlZE9wdGlvbmFsIiwgInJlZCJdLCAib3B0aW9uYWwiOiB0
cnVlIH0KKyAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAicmV0dXJucyI6IFsKLSAgICAgICAg
ICAgICAgICB7ICJuYW1lIjogInJldHVyblZhbHVlIiwgInR5cGUiOiAic3RyaW5nIiwgImVudW0i
OiBbInNoYXJlZCIsICJjeWFuIiwgIm1hZ2VudGEiLCAieWVsbG93Il0gfQorICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAiZW51bVJlcXVpcmVkIiwgIiRyZWYiOiAiVHlwZURvbWFpbi5FbnVtIiB9
LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZW51bU9wdGlvbmFsIiwgIiRyZWYiOiAiVHlw
ZURvbWFpbi5FbnVtIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAicmV0dXJuUmVxdWlyZWQiLCAidHlwZSI6ICJzdHJpbmciLCAiZW51bSI6IFsic2hhcmVk
IiwgInNoYXJlZFJlcXVpcmVkIiwgIndoaXRlIl0gfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1l
IjogInJldHVybk9wdGlvbmFsIiwgInR5cGUiOiAic3RyaW5nIiwgImVudW0iOiBbInNoYXJlZCIs
ICJzaGFyZWRPcHRpb25hbCIsICJibHVlIl0sICJvcHRpb25hbCI6IHRydWUgfQogICAgICAgICAg
ICAgXQogICAgICAgICB9CiAgICAgXQpAQCAtMjUsOSArMzMsMTIgQEAKICAgICAiZG9tYWluIjog
IkV2ZW50RG9tYWluIiwKICAgICAiZXZlbnRzIjogWwogICAgICAgICB7Ci0gICAgICAgICAgICAi
bmFtZSI6ICJldmVudFdpdGhFbnVtUGFyYW1ldGVyIiwKKyAgICAgICAgICAgICJuYW1lIjogImV2
ZW50IiwKICAgICAgICAgICAgICJwYXJhbWV0ZXJzIjogWwotICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAicGFyYW1ldGVyIiwgInR5cGUiOiAic3RyaW5nIiwgImVudW0iOiBbInNoYXJlZCIsICJi
bGFjayIsICJ3aGl0ZSJdIH0KKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImVudW1SZXF1aXJl
ZCIsICIkcmVmIjogIlR5cGVEb21haW4uRW51bSIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1l
IjogImVudW1PcHRpb25hbCIsICIkcmVmIjogIlR5cGVEb21haW4uRW51bSIsICJvcHRpb25hbCI6
IHRydWUgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBhcmFtZXRlclJlcXVpcmVkIiwg
InR5cGUiOiAic3RyaW5nIiwgImVudW0iOiBbInNoYXJlZCIsICJzaGFyZWRSZXF1aXJlZCIsICJn
cmV5Il0gfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBhcmFtZXRlck9wdGlvbmFsIiwg
InR5cGUiOiAic3RyaW5nIiwgImVudW0iOiBbInNoYXJlZCIsICJzaGFyZWRPcHRpb25hbCIsICJn
cmVlbiJdLCAib3B0aW9uYWwiOiB0cnVlIH0KICAgICAgICAgICAgIF0KICAgICAgICAgfQogICAg
IF0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9leHBlY3RlZC9jb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2Fi
bGVUeXBlLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2V4cGVjdGVkL2NvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVi
dWdnYWJsZVR5cGUuanNvbi1yZXN1bHQKaW5kZXggZTljMThiZmFlNWIzMmM5NTdiYmVhZDRlMGVi
OWQwNmI2Mzk4YjA2My4uMzJkNGE4ZTgxMTQ2MDFlZmQ2NmVmOTg3OWJkY2E2Y2ZmZTcwYmM4OSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2V4cGVjdGVkL2NvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5
cGUuanNvbi1yZXN1bHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2V4cGVjdGVkL2NvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVi
dWdnYWJsZVR5cGUuanNvbi1yZXN1bHQKQEAgLTcwLDcgKzcwLDcgQEAgSW5zcGVjdG9yQmFja2Vu
ZC5hY3RpdmF0ZURvbWFpbigiRG9tYWluIiwgWyJwYWdlIl0pOwogCiAjaWYgRU5BQkxFKElOU1BF
Q1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBl
cy5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgogI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CiAKQEAgLTg4LDcgKzg4LDcgQEAgcHJp
dmF0ZToKIGNsYXNzIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyIDogcHVibGljIEFs
dGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5BbHRlcm5h
dGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlcigpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBDb21tYW5k
KGxvbmcgY2FsbElkKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIENvbW1hbmQobG9uZyBwcm90b2Nv
bF9jYWxsSWQpID0gMDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgpAQCAtMTMwLDEx
ICsxMzAsMTQgQEAgcHVibGljOgogCiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgog
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Cisj
aW5jbHVkZSA8dHVwbGU+CisjaW5jbHVkZSA8d3RmL0V4cGVjdGVkLmg+CisjaW5jbHVkZSA8d3Rm
L09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFj
ZSBJbnNwZWN0b3IgewogCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKwogCiAjaWYgRU5B
QkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiBjbGFzcyBBbHRlcm5hdGVEb21h
aW5CYWNrZW5kRGlzcGF0Y2hlcjsKQEAgLTE0Miw3ICsxNDUsNyBAQCBjbGFzcyBBbHRlcm5hdGVE
b21haW5CYWNrZW5kRGlzcGF0Y2hlcjsKIAogY2xhc3MgRG9tYWluQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyIHsKIHB1YmxpYzoKLSAgICB2aXJ0dWFsIHZvaWQgQ29tbWFuZChFcnJvclN0cmluZyYp
ID0gMDsKKyAgICB2aXJ0dWFsIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IENvbW1hbmQo
KSA9IDA7CiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB+RG9tYWluQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyKCk7CiB9OwpAQCAtMTUwLDkgKzE1Myw5IEBAIHByb3RlY3RlZDoKIGNsYXNzIERvbWFp
bkJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIFN1cHBsZW1lbnRhbEJhY2tlbmREaXNw
YXRjaGVyIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPERvbWFpbkJhY2tlbmREaXNwYXRjaGVy
PiBjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImLCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXIqKTsKLSAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1l
dGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKSBmaW5hbDsKKyAgICB2b2lkIGRpc3Bh
dGNoKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBjb25zdCBTdHJpbmcmIHByb3RvY29sX21ldGhvZCwg
UmVmPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9tZXNzYWdlKSBmaW5hbDsKIHByaXZhdGU6Ci0g
ICAgdm9pZCBDb21tYW5kKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBh
cmFtZXRlcnMpOworICAgIHZvaWQgQ29tbWFuZChsb25nIHByb3RvY2xfY2FsbElkLCBSZWZQdHI8
SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX3BhcmFtZXRlcnMpOwogI2lmIEVOQUJMRShJTlNQRUNU
T1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogcHVibGljOgogICAgIHZvaWQgc2V0QWx0ZXJuYXRl
RGlzcGF0Y2hlcihBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlciogYWx0ZXJuYXRlRGlz
cGF0Y2hlcikgeyBtX2FsdGVybmF0ZURpc3BhdGNoZXIgPSBhbHRlcm5hdGVEaXNwYXRjaGVyOyB9
CkBAIC0yMDEsOSArMjA0LDcgQEAgcHJpdmF0ZToKICNpbmNsdWRlICJUZXN0QmFja2VuZERpc3Bh
dGNoZXJzLmgiCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJv
dXRlci5oPgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVy
RGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiAjaWYgRU5BQkxF
KElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAjaW5jbHVkZSAiVGVzdEFsdGVybmF0
ZUJhY2tlbmREaXNwYXRjaGVycy5oIgpAQCAtMjI1LDM4ICsyMjYsMzggQEAgRG9tYWluQmFja2Vu
ZERpc3BhdGNoZXI6OkRvbWFpbkJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiBi
YWNrZW5kRGlzcGEKICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJG
b3JEb21haW4oIkRvbWFpbiJfcywgdGhpcyk7CiB9CiAKLXZvaWQgRG9tYWluQmFja2VuZERpc3Bh
dGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVm
PEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKQordm9pZCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6
ZGlzcGF0Y2gobG9uZyBwcm90b2NvbF9jYWxsSWQsIGNvbnN0IFN0cmluZyYgcHJvdG9jb2xfbWV0
aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX21lc3NhZ2UpCiB7CiAgICAgUmVmPERv
bWFpbkJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKIAotICAgIFJlZlB0cjxKU09O
OjpPYmplY3Q+IHBhcmFtZXRlcnM7Ci0gICAgbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3Ms
IHBhcmFtZXRlcnMpOworICAgIGF1dG8gcHJvdG9jb2xfcGFyYW1ldGVycyA9IHByb3RvY29sX21l
c3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9zKTsKIAotICAgIGlmIChtZXRob2QgPT0gIkNvbW1h
bmQiKSB7Ci0gICAgICAgIENvbW1hbmQocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsK
KyAgICBpZiAocHJvdG9jb2xfbWV0aG9kID09ICJDb21tYW5kIikgeworICAgICAgICBDb21tYW5k
KHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9wYXJhbWV0ZXJzKSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2Nv
bEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEb21haW4uIiArIG1l
dGhvZCArICInIHdhcyBub3QgZm91bmQiKTsKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBv
cnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEb21h
aW4uIiArIHByb3RvY29sX21ldGhvZCArICInIHdhcyBub3QgZm91bmQiKTsKIH0KIAotdm9pZCBE
b21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Q29tbWFuZChsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpT
T046Ok9iamVjdD4mJikKK3ZvaWQgRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkNvbW1hbmQobG9u
ZyBwcm90b2NvbF9jYWxsSWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCiB7CiAjaWYgRU5BQkxF
KElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAgICAgaWYgKG1fYWx0ZXJuYXRlRGlz
cGF0Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPkNvbW1hbmQocmVxdWVz
dElkKTsKKyAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5Db21tYW5kKHByb3RvY29sX2Nh
bGxJZCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RP
Ul9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAKLSAgICBFcnJvclN0cmluZyBlcnJvcjsKLSAgICBS
ZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIG1f
YWdlbnQtPkNvbW1hbmQoZXJyb3IpOworICAgIGF1dG8gcmVzdWx0ID0gbV9hZ2VudC0+Q29tbWFu
ZCgpOworICAgIGlmICghcmVzdWx0KSB7CisgICAgICAgIEFTU0VSVCghcmVzdWx0LmVycm9yKCku
aXNFbXB0eSgpKTsKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xF
cnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIHJlc3VsdC5lcnJvcigpKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCi0gICAgICAg
IG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVz
dWx0KSwgZmFsc2UpOwotICAgIGVsc2UKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVw
b3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUo
ZXJyb3IpKTsKKyAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0Ojpj
cmVhdGUoKTsKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocHJvdG9jb2xf
Y2FsbElkLCBXVEZNb3ZlKHByb3RvY29sX2pzb25NZXNzYWdlKSwgZmFsc2UpOwogfQogCiB9IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKQEAgLTI5Nyw2ICsyOTgsNyBAQCB2b2lkIERvbWFpbkJhY2tl
bmREaXNwYXRjaGVyOjpDb21tYW5kKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0
PiYmKQogCiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPHd0Zi9K
U09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewpAQCAtMzQ5LDE2ICszNTEs
MTUgQEAgcHJpdmF0ZToKICNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgogCiAj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNs
dWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCiB2b2lk
IERvbWFpbkZyb250ZW5kRGlzcGF0Y2hlcjo6RXZlbnQoKQogewotICAgIFJlZjxKU09OOjpPYmpl
Y3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBqc29uTWVzc2Fn
ZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJEb21haW4uRXZlbnQiX3MpOworICAgIGF1dG8gcHJv
dG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIHByb3RvY29s
X2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRvbWFpbi5FdmVudCJfcyk7CiAK
LSAgICBtX2Zyb250ZW5kUm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5n
KCkpOworICAgIG1fZnJvbnRlbmRSb3V0ZXIuc2VuZEV2ZW50KHByb3RvY29sX2pzb25NZXNzYWdl
LT50b0pTT05TdHJpbmcoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgpAQCAtMzk4
LDcgKzM5OSw5IEBAIHZvaWQgRG9tYWluRnJvbnRlbmREaXNwYXRjaGVyOjpFdmVudCgpCiAjcHJh
Z21hIG9uY2UKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlw
ZXMuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9KU09OVmFs
dWVzLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC00NTIsOCArNDU1LDcgQEAg
bmFtZXNwYWNlIFByb3RvY29sIHsKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJUZXN0
UHJvdG9jb2xPYmplY3RzLmgiCiAKLSNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KIAogbmFt
ZXNwYWNlIEluc3BlY3RvciB7CiAKQEAgLTUwOSw3ICs1MTEsNyBAQCBjbGFzcyBPYmpDSW5zcGVj
dG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgQWx0ZXJuYXRlRG9tYWlu
QmFja2VuZAogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIE9iakNJ
bnNwZWN0b3JEb21haW5CYWNrZW5kRGlzcGF0Y2hlcihpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21h
aW5IYW5kbGVyPiBoYW5kbGVyKSB7IG1fZGVsZWdhdGUgPSBoYW5kbGVyOyB9Ci0gICAgdm9pZCBD
b21tYW5kKGxvbmcgcmVxdWVzdElkKSBmaW5hbDsKKyAgICB2b2lkIENvbW1hbmQobG9uZyBwcm90
b2NvbF9jYWxsSWQpIGZpbmFsOwogcHJpdmF0ZToKICAgICBSZXRhaW5QdHI8aWQ8VGVzdFByb3Rv
Y29sRG9tYWluRG9tYWluSGFuZGxlcj4+IG1fZGVsZWdhdGU7CiB9OwpAQCAtNTU3LDIxICs1NTks
MjIgQEAgcHJpdmF0ZToKIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKLXZvaWQgT2JqQ0luc3Bl
Y3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpDb21tYW5kKGxvbmcgcmVxdWVzdElkKQordm9p
ZCBPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkNvbW1hbmQobG9uZyBwcm90
b2NvbF9jYWxsSWQpCiB7CiAgICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6
QHNlbGVjdG9yKENvbW1hbmRXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6KV0pIHsK
LSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0
SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEb21haW4uQ29tbWFuZCcg
d2FzIG5vdCBmb3VuZCJfcyk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFBy
b3RvY29sRXJyb3IocHJvdG9jb2xfY2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90
Rm91bmQsICInRG9tYWluLkNvbW1hbmQnIHdhcyBub3QgZm91bmQiX3MpOwogICAgICAgICBiYWNr
ZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCiAgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7Ci0gICAg
ICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBC
YWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxsSWQsIEJhY2tlbmRE
aXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwogICAgICAgICBiYWNrZW5kRGlzcGF0Y2hl
cigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgIH07CiAKICAgICBpZCBzdWNjZXNzQ2FsbGJh
Y2sgPSBeewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVz
dElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7CisgICAgICAgIGF1dG8gcHJvdG9j
b2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBiYWNrZW5k
RGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocHJvdG9jb2xfY2FsbElkLCBXVEZNb3ZlKHByb3Rv
Y29sX2pzb25NZXNzYWdlKSwgZmFsc2UpOwogICAgIH07CiAKICAgICBbbV9kZWxlZ2F0ZSBDb21t
YW5kV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vz
c0NhbGxiYWNrXTsKQEAgLTc3Myw5ICs3NzYsOSBAQCB1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9y
OwogewogICAgIGNvbnN0IEZyb250ZW5kUm91dGVyJiByb3V0ZXIgPSBfY29udHJvbGxlci0+ZnJv
bnRlbmRSb3V0ZXIoKTsKIAotICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNP
Tjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2Qi
X3MsICJEb21haW4uRXZlbnQiX3MpOwotICAgIHJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2Ut
PnRvSlNPTlN0cmluZygpKTsKKyAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6
T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJt
ZXRob2QiX3MsICJEb21haW4uRXZlbnQiX3MpOworICAgIHJvdXRlci5zZW5kRXZlbnQocHJvdG9j
b2xfanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKIH0KIAogQGVuZApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2Nv
bW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2NvbW1hbmRzLXdpdGgtYXN5
bmMtYXR0cmlidXRlLmpzb24tcmVzdWx0CmluZGV4IGQxYzY5YjAzMWNkYjQ3MWQxOGEyZTQ5Nzhm
MjEyN2IwZWNkNDdjNTIuLjRjZTZmYzNkMjEzNmE0ZWI0YWIyMjQ2NTFhOWJmYjE2NWU0NTMwZjYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9leHBlY3RlZC9jb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uLXJlc3VsdAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQv
Y29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbi1yZXN1bHQKQEAgLTczLDcgKzczLDcg
QEAgSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiRGF0YWJhc2UiLCBudWxsKTsKIAog
I2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogCi0jaW5jbHVkZSAi
VGVzdFByb3RvY29sVHlwZXMuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KICNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgogCkBAIC05
MSwxMCArOTEsMTAgQEAgcHJpdmF0ZToKIGNsYXNzIEFsdGVybmF0ZURhdGFiYXNlQmFja2VuZERp
c3BhdGNoZXIgOiBwdWJsaWMgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewogcHVibGljOgog
ICAgIHZpcnR1YWwgfkFsdGVybmF0ZURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIoKSB7IH0KLSAg
ICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIGNh
bGxJZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnkpID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyBj
YWxsSWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5KSA9IDA7Ci0g
ICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVTUUxTeW5jKGxvbmcgY2FsbElkLCBpbnQgaW5fZGF0YWJh
c2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBleGVj
dXRlU1FMQXN5bmMobG9uZyBjYWxsSWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcm
IGluX3F1ZXJ5KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxS
ZXR1cm5WYWx1ZXMobG9uZyBwcm90b2NvbF9jYWxsSWQsIGludCBkYXRhYmFzZUlkLCBjb25zdCBT
dHJpbmcmIHF1ZXJ5KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVTUUxBc3luY09wdGlv
bmFsUmV0dXJuVmFsdWVzKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBpbnQgZGF0YWJhc2VJZCwgY29u
c3QgU3RyaW5nJiBxdWVyeSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU1FMU3luYyhs
b25nIHByb3RvY29sX2NhbGxJZCwgaW50IGRhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgcXVlcnkp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNRTEFzeW5jKGxvbmcgcHJvdG9jb2xfY2Fs
bElkLCBpbnQgZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBxdWVyeSkgPSAwOwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgSW5zcGVjdG9yCkBAIC0xMzYsMTEgKzEzNiwxNCBAQCBwdWJsaWM6CiAKICNp
bmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx0dXBsZT4KKyNpbmNsdWRl
IDx3dGYvRXhwZWN0ZWQuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKLXR5cGVkZWYg
U3RyaW5nIEVycm9yU3RyaW5nOworCiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9E
SVNQQVRDSEVSUykKIGNsYXNzIEFsdGVybmF0ZURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI7CkBA
IC0xNDgsMjcgKzE1MSwyMCBAQCBjbGFzcyBBbHRlcm5hdGVEYXRhYmFzZUJhY2tlbmREaXNwYXRj
aGVyOwogCiBjbGFzcyBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7CiBwdWJsaWM6
Ci0gICAgLy8gTmFtZWQgYWZ0ZXIgcGFyYW1ldGVyICdwcmludENvbG9yJyB3aGlsZSBnZW5lcmF0
aW5nIGNvbW1hbmQvZXZlbnQgZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcy4KLSAg
ICBlbnVtIGNsYXNzIFByaW50Q29sb3IgewotICAgICAgICBDeWFuID0gMywKLSAgICAgICAgTWFn
ZW50YSA9IDQsCi0gICAgICAgIFllbGxvdyA9IDUsCi0gICAgICAgIEJsYWNrID0gNiwKLSAgICB9
OyAvLyBlbnVtIGNsYXNzIFByaW50Q29sb3IKLSAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNRTFN5
bmNPcHRpb25hbFJldHVyblZhbHVlcyhFcnJvclN0cmluZyYsIGludCBpbl9kYXRhYmFzZUlkLCBj
b25zdCBTdHJpbmcmIGluX3F1ZXJ5LCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiYgb3B0
X291dF9jb2x1bW5OYW1lcywgT3B0aW9uYWw8U3RyaW5nPiYgb3B0X291dF9ub3RlcywgT3B0aW9u
YWw8ZG91YmxlPiYgb3B0X291dF90aW1lc3RhbXAsIE9wdGlvbmFsPEpTT046Ok9iamVjdD4mIG9w
dF9vdXRfdmFsdWVzLCBPcHRpb25hbDxKU09OOjpWYWx1ZT4mIG9wdF9vdXRfcGF5bG9hZCwgT3B0
aW9uYWw8aW50PiYgb3B0X291dF9kYXRhYmFzZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6RGF0YWJhc2U6OkVycm9yPiYgb3B0X291dF9zcWxFcnJvciwgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMqIG9wdF9vdXRfc2NyZWVuQ29sb3IsIFJlZlB0cjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiYgb3B0X291dF9hbHRlcm5h
dGVDb2xvcnMsIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQcmludENvbG9yKiBv
cHRfb3V0X3ByaW50Q29sb3IpID0gMDsKKyAgICB2aXJ0dWFsIFByb3RvY29sOjpFcnJvclN0cmlu
Z09yPHN0ZDo6dHVwbGU8UmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4gLyogb3B0X2NvbHVt
bk5hbWVzICovLCBTdHJpbmcgLyogb3B0X25vdGVzICovLCBPcHRpb25hbDxkb3VibGU+IC8qIG9w
dF90aW1lc3RhbXAgKi8sIFJlZlB0cjxKU09OOjpPYmplY3Q+IC8qIG9wdF92YWx1ZXMgKi8sIFJl
ZlB0cjxKU09OOjpWYWx1ZT4gLyogb3B0X3BheWxvYWQgKi8sIE9wdGlvbmFsPGludD4gLyogb3B0
X2RhdGFiYXNlSWQgKi8sIFJlZlB0cjxQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiAvKiBvcHRf
c3FsRXJyb3IgKi8sIE9wdGlvbmFsPFByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4g
Lyogb3B0X3NjcmVlbkNvbG9yICovLCBSZWZQdHI8UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxp
c3Q+IC8qIG9wdF9hbHRlcm5hdGVDb2xvcnMgKi8sIFN0cmluZyAvKiBvcHRfcHJpbnRDb2xvciAq
Lz4+IGV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMoaW50IGRhdGFiYXNlSWQsIGNv
bnN0IFN0cmluZyYgcXVlcnkpID0gMDsKICAgICBjbGFzcyBFeGVjdXRlU1FMQXN5bmNPcHRpb25h
bFJldHVyblZhbHVlc0NhbGxiYWNrIDogcHVibGljIEJhY2tlbmREaXNwYXRjaGVyOjpDYWxsYmFj
a0Jhc2UgewogICAgIHB1YmxpYzoKICAgICAgICAgRXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1
cm5WYWx1ZXNDYWxsYmFjayhSZWY8QmFja2VuZERpc3BhdGNoZXI+JiYsIGludCBpZCk7Ci0gICAg
ICAgIHZvaWQgc2VuZFN1Y2Nlc3MoUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4mJiBjb2x1
bW5OYW1lcywgT3B0aW9uYWw8U3RyaW5nPiYgbm90ZXMsIE9wdGlvbmFsPGRvdWJsZT4mIHRpbWVz
dGFtcCwgT3B0aW9uYWw8SlNPTjo6T2JqZWN0PiYgdmFsdWVzLCBPcHRpb25hbDxKU09OOjpWYWx1
ZT4mIHBheWxvYWQsIE9wdGlvbmFsPGludD4mIGRhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+JiYgc3FsRXJyb3IsIE9wdGlvbmFsPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPiBzY3JlZW5Db2xvciwgUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+JiYgYWx0ZXJuYXRlQ29s
b3JzLCBPcHRpb25hbDxEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UHJpbnRDb2xv
cj4gcHJpbnRDb2xvcik7CisgICAgICAgIHZvaWQgc2VuZFN1Y2Nlc3MoUmVmUHRyPEpTT046OkFy
cmF5T2Y8U3RyaW5nPj4mJiBvcHRfY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgb3B0X25vdGVz
LCBPcHRpb25hbDxkb3VibGU+JiYgb3B0X3RpbWVzdGFtcCwgUmVmUHRyPEpTT046Ok9iamVjdD4m
JiBvcHRfdmFsdWVzLCBSZWZQdHI8SlNPTjo6VmFsdWU+JiYgb3B0X3BheWxvYWQsIE9wdGlvbmFs
PGludD4mJiBvcHRfZGF0YWJhc2VJZCwgUmVmUHRyPFByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+
JiYgb3B0X3NxbEVycm9yLCBPcHRpb25hbDxQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xv
cnM+JiYgb3B0X3NjcmVlbkNvbG9yLCBSZWZQdHI8UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxp
c3Q+JiYgb3B0X2FsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nJiBvcHRfcHJpbnRDb2xvcik7
CiAgICAgfTsKLSAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5W
YWx1ZXMoaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnksIFJlZjxFeGVj
dXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc0NhbGxiYWNrPiYmIGNhbGxiYWNrKSA9IDA7
Ci0gICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVTUUxTeW5jKEVycm9yU3RyaW5nJiwgaW50IGluX2Rh
dGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnksIFJlZlB0cjxKU09OOjpBcnJheU9mPFN0
cmluZz4+JiBvdXRfY29sdW1uTmFtZXMsIFN0cmluZyogb3V0X25vdGVzLCBkb3VibGUqIG91dF90
aW1lc3RhbXAsIEpTT046Ok9iamVjdCogb3V0X3ZhbHVlcywgSlNPTjo6VmFsdWUqIG91dF9wYXls
b2FkLCBpbnQqIG91dF9kYXRhYmFzZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0
YWJhc2U6OkVycm9yPiYgb3V0X3NxbEVycm9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
RGF0YWJhc2U6OkNvbG9yTGlzdD4mIG91dF9hbHRlcm5hdGVDb2xvcnMsIEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzKiBvdXRfc2NyZWVuQ29sb3IsIERhdGFiYXNl
QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQcmludENvbG9yKiBvdXRfcHJpbnRDb2xvcikgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhp
bnQgZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBxdWVyeSwgUmVmPEV4ZWN1dGVTUUxBc3luY09w
dGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJhY2s+JiYpID0gMDsKKyAgICB2aXJ0dWFsIFByb3RvY29s
OjpFcnJvclN0cmluZ09yPHN0ZDo6dHVwbGU8UmVmPEpTT046OkFycmF5T2Y8U3RyaW5nPj4gLyog
Y29sdW1uTmFtZXMgKi8sIFN0cmluZyAvKiBub3RlcyAqLywgZG91YmxlIC8qIHRpbWVzdGFtcCAq
LywgUmVmPEpTT046Ok9iamVjdD4gLyogdmFsdWVzICovLCBSZWY8SlNPTjo6VmFsdWU+IC8qIHBh
eWxvYWQgKi8sIGludCAvKiBkYXRhYmFzZUlkICovLCBSZWY8UHJvdG9jb2w6OkRhdGFiYXNlOjpF
cnJvcj4gLyogc3FsRXJyb3IgKi8sIFJlZjxQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4g
LyogYWx0ZXJuYXRlQ29sb3JzICovLCBQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMg
Lyogc2NyZWVuQ29sb3IgKi8sIFN0cmluZyAvKiBwcmludENvbG9yICovPj4gZXhlY3V0ZVNRTFN5
bmMoaW50IGRhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgcXVlcnkpID0gMDsKICAgICBjbGFzcyBF
eGVjdXRlU1FMQXN5bmNDYWxsYmFjayA6IHB1YmxpYyBCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJh
Y2tCYXNlIHsKICAgICBwdWJsaWM6CiAgICAgICAgIEV4ZWN1dGVTUUxBc3luY0NhbGxiYWNrKFJl
ZjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiwgaW50IGlkKTsKLSAgICAgICAgdm9pZCBzZW5kU3VjY2Vz
cyhSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiYmIGNvbHVtbk5hbWVzLCBjb25zdCBTdHJp
bmcmIG5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBKU09OOjpPYmplY3QgdmFsdWVzLCBKU09OOjpW
YWx1ZSBwYXlsb2FkLCBpbnQgZGF0YWJhc2VJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRhdGFiYXNlOjpFcnJvcj4mJiBzcWxFcnJvciwgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJh
c2U6OlByaW1hcnlDb2xvcnMgc2NyZWVuQ29sb3IsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29s
OjpEYXRhYmFzZTo6Q29sb3JMaXN0PiYmIGFsdGVybmF0ZUNvbG9ycywgRGF0YWJhc2VCYWNrZW5k
RGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3IgcHJpbnRDb2xvcik7CisgICAgICAgIHZvaWQg
c2VuZFN1Y2Nlc3MoUmVmPEpTT046OkFycmF5T2Y8U3RyaW5nPj4mJiBjb2x1bW5OYW1lcywgY29u
c3QgU3RyaW5nJiBub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgUmVmPEpTT046Ok9iamVjdD4mJiB2
YWx1ZXMsIFJlZjxKU09OOjpWYWx1ZT4mJiBwYXlsb2FkLCBpbnQgZGF0YWJhc2VJZCwgUmVmPFBy
b3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+JiYgc3FsRXJyb3IsIFByb3RvY29sOjpEYXRhYmFzZTo6
UHJpbWFyeUNvbG9ycyBzY3JlZW5Db2xvciwgUmVmPFByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JM
aXN0PiYmIGFsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nJiBwcmludENvbG9yKTsKICAgICB9
OwotICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU1FMQXN5bmMoaW50IGluX2RhdGFiYXNlSWQsIGNv
bnN0IFN0cmluZyYgaW5fcXVlcnksIFJlZjxFeGVjdXRlU1FMQXN5bmNDYWxsYmFjaz4mJiBjYWxs
YmFjaykgPSAwOworICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU1FMQXN5bmMoaW50IGRhdGFiYXNl
SWQsIGNvbnN0IFN0cmluZyYgcXVlcnksIFJlZjxFeGVjdXRlU1FMQXN5bmNDYWxsYmFjaz4mJikg
PSAwOwogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgfkRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyKCk7CiB9OwpAQCAtMTc2LDEyICsxNzIsMTIgQEAgcHJvdGVjdGVkOgogY2xhc3MgRGF0
YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5k
RGlzcGF0Y2hlciB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVyPiBjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImLCBEYXRhYmFzZUJhY2tlbmREaXNwYXRj
aGVySGFuZGxlciopOwotICAgIHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0
cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpIGZpbmFsOworICAgIHZv
aWQgZGlzcGF0Y2gobG9uZyBwcm90b2NvbF9jYWxsSWQsIGNvbnN0IFN0cmluZyYgcHJvdG9jb2xf
bWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX21lc3NhZ2UpIGZpbmFsOwogcHJp
dmF0ZToKLSAgICB2b2lkIGV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyBy
ZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7Ci0gICAgdm9pZCBl
eGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIHJlcXVlc3RJZCwgUmVmUHRy
PEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKLSAgICB2b2lkIGV4ZWN1dGVTUUxTeW5jKGxv
bmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOwotICAgIHZv
aWQgZXhlY3V0ZVNRTEFzeW5jKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYm
IHBhcmFtZXRlcnMpOworICAgIHZvaWQgZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVl
cyhsb25nIHByb3RvY2xfY2FsbElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX3Bh
cmFtZXRlcnMpOworICAgIHZvaWQgZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMo
bG9uZyBwcm90b2NsX2NhbGxJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9wYXJh
bWV0ZXJzKTsKKyAgICB2b2lkIGV4ZWN1dGVTUUxTeW5jKGxvbmcgcHJvdG9jbF9jYWxsSWQsIFJl
ZlB0cjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfcGFyYW1ldGVycyk7CisgICAgdm9pZCBleGVj
dXRlU1FMQXN5bmMobG9uZyBwcm90b2NsX2NhbGxJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBw
cm90b2NvbF9wYXJhbWV0ZXJzKTsKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQ
QVRDSEVSUykKIHB1YmxpYzoKICAgICB2b2lkIHNldEFsdGVybmF0ZURpc3BhdGNoZXIoQWx0ZXJu
YXRlRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciogYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeyBtX2Fs
dGVybmF0ZURpc3BhdGNoZXIgPSBhbHRlcm5hdGVEaXNwYXRjaGVyOyB9CkBAIC0yMzAsOSArMjI2
LDcgQEAgcHJpdmF0ZToKICNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCiAKICNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1
ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0j
aW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRF
Uk5BVEVfRElTUEFUQ0hFUlMpCiAjaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRj
aGVycy5oIgpAQCAtMjU0LDM3ICsyNDgsMzYgQEAgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6
RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZEQKICAg
ICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4oIkRhdGFi
YXNlIl9zLCB0aGlzKTsKIH0KIAotdm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpkaXNw
YXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmpl
Y3Q+JiYgbWVzc2FnZSkKK3ZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2go
bG9uZyBwcm90b2NvbF9jYWxsSWQsIGNvbnN0IFN0cmluZyYgcHJvdG9jb2xfbWV0aG9kLCBSZWY8
SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX21lc3NhZ2UpCiB7CiAgICAgUmVmPERhdGFiYXNlQmFj
a2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOwogCi0gICAgUmVmUHRyPEpTT046Ok9iamVj
dD4gcGFyYW1ldGVyczsKLSAgICBtZXNzYWdlLT5nZXRPYmplY3QoInBhcmFtcyJfcywgcGFyYW1l
dGVycyk7CisgICAgYXV0byBwcm90b2NvbF9wYXJhbWV0ZXJzID0gcHJvdG9jb2xfbWVzc2FnZS0+
Z2V0T2JqZWN0KCJwYXJhbXMiX3MpOwogCi0gICAgaWYgKG1ldGhvZCA9PSAiZXhlY3V0ZVNRTFN5
bmNPcHRpb25hbFJldHVyblZhbHVlcyIpIHsKLSAgICAgICAgZXhlY3V0ZVNRTFN5bmNPcHRpb25h
bFJldHVyblZhbHVlcyhyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykpOworICAgIGlmIChw
cm90b2NvbF9tZXRob2QgPT0gImV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMiKSB7
CisgICAgICAgIGV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMocHJvdG9jb2xfY2Fs
bElkLCBXVEZNb3ZlKHByb3RvY29sX3BhcmFtZXRlcnMpKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KLSAgICBpZiAobWV0aG9kID09ICJleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVl
cyIpIHsKLSAgICAgICAgZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMocmVxdWVz
dElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKKyAgICBpZiAocHJvdG9jb2xfbWV0aG9kID09ICJl
eGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyIpIHsKKyAgICAgICAgZXhlY3V0ZVNR
TEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMocHJvdG9jb2xfY2FsbElkLCBXVEZNb3ZlKHByb3Rv
Y29sX3BhcmFtZXRlcnMpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAobWV0aG9k
ID09ICJleGVjdXRlU1FMU3luYyIpIHsKLSAgICAgICAgZXhlY3V0ZVNRTFN5bmMocmVxdWVzdElk
LCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKKyAgICBpZiAocHJvdG9jb2xfbWV0aG9kID09ICJleGVj
dXRlU1FMU3luYyIpIHsKKyAgICAgICAgZXhlY3V0ZVNRTFN5bmMocHJvdG9jb2xfY2FsbElkLCBX
VEZNb3ZlKHByb3RvY29sX3BhcmFtZXRlcnMpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAg
ICBpZiAobWV0aG9kID09ICJleGVjdXRlU1FMQXN5bmMiKSB7Ci0gICAgICAgIGV4ZWN1dGVTUUxB
c3luYyhyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykpOworICAgIGlmIChwcm90b2NvbF9t
ZXRob2QgPT0gImV4ZWN1dGVTUUxBc3luYyIpIHsKKyAgICAgICAgZXhlY3V0ZVNRTEFzeW5jKHBy
b3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9wYXJhbWV0ZXJzKSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVy
cm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEYXRhYmFzZS4iICsgbWV0
aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9y
dFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RhdGFi
YXNlLiIgKyBwcm90b2NvbF9tZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7CiB9CiAKLXZvaWQg
RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZh
bHVlcyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKQor
dm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0
dXJuVmFsdWVzKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBy
b3RvY29sX3BhcmFtZXRlcnMpCiB7Ci0gICAgaW50IGluX2RhdGFiYXNlSWQgPSBtX2JhY2tlbmRE
aXNwYXRjaGVyLT5nZXRJbnRlZ2VyKHBhcmFtZXRlcnMuZ2V0KCksICJkYXRhYmFzZUlkIl9zLCBu
dWxscHRyKTsKLSAgICBTdHJpbmcgaW5fcXVlcnkgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRT
dHJpbmcocGFyYW1ldGVycy5nZXQoKSwgInF1ZXJ5Il9zLCBudWxscHRyKTsKKyAgICBhdXRvIGlu
X2RhdGFiYXNlSWQgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRJbnRlZ2VyKHByb3RvY29sX3Bh
cmFtZXRlcnMuZ2V0KCksICJkYXRhYmFzZUlkIl9zLCB0cnVlKTsKKyAgICBhdXRvIGluX3F1ZXJ5
ID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3RyaW5nKHByb3RvY29sX3BhcmFtZXRlcnMuZ2V0
KCksICJxdWVyeSJfcywgdHJ1ZSk7CiAgICAgaWYgKG1fYmFja2VuZERpc3BhdGNoZXItPmhhc1By
b3RvY29sRXJyb3JzKCkpIHsKICAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJv
dG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFtcywgIlNvbWUgYXJndW1l
bnRzIG9mIG1ldGhvZCAnRGF0YWJhc2UuZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVl
cycgY2FuJ3QgYmUgcHJvY2Vzc2VkIl9zKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMjkyLDg1ICsy
ODUsNzYgQEAgdm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FMU3luY09w
dGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgcmVxdWVzdEkKIAogI2lmIEVOQUJMRShJTlNQRUNUT1Jf
QUxURVJOQVRFX0RJU1BBVENIRVJTKQogICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsK
LSAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5leGVjdXRlU1FMU3luY09wdGlvbmFsUmV0
dXJuVmFsdWVzKHJlcXVlc3RJZCwgaW5fZGF0YWJhc2VJZCwgaW5fcXVlcnkpOworICAgICAgICBt
X2FsdGVybmF0ZURpc3BhdGNoZXItPmV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMo
cHJvdG9jb2xfY2FsbElkLCAqaW5fZGF0YWJhc2VJZCwgaW5fcXVlcnkpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENI
RVJTKQogCi0gICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4gcmVz
dWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBSZWZQdHI8SlNPTjo6QXJyYXlPZjxT
dHJpbmc+PiBvdXRfY29sdW1uTmFtZXM7Ci0gICAgT3B0aW9uYWw8U3RyaW5nPiBvdXRfbm90ZXM7
Ci0gICAgT3B0aW9uYWw8ZG91YmxlPiBvdXRfdGltZXN0YW1wOwotICAgIE9wdGlvbmFsPEpTT046
Ok9iamVjdD4gb3V0X3ZhbHVlczsKLSAgICBPcHRpb25hbDxKU09OOjpWYWx1ZT4gb3V0X3BheWxv
YWQ7Ci0gICAgT3B0aW9uYWw8aW50PiBvdXRfZGF0YWJhc2VJZDsKLSAgICBSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiBvdXRfc3FsRXJyb3I7Ci0gICAgSW5zcGVj
dG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMgb3V0X3NjcmVlbkNvbG9yOwot
ICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiBvdXRf
YWx0ZXJuYXRlQ29sb3JzOwotICAgIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQ
cmludENvbG9yIG91dF9wcmludENvbG9yOwotICAgIG1fYWdlbnQtPmV4ZWN1dGVTUUxTeW5jT3B0
aW9uYWxSZXR1cm5WYWx1ZXMoZXJyb3IsIGluX2RhdGFiYXNlSWQsIGluX3F1ZXJ5LCBvdXRfY29s
dW1uTmFtZXMsIG91dF9ub3Rlcywgb3V0X3RpbWVzdGFtcCwgb3V0X3ZhbHVlcywgb3V0X3BheWxv
YWQsIG91dF9kYXRhYmFzZUlkLCBvdXRfc3FsRXJyb3IsIG91dF9zY3JlZW5Db2xvciwgb3V0X2Fs
dGVybmF0ZUNvbG9ycywgb3V0X3ByaW50Q29sb3IpOwotCi0gICAgaWYgKCFlcnJvci5sZW5ndGgo
KSkgewotICAgICAgICBpZiAob3V0X2NvbHVtbk5hbWVzKQotICAgICAgICAgICAgcmVzdWx0LT5z
ZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIG91dF9jb2x1bW5OYW1lcyk7Ci0gICAgICAgIGlmIChv
dXRfbm90ZXMuaGFzVmFsdWUoKSkKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJub3Rl
cyJfcywgKm91dF9ub3Rlcyk7Ci0gICAgICAgIGlmIChvdXRfdGltZXN0YW1wLmhhc1ZhbHVlKCkp
Ci0gICAgICAgICAgICByZXN1bHQtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCAqb3V0X3RpbWVz
dGFtcCk7Ci0gICAgICAgIGlmIChvdXRfdmFsdWVzLmhhc1ZhbHVlKCkpCi0gICAgICAgICAgICBy
ZXN1bHQtPnNldE9iamVjdCgidmFsdWVzIl9zLCAqb3V0X3ZhbHVlcyk7Ci0gICAgICAgIGlmIChv
dXRfcGF5bG9hZC5oYXNWYWx1ZSgpKQotICAgICAgICAgICAgcmVzdWx0LT5zZXRWYWx1ZSgicGF5
bG9hZCJfcywgKm91dF9wYXlsb2FkKTsKLSAgICAgICAgaWYgKG91dF9kYXRhYmFzZUlkLmhhc1Zh
bHVlKCkpCi0gICAgICAgICAgICByZXN1bHQtPnNldEludGVnZXIoImRhdGFiYXNlSWQiX3MsICpv
dXRfZGF0YWJhc2VJZCk7Ci0gICAgICAgIGlmIChvdXRfc3FsRXJyb3IpCi0gICAgICAgICAgICBy
ZXN1bHQtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIG91dF9zcWxFcnJvcik7Ci0gICAgICAgIGlm
IChvdXRfc2NyZWVuQ29sb3IuaGFzVmFsdWUoKSkKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0U3Ry
aW5nKCJzY3JlZW5Db2xvciJfcywgKm91dF9zY3JlZW5Db2xvcik7Ci0gICAgICAgIGlmIChvdXRf
YWx0ZXJuYXRlQ29sb3JzKQotICAgICAgICAgICAgcmVzdWx0LT5zZXRBcnJheSgiYWx0ZXJuYXRl
Q29sb3JzIl9zLCBvdXRfYWx0ZXJuYXRlQ29sb3JzKTsKLSAgICAgICAgaWYgKG91dF9wcmludENv
bG9yLmhhc1ZhbHVlKCkpCi0gICAgICAgICAgICByZXN1bHQtPnNldFN0cmluZygicHJpbnRDb2xv
ciJfcywgKm91dF9wcmludENvbG9yKTsKKyAgICBhdXRvIHJlc3VsdCA9IG1fYWdlbnQtPmV4ZWN1
dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMoKmluX2RhdGFiYXNlSWQsIGluX3F1ZXJ5KTsK
KyAgICBpZiAoIXJlc3VsdCkgeworICAgICAgICBBU1NFUlQoIXJlc3VsdC5lcnJvcigpLmlzRW1w
dHkoKSk7CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3Io
QmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCByZXN1bHQuZXJyb3IoKSk7CisgICAgICAg
IHJldHVybjsKICAgICB9Ci0gICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKLSAgICAgICAgbV9iYWNr
ZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBm
YWxzZSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90
b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikp
OworCisgICAgYXV0byBbb3V0X29wdF9jb2x1bW5OYW1lcywgb3V0X29wdF9ub3Rlcywgb3V0X29w
dF90aW1lc3RhbXAsIG91dF9vcHRfdmFsdWVzLCBvdXRfb3B0X3BheWxvYWQsIG91dF9vcHRfZGF0
YWJhc2VJZCwgb3V0X29wdF9zcWxFcnJvciwgb3V0X29wdF9zY3JlZW5Db2xvciwgb3V0X29wdF9h
bHRlcm5hdGVDb2xvcnMsIG91dF9vcHRfcHJpbnRDb2xvcl0gPSBXVEZNb3ZlKHJlc3VsdC52YWx1
ZSgpKTsKKworICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNy
ZWF0ZSgpOworICAgIGlmICghIW91dF9vcHRfY29sdW1uTmFtZXMpCisgICAgICAgIHByb3RvY29s
X2pzb25NZXNzYWdlLT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIG91dF9vcHRfY29sdW1uTmFt
ZXMucmVsZWFzZU5vbk51bGwoKSk7CisgICAgaWYgKCEhb3V0X29wdF9ub3RlcykKKyAgICAgICAg
cHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygibm90ZXMiX3MsIG91dF9vcHRfbm90ZXMp
OworICAgIGlmICghIW91dF9vcHRfdGltZXN0YW1wKQorICAgICAgICBwcm90b2NvbF9qc29uTWVz
c2FnZS0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsICpvdXRfb3B0X3RpbWVzdGFtcCk7CisgICAg
aWYgKCEhb3V0X29wdF92YWx1ZXMpCisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRP
YmplY3QoInZhbHVlcyJfcywgb3V0X29wdF92YWx1ZXMucmVsZWFzZU5vbk51bGwoKSk7CisgICAg
aWYgKCEhb3V0X29wdF9wYXlsb2FkKQorICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0
VmFsdWUoInBheWxvYWQiX3MsIG91dF9vcHRfcGF5bG9hZC5yZWxlYXNlTm9uTnVsbCgpKTsKKyAg
ICBpZiAoISFvdXRfb3B0X2RhdGFiYXNlSWQpCisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdl
LT5zZXRJbnRlZ2VyKCJkYXRhYmFzZUlkIl9zLCAqb3V0X29wdF9kYXRhYmFzZUlkKTsKKyAgICBp
ZiAoISFvdXRfb3B0X3NxbEVycm9yKQorICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0
T2JqZWN0KCJzcWxFcnJvciJfcywgb3V0X29wdF9zcWxFcnJvci5yZWxlYXNlTm9uTnVsbCgpKTsK
KyAgICBpZiAoISFvdXRfb3B0X3NjcmVlbkNvbG9yKQorICAgICAgICBwcm90b2NvbF9qc29uTWVz
c2FnZS0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgUHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpn
ZXRFbnVtQ29uc3RhbnRWYWx1ZSgqb3V0X29wdF9zY3JlZW5Db2xvcikpOworICAgIGlmICghIW91
dF9vcHRfYWx0ZXJuYXRlQ29sb3JzKQorICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0
QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywgb3V0X29wdF9hbHRlcm5hdGVDb2xvcnMucmVsZWFz
ZU5vbk51bGwoKSk7CisgICAgaWYgKCEhb3V0X29wdF9wcmludENvbG9yKQorICAgICAgICBwcm90
b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCBvdXRfb3B0X3ByaW50
Q29sb3IpOworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShwcm90b2NvbF9j
YWxsSWQsIFdURk1vdmUocHJvdG9jb2xfanNvbk1lc3NhZ2UpLCBmYWxzZSk7CiB9CiAKIERhdGFi
YXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVy
blZhbHVlc0NhbGxiYWNrOjpFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc0NhbGxi
YWNrKFJlZjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBiYWNrZW5kRGlzcGF0Y2hlciwgaW50IGlkKSA6
IEJhY2tlbmREaXNwYXRjaGVyOjpDYWxsYmFja0Jhc2UoV1RGTW92ZShiYWNrZW5kRGlzcGF0Y2hl
ciksIGlkKSB7IH0KIAotdm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhl
Y3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNDYWxsYmFjazo6c2VuZFN1Y2Nlc3MoUmVm
UHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4mJiBjb2x1bW5OYW1lcywgT3B0aW9uYWw8U3RyaW5n
PiYgbm90ZXMsIE9wdGlvbmFsPGRvdWJsZT4mIHRpbWVzdGFtcCwgT3B0aW9uYWw8SlNPTjo6T2Jq
ZWN0PiYgdmFsdWVzLCBPcHRpb25hbDxKU09OOjpWYWx1ZT4mIHBheWxvYWQsIE9wdGlvbmFsPGlu
dD4mIGRhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJy
b3I+JiYgc3FsRXJyb3IsIE9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQ
cmltYXJ5Q29sb3JzPiBzY3JlZW5Db2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRh
dGFiYXNlOjpDb2xvckxpc3Q+JiYgYWx0ZXJuYXRlQ29sb3JzLCBPcHRpb25hbDxEYXRhYmFzZUJh
Y2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UHJpbnRDb2xvcj4gcHJpbnRDb2xvcikKK3ZvaWQgRGF0
YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0
dXJuVmFsdWVzQ2FsbGJhY2s6OnNlbmRTdWNjZXNzKFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmlu
Zz4+JiYgb3B0X2NvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIG9wdF9ub3RlcywgT3B0aW9uYWw8
ZG91YmxlPiYmIG9wdF90aW1lc3RhbXAsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgb3B0X3ZhbHVl
cywgUmVmUHRyPEpTT046OlZhbHVlPiYmIG9wdF9wYXlsb2FkLCBPcHRpb25hbDxpbnQ+JiYgb3B0
X2RhdGFiYXNlSWQsIFJlZlB0cjxQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiYmIG9wdF9zcWxF
cnJvciwgT3B0aW9uYWw8UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPiYmIG9wdF9z
Y3JlZW5Db2xvciwgUmVmUHRyPFByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiYmIG9wdF9h
bHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyYgb3B0X3ByaW50Q29sb3IpCiB7Ci0gICAgUmVm
PEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAg
IGlmIChjb2x1bW5OYW1lcykKLSAgICAgICAganNvbk1lc3NhZ2UtPnNldEFycmF5KCJjb2x1bW5O
YW1lcyJfcywgY29sdW1uTmFtZXMpOwotICAgIGlmIChub3Rlcy5oYXNWYWx1ZSgpKQotICAgICAg
ICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJub3RlcyJfcywgKm5vdGVzKTsKLSAgICBpZiAodGlt
ZXN0YW1wLmhhc1ZhbHVlKCkpCi0gICAgICAgIGpzb25NZXNzYWdlLT5zZXREb3VibGUoInRpbWVz
dGFtcCJfcywgKnRpbWVzdGFtcCk7Ci0gICAgaWYgKHZhbHVlcy5oYXNWYWx1ZSgpKQotICAgICAg
ICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsICp2YWx1ZXMpOwotICAgIGlmIChw
YXlsb2FkLmhhc1ZhbHVlKCkpCi0gICAgICAgIGpzb25NZXNzYWdlLT5zZXRWYWx1ZSgicGF5bG9h
ZCJfcywgKnBheWxvYWQpOwotICAgIGlmIChkYXRhYmFzZUlkLmhhc1ZhbHVlKCkpCi0gICAgICAg
IGpzb25NZXNzYWdlLT5zZXRJbnRlZ2VyKCJkYXRhYmFzZUlkIl9zLCAqZGF0YWJhc2VJZCk7Ci0g
ICAgaWYgKHNxbEVycm9yKQotICAgICAgICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJzcWxFcnJv
ciJfcywgc3FsRXJyb3IpOwotICAgIGlmIChzY3JlZW5Db2xvci5oYXNWYWx1ZSgpKQotICAgICAg
ICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgKnNjcmVlbkNvbG9yKTsK
LSAgICBpZiAoYWx0ZXJuYXRlQ29sb3JzKQotICAgICAgICBqc29uTWVzc2FnZS0+c2V0QXJyYXko
ImFsdGVybmF0ZUNvbG9ycyJfcywgYWx0ZXJuYXRlQ29sb3JzKTsKLSAgICBpZiAocHJpbnRDb2xv
ci5oYXNWYWx1ZSgpKQotICAgICAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJwcmludENvbG9y
Il9zLCAqcHJpbnRDb2xvcik7Ci0gICAgQ2FsbGJhY2tCYXNlOjpzZW5kU3VjY2VzcyhXVEZNb3Zl
KGpzb25NZXNzYWdlKSk7CisgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9i
amVjdDo6Y3JlYXRlKCk7CisgICAgaWYgKCEhb3B0X2NvbHVtbk5hbWVzKQorICAgICAgICBwcm90
b2NvbF9qc29uTWVzc2FnZS0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCBvcHRfY29sdW1uTmFt
ZXMucmVsZWFzZU5vbk51bGwoKSk7CisgICAgaWYgKCEhb3B0X25vdGVzKQorICAgICAgICBwcm90
b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJub3RlcyJfcywgb3B0X25vdGVzKTsKKyAgICBp
ZiAoISFvcHRfdGltZXN0YW1wKQorICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0RG91
YmxlKCJ0aW1lc3RhbXAiX3MsICpvcHRfdGltZXN0YW1wKTsKKyAgICBpZiAoISFvcHRfdmFsdWVz
KQorICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIG9w
dF92YWx1ZXMucmVsZWFzZU5vbk51bGwoKSk7CisgICAgaWYgKCEhb3B0X3BheWxvYWQpCisgICAg
ICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgb3B0X3BheWxv
YWQucmVsZWFzZU5vbk51bGwoKSk7CisgICAgaWYgKCEhb3B0X2RhdGFiYXNlSWQpCisgICAgICAg
IHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRJbnRlZ2VyKCJkYXRhYmFzZUlkIl9zLCAqb3B0X2Rh
dGFiYXNlSWQpOworICAgIGlmICghIW9wdF9zcWxFcnJvcikKKyAgICAgICAgcHJvdG9jb2xfanNv
bk1lc3NhZ2UtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIG9wdF9zcWxFcnJvci5yZWxlYXNlTm9u
TnVsbCgpKTsKKyAgICBpZiAoISFvcHRfc2NyZWVuQ29sb3IpCisgICAgICAgIHByb3RvY29sX2pz
b25NZXNzYWdlLT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCBQcm90b2NvbDo6VGVzdEhlbHBl
cnM6OmdldEVudW1Db25zdGFudFZhbHVlKCpvcHRfc2NyZWVuQ29sb3IpKTsKKyAgICBpZiAoISFv
cHRfYWx0ZXJuYXRlQ29sb3JzKQorICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0QXJy
YXkoImFsdGVybmF0ZUNvbG9ycyJfcywgb3B0X2FsdGVybmF0ZUNvbG9ycy5yZWxlYXNlTm9uTnVs
bCgpKTsKKyAgICBpZiAoISFvcHRfcHJpbnRDb2xvcikKKyAgICAgICAgcHJvdG9jb2xfanNvbk1l
c3NhZ2UtPnNldFN0cmluZygicHJpbnRDb2xvciJfcywgb3B0X3ByaW50Q29sb3IpOworICAgIENh
bGxiYWNrQmFzZTo6c2VuZFN1Y2Nlc3MoV1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSkpOwog
fQogCi12b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxBc3luY09wdGlv
bmFsUmV0dXJuVmFsdWVzKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBh
cmFtZXRlcnMpCit2b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxBc3lu
Y09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBSZWZQdHI8SlNPTjo6
T2JqZWN0PiYmIHByb3RvY29sX3BhcmFtZXRlcnMpCiB7Ci0gICAgaW50IGluX2RhdGFiYXNlSWQg
PSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRJbnRlZ2VyKHBhcmFtZXRlcnMuZ2V0KCksICJkYXRh
YmFzZUlkIl9zLCBudWxscHRyKTsKLSAgICBTdHJpbmcgaW5fcXVlcnkgPSBtX2JhY2tlbmREaXNw
YXRjaGVyLT5nZXRTdHJpbmcocGFyYW1ldGVycy5nZXQoKSwgInF1ZXJ5Il9zLCBudWxscHRyKTsK
KyAgICBhdXRvIGluX2RhdGFiYXNlSWQgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRJbnRlZ2Vy
KHByb3RvY29sX3BhcmFtZXRlcnMuZ2V0KCksICJkYXRhYmFzZUlkIl9zLCB0cnVlKTsKKyAgICBh
dXRvIGluX3F1ZXJ5ID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3RyaW5nKHByb3RvY29sX3Bh
cmFtZXRlcnMuZ2V0KCksICJxdWVyeSJfcywgdHJ1ZSk7CiAgICAgaWYgKG1fYmFja2VuZERpc3Bh
dGNoZXItPmhhc1Byb3RvY29sRXJyb3JzKCkpIHsKICAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFtcywg
IlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnRGF0YWJhc2UuZXhlY3V0ZVNRTEFzeW5jT3B0aW9u
YWxSZXR1cm5WYWx1ZXMnIGNhbid0IGJlIHByb2Nlc3NlZCJfcyk7CiAgICAgICAgIHJldHVybjsK
QEAgLTM3OCwyMCArMzYyLDE4IEBAIHZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhl
Y3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyByZXF1ZXN0CiAKICNpZiBFTkFC
TEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKICAgICBpZiAobV9hbHRlcm5hdGVE
aXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+ZXhlY3V0ZVNRTEFz
eW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMocmVxdWVzdElkLCBpbl9kYXRhYmFzZUlkLCBpbl9xdWVy
eSk7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+ZXhlY3V0ZVNRTEFzeW5jT3B0aW9u
YWxSZXR1cm5WYWx1ZXMocHJvdG9jb2xfY2FsbElkLCAqaW5fZGF0YWJhc2VJZCwgaW5fcXVlcnkp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQogCi0gICAgUmVmPERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc0NhbGxiYWNrPiBjYWxs
YmFjayA9IGFkb3B0UmVmKCpuZXcgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkV4
ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJhY2sobV9iYWNrZW5kRGlzcGF0
Y2hlci5jb3B5UmVmKCksIHJlcXVlc3RJZCkpOwotICAgIG1fYWdlbnQtPmV4ZWN1dGVTUUxBc3lu
Y09wdGlvbmFsUmV0dXJuVmFsdWVzKGluX2RhdGFiYXNlSWQsIGluX3F1ZXJ5LCBjYWxsYmFjay5j
b3B5UmVmKCkpOwotCisgICAgbV9hZ2VudC0+ZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5W
YWx1ZXMoKmluX2RhdGFiYXNlSWQsIGluX3F1ZXJ5LCBhZG9wdFJlZigqbmV3IERhdGFiYXNlQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVl
c0NhbGxiYWNrKG1fYmFja2VuZERpc3BhdGNoZXIuY29weVJlZigpLCBwcm90b2NvbF9jYWxsSWQp
KSk7CiB9CiAKLXZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTFN5bmMo
bG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycykKK3ZvaWQg
RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTFN5bmMobG9uZyBwcm90b2NvbF9j
YWxsSWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfcGFyYW1ldGVycykKIHsKLSAg
ICBpbnQgaW5fZGF0YWJhc2VJZCA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldEludGVnZXIocGFy
YW1ldGVycy5nZXQoKSwgImRhdGFiYXNlSWQiX3MsIG51bGxwdHIpOwotICAgIFN0cmluZyBpbl9x
dWVyeSA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFN0cmluZyhwYXJhbWV0ZXJzLmdldCgpLCAi
cXVlcnkiX3MsIG51bGxwdHIpOworICAgIGF1dG8gaW5fZGF0YWJhc2VJZCA9IG1fYmFja2VuZERp
c3BhdGNoZXItPmdldEludGVnZXIocHJvdG9jb2xfcGFyYW1ldGVycy5nZXQoKSwgImRhdGFiYXNl
SWQiX3MsIHRydWUpOworICAgIGF1dG8gaW5fcXVlcnkgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5n
ZXRTdHJpbmcocHJvdG9jb2xfcGFyYW1ldGVycy5nZXQoKSwgInF1ZXJ5Il9zLCB0cnVlKTsKICAg
ICBpZiAobV9iYWNrZW5kRGlzcGF0Y2hlci0+aGFzUHJvdG9jb2xFcnJvcnMoKSkgewogICAgICAg
ICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRj
aGVyOjpJbnZhbGlkUGFyYW1zLCAiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICdEYXRhYmFzZS5l
eGVjdXRlU1FMU3luYycgY2FuJ3QgYmUgcHJvY2Vzc2VkIl9zKTsKICAgICAgICAgcmV0dXJuOwpA
QCAtMzk5LDY1ICszODEsNTYgQEAgdm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVj
dXRlU1FMU3luYyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamUKIAogI2lmIEVOQUJM
RShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogICAgIGlmIChtX2FsdGVybmF0ZURp
c3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5leGVjdXRlU1FMU3lu
YyhyZXF1ZXN0SWQsIGluX2RhdGFiYXNlSWQsIGluX3F1ZXJ5KTsKKyAgICAgICAgbV9hbHRlcm5h
dGVEaXNwYXRjaGVyLT5leGVjdXRlU1FMU3luYyhwcm90b2NvbF9jYWxsSWQsICppbl9kYXRhYmFz
ZUlkLCBpbl9xdWVyeSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYgLy8gRU5BQkxF
KElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAKLSAgICBFcnJvclN0cmluZyBlcnJv
cjsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgp
OwotICAgIFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+IG91dF9jb2x1bW5OYW1lczsKLSAg
ICBTdHJpbmcgb3V0X25vdGVzOwotICAgIGRvdWJsZSBvdXRfdGltZXN0YW1wOwotICAgIEpTT046
Ok9iamVjdCBvdXRfdmFsdWVzOwotICAgIEpTT046OlZhbHVlIG91dF9wYXlsb2FkOwotICAgIGlu
dCBvdXRfZGF0YWJhc2VJZDsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJh
c2U6OkVycm9yPiBvdXRfc3FsRXJyb3I7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRhdGFiYXNlOjpDb2xvckxpc3Q+IG91dF9hbHRlcm5hdGVDb2xvcnM7Ci0gICAgSW5zcGVjdG9y
OjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMgb3V0X3NjcmVlbkNvbG9yOwotICAg
IERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQcmludENvbG9yIG91dF9wcmludENv
bG9yOwotICAgIG1fYWdlbnQtPmV4ZWN1dGVTUUxTeW5jKGVycm9yLCBpbl9kYXRhYmFzZUlkLCBp
bl9xdWVyeSwgb3V0X2NvbHVtbk5hbWVzLCAmb3V0X25vdGVzLCAmb3V0X3RpbWVzdGFtcCwgb3V0
X3ZhbHVlcywgJm91dF9wYXlsb2FkLCAmb3V0X2RhdGFiYXNlSWQsIG91dF9zcWxFcnJvciwgb3V0
X2FsdGVybmF0ZUNvbG9ycywgJm91dF9zY3JlZW5Db2xvciwgJm91dF9wcmludENvbG9yKTsKLQot
ICAgIGlmICghZXJyb3IubGVuZ3RoKCkpIHsKLSAgICAgICAgcmVzdWx0LT5zZXRBcnJheSgiY29s
dW1uTmFtZXMiX3MsIG91dF9jb2x1bW5OYW1lcyk7Ci0gICAgICAgIHJlc3VsdC0+c2V0U3RyaW5n
KCJub3RlcyJfcywgb3V0X25vdGVzKTsKLSAgICAgICAgcmVzdWx0LT5zZXREb3VibGUoInRpbWVz
dGFtcCJfcywgb3V0X3RpbWVzdGFtcCk7Ci0gICAgICAgIHJlc3VsdC0+c2V0T2JqZWN0KCJ2YWx1
ZXMiX3MsIG91dF92YWx1ZXMpOwotICAgICAgICByZXN1bHQtPnNldFZhbHVlKCJwYXlsb2FkIl9z
LCBvdXRfcGF5bG9hZCk7Ci0gICAgICAgIHJlc3VsdC0+c2V0SW50ZWdlcigiZGF0YWJhc2VJZCJf
cywgb3V0X2RhdGFiYXNlSWQpOwotICAgICAgICByZXN1bHQtPnNldE9iamVjdCgic3FsRXJyb3Ii
X3MsIG91dF9zcWxFcnJvcik7Ci0gICAgICAgIHJlc3VsdC0+c2V0QXJyYXkoImFsdGVybmF0ZUNv
bG9ycyJfcywgb3V0X2FsdGVybmF0ZUNvbG9ycyk7Ci0gICAgICAgIHJlc3VsdC0+c2V0U3RyaW5n
KCJzY3JlZW5Db2xvciJfcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVu
dW1Db25zdGFudFZhbHVlKG91dF9zY3JlZW5Db2xvcikpOwotICAgICAgICByZXN1bHQtPnNldFN0
cmluZygicHJpbnRDb2xvciJfcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6Omdl
dEVudW1Db25zdGFudFZhbHVlKG91dF9wcmludENvbG9yKSk7CisgICAgYXV0byByZXN1bHQgPSBt
X2FnZW50LT5leGVjdXRlU1FMU3luYygqaW5fZGF0YWJhc2VJZCwgaW5fcXVlcnkpOworICAgIGlm
ICghcmVzdWx0KSB7CisgICAgICAgIEFTU0VSVCghcmVzdWx0LmVycm9yKCkuaXNFbXB0eSgpKTsK
KyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5k
RGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIHJlc3VsdC5lcnJvcigpKTsKKyAgICAgICAgcmV0dXJu
OwogICAgIH0KLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQotICAgICAgICBtX2JhY2tlbmREaXNw
YXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsK
LSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJy
b3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7CisKKyAg
ICBhdXRvIFtvdXRfY29sdW1uTmFtZXMsIG91dF9ub3Rlcywgb3V0X3RpbWVzdGFtcCwgb3V0X3Zh
bHVlcywgb3V0X3BheWxvYWQsIG91dF9kYXRhYmFzZUlkLCBvdXRfc3FsRXJyb3IsIG91dF9hbHRl
cm5hdGVDb2xvcnMsIG91dF9zY3JlZW5Db2xvciwgb3V0X3ByaW50Q29sb3JdID0gV1RGTW92ZShy
ZXN1bHQudmFsdWUoKSk7CisKKyAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6
T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0QXJyYXkoImNv
bHVtbk5hbWVzIl9zLCBXVEZNb3ZlKG91dF9jb2x1bW5OYW1lcykpOworICAgIHByb3RvY29sX2pz
b25NZXNzYWdlLT5zZXRTdHJpbmcoIm5vdGVzIl9zLCBvdXRfbm90ZXMpOworICAgIHByb3RvY29s
X2pzb25NZXNzYWdlLT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywgb3V0X3RpbWVzdGFtcCk7Cisg
ICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldE9iamVjdCgidmFsdWVzIl9zLCBXVEZNb3ZlKG91
dF92YWx1ZXMpKTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0VmFsdWUoInBheWxvYWQi
X3MsIFdURk1vdmUob3V0X3BheWxvYWQpKTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0
SW50ZWdlcigiZGF0YWJhc2VJZCJfcywgb3V0X2RhdGFiYXNlSWQpOworICAgIHByb3RvY29sX2pz
b25NZXNzYWdlLT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBXVEZNb3ZlKG91dF9zcWxFcnJvcikp
OworICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9z
LCBXVEZNb3ZlKG91dF9hbHRlcm5hdGVDb2xvcnMpKTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2Fn
ZS0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgUHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRF
bnVtQ29uc3RhbnRWYWx1ZShvdXRfc2NyZWVuQ29sb3IpKTsKKyAgICBwcm90b2NvbF9qc29uTWVz
c2FnZS0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCBvdXRfcHJpbnRDb2xvcik7CisgICAgbV9i
YWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShw
cm90b2NvbF9qc29uTWVzc2FnZSksIGZhbHNlKTsKIH0KIAogRGF0YWJhc2VCYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXI6OkV4ZWN1dGVTUUxBc3luY0NhbGxiYWNrOjpFeGVjdXRlU1FMQXN5bmNDYWxs
YmFjayhSZWY8QmFja2VuZERpc3BhdGNoZXI+JiYgYmFja2VuZERpc3BhdGNoZXIsIGludCBpZCkg
OiBCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlKFdURk1vdmUoYmFja2VuZERpc3BhdGNo
ZXIpLCBpZCkgeyB9CiAKLXZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkV4
ZWN1dGVTUUxBc3luY0NhbGxiYWNrOjpzZW5kU3VjY2VzcyhSZWZQdHI8SlNPTjo6QXJyYXlPZjxT
dHJpbmc+PiYmIGNvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIG5vdGVzLCBkb3VibGUgdGltZXN0
YW1wLCBKU09OOjpPYmplY3QgdmFsdWVzLCBKU09OOjpWYWx1ZSBwYXlsb2FkLCBpbnQgZGF0YWJh
c2VJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4mJiBzcWxF
cnJvciwgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMgc2NyZWVu
Q29sb3IsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiYm
IGFsdGVybmF0ZUNvbG9ycywgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50
Q29sb3IgcHJpbnRDb2xvcikKK3ZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6
OkV4ZWN1dGVTUUxBc3luY0NhbGxiYWNrOjpzZW5kU3VjY2VzcyhSZWY8SlNPTjo6QXJyYXlPZjxT
dHJpbmc+PiYmIGNvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIG5vdGVzLCBkb3VibGUgdGltZXN0
YW1wLCBSZWY8SlNPTjo6T2JqZWN0PiYmIHZhbHVlcywgUmVmPEpTT046OlZhbHVlPiYmIHBheWxv
YWQsIGludCBkYXRhYmFzZUlkLCBSZWY8UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4mJiBzcWxF
cnJvciwgUHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzIHNjcmVlbkNvbG9yLCBSZWY8
UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+JiYgYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBT
dHJpbmcmIHByaW50Q29sb3IpCiB7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2Ug
PSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIGpzb25NZXNzYWdlLT5zZXRBcnJheSgiY29s
dW1uTmFtZXMiX3MsIGNvbHVtbk5hbWVzKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJu
b3RlcyJfcywgbm90ZXMpOwotICAgIGpzb25NZXNzYWdlLT5zZXREb3VibGUoInRpbWVzdGFtcCJf
cywgdGltZXN0YW1wKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIHZh
bHVlcyk7Ci0gICAganNvbk1lc3NhZ2UtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCBwYXlsb2FkKTsK
LSAgICBqc29uTWVzc2FnZS0+c2V0SW50ZWdlcigiZGF0YWJhc2VJZCJfcywgZGF0YWJhc2VJZCk7
Ci0gICAganNvbk1lc3NhZ2UtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIHNxbEVycm9yKTsKLSAg
ICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgSW5zcGVjdG9yOjpQcm90
b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKHNjcmVlbkNvbG9yKSk7Ci0g
ICAganNvbk1lc3NhZ2UtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIGFsdGVybmF0ZUNv
bG9ycyk7Ci0gICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygicHJpbnRDb2xvciJfcywgSW5zcGVj
dG9yOjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKHByaW50Q29s
b3IpKTsKLSAgICBDYWxsYmFja0Jhc2U6OnNlbmRTdWNjZXNzKFdURk1vdmUoanNvbk1lc3NhZ2Up
KTsKKyAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUo
KTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCBX
VEZNb3ZlKGNvbHVtbk5hbWVzKSk7CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmlu
Zygibm90ZXMiX3MsIG5vdGVzKTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0RG91Ymxl
KCJ0aW1lc3RhbXAiX3MsIHRpbWVzdGFtcCk7CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNl
dE9iamVjdCgidmFsdWVzIl9zLCBXVEZNb3ZlKHZhbHVlcykpOworICAgIHByb3RvY29sX2pzb25N
ZXNzYWdlLT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgV1RGTW92ZShwYXlsb2FkKSk7CisgICAgcHJv
dG9jb2xfanNvbk1lc3NhZ2UtPnNldEludGVnZXIoImRhdGFiYXNlSWQiX3MsIGRhdGFiYXNlSWQp
OworICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBXVEZN
b3ZlKHNxbEVycm9yKSk7CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygic2Ny
ZWVuQ29sb3IiX3MsIFByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUo
c2NyZWVuQ29sb3IpKTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0QXJyYXkoImFsdGVy
bmF0ZUNvbG9ycyJfcywgV1RGTW92ZShhbHRlcm5hdGVDb2xvcnMpKTsKKyAgICBwcm90b2NvbF9q
c29uTWVzc2FnZS0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCBwcmludENvbG9yKTsKKyAgICBD
YWxsYmFja0Jhc2U6OnNlbmRTdWNjZXNzKFdURk1vdmUocHJvdG9jb2xfanNvbk1lc3NhZ2UpKTsK
IH0KIAotdm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FMQXN5bmMobG9u
ZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycykKK3ZvaWQgRGF0
YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTEFzeW5jKGxvbmcgcHJvdG9jb2xfY2Fs
bElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX3BhcmFtZXRlcnMpCiB7Ci0gICAg
aW50IGluX2RhdGFiYXNlSWQgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRJbnRlZ2VyKHBhcmFt
ZXRlcnMuZ2V0KCksICJkYXRhYmFzZUlkIl9zLCBudWxscHRyKTsKLSAgICBTdHJpbmcgaW5fcXVl
cnkgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRTdHJpbmcocGFyYW1ldGVycy5nZXQoKSwgInF1
ZXJ5Il9zLCBudWxscHRyKTsKKyAgICBhdXRvIGluX2RhdGFiYXNlSWQgPSBtX2JhY2tlbmREaXNw
YXRjaGVyLT5nZXRJbnRlZ2VyKHByb3RvY29sX3BhcmFtZXRlcnMuZ2V0KCksICJkYXRhYmFzZUlk
Il9zLCB0cnVlKTsKKyAgICBhdXRvIGluX3F1ZXJ5ID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0
U3RyaW5nKHByb3RvY29sX3BhcmFtZXRlcnMuZ2V0KCksICJxdWVyeSJfcywgdHJ1ZSk7CiAgICAg
aWYgKG1fYmFja2VuZERpc3BhdGNoZXItPmhhc1Byb3RvY29sRXJyb3JzKCkpIHsKICAgICAgICAg
bV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hl
cjo6SW52YWxpZFBhcmFtcywgIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnRGF0YWJhc2UuZXhl
Y3V0ZVNRTEFzeW5jJyBjYW4ndCBiZSBwcm9jZXNzZWQiX3MpOwogICAgICAgICByZXR1cm47CkBA
IC00NjUsMTQgKzQzOCwxMiBAQCB2b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1
dGVTUUxBc3luYyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iagogCiAjaWYgRU5BQkxF
KElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAgICAgaWYgKG1fYWx0ZXJuYXRlRGlz
cGF0Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmV4ZWN1dGVTUUxBc3lu
YyhyZXF1ZXN0SWQsIGluX2RhdGFiYXNlSWQsIGluX3F1ZXJ5KTsKKyAgICAgICAgbV9hbHRlcm5h
dGVEaXNwYXRjaGVyLT5leGVjdXRlU1FMQXN5bmMocHJvdG9jb2xfY2FsbElkLCAqaW5fZGF0YWJh
c2VJZCwgaW5fcXVlcnkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmIC8vIEVOQUJM
RShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogCi0gICAgUmVmPERhdGFiYXNlQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNDYWxsYmFjaz4gY2FsbGJhY2sg
PSBhZG9wdFJlZigqbmV3IERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRl
U1FMQXN5bmNDYWxsYmFjayhtX2JhY2tlbmREaXNwYXRjaGVyLmNvcHlSZWYoKSwgcmVxdWVzdElk
KSk7Ci0gICAgbV9hZ2VudC0+ZXhlY3V0ZVNRTEFzeW5jKGluX2RhdGFiYXNlSWQsIGluX3F1ZXJ5
LCBjYWxsYmFjay5jb3B5UmVmKCkpOwotCisgICAgbV9hZ2VudC0+ZXhlY3V0ZVNRTEFzeW5jKCpp
bl9kYXRhYmFzZUlkLCBpbl9xdWVyeSwgYWRvcHRSZWYoKm5ldyBEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5jQ2FsbGJhY2sobV9iYWNrZW5kRGlzcGF0Y2hl
ci5jb3B5UmVmKCksIHByb3RvY29sX2NhbGxJZCkpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCkBAIC01MTMsNiArNDg0LDcgQEAgdm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVy
OjpleGVjdXRlU1FMQXN5bmMobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmoKIAogI2lu
Y2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5o
PgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKQEAgLTU1Niw3ICs1MjgsNiBAQCBjbGFzcyBG
cm9udGVuZFJvdXRlcjsKICNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgogCiAj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNs
dWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC01
OTcsNyArNTY4LDkgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiAjcHJhZ21hIG9uY2UKIAogI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KLSNpbmNsdWRl
IDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVk
ZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5h
bWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC02MTksNyArNTkyLDcgQEAgZW51bSBjbGFzcyBQcmlt
YXJ5Q29sb3JzOwogbmFtZXNwYWNlIERhdGFiYXNlIHsKIC8qIFVuaXF1ZSBpZGVudGlmaWVyIG9m
IERhdGFiYXNlIG9iamVjdC4gKi8KIHVzaW5nIERhdGFiYXNlSWQgPSBpbnQ7Ci11c2luZyBDb2xv
ckxpc3QgPSBKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmlt
YXJ5Q29sb3JzPjsKK3VzaW5nIENvbG9yTGlzdCA9IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkRh
dGFiYXNlOjpQcmltYXJ5Q29sb3JzPjsKIH0gLy8gRGF0YWJhc2UKIC8vIEVuZCBvZiB0eXBlZGVm
cy4KIApAQCAtNjQzLDcgKzYxNiw3IEBAIGVudW0gY2xhc3MgUHJpbWFyeUNvbG9ycyB7CiB9OyAv
LyBlbnVtIGNsYXNzIFByaW1hcnlDb2xvcnMKIAogLyogRGF0YWJhc2UgZXJyb3IuICovCi1jbGFz
cyBFcnJvciA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKK2NsYXNzIEVycm9yIGZpbmFsIDog
cHVibGljIEpTT046Ok9iamVjdEJhc2UgewogcHVibGljOgogICAgIGVudW0gewogICAgICAgICBO
b0ZpZWxkc1NldCA9IDAsCkBAIC02NzAsMTcgKzY0MywxNyBAQCBwdWJsaWM6CiAgICAgICAgIGZy
aWVuZCBjbGFzcyBFcnJvcjsKICAgICBwdWJsaWM6CiAKLSAgICAgICAgQnVpbGRlcjxTVEFURSB8
IE1lc3NhZ2VTZXQ+JiBzZXRNZXNzYWdlKGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgICAgIEJ1
aWxkZXI8U1RBVEUgfCBNZXNzYWdlU2V0PiYgc2V0TWVzc2FnZShjb25zdCBTdHJpbmcmIGluX21l
c3NhZ2UpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBN
ZXNzYWdlU2V0KSwgcHJvcGVydHlfbWVzc2FnZV9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBt
X3Jlc3VsdC0+c2V0U3RyaW5nKCJtZXNzYWdlIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICBtX3Jl
c3VsdC0+c2V0U3RyaW5nKCJtZXNzYWdlIl9zLCBpbl9tZXNzYWdlKTsKICAgICAgICAgICAgIHJl
dHVybiBjYXN0U3RhdGU8TWVzc2FnZVNldD4oKTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1aWxk
ZXI8U1RBVEUgfCBDb2RlU2V0PiYgc2V0Q29kZShpbnQgdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCBDb2RlU2V0PiYgc2V0Q29kZShpbnQgaW5fY29kZSkKICAgICAgICAgewogICAgICAg
ICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIENvZGVTZXQpLCBwcm9wZXJ0eV9jb2RlX2Fs
cmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRJbnRlZ2VyKCJjb2RlIl9zLCB2
YWx1ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0SW50ZWdlcigiY29kZSJfcywgaW5fY29k
ZSk7CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENvZGVTZXQ+KCk7CiAgICAgICAgIH0K
IApAQCAtNzE5LDcgKzY5Miw3IEBAIE9wdGlvbmFsPFByb3RvY29sRW51bVR5cGU+IHBhcnNlRW51
bVZhbHVlRnJvbVN0cmluZyhjb25zdCBTdHJpbmcmKTsKIAogLy8gRW51bXMgaW4gdGhlICdEYXRh
YmFzZScgRG9tYWluCiB0ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpE
YXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPihjb25zdCBTdHJpbmcmKTsKK09w
dGlvbmFsPFByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4gcGFyc2VFbnVtVmFsdWVG
cm9tU3RyaW5nPFByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4oY29uc3QgU3RyaW5n
Jik7CiAKIH0gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCiAKQEAgLTc3MSw4ICs3NDQsNyBAQCBz
dHJ1Y3QgRGVmYXVsdEhhc2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlD
b2xvcnM+IDogSW50SGFzaDxJbnNwZQogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlRl
c3RQcm90b2NvbE9iamVjdHMuaCIKIAotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogCiBu
YW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtNzk3LDE2ICs3NjksMTYgQEAgU3RyaW5nIGdldEVu
dW1Db25zdGFudFZhbHVlKGludCBjb2RlKSB7CiAvLyBFbnVtcyBpbiB0aGUgJ0RhdGFiYXNlJyBE
b21haW4KIAogdGVtcGxhdGU8PgotT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJh
c2U6OlByaW1hcnlDb2xvcnM+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlBy
b3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4oY29uc3QgU3RyaW5nJiBwcm90b2NvbFN0
cmluZykKK09wdGlvbmFsPFByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4gcGFyc2VF
bnVtVmFsdWVGcm9tU3RyaW5nPFByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4oY29u
c3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKIHsKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNv
bnN0YW50VmFsdWVzW10gPSB7Ci0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6
RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM6OlJlZCwKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6
OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9yczo6R3JlZW4sCi0gICAgICAgIChzaXpl
X3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM6OkJsdWUsCisg
ICAgICAgIChzaXplX3QpUHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzOjpSZWQsCisg
ICAgICAgIChzaXplX3QpUHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzOjpHcmVlbiwK
KyAgICAgICAgKHNpemVfdClQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM6OkJsdWUs
CiAgICAgfTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDM7ICsraSkKICAgICAgICAgaWYg
KHByb3RvY29sU3RyaW5nID09IGVudW1fY29uc3RhbnRfdmFsdWVzW2NvbnN0YW50VmFsdWVzW2ld
XSkKLSAgICAgICAgICAgIHJldHVybiAoSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlBy
aW1hcnlDb2xvcnMpY29uc3RhbnRWYWx1ZXNbaV07CisgICAgICAgICAgICByZXR1cm4gKFByb3Rv
Y29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyljb25zdGFudFZhbHVlc1tpXTsKIAogICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CiB9CkBAIC04NjMsMTAgKzgzNSwxMCBAQCBjbGFzcyBPYmpDSW5z
cGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBBbHRlcm5hdGVE
YXRhYmFzZUJhYwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIE9i
akNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKGlkPFRlc3RQcm90b2NvbERhdGFi
YXNlRG9tYWluSGFuZGxlcj4gaGFuZGxlcikgeyBtX2RlbGVnYXRlID0gaGFuZGxlcjsgfQotICAg
IHZvaWQgZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIHJlcXVlc3RJZCwg
aW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnkpIGZpbmFsOwotICAgIHZv
aWQgZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyByZXF1ZXN0SWQsIGlu
dCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5KSBmaW5hbDsKLSAgICB2b2lk
IGV4ZWN1dGVTUUxTeW5jKGxvbmcgcmVxdWVzdElkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3Qg
U3RyaW5nJiBpbl9xdWVyeSkgZmluYWw7Ci0gICAgdm9pZCBleGVjdXRlU1FMQXN5bmMobG9uZyBy
ZXF1ZXN0SWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5KSBmaW5h
bDsKKyAgICB2b2lkIGV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyBwcm90
b2NvbF9jYWxsSWQsIGludCBkYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIHF1ZXJ5KSBmaW5hbDsK
KyAgICB2b2lkIGV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgcHJvdG9j
b2xfY2FsbElkLCBpbnQgZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBxdWVyeSkgZmluYWw7Cisg
ICAgdm9pZCBleGVjdXRlU1FMU3luYyhsb25nIHByb3RvY29sX2NhbGxJZCwgaW50IGRhdGFiYXNl
SWQsIGNvbnN0IFN0cmluZyYgcXVlcnkpIGZpbmFsOworICAgIHZvaWQgZXhlY3V0ZVNRTEFzeW5j
KGxvbmcgcHJvdG9jb2xfY2FsbElkLCBpbnQgZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBxdWVy
eSkgZmluYWw7CiBwcml2YXRlOgogICAgIFJldGFpblB0cjxpZDxUZXN0UHJvdG9jb2xEYXRhYmFz
ZURvbWFpbkhhbmRsZXI+PiBtX2RlbGVnYXRlOwogfTsKQEAgLTkxNCwxODMgKzg4NiwxNzkgQEAg
cHJpdmF0ZToKIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKLXZvaWQgT2JqQ0luc3BlY3RvckRh
dGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1
ZXMobG9uZyByZXF1ZXN0SWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1
ZXJ5KQordm9pZCBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0
ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIHByb3RvY29sX2NhbGxJZCwgaW50IGlu
X2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnkpCiB7CiAgICAgaWYgKCFbbV9kZWxl
Z2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxS
ZXR1cm5WYWx1ZXNXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6ZGF0YWJhc2VJZDpx
dWVyeTopXSkgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVy
cm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RhdGFi
YXNlLmV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMnIHdhcyBub3QgZm91bmQiX3Mp
OworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHByb3Rv
Y29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RhdGFiYXNl
LmV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMnIHdhcyBub3QgZm91bmQiX3MpOwog
ICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCiAgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVy
cm9yKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3Io
cmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAg
ICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxs
SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwogICAgICAgICBiYWNr
ZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgIH07CiAKLSAgICBpZCBz
dWNjZXNzQ2FsbGJhY2sgPSBeKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKmNvbHVtbk5hbWVzLCBO
U1N0cmluZyAqKm5vdGVzLCBkb3VibGUgKnRpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0
ICoqdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKipwYXlsb2FkLCBpbnQgKmRhdGFiYXNl
SWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKipzcWxFcnJvciwgVGVzdFByb3RvY29sRGF0
YWJhc2VQcmltYXJ5Q29sb3JzICpzY3JlZW5Db2xvciwgTlNBcnJheS8qPE5TU3RyaW5nPiovICoq
YWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jT3B0aW9u
YWxSZXR1cm5WYWx1ZXNQcmludENvbG9yICpwcmludENvbG9yKSB7Ci0gICAgICAgIFJlZjxKU09O
OjpPYmplY3Q+IHJlc3VsdE9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgICAg
IFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihjb2x1bW5OYW1lcywg
QCJjb2x1bW5OYW1lcyIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05B
TF9QQVJBTUVURVIobm90ZXMsIEAibm90ZXMiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZP
Ul9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKHZhbHVlcywgQCJ2YWx1ZXMiKTsKLSAgICAgICAgVEhS
T1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKHBheWxvYWQsIEAicGF5bG9h
ZCIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIo
c3FsRXJyb3IsIEAic3FsRXJyb3IiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURf
T1BUSU9OQUxfUEFSQU1FVEVSKGFsdGVybmF0ZUNvbG9ycywgQCJhbHRlcm5hdGVDb2xvcnMiKTsK
LSAgICAgICAgaWYgKGNvbHVtbk5hbWVzKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRB
cnJheSgiY29sdW1uTmFtZXMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KCpjb2x1bW5OYW1lcykpOwot
ICAgICAgICBpZiAobm90ZXMpCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZygi
bm90ZXMiX3MsICpub3Rlcyk7Ci0gICAgICAgIGlmICh0aW1lc3RhbXApCi0gICAgICAgICAgICBy
ZXN1bHRPYmplY3QtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCAqdGltZXN0YW1wKTsKLSAgICAg
ICAgaWYgKHZhbHVlcykKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0T2JqZWN0KCJ2YWx1
ZXMiX3MsIFsqdmFsdWVzIHRvSlNPTk9iamVjdF0pOwotICAgICAgICBpZiAocGF5bG9hZCkKLSAg
ICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0VmFsdWUoInBheWxvYWQiX3MsIFsqcGF5bG9hZCB0
b0pTT05PYmplY3RdKTsKLSAgICAgICAgaWYgKGRhdGFiYXNlSWQpCi0gICAgICAgICAgICByZXN1
bHRPYmplY3QtPnNldEludGVnZXIoImRhdGFiYXNlSWQiX3MsICpkYXRhYmFzZUlkKTsKLSAgICAg
ICAgaWYgKHNxbEVycm9yKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRPYmplY3QoInNx
bEVycm9yIl9zLCBbKnNxbEVycm9yIHRvSlNPTk9iamVjdF0pOwotICAgICAgICBpZiAoc2NyZWVu
Q29sb3IpCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZygic2NyZWVuQ29sb3Ii
X3MsIHRvUHJvdG9jb2xTdHJpbmcoKnNjcmVlbkNvbG9yKSk7Ci0gICAgICAgIGlmIChhbHRlcm5h
dGVDb2xvcnMpCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldEFycmF5KCJhbHRlcm5hdGVD
b2xvcnMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KCphbHRlcm5hdGVDb2xvcnMpKTsKLSAgICAgICAg
aWYgKHByaW50Q29sb3IpCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZygicHJp
bnRDb2xvciJfcywgdG9Qcm90b2NvbFN0cmluZygqcHJpbnRDb2xvcikpOwotICAgICAgICBiYWNr
ZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdE9i
amVjdCksIGZhbHNlKTsKKyAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeKE5TQXJyYXkvKjxOU1N0
cmluZz4qLyAqKm91dF9vcHRfY29sdW1uTmFtZXMsIE5TU3RyaW5nICoqb3V0X29wdF9ub3Rlcywg
ZG91YmxlICpvdXRfb3B0X3RpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqb3V0X29w
dF92YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqKm91dF9vcHRfcGF5bG9hZCwgaW50ICpv
dXRfb3B0X2RhdGFiYXNlSWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKipvdXRfb3B0X3Nx
bEVycm9yLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgKm91dF9vcHRfc2NyZWVu
Q29sb3IsIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKm91dF9vcHRfYWx0ZXJuYXRlQ29sb3JzLCBU
ZXN0UHJvdG9jb2xEYXRhYmFzZShhbm9ueW1vdXMpICpvdXRfb3B0X3ByaW50Q29sb3IpIHsKKyAg
ICAgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7
CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihvdXRf
b3B0X2NvbHVtbk5hbWVzLCBAImNvbHVtbk5hbWVzIik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihvdXRfb3B0X25vdGVzLCBAIm5vdGVzIik7Cisg
ICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihvdXRfb3B0
X3ZhbHVlcywgQCJ2YWx1ZXMiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BU
SU9OQUxfUEFSQU1FVEVSKG91dF9vcHRfcGF5bG9hZCwgQCJwYXlsb2FkIik7CisgICAgICAgIFRI
Uk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihvdXRfb3B0X3NxbEVycm9y
LCBAInNxbEVycm9yIik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFM
X1BBUkFNRVRFUihvdXRfb3B0X2FsdGVybmF0ZUNvbG9ycywgQCJhbHRlcm5hdGVDb2xvcnMiKTsK
KyAgICAgICAgaWYgKCEhb3V0X29wdF9jb2x1bW5OYW1lcykKKyAgICAgICAgICAgIHByb3RvY29s
X2pzb25NZXNzYWdlLT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIHRvSlNPTlN0cmluZ0FycmF5
KCpvdXRfb3B0X2NvbHVtbk5hbWVzKSk7CisgICAgICAgIGlmICghIW91dF9vcHRfbm90ZXMpCisg
ICAgICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJub3RlcyJfcywgKm91
dF9vcHRfbm90ZXMpOworICAgICAgICBpZiAoISFvdXRfb3B0X3RpbWVzdGFtcCkKKyAgICAgICAg
ICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywgKm91dF9v
cHRfdGltZXN0YW1wKTsKKyAgICAgICAgaWYgKCEhb3V0X29wdF92YWx1ZXMpCisgICAgICAgICAg
ICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIFsqb3V0X29wdF92
YWx1ZXMgdG9KU09OT2JqZWN0XSk7CisgICAgICAgIGlmICghIW91dF9vcHRfcGF5bG9hZCkKKyAg
ICAgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgWypv
dXRfb3B0X3BheWxvYWQgdG9KU09OT2JqZWN0XSk7CisgICAgICAgIGlmICghIW91dF9vcHRfZGF0
YWJhc2VJZCkKKyAgICAgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRJbnRlZ2VyKCJk
YXRhYmFzZUlkIl9zLCAqb3V0X29wdF9kYXRhYmFzZUlkKTsKKyAgICAgICAgaWYgKCEhb3V0X29w
dF9zcWxFcnJvcikKKyAgICAgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRPYmplY3Qo
InNxbEVycm9yIl9zLCBbKm91dF9vcHRfc3FsRXJyb3IgdG9KU09OT2JqZWN0XSk7CisgICAgICAg
IGlmICghIW91dF9vcHRfc2NyZWVuQ29sb3IpCisgICAgICAgICAgICBwcm90b2NvbF9qc29uTWVz
c2FnZS0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgdG9Qcm90b2NvbFN0cmluZygqb3V0X29w
dF9zY3JlZW5Db2xvcikpOworICAgICAgICBpZiAoISFvdXRfb3B0X2FsdGVybmF0ZUNvbG9ycykK
KyAgICAgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29s
b3JzIl9zLCB0b0pTT05TdHJpbmdBcnJheSgqb3V0X29wdF9hbHRlcm5hdGVDb2xvcnMpKTsKKyAg
ICAgICAgaWYgKCEhb3V0X29wdF9wcmludENvbG9yKQorICAgICAgICAgICAgcHJvdG9jb2xfanNv
bk1lc3NhZ2UtPnNldFN0cmluZygicHJpbnRDb2xvciJfcywgdG9Qcm90b2NvbFN0cmluZygqb3V0
X29wdF9wcmludENvbG9yKSk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNw
b25zZShwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJvdG9jb2xfanNvbk1lc3NhZ2UpLCBmYWxz
ZSk7CiAgICAgfTsKIAogICAgIGludCBvX2luX2RhdGFiYXNlSWQgPSBpbl9kYXRhYmFzZUlkOwog
ICAgIE5TU3RyaW5nICpvX2luX3F1ZXJ5ID0gaW5fcXVlcnk7Ci0KICAgICBbbV9kZWxlZ2F0ZSBl
eGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JD
YWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrIGRhdGFiYXNlSWQ6b19pbl9k
YXRhYmFzZUlkIHF1ZXJ5Om9faW5fcXVlcnldOwogfQogCi12b2lkIE9iakNJbnNwZWN0b3JEYXRh
YmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVl
cyhsb25nIHJlcXVlc3RJZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVl
cnkpCit2b2lkIE9iakNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRl
U1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIHByb3RvY29sX2NhbGxJZCwgaW50IGlu
X2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnkpCiB7CiAgICAgaWYgKCFbbV9kZWxl
Z2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGV4ZWN1dGVTUUxBc3luY09wdGlvbmFs
UmV0dXJuVmFsdWVzV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOmRhdGFiYXNlSWQ6
cXVlcnk6KV0pIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xF
cnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEYXRh
YmFzZS5leGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcycgd2FzIG5vdCBmb3VuZCJf
cyk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocHJv
dG9jb2xfY2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRGF0YWJh
c2UuZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMnIHdhcyBub3QgZm91bmQiX3Mp
OwogICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcg
KmVycm9yKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJy
b3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAg
ICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9j
YWxsSWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwogICAgICAgICBi
YWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgIH07CiAKLSAgICBp
ZCBzdWNjZXNzQ2FsbGJhY2sgPSBeKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKmNvbHVtbk5hbWVz
LCBOU1N0cmluZyAqKm5vdGVzLCBkb3VibGUgKnRpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2Jq
ZWN0ICoqdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKipwYXlsb2FkLCBpbnQgKmRhdGFi
YXNlSWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKipzcWxFcnJvciwgVGVzdFByb3RvY29s
RGF0YWJhc2VQcmltYXJ5Q29sb3JzICpzY3JlZW5Db2xvciwgTlNBcnJheS8qPE5TU3RyaW5nPiov
ICoqYWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY09w
dGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvciAqcHJpbnRDb2xvcikgewotICAgICAgICBSZWY8
SlNPTjo6T2JqZWN0PiByZXN1bHRPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAg
ICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIoY29sdW1uTmFt
ZXMsIEAiY29sdW1uTmFtZXMiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BU
SU9OQUxfUEFSQU1FVEVSKG5vdGVzLCBAIm5vdGVzIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUih2YWx1ZXMsIEAidmFsdWVzIik7Ci0gICAgICAg
IFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihwYXlsb2FkLCBAInBh
eWxvYWQiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1F
VEVSKHNxbEVycm9yLCBAInNxbEVycm9yIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1Jf
QkFEX09QVElPTkFMX1BBUkFNRVRFUihhbHRlcm5hdGVDb2xvcnMsIEAiYWx0ZXJuYXRlQ29sb3Jz
Iik7Ci0gICAgICAgIGlmIChjb2x1bW5OYW1lcykKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+
c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCB0b0pTT05TdHJpbmdBcnJheSgqY29sdW1uTmFtZXMp
KTsKLSAgICAgICAgaWYgKG5vdGVzKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJp
bmcoIm5vdGVzIl9zLCAqbm90ZXMpOwotICAgICAgICBpZiAodGltZXN0YW1wKQotICAgICAgICAg
ICAgcmVzdWx0T2JqZWN0LT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywgKnRpbWVzdGFtcCk7Ci0g
ICAgICAgIGlmICh2YWx1ZXMpCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldE9iamVjdCgi
dmFsdWVzIl9zLCBbKnZhbHVlcyB0b0pTT05PYmplY3RdKTsKLSAgICAgICAgaWYgKHBheWxvYWQp
Ci0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCBbKnBheWxv
YWQgdG9KU09OT2JqZWN0XSk7Ci0gICAgICAgIGlmIChkYXRhYmFzZUlkKQotICAgICAgICAgICAg
cmVzdWx0T2JqZWN0LT5zZXRJbnRlZ2VyKCJkYXRhYmFzZUlkIl9zLCAqZGF0YWJhc2VJZCk7Ci0g
ICAgICAgIGlmIChzcWxFcnJvcikKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0T2JqZWN0
KCJzcWxFcnJvciJfcywgWypzcWxFcnJvciB0b0pTT05PYmplY3RdKTsKLSAgICAgICAgaWYgKHNj
cmVlbkNvbG9yKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoInNjcmVlbkNv
bG9yIl9zLCB0b1Byb3RvY29sU3RyaW5nKCpzY3JlZW5Db2xvcikpOwotICAgICAgICBpZiAoYWx0
ZXJuYXRlQ29sb3JzKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRBcnJheSgiYWx0ZXJu
YXRlQ29sb3JzIl9zLCB0b0pTT05TdHJpbmdBcnJheSgqYWx0ZXJuYXRlQ29sb3JzKSk7Ci0gICAg
ICAgIGlmIChwcmludENvbG9yKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmco
InByaW50Q29sb3IiX3MsIHRvUHJvdG9jb2xTdHJpbmcoKnByaW50Q29sb3IpKTsKLSAgICAgICAg
YmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1
bHRPYmplY3QpLCBmYWxzZSk7CisgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXihOU0FycmF5Lyo8
TlNTdHJpbmc+Ki8gKipvdXRfb3B0X2NvbHVtbk5hbWVzLCBOU1N0cmluZyAqKm91dF9vcHRfbm90
ZXMsIGRvdWJsZSAqb3V0X29wdF90aW1lc3RhbXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqKm91
dF9vcHRfdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKipvdXRfb3B0X3BheWxvYWQsIGlu
dCAqb3V0X29wdF9kYXRhYmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoqb3V0X29w
dF9zcWxFcnJvciwgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzICpvdXRfb3B0X3Nj
cmVlbkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKipvdXRfb3B0X2FsdGVybmF0ZUNvbG9y
cywgVGVzdFByb3RvY29sRGF0YWJhc2UoYW5vbnltb3VzKSAqb3V0X29wdF9wcmludENvbG9yKSB7
CisgICAgICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0
ZSgpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIo
b3V0X29wdF9jb2x1bW5OYW1lcywgQCJjb2x1bW5OYW1lcyIpOworICAgICAgICBUSFJPV19FWENF
UFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIob3V0X29wdF9ub3RlcywgQCJub3RlcyIp
OworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIob3V0
X29wdF92YWx1ZXMsIEAidmFsdWVzIik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFE
X09QVElPTkFMX1BBUkFNRVRFUihvdXRfb3B0X3BheWxvYWQsIEAicGF5bG9hZCIpOworICAgICAg
ICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIob3V0X29wdF9zcWxF
cnJvciwgQCJzcWxFcnJvciIpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJ
T05BTF9QQVJBTUVURVIob3V0X29wdF9hbHRlcm5hdGVDb2xvcnMsIEAiYWx0ZXJuYXRlQ29sb3Jz
Iik7CisgICAgICAgIGlmICghIW91dF9vcHRfY29sdW1uTmFtZXMpCisgICAgICAgICAgICBwcm90
b2NvbF9qc29uTWVzc2FnZS0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCB0b0pTT05TdHJpbmdB
cnJheSgqb3V0X29wdF9jb2x1bW5OYW1lcykpOworICAgICAgICBpZiAoISFvdXRfb3B0X25vdGVz
KQorICAgICAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygibm90ZXMiX3Ms
ICpvdXRfb3B0X25vdGVzKTsKKyAgICAgICAgaWYgKCEhb3V0X29wdF90aW1lc3RhbXApCisgICAg
ICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsICpv
dXRfb3B0X3RpbWVzdGFtcCk7CisgICAgICAgIGlmICghIW91dF9vcHRfdmFsdWVzKQorICAgICAg
ICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldE9iamVjdCgidmFsdWVzIl9zLCBbKm91dF9v
cHRfdmFsdWVzIHRvSlNPTk9iamVjdF0pOworICAgICAgICBpZiAoISFvdXRfb3B0X3BheWxvYWQp
CisgICAgICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0VmFsdWUoInBheWxvYWQiX3Ms
IFsqb3V0X29wdF9wYXlsb2FkIHRvSlNPTk9iamVjdF0pOworICAgICAgICBpZiAoISFvdXRfb3B0
X2RhdGFiYXNlSWQpCisgICAgICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0SW50ZWdl
cigiZGF0YWJhc2VJZCJfcywgKm91dF9vcHRfZGF0YWJhc2VJZCk7CisgICAgICAgIGlmICghIW91
dF9vcHRfc3FsRXJyb3IpCisgICAgICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0T2Jq
ZWN0KCJzcWxFcnJvciJfcywgWypvdXRfb3B0X3NxbEVycm9yIHRvSlNPTk9iamVjdF0pOworICAg
ICAgICBpZiAoISFvdXRfb3B0X3NjcmVlbkNvbG9yKQorICAgICAgICAgICAgcHJvdG9jb2xfanNv
bk1lc3NhZ2UtPnNldFN0cmluZygic2NyZWVuQ29sb3IiX3MsIHRvUHJvdG9jb2xTdHJpbmcoKm91
dF9vcHRfc2NyZWVuQ29sb3IpKTsKKyAgICAgICAgaWYgKCEhb3V0X29wdF9hbHRlcm5hdGVDb2xv
cnMpCisgICAgICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0QXJyYXkoImFsdGVybmF0
ZUNvbG9ycyJfcywgdG9KU09OU3RyaW5nQXJyYXkoKm91dF9vcHRfYWx0ZXJuYXRlQ29sb3JzKSk7
CisgICAgICAgIGlmICghIW91dF9vcHRfcHJpbnRDb2xvcikKKyAgICAgICAgICAgIHByb3RvY29s
X2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoInByaW50Q29sb3IiX3MsIHRvUHJvdG9jb2xTdHJpbmco
Km91dF9vcHRfcHJpbnRDb2xvcikpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5k
UmVzcG9uc2UocHJvdG9jb2xfY2FsbElkLCBXVEZNb3ZlKHByb3RvY29sX2pzb25NZXNzYWdlKSwg
ZmFsc2UpOwogICAgIH07CiAKICAgICBpbnQgb19pbl9kYXRhYmFzZUlkID0gaW5fZGF0YWJhc2VJ
ZDsKICAgICBOU1N0cmluZyAqb19pbl9xdWVyeSA9IGluX3F1ZXJ5OwotCiAgICAgW21fZGVsZWdh
dGUgZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNXaXRoRXJyb3JDYWxsYmFjazpl
cnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2sgZGF0YWJhc2VJZDpv
X2luX2RhdGFiYXNlSWQgcXVlcnk6b19pbl9xdWVyeV07CiB9CiAKLXZvaWQgT2JqQ0luc3BlY3Rv
ckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxTeW5jKGxvbmcgcmVxdWVzdElk
LCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSkKK3ZvaWQgT2JqQ0lu
c3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxTeW5jKGxvbmcgcHJv
dG9jb2xfY2FsbElkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSkK
IHsKICAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoZXhl
Y3V0ZVNRTFN5bmNXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6ZGF0YWJhc2VJZDpx
dWVyeTopXSkgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVy
cm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RhdGFi
YXNlLmV4ZWN1dGVTUUxTeW5jJyB3YXMgbm90IGZvdW5kIl9zKTsKKyAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxsSWQsIEJhY2tlbmRE
aXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEYXRhYmFzZS5leGVjdXRlU1FMU3luYycgd2Fz
IG5vdCBmb3VuZCJfcyk7CiAgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5n
RXJyb3JzKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZCBlcnJvckNhbGxiYWNr
ID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVw
b3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJv
ciwgZXJyb3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVy
cm9yKHByb3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJv
cik7CiAgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CiAg
ICAgfTsKIAotICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF4oTlNBcnJheS8qPE5TU3RyaW5nPiov
ICpjb2x1bW5OYW1lcywgTlNTdHJpbmcgKm5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBSV0lQcm90
b2NvbEpTT05PYmplY3QgKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpwYXlsb2FkLCBp
bnQgZGF0YWJhc2VJZCwgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqc3FsRXJyb3IsIE5TQXJy
YXkvKjxOU1N0cmluZz4qLyAqYWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVBy
aW1hcnlDb2xvcnMgc2NyZWVuQ29sb3IsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5
bmNQcmludENvbG9yIHByaW50Q29sb3IpIHsKLSAgICAgICAgUmVmPEpTT046Ok9iamVjdD4gcmVz
dWx0T2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICAgICAgVEhST1dfRVhDRVBU
SU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoY29sdW1uTmFtZXMsIEAiY29sdW1uTmFtZXMiKTsK
LSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIobm90ZXMsIEAi
bm90ZXMiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIo
dmFsdWVzLCBAInZhbHVlcyIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVE
X1BBUkFNRVRFUihwYXlsb2FkLCBAInBheWxvYWQiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9O
X0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoc3FsRXJyb3IsIEAic3FsRXJyb3IiKTsKLSAgICAgICAg
VEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoYWx0ZXJuYXRlQ29sb3JzLCBA
ImFsdGVybmF0ZUNvbG9ycyIpOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldEFycmF5KCJjb2x1
bW5OYW1lcyJfcywgdG9KU09OU3RyaW5nQXJyYXkoY29sdW1uTmFtZXMpKTsKLSAgICAgICAgcmVz
dWx0T2JqZWN0LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCBub3Rlcyk7Ci0gICAgICAgIHJlc3VsdE9i
amVjdC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsIHRpbWVzdGFtcCk7Ci0gICAgICAgIHJlc3Vs
dE9iamVjdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIFt2YWx1ZXMgdG9KU09OT2JqZWN0XSk7Ci0g
ICAgICAgIHJlc3VsdE9iamVjdC0+c2V0VmFsdWUoInBheWxvYWQiX3MsIFtwYXlsb2FkIHRvSlNP
Tk9iamVjdF0pOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldEludGVnZXIoImRhdGFiYXNlSWQi
X3MsIGRhdGFiYXNlSWQpOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldE9iamVjdCgic3FsRXJy
b3IiX3MsIFtzcWxFcnJvciB0b0pTT05PYmplY3RdKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5z
ZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCB0b0pTT05TdHJpbmdBcnJheShhbHRlcm5hdGVD
b2xvcnMpKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9z
LCB0b1Byb3RvY29sU3RyaW5nKHNjcmVlbkNvbG9yKSk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+
c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCB0b1Byb3RvY29sU3RyaW5nKHByaW50Q29sb3IpKTsK
LSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RG
TW92ZShyZXN1bHRPYmplY3QpLCBmYWxzZSk7CisgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXihO
U0FycmF5Lyo8TlNTdHJpbmc+Ki8gKm91dF9jb2x1bW5OYW1lcywgTlNTdHJpbmcgKm91dF9ub3Rl
cywgZG91YmxlIG91dF90aW1lc3RhbXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqb3V0X3ZhbHVl
cywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpvdXRfcGF5bG9hZCwgaW50IG91dF9kYXRhYmFzZUlk
LCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICpvdXRfc3FsRXJyb3IsIE5TQXJyYXkvKjxOU1N0
cmluZz4qLyAqb3V0X2FsdGVybmF0ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5
Q29sb3JzIG91dF9zY3JlZW5Db2xvciwgVGVzdFByb3RvY29sRGF0YWJhc2UoYW5vbnltb3VzKSBv
dXRfcHJpbnRDb2xvcikgeworICAgICAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNP
Tjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJF
RF9QQVJBTUVURVIob3V0X2NvbHVtbk5hbWVzLCBAImNvbHVtbk5hbWVzIik7CisgICAgICAgIFRI
Uk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKG91dF9ub3RlcywgQCJub3RlcyIp
OworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihvdXRfdmFs
dWVzLCBAInZhbHVlcyIpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BB
UkFNRVRFUihvdXRfcGF5bG9hZCwgQCJwYXlsb2FkIik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKG91dF9zcWxFcnJvciwgQCJzcWxFcnJvciIpOworICAg
ICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihvdXRfYWx0ZXJuYXRl
Q29sb3JzLCBAImFsdGVybmF0ZUNvbG9ycyIpOworICAgICAgICBwcm90b2NvbF9qc29uTWVzc2Fn
ZS0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCB0b0pTT05TdHJpbmdBcnJheShvdXRfY29sdW1u
TmFtZXMpKTsKKyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygibm90ZXMi
X3MsIG91dF9ub3Rlcyk7CisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXREb3VibGUo
InRpbWVzdGFtcCJfcywgb3V0X3RpbWVzdGFtcCk7CisgICAgICAgIHByb3RvY29sX2pzb25NZXNz
YWdlLT5zZXRPYmplY3QoInZhbHVlcyJfcywgW291dF92YWx1ZXMgdG9KU09OT2JqZWN0XSk7Cisg
ICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgW291dF9w
YXlsb2FkIHRvSlNPTk9iamVjdF0pOworICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0
SW50ZWdlcigiZGF0YWJhc2VJZCJfcywgb3V0X2RhdGFiYXNlSWQpOworICAgICAgICBwcm90b2Nv
bF9qc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJzcWxFcnJvciJfcywgW291dF9zcWxFcnJvciB0b0pT
T05PYmplY3RdKTsKKyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldEFycmF5KCJhbHRl
cm5hdGVDb2xvcnMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KG91dF9hbHRlcm5hdGVDb2xvcnMpKTsK
KyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygic2NyZWVuQ29sb3IiX3Ms
IHRvUHJvdG9jb2xTdHJpbmcob3V0X3NjcmVlbkNvbG9yKSk7CisgICAgICAgIHByb3RvY29sX2pz
b25NZXNzYWdlLT5zZXRTdHJpbmcoInByaW50Q29sb3IiX3MsIHRvUHJvdG9jb2xTdHJpbmcob3V0
X3ByaW50Q29sb3IpKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNl
KHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSksIGZhbHNlKTsK
ICAgICB9OwogCiAgICAgaW50IG9faW5fZGF0YWJhc2VJZCA9IGluX2RhdGFiYXNlSWQ7CiAgICAg
TlNTdHJpbmcgKm9faW5fcXVlcnkgPSBpbl9xdWVyeTsKLQogICAgIFttX2RlbGVnYXRlIGV4ZWN1
dGVTUUxTeW5jV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6
c3VjY2Vzc0NhbGxiYWNrIGRhdGFiYXNlSWQ6b19pbl9kYXRhYmFzZUlkIHF1ZXJ5Om9faW5fcXVl
cnldOwogfQogCi12b2lkIE9iakNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpl
eGVjdXRlU1FMQXN5bmMobG9uZyByZXF1ZXN0SWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBT
dHJpbmcmIGluX3F1ZXJ5KQordm9pZCBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0
Y2hlcjo6ZXhlY3V0ZVNRTEFzeW5jKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBpbnQgaW5fZGF0YWJh
c2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSkKIHsKICAgICBpZiAoIVttX2RlbGVnYXRlIHJl
c3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoZXhlY3V0ZVNRTEFzeW5jV2l0aEVycm9yQ2FsbGJh
Y2s6c3VjY2Vzc0NhbGxiYWNrOmRhdGFiYXNlSWQ6cXVlcnk6KV0pIHsKLSAgICAgICAgYmFja2Vu
ZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNw
YXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEYXRhYmFzZS5leGVjdXRlU1FMQXN5bmMnIHdhcyBu
b3QgZm91bmQiX3MpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2Nv
bEVycm9yKHByb3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5k
LCAiJ0RhdGFiYXNlLmV4ZWN1dGVTUUxBc3luYycgd2FzIG5vdCBmb3VuZCJfcyk7CiAgICAgICAg
IGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKICAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsK
LSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0
SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgICAgICBiYWNr
ZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHByb3RvY29sX2NhbGxJZCwgQmFj
a2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CiAgICAgICAgIGJhY2tlbmREaXNw
YXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgfTsKIAotICAgIGlkIHN1Y2Nlc3ND
YWxsYmFjayA9IF4oTlNBcnJheS8qPE5TU3RyaW5nPiovICpjb2x1bW5OYW1lcywgTlNTdHJpbmcg
Km5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKnZhbHVlcywg
UldJUHJvdG9jb2xKU09OT2JqZWN0ICpwYXlsb2FkLCBpbnQgZGF0YWJhc2VJZCwgVGVzdFByb3Rv
Y29sRGF0YWJhc2VFcnJvciAqc3FsRXJyb3IsIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNv
bG9ycyBzY3JlZW5Db2xvciwgTlNBcnJheS8qPE5TU3RyaW5nPiovICphbHRlcm5hdGVDb2xvcnMs
IFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jUHJpbnRDb2xvciBwcmludENvbG9y
KSB7Ci0gICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdE9iamVjdCA9IEpTT046Ok9iamVj
dDo6Y3JlYXRlKCk7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1F
VEVSKGNvbHVtbk5hbWVzLCBAImNvbHVtbk5hbWVzIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKG5vdGVzLCBAIm5vdGVzIik7Ci0gICAgICAgIFRIUk9X
X0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKHZhbHVlcywgQCJ2YWx1ZXMiKTsKLSAg
ICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIocGF5bG9hZCwgQCJw
YXlsb2FkIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVS
KHNxbEVycm9yLCBAInNxbEVycm9yIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVR
VUlSRURfUEFSQU1FVEVSKGFsdGVybmF0ZUNvbG9ycywgQCJhbHRlcm5hdGVDb2xvcnMiKTsKLSAg
ICAgICAgcmVzdWx0T2JqZWN0LT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIHRvSlNPTlN0cmlu
Z0FycmF5KGNvbHVtbk5hbWVzKSk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKCJu
b3RlcyJfcywgbm90ZXMpOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldERvdWJsZSgidGltZXN0
YW1wIl9zLCB0aW1lc3RhbXApOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldE9iamVjdCgidmFs
dWVzIl9zLCBbdmFsdWVzIHRvSlNPTk9iamVjdF0pOwotICAgICAgICByZXN1bHRPYmplY3QtPnNl
dFZhbHVlKCJwYXlsb2FkIl9zLCBbcGF5bG9hZCB0b0pTT05PYmplY3RdKTsKLSAgICAgICAgcmVz
dWx0T2JqZWN0LT5zZXRJbnRlZ2VyKCJkYXRhYmFzZUlkIl9zLCBkYXRhYmFzZUlkKTsKLSAgICAg
ICAgcmVzdWx0T2JqZWN0LT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBbc3FsRXJyb3IgdG9KU09O
T2JqZWN0XSk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJf
cywgdG9Qcm90b2NvbFN0cmluZyhzY3JlZW5Db2xvcikpOwotICAgICAgICByZXN1bHRPYmplY3Qt
PnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KGFsdGVybmF0
ZUNvbG9ycykpOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZygicHJpbnRDb2xvciJf
cywgdG9Qcm90b2NvbFN0cmluZyhwcmludENvbG9yKSk7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRj
aGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0T2JqZWN0KSwgZmFs
c2UpOworICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF4oTlNBcnJheS8qPE5TU3RyaW5nPiovICpv
dXRfY29sdW1uTmFtZXMsIE5TU3RyaW5nICpvdXRfbm90ZXMsIGRvdWJsZSBvdXRfdGltZXN0YW1w
LCBSV0lQcm90b2NvbEpTT05PYmplY3QgKm91dF92YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVj
dCAqb3V0X3BheWxvYWQsIGludCBvdXRfZGF0YWJhc2VJZCwgVGVzdFByb3RvY29sRGF0YWJhc2VF
cnJvciAqb3V0X3NxbEVycm9yLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgb3V0
X3NjcmVlbkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKm91dF9hbHRlcm5hdGVDb2xvcnMs
IFRlc3RQcm90b2NvbERhdGFiYXNlKGFub255bW91cykgb3V0X3ByaW50Q29sb3IpIHsKKyAgICAg
ICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Cisg
ICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKG91dF9jb2x1bW5O
YW1lcywgQCJjb2x1bW5OYW1lcyIpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJ
UkVEX1BBUkFNRVRFUihvdXRfbm90ZXMsIEAibm90ZXMiKTsKKyAgICAgICAgVEhST1dfRVhDRVBU
SU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIob3V0X3ZhbHVlcywgQCJ2YWx1ZXMiKTsKKyAgICAg
ICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIob3V0X3BheWxvYWQsIEAi
cGF5bG9hZCIpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRF
UihvdXRfc3FsRXJyb3IsIEAic3FsRXJyb3IiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZP
Ul9SRVFVSVJFRF9QQVJBTUVURVIob3V0X2FsdGVybmF0ZUNvbG9ycywgQCJhbHRlcm5hdGVDb2xv
cnMiKTsKKyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldEFycmF5KCJjb2x1bW5OYW1l
cyJfcywgdG9KU09OU3RyaW5nQXJyYXkob3V0X2NvbHVtbk5hbWVzKSk7CisgICAgICAgIHByb3Rv
Y29sX2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm5vdGVzIl9zLCBvdXRfbm90ZXMpOworICAgICAg
ICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsIG91dF90aW1l
c3RhbXApOworICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJ2YWx1ZXMi
X3MsIFtvdXRfdmFsdWVzIHRvSlNPTk9iamVjdF0pOworICAgICAgICBwcm90b2NvbF9qc29uTWVz
c2FnZS0+c2V0VmFsdWUoInBheWxvYWQiX3MsIFtvdXRfcGF5bG9hZCB0b0pTT05PYmplY3RdKTsK
KyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldEludGVnZXIoImRhdGFiYXNlSWQiX3Ms
IG91dF9kYXRhYmFzZUlkKTsKKyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldE9iamVj
dCgic3FsRXJyb3IiX3MsIFtvdXRfc3FsRXJyb3IgdG9KU09OT2JqZWN0XSk7CisgICAgICAgIHBy
b3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCB0b1Byb3RvY29s
U3RyaW5nKG91dF9zY3JlZW5Db2xvcikpOworICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+
c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywgdG9KU09OU3RyaW5nQXJyYXkob3V0X2FsdGVy
bmF0ZUNvbG9ycykpOworICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJw
cmludENvbG9yIl9zLCB0b1Byb3RvY29sU3RyaW5nKG91dF9wcmludENvbG9yKSk7CisgICAgICAg
IGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShwcm90b2NvbF9jYWxsSWQsIFdURk1v
dmUocHJvdG9jb2xfanNvbk1lc3NhZ2UpLCBmYWxzZSk7CiAgICAgfTsKIAogICAgIGludCBvX2lu
X2RhdGFiYXNlSWQgPSBpbl9kYXRhYmFzZUlkOwogICAgIE5TU3RyaW5nICpvX2luX3F1ZXJ5ID0g
aW5fcXVlcnk7Ci0KICAgICBbbV9kZWxlZ2F0ZSBleGVjdXRlU1FMQXN5bmNXaXRoRXJyb3JDYWxs
YmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2sgZGF0YWJh
c2VJZDpvX2luX2RhdGFiYXNlSWQgcXVlcnk6b19pbl9xdWVyeV07CiB9CiAKQEAgLTEzNDYsMTAg
KzEzMTQsMTAgQEAgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCiAKIEBw
cm90b2NvbCBUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkhhbmRsZXIgPE5TT2JqZWN0PgogQG9w
dGlvbmFsCi0tICh2b2lkKWV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNXaXRoRXJy
b3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vz
c0NhbGxiYWNrOih2b2lkKF4pKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKmNvbHVtbk5hbWVzLCBO
U1N0cmluZyAqKm5vdGVzLCBkb3VibGUgKnRpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0
ICoqdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKipwYXlsb2FkLCBpbnQgKmRhdGFiYXNl
SWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKipzcWxFcnJvciwgVGVzdFByb3RvY29sRGF0
YWJhc2VQcmltYXJ5Q29sb3JzICpzY3JlZW5Db2xvciwgTlNBcnJheS8qPE5TU3RyaW5nPiovICoq
YWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jT3B0aW9u
YWxSZXR1cm5WYWx1ZXNQcmludENvbG9yICpwcmludENvbG9yKSlzdWNjZXNzQ2FsbGJhY2sgZGF0
YWJhc2VJZDooaW50KWRhdGFiYXNlSWQgcXVlcnk6KE5TU3RyaW5nICopcXVlcnk7Ci0tICh2b2lk
KWV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzV2l0aEVycm9yQ2FsbGJhY2s6KHZv
aWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9p
ZCheKShOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKipjb2x1bW5OYW1lcywgTlNTdHJpbmcgKipub3Rl
cywgZG91YmxlICp0aW1lc3RhbXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqKnZhbHVlcywgUldJ
UHJvdG9jb2xKU09OT2JqZWN0ICoqcGF5bG9hZCwgaW50ICpkYXRhYmFzZUlkLCBUZXN0UHJvdG9j
b2xEYXRhYmFzZUVycm9yICoqc3FsRXJyb3IsIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNv
bG9ycyAqc2NyZWVuQ29sb3IsIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKmFsdGVybmF0ZUNvbG9y
cywgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVl
c1ByaW50Q29sb3IgKnByaW50Q29sb3IpKXN1Y2Nlc3NDYWxsYmFjayBkYXRhYmFzZUlkOihpbnQp
ZGF0YWJhc2VJZCBxdWVyeTooTlNTdHJpbmcgKilxdWVyeTsKLS0gKHZvaWQpZXhlY3V0ZVNRTFN5
bmNXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJh
Y2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqY29sdW1u
TmFtZXMsIE5TU3RyaW5nICpub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09O
T2JqZWN0ICp2YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqcGF5bG9hZCwgaW50IGRhdGFi
YXNlSWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKnNxbEVycm9yLCBOU0FycmF5Lyo8TlNT
dHJpbmc+Ki8gKmFsdGVybmF0ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29s
b3JzIHNjcmVlbkNvbG9yLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxTeW5jUHJpbnRD
b2xvciBwcmludENvbG9yKSlzdWNjZXNzQ2FsbGJhY2sgZGF0YWJhc2VJZDooaW50KWRhdGFiYXNl
SWQgcXVlcnk6KE5TU3RyaW5nICopcXVlcnk7Ci0tICh2b2lkKWV4ZWN1dGVTUUxBc3luY1dpdGhF
cnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNj
ZXNzQ2FsbGJhY2s6KHZvaWQoXikoTlNBcnJheS8qPE5TU3RyaW5nPiovICpjb2x1bW5OYW1lcywg
TlNTdHJpbmcgKm5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05PYmplY3Qg
KnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpwYXlsb2FkLCBpbnQgZGF0YWJhc2VJZCwg
VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqc3FsRXJyb3IsIFRlc3RQcm90b2NvbERhdGFiYXNl
UHJpbWFyeUNvbG9ycyBzY3JlZW5Db2xvciwgTlNBcnJheS8qPE5TU3RyaW5nPiovICphbHRlcm5h
dGVDb2xvcnMsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jUHJpbnRDb2xvciBw
cmludENvbG9yKSlzdWNjZXNzQ2FsbGJhY2sgZGF0YWJhc2VJZDooaW50KWRhdGFiYXNlSWQgcXVl
cnk6KE5TU3RyaW5nICopcXVlcnk7CistICh2b2lkKWV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1
cm5WYWx1ZXNXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9y
Q2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAq
KmNvbHVtbk5hbWVzLCBOU1N0cmluZyAqKm5vdGVzLCBkb3VibGUgKnRpbWVzdGFtcCwgUldJUHJv
dG9jb2xKU09OT2JqZWN0ICoqdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKipwYXlsb2Fk
LCBpbnQgKmRhdGFiYXNlSWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKipzcWxFcnJvciwg
VGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzICpzY3JlZW5Db2xvciwgTlNBcnJheS8q
PE5TU3RyaW5nPiovICoqYWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZShhbm9u
eW1vdXMpICpwcmludENvbG9yKSlzdWNjZXNzQ2FsbGJhY2sgZGF0YWJhc2VJZDooaW50KWRhdGFi
YXNlSWQgcXVlcnk6KE5TU3RyaW5nICopcXVlcnk7CistICh2b2lkKWV4ZWN1dGVTUUxBc3luY09w
dGlvbmFsUmV0dXJuVmFsdWVzV2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVy
cm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKShOU0FycmF5Lyo8TlNT
dHJpbmc+Ki8gKipjb2x1bW5OYW1lcywgTlNTdHJpbmcgKipub3RlcywgZG91YmxlICp0aW1lc3Rh
bXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0
ICoqcGF5bG9hZCwgaW50ICpkYXRhYmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoq
c3FsRXJyb3IsIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyAqc2NyZWVuQ29sb3Is
IE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKmFsdGVybmF0ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0
YWJhc2UoYW5vbnltb3VzKSAqcHJpbnRDb2xvcikpc3VjY2Vzc0NhbGxiYWNrIGRhdGFiYXNlSWQ6
KGludClkYXRhYmFzZUlkIHF1ZXJ5OihOU1N0cmluZyAqKXF1ZXJ5OworLSAodm9pZClleGVjdXRl
U1FMU3luY1dpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JD
YWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikoTlNBcnJheS8qPE5TU3RyaW5nPiovICpj
b2x1bW5OYW1lcywgTlNTdHJpbmcgKm5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBSV0lQcm90b2Nv
bEpTT05PYmplY3QgKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpwYXlsb2FkLCBpbnQg
ZGF0YWJhc2VJZCwgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqc3FsRXJyb3IsIE5TQXJyYXkv
KjxOU1N0cmluZz4qLyAqYWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1h
cnlDb2xvcnMgc2NyZWVuQ29sb3IsIFRlc3RQcm90b2NvbERhdGFiYXNlKGFub255bW91cykgcHJp
bnRDb2xvcikpc3VjY2Vzc0NhbGxiYWNrIGRhdGFiYXNlSWQ6KGludClkYXRhYmFzZUlkIHF1ZXJ5
OihOU1N0cmluZyAqKXF1ZXJ5OworLSAodm9pZClleGVjdXRlU1FMQXN5bmNXaXRoRXJyb3JDYWxs
YmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxi
YWNrOih2b2lkKF4pKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqY29sdW1uTmFtZXMsIE5TU3RyaW5n
ICpub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0ICp2YWx1ZXMs
IFJXSVByb3RvY29sSlNPTk9iamVjdCAqcGF5bG9hZCwgaW50IGRhdGFiYXNlSWQsIFRlc3RQcm90
b2NvbERhdGFiYXNlRXJyb3IgKnNxbEVycm9yLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlD
b2xvcnMgc2NyZWVuQ29sb3IsIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqYWx0ZXJuYXRlQ29sb3Jz
LCBUZXN0UHJvdG9jb2xEYXRhYmFzZShhbm9ueW1vdXMpIHByaW50Q29sb3IpKXN1Y2Nlc3NDYWxs
YmFjayBkYXRhYmFzZUlkOihpbnQpZGF0YWJhc2VJZCBxdWVyeTooTlNTdHJpbmcgKilxdWVyeTsK
IEBlbmQKIAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1w
YXJhbWV0ZXJzLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2NvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4t
cGFyYW1ldGVycy5qc29uLXJlc3VsdAppbmRleCAxZjJmNDVkNzRjMzkzOTExMTIzNmE4NjdkN2Zm
ZmQyNDBlNmQ5OWM1Li4zZTQ0Mjc0ODk0YzJlZDA2NGVlOGQxOTllMWEwZTRjMTE0NGFiZmNlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
ZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpz
b24tcmVzdWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9leHBlY3RlZC9jb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRl
cnMuanNvbi1yZXN1bHQKQEAgLTcwLDcgKzcwLDcgQEAgSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0
ZURvbWFpbigiRGF0YWJhc2UiLCBudWxsKTsKIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJO
QVRFX0RJU1BBVENIRVJTKQogCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKKyNpbmNs
dWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JGcm9udGVuZFJvdXRlci5oPgogCkBAIC04OCw4ICs4OCw4IEBAIHByaXZhdGU6CiBjbGFz
cyBBbHRlcm5hdGVEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyIDogcHVibGljIEFsdGVybmF0ZUJh
Y2tlbmREaXNwYXRjaGVyIHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5BbHRlcm5hdGVEYXRhYmFz
ZUJhY2tlbmREaXNwYXRjaGVyKCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVBbGxPcHRp
b25hbFBhcmFtZXRlcnMobG9uZyBjYWxsSWQsIGNvbnN0IEpTT046OkFycmF5KiBpbl9jb2x1bW5O
YW1lcywgY29uc3QgU3RyaW5nKiBpbl9ub3RlcywgY29uc3QgZG91YmxlKiBpbl90aW1lc3RhbXAs
IGNvbnN0IEpTT046Ok9iamVjdCogaW5fdmFsdWVzLCBjb25zdCBKU09OOjpWYWx1ZSogaW5fcGF5
bG9hZCwgY29uc3QgaW50KiBpbl9kYXRhYmFzZUlkLCBjb25zdCBKU09OOjpPYmplY3QqIGluX3Nx
bEVycm9yLCBjb25zdCBTdHJpbmcqIGluX3NjcmVlbkNvbG9yLCBjb25zdCBKU09OOjpBcnJheSog
aW5fYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcqIGluX3ByaW50Q29sb3IpID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgY2FsbElkLCBj
b25zdCBKU09OOjpBcnJheSYgaW5fY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgaW5fbm90ZXMs
IGRvdWJsZSBpbl90aW1lc3RhbXAsIGNvbnN0IEpTT046Ok9iamVjdCYgaW5fdmFsdWVzLCBKU09O
OjpWYWx1ZSBpbl9wYXlsb2FkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgSlNPTjo6T2JqZWN0
JiBpbl9zcWxFcnJvciwgY29uc3QgU3RyaW5nJiBpbl9zY3JlZW5Db2xvciwgY29uc3QgSlNPTjo6
QXJyYXkmIGluX2FsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nJiBpbl9wcmludENvbG9yKSA9
IDA7CisgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMobG9uZyBw
cm90b2NvbF9jYWxsSWQsIFJlZlB0cjxKU09OOjpBcnJheT4mJiBvcHRfY29sdW1uTmFtZXMsIGNv
bnN0IFN0cmluZyYgb3B0X25vdGVzLCBPcHRpb25hbDxkb3VibGU+JiYgb3B0X3RpbWVzdGFtcCwg
UmVmUHRyPEpTT046Ok9iamVjdD4mJiBvcHRfdmFsdWVzLCBSZWZQdHI8SlNPTjo6VmFsdWU+JiYg
b3B0X3BheWxvYWQsIE9wdGlvbmFsPGludD4mJiBvcHRfZGF0YWJhc2VJZCwgUmVmUHRyPEpTT046
Ok9iamVjdD4mJiBvcHRfc3FsRXJyb3IsIGNvbnN0IFN0cmluZyYgb3B0X3NjcmVlbkNvbG9yLCBS
ZWZQdHI8SlNPTjo6QXJyYXk+JiYgb3B0X2FsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nJiBv
cHRfcHJpbnRDb2xvcikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlTm9PcHRpb25hbFBh
cmFtZXRlcnMobG9uZyBwcm90b2NvbF9jYWxsSWQsIFJlZjxKU09OOjpBcnJheT4mJiBjb2x1bW5O
YW1lcywgY29uc3QgU3RyaW5nJiBub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgUmVmPEpTT046Ok9i
amVjdD4mJiB2YWx1ZXMsIFJlZjxKU09OOjpWYWx1ZT4mJiBwYXlsb2FkLCBpbnQgZGF0YWJhc2VJ
ZCwgUmVmPEpTT046Ok9iamVjdD4mJiBzcWxFcnJvciwgY29uc3QgU3RyaW5nJiBzY3JlZW5Db2xv
ciwgUmVmPEpTT046OkFycmF5PiYmIGFsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nJiBwcmlu
dENvbG9yKSA9IDA7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKQEAgLTEzMSwxMSAr
MTMxLDE0IEBAIHB1YmxpYzoKIAogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2lu
Y2x1ZGUgPHR1cGxlPgorI2luY2x1ZGUgPHd0Zi9FeHBlY3RlZC5oPgorI2luY2x1ZGUgPHd0Zi9P
cHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKIAotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKIAogI2lmIEVOQUJM
RShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogY2xhc3MgQWx0ZXJuYXRlRGF0YWJh
c2VCYWNrZW5kRGlzcGF0Y2hlcjsKQEAgLTE0MywxNSArMTQ2LDggQEAgY2xhc3MgQWx0ZXJuYXRl
RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjsKIAogY2xhc3MgRGF0YWJhc2VCYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXIgewogcHVibGljOgotICAgIC8vIE5hbWVkIGFmdGVyIHBhcmFtZXRlciAncHJp
bnRDb2xvcicgd2hpbGUgZ2VuZXJhdGluZyBjb21tYW5kL2V2ZW50IGV4ZWN1dGVBbGxPcHRpb25h
bFBhcmFtZXRlcnMuCi0gICAgZW51bSBjbGFzcyBQcmludENvbG9yIHsKLSAgICAgICAgQ3lhbiA9
IDMsCi0gICAgICAgIE1hZ2VudGEgPSA0LAotICAgICAgICBZZWxsb3cgPSA1LAotICAgICAgICBC
bGFjayA9IDYsCi0gICAgfTsgLy8gZW51bSBjbGFzcyBQcmludENvbG9yCi0gICAgdmlydHVhbCB2
b2lkIGV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMoRXJyb3JTdHJpbmcmLCBjb25zdCBKU09O
OjpBcnJheSogb3B0X2luX2NvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcqIG9wdF9pbl9ub3Rlcywg
Y29uc3QgZG91YmxlKiBvcHRfaW5fdGltZXN0YW1wLCBjb25zdCBKU09OOjpPYmplY3QqIG9wdF9p
bl92YWx1ZXMsIGNvbnN0IEpTT046OlZhbHVlKiBvcHRfaW5fcGF5bG9hZCwgY29uc3QgaW50KiBv
cHRfaW5fZGF0YWJhc2VJZCwgY29uc3QgSlNPTjo6T2JqZWN0KiBvcHRfaW5fc3FsRXJyb3IsIGNv
bnN0IFN0cmluZyogb3B0X2luX3NjcmVlbkNvbG9yLCBjb25zdCBKU09OOjpBcnJheSogb3B0X2lu
X2FsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nKiBvcHRfaW5fcHJpbnRDb2xvciwgUmVmUHRy
PEpTT046OkFycmF5T2Y8U3RyaW5nPj4mIG9wdF9vdXRfY29sdW1uTmFtZXMsIE9wdGlvbmFsPFN0
cmluZz4mIG9wdF9vdXRfbm90ZXMsIE9wdGlvbmFsPGRvdWJsZT4mIG9wdF9vdXRfdGltZXN0YW1w
LCBPcHRpb25hbDxKU09OOjpPYmplY3Q+JiBvcHRfb3V0X3ZhbHVlcywgT3B0aW9uYWw8SlNPTjo6
VmFsdWU+JiBvcHRfb3V0X3BheWxvYWQsIE9wdGlvbmFsPGludD4mIG9wdF9vdXRfZGF0YWJhc2VJ
ZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4mIG9wdF9vdXRf
c3FsRXJyb3IsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzKiBv
cHRfb3V0X3NjcmVlbkNvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6
OkNvbG9yTGlzdD4mIG9wdF9vdXRfYWx0ZXJuYXRlQ29sb3JzLCBEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVySGFuZGxlcjo6UHJpbnRDb2xvciogb3B0X291dF9wcmludENvbG9yKSA9IDA7Ci0gICAg
dmlydHVhbCB2b2lkIGV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhFcnJvclN0cmluZyYsIGNv
bnN0IEpTT046OkFycmF5JiBpbl9jb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBpbl9ub3Rlcywg
ZG91YmxlIGluX3RpbWVzdGFtcCwgY29uc3QgSlNPTjo6T2JqZWN0JiBpbl92YWx1ZXMsIEpTT046
OlZhbHVlIGluX3BheWxvYWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBKU09OOjpPYmplY3Qm
IGluX3NxbEVycm9yLCBjb25zdCBTdHJpbmcmIGluX3NjcmVlbkNvbG9yLCBjb25zdCBKU09OOjpB
cnJheSYgaW5fYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcmIGluX3ByaW50Q29sb3IsIFJl
ZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+JiBvdXRfY29sdW1uTmFtZXMsIFN0cmluZyogb3V0
X25vdGVzLCBkb3VibGUqIG91dF90aW1lc3RhbXAsIEpTT046Ok9iamVjdCogb3V0X3ZhbHVlcywg
SlNPTjo6VmFsdWUqIG91dF9wYXlsb2FkLCBpbnQqIG91dF9kYXRhYmFzZUlkLCBSZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiYgb3V0X3NxbEVycm9yLCBJbnNwZWN0
b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyogb3V0X3NjcmVlbkNvbG9yLCBS
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4mIG91dF9hbHRl
cm5hdGVDb2xvcnMsIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQcmludENvbG9y
KiBvdXRfcHJpbnRDb2xvcikgPSAwOworICAgIHZpcnR1YWwgUHJvdG9jb2w6OkVycm9yU3RyaW5n
T3I8c3RkOjp0dXBsZTxSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiAvKiBvcHRfY29sdW1u
TmFtZXMgKi8sIFN0cmluZyAvKiBvcHRfbm90ZXMgKi8sIE9wdGlvbmFsPGRvdWJsZT4gLyogb3B0
X3RpbWVzdGFtcCAqLywgUmVmUHRyPEpTT046Ok9iamVjdD4gLyogb3B0X3ZhbHVlcyAqLywgUmVm
UHRyPEpTT046OlZhbHVlPiAvKiBvcHRfcGF5bG9hZCAqLywgT3B0aW9uYWw8aW50PiAvKiBvcHRf
ZGF0YWJhc2VJZCAqLywgUmVmUHRyPFByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IC8qIG9wdF9z
cWxFcnJvciAqLywgT3B0aW9uYWw8UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPiAv
KiBvcHRfc2NyZWVuQ29sb3IgKi8sIFJlZlB0cjxQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlz
dD4gLyogb3B0X2FsdGVybmF0ZUNvbG9ycyAqLywgU3RyaW5nIC8qIG9wdF9wcmludENvbG9yICov
Pj4gZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhSZWZQdHI8SlNPTjo6QXJyYXk+JiYgb3B0
X2NvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIG9wdF9ub3RlcywgT3B0aW9uYWw8ZG91YmxlPiYm
IG9wdF90aW1lc3RhbXAsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgb3B0X3ZhbHVlcywgUmVmUHRy
PEpTT046OlZhbHVlPiYmIG9wdF9wYXlsb2FkLCBPcHRpb25hbDxpbnQ+JiYgb3B0X2RhdGFiYXNl
SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgb3B0X3NxbEVycm9yLCBPcHRpb25hbDxQcm90b2Nv
bDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+JiYgb3B0X3NjcmVlbkNvbG9yLCBSZWZQdHI8SlNP
Tjo6QXJyYXk+JiYgb3B0X2FsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nJiBvcHRfcHJpbnRD
b2xvcikgPSAwOworICAgIHZpcnR1YWwgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8c3RkOjp0dXBs
ZTxSZWY8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiAvKiBjb2x1bW5OYW1lcyAqLywgU3RyaW5nIC8q
IG5vdGVzICovLCBkb3VibGUgLyogdGltZXN0YW1wICovLCBSZWY8SlNPTjo6T2JqZWN0PiAvKiB2
YWx1ZXMgKi8sIFJlZjxKU09OOjpWYWx1ZT4gLyogcGF5bG9hZCAqLywgaW50IC8qIGRhdGFiYXNl
SWQgKi8sIFJlZjxQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiAvKiBzcWxFcnJvciAqLywgUHJv
dG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzIC8qIHNjcmVlbkNvbG9yICovLCBSZWY8UHJv
dG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+IC8qIGFsdGVybmF0ZUNvbG9ycyAqLywgU3RyaW5n
IC8qIHByaW50Q29sb3IgKi8+PiBleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMoUmVmPEpTT046
OkFycmF5PiYmIGNvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIG5vdGVzLCBkb3VibGUgdGltZXN0
YW1wLCBSZWY8SlNPTjo6T2JqZWN0PiYmIHZhbHVlcywgUmVmPEpTT046OlZhbHVlPiYmIHBheWxv
YWQsIGludCBkYXRhYmFzZUlkLCBSZWY8SlNPTjo6T2JqZWN0PiYmIHNxbEVycm9yLCBQcm90b2Nv
bDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMgc2NyZWVuQ29sb3IsIFJlZjxKU09OOjpBcnJheT4m
JiBhbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyYgcHJpbnRDb2xvcikgPSAwOwogcHJvdGVj
dGVkOgogICAgIHZpcnR1YWwgfkRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCk7CiB9
OwpAQCAtMTU5LDEwICsxNTUsMTAgQEAgcHJvdGVjdGVkOgogY2xhc3MgRGF0YWJhc2VCYWNrZW5k
RGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7
CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyPiBjcmVh
dGUoQmFja2VuZERpc3BhdGNoZXImLCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciop
OwotICAgIHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9k
LCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpIGZpbmFsOworICAgIHZvaWQgZGlzcGF0Y2go
bG9uZyBwcm90b2NvbF9jYWxsSWQsIGNvbnN0IFN0cmluZyYgcHJvdG9jb2xfbWV0aG9kLCBSZWY8
SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX21lc3NhZ2UpIGZpbmFsOwogcHJpdmF0ZToKLSAgICB2
b2lkIGV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxK
U09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7Ci0gICAgdm9pZCBleGVjdXRlTm9PcHRpb25hbFBh
cmFtZXRlcnMobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVy
cyk7CisgICAgdm9pZCBleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcHJvdG9jbF9j
YWxsSWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfcGFyYW1ldGVycyk7CisgICAg
dm9pZCBleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMobG9uZyBwcm90b2NsX2NhbGxJZCwgUmVm
UHRyPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9wYXJhbWV0ZXJzKTsKICNpZiBFTkFCTEUoSU5T
UEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIHB1YmxpYzoKICAgICB2b2lkIHNldEFsdGVy
bmF0ZURpc3BhdGNoZXIoQWx0ZXJuYXRlRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciogYWx0ZXJu
YXRlRGlzcGF0Y2hlcikgeyBtX2FsdGVybmF0ZURpc3BhdGNoZXIgPSBhbHRlcm5hdGVEaXNwYXRj
aGVyOyB9CkBAIC0yMTEsOSArMjA3LDcgQEAgcHJpdmF0ZToKICNpbmNsdWRlICJUZXN0QmFja2Vu
ZERpc3BhdGNoZXJzLmgiCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9u
dGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CiAjaW5jbHVkZSA8d3Rm
L05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiAjaWYg
RU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAjaW5jbHVkZSAiVGVzdEFs
dGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgpAQCAtMjM1LDQ3ICsyMjksMzYgQEAgRGF0YWJh
c2VCYWNrZW5kRGlzcGF0Y2hlcjo6RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlz
cGF0Y2hlciYgYmFja2VuZEQKICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3Bh
dGNoZXJGb3JEb21haW4oIkRhdGFiYXNlIl9zLCB0aGlzKTsKIH0KIAotdm9pZCBEYXRhYmFzZUJh
Y2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBt
ZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkKK3ZvaWQgRGF0YWJhc2VCYWNrZW5k
RGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyBwcm90b2NvbF9jYWxsSWQsIGNvbnN0IFN0cmluZyYg
cHJvdG9jb2xfbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX21lc3NhZ2UpCiB7
CiAgICAgUmVmPERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOwogCi0g
ICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVyczsKLSAgICBtZXNzYWdlLT5nZXRPYmpl
Y3QoInBhcmFtcyJfcywgcGFyYW1ldGVycyk7CisgICAgYXV0byBwcm90b2NvbF9wYXJhbWV0ZXJz
ID0gcHJvdG9jb2xfbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3MpOwogCi0gICAgaWYgKG1l
dGhvZCA9PSAiZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyIpIHsKLSAgICAgICAgZXhlY3V0
ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykpOwor
ICAgIGlmIChwcm90b2NvbF9tZXRob2QgPT0gImV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMi
KSB7CisgICAgICAgIGV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMocHJvdG9jb2xfY2FsbElk
LCBXVEZNb3ZlKHByb3RvY29sX3BhcmFtZXRlcnMpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
LSAgICBpZiAobWV0aG9kID09ICJleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMiKSB7Ci0gICAg
ICAgIGV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1l
dGVycykpOworICAgIGlmIChwcm90b2NvbF9tZXRob2QgPT0gImV4ZWN1dGVOb09wdGlvbmFsUGFy
YW1ldGVycyIpIHsKKyAgICAgICAgZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKHByb3RvY29s
X2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9wYXJhbWV0ZXJzKSk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJh
Y2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEYXRhYmFzZS4iICsgbWV0aG9kICsg
Iicgd2FzIG5vdCBmb3VuZCIpOworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3Rv
Y29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RhdGFiYXNlLiIg
KyBwcm90b2NvbF9tZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7CiB9CiAKLXZvaWQgRGF0YWJh
c2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhsb25nIHJl
cXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKQordm9pZCBEYXRhYmFz
ZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcHJv
dG9jb2xfY2FsbElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX3BhcmFtZXRlcnMp
CiB7Ci0gICAgYm9vbCBvcHRfaW5fY29sdW1uTmFtZXNfdmFsdWVGb3VuZCA9IGZhbHNlOwotICAg
IFJlZlB0cjxKU09OOjpBcnJheT4gb3B0X2luX2NvbHVtbk5hbWVzID0gbV9iYWNrZW5kRGlzcGF0
Y2hlci0+Z2V0QXJyYXkocGFyYW1ldGVycy5nZXQoKSwgImNvbHVtbk5hbWVzIl9zLCAmb3B0X2lu
X2NvbHVtbk5hbWVzX3ZhbHVlRm91bmQpOwotICAgIGJvb2wgb3B0X2luX25vdGVzX3ZhbHVlRm91
bmQgPSBmYWxzZTsKLSAgICBTdHJpbmcgb3B0X2luX25vdGVzID0gbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+Z2V0U3RyaW5nKHBhcmFtZXRlcnMuZ2V0KCksICJub3RlcyJfcywgJm9wdF9pbl9ub3Rlc192
YWx1ZUZvdW5kKTsKLSAgICBib29sIG9wdF9pbl90aW1lc3RhbXBfdmFsdWVGb3VuZCA9IGZhbHNl
OwotICAgIGRvdWJsZSBvcHRfaW5fdGltZXN0YW1wID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0
RG91YmxlKHBhcmFtZXRlcnMuZ2V0KCksICJ0aW1lc3RhbXAiX3MsICZvcHRfaW5fdGltZXN0YW1w
X3ZhbHVlRm91bmQpOwotICAgIGJvb2wgb3B0X2luX3ZhbHVlc192YWx1ZUZvdW5kID0gZmFsc2U7
Ci0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gb3B0X2luX3ZhbHVlcyA9IG1fYmFja2VuZERpc3Bh
dGNoZXItPmdldE9iamVjdChwYXJhbWV0ZXJzLmdldCgpLCAidmFsdWVzIl9zLCAmb3B0X2luX3Zh
bHVlc192YWx1ZUZvdW5kKTsKLSAgICBib29sIG9wdF9pbl9wYXlsb2FkX3ZhbHVlRm91bmQgPSBm
YWxzZTsKLSAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IG9wdF9pbl9wYXlsb2FkID0gbV9iYWNrZW5k
RGlzcGF0Y2hlci0+Z2V0VmFsdWUocGFyYW1ldGVycy5nZXQoKSwgInBheWxvYWQiX3MsICZvcHRf
aW5fcGF5bG9hZF92YWx1ZUZvdW5kKTsKLSAgICBib29sIG9wdF9pbl9kYXRhYmFzZUlkX3ZhbHVl
Rm91bmQgPSBmYWxzZTsKLSAgICBpbnQgb3B0X2luX2RhdGFiYXNlSWQgPSBtX2JhY2tlbmREaXNw
YXRjaGVyLT5nZXRJbnRlZ2VyKHBhcmFtZXRlcnMuZ2V0KCksICJkYXRhYmFzZUlkIl9zLCAmb3B0
X2luX2RhdGFiYXNlSWRfdmFsdWVGb3VuZCk7Ci0gICAgYm9vbCBvcHRfaW5fc3FsRXJyb3JfdmFs
dWVGb3VuZCA9IGZhbHNlOwotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG9wdF9pbl9zcWxFcnJv
ciA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldE9iamVjdChwYXJhbWV0ZXJzLmdldCgpLCAic3Fs
RXJyb3IiX3MsICZvcHRfaW5fc3FsRXJyb3JfdmFsdWVGb3VuZCk7Ci0gICAgYm9vbCBvcHRfaW5f
c2NyZWVuQ29sb3JfdmFsdWVGb3VuZCA9IGZhbHNlOwotICAgIFN0cmluZyBvcHRfaW5fc2NyZWVu
Q29sb3IgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRTdHJpbmcocGFyYW1ldGVycy5nZXQoKSwg
InNjcmVlbkNvbG9yIl9zLCAmb3B0X2luX3NjcmVlbkNvbG9yX3ZhbHVlRm91bmQpOwotICAgIGJv
b2wgb3B0X2luX2FsdGVybmF0ZUNvbG9yc192YWx1ZUZvdW5kID0gZmFsc2U7Ci0gICAgUmVmUHRy
PEpTT046OkFycmF5PiBvcHRfaW5fYWx0ZXJuYXRlQ29sb3JzID0gbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+Z2V0QXJyYXkocGFyYW1ldGVycy5nZXQoKSwgImFsdGVybmF0ZUNvbG9ycyJfcywgJm9wdF9p
bl9hbHRlcm5hdGVDb2xvcnNfdmFsdWVGb3VuZCk7Ci0gICAgYm9vbCBvcHRfaW5fcHJpbnRDb2xv
cl92YWx1ZUZvdW5kID0gZmFsc2U7Ci0gICAgU3RyaW5nIG9wdF9pbl9wcmludENvbG9yID0gbV9i
YWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3RyaW5nKHBhcmFtZXRlcnMuZ2V0KCksICJwcmludENvbG9y
Il9zLCAmb3B0X2luX3ByaW50Q29sb3JfdmFsdWVGb3VuZCk7CisgICAgYXV0byBpbl9vcHRfY29s
dW1uTmFtZXMgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRBcnJheShwcm90b2NvbF9wYXJhbWV0
ZXJzLmdldCgpLCAiY29sdW1uTmFtZXMiX3MsIGZhbHNlKTsKKyAgICBhdXRvIGluX29wdF9ub3Rl
cyA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFN0cmluZyhwcm90b2NvbF9wYXJhbWV0ZXJzLmdl
dCgpLCAibm90ZXMiX3MsIGZhbHNlKTsKKyAgICBhdXRvIGluX29wdF90aW1lc3RhbXAgPSBtX2Jh
Y2tlbmREaXNwYXRjaGVyLT5nZXREb3VibGUocHJvdG9jb2xfcGFyYW1ldGVycy5nZXQoKSwgInRp
bWVzdGFtcCJfcywgZmFsc2UpOworICAgIGF1dG8gaW5fb3B0X3ZhbHVlcyA9IG1fYmFja2VuZERp
c3BhdGNoZXItPmdldE9iamVjdChwcm90b2NvbF9wYXJhbWV0ZXJzLmdldCgpLCAidmFsdWVzIl9z
LCBmYWxzZSk7CisgICAgYXV0byBpbl9vcHRfcGF5bG9hZCA9IG1fYmFja2VuZERpc3BhdGNoZXIt
PmdldFZhbHVlKHByb3RvY29sX3BhcmFtZXRlcnMuZ2V0KCksICJwYXlsb2FkIl9zLCBmYWxzZSk7
CisgICAgYXV0byBpbl9vcHRfZGF0YWJhc2VJZCA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldElu
dGVnZXIocHJvdG9jb2xfcGFyYW1ldGVycy5nZXQoKSwgImRhdGFiYXNlSWQiX3MsIGZhbHNlKTsK
KyAgICBhdXRvIGluX29wdF9zcWxFcnJvciA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldE9iamVj
dChwcm90b2NvbF9wYXJhbWV0ZXJzLmdldCgpLCAic3FsRXJyb3IiX3MsIGZhbHNlKTsKKyAgICBh
dXRvIGluX29wdF9zY3JlZW5Db2xvcl9qc29uID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3Ry
aW5nKHByb3RvY29sX3BhcmFtZXRlcnMuZ2V0KCksICJzY3JlZW5Db2xvciJfcywgZmFsc2UpOwor
ICAgIGF1dG8gaW5fb3B0X2FsdGVybmF0ZUNvbG9ycyA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdl
dEFycmF5KHByb3RvY29sX3BhcmFtZXRlcnMuZ2V0KCksICJhbHRlcm5hdGVDb2xvcnMiX3MsIGZh
bHNlKTsKKyAgICBhdXRvIGluX29wdF9wcmludENvbG9yID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+
Z2V0U3RyaW5nKHByb3RvY29sX3BhcmFtZXRlcnMuZ2V0KCksICJwcmludENvbG9yIl9zLCBmYWxz
ZSk7CiAgICAgaWYgKG1fYmFja2VuZERpc3BhdGNoZXItPmhhc1Byb3RvY29sRXJyb3JzKCkpIHsK
ICAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5k
RGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFtcywgIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnRGF0
YWJhc2UuZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycycgY2FuJ3QgYmUgcHJvY2Vzc2VkIl9z
KTsKICAgICAgICAgcmV0dXJuOwpAQCAtMjgzLDY1ICsyNjYsNTggQEAgdm9pZCBEYXRhYmFzZUJh
Y2tlbmREaXNwYXRjaGVyOjpleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcmVxdWVz
dElkLCBSZWYKIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQog
ICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVEaXNw
YXRjaGVyLT5leGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKHJlcXVlc3RJZCwgb3B0X2luX2Nv
bHVtbk5hbWVzX3ZhbHVlRm91bmQgPyBvcHRfaW5fY29sdW1uTmFtZXMuZ2V0KCkgOiBudWxscHRy
LCBvcHRfaW5fbm90ZXNfdmFsdWVGb3VuZCA/ICZvcHRfaW5fbm90ZXMgOiBudWxscHRyLCBvcHRf
aW5fdGltZXN0YW1wX3ZhbHVlRm91bmQgPyAmb3B0X2luX3RpbWVzdGFtcCA6IG51bGxwdHIsIG9w
dF9pbl92YWx1ZXNfdmFsdWVGb3VuZCA/IG9wdF9pbl92YWx1ZXMuZ2V0KCkgOiBudWxscHRyLCBv
cHRfaW5fcGF5bG9hZF92YWx1ZUZvdW5kID8gb3B0X2luX3BheWxvYWQuZ2V0KCkgOiBudWxscHRy
LCBvcHRfaW5fZGF0YWJhc2VJZF92YWx1ZUZvdW5kID8gJm9wdF9pbl9kYXRhYmFzZUlkIDogbnVs
bHB0ciwgb3B0X2luX3NxbEVycm9yX3ZhbHVlRm91bmQgPyBvcHRfaW5fc3FsRXJyb3IuZ2V0KCkg
OiBudWxscHRyLCBvcHRfaW5fc2NyZWVuQ29sb3JfdmFsdWVGb3VuZCA/ICZvcHRfaW5fc2NyZWVu
Q29sb3IgOiBudWxscHRyLCBvcHRfaW5fYWx0ZXJuYXRlQ29sb3JzX3ZhbHVlRm91bmQgPyBvcHRf
aW5fYWx0ZXJuYXRlQ29sb3JzLmdldCgpIDogbnVsbHB0ciwgb3B0X2luX3ByaW50Q29sb3JfdmFs
dWVGb3VuZCA/ICZvcHRfaW5fcHJpbnRDb2xvciA6IG51bGxwdHIpOworICAgICAgICBtX2FsdGVy
bmF0ZURpc3BhdGNoZXItPmV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMocHJvdG9jb2xfY2Fs
bElkLCBXVEZNb3ZlKGluX29wdF9jb2x1bW5OYW1lcyksIGluX29wdF9ub3RlcywgV1RGTW92ZShp
bl9vcHRfdGltZXN0YW1wKSwgV1RGTW92ZShpbl9vcHRfdmFsdWVzKSwgV1RGTW92ZShpbl9vcHRf
cGF5bG9hZCksIFdURk1vdmUoaW5fb3B0X2RhdGFiYXNlSWQpLCBXVEZNb3ZlKGluX29wdF9zcWxF
cnJvciksIGluX29wdF9zY3JlZW5Db2xvcl9qc29uLCBXVEZNb3ZlKGluX29wdF9hbHRlcm5hdGVD
b2xvcnMpLCBpbl9vcHRfcHJpbnRDb2xvcik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5k
aWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAKLSAgICBFcnJv
clN0cmluZyBlcnJvcjsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmpl
Y3Q6OmNyZWF0ZSgpOwotICAgIFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+IG91dF9jb2x1
bW5OYW1lczsKLSAgICBPcHRpb25hbDxTdHJpbmc+IG91dF9ub3RlczsKLSAgICBPcHRpb25hbDxk
b3VibGU+IG91dF90aW1lc3RhbXA7Ci0gICAgT3B0aW9uYWw8SlNPTjo6T2JqZWN0PiBvdXRfdmFs
dWVzOwotICAgIE9wdGlvbmFsPEpTT046OlZhbHVlPiBvdXRfcGF5bG9hZDsKLSAgICBPcHRpb25h
bDxpbnQ+IG91dF9kYXRhYmFzZUlkOwotICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpE
YXRhYmFzZTo6RXJyb3I+IG91dF9zcWxFcnJvcjsKLSAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpE
YXRhYmFzZTo6UHJpbWFyeUNvbG9ycyBvdXRfc2NyZWVuQ29sb3I7Ci0gICAgUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+IG91dF9hbHRlcm5hdGVDb2xvcnM7
Ci0gICAgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3Igb3V0X3By
aW50Q29sb3I7Ci0gICAgbV9hZ2VudC0+ZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhlcnJv
ciwgb3B0X2luX2NvbHVtbk5hbWVzX3ZhbHVlRm91bmQgPyBvcHRfaW5fY29sdW1uTmFtZXMuZ2V0
KCkgOiBudWxscHRyLCBvcHRfaW5fbm90ZXNfdmFsdWVGb3VuZCA/ICZvcHRfaW5fbm90ZXMgOiBu
dWxscHRyLCBvcHRfaW5fdGltZXN0YW1wX3ZhbHVlRm91bmQgPyAmb3B0X2luX3RpbWVzdGFtcCA6
IG51bGxwdHIsIG9wdF9pbl92YWx1ZXNfdmFsdWVGb3VuZCA/IG9wdF9pbl92YWx1ZXMuZ2V0KCkg
OiBudWxscHRyLCBvcHRfaW5fcGF5bG9hZF92YWx1ZUZvdW5kID8gb3B0X2luX3BheWxvYWQuZ2V0
KCkgOiBudWxscHRyLCBvcHRfaW5fZGF0YWJhc2VJZF92YWx1ZUZvdW5kID8gJm9wdF9pbl9kYXRh
YmFzZUlkIDogbnVsbHB0ciwgb3B0X2luX3NxbEVycm9yX3ZhbHVlRm91bmQgPyBvcHRfaW5fc3Fs
RXJyb3IuZ2V0KCkgOiBudWxscHRyLCBvcHRfaW5fc2NyZWVuQ29sb3JfdmFsdWVGb3VuZCA/ICZv
cHRfaW5fc2NyZWVuQ29sb3IgOiBudWxscHRyLCBvcHRfaW5fYWx0ZXJuYXRlQ29sb3JzX3ZhbHVl
Rm91bmQgPyBvcHRfaW5fYWx0ZXJuYXRlQ29sb3JzLmdldCgpIDogbnVsbHB0ciwgb3B0X2luX3By
aW50Q29sb3JfdmFsdWVGb3VuZCA/ICZvcHRfaW5fcHJpbnRDb2xvciA6IG51bGxwdHIsIG91dF9j
b2x1bW5OYW1lcywgb3V0X25vdGVzLCBvdXRfdGltZXN0YW1wLCBvdXRfdmFsdWVzLCBvdXRfcGF5
bG9hZCwgb3V0X2RhdGFiYXNlSWQsIG91dF9zcWxFcnJvciwgb3V0X3NjcmVlbkNvbG9yLCBvdXRf
YWx0ZXJuYXRlQ29sb3JzLCBvdXRfcHJpbnRDb2xvcik7CisgICAgYXV0byBpbl9vcHRfc2NyZWVu
Q29sb3IgPSBQcm90b2NvbDo6VGVzdEhlbHBlcnM6OnBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxQ
cm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+KGluX29wdF9zY3JlZW5Db2xvcl9qc29u
KTsKIAotICAgIGlmICghZXJyb3IubGVuZ3RoKCkpIHsKLSAgICAgICAgaWYgKG91dF9jb2x1bW5O
YW1lcykKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCBvdXRf
Y29sdW1uTmFtZXMpOwotICAgICAgICBpZiAob3V0X25vdGVzLmhhc1ZhbHVlKCkpCi0gICAgICAg
ICAgICByZXN1bHQtPnNldFN0cmluZygibm90ZXMiX3MsICpvdXRfbm90ZXMpOwotICAgICAgICBp
ZiAob3V0X3RpbWVzdGFtcC5oYXNWYWx1ZSgpKQotICAgICAgICAgICAgcmVzdWx0LT5zZXREb3Vi
bGUoInRpbWVzdGFtcCJfcywgKm91dF90aW1lc3RhbXApOwotICAgICAgICBpZiAob3V0X3ZhbHVl
cy5oYXNWYWx1ZSgpKQotICAgICAgICAgICAgcmVzdWx0LT5zZXRPYmplY3QoInZhbHVlcyJfcywg
Km91dF92YWx1ZXMpOwotICAgICAgICBpZiAob3V0X3BheWxvYWQuaGFzVmFsdWUoKSkKLSAgICAg
ICAgICAgIHJlc3VsdC0+c2V0VmFsdWUoInBheWxvYWQiX3MsICpvdXRfcGF5bG9hZCk7Ci0gICAg
ICAgIGlmIChvdXRfZGF0YWJhc2VJZC5oYXNWYWx1ZSgpKQotICAgICAgICAgICAgcmVzdWx0LT5z
ZXRJbnRlZ2VyKCJkYXRhYmFzZUlkIl9zLCAqb3V0X2RhdGFiYXNlSWQpOwotICAgICAgICBpZiAo
b3V0X3NxbEVycm9yKQotICAgICAgICAgICAgcmVzdWx0LT5zZXRPYmplY3QoInNxbEVycm9yIl9z
LCBvdXRfc3FsRXJyb3IpOwotICAgICAgICBpZiAob3V0X3NjcmVlbkNvbG9yLmhhc1ZhbHVlKCkp
Ci0gICAgICAgICAgICByZXN1bHQtPnNldFN0cmluZygic2NyZWVuQ29sb3IiX3MsICpvdXRfc2Ny
ZWVuQ29sb3IpOwotICAgICAgICBpZiAob3V0X2FsdGVybmF0ZUNvbG9ycykKLSAgICAgICAgICAg
IHJlc3VsdC0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywgb3V0X2FsdGVybmF0ZUNvbG9y
cyk7Ci0gICAgICAgIGlmIChvdXRfcHJpbnRDb2xvci5oYXNWYWx1ZSgpKQotICAgICAgICAgICAg
cmVzdWx0LT5zZXRTdHJpbmcoInByaW50Q29sb3IiX3MsICpvdXRfcHJpbnRDb2xvcik7CisgICAg
YXV0byByZXN1bHQgPSBtX2FnZW50LT5leGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKFdURk1v
dmUoaW5fb3B0X2NvbHVtbk5hbWVzKSwgaW5fb3B0X25vdGVzLCBXVEZNb3ZlKGluX29wdF90aW1l
c3RhbXApLCBXVEZNb3ZlKGluX29wdF92YWx1ZXMpLCBXVEZNb3ZlKGluX29wdF9wYXlsb2FkKSwg
V1RGTW92ZShpbl9vcHRfZGF0YWJhc2VJZCksIFdURk1vdmUoaW5fb3B0X3NxbEVycm9yKSwgV1RG
TW92ZShpbl9vcHRfc2NyZWVuQ29sb3IpLCBXVEZNb3ZlKGluX29wdF9hbHRlcm5hdGVDb2xvcnMp
LCBpbl9vcHRfcHJpbnRDb2xvcik7CisgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAgICAgQVNTRVJU
KCFyZXN1bHQuZXJyb3IoKS5pc0VtcHR5KCkpOworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVy
LT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgcmVz
dWx0LmVycm9yKCkpOworICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmICghZXJyb3IubGVu
Z3RoKCkpCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0
SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2UpOwotICAgIGVsc2UKLSAgICAgICAgbV9iYWNrZW5k
RGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVy
RXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKKworICAgIGF1dG8gW291dF9vcHRfY29sdW1uTmFtZXMs
IG91dF9vcHRfbm90ZXMsIG91dF9vcHRfdGltZXN0YW1wLCBvdXRfb3B0X3ZhbHVlcywgb3V0X29w
dF9wYXlsb2FkLCBvdXRfb3B0X2RhdGFiYXNlSWQsIG91dF9vcHRfc3FsRXJyb3IsIG91dF9vcHRf
c2NyZWVuQ29sb3IsIG91dF9vcHRfYWx0ZXJuYXRlQ29sb3JzLCBvdXRfb3B0X3ByaW50Q29sb3Jd
ID0gV1RGTW92ZShyZXN1bHQudmFsdWUoKSk7CisKKyAgICBhdXRvIHByb3RvY29sX2pzb25NZXNz
YWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBpZiAoISFvdXRfb3B0X2NvbHVtbk5h
bWVzKQorICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0QXJyYXkoImNvbHVtbk5hbWVz
Il9zLCBvdXRfb3B0X2NvbHVtbk5hbWVzLnJlbGVhc2VOb25OdWxsKCkpOworICAgIGlmICghIW91
dF9vcHRfbm90ZXMpCisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm5v
dGVzIl9zLCBvdXRfb3B0X25vdGVzKTsKKyAgICBpZiAoISFvdXRfb3B0X3RpbWVzdGFtcCkKKyAg
ICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCAqb3V0
X29wdF90aW1lc3RhbXApOworICAgIGlmICghIW91dF9vcHRfdmFsdWVzKQorICAgICAgICBwcm90
b2NvbF9qc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIG91dF9vcHRfdmFsdWVzLnJl
bGVhc2VOb25OdWxsKCkpOworICAgIGlmICghIW91dF9vcHRfcGF5bG9hZCkKKyAgICAgICAgcHJv
dG9jb2xfanNvbk1lc3NhZ2UtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCBvdXRfb3B0X3BheWxvYWQu
cmVsZWFzZU5vbk51bGwoKSk7CisgICAgaWYgKCEhb3V0X29wdF9kYXRhYmFzZUlkKQorICAgICAg
ICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0SW50ZWdlcigiZGF0YWJhc2VJZCJfcywgKm91dF9v
cHRfZGF0YWJhc2VJZCk7CisgICAgaWYgKCEhb3V0X29wdF9zcWxFcnJvcikKKyAgICAgICAgcHJv
dG9jb2xfanNvbk1lc3NhZ2UtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIG91dF9vcHRfc3FsRXJy
b3IucmVsZWFzZU5vbk51bGwoKSk7CisgICAgaWYgKCEhb3V0X29wdF9zY3JlZW5Db2xvcikKKyAg
ICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygic2NyZWVuQ29sb3IiX3MsIFBy
b3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUoKm91dF9vcHRfc2NyZWVu
Q29sb3IpKTsKKyAgICBpZiAoISFvdXRfb3B0X2FsdGVybmF0ZUNvbG9ycykKKyAgICAgICAgcHJv
dG9jb2xfanNvbk1lc3NhZ2UtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIG91dF9vcHRf
YWx0ZXJuYXRlQ29sb3JzLnJlbGVhc2VOb25OdWxsKCkpOworICAgIGlmICghIW91dF9vcHRfcHJp
bnRDb2xvcikKKyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygicHJpbnRD
b2xvciJfcywgb3V0X29wdF9wcmludENvbG9yKTsKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5z
ZW5kUmVzcG9uc2UocHJvdG9jb2xfY2FsbElkLCBXVEZNb3ZlKHByb3RvY29sX2pzb25NZXNzYWdl
KSwgZmFsc2UpOwogfQogCi12b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVO
b09wdGlvbmFsUGFyYW1ldGVycyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4m
JiBwYXJhbWV0ZXJzKQordm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlTm9P
cHRpb25hbFBhcmFtZXRlcnMobG9uZyBwcm90b2NvbF9jYWxsSWQsIFJlZlB0cjxKU09OOjpPYmpl
Y3Q+JiYgcHJvdG9jb2xfcGFyYW1ldGVycykKIHsKLSAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IGlu
X2NvbHVtbk5hbWVzID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0QXJyYXkocGFyYW1ldGVycy5n
ZXQoKSwgImNvbHVtbk5hbWVzIl9zLCBudWxscHRyKTsKLSAgICBTdHJpbmcgaW5fbm90ZXMgPSBt
X2JhY2tlbmREaXNwYXRjaGVyLT5nZXRTdHJpbmcocGFyYW1ldGVycy5nZXQoKSwgIm5vdGVzIl9z
LCBudWxscHRyKTsKLSAgICBkb3VibGUgaW5fdGltZXN0YW1wID0gbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+Z2V0RG91YmxlKHBhcmFtZXRlcnMuZ2V0KCksICJ0aW1lc3RhbXAiX3MsIG51bGxwdHIpOwot
ICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IGluX3ZhbHVlcyA9IG1fYmFja2VuZERpc3BhdGNoZXIt
PmdldE9iamVjdChwYXJhbWV0ZXJzLmdldCgpLCAidmFsdWVzIl9zLCBudWxscHRyKTsKLSAgICBS
ZWZQdHI8SlNPTjo6VmFsdWU+IGluX3BheWxvYWQgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRW
YWx1ZShwYXJhbWV0ZXJzLmdldCgpLCAicGF5bG9hZCJfcywgbnVsbHB0cik7Ci0gICAgaW50IGlu
X2RhdGFiYXNlSWQgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRJbnRlZ2VyKHBhcmFtZXRlcnMu
Z2V0KCksICJkYXRhYmFzZUlkIl9zLCBudWxscHRyKTsKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0
PiBpbl9zcWxFcnJvciA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldE9iamVjdChwYXJhbWV0ZXJz
LmdldCgpLCAic3FsRXJyb3IiX3MsIG51bGxwdHIpOwotICAgIFN0cmluZyBpbl9zY3JlZW5Db2xv
ciA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFN0cmluZyhwYXJhbWV0ZXJzLmdldCgpLCAic2Ny
ZWVuQ29sb3IiX3MsIG51bGxwdHIpOwotICAgIFJlZlB0cjxKU09OOjpBcnJheT4gaW5fYWx0ZXJu
YXRlQ29sb3JzID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0QXJyYXkocGFyYW1ldGVycy5nZXQo
KSwgImFsdGVybmF0ZUNvbG9ycyJfcywgbnVsbHB0cik7Ci0gICAgU3RyaW5nIGluX3ByaW50Q29s
b3IgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRTdHJpbmcocGFyYW1ldGVycy5nZXQoKSwgInBy
aW50Q29sb3IiX3MsIG51bGxwdHIpOworICAgIGF1dG8gaW5fY29sdW1uTmFtZXMgPSBtX2JhY2tl
bmREaXNwYXRjaGVyLT5nZXRBcnJheShwcm90b2NvbF9wYXJhbWV0ZXJzLmdldCgpLCAiY29sdW1u
TmFtZXMiX3MsIHRydWUpOworICAgIGF1dG8gaW5fbm90ZXMgPSBtX2JhY2tlbmREaXNwYXRjaGVy
LT5nZXRTdHJpbmcocHJvdG9jb2xfcGFyYW1ldGVycy5nZXQoKSwgIm5vdGVzIl9zLCB0cnVlKTsK
KyAgICBhdXRvIGluX3RpbWVzdGFtcCA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldERvdWJsZShw
cm90b2NvbF9wYXJhbWV0ZXJzLmdldCgpLCAidGltZXN0YW1wIl9zLCB0cnVlKTsKKyAgICBhdXRv
IGluX3ZhbHVlcyA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldE9iamVjdChwcm90b2NvbF9wYXJh
bWV0ZXJzLmdldCgpLCAidmFsdWVzIl9zLCB0cnVlKTsKKyAgICBhdXRvIGluX3BheWxvYWQgPSBt
X2JhY2tlbmREaXNwYXRjaGVyLT5nZXRWYWx1ZShwcm90b2NvbF9wYXJhbWV0ZXJzLmdldCgpLCAi
cGF5bG9hZCJfcywgdHJ1ZSk7CisgICAgYXV0byBpbl9kYXRhYmFzZUlkID0gbV9iYWNrZW5kRGlz
cGF0Y2hlci0+Z2V0SW50ZWdlcihwcm90b2NvbF9wYXJhbWV0ZXJzLmdldCgpLCAiZGF0YWJhc2VJ
ZCJfcywgdHJ1ZSk7CisgICAgYXV0byBpbl9zcWxFcnJvciA9IG1fYmFja2VuZERpc3BhdGNoZXIt
PmdldE9iamVjdChwcm90b2NvbF9wYXJhbWV0ZXJzLmdldCgpLCAic3FsRXJyb3IiX3MsIHRydWUp
OworICAgIGF1dG8gaW5fc2NyZWVuQ29sb3JfanNvbiA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdl
dFN0cmluZyhwcm90b2NvbF9wYXJhbWV0ZXJzLmdldCgpLCAic2NyZWVuQ29sb3IiX3MsIHRydWUp
OworICAgIGF1dG8gaW5fYWx0ZXJuYXRlQ29sb3JzID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0
QXJyYXkocHJvdG9jb2xfcGFyYW1ldGVycy5nZXQoKSwgImFsdGVybmF0ZUNvbG9ycyJfcywgdHJ1
ZSk7CisgICAgYXV0byBpbl9wcmludENvbG9yID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3Ry
aW5nKHByb3RvY29sX3BhcmFtZXRlcnMuZ2V0KCksICJwcmludENvbG9yIl9zLCB0cnVlKTsKICAg
ICBpZiAobV9iYWNrZW5kRGlzcGF0Y2hlci0+aGFzUHJvdG9jb2xFcnJvcnMoKSkgewogICAgICAg
ICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRj
aGVyOjpJbnZhbGlkUGFyYW1zLCAiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICdEYXRhYmFzZS5l
eGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMnIGNhbid0IGJlIHByb2Nlc3NlZCJfcyk7CiAgICAg
ICAgIHJldHVybjsKQEAgLTM0OSw0MSArMzI1LDM4IEBAIHZvaWQgRGF0YWJhc2VCYWNrZW5kRGlz
cGF0Y2hlcjo6ZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcmVxdWVzdElkLCBSZWZQ
CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKICAgICBpZiAo
bV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+
ZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKHJlcXVlc3RJZCwgKmluX2NvbHVtbk5hbWVzLCBp
bl9ub3RlcywgaW5fdGltZXN0YW1wLCAqaW5fdmFsdWVzLCAqaW5fcGF5bG9hZCwgaW5fZGF0YWJh
c2VJZCwgKmluX3NxbEVycm9yLCBpbl9zY3JlZW5Db2xvciwgKmluX2FsdGVybmF0ZUNvbG9ycywg
aW5fcHJpbnRDb2xvcik7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+ZXhlY3V0ZU5v
T3B0aW9uYWxQYXJhbWV0ZXJzKHByb3RvY29sX2NhbGxJZCwgaW5fY29sdW1uTmFtZXMucmVsZWFz
ZU5vbk51bGwoKSwgaW5fbm90ZXMsICppbl90aW1lc3RhbXAsIGluX3ZhbHVlcy5yZWxlYXNlTm9u
TnVsbCgpLCBpbl9wYXlsb2FkLnJlbGVhc2VOb25OdWxsKCksICppbl9kYXRhYmFzZUlkLCBpbl9z
cWxFcnJvci5yZWxlYXNlTm9uTnVsbCgpLCBpbl9zY3JlZW5Db2xvcl9qc29uLCBpbl9hbHRlcm5h
dGVDb2xvcnMucmVsZWFzZU5vbk51bGwoKSwgaW5fcHJpbnRDb2xvcik7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hF
UlMpCiAKLSAgICBFcnJvclN0cmluZyBlcnJvcjsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1
bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIFJlZlB0cjxKU09OOjpBcnJheU9mPFN0
cmluZz4+IG91dF9jb2x1bW5OYW1lczsKLSAgICBTdHJpbmcgb3V0X25vdGVzOwotICAgIGRvdWJs
ZSBvdXRfdGltZXN0YW1wOwotICAgIEpTT046Ok9iamVjdCBvdXRfdmFsdWVzOwotICAgIEpTT046
OlZhbHVlIG91dF9wYXlsb2FkOwotICAgIGludCBvdXRfZGF0YWJhc2VJZDsKLSAgICBSZWZQdHI8
SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiBvdXRfc3FsRXJyb3I7Ci0gICAg
SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMgb3V0X3NjcmVlbkNv
bG9yOwotICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0
PiBvdXRfYWx0ZXJuYXRlQ29sb3JzOwotICAgIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyOjpQcmludENvbG9yIG91dF9wcmludENvbG9yOwotICAgIG1fYWdlbnQtPmV4ZWN1dGVOb09w
dGlvbmFsUGFyYW1ldGVycyhlcnJvciwgKmluX2NvbHVtbk5hbWVzLCBpbl9ub3RlcywgaW5fdGlt
ZXN0YW1wLCAqaW5fdmFsdWVzLCAqaW5fcGF5bG9hZCwgaW5fZGF0YWJhc2VJZCwgKmluX3NxbEVy
cm9yLCBpbl9zY3JlZW5Db2xvciwgKmluX2FsdGVybmF0ZUNvbG9ycywgaW5fcHJpbnRDb2xvciwg
b3V0X2NvbHVtbk5hbWVzLCAmb3V0X25vdGVzLCAmb3V0X3RpbWVzdGFtcCwgb3V0X3ZhbHVlcywg
Jm91dF9wYXlsb2FkLCAmb3V0X2RhdGFiYXNlSWQsIG91dF9zcWxFcnJvciwgJm91dF9zY3JlZW5D
b2xvciwgb3V0X2FsdGVybmF0ZUNvbG9ycywgJm91dF9wcmludENvbG9yKTsKLQotICAgIGlmICgh
ZXJyb3IubGVuZ3RoKCkpIHsKLSAgICAgICAgcmVzdWx0LT5zZXRBcnJheSgiY29sdW1uTmFtZXMi
X3MsIG91dF9jb2x1bW5OYW1lcyk7Ci0gICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJub3RlcyJf
cywgb3V0X25vdGVzKTsKLSAgICAgICAgcmVzdWx0LT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywg
b3V0X3RpbWVzdGFtcCk7Ci0gICAgICAgIHJlc3VsdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIG91
dF92YWx1ZXMpOwotICAgICAgICByZXN1bHQtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCBvdXRfcGF5
bG9hZCk7Ci0gICAgICAgIHJlc3VsdC0+c2V0SW50ZWdlcigiZGF0YWJhc2VJZCJfcywgb3V0X2Rh
dGFiYXNlSWQpOwotICAgICAgICByZXN1bHQtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIG91dF9z
cWxFcnJvcik7Ci0gICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgSW5z
cGVjdG9yOjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKG91dF9z
Y3JlZW5Db2xvcikpOwotICAgICAgICByZXN1bHQtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMi
X3MsIG91dF9hbHRlcm5hdGVDb2xvcnMpOwotICAgICAgICByZXN1bHQtPnNldFN0cmluZygicHJp
bnRDb2xvciJfcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25z
dGFudFZhbHVlKG91dF9wcmludENvbG9yKSk7CisgICAgYXV0byBpbl9zY3JlZW5Db2xvciA9IFBy
b3RvY29sOjpUZXN0SGVscGVyczo6cGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPFByb3RvY29sOjpE
YXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4oaW5fc2NyZWVuQ29sb3JfanNvbik7CisgICAgaWYgKCFp
bl9zY3JlZW5Db2xvcikgeworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90
b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgbWFrZVN0cmluZygiVW5r
bm93biBzY3JlZW5Db2xvcjogIl9zLCBpbl9zY3JlZW5Db2xvcl9qc29uKSk7CisgICAgICAgIHJl
dHVybjsKICAgICB9Ci0gICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKLSAgICAgICAgbV9iYWNrZW5k
RGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxz
ZSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2Nv
bEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOwor
CisgICAgYXV0byByZXN1bHQgPSBtX2FnZW50LT5leGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMo
aW5fY29sdW1uTmFtZXMucmVsZWFzZU5vbk51bGwoKSwgaW5fbm90ZXMsICppbl90aW1lc3RhbXAs
IGluX3ZhbHVlcy5yZWxlYXNlTm9uTnVsbCgpLCBpbl9wYXlsb2FkLnJlbGVhc2VOb25OdWxsKCks
ICppbl9kYXRhYmFzZUlkLCBpbl9zcWxFcnJvci5yZWxlYXNlTm9uTnVsbCgpLCAqaW5fc2NyZWVu
Q29sb3IsIGluX2FsdGVybmF0ZUNvbG9ycy5yZWxlYXNlTm9uTnVsbCgpLCBpbl9wcmludENvbG9y
KTsKKyAgICBpZiAoIXJlc3VsdCkgeworICAgICAgICBBU1NFUlQoIXJlc3VsdC5lcnJvcigpLmlz
RW1wdHkoKSk7CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJy
b3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCByZXN1bHQuZXJyb3IoKSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBhdXRvIFtvdXRfY29sdW1uTmFtZXMsIG91dF9ub3Rl
cywgb3V0X3RpbWVzdGFtcCwgb3V0X3ZhbHVlcywgb3V0X3BheWxvYWQsIG91dF9kYXRhYmFzZUlk
LCBvdXRfc3FsRXJyb3IsIG91dF9zY3JlZW5Db2xvciwgb3V0X2FsdGVybmF0ZUNvbG9ycywgb3V0
X3ByaW50Q29sb3JdID0gV1RGTW92ZShyZXN1bHQudmFsdWUoKSk7CisKKyAgICBhdXRvIHByb3Rv
Y29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBwcm90b2NvbF9q
c29uTWVzc2FnZS0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCBXVEZNb3ZlKG91dF9jb2x1bW5O
YW1lcykpOworICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm5vdGVzIl9zLCBv
dXRfbm90ZXMpOworICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXREb3VibGUoInRpbWVzdGFt
cCJfcywgb3V0X3RpbWVzdGFtcCk7CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldE9iamVj
dCgidmFsdWVzIl9zLCBXVEZNb3ZlKG91dF92YWx1ZXMpKTsKKyAgICBwcm90b2NvbF9qc29uTWVz
c2FnZS0+c2V0VmFsdWUoInBheWxvYWQiX3MsIFdURk1vdmUob3V0X3BheWxvYWQpKTsKKyAgICBw
cm90b2NvbF9qc29uTWVzc2FnZS0+c2V0SW50ZWdlcigiZGF0YWJhc2VJZCJfcywgb3V0X2RhdGFi
YXNlSWQpOworICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRPYmplY3QoInNxbEVycm9yIl9z
LCBXVEZNb3ZlKG91dF9zcWxFcnJvcikpOworICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRT
dHJpbmcoInNjcmVlbkNvbG9yIl9zLCBQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25z
dGFudFZhbHVlKG91dF9zY3JlZW5Db2xvcikpOworICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5z
ZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCBXVEZNb3ZlKG91dF9hbHRlcm5hdGVDb2xvcnMp
KTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCBv
dXRfcHJpbnRDb2xvcik7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHBy
b3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSksIGZhbHNlKTsKIH0K
IAogfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCkBAIC00MjQsNiArMzk3LDcgQEAgdm9pZCBEYXRh
YmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMobG9uZyBy
ZXF1ZXN0SWQsIFJlZlAKIAogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNs
dWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKQEAgLTQ2
Nyw3ICs0NDEsNiBAQCBjbGFzcyBGcm9udGVuZFJvdXRlcjsKICNpbmNsdWRlICJUZXN0RnJvbnRl
bmREaXNwYXRjaGVycy5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJv
bnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKIG5hbWVzcGFj
ZSBJbnNwZWN0b3IgewogCkBAIC01MDgsNyArNDgxLDkgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7
CiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3Rv
Y29sVHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9K
U09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC01MzAsNyArNTA1
LDcgQEAgZW51bSBjbGFzcyBQcmltYXJ5Q29sb3JzOwogbmFtZXNwYWNlIERhdGFiYXNlIHsKIC8q
IFVuaXF1ZSBpZGVudGlmaWVyIG9mIERhdGFiYXNlIG9iamVjdC4gKi8KIHVzaW5nIERhdGFiYXNl
SWQgPSBpbnQ7Ci11c2luZyBDb2xvckxpc3QgPSBKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPjsKK3VzaW5nIENvbG9yTGlzdCA9IEpTT046
OkFycmF5T2Y8UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPjsKIH0gLy8gRGF0YWJh
c2UKIC8vIEVuZCBvZiB0eXBlZGVmcy4KIApAQCAtNTU0LDcgKzUyOSw3IEBAIGVudW0gY2xhc3Mg
UHJpbWFyeUNvbG9ycyB7CiB9OyAvLyBlbnVtIGNsYXNzIFByaW1hcnlDb2xvcnMKIAogLyogRGF0
YWJhc2UgZXJyb3IuICovCi1jbGFzcyBFcnJvciA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsK
K2NsYXNzIEVycm9yIGZpbmFsIDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgewogcHVibGljOgog
ICAgIGVudW0gewogICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCkBAIC01ODEsMTcgKzU1NiwxNyBA
QCBwdWJsaWM6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBFcnJvcjsKICAgICBwdWJsaWM6CiAKLSAg
ICAgICAgQnVpbGRlcjxTVEFURSB8IE1lc3NhZ2VTZXQ+JiBzZXRNZXNzYWdlKGNvbnN0IFN0cmlu
ZyYgdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBNZXNzYWdlU2V0PiYgc2V0TWVzc2Fn
ZShjb25zdCBTdHJpbmcmIGluX21lc3NhZ2UpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKCEoU1RBVEUgJiBNZXNzYWdlU2V0KSwgcHJvcGVydHlfbWVzc2FnZV9hbHJlYWR5
X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJtZXNzYWdlIl9zLCB2YWx1
ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJtZXNzYWdlIl9zLCBpbl9tZXNz
YWdlKTsKICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TWVzc2FnZVNldD4oKTsKICAgICAg
ICAgfQogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDb2RlU2V0PiYgc2V0Q29kZShpbnQgdmFs
dWUpCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDb2RlU2V0PiYgc2V0Q29kZShpbnQgaW5fY29k
ZSkKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIENvZGVT
ZXQpLCBwcm9wZXJ0eV9jb2RlX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5z
ZXRJbnRlZ2VyKCJjb2RlIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0SW50
ZWdlcigiY29kZSJfcywgaW5fY29kZSk7CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENv
ZGVTZXQ+KCk7CiAgICAgICAgIH0KIApAQCAtNjMwLDcgKzYwNSw3IEBAIE9wdGlvbmFsPFByb3Rv
Y29sRW51bVR5cGU+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZyhjb25zdCBTdHJpbmcmKTsKIAog
Ly8gRW51bXMgaW4gdGhlICdEYXRhYmFzZScgRG9tYWluCiB0ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJ
bnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4gcGFyc2VFbnVtVmFs
dWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3Jz
Pihjb25zdCBTdHJpbmcmKTsKK09wdGlvbmFsPFByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNv
bG9ycz4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPFByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFy
eUNvbG9ycz4oY29uc3QgU3RyaW5nJik7CiAKIH0gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCiAK
QEAgLTY4Miw4ICs2NTcsNyBAQCBzdHJ1Y3QgRGVmYXVsdEhhc2g8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+IDogSW50SGFzaDxJbnNwZQogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKIAotI2luY2x1ZGUgPHd0
Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3
dGYvQXNzZXJ0aW9ucy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtNzA4LDE2ICs2
ODIsMTYgQEAgU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKSB7CiAvLyBFbnVt
cyBpbiB0aGUgJ0RhdGFiYXNlJyBEb21haW4KIAogdGVtcGxhdGU8PgotT3B0aW9uYWw8SW5zcGVj
dG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+IHBhcnNlRW51bVZhbHVlRnJv
bVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4oY29u
c3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKK09wdGlvbmFsPFByb3RvY29sOjpEYXRhYmFzZTo6
UHJpbWFyeUNvbG9ycz4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPFByb3RvY29sOjpEYXRhYmFz
ZTo6UHJpbWFyeUNvbG9ycz4oY29uc3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKIHsKICAgICBz
dGF0aWMgY29uc3Qgc2l6ZV90IGNvbnN0YW50VmFsdWVzW10gPSB7Ci0gICAgICAgIChzaXplX3Qp
SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM6OlJlZCwKLSAgICAg
ICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9yczo6
R3JlZW4sCi0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlBy
aW1hcnlDb2xvcnM6OkJsdWUsCisgICAgICAgIChzaXplX3QpUHJvdG9jb2w6OkRhdGFiYXNlOjpQ
cmltYXJ5Q29sb3JzOjpSZWQsCisgICAgICAgIChzaXplX3QpUHJvdG9jb2w6OkRhdGFiYXNlOjpQ
cmltYXJ5Q29sb3JzOjpHcmVlbiwKKyAgICAgICAgKHNpemVfdClQcm90b2NvbDo6RGF0YWJhc2U6
OlByaW1hcnlDb2xvcnM6OkJsdWUsCiAgICAgfTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IDM7ICsraSkKICAgICAgICAgaWYgKHByb3RvY29sU3RyaW5nID09IGVudW1fY29uc3RhbnRfdmFs
dWVzW2NvbnN0YW50VmFsdWVzW2ldXSkKLSAgICAgICAgICAgIHJldHVybiAoSW5zcGVjdG9yOjpQ
cm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMpY29uc3RhbnRWYWx1ZXNbaV07CisgICAg
ICAgICAgICByZXR1cm4gKFByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyljb25zdGFu
dFZhbHVlc1tpXTsKIAogICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiB9CkBAIC03NzQsOCArNzQ4
LDggQEAgY2xhc3MgT2JqQ0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIgZmluYWwg
OiBwdWJsaWMgQWx0ZXJuYXRlRGF0YWJhc2VCYWMKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKIHB1YmxpYzoKICAgICBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcihp
ZDxUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkhhbmRsZXI+IGhhbmRsZXIpIHsgbV9kZWxlZ2F0
ZSA9IGhhbmRsZXI7IH0KLSAgICB2b2lkIGV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMobG9u
ZyByZXF1ZXN0SWQsIGNvbnN0IEpTT046OkFycmF5KiBpbl9jb2x1bW5OYW1lcywgY29uc3QgU3Ry
aW5nKiBpbl9ub3RlcywgY29uc3QgZG91YmxlKiBpbl90aW1lc3RhbXAsIGNvbnN0IEpTT046Ok9i
amVjdCogaW5fdmFsdWVzLCBjb25zdCBKU09OOjpWYWx1ZSogaW5fcGF5bG9hZCwgY29uc3QgaW50
KiBpbl9kYXRhYmFzZUlkLCBjb25zdCBKU09OOjpPYmplY3QqIGluX3NxbEVycm9yLCBjb25zdCBT
dHJpbmcqIGluX3NjcmVlbkNvbG9yLCBjb25zdCBKU09OOjpBcnJheSogaW5fYWx0ZXJuYXRlQ29s
b3JzLCBjb25zdCBTdHJpbmcqIGluX3ByaW50Q29sb3IpIGZpbmFsOwotICAgIHZvaWQgZXhlY3V0
ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcmVxdWVzdElkLCBjb25zdCBKU09OOjpBcnJheSYg
aW5fY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgaW5fbm90ZXMsIGRvdWJsZSBpbl90aW1lc3Rh
bXAsIGNvbnN0IEpTT046Ok9iamVjdCYgaW5fdmFsdWVzLCBKU09OOjpWYWx1ZSBpbl9wYXlsb2Fk
LCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgSlNPTjo6T2JqZWN0JiBpbl9zcWxFcnJvciwgY29u
c3QgU3RyaW5nJiBpbl9zY3JlZW5Db2xvciwgY29uc3QgSlNPTjo6QXJyYXkmIGluX2FsdGVybmF0
ZUNvbG9ycywgY29uc3QgU3RyaW5nJiBpbl9wcmludENvbG9yKSBmaW5hbDsKKyAgICB2b2lkIGV4
ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMobG9uZyBwcm90b2NvbF9jYWxsSWQsIFJlZlB0cjxK
U09OOjpBcnJheT4mJiBvcHRfY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgb3B0X25vdGVzLCBP
cHRpb25hbDxkb3VibGU+JiYgb3B0X3RpbWVzdGFtcCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBv
cHRfdmFsdWVzLCBSZWZQdHI8SlNPTjo6VmFsdWU+JiYgb3B0X3BheWxvYWQsIE9wdGlvbmFsPGlu
dD4mJiBvcHRfZGF0YWJhc2VJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBvcHRfc3FsRXJyb3Is
IGNvbnN0IFN0cmluZyYgb3B0X3NjcmVlbkNvbG9yLCBSZWZQdHI8SlNPTjo6QXJyYXk+JiYgb3B0
X2FsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nJiBvcHRfcHJpbnRDb2xvcikgZmluYWw7Cisg
ICAgdm9pZCBleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMobG9uZyBwcm90b2NvbF9jYWxsSWQs
IFJlZjxKU09OOjpBcnJheT4mJiBjb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBub3RlcywgZG91
YmxlIHRpbWVzdGFtcCwgUmVmPEpTT046Ok9iamVjdD4mJiB2YWx1ZXMsIFJlZjxKU09OOjpWYWx1
ZT4mJiBwYXlsb2FkLCBpbnQgZGF0YWJhc2VJZCwgUmVmPEpTT046Ok9iamVjdD4mJiBzcWxFcnJv
ciwgY29uc3QgU3RyaW5nJiBzY3JlZW5Db2xvciwgUmVmPEpTT046OkFycmF5PiYmIGFsdGVybmF0
ZUNvbG9ycywgY29uc3QgU3RyaW5nJiBwcmludENvbG9yKSBmaW5hbDsKIHByaXZhdGU6CiAgICAg
UmV0YWluUHRyPGlkPFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluSGFuZGxlcj4+IG1fZGVsZWdh
dGU7CiB9OwpAQCAtODIzLDEzNyArNzk3LDEzNSBAQCBwcml2YXRlOgogCiBuYW1lc3BhY2UgSW5z
cGVjdG9yIHsKIAotdm9pZCBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6
ZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhsb25nIHJlcXVlc3RJZCwgY29uc3QgSlNPTjo6
QXJyYXkqIGluX2NvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcqIGluX25vdGVzLCBjb25zdCBkb3Vi
bGUqIGluX3RpbWVzdGFtcCwgY29uc3QgSlNPTjo6T2JqZWN0KiBpbl92YWx1ZXMsIGNvbnN0IEpT
T046OlZhbHVlKiBpbl9wYXlsb2FkLCBjb25zdCBpbnQqIGluX2RhdGFiYXNlSWQsIGNvbnN0IEpT
T046Ok9iamVjdCogaW5fc3FsRXJyb3IsIGNvbnN0IFN0cmluZyogaW5fc2NyZWVuQ29sb3IsIGNv
bnN0IEpTT046OkFycmF5KiBpbl9hbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyogaW5fcHJp
bnRDb2xvcikKK3ZvaWQgT2JqQ0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4
ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMobG9uZyBwcm90b2NvbF9jYWxsSWQsIFJlZlB0cjxK
U09OOjpBcnJheT4mJiBpbl9vcHRfY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgaW5fb3B0X25v
dGVzLCBPcHRpb25hbDxkb3VibGU+JiYgaW5fb3B0X3RpbWVzdGFtcCwgUmVmUHRyPEpTT046Ok9i
amVjdD4mJiBpbl9vcHRfdmFsdWVzLCBSZWZQdHI8SlNPTjo6VmFsdWU+JiYgaW5fb3B0X3BheWxv
YWQsIE9wdGlvbmFsPGludD4mJiBpbl9vcHRfZGF0YWJhc2VJZCwgUmVmUHRyPEpTT046Ok9iamVj
dD4mJiBpbl9vcHRfc3FsRXJyb3IsIGNvbnN0IFN0cmluZyYgaW5fb3B0X3NjcmVlbkNvbG9yLCBS
ZWZQdHI8SlNPTjo6QXJyYXk+JiYgaW5fb3B0X2FsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5n
JiBpbl9vcHRfcHJpbnRDb2xvcikKIHsKICAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9T
ZWxlY3RvcjpAc2VsZWN0b3IoZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1dpdGhFcnJvckNh
bGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazpjb2x1bW5OYW1lczpub3Rlczp0aW1lc3RhbXA6dmFsdWVz
OnBheWxvYWQ6ZGF0YWJhc2VJZDpzcWxFcnJvcjpzY3JlZW5Db2xvcjphbHRlcm5hdGVDb2xvcnM6
cHJpbnRDb2xvcjopXSkgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90
b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAi
J0RhdGFiYXNlLmV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMnIHdhcyBub3QgZm91bmQiX3Mp
OworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHByb3Rv
Y29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RhdGFiYXNl
LmV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMnIHdhcyBub3QgZm91bmQiX3MpOwogICAgICAg
ICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCiAgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7
Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVz
dElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAgICAgYmFj
a2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxsSWQsIEJh
Y2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwogICAgICAgICBiYWNrZW5kRGlz
cGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgIH07CiAKLSAgICBpZCBzdWNjZXNz
Q2FsbGJhY2sgPSBeKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKmNvbHVtbk5hbWVzLCBOU1N0cmlu
ZyAqKm5vdGVzLCBkb3VibGUgKnRpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqdmFs
dWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKipwYXlsb2FkLCBpbnQgKmRhdGFiYXNlSWQsIFRl
c3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKipzcWxFcnJvciwgVGVzdFByb3RvY29sRGF0YWJhc2VQ
cmltYXJ5Q29sb3JzICpzY3JlZW5Db2xvciwgTlNBcnJheS8qPE5TU3RyaW5nPiovICoqYWx0ZXJu
YXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRl
cnNQcmludENvbG9yICpwcmludENvbG9yKSB7Ci0gICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IHJl
c3VsdE9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgICAgIFRIUk9XX0VYQ0VQ
VElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihjb2x1bW5OYW1lcywgQCJjb2x1bW5OYW1l
cyIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIo
bm90ZXMsIEAibm90ZXMiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9O
QUxfUEFSQU1FVEVSKHZhbHVlcywgQCJ2YWx1ZXMiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9O
X0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKHBheWxvYWQsIEAicGF5bG9hZCIpOwotICAgICAg
ICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIoc3FsRXJyb3IsIEAi
c3FsRXJyb3IiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFS
QU1FVEVSKGFsdGVybmF0ZUNvbG9ycywgQCJhbHRlcm5hdGVDb2xvcnMiKTsKLSAgICAgICAgaWYg
KGNvbHVtbk5hbWVzKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRBcnJheSgiY29sdW1u
TmFtZXMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KCpjb2x1bW5OYW1lcykpOwotICAgICAgICBpZiAo
bm90ZXMpCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZygibm90ZXMiX3MsICpu
b3Rlcyk7Ci0gICAgICAgIGlmICh0aW1lc3RhbXApCi0gICAgICAgICAgICByZXN1bHRPYmplY3Qt
PnNldERvdWJsZSgidGltZXN0YW1wIl9zLCAqdGltZXN0YW1wKTsKLSAgICAgICAgaWYgKHZhbHVl
cykKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIFsqdmFs
dWVzIHRvSlNPTk9iamVjdF0pOwotICAgICAgICBpZiAocGF5bG9hZCkKLSAgICAgICAgICAgIHJl
c3VsdE9iamVjdC0+c2V0VmFsdWUoInBheWxvYWQiX3MsIFsqcGF5bG9hZCB0b0pTT05PYmplY3Rd
KTsKLSAgICAgICAgaWYgKGRhdGFiYXNlSWQpCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNl
dEludGVnZXIoImRhdGFiYXNlSWQiX3MsICpkYXRhYmFzZUlkKTsKLSAgICAgICAgaWYgKHNxbEVy
cm9yKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBb
KnNxbEVycm9yIHRvSlNPTk9iamVjdF0pOwotICAgICAgICBpZiAoc2NyZWVuQ29sb3IpCi0gICAg
ICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZygic2NyZWVuQ29sb3IiX3MsIHRvUHJvdG9j
b2xTdHJpbmcoKnNjcmVlbkNvbG9yKSk7Ci0gICAgICAgIGlmIChhbHRlcm5hdGVDb2xvcnMpCi0g
ICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIHRv
SlNPTlN0cmluZ0FycmF5KCphbHRlcm5hdGVDb2xvcnMpKTsKLSAgICAgICAgaWYgKHByaW50Q29s
b3IpCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZygicHJpbnRDb2xvciJfcywg
dG9Qcm90b2NvbFN0cmluZygqcHJpbnRDb2xvcikpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hl
cigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdE9iamVjdCksIGZhbHNl
KTsKKyAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKm91
dF9vcHRfY29sdW1uTmFtZXMsIE5TU3RyaW5nICoqb3V0X29wdF9ub3RlcywgZG91YmxlICpvdXRf
b3B0X3RpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqb3V0X29wdF92YWx1ZXMsIFJX
SVByb3RvY29sSlNPTk9iamVjdCAqKm91dF9vcHRfcGF5bG9hZCwgaW50ICpvdXRfb3B0X2RhdGFi
YXNlSWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKipvdXRfb3B0X3NxbEVycm9yLCBUZXN0
UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgKm91dF9vcHRfc2NyZWVuQ29sb3IsIE5TQXJy
YXkvKjxOU1N0cmluZz4qLyAqKm91dF9vcHRfYWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xE
YXRhYmFzZShhbm9ueW1vdXMpICpvdXRfb3B0X3ByaW50Q29sb3IpIHsKKyAgICAgICAgYXV0byBw
cm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIFRI
Uk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihvdXRfb3B0X2NvbHVtbk5h
bWVzLCBAImNvbHVtbk5hbWVzIik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09Q
VElPTkFMX1BBUkFNRVRFUihvdXRfb3B0X25vdGVzLCBAIm5vdGVzIik7CisgICAgICAgIFRIUk9X
X0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihvdXRfb3B0X3ZhbHVlcywgQCJ2
YWx1ZXMiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1F
VEVSKG91dF9vcHRfcGF5bG9hZCwgQCJwYXlsb2FkIik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihvdXRfb3B0X3NxbEVycm9yLCBAInNxbEVycm9y
Iik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihv
dXRfb3B0X2FsdGVybmF0ZUNvbG9ycywgQCJhbHRlcm5hdGVDb2xvcnMiKTsKKyAgICAgICAgaWYg
KCEhb3V0X29wdF9jb2x1bW5OYW1lcykKKyAgICAgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdl
LT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KCpvdXRfb3B0X2Nv
bHVtbk5hbWVzKSk7CisgICAgICAgIGlmICghIW91dF9vcHRfbm90ZXMpCisgICAgICAgICAgICBw
cm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJub3RlcyJfcywgKm91dF9vcHRfbm90ZXMp
OworICAgICAgICBpZiAoISFvdXRfb3B0X3RpbWVzdGFtcCkKKyAgICAgICAgICAgIHByb3RvY29s
X2pzb25NZXNzYWdlLT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywgKm91dF9vcHRfdGltZXN0YW1w
KTsKKyAgICAgICAgaWYgKCEhb3V0X29wdF92YWx1ZXMpCisgICAgICAgICAgICBwcm90b2NvbF9q
c29uTWVzc2FnZS0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIFsqb3V0X29wdF92YWx1ZXMgdG9KU09O
T2JqZWN0XSk7CisgICAgICAgIGlmICghIW91dF9vcHRfcGF5bG9hZCkKKyAgICAgICAgICAgIHBy
b3RvY29sX2pzb25NZXNzYWdlLT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgWypvdXRfb3B0X3BheWxv
YWQgdG9KU09OT2JqZWN0XSk7CisgICAgICAgIGlmICghIW91dF9vcHRfZGF0YWJhc2VJZCkKKyAg
ICAgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRJbnRlZ2VyKCJkYXRhYmFzZUlkIl9z
LCAqb3V0X29wdF9kYXRhYmFzZUlkKTsKKyAgICAgICAgaWYgKCEhb3V0X29wdF9zcWxFcnJvcikK
KyAgICAgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRPYmplY3QoInNxbEVycm9yIl9z
LCBbKm91dF9vcHRfc3FsRXJyb3IgdG9KU09OT2JqZWN0XSk7CisgICAgICAgIGlmICghIW91dF9v
cHRfc2NyZWVuQ29sb3IpCisgICAgICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3Ry
aW5nKCJzY3JlZW5Db2xvciJfcywgdG9Qcm90b2NvbFN0cmluZygqb3V0X29wdF9zY3JlZW5Db2xv
cikpOworICAgICAgICBpZiAoISFvdXRfb3B0X2FsdGVybmF0ZUNvbG9ycykKKyAgICAgICAgICAg
IHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCB0b0pT
T05TdHJpbmdBcnJheSgqb3V0X29wdF9hbHRlcm5hdGVDb2xvcnMpKTsKKyAgICAgICAgaWYgKCEh
b3V0X29wdF9wcmludENvbG9yKQorICAgICAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNl
dFN0cmluZygicHJpbnRDb2xvciJfcywgdG9Qcm90b2NvbFN0cmluZygqb3V0X29wdF9wcmludENv
bG9yKSk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShwcm90b2Nv
bF9jYWxsSWQsIFdURk1vdmUocHJvdG9jb2xfanNvbk1lc3NhZ2UpLCBmYWxzZSk7CiAgICAgfTsK
IAotICAgIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqb19pbl9jb2x1bW5OYW1lczsKLSAgICBpZiAo
aW5fY29sdW1uTmFtZXMpCi0gICAgICAgIG9faW5fY29sdW1uTmFtZXMgPSB0b09iakNTdHJpbmdB
cnJheShpbl9jb2x1bW5OYW1lcyk7Ci0gICAgTlNTdHJpbmcgKm9faW5fbm90ZXM7Ci0gICAgaWYg
KGluX25vdGVzKQotICAgICAgICBvX2luX25vdGVzID0gKmluX25vdGVzOwotICAgIGRvdWJsZSBv
X2luX3RpbWVzdGFtcDsKLSAgICBpZiAoaW5fdGltZXN0YW1wKQotICAgICAgICBvX2luX3RpbWVz
dGFtcCA9ICppbl90aW1lc3RhbXA7Ci0gICAgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpvX2luX3Zh
bHVlczsKLSAgICBpZiAoaW5fdmFsdWVzKQotICAgICAgICBvX2luX3ZhbHVlcyA9IFtbW1JXSVBy
b3RvY29sSlNPTk9iamVjdCBhbGxvY10gaW5pdFdpdGhKU09OT2JqZWN0OmluX3ZhbHVlc10gYXV0
b3JlbGVhc2VdOwotICAgIFJXSVByb3RvY29sSlNPTk9iamVjdCAqb19pbl9wYXlsb2FkOwotICAg
IGlmIChpbl9wYXlsb2FkKQotICAgICAgICBvX2luX3BheWxvYWQgPSBbW1tSV0lQcm90b2NvbEpT
T05PYmplY3QgYWxsb2NdIGluaXRXaXRoSlNPTk9iamVjdDppbl9wYXlsb2FkXSBhdXRvcmVsZWFz
ZV07Ci0gICAgaW50IG9faW5fZGF0YWJhc2VJZDsKLSAgICBpZiAoaW5fZGF0YWJhc2VJZCkKLSAg
ICAgICAgb19pbl9kYXRhYmFzZUlkID0gKmluX2RhdGFiYXNlSWQ7Ci0gICAgVGVzdFByb3RvY29s
RGF0YWJhc2VFcnJvciAqb19pbl9zcWxFcnJvcjsKLSAgICBpZiAoaW5fc3FsRXJyb3IpCi0gICAg
ICAgIG9faW5fc3FsRXJyb3IgPSBbW1tUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yIGFsbG9jXSBp
bml0V2l0aEpTT05PYmplY3Q6aW5fc3FsRXJyb3JdIGF1dG9yZWxlYXNlXTsKLSAgICBPcHRpb25h
bDxUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnM+IG9faW5fc2NyZWVuQ29sb3I7Ci0g
ICAgaWYgKGluX3NjcmVlbkNvbG9yKQotICAgICAgICBvX2luX3NjcmVlbkNvbG9yID0gZnJvbVBy
b3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycz4oKmluX3NjcmVl
bkNvbG9yKTsKLSAgICBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKm9faW5fYWx0ZXJuYXRlQ29sb3Jz
OwotICAgIGlmIChpbl9hbHRlcm5hdGVDb2xvcnMpCi0gICAgICAgIG9faW5fYWx0ZXJuYXRlQ29s
b3JzID0gdG9PYmpDU3RyaW5nQXJyYXkoaW5fYWx0ZXJuYXRlQ29sb3JzKTsKLSAgICBPcHRpb25h
bDxUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENv
bG9yPiBvX2luX3ByaW50Q29sb3I7Ci0gICAgaWYgKGluX3ByaW50Q29sb3IpCi0gICAgICAgIG9f
aW5fcHJpbnRDb2xvciA9IGZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xEYXRhYmFzZUV4
ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yPigqaW5fcHJpbnRDb2xvcik7Ci0K
LSAgICBbbV9kZWxlZ2F0ZSBleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzV2l0aEVycm9yQ2Fs
bGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrIGNvbHVt
bk5hbWVzOihpbl9jb2x1bW5OYW1lcyA/ICZvX2luX2NvbHVtbk5hbWVzIDogbmlsKSBub3Rlczoo
aW5fbm90ZXMgPyAmb19pbl9ub3RlcyA6IG5pbCkgdGltZXN0YW1wOihpbl90aW1lc3RhbXAgPyAm
b19pbl90aW1lc3RhbXAgOiBuaWwpIHZhbHVlczooaW5fdmFsdWVzID8gJm9faW5fdmFsdWVzIDog
bmlsKSBwYXlsb2FkOihpbl9wYXlsb2FkID8gJm9faW5fcGF5bG9hZCA6IG5pbCkgZGF0YWJhc2VJ
ZDooaW5fZGF0YWJhc2VJZCA/ICZvX2luX2RhdGFiYXNlSWQgOiBuaWwpIHNxbEVycm9yOihpbl9z
cWxFcnJvciA/ICZvX2luX3NxbEVycm9yIDogbmlsKSBzY3JlZW5Db2xvcjooaW5fc2NyZWVuQ29s
b3IgPyAmb19pbl9zY3JlZW5Db2xvci52YWx1ZSgpIDogbmlsKSBhbHRlcm5hdGVDb2xvcnM6KGlu
X2FsdGVybmF0ZUNvbG9ycyA/ICZvX2luX2FsdGVybmF0ZUNvbG9ycyA6IG5pbCkgcHJpbnRDb2xv
cjooaW5fcHJpbnRDb2xvciA/ICZvX2luX3ByaW50Q29sb3IudmFsdWUoKSA6IG5pbCldOworICAg
IE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqb19pbl9vcHRfY29sdW1uTmFtZXM7CisgICAgaWYgKCEh
aW5fb3B0X2NvbHVtbk5hbWVzKQorICAgICAgICBvX2luX29wdF9jb2x1bW5OYW1lcyA9IHRvT2Jq
Q1N0cmluZ0FycmF5KGluX29wdF9jb2x1bW5OYW1lcy5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICBO
U1N0cmluZyAqb19pbl9vcHRfbm90ZXM7CisgICAgaWYgKCEhaW5fb3B0X25vdGVzKQorICAgICAg
ICBvX2luX29wdF9ub3RlcyA9IGluX29wdF9ub3RlczsKKyAgICBkb3VibGUgb19pbl9vcHRfdGlt
ZXN0YW1wOworICAgIGlmICghIWluX29wdF90aW1lc3RhbXApCisgICAgICAgIG9faW5fb3B0X3Rp
bWVzdGFtcCA9ICppbl9vcHRfdGltZXN0YW1wOworICAgIFJXSVByb3RvY29sSlNPTk9iamVjdCAq
b19pbl9vcHRfdmFsdWVzOworICAgIGlmICghIWluX29wdF92YWx1ZXMpCisgICAgICAgIG9faW5f
b3B0X3ZhbHVlcyA9IFtbW1JXSVByb3RvY29sSlNPTk9iamVjdCBhbGxvY10gaW5pdFdpdGhKU09O
T2JqZWN0OmluX29wdF92YWx1ZXMucmVsZWFzZU5vbk51bGwoKV0gYXV0b3JlbGVhc2VdOworICAg
IFJXSVByb3RvY29sSlNPTk9iamVjdCAqb19pbl9vcHRfcGF5bG9hZDsKKyAgICBpZiAoISFpbl9v
cHRfcGF5bG9hZCkKKyAgICAgICAgb19pbl9vcHRfcGF5bG9hZCA9IFtbW1JXSVByb3RvY29sSlNP
Tk9iamVjdCBhbGxvY10gaW5pdFdpdGhKU09OT2JqZWN0OmluX29wdF9wYXlsb2FkLnJlbGVhc2VO
b25OdWxsKCldIGF1dG9yZWxlYXNlXTsKKyAgICBpbnQgb19pbl9vcHRfZGF0YWJhc2VJZDsKKyAg
ICBpZiAoISFpbl9vcHRfZGF0YWJhc2VJZCkKKyAgICAgICAgb19pbl9vcHRfZGF0YWJhc2VJZCA9
ICppbl9vcHRfZGF0YWJhc2VJZDsKKyAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICpvX2lu
X29wdF9zcWxFcnJvcjsKKyAgICBpZiAoISFpbl9vcHRfc3FsRXJyb3IpCisgICAgICAgIG9faW5f
b3B0X3NxbEVycm9yID0gW1tbVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciBhbGxvY10gaW5pdFdp
dGhKU09OT2JqZWN0OmluX29wdF9zcWxFcnJvci5yZWxlYXNlTm9uTnVsbCgpXSBhdXRvcmVsZWFz
ZV07CisgICAgT3B0aW9uYWw8VGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzPiBvX2lu
X29wdF9zY3JlZW5Db2xvcjsKKyAgICBpZiAoISFpbl9vcHRfc2NyZWVuQ29sb3IpCisgICAgICAg
IG9faW5fb3B0X3NjcmVlbkNvbG9yID0gZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbERh
dGFiYXNlUHJpbWFyeUNvbG9ycz4oaW5fb3B0X3NjcmVlbkNvbG9yKTsKKyAgICBOU0FycmF5Lyo8
TlNTdHJpbmc+Ki8gKm9faW5fb3B0X2FsdGVybmF0ZUNvbG9yczsKKyAgICBpZiAoISFpbl9vcHRf
YWx0ZXJuYXRlQ29sb3JzKQorICAgICAgICBvX2luX29wdF9hbHRlcm5hdGVDb2xvcnMgPSB0b09i
akNTdHJpbmdBcnJheShpbl9vcHRfYWx0ZXJuYXRlQ29sb3JzLnJlbGVhc2VOb25OdWxsKCkpOwor
ICAgIE9wdGlvbmFsPFRlc3RQcm90b2NvbERhdGFiYXNlKGFub255bW91cyk+IG9faW5fb3B0X3By
aW50Q29sb3I7CisgICAgaWYgKCEhaW5fb3B0X3ByaW50Q29sb3IpCisgICAgICAgIG9faW5fb3B0
X3ByaW50Q29sb3IgPSBmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sRGF0YWJhc2UoYW5v
bnltb3VzKT4oaW5fb3B0X3ByaW50Q29sb3IpOworICAgIFttX2RlbGVnYXRlIGV4ZWN1dGVBbGxP
cHRpb25hbFBhcmFtZXRlcnNXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3ND
YWxsYmFjazpzdWNjZXNzQ2FsbGJhY2sgY29sdW1uTmFtZXM6KCEhaW5fb3B0X2NvbHVtbk5hbWVz
ID8gJm9faW5fb3B0X2NvbHVtbk5hbWVzIDogbmlsKSBub3RlczooISFpbl9vcHRfbm90ZXMgPyAm
b19pbl9vcHRfbm90ZXMgOiBuaWwpIHRpbWVzdGFtcDooISFpbl9vcHRfdGltZXN0YW1wID8gJm9f
aW5fb3B0X3RpbWVzdGFtcCA6IG5pbCkgdmFsdWVzOighIWluX29wdF92YWx1ZXMgPyAmb19pbl9v
cHRfdmFsdWVzIDogbmlsKSBwYXlsb2FkOighIWluX29wdF9wYXlsb2FkID8gJm9faW5fb3B0X3Bh
eWxvYWQgOiBuaWwpIGRhdGFiYXNlSWQ6KCEhaW5fb3B0X2RhdGFiYXNlSWQgPyAmb19pbl9vcHRf
ZGF0YWJhc2VJZCA6IG5pbCkgc3FsRXJyb3I6KCEhaW5fb3B0X3NxbEVycm9yID8gJm9faW5fb3B0
X3NxbEVycm9yIDogbmlsKSBzY3JlZW5Db2xvcjooISFpbl9vcHRfc2NyZWVuQ29sb3IgPyAmb19p
bl9vcHRfc2NyZWVuQ29sb3IudmFsdWUoKSA6IG5pbCkgYWx0ZXJuYXRlQ29sb3JzOighIWluX29w
dF9hbHRlcm5hdGVDb2xvcnMgPyAmb19pbl9vcHRfYWx0ZXJuYXRlQ29sb3JzIDogbmlsKSBwcmlu
dENvbG9yOighIWluX29wdF9wcmludENvbG9yID8gJm9faW5fb3B0X3ByaW50Q29sb3IudmFsdWUo
KSA6IG5pbCldOwogfQogCi12b2lkIE9iakNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRj
aGVyOjpleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMobG9uZyByZXF1ZXN0SWQsIGNvbnN0IEpT
T046OkFycmF5JiBpbl9jb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBpbl9ub3RlcywgZG91Ymxl
IGluX3RpbWVzdGFtcCwgY29uc3QgSlNPTjo6T2JqZWN0JiBpbl92YWx1ZXMsIEpTT046OlZhbHVl
IGluX3BheWxvYWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBKU09OOjpPYmplY3QmIGluX3Nx
bEVycm9yLCBjb25zdCBTdHJpbmcmIGluX3NjcmVlbkNvbG9yLCBjb25zdCBKU09OOjpBcnJheSYg
aW5fYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcmIGluX3ByaW50Q29sb3IpCit2b2lkIE9i
akNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlTm9PcHRpb25hbFBh
cmFtZXRlcnMobG9uZyBwcm90b2NvbF9jYWxsSWQsIFJlZjxKU09OOjpBcnJheT4mJiBpbl9jb2x1
bW5OYW1lcywgY29uc3QgU3RyaW5nJiBpbl9ub3RlcywgZG91YmxlIGluX3RpbWVzdGFtcCwgUmVm
PEpTT046Ok9iamVjdD4mJiBpbl92YWx1ZXMsIFJlZjxKU09OOjpWYWx1ZT4mJiBpbl9wYXlsb2Fk
LCBpbnQgaW5fZGF0YWJhc2VJZCwgUmVmPEpTT046Ok9iamVjdD4mJiBpbl9zcWxFcnJvciwgY29u
c3QgU3RyaW5nJiBpbl9zY3JlZW5Db2xvciwgUmVmPEpTT046OkFycmF5PiYmIGluX2FsdGVybmF0
ZUNvbG9ycywgY29uc3QgU3RyaW5nJiBpbl9wcmludENvbG9yKQogewogICAgIGlmICghW21fZGVs
ZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihleGVjdXRlTm9PcHRpb25hbFBhcmFt
ZXRlcnNXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6Y29sdW1uTmFtZXM6bm90ZXM6
dGltZXN0YW1wOnZhbHVlczpwYXlsb2FkOmRhdGFiYXNlSWQ6c3FsRXJyb3I6c2NyZWVuQ29sb3I6
YWx0ZXJuYXRlQ29sb3JzOnByaW50Q29sb3I6KV0pIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNo
ZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpN
ZXRob2ROb3RGb3VuZCwgIidEYXRhYmFzZS5leGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMnIHdh
cyBub3QgZm91bmQiX3MpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90
b2NvbEVycm9yKHByb3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZv
dW5kLCAiJ0RhdGFiYXNlLmV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycycgd2FzIG5vdCBmb3Vu
ZCJfcyk7CiAgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0
cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9j
b2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3Ip
OworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHByb3Rv
Y29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CiAgICAg
ICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgfTsKIAot
ICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF4oTlNBcnJheS8qPE5TU3RyaW5nPiovICpjb2x1bW5O
YW1lcywgTlNTdHJpbmcgKm5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05P
YmplY3QgKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpwYXlsb2FkLCBpbnQgZGF0YWJh
c2VJZCwgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqc3FsRXJyb3IsIFRlc3RQcm90b2NvbERh
dGFiYXNlUHJpbWFyeUNvbG9ycyBzY3JlZW5Db2xvciwgTlNBcnJheS8qPE5TU3RyaW5nPiovICph
bHRlcm5hdGVDb2xvcnMsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJh
bWV0ZXJzUHJpbnRDb2xvciBwcmludENvbG9yKSB7Ci0gICAgICAgIFJlZjxKU09OOjpPYmplY3Q+
IHJlc3VsdE9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKGNvbHVtbk5hbWVzLCBAImNvbHVtbk5hbWVz
Iik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKG5vdGVz
LCBAIm5vdGVzIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1F
VEVSKHZhbHVlcywgQCJ2YWx1ZXMiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFV
SVJFRF9QQVJBTUVURVIocGF5bG9hZCwgQCJwYXlsb2FkIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQ
VElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKHNxbEVycm9yLCBAInNxbEVycm9yIik7Ci0gICAg
ICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKGFsdGVybmF0ZUNvbG9y
cywgQCJhbHRlcm5hdGVDb2xvcnMiKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRBcnJheSgi
Y29sdW1uTmFtZXMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KGNvbHVtbk5hbWVzKSk7Ci0gICAgICAg
IHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKCJub3RlcyJfcywgbm90ZXMpOwotICAgICAgICByZXN1
bHRPYmplY3QtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCB0aW1lc3RhbXApOwotICAgICAgICBy
ZXN1bHRPYmplY3QtPnNldE9iamVjdCgidmFsdWVzIl9zLCBbdmFsdWVzIHRvSlNPTk9iamVjdF0p
OwotICAgICAgICByZXN1bHRPYmplY3QtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCBbcGF5bG9hZCB0
b0pTT05PYmplY3RdKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRJbnRlZ2VyKCJkYXRhYmFz
ZUlkIl9zLCBkYXRhYmFzZUlkKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRPYmplY3QoInNx
bEVycm9yIl9zLCBbc3FsRXJyb3IgdG9KU09OT2JqZWN0XSk7Ci0gICAgICAgIHJlc3VsdE9iamVj
dC0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgdG9Qcm90b2NvbFN0cmluZyhzY3JlZW5Db2xv
cikpOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3Ms
IHRvSlNPTlN0cmluZ0FycmF5KGFsdGVybmF0ZUNvbG9ycykpOwotICAgICAgICByZXN1bHRPYmpl
Y3QtPnNldFN0cmluZygicHJpbnRDb2xvciJfcywgdG9Qcm90b2NvbFN0cmluZyhwcmludENvbG9y
KSk7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQs
IFdURk1vdmUocmVzdWx0T2JqZWN0KSwgZmFsc2UpOworICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9
IF4oTlNBcnJheS8qPE5TU3RyaW5nPiovICpvdXRfY29sdW1uTmFtZXMsIE5TU3RyaW5nICpvdXRf
bm90ZXMsIGRvdWJsZSBvdXRfdGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKm91dF92
YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqb3V0X3BheWxvYWQsIGludCBvdXRfZGF0YWJh
c2VJZCwgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqb3V0X3NxbEVycm9yLCBUZXN0UHJvdG9j
b2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgb3V0X3NjcmVlbkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJp
bmc+Ki8gKm91dF9hbHRlcm5hdGVDb2xvcnMsIFRlc3RQcm90b2NvbERhdGFiYXNlKGFub255bW91
cykgb3V0X3ByaW50Q29sb3IpIHsKKyAgICAgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9
IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVR
VUlSRURfUEFSQU1FVEVSKG91dF9jb2x1bW5OYW1lcywgQCJjb2x1bW5OYW1lcyIpOworICAgICAg
ICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihvdXRfbm90ZXMsIEAibm90
ZXMiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIob3V0
X3ZhbHVlcywgQCJ2YWx1ZXMiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJF
RF9QQVJBTUVURVIob3V0X3BheWxvYWQsIEAicGF5bG9hZCIpOworICAgICAgICBUSFJPV19FWENF
UFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihvdXRfc3FsRXJyb3IsIEAic3FsRXJyb3IiKTsK
KyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIob3V0X2FsdGVy
bmF0ZUNvbG9ycywgQCJhbHRlcm5hdGVDb2xvcnMiKTsKKyAgICAgICAgcHJvdG9jb2xfanNvbk1l
c3NhZ2UtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgdG9KU09OU3RyaW5nQXJyYXkob3V0X2Nv
bHVtbk5hbWVzKSk7CisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm5v
dGVzIl9zLCBvdXRfbm90ZXMpOworICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0RG91
YmxlKCJ0aW1lc3RhbXAiX3MsIG91dF90aW1lc3RhbXApOworICAgICAgICBwcm90b2NvbF9qc29u
TWVzc2FnZS0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIFtvdXRfdmFsdWVzIHRvSlNPTk9iamVjdF0p
OworICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0VmFsdWUoInBheWxvYWQiX3MsIFtv
dXRfcGF5bG9hZCB0b0pTT05PYmplY3RdKTsKKyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2Ut
PnNldEludGVnZXIoImRhdGFiYXNlSWQiX3MsIG91dF9kYXRhYmFzZUlkKTsKKyAgICAgICAgcHJv
dG9jb2xfanNvbk1lc3NhZ2UtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIFtvdXRfc3FsRXJyb3Ig
dG9KU09OT2JqZWN0XSk7CisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJpbmco
InNjcmVlbkNvbG9yIl9zLCB0b1Byb3RvY29sU3RyaW5nKG91dF9zY3JlZW5Db2xvcikpOworICAg
ICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywg
dG9KU09OU3RyaW5nQXJyYXkob3V0X2FsdGVybmF0ZUNvbG9ycykpOworICAgICAgICBwcm90b2Nv
bF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCB0b1Byb3RvY29sU3RyaW5n
KG91dF9wcmludENvbG9yKSk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNw
b25zZShwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJvdG9jb2xfanNvbk1lc3NhZ2UpLCBmYWxz
ZSk7CiAgICAgfTsKIAotICAgIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqb19pbl9jb2x1bW5OYW1l
cyA9IHRvT2JqQ1N0cmluZ0FycmF5KCZpbl9jb2x1bW5OYW1lcyk7CisgICAgTlNBcnJheS8qPE5T
U3RyaW5nPiovICpvX2luX2NvbHVtbk5hbWVzID0gdG9PYmpDU3RyaW5nQXJyYXkoV1RGTW92ZShp
bl9jb2x1bW5OYW1lcykpOwogICAgIE5TU3RyaW5nICpvX2luX25vdGVzID0gaW5fbm90ZXM7CiAg
ICAgZG91YmxlIG9faW5fdGltZXN0YW1wID0gaW5fdGltZXN0YW1wOwotICAgIFJXSVByb3RvY29s
SlNPTk9iamVjdCAqb19pbl92YWx1ZXMgPSBbW1tSV0lQcm90b2NvbEpTT05PYmplY3QgYWxsb2Nd
IGluaXRXaXRoSlNPTk9iamVjdDomaW5fdmFsdWVzXSBhdXRvcmVsZWFzZV07Ci0gICAgUldJUHJv
dG9jb2xKU09OT2JqZWN0ICpvX2luX3BheWxvYWQgPSBbW1tSV0lQcm90b2NvbEpTT05PYmplY3Qg
YWxsb2NdIGluaXRXaXRoSlNPTk9iamVjdDomaW5fcGF5bG9hZF0gYXV0b3JlbGVhc2VdOworICAg
IFJXSVByb3RvY29sSlNPTk9iamVjdCAqb19pbl92YWx1ZXMgPSBbW1tSV0lQcm90b2NvbEpTT05P
YmplY3QgYWxsb2NdIGluaXRXaXRoSlNPTk9iamVjdDpXVEZNb3ZlKGluX3ZhbHVlcyldIGF1dG9y
ZWxlYXNlXTsKKyAgICBSV0lQcm90b2NvbEpTT05PYmplY3QgKm9faW5fcGF5bG9hZCA9IFtbW1JX
SVByb3RvY29sSlNPTk9iamVjdCBhbGxvY10gaW5pdFdpdGhKU09OT2JqZWN0OldURk1vdmUoaW5f
cGF5bG9hZCldIGF1dG9yZWxlYXNlXTsKICAgICBpbnQgb19pbl9kYXRhYmFzZUlkID0gaW5fZGF0
YWJhc2VJZDsKLSAgICBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICpvX2luX3NxbEVycm9yID0g
W1tbVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciBhbGxvY10gaW5pdFdpdGhKU09OT2JqZWN0OiZp
bl9zcWxFcnJvcl0gYXV0b3JlbGVhc2VdOworICAgIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3Ig
Km9faW5fc3FsRXJyb3IgPSBbW1tUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yIGFsbG9jXSBpbml0
V2l0aEpTT05PYmplY3Q6V1RGTW92ZShpbl9zcWxFcnJvcildIGF1dG9yZWxlYXNlXTsKICAgICBP
cHRpb25hbDxUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnM+IG9faW5fc2NyZWVuQ29s
b3IgPSBmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3Jz
Pihpbl9zY3JlZW5Db2xvcik7CiAgICAgaWYgKCFvX2luX3NjcmVlbkNvbG9yKSB7CiAgICAgICAg
IGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNo
ZXI6OkludmFsaWRQYXJhbXMsICJQYXJhbWV0ZXIgJ3NjcmVlbkNvbG9yJyBvZiBtZXRob2QgJ0Rh
dGFiYXNlLmV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycycgY2Fubm90IGJlIHByb2Nlc3NlZCJf
cyk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgTlNBcnJheS8qPE5TU3RyaW5nPiovICpv
X2luX2FsdGVybmF0ZUNvbG9ycyA9IHRvT2JqQ1N0cmluZ0FycmF5KCZpbl9hbHRlcm5hdGVDb2xv
cnMpOwotICAgIE9wdGlvbmFsPFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQ
YXJhbWV0ZXJzUHJpbnRDb2xvcj4gb19pbl9wcmludENvbG9yID0gZnJvbVByb3RvY29sU3RyaW5n
PFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xv
cj4oaW5fcHJpbnRDb2xvcik7CisgICAgTlNBcnJheS8qPE5TU3RyaW5nPiovICpvX2luX2FsdGVy
bmF0ZUNvbG9ycyA9IHRvT2JqQ1N0cmluZ0FycmF5KFdURk1vdmUoaW5fYWx0ZXJuYXRlQ29sb3Jz
KSk7CisgICAgT3B0aW9uYWw8VGVzdFByb3RvY29sRGF0YWJhc2UoYW5vbnltb3VzKT4gb19pbl9w
cmludENvbG9yID0gZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbERhdGFiYXNlKGFub255
bW91cyk+KGluX3ByaW50Q29sb3IpOwogICAgIGlmICghb19pbl9wcmludENvbG9yKSB7CiAgICAg
ICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3Bh
dGNoZXI6OkludmFsaWRQYXJhbXMsICJQYXJhbWV0ZXIgJ3ByaW50Q29sb3InIG9mIG1ldGhvZCAn
RGF0YWJhc2UuZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzJyBjYW5ub3QgYmUgcHJvY2Vzc2Vk
Il9zKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLQogICAgIFttX2RlbGVnYXRlIGV4ZWN1dGVO
b09wdGlvbmFsUGFyYW1ldGVyc1dpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vz
c0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjayBjb2x1bW5OYW1lczpvX2luX2NvbHVtbk5hbWVzIG5v
dGVzOm9faW5fbm90ZXMgdGltZXN0YW1wOm9faW5fdGltZXN0YW1wIHZhbHVlczpvX2luX3ZhbHVl
cyBwYXlsb2FkOm9faW5fcGF5bG9hZCBkYXRhYmFzZUlkOm9faW5fZGF0YWJhc2VJZCBzcWxFcnJv
cjpvX2luX3NxbEVycm9yIHNjcmVlbkNvbG9yOm9faW5fc2NyZWVuQ29sb3IudmFsdWUoKSBhbHRl
cm5hdGVDb2xvcnM6b19pbl9hbHRlcm5hdGVDb2xvcnMgcHJpbnRDb2xvcjpvX2luX3ByaW50Q29s
b3IudmFsdWUoKV07CiB9CiAKQEAgLTEyMTMsOCArMTE4NSw4IEBAIF9fYXR0cmlidXRlX18oKHZp
c2liaWxpdHkgKCJkZWZhdWx0IikpKQogCiBAcHJvdG9jb2wgVGVzdFByb3RvY29sRGF0YWJhc2VE
b21haW5IYW5kbGVyIDxOU09iamVjdD4KIEBvcHRpb25hbAotLSAodm9pZClleGVjdXRlQWxsT3B0
aW9uYWxQYXJhbWV0ZXJzV2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9y
KSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKShOU0FycmF5Lyo8TlNTdHJp
bmc+Ki8gKipjb2x1bW5OYW1lcywgTlNTdHJpbmcgKipub3RlcywgZG91YmxlICp0aW1lc3RhbXAs
IFJXSVByb3RvY29sSlNPTk9iamVjdCAqKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICoq
cGF5bG9hZCwgaW50ICpkYXRhYmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoqc3Fs
RXJyb3IsIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyAqc2NyZWVuQ29sb3IsIE5T
QXJyYXkvKjxOU1N0cmluZz4qLyAqKmFsdGVybmF0ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0YWJh
c2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvciAqcHJpbnRDb2xvcikpc3Vj
Y2Vzc0NhbGxiYWNrIGNvbHVtbk5hbWVzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiopY29sdW1u
TmFtZXMgbm90ZXM6KE5TU3RyaW5nICoqKW5vdGVzIHRpbWVzdGFtcDooZG91YmxlICopdGltZXN0
YW1wIHZhbHVlczooUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqKXZhbHVlcyBwYXlsb2FkOihSV0lQ
cm90b2NvbEpTT05PYmplY3QgKiopcGF5bG9hZCBkYXRhYmFzZUlkOihpbnQgKilkYXRhYmFzZUlk
IHNxbEVycm9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoqKXNxbEVycm9yIHNjcmVlbkNv
bG9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgKilzY3JlZW5Db2xvciBhbHRl
cm5hdGVDb2xvcnM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKilhbHRlcm5hdGVDb2xvcnMgcHJp
bnRDb2xvcjooVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJz
UHJpbnRDb2xvciAqKXByaW50Q29sb3I7Ci0tICh2b2lkKWV4ZWN1dGVOb09wdGlvbmFsUGFyYW1l
dGVyc1dpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxs
YmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikoTlNBcnJheS8qPE5TU3RyaW5nPiovICpjb2x1
bW5OYW1lcywgTlNTdHJpbmcgKm5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBSV0lQcm90b2NvbEpT
T05PYmplY3QgKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpwYXlsb2FkLCBpbnQgZGF0
YWJhc2VJZCwgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqc3FsRXJyb3IsIFRlc3RQcm90b2Nv
bERhdGFiYXNlUHJpbWFyeUNvbG9ycyBzY3JlZW5Db2xvciwgTlNBcnJheS8qPE5TU3RyaW5nPiov
ICphbHRlcm5hdGVDb2xvcnMsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZU5vT3B0aW9uYWxQ
YXJhbWV0ZXJzUHJpbnRDb2xvciBwcmludENvbG9yKSlzdWNjZXNzQ2FsbGJhY2sgY29sdW1uTmFt
ZXM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWNvbHVtbk5hbWVzIG5vdGVzOihOU1N0cmluZyAq
KW5vdGVzIHRpbWVzdGFtcDooZG91YmxlKXRpbWVzdGFtcCB2YWx1ZXM6KFJXSVByb3RvY29sSlNP
Tk9iamVjdCAqKXZhbHVlcyBwYXlsb2FkOihSV0lQcm90b2NvbEpTT05PYmplY3QgKilwYXlsb2Fk
IGRhdGFiYXNlSWQ6KGludClkYXRhYmFzZUlkIHNxbEVycm9yOihUZXN0UHJvdG9jb2xEYXRhYmFz
ZUVycm9yICopc3FsRXJyb3Igc2NyZWVuQ29sb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFy
eUNvbG9ycylzY3JlZW5Db2xvciBhbHRlcm5hdGVDb2xvcnM6KE5TQXJyYXkvKjxOU1N0cmluZz4q
LyAqKWFsdGVybmF0ZUNvbG9ycyBwcmludENvbG9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1
dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3IpcHJpbnRDb2xvcjsKKy0gKHZvaWQpZXhl
Y3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1dpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3Ry
aW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikoTlNBcnJh
eS8qPE5TU3RyaW5nPiovICoqY29sdW1uTmFtZXMsIE5TU3RyaW5nICoqbm90ZXMsIGRvdWJsZSAq
dGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKip2YWx1ZXMsIFJXSVByb3RvY29sSlNP
Tk9iamVjdCAqKnBheWxvYWQsIGludCAqZGF0YWJhc2VJZCwgVGVzdFByb3RvY29sRGF0YWJhc2VF
cnJvciAqKnNxbEVycm9yLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgKnNjcmVl
bkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiphbHRlcm5hdGVDb2xvcnMsIFRlc3RQcm90
b2NvbERhdGFiYXNlKGFub255bW91cykgKnByaW50Q29sb3IpKXN1Y2Nlc3NDYWxsYmFjayBjb2x1
bW5OYW1lczooTlNBcnJheS8qPE5TU3RyaW5nPiovICoqKWNvbHVtbk5hbWVzIG5vdGVzOihOU1N0
cmluZyAqKilub3RlcyB0aW1lc3RhbXA6KGRvdWJsZSAqKXRpbWVzdGFtcCB2YWx1ZXM6KFJXSVBy
b3RvY29sSlNPTk9iamVjdCAqKil2YWx1ZXMgcGF5bG9hZDooUldJUHJvdG9jb2xKU09OT2JqZWN0
ICoqKXBheWxvYWQgZGF0YWJhc2VJZDooaW50ICopZGF0YWJhc2VJZCBzcWxFcnJvcjooVGVzdFBy
b3RvY29sRGF0YWJhc2VFcnJvciAqKilzcWxFcnJvciBzY3JlZW5Db2xvcjooVGVzdFByb3RvY29s
RGF0YWJhc2VQcmltYXJ5Q29sb3JzICopc2NyZWVuQ29sb3IgYWx0ZXJuYXRlQ29sb3JzOihOU0Fy
cmF5Lyo8TlNTdHJpbmc+Ki8gKiopYWx0ZXJuYXRlQ29sb3JzIHByaW50Q29sb3I6KFRlc3RQcm90
b2NvbERhdGFiYXNlKGFub255bW91cykgKilwcmludENvbG9yOworLSAodm9pZClleGVjdXRlTm9P
cHRpb25hbFBhcmFtZXRlcnNXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJy
b3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKE5TQXJyYXkvKjxOU1N0
cmluZz4qLyAqY29sdW1uTmFtZXMsIE5TU3RyaW5nICpub3RlcywgZG91YmxlIHRpbWVzdGFtcCwg
UldJUHJvdG9jb2xKU09OT2JqZWN0ICp2YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqcGF5
bG9hZCwgaW50IGRhdGFiYXNlSWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKnNxbEVycm9y
LCBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgc2NyZWVuQ29sb3IsIE5TQXJyYXkv
KjxOU1N0cmluZz4qLyAqYWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZShhbm9u
eW1vdXMpIHByaW50Q29sb3IpKXN1Y2Nlc3NDYWxsYmFjayBjb2x1bW5OYW1lczooTlNBcnJheS8q
PE5TU3RyaW5nPiovICopY29sdW1uTmFtZXMgbm90ZXM6KE5TU3RyaW5nICopbm90ZXMgdGltZXN0
YW1wOihkb3VibGUpdGltZXN0YW1wIHZhbHVlczooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopdmFs
dWVzIHBheWxvYWQ6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXBheWxvYWQgZGF0YWJhc2VJZDoo
aW50KWRhdGFiYXNlSWQgc3FsRXJyb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKilzcWxF
cnJvciBzY3JlZW5Db2xvcjooVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzKXNjcmVl
bkNvbG9yIGFsdGVybmF0ZUNvbG9yczooTlNBcnJheS8qPE5TU3RyaW5nPiovICopYWx0ZXJuYXRl
Q29sb3JzIHByaW50Q29sb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlKGFub255bW91cykpcHJpbnRD
b2xvcjsKIEBlbmQKIAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0u
anNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZXhwZWN0ZWQvZGVmaW5pdGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbi1yZXN1bHQKaW5k
ZXggZDAyYmVkN2I4ZDZlMmZlMDJhNTI0MmVkMTIyZjRhMjg0ZjkwYzliOS4uYjMwZGYxNzBhYWJh
NTk3YjM2MTk2MjRiYWQ2NzkzNTE1MzNlNDQ4YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2RlZmluaXRpb25zLXdpdGgt
bWFjLXBsYXRmb3JtLmpzb24tcmVzdWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9kZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9y
bS5qc29uLXJlc3VsdApAQCAtNzYsNyArNzYsNyBAQCBJbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRl
RG9tYWluKCJOZXR3b3JrIiwgbnVsbCk7CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKIAotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVk
ZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yRnJvbnRlbmRSb3V0ZXIuaD4KIApAQCAtOTYsNyArOTYsNyBAQCBjbGFzcyBBbHRlcm5hdGVO
ZXR3b3JrQmFja2VuZERpc3BhdGNoZXIgOiBwdWJsaWMgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNo
ZXIgewogcHVibGljOgogICAgIHZpcnR1YWwgfkFsdGVybmF0ZU5ldHdvcmtCYWNrZW5kRGlzcGF0
Y2hlcigpIHsgfQogI2lmIENPTU1BTkQtTUFDCi0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJj
ZShsb25nIGNhbGxJZCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UobG9uZyBw
cm90b2NvbF9jYWxsSWQpID0gMDsKICNlbmRpZiAvLyBDT01NQU5ELU1BQwogfTsKICNlbmRpZiAv
LyBET01BSU4tTUFDCkBAIC0xNDAsMTEgKzE0MCwxNCBAQCBwdWJsaWM6CiAKICNpbmNsdWRlICJU
ZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx0dXBsZT4KKyNpbmNsdWRlIDx3dGYvRXhw
ZWN0ZWQuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKLXR5cGVkZWYgU3RyaW5nIEVy
cm9yU3RyaW5nOworCiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVS
UykKICNpZiBET01BSU4tTUFDCkBAIC0xNTYsNyArMTU5LDcgQEAgY2xhc3MgQWx0ZXJuYXRlTmV0
d29ya0JhY2tlbmREaXNwYXRjaGVyOwogY2xhc3MgTmV0d29ya0JhY2tlbmREaXNwYXRjaGVySGFu
ZGxlciB7CiBwdWJsaWM6CiAjaWYgQ09NTUFORC1NQUMKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJl
c291cmNlKEVycm9yU3RyaW5nJikgPSAwOworICAgIHZpcnR1YWwgUHJvdG9jb2w6OkVycm9yU3Ry
aW5nT3I8dm9pZD4gbG9hZFJlc291cmNlKCkgPSAwOwogI2VuZGlmIC8vIENPTU1BTkQtTUFDCiBw
cm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB+TmV0d29ya0JhY2tlbmREaXNwYXRjaGVySGFuZGxlcigp
OwpAQCAtMTY3LDEwICsxNzAsMTAgQEAgcHJvdGVjdGVkOgogY2xhc3MgTmV0d29ya0JhY2tlbmRE
aXNwYXRjaGVyIGZpbmFsIDogcHVibGljIFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIHsK
IHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRl
KEJhY2tlbmREaXNwYXRjaGVyJiwgTmV0d29ya0JhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwot
ICAgIHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBS
ZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpIGZpbmFsOworICAgIHZvaWQgZGlzcGF0Y2gobG9u
ZyBwcm90b2NvbF9jYWxsSWQsIGNvbnN0IFN0cmluZyYgcHJvdG9jb2xfbWV0aG9kLCBSZWY8SlNP
Tjo6T2JqZWN0PiYmIHByb3RvY29sX21lc3NhZ2UpIGZpbmFsOwogcHJpdmF0ZToKICNpZiBDT01N
QU5ELU1BQwotICAgIHZvaWQgbG9hZFJlc291cmNlKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNP
Tjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOworICAgIHZvaWQgbG9hZFJlc291cmNlKGxvbmcgcHJv
dG9jbF9jYWxsSWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfcGFyYW1ldGVycyk7
CiAjZW5kaWYgLy8gQ09NTUFORC1NQUMKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9E
SVNQQVRDSEVSUykKIHB1YmxpYzoKQEAgLTIyMSw5ICsyMjQsNyBAQCBwcml2YXRlOgogI2luY2x1
ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4K
ICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3Ry
aW5nLmg+CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKICNp
bmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCkBAIC0yNDgsNDEgKzI0
OSw0MSBAQCBOZXR3b3JrQmFja2VuZERpc3BhdGNoZXI6Ok5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hl
cihCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpcwogICAgIG1fYmFja2VuZERpc3BhdGNoZXIt
PnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbigiTmV0d29yayJfcywgdGhpcyk7CiB9CiAKLXZv
aWQgTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29u
c3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkKK3ZvaWQgTmV0
d29ya0JhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHByb3RvY29sX2NhbGxJZCwgY29u
c3QgU3RyaW5nJiBwcm90b2NvbF9tZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xf
bWVzc2FnZSkKIHsKICAgICBSZWY8TmV0d29ya0JhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0
aGlzKTsKIAotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnM7Ci0gICAgbWVzc2Fn
ZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3MsIHBhcmFtZXRlcnMpOworICAgIGF1dG8gcHJvdG9jb2xf
cGFyYW1ldGVycyA9IHByb3RvY29sX21lc3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9zKTsKIAog
I2lmIENPTU1BTkQtTUFDCi0gICAgaWYgKG1ldGhvZCA9PSAibG9hZFJlc291cmNlIikgewotICAg
ICAgICBsb2FkUmVzb3VyY2UocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKKyAgICBp
ZiAocHJvdG9jb2xfbWV0aG9kID09ICJsb2FkUmVzb3VyY2UiKSB7CisgICAgICAgIGxvYWRSZXNv
dXJjZShwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJvdG9jb2xfcGFyYW1ldGVycykpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmIC8vIENPTU1BTkQtTUFDCiAKLSAgICBtX2JhY2tl
bmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRo
b2ROb3RGb3VuZCwgIidOZXR3b3JrLiIgKyBtZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7Cisg
ICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0
Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29yay4iICsgcHJvdG9jb2xfbWV0aG9kICsgIicg
d2FzIG5vdCBmb3VuZCIpOwogfQogCiAjaWYgQ09NTUFORC1NQUMKLXZvaWQgTmV0d29ya0JhY2tl
bmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpP
YmplY3Q+JiYpCit2b2lkIE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlKGxv
bmcgcHJvdG9jb2xfY2FsbElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQogewogI2lmIEVOQUJM
RShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogICAgIGlmIChtX2FsdGVybmF0ZURp
c3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVzb3VyY2Uo
cmVxdWVzdElkKTsKKyAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVzb3VyY2Uo
cHJvdG9jb2xfY2FsbElkKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZiAvLyBFTkFC
TEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIAotICAgIEVycm9yU3RyaW5nIGVy
cm9yOwotICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRl
KCk7Ci0gICAgbV9hZ2VudC0+bG9hZFJlc291cmNlKGVycm9yKTsKKyAgICBhdXRvIHJlc3VsdCA9
IG1fYWdlbnQtPmxvYWRSZXNvdXJjZSgpOworICAgIGlmICghcmVzdWx0KSB7CisgICAgICAgIEFT
U0VSVCghcmVzdWx0LmVycm9yKCkuaXNFbXB0eSgpKTsKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0
Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3Is
IHJlc3VsdC5lcnJvcigpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIGlmICghZXJy
b3IubGVuZ3RoKCkpCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShy
ZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2UpOwotICAgIGVsc2UKLSAgICAgICAgbV9i
YWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6
U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKKyAgICBhdXRvIHByb3RvY29sX2pzb25NZXNz
YWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5z
ZW5kUmVzcG9uc2UocHJvdG9jb2xfY2FsbElkLCBXVEZNb3ZlKHByb3RvY29sX2pzb25NZXNzYWdl
KSwgZmFsc2UpOwogfQogI2VuZGlmIC8vIENPTU1BTkQtTUFDCiAjZW5kaWYgLy8gRE9NQUlOLU1B
QwpAQCAtMzI1LDYgKzMyNiw3IEBAIHZvaWQgTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyOjpsb2Fk
UmVzb3VyY2UobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+CiAKICNpbmNsdWRl
ICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNp
bmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
IAogbmFtZXNwYWNlIEluc3BlY3RvciB7CkBAIC0zODEsNyArMzgzLDYgQEAgcHJpdmF0ZToKICNp
bmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3Ry
aW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC0zODksMTAgKzM5MCwxMCBAQCBu
YW1lc3BhY2UgSW5zcGVjdG9yIHsKICNpZiBFVkVOVC1NQUMKIHZvaWQgTmV0d29ya0Zyb250ZW5k
RGlzcGF0Y2hlcjo6cmVzb3VyY2VMb2FkZWQoKQogewotICAgIFJlZjxKU09OOjpPYmplY3Q+IGpz
b25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0
U3RyaW5nKCJtZXRob2QiX3MsICJOZXR3b3JrLnJlc291cmNlTG9hZGVkIl9zKTsKKyAgICBhdXRv
IHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBwcm90
b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJOZXR3b3JrLnJlc291cmNl
TG9hZGVkIl9zKTsKIAotICAgIG1fZnJvbnRlbmRSb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdl
LT50b0pTT05TdHJpbmcoKSk7CisgICAgbV9mcm9udGVuZFJvdXRlci5zZW5kRXZlbnQocHJvdG9j
b2xfanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKIH0KICNlbmRpZiAvLyBFVkVOVC1NQUMK
ICNlbmRpZiAvLyBET01BSU4tTUFDCkBAIC00MzQsNyArNDM1LDkgQEAgdm9pZCBOZXR3b3JrRnJv
bnRlbmREaXNwYXRjaGVyOjpyZXNvdXJjZUxvYWRlZCgpCiAjcHJhZ21hIG9uY2UKIAogI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KLSNpbmNsdWRlIDx3
dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8
d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVz
cGFjZSBJbnNwZWN0b3IgewogCkBAIC00NjEsNyArNDY0LDcgQEAgY2xhc3MgTmV0d29ya0Vycm9y
OwogbmFtZXNwYWNlIE5ldHdvcmsgewogCiAjaWYgVFlQRS1NQUMKLWNsYXNzIE5ldHdvcmtFcnJv
ciA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKK2NsYXNzIE5ldHdvcmtFcnJvciBmaW5hbCA6
IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKIHB1YmxpYzoKICAgICBlbnVtIHsKICAgICAgICAg
Tm9GaWVsZHNTZXQgPSAwLApAQCAtNDg4LDE3ICs0OTEsMTcgQEAgcHVibGljOgogICAgICAgICBm
cmllbmQgY2xhc3MgTmV0d29ya0Vycm9yOwogICAgIHB1YmxpYzoKIAotICAgICAgICBCdWlsZGVy
PFNUQVRFIHwgTWVzc2FnZVNldD4mIHNldE1lc3NhZ2UoY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAg
ICAgICAgQnVpbGRlcjxTVEFURSB8IE1lc3NhZ2VTZXQ+JiBzZXRNZXNzYWdlKGNvbnN0IFN0cmlu
ZyYgaW5fbWVzc2FnZSkKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShT
VEFURSAmIE1lc3NhZ2VTZXQpLCBwcm9wZXJ0eV9tZXNzYWdlX2FscmVhZHlfc2V0KTsKLSAgICAg
ICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm1lc3NhZ2UiX3MsIHZhbHVlKTsKKyAgICAgICAg
ICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm1lc3NhZ2UiX3MsIGluX21lc3NhZ2UpOwogICAgICAg
ICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxNZXNzYWdlU2V0PigpOwogICAgICAgICB9CiAKLSAgICAg
ICAgQnVpbGRlcjxTVEFURSB8IENvZGVTZXQ+JiBzZXRDb2RlKGludCB2YWx1ZSkKKyAgICAgICAg
QnVpbGRlcjxTVEFURSB8IENvZGVTZXQ+JiBzZXRDb2RlKGludCBpbl9jb2RlKQogICAgICAgICB7
CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQ29kZVNldCksIHByb3BlcnR5
X2NvZGVfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldEludGVnZXIoImNv
ZGUiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRJbnRlZ2VyKCJjb2RlIl9z
LCBpbl9jb2RlKTsKICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Q29kZVNldD4oKTsKICAg
ICAgICAgfQogCkBAIC01NzAsOCArNTczLDcgQEAgcHVibGljOgogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKIAotI2luY2x1ZGUgPHd0Zi9PcHRp
b25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvQXNz
ZXJ0aW9ucy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtNjMxLDcgKzYzMyw3IEBA
IGNsYXNzIE9iakNJbnNwZWN0b3JOZXR3b3JrQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJs
aWMgQWx0ZXJuYXRlTmV0d29ya0JhY2tlCiBwdWJsaWM6CiAgICAgT2JqQ0luc3BlY3Rvck5ldHdv
cmtCYWNrZW5kRGlzcGF0Y2hlcihpZDxUZXN0UHJvdG9jb2xOZXR3b3JrRG9tYWluSGFuZGxlcj4g
aGFuZGxlcikgeyBtX2RlbGVnYXRlID0gaGFuZGxlcjsgfQogI2lmIENPTU1BTkQtTUFDCi0gICAg
dm9pZCBsb2FkUmVzb3VyY2UobG9uZyByZXF1ZXN0SWQpIGZpbmFsOworICAgIHZvaWQgbG9hZFJl
c291cmNlKGxvbmcgcHJvdG9jb2xfY2FsbElkKSBmaW5hbDsKICNlbmRpZiAvLyBDT01NQU5ELU1B
QwogcHJpdmF0ZToKICAgICBSZXRhaW5QdHI8aWQ8VGVzdFByb3RvY29sTmV0d29ya0RvbWFpbkhh
bmRsZXI+PiBtX2RlbGVnYXRlOwpAQCAtNjgzLDIxICs2ODUsMjIgQEAgbmFtZXNwYWNlIEluc3Bl
Y3RvciB7CiAKICNpZiBET01BSU4tTUFDCiAjaWYgQ09NTUFORC1NQUMKLXZvaWQgT2JqQ0luc3Bl
Y3Rvck5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlKGxvbmcgcmVxdWVzdElk
KQordm9pZCBPYmpDSW5zcGVjdG9yTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3Vy
Y2UobG9uZyBwcm90b2NvbF9jYWxsSWQpCiB7CiAgICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25k
c1RvU2VsZWN0b3I6QHNlbGVjdG9yKGxvYWRSZXNvdXJjZVdpdGhFcnJvckNhbGxiYWNrOnN1Y2Nl
c3NDYWxsYmFjazopXSkgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90
b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAi
J05ldHdvcmsubG9hZFJlc291cmNlJyB3YXMgbm90IGZvdW5kIl9zKTsKKyAgICAgICAgYmFja2Vu
ZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxsSWQsIEJhY2tl
bmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidOZXR3b3JrLmxvYWRSZXNvdXJjZScgd2Fz
IG5vdCBmb3VuZCJfcyk7CiAgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5n
RXJyb3JzKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZCBlcnJvckNhbGxiYWNr
ID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVw
b3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJv
ciwgZXJyb3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVy
cm9yKHByb3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJv
cik7CiAgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CiAg
ICAgfTsKIAogICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF57Ci0gICAgICAgIGJhY2tlbmREaXNw
YXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIEpTT046Ok9iamVjdDo6Y3JlYXRlKCks
IGZhbHNlKTsKKyAgICAgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVj
dDo6Y3JlYXRlKCk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShw
cm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJvdG9jb2xfanNvbk1lc3NhZ2UpLCBmYWxzZSk7CiAg
ICAgfTsKIAogICAgIFttX2RlbGVnYXRlIGxvYWRSZXNvdXJjZVdpdGhFcnJvckNhbGxiYWNrOmVy
cm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107CkBAIC05MTEsOSAr
OTE0LDkgQEAgdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKIHsKICAgICBjb25zdCBGcm9udGVu
ZFJvdXRlciYgcm91dGVyID0gX2NvbnRyb2xsZXItPmZyb250ZW5kUm91dGVyKCk7CiAKLSAgICBS
ZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0g
ICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiTmV0d29yay5yZXNvdXJjZUxv
YWRlZCJfcyk7Ci0gICAgcm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5n
KCkpOworICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0
ZSgpOworICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIk5l
dHdvcmsucmVzb3VyY2VMb2FkZWQiX3MpOworICAgIHJvdXRlci5zZW5kRXZlbnQocHJvdG9jb2xf
anNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKIH0KICNlbmRpZiAvLyBFVkVOVC1NQUMKIApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2V4cGVjdGVkL2RvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZG9tYWluLWRlYnVn
Z2FibGVUeXBlcy5qc29uLXJlc3VsdAppbmRleCBhNDhmNmY5YjVhMTk3OTgyYWQ2OTEwMjlhZWFh
ZGM2NzUyZjgxMzJhLi5jODc1MTQ4ZjNkYWYwNWVkMzFhY2VkOTdjMzJlYjNiYjc1NDdmOGFiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
ZXhwZWN0ZWQvZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5qc29uLXJlc3VsdAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZG9tYWluLWRl
YnVnZ2FibGVUeXBlcy5qc29uLXJlc3VsdApAQCAtNzAsNyArNzAsNyBAQCBJbnNwZWN0b3JCYWNr
ZW5kLmFjdGl2YXRlRG9tYWluKCJEb21haW4iLCBbIndlYi1wYWdlIl0pOwogCiAjaWYgRU5BQkxF
KElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAKLSNpbmNsdWRlICJUZXN0UHJvdG9j
b2xUeXBlcy5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgogI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CiAKQEAgLTg4LDcgKzg4LDcg
QEAgcHJpdmF0ZToKIGNsYXNzIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyIDogcHVi
bGljIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5B
bHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlcigpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBD
b21tYW5kKGxvbmcgY2FsbElkKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIENvbW1hbmQobG9uZyBw
cm90b2NvbF9jYWxsSWQpID0gMDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgpAQCAt
MTMwLDExICsxMzAsMTQgQEAgcHVibGljOgogCiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0
cy5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
Lmg+CisjaW5jbHVkZSA8dHVwbGU+CisjaW5jbHVkZSA8d3RmL0V4cGVjdGVkLmg+CisjaW5jbHVk
ZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5h
bWVzcGFjZSBJbnNwZWN0b3IgewogCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKwogCiAj
aWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiBjbGFzcyBBbHRlcm5h
dGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjsKQEAgLTE0Miw3ICsxNDUsNyBAQCBjbGFzcyBBbHRl
cm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjsKIAogY2xhc3MgRG9tYWluQmFja2VuZERpc3Bh
dGNoZXJIYW5kbGVyIHsKIHB1YmxpYzoKLSAgICB2aXJ0dWFsIHZvaWQgQ29tbWFuZChFcnJvclN0
cmluZyYpID0gMDsKKyAgICB2aXJ0dWFsIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IENv
bW1hbmQoKSA9IDA7CiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB+RG9tYWluQmFja2VuZERpc3Bh
dGNoZXJIYW5kbGVyKCk7CiB9OwpAQCAtMTUwLDkgKzE1Myw5IEBAIHByb3RlY3RlZDoKIGNsYXNz
IERvbWFpbkJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIFN1cHBsZW1lbnRhbEJhY2tl
bmREaXNwYXRjaGVyIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPERvbWFpbkJhY2tlbmREaXNw
YXRjaGVyPiBjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImLCBEb21haW5CYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXIqKTsKLSAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJp
bmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKSBmaW5hbDsKKyAgICB2b2lk
IGRpc3BhdGNoKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBjb25zdCBTdHJpbmcmIHByb3RvY29sX21l
dGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9tZXNzYWdlKSBmaW5hbDsKIHByaXZh
dGU6Ci0gICAgdm9pZCBDb21tYW5kKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0
PiYmIHBhcmFtZXRlcnMpOworICAgIHZvaWQgQ29tbWFuZChsb25nIHByb3RvY2xfY2FsbElkLCBS
ZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX3BhcmFtZXRlcnMpOwogI2lmIEVOQUJMRShJ
TlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogcHVibGljOgogICAgIHZvaWQgc2V0QWx0
ZXJuYXRlRGlzcGF0Y2hlcihBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlciogYWx0ZXJu
YXRlRGlzcGF0Y2hlcikgeyBtX2FsdGVybmF0ZURpc3BhdGNoZXIgPSBhbHRlcm5hdGVEaXNwYXRj
aGVyOyB9CkBAIC0yMDEsOSArMjA0LDcgQEAgcHJpdmF0ZToKICNpbmNsdWRlICJUZXN0QmFja2Vu
ZERpc3BhdGNoZXJzLmgiCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9u
dGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CiAjaW5jbHVkZSA8d3Rm
L05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiAjaWYg
RU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAjaW5jbHVkZSAiVGVzdEFs
dGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgpAQCAtMjI1LDM4ICsyMjYsMzggQEAgRG9tYWlu
QmFja2VuZERpc3BhdGNoZXI6OkRvbWFpbkJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRj
aGVyJiBiYWNrZW5kRGlzcGEKICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3Bh
dGNoZXJGb3JEb21haW4oIkRvbWFpbiJfcywgdGhpcyk7CiB9CiAKLXZvaWQgRG9tYWluQmFja2Vu
ZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhv
ZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKQordm9pZCBEb21haW5CYWNrZW5kRGlzcGF0
Y2hlcjo6ZGlzcGF0Y2gobG9uZyBwcm90b2NvbF9jYWxsSWQsIGNvbnN0IFN0cmluZyYgcHJvdG9j
b2xfbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX21lc3NhZ2UpCiB7CiAgICAg
UmVmPERvbWFpbkJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKIAotICAgIFJlZlB0
cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnM7Ci0gICAgbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJh
bXMiX3MsIHBhcmFtZXRlcnMpOworICAgIGF1dG8gcHJvdG9jb2xfcGFyYW1ldGVycyA9IHByb3Rv
Y29sX21lc3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9zKTsKIAotICAgIGlmIChtZXRob2QgPT0g
IkNvbW1hbmQiKSB7Ci0gICAgICAgIENvbW1hbmQocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRl
cnMpKTsKKyAgICBpZiAocHJvdG9jb2xfbWV0aG9kID09ICJDb21tYW5kIikgeworICAgICAgICBD
b21tYW5kKHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9wYXJhbWV0ZXJzKSk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQ
cm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEb21haW4u
IiArIG1ldGhvZCArICInIHdhcyBub3QgZm91bmQiKTsKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVy
LT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwg
IidEb21haW4uIiArIHByb3RvY29sX21ldGhvZCArICInIHdhcyBub3QgZm91bmQiKTsKIH0KIAot
dm9pZCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Q29tbWFuZChsb25nIHJlcXVlc3RJZCwgUmVm
UHRyPEpTT046Ok9iamVjdD4mJikKK3ZvaWQgRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkNvbW1h
bmQobG9uZyBwcm90b2NvbF9jYWxsSWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCiB7CiAjaWYg
RU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAgICAgaWYgKG1fYWx0ZXJu
YXRlRGlzcGF0Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPkNvbW1hbmQo
cmVxdWVzdElkKTsKKyAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5Db21tYW5kKHByb3Rv
Y29sX2NhbGxJZCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKElO
U1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAKLSAgICBFcnJvclN0cmluZyBlcnJvcjsK
LSAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwot
ICAgIG1fYWdlbnQtPkNvbW1hbmQoZXJyb3IpOworICAgIGF1dG8gcmVzdWx0ID0gbV9hZ2VudC0+
Q29tbWFuZCgpOworICAgIGlmICghcmVzdWx0KSB7CisgICAgICAgIEFTU0VSVCghcmVzdWx0LmVy
cm9yKCkuaXNFbXB0eSgpKTsKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJv
dG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIHJlc3VsdC5lcnJvcigp
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCi0g
ICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1v
dmUocmVzdWx0KSwgZmFsc2UpOwotICAgIGVsc2UKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdU
Rk1vdmUoZXJyb3IpKTsKKyAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2Jq
ZWN0OjpjcmVhdGUoKTsKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocHJv
dG9jb2xfY2FsbElkLCBXVEZNb3ZlKHByb3RvY29sX2pzb25NZXNzYWdlKSwgZmFsc2UpOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKQEAgLTI5Nyw2ICsyOTgsNyBAQCB2b2lkIERvbWFp
bkJhY2tlbmREaXNwYXRjaGVyOjpDb21tYW5kKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6
T2JqZWN0PiYmKQogCiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUg
PHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewpAQCAtMzQ5LDE2
ICszNTEsMTUgQEAgcHJpdmF0ZToKICNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5o
IgogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4K
LSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3Igewog
CiB2b2lkIERvbWFpbkZyb250ZW5kRGlzcGF0Y2hlcjo6RXZlbnQoKQogewotICAgIFJlZjxKU09O
OjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBqc29u
TWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJEb21haW4uRXZlbnQiX3MpOworICAgIGF1
dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIHBy
b3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRvbWFpbi5FdmVudCJf
cyk7CiAKLSAgICBtX2Zyb250ZW5kUm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09O
U3RyaW5nKCkpOworICAgIG1fZnJvbnRlbmRSb3V0ZXIuc2VuZEV2ZW50KHByb3RvY29sX2pzb25N
ZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgpA
QCAtMzk4LDcgKzM5OSw5IEBAIHZvaWQgRG9tYWluRnJvbnRlbmREaXNwYXRjaGVyOjpFdmVudCgp
CiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3Rv
Y29sVHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9K
U09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC00NTIsOCArNDU1
LDcgQEAgbmFtZXNwYWNlIFByb3RvY29sIHsKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRl
ICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAKLSNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KLSNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4K
IAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKQEAgLTUwOSw3ICs1MTEsNyBAQCBjbGFzcyBPYmpD
SW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgQWx0ZXJuYXRl
RG9tYWluQmFja2VuZAogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAg
IE9iakNJbnNwZWN0b3JEb21haW5CYWNrZW5kRGlzcGF0Y2hlcihpZDxUZXN0UHJvdG9jb2xEb21h
aW5Eb21haW5IYW5kbGVyPiBoYW5kbGVyKSB7IG1fZGVsZWdhdGUgPSBoYW5kbGVyOyB9Ci0gICAg
dm9pZCBDb21tYW5kKGxvbmcgcmVxdWVzdElkKSBmaW5hbDsKKyAgICB2b2lkIENvbW1hbmQobG9u
ZyBwcm90b2NvbF9jYWxsSWQpIGZpbmFsOwogcHJpdmF0ZToKICAgICBSZXRhaW5QdHI8aWQ8VGVz
dFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4+IG1fZGVsZWdhdGU7CiB9OwpAQCAtNTU3LDIx
ICs1NTksMjIgQEAgcHJpdmF0ZToKIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKLXZvaWQgT2Jq
Q0luc3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpDb21tYW5kKGxvbmcgcmVxdWVzdElk
KQordm9pZCBPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkNvbW1hbmQobG9u
ZyBwcm90b2NvbF9jYWxsSWQpCiB7CiAgICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25kc1RvU2Vs
ZWN0b3I6QHNlbGVjdG9yKENvbW1hbmRXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6
KV0pIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihy
ZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEb21haW4uQ29t
bWFuZCcgd2FzIG5vdCBmb3VuZCJfcyk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJl
cG9ydFByb3RvY29sRXJyb3IocHJvdG9jb2xfY2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0
aG9kTm90Rm91bmQsICInRG9tYWluLkNvbW1hbmQnIHdhcyBub3QgZm91bmQiX3MpOwogICAgICAg
ICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCiAgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7
Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVz
dElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAgICAgYmFj
a2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxsSWQsIEJh
Y2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwogICAgICAgICBiYWNrZW5kRGlz
cGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgIH07CiAKICAgICBpZCBzdWNjZXNz
Q2FsbGJhY2sgPSBeewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2Uo
cmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7CisgICAgICAgIGF1dG8g
cHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBi
YWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocHJvdG9jb2xfY2FsbElkLCBXVEZNb3Zl
KHByb3RvY29sX2pzb25NZXNzYWdlKSwgZmFsc2UpOwogICAgIH07CiAKICAgICBbbV9kZWxlZ2F0
ZSBDb21tYW5kV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6
c3VjY2Vzc0NhbGxiYWNrXTsKQEAgLTc3Myw5ICs3NzYsOSBAQCB1c2luZyBuYW1lc3BhY2UgSW5z
cGVjdG9yOwogewogICAgIGNvbnN0IEZyb250ZW5kUm91dGVyJiByb3V0ZXIgPSBfY29udHJvbGxl
ci0+ZnJvbnRlbmRSb3V0ZXIoKTsKIAotICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdl
ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJt
ZXRob2QiX3MsICJEb21haW4uRXZlbnQiX3MpOwotICAgIHJvdXRlci5zZW5kRXZlbnQoanNvbk1l
c3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKKyAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0g
SlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3Ry
aW5nKCJtZXRob2QiX3MsICJEb21haW4uRXZlbnQiX3MpOworICAgIHJvdXRlci5zZW5kRXZlbnQo
cHJvdG9jb2xfanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKIH0KIAogQGVuZApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVj
dGVkL2RvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29u
LXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9l
eHBlY3RlZC9kb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUu
anNvbi1yZXN1bHQKaW5kZXggYTc3ZmUzNTg5Nzg4NTM0NzUwNTYyMjNlMDE5YTFiMGZiMWQ0N2U2
OC4uOTQyZGNjYThmMjYwMWVjNjk3MmJiYzYwOTg0YmRjNzU1NzQxYzNlZiAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2Rv
bWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uLXJlc3Vs
dAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhw
ZWN0ZWQvZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpz
b24tcmVzdWx0CkBAIC03MCw3ICs3MCw3IEBAIEluc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21h
aW4oIkRvbWFpbiIsIFsicGFnZSJdKTsKIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRF
X0RJU1BBVENIRVJTKQogCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKKyNpbmNsdWRl
ICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXIuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JGcm9udGVuZFJvdXRlci5oPgogCkBAIC04OCw3ICs4OCw3IEBAIHByaXZhdGU6CiBjbGFzcyBB
bHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlciA6IHB1YmxpYyBBbHRlcm5hdGVCYWNrZW5k
RGlzcGF0Y2hlciB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+QWx0ZXJuYXRlRG9tYWluQmFja2Vu
ZERpc3BhdGNoZXIoKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgQ29tbWFuZChsb25nIGNhbGxJZCkg
PSAwOworICAgIHZpcnR1YWwgdm9pZCBDb21tYW5kKGxvbmcgcHJvdG9jb2xfY2FsbElkKSA9IDA7
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKQEAgLTEzMCwxMSArMTMwLDE0IEBAIHB1
YmxpYzoKIAogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHR1cGxl
PgorI2luY2x1ZGUgPHd0Zi9FeHBlY3RlZC5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgog
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsK
IAotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKIAogI2lmIEVOQUJMRShJTlNQRUNUT1Jf
QUxURVJOQVRFX0RJU1BBVENIRVJTKQogY2xhc3MgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3Bh
dGNoZXI7CkBAIC0xNDIsNyArMTQ1LDcgQEAgY2xhc3MgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERp
c3BhdGNoZXI7CiAKIGNsYXNzIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7CiBwdWJs
aWM6Ci0gICAgdmlydHVhbCB2b2lkIENvbW1hbmQoRXJyb3JTdHJpbmcmKSA9IDA7CisgICAgdmly
dHVhbCBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBDb21tYW5kKCkgPSAwOwogcHJvdGVj
dGVkOgogICAgIHZpcnR1YWwgfkRvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpOwogfTsK
QEAgLTE1MCw5ICsxNTMsOSBAQCBwcm90ZWN0ZWQ6CiBjbGFzcyBEb21haW5CYWNrZW5kRGlzcGF0
Y2hlciBmaW5hbCA6IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7CiBwdWJs
aWM6CiAgICAgc3RhdGljIFJlZjxEb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEJhY2tl
bmREaXNwYXRjaGVyJiwgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7Ci0gICAgdm9p
ZCBkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09O
OjpPYmplY3Q+JiYgbWVzc2FnZSkgZmluYWw7CisgICAgdm9pZCBkaXNwYXRjaChsb25nIHByb3Rv
Y29sX2NhbGxJZCwgY29uc3QgU3RyaW5nJiBwcm90b2NvbF9tZXRob2QsIFJlZjxKU09OOjpPYmpl
Y3Q+JiYgcHJvdG9jb2xfbWVzc2FnZSkgZmluYWw7CiBwcml2YXRlOgotICAgIHZvaWQgQ29tbWFu
ZChsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKKyAg
ICB2b2lkIENvbW1hbmQobG9uZyBwcm90b2NsX2NhbGxJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4m
JiBwcm90b2NvbF9wYXJhbWV0ZXJzKTsKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9E
SVNQQVRDSEVSUykKIHB1YmxpYzoKICAgICB2b2lkIHNldEFsdGVybmF0ZURpc3BhdGNoZXIoQWx0
ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIqIGFsdGVybmF0ZURpc3BhdGNoZXIpIHsgbV9h
bHRlcm5hdGVEaXNwYXRjaGVyID0gYWx0ZXJuYXRlRGlzcGF0Y2hlcjsgfQpAQCAtMjAxLDkgKzIw
NCw3IEBAIHByaXZhdGU6CiAjaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgogCiAj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNs
dWRlIDx3dGYvSlNPTlZhbHVlcy5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgot
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQogI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0
Y2hlcnMuaCIKQEAgLTIyNSwzOCArMjI2LDM4IEBAIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpE
b21haW5CYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhCiAg
ICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRjaGVyRm9yRG9tYWluKCJEb21h
aW4iX3MsIHRoaXMpOwogfQogCi12b2lkIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRj
aChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+
JiYgbWVzc2FnZSkKK3ZvaWQgRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcg
cHJvdG9jb2xfY2FsbElkLCBjb25zdCBTdHJpbmcmIHByb3RvY29sX21ldGhvZCwgUmVmPEpTT046
Ok9iamVjdD4mJiBwcm90b2NvbF9tZXNzYWdlKQogewogICAgIFJlZjxEb21haW5CYWNrZW5kRGlz
cGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7CiAKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJh
bWV0ZXJzOwotICAgIG1lc3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9zLCBwYXJhbWV0ZXJzKTsK
KyAgICBhdXRvIHByb3RvY29sX3BhcmFtZXRlcnMgPSBwcm90b2NvbF9tZXNzYWdlLT5nZXRPYmpl
Y3QoInBhcmFtcyJfcyk7CiAKLSAgICBpZiAobWV0aG9kID09ICJDb21tYW5kIikgewotICAgICAg
ICBDb21tYW5kKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7CisgICAgaWYgKHByb3Rv
Y29sX21ldGhvZCA9PSAiQ29tbWFuZCIpIHsKKyAgICAgICAgQ29tbWFuZChwcm90b2NvbF9jYWxs
SWQsIFdURk1vdmUocHJvdG9jb2xfcGFyYW1ldGVycykpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5k
RGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRG9tYWluLiIgKyBtZXRob2QgKyAiJyB3YXMg
bm90IGZvdW5kIik7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJv
cihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRG9tYWluLiIgKyBwcm90b2Nv
bF9tZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7CiB9CiAKLXZvaWQgRG9tYWluQmFja2VuZERp
c3BhdGNoZXI6OkNvbW1hbmQobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYp
Cit2b2lkIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpDb21tYW5kKGxvbmcgcHJvdG9jb2xfY2Fs
bElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQogewogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQogICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAg
ICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5Db21tYW5kKHJlcXVlc3RJZCk7CisgICAgICAg
IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+Q29tbWFuZChwcm90b2NvbF9jYWxsSWQpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJ
U1BBVENIRVJTKQogCi0gICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVmPEpTT046Ok9iamVj
dD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBtX2FnZW50LT5Db21tYW5k
KGVycm9yKTsKKyAgICBhdXRvIHJlc3VsdCA9IG1fYWdlbnQtPkNvbW1hbmQoKTsKKyAgICBpZiAo
IXJlc3VsdCkgeworICAgICAgICBBU1NFUlQoIXJlc3VsdC5lcnJvcigpLmlzRW1wdHkoKSk7Cisg
ICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERp
c3BhdGNoZXI6OlNlcnZlckVycm9yLCByZXN1bHQuZXJyb3IoKSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CiAKLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQotICAgICAgICBtX2JhY2tlbmREaXNw
YXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsK
LSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJy
b3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7CisgICAg
YXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAg
bV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHByb3RvY29sX2NhbGxJZCwgV1RGTW92
ZShwcm90b2NvbF9qc29uTWVzc2FnZSksIGZhbHNlKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCkBAIC0yOTcsNiArMjk4LDcgQEAgdm9pZCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6
Q29tbWFuZChsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikKIAogI2luY2x1
ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgor
I2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKQEAgLTM0OSwxNiArMzUxLDE1IEBAIHByaXZhdGU6
CiAjaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKIAogI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAogdm9pZCBEb21haW5Gcm9udGVu
ZERpc3BhdGNoZXI6OkV2ZW50KCkKIHsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2Fn
ZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygi
bWV0aG9kIl9zLCAiRG9tYWluLkV2ZW50Il9zKTsKKyAgICBhdXRvIHByb3RvY29sX2pzb25NZXNz
YWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+
c2V0U3RyaW5nKCJtZXRob2QiX3MsICJEb21haW4uRXZlbnQiX3MpOwogCi0gICAgbV9mcm9udGVu
ZFJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKKyAgICBtX2Zy
b250ZW5kUm91dGVyLnNlbmRFdmVudChwcm90b2NvbF9qc29uTWVzc2FnZS0+dG9KU09OU3RyaW5n
KCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKQEAgLTM5OCw3ICszOTksOSBAQCB2
b2lkIERvbWFpbkZyb250ZW5kRGlzcGF0Y2hlcjo6RXZlbnQoKQogI3ByYWdtYSBvbmNlCiAKICNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+Ci0jaW5jbHVk
ZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1
ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBu
YW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtNDUyLDggKzQ1NSw3IEBAIG5hbWVzcGFjZSBQcm90
b2NvbCB7CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0
cy5oIgogCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0
b3IgewogCkBAIC01MDksNyArNTExLDcgQEAgY2xhc3MgT2JqQ0luc3BlY3RvckRvbWFpbkJhY2tl
bmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEFsdGVybmF0ZURvbWFpbkJhY2tlbmQKICAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBPYmpDSW5zcGVjdG9yRG9tYWlu
QmFja2VuZERpc3BhdGNoZXIoaWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4gaGFu
ZGxlcikgeyBtX2RlbGVnYXRlID0gaGFuZGxlcjsgfQotICAgIHZvaWQgQ29tbWFuZChsb25nIHJl
cXVlc3RJZCkgZmluYWw7CisgICAgdm9pZCBDb21tYW5kKGxvbmcgcHJvdG9jb2xfY2FsbElkKSBm
aW5hbDsKIHByaXZhdGU6CiAgICAgUmV0YWluUHRyPGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFp
bkhhbmRsZXI+PiBtX2RlbGVnYXRlOwogfTsKQEAgLTU1NywyMSArNTU5LDIyIEBAIHByaXZhdGU6
CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCi12b2lkIE9iakNJbnNwZWN0b3JEb21haW5CYWNr
ZW5kRGlzcGF0Y2hlcjo6Q29tbWFuZChsb25nIHJlcXVlc3RJZCkKK3ZvaWQgT2JqQ0luc3BlY3Rv
ckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpDb21tYW5kKGxvbmcgcHJvdG9jb2xfY2FsbElkKQog
ewogICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihDb21t
YW5kV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7Ci0gICAgICAgIGJhY2tl
bmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlz
cGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRG9tYWluLkNvbW1hbmQnIHdhcyBub3QgZm91bmQi
X3MpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHBy
b3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RvbWFp
bi5Db21tYW5kJyB3YXMgbm90IGZvdW5kIl9zKTsKICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIo
KS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlk
IGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgewotICAgICAgICBiYWNrZW5kRGlz
cGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNo
ZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJl
cG9ydFByb3RvY29sRXJyb3IocHJvdG9jb2xfY2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2Vy
dmVyRXJyb3IsIGVycm9yKTsKICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRp
bmdFcnJvcnMoKTsKICAgICB9OwogCiAgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKLSAgICAg
ICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgSlNPTjo6T2Jq
ZWN0OjpjcmVhdGUoKSwgZmFsc2UpOworICAgICAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdl
ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+
c2VuZFJlc3BvbnNlKHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2Fn
ZSksIGZhbHNlKTsKICAgICB9OwogCiAgICAgW21fZGVsZWdhdGUgQ29tbWFuZFdpdGhFcnJvckNh
bGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107CkBA
IC03NzMsOSArNzc2LDkgQEAgdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKIHsKICAgICBjb25z
dCBGcm9udGVuZFJvdXRlciYgcm91dGVyID0gX2NvbnRyb2xsZXItPmZyb250ZW5kUm91dGVyKCk7
CiAKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3Jl
YXRlKCk7Ci0gICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiRG9tYWluLkV2
ZW50Il9zKTsKLSAgICByb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmco
KSk7CisgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRl
KCk7CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiRG9t
YWluLkV2ZW50Il9zKTsKKyAgICByb3V0ZXIuc2VuZEV2ZW50KHByb3RvY29sX2pzb25NZXNzYWdl
LT50b0pTT05TdHJpbmcoKSk7CiB9CiAKIEBlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9kb21haW4tdGFyZ2V0VHlw
ZXMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZXhwZWN0ZWQvZG9tYWluLXRhcmdldFR5cGVzLmpzb24tcmVzdWx0CmluZGV4IDBhZDZk
MDQ0NjAxYzJlYTQwODM4OGJjZjI1NGZjNjY1NDVmN2NkMDQuLjg0OWYzYjcyOWNhY2Q4YjlmMTE0
YzhiOWJmYjIxNzE5MWQyNzI5MWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9kb21haW4tdGFyZ2V0VHlwZXMuanNvbi1y
ZXN1bHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2V4cGVjdGVkL2RvbWFpbi10YXJnZXRUeXBlcy5qc29uLXJlc3VsdApAQCAtNzAsNyArNzAsNyBA
QCBJbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJEb21haW4iLCBudWxsKTsKIAogI2lm
IEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogCi0jaW5jbHVkZSAiVGVz
dFByb3RvY29sVHlwZXMuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KICNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgogCkBAIC04OCw3
ICs4OCw3IEBAIHByaXZhdGU6CiBjbGFzcyBBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hl
ciA6IHB1YmxpYyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7CiBwdWJsaWM6CiAgICAgdmly
dHVhbCB+QWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIoKSB7IH0KLSAgICB2aXJ0dWFs
IHZvaWQgQ29tbWFuZChsb25nIGNhbGxJZCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBDb21tYW5k
KGxvbmcgcHJvdG9jb2xfY2FsbElkKSA9IDA7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKQEAgLTEzMCwxMSArMTMwLDE0IEBAIHB1YmxpYzoKIAogI2luY2x1ZGUgIlRlc3RQcm90b2Nv
bE9iamVjdHMuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlci5oPgorI2luY2x1ZGUgPHR1cGxlPgorI2luY2x1ZGUgPHd0Zi9FeHBlY3RlZC5oPgor
I2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7
CisKIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogY2xhc3Mg
QWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXI7CkBAIC0xNDIsNyArMTQ1LDcgQEAgY2xh
c3MgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXI7CiAKIGNsYXNzIERvbWFpbkJhY2tl
bmREaXNwYXRjaGVySGFuZGxlciB7CiBwdWJsaWM6Ci0gICAgdmlydHVhbCB2b2lkIENvbW1hbmQo
RXJyb3JTdHJpbmcmKSA9IDA7CisgICAgdmlydHVhbCBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2
b2lkPiBDb21tYW5kKCkgPSAwOwogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgfkRvbWFpbkJhY2tl
bmREaXNwYXRjaGVySGFuZGxlcigpOwogfTsKQEAgLTE1MCw5ICsxNTMsOSBAQCBwcm90ZWN0ZWQ6
CiBjbGFzcyBEb21haW5CYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBTdXBwbGVtZW50
YWxCYWNrZW5kRGlzcGF0Y2hlciB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxEb21haW5CYWNr
ZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiwgRG9tYWluQmFja2VuZERp
c3BhdGNoZXJIYW5kbGVyKik7Ci0gICAgdm9pZCBkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29u
c3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkgZmluYWw7Cisg
ICAgdm9pZCBkaXNwYXRjaChsb25nIHByb3RvY29sX2NhbGxJZCwgY29uc3QgU3RyaW5nJiBwcm90
b2NvbF9tZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfbWVzc2FnZSkgZmluYWw7
CiBwcml2YXRlOgotICAgIHZvaWQgQ29tbWFuZChsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046
Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKKyAgICB2b2lkIENvbW1hbmQobG9uZyBwcm90b2NsX2Nh
bGxJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9wYXJhbWV0ZXJzKTsKICNpZiBF
TkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIHB1YmxpYzoKICAgICB2b2lk
IHNldEFsdGVybmF0ZURpc3BhdGNoZXIoQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIq
IGFsdGVybmF0ZURpc3BhdGNoZXIpIHsgbV9hbHRlcm5hdGVEaXNwYXRjaGVyID0gYWx0ZXJuYXRl
RGlzcGF0Y2hlcjsgfQpAQCAtMjAxLDkgKzIwNCw3IEBAIHByaXZhdGU6CiAjaW5jbHVkZSAiVGVz
dEJhY2tlbmREaXNwYXRjaGVycy5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgogI2luY2x1
ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
IAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogI2luY2x1ZGUg
IlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKQEAgLTIyNSwzOCArMjI2LDM4IEBA
IERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpEb21haW5CYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5k
RGlzcGF0Y2hlciYgYmFja2VuZERpc3BhCiAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0
ZXJEaXNwYXRjaGVyRm9yRG9tYWluKCJEb21haW4iX3MsIHRoaXMpOwogfQogCi12b2lkIERvbWFp
bkJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5n
JiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkKK3ZvaWQgRG9tYWluQmFja2Vu
ZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBjb25zdCBTdHJpbmcm
IHByb3RvY29sX21ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9tZXNzYWdlKQog
ewogICAgIFJlZjxEb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7CiAKLSAg
ICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzOwotICAgIG1lc3NhZ2UtPmdldE9iamVj
dCgicGFyYW1zIl9zLCBwYXJhbWV0ZXJzKTsKKyAgICBhdXRvIHByb3RvY29sX3BhcmFtZXRlcnMg
PSBwcm90b2NvbF9tZXNzYWdlLT5nZXRPYmplY3QoInBhcmFtcyJfcyk7CiAKLSAgICBpZiAobWV0
aG9kID09ICJDb21tYW5kIikgewotICAgICAgICBDb21tYW5kKHJlcXVlc3RJZCwgV1RGTW92ZShw
YXJhbWV0ZXJzKSk7CisgICAgaWYgKHByb3RvY29sX21ldGhvZCA9PSAiQ29tbWFuZCIpIHsKKyAg
ICAgICAgQ29tbWFuZChwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJvdG9jb2xfcGFyYW1ldGVy
cykpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+
cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICIn
RG9tYWluLiIgKyBtZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7CisgICAgbV9iYWNrZW5kRGlz
cGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90
Rm91bmQsICInRG9tYWluLiIgKyBwcm90b2NvbF9tZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7
CiB9CiAKLXZvaWQgRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkNvbW1hbmQobG9uZyByZXF1ZXN0
SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCit2b2lkIERvbWFpbkJhY2tlbmREaXNwYXRjaGVy
OjpDb21tYW5kKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQog
ewogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogICAgIGlmICht
X2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5D
b21tYW5kKHJlcXVlc3RJZCk7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+Q29tbWFu
ZChwcm90b2NvbF9jYWxsSWQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmIC8vIEVO
QUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogCi0gICAgRXJyb3JTdHJpbmcg
ZXJyb3I7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVh
dGUoKTsKLSAgICBtX2FnZW50LT5Db21tYW5kKGVycm9yKTsKKyAgICBhdXRvIHJlc3VsdCA9IG1f
YWdlbnQtPkNvbW1hbmQoKTsKKyAgICBpZiAoIXJlc3VsdCkgeworICAgICAgICBBU1NFUlQoIXJl
c3VsdC5lcnJvcigpLmlzRW1wdHkoKSk7CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJl
cG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCByZXN1bHQu
ZXJyb3IoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBpZiAoIWVycm9yLmxlbmd0
aCgpKQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElk
LCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERp
c3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVy
cm9yLCBXVEZNb3ZlKGVycm9yKSk7CisgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpT
T046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3Bv
bnNlKHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSksIGZhbHNl
KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCkBAIC0yOTcsNiArMjk4LDcgQEAgdm9p
ZCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Q29tbWFuZChsb25nIHJlcXVlc3RJZCwgUmVmUHRy
PEpTT046Ok9iamVjdD4mJikKIAogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNp
bmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKQEAg
LTM0OSwxNiArMzUxLDE1IEBAIHByaXZhdGU6CiAjaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0
Y2hlcnMuaCIKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91
dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVj
dG9yIHsKIAogdm9pZCBEb21haW5Gcm9udGVuZERpc3BhdGNoZXI6OkV2ZW50KCkKIHsKLSAgICBS
ZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0g
ICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiRG9tYWluLkV2ZW50Il9zKTsK
KyAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsK
KyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJEb21haW4u
RXZlbnQiX3MpOwogCi0gICAgbV9mcm9udGVuZFJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2Ut
PnRvSlNPTlN0cmluZygpKTsKKyAgICBtX2Zyb250ZW5kUm91dGVyLnNlbmRFdmVudChwcm90b2Nv
bF9qc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKQEAgLTM5OCw3ICszOTksOSBAQCB2b2lkIERvbWFpbkZyb250ZW5kRGlzcGF0Y2hlcjo6
RXZlbnQoKQogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JQcm90b2NvbFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRl
IDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtNDUy
LDggKzQ1NSw3IEBAIG5hbWVzcGFjZSBQcm90b2NvbCB7CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFs
Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRp
b25zLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC01MDksNyArNTExLDcgQEAgY2xh
c3MgT2JqQ0luc3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEFs
dGVybmF0ZURvbWFpbkJhY2tlbmQKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1Ymxp
YzoKICAgICBPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXIoaWQ8VGVzdFByb3Rv
Y29sRG9tYWluRG9tYWluSGFuZGxlcj4gaGFuZGxlcikgeyBtX2RlbGVnYXRlID0gaGFuZGxlcjsg
fQotICAgIHZvaWQgQ29tbWFuZChsb25nIHJlcXVlc3RJZCkgZmluYWw7CisgICAgdm9pZCBDb21t
YW5kKGxvbmcgcHJvdG9jb2xfY2FsbElkKSBmaW5hbDsKIHByaXZhdGU6CiAgICAgUmV0YWluUHRy
PGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+PiBtX2RlbGVnYXRlOwogfTsKQEAg
LTU1NywyMSArNTU5LDIyIEBAIHByaXZhdGU6CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCi12
b2lkIE9iakNJbnNwZWN0b3JEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Q29tbWFuZChsb25nIHJl
cXVlc3RJZCkKK3ZvaWQgT2JqQ0luc3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpDb21t
YW5kKGxvbmcgcHJvdG9jb2xfY2FsbElkKQogewogICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9u
ZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihDb21tYW5kV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0Nh
bGxiYWNrOildKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29s
RXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRG9t
YWluLkNvbW1hbmQnIHdhcyBub3QgZm91bmQiX3MpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hl
cigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHByb3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNo
ZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RvbWFpbi5Db21tYW5kJyB3YXMgbm90IGZvdW5kIl9zKTsK
ICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICpl
cnJvcikgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9y
KHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CisgICAg
ICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocHJvdG9jb2xfY2Fs
bElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKICAgICAgICAgYmFj
a2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKICAgICB9OwogCiAgICAgaWQg
c3VjY2Vzc0NhbGxiYWNrID0gXnsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJl
c3BvbnNlKHJlcXVlc3RJZCwgSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSwgZmFsc2UpOworICAgICAg
ICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAg
ICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHByb3RvY29sX2NhbGxJZCwg
V1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSksIGZhbHNlKTsKICAgICB9OwogCiAgICAgW21f
ZGVsZWdhdGUgQ29tbWFuZFdpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0Nh
bGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107CkBAIC03NzMsOSArNzc2LDkgQEAgdXNpbmcgbmFtZXNw
YWNlIEluc3BlY3RvcjsKIHsKICAgICBjb25zdCBGcm9udGVuZFJvdXRlciYgcm91dGVyID0gX2Nv
bnRyb2xsZXItPmZyb250ZW5kUm91dGVyKCk7CiAKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29u
TWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAganNvbk1lc3NhZ2UtPnNldFN0
cmluZygibWV0aG9kIl9zLCAiRG9tYWluLkV2ZW50Il9zKTsKLSAgICByb3V0ZXIuc2VuZEV2ZW50
KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7CisgICAgYXV0byBwcm90b2NvbF9qc29uTWVz
c2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2Ut
PnNldFN0cmluZygibWV0aG9kIl9zLCAiRG9tYWluLkV2ZW50Il9zKTsKKyAgICByb3V0ZXIuc2Vu
ZEV2ZW50KHByb3RvY29sX2pzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7CiB9CiAKIEBlbmQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9leHBlY3RlZC9kb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24tcmVzdWx0
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVk
L2RvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbi1yZXN1bHQKaW5kZXggNDc1
Yjg3YmQwYzhkYTg1MmI1Zjk5MGNiMjFjYjNjMmUwNzYwOTk4NC4uNDE5ZjkyZWRhMTNhZWMyMmQ4
ZjRhZjJhZjE3ZjA1Zjc1ZDI0MWE3OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2RvbWFpbnMtd2l0aC12YXJ5aW5nLWNv
bW1hbmQtc2l6ZXMuanNvbi1yZXN1bHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2RvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQt
c2l6ZXMuanNvbi1yZXN1bHQKQEAgLTc5LDcgKzc5LDcgQEAgSW5zcGVjdG9yQmFja2VuZC5hY3Rp
dmF0ZURvbWFpbigiTmV0d29yazMiLCBudWxsKTsKIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQogCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKKyNp
bmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9J
bnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgogCkBAIC05NywxOSArOTcsMTkgQEAgcHJpdmF0ZToK
IGNsYXNzIEFsdGVybmF0ZU5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIgOiBwdWJsaWMgQWx0ZXJu
YXRlQmFja2VuZERpc3BhdGNoZXIgewogcHVibGljOgogICAgIHZpcnR1YWwgfkFsdGVybmF0ZU5l
dHdvcmsxQmFja2VuZERpc3BhdGNoZXIoKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291
cmNlMShsb25nIGNhbGxJZCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UxKGxv
bmcgcHJvdG9jb2xfY2FsbElkKSA9IDA7CiB9OwogCiBjbGFzcyBBbHRlcm5hdGVOZXR3b3JrM0Jh
Y2tlbmREaXNwYXRjaGVyIDogcHVibGljIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKIHB1
YmxpYzoKICAgICB2aXJ0dWFsIH5BbHRlcm5hdGVOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyKCkg
eyB9Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTEobG9uZyBjYWxsSWQpID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlMihsb25nIGNhbGxJZCkgPSAwOwotICAgIHZpcnR1
YWwgdm9pZCBsb2FkUmVzb3VyY2UzKGxvbmcgY2FsbElkKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lk
IGxvYWRSZXNvdXJjZTQobG9uZyBjYWxsSWQpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJl
c291cmNlNShsb25nIGNhbGxJZCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2U2
KGxvbmcgY2FsbElkKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTcobG9uZyBj
YWxsSWQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlMShsb25nIHByb3RvY29s
X2NhbGxJZCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UyKGxvbmcgcHJvdG9j
b2xfY2FsbElkKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTMobG9uZyBwcm90
b2NvbF9jYWxsSWQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlNChsb25nIHBy
b3RvY29sX2NhbGxJZCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2U1KGxvbmcg
cHJvdG9jb2xfY2FsbElkKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTYobG9u
ZyBwcm90b2NvbF9jYWxsSWQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlNyhs
b25nIHByb3RvY29sX2NhbGxJZCkgPSAwOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
CkBAIC0xNTEsMTEgKzE1MSwxNCBAQCBwdWJsaWM6CiAKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xP
YmplY3RzLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXIuaD4KKyNpbmNsdWRlIDx0dXBsZT4KKyNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4KKyNp
bmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
IAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwor
CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIGNsYXNzIEFs
dGVybmF0ZU5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI7CkBAIC0xNjQsMjAgKzE2NywyMCBAQCBj
bGFzcyBBbHRlcm5hdGVOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOwogCiBjbGFzcyBOZXR3b3Jr
MUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7CiBwdWJsaWM6Ci0gICAgdmlydHVhbCB2b2lkIGxv
YWRSZXNvdXJjZTEoRXJyb3JTdHJpbmcmKSA9IDA7CisgICAgdmlydHVhbCBQcm90b2NvbDo6RXJy
b3JTdHJpbmdPcjx2b2lkPiBsb2FkUmVzb3VyY2UxKCkgPSAwOwogcHJvdGVjdGVkOgogICAgIHZp
cnR1YWwgfk5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCk7CiB9OwogCiBjbGFzcyBO
ZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7CiBwdWJsaWM6Ci0gICAgdmlydHVhbCB2
b2lkIGxvYWRSZXNvdXJjZTEoRXJyb3JTdHJpbmcmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGxv
YWRSZXNvdXJjZTIoRXJyb3JTdHJpbmcmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNv
dXJjZTMoRXJyb3JTdHJpbmcmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTQo
RXJyb3JTdHJpbmcmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTUoRXJyb3JT
dHJpbmcmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTYoRXJyb3JTdHJpbmcm
KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTcoRXJyb3JTdHJpbmcmKSA9IDA7
CisgICAgdmlydHVhbCBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBsb2FkUmVzb3VyY2Ux
KCkgPSAwOworICAgIHZpcnR1YWwgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gbG9hZFJl
c291cmNlMigpID0gMDsKKyAgICB2aXJ0dWFsIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+
IGxvYWRSZXNvdXJjZTMoKSA9IDA7CisgICAgdmlydHVhbCBQcm90b2NvbDo6RXJyb3JTdHJpbmdP
cjx2b2lkPiBsb2FkUmVzb3VyY2U0KCkgPSAwOworICAgIHZpcnR1YWwgUHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8dm9pZD4gbG9hZFJlc291cmNlNSgpID0gMDsKKyAgICB2aXJ0dWFsIFByb3RvY29s
OjpFcnJvclN0cmluZ09yPHZvaWQ+IGxvYWRSZXNvdXJjZTYoKSA9IDA7CisgICAgdmlydHVhbCBQ
cm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBsb2FkUmVzb3VyY2U3KCkgPSAwOwogcHJvdGVj
dGVkOgogICAgIHZpcnR1YWwgfk5ldHdvcmszQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCk7CiB9
OwpAQCAtMTg1LDkgKzE4OCw5IEBAIHByb3RlY3RlZDoKIGNsYXNzIE5ldHdvcmsxQmFja2VuZERp
c3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIgewog
cHVibGljOgogICAgIHN0YXRpYyBSZWY8TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRl
KEJhY2tlbmREaXNwYXRjaGVyJiwgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsK
LSAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwg
UmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKSBmaW5hbDsKKyAgICB2b2lkIGRpc3BhdGNoKGxv
bmcgcHJvdG9jb2xfY2FsbElkLCBjb25zdCBTdHJpbmcmIHByb3RvY29sX21ldGhvZCwgUmVmPEpT
T046Ok9iamVjdD4mJiBwcm90b2NvbF9tZXNzYWdlKSBmaW5hbDsKIHByaXZhdGU6Ci0gICAgdm9p
ZCBsb2FkUmVzb3VyY2UxKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBh
cmFtZXRlcnMpOworICAgIHZvaWQgbG9hZFJlc291cmNlMShsb25nIHByb3RvY2xfY2FsbElkLCBS
ZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX3BhcmFtZXRlcnMpOwogI2lmIEVOQUJMRShJ
TlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogcHVibGljOgogICAgIHZvaWQgc2V0QWx0
ZXJuYXRlRGlzcGF0Y2hlcihBbHRlcm5hdGVOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyKiBhbHRl
cm5hdGVEaXNwYXRjaGVyKSB7IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IGFsdGVybmF0ZURpc3Bh
dGNoZXI7IH0KQEAgLTIwMiwxNSArMjA1LDE1IEBAIHByaXZhdGU6CiBjbGFzcyBOZXR3b3JrM0Jh
Y2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRj
aGVyIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI+
IGNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYsIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyKik7Ci0gICAgdm9pZCBkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBt
ZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkgZmluYWw7CisgICAgdm9pZCBkaXNw
YXRjaChsb25nIHByb3RvY29sX2NhbGxJZCwgY29uc3QgU3RyaW5nJiBwcm90b2NvbF9tZXRob2Qs
IFJlZjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfbWVzc2FnZSkgZmluYWw7CiBwcml2YXRlOgot
ICAgIHZvaWQgbG9hZFJlc291cmNlMShsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVj
dD4mJiBwYXJhbWV0ZXJzKTsKLSAgICB2b2lkIGxvYWRSZXNvdXJjZTIobG9uZyByZXF1ZXN0SWQs
IFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7Ci0gICAgdm9pZCBsb2FkUmVzb3Vy
Y2UzKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOwot
ICAgIHZvaWQgbG9hZFJlc291cmNlNChsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVj
dD4mJiBwYXJhbWV0ZXJzKTsKLSAgICB2b2lkIGxvYWRSZXNvdXJjZTUobG9uZyByZXF1ZXN0SWQs
IFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7Ci0gICAgdm9pZCBsb2FkUmVzb3Vy
Y2U2KGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOwot
ICAgIHZvaWQgbG9hZFJlc291cmNlNyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVj
dD4mJiBwYXJhbWV0ZXJzKTsKKyAgICB2b2lkIGxvYWRSZXNvdXJjZTEobG9uZyBwcm90b2NsX2Nh
bGxJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9wYXJhbWV0ZXJzKTsKKyAgICB2
b2lkIGxvYWRSZXNvdXJjZTIobG9uZyBwcm90b2NsX2NhbGxJZCwgUmVmUHRyPEpTT046Ok9iamVj
dD4mJiBwcm90b2NvbF9wYXJhbWV0ZXJzKTsKKyAgICB2b2lkIGxvYWRSZXNvdXJjZTMobG9uZyBw
cm90b2NsX2NhbGxJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9wYXJhbWV0ZXJz
KTsKKyAgICB2b2lkIGxvYWRSZXNvdXJjZTQobG9uZyBwcm90b2NsX2NhbGxJZCwgUmVmUHRyPEpT
T046Ok9iamVjdD4mJiBwcm90b2NvbF9wYXJhbWV0ZXJzKTsKKyAgICB2b2lkIGxvYWRSZXNvdXJj
ZTUobG9uZyBwcm90b2NsX2NhbGxJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9w
YXJhbWV0ZXJzKTsKKyAgICB2b2lkIGxvYWRSZXNvdXJjZTYobG9uZyBwcm90b2NsX2NhbGxJZCwg
UmVmUHRyPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9wYXJhbWV0ZXJzKTsKKyAgICB2b2lkIGxv
YWRSZXNvdXJjZTcobG9uZyBwcm90b2NsX2NhbGxJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBw
cm90b2NvbF9wYXJhbWV0ZXJzKTsKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQ
QVRDSEVSUykKIHB1YmxpYzoKICAgICB2b2lkIHNldEFsdGVybmF0ZURpc3BhdGNoZXIoQWx0ZXJu
YXRlTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlciogYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeyBtX2Fs
dGVybmF0ZURpc3BhdGNoZXIgPSBhbHRlcm5hdGVEaXNwYXRjaGVyOyB9CkBAIC0yNTksOSArMjYy
LDcgQEAgcHJpdmF0ZToKICNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCiAKICNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1
ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0j
aW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRF
Uk5BVEVfRElTUEFUQ0hFUlMpCiAjaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRj
aGVycy5oIgpAQCAtMjg0LDM4ICsyODUsMzggQEAgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6
TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZEQKICAg
ICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4oIk5ldHdv
cmsxIl9zLCB0aGlzKTsKIH0KIAotdm9pZCBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpkaXNw
YXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmpl
Y3Q+JiYgbWVzc2FnZSkKK3ZvaWQgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2go
bG9uZyBwcm90b2NvbF9jYWxsSWQsIGNvbnN0IFN0cmluZyYgcHJvdG9jb2xfbWV0aG9kLCBSZWY8
SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX21lc3NhZ2UpCiB7CiAgICAgUmVmPE5ldHdvcmsxQmFj
a2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOwogCi0gICAgUmVmUHRyPEpTT046Ok9iamVj
dD4gcGFyYW1ldGVyczsKLSAgICBtZXNzYWdlLT5nZXRPYmplY3QoInBhcmFtcyJfcywgcGFyYW1l
dGVycyk7CisgICAgYXV0byBwcm90b2NvbF9wYXJhbWV0ZXJzID0gcHJvdG9jb2xfbWVzc2FnZS0+
Z2V0T2JqZWN0KCJwYXJhbXMiX3MpOwogCi0gICAgaWYgKG1ldGhvZCA9PSAibG9hZFJlc291cmNl
MSIpIHsKLSAgICAgICAgbG9hZFJlc291cmNlMShyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVy
cykpOworICAgIGlmIChwcm90b2NvbF9tZXRob2QgPT0gImxvYWRSZXNvdXJjZTEiKSB7CisgICAg
ICAgIGxvYWRSZXNvdXJjZTEocHJvdG9jb2xfY2FsbElkLCBXVEZNb3ZlKHByb3RvY29sX3BhcmFt
ZXRlcnMpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1fYmFja2VuZERpc3BhdGNo
ZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5k
LCAiJ05ldHdvcmsxLiIgKyBtZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7CisgICAgbV9iYWNr
ZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0
aG9kTm90Rm91bmQsICInTmV0d29yazEuIiArIHByb3RvY29sX21ldGhvZCArICInIHdhcyBub3Qg
Zm91bmQiKTsKIH0KIAotdm9pZCBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3Vy
Y2UxKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQordm9pZCBOZXR3b3Jr
MUJhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UxKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBS
ZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQogewogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRF
X0RJU1BBVENIRVJTKQogICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAg
bV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVzb3VyY2UxKHJlcXVlc3RJZCk7CisgICAgICAg
IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJlc291cmNlMShwcm90b2NvbF9jYWxsSWQpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJO
QVRFX0RJU1BBVENIRVJTKQogCi0gICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVmPEpTT046
Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBtX2FnZW50LT5s
b2FkUmVzb3VyY2UxKGVycm9yKTsKKyAgICBhdXRvIHJlc3VsdCA9IG1fYWdlbnQtPmxvYWRSZXNv
dXJjZTEoKTsKKyAgICBpZiAoIXJlc3VsdCkgeworICAgICAgICBBU1NFUlQoIXJlc3VsdC5lcnJv
cigpLmlzRW1wdHkoKSk7CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3Rv
Y29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCByZXN1bHQuZXJyb3IoKSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQotICAg
ICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3Zl
KHJlc3VsdCksIGZhbHNlKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXIt
PnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZN
b3ZlKGVycm9yKSk7CisgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVj
dDo6Y3JlYXRlKCk7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHByb3Rv
Y29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSksIGZhbHNlKTsKIH0KIAog
UmVmPE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI+IE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6
OmNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhdGNoZXIsIE5ldHdvcmszQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyKiBhZ2VudCkKQEAgLTMzMCwxNCArMzMxLDEzIEBAIE5ldHdv
cmszQmFja2VuZERpc3BhdGNoZXI6Ok5ldHdvcmszQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERp
c3BhdGNoZXImIGJhY2tlbmRECiAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNw
YXRjaGVyRm9yRG9tYWluKCJOZXR3b3JrMyJfcywgdGhpcyk7CiB9CiAKLXZvaWQgTmV0d29yazNC
YWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYg
bWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpCit2b2lkIE5ldHdvcmszQmFja2Vu
ZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBjb25zdCBTdHJpbmcm
IHByb3RvY29sX21ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9tZXNzYWdlKQog
ewogICAgIFJlZjxOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKIAot
ICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnM7Ci0gICAgbWVzc2FnZS0+Z2V0T2Jq
ZWN0KCJwYXJhbXMiX3MsIHBhcmFtZXRlcnMpOworICAgIGF1dG8gcHJvdG9jb2xfcGFyYW1ldGVy
cyA9IHByb3RvY29sX21lc3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9zKTsKIAotICAgIHVzaW5n
IENhbGxIYW5kbGVyID0gdm9pZCAoTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6KikobG9uZyBy
ZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSk7CisgICAgdXNpbmcgQ2Fs
bEhhbmRsZXIgPSB2b2lkIChOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjoqKShsb25nIHByb3Rv
Y29sX2NhbGxJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9tZXNzYWdlKTsKICAg
ICB1c2luZyBEaXNwYXRjaE1hcCA9IEhhc2hNYXA8U3RyaW5nLCBDYWxsSGFuZGxlcj47CiAgICAg
c3RhdGljIE5ldmVyRGVzdHJveWVkPERpc3BhdGNoTWFwPiBkaXNwYXRjaE1hcDsKICAgICBpZiAo
ZGlzcGF0Y2hNYXAuZ2V0KCkuaXNFbXB0eSgpKSB7CkBAIC0zNTgsMTQ2ICszNTgsMTUzIEBAIHZv
aWQgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNv
bnN0IFN0cmluZyYgbWV0aG9kLCBSCiAgICAgICAgICAgICBkaXNwYXRjaE1hcC5nZXQoKS5hZGQo
Y29tbWFuZHNbaV0ubmFtZSwgY29tbWFuZHNbaV0uaGFuZGxlcik7CiAgICAgfQogCi0gICAgYXV0
byBmaW5kUmVzdWx0ID0gZGlzcGF0Y2hNYXAuZ2V0KCkuZmluZChtZXRob2QpOworICAgIGF1dG8g
ZmluZFJlc3VsdCA9IGRpc3BhdGNoTWFwLmdldCgpLmZpbmQocHJvdG9jb2xfbWV0aG9kKTsKICAg
ICBpZiAoZmluZFJlc3VsdCA9PSBkaXNwYXRjaE1hcC5nZXQoKS5lbmQoKSkgewotICAgICAgICBt
X2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVy
OjpNZXRob2ROb3RGb3VuZCwgIidOZXR3b3JrMy4iICsgbWV0aG9kICsgIicgd2FzIG5vdCBmb3Vu
ZCIpOworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJh
Y2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidOZXR3b3JrMy4iICsgcHJvdG9jb2xf
bWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgKCgqdGhpcykuKmZpbmRSZXN1bHQtPnZhbHVlKShyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1l
dGVycykpOworICAgICgoKnRoaXMpLipmaW5kUmVzdWx0LT52YWx1ZSkocHJvdG9jb2xfY2FsbElk
LCBXVEZNb3ZlKHByb3RvY29sX3BhcmFtZXRlcnMpKTsKIH0KIAotdm9pZCBOZXR3b3JrM0JhY2tl
bmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UxKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6
T2JqZWN0PiYmKQordm9pZCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2Ux
KGxvbmcgcHJvdG9jb2xfY2FsbElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQogewogI2lmIEVO
QUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogICAgIGlmIChtX2FsdGVybmF0
ZURpc3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVzb3Vy
Y2UxKHJlcXVlc3RJZCk7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJlc291
cmNlMShwcm90b2NvbF9jYWxsSWQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmIC8v
IEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogCi0gICAgRXJyb3JTdHJp
bmcgZXJyb3I7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0Ojpj
cmVhdGUoKTsKLSAgICBtX2FnZW50LT5sb2FkUmVzb3VyY2UxKGVycm9yKTsKKyAgICBhdXRvIHJl
c3VsdCA9IG1fYWdlbnQtPmxvYWRSZXNvdXJjZTEoKTsKKyAgICBpZiAoIXJlc3VsdCkgeworICAg
ICAgICBBU1NFUlQoIXJlc3VsdC5lcnJvcigpLmlzRW1wdHkoKSk7CisgICAgICAgIG1fYmFja2Vu
ZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZl
ckVycm9yLCByZXN1bHQuZXJyb3IoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBp
ZiAoIWVycm9yLmxlbmd0aCgpKQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVz
cG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKLSAgICBlbHNlCi0gICAg
ICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3Bh
dGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7CisgICAgYXV0byBwcm90b2NvbF9q
c29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgbV9iYWNrZW5kRGlzcGF0
Y2hlci0+c2VuZFJlc3BvbnNlKHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9qc29u
TWVzc2FnZSksIGZhbHNlKTsKIH0KIAotdm9pZCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjps
b2FkUmVzb3VyY2UyKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQordm9p
ZCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UyKGxvbmcgcHJvdG9jb2xf
Y2FsbElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQogewogI2lmIEVOQUJMRShJTlNQRUNUT1Jf
QUxURVJOQVRFX0RJU1BBVENIRVJTKQogICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsK
LSAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVzb3VyY2UyKHJlcXVlc3RJZCk7
CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJlc291cmNlMihwcm90b2NvbF9j
YWxsSWQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNU
T1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogCi0gICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAg
UmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBt
X2FnZW50LT5sb2FkUmVzb3VyY2UyKGVycm9yKTsKKyAgICBhdXRvIHJlc3VsdCA9IG1fYWdlbnQt
PmxvYWRSZXNvdXJjZTIoKTsKKyAgICBpZiAoIXJlc3VsdCkgeworICAgICAgICBBU1NFUlQoIXJl
c3VsdC5lcnJvcigpLmlzRW1wdHkoKSk7CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJl
cG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCByZXN1bHQu
ZXJyb3IoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBpZiAoIWVycm9yLmxlbmd0
aCgpKQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElk
LCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERp
c3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVy
cm9yLCBXVEZNb3ZlKGVycm9yKSk7CisgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpT
T046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3Bv
bnNlKHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSksIGZhbHNl
KTsKIH0KIAotdm9pZCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UzKGxv
bmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQordm9pZCBOZXR3b3JrM0JhY2tl
bmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UzKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBSZWZQdHI8
SlNPTjo6T2JqZWN0PiYmKQogewogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BB
VENIRVJTKQogICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRl
cm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVzb3VyY2UzKHJlcXVlc3RJZCk7CisgICAgICAgIG1fYWx0
ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJlc291cmNlMyhwcm90b2NvbF9jYWxsSWQpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJ
U1BBVENIRVJTKQogCi0gICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVmPEpTT046Ok9iamVj
dD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBtX2FnZW50LT5sb2FkUmVz
b3VyY2UzKGVycm9yKTsKKyAgICBhdXRvIHJlc3VsdCA9IG1fYWdlbnQtPmxvYWRSZXNvdXJjZTMo
KTsKKyAgICBpZiAoIXJlc3VsdCkgeworICAgICAgICBBU1NFUlQoIXJlc3VsdC5lcnJvcigpLmlz
RW1wdHkoKSk7CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJy
b3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCByZXN1bHQuZXJyb3IoKSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQotICAgICAgICBt
X2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3Vs
dCksIGZhbHNlKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9y
dFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVy
cm9yKSk7CisgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3Jl
YXRlKCk7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHByb3RvY29sX2Nh
bGxJZCwgV1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSksIGZhbHNlKTsKIH0KIAotdm9pZCBO
ZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U0KGxvbmcgcmVxdWVzdElkLCBS
ZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQordm9pZCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjps
b2FkUmVzb3VyY2U0KGxvbmcgcHJvdG9jb2xfY2FsbElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYm
KQogewogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogICAgIGlm
IChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVy
LT5sb2FkUmVzb3VyY2U0KHJlcXVlc3RJZCk7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hl
ci0+bG9hZFJlc291cmNlNChwcm90b2NvbF9jYWxsSWQpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogCi0g
ICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNP
Tjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBtX2FnZW50LT5sb2FkUmVzb3VyY2U0KGVycm9yKTsK
KyAgICBhdXRvIHJlc3VsdCA9IG1fYWdlbnQtPmxvYWRSZXNvdXJjZTQoKTsKKyAgICBpZiAoIXJl
c3VsdCkgeworICAgICAgICBBU1NFUlQoIXJlc3VsdC5lcnJvcigpLmlzRW1wdHkoKSk7CisgICAg
ICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3Bh
dGNoZXI6OlNlcnZlckVycm9yLCByZXN1bHQuZXJyb3IoKSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CiAKLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQotICAgICAgICBtX2JhY2tlbmREaXNwYXRj
aGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKLSAg
ICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3Io
QmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7CisgICAgYXV0
byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgbV9i
YWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShw
cm90b2NvbF9qc29uTWVzc2FnZSksIGZhbHNlKTsKIH0KIAotdm9pZCBOZXR3b3JrM0JhY2tlbmRE
aXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U1KGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiYmKQordm9pZCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U1KGxv
bmcgcHJvdG9jb2xfY2FsbElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQogewogI2lmIEVOQUJM
RShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogICAgIGlmIChtX2FsdGVybmF0ZURp
c3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVzb3VyY2U1
KHJlcXVlc3RJZCk7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJlc291cmNl
NShwcm90b2NvbF9jYWxsSWQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmIC8vIEVO
QUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogCi0gICAgRXJyb3JTdHJpbmcg
ZXJyb3I7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVh
dGUoKTsKLSAgICBtX2FnZW50LT5sb2FkUmVzb3VyY2U1KGVycm9yKTsKKyAgICBhdXRvIHJlc3Vs
dCA9IG1fYWdlbnQtPmxvYWRSZXNvdXJjZTUoKTsKKyAgICBpZiAoIXJlc3VsdCkgeworICAgICAg
ICBBU1NFUlQoIXJlc3VsdC5lcnJvcigpLmlzRW1wdHkoKSk7CisgICAgICAgIG1fYmFja2VuZERp
c3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVy
cm9yLCByZXN1bHQuZXJyb3IoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBpZiAo
IWVycm9yLmxlbmd0aCgpKQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9u
c2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKLSAgICBlbHNlCi0gICAgICAg
IG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNo
ZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7CisgICAgYXV0byBwcm90b2NvbF9qc29u
TWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+c2VuZFJlc3BvbnNlKHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9qc29uTWVz
c2FnZSksIGZhbHNlKTsKIH0KIAotdm9pZCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2Fk
UmVzb3VyY2U2KGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQordm9pZCBO
ZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U2KGxvbmcgcHJvdG9jb2xfY2Fs
bElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQogewogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQogICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAg
ICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5sb2FkUmVzb3VyY2U2KHJlcXVlc3RJZCk7Cisg
ICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJlc291cmNlNihwcm90b2NvbF9jYWxs
SWQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1Jf
QUxURVJOQVRFX0RJU1BBVENIRVJTKQogCi0gICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVm
PEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBtX2Fn
ZW50LT5sb2FkUmVzb3VyY2U2KGVycm9yKTsKKyAgICBhdXRvIHJlc3VsdCA9IG1fYWdlbnQtPmxv
YWRSZXNvdXJjZTYoKTsKKyAgICBpZiAoIXJlc3VsdCkgeworICAgICAgICBBU1NFUlQoIXJlc3Vs
dC5lcnJvcigpLmlzRW1wdHkoKSk7CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9y
dFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCByZXN1bHQuZXJy
b3IoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBpZiAoIWVycm9yLmxlbmd0aCgp
KQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBX
VEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3Bh
dGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9y
LCBXVEZNb3ZlKGVycm9yKSk7CisgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046
Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNl
KHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSksIGZhbHNlKTsK
IH0KIAotdm9pZCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U3KGxvbmcg
cmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQordm9pZCBOZXR3b3JrM0JhY2tlbmRE
aXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U3KGxvbmcgcHJvdG9jb2xfY2FsbElkLCBSZWZQdHI8SlNP
Tjo6T2JqZWN0PiYmKQogewogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENI
RVJTKQogICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5h
dGVEaXNwYXRjaGVyLT5sb2FkUmVzb3VyY2U3KHJlcXVlc3RJZCk7CisgICAgICAgIG1fYWx0ZXJu
YXRlRGlzcGF0Y2hlci0+bG9hZFJlc291cmNlNyhwcm90b2NvbF9jYWxsSWQpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BB
VENIRVJTKQogCi0gICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4g
cmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBtX2FnZW50LT5sb2FkUmVzb3Vy
Y2U3KGVycm9yKTsKKyAgICBhdXRvIHJlc3VsdCA9IG1fYWdlbnQtPmxvYWRSZXNvdXJjZTcoKTsK
KyAgICBpZiAoIXJlc3VsdCkgeworICAgICAgICBBU1NFUlQoIXJlc3VsdC5lcnJvcigpLmlzRW1w
dHkoKSk7CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3Io
QmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCByZXN1bHQuZXJyb3IoKSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CiAKLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQotICAgICAgICBtX2Jh
Y2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCks
IGZhbHNlKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFBy
b3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9y
KSk7CisgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRl
KCk7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHByb3RvY29sX2NhbGxJ
ZCwgV1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSksIGZhbHNlKTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgSW5zcGVjdG9yCkBAIC01MzgsNiArNTQ1LDcgQEAgdm9pZCBOZXR3b3JrM0JhY2tlbmRE
aXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U3KGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2Jq
ZWMKIAogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDx3dGYvSlNP
TlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKQEAgLTU4MSw3ICs1ODksNiBA
QCBjbGFzcyBGcm9udGVuZFJvdXRlcjsKICNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVy
cy5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIu
aD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3Ig
ewogCkBAIC02MjIsNyArNjI5LDkgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiAjcHJhZ21hIG9u
Y2UKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4K
LSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+
CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC02ODEsOCArNjkwLDcgQEAgdXNpbmcg
TG9hZGVySWQgPSBTdHJpbmc7CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGVzdFBy
b3RvY29sT2JqZWN0cy5oIgogCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8
d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAKIG5hbWVz
cGFjZSBJbnNwZWN0b3IgewogCkBAIC03MzksNyArNzQ3LDcgQEAgY2xhc3MgT2JqQ0luc3BlY3Rv
ck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgQWx0ZXJuYXRlTmV0d29y
azFCYWMKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBPYmpDSW5z
cGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcihpZDxUZXN0UHJvdG9jb2xOZXR3b3JrMURv
bWFpbkhhbmRsZXI+IGhhbmRsZXIpIHsgbV9kZWxlZ2F0ZSA9IGhhbmRsZXI7IH0KLSAgICB2b2lk
IGxvYWRSZXNvdXJjZTEobG9uZyByZXF1ZXN0SWQpIGZpbmFsOworICAgIHZvaWQgbG9hZFJlc291
cmNlMShsb25nIHByb3RvY29sX2NhbGxJZCkgZmluYWw7CiBwcml2YXRlOgogICAgIFJldGFpblB0
cjxpZDxUZXN0UHJvdG9jb2xOZXR3b3JrMURvbWFpbkhhbmRsZXI+PiBtX2RlbGVnYXRlOwogfTsK
QEAgLTc0OCwxMyArNzU2LDEzIEBAIGNsYXNzIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmRE
aXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEFsdGVybmF0ZU5ldHdvcmszQmFjCiAgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgT2JqQ0luc3BlY3Rvck5ldHdvcmszQmFj
a2VuZERpc3BhdGNoZXIoaWQ8VGVzdFByb3RvY29sTmV0d29yazNEb21haW5IYW5kbGVyPiBoYW5k
bGVyKSB7IG1fZGVsZWdhdGUgPSBoYW5kbGVyOyB9Ci0gICAgdm9pZCBsb2FkUmVzb3VyY2UxKGxv
bmcgcmVxdWVzdElkKSBmaW5hbDsKLSAgICB2b2lkIGxvYWRSZXNvdXJjZTIobG9uZyByZXF1ZXN0
SWQpIGZpbmFsOwotICAgIHZvaWQgbG9hZFJlc291cmNlMyhsb25nIHJlcXVlc3RJZCkgZmluYWw7
Ci0gICAgdm9pZCBsb2FkUmVzb3VyY2U0KGxvbmcgcmVxdWVzdElkKSBmaW5hbDsKLSAgICB2b2lk
IGxvYWRSZXNvdXJjZTUobG9uZyByZXF1ZXN0SWQpIGZpbmFsOwotICAgIHZvaWQgbG9hZFJlc291
cmNlNihsb25nIHJlcXVlc3RJZCkgZmluYWw7Ci0gICAgdm9pZCBsb2FkUmVzb3VyY2U3KGxvbmcg
cmVxdWVzdElkKSBmaW5hbDsKKyAgICB2b2lkIGxvYWRSZXNvdXJjZTEobG9uZyBwcm90b2NvbF9j
YWxsSWQpIGZpbmFsOworICAgIHZvaWQgbG9hZFJlc291cmNlMihsb25nIHByb3RvY29sX2NhbGxJ
ZCkgZmluYWw7CisgICAgdm9pZCBsb2FkUmVzb3VyY2UzKGxvbmcgcHJvdG9jb2xfY2FsbElkKSBm
aW5hbDsKKyAgICB2b2lkIGxvYWRSZXNvdXJjZTQobG9uZyBwcm90b2NvbF9jYWxsSWQpIGZpbmFs
OworICAgIHZvaWQgbG9hZFJlc291cmNlNShsb25nIHByb3RvY29sX2NhbGxJZCkgZmluYWw7Cisg
ICAgdm9pZCBsb2FkUmVzb3VyY2U2KGxvbmcgcHJvdG9jb2xfY2FsbElkKSBmaW5hbDsKKyAgICB2
b2lkIGxvYWRSZXNvdXJjZTcobG9uZyBwcm90b2NvbF9jYWxsSWQpIGZpbmFsOwogcHJpdmF0ZToK
ICAgICBSZXRhaW5QdHI8aWQ8VGVzdFByb3RvY29sTmV0d29yazNEb21haW5IYW5kbGVyPj4gbV9k
ZWxlZ2F0ZTsKIH07CkBAIC04MDIsMTYxICs4MTAsMTY5IEBAIHByaXZhdGU6CiAKIG5hbWVzcGFj
ZSBJbnNwZWN0b3IgewogCi12b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRj
aGVyOjpsb2FkUmVzb3VyY2UxKGxvbmcgcmVxdWVzdElkKQordm9pZCBPYmpDSW5zcGVjdG9yTmV0
d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMShsb25nIHByb3RvY29sX2NhbGxJ
ZCkKIHsKICAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Io
bG9hZFJlc291cmNlMVdpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazopXSkgewotICAg
ICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwg
QmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdvcmsxLmxvYWRSZXNvdXJj
ZTEnIHdhcyBub3QgZm91bmQiX3MpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBv
cnRQcm90b2NvbEVycm9yKHByb3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhv
ZE5vdEZvdW5kLCAiJ05ldHdvcmsxLmxvYWRSZXNvdXJjZTEnIHdhcyBub3QgZm91bmQiX3MpOwog
ICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCiAgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVy
cm9yKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3Io
cmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAg
ICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxs
SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwogICAgICAgICBiYWNr
ZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgIH07CiAKICAgICBpZCBz
dWNjZXNzQ2FsbGJhY2sgPSBeewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVz
cG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7CisgICAgICAg
IGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAg
ICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocHJvdG9jb2xfY2FsbElkLCBX
VEZNb3ZlKHByb3RvY29sX2pzb25NZXNzYWdlKSwgZmFsc2UpOwogICAgIH07CiAKICAgICBbbV9k
ZWxlZ2F0ZSBsb2FkUmVzb3VyY2UxV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNj
ZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsKIH0KIAotdm9pZCBPYmpDSW5zcGVjdG9yTmV0
d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMShsb25nIHJlcXVlc3RJZCkKK3Zv
aWQgT2JqQ0luc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTEo
bG9uZyBwcm90b2NvbF9jYWxsSWQpCiB7CiAgICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25kc1Rv
U2VsZWN0b3I6QHNlbGVjdG9yKGxvYWRSZXNvdXJjZTFXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNz
Q2FsbGJhY2s6KV0pIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9j
b2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidO
ZXR3b3JrMy5sb2FkUmVzb3VyY2UxJyB3YXMgbm90IGZvdW5kIl9zKTsKKyAgICAgICAgYmFja2Vu
ZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxsSWQsIEJhY2tl
bmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidOZXR3b3JrMy5sb2FkUmVzb3VyY2UxJyB3
YXMgbm90IGZvdW5kIl9zKTsKICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRp
bmdFcnJvcnMoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlkIGVycm9yQ2FsbGJh
Y2sgPSBeKE5TU3RyaW5nICplcnJvcikgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5y
ZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVy
cm9yLCBlcnJvcik7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29s
RXJyb3IocHJvdG9jb2xfY2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVy
cm9yKTsKICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsK
ICAgICB9OwogCiAgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKLSAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgSlNPTjo6T2JqZWN0OjpjcmVhdGUo
KSwgZmFsc2UpOworICAgICAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2Jq
ZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNl
KHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSksIGZhbHNlKTsK
ICAgICB9OwogCiAgICAgW21fZGVsZWdhdGUgbG9hZFJlc291cmNlMVdpdGhFcnJvckNhbGxiYWNr
OmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107CiB9CiAKLXZv
aWQgT2JqQ0luc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTIo
bG9uZyByZXF1ZXN0SWQpCit2b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRj
aGVyOjpsb2FkUmVzb3VyY2UyKGxvbmcgcHJvdG9jb2xfY2FsbElkKQogewogICAgIGlmICghW21f
ZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihsb2FkUmVzb3VyY2UyV2l0aEVy
cm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRj
aGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6
TWV0aG9kTm90Rm91bmQsICInTmV0d29yazMubG9hZFJlc291cmNlMicgd2FzIG5vdCBmb3VuZCJf
cyk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocHJv
dG9jb2xfY2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29y
azMubG9hZFJlc291cmNlMicgd2FzIG5vdCBmb3VuZCJfcyk7CiAgICAgICAgIGJhY2tlbmREaXNw
YXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
ICAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFj
a2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmRE
aXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hl
cigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHByb3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNo
ZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CiAgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNl
bmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgfTsKIAogICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF57
Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIEpT
T046Ok9iamVjdDo6Y3JlYXRlKCksIGZhbHNlKTsKKyAgICAgICAgYXV0byBwcm90b2NvbF9qc29u
TWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIGJhY2tlbmREaXNwYXRj
aGVyKCktPnNlbmRSZXNwb25zZShwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJvdG9jb2xfanNv
bk1lc3NhZ2UpLCBmYWxzZSk7CiAgICAgfTsKIAogICAgIFttX2RlbGVnYXRlIGxvYWRSZXNvdXJj
ZTJXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNz
Q2FsbGJhY2tdOwogfQogCi12b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRj
aGVyOjpsb2FkUmVzb3VyY2UzKGxvbmcgcmVxdWVzdElkKQordm9pZCBPYmpDSW5zcGVjdG9yTmV0
d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMyhsb25nIHByb3RvY29sX2NhbGxJ
ZCkKIHsKICAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Io
bG9hZFJlc291cmNlM1dpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazopXSkgewotICAg
ICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwg
QmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdvcmszLmxvYWRSZXNvdXJj
ZTMnIHdhcyBub3QgZm91bmQiX3MpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBv
cnRQcm90b2NvbEVycm9yKHByb3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhv
ZE5vdEZvdW5kLCAiJ05ldHdvcmszLmxvYWRSZXNvdXJjZTMnIHdhcyBub3QgZm91bmQiX3MpOwog
ICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCiAgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVy
cm9yKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3Io
cmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAg
ICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxs
SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwogICAgICAgICBiYWNr
ZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgIH07CiAKICAgICBpZCBz
dWNjZXNzQ2FsbGJhY2sgPSBeewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVz
cG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7CisgICAgICAg
IGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAg
ICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocHJvdG9jb2xfY2FsbElkLCBX
VEZNb3ZlKHByb3RvY29sX2pzb25NZXNzYWdlKSwgZmFsc2UpOwogICAgIH07CiAKICAgICBbbV9k
ZWxlZ2F0ZSBsb2FkUmVzb3VyY2UzV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNj
ZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsKIH0KIAotdm9pZCBPYmpDSW5zcGVjdG9yTmV0
d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNChsb25nIHJlcXVlc3RJZCkKK3Zv
aWQgT2JqQ0luc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTQo
bG9uZyBwcm90b2NvbF9jYWxsSWQpCiB7CiAgICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25kc1Rv
U2VsZWN0b3I6QHNlbGVjdG9yKGxvYWRSZXNvdXJjZTRXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNz
Q2FsbGJhY2s6KV0pIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9j
b2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidO
ZXR3b3JrMy5sb2FkUmVzb3VyY2U0JyB3YXMgbm90IGZvdW5kIl9zKTsKKyAgICAgICAgYmFja2Vu
ZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxsSWQsIEJhY2tl
bmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidOZXR3b3JrMy5sb2FkUmVzb3VyY2U0JyB3
YXMgbm90IGZvdW5kIl9zKTsKICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRp
bmdFcnJvcnMoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlkIGVycm9yQ2FsbGJh
Y2sgPSBeKE5TU3RyaW5nICplcnJvcikgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5y
ZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVy
cm9yLCBlcnJvcik7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29s
RXJyb3IocHJvdG9jb2xfY2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVy
cm9yKTsKICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsK
ICAgICB9OwogCiAgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKLSAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgSlNPTjo6T2JqZWN0OjpjcmVhdGUo
KSwgZmFsc2UpOworICAgICAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2Jq
ZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNl
KHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSksIGZhbHNlKTsK
ICAgICB9OwogCiAgICAgW21fZGVsZWdhdGUgbG9hZFJlc291cmNlNFdpdGhFcnJvckNhbGxiYWNr
OmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107CiB9CiAKLXZv
aWQgT2JqQ0luc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTUo
bG9uZyByZXF1ZXN0SWQpCit2b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRj
aGVyOjpsb2FkUmVzb3VyY2U1KGxvbmcgcHJvdG9jb2xfY2FsbElkKQogewogICAgIGlmICghW21f
ZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihsb2FkUmVzb3VyY2U1V2l0aEVy
cm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRj
aGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6
TWV0aG9kTm90Rm91bmQsICInTmV0d29yazMubG9hZFJlc291cmNlNScgd2FzIG5vdCBmb3VuZCJf
cyk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocHJv
dG9jb2xfY2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29y
azMubG9hZFJlc291cmNlNScgd2FzIG5vdCBmb3VuZCJfcyk7CiAgICAgICAgIGJhY2tlbmREaXNw
YXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
ICAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFj
a2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmRE
aXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hl
cigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHByb3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNo
ZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CiAgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNl
bmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgfTsKIAogICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF57
Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIEpT
T046Ok9iamVjdDo6Y3JlYXRlKCksIGZhbHNlKTsKKyAgICAgICAgYXV0byBwcm90b2NvbF9qc29u
TWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIGJhY2tlbmREaXNwYXRj
aGVyKCktPnNlbmRSZXNwb25zZShwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJvdG9jb2xfanNv
bk1lc3NhZ2UpLCBmYWxzZSk7CiAgICAgfTsKIAogICAgIFttX2RlbGVnYXRlIGxvYWRSZXNvdXJj
ZTVXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNz
Q2FsbGJhY2tdOwogfQogCi12b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRj
aGVyOjpsb2FkUmVzb3VyY2U2KGxvbmcgcmVxdWVzdElkKQordm9pZCBPYmpDSW5zcGVjdG9yTmV0
d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNihsb25nIHByb3RvY29sX2NhbGxJ
ZCkKIHsKICAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3Io
bG9hZFJlc291cmNlNldpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazopXSkgewotICAg
ICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwg
QmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdvcmszLmxvYWRSZXNvdXJj
ZTYnIHdhcyBub3QgZm91bmQiX3MpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBv
cnRQcm90b2NvbEVycm9yKHByb3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhv
ZE5vdEZvdW5kLCAiJ05ldHdvcmszLmxvYWRSZXNvdXJjZTYnIHdhcyBub3QgZm91bmQiX3MpOwog
ICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCiAgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVy
cm9yKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3Io
cmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAg
ICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxs
SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwogICAgICAgICBiYWNr
ZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgIH07CiAKICAgICBpZCBz
dWNjZXNzQ2FsbGJhY2sgPSBeewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVz
cG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7CisgICAgICAg
IGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAg
ICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocHJvdG9jb2xfY2FsbElkLCBX
VEZNb3ZlKHByb3RvY29sX2pzb25NZXNzYWdlKSwgZmFsc2UpOwogICAgIH07CiAKICAgICBbbV9k
ZWxlZ2F0ZSBsb2FkUmVzb3VyY2U2V2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNj
ZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsKIH0KIAotdm9pZCBPYmpDSW5zcGVjdG9yTmV0
d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNyhsb25nIHJlcXVlc3RJZCkKK3Zv
aWQgT2JqQ0luc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTco
bG9uZyBwcm90b2NvbF9jYWxsSWQpCiB7CiAgICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25kc1Rv
U2VsZWN0b3I6QHNlbGVjdG9yKGxvYWRSZXNvdXJjZTdXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNz
Q2FsbGJhY2s6KV0pIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9j
b2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidO
ZXR3b3JrMy5sb2FkUmVzb3VyY2U3JyB3YXMgbm90IGZvdW5kIl9zKTsKKyAgICAgICAgYmFja2Vu
ZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxsSWQsIEJhY2tl
bmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidOZXR3b3JrMy5sb2FkUmVzb3VyY2U3JyB3
YXMgbm90IGZvdW5kIl9zKTsKICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRp
bmdFcnJvcnMoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlkIGVycm9yQ2FsbGJh
Y2sgPSBeKE5TU3RyaW5nICplcnJvcikgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5y
ZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVy
cm9yLCBlcnJvcik7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29s
RXJyb3IocHJvdG9jb2xfY2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVy
cm9yKTsKICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsK
ICAgICB9OwogCiAgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKLSAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgSlNPTjo6T2JqZWN0OjpjcmVhdGUo
KSwgZmFsc2UpOworICAgICAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2Jq
ZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNl
KHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSksIGZhbHNlKTsK
ICAgICB9OwogCiAgICAgW21fZGVsZWdhdGUgbG9hZFJlc291cmNlN1dpdGhFcnJvckNhbGxiYWNr
OmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0
ZWQvZW51bS12YWx1ZXMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZW51bS12YWx1ZXMuanNvbi1yZXN1bHQKaW5kZXgg
Nzk1M2NiZjIxODM4OGY4NDc3NzJiZDQxM2QxODAyNjI5YTdiODA1Yi4uOTkzZjlhYTI4YzcxMzY2
ZGRlZTdhZGExZjFjNjEwYzY3MWMxZmIyNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2VudW0tdmFsdWVzLmpzb24tcmVz
dWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9l
eHBlY3RlZC9lbnVtLXZhbHVlcy5qc29uLXJlc3VsdApAQCAtMzAsMTggKzMwLDE5IEBACiAKIC8v
IFR5cGVEb21haW4KIEluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW4oIlR5cGVEb21haW4i
LCBudWxsKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFbnVtKCJUeXBlRG9tYWluLlR5cGVE
b21haW5FbnVtIiwge1NoYXJlZDogInNoYXJlZCIsIFJlZDogInJlZCIsIEdyZWVuOiAiZ3JlZW4i
LCBCbHVlOiAiYmx1ZSJ9KTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFbnVtKCJUeXBlRG9t
YWluLkVudW0iLCB7U2hhcmVkOiAic2hhcmVkIiwgMTogIjEiLCAyOiAiMiJ9KTsKIEluc3BlY3Rv
ckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIlR5cGVEb21haW4iLCBudWxsKTsKIAogLy8gQ29tbWFu
ZERvbWFpbgogSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFpbigiQ29tbWFuZERvbWFpbiIs
IG51bGwpOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckNvbW1hbmQoIkNvbW1hbmREb21haW4u
Y29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUiLCBudWxsLCBbXSwgWyJyZXR1cm5WYWx1ZSJdKTsK
K0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJDb21tYW5kRG9tYWluLmNvbW1hbmQi
LCBudWxsLCBbeyJuYW1lIjogImVudW1SZXF1aXJlZCIsICJ0eXBlIjogInN0cmluZyJ9LCB7Im5h
bWUiOiAiZW51bU9wdGlvbmFsIiwgInR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjogdHJ1ZX0s
IHsibmFtZSI6ICJwYXJhbWV0ZXJSZXF1aXJlZCIsICJ0eXBlIjogInN0cmluZyJ9LCB7Im5hbWUi
OiAicGFyYW1ldGVyT3B0aW9uYWwiLCAidHlwZSI6ICJzdHJpbmciLCAib3B0aW9uYWwiOiB0cnVl
fV0sIFsiZW51bVJlcXVpcmVkIiwgImVudW1PcHRpb25hbCIsICJyZXR1cm5SZXF1aXJlZCIsICJy
ZXR1cm5PcHRpb25hbCJdKTsKIEluc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIkNvbW1h
bmREb21haW4iLCBudWxsKTsKIAogLy8gRXZlbnREb21haW4KIEluc3BlY3RvckJhY2tlbmQucmVn
aXN0ZXJEb21haW4oIkV2ZW50RG9tYWluIiwgbnVsbCk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lz
dGVyRW51bSgiRXZlbnREb21haW4uRXZlbnRXaXRoRW51bVBhcmFtZXRlclBhcmFtZXRlciIsIHtT
aGFyZWQ6ICJzaGFyZWQiLCBCbGFjazogImJsYWNrIiwgV2hpdGU6ICJ3aGl0ZSJ9KTsKLUluc3Bl
Y3RvckJhY2tlbmQucmVnaXN0ZXJFdmVudCgiRXZlbnREb21haW4uZXZlbnRXaXRoRW51bVBhcmFt
ZXRlciIsIG51bGwsIFsicGFyYW1ldGVyIl0pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckVu
dW0oIkV2ZW50RG9tYWluLkV2ZW50UGFyYW1ldGVyUmVxdWlyZWQiLCB7U2hhcmVkOiAic2hhcmVk
IiwgU2hhcmVkUmVxdWlyZWQ6ICJzaGFyZWRSZXF1aXJlZCIsIEdyZXk6ICJncmV5In0pOworSW5z
cGVjdG9yQmFja2VuZC5yZWdpc3RlckVudW0oIkV2ZW50RG9tYWluLkV2ZW50UGFyYW1ldGVyT3B0
aW9uYWwiLCB7U2hhcmVkOiAic2hhcmVkIiwgU2hhcmVkT3B0aW9uYWw6ICJzaGFyZWRPcHRpb25h
bCIsIEdyZWVuOiAiZ3JlZW4ifSk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRXZlbnQoIkV2
ZW50RG9tYWluLmV2ZW50IiwgbnVsbCwgWyJlbnVtUmVxdWlyZWQiLCAiZW51bU9wdGlvbmFsIiwg
InBhcmFtZXRlclJlcXVpcmVkIiwgInBhcmFtZXRlck9wdGlvbmFsIl0pOwogSW5zcGVjdG9yQmFj
a2VuZC5yZWdpc3RlckV2ZW50RG9tYWluRGlzcGF0Y2hlciA9IEluc3BlY3RvckJhY2tlbmQucmVn
aXN0ZXJEaXNwYXRjaGVyLmJpbmQoSW5zcGVjdG9yQmFja2VuZCwgIkV2ZW50RG9tYWluIik7CiBJ
bnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJFdmVudERvbWFpbiIsIG51bGwpOwogIyMj
IEVuZCBGaWxlOiBJbnNwZWN0b3JCYWNrZW5kQ29tbWFuZHMuanMuaW4KQEAgLTgwLDcgKzgxLDcg
QEAgSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiRXZlbnREb21haW4iLCBudWxsKTsK
IAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogCi0jaW5jbHVk
ZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgi
CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4K
ICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgogCkBA
IC05OCw3ICs5OSw3IEBAIHByaXZhdGU6CiBjbGFzcyBBbHRlcm5hdGVDb21tYW5kRG9tYWluQmFj
a2VuZERpc3BhdGNoZXIgOiBwdWJsaWMgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewogcHVi
bGljOgogICAgIHZpcnR1YWwgfkFsdGVybmF0ZUNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hl
cigpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBjb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZShsb25n
IGNhbGxJZCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBjb21tYW5kKGxvbmcgcHJvdG9jb2xfY2Fs
bElkLCBjb25zdCBTdHJpbmcmIGVudW1SZXF1aXJlZCwgY29uc3QgU3RyaW5nJiBvcHRfZW51bU9w
dGlvbmFsLCBjb25zdCBTdHJpbmcmIHBhcmFtZXRlclJlcXVpcmVkLCBjb25zdCBTdHJpbmcmIG9w
dF9wYXJhbWV0ZXJPcHRpb25hbCkgPSAwOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
CkBAIC0xNDAsMTEgKzE0MSwxNCBAQCBwdWJsaWM6CiAKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xP
YmplY3RzLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXIuaD4KKyNpbmNsdWRlIDx0dXBsZT4KKyNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4KKyNp
bmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
IAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwor
CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIGNsYXNzIEFs
dGVybmF0ZUNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcjsKQEAgLTE1MiwxNCArMTU2LDcg
QEAgY2xhc3MgQWx0ZXJuYXRlQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOwogCiBjbGFz
cyBDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKIHB1YmxpYzoKLSAgICAv
LyBOYW1lZCBhZnRlciBwYXJhbWV0ZXIgJ3JldHVyblZhbHVlJyB3aGlsZSBnZW5lcmF0aW5nIGNv
bW1hbmQvZXZlbnQgY29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUuCi0gICAgZW51bSBjbGFzcyBS
ZXR1cm5WYWx1ZSB7Ci0gICAgICAgIFNoYXJlZCA9IDAsCi0gICAgICAgIEN5YW4gPSA2LAotICAg
ICAgICBNYWdlbnRhID0gNywKLSAgICAgICAgWWVsbG93ID0gOCwKLSAgICB9OyAvLyBlbnVtIGNs
YXNzIFJldHVyblZhbHVlCi0gICAgdmlydHVhbCB2b2lkIGNvbW1hbmRXaXRoRW51bVJldHVyblZh
bHVlKEVycm9yU3RyaW5nJiwgQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6
UmV0dXJuVmFsdWUqIG91dF9yZXR1cm5WYWx1ZSkgPSAwOworICAgIHZpcnR1YWwgUHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8c3RkOjp0dXBsZTxQcm90b2NvbDo6VHlwZURvbWFpbjo6RW51bSAvKiBl
bnVtUmVxdWlyZWQgKi8sIE9wdGlvbmFsPFByb3RvY29sOjpUeXBlRG9tYWluOjpFbnVtPiAvKiBv
cHRfZW51bU9wdGlvbmFsICovLCBTdHJpbmcgLyogcmV0dXJuUmVxdWlyZWQgKi8sIFN0cmluZyAv
KiBvcHRfcmV0dXJuT3B0aW9uYWwgKi8+PiBjb21tYW5kKFByb3RvY29sOjpUeXBlRG9tYWluOjpF
bnVtIGVudW1SZXF1aXJlZCwgT3B0aW9uYWw8UHJvdG9jb2w6OlR5cGVEb21haW46OkVudW0+JiYg
b3B0X2VudW1PcHRpb25hbCwgY29uc3QgU3RyaW5nJiBwYXJhbWV0ZXJSZXF1aXJlZCwgY29uc3Qg
U3RyaW5nJiBvcHRfcGFyYW1ldGVyT3B0aW9uYWwpID0gMDsKIHByb3RlY3RlZDoKICAgICB2aXJ0
dWFsIH5Db21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCk7CiB9OwpAQCAtMTY3
LDkgKzE2NCw5IEBAIHByb3RlY3RlZDoKIGNsYXNzIENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0
Y2hlciBmaW5hbCA6IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7CiBwdWJs
aWM6CiAgICAgc3RhdGljIFJlZjxDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0
ZShCYWNrZW5kRGlzcGF0Y2hlciYsIENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXIqKTsKLSAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1l
dGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKSBmaW5hbDsKKyAgICB2b2lkIGRpc3Bh
dGNoKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBjb25zdCBTdHJpbmcmIHByb3RvY29sX21ldGhvZCwg
UmVmPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9tZXNzYWdlKSBmaW5hbDsKIHByaXZhdGU6Ci0g
ICAgdm9pZCBjb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZShsb25nIHJlcXVlc3RJZCwgUmVmUHRy
PEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKKyAgICB2b2lkIGNvbW1hbmQobG9uZyBwcm90
b2NsX2NhbGxJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9wYXJhbWV0ZXJzKTsK
ICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIHB1YmxpYzoKICAg
ICB2b2lkIHNldEFsdGVybmF0ZURpc3BhdGNoZXIoQWx0ZXJuYXRlQ29tbWFuZERvbWFpbkJhY2tl
bmREaXNwYXRjaGVyKiBhbHRlcm5hdGVEaXNwYXRjaGVyKSB7IG1fYWx0ZXJuYXRlRGlzcGF0Y2hl
ciA9IGFsdGVybmF0ZURpc3BhdGNoZXI7IH0KQEAgLTIxOCw5ICsyMTUsNyBAQCBwcml2YXRlOgog
I2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKIAogI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0pTT05WYWx1
ZXMuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVS
UykKICNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCkBAIC0yNDIs
NDIgKzIzNyw2MyBAQCBDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkNvbW1hbmREb21h
aW5CYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlcgogICAgIG1fYmFja2VuZERpc3Bh
dGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbigiQ29tbWFuZERvbWFpbiJfcywgdGhp
cyk7CiB9CiAKLXZvaWQgQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChs
b25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYg
bWVzc2FnZSkKK3ZvaWQgQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChs
b25nIHByb3RvY29sX2NhbGxJZCwgY29uc3QgU3RyaW5nJiBwcm90b2NvbF9tZXRob2QsIFJlZjxK
U09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfbWVzc2FnZSkKIHsKICAgICBSZWY8Q29tbWFuZERvbWFp
bkJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKIAotICAgIFJlZlB0cjxKU09OOjpP
YmplY3Q+IHBhcmFtZXRlcnM7Ci0gICAgbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3MsIHBh
cmFtZXRlcnMpOworICAgIGF1dG8gcHJvdG9jb2xfcGFyYW1ldGVycyA9IHByb3RvY29sX21lc3Nh
Z2UtPmdldE9iamVjdCgicGFyYW1zIl9zKTsKIAotICAgIGlmIChtZXRob2QgPT0gImNvbW1hbmRX
aXRoRW51bVJldHVyblZhbHVlIikgewotICAgICAgICBjb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1
ZShyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykpOworICAgIGlmIChwcm90b2NvbF9tZXRo
b2QgPT0gImNvbW1hbmQiKSB7CisgICAgICAgIGNvbW1hbmQocHJvdG9jb2xfY2FsbElkLCBXVEZN
b3ZlKHByb3RvY29sX3BhcmFtZXRlcnMpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNo
ZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0NvbW1hbmREb21haW4uIiArIG1ldGhvZCArICInIHdhcyBu
b3QgZm91bmQiKTsKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9y
KEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidDb21tYW5kRG9tYWluLiIgKyBw
cm90b2NvbF9tZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7CiB9CiAKLXZvaWQgQ29tbWFuZERv
bWFpbkJhY2tlbmREaXNwYXRjaGVyOjpjb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZShsb25nIHJl
cXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikKK3ZvaWQgQ29tbWFuZERvbWFpbkJhY2tl
bmREaXNwYXRjaGVyOjpjb21tYW5kKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBSZWZQdHI8SlNPTjo6
T2JqZWN0PiYmIHByb3RvY29sX3BhcmFtZXRlcnMpCiB7CisgICAgYXV0byBpbl9lbnVtUmVxdWly
ZWRfanNvbiA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFN0cmluZyhwcm90b2NvbF9wYXJhbWV0
ZXJzLmdldCgpLCAiZW51bVJlcXVpcmVkIl9zLCB0cnVlKTsKKyAgICBhdXRvIGluX29wdF9lbnVt
T3B0aW9uYWxfanNvbiA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFN0cmluZyhwcm90b2NvbF9w
YXJhbWV0ZXJzLmdldCgpLCAiZW51bU9wdGlvbmFsIl9zLCBmYWxzZSk7CisgICAgYXV0byBpbl9w
YXJhbWV0ZXJSZXF1aXJlZCA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFN0cmluZyhwcm90b2Nv
bF9wYXJhbWV0ZXJzLmdldCgpLCAicGFyYW1ldGVyUmVxdWlyZWQiX3MsIHRydWUpOworICAgIGF1
dG8gaW5fb3B0X3BhcmFtZXRlck9wdGlvbmFsID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3Ry
aW5nKHByb3RvY29sX3BhcmFtZXRlcnMuZ2V0KCksICJwYXJhbWV0ZXJPcHRpb25hbCJfcywgZmFs
c2UpOworICAgIGlmIChtX2JhY2tlbmREaXNwYXRjaGVyLT5oYXNQcm90b2NvbEVycm9ycygpKSB7
CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2Vu
ZERpc3BhdGNoZXI6OkludmFsaWRQYXJhbXMsICJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJ0Nv
bW1hbmREb21haW4uY29tbWFuZCcgY2FuJ3QgYmUgcHJvY2Vzc2VkIl9zKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKwogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJT
KQogICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVE
aXNwYXRjaGVyLT5jb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZShyZXF1ZXN0SWQpOworICAgICAg
ICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmNvbW1hbmQocHJvdG9jb2xfY2FsbElkLCBpbl9lbnVt
UmVxdWlyZWRfanNvbiwgaW5fb3B0X2VudW1PcHRpb25hbF9qc29uLCBpbl9wYXJhbWV0ZXJSZXF1
aXJlZCwgaW5fb3B0X3BhcmFtZXRlck9wdGlvbmFsKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
ICNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIAotICAg
IEVycm9yU3RyaW5nIGVycm9yOwotICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046
Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFu
ZGxlcjo6UmV0dXJuVmFsdWUgb3V0X3JldHVyblZhbHVlOwotICAgIG1fYWdlbnQtPmNvbW1hbmRX
aXRoRW51bVJldHVyblZhbHVlKGVycm9yLCAmb3V0X3JldHVyblZhbHVlKTsKKyAgICBhdXRvIGlu
X2VudW1SZXF1aXJlZCA9IFByb3RvY29sOjpUZXN0SGVscGVyczo6cGFyc2VFbnVtVmFsdWVGcm9t
U3RyaW5nPFByb3RvY29sOjpUeXBlRG9tYWluOjpFbnVtPihpbl9lbnVtUmVxdWlyZWRfanNvbik7
CisgICAgaWYgKCFpbl9lbnVtUmVxdWlyZWQpIHsKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIG1h
a2VTdHJpbmcoIlVua25vd24gZW51bVJlcXVpcmVkOiAiX3MsIGluX2VudW1SZXF1aXJlZF9qc29u
KSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQot
ICAgICAgICByZXN1bHQtPnNldFN0cmluZygicmV0dXJuVmFsdWUiX3MsIEluc3BlY3Rvcjo6UHJv
dG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShvdXRfcmV0dXJuVmFsdWUp
KTsKKyAgICBhdXRvIGluX29wdF9lbnVtT3B0aW9uYWwgPSBQcm90b2NvbDo6VGVzdEhlbHBlcnM6
OnBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxQcm90b2NvbDo6VHlwZURvbWFpbjo6RW51bT4oaW5f
b3B0X2VudW1PcHRpb25hbF9qc29uKTsKIAotICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCi0gICAg
ICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUo
cmVzdWx0KSwgZmFsc2UpOwotICAgIGVsc2UKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+
cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1v
dmUoZXJyb3IpKTsKKyAgICBhdXRvIHJlc3VsdCA9IG1fYWdlbnQtPmNvbW1hbmQoKmluX2VudW1S
ZXF1aXJlZCwgV1RGTW92ZShpbl9vcHRfZW51bU9wdGlvbmFsKSwgaW5fcGFyYW1ldGVyUmVxdWly
ZWQsIGluX29wdF9wYXJhbWV0ZXJPcHRpb25hbCk7CisgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAg
ICAgQVNTRVJUKCFyZXN1bHQuZXJyb3IoKS5pc0VtcHR5KCkpOworICAgICAgICBtX2JhY2tlbmRE
aXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJF
cnJvciwgcmVzdWx0LmVycm9yKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYXV0
byBbb3V0X2VudW1SZXF1aXJlZCwgb3V0X29wdF9lbnVtT3B0aW9uYWwsIG91dF9yZXR1cm5SZXF1
aXJlZCwgb3V0X29wdF9yZXR1cm5PcHRpb25hbF0gPSBXVEZNb3ZlKHJlc3VsdC52YWx1ZSgpKTsK
KworICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgp
OworICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoImVudW1SZXF1aXJlZCJfcywg
UHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShvdXRfZW51bVJlcXVp
cmVkKSk7CisgICAgaWYgKCEhb3V0X29wdF9lbnVtT3B0aW9uYWwpCisgICAgICAgIHByb3RvY29s
X2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoImVudW1PcHRpb25hbCJfcywgUHJvdG9jb2w6OlRlc3RI
ZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZSgqb3V0X29wdF9lbnVtT3B0aW9uYWwpKTsKKyAg
ICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJyZXR1cm5SZXF1aXJlZCJfcywgb3V0
X3JldHVyblJlcXVpcmVkKTsKKyAgICBpZiAoISFvdXRfb3B0X3JldHVybk9wdGlvbmFsKQorICAg
ICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJyZXR1cm5PcHRpb25hbCJfcywg
b3V0X29wdF9yZXR1cm5PcHRpb25hbCk7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJl
c3BvbnNlKHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSksIGZh
bHNlKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCkBAIC0zMTgsNiArMzM0LDcgQEAg
dm9pZCBDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OmNvbW1hbmRXaXRoRW51bVJldHVy
blZhbHVlKGxvbmcgcmVxdWVzdElkLAogCiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5o
IgogI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+
CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3Ig
ewpAQCAtMzI4LDEzICszNDUsMTkgQEAgY2xhc3MgRXZlbnREb21haW5Gcm9udGVuZERpc3BhdGNo
ZXIgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIEV2ZW50RG9t
YWluRnJvbnRlbmREaXNwYXRjaGVyKEZyb250ZW5kUm91dGVyJiBmcm9udGVuZFJvdXRlcikgOiBt
X2Zyb250ZW5kUm91dGVyKGZyb250ZW5kUm91dGVyKSB7IH0KLSAgICAgICAgLy8gTmFtZWQgYWZ0
ZXIgcGFyYW1ldGVyICdwYXJhbWV0ZXInIHdoaWxlIGdlbmVyYXRpbmcgY29tbWFuZC9ldmVudCBl
dmVudFdpdGhFbnVtUGFyYW1ldGVyLgotICAgICAgICBlbnVtIGNsYXNzIFBhcmFtZXRlciB7Cisg
ICAgICAgIC8vIE5hbWVkIGFmdGVyIHBhcmFtZXRlciAncGFyYW1ldGVyUmVxdWlyZWQnIHdoaWxl
IGdlbmVyYXRpbmcgY29tbWFuZC9ldmVudCBldmVudC4KKyAgICAgICAgZW51bSBjbGFzcyBQYXJh
bWV0ZXJSZXF1aXJlZCB7CiAgICAgICAgICAgICBTaGFyZWQgPSAwLAotICAgICAgICAgICAgQmxh
Y2sgPSA0LAotICAgICAgICAgICAgV2hpdGUgPSA1LAotICAgICAgICB9OyAvLyBlbnVtIGNsYXNz
IFBhcmFtZXRlcgotICAgIHZvaWQgZXZlbnRXaXRoRW51bVBhcmFtZXRlcihQYXJhbWV0ZXIgcGFy
YW1ldGVyKTsKKyAgICAgICAgICAgIFNoYXJlZFJlcXVpcmVkID0gMywKKyAgICAgICAgICAgIEdy
ZXkgPSA0LAorICAgICAgICB9OyAvLyBlbnVtIGNsYXNzIFBhcmFtZXRlclJlcXVpcmVkCisgICAg
ICAgIC8vIE5hbWVkIGFmdGVyIHBhcmFtZXRlciAncGFyYW1ldGVyT3B0aW9uYWwnIHdoaWxlIGdl
bmVyYXRpbmcgY29tbWFuZC9ldmVudCBldmVudC4KKyAgICAgICAgZW51bSBjbGFzcyBQYXJhbWV0
ZXJPcHRpb25hbCB7CisgICAgICAgICAgICBTaGFyZWQgPSAwLAorICAgICAgICAgICAgU2hhcmVk
T3B0aW9uYWwgPSA1LAorICAgICAgICAgICAgR3JlZW4gPSA2LAorICAgICAgICB9OyAvLyBlbnVt
IGNsYXNzIFBhcmFtZXRlck9wdGlvbmFsCisgICAgdm9pZCBldmVudChQcm90b2NvbDo6VHlwZURv
bWFpbjo6RW51bSBlbnVtUmVxdWlyZWQsIE9wdGlvbmFsPFByb3RvY29sOjpUeXBlRG9tYWluOjpF
bnVtPiYmIG9wdF9lbnVtT3B0aW9uYWwsIGNvbnN0IFN0cmluZyYgcGFyYW1ldGVyUmVxdWlyZWQs
IGNvbnN0IFN0cmluZyYgb3B0X3BhcmFtZXRlck9wdGlvbmFsKTsKIHByaXZhdGU6CiAgICAgRnJv
bnRlbmRSb3V0ZXImIG1fZnJvbnRlbmRSb3V0ZXI7CiB9OwpAQCAtMzc2LDE5ICszOTksMjMgQEAg
cHJpdmF0ZToKICNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgogCiAjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3
dGYvdGV4dC9DU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCi12b2lkIEV2ZW50
RG9tYWluRnJvbnRlbmREaXNwYXRjaGVyOjpldmVudFdpdGhFbnVtUGFyYW1ldGVyKFBhcmFtZXRl
ciBwYXJhbWV0ZXIpCit2b2lkIEV2ZW50RG9tYWluRnJvbnRlbmREaXNwYXRjaGVyOjpldmVudChQ
cm90b2NvbDo6VHlwZURvbWFpbjo6RW51bSBlbnVtUmVxdWlyZWQsIE9wdGlvbmFsPFByb3RvY29s
OjpUeXBlRG9tYWluOjpFbnVtPiYmIG9wdF9lbnVtT3B0aW9uYWwsIGNvbnN0IFN0cmluZyYgcGFy
YW1ldGVyUmVxdWlyZWQsIGNvbnN0IFN0cmluZyYgb3B0X3BhcmFtZXRlck9wdGlvbmFsKQogewot
ICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUo
KTsKLSAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJFdmVudERvbWFpbi5l
dmVudFdpdGhFbnVtUGFyYW1ldGVyIl9zKTsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBwYXJhbXNP
YmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIHBhcmFtc09iamVjdC0+c2V0U3Ry
aW5nKCJwYXJhbWV0ZXIiX3MsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRF
bnVtQ29uc3RhbnRWYWx1ZShwYXJhbWV0ZXIpKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0
KCJwYXJhbXMiX3MsIFdURk1vdmUocGFyYW1zT2JqZWN0KSk7CisgICAgYXV0byBwcm90b2NvbF9q
c29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgcHJvdG9jb2xfanNvbk1l
c3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiRXZlbnREb21haW4uZXZlbnQiX3MpOworICAg
IGF1dG8gcHJvdG9jb2xfcGFyYW1zT2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAg
ICBwcm90b2NvbF9wYXJhbXNPYmplY3QtPnNldFN0cmluZygiZW51bVJlcXVpcmVkIl9zLCBQcm90
b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKGVudW1SZXF1aXJlZCkpOwor
ICAgIGlmICghIW9wdF9lbnVtT3B0aW9uYWwpCisgICAgICAgIHByb3RvY29sX3BhcmFtc09iamVj
dC0+c2V0U3RyaW5nKCJlbnVtT3B0aW9uYWwiX3MsIFByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0
RW51bUNvbnN0YW50VmFsdWUoKm9wdF9lbnVtT3B0aW9uYWwpKTsKKyAgICBwcm90b2NvbF9wYXJh
bXNPYmplY3QtPnNldFN0cmluZygicGFyYW1ldGVyUmVxdWlyZWQiX3MsIHBhcmFtZXRlclJlcXVp
cmVkKTsKKyAgICBpZiAoISFvcHRfcGFyYW1ldGVyT3B0aW9uYWwpCisgICAgICAgIHByb3RvY29s
X3BhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJwYXJhbWV0ZXJPcHRpb25hbCJfcywgb3B0X3BhcmFt
ZXRlck9wdGlvbmFsKTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJh
bXMiX3MsIFdURk1vdmUocHJvdG9jb2xfcGFyYW1zT2JqZWN0KSk7CiAKLSAgICBtX2Zyb250ZW5k
Um91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOworICAgIG1fZnJv
bnRlbmRSb3V0ZXIuc2VuZEV2ZW50KHByb3RvY29sX2pzb25NZXNzYWdlLT50b0pTT05TdHJpbmco
KSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgpAQCAtNDI4LDcgKzQ1NSw5IEBAIHZv
aWQgRXZlbnREb21haW5Gcm9udGVuZERpc3BhdGNoZXI6OmV2ZW50V2l0aEVudW1QYXJhbWV0ZXIo
UGFyYW1ldGVyIHBhcmFtZXRlcikKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25z
Lmg+CisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwu
aD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3Rv
ciB7CiAKQEAgLTQ0MCw3ICs0NjksNyBAQCBuYW1lc3BhY2UgUHJvdG9jb2wgewogCiAvLyBGb3J3
YXJkIGRlY2xhcmF0aW9ucy4KIG5hbWVzcGFjZSBUeXBlRG9tYWluIHsKLWVudW0gY2xhc3MgVHlw
ZURvbWFpbkVudW07CitlbnVtIGNsYXNzIEVudW07CiB9IC8vIFR5cGVEb21haW4KIC8vIEVuZCBv
ZiBmb3J3YXJkIGRlY2xhcmF0aW9ucy4KIApAQCAtNDYwLDEyICs0ODksMTEgQEAgdGVtcGxhdGU8
dHlwZW5hbWUgVD4gU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKFQgZW51bVZhbHVlKQogCiBu
YW1lc3BhY2UgVHlwZURvbWFpbiB7CiAKLWVudW0gY2xhc3MgVHlwZURvbWFpbkVudW0geworZW51
bSBjbGFzcyBFbnVtIHsKICAgICBTaGFyZWQgPSAwLAotICAgIFJlZCA9IDEsCi0gICAgR3JlZW4g
PSAyLAotICAgIEJsdWUgPSAzLAotfTsgLy8gZW51bSBjbGFzcyBUeXBlRG9tYWluRW51bQorICAg
IDEgPSAxLAorICAgIDIgPSAyLAorfTsgLy8gZW51bSBjbGFzcyBFbnVtCiAKIH0gLy8gVHlwZURv
bWFpbgogCkBAIC00NzgsNyArNTA2LDcgQEAgT3B0aW9uYWw8UHJvdG9jb2xFbnVtVHlwZT4gcGFy
c2VFbnVtVmFsdWVGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYpOwogCiAvLyBFbnVtcyBpbiB0aGUg
J1R5cGVEb21haW4nIERvbWFpbgogdGVtcGxhdGU8PgotT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90
b2NvbDo6VHlwZURvbWFpbjo6VHlwZURvbWFpbkVudW0+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmlu
ZzxJbnNwZWN0b3I6OlByb3RvY29sOjpUeXBlRG9tYWluOjpUeXBlRG9tYWluRW51bT4oY29uc3Qg
U3RyaW5nJik7CitPcHRpb25hbDxQcm90b2NvbDo6VHlwZURvbWFpbjo6RW51bT4gcGFyc2VFbnVt
VmFsdWVGcm9tU3RyaW5nPFByb3RvY29sOjpUeXBlRG9tYWluOjpFbnVtPihjb25zdCBTdHJpbmcm
KTsKIAogfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKIApAQCAtNDkyLDcgKzUyMCw3IEBAIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsKIAogLy8gSGFzaCBkZWNsYXJh
dGlvbnMgaW4gdGhlICdUeXBlRG9tYWluJyBEb21haW4KIHRlbXBsYXRlPD4KLXN0cnVjdCBEZWZh
dWx0SGFzaDxJbnNwZWN0b3I6OlByb3RvY29sOjpUeXBlRG9tYWluOjpUeXBlRG9tYWluRW51bT4g
OiBJbnRIYXNoPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlR5cGVEb21haW46OlR5cGVEb21haW5FbnVt
PiB7IH07CitzdHJ1Y3QgRGVmYXVsdEhhc2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6VHlwZURvbWFp
bjo6RW51bT4gOiBJbnRIYXNoPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlR5cGVEb21haW46OkVudW0+
IHsgfTsKIAogfSAvLyBuYW1lc3BhY2UgV1RGCiAjIyMgRW5kIEZpbGU6IFRlc3RQcm90b2NvbE9i
amVjdHMuaApAQCAtNTMwLDggKzU1OCw3IEBAIHN0cnVjdCBEZWZhdWx0SGFzaDxJbnNwZWN0b3I6
OlByb3RvY29sOjpUeXBlRG9tYWluOjpUeXBlRG9tYWluRW51bT4gOiBJbnRIYXNoPEluCiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogCi0jaW5j
bHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2lu
Y2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC01
NDEsMTQgKzU2OCwxNiBAQCBuYW1lc3BhY2UgVGVzdEhlbHBlcnMgewogCiBzdGF0aWMgY29uc3Qg
Y2hhciogY29uc3QgZW51bV9jb25zdGFudF92YWx1ZXNbXSA9IHsKICAgICAic2hhcmVkIiwKLSAg
ICAicmVkIiwKKyAgICAiMSIsCisgICAgIjIiLAorICAgICJzaGFyZWRSZXF1aXJlZCIsCisgICAg
ImdyZXkiLAorICAgICJzaGFyZWRPcHRpb25hbCIsCiAgICAgImdyZWVuIiwKLSAgICAiYmx1ZSIs
CiAgICAgImJsYWNrIiwKKyAgICAicmVkIiwKICAgICAid2hpdGUiLAotICAgICJjeWFuIiwKLSAg
ICAibWFnZW50YSIsCi0gICAgInllbGxvdyIsCisgICAgImJsdWUiLAogfTsKIAogU3RyaW5nIGdl
dEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKSB7CkBAIC01NTgsMTcgKzU4NywxNiBAQCBTdHJp
bmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpIHsKIC8vIEVudW1zIGluIHRoZSAnVHlw
ZURvbWFpbicgRG9tYWluCiAKIHRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlR5cGVEb21haW46OlR5cGVEb21haW5FbnVtPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8
SW5zcGVjdG9yOjpQcm90b2NvbDo6VHlwZURvbWFpbjo6VHlwZURvbWFpbkVudW0+KGNvbnN0IFN0
cmluZyYgcHJvdG9jb2xTdHJpbmcpCitPcHRpb25hbDxQcm90b2NvbDo6VHlwZURvbWFpbjo6RW51
bT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPFByb3RvY29sOjpUeXBlRG9tYWluOjpFbnVtPihj
b25zdCBTdHJpbmcmIHByb3RvY29sU3RyaW5nKQogewogICAgIHN0YXRpYyBjb25zdCBzaXplX3Qg
Y29uc3RhbnRWYWx1ZXNbXSA9IHsKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29s
OjpUeXBlRG9tYWluOjpUeXBlRG9tYWluRW51bTo6U2hhcmVkLAotICAgICAgICAoc2l6ZV90KUlu
c3BlY3Rvcjo6UHJvdG9jb2w6OlR5cGVEb21haW46OlR5cGVEb21haW5FbnVtOjpSZWQsCi0gICAg
ICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6VHlwZURvbWFpbjo6VHlwZURvbWFpbkVu
dW06OkdyZWVuLAotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlR5cGVEb21h
aW46OlR5cGVEb21haW5FbnVtOjpCbHVlLAorICAgICAgICAoc2l6ZV90KVByb3RvY29sOjpUeXBl
RG9tYWluOjpFbnVtOjpTaGFyZWQsCisgICAgICAgIChzaXplX3QpUHJvdG9jb2w6OlR5cGVEb21h
aW46OkVudW06OjEsCisgICAgICAgIChzaXplX3QpUHJvdG9jb2w6OlR5cGVEb21haW46OkVudW06
OjIsCiAgICAgfTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDQ7ICsraSkKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IDM7ICsraSkKICAgICAgICAgaWYgKHByb3RvY29sU3RyaW5nID09
IGVudW1fY29uc3RhbnRfdmFsdWVzW2NvbnN0YW50VmFsdWVzW2ldXSkKLSAgICAgICAgICAgIHJl
dHVybiAoSW5zcGVjdG9yOjpQcm90b2NvbDo6VHlwZURvbWFpbjo6VHlwZURvbWFpbkVudW0pY29u
c3RhbnRWYWx1ZXNbaV07CisgICAgICAgICAgICByZXR1cm4gKFByb3RvY29sOjpUeXBlRG9tYWlu
OjpFbnVtKWNvbnN0YW50VmFsdWVzW2ldOwogCiAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0K
QEAgLTYyNSw3ICs2NTMsNyBAQCBjbGFzcyBPYmpDSW5zcGVjdG9yQ29tbWFuZERvbWFpbkJhY2tl
bmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEFsdGVybmF0ZUNvbW1hbgogICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIE9iakNJbnNwZWN0b3JDb21tYW5kRG9tYWlu
QmFja2VuZERpc3BhdGNoZXIoaWQ8VGVzdFByb3RvY29sQ29tbWFuZERvbWFpbkRvbWFpbkhhbmRs
ZXI+IGhhbmRsZXIpIHsgbV9kZWxlZ2F0ZSA9IGhhbmRsZXI7IH0KLSAgICB2b2lkIGNvbW1hbmRX
aXRoRW51bVJldHVyblZhbHVlKGxvbmcgcmVxdWVzdElkKSBmaW5hbDsKKyAgICB2b2lkIGNvbW1h
bmQobG9uZyBwcm90b2NvbF9jYWxsSWQsIGNvbnN0IFN0cmluZyYgZW51bVJlcXVpcmVkLCBjb25z
dCBTdHJpbmcmIG9wdF9lbnVtT3B0aW9uYWwsIGNvbnN0IFN0cmluZyYgcGFyYW1ldGVyUmVxdWly
ZWQsIGNvbnN0IFN0cmluZyYgb3B0X3BhcmFtZXRlck9wdGlvbmFsKSBmaW5hbDsKIHByaXZhdGU6
CiAgICAgUmV0YWluUHRyPGlkPFRlc3RQcm90b2NvbENvbW1hbmREb21haW5Eb21haW5IYW5kbGVy
Pj4gbV9kZWxlZ2F0ZTsKIH07CkBAIC02NzMsMjYgKzcwMSw0NyBAQCBwcml2YXRlOgogCiBuYW1l
c3BhY2UgSW5zcGVjdG9yIHsKIAotdm9pZCBPYmpDSW5zcGVjdG9yQ29tbWFuZERvbWFpbkJhY2tl
bmREaXNwYXRjaGVyOjpjb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZShsb25nIHJlcXVlc3RJZCkK
K3ZvaWQgT2JqQ0luc3BlY3RvckNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Y29tbWFu
ZChsb25nIHByb3RvY29sX2NhbGxJZCwgY29uc3QgU3RyaW5nJiBpbl9lbnVtUmVxdWlyZWQsIGNv
bnN0IFN0cmluZyYgaW5fb3B0X2VudW1PcHRpb25hbCwgY29uc3QgU3RyaW5nJiBpbl9wYXJhbWV0
ZXJSZXF1aXJlZCwgY29uc3QgU3RyaW5nJiBpbl9vcHRfcGFyYW1ldGVyT3B0aW9uYWwpCiB7Ci0g
ICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGNvbW1hbmRX
aXRoRW51bVJldHVyblZhbHVlV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7
Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVz
dElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInQ29tbWFuZERvbWFpbi5j
b21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZScgd2FzIG5vdCBmb3VuZCJfcyk7CisgICAgaWYgKCFb
bV9kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGNvbW1hbmRXaXRoRXJyb3JD
YWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6ZW51bVJlcXVpcmVkOmVudW1PcHRpb25hbDpwYXJhbWV0
ZXJSZXF1aXJlZDpwYXJhbWV0ZXJPcHRpb25hbDopXSkgeworICAgICAgICBiYWNrZW5kRGlzcGF0
Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHByb3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3Bh
dGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0NvbW1hbmREb21haW4uY29tbWFuZCcgd2FzIG5vdCBm
b3VuZCJfcyk7CiAgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3Jz
KCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZCBlcnJvckNhbGxiYWNrID0gXihO
U1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJv
dG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJy
b3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHBy
b3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CiAg
ICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgfTsK
IAotICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF4oVGVzdFByb3RvY29sQ29tbWFuZERvbWFpbkNv
bW1hbmRXaXRoRW51bVJldHVyblZhbHVlUmV0dXJuVmFsdWUgcmV0dXJuVmFsdWUpIHsKLSAgICAg
ICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0T2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUo
KTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoInJldHVyblZhbHVlIl9zLCB0b1By
b3RvY29sU3RyaW5nKHJldHVyblZhbHVlKSk7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCkt
PnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0T2JqZWN0KSwgZmFsc2UpOwor
ICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF4oVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW0gb3V0
X2VudW1SZXF1aXJlZCwgVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW0gKm91dF9vcHRfZW51bU9w
dGlvbmFsLCBUZXN0UHJvdG9jb2xDb21tYW5kRG9tYWluKGFub255bW91cykgb3V0X3JldHVyblJl
cXVpcmVkLCBUZXN0UHJvdG9jb2xDb21tYW5kRG9tYWluKGFub255bW91cykgKm91dF9vcHRfcmV0
dXJuT3B0aW9uYWwpIHsKKyAgICAgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046
Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJp
bmcoImVudW1SZXF1aXJlZCJfcywgdG9Qcm90b2NvbFN0cmluZyhvdXRfZW51bVJlcXVpcmVkKSk7
CisgICAgICAgIGlmICghIW91dF9vcHRfZW51bU9wdGlvbmFsKQorICAgICAgICAgICAgcHJvdG9j
b2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygiZW51bU9wdGlvbmFsIl9zLCB0b1Byb3RvY29sU3Ry
aW5nKCpvdXRfb3B0X2VudW1PcHRpb25hbCkpOworICAgICAgICBwcm90b2NvbF9qc29uTWVzc2Fn
ZS0+c2V0U3RyaW5nKCJyZXR1cm5SZXF1aXJlZCJfcywgdG9Qcm90b2NvbFN0cmluZyhvdXRfcmV0
dXJuUmVxdWlyZWQpKTsKKyAgICAgICAgaWYgKCEhb3V0X29wdF9yZXR1cm5PcHRpb25hbCkKKyAg
ICAgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoInJldHVybk9wdGlvbmFs
Il9zLCB0b1Byb3RvY29sU3RyaW5nKCpvdXRfb3B0X3JldHVybk9wdGlvbmFsKSk7CisgICAgICAg
IGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShwcm90b2NvbF9jYWxsSWQsIFdURk1v
dmUocHJvdG9jb2xfanNvbk1lc3NhZ2UpLCBmYWxzZSk7CiAgICAgfTsKIAotICAgIFttX2RlbGVn
YXRlIGNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxs
YmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsKKyAgICBPcHRpb25hbDxUZXN0
UHJvdG9jb2xUeXBlRG9tYWluRW51bT4gb19pbl9lbnVtUmVxdWlyZWQgPSBmcm9tUHJvdG9jb2xT
dHJpbmc8VGVzdFByb3RvY29sVHlwZURvbWFpbkVudW0+KGluX2VudW1SZXF1aXJlZCk7CisgICAg
aWYgKCFvX2luX2VudW1SZXF1aXJlZCkgeworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5y
ZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCAiUGFy
YW1ldGVyICdlbnVtUmVxdWlyZWQnIG9mIG1ldGhvZCAnQ29tbWFuZERvbWFpbi5jb21tYW5kJyBj
YW5ub3QgYmUgcHJvY2Vzc2VkIl9zKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBPcHRp
b25hbDxUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bT4gb19pbl9vcHRfZW51bU9wdGlvbmFsOwor
ICAgIGlmICghIWluX29wdF9lbnVtT3B0aW9uYWwpCisgICAgICAgIG9faW5fb3B0X2VudW1PcHRp
b25hbCA9IGZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bT4oaW5f
b3B0X2VudW1PcHRpb25hbCk7CisgICAgT3B0aW9uYWw8VGVzdFByb3RvY29sQ29tbWFuZERvbWFp
bihhbm9ueW1vdXMpPiBvX2luX3BhcmFtZXRlclJlcXVpcmVkID0gZnJvbVByb3RvY29sU3RyaW5n
PFRlc3RQcm90b2NvbENvbW1hbmREb21haW4oYW5vbnltb3VzKT4oaW5fcGFyYW1ldGVyUmVxdWly
ZWQpOworICAgIGlmICghb19pbl9wYXJhbWV0ZXJSZXF1aXJlZCkgeworICAgICAgICBiYWNrZW5k
RGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpJbnZh
bGlkUGFyYW1zLCAiUGFyYW1ldGVyICdwYXJhbWV0ZXJSZXF1aXJlZCcgb2YgbWV0aG9kICdDb21t
YW5kRG9tYWluLmNvbW1hbmQnIGNhbm5vdCBiZSBwcm9jZXNzZWQiX3MpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIE9wdGlvbmFsPFRlc3RQcm90b2NvbENvbW1hbmREb21haW4oYW5vbnlt
b3VzKT4gb19pbl9vcHRfcGFyYW1ldGVyT3B0aW9uYWw7CisgICAgaWYgKCEhaW5fb3B0X3BhcmFt
ZXRlck9wdGlvbmFsKQorICAgICAgICBvX2luX29wdF9wYXJhbWV0ZXJPcHRpb25hbCA9IGZyb21Q
cm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xDb21tYW5kRG9tYWluKGFub255bW91cyk+KGluX29w
dF9wYXJhbWV0ZXJPcHRpb25hbCk7CisgICAgW21fZGVsZWdhdGUgY29tbWFuZFdpdGhFcnJvckNh
bGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjayBlbnVt
UmVxdWlyZWQ6b19pbl9lbnVtUmVxdWlyZWQudmFsdWUoKSBlbnVtT3B0aW9uYWw6KCEhaW5fb3B0
X2VudW1PcHRpb25hbCA/ICZvX2luX29wdF9lbnVtT3B0aW9uYWwudmFsdWUoKSA6IG5pbCkgcGFy
YW1ldGVyUmVxdWlyZWQ6b19pbl9wYXJhbWV0ZXJSZXF1aXJlZC52YWx1ZSgpIHBhcmFtZXRlck9w
dGlvbmFsOighIWluX29wdF9wYXJhbWV0ZXJPcHRpb25hbCA/ICZvX2luX29wdF9wYXJhbWV0ZXJP
cHRpb25hbC52YWx1ZSgpIDogbmlsKV07CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgpA
QCAtODg3LDE2ICs5MzYsMjEgQEAgdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKICAgICByZXR1
cm4gc2VsZjsKIH0KIAotLSAodm9pZClldmVudFdpdGhFbnVtUGFyYW1ldGVyV2l0aFBhcmFtZXRl
cjooVGVzdFByb3RvY29sRXZlbnREb21haW5FdmVudFdpdGhFbnVtUGFyYW1ldGVyUGFyYW1ldGVy
KXBhcmFtZXRlcgorLSAodm9pZClldmVudFdpdGhFbnVtUmVxdWlyZWQ6KFRlc3RQcm90b2NvbFR5
cGVEb21haW5FbnVtKWVudW1SZXF1aXJlZCBlbnVtT3B0aW9uYWw6KFRlc3RQcm90b2NvbFR5cGVE
b21haW5FbnVtICopZW51bU9wdGlvbmFsIHBhcmFtZXRlclJlcXVpcmVkOihUZXN0UHJvdG9jb2xF
dmVudERvbWFpbihhbm9ueW1vdXMpKXBhcmFtZXRlclJlcXVpcmVkIHBhcmFtZXRlck9wdGlvbmFs
OihUZXN0UHJvdG9jb2xFdmVudERvbWFpbihhbm9ueW1vdXMpICopcGFyYW1ldGVyT3B0aW9uYWwK
IHsKICAgICBjb25zdCBGcm9udGVuZFJvdXRlciYgcm91dGVyID0gX2NvbnRyb2xsZXItPmZyb250
ZW5kUm91dGVyKCk7CiAKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046
Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9z
LCAiRXZlbnREb21haW4uZXZlbnRXaXRoRW51bVBhcmFtZXRlciJfcyk7Ci0gICAgUmVmPEpTT046
Ok9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBwYXJh
bXNPYmplY3QtPnNldFN0cmluZygicGFyYW1ldGVyIl9zLCB0b1Byb3RvY29sU3RyaW5nKHBhcmFt
ZXRlcikpOwotICAgIGpzb25NZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyJfcywgV1RGTW92ZShw
YXJhbXNPYmplY3QpKTsKLSAgICByb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05T
dHJpbmcoKSk7CisgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6
Y3JlYXRlKCk7CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9z
LCAiRXZlbnREb21haW4uZXZlbnQiX3MpOworICAgIGF1dG8gcHJvdG9jb2xfcGFyYW1zT2JqZWN0
ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBwcm90b2NvbF9wYXJhbXNPYmplY3QtPnNl
dFN0cmluZygiZW51bVJlcXVpcmVkIl9zLCB0b1Byb3RvY29sU3RyaW5nKGVudW1SZXF1aXJlZCkp
OworICAgIGlmIChlbnVtT3B0aW9uYWwpCisgICAgICAgIHByb3RvY29sX3BhcmFtc09iamVjdC0+
c2V0U3RyaW5nKCJlbnVtT3B0aW9uYWwiX3MsIHRvUHJvdG9jb2xTdHJpbmcoKCplbnVtT3B0aW9u
YWwpKSk7CisgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInBhcmFtZXRlclJl
cXVpcmVkIl9zLCB0b1Byb3RvY29sU3RyaW5nKHBhcmFtZXRlclJlcXVpcmVkKSk7CisgICAgaWYg
KHBhcmFtZXRlck9wdGlvbmFsKQorICAgICAgICBwcm90b2NvbF9wYXJhbXNPYmplY3QtPnNldFN0
cmluZygicGFyYW1ldGVyT3B0aW9uYWwiX3MsIHRvUHJvdG9jb2xTdHJpbmcoKCpwYXJhbWV0ZXJP
cHRpb25hbCkpKTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMi
X3MsIFdURk1vdmUocHJvdG9jb2xfcGFyYW1zT2JqZWN0KSk7CisgICAgcm91dGVyLnNlbmRFdmVu
dChwcm90b2NvbF9qc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwogfQogCiBAZW5kCkBAIC05
NDMsMjEgKzk5NywyMCBAQCB1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwogCiB0eXBlZGVmIE5T
X0VOVU0oTlNJbnRlZ2VyLCBUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bSkgewogICAgIFRlc3RQ
cm90b2NvbFR5cGVEb21haW5FbnVtU2hhcmVkLAotICAgIFRlc3RQcm90b2NvbFR5cGVEb21haW5F
bnVtUmVkLAotICAgIFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtR3JlZW4sCi0gICAgVGVzdFBy
b3RvY29sVHlwZURvbWFpbkVudW1CbHVlLAorICAgIFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVt
MSwKKyAgICBUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bTIsCiB9OwogCiAKIAogQHByb3RvY29s
IFRlc3RQcm90b2NvbENvbW1hbmREb21haW5Eb21haW5IYW5kbGVyIDxOU09iamVjdD4KIEBvcHRp
b25hbAotLSAodm9pZCljb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZVdpdGhFcnJvckNhbGxiYWNr
Oih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6
KHZvaWQoXikoVGVzdFByb3RvY29sQ29tbWFuZERvbWFpbkNvbW1hbmRXaXRoRW51bVJldHVyblZh
bHVlUmV0dXJuVmFsdWUgcmV0dXJuVmFsdWUpKXN1Y2Nlc3NDYWxsYmFjazsKKy0gKHZvaWQpY29t
bWFuZFdpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxs
YmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikoVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW0g
ZW51bVJlcXVpcmVkLCBUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bSAqZW51bU9wdGlvbmFsLCBU
ZXN0UHJvdG9jb2xDb21tYW5kRG9tYWluKGFub255bW91cykgcmV0dXJuUmVxdWlyZWQsIFRlc3RQ
cm90b2NvbENvbW1hbmREb21haW4oYW5vbnltb3VzKSAqcmV0dXJuT3B0aW9uYWwpKXN1Y2Nlc3ND
YWxsYmFjayBlbnVtUmVxdWlyZWQ6KFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtKWVudW1SZXF1
aXJlZCBlbnVtT3B0aW9uYWw6KFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtICopZW51bU9wdGlv
bmFsIHBhcmFtZXRlclJlcXVpcmVkOihUZXN0UHJvdG9jb2xDb21tYW5kRG9tYWluKGFub255bW91
cykpcGFyYW1ldGVyUmVxdWlyZWQgcGFyYW1ldGVyT3B0aW9uYWw6KFRlc3RQcm90b2NvbENvbW1h
bmREb21haW4oYW5vbnltb3VzKSAqKXBhcmFtZXRlck9wdGlvbmFsOwogQGVuZAogCiBfX2F0dHJp
YnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKIEBpbnRlcmZhY2UgVGVzdFByb3RvY29s
RXZlbnREb21haW5Eb21haW5FdmVudERpc3BhdGNoZXIgOiBOU09iamVjdAotLSAodm9pZClldmVu
dFdpdGhFbnVtUGFyYW1ldGVyV2l0aFBhcmFtZXRlcjooVGVzdFByb3RvY29sRXZlbnREb21haW5F
dmVudFdpdGhFbnVtUGFyYW1ldGVyUGFyYW1ldGVyKXBhcmFtZXRlcjsKKy0gKHZvaWQpZXZlbnRX
aXRoRW51bVJlcXVpcmVkOihUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bSllbnVtUmVxdWlyZWQg
ZW51bU9wdGlvbmFsOihUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bSAqKWVudW1PcHRpb25hbCBw
YXJhbWV0ZXJSZXF1aXJlZDooVGVzdFByb3RvY29sRXZlbnREb21haW4oYW5vbnltb3VzKSlwYXJh
bWV0ZXJSZXF1aXJlZCBwYXJhbWV0ZXJPcHRpb25hbDooVGVzdFByb3RvY29sRXZlbnREb21haW4o
YW5vbnltb3VzKSAqKXBhcmFtZXRlck9wdGlvbmFsOwogQGVuZAogCiAKQEAgLTEwNTAsMTIgKzEx
MDMsMTAgQEAgaW5saW5lIFN0cmluZyB0b1Byb3RvY29sU3RyaW5nKFRlc3RQcm90b2NvbFR5cGVE
b21haW5FbnVtIHZhbHVlKQogICAgIHN3aXRjaCh2YWx1ZSkgewogICAgIGNhc2UgVGVzdFByb3Rv
Y29sVHlwZURvbWFpbkVudW1TaGFyZWQ6CiAgICAgICAgIHJldHVybiAic2hhcmVkIl9zOwotICAg
IGNhc2UgVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW1SZWQ6Ci0gICAgICAgIHJldHVybiAicmVk
Il9zOwotICAgIGNhc2UgVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW1HcmVlbjoKLSAgICAgICAg
cmV0dXJuICJncmVlbiJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtQmx1
ZToKLSAgICAgICAgcmV0dXJuICJibHVlIl9zOworICAgIGNhc2UgVGVzdFByb3RvY29sVHlwZURv
bWFpbkVudW0xOgorICAgICAgICByZXR1cm4gIjEiX3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xU
eXBlRG9tYWluRW51bTI6CisgICAgICAgIHJldHVybiAiMiJfczsKICAgICB9CiB9CiAKQEAgLTEw
NjQsMTIgKzExMTUsMTAgQEAgaW5saW5lIE9wdGlvbmFsPFRlc3RQcm90b2NvbFR5cGVEb21haW5F
bnVtPiBmcm9tUHJvdG9jb2xTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWwKIHsKICAgICBpZiAodmFs
dWUgPT0gInNoYXJlZCIpCiAgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51
bVNoYXJlZDsKLSAgICBpZiAodmFsdWUgPT0gInJlZCIpCi0gICAgICAgIHJldHVybiBUZXN0UHJv
dG9jb2xUeXBlRG9tYWluRW51bVJlZDsKLSAgICBpZiAodmFsdWUgPT0gImdyZWVuIikKLSAgICAg
ICAgcmV0dXJuIFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtR3JlZW47Ci0gICAgaWYgKHZhbHVl
ID09ICJibHVlIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtQmx1
ZTsKKyAgICBpZiAodmFsdWUgPT0gIjEiKQorICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sVHlw
ZURvbWFpbkVudW0xOworICAgIGlmICh2YWx1ZSA9PSAiMiIpCisgICAgICAgIHJldHVybiBUZXN0
UHJvdG9jb2xUeXBlRG9tYWluRW51bTI7CiAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KIApA
QCAtMTExNywxNyArMTE2NiwxNyBAQCB1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwogCiBAaW50
ZXJmYWNlIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9ucyAoVHlwZURvbWFpbkRvbWFpbikKIAot
KyAodm9pZClfcGFyc2VUeXBlRG9tYWluRW51bTooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBh
eWxvYWQ6KGlkKXBheWxvYWQ7CisrICh2b2lkKV9wYXJzZUVudW06KE5TTnVtYmVyICoqKW91dFZh
bHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOwogCiBAZW5kCiAKIEBpbXBsZW1lbnRhdGlvbiBU
ZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKFR5cGVEb21haW5Eb21haW4pCiAKLSsgKHZvaWQp
X3BhcnNlVHlwZURvbWFpbkVudW06KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21QYXlsb2FkOihp
ZClwYXlsb2FkCisrICh2b2lkKV9wYXJzZUVudW06KE5TTnVtYmVyICoqKW91dFZhbHVlIGZyb21Q
YXlsb2FkOihpZClwYXlsb2FkCiB7CiAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRShw
YXlsb2FkLCBbTlNTdHJpbmcgY2xhc3NdKTsKICAgICBPcHRpb25hbDxUZXN0UHJvdG9jb2xUeXBl
RG9tYWluRW51bT4gcmVzdWx0ID0gSW5zcGVjdG9yOjpmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFBy
b3RvY29sVHlwZURvbWFpbkVudW0+KHBheWxvYWQpOwotICAgIFRIUk9XX0VYQ0VQVElPTl9GT1Jf
QkFEX0VOVU1fVkFMVUUocmVzdWx0LCBAIlR5cGVEb21haW5FbnVtIik7CisgICAgVEhST1dfRVhD
RVBUSU9OX0ZPUl9CQURfRU5VTV9WQUxVRShyZXN1bHQsIEAiRW51bSIpOwogICAgICpvdXRWYWx1
ZSA9IEAocmVzdWx0LnZhbHVlKCkpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZXZlbnQtdGFyZ2V0VHlwZS1t
YXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZXZlbnQtdGFyZ2V0VHlw
ZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbi1yZXN1bHQKaW5kZXggZTJlZDlm
ODg5NGNlNzc2YjI3MmQ2MTEzZTUzNmNhYTc0NmViY2I4NS4uYmU5NGIzNTk0MDAzMmIzZTlhMzM2
ZDU0MTM0NDc3Yjk2NWNkM2E1NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2V2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmct
ZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24tcmVzdWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9ldmVudC10YXJnZXRUeXBlLW1h
dGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uLXJlc3VsdApAQCAtNzAsNyArNzAsNyBA
QCBJbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJEb21haW4iLCBbInBhZ2UiXSk7CiAK
ICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIAotI2luY2x1ZGUg
IlRlc3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgog
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CiAj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KIApAQCAt
ODgsNyArODgsNyBAQCBwcml2YXRlOgogY2xhc3MgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3Bh
dGNoZXIgOiBwdWJsaWMgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewogcHVibGljOgogICAg
IHZpcnR1YWwgfkFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyKCkgeyB9Ci0gICAgdmly
dHVhbCB2b2lkIENvbW1hbmQobG9uZyBjYWxsSWQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgQ29t
bWFuZChsb25nIHByb3RvY29sX2NhbGxJZCkgPSAwOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSW5z
cGVjdG9yCkBAIC0xMzAsMTEgKzEzMCwxNCBAQCBwdWJsaWM6CiAKICNpbmNsdWRlICJUZXN0UHJv
dG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx0dXBsZT4KKyNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQu
aD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3Ry
aW5nOworCiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIGNs
YXNzIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyOwpAQCAtMTQyLDcgKzE0NSw3IEBA
IGNsYXNzIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyOwogCiBjbGFzcyBEb21haW5C
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewogcHVibGljOgotICAgIHZpcnR1YWwgdm9pZCBDb21t
YW5kKEVycm9yU3RyaW5nJikgPSAwOworICAgIHZpcnR1YWwgUHJvdG9jb2w6OkVycm9yU3RyaW5n
T3I8dm9pZD4gQ29tbWFuZCgpID0gMDsKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIH5Eb21haW5C
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKTsKIH07CkBAIC0xNTAsOSArMTUzLDkgQEAgcHJvdGVj
dGVkOgogY2xhc3MgRG9tYWluQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgU3VwcGxl
bWVudGFsQmFja2VuZERpc3BhdGNoZXIgewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8RG9tYWlu
QmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYsIERvbWFpbkJhY2tl
bmREaXNwYXRjaGVySGFuZGxlciopOwotICAgIHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQs
IGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpIGZpbmFs
OworICAgIHZvaWQgZGlzcGF0Y2gobG9uZyBwcm90b2NvbF9jYWxsSWQsIGNvbnN0IFN0cmluZyYg
cHJvdG9jb2xfbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX21lc3NhZ2UpIGZp
bmFsOwogcHJpdmF0ZToKLSAgICB2b2lkIENvbW1hbmQobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxK
U09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7CisgICAgdm9pZCBDb21tYW5kKGxvbmcgcHJvdG9j
bF9jYWxsSWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfcGFyYW1ldGVycyk7CiAj
aWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiBwdWJsaWM6CiAgICAg
dm9pZCBzZXRBbHRlcm5hdGVEaXNwYXRjaGVyKEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRj
aGVyKiBhbHRlcm5hdGVEaXNwYXRjaGVyKSB7IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IGFsdGVy
bmF0ZURpc3BhdGNoZXI7IH0KQEAgLTIwMSw5ICsyMDQsNyBAQCBwcml2YXRlOgogI2luY2x1ZGUg
IlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0lu
c3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KICNp
bmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5n
Lmg+CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKICNpbmNs
dWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCkBAIC0yMjUsMzggKzIyNiwz
OCBAQCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6RG9tYWluQmFja2VuZERpc3BhdGNoZXIoQmFj
a2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYQogICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJl
Z2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbigiRG9tYWluIl9zLCB0aGlzKTsKIH0KIAotdm9pZCBE
b21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0
cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpCit2b2lkIERvbWFpbkJh
Y2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHByb3RvY29sX2NhbGxJZCwgY29uc3QgU3Ry
aW5nJiBwcm90b2NvbF9tZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfbWVzc2Fn
ZSkKIHsKICAgICBSZWY8RG9tYWluQmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOwog
Ci0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVyczsKLSAgICBtZXNzYWdlLT5nZXRP
YmplY3QoInBhcmFtcyJfcywgcGFyYW1ldGVycyk7CisgICAgYXV0byBwcm90b2NvbF9wYXJhbWV0
ZXJzID0gcHJvdG9jb2xfbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3MpOwogCi0gICAgaWYg
KG1ldGhvZCA9PSAiQ29tbWFuZCIpIHsKLSAgICAgICAgQ29tbWFuZChyZXF1ZXN0SWQsIFdURk1v
dmUocGFyYW1ldGVycykpOworICAgIGlmIChwcm90b2NvbF9tZXRob2QgPT0gIkNvbW1hbmQiKSB7
CisgICAgICAgIENvbW1hbmQocHJvdG9jb2xfY2FsbElkLCBXVEZNb3ZlKHByb3RvY29sX3BhcmFt
ZXRlcnMpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1fYmFja2VuZERpc3BhdGNo
ZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5k
LCAiJ0RvbWFpbi4iICsgbWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOworICAgIG1fYmFja2Vu
ZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhv
ZE5vdEZvdW5kLCAiJ0RvbWFpbi4iICsgcHJvdG9jb2xfbWV0aG9kICsgIicgd2FzIG5vdCBmb3Vu
ZCIpOwogfQogCi12b2lkIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpDb21tYW5kKGxvbmcgcmVx
dWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQordm9pZCBEb21haW5CYWNrZW5kRGlzcGF0
Y2hlcjo6Q29tbWFuZChsb25nIHByb3RvY29sX2NhbGxJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4m
JikKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKICAgICBp
ZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hl
ci0+Q29tbWFuZChyZXF1ZXN0SWQpOworICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPkNv
bW1hbmQocHJvdG9jb2xfY2FsbElkKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZiAv
LyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIAotICAgIEVycm9yU3Ry
aW5nIGVycm9yOwotICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6
Y3JlYXRlKCk7Ci0gICAgbV9hZ2VudC0+Q29tbWFuZChlcnJvcik7CisgICAgYXV0byByZXN1bHQg
PSBtX2FnZW50LT5Db21tYW5kKCk7CisgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAgICAgQVNTRVJU
KCFyZXN1bHQuZXJyb3IoKS5pc0VtcHR5KCkpOworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVy
LT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgcmVz
dWx0LmVycm9yKCkpOworICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgaWYgKCFlcnJvci5s
ZW5ndGgoKSkKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVl
c3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tl
bmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2
ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOworICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2Ug
PSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRS
ZXNwb25zZShwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJvdG9jb2xfanNvbk1lc3NhZ2UpLCBm
YWxzZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgpAQCAtMjk3LDYgKzI5OCw3IEBA
IHZvaWQgRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkNvbW1hbmQobG9uZyByZXF1ZXN0SWQsIFJl
ZlB0cjxKU09OOjpPYmplY3Q+JiYpCiAKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgi
CiAjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4K
ICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7
CkBAIC0zNDksMTYgKzM1MSwxNSBAQCBwcml2YXRlOgogI2luY2x1ZGUgIlRlc3RGcm9udGVuZERp
c3BhdGNoZXJzLmgiCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVu
ZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogbmFtZXNwYWNlIElu
c3BlY3RvciB7CiAKIHZvaWQgRG9tYWluRnJvbnRlbmREaXNwYXRjaGVyOjpFdmVudCgpCiB7Ci0g
ICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgp
OwotICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRvbWFpbi5FdmVudCJf
cyk7CisgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRl
KCk7CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiRG9t
YWluLkV2ZW50Il9zKTsKIAotICAgIG1fZnJvbnRlbmRSb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNz
YWdlLT50b0pTT05TdHJpbmcoKSk7CisgICAgbV9mcm9udGVuZFJvdXRlci5zZW5kRXZlbnQocHJv
dG9jb2xfanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCkBAIC0zOTgsNyArMzk5LDkgQEAgdm9pZCBEb21haW5Gcm9udGVuZERpc3BhdGNo
ZXI6OkV2ZW50KCkKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yUHJvdG9jb2xUeXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5j
bHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKQEAg
LTQ1Miw4ICs0NTUsNyBAQCBuYW1lc3BhY2UgUHJvdG9jb2wgewogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKIAotI2luY2x1ZGUgPHd0Zi9PcHRp
b25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvQXNz
ZXJ0aW9ucy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtNTA5LDcgKzUxMSw3IEBA
IGNsYXNzIE9iakNJbnNwZWN0b3JEb21haW5CYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1Ymxp
YyBBbHRlcm5hdGVEb21haW5CYWNrZW5kCiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBw
dWJsaWM6CiAgICAgT2JqQ0luc3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyKGlkPFRlc3RQ
cm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+IGhhbmRsZXIpIHsgbV9kZWxlZ2F0ZSA9IGhhbmRs
ZXI7IH0KLSAgICB2b2lkIENvbW1hbmQobG9uZyByZXF1ZXN0SWQpIGZpbmFsOworICAgIHZvaWQg
Q29tbWFuZChsb25nIHByb3RvY29sX2NhbGxJZCkgZmluYWw7CiBwcml2YXRlOgogICAgIFJldGFp
blB0cjxpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPj4gbV9kZWxlZ2F0ZTsKIH07
CkBAIC01NTcsMjEgKzU1OSwyMiBAQCBwcml2YXRlOgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsK
IAotdm9pZCBPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkNvbW1hbmQobG9u
ZyByZXF1ZXN0SWQpCit2b2lkIE9iakNJbnNwZWN0b3JEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6
Q29tbWFuZChsb25nIHByb3RvY29sX2NhbGxJZCkKIHsKICAgICBpZiAoIVttX2RlbGVnYXRlIHJl
c3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoQ29tbWFuZFdpdGhFcnJvckNhbGxiYWNrOnN1Y2Nl
c3NDYWxsYmFjazopXSkgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90
b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAi
J0RvbWFpbi5Db21tYW5kJyB3YXMgbm90IGZvdW5kIl9zKTsKKyAgICAgICAgYmFja2VuZERpc3Bh
dGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxsSWQsIEJhY2tlbmREaXNw
YXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEb21haW4uQ29tbWFuZCcgd2FzIG5vdCBmb3VuZCJf
cyk7CiAgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmlu
ZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xF
cnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwor
ICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHByb3RvY29s
X2NhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CiAgICAgICAg
IGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgfTsKIAogICAg
IGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF57Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNl
bmRSZXNwb25zZShyZXF1ZXN0SWQsIEpTT046Ok9iamVjdDo6Y3JlYXRlKCksIGZhbHNlKTsKKyAg
ICAgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7
CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShwcm90b2NvbF9jYWxs
SWQsIFdURk1vdmUocHJvdG9jb2xfanNvbk1lc3NhZ2UpLCBmYWxzZSk7CiAgICAgfTsKIAogICAg
IFttX2RlbGVnYXRlIENvbW1hbmRXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nl
c3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOwpAQCAtNzczLDkgKzc3Niw5IEBAIHVzaW5nIG5h
bWVzcGFjZSBJbnNwZWN0b3I7CiB7CiAgICAgY29uc3QgRnJvbnRlbmRSb3V0ZXImIHJvdXRlciA9
IF9jb250cm9sbGVyLT5mcm9udGVuZFJvdXRlcigpOwogCi0gICAgUmVmPEpTT046Ok9iamVjdD4g
anNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIGpzb25NZXNzYWdlLT5z
ZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRvbWFpbi5FdmVudCJfcyk7Ci0gICAgcm91dGVyLnNlbmRF
dmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOworICAgIGF1dG8gcHJvdG9jb2xfanNv
bk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIHByb3RvY29sX2pzb25NZXNz
YWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRvbWFpbi5FdmVudCJfcyk7CisgICAgcm91dGVy
LnNlbmRFdmVudChwcm90b2NvbF9qc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwogfQogCiBA
ZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZXhwZWN0ZWQvZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uLXJlc3Vs
dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3Rl
ZC9ldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0CmluZGV4IDkwZTE0
ZThjN2JiNGYwNTE1MTNjYmQ3YzNjNmRjN2I5NmZjYzFhNzQuLjg0N2I0OTNmNzFjNTdlNDI3M2Q4
NDk2MmJhZTlmNmM5MjBmZGM5ZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9ldmVudHMtd2l0aC1vcHRpb25hbC1wYXJh
bWV0ZXJzLmpzb24tcmVzdWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9leHBlY3RlZC9ldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpz
b24tcmVzdWx0CkBAIC03MCw3ICs3MCw3IEBAIEluc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21h
aW4oIkRhdGFiYXNlIiwgbnVsbCk7CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9E
SVNQQVRDSEVSUykKIAotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVkZSAi
VGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
RnJvbnRlbmRSb3V0ZXIuaD4KIApAQCAtMTI2LDExICsxMjYsMTQgQEAgcHJpdmF0ZToKIAogI2lu
Y2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9J
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHR1cGxlPgorI2luY2x1ZGUg
PHd0Zi9FeHBlY3RlZC5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAotdHlwZWRlZiBT
dHJpbmcgRXJyb3JTdHJpbmc7CisKIAogCiAKQEAgLTE3MSw5ICsxNzQsNyBAQCB0eXBlZGVmIFN0
cmluZyBFcnJvclN0cmluZzsKICNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCiAK
ICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2lu
Y2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+
Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9B
TFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAjaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNw
YXRjaGVycy5oIgpAQCAtMjIxLDYgKzIyMiw3IEBAIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCiAj
aW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVz
Lmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewpAQCAtMjMxLDggKzIzMyw4IEBAIGNsYXNz
IERhdGFiYXNlRnJvbnRlbmREaXNwYXRjaGVyIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKIHB1YmxpYzoKICAgICBEYXRhYmFzZUZyb250ZW5kRGlzcGF0Y2hlcihGcm9udGVuZFJvdXRl
ciYgZnJvbnRlbmRSb3V0ZXIpIDogbV9mcm9udGVuZFJvdXRlcihmcm9udGVuZFJvdXRlcikgeyB9
Ci0gICAgdm9pZCBkaWRFeGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJzKFJlZlB0cjxKU09OOjpBcnJh
eU9mPFN0cmluZz4+IGNvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcqIG5vdGVzLCBjb25zdCBkb3Vi
bGUqIHRpbWVzdGFtcCwgUmVmUHRyPEpTT046Ok9iamVjdD4gdmFsdWVzLCBSZWZQdHI8SlNPTjo6
VmFsdWU+IHBheWxvYWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJy
b3I+IHNxbEVycm9yLCBjb25zdCBTdHJpbmcqIHNjcmVlbkNvbG9yLCBSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4gYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBT
dHJpbmcqIHByaW50Q29sb3IpOwotICAgIHZvaWQgZGlkRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0
ZXJzKFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+IGNvbHVtbk5hbWVzLCBjb25zdCBTdHJp
bmcmIG5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiB2YWx1ZXMs
IFJlZlB0cjxKU09OOjpWYWx1ZT4gcGF5bG9hZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRhdGFiYXNlOjpFcnJvcj4gc3FsRXJyb3IsIGNvbnN0IFN0cmluZyYgc2NyZWVuQ29sb3IsIFJl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiBhbHRlcm5hdGVD
b2xvcnMsIGNvbnN0IFN0cmluZyYgcHJpbnRDb2xvcik7CisgICAgdm9pZCBkaWRFeGVjdXRlT3B0
aW9uYWxQYXJhbWV0ZXJzKFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+JiYgb3B0X2NvbHVt
bk5hbWVzLCBjb25zdCBTdHJpbmcmIG9wdF9ub3RlcywgT3B0aW9uYWw8ZG91YmxlPiYmIG9wdF90
aW1lc3RhbXAsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgb3B0X3ZhbHVlcywgUmVmUHRyPEpTT046
OlZhbHVlPiYmIG9wdF9wYXlsb2FkLCBSZWZQdHI8UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4m
JiBvcHRfc3FsRXJyb3IsIGNvbnN0IFN0cmluZyYgb3B0X3NjcmVlbkNvbG9yLCBSZWZQdHI8UHJv
dG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+JiYgb3B0X2FsdGVybmF0ZUNvbG9ycywgY29uc3Qg
U3RyaW5nJiBvcHRfcHJpbnRDb2xvcik7CisgICAgdm9pZCBkaWRFeGVjdXRlTm9PcHRpb25hbFBh
cmFtZXRlcnMoUmVmPEpTT046OkFycmF5T2Y8U3RyaW5nPj4mJiBjb2x1bW5OYW1lcywgY29uc3Qg
U3RyaW5nJiBub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgUmVmPEpTT046Ok9iamVjdD4mJiB2YWx1
ZXMsIFJlZjxKU09OOjpWYWx1ZT4mJiBwYXlsb2FkLCBSZWY8UHJvdG9jb2w6OkRhdGFiYXNlOjpF
cnJvcj4mJiBzcWxFcnJvciwgY29uc3QgU3RyaW5nJiBzY3JlZW5Db2xvciwgUmVmPFByb3RvY29s
OjpEYXRhYmFzZTo6Q29sb3JMaXN0PiYmIGFsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nJiBw
cmludENvbG9yKTsKIHByaXZhdGU6CiAgICAgRnJvbnRlbmRSb3V0ZXImIG1fZnJvbnRlbmRSb3V0
ZXI7CiB9OwpAQCAtMjc0LDU1ICsyNzYsNTQgQEAgcHJpdmF0ZToKICNpbmNsdWRlICJUZXN0RnJv
bnRlbmREaXNwYXRjaGVycy5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
RnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKIG5hbWVz
cGFjZSBJbnNwZWN0b3IgewogCi12b2lkIERhdGFiYXNlRnJvbnRlbmREaXNwYXRjaGVyOjpkaWRF
eGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJzKFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+IGNv
bHVtbk5hbWVzLCBjb25zdCBTdHJpbmcqIG5vdGVzLCBjb25zdCBkb3VibGUqIHRpbWVzdGFtcCwg
UmVmUHRyPEpTT046Ok9iamVjdD4gdmFsdWVzLCBSZWZQdHI8SlNPTjo6VmFsdWU+IHBheWxvYWQs
IFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IHNxbEVycm9yLCBj
b25zdCBTdHJpbmcqIHNjcmVlbkNvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0
YWJhc2U6OkNvbG9yTGlzdD4gYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcqIHByaW50Q29s
b3IpCit2b2lkIERhdGFiYXNlRnJvbnRlbmREaXNwYXRjaGVyOjpkaWRFeGVjdXRlT3B0aW9uYWxQ
YXJhbWV0ZXJzKFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+JiYgb3B0X2NvbHVtbk5hbWVz
LCBjb25zdCBTdHJpbmcmIG9wdF9ub3RlcywgT3B0aW9uYWw8ZG91YmxlPiYmIG9wdF90aW1lc3Rh
bXAsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgb3B0X3ZhbHVlcywgUmVmUHRyPEpTT046OlZhbHVl
PiYmIG9wdF9wYXlsb2FkLCBSZWZQdHI8UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4mJiBvcHRf
c3FsRXJyb3IsIGNvbnN0IFN0cmluZyYgb3B0X3NjcmVlbkNvbG9yLCBSZWZQdHI8UHJvdG9jb2w6
OkRhdGFiYXNlOjpDb2xvckxpc3Q+JiYgb3B0X2FsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5n
JiBvcHRfcHJpbnRDb2xvcikKIHsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9
IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0
aG9kIl9zLCAiRGF0YWJhc2UuZGlkRXhlY3V0ZU9wdGlvbmFsUGFyYW1ldGVycyJfcyk7Ci0gICAg
UmVmPEpTT046Ok9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsK
LSAgICBpZiAoY29sdW1uTmFtZXMpCi0gICAgICAgIHBhcmFtc09iamVjdC0+c2V0QXJyYXkoImNv
bHVtbk5hbWVzIl9zLCBjb2x1bW5OYW1lcyk7Ci0gICAgaWYgKG5vdGVzKQotICAgICAgICBwYXJh
bXNPYmplY3QtPnNldFN0cmluZygibm90ZXMiX3MsICpub3Rlcyk7Ci0gICAgaWYgKHRpbWVzdGFt
cCkKLSAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywgKnRpbWVz
dGFtcCk7Ci0gICAgaWYgKHZhbHVlcykKLSAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRPYmplY3Qo
InZhbHVlcyJfcywgdmFsdWVzKTsKLSAgICBpZiAocGF5bG9hZCkKLSAgICAgICAgcGFyYW1zT2Jq
ZWN0LT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgKnBheWxvYWQpOwotICAgIGlmIChzcWxFcnJvcikK
LSAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBzcWxFcnJvcik7
Ci0gICAgaWYgKHNjcmVlbkNvbG9yKQotICAgICAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygi
c2NyZWVuQ29sb3IiX3MsICpzY3JlZW5Db2xvcik7Ci0gICAgaWYgKGFsdGVybmF0ZUNvbG9ycykK
LSAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCBhbHRl
cm5hdGVDb2xvcnMpOwotICAgIGlmIChwcmludENvbG9yKQotICAgICAgICBwYXJhbXNPYmplY3Qt
PnNldFN0cmluZygicHJpbnRDb2xvciJfcywgKnByaW50Q29sb3IpOwotICAgIGpzb25NZXNzYWdl
LT5zZXRPYmplY3QoInBhcmFtcyJfcywgV1RGTW92ZShwYXJhbXNPYmplY3QpKTsKKyAgICBhdXRv
IHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBwcm90
b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJEYXRhYmFzZS5kaWRFeGVj
dXRlT3B0aW9uYWxQYXJhbWV0ZXJzIl9zKTsKKyAgICBhdXRvIHByb3RvY29sX3BhcmFtc09iamVj
dCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgaWYgKCEhb3B0X2NvbHVtbk5hbWVzKQor
ICAgICAgICBwcm90b2NvbF9wYXJhbXNPYmplY3QtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywg
b3B0X2NvbHVtbk5hbWVzLnJlbGVhc2VOb25OdWxsKCkpOworICAgIGlmICghIW9wdF9ub3RlcykK
KyAgICAgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCBvcHRf
bm90ZXMpOworICAgIGlmICghIW9wdF90aW1lc3RhbXApCisgICAgICAgIHByb3RvY29sX3BhcmFt
c09iamVjdC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsICpvcHRfdGltZXN0YW1wKTsKKyAgICBp
ZiAoISFvcHRfdmFsdWVzKQorICAgICAgICBwcm90b2NvbF9wYXJhbXNPYmplY3QtPnNldE9iamVj
dCgidmFsdWVzIl9zLCBvcHRfdmFsdWVzLnJlbGVhc2VOb25OdWxsKCkpOworICAgIGlmICghIW9w
dF9wYXlsb2FkKQorICAgICAgICBwcm90b2NvbF9wYXJhbXNPYmplY3QtPnNldFZhbHVlKCJwYXls
b2FkIl9zLCBvcHRfcGF5bG9hZC5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICBpZiAoISFvcHRfc3Fs
RXJyb3IpCisgICAgICAgIHByb3RvY29sX3BhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJzcWxFcnJv
ciJfcywgb3B0X3NxbEVycm9yLnJlbGVhc2VOb25OdWxsKCkpOworICAgIGlmICghIW9wdF9zY3Jl
ZW5Db2xvcikKKyAgICAgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInNjcmVl
bkNvbG9yIl9zLCBvcHRfc2NyZWVuQ29sb3IpOworICAgIGlmICghIW9wdF9hbHRlcm5hdGVDb2xv
cnMpCisgICAgICAgIHByb3RvY29sX3BhcmFtc09iamVjdC0+c2V0QXJyYXkoImFsdGVybmF0ZUNv
bG9ycyJfcywgb3B0X2FsdGVybmF0ZUNvbG9ycy5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICBpZiAo
ISFvcHRfcHJpbnRDb2xvcikKKyAgICAgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRTdHJp
bmcoInByaW50Q29sb3IiX3MsIG9wdF9wcmludENvbG9yKTsKKyAgICBwcm90b2NvbF9qc29uTWVz
c2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiX3MsIFdURk1vdmUocHJvdG9jb2xfcGFyYW1zT2JqZWN0
KSk7CiAKLSAgICBtX2Zyb250ZW5kUm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09O
U3RyaW5nKCkpOworICAgIG1fZnJvbnRlbmRSb3V0ZXIuc2VuZEV2ZW50KHByb3RvY29sX2pzb25N
ZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7CiB9CiAKLXZvaWQgRGF0YWJhc2VGcm9udGVuZERpc3Bh
dGNoZXI6OmRpZEV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhSZWZQdHI8SlNPTjo6QXJyYXlP
ZjxTdHJpbmc+PiBjb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBub3RlcywgZG91YmxlIHRpbWVz
dGFtcCwgUmVmUHRyPEpTT046Ok9iamVjdD4gdmFsdWVzLCBSZWZQdHI8SlNPTjo6VmFsdWU+IHBh
eWxvYWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IHNxbEVy
cm9yLCBjb25zdCBTdHJpbmcmIHNjcmVlbkNvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4gYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcmIHBy
aW50Q29sb3IpCit2b2lkIERhdGFiYXNlRnJvbnRlbmREaXNwYXRjaGVyOjpkaWRFeGVjdXRlTm9P
cHRpb25hbFBhcmFtZXRlcnMoUmVmPEpTT046OkFycmF5T2Y8U3RyaW5nPj4mJiBjb2x1bW5OYW1l
cywgY29uc3QgU3RyaW5nJiBub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgUmVmPEpTT046Ok9iamVj
dD4mJiB2YWx1ZXMsIFJlZjxKU09OOjpWYWx1ZT4mJiBwYXlsb2FkLCBSZWY8UHJvdG9jb2w6OkRh
dGFiYXNlOjpFcnJvcj4mJiBzcWxFcnJvciwgY29uc3QgU3RyaW5nJiBzY3JlZW5Db2xvciwgUmVm
PFByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiYmIGFsdGVybmF0ZUNvbG9ycywgY29uc3Qg
U3RyaW5nJiBwcmludENvbG9yKQogewotICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdl
ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJt
ZXRob2QiX3MsICJEYXRhYmFzZS5kaWRFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMiX3MpOwot
ICAgIFJlZjxKU09OOjpPYmplY3Q+IHBhcmFtc09iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRl
KCk7Ci0gICAgcGFyYW1zT2JqZWN0LT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIGNvbHVtbk5h
bWVzKTsKLSAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygibm90ZXMiX3MsIG5vdGVzKTsKLSAg
ICBwYXJhbXNPYmplY3QtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCB0aW1lc3RhbXApOwotICAg
IHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIHZhbHVlcyk7Ci0gICAgcGFyYW1z
T2JqZWN0LT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgcGF5bG9hZCk7Ci0gICAgcGFyYW1zT2JqZWN0
LT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBzcWxFcnJvcik7Ci0gICAgcGFyYW1zT2JqZWN0LT5z
ZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCBzY3JlZW5Db2xvcik7Ci0gICAgcGFyYW1zT2JqZWN0
LT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCBhbHRlcm5hdGVDb2xvcnMpOwotICAgIHBh
cmFtc09iamVjdC0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCBwcmludENvbG9yKTsKLSAgICBq
c29uTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiX3MsIFdURk1vdmUocGFyYW1zT2JqZWN0KSk7
CisgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7
CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiRGF0YWJh
c2UuZGlkRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzIl9zKTsKKyAgICBhdXRvIHByb3RvY29s
X3BhcmFtc09iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgcHJvdG9jb2xfcGFy
YW1zT2JqZWN0LT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIFdURk1vdmUoY29sdW1uTmFtZXMp
KTsKKyAgICBwcm90b2NvbF9wYXJhbXNPYmplY3QtPnNldFN0cmluZygibm90ZXMiX3MsIG5vdGVz
KTsKKyAgICBwcm90b2NvbF9wYXJhbXNPYmplY3QtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCB0
aW1lc3RhbXApOworICAgIHByb3RvY29sX3BhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJ2YWx1ZXMi
X3MsIFdURk1vdmUodmFsdWVzKSk7CisgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRWYWx1
ZSgicGF5bG9hZCJfcywgV1RGTW92ZShwYXlsb2FkKSk7CisgICAgcHJvdG9jb2xfcGFyYW1zT2Jq
ZWN0LT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBXVEZNb3ZlKHNxbEVycm9yKSk7CisgICAgcHJv
dG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCBzY3JlZW5Db2xv
cik7CisgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3Jz
Il9zLCBXVEZNb3ZlKGFsdGVybmF0ZUNvbG9ycykpOworICAgIHByb3RvY29sX3BhcmFtc09iamVj
dC0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCBwcmludENvbG9yKTsKKyAgICBwcm90b2NvbF9q
c29uTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiX3MsIFdURk1vdmUocHJvdG9jb2xfcGFyYW1z
T2JqZWN0KSk7CiAKLSAgICBtX2Zyb250ZW5kUm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+
dG9KU09OU3RyaW5nKCkpOworICAgIG1fZnJvbnRlbmRSb3V0ZXIuc2VuZEV2ZW50KHByb3RvY29s
X2pzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEluc3Bl
Y3RvcgpAQCAtMzYyLDcgKzM2Myw5IEBAIHZvaWQgRGF0YWJhc2VGcm9udGVuZERpc3BhdGNoZXI6
OmRpZEV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhSZWZQdHI8SlNPTjo6QXJyCiAjcHJhZ21h
IG9uY2UKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMu
aD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVz
Lmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC0zOTEsNyArMzk0LDcgQEAgdXNp
bmcgQ29sb3JMaXN0ID0gSlNPTjo6QXJyYXlPZjxTdHJpbmc+OwogbmFtZXNwYWNlIERhdGFiYXNl
IHsKIAogLyogRGF0YWJhc2UgZXJyb3IuICovCi1jbGFzcyBFcnJvciA6IHB1YmxpYyBKU09OOjpP
YmplY3RCYXNlIHsKK2NsYXNzIEVycm9yIGZpbmFsIDogcHVibGljIEpTT046Ok9iamVjdEJhc2Ug
ewogcHVibGljOgogICAgIGVudW0gewogICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCkBAIC00MTgs
MTcgKzQyMSwxNyBAQCBwdWJsaWM6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBFcnJvcjsKICAgICBw
dWJsaWM6CiAKLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IE1lc3NhZ2VTZXQ+JiBzZXRNZXNzYWdl
KGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBNZXNzYWdlU2V0
PiYgc2V0TWVzc2FnZShjb25zdCBTdHJpbmcmIGluX21lc3NhZ2UpCiAgICAgICAgIHsKICAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBNZXNzYWdlU2V0KSwgcHJvcGVydHlfbWVz
c2FnZV9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJtZXNz
YWdlIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJtZXNzYWdl
Il9zLCBpbl9tZXNzYWdlKTsKICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TWVzc2FnZVNl
dD4oKTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDb2RlU2V0PiYgc2V0
Q29kZShpbnQgdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDb2RlU2V0PiYgc2V0Q29k
ZShpbnQgaW5fY29kZSkKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShT
VEFURSAmIENvZGVTZXQpLCBwcm9wZXJ0eV9jb2RlX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAg
IG1fcmVzdWx0LT5zZXRJbnRlZ2VyKCJjb2RlIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICBtX3Jl
c3VsdC0+c2V0SW50ZWdlcigiY29kZSJfcywgaW5fY29kZSk7CiAgICAgICAgICAgICByZXR1cm4g
Y2FzdFN0YXRlPENvZGVTZXQ+KCk7CiAgICAgICAgIH0KIApAQCAtNDk4LDggKzUwMSw3IEBAIHB1
YmxpYzoKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3Rz
LmgiCiAKLSNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3Ry
aW5nLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KIAogbmFtZXNwYWNlIEluc3BlY3Rv
ciB7CiAKQEAgLTc3OCwyOSArNzgwLDI5IEBAIHVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CiAg
ICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKGFsdGVybmF0ZUNv
bG9ycywgQCJhbHRlcm5hdGVDb2xvcnMiKTsKICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9P
UFRJT05BTF9QQVJBTUVURVIocHJpbnRDb2xvciwgQCJwcmludENvbG9yIik7CiAKLSAgICBSZWY8
SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAg
anNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiRGF0YWJhc2UuZGlkRXhlY3V0ZU9w
dGlvbmFsUGFyYW1ldGVycyJfcyk7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4gcGFyYW1zT2JqZWN0
ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdl
ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0
U3RyaW5nKCJtZXRob2QiX3MsICJEYXRhYmFzZS5kaWRFeGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJz
Il9zKTsKKyAgICBhdXRvIHByb3RvY29sX3BhcmFtc09iamVjdCA9IEpTT046Ok9iamVjdDo6Y3Jl
YXRlKCk7CiAgICAgaWYgKGNvbHVtbk5hbWVzKQotICAgICAgICBwYXJhbXNPYmplY3QtPnNldEFy
cmF5KCJjb2x1bW5OYW1lcyJfcywgdG9KU09OU3RyaW5nQXJyYXkoKCpjb2x1bW5OYW1lcykpKTsK
KyAgICAgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3Ms
IHRvSlNPTlN0cmluZ0FycmF5KCgqY29sdW1uTmFtZXMpKSk7CiAgICAgaWYgKG5vdGVzKQotICAg
ICAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygibm90ZXMiX3MsICgqbm90ZXMpKTsKKyAgICAg
ICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCAoKm5vdGVzKSk7
CiAgICAgaWYgKHRpbWVzdGFtcCkKLSAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXREb3VibGUoInRp
bWVzdGFtcCJfcywgKCp0aW1lc3RhbXApKTsKKyAgICAgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0
LT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywgKCp0aW1lc3RhbXApKTsKICAgICBpZiAodmFsdWVz
KQotICAgICAgICBwYXJhbXNPYmplY3QtPnNldE9iamVjdCgidmFsdWVzIl9zLCBbKCp2YWx1ZXMp
IHRvSlNPTk9iamVjdF0pOworICAgICAgICBwcm90b2NvbF9wYXJhbXNPYmplY3QtPnNldE9iamVj
dCgidmFsdWVzIl9zLCBbKCp2YWx1ZXMpIHRvSlNPTk9iamVjdF0pOwogICAgIGlmIChwYXlsb2Fk
KQotICAgICAgICBwYXJhbXNPYmplY3QtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCBbKCpwYXlsb2Fk
KSB0b0pTT05PYmplY3RdKTsKKyAgICAgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRWYWx1
ZSgicGF5bG9hZCJfcywgWygqcGF5bG9hZCkgdG9KU09OT2JqZWN0XSk7CiAgICAgaWYgKHNxbEVy
cm9yKQotICAgICAgICBwYXJhbXNPYmplY3QtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIFsoKnNx
bEVycm9yKSB0b0pTT05PYmplY3RdKTsKKyAgICAgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT5z
ZXRPYmplY3QoInNxbEVycm9yIl9zLCBbKCpzcWxFcnJvcikgdG9KU09OT2JqZWN0XSk7CiAgICAg
aWYgKHNjcmVlbkNvbG9yKQotICAgICAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygic2NyZWVu
Q29sb3IiX3MsICgqc2NyZWVuQ29sb3IpKTsKKyAgICAgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0
LT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCAoKnNjcmVlbkNvbG9yKSk7CiAgICAgaWYgKGFs
dGVybmF0ZUNvbG9ycykKLSAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRBcnJheSgiYWx0ZXJuYXRl
Q29sb3JzIl9zLCB0b0pTT05TdHJpbmdBcnJheSgoKmFsdGVybmF0ZUNvbG9ycykpKTsKKyAgICAg
ICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCB0
b0pTT05TdHJpbmdBcnJheSgoKmFsdGVybmF0ZUNvbG9ycykpKTsKICAgICBpZiAocHJpbnRDb2xv
cikKLSAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInByaW50Q29sb3IiX3MsICgqcHJp
bnRDb2xvcikpOwotICAgIGpzb25NZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyJfcywgV1RGTW92
ZShwYXJhbXNPYmplY3QpKTsKLSAgICByb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pT
T05TdHJpbmcoKSk7CisgICAgICAgIHByb3RvY29sX3BhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJw
cmludENvbG9yIl9zLCAoKnByaW50Q29sb3IpKTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+
c2V0T2JqZWN0KCJwYXJhbXMiX3MsIFdURk1vdmUocHJvdG9jb2xfcGFyYW1zT2JqZWN0KSk7Cisg
ICAgcm91dGVyLnNlbmRFdmVudChwcm90b2NvbF9qc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkp
OwogfQogCiAtICh2b2lkKWRpZEV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1dpdGhDb2x1bW5O
YW1lczooTlNBcnJheS8qPE5TU3RyaW5nPiovICopY29sdW1uTmFtZXMgbm90ZXM6KE5TU3RyaW5n
ICopbm90ZXMgdGltZXN0YW1wOihkb3VibGUpdGltZXN0YW1wIHZhbHVlczooUldJUHJvdG9jb2xK
U09OT2JqZWN0ICopdmFsdWVzIHBheWxvYWQ6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKXBheWxv
YWQgc3FsRXJyb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKilzcWxFcnJvciBzY3JlZW5D
b2xvcjooTlNTdHJpbmcgKilzY3JlZW5Db2xvciBhbHRlcm5hdGVDb2xvcnM6KE5TQXJyYXkvKjxO
U1N0cmluZz4qLyAqKWFsdGVybmF0ZUNvbG9ycyBwcmludENvbG9yOihOU1N0cmluZyAqKXByaW50
Q29sb3IKQEAgLTgxNiwyMCArODE4LDIwIEBAIHVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CiAg
ICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoYWx0ZXJuYXRlQ29sb3Jz
LCBAImFsdGVybmF0ZUNvbG9ycyIpOwogICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURf
UEFSQU1FVEVSKHByaW50Q29sb3IsIEAicHJpbnRDb2xvciIpOwogCi0gICAgUmVmPEpTT046Ok9i
amVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIGpzb25NZXNz
YWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRhdGFiYXNlLmRpZEV4ZWN1dGVOb09wdGlvbmFs
UGFyYW1ldGVycyJfcyk7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSlNP
Tjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBwYXJhbXNPYmplY3QtPnNldEFycmF5KCJjb2x1bW5O
YW1lcyJfcywgdG9KU09OU3RyaW5nQXJyYXkoY29sdW1uTmFtZXMpKTsKLSAgICBwYXJhbXNPYmpl
Y3QtPnNldFN0cmluZygibm90ZXMiX3MsIG5vdGVzKTsKLSAgICBwYXJhbXNPYmplY3QtPnNldERv
dWJsZSgidGltZXN0YW1wIl9zLCB0aW1lc3RhbXApOwotICAgIHBhcmFtc09iamVjdC0+c2V0T2Jq
ZWN0KCJ2YWx1ZXMiX3MsIFt2YWx1ZXMgdG9KU09OT2JqZWN0XSk7Ci0gICAgcGFyYW1zT2JqZWN0
LT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgW3BheWxvYWQgdG9KU09OT2JqZWN0XSk7Ci0gICAgcGFy
YW1zT2JqZWN0LT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBbc3FsRXJyb3IgdG9KU09OT2JqZWN0
XSk7Ci0gICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCBzY3JlZW5D
b2xvcik7Ci0gICAgcGFyYW1zT2JqZWN0LT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCB0
b0pTT05TdHJpbmdBcnJheShhbHRlcm5hdGVDb2xvcnMpKTsKLSAgICBwYXJhbXNPYmplY3QtPnNl
dFN0cmluZygicHJpbnRDb2xvciJfcywgcHJpbnRDb2xvcik7Ci0gICAganNvbk1lc3NhZ2UtPnNl
dE9iamVjdCgicGFyYW1zIl9zLCBXVEZNb3ZlKHBhcmFtc09iamVjdCkpOwotICAgIHJvdXRlci5z
ZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKKyAgICBhdXRvIHByb3RvY29s
X2pzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBwcm90b2NvbF9qc29u
TWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJEYXRhYmFzZS5kaWRFeGVjdXRlTm9PcHRp
b25hbFBhcmFtZXRlcnMiX3MpOworICAgIGF1dG8gcHJvdG9jb2xfcGFyYW1zT2JqZWN0ID0gSlNP
Tjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBwcm90b2NvbF9wYXJhbXNPYmplY3QtPnNldEFycmF5
KCJjb2x1bW5OYW1lcyJfcywgdG9KU09OU3RyaW5nQXJyYXkoY29sdW1uTmFtZXMpKTsKKyAgICBw
cm90b2NvbF9wYXJhbXNPYmplY3QtPnNldFN0cmluZygibm90ZXMiX3MsIG5vdGVzKTsKKyAgICBw
cm90b2NvbF9wYXJhbXNPYmplY3QtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCB0aW1lc3RhbXAp
OworICAgIHByb3RvY29sX3BhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIFt2YWx1
ZXMgdG9KU09OT2JqZWN0XSk7CisgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRWYWx1ZSgi
cGF5bG9hZCJfcywgW3BheWxvYWQgdG9KU09OT2JqZWN0XSk7CisgICAgcHJvdG9jb2xfcGFyYW1z
T2JqZWN0LT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBbc3FsRXJyb3IgdG9KU09OT2JqZWN0XSk7
CisgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCBz
Y3JlZW5Db2xvcik7CisgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRBcnJheSgiYWx0ZXJu
YXRlQ29sb3JzIl9zLCB0b0pTT05TdHJpbmdBcnJheShhbHRlcm5hdGVDb2xvcnMpKTsKKyAgICBw
cm90b2NvbF9wYXJhbXNPYmplY3QtPnNldFN0cmluZygicHJpbnRDb2xvciJfcywgcHJpbnRDb2xv
cik7CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIl9zLCBXVEZN
b3ZlKHByb3RvY29sX3BhcmFtc09iamVjdCkpOworICAgIHJvdXRlci5zZW5kRXZlbnQocHJvdG9j
b2xfanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKIH0KIAogQGVuZApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2dl
bmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uLXJlc3VsdCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9nZW5lcmF0ZS1k
b21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbi1yZXN1bHQKaW5kZXggMjk0YmE5MDgxMjE4
YTM1MDJkOTZkNDU1ZDRkNjNkMmIzZjVhYWU5YS4uMzljMzY2M2FmZjJmNmZiOWMwZWE3Yjg0OWNm
MzkwYWZkYTNiZmJhYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2dlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1
YXJkcy5qc29uLXJlc3VsdAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZXhwZWN0ZWQvZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRz
Lmpzb24tcmVzdWx0CkBAIC03NCw3ICs3NCw3IEBAIEluc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVE
b21haW4oIk5ldHdvcmszIiwgbnVsbCk7CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKIAotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVk
ZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yRnJvbnRlbmRSb3V0ZXIuaD4KIApAQCAtOTIsNyArOTIsNyBAQCBwcml2YXRlOgogY2xhc3Mg
QWx0ZXJuYXRlTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlciA6IHB1YmxpYyBBbHRlcm5hdGVCYWNr
ZW5kRGlzcGF0Y2hlciB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+QWx0ZXJuYXRlTmV0d29yazFC
YWNrZW5kRGlzcGF0Y2hlcigpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UobG9u
ZyBjYWxsSWQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlKGxvbmcgcHJvdG9j
b2xfY2FsbElkKSA9IDA7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKQEAgLTEzNCwx
MSArMTM0LDE0IEBAIHB1YmxpYzoKIAogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIK
ICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgor
I2luY2x1ZGUgPHR1cGxlPgorI2luY2x1ZGUgPHd0Zi9FeHBlY3RlZC5oPgorI2luY2x1ZGUgPHd0
Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKIAotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKIAogI2lmIEVO
QUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogY2xhc3MgQWx0ZXJuYXRlTmV0
d29yazFCYWNrZW5kRGlzcGF0Y2hlcjsKQEAgLTE0Niw3ICsxNDksNyBAQCBjbGFzcyBBbHRlcm5h
dGVOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOwogCiBjbGFzcyBOZXR3b3JrMUJhY2tlbmREaXNw
YXRjaGVySGFuZGxlciB7CiBwdWJsaWM6Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZShF
cnJvclN0cmluZyYpID0gMDsKKyAgICB2aXJ0dWFsIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZv
aWQ+IGxvYWRSZXNvdXJjZSgpID0gMDsKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIH5OZXR3b3Jr
MUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpOwogfTsKQEAgLTE1NCw5ICsxNTcsOSBAQCBwcm90
ZWN0ZWQ6CiBjbGFzcyBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIFN1
cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPE5l
dHdvcmsxQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYsIE5ldHdv
cmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7Ci0gICAgdm9pZCBkaXNwYXRjaChsb25nIHJl
cXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2Fn
ZSkgZmluYWw7CisgICAgdm9pZCBkaXNwYXRjaChsb25nIHByb3RvY29sX2NhbGxJZCwgY29uc3Qg
U3RyaW5nJiBwcm90b2NvbF9tZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfbWVz
c2FnZSkgZmluYWw7CiBwcml2YXRlOgotICAgIHZvaWQgbG9hZFJlc291cmNlKGxvbmcgcmVxdWVz
dElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOworICAgIHZvaWQgbG9hZFJl
c291cmNlKGxvbmcgcHJvdG9jbF9jYWxsSWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcHJvdG9j
b2xfcGFyYW1ldGVycyk7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hF
UlMpCiBwdWJsaWM6CiAgICAgdm9pZCBzZXRBbHRlcm5hdGVEaXNwYXRjaGVyKEFsdGVybmF0ZU5l
dHdvcmsxQmFja2VuZERpc3BhdGNoZXIqIGFsdGVybmF0ZURpc3BhdGNoZXIpIHsgbV9hbHRlcm5h
dGVEaXNwYXRjaGVyID0gYWx0ZXJuYXRlRGlzcGF0Y2hlcjsgfQpAQCAtMjA1LDkgKzIwOCw3IEBA
IHByaXZhdGU6CiAjaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgogCiAjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3
dGYvSlNPTlZhbHVlcy5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRF
X0RJU1BBVENIRVJTKQogI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMu
aCIKQEAgLTIyOSwzOCArMjMwLDM4IEBAIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI6Ok5ldHdv
cmsxQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmRECiAgICAgbV9i
YWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRjaGVyRm9yRG9tYWluKCJOZXR3b3JrMSJf
cywgdGhpcyk7CiB9CiAKLXZvaWQgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2go
bG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYm
IG1lc3NhZ2UpCit2b2lkIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcg
cHJvdG9jb2xfY2FsbElkLCBjb25zdCBTdHJpbmcmIHByb3RvY29sX21ldGhvZCwgUmVmPEpTT046
Ok9iamVjdD4mJiBwcm90b2NvbF9tZXNzYWdlKQogewogICAgIFJlZjxOZXR3b3JrMUJhY2tlbmRE
aXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKIAotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBh
cmFtZXRlcnM7Ci0gICAgbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3MsIHBhcmFtZXRlcnMp
OworICAgIGF1dG8gcHJvdG9jb2xfcGFyYW1ldGVycyA9IHByb3RvY29sX21lc3NhZ2UtPmdldE9i
amVjdCgicGFyYW1zIl9zKTsKIAotICAgIGlmIChtZXRob2QgPT0gImxvYWRSZXNvdXJjZSIpIHsK
LSAgICAgICAgbG9hZFJlc291cmNlKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7Cisg
ICAgaWYgKHByb3RvY29sX21ldGhvZCA9PSAibG9hZFJlc291cmNlIikgeworICAgICAgICBsb2Fk
UmVzb3VyY2UocHJvdG9jb2xfY2FsbElkLCBXVEZNb3ZlKHByb3RvY29sX3BhcmFtZXRlcnMpKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9y
dFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdv
cmsxLiIgKyBtZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7CisgICAgbV9iYWNrZW5kRGlzcGF0
Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91
bmQsICInTmV0d29yazEuIiArIHByb3RvY29sX21ldGhvZCArICInIHdhcyBub3QgZm91bmQiKTsK
IH0KIAotdm9pZCBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UobG9uZyBy
ZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCit2b2lkIE5ldHdvcmsxQmFja2VuZERp
c3BhdGNoZXI6OmxvYWRSZXNvdXJjZShsb25nIHByb3RvY29sX2NhbGxJZCwgUmVmUHRyPEpTT046
Ok9iamVjdD4mJikKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVS
UykKICAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRl
RGlzcGF0Y2hlci0+bG9hZFJlc291cmNlKHJlcXVlc3RJZCk7CisgICAgICAgIG1fYWx0ZXJuYXRl
RGlzcGF0Y2hlci0+bG9hZFJlc291cmNlKHByb3RvY29sX2NhbGxJZCk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hF
UlMpCiAKLSAgICBFcnJvclN0cmluZyBlcnJvcjsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1
bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJjZShl
cnJvcik7CisgICAgYXV0byByZXN1bHQgPSBtX2FnZW50LT5sb2FkUmVzb3VyY2UoKTsKKyAgICBp
ZiAoIXJlc3VsdCkgeworICAgICAgICBBU1NFUlQoIXJlc3VsdC5lcnJvcigpLmlzRW1wdHkoKSk7
CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2Vu
ZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCByZXN1bHQuZXJyb3IoKSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CiAKLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQotICAgICAgICBtX2JhY2tlbmRE
aXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNl
KTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29s
RXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7Cisg
ICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Cisg
ICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHByb3RvY29sX2NhbGxJZCwgV1RG
TW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSksIGZhbHNlKTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCkBAIC0zMDEsNiArMzAyLDcgQEAgdm9pZCBOZXR3b3JrMUJhY2tlbmREaXNwYXRj
aGVyOjpsb2FkUmVzb3VyY2UobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3QKIAog
I2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDx3dGYvSlNPTlZhbHVl
cy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKQEAgLTM1MywxNiArMzU1LDE1IEBAIHBy
aXZhdGU6CiAjaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKIAogI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3Rm
L3RleHQvQ1N0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAogdm9pZCBOZXR3b3Jr
M0Zyb250ZW5kRGlzcGF0Y2hlcjo6cmVzb3VyY2VMb2FkZWQoKQogewotICAgIFJlZjxKU09OOjpP
YmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBqc29uTWVz
c2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJOZXR3b3JrMy5yZXNvdXJjZUxvYWRlZCJfcyk7
CisgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7
CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiTmV0d29y
azMucmVzb3VyY2VMb2FkZWQiX3MpOwogCi0gICAgbV9mcm9udGVuZFJvdXRlci5zZW5kRXZlbnQo
anNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKKyAgICBtX2Zyb250ZW5kUm91dGVyLnNlbmRF
dmVudChwcm90b2NvbF9qc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKQEAgLTQwMiw3ICs0MDMsOSBAQCB2b2lkIE5ldHdvcmszRnJvbnRl
bmREaXNwYXRjaGVyOjpyZXNvdXJjZUxvYWRlZCgpCiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYv
QXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3Rm
L09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFj
ZSBJbnNwZWN0b3IgewogCkBAIC00MjMsNyArNDI2LDcgQEAgY2xhc3MgTmV0d29ya0Vycm9yOwog
CiBuYW1lc3BhY2UgTmV0d29yazIgewogCi1jbGFzcyBOZXR3b3JrRXJyb3IgOiBwdWJsaWMgSlNP
Tjo6T2JqZWN0QmFzZSB7CitjbGFzcyBOZXR3b3JrRXJyb3IgZmluYWwgOiBwdWJsaWMgSlNPTjo6
T2JqZWN0QmFzZSB7CiBwdWJsaWM6CiAgICAgZW51bSB7CiAgICAgICAgIE5vRmllbGRzU2V0ID0g
MCwKQEAgLTQ1MCwxNyArNDUzLDE3IEBAIHB1YmxpYzoKICAgICAgICAgZnJpZW5kIGNsYXNzIE5l
dHdvcmtFcnJvcjsKICAgICBwdWJsaWM6CiAKLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IE1lc3Nh
Z2VTZXQ+JiBzZXRNZXNzYWdlKGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCBNZXNzYWdlU2V0PiYgc2V0TWVzc2FnZShjb25zdCBTdHJpbmcmIGluX21lc3NhZ2Up
CiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBNZXNzYWdl
U2V0KSwgcHJvcGVydHlfbWVzc2FnZV9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3Vs
dC0+c2V0U3RyaW5nKCJtZXNzYWdlIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+
c2V0U3RyaW5nKCJtZXNzYWdlIl9zLCBpbl9tZXNzYWdlKTsKICAgICAgICAgICAgIHJldHVybiBj
YXN0U3RhdGU8TWVzc2FnZVNldD4oKTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1aWxkZXI8U1RB
VEUgfCBDb2RlU2V0PiYgc2V0Q29kZShpbnQgdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8U1RBVEUg
fCBDb2RlU2V0PiYgc2V0Q29kZShpbnQgaW5fY29kZSkKICAgICAgICAgewogICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoIShTVEFURSAmIENvZGVTZXQpLCBwcm9wZXJ0eV9jb2RlX2FscmVhZHlf
c2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRJbnRlZ2VyKCJjb2RlIl9zLCB2YWx1ZSk7
CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0SW50ZWdlcigiY29kZSJfcywgaW5fY29kZSk7CiAg
ICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENvZGVTZXQ+KCk7CiAgICAgICAgIH0KIApAQCAt
NTMwLDggKzUzMyw3IEBAIHB1YmxpYzoKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJU
ZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAKLSNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNs
dWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KIAog
bmFtZXNwYWNlIEluc3BlY3RvciB7CiAKQEAgLTU4Nyw3ICs1ODksNyBAQCBjbGFzcyBPYmpDSW5z
cGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBBbHRlcm5hdGVO
ZXR3b3JrMUJhYwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIE9i
akNJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyKGlkPFRlc3RQcm90b2NvbE5ldHdv
cmsxRG9tYWluSGFuZGxlcj4gaGFuZGxlcikgeyBtX2RlbGVnYXRlID0gaGFuZGxlcjsgfQotICAg
IHZvaWQgbG9hZFJlc291cmNlKGxvbmcgcmVxdWVzdElkKSBmaW5hbDsKKyAgICB2b2lkIGxvYWRS
ZXNvdXJjZShsb25nIHByb3RvY29sX2NhbGxJZCkgZmluYWw7CiBwcml2YXRlOgogICAgIFJldGFp
blB0cjxpZDxUZXN0UHJvdG9jb2xOZXR3b3JrMURvbWFpbkhhbmRsZXI+PiBtX2RlbGVnYXRlOwog
fTsKQEAgLTYzNSwyMSArNjM3LDIyIEBAIHByaXZhdGU6CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3Ig
ewogCi12b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVz
b3VyY2UobG9uZyByZXF1ZXN0SWQpCit2b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmRE
aXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UobG9uZyBwcm90b2NvbF9jYWxsSWQpCiB7CiAgICAgaWYg
KCFbbV9kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGxvYWRSZXNvdXJjZVdp
dGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazopXSkgewotICAgICAgICBiYWNrZW5kRGlz
cGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNo
ZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdvcmsxLmxvYWRSZXNvdXJjZScgd2FzIG5vdCBmb3Vu
ZCJfcyk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3Io
cHJvdG9jb2xfY2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0
d29yazEubG9hZFJlc291cmNlJyB3YXMgbm90IGZvdW5kIl9zKTsKICAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAogICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgewotICAgICAgICBi
YWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2Vu
ZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CisgICAgICAgIGJhY2tlbmREaXNwYXRj
aGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocHJvdG9jb2xfY2FsbElkLCBCYWNrZW5kRGlzcGF0
Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+
c2VuZFBlbmRpbmdFcnJvcnMoKTsKICAgICB9OwogCiAgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0g
XnsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwg
SlNPTjo6T2JqZWN0OjpjcmVhdGUoKSwgZmFsc2UpOworICAgICAgICBhdXRvIHByb3RvY29sX2pz
b25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgYmFja2VuZERpc3Bh
dGNoZXIoKS0+c2VuZFJlc3BvbnNlKHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9q
c29uTWVzc2FnZSksIGZhbHNlKTsKICAgICB9OwogCiAgICAgW21fZGVsZWdhdGUgbG9hZFJlc291
cmNlV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vz
c0NhbGxiYWNrXTsKQEAgLTg1MSw5ICs4NTQsOSBAQCB1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9y
OwogewogICAgIGNvbnN0IEZyb250ZW5kUm91dGVyJiByb3V0ZXIgPSBfY29udHJvbGxlci0+ZnJv
bnRlbmRSb3V0ZXIoKTsKIAotICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNP
Tjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2Qi
X3MsICJOZXR3b3JrMy5yZXNvdXJjZUxvYWRlZCJfcyk7Ci0gICAgcm91dGVyLnNlbmRFdmVudChq
c29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOworICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3Nh
Z2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5z
ZXRTdHJpbmcoIm1ldGhvZCJfcywgIk5ldHdvcmszLnJlc291cmNlTG9hZGVkIl9zKTsKKyAgICBy
b3V0ZXIuc2VuZEV2ZW50KHByb3RvY29sX2pzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7CiB9
CiAKIEBlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9leHBlY3RlZC9zYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uLXJl
c3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBl
Y3RlZC9zYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uLXJlc3VsdAppbmRleCA0NTNl
ZjZlNDk0OGVhYjAyNWFiNTYxMzc4ZDJiOGFhOTRmNTVjODhkLi41NmVmNjM0ZGU5ODA2ODU4NmRi
ZGNkMDg4MWI5MWQ4NDllMmZiYTE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvc2FtZS10eXBlLWlkLWRpZmZlcmVudC1k
b21haW4uanNvbi1yZXN1bHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3NhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24t
cmVzdWx0CkBAIC02Myw3ICs2Myw3IEBACiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKIAotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVk
ZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yRnJvbnRlbmRSb3V0ZXIuaD4KIApAQCAtMTE5LDExICsxMTksMTQgQEAgcHJpdmF0ZToKIAog
I2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHR1cGxlPgorI2luY2x1
ZGUgPHd0Zi9FeHBlY3RlZC5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAotdHlwZWRl
ZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKIAogCiAKQEAgLTE2NCw5ICsxNjcsNyBAQCB0eXBlZGVm
IFN0cmluZyBFcnJvclN0cmluZzsKICNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgi
CiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgot
I2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVk
Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiAjaWYgRU5BQkxFKElOU1BFQ1RP
Ul9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAjaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmRE
aXNwYXRjaGVycy5oIgpAQCAtMjE0LDYgKzIxNSw3IEBAIG5hbWVzcGFjZSBJbnNwZWN0b3Igewog
CiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPHd0Zi9KU09OVmFs
dWVzLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewpAQCAtMjU3LDcgKzI1OSw2IEBAIGNs
YXNzIEZyb250ZW5kUm91dGVyOwogI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgi
CiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgot
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAK
QEAgLTI5OCw3ICsyOTksOSBAQCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKICNwcmFnbWEgb25jZQog
CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgotI2lu
Y2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNp
bmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
IAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKQEAgLTM2Miw4ICszNjUsNyBAQCB1c2luZyBSZW1v
dGVPYmplY3RJZCA9IFN0cmluZzsKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJUZXN0
UHJvdG9jb2xPYmplY3RzLmgiCiAKLSNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KIAogbmFt
ZXNwYWNlIEluc3BlY3RvciB7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9zaGFkb3dlZC1vcHRpb25hbC10eXBlLXNl
dHRlcnMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZXhwZWN0ZWQvc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24tcmVz
dWx0CmluZGV4IDVmMmNkNzkzMzA0MjQ3ZTc2NTVmM2U5ODFlYTcwMGY1N2M3NzBmZDkuLjhlY2Vj
YzcwMTAzNDA0ZGE3ZGMyNzhjYTk3NTE5YTJkZWJmYzAwNWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9zaGFkb3dlZC1v
cHRpb25hbC10eXBlLXNldHRlcnMuanNvbi1yZXN1bHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3NoYWRvd2VkLW9wdGlvbmFsLXR5
cGUtc2V0dGVycy5qc29uLXJlc3VsdApAQCAtNjMsNyArNjMsNyBAQAogCiAjaWYgRU5BQkxFKElO
U1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xU
eXBlcy5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgogI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CiAKQEAgLTExOSwxMSArMTE5LDE0
IEBAIHByaXZhdGU6CiAKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRl
IDx0dXBsZT4KKyNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9u
YWwuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3Bl
Y3RvciB7CiAKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCiAKIAogCkBAIC0xNjQsOSAr
MTY3LDcgQEAgdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiAjaW5jbHVkZSAiVGVzdEJhY2tl
bmREaXNwYXRjaGVycy5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJv
bnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgogI2luY2x1ZGUgPHd0
Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogI2lm
IEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogI2luY2x1ZGUgIlRlc3RB
bHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKQEAgLTIxNCw2ICsyMTUsNyBAQCBuYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKIAogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNs
dWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKQEAgLTI1
Nyw3ICsyNTksNiBAQCBjbGFzcyBGcm9udGVuZFJvdXRlcjsKICNpbmNsdWRlICJUZXN0RnJvbnRl
bmREaXNwYXRjaGVycy5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJv
bnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKIG5hbWVzcGFj
ZSBJbnNwZWN0b3IgewogCkBAIC0yOTgsNyArMjk5LDkgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7
CiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3Rv
Y29sVHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9K
U09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC0zMzEsNyArMzM0
LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKFQg
ZW51bVZhbHVlKQogbmFtZXNwYWNlIFJ1bnRpbWUgewogCiAvKiBLZXkgcGF0aC4gKi8KLWNsYXNz
IEtleVBhdGggOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7CitjbGFzcyBLZXlQYXRoIGZpbmFs
IDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgewogcHVibGljOgogICAgIC8vIE5hbWVkIGFmdGVy
IHByb3BlcnR5IG5hbWUgJ3R5cGUnIHdoaWxlIGdlbmVyYXRpbmcgS2V5UGF0aC4KICAgICBlbnVt
IGNsYXNzIFR5cGUgewpAQCAtMzM5LDYgKzM0Miw3IEBAIHB1YmxpYzoKICAgICAgICAgU3RyaW5n
ID0gMSwKICAgICAgICAgQXJyYXkgPSAyLAogICAgIH07IC8vIGVudW0gY2xhc3MgVHlwZQorCiAg
ICAgZW51bSB7CiAgICAgICAgIE5vRmllbGRzU2V0ID0gMCwKICAgICAgICAgVHlwZVNldCA9IDEg
PDwgMCwKQEAgLTM2MywxMCArMzY3LDEwIEBAIHB1YmxpYzoKICAgICAgICAgZnJpZW5kIGNsYXNz
IEtleVBhdGg7CiAgICAgcHVibGljOgogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBUeXBlU2V0
PiYgc2V0VHlwZShUeXBlIHZhbHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVHlwZVNldD4m
IHNldFR5cGUoVHlwZSBpbl90eXBlKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FT
U0VSVCghKFNUQVRFICYgVHlwZVNldCksIHByb3BlcnR5X3R5cGVfYWxyZWFkeV9zZXQpOwotICAg
ICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygidHlwZSJfcywgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKHZhbHVlKSk7CisgICAgICAgICAg
ICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ0eXBlIl9zLCBQcm90b2NvbDo6VGVzdEhlbHBlcnM6Omdl
dEVudW1Db25zdGFudFZhbHVlKGluX3R5cGUpKTsKICAgICAgICAgICAgIHJldHVybiBjYXN0U3Rh
dGU8VHlwZVNldD4oKTsKICAgICAgICAgfQogCkBAIC0zOTIsMTQgKzM5NiwxNCBAQCBwdWJsaWM6
CiAgICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihKU09OOjpPYmplY3Q6OmNyZWF0
ZSgpKTsKICAgICB9CiAKLSAgICB2b2lkIHNldFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQor
ICAgIHZvaWQgc2V0U3RyaW5nKGNvbnN0IFN0cmluZyYgaW5fb3B0X3N0cmluZykKICAgICB7Ci0g
ICAgICAgIEpTT046Ok9iamVjdEJhc2U6OnNldFN0cmluZygic3RyaW5nIl9zLCB2YWx1ZSk7Cisg
ICAgICAgIEpTT046Ok9iamVjdEJhc2U6OnNldFN0cmluZygic3RyaW5nIl9zLCBpbl9vcHRfc3Ry
aW5nKTsKICAgICB9CiAKLSAgICB2b2lkIHNldEFycmF5KFJlZlB0cjxKU09OOjpBcnJheU9mPFN0
cmluZz4+IHZhbHVlKQorICAgIHZvaWQgc2V0QXJyYXkoUmVmPEpTT046OkFycmF5T2Y8U3RyaW5n
Pj4mJiBpbl9vcHRfYXJyYXkpCiAgICAgewotICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXRB
cnJheSgiYXJyYXkiX3MsIFdURk1vdmUodmFsdWUpKTsKKyAgICAgICAgSlNPTjo6T2JqZWN0QmFz
ZTo6c2V0QXJyYXkoImFycmF5Il9zLCBXVEZNb3ZlKGluX29wdF9hcnJheSkpOwogICAgIH0KIH07
CiAKQEAgLTQxNCw3ICs0MTgsNyBAQCBPcHRpb25hbDxQcm90b2NvbEVudW1UeXBlPiBwYXJzZUVu
dW1WYWx1ZUZyb21TdHJpbmcoY29uc3QgU3RyaW5nJik7CiAKIC8vIEVudW1zIGluIHRoZSAnUnVu
dGltZScgRG9tYWluCiB0ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpS
dW50aW1lOjpLZXlQYXRoOjpUeXBlPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9y
OjpQcm90b2NvbDo6UnVudGltZTo6S2V5UGF0aDo6VHlwZT4oY29uc3QgU3RyaW5nJik7CitPcHRp
b25hbDxQcm90b2NvbDo6UnVudGltZTo6S2V5UGF0aDo6VHlwZT4gcGFyc2VFbnVtVmFsdWVGcm9t
U3RyaW5nPFByb3RvY29sOjpSdW50aW1lOjpLZXlQYXRoOjpUeXBlPihjb25zdCBTdHJpbmcmKTsK
IAogfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKIApAQCAtNDU2LDggKzQ2MCw3IEBAIE9wdGlv
bmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OktleVBhdGg6OlR5cGU+IHBhcnNlRW51
bVZhbHVlRnJvbVN0cmluZzxJCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGVzdFBy
b3RvY29sT2JqZWN0cy5oIgogCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8
d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAKIG5hbWVz
cGFjZSBJbnNwZWN0b3IgewogCkBAIC00NzgsMTYgKzQ4MSwxNiBAQCBTdHJpbmcgZ2V0RW51bUNv
bnN0YW50VmFsdWUoaW50IGNvZGUpIHsKIC8vIEVudW1zIGluIHRoZSAnUnVudGltZScgRG9tYWlu
CiAKIHRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6Oktl
eVBhdGg6OlR5cGU+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29s
OjpSdW50aW1lOjpLZXlQYXRoOjpUeXBlPihjb25zdCBTdHJpbmcmIHByb3RvY29sU3RyaW5nKQor
T3B0aW9uYWw8UHJvdG9jb2w6OlJ1bnRpbWU6OktleVBhdGg6OlR5cGU+IHBhcnNlRW51bVZhbHVl
RnJvbVN0cmluZzxQcm90b2NvbDo6UnVudGltZTo6S2V5UGF0aDo6VHlwZT4oY29uc3QgU3RyaW5n
JiBwcm90b2NvbFN0cmluZykKIHsKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNvbnN0YW50VmFs
dWVzW10gPSB7Ci0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6
S2V5UGF0aDo6VHlwZTo6TnVsbCwKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29s
OjpSdW50aW1lOjpLZXlQYXRoOjpUeXBlOjpTdHJpbmcsCi0gICAgICAgIChzaXplX3QpSW5zcGVj
dG9yOjpQcm90b2NvbDo6UnVudGltZTo6S2V5UGF0aDo6VHlwZTo6QXJyYXksCisgICAgICAgIChz
aXplX3QpUHJvdG9jb2w6OlJ1bnRpbWU6OktleVBhdGg6OlR5cGU6Ok51bGwsCisgICAgICAgIChz
aXplX3QpUHJvdG9jb2w6OlJ1bnRpbWU6OktleVBhdGg6OlR5cGU6OlN0cmluZywKKyAgICAgICAg
KHNpemVfdClQcm90b2NvbDo6UnVudGltZTo6S2V5UGF0aDo6VHlwZTo6QXJyYXksCiAgICAgfTsK
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDM7ICsraSkKICAgICAgICAgaWYgKHByb3RvY29s
U3RyaW5nID09IGVudW1fY29uc3RhbnRfdmFsdWVzW2NvbnN0YW50VmFsdWVzW2ldXSkKLSAgICAg
ICAgICAgIHJldHVybiAoSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6S2V5UGF0aDo6VHlw
ZSljb25zdGFudFZhbHVlc1tpXTsKKyAgICAgICAgICAgIHJldHVybiAoUHJvdG9jb2w6OlJ1bnRp
bWU6OktleVBhdGg6OlR5cGUpY29uc3RhbnRWYWx1ZXNbaV07CiAKICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3Nob3VsZC1zdHJpcC1jb21tZW50cy5qc29uLXJlc3VsdCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9z
aG91bGQtc3RyaXAtY29tbWVudHMuanNvbi1yZXN1bHQKaW5kZXggMzQ4YWNlOTNiYWIwOTQ3ZGFm
ODViNDVmNTljOWZjYWE2NzAyZGUwMC4uMDBhYTM2ZmEzZDAyNDkxM2M1YjhkMjczODExZGE1YTAx
NTQ4MzEyOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2V4cGVjdGVkL3Nob3VsZC1zdHJpcC1jb21tZW50cy5qc29uLXJlc3VsdAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQv
c2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpzb24tcmVzdWx0CkBAIC02Myw3ICs2Myw3IEBACiAKICNp
ZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIAotI2luY2x1ZGUgIlRl
c3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2lu
Y2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CiAjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KIApAQCAtMTE5
LDExICsxMTksMTQgQEAgcHJpdmF0ZToKIAogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMu
aCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5o
PgorI2luY2x1ZGUgPHR1cGxlPgorI2luY2x1ZGUgPHd0Zi9FeHBlY3RlZC5oPgorI2luY2x1ZGUg
PHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1l
c3BhY2UgSW5zcGVjdG9yIHsKIAotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKIAogCiAK
QEAgLTE2NCw5ICsxNjcsNyBAQCB0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKICNpbmNsdWRl
ICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9J
bnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CiAj
aW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAjaW5j
bHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgpAQCAtMjE0LDYgKzIxNSw3
IEBAIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0
cy5oIgogI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFs
Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0
b3IgewpAQCAtMjU3LDcgKzI1OSw2IEBAIGNsYXNzIEZyb250ZW5kUm91dGVyOwogI2luY2x1ZGUg
IlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9J
bnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
IAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKQEAgLTI5OCw3ICsyOTksOSBAQCBuYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yUHJvdG9jb2xUeXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5j
bHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKQEAg
LTM1Miw4ICszNTUsNyBAQCBuYW1lc3BhY2UgUHJvdG9jb2wgewogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKIAotI2luY2x1ZGUgPHd0Zi9PcHRp
b25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvQXNz
ZXJ0aW9ucy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVj
bGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUtdHlwZS5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0
aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbi1yZXN1bHQKaW5kZXggNzljYjk4NTQ1OWY4
ODI0NTY3N2M1ZTNjMjYwNWY3MzQ0ZTExNmJmYy4uMzRiMWFjYmJjYWVjODEyZDg0ZDE2OWZlM2Iy
YjgyNzI1NjdhYmQ0MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRp
dmUtdHlwZS5qc29uLXJlc3VsdAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2
ZS10eXBlLmpzb24tcmVzdWx0CkBAIC02Myw3ICs2Myw3IEBACiAKICNpZiBFTkFCTEUoSU5TUEVD
VE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIAotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVz
LmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KIApAQCAtMTE5LDExICsxMTksMTQgQEAg
cHJpdmF0ZToKIAogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHR1
cGxlPgorI2luY2x1ZGUgPHd0Zi9FeHBlY3RlZC5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5o
PgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9y
IHsKIAotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKIAogCiAKQEAgLTE2NCw5ICsxNjcs
NyBAQCB0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKICNpbmNsdWRlICJUZXN0QmFja2VuZERp
c3BhdGNoZXJzLmgiCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVu
ZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CiAjaW5jbHVkZSA8d3RmL05l
dmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiAjaWYgRU5B
QkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAjaW5jbHVkZSAiVGVzdEFsdGVy
bmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgpAQCAtMjE0LDYgKzIxNSw3IEBAIG5hbWVzcGFjZSBJ
bnNwZWN0b3IgewogCiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUg
PHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewpAQCAtMjU3LDcg
KzI1OSw2IEBAIGNsYXNzIEZyb250ZW5kUm91dGVyOwogI2luY2x1ZGUgIlRlc3RGcm9udGVuZERp
c3BhdGNoZXJzLmgiCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVu
ZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogbmFtZXNwYWNlIElu
c3BlY3RvciB7CiAKQEAgLTI5OCw3ICsyOTksOSBAQCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKICNw
cmFnbWEgb25jZQogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xU
eXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL0pTT05W
YWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKQEAgLTM1Nyw4ICszNjAsNyBA
QCB1c2luZyBSZW1vdGVPYmplY3RJZCA9IGludDsKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAKLSNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4K
LSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMu
aD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9u
LWFycmF5LXR5cGUuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24t
cmVzdWx0CmluZGV4IGQ4ODgwYzYzZTMzNzhjNWNmZTMwOGNhZmRmODRjYzk4NzQ5MmJiZmMuLjk0
MGYxNTgwYmRjMWQ5YmNhNDQwMTQ3NDE1MmEyM2JiMjU0YjE5MGYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRl
Y2xhcmF0aW9uLWFycmF5LXR5cGUuanNvbi1yZXN1bHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tYXJy
YXktdHlwZS5qc29uLXJlc3VsdApAQCAtNjgsNyArNjgsNyBAQCBJbnNwZWN0b3JCYWNrZW5kLmFj
dGl2YXRlRG9tYWluKCJEZWJ1Z2dlciIsIG51bGwpOwogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9B
TFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgor
I2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CiAKQEAgLTEyNCwxMSArMTI0LDE0IEBAIHByaXZh
dGU6CiAKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx0dXBsZT4K
KyNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAK
LXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCiAKIAogCkBAIC0xNjksOSArMTcyLDcgQEAg
dHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiAjaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRj
aGVycy5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0
ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRl
c3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogI2lmIEVOQUJMRShJ
TlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVC
YWNrZW5kRGlzcGF0Y2hlcnMuaCIKQEAgLTIxOSw2ICsyMjAsNyBAQCBuYW1lc3BhY2UgSW5zcGVj
dG9yIHsKIAogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDx3dGYv
SlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKQEAgLTI2Miw3ICsyNjQs
NiBAQCBjbGFzcyBGcm9udGVuZFJvdXRlcjsKICNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRj
aGVycy5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0
ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0
b3IgewogCkBAIC0zMDMsNyArMzA0LDkgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiAjcHJhZ21h
IG9uY2UKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMu
aD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVz
Lmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC0zMzEsNyArMzM0LDcgQEAgdXNp
bmcgTHVja3lOdW1iZXJzID0gSlNPTjo6QXJyYXlPZjxpbnQ+OwogdXNpbmcgQmFieU5hbWVzID0g
SlNPTjo6QXJyYXlPZjxTdHJpbmc+OwogdXNpbmcgTmV3T2JqZWN0cyA9IEpTT046OkFycmF5T2Y8
aW50PjsKIHVzaW5nIE9sZE9iamVjdHMgPSBKU09OOjpBcnJheU9mPGludD47Ci11c2luZyBTdG9w
UmVhc29ucyA9IEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OlJl
YXNvbj47Cit1c2luZyBTdG9wUmVhc29ucyA9IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkRlYnVn
Z2VyOjpSZWFzb24+OwogfSAvLyBSdW50aW1lCiAvLyBFbmQgb2YgdHlwZWRlZnMuCiAKQEAgLTM2
NSw3ICszNjgsNyBAQCBPcHRpb25hbDxQcm90b2NvbEVudW1UeXBlPiBwYXJzZUVudW1WYWx1ZUZy
b21TdHJpbmcoY29uc3QgU3RyaW5nJik7CiAKIC8vIEVudW1zIGluIHRoZSAnRGVidWdnZXInIERv
bWFpbgogdGVtcGxhdGU8PgotT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6
OlJlYXNvbj4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRl
YnVnZ2VyOjpSZWFzb24+KGNvbnN0IFN0cmluZyYpOworT3B0aW9uYWw8UHJvdG9jb2w6OkRlYnVn
Z2VyOjpSZWFzb24+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxQcm90b2NvbDo6RGVidWdnZXI6
OlJlYXNvbj4oY29uc3QgU3RyaW5nJik7CiAKIH0gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCiAK
QEAgLTQxNyw4ICs0MjAsNyBAQCBzdHJ1Y3QgRGVmYXVsdEhhc2g8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6RGVidWdnZXI6OlJlYXNvbj4gOiBJbnRIYXNoPEluc3BlY3Rvcjo6UAogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKIAotI2luY2x1ZGUgPHd0
Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3
dGYvQXNzZXJ0aW9ucy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtNDM5LDE2ICs0
NDEsMTYgQEAgU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKSB7CiAvLyBFbnVt
cyBpbiB0aGUgJ0RlYnVnZ2VyJyBEb21haW4KIAogdGVtcGxhdGU8PgotT3B0aW9uYWw8SW5zcGVj
dG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OlJlYXNvbj4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5n
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpSZWFzb24+KGNvbnN0IFN0cmluZyYgcHJv
dG9jb2xTdHJpbmcpCitPcHRpb25hbDxQcm90b2NvbDo6RGVidWdnZXI6OlJlYXNvbj4gcGFyc2VF
bnVtVmFsdWVGcm9tU3RyaW5nPFByb3RvY29sOjpEZWJ1Z2dlcjo6UmVhc29uPihjb25zdCBTdHJp
bmcmIHByb3RvY29sU3RyaW5nKQogewogICAgIHN0YXRpYyBjb25zdCBzaXplX3QgY29uc3RhbnRW
YWx1ZXNbXSA9IHsKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dl
cjo6UmVhc29uOjpEaWVkLAotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRl
YnVnZ2VyOjpSZWFzb246OkZhaW50ZWQsCi0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90
b2NvbDo6RGVidWdnZXI6OlJlYXNvbjo6SHVuZ3J5LAorICAgICAgICAoc2l6ZV90KVByb3RvY29s
OjpEZWJ1Z2dlcjo6UmVhc29uOjpEaWVkLAorICAgICAgICAoc2l6ZV90KVByb3RvY29sOjpEZWJ1
Z2dlcjo6UmVhc29uOjpGYWludGVkLAorICAgICAgICAoc2l6ZV90KVByb3RvY29sOjpEZWJ1Z2dl
cjo6UmVhc29uOjpIdW5ncnksCiAgICAgfTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDM7
ICsraSkKICAgICAgICAgaWYgKHByb3RvY29sU3RyaW5nID09IGVudW1fY29uc3RhbnRfdmFsdWVz
W2NvbnN0YW50VmFsdWVzW2ldXSkKLSAgICAgICAgICAgIHJldHVybiAoSW5zcGVjdG9yOjpQcm90
b2NvbDo6RGVidWdnZXI6OlJlYXNvbiljb25zdGFudFZhbHVlc1tpXTsKKyAgICAgICAgICAgIHJl
dHVybiAoUHJvdG9jb2w6OkRlYnVnZ2VyOjpSZWFzb24pY29uc3RhbnRWYWx1ZXNbaV07CiAKICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tZW51
bS10eXBlLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpzb24tcmVzdWx0
CmluZGV4IDNhMmMyMDUyODMwNDRlMDAwNmIzMzFlZTMxNWIwNDM3YTRmYTViZjkuLjk1MTE2YmM1
MGFiZjI3OTQwNjQ1OTA3MTBmY2QzZTI0NmJmMGM1OGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0
aW9uLWVudW0tdHlwZS5qc29uLXJlc3VsdAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUu
anNvbi1yZXN1bHQKQEAgLTY5LDcgKzY5LDcgQEAgSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURv
bWFpbigiUnVudGltZSIsIG51bGwpOwogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVf
RElTUEFUQ0hFUlMpCiAKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgorI2luY2x1ZGUg
IlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3Rv
ckZyb250ZW5kUm91dGVyLmg+CiAKQEAgLTEyNSwxMSArMTI1LDE0IEBAIHByaXZhdGU6CiAKICNp
bmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx0dXBsZT4KKyNpbmNsdWRl
IDx3dGYvRXhwZWN0ZWQuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKLXR5cGVkZWYg
U3RyaW5nIEVycm9yU3RyaW5nOworCiAKIAogCkBAIC0xNzAsOSArMTczLDcgQEAgdHlwZWRlZiBT
dHJpbmcgRXJyb3JTdHJpbmc7CiAjaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgog
CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNp
bmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5o
PgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogI2lmIEVOQUJMRShJTlNQRUNUT1Jf
QUxURVJOQVRFX0RJU1BBVENIRVJTKQogI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlz
cGF0Y2hlcnMuaCIKQEAgLTIyMCw2ICsyMjEsNyBAQCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAog
I2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDx3dGYvSlNPTlZhbHVl
cy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKQEAgLTI2Myw3ICsyNjUsNiBAQCBjbGFz
cyBGcm9udGVuZFJvdXRlcjsKICNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgog
CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBA
IC0zMDQsNyArMzA1LDkgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiAjcHJhZ21hIG9uY2UKIAog
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KLSNpbmNs
dWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5j
bHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAK
IG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC0zNjIsOSArMzY1LDkgQEAgT3B0aW9uYWw8UHJv
dG9jb2xFbnVtVHlwZT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYpOwog
CiAvLyBFbnVtcyBpbiB0aGUgJ1J1bnRpbWUnIERvbWFpbgogdGVtcGxhdGU8PgotT3B0aW9uYWw8
SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHM+IHBhcnNlRW51bVZhbHVl
RnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpGYXJtQW5pbWFscz4oY29u
c3QgU3RyaW5nJik7CitPcHRpb25hbDxQcm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHM+IHBh
cnNlRW51bVZhbHVlRnJvbVN0cmluZzxQcm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHM+KGNv
bnN0IFN0cmluZyYpOwogdGVtcGxhdGU8PgotT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6
UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFscz4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlR3b0xlZ2dlZEFuaW1hbHM+KGNvbnN0IFN0cmluZyYp
OworT3B0aW9uYWw8UHJvdG9jb2w6OlJ1bnRpbWU6OlR3b0xlZ2dlZEFuaW1hbHM+IHBhcnNlRW51
bVZhbHVlRnJvbVN0cmluZzxQcm90b2NvbDo6UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFscz4oY29u
c3QgU3RyaW5nJik7CiAKIH0gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCiAKQEAgLTQxOCw4ICs0
MjEsNyBAQCBzdHJ1Y3QgRGVmYXVsdEhhc2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6
VHdvTGVnZ2VkQW5pbWFscz4gOiBJbnRIYXNoPElucwogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKIAotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5o
PgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9u
cy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtNDQ0LDMzICs0NDYsMzMgQEAgU3Ry
aW5nIGdldEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKSB7CiAvLyBFbnVtcyBpbiB0aGUgJ1J1
bnRpbWUnIERvbWFpbgogCiB0ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29s
OjpSdW50aW1lOjpGYXJtQW5pbWFscz4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkZhcm1BbmltYWxzPihjb25zdCBTdHJpbmcmIHByb3RvY29s
U3RyaW5nKQorT3B0aW9uYWw8UHJvdG9jb2w6OlJ1bnRpbWU6OkZhcm1BbmltYWxzPiBwYXJzZUVu
dW1WYWx1ZUZyb21TdHJpbmc8UHJvdG9jb2w6OlJ1bnRpbWU6OkZhcm1BbmltYWxzPihjb25zdCBT
dHJpbmcmIHByb3RvY29sU3RyaW5nKQogewogICAgIHN0YXRpYyBjb25zdCBzaXplX3QgY29uc3Rh
bnRWYWx1ZXNbXSA9IHsKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50
aW1lOjpGYXJtQW5pbWFsczo6UGlncywKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3Rv
Y29sOjpSdW50aW1lOjpGYXJtQW5pbWFsczo6Q293cywKLSAgICAgICAgKHNpemVfdClJbnNwZWN0
b3I6OlByb3RvY29sOjpSdW50aW1lOjpGYXJtQW5pbWFsczo6Q2F0cywKLSAgICAgICAgKHNpemVf
dClJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpGYXJtQW5pbWFsczo6SGVucywKKyAgICAg
ICAgKHNpemVfdClQcm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHM6OlBpZ3MsCisgICAgICAg
IChzaXplX3QpUHJvdG9jb2w6OlJ1bnRpbWU6OkZhcm1BbmltYWxzOjpDb3dzLAorICAgICAgICAo
c2l6ZV90KVByb3RvY29sOjpSdW50aW1lOjpGYXJtQW5pbWFsczo6Q2F0cywKKyAgICAgICAgKHNp
emVfdClQcm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHM6OkhlbnMsCiAgICAgfTsKICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IDQ7ICsraSkKICAgICAgICAgaWYgKHByb3RvY29sU3RyaW5n
ID09IGVudW1fY29uc3RhbnRfdmFsdWVzW2NvbnN0YW50VmFsdWVzW2ldXSkKLSAgICAgICAgICAg
IHJldHVybiAoSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHMpY29uc3Rh
bnRWYWx1ZXNbaV07CisgICAgICAgICAgICByZXR1cm4gKFByb3RvY29sOjpSdW50aW1lOjpGYXJt
QW5pbWFscyljb25zdGFudFZhbHVlc1tpXTsKIAogICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiB9
CiAKIHRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlR3
b0xlZ2dlZEFuaW1hbHM+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpSdW50aW1lOjpUd29MZWdnZWRBbmltYWxzPihjb25zdCBTdHJpbmcmIHByb3RvY29sU3Ry
aW5nKQorT3B0aW9uYWw8UHJvdG9jb2w6OlJ1bnRpbWU6OlR3b0xlZ2dlZEFuaW1hbHM+IHBhcnNl
RW51bVZhbHVlRnJvbVN0cmluZzxQcm90b2NvbDo6UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFscz4o
Y29uc3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKIHsKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90
IGNvbnN0YW50VmFsdWVzW10gPSB7Ci0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2Nv
bDo6UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFsczo6RHVja3MsCi0gICAgICAgIChzaXplX3QpSW5z
cGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFsczo6SGVucywKLSAgICAg
ICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpUd29MZWdnZWRBbmltYWxz
OjpDcm93cywKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpU
d29MZWdnZWRBbmltYWxzOjpGbGFtaW5nb3MsCisgICAgICAgIChzaXplX3QpUHJvdG9jb2w6OlJ1
bnRpbWU6OlR3b0xlZ2dlZEFuaW1hbHM6OkR1Y2tzLAorICAgICAgICAoc2l6ZV90KVByb3RvY29s
OjpSdW50aW1lOjpUd29MZWdnZWRBbmltYWxzOjpIZW5zLAorICAgICAgICAoc2l6ZV90KVByb3Rv
Y29sOjpSdW50aW1lOjpUd29MZWdnZWRBbmltYWxzOjpDcm93cywKKyAgICAgICAgKHNpemVfdClQ
cm90b2NvbDo6UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFsczo6RmxhbWluZ29zLAogICAgIH07CiAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCA0OyArK2kpCiAgICAgICAgIGlmIChwcm90b2NvbFN0
cmluZyA9PSBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb25zdGFudFZhbHVlc1tpXV0pCi0gICAgICAg
ICAgICByZXR1cm4gKEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlR3b0xlZ2dlZEFuaW1h
bHMpY29uc3RhbnRWYWx1ZXNbaV07CisgICAgICAgICAgICByZXR1cm4gKFByb3RvY29sOjpSdW50
aW1lOjpUd29MZWdnZWRBbmltYWxzKWNvbnN0YW50VmFsdWVzW2ldOwogCiAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpz
b24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbi1yZXN1bHQKaW5kZXgg
MzI4ZmVkMjNkYzRjYTdmMTg4NTkwYjYzNDRkNWJmN2U0NzNkZGMwMy4uYmE5ZjE3YzYyNTBkY2Uw
NjhjZjk0NjU1OTQ3MGRkNDViNjE3NzQwNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tb2Jq
ZWN0LXR5cGUuanNvbi1yZXN1bHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNv
bi1yZXN1bHQKQEAgLTcwLDcgKzcwLDcgQEAgSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFp
bigiRGF0YWJhc2UiLCBudWxsKTsKIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJ
U1BBVENIRVJTKQogCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKKyNpbmNsdWRlICJU
ZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXIuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JG
cm9udGVuZFJvdXRlci5oPgogCkBAIC0xMjYsMTEgKzEyNiwxNCBAQCBwcml2YXRlOgogCiAjaW5j
bHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0lu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8dHVwbGU+CisjaW5jbHVkZSA8
d3RmL0V4cGVjdGVkLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCi10eXBlZGVmIFN0
cmluZyBFcnJvclN0cmluZzsKKwogCiAKIApAQCAtMTcxLDkgKzE3NCw3IEBAIHR5cGVkZWYgU3Ry
aW5nIEVycm9yU3RyaW5nOwogI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKIAog
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5j
bHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4K
LSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FM
VEVSTkFURV9ESVNQQVRDSEVSUykKICNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3Bh
dGNoZXJzLmgiCkBAIC0yMjEsNiArMjIyLDcgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKICNp
bmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMu
aD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CkBAIC0yNjQsNyArMjY2LDYgQEAgY2xhc3Mg
RnJvbnRlbmRSb3V0ZXI7CiAjaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKIAog
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5j
bHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAt
MzA1LDcgKzMwNiw5IEBAIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogI3ByYWdtYSBvbmNlCiAKICNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+Ci0jaW5jbHVk
ZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1
ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBu
YW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtMzMzLDcgKzMzNiw3IEBAIGNsYXNzIFBhcmFtZXRl
ckJ1bmRsZTsKIAogLy8gVHlwZWRlZnMuCiBuYW1lc3BhY2UgRGF0YWJhc2UgewotdXNpbmcgRXJy
b3JMaXN0ID0gSlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJy
b3I+OwordXNpbmcgRXJyb3JMaXN0ID0gSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6RGF0YWJhc2U6
OkVycm9yPjsKIH0gLy8gRGF0YWJhc2UKIC8vIEVuZCBvZiB0eXBlZGVmcy4KIApAQCAtMzUxLDcg
KzM1NCw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFN0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1
ZShUIGVudW1WYWx1ZSkKIG5hbWVzcGFjZSBEYXRhYmFzZSB7CiAKIC8qIERhdGFiYXNlIGVycm9y
LiAqLwotY2xhc3MgRXJyb3IgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7CitjbGFzcyBFcnJv
ciBmaW5hbCA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKIHB1YmxpYzoKICAgICBlbnVtIHsK
ICAgICAgICAgTm9GaWVsZHNTZXQgPSAwLApAQCAtMzc4LDE3ICszODEsMTcgQEAgcHVibGljOgog
ICAgICAgICBmcmllbmQgY2xhc3MgRXJyb3I7CiAgICAgcHVibGljOgogCi0gICAgICAgIEJ1aWxk
ZXI8U1RBVEUgfCBNZXNzYWdlU2V0PiYgc2V0TWVzc2FnZShjb25zdCBTdHJpbmcmIHZhbHVlKQor
ICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTWVzc2FnZVNldD4mIHNldE1lc3NhZ2UoY29uc3QgU3Ry
aW5nJiBpbl9tZXNzYWdlKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCgh
KFNUQVRFICYgTWVzc2FnZVNldCksIHByb3BlcnR5X21lc3NhZ2VfYWxyZWFkeV9zZXQpOwotICAg
ICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibWVzc2FnZSJfcywgdmFsdWUpOworICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibWVzc2FnZSJfcywgaW5fbWVzc2FnZSk7CiAgICAg
ICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE1lc3NhZ2VTZXQ+KCk7CiAgICAgICAgIH0KIAotICAg
ICAgICBCdWlsZGVyPFNUQVRFIHwgQ29kZVNldD4mIHNldENvZGUoaW50IHZhbHVlKQorICAgICAg
ICBCdWlsZGVyPFNUQVRFIHwgQ29kZVNldD4mIHNldENvZGUoaW50IGluX2NvZGUpCiAgICAgICAg
IHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBDb2RlU2V0KSwgcHJvcGVy
dHlfY29kZV9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0SW50ZWdlcigi
Y29kZSJfcywgdmFsdWUpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldEludGVnZXIoImNvZGUi
X3MsIGluX2NvZGUpOwogICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxDb2RlU2V0PigpOwog
ICAgICAgICB9CiAKQEAgLTQyNCwxMyArNDI3LDE0IEBAIGVudW0gY2xhc3MgTW91c2VCdXR0b24g
ewogICAgIFJpZ2h0ID0gMywKIH07IC8vIGVudW0gY2xhc3MgTW91c2VCdXR0b24KIAotY2xhc3Mg
T3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGUgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7CitjbGFz
cyBPcHRpb25hbFBhcmFtZXRlckJ1bmRsZSBmaW5hbCA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNl
IHsKIHB1YmxpYzoKICAgICAvLyBOYW1lZCBhZnRlciBwcm9wZXJ0eSBuYW1lICdkaXJlY3Rpb25h
bGl0eScgd2hpbGUgZ2VuZXJhdGluZyBPcHRpb25hbFBhcmFtZXRlckJ1bmRsZS4KICAgICBlbnVt
IGNsYXNzIERpcmVjdGlvbmFsaXR5IHsKICAgICAgICAgTFRSID0gNCwKICAgICAgICAgUlRMID0g
NSwKICAgICB9OyAvLyBlbnVtIGNsYXNzIERpcmVjdGlvbmFsaXR5CisKICAgICBlbnVtIHsKICAg
ICAgICAgTm9GaWVsZHNTZXQgPSAwLAogICAgICAgICBBbGxGaWVsZHNTZXQgPSAwCkBAIC00NzUs
NTkgKzQ3OSw2MCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0
PihKU09OOjpPYmplY3Q6OmNyZWF0ZSgpKTsKICAgICB9CiAKLSAgICB2b2lkIHNldENvbHVtbk5h
bWVzKFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+IHZhbHVlKQorICAgIHZvaWQgc2V0Q29s
dW1uTmFtZXMoUmVmPEpTT046OkFycmF5T2Y8U3RyaW5nPj4mJiBpbl9vcHRfY29sdW1uTmFtZXMp
CiAgICAgewotICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXRBcnJheSgiY29sdW1uTmFtZXMi
X3MsIFdURk1vdmUodmFsdWUpKTsKKyAgICAgICAgSlNPTjo6T2JqZWN0QmFzZTo6c2V0QXJyYXko
ImNvbHVtbk5hbWVzIl9zLCBXVEZNb3ZlKGluX29wdF9jb2x1bW5OYW1lcykpOwogICAgIH0KIAot
ICAgIHZvaWQgc2V0QnV0dG9ucyhSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpEYXRhYmFzZTo6TW91c2VCdXR0b24+PiB2YWx1ZSkKKyAgICB2b2lkIHNldEJ1dHRvbnMo
UmVmPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbj4+JiYgaW5f
b3B0X2J1dHRvbnMpCiAgICAgewotICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXRBcnJheSgi
YnV0dG9ucyJfcywgV1RGTW92ZSh2YWx1ZSkpOworICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpz
ZXRBcnJheSgiYnV0dG9ucyJfcywgV1RGTW92ZShpbl9vcHRfYnV0dG9ucykpOwogICAgIH0KIAot
ICAgIHZvaWQgc2V0RGlyZWN0aW9uYWxpdHkoRGlyZWN0aW9uYWxpdHkgdmFsdWUpCisgICAgdm9p
ZCBzZXREaXJlY3Rpb25hbGl0eShEaXJlY3Rpb25hbGl0eSBpbl9vcHRfZGlyZWN0aW9uYWxpdHkp
CiAgICAgewotICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXRTdHJpbmcoImRpcmVjdGlvbmFs
aXR5Il9zLCBJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50
VmFsdWUodmFsdWUpKTsKKyAgICAgICAgSlNPTjo6T2JqZWN0QmFzZTo6c2V0U3RyaW5nKCJkaXJl
Y3Rpb25hbGl0eSJfcywgUHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1
ZShpbl9vcHRfZGlyZWN0aW9uYWxpdHkpKTsKICAgICB9CiAKLSAgICB2b2lkIHNldE5vdGVzKGNv
bnN0IFN0cmluZyYgdmFsdWUpCisgICAgdm9pZCBzZXROb3Rlcyhjb25zdCBTdHJpbmcmIGluX29w
dF9ub3RlcykKICAgICB7Ci0gICAgICAgIEpTT046Ok9iamVjdEJhc2U6OnNldFN0cmluZygibm90
ZXMiX3MsIHZhbHVlKTsKKyAgICAgICAgSlNPTjo6T2JqZWN0QmFzZTo6c2V0U3RyaW5nKCJub3Rl
cyJfcywgaW5fb3B0X25vdGVzKTsKICAgICB9CiAKLSAgICB2b2lkIHNldFRpbWVzdGFtcChkb3Vi
bGUgdmFsdWUpCisgICAgdm9pZCBzZXRUaW1lc3RhbXAoZG91YmxlIGluX29wdF90aW1lc3RhbXAp
CiAgICAgewotICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXREb3VibGUoInRpbWVzdGFtcCJf
cywgdmFsdWUpOworICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXREb3VibGUoInRpbWVzdGFt
cCJfcywgaW5fb3B0X3RpbWVzdGFtcCk7CiAgICAgfQogCi0gICAgdm9pZCBzZXRWYWx1ZXMoUmVm
UHRyPEpTT046Ok9iamVjdD4gdmFsdWUpCisgICAgdm9pZCBzZXRWYWx1ZXMoUmVmPEpTT046Ok9i
amVjdD4mJiBpbl9vcHRfdmFsdWVzKQogICAgIHsKLSAgICAgICAgSlNPTjo6T2JqZWN0QmFzZTo6
c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIFdURk1vdmUodmFsdWUpKTsKKyAgICAgICAgSlNPTjo6T2Jq
ZWN0QmFzZTo6c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIFdURk1vdmUoaW5fb3B0X3ZhbHVlcykpOwog
ICAgIH0KIAotICAgIHZvaWQgc2V0UGF5bG9hZChSZWZQdHI8SlNPTjo6VmFsdWU+IHZhbHVlKQor
ICAgIHZvaWQgc2V0UGF5bG9hZChSZWY8SlNPTjo6VmFsdWU+JiYgaW5fb3B0X3BheWxvYWQpCiAg
ICAgewotICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXRWYWx1ZSgicGF5bG9hZCJfcywgV1RG
TW92ZSh2YWx1ZSkpOworICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXRWYWx1ZSgicGF5bG9h
ZCJfcywgV1RGTW92ZShpbl9vcHRfcGF5bG9hZCkpOwogICAgIH0KIAotICAgIHZvaWQgc2V0RXJy
b3IoUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4gdmFsdWUpCisg
ICAgdm9pZCBzZXRFcnJvcihSZWY8UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4mJiBpbl9vcHRf
ZXJyb3IpCiAgICAgewotICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXRPYmplY3QoImVycm9y
Il9zLCBXVEZNb3ZlKHZhbHVlKSk7CisgICAgICAgIEpTT046Ok9iamVjdEJhc2U6OnNldE9iamVj
dCgiZXJyb3IiX3MsIFdURk1vdmUoaW5fb3B0X2Vycm9yKSk7CiAgICAgfQogCi0gICAgdm9pZCBz
ZXRFcnJvckxpc3QoUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvckxp
c3Q+IHZhbHVlKQorICAgIHZvaWQgc2V0RXJyb3JMaXN0KFJlZjxQcm90b2NvbDo6RGF0YWJhc2U6
OkVycm9yTGlzdD4mJiBpbl9vcHRfZXJyb3JMaXN0KQogICAgIHsKLSAgICAgICAgSlNPTjo6T2Jq
ZWN0QmFzZTo6c2V0QXJyYXkoImVycm9yTGlzdCJfcywgV1RGTW92ZSh2YWx1ZSkpOworICAgICAg
ICBKU09OOjpPYmplY3RCYXNlOjpzZXRBcnJheSgiZXJyb3JMaXN0Il9zLCBXVEZNb3ZlKGluX29w
dF9lcnJvckxpc3QpKTsKICAgICB9CiB9OwogCi1jbGFzcyBQYXJhbWV0ZXJCdW5kbGUgOiBwdWJs
aWMgSlNPTjo6T2JqZWN0QmFzZSB7CitjbGFzcyBQYXJhbWV0ZXJCdW5kbGUgZmluYWwgOiBwdWJs
aWMgSlNPTjo6T2JqZWN0QmFzZSB7CiBwdWJsaWM6CiAgICAgLy8gTmFtZWQgYWZ0ZXIgcHJvcGVy
dHkgbmFtZSAnZGlyZWN0aW9uYWxpdHknIHdoaWxlIGdlbmVyYXRpbmcgUGFyYW1ldGVyQnVuZGxl
LgogICAgIGVudW0gY2xhc3MgRGlyZWN0aW9uYWxpdHkgewogICAgICAgICBMVFIgPSA0LAogICAg
ICAgICBSVEwgPSA1LAogICAgIH07IC8vIGVudW0gY2xhc3MgRGlyZWN0aW9uYWxpdHkKKwogICAg
IGVudW0gewogICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCiAgICAgICAgIENvbHVtbk5hbWVzU2V0
ID0gMSA8PCAwLApAQCAtNTYwLDY2ICs1NjUsNjYgQEAgcHVibGljOgogICAgICAgICBmcmllbmQg
Y2xhc3MgUGFyYW1ldGVyQnVuZGxlOwogICAgIHB1YmxpYzoKIAotICAgICAgICBCdWlsZGVyPFNU
QVRFIHwgQ29sdW1uTmFtZXNTZXQ+JiBzZXRDb2x1bW5OYW1lcyhSZWZQdHI8SlNPTjo6QXJyYXlP
ZjxTdHJpbmc+PiB2YWx1ZSkKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IENvbHVtbk5hbWVzU2V0
PiYgc2V0Q29sdW1uTmFtZXMoUmVmPEpTT046OkFycmF5T2Y8U3RyaW5nPj4mJiBpbl9jb2x1bW5O
YW1lcykKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIENv
bHVtbk5hbWVzU2V0KSwgcHJvcGVydHlfY29sdW1uTmFtZXNfYWxyZWFkeV9zZXQpOwotICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgdmFsdWUpOworICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgV1RGTW92ZShpbl9jb2x1
bW5OYW1lcykpOwogICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxDb2x1bW5OYW1lc1NldD4o
KTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBCdXR0b25zU2V0PiYgc2V0
QnV0dG9ucyhSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFz
ZTo6TW91c2VCdXR0b24+PiB2YWx1ZSkKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IEJ1dHRvbnNT
ZXQ+JiBzZXRCdXR0b25zKFJlZjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpEYXRhYmFzZTo6TW91
c2VCdXR0b24+PiYmIGluX2J1dHRvbnMpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKCEoU1RBVEUgJiBCdXR0b25zU2V0KSwgcHJvcGVydHlfYnV0dG9uc19hbHJlYWR5X3Nl
dCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0QXJyYXkoImJ1dHRvbnMiX3MsIHZhbHVlKTsK
KyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRBcnJheSgiYnV0dG9ucyJfcywgV1RGTW92ZShpbl9i
dXR0b25zKSk7CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEJ1dHRvbnNTZXQ+KCk7CiAg
ICAgICAgIH0KIAotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgRGlyZWN0aW9uYWxpdHlTZXQ+JiBz
ZXREaXJlY3Rpb25hbGl0eShEaXJlY3Rpb25hbGl0eSB2YWx1ZSkKKyAgICAgICAgQnVpbGRlcjxT
VEFURSB8IERpcmVjdGlvbmFsaXR5U2V0PiYgc2V0RGlyZWN0aW9uYWxpdHkoRGlyZWN0aW9uYWxp
dHkgaW5fZGlyZWN0aW9uYWxpdHkpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKCEoU1RBVEUgJiBEaXJlY3Rpb25hbGl0eVNldCksIHByb3BlcnR5X2RpcmVjdGlvbmFsaXR5
X2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoImRpcmVjdGlv
bmFsaXR5Il9zLCBJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0
YW50VmFsdWUodmFsdWUpKTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoImRpcmVj
dGlvbmFsaXR5Il9zLCBQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVl
KGluX2RpcmVjdGlvbmFsaXR5KSk7CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPERpcmVj
dGlvbmFsaXR5U2V0PigpOwogICAgICAgICB9CiAKLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IE5v
dGVzU2V0PiYgc2V0Tm90ZXMoY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICAgICAgQnVpbGRlcjxT
VEFURSB8IE5vdGVzU2V0PiYgc2V0Tm90ZXMoY29uc3QgU3RyaW5nJiBpbl9ub3RlcykKICAgICAg
ICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE5vdGVzU2V0KSwgcHJv
cGVydHlfbm90ZXNfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmlu
Zygibm90ZXMiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm5v
dGVzIl9zLCBpbl9ub3Rlcyk7CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE5vdGVzU2V0
PigpOwogICAgICAgICB9CiAKLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IFRpbWVzdGFtcFNldD4m
IHNldFRpbWVzdGFtcChkb3VibGUgdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBUaW1l
c3RhbXBTZXQ+JiBzZXRUaW1lc3RhbXAoZG91YmxlIGluX3RpbWVzdGFtcCkKICAgICAgICAgewog
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFRpbWVzdGFtcFNldCksIHByb3Bl
cnR5X3RpbWVzdGFtcF9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0RG91
YmxlKCJ0aW1lc3RhbXAiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXREb3Vi
bGUoInRpbWVzdGFtcCJfcywgaW5fdGltZXN0YW1wKTsKICAgICAgICAgICAgIHJldHVybiBjYXN0
U3RhdGU8VGltZXN0YW1wU2V0PigpOwogICAgICAgICB9CiAKLSAgICAgICAgQnVpbGRlcjxTVEFU
RSB8IFZhbHVlc1NldD4mIHNldFZhbHVlcyhSZWZQdHI8SlNPTjo6T2JqZWN0PiB2YWx1ZSkKKyAg
ICAgICAgQnVpbGRlcjxTVEFURSB8IFZhbHVlc1NldD4mIHNldFZhbHVlcyhSZWY8SlNPTjo6T2Jq
ZWN0PiYmIGluX3ZhbHVlcykKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
IShTVEFURSAmIFZhbHVlc1NldCksIHByb3BlcnR5X3ZhbHVlc19hbHJlYWR5X3NldCk7Ci0gICAg
ICAgICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIHZhbHVlKTsKKyAgICAgICAg
ICAgIG1fcmVzdWx0LT5zZXRPYmplY3QoInZhbHVlcyJfcywgV1RGTW92ZShpbl92YWx1ZXMpKTsK
ICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VmFsdWVzU2V0PigpOwogICAgICAgICB9CiAK
LSAgICAgICAgQnVpbGRlcjxTVEFURSB8IFBheWxvYWRTZXQ+JiBzZXRQYXlsb2FkKFJlZlB0cjxK
U09OOjpWYWx1ZT4gdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBQYXlsb2FkU2V0PiYg
c2V0UGF5bG9hZChSZWY8SlNPTjo6VmFsdWU+JiYgaW5fcGF5bG9hZCkKICAgICAgICAgewogICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFBheWxvYWRTZXQpLCBwcm9wZXJ0eV9w
YXlsb2FkX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRWYWx1ZSgicGF5
bG9hZCJfcywgdmFsdWUpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldFZhbHVlKCJwYXlsb2Fk
Il9zLCBXVEZNb3ZlKGluX3BheWxvYWQpKTsKICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8
UGF5bG9hZFNldD4oKTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBFcnJv
clNldD4mIHNldEVycm9yKFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJy
b3I+IHZhbHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRFIHwgRXJyb3JTZXQ+JiBzZXRFcnJvcihS
ZWY8UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4mJiBpbl9lcnJvcikKICAgICAgICAgewogICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEVycm9yU2V0KSwgcHJvcGVydHlfZXJy
b3JfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldE9iamVjdCgiZXJyb3Ii
X3MsIHZhbHVlKTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRPYmplY3QoImVycm9yIl9zLCBX
VEZNb3ZlKGluX2Vycm9yKSk7CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEVycm9yU2V0
PigpOwogICAgICAgICB9CiAKLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IEVycm9yTGlzdFNldD4m
IHNldEVycm9yTGlzdChSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9y
TGlzdD4gdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBFcnJvckxpc3RTZXQ+JiBzZXRF
cnJvckxpc3QoUmVmPFByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3JMaXN0PiYmIGluX2Vycm9yTGlz
dCkKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEVycm9y
TGlzdFNldCksIHByb3BlcnR5X2Vycm9yTGlzdF9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBt
X3Jlc3VsdC0+c2V0QXJyYXkoImVycm9yTGlzdCJfcywgdmFsdWUpOworICAgICAgICAgICAgbV9y
ZXN1bHQtPnNldEFycmF5KCJlcnJvckxpc3QiX3MsIFdURk1vdmUoaW5fZXJyb3JMaXN0KSk7CiAg
ICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEVycm9yTGlzdFNldD4oKTsKICAgICAgICAgfQog
CkBAIC02NTUsNyArNjYwLDcgQEAgcHVibGljOgogfTsKIAogLyogQ29uZmxpY3RlZCBuYW1lcyBt
YXkgY2F1c2UgZ2VuZXJhdGVkIGdldHRlcnMvc2V0dGVycyB0byBjbGFzaCB3aXRoIGJ1aWx0LWlu
IEluc3BlY3Rvck9iamVjdCBtZXRob2RzLiAqLwotY2xhc3MgT2JqZWN0V2l0aFByb3BlcnR5TmFt
ZUNvbmZsaWN0cyA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKK2NsYXNzIE9iamVjdFdpdGhQ
cm9wZXJ0eU5hbWVDb25mbGljdHMgZmluYWwgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7CiBw
dWJsaWM6CiAgICAgZW51bSB7CiAgICAgICAgIE5vRmllbGRzU2V0ID0gMCwKQEAgLTY4NSwzOCAr
NjkwLDM4IEBAIHB1YmxpYzoKICAgICAgICAgZnJpZW5kIGNsYXNzIE9iamVjdFdpdGhQcm9wZXJ0
eU5hbWVDb25mbGljdHM7CiAgICAgcHVibGljOgogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBJ
bnRlZ2VyU2V0PiYgc2V0SW50ZWdlcihjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgICAgICBCdWls
ZGVyPFNUQVRFIHwgSW50ZWdlclNldD4mIHNldEludGVnZXIoY29uc3QgU3RyaW5nJiBpbl9pbnRl
Z2VyKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgSW50
ZWdlclNldCksIHByb3BlcnR5X2ludGVnZXJfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9y
ZXN1bHQtPnNldFN0cmluZygiaW50ZWdlciJfcywgdmFsdWUpOworICAgICAgICAgICAgbV9yZXN1
bHQtPnNldFN0cmluZygiaW50ZWdlciJfcywgaW5faW50ZWdlcik7CiAgICAgICAgICAgICByZXR1
cm4gY2FzdFN0YXRlPEludGVnZXJTZXQ+KCk7CiAgICAgICAgIH0KIAotICAgICAgICBCdWlsZGVy
PFNUQVRFIHwgQXJyYXlTZXQ+JiBzZXRBcnJheShjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgICAg
ICBCdWlsZGVyPFNUQVRFIHwgQXJyYXlTZXQ+JiBzZXRBcnJheShjb25zdCBTdHJpbmcmIGluX2Fy
cmF5KQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQXJy
YXlTZXQpLCBwcm9wZXJ0eV9hcnJheV9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3Vs
dC0+c2V0U3RyaW5nKCJhcnJheSJfcywgdmFsdWUpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNl
dFN0cmluZygiYXJyYXkiX3MsIGluX2FycmF5KTsKICAgICAgICAgICAgIHJldHVybiBjYXN0U3Rh
dGU8QXJyYXlTZXQ+KCk7CiAgICAgICAgIH0KIAotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgU3Ry
aW5nU2V0PiYgc2V0U3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCBTdHJpbmdTZXQ+JiBzZXRTdHJpbmcoY29uc3QgU3RyaW5nJiBpbl9zdHJpbmcpCiAg
ICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBTdHJpbmdTZXQp
LCBwcm9wZXJ0eV9zdHJpbmdfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNl
dFN0cmluZygic3RyaW5nIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3Ry
aW5nKCJzdHJpbmciX3MsIGluX3N0cmluZyk7CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRl
PFN0cmluZ1NldD4oKTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBWYWx1
ZVNldD4mIHNldFZhbHVlKGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8U1RB
VEUgfCBWYWx1ZVNldD4mIHNldFZhbHVlKGNvbnN0IFN0cmluZyYgaW5fdmFsdWUpCiAgICAgICAg
IHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBWYWx1ZVNldCksIHByb3Bl
cnR5X3ZhbHVlX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmco
InZhbHVlIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ2YWx1
ZSJfcywgaW5fdmFsdWUpOwogICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxWYWx1ZVNldD4o
KTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBPYmplY3RTZXQ+JiBzZXRP
YmplY3QoY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IE9iamVj
dFNldD4mIHNldE9iamVjdChjb25zdCBTdHJpbmcmIGluX29iamVjdCkKICAgICAgICAgewogICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE9iamVjdFNldCksIHByb3BlcnR5X29i
amVjdF9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJvYmpl
Y3QiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm9iamVjdCJf
cywgaW5fb2JqZWN0KTsKICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8T2JqZWN0U2V0Pigp
OwogICAgICAgICB9CiAKQEAgLTc0NywxNyArNzUyLDY2IEBAIHB1YmxpYzoKICAgICB9CiB9Owog
CisvKiBBbiBvcGVuIG9iamVjdCB0aGF0IGRvZXNuJ3QgaGF2ZSBhbnkgcHJlZGVmaW5lZCBmaWVs
ZHMuICovCitjbGFzcyBEdW1teU9iamVjdCBmaW5hbCA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNl
IHsKK3B1YmxpYzoKKyAgICBlbnVtIHsKKyAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAorICAgICAg
ICBBbGxGaWVsZHNTZXQgPSAwCisgICAgfTsKKworICAgIHRlbXBsYXRlPGludCBTVEFURT4KKyAg
ICBjbGFzcyBCdWlsZGVyIHsKKyAgICBwcml2YXRlOgorICAgICAgICBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiBtX3Jlc3VsdDsKKworICAgICAgICB0ZW1wbGF0ZTxpbnQgU1RFUD4gQnVpbGRlcjxTVEFU
RSB8IFNURVA+JiBjYXN0U3RhdGUoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gKnJl
aW50ZXJwcmV0X2Nhc3Q8QnVpbGRlcjxTVEFURSB8IFNURVA+Kj4odGhpcyk7CisgICAgICAgIH0K
KworICAgICAgICBCdWlsZGVyKFJlZjwvKkR1bW15T2JqZWN0Ki9KU09OOjpPYmplY3Q+JiYgb2Jq
ZWN0KQorICAgICAgICAgICAgOiBtX3Jlc3VsdChXVEZNb3ZlKG9iamVjdCkpCisgICAgICAgIHsK
KyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09IE5vRmllbGRzU2V0LCBidWlsZGVy
X2NyZWF0ZWRfaW5fbm9uX2luaXRfc3RhdGUpOworICAgICAgICB9CisgICAgICAgIGZyaWVuZCBj
bGFzcyBEdW1teU9iamVjdDsKKyAgICBwdWJsaWM6CisKKyAgICAgICAgUmVmPER1bW15T2JqZWN0
PiByZWxlYXNlKCkKKyAgICAgICAgeworICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoU1RBVEUg
PT0gQWxsRmllbGRzU2V0LCByZXN1bHRfaXNfbm90X3JlYWR5KTsKKyAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKHNpemVvZihEdW1teU9iamVjdCkgPT0gc2l6ZW9mKEpTT046Ok9iamVjdCksIGNh
bm5vdF9jYXN0KTsKKworICAgICAgICAgICAgUmVmPEpTT046Ok9iamVjdD4ganNvblJlc3VsdCA9
IG1fcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7CisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IFdU
Rk1vdmUoKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmPER1bW15T2JqZWN0Pio+KCZqc29uUmVzdWx0KSk7
CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgfTsKKworICAgIC8q
CisgICAgICogU3ludGhldGljIGNvbnN0cnVjdG9yOgorICAgICAqIFJlZjxEdW1teU9iamVjdD4g
cmVzdWx0ID0gRHVtbXlPYmplY3Q6OmNyZWF0ZSgpCisgICAgICogICAgIC5yZWxlYXNlKCk7Cisg
ICAgICovCisgICAgc3RhdGljIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+IGNyZWF0ZSgpCisgICAgewor
ICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSlNPTjo6T2JqZWN0OjpjcmVhdGUo
KSk7CisgICAgfQorfTsKKwogfSAvLyBEYXRhYmFzZQogCiBuYW1lc3BhY2UgVGVzdCB7CiAKLWNs
YXNzIFBhcmFtZXRlckJ1bmRsZSA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKK2NsYXNzIFBh
cmFtZXRlckJ1bmRsZSBmaW5hbCA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKIHB1YmxpYzoK
ICAgICAvLyBOYW1lZCBhZnRlciBwcm9wZXJ0eSBuYW1lICdkaXJlY3Rpb25hbGl0eScgd2hpbGUg
Z2VuZXJhdGluZyBQYXJhbWV0ZXJCdW5kbGUuCiAgICAgZW51bSBjbGFzcyBEaXJlY3Rpb25hbGl0
eSB7CiAgICAgICAgIExUUiA9IDQsCiAgICAgICAgIFJUTCA9IDUsCiAgICAgfTsgLy8gZW51bSBj
bGFzcyBEaXJlY3Rpb25hbGl0eQorCiAgICAgZW51bSB7CiAgICAgICAgIE5vRmllbGRzU2V0ID0g
MCwKICAgICAgICAgRGlyZWN0aW9uYWxpdHlTZXQgPSAxIDw8IDAsCkBAIC03ODksNTkgKzg0Myw1
OSBAQCBwdWJsaWM6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBQYXJhbWV0ZXJCdW5kbGU7CiAgICAg
cHVibGljOgogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBEaXJlY3Rpb25hbGl0eVNldD4mIHNl
dERpcmVjdGlvbmFsaXR5KERpcmVjdGlvbmFsaXR5IHZhbHVlKQorICAgICAgICBCdWlsZGVyPFNU
QVRFIHwgRGlyZWN0aW9uYWxpdHlTZXQ+JiBzZXREaXJlY3Rpb25hbGl0eShEaXJlY3Rpb25hbGl0
eSBpbl9kaXJlY3Rpb25hbGl0eSkKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoIShTVEFURSAmIERpcmVjdGlvbmFsaXR5U2V0KSwgcHJvcGVydHlfZGlyZWN0aW9uYWxpdHlf
YWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygiZGlyZWN0aW9u
YWxpdHkiX3MsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29uc3Rh
bnRWYWx1ZSh2YWx1ZSkpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygiZGlyZWN0
aW9uYWxpdHkiX3MsIFByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUo
aW5fZGlyZWN0aW9uYWxpdHkpKTsKICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8RGlyZWN0
aW9uYWxpdHlTZXQ+KCk7CiAgICAgICAgIH0KIAotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQnV0
dG9uc1NldD4mIHNldEJ1dHRvbnMoUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90
b2NvbDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9uPj4gdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8U1RB
VEUgfCBCdXR0b25zU2V0PiYgc2V0QnV0dG9ucyhSZWY8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6
RGF0YWJhc2U6Ok1vdXNlQnV0dG9uPj4mJiBpbl9idXR0b25zKQogICAgICAgICB7CiAgICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQnV0dG9uc1NldCksIHByb3BlcnR5X2J1dHRv
bnNfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldEFycmF5KCJidXR0b25z
Il9zLCB2YWx1ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0QXJyYXkoImJ1dHRvbnMiX3Ms
IFdURk1vdmUoaW5fYnV0dG9ucykpOwogICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxCdXR0
b25zU2V0PigpOwogICAgICAgICB9CiAKLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IENvbHVtbk5h
bWVzU2V0PiYgc2V0Q29sdW1uTmFtZXMoUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4gdmFs
dWUpCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDb2x1bW5OYW1lc1NldD4mIHNldENvbHVtbk5h
bWVzKFJlZjxKU09OOjpBcnJheU9mPFN0cmluZz4+JiYgaW5fY29sdW1uTmFtZXMpCiAgICAgICAg
IHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBDb2x1bW5OYW1lc1NldCks
IHByb3BlcnR5X2NvbHVtbk5hbWVzX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0
LT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIG1fcmVzdWx0
LT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIFdURk1vdmUoaW5fY29sdW1uTmFtZXMpKTsKICAg
ICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Q29sdW1uTmFtZXNTZXQ+KCk7CiAgICAgICAgIH0K
IAotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTm90ZXNTZXQ+JiBzZXROb3Rlcyhjb25zdCBTdHJp
bmcmIHZhbHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTm90ZXNTZXQ+JiBzZXROb3Rlcyhj
b25zdCBTdHJpbmcmIGluX25vdGVzKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FT
U0VSVCghKFNUQVRFICYgTm90ZXNTZXQpLCBwcm9wZXJ0eV9ub3Rlc19hbHJlYWR5X3NldCk7Ci0g
ICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJub3RlcyJfcywgdmFsdWUpOworICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibm90ZXMiX3MsIGluX25vdGVzKTsKICAgICAgICAg
ICAgIHJldHVybiBjYXN0U3RhdGU8Tm90ZXNTZXQ+KCk7CiAgICAgICAgIH0KIAotICAgICAgICBC
dWlsZGVyPFNUQVRFIHwgVGltZXN0YW1wU2V0PiYgc2V0VGltZXN0YW1wKGRvdWJsZSB2YWx1ZSkK
KyAgICAgICAgQnVpbGRlcjxTVEFURSB8IFRpbWVzdGFtcFNldD4mIHNldFRpbWVzdGFtcChkb3Vi
bGUgaW5fdGltZXN0YW1wKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCgh
KFNUQVRFICYgVGltZXN0YW1wU2V0KSwgcHJvcGVydHlfdGltZXN0YW1wX2FscmVhZHlfc2V0KTsK
LSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywgdmFsdWUpOwor
ICAgICAgICAgICAgbV9yZXN1bHQtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCBpbl90aW1lc3Rh
bXApOwogICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxUaW1lc3RhbXBTZXQ+KCk7CiAgICAg
ICAgIH0KIAotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVmFsdWVzU2V0PiYgc2V0VmFsdWVzKFJl
ZlB0cjxKU09OOjpPYmplY3Q+IHZhbHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVmFsdWVz
U2V0PiYgc2V0VmFsdWVzKFJlZjxKU09OOjpPYmplY3Q+JiYgaW5fdmFsdWVzKQogICAgICAgICB7
CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVmFsdWVzU2V0KSwgcHJvcGVy
dHlfdmFsdWVzX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRPYmplY3Qo
InZhbHVlcyJfcywgdmFsdWUpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldE9iamVjdCgidmFs
dWVzIl9zLCBXVEZNb3ZlKGluX3ZhbHVlcykpOwogICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0
ZTxWYWx1ZXNTZXQ+KCk7CiAgICAgICAgIH0KIAotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgUGF5
bG9hZFNldD4mIHNldFBheWxvYWQoUmVmUHRyPEpTT046OlZhbHVlPiB2YWx1ZSkKKyAgICAgICAg
QnVpbGRlcjxTVEFURSB8IFBheWxvYWRTZXQ+JiBzZXRQYXlsb2FkKFJlZjxKU09OOjpWYWx1ZT4m
JiBpbl9wYXlsb2FkKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNU
QVRFICYgUGF5bG9hZFNldCksIHByb3BlcnR5X3BheWxvYWRfYWxyZWFkeV9zZXQpOwotICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCB2YWx1ZSk7CisgICAgICAgICAg
ICBtX3Jlc3VsdC0+c2V0VmFsdWUoInBheWxvYWQiX3MsIFdURk1vdmUoaW5fcGF5bG9hZCkpOwog
ICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxQYXlsb2FkU2V0PigpOwogICAgICAgICB9CiAK
LSAgICAgICAgQnVpbGRlcjxTVEFURSB8IEVycm9yU2V0PiYgc2V0RXJyb3IoUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4gdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCBFcnJvclNldD4mIHNldEVycm9yKFJlZjxQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9y
PiYmIGluX2Vycm9yKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNU
QVRFICYgRXJyb3JTZXQpLCBwcm9wZXJ0eV9lcnJvcl9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAg
ICBtX3Jlc3VsdC0+c2V0T2JqZWN0KCJlcnJvciJfcywgdmFsdWUpOworICAgICAgICAgICAgbV9y
ZXN1bHQtPnNldE9iamVjdCgiZXJyb3IiX3MsIFdURk1vdmUoaW5fZXJyb3IpKTsKICAgICAgICAg
ICAgIHJldHVybiBjYXN0U3RhdGU8RXJyb3JTZXQ+KCk7CiAgICAgICAgIH0KIApAQCAtODg2LDE1
ICs5NDAsMTUgQEAgT3B0aW9uYWw8UHJvdG9jb2xFbnVtVHlwZT4gcGFyc2VFbnVtVmFsdWVGcm9t
U3RyaW5nKGNvbnN0IFN0cmluZyYpOwogCiAvLyBFbnVtcyBpbiB0aGUgJ0RhdGFiYXNlJyBEb21h
aW4KIHRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpN
b3VzZUJ1dHRvbj4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbj4oY29uc3QgU3RyaW5nJik7CitPcHRpb25hbDxQcm90b2Nv
bDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9uPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8UHJvdG9j
b2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbj4oY29uc3QgU3RyaW5nJik7CiB0ZW1wbGF0ZTw+Ci1P
cHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6T3B0aW9uYWxQYXJhbWV0ZXJC
dW5kbGU6OkRpcmVjdGlvbmFsaXR5PiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9y
OjpQcm90b2NvbDo6RGF0YWJhc2U6Ok9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25h
bGl0eT4oY29uc3QgU3RyaW5nJik7CitPcHRpb25hbDxQcm90b2NvbDo6RGF0YWJhc2U6Ok9wdGlv
bmFsUGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eT4gcGFyc2VFbnVtVmFsdWVGcm9tU3Ry
aW5nPFByb3RvY29sOjpEYXRhYmFzZTo6T3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlv
bmFsaXR5Pihjb25zdCBTdHJpbmcmKTsKIHRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRhdGFiYXNlOjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5PiBwYXJz
ZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlBhcmFt
ZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk+KGNvbnN0IFN0cmluZyYpOworT3B0aW9uYWw8UHJv
dG9jb2w6OkRhdGFiYXNlOjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5PiBwYXJzZUVu
dW1WYWx1ZUZyb21TdHJpbmc8UHJvdG9jb2w6OkRhdGFiYXNlOjpQYXJhbWV0ZXJCdW5kbGU6OkRp
cmVjdGlvbmFsaXR5Pihjb25zdCBTdHJpbmcmKTsKIAogLy8gRW51bXMgaW4gdGhlICdUZXN0JyBE
b21haW4KIHRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlBh
cmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJ
bnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5
Pihjb25zdCBTdHJpbmcmKTsKK09wdGlvbmFsPFByb3RvY29sOjpUZXN0OjpQYXJhbWV0ZXJCdW5k
bGU6OkRpcmVjdGlvbmFsaXR5PiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8UHJvdG9jb2w6OlRl
c3Q6OlBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk+KGNvbnN0IFN0cmluZyYpOwogCiB9
IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycwogCkBAIC05NDYsOCArMTAwMCw3IEBAIHN0cnVjdCBE
ZWZhdWx0SGFzaDxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6TW91c2VCdXR0b24+IDog
SW50SGFzaDxJbnNwZWN0CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGVzdFByb3Rv
Y29sT2JqZWN0cy5oIgogCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3Rm
L3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAKIG5hbWVzcGFj
ZSBJbnNwZWN0b3IgewogCkBAIC05NzEsNDUgKzEwMjQsNDUgQEAgU3RyaW5nIGdldEVudW1Db25z
dGFudFZhbHVlKGludCBjb2RlKSB7CiAvLyBFbnVtcyBpbiB0aGUgJ0RhdGFiYXNlJyBEb21haW4K
IAogdGVtcGxhdGU8PgotT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6Ok1v
dXNlQnV0dG9uPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6
RGF0YWJhc2U6Ok1vdXNlQnV0dG9uPihjb25zdCBTdHJpbmcmIHByb3RvY29sU3RyaW5nKQorT3B0
aW9uYWw8UHJvdG9jb2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbj4gcGFyc2VFbnVtVmFsdWVGcm9t
U3RyaW5nPFByb3RvY29sOjpEYXRhYmFzZTo6TW91c2VCdXR0b24+KGNvbnN0IFN0cmluZyYgcHJv
dG9jb2xTdHJpbmcpCiB7CiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBjb25zdGFudFZhbHVlc1td
ID0gewotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpNb3Vz
ZUJ1dHRvbjo6Tm9uZSwKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRh
YmFzZTo6TW91c2VCdXR0b246OkxlZnQsCi0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90
b2NvbDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9uOjpNaWRkbGUsCi0gICAgICAgIChzaXplX3QpSW5z
cGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9uOjpSaWdodCwKKyAgICAgICAg
KHNpemVfdClQcm90b2NvbDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9uOjpOb25lLAorICAgICAgICAo
c2l6ZV90KVByb3RvY29sOjpEYXRhYmFzZTo6TW91c2VCdXR0b246OkxlZnQsCisgICAgICAgIChz
aXplX3QpUHJvdG9jb2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbjo6TWlkZGxlLAorICAgICAgICAo
c2l6ZV90KVByb3RvY29sOjpEYXRhYmFzZTo6TW91c2VCdXR0b246OlJpZ2h0LAogICAgIH07CiAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCA0OyArK2kpCiAgICAgICAgIGlmIChwcm90b2NvbFN0
cmluZyA9PSBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb25zdGFudFZhbHVlc1tpXV0pCi0gICAgICAg
ICAgICByZXR1cm4gKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbilj
b25zdGFudFZhbHVlc1tpXTsKKyAgICAgICAgICAgIHJldHVybiAoUHJvdG9jb2w6OkRhdGFiYXNl
OjpNb3VzZUJ1dHRvbiljb25zdGFudFZhbHVlc1tpXTsKIAogICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CiB9CiAKIHRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFi
YXNlOjpPcHRpb25hbFBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk+IHBhcnNlRW51bVZh
bHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6T3B0aW9uYWxQYXJh
bWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5Pihjb25zdCBTdHJpbmcmIHByb3RvY29sU3RyaW5n
KQorT3B0aW9uYWw8UHJvdG9jb2w6OkRhdGFiYXNlOjpPcHRpb25hbFBhcmFtZXRlckJ1bmRsZTo6
RGlyZWN0aW9uYWxpdHk+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxQcm90b2NvbDo6RGF0YWJh
c2U6Ok9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eT4oY29uc3QgU3RyaW5n
JiBwcm90b2NvbFN0cmluZykKIHsKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNvbnN0YW50VmFs
dWVzW10gPSB7Ci0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6
Ok9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eTo6TFRSLAotICAgICAgICAo
c2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpPcHRpb25hbFBhcmFtZXRlckJ1
bmRsZTo6RGlyZWN0aW9uYWxpdHk6OlJUTCwKKyAgICAgICAgKHNpemVfdClQcm90b2NvbDo6RGF0
YWJhc2U6Ok9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eTo6TFRSLAorICAg
ICAgICAoc2l6ZV90KVByb3RvY29sOjpEYXRhYmFzZTo6T3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU6
OkRpcmVjdGlvbmFsaXR5OjpSVEwsCiAgICAgfTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IDI7ICsraSkKICAgICAgICAgaWYgKHByb3RvY29sU3RyaW5nID09IGVudW1fY29uc3RhbnRfdmFs
dWVzW2NvbnN0YW50VmFsdWVzW2ldXSkKLSAgICAgICAgICAgIHJldHVybiAoSW5zcGVjdG9yOjpQ
cm90b2NvbDo6RGF0YWJhc2U6Ok9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0
eSljb25zdGFudFZhbHVlc1tpXTsKKyAgICAgICAgICAgIHJldHVybiAoUHJvdG9jb2w6OkRhdGFi
YXNlOjpPcHRpb25hbFBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHkpY29uc3RhbnRWYWx1
ZXNbaV07CiAKICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQogCiB0ZW1wbGF0ZTw+Ci1PcHRp
b25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UGFyYW1ldGVyQnVuZGxlOjpEaXJl
Y3Rpb25hbGl0eT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRhdGFiYXNlOjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5Pihjb25zdCBTdHJpbmcm
IHByb3RvY29sU3RyaW5nKQorT3B0aW9uYWw8UHJvdG9jb2w6OkRhdGFiYXNlOjpQYXJhbWV0ZXJC
dW5kbGU6OkRpcmVjdGlvbmFsaXR5PiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8UHJvdG9jb2w6
OkRhdGFiYXNlOjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5Pihjb25zdCBTdHJpbmcm
IHByb3RvY29sU3RyaW5nKQogewogICAgIHN0YXRpYyBjb25zdCBzaXplX3QgY29uc3RhbnRWYWx1
ZXNbXSA9IHsKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6
UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eTo6TFRSLAotICAgICAgICAoc2l6ZV90KUlu
c3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFs
aXR5OjpSVEwsCisgICAgICAgIChzaXplX3QpUHJvdG9jb2w6OkRhdGFiYXNlOjpQYXJhbWV0ZXJC
dW5kbGU6OkRpcmVjdGlvbmFsaXR5OjpMVFIsCisgICAgICAgIChzaXplX3QpUHJvdG9jb2w6OkRh
dGFiYXNlOjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5OjpSVEwsCiAgICAgfTsKICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDI7ICsraSkKICAgICAgICAgaWYgKHByb3RvY29sU3Ry
aW5nID09IGVudW1fY29uc3RhbnRfdmFsdWVzW2NvbnN0YW50VmFsdWVzW2ldXSkKLSAgICAgICAg
ICAgIHJldHVybiAoSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlBhcmFtZXRlckJ1bmRs
ZTo6RGlyZWN0aW9uYWxpdHkpY29uc3RhbnRWYWx1ZXNbaV07CisgICAgICAgICAgICByZXR1cm4g
KFByb3RvY29sOjpEYXRhYmFzZTo6UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eSljb25z
dGFudFZhbHVlc1tpXTsKIAogICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiB9CkBAIC0xMDE3LDE1
ICsxMDcwLDE1IEBAIE9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQYXJh
bWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5PiBwYXJzZUVuCiAvLyBFbnVtcyBpbiB0aGUgJ1Rl
c3QnIERvbWFpbgogCiB0ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpU
ZXN0OjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5PiBwYXJzZUVudW1WYWx1ZUZyb21T
dHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rp
b25hbGl0eT4oY29uc3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKK09wdGlvbmFsPFByb3RvY29s
OjpUZXN0OjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5PiBwYXJzZUVudW1WYWx1ZUZy
b21TdHJpbmc8UHJvdG9jb2w6OlRlc3Q6OlBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk+
KGNvbnN0IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcpCiB7CiAgICAgc3RhdGljIGNvbnN0IHNpemVf
dCBjb25zdGFudFZhbHVlc1tdID0gewotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9j
b2w6OlRlc3Q6OlBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk6OkxUUiwKLSAgICAgICAg
KHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVj
dGlvbmFsaXR5OjpSVEwsCisgICAgICAgIChzaXplX3QpUHJvdG9jb2w6OlRlc3Q6OlBhcmFtZXRl
ckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk6OkxUUiwKKyAgICAgICAgKHNpemVfdClQcm90b2NvbDo6
VGVzdDo6UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eTo6UlRMLAogICAgIH07CiAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCAyOyArK2kpCiAgICAgICAgIGlmIChwcm90b2NvbFN0cmlu
ZyA9PSBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb25zdGFudFZhbHVlc1tpXV0pCi0gICAgICAgICAg
ICByZXR1cm4gKEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlBhcmFtZXRlckJ1bmRsZTo6RGly
ZWN0aW9uYWxpdHkpY29uc3RhbnRWYWx1ZXNbaV07CisgICAgICAgICAgICByZXR1cm4gKFByb3Rv
Y29sOjpUZXN0OjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5KWNvbnN0YW50VmFsdWVz
W2ldOwogCiAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLXJlcXVp
cmluZy1ydW50aW1lLWNhc3RzLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2Fz
dHMuanNvbi1yZXN1bHQKaW5kZXggMjZiNzUwYzY2YjIwMWIwZDRlY2JmMmYzNzQ4YWI5ZjQwMzA5
YTllYy4uNGRlMDRhYjRiNmQ5MWRjOTdmMDA2MzU5YThkNmM3NjgwZDkyZjM3YyAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVk
L3R5cGUtcmVxdWlyaW5nLXJ1bnRpbWUtY2FzdHMuanNvbi1yZXN1bHQKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtcmVxdWly
aW5nLXJ1bnRpbWUtY2FzdHMuanNvbi1yZXN1bHQKQEAgLTY5LDcgKzY5LDcgQEAgSW5zcGVjdG9y
QmFja2VuZC5hY3RpdmF0ZURvbWFpbigiVGVzdCIsIG51bGwpOwogCiAjaWYgRU5BQkxFKElOU1BF
Q1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBl
cy5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgogI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CiAKQEAgLTEyNSwxMSArMTI1LDE0IEBA
IHByaXZhdGU6CiAKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx0
dXBsZT4KKyNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwu
aD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3Rv
ciB7CiAKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCiAKIAogCkBAIC0xNzAsOSArMTcz
LDcgQEAgdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiAjaW5jbHVkZSAiVGVzdEJhY2tlbmRE
aXNwYXRjaGVycy5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRl
bmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgogI2luY2x1ZGUgPHd0Zi9O
ZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogI2lmIEVO
QUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogI2luY2x1ZGUgIlRlc3RBbHRl
cm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKQEAgLTIyMCw2ICsyMjEsNyBAQCBuYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKIAogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRl
IDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKQEAgLTI2Myw3
ICsyNjUsNiBAQCBjbGFzcyBGcm9udGVuZFJvdXRlcjsKICNpbmNsdWRlICJUZXN0RnJvbnRlbmRE
aXNwYXRjaGVycy5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRl
bmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJ
bnNwZWN0b3IgewogCkBAIC0zMDQsNyArMzA1LDkgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiAj
cHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29s
VHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9KU09O
VmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC0zNDYsNyArMzQ5LDcg
QEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKFQgZW51
bVZhbHVlKQogbmFtZXNwYWNlIFRlc3QgewogCiAvKiBBIGR1bW15IHR5cGUgdGhhdCByZXF1aXJl
cyBydW50aW1lIGNhc3RzLCBhbmQgZm9yY2VzIG5vbi1wcmltaXRpdmUgcmVmZXJlbmNlZCB0eXBl
cyB0byBhbHNvIGVtaXQgcnVudGltZSBjYXN0IGhlbHBlcnMuICovCi1jbGFzcyBUeXBlTmVlZGlu
Z0Nhc3QgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7CitjbGFzcyBUeXBlTmVlZGluZ0Nhc3Qg
ZmluYWwgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7CiBwdWJsaWM6CiAgICAgZW51bSB7CiAg
ICAgICAgIE5vRmllbGRzU2V0ID0gMCwKQEAgLTM3NiwzOCArMzc5LDM4IEBAIHB1YmxpYzoKICAg
ICAgICAgZnJpZW5kIGNsYXNzIFR5cGVOZWVkaW5nQ2FzdDsKICAgICBwdWJsaWM6CiAKLSAgICAg
ICAgQnVpbGRlcjxTVEFURSB8IFN0cmluZ1NldD4mIHNldFN0cmluZyhjb25zdCBTdHJpbmcmIHZh
bHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRFIHwgU3RyaW5nU2V0PiYgc2V0U3RyaW5nKGNvbnN0
IFN0cmluZyYgaW5fc3RyaW5nKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VS
VCghKFNUQVRFICYgU3RyaW5nU2V0KSwgcHJvcGVydHlfc3RyaW5nX2FscmVhZHlfc2V0KTsKLSAg
ICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInN0cmluZyJfcywgdmFsdWUpOworICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygic3RyaW5nIl9zLCBpbl9zdHJpbmcpOwogICAgICAg
ICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxTdHJpbmdTZXQ+KCk7CiAgICAgICAgIH0KIAotICAgICAg
ICBCdWlsZGVyPFNUQVRFIHwgTnVtYmVyU2V0PiYgc2V0TnVtYmVyKGludCB2YWx1ZSkKKyAgICAg
ICAgQnVpbGRlcjxTVEFURSB8IE51bWJlclNldD4mIHNldE51bWJlcihpbnQgaW5fbnVtYmVyKQog
ICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTnVtYmVyU2V0
KSwgcHJvcGVydHlfbnVtYmVyX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5z
ZXRJbnRlZ2VyKCJudW1iZXIiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRJ
bnRlZ2VyKCJudW1iZXIiX3MsIGluX251bWJlcik7CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0
YXRlPE51bWJlclNldD4oKTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBB
bmltYWxzU2V0PiYgc2V0QW5pbWFscyhJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRB
bmltYWxzIHZhbHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQW5pbWFsc1NldD4mIHNldEFu
aW1hbHMoUHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHMgaW5fYW5pbWFscykKICAgICAgICAg
ewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEFuaW1hbHNTZXQpLCBwcm9w
ZXJ0eV9hbmltYWxzX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJp
bmcoImFuaW1hbHMiX3MsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVt
Q29uc3RhbnRWYWx1ZSh2YWx1ZSkpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygi
YW5pbWFscyJfcywgUHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShp
bl9hbmltYWxzKSk7CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEFuaW1hbHNTZXQ+KCk7
CiAgICAgICAgIH0KIAotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgSWRTZXQ+JiBzZXRJZChpbnQg
dmFsdWUpCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBJZFNldD4mIHNldElkKGludCBpbl9pZCkK
ICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIElkU2V0KSwg
cHJvcGVydHlfaWRfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldEludGVn
ZXIoImlkIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0SW50ZWdlcigiaWQi
X3MsIGluX2lkKTsKICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8SWRTZXQ+KCk7CiAgICAg
ICAgIH0KIAotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVHJlZVNldD4mIHNldFRyZWUoUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDE+IHZhbHVlKQorICAg
ICAgICBCdWlsZGVyPFNUQVRFIHwgVHJlZVNldD4mIHNldFRyZWUoUmVmPFByb3RvY29sOjpUZXN0
OjpSZWN1cnNpdmVPYmplY3QxPiYmIGluX3RyZWUpCiAgICAgICAgIHsKICAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBUcmVlU2V0KSwgcHJvcGVydHlfdHJlZV9hbHJlYWR5X3Nl
dCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0KCJ0cmVlIl9zLCB2YWx1ZSk7Cisg
ICAgICAgICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0KCJ0cmVlIl9zLCBXVEZNb3ZlKGluX3RyZWUp
KTsKICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VHJlZVNldD4oKTsKICAgICAgICAgfQog
CkBAIC00NTIsNyArNDU1LDcgQEAgZW51bSBjbGFzcyBDYXN0ZWRBbmltYWxzIHsKICAgICBGbGFt
aW5nb3MgPSAzLAogfTsgLy8gZW51bSBjbGFzcyBDYXN0ZWRBbmltYWxzCiAKLWNsYXNzIFJlY3Vy
c2l2ZU9iamVjdDEgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7CitjbGFzcyBSZWN1cnNpdmVP
YmplY3QxIGZpbmFsIDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgewogcHVibGljOgogICAgIGVu
dW0gewogICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCkBAIC00OTgsMTMgKzUwMSwxMyBAQCBwdWJs
aWM6CiAgICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihKU09OOjpPYmplY3Q6OmNy
ZWF0ZSgpKTsKICAgICB9CiAKLSAgICB2b2lkIHNldE9iaihSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0Mj4gdmFsdWUpCisgICAgdm9pZCBzZXRPYmooUmVm
PFByb3RvY29sOjpUZXN0OjpSZWN1cnNpdmVPYmplY3QyPiYmIGluX29wdF9vYmopCiAgICAgewot
ICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXRPYmplY3QoIm9iaiJfcywgV1RGTW92ZSh2YWx1
ZSkpOworICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXRPYmplY3QoIm9iaiJfcywgV1RGTW92
ZShpbl9vcHRfb2JqKSk7CiAgICAgfQogfTsKIAotY2xhc3MgUmVjdXJzaXZlT2JqZWN0MiA6IHB1
YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKK2NsYXNzIFJlY3Vyc2l2ZU9iamVjdDIgZmluYWwgOiBw
dWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7CiBwdWJsaWM6CiAgICAgZW51bSB7CiAgICAgICAgIE5v
RmllbGRzU2V0ID0gMCwKQEAgLTU1MCwyNSArNTUzLDI1IEBAIHB1YmxpYzoKICAgICAgICAgcmV0
dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEpTT046Ok9iamVjdDo6Y3JlYXRlKCkpOwogICAgIH0K
IAotICAgIHZvaWQgc2V0T2JqKFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpSZWN1
cnNpdmVPYmplY3QxPiB2YWx1ZSkKKyAgICB2b2lkIHNldE9iaihSZWY8UHJvdG9jb2w6OlRlc3Q6
OlJlY3Vyc2l2ZU9iamVjdDE+JiYgaW5fb3B0X29iaikKICAgICB7Ci0gICAgICAgIEpTT046Ok9i
amVjdEJhc2U6OnNldE9iamVjdCgib2JqIl9zLCBXVEZNb3ZlKHZhbHVlKSk7CisgICAgICAgIEpT
T046Ok9iamVjdEJhc2U6OnNldE9iamVjdCgib2JqIl9zLCBXVEZNb3ZlKGluX29wdF9vYmopKTsK
ICAgICB9CiB9OwogCiB9IC8vIFRlc3QKIAotdGVtcGxhdGU8PiBzdHJ1Y3QgQmluZGluZ1RyYWl0
czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzPiB7Cit0ZW1wbGF0ZTw+
IHN0cnVjdCBCaW5kaW5nVHJhaXRzPFByb3RvY29sOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3Q+IHsK
K3N0YXRpYyBSZWY8UHJvdG9jb2w6OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdD4gcnVudGltZUNhc3Qo
UmVmPEpTT046OlZhbHVlPiYmIHZhbHVlKTsKIHN0YXRpYyB2b2lkIGFzc2VydFZhbHVlSGFzRXhw
ZWN0ZWRUeXBlKEpTT046OlZhbHVlKik7CiB9OwotdGVtcGxhdGU8PiBzdHJ1Y3QgQmluZGluZ1Ry
YWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3Q+IHsKLXN0YXRp
YyBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0PiBydW50
aW1lQ2FzdChSZWZQdHI8SlNPTjo6VmFsdWU+JiYgdmFsdWUpOwordGVtcGxhdGU8PiBzdHJ1Y3Qg
QmluZGluZ1RyYWl0czxQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFscz4gewogc3RhdGljIHZv
aWQgYXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoSlNPTjo6VmFsdWUqKTsKIH07Ci10ZW1wbGF0
ZTw+IHN0cnVjdCBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlJlY3Vy
c2l2ZU9iamVjdDE+IHsKK3RlbXBsYXRlPD4gc3RydWN0IEJpbmRpbmdUcmFpdHM8UHJvdG9jb2w6
OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDE+IHsKIHN0YXRpYyB2b2lkIGFzc2VydFZhbHVlSGFzRXhw
ZWN0ZWRUeXBlKEpTT046OlZhbHVlKik7CiB9OwotdGVtcGxhdGU8PiBzdHJ1Y3QgQmluZGluZ1Ry
YWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpSZWN1cnNpdmVPYmplY3QyPiB7Cit0ZW1w
bGF0ZTw+IHN0cnVjdCBCaW5kaW5nVHJhaXRzPFByb3RvY29sOjpUZXN0OjpSZWN1cnNpdmVPYmpl
Y3QyPiB7CiBzdGF0aWMgdm9pZCBhc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShKU09OOjpWYWx1
ZSopOwogfTsKIApAQCAtNTc5LDkgKzU4Miw5IEBAIE9wdGlvbmFsPFByb3RvY29sRW51bVR5cGU+
IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZyhjb25zdCBTdHJpbmcmKTsKIAogLy8gRW51bXMgaW4g
dGhlICdUZXN0JyBEb21haW4KIHRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlRlc3Q6OlVuY2FzdGVkQW5pbWFscz4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlVuY2FzdGVkQW5pbWFscz4oY29uc3QgU3RyaW5nJik7CitP
cHRpb25hbDxQcm90b2NvbDo6VGVzdDo6VW5jYXN0ZWRBbmltYWxzPiBwYXJzZUVudW1WYWx1ZUZy
b21TdHJpbmc8UHJvdG9jb2w6OlRlc3Q6OlVuY2FzdGVkQW5pbWFscz4oY29uc3QgU3RyaW5nJik7
CiB0ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRB
bmltYWxzPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVz
dDo6Q2FzdGVkQW5pbWFscz4oY29uc3QgU3RyaW5nJik7CitPcHRpb25hbDxQcm90b2NvbDo6VGVz
dDo6Q2FzdGVkQW5pbWFscz4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPFByb3RvY29sOjpUZXN0
OjpDYXN0ZWRBbmltYWxzPihjb25zdCBTdHJpbmcmKTsKIAogfSAvLyBuYW1lc3BhY2UgVGVzdEhl
bHBlcnMKIApAQCAtNjM1LDggKzYzOCw3IEBAIHN0cnVjdCBEZWZhdWx0SGFzaDxJbnNwZWN0b3I6
OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzPiA6IEludEhhc2g8SW5zcGVjdG9yCiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogCi0jaW5j
bHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2lu
Y2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC02
NjEsMzMgKzY2MywzMyBAQCBTdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpIHsK
IC8vIEVudW1zIGluIHRoZSAnVGVzdCcgRG9tYWluCiAKIHRlbXBsYXRlPD4KLU9wdGlvbmFsPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlVuY2FzdGVkQW5pbWFscz4gcGFyc2VFbnVtVmFsdWVG
cm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlVuY2FzdGVkQW5pbWFscz4oY29u
c3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKK09wdGlvbmFsPFByb3RvY29sOjpUZXN0OjpVbmNh
c3RlZEFuaW1hbHM+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxQcm90b2NvbDo6VGVzdDo6VW5j
YXN0ZWRBbmltYWxzPihjb25zdCBTdHJpbmcmIHByb3RvY29sU3RyaW5nKQogewogICAgIHN0YXRp
YyBjb25zdCBzaXplX3QgY29uc3RhbnRWYWx1ZXNbXSA9IHsKLSAgICAgICAgKHNpemVfdClJbnNw
ZWN0b3I6OlByb3RvY29sOjpUZXN0OjpVbmNhc3RlZEFuaW1hbHM6OlBpZ3MsCi0gICAgICAgIChz
aXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VW5jYXN0ZWRBbmltYWxzOjpDb3dzLAot
ICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlVuY2FzdGVkQW5pbWFs
czo6Q2F0cywKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpVbmNh
c3RlZEFuaW1hbHM6OkhlbnMsCisgICAgICAgIChzaXplX3QpUHJvdG9jb2w6OlRlc3Q6OlVuY2Fz
dGVkQW5pbWFsczo6UGlncywKKyAgICAgICAgKHNpemVfdClQcm90b2NvbDo6VGVzdDo6VW5jYXN0
ZWRBbmltYWxzOjpDb3dzLAorICAgICAgICAoc2l6ZV90KVByb3RvY29sOjpUZXN0OjpVbmNhc3Rl
ZEFuaW1hbHM6OkNhdHMsCisgICAgICAgIChzaXplX3QpUHJvdG9jb2w6OlRlc3Q6OlVuY2FzdGVk
QW5pbWFsczo6SGVucywKICAgICB9OwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgNDsgKytp
KQogICAgICAgICBpZiAocHJvdG9jb2xTdHJpbmcgPT0gZW51bV9jb25zdGFudF92YWx1ZXNbY29u
c3RhbnRWYWx1ZXNbaV1dKQotICAgICAgICAgICAgcmV0dXJuIChJbnNwZWN0b3I6OlByb3RvY29s
OjpUZXN0OjpVbmNhc3RlZEFuaW1hbHMpY29uc3RhbnRWYWx1ZXNbaV07CisgICAgICAgICAgICBy
ZXR1cm4gKFByb3RvY29sOjpUZXN0OjpVbmNhc3RlZEFuaW1hbHMpY29uc3RhbnRWYWx1ZXNbaV07
CiAKICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQogCiB0ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJ
bnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzPiBwYXJzZUVudW1WYWx1ZUZy
b21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFscz4oY29uc3Qg
U3RyaW5nJiBwcm90b2NvbFN0cmluZykKK09wdGlvbmFsPFByb3RvY29sOjpUZXN0OjpDYXN0ZWRB
bmltYWxzPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFu
aW1hbHM+KGNvbnN0IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcpCiB7CiAgICAgc3RhdGljIGNvbnN0
IHNpemVfdCBjb25zdGFudFZhbHVlc1tdID0gewotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6
UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM6OkR1Y2tzLAotICAgICAgICAoc2l6ZV90KUlu
c3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM6OkhlbnMsCi0gICAgICAgIChz
aXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFsczo6Q3Jvd3MsCi0g
ICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFsczo6
RmxhbWluZ29zLAorICAgICAgICAoc2l6ZV90KVByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxz
OjpEdWNrcywKKyAgICAgICAgKHNpemVfdClQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFsczo6
SGVucywKKyAgICAgICAgKHNpemVfdClQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFsczo6Q3Jv
d3MsCisgICAgICAgIChzaXplX3QpUHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM6OkZsYW1p
bmdvcywKICAgICB9OwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgNDsgKytpKQogICAgICAg
ICBpZiAocHJvdG9jb2xTdHJpbmcgPT0gZW51bV9jb25zdGFudF92YWx1ZXNbY29uc3RhbnRWYWx1
ZXNbaV1dKQotICAgICAgICAgICAgcmV0dXJuIChJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpD
YXN0ZWRBbmltYWxzKWNvbnN0YW50VmFsdWVzW2ldOworICAgICAgICAgICAgcmV0dXJuIChQcm90
b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFscyljb25zdGFudFZhbHVlc1tpXTsKIAogICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CiB9CkBAIC02OTYsMTE1ICs2OTgsMTAxIEBAIE9wdGlvbmFsPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM+IHBhcnNlRW51bVZhbHVlRnJvbVN0
cmluZzxJbnNwCiAKIAogCi12b2lkIEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6
VGVzdDo6Q2FzdGVkQW5pbWFscz46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKEpTT046OlZh
bHVlKiB2YWx1ZSkKK3ZvaWQgQmluZGluZ1RyYWl0czxQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5p
bWFscz46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKEpTT046OlZhbHVlKiB2YWx1ZSkKIHsK
KyAgICBBU1NFUlRfVU5VU0VEKHZhbHVlLCB2YWx1ZSk7CiAjaWYgQVNTRVJUX0VOQUJMRUQKLSAg
ICBBU1NFUlRfQVJHKHZhbHVlLCB2YWx1ZSk7Ci0gICAgU3RyaW5nIHJlc3VsdDsKLSAgICBib29s
IGNhc3RTdWNjZWVkZWQgPSB2YWx1ZS0+YXNTdHJpbmcocmVzdWx0KTsKLSAgICBBU1NFUlQoY2Fz
dFN1Y2NlZWRlZCk7CisgICAgYXV0byByZXN1bHQgPSB2YWx1ZS0+YXNTdHJpbmcoKTsKKyAgICBB
U1NFUlQocmVzdWx0KTsKICAgICBBU1NFUlQocmVzdWx0ID09ICJEdWNrcyIgfHwgcmVzdWx0ID09
ICJIZW5zIiB8fCByZXN1bHQgPT0gIkNyb3dzIiB8fCByZXN1bHQgPT0gIkZsYW1pbmdvcyIpOwot
I2Vsc2UgLy8gQVNTRVJUX0VOQUJMRUQKLSAgICBVTlVTRURfUEFSQU0odmFsdWUpOwotI2VuZGlm
IC8vIEFTU0VSVF9FTkFCTEVECisjZW5kaWYKIH0KIAotdm9pZCBCaW5kaW5nVHJhaXRzPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdD46OmFzc2VydFZhbHVlSGFzRXhw
ZWN0ZWRUeXBlKEpTT046OlZhbHVlKiB2YWx1ZSkKK3ZvaWQgQmluZGluZ1RyYWl0czxQcm90b2Nv
bDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0Pjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoSlNP
Tjo6VmFsdWUqIHZhbHVlKQogeworICAgIEFTU0VSVF9VTlVTRUQodmFsdWUsIHZhbHVlKTsKICNp
ZiBBU1NFUlRfRU5BQkxFRAotICAgIEFTU0VSVF9BUkcodmFsdWUsIHZhbHVlKTsKLSAgICBSZWZQ
dHI8SlNPTjo6T2JqZWN0PiBvYmplY3Q7Ci0gICAgYm9vbCBjYXN0U3VjY2VlZGVkID0gdmFsdWUt
PmFzT2JqZWN0KG9iamVjdCk7Ci0gICAgQVNTRVJUX1VOVVNFRChjYXN0U3VjY2VlZGVkLCBjYXN0
U3VjY2VlZGVkKTsKKyAgICBhdXRvIG9iamVjdCA9IHZhbHVlLT5hc09iamVjdCgpOworICAgIEFT
U0VSVChvYmplY3QpOwogICAgIHsKICAgICAgICAgYXV0byBzdHJpbmdQb3MgPSBvYmplY3QtPmZp
bmQoInN0cmluZyJfcyk7CiAgICAgICAgIEFTU0VSVChzdHJpbmdQb3MgIT0gb2JqZWN0LT5lbmQo
KSk7Ci0gICAgICAgIEJpbmRpbmdUcmFpdHM8U3RyaW5nPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3Rl
ZFR5cGUoc3RyaW5nUG9zLT52YWx1ZS5nZXQoKSk7CisgICAgICAgIEJpbmRpbmdUcmFpdHM8U3Ry
aW5nPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoc3RyaW5nUG9zLT52YWx1ZS5wdHIoKSk7
CiAgICAgfQogICAgIHsKICAgICAgICAgYXV0byBudW1iZXJQb3MgPSBvYmplY3QtPmZpbmQoIm51
bWJlciJfcyk7CiAgICAgICAgIEFTU0VSVChudW1iZXJQb3MgIT0gb2JqZWN0LT5lbmQoKSk7Ci0g
ICAgICAgIEJpbmRpbmdUcmFpdHM8aW50Pjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUobnVt
YmVyUG9zLT52YWx1ZS5nZXQoKSk7CisgICAgICAgIEJpbmRpbmdUcmFpdHM8aW50Pjo6YXNzZXJ0
VmFsdWVIYXNFeHBlY3RlZFR5cGUobnVtYmVyUG9zLT52YWx1ZS5wdHIoKSk7CiAgICAgfQogICAg
IHsKICAgICAgICAgYXV0byBhbmltYWxzUG9zID0gb2JqZWN0LT5maW5kKCJhbmltYWxzIl9zKTsK
ICAgICAgICAgQVNTRVJUKGFuaW1hbHNQb3MgIT0gb2JqZWN0LT5lbmQoKSk7Ci0gICAgICAgIEJp
bmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFscz46OmFz
c2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKGFuaW1hbHNQb3MtPnZhbHVlLmdldCgpKTsKKyAgICAg
ICAgQmluZGluZ1RyYWl0czxQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFscz46OmFzc2VydFZh
bHVlSGFzRXhwZWN0ZWRUeXBlKGFuaW1hbHNQb3MtPnZhbHVlLnB0cigpKTsKICAgICB9CiAgICAg
ewogICAgICAgICBhdXRvIGlkUG9zID0gb2JqZWN0LT5maW5kKCJpZCJfcyk7CiAgICAgICAgIEFT
U0VSVChpZFBvcyAhPSBvYmplY3QtPmVuZCgpKTsKLSAgICAgICAgQmluZGluZ1RyYWl0czxpbnQ+
Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShpZFBvcy0+dmFsdWUuZ2V0KCkpOworICAgICAg
ICBCaW5kaW5nVHJhaXRzPGludD46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKGlkUG9zLT52
YWx1ZS5wdHIoKSk7CiAgICAgfQogICAgIHsKICAgICAgICAgYXV0byB0cmVlUG9zID0gb2JqZWN0
LT5maW5kKCJ0cmVlIl9zKTsKICAgICAgICAgQVNTRVJUKHRyZWVQb3MgIT0gb2JqZWN0LT5lbmQo
KSk7Ci0gICAgICAgIEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UmVj
dXJzaXZlT2JqZWN0MT46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKHRyZWVQb3MtPnZhbHVl
LmdldCgpKTsKKyAgICAgICAgQmluZGluZ1RyYWl0czxQcm90b2NvbDo6VGVzdDo6UmVjdXJzaXZl
T2JqZWN0MT46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKHRyZWVQb3MtPnZhbHVlLnB0cigp
KTsKICAgICB9CiAKLSAgICBpbnQgZm91bmRQcm9wZXJ0aWVzQ291bnQgPSA1OworICAgIHNpemVf
dCBmb3VuZFByb3BlcnRpZXNDb3VudCA9IDU7CiAgICAgaWYgKGZvdW5kUHJvcGVydGllc0NvdW50
ICE9IG9iamVjdC0+c2l6ZSgpKQogICAgICAgICBGQVRBTCgiVW5leHBlY3RlZCBwcm9wZXJ0aWVz
IGluIG9iamVjdDogJXNcbiIsIG9iamVjdC0+dG9KU09OU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkp
OwotI2Vsc2UgLy8gQVNTRVJUX0VOQUJMRUQKLSAgICBVTlVTRURfUEFSQU0odmFsdWUpOwotI2Vu
ZGlmIC8vIEFTU0VSVF9FTkFCTEVECisjZW5kaWYKIH0KIAotUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdD4gQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlBy
b3RvY29sOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3Q+OjpydW50aW1lQ2FzdChSZWZQdHI8SlNPTjo6
VmFsdWU+JiYgdmFsdWUpCitSZWY8UHJvdG9jb2w6OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdD4gQmlu
ZGluZ1RyYWl0czxQcm90b2NvbDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0Pjo6cnVudGltZUNhc3Qo
UmVmPEpTT046OlZhbHVlPiYmIHZhbHVlKQogewotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHJl
c3VsdDsKLSAgICBib29sIGNhc3RTdWNjZWVkZWQgPSB2YWx1ZS0+YXNPYmplY3QocmVzdWx0KTsK
LSAgICBBU1NFUlRfVU5VU0VEKGNhc3RTdWNjZWVkZWQsIGNhc3RTdWNjZWVkZWQpOwotICAgIEJp
bmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0Pjo6
YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUocmVzdWx0LmdldCgpKTsKLSAgICBDT01QSUxFX0FT
U0VSVChzaXplb2YoSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0KSA9
PSBzaXplb2YoSlNPTjo6T2JqZWN0QmFzZSksIHR5cGVfY2FzdF9wcm9ibGVtKTsKLSAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0
Kj4oc3RhdGljX2Nhc3Q8SlNPTjo6T2JqZWN0QmFzZSo+KHJlc3VsdC5nZXQoKSkpOworICAgIGF1
dG8gcmVzdWx0ID0gdmFsdWUtPmFzT2JqZWN0KCk7CisgICAgQmluZGluZ1RyYWl0czxQcm90b2Nv
bDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0Pjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUocmVz
dWx0LmdldCgpKTsKKyAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoUHJvdG9jb2w6OlRlc3Q6OlR5
cGVOZWVkaW5nQ2FzdCkgPT0gc2l6ZW9mKEpTT046Ok9iamVjdEJhc2UpLCB0eXBlX2Nhc3RfcHJv
YmxlbSk7CisgICAgcmV0dXJuIHN0YXRpY19yZWZlcmVuY2VfY2FzdDxQcm90b2NvbDo6VGVzdDo6
VHlwZU5lZWRpbmdDYXN0PihzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8SlNPTjo6T2JqZWN0QmFzZT4o
cmVzdWx0LnJlbGVhc2VOb25OdWxsKCkpKTsKIH0KIAogCi12b2lkIEJpbmRpbmdUcmFpdHM8SW5z
cGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0MT46OmFzc2VydFZhbHVlSGFz
RXhwZWN0ZWRUeXBlKEpTT046OlZhbHVlKiB2YWx1ZSkKK3ZvaWQgQmluZGluZ1RyYWl0czxQcm90
b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0MT46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBl
KEpTT046OlZhbHVlKiB2YWx1ZSkKIHsKKyAgICBBU1NFUlRfVU5VU0VEKHZhbHVlLCB2YWx1ZSk7
CiAjaWYgQVNTRVJUX0VOQUJMRUQKLSAgICBBU1NFUlRfQVJHKHZhbHVlLCB2YWx1ZSk7Ci0gICAg
UmVmUHRyPEpTT046Ok9iamVjdD4gb2JqZWN0OwotICAgIGJvb2wgY2FzdFN1Y2NlZWRlZCA9IHZh
bHVlLT5hc09iamVjdChvYmplY3QpOwotICAgIEFTU0VSVF9VTlVTRUQoY2FzdFN1Y2NlZWRlZCwg
Y2FzdFN1Y2NlZWRlZCk7CisgICAgYXV0byBvYmplY3QgPSB2YWx1ZS0+YXNPYmplY3QoKTsKKyAg
ICBBU1NFUlQob2JqZWN0KTsKIAotICAgIGludCBmb3VuZFByb3BlcnRpZXNDb3VudCA9IDA7Cisg
ICAgc2l6ZV90IGZvdW5kUHJvcGVydGllc0NvdW50ID0gMDsKICAgICB7CiAgICAgICAgIGF1dG8g
b2JqUG9zID0gb2JqZWN0LT5maW5kKCJvYmoiX3MpOwogICAgICAgICBpZiAob2JqUG9zICE9IG9i
amVjdC0+ZW5kKCkpIHsKLSAgICAgICAgICAgIEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90
b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0Mj46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBl
KG9ialBvcy0+dmFsdWUuZ2V0KCkpOworICAgICAgICAgICAgQmluZGluZ1RyYWl0czxQcm90b2Nv
bDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0Mj46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKG9i
alBvcy0+dmFsdWUucHRyKCkpOwogICAgICAgICAgICAgKytmb3VuZFByb3BlcnRpZXNDb3VudDsK
ICAgICAgICAgfQogICAgIH0KICAgICBpZiAoZm91bmRQcm9wZXJ0aWVzQ291bnQgIT0gb2JqZWN0
LT5zaXplKCkpCiAgICAgICAgIEZBVEFMKCJVbmV4cGVjdGVkIHByb3BlcnRpZXMgaW4gb2JqZWN0
OiAlc1xuIiwgb2JqZWN0LT50b0pTT05TdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSk7Ci0jZWxzZSAv
LyBBU1NFUlRfRU5BQkxFRAotICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7Ci0jZW5kaWYgLy8gQVNT
RVJUX0VOQUJMRUQKKyNlbmRpZgogfQogCi12b2lkIEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0Mj46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRU
eXBlKEpTT046OlZhbHVlKiB2YWx1ZSkKK3ZvaWQgQmluZGluZ1RyYWl0czxQcm90b2NvbDo6VGVz
dDo6UmVjdXJzaXZlT2JqZWN0Mj46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKEpTT046OlZh
bHVlKiB2YWx1ZSkKIHsKKyAgICBBU1NFUlRfVU5VU0VEKHZhbHVlLCB2YWx1ZSk7CiAjaWYgQVNT
RVJUX0VOQUJMRUQKLSAgICBBU1NFUlRfQVJHKHZhbHVlLCB2YWx1ZSk7Ci0gICAgUmVmUHRyPEpT
T046Ok9iamVjdD4gb2JqZWN0OwotICAgIGJvb2wgY2FzdFN1Y2NlZWRlZCA9IHZhbHVlLT5hc09i
amVjdChvYmplY3QpOwotICAgIEFTU0VSVF9VTlVTRUQoY2FzdFN1Y2NlZWRlZCwgY2FzdFN1Y2Nl
ZWRlZCk7CisgICAgYXV0byBvYmplY3QgPSB2YWx1ZS0+YXNPYmplY3QoKTsKKyAgICBBU1NFUlQo
b2JqZWN0KTsKIAotICAgIGludCBmb3VuZFByb3BlcnRpZXNDb3VudCA9IDA7CisgICAgc2l6ZV90
IGZvdW5kUHJvcGVydGllc0NvdW50ID0gMDsKICAgICB7CiAgICAgICAgIGF1dG8gb2JqUG9zID0g
b2JqZWN0LT5maW5kKCJvYmoiX3MpOwogICAgICAgICBpZiAob2JqUG9zICE9IG9iamVjdC0+ZW5k
KCkpIHsKLSAgICAgICAgICAgIEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVz
dDo6UmVjdXJzaXZlT2JqZWN0MT46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKG9ialBvcy0+
dmFsdWUuZ2V0KCkpOworICAgICAgICAgICAgQmluZGluZ1RyYWl0czxQcm90b2NvbDo6VGVzdDo6
UmVjdXJzaXZlT2JqZWN0MT46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKG9ialBvcy0+dmFs
dWUucHRyKCkpOwogICAgICAgICAgICAgKytmb3VuZFByb3BlcnRpZXNDb3VudDsKICAgICAgICAg
fQogICAgIH0KICAgICBpZiAoZm91bmRQcm9wZXJ0aWVzQ291bnQgIT0gb2JqZWN0LT5zaXplKCkp
CiAgICAgICAgIEZBVEFMKCJVbmV4cGVjdGVkIHByb3BlcnRpZXMgaW4gb2JqZWN0OiAlc1xuIiwg
b2JqZWN0LT50b0pTT05TdHJpbmcoKS5hc2NpaSgpLmRhdGEoKSk7Ci0jZWxzZSAvLyBBU1NFUlRf
RU5BQkxFRAotICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7Ci0jZW5kaWYgLy8gQVNTRVJUX0VOQUJM
RUQKKyNlbmRpZgogfQogCiB9IC8vIG5hbWVzcGFjZSBQcm90b2NvbApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUt
d2l0aC1vcGVuLXBhcmFtZXRlcnMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS13aXRoLW9wZW4tcGFyYW1ldGVy
cy5qc29uLXJlc3VsdAppbmRleCA3ZDU3NzYyYThmZjhiZTRhOWFlNDlkYzllZjU0N2I5ZDMyMTNk
YzdiLi5iOTg0Y2IwN2MyYjM3NTUxYTFmNzdjMjNiMDk0MDYyMjkxNmVlNWUxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQv
dHlwZS13aXRoLW9wZW4tcGFyYW1ldGVycy5qc29uLXJlc3VsdAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS13aXRoLW9wZW4t
cGFyYW1ldGVycy5qc29uLXJlc3VsdApAQCAtNjMsNyArNjMsNyBAQAogCiAjaWYgRU5BQkxFKElO
U1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xU
eXBlcy5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgogI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CiAKQEAgLTExOSwxMSArMTE5LDE0
IEBAIHByaXZhdGU6CiAKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRl
IDx0dXBsZT4KKyNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9u
YWwuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3Bl
Y3RvciB7CiAKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCiAKIAogCkBAIC0xNjQsOSAr
MTY3LDcgQEAgdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiAjaW5jbHVkZSAiVGVzdEJhY2tl
bmREaXNwYXRjaGVycy5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJv
bnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgogI2luY2x1ZGUgPHd0
Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogI2lm
IEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogI2luY2x1ZGUgIlRlc3RB
bHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKQEAgLTIxNCw2ICsyMTUsNyBAQCBuYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKIAogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNs
dWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKQEAgLTI1
Nyw3ICsyNTksNiBAQCBjbGFzcyBGcm9udGVuZFJvdXRlcjsKICNpbmNsdWRlICJUZXN0RnJvbnRl
bmREaXNwYXRjaGVycy5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJv
bnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKIG5hbWVzcGFj
ZSBJbnNwZWN0b3IgewogCkBAIC0yOTgsNyArMjk5LDkgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7
CiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3Rv
Y29sVHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9K
U09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC0zMjAsNyArMzIz
LDcgQEAgY2xhc3MgT3BlblBhcmFtZXRlcnM7CiAKIG5hbWVzcGFjZSBUZXN0IHsKIAotY2xhc3Mg
Tm9PcGVuUGFyYW1ldGVycyA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKK2NsYXNzIE5vT3Bl
blBhcmFtZXRlcnMgZmluYWwgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7CiBwdWJsaWM6CiAg
ICAgZW51bSB7CiAgICAgICAgIE5vRmllbGRzU2V0ID0gMCwKQEAgLTM0NywxNyArMzUwLDE3IEBA
IHB1YmxpYzoKICAgICAgICAgZnJpZW5kIGNsYXNzIE5vT3BlblBhcmFtZXRlcnM7CiAgICAgcHVi
bGljOgogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBPbmVTZXQ+JiBzZXRPbmUoZG91YmxlIHZh
bHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRFIHwgT25lU2V0PiYgc2V0T25lKGRvdWJsZSBpbl9v
bmUpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBPbmVT
ZXQpLCBwcm9wZXJ0eV9vbmVfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNl
dERvdWJsZSgib25lIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0RG91Ymxl
KCJvbmUiX3MsIGluX29uZSk7CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE9uZVNldD4o
KTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBUd29TZXQ+JiBzZXRUd28o
ZG91YmxlIHZhbHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVHdvU2V0PiYgc2V0VHdvKGRv
dWJsZSBpbl90d28pCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RB
VEUgJiBUd29TZXQpLCBwcm9wZXJ0eV90d29fYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9y
ZXN1bHQtPnNldERvdWJsZSgidHdvIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+
c2V0RG91YmxlKCJ0d28iX3MsIGluX3R3byk7CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRl
PFR3b1NldD4oKTsKICAgICAgICAgfQogCkBAIC0zODUsNyArMzg4LDcgQEAgcHVibGljOgogICAg
IH0KIH07CiAKLWNsYXNzIE9wZW5QYXJhbWV0ZXJzIDogcHVibGljIEpTT046Ok9iamVjdCB7Citj
bGFzcyBPcGVuUGFyYW1ldGVycyBmaW5hbCA6IHB1YmxpYyBKU09OOjpPYmplY3QgewogcHVibGlj
OgogICAgIGVudW0gewogICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCkBAIC00MTIsMTcgKzQxNSwx
NyBAQCBwdWJsaWM6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBPcGVuUGFyYW1ldGVyczsKICAgICBw
dWJsaWM6CiAKLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IEFscGhhU2V0PiYgc2V0QWxwaGEoZG91
YmxlIHZhbHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQWxwaGFTZXQ+JiBzZXRBbHBoYShk
b3VibGUgaW5fYWxwaGEpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEo
U1RBVEUgJiBBbHBoYVNldCksIHByb3BlcnR5X2FscGhhX2FscmVhZHlfc2V0KTsKLSAgICAgICAg
ICAgIG1fcmVzdWx0LT5zZXREb3VibGUoImFscGhhIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICBt
X3Jlc3VsdC0+c2V0RG91YmxlKCJhbHBoYSJfcywgaW5fYWxwaGEpOwogICAgICAgICAgICAgcmV0
dXJuIGNhc3RTdGF0ZTxBbHBoYVNldD4oKTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCBCZXRhU2V0PiYgc2V0QmV0YShkb3VibGUgdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCBCZXRhU2V0PiYgc2V0QmV0YShkb3VibGUgaW5fYmV0YSkKICAgICAgICAgewogICAg
ICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEJldGFTZXQpLCBwcm9wZXJ0eV9iZXRh
X2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXREb3VibGUoImJldGEiX3Ms
IHZhbHVlKTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXREb3VibGUoImJldGEiX3MsIGluX2Jl
dGEpOwogICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxCZXRhU2V0PigpOwogICAgICAgICB9
CiAKQEAgLTQ1MCw3ICs0NTMsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgLy8gUHJvcGVydHkg
bmFtZXMgZm9yIHR5cGUgZ2VuZXJhdGVkIGFzIG9wZW4uCi0gICAgTm9uZSBzdGF0aWMgY29uc3Qg
Y2hhciogQWxwaGE7CisgICAgTm9uZSBzdGF0aWMgY29uc3QgY2hhciogYWxwaGFLZXk7CiB9Owog
CiB9IC8vIFRlc3QKQEAgLTQ5NSwxNCArNDk4LDEzIEBAIHB1YmxpYzoKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAKLSNpbmNsdWRlIDx3dGYv
T3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3Rm
L0Fzc2VydGlvbnMuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKIG5hbWVzcGFjZSBQcm90
b2NvbCB7CiAKLWNvbnN0IGNoYXIqIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6Ok9wZW5QYXJh
bWV0ZXJzOjpBbHBoYSA9ICJhbHBoYSI7Citjb25zdCBjaGFyKiBQcm90b2NvbDo6VGVzdDo6T3Bl
blBhcmFtZXRlcnM6OmFscGhhS2V5ID0gImFscGhhIjsKIAogfSAvLyBuYW1lc3BhY2UgUHJvdG9j
b2wKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2V4cGVjdGVkL3ZlcnNpb24uanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdmVyc2lvbi5qc29uLXJlc3VsdApp
bmRleCBlZjc3OGEwNmM3ZjI1MTFmNmMyMzQxODY3MjU1MDU2ODM3ZmJmYTNmLi5jMDRhYjU5NzNl
NzY2MTIxZTZiZTg2OTk5ODU0MWQ1YTcxMjcyZThkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdmVyc2lvbi5qc29uLXJl
c3VsdAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
ZXhwZWN0ZWQvdmVyc2lvbi5qc29uLXJlc3VsdApAQCAtNjgsNyArNjgsNyBAQCBJbnNwZWN0b3JC
YWNrZW5kLmFjdGl2YXRlRG9tYWluKCJWZXJzaW9uRG9tYWluIiwgbnVsbCk7CiAKICNpZiBFTkFC
TEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIAotI2luY2x1ZGUgIlRlc3RQcm90
b2NvbFR5cGVzLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CiAjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KIApAQCAtMTI0LDExICsx
MjQsMTQgQEAgcHJpdmF0ZToKIAogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2lu
Y2x1ZGUgPHR1cGxlPgorI2luY2x1ZGUgPHd0Zi9FeHBlY3RlZC5oPgorI2luY2x1ZGUgPHd0Zi9P
cHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKIAotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKIAogCiAKQEAgLTE2
OSw5ICsxNzIsNyBAQCB0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKICNpbmNsdWRlICJUZXN0
QmFja2VuZERpc3BhdGNoZXJzLmgiCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CiAjaW5jbHVk
ZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgog
CiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAjaW5jbHVkZSAi
VGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgpAQCAtMjE5LDYgKzIyMCw3IEBAIG5h
bWVzcGFjZSBJbnNwZWN0b3IgewogCiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgog
I2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAj
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewpA
QCAtMjYyLDcgKzI2NCw2IEBAIGNsYXNzIEZyb250ZW5kUm91dGVyOwogI2luY2x1ZGUgIlRlc3RG
cm9udGVuZERpc3BhdGNoZXJzLmgiCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogbmFt
ZXNwYWNlIEluc3BlY3RvciB7CiAKQEAgLTMwMyw3ICszMDQsOSBAQCBuYW1lc3BhY2UgSW5zcGVj
dG9yIHsKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
UHJvdG9jb2xUeXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8
d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKQEAgLTM2Miw4
ICszNjUsNyBAQCBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIFZFUlNJT04gPSA0MjsKICNpbmNs
dWRlICJjb25maWcuaCIKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAKLSNpbmNs
dWRlIDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5j
bHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVTZXQuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVNldC5jcHAKaW5kZXggZDk5ZmYzMTFkYjc1NTRh
MmIwMTMwZDI3MjI0OWM3YjA0ZDA1YjhhNS4uNjVlYTM1NDU5YzQ0OTc4NDJiNThhYTNiNGQyYzE2
YWJjYzlmZTE1NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlw
ZVNldC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVNldC5jcHAK
QEAgLTUwMSwxNCArNTAxLDE0IEBAIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpT
dHJ1Y3R1cmVEZXNjcmlwdGlvbj4gU3RydWN0dXJlU2hhcGU6Omluc3BlY3RvCiAgICAgICAgIGZv
ciAoY29uc3QgYXV0byYgZmllbGQgOiBjdXJyZW50U2hhcGUtPm1fb3B0aW9uYWxGaWVsZHMpCiAg
ICAgICAgICAgICBvcHRpb25hbEZpZWxkcy0+YWRkSXRlbShmaWVsZC5nZXQoKSk7CiAKLSAgICAg
ICAgY3VycmVudE9iamVjdC0+c2V0RmllbGRzKCZmaWVsZHMuZ2V0KCkpOwotICAgICAgICBjdXJy
ZW50T2JqZWN0LT5zZXRPcHRpb25hbEZpZWxkcygmb3B0aW9uYWxGaWVsZHMuZ2V0KCkpOworICAg
ICAgICBjdXJyZW50T2JqZWN0LT5zZXRGaWVsZHMoV1RGTW92ZShmaWVsZHMpKTsKKyAgICAgICAg
Y3VycmVudE9iamVjdC0+c2V0T3B0aW9uYWxGaWVsZHMoV1RGTW92ZShvcHRpb25hbEZpZWxkcykp
OwogICAgICAgICBjdXJyZW50T2JqZWN0LT5zZXRDb25zdHJ1Y3Rvck5hbWUoY3VycmVudFNoYXBl
LT5tX2NvbnN0cnVjdG9yTmFtZSk7CiAgICAgICAgIGN1cnJlbnRPYmplY3QtPnNldElzSW1wcmVj
aXNlKGN1cnJlbnRTaGFwZS0+bV9pc0luRGljdGlvbmFyeU1vZGUpOwogCiAgICAgICAgIGlmIChj
dXJyZW50U2hhcGUtPm1fcHJvdG8pIHsKICAgICAgICAgICAgIGF1dG8gbmV4dE9iamVjdCA9IElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlN0cnVjdHVyZURlc2NyaXB0aW9uOjpjcmVhdGUo
KS5yZWxlYXNlKCk7Ci0gICAgICAgICAgICBjdXJyZW50T2JqZWN0LT5zZXRQcm90b3R5cGVTdHJ1
Y3R1cmUoJm5leHRPYmplY3QuZ2V0KCkpOworICAgICAgICAgICAgY3VycmVudE9iamVjdC0+c2V0
UHJvdG90eXBlU3RydWN0dXJlKG5leHRPYmplY3QuY29weVJlZigpKTsKICAgICAgICAgICAgIGN1
cnJlbnRPYmplY3QgPSBXVEZNb3ZlKG5leHRPYmplY3QpOwogICAgICAgICB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XVEYvd3RmL0pTT05WYWx1ZXMuY3BwIGIvU291cmNlL1dURi93dGYvSlNPTlZh
bHVlcy5jcHAKaW5kZXggNDA1MjA3OGYzZjk3YzJlOTBmYWNkMDUxZGMxOTJlYzY1MjYxNGMzNC4u
NDliM2YwY2EyZmYxZjhlNjlkMGM0ZjQzYWFhY2ZjYzZhYmRhNmI2MCAxMDA2NDQKLS0tIGEvU291
cmNlL1dURi93dGYvSlNPTlZhbHVlcy5jcHAKKysrIGIvU291cmNlL1dURi93dGYvSlNPTlZhbHVl
cy5jcHAKQEAgLTU3LDkgKzU3LDkgQEAgZW51bSBjbGFzcyBUb2tlbiB7CiAgICAgSW52YWxpZCwK
IH07CiAKLWNvbnN0IGNoYXIqIGNvbnN0IG51bGxTdHJpbmcgPSAibnVsbCI7Ci1jb25zdCBjaGFy
KiBjb25zdCB0cnVlU3RyaW5nID0gInRydWUiOwotY29uc3QgY2hhciogY29uc3QgZmFsc2VTdHJp
bmcgPSAiZmFsc2UiOworY29uc3QgY2hhciogY29uc3QgbnVsbFRva2VuID0gIm51bGwiOworY29u
c3QgY2hhciogY29uc3QgdHJ1ZVRva2VuID0gInRydWUiOworY29uc3QgY2hhciogY29uc3QgZmFs
c2VUb2tlbiA9ICJmYWxzZSI7CiAKIGJvb2wgcGFyc2VDb25zdFRva2VuKGNvbnN0IFVDaGFyKiBz
dGFydCwgY29uc3QgVUNoYXIqIGVuZCwgY29uc3QgVUNoYXIqKiB0b2tlbkVuZCwgY29uc3QgY2hh
ciogdG9rZW4pCiB7CkBAIC0yMDksMTUgKzIwOSwxNSBAQCBUb2tlbiBwYXJzZVRva2VuKGNvbnN0
IFVDaGFyKiBzdGFydCwgY29uc3QgVUNoYXIqIGVuZCwgY29uc3QgVUNoYXIqKiB0b2tlblN0YXJ0
LAogCiAgICAgc3dpdGNoICgqc3RhcnQpIHsKICAgICBjYXNlICduJzoKLSAgICAgICAgaWYgKHBh
cnNlQ29uc3RUb2tlbihzdGFydCwgZW5kLCB0b2tlbkVuZCwgbnVsbFN0cmluZykpCisgICAgICAg
IGlmIChwYXJzZUNvbnN0VG9rZW4oc3RhcnQsIGVuZCwgdG9rZW5FbmQsIG51bGxUb2tlbikpCiAg
ICAgICAgICAgICByZXR1cm4gVG9rZW46Ok51bGw7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
J3QnOgotICAgICAgICBpZiAocGFyc2VDb25zdFRva2VuKHN0YXJ0LCBlbmQsIHRva2VuRW5kLCB0
cnVlU3RyaW5nKSkKKyAgICAgICAgaWYgKHBhcnNlQ29uc3RUb2tlbihzdGFydCwgZW5kLCB0b2tl
bkVuZCwgdHJ1ZVRva2VuKSkKICAgICAgICAgICAgIHJldHVybiBUb2tlbjo6Qm9vbFRydWU7CiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgJ2YnOgotICAgICAgICBpZiAocGFyc2VDb25zdFRva2Vu
KHN0YXJ0LCBlbmQsIHRva2VuRW5kLCBmYWxzZVN0cmluZykpCisgICAgICAgIGlmIChwYXJzZUNv
bnN0VG9rZW4oc3RhcnQsIGVuZCwgdG9rZW5FbmQsIGZhbHNlVG9rZW4pKQogICAgICAgICAgICAg
cmV0dXJuIFRva2VuOjpCb29sRmFsc2U7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgJ1snOgpA
QCAtMzgwLDcgKzM4MCw3IEBAIFJlZlB0cjxKU09OOjpWYWx1ZT4gYnVpbGRWYWx1ZShjb25zdCBV
Q2hhciogc3RhcnQsIGNvbnN0IFVDaGFyKiBlbmQsIGNvbnN0IFVDaGFyCiAgICAgICAgICAgICBS
ZWZQdHI8SlNPTjo6VmFsdWU+IGFycmF5Tm9kZSA9IGJ1aWxkVmFsdWUoc3RhcnQsIGVuZCwgJnRv
a2VuRW5kLCBkZXB0aCArIDEpOwogICAgICAgICAgICAgaWYgKCFhcnJheU5vZGUpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgICAgICBhcnJheS0+cHVzaFZhbHVlKFdU
Rk1vdmUoYXJyYXlOb2RlKSk7CisgICAgICAgICAgICBhcnJheS0+cHVzaFZhbHVlKGFycmF5Tm9k
ZS5yZWxlYXNlTm9uTnVsbCgpKTsKIAogICAgICAgICAgICAgLy8gQWZ0ZXIgYSBsaXN0IHZhbHVl
LCB3ZSBleHBlY3QgYSBjb21tYSBvciB0aGUgZW5kIG9mIHRoZSBsaXN0LgogICAgICAgICAgICAg
c3RhcnQgPSB0b2tlbkVuZDsKQEAgLTQyMCw3ICs0MjAsNyBAQCBSZWZQdHI8SlNPTjo6VmFsdWU+
IGJ1aWxkVmFsdWUoY29uc3QgVUNoYXIqIHN0YXJ0LCBjb25zdCBVQ2hhciogZW5kLCBjb25zdCBV
Q2hhcgogICAgICAgICAgICAgUmVmUHRyPEpTT046OlZhbHVlPiB2YWx1ZSA9IGJ1aWxkVmFsdWUo
c3RhcnQsIGVuZCwgJnRva2VuRW5kLCBkZXB0aCArIDEpOwogICAgICAgICAgICAgaWYgKCF2YWx1
ZSkKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgICAgIG9iamVjdC0+
c2V0VmFsdWUoa2V5LCBXVEZNb3ZlKHZhbHVlKSk7CisgICAgICAgICAgICBvYmplY3QtPnNldFZh
bHVlKGtleSwgdmFsdWUucmVsZWFzZU5vbk51bGwoKSk7CiAgICAgICAgICAgICBzdGFydCA9IHRv
a2VuRW5kOwogCiAgICAgICAgICAgICAvLyBBZnRlciBhIGtleS92YWx1ZSBwYWlyLCB3ZSBleHBl
Y3QgYSBjb21tYSBvciB0aGUgZW5kIG9mIHRoZQpAQCAtNDg5LDQwICs0ODksMzggQEAgUmVmPFZh
bHVlPiBWYWx1ZTo6Y3JlYXRlKGNvbnN0IGNoYXIqIHZhbHVlKQogICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IFZhbHVlKHZhbHVlKSk7CiB9CiAKLWJvb2wgVmFsdWU6OmFzVmFsdWUoUmVmUHRyPFZh
bHVlPiYgdmFsdWUpCitSZWZQdHI8VmFsdWU+IFZhbHVlOjphc1ZhbHVlKCkKIHsKLSAgICB2YWx1
ZSA9IHRoaXM7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHRoaXM7CiB9CiAKLWJvb2wg
VmFsdWU6OmFzT2JqZWN0KFJlZlB0cjxPYmplY3Q+JikKK1JlZlB0cjxPYmplY3Q+IFZhbHVlOjph
c09iamVjdCgpCiB7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBudWxscHRyOwogfQog
Ci1ib29sIFZhbHVlOjphc0FycmF5KFJlZlB0cjxBcnJheT4mKQorUmVmUHRyPEFycmF5PiBWYWx1
ZTo6YXNBcnJheSgpCiB7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBudWxscHRyOwog
fQogCi1ib29sIFZhbHVlOjpwYXJzZUpTT04oY29uc3QgU3RyaW5nJiBqc29uSW5wdXQsIFJlZlB0
cjxWYWx1ZT4mIG91dHB1dCkKK1JlZlB0cjxWYWx1ZT4gVmFsdWU6OnBhcnNlSlNPTihjb25zdCBT
dHJpbmcmIGpzb24pCiB7CiAgICAgLy8gRklYTUU6IFRoaXMgd2hvbGUgZmlsZSBzaG91bGQganVz
dCB1c2UgU3RyaW5nVmlldyBpbnN0ZWFkIG9mIFVDaGFyL2xlbmd0aCBhbmQgYXZvaWQgdXBjb252
ZXJ0aW5nLgotICAgIGF1dG8gY2hhcmFjdGVycyA9IFN0cmluZ1ZpZXcoanNvbklucHV0KS51cGNv
bnZlcnRlZENoYXJhY3RlcnMoKTsKKyAgICBhdXRvIGNoYXJhY3RlcnMgPSBTdHJpbmdWaWV3KGpz
b24pLnVwY29udmVydGVkQ2hhcmFjdGVycygpOwogICAgIGNvbnN0IFVDaGFyKiBzdGFydCA9IGNo
YXJhY3RlcnM7Ci0gICAgY29uc3QgVUNoYXIqIGVuZCA9IHN0YXJ0ICsganNvbklucHV0Lmxlbmd0
aCgpOworICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBzdGFydCArIGpzb24ubGVuZ3RoKCk7CiAgICAg
Y29uc3QgVUNoYXIqIHRva2VuRW5kOwogICAgIGF1dG8gcmVzdWx0ID0gYnVpbGRWYWx1ZShzdGFy
dCwgZW5kLCAmdG9rZW5FbmQsIDApOwogICAgIGlmICghcmVzdWx0KQotICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgZm9yIChjb25zdCBVQ2hhciog
dmFsdWVFbmQgPSB0b2tlbkVuZDsgdmFsdWVFbmQgPCBlbmQ7ICsrdmFsdWVFbmQpIHsKICAgICAg
ICAgaWYgKCFpc1NwYWNlT3JOZXdsaW5lKCp2YWx1ZUVuZCkpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKLSAgICBvdXRwdXQg
PSBXVEZNb3ZlKHJlc3VsdCk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIAogdm9pZCBWYWx1ZTo6ZXNjYXBlU3RyaW5nKFN0cmluZ0J1aWxkZXImIGJ1aWxkZXIsIFN0
cmluZ1ZpZXcgc3RyaW5nKQpAQCAtNTczLDk0ICs1NzEsMzIgQEAgU3RyaW5nIFZhbHVlOjp0b0pT
T05TdHJpbmcoKSBjb25zdAogICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKIH0KIAotYm9v
bCBWYWx1ZTo6YXNCb29sZWFuKGJvb2wmIG91dHB1dCkgY29uc3QKK09wdGlvbmFsPGJvb2w+IFZh
bHVlOjphc0Jvb2xlYW4oKSBjb25zdAogewogICAgIGlmICh0eXBlKCkgIT0gVHlwZTo6Qm9vbGVh
bikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgb3V0cHV0ID0gbV92YWx1ZS5ib29sZWFu
OwotICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHJl
dHVybiBtX3ZhbHVlLmJvb2xlYW47CiB9CiAKLWJvb2wgVmFsdWU6OmFzRG91YmxlKGRvdWJsZSYg
b3V0cHV0KSBjb25zdAorT3B0aW9uYWw8ZG91YmxlPiBWYWx1ZTo6YXNEb3VibGUoKSBjb25zdAog
ewotICAgIGlmICh0eXBlKCkgIT0gVHlwZTo6RG91YmxlKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBvdXRwdXQgPSBtX3ZhbHVlLm51bWJlcjsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBp
ZiAodHlwZSgpICE9IFR5cGU6OkRvdWJsZSAmJiB0eXBlKCkgIT0gVHlwZTo6SW50ZWdlcikKKyAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICByZXR1cm4gbV92YWx1ZS5udW1iZXI7CiB9
CiAKLWJvb2wgVmFsdWU6OmFzRG91YmxlKGZsb2F0JiBvdXRwdXQpIGNvbnN0CitPcHRpb25hbDxp
bnQ+IFZhbHVlOjphc0ludGVnZXIoKSBjb25zdAogewotICAgIGlmICh0eXBlKCkgIT0gVHlwZTo6
RG91YmxlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBvdXRwdXQgPSBzdGF0aWNfY2Fz
dDxmbG9hdD4obV92YWx1ZS5udW1iZXIpOwotICAgIHJldHVybiB0cnVlOworICAgIGlmICh0eXBl
KCkgIT0gVHlwZTo6RG91YmxlICYmIHR5cGUoKSAhPSBUeXBlOjpJbnRlZ2VyKQorICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KG1fdmFsdWUu
bnVtYmVyKTsKIH0KIAotYm9vbCBWYWx1ZTo6YXNJbnRlZ2VyKGludCYgb3V0cHV0KSBjb25zdAot
ewotICAgIGlmICh0eXBlKCkgIT0gVHlwZTo6SW50ZWdlciAmJiB0eXBlKCkgIT0gVHlwZTo6RG91
YmxlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBvdXRwdXQgPSBzdGF0aWNfY2FzdDxp
bnQ+KG1fdmFsdWUubnVtYmVyKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBWYWx1ZTo6
YXNJbnRlZ2VyKHVuc2lnbmVkJiBvdXRwdXQpIGNvbnN0Ci17Ci0gICAgaWYgKHR5cGUoKSAhPSBU
eXBlOjpJbnRlZ2VyICYmIHR5cGUoKSAhPSBUeXBlOjpEb3VibGUpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIG91dHB1dCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX3ZhbHVlLm51bWJl
cik7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgVmFsdWU6OmFzSW50ZWdlcihsb25nJiBv
dXRwdXQpIGNvbnN0Ci17Ci0gICAgaWYgKHR5cGUoKSAhPSBUeXBlOjpJbnRlZ2VyICYmIHR5cGUo
KSAhPSBUeXBlOjpEb3VibGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIG91dHB1dCA9
IHN0YXRpY19jYXN0PGxvbmc+KG1fdmFsdWUubnVtYmVyKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotYm9vbCBWYWx1ZTo6YXNJbnRlZ2VyKGxvbmcgbG9uZyYgb3V0cHV0KSBjb25zdAotewotICAg
IGlmICh0eXBlKCkgIT0gVHlwZTo6SW50ZWdlciAmJiB0eXBlKCkgIT0gVHlwZTo6RG91YmxlKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBvdXRwdXQgPSBzdGF0aWNfY2FzdDxsb25nIGxv
bmc+KG1fdmFsdWUubnVtYmVyKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBWYWx1ZTo6
YXNJbnRlZ2VyKHVuc2lnbmVkIGxvbmcmIG91dHB1dCkgY29uc3QKLXsKLSAgICBpZiAodHlwZSgp
ICE9IFR5cGU6OkludGVnZXIgJiYgdHlwZSgpICE9IFR5cGU6OkRvdWJsZSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgb3V0cHV0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4obV92
YWx1ZS5udW1iZXIpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFZhbHVlOjphc0ludGVn
ZXIodW5zaWduZWQgbG9uZyBsb25nJiBvdXRwdXQpIGNvbnN0Ci17Ci0gICAgaWYgKHR5cGUoKSAh
PSBUeXBlOjpJbnRlZ2VyICYmIHR5cGUoKSAhPSBUeXBlOjpEb3VibGUpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIG91dHB1dCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4o
bV92YWx1ZS5udW1iZXIpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFZhbHVlOjphc1N0
cmluZyhTdHJpbmcmIG91dHB1dCkgY29uc3QKK1N0cmluZyBWYWx1ZTo6YXNTdHJpbmcoKSBjb25z
dAogewogICAgIGlmICh0eXBlKCkgIT0gVHlwZTo6U3RyaW5nKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBvdXRwdXQgPSBtX3ZhbHVlLnN0cmluZzsKLSAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgcmV0dXJuIG51bGxTdHJpbmcoKTsKKyAgICByZXR1cm4gbV92YWx1ZS5zdHJpbmc7CiB9
CiAKIHZvaWQgVmFsdWU6OndyaXRlSlNPTihTdHJpbmdCdWlsZGVyJiBvdXRwdXQpIGNvbnN0CkBA
IC03MDMsNzYgKzYzOSw3NCBAQCBPYmplY3RCYXNlOjp+T2JqZWN0QmFzZSgpCiB7CiB9CiAKLWJv
b2wgT2JqZWN0QmFzZTo6YXNPYmplY3QoUmVmUHRyPE9iamVjdD4mIG91dHB1dCkKK1JlZlB0cjxP
YmplY3Q+IE9iamVjdEJhc2U6OmFzT2JqZWN0KCkKIHsKICAgICBDT01QSUxFX0FTU0VSVChzaXpl
b2YoT2JqZWN0KSA9PSBzaXplb2YoT2JqZWN0QmFzZSksIGNhbm5vdF9jYXN0KTsKLQotICAgIG91
dHB1dCA9IHN0YXRpY19jYXN0PE9iamVjdCo+KHRoaXMpOwotICAgIHJldHVybiB0cnVlOwotfQot
Ci1PYmplY3QqIE9iamVjdEJhc2U6Om9wZW5BY2Nlc3NvcnMoKQotewotICAgIENPTVBJTEVfQVNT
RVJUKHNpemVvZihPYmplY3QpID09IHNpemVvZihPYmplY3RCYXNlKSwgY2Fubm90X2Nhc3QpOwot
CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PE9iamVjdCo+KHRoaXMpOwogfQogCiBzaXplX3QgT2Jq
ZWN0QmFzZTo6bWVtb3J5Q29zdCgpIGNvbnN0CiB7CiAgICAgc2l6ZV90IG1lbW9yeUNvc3QgPSBW
YWx1ZTo6bWVtb3J5Q29zdCgpOwotICAgIGZvciAoY29uc3QgYXV0byYgZW50cnkgOiBtX21hcCkg
ewotICAgICAgICBtZW1vcnlDb3N0ICs9IGVudHJ5LmtleS5zaXplSW5CeXRlcygpOwotICAgICAg
ICBpZiAoZW50cnkudmFsdWUpCi0gICAgICAgICAgICBtZW1vcnlDb3N0ICs9IGVudHJ5LnZhbHVl
LT5tZW1vcnlDb3N0KCk7Ci0gICAgfQorICAgIGZvciAoY29uc3QgYXV0byYgZW50cnkgOiBtX21h
cCkKKyAgICAgICAgbWVtb3J5Q29zdCArPSBlbnRyeS5rZXkuc2l6ZUluQnl0ZXMoKSArIGVudHJ5
LnZhbHVlLT5tZW1vcnlDb3N0KCk7CiAgICAgcmV0dXJuIG1lbW9yeUNvc3Q7CiB9CiAKLWJvb2wg
T2JqZWN0QmFzZTo6Z2V0Qm9vbGVhbihjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wmIG91dHB1dCkg
Y29uc3QKK09wdGlvbmFsPGJvb2w+IE9iamVjdEJhc2U6OmdldEJvb2xlYW4oY29uc3QgU3RyaW5n
JiBuYW1lKSBjb25zdAogewotICAgIFJlZlB0cjxWYWx1ZT4gdmFsdWU7Ci0gICAgaWYgKCFnZXRW
YWx1ZShuYW1lLCB2YWx1ZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB2
YWx1ZS0+YXNCb29sZWFuKG91dHB1dCk7CisgICAgYXV0byB2YWx1ZSA9IGdldFZhbHVlKG5hbWUp
OworICAgIGlmICghdmFsdWUpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgcmV0
dXJuIHZhbHVlLT5hc0Jvb2xlYW4oKTsKIH0KIAotYm9vbCBPYmplY3RCYXNlOjpnZXRTdHJpbmco
Y29uc3QgU3RyaW5nJiBuYW1lLCBTdHJpbmcmIG91dHB1dCkgY29uc3QKK09wdGlvbmFsPGRvdWJs
ZT4gT2JqZWN0QmFzZTo6Z2V0RG91YmxlKGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3QKIHsKLSAg
ICBSZWZQdHI8VmFsdWU+IHZhbHVlOwotICAgIGlmICghZ2V0VmFsdWUobmFtZSwgdmFsdWUpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gdmFsdWUtPmFzU3RyaW5nKG91dHB1
dCk7CisgICAgYXV0byB2YWx1ZSA9IGdldFZhbHVlKG5hbWUpOworICAgIGlmICghdmFsdWUpCisg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgcmV0dXJuIHZhbHVlLT5hc0RvdWJsZSgp
OwogfQogCi1ib29sIE9iamVjdEJhc2U6OmdldE9iamVjdChjb25zdCBTdHJpbmcmIG5hbWUsIFJl
ZlB0cjxPYmplY3Q+JiBvdXRwdXQpIGNvbnN0CitPcHRpb25hbDxpbnQ+IE9iamVjdEJhc2U6Omdl
dEludGVnZXIoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdAogewotICAgIFJlZlB0cjxWYWx1ZT4g
dmFsdWU7Ci0gICAgaWYgKCFnZXRWYWx1ZShuYW1lLCB2YWx1ZSkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIHJldHVybiB2YWx1ZS0+YXNPYmplY3Qob3V0cHV0KTsKKyAgICBhdXRvIHZh
bHVlID0gZ2V0VmFsdWUobmFtZSk7CisgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKKyAgICByZXR1cm4gdmFsdWUtPmFzSW50ZWdlcigpOwogfQogCi1ib29sIE9i
amVjdEJhc2U6OmdldEFycmF5KGNvbnN0IFN0cmluZyYgbmFtZSwgUmVmUHRyPEFycmF5PiYgb3V0
cHV0KSBjb25zdAorU3RyaW5nIE9iamVjdEJhc2U6OmdldFN0cmluZyhjb25zdCBTdHJpbmcmIG5h
bWUpIGNvbnN0CiB7Ci0gICAgUmVmUHRyPFZhbHVlPiB2YWx1ZTsKLSAgICBpZiAoIWdldFZhbHVl
KG5hbWUsIHZhbHVlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHZhbHVl
LT5hc0FycmF5KG91dHB1dCk7CisgICAgYXV0byB2YWx1ZSA9IGdldFZhbHVlKG5hbWUpOworICAg
IGlmICghdmFsdWUpCisgICAgICAgIHJldHVybiBudWxsU3RyaW5nKCk7CisgICAgcmV0dXJuIHZh
bHVlLT5hc1N0cmluZygpOwogfQogCi1ib29sIE9iamVjdEJhc2U6OmdldFZhbHVlKGNvbnN0IFN0
cmluZyYgbmFtZSwgUmVmUHRyPFZhbHVlPiYgb3V0cHV0KSBjb25zdAorUmVmUHRyPE9iamVjdD4g
T2JqZWN0QmFzZTo6Z2V0T2JqZWN0KGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3QKIHsKLSAgICBE
aWN0aW9uYXJ5Ojpjb25zdF9pdGVyYXRvciBmaW5kUmVzdWx0ID0gbV9tYXAuZmluZChuYW1lKTsK
KyAgICBhdXRvIHZhbHVlID0gZ2V0VmFsdWUobmFtZSk7CisgICAgaWYgKCF2YWx1ZSkKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIHZhbHVlLT5hc09iamVjdCgpOworfQorCitS
ZWZQdHI8QXJyYXk+IE9iamVjdEJhc2U6OmdldEFycmF5KGNvbnN0IFN0cmluZyYgbmFtZSkgY29u
c3QKK3sKKyAgICBhdXRvIHZhbHVlID0gZ2V0VmFsdWUobmFtZSk7CisgICAgaWYgKCF2YWx1ZSkK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIHZhbHVlLT5hc0FycmF5KCk7Cit9
CisKK1JlZlB0cjxWYWx1ZT4gT2JqZWN0QmFzZTo6Z2V0VmFsdWUoY29uc3QgU3RyaW5nJiBuYW1l
KSBjb25zdAoreworICAgIGF1dG8gZmluZFJlc3VsdCA9IG1fbWFwLmZpbmQobmFtZSk7CiAgICAg
aWYgKGZpbmRSZXN1bHQgPT0gbV9tYXAuZW5kKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIG91dHB1dCA9IGZpbmRSZXN1bHQtPnZhbHVlOwotICAgIHJldHVybiB0cnVlOworICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gZmluZFJlc3VsdC0+dmFsdWUuY29weVJlZigp
OwogfQogCiB2b2lkIE9iamVjdEJhc2U6OnJlbW92ZShjb25zdCBTdHJpbmcmIG5hbWUpCkBAIC03
OTgsOCArNzMyLDYgQEAgdm9pZCBPYmplY3RCYXNlOjp3cml0ZUpTT04oU3RyaW5nQnVpbGRlciYg
b3V0cHV0KSBjb25zdAogCiBPYmplY3RCYXNlOjpPYmplY3RCYXNlKCkKICAgICA6IFZhbHVlKFR5
cGU6Ok9iamVjdCkKLSAgICAsIG1fbWFwKCkKLSAgICAsIG1fb3JkZXIoKQogewogfQogCkBAIC04
MDcsMTcgKzczOSwxNiBAQCBBcnJheUJhc2U6On5BcnJheUJhc2UoKQogewogfQogCi1ib29sIEFy
cmF5QmFzZTo6YXNBcnJheShSZWZQdHI8QXJyYXk+JiBvdXRwdXQpCitSZWZQdHI8QXJyYXk+IEFy
cmF5QmFzZTo6YXNBcnJheSgpCiB7CiAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKEFycmF5QmFz
ZSkgPT0gc2l6ZW9mKEFycmF5KSwgY2Fubm90X2Nhc3QpOwotICAgIG91dHB1dCA9IHN0YXRpY19j
YXN0PEFycmF5Kj4odGhpcyk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHN0YXRpY19j
YXN0PEFycmF5Kj4odGhpcyk7CiB9CiAKIHZvaWQgQXJyYXlCYXNlOjp3cml0ZUpTT04oU3RyaW5n
QnVpbGRlciYgb3V0cHV0KSBjb25zdAogewogICAgIG91dHB1dC5hcHBlbmQoJ1snKTsKLSAgICBm
b3IgKFZlY3RvcjxSZWZQdHI8VmFsdWU+Pjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX21hcC5iZWdp
bigpOyBpdCAhPSBtX21hcC5lbmQoKTsgKytpdCkgeworICAgIGZvciAoYXV0byBpdCA9IG1fbWFw
LmJlZ2luKCk7IGl0ICE9IG1fbWFwLmVuZCgpOyArK2l0KSB7CiAgICAgICAgIGlmIChpdCAhPSBt
X21hcC5iZWdpbigpKQogICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgnLCcpOwogICAgICAgICAo
Kml0KS0+d3JpdGVKU09OKG91dHB1dCk7CkBAIC04MjcsMTEgKzc1OCwxMCBAQCB2b2lkIEFycmF5
QmFzZTo6d3JpdGVKU09OKFN0cmluZ0J1aWxkZXImIG91dHB1dCkgY29uc3QKIAogQXJyYXlCYXNl
OjpBcnJheUJhc2UoKQogICAgIDogVmFsdWUoVHlwZTo6QXJyYXkpCi0gICAgLCBtX21hcCgpCiB7
CiB9CiAKLVJlZlB0cjxWYWx1ZT4gQXJyYXlCYXNlOjpnZXQoc2l6ZV90IGluZGV4KSBjb25zdAor
UmVmPFZhbHVlPiBBcnJheUJhc2U6OmdldChzaXplX3QgaW5kZXgpIGNvbnN0CiB7CiAgICAgUkVM
RUFTRV9BU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihpbmRleCA8IG1fbWFwLnNpemUo
KSk7CiAgICAgcmV0dXJuIG1fbWFwW2luZGV4XTsKQEAgLTg1MCwxMCArNzgwLDggQEAgUmVmPEFy
cmF5PiBBcnJheTo6Y3JlYXRlKCkKIHNpemVfdCBBcnJheUJhc2U6Om1lbW9yeUNvc3QoKSBjb25z
dAogewogICAgIHNpemVfdCBtZW1vcnlDb3N0ID0gVmFsdWU6Om1lbW9yeUNvc3QoKTsKLSAgICBm
b3IgKGNvbnN0IGF1dG8mIGl0ZW0gOiBtX21hcCkgewotICAgICAgICBpZiAoaXRlbSkKLSAgICAg
ICAgICAgIG1lbW9yeUNvc3QgKz0gaXRlbS0+bWVtb3J5Q29zdCgpOwotICAgIH0KKyAgICBmb3Ig
KGNvbnN0IGF1dG8mIGl0ZW0gOiBtX21hcCkKKyAgICAgICAgbWVtb3J5Q29zdCArPSBpdGVtLT5t
ZW1vcnlDb3N0KCk7CiAgICAgcmV0dXJuIG1lbW9yeUNvc3Q7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XVEYvd3RmL0pTT05WYWx1ZXMuaCBiL1NvdXJjZS9XVEYvd3RmL0pTT05WYWx1ZXMuaApp
bmRleCBlYmFiYzQ0OWY4ODBiMzlkM2ZhZGU3OGNkNjFiMWM0ZDVlMGU2ODYzLi40MzA3NDUzZDlj
YzhmODhjYzE2OTljZDg4NTcyMTY4NzdmZGM5YjA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0
Zi9KU09OVmFsdWVzLmgKKysrIGIvU291cmNlL1dURi93dGYvSlNPTlZhbHVlcy5oCkBAIC05Miwy
MiArOTIsMTUgQEAgcHVibGljOgogICAgIFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlw
ZTsgfQogICAgIGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1cm4gbV90eXBlID09IFR5cGU6Ok51
bGw7IH0KIAotICAgIGJvb2wgYXNCb29sZWFuKGJvb2wmKSBjb25zdDsKLSAgICBib29sIGFzSW50
ZWdlcihpbnQmKSBjb25zdDsKLSAgICBib29sIGFzSW50ZWdlcih1bnNpZ25lZCYpIGNvbnN0Owot
ICAgIGJvb2wgYXNJbnRlZ2VyKGxvbmcmKSBjb25zdDsKLSAgICBib29sIGFzSW50ZWdlcihsb25n
IGxvbmcmKSBjb25zdDsKLSAgICBib29sIGFzSW50ZWdlcih1bnNpZ25lZCBsb25nJikgY29uc3Q7
Ci0gICAgYm9vbCBhc0ludGVnZXIodW5zaWduZWQgbG9uZyBsb25nJikgY29uc3Q7Ci0gICAgYm9v
bCBhc0RvdWJsZShkb3VibGUmKSBjb25zdDsKLSAgICBib29sIGFzRG91YmxlKGZsb2F0JikgY29u
c3Q7Ci0gICAgYm9vbCBhc1N0cmluZyhTdHJpbmcmKSBjb25zdDsKLSAgICBib29sIGFzVmFsdWUo
UmVmUHRyPFZhbHVlPiYpOworICAgIE9wdGlvbmFsPGJvb2w+IGFzQm9vbGVhbigpIGNvbnN0Owor
ICAgIE9wdGlvbmFsPGludD4gYXNJbnRlZ2VyKCkgY29uc3Q7CisgICAgT3B0aW9uYWw8ZG91Ymxl
PiBhc0RvdWJsZSgpIGNvbnN0OworICAgIFN0cmluZyBhc1N0cmluZygpIGNvbnN0OworICAgIFJl
ZlB0cjxWYWx1ZT4gYXNWYWx1ZSgpOworICAgIHZpcnR1YWwgUmVmUHRyPE9iamVjdD4gYXNPYmpl
Y3QoKTsKKyAgICB2aXJ0dWFsIFJlZlB0cjxBcnJheT4gYXNBcnJheSgpOwogCi0gICAgdmlydHVh
bCBib29sIGFzT2JqZWN0KFJlZlB0cjxPYmplY3Q+Jik7Ci0gICAgdmlydHVhbCBib29sIGFzQXJy
YXkoUmVmUHRyPEFycmF5PiYpOwotCi0gICAgc3RhdGljIGJvb2wgcGFyc2VKU09OKGNvbnN0IFN0
cmluZyYganNvbklucHV0LCBSZWZQdHI8VmFsdWU+JiBvdXRwdXQpOworICAgIHN0YXRpYyBSZWZQ
dHI8VmFsdWU+IHBhcnNlSlNPTihjb25zdCBTdHJpbmcmKTsKICAgICBzdGF0aWMgdm9pZCBlc2Nh
cGVTdHJpbmcoU3RyaW5nQnVpbGRlciYsIFN0cmluZ1ZpZXcpOwogCiAgICAgU3RyaW5nIHRvSlNP
TlN0cmluZygpIGNvbnN0OwpAQCAtMTcyLDk1ICsxNjUsNjMgQEAgcHJpdmF0ZToKIAogY2xhc3Mg
V1RGX0VYUE9SVF9QUklWQVRFIE9iamVjdEJhc2UgOiBwdWJsaWMgVmFsdWUgewogcHJpdmF0ZToK
LSAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8VmFsdWU+PiBEaWN0aW9uYXJ5Owor
ICAgIHVzaW5nIERhdGFTdG9yYWdlID0gSGFzaE1hcDxTdHJpbmcsIFJlZjxWYWx1ZT4+OworICAg
IHVzaW5nIE9yZGVyU3RvcmFnZSA9IFZlY3RvcjxTdHJpbmc+OwogCiBwdWJsaWM6Ci0gICAgdHlw
ZWRlZiBEaWN0aW9uYXJ5OjppdGVyYXRvciBpdGVyYXRvcjsKLSAgICB0eXBlZGVmIERpY3Rpb25h
cnk6OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOworICAgIHVzaW5nIGl0ZXJhdG9yID0g
RGF0YVN0b3JhZ2U6Oml0ZXJhdG9yOworICAgIHVzaW5nIGNvbnN0X2l0ZXJhdG9yID0gRGF0YVN0
b3JhZ2U6OmNvbnN0X2l0ZXJhdG9yOwogCi0gICAgT2JqZWN0KiBvcGVuQWNjZXNzb3JzKCk7Cisg
ICAgUmVmUHRyPE9iamVjdD4gYXNPYmplY3QoKSBmaW5hbDsKIAogICAgIHNpemVfdCBtZW1vcnlD
b3N0KCkgY29uc3QgZmluYWw7CiAKIHByb3RlY3RlZDoKICAgICB+T2JqZWN0QmFzZSgpIG92ZXJy
aWRlOwogCi0gICAgYm9vbCBhc09iamVjdChSZWZQdHI8T2JqZWN0PiYgb3V0cHV0KSBvdmVycmlk
ZTsKLQogICAgIC8vIEZJWE1FOiB1c2UgdGVtcGxhdGVzIHRvIHJlZHVjZSB0aGUgYW1vdW50IG9m
IGR1cGxpY2F0ZWQgc2V0KigpIG1ldGhvZHMuCiAgICAgdm9pZCBzZXRCb29sZWFuKGNvbnN0IFN0
cmluZyYgbmFtZSwgYm9vbCk7CiAgICAgdm9pZCBzZXRJbnRlZ2VyKGNvbnN0IFN0cmluZyYgbmFt
ZSwgaW50KTsKICAgICB2b2lkIHNldERvdWJsZShjb25zdCBTdHJpbmcmIG5hbWUsIGRvdWJsZSk7
CiAgICAgdm9pZCBzZXRTdHJpbmcoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmKTsK
LSAgICB2b2lkIHNldFZhbHVlKGNvbnN0IFN0cmluZyYgbmFtZSwgUmVmUHRyPFZhbHVlPiYmKTsK
LSAgICB2b2lkIHNldE9iamVjdChjb25zdCBTdHJpbmcmIG5hbWUsIFJlZlB0cjxPYmplY3RCYXNl
PiYmKTsKLSAgICB2b2lkIHNldEFycmF5KGNvbnN0IFN0cmluZyYgbmFtZSwgUmVmUHRyPEFycmF5
QmFzZT4mJik7CisgICAgdm9pZCBzZXRWYWx1ZShjb25zdCBTdHJpbmcmIG5hbWUsIFJlZjxWYWx1
ZT4mJik7CisgICAgdm9pZCBzZXRPYmplY3QoY29uc3QgU3RyaW5nJiBuYW1lLCBSZWY8T2JqZWN0
QmFzZT4mJik7CisgICAgdm9pZCBzZXRBcnJheShjb25zdCBTdHJpbmcmIG5hbWUsIFJlZjxBcnJh
eUJhc2U+JiYpOwogCiAgICAgaXRlcmF0b3IgZmluZChjb25zdCBTdHJpbmcmIG5hbWUpOwogICAg
IGNvbnN0X2l0ZXJhdG9yIGZpbmQoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdDsKIAotICAgIC8v
IEZJWE1FOiB1c2UgdGVtcGxhdGVzIHRvIHJlZHVjZSB0aGUgYW1vdW50IG9mIGR1cGxpY2F0ZWQg
Z2V0KigpIG1ldGhvZHMuCi0gICAgYm9vbCBnZXRCb29sZWFuKGNvbnN0IFN0cmluZyYgbmFtZSwg
Ym9vbCYgb3V0cHV0KSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBUPiBib29sIGdldERvdWJs
ZShjb25zdCBTdHJpbmcmIG5hbWUsIFQmIG91dHB1dCkgY29uc3QKLSAgICB7Ci0gICAgICAgIFJl
ZlB0cjxWYWx1ZT4gdmFsdWU7Ci0gICAgICAgIGlmICghZ2V0VmFsdWUobmFtZSwgdmFsdWUpKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIHJldHVybiB2YWx1ZS0+YXNEb3Vi
bGUob3V0cHV0KTsKLSAgICB9Ci0gICAgdGVtcGxhdGU8Y2xhc3MgVD4gYm9vbCBnZXRJbnRlZ2Vy
KGNvbnN0IFN0cmluZyYgbmFtZSwgVCYgb3V0cHV0KSBjb25zdAotICAgIHsKLSAgICAgICAgUmVm
UHRyPFZhbHVlPiB2YWx1ZTsKLSAgICAgICAgaWYgKCFnZXRWYWx1ZShuYW1lLCB2YWx1ZSkpCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgcmV0dXJuIHZhbHVlLT5hc0ludGVn
ZXIob3V0cHV0KTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTxjbGFzcyBUPiBPcHRpb25hbDxUPiBn
ZXROdW1iZXIoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdAotICAgIHsKLSAgICAgICAgUmVmUHRy
PFZhbHVlPiB2YWx1ZTsKLSAgICAgICAgaWYgKCFnZXRWYWx1ZShuYW1lLCB2YWx1ZSkpCi0gICAg
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgICAgIFQgcmVzdWx0OwotICAgICAg
ICBpZiAoIXZhbHVlLT5hc0RvdWJsZShyZXN1bHQpKQotICAgICAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKLQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLQotICAgIGJvb2wgZ2V0
U3RyaW5nKGNvbnN0IFN0cmluZyYgbmFtZSwgU3RyaW5nJiBvdXRwdXQpIGNvbnN0OwotICAgIGJv
b2wgZ2V0T2JqZWN0KGNvbnN0IFN0cmluZyYgbmFtZSwgUmVmUHRyPE9iamVjdD4mKSBjb25zdDsK
LSAgICBib29sIGdldEFycmF5KGNvbnN0IFN0cmluZyYgbmFtZSwgUmVmUHRyPEFycmF5PiYpIGNv
bnN0OwotICAgIGJvb2wgZ2V0VmFsdWUoY29uc3QgU3RyaW5nJiBuYW1lLCBSZWZQdHI8VmFsdWU+
JikgY29uc3Q7CisgICAgT3B0aW9uYWw8Ym9vbD4gZ2V0Qm9vbGVhbihjb25zdCBTdHJpbmcmIG5h
bWUpIGNvbnN0OworICAgIE9wdGlvbmFsPGRvdWJsZT4gZ2V0RG91YmxlKGNvbnN0IFN0cmluZyYg
bmFtZSkgY29uc3Q7CisgICAgT3B0aW9uYWw8aW50PiBnZXRJbnRlZ2VyKGNvbnN0IFN0cmluZyYg
bmFtZSkgY29uc3Q7CisgICAgU3RyaW5nIGdldFN0cmluZyhjb25zdCBTdHJpbmcmIG5hbWUpIGNv
bnN0OworICAgIFJlZlB0cjxPYmplY3Q+IGdldE9iamVjdChjb25zdCBTdHJpbmcmIG5hbWUpIGNv
bnN0OworICAgIFJlZlB0cjxBcnJheT4gZ2V0QXJyYXkoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25z
dDsKKyAgICBSZWZQdHI8VmFsdWU+IGdldFZhbHVlKGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3Q7
CiAKICAgICB2b2lkIHJlbW92ZShjb25zdCBTdHJpbmcmIG5hbWUpOwogCi0gICAgdm9pZCB3cml0
ZUpTT04oU3RyaW5nQnVpbGRlciYgb3V0cHV0KSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIHdy
aXRlSlNPTihTdHJpbmdCdWlsZGVyJiBvdXRwdXQpIGNvbnN0IGZpbmFsOwogCiAgICAgaXRlcmF0
b3IgYmVnaW4oKSB7IHJldHVybiBtX21hcC5iZWdpbigpOyB9CiAgICAgaXRlcmF0b3IgZW5kKCkg
eyByZXR1cm4gbV9tYXAuZW5kKCk7IH0KICAgICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0
IHsgcmV0dXJuIG1fbWFwLmJlZ2luKCk7IH0KICAgICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25z
dCB7IHJldHVybiBtX21hcC5lbmQoKTsgfQogCi0gICAgaW50IHNpemUoKSBjb25zdCB7IHJldHVy
biBtX21hcC5zaXplKCk7IH0KKyAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9t
YXAuc2l6ZSgpOyB9CiAKIHByb3RlY3RlZDoKICAgICBPYmplY3RCYXNlKCk7CiAKIHByaXZhdGU6
Ci0gICAgRGljdGlvbmFyeSBtX21hcDsKLSAgICBWZWN0b3I8U3RyaW5nPiBtX29yZGVyOworICAg
IERhdGFTdG9yYWdlIG1fbWFwOworICAgIE9yZGVyU3RvcmFnZSBtX29yZGVyOwogfTsKIAogY2xh
c3MgT2JqZWN0IDogcHVibGljIE9iamVjdEJhc2UgewogcHVibGljOgogICAgIHN0YXRpYyBXVEZf
RVhQT1JUX1BSSVZBVEUgUmVmPE9iamVjdD4gY3JlYXRlKCk7CiAKLSAgICB1c2luZyBPYmplY3RC
YXNlOjphc09iamVjdDsKLQogICAgIC8vIFRoaXMgY2xhc3MgZXhwZWN0ZWQgbm9uLWN5Y2xpYyB2
YWx1ZXMsIGFzIHdlIGNhbm5vdCBzZXJpYWxpemUgY3ljbGVzIGluIEpTT04uCiAgICAgdXNpbmcg
T2JqZWN0QmFzZTo6c2V0Qm9vbGVhbjsKICAgICB1c2luZyBPYmplY3RCYXNlOjpzZXRJbnRlZ2Vy
OwpAQCAtMjc0LDcgKzIzNSw2IEBAIHB1YmxpYzoKICAgICB1c2luZyBPYmplY3RCYXNlOjpnZXRC
b29sZWFuOwogICAgIHVzaW5nIE9iamVjdEJhc2U6OmdldEludGVnZXI7CiAgICAgdXNpbmcgT2Jq
ZWN0QmFzZTo6Z2V0RG91YmxlOwotICAgIHVzaW5nIE9iamVjdEJhc2U6OmdldE51bWJlcjsKICAg
ICB1c2luZyBPYmplY3RCYXNlOjpnZXRTdHJpbmc7CiAgICAgdXNpbmcgT2JqZWN0QmFzZTo6Z2V0
T2JqZWN0OwogICAgIHVzaW5nIE9iamVjdEJhc2U6OmdldEFycmF5OwpAQCAtMjkwLDQ5ICsyNTAs
NDkgQEAgcHVibGljOgogCiAKIGNsYXNzIFdURl9FWFBPUlRfUFJJVkFURSBBcnJheUJhc2UgOiBw
dWJsaWMgVmFsdWUgeworcHJpdmF0ZToKKyAgICB1c2luZyBEYXRhU3RvcmFnZSA9IFZlY3RvcjxS
ZWY8VmFsdWU+PjsKKwogcHVibGljOgotICAgIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxWYWx1ZT4+
OjppdGVyYXRvciBpdGVyYXRvcjsKLSAgICB0eXBlZGVmIFZlY3RvcjxSZWZQdHI8VmFsdWU+Pjo6
Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CisgICAgdXNpbmcgaXRlcmF0b3IgPSBEYXRh
U3RvcmFnZTo6aXRlcmF0b3I7CisgICAgdXNpbmcgY29uc3RfaXRlcmF0b3IgPSBEYXRhU3RvcmFn
ZTo6Y29uc3RfaXRlcmF0b3I7CiAKLSAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7IHJldHVy
biBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9tYXAuc2l6ZSgpKTsgfQorICAgIHNpemVfdCBsZW5n
dGgoKSBjb25zdCB7IHJldHVybiBtX21hcC5zaXplKCk7IH0KIAotICAgIFJlZlB0cjxWYWx1ZT4g
Z2V0KHNpemVfdCBpbmRleCkgY29uc3Q7CisgICAgUmVmPFZhbHVlPiBnZXQoc2l6ZV90IGluZGV4
KSBjb25zdDsKIAogICAgIHNpemVfdCBtZW1vcnlDb3N0KCkgY29uc3QgZmluYWw7CiAKKyAgICBS
ZWZQdHI8QXJyYXk+IGFzQXJyYXkoKSBmaW5hbDsKKwogcHJvdGVjdGVkOgogICAgIH5BcnJheUJh
c2UoKSBvdmVycmlkZTsKIAotICAgIGJvb2wgYXNBcnJheShSZWZQdHI8QXJyYXk+Jikgb3ZlcnJp
ZGU7Ci0KICAgICB2b2lkIHB1c2hCb29sZWFuKGJvb2wpOwogICAgIHZvaWQgcHVzaEludGVnZXIo
aW50KTsKICAgICB2b2lkIHB1c2hEb3VibGUoZG91YmxlKTsKICAgICB2b2lkIHB1c2hTdHJpbmco
Y29uc3QgU3RyaW5nJik7Ci0gICAgdm9pZCBwdXNoVmFsdWUoUmVmUHRyPFZhbHVlPiYmKTsKLSAg
ICB2b2lkIHB1c2hPYmplY3QoUmVmUHRyPE9iamVjdEJhc2U+JiYpOwotICAgIHZvaWQgcHVzaEFy
cmF5KFJlZlB0cjxBcnJheUJhc2U+JiYpOwotCi0gICAgdm9pZCB3cml0ZUpTT04oU3RyaW5nQnVp
bGRlciYgb3V0cHV0KSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIHB1c2hWYWx1ZShSZWY8VmFs
dWU+JiYpOworICAgIHZvaWQgcHVzaE9iamVjdChSZWY8T2JqZWN0QmFzZT4mJik7CisgICAgdm9p
ZCBwdXNoQXJyYXkoUmVmPEFycmF5QmFzZT4mJik7CiAKICAgICBpdGVyYXRvciBiZWdpbigpIHsg
cmV0dXJuIG1fbWFwLmJlZ2luKCk7IH0KICAgICBpdGVyYXRvciBlbmQoKSB7IHJldHVybiBtX21h
cC5lbmQoKTsgfQogICAgIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gbV9t
YXAuYmVnaW4oKTsgfQogICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1f
bWFwLmVuZCgpOyB9CisgICAgdm9pZCB3cml0ZUpTT04oU3RyaW5nQnVpbGRlciYgb3V0cHV0KSBj
b25zdCBmaW5hbDsKIAogcHJvdGVjdGVkOgogICAgIEFycmF5QmFzZSgpOwogCiBwcml2YXRlOgot
ICAgIFZlY3RvcjxSZWZQdHI8VmFsdWU+PiBtX21hcDsKKyAgICBEYXRhU3RvcmFnZSBtX21hcDsK
IH07CiAKLWNsYXNzIEFycmF5IDogcHVibGljIEFycmF5QmFzZSB7CitjbGFzcyBBcnJheSBmaW5h
bCA6IHB1YmxpYyBBcnJheUJhc2UgewogcHVibGljOgogICAgIHN0YXRpYyBXVEZfRVhQT1JUX1BS
SVZBVEUgUmVmPEFycmF5PiBjcmVhdGUoKTsKIAotICAgIHVzaW5nIEFycmF5QmFzZTo6YXNBcnJh
eTsKLQogICAgIC8vIFRoaXMgY2xhc3MgZXhwZWN0ZWQgbm9uLWN5Y2xpYyB2YWx1ZXMsIGFzIHdl
IGNhbm5vdCBzZXJpYWxpemUgY3ljbGVzIGluIEpTT04uCiAgICAgdXNpbmcgQXJyYXlCYXNlOjpw
dXNoQm9vbGVhbjsKICAgICB1c2luZyBBcnJheUJhc2U6OnB1c2hJbnRlZ2VyOwpAQCAtMzQ4LDcg
KzMwOCw2IEBAIHB1YmxpYzoKICAgICB1c2luZyBBcnJheUJhc2U6OmVuZDsKIH07CiAKLQogaW5s
aW5lIE9iamVjdEJhc2U6Oml0ZXJhdG9yIE9iamVjdEJhc2U6OmZpbmQoY29uc3QgU3RyaW5nJiBu
YW1lKQogewogICAgIHJldHVybiBtX21hcC5maW5kKG5hbWUpOwpAQCAtMzc5LDIzICszMzgsMjAg
QEAgaW5saW5lIHZvaWQgT2JqZWN0QmFzZTo6c2V0U3RyaW5nKGNvbnN0IFN0cmluZyYgbmFtZSwg
Y29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICBzZXRWYWx1ZShuYW1lLCBWYWx1ZTo6Y3JlYXRlKHZh
bHVlKSk7CiB9CiAKLWlubGluZSB2b2lkIE9iamVjdEJhc2U6OnNldFZhbHVlKGNvbnN0IFN0cmlu
ZyYgbmFtZSwgUmVmUHRyPFZhbHVlPiYmIHZhbHVlKQoraW5saW5lIHZvaWQgT2JqZWN0QmFzZTo6
c2V0VmFsdWUoY29uc3QgU3RyaW5nJiBuYW1lLCBSZWY8VmFsdWU+JiYgdmFsdWUpCiB7Ci0gICAg
QVNTRVJUKHZhbHVlKTsKICAgICBpZiAobV9tYXAuc2V0KG5hbWUsIFdURk1vdmUodmFsdWUpKS5p
c05ld0VudHJ5KQogICAgICAgICBtX29yZGVyLmFwcGVuZChuYW1lKTsKIH0KIAotaW5saW5lIHZv
aWQgT2JqZWN0QmFzZTo6c2V0T2JqZWN0KGNvbnN0IFN0cmluZyYgbmFtZSwgUmVmUHRyPE9iamVj
dEJhc2U+JiYgdmFsdWUpCitpbmxpbmUgdm9pZCBPYmplY3RCYXNlOjpzZXRPYmplY3QoY29uc3Qg
U3RyaW5nJiBuYW1lLCBSZWY8T2JqZWN0QmFzZT4mJiB2YWx1ZSkKIHsKLSAgICBBU1NFUlQodmFs
dWUpOwogICAgIGlmIChtX21hcC5zZXQobmFtZSwgV1RGTW92ZSh2YWx1ZSkpLmlzTmV3RW50cnkp
CiAgICAgICAgIG1fb3JkZXIuYXBwZW5kKG5hbWUpOwogfQogCi1pbmxpbmUgdm9pZCBPYmplY3RC
YXNlOjpzZXRBcnJheShjb25zdCBTdHJpbmcmIG5hbWUsIFJlZlB0cjxBcnJheUJhc2U+JiYgdmFs
dWUpCitpbmxpbmUgdm9pZCBPYmplY3RCYXNlOjpzZXRBcnJheShjb25zdCBTdHJpbmcmIG5hbWUs
IFJlZjxBcnJheUJhc2U+JiYgdmFsdWUpCiB7Ci0gICAgQVNTRVJUKHZhbHVlKTsKICAgICBpZiAo
bV9tYXAuc2V0KG5hbWUsIFdURk1vdmUodmFsdWUpKS5pc05ld0VudHJ5KQogICAgICAgICBtX29y
ZGVyLmFwcGVuZChuYW1lKTsKIH0KQEAgLTQyMCwyNiArMzc2LDIzIEBAIGlubGluZSB2b2lkIEFy
cmF5QmFzZTo6cHVzaFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgIG1fbWFwLmFwcGVu
ZChWYWx1ZTo6Y3JlYXRlKHZhbHVlKSk7CiB9CiAKLWlubGluZSB2b2lkIEFycmF5QmFzZTo6cHVz
aFZhbHVlKFJlZlB0cjxWYWx1ZT4mJiB2YWx1ZSkKK2lubGluZSB2b2lkIEFycmF5QmFzZTo6cHVz
aFZhbHVlKFJlZjxWYWx1ZT4mJiB2YWx1ZSkKIHsKLSAgICBBU1NFUlQodmFsdWUpOwogICAgIG1f
bWFwLmFwcGVuZChXVEZNb3ZlKHZhbHVlKSk7CiB9CiAKLWlubGluZSB2b2lkIEFycmF5QmFzZTo6
cHVzaE9iamVjdChSZWZQdHI8T2JqZWN0QmFzZT4mJiB2YWx1ZSkKK2lubGluZSB2b2lkIEFycmF5
QmFzZTo6cHVzaE9iamVjdChSZWY8T2JqZWN0QmFzZT4mJiB2YWx1ZSkKIHsKLSAgICBBU1NFUlQo
dmFsdWUpOwogICAgIG1fbWFwLmFwcGVuZChXVEZNb3ZlKHZhbHVlKSk7CiB9CiAKLWlubGluZSB2
b2lkIEFycmF5QmFzZTo6cHVzaEFycmF5KFJlZlB0cjxBcnJheUJhc2U+JiYgdmFsdWUpCitpbmxp
bmUgdm9pZCBBcnJheUJhc2U6OnB1c2hBcnJheShSZWY8QXJyYXlCYXNlPiYmIHZhbHVlKQogewot
ICAgIEFTU0VSVCh2YWx1ZSk7CiAgICAgbV9tYXAuYXBwZW5kKFdURk1vdmUodmFsdWUpKTsKIH0K
IAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KLWNsYXNzIEFycmF5T2YgOiBwdWJsaWMgQXJyYXlCYXNl
IHsKK2NsYXNzIEFycmF5T2YgZmluYWwgOiBwdWJsaWMgQXJyYXlCYXNlIHsKIHByaXZhdGU6CiAg
ICAgQXJyYXlPZigpIHsgfQogCkBAIC00NTAsNyArNDAzLDcgQEAgcHJpdmF0ZToKICAgICB9CiAK
IHB1YmxpYzoKLSAgICB2b2lkIGFkZEl0ZW0oUmVmUHRyPFQ+JiYgdmFsdWUpCisgICAgdm9pZCBh
ZGRJdGVtKFJlZjxUPiYmIHZhbHVlKQogICAgIHsKICAgICAgICAgY2FzdGVkQXJyYXkoKS5wdXNo
VmFsdWUoV1RGTW92ZSh2YWx1ZSkpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvYXBwbGljYXRpb25tYW5pZmVzdC9BcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXBwbGljYXRpb25tYW5pZmVzdC9BcHBsaWNhdGlv
bk1hbmlmZXN0UGFyc2VyLmNwcAppbmRleCA4ZGM3NmZhMmU1OWVhNjdlMDIxNzM4YzMxMWEzNTc3
ZjRkMzZlNjkxLi5mODhjYWRhNjYwZjM5YWRlZmEwMDZkMDk1ZWM1ODdmYjI5MzQ2MjBmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FwcGxpY2F0aW9ubWFuaWZlc3QvQXBwbGlj
YXRpb25NYW5pZmVzdFBhcnNlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBs
aWNhdGlvbm1hbmlmZXN0L0FwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXIuY3BwCkBAIC01NCwxNCAr
NTQsMTQgQEAgQXBwbGljYXRpb25NYW5pZmVzdCBBcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyOjpw
YXJzZU1hbmlmZXN0KGNvbnN0IFN0cmluZyYgdGV4dCwKIHsKICAgICBtX21hbmlmZXN0VVJMID0g
bWFuaWZlc3RVUkw7CiAKLSAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IGpzb25WYWx1ZTsKLSAgICBp
ZiAoIUpTT046OlZhbHVlOjpwYXJzZUpTT04odGV4dCwganNvblZhbHVlKSkgeworICAgIGF1dG8g
anNvblZhbHVlID0gSlNPTjo6VmFsdWU6OnBhcnNlSlNPTih0ZXh0KTsKKyAgICBpZiAoIWpzb25W
YWx1ZSkgewogICAgICAgICBsb2dEZXZlbG9wZXJXYXJuaW5nKCJUaGUgbWFuaWZlc3QgaXMgbm90
IHZhbGlkIEpTT04gZGF0YS4iX3MpOwogICAgICAgICBqc29uVmFsdWUgPSBKU09OOjpPYmplY3Q6
OmNyZWF0ZSgpOwogICAgIH0KIAotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG1hbmlmZXN0Owot
ICAgIGlmICghanNvblZhbHVlLT5hc09iamVjdChtYW5pZmVzdCkpIHsKKyAgICBhdXRvIG1hbmlm
ZXN0ID0ganNvblZhbHVlLT5hc09iamVjdCgpOworICAgIGlmICghbWFuaWZlc3QpIHsKICAgICAg
ICAgbG9nRGV2ZWxvcGVyV2FybmluZygiVGhlIG1hbmlmZXN0IGlzIG5vdCBhIEpTT04gdmFsdWUg
b2YgdHlwZSBcIm9iamVjdFwiLiJfcyk7CiAgICAgICAgIG1hbmlmZXN0ID0gSlNPTjo6T2JqZWN0
OjpjcmVhdGUoKTsKICAgICB9CkBAIC05NiwxMiArOTYsMTIgQEAgdm9pZCBBcHBsaWNhdGlvbk1h
bmlmZXN0UGFyc2VyOjpsb2dEZXZlbG9wZXJXYXJuaW5nKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkK
IAogVVJMIEFwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXI6OnBhcnNlU3RhcnRVUkwoY29uc3QgSlNP
Tjo6T2JqZWN0JiBtYW5pZmVzdCwgY29uc3QgVVJMJiBkb2N1bWVudFVSTCkKIHsKLSAgICBSZWZQ
dHI8SlNPTjo6VmFsdWU+IHZhbHVlOwotICAgIGlmICghbWFuaWZlc3QuZ2V0VmFsdWUoInN0YXJ0
X3VybCIsIHZhbHVlKSkKKyAgICBhdXRvIHZhbHVlID0gbWFuaWZlc3QuZ2V0VmFsdWUoInN0YXJ0
X3VybCJfcyk7CisgICAgaWYgKCF2YWx1ZSkKICAgICAgICAgcmV0dXJuIGRvY3VtZW50VVJMOwog
Ci0gICAgU3RyaW5nIHN0cmluZ1ZhbHVlOwotICAgIGlmICghdmFsdWUtPmFzU3RyaW5nKHN0cmlu
Z1ZhbHVlKSkgeworICAgIGF1dG8gc3RyaW5nVmFsdWUgPSB2YWx1ZS0+YXNTdHJpbmcoKTsKKyAg
ICBpZiAoIXN0cmluZ1ZhbHVlKSB7CiAgICAgICAgIGxvZ01hbmlmZXN0UHJvcGVydHlOb3RBU3Ry
aW5nKCJzdGFydF91cmwiX3MpOwogICAgICAgICByZXR1cm4gZG9jdW1lbnRVUkw7CiAgICAgfQpA
QCAtMTI3LDEyICsxMjcsMTIgQEAgVVJMIEFwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXI6OnBhcnNl
U3RhcnRVUkwoY29uc3QgSlNPTjo6T2JqZWN0JiBtYW5pZmVzdCwgY29uc3QKIAogQXBwbGljYXRp
b25NYW5pZmVzdDo6RGlzcGxheSBBcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyOjpwYXJzZURpc3Bs
YXkoY29uc3QgSlNPTjo6T2JqZWN0JiBtYW5pZmVzdCkKIHsKLSAgICBSZWZQdHI8SlNPTjo6VmFs
dWU+IHZhbHVlOwotICAgIGlmICghbWFuaWZlc3QuZ2V0VmFsdWUoImRpc3BsYXkiX3MsIHZhbHVl
KSkKKyAgICBhdXRvIHZhbHVlID0gbWFuaWZlc3QuZ2V0VmFsdWUoImRpc3BsYXkiX3MpOworICAg
IGlmICghdmFsdWUpCiAgICAgICAgIHJldHVybiBBcHBsaWNhdGlvbk1hbmlmZXN0OjpEaXNwbGF5
OjpCcm93c2VyOwogCi0gICAgU3RyaW5nIHN0cmluZ1ZhbHVlOwotICAgIGlmICghdmFsdWUtPmFz
U3RyaW5nKHN0cmluZ1ZhbHVlKSkgeworICAgIGF1dG8gc3RyaW5nVmFsdWUgPSB2YWx1ZS0+YXNT
dHJpbmcoKTsKKyAgICBpZiAoIXN0cmluZ1ZhbHVlKSB7CiAgICAgICAgIGxvZ01hbmlmZXN0UHJv
cGVydHlOb3RBU3RyaW5nKCJkaXNwbGF5Il9zKTsKICAgICAgICAgcmV0dXJuIEFwcGxpY2F0aW9u
TWFuaWZlc3Q6OkRpc3BsYXk6OkJyb3dzZXI7CiAgICAgfQpAQCAtMTk1LDEyICsxOTUsMTIgQEAg
VVJMIEFwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXI6OnBhcnNlU2NvcGUoY29uc3QgSlNPTjo6T2Jq
ZWN0JiBtYW5pZmVzdCwgY29uc3QgVVIKIHsKICAgICBVUkwgZGVmYXVsdFNjb3BlIHsgc3RhcnRV
UkwsICIuLyIgfTsKIAotICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gdmFsdWU7Ci0gICAgaWYgKCFt
YW5pZmVzdC5nZXRWYWx1ZSgic2NvcGUiLCB2YWx1ZSkpCisgICAgYXV0byB2YWx1ZSA9IG1hbmlm
ZXN0LmdldFZhbHVlKCJzY29wZSIpOworICAgIGlmICghdmFsdWUpCiAgICAgICAgIHJldHVybiBk
ZWZhdWx0U2NvcGU7CiAKLSAgICBTdHJpbmcgc3RyaW5nVmFsdWU7Ci0gICAgaWYgKCF2YWx1ZS0+
YXNTdHJpbmcoc3RyaW5nVmFsdWUpKSB7CisgICAgYXV0byBzdHJpbmdWYWx1ZSA9IHZhbHVlLT5h
c1N0cmluZygpOworICAgIGlmICghc3RyaW5nVmFsdWUpIHsKICAgICAgICAgbG9nTWFuaWZlc3RQ
cm9wZXJ0eU5vdEFTdHJpbmcoInNjb3BlIl9zKTsKICAgICAgICAgcmV0dXJuIGRlZmF1bHRTY29w
ZTsKICAgICB9CkBAIC0yMzEsMTIgKzIzMSwxMiBAQCBVUkwgQXBwbGljYXRpb25NYW5pZmVzdFBh
cnNlcjo6cGFyc2VTY29wZShjb25zdCBKU09OOjpPYmplY3QmIG1hbmlmZXN0LCBjb25zdCBVUgog
CiBTdHJpbmcgQXBwbGljYXRpb25NYW5pZmVzdFBhcnNlcjo6cGFyc2VHZW5lcmljU3RyaW5nKGNv
bnN0IEpTT046Ok9iamVjdCYgbWFuaWZlc3QsIGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKQog
ewotICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gdmFsdWU7Ci0gICAgaWYgKCFtYW5pZmVzdC5nZXRW
YWx1ZShwcm9wZXJ0eU5hbWUsIHZhbHVlKSkKKyAgICBhdXRvIHZhbHVlID0gbWFuaWZlc3QuZ2V0
VmFsdWUocHJvcGVydHlOYW1lKTsKKyAgICBpZiAoIXZhbHVlKQogICAgICAgICByZXR1cm4geyB9
OwogCi0gICAgU3RyaW5nIHN0cmluZ1ZhbHVlOwotICAgIGlmICghdmFsdWUtPmFzU3RyaW5nKHN0
cmluZ1ZhbHVlKSkgeworICAgIGF1dG8gc3RyaW5nVmFsdWUgPSB2YWx1ZS0+YXNTdHJpbmcoKTsK
KyAgICBpZiAoIXN0cmluZ1ZhbHVlKSB7CiAgICAgICAgIGxvZ01hbmlmZXN0UHJvcGVydHlOb3RB
U3RyaW5nKHByb3BlcnR5TmFtZSk7CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9Jbml0RGF0YVJlZ2lz
dHJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW5jcnlwdGVkbWVkaWEvSW5pdERhdGFS
ZWdpc3RyeS5jcHAKaW5kZXggM2IyNWQwNmIxMjNhMWE1MWEwYTJhY2ZiNGY2NTZmOGQ5NGFkYjNm
Yy4uNmFiMmY4NzhhM2Y4Y2E5OGU4MmIwZTQyZTVmMGJhYWEyMjhiMWM1YyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9Jbml0RGF0YVJlZ2lzdHJ5LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL0luaXREYXRhUmVn
aXN0cnkuY3BwCkBAIC02MiwyMiArNjIsMjIgQEAgc3RhdGljIE9wdGlvbmFsPFZlY3RvcjxSZWY8
U2hhcmVkQnVmZmVyPj4+IGV4dHJhY3RLZXlJRHNLZXlpZHMoY29uc3QgU2hhcmVkQnVmZmUKICAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICBTdHJpbmcganNvbiB7IGJ1ZmZlci5kYXRh
KCksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihidWZmZXIuc2l6ZSgpKSB9OwogCi0gICAgUmVmUHRy
PEpTT046OlZhbHVlPiB2YWx1ZTsKLSAgICBpZiAoIUpTT046OlZhbHVlOjpwYXJzZUpTT04oanNv
biwgdmFsdWUpKQorICAgIGF1dG8gdmFsdWUgPSBKU09OOjpWYWx1ZTo6cGFyc2VKU09OKGpzb24p
OworICAgIGlmICghdmFsdWUpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBS
ZWZQdHI8SlNPTjo6T2JqZWN0PiBvYmplY3Q7Ci0gICAgaWYgKCF2YWx1ZS0+YXNPYmplY3Qob2Jq
ZWN0KSkKKyAgICBhdXRvIG9iamVjdCA9IHZhbHVlLT5hc09iamVjdCgpOworICAgIGlmICghb2Jq
ZWN0KQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgUmVmUHRyPEpTT046OkFy
cmF5PiBraWRzQXJyYXk7Ci0gICAgaWYgKCFvYmplY3QtPmdldEFycmF5KCJraWRzIiwga2lkc0Fy
cmF5KSkKKyAgICBhdXRvIGtpZHNBcnJheSA9IG9iamVjdC0+Z2V0QXJyYXkoImtpZHMiX3MpOwor
ICAgIGlmICgha2lkc0FycmF5KQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAg
VmVjdG9yPFJlZjxTaGFyZWRCdWZmZXI+PiBrZXlJRHM7CiAgICAgZm9yIChhdXRvJiB2YWx1ZSA6
ICpraWRzQXJyYXkpIHsKLSAgICAgICAgU3RyaW5nIGtleUlEOwotICAgICAgICBpZiAoIXZhbHVl
LT5hc1N0cmluZyhrZXlJRCkpCisgICAgICAgIGF1dG8ga2V5SUQgPSB2YWx1ZS0+YXNTdHJpbmco
KTsKKyAgICAgICAgaWYgKCFrZXlJRCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAg
IFZlY3RvcjxjaGFyPiBrZXlJRERhdGE7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvQ29tbWFuZExpbmVBUElIb3N0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9D
b21tYW5kTGluZUFQSUhvc3QuY3BwCmluZGV4IGRjZTM1OWU3NjhlZjlhMTNhNmM2ZGUxNmQxZjhk
M2M4YmJmZjdhOTcuLjk0ZDAzZDg1ZDZkYTlmNGY4OGY4Y2QxMmU0YmZmYmQzM2I0ZGM1NjcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db21tYW5kTGluZUFQSUhvc3QuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9Db21tYW5kTGluZUFQSUhvc3QuY3BwCkBA
IC03Myw3ICs3Myw3IEBAIHZvaWQgQ29tbWFuZExpbmVBUElIb3N0OjpkaXNjb25uZWN0KCkKICAg
ICBtX2luc3RydW1lbnRpbmdBZ2VudHMgPSBudWxscHRyOwogfQogCi12b2lkIENvbW1hbmRMaW5l
QVBJSG9zdDo6aW5zcGVjdChKU0M6OkpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0
LCBKU0M6OkpTVmFsdWUgdmFsdWVUb0luc3BlY3QsIEpTQzo6SlNWYWx1ZSBoaW50c1ZhbHVlKQor
dm9pZCBDb21tYW5kTGluZUFQSUhvc3Q6Omluc3BlY3QoSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4
aWNhbEdsb2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIG9iamVjdCwgSlNDOjpKU1ZhbHVlIGhpbnRz
KQogewogICAgIGlmICghbV9pbnN0cnVtZW50aW5nQWdlbnRzKQogICAgICAgICByZXR1cm47CkBA
IC04MiwxMiArODIsMjAgQEAgdm9pZCBDb21tYW5kTGluZUFQSUhvc3Q6Omluc3BlY3QoSlNDOjpK
U0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwgSlNDOjoKICAgICBpZiAoIWluc3Bl
Y3RvckFnZW50KQogICAgICAgICByZXR1cm47CiAKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBo
aW50c09iamVjdDsKLSAgICBpZiAoIUluc3BlY3Rvcjo6dG9JbnNwZWN0b3JWYWx1ZSgmbGV4aWNh
bEdsb2JhbE9iamVjdCwgaGludHNWYWx1ZSktPmFzT2JqZWN0KGhpbnRzT2JqZWN0KSkKKyAgICBh
dXRvIG9iamVjdFZhbHVlID0gSW5zcGVjdG9yOjp0b0luc3BlY3RvclZhbHVlKCZsZXhpY2FsR2xv
YmFsT2JqZWN0LCBvYmplY3QpOworICAgIGlmICghb2JqZWN0VmFsdWUpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIGF1dG8gcmVtb3RlT2JqZWN0ID0gQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlBy
b3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+OjpydW50aW1lQ2FzdChJbnNwZWN0b3I6OnRv
SW5zcGVjdG9yVmFsdWUoJmxleGljYWxHbG9iYWxPYmplY3QsIHZhbHVlVG9JbnNwZWN0KSk7Ci0g
ICAgaW5zcGVjdG9yQWdlbnQtPmluc3BlY3QoV1RGTW92ZShyZW1vdGVPYmplY3QpLCBXVEZNb3Zl
KGhpbnRzT2JqZWN0KSk7CisgICAgYXV0byBoaW50c1ZhbHVlID0gSW5zcGVjdG9yOjp0b0luc3Bl
Y3RvclZhbHVlKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCBoaW50cyk7CisgICAgaWYgKCFoaW50c1Zh
bHVlKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIGhpbnRzT2JqZWN0ID0gaGludHNWYWx1
ZS0+YXNPYmplY3QoKTsKKyAgICBpZiAoIWhpbnRzT2JqZWN0KQorICAgICAgICByZXR1cm47CisK
KyAgICBhdXRvIHJlbW90ZU9iamVjdCA9IFByb3RvY29sOjpCaW5kaW5nVHJhaXRzPFByb3RvY29s
OjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+OjpydW50aW1lQ2FzdChvYmplY3RWYWx1ZS5yZWxlYXNl
Tm9uTnVsbCgpKTsKKyAgICBpbnNwZWN0b3JBZ2VudC0+aW5zcGVjdChXVEZNb3ZlKHJlbW90ZU9i
amVjdCksIGhpbnRzT2JqZWN0LnJlbGVhc2VOb25OdWxsKCkpOwogfQogCiBDb21tYW5kTGluZUFQ
SUhvc3Q6OkV2ZW50TGlzdGVuZXJzUmVjb3JkIENvbW1hbmRMaW5lQVBJSG9zdDo6Z2V0RXZlbnRM
aXN0ZW5lcnMoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEV2ZW50VGFyZ2V0
JiB0YXJnZXQpCkBAIC0xMzYsOCArMTQ0LDcgQEAgdm9pZCBDb21tYW5kTGluZUFQSUhvc3Q6OmNs
ZWFyQ29uc29sZU1lc3NhZ2VzKCkKICAgICBpZiAoIWNvbnNvbGVBZ2VudCkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgRXJyb3JTdHJpbmcgaWdub3JlZDsKLSAgICBjb25zb2xlQWdlbnQtPmNsZWFy
TWVzc2FnZXMoaWdub3JlZCk7CisgICAgY29uc29sZUFnZW50LT5jbGVhck1lc3NhZ2VzKCk7CiB9
CiAKIHZvaWQgQ29tbWFuZExpbmVBUElIb3N0Ojpjb3B5VGV4dChjb25zdCBTdHJpbmcmIHRleHQp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQXVkaXRSZXNv
dXJjZXNPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckF1ZGl0
UmVzb3VyY2VzT2JqZWN0LmNwcAppbmRleCAwMDE0OGUwZmY0OTQ0YWJkMDkwYjgzNmVhOTMwNWVj
Zjc0OGM2ZmE0Li5iN2ZmMGUxMDRhNTUwNjkxNmNjZmE5ZDIzMGM4YjJiYmIzNjNkZjNhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQXVkaXRSZXNvdXJjZXNP
YmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBdWRpdFJl
c291cmNlc09iamVjdC5jcHAKQEAgLTEwNSw3ICsxMDUsNyBAQCBFeGNlcHRpb25PcjxJbnNwZWN0
b3JBdWRpdFJlc291cmNlc09iamVjdDo6UmVzb3VyY2VDb250ZW50PiBJbnNwZWN0b3JBdWRpdFJl
c291cgogICAgIGlmICghY2FjaGVkUmVzb3VyY2UpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24g
eyBOb3RGb3VuZEVycm9yLCBtYWtlU3RyaW5nKCJVbmtub3duIGlkZW50aWZpZXIgIl9zLCBpZCkg
fTsKIAotICAgIEVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworICAgIFByb3RvY29sOjpFcnJvclN0
cmluZyBlcnJvclN0cmluZzsKICAgICBSZXNvdXJjZUNvbnRlbnQgcmVzb3VyY2VDb250ZW50Owog
ICAgIEluc3BlY3RvclBhZ2VBZ2VudDo6cmVzb3VyY2VDb250ZW50KGVycm9yU3RyaW5nLCBmcmFt
ZSwgY2FjaGVkUmVzb3VyY2UtPnVybCgpLCAmcmVzb3VyY2VDb250ZW50LmRhdGEsICZyZXNvdXJj
ZUNvbnRlbnQuYmFzZTY0RW5jb2RlZCk7CiAgICAgaWYgKCFlcnJvclN0cmluZy5pc0VtcHR5KCkp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDYW52YXMuY3BwCmluZGV4IDVj
NTdiNjA1NzRlY2E1NzIyZDE1NDk5MmFmZGJkYzc1NWU2MzE5OWYuLmE2MWI4ZWVkYTA0MTZjZjdm
MTU0YWEwMTFjODYwY2U4ZmIwYjMyNWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JDYW52YXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JDYW52YXMuY3BwCkBAIC0zNTYsMTMgKzM1NiwxMyBAQCB2b2lkIEluc3BlY3RvckNh
bnZhczo6cmVjb3JkQWN0aW9uKGNvbnN0IFN0cmluZyYgbmFtZSwgc3RkOjppbml0aWFsaXplcl9s
aXN0PFJlYwogICAgIH0KIAogICAgIGlmICghbV9mcmFtZXMpCi0gICAgICAgIG1fZnJhbWVzID0g
SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpSZWNvcmRpbmc6OkZyYW1lPjo6Y3Jl
YXRlKCk7CisgICAgICAgIG1fZnJhbWVzID0gSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UmVjb3Jk
aW5nOjpGcmFtZT46OmNyZWF0ZSgpOwogCiAgICAgaWYgKCFtX2N1cnJlbnRBY3Rpb25zKSB7CiAg
ICAgICAgIG1fY3VycmVudEFjdGlvbnMgPSBKU09OOjpBcnJheU9mPEpTT046OlZhbHVlPjo6Y3Jl
YXRlKCk7CiAKLSAgICAgICAgYXV0byBmcmFtZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlY29y
ZGluZzo6RnJhbWU6OmNyZWF0ZSgpCi0gICAgICAgICAgICAuc2V0QWN0aW9ucyhtX2N1cnJlbnRB
Y3Rpb25zKQorICAgICAgICBhdXRvIGZyYW1lID0gUHJvdG9jb2w6OlJlY29yZGluZzo6RnJhbWU6
OmNyZWF0ZSgpCisgICAgICAgICAgICAuc2V0QWN0aW9ucygqbV9jdXJyZW50QWN0aW9ucykKICAg
ICAgICAgICAgIC5yZWxlYXNlKCk7CiAKICAgICAgICAgbV9mcmFtZXMtPmFkZEl0ZW0oV1RGTW92
ZShmcmFtZSkpOwpAQCAtMzc1LDcgKzM3NSw3IEBAIHZvaWQgSW5zcGVjdG9yQ2FudmFzOjpyZWNv
cmRBY3Rpb24oY29uc3QgU3RyaW5nJiBuYW1lLCBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8UmVjCiAK
ICAgICBtX2xhc3RSZWNvcmRlZEFjdGlvbiA9IGJ1aWxkQWN0aW9uKG5hbWUsIFdURk1vdmUocGFy
YW1ldGVycykpOwogICAgIG1fYnVmZmVyVXNlZCArPSBtX2xhc3RSZWNvcmRlZEFjdGlvbi0+bWVt
b3J5Q29zdCgpOwotICAgIG1fY3VycmVudEFjdGlvbnMtPmFkZEl0ZW0obV9sYXN0UmVjb3JkZWRB
Y3Rpb24uZ2V0KCkpOworICAgIG1fY3VycmVudEFjdGlvbnMtPmFkZEl0ZW0oKm1fbGFzdFJlY29y
ZGVkQWN0aW9uKTsKIAogICAgIGF1dG8qIGNvbnRleHQgPSBjYW52YXNDb250ZXh0KCk7CiAgICAg
QVNTRVJUKGNvbnRleHQpOwpAQCAtMzk4LDcgKzM5OCw3IEBAIHZvaWQgSW5zcGVjdG9yQ2FudmFz
OjpmaW5hbGl6ZUZyYW1lKCkKICAgICBhcHBlbmRBY3Rpb25TbmFwc2hvdElmTmVlZGVkKCk7CiAK
ICAgICBpZiAobV9mcmFtZXMgJiYgbV9mcmFtZXMtPmxlbmd0aCgpICYmICFzdGQ6OmlzbmFuKG1f
Y3VycmVudEZyYW1lU3RhcnRUaW1lKSkgewotICAgICAgICBhdXRvIGN1cnJlbnRGcmFtZSA9IHN0
YXRpY19jYXN0PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlY29yZGluZzo6RnJhbWUqPihtX2ZyYW1l
cy0+Z2V0KG1fZnJhbWVzLT5sZW5ndGgoKSAtIDEpLmdldCgpKTsKKyAgICAgICAgYXV0byBjdXJy
ZW50RnJhbWUgPSBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8UHJvdG9jb2w6OlJlY29yZGluZzo6RnJh
bWU+KG1fZnJhbWVzLT5nZXQobV9mcmFtZXMtPmxlbmd0aCgpIC0gMSkpOwogICAgICAgICBjdXJy
ZW50RnJhbWUtPnNldER1cmF0aW9uKChNb25vdG9uaWNUaW1lOjpub3coKSAtIG1fY3VycmVudEZy
YW1lU3RhcnRUaW1lKS5taWxsaXNlY29uZHMoKSk7CiAKICAgICAgICAgbV9jdXJyZW50RnJhbWVT
dGFydFRpbWUgPSBNb25vdG9uaWNUaW1lOjpuYW4oKTsKQEAgLTQxMiw3ICs0MTIsOCBAQCB2b2lk
IEluc3BlY3RvckNhbnZhczo6bWFya0N1cnJlbnRGcmFtZUluY29tcGxldGUoKQogICAgIGlmICgh
bV9jdXJyZW50QWN0aW9ucyB8fCAhbV9mcmFtZXMgfHwgIW1fZnJhbWVzLT5sZW5ndGgoKSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgc3RhdGljX2Nhc3Q8SW5zcGVjdG9yOjpQcm90b2NvbDo6UmVj
b3JkaW5nOjpGcmFtZSo+KG1fZnJhbWVzLT5nZXQobV9mcmFtZXMtPmxlbmd0aCgpIC0gMSkuZ2V0
KCkpLT5zZXRJbmNvbXBsZXRlKHRydWUpOworICAgIGF1dG8gY3VycmVudEZyYW1lID0gc3RhdGlj
X3JlZmVyZW5jZV9jYXN0PFByb3RvY29sOjpSZWNvcmRpbmc6OkZyYW1lPihtX2ZyYW1lcy0+Z2V0
KG1fZnJhbWVzLT5sZW5ndGgoKSAtIDEpKTsKKyAgICBjdXJyZW50RnJhbWUtPnNldEluY29tcGxl
dGUodHJ1ZSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ2FudmFzOjpzZXRCdWZmZXJMaW1pdChsb25n
IG1lbW9yeUxpbWl0KQpAQCAtNDM4LDI5ICs0MzksMjkgQEAgYm9vbCBJbnNwZWN0b3JDYW52YXM6
Om92ZXJGcmFtZUNvdW50KCkgY29uc3QKICAgICByZXR1cm4gbV9mcmFtZUNvdW50ICYmIG1fZnJh
bWVzQ2FwdHVyZWQgPj0gbV9mcmFtZUNvdW50LnZhbHVlKCk7CiB9CiAKLVJlZjxJbnNwZWN0b3I6
OlByb3RvY29sOjpDYW52YXM6OkNhbnZhcz4gSW5zcGVjdG9yQ2FudmFzOjpidWlsZE9iamVjdEZv
ckNhbnZhcyhib29sIGNhcHR1cmVCYWNrdHJhY2UpCitSZWY8UHJvdG9jb2w6OkNhbnZhczo6Q2Fu
dmFzPiBJbnNwZWN0b3JDYW52YXM6OmJ1aWxkT2JqZWN0Rm9yQ2FudmFzKGJvb2wgY2FwdHVyZUJh
Y2t0cmFjZSkKIHsKLSAgICB1c2luZyBDb250ZXh0VHlwZVR5cGUgPSBPcHRpb25hbDxJbnNwZWN0
b3I6OlByb3RvY29sOjpDYW52YXM6OkNvbnRleHRUeXBlPjsKKyAgICB1c2luZyBDb250ZXh0VHlw
ZVR5cGUgPSBPcHRpb25hbDxQcm90b2NvbDo6Q2FudmFzOjpDb250ZXh0VHlwZT47CiAgICAgYXV0
byBjb250ZXh0VHlwZSA9IFdURjo6c3dpdGNoT24obV9jb250ZXh0LAogICAgICAgICBbXSAoc3Rk
OjpyZWZlcmVuY2Vfd3JhcHBlcjxDYW52YXNSZW5kZXJpbmdDb250ZXh0PiBjb250ZXh0V3JhcHBl
cikgLT4gQ29udGV4dFR5cGVUeXBlIHsKICAgICAgICAgICAgIGF1dG8mIGNvbnRleHQgPSBjb250
ZXh0V3JhcHBlci5nZXQoKTsKICAgICAgICAgICAgIGlmIChpczxDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQ+KGNvbnRleHQpKQotICAgICAgICAgICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpDYW52YXM6OkNvbnRleHRUeXBlOjpDYW52YXMyRDsKKyAgICAgICAgICAgICAgICByZXR1
cm4gUHJvdG9jb2w6OkNhbnZhczo6Q29udGV4dFR5cGU6OkNhbnZhczJEOwogICAgICAgICAgICAg
aWYgKGlzPEltYWdlQml0bWFwUmVuZGVyaW5nQ29udGV4dD4oY29udGV4dCkpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6Q29udGV4dFR5cGU6OkJp
dG1hcFJlbmRlcmVyOworICAgICAgICAgICAgICAgIHJldHVybiBQcm90b2NvbDo6Q2FudmFzOjpD
b250ZXh0VHlwZTo6Qml0bWFwUmVuZGVyZXI7CiAjaWYgRU5BQkxFKFdFQkdMKQogICAgICAgICAg
ICAgaWYgKGlzPFdlYkdMUmVuZGVyaW5nQ29udGV4dD4oY29udGV4dCkpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6Q29udGV4dFR5cGU6OldlYkdM
OworICAgICAgICAgICAgICAgIHJldHVybiBQcm90b2NvbDo6Q2FudmFzOjpDb250ZXh0VHlwZTo6
V2ViR0w7CiAjZW5kaWYKICNpZiBFTkFCTEUoV0VCR0wyKQogICAgICAgICAgICAgaWYgKGlzPFdl
YkdMMlJlbmRlcmluZ0NvbnRleHQ+KGNvbnRleHQpKQotICAgICAgICAgICAgICAgIHJldHVybiBJ
bnNwZWN0b3I6OlByb3RvY29sOjpDYW52YXM6OkNvbnRleHRUeXBlOjpXZWJHTDI7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIFByb3RvY29sOjpDYW52YXM6OkNvbnRleHRUeXBlOjpXZWJHTDI7CiAj
ZW5kaWYKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAgIH0sCiAjaWYg
RU5BQkxFKFdFQkdQVSkKICAgICAgICAgW10gKHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8V2ViR1BV
RGV2aWNlPikgewotICAgICAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZh
czo6Q29udGV4dFR5cGU6OldlYkdQVTsKKyAgICAgICAgICAgIHJldHVybiBQcm90b2NvbDo6Q2Fu
dmFzOjpDb250ZXh0VHlwZTo6V2ViR1BVOwogICAgICAgICB9LAogI2VuZGlmCiAgICAgICAgIFtd
IChNb25vc3RhdGUpIHsKQEAgLTQ3MCwxMCArNDcxLDEwIEBAIFJlZjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpDYW52YXM6OkNhbnZhcz4gSW5zcGVjdG9yQ2FudmFzOjpidWlsZE9iamVjdEZvckNhbnZh
cyhiCiAgICAgKTsKICAgICBpZiAoIWNvbnRleHRUeXBlKSB7CiAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgICAgICBjb250ZXh0VHlwZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNh
bnZhczo6Q29udGV4dFR5cGU6OkNhbnZhczJEOworICAgICAgICBjb250ZXh0VHlwZSA9IFByb3Rv
Y29sOjpDYW52YXM6OkNvbnRleHRUeXBlOjpDYW52YXMyRDsKICAgICB9CiAKLSAgICBhdXRvIGNh
bnZhcyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6Q2FudmFzOjpjcmVhdGUoKQorICAg
IGF1dG8gY2FudmFzID0gUHJvdG9jb2w6OkNhbnZhczo6Q2FudmFzOjpjcmVhdGUoKQogICAgICAg
ICAuc2V0Q2FudmFzSWQobV9pZGVudGlmaWVyKQogICAgICAgICAuc2V0Q29udGV4dFR5cGUoY29u
dGV4dFR5cGUudmFsdWUoKSkKICAgICAgICAgLnJlbGVhc2UoKTsKQEAgLTQ4NiwxMiArNDg3LDEy
IEBAIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDYW52YXM6OkNhbnZhcz4gSW5zcGVjdG9yQ2Fu
dmFzOjpidWlsZE9iamVjdEZvckNhbnZhcyhiCiAgICAgICAgIC8vIEZJWE1FOiA8aHR0cHM6Ly93
ZWJraXQub3JnL2IvMTc4MjgyPiBXZWIgSW5zcGVjdG9yOiBzZW5kIGEgRE9NIG5vZGUgd2l0aCBl
YWNoIENhbnZhcyBwYXlsb2FkIGFuZCBlbGltaW5hdGUgQ2FudmFzLnJlcXVlc3ROb2RlCiAgICAg
fQogCi0gICAgdXNpbmcgQ29udGV4dEF0dHJpYnV0ZXNUeXBlID0gUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkNhbnZhczo6Q29udGV4dEF0dHJpYnV0ZXM+OworICAgIHVzaW5nIENvbnRleHRB
dHRyaWJ1dGVzVHlwZSA9IFJlZlB0cjxQcm90b2NvbDo6Q2FudmFzOjpDb250ZXh0QXR0cmlidXRl
cz47CiAgICAgYXV0byBjb250ZXh0QXR0cmlidXRlcyA9IFdURjo6c3dpdGNoT24obV9jb250ZXh0
LAogICAgICAgICBbXSAoc3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxDYW52YXNSZW5kZXJpbmdDb250
ZXh0PiBjb250ZXh0V3JhcHBlcikgLT4gQ29udGV4dEF0dHJpYnV0ZXNUeXBlIHsKICAgICAgICAg
ICAgIGF1dG8mIGNvbnRleHQgPSBjb250ZXh0V3JhcHBlci5nZXQoKTsKICAgICAgICAgICAgIGlm
IChpczxJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQ+KGNvbnRleHQpKSB7Ci0gICAgICAgICAg
ICAgICAgYXV0byBjb250ZXh0QXR0cmlidXRlc1BheWxvYWQgPSBJbnNwZWN0b3I6OlByb3RvY29s
OjpDYW52YXM6OkNvbnRleHRBdHRyaWJ1dGVzOjpjcmVhdGUoKQorICAgICAgICAgICAgICAgIGF1
dG8gY29udGV4dEF0dHJpYnV0ZXNQYXlsb2FkID0gUHJvdG9jb2w6OkNhbnZhczo6Q29udGV4dEF0
dHJpYnV0ZXM6OmNyZWF0ZSgpCiAgICAgICAgICAgICAgICAgICAgIC5yZWxlYXNlKCk7CiAgICAg
ICAgICAgICAgICAgY29udGV4dEF0dHJpYnV0ZXNQYXlsb2FkLT5zZXRBbHBoYShkb3duY2FzdDxJ
bWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQ+KGNvbnRleHQpLmhhc0FscGhhKCkpOwogICAgICAg
ICAgICAgICAgIHJldHVybiBjb250ZXh0QXR0cmlidXRlc1BheWxvYWQ7CkBAIC01MDAsNyArNTAx
LDcgQEAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6Q2FudmFzPiBJbnNwZWN0b3JD
YW52YXM6OmJ1aWxkT2JqZWN0Rm9yQ2FudmFzKGIKICNpZiBFTkFCTEUoV0VCR0wpCiAgICAgICAg
ICAgICBpZiAoaXM8V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZT4oY29udGV4dCkpIHsKICAgICAg
ICAgICAgICAgICBpZiAoY29uc3QgYXV0byYgYXR0cmlidXRlcyA9IGRvd25jYXN0PFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U+KGNvbnRleHQpLmdldENvbnRleHRBdHRyaWJ1dGVzKCkpIHsKLSAg
ICAgICAgICAgICAgICAgICAgYXV0byBjb250ZXh0QXR0cmlidXRlc1BheWxvYWQgPSBJbnNwZWN0
b3I6OlByb3RvY29sOjpDYW52YXM6OkNvbnRleHRBdHRyaWJ1dGVzOjpjcmVhdGUoKQorICAgICAg
ICAgICAgICAgICAgICBhdXRvIGNvbnRleHRBdHRyaWJ1dGVzUGF5bG9hZCA9IFByb3RvY29sOjpD
YW52YXM6OkNvbnRleHRBdHRyaWJ1dGVzOjpjcmVhdGUoKQogICAgICAgICAgICAgICAgICAgICAg
ICAgLnJlbGVhc2UoKTsKICAgICAgICAgICAgICAgICAgICAgY29udGV4dEF0dHJpYnV0ZXNQYXls
b2FkLT5zZXRBbHBoYShhdHRyaWJ1dGVzLT5hbHBoYSk7CiAgICAgICAgICAgICAgICAgICAgIGNv
bnRleHRBdHRyaWJ1dGVzUGF5bG9hZC0+c2V0RGVwdGgoYXR0cmlidXRlcy0+ZGVwdGgpOwpAQCAt
NTMwLDcgKzUzMSw3IEBAIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDYW52YXM6OkNhbnZhcz4g
SW5zcGVjdG9yQ2FudmFzOjpidWlsZE9iamVjdEZvckNhbnZhcyhiCiAgICAgICAgIFtdIChzdGQ6
OnJlZmVyZW5jZV93cmFwcGVyPFdlYkdQVURldmljZT4gZGV2aWNlV3JhcHBlcikgLT4gQ29udGV4
dEF0dHJpYnV0ZXNUeXBlIHsKICAgICAgICAgICAgIGF1dG8mIGRldmljZSA9IGRldmljZVdyYXBw
ZXIuZ2V0KCk7CiAgICAgICAgICAgICBpZiAoY29uc3QgYXV0byYgb3B0aW9ucyA9IGRldmljZS5h
ZGFwdGVyKCkub3B0aW9ucygpKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBjb250ZXh0QXR0cmli
dXRlc1BheWxvYWQgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpDYW52YXM6OkNvbnRleHRBdHRyaWJ1
dGVzOjpjcmVhdGUoKQorICAgICAgICAgICAgICAgIGF1dG8gY29udGV4dEF0dHJpYnV0ZXNQYXls
b2FkID0gUHJvdG9jb2w6OkNhbnZhczo6Q29udGV4dEF0dHJpYnV0ZXM6OmNyZWF0ZSgpCiAgICAg
ICAgICAgICAgICAgICAgIC5yZWxlYXNlKCk7CiAgICAgICAgICAgICAgICAgaWYgKGNvbnN0IGF1
dG8mIHBvd2VyUHJlZmVyZW5jZSA9IG9wdGlvbnMtPnBvd2VyUHJlZmVyZW5jZSkgewogICAgICAg
ICAgICAgICAgICAgICBzd2l0Y2ggKHBvd2VyUHJlZmVyZW5jZS52YWx1ZSgpKSB7CkBAIC01NTQs
NyArNTU1LDcgQEAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6Q2FudmFzPiBJbnNw
ZWN0b3JDYW52YXM6OmJ1aWxkT2JqZWN0Rm9yQ2FudmFzKGIKICAgICAgICAgfQogICAgICk7CiAg
ICAgaWYgKGNvbnRleHRBdHRyaWJ1dGVzKQotICAgICAgICBjYW52YXMtPnNldENvbnRleHRBdHRy
aWJ1dGVzKFdURk1vdmUoY29udGV4dEF0dHJpYnV0ZXMpKTsKKyAgICAgICAgY2FudmFzLT5zZXRD
b250ZXh0QXR0cmlidXRlcyhjb250ZXh0QXR0cmlidXRlcy5yZWxlYXNlTm9uTnVsbCgpKTsKIAog
ICAgIC8vIEZJWE1FOiA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMTgwODMzPiBXZWIgSW5zcGVjdG9y
OiBzdXBwb3J0IE9mZnNjcmVlbkNhbnZhcyBmb3IgQ2FudmFzIHJlbGF0ZWQgb3BlcmF0aW9ucwog
CkBAIC01NzEsNyArNTcyLDcgQEAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6Q2Fu
dmFzPiBJbnNwZWN0b3JDYW52YXM6OmJ1aWxkT2JqZWN0Rm9yQ2FudmFzKGIKICAgICByZXR1cm4g
Y2FudmFzOwogfQogCi1SZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6UmVjb3JkaW5nOjpSZWNvcmRp
bmc+IEluc3BlY3RvckNhbnZhczo6cmVsZWFzZU9iamVjdEZvclJlY29yZGluZygpCitSZWY8UHJv
dG9jb2w6OlJlY29yZGluZzo6UmVjb3JkaW5nPiBJbnNwZWN0b3JDYW52YXM6OnJlbGVhc2VPYmpl
Y3RGb3JSZWNvcmRpbmcoKQogewogICAgIEFTU0VSVCghbV9jdXJyZW50QWN0aW9ucyk7CiAgICAg
QVNTRVJUKCFtX2xhc3RSZWNvcmRlZEFjdGlvbik7CkBAIC01ODEsMjYgKzU4MiwyNiBAQCBSZWY8
SW5zcGVjdG9yOjpQcm90b2NvbDo6UmVjb3JkaW5nOjpSZWNvcmRpbmc+IEluc3BlY3RvckNhbnZh
czo6cmVsZWFzZU9iamVjdEZvcgogICAgIEFTU0VSVChjb250ZXh0KTsKICAgICAvLyBGSVhNRTog
PGh0dHBzOi8vd2Via2l0Lm9yZy9iLzIwMTY1MT4gV2ViIEluc3BlY3RvcjogQ2FudmFzOiBzdXBw
b3J0IGNhbnZhcyByZWNvcmRpbmdzIGZvciBXZWJHUFVEZXZpY2UKIAotICAgIEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlJlY29yZGluZzo6VHlwZSB0eXBlOworICAgIFByb3RvY29sOjpSZWNvcmRpbmc6
OlR5cGUgdHlwZTsKICAgICBpZiAoaXM8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPihjb250ZXh0
KSkKLSAgICAgICAgdHlwZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlY29yZGluZzo6VHlwZTo6
Q2FudmFzMkQ7CisgICAgICAgIHR5cGUgPSBQcm90b2NvbDo6UmVjb3JkaW5nOjpUeXBlOjpDYW52
YXMyRDsKICAgICBlbHNlIGlmIChpczxJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQ+KGNvbnRl
eHQpKQotICAgICAgICB0eXBlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6UmVjb3JkaW5nOjpUeXBl
OjpDYW52YXNCaXRtYXBSZW5kZXJlcjsKKyAgICAgICAgdHlwZSA9IFByb3RvY29sOjpSZWNvcmRp
bmc6OlR5cGU6OkNhbnZhc0JpdG1hcFJlbmRlcmVyOwogI2lmIEVOQUJMRShXRUJHTCkKICAgICBl
bHNlIGlmIChpczxXZWJHTFJlbmRlcmluZ0NvbnRleHQ+KGNvbnRleHQpKQotICAgICAgICB0eXBl
ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6UmVjb3JkaW5nOjpUeXBlOjpDYW52YXNXZWJHTDsKKyAg
ICAgICAgdHlwZSA9IFByb3RvY29sOjpSZWNvcmRpbmc6OlR5cGU6OkNhbnZhc1dlYkdMOwogI2Vu
ZGlmCiAjaWYgRU5BQkxFKFdFQkdMMikKICAgICBlbHNlIGlmIChpczxXZWJHTDJSZW5kZXJpbmdD
b250ZXh0Pihjb250ZXh0KSkKLSAgICAgICAgdHlwZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJl
Y29yZGluZzo6VHlwZTo6Q2FudmFzV2ViR0wyOworICAgICAgICB0eXBlID0gUHJvdG9jb2w6OlJl
Y29yZGluZzo6VHlwZTo6Q2FudmFzV2ViR0wyOwogI2VuZGlmCiAgICAgZWxzZSB7CiAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICB0eXBlID0gSW5zcGVjdG9yOjpQcm90b2Nv
bDo6UmVjb3JkaW5nOjpUeXBlOjpDYW52YXMyRDsKKyAgICAgICAgdHlwZSA9IFByb3RvY29sOjpS
ZWNvcmRpbmc6OlR5cGU6OkNhbnZhczJEOwogICAgIH0KIAotICAgIGF1dG8gcmVjb3JkaW5nID0g
SW5zcGVjdG9yOjpQcm90b2NvbDo6UmVjb3JkaW5nOjpSZWNvcmRpbmc6OmNyZWF0ZSgpCi0gICAg
ICAgIC5zZXRWZXJzaW9uKEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlY29yZGluZzo6VkVSU0lPTikK
KyAgICBhdXRvIHJlY29yZGluZyA9IFByb3RvY29sOjpSZWNvcmRpbmc6OlJlY29yZGluZzo6Y3Jl
YXRlKCkKKyAgICAgICAgLnNldFZlcnNpb24oUHJvdG9jb2w6OlJlY29yZGluZzo6VkVSU0lPTikK
ICAgICAgICAgLnNldFR5cGUodHlwZSkKICAgICAgICAgLnNldEluaXRpYWxTdGF0ZShtX2luaXRp
YWxTdGF0ZS5yZWxlYXNlTm9uTnVsbCgpKQogICAgICAgICAuc2V0RGF0YShtX3NlcmlhbGl6ZWRE
dXBsaWNhdGVEYXRhLnJlbGVhc2VOb25OdWxsKCkpCkBAIC02MTQsNyArNjE1LDcgQEAgUmVmPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlJlY29yZGluZzo6UmVjb3JkaW5nPiBJbnNwZWN0b3JDYW52YXM6
OnJlbGVhc2VPYmplY3RGb3IKICAgICByZXR1cm4gcmVjb3JkaW5nOwogfQogCi1TdHJpbmcgSW5z
cGVjdG9yQ2FudmFzOjpnZXRDYW52YXNDb250ZW50QXNEYXRhVVJMKEVycm9yU3RyaW5nJiBlcnJv
clN0cmluZykKK1N0cmluZyBJbnNwZWN0b3JDYW52YXM6OmdldENhbnZhc0NvbnRlbnRBc0RhdGFV
UkwoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZykKIHsKICAgICBhdXRvKiBub2Rl
ID0gY2FudmFzRWxlbWVudCgpOwogICAgIGlmICghbm9kZSkgewpAQCAtNjUxLDcgKzY1Miw3IEBA
IHZvaWQgSW5zcGVjdG9yQ2FudmFzOjphcHBlbmRBY3Rpb25TbmFwc2hvdElmTmVlZGVkKCkKICAg
ICBpZiAobV9jb250ZW50Q2hhbmdlZCkgewogICAgICAgICBtX2J1ZmZlclVzZWQgLT0gbV9sYXN0
UmVjb3JkZWRBY3Rpb24tPm1lbW9yeUNvc3QoKTsKIAotICAgICAgICBFcnJvclN0cmluZyBpZ25v
cmVkOworICAgICAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgaWdub3JlZDsKICAgICAgICAgbV9s
YXN0UmVjb3JkZWRBY3Rpb24tPmFkZEl0ZW0oaW5kZXhGb3JEYXRhKGdldENhbnZhc0NvbnRlbnRB
c0RhdGFVUkwoaWdub3JlZCkpKTsKIAogICAgICAgICBtX2J1ZmZlclVzZWQgKz0gbV9sYXN0UmVj
b3JkZWRBY3Rpb24tPm1lbW9yeUNvc3QoKTsKQEAgLTc3NSw3ICs3NzYsNyBAQCBpbnQgSW5zcGVj
dG9yQ2FudmFzOjppbmRleEZvckRhdGEoRHVwbGljYXRlRGF0YVZhcmlhbnQgZGF0YSkKIAogICAg
IGlmIChpdGVtKSB7CiAgICAgICAgIG1fYnVmZmVyVXNlZCArPSBpdGVtLT5tZW1vcnlDb3N0KCk7
Ci0gICAgICAgIG1fc2VyaWFsaXplZER1cGxpY2F0ZURhdGEtPmFkZEl0ZW0oV1RGTW92ZShpdGVt
KSk7CisgICAgICAgIG1fc2VyaWFsaXplZER1cGxpY2F0ZURhdGEtPmFkZEl0ZW0oaXRlbS5yZWxl
YXNlTm9uTnVsbCgpKTsKIAogICAgICAgICBtX2luZGV4ZWREdXBsaWNhdGVEYXRhLmFwcGVuZChk
YXRhKTsKICAgICAgICAgaW5kZXggPSBtX2luZGV4ZWREdXBsaWNhdGVEYXRhLnNpemUoKSAtIDE7
CkBAIC04MTAsMTMgKzgxMSwxMyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGF0aWMgUmVmPEpT
T046OkFycmF5T2Y8SlNPTjo6VmFsdWU+PiBidWlsZEFycmF5Rm9yVmVjdG9yKAogICAgIHJldHVy
biBhcnJheTsKIH0KIAotUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlY29yZGluZzo6SW5pdGlh
bFN0YXRlPiBJbnNwZWN0b3JDYW52YXM6OmJ1aWxkSW5pdGlhbFN0YXRlKCkKK1JlZjxQcm90b2Nv
bDo6UmVjb3JkaW5nOjpJbml0aWFsU3RhdGU+IEluc3BlY3RvckNhbnZhczo6YnVpbGRJbml0aWFs
U3RhdGUoKQogewogICAgIGF1dG8qIGNvbnRleHQgPSBjYW52YXNDb250ZXh0KCk7CiAgICAgQVNT
RVJUKGNvbnRleHQpOwogICAgIC8vIEZJWE1FOiA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMjAxNjUx
PiBXZWIgSW5zcGVjdG9yOiBDYW52YXM6IHN1cHBvcnQgY2FudmFzIHJlY29yZGluZ3MgZm9yIFdl
YkdQVURldmljZQogCi0gICAgYXV0byBpbml0aWFsU3RhdGVQYXlsb2FkID0gSW5zcGVjdG9yOjpQ
cm90b2NvbDo6UmVjb3JkaW5nOjpJbml0aWFsU3RhdGU6OmNyZWF0ZSgpLnJlbGVhc2UoKTsKKyAg
ICBhdXRvIGluaXRpYWxTdGF0ZVBheWxvYWQgPSBQcm90b2NvbDo6UmVjb3JkaW5nOjpJbml0aWFs
U3RhdGU6OmNyZWF0ZSgpLnJlbGVhc2UoKTsKIAogICAgIGF1dG8gYXR0cmlidXRlc1BheWxvYWQg
PSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgIGF0dHJpYnV0ZXNQYXlsb2FkLT5zZXRJbnRl
Z2VyKCJ3aWR0aCJfcywgY29udGV4dC0+Y2FudmFzQmFzZSgpLndpZHRoKCkpOwpAQCAtOTA4LDcg
KzkwOSw3IEBAIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpSZWNvcmRpbmc6OkluaXRpYWxTdGF0
ZT4gSW5zcGVjdG9yQ2FudmFzOjpidWlsZEluaXRpYWxTCiAgICAgaWYgKHBhcmFtZXRlcnNQYXls
b2FkLT5sZW5ndGgoKSkKICAgICAgICAgaW5pdGlhbFN0YXRlUGF5bG9hZC0+c2V0UGFyYW1ldGVy
cyhXVEZNb3ZlKHBhcmFtZXRlcnNQYXlsb2FkKSk7CiAKLSAgICBFcnJvclN0cmluZyBpZ25vcmVk
OworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBpZ25vcmVkOwogICAgIGluaXRpYWxTdGF0ZVBh
eWxvYWQtPnNldENvbnRlbnQoZ2V0Q2FudmFzQ29udGVudEFzRGF0YVVSTChpZ25vcmVkKSk7CiAK
ICAgICByZXR1cm4gaW5pdGlhbFN0YXRlUGF5bG9hZDsKQEAgLTk0Niw3ICs5NDcsNyBAQCBSZWY8
SlNPTjo6QXJyYXlPZjxKU09OOjpWYWx1ZT4+IEluc3BlY3RvckNhbnZhczo6YnVpbGRBY3Rpb24o
Y29uc3QgU3RyaW5nJiBuYW1lLAogICAgICAgICAgICAgICAgIGFycmF5LT5hZGRJdGVtKHZhbHVl
LmQudmFsdWVPcigxKSk7CiAgICAgICAgICAgICAgICAgYXJyYXktPmFkZEl0ZW0odmFsdWUuZS52
YWx1ZU9yKDApKTsKICAgICAgICAgICAgICAgICBhcnJheS0+YWRkSXRlbSh2YWx1ZS5mLnZhbHVl
T3IoMCkpOwotICAgICAgICAgICAgICAgIGFkZFBhcmFtZXRlcihhcnJheS5wdHIoKSwgUmVjb3Jk
aW5nU3dpenpsZVR5cGVzOjpET01NYXRyaXgpOworICAgICAgICAgICAgICAgIGFkZFBhcmFtZXRl
cihXVEZNb3ZlKGFycmF5KSwgUmVjb3JkaW5nU3dpenpsZVR5cGVzOjpET01NYXRyaXgpOwogICAg
ICAgICAgICAgfSwKICAgICAgICAgICAgIFsmXSAoY29uc3QgRWxlbWVudCogdmFsdWUpIHsKICAg
ICAgICAgICAgICAgICBpZiAodmFsdWUpIHsKQEAgLTExMDYsMTYgKzExMDcsMTYgQEAgUmVmPEpT
T046OkFycmF5T2Y8SlNPTjo6VmFsdWU+PiBJbnNwZWN0b3JDYW52YXM6OmJ1aWxkQWN0aW9uKGNv
bnN0IFN0cmluZyYgbmFtZSwKICAgICAgICAgICAgICAgICBhdXRvIGRlZHVwbGljYXRlZCA9IHZh
bHVlLm1hcChbJl0gKGNvbnN0IFN0cmluZyYgaXRlbSkgewogICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gaW5kZXhGb3JEYXRhKGl0ZW0pOwogICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAg
ICAgICAgIGFkZFBhcmFtZXRlcihidWlsZEFycmF5Rm9yVmVjdG9yKGRlZHVwbGljYXRlZCkucHRy
KCksIFJlY29yZGluZ1N3aXp6bGVUeXBlczo6U3RyaW5nKTsKKyAgICAgICAgICAgICAgICBhZGRQ
YXJhbWV0ZXIoYnVpbGRBcnJheUZvclZlY3RvcihkZWR1cGxpY2F0ZWQpLCBSZWNvcmRpbmdTd2l6
emxlVHlwZXM6OlN0cmluZyk7CiAgICAgICAgICAgICB9LAotICAgICAgICAgICAgWyZdIChjb25z
dCBWZWN0b3I8ZmxvYXQ+JiB2YWx1ZSkgeyBhZGRQYXJhbWV0ZXIoYnVpbGRBcnJheUZvclZlY3Rv
cih2YWx1ZSkucHRyKCksIFJlY29yZGluZ1N3aXp6bGVUeXBlczo6QXJyYXkpOyB9LAorICAgICAg
ICAgICAgWyZdIChjb25zdCBWZWN0b3I8ZmxvYXQ+JiB2YWx1ZSkgeyBhZGRQYXJhbWV0ZXIoYnVp
bGRBcnJheUZvclZlY3Rvcih2YWx1ZSksIFJlY29yZGluZ1N3aXp6bGVUeXBlczo6QXJyYXkpOyB9
LAogICAgICAgICAgICAgWyZdIChjb25zdCBWZWN0b3I8dWludDMyX3Q+JiB2YWx1ZSkgewogICAg
ICAgICAgICAgICAgIGF1dG8gbWFwcGVkID0gdmFsdWUubWFwKFsmXSAodWludDMyX3QgaXRlbSkg
ewogICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZG91YmxlPihpdGVtKTsK
ICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICBhZGRQYXJhbWV0ZXIoYnVpbGRB
cnJheUZvclZlY3RvcihtYXBwZWQpLnB0cigpLCBSZWNvcmRpbmdTd2l6emxlVHlwZXM6OkFycmF5
KTsKKyAgICAgICAgICAgICAgICBhZGRQYXJhbWV0ZXIoYnVpbGRBcnJheUZvclZlY3RvcihtYXBw
ZWQpLCBSZWNvcmRpbmdTd2l6emxlVHlwZXM6OkFycmF5KTsKICAgICAgICAgICAgIH0sCi0gICAg
ICAgICAgICBbJl0gKGNvbnN0IFZlY3RvcjxpbnQzMl90PiYgdmFsdWUpIHsgYWRkUGFyYW1ldGVy
KGJ1aWxkQXJyYXlGb3JWZWN0b3IodmFsdWUpLnB0cigpLCBSZWNvcmRpbmdTd2l6emxlVHlwZXM6
OkFycmF5KTsgfSwKKyAgICAgICAgICAgIFsmXSAoY29uc3QgVmVjdG9yPGludDMyX3Q+JiB2YWx1
ZSkgeyBhZGRQYXJhbWV0ZXIoYnVpbGRBcnJheUZvclZlY3Rvcih2YWx1ZSksIFJlY29yZGluZ1N3
aXp6bGVUeXBlczo6QXJyYXkpOyB9LAogI2lmIEVOQUJMRShXRUJHTCkKICAgICAgICAgICAgIFsm
XSAoY29uc3QgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6RmxvYXQzMkxpc3Q6OlZhcmlhbnRU
eXBlJiB2YWx1ZSkgewogICAgICAgICAgICAgICAgIFdURjo6dmlzaXQocGFyc2VQYXJhbWV0ZXIs
IHZhbHVlKTsKQEAgLTExNTksNyArMTE2MCw3IEBAIFJlZjxKU09OOjpBcnJheU9mPEpTT046OlZh
bHVlPj4gSW5zcGVjdG9yQ2FudmFzOjpidWlsZEFjdGlvbihjb25zdCBTdHJpbmcmIG5hbWUsCiBS
ZWY8SlNPTjo6QXJyYXlPZjxKU09OOjpWYWx1ZT4+IEluc3BlY3RvckNhbnZhczo6YnVpbGRBcnJh
eUZvckNhbnZhc0dyYWRpZW50KGNvbnN0IENhbnZhc0dyYWRpZW50JiBjYW52YXNHcmFkaWVudCkK
IHsKICAgICBBU0NJSUxpdGVyYWwgdHlwZSA9ICJsaW5lYXItZ3JhZGllbnQiX3M7Ci0gICAgYXV0
byBwYXJhbWV0ZXJzID0gSlNPTjo6QXJyYXlPZjxmbG9hdD46OmNyZWF0ZSgpOworICAgIGF1dG8g
cGFyYW1ldGVycyA9IEpTT046OkFycmF5T2Y8ZG91YmxlPjo6Y3JlYXRlKCk7CiAgICAgV1RGOjpz
d2l0Y2hPbihjYW52YXNHcmFkaWVudC5ncmFkaWVudCgpLmRhdGEoKSwKICAgICAgICAgWyZdIChj
b25zdCBHcmFkaWVudDo6TGluZWFyRGF0YSYgZGF0YSkgewogICAgICAgICAgICAgcGFyYW1ldGVy
cy0+YWRkSXRlbShkYXRhLnBvaW50MC54KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckNhbnZhcy5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckNhbnZhcy5oCmluZGV4IDc4Y2I2YThhM2I4YWI3ODBlOTVmYjNmYWVkM2FiYzU5NGQx
NDY1OTguLmIyN2JjOGQ0OTIzOTExN2JlZTUyNWQ1ZmU2YWMyNmUyZDYxNmI1YzcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDYW52YXMuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzLmgKQEAgLTU4LDggKzU4LDYgQEAg
Y2xhc3MgT2Zmc2NyZWVuQ2FudmFzOwogY2xhc3MgVHlwZWRPTUNTU0ltYWdlVmFsdWU7CiAjZW5k
aWYKIAotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7Ci0KIGNsYXNzIEluc3BlY3RvckNhbnZh
cyBmaW5hbCA6IHB1YmxpYyBSZWZDb3VudGVkPEluc3BlY3RvckNhbnZhcz4gewogcHVibGljOgog
ICAgIHN0YXRpYyBSZWY8SW5zcGVjdG9yQ2FudmFzPiBjcmVhdGUoQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dCYpOwpAQCAtMTA3LDcgKzEwNSw3IEBAIHB1YmxpYzoKICAgICBSZWY8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6Q2FudmFzOjpDYW52YXM+IGJ1aWxkT2JqZWN0Rm9yQ2FudmFzKGJvb2wgY2FwdHVy
ZUJhY2t0cmFjZSk7CiAgICAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlY29yZGluZzo6UmVj
b3JkaW5nPiByZWxlYXNlT2JqZWN0Rm9yUmVjb3JkaW5nKCk7CiAKLSAgICBTdHJpbmcgZ2V0Q2Fu
dmFzQ29udGVudEFzRGF0YVVSTChFcnJvclN0cmluZyYpOworICAgIFN0cmluZyBnZXRDYW52YXND
b250ZW50QXNEYXRhVVJMKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nJik7CiAKIHBy
aXZhdGU6CiAgICAgSW5zcGVjdG9yQ2FudmFzKENhbnZhc1JlbmRlcmluZ0NvbnRleHQmKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAppbmRl
eCAyZTkwYzExOTQ4YTdlMGViNjEwNWE4M2UyYzA4Y2I0ZjgyYThmMmZlLi42MzBkZjcxNzkwYzYz
YjZlNzU4NzM0NTFhMTc0MGY4NmY2N2UwMmRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCkBAIC00NzgsMTAgKzQ3OCw4IEBAIHZvaWQg
SW5zcGVjdG9yQ29udHJvbGxlcjo6ZnJvbnRlbmRJbml0aWFsaXplZCgpCiB7CiAgICAgaWYgKG1f
cGF1c2VBZnRlckluaXRpYWxpemF0aW9uKSB7CiAgICAgICAgIG1fcGF1c2VBZnRlckluaXRpYWxp
emF0aW9uID0gZmFsc2U7Ci0gICAgICAgIGlmIChhdXRvKiBkZWJ1Z2dlckFnZW50ID0gbV9pbnN0
cnVtZW50aW5nQWdlbnRzLT5lbmFibGVkUGFnZURlYnVnZ2VyQWdlbnQoKSkgewotICAgICAgICAg
ICAgRXJyb3JTdHJpbmcgaWdub3JlZDsKLSAgICAgICAgICAgIGRlYnVnZ2VyQWdlbnQtPnBhdXNl
KGlnbm9yZWQpOwotICAgICAgICB9CisgICAgICAgIGlmIChhdXRvKiBkZWJ1Z2dlckFnZW50ID0g
bV9pbnN0cnVtZW50aW5nQWdlbnRzLT5lbmFibGVkUGFnZURlYnVnZ2VyQWdlbnQoKSkKKyAgICAg
ICAgICAgIGRlYnVnZ2VyQWdlbnQtPnBhdXNlKCk7CiAgICAgfQogCiAjaWYgRU5BQkxFKFJFTU9U
RV9JTlNQRUNUT1IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yRnJvbnRlbmRIb3N0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JG
cm9udGVuZEhvc3QuY3BwCmluZGV4IDUwZTBjODNiYzkyMDY2MmU3NjgwMjU1Nzc1MmIzNmYyMzc1
YjAzOWMuLmE2YmI4NzdhMjJhMGFhODZiZjg5OTgzOWE3NWY1YWZmNmVmOGRlMzAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuY3BwCkBA
IC02MDcsNyArNjA3LDcgQEAgYm9vbCBJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OmRpYWdub3N0aWNM
b2dnaW5nQXZhaWxhYmxlKCkKICAgICByZXR1cm4gbV9jbGllbnQgJiYgbV9jbGllbnQtPmRpYWdu
b3N0aWNMb2dnaW5nQXZhaWxhYmxlKCk7CiB9CiAKLXN0YXRpYyBPcHRpb25hbDxEaWFnbm9zdGlj
TG9nZ2luZ0NsaWVudDo6VmFsdWVQYXlsb2FkPiB2YWx1ZVBheWxvYWRGcm9tSlNPTlZhbHVlKGNv
bnN0IFJlZlB0cjxKU09OOjpWYWx1ZT4mIHZhbHVlKQorc3RhdGljIE9wdGlvbmFsPERpYWdub3N0
aWNMb2dnaW5nQ2xpZW50OjpWYWx1ZVBheWxvYWQ+IHZhbHVlUGF5bG9hZEZyb21KU09OVmFsdWUo
UmVmPEpTT046OlZhbHVlPiYmIHZhbHVlKQogewogICAgIHN3aXRjaCAodmFsdWUtPnR5cGUoKSkg
ewogICAgIGNhc2UgSlNPTjo6VmFsdWU6OlR5cGU6OkFycmF5OgpAQCAtNjE3LDI0ICs2MTcsMTYg
QEAgc3RhdGljIE9wdGlvbmFsPERpYWdub3N0aWNMb2dnaW5nQ2xpZW50OjpWYWx1ZVBheWxvYWQ+
IHZhbHVlUGF5bG9hZEZyb21KU09OVmFsdWUKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
IAogICAgIGNhc2UgSlNPTjo6VmFsdWU6OlR5cGU6OkJvb2xlYW46Ci0gICAgICAgIGJvb2wgYm9v
bFZhbHVlOwotICAgICAgICB2YWx1ZS0+YXNCb29sZWFuKGJvb2xWYWx1ZSk7Ci0gICAgICAgIHJl
dHVybiBEaWFnbm9zdGljTG9nZ2luZ0NsaWVudDo6VmFsdWVQYXlsb2FkKGJvb2xWYWx1ZSk7Cisg
ICAgICAgIHJldHVybiBEaWFnbm9zdGljTG9nZ2luZ0NsaWVudDo6VmFsdWVQYXlsb2FkKHZhbHVl
LT5hc0Jvb2xlYW4oKS52YWx1ZU9yKGZhbHNlKSk7CiAKICAgICBjYXNlIEpTT046OlZhbHVlOjpU
eXBlOjpEb3VibGU6Ci0gICAgICAgIGRvdWJsZSBkb3VibGVWYWx1ZTsKLSAgICAgICAgdmFsdWUt
PmFzRG91YmxlKGRvdWJsZVZhbHVlKTsKLSAgICAgICAgcmV0dXJuIERpYWdub3N0aWNMb2dnaW5n
Q2xpZW50OjpWYWx1ZVBheWxvYWQoZG91YmxlVmFsdWUpOworICAgICAgICByZXR1cm4gRGlhZ25v
c3RpY0xvZ2dpbmdDbGllbnQ6OlZhbHVlUGF5bG9hZCh2YWx1ZS0+YXNEb3VibGUoKS52YWx1ZU9y
KDApKTsKIAogICAgIGNhc2UgSlNPTjo6VmFsdWU6OlR5cGU6OkludGVnZXI6Ci0gICAgICAgIGxv
bmcgbG9uZyBpbnRWYWx1ZTsKLSAgICAgICAgdmFsdWUtPmFzSW50ZWdlcihpbnRWYWx1ZSk7Ci0g
ICAgICAgIHJldHVybiBEaWFnbm9zdGljTG9nZ2luZ0NsaWVudDo6VmFsdWVQYXlsb2FkKGludFZh
bHVlKTsKKyAgICAgICAgcmV0dXJuIERpYWdub3N0aWNMb2dnaW5nQ2xpZW50OjpWYWx1ZVBheWxv
YWQoc3RhdGljX2Nhc3Q8bG9uZyBsb25nPih2YWx1ZS0+YXNJbnRlZ2VyKCkudmFsdWVPcigwKSkp
OwogCiAgICAgY2FzZSBKU09OOjpWYWx1ZTo6VHlwZTo6U3RyaW5nOgotICAgICAgICBTdHJpbmcg
c3RyaW5nVmFsdWU7Ci0gICAgICAgIHZhbHVlLT5hc1N0cmluZyhzdHJpbmdWYWx1ZSk7Ci0gICAg
ICAgIHJldHVybiBEaWFnbm9zdGljTG9nZ2luZ0NsaWVudDo6VmFsdWVQYXlsb2FkKHN0cmluZ1Zh
bHVlKTsKKyAgICAgICAgcmV0dXJuIERpYWdub3N0aWNMb2dnaW5nQ2xpZW50OjpWYWx1ZVBheWxv
YWQodmFsdWUtPmFzU3RyaW5nKCkpOwogICAgIH0KIAogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwpAQCAtNjQ2LDE3ICs2MzgsMTcgQEAgdm9pZCBJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OmxvZ0Rp
YWdub3N0aWNFdmVudChjb25zdCBTdHJpbmcmIGV2ZW50TmFtZSwgY29uc3QgU3QKICAgICBpZiAo
IXN1cHBvcnRzRGlhZ25vc3RpY0xvZ2dpbmcoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVm
UHRyPEpTT046OlZhbHVlPiBwYXlsb2FkVmFsdWU7Ci0gICAgaWYgKCFKU09OOjpWYWx1ZTo6cGFy
c2VKU09OKHBheWxvYWRTdHJpbmcsIHBheWxvYWRWYWx1ZSkpCisgICAgYXV0byBwYXlsb2FkVmFs
dWUgPSBKU09OOjpWYWx1ZTo6cGFyc2VKU09OKHBheWxvYWRTdHJpbmcpOworICAgIGlmICghcGF5
bG9hZFZhbHVlKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBw
YXlsb2FkT2JqZWN0OwotICAgIGlmICghcGF5bG9hZFZhbHVlLT5hc09iamVjdChwYXlsb2FkT2Jq
ZWN0KSkKKyAgICBhdXRvIHBheWxvYWRPYmplY3QgPSBwYXlsb2FkVmFsdWUtPmFzT2JqZWN0KCk7
CisgICAgaWYgKCFwYXlsb2FkT2JqZWN0KQogICAgICAgICByZXR1cm47CiAKICAgICBEaWFnbm9z
dGljTG9nZ2luZ0NsaWVudDo6VmFsdWVEaWN0aW9uYXJ5IGRpY3Rpb25hcnk7Ci0gICAgZm9yIChj
b25zdCBhdXRvJiBba2V5LCB2YWx1ZV0gOiAqcGF5bG9hZE9iamVjdCkgewotICAgICAgICBpZiAo
YXV0byB2YWx1ZVBheWxvYWQgPSB2YWx1ZVBheWxvYWRGcm9tSlNPTlZhbHVlKHZhbHVlKSkKKyAg
ICBmb3IgKGF1dG8mIFtrZXksIHZhbHVlXSA6ICpwYXlsb2FkT2JqZWN0KSB7CisgICAgICAgIGlm
IChhdXRvIHZhbHVlUGF5bG9hZCA9IHZhbHVlUGF5bG9hZEZyb21KU09OVmFsdWUoV1RGTW92ZSh2
YWx1ZSkpKQogICAgICAgICAgICAgZGljdGlvbmFyeS5zZXQoa2V5LCBXVEZNb3ZlKHZhbHVlUGF5
bG9hZC52YWx1ZSgpKSk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yU3R5bGVTaGVldC5jcHAKaW5kZXggYWUwZmVmNWRmZTM5YjlhNTE2ZTU1MTAzMDdl
YWJjYjY2MGQxYWJjYi4uOTc2NjllZmI2ODdkMzM1NTRkNTJiYzY4ZTE4YzY4NDFhZWI0Y2Y0ZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNw
cApAQCAtMzgwLDcgKzM4MCw3IEBAIHZvaWQgU3R5bGVTaGVldEhhbmRsZXI6Om9ic2VydmVDb21t
ZW50KHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQpCiAgICAgbV9jdXJy
ZW50UnVsZURhdGFTdGFjay5sYXN0KCktPnN0eWxlU291cmNlRGF0YS0+cHJvcGVydHlEYXRhLmFw
cGVuZChDU1NQcm9wZXJ0eVNvdXJjZURhdGEocHJvcGVydHlEYXRhLm5hbWUsIHByb3BlcnR5RGF0
YS52YWx1ZSwgZmFsc2UsIHRydWUsIHRydWUsIFNvdXJjZVJhbmdlKHN0YXJ0T2Zmc2V0IC0gdG9w
UnVsZUJvZHlSYW5nZS5zdGFydCwgZW5kT2Zmc2V0IC0gdG9wUnVsZUJvZHlSYW5nZS5zdGFydCkp
KTsKIH0KIAotc3RhdGljIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlNvdXJjZVJh
bmdlPiBidWlsZFNvdXJjZVJhbmdlT2JqZWN0KGNvbnN0IFNvdXJjZVJhbmdlJiByYW5nZSwgY29u
c3QgVmVjdG9yPHNpemVfdD4mIGxpbmVFbmRpbmdzLCBpbnQqIGVuZGluZ0xpbmUgPSBudWxscHRy
KQorc3RhdGljIFJlZlB0cjxQcm90b2NvbDo6Q1NTOjpTb3VyY2VSYW5nZT4gYnVpbGRTb3VyY2VS
YW5nZU9iamVjdChjb25zdCBTb3VyY2VSYW5nZSYgcmFuZ2UsIGNvbnN0IFZlY3RvcjxzaXplX3Q+
JiBsaW5lRW5kaW5ncywgaW50KiBlbmRpbmdMaW5lID0gbnVsbHB0cikKIHsKICAgICBpZiAobGlu
ZUVuZGluZ3MuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTM5MSw3ICsz
OTEsNyBAQCBzdGF0aWMgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U291cmNlUmFu
Z2U+IGJ1aWxkU291cmNlUmFuZ2VPYmplY3QoY29ucwogICAgIGlmIChlbmRpbmdMaW5lKQogICAg
ICAgICAqZW5kaW5nTGluZSA9IGVuZC5tX2xpbmUuemVyb0Jhc2VkSW50KCk7CiAKLSAgICByZXR1
cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTb3VyY2VSYW5nZTo6Y3JlYXRlKCkKKyAgICBy
ZXR1cm4gUHJvdG9jb2w6OkNTUzo6U291cmNlUmFuZ2U6OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRT
dGFydExpbmUoc3RhcnQubV9saW5lLnplcm9CYXNlZEludCgpKQogICAgICAgICAuc2V0U3RhcnRD
b2x1bW4oc3RhcnQubV9jb2x1bW4uemVyb0Jhc2VkSW50KCkpCiAgICAgICAgIC5zZXRFbmRMaW5l
KGVuZC5tX2xpbmUuemVyb0Jhc2VkSW50KCkpCkBAIC00MjgsMzQgKzQyOCwzNCBAQCBzdGF0aWMg
UmVmUHRyPENTU1J1bGVMaXN0PiBhc0NTU1J1bGVMaXN0KENTU1J1bGUqIHJ1bGUpCiAgICAgcmV0
dXJuIG51bGxwdHI7CiB9CiAKLXN0YXRpYyBSZWY8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpDU1M6Okdyb3VwaW5nPj4gYnVpbGRBcnJheUZvckdyb3VwaW5ncyhDU1NSdWxlJiBy
dWxlKQorc3RhdGljIFJlZjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpDU1M6Okdyb3VwaW5nPj4g
YnVpbGRBcnJheUZvckdyb3VwaW5ncyhDU1NSdWxlJiBydWxlKQogewotICAgIGF1dG8gZ3JvdXBp
bmdzUGF5bG9hZCA9IEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpHcm91
cGluZz46OmNyZWF0ZSgpOworICAgIGF1dG8gZ3JvdXBpbmdzUGF5bG9hZCA9IEpTT046OkFycmF5
T2Y8UHJvdG9jb2w6OkNTUzo6R3JvdXBpbmc+OjpjcmVhdGUoKTsKIAogICAgIGF1dG8qIHBhcmVu
dFJ1bGUgPSAmcnVsZTsKICAgICB3aGlsZSAocGFyZW50UnVsZSkgewotICAgICAgICBSZWZQdHI8
SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpHcm91cGluZz4gcnVsZUdyb3VwaW5nUGF5bG9hZDsK
KyAgICAgICAgUmVmUHRyPFByb3RvY29sOjpDU1M6Okdyb3VwaW5nPiBydWxlR3JvdXBpbmdQYXls
b2FkOwogCiAgICAgICAgIGlmIChpczxDU1NNZWRpYVJ1bGU+KHBhcmVudFJ1bGUpKSB7CiAgICAg
ICAgICAgICBhdXRvKiBtZWRpYSA9IGRvd25jYXN0PENTU01lZGlhUnVsZT4ocGFyZW50UnVsZSkt
Pm1lZGlhKCk7CiAgICAgICAgICAgICBpZiAobWVkaWEgJiYgbWVkaWEtPmxlbmd0aCgpICYmIG1l
ZGlhLT5tZWRpYVRleHQoKSAhPSAiYWxsIikgewotICAgICAgICAgICAgICAgIHJ1bGVHcm91cGlu
Z1BheWxvYWQgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6Okdyb3VwaW5nOjpjcmVhdGUoKQor
ICAgICAgICAgICAgICAgIHJ1bGVHcm91cGluZ1BheWxvYWQgPSBQcm90b2NvbDo6Q1NTOjpHcm91
cGluZzo6Y3JlYXRlKCkKICAgICAgICAgICAgICAgICAgICAgLnNldFRleHQobWVkaWEtPm1lZGlh
VGV4dCgpKQotICAgICAgICAgICAgICAgICAgICAuc2V0VHlwZShJbnNwZWN0b3I6OlByb3RvY29s
OjpDU1M6Okdyb3VwaW5nOjpUeXBlOjpNZWRpYVJ1bGUpCisgICAgICAgICAgICAgICAgICAgIC5z
ZXRUeXBlKFByb3RvY29sOjpDU1M6Okdyb3VwaW5nOjpUeXBlOjpNZWRpYVJ1bGUpCiAgICAgICAg
ICAgICAgICAgICAgIC5yZWxlYXNlKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBp
ZiAoaXM8Q1NTSW1wb3J0UnVsZT4ocGFyZW50UnVsZSkpIHsKICAgICAgICAgICAgIGF1dG8mIG1l
ZGlhID0gZG93bmNhc3Q8Q1NTSW1wb3J0UnVsZT4ocGFyZW50UnVsZSktPm1lZGlhKCk7CiAgICAg
ICAgICAgICBpZiAobWVkaWEubGVuZ3RoKCkgJiYgbWVkaWEubWVkaWFUZXh0KCkgIT0gImFsbCIp
IHsKLSAgICAgICAgICAgICAgICBydWxlR3JvdXBpbmdQYXlsb2FkID0gSW5zcGVjdG9yOjpQcm90
b2NvbDo6Q1NTOjpHcm91cGluZzo6Y3JlYXRlKCkKKyAgICAgICAgICAgICAgICBydWxlR3JvdXBp
bmdQYXlsb2FkID0gUHJvdG9jb2w6OkNTUzo6R3JvdXBpbmc6OmNyZWF0ZSgpCiAgICAgICAgICAg
ICAgICAgICAgIC5zZXRUZXh0KG1lZGlhLm1lZGlhVGV4dCgpKQotICAgICAgICAgICAgICAgICAg
ICAuc2V0VHlwZShJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6Okdyb3VwaW5nOjpUeXBlOjpNZWRp
YUltcG9ydFJ1bGUpCisgICAgICAgICAgICAgICAgICAgIC5zZXRUeXBlKFByb3RvY29sOjpDU1M6
Okdyb3VwaW5nOjpUeXBlOjpNZWRpYUltcG9ydFJ1bGUpCiAgICAgICAgICAgICAgICAgICAgIC5y
ZWxlYXNlKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAoaXM8Q1NTU3VwcG9y
dHNSdWxlPihwYXJlbnRSdWxlKSkgewotICAgICAgICAgICAgcnVsZUdyb3VwaW5nUGF5bG9hZCA9
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6R3JvdXBpbmc6OmNyZWF0ZSgpCisgICAgICAgICAg
ICBydWxlR3JvdXBpbmdQYXlsb2FkID0gUHJvdG9jb2w6OkNTUzo6R3JvdXBpbmc6OmNyZWF0ZSgp
CiAgICAgICAgICAgICAgICAgLnNldFRleHQoZG93bmNhc3Q8Q1NTU3VwcG9ydHNSdWxlPihwYXJl
bnRSdWxlKS0+Y29uZGl0aW9uVGV4dCgpKQotICAgICAgICAgICAgICAgIC5zZXRUeXBlKEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkNTUzo6R3JvdXBpbmc6OlR5cGU6OlN1cHBvcnRzUnVsZSkKKyAgICAg
ICAgICAgICAgICAuc2V0VHlwZShQcm90b2NvbDo6Q1NTOjpHcm91cGluZzo6VHlwZTo6U3VwcG9y
dHNSdWxlKQogICAgICAgICAgICAgICAgIC5yZWxlYXNlKCk7CiAgICAgICAgIH0KIApAQCAtNDcw
LDcgKzQ3MCw3IEBAIHN0YXRpYyBSZWY8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29s
OjpDU1M6Okdyb3VwaW5nPj4gYnVpbGRBcnJheUZvckdyb3VwCiAgICAgICAgICAgICAgICAgICAg
IHJ1bGVHcm91cGluZ1BheWxvYWQtPnNldFNvdXJjZVVSTChzb3VyY2VVUkwpOwogICAgICAgICAg
ICAgfQogCi0gICAgICAgICAgICBncm91cGluZ3NQYXlsb2FkLT5hZGRJdGVtKFdURk1vdmUocnVs
ZUdyb3VwaW5nUGF5bG9hZCkpOworICAgICAgICAgICAgZ3JvdXBpbmdzUGF5bG9hZC0+YWRkSXRl
bShydWxlR3JvdXBpbmdQYXlsb2FkLnJlbGVhc2VOb25OdWxsKCkpOwogICAgICAgICB9CiAKICAg
ICAgICAgaWYgKHBhcmVudFJ1bGUtPnBhcmVudFJ1bGUoKSkgewpAQCAtNDgyLDkgKzQ4Miw5IEBA
IHN0YXRpYyBSZWY8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6Okdyb3Vw
aW5nPj4gYnVpbGRBcnJheUZvckdyb3VwCiAgICAgICAgIHdoaWxlIChzdHlsZVNoZWV0KSB7CiAg
ICAgICAgICAgICBhdXRvKiBtZWRpYSA9IHN0eWxlU2hlZXQtPm1lZGlhKCk7CiAgICAgICAgICAg
ICBpZiAobWVkaWEgJiYgbWVkaWEtPmxlbmd0aCgpICYmIG1lZGlhLT5tZWRpYVRleHQoKSAhPSAi
YWxsIikgewotICAgICAgICAgICAgICAgIGF1dG8gc2hlZXRHcm91cGluZ1BheWxvYWQgPSBJbnNw
ZWN0b3I6OlByb3RvY29sOjpDU1M6Okdyb3VwaW5nOjpjcmVhdGUoKQorICAgICAgICAgICAgICAg
IGF1dG8gc2hlZXRHcm91cGluZ1BheWxvYWQgPSBQcm90b2NvbDo6Q1NTOjpHcm91cGluZzo6Y3Jl
YXRlKCkKICAgICAgICAgICAgICAgICAgICAgLnNldFRleHQobWVkaWEtPm1lZGlhVGV4dCgpKQot
ICAgICAgICAgICAgICAgICAgICAuc2V0VHlwZShpczxIVE1MU3R5bGVFbGVtZW50PihzdHlsZVNo
ZWV0LT5vd25lck5vZGUoKSkgPyBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6Okdyb3VwaW5nOjpU
eXBlOjpNZWRpYVN0eWxlTm9kZTogSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpHcm91cGluZzo6
VHlwZTo6TWVkaWFMaW5rTm9kZSkKKyAgICAgICAgICAgICAgICAgICAgLnNldFR5cGUoaXM8SFRN
TFN0eWxlRWxlbWVudD4oc3R5bGVTaGVldC0+b3duZXJOb2RlKCkpID8gUHJvdG9jb2w6OkNTUzo6
R3JvdXBpbmc6OlR5cGU6Ok1lZGlhU3R5bGVOb2RlOiBQcm90b2NvbDo6Q1NTOjpHcm91cGluZzo6
VHlwZTo6TWVkaWFMaW5rTm9kZSkKICAgICAgICAgICAgICAgICAgICAgLnJlbGVhc2UoKTsKIAog
ICAgICAgICAgICAgICAgIFN0cmluZyBzb3VyY2VVUkw7CkBAIC01MjMsMjggKzUyMywzMCBAQCBJ
bnNwZWN0b3JTdHlsZTo6SW5zcGVjdG9yU3R5bGUoY29uc3QgSW5zcGVjdG9yQ1NTSWQmIHN0eWxl
SWQsIFJlZjxDU1NTdHlsZURlY2xhcgogCiBJbnNwZWN0b3JTdHlsZTo6fkluc3BlY3RvclN0eWxl
KCkgPSBkZWZhdWx0OwogCi1SZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHls
ZT4gSW5zcGVjdG9yU3R5bGU6OmJ1aWxkT2JqZWN0Rm9yU3R5bGUoKSBjb25zdAorUmVmPFByb3Rv
Y29sOjpDU1M6OkNTU1N0eWxlPiBJbnNwZWN0b3JTdHlsZTo6YnVpbGRPYmplY3RGb3JTdHlsZSgp
IGNvbnN0CiB7Ci0gICAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+IHJl
c3VsdCA9IHN0eWxlV2l0aFByb3BlcnRpZXMoKTsKLSAgICBpZiAoIW1fc3R5bGVJZC5pc0VtcHR5
KCkpCi0gICAgICAgIHJlc3VsdC0+c2V0U3R5bGVJZChtX3N0eWxlSWQuYXNQcm90b2NvbFZhbHVl
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGVJZD4oKSk7CisgICAgUmVmPFByb3Rv
Y29sOjpDU1M6OkNTU1N0eWxlPiByZXN1bHQgPSBzdHlsZVdpdGhQcm9wZXJ0aWVzKCk7CisgICAg
aWYgKGF1dG8gc3R5bGVJZCA9IG1fc3R5bGVJZC5hc1Byb3RvY29sVmFsdWU8UHJvdG9jb2w6OkNT
Uzo6Q1NTU3R5bGVJZD4oKSkKKyAgICAgICAgcmVzdWx0LT5zZXRTdHlsZUlkKHN0eWxlSWQucmVs
ZWFzZU5vbk51bGwoKSk7CiAKICAgICByZXN1bHQtPnNldFdpZHRoKG1fc3R5bGUtPmdldFByb3Bl
cnR5VmFsdWUoIndpZHRoIikpOwogICAgIHJlc3VsdC0+c2V0SGVpZ2h0KG1fc3R5bGUtPmdldFBy
b3BlcnR5VmFsdWUoImhlaWdodCIpKTsKIAogICAgIFJlZlB0cjxDU1NSdWxlU291cmNlRGF0YT4g
c291cmNlRGF0YSA9IGV4dHJhY3RTb3VyY2VEYXRhKCk7Ci0gICAgaWYgKHNvdXJjZURhdGEpCi0g
ICAgICAgIHJlc3VsdC0+c2V0UmFuZ2UoYnVpbGRTb3VyY2VSYW5nZU9iamVjdChzb3VyY2VEYXRh
LT5ydWxlQm9keVJhbmdlLCBtX3BhcmVudFN0eWxlU2hlZXQtPmxpbmVFbmRpbmdzKCkpKTsKKyAg
ICBpZiAoc291cmNlRGF0YSkgeworICAgICAgICBpZiAoYXV0byByYW5nZSA9IGJ1aWxkU291cmNl
UmFuZ2VPYmplY3Qoc291cmNlRGF0YS0+cnVsZUJvZHlSYW5nZSwgbV9wYXJlbnRTdHlsZVNoZWV0
LT5saW5lRW5kaW5ncygpKSkKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0UmFuZ2UocmFuZ2UucmVs
ZWFzZU5vbk51bGwoKSk7CisgICAgfQogCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotUmVmPEpT
T046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NDb21wdXRlZFN0eWxlUHJv
cGVydHk+PiBJbnNwZWN0b3JTdHlsZTo6YnVpbGRBcnJheUZvckNvbXB1dGVkU3R5bGUoKSBjb25z
dAorUmVmPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkNTUzo6Q1NTQ29tcHV0ZWRTdHlsZVByb3Bl
cnR5Pj4gSW5zcGVjdG9yU3R5bGU6OmJ1aWxkQXJyYXlGb3JDb21wdXRlZFN0eWxlKCkgY29uc3QK
IHsKLSAgICBhdXRvIHJlc3VsdCA9IEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6
Q1NTOjpDU1NDb21wdXRlZFN0eWxlUHJvcGVydHk+OjpjcmVhdGUoKTsKKyAgICBhdXRvIHJlc3Vs
dCA9IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkNTUzo6Q1NTQ29tcHV0ZWRTdHlsZVByb3BlcnR5
Pjo6Y3JlYXRlKCk7CiAgICAgZm9yIChhdXRvJiBwcm9wZXJ0eSA6IGNvbGxlY3RQcm9wZXJ0aWVz
KHRydWUpKSB7CiAgICAgICAgIGNvbnN0IENTU1Byb3BlcnR5U291cmNlRGF0YSYgcHJvcGVydHlF
bnRyeSA9IHByb3BlcnR5LnNvdXJjZURhdGE7Ci0gICAgICAgIGF1dG8gZW50cnkgPSBJbnNwZWN0
b3I6OlByb3RvY29sOjpDU1M6OkNTU0NvbXB1dGVkU3R5bGVQcm9wZXJ0eTo6Y3JlYXRlKCkKKyAg
ICAgICAgYXV0byBlbnRyeSA9IFByb3RvY29sOjpDU1M6OkNTU0NvbXB1dGVkU3R5bGVQcm9wZXJ0
eTo6Y3JlYXRlKCkKICAgICAgICAgICAgIC5zZXROYW1lKHByb3BlcnR5RW50cnkubmFtZSkKICAg
ICAgICAgICAgIC5zZXRWYWx1ZShwcm9wZXJ0eUVudHJ5LnZhbHVlKQogICAgICAgICAgICAgLnJl
bGVhc2UoKTsKQEAgLTYyMywxMyArNjI1LDEzIEBAIFZlY3RvcjxJbnNwZWN0b3JTdHlsZVByb3Bl
cnR5PiBJbnNwZWN0b3JTdHlsZTo6Y29sbGVjdFByb3BlcnRpZXMoYm9vbCBpbmNsdWRlQWxsCiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NT
U3R5bGU+IEluc3BlY3RvclN0eWxlOjpzdHlsZVdpdGhQcm9wZXJ0aWVzKCkgY29uc3QKK1JlZjxQ
cm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4gSW5zcGVjdG9yU3R5bGU6OnN0eWxlV2l0aFByb3BlcnRp
ZXMoKSBjb25zdAogewogICAgIGF1dG8gcHJvcGVydGllcyA9IGNvbGxlY3RQcm9wZXJ0aWVzKGZh
bHNlKTsKIAotICAgIGF1dG8gcHJvcGVydGllc09iamVjdCA9IEpTT046OkFycmF5T2Y8SW5zcGVj
dG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0eT46OmNyZWF0ZSgpOwotICAgIGF1dG8gc2hv
cnRoYW5kRW50cmllcyA9IEFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTaG9ydGhh
bmRFbnRyeT46OmNyZWF0ZSgpOwotICAgIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0eT4+IHByb3BlcnR5TmFtZVRvUHJldmlvdXNBY3Rp
dmVQcm9wZXJ0eTsKKyAgICBhdXRvIHByb3BlcnRpZXNPYmplY3QgPSBKU09OOjpBcnJheU9mPFBy
b3RvY29sOjpDU1M6OkNTU1Byb3BlcnR5Pjo6Y3JlYXRlKCk7CisgICAgYXV0byBzaG9ydGhhbmRF
bnRyaWVzID0gQXJyYXlPZjxQcm90b2NvbDo6Q1NTOjpTaG9ydGhhbmRFbnRyeT46OmNyZWF0ZSgp
OworICAgIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8UHJvdG9jb2w6OkNTUzo6Q1NTUHJvcGVydHk+
PiBwcm9wZXJ0eU5hbWVUb1ByZXZpb3VzQWN0aXZlUHJvcGVydHk7CiAgICAgSGFzaFNldDxTdHJp
bmc+IGZvdW5kU2hvcnRoYW5kczsKICAgICBTdHJpbmcgcHJldmlvdXNQcmlvcml0eTsKICAgICBT
dHJpbmcgcHJldmlvdXNTdGF0dXM7CkBAIC02NDEsOSArNjQzLDkgQEAgUmVmPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+IEluc3BlY3RvclN0eWxlOjpzdHlsZVdpdGhQcm9wZXJ0
aWVzKCkgY28KICAgICAgICAgY29uc3QgQ1NTUHJvcGVydHlTb3VyY2VEYXRhJiBwcm9wZXJ0eUVu
dHJ5ID0gaXQtPnNvdXJjZURhdGE7CiAgICAgICAgIGNvbnN0IFN0cmluZyYgbmFtZSA9IHByb3Bl
cnR5RW50cnkubmFtZTsKIAotICAgICAgICBhdXRvIHN0YXR1cyA9IGl0LT5kaXNhYmxlZCA/IElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUHJvcGVydHlTdGF0dXM6OkRpc2FibGVkIDogSW5z
cGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0eVN0YXR1czo6QWN0aXZlOworICAgICAg
ICBhdXRvIHN0YXR1cyA9IGl0LT5kaXNhYmxlZCA/IFByb3RvY29sOjpDU1M6OkNTU1Byb3BlcnR5
U3RhdHVzOjpEaXNhYmxlZCA6IFByb3RvY29sOjpDU1M6OkNTU1Byb3BlcnR5U3RhdHVzOjpBY3Rp
dmU7CiAKLSAgICAgICAgYXV0byBwcm9wZXJ0eSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6
Q1NTUHJvcGVydHk6OmNyZWF0ZSgpCisgICAgICAgIGF1dG8gcHJvcGVydHkgPSBQcm90b2NvbDo6
Q1NTOjpDU1NQcm9wZXJ0eTo6Y3JlYXRlKCkKICAgICAgICAgICAgIC5zZXROYW1lKG5hbWUuY29u
dmVydFRvQVNDSUlMb3dlcmNhc2UoKSkKICAgICAgICAgICAgIC5zZXRWYWx1ZShwcm9wZXJ0eUVu
dHJ5LnZhbHVlKQogICAgICAgICAgICAgLnJlbGVhc2UoKTsKQEAgLTY2OSw3ICs2NzEsOCBAQCBS
ZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4gSW5zcGVjdG9yU3R5bGU6OnN0
eWxlV2l0aFByb3BlcnRpZXMoKSBjbwogICAgICAgICAgICAgU291cmNlUmFuZ2UgYWJzb2x1dGVQ
cm9wZXJ0eVJhbmdlID0gcHJvcGVydHlFbnRyeS5yYW5nZTsKICAgICAgICAgICAgIGFic29sdXRl
UHJvcGVydHlSYW5nZS5zdGFydCArPSBydWxlQm9keVJhbmdlU3RhcnQ7CiAgICAgICAgICAgICBh
YnNvbHV0ZVByb3BlcnR5UmFuZ2UuZW5kICs9IHJ1bGVCb2R5UmFuZ2VTdGFydDsKLSAgICAgICAg
ICAgIHByb3BlcnR5LT5zZXRSYW5nZShidWlsZFNvdXJjZVJhbmdlT2JqZWN0KGFic29sdXRlUHJv
cGVydHlSYW5nZSwgbGluZUVuZGluZ3MpKTsKKyAgICAgICAgICAgIGlmIChhdXRvIHJhbmdlID0g
YnVpbGRTb3VyY2VSYW5nZU9iamVjdChhYnNvbHV0ZVByb3BlcnR5UmFuZ2UsIGxpbmVFbmRpbmdz
KSkKKyAgICAgICAgICAgICAgICBwcm9wZXJ0eS0+c2V0UmFuZ2UocmFuZ2UucmVsZWFzZU5vbk51
bGwoKSk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoIWl0LT5kaXNhYmxlZCkgewpAQCAtNjgz
LDMwICs2ODYsMzUgQEAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+IElu
c3BlY3RvclN0eWxlOjpzdHlsZVdpdGhQcm9wZXJ0aWVzKCkgY28KIAogICAgICAgICAgICAgICAg
IC8vIENhbm9uaWNhbGl6ZSBwcm9wZXJ0eSBuYW1lcyB0byB0cmVhdCBub24tcHJlZml4ZWQgYW5k
IHZlbmRvci1wcmVmaXhlZCBwcm9wZXJ0eSBuYW1lcyB0aGUgc2FtZSAob3BhY2l0eSB2cy4gLXdl
YmtpdC1vcGFjaXR5KS4KICAgICAgICAgICAgICAgICBTdHJpbmcgY2Fub25pY2FsUHJvcGVydHlO
YW1lID0gcHJvcGVydHlJZCA/IGdldFByb3BlcnR5TmFtZVN0cmluZyhwcm9wZXJ0eUlkKSA6IG5h
bWU7Ci0gICAgICAgICAgICAgICAgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpDU1M6OkNTU1Byb3BlcnR5Pj46Oml0ZXJhdG9yIGFjdGl2ZUl0ID0gcHJvcGVydHlO
YW1lVG9QcmV2aW91c0FjdGl2ZVByb3BlcnR5LmZpbmQoY2Fub25pY2FsUHJvcGVydHlOYW1lKTsK
KyAgICAgICAgICAgICAgICBIYXNoTWFwPFN0cmluZywgUmVmUHRyPFByb3RvY29sOjpDU1M6OkNT
U1Byb3BlcnR5Pj46Oml0ZXJhdG9yIGFjdGl2ZUl0ID0gcHJvcGVydHlOYW1lVG9QcmV2aW91c0Fj
dGl2ZVByb3BlcnR5LmZpbmQoY2Fub25pY2FsUHJvcGVydHlOYW1lKTsKICAgICAgICAgICAgICAg
ICBpZiAoYWN0aXZlSXQgIT0gcHJvcGVydHlOYW1lVG9QcmV2aW91c0FjdGl2ZVByb3BlcnR5LmVu
ZCgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0eUVudHJ5LnBhcnNlZE9rKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBib29sIHN1Y2Nlc3NQcmlvcml0eSA9IGFjdGl2ZUl0
LT52YWx1ZS0+Z2V0U3RyaW5nKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUHJvcGVydHk6
OlByaW9yaXR5LCBwcmV2aW91c1ByaW9yaXR5KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJv
b2wgc3VjY2Vzc1N0YXR1cyA9IGFjdGl2ZUl0LT52YWx1ZS0+Z2V0U3RyaW5nKEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkNTUzo6Q1NTUHJvcGVydHk6OlN0YXR1cywgcHJldmlvdXNTdGF0dXMpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Y2Nlc3NTdGF0dXMgJiYgcHJldmlvdXNTdGF0dXMg
IT0gImluYWN0aXZlIikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0
eUVudHJ5LmltcG9ydGFudCB8fCAhc3VjY2Vzc1ByaW9yaXR5KSAvLyBQcmlvcml0eSBub3Qgc2V0
ID09ICJub3QgaW1wb3J0YW50Ii4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hv
dWxkSW5hY3RpdmF0ZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBp
ZiAoc3RhdHVzID09IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUHJvcGVydHlTdGF0dXM6
OkFjdGl2ZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJbmFjdGl2YXRl
IGEgbm9uLWltcG9ydGFudCBwcm9wZXJ0eSBmb2xsb3dpbmcgdGhlIHNhbWUtbmFtZWQgaW1wb3J0
YW50IHByb3BlcnR5LgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSBJ
bnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1Byb3BlcnR5U3RhdHVzOjpJbmFjdGl2ZTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGF1dG8gbmV3UHJpb3JpdHkgPSBhY3RpdmVJdC0+dmFsdWUt
PmdldFN0cmluZyhQcm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0eTo6cHJpb3JpdHlLZXkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCEhbmV3UHJpb3JpdHkpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcHJldmlvdXNQcmlvcml0eSA9IG5ld1ByaW9yaXR5OworCisgICAgICAgICAg
ICAgICAgICAgICAgICBhdXRvIG5ld1N0YXR1cyA9IGFjdGl2ZUl0LT52YWx1ZS0+Z2V0U3RyaW5n
KFByb3RvY29sOjpDU1M6OkNTU1Byb3BlcnR5OjpzdGF0dXNLZXkpOworICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCEhbmV3U3RhdHVzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cHJldmlvdXNTdGF0dXMgPSBuZXdTdGF0dXM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHByZXZpb3VzU3RhdHVzICE9IFByb3RvY29sOjpIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRW
YWx1ZShQcm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0eVN0YXR1czo6SW5hY3RpdmUpKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0eUVudHJ5LmltcG9ydGFudCB8
fCAhIW5ld1ByaW9yaXR5KSAvLyBQcmlvcml0eSBub3Qgc2V0ID09ICJub3QgaW1wb3J0YW50Ii4K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3VsZEluYWN0aXZhdGUgPSB0
cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChzdGF0dXMgPT0g
UHJvdG9jb2w6OkNTUzo6Q1NTUHJvcGVydHlTdGF0dXM6OkFjdGl2ZSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gSW5hY3RpdmF0ZSBhIG5vbi1pbXBvcnRhbnQgcHJv
cGVydHkgZm9sbG93aW5nIHRoZSBzYW1lLW5hbWVkIGltcG9ydGFudCBwcm9wZXJ0eS4KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IFByb3RvY29sOjpDU1M6OkNT
U1Byb3BlcnR5U3RhdHVzOjpJbmFjdGl2ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGJvb2wgcHJldmlvdXNQYXJzZWRPazsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wg
c3VjY2VzcyA9IGFjdGl2ZUl0LT52YWx1ZS0+Z2V0Qm9vbGVhbihJbnNwZWN0b3I6OlByb3RvY29s
OjpDU1M6OkNTU1Byb3BlcnR5OjpQYXJzZWRPaywgcHJldmlvdXNQYXJzZWRPayk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoc3VjY2VzcyAmJiAhcHJldmlvdXNQYXJzZWRPaykKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGF1dG8gcHJldmlvdXNQYXJzZWRPayA9IGFjdGl2ZUl0LT52YWx1
ZS0+Z2V0Qm9vbGVhbihQcm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0eTo6cGFyc2VkT2tLZXkpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByZXZpb3VzUGFyc2VkT2sgJiYgIXByZXZpb3Vz
UGFyc2VkT2spCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvdWxkSW5hY3RpdmF0ZSA9
IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9IGVsc2UKICAg
ICAgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lVG9QcmV2aW91c0FjdGl2ZVByb3BlcnR5LnNl
dChjYW5vbmljYWxQcm9wZXJ0eU5hbWUsIHByb3BlcnR5LmNvcHlSZWYoKSk7CiAKICAgICAgICAg
ICAgICAgICBpZiAoc2hvdWxkSW5hY3RpdmF0ZSkgewotICAgICAgICAgICAgICAgICAgICBhY3Rp
dmVJdC0+dmFsdWUtPnNldFN0YXR1cyhJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1Byb3Bl
cnR5U3RhdHVzOjpJbmFjdGl2ZSk7CisgICAgICAgICAgICAgICAgICAgIGFjdGl2ZUl0LT52YWx1
ZS0+c2V0U3RhdHVzKFByb3RvY29sOjpDU1M6OkNTU1Byb3BlcnR5U3RhdHVzOjpJbmFjdGl2ZSk7
CiAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZVRvUHJldmlvdXNBY3RpdmVQcm9wZXJ0
eS5zZXQoY2Fub25pY2FsUHJvcGVydHlOYW1lLCBwcm9wZXJ0eS5jb3B5UmVmKCkpOwogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSB7CkBAIC03MTQsMTMgKzcyMiwxMyBAQCBS
ZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4gSW5zcGVjdG9yU3R5bGU6OnN0
eWxlV2l0aFByb3BlcnRpZXMoKSBjbwogICAgICAgICAgICAgICAgIC8vIERlZmF1bHQgImltcGxp
Y2l0IiA9PSBmYWxzZS4KICAgICAgICAgICAgICAgICBpZiAoaW1wbGljaXQpCiAgICAgICAgICAg
ICAgICAgICAgIHByb3BlcnR5LT5zZXRJbXBsaWNpdCh0cnVlKTsKLSAgICAgICAgICAgICAgICBz
dGF0dXMgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1Byb3BlcnR5U3RhdHVzOjpTdHls
ZTsKKyAgICAgICAgICAgICAgICBzdGF0dXMgPSBQcm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0eVN0
YXR1czo6U3R5bGU7CiAKICAgICAgICAgICAgICAgICBTdHJpbmcgc2hvcnRoYW5kID0gbV9zdHls
ZS0+Z2V0UHJvcGVydHlTaG9ydGhhbmQobmFtZSk7CiAgICAgICAgICAgICAgICAgaWYgKCFzaG9y
dGhhbmQuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmICghZm91bmRTaG9ydGhh
bmRzLmNvbnRhaW5zKHNob3J0aGFuZCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5k
U2hvcnRoYW5kcy5hZGQoc2hvcnRoYW5kKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8g
ZW50cnkgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlNob3J0aGFuZEVudHJ5OjpjcmVhdGUo
KQorICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBlbnRyeSA9IFByb3RvY29sOjpDU1M6OlNo
b3J0aGFuZEVudHJ5OjpjcmVhdGUoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRO
YW1lKHNob3J0aGFuZCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0VmFsdWUoc2hv
cnRoYW5kVmFsdWUoc2hvcnRoYW5kKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVs
ZWFzZSgpOwpAQCAtNzMxLDExICs3MzksMTEgQEAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNT
Uzo6Q1NTU3R5bGU+IEluc3BlY3RvclN0eWxlOjpzdHlsZVdpdGhQcm9wZXJ0aWVzKCkgY28KICAg
ICAgICAgfQogCiAgICAgICAgIC8vIERlZmF1bHQgInN0YXR1cyIgPT0gInN0eWxlIi4KLSAgICAg
ICAgaWYgKHN0YXR1cyAhPSBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1Byb3BlcnR5U3Rh
dHVzOjpTdHlsZSkKKyAgICAgICAgaWYgKHN0YXR1cyAhPSBQcm90b2NvbDo6Q1NTOjpDU1NQcm9w
ZXJ0eVN0YXR1czo6U3R5bGUpCiAgICAgICAgICAgICBwcm9wZXJ0eS0+c2V0U3RhdHVzKHN0YXR1
cyk7CiAgICAgfQogCi0gICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5
bGU6OmNyZWF0ZSgpCisgICAgcmV0dXJuIFByb3RvY29sOjpDU1M6OkNTU1N0eWxlOjpjcmVhdGUo
KQogICAgICAgICAuc2V0Q3NzUHJvcGVydGllcyhXVEZNb3ZlKHByb3BlcnRpZXNPYmplY3QpKQog
ICAgICAgICAuc2V0U2hvcnRoYW5kRW50cmllcyhXVEZNb3ZlKHNob3J0aGFuZEVudHJpZXMpKQog
ICAgICAgICAucmVsZWFzZSgpOwpAQCAtODA1LDcgKzgxMyw3IEBAIFZlY3RvcjxTdHJpbmc+IElu
c3BlY3RvclN0eWxlOjpsb25naGFuZFByb3BlcnRpZXMoY29uc3QgU3RyaW5nJiBzaG9ydGhhbmRQ
cm9wZXJ0CiAgICAgcmV0dXJuIHByb3BlcnRpZXM7CiB9CiAKLVJlZjxJbnNwZWN0b3JTdHlsZVNo
ZWV0PiBJbnNwZWN0b3JTdHlsZVNoZWV0OjpjcmVhdGUoSW5zcGVjdG9yUGFnZUFnZW50KiBwYWdl
QWdlbnQsIGNvbnN0IFN0cmluZyYgaWQsIFJlZlB0cjxDU1NTdHlsZVNoZWV0PiYmIHBhZ2VTdHls
ZVNoZWV0LCBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW4gb3JpZ2lu
LCBjb25zdCBTdHJpbmcmIGRvY3VtZW50VVJMLCBMaXN0ZW5lciogbGlzdGVuZXIpCitSZWY8SW5z
cGVjdG9yU3R5bGVTaGVldD4gSW5zcGVjdG9yU3R5bGVTaGVldDo6Y3JlYXRlKEluc3BlY3RvclBh
Z2VBZ2VudCogcGFnZUFnZW50LCBjb25zdCBTdHJpbmcmIGlkLCBSZWZQdHI8Q1NTU3R5bGVTaGVl
dD4mJiBwYWdlU3R5bGVTaGVldCwgUHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbiBvcmln
aW4sIGNvbnN0IFN0cmluZyYgZG9jdW1lbnRVUkwsIExpc3RlbmVyKiBsaXN0ZW5lcikKIHsKICAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJbnNwZWN0b3JTdHlsZVNoZWV0KHBhZ2VBZ2VudCwgaWQs
IFdURk1vdmUocGFnZVN0eWxlU2hlZXQpLCBvcmlnaW4sIGRvY3VtZW50VVJMLCBsaXN0ZW5lcikp
OwogfQpAQCAtODE3LDcgKzgyNSw3IEBAIFN0cmluZyBJbnNwZWN0b3JTdHlsZVNoZWV0OjpzdHls
ZVNoZWV0VVJMKENTU1N0eWxlU2hlZXQqIHBhZ2VTdHlsZVNoZWV0KQogICAgIHJldHVybiBlbXB0
eVN0cmluZygpOwogfQogCi1JbnNwZWN0b3JTdHlsZVNoZWV0OjpJbnNwZWN0b3JTdHlsZVNoZWV0
KEluc3BlY3RvclBhZ2VBZ2VudCogcGFnZUFnZW50LCBjb25zdCBTdHJpbmcmIGlkLCBSZWZQdHI8
Q1NTU3R5bGVTaGVldD4mJiBwYWdlU3R5bGVTaGVldCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NT
OjpTdHlsZVNoZWV0T3JpZ2luIG9yaWdpbiwgY29uc3QgU3RyaW5nJiBkb2N1bWVudFVSTCwgTGlz
dGVuZXIqIGxpc3RlbmVyKQorSW5zcGVjdG9yU3R5bGVTaGVldDo6SW5zcGVjdG9yU3R5bGVTaGVl
dChJbnNwZWN0b3JQYWdlQWdlbnQqIHBhZ2VBZ2VudCwgY29uc3QgU3RyaW5nJiBpZCwgUmVmUHRy
PENTU1N0eWxlU2hlZXQ+JiYgcGFnZVN0eWxlU2hlZXQsIFByb3RvY29sOjpDU1M6OlN0eWxlU2hl
ZXRPcmlnaW4gb3JpZ2luLCBjb25zdCBTdHJpbmcmIGRvY3VtZW50VVJMLCBMaXN0ZW5lciogbGlz
dGVuZXIpCiAgICAgOiBtX3BhZ2VBZ2VudChwYWdlQWdlbnQpCiAgICAgLCBtX2lkKGlkKQogICAg
ICwgbV9wYWdlU3R5bGVTaGVldChXVEZNb3ZlKHBhZ2VTdHlsZVNoZWV0KSkKQEAgLTk0Nyw3ICs5
NTUsNyBAQCBFeGNlcHRpb25PcjxDU1NTdHlsZVJ1bGUqPiBJbnNwZWN0b3JTdHlsZVNoZWV0Ojph
ZGRSdWxlKGNvbnN0IFN0cmluZyYgc2VsZWN0b3IpCiAgICAgc2V0VGV4dChzdHlsZVNoZWV0VGV4
dC50b1N0cmluZygpKTsKIAogICAgIC8vIEluc3BlY3RvciBTdHlsZSBTaGVldHMgYXJlIGFsd2F5
cyB0cmVhdGVkIGFzIHRob3VnaCB0aGVpciBwYXJzZWQgZGF0YSBpcyByZWFkeS4KLSAgICBpZiAo
bV9vcmlnaW4gPT0gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luOjpJ
bnNwZWN0b3IpCisgICAgaWYgKG1fb3JpZ2luID09IFByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRP
cmlnaW46Okluc3BlY3RvcikKICAgICAgICAgZmlyZVN0eWxlU2hlZXRDaGFuZ2VkKCk7CiAgICAg
ZWxzZQogICAgICAgICByZXBhcnNlU3R5bGVTaGVldChzdHlsZVNoZWV0VGV4dC50b1N0cmluZygp
KTsKQEAgLTEwMDcsNyArMTAxNSw3IEBAIENTU1N0eWxlUnVsZSogSW5zcGVjdG9yU3R5bGVTaGVl
dDo6cnVsZUZvcklkKGNvbnN0IEluc3BlY3RvckNTU0lkJiBpZCkgY29uc3QKICAgICByZXR1cm4g
aWQub3JkaW5hbCgpID49IG1fZmxhdFJ1bGVzLnNpemUoKSA/IG51bGxwdHIgOiBtX2ZsYXRSdWxl
cy5hdChpZC5vcmRpbmFsKCkpLmdldCgpOwogfQogCi1SZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6Q1NTOjpDU1NTdHlsZVNoZWV0Qm9keT4gSW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGRPYmpl
Y3RGb3JTdHlsZVNoZWV0KCkKK1JlZlB0cjxQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZVNoZWV0Qm9k
eT4gSW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGRPYmplY3RGb3JTdHlsZVNoZWV0KCkKIHsKICAg
ICBDU1NTdHlsZVNoZWV0KiBzdHlsZVNoZWV0ID0gcGFnZVN0eWxlU2hlZXQoKTsKICAgICBpZiAo
IXN0eWxlU2hlZXQpCkBAIC0xMDE1LDcgKzEwMjMsNyBAQCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6Q1NTOjpDU1NTdHlsZVNoZWV0Qm9keT4gSW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGRP
YgogCiAgICAgUmVmUHRyPENTU1J1bGVMaXN0PiBjc3NSdWxlTGlzdCA9IGFzQ1NTUnVsZUxpc3Qo
c3R5bGVTaGVldCk7CiAKLSAgICBhdXRvIHJlc3VsdCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNT
Uzo6Q1NTU3R5bGVTaGVldEJvZHk6OmNyZWF0ZSgpCisgICAgYXV0byByZXN1bHQgPSBQcm90b2Nv
bDo6Q1NTOjpDU1NTdHlsZVNoZWV0Qm9keTo6Y3JlYXRlKCkKICAgICAgICAgLnNldFN0eWxlU2hl
ZXRJZChpZCgpKQogICAgICAgICAuc2V0UnVsZXMoYnVpbGRBcnJheUZvclJ1bGVMaXN0KGNzc1J1
bGVMaXN0LmdldCgpKSkKICAgICAgICAgLnJlbGVhc2UoKTsKQEAgLTEwMjcsNyArMTAzNSw3IEBA
IFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlU2hlZXRCb2R5PiBJbnNw
ZWN0b3JTdHlsZVNoZWV0OjpidWlsZE9iCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGVTaGVldEhlYWRlcj4gSW5zcGVjdG9y
U3R5bGVTaGVldDo6YnVpbGRPYmplY3RGb3JTdHlsZVNoZWV0SW5mbygpCitSZWZQdHI8UHJvdG9j
b2w6OkNTUzo6Q1NTU3R5bGVTaGVldEhlYWRlcj4gSW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGRP
YmplY3RGb3JTdHlsZVNoZWV0SW5mbygpCiB7CiAgICAgQ1NTU3R5bGVTaGVldCogc3R5bGVTaGVl
dCA9IHBhZ2VTdHlsZVNoZWV0KCk7CiAgICAgaWYgKCFzdHlsZVNoZWV0KQpAQCAtMTAzNSw3ICsx
MDQzLDcgQEAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGVTaGVldEhl
YWRlcj4gSW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGQKIAogICAgIERvY3VtZW50KiBkb2N1bWVu
dCA9IHN0eWxlU2hlZXQtPm93bmVyRG9jdW1lbnQoKTsKICAgICBGcmFtZSogZnJhbWUgPSBkb2N1
bWVudCA/IGRvY3VtZW50LT5mcmFtZSgpIDogbnVsbHB0cjsKLSAgICByZXR1cm4gSW5zcGVjdG9y
OjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZVNoZWV0SGVhZGVyOjpjcmVhdGUoKQorICAgIHJldHVy
biBQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZVNoZWV0SGVhZGVyOjpjcmVhdGUoKQogICAgICAgICAu
c2V0U3R5bGVTaGVldElkKGlkKCkpCiAgICAgICAgIC5zZXRPcmlnaW4obV9vcmlnaW4pCiAgICAg
ICAgIC5zZXREaXNhYmxlZChzdHlsZVNoZWV0LT5kaXNhYmxlZCgpKQpAQCAtMTA0OCw5ICsxMDU2
LDkgQEAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGVTaGVldEhlYWRl
cj4gSW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGQKICAgICAgICAgLnJlbGVhc2UoKTsKIH0KIAot
c3RhdGljIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1NlbGVjdG9yPiBidWlsZE9i
amVjdEZvclNlbGVjdG9ySGVscGVyKGNvbnN0IFN0cmluZyYgc2VsZWN0b3JUZXh0LCBjb25zdCBD
U1NTZWxlY3RvciYgc2VsZWN0b3IpCitzdGF0aWMgUmVmPFByb3RvY29sOjpDU1M6OkNTU1NlbGVj
dG9yPiBidWlsZE9iamVjdEZvclNlbGVjdG9ySGVscGVyKGNvbnN0IFN0cmluZyYgc2VsZWN0b3JU
ZXh0LCBjb25zdCBDU1NTZWxlY3RvciYgc2VsZWN0b3IpCiB7Ci0gICAgYXV0byBpbnNwZWN0b3JT
ZWxlY3RvciA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU2VsZWN0b3I6OmNyZWF0ZSgp
CisgICAgYXV0byBpbnNwZWN0b3JTZWxlY3RvciA9IFByb3RvY29sOjpDU1M6OkNTU1NlbGVjdG9y
OjpjcmVhdGUoKQogICAgICAgICAuc2V0VGV4dChzZWxlY3RvclRleHQpCiAgICAgICAgIC5yZWxl
YXNlKCk7CiAKQEAgLTEwNjUsMTEgKzEwNzMsMTEgQEAgc3RhdGljIFJlZjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpDU1M6OkNTU1NlbGVjdG9yPiBidWlsZE9iamVjdEZvclNlbGVjdG9ySGVscGVyKGMK
ICAgICByZXR1cm4gaW5zcGVjdG9yU2VsZWN0b3I7CiB9CiAKLXN0YXRpYyBSZWY8SlNPTjo6QXJy
YXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1NlbGVjdG9yPj4gc2VsZWN0b3JzRnJv
bVNvdXJjZShjb25zdCBDU1NSdWxlU291cmNlRGF0YSogc291cmNlRGF0YSwgY29uc3QgU3RyaW5n
JiBzaGVldFRleHQsIGNvbnN0IENTU1NlbGVjdG9yTGlzdCYgc2VsZWN0b3JMaXN0KQorc3RhdGlj
IFJlZjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpDU1M6OkNTU1NlbGVjdG9yPj4gc2VsZWN0b3Jz
RnJvbVNvdXJjZShjb25zdCBDU1NSdWxlU291cmNlRGF0YSogc291cmNlRGF0YSwgY29uc3QgU3Ry
aW5nJiBzaGVldFRleHQsIGNvbnN0IENTU1NlbGVjdG9yTGlzdCYgc2VsZWN0b3JMaXN0KQogewog
ICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxKU0M6OllhcnI6OlJlZ3VsYXJFeHByZXNzaW9uPiBj
b21tZW50KCIvXFwqW15dKj9cXCovIiwgSlNDOjpZYXJyOjpUZXh0Q2FzZVNlbnNpdGl2ZSwgSlND
OjpZYXJyOjpNdWx0aWxpbmVFbmFibGVkKTsKIAotICAgIGF1dG8gcmVzdWx0ID0gSlNPTjo6QXJy
YXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1NlbGVjdG9yPjo6Y3JlYXRlKCk7Cisg
ICAgYXV0byByZXN1bHQgPSBKU09OOjpBcnJheU9mPFByb3RvY29sOjpDU1M6OkNTU1NlbGVjdG9y
Pjo6Y3JlYXRlKCk7CiAgICAgY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yID0gc2VsZWN0b3JM
aXN0LmZpcnN0KCk7CiAgICAgZm9yIChhdXRvJiByYW5nZSA6IHNvdXJjZURhdGEtPnNlbGVjdG9y
UmFuZ2VzKSB7CiAgICAgICAgIC8vIElmIHdlIGRvbid0IGhhdmUgYSBzZWxlY3RvciwgdGhhdCBt
ZWFucyB0aGUgU291cmNlRGF0YSBmb3IgdGhpcyBDU1NTdHlsZVNoZWV0CkBAIC0xMDg5LDE3ICsx
MDk3LDE3IEBAIHN0YXRpYyBSZWY8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpD
U1M6OkNTU1NlbGVjdG9yPj4gc2VsZWN0b3JzRnJvbVNvCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAotUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU2VsZWN0b3I+IEluc3BlY3RvclN0
eWxlU2hlZXQ6OmJ1aWxkT2JqZWN0Rm9yU2VsZWN0b3IoY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVj
dG9yKQorUmVmPFByb3RvY29sOjpDU1M6OkNTU1NlbGVjdG9yPiBJbnNwZWN0b3JTdHlsZVNoZWV0
OjpidWlsZE9iamVjdEZvclNlbGVjdG9yKGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvcikKIHsK
ICAgICByZXR1cm4gYnVpbGRPYmplY3RGb3JTZWxlY3RvckhlbHBlcihzZWxlY3Rvci0+c2VsZWN0
b3JUZXh0KCksICpzZWxlY3Rvcik7CiB9CiAKLVJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6
OlNlbGVjdG9yTGlzdD4gSW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGRPYmplY3RGb3JTZWxlY3Rv
ckxpc3QoQ1NTU3R5bGVSdWxlKiBydWxlLCBpbnQmIGVuZGluZ0xpbmUpCitSZWY8UHJvdG9jb2w6
OkNTUzo6U2VsZWN0b3JMaXN0PiBJbnNwZWN0b3JTdHlsZVNoZWV0OjpidWlsZE9iamVjdEZvclNl
bGVjdG9yTGlzdChDU1NTdHlsZVJ1bGUqIHJ1bGUsIGludCYgZW5kaW5nTGluZSkKIHsKICAgICBS
ZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+IHNvdXJjZURhdGE7CiAgICAgaWYgKGVuc3VyZVBhcnNl
ZERhdGFSZWFkeSgpKQogICAgICAgICBzb3VyY2VEYXRhID0gcnVsZVNvdXJjZURhdGFGb3IoJnJ1
bGUtPnN0eWxlKCkpOwotICAgIFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkNTUzo6Q1NTU2VsZWN0b3I+PiBzZWxlY3RvcnM7CisgICAgUmVmUHRyPEpTT046OkFycmF5
T2Y8UHJvdG9jb2w6OkNTUzo6Q1NTU2VsZWN0b3I+PiBzZWxlY3RvcnM7CiAKICAgICAvLyBUaGlz
IGludGVudGlvbmFsbHkgZG9lcyBub3QgcmVseSBvbiB0aGUgc291cmNlIGRhdGEgdG8gYXZvaWQg
Y2F0Y2hpbmcgdGhlIHRyYWlsaW5nIGNvbW1lbnRzIChiZWZvcmUgdGhlIGRlY2xhcmF0aW9uIHN0
YXJ0aW5nICd7JykuCiAgICAgU3RyaW5nIHNlbGVjdG9yVGV4dCA9IHJ1bGUtPnNlbGVjdG9yVGV4
dCgpOwpAQCAtMTEwNyw0MSArMTExNSw0MiBAQCBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NT
OjpTZWxlY3Rvckxpc3Q+IEluc3BlY3RvclN0eWxlU2hlZXQ6OmJ1aWxkT2JqZWN0Rm9yUwogICAg
IGlmIChzb3VyY2VEYXRhKQogICAgICAgICBzZWxlY3RvcnMgPSBzZWxlY3RvcnNGcm9tU291cmNl
KHNvdXJjZURhdGEuZ2V0KCksIG1fcGFyc2VkU3R5bGVTaGVldC0+dGV4dCgpLCBydWxlLT5zdHls
ZVJ1bGUoKS5zZWxlY3Rvckxpc3QoKSk7CiAgICAgZWxzZSB7Ci0gICAgICAgIHNlbGVjdG9ycyA9
IEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTZWxlY3Rvcj46OmNy
ZWF0ZSgpOworICAgICAgICBzZWxlY3RvcnMgPSBKU09OOjpBcnJheU9mPFByb3RvY29sOjpDU1M6
OkNTU1NlbGVjdG9yPjo6Y3JlYXRlKCk7CiAgICAgICAgIGNvbnN0IENTU1NlbGVjdG9yTGlzdCYg
c2VsZWN0b3JMaXN0ID0gcnVsZS0+c3R5bGVSdWxlKCkuc2VsZWN0b3JMaXN0KCk7CiAgICAgICAg
IGZvciAoY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yID0gc2VsZWN0b3JMaXN0LmZpcnN0KCk7
IHNlbGVjdG9yOyBzZWxlY3RvciA9IENTU1NlbGVjdG9yTGlzdDo6bmV4dChzZWxlY3RvcikpCiAg
ICAgICAgICAgICBzZWxlY3RvcnMtPmFkZEl0ZW0oYnVpbGRPYmplY3RGb3JTZWxlY3RvcihzZWxl
Y3RvcikpOwogICAgIH0KLSAgICBhdXRvIHJlc3VsdCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNT
Uzo6U2VsZWN0b3JMaXN0OjpjcmVhdGUoKQotICAgICAgICAuc2V0U2VsZWN0b3JzKFdURk1vdmUo
c2VsZWN0b3JzKSkKKyAgICBhdXRvIHJlc3VsdCA9IFByb3RvY29sOjpDU1M6OlNlbGVjdG9yTGlz
dDo6Y3JlYXRlKCkKKyAgICAgICAgLnNldFNlbGVjdG9ycyhzZWxlY3RvcnMucmVsZWFzZU5vbk51
bGwoKSkKICAgICAgICAgLnNldFRleHQoc2VsZWN0b3JUZXh0KQogICAgICAgICAucmVsZWFzZSgp
OwotICAgIGlmIChzb3VyY2VEYXRhKQotICAgICAgICByZXN1bHQtPnNldFJhbmdlKGJ1aWxkU291
cmNlUmFuZ2VPYmplY3Qoc291cmNlRGF0YS0+cnVsZUhlYWRlclJhbmdlLCBsaW5lRW5kaW5ncygp
LCAmZW5kaW5nTGluZSkpOworICAgIGlmIChzb3VyY2VEYXRhKSB7CisgICAgICAgIGlmIChhdXRv
IHJhbmdlID0gYnVpbGRTb3VyY2VSYW5nZU9iamVjdChzb3VyY2VEYXRhLT5ydWxlSGVhZGVyUmFu
Z2UsIGxpbmVFbmRpbmdzKCksICZlbmRpbmdMaW5lKSkKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0
UmFuZ2UocmFuZ2UucmVsZWFzZU5vbk51bGwoKSk7CisgICAgfQogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKLVJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1J1bGU+IEluc3BlY3Rv
clN0eWxlU2hlZXQ6OmJ1aWxkT2JqZWN0Rm9yUnVsZShDU1NTdHlsZVJ1bGUqIHJ1bGUpCitSZWZQ
dHI8UHJvdG9jb2w6OkNTUzo6Q1NTUnVsZT4gSW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGRPYmpl
Y3RGb3JSdWxlKENTU1N0eWxlUnVsZSogcnVsZSkKIHsKICAgICBDU1NTdHlsZVNoZWV0KiBzdHls
ZVNoZWV0ID0gcGFnZVN0eWxlU2hlZXQoKTsKICAgICBpZiAoIXN0eWxlU2hlZXQpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwogCiAgICAgaW50IGVuZGluZ0xpbmUgPSAwOwotICAgIGF1dG8gcmVz
dWx0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NSdWxlOjpjcmVhdGUoKQorICAgIGF1
dG8gcmVzdWx0ID0gUHJvdG9jb2w6OkNTUzo6Q1NTUnVsZTo6Y3JlYXRlKCkKICAgICAgICAgLnNl
dFNlbGVjdG9yTGlzdChidWlsZE9iamVjdEZvclNlbGVjdG9yTGlzdChydWxlLCBlbmRpbmdMaW5l
KSkKICAgICAgICAgLnNldFNvdXJjZUxpbmUoZW5kaW5nTGluZSkKICAgICAgICAgLnNldE9yaWdp
bihtX29yaWdpbikKICAgICAgICAgLnNldFN0eWxlKGJ1aWxkT2JqZWN0Rm9yU3R5bGUoJnJ1bGUt
PnN0eWxlKCkpKQogICAgICAgICAucmVsZWFzZSgpOwogCi0gICAgaWYgKG1fb3JpZ2luID09IElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6QXV0aG9yIHx8IG1fb3Jp
Z2luID09IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6VXNlcikK
KyAgICBpZiAobV9vcmlnaW4gPT0gUHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6QXV0
aG9yIHx8IG1fb3JpZ2luID09IFByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW46OlVzZXIp
CiAgICAgICAgIHJlc3VsdC0+c2V0U291cmNlVVJMKGZpbmFsVVJMKCkpOwogCiAgICAgaWYgKGNh
bkJpbmQoKSkgewotICAgICAgICBJbnNwZWN0b3JDU1NJZCBpZChydWxlSWQocnVsZSkpOwotICAg
ICAgICBpZiAoIWlkLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0UnVsZUlkKGlk
LmFzUHJvdG9jb2xWYWx1ZTxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1J1bGVJZD4oKSk7
CisgICAgICAgIGlmIChhdXRvIHJ1bGVJZCA9IHRoaXMtPnJ1bGVJZChydWxlKS5hc1Byb3RvY29s
VmFsdWU8UHJvdG9jb2w6OkNTUzo6Q1NTUnVsZUlkPigpKQorICAgICAgICAgICAgcmVzdWx0LT5z
ZXRSdWxlSWQocnVsZUlkLnJlbGVhc2VOb25OdWxsKCkpOwogICAgIH0KIAogICAgIGF1dG8gZ3Jv
dXBpbmdzUGF5bG9hZCA9IGJ1aWxkQXJyYXlGb3JHcm91cGluZ3MoKnJ1bGUpOwpAQCAtMTE1MSw3
ICsxMTYwLDcgQEAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUnVsZT4gSW5z
cGVjdG9yU3R5bGVTaGVldDo6YnVpbGRPYmplY3RGb3JSdWwKICAgICByZXR1cm4gcmVzdWx0Owog
fQogCi1SZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4gSW5zcGVjdG9y
U3R5bGVTaGVldDo6YnVpbGRPYmplY3RGb3JTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHls
ZSkKK1JlZjxQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4gSW5zcGVjdG9yU3R5bGVTaGVldDo6YnVp
bGRPYmplY3RGb3JTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSkKIHsKICAgICBSZWZQ
dHI8Q1NTUnVsZVNvdXJjZURhdGE+IHNvdXJjZURhdGE7CiAgICAgaWYgKGVuc3VyZVBhcnNlZERh
dGFSZWFkeSgpKQpAQCAtMTE1OSwxMyArMTE2OCwxNSBAQCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6Q1NTOjpDU1NTdHlsZT4gSW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGRPYmplY3RGb3JT
dAogCiAgICAgSW5zcGVjdG9yQ1NTSWQgaWQgPSBydWxlT3JTdHlsZUlkKHN0eWxlKTsKICAgICBp
ZiAoaWQuaXNFbXB0eSgpKSB7Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpD
U1M6OkNTU1N0eWxlOjpjcmVhdGUoKQotICAgICAgICAgICAgLnNldENzc1Byb3BlcnRpZXMoQXJy
YXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1Byb3BlcnR5Pjo6Y3JlYXRlKCkpCi0g
ICAgICAgICAgICAuc2V0U2hvcnRoYW5kRW50cmllcyhBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkNTUzo6U2hvcnRoYW5kRW50cnk+OjpjcmVhdGUoKSkKKyAgICAgICAgcmV0dXJuIFByb3Rv
Y29sOjpDU1M6OkNTU1N0eWxlOjpjcmVhdGUoKQorICAgICAgICAgICAgLnNldENzc1Byb3BlcnRp
ZXMoQXJyYXlPZjxQcm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0eT46OmNyZWF0ZSgpKQorICAgICAg
ICAgICAgLnNldFNob3J0aGFuZEVudHJpZXMoQXJyYXlPZjxQcm90b2NvbDo6Q1NTOjpTaG9ydGhh
bmRFbnRyeT46OmNyZWF0ZSgpKQogICAgICAgICAgICAgLnJlbGVhc2UoKTsKICAgICB9CisKICAg
ICBSZWZQdHI8SW5zcGVjdG9yU3R5bGU+IGluc3BlY3RvclN0eWxlID0gaW5zcGVjdG9yU3R5bGVG
b3JJZChpZCk7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+
IHJlc3VsdCA9IGluc3BlY3RvclN0eWxlLT5idWlsZE9iamVjdEZvclN0eWxlKCk7CisKKyAgICBh
dXRvIHJlc3VsdCA9IGluc3BlY3RvclN0eWxlLT5idWlsZE9iamVjdEZvclN0eWxlKCk7CiAKICAg
ICAvLyBTdHlsZSB0ZXh0IGNhbm5vdCBiZSByZXRyaWV2ZWQgd2l0aG91dCBzdHlsZXNoZWV0LCBz
byBzZXQgY3NzVGV4dCBoZXJlLgogICAgIGlmIChzb3VyY2VEYXRhKSB7CkBAIC0xMjc0LDcgKzEy
ODUsNyBAQCBib29sIEluc3BlY3RvclN0eWxlU2hlZXQ6OnN0eWxlU2hlZXRNdXRhdGVkKCkgY29u
c3QKIAogYm9vbCBJbnNwZWN0b3JTdHlsZVNoZWV0OjplbnN1cmVQYXJzZWREYXRhUmVhZHkoKQog
ewotICAgIGJvb2wgYWxsb3dQYXJzZWREYXRhID0gbV9vcmlnaW4gPT0gSW5zcGVjdG9yOjpQcm90
b2NvbDo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luOjpJbnNwZWN0b3IgfHwgIXN0eWxlU2hlZXRNdXRh
dGVkKCk7CisgICAgYm9vbCBhbGxvd1BhcnNlZERhdGEgPSBtX29yaWdpbiA9PSBQcm90b2NvbDo6
Q1NTOjpTdHlsZVNoZWV0T3JpZ2luOjpJbnNwZWN0b3IgfHwgIXN0eWxlU2hlZXRNdXRhdGVkKCk7
CiAgICAgcmV0dXJuIGFsbG93UGFyc2VkRGF0YSAmJiBlbnN1cmVUZXh0KCkgJiYgZW5zdXJlU291
cmNlRGF0YSgpOwogfQogCkBAIC0xMzcxLDcgKzEzODIsNyBAQCBJbnNwZWN0b3JDU1NJZCBJbnNw
ZWN0b3JTdHlsZVNoZWV0OjpydWxlSWQoQ1NTU3R5bGVSdWxlKiBydWxlKSBjb25zdAogCiBib29s
IEluc3BlY3RvclN0eWxlU2hlZXQ6Om9yaWdpbmFsU3R5bGVTaGVldFRleHQoU3RyaW5nKiByZXN1
bHQpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX3BhZ2VTdHlsZVNoZWV0IHx8IG1fb3JpZ2luID09IElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6VXNlckFnZW50KQorICAg
IGlmICghbV9wYWdlU3R5bGVTaGVldCB8fCBtX29yaWdpbiA9PSBQcm90b2NvbDo6Q1NTOjpTdHls
ZVNoZWV0T3JpZ2luOjpVc2VyQWdlbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1
cm4gaW5saW5lU3R5bGVTaGVldFRleHQocmVzdWx0KSB8fCByZXNvdXJjZVN0eWxlU2hlZXRUZXh0
KHJlc3VsdCkgfHwgZXh0ZW5zaW9uU3R5bGVTaGVldFRleHQocmVzdWx0KTsKIH0KQEAgLTE0MTQs
OSArMTQyNSw5IEBAIGJvb2wgSW5zcGVjdG9yU3R5bGVTaGVldDo6ZXh0ZW5zaW9uU3R5bGVTaGVl
dFRleHQoU3RyaW5nKiByZXN1bHQpIGNvbnN0CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLVJlZjxK
U09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUnVsZT4+IEluc3BlY3Rv
clN0eWxlU2hlZXQ6OmJ1aWxkQXJyYXlGb3JSdWxlTGlzdChDU1NSdWxlTGlzdCogcnVsZUxpc3Qp
CitSZWY8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6Q1NTOjpDU1NSdWxlPj4gSW5zcGVjdG9yU3R5
bGVTaGVldDo6YnVpbGRBcnJheUZvclJ1bGVMaXN0KENTU1J1bGVMaXN0KiBydWxlTGlzdCkKIHsK
LSAgICBhdXRvIHJlc3VsdCA9IEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NT
OjpDU1NSdWxlPjo6Y3JlYXRlKCk7CisgICAgYXV0byByZXN1bHQgPSBKU09OOjpBcnJheU9mPFBy
b3RvY29sOjpDU1M6OkNTU1J1bGU+OjpjcmVhdGUoKTsKICAgICBpZiAoIXJ1bGVMaXN0KQogICAg
ICAgICByZXR1cm4gcmVzdWx0OwogCkBAIC0xNDI0LDggKzE0MzUsMTAgQEAgUmVmPEpTT046OkFy
cmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NSdWxlPj4gSW5zcGVjdG9yU3R5bGVT
aGVldDo6YnVpbGQKICAgICBDU1NTdHlsZVJ1bGVWZWN0b3IgcnVsZXM7CiAgICAgY29sbGVjdEZs
YXRSdWxlcyhXVEZNb3ZlKHJlZlJ1bGVMaXN0KSwgJnJ1bGVzKTsKIAotICAgIGZvciAoYXV0byYg
cnVsZSA6IHJ1bGVzKQotICAgICAgICByZXN1bHQtPmFkZEl0ZW0oYnVpbGRPYmplY3RGb3JSdWxl
KHJ1bGUuZ2V0KCkpKTsKKyAgICBmb3IgKGF1dG8mIHJ1bGUgOiBydWxlcykgeworICAgICAgICBp
ZiAoYXV0byBydWxlT2JqZWN0ID0gYnVpbGRPYmplY3RGb3JSdWxlKHJ1bGUuZ2V0KCkpKQorICAg
ICAgICAgICAgcmVzdWx0LT5hZGRJdGVtKHJ1bGVPYmplY3QucmVsZWFzZU5vbk51bGwoKSk7Cisg
ICAgfQogCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTE0NDgsMTIgKzE0NjEsMTIgQEAgdm9p
ZCBJbnNwZWN0b3JTdHlsZVNoZWV0Ojpjb2xsZWN0RmxhdFJ1bGVzKFJlZlB0cjxDU1NSdWxlTGlz
dD4mJiBydWxlTGlzdCwgQ1NTU3QKICAgICB9CiB9CiAKLVJlZjxJbnNwZWN0b3JTdHlsZVNoZWV0
Rm9ySW5saW5lU3R5bGU+IEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZTo6Y3JlYXRl
KEluc3BlY3RvclBhZ2VBZ2VudCogcGFnZUFnZW50LCBjb25zdCBTdHJpbmcmIGlkLCBSZWY8U3R5
bGVkRWxlbWVudD4mJiBlbGVtZW50LCBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlN0eWxlU2hl
ZXRPcmlnaW4gb3JpZ2luLCBMaXN0ZW5lciogbGlzdGVuZXIpCitSZWY8SW5zcGVjdG9yU3R5bGVT
aGVldEZvcklubGluZVN0eWxlPiBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU6OmNy
ZWF0ZShJbnNwZWN0b3JQYWdlQWdlbnQqIHBhZ2VBZ2VudCwgY29uc3QgU3RyaW5nJiBpZCwgUmVm
PFN0eWxlZEVsZW1lbnQ+JiYgZWxlbWVudCwgUHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdp
biBvcmlnaW4sIExpc3RlbmVyKiBsaXN0ZW5lcikKIHsKICAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGUocGFnZUFnZW50LCBpZCwgV1RGTW92
ZShlbGVtZW50KSwgb3JpZ2luLCBsaXN0ZW5lcikpOwogfQogCi1JbnNwZWN0b3JTdHlsZVNoZWV0
Rm9ySW5saW5lU3R5bGU6Okluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZShJbnNwZWN0
b3JQYWdlQWdlbnQqIHBhZ2VBZ2VudCwgY29uc3QgU3RyaW5nJiBpZCwgUmVmPFN0eWxlZEVsZW1l
bnQ+JiYgZWxlbWVudCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2lu
IG9yaWdpbiwgTGlzdGVuZXIqIGxpc3RlbmVyKQorSW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGlu
ZVN0eWxlOjpJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGUoSW5zcGVjdG9yUGFnZUFn
ZW50KiBwYWdlQWdlbnQsIGNvbnN0IFN0cmluZyYgaWQsIFJlZjxTdHlsZWRFbGVtZW50PiYmIGVs
ZW1lbnQsIFByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW4gb3JpZ2luLCBMaXN0ZW5lciog
bGlzdGVuZXIpCiAgICAgOiBJbnNwZWN0b3JTdHlsZVNoZWV0KHBhZ2VBZ2VudCwgaWQsIG51bGxw
dHIsIG9yaWdpbiwgU3RyaW5nKCksIGxpc3RlbmVyKQogICAgICwgbV9lbGVtZW50KFdURk1vdmUo
ZWxlbWVudCkpCiAgICAgLCBtX3J1bGVTb3VyY2VEYXRhKG51bGxwdHIpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5oIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuaAppbmRleCA3M2QzNjE4ZTVhNDhh
Mzc0NTc2MjZkZDU0OGRjZTdlMzZiMWRlMTM1Li43OGYxNGQyOTE2YmFhNWMzN2UwMTA5MzkyZjIx
ZWY2NmE2NTVmNzZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yU3R5bGVTaGVldC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JT
dHlsZVNoZWV0LmgKQEAgLTQ1LDE4ICs0NSwxOSBAQCBjbGFzcyBFbGVtZW50OwogY2xhc3MgSW5z
cGVjdG9yUGFnZUFnZW50OwogY2xhc3MgSW5zcGVjdG9yU3R5bGVTaGVldDsKIAotdHlwZWRlZiBT
dHJpbmcgRXJyb3JTdHJpbmc7Ci0KIGNsYXNzIEluc3BlY3RvckNTU0lkIHsKIHB1YmxpYzoKICAg
ICBJbnNwZWN0b3JDU1NJZCgpID0gZGVmYXVsdDsKIAogICAgIGV4cGxpY2l0IEluc3BlY3RvckNT
U0lkKGNvbnN0IEpTT046Ok9iamVjdCYgdmFsdWUpCiAgICAgewotICAgICAgICBpZiAoIXZhbHVl
LmdldFN0cmluZygic3R5bGVTaGVldElkIl9zLCBtX3N0eWxlU2hlZXRJZCkpCisgICAgICAgIG1f
c3R5bGVTaGVldElkID0gdmFsdWUuZ2V0U3RyaW5nKCJzdHlsZVNoZWV0SWQiX3MpOworICAgICAg
ICBpZiAoIW1fc3R5bGVTaGVldElkKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIGlm
ICghdmFsdWUuZ2V0SW50ZWdlcigib3JkaW5hbCJfcywgbV9vcmRpbmFsKSkKKyAgICAgICAgaWYg
KGF1dG8gb3JkaW5hbCA9IHZhbHVlLmdldEludGVnZXIoIm9yZGluYWwiX3MpKQorICAgICAgICAg
ICAgbV9vcmRpbmFsID0gKm9yZGluYWw7CisgICAgICAgIGVsc2UKICAgICAgICAgICAgIG1fc3R5
bGVTaGVldElkID0gU3RyaW5nKCk7CiAgICAgfQogCkBAIC0xMjYsNyArMTI3LDcgQEAgcHVibGlj
OgogICAgIH5JbnNwZWN0b3JTdHlsZSgpOwogCiAgICAgQ1NTU3R5bGVEZWNsYXJhdGlvbiYgY3Nz
U3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0eWxlLmdldCgpOyB9Ci0gICAgUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+IGJ1aWxkT2JqZWN0Rm9yU3R5bGUoKSBjb25z
dDsKKyAgICBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4gYnVpbGRPYmpl
Y3RGb3JTdHlsZSgpIGNvbnN0OwogICAgIFJlZjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkNTUzo6Q1NTQ29tcHV0ZWRTdHlsZVByb3BlcnR5Pj4gYnVpbGRBcnJheUZvckNvbXB1
dGVkU3R5bGUoKSBjb25zdDsKIAogICAgIEV4Y2VwdGlvbk9yPFN0cmluZz4gdGV4dCgpIGNvbnN0
OwpAQCAtMTc1LDcgKzE3Niw3IEBAIHB1YmxpYzoKICAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6Q1NTOjpDU1NTdHlsZVNoZWV0Qm9keT4gYnVpbGRPYmplY3RGb3JTdHlsZVNoZWV0KCk7
CiAgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGVTaGVldEhlYWRl
cj4gYnVpbGRPYmplY3RGb3JTdHlsZVNoZWV0SW5mbygpOwogICAgIFJlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpDU1M6OkNTU1J1bGU+IGJ1aWxkT2JqZWN0Rm9yUnVsZShDU1NTdHlsZVJ1bGUq
KTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4gYnVpbGRP
YmplY3RGb3JTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKik7CisgICAgUmVmPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+IGJ1aWxkT2JqZWN0Rm9yU3R5bGUoQ1NTU3R5bGVEZWNs
YXJhdGlvbiopOwogICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IHNldFN0eWxlVGV4dChjb25zdCBJbnNw
ZWN0b3JDU1NJZCYsIGNvbnN0IFN0cmluZyYgdGV4dCwgU3RyaW5nKiBvbGRUZXh0KTsKIAogICAg
IHZpcnR1YWwgRXhjZXB0aW9uT3I8U3RyaW5nPiB0ZXh0KCkgY29uc3Q7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvVGltZWxpbmVSZWNvcmRGYWN0b3J5LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9UaW1lbGluZVJlY29yZEZhY3RvcnkuY3BwCmluZGV4IDM2M2Qx
NjhlODA1ZWEzZjg3ZDdiYzlkODI5ZDQ2ZGU2Y2JmNTJhYWUuLmEwNzAzMzZiNzU2MWRhODVlY2I1
ZmZmNGMxNGI2MWJmZjM5NjIxMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9UaW1lbGluZVJlY29yZEZhY3RvcnkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9UaW1lbGluZVJlY29yZEZhY3RvcnkuY3BwCkBAIC0xNjEsOSArMTYxLDkgQEAgUmVmPEpTT046
Ok9iamVjdD4gVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVQYWludERhdGEoY29uc3QgRmxv
YXRRdWFkJiBxdWFkKQogICAgIHJldHVybiBkYXRhOwogfQogCi12b2lkIFRpbWVsaW5lUmVjb3Jk
RmFjdG9yeTo6YXBwZW5kTGF5b3V0Um9vdChKU09OOjpPYmplY3QqIGRhdGEsIGNvbnN0IEZsb2F0
UXVhZCYgcXVhZCkKK3ZvaWQgVGltZWxpbmVSZWNvcmRGYWN0b3J5OjphcHBlbmRMYXlvdXRSb290
KEpTT046Ok9iamVjdCYgZGF0YSwgY29uc3QgRmxvYXRRdWFkJiBxdWFkKQogewotICAgIGRhdGEt
PnNldEFycmF5KCJyb290Il9zLCBjcmVhdGVRdWFkKHF1YWQpKTsKKyAgICBkYXRhLnNldEFycmF5
KCJyb290Il9zLCBjcmVhdGVRdWFkKHF1YWQpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1RpbWVsaW5lUmVjb3JkRmFj
dG9yeS5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1RpbWVsaW5lUmVjb3JkRmFjdG9yeS5o
CmluZGV4IDQ4ZjQzMGU5YmVkOTNkMWFmZDJiYTM2ZTU5NTdlN2VmMDYxOGIzYWEuLmNhNWRiNDEw
ODk4ZGI5M2NkMGEzNWMyNjI3OTA5YzFkNDllMWMyNjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9UaW1lbGluZVJlY29yZEZhY3RvcnkuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvVGltZWxpbmVSZWNvcmRGYWN0b3J5LmgKQEAgLTU5LDcgKzU5LDcgQEAgcHVi
bGljOgogICAgIHN0YXRpYyBSZWY8SlNPTjo6T2JqZWN0PiBjcmVhdGVPYnNlcnZlckNhbGxiYWNr
RGF0YShjb25zdCBTdHJpbmcmIGNhbGxiYWNrVHlwZSk7CiAgICAgc3RhdGljIFJlZjxKU09OOjpP
YmplY3Q+IGNyZWF0ZVBhaW50RGF0YShjb25zdCBGbG9hdFF1YWQmKTsKIAotICAgIHN0YXRpYyB2
b2lkIGFwcGVuZExheW91dFJvb3QoSlNPTjo6T2JqZWN0KiBkYXRhLCBjb25zdCBGbG9hdFF1YWQm
KTsKKyAgICBzdGF0aWMgdm9pZCBhcHBlbmRMYXlvdXRSb290KEpTT046Ok9iamVjdCYgZGF0YSwg
Y29uc3QgRmxvYXRRdWFkJik7CiAKIHByaXZhdGU6CiAgICAgVGltZWxpbmVSZWNvcmRGYWN0b3J5
KCkgeyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3Bl
Y3RvckFuaW1hdGlvbkFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9yQW5pbWF0aW9uQWdlbnQuY3BwCmluZGV4IDcxMzI1ZjUyMmQzYTEyM2E1MzRmYzdm
ZjNhNTg0YjU4YmM5NGY5MzYuLjAyNTcxMmIwOTQ2NGVjNmIxNTQ3ZWNmNzA2NmUyMGJkZmFiZjQx
Y2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9y
QW5pbWF0aW9uQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9yQW5pbWF0aW9uQWdlbnQuY3BwCkBAIC03Miw0NSArNzIsNDUgQEAgc3RhdGljIE9w
dGlvbmFsPGRvdWJsZT4gcHJvdG9jb2xWYWx1ZUZvclNlY29uZHMoY29uc3QgU2Vjb25kcyYgc2Vj
b25kcykKICAgICByZXR1cm4gc2Vjb25kcy5taWxsaXNlY29uZHMoKTsKIH0KIAotc3RhdGljIE9w
dGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFuaW1hdGlvbjo6UGxheWJhY2tEaXJlY3Rpb24+
IHByb3RvY29sVmFsdWVGb3JQbGF5YmFja0RpcmVjdGlvbihQbGF5YmFja0RpcmVjdGlvbiBwbGF5
YmFja0RpcmVjdGlvbikKK3N0YXRpYyBPcHRpb25hbDxQcm90b2NvbDo6QW5pbWF0aW9uOjpQbGF5
YmFja0RpcmVjdGlvbj4gcHJvdG9jb2xWYWx1ZUZvclBsYXliYWNrRGlyZWN0aW9uKFBsYXliYWNr
RGlyZWN0aW9uIHBsYXliYWNrRGlyZWN0aW9uKQogewogICAgIHN3aXRjaCAocGxheWJhY2tEaXJl
Y3Rpb24pIHsKICAgICBjYXNlIFBsYXliYWNrRGlyZWN0aW9uOjpOb3JtYWw6Ci0gICAgICAgIHJl
dHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpBbmltYXRpb246OlBsYXliYWNrRGlyZWN0aW9uOjpO
b3JtYWw7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6QW5pbWF0aW9uOjpQbGF5YmFja0RpcmVj
dGlvbjo6Tm9ybWFsOwogICAgIGNhc2UgUGxheWJhY2tEaXJlY3Rpb246OlJldmVyc2U6Ci0gICAg
ICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpBbmltYXRpb246OlBsYXliYWNrRGlyZWN0
aW9uOjpSZXZlcnNlOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OkFuaW1hdGlvbjo6UGxheWJh
Y2tEaXJlY3Rpb246OlJldmVyc2U7CiAgICAgY2FzZSBQbGF5YmFja0RpcmVjdGlvbjo6QWx0ZXJu
YXRlOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6QW5pbWF0aW9uOjpQbGF5
YmFja0RpcmVjdGlvbjo6QWx0ZXJuYXRlOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OkFuaW1h
dGlvbjo6UGxheWJhY2tEaXJlY3Rpb246OkFsdGVybmF0ZTsKICAgICBjYXNlIFBsYXliYWNrRGly
ZWN0aW9uOjpBbHRlcm5hdGVSZXZlcnNlOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90
b2NvbDo6QW5pbWF0aW9uOjpQbGF5YmFja0RpcmVjdGlvbjo6QWx0ZXJuYXRlUmV2ZXJzZTsKKyAg
ICAgICAgcmV0dXJuIFByb3RvY29sOjpBbmltYXRpb246OlBsYXliYWNrRGlyZWN0aW9uOjpBbHRl
cm5hdGVSZXZlcnNlOwogICAgIH0KIAogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CiB9CiAKLXN0YXRpYyBPcHRpb25hbDxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpBbmltYXRpb246OkZpbGxNb2RlPiBwcm90b2NvbFZhbHVlRm9yRmlsbE1vZGUoRmlsbE1v
ZGUgZmlsbE1vZGUpCitzdGF0aWMgT3B0aW9uYWw8UHJvdG9jb2w6OkFuaW1hdGlvbjo6RmlsbE1v
ZGU+IHByb3RvY29sVmFsdWVGb3JGaWxsTW9kZShGaWxsTW9kZSBmaWxsTW9kZSkKIHsKICAgICBz
d2l0Y2ggKGZpbGxNb2RlKSB7CiAgICAgY2FzZSBGaWxsTW9kZTo6Tm9uZToKLSAgICAgICAgcmV0
dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFuaW1hdGlvbjo6RmlsbE1vZGU6Ok5vbmU7CisgICAg
ICAgIHJldHVybiBQcm90b2NvbDo6QW5pbWF0aW9uOjpGaWxsTW9kZTo6Tm9uZTsKICAgICBjYXNl
IEZpbGxNb2RlOjpGb3J3YXJkczoKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkFuaW1hdGlvbjo6RmlsbE1vZGU6OkZvcndhcmRzOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6
OkFuaW1hdGlvbjo6RmlsbE1vZGU6OkZvcndhcmRzOwogICAgIGNhc2UgRmlsbE1vZGU6OkJhY2t3
YXJkczoKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFuaW1hdGlvbjo6Rmls
bE1vZGU6OkJhY2t3YXJkczsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpBbmltYXRpb246OkZp
bGxNb2RlOjpCYWNrd2FyZHM7CiAgICAgY2FzZSBGaWxsTW9kZTo6Qm90aDoKLSAgICAgICAgcmV0
dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFuaW1hdGlvbjo6RmlsbE1vZGU6OkJvdGg7CisgICAg
ICAgIHJldHVybiBQcm90b2NvbDo6QW5pbWF0aW9uOjpGaWxsTW9kZTo6Qm90aDsKICAgICBjYXNl
IEZpbGxNb2RlOjpBdXRvOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6QW5p
bWF0aW9uOjpGaWxsTW9kZTo6QXV0bzsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpBbmltYXRp
b246OkZpbGxNb2RlOjpBdXRvOwogICAgIH0KIAogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiB9CiAKLXN0YXRpYyBSZWY8SlNPTjo6QXJyYXlPZjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpBbmltYXRpb246OktleWZyYW1lPj4gYnVpbGRPYmplY3RGb3JL
ZXlmcmFtZXMoS2V5ZnJhbWVFZmZlY3QmIGtleWZyYW1lRWZmZWN0KQorc3RhdGljIFJlZjxKU09O
OjpBcnJheU9mPFByb3RvY29sOjpBbmltYXRpb246OktleWZyYW1lPj4gYnVpbGRPYmplY3RGb3JL
ZXlmcmFtZXMoS2V5ZnJhbWVFZmZlY3QmIGtleWZyYW1lRWZmZWN0KQogewotICAgIGF1dG8ga2V5
ZnJhbWVzUGF5bG9hZCA9IEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6QW5pbWF0
aW9uOjpLZXlmcmFtZT46OmNyZWF0ZSgpOworICAgIGF1dG8ga2V5ZnJhbWVzUGF5bG9hZCA9IEpT
T046OkFycmF5T2Y8UHJvdG9jb2w6OkFuaW1hdGlvbjo6S2V5ZnJhbWU+OjpjcmVhdGUoKTsKIAog
ICAgIGNvbnN0IGF1dG8mIGJsZW5kaW5nS2V5ZnJhbWVzID0ga2V5ZnJhbWVFZmZlY3QuYmxlbmRp
bmdLZXlmcmFtZXMoKTsKICAgICBjb25zdCBhdXRvJiBwYXJzZWRLZXlmcmFtZXMgPSBrZXlmcmFt
ZUVmZmVjdC5wYXJzZWRLZXlmcmFtZXMoKTsKQEAgLTEzMCw3ICsxMzAsNyBAQCBzdGF0aWMgUmVm
PEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6QW5pbWF0aW9uOjpLZXlmcmFtZT4+
IGJ1aWxkT2JqZWN0RgogICAgICAgICAgICAgQVNTRVJUKGJsZW5kaW5nS2V5ZnJhbWUuc3R5bGUo
KSk7CiAgICAgICAgICAgICBhdXRvJiBzdHlsZSA9ICpibGVuZGluZ0tleWZyYW1lLnN0eWxlKCk7
CiAKLSAgICAgICAgICAgIGF1dG8ga2V5ZnJhbWVQYXlsb2FkID0gSW5zcGVjdG9yOjpQcm90b2Nv
bDo6QW5pbWF0aW9uOjpLZXlmcmFtZTo6Y3JlYXRlKCkKKyAgICAgICAgICAgIGF1dG8ga2V5ZnJh
bWVQYXlsb2FkID0gUHJvdG9jb2w6OkFuaW1hdGlvbjo6S2V5ZnJhbWU6OmNyZWF0ZSgpCiAgICAg
ICAgICAgICAgICAgLnNldE9mZnNldChibGVuZGluZ0tleWZyYW1lLmtleSgpKQogICAgICAgICAg
ICAgICAgIC5yZWxlYXNlKCk7CiAKQEAgLTE2Nyw3ICsxNjcsNyBAQCBzdGF0aWMgUmVmPEpTT046
OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6QW5pbWF0aW9uOjpLZXlmcmFtZT4+IGJ1aWxk
T2JqZWN0RgogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgZm9yIChjb25zdCBhdXRv
JiBwYXJzZWRLZXlmcmFtZSA6IHBhcnNlZEtleWZyYW1lcykgewotICAgICAgICAgICAgYXV0byBr
ZXlmcmFtZVBheWxvYWQgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBbmltYXRpb246OktleWZyYW1l
OjpjcmVhdGUoKQorICAgICAgICAgICAgYXV0byBrZXlmcmFtZVBheWxvYWQgPSBQcm90b2NvbDo6
QW5pbWF0aW9uOjpLZXlmcmFtZTo6Y3JlYXRlKCkKICAgICAgICAgICAgICAgICAuc2V0T2Zmc2V0
KHBhcnNlZEtleWZyYW1lLmNvbXB1dGVkT2Zmc2V0KQogICAgICAgICAgICAgICAgIC5yZWxlYXNl
KCk7CiAKQEAgLTE4Niw5ICsxODYsOSBAQCBzdGF0aWMgUmVmPEpTT046OkFycmF5T2Y8SW5zcGVj
dG9yOjpQcm90b2NvbDo6QW5pbWF0aW9uOjpLZXlmcmFtZT4+IGJ1aWxkT2JqZWN0RgogICAgIHJl
dHVybiBrZXlmcmFtZXNQYXlsb2FkOwogfQogCi1zdGF0aWMgUmVmPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkFuaW1hdGlvbjo6RWZmZWN0PiBidWlsZE9iamVjdEZvckVmZmVjdChBbmltYXRpb25FZmZl
Y3QmIGVmZmVjdCkKK3N0YXRpYyBSZWY8UHJvdG9jb2w6OkFuaW1hdGlvbjo6RWZmZWN0PiBidWls
ZE9iamVjdEZvckVmZmVjdChBbmltYXRpb25FZmZlY3QmIGVmZmVjdCkKIHsKLSAgICBhdXRvIGVm
ZmVjdFBheWxvYWQgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBbmltYXRpb246OkVmZmVjdDo6Y3Jl
YXRlKCkKKyAgICBhdXRvIGVmZmVjdFBheWxvYWQgPSBQcm90b2NvbDo6QW5pbWF0aW9uOjpFZmZl
Y3Q6OmNyZWF0ZSgpCiAgICAgICAgIC5yZWxlYXNlKCk7CiAKICAgICBpZiAoYXV0byBzdGFydERl
bGF5ID0gcHJvdG9jb2xWYWx1ZUZvclNlY29uZHMoZWZmZWN0LmRlbGF5KCkpKQpAQCAtMjM4LDIw
ICsyMzgsMTcgQEAgdm9pZCBJbnNwZWN0b3JBbmltYXRpb25BZ2VudDo6ZGlkQ3JlYXRlRnJvbnRl
bmRBbmRCYWNrZW5kKEZyb250ZW5kUm91dGVyKiwgQmFja2UKIAogdm9pZCBJbnNwZWN0b3JBbmlt
YXRpb25BZ2VudDo6d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoRGlzY29ubmVjdFJlYXNv
bikKIHsKLSAgICBFcnJvclN0cmluZyBpZ25vcmVkOwotICAgIHN0b3BUcmFja2luZyhpZ25vcmVk
KTsKLSAgICBkaXNhYmxlKGlnbm9yZWQpOworICAgIHN0b3BUcmFja2luZygpOworICAgIGRpc2Fi
bGUoKTsKIAogICAgIEFTU0VSVChtX2luc3RydW1lbnRpbmdBZ2VudHMucGVyc2lzdGVudEFuaW1h
dGlvbkFnZW50KCkgPT0gdGhpcyk7CiAgICAgbV9pbnN0cnVtZW50aW5nQWdlbnRzLnNldFBlcnNp
c3RlbnRBbmltYXRpb25BZ2VudChudWxscHRyKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JBbmltYXRp
b25BZ2VudDo6ZW5hYmxlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZykKK1Byb3RvY29sOjpFcnJv
clN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckFuaW1hdGlvbkFnZW50OjplbmFibGUoKQogewotICAg
IGlmIChtX2luc3RydW1lbnRpbmdBZ2VudHMuZW5hYmxlZEFuaW1hdGlvbkFnZW50KCkgPT0gdGhp
cykgewotICAgICAgICBlcnJvclN0cmluZyA9ICJBbmltYXRpb24gZG9tYWluIGFscmVhZHkgZW5h
YmxlZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAobV9pbnN0cnVtZW50aW5n
QWdlbnRzLmVuYWJsZWRBbmltYXRpb25BZ2VudCgpID09IHRoaXMpCisgICAgICAgIHJldHVybiBt
YWtlVW5leHBlY3RlZCgiQW5pbWF0aW9uIGRvbWFpbiBhbHJlYWR5IGVuYWJsZWQiX3MpOwogCiAg
ICAgbV9pbnN0cnVtZW50aW5nQWdlbnRzLnNldEVuYWJsZWRBbmltYXRpb25BZ2VudCh0aGlzKTsK
IApAQCAtMjcwLDQ5ICsyNjcsNTEgQEAgdm9pZCBJbnNwZWN0b3JBbmltYXRpb25BZ2VudDo6ZW5h
YmxlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZykKICAgICAgICAgICAgICAgICBiaW5kQW5pbWF0
aW9uKCphbmltYXRpb24sIGZhbHNlKTsKICAgICAgICAgfQogICAgIH0KKworICAgIHJldHVybiB7
IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yQW5pbWF0aW9uQWdlbnQ6OmRpc2FibGUoRXJyb3JTdHJp
bmcmKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yQW5pbWF0aW9uQWdl
bnQ6OmRpc2FibGUoKQogewogICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy5zZXRFbmFibGVkQW5p
bWF0aW9uQWdlbnQobnVsbHB0cik7CiAKICAgICByZXNldCgpOworCisgICAgcmV0dXJuIHsgfTsK
IH0KIAotdm9pZCBJbnNwZWN0b3JBbmltYXRpb25BZ2VudDo6cmVxdWVzdEVmZmVjdFRhcmdldChF
cnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uSWQsIGludCog
bm9kZUlkKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UHJvdG9jb2w6OkRPTTo6Tm9kZUlkPiBJ
bnNwZWN0b3JBbmltYXRpb25BZ2VudDo6cmVxdWVzdEVmZmVjdFRhcmdldChjb25zdCBQcm90b2Nv
bDo6QW5pbWF0aW9uOjpBbmltYXRpb25JZCYgYW5pbWF0aW9uSWQpCiB7CisgICAgUHJvdG9jb2w6
OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAgICAgYXV0byogYW5pbWF0aW9uID0gYXNzZXJ0
QW5pbWF0aW9uKGVycm9yU3RyaW5nLCBhbmltYXRpb25JZCk7CiAgICAgaWYgKCFhbmltYXRpb24p
Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3Ry
aW5nKTsKIAogICAgIGF1dG8qIGRvbUFnZW50ID0gbV9pbnN0cnVtZW50aW5nQWdlbnRzLnBlcnNp
c3RlbnRET01BZ2VudCgpOwotICAgIGlmICghZG9tQWdlbnQpIHsKLSAgICAgICAgZXJyb3JTdHJp
bmcgPSAiRE9NIGRvbWFpbiBtdXN0IGJlIGVuYWJsZWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9CisgICAgaWYgKCFkb21BZ2VudCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJE
T00gZG9tYWluIG11c3QgYmUgZW5hYmxlZCJfcyk7CiAKICAgICBhdXRvKiBlZmZlY3QgPSBhbmlt
YXRpb24tPmVmZmVjdCgpOwotICAgIGlmICghaXM8S2V5ZnJhbWVFZmZlY3Q+KGVmZmVjdCkpIHsK
LSAgICAgICAgZXJyb3JTdHJpbmcgPSAiQW5pbWF0aW9uIGZvciBnaXZlbiBhbmltYXRpb25JZCBk
b2VzIG5vdCBoYXZlIGFuIGVmZmVjdCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBp
ZiAoIWlzPEtleWZyYW1lRWZmZWN0PihlZmZlY3QpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoIkFuaW1hdGlvbiBmb3IgZ2l2ZW4gYW5pbWF0aW9uSWQgZG9lcyBub3QgaGF2ZSBhbiBl
ZmZlY3QiX3MpOwogCiAgICAgYXV0byYga2V5ZnJhbWVFZmZlY3QgPSBkb3duY2FzdDxLZXlmcmFt
ZUVmZmVjdD4oKmVmZmVjdCk7CiAKICAgICBhdXRvKiB0YXJnZXQgPSBrZXlmcmFtZUVmZmVjdC50
YXJnZXRFbGVtZW50T3JQc2V1ZG9FbGVtZW50KCk7Ci0gICAgaWYgKCF0YXJnZXQpIHsKLSAgICAg
ICAgZXJyb3JTdHJpbmcgPSAiQW5pbWF0aW9uIGZvciBnaXZlbiBhbmltYXRpb25JZCBkb2VzIG5v
dCBoYXZlIGEgdGFyZ2V0Il9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghdGFy
Z2V0KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkFuaW1hdGlvbiBmb3IgZ2l2ZW4g
YW5pbWF0aW9uSWQgZG9lcyBub3QgaGF2ZSBhIHRhcmdldCJfcyk7CiAKLSAgICAqbm9kZUlkID0g
ZG9tQWdlbnQtPnB1c2hOb2RlUGF0aFRvRnJvbnRlbmQoZXJyb3JTdHJpbmcsIHRhcmdldCk7Cisg
ICAgcmV0dXJuIGRvbUFnZW50LT5wdXNoTm9kZVBhdGhUb0Zyb250ZW5kKGVycm9yU3RyaW5nLCB0
YXJnZXQpOwogfQogCi12b2lkIEluc3BlY3RvckFuaW1hdGlvbkFnZW50OjpyZXNvbHZlQW5pbWF0
aW9uKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBhbmltYXRpb25JZCwg
Y29uc3QgU3RyaW5nKiBvYmplY3RHcm91cCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1
bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3VsdCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPFJl
ZjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0Pj4gSW5zcGVjdG9yQW5pbWF0aW9uQWdl
bnQ6OnJlc29sdmVBbmltYXRpb24oY29uc3QgUHJvdG9jb2w6OkFuaW1hdGlvbjo6QW5pbWF0aW9u
SWQmIGFuaW1hdGlvbklkLCBjb25zdCBTdHJpbmcmIG9iamVjdEdyb3VwKQogeworICAgIFByb3Rv
Y29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIGF1dG8qIGFuaW1hdGlvbiA9IGFz
c2VydEFuaW1hdGlvbihlcnJvclN0cmluZywgYW5pbWF0aW9uSWQpOwogICAgIGlmICghYW5pbWF0
aW9uKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJv
clN0cmluZyk7CiAKICAgICBhdXRvKiBzdGF0ZSA9IGFuaW1hdGlvbi0+c2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpLT5leGVjU3RhdGUoKTsKICAgICBhdXRvIGluamVjdGVkU2NyaXB0ID0gbV9pbmpl
Y3RlZFNjcmlwdE1hbmFnZXIuaW5qZWN0ZWRTY3JpcHRGb3Ioc3RhdGUpOwpAQCAtMzI4LDM4ICsz
MjcsNDIgQEAgdm9pZCBJbnNwZWN0b3JBbmltYXRpb25BZ2VudDo6cmVzb2x2ZUFuaW1hdGlvbihF
cnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFMKIAogICAgIGlmICghdmFsdWUpIHsKICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIkludGVy
bmFsIGVycm9yOiB1bmtub3duIEFuaW1hdGlvbiBmb3IgZ2l2ZW4gYW5pbWF0aW9uSWQiX3M7Ci0g
ICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJJbnRlcm5hbCBl
cnJvcjogdW5rbm93biBBbmltYXRpb24gZm9yIGdpdmVuIGFuaW1hdGlvbklkIl9zKTsKICAgICB9
CiAKLSAgICBTdHJpbmcgb2JqZWN0R3JvdXBOYW1lID0gb2JqZWN0R3JvdXAgPyAqb2JqZWN0R3Jv
dXAgOiBTdHJpbmcoKTsKLSAgICByZXN1bHQgPSBpbmplY3RlZFNjcmlwdC53cmFwT2JqZWN0KHZh
bHVlLCBvYmplY3RHcm91cE5hbWUpOworICAgIGF1dG8gb2JqZWN0ID0gaW5qZWN0ZWRTY3JpcHQu
d3JhcE9iamVjdCh2YWx1ZSwgb2JqZWN0R3JvdXApOworICAgIGlmICghb2JqZWN0KQorICAgICAg
ICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkludGVybmFsIGVycm9yOiB1bmFibGUgdG8gY2FzdCBB
bmltYXRpb24iKTsKKworICAgIHJldHVybiBvYmplY3QucmVsZWFzZU5vbk51bGwoKTsKIH0KIAot
dm9pZCBJbnNwZWN0b3JBbmltYXRpb25BZ2VudDo6c3RhcnRUcmFja2luZyhFcnJvclN0cmluZyYg
ZXJyb3JTdHJpbmcpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JBbmlt
YXRpb25BZ2VudDo6c3RhcnRUcmFja2luZygpCiB7Ci0gICAgaWYgKG1faW5zdHJ1bWVudGluZ0Fn
ZW50cy50cmFja2luZ0FuaW1hdGlvbkFnZW50KCkgPT0gdGhpcykgewotICAgICAgICBlcnJvclN0
cmluZyA9ICJBbmltYXRpb24gZG9tYWluIGFscmVhZHkgdHJhY2tpbmciX3M7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9CisgICAgaWYgKG1faW5zdHJ1bWVudGluZ0FnZW50cy50cmFja2luZ0FuaW1h
dGlvbkFnZW50KCkgPT0gdGhpcykKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJBbmlt
YXRpb24gZG9tYWluIGFscmVhZHkgdHJhY2tpbmciX3MpOwogCiAgICAgbV9pbnN0cnVtZW50aW5n
QWdlbnRzLnNldFRyYWNraW5nQW5pbWF0aW9uQWdlbnQodGhpcyk7CiAKICAgICBBU1NFUlQobV90
cmFja2VkRGVjbGFyYXRpdmVBbmltYXRpb25EYXRhLmlzRW1wdHkoKSk7CiAKICAgICBtX2Zyb250
ZW5kRGlzcGF0Y2hlci0+dHJhY2tpbmdTdGFydChtX2Vudmlyb25tZW50LmV4ZWN1dGlvblN0b3B3
YXRjaCgpLmVsYXBzZWRUaW1lKCkuc2Vjb25kcygpKTsKKworICAgIHJldHVybiB7IH07CiB9CiAK
LXZvaWQgSW5zcGVjdG9yQW5pbWF0aW9uQWdlbnQ6OnN0b3BUcmFja2luZyhFcnJvclN0cmluZyYp
CitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JBbmltYXRpb25BZ2VudDo6
c3RvcFRyYWNraW5nKCkKIHsKICAgICBpZiAobV9pbnN0cnVtZW50aW5nQWdlbnRzLnRyYWNraW5n
QW5pbWF0aW9uQWdlbnQoKSAhPSB0aGlzKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVy
biB7IH07CiAKICAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMuc2V0VHJhY2tpbmdBbmltYXRpb25B
Z2VudChudWxscHRyKTsKIAogICAgIG1fdHJhY2tlZERlY2xhcmF0aXZlQW5pbWF0aW9uRGF0YS5j
bGVhcigpOwogCiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPnRyYWNraW5nQ29tcGxldGUobV9l
bnZpcm9ubWVudC5leGVjdXRpb25TdG9wd2F0Y2goKS5lbGFwc2VkVGltZSgpLnNlY29uZHMoKSk7
CisKKyAgICByZXR1cm4geyB9OwogfQogCiBzdGF0aWMgYm9vbCBpc0RlbGF5ZWQoQ29tcHV0ZWRF
ZmZlY3RUaW1pbmcmIGNvbXB1dGVkVGltaW5nKQpAQCAtMzgwLDMxICszODMsMzEgQEAgdm9pZCBJ
bnNwZWN0b3JBbmltYXRpb25BZ2VudDo6d2lsbEFwcGx5S2V5ZnJhbWVFZmZlY3QoRWxlbWVudCYg
dGFyZ2V0LCBLZXlmcmFtZUUKICAgICB9KTsKICAgICBhdXRvJiB0cmFja2luZ0RhdGEgPSBlbnN1
cmVSZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwogCi0gICAgT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90
b2NvbDo6QW5pbWF0aW9uOjpBbmltYXRpb25TdGF0ZT4gYW5pbWF0aW9uQW5pbWF0aW9uU3RhdGU7
CisgICAgT3B0aW9uYWw8UHJvdG9jb2w6OkFuaW1hdGlvbjo6QW5pbWF0aW9uU3RhdGU+IGFuaW1h
dGlvbkFuaW1hdGlvblN0YXRlOwogCiAgICAgaWYgKChlbnN1cmVSZXN1bHQuaXNOZXdFbnRyeSB8
fCAhaXNEZWxheWVkKHRyYWNraW5nRGF0YS5sYXN0Q29tcHV0ZWRUaW1pbmcpKSAmJiBpc0RlbGF5
ZWQoY29tcHV0ZWRUaW1pbmcpKQotICAgICAgICBhbmltYXRpb25BbmltYXRpb25TdGF0ZSA9IElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkFuaW1hdGlvbjo6QW5pbWF0aW9uU3RhdGU6OkRlbGF5ZWQ7Cisg
ICAgICAgIGFuaW1hdGlvbkFuaW1hdGlvblN0YXRlID0gUHJvdG9jb2w6OkFuaW1hdGlvbjo6QW5p
bWF0aW9uU3RhdGU6OkRlbGF5ZWQ7CiAgICAgZWxzZSBpZiAoZW5zdXJlUmVzdWx0LmlzTmV3RW50
cnkgfHwgdHJhY2tpbmdEYXRhLmxhc3RDb21wdXRlZFRpbWluZy5waGFzZSAhPSBjb21wdXRlZFRp
bWluZy5waGFzZSkgewogICAgICAgICBzd2l0Y2ggKGNvbXB1dGVkVGltaW5nLnBoYXNlKSB7CiAg
ICAgICAgIGNhc2UgQW5pbWF0aW9uRWZmZWN0UGhhc2U6OkJlZm9yZToKLSAgICAgICAgICAgIGFu
aW1hdGlvbkFuaW1hdGlvblN0YXRlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QW5pbWF0aW9uOjpB
bmltYXRpb25TdGF0ZTo6UmVhZHk7CisgICAgICAgICAgICBhbmltYXRpb25BbmltYXRpb25TdGF0
ZSA9IFByb3RvY29sOjpBbmltYXRpb246OkFuaW1hdGlvblN0YXRlOjpSZWFkeTsKICAgICAgICAg
ICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgQW5pbWF0aW9uRWZmZWN0UGhhc2U6OkFjdGl2ZToK
LSAgICAgICAgICAgIGFuaW1hdGlvbkFuaW1hdGlvblN0YXRlID0gSW5zcGVjdG9yOjpQcm90b2Nv
bDo6QW5pbWF0aW9uOjpBbmltYXRpb25TdGF0ZTo6QWN0aXZlOworICAgICAgICAgICAgYW5pbWF0
aW9uQW5pbWF0aW9uU3RhdGUgPSBQcm90b2NvbDo6QW5pbWF0aW9uOjpBbmltYXRpb25TdGF0ZTo6
QWN0aXZlOwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBBbmltYXRpb25FZmZl
Y3RQaGFzZTo6QWZ0ZXI6Ci0gICAgICAgICAgICBhbmltYXRpb25BbmltYXRpb25TdGF0ZSA9IElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkFuaW1hdGlvbjo6QW5pbWF0aW9uU3RhdGU6OkRvbmU7CisgICAg
ICAgICAgICBhbmltYXRpb25BbmltYXRpb25TdGF0ZSA9IFByb3RvY29sOjpBbmltYXRpb246OkFu
aW1hdGlvblN0YXRlOjpEb25lOwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBB
bmltYXRpb25FZmZlY3RQaGFzZTo6SWRsZToKLSAgICAgICAgICAgIGFuaW1hdGlvbkFuaW1hdGlv
blN0YXRlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QW5pbWF0aW9uOjpBbmltYXRpb25TdGF0ZTo6
Q2FuY2VsZWQ7CisgICAgICAgICAgICBhbmltYXRpb25BbmltYXRpb25TdGF0ZSA9IFByb3RvY29s
OjpBbmltYXRpb246OkFuaW1hdGlvblN0YXRlOjpDYW5jZWxlZDsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAgICAgfSBlbHNlIGlmICh0cmFja2luZ0RhdGEubGFzdENvbXB1dGVkVGlt
aW5nLmN1cnJlbnRJdGVyYXRpb24gIT0gY29tcHV0ZWRUaW1pbmcuY3VycmVudEl0ZXJhdGlvbikg
ewogICAgICAgICAvLyBJdGVyYXRpb25zIGFyZSByZXByZXNlbnRlZCBieSBzZXF1ZW50aWFsICJh
Y3RpdmUiIHN0YXRlIGV2ZW50cy4KLSAgICAgICAgYW5pbWF0aW9uQW5pbWF0aW9uU3RhdGUgPSBJ
bnNwZWN0b3I6OlByb3RvY29sOjpBbmltYXRpb246OkFuaW1hdGlvblN0YXRlOjpBY3RpdmU7Cisg
ICAgICAgIGFuaW1hdGlvbkFuaW1hdGlvblN0YXRlID0gUHJvdG9jb2w6OkFuaW1hdGlvbjo6QW5p
bWF0aW9uU3RhdGU6OkFjdGl2ZTsKICAgICB9CiAKICAgICB0cmFja2luZ0RhdGEubGFzdENvbXB1
dGVkVGltaW5nID0gY29tcHV0ZWRUaW1pbmc7CkBAIC00MTIsNyArNDE1LDcgQEAgdm9pZCBJbnNw
ZWN0b3JBbmltYXRpb25BZ2VudDo6d2lsbEFwcGx5S2V5ZnJhbWVFZmZlY3QoRWxlbWVudCYgdGFy
Z2V0LCBLZXlmcmFtZUUKICAgICBpZiAoIWFuaW1hdGlvbkFuaW1hdGlvblN0YXRlKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBhdXRvIGV2ZW50ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QW5pbWF0
aW9uOjpUcmFja2luZ1VwZGF0ZTo6Y3JlYXRlKCkKKyAgICBhdXRvIGV2ZW50ID0gUHJvdG9jb2w6
OkFuaW1hdGlvbjo6VHJhY2tpbmdVcGRhdGU6OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRUcmFja2lu
Z0FuaW1hdGlvbklkKHRyYWNraW5nRGF0YS50cmFja2luZ0FuaW1hdGlvbklkKQogICAgICAgICAu
c2V0QW5pbWF0aW9uU3RhdGUoYW5pbWF0aW9uQW5pbWF0aW9uU3RhdGUudmFsdWUoKSkKICAgICAg
ICAgLnJlbGVhc2UoKTsKQEAgLTQ0MSw4ICs0NDQsNyBAQCB2b2lkIEluc3BlY3RvckFuaW1hdGlv
bkFnZW50OjpkaWRDaGFuZ2VXZWJBbmltYXRpb25OYW1lKFdlYkFuaW1hdGlvbiYgYW5pbWF0aW9u
KQogICAgIGlmIChhbmltYXRpb25JZC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAg
IGF1dG8gbmFtZSA9IGFuaW1hdGlvbi5pZCgpOwotICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5u
YW1lQ2hhbmdlZChhbmltYXRpb25JZCwgIW5hbWUuaXNFbXB0eSgpID8gJm5hbWUgOiBudWxscHRy
KTsKKyAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+bmFtZUNoYW5nZWQoYW5pbWF0aW9uSWQsIGFu
aW1hdGlvbi5pZCgpKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JBbmltYXRpb25BZ2VudDo6ZGlkU2V0
V2ViQW5pbWF0aW9uRWZmZWN0KFdlYkFuaW1hdGlvbiYgYW5pbWF0aW9uKQpAQCAtNTI1LDcgKzUy
Nyw3IEBAIFN0cmluZyBJbnNwZWN0b3JBbmltYXRpb25BZ2VudDo6ZmluZEFuaW1hdGlvbklkKFdl
YkFuaW1hdGlvbiYgYW5pbWF0aW9uKQogICAgIHJldHVybiBudWxsU3RyaW5nKCk7CiB9CiAKLVdl
YkFuaW1hdGlvbiogSW5zcGVjdG9yQW5pbWF0aW9uQWdlbnQ6OmFzc2VydEFuaW1hdGlvbihFcnJv
clN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uSWQpCitXZWJBbmlt
YXRpb24qIEluc3BlY3RvckFuaW1hdGlvbkFnZW50Ojphc3NlcnRBbmltYXRpb24oUHJvdG9jb2w6
OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBhbmltYXRpb25JZCkKIHsK
ICAgICBhdXRvKiBhbmltYXRpb24gPSBtX2FuaW1hdGlvbklkTWFwLmdldChhbmltYXRpb25JZCk7
CiAgICAgaWYgKCFhbmltYXRpb24pCkBAIC01MzgsNyArNTQwLDcgQEAgdm9pZCBJbnNwZWN0b3JB
bmltYXRpb25BZ2VudDo6YmluZEFuaW1hdGlvbihXZWJBbmltYXRpb24mIGFuaW1hdGlvbiwgYm9v
bCBjYXB0dXIKICAgICBhdXRvIGFuaW1hdGlvbklkID0gbWFrZVN0cmluZygiYW5pbWF0aW9uOiIg
KyBJZGVudGlmaWVyc0ZhY3Rvcnk6OmNyZWF0ZUlkZW50aWZpZXIoKSk7CiAgICAgbV9hbmltYXRp
b25JZE1hcC5zZXQoYW5pbWF0aW9uSWQsICZhbmltYXRpb24pOwogCi0gICAgYXV0byBhbmltYXRp
b25QYXlsb2FkID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QW5pbWF0aW9uOjpBbmltYXRpb246OmNy
ZWF0ZSgpCisgICAgYXV0byBhbmltYXRpb25QYXlsb2FkID0gUHJvdG9jb2w6OkFuaW1hdGlvbjo6
QW5pbWF0aW9uOjpjcmVhdGUoKQogICAgICAgICAuc2V0QW5pbWF0aW9uSWQoYW5pbWF0aW9uSWQp
CiAgICAgICAgIC5yZWxlYXNlKCk7CiAKQEAgLTYwMyw5ICs2MDUsOSBAQCB2b2lkIEluc3BlY3Rv
ckFuaW1hdGlvbkFnZW50OjpzdG9wVHJhY2tpbmdEZWNsYXJhdGl2ZUFuaW1hdGlvbihEZWNsYXJh
dGl2ZUFuaW1hdAogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoaXQtPnZhbHVlLmxhc3RDb21w
dXRlZFRpbWluZy5waGFzZSAhPSBBbmltYXRpb25FZmZlY3RQaGFzZTo6QWZ0ZXIgJiYgaXQtPnZh
bHVlLmxhc3RDb21wdXRlZFRpbWluZy5waGFzZSAhPSBBbmltYXRpb25FZmZlY3RQaGFzZTo6SWRs
ZSkgewotICAgICAgICBhdXRvIGV2ZW50ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QW5pbWF0aW9u
OjpUcmFja2luZ1VwZGF0ZTo6Y3JlYXRlKCkKKyAgICAgICAgYXV0byBldmVudCA9IFByb3RvY29s
OjpBbmltYXRpb246OlRyYWNraW5nVXBkYXRlOjpjcmVhdGUoKQogICAgICAgICAgICAgLnNldFRy
YWNraW5nQW5pbWF0aW9uSWQoaXQtPnZhbHVlLnRyYWNraW5nQW5pbWF0aW9uSWQpCi0gICAgICAg
ICAgICAuc2V0QW5pbWF0aW9uU3RhdGUoSW5zcGVjdG9yOjpQcm90b2NvbDo6QW5pbWF0aW9uOjpB
bmltYXRpb25TdGF0ZTo6Q2FuY2VsZWQpCisgICAgICAgICAgICAuc2V0QW5pbWF0aW9uU3RhdGUo
UHJvdG9jb2w6OkFuaW1hdGlvbjo6QW5pbWF0aW9uU3RhdGU6OkNhbmNlbGVkKQogICAgICAgICAg
ICAgLnJlbGVhc2UoKTsKICAgICAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPnRyYWNraW5nVXBk
YXRlKG1fZW52aXJvbm1lbnQuZXhlY3V0aW9uU3RvcHdhdGNoKCkuZWxhcHNlZFRpbWUoKS5zZWNv
bmRzKCksIFdURk1vdmUoZXZlbnQpKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckFuaW1hdGlvbkFnZW50LmggYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckFuaW1hdGlvbkFnZW50LmgKaW5kZXggOGI1
MTE2MjhjOTdhMjIyYThmOWFjZDhkM2U1YjIwMmE4ZGJiNmJlYy4uMDY0YWM0MDYzYzMwOWZkYjQx
YzcxYmZjZjZjYmQ5ZWE2NGVkOTMxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2FnZW50cy9JbnNwZWN0b3JBbmltYXRpb25BZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQW5pbWF0aW9uQWdlbnQuaApAQCAtNDQsMjYgKzQ0
LDI0IEBAIGNsYXNzIEtleWZyYW1lRWZmZWN0OwogY2xhc3MgUGFnZTsKIGNsYXNzIFdlYkFuaW1h
dGlvbjsKIAotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7Ci0KIGNsYXNzIEluc3BlY3RvckFu
aW1hdGlvbkFnZW50IGZpbmFsIDogcHVibGljIEluc3BlY3RvckFnZW50QmFzZSwgcHVibGljIElu
c3BlY3Rvcjo6QW5pbWF0aW9uQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKICAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShJbnNwZWN0b3JBbmltYXRpb25BZ2VudCk7CiAgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgSW5zcGVjdG9yQW5pbWF0aW9uQWdlbnQoUGFnZUFn
ZW50Q29udGV4dCYpOwotICAgIH5JbnNwZWN0b3JBbmltYXRpb25BZ2VudCgpIG92ZXJyaWRlOwor
ICAgIH5JbnNwZWN0b3JBbmltYXRpb25BZ2VudCgpOwogCiAgICAgLy8gSW5zcGVjdG9yQWdlbnRC
YXNlCi0gICAgdm9pZCBkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9u
dGVuZFJvdXRlciosIEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXIqKSBvdmVycmlkZTsKLSAg
ICB2b2lkIHdpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlzY29ubmVj
dFJlYXNvbikgb3ZlcnJpZGU7CisgICAgdm9pZCBkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQo
SW5zcGVjdG9yOjpGcm9udGVuZFJvdXRlciosIEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXIq
KTsKKyAgICB2b2lkIHdpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlz
Y29ubmVjdFJlYXNvbik7CiAKICAgICAvLyBBbmltYXRpb25CYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXIKLSAgICB2b2lkIGVuYWJsZShFcnJvclN0cmluZyYpIG92ZXJyaWRlOwotICAgIHZvaWQgZGlz
YWJsZShFcnJvclN0cmluZyYpIG92ZXJyaWRlOwotICAgIHZvaWQgcmVxdWVzdEVmZmVjdFRhcmdl
dChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uSWQsIGludCogbm9kZUlkKSBv
dmVycmlkZTsKLSAgICB2b2lkIHJlc29sdmVBbmltYXRpb24oRXJyb3JTdHJpbmcmLCBjb25zdCBT
dHJpbmcmIGFuaW1hdGlvbklkLCBjb25zdCBTdHJpbmcqIG9iamVjdEdyb3VwLCBSZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYpIG92ZXJyaWRlOwotICAg
IHZvaWQgc3RhcnRUcmFja2luZyhFcnJvclN0cmluZyYpIG92ZXJyaWRlOwotICAgIHZvaWQgc3Rv
cFRyYWNraW5nKEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7CisgICAgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBlbmFibGUoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29s
OjpFcnJvclN0cmluZ09yPHZvaWQ+IGRpc2FibGUoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29s
OjpFcnJvclN0cmluZ09yPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkPiByZXF1ZXN0
RWZmZWN0VGFyZ2V0KGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFuaW1hdGlvbjo6QW5pbWF0
aW9uSWQmKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+PiByZXNvbHZlQW5pbWF0aW9u
KGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFuaW1hdGlvbjo6QW5pbWF0aW9uSWQmLCBjb25z
dCBTdHJpbmcmIG9iamVjdEdyb3VwKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0
cmluZ09yPHZvaWQ+IHN0YXJ0VHJhY2tpbmcoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpF
cnJvclN0cmluZ09yPHZvaWQ+IHN0b3BUcmFja2luZygpOwogCiAgICAgLy8gSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uCiAgICAgdm9pZCB3aWxsQXBwbHlLZXlmcmFtZUVmZmVjdChFbGVtZW50Jiwg
S2V5ZnJhbWVFZmZlY3QmLCBDb21wdXRlZEVmZmVjdFRpbWluZyk7CkBAIC03Nyw3ICs3NSw3IEBA
IHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBTdHJpbmcgZmluZEFuaW1hdGlvbklkKFdlYkFuaW1h
dGlvbiYpOwotICAgIFdlYkFuaW1hdGlvbiogYXNzZXJ0QW5pbWF0aW9uKEVycm9yU3RyaW5nJiwg
Y29uc3QgU3RyaW5nJiBhbmltYXRpb25JZCk7CisgICAgV2ViQW5pbWF0aW9uKiBhc3NlcnRBbmlt
YXRpb24oSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGFu
aW1hdGlvbklkKTsKICAgICB2b2lkIGJpbmRBbmltYXRpb24oV2ViQW5pbWF0aW9uJiwgYm9vbCBj
YXB0dXJlQmFja3RyYWNlKTsKICAgICB2b2lkIHVuYmluZEFuaW1hdGlvbihjb25zdCBTdHJpbmcm
IGFuaW1hdGlvbklkKTsKICAgICB2b2lkIGFuaW1hdGlvbkRlc3Ryb3llZFRpbWVyRmlyZWQoKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQXBw
bGljYXRpb25DYWNoZUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50LmNwcAppbmRleCA5MTI5MjY0OGQ2ODJkOWMz
ODFlNTI0ZmQwOTcwMDhhNDdjMzY1MDRhLi5hZjY3Mzc4YTZkZGNkMWFlNzcyNDRlODk5NTM2Nzcz
YTcwMjdiMDNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0lu
c3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuY3BwCkBAIC01Nywz
MSArNTcsMzAgQEAgdm9pZCBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQ6OmRpZENyZWF0
ZUZyb250ZW5kQW5kQmFja2VuZChGcm9udGVuZFJvdXRlcioKIAogdm9pZCBJbnNwZWN0b3JBcHBs
aWNhdGlvbkNhY2hlQWdlbnQ6OndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rv
cjo6RGlzY29ubmVjdFJlYXNvbikKIHsKLSAgICBFcnJvclN0cmluZyBpZ25vcmVkOwotICAgIGRp
c2FibGUoaWdub3JlZCk7CisgICAgZGlzYWJsZSgpOwogfQogCi12b2lkIEluc3BlY3RvckFwcGxp
Y2F0aW9uQ2FjaGVBZ2VudDo6ZW5hYmxlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZykKK1Byb3Rv
Y29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudDo6
ZW5hYmxlKCkKIHsKLSAgICBpZiAobV9pbnN0cnVtZW50aW5nQWdlbnRzLmVuYWJsZWRBcHBsaWNh
dGlvbkNhY2hlQWdlbnQoKSA9PSB0aGlzKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIkFwcGxp
Y2F0aW9uQ2FjaGUgZG9tYWluIGFscmVhZHkgZW5hYmxlZCJfczsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KKyAgICBpZiAobV9pbnN0cnVtZW50aW5nQWdlbnRzLmVuYWJsZWRBcHBsaWNhdGlvbkNh
Y2hlQWdlbnQoKSA9PSB0aGlzKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkFwcGxp
Y2F0aW9uQ2FjaGUgZG9tYWluIGFscmVhZHkgZW5hYmxlZCJfcyk7CiAKICAgICBtX2luc3RydW1l
bnRpbmdBZ2VudHMuc2V0RW5hYmxlZEFwcGxpY2F0aW9uQ2FjaGVBZ2VudCh0aGlzKTsKIAogICAg
IC8vIFdlIG5lZWQgdG8gcGFzcyBpbml0aWFsIG5hdmlnYXRvci5vbk9ubGluZS4KICAgICBuZXR3
b3JrU3RhdGVDaGFuZ2VkKCk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3Rv
ckFwcGxpY2F0aW9uQ2FjaGVBZ2VudDo6ZGlzYWJsZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcp
CitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hl
QWdlbnQ6OmRpc2FibGUoKQogewotICAgIGlmIChtX2luc3RydW1lbnRpbmdBZ2VudHMuZW5hYmxl
ZEFwcGxpY2F0aW9uQ2FjaGVBZ2VudCgpICE9IHRoaXMpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcg
PSAiQXBwbGljYXRpb25DYWNoZSBkb21haW4gYWxyZWFkeSBkaXNhYmxlZCJfczsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KKyAgICBpZiAobV9pbnN0cnVtZW50aW5nQWdlbnRzLmVuYWJsZWRBcHBs
aWNhdGlvbkNhY2hlQWdlbnQoKSAhPSB0aGlzKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0
ZWQoIkFwcGxpY2F0aW9uQ2FjaGUgZG9tYWluIGFscmVhZHkgZGlzYWJsZWQiX3MpOwogCiAgICAg
bV9pbnN0cnVtZW50aW5nQWdlbnRzLnNldEVuYWJsZWRBcHBsaWNhdGlvbkNhY2hlQWdlbnQobnVs
bHB0cik7CisKKyAgICByZXR1cm4geyB9OwogfQogCiB2b2lkIEluc3BlY3RvckFwcGxpY2F0aW9u
Q2FjaGVBZ2VudDo6dXBkYXRlQXBwbGljYXRpb25DYWNoZVN0YXR1cyhGcmFtZSogZnJhbWUpCkBA
IC0xMDksMTYgKzEwOCwxMyBAQCB2b2lkIEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudDo6
bmV0d29ya1N0YXRlQ2hhbmdlZCgpCiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPm5ldHdvcmtT
dGF0ZVVwZGF0ZWQocGxhdGZvcm1TdHJhdGVnaWVzKCktPmxvYWRlclN0cmF0ZWd5KCktPmlzT25M
aW5lKCkpOwogfQogCi12b2lkIEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudDo6Z2V0RnJh
bWVzV2l0aE1hbmlmZXN0cyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIFJlZlB0cjxKU09OOjpB
cnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkZyYW1lV2l0aE1h
bmlmZXN0Pj4mIHJlc3VsdCkKK0V4cGVjdGVkPFJlZjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpB
cHBsaWNhdGlvbkNhY2hlOjpGcmFtZVdpdGhNYW5pZmVzdD4+LCBQcm90b2NvbDo6RXJyb3JTdHJp
bmc+IEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudDo6Z2V0RnJhbWVzV2l0aE1hbmlmZXN0
cygpCiB7CiAgICAgYXV0byogcGFnZUFnZW50ID0gbV9pbnN0cnVtZW50aW5nQWdlbnRzLmVuYWJs
ZWRQYWdlQWdlbnQoKTsKLSAgICBpZiAoIXBhZ2VBZ2VudCkgewotICAgICAgICBlcnJvclN0cmlu
ZyA9ICJQYWdlIGRvbWFpbiBtdXN0IGJlIGVuYWJsZWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICByZXN1bHQgPSBKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFw
cGxpY2F0aW9uQ2FjaGU6OkZyYW1lV2l0aE1hbmlmZXN0Pjo6Y3JlYXRlKCk7CisgICAgaWYgKCFw
YWdlQWdlbnQpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiUGFnZSBkb21haW4gbXVz
dCBiZSBlbmFibGVkIl9zKTsKIAorICAgIGF1dG8gcmVzdWx0ID0gSlNPTjo6QXJyYXlPZjxQcm90
b2NvbDo6QXBwbGljYXRpb25DYWNoZTo6RnJhbWVXaXRoTWFuaWZlc3Q+OjpjcmVhdGUoKTsKICAg
ICBmb3IgKEZyYW1lKiBmcmFtZSA9ICZtX2luc3BlY3RlZFBhZ2UubWFpbkZyYW1lKCk7IGZyYW1l
OyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsKICAgICAgICAgYXV0byog
ZG9jdW1lbnRMb2FkZXIgPSBmcmFtZS0+bG9hZGVyKCkuZG9jdW1lbnRMb2FkZXIoKTsKICAgICAg
ICAgaWYgKCFkb2N1bWVudExvYWRlcikKQEAgLTEyNywxNiArMTIzLDE3IEBAIHZvaWQgSW5zcGVj
dG9yQXBwbGljYXRpb25DYWNoZUFnZW50OjpnZXRGcmFtZXNXaXRoTWFuaWZlc3RzKEVycm9yU3Ry
aW5nJiBlcnJvclN0CiAgICAgICAgIGF1dG8mIGhvc3QgPSBkb2N1bWVudExvYWRlci0+YXBwbGlj
YXRpb25DYWNoZUhvc3QoKTsKICAgICAgICAgU3RyaW5nIG1hbmlmZXN0VVJMID0gaG9zdC5hcHBs
aWNhdGlvbkNhY2hlSW5mbygpLm1hbmlmZXN0LnN0cmluZygpOwogICAgICAgICBpZiAoIW1hbmlm
ZXN0VVJMLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgcmVzdWx0LT5hZGRJdGVtKEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkZyYW1lV2l0aE1hbmlmZXN0OjpjcmVhdGUo
KQorICAgICAgICAgICAgcmVzdWx0LT5hZGRJdGVtKFByb3RvY29sOjpBcHBsaWNhdGlvbkNhY2hl
OjpGcmFtZVdpdGhNYW5pZmVzdDo6Y3JlYXRlKCkKICAgICAgICAgICAgICAgICAuc2V0RnJhbWVJ
ZChwYWdlQWdlbnQtPmZyYW1lSWQoZnJhbWUpKQogICAgICAgICAgICAgICAgIC5zZXRNYW5pZmVz
dFVSTChtYW5pZmVzdFVSTCkKICAgICAgICAgICAgICAgICAuc2V0U3RhdHVzKHN0YXRpY19jYXN0
PGludD4oaG9zdC5zdGF0dXMoKSkpCiAgICAgICAgICAgICAgICAgLnJlbGVhc2UoKSk7CiAgICAg
ICAgIH0KICAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotRG9jdW1lbnRMb2FkZXIqIElu
c3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudDo6YXNzZXJ0RnJhbWVXaXRoRG9jdW1lbnRMb2Fk
ZXIoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGZyYW1lSWQpCitEb2N1
bWVudExvYWRlciogSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50Ojphc3NlcnRGcmFtZVdp
dGhEb2N1bWVudExvYWRlcihQcm90b2NvbDo6RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25z
dCBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpGcmFtZUlkJiBmcmFtZUlkKQogewogICAg
IGF1dG8qIHBhZ2VBZ2VudCA9IG1faW5zdHJ1bWVudGluZ0FnZW50cy5lbmFibGVkUGFnZUFnZW50
KCk7CiAgICAgaWYgKCFwYWdlQWdlbnQpIHsKQEAgLTE1MSwyOCArMTQ4LDMyIEBAIERvY3VtZW50
TG9hZGVyKiBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQ6OmFzc2VydEZyYW1lV2l0aERv
Y3VtZW50TG9hZGVyKEVyCiAgICAgcmV0dXJuIEluc3BlY3RvclBhZ2VBZ2VudDo6YXNzZXJ0RG9j
dW1lbnRMb2FkZXIoZXJyb3JTdHJpbmcsIGZyYW1lKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JBcHBs
aWNhdGlvbkNhY2hlQWdlbnQ6OmdldE1hbmlmZXN0Rm9yRnJhbWUoRXJyb3JTdHJpbmcmIGVycm9y
U3RyaW5nLCBjb25zdCBTdHJpbmcmIGZyYW1lSWQsIFN0cmluZyogbWFuaWZlc3RVUkwpCitFeHBl
Y3RlZDxTdHJpbmcsIFByb3RvY29sOjpFcnJvclN0cmluZz4gSW5zcGVjdG9yQXBwbGljYXRpb25D
YWNoZUFnZW50OjpnZXRNYW5pZmVzdEZvckZyYW1lKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6
Ok5ldHdvcms6OkZyYW1lSWQmIGZyYW1lSWQpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5n
IGVycm9yU3RyaW5nOworCiAgICAgRG9jdW1lbnRMb2FkZXIqIGRvY3VtZW50TG9hZGVyID0gYXNz
ZXJ0RnJhbWVXaXRoRG9jdW1lbnRMb2FkZXIoZXJyb3JTdHJpbmcsIGZyYW1lSWQpOwogICAgIGlm
ICghZG9jdW1lbnRMb2FkZXIpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAotICAgICptYW5pZmVzdFVSTCA9IGRvY3VtZW50TG9h
ZGVyLT5hcHBsaWNhdGlvbkNhY2hlSG9zdCgpLmFwcGxpY2F0aW9uQ2FjaGVJbmZvKCkubWFuaWZl
c3Quc3RyaW5nKCk7CisgICAgcmV0dXJuIGRvY3VtZW50TG9hZGVyLT5hcHBsaWNhdGlvbkNhY2hl
SG9zdCgpLmFwcGxpY2F0aW9uQ2FjaGVJbmZvKCkubWFuaWZlc3Quc3RyaW5nKCk7CiB9CiAKLXZv
aWQgSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50OjpnZXRBcHBsaWNhdGlvbkNhY2hlRm9y
RnJhbWUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGZyYW1lSWQsIFJl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcHBsaWNhdGlvbkNhY2hlOjpBcHBsaWNhdGlvbkNh
Y2hlPiYgYXBwbGljYXRpb25DYWNoZSkKK0V4cGVjdGVkPFJlZjxQcm90b2NvbDo6QXBwbGljYXRp
b25DYWNoZTo6QXBwbGljYXRpb25DYWNoZT4sIFByb3RvY29sOjpFcnJvclN0cmluZz4gSW5zcGVj
dG9yQXBwbGljYXRpb25DYWNoZUFnZW50OjpnZXRBcHBsaWNhdGlvbkNhY2hlRm9yRnJhbWUoY29u
c3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6RnJhbWVJZCYgZnJhbWVJZCkKIHsKKyAg
ICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBhdXRvKiBkb2N1bWVu
dExvYWRlciA9IGFzc2VydEZyYW1lV2l0aERvY3VtZW50TG9hZGVyKGVycm9yU3RyaW5nLCBmcmFt
ZUlkKTsKICAgICBpZiAoIWRvY3VtZW50TG9hZGVyKQotICAgICAgICByZXR1cm47CisgICAgICAg
IHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAgICBhdXRvJiBob3N0ID0g
ZG9jdW1lbnRMb2FkZXItPmFwcGxpY2F0aW9uQ2FjaGVIb3N0KCk7Ci0gICAgYXBwbGljYXRpb25D
YWNoZSA9IGJ1aWxkT2JqZWN0Rm9yQXBwbGljYXRpb25DYWNoZShob3N0LnJlc291cmNlTGlzdCgp
LCBob3N0LmFwcGxpY2F0aW9uQ2FjaGVJbmZvKCkpOworICAgIHJldHVybiBidWlsZE9iamVjdEZv
ckFwcGxpY2F0aW9uQ2FjaGUoaG9zdC5yZXNvdXJjZUxpc3QoKSwgaG9zdC5hcHBsaWNhdGlvbkNh
Y2hlSW5mbygpKTsKIH0KIAotUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2Fj
aGU6OkFwcGxpY2F0aW9uQ2FjaGU+IEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudDo6YnVp
bGRPYmplY3RGb3JBcHBsaWNhdGlvbkNhY2hlKGNvbnN0IFZlY3RvcjxBcHBsaWNhdGlvbkNhY2hl
SG9zdDo6UmVzb3VyY2VJbmZvPiYgYXBwbGljYXRpb25DYWNoZVJlc291cmNlcywgY29uc3QgQXBw
bGljYXRpb25DYWNoZUhvc3Q6OkNhY2hlSW5mbyYgYXBwbGljYXRpb25DYWNoZUluZm8pCitSZWY8
UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkFwcGxpY2F0aW9uQ2FjaGU+IEluc3BlY3RvckFw
cGxpY2F0aW9uQ2FjaGVBZ2VudDo6YnVpbGRPYmplY3RGb3JBcHBsaWNhdGlvbkNhY2hlKGNvbnN0
IFZlY3RvcjxBcHBsaWNhdGlvbkNhY2hlSG9zdDo6UmVzb3VyY2VJbmZvPiYgYXBwbGljYXRpb25D
YWNoZVJlc291cmNlcywgY29uc3QgQXBwbGljYXRpb25DYWNoZUhvc3Q6OkNhY2hlSW5mbyYgYXBw
bGljYXRpb25DYWNoZUluZm8pCiB7Ci0gICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFw
cGxpY2F0aW9uQ2FjaGU6OkFwcGxpY2F0aW9uQ2FjaGU6OmNyZWF0ZSgpCisgICAgcmV0dXJuIFBy
b3RvY29sOjpBcHBsaWNhdGlvbkNhY2hlOjpBcHBsaWNhdGlvbkNhY2hlOjpjcmVhdGUoKQogICAg
ICAgICAuc2V0TWFuaWZlc3RVUkwoYXBwbGljYXRpb25DYWNoZUluZm8ubWFuaWZlc3Quc3RyaW5n
KCkpCiAgICAgICAgIC5zZXRTaXplKGFwcGxpY2F0aW9uQ2FjaGVJbmZvLnNpemUpCiAgICAgICAg
IC5zZXRDcmVhdGlvblRpbWUoYXBwbGljYXRpb25DYWNoZUluZm8uY3JlYXRpb25UaW1lKQpAQCAt
MTgxLDE1ICsxODIsMTUgQEAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2Fj
aGU6OkFwcGxpY2F0aW9uQ2FjaGU+IEluc3BlY3RvckFwcGxpY2F0aW8KICAgICAgICAgLnJlbGVh
c2UoKTsKIH0KIAotUmVmPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXBwbGlj
YXRpb25DYWNoZTo6QXBwbGljYXRpb25DYWNoZVJlc291cmNlPj4gSW5zcGVjdG9yQXBwbGljYXRp
b25DYWNoZUFnZW50OjpidWlsZEFycmF5Rm9yQXBwbGljYXRpb25DYWNoZVJlc291cmNlcyhjb25z
dCBWZWN0b3I8QXBwbGljYXRpb25DYWNoZUhvc3Q6OlJlc291cmNlSW5mbz4mIGFwcGxpY2F0aW9u
Q2FjaGVSZXNvdXJjZXMpCitSZWY8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6QXBwbGljYXRpb25D
YWNoZTo6QXBwbGljYXRpb25DYWNoZVJlc291cmNlPj4gSW5zcGVjdG9yQXBwbGljYXRpb25DYWNo
ZUFnZW50OjpidWlsZEFycmF5Rm9yQXBwbGljYXRpb25DYWNoZVJlc291cmNlcyhjb25zdCBWZWN0
b3I8QXBwbGljYXRpb25DYWNoZUhvc3Q6OlJlc291cmNlSW5mbz4mIGFwcGxpY2F0aW9uQ2FjaGVS
ZXNvdXJjZXMpCiB7Ci0gICAgYXV0byByZXN1bHQgPSBKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZT46OmNy
ZWF0ZSgpOworICAgIGF1dG8gcmVzdWx0ID0gSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6QXBwbGlj
YXRpb25DYWNoZTo6QXBwbGljYXRpb25DYWNoZVJlc291cmNlPjo6Y3JlYXRlKCk7CiAgICAgZm9y
IChhdXRvJiBpbmZvIDogYXBwbGljYXRpb25DYWNoZVJlc291cmNlcykKICAgICAgICAgcmVzdWx0
LT5hZGRJdGVtKGJ1aWxkT2JqZWN0Rm9yQXBwbGljYXRpb25DYWNoZVJlc291cmNlKGluZm8pKTsK
ICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1SZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXBwbGlj
YXRpb25DYWNoZTo6QXBwbGljYXRpb25DYWNoZVJlc291cmNlPiBJbnNwZWN0b3JBcHBsaWNhdGlv
bkNhY2hlQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yQXBwbGljYXRpb25DYWNoZVJlc291cmNlKGNvbnN0
IEFwcGxpY2F0aW9uQ2FjaGVIb3N0OjpSZXNvdXJjZUluZm8mIHJlc291cmNlSW5mbykKK1JlZjxQ
cm90b2NvbDo6QXBwbGljYXRpb25DYWNoZTo6QXBwbGljYXRpb25DYWNoZVJlc291cmNlPiBJbnNw
ZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yQXBwbGljYXRpb25DYWNo
ZVJlc291cmNlKGNvbnN0IEFwcGxpY2F0aW9uQ2FjaGVIb3N0OjpSZXNvdXJjZUluZm8mIHJlc291
cmNlSW5mbykKIHsKICAgICBTdHJpbmdCdWlsZGVyIHR5cGVzOwogCkBAIC0yMDgsNyArMjA5LDcg
QEAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkFwcGxpY2F0aW9u
Q2FjaGVSZXNvdXJjZT4gSW5zcGVjdG9yQXAKICAgICBpZiAocmVzb3VyY2VJbmZvLmlzRXhwbGlj
aXQpCiAgICAgICAgIHR5cGVzLmFwcGVuZExpdGVyYWwoIkV4cGxpY2l0ICIpOwogCi0gICAgcmV0
dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkFwcGxpY2F0aW9uQ2Fj
aGVSZXNvdXJjZTo6Y3JlYXRlKCkKKyAgICByZXR1cm4gUHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2Fj
aGU6OkFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZTo6Y3JlYXRlKCkKICAgICAgICAgLnNldFVybChy
ZXNvdXJjZUluZm8ucmVzb3VyY2Uuc3RyaW5nKCkpCiAgICAgICAgIC5zZXRTaXplKHN0YXRpY19j
YXN0PGludD4ocmVzb3VyY2VJbmZvLnNpemUpKQogICAgICAgICAuc2V0VHlwZSh0eXBlcy50b1N0
cmluZygpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNw
ZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9h
Z2VudHMvSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50LmgKaW5kZXggNTE5ODhmNjE3ZGUx
MWVmMTE3MDhhN2IzOTJjZjBjZTE5NGI0ODZlYS4uODA3Njc5N2NhYjYwOWI5MjM2NzkzZTIyODFh
NTg5YzRjZDE0NjI1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50
cy9JbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5oCkBAIC0zOSwy
NSArMzksMjMgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgRnJhbWU7CiBjbGFzcyBQYWdl
OwogCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQogY2xhc3MgSW5zcGVjdG9yQXBwbGlj
YXRpb25DYWNoZUFnZW50IGZpbmFsIDogcHVibGljIEluc3BlY3RvckFnZW50QmFzZSwgcHVibGlj
IEluc3BlY3Rvcjo6QXBwbGljYXRpb25DYWNoZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7CiAg
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50KTsK
ICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBJbnNwZWN0b3JBcHBs
aWNhdGlvbkNhY2hlQWdlbnQoUGFnZUFnZW50Q29udGV4dCYpOwotICAgIH5JbnNwZWN0b3JBcHBs
aWNhdGlvbkNhY2hlQWdlbnQoKSBvdmVycmlkZTsKKyAgICB+SW5zcGVjdG9yQXBwbGljYXRpb25D
YWNoZUFnZW50KCk7CiAKICAgICAvLyBJbnNwZWN0b3JBZ2VudEJhc2UKLSAgICB2b2lkIGRpZENy
ZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kUm91dGVyKiwgSW5zcGVj
dG9yOjpCYWNrZW5kRGlzcGF0Y2hlciopIG92ZXJyaWRlOwotICAgIHZvaWQgd2lsbERlc3Ryb3lG
cm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKSBvdmVycmlkZTsK
KyAgICB2b2lkIGRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5k
Um91dGVyKiwgSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlciopOworICAgIHZvaWQgd2lsbERl
c3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKTsKIAog
ICAgIC8vIEFwcGxpY2F0aW9uQ2FjaGVCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIKLSAgICB2b2lk
IGVuYWJsZShFcnJvclN0cmluZyYpIG92ZXJyaWRlOwotICAgIHZvaWQgZGlzYWJsZShFcnJvclN0
cmluZyYpIG92ZXJyaWRlOwotICAgIHZvaWQgZ2V0RnJhbWVzV2l0aE1hbmlmZXN0cyhFcnJvclN0
cmluZyYsIFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFwcGxpY2F0
aW9uQ2FjaGU6OkZyYW1lV2l0aE1hbmlmZXN0Pj4mIHJlc3VsdCkgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBnZXRNYW5pZmVzdEZvckZyYW1lKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBmcmFtZUlk
LCBTdHJpbmcqIG1hbmlmZXN0VVJMKSBvdmVycmlkZTsKLSAgICB2b2lkIGdldEFwcGxpY2F0aW9u
Q2FjaGVGb3JGcmFtZShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgZnJhbWVJZCwgUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkFwcGxpY2F0aW9uQ2FjaGU+
Jikgb3ZlcnJpZGU7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lk
PiBlbmFibGUoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+
IGRpc2FibGUoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxK
U09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkZyYW1l
V2l0aE1hbmlmZXN0Pj4+IGdldEZyYW1lc1dpdGhNYW5pZmVzdHMoKTsKKyAgICBJbnNwZWN0b3I6
OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFN0cmluZz4gZ2V0TWFuaWZlc3RGb3JGcmFtZShjb25z
dCBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpGcmFtZUlkJik7CisgICAgSW5zcGVjdG9y
OjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXBwbGlj
YXRpb25DYWNoZTo6QXBwbGljYXRpb25DYWNoZT4+IGdldEFwcGxpY2F0aW9uQ2FjaGVGb3JGcmFt
ZShjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpGcmFtZUlkJik7CiAKICAgICAv
LyBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24KICAgICB2b2lkIHVwZGF0ZUFwcGxpY2F0aW9uQ2Fj
aGVTdGF0dXMoRnJhbWUqKTsKQEAgLTY4LDcgKzY2LDcgQEAgcHJpdmF0ZToKICAgICBSZWY8SlNP
Tjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcHBsaWNhdGlvbkNhY2hlOjpBcHBsaWNh
dGlvbkNhY2hlUmVzb3VyY2U+PiBidWlsZEFycmF5Rm9yQXBwbGljYXRpb25DYWNoZVJlc291cmNl
cyhjb25zdCBWZWN0b3I8QXBwbGljYXRpb25DYWNoZUhvc3Q6OlJlc291cmNlSW5mbz4mKTsKICAg
ICBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXBwbGljYXRpb25DYWNoZTo6QXBwbGljYXRpb25D
YWNoZVJlc291cmNlPiBidWlsZE9iamVjdEZvckFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZShjb25z
dCBBcHBsaWNhdGlvbkNhY2hlSG9zdDo6UmVzb3VyY2VJbmZvJik7CiAKLSAgICBEb2N1bWVudExv
YWRlciogYXNzZXJ0RnJhbWVXaXRoRG9jdW1lbnRMb2FkZXIoRXJyb3JTdHJpbmcmLCBjb25zdCBT
dHJpbmcmIGZyYW1lSWQpOworICAgIERvY3VtZW50TG9hZGVyKiBhc3NlcnRGcmFtZVdpdGhEb2N1
bWVudExvYWRlcihJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZyYsIGNvbnN0IEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OkZyYW1lSWQmKTsKIAogICAgIHN0ZDo6dW5pcXVlX3B0
cjxJbnNwZWN0b3I6OkFwcGxpY2F0aW9uQ2FjaGVGcm9udGVuZERpc3BhdGNoZXI+IG1fZnJvbnRl
bmREaXNwYXRjaGVyOwogICAgIFJlZlB0cjxJbnNwZWN0b3I6OkFwcGxpY2F0aW9uQ2FjaGVCYWNr
ZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ1BVUHJvZmlsZXJBZ2VudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNQVVByb2ZpbGVyQWdlbnQu
Y3BwCmluZGV4IGEwZTZmYzQ1MzE1MTZkOTg5MzIxMTViYjRiOWNhMmIyYzIzMDU2OTMuLjgyODEx
YmU1MWNmNDYzYzQxMTgwYmRlODA0NTgyMmQ0N2ZlMWU1MjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ1BVUHJvZmlsZXJBZ2VudC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDUFVQcm9maWxlckFn
ZW50LmNwcApAQCAtNTMsMTYgKzUzLDE1IEBAIHZvaWQgSW5zcGVjdG9yQ1BVUHJvZmlsZXJBZ2Vu
dDo6ZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEZyb250ZW5kUm91dGVyKiwgQmFjCiAKIHZv
aWQgSW5zcGVjdG9yQ1BVUHJvZmlsZXJBZ2VudDo6d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tl
bmQoRGlzY29ubmVjdFJlYXNvbikKIHsKLSAgICBFcnJvclN0cmluZyBpZ25vcmVkOwotICAgIHN0
b3BUcmFja2luZyhpZ25vcmVkKTsKKyAgICBzdG9wVHJhY2tpbmcoKTsKIAogICAgIG1faW5zdHJ1
bWVudGluZ0FnZW50cy5zZXRQZXJzaXN0ZW50Q1BVUHJvZmlsZXJBZ2VudChudWxscHRyKTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JDUFVQcm9maWxlckFnZW50OjpzdGFydFRyYWNraW5nKEVycm9yU3Ry
aW5nJikKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckNQVVByb2ZpbGVy
QWdlbnQ6OnN0YXJ0VHJhY2tpbmcoKQogewogICAgIGlmIChtX3RyYWNraW5nKQotICAgICAgICBy
ZXR1cm47CisgICAgICAgIHJldHVybiB7IH07CiAKICAgICBSZXNvdXJjZVVzYWdlVGhyZWFkOjph
ZGRPYnNlcnZlcih0aGlzLCBDUFUsIFt0aGlzXSAoY29uc3QgUmVzb3VyY2VVc2FnZURhdGEmIGRh
dGEpIHsKICAgICAgICAgY29sbGVjdFNhbXBsZShkYXRhKTsKQEAgLTcxLDE4ICs3MCwyMiBAQCB2
b2lkIEluc3BlY3RvckNQVVByb2ZpbGVyQWdlbnQ6OnN0YXJ0VHJhY2tpbmcoRXJyb3JTdHJpbmcm
KQogICAgIG1fdHJhY2tpbmcgPSB0cnVlOwogCiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPnRy
YWNraW5nU3RhcnQobV9lbnZpcm9ubWVudC5leGVjdXRpb25TdG9wd2F0Y2goKS5lbGFwc2VkVGlt
ZSgpLnNlY29uZHMoKSk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckNQ
VVByb2ZpbGVyQWdlbnQ6OnN0b3BUcmFja2luZyhFcnJvclN0cmluZyYpCitQcm90b2NvbDo6RXJy
b3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JDUFVQcm9maWxlckFnZW50OjpzdG9wVHJhY2tpbmco
KQogewogICAgIGlmICghbV90cmFja2luZykKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1
cm4geyB9OwogCiAgICAgUmVzb3VyY2VVc2FnZVRocmVhZDo6cmVtb3ZlT2JzZXJ2ZXIodGhpcyk7
CiAKICAgICBtX3RyYWNraW5nID0gZmFsc2U7CiAKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+
dHJhY2tpbmdDb21wbGV0ZShtX2Vudmlyb25tZW50LmV4ZWN1dGlvblN0b3B3YXRjaCgpLmVsYXBz
ZWRUaW1lKCkuc2Vjb25kcygpKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKIHN0YXRpYyBSZWY8
UHJvdG9jb2w6OkNQVVByb2ZpbGVyOjpUaHJlYWRJbmZvPiBidWlsZFRocmVhZEluZm8oY29uc3Qg
VGhyZWFkQ1BVSW5mbyYgdGhyZWFkKQpAQCAtMTEzLDcgKzExNiw3IEBAIHZvaWQgSW5zcGVjdG9y
Q1BVUHJvZmlsZXJBZ2VudDo6Y29sbGVjdFNhbXBsZShjb25zdCBSZXNvdXJjZVVzYWdlRGF0YSYg
ZGF0YSkKICAgICAgICAgLnJlbGVhc2UoKTsKIAogICAgIGlmICghZGF0YS5jcHVUaHJlYWRzLmlz
RW1wdHkoKSkgewotICAgICAgICBSZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6Q1BVUHJv
ZmlsZXI6OlRocmVhZEluZm8+PiB0aHJlYWRzID0gSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6Q1BV
UHJvZmlsZXI6OlRocmVhZEluZm8+OjpjcmVhdGUoKTsKKyAgICAgICAgYXV0byB0aHJlYWRzID0g
SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6Q1BVUHJvZmlsZXI6OlRocmVhZEluZm8+OjpjcmVhdGUo
KTsKICAgICAgICAgZm9yIChhdXRvJiB0aHJlYWRJbmZvIDogZGF0YS5jcHVUaHJlYWRzKQogICAg
ICAgICAgICAgdGhyZWFkcy0+YWRkSXRlbShidWlsZFRocmVhZEluZm8odGhyZWFkSW5mbykpOwog
ICAgICAgICBldmVudC0+c2V0VGhyZWFkcyhXVEZNb3ZlKHRocmVhZHMpKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ1BVUHJvZmlsZXJBZ2Vu
dC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDUFVQcm9maWxl
ckFnZW50LmgKaW5kZXggNGVlOGU5Nzg1M2Q3MTJkM2RhNjQzOWI5ODk3ZTg2NWE4OTZkYmZmZi4u
ZmU1ZTE4NWFiZGIxYzRmMmYxM2I0ZDhhMDdhOTJiZmQ3OWU2OWQwYiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDUFVQcm9maWxlckFnZW50LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDUFVQcm9maWxl
ckFnZW50LmgKQEAgLTM0LDIyICszNCwyMCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXR5
cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCiBjbGFzcyBJbnNwZWN0b3JDUFVQcm9maWxlckFn
ZW50IGZpbmFsIDogcHVibGljIEluc3BlY3RvckFnZW50QmFzZSwgcHVibGljIEluc3BlY3Rvcjo6
Q1BVUHJvZmlsZXJCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewogICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKEluc3BlY3RvckNQVVByb2ZpbGVyQWdlbnQpOwogICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOwogcHVibGljOgogICAgIEluc3BlY3RvckNQVVByb2ZpbGVyQWdlbnQoUGFnZUFnZW50
Q29udGV4dCYpOwotICAgIH5JbnNwZWN0b3JDUFVQcm9maWxlckFnZW50KCkgb3ZlcnJpZGU7Cisg
ICAgfkluc3BlY3RvckNQVVByb2ZpbGVyQWdlbnQoKTsKIAogICAgIC8vIEluc3BlY3RvckFnZW50
QmFzZQotICAgIHZvaWQgZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJv
bnRlbmRSb3V0ZXIqLCBJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyKikgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCB3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5l
Y3RSZWFzb24pIG92ZXJyaWRlOworICAgIHZvaWQgZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5k
KEluc3BlY3Rvcjo6RnJvbnRlbmRSb3V0ZXIqLCBJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVy
Kik7CisgICAgdm9pZCB3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkRp
c2Nvbm5lY3RSZWFzb24pOwogCiAgICAgLy8gQ1BVUHJvZmlsZXJCYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXIKLSAgICB2b2lkIHN0YXJ0VHJhY2tpbmcoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKLSAg
ICB2b2lkIHN0b3BUcmFja2luZyhFcnJvclN0cmluZyYpIG92ZXJyaWRlOworICAgIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc3RhcnRUcmFja2luZygpOworICAgIElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc3RvcFRyYWNraW5nKCk7CiAK
IHByaXZhdGU6CiAgICAgdm9pZCBjb2xsZWN0U2FtcGxlKGNvbnN0IFJlc291cmNlVXNhZ2VEYXRh
Jik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rv
ckNTU0FnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9y
Q1NTQWdlbnQuY3BwCmluZGV4IDU2NWViZTA4MmMwNzhiYjY2ODc3NDAzODllYjM3MmVlMTE5Yjc0
MWIuLjU5NGM4NDVjMThhMzI1ZDUwZDllNWUwMzgyMTA5ZjkyMmIzYmNkMjEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ1NTQWdlbnQuY3Bw
CkBAIC05MiwxMCArOTIsNyBAQCBzdGF0aWMgdW5zaWduZWQgY29tcHV0ZVBzZXVkb0NsYXNzTWFz
ayhjb25zdCBKU09OOjpBcnJheSYgcHNldWRvQ2xhc3NBcnJheSkKIAogICAgIHVuc2lnbmVkIHJl
c3VsdCA9IFBzZXVkb0NsYXNzTm9uZTsKICAgICBmb3IgKGF1dG8mIHBzZXVkb0NsYXNzVmFsdWUg
OiBwc2V1ZG9DbGFzc0FycmF5KSB7Ci0gICAgICAgIFN0cmluZyBwc2V1ZG9DbGFzczsKLSAgICAg
ICAgYm9vbCBzdWNjZXNzID0gcHNldWRvQ2xhc3NWYWx1ZS0+YXNTdHJpbmcocHNldWRvQ2xhc3Mp
OwotICAgICAgICBpZiAoIXN1Y2Nlc3MpCi0gICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
YXV0byBwc2V1ZG9DbGFzcyA9IHBzZXVkb0NsYXNzVmFsdWUtPmFzU3RyaW5nKCk7CiAgICAgICAg
IGlmIChwc2V1ZG9DbGFzcyA9PSBhY3RpdmUpCiAgICAgICAgICAgICByZXN1bHQgfD0gUHNldWRv
Q2xhc3NBY3RpdmU7CiAgICAgICAgIGVsc2UgaWYgKHBzZXVkb0NsYXNzID09IGhvdmVyKQpAQCAt
MzEyLDggKzMwOSw3IEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmRpZENyZWF0ZUZyb250ZW5k
QW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kUm91dGVyKiwKIAogdm9pZCBJbnNwZWN0b3JD
U1NBZ2VudDo6d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25u
ZWN0UmVhc29uKQogewotICAgIFN0cmluZyB1bnVzZWQ7Ci0gICAgZGlzYWJsZSh1bnVzZWQpOwor
ICAgIGRpc2FibGUoKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6cmVzZXQoKQpAQCAt
MzI3LDEwICszMjMsMTAgQEAgdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6cmVzZXQoKQogICAgIHJl
c2V0UHNldWRvU3RhdGVzKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmVuYWJsZShF
cnJvclN0cmluZyYpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JDU1NB
Z2VudDo6ZW5hYmxlKCkKIHsKICAgICBpZiAobV9pbnN0cnVtZW50aW5nQWdlbnRzLmVuYWJsZWRD
U1NBZ2VudCgpID09IHRoaXMpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHsgfTsK
IAogICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy5zZXRFbmFibGVkQ1NTQWdlbnQodGhpcyk7CiAK
QEAgLTMzOCwxMyArMzM0LDE3IEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmVuYWJsZShFcnJv
clN0cmluZyYpCiAgICAgICAgIGZvciAoYXV0byogZG9jdW1lbnQgOiBkb21BZ2VudC0+ZG9jdW1l
bnRzKCkpCiAgICAgICAgICAgICBhY3RpdmVTdHlsZVNoZWV0c1VwZGF0ZWQoKmRvY3VtZW50KTsK
ICAgICB9CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckNTU0FnZW50Ojpk
aXNhYmxlKEVycm9yU3RyaW5nJikKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3Bl
Y3RvckNTU0FnZW50OjpkaXNhYmxlKCkKIHsKICAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMuc2V0
RW5hYmxlZENTU0FnZW50KG51bGxwdHIpOwogCiAgICAgcmVzZXQoKTsKKworICAgIHJldHVybiB7
IH07CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmRvY3VtZW50RGV0YWNoZWQoRG9jdW1l
bnQmIGRvY3VtZW50KQpAQCAtMzg3LDcgKzM4Nyw3IEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6
OnNldEFjdGl2ZVN0eWxlU2hlZXRzRm9yRG9jdW1lbnQoRG9jdW1lbnQmIGRvY3VtZW50LCBWZWN0
CiAgICAgICAgIHByZXZpb3VzbHlLbm93bkFjdGl2ZVN0eWxlU2hlZXRzLnJlbW92ZShjc3NTdHls
ZVNoZWV0KTsKICAgICAgICAgUmVmUHRyPEluc3BlY3RvclN0eWxlU2hlZXQ+IGluc3BlY3RvclN0
eWxlU2hlZXQgPSBtX2Nzc1N0eWxlU2hlZXRUb0luc3BlY3RvclN0eWxlU2hlZXQuZ2V0KGNzc1N0
eWxlU2hlZXQpOwogICAgICAgICBpZiAobV9pZFRvSW5zcGVjdG9yU3R5bGVTaGVldC5jb250YWlu
cyhpbnNwZWN0b3JTdHlsZVNoZWV0LT5pZCgpKSkgewotICAgICAgICAgICAgU3RyaW5nIGlkID0g
dW5iaW5kU3R5bGVTaGVldChpbnNwZWN0b3JTdHlsZVNoZWV0LmdldCgpKTsKKyAgICAgICAgICAg
IGF1dG8gaWQgPSB1bmJpbmRTdHlsZVNoZWV0KGluc3BlY3RvclN0eWxlU2hlZXQuZ2V0KCkpOwog
ICAgICAgICAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPnN0eWxlU2hlZXRSZW1vdmVkKGlkKTsK
ICAgICAgICAgfQogICAgIH0KQEAgLTM5Niw3ICszOTYsOCBAQCB2b2lkIEluc3BlY3RvckNTU0Fn
ZW50OjpzZXRBY3RpdmVTdHlsZVNoZWV0c0ZvckRvY3VtZW50KERvY3VtZW50JiBkb2N1bWVudCwg
VmVjdAogICAgICAgICBwcmV2aW91c2x5S25vd25BY3RpdmVTdHlsZVNoZWV0cy5hZGQoY3NzU3R5
bGVTaGVldCk7CiAgICAgICAgIGlmICghbV9jc3NTdHlsZVNoZWV0VG9JbnNwZWN0b3JTdHlsZVNo
ZWV0LmNvbnRhaW5zKGNzc1N0eWxlU2hlZXQpKSB7CiAgICAgICAgICAgICBJbnNwZWN0b3JTdHls
ZVNoZWV0KiBpbnNwZWN0b3JTdHlsZVNoZWV0ID0gYmluZFN0eWxlU2hlZXQoY3NzU3R5bGVTaGVl
dCk7Ci0gICAgICAgICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+c3R5bGVTaGVldEFkZGVkKGlu
c3BlY3RvclN0eWxlU2hlZXQtPmJ1aWxkT2JqZWN0Rm9yU3R5bGVTaGVldEluZm8oKSk7CisgICAg
ICAgICAgICBpZiAoYXV0byBoZWFkZXIgPSBpbnNwZWN0b3JTdHlsZVNoZWV0LT5idWlsZE9iamVj
dEZvclN0eWxlU2hlZXRJbmZvKCkpCisgICAgICAgICAgICAgICAgbV9mcm9udGVuZERpc3BhdGNo
ZXItPnN0eWxlU2hlZXRBZGRlZChoZWFkZXIucmVsZWFzZU5vbk51bGwoKSk7CiAgICAgICAgIH0K
ICAgICB9CiB9CkBAIC00MTAsNyArNDExLDcgQEAgYm9vbCBJbnNwZWN0b3JDU1NBZ2VudDo6Zm9y
Y2VQc2V1ZG9TdGF0ZShjb25zdCBFbGVtZW50JiBlbGVtZW50LCBDU1NTZWxlY3Rvcjo6UHMKICAg
ICBpZiAoIWRvbUFnZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpbnQgbm9kZUlk
ID0gZG9tQWdlbnQtPmJvdW5kTm9kZUlkKCZlbGVtZW50KTsKKyAgICBhdXRvIG5vZGVJZCA9IGRv
bUFnZW50LT5ib3VuZE5vZGVJZCgmZWxlbWVudCk7CiAgICAgaWYgKCFub2RlSWQpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIApAQCAtNDI5LDM3ICs0MzAsMzcgQEAgYm9vbCBJbnNwZWN0b3JDU1NB
Z2VudDo6Zm9yY2VQc2V1ZG9TdGF0ZShjb25zdCBFbGVtZW50JiBlbGVtZW50LCBDU1NTZWxlY3Rv
cjo6UHMKICAgICB9CiB9CiAKLXN0YXRpYyBPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpD
U1M6OlBzZXVkb0lkPiBwcm90b2NvbFZhbHVlRm9yUHNldWRvSWQoUHNldWRvSWQgcHNldWRvSWQp
CitzdGF0aWMgT3B0aW9uYWw8UHJvdG9jb2w6OkNTUzo6UHNldWRvSWQ+IHByb3RvY29sVmFsdWVG
b3JQc2V1ZG9JZChQc2V1ZG9JZCBwc2V1ZG9JZCkKIHsKICAgICBzd2l0Y2ggKHBzZXVkb0lkKSB7
CiAgICAgY2FzZSBQc2V1ZG9JZDo6Rmlyc3RMaW5lOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9y
OjpQcm90b2NvbDo6Q1NTOjpQc2V1ZG9JZDo6Rmlyc3RMaW5lOworICAgICAgICByZXR1cm4gUHJv
dG9jb2w6OkNTUzo6UHNldWRvSWQ6OkZpcnN0TGluZTsKICAgICBjYXNlIFBzZXVkb0lkOjpGaXJz
dExldHRlcjoKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6UHNldWRv
SWQ6OkZpcnN0TGV0dGVyOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OkNTUzo6UHNldWRvSWQ6
OkZpcnN0TGV0dGVyOwogICAgIGNhc2UgUHNldWRvSWQ6Ok1hcmtlcjoKLSAgICAgICAgcmV0dXJu
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6UHNldWRvSWQ6Ok1hcmtlcjsKKyAgICAgICAgcmV0
dXJuIFByb3RvY29sOjpDU1M6OlBzZXVkb0lkOjpNYXJrZXI7CiAgICAgY2FzZSBQc2V1ZG9JZDo6
QmVmb3JlOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpQc2V1ZG9J
ZDo6QmVmb3JlOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OkNTUzo6UHNldWRvSWQ6OkJlZm9y
ZTsKICAgICBjYXNlIFBzZXVkb0lkOjpBZnRlcjoKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkNTUzo6UHNldWRvSWQ6OkFmdGVyOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6
OkNTUzo6UHNldWRvSWQ6OkFmdGVyOwogICAgIGNhc2UgUHNldWRvSWQ6OlNlbGVjdGlvbjoKLSAg
ICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6UHNldWRvSWQ6OlNlbGVjdGlv
bjsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpDU1M6OlBzZXVkb0lkOjpTZWxlY3Rpb247CiAg
ICAgY2FzZSBQc2V1ZG9JZDo6SGlnaGxpZ2h0OgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQ
cm90b2NvbDo6Q1NTOjpQc2V1ZG9JZDo6SGlnaGxpZ2h0OworICAgICAgICByZXR1cm4gUHJvdG9j
b2w6OkNTUzo6UHNldWRvSWQ6OkhpZ2hsaWdodDsKICAgICBjYXNlIFBzZXVkb0lkOjpTY3JvbGxi
YXI6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlBzZXVkb0lkOjpT
Y3JvbGxiYXI7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6Q1NTOjpQc2V1ZG9JZDo6U2Nyb2xs
YmFyOwogICAgIGNhc2UgUHNldWRvSWQ6OlNjcm9sbGJhclRodW1iOgotICAgICAgICByZXR1cm4g
SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpQc2V1ZG9JZDo6U2Nyb2xsYmFyVGh1bWI7CisgICAg
ICAgIHJldHVybiBQcm90b2NvbDo6Q1NTOjpQc2V1ZG9JZDo6U2Nyb2xsYmFyVGh1bWI7CiAgICAg
Y2FzZSBQc2V1ZG9JZDo6U2Nyb2xsYmFyQnV0dG9uOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9y
OjpQcm90b2NvbDo6Q1NTOjpQc2V1ZG9JZDo6U2Nyb2xsYmFyQnV0dG9uOworICAgICAgICByZXR1
cm4gUHJvdG9jb2w6OkNTUzo6UHNldWRvSWQ6OlNjcm9sbGJhckJ1dHRvbjsKICAgICBjYXNlIFBz
ZXVkb0lkOjpTY3JvbGxiYXJUcmFjazoKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkNTUzo6UHNldWRvSWQ6OlNjcm9sbGJhclRyYWNrOworICAgICAgICByZXR1cm4gUHJvdG9j
b2w6OkNTUzo6UHNldWRvSWQ6OlNjcm9sbGJhclRyYWNrOwogICAgIGNhc2UgUHNldWRvSWQ6OlNj
cm9sbGJhclRyYWNrUGllY2U6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpD
U1M6OlBzZXVkb0lkOjpTY3JvbGxiYXJUcmFja1BpZWNlOworICAgICAgICByZXR1cm4gUHJvdG9j
b2w6OkNTUzo6UHNldWRvSWQ6OlNjcm9sbGJhclRyYWNrUGllY2U7CiAgICAgY2FzZSBQc2V1ZG9J
ZDo6U2Nyb2xsYmFyQ29ybmVyOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6
Q1NTOjpQc2V1ZG9JZDo6U2Nyb2xsYmFyQ29ybmVyOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6
OkNTUzo6UHNldWRvSWQ6OlNjcm9sbGJhckNvcm5lcjsKICAgICBjYXNlIFBzZXVkb0lkOjpSZXNp
emVyOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpQc2V1ZG9JZDo6
UmVzaXplcjsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpDU1M6OlBzZXVkb0lkOjpSZXNpemVy
OwogCiAgICAgZGVmYXVsdDoKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC00Njcs
MzYgKzQ2OCwzNyBAQCBzdGF0aWMgT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpQ
c2V1ZG9JZD4gcHJvdG9jb2xWYWx1ZUZvclBzZXVkb0lkKFBzZQogICAgIH0KIH0KIAotdm9pZCBJ
bnNwZWN0b3JDU1NBZ2VudDo6Z2V0TWF0Y2hlZFN0eWxlc0Zvck5vZGUoRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBpbnQgbm9kZUlkLCBjb25zdCBib29sKiBpbmNsdWRlUHNldWRvLCBjb25zdCBi
b29sKiBpbmNsdWRlSW5oZXJpdGVkLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpDU1M6OlJ1bGVNYXRjaD4+JiBtYXRjaGVkQ1NTUnVsZXMsIFJlZlB0cjxKU09OOjpB
cnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6UHNldWRvSWRNYXRjaGVzPj4mIHBzZXVk
b0lkTWF0Y2hlcywgUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NT
OjpJbmhlcml0ZWRTdHlsZUVudHJ5Pj4mIGluaGVyaXRlZEVudHJpZXMpCitQcm90b2NvbDo6RXJy
b3JTdHJpbmdPcjxzdGQ6OnR1cGxlPFJlZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpDU1M6
OlJ1bGVNYXRjaD4+LCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6Q1NTOjpQc2V1ZG9J
ZE1hdGNoZXM+PiwgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkNTUzo6SW5oZXJpdGVk
U3R5bGVFbnRyeT4+Pj4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldE1hdGNoZWRTdHlsZXNGb3JOb2Rl
KFByb3RvY29sOjpET006Ok5vZGVJZCBub2RlSWQsIE9wdGlvbmFsPGJvb2w+JiYgaW5jbHVkZVBz
ZXVkbywgT3B0aW9uYWw8Ym9vbD4mJiBpbmNsdWRlSW5oZXJpdGVkKQogeworICAgIFByb3RvY29s
OjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBlbGVt
ZW50Rm9ySWQoZXJyb3JTdHJpbmcsIG5vZGVJZCk7CiAgICAgaWYgKCFlbGVtZW50KQotICAgICAg
ICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAK
ICAgICBFbGVtZW50KiBvcmlnaW5hbEVsZW1lbnQgPSBlbGVtZW50OwogICAgIFBzZXVkb0lkIGVs
ZW1lbnRQc2V1ZG9JZCA9IGVsZW1lbnQtPnBzZXVkb0lkKCk7CiAgICAgaWYgKGVsZW1lbnRQc2V1
ZG9JZCAhPSBQc2V1ZG9JZDo6Tm9uZSkgewogICAgICAgICBlbGVtZW50ID0gZG93bmNhc3Q8UHNl
dWRvRWxlbWVudD4oKmVsZW1lbnQpLmhvc3RFbGVtZW50KCk7Ci0gICAgICAgIGlmICghZWxlbWVu
dCkgewotICAgICAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWlzc2luZyBwYXJlbnQgb2YgcHNldWRv
LWVsZW1lbnQgbm9kZSBmb3IgZ2l2ZW4gbm9kZUlkIl9zOwotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB9CisgICAgICAgIGlmICghZWxlbWVudCkKKyAgICAgICAgICAgIHJldHVybiBtYWtl
VW5leHBlY3RlZCgiTWlzc2luZyBwYXJlbnQgb2YgcHNldWRvLWVsZW1lbnQgbm9kZSBmb3IgZ2l2
ZW4gbm9kZUlkIl9zKTsKICAgICB9CiAKICAgICAvLyBNYXRjaGVkIHJ1bGVzLgogICAgIGF1dG8m
IHN0eWxlUmVzb2x2ZXIgPSBlbGVtZW50LT5zdHlsZVJlc29sdmVyKCk7CiAgICAgYXV0byBtYXRj
aGVkUnVsZXMgPSBzdHlsZVJlc29sdmVyLnBzZXVkb1N0eWxlUnVsZXNGb3JFbGVtZW50KGVsZW1l
bnQsIGVsZW1lbnRQc2V1ZG9JZCwgU3R5bGU6OlJlc29sdmVyOjpBbGxDU1NSdWxlcyk7Ci0gICAg
bWF0Y2hlZENTU1J1bGVzID0gYnVpbGRBcnJheUZvck1hdGNoZWRSdWxlTGlzdChtYXRjaGVkUnVs
ZXMsIHN0eWxlUmVzb2x2ZXIsICplbGVtZW50LCBlbGVtZW50UHNldWRvSWQpOworICAgIGF1dG8g
bWF0Y2hlZENTU1J1bGVzID0gYnVpbGRBcnJheUZvck1hdGNoZWRSdWxlTGlzdChtYXRjaGVkUnVs
ZXMsIHN0eWxlUmVzb2x2ZXIsICplbGVtZW50LCBlbGVtZW50UHNldWRvSWQpOworICAgIFJlZlB0
cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpDU1M6OlBzZXVkb0lkTWF0Y2hlcz4+IHBzZXVkb0Vs
ZW1lbnRzOworICAgIFJlZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpDU1M6OkluaGVyaXRl
ZFN0eWxlRW50cnk+PiBpbmhlcml0ZWQ7CiAKICAgICBpZiAoIW9yaWdpbmFsRWxlbWVudC0+aXNQ
c2V1ZG9FbGVtZW50KCkpIHsKLSAgICAgICAgLy8gUHNldWRvIGVsZW1lbnRzLgogICAgICAgICBp
ZiAoIWluY2x1ZGVQc2V1ZG8gfHwgKmluY2x1ZGVQc2V1ZG8pIHsKLSAgICAgICAgICAgIGF1dG8g
cHNldWRvRWxlbWVudHMgPSBKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6
UHNldWRvSWRNYXRjaGVzPjo6Y3JlYXRlKCk7CisgICAgICAgICAgICBwc2V1ZG9FbGVtZW50cyA9
IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkNTUzo6UHNldWRvSWRNYXRjaGVzPjo6Y3JlYXRlKCk7
CiAgICAgICAgICAgICBmb3IgKFBzZXVkb0lkIHBzZXVkb0lkID0gUHNldWRvSWQ6OkZpcnN0UHVi
bGljUHNldWRvSWQ7IHBzZXVkb0lkIDwgUHNldWRvSWQ6OkFmdGVyTGFzdEludGVybmFsUHNldWRv
SWQ7IHBzZXVkb0lkID0gc3RhdGljX2Nhc3Q8UHNldWRvSWQ+KHN0YXRpY19jYXN0PHVuc2lnbmVk
Pihwc2V1ZG9JZCkgKyAxKSkgewogICAgICAgICAgICAgICAgIGlmIChhdXRvIHByb3RvY29sUHNl
dWRvSWQgPSBwcm90b2NvbFZhbHVlRm9yUHNldWRvSWQocHNldWRvSWQpKSB7CiAgICAgICAgICAg
ICAgICAgICAgIGF1dG8gbWF0Y2hlZFJ1bGVzID0gc3R5bGVSZXNvbHZlci5wc2V1ZG9TdHlsZVJ1
bGVzRm9yRWxlbWVudChlbGVtZW50LCBwc2V1ZG9JZCwgU3R5bGU6OlJlc29sdmVyOjpBbGxDU1NS
dWxlcyk7CiAgICAgICAgICAgICAgICAgICAgIGlmICghbWF0Y2hlZFJ1bGVzLmlzRW1wdHkoKSkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBtYXRjaGVzID0gSW5zcGVjdG9yOjpQcm90
b2NvbDo6Q1NTOjpQc2V1ZG9JZE1hdGNoZXM6OmNyZWF0ZSgpCisgICAgICAgICAgICAgICAgICAg
ICAgICBhdXRvIG1hdGNoZXMgPSBQcm90b2NvbDo6Q1NTOjpQc2V1ZG9JZE1hdGNoZXM6OmNyZWF0
ZSgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNldFBzZXVkb0lkKHByb3RvY29sUHNl
dWRvSWQudmFsdWUoKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0TWF0Y2hlcyhi
dWlsZEFycmF5Rm9yTWF0Y2hlZFJ1bGVMaXN0KG1hdGNoZWRSdWxlcywgc3R5bGVSZXNvbHZlciwg
KmVsZW1lbnQsIHBzZXVkb0lkKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVsZWFz
ZSgpOwpAQCAtNTA0LDY2ICs1MDYsNjYgQEAgdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0TWF0
Y2hlZFN0eWxlc0Zvck5vZGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgbm8KICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgcHNldWRvSWRNYXRjaGVzID0gV1RGTW92ZShwc2V1ZG9FbGVtZW50cyk7CiAgICAg
ICAgIH0KIAotICAgICAgICAvLyBJbmhlcml0ZWQgc3R5bGVzLgogICAgICAgICBpZiAoIWluY2x1
ZGVJbmhlcml0ZWQgfHwgKmluY2x1ZGVJbmhlcml0ZWQpIHsKLSAgICAgICAgICAgIGF1dG8gZW50
cmllcyA9IEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpJbmhlcml0ZWRT
dHlsZUVudHJ5Pjo6Y3JlYXRlKCk7CisgICAgICAgICAgICBpbmhlcml0ZWQgPSBKU09OOjpBcnJh
eU9mPFByb3RvY29sOjpDU1M6OkluaGVyaXRlZFN0eWxlRW50cnk+OjpjcmVhdGUoKTsKICAgICAg
ICAgICAgIGZvciAoYXV0byYgYW5jZXN0b3IgOiBhbmNlc3RvcnNPZlR5cGU8RWxlbWVudD4oKmVs
ZW1lbnQpKSB7CiAgICAgICAgICAgICAgICAgYXV0byYgcGFyZW50U3R5bGVSZXNvbHZlciA9IGFu
Y2VzdG9yLnN0eWxlUmVzb2x2ZXIoKTsKICAgICAgICAgICAgICAgICBhdXRvIHBhcmVudE1hdGNo
ZWRSdWxlcyA9IHBhcmVudFN0eWxlUmVzb2x2ZXIuc3R5bGVSdWxlc0ZvckVsZW1lbnQoJmFuY2Vz
dG9yLCBTdHlsZTo6UmVzb2x2ZXI6OkFsbENTU1J1bGVzKTsKLSAgICAgICAgICAgICAgICBhdXRv
IGVudHJ5ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpJbmhlcml0ZWRTdHlsZUVudHJ5Ojpj
cmVhdGUoKQorICAgICAgICAgICAgICAgIGF1dG8gZW50cnkgPSBQcm90b2NvbDo6Q1NTOjpJbmhl
cml0ZWRTdHlsZUVudHJ5OjpjcmVhdGUoKQogICAgICAgICAgICAgICAgICAgICAuc2V0TWF0Y2hl
ZENTU1J1bGVzKGJ1aWxkQXJyYXlGb3JNYXRjaGVkUnVsZUxpc3QocGFyZW50TWF0Y2hlZFJ1bGVz
LCBzdHlsZVJlc29sdmVyLCBhbmNlc3RvciwgUHNldWRvSWQ6Ok5vbmUpKQogICAgICAgICAgICAg
ICAgICAgICAucmVsZWFzZSgpOwogICAgICAgICAgICAgICAgIGlmIChpczxTdHlsZWRFbGVtZW50
PihhbmNlc3RvcikgJiYgZG93bmNhc3Q8U3R5bGVkRWxlbWVudD4oYW5jZXN0b3IpLmNzc29tU3R5
bGUoKS5sZW5ndGgoKSkgewogICAgICAgICAgICAgICAgICAgICBhdXRvJiBzdHlsZVNoZWV0ID0g
YXNJbnNwZWN0b3JTdHlsZVNoZWV0KGRvd25jYXN0PFN0eWxlZEVsZW1lbnQ+KGFuY2VzdG9yKSk7
CiAgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5zZXRJbmxpbmVTdHlsZShzdHlsZVNoZWV0LmJ1
aWxkT2JqZWN0Rm9yU3R5bGUoc3R5bGVTaGVldC5zdHlsZUZvcklkKEluc3BlY3RvckNTU0lkKHN0
eWxlU2hlZXQuaWQoKSwgMCkpKSk7CiAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgZW50cmllcy0+YWRkSXRlbShXVEZNb3ZlKGVudHJ5KSk7CisgICAgICAgICAgICAgICAgaW5o
ZXJpdGVkLT5hZGRJdGVtKFdURk1vdmUoZW50cnkpKTsKICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgaW5oZXJpdGVkRW50cmllcyA9IFdURk1vdmUoZW50cmllcyk7CiAgICAgICAgIH0KICAg
ICB9CisKKyAgICByZXR1cm4geyB7IFdURk1vdmUobWF0Y2hlZENTU1J1bGVzKSwgV1RGTW92ZShw
c2V1ZG9FbGVtZW50cyksIFdURk1vdmUoaW5oZXJpdGVkKSB9IH07CiB9CiAKLXZvaWQgSW5zcGVj
dG9yQ1NTQWdlbnQ6OmdldElubGluZVN0eWxlc0Zvck5vZGUoRXJyb3JTdHJpbmcmIGVycm9yU3Ry
aW5nLCBpbnQgbm9kZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHls
ZT4mIGlubGluZVN0eWxlLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHls
ZT4mIGF0dHJpYnV0ZXNTdHlsZSkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHN0ZDo6dHVwbGU8
UmVmUHRyPFByb3RvY29sOjpDU1M6OkNTU1N0eWxlPiAvKiBpbmxpbmVTdHlsZSAqLywgUmVmUHRy
PFByb3RvY29sOjpDU1M6OkNTU1N0eWxlPiAvKiBhdHRyaWJ1dGVzU3R5bGUgKi8+PiBJbnNwZWN0
b3JDU1NBZ2VudDo6Z2V0SW5saW5lU3R5bGVzRm9yTm9kZShQcm90b2NvbDo6RE9NOjpOb2RlSWQg
bm9kZUlkKQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAg
IGF1dG8qIGVsZW1lbnQgPSBlbGVtZW50Rm9ySWQoZXJyb3JTdHJpbmcsIG5vZGVJZCk7CiAgICAg
aWYgKCFpczxTdHlsZWRFbGVtZW50PihlbGVtZW50KSkKLSAgICAgICAgcmV0dXJuOworICAgICAg
ICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCiAgICAgYXV0byYgc3R5bGVk
RWxlbWVudCA9IGRvd25jYXN0PFN0eWxlZEVsZW1lbnQ+KCplbGVtZW50KTsKICAgICBhdXRvJiBz
dHlsZVNoZWV0ID0gYXNJbnNwZWN0b3JTdHlsZVNoZWV0KHN0eWxlZEVsZW1lbnQpOwotICAgIGlu
bGluZVN0eWxlID0gc3R5bGVTaGVldC5idWlsZE9iamVjdEZvclN0eWxlKCZzdHlsZWRFbGVtZW50
LmNzc29tU3R5bGUoKSk7Ci0gICAgaWYgKGF1dG8gYXR0cmlidXRlcyA9IGJ1aWxkT2JqZWN0Rm9y
QXR0cmlidXRlc1N0eWxlKHN0eWxlZEVsZW1lbnQpKQotICAgICAgICBhdHRyaWJ1dGVzU3R5bGUg
PSBXVEZNb3ZlKGF0dHJpYnV0ZXMpOwotICAgIGVsc2UKLSAgICAgICAgYXR0cmlidXRlc1N0eWxl
ID0gbnVsbHB0cjsKKyAgICByZXR1cm4geyB7IHN0eWxlU2hlZXQuYnVpbGRPYmplY3RGb3JTdHls
ZSgmc3R5bGVkRWxlbWVudC5jc3NvbVN0eWxlKCkpLCBidWlsZE9iamVjdEZvckF0dHJpYnV0ZXNT
dHlsZShzdHlsZWRFbGVtZW50KSB9IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6Omdl
dENvbXB1dGVkU3R5bGVGb3JOb2RlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJ
ZCwgUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NDb21w
dXRlZFN0eWxlUHJvcGVydHk+PiYgc3R5bGUpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8
SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6Q1NTOjpDU1NDb21wdXRlZFN0eWxlUHJvcGVydHk+Pj4g
SW5zcGVjdG9yQ1NTQWdlbnQ6OmdldENvbXB1dGVkU3R5bGVGb3JOb2RlKFByb3RvY29sOjpET006
Ok5vZGVJZCBub2RlSWQpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5n
OworCiAgICAgYXV0byogZWxlbWVudCA9IGVsZW1lbnRGb3JJZChlcnJvclN0cmluZywgbm9kZUlk
KTsKICAgICBpZiAoIWVsZW1lbnQpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1h
a2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgIGF1dG8gY29tcHV0ZWRTdHlsZUluZm8g
PSBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb246OmNyZWF0ZSgqZWxlbWVudCwgdHJ1ZSk7CiAg
ICAgYXV0byBpbnNwZWN0b3JTdHlsZSA9IEluc3BlY3RvclN0eWxlOjpjcmVhdGUoSW5zcGVjdG9y
Q1NTSWQoKSwgV1RGTW92ZShjb21wdXRlZFN0eWxlSW5mbyksIG51bGxwdHIpOwotICAgIHN0eWxl
ID0gaW5zcGVjdG9yU3R5bGUtPmJ1aWxkQXJyYXlGb3JDb21wdXRlZFN0eWxlKCk7CisgICAgcmV0
dXJuIGluc3BlY3RvclN0eWxlLT5idWlsZEFycmF5Rm9yQ29tcHV0ZWRTdHlsZSgpOwogfQogCi12
b2lkIEluc3BlY3RvckNTU0FnZW50OjpnZXRBbGxTdHlsZVNoZWV0cyhFcnJvclN0cmluZyYsIFJl
ZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGVTaGVl
dEhlYWRlcj4+JiBzdHlsZUluZm9zKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEpTT046
OkFycmF5T2Y8UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGVTaGVldEhlYWRlcj4+PiBJbnNwZWN0b3JD
U1NBZ2VudDo6Z2V0QWxsU3R5bGVTaGVldHMoKQogewotICAgIHN0eWxlSW5mb3MgPSBKU09OOjpB
cnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGVTaGVldEhlYWRlcj46OmNy
ZWF0ZSgpOworICAgIGF1dG8gaGVhZGVycyA9IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkNTUzo6
Q1NTU3R5bGVTaGVldEhlYWRlcj46OmNyZWF0ZSgpOwogCiAgICAgVmVjdG9yPEluc3BlY3RvclN0
eWxlU2hlZXQqPiBpbnNwZWN0b3JTdHlsZVNoZWV0czsKICAgICBjb2xsZWN0QWxsU3R5bGVTaGVl
dHMoaW5zcGVjdG9yU3R5bGVTaGVldHMpOwotICAgIGZvciAoYXV0byogaW5zcGVjdG9yU3R5bGVT
aGVldCA6IGluc3BlY3RvclN0eWxlU2hlZXRzKQotICAgICAgICBzdHlsZUluZm9zLT5hZGRJdGVt
KGluc3BlY3RvclN0eWxlU2hlZXQtPmJ1aWxkT2JqZWN0Rm9yU3R5bGVTaGVldEluZm8oKSk7Cisg
ICAgZm9yIChhdXRvKiBpbnNwZWN0b3JTdHlsZVNoZWV0IDogaW5zcGVjdG9yU3R5bGVTaGVldHMp
IHsKKyAgICAgICAgaWYgKGF1dG8gaGVhZGVyID0gaW5zcGVjdG9yU3R5bGVTaGVldC0+YnVpbGRP
YmplY3RGb3JTdHlsZVNoZWV0SW5mbygpKQorICAgICAgICAgICAgaGVhZGVycy0+YWRkSXRlbSho
ZWFkZXIucmVsZWFzZU5vbk51bGwoKSk7CisgICAgfQorCisgICAgcmV0dXJuIFdURk1vdmUoaGVh
ZGVycyk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmNvbGxlY3RBbGxTdHlsZVNoZWV0
cyhWZWN0b3I8SW5zcGVjdG9yU3R5bGVTaGVldCo+JiByZXN1bHQpCkBAIC01OTgsMTE2ICs2MDAs
MTI0IEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmNvbGxlY3RTdHlsZVNoZWV0cyhDU1NTdHls
ZVNoZWV0KiBzdHlsZVNoZWV0LCBWZWN0b3I8Q1NTCiAgICAgfQogfQogCi12b2lkIEluc3BlY3Rv
ckNTU0FnZW50OjpnZXRTdHlsZVNoZWV0KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3Qg
U3RyaW5nJiBzdHlsZVNoZWV0SWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNT
U1N0eWxlU2hlZXRCb2R5PiYgc3R5bGVTaGVldE9iamVjdCkKK1Byb3RvY29sOjpFcnJvclN0cmlu
Z09yPFJlZjxQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZVNoZWV0Qm9keT4+IEluc3BlY3RvckNTU0Fn
ZW50OjpnZXRTdHlsZVNoZWV0KGNvbnN0IFByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRJZCYgc3R5
bGVTaGVldElkKQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwog
ICAgIEluc3BlY3RvclN0eWxlU2hlZXQqIGluc3BlY3RvclN0eWxlU2hlZXQgPSBhc3NlcnRTdHls
ZVNoZWV0Rm9ySWQoZXJyb3JTdHJpbmcsIHN0eWxlU2hlZXRJZCk7CiAgICAgaWYgKCFpbnNwZWN0
b3JTdHlsZVNoZWV0KQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBl
Y3RlZChlcnJvclN0cmluZyk7CiAKLSAgICBzdHlsZVNoZWV0T2JqZWN0ID0gaW5zcGVjdG9yU3R5
bGVTaGVldC0+YnVpbGRPYmplY3RGb3JTdHlsZVNoZWV0KCk7CisgICAgYXV0byBzdHlsZVNoZWV0
ID0gaW5zcGVjdG9yU3R5bGVTaGVldC0+YnVpbGRPYmplY3RGb3JTdHlsZVNoZWV0KCk7CisgICAg
aWYgKCFzdHlsZVNoZWV0KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkludGVybmFs
IGVycm9yOiBtaXNzaW5nIHN0eWxlIHNoZWV0Iik7CisKKyAgICByZXR1cm4gc3R5bGVTaGVldC5y
ZWxlYXNlTm9uTnVsbCgpOwogfQogCi12b2lkIEluc3BlY3RvckNTU0FnZW50OjpnZXRTdHlsZVNo
ZWV0VGV4dChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgc3R5bGVTaGVl
dElkLCBTdHJpbmcqIHJlc3VsdCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPFN0cmluZz4gSW5z
cGVjdG9yQ1NTQWdlbnQ6OmdldFN0eWxlU2hlZXRUZXh0KGNvbnN0IFByb3RvY29sOjpDU1M6OlN0
eWxlU2hlZXRJZCYgc3R5bGVTaGVldElkKQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBl
cnJvclN0cmluZzsKKwogICAgIEluc3BlY3RvclN0eWxlU2hlZXQqIGluc3BlY3RvclN0eWxlU2hl
ZXQgPSBhc3NlcnRTdHlsZVNoZWV0Rm9ySWQoZXJyb3JTdHJpbmcsIHN0eWxlU2hlZXRJZCk7CiAg
ICAgaWYgKCFpbnNwZWN0b3JTdHlsZVNoZWV0KQotICAgICAgICByZXR1cm47CisgICAgICAgIHJl
dHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAgICBhdXRvIHRleHQgPSBpbnNw
ZWN0b3JTdHlsZVNoZWV0LT50ZXh0KCk7Ci0gICAgaWYgKCF0ZXh0Lmhhc0V4Y2VwdGlvbigpKQot
ICAgICAgICAqcmVzdWx0ID0gdGV4dC5yZWxlYXNlUmV0dXJuVmFsdWUoKTsKKyAgICBpZiAodGV4
dC5oYXNFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEluc3BlY3Rv
ckRPTUFnZW50Ojp0b0Vycm9yU3RyaW5nKHRleHQucmVsZWFzZUV4Y2VwdGlvbigpKSk7CisKKyAg
ICByZXR1cm4gdGV4dC5yZWxlYXNlUmV0dXJuVmFsdWUoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JD
U1NBZ2VudDo6c2V0U3R5bGVTaGVldFRleHQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25z
dCBTdHJpbmcmIHN0eWxlU2hlZXRJZCwgY29uc3QgU3RyaW5nJiB0ZXh0KQorUHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yQ1NTQWdlbnQ6OnNldFN0eWxlU2hlZXRUZXh0KGNv
bnN0IFByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRJZCYgc3R5bGVTaGVldElkLCBjb25zdCBTdHJp
bmcmIHRleHQpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAg
ICAgSW5zcGVjdG9yU3R5bGVTaGVldCogaW5zcGVjdG9yU3R5bGVTaGVldCA9IGFzc2VydFN0eWxl
U2hlZXRGb3JJZChlcnJvclN0cmluZywgc3R5bGVTaGVldElkKTsKICAgICBpZiAoIWluc3BlY3Rv
clN0eWxlU2hlZXQpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVj
dGVkKGVycm9yU3RyaW5nKTsKIAogICAgIGF1dG8qIGRvbUFnZW50ID0gbV9pbnN0cnVtZW50aW5n
QWdlbnRzLnBlcnNpc3RlbnRET01BZ2VudCgpOwotICAgIGlmICghZG9tQWdlbnQpIHsKLSAgICAg
ICAgZXJyb3JTdHJpbmcgPSAiRE9NIGRvbWFpbiBtdXN0IGJlIGVuYWJsZWQiX3M7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9CisgICAgaWYgKCFkb21BZ2VudCkKKyAgICAgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKCJET00gZG9tYWluIG11c3QgYmUgZW5hYmxlZCJfcyk7CiAKICAgICBhdXRvIHJl
c3VsdCA9IGRvbUFnZW50LT5oaXN0b3J5KCktPnBlcmZvcm0obWFrZVVuaXF1ZTxTZXRTdHlsZVNo
ZWV0VGV4dEFjdGlvbj4oaW5zcGVjdG9yU3R5bGVTaGVldCwgdGV4dCkpOwogICAgIGlmIChyZXN1
bHQuaGFzRXhjZXB0aW9uKCkpCi0gICAgICAgIGVycm9yU3RyaW5nID0gSW5zcGVjdG9yRE9NQWdl
bnQ6OnRvRXJyb3JTdHJpbmcocmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKSk7CisgICAgICAgIHJl
dHVybiBtYWtlVW5leHBlY3RlZChJbnNwZWN0b3JET01BZ2VudDo6dG9FcnJvclN0cmluZyhyZXN1
bHQucmVsZWFzZUV4Y2VwdGlvbigpKSk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIElu
c3BlY3RvckNTU0FnZW50OjpzZXRTdHlsZVRleHQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBj
b25zdCBKU09OOjpPYmplY3QmIGZ1bGxTdHlsZUlkLCBjb25zdCBTdHJpbmcmIHRleHQsIFJlZlB0
cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlPiYgcmVzdWx0KQorUHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8UmVmPFByb3RvY29sOjpDU1M6OkNTU1N0eWxlPj4gSW5zcGVjdG9yQ1NT
QWdlbnQ6OnNldFN0eWxlVGV4dChSZWY8SlNPTjo6T2JqZWN0PiYmIHN0eWxlSWQsIGNvbnN0IFN0
cmluZyYgdGV4dCkKIHsKLSAgICBJbnNwZWN0b3JDU1NJZCBjb21wb3VuZElkKGZ1bGxTdHlsZUlk
KTsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKKyAgICBJbnNwZWN0
b3JDU1NJZCBjb21wb3VuZElkKHN0eWxlSWQpOwogICAgIEFTU0VSVCghY29tcG91bmRJZC5pc0Vt
cHR5KCkpOwogCiAgICAgSW5zcGVjdG9yU3R5bGVTaGVldCogaW5zcGVjdG9yU3R5bGVTaGVldCA9
IGFzc2VydFN0eWxlU2hlZXRGb3JJZChlcnJvclN0cmluZywgY29tcG91bmRJZC5zdHlsZVNoZWV0
SWQoKSk7CiAgICAgaWYgKCFpbnNwZWN0b3JTdHlsZVNoZWV0KQotICAgICAgICByZXR1cm47Cisg
ICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAgICBhdXRvKiBk
b21BZ2VudCA9IG1faW5zdHJ1bWVudGluZ0FnZW50cy5wZXJzaXN0ZW50RE9NQWdlbnQoKTsKLSAg
ICBpZiAoIWRvbUFnZW50KSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIkRPTSBkb21haW4gbXVz
dCBiZSBlbmFibGVkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghZG9tQWdl
bnQpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiRE9NIGRvbWFpbiBtdXN0IGJlIGVu
YWJsZWQiX3MpOwogCiAgICAgYXV0byBwZXJmb3JtUmVzdWx0ID0gZG9tQWdlbnQtPmhpc3Rvcnko
KS0+cGVyZm9ybShtYWtlVW5pcXVlPFNldFN0eWxlVGV4dEFjdGlvbj4oaW5zcGVjdG9yU3R5bGVT
aGVldCwgY29tcG91bmRJZCwgdGV4dCkpOwotICAgIGlmIChwZXJmb3JtUmVzdWx0Lmhhc0V4Y2Vw
dGlvbigpKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gSW5zcGVjdG9yRE9NQWdlbnQ6OnRvRXJy
b3JTdHJpbmcocGVyZm9ybVJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCkpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQorICAgIGlmIChwZXJmb3JtUmVzdWx0Lmhhc0V4Y2VwdGlvbigpKQorICAgICAg
ICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoSW5zcGVjdG9yRE9NQWdlbnQ6OnRvRXJyb3JTdHJpbmco
cGVyZm9ybVJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCkpKTsKIAotICAgIHJlc3VsdCA9IGluc3Bl
Y3RvclN0eWxlU2hlZXQtPmJ1aWxkT2JqZWN0Rm9yU3R5bGUoaW5zcGVjdG9yU3R5bGVTaGVldC0+
c3R5bGVGb3JJZChjb21wb3VuZElkKSk7CisgICAgcmV0dXJuIGluc3BlY3RvclN0eWxlU2hlZXQt
PmJ1aWxkT2JqZWN0Rm9yU3R5bGUoaW5zcGVjdG9yU3R5bGVTaGVldC0+c3R5bGVGb3JJZChjb21w
b3VuZElkKSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OnNldFJ1bGVTZWxlY3RvcihF
cnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IEpTT046Ok9iamVjdCYgZnVsbFJ1bGVJZCwg
Y29uc3QgU3RyaW5nJiBzZWxlY3RvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6
Q1NTUnVsZT4mIHJlc3VsdCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxQcm90b2NvbDo6
Q1NTOjpDU1NSdWxlPj4gSW5zcGVjdG9yQ1NTQWdlbnQ6OnNldFJ1bGVTZWxlY3RvcihSZWY8SlNP
Tjo6T2JqZWN0PiYmIHJ1bGVJZCwgY29uc3QgU3RyaW5nJiBzZWxlY3RvcikKIHsKLSAgICBJbnNw
ZWN0b3JDU1NJZCBjb21wb3VuZElkKGZ1bGxSdWxlSWQpOworICAgIFByb3RvY29sOjpFcnJvclN0
cmluZyBlcnJvclN0cmluZzsKKworICAgIEluc3BlY3RvckNTU0lkIGNvbXBvdW5kSWQocnVsZUlk
KTsKICAgICBBU1NFUlQoIWNvbXBvdW5kSWQuaXNFbXB0eSgpKTsKIAogICAgIEluc3BlY3RvclN0
eWxlU2hlZXQqIGluc3BlY3RvclN0eWxlU2hlZXQgPSBhc3NlcnRTdHlsZVNoZWV0Rm9ySWQoZXJy
b3JTdHJpbmcsIGNvbXBvdW5kSWQuc3R5bGVTaGVldElkKCkpOwogICAgIGlmICghaW5zcGVjdG9y
U3R5bGVTaGVldCkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0
ZWQoZXJyb3JTdHJpbmcpOwogCiAgICAgYXV0byogZG9tQWdlbnQgPSBtX2luc3RydW1lbnRpbmdB
Z2VudHMucGVyc2lzdGVudERPTUFnZW50KCk7Ci0gICAgaWYgKCFkb21BZ2VudCkgewotICAgICAg
ICBlcnJvclN0cmluZyA9ICJET00gZG9tYWluIG11c3QgYmUgZW5hYmxlZCJfczsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KKyAgICBpZiAoIWRvbUFnZW50KQorICAgICAgICByZXR1cm4gbWFrZVVu
ZXhwZWN0ZWQoIkRPTSBkb21haW4gbXVzdCBiZSBlbmFibGVkIl9zKTsKIAogICAgIGF1dG8gcGVy
Zm9ybVJlc3VsdCA9IGRvbUFnZW50LT5oaXN0b3J5KCktPnBlcmZvcm0obWFrZVVuaXF1ZTxTZXRS
dWxlU2VsZWN0b3JBY3Rpb24+KGluc3BlY3RvclN0eWxlU2hlZXQsIGNvbXBvdW5kSWQsIHNlbGVj
dG9yKSk7Ci0gICAgaWYgKHBlcmZvcm1SZXN1bHQuaGFzRXhjZXB0aW9uKCkpIHsKLSAgICAgICAg
ZXJyb3JTdHJpbmcgPSBJbnNwZWN0b3JET01BZ2VudDo6dG9FcnJvclN0cmluZyhwZXJmb3JtUmVz
dWx0LnJlbGVhc2VFeGNlcHRpb24oKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYg
KHBlcmZvcm1SZXN1bHQuaGFzRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBl
Y3RlZChJbnNwZWN0b3JET01BZ2VudDo6dG9FcnJvclN0cmluZyhwZXJmb3JtUmVzdWx0LnJlbGVh
c2VFeGNlcHRpb24oKSkpOwogCi0gICAgcmVzdWx0ID0gaW5zcGVjdG9yU3R5bGVTaGVldC0+YnVp
bGRPYmplY3RGb3JSdWxlKGluc3BlY3RvclN0eWxlU2hlZXQtPnJ1bGVGb3JJZChjb21wb3VuZElk
KSk7CisgICAgYXV0byBydWxlID0gaW5zcGVjdG9yU3R5bGVTaGVldC0+YnVpbGRPYmplY3RGb3JS
dWxlKGluc3BlY3RvclN0eWxlU2hlZXQtPnJ1bGVGb3JJZChjb21wb3VuZElkKSk7CisgICAgaWYg
KCFydWxlKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkludGVybmFsIGVycm9yOiBt
aXNzaW5nIHN0eWxlIHNoZWV0Iik7CisKKyAgICByZXR1cm4gcnVsZS5yZWxlYXNlTm9uTnVsbCgp
OwogfQogCi12b2lkIEluc3BlY3RvckNTU0FnZW50OjpjcmVhdGVTdHlsZVNoZWV0KEVycm9yU3Ry
aW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBTdHJpbmcqIHN0eWxlU2hl
ZXRJZCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPFByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRJ
ZD4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmNyZWF0ZVN0eWxlU2hlZXQoY29uc3QgUHJvdG9jb2w6Ok5l
dHdvcms6OkZyYW1lSWQmIGZyYW1lSWQpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVy
cm9yU3RyaW5nOworCiAgICAgYXV0byogcGFnZUFnZW50ID0gbV9pbnN0cnVtZW50aW5nQWdlbnRz
LmVuYWJsZWRQYWdlQWdlbnQoKTsKLSAgICBpZiAoIXBhZ2VBZ2VudCkgewotICAgICAgICBlcnJv
clN0cmluZyA9ICJQYWdlIGRvbWFpbiBtdXN0IGJlIGVuYWJsZWQiX3M7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9CisgICAgaWYgKCFwYWdlQWdlbnQpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBl
Y3RlZCgiUGFnZSBkb21haW4gbXVzdCBiZSBlbmFibGVkIl9zKTsKIAogICAgIGF1dG8qIGZyYW1l
ID0gcGFnZUFnZW50LT5hc3NlcnRGcmFtZShlcnJvclN0cmluZywgZnJhbWVJZCk7CiAgICAgaWYg
KCFmcmFtZSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQo
ZXJyb3JTdHJpbmcpOwogCiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gZnJhbWUtPmRvY3VtZW50
KCk7Ci0gICAgaWYgKCFkb2N1bWVudCkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5n
IGRvY3VtZW50IG9mIGZyYW1lIGZvciBnaXZlbiBmcmFtZUlkIl9zOwotICAgICAgICByZXR1cm47
Ci0gICAgfQorICAgIGlmICghZG9jdW1lbnQpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3Rl
ZCgiTWlzc2luZyBkb2N1bWVudCBvZiBmcmFtZSBmb3IgZ2l2ZW4gZnJhbWVJZCJfcyk7CiAKICAg
ICBJbnNwZWN0b3JTdHlsZVNoZWV0KiBpbnNwZWN0b3JTdHlsZVNoZWV0ID0gY3JlYXRlSW5zcGVj
dG9yU3R5bGVTaGVldEZvckRvY3VtZW50KCpkb2N1bWVudCk7Ci0gICAgaWYgKCFpbnNwZWN0b3JT
dHlsZVNoZWV0KSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIkNvdWxkIG5vdCBjcmVhdGUgc3R5
bGUgc2hlZXQgZm9yIGRvY3VtZW50IG9mIGZyYW1lIGZvciBnaXZlbiBmcmFtZUlkIl9zOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghaW5zcGVjdG9yU3R5bGVTaGVldCkKKyAgICAg
ICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJDb3VsZCBub3QgY3JlYXRlIHN0eWxlIHNoZWV0IGZv
ciBkb2N1bWVudCBvZiBmcmFtZSBmb3IgZ2l2ZW4gZnJhbWVJZCJfcyk7CiAKLSAgICAqc3R5bGVT
aGVldElkID0gaW5zcGVjdG9yU3R5bGVTaGVldC0+aWQoKTsKKyAgICByZXR1cm4gaW5zcGVjdG9y
U3R5bGVTaGVldC0+aWQoKTsKIH0KIAogSW5zcGVjdG9yU3R5bGVTaGVldCogSW5zcGVjdG9yQ1NT
QWdlbnQ6OmNyZWF0ZUluc3BlY3RvclN0eWxlU2hlZXRGb3JEb2N1bWVudChEb2N1bWVudCYgZG9j
dW1lbnQpCkBAIC03NTEsNDEgKzc2MSw0MiBAQCBJbnNwZWN0b3JTdHlsZVNoZWV0KiBJbnNwZWN0
b3JDU1NBZ2VudDo6Y3JlYXRlSW5zcGVjdG9yU3R5bGVTaGVldEZvckRvY3VtZW50KERvYwogICAg
IHJldHVybiBpbnNwZWN0b3JTdHlsZVNoZWV0c0ZvckRvY3VtZW50Lmxhc3QoKS5nZXQoKTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6YWRkUnVsZShFcnJvclN0cmluZyYgZXJyb3JTdHJp
bmcsIGNvbnN0IFN0cmluZyYgc3R5bGVTaGVldElkLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yLCBS
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NSdWxlPiYgcmVzdWx0KQorUHJvdG9j
b2w6OkVycm9yU3RyaW5nT3I8UmVmPFByb3RvY29sOjpDU1M6OkNTU1J1bGU+PiBJbnNwZWN0b3JD
U1NBZ2VudDo6YWRkUnVsZShjb25zdCBQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0SWQmIHN0eWxl
U2hlZXRJZCwgY29uc3QgU3RyaW5nJiBzZWxlY3RvcikKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JT
dHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBJbnNwZWN0b3JTdHlsZVNoZWV0KiBpbnNwZWN0b3JT
dHlsZVNoZWV0ID0gYXNzZXJ0U3R5bGVTaGVldEZvcklkKGVycm9yU3RyaW5nLCBzdHlsZVNoZWV0
SWQpOwogICAgIGlmICghaW5zcGVjdG9yU3R5bGVTaGVldCkKLSAgICAgICAgcmV0dXJuOworICAg
ICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCiAgICAgYXV0byogZG9t
QWdlbnQgPSBtX2luc3RydW1lbnRpbmdBZ2VudHMucGVyc2lzdGVudERPTUFnZW50KCk7Ci0gICAg
aWYgKCFkb21BZ2VudCkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJET00gZG9tYWluIG11c3Qg
YmUgZW5hYmxlZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoIWRvbUFnZW50
KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkRPTSBkb21haW4gbXVzdCBiZSBlbmFi
bGVkIl9zKTsKIAogICAgIGF1dG8gYWN0aW9uID0gbWFrZVVuaXF1ZTxBZGRSdWxlQWN0aW9uPihp
bnNwZWN0b3JTdHlsZVNoZWV0LCBzZWxlY3Rvcik7CiAgICAgYXV0byYgcmF3QWN0aW9uID0gKmFj
dGlvbjsKICAgICBhdXRvIHBlcmZvcm1SZXN1bHQgPSBkb21BZ2VudC0+aGlzdG9yeSgpLT5wZXJm
b3JtKFdURk1vdmUoYWN0aW9uKSk7Ci0gICAgaWYgKHBlcmZvcm1SZXN1bHQuaGFzRXhjZXB0aW9u
KCkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSBJbnNwZWN0b3JET01BZ2VudDo6dG9FcnJvclN0
cmluZyhwZXJmb3JtUmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKSk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9CisgICAgaWYgKHBlcmZvcm1SZXN1bHQuaGFzRXhjZXB0aW9uKCkpCisgICAgICAgIHJl
dHVybiBtYWtlVW5leHBlY3RlZChJbnNwZWN0b3JET01BZ2VudDo6dG9FcnJvclN0cmluZyhwZXJm
b3JtUmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKSkpOwogCi0gICAgSW5zcGVjdG9yQ1NTSWQgcnVs
ZUlkID0gcmF3QWN0aW9uLm5ld1J1bGVJZCgpOwotICAgIENTU1N0eWxlUnVsZSogcnVsZSA9IGlu
c3BlY3RvclN0eWxlU2hlZXQtPnJ1bGVGb3JJZChydWxlSWQpOwotICAgIHJlc3VsdCA9IGluc3Bl
Y3RvclN0eWxlU2hlZXQtPmJ1aWxkT2JqZWN0Rm9yUnVsZShydWxlKTsKKyAgICBhdXRvIHJ1bGUg
PSBpbnNwZWN0b3JTdHlsZVNoZWV0LT5idWlsZE9iamVjdEZvclJ1bGUoaW5zcGVjdG9yU3R5bGVT
aGVldC0+cnVsZUZvcklkKHJhd0FjdGlvbi5uZXdSdWxlSWQoKSkpOworICAgIGlmICghcnVsZSkK
KyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJJbnRlcm5hbCBlcnJvcjogbWlzc2luZyBz
dHlsZSBzaGVldCIpOworCisgICAgcmV0dXJuIHJ1bGUucmVsZWFzZU5vbk51bGwoKTsKIH0KIAot
dm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0U3VwcG9ydGVkQ1NTUHJvcGVydGllcyhFcnJvclN0
cmluZyYsIFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NT
UHJvcGVydHlJbmZvPj4mIGNzc1Byb3BlcnRpZXMpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxS
ZWY8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0eUluZm8+Pj4gSW5zcGVj
dG9yQ1NTQWdlbnQ6OmdldFN1cHBvcnRlZENTU1Byb3BlcnRpZXMoKQogewotICAgIGF1dG8gcHJv
cGVydGllcyA9IEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NQcm9w
ZXJ0eUluZm8+OjpjcmVhdGUoKTsKKyAgICBhdXRvIGNzc1Byb3BlcnRpZXMgPSBKU09OOjpBcnJh
eU9mPFByb3RvY29sOjpDU1M6OkNTU1Byb3BlcnR5SW5mbz46OmNyZWF0ZSgpOworCiAgICAgZm9y
IChpbnQgaSA9IGZpcnN0Q1NTUHJvcGVydHk7IGkgPD0gbGFzdENTU1Byb3BlcnR5OyArK2kpIHsK
ICAgICAgICAgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlEID0gY29udmVydFRvQ1NTUHJvcGVydHlJ
RChpKTsKICAgICAgICAgLy8gRklYTUU6IFNob3VsZCB0YWtlIGFjY291bnQgZm9yIGZsYWdzIGlu
IHNldHRpbmdzKCkuCiAgICAgICAgIGlmIChpc0ludGVybmFsQ1NTUHJvcGVydHkocHJvcGVydHlJ
RCkgfHwgIWlzRW5hYmxlZENTU1Byb3BlcnR5KHByb3BlcnR5SUQpKQogICAgICAgICAgICAgY29u
dGludWU7CiAKLSAgICAgICAgYXV0byBwcm9wZXJ0eSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNT
Uzo6Q1NTUHJvcGVydHlJbmZvOjpjcmVhdGUoKQorICAgICAgICBhdXRvIHByb3BlcnR5ID0gUHJv
dG9jb2w6OkNTUzo6Q1NTUHJvcGVydHlJbmZvOjpjcmVhdGUoKQogICAgICAgICAgICAgLnNldE5h
bWUoZ2V0UHJvcGVydHlOYW1lU3RyaW5nKHByb3BlcnR5SUQpKQogICAgICAgICAgICAgLnJlbGVh
c2UoKTsKIApAQCAtODIxLDYzICs4MzIsNjYgQEAgdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0
U3VwcG9ydGVkQ1NTUHJvcGVydGllcyhFcnJvclN0cmluZyYsIFJlZlB0cjxKU09OOjpBcnIKICAg
ICAgICAgaWYgKENTU1Byb3BlcnR5Ojppc0luaGVyaXRlZFByb3BlcnR5KHByb3BlcnR5SUQpKQog
ICAgICAgICAgICAgcHJvcGVydHktPnNldEluaGVyaXRlZCh0cnVlKTsKIAotICAgICAgICBwcm9w
ZXJ0aWVzLT5hZGRJdGVtKFdURk1vdmUocHJvcGVydHkpKTsKKyAgICAgICAgY3NzUHJvcGVydGll
cy0+YWRkSXRlbShXVEZNb3ZlKHByb3BlcnR5KSk7CiAgICAgfQotICAgIGNzc1Byb3BlcnRpZXMg
PSBXVEZNb3ZlKHByb3BlcnRpZXMpOworCisgICAgcmV0dXJuIFdURk1vdmUoY3NzUHJvcGVydGll
cyk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldFN1cHBvcnRlZFN5c3RlbUZvbnRG
YW1pbHlOYW1lcyhFcnJvclN0cmluZyYsIFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+JiBm
b250RmFtaWx5TmFtZXMpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SlNPTjo6QXJyYXlP
ZjxTdHJpbmc+Pj4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldFN1cHBvcnRlZFN5c3RlbUZvbnRGYW1p
bHlOYW1lcygpCiB7Ci0gICAgYXV0byBmYW1pbGllcyA9IEpTT046OkFycmF5T2Y8U3RyaW5nPjo6
Y3JlYXRlKCk7CisgICAgYXV0byBmb250RmFtaWx5TmFtZXMgPSBKU09OOjpBcnJheU9mPFN0cmlu
Zz46OmNyZWF0ZSgpOwogCiAgICAgVmVjdG9yPFN0cmluZz4gc3lzdGVtRm9udEZhbWlsaWVzID0g
Rm9udENhY2hlOjpzaW5nbGV0b24oKS5zeXN0ZW1Gb250RmFtaWxpZXMoKTsKICAgICBmb3IgKGNv
bnN0IGF1dG8mIGZhbWlseU5hbWUgOiBzeXN0ZW1Gb250RmFtaWxpZXMpCi0gICAgICAgIGZhbWls
aWVzLT5hZGRJdGVtKGZhbWlseU5hbWUpOworICAgICAgICBmb250RmFtaWx5TmFtZXMtPmFkZEl0
ZW0oZmFtaWx5TmFtZSk7CiAKLSAgICBmb250RmFtaWx5TmFtZXMgPSBXVEZNb3ZlKGZhbWlsaWVz
KTsKKyAgICByZXR1cm4gV1RGTW92ZShmb250RmFtaWx5TmFtZXMpOwogfQogCi12b2lkIEluc3Bl
Y3RvckNTU0FnZW50Ojpmb3JjZVBzZXVkb1N0YXRlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywg
aW50IG5vZGVJZCwgY29uc3QgSlNPTjo6QXJyYXkmIGZvcmNlZFBzZXVkb0NsYXNzZXMpCitQcm90
b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JDU1NBZ2VudDo6Zm9yY2VQc2V1ZG9T
dGF0ZShQcm90b2NvbDo6RE9NOjpOb2RlSWQgbm9kZUlkLCBSZWY8SlNPTjo6QXJyYXk+JiYgZm9y
Y2VkUHNldWRvQ2xhc3NlcykKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJp
bmc7CisKICAgICBhdXRvKiBkb21BZ2VudCA9IG1faW5zdHJ1bWVudGluZ0FnZW50cy5wZXJzaXN0
ZW50RE9NQWdlbnQoKTsKLSAgICBpZiAoIWRvbUFnZW50KSB7Ci0gICAgICAgIGVycm9yU3RyaW5n
ID0gIkRPTSBkb21haW4gbXVzdCBiZSBlbmFibGVkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAg
fQorICAgIGlmICghZG9tQWdlbnQpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiRE9N
IGRvbWFpbiBtdXN0IGJlIGVuYWJsZWQiX3MpOwogCiAgICAgRWxlbWVudCogZWxlbWVudCA9IGRv
bUFnZW50LT5hc3NlcnRFbGVtZW50KGVycm9yU3RyaW5nLCBub2RlSWQpOwogICAgIGlmICghZWxl
bWVudCkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJy
b3JTdHJpbmcpOwogCiAgICAgLy8gUmV0dXJuIGVhcmx5IGlmIHRoZSBmb3JjZWQgcHNldWRvIHN0
YXRlIHdhcyBhbHJlYWR5IHNldCBjb3JyZWN0bHkuCiAgICAgdW5zaWduZWQgZm9yY2VkUHNldWRv
U3RhdGUgPSBjb21wdXRlUHNldWRvQ2xhc3NNYXNrKGZvcmNlZFBzZXVkb0NsYXNzZXMpOwogICAg
IGlmIChmb3JjZWRQc2V1ZG9TdGF0ZSkgewogICAgICAgICBhdXRvIGl0ZXJhdG9yID0gbV9ub2Rl
SWRUb0ZvcmNlZFBzZXVkb1N0YXRlLmFkZChub2RlSWQsIDApLml0ZXJhdG9yOwogICAgICAgICBp
ZiAoZm9yY2VkUHNldWRvU3RhdGUgPT0gaXRlcmF0b3ItPnZhbHVlKQotICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAgICAgaXRlcmF0b3ItPnZhbHVlID0g
Zm9yY2VkUHNldWRvU3RhdGU7CiAgICAgICAgIG1fZG9jdW1lbnRzV2l0aEZvcmNlZFBzZXVkb1N0
YXRlcy5hZGQoJmVsZW1lbnQtPmRvY3VtZW50KCkpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGlm
ICghbV9ub2RlSWRUb0ZvcmNlZFBzZXVkb1N0YXRlLnJlbW92ZShub2RlSWQpKQotICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAgICAgaWYgKG1fbm9kZUlk
VG9Gb3JjZWRQc2V1ZG9TdGF0ZS5pc0VtcHR5KCkpCiAgICAgICAgICAgICBtX2RvY3VtZW50c1dp
dGhGb3JjZWRQc2V1ZG9TdGF0ZXMuY2xlYXIoKTsKICAgICB9CiAKICAgICBlbGVtZW50LT5kb2N1
bWVudCgpLnN0eWxlU2NvcGUoKS5kaWRDaGFuZ2VTdHlsZVNoZWV0RW52aXJvbm1lbnQoKTsKKwor
ICAgIHJldHVybiB7IH07CiB9CiAKIEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZSYg
SW5zcGVjdG9yQ1NTQWdlbnQ6OmFzSW5zcGVjdG9yU3R5bGVTaGVldChTdHlsZWRFbGVtZW50JiBl
bGVtZW50KQogewogICAgIHJldHVybiBtX25vZGVUb0luc3BlY3RvclN0eWxlU2hlZXQuZW5zdXJl
KCZlbGVtZW50LCBbdGhpcywgJmVsZW1lbnRdIHsKICAgICAgICAgU3RyaW5nIG5ld1N0eWxlU2hl
ZXRJZCA9IFN0cmluZzo6bnVtYmVyKG1fbGFzdFN0eWxlU2hlZXRJZCsrKTsKLSAgICAgICAgYXV0
byBpbnNwZWN0b3JTdHlsZVNoZWV0ID0gSW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxl
OjpjcmVhdGUobV9pbnN0cnVtZW50aW5nQWdlbnRzLmVuYWJsZWRQYWdlQWdlbnQoKSwgbmV3U3R5
bGVTaGVldElkLCBlbGVtZW50LCBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRP
cmlnaW46OkF1dGhvciwgdGhpcyk7CisgICAgICAgIGF1dG8gaW5zcGVjdG9yU3R5bGVTaGVldCA9
IEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZTo6Y3JlYXRlKG1faW5zdHJ1bWVudGlu
Z0FnZW50cy5lbmFibGVkUGFnZUFnZW50KCksIG5ld1N0eWxlU2hlZXRJZCwgZWxlbWVudCwgUHJv
dG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6QXV0aG9yLCB0aGlzKTsKICAgICAgICAgbV9p
ZFRvSW5zcGVjdG9yU3R5bGVTaGVldC5zZXQobmV3U3R5bGVTaGVldElkLCBpbnNwZWN0b3JTdHls
ZVNoZWV0LmNvcHlSZWYoKSk7CiAgICAgICAgIHJldHVybiBpbnNwZWN0b3JTdHlsZVNoZWV0Owog
ICAgIH0pLml0ZXJhdG9yLT52YWx1ZTsKIH0KIAotRWxlbWVudCogSW5zcGVjdG9yQ1NTQWdlbnQ6
OmVsZW1lbnRGb3JJZChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQpCitFbGVt
ZW50KiBJbnNwZWN0b3JDU1NBZ2VudDo6ZWxlbWVudEZvcklkKFByb3RvY29sOjpFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcsIFByb3RvY29sOjpET006Ok5vZGVJZCBub2RlSWQpCiB7CiAgICAgYXV0
byogZG9tQWdlbnQgPSBtX2luc3RydW1lbnRpbmdBZ2VudHMucGVyc2lzdGVudERPTUFnZW50KCk7
CiAgICAgaWYgKCFkb21BZ2VudCkgewpAQCAtOTE0LDcgKzkyOCw3IEBAIEluc3BlY3RvclN0eWxl
U2hlZXQqIEluc3BlY3RvckNTU0FnZW50OjpiaW5kU3R5bGVTaGVldChDU1NTdHlsZVNoZWV0KiBz
dHlsZVNoZWV0CiAgICAgcmV0dXJuIGluc3BlY3RvclN0eWxlU2hlZXQuZ2V0KCk7CiB9CiAKLUlu
c3BlY3RvclN0eWxlU2hlZXQqIEluc3BlY3RvckNTU0FnZW50Ojphc3NlcnRTdHlsZVNoZWV0Rm9y
SWQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHN0eWxlU2hlZXRJZCkK
K0luc3BlY3RvclN0eWxlU2hlZXQqIEluc3BlY3RvckNTU0FnZW50Ojphc3NlcnRTdHlsZVNoZWV0
Rm9ySWQoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBz
dHlsZVNoZWV0SWQpCiB7CiAgICAgSWRUb0luc3BlY3RvclN0eWxlU2hlZXQ6Oml0ZXJhdG9yIGl0
ID0gbV9pZFRvSW5zcGVjdG9yU3R5bGVTaGVldC5maW5kKHN0eWxlU2hlZXRJZCk7CiAgICAgaWYg
KGl0ID09IG1faWRUb0luc3BlY3RvclN0eWxlU2hlZXQuZW5kKCkpIHsKQEAgLTkyNCwyOSArOTM4
LDI5IEBAIEluc3BlY3RvclN0eWxlU2hlZXQqIEluc3BlY3RvckNTU0FnZW50Ojphc3NlcnRTdHls
ZVNoZWV0Rm9ySWQoRXJyb3JTdHJpbmcmIGVycm9yCiAgICAgcmV0dXJuIGl0LT52YWx1ZS5nZXQo
KTsKIH0KIAotSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luIEluc3Bl
Y3RvckNTU0FnZW50OjpkZXRlY3RPcmlnaW4oQ1NTU3R5bGVTaGVldCogcGFnZVN0eWxlU2hlZXQs
IERvY3VtZW50KiBvd25lckRvY3VtZW50KQorUHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdp
biBJbnNwZWN0b3JDU1NBZ2VudDo6ZGV0ZWN0T3JpZ2luKENTU1N0eWxlU2hlZXQqIHBhZ2VTdHls
ZVNoZWV0LCBEb2N1bWVudCogb3duZXJEb2N1bWVudCkKIHsKICAgICBpZiAobV9jcmVhdGluZ1Zp
YUluc3BlY3RvclN0eWxlU2hlZXQpCi0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29s
OjpDU1M6OlN0eWxlU2hlZXRPcmlnaW46Okluc3BlY3RvcjsKKyAgICAgICAgcmV0dXJuIFByb3Rv
Y29sOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW46Okluc3BlY3RvcjsKIAogICAgIGlmIChwYWdlU3R5
bGVTaGVldCAmJiAhcGFnZVN0eWxlU2hlZXQtPm93bmVyTm9kZSgpICYmIHBhZ2VTdHlsZVNoZWV0
LT5ocmVmKCkuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6
Q1NTOjpTdHlsZVNoZWV0T3JpZ2luOjpVc2VyQWdlbnQ7CisgICAgICAgIHJldHVybiBQcm90b2Nv
bDo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luOjpVc2VyQWdlbnQ7CiAKICAgICBpZiAocGFnZVN0eWxl
U2hlZXQgJiYgcGFnZVN0eWxlU2hlZXQtPmNvbnRlbnRzKCkuaXNVc2VyU3R5bGVTaGVldCgpKQot
ICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2lu
OjpVc2VyOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6
VXNlcjsKIAogICAgIGF1dG8gaXRlcmF0b3IgPSBtX2RvY3VtZW50VG9JbnNwZWN0b3JTdHlsZVNo
ZWV0LmZpbmQob3duZXJEb2N1bWVudCk7CiAgICAgaWYgKGl0ZXJhdG9yICE9IG1fZG9jdW1lbnRU
b0luc3BlY3RvclN0eWxlU2hlZXQuZW5kKCkpIHsKICAgICAgICAgZm9yIChhdXRvJiBpbnNwZWN0
b3JTdHlsZVNoZWV0IDogaXRlcmF0b3ItPnZhbHVlKSB7CiAgICAgICAgICAgICBpZiAocGFnZVN0
eWxlU2hlZXQgPT0gaW5zcGVjdG9yU3R5bGVTaGVldC0+cGFnZVN0eWxlU2hlZXQoKSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0T3Jp
Z2luOjpJbnNwZWN0b3I7CisgICAgICAgICAgICAgICAgcmV0dXJuIFByb3RvY29sOjpDU1M6OlN0
eWxlU2hlZXRPcmlnaW46Okluc3BlY3RvcjsKICAgICAgICAgfQogICAgIH0KIAotICAgIHJldHVy
biBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW46OkF1dGhvcjsKKyAg
ICByZXR1cm4gUHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6QXV0aG9yOwogfQogCi1S
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NSdWxlPiBJbnNwZWN0b3JDU1NBZ2Vu
dDo6YnVpbGRPYmplY3RGb3JSdWxlKGNvbnN0IFN0eWxlUnVsZSogc3R5bGVSdWxlLCBTdHlsZTo6
UmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIEVsZW1lbnQmIGVsZW1lbnQpCitSZWZQdHI8UHJvdG9j
b2w6OkNTUzo6Q1NTUnVsZT4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yUnVsZShj
b25zdCBTdHlsZVJ1bGUqIHN0eWxlUnVsZSwgU3R5bGU6OlJlc29sdmVyJiBzdHlsZVJlc29sdmVy
LCBFbGVtZW50JiBlbGVtZW50KQogewogICAgIGlmICghc3R5bGVSdWxlKQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKQEAgLTk2OCw3ICs5ODIsNyBAQCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6Q1NTOjpDU1NSdWxlPiBJbnNwZWN0b3JDU1NBZ2VudDo6YnVpbGRPYmplY3RGb3JSdWxlKAog
ICAgIHJldHVybiBpbnNwZWN0b3JTdHlsZVNoZWV0ID8gaW5zcGVjdG9yU3R5bGVTaGVldC0+YnVp
bGRPYmplY3RGb3JSdWxlKGNzc29tV3JhcHBlcikgOiBudWxscHRyOwogfQogCi1SZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NSdWxlPiBJbnNwZWN0b3JDU1NBZ2VudDo6YnVpbGRP
YmplY3RGb3JSdWxlKENTU1N0eWxlUnVsZSogcnVsZSkKK1JlZlB0cjxQcm90b2NvbDo6Q1NTOjpD
U1NSdWxlPiBJbnNwZWN0b3JDU1NBZ2VudDo6YnVpbGRPYmplY3RGb3JSdWxlKENTU1N0eWxlUnVs
ZSogcnVsZSkKIHsKICAgICBpZiAoIXJ1bGUpCiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAt
OTc4LDE2ICs5OTIsMTYgQEAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUnVs
ZT4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yUnVsZSgKICAgICByZXR1cm4gaW5z
cGVjdG9yU3R5bGVTaGVldCA/IGluc3BlY3RvclN0eWxlU2hlZXQtPmJ1aWxkT2JqZWN0Rm9yUnVs
ZShydWxlKSA6IG51bGxwdHI7CiB9CiAKLVJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkNTUzo6UnVsZU1hdGNoPj4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmJ1aWxkQXJyYXlG
b3JNYXRjaGVkUnVsZUxpc3QoY29uc3QgVmVjdG9yPFJlZlB0cjxjb25zdCBTdHlsZVJ1bGU+PiYg
bWF0Y2hlZFJ1bGVzLCBTdHlsZTo6UmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIEVsZW1lbnQmIGVs
ZW1lbnQsIFBzZXVkb0lkIHBzZXVkb0lkKQorUmVmPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkNT
Uzo6UnVsZU1hdGNoPj4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmJ1aWxkQXJyYXlGb3JNYXRjaGVkUnVs
ZUxpc3QoY29uc3QgVmVjdG9yPFJlZlB0cjxjb25zdCBTdHlsZVJ1bGU+PiYgbWF0Y2hlZFJ1bGVz
LCBTdHlsZTo6UmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIEVsZW1lbnQmIGVsZW1lbnQsIFBzZXVk
b0lkIHBzZXVkb0lkKQogewotICAgIGF1dG8gcmVzdWx0ID0gSlNPTjo6QXJyYXlPZjxJbnNwZWN0
b3I6OlByb3RvY29sOjpDU1M6OlJ1bGVNYXRjaD46OmNyZWF0ZSgpOworICAgIGF1dG8gcmVzdWx0
ID0gSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6Q1NTOjpSdWxlTWF0Y2g+OjpjcmVhdGUoKTsKIAog
ICAgIFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdDb250ZXh0IGNvbnRleHQoU2VsZWN0b3JDaGVj
a2VyOjpNb2RlOjpDb2xsZWN0aW5nUnVsZXMpOwogICAgIGNvbnRleHQucHNldWRvSWQgPSBwc2V1
ZG9JZCAhPSBQc2V1ZG9JZDo6Tm9uZSA/IHBzZXVkb0lkIDogZWxlbWVudC5wc2V1ZG9JZCgpOwog
ICAgIFNlbGVjdG9yQ2hlY2tlciBzZWxlY3RvckNoZWNrZXIoZWxlbWVudC5kb2N1bWVudCgpKTsK
IAogICAgIGZvciAoYXV0byYgbWF0Y2hlZFJ1bGUgOiBtYXRjaGVkUnVsZXMpIHsKLSAgICAgICAg
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUnVsZT4gcnVsZU9iamVjdCA9IGJ1
aWxkT2JqZWN0Rm9yUnVsZShtYXRjaGVkUnVsZS5nZXQoKSwgc3R5bGVSZXNvbHZlciwgZWxlbWVu
dCk7CisgICAgICAgIFJlZlB0cjxQcm90b2NvbDo6Q1NTOjpDU1NSdWxlPiBydWxlT2JqZWN0ID0g
YnVpbGRPYmplY3RGb3JSdWxlKG1hdGNoZWRSdWxlLmdldCgpLCBzdHlsZVJlc29sdmVyLCBlbGVt
ZW50KTsKICAgICAgICAgaWYgKCFydWxlT2JqZWN0KQogICAgICAgICAgICAgY29udGludWU7CiAK
QEAgLTEwMDEsOCArMTAxNSw4IEBAIFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkNTUzo6UnVsZU1hdGNoPj4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmJ1CiAgICAgICAgICAg
ICArK2luZGV4OwogICAgICAgICB9CiAKLSAgICAgICAgYXV0byBtYXRjaCA9IEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkNTUzo6UnVsZU1hdGNoOjpjcmVhdGUoKQotICAgICAgICAgICAgLnNldFJ1bGUo
V1RGTW92ZShydWxlT2JqZWN0KSkKKyAgICAgICAgYXV0byBtYXRjaCA9IFByb3RvY29sOjpDU1M6
OlJ1bGVNYXRjaDo6Y3JlYXRlKCkKKyAgICAgICAgICAgIC5zZXRSdWxlKHJ1bGVPYmplY3QucmVs
ZWFzZU5vbk51bGwoKSkKICAgICAgICAgICAgIC5zZXRNYXRjaGluZ1NlbGVjdG9ycyhXVEZNb3Zl
KG1hdGNoaW5nU2VsZWN0b3JzKSkKICAgICAgICAgICAgIC5yZWxlYXNlKCk7CiAgICAgICAgIHJl
c3VsdC0+YWRkSXRlbShXVEZNb3ZlKG1hdGNoKSk7CkBAIC0xMDExLDcgKzEwMjUsNyBAQCBSZWZQ
dHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlJ1bGVNYXRjaD4+IElu
c3BlY3RvckNTU0FnZW50OjpidQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLVJlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlPiBJbnNwZWN0b3JDU1NBZ2VudDo6YnVpbGRP
YmplY3RGb3JBdHRyaWJ1dGVzU3R5bGUoU3R5bGVkRWxlbWVudCYgZWxlbWVudCkKK1JlZlB0cjxQ
cm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9y
QXR0cmlidXRlc1N0eWxlKFN0eWxlZEVsZW1lbnQmIGVsZW1lbnQpCiB7CiAgICAgLy8gRklYTUU6
IFVnbGluZXNzIGJlbG93LgogICAgIGF1dG8qIGF0dHJpYnV0ZVN0eWxlID0gY29uc3RfY2FzdDxT
dHlsZVByb3BlcnRpZXMqPihlbGVtZW50LnByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKCkpOwpA
QCAtMTAyMyw3ICsxMDM3LDcgQEAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NT
U3R5bGU+IEluc3BlY3RvckNTU0FnZW50OjpidWlsZE9iamVjdEZvckF0dHIKICAgICByZXR1cm4g
aW5zcGVjdG9yU3R5bGUtPmJ1aWxkT2JqZWN0Rm9yU3R5bGUoKTsKIH0KIAotdm9pZCBJbnNwZWN0
b3JDU1NBZ2VudDo6ZGlkUmVtb3ZlRE9NTm9kZShOb2RlJiBub2RlLCBpbnQgbm9kZUlkKQordm9p
ZCBJbnNwZWN0b3JDU1NBZ2VudDo6ZGlkUmVtb3ZlRE9NTm9kZShOb2RlJiBub2RlLCBQcm90b2Nv
bDo6RE9NOjpOb2RlSWQgbm9kZUlkKQogewogICAgIG1fbm9kZUlkVG9Gb3JjZWRQc2V1ZG9TdGF0
ZS5yZW1vdmUobm9kZUlkKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2FnZW50cy9JbnNwZWN0b3JDU1NBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Fn
ZW50cy9JbnNwZWN0b3JDU1NBZ2VudC5oCmluZGV4IGZhMWQ2NzFkZDgzM2IwMDNhNjFkYzI3OTY1
OTY2OTIxNjFhYWRmN2YuLmQyZmNhNzk1ZGM2ODBmOThkZTg2Y2JjYzFkNmU5MGM4Y2E3YzcwYjEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ1NT
QWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNT
U0FnZW50LmgKQEAgLTYxLDcgKzYxLDcgQEAgY2xhc3MgSW5zcGVjdG9yQ1NTQWdlbnQgZmluYWwg
OiBwdWJsaWMgSW5zcGVjdG9yQWdlbnRCYXNlICwgcHVibGljIEluc3BlY3Rvcjo6Q1MKICAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBJbnNwZWN0b3JDU1NBZ2VudChX
ZWJBZ2VudENvbnRleHQmKTsKLSAgICB+SW5zcGVjdG9yQ1NTQWdlbnQoKSBvdmVycmlkZTsKKyAg
ICB+SW5zcGVjdG9yQ1NTQWdlbnQoKTsKIAogICAgIGNsYXNzIElubGluZVN0eWxlT3ZlcnJpZGVT
Y29wZSB7CiAgICAgcHVibGljOgpAQCAtODMsMjkgKzgzLDI5IEBAIHB1YmxpYzoKICAgICBzdGF0
aWMgQ1NTU3R5bGVSdWxlKiBhc0NTU1N0eWxlUnVsZShDU1NSdWxlJik7CiAKICAgICAvLyBJbnNw
ZWN0b3JBZ2VudEJhc2UKLSAgICB2b2lkIGRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJbnNw
ZWN0b3I6OkZyb250ZW5kUm91dGVyKiwgSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlciopIG92
ZXJyaWRlOwotICAgIHZvaWQgd2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9y
OjpEaXNjb25uZWN0UmVhc29uKSBvdmVycmlkZTsKKyAgICB2b2lkIGRpZENyZWF0ZUZyb250ZW5k
QW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kUm91dGVyKiwgSW5zcGVjdG9yOjpCYWNrZW5k
RGlzcGF0Y2hlciopOworICAgIHZvaWQgd2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5z
cGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKTsKIAogICAgIC8vIENTU0JhY2tlbmREaXNwYXRjaGVy
SGFuZGxlcgotICAgIHZvaWQgZW5hYmxlKEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBkaXNhYmxlKEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBnZXRDb21wdXRlZFN0
eWxlRm9yTm9kZShFcnJvclN0cmluZyYsIGludCBub2RlSWQsIFJlZlB0cjxKU09OOjpBcnJheU9m
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTQ29tcHV0ZWRTdHlsZVByb3BlcnR5Pj4mKSBv
dmVycmlkZTsKLSAgICB2b2lkIGdldElubGluZVN0eWxlc0Zvck5vZGUoRXJyb3JTdHJpbmcmLCBp
bnQgbm9kZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4mIGlu
bGluZVN0eWxlLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4mIGF0
dHJpYnV0ZXMpIG92ZXJyaWRlOwotICAgIHZvaWQgZ2V0TWF0Y2hlZFN0eWxlc0Zvck5vZGUoRXJy
b3JTdHJpbmcmLCBpbnQgbm9kZUlkLCBjb25zdCBib29sKiBpbmNsdWRlUHNldWRvLCBjb25zdCBi
b29sKiBpbmNsdWRlSW5oZXJpdGVkLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpDU1M6OlJ1bGVNYXRjaD4+JiBtYXRjaGVkQ1NTUnVsZXMsIFJlZlB0cjxKU09OOjpB
cnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6UHNldWRvSWRNYXRjaGVzPj4mLCBSZWZQ
dHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkluaGVyaXRlZFN0eWxl
RW50cnk+PiYgaW5oZXJpdGVkRW50cmllcykgb3ZlcnJpZGU7Ci0gICAgdm9pZCBnZXRBbGxTdHls
ZVNoZWV0cyhFcnJvclN0cmluZyYsIFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkNTUzo6Q1NTU3R5bGVTaGVldEhlYWRlcj4+JiBzdHlsZVNoZWV0SW5mb3MpIG92ZXJy
aWRlOwotICAgIHZvaWQgZ2V0U3R5bGVTaGVldChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYg
c3R5bGVTaGVldElkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZVNo
ZWV0Qm9keT4mIHJlc3VsdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBnZXRTdHlsZVNoZWV0VGV4dChF
cnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgc3R5bGVTaGVldElkLCBTdHJpbmcqIHJlc3VsdCkg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRTdHlsZVNoZWV0VGV4dChFcnJvclN0cmluZyYsIGNvbnN0
IFN0cmluZyYgc3R5bGVTaGVldElkLCBjb25zdCBTdHJpbmcmIHRleHQpIG92ZXJyaWRlOwotICAg
IHZvaWQgc2V0U3R5bGVUZXh0KEVycm9yU3RyaW5nJiwgY29uc3QgSlNPTjo6T2JqZWN0JiBzdHls
ZUlkLCBjb25zdCBTdHJpbmcmIHRleHQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6
OkNTU1N0eWxlPiYgcmVzdWx0KSBvdmVycmlkZTsKLSAgICB2b2lkIHNldFJ1bGVTZWxlY3RvcihF
cnJvclN0cmluZyYsIGNvbnN0IEpTT046Ok9iamVjdCYgcnVsZUlkLCBjb25zdCBTdHJpbmcmIHNl
bGVjdG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NSdWxlPiYgcmVzdWx0
KSBvdmVycmlkZTsKLSAgICB2b2lkIGNyZWF0ZVN0eWxlU2hlZXQoRXJyb3JTdHJpbmcmLCBjb25z
dCBTdHJpbmcmIGZyYW1lSWQsIFN0cmluZyogc3R5bGVTaGVldElkKSBvdmVycmlkZTsKLSAgICB2
b2lkIGFkZFJ1bGUoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHN0eWxlU2hlZXRJZCwgY29u
c3QgU3RyaW5nJiBzZWxlY3RvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NT
UnVsZT4mIHJlc3VsdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBnZXRTdXBwb3J0ZWRDU1NQcm9wZXJ0
aWVzKEVycm9yU3RyaW5nJiwgUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6Q1NTOjpDU1NQcm9wZXJ0eUluZm8+PiYgcmVzdWx0KSBvdmVycmlkZTsKLSAgICB2b2lkIGdl
dFN1cHBvcnRlZFN5c3RlbUZvbnRGYW1pbHlOYW1lcyhFcnJvclN0cmluZyYsIFJlZlB0cjxKU09O
OjpBcnJheU9mPFN0cmluZz4+JiByZXN1bHQpIG92ZXJyaWRlOwotICAgIHZvaWQgZm9yY2VQc2V1
ZG9TdGF0ZShFcnJvclN0cmluZyYsIGludCBub2RlSWQsIGNvbnN0IEpTT046OkFycmF5JiBmb3Jj
ZWRQc2V1ZG9DbGFzc2VzKSBvdmVycmlkZTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJv
clN0cmluZ09yPHZvaWQ+IGVuYWJsZSgpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8dm9pZD4gZGlzYWJsZSgpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8UmVmPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1ND
b21wdXRlZFN0eWxlUHJvcGVydHk+Pj4gZ2V0Q29tcHV0ZWRTdHlsZUZvck5vZGUoSW5zcGVjdG9y
OjpQcm90b2NvbDo6RE9NOjpOb2RlSWQpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8c3RkOjp0dXBsZTxSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NT
dHlsZT4gLyogaW5saW5lU3R5bGUgKi8sIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6
OkNTU1N0eWxlPiAvKiBhdHRyaWJ1dGVzU3R5bGUgKi8+PiBnZXRJbmxpbmVTdHlsZXNGb3JOb2Rl
KEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkKTsKKyAgICBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpFcnJvclN0cmluZ09yPHN0ZDo6dHVwbGU8UmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVj
dG9yOjpQcm90b2NvbDo6Q1NTOjpSdWxlTWF0Y2g+PiwgUmVmUHRyPEpTT046OkFycmF5T2Y8SW5z
cGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpQc2V1ZG9JZE1hdGNoZXM+PiwgUmVmUHRyPEpTT046OkFy
cmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpJbmhlcml0ZWRTdHlsZUVudHJ5Pj4+PiBn
ZXRNYXRjaGVkU3R5bGVzRm9yTm9kZShJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZCwg
T3B0aW9uYWw8Ym9vbD4mJiBpbmNsdWRlUHNldWRvLCBPcHRpb25hbDxib29sPiYmIGluY2x1ZGVJ
bmhlcml0ZWQpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEpT
T046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZVNoZWV0SGVhZGVy
Pj4+IGdldEFsbFN0eWxlU2hlZXRzKCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JT
dHJpbmdPcjxSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZVNoZWV0Qm9keT4+
IGdldFN0eWxlU2hlZXQoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0
SWQmKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFN0cmluZz4gZ2V0
U3R5bGVTaGVldFRleHQoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0
SWQmKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHNldFN0
eWxlU2hlZXRUZXh0KGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldElk
JiwgY29uc3QgU3RyaW5nJiB0ZXh0KTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0
cmluZ09yPFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlPj4gc2V0U3R5bGVU
ZXh0KFJlZjxKU09OOjpPYmplY3Q+JiYgc3R5bGVJZCwgY29uc3QgU3RyaW5nJiB0ZXh0KTsKKyAg
ICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpDU1M6OkNTU1J1bGU+PiBzZXRSdWxlU2VsZWN0b3IoUmVmPEpTT046Ok9iamVjdD4mJiBy
dWxlSWQsIGNvbnN0IFN0cmluZyYgc2VsZWN0b3IpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0SWQ+IGNy
ZWF0ZVN0eWxlU2hlZXQoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6RnJhbWVJ
ZCYpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkNTUzo6Q1NTUnVsZT4+IGFkZFJ1bGUoY29uc3QgSW5zcGVjdG9yOjpQcm90
b2NvbDo6Q1NTOjpTdHlsZVNoZWV0SWQmLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yKTsKKyAgICBJ
bnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUHJvcGVydHlJbmZvPj4+IGdldFN1cHBvcnRlZENTU1By
b3BlcnRpZXMoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxK
U09OOjpBcnJheU9mPFN0cmluZz4+PiBnZXRTdXBwb3J0ZWRTeXN0ZW1Gb250RmFtaWx5TmFtZXMo
KTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGZvcmNlUHNl
dWRvU3RhdGUoSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQsIFJlZjxKU09OOjpBcnJh
eT4mJiBmb3JjZWRQc2V1ZG9DbGFzc2VzKTsKIAogICAgIC8vIEluc3BlY3RvclN0eWxlU2hlZXQ6
Okxpc3RlbmVyCi0gICAgdm9pZCBzdHlsZVNoZWV0Q2hhbmdlZChJbnNwZWN0b3JTdHlsZVNoZWV0
Kikgb3ZlcnJpZGU7CisgICAgdm9pZCBzdHlsZVNoZWV0Q2hhbmdlZChJbnNwZWN0b3JTdHlsZVNo
ZWV0Kik7CiAKICAgICAvLyBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24KICAgICB2b2lkIGRvY3Vt
ZW50RGV0YWNoZWQoRG9jdW1lbnQmKTsKQEAgLTExNCw3ICsxMTQsNyBAQCBwdWJsaWM6CiAgICAg
Ym9vbCBmb3JjZVBzZXVkb1N0YXRlKGNvbnN0IEVsZW1lbnQmLCBDU1NTZWxlY3Rvcjo6UHNldWRv
Q2xhc3NUeXBlKTsKIAogICAgIC8vIEluc3BlY3RvckRPTUFnZW50IGhvb2tzCi0gICAgdm9pZCBk
aWRSZW1vdmVET01Ob2RlKE5vZGUmLCBpbnQgbm9kZUlkKTsKKyAgICB2b2lkIGRpZFJlbW92ZURP
TU5vZGUoTm9kZSYsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkKTsKICAgICB2b2lk
IGRpZE1vZGlmeURPTUF0dHIoRWxlbWVudCYpOwogCiAgICAgdm9pZCByZXNldCgpOwpAQCAtMTI2
LDI4ICsxMjYsMjggQEAgcHJpdmF0ZToKICAgICBjbGFzcyBTZXRSdWxlU2VsZWN0b3JBY3Rpb247
CiAgICAgY2xhc3MgQWRkUnVsZUFjdGlvbjsKIAotICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcs
IFJlZlB0cjxJbnNwZWN0b3JTdHlsZVNoZWV0Pj4gSWRUb0luc3BlY3RvclN0eWxlU2hlZXQ7Cisg
ICAgdHlwZWRlZiBIYXNoTWFwPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldElk
LCBSZWZQdHI8SW5zcGVjdG9yU3R5bGVTaGVldD4+IElkVG9JbnNwZWN0b3JTdHlsZVNoZWV0Owog
ICAgIHR5cGVkZWYgSGFzaE1hcDxDU1NTdHlsZVNoZWV0KiwgUmVmUHRyPEluc3BlY3RvclN0eWxl
U2hlZXQ+PiBDU1NTdHlsZVNoZWV0VG9JbnNwZWN0b3JTdHlsZVNoZWV0OwogICAgIHR5cGVkZWYg
SGFzaE1hcDxSZWZQdHI8RG9jdW1lbnQ+LCBWZWN0b3I8UmVmUHRyPEluc3BlY3RvclN0eWxlU2hl
ZXQ+Pj4gRG9jdW1lbnRUb1ZpYUluc3BlY3RvclN0eWxlU2hlZXQ7IC8vICJ2aWEgaW5zcGVjdG9y
IiBzdHlsZXNoZWV0cwotICAgIHR5cGVkZWYgSGFzaE1hcDxpbnQsIHVuc2lnbmVkPiBOb2RlSWRU
b0ZvcmNlZFBzZXVkb1N0YXRlOworICAgIHR5cGVkZWYgSGFzaE1hcDxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpET006Ok5vZGVJZCwgdW5zaWduZWQ+IE5vZGVJZFRvRm9yY2VkUHNldWRvU3RhdGU7CiAK
ICAgICBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGUmIGFzSW5zcGVjdG9yU3R5bGVT
aGVldChTdHlsZWRFbGVtZW50Jik7Ci0gICAgRWxlbWVudCogZWxlbWVudEZvcklkKEVycm9yU3Ry
aW5nJiwgaW50IG5vZGVJZCk7CisgICAgRWxlbWVudCogZWxlbWVudEZvcklkKEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkVycm9yU3RyaW5nJiwgSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQp
OwogCiAgICAgdm9pZCBjb2xsZWN0QWxsU3R5bGVTaGVldHMoVmVjdG9yPEluc3BlY3RvclN0eWxl
U2hlZXQqPiYpOwogICAgIHZvaWQgY29sbGVjdEFsbERvY3VtZW50U3R5bGVTaGVldHMoRG9jdW1l
bnQmLCBWZWN0b3I8Q1NTU3R5bGVTaGVldCo+Jik7CiAgICAgdm9pZCBjb2xsZWN0U3R5bGVTaGVl
dHMoQ1NTU3R5bGVTaGVldCosIFZlY3RvcjxDU1NTdHlsZVNoZWV0Kj4mKTsKICAgICB2b2lkIHNl
dEFjdGl2ZVN0eWxlU2hlZXRzRm9yRG9jdW1lbnQoRG9jdW1lbnQmLCBWZWN0b3I8Q1NTU3R5bGVT
aGVldCo+JiBhY3RpdmVTdHlsZVNoZWV0cyk7CiAKLSAgICBTdHJpbmcgdW5iaW5kU3R5bGVTaGVl
dChJbnNwZWN0b3JTdHlsZVNoZWV0Kik7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpT
dHlsZVNoZWV0SWQgdW5iaW5kU3R5bGVTaGVldChJbnNwZWN0b3JTdHlsZVNoZWV0Kik7CiAgICAg
SW5zcGVjdG9yU3R5bGVTaGVldCogYmluZFN0eWxlU2hlZXQoQ1NTU3R5bGVTaGVldCopOwotICAg
IEluc3BlY3RvclN0eWxlU2hlZXQqIGFzc2VydFN0eWxlU2hlZXRGb3JJZChFcnJvclN0cmluZyYs
IGNvbnN0IFN0cmluZyYpOworICAgIEluc3BlY3RvclN0eWxlU2hlZXQqIGFzc2VydFN0eWxlU2hl
ZXRGb3JJZChJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZyYsIGNvbnN0IEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldElkJik7CiAgICAgSW5zcGVjdG9yU3R5bGVTaGVl
dCogY3JlYXRlSW5zcGVjdG9yU3R5bGVTaGVldEZvckRvY3VtZW50KERvY3VtZW50Jik7CiAgICAg
SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luIGRldGVjdE9yaWdpbihD
U1NTdHlsZVNoZWV0KiBwYWdlU3R5bGVTaGVldCwgRG9jdW1lbnQqIG93bmVyRG9jdW1lbnQpOwog
CiAgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUnVsZT4gYnVpbGRPYmpl
Y3RGb3JSdWxlKGNvbnN0IFN0eWxlUnVsZSosIFN0eWxlOjpSZXNvbHZlciYsIEVsZW1lbnQmKTsK
ICAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NSdWxlPiBidWlsZE9iamVj
dEZvclJ1bGUoQ1NTU3R5bGVSdWxlKik7Ci0gICAgUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVj
dG9yOjpQcm90b2NvbDo6Q1NTOjpSdWxlTWF0Y2g+PiBidWlsZEFycmF5Rm9yTWF0Y2hlZFJ1bGVM
aXN0KGNvbnN0IFZlY3RvcjxSZWZQdHI8Y29uc3QgU3R5bGVSdWxlPj4mLCBTdHlsZTo6UmVzb2x2
ZXImLCBFbGVtZW50JiwgUHNldWRvSWQpOworICAgIFJlZjxKU09OOjpBcnJheU9mPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkNTUzo6UnVsZU1hdGNoPj4gYnVpbGRBcnJheUZvck1hdGNoZWRSdWxlTGlz
dChjb25zdCBWZWN0b3I8UmVmUHRyPGNvbnN0IFN0eWxlUnVsZT4+JiwgU3R5bGU6OlJlc29sdmVy
JiwgRWxlbWVudCYsIFBzZXVkb0lkKTsKICAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
Q1NTOjpDU1NTdHlsZT4gYnVpbGRPYmplY3RGb3JBdHRyaWJ1dGVzU3R5bGUoU3R5bGVkRWxlbWVu
dCYpOwogCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5z
cGVjdG9yQ2FudmFzQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9J
bnNwZWN0b3JDYW52YXNBZ2VudC5jcHAKaW5kZXggZDA5MTY4Mjk0MDBmOTQ2ZjA4NjAwOTU4YWE0
NDNlNTcwNzNmZThhYS4uYTg1MDM4ZjVjMDY3N2U3ZDkyODE5NGRiN2QwNDA5YTk0OGJjOTZiOSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDYW52
YXNBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0
b3JDYW52YXNBZ2VudC5jcHAKQEAgLTEwMiw4ICsxMDIsNyBAQCB2b2lkIEluc3BlY3RvckNhbnZh
c0FnZW50OjpkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9udGVuZFJv
dXRlcgogCiB2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5k
QmFja2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24pCiB7Ci0gICAgRXJyb3JTdHJpbmcg
aWdub3JlZDsKLSAgICBkaXNhYmxlKGlnbm9yZWQpOworICAgIGRpc2FibGUoKTsKIH0KIAogdm9p
ZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6ZGlzY2FyZEFnZW50KCkKQEAgLTExMSwxMCArMTEwLDEw
IEBAIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmRpc2NhcmRBZ2VudCgpCiAgICAgcmVzZXQo
KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6ZW5hYmxlKEVycm9yU3RyaW5nJikK
K1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckNhbnZhc0FnZW50OjplbmFi
bGUoKQogewogICAgIGlmIChtX2luc3RydW1lbnRpbmdBZ2VudHMuZW5hYmxlZENhbnZhc0FnZW50
KCkgPT0gdGhpcykKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4geyB9OwogCiAgICAg
bV9pbnN0cnVtZW50aW5nQWdlbnRzLnNldEVuYWJsZWRDYW52YXNBZ2VudCh0aGlzKTsKIApAQCAt
MTcwLDczICsxNjksODQgQEAgdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6ZW5hYmxlKEVycm9y
U3RyaW5nJikKICAgICAgICAgfQogICAgIH0KICNlbmRpZiAvLyBFTkFCTEUoV0VCR1BVKQorCisg
ICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6ZGlzYWJsZShF
cnJvclN0cmluZyYpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JDYW52
YXNBZ2VudDo6ZGlzYWJsZSgpCiB7CiAgICAgbV9pbnN0cnVtZW50aW5nQWdlbnRzLnNldEVuYWJs
ZWRDYW52YXNBZ2VudChudWxscHRyKTsKIAogICAgIHJlc2V0KCk7CiAKICAgICBtX3JlY29yZGlu
Z0F1dG9DYXB0dXJlRnJhbWVDb3VudCA9IFdURjo6bnVsbG9wdDsKKworICAgIHJldHVybiB7IH07
CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnJlcXVlc3ROb2RlKEVycm9yU3RyaW5n
JiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBjYW52YXNJZCwgaW50KiBub2RlSWQpCitQcm90
b2NvbDo6RXJyb3JTdHJpbmdPcjxQcm90b2NvbDo6RE9NOjpOb2RlSWQ+IEluc3BlY3RvckNhbnZh
c0FnZW50OjpyZXF1ZXN0Tm9kZShjb25zdCBQcm90b2NvbDo6Q2FudmFzOjpDYW52YXNJZCYgY2Fu
dmFzSWQpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAgICAg
YXV0byBpbnNwZWN0b3JDYW52YXMgPSBhc3NlcnRJbnNwZWN0b3JDYW52YXMoZXJyb3JTdHJpbmcs
IGNhbnZhc0lkKTsKICAgICBpZiAoIWluc3BlY3RvckNhbnZhcykKLSAgICAgICAgcmV0dXJuOwor
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCiAgICAgYXV0byog
bm9kZSA9IGluc3BlY3RvckNhbnZhcy0+Y2FudmFzRWxlbWVudCgpOwotICAgIGlmICghbm9kZSkg
ewotICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIGVsZW1lbnQgb2YgY2FudmFzIGZvciBn
aXZlbiBjYW52YXNJZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoIW5vZGUp
CisgICAgICAgIG1ha2VVbmV4cGVjdGVkKCJNaXNzaW5nIGVsZW1lbnQgb2YgY2FudmFzIGZvciBn
aXZlbiBjYW52YXNJZCJfcyk7CiAKICAgICAvLyBGSVhNRTogPGh0dHBzOi8vd2Via2l0Lm9yZy9i
LzIxMzQ5OT4gV2ViIEluc3BlY3RvcjogYWxsb3cgRE9NIG5vZGVzIHRvIGJlIGluc3RydW1lbnRl
ZCBhdCBhbnkgcG9pbnQsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGUgbWFpbiBkb2N1bWVudCBo
YXMgYWxzbyBiZWVuIGluc3RydW1lbnRlZAogICAgIGludCBkb2N1bWVudE5vZGVJZCA9IG1faW5z
dHJ1bWVudGluZ0FnZW50cy5wZXJzaXN0ZW50RE9NQWdlbnQoKS0+Ym91bmROb2RlSWQoJm5vZGUt
PmRvY3VtZW50KCkpOwotICAgIGlmICghZG9jdW1lbnROb2RlSWQpIHsKLSAgICAgICAgZXJyb3JT
dHJpbmcgPSAiRG9jdW1lbnQgbXVzdCBoYXZlIGJlZW4gcmVxdWVzdGVkIl9zOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQorICAgIGlmICghZG9jdW1lbnROb2RlSWQpCisgICAgICAgIG1ha2VVbmV4
cGVjdGVkKCJEb2N1bWVudCBtdXN0IGhhdmUgYmVlbiByZXF1ZXN0ZWQiX3MpOwogCi0gICAgKm5v
ZGVJZCA9IG1faW5zdHJ1bWVudGluZ0FnZW50cy5wZXJzaXN0ZW50RE9NQWdlbnQoKS0+cHVzaE5v
ZGVUb0Zyb250ZW5kKGVycm9yU3RyaW5nLCBkb2N1bWVudE5vZGVJZCwgbm9kZSk7CisgICAgcmV0
dXJuIG1faW5zdHJ1bWVudGluZ0FnZW50cy5wZXJzaXN0ZW50RE9NQWdlbnQoKS0+cHVzaE5vZGVU
b0Zyb250ZW5kKGVycm9yU3RyaW5nLCBkb2N1bWVudE5vZGVJZCwgbm9kZSk7CiB9CiAKLXZvaWQg
SW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnJlcXVlc3RDb250ZW50KEVycm9yU3RyaW5nJiBlcnJvclN0
cmluZywgY29uc3QgU3RyaW5nJiBjYW52YXNJZCwgU3RyaW5nKiBjb250ZW50KQorUHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8U3RyaW5nPiBJbnNwZWN0b3JDYW52YXNBZ2VudDo6cmVxdWVzdENvbnRl
bnQoY29uc3QgUHJvdG9jb2w6OkNhbnZhczo6Q2FudmFzSWQmIGNhbnZhc0lkKQogeworICAgIFBy
b3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIGF1dG8gaW5zcGVjdG9yQ2Fu
dmFzID0gYXNzZXJ0SW5zcGVjdG9yQ2FudmFzKGVycm9yU3RyaW5nLCBjYW52YXNJZCk7CiAgICAg
aWYgKCFpbnNwZWN0b3JDYW52YXMpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1h
a2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAotICAgICpjb250ZW50ID0gaW5zcGVjdG9yQ2Fu
dmFzLT5nZXRDYW52YXNDb250ZW50QXNEYXRhVVJMKGVycm9yU3RyaW5nKTsKKyAgICBhdXRvIHJl
c3VsdCA9IGluc3BlY3RvckNhbnZhcy0+Z2V0Q2FudmFzQ29udGVudEFzRGF0YVVSTChlcnJvclN0
cmluZyk7CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChl
cnJvclN0cmluZyk7CisKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIEluc3BlY3RvckNh
bnZhc0FnZW50OjpyZXF1ZXN0Q2xpZW50Tm9kZXMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBj
b25zdCBTdHJpbmcmIGNhbnZhc0lkLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxpbnQ+PiYgY2xpZW50
Tm9kZUlkcykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPFByb3Rv
Y29sOjpET006Ok5vZGVJZD4+PiBJbnNwZWN0b3JDYW52YXNBZ2VudDo6cmVxdWVzdENsaWVudE5v
ZGVzKGNvbnN0IFByb3RvY29sOjpDYW52YXM6OkNhbnZhc0lkJiBjYW52YXNJZCkKIHsKKyAgICBQ
cm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBhdXRvKiBkb21BZ2VudCA9
IG1faW5zdHJ1bWVudGluZ0FnZW50cy5wZXJzaXN0ZW50RE9NQWdlbnQoKTsKLSAgICBpZiAoIWRv
bUFnZW50KSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIkRPTSBkb21haW4gbXVzdCBiZSBlbmFi
bGVkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghZG9tQWdlbnQpCisgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiRE9NIGRvbWFpbiBtdXN0IGJlIGVuYWJsZWQiX3Mp
OwogCiAgICAgYXV0byBpbnNwZWN0b3JDYW52YXMgPSBhc3NlcnRJbnNwZWN0b3JDYW52YXMoZXJy
b3JTdHJpbmcsIGNhbnZhc0lkKTsKICAgICBpZiAoIWluc3BlY3RvckNhbnZhcykKLSAgICAgICAg
cmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCi0g
ICAgY2xpZW50Tm9kZUlkcyA9IEpTT046OkFycmF5T2Y8aW50Pjo6Y3JlYXRlKCk7CisgICAgYXV0
byBjbGllbnROb2RlSWRzID0gSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6RE9NOjpOb2RlSWQ+Ojpj
cmVhdGUoKTsKICAgICBmb3IgKGF1dG8mIGNsaWVudE5vZGUgOiBpbnNwZWN0b3JDYW52YXMtPmNs
aWVudE5vZGVzKCkpIHsKICAgICAgICAgLy8gRklYTUU6IDxodHRwczovL3dlYmtpdC5vcmcvYi8y
MTM0OTk+IFdlYiBJbnNwZWN0b3I6IGFsbG93IERPTSBub2RlcyB0byBiZSBpbnN0cnVtZW50ZWQg
YXQgYW55IHBvaW50LCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlIG1haW4gZG9jdW1lbnQgaGFz
IGFsc28gYmVlbiBpbnN0cnVtZW50ZWQKICAgICAgICAgaWYgKGF1dG8gZG9jdW1lbnROb2RlSWQg
PSBkb21BZ2VudC0+Ym91bmROb2RlSWQoJmNsaWVudE5vZGUtPmRvY3VtZW50KCkpKQogICAgICAg
ICAgICAgY2xpZW50Tm9kZUlkcy0+YWRkSXRlbShkb21BZ2VudC0+cHVzaE5vZGVUb0Zyb250ZW5k
KGVycm9yU3RyaW5nLCBkb2N1bWVudE5vZGVJZCwgY2xpZW50Tm9kZSkpOwogICAgIH0KKyAgICBy
ZXR1cm4gV1RGTW92ZShjbGllbnROb2RlSWRzKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDYW52YXNB
Z2VudDo6cmVzb2x2ZUNvbnRleHQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJp
bmcmIGNhbnZhc0lkLCBjb25zdCBTdHJpbmcqIG9iamVjdEdyb3VwLCBSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0KQorUHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8UmVmPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+PiBJbnNwZWN0
b3JDYW52YXNBZ2VudDo6cmVzb2x2ZUNvbnRleHQoY29uc3QgUHJvdG9jb2w6OkNhbnZhczo6Q2Fu
dmFzSWQmIGNhbnZhc0lkLCBjb25zdCBTdHJpbmcmIG9iamVjdEdyb3VwKQogeworICAgIFByb3Rv
Y29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIGF1dG8gaW5zcGVjdG9yQ2FudmFz
ID0gYXNzZXJ0SW5zcGVjdG9yQ2FudmFzKGVycm9yU3RyaW5nLCBjYW52YXNJZCk7CiAgICAgaWYg
KCFpbnNwZWN0b3JDYW52YXMpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgIGF1dG8qIHN0YXRlID0gaW5zcGVjdG9yQ2Fu
dmFzLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmV4ZWNTdGF0ZSgpOwogICAgIGF1dG8gaW5q
ZWN0ZWRTY3JpcHQgPSBtX2luamVjdGVkU2NyaXB0TWFuYWdlci5pbmplY3RlZFNjcmlwdEZvcihz
dGF0ZSk7CkBAIC0yNDYsMTIyICsyNTYsMTI5IEBAIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6
OnJlc29sdmVDb250ZXh0KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nCiAK
ICAgICBpZiAoIXZhbHVlKSB7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAg
ICBlcnJvclN0cmluZyA9ICJJbnRlcm5hbCBlcnJvcjogdW5rbm93biBjb250ZXh0IG9mIGNhbnZh
cyBmb3IgZ2l2ZW4gY2FudmFzSWQiX3M7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJu
IG1ha2VVbmV4cGVjdGVkKCJJbnRlcm5hbCBlcnJvcjogdW5rbm93biBjb250ZXh0IG9mIGNhbnZh
cyBmb3IgZ2l2ZW4gY2FudmFzSWQiX3MpOwogICAgIH0KIAotICAgIFN0cmluZyBvYmplY3RHcm91
cE5hbWUgPSBvYmplY3RHcm91cCA/ICpvYmplY3RHcm91cCA6IFN0cmluZygpOwotICAgIHJlc3Vs
dCA9IGluamVjdGVkU2NyaXB0LndyYXBPYmplY3QodmFsdWUsIG9iamVjdEdyb3VwTmFtZSk7Cisg
ICAgYXV0byByZXN1bHQgPSBpbmplY3RlZFNjcmlwdC53cmFwT2JqZWN0KHZhbHVlLCBvYmplY3RH
cm91cCk7CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgi
SW50ZXJuYWwgZXJyb3I6IHVuYWJsZSB0byBjYXN0IENvbnRleHQiKTsKKworICAgIHJldHVybiBy
ZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6
c2V0UmVjb3JkaW5nQXV0b0NhcHR1cmVGcmFtZUNvdW50KEVycm9yU3RyaW5nJiwgaW50IGNvdW50
KQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnNl
dFJlY29yZGluZ0F1dG9DYXB0dXJlRnJhbWVDb3VudChpbnQgY291bnQpCiB7CiAgICAgaWYgKGNv
dW50ID4gMCkKICAgICAgICAgbV9yZWNvcmRpbmdBdXRvQ2FwdHVyZUZyYW1lQ291bnQgPSBjb3Vu
dDsKICAgICBlbHNlCiAgICAgICAgIG1fcmVjb3JkaW5nQXV0b0NhcHR1cmVGcmFtZUNvdW50ID0g
V1RGOjpudWxsb3B0OworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ2FudmFz
QWdlbnQ6OnN0YXJ0UmVjb3JkaW5nKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3Ry
aW5nJiBjYW52YXNJZCwgY29uc3QgaW50KiBmcmFtZUNvdW50LCBjb25zdCBpbnQqIG1lbW9yeUxp
bWl0KQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yQ2FudmFzQWdlbnQ6
OnN0YXJ0UmVjb3JkaW5nKGNvbnN0IFByb3RvY29sOjpDYW52YXM6OkNhbnZhc0lkJiBjYW52YXNJ
ZCwgT3B0aW9uYWw8aW50PiYmIGZyYW1lQ291bnQsIE9wdGlvbmFsPGludD4mJiBtZW1vcnlMaW1p
dCkKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBhdXRv
IGluc3BlY3RvckNhbnZhcyA9IGFzc2VydEluc3BlY3RvckNhbnZhcyhlcnJvclN0cmluZywgY2Fu
dmFzSWQpOwogICAgIGlmICghaW5zcGVjdG9yQ2FudmFzKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICAvLyBGSVhNRTogPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzIwMTY1MT4gV2ViIEluc3BlY3Rvcjog
Q2FudmFzOiBzdXBwb3J0IGNhbnZhcyByZWNvcmRpbmdzIGZvciBXZWJHUFVEZXZpY2UKKyAgICAg
ICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgIGF1dG8qIGNvbnRl
eHQgPSBpbnNwZWN0b3JDYW52YXMtPmNhbnZhc0NvbnRleHQoKTsKLSAgICBpZiAoIWNvbnRleHQp
Ci0gICAgICAgIHJldHVybjsKIAotICAgIGlmIChjb250ZXh0LT5jYWxsVHJhY2luZ0FjdGl2ZSgp
KSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIkFscmVhZHkgcmVjb3JkaW5nIGNhbnZhcyJfczsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICAvLyBGSVhNRTogPGh0dHBzOi8vd2Via2l0Lm9y
Zy9iLzIwMTY1MT4gV2ViIEluc3BlY3RvcjogQ2FudmFzOiBzdXBwb3J0IGNhbnZhcyByZWNvcmRp
bmdzIGZvciBXZWJHUFVEZXZpY2UKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJldHVybiBt
YWtlVW5leHBlY3RlZCgiTm90IHN1cHBvcnRlZCJfcyk7CisKKyAgICBpZiAoY29udGV4dC0+Y2Fs
bFRyYWNpbmdBY3RpdmUoKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJBbHJlYWR5
IHJlY29yZGluZyBjYW52YXMiX3MpOwogCiAgICAgUmVjb3JkaW5nT3B0aW9ucyByZWNvcmRpbmdP
cHRpb25zOwogICAgIGlmIChmcmFtZUNvdW50KQogICAgICAgICByZWNvcmRpbmdPcHRpb25zLmZy
YW1lQ291bnQgPSAqZnJhbWVDb3VudDsKICAgICBpZiAobWVtb3J5TGltaXQpCiAgICAgICAgIHJl
Y29yZGluZ09wdGlvbnMubWVtb3J5TGltaXQgPSAqbWVtb3J5TGltaXQ7Ci0gICAgc3RhcnRSZWNv
cmRpbmcoKmluc3BlY3RvckNhbnZhcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6UmVjb3JkaW5nOjpJ
bml0aWF0b3I6OkZyb250ZW5kLCBXVEZNb3ZlKHJlY29yZGluZ09wdGlvbnMpKTsKKyAgICBzdGFy
dFJlY29yZGluZygqaW5zcGVjdG9yQ2FudmFzLCBQcm90b2NvbDo6UmVjb3JkaW5nOjpJbml0aWF0
b3I6OkZyb250ZW5kLCBXVEZNb3ZlKHJlY29yZGluZ09wdGlvbnMpKTsKKworICAgIHJldHVybiB7
IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnN0b3BSZWNvcmRpbmcoRXJyb3JT
dHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGNhbnZhc0lkKQorUHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnN0b3BSZWNvcmRpbmcoY29u
c3QgUHJvdG9jb2w6OkNhbnZhczo6Q2FudmFzSWQmIGNhbnZhc0lkKQogeworICAgIFByb3RvY29s
OjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIGF1dG8gaW5zcGVjdG9yQ2FudmFzID0g
YXNzZXJ0SW5zcGVjdG9yQ2FudmFzKGVycm9yU3RyaW5nLCBjYW52YXNJZCk7CiAgICAgaWYgKCFp
bnNwZWN0b3JDYW52YXMpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEZJWE1FOiA8aHR0cHM6
Ly93ZWJraXQub3JnL2IvMjAxNjUxPiBXZWIgSW5zcGVjdG9yOiBDYW52YXM6IHN1cHBvcnQgY2Fu
dmFzIHJlY29yZGluZ3MgZm9yIFdlYkdQVURldmljZQorICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoZXJyb3JTdHJpbmcpOwogCiAgICAgYXV0byogY29udGV4dCA9IGluc3BlY3RvckNhbnZh
cy0+Y2FudmFzQ29udGV4dCgpOwotICAgIGlmICghY29udGV4dCkKLSAgICAgICAgcmV0dXJuOwog
Ci0gICAgaWYgKCFjb250ZXh0LT5jYWxsVHJhY2luZ0FjdGl2ZSgpKSB7Ci0gICAgICAgIGVycm9y
U3RyaW5nID0gIk5vdCByZWNvcmRpbmcgY2FudmFzIl9zOwotICAgICAgICByZXR1cm47Ci0gICAg
fQorICAgIC8vIEZJWE1FOiA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMjAxNjUxPiBXZWIgSW5zcGVj
dG9yOiBDYW52YXM6IHN1cHBvcnQgY2FudmFzIHJlY29yZGluZ3MgZm9yIFdlYkdQVURldmljZQor
ICAgIGlmICghY29udGV4dCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJOb3Qgc3Vw
cG9ydGVkIl9zKTsKKworICAgIGlmICghY29udGV4dC0+Y2FsbFRyYWNpbmdBY3RpdmUoKSkKKyAg
ICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJOb3QgcmVjb3JkaW5nIGNhbnZhcyJfcyk7CiAK
ICAgICBkaWRGaW5pc2hSZWNvcmRpbmdDYW52YXNGcmFtZSgqY29udGV4dCwgdHJ1ZSk7CisKKyAg
ICByZXR1cm4geyB9OwogfQogCiAjaWYgRU5BQkxFKFdFQkdMKSB8fCBFTkFCTEUoV0VCR1BVKQot
dm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6cmVxdWVzdFNoYWRlclNvdXJjZShFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgcHJvZ3JhbUlkLCBjb25zdCBTdHJpbmcmIHNo
YWRlclR5cGVTdHJpbmcsIFN0cmluZyogb3V0U291cmNlKQorUHJvdG9jb2w6OkVycm9yU3RyaW5n
T3I8U3RyaW5nPiBJbnNwZWN0b3JDYW52YXNBZ2VudDo6cmVxdWVzdFNoYWRlclNvdXJjZShjb25z
dCBQcm90b2NvbDo6Q2FudmFzOjpQcm9ncmFtSWQmIHByb2dyYW1JZCwgUHJvdG9jb2w6OkNhbnZh
czo6U2hhZGVyVHlwZSBzaGFkZXJUeXBlKQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBl
cnJvclN0cmluZzsKKwogICAgIGF1dG8gaW5zcGVjdG9yUHJvZ3JhbSA9IGFzc2VydEluc3BlY3Rv
clByb2dyYW0oZXJyb3JTdHJpbmcsIHByb2dyYW1JZCk7CiAgICAgaWYgKCFpbnNwZWN0b3JQcm9n
cmFtKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJv
clN0cmluZyk7CiAKLSAgICBhdXRvIHNoYWRlclR5cGUgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpJ
bnNwZWN0b3JIZWxwZXJzOjpwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90
b2NvbDo6Q2FudmFzOjpTaGFkZXJUeXBlPihzaGFkZXJUeXBlU3RyaW5nKTsKLSAgICBpZiAoIXNo
YWRlclR5cGUpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSBtYWtlU3RyaW5nKCJVbmtub3duIHNo
YWRlclR5cGU6ICJfcywgc2hhZGVyVHlwZVN0cmluZyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
CisgICAgYXV0byBzb3VyY2UgPSBpbnNwZWN0b3JQcm9ncmFtLT5yZXF1ZXN0U2hhZGVyU291cmNl
KHNoYWRlclR5cGUpOworICAgIGlmICghc291cmNlKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoIk1pc3Npbmcgc2hhZGVyIG9mIGdpdmVuIHNoYWRlclR5cGUgZm9yIGdpdmVuIHByb2dy
YW1JZCJfcyk7CiAKLSAgICBhdXRvIHNvdXJjZSA9IGluc3BlY3RvclByb2dyYW0tPnJlcXVlc3RT
aGFkZXJTb3VyY2Uoc2hhZGVyVHlwZS52YWx1ZSgpKTsKLSAgICBpZiAoIXNvdXJjZSkgewotICAg
ICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIHNoYWRlciBvZiBnaXZlbiBzaGFkZXJUeXBlIGZv
ciBnaXZlbiBwcm9ncmFtSWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAqb3V0
U291cmNlID0gc291cmNlOworICAgIHJldHVybiBzb3VyY2U7CiB9CiAKLXZvaWQgSW5zcGVjdG9y
Q2FudmFzQWdlbnQ6OnVwZGF0ZVNoYWRlcihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0
IFN0cmluZyYgcHJvZ3JhbUlkLCBjb25zdCBTdHJpbmcmIHNoYWRlclR5cGVTdHJpbmcsIGNvbnN0
IFN0cmluZyYgc291cmNlKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9y
Q2FudmFzQWdlbnQ6OnVwZGF0ZVNoYWRlcihjb25zdCBQcm90b2NvbDo6Q2FudmFzOjpQcm9ncmFt
SWQmIHByb2dyYW1JZCwgUHJvdG9jb2w6OkNhbnZhczo6U2hhZGVyVHlwZSBzaGFkZXJUeXBlLCBj
b25zdCBTdHJpbmcmIHNvdXJjZSkKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JT
dHJpbmc7CisKICAgICBhdXRvIGluc3BlY3RvclByb2dyYW0gPSBhc3NlcnRJbnNwZWN0b3JQcm9n
cmFtKGVycm9yU3RyaW5nLCBwcm9ncmFtSWQpOwogICAgIGlmICghaW5zcGVjdG9yUHJvZ3JhbSkK
LSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJp
bmcpOwogCi0gICAgYXV0byBzaGFkZXJUeXBlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6SW5zcGVj
dG9ySGVscGVyczo6cGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkNhbnZhczo6U2hhZGVyVHlwZT4oc2hhZGVyVHlwZVN0cmluZyk7Ci0gICAgaWYgKCFzaGFkZXJU
eXBlKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gbWFrZVN0cmluZygiVW5rbm93biBzaGFkZXJU
eXBlOiAiX3MsIHNoYWRlclR5cGVTdHJpbmcpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAg
IGlmICghaW5zcGVjdG9yUHJvZ3JhbS0+dXBkYXRlU2hhZGVyKHNoYWRlclR5cGUsIHNvdXJjZSkp
CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiRmFpbGVkIHRvIHVwZGF0ZSBzaGFkZXIg
b2YgZ2l2ZW4gc2hhZGVyVHlwZSBmb3IgZ2l2ZW4gcHJvZ3JhbUlkIl9zKTsKIAotICAgIGlmICgh
aW5zcGVjdG9yUHJvZ3JhbS0+dXBkYXRlU2hhZGVyKHNoYWRlclR5cGUudmFsdWUoKSwgc291cmNl
KSkKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiRmFpbGVkIHRvIHVwZGF0ZSBzaGFkZXIgb2YgZ2l2
ZW4gc2hhZGVyVHlwZSBmb3IgZ2l2ZW4gcHJvZ3JhbUlkIl9zOworICAgIHJldHVybiB7IH07CiB9
CiAKICNpZiBFTkFCTEUoV0VCR0wpCi12b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjpzZXRTaGFk
ZXJQcm9ncmFtRGlzYWJsZWQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcm
IHByb2dyYW1JZCwgYm9vbCBkaXNhYmxlZCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+
IEluc3BlY3RvckNhbnZhc0FnZW50OjpzZXRTaGFkZXJQcm9ncmFtRGlzYWJsZWQoY29uc3QgUHJv
dG9jb2w6OkNhbnZhczo6UHJvZ3JhbUlkJiBwcm9ncmFtSWQsIGJvb2wgZGlzYWJsZWQpCiB7Cisg
ICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAgICAgYXV0byBpbnNwZWN0
b3JQcm9ncmFtID0gYXNzZXJ0SW5zcGVjdG9yUHJvZ3JhbShlcnJvclN0cmluZywgcHJvZ3JhbUlk
KTsKICAgICBpZiAoIWluc3BlY3RvclByb2dyYW0pCi0gICAgICAgIHJldHVybjsKKyAgICAgICAg
cmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgIGluc3BlY3RvclByb2dy
YW0tPnNldERpc2FibGVkKGRpc2FibGVkKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQg
SW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnNldFNoYWRlclByb2dyYW1IaWdobGlnaHRlZChFcnJvclN0
cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgcHJvZ3JhbUlkLCBib29sIGhpZ2hsaWdo
dGVkKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yQ2FudmFzQWdlbnQ6
OnNldFNoYWRlclByb2dyYW1IaWdobGlnaHRlZChjb25zdCBQcm90b2NvbDo6Q2FudmFzOjpQcm9n
cmFtSWQmIHByb2dyYW1JZCwgYm9vbCBoaWdobGlnaHRlZCkKIHsKKyAgICBQcm90b2NvbDo6RXJy
b3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBhdXRvIGluc3BlY3RvclByb2dyYW0gPSBhc3Nl
cnRJbnNwZWN0b3JQcm9ncmFtKGVycm9yU3RyaW5nLCBwcm9ncmFtSWQpOwogICAgIGlmICghaW5z
cGVjdG9yUHJvZ3JhbSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoZXJyb3JTdHJpbmcpOwogCiAgICAgaW5zcGVjdG9yUHJvZ3JhbS0+c2V0SGlnaGxpZ2h0
ZWQoaGlnaGxpZ2h0ZWQpOworCisgICAgcmV0dXJuIHsgfTsKIH0KICNlbmRpZiAvLyBFTkFCTEUo
V0VCR0wpCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKSB8fCBFTkFCTEUoV0VCR1BVKQpAQCAtNDEz
LDcgKzQzMCw3IEBAIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmRpZENyZWF0ZUNhbnZhc1Jl
bmRlcmluZ0NvbnRleHQoQ2FudmFzUmVuZGVyaW5nQ29udGV4CiAgICAgaWYgKG1fcmVjb3JkaW5n
QXV0b0NhcHR1cmVGcmFtZUNvdW50KSB7CiAgICAgICAgIFJlY29yZGluZ09wdGlvbnMgcmVjb3Jk
aW5nT3B0aW9uczsKICAgICAgICAgcmVjb3JkaW5nT3B0aW9ucy5mcmFtZUNvdW50ID0gbV9yZWNv
cmRpbmdBdXRvQ2FwdHVyZUZyYW1lQ291bnQudmFsdWUoKTsKLSAgICAgICAgc3RhcnRSZWNvcmRp
bmcoaW5zcGVjdG9yQ2FudmFzLCBJbnNwZWN0b3I6OlByb3RvY29sOjpSZWNvcmRpbmc6OkluaXRp
YXRvcjo6QXV0b0NhcHR1cmUsIFdURk1vdmUocmVjb3JkaW5nT3B0aW9ucykpOworICAgICAgICBz
dGFydFJlY29yZGluZyhpbnNwZWN0b3JDYW52YXMsIFByb3RvY29sOjpSZWNvcmRpbmc6OkluaXRp
YXRvcjo6QXV0b0NhcHR1cmUsIFdURk1vdmUocmVjb3JkaW5nT3B0aW9ucykpOwogICAgIH0KIH0K
IApAQCAtNTczLDcgKzU5MCw3IEBAIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmNvbnNvbGVT
dGFydFJlY29yZGluZ0NhbnZhcyhDYW52YXNSZW5kZXJpbmdDb250ZXh0JiBjCiAgICAgICAgIGlm
IChKU0M6OkpTVmFsdWUgb3B0aW9uTmFtZSA9IG9wdGlvbnMtPmdldCgmZXhlYywgSlNDOjpJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAibmFtZSIpKSkKICAgICAgICAgICAgIHJlY29yZGluZ09w
dGlvbnMubmFtZSA9IG9wdGlvbk5hbWUudG9XVEZTdHJpbmcoJmV4ZWMpOwogICAgIH0KLSAgICBz
dGFydFJlY29yZGluZygqaW5zcGVjdG9yQ2FudmFzLCBJbnNwZWN0b3I6OlByb3RvY29sOjpSZWNv
cmRpbmc6OkluaXRpYXRvcjo6Q29uc29sZSwgV1RGTW92ZShyZWNvcmRpbmdPcHRpb25zKSk7Cisg
ICAgc3RhcnRSZWNvcmRpbmcoKmluc3BlY3RvckNhbnZhcywgUHJvdG9jb2w6OlJlY29yZGluZzo6
SW5pdGlhdG9yOjpDb25zb2xlLCBXVEZNb3ZlKHJlY29yZGluZ09wdGlvbnMpKTsKIH0KIAogdm9p
ZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6Y29uc29sZVN0b3BSZWNvcmRpbmdDYW52YXMoQ2FudmFz
UmVuZGVyaW5nQ29udGV4dCYgY29udGV4dCkKQEAgLTY5OCw3ICs3MTUsNyBAQCB2b2lkIEluc3Bl
Y3RvckNhbnZhc0FnZW50Ojp3aWxsRGVzdHJveVdlYkdQVVBpcGVsaW5lKFdlYkdQVVBpcGVsaW5l
JiBwaXBlbGluZSkKIH0KICNlbmRpZiAvLyBFTkFCTEUoV0VCR1BVKQogCi12b2lkIEluc3BlY3Rv
ckNhbnZhc0FnZW50OjpzdGFydFJlY29yZGluZyhJbnNwZWN0b3JDYW52YXMmIGluc3BlY3RvckNh
bnZhcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6UmVjb3JkaW5nOjpJbml0aWF0b3IgaW5pdGlhdG9y
LCBSZWNvcmRpbmdPcHRpb25zJiYgcmVjb3JkaW5nT3B0aW9ucykKK3ZvaWQgSW5zcGVjdG9yQ2Fu
dmFzQWdlbnQ6OnN0YXJ0UmVjb3JkaW5nKEluc3BlY3RvckNhbnZhcyYgaW5zcGVjdG9yQ2FudmFz
LCBQcm90b2NvbDo6UmVjb3JkaW5nOjpJbml0aWF0b3IgaW5pdGlhdG9yLCBSZWNvcmRpbmdPcHRp
b25zJiYgcmVjb3JkaW5nT3B0aW9ucykKIHsKICAgICBhdXRvKiBjb250ZXh0ID0gaW5zcGVjdG9y
Q2FudmFzLmNhbnZhc0NvbnRleHQoKTsKICAgICBBU1NFUlQoY29udGV4dCk7CkBAIC04NDAsNyAr
ODU3LDcgQEAgdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6dW5iaW5kQ2FudmFzKEluc3BlY3Rv
ckNhbnZhcyYgaW5zcGVjdG9yQ2FudmFzKQogICAgICAgICBtX2NhbnZhc0Rlc3Ryb3llZFRpbWVy
LnN0YXJ0T25lU2hvdCgwX3MpOwogfQogCi1SZWZQdHI8SW5zcGVjdG9yQ2FudmFzPiBJbnNwZWN0
b3JDYW52YXNBZ2VudDo6YXNzZXJ0SW5zcGVjdG9yQ2FudmFzKEVycm9yU3RyaW5nJiBlcnJvclN0
cmluZywgY29uc3QgU3RyaW5nJiBjYW52YXNJZCkKK1JlZlB0cjxJbnNwZWN0b3JDYW52YXM+IElu
c3BlY3RvckNhbnZhc0FnZW50Ojphc3NlcnRJbnNwZWN0b3JDYW52YXMoUHJvdG9jb2w6OkVycm9y
U3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBjYW52YXNJZCkKIHsKICAgICBhdXRv
IGluc3BlY3RvckNhbnZhcyA9IG1faWRlbnRpZmllclRvSW5zcGVjdG9yQ2FudmFzLmdldChjYW52
YXNJZCk7CiAgICAgaWYgKCFpbnNwZWN0b3JDYW52YXMpIHsKQEAgLTg4NSw3ICs5MDIsNyBAQCB2
b2lkIEluc3BlY3RvckNhbnZhc0FnZW50Ojp1bmJpbmRQcm9ncmFtKEluc3BlY3RvclNoYWRlclBy
b2dyYW0mIGluc3BlY3RvclByb2dyYQogICAgICAgICBtX3Byb2dyYW1EZXN0cm95ZWRUaW1lci5z
dGFydE9uZVNob3QoMF9zKTsKIH0KIAotUmVmUHRyPEluc3BlY3RvclNoYWRlclByb2dyYW0+IElu
c3BlY3RvckNhbnZhc0FnZW50Ojphc3NlcnRJbnNwZWN0b3JQcm9ncmFtKEVycm9yU3RyaW5nJiBl
cnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBwcm9ncmFtSWQpCitSZWZQdHI8SW5zcGVjdG9yU2hh
ZGVyUHJvZ3JhbT4gSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmFzc2VydEluc3BlY3RvclByb2dyYW0o
UHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBwcm9ncmFt
SWQpCiB7CiAgICAgYXV0byBpbnNwZWN0b3JQcm9ncmFtID0gbV9pZGVudGlmaWVyVG9JbnNwZWN0
b3JQcm9ncmFtLmdldChwcm9ncmFtSWQpOwogICAgIGlmICghaW5zcGVjdG9yUHJvZ3JhbSkgewpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDYW52
YXNBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDYW52
YXNBZ2VudC5oCmluZGV4IDBlZjFhZWZiNjQ3ZWFkOTliN2QwZWIyNDNmZDBiNDA4Y2U0NWI2MGYu
Ljg2YmRiNTEyNTY5YTMxMWY3YTI1MDg5NWU4ZmZiYzlkZDllYmNkYzAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ2FudmFzQWdlbnQuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNhbnZhc0FnZW50LmgK
QEAgLTU3LDQzICs1Nyw0MSBAQCBjbGFzcyBXZWJHUFVTd2FwQ2hhaW47CiAjZW5kaWYgLy8gRU5B
QkxFKFdFQkdQVSkKICNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpIHx8IEVOQUJMRShXRUJHUFUpCiAK
LXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCiBjbGFzcyBJbnNwZWN0b3JDYW52YXNBZ2Vu
dCBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3JBZ2VudEJhc2UsIHB1YmxpYyBJbnNwZWN0b3I6OkNh
bnZhc0JhY2tlbmREaXNwYXRjaGVySGFuZGxlciwgcHVibGljIENhbnZhc09ic2VydmVyLCBwdWJs
aWMgQ2FuTWFrZVdlYWtQdHI8SW5zcGVjdG9yQ2FudmFzQWdlbnQ+IHsKICAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShJbnNwZWN0b3JDYW52YXNBZ2VudCk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CiBwdWJsaWM6CiAgICAgSW5zcGVjdG9yQ2FudmFzQWdlbnQoUGFnZUFnZW50Q29udGV4
dCYpOwotICAgIH5JbnNwZWN0b3JDYW52YXNBZ2VudCgpIG92ZXJyaWRlOworICAgIH5JbnNwZWN0
b3JDYW52YXNBZ2VudCgpOwogCiAgICAgLy8gSW5zcGVjdG9yQWdlbnRCYXNlCi0gICAgdm9pZCBk
aWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9udGVuZFJvdXRlciosIElu
c3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXIqKSBvdmVycmlkZTsKLSAgICB2b2lkIHdpbGxEZXN0
cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlzY29ubmVjdFJlYXNvbikgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCBkaXNjYXJkQWdlbnQoKSBvdmVycmlkZTsKKyAgICB2b2lkIGRpZENyZWF0
ZUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kUm91dGVyKiwgSW5zcGVjdG9y
OjpCYWNrZW5kRGlzcGF0Y2hlciopOworICAgIHZvaWQgd2lsbERlc3Ryb3lGcm9udGVuZEFuZEJh
Y2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKTsKKyAgICB2b2lkIGRpc2NhcmRBZ2Vu
dCgpOwogCiAgICAgLy8gQ2FudmFzQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyCi0gICAgdm9pZCBl
bmFibGUoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2b2lkIGRpc2FibGUoRXJyb3JTdHJp
bmcmKSBvdmVycmlkZTsKLSAgICB2b2lkIHJlcXVlc3ROb2RlKEVycm9yU3RyaW5nJiwgY29uc3Qg
U3RyaW5nJiBjYW52YXNJZCwgaW50KiBub2RlSWQpIG92ZXJyaWRlOwotICAgIHZvaWQgcmVxdWVz
dENvbnRlbnQoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGNhbnZhc0lkLCBTdHJpbmcqIGNv
bnRlbnQpIG92ZXJyaWRlOwotICAgIHZvaWQgcmVxdWVzdENsaWVudE5vZGVzKEVycm9yU3RyaW5n
JiwgY29uc3QgU3RyaW5nJiBjYW52YXNJZCwgUmVmUHRyPEpTT046OkFycmF5T2Y8aW50Pj4mKSBv
dmVycmlkZTsKLSAgICB2b2lkIHJlc29sdmVDb250ZXh0KEVycm9yU3RyaW5nJiwgY29uc3QgU3Ry
aW5nJiBjYW52YXNJZCwgY29uc3QgU3RyaW5nKiBvYmplY3RHcm91cCwgUmVmUHRyPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mKSBvdmVycmlkZTsKLSAgICB2b2lk
IHNldFJlY29yZGluZ0F1dG9DYXB0dXJlRnJhbWVDb3VudChFcnJvclN0cmluZyYsIGludCBjb3Vu
dCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzdGFydFJlY29yZGluZyhFcnJvclN0cmluZyYsIGNvbnN0
IFN0cmluZyYgY2FudmFzSWQsIGNvbnN0IGludCogZnJhbWVDb3VudCwgY29uc3QgaW50KiBtZW1v
cnlMaW1pdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzdG9wUmVjb3JkaW5nKEVycm9yU3RyaW5nJiwg
Y29uc3QgU3RyaW5nJiBjYW52YXNJZCkgb3ZlcnJpZGU7CisgICAgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBlbmFibGUoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29s
OjpFcnJvclN0cmluZ09yPHZvaWQ+IGRpc2FibGUoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29s
OjpFcnJvclN0cmluZ09yPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkPiByZXF1ZXN0
Tm9kZShjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpDYW52YXM6OkNhbnZhc0lkJik7CisgICAg
SW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxTdHJpbmc+IHJlcXVlc3RDb250ZW50
KGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6Q2FudmFzSWQmKTsKKyAgICBJbnNw
ZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkPj4+IHJlcXVlc3RDbGllbnROb2Rlcyhjb25zdCBJbnNw
ZWN0b3I6OlByb3RvY29sOjpDYW52YXM6OkNhbnZhc0lkJik7CisgICAgSW5zcGVjdG9yOjpQcm90
b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6UmVt
b3RlT2JqZWN0Pj4gcmVzb2x2ZUNvbnRleHQoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6Q2Fu
dmFzOjpDYW52YXNJZCYsIGNvbnN0IFN0cmluZyYgb2JqZWN0R3JvdXApOworICAgIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc2V0UmVjb3JkaW5nQXV0b0NhcHR1cmVG
cmFtZUNvdW50KGludCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2
b2lkPiBzdGFydFJlY29yZGluZyhjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpDYW52YXM6OkNh
bnZhc0lkJiwgT3B0aW9uYWw8aW50PiYmIGZyYW1lQ291bnQsIE9wdGlvbmFsPGludD4mJiBtZW1v
cnlMaW1pdCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBz
dG9wUmVjb3JkaW5nKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6Q2FudmFzSWQm
KTsKICNpZiBFTkFCTEUoV0VCR0wpIHx8IEVOQUJMRShXRUJHUFUpCi0gICAgdm9pZCByZXF1ZXN0
U2hhZGVyU291cmNlKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBwcm9ncmFtSWQsIGNvbnN0
IFN0cmluZyYgc2hhZGVyVHlwZSwgU3RyaW5nKiBzb3VyY2UpIG92ZXJyaWRlOwotICAgIHZvaWQg
dXBkYXRlU2hhZGVyKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBwcm9ncmFtSWQsIGNvbnN0
IFN0cmluZyYgc2hhZGVyVHlwZSwgY29uc3QgU3RyaW5nJiBzb3VyY2UpIG92ZXJyaWRlOworICAg
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8U3RyaW5nPiByZXF1ZXN0U2hhZGVy
U291cmNlKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6UHJvZ3JhbUlkJiwgSW5z
cGVjdG9yOjpQcm90b2NvbDo6Q2FudmFzOjpTaGFkZXJUeXBlKTsKKyAgICBJbnNwZWN0b3I6OlBy
b3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHVwZGF0ZVNoYWRlcihjb25zdCBJbnNwZWN0b3I6
OlByb3RvY29sOjpDYW52YXM6OlByb2dyYW1JZCYsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZh
czo6U2hhZGVyVHlwZSwgY29uc3QgU3RyaW5nJiBzb3VyY2UpOwogI2lmIEVOQUJMRShXRUJHTCkK
LSAgICB2b2lkIHNldFNoYWRlclByb2dyYW1EaXNhYmxlZChFcnJvclN0cmluZyYsIGNvbnN0IFN0
cmluZyYgcHJvZ3JhbUlkLCBib29sIGRpc2FibGVkKSBvdmVycmlkZTsKLSAgICB2b2lkIHNldFNo
YWRlclByb2dyYW1IaWdobGlnaHRlZChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgcHJvZ3Jh
bUlkLCBib29sIGhpZ2hsaWdodGVkKSBvdmVycmlkZTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29s
OjpFcnJvclN0cmluZ09yPHZvaWQ+IHNldFNoYWRlclByb2dyYW1EaXNhYmxlZChjb25zdCBJbnNw
ZWN0b3I6OlByb3RvY29sOjpDYW52YXM6OlByb2dyYW1JZCYsIGJvb2wgZGlzYWJsZWQpOworICAg
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc2V0U2hhZGVyUHJvZ3Jh
bUhpZ2hsaWdodGVkKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6UHJvZ3JhbUlk
JiwgYm9vbCBoaWdobGlnaHRlZCk7CiAjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKQogI2VuZGlmIC8v
IEVOQUJMRShXRUJHTCkgfHwgRU5BQkxFKFdFQkdQVSkKIAogICAgIC8vIENhbnZhc09ic2VydmVy
Ci0gICAgdm9pZCBjYW52YXNDaGFuZ2VkKENhbnZhc0Jhc2UmLCBjb25zdCBGbG9hdFJlY3QmKSBv
dmVycmlkZTsKLSAgICB2b2lkIGNhbnZhc1Jlc2l6ZWQoQ2FudmFzQmFzZSYpIG92ZXJyaWRlIHsg
fQotICAgIHZvaWQgY2FudmFzRGVzdHJveWVkKENhbnZhc0Jhc2UmKSBvdmVycmlkZTsKKyAgICB2
b2lkIGNhbnZhc0NoYW5nZWQoQ2FudmFzQmFzZSYsIGNvbnN0IEZsb2F0UmVjdCYpOworICAgIHZv
aWQgY2FudmFzUmVzaXplZChDYW52YXNCYXNlJikgeyB9CisgICAgdm9pZCBjYW52YXNEZXN0cm95
ZWQoQ2FudmFzQmFzZSYpOwogCiAgICAgLy8gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uCiAgICAg
dm9pZCBmcmFtZU5hdmlnYXRlZChGcmFtZSYpOwpAQCAtMTM4LDcgKzEzNiw3IEBAIHByaXZhdGU6
CiAgICAgSW5zcGVjdG9yQ2FudmFzJiBiaW5kQ2FudmFzKFdlYkdQVURldmljZSYsIGJvb2wgY2Fw
dHVyZUJhY2t0cmFjZSk7CiAjZW5kaWYgLy8gRU5BQkxFKFdFQkdQVSkKICAgICB2b2lkIHVuYmlu
ZENhbnZhcyhJbnNwZWN0b3JDYW52YXMmKTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yQ2FudmFzPiBh
c3NlcnRJbnNwZWN0b3JDYW52YXMoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGNhbnZhc0lk
KTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yQ2FudmFzPiBhc3NlcnRJbnNwZWN0b3JDYW52YXMoSW5z
cGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGNhbnZhc0lkKTsK
ICAgICBSZWZQdHI8SW5zcGVjdG9yQ2FudmFzPiBmaW5kSW5zcGVjdG9yQ2FudmFzKENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQmKTsKICNpZiBFTkFCTEUoV0VCR1BVKQogICAgIFJlZlB0cjxJbnNwZWN0
b3JDYW52YXM+IGZpbmRJbnNwZWN0b3JDYW52YXMoV2ViR1BVRGV2aWNlJik7CkBAIC0xNDYsNyAr
MTQ0LDcgQEAgcHJpdmF0ZToKIAogI2lmIEVOQUJMRShXRUJHTCkgfHwgRU5BQkxFKFdFQkdQVSkK
ICAgICB2b2lkIHVuYmluZFByb2dyYW0oSW5zcGVjdG9yU2hhZGVyUHJvZ3JhbSYpOwotICAgIFJl
ZlB0cjxJbnNwZWN0b3JTaGFkZXJQcm9ncmFtPiBhc3NlcnRJbnNwZWN0b3JQcm9ncmFtKEVycm9y
U3RyaW5nJiwgY29uc3QgU3RyaW5nJiBwcm9ncmFtSWQpOworICAgIFJlZlB0cjxJbnNwZWN0b3JT
aGFkZXJQcm9ncmFtPiBhc3NlcnRJbnNwZWN0b3JQcm9ncmFtKEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBwcm9ncmFtSWQpOwogI2lmIEVOQUJMRShXRUJH
TCkKICAgICBSZWZQdHI8SW5zcGVjdG9yU2hhZGVyUHJvZ3JhbT4gZmluZEluc3BlY3RvclByb2dy
YW0oV2ViR0xQcm9ncmFtJik7CiAjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01BZ2VudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmNwcAppbmRl
eCA4MzlhNThiNTQ4ODU0ZGU3NTc3MGQyNjMzZDhkNTlhZjU5ZjI0MTEyLi5kYmRiODUxOGM5YTFk
YmUxYWFmNzdiMDIyZjYwYTljMTZkNDQwMzg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmNwcApAQCAtMTI5LDQwICsxMjks
MzkgQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIHN0YXRpYyBjb25zdCBzaXplX3QgbWF4
VGV4dFNpemUgPSAxMDAwMDsKIHN0YXRpYyBjb25zdCBVQ2hhciBlbGxpcHNpc1VDaGFyW10gPSB7
IDB4MjAyNiwgMCB9OwogCi1zdGF0aWMgQ29sb3IgcGFyc2VDb2xvcihjb25zdCBKU09OOjpPYmpl
Y3QqIGNvbG9yT2JqZWN0KQorc3RhdGljIENvbG9yIHBhcnNlQ29sb3IoUmVmUHRyPEpTT046Ok9i
amVjdD4mJiBjb2xvck9iamVjdCkKIHsKICAgICBpZiAoIWNvbG9yT2JqZWN0KQogICAgICAgICBy
ZXR1cm4gQ29sb3I6OnRyYW5zcGFyZW50QmxhY2s7CiAKLSAgICBpbnQgciA9IDA7Ci0gICAgaW50
IGcgPSAwOwotICAgIGludCBiID0gMDsKLSAgICBpZiAoIWNvbG9yT2JqZWN0LT5nZXRJbnRlZ2Vy
KCJyIiwgcikgfHwgIWNvbG9yT2JqZWN0LT5nZXRJbnRlZ2VyKCJnIiwgZykgfHwgIWNvbG9yT2Jq
ZWN0LT5nZXRJbnRlZ2VyKCJiIiwgYikpCisgICAgYXV0byByID0gY29sb3JPYmplY3QtPmdldElu
dGVnZXIoUHJvdG9jb2w6OkRPTTo6UkdCQUNvbG9yOjpyS2V5KTsKKyAgICBhdXRvIGcgPSBjb2xv
ck9iamVjdC0+Z2V0SW50ZWdlcihQcm90b2NvbDo6RE9NOjpSR0JBQ29sb3I6OmdLZXkpOworICAg
IGF1dG8gYiA9IGNvbG9yT2JqZWN0LT5nZXRJbnRlZ2VyKFByb3RvY29sOjpET006OlJHQkFDb2xv
cjo6YktleSk7CisgICAgaWYgKCFyIHx8ICFnIHx8ICFiKQogICAgICAgICByZXR1cm4gQ29sb3I6
OnRyYW5zcGFyZW50QmxhY2s7CiAKLSAgICBkb3VibGUgYSA9IDEuMDsKLSAgICBpZiAoIWNvbG9y
T2JqZWN0LT5nZXREb3VibGUoImEiLCBhKSkKLSAgICAgICAgcmV0dXJuIGNsYW1wVG9Db21wb25l
bnRCeXRlczxTUkdCQT4ociwgZywgYik7Ci0gICAgcmV0dXJuIGNsYW1wVG9Db21wb25lbnRCeXRl
czxTUkdCQT4ociwgZywgYiwgY29udmVydFRvQ29tcG9uZW50Qnl0ZShhKSk7CisgICAgYXV0byBh
ID0gY29sb3JPYmplY3QtPmdldERvdWJsZShQcm90b2NvbDo6RE9NOjpSR0JBQ29sb3I6OmFLZXkp
OworICAgIGlmICghYSkKKyAgICAgICAgcmV0dXJuIGNsYW1wVG9Db21wb25lbnRCeXRlczxTUkdC
QT4oKnIsICpnLCAqYik7CisgICAgcmV0dXJuIGNsYW1wVG9Db21wb25lbnRCeXRlczxTUkdCQT4o
KnIsICpnLCAqYiwgY29udmVydFRvQ29tcG9uZW50Qnl0ZSgqYSkpOwogfQogCi1zdGF0aWMgQ29s
b3IgcGFyc2VDb25maWdDb2xvcihjb25zdCBTdHJpbmcmIGZpZWxkTmFtZSwgY29uc3QgSlNPTjo6
T2JqZWN0KiBjb25maWdPYmplY3QpCitzdGF0aWMgQ29sb3IgcGFyc2VDb25maWdDb2xvcihjb25z
dCBTdHJpbmcmIGZpZWxkTmFtZSwgSlNPTjo6T2JqZWN0JiBjb25maWdPYmplY3QpCiB7Ci0gICAg
UmVmUHRyPEpTT046Ok9iamVjdD4gY29sb3JPYmplY3Q7Ci0gICAgY29uZmlnT2JqZWN0LT5nZXRP
YmplY3QoZmllbGROYW1lLCBjb2xvck9iamVjdCk7Ci0KLSAgICByZXR1cm4gcGFyc2VDb2xvcihj
b2xvck9iamVjdC5nZXQoKSk7CisgICAgcmV0dXJuIHBhcnNlQ29sb3IoY29uZmlnT2JqZWN0Lmdl
dE9iamVjdChmaWVsZE5hbWUpKTsKIH0KIAotc3RhdGljIGJvb2wgcGFyc2VRdWFkKGNvbnN0IEpT
T046OkFycmF5JiBxdWFkQXJyYXksIEZsb2F0UXVhZCogcXVhZCkKK3N0YXRpYyBib29sIHBhcnNl
UXVhZChSZWY8SlNPTjo6QXJyYXk+JiYgcXVhZEFycmF5LCBGbG9hdFF1YWQqIHF1YWQpCiB7CiAg
ICAgY29uc3Qgc2l6ZV90IGNvb3JkaW5hdGVzSW5RdWFkID0gODsKICAgICBkb3VibGUgY29vcmRp
bmF0ZXNbY29vcmRpbmF0ZXNJblF1YWRdOwotICAgIGlmIChxdWFkQXJyYXkubGVuZ3RoKCkgIT0g
Y29vcmRpbmF0ZXNJblF1YWQpCisgICAgaWYgKHF1YWRBcnJheS0+bGVuZ3RoKCkgIT0gY29vcmRp
bmF0ZXNJblF1YWQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGNvb3JkaW5hdGVzSW5RdWFkOyArK2kpIHsKLSAgICAgICAgaWYgKCFxdWFkQXJyYXku
Z2V0KGkpLT5hc0RvdWJsZSgqKGNvb3JkaW5hdGVzICsgaSkpKQorICAgICAgICBhdXRvIGNvb3Jk
aW5hdGUgPSBxdWFkQXJyYXktPmdldChpKS0+YXNEb3VibGUoKTsKKyAgICAgICAgaWYgKCFjb29y
ZGluYXRlKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBjb29yZGluYXRlc1tp
XSA9ICpjb29yZGluYXRlOwogICAgIH0KICAgICBxdWFkLT5zZXRQMShGbG9hdFBvaW50KGNvb3Jk
aW5hdGVzWzBdLCBjb29yZGluYXRlc1sxXSkpOwogICAgIHF1YWQtPnNldFAyKEZsb2F0UG9pbnQo
Y29vcmRpbmF0ZXNbMl0sIGNvb3JkaW5hdGVzWzNdKSk7CkBAIC0yNDMsNyArMjQyLDcgQEAgcHVi
bGljOgogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIGF1dG8qIG5vZGUgPSBkb3duY2Fz
dDxOb2RlPihldmVudC50YXJnZXQoKSk7Ci0gICAgICAgIGludCBub2RlSWQgPSBtX2RvbUFnZW50
LnB1c2hOb2RlUGF0aFRvRnJvbnRlbmQobm9kZSk7CisgICAgICAgIGF1dG8gbm9kZUlkID0gbV9k
b21BZ2VudC5wdXNoTm9kZVBhdGhUb0Zyb250ZW5kKG5vZGUpOwogICAgICAgICBpZiAoIW5vZGVJ
ZCkKICAgICAgICAgICAgIHJldHVybjsKIApAQCAtMzIwLDkgKzMxOSw5IEBAIHZvaWQgSW5zcGVj
dG9yRE9NQWdlbnQ6OndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlz
Y29ubmVjdFJlYXNvCiAgICAgbV9tb3VzZWRPdmVyTm9kZSA9IG51bGxwdHI7CiAgICAgbV9pbnNw
ZWN0ZWROb2RlID0gbnVsbHB0cjsKIAotICAgIEVycm9yU3RyaW5nIGlnbm9yZWQ7CisgICAgUHJv
dG9jb2w6OkVycm9yU3RyaW5nIGlnbm9yZWQ7CiAgICAgc2V0U2VhcmNoaW5nRm9yTm9kZShpZ25v
cmVkLCBmYWxzZSwgbnVsbHB0ciwgZmFsc2UpOwotICAgIGhpZGVIaWdobGlnaHQoaWdub3JlZCk7
CisgICAgaGlkZUhpZ2hsaWdodCgpOwogCiAgICAgbV9pbnN0cnVtZW50aW5nQWdlbnRzLnNldFBl
cnNpc3RlbnRET01BZ2VudChudWxscHRyKTsKICAgICBtX2RvY3VtZW50UmVxdWVzdGVkID0gZmFs
c2U7CkBAIC0zNzQsOSArMzczLDkgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6cmVsZWFzZURh
bmdsaW5nTm9kZXMoKQogICAgIG1fZGFuZ2xpbmdOb2RlVG9JZE1hcHMuY2xlYXIoKTsKIH0KIAot
aW50IEluc3BlY3RvckRPTUFnZW50OjpiaW5kKE5vZGUqIG5vZGUsIE5vZGVUb0lkTWFwKiBub2Rl
c01hcCkKK1Byb3RvY29sOjpET006Ok5vZGVJZCBJbnNwZWN0b3JET01BZ2VudDo6YmluZChOb2Rl
KiBub2RlLCBOb2RlVG9JZE1hcCogbm9kZXNNYXApCiB7Ci0gICAgaW50IGlkID0gbm9kZXNNYXAt
PmdldChub2RlKTsKKyAgICBhdXRvIGlkID0gbm9kZXNNYXAtPmdldChub2RlKTsKICAgICBpZiAo
aWQpCiAgICAgICAgIHJldHVybiBpZDsKICAgICBpZCA9IG1fbGFzdE5vZGVJZCsrOwpAQCAtMzg4
LDcgKzM4Nyw3IEBAIGludCBJbnNwZWN0b3JET01BZ2VudDo6YmluZChOb2RlKiBub2RlLCBOb2Rl
VG9JZE1hcCogbm9kZXNNYXApCiAKIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnVuYmluZChOb2Rl
KiBub2RlLCBOb2RlVG9JZE1hcCogbm9kZXNNYXApCiB7Ci0gICAgaW50IGlkID0gbm9kZXNNYXAt
PmdldChub2RlKTsKKyAgICBhdXRvIGlkID0gbm9kZXNNYXAtPmdldChub2RlKTsKICAgICBpZiAo
IWlkKQogICAgICAgICByZXR1cm47CiAKQEAgLTQyMiw3ICs0MjEsNyBAQCB2b2lkIEluc3BlY3Rv
ckRPTUFnZW50Ojp1bmJpbmQoTm9kZSogbm9kZSwgTm9kZVRvSWRNYXAqIG5vZGVzTWFwKQogICAg
IH0KIH0KIAotTm9kZSogSW5zcGVjdG9yRE9NQWdlbnQ6OmFzc2VydE5vZGUoRXJyb3JTdHJpbmcm
IGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkKQorTm9kZSogSW5zcGVjdG9yRE9NQWdlbnQ6OmFzc2Vy
dE5vZGUoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgUHJvdG9jb2w6OkRPTTo6
Tm9kZUlkIG5vZGVJZCkKIHsKICAgICBOb2RlKiBub2RlID0gbm9kZUZvcklkKG5vZGVJZCk7CiAg
ICAgaWYgKCFub2RlKSB7CkBAIC00MzIsNyArNDMxLDcgQEAgTm9kZSogSW5zcGVjdG9yRE9NQWdl
bnQ6OmFzc2VydE5vZGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkKQogICAg
IHJldHVybiBub2RlOwogfQogCi1Eb2N1bWVudCogSW5zcGVjdG9yRE9NQWdlbnQ6OmFzc2VydERv
Y3VtZW50KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJZCkKK0RvY3VtZW50KiBJ
bnNwZWN0b3JET01BZ2VudDo6YXNzZXJ0RG9jdW1lbnQoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBl
cnJvclN0cmluZywgUHJvdG9jb2w6OkRPTTo6Tm9kZUlkIG5vZGVJZCkKIHsKICAgICBOb2RlKiBu
b2RlID0gYXNzZXJ0Tm9kZShlcnJvclN0cmluZywgbm9kZUlkKTsKICAgICBpZiAoIW5vZGUpCkBA
IC00NDQsNyArNDQzLDcgQEAgRG9jdW1lbnQqIEluc3BlY3RvckRPTUFnZW50Ojphc3NlcnREb2N1
bWVudChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQKICAgICByZXR1cm4gZG93
bmNhc3Q8RG9jdW1lbnQ+KG5vZGUpOwogfQogCi1FbGVtZW50KiBJbnNwZWN0b3JET01BZ2VudDo6
YXNzZXJ0RWxlbWVudChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQpCitFbGVt
ZW50KiBJbnNwZWN0b3JET01BZ2VudDo6YXNzZXJ0RWxlbWVudChQcm90b2NvbDo6RXJyb3JTdHJp
bmcmIGVycm9yU3RyaW5nLCBQcm90b2NvbDo6RE9NOjpOb2RlSWQgbm9kZUlkKQogewogICAgIE5v
ZGUqIG5vZGUgPSBhc3NlcnROb2RlKGVycm9yU3RyaW5nLCBub2RlSWQpOwogICAgIGlmICghbm9k
ZSkKQEAgLTQ1Niw3ICs0NTUsNyBAQCBFbGVtZW50KiBJbnNwZWN0b3JET01BZ2VudDo6YXNzZXJ0
RWxlbWVudChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQpCiAgICAgcmV0dXJu
IGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpOwogfQogCi1Ob2RlKiBJbnNwZWN0b3JET01BZ2VudDo6
YXNzZXJ0RWRpdGFibGVOb2RlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJZCkK
K05vZGUqIEluc3BlY3RvckRPTUFnZW50Ojphc3NlcnRFZGl0YWJsZU5vZGUoUHJvdG9jb2w6OkVy
cm9yU3RyaW5nJiBlcnJvclN0cmluZywgUHJvdG9jb2w6OkRPTTo6Tm9kZUlkIG5vZGVJZCkKIHsK
ICAgICBOb2RlKiBub2RlID0gYXNzZXJ0Tm9kZShlcnJvclN0cmluZywgbm9kZUlkKTsKICAgICBp
ZiAoIW5vZGUpCkBAIC00NzIsNyArNDcxLDcgQEAgTm9kZSogSW5zcGVjdG9yRE9NQWdlbnQ6OmFz
c2VydEVkaXRhYmxlTm9kZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQKICAg
ICByZXR1cm4gbm9kZTsKIH0KIAotRWxlbWVudCogSW5zcGVjdG9yRE9NQWdlbnQ6OmFzc2VydEVk
aXRhYmxlRWxlbWVudChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQpCitFbGVt
ZW50KiBJbnNwZWN0b3JET01BZ2VudDo6YXNzZXJ0RWRpdGFibGVFbGVtZW50KFByb3RvY29sOjpF
cnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIFByb3RvY29sOjpET006Ok5vZGVJZCBub2RlSWQpCiB7
CiAgICAgTm9kZSogbm9kZSA9IGFzc2VydEVkaXRhYmxlTm9kZShlcnJvclN0cmluZywgbm9kZUlk
KTsKICAgICBpZiAoIW5vZGUpCkBAIC00ODQsMjcgKzQ4MywyNyBAQCBFbGVtZW50KiBJbnNwZWN0
b3JET01BZ2VudDo6YXNzZXJ0RWRpdGFibGVFbGVtZW50KEVycm9yU3RyaW5nJiBlcnJvclN0cmlu
ZywgaW50CiAgICAgcmV0dXJuIGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpOwogfQogCi12b2lkIElu
c3BlY3RvckRPTUFnZW50OjpnZXREb2N1bWVudChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIFJl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+JiByb290KQorUHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8UmVmPFByb3RvY29sOjpET006Ok5vZGU+PiBJbnNwZWN0b3JET01BZ2VudDo6
Z2V0RG9jdW1lbnQoKQogewogICAgIG1fZG9jdW1lbnRSZXF1ZXN0ZWQgPSB0cnVlOwogCi0gICAg
aWYgKCFtX2RvY3VtZW50KSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIkludGVybmFsIGVycm9y
OiBtaXNzaW5nIGRvY3VtZW50Il9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICgh
bV9kb2N1bWVudCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJJbnRlcm5hbCBlcnJv
cjogbWlzc2luZyBkb2N1bWVudCJfcyk7CiAKICAgICAvLyBSZXNldCBiYWNrZW5kIHN0YXRlLgog
ICAgIFJlZlB0cjxEb2N1bWVudD4gZG9jdW1lbnQgPSBtX2RvY3VtZW50OwogICAgIHJlc2V0KCk7
CiAgICAgbV9kb2N1bWVudCA9IGRvY3VtZW50OwogCi0gICAgcm9vdCA9IGJ1aWxkT2JqZWN0Rm9y
Tm9kZShtX2RvY3VtZW50LmdldCgpLCAyLCAmbV9kb2N1bWVudE5vZGVUb0lkTWFwKTsKKyAgICBh
dXRvIHJvb3QgPSBidWlsZE9iamVjdEZvck5vZGUobV9kb2N1bWVudC5nZXQoKSwgMiwgJm1fZG9j
dW1lbnROb2RlVG9JZE1hcCk7CiAKICAgICBpZiAobV9ub2RlVG9Gb2N1cykKICAgICAgICAgZm9j
dXNOb2RlKCk7CisKKyAgICByZXR1cm4gV1RGTW92ZShyb290KTsKIH0KIAotdm9pZCBJbnNwZWN0
b3JET01BZ2VudDo6cHVzaENoaWxkTm9kZXNUb0Zyb250ZW5kKGludCBub2RlSWQsIGludCBkZXB0
aCkKK3ZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnB1c2hDaGlsZE5vZGVzVG9Gcm9udGVuZChQcm90
b2NvbDo6RE9NOjpOb2RlSWQgbm9kZUlkLCBpbnQgZGVwdGgpCiB7CiAgICAgTm9kZSogbm9kZSA9
IG5vZGVGb3JJZChub2RlSWQpOwogICAgIGlmICghbm9kZSB8fCAobm9kZS0+bm9kZVR5cGUoKSAh
PSBOb2RlOjpFTEVNRU5UX05PREUgJiYgbm9kZS0+bm9kZVR5cGUoKSAhPSBOb2RlOjpET0NVTUVO
VF9OT0RFICYmIG5vZGUtPm5vZGVUeXBlKCkgIT0gTm9kZTo6RE9DVU1FTlRfRlJBR01FTlRfTk9E
RSkpCkBAIC01MTksNyArNTE4LDcgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6cHVzaENoaWxk
Tm9kZXNUb0Zyb250ZW5kKGludCBub2RlSWQsIGludCBkZXB0aCkKICAgICAgICAgZGVwdGgtLTsK
IAogICAgICAgICBmb3IgKG5vZGUgPSBpbm5lckZpcnN0Q2hpbGQobm9kZSk7IG5vZGU7IG5vZGUg
PSBpbm5lck5leHRTaWJsaW5nKG5vZGUpKSB7Ci0gICAgICAgICAgICBpbnQgY2hpbGROb2RlSWQg
PSBub2RlTWFwLT5nZXQobm9kZSk7CisgICAgICAgICAgICBhdXRvIGNoaWxkTm9kZUlkID0gbm9k
ZU1hcC0+Z2V0KG5vZGUpOwogICAgICAgICAgICAgQVNTRVJUKGNoaWxkTm9kZUlkKTsKICAgICAg
ICAgICAgIHB1c2hDaGlsZE5vZGVzVG9Gcm9udGVuZChjaGlsZE5vZGVJZCwgZGVwdGgpOwogICAg
ICAgICB9CkBAIC01NDEsMTggKzU0MCwxOCBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpkaXNj
YXJkQmluZGluZ3MoKQogICAgIG1fY2hpbGRyZW5SZXF1ZXN0ZWQuY2xlYXIoKTsKIH0KIAotaW50
IEluc3BlY3RvckRPTUFnZW50OjpwdXNoTm9kZVRvRnJvbnRlbmQoTm9kZSogbm9kZVRvUHVzaCkK
K1Byb3RvY29sOjpET006Ok5vZGVJZCBJbnNwZWN0b3JET01BZ2VudDo6cHVzaE5vZGVUb0Zyb250
ZW5kKE5vZGUqIG5vZGVUb1B1c2gpCiB7CiAgICAgaWYgKCFub2RlVG9QdXNoKQogICAgICAgICBy
ZXR1cm4gMDsKIAogICAgIC8vIEZJWE1FOiA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMjEzNDk5PiBX
ZWIgSW5zcGVjdG9yOiBhbGxvdyBET00gbm9kZXMgdG8gYmUgaW5zdHJ1bWVudGVkIGF0IGFueSBw
b2ludCwgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZSBtYWluIGRvY3VtZW50IGhhcyBhbHNvIGJl
ZW4gaW5zdHJ1bWVudGVkCiAKLSAgICBFcnJvclN0cmluZyBpZ25vcmVkOworICAgIFByb3RvY29s
OjpFcnJvclN0cmluZyBpZ25vcmVkOwogICAgIHJldHVybiBwdXNoTm9kZVRvRnJvbnRlbmQoaWdu
b3JlZCwgYm91bmROb2RlSWQoJm5vZGVUb1B1c2gtPmRvY3VtZW50KCkpLCBub2RlVG9QdXNoKTsK
IH0KIAotaW50IEluc3BlY3RvckRPTUFnZW50OjpwdXNoTm9kZVRvRnJvbnRlbmQoRXJyb3JTdHJp
bmcmIGVycm9yU3RyaW5nLCBpbnQgZG9jdW1lbnROb2RlSWQsIE5vZGUqIG5vZGVUb1B1c2gpCitQ
cm90b2NvbDo6RE9NOjpOb2RlSWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnB1c2hOb2RlVG9Gcm9udGVu
ZChQcm90b2NvbDo6RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBQcm90b2NvbDo6RE9NOjpOb2Rl
SWQgZG9jdW1lbnROb2RlSWQsIE5vZGUqIG5vZGVUb1B1c2gpCiB7CiAgICAgRG9jdW1lbnQqIGRv
Y3VtZW50ID0gYXNzZXJ0RG9jdW1lbnQoZXJyb3JTdHJpbmcsIGRvY3VtZW50Tm9kZUlkKTsKICAg
ICBpZiAoIWRvY3VtZW50KQpAQCAtNTY1LDcgKzU2NCw3IEBAIGludCBJbnNwZWN0b3JET01BZ2Vu
dDo6cHVzaE5vZGVUb0Zyb250ZW5kKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IGRvY3Vt
ZW50CiAgICAgcmV0dXJuIHB1c2hOb2RlUGF0aFRvRnJvbnRlbmQoZXJyb3JTdHJpbmcsIG5vZGVU
b1B1c2gpOwogfQogCi1Ob2RlKiBJbnNwZWN0b3JET01BZ2VudDo6bm9kZUZvcklkKGludCBpZCkK
K05vZGUqIEluc3BlY3RvckRPTUFnZW50Ojpub2RlRm9ySWQoUHJvdG9jb2w6OkRPTTo6Tm9kZUlk
IGlkKQogewogICAgIGlmICghbV9pZFRvTm9kZS5pc1ZhbGlkS2V5KGlkKSkKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CkBAIC01NzMsNyArNTcyLDcgQEAgTm9kZSogSW5zcGVjdG9yRE9NQWdlbnQ6
Om5vZGVGb3JJZChpbnQgaWQpCiAgICAgcmV0dXJuIG1faWRUb05vZGUuZ2V0KGlkKTsKIH0KIAot
dm9pZCBJbnNwZWN0b3JET01BZ2VudDo6cmVxdWVzdENoaWxkTm9kZXMoRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBpbnQgbm9kZUlkLCBjb25zdCBpbnQqIGRlcHRoKQorUHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yRE9NQWdlbnQ6OnJlcXVlc3RDaGlsZE5vZGVzKFByb3Rv
Y29sOjpET006Ok5vZGVJZCBub2RlSWQsIE9wdGlvbmFsPGludD4mJiBkZXB0aCkKIHsKICAgICBp
bnQgc2FuaXRpemVkRGVwdGg7CiAKQEAgLTU4Myw2NCArNTgyLDY0IEBAIHZvaWQgSW5zcGVjdG9y
RE9NQWdlbnQ6OnJlcXVlc3RDaGlsZE5vZGVzKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50
IG5vZGVJZCwKICAgICAgICAgc2FuaXRpemVkRGVwdGggPSBJTlRfTUFYOwogICAgIGVsc2UgaWYg
KCpkZXB0aCA+IDApCiAgICAgICAgIHNhbml0aXplZERlcHRoID0gKmRlcHRoOwotICAgIGVsc2Ug
ewotICAgICAgICBlcnJvclN0cmluZyA9ICJVbmV4cGVjdGVkIHZhbHVlIGJlbG93IC0xIGZvciBn
aXZlbiBkZXB0aCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBlbHNlCisgICAgICAg
IHJldHVybiBtYWtlVW5leHBlY3RlZCgiVW5leHBlY3RlZCB2YWx1ZSBiZWxvdyAtMSBmb3IgZ2l2
ZW4gZGVwdGgiX3MpOwogCiAgICAgcHVzaENoaWxkTm9kZXNUb0Zyb250ZW5kKG5vZGVJZCwgc2Fu
aXRpemVkRGVwdGgpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01B
Z2VudDo6cXVlcnlTZWxlY3RvcihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQs
IGNvbnN0IFN0cmluZyYgc2VsZWN0b3JzLCBpbnQqIGVsZW1lbnRJZCkKK1Byb3RvY29sOjpFcnJv
clN0cmluZ09yPFByb3RvY29sOjpET006Ok5vZGVJZD4gSW5zcGVjdG9yRE9NQWdlbnQ6OnF1ZXJ5
U2VsZWN0b3IoUHJvdG9jb2w6OkRPTTo6Tm9kZUlkIG5vZGVJZCwgY29uc3QgU3RyaW5nJiBzZWxl
Y3RvcikKIHsKLSAgICAqZWxlbWVudElkID0gMDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcg
ZXJyb3JTdHJpbmc7CisKICAgICBOb2RlKiBub2RlID0gYXNzZXJ0Tm9kZShlcnJvclN0cmluZywg
bm9kZUlkKTsKICAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIWlzPENv
bnRhaW5lck5vZGU+KCpub2RlKSkgewotICAgICAgICBhc3NlcnRFbGVtZW50KGVycm9yU3RyaW5n
LCBub2RlSWQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgICAgICByZXR1cm4gbWFrZVVu
ZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOworICAgIGlmICghaXM8Q29udGFpbmVyTm9kZT4oKm5vZGUp
KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk5vZGUgZm9yIGdpdmVuIG5vZGVJZCBp
cyBub3QgYSBjb250YWluZXIgbm9kZSJfcyk7CiAKLSAgICBhdXRvIHF1ZXJ5UmVzdWx0ID0gZG93
bmNhc3Q8Q29udGFpbmVyTm9kZT4oKm5vZGUpLnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3JzKTsKLSAg
ICBpZiAocXVlcnlSZXN1bHQuaGFzRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcg
PSAiRE9NIEVycm9yIHdoaWxlIHF1ZXJ5aW5nIHdpdGggZ2l2ZW4gc2VsZWN0b3JzIl9zOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQorICAgIGF1dG8gcXVlcnlSZXN1bHQgPSBkb3duY2FzdDxDb250
YWluZXJOb2RlPigqbm9kZSkucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7CisgICAgaWYgKHF1ZXJ5
UmVzdWx0Lmhhc0V4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoSW5z
cGVjdG9yRE9NQWdlbnQ6OnRvRXJyb3JTdHJpbmcocXVlcnlSZXN1bHQucmVsZWFzZUV4Y2VwdGlv
bigpKSk7CiAKLSAgICBpZiAoYXV0byogZWxlbWVudCA9IHF1ZXJ5UmVzdWx0LnJlbGVhc2VSZXR1
cm5WYWx1ZSgpKQotICAgICAgICAqZWxlbWVudElkID0gcHVzaE5vZGVQYXRoVG9Gcm9udGVuZChl
cnJvclN0cmluZywgZWxlbWVudCk7CisgICAgYXV0byByZXN1bHROb2RlSWQgPSBwdXNoTm9kZVBh
dGhUb0Zyb250ZW5kKGVycm9yU3RyaW5nLCBxdWVyeVJlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUo
KSk7CisgICAgaWYgKCFyZXN1bHROb2RlSWQpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3Rl
ZChlcnJvclN0cmluZyk7CisKKyAgICByZXR1cm4gcmVzdWx0Tm9kZUlkOwogfQogCi12b2lkIElu
c3BlY3RvckRPTUFnZW50OjpxdWVyeVNlbGVjdG9yQWxsKEVycm9yU3RyaW5nJiBlcnJvclN0cmlu
ZywgaW50IG5vZGVJZCwgY29uc3QgU3RyaW5nJiBzZWxlY3RvcnMsIFJlZlB0cjxKU09OOjpBcnJh
eU9mPGludD4+JiByZXN1bHQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SlNPTjo6QXJy
YXlPZjxQcm90b2NvbDo6RE9NOjpOb2RlSWQ+Pj4gSW5zcGVjdG9yRE9NQWdlbnQ6OnF1ZXJ5U2Vs
ZWN0b3JBbGwoUHJvdG9jb2w6OkRPTTo6Tm9kZUlkIG5vZGVJZCwgY29uc3QgU3RyaW5nJiBzZWxl
Y3RvcikKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBO
b2RlKiBub2RlID0gYXNzZXJ0Tm9kZShlcnJvclN0cmluZywgbm9kZUlkKTsKICAgICBpZiAoIW5v
ZGUpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIWlzPENvbnRhaW5lck5vZGU+KCpub2RlKSkg
ewotICAgICAgICBhc3NlcnRFbGVtZW50KGVycm9yU3RyaW5nLCBub2RlSWQpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcp
OworICAgIGlmICghaXM8Q29udGFpbmVyTm9kZT4oKm5vZGUpKQorICAgICAgICByZXR1cm4gbWFr
ZVVuZXhwZWN0ZWQoIk5vZGUgZm9yIGdpdmVuIG5vZGVJZCBpcyBub3QgYSBjb250YWluZXIgbm9k
ZSJfcyk7CiAKLSAgICBhdXRvIHF1ZXJ5UmVzdWx0ID0gZG93bmNhc3Q8Q29udGFpbmVyTm9kZT4o
Km5vZGUpLnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3JzKTsKLSAgICBpZiAocXVlcnlSZXN1bHQu
aGFzRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiRE9NIEVycm9yIHdoaWxl
IHF1ZXJ5aW5nIHdpdGggZ2l2ZW4gc2VsZWN0b3JzIl9zOwotICAgICAgICByZXR1cm47Ci0gICAg
fQorICAgIGF1dG8gcXVlcnlSZXN1bHQgPSBkb3duY2FzdDxDb250YWluZXJOb2RlPigqbm9kZSku
cXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7CisgICAgaWYgKHF1ZXJ5UmVzdWx0Lmhhc0V4Y2Vw
dGlvbigpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoSW5zcGVjdG9yRE9NQWdlbnQ6
OnRvRXJyb3JTdHJpbmcocXVlcnlSZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpKSk7CiAKICAgICBh
dXRvIG5vZGVzID0gcXVlcnlSZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCk7Ci0gICAgcmVzdWx0
ID0gSlNPTjo6QXJyYXlPZjxpbnQ+OjpjcmVhdGUoKTsKKworICAgIGF1dG8gbm9kZUlkcyA9IEpT
T046OkFycmF5T2Y8UHJvdG9jb2w6OkRPTTo6Tm9kZUlkPjo6Y3JlYXRlKCk7CiAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG5vZGVzLT5sZW5ndGgoKTsgKytpKQotICAgICAgICByZXN1bHQt
PmFkZEl0ZW0ocHVzaE5vZGVQYXRoVG9Gcm9udGVuZChub2Rlcy0+aXRlbShpKSkpOworICAgICAg
ICBub2RlSWRzLT5hZGRJdGVtKHB1c2hOb2RlUGF0aFRvRnJvbnRlbmQobm9kZXMtPml0ZW0oaSkp
KTsKKyAgICByZXR1cm4gV1RGTW92ZShub2RlSWRzKTsKIH0KIAotaW50IEluc3BlY3RvckRPTUFn
ZW50OjpwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKE5vZGUqIG5vZGVUb1B1c2gpCitQcm90b2NvbDo6
RE9NOjpOb2RlSWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnB1c2hOb2RlUGF0aFRvRnJvbnRlbmQoTm9k
ZSogbm9kZVRvUHVzaCkKIHsKLSAgICBFcnJvclN0cmluZyBpZ25vcmVkOworICAgIFByb3RvY29s
OjpFcnJvclN0cmluZyBpZ25vcmVkOwogICAgIHJldHVybiBwdXNoTm9kZVBhdGhUb0Zyb250ZW5k
KGlnbm9yZWQsIG5vZGVUb1B1c2gpOwogfQogCi1pbnQgSW5zcGVjdG9yRE9NQWdlbnQ6OnB1c2hO
b2RlUGF0aFRvRnJvbnRlbmQoRXJyb3JTdHJpbmcgZXJyb3JTdHJpbmcsIE5vZGUqIG5vZGVUb1B1
c2gpCitQcm90b2NvbDo6RE9NOjpOb2RlSWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnB1c2hOb2RlUGF0
aFRvRnJvbnRlbmQoUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nLCBOb2RlKiBub2Rl
VG9QdXNoKQogewogICAgIEFTU0VSVChub2RlVG9QdXNoKTsgIC8vIEludmFsaWQgaW5wdXQKIApA
QCAtNjU2LDggKzY1NSw3IEBAIGludCBJbnNwZWN0b3JET01BZ2VudDo6cHVzaE5vZGVQYXRoVG9G
cm9udGVuZChFcnJvclN0cmluZyBlcnJvclN0cmluZywgTm9kZSogbm9kCiAgICAgfQogCiAgICAg
Ly8gUmV0dXJuIGlkIGluIGNhc2UgdGhlIG5vZGUgaXMga25vd24uCi0gICAgaW50IHJlc3VsdCA9
IG1fZG9jdW1lbnROb2RlVG9JZE1hcC5nZXQobm9kZVRvUHVzaCk7Ci0gICAgaWYgKHJlc3VsdCkK
KyAgICBpZiAoYXV0byByZXN1bHQgPSBtX2RvY3VtZW50Tm9kZVRvSWRNYXAuZ2V0KG5vZGVUb1B1
c2gpKQogICAgICAgICByZXR1cm4gcmVzdWx0OwogCiAgICAgTm9kZSogbm9kZSA9IG5vZGVUb1B1
c2g7CkBAIC02NzEsNyArNjY5LDcgQEAgaW50IEluc3BlY3RvckRPTUFnZW50OjpwdXNoTm9kZVBh
dGhUb0Zyb250ZW5kKEVycm9yU3RyaW5nIGVycm9yU3RyaW5nLCBOb2RlKiBub2QKICAgICAgICAg
ICAgIGF1dG8gbmV3TWFwID0gbWFrZVVuaXF1ZTxOb2RlVG9JZE1hcD4oKTsKICAgICAgICAgICAg
IGRhbmdsaW5nTWFwID0gbmV3TWFwLmdldCgpOwogICAgICAgICAgICAgbV9kYW5nbGluZ05vZGVU
b0lkTWFwcy5hcHBlbmQobmV3TWFwLnJlbGVhc2UoKSk7Ci0gICAgICAgICAgICBhdXRvIGNoaWxk
cmVuID0gSlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+OjpjcmVh
dGUoKTsKKyAgICAgICAgICAgIGF1dG8gY2hpbGRyZW4gPSBKU09OOjpBcnJheU9mPFByb3RvY29s
OjpET006Ok5vZGU+OjpjcmVhdGUoKTsKICAgICAgICAgICAgIGNoaWxkcmVuLT5hZGRJdGVtKGJ1
aWxkT2JqZWN0Rm9yTm9kZShub2RlLCAwLCBkYW5nbGluZ01hcCkpOwogICAgICAgICAgICAgbV9m
cm9udGVuZERpc3BhdGNoZXItPnNldENoaWxkTm9kZXMoMCwgV1RGTW92ZShjaGlsZHJlbikpOwog
ICAgICAgICAgICAgYnJlYWs7CkBAIC02ODYsMjIxICs2ODQsMjUyIEBAIGludCBJbnNwZWN0b3JE
T01BZ2VudDo6cHVzaE5vZGVQYXRoVG9Gcm9udGVuZChFcnJvclN0cmluZyBlcnJvclN0cmluZywg
Tm9kZSogbm9kCiAKICAgICBOb2RlVG9JZE1hcCogbWFwID0gZGFuZ2xpbmdNYXAgPyBkYW5nbGlu
Z01hcCA6ICZtX2RvY3VtZW50Tm9kZVRvSWRNYXA7CiAgICAgZm9yIChpbnQgaSA9IHBhdGguc2l6
ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKLSAgICAgICAgaW50IG5vZGVJZCA9IG1hcC0+Z2V0KHBh
dGguYXQoaSkpOworICAgICAgICBhdXRvIG5vZGVJZCA9IG1hcC0+Z2V0KHBhdGguYXQoaSkpOwog
ICAgICAgICBBU1NFUlQobm9kZUlkKTsKICAgICAgICAgcHVzaENoaWxkTm9kZXNUb0Zyb250ZW5k
KG5vZGVJZCk7CiAgICAgfQogICAgIHJldHVybiBtYXAtPmdldChub2RlVG9QdXNoKTsKIH0KIAot
aW50IEluc3BlY3RvckRPTUFnZW50Ojpib3VuZE5vZGVJZChjb25zdCBOb2RlKiBub2RlKQorUHJv
dG9jb2w6OkRPTTo6Tm9kZUlkIEluc3BlY3RvckRPTUFnZW50Ojpib3VuZE5vZGVJZChjb25zdCBO
b2RlKiBub2RlKQogewogICAgIHJldHVybiBtX2RvY3VtZW50Tm9kZVRvSWRNYXAuZ2V0KGNvbnN0
X2Nhc3Q8Tm9kZSo+KG5vZGUpKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c2V0QXR0
cmlidXRlVmFsdWUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgZWxlbWVudElkLCBjb25z
dCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCitQcm90b2NvbDo6RXJyb3JTdHJp
bmdPcjx2b2lkPiBJbnNwZWN0b3JET01BZ2VudDo6c2V0QXR0cmlidXRlVmFsdWUoUHJvdG9jb2w6
OkRPTTo6Tm9kZUlkIG5vZGVJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZh
bHVlKQogewotICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBhc3NlcnRFZGl0YWJsZUVsZW1lbnQoZXJy
b3JTdHJpbmcsIGVsZW1lbnRJZCk7Ci0gICAgaWYgKCFlbGVtZW50KQotICAgICAgICByZXR1cm47
CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOwogCi0gICAgbV9kb21FZGl0
b3ItPnNldEF0dHJpYnV0ZSgqZWxlbWVudCwgbmFtZSwgdmFsdWUsIGVycm9yU3RyaW5nKTsKKyAg
ICBFbGVtZW50KiBlbGVtZW50ID0gYXNzZXJ0RWRpdGFibGVFbGVtZW50KGVycm9yU3RyaW5nLCBu
b2RlSWQpOworICAgIGlmICghZWxlbWVudCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVk
KGVycm9yU3RyaW5nKTsKKworICAgIGlmICghbV9kb21FZGl0b3ItPnNldEF0dHJpYnV0ZSgqZWxl
bWVudCwgbmFtZSwgdmFsdWUsIGVycm9yU3RyaW5nKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4
cGVjdGVkKGVycm9yU3RyaW5nKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVj
dG9yRE9NQWdlbnQ6OnNldEF0dHJpYnV0ZXNBc1RleHQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5n
LCBpbnQgZWxlbWVudElkLCBjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFN0cmluZyogbmFtZSkK
K1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRPTUFnZW50OjpzZXRBdHRy
aWJ1dGVzQXNUZXh0KFByb3RvY29sOjpET006Ok5vZGVJZCBub2RlSWQsIGNvbnN0IFN0cmluZyYg
dGV4dCwgY29uc3QgU3RyaW5nJiBuYW1lKQogewotICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBhc3Nl
cnRFZGl0YWJsZUVsZW1lbnQoZXJyb3JTdHJpbmcsIGVsZW1lbnRJZCk7CisgICAgUHJvdG9jb2w6
OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCisgICAgRWxlbWVudCogZWxlbWVudCA9IGFzc2Vy
dEVkaXRhYmxlRWxlbWVudChlcnJvclN0cmluZywgbm9kZUlkKTsKICAgICBpZiAoIWVsZW1lbnQp
Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3Ry
aW5nKTsKIAogICAgIGF1dG8gcGFyc2VkRWxlbWVudCA9IGNyZWF0ZUhUTUxFbGVtZW50KGVsZW1l
bnQtPmRvY3VtZW50KCksIHNwYW5UYWcpOwogICAgIGF1dG8gcmVzdWx0ID0gcGFyc2VkRWxlbWVu
dC5nZXQoKS5zZXRJbm5lckhUTUwoIjxzcGFuICIgKyB0ZXh0ICsgIj48L3NwYW4+Iik7Ci0gICAg
aWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkgewotICAgICAgICBlcnJvclN0cmluZyA9IHRvRXJy
b3JTdHJpbmcocmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKSk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9CisgICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKEluc3BlY3RvckRPTUFnZW50Ojp0b0Vycm9yU3RyaW5nKHJlc3VsdC5yZWxlYXNl
RXhjZXB0aW9uKCkpKTsKIAogICAgIE5vZGUqIGNoaWxkID0gcGFyc2VkRWxlbWVudC0+Zmlyc3RD
aGlsZCgpOwotICAgIGlmICghY2hpbGQpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiQ291bGQg
bm90IHBhcnNlIGdpdmVuIHRleHQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYg
KCFjaGlsZCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJDb3VsZCBub3QgcGFyc2Ug
Z2l2ZW4gdGV4dCJfcyk7CiAKICAgICBFbGVtZW50KiBjaGlsZEVsZW1lbnQgPSBkb3duY2FzdDxF
bGVtZW50PihjaGlsZCk7Ci0gICAgaWYgKCFjaGlsZEVsZW1lbnQtPmhhc0F0dHJpYnV0ZXMoKSAm
JiBuYW1lKSB7Ci0gICAgICAgIG1fZG9tRWRpdG9yLT5yZW1vdmVBdHRyaWJ1dGUoKmVsZW1lbnQs
ICpuYW1lLCBlcnJvclN0cmluZyk7Ci0gICAgICAgIHJldHVybjsKKyAgICBpZiAoIWNoaWxkRWxl
bWVudC0+aGFzQXR0cmlidXRlcygpICYmICEhbmFtZSkgeworICAgICAgICBpZiAoIW1fZG9tRWRp
dG9yLT5yZW1vdmVBdHRyaWJ1dGUoKmVsZW1lbnQsIG5hbWUsIGVycm9yU3RyaW5nKSkKKyAgICAg
ICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CisgICAgICAgIHJldHVy
biB7IH07CiAgICAgfQogCiAgICAgYm9vbCBmb3VuZE9yaWdpbmFsQXR0cmlidXRlID0gZmFsc2U7
CiAgICAgZm9yIChjb25zdCBBdHRyaWJ1dGUmIGF0dHJpYnV0ZSA6IGNoaWxkRWxlbWVudC0+YXR0
cmlidXRlc0l0ZXJhdG9yKCkpIHsKICAgICAgICAgLy8gQWRkIGF0dHJpYnV0ZSBwYWlyCi0gICAg
ICAgIGZvdW5kT3JpZ2luYWxBdHRyaWJ1dGUgPSBmb3VuZE9yaWdpbmFsQXR0cmlidXRlIHx8IChu
YW1lICYmIGF0dHJpYnV0ZS5uYW1lKCkudG9TdHJpbmcoKSA9PSAqbmFtZSk7CisgICAgICAgIGZv
dW5kT3JpZ2luYWxBdHRyaWJ1dGUgPSBmb3VuZE9yaWdpbmFsQXR0cmlidXRlIHx8IGF0dHJpYnV0
ZS5uYW1lKCkudG9TdHJpbmcoKSA9PSBuYW1lOwogICAgICAgICBpZiAoIW1fZG9tRWRpdG9yLT5z
ZXRBdHRyaWJ1dGUoKmVsZW1lbnQsIGF0dHJpYnV0ZS5uYW1lKCkudG9TdHJpbmcoKSwgYXR0cmli
dXRlLnZhbHVlKCksIGVycm9yU3RyaW5nKSkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAgICAgfQogCi0gICAgaWYg
KCFmb3VuZE9yaWdpbmFsQXR0cmlidXRlICYmIG5hbWUgJiYgIW5hbWUtPnN0cmlwV2hpdGVTcGFj
ZSgpLmlzRW1wdHkoKSkKLSAgICAgICAgbV9kb21FZGl0b3ItPnJlbW92ZUF0dHJpYnV0ZSgqZWxl
bWVudCwgKm5hbWUsIGVycm9yU3RyaW5nKTsKKyAgICBpZiAoIWZvdW5kT3JpZ2luYWxBdHRyaWJ1
dGUgJiYgIW5hbWUuc3RyaXBXaGl0ZVNwYWNlKCkuaXNFbXB0eSgpKSB7CisgICAgICAgIGlmICgh
bV9kb21FZGl0b3ItPnJlbW92ZUF0dHJpYnV0ZSgqZWxlbWVudCwgbmFtZSwgZXJyb3JTdHJpbmcp
KQorICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKKyAgICB9
CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpyZW1vdmVB
dHRyaWJ1dGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgZWxlbWVudElkLCBjb25zdCBT
dHJpbmcmIG5hbWUpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JET01B
Z2VudDo6cmVtb3ZlQXR0cmlidXRlKFByb3RvY29sOjpET006Ok5vZGVJZCBub2RlSWQsIGNvbnN0
IFN0cmluZyYgbmFtZSkKIHsKLSAgICBFbGVtZW50KiBlbGVtZW50ID0gYXNzZXJ0RWRpdGFibGVF
bGVtZW50KGVycm9yU3RyaW5nLCBlbGVtZW50SWQpOworICAgIFByb3RvY29sOjpFcnJvclN0cmlu
ZyBlcnJvclN0cmluZzsKKworICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBhc3NlcnRFZGl0YWJsZUVs
ZW1lbnQoZXJyb3JTdHJpbmcsIG5vZGVJZCk7CiAgICAgaWYgKCFlbGVtZW50KQotICAgICAgICBy
ZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKLSAg
ICBtX2RvbUVkaXRvci0+cmVtb3ZlQXR0cmlidXRlKCplbGVtZW50LCBuYW1lLCBlcnJvclN0cmlu
Zyk7CisgICAgaWYgKCFtX2RvbUVkaXRvci0+cmVtb3ZlQXR0cmlidXRlKCplbGVtZW50LCBuYW1l
LCBlcnJvclN0cmluZykpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmlu
Zyk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpyZW1v
dmVOb2RlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJZCkKK1Byb3RvY29sOjpF
cnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRPTUFnZW50OjpyZW1vdmVOb2RlKFByb3RvY29s
OjpET006Ok5vZGVJZCBub2RlSWQpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9y
U3RyaW5nOworCiAgICAgTm9kZSogbm9kZSA9IGFzc2VydEVkaXRhYmxlTm9kZShlcnJvclN0cmlu
Zywgbm9kZUlkKTsKICAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0
dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgIENvbnRhaW5lck5vZGUqIHBh
cmVudE5vZGUgPSBub2RlLT5wYXJlbnROb2RlKCk7Ci0gICAgaWYgKCFwYXJlbnROb2RlKSB7Ci0g
ICAgICAgIGVycm9yU3RyaW5nID0gIkNhbm5vdCByZW1vdmUgZGV0YWNoZWQgbm9kZSJfczsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoIXBhcmVudE5vZGUpCisgICAgICAgIHJldHVy
biBtYWtlVW5leHBlY3RlZCgiQ2Fubm90IHJlbW92ZSBkZXRhY2hlZCBub2RlIl9zKTsKIAotICAg
IG1fZG9tRWRpdG9yLT5yZW1vdmVDaGlsZCgqcGFyZW50Tm9kZSwgKm5vZGUsIGVycm9yU3RyaW5n
KTsKKyAgICBpZiAoIW1fZG9tRWRpdG9yLT5yZW1vdmVDaGlsZCgqcGFyZW50Tm9kZSwgKm5vZGUs
IGVycm9yU3RyaW5nKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5n
KTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNldE5v
ZGVOYW1lKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJZCwgY29uc3QgU3RyaW5n
JiB0YWdOYW1lLCBpbnQqIG5ld0lkKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UHJvdG9jb2w6
OkRPTTo6Tm9kZUlkPiBJbnNwZWN0b3JET01BZ2VudDo6c2V0Tm9kZU5hbWUoUHJvdG9jb2w6OkRP
TTo6Tm9kZUlkIG5vZGVJZCwgY29uc3QgU3RyaW5nJiB0YWdOYW1lKQogewotICAgICpuZXdJZCA9
IDA7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOwogCi0gICAgUmVmUHRy
PE5vZGU+IG9sZE5vZGUgPSBub2RlRm9ySWQobm9kZUlkKTsKLSAgICBpZiAoIWlzPEVsZW1lbnQ+
KG9sZE5vZGUpKQotICAgICAgICByZXR1cm47CisgICAgYXV0byBvbGROb2RlID0gYXNzZXJ0RWxl
bWVudChlcnJvclN0cmluZywgbm9kZUlkKTsKKyAgICBpZiAoIW9sZE5vZGUpCisgICAgICAgIHJl
dHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAgICBhdXRvIGNyZWF0ZUVsZW1l
bnRSZXN1bHQgPSBvbGROb2RlLT5kb2N1bWVudCgpLmNyZWF0ZUVsZW1lbnRGb3JCaW5kaW5ncyh0
YWdOYW1lKTsKICAgICBpZiAoY3JlYXRlRWxlbWVudFJlc3VsdC5oYXNFeGNlcHRpb24oKSkKLSAg
ICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoSW5zcGVjdG9yRE9N
QWdlbnQ6OnRvRXJyb3JTdHJpbmcoY3JlYXRlRWxlbWVudFJlc3VsdC5yZWxlYXNlRXhjZXB0aW9u
KCkpKTsKKwogICAgIGF1dG8gbmV3RWxlbWVudCA9IGNyZWF0ZUVsZW1lbnRSZXN1bHQucmVsZWFz
ZVJldHVyblZhbHVlKCk7CiAKICAgICAvLyBDb3B5IG92ZXIgdGhlIG9yaWdpbmFsIG5vZGUncyBh
dHRyaWJ1dGVzLgotICAgIG5ld0VsZW1lbnQtPmNsb25lQXR0cmlidXRlc0Zyb21FbGVtZW50KGRv
d25jYXN0PEVsZW1lbnQ+KCpvbGROb2RlKSk7CisgICAgbmV3RWxlbWVudC0+Y2xvbmVBdHRyaWJ1
dGVzRnJvbUVsZW1lbnQoKm9sZE5vZGUpOwogCiAgICAgLy8gQ29weSBvdmVyIHRoZSBvcmlnaW5h
bCBub2RlJ3MgY2hpbGRyZW4uCiAgICAgUmVmUHRyPE5vZGU+IGNoaWxkOwogICAgIHdoaWxlICgo
Y2hpbGQgPSBvbGROb2RlLT5maXJzdENoaWxkKCkpKSB7CiAgICAgICAgIGlmICghbV9kb21FZGl0
b3ItPmluc2VydEJlZm9yZShuZXdFbGVtZW50LCAqY2hpbGQsIDAsIGVycm9yU3RyaW5nKSkKLSAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJv
clN0cmluZyk7CiAgICAgfQogCiAgICAgLy8gUmVwbGFjZSB0aGUgb2xkIG5vZGUgd2l0aCB0aGUg
bmV3IG5vZGUKICAgICBSZWZQdHI8Q29udGFpbmVyTm9kZT4gcGFyZW50ID0gb2xkTm9kZS0+cGFy
ZW50Tm9kZSgpOwogICAgIGlmICghbV9kb21FZGl0b3ItPmluc2VydEJlZm9yZSgqcGFyZW50LCBu
ZXdFbGVtZW50LmNvcHlSZWYoKSwgb2xkTm9kZS0+bmV4dFNpYmxpbmcoKSwgZXJyb3JTdHJpbmcp
KQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0
cmluZyk7CiAgICAgaWYgKCFtX2RvbUVkaXRvci0+cmVtb3ZlQ2hpbGQoKnBhcmVudCwgKm9sZE5v
ZGUsIGVycm9yU3RyaW5nKSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVu
ZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCi0gICAgKm5ld0lkID0gcHVzaE5vZGVQYXRoVG9Gcm9u
dGVuZChlcnJvclN0cmluZywgbmV3RWxlbWVudC5wdHIoKSk7CisgICAgYXV0byByZXN1bHROb2Rl
SWQgPSBwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKGVycm9yU3RyaW5nLCBuZXdFbGVtZW50LnB0cigp
KTsKICAgICBpZiAobV9jaGlsZHJlblJlcXVlc3RlZC5jb250YWlucyhub2RlSWQpKQotICAgICAg
ICBwdXNoQ2hpbGROb2Rlc1RvRnJvbnRlbmQoKm5ld0lkKTsKKyAgICAgICAgcHVzaENoaWxkTm9k
ZXNUb0Zyb250ZW5kKHJlc3VsdE5vZGVJZCk7CisKKyAgICByZXR1cm4gcmVzdWx0Tm9kZUlkOwog
fQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpnZXRPdXRlckhUTUwoRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBpbnQgbm9kZUlkLCBXVEY6OlN0cmluZyogb3V0ZXJIVE1MKQorUHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8U3RyaW5nPiBJbnNwZWN0b3JET01BZ2VudDo6Z2V0T3V0ZXJIVE1MKFBy
b3RvY29sOjpET006Ok5vZGVJZCBub2RlSWQpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5n
IGVycm9yU3RyaW5nOworCiAgICAgTm9kZSogbm9kZSA9IGFzc2VydE5vZGUoZXJyb3JTdHJpbmcs
IG5vZGVJZCk7CiAgICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVy
biBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKLSAgICAqb3V0ZXJIVE1MID0gc2VyaWFs
aXplRnJhZ21lbnQoKm5vZGUsIFNlcmlhbGl6ZWROb2Rlczo6U3VidHJlZUluY2x1ZGluZ05vZGUp
OworICAgIHJldHVybiBzZXJpYWxpemVGcmFnbWVudCgqbm9kZSwgU2VyaWFsaXplZE5vZGVzOjpT
dWJ0cmVlSW5jbHVkaW5nTm9kZSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNldE91
dGVySFRNTChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQsIGNvbnN0IFN0cmlu
ZyYgb3V0ZXJIVE1MKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yRE9N
QWdlbnQ6OnNldE91dGVySFRNTChQcm90b2NvbDo6RE9NOjpOb2RlSWQgbm9kZUlkLCBjb25zdCBT
dHJpbmcmIG91dGVySFRNTCkKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJp
bmc7CisKICAgICBpZiAoIW5vZGVJZCkgewogICAgICAgICBET01QYXRjaFN1cHBvcnQgeyAqbV9k
b21FZGl0b3IsICptX2RvY3VtZW50IH0ucGF0Y2hEb2N1bWVudChvdXRlckhUTUwpOwotICAgICAg
ICByZXR1cm47CisgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCiAgICAgTm9kZSogbm9kZSA9
IGFzc2VydEVkaXRhYmxlTm9kZShlcnJvclN0cmluZywgbm9kZUlkKTsKICAgICBpZiAoIW5vZGUp
Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3Ry
aW5nKTsKIAogICAgIERvY3VtZW50JiBkb2N1bWVudCA9IG5vZGUtPmRvY3VtZW50KCk7Ci0gICAg
aWYgKCFkb2N1bWVudC5pc0hUTUxEb2N1bWVudCgpICYmICFkb2N1bWVudC5pc1hNTERvY3VtZW50
KCkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiRG9jdW1lbnQgb2Ygbm9kZSBmb3IgZ2l2ZW4g
bm9kZUlkIGlzIG5vdCBIVE1ML1hNTCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBp
ZiAoIWRvY3VtZW50LmlzSFRNTERvY3VtZW50KCkgJiYgIWRvY3VtZW50LmlzWE1MRG9jdW1lbnQo
KSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJEb2N1bWVudCBvZiBub2RlIGZvciBn
aXZlbiBub2RlSWQgaXMgbm90IEhUTUwvWE1MIl9zKTsKIAogICAgIE5vZGUqIG5ld05vZGUgPSBu
dWxscHRyOwogICAgIGlmICghbV9kb21FZGl0b3ItPnNldE91dGVySFRNTCgqbm9kZSwgb3V0ZXJI
VE1MLCBuZXdOb2RlLCBlcnJvclN0cmluZykpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0
dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgIGlmICghbmV3Tm9kZSkgewog
ICAgICAgICAvLyBUaGUgb25seSBjaGlsZCBub2RlIGhhcyBiZWVuIGRlbGV0ZWQuCi0gICAgICAg
IHJldHVybjsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKLSAgICBpbnQgbmV3SWQgPSBw
dXNoTm9kZVBhdGhUb0Zyb250ZW5kKGVycm9yU3RyaW5nLCBuZXdOb2RlKTsKKyAgICBhdXRvIG5l
d0lkID0gcHVzaE5vZGVQYXRoVG9Gcm9udGVuZChlcnJvclN0cmluZywgbmV3Tm9kZSk7CiAKICAg
ICBib29sIGNoaWxkcmVuUmVxdWVzdGVkID0gbV9jaGlsZHJlblJlcXVlc3RlZC5jb250YWlucyhu
b2RlSWQpOwogICAgIGlmIChjaGlsZHJlblJlcXVlc3RlZCkKICAgICAgICAgcHVzaENoaWxkTm9k
ZXNUb0Zyb250ZW5kKG5ld0lkKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVj
dG9yRE9NQWdlbnQ6Omluc2VydEFkamFjZW50SFRNTChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcs
IGludCBub2RlSWQsIGNvbnN0IFN0cmluZyYgcG9zaXRpb24sIGNvbnN0IFN0cmluZyYgaHRtbCkK
K1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRPTUFnZW50OjppbnNlcnRB
ZGphY2VudEhUTUwoUHJvdG9jb2w6OkRPTTo6Tm9kZUlkIG5vZGVJZCwgY29uc3QgU3RyaW5nJiBw
b3NpdGlvbiwgY29uc3QgU3RyaW5nJiBodG1sKQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmlu
ZyBlcnJvclN0cmluZzsKKwogICAgIE5vZGUqIG5vZGUgPSBhc3NlcnRFZGl0YWJsZU5vZGUoZXJy
b3JTdHJpbmcsIG5vZGVJZCk7CiAgICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm47CisgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKLSAgICBpZiAoIWlzPEVs
ZW1lbnQ+KG5vZGUpKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIk5vZGUgZm9yIGdpdmVuIG5v
ZGVJZCBpcyBub3QgYW4gZWxlbWVudCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBp
ZiAoIWlzPEVsZW1lbnQ+KG5vZGUpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk5v
ZGUgZm9yIGdpdmVuIG5vZGVJZCBpcyBub3QgYW4gZWxlbWVudCJfcyk7CiAKLSAgICBtX2RvbUVk
aXRvci0+aW5zZXJ0QWRqYWNlbnRIVE1MKGRvd25jYXN0PEVsZW1lbnQ+KCpub2RlKSwgcG9zaXRp
b24sIGh0bWwsIGVycm9yU3RyaW5nKTsKKyAgICBpZiAoIW1fZG9tRWRpdG9yLT5pbnNlcnRBZGph
Y2VudEhUTUwoZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUpLCBwb3NpdGlvbiwgaHRtbCwgZXJyb3JT
dHJpbmcpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOworCisg
ICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c2V0Tm9kZVZhbHVl
KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJZCwgY29uc3QgU3RyaW5nJiB2YWx1
ZSkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRPTUFnZW50OjpzZXRO
b2RlVmFsdWUoUHJvdG9jb2w6OkRPTTo6Tm9kZUlkIG5vZGVJZCwgY29uc3QgU3RyaW5nJiB2YWx1
ZSkKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBOb2Rl
KiBub2RlID0gYXNzZXJ0RWRpdGFibGVOb2RlKGVycm9yU3RyaW5nLCBub2RlSWQpOwogICAgIGlm
ICghbm9kZSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQo
ZXJyb3JTdHJpbmcpOwogCi0gICAgaWYgKCFpczxUZXh0Pigqbm9kZSkpIHsKLSAgICAgICAgZXJy
b3JTdHJpbmcgPSAiTm9kZSBmb3IgZ2l2ZW4gbm9kZUlkIGlzIG5vdCB0ZXh0Il9zOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQorICAgIGlmICghaXM8VGV4dD4oKm5vZGUpKQorICAgICAgICByZXR1
cm4gbWFrZVVuZXhwZWN0ZWQoIk5vZGUgZm9yIGdpdmVuIG5vZGVJZCBpcyBub3QgdGV4dCJfcyk7
CiAKLSAgICBtX2RvbUVkaXRvci0+cmVwbGFjZVdob2xlVGV4dChkb3duY2FzdDxUZXh0Pigqbm9k
ZSksIHZhbHVlLCBlcnJvclN0cmluZyk7CisgICAgaWYgKCFtX2RvbUVkaXRvci0+cmVwbGFjZVdo
b2xlVGV4dChkb3duY2FzdDxUZXh0Pigqbm9kZSksIHZhbHVlLCBlcnJvclN0cmluZykpCisgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CisKKyAgICByZXR1cm4geyB9
OwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpnZXRTdXBwb3J0ZWRFdmVudE5hbWVzKEVy
cm9yU3RyaW5nJiwgUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4mIGV2ZW50TmFtZXMpCitQ
cm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SlNPTjo6QXJyYXlPZjxTdHJpbmc+Pj4gSW5zcGVj
dG9yRE9NQWdlbnQ6OmdldFN1cHBvcnRlZEV2ZW50TmFtZXMoKQogewotICAgIGV2ZW50TmFtZXMg
PSBKU09OOjpBcnJheU9mPFN0cmluZz46OmNyZWF0ZSgpOworICAgIGF1dG8gZXZlbnROYW1lcyA9
IEpTT046OkFycmF5T2Y8U3RyaW5nPjo6Y3JlYXRlKCk7CiAKICNkZWZpbmUgRE9NX0VWRU5UX05B
TUVTX0FERChuYW1lKSBldmVudE5hbWVzLT5hZGRJdGVtKCNuYW1lKTsKICAgICBET01fRVZFTlRf
TkFNRVNfRk9SX0VBQ0goRE9NX0VWRU5UX05BTUVTX0FERCkKICN1bmRlZiBET01fRVZFTlRfTkFN
RVNfQURECisKKyAgICByZXR1cm4gV1RGTW92ZShldmVudE5hbWVzKTsKIH0KIAogI2lmIEVOQUJM
RShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotdm9pZCBJbnNwZWN0b3JET01BZ2Vu
dDo6Z2V0RGF0YUJpbmRpbmdzRm9yTm9kZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCAv
KiBub2RlSWQgKi8sIFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRP
TTo6RGF0YUJpbmRpbmc+PiYgLyogZGF0YUJpbmRpbmdzICovKQorUHJvdG9jb2w6OkVycm9yU3Ry
aW5nT3I8UmVmPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkRPTTo6RGF0YUJpbmRpbmc+Pj4gSW5z
cGVjdG9yRE9NQWdlbnQ6OmdldERhdGFCaW5kaW5nc0Zvck5vZGUoUHJvdG9jb2w6OkRPTTo6Tm9k
ZUlkKQogewotICAgIGVycm9yU3RyaW5nID0gIk5vdCBzdXBwb3J0ZWQiX3M7CisgICAgcmV0dXJu
IG1ha2VVbmV4cGVjdGVkKCJOb3Qgc3VwcG9ydGVkIl9zKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JE
T01BZ2VudDo6Z2V0QXNzb2NpYXRlZERhdGFGb3JOb2RlKEVycm9yU3RyaW5nJiBlcnJvclN0cmlu
ZywgaW50IC8qIG5vZGVJZCAqLywgT3B0aW9uYWw8U3RyaW5nPiYgLyogYXNzb2NpYXRlZERhdGEg
Ki8pCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxTdHJpbmc+IEluc3BlY3RvckRPTUFnZW50Ojpn
ZXRBc3NvY2lhdGVkRGF0YUZvck5vZGUoUHJvdG9jb2w6OkRPTTo6Tm9kZUlkKQogewotICAgIGVy
cm9yU3RyaW5nID0gIk5vdCBzdXBwb3J0ZWQiX3M7CisgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVk
KCJOb3Qgc3VwcG9ydGVkIl9zKTsKIH0KICNlbmRpZgogCi12b2lkIEluc3BlY3RvckRPTUFnZW50
OjpnZXRFdmVudExpc3RlbmVyc0Zvck5vZGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQg
bm9kZUlkLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkV2
ZW50TGlzdGVuZXI+PiYgbGlzdGVuZXJzQXJyYXkpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxS
ZWY8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6RE9NOjpFdmVudExpc3RlbmVyPj4+IEluc3BlY3Rv
ckRPTUFnZW50OjpnZXRFdmVudExpc3RlbmVyc0Zvck5vZGUoUHJvdG9jb2w6OkRPTTo6Tm9kZUlk
IG5vZGVJZCkKIHsKLSAgICBsaXN0ZW5lcnNBcnJheSA9IEpTT046OkFycmF5T2Y8SW5zcGVjdG9y
OjpQcm90b2NvbDo6RE9NOjpFdmVudExpc3RlbmVyPjo6Y3JlYXRlKCk7CisgICAgUHJvdG9jb2w6
OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOwogCiAgICAgYXV0byogbm9kZSA9IGFzc2VydE5vZGUo
ZXJyb3JTdHJpbmcsIG5vZGVJZCk7CiAgICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm47Cisg
ICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAgICBWZWN0b3I8
UmVmUHRyPEV2ZW50VGFyZ2V0Pj4gYW5jZXN0b3JzOwogICAgIGFuY2VzdG9ycy5hcHBlbmQobm9k
ZSk7CkBAIC05MjksOCArOTU4LDEwIEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmdldEV2ZW50
TGlzdGVuZXJzRm9yTm9kZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBuCiAgICAgICAg
IH0KICAgICB9CiAKKyAgICBhdXRvIGxpc3RlbmVycyA9IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6
OkRPTTo6RXZlbnRMaXN0ZW5lcj46OmNyZWF0ZSgpOworCiAgICAgYXV0byBhZGRMaXN0ZW5lciA9
IFsmXSAoUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXImIGxpc3RlbmVyLCBjb25zdCBFdmVudExpc3Rl
bmVySW5mbyYgaW5mbykgewotICAgICAgICBpbnQgaWRlbnRpZmllciA9IDA7CisgICAgICAgIFBy
b3RvY29sOjpET006OkV2ZW50TGlzdGVuZXJJZCBpZGVudGlmaWVyID0gMDsKICAgICAgICAgYm9v
bCBkaXNhYmxlZCA9IGZhbHNlOwogICAgICAgICBSZWZQdHI8SlNDOjpCcmVha3BvaW50PiBicmVh
a3BvaW50OwogCkBAIC05NTMsNyArOTg0LDcgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Z2V0
RXZlbnRMaXN0ZW5lcnNGb3JOb2RlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG4KICAg
ICAgICAgICAgIG1fZXZlbnRMaXN0ZW5lckVudHJpZXMuYWRkKGlkZW50aWZpZXIsIGluc3BlY3Rv
ckV2ZW50TGlzdGVuZXIpOwogICAgICAgICB9CiAKLSAgICAgICAgbGlzdGVuZXJzQXJyYXktPmFk
ZEl0ZW0oYnVpbGRPYmplY3RGb3JFdmVudExpc3RlbmVyKGxpc3RlbmVyLCBpZGVudGlmaWVyLCAq
aW5mby5ldmVudFRhcmdldCwgaW5mby5ldmVudFR5cGUsIGRpc2FibGVkLCBicmVha3BvaW50KSk7
CisgICAgICAgIGxpc3RlbmVycy0+YWRkSXRlbShidWlsZE9iamVjdEZvckV2ZW50TGlzdGVuZXIo
bGlzdGVuZXIsIGlkZW50aWZpZXIsICppbmZvLmV2ZW50VGFyZ2V0LCBpbmZvLmV2ZW50VHlwZSwg
ZGlzYWJsZWQsIGJyZWFrcG9pbnQpKTsKICAgICB9OwogCiAgICAgLy8gR2V0IENhcHR1cmluZyBM
aXN0ZW5lcnMgKGluIHRoaXMgb3JkZXIpCkBAIC05NzYsODAgKzEwMDcsODEgQEAgdm9pZCBJbnNw
ZWN0b3JET01BZ2VudDo6Z2V0RXZlbnRMaXN0ZW5lcnNGb3JOb2RlKEVycm9yU3RyaW5nJiBlcnJv
clN0cmluZywgaW50IG4KIAogICAgIGlmIChtX2luc3BlY3RlZE5vZGUgPT0gbm9kZSkKICAgICAg
ICAgbV9zdXBwcmVzc0V2ZW50TGlzdGVuZXJDaGFuZ2VkRXZlbnQgPSBmYWxzZTsKKworICAgIHJl
dHVybiBXVEZNb3ZlKGxpc3RlbmVycyk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNl
dEV2ZW50TGlzdGVuZXJEaXNhYmxlZChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBldmVu
dExpc3RlbmVySWQsIGJvb2wgZGlzYWJsZWQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lk
PiBJbnNwZWN0b3JET01BZ2VudDo6c2V0RXZlbnRMaXN0ZW5lckRpc2FibGVkKFByb3RvY29sOjpE
T006OkV2ZW50TGlzdGVuZXJJZCBldmVudExpc3RlbmVySWQsIGJvb2wgZGlzYWJsZWQpCiB7CiAg
ICAgYXV0byBpdCA9IG1fZXZlbnRMaXN0ZW5lckVudHJpZXMuZmluZChldmVudExpc3RlbmVySWQp
OwotICAgIGlmIChpdCA9PSBtX2V2ZW50TGlzdGVuZXJFbnRyaWVzLmVuZCgpKSB7Ci0gICAgICAg
IGVycm9yU3RyaW5nID0gIk1pc3NpbmcgZXZlbnQgbGlzdGVuZXIgZm9yIGdpdmVuIGV2ZW50TGlz
dGVuZXJJZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoaXQgPT0gbV9ldmVu
dExpc3RlbmVyRW50cmllcy5lbmQoKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJN
aXNzaW5nIGV2ZW50IGxpc3RlbmVyIGZvciBnaXZlbiBldmVudExpc3RlbmVySWQiX3MpOwogCiAg
ICAgaXQtPnZhbHVlLmRpc2FibGVkID0gZGlzYWJsZWQ7CisKKyAgICByZXR1cm4geyB9OwogfQog
Ci12b2lkIEluc3BlY3RvckRPTUFnZW50OjpzZXRCcmVha3BvaW50Rm9yRXZlbnRMaXN0ZW5lcihF
cnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBldmVudExpc3RlbmVySWQsIGNvbnN0IEpTT046
Ok9iamVjdCogb3B0aW9uc1BheWxvYWQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJ
bnNwZWN0b3JET01BZ2VudDo6c2V0QnJlYWtwb2ludEZvckV2ZW50TGlzdGVuZXIoUHJvdG9jb2w6
OkRPTTo6RXZlbnRMaXN0ZW5lcklkIGV2ZW50TGlzdGVuZXJJZCwgUmVmUHRyPEpTT046Ok9iamVj
dD4mJiBvcHRpb25zKQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsK
KwogICAgIGF1dG8gaXQgPSBtX2V2ZW50TGlzdGVuZXJFbnRyaWVzLmZpbmQoZXZlbnRMaXN0ZW5l
cklkKTsKLSAgICBpZiAoaXQgPT0gbV9ldmVudExpc3RlbmVyRW50cmllcy5lbmQoKSkgewotICAg
ICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIGV2ZW50IGxpc3RlbmVyIGZvciBnaXZlbiBldmVu
dExpc3RlbmVySWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKGl0ID09IG1f
ZXZlbnRMaXN0ZW5lckVudHJpZXMuZW5kKCkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3Rl
ZCgiTWlzc2luZyBldmVudCBsaXN0ZW5lciBmb3IgZ2l2ZW4gZXZlbnRMaXN0ZW5lcklkIl9zKTsK
IAotICAgIGlmIChpdC0+dmFsdWUuYnJlYWtwb2ludCkgewotICAgICAgICBlcnJvclN0cmluZyA9
ICJCcmVha3BvaW50IGZvciBnaXZlbiBldmVudExpc3RlbmVySWQgYWxyZWFkeSBleGlzdHMiX3M7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKGl0LT52YWx1ZS5icmVha3BvaW50KQor
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkJyZWFrcG9pbnQgZm9yIGdpdmVuIGV2ZW50
TGlzdGVuZXJJZCBhbHJlYWR5IGV4aXN0cyJfcyk7CiAKLSAgICBpdC0+dmFsdWUuYnJlYWtwb2lu
dCA9IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRlYnVnZ2VyQnJlYWtwb2ludEZyb21QYXlsb2Fk
KGVycm9yU3RyaW5nLCBvcHRpb25zUGF5bG9hZCk7CisgICAgaXQtPnZhbHVlLmJyZWFrcG9pbnQg
PSBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkZWJ1Z2dlckJyZWFrcG9pbnRGcm9tUGF5bG9hZChl
cnJvclN0cmluZywgV1RGTW92ZShvcHRpb25zKSk7CisgICAgaWYgKCFpdC0+dmFsdWUuYnJlYWtw
b2ludCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKKworICAg
IHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnJlbW92ZUJyZWFrcG9p
bnRGb3JFdmVudExpc3RlbmVyKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IGV2ZW50TGlz
dGVuZXJJZCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRPTUFnZW50
OjpyZW1vdmVCcmVha3BvaW50Rm9yRXZlbnRMaXN0ZW5lcihQcm90b2NvbDo6RE9NOjpFdmVudExp
c3RlbmVySWQgZXZlbnRMaXN0ZW5lcklkKQogewogICAgIGF1dG8gaXQgPSBtX2V2ZW50TGlzdGVu
ZXJFbnRyaWVzLmZpbmQoZXZlbnRMaXN0ZW5lcklkKTsKLSAgICBpZiAoaXQgPT0gbV9ldmVudExp
c3RlbmVyRW50cmllcy5lbmQoKSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIGV2
ZW50IGxpc3RlbmVyIGZvciBnaXZlbiBldmVudExpc3RlbmVySWQiX3M7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9CisgICAgaWYgKGl0ID09IG1fZXZlbnRMaXN0ZW5lckVudHJpZXMuZW5kKCkpCisg
ICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTWlzc2luZyBldmVudCBsaXN0ZW5lciBmb3Ig
Z2l2ZW4gZXZlbnRMaXN0ZW5lcklkIl9zKTsKIAogICAgIGlmICghaXQtPnZhbHVlLmJyZWFrcG9p
bnQpCi0gICAgICAgIGVycm9yU3RyaW5nID0gIkJyZWFrcG9pbnQgZm9yIGdpdmVuIGV2ZW50TGlz
dGVuZXJJZCBtaXNzaW5nIl9zOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkJyZWFr
cG9pbnQgZm9yIGdpdmVuIGV2ZW50TGlzdGVuZXJJZCBtaXNzaW5nIl9zKTsKIAogICAgIGl0LT52
YWx1ZS5icmVha3BvaW50ID0gbnVsbHB0cjsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQg
SW5zcGVjdG9yRE9NQWdlbnQ6OmdldEFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzRm9yTm9kZShFcnJv
clN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzPiYgYXhQcm9wZXJ0aWVzKQorUHJvdG9j
b2w6OkVycm9yU3RyaW5nT3I8UmVmPFByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0
aWVzPj4gSW5zcGVjdG9yRE9NQWdlbnQ6OmdldEFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzRm9yTm9k
ZShQcm90b2NvbDo6RE9NOjpOb2RlSWQgbm9kZUlkKQogeworICAgIFByb3RvY29sOjpFcnJvclN0
cmluZyBlcnJvclN0cmluZzsKKwogICAgIE5vZGUqIG5vZGUgPSBhc3NlcnROb2RlKGVycm9yU3Ry
aW5nLCBub2RlSWQpOwogICAgIGlmICghbm9kZSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICBy
ZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCi0gICAgYXhQcm9wZXJ0aWVzID0g
YnVpbGRPYmplY3RGb3JBY2Nlc3NpYmlsaXR5UHJvcGVydGllcyhub2RlKTsKKyAgICByZXR1cm4g
YnVpbGRPYmplY3RGb3JBY2Nlc3NpYmlsaXR5UHJvcGVydGllcygqbm9kZSk7CiB9CiAKLXZvaWQg
SW5zcGVjdG9yRE9NQWdlbnQ6OnBlcmZvcm1TZWFyY2goRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5n
LCBjb25zdCBTdHJpbmcmIHF1ZXJ5LCBjb25zdCBKU09OOjpBcnJheSogbm9kZUlkcywgY29uc3Qg
Ym9vbCogY2FzZVNlbnNpdGl2ZSwgU3RyaW5nKiBzZWFyY2hJZCwgaW50KiByZXN1bHRDb3VudCkK
K1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHN0ZDo6dHVwbGU8U3RyaW5nIC8qIHNlYXJjaElkICov
LCBpbnQgLyogcmVzdWx0Q291bnQgKi8+PiBJbnNwZWN0b3JET01BZ2VudDo6cGVyZm9ybVNlYXJj
aChjb25zdCBTdHJpbmcmIHF1ZXJ5LCBSZWZQdHI8SlNPTjo6QXJyYXk+JiYgbm9kZUlkcywgT3B0
aW9uYWw8Ym9vbD4mJiBjYXNlU2Vuc2l0aXZlKQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmlu
ZyBlcnJvclN0cmluZzsKKwogICAgIC8vIEZJWE1FOiBTZWFyY2ggd29ya3Mgd2l0aCBub2RlIGdy
YW51bGFyaXR5IC0gbnVtYmVyIG9mIG1hdGNoZXMgd2l0aGluIG5vZGUgaXMgbm90IGNhbGN1bGF0
ZWQuCiAgICAgSW5zcGVjdG9yTm9kZUZpbmRlciBmaW5kZXIocXVlcnksIGNhc2VTZW5zaXRpdmUg
JiYgKmNhc2VTZW5zaXRpdmUpOwogCiAgICAgaWYgKG5vZGVJZHMpIHsKICAgICAgICAgZm9yIChh
dXRvJiBub2RlVmFsdWUgOiAqbm9kZUlkcykgewotICAgICAgICAgICAgaWYgKCFub2RlVmFsdWUp
IHsKLSAgICAgICAgICAgICAgICBlcnJvclN0cmluZyA9ICJVbmV4cGVjdGVkIG5vbi1pbnRlZ2Vy
IGl0ZW0gaW4gZ2l2ZW4gbm9kZUlkcyJfczsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBpbnQgbm9kZUlkID0gMDsKLSAgICAgICAgICAgIGlmICgh
bm9kZVZhbHVlLT5hc0ludGVnZXIobm9kZUlkKSkgewotICAgICAgICAgICAgICAgIGVycm9yU3Ry
aW5nID0gIlVuZXhwZWN0ZWQgbm9uLWludGVnZXIgaXRlbSBpbiBnaXZlbiBub2RlSWRzIl9zOwot
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIE5vZGUq
IG5vZGUgPSBhc3NlcnROb2RlKGVycm9yU3RyaW5nLCBub2RlSWQpOwotICAgICAgICAgICAgaWYg
KCFub2RlKSB7Ci0gICAgICAgICAgICAgICAgLy8gYXNzZXJ0Tm9kZSBzaG91bGQgaGF2ZSBmaWxs
ZWQgdGhlIGVycm9yU3RyaW5nIGZvciB1cy4KLSAgICAgICAgICAgICAgICBBU1NFUlQoZXJyb3JT
dHJpbmcubGVuZ3RoKCkpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGF1dG8gbm9kZUlkID0gbm9kZVZhbHVlLT5hc0ludGVnZXIoKTsKKyAgICAg
ICAgICAgIGlmICghbm9kZUlkKQorICAgICAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3Rl
ZCgiVW5leHBlY3RlZCBub24taW50ZWdlciBpdGVtIGluIGdpdmVuIG5vZGVJZHMiX3MpOworCisg
ICAgICAgICAgICBOb2RlKiBub2RlID0gYXNzZXJ0Tm9kZShlcnJvclN0cmluZywgKm5vZGVJZCk7
CisgICAgICAgICAgICBpZiAoIW5vZGUpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4
cGVjdGVkKGVycm9yU3RyaW5nKTsKKwogICAgICAgICAgICAgZmluZGVyLnBlcmZvcm1TZWFyY2go
bm9kZSk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewpAQCAtMTA1OCwzNyArMTA5MCwzNiBAQCB2
b2lkIEluc3BlY3RvckRPTUFnZW50OjpwZXJmb3JtU2VhcmNoKEVycm9yU3RyaW5nJiBlcnJvclN0
cmluZywgY29uc3QgU3RyaW5nJiBxdQogICAgICAgICBmaW5kZXIucGVyZm9ybVNlYXJjaChtX2Rv
Y3VtZW50LmdldCgpKTsKICAgICB9CiAKLSAgICAqc2VhcmNoSWQgPSBJZGVudGlmaWVyc0ZhY3Rv
cnk6OmNyZWF0ZUlkZW50aWZpZXIoKTsKKyAgICBhdXRvIHNlYXJjaElkID0gSWRlbnRpZmllcnNG
YWN0b3J5OjpjcmVhdGVJZGVudGlmaWVyKCk7CiAKLSAgICBhdXRvJiByZXN1bHRzVmVjdG9yID0g
bV9zZWFyY2hSZXN1bHRzLmFkZCgqc2VhcmNoSWQsIFZlY3RvcjxSZWZQdHI8Tm9kZT4+KCkpLml0
ZXJhdG9yLT52YWx1ZTsKKyAgICBhdXRvJiByZXN1bHRzVmVjdG9yID0gbV9zZWFyY2hSZXN1bHRz
LmFkZChzZWFyY2hJZCwgVmVjdG9yPFJlZlB0cjxOb2RlPj4oKSkuaXRlcmF0b3ItPnZhbHVlOwog
ICAgIGZvciAoYXV0byYgcmVzdWx0IDogZmluZGVyLnJlc3VsdHMoKSkKICAgICAgICAgcmVzdWx0
c1ZlY3Rvci5hcHBlbmQocmVzdWx0KTsKIAotICAgICpyZXN1bHRDb3VudCA9IHJlc3VsdHNWZWN0
b3Iuc2l6ZSgpOworICAgIHJldHVybiB7IHsgc2VhcmNoSWQsIHJlc3VsdHNWZWN0b3Iuc2l6ZSgp
IH0gfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Z2V0U2VhcmNoUmVzdWx0cyhFcnJv
clN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgc2VhcmNoSWQsIGludCBmcm9tSW5k
ZXgsIGludCB0b0luZGV4LCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxpbnQ+PiYgbm9kZUlkcykKK1By
b3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpET006Ok5v
ZGVJZD4+PiBJbnNwZWN0b3JET01BZ2VudDo6Z2V0U2VhcmNoUmVzdWx0cyhjb25zdCBTdHJpbmcm
IHNlYXJjaElkLCBpbnQgZnJvbUluZGV4LCBpbnQgdG9JbmRleCkKIHsKICAgICBTZWFyY2hSZXN1
bHRzOjppdGVyYXRvciBpdCA9IG1fc2VhcmNoUmVzdWx0cy5maW5kKHNlYXJjaElkKTsKLSAgICBp
ZiAoaXQgPT0gbV9zZWFyY2hSZXN1bHRzLmVuZCgpKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0g
Ik1pc3Npbmcgc2VhcmNoIHJlc3VsdCBmb3IgZ2l2ZW4gc2VhcmNoSWQiX3M7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9CisgICAgaWYgKGl0ID09IG1fc2VhcmNoUmVzdWx0cy5lbmQoKSkKKyAgICAg
ICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJNaXNzaW5nIHNlYXJjaCByZXN1bHQgZm9yIGdpdmVu
IHNlYXJjaElkIl9zKTsKIAogICAgIGludCBzaXplID0gaXQtPnZhbHVlLnNpemUoKTsKLSAgICBp
ZiAoZnJvbUluZGV4IDwgMCB8fCB0b0luZGV4ID4gc2l6ZSB8fCBmcm9tSW5kZXggPj0gdG9JbmRl
eCkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJJbnZhbGlkIHNlYXJjaCByZXN1bHQgcmFuZ2Ug
Zm9yIGdpdmVuIGZyb21JbmRleCBhbmQgdG9JbmRleCJfczsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KKyAgICBpZiAoZnJvbUluZGV4IDwgMCB8fCB0b0luZGV4ID4gc2l6ZSB8fCBmcm9tSW5kZXgg
Pj0gdG9JbmRleCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJJbnZhbGlkIHNlYXJj
aCByZXN1bHQgcmFuZ2UgZm9yIGdpdmVuIGZyb21JbmRleCBhbmQgdG9JbmRleCJfcyk7CiAKLSAg
ICBub2RlSWRzID0gSlNPTjo6QXJyYXlPZjxpbnQ+OjpjcmVhdGUoKTsKKyAgICBhdXRvIG5vZGVJ
ZHMgPSBKU09OOjpBcnJheU9mPFByb3RvY29sOjpET006Ok5vZGVJZD46OmNyZWF0ZSgpOwogICAg
IGZvciAoaW50IGkgPSBmcm9tSW5kZXg7IGkgPCB0b0luZGV4OyArK2kpCiAgICAgICAgIG5vZGVJ
ZHMtPmFkZEl0ZW0ocHVzaE5vZGVQYXRoVG9Gcm9udGVuZCgoaXQtPnZhbHVlKVtpXS5nZXQoKSkp
OworICAgIHJldHVybiBXVEZNb3ZlKG5vZGVJZHMpOwogfQogCi12b2lkIEluc3BlY3RvckRPTUFn
ZW50OjpkaXNjYXJkU2VhcmNoUmVzdWx0cyhFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgc2Vh
cmNoSWQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JET01BZ2VudDo6
ZGlzY2FyZFNlYXJjaFJlc3VsdHMoY29uc3QgU3RyaW5nJiBzZWFyY2hJZCkKIHsKICAgICBtX3Nl
YXJjaFJlc3VsdHMucmVtb3ZlKHNlYXJjaElkKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKIGJv
b2wgSW5zcGVjdG9yRE9NQWdlbnQ6OmhhbmRsZU1vdXNlUHJlc3MoKQpAQCAtMTExNyw3ICsxMTQ4
LDcgQEAgYm9vbCBJbnNwZWN0b3JET01BZ2VudDo6aGFuZGxlVG91Y2hFdmVudChOb2RlJiBub2Rl
KQogCiB2b2lkIEluc3BlY3RvckRPTUFnZW50OjppbnNwZWN0KE5vZGUqIGluc3BlY3RlZE5vZGUp
CiB7Ci0gICAgRXJyb3JTdHJpbmcgaWdub3JlZDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcg
aWdub3JlZDsKICAgICBSZWZQdHI8Tm9kZT4gbm9kZSA9IGluc3BlY3RlZE5vZGU7CiAgICAgc2V0
U2VhcmNoaW5nRm9yTm9kZShpZ25vcmVkLCBmYWxzZSwgbnVsbHB0ciwgZmFsc2UpOwogCkBAIC0x
MTczLDcgKzEyMDQsNyBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpoaWdobGlnaHRNb3VzZWRP
dmVyTm9kZSgpCiAgICAgICAgIG1fb3ZlcmxheS0+aGlnaGxpZ2h0Tm9kZShub2RlLCAqbV9pbnNw
ZWN0TW9kZUhpZ2hsaWdodENvbmZpZyk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNl
dFNlYXJjaGluZ0Zvck5vZGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBib29sIGVuYWJsZWQs
IGNvbnN0IEpTT046Ok9iamVjdCogaGlnaGxpZ2h0SW5zcGVjdG9yT2JqZWN0LCBib29sIHNob3dS
dWxlcnMpCit2b2lkIEluc3BlY3RvckRPTUFnZW50OjpzZXRTZWFyY2hpbmdGb3JOb2RlKFByb3Rv
Y29sOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGJvb2wgZW5hYmxlZCwgUmVmUHRyPEpTT046
Ok9iamVjdD4mJiBoaWdobGlnaHRJbnNwZWN0b3JPYmplY3QsIGJvb2wgc2hvd1J1bGVycykKIHsK
ICAgICBpZiAobV9zZWFyY2hpbmdGb3JOb2RlID09IGVuYWJsZWQpCiAgICAgICAgIHJldHVybjsK
QEAgLTExODMsMTIgKzEyMTQsMTIgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c2V0U2VhcmNo
aW5nRm9yTm9kZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGJvb2wgZW5hYmwKICAgICBtX292
ZXJsYXktPnNldFNob3dSdWxlcnNEdXJpbmdFbGVtZW50U2VsZWN0aW9uKG1fc2VhcmNoaW5nRm9y
Tm9kZSAmJiBzaG93UnVsZXJzKTsKIAogICAgIGlmIChtX3NlYXJjaGluZ0Zvck5vZGUpIHsKLSAg
ICAgICAgbV9pbnNwZWN0TW9kZUhpZ2hsaWdodENvbmZpZyA9IGhpZ2hsaWdodENvbmZpZ0Zyb21J
bnNwZWN0b3JPYmplY3QoZXJyb3JTdHJpbmcsIGhpZ2hsaWdodEluc3BlY3Rvck9iamVjdCk7Cisg
ICAgICAgIG1faW5zcGVjdE1vZGVIaWdobGlnaHRDb25maWcgPSBoaWdobGlnaHRDb25maWdGcm9t
SW5zcGVjdG9yT2JqZWN0KGVycm9yU3RyaW5nLCBXVEZNb3ZlKGhpZ2hsaWdodEluc3BlY3Rvck9i
amVjdCkpOwogICAgICAgICBpZiAoIW1faW5zcGVjdE1vZGVIaWdobGlnaHRDb25maWcpCiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIGhpZ2hsaWdodE1vdXNlZE92ZXJOb2RlKCk7CiAgICAg
fSBlbHNlCi0gICAgICAgIGhpZGVIaWdobGlnaHQoZXJyb3JTdHJpbmcpOworICAgICAgICBoaWRl
SGlnaGxpZ2h0KCk7CiAKICAgICBtX292ZXJsYXktPmRpZFNldFNlYXJjaGluZ0Zvck5vZGUobV9z
ZWFyY2hpbmdGb3JOb2RlKTsKIApAQCAtMTE5Niw3ICsxMjI3LDcgQEAgdm9pZCBJbnNwZWN0b3JE
T01BZ2VudDo6c2V0U2VhcmNoaW5nRm9yTm9kZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGJv
b2wgZW5hYmwKICAgICAgICAgY2xpZW50LT5lbGVtZW50U2VsZWN0aW9uQ2hhbmdlZChtX3NlYXJj
aGluZ0Zvck5vZGUpOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8SGlnaGxpZ2h0Q29uZmlnPiBJbnNw
ZWN0b3JET01BZ2VudDo6aGlnaGxpZ2h0Q29uZmlnRnJvbUluc3BlY3Rvck9iamVjdChFcnJvclN0
cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IEpTT046Ok9iamVjdCogaGlnaGxpZ2h0SW5zcGVjdG9y
T2JqZWN0KQorc3RkOjp1bmlxdWVfcHRyPEhpZ2hsaWdodENvbmZpZz4gSW5zcGVjdG9yRE9NQWdl
bnQ6OmhpZ2hsaWdodENvbmZpZ0Zyb21JbnNwZWN0b3JPYmplY3QoUHJvdG9jb2w6OkVycm9yU3Ry
aW5nJiBlcnJvclN0cmluZywgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBoaWdobGlnaHRJbnNwZWN0
b3JPYmplY3QpCiB7CiAgICAgaWYgKCFoaWdobGlnaHRJbnNwZWN0b3JPYmplY3QpIHsKICAgICAg
ICAgZXJyb3JTdHJpbmcgPSAiSW50ZXJuYWwgZXJyb3I6IGhpZ2hsaWdodCBjb25maWd1cmF0aW9u
IHBhcmFtZXRlciBpcyBtaXNzaW5nIl9zOwpAQCAtMTIwNCw4MSArMTIzNSw5MyBAQCBzdGQ6OnVu
aXF1ZV9wdHI8SGlnaGxpZ2h0Q29uZmlnPiBJbnNwZWN0b3JET01BZ2VudDo6aGlnaGxpZ2h0Q29u
ZmlnRnJvbUluc3BlY3RvcgogICAgIH0KIAogICAgIGF1dG8gaGlnaGxpZ2h0Q29uZmlnID0gbWFr
ZVVuaXF1ZTxIaWdobGlnaHRDb25maWc+KCk7Ci0gICAgYm9vbCBzaG93SW5mbyA9IGZhbHNlOyAv
LyBEZWZhdWx0OiBmYWxzZSAoZG8gbm90IHNob3cgYSB0b29sdGlwKS4KLSAgICBoaWdobGlnaHRJ
bnNwZWN0b3JPYmplY3QtPmdldEJvb2xlYW4oInNob3dJbmZvIiwgc2hvd0luZm8pOwotICAgIGhp
Z2hsaWdodENvbmZpZy0+c2hvd0luZm8gPSBzaG93SW5mbzsKLSAgICBoaWdobGlnaHRDb25maWct
PmNvbnRlbnQgPSBwYXJzZUNvbmZpZ0NvbG9yKCJjb250ZW50Q29sb3IiLCBoaWdobGlnaHRJbnNw
ZWN0b3JPYmplY3QpOwotICAgIGhpZ2hsaWdodENvbmZpZy0+Y29udGVudE91dGxpbmUgPSBwYXJz
ZUNvbmZpZ0NvbG9yKCJjb250ZW50T3V0bGluZUNvbG9yIiwgaGlnaGxpZ2h0SW5zcGVjdG9yT2Jq
ZWN0KTsKLSAgICBoaWdobGlnaHRDb25maWctPnBhZGRpbmcgPSBwYXJzZUNvbmZpZ0NvbG9yKCJw
YWRkaW5nQ29sb3IiLCBoaWdobGlnaHRJbnNwZWN0b3JPYmplY3QpOwotICAgIGhpZ2hsaWdodENv
bmZpZy0+Ym9yZGVyID0gcGFyc2VDb25maWdDb2xvcigiYm9yZGVyQ29sb3IiLCBoaWdobGlnaHRJ
bnNwZWN0b3JPYmplY3QpOwotICAgIGhpZ2hsaWdodENvbmZpZy0+bWFyZ2luID0gcGFyc2VDb25m
aWdDb2xvcigibWFyZ2luQ29sb3IiLCBoaWdobGlnaHRJbnNwZWN0b3JPYmplY3QpOworICAgIGhp
Z2hsaWdodENvbmZpZy0+c2hvd0luZm8gPSBoaWdobGlnaHRJbnNwZWN0b3JPYmplY3QtPmdldEJv
b2xlYW4oUHJvdG9jb2w6OkRPTTo6SGlnaGxpZ2h0Q29uZmlnOjpzaG93SW5mb0tleSkudmFsdWVP
cihmYWxzZSk7CisgICAgaGlnaGxpZ2h0Q29uZmlnLT5jb250ZW50ID0gcGFyc2VDb25maWdDb2xv
cihQcm90b2NvbDo6RE9NOjpIaWdobGlnaHRDb25maWc6OmNvbnRlbnRDb2xvcktleSwgKmhpZ2hs
aWdodEluc3BlY3Rvck9iamVjdCk7CisgICAgaGlnaGxpZ2h0Q29uZmlnLT5wYWRkaW5nID0gcGFy
c2VDb25maWdDb2xvcihQcm90b2NvbDo6RE9NOjpIaWdobGlnaHRDb25maWc6OnBhZGRpbmdDb2xv
cktleSwgKmhpZ2hsaWdodEluc3BlY3Rvck9iamVjdCk7CisgICAgaGlnaGxpZ2h0Q29uZmlnLT5i
b3JkZXIgPSBwYXJzZUNvbmZpZ0NvbG9yKFByb3RvY29sOjpET006OkhpZ2hsaWdodENvbmZpZzo6
Ym9yZGVyQ29sb3JLZXksICpoaWdobGlnaHRJbnNwZWN0b3JPYmplY3QpOworICAgIGhpZ2hsaWdo
dENvbmZpZy0+bWFyZ2luID0gcGFyc2VDb25maWdDb2xvcihQcm90b2NvbDo6RE9NOjpIaWdobGln
aHRDb25maWc6Om1hcmdpbkNvbG9yS2V5LCAqaGlnaGxpZ2h0SW5zcGVjdG9yT2JqZWN0KTsKICAg
ICByZXR1cm4gaGlnaGxpZ2h0Q29uZmlnOwogfQogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkK
LXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNldEluc3BlY3RNb2RlRW5hYmxlZChFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcsIGJvb2wgZW5hYmxlZCwgY29uc3QgSlNPTjo6T2JqZWN0KiBoaWdobGln
aHRDb25maWcpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JET01BZ2Vu
dDo6c2V0SW5zcGVjdE1vZGVFbmFibGVkKGJvb2wgZW5hYmxlZCwgUmVmUHRyPEpTT046Ok9iamVj
dD4mJiBoaWdobGlnaHRDb25maWcpCiB7Ci0gICAgc2V0U2VhcmNoaW5nRm9yTm9kZShlcnJvclN0
cmluZywgZW5hYmxlZCwgaGlnaGxpZ2h0Q29uZmlnID8gaGlnaGxpZ2h0Q29uZmlnIDogbnVsbHB0
ciwgZmFsc2UpOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKworICAg
IHNldFNlYXJjaGluZ0Zvck5vZGUoZXJyb3JTdHJpbmcsIGVuYWJsZWQsIFdURk1vdmUoaGlnaGxp
Z2h0Q29uZmlnKSwgZmFsc2UpOworCisgICAgaWYgKCEhZXJyb3JTdHJpbmcpCisgICAgICAgIHJl
dHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CisKKyAgICByZXR1cm4geyB9OwogfQog
I2Vsc2UKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNldEluc3BlY3RNb2RlRW5hYmxlZChFcnJv
clN0cmluZyYgZXJyb3JTdHJpbmcsIGJvb2wgZW5hYmxlZCwgY29uc3QgSlNPTjo6T2JqZWN0KiBo
aWdobGlnaHRDb25maWcsIGNvbnN0IGJvb2wqIHNob3dSdWxlcnMpCitQcm90b2NvbDo6RXJyb3JT
dHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JET01BZ2VudDo6c2V0SW5zcGVjdE1vZGVFbmFibGVkKGJv
b2wgZW5hYmxlZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBoaWdobGlnaHRDb25maWcsIE9wdGlv
bmFsPGJvb2w+JiYgc2hvd1J1bGVycykKIHsKLSAgICBzZXRTZWFyY2hpbmdGb3JOb2RlKGVycm9y
U3RyaW5nLCBlbmFibGVkLCBoaWdobGlnaHRDb25maWcgPyBoaWdobGlnaHRDb25maWcgOiBudWxs
cHRyLCBzaG93UnVsZXJzICYmICpzaG93UnVsZXJzKTsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJp
bmcgZXJyb3JTdHJpbmc7CisKKyAgICBzZXRTZWFyY2hpbmdGb3JOb2RlKGVycm9yU3RyaW5nLCBl
bmFibGVkLCBXVEZNb3ZlKGhpZ2hsaWdodENvbmZpZyksIHNob3dSdWxlcnMgJiYgKnNob3dSdWxl
cnMpOworCisgICAgaWYgKCEhZXJyb3JTdHJpbmcpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBl
Y3RlZChlcnJvclN0cmluZyk7CisKKyAgICByZXR1cm4geyB9OwogfQogI2VuZGlmCiAKLXZvaWQg
SW5zcGVjdG9yRE9NQWdlbnQ6OmhpZ2hsaWdodFJlY3QoRXJyb3JTdHJpbmcmLCBpbnQgeCwgaW50
IHksIGludCB3aWR0aCwgaW50IGhlaWdodCwgY29uc3QgSlNPTjo6T2JqZWN0KiBjb2xvciwgY29u
c3QgSlNPTjo6T2JqZWN0KiBvdXRsaW5lQ29sb3IsIGNvbnN0IGJvb2wqIHVzZVBhZ2VDb29yZGlu
YXRlcykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRPTUFnZW50Ojpo
aWdobGlnaHRSZWN0KGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBSZWZQdHI8
SlNPTjo6T2JqZWN0PiYmIGNvbG9yLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIG91dGxpbmVDb2xv
ciwgT3B0aW9uYWw8Ym9vbD4mJiB1c2VQYWdlQ29vcmRpbmF0ZXMpCiB7CiAgICAgYXV0byBxdWFk
ID0gbWFrZVVuaXF1ZTxGbG9hdFF1YWQ+KEZsb2F0UmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KSk7
Ci0gICAgaW5uZXJIaWdobGlnaHRRdWFkKFdURk1vdmUocXVhZCksIGNvbG9yLCBvdXRsaW5lQ29s
b3IsIHVzZVBhZ2VDb29yZGluYXRlcyk7CisgICAgaW5uZXJIaWdobGlnaHRRdWFkKFdURk1vdmUo
cXVhZCksIFdURk1vdmUoY29sb3IpLCBXVEZNb3ZlKG91dGxpbmVDb2xvciksIFdURk1vdmUodXNl
UGFnZUNvb3JkaW5hdGVzKSk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3Rv
ckRPTUFnZW50OjpoaWdobGlnaHRRdWFkKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3Qg
SlNPTjo6QXJyYXkmIHF1YWRBcnJheSwgY29uc3QgSlNPTjo6T2JqZWN0KiBjb2xvciwgY29uc3Qg
SlNPTjo6T2JqZWN0KiBvdXRsaW5lQ29sb3IsIGNvbnN0IGJvb2wqIHVzZVBhZ2VDb29yZGluYXRl
cykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRPTUFnZW50OjpoaWdo
bGlnaHRRdWFkKFJlZjxKU09OOjpBcnJheT4mJiBxdWFkT2JqZWN0LCBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiYmIGNvbG9yLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIG91dGxpbmVDb2xvciwgT3B0aW9u
YWw8Ym9vbD4mJiB1c2VQYWdlQ29vcmRpbmF0ZXMpCiB7CiAgICAgYXV0byBxdWFkID0gbWFrZVVu
aXF1ZTxGbG9hdFF1YWQ+KCk7Ci0gICAgaWYgKCFwYXJzZVF1YWQocXVhZEFycmF5LCBxdWFkLmdl
dCgpKSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJVbmV4cGVjdGVkIGludmFsaWQgcXVhZEFy
cmF5Il9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlubmVySGlnaGxpZ2h0UXVhZChX
VEZNb3ZlKHF1YWQpLCBjb2xvciwgb3V0bGluZUNvbG9yLCB1c2VQYWdlQ29vcmRpbmF0ZXMpOwor
ICAgIGlmICghcGFyc2VRdWFkKFdURk1vdmUocXVhZE9iamVjdCksIHF1YWQuZ2V0KCkpKQorICAg
ICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIlVuZXhwZWN0ZWQgaW52YWxpZCBxdWFkIl9zKTsK
KworICAgIGlubmVySGlnaGxpZ2h0UXVhZChXVEZNb3ZlKHF1YWQpLCBXVEZNb3ZlKGNvbG9yKSwg
V1RGTW92ZShvdXRsaW5lQ29sb3IpLCBXVEZNb3ZlKHVzZVBhZ2VDb29yZGluYXRlcykpOworCisg
ICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6aW5uZXJIaWdobGln
aHRRdWFkKHN0ZDo6dW5pcXVlX3B0cjxGbG9hdFF1YWQ+IHF1YWQsIGNvbnN0IEpTT046Ok9iamVj
dCogY29sb3IsIGNvbnN0IEpTT046Ok9iamVjdCogb3V0bGluZUNvbG9yLCBjb25zdCBib29sKiB1
c2VQYWdlQ29vcmRpbmF0ZXMpCit2b2lkIEluc3BlY3RvckRPTUFnZW50Ojppbm5lckhpZ2hsaWdo
dFF1YWQoc3RkOjp1bmlxdWVfcHRyPEZsb2F0UXVhZD4gcXVhZCwgUmVmUHRyPEpTT046Ok9iamVj
dD4mJiBjb2xvciwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBvdXRsaW5lQ29sb3IsIE9wdGlvbmFs
PGJvb2w+JiYgdXNlUGFnZUNvb3JkaW5hdGVzKQogewogICAgIGF1dG8gaGlnaGxpZ2h0Q29uZmln
ID0gbWFrZVVuaXF1ZTxIaWdobGlnaHRDb25maWc+KCk7Ci0gICAgaGlnaGxpZ2h0Q29uZmlnLT5j
b250ZW50ID0gcGFyc2VDb2xvcihjb2xvcik7Ci0gICAgaGlnaGxpZ2h0Q29uZmlnLT5jb250ZW50
T3V0bGluZSA9IHBhcnNlQ29sb3Iob3V0bGluZUNvbG9yKTsKKyAgICBoaWdobGlnaHRDb25maWct
PmNvbnRlbnQgPSBwYXJzZUNvbG9yKFdURk1vdmUoY29sb3IpKTsKKyAgICBoaWdobGlnaHRDb25m
aWctPmNvbnRlbnRPdXRsaW5lID0gcGFyc2VDb2xvcihXVEZNb3ZlKG91dGxpbmVDb2xvcikpOwog
ICAgIGhpZ2hsaWdodENvbmZpZy0+dXNlUGFnZUNvb3JkaW5hdGVzID0gdXNlUGFnZUNvb3JkaW5h
dGVzID8gKnVzZVBhZ2VDb29yZGluYXRlcyA6IGZhbHNlOwogICAgIG1fb3ZlcmxheS0+aGlnaGxp
Z2h0UXVhZChXVEZNb3ZlKHF1YWQpLCAqaGlnaGxpZ2h0Q29uZmlnKTsKIH0KIAotdm9pZCBJbnNw
ZWN0b3JET01BZ2VudDo6aGlnaGxpZ2h0U2VsZWN0b3IoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5n
LCBjb25zdCBKU09OOjpPYmplY3QmIGhpZ2hsaWdodEluc3BlY3Rvck9iamVjdCwgY29uc3QgU3Ry
aW5nJiBzZWxlY3RvclN0cmluZywgY29uc3QgU3RyaW5nKiBmcmFtZUlkKQorUHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yRE9NQWdlbnQ6OmhpZ2hsaWdodFNlbGVjdG9yKFJl
ZjxKU09OOjpPYmplY3Q+JiYgaGlnaGxpZ2h0SW5zcGVjdG9yT2JqZWN0LCBjb25zdCBTdHJpbmcm
IHNlbGVjdG9yU3RyaW5nLCBjb25zdCBQcm90b2NvbDo6TmV0d29yazo6RnJhbWVJZCYgZnJhbWVJ
ZCkKIHsKLSAgICBhdXRvIGhpZ2hsaWdodENvbmZpZyA9IGhpZ2hsaWdodENvbmZpZ0Zyb21JbnNw
ZWN0b3JPYmplY3QoZXJyb3JTdHJpbmcsICZoaWdobGlnaHRJbnNwZWN0b3JPYmplY3QpOworICAg
IFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKworICAgIGF1dG8gaGlnaGxpZ2h0
Q29uZmlnID0gaGlnaGxpZ2h0Q29uZmlnRnJvbUluc3BlY3Rvck9iamVjdChlcnJvclN0cmluZywg
V1RGTW92ZShoaWdobGlnaHRJbnNwZWN0b3JPYmplY3QpKTsKICAgICBpZiAoIWhpZ2hsaWdodENv
bmZpZykKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJy
b3JTdHJpbmcpOwogCiAgICAgUmVmUHRyPERvY3VtZW50PiBkb2N1bWVudDsKIAotICAgIGlmIChm
cmFtZUlkKSB7CisgICAgaWYgKCEhZnJhbWVJZCkgewogICAgICAgICBhdXRvKiBwYWdlQWdlbnQg
PSBtX2luc3RydW1lbnRpbmdBZ2VudHMuZW5hYmxlZFBhZ2VBZ2VudCgpOwotICAgICAgICBpZiAo
IXBhZ2VBZ2VudCkgewotICAgICAgICAgICAgZXJyb3JTdHJpbmcgPSAiUGFnZSBkb21haW4gbXVz
dCBiZSBlbmFibGVkIl9zOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9CisgICAgICAg
IGlmICghcGFnZUFnZW50KQorICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJQYWdl
IGRvbWFpbiBtdXN0IGJlIGVuYWJsZWQiX3MpOwogCi0gICAgICAgIGF1dG8qIGZyYW1lID0gcGFn
ZUFnZW50LT5hc3NlcnRGcmFtZShlcnJvclN0cmluZywgKmZyYW1lSWQpOworICAgICAgICBhdXRv
KiBmcmFtZSA9IHBhZ2VBZ2VudC0+YXNzZXJ0RnJhbWUoZXJyb3JTdHJpbmcsIGZyYW1lSWQpOwog
ICAgICAgICBpZiAoIWZyYW1lKQotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgcmV0
dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgICAgICBkb2N1bWVudCA9IGZy
YW1lLT5kb2N1bWVudCgpOwogICAgIH0gZWxzZQogICAgICAgICBkb2N1bWVudCA9IG1fZG9jdW1l
bnQ7CiAKLSAgICBpZiAoIWRvY3VtZW50KSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIk1pc3Np
bmcgZG9jdW1lbnQgb2YgZnJhbWUgZm9yIGdpdmVuIGZyYW1lSWQiX3M7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9CisgICAgaWYgKCFkb2N1bWVudCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVj
dGVkKCJNaXNzaW5nIGRvY3VtZW50IG9mIGZyYW1lIGZvciBnaXZlbiBmcmFtZUlkIl9zKTsKIAog
ICAgIENTU1BhcnNlciBwYXJzZXIoKmRvY3VtZW50KTsKICAgICBDU1NTZWxlY3Rvckxpc3Qgc2Vs
ZWN0b3JMaXN0OwpAQCAtMTMzOSwxNTggKzEzODIsMTczIEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdl
bnQ6OmhpZ2hsaWdodFNlbGVjdG9yKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgSlNP
Tjo6CiAgICAgfQogCiAgICAgbV9vdmVybGF5LT5oaWdobGlnaHROb2RlTGlzdChTdGF0aWNOb2Rl
TGlzdDo6Y3JlYXRlKFdURk1vdmUobm9kZUxpc3QpKSwgKmhpZ2hsaWdodENvbmZpZyk7CisKKyAg
ICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpoaWdobGlnaHROb2Rl
KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgSlNPTjo6T2JqZWN0JiBoaWdobGlnaHRJ
bnNwZWN0b3JPYmplY3QsIGNvbnN0IGludCogbm9kZUlkLCBjb25zdCBTdHJpbmcqIG9iamVjdElk
KQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yRE9NQWdlbnQ6OmhpZ2hs
aWdodE5vZGUoUmVmPEpTT046Ok9iamVjdD4mJiBoaWdobGlnaHRJbnNwZWN0b3JPYmplY3QsIE9w
dGlvbmFsPFByb3RvY29sOjpET006Ok5vZGVJZD4mJiBub2RlSWQsIGNvbnN0IFByb3RvY29sOjpS
dW50aW1lOjpSZW1vdGVPYmplY3RJZCYgb2JqZWN0SWQpCiB7CisgICAgUHJvdG9jb2w6OkVycm9y
U3RyaW5nIGVycm9yU3RyaW5nOworCiAgICAgTm9kZSogbm9kZSA9IG51bGxwdHI7CiAgICAgaWYg
KG5vZGVJZCkKICAgICAgICAgbm9kZSA9IGFzc2VydE5vZGUoZXJyb3JTdHJpbmcsICpub2RlSWQp
OwotICAgIGVsc2UgaWYgKG9iamVjdElkKSB7Ci0gICAgICAgIG5vZGUgPSBub2RlRm9yT2JqZWN0
SWQoKm9iamVjdElkKTsKLSAgICAgICAgaWYgKCFub2RlKQotICAgICAgICAgICAgZXJyb3JTdHJp
bmcgPSAiTWlzc2luZyBub2RlIGZvciBnaXZlbiBvYmplY3RJZCJfczsKKyAgICBlbHNlIGlmICgh
IW9iamVjdElkKSB7CisgICAgICAgIG5vZGUgPSBub2RlRm9yT2JqZWN0SWQob2JqZWN0SWQpOwor
ICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIG5vZGUgZm9yIGdpdmVuIG9iamVjdElkIl9z
OwogICAgIH0gZWxzZQogICAgICAgICBlcnJvclN0cmluZyA9ICJFaXRoZXIgbm9kZUlkIG9yIG9i
amVjdElkIG11c3QgYmUgc3BlY2lmaWVkIl9zOwogCiAgICAgaWYgKCFub2RlKQotICAgICAgICBy
ZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKLSAg
ICBzdGQ6OnVuaXF1ZV9wdHI8SGlnaGxpZ2h0Q29uZmlnPiBoaWdobGlnaHRDb25maWcgPSBoaWdo
bGlnaHRDb25maWdGcm9tSW5zcGVjdG9yT2JqZWN0KGVycm9yU3RyaW5nLCAmaGlnaGxpZ2h0SW5z
cGVjdG9yT2JqZWN0KTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SGlnaGxpZ2h0Q29uZmlnPiBoaWdo
bGlnaHRDb25maWcgPSBoaWdobGlnaHRDb25maWdGcm9tSW5zcGVjdG9yT2JqZWN0KGVycm9yU3Ry
aW5nLCBXVEZNb3ZlKGhpZ2hsaWdodEluc3BlY3Rvck9iamVjdCkpOwogICAgIGlmICghaGlnaGxp
Z2h0Q29uZmlnKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3Rl
ZChlcnJvclN0cmluZyk7CiAKICAgICBtX292ZXJsYXktPmhpZ2hsaWdodE5vZGUobm9kZSwgKmhp
Z2hsaWdodENvbmZpZyk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckRP
TUFnZW50OjpoaWdobGlnaHROb2RlTGlzdChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0
IEpTT046OkFycmF5JiBub2RlSWRzLCBjb25zdCBKU09OOjpPYmplY3QmIGhpZ2hsaWdodEluc3Bl
Y3Rvck9iamVjdCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRPTUFn
ZW50OjpoaWdobGlnaHROb2RlTGlzdChSZWY8SlNPTjo6QXJyYXk+JiYgbm9kZUlkcywgUmVmPEpT
T046Ok9iamVjdD4mJiBoaWdobGlnaHRJbnNwZWN0b3JPYmplY3QpCiB7Ci0gICAgVmVjdG9yPFJl
ZjxOb2RlPj4gbm9kZXM7Ci0gICAgZm9yIChhdXRvJiBub2RlVmFsdWUgOiBub2RlSWRzKSB7Ci0g
ICAgICAgIGlmICghbm9kZVZhbHVlKSB7Ci0gICAgICAgICAgICBlcnJvclN0cmluZyA9ICJVbmV4
cGVjdGVkIG5vbi1pbnRlZ2VyIGl0ZW0gaW4gZ2l2ZW4gbm9kZUlkcyJfczsKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfQorICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmlu
ZzsKIAotICAgICAgICBpbnQgbm9kZUlkID0gMDsKLSAgICAgICAgaWYgKCFub2RlVmFsdWUtPmFz
SW50ZWdlcihub2RlSWQpKSB7Ci0gICAgICAgICAgICBlcnJvclN0cmluZyA9ICJVbmV4cGVjdGVk
IG5vbi1pbnRlZ2VyIGl0ZW0gaW4gZ2l2ZW4gbm9kZUlkcyJfczsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQorICAgIFZlY3RvcjxSZWY8Tm9kZT4+IG5vZGVzOworICAgIGZvciAoYXV0
byYgbm9kZUlkVmFsdWUgOiBub2RlSWRzLmdldCgpKSB7CisgICAgICAgIGF1dG8gbm9kZUlkID0g
bm9kZUlkVmFsdWUtPmFzSW50ZWdlcigpOworICAgICAgICBpZiAoIW5vZGVJZCkKKyAgICAgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiVW5leHBlY3RlZCBub24taW50ZWdlciBpdGVtIGlu
IGdpdmVuIG5vZGVJZHMiX3MpOwogCiAgICAgICAgIC8vIEluIHRoZSBjYXNlIHRoYXQgYSBub2Rl
IGlzIHJlbW92ZWQgaW4gdGhlIHRpbWUgYmV0d2VlbiB3aGVuIGhpZ2hsaWdodE5vZGVMaXN0IGlz
IGludm9rZWQKICAgICAgICAgLy8gYnkgdGhlIGZyb250ZW5kIGFuZCBpdCBpcyBleGVjdXRlZCBi
eSB0aGUgYmFja2VuZCwgd2Ugc2hvdWxkIHN0aWxsIGF0dGVtcHQgdG8gaGlnaGxpZ2h0CiAgICAg
ICAgIC8vIGFzIG1hbnkgbm9kZXMgYXMgcG9zc2libGUuIEFzIHN1Y2gsIHdlIHNob3VsZCBpZ25v
cmUgYW55IGVycm9ycyBnZW5lcmF0ZWQgd2hlbiBhdHRlbXB0aW5nCiAgICAgICAgIC8vIHRvIGdl
dCBhIE5vZGUgZnJvbSBhIGdpdmVuIG5vZGVJZC4gCi0gICAgICAgIEVycm9yU3RyaW5nIGlnbm9y
ZWQ7Ci0gICAgICAgIE5vZGUqIG5vZGUgPSBhc3NlcnROb2RlKGlnbm9yZWQsIG5vZGVJZCk7Cisg
ICAgICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBpZ25vcmVkOworICAgICAgICBOb2RlKiBub2Rl
ID0gYXNzZXJ0Tm9kZShpZ25vcmVkLCAqbm9kZUlkKTsKICAgICAgICAgaWYgKCFub2RlKQogICAg
ICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgbm9kZXMuYXBwZW5kKCpub2RlKTsKICAgICB9
CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SGlnaGxpZ2h0Q29uZmlnPiBoaWdobGlnaHRDb25maWcg
PSBoaWdobGlnaHRDb25maWdGcm9tSW5zcGVjdG9yT2JqZWN0KGVycm9yU3RyaW5nLCAmaGlnaGxp
Z2h0SW5zcGVjdG9yT2JqZWN0KTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SGlnaGxpZ2h0Q29uZmln
PiBoaWdobGlnaHRDb25maWcgPSBoaWdobGlnaHRDb25maWdGcm9tSW5zcGVjdG9yT2JqZWN0KGVy
cm9yU3RyaW5nLCBXVEZNb3ZlKGhpZ2hsaWdodEluc3BlY3Rvck9iamVjdCkpOwogICAgIGlmICgh
aGlnaGxpZ2h0Q29uZmlnKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5l
eHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAgICBtX292ZXJsYXktPmhpZ2hsaWdodE5vZGVMaXN0
KFN0YXRpY05vZGVMaXN0OjpjcmVhdGUoV1RGTW92ZShub2RlcykpLCAqaGlnaGxpZ2h0Q29uZmln
KTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmhpZ2hs
aWdodEZyYW1lKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBmcmFtZUlk
LCBjb25zdCBKU09OOjpPYmplY3QqIGNvbG9yLCBjb25zdCBKU09OOjpPYmplY3QqIG91dGxpbmVD
b2xvcikKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRPTUFnZW50Ojpo
aWdobGlnaHRGcmFtZShjb25zdCBQcm90b2NvbDo6TmV0d29yazo6RnJhbWVJZCYgZnJhbWVJZCwg
UmVmUHRyPEpTT046Ok9iamVjdD4mJiBjb2xvciwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBvdXRs
aW5lQ29sb3IpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAg
ICAgYXV0byogcGFnZUFnZW50ID0gbV9pbnN0cnVtZW50aW5nQWdlbnRzLmVuYWJsZWRQYWdlQWdl
bnQoKTsKLSAgICBpZiAoIXBhZ2VBZ2VudCkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJQYWdl
IGRvbWFpbiBtdXN0IGJlIGVuYWJsZWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAg
aWYgKCFwYWdlQWdlbnQpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiUGFnZSBkb21h
aW4gbXVzdCBiZSBlbmFibGVkIl9zKTsKIAogICAgIGF1dG8qIGZyYW1lID0gcGFnZUFnZW50LT5h
c3NlcnRGcmFtZShlcnJvclN0cmluZywgZnJhbWVJZCk7CiAgICAgaWYgKCFmcmFtZSkKLSAgICAg
ICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwog
CiAgICAgaWYgKGZyYW1lLT5vd25lckVsZW1lbnQoKSkgewogICAgICAgICBhdXRvIGhpZ2hsaWdo
dENvbmZpZyA9IG1ha2VVbmlxdWU8SGlnaGxpZ2h0Q29uZmlnPigpOwogICAgICAgICBoaWdobGln
aHRDb25maWctPnNob3dJbmZvID0gdHJ1ZTsgLy8gQWx3YXlzIHNob3cgdG9vbHRpcHMgZm9yIGZy
YW1lcy4KLSAgICAgICAgaGlnaGxpZ2h0Q29uZmlnLT5jb250ZW50ID0gcGFyc2VDb2xvcihjb2xv
cik7Ci0gICAgICAgIGhpZ2hsaWdodENvbmZpZy0+Y29udGVudE91dGxpbmUgPSBwYXJzZUNvbG9y
KG91dGxpbmVDb2xvcik7CisgICAgICAgIGhpZ2hsaWdodENvbmZpZy0+Y29udGVudCA9IHBhcnNl
Q29sb3IoV1RGTW92ZShjb2xvcikpOworICAgICAgICBoaWdobGlnaHRDb25maWctPmNvbnRlbnRP
dXRsaW5lID0gcGFyc2VDb2xvcihXVEZNb3ZlKG91dGxpbmVDb2xvcikpOwogICAgICAgICBtX292
ZXJsYXktPmhpZ2hsaWdodE5vZGUoZnJhbWUtPm93bmVyRWxlbWVudCgpLCAqaGlnaGxpZ2h0Q29u
ZmlnKTsKICAgICB9CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckRPTUFn
ZW50OjpoaWRlSGlnaGxpZ2h0KEVycm9yU3RyaW5nJikKK1Byb3RvY29sOjpFcnJvclN0cmluZ09y
PHZvaWQ+IEluc3BlY3RvckRPTUFnZW50OjpoaWRlSGlnaGxpZ2h0KCkKIHsKICAgICBtX292ZXJs
YXktPmhpZGVIaWdobGlnaHQoKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVj
dG9yRE9NQWdlbnQ6Om1vdmVUbyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQs
IGludCB0YXJnZXRFbGVtZW50SWQsIGNvbnN0IGludCogYW5jaG9yTm9kZUlkLCBpbnQqIG5ld05v
ZGVJZCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPFByb3RvY29sOjpET006Ok5vZGVJZD4gSW5z
cGVjdG9yRE9NQWdlbnQ6Om1vdmVUbyhQcm90b2NvbDo6RE9NOjpOb2RlSWQgbm9kZUlkLCBQcm90
b2NvbDo6RE9NOjpOb2RlSWQgdGFyZ2V0Tm9kZUlkLCBPcHRpb25hbDxQcm90b2NvbDo6RE9NOjpO
b2RlSWQ+JiYgaW5zZXJ0QmVmb3JlTm9kZUlkKQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmlu
ZyBlcnJvclN0cmluZzsKKwogICAgIE5vZGUqIG5vZGUgPSBhc3NlcnRFZGl0YWJsZU5vZGUoZXJy
b3JTdHJpbmcsIG5vZGVJZCk7CiAgICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm47CisgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKLSAgICBFbGVtZW50KiB0
YXJnZXRFbGVtZW50ID0gYXNzZXJ0RWRpdGFibGVFbGVtZW50KGVycm9yU3RyaW5nLCB0YXJnZXRF
bGVtZW50SWQpOworICAgIEVsZW1lbnQqIHRhcmdldEVsZW1lbnQgPSBhc3NlcnRFZGl0YWJsZUVs
ZW1lbnQoZXJyb3JTdHJpbmcsIHRhcmdldE5vZGVJZCk7CiAgICAgaWYgKCF0YXJnZXRFbGVtZW50
KQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0
cmluZyk7CiAKLSAgICBOb2RlKiBhbmNob3JOb2RlID0gMDsKLSAgICBpZiAoYW5jaG9yTm9kZUlk
ICYmICphbmNob3JOb2RlSWQpIHsKLSAgICAgICAgYW5jaG9yTm9kZSA9IGFzc2VydEVkaXRhYmxl
Tm9kZShlcnJvclN0cmluZywgKmFuY2hvck5vZGVJZCk7CisgICAgTm9kZSogYW5jaG9yTm9kZSA9
IG51bGxwdHI7CisgICAgaWYgKGluc2VydEJlZm9yZU5vZGVJZCAmJiAqaW5zZXJ0QmVmb3JlTm9k
ZUlkKSB7CisgICAgICAgIGFuY2hvck5vZGUgPSBhc3NlcnRFZGl0YWJsZU5vZGUoZXJyb3JTdHJp
bmcsICppbnNlcnRCZWZvcmVOb2RlSWQpOwogICAgICAgICBpZiAoIWFuY2hvck5vZGUpCi0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmIChhbmNob3JOb2RlLT5wYXJlbnROb2RlKCkgIT0g
dGFyZ2V0RWxlbWVudCkgewotICAgICAgICAgICAgZXJyb3JTdHJpbmcgPSAiR2l2ZW4gYW5jaG9y
Tm9kZUlkIG11c3QgYmUgYSBjaGlsZCBvZiBnaXZlbiB0YXJnZXRFbGVtZW50SWQiX3M7Ci0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBl
Y3RlZChlcnJvclN0cmluZyk7CisgICAgICAgIGlmIChhbmNob3JOb2RlLT5wYXJlbnROb2RlKCkg
IT0gdGFyZ2V0RWxlbWVudCkKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiR2l2
ZW4gaW5zZXJ0QmVmb3JlTm9kZUlkIG11c3QgYmUgYSBjaGlsZCBvZiBnaXZlbiB0YXJnZXROb2Rl
SWQiX3MpOwogICAgIH0KIAogICAgIGlmICghbV9kb21FZGl0b3ItPmluc2VydEJlZm9yZSgqdGFy
Z2V0RWxlbWVudCwgKm5vZGUsIGFuY2hvck5vZGUsIGVycm9yU3RyaW5nKSkKLSAgICAgICAgcmV0
dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCi0gICAg
Km5ld05vZGVJZCA9IHB1c2hOb2RlUGF0aFRvRnJvbnRlbmQoZXJyb3JTdHJpbmcsIG5vZGUpOwor
ICAgIHJldHVybiBwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKGVycm9yU3RyaW5nLCBub2RlKTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6dW5kbyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcp
CitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JET01BZ2VudDo6dW5kbygp
CiB7CiAgICAgYXV0byByZXN1bHQgPSBtX2hpc3RvcnktPnVuZG8oKTsKICAgICBpZiAocmVzdWx0
Lmhhc0V4Y2VwdGlvbigpKQotICAgICAgICBlcnJvclN0cmluZyA9IHRvRXJyb3JTdHJpbmcocmVz
dWx0LnJlbGVhc2VFeGNlcHRpb24oKSk7CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChJ
bnNwZWN0b3JET01BZ2VudDo6dG9FcnJvclN0cmluZyhyZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigp
KSk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpyZWRv
KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+
IEluc3BlY3RvckRPTUFnZW50OjpyZWRvKCkKIHsKICAgICBhdXRvIHJlc3VsdCA9IG1faGlzdG9y
eS0+cmVkbygpOwogICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpCi0gICAgICAgIGVycm9y
U3RyaW5nID0gdG9FcnJvclN0cmluZyhyZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpKTsKKyAgICAg
ICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEluc3BlY3RvckRPTUFnZW50Ojp0b0Vycm9yU3RyaW5n
KHJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCkpKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZv
aWQgSW5zcGVjdG9yRE9NQWdlbnQ6Om1hcmtVbmRvYWJsZVN0YXRlKEVycm9yU3RyaW5nJikKK1By
b3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRPTUFnZW50OjptYXJrVW5kb2Fi
bGVTdGF0ZSgpCiB7CiAgICAgbV9oaXN0b3J5LT5tYXJrVW5kb2FibGVTdGF0ZSgpOworCisgICAg
cmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Zm9jdXMoRXJyb3JTdHJp
bmcmIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9p
ZD4gSW5zcGVjdG9yRE9NQWdlbnQ6OmZvY3VzKFByb3RvY29sOjpET006Ok5vZGVJZCBub2RlSWQp
CiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAgICAgRWxlbWVu
dCogZWxlbWVudCA9IGFzc2VydEVsZW1lbnQoZXJyb3JTdHJpbmcsIG5vZGVJZCk7CiAgICAgaWYg
KCFlbGVtZW50KQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKCFlbGVtZW50LT5pc0ZvY3VzYWJs
ZSgpKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIkVsZW1lbnQgZm9yIGdpdmVuIG5vZGVJZCBp
cyBub3QgZm9jdXNhYmxlIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgICAgICByZXR1
cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOworICAgIGlmICghZWxlbWVudC0+aXNGb2N1
c2FibGUoKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJFbGVtZW50IGZvciBnaXZl
biBub2RlSWQgaXMgbm90IGZvY3VzYWJsZSJfcyk7CisKICAgICBlbGVtZW50LT5mb2N1cygpOwor
CisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c2V0SW5zcGVj
dGVkTm9kZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQpCitQcm90b2NvbDo6
RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JET01BZ2VudDo6c2V0SW5zcGVjdGVkTm9kZShQ
cm90b2NvbDo6RE9NOjpOb2RlSWQgbm9kZUlkKQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmlu
ZyBlcnJvclN0cmluZzsKKwogICAgIE5vZGUqIG5vZGUgPSBhc3NlcnROb2RlKGVycm9yU3RyaW5n
LCBub2RlSWQpOwogICAgIGlmICghbm9kZSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1
cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCi0gICAgaWYgKG5vZGUtPmlzSW5Vc2Vy
QWdlbnRTaGFkb3dUcmVlKCkgJiYgIW1fYWxsb3dFZGl0aW5nVXNlckFnZW50U2hhZG93VHJlZXMp
IHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiTm9kZSBmb3IgZ2l2ZW4gbm9kZUlkIGlzIGluIGEg
c2hhZG93IHRyZWUiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKG5vZGUtPmlz
SW5Vc2VyQWdlbnRTaGFkb3dUcmVlKCkgJiYgIW1fYWxsb3dFZGl0aW5nVXNlckFnZW50U2hhZG93
VHJlZXMpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTm9kZSBmb3IgZ2l2ZW4gbm9k
ZUlkIGlzIGluIGEgc2hhZG93IHRyZWUiX3MpOwogCiAgICAgbV9pbnNwZWN0ZWROb2RlID0gbm9k
ZTsKIApAQCAtMTQ5OCwzOCArMTU1Niw0OSBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpzZXRJ
bnNwZWN0ZWROb2RlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJZCkKICAgICAg
ICAgY29tbWFuZExpbmVBUElIb3N0LT5hZGRJbnNwZWN0ZWRPYmplY3QobWFrZVVuaXF1ZTxJbnNw
ZWN0YWJsZU5vZGU+KG5vZGUpKTsKIAogICAgIG1fc3VwcHJlc3NFdmVudExpc3RlbmVyQ2hhbmdl
ZEV2ZW50ID0gZmFsc2U7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckRP
TUFnZW50OjpyZXNvbHZlTm9kZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQs
IGNvbnN0IFN0cmluZyogb2JqZWN0R3JvdXAsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpS
dW50aW1lOjpSZW1vdGVPYmplY3Q+JiByZXN1bHQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxS
ZWY8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4+IEluc3BlY3RvckRPTUFnZW50Ojpy
ZXNvbHZlTm9kZShQcm90b2NvbDo6RE9NOjpOb2RlSWQgbm9kZUlkLCBjb25zdCBTdHJpbmcmIG9i
amVjdEdyb3VwKQogewotICAgIFN0cmluZyBvYmplY3RHcm91cE5hbWUgPSBvYmplY3RHcm91cCA/
ICpvYmplY3RHcm91cCA6IGVtcHR5U3RyaW5nKCk7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5n
IGVycm9yU3RyaW5nOworCiAgICAgTm9kZSogbm9kZSA9IGFzc2VydE5vZGUoZXJyb3JTdHJpbmcs
IG5vZGVJZCk7CiAgICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm47Ci0gICAgUmVmUHRyPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4gb2JqZWN0ID0gcmVzb2x2
ZU5vZGUobm9kZSwgb2JqZWN0R3JvdXBOYW1lKTsKLSAgICBpZiAoIW9iamVjdCkgewotICAgICAg
ICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIGluamVjdGVkIHNjcmlwdCBmb3IgZ2l2ZW4gbm9kZUlk
Il9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIHJlc3VsdCA9IG9iamVjdDsKKyAgICAg
ICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKKworICAgIFJlZlB0cjxQcm90
b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiBvYmplY3QgPSByZXNvbHZlTm9kZShub2RlLCBv
YmplY3RHcm91cCk7CisgICAgaWYgKCFvYmplY3QpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBl
Y3RlZCgiTWlzc2luZyBpbmplY3RlZCBzY3JpcHQgZm9yIGdpdmVuIG5vZGVJZCJfcyk7CisKKyAg
ICByZXR1cm4gb2JqZWN0LnJlbGVhc2VOb25OdWxsKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9N
QWdlbnQ6OmdldEF0dHJpYnV0ZXMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlk
LCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiYgcmVzdWx0KQorUHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8UmVmPEpTT046OkFycmF5T2Y8U3RyaW5nPj4+IEluc3BlY3RvckRPTUFnZW50Ojpn
ZXRBdHRyaWJ1dGVzKFByb3RvY29sOjpET006Ok5vZGVJZCBub2RlSWQpCiB7CisgICAgUHJvdG9j
b2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAgICAgRWxlbWVudCogZWxlbWVudCA9IGFz
c2VydEVsZW1lbnQoZXJyb3JTdHJpbmcsIG5vZGVJZCk7CiAgICAgaWYgKCFlbGVtZW50KQotICAg
ICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7
CiAKLSAgICByZXN1bHQgPSBidWlsZEFycmF5Rm9yRWxlbWVudEF0dHJpYnV0ZXMoZWxlbWVudCk7
CisgICAgcmV0dXJuIGJ1aWxkQXJyYXlGb3JFbGVtZW50QXR0cmlidXRlcyhlbGVtZW50KTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6cmVxdWVzdE5vZGUoRXJyb3JTdHJpbmcmIGVycm9y
U3RyaW5nLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBpbnQqIG5vZGVJZCkKK1Byb3RvY29sOjpF
cnJvclN0cmluZ09yPFByb3RvY29sOjpET006Ok5vZGVJZD4gSW5zcGVjdG9yRE9NQWdlbnQ6OnJl
cXVlc3ROb2RlKGNvbnN0IFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3RJZCYgb2JqZWN0
SWQpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAgICAgTm9k
ZSogbm9kZSA9IG5vZGVGb3JPYmplY3RJZChvYmplY3RJZCk7Ci0gICAgaWYgKG5vZGUpCi0gICAg
ICAgICpub2RlSWQgPSBwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKGVycm9yU3RyaW5nLCBub2RlKTsK
LSAgICBlbHNlCi0gICAgICAgICpub2RlSWQgPSAwOworICAgIGlmICghbm9kZSkKKyAgICAgICAg
cmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJNaXNzaW5nIG5vZGUgZm9yIGdpdmVuIG9iamVjdElkIl9z
KTsKKworICAgIGF1dG8gbm9kZUlkID0gcHVzaE5vZGVQYXRoVG9Gcm9udGVuZChlcnJvclN0cmlu
Zywgbm9kZSk7CisgICAgaWYgKCFub2RlSWQpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3Rl
ZChlcnJvclN0cmluZyk7CisKKyAgICByZXR1cm4gbm9kZUlkOwogfQogCiBTdHJpbmcgSW5zcGVj
dG9yRE9NQWdlbnQ6OmRvY3VtZW50VVJMU3RyaW5nKERvY3VtZW50KiBkb2N1bWVudCkKQEAgLTE1
NDQsNDQgKzE2MTMsNDQgQEAgc3RhdGljIFN0cmluZyBkb2N1bWVudEJhc2VVUkxTdHJpbmcoRG9j
dW1lbnQqIGRvY3VtZW50KQogICAgIHJldHVybiBkb2N1bWVudC0+Y29tcGxldGVVUkwoZW1wdHlT
dHJpbmcoKSkuc3RyaW5nKCk7CiB9CiAKLXN0YXRpYyBib29sIHBzZXVkb0VsZW1lbnRUeXBlKFBz
ZXVkb0lkIHBzZXVkb0lkLCBJbnNwZWN0b3I6OlByb3RvY29sOjpET006OlBzZXVkb1R5cGUqIHR5
cGUpCitzdGF0aWMgYm9vbCBwc2V1ZG9FbGVtZW50VHlwZShQc2V1ZG9JZCBwc2V1ZG9JZCwgUHJv
dG9jb2w6OkRPTTo6UHNldWRvVHlwZSogdHlwZSkKIHsKICAgICBzd2l0Y2ggKHBzZXVkb0lkKSB7
CiAgICAgY2FzZSBQc2V1ZG9JZDo6QmVmb3JlOgotICAgICAgICAqdHlwZSA9IEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRPTTo6UHNldWRvVHlwZTo6QmVmb3JlOworICAgICAgICAqdHlwZSA9IFByb3Rv
Y29sOjpET006OlBzZXVkb1R5cGU6OkJlZm9yZTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
Y2FzZSBQc2V1ZG9JZDo6QWZ0ZXI6Ci0gICAgICAgICp0eXBlID0gSW5zcGVjdG9yOjpQcm90b2Nv
bDo6RE9NOjpQc2V1ZG9UeXBlOjpBZnRlcjsKKyAgICAgICAgKnR5cGUgPSBQcm90b2NvbDo6RE9N
OjpQc2V1ZG9UeXBlOjpBZnRlcjsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgZGVmYXVsdDoK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIH0KIAotc3RhdGljIEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRPTTo6U2hhZG93Um9vdFR5cGUgc2hhZG93Um9vdFR5cGUoU2hhZG93Um9vdE1vZGUg
bW9kZSkKK3N0YXRpYyBQcm90b2NvbDo6RE9NOjpTaGFkb3dSb290VHlwZSBzaGFkb3dSb290VHlw
ZShTaGFkb3dSb290TW9kZSBtb2RlKQogewogICAgIHN3aXRjaCAobW9kZSkgewogICAgIGNhc2Ug
U2hhZG93Um9vdE1vZGU6OlVzZXJBZ2VudDoKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRPTTo6U2hhZG93Um9vdFR5cGU6OlVzZXJBZ2VudDsKKyAgICAgICAgcmV0dXJuIFBy
b3RvY29sOjpET006OlNoYWRvd1Jvb3RUeXBlOjpVc2VyQWdlbnQ7CiAgICAgY2FzZSBTaGFkb3dS
b290TW9kZTo6Q2xvc2VkOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9N
OjpTaGFkb3dSb290VHlwZTo6Q2xvc2VkOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OkRPTTo6
U2hhZG93Um9vdFR5cGU6OkNsb3NlZDsKICAgICBjYXNlIFNoYWRvd1Jvb3RNb2RlOjpPcGVuOgot
ICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpTaGFkb3dSb290VHlwZTo6
T3BlbjsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpET006OlNoYWRvd1Jvb3RUeXBlOjpPcGVu
OwogICAgIH0KIAogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBJbnNwZWN0
b3I6OlByb3RvY29sOjpET006OlNoYWRvd1Jvb3RUeXBlOjpVc2VyQWdlbnQ7CisgICAgcmV0dXJu
IFByb3RvY29sOjpET006OlNoYWRvd1Jvb3RUeXBlOjpVc2VyQWdlbnQ7CiB9CiAKLXN0YXRpYyBJ
bnNwZWN0b3I6OlByb3RvY29sOjpET006OkN1c3RvbUVsZW1lbnRTdGF0ZSBjdXN0b21FbGVtZW50
U3RhdGUoY29uc3QgRWxlbWVudCYgZWxlbWVudCkKK3N0YXRpYyBQcm90b2NvbDo6RE9NOjpDdXN0
b21FbGVtZW50U3RhdGUgY3VzdG9tRWxlbWVudFN0YXRlKGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQp
CiB7CiAgICAgaWYgKGVsZW1lbnQuaXNEZWZpbmVkQ3VzdG9tRWxlbWVudCgpKQotICAgICAgICBy
ZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpDdXN0b21FbGVtZW50U3RhdGU6OkN1c3Rv
bTsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpET006OkN1c3RvbUVsZW1lbnRTdGF0ZTo6Q3Vz
dG9tOwogICAgIGlmIChlbGVtZW50LmlzRmFpbGVkQ3VzdG9tRWxlbWVudCgpKQotICAgICAgICBy
ZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpDdXN0b21FbGVtZW50U3RhdGU6OkZhaWxl
ZDsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpET006OkN1c3RvbUVsZW1lbnRTdGF0ZTo6RmFp
bGVkOwogICAgIGlmIChlbGVtZW50LmlzVW5kZWZpbmVkQ3VzdG9tRWxlbWVudCgpIHx8IGVsZW1l
bnQuaXNDdXN0b21FbGVtZW50VXBncmFkZUNhbmRpZGF0ZSgpKQotICAgICAgICByZXR1cm4gSW5z
cGVjdG9yOjpQcm90b2NvbDo6RE9NOjpDdXN0b21FbGVtZW50U3RhdGU6OldhaXRpbmc7Ci0gICAg
cmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Q3VzdG9tRWxlbWVudFN0YXRlOjpCdWls
dGluOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OkRPTTo6Q3VzdG9tRWxlbWVudFN0YXRlOjpX
YWl0aW5nOworICAgIHJldHVybiBQcm90b2NvbDo6RE9NOjpDdXN0b21FbGVtZW50U3RhdGU6OkJ1
aWx0aW47CiB9CiAKIHN0YXRpYyBTdHJpbmcgY29tcHV0ZUNvbnRlbnRTZWN1cml0eVBvbGljeVNI
QTI1Nkhhc2goY29uc3QgRWxlbWVudCYgZWxlbWVudCkKQEAgLTE1OTcsOSArMTY2Niw5IEBAIHN0
YXRpYyBTdHJpbmcgY29tcHV0ZUNvbnRlbnRTZWN1cml0eVBvbGljeVNIQTI1Nkhhc2goY29uc3Qg
RWxlbWVudCYgZWxlbWVudCkKICAgICByZXR1cm4gbWFrZVN0cmluZygic2hhMjU2LSIsIGJhc2U2
NEVuY29kZShkaWdlc3QuZGF0YSgpLCBkaWdlc3Quc2l6ZSgpKSk7CiB9CiAKLVJlZjxJbnNwZWN0
b3I6OlByb3RvY29sOjpET006Ok5vZGU+IEluc3BlY3RvckRPTUFnZW50OjpidWlsZE9iamVjdEZv
ck5vZGUoTm9kZSogbm9kZSwgaW50IGRlcHRoLCBOb2RlVG9JZE1hcCogbm9kZXNNYXApCitSZWY8
UHJvdG9jb2w6OkRPTTo6Tm9kZT4gSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yTm9k
ZShOb2RlKiBub2RlLCBpbnQgZGVwdGgsIE5vZGVUb0lkTWFwKiBub2Rlc01hcCkKIHsKLSAgICBp
bnQgaWQgPSBiaW5kKG5vZGUsIG5vZGVzTWFwKTsKKyAgICBhdXRvIGlkID0gYmluZChub2RlLCBu
b2Rlc01hcCk7CiAgICAgU3RyaW5nIG5vZGVOYW1lOwogICAgIFN0cmluZyBsb2NhbE5hbWU7CiAg
ICAgU3RyaW5nIG5vZGVWYWx1ZTsKQEAgLTE2MzAsNyArMTY5OSw3IEBAIFJlZjxJbnNwZWN0b3I6
OlByb3RvY29sOjpET006Ok5vZGU+IEluc3BlY3RvckRPTUFnZW50OjpidWlsZE9iamVjdEZvck5v
ZGUoTm9kZSoKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgYXV0byB2YWx1ZSA9IEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZTo6Y3JlYXRlKCkKKyAgICBhdXRvIHZhbHVlID0gUHJv
dG9jb2w6OkRPTTo6Tm9kZTo6Y3JlYXRlKCkKICAgICAgICAgLnNldE5vZGVJZChpZCkKICAgICAg
ICAgLnNldE5vZGVUeXBlKHN0YXRpY19jYXN0PGludD4obm9kZS0+bm9kZVR5cGUoKSkpCiAgICAg
ICAgIC5zZXROb2RlTmFtZShub2RlTmFtZSkKQEAgLTE2NDEsNyArMTcxMCw3IEBAIFJlZjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+IEluc3BlY3RvckRPTUFnZW50OjpidWlsZE9iamVj
dEZvck5vZGUoTm9kZSoKICAgICBpZiAobm9kZS0+aXNDb250YWluZXJOb2RlKCkpIHsKICAgICAg
ICAgaW50IG5vZGVDb3VudCA9IGlubmVyQ2hpbGROb2RlQ291bnQobm9kZSk7CiAgICAgICAgIHZh
bHVlLT5zZXRDaGlsZE5vZGVDb3VudChub2RlQ291bnQpOwotICAgICAgICBSZWY8SlNPTjo6QXJy
YXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+PiBjaGlsZHJlbiA9IGJ1aWxkQXJy
YXlGb3JDb250YWluZXJDaGlsZHJlbihub2RlLCBkZXB0aCwgbm9kZXNNYXApOworICAgICAgICBS
ZWY8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6RE9NOjpOb2RlPj4gY2hpbGRyZW4gPSBidWlsZEFy
cmF5Rm9yQ29udGFpbmVyQ2hpbGRyZW4obm9kZSwgZGVwdGgsIG5vZGVzTWFwKTsKICAgICAgICAg
aWYgKGNoaWxkcmVuLT5sZW5ndGgoKSA+IDApCiAgICAgICAgICAgICB2YWx1ZS0+c2V0Q2hpbGRy
ZW4oV1RGTW92ZShjaGlsZHJlbikpOwogICAgIH0KQEAgLTE2NjEsNyArMTczMCw3IEBAIFJlZjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+IEluc3BlY3RvckRPTUFnZW50OjpidWlsZE9i
amVjdEZvck5vZGUoTm9kZSoKICAgICAgICAgfQogCiAgICAgICAgIGlmIChTaGFkb3dSb290KiBy
b290ID0gZWxlbWVudC5zaGFkb3dSb290KCkpIHsKLSAgICAgICAgICAgIGF1dG8gc2hhZG93Um9v
dHMgPSBKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZT46OmNyZWF0
ZSgpOworICAgICAgICAgICAgYXV0byBzaGFkb3dSb290cyA9IEpTT046OkFycmF5T2Y8UHJvdG9j
b2w6OkRPTTo6Tm9kZT46OmNyZWF0ZSgpOwogICAgICAgICAgICAgc2hhZG93Um9vdHMtPmFkZEl0
ZW0oYnVpbGRPYmplY3RGb3JOb2RlKHJvb3QsIDAsIG5vZGVzTWFwKSk7CiAgICAgICAgICAgICB2
YWx1ZS0+c2V0U2hhZG93Um9vdHMoV1RGTW92ZShzaGFkb3dSb290cykpOwogICAgICAgICB9CkBA
IC0xNjczLDE2ICsxNzQyLDE2IEBAIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+
IEluc3BlY3RvckRPTUFnZW50OjpidWlsZE9iamVjdEZvck5vZGUoTm9kZSoKICAgICAgICAgICAg
IHZhbHVlLT5zZXRDb250ZW50U2VjdXJpdHlQb2xpY3lIYXNoKGNvbXB1dGVDb250ZW50U2VjdXJp
dHlQb2xpY3lTSEEyNTZIYXNoKGVsZW1lbnQpKTsKIAogICAgICAgICBhdXRvIHN0YXRlID0gY3Vz
dG9tRWxlbWVudFN0YXRlKGVsZW1lbnQpOwotICAgICAgICBpZiAoc3RhdGUgIT0gSW5zcGVjdG9y
OjpQcm90b2NvbDo6RE9NOjpDdXN0b21FbGVtZW50U3RhdGU6OkJ1aWx0aW4pCisgICAgICAgIGlm
IChzdGF0ZSAhPSBQcm90b2NvbDo6RE9NOjpDdXN0b21FbGVtZW50U3RhdGU6OkJ1aWx0aW4pCiAg
ICAgICAgICAgICB2YWx1ZS0+c2V0Q3VzdG9tRWxlbWVudFN0YXRlKHN0YXRlKTsKIAogICAgICAg
ICBpZiAoZWxlbWVudC5wc2V1ZG9JZCgpICE9IFBzZXVkb0lkOjpOb25lKSB7Ci0gICAgICAgICAg
ICBJbnNwZWN0b3I6OlByb3RvY29sOjpET006OlBzZXVkb1R5cGUgcHNldWRvVHlwZTsKKyAgICAg
ICAgICAgIFByb3RvY29sOjpET006OlBzZXVkb1R5cGUgcHNldWRvVHlwZTsKICAgICAgICAgICAg
IGlmIChwc2V1ZG9FbGVtZW50VHlwZShlbGVtZW50LnBzZXVkb0lkKCksICZwc2V1ZG9UeXBlKSkK
ICAgICAgICAgICAgICAgICB2YWx1ZS0+c2V0UHNldWRvVHlwZShwc2V1ZG9UeXBlKTsKICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgIGlmIChhdXRvIHBzZXVkb0VsZW1lbnRzID0gYnVpbGRB
cnJheUZvclBzZXVkb0VsZW1lbnRzKGVsZW1lbnQsIG5vZGVzTWFwKSkKLSAgICAgICAgICAgICAg
ICB2YWx1ZS0+c2V0UHNldWRvRWxlbWVudHMoV1RGTW92ZShwc2V1ZG9FbGVtZW50cykpOworICAg
ICAgICAgICAgICAgIHZhbHVlLT5zZXRQc2V1ZG9FbGVtZW50cyhwc2V1ZG9FbGVtZW50cy5yZWxl
YXNlTm9uTnVsbCgpKTsKICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAoaXM8RG9jdW1lbnQ+KCpu
b2RlKSkgewogICAgICAgICBEb2N1bWVudCYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4o
Km5vZGUpOwpAQCAtMTcyMSw5ICsxNzkwLDkgQEAgUmVmPEpTT046OkFycmF5T2Y8U3RyaW5nPj4g
SW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkQXJyYXlGb3JFbGVtZW50QXR0cmlidXRlcyhFbGUKICAg
ICByZXR1cm4gYXR0cmlidXRlc1ZhbHVlOwogfQogCi1SZWY8SlNPTjo6QXJyYXlPZjxJbnNwZWN0
b3I6OlByb3RvY29sOjpET006Ok5vZGU+PiBJbnNwZWN0b3JET01BZ2VudDo6YnVpbGRBcnJheUZv
ckNvbnRhaW5lckNoaWxkcmVuKE5vZGUqIGNvbnRhaW5lciwgaW50IGRlcHRoLCBOb2RlVG9JZE1h
cCogbm9kZXNNYXApCitSZWY8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6RE9NOjpOb2RlPj4gSW5z
cGVjdG9yRE9NQWdlbnQ6OmJ1aWxkQXJyYXlGb3JDb250YWluZXJDaGlsZHJlbihOb2RlKiBjb250
YWluZXIsIGludCBkZXB0aCwgTm9kZVRvSWRNYXAqIG5vZGVzTWFwKQogewotICAgIGF1dG8gY2hp
bGRyZW4gPSBKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZT46OmNy
ZWF0ZSgpOworICAgIGF1dG8gY2hpbGRyZW4gPSBKU09OOjpBcnJheU9mPFByb3RvY29sOjpET006
Ok5vZGU+OjpjcmVhdGUoKTsKICAgICBpZiAoZGVwdGggPT0gMCkgewogICAgICAgICAvLyBTcGVj
aWFsLWNhc2UgdGhlIG9ubHkgdGV4dCBjaGlsZCAtIHByZXRlbmQgdGhhdCBjb250YWluZXIncyBj
aGlsZHJlbiBoYXZlIGJlZW4gcmVxdWVzdGVkLgogICAgICAgICBOb2RlKiBmaXJzdENoaWxkID0g
Y29udGFpbmVyLT5maXJzdENoaWxkKCk7CkBAIC0xNzQ1LDE0ICsxODE0LDE0IEBAIFJlZjxKU09O
OjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZT4+IEluc3BlY3RvckRPTUFn
ZW50OjpidWlsZEFycmF5CiAgICAgcmV0dXJuIGNoaWxkcmVuOwogfQogCi1SZWZQdHI8SlNPTjo6
QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+PiBJbnNwZWN0b3JET01BZ2Vu
dDo6YnVpbGRBcnJheUZvclBzZXVkb0VsZW1lbnRzKGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQsIE5v
ZGVUb0lkTWFwKiBub2Rlc01hcCkKK1JlZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpET006
Ok5vZGU+PiBJbnNwZWN0b3JET01BZ2VudDo6YnVpbGRBcnJheUZvclBzZXVkb0VsZW1lbnRzKGNv
bnN0IEVsZW1lbnQmIGVsZW1lbnQsIE5vZGVUb0lkTWFwKiBub2Rlc01hcCkKIHsKICAgICBQc2V1
ZG9FbGVtZW50KiBiZWZvcmVFbGVtZW50ID0gZWxlbWVudC5iZWZvcmVQc2V1ZG9FbGVtZW50KCk7
CiAgICAgUHNldWRvRWxlbWVudCogYWZ0ZXJFbGVtZW50ID0gZWxlbWVudC5hZnRlclBzZXVkb0Vs
ZW1lbnQoKTsKICAgICBpZiAoIWJlZm9yZUVsZW1lbnQgJiYgIWFmdGVyRWxlbWVudCkKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBhdXRvIHBzZXVkb0VsZW1lbnRzID0gSlNPTjo6QXJy
YXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+OjpjcmVhdGUoKTsKKyAgICBhdXRv
IHBzZXVkb0VsZW1lbnRzID0gSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6RE9NOjpOb2RlPjo6Y3Jl
YXRlKCk7CiAgICAgaWYgKGJlZm9yZUVsZW1lbnQpCiAgICAgICAgIHBzZXVkb0VsZW1lbnRzLT5h
ZGRJdGVtKGJ1aWxkT2JqZWN0Rm9yTm9kZShiZWZvcmVFbGVtZW50LCAwLCBub2Rlc01hcCkpOwog
ICAgIGlmIChhZnRlckVsZW1lbnQpCkBAIC0xNzYwLDcgKzE4MjksNyBAQCBSZWZQdHI8SlNPTjo6
QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+PiBJbnNwZWN0b3JET01BZ2Vu
dDo6YnVpbGRBcgogICAgIHJldHVybiBwc2V1ZG9FbGVtZW50czsKIH0KIAotUmVmPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRPTTo6RXZlbnRMaXN0ZW5lcj4gSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxk
T2JqZWN0Rm9yRXZlbnRMaXN0ZW5lcihjb25zdCBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lciYgcmVn
aXN0ZXJlZEV2ZW50TGlzdGVuZXIsIGludCBpZGVudGlmaWVyLCBFdmVudFRhcmdldCYgZXZlbnRU
YXJnZXQsIGNvbnN0IEF0b21TdHJpbmcmIGV2ZW50VHlwZSwgYm9vbCBkaXNhYmxlZCwgY29uc3Qg
UmVmUHRyPEpTQzo6QnJlYWtwb2ludD4mIGJyZWFrcG9pbnQpCitSZWY8UHJvdG9jb2w6OkRPTTo6
RXZlbnRMaXN0ZW5lcj4gSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yRXZlbnRMaXN0
ZW5lcihjb25zdCBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lciYgcmVnaXN0ZXJlZEV2ZW50TGlzdGVu
ZXIsIFByb3RvY29sOjpET006OkV2ZW50TGlzdGVuZXJJZCBpZGVudGlmaWVyLCBFdmVudFRhcmdl
dCYgZXZlbnRUYXJnZXQsIGNvbnN0IEF0b21TdHJpbmcmIGV2ZW50VHlwZSwgYm9vbCBkaXNhYmxl
ZCwgY29uc3QgUmVmUHRyPEpTQzo6QnJlYWtwb2ludD4mIGJyZWFrcG9pbnQpCiB7CiAgICAgUmVm
PEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXIgPSByZWdpc3RlcmVkRXZlbnRMaXN0ZW5lci5j
YWxsYmFjaygpOwogCkBAIC0xODIyLDcgKzE4OTEsNyBAQCBSZWY8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6RE9NOjpFdmVudExpc3RlbmVyPiBJbnNwZWN0b3JET01BZ2VudDo6YnVpbGRPYmplY3RGb3JF
dgogICAgICAgICB9CiAgICAgfQogCi0gICAgYXV0byB2YWx1ZSA9IEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRPTTo6RXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKCkKKyAgICBhdXRvIHZhbHVlID0gUHJvdG9j
b2w6OkRPTTo6RXZlbnRMaXN0ZW5lcjo6Y3JlYXRlKCkKICAgICAgICAgLnNldEV2ZW50TGlzdGVu
ZXJJZChpZGVudGlmaWVyKQogICAgICAgICAuc2V0VHlwZShldmVudFR5cGUpCiAgICAgICAgIC5z
ZXRVc2VDYXB0dXJlKHJlZ2lzdGVyZWRFdmVudExpc3RlbmVyLnVzZUNhcHR1cmUoKSkKQEAgLTE4
MzMsNyArMTkwMiw3IEBAIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkV2ZW50TGlzdGVu
ZXI+IEluc3BlY3RvckRPTUFnZW50OjpidWlsZE9iamVjdEZvckV2CiAgICAgZWxzZSBpZiAoaXM8
RE9NV2luZG93PihldmVudFRhcmdldCkpCiAgICAgICAgIHZhbHVlLT5zZXRPbldpbmRvdyh0cnVl
KTsKICAgICBpZiAoIXNjcmlwdElELmlzTnVsbCgpKSB7Ci0gICAgICAgIGF1dG8gbG9jYXRpb24g
PSBJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6TG9jYXRpb246OmNyZWF0ZSgpCisgICAg
ICAgIGF1dG8gbG9jYXRpb24gPSBQcm90b2NvbDo6RGVidWdnZXI6OkxvY2F0aW9uOjpjcmVhdGUo
KQogICAgICAgICAgICAgLnNldFNjcmlwdElkKHNjcmlwdElEKQogICAgICAgICAgICAgLnNldExp
bmVOdW1iZXIobGluZU51bWJlcikKICAgICAgICAgICAgIC5yZWxlYXNlKCk7CkBAIC0xODUzLDcg
KzE5MjIsNyBAQCBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpFdmVudExpc3RlbmVyPiBJ
bnNwZWN0b3JET01BZ2VudDo6YnVpbGRPYmplY3RGb3JFdgogICAgIHJldHVybiB2YWx1ZTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6cHJvY2Vzc0FjY2Vzc2liaWxpdHlDaGlsZHJlbihB
WENvcmVPYmplY3QmIGF4T2JqZWN0LCBKU09OOjpBcnJheU9mPGludD4mIGNoaWxkTm9kZUlkcykK
K3ZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnByb2Nlc3NBY2Nlc3NpYmlsaXR5Q2hpbGRyZW4oQVhD
b3JlT2JqZWN0JiBheE9iamVjdCwgSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6RE9NOjpOb2RlSWQ+
JiBjaGlsZE5vZGVJZHMpCiB7CiAgICAgY29uc3QgYXV0byYgY2hpbGRyZW4gPSBheE9iamVjdC5j
aGlsZHJlbigpOwogICAgIGlmICghY2hpbGRyZW4uc2l6ZSgpKQpAQCAtMTg2Nyw0MyArMTkzNiwz
OSBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50Ojpwcm9jZXNzQWNjZXNzaWJpbGl0eUNoaWxkcmVu
KEFYQ29yZU9iamVjdCYgYXhPYmplY3QsIEpTTwogICAgIH0KIH0KICAgICAKLVJlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzPiBJbnNwZWN0b3JE
T01BZ2VudDo6YnVpbGRPYmplY3RGb3JBY2Nlc3NpYmlsaXR5UHJvcGVydGllcyhOb2RlKiBub2Rl
KQorUmVmPFByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzPiBJbnNwZWN0b3JE
T01BZ2VudDo6YnVpbGRPYmplY3RGb3JBY2Nlc3NpYmlsaXR5UHJvcGVydGllcyhOb2RlJiBub2Rl
KQogewotICAgIEFTU0VSVChub2RlKTsKLSAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJldHVybiBu
dWxscHRyOwotCiAgICAgaWYgKCFXZWJDb3JlOjpBWE9iamVjdENhY2hlOjphY2Nlc3NpYmlsaXR5
RW5hYmxlZCgpKQogICAgICAgICBXZWJDb3JlOjpBWE9iamVjdENhY2hlOjplbmFibGVBY2Nlc3Np
YmlsaXR5KCk7CiAKICAgICBOb2RlKiBhY3RpdmVEZXNjZW5kYW50Tm9kZSA9IG51bGxwdHI7CiAg
ICAgYm9vbCBidXN5ID0gZmFsc2U7Ci0gICAgYXV0byBjaGVja2VkID0gSW5zcGVjdG9yOjpQcm90
b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6Q2hlY2tlZDo6RmFsc2U7Ci0gICAg
UmVmUHRyPEpTT046OkFycmF5T2Y8aW50Pj4gY2hpbGROb2RlSWRzOwotICAgIFJlZlB0cjxKU09O
OjpBcnJheU9mPGludD4+IGNvbnRyb2xsZWROb2RlSWRzOwotICAgIGF1dG8gY3VycmVudFN0YXRl
ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6Q3Vy
cmVudDo6RmFsc2U7CisgICAgYXV0byBjaGVja2VkID0gUHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJp
bGl0eVByb3BlcnRpZXM6OkNoZWNrZWQ6OkZhbHNlOworICAgIFJlZlB0cjxKU09OOjpBcnJheU9m
PFByb3RvY29sOjpET006Ok5vZGVJZD4+IGNoaWxkTm9kZUlkczsKKyAgICBSZWZQdHI8SlNPTjo6
QXJyYXlPZjxQcm90b2NvbDo6RE9NOjpOb2RlSWQ+PiBjb250cm9sbGVkTm9kZUlkczsKKyAgICBh
dXRvIGN1cnJlbnRTdGF0ZSA9IFByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVz
OjpDdXJyZW50OjpGYWxzZTsKICAgICBib29sIGV4aXN0cyA9IGZhbHNlOwogICAgIGJvb2wgZXhw
YW5kZWQgPSBmYWxzZTsKICAgICBib29sIGRpc2FibGVkID0gZmFsc2U7Ci0gICAgUmVmUHRyPEpT
T046OkFycmF5T2Y8aW50Pj4gZmxvd2VkTm9kZUlkczsKKyAgICBSZWZQdHI8SlNPTjo6QXJyYXlP
ZjxQcm90b2NvbDo6RE9NOjpOb2RlSWQ+PiBmbG93ZWROb2RlSWRzOwogICAgIGJvb2wgZm9jdXNl
ZCA9IGZhbHNlOwogICAgIGJvb2wgaWdub3JlZCA9IHRydWU7CiAgICAgYm9vbCBpZ25vcmVkQnlE
ZWZhdWx0ID0gZmFsc2U7Ci0gICAgYXV0byBpbnZhbGlkID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6
RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6SW52YWxpZDo6RmFsc2U7CisgICAgYXV0byBp
bnZhbGlkID0gUHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6OkludmFsaWQ6
OkZhbHNlOwogICAgIGJvb2wgaGlkZGVuID0gZmFsc2U7CiAgICAgU3RyaW5nIGxhYmVsOwogICAg
IGJvb2wgbGl2ZVJlZ2lvbkF0b21pYyA9IGZhbHNlOwogICAgIFJlZlB0cjxKU09OOjpBcnJheU9m
PFN0cmluZz4+IGxpdmVSZWdpb25SZWxldmFudDsKLSAgICBhdXRvIGxpdmVSZWdpb25TdGF0dXMg
PSBJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpMaXZl
UmVnaW9uU3RhdHVzOjpPZmY7CisgICAgYXV0byBsaXZlUmVnaW9uU3RhdHVzID0gUHJvdG9jb2w6
OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6OkxpdmVSZWdpb25TdGF0dXM6Ok9mZjsKICAg
ICBOb2RlKiBtb3VzZUV2ZW50Tm9kZSA9IG51bGxwdHI7Ci0gICAgUmVmUHRyPEpTT046OkFycmF5
T2Y8aW50Pj4gb3duZWROb2RlSWRzOworICAgIFJlZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29s
OjpET006Ok5vZGVJZD4+IG93bmVkTm9kZUlkczsKICAgICBOb2RlKiBwYXJlbnROb2RlID0gbnVs
bHB0cjsKICAgICBib29sIHByZXNzZWQgPSBmYWxzZTsKICAgICBib29sIHJlYWRvbmx5ID0gZmFs
c2U7CiAgICAgYm9vbCByZXF1aXJlZCA9IGZhbHNlOwogICAgIFN0cmluZyByb2xlOwogICAgIGJv
b2wgc2VsZWN0ZWQgPSBmYWxzZTsKLSAgICBSZWZQdHI8SlNPTjo6QXJyYXlPZjxpbnQ+PiBzZWxl
Y3RlZENoaWxkTm9kZUlkczsKKyAgICBSZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6RE9N
OjpOb2RlSWQ+PiBzZWxlY3RlZENoaWxkTm9kZUlkczsKICAgICBib29sIHN1cHBvcnRzQ2hlY2tl
ZCA9IGZhbHNlOwogICAgIGJvb2wgc3VwcG9ydHNFeHBhbmRlZCA9IGZhbHNlOwogICAgIGJvb2wg
c3VwcG9ydHNMaXZlUmVnaW9uID0gZmFsc2U7CkBAIC0xOTE1LDggKzE5ODAsOCBAQCBSZWZQdHI8
SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllcz4gSW5zcGVj
dG9yRE9NQWdlbnQ6OmJ1aQogICAgIHVuc2lnbmVkIGhpZXJhcmNoaWNhbExldmVsID0gMDsKICAg
ICB1bnNpZ25lZCBsZXZlbCA9IDA7CiAKLSAgICBpZiAoQVhPYmplY3RDYWNoZSogYXhPYmplY3RD
YWNoZSA9IG5vZGUtPmRvY3VtZW50KCkuYXhPYmplY3RDYWNoZSgpKSB7Ci0gICAgICAgIGlmIChB
WENvcmVPYmplY3QqIGF4T2JqZWN0ID0gYXhPYmplY3RDYWNoZS0+Z2V0T3JDcmVhdGUobm9kZSkp
IHsKKyAgICBpZiAoQVhPYmplY3RDYWNoZSogYXhPYmplY3RDYWNoZSA9IG5vZGUuZG9jdW1lbnQo
KS5heE9iamVjdENhY2hlKCkpIHsKKyAgICAgICAgaWYgKEFYQ29yZU9iamVjdCogYXhPYmplY3Qg
PSBheE9iamVjdENhY2hlLT5nZXRPckNyZWF0ZSgmbm9kZSkpIHsKIAogICAgICAgICAgICAgaWYg
KEFYQ29yZU9iamVjdCogYWN0aXZlRGVzY2VuZGFudCA9IGF4T2JqZWN0LT5hY3RpdmVEZXNjZW5k
YW50KCkpCiAgICAgICAgICAgICAgICAgYWN0aXZlRGVzY2VuZGFudE5vZGUgPSBhY3RpdmVEZXNj
ZW5kYW50LT5ub2RlKCk7CkBAIC0xOTMyLDQ3ICsxOTk3LDQ5IEBAIFJlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzPiBJbnNwZWN0b3JET01BZ2Vu
dDo6YnVpCiAgICAgICAgICAgICBpZiAoc3VwcG9ydHNDaGVja2VkKSB7CiAgICAgICAgICAgICAg
ICAgQWNjZXNzaWJpbGl0eUJ1dHRvblN0YXRlIGNoZWNrVmFsdWUgPSBheE9iamVjdC0+Y2hlY2ti
b3hPclJhZGlvVmFsdWUoKTsgLy8gRWxlbWVudCB1c2luZyBhcmlhLWNoZWNrZWQuCiAgICAgICAg
ICAgICAgICAgaWYgKGNoZWNrVmFsdWUgPT0gQWNjZXNzaWJpbGl0eUJ1dHRvblN0YXRlOjpPbikK
LSAgICAgICAgICAgICAgICAgICAgY2hlY2tlZCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6
QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6OkNoZWNrZWQ6OlRydWU7CisgICAgICAgICAgICAgICAg
ICAgIGNoZWNrZWQgPSBQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6Q2hl
Y2tlZDo6VHJ1ZTsKICAgICAgICAgICAgICAgICBlbHNlIGlmIChjaGVja1ZhbHVlID09IEFjY2Vz
c2liaWxpdHlCdXR0b25TdGF0ZTo6TWl4ZWQpCi0gICAgICAgICAgICAgICAgICAgIGNoZWNrZWQg
PSBJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpDaGVj
a2VkOjpNaXhlZDsKKyAgICAgICAgICAgICAgICAgICAgY2hlY2tlZCA9IFByb3RvY29sOjpET006
OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpDaGVja2VkOjpNaXhlZDsKICAgICAgICAgICAgICAg
ICBlbHNlIGlmIChheE9iamVjdC0+aXNDaGVja2VkKCkpIC8vIE5hdGl2ZSBjaGVja2JveC4KLSAg
ICAgICAgICAgICAgICAgICAgY2hlY2tlZCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6QWNj
ZXNzaWJpbGl0eVByb3BlcnRpZXM6OkNoZWNrZWQ6OlRydWU7CisgICAgICAgICAgICAgICAgICAg
IGNoZWNrZWQgPSBQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6Q2hlY2tl
ZDo6VHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKCFh
eE9iamVjdC0+Y2hpbGRyZW4oKS5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICBjaGlsZE5v
ZGVJZHMgPSBKU09OOjpBcnJheU9mPGludD46OmNyZWF0ZSgpOworICAgICAgICAgICAgICAgIGNo
aWxkTm9kZUlkcyA9IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkRPTTo6Tm9kZUlkPjo6Y3JlYXRl
KCk7CiAgICAgICAgICAgICAgICAgcHJvY2Vzc0FjY2Vzc2liaWxpdHlDaGlsZHJlbigqYXhPYmpl
Y3QsICpjaGlsZE5vZGVJZHMpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAg
ICAgICBWZWN0b3I8RWxlbWVudCo+IGNvbnRyb2xsZWRFbGVtZW50czsKICAgICAgICAgICAgIGF4
T2JqZWN0LT5lbGVtZW50c0Zyb21BdHRyaWJ1dGUoY29udHJvbGxlZEVsZW1lbnRzLCBhcmlhX2Nv
bnRyb2xzQXR0cik7CiAgICAgICAgICAgICBpZiAoY29udHJvbGxlZEVsZW1lbnRzLnNpemUoKSkg
ewotICAgICAgICAgICAgICAgIGNvbnRyb2xsZWROb2RlSWRzID0gSlNPTjo6QXJyYXlPZjxpbnQ+
OjpjcmVhdGUoKTsKLSAgICAgICAgICAgICAgICBmb3IgKEVsZW1lbnQqIGNvbnRyb2xsZWRFbGVt
ZW50IDogY29udHJvbGxlZEVsZW1lbnRzKQotICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVk
Tm9kZUlkcy0+YWRkSXRlbShwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKGNvbnRyb2xsZWRFbGVtZW50
KSk7CisgICAgICAgICAgICAgICAgY29udHJvbGxlZE5vZGVJZHMgPSBKU09OOjpBcnJheU9mPFBy
b3RvY29sOjpET006Ok5vZGVJZD46OmNyZWF0ZSgpOworICAgICAgICAgICAgICAgIGZvciAoRWxl
bWVudCogY29udHJvbGxlZEVsZW1lbnQgOiBjb250cm9sbGVkRWxlbWVudHMpIHsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKGF1dG8gY29udHJvbGxlZEVsZW1lbnRJZCA9IHB1c2hOb2RlUGF0aFRv
RnJvbnRlbmQoY29udHJvbGxlZEVsZW1lbnQpKQorICAgICAgICAgICAgICAgICAgICAgICAgY29u
dHJvbGxlZE5vZGVJZHMtPmFkZEl0ZW0oY29udHJvbGxlZEVsZW1lbnRJZCk7CisgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICBzd2l0Y2gg
KGF4T2JqZWN0LT5jdXJyZW50U3RhdGUoKSkgewogICAgICAgICAgICAgY2FzZSBBY2Nlc3NpYmls
aXR5Q3VycmVudFN0YXRlOjpGYWxzZToKLSAgICAgICAgICAgICAgICBjdXJyZW50U3RhdGUgPSBJ
bnNwZWN0b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpDdXJyZW50
OjpGYWxzZTsKKyAgICAgICAgICAgICAgICBjdXJyZW50U3RhdGUgPSBQcm90b2NvbDo6RE9NOjpB
Y2Nlc3NpYmlsaXR5UHJvcGVydGllczo6Q3VycmVudDo6RmFsc2U7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICBjYXNlIEFjY2Vzc2liaWxpdHlDdXJyZW50U3RhdGU6OlBhZ2U6
Ci0gICAgICAgICAgICAgICAgY3VycmVudFN0YXRlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9N
OjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6Q3VycmVudDo6UGFnZTsKKyAgICAgICAgICAgICAg
ICBjdXJyZW50U3RhdGUgPSBQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6
Q3VycmVudDo6UGFnZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2Ug
QWNjZXNzaWJpbGl0eUN1cnJlbnRTdGF0ZTo6U3RlcDoKLSAgICAgICAgICAgICAgICBjdXJyZW50
U3RhdGUgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVz
OjpDdXJyZW50OjpTdGVwOworICAgICAgICAgICAgICAgIGN1cnJlbnRTdGF0ZSA9IFByb3RvY29s
OjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpDdXJyZW50OjpTdGVwOwogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBBY2Nlc3NpYmlsaXR5Q3VycmVudFN0YXRl
OjpMb2NhdGlvbjoKLSAgICAgICAgICAgICAgICBjdXJyZW50U3RhdGUgPSBJbnNwZWN0b3I6OlBy
b3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpDdXJyZW50OjpMb2NhdGlvbjsK
KyAgICAgICAgICAgICAgICBjdXJyZW50U3RhdGUgPSBQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmls
aXR5UHJvcGVydGllczo6Q3VycmVudDo6TG9jYXRpb247CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICBjYXNlIEFjY2Vzc2liaWxpdHlDdXJyZW50U3RhdGU6OkRhdGU6Ci0gICAg
ICAgICAgICAgICAgY3VycmVudFN0YXRlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nl
c3NpYmlsaXR5UHJvcGVydGllczo6Q3VycmVudDo6RGF0ZTsKKyAgICAgICAgICAgICAgICBjdXJy
ZW50U3RhdGUgPSBQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6Q3VycmVu
dDo6RGF0ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgQWNjZXNz
aWJpbGl0eUN1cnJlbnRTdGF0ZTo6VGltZToKLSAgICAgICAgICAgICAgICBjdXJyZW50U3RhdGUg
PSBJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpDdXJy
ZW50OjpUaW1lOworICAgICAgICAgICAgICAgIGN1cnJlbnRTdGF0ZSA9IFByb3RvY29sOjpET006
OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpDdXJyZW50OjpUaW1lOwogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgY2FzZSBBY2Nlc3NpYmlsaXR5Q3VycmVudFN0YXRlOjpUcnVl
OgotICAgICAgICAgICAgICAgIGN1cnJlbnRTdGF0ZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRP
TTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6OkN1cnJlbnQ6OlRydWU7CisgICAgICAgICAgICAg
ICAgY3VycmVudFN0YXRlID0gUHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6
OkN1cnJlbnQ6OlRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAK
QEAgLTE5ODYsMTIgKzIwNTMsMTQgQEAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6
QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM+IEluc3BlY3RvckRPTUFnZW50OjpidWkKICAgICAgICAg
ICAgIFZlY3RvcjxFbGVtZW50Kj4gZmxvd2VkRWxlbWVudHM7CiAgICAgICAgICAgICBheE9iamVj
dC0+ZWxlbWVudHNGcm9tQXR0cmlidXRlKGZsb3dlZEVsZW1lbnRzLCBhcmlhX2Zsb3d0b0F0dHIp
OwogICAgICAgICAgICAgaWYgKGZsb3dlZEVsZW1lbnRzLnNpemUoKSkgewotICAgICAgICAgICAg
ICAgIGZsb3dlZE5vZGVJZHMgPSBKU09OOjpBcnJheU9mPGludD46OmNyZWF0ZSgpOwotICAgICAg
ICAgICAgICAgIGZvciAoRWxlbWVudCogZmxvd2VkRWxlbWVudCA6IGZsb3dlZEVsZW1lbnRzKQot
ICAgICAgICAgICAgICAgICAgICBmbG93ZWROb2RlSWRzLT5hZGRJdGVtKHB1c2hOb2RlUGF0aFRv
RnJvbnRlbmQoZmxvd2VkRWxlbWVudCkpOworICAgICAgICAgICAgICAgIGZsb3dlZE5vZGVJZHMg
PSBKU09OOjpBcnJheU9mPFByb3RvY29sOjpET006Ok5vZGVJZD46OmNyZWF0ZSgpOworICAgICAg
ICAgICAgICAgIGZvciAoRWxlbWVudCogZmxvd2VkRWxlbWVudCA6IGZsb3dlZEVsZW1lbnRzKSB7
CisgICAgICAgICAgICAgICAgICAgIGlmIChhdXRvIGZsb3dlZEVsZW1lbnRJZCA9IHB1c2hOb2Rl
UGF0aFRvRnJvbnRlbmQoZmxvd2VkRWxlbWVudCkpCisgICAgICAgICAgICAgICAgICAgICAgICBm
bG93ZWROb2RlSWRzLT5hZGRJdGVtKGZsb3dlZEVsZW1lbnRJZCk7CisgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoaXM8RWxlbWVu
dD4oKm5vZGUpKSB7CisgICAgICAgICAgICBpZiAoaXM8RWxlbWVudD4obm9kZSkpIHsKICAgICAg
ICAgICAgICAgICBzdXBwb3J0c0ZvY3VzZWQgPSBheE9iamVjdC0+Y2FuU2V0Rm9jdXNBdHRyaWJ1
dGUoKTsKICAgICAgICAgICAgICAgICBpZiAoc3VwcG9ydHNGb2N1c2VkKQogICAgICAgICAgICAg
ICAgICAgICBmb2N1c2VkID0gYXhPYmplY3QtPmlzRm9jdXNlZCgpOwpAQCAtMjAwMiwxMyArMjA3
MSwxMyBAQCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJv
cGVydGllcz4gSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aQogICAgICAgICAgICAgCiAgICAgICAgICAg
ICBTdHJpbmcgaW52YWxpZFZhbHVlID0gYXhPYmplY3QtPmludmFsaWRTdGF0dXMoKTsKICAgICAg
ICAgICAgIGlmIChpbnZhbGlkVmFsdWUgPT0gImZhbHNlIikKLSAgICAgICAgICAgICAgICBpbnZh
bGlkID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6
SW52YWxpZDo6RmFsc2U7CisgICAgICAgICAgICAgICAgaW52YWxpZCA9IFByb3RvY29sOjpET006
OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpJbnZhbGlkOjpGYWxzZTsKICAgICAgICAgICAgIGVs
c2UgaWYgKGludmFsaWRWYWx1ZSA9PSAiZ3JhbW1hciIpCi0gICAgICAgICAgICAgICAgaW52YWxp
ZCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6Oklu
dmFsaWQ6OkdyYW1tYXI7CisgICAgICAgICAgICAgICAgaW52YWxpZCA9IFByb3RvY29sOjpET006
OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpJbnZhbGlkOjpHcmFtbWFyOwogICAgICAgICAgICAg
ZWxzZSBpZiAoaW52YWxpZFZhbHVlID09ICJzcGVsbGluZyIpCi0gICAgICAgICAgICAgICAgaW52
YWxpZCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6
OkludmFsaWQ6OlNwZWxsaW5nOworICAgICAgICAgICAgICAgIGludmFsaWQgPSBQcm90b2NvbDo6
RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6SW52YWxpZDo6U3BlbGxpbmc7CiAgICAgICAg
ICAgICBlbHNlIC8vIEZ1dHVyZSB2ZXJzaW9ucyBvZiBBUklBIG1heSBhbGxvdyBhZGRpdGlvbmFs
IHRydXRoeSB2YWx1ZXMuIEV4LiBmb3JtYXQsIG9yZGVyLCBvciBzaXplLgotICAgICAgICAgICAg
ICAgIGludmFsaWQgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9w
ZXJ0aWVzOjpJbnZhbGlkOjpUcnVlOworICAgICAgICAgICAgICAgIGludmFsaWQgPSBQcm90b2Nv
bDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6SW52YWxpZDo6VHJ1ZTsKICAgICAgICAg
ICAgIAogICAgICAgICAgICAgaWYgKGF4T2JqZWN0LT5pc0FYSGlkZGVuKCkgfHwgYXhPYmplY3Qt
PmlzRE9NSGlkZGVuKCkpCiAgICAgICAgICAgICAgICAgaGlkZGVuID0gdHJ1ZTsKQEAgLTIwMjIs
OSArMjA5MSw5IEBAIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxp
dHlQcm9wZXJ0aWVzPiBJbnNwZWN0b3JET01BZ2VudDo6YnVpCiAgICAgICAgICAgICAgICAgU3Ry
aW5nIGFyaWFSZWxldmFudEF0dHJWYWx1ZSA9IGF4T2JqZWN0LT5saXZlUmVnaW9uUmVsZXZhbnQo
KTsKICAgICAgICAgICAgICAgICBpZiAoIWFyaWFSZWxldmFudEF0dHJWYWx1ZS5pc0VtcHR5KCkp
IHsKICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFBhc3MgZW51bSB2YWx1ZXMgcmF0aGVy
IHRoYW4gc3RyaW5ncyBvbmNlIHVuYmxvY2tlZC4gaHR0cDovL3dlYmtpdC5vcmcvYi8xMzM3MTEK
LSAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGFyaWFSZWxldmFudEFkZGl0aW9ucyA9IEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6Okluc3BlY3RvckhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6TGl2ZVJlZ2lvblJlbGV2YW50OjpBZGRpdGlvbnMpOwot
ICAgICAgICAgICAgICAgICAgICBTdHJpbmcgYXJpYVJlbGV2YW50UmVtb3ZhbHMgPSBJbnNwZWN0
b3I6OlByb3RvY29sOjpJbnNwZWN0b3JIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShJbnNw
ZWN0b3I6OlByb3RvY29sOjpET006OkxpdmVSZWdpb25SZWxldmFudDo6UmVtb3ZhbHMpOwotICAg
ICAgICAgICAgICAgICAgICBTdHJpbmcgYXJpYVJlbGV2YW50VGV4dCA9IEluc3BlY3Rvcjo6UHJv
dG9jb2w6Okluc3BlY3RvckhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRPTTo6TGl2ZVJlZ2lvblJlbGV2YW50OjpUZXh0KTsKKyAgICAgICAgICAgICAg
ICAgICAgU3RyaW5nIGFyaWFSZWxldmFudEFkZGl0aW9ucyA9IFByb3RvY29sOjpIZWxwZXJzOjpn
ZXRFbnVtQ29uc3RhbnRWYWx1ZShQcm90b2NvbDo6RE9NOjpMaXZlUmVnaW9uUmVsZXZhbnQ6OkFk
ZGl0aW9ucyk7CisgICAgICAgICAgICAgICAgICAgIFN0cmluZyBhcmlhUmVsZXZhbnRSZW1vdmFs
cyA9IFByb3RvY29sOjpIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShQcm90b2NvbDo6RE9N
OjpMaXZlUmVnaW9uUmVsZXZhbnQ6OlJlbW92YWxzKTsKKyAgICAgICAgICAgICAgICAgICAgU3Ry
aW5nIGFyaWFSZWxldmFudFRleHQgPSBQcm90b2NvbDo6SGVscGVyczo6Z2V0RW51bUNvbnN0YW50
VmFsdWUoUHJvdG9jb2w6OkRPTTo6TGl2ZVJlZ2lvblJlbGV2YW50OjpUZXh0KTsKICAgICAgICAg
ICAgICAgICAgICAgbGl2ZVJlZ2lvblJlbGV2YW50ID0gSlNPTjo6QXJyYXlPZjxTdHJpbmc+Ojpj
cmVhdGUoKTsKICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3BhY2VTcGxpdFN0cmluZyYgdmFs
dWVzID0gU3BhY2VTcGxpdFN0cmluZyhhcmlhUmVsZXZhbnRBdHRyVmFsdWUsIHRydWUpOwogICAg
ICAgICAgICAgICAgICAgICAvLyBAYXJpYS1yZWxldmFudD0iYWxsIiBpcyBleHBvc2VkIGFzIFsi
YWRkaXRpb25zIiwicmVtb3ZhbHMiLCJ0ZXh0Il0sIGluIG9yZGVyLgpAQCAtMjA0NSw5ICsyMTE0
LDkgQEAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3Bl
cnRpZXM+IEluc3BlY3RvckRPTUFnZW50OjpidWkKIAogICAgICAgICAgICAgICAgIFN0cmluZyBh
cmlhTGl2ZSA9IGF4T2JqZWN0LT5saXZlUmVnaW9uU3RhdHVzKCk7CiAgICAgICAgICAgICAgICAg
aWYgKGFyaWFMaXZlID09ICJhc3NlcnRpdmUiKQotICAgICAgICAgICAgICAgICAgICBsaXZlUmVn
aW9uU3RhdHVzID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVy
dGllczo6TGl2ZVJlZ2lvblN0YXR1czo6QXNzZXJ0aXZlOworICAgICAgICAgICAgICAgICAgICBs
aXZlUmVnaW9uU3RhdHVzID0gUHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6
OkxpdmVSZWdpb25TdGF0dXM6OkFzc2VydGl2ZTsKICAgICAgICAgICAgICAgICBlbHNlIGlmIChh
cmlhTGl2ZSA9PSAicG9saXRlIikKLSAgICAgICAgICAgICAgICAgICAgbGl2ZVJlZ2lvblN0YXR1
cyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6Okxp
dmVSZWdpb25TdGF0dXM6OlBvbGl0ZTsKKyAgICAgICAgICAgICAgICAgICAgbGl2ZVJlZ2lvblN0
YXR1cyA9IFByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpMaXZlUmVnaW9u
U3RhdHVzOjpQb2xpdGU7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChpczxBY2Nl
c3NpYmlsaXR5Tm9kZU9iamVjdD4oKmF4T2JqZWN0KSkKQEAgLTIwNTcsOSArMjEyNiwxMSBAQCBS
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllcz4g
SW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aQogICAgICAgICAgICAgICAgIFZlY3RvcjxFbGVtZW50Kj4g
b3duZWRFbGVtZW50czsKICAgICAgICAgICAgICAgICBheE9iamVjdC0+ZWxlbWVudHNGcm9tQXR0
cmlidXRlKG93bmVkRWxlbWVudHMsIGFyaWFfb3duc0F0dHIpOwogICAgICAgICAgICAgICAgIGlm
IChvd25lZEVsZW1lbnRzLnNpemUoKSkgewotICAgICAgICAgICAgICAgICAgICBvd25lZE5vZGVJ
ZHMgPSBKU09OOjpBcnJheU9mPGludD46OmNyZWF0ZSgpOwotICAgICAgICAgICAgICAgICAgICBm
b3IgKEVsZW1lbnQqIG93bmVkRWxlbWVudCA6IG93bmVkRWxlbWVudHMpCi0gICAgICAgICAgICAg
ICAgICAgICAgICBvd25lZE5vZGVJZHMtPmFkZEl0ZW0ocHVzaE5vZGVQYXRoVG9Gcm9udGVuZChv
d25lZEVsZW1lbnQpKTsKKyAgICAgICAgICAgICAgICAgICAgb3duZWROb2RlSWRzID0gSlNPTjo6
QXJyYXlPZjxQcm90b2NvbDo6RE9NOjpOb2RlSWQ+OjpjcmVhdGUoKTsKKyAgICAgICAgICAgICAg
ICAgICAgZm9yIChFbGVtZW50KiBvd25lZEVsZW1lbnQgOiBvd25lZEVsZW1lbnRzKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoYXV0byBvd25lZEVsZW1lbnRJZCA9IHB1c2hOb2RlUGF0
aFRvRnJvbnRlbmQob3duZWRFbGVtZW50KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBv
d25lZE5vZGVJZHMtPmFkZEl0ZW0ob3duZWRFbGVtZW50SWQpOworICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCkBAIC0yMDgzLDEwICsyMTU0
LDEyIEBAIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9w
ZXJ0aWVzPiBJbnNwZWN0b3JET01BZ2VudDo6YnVpCiAgICAgICAgICAgICBBWENvcmVPYmplY3Q6
OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBzZWxlY3RlZENoaWxkcmVuOwogICAgICAgICAg
ICAgYXhPYmplY3QtPnNlbGVjdGVkQ2hpbGRyZW4oc2VsZWN0ZWRDaGlsZHJlbik7CiAgICAgICAg
ICAgICBpZiAoc2VsZWN0ZWRDaGlsZHJlbi5zaXplKCkpIHsKLSAgICAgICAgICAgICAgICBzZWxl
Y3RlZENoaWxkTm9kZUlkcyA9IEpTT046OkFycmF5T2Y8aW50Pjo6Y3JlYXRlKCk7CisgICAgICAg
ICAgICAgICAgc2VsZWN0ZWRDaGlsZE5vZGVJZHMgPSBKU09OOjpBcnJheU9mPFByb3RvY29sOjpE
T006Ok5vZGVJZD46OmNyZWF0ZSgpOwogICAgICAgICAgICAgICAgIGZvciAoYXV0byYgc2VsZWN0
ZWRDaGlsZE9iamVjdCA6IHNlbGVjdGVkQ2hpbGRyZW4pIHsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKE5vZGUqIHNlbGVjdGVkQ2hpbGROb2RlID0gc2VsZWN0ZWRDaGlsZE9iamVjdC0+bm9kZSgp
KQotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRDaGlsZE5vZGVJZHMtPmFkZEl0ZW0o
cHVzaE5vZGVQYXRoVG9Gcm9udGVuZChzZWxlY3RlZENoaWxkTm9kZSkpOworICAgICAgICAgICAg
ICAgICAgICBpZiAoTm9kZSogc2VsZWN0ZWRDaGlsZE5vZGUgPSBzZWxlY3RlZENoaWxkT2JqZWN0
LT5ub2RlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhdXRvIHNlbGVjdGVkQ2hp
bGROb2RlSWQgPSBwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKHNlbGVjdGVkQ2hpbGROb2RlKSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZENoaWxkTm9kZUlkcy0+YWRkSXRlbShz
ZWxlY3RlZENoaWxkTm9kZUlkKTsKKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAtMjA5OCw1NCArMjE3MSw2MCBA
QCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGll
cz4gSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aQogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIFJl
ZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzPiB2YWx1
ZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6OmNy
ZWF0ZSgpCisgICAgUmVmPFByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzPiB2
YWx1ZSA9IFByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpjcmVhdGUoKQog
ICAgICAgICAuc2V0RXhpc3RzKGV4aXN0cykKICAgICAgICAgLnNldExhYmVsKGxhYmVsKQogICAg
ICAgICAuc2V0Um9sZShyb2xlKQotICAgICAgICAuc2V0Tm9kZUlkKHB1c2hOb2RlUGF0aFRvRnJv
bnRlbmQobm9kZSkpCisgICAgICAgIC5zZXROb2RlSWQocHVzaE5vZGVQYXRoVG9Gcm9udGVuZCgm
bm9kZSkpCiAgICAgICAgIC5yZWxlYXNlKCk7CiAKICAgICBpZiAoZXhpc3RzKSB7Ci0gICAgICAg
IGlmIChhY3RpdmVEZXNjZW5kYW50Tm9kZSkKLSAgICAgICAgICAgIHZhbHVlLT5zZXRBY3RpdmVE
ZXNjZW5kYW50Tm9kZUlkKHB1c2hOb2RlUGF0aFRvRnJvbnRlbmQoYWN0aXZlRGVzY2VuZGFudE5v
ZGUpKTsKKyAgICAgICAgaWYgKGFjdGl2ZURlc2NlbmRhbnROb2RlKSB7CisgICAgICAgICAgICBp
ZiAoYXV0byBhY3RpdmVEZXNjZW5kYW50Tm9kZUlkID0gcHVzaE5vZGVQYXRoVG9Gcm9udGVuZChh
Y3RpdmVEZXNjZW5kYW50Tm9kZSkpCisgICAgICAgICAgICAgICAgdmFsdWUtPnNldEFjdGl2ZURl
c2NlbmRhbnROb2RlSWQoYWN0aXZlRGVzY2VuZGFudE5vZGVJZCk7CisgICAgICAgIH0KICAgICAg
ICAgaWYgKGJ1c3kpCiAgICAgICAgICAgICB2YWx1ZS0+c2V0QnVzeShidXN5KTsKICAgICAgICAg
aWYgKHN1cHBvcnRzQ2hlY2tlZCkKICAgICAgICAgICAgIHZhbHVlLT5zZXRDaGVja2VkKGNoZWNr
ZWQpOwogICAgICAgICBpZiAoY2hpbGROb2RlSWRzKQotICAgICAgICAgICAgdmFsdWUtPnNldENo
aWxkTm9kZUlkcyhjaGlsZE5vZGVJZHMpOworICAgICAgICAgICAgdmFsdWUtPnNldENoaWxkTm9k
ZUlkcyhjaGlsZE5vZGVJZHMucmVsZWFzZU5vbk51bGwoKSk7CiAgICAgICAgIGlmIChjb250cm9s
bGVkTm9kZUlkcykKLSAgICAgICAgICAgIHZhbHVlLT5zZXRDb250cm9sbGVkTm9kZUlkcyhjb250
cm9sbGVkTm9kZUlkcyk7Ci0gICAgICAgIGlmIChjdXJyZW50U3RhdGUgIT0gSW5zcGVjdG9yOjpQ
cm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6Q3VycmVudDo6RmFsc2UpCisg
ICAgICAgICAgICB2YWx1ZS0+c2V0Q29udHJvbGxlZE5vZGVJZHMoY29udHJvbGxlZE5vZGVJZHMu
cmVsZWFzZU5vbk51bGwoKSk7CisgICAgICAgIGlmIChjdXJyZW50U3RhdGUgIT0gUHJvdG9jb2w6
OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6OkN1cnJlbnQ6OkZhbHNlKQogICAgICAgICAg
ICAgdmFsdWUtPnNldEN1cnJlbnQoY3VycmVudFN0YXRlKTsKICAgICAgICAgaWYgKGRpc2FibGVk
KQogICAgICAgICAgICAgdmFsdWUtPnNldERpc2FibGVkKGRpc2FibGVkKTsKICAgICAgICAgaWYg
KHN1cHBvcnRzRXhwYW5kZWQpCiAgICAgICAgICAgICB2YWx1ZS0+c2V0RXhwYW5kZWQoZXhwYW5k
ZWQpOwogICAgICAgICBpZiAoZmxvd2VkTm9kZUlkcykKLSAgICAgICAgICAgIHZhbHVlLT5zZXRG
bG93ZWROb2RlSWRzKGZsb3dlZE5vZGVJZHMpOworICAgICAgICAgICAgdmFsdWUtPnNldEZsb3dl
ZE5vZGVJZHMoZmxvd2VkTm9kZUlkcy5yZWxlYXNlTm9uTnVsbCgpKTsKICAgICAgICAgaWYgKHN1
cHBvcnRzRm9jdXNlZCkKICAgICAgICAgICAgIHZhbHVlLT5zZXRGb2N1c2VkKGZvY3VzZWQpOwog
ICAgICAgICBpZiAoaWdub3JlZCkKICAgICAgICAgICAgIHZhbHVlLT5zZXRJZ25vcmVkKGlnbm9y
ZWQpOwogICAgICAgICBpZiAoaWdub3JlZEJ5RGVmYXVsdCkKICAgICAgICAgICAgIHZhbHVlLT5z
ZXRJZ25vcmVkQnlEZWZhdWx0KGlnbm9yZWRCeURlZmF1bHQpOwotICAgICAgICBpZiAoaW52YWxp
ZCAhPSBJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpJ
bnZhbGlkOjpGYWxzZSkKKyAgICAgICAgaWYgKGludmFsaWQgIT0gUHJvdG9jb2w6OkRPTTo6QWNj
ZXNzaWJpbGl0eVByb3BlcnRpZXM6OkludmFsaWQ6OkZhbHNlKQogICAgICAgICAgICAgdmFsdWUt
PnNldEludmFsaWQoaW52YWxpZCk7CiAgICAgICAgIGlmIChoaWRkZW4pCiAgICAgICAgICAgICB2
YWx1ZS0+c2V0SGlkZGVuKGhpZGRlbik7CiAgICAgICAgIGlmIChzdXBwb3J0c0xpdmVSZWdpb24p
IHsKICAgICAgICAgICAgIHZhbHVlLT5zZXRMaXZlUmVnaW9uQXRvbWljKGxpdmVSZWdpb25BdG9t
aWMpOwogICAgICAgICAgICAgaWYgKGxpdmVSZWdpb25SZWxldmFudC0+bGVuZ3RoKCkpCi0gICAg
ICAgICAgICAgICAgdmFsdWUtPnNldExpdmVSZWdpb25SZWxldmFudChsaXZlUmVnaW9uUmVsZXZh
bnQpOworICAgICAgICAgICAgICAgIHZhbHVlLT5zZXRMaXZlUmVnaW9uUmVsZXZhbnQobGl2ZVJl
Z2lvblJlbGV2YW50LnJlbGVhc2VOb25OdWxsKCkpOwogICAgICAgICAgICAgdmFsdWUtPnNldExp
dmVSZWdpb25TdGF0dXMobGl2ZVJlZ2lvblN0YXR1cyk7CiAgICAgICAgIH0KLSAgICAgICAgaWYg
KG1vdXNlRXZlbnROb2RlKQotICAgICAgICAgICAgdmFsdWUtPnNldE1vdXNlRXZlbnROb2RlSWQo
cHVzaE5vZGVQYXRoVG9Gcm9udGVuZChtb3VzZUV2ZW50Tm9kZSkpOworICAgICAgICBpZiAobW91
c2VFdmVudE5vZGUpIHsKKyAgICAgICAgICAgIGlmIChhdXRvIG1vdXNlRXZlbnROb2RlSWQgPSBw
dXNoTm9kZVBhdGhUb0Zyb250ZW5kKG1vdXNlRXZlbnROb2RlKSkKKyAgICAgICAgICAgICAgICB2
YWx1ZS0+c2V0TW91c2VFdmVudE5vZGVJZChtb3VzZUV2ZW50Tm9kZUlkKTsKKyAgICAgICAgfQog
ICAgICAgICBpZiAob3duZWROb2RlSWRzKQotICAgICAgICAgICAgdmFsdWUtPnNldE93bmVkTm9k
ZUlkcyhvd25lZE5vZGVJZHMpOwotICAgICAgICBpZiAocGFyZW50Tm9kZSkKLSAgICAgICAgICAg
IHZhbHVlLT5zZXRQYXJlbnROb2RlSWQocHVzaE5vZGVQYXRoVG9Gcm9udGVuZChwYXJlbnROb2Rl
KSk7CisgICAgICAgICAgICB2YWx1ZS0+c2V0T3duZWROb2RlSWRzKG93bmVkTm9kZUlkcy5yZWxl
YXNlTm9uTnVsbCgpKTsKKyAgICAgICAgaWYgKHBhcmVudE5vZGUpIHsKKyAgICAgICAgICAgIGlm
IChhdXRvIHBhcmVudE5vZGVJZCA9IHB1c2hOb2RlUGF0aFRvRnJvbnRlbmQocGFyZW50Tm9kZSkp
CisgICAgICAgICAgICAgICAgdmFsdWUtPnNldFBhcmVudE5vZGVJZChwYXJlbnROb2RlSWQpOwor
ICAgICAgICB9CiAgICAgICAgIGlmIChzdXBwb3J0c1ByZXNzZWQpCiAgICAgICAgICAgICB2YWx1
ZS0+c2V0UHJlc3NlZChwcmVzc2VkKTsKICAgICAgICAgaWYgKHJlYWRvbmx5KQpAQCAtMjE1NSw3
ICsyMjM0LDcgQEAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0
eVByb3BlcnRpZXM+IEluc3BlY3RvckRPTUFnZW50OjpidWkKICAgICAgICAgaWYgKHNlbGVjdGVk
KQogICAgICAgICAgICAgdmFsdWUtPnNldFNlbGVjdGVkKHNlbGVjdGVkKTsKICAgICAgICAgaWYg
KHNlbGVjdGVkQ2hpbGROb2RlSWRzKQotICAgICAgICAgICAgdmFsdWUtPnNldFNlbGVjdGVkQ2hp
bGROb2RlSWRzKHNlbGVjdGVkQ2hpbGROb2RlSWRzKTsKKyAgICAgICAgICAgIHZhbHVlLT5zZXRT
ZWxlY3RlZENoaWxkTm9kZUlkcyhzZWxlY3RlZENoaWxkTm9kZUlkcy5yZWxlYXNlTm9uTnVsbCgp
KTsKICAgICAgICAgCiAgICAgICAgIC8vIEgxIC0tIEg2IGFsd2F5cyBoYXZlIGEgaGVhZGluZ0xl
dmVsIHByb3BlcnR5IHRoYXQgY2FuIGJlIGNvbXBsaW1lbnRlZCBieSBhIGhpZXJhcmNoaWNhbExl
dmVsCiAgICAgICAgIC8vIHByb3BlcnR5IHdoZW4gYXJpYS1sZXZlbCBpcyBzZXQgb24gdGhlIGVs
ZW1lbnQsIGluIHdoaWNoIGNhc2Ugd2Ugd2FudCB0byByZW1haW4gY2FsbGluZwpAQCAtMjIzNSwy
MiArMjMxNCwyMiBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpkaWRDb21taXRMb2FkKERvY3Vt
ZW50KiBkb2N1bWVudCkKICAgICBpZiAoIWZyYW1lT3duZXIpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIGludCBmcmFtZU93bmVySWQgPSBtX2RvY3VtZW50Tm9kZVRvSWRNYXAuZ2V0KGZyYW1lT3du
ZXIpOworICAgIGF1dG8gZnJhbWVPd25lcklkID0gbV9kb2N1bWVudE5vZGVUb0lkTWFwLmdldChm
cmFtZU93bmVyKTsKICAgICBpZiAoIWZyYW1lT3duZXJJZCkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgLy8gUmUtYWRkIGZyYW1lIG93bmVyIGVsZW1lbnQgdG9nZXRoZXIgd2l0aCBpdHMgbmV3IGNo
aWxkcmVuLgotICAgIGludCBwYXJlbnRJZCA9IG1fZG9jdW1lbnROb2RlVG9JZE1hcC5nZXQoaW5u
ZXJQYXJlbnROb2RlKGZyYW1lT3duZXIuZ2V0KCkpKTsKKyAgICBhdXRvIHBhcmVudElkID0gbV9k
b2N1bWVudE5vZGVUb0lkTWFwLmdldChpbm5lclBhcmVudE5vZGUoZnJhbWVPd25lci5nZXQoKSkp
OwogICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5jaGlsZE5vZGVSZW1vdmVkKHBhcmVudElkLCBm
cmFtZU93bmVySWQpOwogICAgIHVuYmluZChmcmFtZU93bmVyLmdldCgpLCAmbV9kb2N1bWVudE5v
ZGVUb0lkTWFwKTsKIAotICAgIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+IHZh
bHVlID0gYnVpbGRPYmplY3RGb3JOb2RlKGZyYW1lT3duZXIuZ2V0KCksIDAsICZtX2RvY3VtZW50
Tm9kZVRvSWRNYXApOworICAgIFJlZjxQcm90b2NvbDo6RE9NOjpOb2RlPiB2YWx1ZSA9IGJ1aWxk
T2JqZWN0Rm9yTm9kZShmcmFtZU93bmVyLmdldCgpLCAwLCAmbV9kb2N1bWVudE5vZGVUb0lkTWFw
KTsKICAgICBOb2RlKiBwcmV2aW91c1NpYmxpbmcgPSBpbm5lclByZXZpb3VzU2libGluZyhmcmFt
ZU93bmVyLmdldCgpKTsKLSAgICBpbnQgcHJldklkID0gcHJldmlvdXNTaWJsaW5nID8gbV9kb2N1
bWVudE5vZGVUb0lkTWFwLmdldChwcmV2aW91c1NpYmxpbmcpIDogMDsKKyAgICBhdXRvIHByZXZJ
ZCA9IHByZXZpb3VzU2libGluZyA/IG1fZG9jdW1lbnROb2RlVG9JZE1hcC5nZXQocHJldmlvdXNT
aWJsaW5nKSA6IDA7CiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPmNoaWxkTm9kZUluc2VydGVk
KHBhcmVudElkLCBwcmV2SWQsIFdURk1vdmUodmFsdWUpKTsKIH0KIAotaW50IEluc3BlY3RvckRP
TUFnZW50OjppZGVudGlmaWVyRm9yTm9kZShOb2RlJiBub2RlKQorUHJvdG9jb2w6OkRPTTo6Tm9k
ZUlkIEluc3BlY3RvckRPTUFnZW50OjppZGVudGlmaWVyRm9yTm9kZShOb2RlJiBub2RlKQogewog
ICAgIHJldHVybiBwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKCZub2RlKTsKIH0KQEAgLTIzMDcsNyAr
MjM4Niw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmRpZEluc2VydERPTU5vZGUoTm9kZSYg
bm9kZSkKICAgICBpZiAoIXBhcmVudCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaW50IHBhcmVu
dElkID0gbV9kb2N1bWVudE5vZGVUb0lkTWFwLmdldChwYXJlbnQpOworICAgIGF1dG8gcGFyZW50
SWQgPSBtX2RvY3VtZW50Tm9kZVRvSWRNYXAuZ2V0KHBhcmVudCk7CiAgICAgLy8gUmV0dXJuIGlm
IHBhcmVudCBpcyBub3QgbWFwcGVkIHlldC4KICAgICBpZiAoIXBhcmVudElkKQogICAgICAgICBy
ZXR1cm47CkBAIC0yMzE4LDggKzIzOTcsOCBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpkaWRJ
bnNlcnRET01Ob2RlKE5vZGUmIG5vZGUpCiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gQ2hpbGRy
ZW4gaGF2ZSBiZWVuIHJlcXVlc3RlZCAtPiByZXR1cm4gdmFsdWUgb2YgYSBuZXcgY2hpbGQuCiAg
ICAgICAgIE5vZGUqIHByZXZTaWJsaW5nID0gaW5uZXJQcmV2aW91c1NpYmxpbmcoJm5vZGUpOwot
ICAgICAgICBpbnQgcHJldklkID0gcHJldlNpYmxpbmcgPyBtX2RvY3VtZW50Tm9kZVRvSWRNYXAu
Z2V0KHByZXZTaWJsaW5nKSA6IDA7Ci0gICAgICAgIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpE
T006Ok5vZGU+IHZhbHVlID0gYnVpbGRPYmplY3RGb3JOb2RlKCZub2RlLCAwLCAmbV9kb2N1bWVu
dE5vZGVUb0lkTWFwKTsKKyAgICAgICAgYXV0byBwcmV2SWQgPSBwcmV2U2libGluZyA/IG1fZG9j
dW1lbnROb2RlVG9JZE1hcC5nZXQocHJldlNpYmxpbmcpIDogMDsKKyAgICAgICAgUmVmPFByb3Rv
Y29sOjpET006Ok5vZGU+IHZhbHVlID0gYnVpbGRPYmplY3RGb3JOb2RlKCZub2RlLCAwLCAmbV9k
b2N1bWVudE5vZGVUb0lkTWFwKTsKICAgICAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPmNoaWxk
Tm9kZUluc2VydGVkKHBhcmVudElkLCBwcmV2SWQsIFdURk1vdmUodmFsdWUpKTsKICAgICB9CiB9
CkBAIC0yMzM1LDcgKzI0MTQsNyBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpkaWRSZW1vdmVE
T01Ob2RlKE5vZGUmIG5vZGUpCiAgICAgaWYgKCFtX2RvY3VtZW50Tm9kZVRvSWRNYXAuY29udGFp
bnMocGFyZW50KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaW50IHBhcmVudElkID0gbV9kb2N1
bWVudE5vZGVUb0lkTWFwLmdldChwYXJlbnQpOworICAgIGF1dG8gcGFyZW50SWQgPSBtX2RvY3Vt
ZW50Tm9kZVRvSWRNYXAuZ2V0KHBhcmVudCk7CiAKICAgICBpZiAoIW1fY2hpbGRyZW5SZXF1ZXN0
ZWQuY29udGFpbnMocGFyZW50SWQpKSB7CiAgICAgICAgIC8vIE5vIGNoaWxkcmVuIGFyZSBtYXBw
ZWQgeWV0IC0+IG9ubHkgbm90aWZ5IG9uIGNoYW5nZXMgb2YgaGFzQ2hpbGRyZW4uCkBAIC0yMzU4
LDcgKzI0MzcsNyBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpkaWRNb2RpZnlET01BdHRyKEVs
ZW1lbnQmIGVsZW1lbnQsIGNvbnN0IEF0b21TdHJpbmcmIG5hbQogICAgIGlmIChzaG91bGRTdXBw
cmVzc0V2ZW50KQogICAgICAgICByZXR1cm47CiAKLSAgICBpbnQgaWQgPSBib3VuZE5vZGVJZCgm
ZWxlbWVudCk7CisgICAgYXV0byBpZCA9IGJvdW5kTm9kZUlkKCZlbGVtZW50KTsKICAgICBpZiAo
IWlkKQogICAgICAgICByZXR1cm47CiAKQEAgLTIzNzAsNyArMjQ0OSw3IEBAIHZvaWQgSW5zcGVj
dG9yRE9NQWdlbnQ6OmRpZE1vZGlmeURPTUF0dHIoRWxlbWVudCYgZWxlbWVudCwgY29uc3QgQXRv
bVN0cmluZyYgbmFtCiAKIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmRpZFJlbW92ZURPTUF0dHIo
RWxlbWVudCYgZWxlbWVudCwgY29uc3QgQXRvbVN0cmluZyYgbmFtZSkKIHsKLSAgICBpbnQgaWQg
PSBib3VuZE5vZGVJZCgmZWxlbWVudCk7CisgICAgYXV0byBpZCA9IGJvdW5kTm9kZUlkKCZlbGVt
ZW50KTsKICAgICBpZiAoIWlkKQogICAgICAgICByZXR1cm47CiAKQEAgLTIzODIsOSArMjQ2MSw5
IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmRpZFJlbW92ZURPTUF0dHIoRWxlbWVudCYgZWxl
bWVudCwgY29uc3QgQXRvbVN0cmluZyYgbmFtCiAKIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnN0
eWxlQXR0cmlidXRlSW52YWxpZGF0ZWQoY29uc3QgVmVjdG9yPEVsZW1lbnQqPiYgZWxlbWVudHMp
CiB7Ci0gICAgYXV0byBub2RlSWRzID0gSlNPTjo6QXJyYXlPZjxpbnQ+OjpjcmVhdGUoKTsKKyAg
ICBhdXRvIG5vZGVJZHMgPSBKU09OOjpBcnJheU9mPFByb3RvY29sOjpET006Ok5vZGVJZD46OmNy
ZWF0ZSgpOwogICAgIGZvciAoYXV0byYgZWxlbWVudCA6IGVsZW1lbnRzKSB7Ci0gICAgICAgIGlu
dCBpZCA9IGJvdW5kTm9kZUlkKGVsZW1lbnQpOworICAgICAgICBhdXRvIGlkID0gYm91bmROb2Rl
SWQoZWxlbWVudCk7CiAgICAgICAgIGlmICghaWQpCiAgICAgICAgICAgICBjb250aW51ZTsKIApA
QCAtMjM5OCw3ICsyNDc3LDcgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c3R5bGVBdHRyaWJ1
dGVJbnZhbGlkYXRlZChjb25zdCBWZWN0b3I8RWxlbWVudCo+JiBlbGVtZW4KIAogdm9pZCBJbnNw
ZWN0b3JET01BZ2VudDo6Y2hhcmFjdGVyRGF0YU1vZGlmaWVkKENoYXJhY3RlckRhdGEmIGNoYXJh
Y3RlckRhdGEpCiB7Ci0gICAgaW50IGlkID0gbV9kb2N1bWVudE5vZGVUb0lkTWFwLmdldCgmY2hh
cmFjdGVyRGF0YSk7CisgICAgYXV0byBpZCA9IG1fZG9jdW1lbnROb2RlVG9JZE1hcC5nZXQoJmNo
YXJhY3RlckRhdGEpOwogICAgIGlmICghaWQpIHsKICAgICAgICAgLy8gUHVzaCB0ZXh0IG5vZGUg
aWYgaXQgaXMgYmVpbmcgY3JlYXRlZC4KICAgICAgICAgZGlkSW5zZXJ0RE9NTm9kZShjaGFyYWN0
ZXJEYXRhKTsKQEAgLTI0MDksNyArMjQ4OCw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmNo
YXJhY3RlckRhdGFNb2RpZmllZChDaGFyYWN0ZXJEYXRhJiBjaGFyYWN0ZXJEYXRhKQogCiB2b2lk
IEluc3BlY3RvckRPTUFnZW50OjpkaWRJbnZhbGlkYXRlU3R5bGVBdHRyKEVsZW1lbnQmIGVsZW1l
bnQpCiB7Ci0gICAgaW50IGlkID0gbV9kb2N1bWVudE5vZGVUb0lkTWFwLmdldCgmZWxlbWVudCk7
CisgICAgYXV0byBpZCA9IG1fZG9jdW1lbnROb2RlVG9JZE1hcC5nZXQoJmVsZW1lbnQpOwogICAg
IGlmICghaWQpCiAgICAgICAgIHJldHVybjsKIApAQCAtMjQyMCwyMiArMjQ5OSwyMiBAQCB2b2lk
IEluc3BlY3RvckRPTUFnZW50OjpkaWRJbnZhbGlkYXRlU3R5bGVBdHRyKEVsZW1lbnQmIGVsZW1l
bnQpCiAKIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmRpZFB1c2hTaGFkb3dSb290KEVsZW1lbnQm
IGhvc3QsIFNoYWRvd1Jvb3QmIHJvb3QpCiB7Ci0gICAgaW50IGhvc3RJZCA9IG1fZG9jdW1lbnRO
b2RlVG9JZE1hcC5nZXQoJmhvc3QpOworICAgIGF1dG8gaG9zdElkID0gbV9kb2N1bWVudE5vZGVU
b0lkTWFwLmdldCgmaG9zdCk7CiAgICAgaWYgKGhvc3RJZCkKICAgICAgICAgbV9mcm9udGVuZERp
c3BhdGNoZXItPnNoYWRvd1Jvb3RQdXNoZWQoaG9zdElkLCBidWlsZE9iamVjdEZvck5vZGUoJnJv
b3QsIDAsICZtX2RvY3VtZW50Tm9kZVRvSWRNYXApKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JET01B
Z2VudDo6d2lsbFBvcFNoYWRvd1Jvb3QoRWxlbWVudCYgaG9zdCwgU2hhZG93Um9vdCYgcm9vdCkK
IHsKLSAgICBpbnQgaG9zdElkID0gbV9kb2N1bWVudE5vZGVUb0lkTWFwLmdldCgmaG9zdCk7Ci0g
ICAgaW50IHJvb3RJZCA9IG1fZG9jdW1lbnROb2RlVG9JZE1hcC5nZXQoJnJvb3QpOworICAgIGF1
dG8gaG9zdElkID0gbV9kb2N1bWVudE5vZGVUb0lkTWFwLmdldCgmaG9zdCk7CisgICAgYXV0byBy
b290SWQgPSBtX2RvY3VtZW50Tm9kZVRvSWRNYXAuZ2V0KCZyb290KTsKICAgICBpZiAoaG9zdElk
ICYmIHJvb3RJZCkKICAgICAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPnNoYWRvd1Jvb3RQb3Bw
ZWQoaG9zdElkLCByb290SWQpOwogfQogCiB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpkaWRDaGFu
Z2VDdXN0b21FbGVtZW50U3RhdGUoRWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICBpbnQgZWxlbWVu
dElkID0gbV9kb2N1bWVudE5vZGVUb0lkTWFwLmdldCgmZWxlbWVudCk7CisgICAgYXV0byBlbGVt
ZW50SWQgPSBtX2RvY3VtZW50Tm9kZVRvSWRNYXAuZ2V0KCZlbGVtZW50KTsKICAgICBpZiAoIWVs
ZW1lbnRJZCkKICAgICAgICAgcmV0dXJuOwogCkBAIC0yNDYyLDcgKzI1NDEsNyBAQCB2b2lkIElu
c3BlY3RvckRPTUFnZW50Ojpwc2V1ZG9FbGVtZW50Q3JlYXRlZChQc2V1ZG9FbGVtZW50JiBwc2V1
ZG9FbGVtZW50KQogICAgIGlmICghcGFyZW50KQogICAgICAgICByZXR1cm47CiAKLSAgICBpbnQg
cGFyZW50SWQgPSBtX2RvY3VtZW50Tm9kZVRvSWRNYXAuZ2V0KHBhcmVudCk7CisgICAgYXV0byBw
YXJlbnRJZCA9IG1fZG9jdW1lbnROb2RlVG9JZE1hcC5nZXQocGFyZW50KTsKICAgICBpZiAoIXBh
cmVudElkKQogICAgICAgICByZXR1cm47CiAKQEAgLTI0NzIsMTQgKzI1NTEsMTQgQEAgdm9pZCBJ
bnNwZWN0b3JET01BZ2VudDo6cHNldWRvRWxlbWVudENyZWF0ZWQoUHNldWRvRWxlbWVudCYgcHNl
dWRvRWxlbWVudCkKIAogdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6cHNldWRvRWxlbWVudERlc3Ry
b3llZChQc2V1ZG9FbGVtZW50JiBwc2V1ZG9FbGVtZW50KQogewotICAgIGludCBwc2V1ZG9FbGVt
ZW50SWQgPSBtX2RvY3VtZW50Tm9kZVRvSWRNYXAuZ2V0KCZwc2V1ZG9FbGVtZW50KTsKKyAgICBh
dXRvIHBzZXVkb0VsZW1lbnRJZCA9IG1fZG9jdW1lbnROb2RlVG9JZE1hcC5nZXQoJnBzZXVkb0Vs
ZW1lbnQpOwogICAgIGlmICghcHNldWRvRWxlbWVudElkKQogICAgICAgICByZXR1cm47CiAKICAg
ICAvLyBJZiBhIFBzZXVkb0VsZW1lbnQgaXMgYm91bmQsIGl0cyBwYXJlbnQgZWxlbWVudCBtdXN0
IGhhdmUgYmVlbiBib3VuZC4KICAgICBFbGVtZW50KiBwYXJlbnQgPSBwc2V1ZG9FbGVtZW50Lmhv
c3RFbGVtZW50KCk7CiAgICAgQVNTRVJUKHBhcmVudCk7Ci0gICAgaW50IHBhcmVudElkID0gbV9k
b2N1bWVudE5vZGVUb0lkTWFwLmdldChwYXJlbnQpOworICAgIGF1dG8gcGFyZW50SWQgPSBtX2Rv
Y3VtZW50Tm9kZVRvSWRNYXAuZ2V0KHBhcmVudCk7CiAgICAgQVNTRVJUKHBhcmVudElkKTsKIAog
ICAgIHVuYmluZCgmcHNldWRvRWxlbWVudCwgJm1fZG9jdW1lbnROb2RlVG9JZE1hcCk7CkBAIC0y
NDk1LDcgKzI1NzQsNyBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpkaWRBZGRFdmVudExpc3Rl
bmVyKEV2ZW50VGFyZ2V0JiB0YXJnZXQpCiAgICAgaWYgKCFub2RlLmNvbnRhaW5zKG1faW5zcGVj
dGVkTm9kZS5nZXQoKSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGludCBub2RlSWQgPSBib3Vu
ZE5vZGVJZCgmbm9kZSk7CisgICAgYXV0byBub2RlSWQgPSBib3VuZE5vZGVJZCgmbm9kZSk7CiAg
ICAgaWYgKCFub2RlSWQpCiAgICAgICAgIHJldHVybjsKIApAQCAtMjUxNiw3ICsyNTk1LDcgQEAg
dm9pZCBJbnNwZWN0b3JET01BZ2VudDo6d2lsbFJlbW92ZUV2ZW50TGlzdGVuZXIoRXZlbnRUYXJn
ZXQmIHRhcmdldCwgY29uc3QgQXRvbVMKICAgICBpZiAoIW5vZGUuY29udGFpbnMobV9pbnNwZWN0
ZWROb2RlLmdldCgpKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaW50IG5vZGVJZCA9IGJvdW5k
Tm9kZUlkKCZub2RlKTsKKyAgICBhdXRvIG5vZGVJZCA9IGJvdW5kTm9kZUlkKCZub2RlKTsKICAg
ICBpZiAoIW5vZGVJZCkKICAgICAgICAgcmV0dXJuOwogCkBAIC0yNTY2LDcgKzI2NDUsNyBAQCBS
ZWZQdHI8SlNDOjpCcmVha3BvaW50PiBJbnNwZWN0b3JET01BZ2VudDo6YnJlYWtwb2ludEZvckV2
ZW50TGlzdGVuZXIoRXZlbnRUYXJnZQogICAgIHJldHVybiBudWxscHRyOwogfQogCi1pbnQgSW5z
cGVjdG9yRE9NQWdlbnQ6OmlkRm9yRXZlbnRMaXN0ZW5lcihFdmVudFRhcmdldCYgdGFyZ2V0LCBj
b25zdCBBdG9tU3RyaW5nJiBldmVudFR5cGUsIEV2ZW50TGlzdGVuZXImIGxpc3RlbmVyLCBib29s
IGNhcHR1cmUpCitQcm90b2NvbDo6RE9NOjpFdmVudExpc3RlbmVySWQgSW5zcGVjdG9yRE9NQWdl
bnQ6OmlkRm9yRXZlbnRMaXN0ZW5lcihFdmVudFRhcmdldCYgdGFyZ2V0LCBjb25zdCBBdG9tU3Ry
aW5nJiBldmVudFR5cGUsIEV2ZW50TGlzdGVuZXImIGxpc3RlbmVyLCBib29sIGNhcHR1cmUpCiB7
CiAgICAgZm9yIChhdXRvJiBpbnNwZWN0b3JFdmVudExpc3RlbmVyIDogbV9ldmVudExpc3RlbmVy
RW50cmllcy52YWx1ZXMoKSkgewogICAgICAgICBpZiAoaW5zcGVjdG9yRXZlbnRMaXN0ZW5lci5t
YXRjaGVzKHRhcmdldCwgZXZlbnRUeXBlLCBsaXN0ZW5lciwgY2FwdHVyZSkpCkBAIC0yNjA0LDgg
KzI2ODMsNyBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjptZWRpYU1ldHJpY3NUaW1lckZpcmVk
KCkKICAgICAgICAgaWYgKGl0ZXJhdG9yLT52YWx1ZS5pc1Bvd2VyRWZmaWNpZW50ICE9IGlzUG93
ZXJFZmZpY2llbnQpIHsKICAgICAgICAgICAgIGl0ZXJhdG9yLT52YWx1ZS5pc1Bvd2VyRWZmaWNp
ZW50ID0gaXNQb3dlckVmZmljaWVudDsKIAotICAgICAgICAgICAgaW50IG5vZGVJZCA9IHB1c2hO
b2RlUGF0aFRvRnJvbnRlbmQobWVkaWFFbGVtZW50KTsKLSAgICAgICAgICAgIGlmIChub2RlSWQp
IHsKKyAgICAgICAgICAgIGlmIChhdXRvIG5vZGVJZCA9IHB1c2hOb2RlUGF0aFRvRnJvbnRlbmQo
bWVkaWFFbGVtZW50KSkgewogICAgICAgICAgICAgICAgIGF1dG8gdGltZXN0YW1wID0gbV9lbnZp
cm9ubWVudC5leGVjdXRpb25TdG9wd2F0Y2goKS5lbGFwc2VkVGltZSgpLnNlY29uZHMoKTsKICAg
ICAgICAgICAgICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+cG93ZXJFZmZpY2llbnRQbGF5YmFj
a1N0YXRlQ2hhbmdlZChub2RlSWQsIHRpbWVzdGFtcCwgaXRlcmF0b3ItPnZhbHVlLmlzUG93ZXJF
ZmZpY2llbnQpOwogICAgICAgICAgICAgfQpAQCAtMjY1OSw3ICsyNzM3LDcgQEAgTm9kZSogSW5z
cGVjdG9yRE9NQWdlbnQ6Om5vZGVGb3JQYXRoKGNvbnN0IFN0cmluZyYgcGF0aCkKICAgICByZXR1
cm4gbm9kZTsKIH0KIAotTm9kZSogSW5zcGVjdG9yRE9NQWdlbnQ6Om5vZGVGb3JPYmplY3RJZChj
b25zdCBTdHJpbmcmIG9iamVjdElkKQorTm9kZSogSW5zcGVjdG9yRE9NQWdlbnQ6Om5vZGVGb3JP
YmplY3RJZChjb25zdCBQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0SWQmIG9iamVjdElk
KQogewogICAgIEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0ID0gbV9pbmplY3RlZFNjcmlw
dE1hbmFnZXIuaW5qZWN0ZWRTY3JpcHRGb3JPYmplY3RJZChvYmplY3RJZCk7CiAgICAgaWYgKGlu
amVjdGVkU2NyaXB0Lmhhc05vVmFsdWUoKSkKQEAgLTI2NjgsMTUgKzI3NDYsMjAgQEAgTm9kZSog
SW5zcGVjdG9yRE9NQWdlbnQ6Om5vZGVGb3JPYmplY3RJZChjb25zdCBTdHJpbmcmIG9iamVjdElk
KQogICAgIHJldHVybiBzY3JpcHRWYWx1ZUFzTm9kZShpbmplY3RlZFNjcmlwdC5maW5kT2JqZWN0
QnlJZChvYmplY3RJZCkpOwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpwdXNoTm9kZUJ5
UGF0aFRvRnJvbnRlbmQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHBh
dGgsIGludCogbm9kZUlkKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UHJvdG9jb2w6OkRPTTo6
Tm9kZUlkPiBJbnNwZWN0b3JET01BZ2VudDo6cHVzaE5vZGVCeVBhdGhUb0Zyb250ZW5kKGNvbnN0
IFN0cmluZyYgcGF0aCkKIHsKLSAgICBpZiAoTm9kZSogbm9kZSA9IG5vZGVGb3JQYXRoKHBhdGgp
KQotICAgICAgICAqbm9kZUlkID0gcHVzaE5vZGVQYXRoVG9Gcm9udGVuZChlcnJvclN0cmluZywg
bm9kZSk7Ci0gICAgZWxzZQotICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIG5vZGUgZm9y
IGdpdmVuIHBhdGgiX3M7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOwor
CisgICAgaWYgKE5vZGUqIG5vZGUgPSBub2RlRm9yUGF0aChwYXRoKSkgeworICAgICAgICBpZiAo
YXV0byBub2RlSWQgPSBwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKGVycm9yU3RyaW5nLCBub2RlKSkK
KyAgICAgICAgICAgIHJldHVybiBub2RlSWQ7CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3Rl
ZChlcnJvclN0cmluZyk7CisgICAgfQorCisgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJNaXNz
aW5nIG5vZGUgZm9yIGdpdmVuIHBhdGgiX3MpOwogfQogCi1SZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiBJbnNwZWN0b3JET01BZ2VudDo6cmVzb2x2ZU5v
ZGUoTm9kZSogbm9kZSwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCkKK1JlZlB0cjxQcm90b2Nv
bDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiBJbnNwZWN0b3JET01BZ2VudDo6cmVzb2x2ZU5vZGUo
Tm9kZSogbm9kZSwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCkKIHsKICAgICBEb2N1bWVudCog
ZG9jdW1lbnQgPSAmbm9kZS0+ZG9jdW1lbnQoKTsKICAgICBpZiAoYXV0byogdGVtcGxhdGVIb3N0
ID0gZG9jdW1lbnQtPnRlbXBsYXRlRG9jdW1lbnRIb3N0KCkpCkBAIC0yNzA2LDkgKzI3ODksMTEg
QEAgSlNDOjpKU1ZhbHVlIEluc3BlY3RvckRPTUFnZW50Ojpub2RlQXNTY3JpcHRWYWx1ZShKU0M6
OkpTR2xvYmFsT2JqZWN0JiBzdGF0ZSwgTm8KICAgICByZXR1cm4gdG9KUygmc3RhdGUsIGRlcHJl
Y2F0ZWRHbG9iYWxPYmplY3RGb3JQcm90b3R5cGUoJnN0YXRlKSwgQmluZGluZ1NlY3VyaXR5Ojpj
aGVja1NlY3VyaXR5Rm9yTm9kZShzdGF0ZSwgbm9kZSkpOwogfQogCi12b2lkIEluc3BlY3RvckRP
TUFnZW50OjpzZXRBbGxvd0VkaXRpbmdVc2VyQWdlbnRTaGFkb3dUcmVlcyhFcnJvclN0cmluZyYs
IGJvb2wgYWxsb3cpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JET01B
Z2VudDo6c2V0QWxsb3dFZGl0aW5nVXNlckFnZW50U2hhZG93VHJlZXMoYm9vbCBhbGxvdykKIHsK
ICAgICBtX2FsbG93RWRpdGluZ1VzZXJBZ2VudFNoYWRvd1RyZWVzID0gYWxsb3c7CisKKyAgICBy
ZXR1cm4geyB9OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmggYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmgKaW5kZXggM2UzNzcw
N2FmZWNmNzhmNDIxOGFhODMwMWUxZWEyZDQxYzcyNTE3Mi4uN2YyODcyZGY0OWUwZDQwYWIwMjBj
ZDk4ODRkZWQwMDMwOGYxYTJhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2FnZW50cy9JbnNwZWN0b3JET01BZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9hZ2VudHMvSW5zcGVjdG9yRE9NQWdlbnQuaApAQCAtNzYsMTQgKzc2LDEyIEBAIGNsYXNzIFNo
YWRvd1Jvb3Q7CiAKIHN0cnVjdCBIaWdobGlnaHRDb25maWc7CiAKLXR5cGVkZWYgU3RyaW5nIEVy
cm9yU3RyaW5nOwotCiBjbGFzcyBJbnNwZWN0b3JET01BZ2VudCBmaW5hbCA6IHB1YmxpYyBJbnNw
ZWN0b3JBZ2VudEJhc2UsIHB1YmxpYyBJbnNwZWN0b3I6OkRPTUJhY2tlbmREaXNwYXRjaGVySGFu
ZGxlciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW5zcGVjdG9yRE9NQWdlbnQpOwogICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIEluc3BlY3RvckRPTUFnZW50
KFBhZ2VBZ2VudENvbnRleHQmLCBJbnNwZWN0b3JPdmVybGF5Kik7Ci0gICAgfkluc3BlY3RvckRP
TUFnZW50KCkgb3ZlcnJpZGU7CisgICAgfkluc3BlY3RvckRPTUFnZW50KCk7CiAKICAgICBzdGF0
aWMgU3RyaW5nIHRvRXJyb3JTdHJpbmcoRXhjZXB0aW9uQ29kZSk7CiAgICAgc3RhdGljIFN0cmlu
ZyB0b0Vycm9yU3RyaW5nKEV4Y2VwdGlvbiYmKTsKQEAgLTEwMiw2MiArMTAwLDYyIEBAIHB1Ymxp
YzoKICAgICBzdGF0aWMgSlNDOjpKU1ZhbHVlIG5vZGVBc1NjcmlwdFZhbHVlKEpTQzo6SlNHbG9i
YWxPYmplY3QmLCBOb2RlKik7CiAKICAgICAvLyBJbnNwZWN0b3JBZ2VudEJhc2UKLSAgICB2b2lk
IGRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kUm91dGVyKiwg
SW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlciopIG92ZXJyaWRlOwotICAgIHZvaWQgd2lsbERl
c3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKSBvdmVy
cmlkZTsKKyAgICB2b2lkIGRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkZy
b250ZW5kUm91dGVyKiwgSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlciopOworICAgIHZvaWQg
d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29u
KTsKIAogICAgIC8vIERPTUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcgotICAgIHZvaWQgcXVlcnlT
ZWxlY3RvcihFcnJvclN0cmluZyYsIGludCBub2RlSWQsIGNvbnN0IFN0cmluZyYgc2VsZWN0b3Jz
LCBpbnQqIGVsZW1lbnRJZCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBxdWVyeVNlbGVjdG9yQWxsKEVy
cm9yU3RyaW5nJiwgaW50IG5vZGVJZCwgY29uc3QgU3RyaW5nJiBzZWxlY3RvcnMsIFJlZlB0cjxK
U09OOjpBcnJheU9mPGludD4+JiByZXN1bHQpIG92ZXJyaWRlOwotICAgIHZvaWQgZ2V0RG9jdW1l
bnQoRXJyb3JTdHJpbmcmLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlPiYg
cm9vdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZXF1ZXN0Q2hpbGROb2RlcyhFcnJvclN0cmluZyYs
IGludCBub2RlSWQsIGNvbnN0IGludCogZGVwdGgpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0QXR0
cmlidXRlVmFsdWUoRXJyb3JTdHJpbmcmLCBpbnQgZWxlbWVudElkLCBjb25zdCBTdHJpbmcmIG5h
bWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0QXR0cmlidXRl
c0FzVGV4dChFcnJvclN0cmluZyYsIGludCBlbGVtZW50SWQsIGNvbnN0IFN0cmluZyYgdGV4dCwg
Y29uc3QgU3RyaW5nKiBuYW1lKSBvdmVycmlkZTsKLSAgICB2b2lkIHJlbW92ZUF0dHJpYnV0ZShF
cnJvclN0cmluZyYsIGludCBlbGVtZW50SWQsIGNvbnN0IFN0cmluZyYgbmFtZSkgb3ZlcnJpZGU7
Ci0gICAgdm9pZCByZW1vdmVOb2RlKEVycm9yU3RyaW5nJiwgaW50IG5vZGVJZCkgb3ZlcnJpZGU7
Ci0gICAgdm9pZCBzZXROb2RlTmFtZShFcnJvclN0cmluZyYsIGludCBub2RlSWQsIGNvbnN0IFN0
cmluZyYgbmFtZSwgaW50KiBuZXdJZCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBnZXRPdXRlckhUTUwo
RXJyb3JTdHJpbmcmLCBpbnQgbm9kZUlkLCBXVEY6OlN0cmluZyogb3V0ZXJIVE1MKSBvdmVycmlk
ZTsKLSAgICB2b2lkIHNldE91dGVySFRNTChFcnJvclN0cmluZyYsIGludCBub2RlSWQsIGNvbnN0
IFN0cmluZyYgb3V0ZXJIVE1MKSBvdmVycmlkZTsKLSAgICB2b2lkIGluc2VydEFkamFjZW50SFRN
TChFcnJvclN0cmluZyYsIGludCBub2RlSWQsIGNvbnN0IFN0cmluZyYgcG9zaXRpb24sIGNvbnN0
IFN0cmluZyYgaHRtbCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXROb2RlVmFsdWUoRXJyb3JTdHJp
bmcmLCBpbnQgbm9kZUlkLCBjb25zdCBTdHJpbmcmIHZhbHVlKSBvdmVycmlkZTsKLSAgICB2b2lk
IGdldFN1cHBvcnRlZEV2ZW50TmFtZXMoRXJyb3JTdHJpbmcmLCBSZWZQdHI8SlNPTjo6QXJyYXlP
ZjxTdHJpbmc+PiYgZXZlbnROYW1lcykgb3ZlcnJpZGU7CisgICAgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6RXJyb3JTdHJpbmdPcjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZD4gcXVlcnlT
ZWxlY3RvcihJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZCwgY29uc3QgU3RyaW5nJiBz
ZWxlY3Rvcik7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SlNP
Tjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZD4+PiBxdWVyeVNlbGVj
dG9yQWxsKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkLCBjb25zdCBTdHJpbmcmIHNl
bGVjdG9yKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+PiBnZXREb2N1bWVudCgpOworICAgIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gcmVxdWVzdENoaWxkTm9kZXMoSW5zcGVj
dG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQsIE9wdGlvbmFsPGludD4mJiBkZXB0aCk7CisgICAg
SW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzZXRBdHRyaWJ1dGVWYWx1
ZShJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBj
b25zdCBTdHJpbmcmIHZhbHVlKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmlu
Z09yPHZvaWQ+IHNldEF0dHJpYnV0ZXNBc1RleHQoSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpO
b2RlSWQsIGNvbnN0IFN0cmluZyYgdGV4dCwgY29uc3QgU3RyaW5nJiBuYW1lKTsKKyAgICBJbnNw
ZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHJlbW92ZUF0dHJpYnV0ZShJbnNw
ZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZCwgY29uc3QgU3RyaW5nJiBuYW1lKTsKKyAgICBJ
bnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHJlbW92ZU5vZGUoSW5zcGVj
dG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQ+IHNldE5vZGVOYW1l
KEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkLCBjb25zdCBTdHJpbmcmKTsKKyAgICBJ
bnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFN0cmluZz4gZ2V0T3V0ZXJIVE1MKElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29s
OjpFcnJvclN0cmluZ09yPHZvaWQ+IHNldE91dGVySFRNTChJbnNwZWN0b3I6OlByb3RvY29sOjpE
T006Ok5vZGVJZCwgY29uc3QgU3RyaW5nJik7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJy
b3JTdHJpbmdPcjx2b2lkPiBpbnNlcnRBZGphY2VudEhUTUwoSW5zcGVjdG9yOjpQcm90b2NvbDo6
RE9NOjpOb2RlSWQsIGNvbnN0IFN0cmluZyYgcG9zaXRpb24sIGNvbnN0IFN0cmluZyYgaHRtbCk7
CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzZXROb2RlVmFs
dWUoSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQsIGNvbnN0IFN0cmluZyYpOworICAg
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEpTT046OkFycmF5T2Y8U3Ry
aW5nPj4+IGdldFN1cHBvcnRlZEV2ZW50TmFtZXMoKTsKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FM
VEVSTkFURV9ESVNQQVRDSEVSUykKLSAgICB2b2lkIGdldERhdGFCaW5kaW5nc0Zvck5vZGUoRXJy
b3JTdHJpbmcmLCBpbnQgbm9kZUlkLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpET006OkRhdGFCaW5kaW5nPj4mIGRhdGFBcnJheSkgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBnZXRBc3NvY2lhdGVkRGF0YUZvck5vZGUoRXJyb3JTdHJpbmcmLCBpbnQgbm9kZUlkLCBPcHRp
b25hbDxTdHJpbmc+JiBhc3NvY2lhdGVkRGF0YSkgb3ZlcnJpZGU7CisgICAgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpET006OkRhdGFCaW5kaW5nPj4+IGdldERhdGFCaW5kaW5nc0Zvck5vZGUoSW5zcGVjdG9y
OjpQcm90b2NvbDo6RE9NOjpOb2RlSWQpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8U3RyaW5nPiBnZXRBc3NvY2lhdGVkRGF0YUZvck5vZGUoSW5zcGVjdG9yOjpQcm90
b2NvbDo6RE9NOjpOb2RlSWQpOwogI2VuZGlmCi0gICAgdm9pZCBnZXRFdmVudExpc3RlbmVyc0Zv
ck5vZGUoRXJyb3JTdHJpbmcmLCBpbnQgbm9kZUlkLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpET006OkV2ZW50TGlzdGVuZXI+PiYgbGlzdGVuZXJzQXJyYXkpIG92
ZXJyaWRlOwotICAgIHZvaWQgc2V0RXZlbnRMaXN0ZW5lckRpc2FibGVkKEVycm9yU3RyaW5nJiwg
aW50IGV2ZW50TGlzdGVuZXJJZCwgYm9vbCBkaXNhYmxlZCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBz
ZXRCcmVha3BvaW50Rm9yRXZlbnRMaXN0ZW5lcihFcnJvclN0cmluZyYsIGludCBldmVudExpc3Rl
bmVySWQsIGNvbnN0IEpTT046Ok9iamVjdCogb3B0aW9ucykgZmluYWw7Ci0gICAgdm9pZCByZW1v
dmVCcmVha3BvaW50Rm9yRXZlbnRMaXN0ZW5lcihFcnJvclN0cmluZyYsIGludCBldmVudExpc3Rl
bmVySWQpIG92ZXJyaWRlOwotICAgIHZvaWQgZ2V0QWNjZXNzaWJpbGl0eVByb3BlcnRpZXNGb3JO
b2RlKEVycm9yU3RyaW5nJiwgaW50IG5vZGVJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM+JiBheFByb3BlcnRpZXMpIG92ZXJyaWRlOwot
ICAgIHZvaWQgcGVyZm9ybVNlYXJjaChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgcXVlcnks
IGNvbnN0IEpTT046OkFycmF5KiBub2RlSWRzLCBjb25zdCBib29sKiBjYXNlU2Vuc2l0aXZlLCBT
dHJpbmcqIHNlYXJjaElkLCBpbnQqIHJlc3VsdENvdW50KSBvdmVycmlkZTsKLSAgICB2b2lkIGdl
dFNlYXJjaFJlc3VsdHMoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHNlYXJjaElkLCBpbnQg
ZnJvbUluZGV4LCBpbnQgdG9JbmRleCwgUmVmUHRyPEpTT046OkFycmF5T2Y8aW50Pj4mKSBvdmVy
cmlkZTsKLSAgICB2b2lkIGRpc2NhcmRTZWFyY2hSZXN1bHRzKEVycm9yU3RyaW5nJiwgY29uc3Qg
U3RyaW5nJiBzZWFyY2hJZCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZXNvbHZlTm9kZShFcnJvclN0
cmluZyYsIGludCBub2RlSWQsIGNvbnN0IFN0cmluZyogb2JqZWN0R3JvdXAsIFJlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiByZXN1bHQpIG92ZXJyaWRl
OwotICAgIHZvaWQgZ2V0QXR0cmlidXRlcyhFcnJvclN0cmluZyYsIGludCBub2RlSWQsIFJlZlB0
cjxKU09OOjpBcnJheU9mPFN0cmluZz4+JiByZXN1bHQpIG92ZXJyaWRlOworICAgIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6RE9NOjpFdmVudExpc3RlbmVyPj4+IGdldEV2ZW50TGlzdGVuZXJzRm9yTm9kZShJ
bnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzZXRFdmVudExpc3RlbmVyRGlzYWJsZWQoSW5zcGVjdG9y
OjpQcm90b2NvbDo6RE9NOjpFdmVudExpc3RlbmVySWQsIGJvb2wpOworICAgIEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc2V0QnJlYWtwb2ludEZvckV2ZW50TGlzdGVu
ZXIoSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpFdmVudExpc3RlbmVySWQsIFJlZlB0cjxKU09O
OjpPYmplY3Q+JiYgb3B0aW9ucyk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJp
bmdPcjx2b2lkPiByZW1vdmVCcmVha3BvaW50Rm9yRXZlbnRMaXN0ZW5lcihJbnNwZWN0b3I6OlBy
b3RvY29sOjpET006OkV2ZW50TGlzdGVuZXJJZCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6
RXJyb3JTdHJpbmdPcjxSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5
UHJvcGVydGllcz4+IGdldEFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzRm9yTm9kZShJbnNwZWN0b3I6
OlByb3RvY29sOjpET006Ok5vZGVJZCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JT
dHJpbmdPcjxzdGQ6OnR1cGxlPFN0cmluZyAvKiBzZWFyY2hJZCAqLywgaW50IC8qIHJlc3VsdENv
dW50ICovPj4gcGVyZm9ybVNlYXJjaChjb25zdCBTdHJpbmcmIHF1ZXJ5LCBSZWZQdHI8SlNPTjo6
QXJyYXk+JiYgbm9kZUlkcywgT3B0aW9uYWw8Ym9vbD4mJiBjYXNlU2Vuc2l0aXZlKTsKKyAgICBJ
bnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkPj4+IGdldFNlYXJjaFJlc3VsdHMoY29uc3QgU3Ry
aW5nJiBzZWFyY2hJZCwgaW50IGZyb21JbmRleCwgaW50IHRvSW5kZXgpOworICAgIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZGlzY2FyZFNlYXJjaFJlc3VsdHMoY29u
c3QgU3RyaW5nJiBzZWFyY2hJZCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJp
bmdPcjxSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0Pj4gcmVz
b2x2ZU5vZGUoSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQsIGNvbnN0IFN0cmluZyYg
b2JqZWN0R3JvdXApOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVm
PEpTT046OkFycmF5T2Y8U3RyaW5nPj4+IGdldEF0dHJpYnV0ZXMoSW5zcGVjdG9yOjpQcm90b2Nv
bDo6RE9NOjpOb2RlSWQpOwogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgdm9pZCBzZXRJ
bnNwZWN0TW9kZUVuYWJsZWQoRXJyb3JTdHJpbmcmLCBib29sIGVuYWJsZWQsIGNvbnN0IEpTT046
Ok9iamVjdCogaGlnaGxpZ2h0Q29uZmlnKSBvdmVycmlkZTsKKyAgICBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHNldEluc3BlY3RNb2RlRW5hYmxlZChib29sLCBSZWZQ
dHI8SlNPTjo6T2JqZWN0PiYmIGhpZ2hsaWdodENvbmZpZyk7CiAjZWxzZQotICAgIHZvaWQgc2V0
SW5zcGVjdE1vZGVFbmFibGVkKEVycm9yU3RyaW5nJiwgYm9vbCBlbmFibGVkLCBjb25zdCBKU09O
OjpPYmplY3QqIGhpZ2hsaWdodENvbmZpZywgY29uc3QgYm9vbCogc2hvd1J1bGVycykgb3ZlcnJp
ZGU7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzZXRJbnNw
ZWN0TW9kZUVuYWJsZWQoYm9vbCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBoaWdobGlnaHRDb25m
aWcsIE9wdGlvbmFsPGJvb2w+JiYgc2hvd1J1bGVycyk7CiAjZW5kaWYKLSAgICB2b2lkIHJlcXVl
c3ROb2RlKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBvYmplY3RJZCwgaW50KiBub2RlSWQp
IG92ZXJyaWRlOwotICAgIHZvaWQgcHVzaE5vZGVCeVBhdGhUb0Zyb250ZW5kKEVycm9yU3RyaW5n
JiwgY29uc3QgU3RyaW5nJiBwYXRoLCBpbnQqIG5vZGVJZCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBo
aWRlSGlnaGxpZ2h0KEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBoaWdobGlnaHRS
ZWN0KEVycm9yU3RyaW5nJiwgaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGNv
bnN0IEpTT046Ok9iamVjdCogY29sb3IsIGNvbnN0IEpTT046Ok9iamVjdCogb3V0bGluZUNvbG9y
LCBjb25zdCBib29sKiB1c2VQYWdlQ29vcmRpbmF0ZXMpIG92ZXJyaWRlOwotICAgIHZvaWQgaGln
aGxpZ2h0UXVhZChFcnJvclN0cmluZyYsIGNvbnN0IEpTT046OkFycmF5JiBxdWFkLCBjb25zdCBK
U09OOjpPYmplY3QqIGNvbG9yLCBjb25zdCBKU09OOjpPYmplY3QqIG91dGxpbmVDb2xvciwgY29u
c3QgYm9vbCogdXNlUGFnZUNvb3JkaW5hdGVzKSBvdmVycmlkZTsKLSAgICB2b2lkIGhpZ2hsaWdo
dFNlbGVjdG9yKEVycm9yU3RyaW5nJiwgY29uc3QgSlNPTjo6T2JqZWN0JiBoaWdobGlnaHRDb25m
aWcsIGNvbnN0IFN0cmluZyYgc2VsZWN0b3JTdHJpbmcsIGNvbnN0IFN0cmluZyogZnJhbWVJZCkg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBoaWdobGlnaHROb2RlKEVycm9yU3RyaW5nJiwgY29uc3QgSlNP
Tjo6T2JqZWN0JiBoaWdobGlnaHRDb25maWcsIGNvbnN0IGludCogbm9kZUlkLCBjb25zdCBTdHJp
bmcqIG9iamVjdElkKSBvdmVycmlkZTsKLSAgICB2b2lkIGhpZ2hsaWdodE5vZGVMaXN0KEVycm9y
U3RyaW5nJiwgY29uc3QgSlNPTjo6QXJyYXkmIG5vZGVJZHMsIGNvbnN0IEpTT046Ok9iamVjdCYg
aGlnaGxpZ2h0Q29uZmlnKSBvdmVycmlkZTsKLSAgICB2b2lkIGhpZ2hsaWdodEZyYW1lKEVycm9y
U3RyaW5nJiwgY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBjb25zdCBKU09OOjpPYmplY3QqIGNvbG9y
LCBjb25zdCBKU09OOjpPYmplY3QqIG91dGxpbmVDb2xvcikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBt
b3ZlVG8oRXJyb3JTdHJpbmcmLCBpbnQgbm9kZUlkLCBpbnQgdGFyZ2V0Tm9kZUlkLCBjb25zdCBp
bnQqIGFuY2hvck5vZGVJZCwgaW50KiBuZXdOb2RlSWQpIG92ZXJyaWRlOwotICAgIHZvaWQgdW5k
byhFcnJvclN0cmluZyYpIG92ZXJyaWRlOwotICAgIHZvaWQgcmVkbyhFcnJvclN0cmluZyYpIG92
ZXJyaWRlOwotICAgIHZvaWQgbWFya1VuZG9hYmxlU3RhdGUoRXJyb3JTdHJpbmcmKSBvdmVycmlk
ZTsKLSAgICB2b2lkIGZvY3VzKEVycm9yU3RyaW5nJiwgaW50IG5vZGVJZCkgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCBzZXRJbnNwZWN0ZWROb2RlKEVycm9yU3RyaW5nJiwgaW50IG5vZGVJZCkgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCBzZXRBbGxvd0VkaXRpbmdVc2VyQWdlbnRTaGFkb3dUcmVlcyhFcnJvclN0
cmluZyYsIGJvb2wgYWxsb3cpIGZpbmFsOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQ+IHJlcXVlc3ROb2RlKGNv
bnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdElkJik7CisgICAg
SW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxJbnNwZWN0b3I6OlByb3RvY29sOjpE
T006Ok5vZGVJZD4gcHVzaE5vZGVCeVBhdGhUb0Zyb250ZW5kKGNvbnN0IFN0cmluZyYgcGF0aCk7
CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBoaWRlSGlnaGxp
Z2h0KCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBoaWdo
bGlnaHRSZWN0KGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBSZWZQdHI8SlNP
Tjo6T2JqZWN0PiYmIGNvbG9yLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIG91dGxpbmVDb2xvciwg
T3B0aW9uYWw8Ym9vbD4mJiB1c2VQYWdlQ29vcmRpbmF0ZXMpOworICAgIEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gaGlnaGxpZ2h0UXVhZChSZWY8SlNPTjo6QXJyYXk+
JiYgcXVhZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBjb2xvciwgUmVmUHRyPEpTT046Ok9iamVj
dD4mJiBvdXRsaW5lQ29sb3IsIE9wdGlvbmFsPGJvb2w+JiYgdXNlUGFnZUNvb3JkaW5hdGVzKTsK
KyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGhpZ2hsaWdodFNl
bGVjdG9yKFJlZjxKU09OOjpPYmplY3Q+JiYgaGlnaGxpZ2h0Q29uZmlnLCBjb25zdCBTdHJpbmcm
IHNlbGVjdG9yU3RyaW5nLCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpGcmFt
ZUlkJik7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBoaWdo
bGlnaHROb2RlKFJlZjxKU09OOjpPYmplY3Q+JiYgaGlnaGxpZ2h0Q29uZmlnLCBPcHRpb25hbDxJ
bnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZD4mJiwgY29uc3QgSW5zcGVjdG9yOjpQcm90
b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0SWQmKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29s
OjpFcnJvclN0cmluZ09yPHZvaWQ+IGhpZ2hsaWdodE5vZGVMaXN0KFJlZjxKU09OOjpBcnJheT4m
JiBub2RlSWRzLCBSZWY8SlNPTjo6T2JqZWN0PiYmIGhpZ2hsaWdodENvbmZpZyk7CisgICAgSW5z
cGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBoaWdobGlnaHRGcmFtZShjb25z
dCBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpGcmFtZUlkJiwgUmVmUHRyPEpTT046Ok9i
amVjdD4mJiBjb2xvciwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBvdXRsaW5lQ29sb3IpOworICAg
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8SW5zcGVjdG9yOjpQcm90b2NvbDo6
RE9NOjpOb2RlSWQ+IG1vdmVUbyhJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZCBub2Rl
SWQsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkIHRhcmdldE5vZGVJZCwgT3B0aW9u
YWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQ+JiYgaW5zZXJ0QmVmb3JlTm9kZUlk
KTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHVuZG8oKTsK
KyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHJlZG8oKTsKKyAg
ICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IG1hcmtVbmRvYWJsZVN0
YXRlKCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBmb2N1
cyhJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZCk7CisgICAgSW5zcGVjdG9yOjpQcm90
b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzZXRJbnNwZWN0ZWROb2RlKEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRPTTo6Tm9kZUlkKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmlu
Z09yPHZvaWQ+IHNldEFsbG93RWRpdGluZ1VzZXJBZ2VudFNoYWRvd1RyZWVzKGJvb2wpOwogCiAg
ICAgLy8gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uCi0gICAgaW50IGlkZW50aWZpZXJGb3JOb2Rl
KE5vZGUmKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZCBpZGVudGlmaWVy
Rm9yTm9kZShOb2RlJik7CiAgICAgdm9pZCBhZGRFdmVudExpc3RlbmVyc1RvTm9kZShOb2RlJik7
CiAgICAgdm9pZCBkaWRJbnNlcnRET01Ob2RlKE5vZGUmKTsKICAgICB2b2lkIGRpZFJlbW92ZURP
TU5vZGUoTm9kZSYpOwpAQCAtMTg1LDEyICsxODMsMTIgQEAgcHVibGljOgogCiAgICAgdm9pZCBz
dHlsZUF0dHJpYnV0ZUludmFsaWRhdGVkKGNvbnN0IFZlY3RvcjxFbGVtZW50Kj4mIGVsZW1lbnRz
KTsKIAotICAgIGludCBwdXNoTm9kZVRvRnJvbnRlbmQoTm9kZSopOwotICAgIGludCBwdXNoTm9k
ZVRvRnJvbnRlbmQoRXJyb3JTdHJpbmcmLCBpbnQgZG9jdW1lbnROb2RlSWQsIE5vZGUqKTsKLSAg
ICBpbnQgcHVzaE5vZGVQYXRoVG9Gcm9udGVuZChOb2RlKik7Ci0gICAgaW50IHB1c2hOb2RlUGF0
aFRvRnJvbnRlbmQoRXJyb3JTdHJpbmcsIE5vZGUqKTsKLSAgICBOb2RlKiBub2RlRm9ySWQoaW50
IG5vZGVJZCk7Ci0gICAgaW50IGJvdW5kTm9kZUlkKGNvbnN0IE5vZGUqKTsKKyAgICBJbnNwZWN0
b3I6OlByb3RvY29sOjpET006Ok5vZGVJZCBwdXNoTm9kZVRvRnJvbnRlbmQoTm9kZSopOworICAg
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkIHB1c2hOb2RlVG9Gcm9udGVuZChJbnNw
ZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZyYsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6
Tm9kZUlkIGRvY3VtZW50Tm9kZUlkLCBOb2RlKik7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6
RE9NOjpOb2RlSWQgcHVzaE5vZGVQYXRoVG9Gcm9udGVuZChOb2RlKik7CisgICAgSW5zcGVjdG9y
OjpQcm90b2NvbDo6RE9NOjpOb2RlSWQgcHVzaE5vZGVQYXRoVG9Gcm9udGVuZChJbnNwZWN0b3I6
OlByb3RvY29sOjpFcnJvclN0cmluZywgTm9kZSopOworICAgIE5vZGUqIG5vZGVGb3JJZChJbnNw
ZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6
RE9NOjpOb2RlSWQgYm91bmROb2RlSWQoY29uc3QgTm9kZSopOwogCiAgICAgUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4gcmVzb2x2ZU5vZGUoTm9kZSos
IGNvbnN0IFN0cmluZyYgb2JqZWN0R3JvdXApOwogICAgIGJvb2wgaGFuZGxlTW91c2VQcmVzcygp
OwpAQCAtMjAyLDEyICsyMDAsMTIgQEAgcHVibGljOgogICAgIFZlY3RvcjxEb2N1bWVudCo+IGRv
Y3VtZW50cygpOwogICAgIHZvaWQgcmVzZXQoKTsKIAotICAgIE5vZGUqIGFzc2VydE5vZGUoRXJy
b3JTdHJpbmcmLCBpbnQgbm9kZUlkKTsKLSAgICBFbGVtZW50KiBhc3NlcnRFbGVtZW50KEVycm9y
U3RyaW5nJiwgaW50IG5vZGVJZCk7Ci0gICAgRG9jdW1lbnQqIGFzc2VydERvY3VtZW50KEVycm9y
U3RyaW5nJiwgaW50IG5vZGVJZCk7CisgICAgTm9kZSogYXNzZXJ0Tm9kZShJbnNwZWN0b3I6OlBy
b3RvY29sOjpFcnJvclN0cmluZyYsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkKTsK
KyAgICBFbGVtZW50KiBhc3NlcnRFbGVtZW50KEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3Ry
aW5nJiwgSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQpOworICAgIERvY3VtZW50KiBh
c3NlcnREb2N1bWVudChJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZyYsIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkKTsKIAogICAgIFJlZlB0cjxKU0M6OkJyZWFrcG9pbnQ+
IGJyZWFrcG9pbnRGb3JFdmVudExpc3RlbmVyKEV2ZW50VGFyZ2V0JiwgY29uc3QgQXRvbVN0cmlu
ZyYgZXZlbnRUeXBlLCBFdmVudExpc3RlbmVyJiwgYm9vbCBjYXB0dXJlKTsKLSAgICBpbnQgaWRG
b3JFdmVudExpc3RlbmVyKEV2ZW50VGFyZ2V0JiwgY29uc3QgQXRvbVN0cmluZyYgZXZlbnRUeXBl
LCBFdmVudExpc3RlbmVyJiwgYm9vbCBjYXB0dXJlKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29s
OjpET006OkV2ZW50TGlzdGVuZXJJZCBpZEZvckV2ZW50TGlzdGVuZXIoRXZlbnRUYXJnZXQmLCBj
b25zdCBBdG9tU3RyaW5nJiBldmVudFR5cGUsIEV2ZW50TGlzdGVuZXImLCBib29sIGNhcHR1cmUp
OwogCiBwcml2YXRlOgogI2lmIEVOQUJMRShWSURFTykKQEAgLTIxNSwzMyArMjEzLDMzIEBAIHBy
aXZhdGU6CiAjZW5kaWYKIAogICAgIHZvaWQgaGlnaGxpZ2h0TW91c2VkT3Zlck5vZGUoKTsKLSAg
ICB2b2lkIHNldFNlYXJjaGluZ0Zvck5vZGUoRXJyb3JTdHJpbmcmLCBib29sIGVuYWJsZWQsIGNv
bnN0IEpTT046Ok9iamVjdCogaGlnaGxpZ2h0Q29uZmlnLCBib29sIHNob3dSdWxlcnMpOwotICAg
IHN0ZDo6dW5pcXVlX3B0cjxIaWdobGlnaHRDb25maWc+IGhpZ2hsaWdodENvbmZpZ0Zyb21JbnNw
ZWN0b3JPYmplY3QoRXJyb3JTdHJpbmcmLCBjb25zdCBKU09OOjpPYmplY3QqIGhpZ2hsaWdodElu
c3BlY3Rvck9iamVjdCk7CisgICAgdm9pZCBzZXRTZWFyY2hpbmdGb3JOb2RlKEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkVycm9yU3RyaW5nJiwgYm9vbCBlbmFibGVkLCBSZWZQdHI8SlNPTjo6T2JqZWN0
PiYmIGhpZ2hsaWdodENvbmZpZywgYm9vbCBzaG93UnVsZXJzKTsKKyAgICBzdGQ6OnVuaXF1ZV9w
dHI8SGlnaGxpZ2h0Q29uZmlnPiBoaWdobGlnaHRDb25maWdGcm9tSW5zcGVjdG9yT2JqZWN0KElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nJiwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBo
aWdobGlnaHRJbnNwZWN0b3JPYmplY3QpOwogCiAgICAgLy8gTm9kZS1yZWxhdGVkIG1ldGhvZHMu
Ci0gICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxOb2RlPiwgaW50PiBOb2RlVG9JZE1hcDsKLSAg
ICBpbnQgYmluZChOb2RlKiwgTm9kZVRvSWRNYXAqKTsKKyAgICB0eXBlZGVmIEhhc2hNYXA8UmVm
UHRyPE5vZGU+LCBJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZD4gTm9kZVRvSWRNYXA7
CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQgYmluZChOb2RlKiwgTm9kZVRv
SWRNYXAqKTsKICAgICB2b2lkIHVuYmluZChOb2RlKiwgTm9kZVRvSWRNYXAqKTsKIAotICAgIE5v
ZGUqIGFzc2VydEVkaXRhYmxlTm9kZShFcnJvclN0cmluZyYsIGludCBub2RlSWQpOwotICAgIEVs
ZW1lbnQqIGFzc2VydEVkaXRhYmxlRWxlbWVudChFcnJvclN0cmluZyYsIGludCBub2RlSWQpOwor
ICAgIE5vZGUqIGFzc2VydEVkaXRhYmxlTm9kZShJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0
cmluZyYsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkKTsKKyAgICBFbGVtZW50KiBh
c3NlcnRFZGl0YWJsZUVsZW1lbnQoSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBJ
bnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZCk7CiAKLSAgICB2b2lkIHB1c2hDaGlsZE5v
ZGVzVG9Gcm9udGVuZChpbnQgbm9kZUlkLCBpbnQgZGVwdGggPSAxKTsKKyAgICB2b2lkIHB1c2hD
aGlsZE5vZGVzVG9Gcm9udGVuZChJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZCwgaW50
IGRlcHRoID0gMSk7CiAKICAgICBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlPiBi
dWlsZE9iamVjdEZvck5vZGUoTm9kZSosIGludCBkZXB0aCwgTm9kZVRvSWRNYXAqKTsKICAgICBS
ZWY8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiBidWlsZEFycmF5Rm9yRWxlbWVudEF0dHJpYnV0ZXMo
RWxlbWVudCopOwogICAgIFJlZjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRP
TTo6Tm9kZT4+IGJ1aWxkQXJyYXlGb3JDb250YWluZXJDaGlsZHJlbihOb2RlKiBjb250YWluZXIs
IGludCBkZXB0aCwgTm9kZVRvSWRNYXAqIG5vZGVzTWFwKTsKICAgICBSZWZQdHI8SlNPTjo6QXJy
YXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+PiBidWlsZEFycmF5Rm9yUHNldWRv
RWxlbWVudHMoY29uc3QgRWxlbWVudCYsIE5vZGVUb0lkTWFwKiBub2Rlc01hcCk7Ci0gICAgUmVm
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6RXZlbnRMaXN0ZW5lcj4gYnVpbGRPYmplY3RGb3JF
dmVudExpc3RlbmVyKGNvbnN0IFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyJiwgaW50IGlkZW50aWZp
ZXIsIEV2ZW50VGFyZ2V0JiwgY29uc3QgQXRvbVN0cmluZyYgZXZlbnRUeXBlLCBib29sIGRpc2Fi
bGVkLCBjb25zdCBSZWZQdHI8SlNDOjpCcmVha3BvaW50PiYpOwotICAgIFJlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzPiBidWlsZE9iamVjdEZv
ckFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzKE5vZGUqKTsKLSAgICB2b2lkIHByb2Nlc3NBY2Nlc3Np
YmlsaXR5Q2hpbGRyZW4oQVhDb3JlT2JqZWN0JiwgSlNPTjo6QXJyYXlPZjxpbnQ+Jik7CisgICAg
UmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6RXZlbnRMaXN0ZW5lcj4gYnVpbGRPYmplY3RG
b3JFdmVudExpc3RlbmVyKGNvbnN0IFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyJiwgSW5zcGVjdG9y
OjpQcm90b2NvbDo6RE9NOjpFdmVudExpc3RlbmVySWQgaWRlbnRpZmllciwgRXZlbnRUYXJnZXQm
LCBjb25zdCBBdG9tU3RyaW5nJiBldmVudFR5cGUsIGJvb2wgZGlzYWJsZWQsIGNvbnN0IFJlZlB0
cjxKU0M6OkJyZWFrcG9pbnQ+Jik7CisgICAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6
QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM+IGJ1aWxkT2JqZWN0Rm9yQWNjZXNzaWJpbGl0eVByb3Bl
cnRpZXMoTm9kZSYpOworICAgIHZvaWQgcHJvY2Vzc0FjY2Vzc2liaWxpdHlDaGlsZHJlbihBWENv
cmVPYmplY3QmLCBKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlk
PiYpOwogICAgIAogICAgIE5vZGUqIG5vZGVGb3JQYXRoKGNvbnN0IFN0cmluZyYgcGF0aCk7Ci0g
ICAgTm9kZSogbm9kZUZvck9iamVjdElkKGNvbnN0IFN0cmluZyYgb2JqZWN0SWQpOworICAgIE5v
ZGUqIG5vZGVGb3JPYmplY3RJZChjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpS
ZW1vdGVPYmplY3RJZCYpOwogCiAgICAgdm9pZCBkaXNjYXJkQmluZGluZ3MoKTsKIAotICAgIHZv
aWQgaW5uZXJIaWdobGlnaHRRdWFkKHN0ZDo6dW5pcXVlX3B0cjxGbG9hdFF1YWQ+LCBjb25zdCBK
U09OOjpPYmplY3QqIGNvbG9yLCBjb25zdCBKU09OOjpPYmplY3QqIG91dGxpbmVDb2xvciwgY29u
c3QgYm9vbCogdXNlUGFnZUNvb3JkaW5hdGVzKTsKKyAgICB2b2lkIGlubmVySGlnaGxpZ2h0UXVh
ZChzdGQ6OnVuaXF1ZV9wdHI8RmxvYXRRdWFkPiwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBjb2xv
ciwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBvdXRsaW5lQ29sb3IsIE9wdGlvbmFsPGJvb2w+JiYg
dXNlUGFnZUNvb3JkaW5hdGVzKTsKIAogICAgIEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHRNYW5h
Z2VyJiBtX2luamVjdGVkU2NyaXB0TWFuYWdlcjsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW5zcGVj
dG9yOjpET01Gcm9udGVuZERpc3BhdGNoZXI+IG1fZnJvbnRlbmREaXNwYXRjaGVyOwpAQCAtMjUx
LDEwICsyNDksMTAgQEAgcHJpdmF0ZToKICAgICBOb2RlVG9JZE1hcCBtX2RvY3VtZW50Tm9kZVRv
SWRNYXA7CiAgICAgLy8gT3ducyBub2RlIG1hcHBpbmdzIGZvciBkYW5nbGluZyBub2Rlcy4KICAg
ICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPE5vZGVUb0lkTWFwPj4gbV9kYW5nbGluZ05vZGVUb0lk
TWFwczsKLSAgICBIYXNoTWFwPGludCwgTm9kZSo+IG1faWRUb05vZGU7Ci0gICAgSGFzaE1hcDxp
bnQsIE5vZGVUb0lkTWFwKj4gbV9pZFRvTm9kZXNNYXA7Ci0gICAgSGFzaFNldDxpbnQ+IG1fY2hp
bGRyZW5SZXF1ZXN0ZWQ7Ci0gICAgaW50IG1fbGFzdE5vZGVJZCB7IDEgfTsKKyAgICBIYXNoTWFw
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkLCBOb2RlKj4gbV9pZFRvTm9kZTsKKyAg
ICBIYXNoTWFwPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkLCBOb2RlVG9JZE1hcCo+
IG1faWRUb05vZGVzTWFwOworICAgIEhhc2hTZXQ8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpO
b2RlSWQ+IG1fY2hpbGRyZW5SZXF1ZXN0ZWQ7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9N
OjpOb2RlSWQgbV9sYXN0Tm9kZUlkIHsgMSB9OwogICAgIFJlZlB0cjxEb2N1bWVudD4gbV9kb2N1
bWVudDsKICAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBWZWN0b3I8UmVmUHRyPE5vZGU+Pj4g
U2VhcmNoUmVzdWx0czsKICAgICBTZWFyY2hSZXN1bHRzIG1fc2VhcmNoUmVzdWx0czsKQEAgLTI4
NSw3ICsyODMsNyBAQCBwcml2YXRlOgogI2VuZGlmCiAKICAgICBzdHJ1Y3QgSW5zcGVjdG9yRXZl
bnRMaXN0ZW5lciB7Ci0gICAgICAgIGludCBpZGVudGlmaWVyIHsgMSB9OworICAgICAgICBJbnNw
ZWN0b3I6OlByb3RvY29sOjpET006OkV2ZW50TGlzdGVuZXJJZCBpZGVudGlmaWVyIHsgMSB9Owog
ICAgICAgICBSZWZQdHI8RXZlbnRUYXJnZXQ+IGV2ZW50VGFyZ2V0OwogICAgICAgICBSZWZQdHI8
RXZlbnRMaXN0ZW5lcj4gZXZlbnRMaXN0ZW5lcjsKICAgICAgICAgQXRvbVN0cmluZyBldmVudFR5
cGU7CkBAIC0yOTUsNyArMjkzLDcgQEAgcHJpdmF0ZToKIAogICAgICAgICBJbnNwZWN0b3JFdmVu
dExpc3RlbmVyKCkgeyB9CiAKLSAgICAgICAgSW5zcGVjdG9yRXZlbnRMaXN0ZW5lcihpbnQgaWRl
bnRpZmllciwgRXZlbnRUYXJnZXQmIHRhcmdldCwgY29uc3QgQXRvbVN0cmluZyYgdHlwZSwgRXZl
bnRMaXN0ZW5lciYgbGlzdGVuZXIsIGJvb2wgY2FwdHVyZSkKKyAgICAgICAgSW5zcGVjdG9yRXZl
bnRMaXN0ZW5lcihJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkV2ZW50TGlzdGVuZXJJZCBpZGVu
dGlmaWVyLCBFdmVudFRhcmdldCYgdGFyZ2V0LCBjb25zdCBBdG9tU3RyaW5nJiB0eXBlLCBFdmVu
dExpc3RlbmVyJiBsaXN0ZW5lciwgYm9vbCBjYXB0dXJlKQogICAgICAgICAgICAgOiBpZGVudGlm
aWVyKGlkZW50aWZpZXIpCiAgICAgICAgICAgICAsIGV2ZW50VGFyZ2V0KCZ0YXJnZXQpCiAgICAg
ICAgICAgICAsIGV2ZW50TGlzdGVuZXIoJmxpc3RlbmVyKQpAQCAtMzIxLDggKzMxOSw4IEBAIHBy
aXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEV2ZW50RmlyZWRDYWxsYmFjazsKIAogICAgIEhhc2hT
ZXQ8Y29uc3QgRXZlbnQqPiBtX2Rpc3BhdGNoZWRFdmVudHM7Ci0gICAgSGFzaE1hcDxpbnQsIElu
c3BlY3RvckV2ZW50TGlzdGVuZXI+IG1fZXZlbnRMaXN0ZW5lckVudHJpZXM7Ci0gICAgaW50IG1f
bGFzdEV2ZW50TGlzdGVuZXJJZCB7IDEgfTsKKyAgICBIYXNoTWFwPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRPTTo6RXZlbnRMaXN0ZW5lcklkLCBJbnNwZWN0b3JFdmVudExpc3RlbmVyPiBtX2V2ZW50
TGlzdGVuZXJFbnRyaWVzOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6RXZlbnRMaXN0
ZW5lcklkIG1fbGFzdEV2ZW50TGlzdGVuZXJJZCB7IDEgfTsKIAogICAgIGJvb2wgbV9zZWFyY2hp
bmdGb3JOb2RlIHsgZmFsc2UgfTsKICAgICBib29sIG1fc3VwcHJlc3NBdHRyaWJ1dGVNb2RpZmll
ZEV2ZW50IHsgZmFsc2UgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9h
Z2VudHMvSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQuY3BwCmluZGV4IDA3OWExMTY4
NmU0OThiODQ3OTk1NTljZjNjZDhhZjJmN2MwOTE4MTcuLmMzMmU1YTM5MTRlNzlmMzBiYzE0ZTY4
ZGQ2Y2ZiZDMxYjAwNTQ5ZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9h
Z2VudHMvSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50LmNwcApAQCAtMTI4LDEw
OSArMTI4LDk0IEBAIHZvaWQgSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudDo6bWFpbkZyYW1lTmF2
aWdhdGVkKCkKICAgICAgICAgbV9wYXVzZU9uQWxsVGltZW91dHNCcmVha3BvaW50LT5yZXNldEhp
dENvdW50KCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudDo6c2V0RXZlbnRC
cmVha3BvaW50KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBicmVha3Bv
aW50VHlwZVN0cmluZywgY29uc3QgU3RyaW5nKiBldmVudE5hbWUsIGNvbnN0IEpTT046Ok9iamVj
dCogb3B0aW9uc1BheWxvYWQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0
b3JET01EZWJ1Z2dlckFnZW50OjpzZXRFdmVudEJyZWFrcG9pbnQoUHJvdG9jb2w6OkRPTURlYnVn
Z2VyOjpFdmVudEJyZWFrcG9pbnRUeXBlIGJyZWFrcG9pbnRUeXBlLCBjb25zdCBTdHJpbmcmIGV2
ZW50TmFtZSwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBvcHRpb25zKQogewotICAgIGlmIChicmVh
a3BvaW50VHlwZVN0cmluZy5pc0VtcHR5KCkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiYnJl
YWtwb2ludFR5cGUgaXMgZW1wdHkiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgUHJv
dG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOwogCi0gICAgYXV0byBicmVha3BvaW50VHlw
ZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6Okluc3BlY3RvckhlbHBlcnM6OnBhcnNlRW51bVZhbHVl
RnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpET01EZWJ1Z2dlcjo6RXZlbnRCcmVha3Bv
aW50VHlwZT4oYnJlYWtwb2ludFR5cGVTdHJpbmcpOwotICAgIGlmICghYnJlYWtwb2ludFR5cGUp
IHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSBtYWtlU3RyaW5nKCJVbmtub3duIGJyZWFrcG9pbnRU
eXBlOiAiX3MsIGJyZWFrcG9pbnRUeXBlU3RyaW5nKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIGF1dG8gYnJlYWtwb2ludCA9IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRlYnVnZ2Vy
QnJlYWtwb2ludEZyb21QYXlsb2FkKGVycm9yU3RyaW5nLCBvcHRpb25zUGF5bG9hZCk7CisgICAg
YXV0byBicmVha3BvaW50ID0gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGVidWdnZXJCcmVha3Bv
aW50RnJvbVBheWxvYWQoZXJyb3JTdHJpbmcsIFdURk1vdmUob3B0aW9ucykpOwogICAgIGlmICgh
YnJlYWtwb2ludCkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0
ZWQoZXJyb3JTdHJpbmcpOwogCi0gICAgaWYgKGV2ZW50TmFtZSAmJiAhZXZlbnROYW1lLT5pc0Vt
cHR5KCkpIHsKLSAgICAgICAgaWYgKGJyZWFrcG9pbnRUeXBlLnZhbHVlKCkgPT0gSW5zcGVjdG9y
OjpQcm90b2NvbDo6RE9NRGVidWdnZXI6OkV2ZW50QnJlYWtwb2ludFR5cGU6Okxpc3RlbmVyKSB7
Ci0gICAgICAgICAgICBpZiAoIW1fbGlzdGVuZXJCcmVha3BvaW50cy5hZGQoKmV2ZW50TmFtZSwg
YnJlYWtwb2ludC5yZWxlYXNlTm9uTnVsbCgpKSkKLSAgICAgICAgICAgICAgICBlcnJvclN0cmlu
ZyA9ICJCcmVha3BvaW50IHdpdGggZXZlbnROYW1lIGFscmVhZHkgZXhpc3RzIl9zOwotICAgICAg
ICAgICAgcmV0dXJuOworICAgIGlmICghZXZlbnROYW1lLmlzRW1wdHkoKSkgeworICAgICAgICBp
ZiAoYnJlYWtwb2ludFR5cGUgPT0gUHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpFdmVudEJyZWFrcG9p
bnRUeXBlOjpMaXN0ZW5lcikgeworICAgICAgICAgICAgaWYgKCFtX2xpc3RlbmVyQnJlYWtwb2lu
dHMuYWRkKGV2ZW50TmFtZSwgYnJlYWtwb2ludC5yZWxlYXNlTm9uTnVsbCgpKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkJyZWFrcG9pbnQgd2l0aCBldmVudE5hbWUg
YWxyZWFkeSBleGlzdHMiX3MpOworICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAgICAgfQog
Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIlVuZXhwZWN0ZWQgZXZlbnROYW1lIl9zOwotICAgICAg
ICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiVW5leHBlY3RlZCBldmVu
dE5hbWUiX3MpOwogICAgIH0KIAotICAgIHN3aXRjaCAoYnJlYWtwb2ludFR5cGUudmFsdWUoKSkg
ewotICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NRGVidWdnZXI6OkV2ZW50QnJlYWtw
b2ludFR5cGU6OkFuaW1hdGlvbkZyYW1lOgotICAgICAgICBzZXRBbmltYXRpb25GcmFtZUJyZWFr
cG9pbnQoZXJyb3JTdHJpbmcsIFdURk1vdmUoYnJlYWtwb2ludCkpOwotICAgICAgICBicmVhazsK
KyAgICBzd2l0Y2ggKGJyZWFrcG9pbnRUeXBlKSB7CisgICAgY2FzZSBQcm90b2NvbDo6RE9NRGVi
dWdnZXI6OkV2ZW50QnJlYWtwb2ludFR5cGU6OkFuaW1hdGlvbkZyYW1lOgorICAgICAgICBpZiAo
IXNldEFuaW1hdGlvbkZyYW1lQnJlYWtwb2ludChlcnJvclN0cmluZywgV1RGTW92ZShicmVha3Bv
aW50KSkpCisgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwor
ICAgICAgICByZXR1cm4geyB9OwogCi0gICAgY2FzZSBJbnNwZWN0b3I6OlByb3RvY29sOjpET01E
ZWJ1Z2dlcjo6RXZlbnRCcmVha3BvaW50VHlwZTo6SW50ZXJ2YWw6Ci0gICAgICAgIGlmICghbV9w
YXVzZU9uQWxsSW50ZXJ2YWxzQnJlYWtwb2ludCkKLSAgICAgICAgICAgIG1fcGF1c2VPbkFsbElu
dGVydmFsc0JyZWFrcG9pbnQgPSBXVEZNb3ZlKGJyZWFrcG9pbnQpOwotICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBlcnJvclN0cmluZyA9ICJCcmVha3BvaW50IGZvciBJbnRlcnZhbCBhbHJlYWR5
IGV4aXN0cyJfczsKLSAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQcm90b2NvbDo6RE9NRGVidWdn
ZXI6OkV2ZW50QnJlYWtwb2ludFR5cGU6OkludGVydmFsOgorICAgICAgICBpZiAobV9wYXVzZU9u
QWxsSW50ZXJ2YWxzQnJlYWtwb2ludCkKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3Rl
ZCgiQnJlYWtwb2ludCBmb3IgSW50ZXJ2YWwgYWxyZWFkeSBleGlzdHMiX3MpOworICAgICAgICBt
X3BhdXNlT25BbGxJbnRlcnZhbHNCcmVha3BvaW50ID0gV1RGTW92ZShicmVha3BvaW50KTsKKyAg
ICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NRGVi
dWdnZXI6OkV2ZW50QnJlYWtwb2ludFR5cGU6Okxpc3RlbmVyOgotICAgICAgICBpZiAoIW1fcGF1
c2VPbkFsbExpc3RlbmVyc0JyZWFrcG9pbnQpCi0gICAgICAgICAgICBtX3BhdXNlT25BbGxMaXN0
ZW5lcnNCcmVha3BvaW50ID0gV1RGTW92ZShicmVha3BvaW50KTsKLSAgICAgICAgZWxzZQotICAg
ICAgICAgICAgZXJyb3JTdHJpbmcgPSAiQnJlYWtwb2ludCBmb3IgTGlzdGVuZXIgYWxyZWFkeSBl
eGlzdHMiX3M7Ci0gICAgICAgIGJyZWFrOworICAgIGNhc2UgUHJvdG9jb2w6OkRPTURlYnVnZ2Vy
OjpFdmVudEJyZWFrcG9pbnRUeXBlOjpMaXN0ZW5lcjoKKyAgICAgICAgaWYgKG1fcGF1c2VPbkFs
bExpc3RlbmVyc0JyZWFrcG9pbnQpCisgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQo
IkJyZWFrcG9pbnQgZm9yIExpc3RlbmVyIGFscmVhZHkgZXhpc3RzIl9zKTsKKyAgICAgICAgbV9w
YXVzZU9uQWxsTGlzdGVuZXJzQnJlYWtwb2ludCA9IFdURk1vdmUoYnJlYWtwb2ludCk7CisgICAg
ICAgIHJldHVybiB7IH07CiAKLSAgICBjYXNlIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTURlYnVn
Z2VyOjpFdmVudEJyZWFrcG9pbnRUeXBlOjpUaW1lb3V0OgotICAgICAgICBpZiAoIW1fcGF1c2VP
bkFsbFRpbWVvdXRzQnJlYWtwb2ludCkKLSAgICAgICAgICAgIG1fcGF1c2VPbkFsbFRpbWVvdXRz
QnJlYWtwb2ludCA9IFdURk1vdmUoYnJlYWtwb2ludCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIGVycm9yU3RyaW5nID0gIkJyZWFrcG9pbnQgZm9yIFRpbWVvdXQgYWxyZWFkeSBleGlzdHMi
X3M7Ci0gICAgICAgIGJyZWFrOworICAgIGNhc2UgUHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpFdmVu
dEJyZWFrcG9pbnRUeXBlOjpUaW1lb3V0OgorICAgICAgICBpZiAobV9wYXVzZU9uQWxsVGltZW91
dHNCcmVha3BvaW50KQorICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJCcmVha3Bv
aW50IGZvciBUaW1lb3V0IGFscmVhZHkgZXhpc3RzIl9zKTsKKyAgICAgICAgbV9wYXVzZU9uQWxs
VGltZW91dHNCcmVha3BvaW50ID0gV1RGTW92ZShicmVha3BvaW50KTsKKyAgICAgICAgcmV0dXJu
IHsgfTsKICAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gbWFr
ZVVuZXhwZWN0ZWQoIk5vdCBzdXBwb3J0ZWQiKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01EZWJ1
Z2dlckFnZW50OjpyZW1vdmVFdmVudEJyZWFrcG9pbnQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5n
LCBjb25zdCBTdHJpbmcmIGJyZWFrcG9pbnRUeXBlU3RyaW5nLCBjb25zdCBTdHJpbmcqIGV2ZW50
TmFtZSkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRPTURlYnVnZ2Vy
QWdlbnQ6OnJlbW92ZUV2ZW50QnJlYWtwb2ludChQcm90b2NvbDo6RE9NRGVidWdnZXI6OkV2ZW50
QnJlYWtwb2ludFR5cGUgYnJlYWtwb2ludFR5cGUsIGNvbnN0IFN0cmluZyYgZXZlbnROYW1lKQog
ewotICAgIGlmIChicmVha3BvaW50VHlwZVN0cmluZy5pc0VtcHR5KCkpIHsKLSAgICAgICAgZXJy
b3JTdHJpbmcgPSAiYnJlYWtwb2ludFR5cGUgaXMgZW1wdHkiX3M7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOwogCi0gICAgYXV0
byBicmVha3BvaW50VHlwZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6Okluc3BlY3RvckhlbHBlcnM6
OnBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpET01EZWJ1Z2dl
cjo6RXZlbnRCcmVha3BvaW50VHlwZT4oYnJlYWtwb2ludFR5cGVTdHJpbmcpOwotICAgIGlmICgh
YnJlYWtwb2ludFR5cGUpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSBtYWtlU3RyaW5nKCJVbmtu
b3duIGJyZWFrcG9pbnRUeXBlOiAiX3MsIGJyZWFrcG9pbnRUeXBlU3RyaW5nKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIGlmIChldmVudE5hbWUgJiYgIWV2ZW50TmFtZS0+aXNFbXB0
eSgpKSB7Ci0gICAgICAgIGlmIChicmVha3BvaW50VHlwZS52YWx1ZSgpID09IEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpFdmVudEJyZWFrcG9pbnRUeXBlOjpMaXN0ZW5lcikgewot
ICAgICAgICAgICAgaWYgKCFtX2xpc3RlbmVyQnJlYWtwb2ludHMucmVtb3ZlKCpldmVudE5hbWUp
KQotICAgICAgICAgICAgICAgIGVycm9yU3RyaW5nID0gIkJyZWFrcG9pbnQgZm9yIGdpdmVuIGV2
ZW50TmFtZSBtaXNzaW5nIl9zOwotICAgICAgICAgICAgcmV0dXJuOworICAgIGlmICghZXZlbnRO
YW1lLmlzRW1wdHkoKSkgeworICAgICAgICBpZiAoYnJlYWtwb2ludFR5cGUgPT0gUHJvdG9jb2w6
OkRPTURlYnVnZ2VyOjpFdmVudEJyZWFrcG9pbnRUeXBlOjpMaXN0ZW5lcikgeworICAgICAgICAg
ICAgaWYgKCFtX2xpc3RlbmVyQnJlYWtwb2ludHMucmVtb3ZlKGV2ZW50TmFtZSkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJCcmVha3BvaW50IGZvciBnaXZlbiBldmVu
dE5hbWUgbWlzc2luZyJfcyk7CisgICAgICAgICAgICByZXR1cm4geyB9OwogICAgICAgICB9CiAK
LSAgICAgICAgZXJyb3JTdHJpbmcgPSAiVW5leHBlY3RlZCBldmVudE5hbWUiX3M7Ci0gICAgICAg
IHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJVbmV4cGVjdGVkIGV2ZW50
TmFtZSJfcyk7CiAgICAgfQogCi0gICAgc3dpdGNoIChicmVha3BvaW50VHlwZS52YWx1ZSgpKSB7
Ci0gICAgY2FzZSBJbnNwZWN0b3I6OlByb3RvY29sOjpET01EZWJ1Z2dlcjo6RXZlbnRCcmVha3Bv
aW50VHlwZTo6QW5pbWF0aW9uRnJhbWU6Ci0gICAgICAgIHNldEFuaW1hdGlvbkZyYW1lQnJlYWtw
b2ludChlcnJvclN0cmluZywgbnVsbHB0cik7Ci0gICAgICAgIGJyZWFrOworICAgIHN3aXRjaCAo
YnJlYWtwb2ludFR5cGUpIHsKKyAgICBjYXNlIFByb3RvY29sOjpET01EZWJ1Z2dlcjo6RXZlbnRC
cmVha3BvaW50VHlwZTo6QW5pbWF0aW9uRnJhbWU6CisgICAgICAgIGlmICghc2V0QW5pbWF0aW9u
RnJhbWVCcmVha3BvaW50KGVycm9yU3RyaW5nLCBudWxscHRyKSkKKyAgICAgICAgICAgIHJldHVy
biBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CisgICAgICAgIHJldHVybiB7IH07CiAKLSAg
ICBjYXNlIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpFdmVudEJyZWFrcG9pbnRU
eXBlOjpJbnRlcnZhbDoKKyAgICBjYXNlIFByb3RvY29sOjpET01EZWJ1Z2dlcjo6RXZlbnRCcmVh
a3BvaW50VHlwZTo6SW50ZXJ2YWw6CiAgICAgICAgIGlmICghbV9wYXVzZU9uQWxsSW50ZXJ2YWxz
QnJlYWtwb2ludCkKLSAgICAgICAgICAgIGVycm9yU3RyaW5nID0gIkJyZWFrcG9pbnQgZm9yIElu
dGVydmFscyBtaXNzaW5nIl9zOworICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJC
cmVha3BvaW50IGZvciBJbnRlcnZhbHMgbWlzc2luZyJfcyk7CiAgICAgICAgIG1fcGF1c2VPbkFs
bEludGVydmFsc0JyZWFrcG9pbnQgPSBudWxscHRyOwotICAgICAgICBicmVhazsKKyAgICAgICAg
cmV0dXJuIHsgfTsKIAotICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NRGVidWdnZXI6
OkV2ZW50QnJlYWtwb2ludFR5cGU6Okxpc3RlbmVyOgorICAgIGNhc2UgUHJvdG9jb2w6OkRPTURl
YnVnZ2VyOjpFdmVudEJyZWFrcG9pbnRUeXBlOjpMaXN0ZW5lcjoKICAgICAgICAgaWYgKCFtX3Bh
dXNlT25BbGxMaXN0ZW5lcnNCcmVha3BvaW50KQotICAgICAgICAgICAgZXJyb3JTdHJpbmcgPSAi
QnJlYWtwb2ludCBmb3IgTGlzdGVuZXJzIG1pc3NpbmciX3M7CisgICAgICAgICAgICByZXR1cm4g
bWFrZVVuZXhwZWN0ZWQoIkJyZWFrcG9pbnQgZm9yIExpc3RlbmVycyBtaXNzaW5nIl9zKTsKICAg
ICAgICAgbV9wYXVzZU9uQWxsTGlzdGVuZXJzQnJlYWtwb2ludCA9IG51bGxwdHI7Ci0gICAgICAg
IGJyZWFrOworICAgICAgICByZXR1cm4geyB9OwogCi0gICAgY2FzZSBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpET01EZWJ1Z2dlcjo6RXZlbnRCcmVha3BvaW50VHlwZTo6VGltZW91dDoKKyAgICBjYXNl
IFByb3RvY29sOjpET01EZWJ1Z2dlcjo6RXZlbnRCcmVha3BvaW50VHlwZTo6VGltZW91dDoKICAg
ICAgICAgaWYgKCFtX3BhdXNlT25BbGxUaW1lb3V0c0JyZWFrcG9pbnQpCi0gICAgICAgICAgICBl
cnJvclN0cmluZyA9ICJCcmVha3BvaW50IGZvciBUaW1lb3V0cyBtaXNzaW5nIl9zOworICAgICAg
ICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJCcmVha3BvaW50IGZvciBUaW1lb3V0cyBtaXNz
aW5nIl9zKTsKICAgICAgICAgbV9wYXVzZU9uQWxsVGltZW91dHNCcmVha3BvaW50ID0gbnVsbHB0
cjsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybiB7IH07CiAgICAgfQorCisgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJOb3Qgc3VwcG9y
dGVkIik7CiB9CiAKIHZvaWQgSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudDo6d2lsbEhhbmRsZUV2
ZW50KEV2ZW50JiBldmVudCwgY29uc3QgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXImIHJlZ2lzdGVy
ZWRFdmVudExpc3RlbmVyKQpAQCAtMzI5LDQ1ICszMTQsNTAgQEAgdm9pZCBJbnNwZWN0b3JET01E
ZWJ1Z2dlckFnZW50OjpkaWRGaXJlVGltZXIoYm9vbCBvbmVTaG90KQogICAgIG1fZGVidWdnZXJB
Z2VudC0+Y2FuY2VsUGF1c2VGb3JTcGVjaWFsQnJlYWtwb2ludCgqYnJlYWtwb2ludCk7CiB9CiAK
LXZvaWQgSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudDo6c2V0VVJMQnJlYWtwb2ludChFcnJvclN0
cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBib29sKiBvcHRpb25h
bElzUmVnZXgsIGNvbnN0IEpTT046Ok9iamVjdCogb3B0aW9uc1BheWxvYWQpCitQcm90b2NvbDo6
RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50OjpzZXRVUkxCcmVh
a3BvaW50KGNvbnN0IFN0cmluZyYgdXJsLCBPcHRpb25hbDxib29sPiYmIGlzUmVnZXgsIFJlZlB0
cjxKU09OOjpPYmplY3Q+JiYgb3B0aW9ucykKIHsKLSAgICBhdXRvIGJyZWFrcG9pbnQgPSBJbnNw
ZWN0b3JEZWJ1Z2dlckFnZW50OjpkZWJ1Z2dlckJyZWFrcG9pbnRGcm9tUGF5bG9hZChlcnJvclN0
cmluZywgb3B0aW9uc1BheWxvYWQpOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0
cmluZzsKKworICAgIGF1dG8gYnJlYWtwb2ludCA9IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRl
YnVnZ2VyQnJlYWtwb2ludEZyb21QYXlsb2FkKGVycm9yU3RyaW5nLCBXVEZNb3ZlKG9wdGlvbnMp
KTsKICAgICBpZiAoIWJyZWFrcG9pbnQpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJu
IG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgIGlmICh1cmwuaXNFbXB0eSgpKSB7
Ci0gICAgICAgIGlmICghbV9wYXVzZU9uQWxsVVJMc0JyZWFrcG9pbnQpCi0gICAgICAgICAgICBt
X3BhdXNlT25BbGxVUkxzQnJlYWtwb2ludCA9IFdURk1vdmUoYnJlYWtwb2ludCk7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIGVycm9yU3RyaW5nID0gIkJyZWFrcG9pbnQgZm9yIGFsbCBVUkxz
IGFscmVhZHkgZXhpc3RzIl9zOwotICAgICAgICByZXR1cm47CisgICAgICAgIGlmIChtX3BhdXNl
T25BbGxVUkxzQnJlYWtwb2ludCkKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgi
QnJlYWtwb2ludCBmb3IgYWxsIFVSTHMgYWxyZWFkeSBleGlzdHMiX3MpOworICAgICAgICBtX3Bh
dXNlT25BbGxVUkxzQnJlYWtwb2ludCA9IFdURk1vdmUoYnJlYWtwb2ludCk7CisgICAgICAgIHJl
dHVybiB7IH07CiAgICAgfQogCi0gICAgaWYgKG9wdGlvbmFsSXNSZWdleCAmJiAqb3B0aW9uYWxJ
c1JlZ2V4KSB7CisgICAgaWYgKGlzUmVnZXggJiYgKmlzUmVnZXgpIHsKICAgICAgICAgaWYgKCFt
X3VybFJlZ2V4QnJlYWtwb2ludHMuYWRkKHVybCwgYnJlYWtwb2ludC5yZWxlYXNlTm9uTnVsbCgp
KSkKLSAgICAgICAgICAgIGVycm9yU3RyaW5nID0gIkJyZWFrcG9pbnQgZm9yIGdpdmVuIHJlZ2V4
IGFscmVhZHkgZXhpc3RzIl9zOworICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJC
cmVha3BvaW50IGZvciBnaXZlbiByZWdleCBhbHJlYWR5IGV4aXN0cyJfcyk7CiAgICAgfSBlbHNl
IHsKICAgICAgICAgaWYgKCFtX3VybFRleHRCcmVha3BvaW50cy5hZGQodXJsLCBicmVha3BvaW50
LnJlbGVhc2VOb25OdWxsKCkpKQotICAgICAgICAgICAgZXJyb3JTdHJpbmcgPSAiQnJlYWtwb2lu
dCBmb3IgZ2l2ZW4gVVJMIGFscmVhZHkgZXhpc3RzIl9zOworICAgICAgICAgICAgcmV0dXJuIG1h
a2VVbmV4cGVjdGVkKCJCcmVha3BvaW50IGZvciBnaXZlbiBVUkwgYWxyZWFkeSBleGlzdHMiX3Mp
OwogICAgIH0KKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NRGVidWdn
ZXJBZ2VudDo6cmVtb3ZlVVJMQnJlYWtwb2ludChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNv
bnN0IFN0cmluZyYgdXJsLCBjb25zdCBib29sKiBvcHRpb25hbElzUmVnZXgpCitQcm90b2NvbDo6
RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50OjpyZW1vdmVVUkxC
cmVha3BvaW50KGNvbnN0IFN0cmluZyYgdXJsLCBPcHRpb25hbDxib29sPiYmIGlzUmVnZXgpCiB7
CiAgICAgaWYgKHVybC5pc0VtcHR5KCkpIHsKICAgICAgICAgaWYgKCFtX3BhdXNlT25BbGxVUkxz
QnJlYWtwb2ludCkKLSAgICAgICAgICAgIGVycm9yU3RyaW5nID0gIkJyZWFrcG9pbnQgZm9yIGFs
bCBVUkxzIG1pc3NpbmciX3M7CisgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkJy
ZWFrcG9pbnQgZm9yIGFsbCBVUkxzIG1pc3NpbmciX3MpOwogICAgICAgICBtX3BhdXNlT25BbGxV
UkxzQnJlYWtwb2ludCA9IG51bGxwdHI7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJu
IHsgfTsKICAgICB9CiAKLSAgICBpZiAob3B0aW9uYWxJc1JlZ2V4ICYmICpvcHRpb25hbElzUmVn
ZXgpIHsKKyAgICBpZiAoaXNSZWdleCAmJiAqaXNSZWdleCkgewogICAgICAgICBpZiAoIW1fdXJs
UmVnZXhCcmVha3BvaW50cy5yZW1vdmUodXJsKSkKLSAgICAgICAgICAgIGVycm9yU3RyaW5nID0g
Ik1pc3NpbmcgYnJlYWtwb2ludCBmb3IgZ2l2ZW4gcmVnZXgiX3M7CisgICAgICAgICAgICByZXR1
cm4gbWFrZVVuZXhwZWN0ZWQoIk1pc3NpbmcgYnJlYWtwb2ludCBmb3IgZ2l2ZW4gcmVnZXgiX3Mp
OwogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmICghbV91cmxUZXh0QnJlYWtwb2ludHMucmVtb3Zl
KHVybCkpCi0gICAgICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIGJyZWFrcG9pbnQgZm9y
IGdpdmVuIFVSTCJfczsKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTWlzc2lu
ZyBicmVha3BvaW50IGZvciBnaXZlbiBVUkwiX3MpOwogICAgIH0KKworICAgIHJldHVybiB7IH07
CiB9CiAKIHZvaWQgSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudDo6YnJlYWtPblVSTElmTmVlZGVk
KGNvbnN0IFN0cmluZyYgdXJsLCBVUkxCcmVha3BvaW50U291cmNlIHNvdXJjZSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NRGVidWdnZXJB
Z2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01EZWJ1
Z2dlckFnZW50LmgKaW5kZXggNGVjMGYwOGM5YjVhMWMyN2RkNDNlYTg1NDA0ZWNlNjJjOTM2ZjFm
YS4uODk2MDllY2ZjMGQ4Nzk2NzQxZDQ1NWEwM2U3ZGFjMDkxZThkY2M4ZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01EZWJ1
Z2dlckFnZW50LmgKQEAgLTUwLDggKzUwLDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3Mg
RXZlbnQ7CiBjbGFzcyBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lcjsKIAotdHlwZWRlZiBTdHJpbmcg
RXJyb3JTdHJpbmc7Ci0KIGNsYXNzIEluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQgOiBwdWJsaWMg
SW5zcGVjdG9yQWdlbnRCYXNlLCBwdWJsaWMgSW5zcGVjdG9yOjpET01EZWJ1Z2dlckJhY2tlbmRE
aXNwYXRjaGVySGFuZGxlciwgcHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yRGVidWdnZXJBZ2Vu
dDo6TGlzdGVuZXIgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEluc3BlY3RvckRPTURlYnVn
Z2VyQWdlbnQpOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwpAQCAtNjUsMTAgKzYzLDEw
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgZW5hYmxlZCgpIGNvbnN0OwogCiAgICAgLy8g
RE9NRGVidWdnZXJCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIKLSAgICB2b2lkIHNldFVSTEJyZWFr
cG9pbnQoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgYm9vbCogaXNSZWdl
eCwgY29uc3QgSlNPTjo6T2JqZWN0KiBvcHRpb25zKSBmaW5hbDsKLSAgICB2b2lkIHJlbW92ZVVS
TEJyZWFrcG9pbnQoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgYm9vbCog
aXNSZWdleCkgZmluYWw7Ci0gICAgdm9pZCBzZXRFdmVudEJyZWFrcG9pbnQoRXJyb3JTdHJpbmcm
LCBjb25zdCBTdHJpbmcmIGJyZWFrcG9pbnRUeXBlLCBjb25zdCBTdHJpbmcqIGV2ZW50TmFtZSwg
Y29uc3QgSlNPTjo6T2JqZWN0KiBvcHRpb25zKSBmaW5hbDsKLSAgICB2b2lkIHJlbW92ZUV2ZW50
QnJlYWtwb2ludChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgYnJlYWtwb2ludFR5cGUsIGNv
bnN0IFN0cmluZyogZXZlbnROYW1lKSBmaW5hbDsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpF
cnJvclN0cmluZ09yPHZvaWQ+IHNldFVSTEJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiB1cmwsIE9w
dGlvbmFsPGJvb2w+JiYgaXNSZWdleCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBvcHRpb25zKSBm
aW5hbDsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHJlbW92
ZVVSTEJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiB1cmwsIE9wdGlvbmFsPGJvb2w+JiYgaXNSZWdl
eCkgZmluYWw7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBz
ZXRFdmVudEJyZWFrcG9pbnQoSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NRGVidWdnZXI6OkV2ZW50
QnJlYWtwb2ludFR5cGUsIGNvbnN0IFN0cmluZyYgZXZlbnROYW1lLCBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiYmIG9wdGlvbnMpIGZpbmFsOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3Ry
aW5nT3I8dm9pZD4gcmVtb3ZlRXZlbnRCcmVha3BvaW50KEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRP
TURlYnVnZ2VyOjpFdmVudEJyZWFrcG9pbnRUeXBlLCBjb25zdCBTdHJpbmcmIGV2ZW50TmFtZSkg
ZmluYWw7CiAKICAgICAvLyBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpMaXN0ZW5lcgogICAgIHZv
aWQgZGVidWdnZXJXYXNFbmFibGVkKCkgb3ZlcnJpZGU7CkBAIC04OCw3ICs4Niw3IEBAIHByb3Rl
Y3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgZW5hYmxlKCk7CiAgICAgdmlydHVhbCB2b2lkIGRpc2Fi
bGUoKTsKIAotICAgIHZpcnR1YWwgdm9pZCBzZXRBbmltYXRpb25GcmFtZUJyZWFrcG9pbnQoRXJy
b3JTdHJpbmcmLCBSZWZQdHI8SlNDOjpCcmVha3BvaW50PiYmKSA9IDA7CisgICAgdmlydHVhbCBi
b29sIHNldEFuaW1hdGlvbkZyYW1lQnJlYWtwb2ludChJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJv
clN0cmluZyYsIFJlZlB0cjxKU0M6OkJyZWFrcG9pbnQ+JiYpID0gMDsKIAogICAgIEluc3BlY3Rv
cjo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudCogbV9kZWJ1Z2dlckFnZW50IHsgbnVsbHB0ciB9Owog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRP
TVN0b3JhZ2VBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3Bl
Y3RvckRPTVN0b3JhZ2VBZ2VudC5jcHAKaW5kZXggZTU5MWU5MTY5ZGYzMDQ1NDU2MjBiNTQwMzJi
NjJmYTJiYWRlY2I2ZS4uMDNhN2ZkMDhkMjA1N2MyMmNhY2RjZjg1MDU4ZjFlNGRmMDRkZDdmMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01T
dG9yYWdlQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5z
cGVjdG9yRE9NU3RvcmFnZUFnZW50LmNwcApAQCAtNzAsNDEgKzcwLDM5IEBAIHZvaWQgSW5zcGVj
dG9yRE9NU3RvcmFnZUFnZW50OjpkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9y
OjpGcm9udGVuZFJvCiAKIHZvaWQgSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50Ojp3aWxsRGVzdHJv
eUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24pCiB7Ci0gICAg
RXJyb3JTdHJpbmcgaWdub3JlZDsKLSAgICBkaXNhYmxlKGlnbm9yZWQpOworICAgIGRpc2FibGUo
KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OmVuYWJsZShFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JE
T01TdG9yYWdlQWdlbnQ6OmVuYWJsZSgpCiB7Ci0gICAgaWYgKG1faW5zdHJ1bWVudGluZ0FnZW50
cy5lbmFibGVkRE9NU3RvcmFnZUFnZW50KCkgPT0gdGhpcykgewotICAgICAgICBlcnJvclN0cmlu
ZyA9ICJET01TdG9yYWdlIGRvbWFpbiBhbHJlYWR5IGVuYWJsZWQiX3M7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9CisgICAgaWYgKG1faW5zdHJ1bWVudGluZ0FnZW50cy5lbmFibGVkRE9NU3RvcmFn
ZUFnZW50KCkgPT0gdGhpcykKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJET01TdG9y
YWdlIGRvbWFpbiBhbHJlYWR5IGVuYWJsZWQiX3MpOwogCiAgICAgbV9pbnN0cnVtZW50aW5nQWdl
bnRzLnNldEVuYWJsZWRET01TdG9yYWdlQWdlbnQodGhpcyk7CisKKyAgICByZXR1cm4geyB9Owog
fQogCi12b2lkIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6ZGlzYWJsZShFcnJvclN0cmluZyYg
ZXJyb3JTdHJpbmcpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JET01T
dG9yYWdlQWdlbnQ6OmRpc2FibGUoKQogewotICAgIGlmIChtX2luc3RydW1lbnRpbmdBZ2VudHMu
ZW5hYmxlZERPTVN0b3JhZ2VBZ2VudCgpICE9IHRoaXMpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcg
PSAiRE9NU3RvcmFnZSBkb21haW4gYWxyZWFkeSBkaXNhYmxlZCJfczsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KKyAgICBpZiAobV9pbnN0cnVtZW50aW5nQWdlbnRzLmVuYWJsZWRET01TdG9yYWdl
QWdlbnQoKSAhPSB0aGlzKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkRPTVN0b3Jh
Z2UgZG9tYWluIGFscmVhZHkgZGlzYWJsZWQiX3MpOwogCiAgICAgbV9pbnN0cnVtZW50aW5nQWdl
bnRzLnNldEVuYWJsZWRET01TdG9yYWdlQWdlbnQobnVsbHB0cik7CisKKyAgICByZXR1cm4geyB9
OwogfQogCi12b2lkIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6Z2V0RE9NU3RvcmFnZUl0ZW1z
KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgSlNPTjo6T2JqZWN0JiBzdG9yYWdlSWQs
IFJlZlB0cjxKU09OOjpBcnJheU9mPEpTT046OkFycmF5T2Y8U3RyaW5nPj4+JiBpdGVtcykKK1By
b3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpET01TdG9y
YWdlOjpJdGVtPj4+IEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6Z2V0RE9NU3RvcmFnZUl0ZW1z
KFJlZjxKU09OOjpPYmplY3Q+JiYgc3RvcmFnZUlkKQogeworICAgIFByb3RvY29sOjpFcnJvclN0
cmluZyBlcnJvclN0cmluZzsKKwogICAgIEZyYW1lKiBmcmFtZTsKLSAgICBSZWZQdHI8U3RvcmFn
ZUFyZWE+IHN0b3JhZ2VBcmVhID0gZmluZFN0b3JhZ2VBcmVhKGVycm9yU3RyaW5nLCBzdG9yYWdl
SWQsIGZyYW1lKTsKLSAgICBpZiAoIXN0b3JhZ2VBcmVhKSB7Ci0gICAgICAgIGVycm9yU3RyaW5n
ID0gIk1pc3Npbmcgc3RvcmFnZSBmb3IgZ2l2ZW4gc3RvcmFnZUlkIl9zOwotICAgICAgICByZXR1
cm47Ci0gICAgfQorICAgIFJlZlB0cjxTdG9yYWdlQXJlYT4gc3RvcmFnZUFyZWEgPSBmaW5kU3Rv
cmFnZUFyZWEoZXJyb3JTdHJpbmcsIFdURk1vdmUoc3RvcmFnZUlkKSwgZnJhbWUpOworICAgIGlm
ICghc3RvcmFnZUFyZWEpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmlu
Zyk7CiAKICAgICBhdXRvIHN0b3JhZ2VJdGVtcyA9IEpTT046OkFycmF5T2Y8SlNPTjo6QXJyYXlP
ZjxTdHJpbmc+Pjo6Y3JlYXRlKCk7Ci0KICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3Rv
cmFnZUFyZWEtPmxlbmd0aCgpOyArK2kpIHsKICAgICAgICAgU3RyaW5nIGtleSA9IHN0b3JhZ2VB
cmVhLT5rZXkoaSk7CiAgICAgICAgIFN0cmluZyB2YWx1ZSA9IHN0b3JhZ2VBcmVhLT5pdGVtKGtl
eSk7CkBAIC0xMTQsNDcgKzExMiw1MiBAQCB2b2lkIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6
Z2V0RE9NU3RvcmFnZUl0ZW1zKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29ucwogICAgICAg
ICBlbnRyeS0+YWRkSXRlbSh2YWx1ZSk7CiAgICAgICAgIHN0b3JhZ2VJdGVtcy0+YWRkSXRlbShX
VEZNb3ZlKGVudHJ5KSk7CiAgICAgfQotCi0gICAgaXRlbXMgPSBXVEZNb3ZlKHN0b3JhZ2VJdGVt
cyk7CisgICAgcmV0dXJuIFdURk1vdmUoc3RvcmFnZUl0ZW1zKTsKIH0KIAotdm9pZCBJbnNwZWN0
b3JET01TdG9yYWdlQWdlbnQ6OnNldERPTVN0b3JhZ2VJdGVtKEVycm9yU3RyaW5nJiBlcnJvclN0
cmluZywgY29uc3QgSlNPTjo6T2JqZWN0JiBzdG9yYWdlSWQsIGNvbnN0IFN0cmluZyYga2V5LCBj
b25zdCBTdHJpbmcmIHZhbHVlKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVj
dG9yRE9NU3RvcmFnZUFnZW50OjpzZXRET01TdG9yYWdlSXRlbShSZWY8SlNPTjo6T2JqZWN0PiYm
IHN0b3JhZ2VJZCwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7Cisg
ICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAgICAgRnJhbWUqIGZyYW1l
OwotICAgIFJlZlB0cjxTdG9yYWdlQXJlYT4gc3RvcmFnZUFyZWEgPSBmaW5kU3RvcmFnZUFyZWEo
ZXJyb3JTdHJpbmcsIHN0b3JhZ2VJZCwgZnJhbWUpOwotICAgIGlmICghc3RvcmFnZUFyZWEpIHsK
LSAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWlzc2luZyBzdG9yYWdlIGZvciBnaXZlbiBzdG9yYWdl
SWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgUmVmUHRyPFN0b3JhZ2VBcmVhPiBz
dG9yYWdlQXJlYSA9IGZpbmRTdG9yYWdlQXJlYShlcnJvclN0cmluZywgV1RGTW92ZShzdG9yYWdl
SWQpLCBmcmFtZSk7CisgICAgaWYgKCFzdG9yYWdlQXJlYSkKKyAgICAgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgIGJvb2wgcXVvdGFFeGNlcHRpb24gPSBmYWxz
ZTsKICAgICBzdG9yYWdlQXJlYS0+c2V0SXRlbShmcmFtZSwga2V5LCB2YWx1ZSwgcXVvdGFFeGNl
cHRpb24pOwogICAgIGlmIChxdW90YUV4Y2VwdGlvbikKLSAgICAgICAgZXJyb3JTdHJpbmcgPSBE
T01FeGNlcHRpb246Om5hbWUoUXVvdGFFeGNlZWRlZEVycm9yKTsKKyAgICAgICAgcmV0dXJuIG1h
a2VVbmV4cGVjdGVkKERPTUV4Y2VwdGlvbjo6bmFtZShRdW90YUV4Y2VlZGVkRXJyb3IpKTsKKwor
ICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjpyZW1v
dmVET01TdG9yYWdlSXRlbShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IEpTT046Ok9i
amVjdCYgc3RvcmFnZUlkLCBjb25zdCBTdHJpbmcmIGtleSkKK1Byb3RvY29sOjpFcnJvclN0cmlu
Z09yPHZvaWQ+IEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6cmVtb3ZlRE9NU3RvcmFnZUl0ZW0o
UmVmPEpTT046Ok9iamVjdD4mJiBzdG9yYWdlSWQsIGNvbnN0IFN0cmluZyYga2V5KQogeworICAg
IFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIEZyYW1lKiBmcmFtZTsK
LSAgICBSZWZQdHI8U3RvcmFnZUFyZWE+IHN0b3JhZ2VBcmVhID0gZmluZFN0b3JhZ2VBcmVhKGVy
cm9yU3RyaW5nLCBzdG9yYWdlSWQsIGZyYW1lKTsKLSAgICBpZiAoIXN0b3JhZ2VBcmVhKSB7Ci0g
ICAgICAgIGVycm9yU3RyaW5nID0gIk1pc3Npbmcgc3RvcmFnZSBmb3IgZ2l2ZW4gc3RvcmFnZUlk
Il9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIFJlZlB0cjxTdG9yYWdlQXJlYT4gc3Rv
cmFnZUFyZWEgPSBmaW5kU3RvcmFnZUFyZWEoZXJyb3JTdHJpbmcsIFdURk1vdmUoc3RvcmFnZUlk
KSwgZnJhbWUpOworICAgIGlmICghc3RvcmFnZUFyZWEpCisgICAgICAgIHJldHVybiBtYWtlVW5l
eHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAgICBzdG9yYWdlQXJlYS0+cmVtb3ZlSXRlbShmcmFt
ZSwga2V5KTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NU3RvcmFn
ZUFnZW50OjpjbGVhckRPTVN0b3JhZ2VJdGVtcyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNv
bnN0IEpTT046Ok9iamVjdCYgc3RvcmFnZUlkKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9p
ZD4gSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjpjbGVhckRPTVN0b3JhZ2VJdGVtcyhSZWY8SlNP
Tjo6T2JqZWN0PiYmIHN0b3JhZ2VJZCkKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJy
b3JTdHJpbmc7CisKICAgICBGcmFtZSogZnJhbWU7Ci0gICAgYXV0byBzdG9yYWdlQXJlYSA9IGZp
bmRTdG9yYWdlQXJlYShlcnJvclN0cmluZywgc3RvcmFnZUlkLCBmcmFtZSk7Ci0gICAgaWYgKCFz
dG9yYWdlQXJlYSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIHN0b3JhZ2UgZm9y
IGdpdmVuIHN0b3JhZ2VJZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBhdXRvIHN0
b3JhZ2VBcmVhID0gZmluZFN0b3JhZ2VBcmVhKGVycm9yU3RyaW5nLCBXVEZNb3ZlKHN0b3JhZ2VJ
ZCksIGZyYW1lKTsKKyAgICBpZiAoIXN0b3JhZ2VBcmVhKQorICAgICAgICByZXR1cm4gbWFrZVVu
ZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCiAgICAgc3RvcmFnZUFyZWEtPmNsZWFyKGZyYW1lKTsK
KworICAgIHJldHVybiB7IH07CiB9CiAKIFN0cmluZyBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6
OnN0b3JhZ2VJZChTdG9yYWdlJiBzdG9yYWdlKQpAQCAtMTY4LDkgKzE3MSw5IEBAIFN0cmluZyBJ
bnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OnN0b3JhZ2VJZChTdG9yYWdlJiBzdG9yYWdlKQogICAg
IHJldHVybiBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OnN0b3JhZ2VJZChzZWN1cml0eU9yaWdp
bi5wdHIoKSwgaXNMb2NhbFN0b3JhZ2UpLT50b0pTT05TdHJpbmcoKTsKIH0KIAotUmVmUHRyPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkRPTVN0b3JhZ2U6OlN0b3JhZ2VJZD4gSW5zcGVjdG9yRE9NU3Rv
cmFnZUFnZW50OjpzdG9yYWdlSWQoU2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2luLCBib29s
IGlzTG9jYWxTdG9yYWdlKQorUmVmPFByb3RvY29sOjpET01TdG9yYWdlOjpTdG9yYWdlSWQ+IElu
c3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6c3RvcmFnZUlkKFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0
eU9yaWdpbiwgYm9vbCBpc0xvY2FsU3RvcmFnZSkKIHsKLSAgICByZXR1cm4gSW5zcGVjdG9yOjpQ
cm90b2NvbDo6RE9NU3RvcmFnZTo6U3RvcmFnZUlkOjpjcmVhdGUoKQorICAgIHJldHVybiBQcm90
b2NvbDo6RE9NU3RvcmFnZTo6U3RvcmFnZUlkOjpjcmVhdGUoKQogICAgICAgICAuc2V0U2VjdXJp
dHlPcmlnaW4oc2VjdXJpdHlPcmlnaW4tPnRvUmF3U3RyaW5nKCkpCiAgICAgICAgIC5zZXRJc0xv
Y2FsU3RvcmFnZShpc0xvY2FsU3RvcmFnZSkKICAgICAgICAgLnJlbGVhc2UoKTsKQEAgLTE3OCwy
OCArMTgxLDI4IEBAIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpET01TdG9yYWdlOjpTdG9y
YWdlSWQ+IEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6c3RvCiAKIHZvaWQgSW5zcGVjdG9yRE9N
U3RvcmFnZUFnZW50OjpkaWREaXNwYXRjaERPTVN0b3JhZ2VFdmVudChjb25zdCBTdHJpbmcmIGtl
eSwgY29uc3QgU3RyaW5nJiBvbGRWYWx1ZSwgY29uc3QgU3RyaW5nJiBuZXdWYWx1ZSwgU3RvcmFn
ZVR5cGUgc3RvcmFnZVR5cGUsIFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbikKIHsKLSAg
ICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NU3RvcmFnZTo6U3RvcmFnZUlkPiBpZCA9
IEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6c3RvcmFnZUlkKHNlY3VyaXR5T3JpZ2luLCBzdG9y
YWdlVHlwZSA9PSBTdG9yYWdlVHlwZTo6TG9jYWwpOworICAgIGF1dG8gaWQgPSBJbnNwZWN0b3JE
T01TdG9yYWdlQWdlbnQ6OnN0b3JhZ2VJZChzZWN1cml0eU9yaWdpbiwgc3RvcmFnZVR5cGUgPT0g
U3RvcmFnZVR5cGU6OkxvY2FsKTsKIAogICAgIGlmIChrZXkuaXNOdWxsKCkpCi0gICAgICAgIG1f
ZnJvbnRlbmREaXNwYXRjaGVyLT5kb21TdG9yYWdlSXRlbXNDbGVhcmVkKGlkKTsKKyAgICAgICAg
bV9mcm9udGVuZERpc3BhdGNoZXItPmRvbVN0b3JhZ2VJdGVtc0NsZWFyZWQoV1RGTW92ZShpZCkp
OwogICAgIGVsc2UgaWYgKG5ld1ZhbHVlLmlzTnVsbCgpKQotICAgICAgICBtX2Zyb250ZW5kRGlz
cGF0Y2hlci0+ZG9tU3RvcmFnZUl0ZW1SZW1vdmVkKGlkLCBrZXkpOworICAgICAgICBtX2Zyb250
ZW5kRGlzcGF0Y2hlci0+ZG9tU3RvcmFnZUl0ZW1SZW1vdmVkKFdURk1vdmUoaWQpLCBrZXkpOwog
ICAgIGVsc2UgaWYgKG9sZFZhbHVlLmlzTnVsbCgpKQotICAgICAgICBtX2Zyb250ZW5kRGlzcGF0
Y2hlci0+ZG9tU3RvcmFnZUl0ZW1BZGRlZChpZCwga2V5LCBuZXdWYWx1ZSk7CisgICAgICAgIG1f
ZnJvbnRlbmREaXNwYXRjaGVyLT5kb21TdG9yYWdlSXRlbUFkZGVkKFdURk1vdmUoaWQpLCBrZXks
IG5ld1ZhbHVlKTsKICAgICBlbHNlCi0gICAgICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5kb21T
dG9yYWdlSXRlbVVwZGF0ZWQoaWQsIGtleSwgb2xkVmFsdWUsIG5ld1ZhbHVlKTsKKyAgICAgICAg
bV9mcm9udGVuZERpc3BhdGNoZXItPmRvbVN0b3JhZ2VJdGVtVXBkYXRlZChXVEZNb3ZlKGlkKSwg
a2V5LCBvbGRWYWx1ZSwgbmV3VmFsdWUpOwogfQogCi1SZWZQdHI8U3RvcmFnZUFyZWE+IEluc3Bl
Y3RvckRPTVN0b3JhZ2VBZ2VudDo6ZmluZFN0b3JhZ2VBcmVhKEVycm9yU3RyaW5nJiBlcnJvclN0
cmluZywgY29uc3QgSlNPTjo6T2JqZWN0JiBzdG9yYWdlSWQsIEZyYW1lKiYgdGFyZ2V0RnJhbWUp
CitSZWZQdHI8U3RvcmFnZUFyZWE+IEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6ZmluZFN0b3Jh
Z2VBcmVhKFByb3RvY29sOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIFJlZjxKU09OOjpPYmpl
Y3Q+JiYgc3RvcmFnZUlkLCBGcmFtZSomIHRhcmdldEZyYW1lKQogewotICAgIFN0cmluZyBzZWN1
cml0eU9yaWdpbjsKLSAgICBpZiAoIXN0b3JhZ2VJZC5nZXRTdHJpbmcoInNlY3VyaXR5T3JpZ2lu
Il9zLCBzZWN1cml0eU9yaWdpbikpIHsKKyAgICBhdXRvIHNlY3VyaXR5T3JpZ2luID0gc3RvcmFn
ZUlkLT5nZXRTdHJpbmcoUHJvdG9jb2w6OkRPTVN0b3JhZ2U6OlN0b3JhZ2VJZDo6c2VjdXJpdHlP
cmlnaW5LZXkpOworICAgIGlmICghc2VjdXJpdHlPcmlnaW4pIHsKICAgICAgICAgZXJyb3JTdHJp
bmcgPSAiTWlzc2luZyBzZWN1cml0eU9yaWdpbiBpbiBnaXZlbiBzdG9yYWdlSWQiOwogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKLSAgICBib29sIGlzTG9jYWxTdG9yYWdlID0gZmFs
c2U7Ci0gICAgaWYgKCFzdG9yYWdlSWQuZ2V0Qm9vbGVhbigiaXNMb2NhbFN0b3JhZ2UiX3MsIGlz
TG9jYWxTdG9yYWdlKSkgeworICAgIGF1dG8gaXNMb2NhbFN0b3JhZ2UgPSBzdG9yYWdlSWQtPmdl
dEJvb2xlYW4oUHJvdG9jb2w6OkRPTVN0b3JhZ2U6OlN0b3JhZ2VJZDo6aXNMb2NhbFN0b3JhZ2VL
ZXkpOworICAgIGlmICghaXNMb2NhbFN0b3JhZ2UpIHsKICAgICAgICAgZXJyb3JTdHJpbmcgPSAi
TWlzc2luZyBpc0xvY2FsU3RvcmFnZSBpbiBnaXZlbiBzdG9yYWdlSWQiOwogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKICAgICB9CkBAIC0yMTAsNyArMjEzLDcgQEAgUmVmUHRyPFN0b3JhZ2VBcmVh
PiBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OmZpbmRTdG9yYWdlQXJlYShFcnJvclN0cmluZyYg
ZXJyb3IKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCi0gICAgaWYgKCFpc0xvY2Fs
U3RvcmFnZSkKKyAgICBpZiAoISppc0xvY2FsU3RvcmFnZSkKICAgICAgICAgcmV0dXJuIG1faW5z
cGVjdGVkUGFnZS5zZXNzaW9uU3RvcmFnZSgpLT5zdG9yYWdlQXJlYSh0YXJnZXRGcmFtZS0+ZG9j
dW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKS5kYXRhKCkpOwogICAgIHJldHVybiBtX2luc3BlY3Rl
ZFBhZ2Uuc3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyKCkubG9jYWxTdG9yYWdlQXJlYSgqdGFyZ2V0
RnJhbWUtPmRvY3VtZW50KCkpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2FnZW50cy9JbnNwZWN0b3JET01TdG9yYWdlQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50LmgKaW5kZXggZGRiYjVkNTM0
N2YzYmVhYmUzY2ZhYjIwMWQ2ODM4Yzg5NmQyMWUzOS4uMzM4NmNiODc5ZjExNzhjMWI5NjM1Nzc1
YzlhMGU4NjRmNWI5NGM1MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Fn
ZW50cy9JbnNwZWN0b3JET01TdG9yYWdlQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTVN0b3JhZ2VBZ2VudC5oCkBAIC00NSwzNiArNDUsMzQg
QEAgY2xhc3MgUGFnZTsKIGNsYXNzIFNlY3VyaXR5T3JpZ2luOwogY2xhc3MgU3RvcmFnZTsKIAot
dHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7Ci0KIGNsYXNzIEluc3BlY3RvckRPTVN0b3JhZ2VB
Z2VudCBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3JBZ2VudEJhc2UsIHB1YmxpYyBJbnNwZWN0b3I6
OkRPTVN0b3JhZ2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewogICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudCk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CiBwdWJsaWM6CiAgICAgSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50KFBhZ2VBZ2VudENv
bnRleHQmKTsKLSAgICB+SW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50KCkgb3ZlcnJpZGU7CisgICAg
fkluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudCgpOwogCiAgICAgLy8gSW5zcGVjdG9yQWdlbnRCYXNl
Ci0gICAgdm9pZCBkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9udGVu
ZFJvdXRlciosIEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXIqKSBvdmVycmlkZTsKLSAgICB2
b2lkIHdpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlzY29ubmVjdFJl
YXNvbikgb3ZlcnJpZGU7CisgICAgdm9pZCBkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5z
cGVjdG9yOjpGcm9udGVuZFJvdXRlciosIEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXIqKTsK
KyAgICB2b2lkIHdpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlzY29u
bmVjdFJlYXNvbik7CiAKICAgICAvLyBET01TdG9yYWdlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVy
Ci0gICAgdm9pZCBlbmFibGUoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2b2lkIGRpc2Fi
bGUoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2b2lkIGdldERPTVN0b3JhZ2VJdGVtcyhF
cnJvclN0cmluZyYsIGNvbnN0IEpTT046Ok9iamVjdCYgc3RvcmFnZUlkLCBSZWZQdHI8SlNPTjo6
QXJyYXlPZjxKU09OOjpBcnJheU9mPFN0cmluZz4+PiYgaXRlbXMpIG92ZXJyaWRlOwotICAgIHZv
aWQgc2V0RE9NU3RvcmFnZUl0ZW0oRXJyb3JTdHJpbmcmLCBjb25zdCBKU09OOjpPYmplY3QmIHN0
b3JhZ2VJZCwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUpIG92ZXJyaWRl
OwotICAgIHZvaWQgcmVtb3ZlRE9NU3RvcmFnZUl0ZW0oRXJyb3JTdHJpbmcmLCBjb25zdCBKU09O
OjpPYmplY3QmIHN0b3JhZ2VJZCwgY29uc3QgU3RyaW5nJiBrZXkpIG92ZXJyaWRlOwotICAgIHZv
aWQgY2xlYXJET01TdG9yYWdlSXRlbXMoRXJyb3JTdHJpbmcmLCBjb25zdCBKU09OOjpPYmplY3Qm
IHN0b3JhZ2VJZCkgb3ZlcnJpZGU7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJp
bmdPcjx2b2lkPiBlbmFibGUoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmlu
Z09yPHZvaWQ+IGRpc2FibGUoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmlu
Z09yPFJlZjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTVN0b3JhZ2U6Okl0
ZW0+Pj4gZ2V0RE9NU3RvcmFnZUl0ZW1zKFJlZjxKU09OOjpPYmplY3Q+JiYgc3RvcmFnZUlkKTsK
KyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHNldERPTVN0b3Jh
Z2VJdGVtKFJlZjxKU09OOjpPYmplY3Q+JiYgc3RvcmFnZUlkLCBjb25zdCBTdHJpbmcmIGtleSwg
Y29uc3QgU3RyaW5nJiB2YWx1ZSk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJp
bmdPcjx2b2lkPiByZW1vdmVET01TdG9yYWdlSXRlbShSZWY8SlNPTjo6T2JqZWN0PiYmIHN0b3Jh
Z2VJZCwgY29uc3QgU3RyaW5nJiBrZXkpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8dm9pZD4gY2xlYXJET01TdG9yYWdlSXRlbXMoUmVmPEpTT046Ok9iamVjdD4mJiBz
dG9yYWdlSWQpOwogCiAgICAgLy8gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uCiAgICAgdm9pZCBk
aWREaXNwYXRjaERPTVN0b3JhZ2VFdmVudChjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5n
JiBvbGRWYWx1ZSwgY29uc3QgU3RyaW5nJiBuZXdWYWx1ZSwgU3RvcmFnZVR5cGUsIFNlY3VyaXR5
T3JpZ2luKik7CiAKICAgICAvLyBDb21tYW5kTGluZUFQSQogICAgIHN0YXRpYyBTdHJpbmcgc3Rv
cmFnZUlkKFN0b3JhZ2UmKTsKLSAgICBzdGF0aWMgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRPTVN0b3JhZ2U6OlN0b3JhZ2VJZD4gc3RvcmFnZUlkKFNlY3VyaXR5T3JpZ2luKiwgYm9vbCBp
c0xvY2FsU3RvcmFnZSk7CisgICAgc3RhdGljIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET01T
dG9yYWdlOjpTdG9yYWdlSWQ+IHN0b3JhZ2VJZChTZWN1cml0eU9yaWdpbiosIGJvb2wgaXNMb2Nh
bFN0b3JhZ2UpOwogCiBwcml2YXRlOgotICAgIFJlZlB0cjxTdG9yYWdlQXJlYT4gZmluZFN0b3Jh
Z2VBcmVhKEVycm9yU3RyaW5nJiwgY29uc3QgSlNPTjo6T2JqZWN0JiwgRnJhbWUqJik7CisgICAg
UmVmUHRyPFN0b3JhZ2VBcmVhPiBmaW5kU3RvcmFnZUFyZWEoSW5zcGVjdG9yOjpQcm90b2NvbDo6
RXJyb3JTdHJpbmcmLCBSZWY8SlNPTjo6T2JqZWN0PiYmIHN0b3JhZ2VJZCwgRnJhbWUqJik7CiAK
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW5zcGVjdG9yOjpET01TdG9yYWdlRnJvbnRlbmREaXNwYXRj
aGVyPiBtX2Zyb250ZW5kRGlzcGF0Y2hlcjsKICAgICBSZWZQdHI8SW5zcGVjdG9yOjpET01TdG9y
YWdlQmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRhdGFiYXNlQWdlbnQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JEYXRhYmFzZUFnZW50
LmNwcAppbmRleCA0YjlhNTVkZTU1N2JlOTQ2NzE2ZjVlMDIxMTE0NDM3MTE4MmQ2ZDUyLi4yOWMx
MTRmMjY3NjgzZDI1MDY1MjdhZDdjZjlkNTdmYmIxZTkyZjNjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRhdGFiYXNlQWdlbnQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5j
cHAKQEAgLTU5LDcgKzU5LDcgQEAgbmFtZXNwYWNlIHsKIAogdm9pZCByZXBvcnRUcmFuc2FjdGlv
bkZhaWxlZChFeGVjdXRlU1FMQ2FsbGJhY2smIHJlcXVlc3RDYWxsYmFjaywgU1FMRXJyb3ImIGVy
cm9yKQogewotICAgIGF1dG8gZXJyb3JPYmplY3QgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRh
YmFzZTo6RXJyb3I6OmNyZWF0ZSgpCisgICAgYXV0byBlcnJvck9iamVjdCA9IFByb3RvY29sOjpE
YXRhYmFzZTo6RXJyb3I6OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRNZXNzYWdlKGVycm9yLm1lc3Nh
Z2VJc29sYXRlZENvcHkoKSkKICAgICAgICAgLnNldENvZGUoZXJyb3IuY29kZSgpKQogICAgICAg
ICAucmVsZWFzZSgpOwpAQCAtMjMwLDUxICsyMzAsNDggQEAgdm9pZCBJbnNwZWN0b3JEYXRhYmFz
ZUFnZW50OjpkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9udGVuZFJv
dXQKIAogdm9pZCBJbnNwZWN0b3JEYXRhYmFzZUFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5k
QmFja2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24pCiB7Ci0gICAgRXJyb3JTdHJpbmcg
aWdub3JlZDsKLSAgICBkaXNhYmxlKGlnbm9yZWQpOworICAgIGRpc2FibGUoKTsKIH0KIAotdm9p
ZCBJbnNwZWN0b3JEYXRhYmFzZUFnZW50OjplbmFibGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5n
KQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yRGF0YWJhc2VBZ2VudDo6
ZW5hYmxlKCkKIHsKLSAgICBpZiAobV9pbnN0cnVtZW50aW5nQWdlbnRzLmVuYWJsZWREYXRhYmFz
ZUFnZW50KCkgPT0gdGhpcykgewotICAgICAgICBlcnJvclN0cmluZyA9ICJEYXRhYmFzZSBkb21h
aW4gYWxyZWFkeSBlbmFibGVkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICht
X2luc3RydW1lbnRpbmdBZ2VudHMuZW5hYmxlZERhdGFiYXNlQWdlbnQoKSA9PSB0aGlzKQorICAg
ICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkRhdGFiYXNlIGRvbWFpbiBhbHJlYWR5IGVuYWJs
ZWQiX3MpOwogCiAgICAgbV9pbnN0cnVtZW50aW5nQWdlbnRzLnNldEVuYWJsZWREYXRhYmFzZUFn
ZW50KHRoaXMpOwogCiAgICAgZm9yIChhdXRvJiBkYXRhYmFzZSA6IERhdGFiYXNlVHJhY2tlcjo6
c2luZ2xldG9uKCkub3BlbkRhdGFiYXNlcygpKQogICAgICAgICBkaWRPcGVuRGF0YWJhc2UoZGF0
YWJhc2UuZ2V0KCkpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JEYXRh
YmFzZUFnZW50OjpkaXNhYmxlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZykKK1Byb3RvY29sOjpF
cnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRhdGFiYXNlQWdlbnQ6OmRpc2FibGUoKQogewot
ICAgIGlmIChtX2luc3RydW1lbnRpbmdBZ2VudHMuZW5hYmxlZERhdGFiYXNlQWdlbnQoKSAhPSB0
aGlzKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIkRhdGFiYXNlIGRvbWFpbiBhbHJlYWR5IGRp
c2FibGVkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmIChtX2luc3RydW1lbnRp
bmdBZ2VudHMuZW5hYmxlZERhdGFiYXNlQWdlbnQoKSAhPSB0aGlzKQorICAgICAgICByZXR1cm4g
bWFrZVVuZXhwZWN0ZWQoIkRhdGFiYXNlIGRvbWFpbiBhbHJlYWR5IGRpc2FibGVkIl9zKTsKIAog
ICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy5zZXRFbmFibGVkRGF0YWJhc2VBZ2VudChudWxscHRy
KTsKIAogICAgIG1fcmVzb3VyY2VzLmNsZWFyKCk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12
b2lkIEluc3BlY3RvckRhdGFiYXNlQWdlbnQ6OmdldERhdGFiYXNlVGFibGVOYW1lcyhFcnJvclN0
cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VJZCwgUmVmUHRyPEpTT046
OkFycmF5T2Y8U3RyaW5nPj4mIG5hbWVzKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEpT
T046OkFycmF5T2Y8U3RyaW5nPj4+IEluc3BlY3RvckRhdGFiYXNlQWdlbnQ6OmdldERhdGFiYXNl
VGFibGVOYW1lcyhjb25zdCBQcm90b2NvbDo6RGF0YWJhc2U6OkRhdGFiYXNlSWQmIGRhdGFiYXNl
SWQpCiB7Ci0gICAgaWYgKG1faW5zdHJ1bWVudGluZ0FnZW50cy5lbmFibGVkRGF0YWJhc2VBZ2Vu
dCgpICE9IHRoaXMpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiRGF0YWJhc2UgZG9tYWluIG11
c3QgYmUgZW5hYmxlZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG5hbWVzID0g
SlNPTjo6QXJyYXlPZjxTdHJpbmc+OjpjcmVhdGUoKTsKKyAgICBpZiAobV9pbnN0cnVtZW50aW5n
QWdlbnRzLmVuYWJsZWREYXRhYmFzZUFnZW50KCkgIT0gdGhpcykKKyAgICAgICAgcmV0dXJuIG1h
a2VVbmV4cGVjdGVkKCJEYXRhYmFzZSBkb21haW4gbXVzdCBiZSBlbmFibGVkIl9zKTsKIAorICAg
IGF1dG8gbmFtZXMgPSBKU09OOjpBcnJheU9mPFN0cmluZz46OmNyZWF0ZSgpOwogICAgIGlmIChh
dXRvKiBkYXRhYmFzZSA9IGRhdGFiYXNlRm9ySWQoZGF0YWJhc2VJZCkpIHsKICAgICAgICAgZm9y
IChhdXRvJiB0YWJsZU5hbWUgOiBkYXRhYmFzZS0+dGFibGVOYW1lcygpKQogICAgICAgICAgICAg
bmFtZXMtPmFkZEl0ZW0odGFibGVOYW1lKTsKICAgICB9CisgICAgcmV0dXJuIFdURk1vdmUobmFt
ZXMpOwogfQogCi12b2lkIEluc3BlY3RvckRhdGFiYXNlQWdlbnQ6OmV4ZWN1dGVTUUwoY29uc3Qg
U3RyaW5nJiBkYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIHF1ZXJ5LCBSZWY8RXhlY3V0ZVNRTENh
bGxiYWNrPiYmIHJlcXVlc3RDYWxsYmFjaykKK3ZvaWQgSW5zcGVjdG9yRGF0YWJhc2VBZ2VudDo6
ZXhlY3V0ZVNRTChjb25zdCBQcm90b2NvbDo6RGF0YWJhc2U6OkRhdGFiYXNlSWQmIGRhdGFiYXNl
SWQsIGNvbnN0IFN0cmluZyYgcXVlcnksIFJlZjxFeGVjdXRlU1FMQ2FsbGJhY2s+JiYgcmVxdWVz
dENhbGxiYWNrKQogewogICAgIGlmIChtX2luc3RydW1lbnRpbmdBZ2VudHMuZW5hYmxlZERhdGFi
YXNlQWdlbnQoKSAhPSB0aGlzKSB7CiAgICAgICAgIHJlcXVlc3RDYWxsYmFjay0+c2VuZEZhaWx1
cmUoIkRhdGFiYXNlIGRvbWFpbiBtdXN0IGJlIGVuYWJsZWQiX3MpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JEYXRhYmFzZUFnZW50LmggYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRhdGFiYXNlQWdlbnQuaApp
bmRleCA0MzA1MDMxOTFjZGNiOTg3OWZkYjY1NTEzOWMxNGJiNzdhNzM3NDJmLi4wMWNlZjQzOWI0
YWM2ZGFkMmU0MTI2YjU0MzQxNmM1Mzk0MzJjYmM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRhdGFiYXNlQWdlbnQuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRhdGFiYXNlQWdlbnQuaApAQCAtNDEs
MjQgKzQxLDIyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIERhdGFiYXNlOwogY2xhc3Mg
SW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZTsKIAotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7
Ci0KIGNsYXNzIEluc3BlY3RvckRhdGFiYXNlQWdlbnQgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9y
QWdlbnRCYXNlLCBwdWJsaWMgSW5zcGVjdG9yOjpEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFu
ZGxlciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW5zcGVjdG9yRGF0YWJhc2VBZ2VudCk7
CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgSW5zcGVjdG9yRGF0
YWJhc2VBZ2VudChXZWJBZ2VudENvbnRleHQmKTsKLSAgICB+SW5zcGVjdG9yRGF0YWJhc2VBZ2Vu
dCgpIG92ZXJyaWRlOworICAgIH5JbnNwZWN0b3JEYXRhYmFzZUFnZW50KCk7CiAKICAgICAvLyBJ
bnNwZWN0b3JBZ2VudEJhc2UKLSAgICB2b2lkIGRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJ
bnNwZWN0b3I6OkZyb250ZW5kUm91dGVyKiwgSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlciop
IG92ZXJyaWRlOwotICAgIHZvaWQgd2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVj
dG9yOjpEaXNjb25uZWN0UmVhc29uKSBvdmVycmlkZTsKKyAgICB2b2lkIGRpZENyZWF0ZUZyb250
ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kUm91dGVyKiwgSW5zcGVjdG9yOjpCYWNr
ZW5kRGlzcGF0Y2hlciopOworICAgIHZvaWQgd2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQo
SW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKTsKIAogICAgIC8vIERhdGFiYXNlQmFja2VuZERp
c3BhdGNoZXJIYW5kbGVyCi0gICAgdm9pZCBlbmFibGUoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsK
LSAgICB2b2lkIGRpc2FibGUoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2b2lkIGdldERh
dGFiYXNlVGFibGVOYW1lcyhFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VJZCwg
UmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4mIG5hbWVzKSBvdmVycmlkZTsKLSAgICB2b2lk
IGV4ZWN1dGVTUUwoY29uc3QgU3RyaW5nJiBkYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIHF1ZXJ5
LCBSZWY8RXhlY3V0ZVNRTENhbGxiYWNrPiYmKSBvdmVycmlkZTsKKyAgICBJbnNwZWN0b3I6OlBy
b3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGVuYWJsZSgpOworICAgIEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZGlzYWJsZSgpOworICAgIEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEpTT046OkFycmF5T2Y8U3RyaW5nPj4+IGdldERhdGFi
YXNlVGFibGVOYW1lcyhjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RGF0YWJh
c2VJZCYpOworICAgIHZvaWQgZXhlY3V0ZVNRTChjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpE
YXRhYmFzZTo6RGF0YWJhc2VJZCYsIGNvbnN0IFN0cmluZyYgcXVlcnksIFJlZjxFeGVjdXRlU1FM
Q2FsbGJhY2s+JiYpOwogCiAgICAgLy8gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uCiAgICAgdm9p
ZCBkaWRDb21taXRMb2FkKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
YWdlbnRzL0luc3BlY3RvckluZGV4ZWREQkFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9hZ2VudHMvSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQuY3BwCmluZGV4IGZmOGYzMGY0MDNm
ODVjN2RkYmUzMWIxMGUwM2NlZjVmY2RmN2YwMDYuLmExNDVlMDRlYjIxOGRlOGE0MmZmODk4Mjk4
YjhiZWE2ODJjNGVkZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2Vu
dHMvSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9hZ2VudHMvSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQuY3BwCkBAIC03MCwyNiArNzAsNiBA
QAogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdDb25j
YXRlbmF0ZU51bWJlcnMuaD4KIAotdXNpbmcgSlNPTjo6QXJyYXlPZjsKLXVzaW5nIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkluZGV4ZWREQjo6RGF0YWJhc2VXaXRoT2JqZWN0U3RvcmVzOwotdXNpbmcg
SW5zcGVjdG9yOjpQcm90b2NvbDo6SW5kZXhlZERCOjpEYXRhRW50cnk7Ci11c2luZyBJbnNwZWN0
b3I6OlByb3RvY29sOjpJbmRleGVkREI6OktleTsKLXVzaW5nIEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkluZGV4ZWREQjo6S2V5UGF0aDsKLXVzaW5nIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkluZGV4ZWRE
Qjo6S2V5UmFuZ2U7Ci11c2luZyBJbnNwZWN0b3I6OlByb3RvY29sOjpJbmRleGVkREI6Ok9iamVj
dFN0b3JlOwotdXNpbmcgSW5zcGVjdG9yOjpQcm90b2NvbDo6SW5kZXhlZERCOjpPYmplY3RTdG9y
ZUluZGV4OwotCi10eXBlZGVmIEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNr
QmFzZSBSZXF1ZXN0Q2FsbGJhY2s7Ci10eXBlZGVmIEluc3BlY3Rvcjo6SW5kZXhlZERCQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyOjpSZXF1ZXN0RGF0YWJhc2VOYW1lc0NhbGxiYWNrIFJlcXVlc3RE
YXRhYmFzZU5hbWVzQ2FsbGJhY2s7Ci10eXBlZGVmIEluc3BlY3Rvcjo6SW5kZXhlZERCQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyOjpSZXF1ZXN0RGF0YWJhc2VDYWxsYmFjayBSZXF1ZXN0RGF0YWJh
c2VDYWxsYmFjazsKLXR5cGVkZWYgSW5zcGVjdG9yOjpJbmRleGVkREJCYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXI6OlJlcXVlc3REYXRhQ2FsbGJhY2sgUmVxdWVzdERhdGFDYWxsYmFjazsKLXR5cGVk
ZWYgSW5zcGVjdG9yOjpJbmRleGVkREJCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkNsZWFyT2Jq
ZWN0U3RvcmVDYWxsYmFjayBDbGVhck9iamVjdFN0b3JlQ2FsbGJhY2s7Ci0KLXR5cGVkZWYgU3Ry
aW5nIEVycm9yU3RyaW5nOwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLXVzaW5nIEVycm9yU3Ry
aW5nT3IgPSBFeHBlY3RlZDxULCBFcnJvclN0cmluZz47Ci0KIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKQEAgLTEwMyw3ICs4Myw3IEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIH5FeGVjdXRhYmxlV2l0aERhdGFiYXNlKCkgPSBkZWZhdWx0OwogICAgIHZv
aWQgc3RhcnQoSURCRmFjdG9yeSosIFNlY3VyaXR5T3JpZ2luKiwgY29uc3QgU3RyaW5nJiBkYXRh
YmFzZU5hbWUpOwogICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlKElEQkRhdGFiYXNlJikgPSAwOwot
ICAgIHZpcnR1YWwgUmVxdWVzdENhbGxiYWNrJiByZXF1ZXN0Q2FsbGJhY2soKSA9IDA7CisgICAg
dmlydHVhbCBCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlJiByZXF1ZXN0Q2FsbGJhY2so
KSA9IDA7CiAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCgpIGNvbnN0IHsgcmV0
dXJuIG1fY29udGV4dDsgfQogcHJpdmF0ZToKICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBt
X2NvbnRleHQ7CkBAIC0xNzEsMjAgKzE1MSwyMCBAQCB2b2lkIEV4ZWN1dGFibGVXaXRoRGF0YWJh
c2U6OnN0YXJ0KElEQkZhY3RvcnkqIGlkYkZhY3RvcnksIFNlY3VyaXR5T3JpZ2luKiwgY29ucwog
fQogCiAKLXN0YXRpYyBSZWZQdHI8S2V5UGF0aD4ga2V5UGF0aEZyb21JREJLZXlQYXRoKGNvbnN0
IE9wdGlvbmFsPElEQktleVBhdGg+JiBpZGJLZXlQYXRoKQorc3RhdGljIFJlZjxQcm90b2NvbDo6
SW5kZXhlZERCOjpLZXlQYXRoPiBrZXlQYXRoRnJvbUlEQktleVBhdGgoY29uc3QgT3B0aW9uYWw8
SURCS2V5UGF0aD4mIGlkYktleVBhdGgpCiB7CiAgICAgaWYgKCFpZGJLZXlQYXRoKQotICAgICAg
ICByZXR1cm4gS2V5UGF0aDo6Y3JlYXRlKCkuc2V0VHlwZShLZXlQYXRoOjpUeXBlOjpOdWxsKS5y
ZWxlYXNlKCk7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6SW5kZXhlZERCOjpLZXlQYXRoOjpj
cmVhdGUoKS5zZXRUeXBlKFByb3RvY29sOjpJbmRleGVkREI6OktleVBhdGg6OlR5cGU6Ok51bGwp
LnJlbGVhc2UoKTsKIAogICAgIGF1dG8gdmlzaXRvciA9IFdURjo6bWFrZVZpc2l0b3IoW10oY29u
c3QgU3RyaW5nJiBzdHJpbmcpIHsKLSAgICAgICAgYXV0byBrZXlQYXRoID0gS2V5UGF0aDo6Y3Jl
YXRlKCkuc2V0VHlwZShLZXlQYXRoOjpUeXBlOjpTdHJpbmcpLnJlbGVhc2UoKTsKKyAgICAgICAg
YXV0byBrZXlQYXRoID0gUHJvdG9jb2w6OkluZGV4ZWREQjo6S2V5UGF0aDo6Y3JlYXRlKCkuc2V0
VHlwZShQcm90b2NvbDo6SW5kZXhlZERCOjpLZXlQYXRoOjpUeXBlOjpTdHJpbmcpLnJlbGVhc2Uo
KTsKICAgICAgICAga2V5UGF0aC0+c2V0U3RyaW5nKHN0cmluZyk7CiAgICAgICAgIHJldHVybiBr
ZXlQYXRoOwogICAgIH0sIFtdKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiB2ZWN0b3IpIHsKICAgICAg
ICAgYXV0byBhcnJheSA9IEpTT046OkFycmF5T2Y8U3RyaW5nPjo6Y3JlYXRlKCk7CiAgICAgICAg
IGZvciAoYXV0byYgc3RyaW5nIDogdmVjdG9yKQogICAgICAgICAgICAgYXJyYXktPmFkZEl0ZW0o
c3RyaW5nKTsKLSAgICAgICAgYXV0byBrZXlQYXRoID0gS2V5UGF0aDo6Y3JlYXRlKCkuc2V0VHlw
ZShLZXlQYXRoOjpUeXBlOjpBcnJheSkucmVsZWFzZSgpOworICAgICAgICBhdXRvIGtleVBhdGgg
PSBQcm90b2NvbDo6SW5kZXhlZERCOjpLZXlQYXRoOjpjcmVhdGUoKS5zZXRUeXBlKFByb3RvY29s
OjpJbmRleGVkREI6OktleVBhdGg6OlR5cGU6OkFycmF5KS5yZWxlYXNlKCk7CiAgICAgICAgIGtl
eVBhdGgtPnNldEFycmF5KFdURk1vdmUoYXJyYXkpKTsKICAgICAgICAgcmV0dXJuIGtleVBhdGg7
CiAgICAgfSk7CkBAIC0yMTcsNyArMTk3LDcgQEAgc3RhdGljIFJlZlB0cjxJREJJbmRleD4gaW5k
ZXhGb3JPYmplY3RTdG9yZShJREJPYmplY3RTdG9yZSogaWRiT2JqZWN0U3RvcmUsIGNvbnMKIAog
Y2xhc3MgRGF0YWJhc2VMb2FkZXIgZmluYWwgOiBwdWJsaWMgRXhlY3V0YWJsZVdpdGhEYXRhYmFz
ZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxEYXRhYmFzZUxvYWRlcj4gY3JlYXRlKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFJlZjxSZXF1ZXN0RGF0YWJhc2VDYWxsYmFjaz4m
JiByZXF1ZXN0Q2FsbGJhY2spCisgICAgc3RhdGljIFJlZjxEYXRhYmFzZUxvYWRlcj4gY3JlYXRl
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFJlZjxJbmRleGVkREJCYWNrZW5kRGlz
cGF0Y2hlckhhbmRsZXI6OlJlcXVlc3REYXRhYmFzZUNhbGxiYWNrPiYmIHJlcXVlc3RDYWxsYmFj
aykKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERhdGFiYXNlTG9hZGVyKGNv
bnRleHQsIFdURk1vdmUocmVxdWVzdENhbGxiYWNrKSkpOwogICAgIH0KQEAgLTIzMCwxNyArMjEw
LDE3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybjsKICAgICAKICAgICAgICAgYXV0byYg
ZGF0YWJhc2VJbmZvID0gZGF0YWJhc2UuaW5mbygpOwotICAgICAgICBhdXRvIG9iamVjdFN0b3Jl
cyA9IEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6SW5kZXhlZERCOjpPYmplY3RT
dG9yZT46OmNyZWF0ZSgpOworICAgICAgICBhdXRvIG9iamVjdFN0b3JlcyA9IEpTT046OkFycmF5
T2Y8UHJvdG9jb2w6OkluZGV4ZWREQjo6T2JqZWN0U3RvcmU+OjpjcmVhdGUoKTsKICAgICAgICAg
YXV0byBvYmplY3RTdG9yZU5hbWVzID0gZGF0YWJhc2VJbmZvLm9iamVjdFN0b3JlTmFtZXMoKTsK
ICAgICAgICAgZm9yIChhdXRvJiBuYW1lIDogb2JqZWN0U3RvcmVOYW1lcykgewogICAgICAgICAg
ICAgYXV0byogb2JqZWN0U3RvcmVJbmZvID0gZGF0YWJhc2VJbmZvLmluZm9Gb3JFeGlzdGluZ09i
amVjdFN0b3JlKG5hbWUpOwogICAgICAgICAgICAgaWYgKCFvYmplY3RTdG9yZUluZm8pCiAgICAg
ICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgICAgIGF1dG8gaW5kZXhlcyA9IEpTT046
OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6SW5kZXhlZERCOjpPYmplY3RTdG9yZUluZGV4
Pjo6Y3JlYXRlKCk7CisgICAgICAgICAgICBhdXRvIGluZGV4ZXMgPSBKU09OOjpBcnJheU9mPFBy
b3RvY29sOjpJbmRleGVkREI6Ok9iamVjdFN0b3JlSW5kZXg+OjpjcmVhdGUoKTsKICAgICAKICAg
ICAgICAgICAgIGZvciAoYXV0byYgaW5kZXhJbmZvIDogb2JqZWN0U3RvcmVJbmZvLT5pbmRleE1h
cCgpLnZhbHVlcygpKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBvYmplY3RTdG9yZUluZGV4ID0g
T2JqZWN0U3RvcmVJbmRleDo6Y3JlYXRlKCkKKyAgICAgICAgICAgICAgICBhdXRvIG9iamVjdFN0
b3JlSW5kZXggPSBQcm90b2NvbDo6SW5kZXhlZERCOjpPYmplY3RTdG9yZUluZGV4OjpjcmVhdGUo
KQogICAgICAgICAgICAgICAgICAgICAuc2V0TmFtZShpbmRleEluZm8ubmFtZSgpKQogICAgICAg
ICAgICAgICAgICAgICAuc2V0S2V5UGF0aChrZXlQYXRoRnJvbUlEQktleVBhdGgoaW5kZXhJbmZv
LmtleVBhdGgoKSkpCiAgICAgICAgICAgICAgICAgICAgIC5zZXRVbmlxdWUoaW5kZXhJbmZvLnVu
aXF1ZSgpKQpAQCAtMjQ5LDcgKzIyOSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBpbmRl
eGVzLT5hZGRJdGVtKFdURk1vdmUob2JqZWN0U3RvcmVJbmRleCkpOwogICAgICAgICAgICAgfQog
ICAgIAotICAgICAgICAgICAgYXV0byBvYmplY3RTdG9yZSA9IE9iamVjdFN0b3JlOjpjcmVhdGUo
KQorICAgICAgICAgICAgYXV0byBvYmplY3RTdG9yZSA9IFByb3RvY29sOjpJbmRleGVkREI6Ok9i
amVjdFN0b3JlOjpjcmVhdGUoKQogICAgICAgICAgICAgICAgIC5zZXROYW1lKG9iamVjdFN0b3Jl
SW5mby0+bmFtZSgpKQogICAgICAgICAgICAgICAgIC5zZXRLZXlQYXRoKGtleVBhdGhGcm9tSURC
S2V5UGF0aChvYmplY3RTdG9yZUluZm8tPmtleVBhdGgoKSkpCiAgICAgICAgICAgICAgICAgLnNl
dEF1dG9JbmNyZW1lbnQob2JqZWN0U3RvcmVJbmZvLT5hdXRvSW5jcmVtZW50KCkpCkBAIC0yNTgs
NyArMjM4LDcgQEAgcHVibGljOgogICAgICAgICAgICAgb2JqZWN0U3RvcmVzLT5hZGRJdGVtKFdU
Rk1vdmUob2JqZWN0U3RvcmUpKTsKICAgICAgICAgfQogICAgIAotICAgICAgICBhdXRvIHJlc3Vs
dCA9IERhdGFiYXNlV2l0aE9iamVjdFN0b3Jlczo6Y3JlYXRlKCkKKyAgICAgICAgYXV0byByZXN1
bHQgPSBQcm90b2NvbDo6SW5kZXhlZERCOjpEYXRhYmFzZVdpdGhPYmplY3RTdG9yZXM6OmNyZWF0
ZSgpCiAgICAgICAgICAgICAuc2V0TmFtZShkYXRhYmFzZUluZm8ubmFtZSgpKQogICAgICAgICAg
ICAgLnNldFZlcnNpb24oZGF0YWJhc2VJbmZvLnZlcnNpb24oKSkKICAgICAgICAgICAgIC5zZXRP
YmplY3RTdG9yZXMoV1RGTW92ZShvYmplY3RTdG9yZXMpKQpAQCAtMjY2LDkyICsyNDYsOTYgQEAg
cHVibGljOgogICAgICAgICBtX3JlcXVlc3RDYWxsYmFjay0+c2VuZFN1Y2Nlc3MoV1RGTW92ZShy
ZXN1bHQpKTsKICAgICB9CiAKLSAgICBSZXF1ZXN0Q2FsbGJhY2smIHJlcXVlc3RDYWxsYmFjaygp
IG92ZXJyaWRlIHsgcmV0dXJuIG1fcmVxdWVzdENhbGxiYWNrLmdldCgpOyB9CisgICAgQmFja2Vu
ZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZSYgcmVxdWVzdENhbGxiYWNrKCkgb3ZlcnJpZGUgeyBy
ZXR1cm4gbV9yZXF1ZXN0Q2FsbGJhY2suZ2V0KCk7IH0KIHByaXZhdGU6Ci0gICAgRGF0YWJhc2VM
b2FkZXIoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUmVmPFJlcXVlc3REYXRhYmFz
ZUNhbGxiYWNrPiYmIHJlcXVlc3RDYWxsYmFjaykKKyAgICBEYXRhYmFzZUxvYWRlcihTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBSZWY8SW5kZXhlZERCQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyOjpSZXF1ZXN0RGF0YWJhc2VDYWxsYmFjaz4mJiByZXF1ZXN0Q2FsbGJhY2spCiAgICAg
ICAgIDogRXhlY3V0YWJsZVdpdGhEYXRhYmFzZShjb250ZXh0KQogICAgICAgICAsIG1fcmVxdWVz
dENhbGxiYWNrKFdURk1vdmUocmVxdWVzdENhbGxiYWNrKSkgeyB9Ci0gICAgUmVmPFJlcXVlc3RE
YXRhYmFzZUNhbGxiYWNrPiBtX3JlcXVlc3RDYWxsYmFjazsKKyAgICBSZWY8SW5kZXhlZERCQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyOjpSZXF1ZXN0RGF0YWJhc2VDYWxsYmFjaz4gbV9yZXF1ZXN0
Q2FsbGJhY2s7CiB9OwogCi1zdGF0aWMgUmVmUHRyPElEQktleT4gaWRiS2V5RnJvbUluc3BlY3Rv
ck9iamVjdChKU09OOjpPYmplY3QqIGtleSkKK3N0YXRpYyBSZWZQdHI8SURCS2V5PiBpZGJLZXlG
cm9tSW5zcGVjdG9yT2JqZWN0KFJlZjxKU09OOjpPYmplY3Q+JiYga2V5KQogewotICAgIFN0cmlu
ZyB0eXBlOwotICAgIGlmICgha2V5LT5nZXRTdHJpbmcoInR5cGUiLCB0eXBlKSkKKyAgICBhdXRv
IHR5cGVTdHJpbmcgPSBrZXktPmdldFN0cmluZyhQcm90b2NvbDo6SW5kZXhlZERCOjpLZXk6OnR5
cGVLZXkpOworICAgIGlmICghdHlwZVN0cmluZykKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAK
LSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiBudW1iZXJUeXBlKE1BS0Vf
U1RBVElDX1NUUklOR19JTVBMKCJudW1iZXIiKSk7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVk
PGNvbnN0IFN0cmluZz4gc3RyaW5nVHlwZShNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgic3RyaW5n
IikpOwotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IGRhdGVUeXBlKE1B
S0VfU1RBVElDX1NUUklOR19JTVBMKCJkYXRlIikpOwotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxjb25zdCBTdHJpbmc+IGFycmF5VHlwZShNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgiYXJyYXki
KSk7CisgICAgYXV0byB0eXBlID0gUHJvdG9jb2w6OkhlbHBlcnM6OnBhcnNlRW51bVZhbHVlRnJv
bVN0cmluZzxQcm90b2NvbDo6SW5kZXhlZERCOjpLZXk6OlR5cGU+KHR5cGVTdHJpbmcpOworICAg
IGlmICghdHlwZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBSZWZQdHI8SURCS2V5
PiBpZGJLZXk7Ci0gICAgaWYgKHR5cGUgPT0gbnVtYmVyVHlwZSkgewotICAgICAgICBkb3VibGUg
bnVtYmVyOwotICAgICAgICBpZiAoIWtleS0+Z2V0RG91YmxlKCJudW1iZXIiLCBudW1iZXIpKQor
ICAgIHN3aXRjaCAoKnR5cGUpIHsKKyAgICBjYXNlIFByb3RvY29sOjpJbmRleGVkREI6OktleTo6
VHlwZTo6TnVtYmVyOiB7CisgICAgICAgIGF1dG8gbnVtYmVyID0ga2V5LT5nZXREb3VibGUoUHJv
dG9jb2w6OkluZGV4ZWREQjo6S2V5OjpudW1iZXJLZXkpOworICAgICAgICBpZiAoIW51bWJlcikK
ICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICBpZGJLZXkgPSBJREJLZXk6OmNy
ZWF0ZU51bWJlcihudW1iZXIpOwotICAgIH0gZWxzZSBpZiAodHlwZSA9PSBzdHJpbmdUeXBlKSB7
Ci0gICAgICAgIFN0cmluZyBzdHJpbmc7Ci0gICAgICAgIGlmICgha2V5LT5nZXRTdHJpbmcoInN0
cmluZyIsIHN0cmluZykpCisgICAgICAgIHJldHVybiBJREJLZXk6OmNyZWF0ZU51bWJlcigqbnVt
YmVyKTsKKyAgICB9CisKKyAgICBjYXNlIFByb3RvY29sOjpJbmRleGVkREI6OktleTo6VHlwZTo6
U3RyaW5nOiB7CisgICAgICAgIGF1dG8gc3RyaW5nID0ga2V5LT5nZXRTdHJpbmcoUHJvdG9jb2w6
OkluZGV4ZWREQjo6S2V5OjpzdHJpbmdLZXkpOworICAgICAgICBpZiAoIXN0cmluZykKICAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICBpZGJLZXkgPSBJREJLZXk6OmNyZWF0ZVN0
cmluZyhzdHJpbmcpOwotICAgIH0gZWxzZSBpZiAodHlwZSA9PSBkYXRlVHlwZSkgewotICAgICAg
ICBkb3VibGUgZGF0ZTsKLSAgICAgICAgaWYgKCFrZXktPmdldERvdWJsZSgiZGF0ZSIsIGRhdGUp
KQorICAgICAgICByZXR1cm4gSURCS2V5OjpjcmVhdGVTdHJpbmcoc3RyaW5nKTsKKyAgICB9CisK
KyAgICBjYXNlIFByb3RvY29sOjpJbmRleGVkREI6OktleTo6VHlwZTo6RGF0ZTogeworICAgICAg
ICBhdXRvIGRhdGUgPSBrZXktPmdldERvdWJsZShQcm90b2NvbDo6SW5kZXhlZERCOjpLZXk6OmRh
dGVLZXkpOworICAgICAgICBpZiAoIWRhdGUpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICAgICAgaWRiS2V5ID0gSURCS2V5OjpjcmVhdGVEYXRlKGRhdGUpOwotICAgIH0gZWxzZSBp
ZiAodHlwZSA9PSBhcnJheVR5cGUpIHsKKyAgICAgICAgcmV0dXJuIElEQktleTo6Y3JlYXRlRGF0
ZSgqZGF0ZSk7CisgICAgfQorCisgICAgY2FzZSBQcm90b2NvbDo6SW5kZXhlZERCOjpLZXk6OlR5
cGU6OkFycmF5OiB7CisgICAgICAgIGF1dG8gYXJyYXkgPSBrZXktPmdldEFycmF5KFByb3RvY29s
OjpJbmRleGVkREI6OktleTo6YXJyYXlLZXkpOworICAgICAgICBpZiAoIWFycmF5KQorICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisKICAgICAgICAgVmVjdG9yPFJlZlB0cjxJREJLZXk+PiBr
ZXlBcnJheTsKLSAgICAgICAgUmVmUHRyPEpTT046OkFycmF5PiBhcnJheTsKLSAgICAgICAgaWYg
KCFrZXktPmdldEFycmF5KCJhcnJheSIsIGFycmF5KSkKLSAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFycmF5LT5sZW5ndGgoKTsgKytp
KSB7Ci0gICAgICAgICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHZhbHVlID0gYXJyYXktPmdldChp
KTsKLSAgICAgICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG9iamVjdDsKLSAgICAgICAgICAg
IGlmICghdmFsdWUtPmFzT2JqZWN0KG9iamVjdCkpCisgICAgICAgICAgICBhdXRvIG9iamVjdCA9
IGFycmF5LT5nZXQoaSktPmFzT2JqZWN0KCk7CisgICAgICAgICAgICBpZiAoIW9iamVjdCkKICAg
ICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgICAgIGtleUFycmF5LmFwcGVu
ZChpZGJLZXlGcm9tSW5zcGVjdG9yT2JqZWN0KG9iamVjdC5nZXQoKSkpOworICAgICAgICAgICAg
a2V5QXJyYXkuYXBwZW5kKGlkYktleUZyb21JbnNwZWN0b3JPYmplY3Qob2JqZWN0LnJlbGVhc2VO
b25OdWxsKCkpKTsKICAgICAgICAgfQotICAgICAgICBpZGJLZXkgPSBJREJLZXk6OmNyZWF0ZUFy
cmF5KGtleUFycmF5KTsKLSAgICB9IGVsc2UKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
ICAgIHJldHVybiBJREJLZXk6OmNyZWF0ZUFycmF5KGtleUFycmF5KTsKKyAgICB9CisgICAgfQog
Ci0gICAgcmV0dXJuIGlkYktleTsKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1
cm4gbnVsbHB0cjsKIH0KIAotc3RhdGljIFJlZlB0cjxJREJLZXlSYW5nZT4gaWRiS2V5UmFuZ2VG
cm9tS2V5UmFuZ2UoY29uc3QgSlNPTjo6T2JqZWN0KiBrZXlSYW5nZSkKK3N0YXRpYyBSZWZQdHI8
SURCS2V5UmFuZ2U+IGlkYktleVJhbmdlRnJvbUtleVJhbmdlKEpTT046Ok9iamVjdCYga2V5UmFu
Z2UpCiB7CiAgICAgUmVmUHRyPElEQktleT4gaWRiTG93ZXI7Ci0gICAgUmVmUHRyPEpTT046Ok9i
amVjdD4gbG93ZXI7Ci0gICAgaWYgKGtleVJhbmdlLT5nZXRPYmplY3QoImxvd2VyIl9zLCBsb3dl
cikpIHsKLSAgICAgICAgaWRiTG93ZXIgPSBpZGJLZXlGcm9tSW5zcGVjdG9yT2JqZWN0KGxvd2Vy
LmdldCgpKTsKKyAgICBpZiAoYXV0byBsb3dlciA9IGtleVJhbmdlLmdldE9iamVjdChQcm90b2Nv
bDo6SW5kZXhlZERCOjpLZXlSYW5nZTo6bG93ZXJLZXkpKSB7CisgICAgICAgIGlkYkxvd2VyID0g
aWRiS2V5RnJvbUluc3BlY3Rvck9iamVjdChsb3dlci5yZWxlYXNlTm9uTnVsbCgpKTsKICAgICAg
ICAgaWYgKCFpZGJMb3dlcikKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAog
ICAgIFJlZlB0cjxJREJLZXk+IGlkYlVwcGVyOwotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHVw
cGVyOwotICAgIGlmIChrZXlSYW5nZS0+Z2V0T2JqZWN0KCJ1cHBlciJfcywgdXBwZXIpKSB7Ci0g
ICAgICAgIGlkYlVwcGVyID0gaWRiS2V5RnJvbUluc3BlY3Rvck9iamVjdCh1cHBlci5nZXQoKSk7
CisgICAgaWYgKGF1dG8gdXBwZXIgPSBrZXlSYW5nZS5nZXRPYmplY3QoUHJvdG9jb2w6OkluZGV4
ZWREQjo6S2V5UmFuZ2U6OnVwcGVyS2V5KSkgeworICAgICAgICBpZGJVcHBlciA9IGlkYktleUZy
b21JbnNwZWN0b3JPYmplY3QodXBwZXIucmVsZWFzZU5vbk51bGwoKSk7CiAgICAgICAgIGlmICgh
aWRiVXBwZXIpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKLSAgICBib29s
IGxvd2VyT3BlbjsKLSAgICBpZiAoIWtleVJhbmdlLT5nZXRCb29sZWFuKCJsb3dlck9wZW4iX3Ms
IGxvd2VyT3BlbikpCisgICAgYXV0byBsb3dlck9wZW4gPSBrZXlSYW5nZS5nZXRCb29sZWFuKFBy
b3RvY29sOjpJbmRleGVkREI6OktleVJhbmdlOjpsb3dlck9wZW5LZXkpOworICAgIGlmICghbG93
ZXJPcGVuKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIGJvb2wgdXBwZXJPcGVuOwot
ICAgIGlmICgha2V5UmFuZ2UtPmdldEJvb2xlYW4oInVwcGVyT3BlbiJfcywgdXBwZXJPcGVuKSkK
KyAgICBhdXRvIHVwcGVyT3BlbiA9IGtleVJhbmdlLmdldEJvb2xlYW4oUHJvdG9jb2w6OkluZGV4
ZWREQjo6S2V5UmFuZ2U6OnVwcGVyT3BlbktleSk7CisgICAgaWYgKCF1cHBlck9wZW4pCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJuIElEQktleVJhbmdlOjpjcmVhdGUoV1RG
TW92ZShpZGJMb3dlciksIFdURk1vdmUoaWRiVXBwZXIpLCBsb3dlck9wZW4sIHVwcGVyT3Blbik7
CisgICAgcmV0dXJuIElEQktleVJhbmdlOjpjcmVhdGUoV1RGTW92ZShpZGJMb3dlciksIFdURk1v
dmUoaWRiVXBwZXIpLCAqbG93ZXJPcGVuLCAqdXBwZXJPcGVuKTsKIH0KIAogY2xhc3MgT3BlbkN1
cnNvckNhbGxiYWNrIGZpbmFsIDogcHVibGljIEV2ZW50TGlzdGVuZXIgewogcHVibGljOgotICAg
IHN0YXRpYyBSZWY8T3BlbkN1cnNvckNhbGxiYWNrPiBjcmVhdGUoSW5qZWN0ZWRTY3JpcHQgaW5q
ZWN0ZWRTY3JpcHQsIFJlZjxSZXF1ZXN0RGF0YUNhbGxiYWNrPiYmIHJlcXVlc3RDYWxsYmFjaywg
aW50IHNraXBDb3VudCwgdW5zaWduZWQgcGFnZVNpemUpCisgICAgc3RhdGljIFJlZjxPcGVuQ3Vy
c29yQ2FsbGJhY2s+IGNyZWF0ZShJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdCwgUmVmPElu
ZGV4ZWREQkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UmVxdWVzdERhdGFDYWxsYmFjaz4mJiBy
ZXF1ZXN0Q2FsbGJhY2ssIGludCBza2lwQ291bnQsIHVuc2lnbmVkIHBhZ2VTaXplKQogICAgIHsK
ICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgT3BlbkN1cnNvckNhbGxiYWNrKGluamVjdGVk
U2NyaXB0LCBXVEZNb3ZlKHJlcXVlc3RDYWxsYmFjayksIHNraXBDb3VudCwgcGFnZVNpemUpKTsK
ICAgICB9CkBAIC00MDUsMTMgKzM4OSwyMyBAQCBwdWJsaWM6CiAgICAgICAgIH0KIAogICAgICAg
ICBhdXRvKiBsZXhpY2FsR2xvYmFsT2JqZWN0ID0gY29udGV4dC5leGVjU3RhdGUoKTsKLSAgICAg
ICAgYXV0byBrZXkgPSAgdG9KUygqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmxleGljYWxHbG9iYWxP
YmplY3QsIGN1cnNvci0+a2V5KCkpOwotICAgICAgICBhdXRvIHByaW1hcnlLZXkgPSB0b0pTKCps
ZXhpY2FsR2xvYmFsT2JqZWN0LCAqbGV4aWNhbEdsb2JhbE9iamVjdCwgY3Vyc29yLT5wcmltYXJ5
S2V5KCkpOwotICAgICAgICBhdXRvIHZhbHVlID0gZGVzZXJpYWxpemVJREJWYWx1ZVRvSlNWYWx1
ZSgqbGV4aWNhbEdsb2JhbE9iamVjdCwgY3Vyc29yLT52YWx1ZSgpKTsKLSAgICAgICAgYXV0byBk
YXRhRW50cnkgPSBEYXRhRW50cnk6OmNyZWF0ZSgpCi0gICAgICAgICAgICAuc2V0S2V5KG1faW5q
ZWN0ZWRTY3JpcHQud3JhcE9iamVjdChrZXksIFN0cmluZygpLCB0cnVlKSkKLSAgICAgICAgICAg
IC5zZXRQcmltYXJ5S2V5KG1faW5qZWN0ZWRTY3JpcHQud3JhcE9iamVjdChwcmltYXJ5S2V5LCBT
dHJpbmcoKSwgdHJ1ZSkpCi0gICAgICAgICAgICAuc2V0VmFsdWUobV9pbmplY3RlZFNjcmlwdC53
cmFwT2JqZWN0KHZhbHVlLCBTdHJpbmcoKSwgdHJ1ZSkpCisKKyAgICAgICAgYXV0byBrZXkgPSBt
X2luamVjdGVkU2NyaXB0LndyYXBPYmplY3QodG9KUygqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmxl
eGljYWxHbG9iYWxPYmplY3QsIGN1cnNvci0+a2V5KCkpLCBTdHJpbmcoKSwgdHJ1ZSk7CisgICAg
ICAgIGlmICgha2V5KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGF1dG8gcHJpbWFy
eUtleSA9IG1faW5qZWN0ZWRTY3JpcHQud3JhcE9iamVjdCh0b0pTKCpsZXhpY2FsR2xvYmFsT2Jq
ZWN0LCAqbGV4aWNhbEdsb2JhbE9iamVjdCwgY3Vyc29yLT5wcmltYXJ5S2V5KCkpLCBTdHJpbmco
KSwgdHJ1ZSk7CisgICAgICAgIGlmICghcHJpbWFyeUtleSkKKyAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICBhdXRvIHZhbHVlID0gbV9pbmplY3RlZFNjcmlwdC53cmFwT2JqZWN0KGRlc2Vy
aWFsaXplSURCVmFsdWVUb0pTVmFsdWUoKmxleGljYWxHbG9iYWxPYmplY3QsIGN1cnNvci0+dmFs
dWUoKSksIFN0cmluZygpLCB0cnVlKTsKKyAgICAgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgICAg
IHJldHVybjsKKworICAgICAgICBhdXRvIGRhdGFFbnRyeSA9IFByb3RvY29sOjpJbmRleGVkREI6
OkRhdGFFbnRyeTo6Y3JlYXRlKCkKKyAgICAgICAgICAgIC5zZXRLZXkoa2V5LnJlbGVhc2VOb25O
dWxsKCkpCisgICAgICAgICAgICAuc2V0UHJpbWFyeUtleShwcmltYXJ5S2V5LnJlbGVhc2VOb25O
dWxsKCkpCisgICAgICAgICAgICAuc2V0VmFsdWUodmFsdWUucmVsZWFzZU5vbk51bGwoKSkKICAg
ICAgICAgICAgIC5yZWxlYXNlKCk7CiAgICAgICAgIG1fcmVzdWx0LT5hZGRJdGVtKFdURk1vdmUo
ZGF0YUVudHJ5KSk7CiAgICAgfQpAQCAtNDI0LDI1ICs0MTgsMjUgQEAgcHVibGljOgogICAgIH0K
IAogcHJpdmF0ZToKLSAgICBPcGVuQ3Vyc29yQ2FsbGJhY2soSW5qZWN0ZWRTY3JpcHQgaW5qZWN0
ZWRTY3JpcHQsIFJlZjxSZXF1ZXN0RGF0YUNhbGxiYWNrPiYmIHJlcXVlc3RDYWxsYmFjaywgaW50
IHNraXBDb3VudCwgdW5zaWduZWQgcGFnZVNpemUpCisgICAgT3BlbkN1cnNvckNhbGxiYWNrKElu
amVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0LCBSZWY8SW5kZXhlZERCQmFja2VuZERpc3BhdGNo
ZXJIYW5kbGVyOjpSZXF1ZXN0RGF0YUNhbGxiYWNrPiYmIHJlcXVlc3RDYWxsYmFjaywgaW50IHNr
aXBDb3VudCwgdW5zaWduZWQgcGFnZVNpemUpCiAgICAgICAgIDogRXZlbnRMaXN0ZW5lcihFdmVu
dExpc3RlbmVyOjpDUFBFdmVudExpc3RlbmVyVHlwZSkKICAgICAgICAgLCBtX2luamVjdGVkU2Ny
aXB0KGluamVjdGVkU2NyaXB0KQogICAgICAgICAsIG1fcmVxdWVzdENhbGxiYWNrKFdURk1vdmUo
cmVxdWVzdENhbGxiYWNrKSkKLSAgICAgICAgLCBtX3Jlc3VsdChKU09OOjpBcnJheU9mPERhdGFF
bnRyeT46OmNyZWF0ZSgpKQorICAgICAgICAsIG1fcmVzdWx0KEpTT046OkFycmF5T2Y8UHJvdG9j
b2w6OkluZGV4ZWREQjo6RGF0YUVudHJ5Pjo6Y3JlYXRlKCkpCiAgICAgICAgICwgbV9za2lwQ291
bnQoc2tpcENvdW50KQogICAgICAgICAsIG1fcGFnZVNpemUocGFnZVNpemUpCiAgICAgewogICAg
IH0KICAgICBJbmplY3RlZFNjcmlwdCBtX2luamVjdGVkU2NyaXB0OwotICAgIFJlZjxSZXF1ZXN0
RGF0YUNhbGxiYWNrPiBtX3JlcXVlc3RDYWxsYmFjazsKLSAgICBSZWY8SlNPTjo6QXJyYXlPZjxE
YXRhRW50cnk+PiBtX3Jlc3VsdDsKKyAgICBSZWY8SW5kZXhlZERCQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyOjpSZXF1ZXN0RGF0YUNhbGxiYWNrPiBtX3JlcXVlc3RDYWxsYmFjazsKKyAgICBSZWY8
SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6SW5kZXhlZERCOjpEYXRhRW50cnk+PiBtX3Jlc3VsdDsK
ICAgICBpbnQgbV9za2lwQ291bnQ7CiAgICAgdW5zaWduZWQgbV9wYWdlU2l6ZTsKIH07CiAKIGNs
YXNzIERhdGFMb2FkZXIgZmluYWwgOiBwdWJsaWMgRXhlY3V0YWJsZVdpdGhEYXRhYmFzZSB7CiBw
dWJsaWM6Ci0gICAgc3RhdGljIFJlZjxEYXRhTG9hZGVyPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogY29udGV4dCwgUmVmPFJlcXVlc3REYXRhQ2FsbGJhY2s+JiYgcmVxdWVzdENhbGxi
YWNrLCBjb25zdCBJbmplY3RlZFNjcmlwdCYgaW5qZWN0ZWRTY3JpcHQsIGNvbnN0IFN0cmluZyYg
b2JqZWN0U3RvcmVOYW1lLCBjb25zdCBTdHJpbmcmIGluZGV4TmFtZSwgUmVmUHRyPElEQktleVJh
bmdlPiYmIGlkYktleVJhbmdlLCBpbnQgc2tpcENvdW50LCB1bnNpZ25lZCBwYWdlU2l6ZSkKKyAg
ICBzdGF0aWMgUmVmPERhdGFMb2FkZXI+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBj
b250ZXh0LCBSZWY8SW5kZXhlZERCQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpSZXF1ZXN0RGF0
YUNhbGxiYWNrPiYmIHJlcXVlc3RDYWxsYmFjaywgY29uc3QgSW5qZWN0ZWRTY3JpcHQmIGluamVj
dGVkU2NyaXB0LCBjb25zdCBTdHJpbmcmIG9iamVjdFN0b3JlTmFtZSwgY29uc3QgU3RyaW5nJiBp
bmRleE5hbWUsIFJlZlB0cjxJREJLZXlSYW5nZT4mJiBpZGJLZXlSYW5nZSwgaW50IHNraXBDb3Vu
dCwgdW5zaWduZWQgcGFnZVNpemUpCiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBEYXRhTG9hZGVyKGNvbnRleHQsIFdURk1vdmUocmVxdWVzdENhbGxiYWNrKSwgaW5qZWN0ZWRT
Y3JpcHQsIG9iamVjdFN0b3JlTmFtZSwgaW5kZXhOYW1lLCBXVEZNb3ZlKGlkYktleVJhbmdlKSwg
c2tpcENvdW50LCBwYWdlU2l6ZSkpOwogICAgIH0KQEAgLTQ5OCw4ICs0OTIsOCBAQCBwdWJsaWM6
CiAgICAgICAgIGlkYlJlcXVlc3QtPmFkZEV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLnN1Y2Nl
c3NFdmVudCwgV1RGTW92ZShvcGVuQ3Vyc29yQ2FsbGJhY2spLCBmYWxzZSk7CiAgICAgfQogCi0g
ICAgUmVxdWVzdENhbGxiYWNrJiByZXF1ZXN0Q2FsbGJhY2soKSBvdmVycmlkZSB7IHJldHVybiBt
X3JlcXVlc3RDYWxsYmFjay5nZXQoKTsgfQotICAgIERhdGFMb2FkZXIoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgUmVmPFJlcXVlc3REYXRhQ2FsbGJhY2s+
JiYgcmVxdWVzdENhbGxiYWNrLCBjb25zdCBJbmplY3RlZFNjcmlwdCYgaW5qZWN0ZWRTY3JpcHQs
IGNvbnN0IFN0cmluZyYgb2JqZWN0U3RvcmVOYW1lLCBjb25zdCBTdHJpbmcmIGluZGV4TmFtZSwg
UmVmUHRyPElEQktleVJhbmdlPiBpZGJLZXlSYW5nZSwgaW50IHNraXBDb3VudCwgdW5zaWduZWQg
cGFnZVNpemUpCisgICAgQmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZSYgcmVxdWVzdENh
bGxiYWNrKCkgb3ZlcnJpZGUgeyByZXR1cm4gbV9yZXF1ZXN0Q2FsbGJhY2suZ2V0KCk7IH0KKyAg
ICBEYXRhTG9hZGVyKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQsIFJlZjxJbmRleGVkREJCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlJlcXVlc3REYXRhQ2Fs
bGJhY2s+JiYgcmVxdWVzdENhbGxiYWNrLCBjb25zdCBJbmplY3RlZFNjcmlwdCYgaW5qZWN0ZWRT
Y3JpcHQsIGNvbnN0IFN0cmluZyYgb2JqZWN0U3RvcmVOYW1lLCBjb25zdCBTdHJpbmcmIGluZGV4
TmFtZSwgUmVmUHRyPElEQktleVJhbmdlPiBpZGJLZXlSYW5nZSwgaW50IHNraXBDb3VudCwgdW5z
aWduZWQgcGFnZVNpemUpCiAgICAgICAgIDogRXhlY3V0YWJsZVdpdGhEYXRhYmFzZShzY3JpcHRF
eGVjdXRpb25Db250ZXh0KQogICAgICAgICAsIG1fcmVxdWVzdENhbGxiYWNrKFdURk1vdmUocmVx
dWVzdENhbGxiYWNrKSkKICAgICAgICAgLCBtX2luamVjdGVkU2NyaXB0KGluamVjdGVkU2NyaXB0
KQpAQCAtNTA4LDcgKzUwMiw3IEBAIHB1YmxpYzoKICAgICAgICAgLCBtX2lkYktleVJhbmdlKFdU
Rk1vdmUoaWRiS2V5UmFuZ2UpKQogICAgICAgICAsIG1fc2tpcENvdW50KHNraXBDb3VudCkKICAg
ICAgICAgLCBtX3BhZ2VTaXplKHBhZ2VTaXplKSB7IH0KLSAgICBSZWY8UmVxdWVzdERhdGFDYWxs
YmFjaz4gbV9yZXF1ZXN0Q2FsbGJhY2s7CisgICAgUmVmPEluZGV4ZWREQkJhY2tlbmREaXNwYXRj
aGVySGFuZGxlcjo6UmVxdWVzdERhdGFDYWxsYmFjaz4gbV9yZXF1ZXN0Q2FsbGJhY2s7CiAgICAg
SW5qZWN0ZWRTY3JpcHQgbV9pbmplY3RlZFNjcmlwdDsKICAgICBTdHJpbmcgbV9vYmplY3RTdG9y
ZU5hbWU7CiAgICAgU3RyaW5nIG1faW5kZXhOYW1lOwpAQCAtNTM1LDE5ICs1MjksMjAgQEAgdm9p
ZCBJbnNwZWN0b3JJbmRleGVkREJBZ2VudDo6ZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKElu
c3BlY3Rvcjo6RnJvbnRlbmRSb3UKIAogdm9pZCBJbnNwZWN0b3JJbmRleGVkREJBZ2VudDo6d2ls
bERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKQog
ewotICAgIEVycm9yU3RyaW5nIGlnbm9yZWQ7Ci0gICAgZGlzYWJsZShpZ25vcmVkKTsKKyAgICBk
aXNhYmxlKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQ6OmVuYWJsZShFcnJv
clN0cmluZyYpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JJbmRleGVk
REJBZ2VudDo6ZW5hYmxlKCkKIHsKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3Rv
ckluZGV4ZWREQkFnZW50OjpkaXNhYmxlKEVycm9yU3RyaW5nJikKK1Byb3RvY29sOjpFcnJvclN0
cmluZ09yPHZvaWQ+IEluc3BlY3RvckluZGV4ZWREQkFnZW50OjpkaXNhYmxlKCkKIHsKKyAgICBy
ZXR1cm4geyB9OwogfQogCi1zdGF0aWMgRXJyb3JTdHJpbmdPcjxEb2N1bWVudCo+IGRvY3VtZW50
RnJvbUZyYW1lKEZyYW1lKiBmcmFtZSkKK3N0YXRpYyBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxE
b2N1bWVudCo+IGRvY3VtZW50RnJvbUZyYW1lKEZyYW1lKiBmcmFtZSkKIHsKICAgICBEb2N1bWVu
dCogZG9jdW1lbnQgPSBmcmFtZSA/IGZyYW1lLT5kb2N1bWVudCgpIDogbnVsbHB0cjsKICAgICBp
ZiAoIWRvY3VtZW50KQpAQCAtNTU2LDcgKzU1MSw3IEBAIHN0YXRpYyBFcnJvclN0cmluZ09yPERv
Y3VtZW50Kj4gZG9jdW1lbnRGcm9tRnJhbWUoRnJhbWUqIGZyYW1lKQogICAgIHJldHVybiBkb2N1
bWVudDsKIH0KIAotc3RhdGljIEVycm9yU3RyaW5nT3I8SURCRmFjdG9yeSo+IElEQkZhY3RvcnlG
cm9tRG9jdW1lbnQoRG9jdW1lbnQqIGRvY3VtZW50KQorc3RhdGljIFByb3RvY29sOjpFcnJvclN0
cmluZ09yPElEQkZhY3RvcnkqPiBJREJGYWN0b3J5RnJvbURvY3VtZW50KERvY3VtZW50KiBkb2N1
bWVudCkKIHsKICAgICBET01XaW5kb3cqIGRvbVdpbmRvdyA9IGRvY3VtZW50LT5kb21XaW5kb3co
KTsKICAgICBpZiAoIWRvbVdpbmRvdykKQEAgLTU3MSwxMyArNTY2LDEzIEBAIHN0YXRpYyBFcnJv
clN0cmluZ09yPElEQkZhY3RvcnkqPiBJREJGYWN0b3J5RnJvbURvY3VtZW50KERvY3VtZW50KiBk
b2N1bWVudCkKIAogc3RhdGljIGJvb2wgZ2V0RG9jdW1lbnRBbmRJREJGYWN0b3J5RnJvbUZyYW1l
T3JTZW5kRmFpbHVyZShGcmFtZSogZnJhbWUsIERvY3VtZW50KiYgb3V0X2RvY3VtZW50LCBJREJG
YWN0b3J5KiYgb3V0X2lkYkZhY3RvcnksIEJhY2tlbmREaXNwYXRjaGVyOjpDYWxsYmFja0Jhc2Um
IGNhbGxiYWNrKQogewotICAgIEVycm9yU3RyaW5nT3I8RG9jdW1lbnQqPiBkb2N1bWVudCA9IGRv
Y3VtZW50RnJvbUZyYW1lKGZyYW1lKTsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxEb2N1
bWVudCo+IGRvY3VtZW50ID0gZG9jdW1lbnRGcm9tRnJhbWUoZnJhbWUpOwogICAgIGlmICghZG9j
dW1lbnQuaGFzX3ZhbHVlKCkpIHsKICAgICAgICAgY2FsbGJhY2suc2VuZEZhaWx1cmUoZG9jdW1l
bnQuZXJyb3IoKSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBFcnJvclN0
cmluZ09yPElEQkZhY3RvcnkqPiBpZGJGYWN0b3J5ID0gSURCRmFjdG9yeUZyb21Eb2N1bWVudChk
b2N1bWVudC52YWx1ZSgpKTsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxJREJGYWN0b3J5
Kj4gaWRiRmFjdG9yeSA9IElEQkZhY3RvcnlGcm9tRG9jdW1lbnQoZG9jdW1lbnQudmFsdWUoKSk7
CiAgICAgaWYgKCFpZGJGYWN0b3J5Lmhhc192YWx1ZSgpKSB7CiAgICAgICAgIGNhbGxiYWNrLnNl
bmRGYWlsdXJlKGlkYkZhY3RvcnkuZXJyb3IoKSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAg
LTYyMCw3ICs2MTUsNyBAQCB2b2lkIEluc3BlY3RvckluZGV4ZWREQkFnZW50OjpyZXF1ZXN0RGF0
YWJhc2UoY29uc3QgU3RyaW5nJiBzZWN1cml0eU9yaWdpbiwgY29ucwogICAgIGRhdGFiYXNlTG9h
ZGVyLT5zdGFydChpZGJGYWN0b3J5LCAmZG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luKCksIGRhdGFi
YXNlTmFtZSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQ6OnJlcXVlc3REYXRh
KGNvbnN0IFN0cmluZyYgc2VjdXJpdHlPcmlnaW4sIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VOYW1l
LCBjb25zdCBTdHJpbmcmIG9iamVjdFN0b3JlTmFtZSwgY29uc3QgU3RyaW5nJiBpbmRleE5hbWUs
IGludCBza2lwQ291bnQsIGludCBwYWdlU2l6ZSwgY29uc3QgSlNPTjo6T2JqZWN0KiBrZXlSYW5n
ZSwgUmVmPFJlcXVlc3REYXRhQ2FsbGJhY2s+JiYgY2FsbGJhY2spCit2b2lkIEluc3BlY3Rvcklu
ZGV4ZWREQkFnZW50OjpyZXF1ZXN0RGF0YShjb25zdCBTdHJpbmcmIHNlY3VyaXR5T3JpZ2luLCBj
b25zdCBTdHJpbmcmIGRhdGFiYXNlTmFtZSwgY29uc3QgU3RyaW5nJiBvYmplY3RTdG9yZU5hbWUs
IGNvbnN0IFN0cmluZyYgaW5kZXhOYW1lLCBpbnQgc2tpcENvdW50LCBpbnQgcGFnZVNpemUsIFJl
ZlB0cjxKU09OOjpPYmplY3Q+JiYga2V5UmFuZ2UsIFJlZjxSZXF1ZXN0RGF0YUNhbGxiYWNrPiYm
IGNhbGxiYWNrKQogewogICAgIGF1dG8qIGZyYW1lID0gSW5zcGVjdG9yUGFnZUFnZW50OjpmaW5k
RnJhbWVXaXRoU2VjdXJpdHlPcmlnaW4obV9pbnNwZWN0ZWRQYWdlLCBzZWN1cml0eU9yaWdpbik7
CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50OwpAQCAtNjI5LDcgKzYyNCw3IEBAIHZvaWQgSW5zcGVj
dG9ySW5kZXhlZERCQWdlbnQ6OnJlcXVlc3REYXRhKGNvbnN0IFN0cmluZyYgc2VjdXJpdHlPcmln
aW4sIGNvbnN0IFN0CiAgICAgICAgIHJldHVybjsKIAogICAgIEluamVjdGVkU2NyaXB0IGluamVj
dGVkU2NyaXB0ID0gbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIuaW5qZWN0ZWRTY3JpcHRGb3IobWFp
bldvcmxkRXhlY1N0YXRlKGZyYW1lKSk7Ci0gICAgUmVmUHRyPElEQktleVJhbmdlPiBpZGJLZXlS
YW5nZSA9IGtleVJhbmdlID8gaWRiS2V5UmFuZ2VGcm9tS2V5UmFuZ2Uoa2V5UmFuZ2UpIDogbnVs
bHB0cjsKKyAgICBSZWZQdHI8SURCS2V5UmFuZ2U+IGlkYktleVJhbmdlID0ga2V5UmFuZ2UgPyBp
ZGJLZXlSYW5nZUZyb21LZXlSYW5nZSgqa2V5UmFuZ2UpIDogbnVsbHB0cjsKICAgICBpZiAoa2V5
UmFuZ2UgJiYgIWlkYktleVJhbmdlKSB7CiAgICAgICAgIGNhbGxiYWNrLT5zZW5kRmFpbHVyZSgi
Q291bGQgbm90IHBhcnNlIGtleSByYW5nZS4iX3MpOwogICAgICAgICByZXR1cm47CkBAIC02NDQs
NyArNjM5LDcgQEAgbmFtZXNwYWNlIHsKIGNsYXNzIENsZWFyT2JqZWN0U3RvcmVMaXN0ZW5lciBm
aW5hbCA6IHB1YmxpYyBFdmVudExpc3RlbmVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShD
bGVhck9iamVjdFN0b3JlTGlzdGVuZXIpOwogcHVibGljOgotICAgIHN0YXRpYyBSZWY8Q2xlYXJP
YmplY3RTdG9yZUxpc3RlbmVyPiBjcmVhdGUoUmVmPENsZWFyT2JqZWN0U3RvcmVDYWxsYmFjaz4g
cmVxdWVzdENhbGxiYWNrKQorICAgIHN0YXRpYyBSZWY8Q2xlYXJPYmplY3RTdG9yZUxpc3RlbmVy
PiBjcmVhdGUoUmVmPEluZGV4ZWREQkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6Q2xlYXJPYmpl
Y3RTdG9yZUNhbGxiYWNrPiByZXF1ZXN0Q2FsbGJhY2spCiAgICAgewogICAgICAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBDbGVhck9iamVjdFN0b3JlTGlzdGVuZXIoV1RGTW92ZShyZXF1ZXN0Q2Fs
bGJhY2spKSk7CiAgICAgfQpAQCAtNjY4LDIzICs2NjMsMjMgQEAgcHVibGljOgogICAgICAgICBt
X3JlcXVlc3RDYWxsYmFjay0+c2VuZFN1Y2Nlc3MoKTsKICAgICB9CiBwcml2YXRlOgotICAgIENs
ZWFyT2JqZWN0U3RvcmVMaXN0ZW5lcihSZWY8Q2xlYXJPYmplY3RTdG9yZUNhbGxiYWNrPiYmIHJl
cXVlc3RDYWxsYmFjaykKKyAgICBDbGVhck9iamVjdFN0b3JlTGlzdGVuZXIoUmVmPEluZGV4ZWRE
QkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6Q2xlYXJPYmplY3RTdG9yZUNhbGxiYWNrPiYmIHJl
cXVlc3RDYWxsYmFjaykKICAgICAgICAgOiBFdmVudExpc3RlbmVyKEV2ZW50TGlzdGVuZXI6OkNQ
UEV2ZW50TGlzdGVuZXJUeXBlKQogICAgICAgICAsIG1fcmVxdWVzdENhbGxiYWNrKFdURk1vdmUo
cmVxdWVzdENhbGxiYWNrKSkKICAgICB7CiAgICAgfQogCi0gICAgUmVmPENsZWFyT2JqZWN0U3Rv
cmVDYWxsYmFjaz4gbV9yZXF1ZXN0Q2FsbGJhY2s7CisgICAgUmVmPEluZGV4ZWREQkJhY2tlbmRE
aXNwYXRjaGVySGFuZGxlcjo6Q2xlYXJPYmplY3RTdG9yZUNhbGxiYWNrPiBtX3JlcXVlc3RDYWxs
YmFjazsKIH07CiAKIGNsYXNzIENsZWFyT2JqZWN0U3RvcmUgZmluYWwgOiBwdWJsaWMgRXhlY3V0
YWJsZVdpdGhEYXRhYmFzZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxDbGVhck9iamVjdFN0
b3JlPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5n
JiBvYmplY3RTdG9yZU5hbWUsIFJlZjxDbGVhck9iamVjdFN0b3JlQ2FsbGJhY2s+JiYgcmVxdWVz
dENhbGxiYWNrKQorICAgIHN0YXRpYyBSZWY8Q2xlYXJPYmplY3RTdG9yZT4gY3JlYXRlKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgb2JqZWN0U3RvcmVOYW1l
LCBSZWY8SW5kZXhlZERCQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpDbGVhck9iamVjdFN0b3Jl
Q2FsbGJhY2s+JiYgcmVxdWVzdENhbGxiYWNrKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgQ2xlYXJPYmplY3RTdG9yZShjb250ZXh0LCBvYmplY3RTdG9yZU5hbWUsIFdURk1v
dmUocmVxdWVzdENhbGxiYWNrKSkpOwogICAgIH0KIAotICAgIENsZWFyT2JqZWN0U3RvcmUoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiBvYmplY3RTdG9yZU5h
bWUsIFJlZjxDbGVhck9iamVjdFN0b3JlQ2FsbGJhY2s+JiYgcmVxdWVzdENhbGxiYWNrKQorICAg
IENsZWFyT2JqZWN0U3RvcmUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3Qg
U3RyaW5nJiBvYmplY3RTdG9yZU5hbWUsIFJlZjxJbmRleGVkREJCYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXI6OkNsZWFyT2JqZWN0U3RvcmVDYWxsYmFjaz4mJiByZXF1ZXN0Q2FsbGJhY2spCiAgICAg
ICAgIDogRXhlY3V0YWJsZVdpdGhEYXRhYmFzZShjb250ZXh0KQogICAgICAgICAsIG1fb2JqZWN0
U3RvcmVOYW1lKG9iamVjdFN0b3JlTmFtZSkKICAgICAgICAgLCBtX3JlcXVlc3RDYWxsYmFjayhX
VEZNb3ZlKHJlcXVlc3RDYWxsYmFjaykpCkBAIC03MjMsMTAgKzcxOCwxMCBAQCBwdWJsaWM6CiAg
ICAgICAgIGlkYlRyYW5zYWN0aW9uLT5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZXMoKS5jb21w
bGV0ZUV2ZW50LCBDbGVhck9iamVjdFN0b3JlTGlzdGVuZXI6OmNyZWF0ZShtX3JlcXVlc3RDYWxs
YmFjay5jb3B5UmVmKCkpLCBmYWxzZSk7CiAgICAgfQogCi0gICAgUmVxdWVzdENhbGxiYWNrJiBy
ZXF1ZXN0Q2FsbGJhY2soKSBvdmVycmlkZSB7IHJldHVybiBtX3JlcXVlc3RDYWxsYmFjay5nZXQo
KTsgfQorICAgIEJhY2tlbmREaXNwYXRjaGVyOjpDYWxsYmFja0Jhc2UmIHJlcXVlc3RDYWxsYmFj
aygpIG92ZXJyaWRlIHsgcmV0dXJuIG1fcmVxdWVzdENhbGxiYWNrLmdldCgpOyB9CiBwcml2YXRl
OgogICAgIGNvbnN0IFN0cmluZyBtX29iamVjdFN0b3JlTmFtZTsKLSAgICBSZWY8Q2xlYXJPYmpl
Y3RTdG9yZUNhbGxiYWNrPiBtX3JlcXVlc3RDYWxsYmFjazsKKyAgICBSZWY8SW5kZXhlZERCQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyOjpDbGVhck9iamVjdFN0b3JlQ2FsbGJhY2s+IG1fcmVxdWVz
dENhbGxiYWNrOwogfTsKIAogfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckluZGV4ZWREQkFnZW50Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckluZGV4ZWREQkFnZW50
LmgKaW5kZXggZGIyOTdiZDljZGE4ZGE2YzA0N2FiODJmZjM1MGEyZjRmNTc0OGZlOS4uZTU0NGY5
YzZmMjUzOWM0MTE3MmQ1YzY5MmU0ZDI4MGU1NDMwMjM5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JJbmRleGVkREJBZ2VudC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQuaApA
QCAtNDUsMjYgKzQ1LDI0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgUGFnZTsKIAot
dHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7Ci0KIGNsYXNzIEluc3BlY3RvckluZGV4ZWREQkFn
ZW50IGZpbmFsIDogcHVibGljIEluc3BlY3RvckFnZW50QmFzZSwgcHVibGljIEluc3BlY3Rvcjo6
SW5kZXhlZERCQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShJbnNwZWN0b3JJbmRleGVkREJBZ2VudCk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CiBwdWJsaWM6CiAgICAgSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQoUGFnZUFnZW50Q29udGV4
dCYpOwotICAgIH5JbnNwZWN0b3JJbmRleGVkREJBZ2VudCgpIG92ZXJyaWRlOworICAgIH5JbnNw
ZWN0b3JJbmRleGVkREJBZ2VudCgpOwogCiAgICAgLy8gSW5zcGVjdG9yQWdlbnRCYXNlCi0gICAg
dm9pZCBkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9udGVuZFJvdXRl
ciosIEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXIqKSBvdmVycmlkZTsKLSAgICB2b2lkIHdp
bGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlzY29ubmVjdFJlYXNvbikg
b3ZlcnJpZGU7CisgICAgdm9pZCBkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9y
OjpGcm9udGVuZFJvdXRlciosIEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXIqKTsKKyAgICB2
b2lkIHdpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlzY29ubmVjdFJl
YXNvbik7CiAKICAgICAvLyBJbmRleGVkREJCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIKLSAgICB2
b2lkIGVuYWJsZShFcnJvclN0cmluZyYpIG92ZXJyaWRlOwotICAgIHZvaWQgZGlzYWJsZShFcnJv
clN0cmluZyYpIG92ZXJyaWRlOwotICAgIHZvaWQgcmVxdWVzdERhdGFiYXNlTmFtZXMoY29uc3Qg
U3RyaW5nJiBzZWN1cml0eU9yaWdpbiwgUmVmPFJlcXVlc3REYXRhYmFzZU5hbWVzQ2FsbGJhY2s+
JiYpIG92ZXJyaWRlOwotICAgIHZvaWQgcmVxdWVzdERhdGFiYXNlKGNvbnN0IFN0cmluZyYgc2Vj
dXJpdHlPcmlnaW4sIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VOYW1lLCBSZWY8UmVxdWVzdERhdGFi
YXNlQ2FsbGJhY2s+JiYpIG92ZXJyaWRlOwotICAgIHZvaWQgcmVxdWVzdERhdGEoY29uc3QgU3Ry
aW5nJiBzZWN1cml0eU9yaWdpbiwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZU5hbWUsIGNvbnN0IFN0
cmluZyYgb2JqZWN0U3RvcmVOYW1lLCBjb25zdCBTdHJpbmcmIGluZGV4TmFtZSwgaW50IHNraXBD
b3VudCwgaW50IHBhZ2VTaXplLCBjb25zdCBKU09OOjpPYmplY3QqIGtleVJhbmdlLCBSZWY8UmVx
dWVzdERhdGFDYWxsYmFjaz4mJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjbGVhck9iamVjdFN0b3Jl
KGNvbnN0IFN0cmluZyYgc2VjdXJpdHlPcmlnaW4sIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VOYW1l
LCBjb25zdCBTdHJpbmcmIG9iamVjdFN0b3JlTmFtZSwgUmVmPENsZWFyT2JqZWN0U3RvcmVDYWxs
YmFjaz4mJikgb3ZlcnJpZGU7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdP
cjx2b2lkPiBlbmFibGUoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09y
PHZvaWQ+IGRpc2FibGUoKTsKKyAgICB2b2lkIHJlcXVlc3REYXRhYmFzZU5hbWVzKGNvbnN0IFN0
cmluZyYgc2VjdXJpdHlPcmlnaW4sIFJlZjxSZXF1ZXN0RGF0YWJhc2VOYW1lc0NhbGxiYWNrPiYm
KTsKKyAgICB2b2lkIHJlcXVlc3REYXRhYmFzZShjb25zdCBTdHJpbmcmIHNlY3VyaXR5T3JpZ2lu
LCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlTmFtZSwgUmVmPFJlcXVlc3REYXRhYmFzZUNhbGxiYWNr
PiYmKTsKKyAgICB2b2lkIHJlcXVlc3REYXRhKGNvbnN0IFN0cmluZyYgc2VjdXJpdHlPcmlnaW4s
IGNvbnN0IFN0cmluZyYgZGF0YWJhc2VOYW1lLCBjb25zdCBTdHJpbmcmIG9iamVjdFN0b3JlTmFt
ZSwgY29uc3QgU3RyaW5nJiBpbmRleE5hbWUsIGludCBza2lwQ291bnQsIGludCBwYWdlU2l6ZSwg
UmVmUHRyPEpTT046Ok9iamVjdD4mJiBrZXlSYW5nZSwgUmVmPFJlcXVlc3REYXRhQ2FsbGJhY2s+
JiYpOworICAgIHZvaWQgY2xlYXJPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIHNlY3VyaXR5T3Jp
Z2luLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlTmFtZSwgY29uc3QgU3RyaW5nJiBvYmplY3RTdG9y
ZU5hbWUsIFJlZjxDbGVhck9iamVjdFN0b3JlQ2FsbGJhY2s+JiYpOwogCiBwcml2YXRlOgogICAg
IEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHRNYW5hZ2VyJiBtX2luamVjdGVkU2NyaXB0TWFuYWdl
cjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9y
TGF5ZXJUcmVlQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNw
ZWN0b3JMYXllclRyZWVBZ2VudC5jcHAKaW5kZXggYmI5OTRiZjk5ZmMyNTE2NjlmOGQ3M2E0ZGYw
YjU1ZWMwZjU2YzYxMy4uNTJkM2ZkNzBmNmEyOTlkOWFmMDQ2OTI0ZjRiYWUzZGQ1ZDYwYjExYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JMYXll
clRyZWVBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNw
ZWN0b3JMYXllclRyZWVBZ2VudC5jcHAKQEAgLTYxLDggKzYxLDcgQEAgdm9pZCBJbnNwZWN0b3JM
YXllclRyZWVBZ2VudDo6ZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJv
bnRlbmRSb3UKIAogdm9pZCBJbnNwZWN0b3JMYXllclRyZWVBZ2VudDo6d2lsbERlc3Ryb3lGcm9u
dGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKQogewotICAgIEVycm9y
U3RyaW5nIGlnbm9yZWQ7Ci0gICAgZGlzYWJsZShpZ25vcmVkKTsKKyAgICBkaXNhYmxlKCk7CiB9
CiAKIHZvaWQgSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OnJlc2V0KCkKQEAgLTc0LDE2ICs3Mywy
MCBAQCB2b2lkIEluc3BlY3RvckxheWVyVHJlZUFnZW50OjpyZXNldCgpCiAgICAgbV9zdXBwcmVz
c0xheWVyQ2hhbmdlRXZlbnRzID0gZmFsc2U7CiB9CiAKLXZvaWQgSW5zcGVjdG9yTGF5ZXJUcmVl
QWdlbnQ6OmVuYWJsZShFcnJvclN0cmluZyYpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lk
PiBJbnNwZWN0b3JMYXllclRyZWVBZ2VudDo6ZW5hYmxlKCkKIHsKICAgICBtX2luc3RydW1lbnRp
bmdBZ2VudHMuc2V0RW5hYmxlZExheWVyVHJlZUFnZW50KHRoaXMpOworCisgICAgcmV0dXJuIHsg
fTsKIH0KIAotdm9pZCBJbnNwZWN0b3JMYXllclRyZWVBZ2VudDo6ZGlzYWJsZShFcnJvclN0cmlu
ZyYpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JMYXllclRyZWVBZ2Vu
dDo6ZGlzYWJsZSgpCiB7CiAgICAgbV9pbnN0cnVtZW50aW5nQWdlbnRzLnNldEVuYWJsZWRMYXll
clRyZWVBZ2VudChudWxscHRyKTsKIAogICAgIHJlc2V0KCk7CisKKyAgICByZXR1cm4geyB9Owog
fQogCiB2b2lkIEluc3BlY3RvckxheWVyVHJlZUFnZW50OjpsYXllclRyZWVEaWRDaGFuZ2UoKQpA
QCAtMTA2LDUxICsxMDksNDkgQEAgdm9pZCBJbnNwZWN0b3JMYXllclRyZWVBZ2VudDo6cHNldWRv
RWxlbWVudERlc3Ryb3llZChQc2V1ZG9FbGVtZW50JiBwc2V1ZG9FbGVtZW4KICAgICB1bmJpbmRQ
c2V1ZG9FbGVtZW50KCZwc2V1ZG9FbGVtZW50KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JMYXllclRy
ZWVBZ2VudDo6bGF5ZXJzRm9yTm9kZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2Rl
SWQsIFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkxheWVyVHJlZTo6
TGF5ZXI+PiYgbGF5ZXJzKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEpTT046OkFycmF5
T2Y8UHJvdG9jb2w6OkxheWVyVHJlZTo6TGF5ZXI+Pj4gSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6
OmxheWVyc0Zvck5vZGUoUHJvdG9jb2w6OkRPTTo6Tm9kZUlkIG5vZGVJZCkKIHsKLSAgICBsYXll
cnMgPSBKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkxheWVyVHJlZTo6TGF5ZXI+
OjpjcmVhdGUoKTsKLQogICAgIGF1dG8qIG5vZGUgPSBtX2luc3RydW1lbnRpbmdBZ2VudHMucGVy
c2lzdGVudERPTUFnZW50KCktPm5vZGVGb3JJZChub2RlSWQpOwotICAgIGlmICghbm9kZSkgewot
ICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIG5vZGUgZm9yIGdpdmVuIG5vZGVJZCJfczsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybiBt
YWtlVW5leHBlY3RlZCgiTWlzc2luZyBub2RlIGZvciBnaXZlbiBub2RlSWQiX3MpOwogCiAgICAg
YXV0byogcmVuZGVyZXIgPSBub2RlLT5yZW5kZXJlcigpOwotICAgIGlmICghcmVuZGVyZXIpIHsK
LSAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWlzc2luZyByZW5kZXJlciBvZiBub2RlIGZvciBnaXZl
biBub2RlSWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKCFyZW5kZXJlcikK
KyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJNaXNzaW5nIHJlbmRlcmVyIG9mIG5vZGUg
Zm9yIGdpdmVuIG5vZGVJZCJfcyk7CiAKICAgICBpZiAoIWlzPFJlbmRlckVsZW1lbnQ+KCpyZW5k
ZXJlcikpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJN
aXNzaW5nIHJlbmRlcmVyIG9mIGVsZW1lbnQgZm9yIGdpdmVuIG5vZGVJZCJfcyk7CiAKLSAgICBn
YXRoZXJMYXllcnNVc2luZ1JlbmRlck9iamVjdEhpZXJhcmNoeShlcnJvclN0cmluZywgZG93bmNh
c3Q8UmVuZGVyRWxlbWVudD4oKnJlbmRlcmVyKSwgbGF5ZXJzKTsKKyAgICBhdXRvIGxheWVycyA9
IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkxheWVyVHJlZTo6TGF5ZXI+OjpjcmVhdGUoKTsKKwor
ICAgIGdhdGhlckxheWVyc1VzaW5nUmVuZGVyT2JqZWN0SGllcmFyY2h5KGRvd25jYXN0PFJlbmRl
ckVsZW1lbnQ+KCpyZW5kZXJlciksIGxheWVycyk7CiAKICAgICBtX3N1cHByZXNzTGF5ZXJDaGFu
Z2VFdmVudHMgPSBmYWxzZTsKKworICAgIHJldHVybiBXVEZNb3ZlKGxheWVycyk7CiB9CiAKLXZv
aWQgSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OmdhdGhlckxheWVyc1VzaW5nUmVuZGVyT2JqZWN0
SGllcmFyY2h5KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgUmVuZGVyRWxlbWVudCYgcmVuZGVy
ZXIsIFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkxheWVyVHJlZTo6
TGF5ZXI+PiYgbGF5ZXJzKQordm9pZCBJbnNwZWN0b3JMYXllclRyZWVBZ2VudDo6Z2F0aGVyTGF5
ZXJzVXNpbmdSZW5kZXJPYmplY3RIaWVyYXJjaHkoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIEpT
T046OkFycmF5T2Y8UHJvdG9jb2w6OkxheWVyVHJlZTo6TGF5ZXI+JiBsYXllcnMpCiB7CiAgICAg
aWYgKHJlbmRlcmVyLmhhc0xheWVyKCkpIHsKLSAgICAgICAgZ2F0aGVyTGF5ZXJzVXNpbmdSZW5k
ZXJMYXllckhpZXJhcmNoeShlcnJvclN0cmluZywgZG93bmNhc3Q8UmVuZGVyTGF5ZXJNb2RlbE9i
amVjdD4ocmVuZGVyZXIpLmxheWVyKCksIGxheWVycyk7CisgICAgICAgIGdhdGhlckxheWVyc1Vz
aW5nUmVuZGVyTGF5ZXJIaWVyYXJjaHkoZG93bmNhc3Q8UmVuZGVyTGF5ZXJNb2RlbE9iamVjdD4o
cmVuZGVyZXIpLmxheWVyKCksIGxheWVycyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAg
ICBmb3IgKGF1dG8mIGNoaWxkIDogY2hpbGRyZW5PZlR5cGU8UmVuZGVyRWxlbWVudD4ocmVuZGVy
ZXIpKQotICAgICAgICBnYXRoZXJMYXllcnNVc2luZ1JlbmRlck9iamVjdEhpZXJhcmNoeShlcnJv
clN0cmluZywgY2hpbGQsIGxheWVycyk7CisgICAgICAgIGdhdGhlckxheWVyc1VzaW5nUmVuZGVy
T2JqZWN0SGllcmFyY2h5KGNoaWxkLCBsYXllcnMpOwogfQogCi12b2lkIEluc3BlY3RvckxheWVy
VHJlZUFnZW50OjpnYXRoZXJMYXllcnNVc2luZ1JlbmRlckxheWVySGllcmFyY2h5KEVycm9yU3Ry
aW5nJiBlcnJvclN0cmluZywgUmVuZGVyTGF5ZXIqIHJlbmRlckxheWVyLCBSZWZQdHI8SlNPTjo6
QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpMYXllclRyZWU6OkxheWVyPj4mIGxheWVycykK
K3ZvaWQgSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OmdhdGhlckxheWVyc1VzaW5nUmVuZGVyTGF5
ZXJIaWVyYXJjaHkoUmVuZGVyTGF5ZXIqIHJlbmRlckxheWVyLCBKU09OOjpBcnJheU9mPFByb3Rv
Y29sOjpMYXllclRyZWU6OkxheWVyPiYgbGF5ZXJzKQogewogICAgIGlmIChyZW5kZXJMYXllci0+
aXNDb21wb3NpdGVkKCkpCi0gICAgICAgIGxheWVycy0+YWRkSXRlbShidWlsZE9iamVjdEZvckxh
eWVyKGVycm9yU3RyaW5nLCByZW5kZXJMYXllcikpOworICAgICAgICBsYXllcnMuYWRkSXRlbShi
dWlsZE9iamVjdEZvckxheWVyKHJlbmRlckxheWVyKSk7CiAKICAgICBmb3IgKHJlbmRlckxheWVy
ID0gcmVuZGVyTGF5ZXItPmZpcnN0Q2hpbGQoKTsgcmVuZGVyTGF5ZXI7IHJlbmRlckxheWVyID0g
cmVuZGVyTGF5ZXItPm5leHRTaWJsaW5nKCkpCi0gICAgICAgIGdhdGhlckxheWVyc1VzaW5nUmVu
ZGVyTGF5ZXJIaWVyYXJjaHkoZXJyb3JTdHJpbmcsIHJlbmRlckxheWVyLCBsYXllcnMpOworICAg
ICAgICBnYXRoZXJMYXllcnNVc2luZ1JlbmRlckxheWVySGllcmFyY2h5KHJlbmRlckxheWVyLCBs
YXllcnMpOwogfQogCi1SZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6TGF5ZXJUcmVlOjpMYXllcj4g
SW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yTGF5ZXIoRXJyb3JTdHJpbmcm
IGVycm9yU3RyaW5nLCBSZW5kZXJMYXllciogcmVuZGVyTGF5ZXIpCitSZWY8UHJvdG9jb2w6Okxh
eWVyVHJlZTo6TGF5ZXI+IEluc3BlY3RvckxheWVyVHJlZUFnZW50OjpidWlsZE9iamVjdEZvckxh
eWVyKFJlbmRlckxheWVyKiByZW5kZXJMYXllcikKIHsKICAgICBSZW5kZXJPYmplY3QqIHJlbmRl
cmVyID0gJnJlbmRlckxheWVyLT5yZW5kZXJlcigpOwogICAgIFJlbmRlckxheWVyQmFja2luZyog
YmFja2luZyA9IHJlbmRlckxheWVyLT5iYWNraW5nKCk7CkBAIC0xNzAsOSArMTcxLDkgQEAgUmVm
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkxheWVyVHJlZTo6TGF5ZXI+IEluc3BlY3RvckxheWVyVHJl
ZUFnZW50OjpidWlsZE9iamVjdEYKICAgICAgICAgbm9kZSA9IHJlbmRlcmVyLT5wYXJlbnQoKS0+
ZWxlbWVudCgpOwogCiAgICAgLy8gQmFzaWMgc2V0IG9mIHByb3BlcnRpZXMuCi0gICAgYXV0byBs
YXllck9iamVjdCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkxheWVyVHJlZTo6TGF5ZXI6OmNyZWF0
ZSgpCisgICAgYXV0byBsYXllck9iamVjdCA9IFByb3RvY29sOjpMYXllclRyZWU6OkxheWVyOjpj
cmVhdGUoKQogICAgICAgICAuc2V0TGF5ZXJJZChiaW5kKHJlbmRlckxheWVyKSkKLSAgICAgICAg
LnNldE5vZGVJZChpZEZvck5vZGUoZXJyb3JTdHJpbmcsIG5vZGUpKQorICAgICAgICAuc2V0Tm9k
ZUlkKGlkRm9yTm9kZShub2RlKSkKICAgICAgICAgLnNldEJvdW5kcyhidWlsZE9iamVjdEZvcklu
dFJlY3QocmVuZGVyZXItPmFic29sdXRlQm91bmRpbmdCb3hSZWN0KCkpKQogICAgICAgICAuc2V0
TWVtb3J5KGJhY2tpbmctPmJhY2tpbmdTdG9yZU1lbW9yeUVzdGltYXRlKCkpCiAgICAgICAgIC5z
ZXRDb21wb3NpdGVkQm91bmRzKGJ1aWxkT2JqZWN0Rm9ySW50UmVjdChlbmNsb3NpbmdJbnRSZWN0
KGJhY2tpbmctPmNvbXBvc2l0ZWRCb3VuZHMoKSkpKQpAQCAtMjA5LDI1ICsyMTAsMjUgQEAgUmVm
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkxheWVyVHJlZTo6TGF5ZXI+IEluc3BlY3RvckxheWVyVHJl
ZUFnZW50OjpidWlsZE9iamVjdEYKICAgICByZXR1cm4gbGF5ZXJPYmplY3Q7CiB9CiAKLWludCBJ
bnNwZWN0b3JMYXllclRyZWVBZ2VudDo6aWRGb3JOb2RlKEVycm9yU3RyaW5nJiBlcnJvclN0cmlu
ZywgTm9kZSogbm9kZSkKK1Byb3RvY29sOjpET006Ok5vZGVJZCBJbnNwZWN0b3JMYXllclRyZWVB
Z2VudDo6aWRGb3JOb2RlKE5vZGUqIG5vZGUpCiB7CiAgICAgaWYgKCFub2RlKQogICAgICAgICBy
ZXR1cm4gMDsKIAogICAgIEluc3BlY3RvckRPTUFnZW50KiBkb21BZ2VudCA9IG1faW5zdHJ1bWVu
dGluZ0FnZW50cy5wZXJzaXN0ZW50RE9NQWdlbnQoKTsKICAgICAKLSAgICBpbnQgbm9kZUlkID0g
ZG9tQWdlbnQtPmJvdW5kTm9kZUlkKG5vZGUpOworICAgIGF1dG8gbm9kZUlkID0gZG9tQWdlbnQt
PmJvdW5kTm9kZUlkKG5vZGUpOwogICAgIGlmICghbm9kZUlkKSB7CiAgICAgICAgIC8vIEZJWE1F
OiA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMjEzNDk5PiBXZWIgSW5zcGVjdG9yOiBhbGxvdyBET00g
bm9kZXMgdG8gYmUgaW5zdHJ1bWVudGVkIGF0IGFueSBwb2ludCwgcmVnYXJkbGVzcyBvZiB3aGV0
aGVyIHRoZSBtYWluIGRvY3VtZW50IGhhcyBhbHNvIGJlZW4gaW5zdHJ1bWVudGVkCi0gICAgICAg
IG5vZGVJZCA9IGRvbUFnZW50LT5wdXNoTm9kZVRvRnJvbnRlbmQoZXJyb3JTdHJpbmcsIGRvbUFn
ZW50LT5ib3VuZE5vZGVJZCgmbm9kZS0+ZG9jdW1lbnQoKSksIG5vZGUpOworICAgICAgICBub2Rl
SWQgPSBkb21BZ2VudC0+cHVzaE5vZGVUb0Zyb250ZW5kKG5vZGUpOwogICAgIH0KIAogICAgIHJl
dHVybiBub2RlSWQ7CiB9CiAKLVJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpMYXllclRyZWU6Oklu
dFJlY3Q+IEluc3BlY3RvckxheWVyVHJlZUFnZW50OjpidWlsZE9iamVjdEZvckludFJlY3QoY29u
c3QgSW50UmVjdCYgcmVjdCkKK1JlZjxQcm90b2NvbDo6TGF5ZXJUcmVlOjpJbnRSZWN0PiBJbnNw
ZWN0b3JMYXllclRyZWVBZ2VudDo6YnVpbGRPYmplY3RGb3JJbnRSZWN0KGNvbnN0IEludFJlY3Qm
IHJlY3QpCiB7Ci0gICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkxheWVyVHJlZTo6SW50
UmVjdDo6Y3JlYXRlKCkKKyAgICByZXR1cm4gUHJvdG9jb2w6OkxheWVyVHJlZTo6SW50UmVjdDo6
Y3JlYXRlKCkKICAgICAgICAgLnNldFgocmVjdC54KCkpCiAgICAgICAgIC5zZXRZKHJlY3QueSgp
KQogICAgICAgICAuc2V0V2lkdGgocmVjdC53aWR0aCgpKQpAQCAtMjM1LDE3ICsyMzYsMTUgQEAg
UmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkxheWVyVHJlZTo6SW50UmVjdD4gSW5zcGVjdG9yTGF5
ZXJUcmVlQWdlbnQ6OmJ1aWxkT2JqZWMKICAgICAgICAgLnJlbGVhc2UoKTsKIH0KIAotdm9pZCBJ
bnNwZWN0b3JMYXllclRyZWVBZ2VudDo6cmVhc29uc0ZvckNvbXBvc2l0aW5nTGF5ZXIoRXJyb3JT
dHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGxheWVySWQsIFJlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpMYXllclRyZWU6OkNvbXBvc2l0aW5nUmVhc29ucz4mIGNvbXBvc2l0aW5n
UmVhc29uc1Jlc3VsdCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxQcm90b2NvbDo6TGF5
ZXJUcmVlOjpDb21wb3NpdGluZ1JlYXNvbnM+PiBJbnNwZWN0b3JMYXllclRyZWVBZ2VudDo6cmVh
c29uc0ZvckNvbXBvc2l0aW5nTGF5ZXIoY29uc3QgUHJvdG9jb2w6OkxheWVyVHJlZTo6TGF5ZXJJ
ZCYgbGF5ZXJJZCkKIHsKICAgICBjb25zdCBSZW5kZXJMYXllciogcmVuZGVyTGF5ZXIgPSBtX2lk
VG9MYXllci5nZXQobGF5ZXJJZCk7CiAKLSAgICBpZiAoIXJlbmRlckxheWVyKSB7Ci0gICAgICAg
IGVycm9yU3RyaW5nID0gIk1pc3NpbmcgcmVuZGVyIGxheWVyIGZvciBnaXZlbiBsYXllcklkIl9z
OwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghcmVuZGVyTGF5ZXIpCisgICAgICAg
IHJldHVybiBtYWtlVW5leHBlY3RlZCgiTWlzc2luZyByZW5kZXIgbGF5ZXIgZm9yIGdpdmVuIGxh
eWVySWQiX3MpOwogCiAgICAgT3B0aW9uU2V0PENvbXBvc2l0aW5nUmVhc29uPiByZWFzb25zID0g
cmVuZGVyTGF5ZXItPmNvbXBvc2l0b3IoKS5yZWFzb25zRm9yQ29tcG9zaXRpbmcoKnJlbmRlckxh
eWVyKTsKLSAgICBhdXRvIGNvbXBvc2l0aW5nUmVhc29ucyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkxheWVyVHJlZTo6Q29tcG9zaXRpbmdSZWFzb25zOjpjcmVhdGUoKS5yZWxlYXNlKCk7CisgICAg
YXV0byBjb21wb3NpdGluZ1JlYXNvbnMgPSBQcm90b2NvbDo6TGF5ZXJUcmVlOjpDb21wb3NpdGlu
Z1JlYXNvbnM6OmNyZWF0ZSgpLnJlbGVhc2UoKTsKIAogICAgIGlmIChyZWFzb25zLmNvbnRhaW5z
KENvbXBvc2l0aW5nUmVhc29uOjpUcmFuc2Zvcm0zRCkpCiAgICAgICAgIGNvbXBvc2l0aW5nUmVh
c29ucy0+c2V0VHJhbnNmb3JtM0QodHJ1ZSk7CkBAIC0zMjQsNyArMzIzLDcgQEAgdm9pZCBJbnNw
ZWN0b3JMYXllclRyZWVBZ2VudDo6cmVhc29uc0ZvckNvbXBvc2l0aW5nTGF5ZXIoRXJyb3JTdHJp
bmcmIGVycm9yU3RyaW4KICAgICBpZiAocmVhc29ucy5jb250YWlucyhDb21wb3NpdGluZ1JlYXNv
bjo6Um9vdCkpCiAgICAgICAgIGNvbXBvc2l0aW5nUmVhc29ucy0+c2V0Um9vdCh0cnVlKTsKIAot
ICAgIGNvbXBvc2l0aW5nUmVhc29uc1Jlc3VsdCA9IFdURk1vdmUoY29tcG9zaXRpbmdSZWFzb25z
KTsKKyAgICByZXR1cm4gV1RGTW92ZShjb21wb3NpdGluZ1JlYXNvbnMpOwogfQogCiBTdHJpbmcg
SW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OmJpbmQoY29uc3QgUmVuZGVyTGF5ZXIqIGxheWVyKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JMYXll
clRyZWVBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JM
YXllclRyZWVBZ2VudC5oCmluZGV4IDg3MjM1ODBjNjUzMDEwZTFlZWE2MGQ0MGU5Y2Q5ZDczMjM1
OGQ5ZmIuLjVmMTE1MzFjYzY0NDQyOWY0OGQxZDZkODE1NTFkZDg0YjlmOTRjY2MgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yTGF5ZXJUcmVlQWdl
bnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckxheWVy
VHJlZUFnZW50LmgKQEAgLTQyLDI0ICs0MiwyMiBAQCBjbGFzcyBQc2V1ZG9FbGVtZW50OwogY2xh
c3MgUmVuZGVyRWxlbWVudDsKIGNsYXNzIFJlbmRlckxheWVyOwogCi10eXBlZGVmIFN0cmluZyBF
cnJvclN0cmluZzsKLQogY2xhc3MgSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQgZmluYWwgOiBwdWJs
aWMgSW5zcGVjdG9yQWdlbnRCYXNlLCBwdWJsaWMgSW5zcGVjdG9yOjpMYXllclRyZWVCYWNrZW5k
RGlzcGF0Y2hlckhhbmRsZXIgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEluc3BlY3Rvckxh
eWVyVHJlZUFnZW50KTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAg
ICBJbnNwZWN0b3JMYXllclRyZWVBZ2VudChXZWJBZ2VudENvbnRleHQmKTsKLSAgICB+SW5zcGVj
dG9yTGF5ZXJUcmVlQWdlbnQoKSBvdmVycmlkZTsKKyAgICB+SW5zcGVjdG9yTGF5ZXJUcmVlQWdl
bnQoKTsKIAogICAgIC8vIEluc3BlY3RvckFnZW50QmFzZQotICAgIHZvaWQgZGlkQ3JlYXRlRnJv
bnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRSb3V0ZXIqLCBJbnNwZWN0b3I6OkJh
Y2tlbmREaXNwYXRjaGVyKikgb3ZlcnJpZGU7Ci0gICAgdm9pZCB3aWxsRGVzdHJveUZyb250ZW5k
QW5kQmFja2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24pIG92ZXJyaWRlOworICAgIHZv
aWQgZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRSb3V0ZXIq
LCBJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyKik7CisgICAgdm9pZCB3aWxsRGVzdHJveUZy
b250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24pOwogCiAgICAgLy8g
TGF5ZXJUcmVlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyCi0gICAgdm9pZCBlbmFibGUoRXJyb3JT
dHJpbmcmKSBvdmVycmlkZTsKLSAgICB2b2lkIGRpc2FibGUoRXJyb3JTdHJpbmcmKSBvdmVycmlk
ZTsKLSAgICB2b2lkIGxheWVyc0Zvck5vZGUoRXJyb3JTdHJpbmcmLCBpbnQgbm9kZUlkLCBSZWZQ
dHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpMYXllclRyZWU6OkxheWVyPj4m
KSBvdmVycmlkZTsKLSAgICB2b2lkIHJlYXNvbnNGb3JDb21wb3NpdGluZ0xheWVyKEVycm9yU3Ry
aW5nJiwgY29uc3QgU3RyaW5nJiBsYXllcklkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
TGF5ZXJUcmVlOjpDb21wb3NpdGluZ1JlYXNvbnM+Jikgb3ZlcnJpZGU7CisgICAgSW5zcGVjdG9y
OjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBlbmFibGUoKTsKKyAgICBJbnNwZWN0b3I6
OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGRpc2FibGUoKTsKKyAgICBJbnNwZWN0b3I6
OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkxheWVyVHJlZTo6TGF5ZXI+Pj4gbGF5ZXJzRm9yTm9kZShJbnNwZWN0b3I6OlByb3Rv
Y29sOjpET006Ok5vZGVJZCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdP
cjxSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6TGF5ZXJUcmVlOjpDb21wb3NpdGluZ1JlYXNvbnM+
PiByZWFzb25zRm9yQ29tcG9zaXRpbmdMYXllcihjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpM
YXllclRyZWU6OkxheWVySWQmKTsKIAogICAgIC8vIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbgog
ICAgIHZvaWQgbGF5ZXJUcmVlRGlkQ2hhbmdlKCk7CkBAIC03MiwxMyArNzAsMTMgQEAgcHJpdmF0
ZToKICAgICBTdHJpbmcgYmluZChjb25zdCBSZW5kZXJMYXllciopOwogICAgIHZvaWQgdW5iaW5k
KGNvbnN0IFJlbmRlckxheWVyKik7CiAKLSAgICB2b2lkIGdhdGhlckxheWVyc1VzaW5nUmVuZGVy
T2JqZWN0SGllcmFyY2h5KEVycm9yU3RyaW5nJiwgUmVuZGVyRWxlbWVudCYsIFJlZlB0cjxKU09O
OjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkxheWVyVHJlZTo6TGF5ZXI+PiYpOwotICAg
IHZvaWQgZ2F0aGVyTGF5ZXJzVXNpbmdSZW5kZXJMYXllckhpZXJhcmNoeShFcnJvclN0cmluZyYs
IFJlbmRlckxheWVyKiwgUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6
TGF5ZXJUcmVlOjpMYXllcj4+Jik7CisgICAgdm9pZCBnYXRoZXJMYXllcnNVc2luZ1JlbmRlck9i
amVjdEhpZXJhcmNoeShSZW5kZXJFbGVtZW50JiwgSlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpMYXllclRyZWU6OkxheWVyPiYpOworICAgIHZvaWQgZ2F0aGVyTGF5ZXJzVXNpbmdS
ZW5kZXJMYXllckhpZXJhcmNoeShSZW5kZXJMYXllciosIEpTT046OkFycmF5T2Y8SW5zcGVjdG9y
OjpQcm90b2NvbDo6TGF5ZXJUcmVlOjpMYXllcj4mKTsKIAotICAgIFJlZjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpMYXllclRyZWU6OkxheWVyPiBidWlsZE9iamVjdEZvckxheWVyKEVycm9yU3RyaW5n
JiwgUmVuZGVyTGF5ZXIqKTsKKyAgICBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6TGF5ZXJUcmVl
OjpMYXllcj4gYnVpbGRPYmplY3RGb3JMYXllcihSZW5kZXJMYXllciopOwogICAgIFJlZjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpMYXllclRyZWU6OkludFJlY3Q+IGJ1aWxkT2JqZWN0Rm9ySW50UmVj
dChjb25zdCBJbnRSZWN0Jik7CiAKLSAgICBpbnQgaWRGb3JOb2RlKEVycm9yU3RyaW5nJiwgTm9k
ZSopOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkIGlkRm9yTm9kZShOb2Rl
Kik7CiAKICAgICBTdHJpbmcgYmluZFBzZXVkb0VsZW1lbnQoUHNldWRvRWxlbWVudCopOwogICAg
IHZvaWQgdW5iaW5kUHNldWRvRWxlbWVudChQc2V1ZG9FbGVtZW50Kik7CkBAIC04NiwxMSArODQs
MTEgQEAgcHJpdmF0ZToKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW5zcGVjdG9yOjpMYXllclRyZWVG
cm9udGVuZERpc3BhdGNoZXI+IG1fZnJvbnRlbmREaXNwYXRjaGVyOwogICAgIFJlZlB0cjxJbnNw
ZWN0b3I6OkxheWVyVHJlZUJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOwog
Ci0gICAgSGFzaE1hcDxjb25zdCBSZW5kZXJMYXllciosIFN0cmluZz4gbV9kb2N1bWVudExheWVy
VG9JZE1hcDsKLSAgICBIYXNoTWFwPFN0cmluZywgY29uc3QgUmVuZGVyTGF5ZXIqPiBtX2lkVG9M
YXllcjsKKyAgICBIYXNoTWFwPGNvbnN0IFJlbmRlckxheWVyKiwgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6TGF5ZXJUcmVlOjpMYXllcklkPiBtX2RvY3VtZW50TGF5ZXJUb0lkTWFwOworICAgIEhhc2hN
YXA8SW5zcGVjdG9yOjpQcm90b2NvbDo6TGF5ZXJUcmVlOjpMYXllcklkLCBjb25zdCBSZW5kZXJM
YXllcio+IG1faWRUb0xheWVyOwogCi0gICAgSGFzaE1hcDxQc2V1ZG9FbGVtZW50KiwgU3RyaW5n
PiBtX3BzZXVkb0VsZW1lbnRUb0lkTWFwOwotICAgIEhhc2hNYXA8U3RyaW5nLCBQc2V1ZG9FbGVt
ZW50Kj4gbV9pZFRvUHNldWRvRWxlbWVudDsKKyAgICBIYXNoTWFwPFBzZXVkb0VsZW1lbnQqLCBJ
bnNwZWN0b3I6OlByb3RvY29sOjpMYXllclRyZWU6OlBzZXVkb0VsZW1lbnRJZD4gbV9wc2V1ZG9F
bGVtZW50VG9JZE1hcDsKKyAgICBIYXNoTWFwPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkxheWVyVHJl
ZTo6UHNldWRvRWxlbWVudElkLCBQc2V1ZG9FbGVtZW50Kj4gbV9pZFRvUHNldWRvRWxlbWVudDsK
IAogICAgIGJvb2wgbV9zdXBwcmVzc0xheWVyQ2hhbmdlRXZlbnRzIHsgZmFsc2UgfTsKIH07CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rvck1lbW9y
eUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yTWVt
b3J5QWdlbnQuY3BwCmluZGV4IGQwZThhYTY4ODMzNjU5ZTY0YWZlNTUzNDdjYjU2Zjc3M2ViN2Q3
YTUuLjE0Y2U2NzA5NmEyNDI0NDk0YzU5MjQ2NjA4NmExZDFlMjg3NzQxMDkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yTWVtb3J5QWdlbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yTWVtb3J5QWdl
bnQuY3BwCkBAIC01NCw0MCArNTQsMzkgQEAgdm9pZCBJbnNwZWN0b3JNZW1vcnlBZ2VudDo6ZGlk
Q3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEZyb250ZW5kUm91dGVyKiwgQmFja2VuZEQKIAogdm9p
ZCBJbnNwZWN0b3JNZW1vcnlBZ2VudDo6d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoRGlz
Y29ubmVjdFJlYXNvbikKIHsKLSAgICBFcnJvclN0cmluZyBpZ25vcmVkOwotICAgIGRpc2FibGUo
aWdub3JlZCk7CisgICAgZGlzYWJsZSgpOwogCiAgICAgbV9pbnN0cnVtZW50aW5nQWdlbnRzLnNl
dFBlcnNpc3RlbnRNZW1vcnlBZ2VudChudWxscHRyKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JNZW1v
cnlBZ2VudDo6ZW5hYmxlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZykKK1Byb3RvY29sOjpFcnJv
clN0cmluZ09yPHZvaWQ+IEluc3BlY3Rvck1lbW9yeUFnZW50OjplbmFibGUoKQogewotICAgIGlm
IChtX2luc3RydW1lbnRpbmdBZ2VudHMuZW5hYmxlZE1lbW9yeUFnZW50KCkgPT0gdGhpcykgewot
ICAgICAgICBlcnJvclN0cmluZyA9ICJNZW1vcnkgZG9tYWluIGFscmVhZHkgZW5hYmxlZCJfczsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAobV9pbnN0cnVtZW50aW5nQWdlbnRzLmVu
YWJsZWRNZW1vcnlBZ2VudCgpID09IHRoaXMpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3Rl
ZCgiTWVtb3J5IGRvbWFpbiBhbHJlYWR5IGVuYWJsZWQiX3MpOwogCiAgICAgbV9pbnN0cnVtZW50
aW5nQWdlbnRzLnNldEVuYWJsZWRNZW1vcnlBZ2VudCh0aGlzKTsKKworICAgIHJldHVybiB7IH07
CiB9CiAKLXZvaWQgSW5zcGVjdG9yTWVtb3J5QWdlbnQ6OmRpc2FibGUoRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yTWVtb3J5
QWdlbnQ6OmRpc2FibGUoKQogewotICAgIGlmIChtX2luc3RydW1lbnRpbmdBZ2VudHMuZW5hYmxl
ZE1lbW9yeUFnZW50KCkgIT0gdGhpcykgewotICAgICAgICBlcnJvclN0cmluZyA9ICJNZW1vcnkg
ZG9tYWluIGFscmVhZHkgZGlzYWJsZWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAg
aWYgKG1faW5zdHJ1bWVudGluZ0FnZW50cy5lbmFibGVkTWVtb3J5QWdlbnQoKSAhPSB0aGlzKQor
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk1lbW9yeSBkb21haW4gYWxyZWFkeSBkaXNh
YmxlZCJfcyk7CiAKICAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMuc2V0RW5hYmxlZE1lbW9yeUFn
ZW50KG51bGxwdHIpOwogCiAgICAgbV90cmFja2luZyA9IGZhbHNlOwogCiAgICAgUmVzb3VyY2VV
c2FnZVRocmVhZDo6cmVtb3ZlT2JzZXJ2ZXIodGhpcyk7CisKKyAgICByZXR1cm4geyB9OwogfQog
Ci12b2lkIEluc3BlY3Rvck1lbW9yeUFnZW50OjpzdGFydFRyYWNraW5nKEVycm9yU3RyaW5nJikK
K1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3Rvck1lbW9yeUFnZW50OjpzdGFy
dFRyYWNraW5nKCkKIHsKICAgICBpZiAobV90cmFja2luZykKLSAgICAgICAgcmV0dXJuOworICAg
ICAgICByZXR1cm4geyB9OwogCiAgICAgUmVzb3VyY2VVc2FnZVRocmVhZDo6YWRkT2JzZXJ2ZXIo
dGhpcywgTWVtb3J5LCBbdGhpc10gKGNvbnN0IFJlc291cmNlVXNhZ2VEYXRhJiBkYXRhKSB7CiAg
ICAgICAgIGNvbGxlY3RTYW1wbGUoZGF0YSk7CkBAIC05NiwyNCArOTUsMjggQEAgdm9pZCBJbnNw
ZWN0b3JNZW1vcnlBZ2VudDo6c3RhcnRUcmFja2luZyhFcnJvclN0cmluZyYpCiAgICAgbV90cmFj
a2luZyA9IHRydWU7CiAKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+dHJhY2tpbmdTdGFydCht
X2Vudmlyb25tZW50LmV4ZWN1dGlvblN0b3B3YXRjaCgpLmVsYXBzZWRUaW1lKCkuc2Vjb25kcygp
KTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yTWVtb3J5QWdlbnQ6OnN0
b3BUcmFja2luZyhFcnJvclN0cmluZyYpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJ
bnNwZWN0b3JNZW1vcnlBZ2VudDo6c3RvcFRyYWNraW5nKCkKIHsKICAgICBpZiAoIW1fdHJhY2tp
bmcpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIFJlc291cmNl
VXNhZ2VUaHJlYWQ6OnJlbW92ZU9ic2VydmVyKHRoaXMpOwogCiAgICAgbV90cmFja2luZyA9IGZh
bHNlOwogCiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPnRyYWNraW5nQ29tcGxldGUobV9lbnZp
cm9ubWVudC5leGVjdXRpb25TdG9wd2F0Y2goKS5lbGFwc2VkVGltZSgpLnNlY29uZHMoKSk7CisK
KyAgICByZXR1cm4geyB9OwogfQogCiB2b2lkIEluc3BlY3Rvck1lbW9yeUFnZW50OjpkaWRIYW5k
bGVNZW1vcnlQcmVzc3VyZShDcml0aWNhbCBjcml0aWNhbCkKIHsKICAgICBNZW1vcnlGcm9udGVu
ZERpc3BhdGNoZXI6OlNldmVyaXR5IHNldmVyaXR5ID0gY3JpdGljYWwgPT0gQ3JpdGljYWw6Olll
cyA/IE1lbW9yeUZyb250ZW5kRGlzcGF0Y2hlcjo6U2V2ZXJpdHk6OkNyaXRpY2FsIDogTWVtb3J5
RnJvbnRlbmREaXNwYXRjaGVyOjpTZXZlcml0eTo6Tm9uQ3JpdGljYWw7Ci0gICAgbV9mcm9udGVu
ZERpc3BhdGNoZXItPm1lbW9yeVByZXNzdXJlKG1fZW52aXJvbm1lbnQuZXhlY3V0aW9uU3RvcHdh
dGNoKCkuZWxhcHNlZFRpbWUoKS5zZWNvbmRzKCksIHNldmVyaXR5KTsKKyAgICBtX2Zyb250ZW5k
RGlzcGF0Y2hlci0+bWVtb3J5UHJlc3N1cmUobV9lbnZpcm9ubWVudC5leGVjdXRpb25TdG9wd2F0
Y2goKS5lbGFwc2VkVGltZSgpLnNlY29uZHMoKSwgUHJvdG9jb2w6OkhlbHBlcnM6OmdldEVudW1D
b25zdGFudFZhbHVlKHNldmVyaXR5KSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yTWVtb3J5QWdlbnQ6
OmNvbGxlY3RTYW1wbGUoY29uc3QgUmVzb3VyY2VVc2FnZURhdGEmIGRhdGEpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rvck1lbW9yeUFnZW50Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rvck1lbW9yeUFnZW50LmgK
aW5kZXggYzQ0NzcyZGJlYWJmOTExNGNmYTQ0N2ZlOTZlODRlM2QyYjUyNjI4ZS4uMWE3NjQwOGVm
OTNjOTYxYjVhMDBhYWMxZjkyNWE4OTM2NDMyOTQ3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JNZW1vcnlBZ2VudC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yTWVtb3J5QWdlbnQuaApAQCAtMzUsMjQg
KzM1LDIyIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdHlwZWRlZiBTdHJpbmcgRXJyb3JT
dHJpbmc7Ci0KIGNsYXNzIEluc3BlY3Rvck1lbW9yeUFnZW50IGZpbmFsIDogcHVibGljIEluc3Bl
Y3RvckFnZW50QmFzZSwgcHVibGljIEluc3BlY3Rvcjo6TWVtb3J5QmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbnNwZWN0b3JNZW1vcnlBZ2VudCk7
CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgSW5zcGVjdG9yTWVt
b3J5QWdlbnQoUGFnZUFnZW50Q29udGV4dCYpOwotICAgIH5JbnNwZWN0b3JNZW1vcnlBZ2VudCgp
IG92ZXJyaWRlOworICAgIH5JbnNwZWN0b3JNZW1vcnlBZ2VudCgpOwogCiAgICAgLy8gSW5zcGVj
dG9yQWdlbnRCYXNlCi0gICAgdm9pZCBkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVj
dG9yOjpGcm9udGVuZFJvdXRlciosIEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXIqKSBvdmVy
cmlkZTsKLSAgICB2b2lkIHdpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6
RGlzY29ubmVjdFJlYXNvbikgb3ZlcnJpZGU7CisgICAgdm9pZCBkaWRDcmVhdGVGcm9udGVuZEFu
ZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9udGVuZFJvdXRlciosIEluc3BlY3Rvcjo6QmFja2VuZERp
c3BhdGNoZXIqKTsKKyAgICB2b2lkIHdpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3Bl
Y3Rvcjo6RGlzY29ubmVjdFJlYXNvbik7CiAKICAgICAvLyBNZW1vcnlCYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXIKLSAgICB2b2lkIGVuYWJsZShFcnJvclN0cmluZyYpIG92ZXJyaWRlOwotICAgIHZv
aWQgZGlzYWJsZShFcnJvclN0cmluZyYpIG92ZXJyaWRlOwotICAgIHZvaWQgc3RhcnRUcmFja2lu
ZyhFcnJvclN0cmluZyYpIG92ZXJyaWRlOwotICAgIHZvaWQgc3RvcFRyYWNraW5nKEVycm9yU3Ry
aW5nJikgb3ZlcnJpZGU7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2
b2lkPiBlbmFibGUoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZv
aWQ+IGRpc2FibGUoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZv
aWQ+IHN0YXJ0VHJhY2tpbmcoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmlu
Z09yPHZvaWQ+IHN0b3BUcmFja2luZygpOwogCiAgICAgLy8gSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uCiAgICAgdm9pZCBkaWRIYW5kbGVNZW1vcnlQcmVzc3VyZShDcml0aWNhbCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rvck5ldHdvcmtBZ2Vu
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rvck5ldHdvcmtB
Z2VudC5jcHAKaW5kZXggMDlmMjc3ZjE5NWQzNTZjZjZkMzE0ZmJmNzJjZmNiZWFkNjY3ZTE1Yy4u
MDllNmM2ZDRjOTZkNjQ0MTgyM2RkMDUxMGJmOWRjOTI2ODQ5NzAzNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JOZXR3b3JrQWdlbnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yTmV0d29ya0FnZW50
LmNwcApAQCAtMTcyLDkgKzE3Miw5IEBAIHByaXZhdGU6CiAgICAgaW50IG1fc3RhdHVzQ29kZTsK
IH07CiAKLVJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpXZWJTb2NrZXRGcmFtZT4g
YnVpbGRXZWJTb2NrZXRNZXNzYWdlKGNvbnN0IFdlYlNvY2tldEZyYW1lJiBmcmFtZSkKK1JlZjxQ
cm90b2NvbDo6TmV0d29yazo6V2ViU29ja2V0RnJhbWU+IGJ1aWxkV2ViU29ja2V0TWVzc2FnZShj
b25zdCBXZWJTb2NrZXRGcmFtZSYgZnJhbWUpCiB7Ci0gICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJv
dG9jb2w6Ok5ldHdvcms6OldlYlNvY2tldEZyYW1lOjpjcmVhdGUoKQorICAgIHJldHVybiBQcm90
b2NvbDo6TmV0d29yazo6V2ViU29ja2V0RnJhbWU6OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRPcGNv
ZGUoZnJhbWUub3BDb2RlKQogICAgICAgICAuc2V0TWFzayhmcmFtZS5tYXNrZWQpCiAgICAgICAg
IC5zZXRQYXlsb2FkRGF0YShmcmFtZS5vcENvZGUgPT0gMSA/IFN0cmluZzo6ZnJvbVVURjhXaXRo
TGF0aW4xRmFsbGJhY2soZnJhbWUucGF5bG9hZCwgZnJhbWUucGF5bG9hZExlbmd0aCkgOiBiYXNl
NjRFbmNvZGUoZnJhbWUucGF5bG9hZCwgZnJhbWUucGF5bG9hZExlbmd0aCkpCkBAIC0yMDEsMjAg
KzIwMSwyMSBAQCB2b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6ZGlkQ3JlYXRlRnJvbnRlbmRB
bmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRSb3V0ZQogCiB2b2lkIEluc3BlY3Rvck5ldHdv
cmtBZ2VudDo6d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25u
ZWN0UmVhc29uKQogewotICAgIEVycm9yU3RyaW5nIGlnbm9yZWQ7Ci0gICAgZGlzYWJsZShpZ25v
cmVkKTsKKyAgICBkaXNhYmxlKCk7CiB9CiAKLXN0YXRpYyBSZWY8SlNPTjo6T2JqZWN0PiBidWls
ZE9iamVjdEZvckhlYWRlcnMoY29uc3QgSFRUUEhlYWRlck1hcCYgaGVhZGVycykKK3N0YXRpYyBS
ZWY8UHJvdG9jb2w6Ok5ldHdvcms6OkhlYWRlcnM+IGJ1aWxkT2JqZWN0Rm9ySGVhZGVycyhjb25z
dCBIVFRQSGVhZGVyTWFwJiBoZWFkZXJzKQogewotICAgIFJlZjxKU09OOjpPYmplY3Q+IGhlYWRl
cnNPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGF1dG8gaGVhZGVyc1ZhbHVl
ID0gUHJvdG9jb2w6Ok5ldHdvcms6OkhlYWRlcnM6OmNyZWF0ZSgpLnJlbGVhc2UoKTsKIAorICAg
IGF1dG8gaGVhZGVyc09iamVjdCA9IGhlYWRlcnNWYWx1ZS0+YXNPYmplY3QoKTsKICAgICBmb3Ig
KGNvbnN0IGF1dG8mIGhlYWRlciA6IGhlYWRlcnMpCiAgICAgICAgIGhlYWRlcnNPYmplY3QtPnNl
dFN0cmluZyhoZWFkZXIua2V5LCBoZWFkZXIudmFsdWUpOwotICAgIHJldHVybiBoZWFkZXJzT2Jq
ZWN0OworCisgICAgcmV0dXJuIGhlYWRlcnNWYWx1ZTsKIH0KIAotUmVmPEluc3BlY3Rvcjo6UHJv
dG9jb2w6Ok5ldHdvcms6OlJlc291cmNlVGltaW5nPiBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmJ1
aWxkT2JqZWN0Rm9yVGltaW5nKGNvbnN0IE5ldHdvcmtMb2FkTWV0cmljcyogdGltaW5nLCBSZXNv
dXJjZUxvYWRlciYgcmVzb3VyY2VMb2FkZXIpCitSZWY8UHJvdG9jb2w6Ok5ldHdvcms6OlJlc291
cmNlVGltaW5nPiBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yVGltaW5nKGNv
bnN0IE5ldHdvcmtMb2FkTWV0cmljcyogdGltaW5nLCBSZXNvdXJjZUxvYWRlciYgcmVzb3VyY2VM
b2FkZXIpCiB7CiAgICAgYXV0byYgbG9hZFRpbWluZyA9IHJlc291cmNlTG9hZGVyLmxvYWRUaW1p
bmcoKTsKIApAQCAtMjI3LDcgKzIyOCw3IEBAIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3
b3JrOjpSZXNvdXJjZVRpbWluZz4gSW5zcGVjdG9yTmV0d29ya0FnZW50OjpidWlsZE9iCiAgICAg
ICAgIHRpbWluZyA9ICZlbXB0eS52YWx1ZSgpOwogICAgIH0KIAotICAgIHJldHVybiBJbnNwZWN0
b3I6OlByb3RvY29sOjpOZXR3b3JrOjpSZXNvdXJjZVRpbWluZzo6Y3JlYXRlKCkKKyAgICByZXR1
cm4gUHJvdG9jb2w6Ok5ldHdvcms6OlJlc291cmNlVGltaW5nOjpjcmVhdGUoKQogICAgICAgICAu
c2V0U3RhcnRUaW1lKGVsYXBzZWRUaW1lU2luY2UobG9hZFRpbWluZy5zdGFydFRpbWUoKSkpCiAg
ICAgICAgIC5zZXRSZWRpcmVjdFN0YXJ0KGVsYXBzZWRUaW1lU2luY2UobG9hZFRpbWluZy5yZWRp
cmVjdFN0YXJ0KCkpKQogICAgICAgICAuc2V0UmVkaXJlY3RFbmQoZWxhcHNlZFRpbWVTaW5jZShs
b2FkVGltaW5nLnJlZGlyZWN0RW5kKCkpKQpAQCAtMjQzLDI2ICsyNDQsMjYgQEAgUmVmPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OlJlc291cmNlVGltaW5nPiBJbnNwZWN0b3JOZXR3b3Jr
QWdlbnQ6OmJ1aWxkT2IKICAgICAgICAgLnJlbGVhc2UoKTsKIH0KIAotc3RhdGljIEluc3BlY3Rv
cjo6UHJvdG9jb2w6Ok5ldHdvcms6Ok1ldHJpY3M6OlByaW9yaXR5IHRvUHJvdG9jb2woTmV0d29y
a0xvYWRQcmlvcml0eSBwcmlvcml0eSkKK3N0YXRpYyBQcm90b2NvbDo6TmV0d29yazo6TWV0cmlj
czo6UHJpb3JpdHkgdG9Qcm90b2NvbChOZXR3b3JrTG9hZFByaW9yaXR5IHByaW9yaXR5KQogewog
ICAgIHN3aXRjaCAocHJpb3JpdHkpIHsKICAgICBjYXNlIE5ldHdvcmtMb2FkUHJpb3JpdHk6Okxv
dzoKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6Ok1ldHJpY3M6
OlByaW9yaXR5OjpMb3c7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6TmV0d29yazo6TWV0cmlj
czo6UHJpb3JpdHk6OkxvdzsKICAgICBjYXNlIE5ldHdvcmtMb2FkUHJpb3JpdHk6Ok1lZGl1bToK
LSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6Ok1ldHJpY3M6OlBy
aW9yaXR5OjpNZWRpdW07CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6TmV0d29yazo6TWV0cmlj
czo6UHJpb3JpdHk6Ok1lZGl1bTsKICAgICBjYXNlIE5ldHdvcmtMb2FkUHJpb3JpdHk6OkhpZ2g6
Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpNZXRyaWNzOjpQ
cmlvcml0eTo6SGlnaDsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpOZXR3b3JrOjpNZXRyaWNz
OjpQcmlvcml0eTo6SGlnaDsKICAgICBjYXNlIE5ldHdvcmtMb2FkUHJpb3JpdHk6OlVua25vd246
CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAg
IHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpNZXRyaWNzOjpQcmlvcml0eTo6
TWVkaXVtOworICAgIHJldHVybiBQcm90b2NvbDo6TmV0d29yazo6TWV0cmljczo6UHJpb3JpdHk6
Ok1lZGl1bTsKIH0KIAotUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6Ok1ldHJpY3M+
IEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6YnVpbGRPYmplY3RGb3JNZXRyaWNzKGNvbnN0IE5ldHdv
cmtMb2FkTWV0cmljcyYgbmV0d29ya0xvYWRNZXRyaWNzKQorUmVmPFByb3RvY29sOjpOZXR3b3Jr
OjpNZXRyaWNzPiBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yTWV0cmljcyhj
b25zdCBOZXR3b3JrTG9hZE1ldHJpY3MmIG5ldHdvcmtMb2FkTWV0cmljcykKIHsKLSAgICBhdXRv
IG1ldHJpY3MgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpNZXRyaWNzOjpjcmVhdGUo
KS5yZWxlYXNlKCk7CisgICAgYXV0byBtZXRyaWNzID0gUHJvdG9jb2w6Ok5ldHdvcms6Ok1ldHJp
Y3M6OmNyZWF0ZSgpLnJlbGVhc2UoKTsKIAogICAgIGlmICghbmV0d29ya0xvYWRNZXRyaWNzLnBy
b3RvY29sLmlzTnVsbCgpKQogICAgICAgICBtZXRyaWNzLT5zZXRQcm90b2NvbChuZXR3b3JrTG9h
ZE1ldHJpY3MucHJvdG9jb2wpOwpAQCAtMjg2LDcgKzI4Nyw3IEBAIFJlZjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpOZXR3b3JrOjpNZXRyaWNzPiBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmJ1aWxkT2Jq
ZWN0Rm9yCiAgICAgaWYgKG5ldHdvcmtMb2FkTWV0cmljcy5yZXNwb25zZUJvZHlEZWNvZGVkU2l6
ZSAhPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQ2NF90Pjo6bWF4KCkpCiAgICAgICAgIG1ldHJp
Y3MtPnNldFJlc3BvbnNlQm9keURlY29kZWRTaXplKG5ldHdvcmtMb2FkTWV0cmljcy5yZXNwb25z
ZUJvZHlEZWNvZGVkU2l6ZSk7CiAKLSAgICBhdXRvIGNvbm5lY3Rpb25QYXlsb2FkID0gSW5zcGVj
dG9yOjpQcm90b2NvbDo6U2VjdXJpdHk6OkNvbm5lY3Rpb246OmNyZWF0ZSgpCisgICAgYXV0byBj
b25uZWN0aW9uUGF5bG9hZCA9IFByb3RvY29sOjpTZWN1cml0eTo6Q29ubmVjdGlvbjo6Y3JlYXRl
KCkKICAgICAgICAgLnJlbGVhc2UoKTsKIAogICAgIGlmICghbmV0d29ya0xvYWRNZXRyaWNzLnRs
c1Byb3RvY29sLmlzRW1wdHkoKSkKQEAgLTMwMCw5ICszMDEsOSBAQCBSZWY8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6TmV0d29yazo6TWV0cmljcz4gSW5zcGVjdG9yTmV0d29ya0FnZW50OjpidWlsZE9i
amVjdEZvcgogICAgIHJldHVybiBtZXRyaWNzOwogfQogCi1zdGF0aWMgUmVmPEluc3BlY3Rvcjo6
UHJvdG9jb2w6Ok5ldHdvcms6OlJlcXVlc3Q+IGJ1aWxkT2JqZWN0Rm9yUmVzb3VyY2VSZXF1ZXN0
KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKK3N0YXRpYyBSZWY8UHJvdG9jb2w6Ok5l
dHdvcms6OlJlcXVlc3Q+IGJ1aWxkT2JqZWN0Rm9yUmVzb3VyY2VSZXF1ZXN0KGNvbnN0IFJlc291
cmNlUmVxdWVzdCYgcmVxdWVzdCkKIHsKLSAgICBhdXRvIHJlcXVlc3RPYmplY3QgPSBJbnNwZWN0
b3I6OlByb3RvY29sOjpOZXR3b3JrOjpSZXF1ZXN0OjpjcmVhdGUoKQorICAgIGF1dG8gcmVxdWVz
dE9iamVjdCA9IFByb3RvY29sOjpOZXR3b3JrOjpSZXF1ZXN0OjpjcmVhdGUoKQogICAgICAgICAu
c2V0VXJsKHJlcXVlc3QudXJsKCkuc3RyaW5nKCkpCiAgICAgICAgIC5zZXRNZXRob2QocmVxdWVz
dC5odHRwTWV0aG9kKCkpCiAgICAgICAgIC5zZXRIZWFkZXJzKGJ1aWxkT2JqZWN0Rm9ySGVhZGVy
cyhyZXF1ZXN0Lmh0dHBIZWFkZXJGaWVsZHMoKSkpCkBAIC0zMTQsNDQgKzMxNSw0MiBAQCBzdGF0
aWMgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OlJlcXVlc3Q+IGJ1aWxkT2JqZWN0
Rm9yUmVzb3VyY2VSZXF1ZXN0KAogICAgIHJldHVybiByZXF1ZXN0T2JqZWN0OwogfQogCi1zdGF0
aWMgSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6UmVzcG9uc2U6OlNvdXJjZSByZXNwb25z
ZVNvdXJjZShSZXNvdXJjZVJlc3BvbnNlOjpTb3VyY2Ugc291cmNlKQorc3RhdGljIFByb3RvY29s
OjpOZXR3b3JrOjpSZXNwb25zZTo6U291cmNlIHJlc3BvbnNlU291cmNlKFJlc291cmNlUmVzcG9u
c2U6OlNvdXJjZSBzb3VyY2UpCiB7CiAgICAgc3dpdGNoIChzb3VyY2UpIHsKICAgICBjYXNlIFJl
c291cmNlUmVzcG9uc2U6OlNvdXJjZTo6RE9NQ2FjaGU6CiAgICAgY2FzZSBSZXNvdXJjZVJlc3Bv
bnNlOjpTb3VyY2U6OkFwcGxpY2F0aW9uQ2FjaGU6CiAgICAgICAgIC8vIEZJWE1FOiBBZGQgc3Vw
cG9ydCBmb3IgQXBwbGljYXRpb25DYWNoZSBpbiBpbnNwZWN0b3IuCiAgICAgY2FzZSBSZXNvdXJj
ZVJlc3BvbnNlOjpTb3VyY2U6OlVua25vd246Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlBy
b3RvY29sOjpOZXR3b3JrOjpSZXNwb25zZTo6U291cmNlOjpVbmtub3duOworICAgICAgICByZXR1
cm4gUHJvdG9jb2w6Ok5ldHdvcms6OlJlc3BvbnNlOjpTb3VyY2U6OlVua25vd247CiAgICAgY2Fz
ZSBSZXNvdXJjZVJlc3BvbnNlOjpTb3VyY2U6Ok5ldHdvcms6Ci0gICAgICAgIHJldHVybiBJbnNw
ZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpSZXNwb25zZTo6U291cmNlOjpOZXR3b3JrOworICAg
ICAgICByZXR1cm4gUHJvdG9jb2w6Ok5ldHdvcms6OlJlc3BvbnNlOjpTb3VyY2U6Ok5ldHdvcms7
CiAgICAgY2FzZSBSZXNvdXJjZVJlc3BvbnNlOjpTb3VyY2U6Ok1lbW9yeUNhY2hlOgogICAgIGNh
c2UgUmVzb3VyY2VSZXNwb25zZTo6U291cmNlOjpNZW1vcnlDYWNoZUFmdGVyVmFsaWRhdGlvbjoK
LSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OlJlc3BvbnNlOjpT
b3VyY2U6Ok1lbW9yeUNhY2hlOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6Ok5ldHdvcms6OlJl
c3BvbnNlOjpTb3VyY2U6Ok1lbW9yeUNhY2hlOwogICAgIGNhc2UgUmVzb3VyY2VSZXNwb25zZTo6
U291cmNlOjpEaXNrQ2FjaGU6CiAgICAgY2FzZSBSZXNvdXJjZVJlc3BvbnNlOjpTb3VyY2U6OkRp
c2tDYWNoZUFmdGVyVmFsaWRhdGlvbjoKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9j
b2w6Ok5ldHdvcms6OlJlc3BvbnNlOjpTb3VyY2U6OkRpc2tDYWNoZTsKKyAgICAgICAgcmV0dXJu
IFByb3RvY29sOjpOZXR3b3JrOjpSZXNwb25zZTo6U291cmNlOjpEaXNrQ2FjaGU7CiAgICAgY2Fz
ZSBSZXNvdXJjZVJlc3BvbnNlOjpTb3VyY2U6OlNlcnZpY2VXb3JrZXI6Ci0gICAgICAgIHJldHVy
biBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpSZXNwb25zZTo6U291cmNlOjpTZXJ2aWNl
V29ya2VyOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6Ok5ldHdvcms6OlJlc3BvbnNlOjpTb3Vy
Y2U6OlNlcnZpY2VXb3JrZXI7CiAgICAgY2FzZSBSZXNvdXJjZVJlc3BvbnNlOjpTb3VyY2U6Oklu
c3BlY3Rvck92ZXJyaWRlOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0
d29yazo6UmVzcG9uc2U6OlNvdXJjZTo6SW5zcGVjdG9yT3ZlcnJpZGU7CisgICAgICAgIHJldHVy
biBQcm90b2NvbDo6TmV0d29yazo6UmVzcG9uc2U6OlNvdXJjZTo6SW5zcGVjdG9yT3ZlcnJpZGU7
CiAgICAgfQogCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIEluc3BlY3Rv
cjo6UHJvdG9jb2w6Ok5ldHdvcms6OlJlc3BvbnNlOjpTb3VyY2U6OlVua25vd247CisgICAgcmV0
dXJuIFByb3RvY29sOjpOZXR3b3JrOjpSZXNwb25zZTo6U291cmNlOjpVbmtub3duOwogfQogCi1S
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6UmVzcG9uc2U+IEluc3BlY3Rvck5l
dHdvcmtBZ2VudDo6YnVpbGRPYmplY3RGb3JSZXNvdXJjZVJlc3BvbnNlKGNvbnN0IFJlc291cmNl
UmVzcG9uc2UmIHJlc3BvbnNlLCBSZXNvdXJjZUxvYWRlciogcmVzb3VyY2VMb2FkZXIpCitSZWZQ
dHI8UHJvdG9jb2w6Ok5ldHdvcms6OlJlc3BvbnNlPiBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmJ1
aWxkT2JqZWN0Rm9yUmVzb3VyY2VSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNw
b25zZSwgUmVzb3VyY2VMb2FkZXIqIHJlc291cmNlTG9hZGVyKQogewogICAgIGlmIChyZXNwb25z
ZS5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBSZWY8SlNPTjo6T2Jq
ZWN0PiBoZWFkZXJzID0gYnVpbGRPYmplY3RGb3JIZWFkZXJzKHJlc3BvbnNlLmh0dHBIZWFkZXJG
aWVsZHMoKSk7Ci0KLSAgICBhdXRvIHJlc3BvbnNlT2JqZWN0ID0gSW5zcGVjdG9yOjpQcm90b2Nv
bDo6TmV0d29yazo6UmVzcG9uc2U6OmNyZWF0ZSgpCisgICAgYXV0byByZXNwb25zZU9iamVjdCA9
IFByb3RvY29sOjpOZXR3b3JrOjpSZXNwb25zZTo6Y3JlYXRlKCkKICAgICAgICAgLnNldFVybChy
ZXNwb25zZS51cmwoKS5zdHJpbmcoKSkKICAgICAgICAgLnNldFN0YXR1cyhyZXNwb25zZS5odHRw
U3RhdHVzQ29kZSgpKQogICAgICAgICAuc2V0U3RhdHVzVGV4dChyZXNwb25zZS5odHRwU3RhdHVz
VGV4dCgpKQotICAgICAgICAuc2V0SGVhZGVycyhXVEZNb3ZlKGhlYWRlcnMpKQorICAgICAgICAu
c2V0SGVhZGVycyhidWlsZE9iamVjdEZvckhlYWRlcnMocmVzcG9uc2UuaHR0cEhlYWRlckZpZWxk
cygpKSkKICAgICAgICAgLnNldE1pbWVUeXBlKHJlc3BvbnNlLm1pbWVUeXBlKCkpCiAgICAgICAg
IC5zZXRTb3VyY2UocmVzcG9uc2VTb3VyY2UocmVzcG9uc2Uuc291cmNlKCkpKQogICAgICAgICAu
cmVsZWFzZSgpOwpAQCAtMzYwLDExICszNTksMTEgQEAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9j
b2w6Ok5ldHdvcms6OlJlc3BvbnNlPiBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmJ1aWxkT2JqZWMK
ICAgICAgICAgcmVzcG9uc2VPYmplY3QtPnNldFRpbWluZyhidWlsZE9iamVjdEZvclRpbWluZyhy
ZXNwb25zZS5kZXByZWNhdGVkTmV0d29ya0xvYWRNZXRyaWNzT3JOdWxsKCksICpyZXNvdXJjZUxv
YWRlcikpOwogCiAgICAgaWYgKGF1dG8mIGNlcnRpZmljYXRlSW5mbyA9IHJlc3BvbnNlLmNlcnRp
ZmljYXRlSW5mbygpKSB7Ci0gICAgICAgIGF1dG8gc2VjdXJpdHlQYXlsb2FkID0gSW5zcGVjdG9y
OjpQcm90b2NvbDo6U2VjdXJpdHk6OlNlY3VyaXR5OjpjcmVhdGUoKQorICAgICAgICBhdXRvIHNl
Y3VyaXR5UGF5bG9hZCA9IFByb3RvY29sOjpTZWN1cml0eTo6U2VjdXJpdHk6OmNyZWF0ZSgpCiAg
ICAgICAgICAgICAucmVsZWFzZSgpOwogCiAgICAgICAgIGlmIChhdXRvIGNlcnRpZmljYXRlU3Vt
bWFyeUluZm8gPSBjZXJ0aWZpY2F0ZUluZm8udmFsdWUoKS5zdW1tYXJ5KCkpIHsKLSAgICAgICAg
ICAgIGF1dG8gY2VydGlmaWNhdGVQYXlsb2FkID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6U2VjdXJp
dHk6OkNlcnRpZmljYXRlOjpjcmVhdGUoKQorICAgICAgICAgICAgYXV0byBjZXJ0aWZpY2F0ZVBh
eWxvYWQgPSBQcm90b2NvbDo6U2VjdXJpdHk6OkNlcnRpZmljYXRlOjpjcmVhdGUoKQogICAgICAg
ICAgICAgICAgIC5yZWxlYXNlKCk7CiAKICAgICAgICAgICAgIGNlcnRpZmljYXRlUGF5bG9hZC0+
c2V0U3ViamVjdChjZXJ0aWZpY2F0ZVN1bW1hcnlJbmZvLnZhbHVlKCkuc3ViamVjdCk7CkBAIC0z
OTYsMTYgKzM5NSwxNiBAQCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6UmVz
cG9uc2U+IEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6YnVpbGRPYmplYwogICAgIHJldHVybiByZXNw
b25zZU9iamVjdDsKIH0KIAotUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OkNhY2hl
ZFJlc291cmNlPiBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yQ2FjaGVkUmVz
b3VyY2UoQ2FjaGVkUmVzb3VyY2UqIGNhY2hlZFJlc291cmNlKQorUmVmPFByb3RvY29sOjpOZXR3
b3JrOjpDYWNoZWRSZXNvdXJjZT4gSW5zcGVjdG9yTmV0d29ya0FnZW50OjpidWlsZE9iamVjdEZv
ckNhY2hlZFJlc291cmNlKENhY2hlZFJlc291cmNlKiBjYWNoZWRSZXNvdXJjZSkKIHsKLSAgICBh
dXRvIHJlc291cmNlT2JqZWN0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6Q2FjaGVk
UmVzb3VyY2U6OmNyZWF0ZSgpCisgICAgYXV0byByZXNvdXJjZU9iamVjdCA9IFByb3RvY29sOjpO
ZXR3b3JrOjpDYWNoZWRSZXNvdXJjZTo6Y3JlYXRlKCkKICAgICAgICAgLnNldFVybChjYWNoZWRS
ZXNvdXJjZS0+dXJsKCkuc3RyaW5nKCkpCiAgICAgICAgIC5zZXRUeXBlKEluc3BlY3RvclBhZ2VB
Z2VudDo6Y2FjaGVkUmVzb3VyY2VUeXBlSlNPTigqY2FjaGVkUmVzb3VyY2UpKQogICAgICAgICAu
c2V0Qm9keVNpemUoY2FjaGVkUmVzb3VyY2UtPmVuY29kZWRTaXplKCkpCiAgICAgICAgIC5yZWxl
YXNlKCk7CiAKLSAgICBhdXRvIHJlc291cmNlUmVzcG9uc2UgPSBidWlsZE9iamVjdEZvclJlc291
cmNlUmVzcG9uc2UoY2FjaGVkUmVzb3VyY2UtPnJlc3BvbnNlKCksIGNhY2hlZFJlc291cmNlLT5s
b2FkZXIoKSk7Ci0gICAgcmVzb3VyY2VPYmplY3QtPnNldFJlc3BvbnNlKFdURk1vdmUocmVzb3Vy
Y2VSZXNwb25zZSkpOworICAgIGlmIChhdXRvIHJlc291cmNlUmVzcG9uc2UgPSBidWlsZE9iamVj
dEZvclJlc291cmNlUmVzcG9uc2UoY2FjaGVkUmVzb3VyY2UtPnJlc3BvbnNlKCksIGNhY2hlZFJl
c291cmNlLT5sb2FkZXIoKSkpCisgICAgICAgIHJlc291cmNlT2JqZWN0LT5zZXRSZXNwb25zZShy
ZXNvdXJjZVJlc3BvbnNlLnJlbGVhc2VOb25OdWxsKCkpOwogCiAgICAgU3RyaW5nIHNvdXJjZU1h
cHBpbmdVUkwgPSBJbnNwZWN0b3JQYWdlQWdlbnQ6OnNvdXJjZU1hcFVSTEZvclJlc291cmNlKGNh
Y2hlZFJlc291cmNlKTsKICAgICBpZiAoIXNvdXJjZU1hcHBpbmdVUkwuaXNFbXB0eSgpKQpAQCAt
NDI5LDkgKzQyOCw5IEBAIHZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50Ojp3aWxsU2VuZFJlcXVl
c3QodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBEb2N1bWVudExvCiAgICAgZG91YmxlIHNlbmRU
aW1lc3RhbXAgPSB0aW1lc3RhbXAoKTsKICAgICBXYWxsVGltZSB3YWxsdGltZSA9IFdhbGxUaW1l
Ojpub3coKTsKIAotICAgIFN0cmluZyByZXF1ZXN0SWQgPSBJZGVudGlmaWVyc0ZhY3Rvcnk6OnJl
cXVlc3RJZChpZGVudGlmaWVyKTsKLSAgICBTdHJpbmcgZnJhbWVJZCA9IGZyYW1lSWRlbnRpZmll
cihsb2FkZXIpOwotICAgIFN0cmluZyBsb2FkZXJJZCA9IGxvYWRlcklkZW50aWZpZXIobG9hZGVy
KTsKKyAgICBhdXRvIHJlcXVlc3RJZCA9IElkZW50aWZpZXJzRmFjdG9yeTo6cmVxdWVzdElkKGlk
ZW50aWZpZXIpOworICAgIGF1dG8gZnJhbWVJZCA9IGZyYW1lSWRlbnRpZmllcihsb2FkZXIpOwor
ICAgIGF1dG8gbG9hZGVySWQgPSBsb2FkZXJJZGVudGlmaWVyKGxvYWRlcik7CiAgICAgU3RyaW5n
IHRhcmdldElkID0gcmVxdWVzdC5pbml0aWF0b3JJZGVudGlmaWVyKCk7CiAKICAgICBpZiAodHlw
ZSA9PSBJbnNwZWN0b3JQYWdlQWdlbnQ6Ok90aGVyUmVzb3VyY2UpIHsKQEAgLTQ2Miw3ICs0NjEs
MTAgQEAgdm9pZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OndpbGxTZW5kUmVxdWVzdCh1bnNpZ25l
ZCBsb25nIGlkZW50aWZpZXIsIERvY3VtZW50TG8KICAgICBhdXRvIGluaXRpYXRvck9iamVjdCA9
IGJ1aWxkSW5pdGlhdG9yT2JqZWN0KGRvY3VtZW50LCAmcmVxdWVzdCk7CiAKICAgICBTdHJpbmcg
dXJsID0gbG9hZGVyID8gbG9hZGVyLT51cmwoKS5zdHJpbmcoKSA6IHJlcXVlc3QudXJsKCkuc3Ry
aW5nKCk7Ci0gICAgbV9mcm9udGVuZERpc3BhdGNoZXItPnJlcXVlc3RXaWxsQmVTZW50KHJlcXVl
c3RJZCwgZnJhbWVJZCwgbG9hZGVySWQsIHVybCwgYnVpbGRPYmplY3RGb3JSZXNvdXJjZVJlcXVl
c3QocmVxdWVzdCksIHNlbmRUaW1lc3RhbXAsIHdhbGx0aW1lLnNlY29uZHNTaW5jZUVwb2NoKCku
c2Vjb25kcygpLCBpbml0aWF0b3JPYmplY3QsIGJ1aWxkT2JqZWN0Rm9yUmVzb3VyY2VSZXNwb25z
ZShyZWRpcmVjdFJlc3BvbnNlLCBudWxscHRyKSwgdHlwZSAhPSBJbnNwZWN0b3JQYWdlQWdlbnQ6
Ok90aGVyUmVzb3VyY2UgPyAmcHJvdG9jb2xSZXNvdXJjZVR5cGUgOiBudWxscHRyLCB0YXJnZXRJ
ZC5pc0VtcHR5KCkgPyBudWxscHRyIDogJnRhcmdldElkKTsKKyAgICBPcHRpb25hbDxQcm90b2Nv
bDo6UGFnZTo6UmVzb3VyY2VUeXBlPiB0eXBlUGF5bG9hZDsKKyAgICBpZiAodHlwZSAhPSBJbnNw
ZWN0b3JQYWdlQWdlbnQ6Ok90aGVyUmVzb3VyY2UpCisgICAgICAgIHR5cGVQYXlsb2FkID0gcHJv
dG9jb2xSZXNvdXJjZVR5cGU7CisgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPnJlcXVlc3RXaWxs
QmVTZW50KHJlcXVlc3RJZCwgZnJhbWVJZCwgbG9hZGVySWQsIHVybCwgYnVpbGRPYmplY3RGb3JS
ZXNvdXJjZVJlcXVlc3QocmVxdWVzdCksIHNlbmRUaW1lc3RhbXAsIHdhbGx0aW1lLnNlY29uZHNT
aW5jZUVwb2NoKCkuc2Vjb25kcygpLCBXVEZNb3ZlKGluaXRpYXRvck9iamVjdCksIGJ1aWxkT2Jq
ZWN0Rm9yUmVzb3VyY2VSZXNwb25zZShyZWRpcmVjdFJlc3BvbnNlLCBudWxscHRyKSwgV1RGTW92
ZSh0eXBlUGF5bG9hZCksIHRhcmdldElkKTsKIH0KIAogc3RhdGljIEluc3BlY3RvclBhZ2VBZ2Vu
dDo6UmVzb3VyY2VUeXBlIHJlc291cmNlVHlwZUZvckNhY2hlZFJlc291cmNlKENhY2hlZFJlc291
cmNlKiByZXNvdXJjZSkKQEAgLTUxNCw3ICs1MTYsOCBAQCB2b2lkIEluc3BlY3Rvck5ldHdvcmtB
Z2VudDo6ZGlkUmVjZWl2ZVJlc3BvbnNlKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgRG9jdW1l
bgogICAgICAgICB9KTsKICAgICB9CiAKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
TmV0d29yazo6UmVzcG9uc2U+IHJlc291cmNlUmVzcG9uc2UgPSBidWlsZE9iamVjdEZvclJlc291
cmNlUmVzcG9uc2UocmVhbFJlc3BvbnNlID8gKnJlYWxSZXNwb25zZSA6IHJlc3BvbnNlLCByZXNv
dXJjZUxvYWRlcik7CisgICAgUmVmUHRyPFByb3RvY29sOjpOZXR3b3JrOjpSZXNwb25zZT4gcmVz
b3VyY2VSZXNwb25zZSA9IGJ1aWxkT2JqZWN0Rm9yUmVzb3VyY2VSZXNwb25zZShyZWFsUmVzcG9u
c2UgPyAqcmVhbFJlc3BvbnNlIDogcmVzcG9uc2UsIHJlc291cmNlTG9hZGVyKTsKKyAgICBBU1NF
UlQocmVzb3VyY2VSZXNwb25zZSk7CiAKICAgICBib29sIGlzTm90TW9kaWZpZWQgPSByZXNwb25z
ZS5odHRwU3RhdHVzQ29kZSgpID09IDMwNDsKIApAQCAtNTI3LDcgKzUzMCw3IEBAIHZvaWQgSW5z
cGVjdG9yTmV0d29ya0FnZW50OjpkaWRSZWNlaXZlUmVzcG9uc2UodW5zaWduZWQgbG9uZyBpZGVu
dGlmaWVyLCBEb2N1bWVuCiAgICAgaWYgKGNhY2hlZFJlc291cmNlKSB7CiAgICAgICAgIC8vIFVz
ZSBtaW1lIHR5cGUgZnJvbSBjYWNoZWQgcmVzb3VyY2UgaW4gY2FzZSB0aGUgb25lIGluIHJlc3Bv
bnNlIGlzIGVtcHR5LgogICAgICAgICBpZiAocmVzb3VyY2VSZXNwb25zZSAmJiByZXNwb25zZS5t
aW1lVHlwZSgpLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJlc291cmNlUmVzcG9uc2UtPnNldFN0
cmluZyhJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpSZXNwb25zZTo6TWltZVR5cGUsIGNh
Y2hlZFJlc291cmNlLT5yZXNwb25zZSgpLm1pbWVUeXBlKCkpOworICAgICAgICAgICAgcmVzb3Vy
Y2VSZXNwb25zZS0+c2V0U3RyaW5nKFByb3RvY29sOjpOZXR3b3JrOjpSZXNwb25zZTo6bWltZVR5
cGVLZXksIGNhY2hlZFJlc291cmNlLT5yZXNwb25zZSgpLm1pbWVUeXBlKCkpOwogICAgICAgICBt
X3Jlc291cmNlc0RhdGEtPmFkZENhY2hlZFJlc291cmNlKHJlcXVlc3RJZCwgY2FjaGVkUmVzb3Vy
Y2UpOwogICAgIH0KIApAQCAtNTQ5LDIxICs1NTIsMjEgQEAgdm9pZCBJbnNwZWN0b3JOZXR3b3Jr
QWdlbnQ6OmRpZFJlY2VpdmVSZXNwb25zZSh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIERvY3Vt
ZW4KICAgICAgICAgICAgICAgICBtX3Jlc291cmNlc0RhdGEtPm1heWJlQWRkUmVzb3VyY2VEYXRh
KHJlcXVlc3RJZCwgcHJldmlvdXNCdWZmZXItPmRhdGEoKSwgcHJldmlvdXNCdWZmZXItPnNpemUo
KSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIHJlc291cmNlUmVz
cG9uc2UtPnNldFN0cmluZygibWltZVR5cGUiX3MsIHByZXZpb3VzUmVzb3VyY2VEYXRhLT5taW1l
VHlwZSgpKTsKKyAgICAgICAgICAgIHJlc291cmNlUmVzcG9uc2UtPnNldFN0cmluZyhQcm90b2Nv
bDo6TmV0d29yazo6UmVzcG9uc2U6Om1pbWVUeXBlS2V5LCBwcmV2aW91c1Jlc291cmNlRGF0YS0+
bWltZVR5cGUoKSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIHJlc291cmNlUmVzcG9uc2Ut
PnNldEludGVnZXIoInN0YXR1cyJfcywgcHJldmlvdXNSZXNvdXJjZURhdGEtPmh0dHBTdGF0dXND
b2RlKCkpOwotICAgICAgICAgICAgcmVzb3VyY2VSZXNwb25zZS0+c2V0U3RyaW5nKCJzdGF0dXNU
ZXh0Il9zLCBwcmV2aW91c1Jlc291cmNlRGF0YS0+aHR0cFN0YXR1c1RleHQoKSk7CisgICAgICAg
ICAgICByZXNvdXJjZVJlc3BvbnNlLT5zZXRJbnRlZ2VyKFByb3RvY29sOjpOZXR3b3JrOjpSZXNw
b25zZTo6c3RhdHVzS2V5LCBwcmV2aW91c1Jlc291cmNlRGF0YS0+aHR0cFN0YXR1c0NvZGUoKSk7
CisgICAgICAgICAgICByZXNvdXJjZVJlc3BvbnNlLT5zZXRTdHJpbmcoUHJvdG9jb2w6Ok5ldHdv
cms6OlJlc3BvbnNlOjpzdGF0dXNUZXh0S2V5LCBwcmV2aW91c1Jlc291cmNlRGF0YS0+aHR0cFN0
YXR1c1RleHQoKSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIHJlc291cmNlUmVzcG9uc2Ut
PnNldFN0cmluZygic291cmNlIl9zLCBJbnNwZWN0b3I6OlByb3RvY29sOjpJbnNwZWN0b3JIZWxw
ZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpS
ZXNwb25zZTo6U291cmNlOjpEaXNrQ2FjaGUpKTsKKyAgICAgICAgICAgIHJlc291cmNlUmVzcG9u
c2UtPnNldFN0cmluZyhQcm90b2NvbDo6TmV0d29yazo6UmVzcG9uc2U6OnNvdXJjZUtleSwgUHJv
dG9jb2w6OkhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKFByb3RvY29sOjpOZXR3b3JrOjpS
ZXNwb25zZTo6U291cmNlOjpEaXNrQ2FjaGUpKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIFN0
cmluZyBmcmFtZUlkID0gZnJhbWVJZGVudGlmaWVyKGxvYWRlcik7Ci0gICAgU3RyaW5nIGxvYWRl
cklkID0gbG9hZGVySWRlbnRpZmllcihsb2FkZXIpOworICAgIFByb3RvY29sOjpOZXR3b3JrOjpG
cmFtZUlkIGZyYW1lSWQgPSBmcmFtZUlkZW50aWZpZXIobG9hZGVyKTsKKyAgICBQcm90b2NvbDo6
TmV0d29yazo6TG9hZGVySWQgbG9hZGVySWQgPSBsb2FkZXJJZGVudGlmaWVyKGxvYWRlcik7CiAK
ICAgICBtX3Jlc291cmNlc0RhdGEtPnJlc3BvbnNlUmVjZWl2ZWQocmVxdWVzdElkLCBmcmFtZUlk
LCByZXNwb25zZSwgdHlwZSwgc2hvdWxkRm9yY2VCdWZmZXJpbmdOZXR3b3JrUmVzb3VyY2VEYXRh
KCkpOwogCi0gICAgbV9mcm9udGVuZERpc3BhdGNoZXItPnJlc3BvbnNlUmVjZWl2ZWQocmVxdWVz
dElkLCBmcmFtZUlkLCBsb2FkZXJJZCwgdGltZXN0YW1wKCksIEluc3BlY3RvclBhZ2VBZ2VudDo6
cmVzb3VyY2VUeXBlSlNPTih0eXBlKSwgcmVzb3VyY2VSZXNwb25zZSk7CisgICAgbV9mcm9udGVu
ZERpc3BhdGNoZXItPnJlc3BvbnNlUmVjZWl2ZWQocmVxdWVzdElkLCBmcmFtZUlkLCBsb2FkZXJJ
ZCwgdGltZXN0YW1wKCksIEluc3BlY3RvclBhZ2VBZ2VudDo6cmVzb3VyY2VUeXBlSlNPTih0eXBl
KSwgcmVzb3VyY2VSZXNwb25zZS5yZWxlYXNlTm9uTnVsbCgpKTsKIAogICAgIC8vIElmIHdlIHJl
dmFsaWRhdGVkIHRoZSByZXNvdXJjZSBhbmQgZ290IE5vdCBtb2RpZmllZCwgc2VuZCBjb250ZW50
IGxlbmd0aCBmb2xsb3dpbmcgZGlkUmVjZWl2ZVJlc3BvbnNlCiAgICAgLy8gYXMgdGhlcmUgd2ls
bCBiZSBubyBjYWxscyB0byBkaWRSZWNlaXZlRGF0YSBmcm9tIHRoZSBuZXR3b3JrIHN0YWNrLgpA
QCAtNjIxLDkgKzYyNCw5IEBAIHZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50OjpkaWRGaW5pc2hM
b2FkaW5nKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgRG9jdW1lbnRMCiAgICAgICAgICAgICBy
ZWFsTWV0cmljcyA9IHBsYXRmb3JtU3RyYXRlZ2llcygpLT5sb2FkZXJTdHJhdGVneSgpLT5uZXR3
b3JrTWV0cmljc0Zyb21SZXNvdXJjZUxvYWRJZGVudGlmaWVyKGlkZW50aWZpZXIpLmlzb2xhdGVk
Q29weSgpOwogICAgICAgICB9KTsKICAgICB9Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9j
b2w6Ok5ldHdvcms6Ok1ldHJpY3M+IG1ldHJpY3MgPSBidWlsZE9iamVjdEZvck1ldHJpY3MocmVh
bE1ldHJpY3MgPyAqcmVhbE1ldHJpY3MgOiBuZXR3b3JrTG9hZE1ldHJpY3MpOworICAgIFJlZlB0
cjxQcm90b2NvbDo6TmV0d29yazo6TWV0cmljcz4gbWV0cmljcyA9IGJ1aWxkT2JqZWN0Rm9yTWV0
cmljcyhyZWFsTWV0cmljcyA/ICpyZWFsTWV0cmljcyA6IG5ldHdvcmtMb2FkTWV0cmljcyk7CiAK
LSAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+bG9hZGluZ0ZpbmlzaGVkKHJlcXVlc3RJZCwgZWxh
cHNlZEZpbmlzaFRpbWUsICFzb3VyY2VNYXBwaW5nVVJMLmlzRW1wdHkoKSA/ICZzb3VyY2VNYXBw
aW5nVVJMIDogbnVsbHB0ciwgbWV0cmljcyk7CisgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPmxv
YWRpbmdGaW5pc2hlZChyZXF1ZXN0SWQsIGVsYXBzZWRGaW5pc2hUaW1lLCBzb3VyY2VNYXBwaW5n
VVJMLCBXVEZNb3ZlKG1ldHJpY3MpKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6
OmRpZEZhaWxMb2FkaW5nKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgRG9jdW1lbnRMb2FkZXIq
IGxvYWRlciwgY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCkBAIC02NDIsOCArNjQ1LDcgQEAg
dm9pZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmRpZEZhaWxMb2FkaW5nKHVuc2lnbmVkIGxvbmcg
aWRlbnRpZmllciwgRG9jdW1lbnRMb2EKICAgICAgICAgfQogICAgIH0KIAotICAgIGJvb2wgY2Fu
Y2VsZWQgPSBlcnJvci5pc0NhbmNlbGxhdGlvbigpOwotICAgIG1fZnJvbnRlbmREaXNwYXRjaGVy
LT5sb2FkaW5nRmFpbGVkKHJlcXVlc3RJZCwgdGltZXN0YW1wKCksIGVycm9yLmxvY2FsaXplZERl
c2NyaXB0aW9uKCksIGNhbmNlbGVkID8gJmNhbmNlbGVkIDogbnVsbHB0cik7CisgICAgbV9mcm9u
dGVuZERpc3BhdGNoZXItPmxvYWRpbmdGYWlsZWQocmVxdWVzdElkLCB0aW1lc3RhbXAoKSwgZXJy
b3IubG9jYWxpemVkRGVzY3JpcHRpb24oKSwgZXJyb3IuaXNDYW5jZWxsYXRpb24oKSk7CiB9CiAK
IHZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50OjpkaWRMb2FkUmVzb3VyY2VGcm9tTWVtb3J5Q2Fj
aGUoRG9jdW1lbnRMb2FkZXIqIGxvYWRlciwgQ2FjaGVkUmVzb3VyY2UmIHJlc291cmNlKQpAQCAt
NjU0LDggKzY1Niw4IEBAIHZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50OjpkaWRMb2FkUmVzb3Vy
Y2VGcm9tTWVtb3J5Q2FjaGUoRG9jdW1lbnRMb2FkZXIqIGxvYWRlCiAKICAgICB1bnNpZ25lZCBs
b25nIGlkZW50aWZpZXIgPSBsb2FkZXItPmZyYW1lKCktPnBhZ2UoKS0+cHJvZ3Jlc3MoKS5jcmVh
dGVVbmlxdWVJZGVudGlmaWVyKCk7CiAgICAgU3RyaW5nIHJlcXVlc3RJZCA9IElkZW50aWZpZXJz
RmFjdG9yeTo6cmVxdWVzdElkKGlkZW50aWZpZXIpOwotICAgIFN0cmluZyBsb2FkZXJJZCA9IGxv
YWRlcklkZW50aWZpZXIobG9hZGVyKTsKLSAgICBTdHJpbmcgZnJhbWVJZCA9IGZyYW1lSWRlbnRp
Zmllcihsb2FkZXIpOworICAgIFByb3RvY29sOjpOZXR3b3JrOjpMb2FkZXJJZCBsb2FkZXJJZCA9
IGxvYWRlcklkZW50aWZpZXIobG9hZGVyKTsKKyAgICBQcm90b2NvbDo6TmV0d29yazo6RnJhbWVJ
ZCBmcmFtZUlkID0gZnJhbWVJZGVudGlmaWVyKGxvYWRlcik7CiAKICAgICBtX3Jlc291cmNlc0Rh
dGEtPnJlc291cmNlQ3JlYXRlZChyZXF1ZXN0SWQsIGxvYWRlcklkLCByZXNvdXJjZSk7CiAKQEAg
LTY2NSw3ICs2NjcsNyBAQCB2b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6ZGlkTG9hZFJlc291
cmNlRnJvbU1lbW9yeUNhY2hlKERvY3VtZW50TG9hZGVyKiBsb2FkZQogICAgIC8vIGluc3RlYWQg
b2Ygd2hhdGV2ZXIgUmVzb3VyY2VSZXNwb25zZTo6U291cmNlIHRoZSBDYWNoZWRSZXNvdXJjZXMn
cyByZXNwb25zZSBoYXMuCiAgICAgLy8gVGhlIGZyb250ZW5kIGFscmVhZHkga25vd3MgZm9yIGNl
cnRhaW4gdGhhdCB0aGlzIHdhcyBzZXJ2ZWQgZnJvbSB0aGUgbWVtb3J5IGNhY2hlLgogCi0gICAg
bV9mcm9udGVuZERpc3BhdGNoZXItPnJlcXVlc3RTZXJ2ZWRGcm9tTWVtb3J5Q2FjaGUocmVxdWVz
dElkLCBmcmFtZUlkLCBsb2FkZXJJZCwgbG9hZGVyLT51cmwoKS5zdHJpbmcoKSwgdGltZXN0YW1w
KCksIGluaXRpYXRvck9iamVjdCwgYnVpbGRPYmplY3RGb3JDYWNoZWRSZXNvdXJjZSgmcmVzb3Vy
Y2UpKTsKKyAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+cmVxdWVzdFNlcnZlZEZyb21NZW1vcnlD
YWNoZShyZXF1ZXN0SWQsIGZyYW1lSWQsIGxvYWRlcklkLCBsb2FkZXItPnVybCgpLnN0cmluZygp
LCB0aW1lc3RhbXAoKSwgV1RGTW92ZShpbml0aWF0b3JPYmplY3QpLCBidWlsZE9iamVjdEZvckNh
Y2hlZFJlc291cmNlKCZyZXNvdXJjZSkpOwogfQogCiB2b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2Vu
dDo6c2V0SW5pdGlhbFNjcmlwdENvbnRlbnQodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25z
dCBTdHJpbmcmIHNvdXJjZVN0cmluZykKQEAgLTcyOSwyNiArNzMxLDI2IEBAIHZvaWQgSW5zcGVj
dG9yTmV0d29ya0FnZW50OjpkaWRTY2hlZHVsZVN0eWxlUmVjYWxjdWxhdGlvbihEb2N1bWVudCYg
ZG9jdW1lbnQpCiAgICAgICAgIG1fc3R5bGVSZWNhbGN1bGF0aW9uSW5pdGlhdG9yID0gYnVpbGRJ
bml0aWF0b3JPYmplY3QoJmRvY3VtZW50KTsKIH0KIAotUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9j
b2w6Ok5ldHdvcms6OkluaXRpYXRvcj4gSW5zcGVjdG9yTmV0d29ya0FnZW50OjpidWlsZEluaXRp
YXRvck9iamVjdChEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCogcmVz
b3VyY2VSZXF1ZXN0KQorUmVmPFByb3RvY29sOjpOZXR3b3JrOjpJbml0aWF0b3I+IEluc3BlY3Rv
ck5ldHdvcmtBZ2VudDo6YnVpbGRJbml0aWF0b3JPYmplY3QoRG9jdW1lbnQqIGRvY3VtZW50LCBj
b25zdCBSZXNvdXJjZVJlcXVlc3QqIHJlc291cmNlUmVxdWVzdCkKIHsKICAgICAvLyBGSVhNRTog
V29ya2VyIHN1cHBvcnQuCiAgICAgaWYgKCFpc01haW5UaHJlYWQoKSkgewotICAgICAgICByZXR1
cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6SW5pdGlhdG9yOjpjcmVhdGUoKQotICAg
ICAgICAgICAgLnNldFR5cGUoSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6SW5pdGlhdG9y
OjpUeXBlOjpPdGhlcikKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpOZXR3b3JrOjpJbml0aWF0
b3I6OmNyZWF0ZSgpCisgICAgICAgICAgICAuc2V0VHlwZShQcm90b2NvbDo6TmV0d29yazo6SW5p
dGlhdG9yOjpUeXBlOjpPdGhlcikKICAgICAgICAgICAgIC5yZWxlYXNlKCk7CiAgICAgfQogCi0g
ICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OkluaXRpYXRvcj4gaW5pdGlh
dG9yT2JqZWN0OworICAgIFJlZlB0cjxQcm90b2NvbDo6TmV0d29yazo6SW5pdGlhdG9yPiBpbml0
aWF0b3JPYmplY3Q7CiAKICAgICBSZWY8U2NyaXB0Q2FsbFN0YWNrPiBzdGFja1RyYWNlID0gY3Jl
YXRlU2NyaXB0Q2FsbFN0YWNrKEpTRXhlY1N0YXRlOjpjdXJyZW50U3RhdGUoKSk7CiAgICAgaWYg
KHN0YWNrVHJhY2UtPnNpemUoKSA+IDApIHsKLSAgICAgICAgaW5pdGlhdG9yT2JqZWN0ID0gSW5z
cGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6SW5pdGlhdG9yOjpjcmVhdGUoKQotICAgICAgICAg
ICAgLnNldFR5cGUoSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6SW5pdGlhdG9yOjpUeXBl
OjpTY3JpcHQpCisgICAgICAgIGluaXRpYXRvck9iamVjdCA9IFByb3RvY29sOjpOZXR3b3JrOjpJ
bml0aWF0b3I6OmNyZWF0ZSgpCisgICAgICAgICAgICAuc2V0VHlwZShQcm90b2NvbDo6TmV0d29y
azo6SW5pdGlhdG9yOjpUeXBlOjpTY3JpcHQpCiAgICAgICAgICAgICAucmVsZWFzZSgpOwogICAg
ICAgICBpbml0aWF0b3JPYmplY3QtPnNldFN0YWNrVHJhY2Uoc3RhY2tUcmFjZS0+YnVpbGRJbnNw
ZWN0b3JBcnJheSgpKTsKICAgICB9IGVsc2UgaWYgKGRvY3VtZW50ICYmIGRvY3VtZW50LT5zY3Jp
cHRhYmxlRG9jdW1lbnRQYXJzZXIoKSkgewotICAgICAgICBpbml0aWF0b3JPYmplY3QgPSBJbnNw
ZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpJbml0aWF0b3I6OmNyZWF0ZSgpCi0gICAgICAgICAg
ICAuc2V0VHlwZShJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpJbml0aWF0b3I6OlR5cGU6
OlBhcnNlcikKKyAgICAgICAgaW5pdGlhdG9yT2JqZWN0ID0gUHJvdG9jb2w6Ok5ldHdvcms6Oklu
aXRpYXRvcjo6Y3JlYXRlKCkKKyAgICAgICAgICAgIC5zZXRUeXBlKFByb3RvY29sOjpOZXR3b3Jr
OjpJbml0aWF0b3I6OlR5cGU6OlBhcnNlcikKICAgICAgICAgICAgIC5yZWxlYXNlKCk7CiAgICAg
ICAgIGluaXRpYXRvck9iamVjdC0+c2V0VXJsKGRvY3VtZW50LT51cmwoKS5zdHJpbmcoKSk7CiAg
ICAgICAgIGluaXRpYXRvck9iamVjdC0+c2V0TGluZU51bWJlcihkb2N1bWVudC0+c2NyaXB0YWJs
ZURvY3VtZW50UGFyc2VyKCktPnRleHRQb3NpdGlvbigpLm1fbGluZS5vbmVCYXNlZEludCgpKTsK
QEAgLTc1OCw4ICs3NjAsOCBAQCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6
SW5pdGlhdG9yPiBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmJ1aWxkSW5pdAogICAgIGlmIChkb21B
Z2VudCAmJiByZXNvdXJjZVJlcXVlc3QpIHsKICAgICAgICAgaWYgKGF1dG8gaW5zcGVjdG9ySW5p
dGlhdG9yTm9kZUlkZW50aWZpZXIgPSByZXNvdXJjZVJlcXVlc3QtPmluc3BlY3RvckluaXRpYXRv
ck5vZGVJZGVudGlmaWVyKCkpIHsKICAgICAgICAgICAgIGlmICghaW5pdGlhdG9yT2JqZWN0KSB7
Ci0gICAgICAgICAgICAgICAgaW5pdGlhdG9yT2JqZWN0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6
TmV0d29yazo6SW5pdGlhdG9yOjpjcmVhdGUoKQotICAgICAgICAgICAgICAgICAgICAuc2V0VHlw
ZShJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpJbml0aWF0b3I6OlR5cGU6Ok90aGVyKQor
ICAgICAgICAgICAgICAgIGluaXRpYXRvck9iamVjdCA9IFByb3RvY29sOjpOZXR3b3JrOjpJbml0
aWF0b3I6OmNyZWF0ZSgpCisgICAgICAgICAgICAgICAgICAgIC5zZXRUeXBlKFByb3RvY29sOjpO
ZXR3b3JrOjpJbml0aWF0b3I6OlR5cGU6Ok90aGVyKQogICAgICAgICAgICAgICAgICAgICAucmVs
ZWFzZSgpOwogICAgICAgICAgICAgfQogCkBAIC03NjgsMTMgKzc3MCwxMyBAQCBSZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6SW5pdGlhdG9yPiBJbnNwZWN0b3JOZXR3b3JrQWdl
bnQ6OmJ1aWxkSW5pdAogICAgIH0KIAogICAgIGlmIChpbml0aWF0b3JPYmplY3QpCi0gICAgICAg
IHJldHVybiBpbml0aWF0b3JPYmplY3Q7CisgICAgICAgIHJldHVybiBpbml0aWF0b3JPYmplY3Qu
cmVsZWFzZU5vbk51bGwoKTsKIAogICAgIGlmIChtX2lzUmVjYWxjdWxhdGluZ1N0eWxlICYmIG1f
c3R5bGVSZWNhbGN1bGF0aW9uSW5pdGlhdG9yKQotICAgICAgICByZXR1cm4gbV9zdHlsZVJlY2Fs
Y3VsYXRpb25Jbml0aWF0b3I7CisgICAgICAgIHJldHVybiAqbV9zdHlsZVJlY2FsY3VsYXRpb25J
bml0aWF0b3I7CiAKLSAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6SW5p
dGlhdG9yOjpjcmVhdGUoKQotICAgICAgICAuc2V0VHlwZShJbnNwZWN0b3I6OlByb3RvY29sOjpO
ZXR3b3JrOjpJbml0aWF0b3I6OlR5cGU6Ok90aGVyKQorICAgIHJldHVybiBQcm90b2NvbDo6TmV0
d29yazo6SW5pdGlhdG9yOjpjcmVhdGUoKQorICAgICAgICAuc2V0VHlwZShQcm90b2NvbDo6TmV0
d29yazo6SW5pdGlhdG9yOjpUeXBlOjpPdGhlcikKICAgICAgICAgLnJlbGVhc2UoKTsKIH0KIApA
QCAtNzg1LDcgKzc4Nyw3IEBAIHZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50OjpkaWRDcmVhdGVX
ZWJTb2NrZXQodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBVCiAKIHZvaWQgSW5zcGVj
dG9yTmV0d29ya0FnZW50Ojp3aWxsU2VuZFdlYlNvY2tldEhhbmRzaGFrZVJlcXVlc3QodW5zaWdu
ZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCiB7Ci0g
ICAgYXV0byByZXF1ZXN0T2JqZWN0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6V2Vi
U29ja2V0UmVxdWVzdDo6Y3JlYXRlKCkKKyAgICBhdXRvIHJlcXVlc3RPYmplY3QgPSBQcm90b2Nv
bDo6TmV0d29yazo6V2ViU29ja2V0UmVxdWVzdDo6Y3JlYXRlKCkKICAgICAgICAgLnNldEhlYWRl
cnMoYnVpbGRPYmplY3RGb3JIZWFkZXJzKHJlcXVlc3QuaHR0cEhlYWRlckZpZWxkcygpKSkKICAg
ICAgICAgLnJlbGVhc2UoKTsKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+d2ViU29ja2V0V2ls
bFNlbmRIYW5kc2hha2VSZXF1ZXN0KElkZW50aWZpZXJzRmFjdG9yeTo6cmVxdWVzdElkKGlkZW50
aWZpZXIpLCB0aW1lc3RhbXAoKSwgV2FsbFRpbWU6Om5vdygpLnNlY29uZHNTaW5jZUVwb2NoKCku
c2Vjb25kcygpLCBXVEZNb3ZlKHJlcXVlc3RPYmplY3QpKTsKQEAgLTc5Myw3ICs3OTUsNyBAQCB2
b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6d2lsbFNlbmRXZWJTb2NrZXRIYW5kc2hha2VSZXF1
ZXN0KHVuc2lnbmVkIGxvbmcgaWRlbgogCiB2b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6ZGlk
UmVjZWl2ZVdlYlNvY2tldEhhbmRzaGFrZVJlc3BvbnNlKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmll
ciwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCiB7Ci0gICAgYXV0byByZXNwb25z
ZU9iamVjdCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OldlYlNvY2tldFJlc3BvbnNl
OjpjcmVhdGUoKQorICAgIGF1dG8gcmVzcG9uc2VPYmplY3QgPSBQcm90b2NvbDo6TmV0d29yazo6
V2ViU29ja2V0UmVzcG9uc2U6OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRTdGF0dXMocmVzcG9uc2Uu
aHR0cFN0YXR1c0NvZGUoKSkKICAgICAgICAgLnNldFN0YXR1c1RleHQocmVzcG9uc2UuaHR0cFN0
YXR1c1RleHQoKSkKICAgICAgICAgLnNldEhlYWRlcnMoYnVpbGRPYmplY3RGb3JIZWFkZXJzKHJl
c3BvbnNlLmh0dHBIZWFkZXJGaWVsZHMoKSkpCkBAIC04MjAsMTIgKzgyMiw3IEBAIHZvaWQgSW5z
cGVjdG9yTmV0d29ya0FnZW50OjpkaWRSZWNlaXZlV2ViU29ja2V0RnJhbWVFcnJvcih1bnNpZ25l
ZCBsb25nIGlkZW50aWZpCiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPndlYlNvY2tldEZyYW1l
RXJyb3IoSWRlbnRpZmllcnNGYWN0b3J5OjpyZXF1ZXN0SWQoaWRlbnRpZmllciksIHRpbWVzdGFt
cCgpLCBlcnJvck1lc3NhZ2UpOwogfQogCi12b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6ZW5h
YmxlKEVycm9yU3RyaW5nJikKLXsKLSAgICBlbmFibGUoKTsKLX0KLQotdm9pZCBJbnNwZWN0b3JO
ZXR3b3JrQWdlbnQ6OmVuYWJsZSgpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNw
ZWN0b3JOZXR3b3JrQWdlbnQ6OmVuYWJsZSgpCiB7CiAgICAgbV9lbmFibGVkID0gdHJ1ZTsKICAg
ICBtX2luc3RydW1lbnRpbmdBZ2VudHMuc2V0RW5hYmxlZE5ldHdvcmtBZ2VudCh0aGlzKTsKQEAg
LTg1Nyw5ICs4NTQsMTEgQEAgdm9pZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmVuYWJsZSgpCiAg
ICAgICAgICAgICAgICAgZGlkQ2xvc2VXZWJTb2NrZXQoaWRlbnRpZmllcik7CiAgICAgICAgIH0K
ICAgICB9CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2Vu
dDo6ZGlzYWJsZShFcnJvclN0cmluZyYpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJ
bnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmRpc2FibGUoKQogewogICAgIG1fZW5hYmxlZCA9IGZhbHNl
OwogICAgIG1faW50ZXJjZXB0aW9uRW5hYmxlZCA9IGZhbHNlOwpAQCAtODcyLDkgKzg3MSwxMSBA
QCB2b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6ZGlzYWJsZShFcnJvclN0cmluZyYpCiAgICAg
Y29udGludWVQZW5kaW5nUmVzcG9uc2VzKCk7CiAKICAgICBzZXRSZXNvdXJjZUNhY2hpbmdEaXNh
YmxlZChmYWxzZSk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi1ib29sIEluc3BlY3Rvck5ldHdv
cmtBZ2VudDo6c2hvdWxkSW50ZXJjZXB0KFVSTCB1cmwsIE5ldHdvcmtTdGFnZSBuZXR3b3JrU3Rh
Z2UpCitib29sIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6c2hvdWxkSW50ZXJjZXB0KFVSTCB1cmws
IFByb3RvY29sOjpOZXR3b3JrOjpOZXR3b3JrU3RhZ2UgbmV0d29ya1N0YWdlKQogewogICAgIHVy
bC5yZW1vdmVGcmFnbWVudElkZW50aWZpZXIoKTsKIApAQCAtOTExLDU2ICs5MTIsNTUgQEAgdm9p
ZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmNvbnRpbnVlUGVuZGluZ1Jlc3BvbnNlcygpCiAgICAg
bV9wZW5kaW5nSW50ZXJjZXB0UmVzcG9uc2VzLmNsZWFyKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9y
TmV0d29ya0FnZW50OjpzZXRFeHRyYUhUVFBIZWFkZXJzKEVycm9yU3RyaW5nJiwgY29uc3QgSlNP
Tjo6T2JqZWN0JiBoZWFkZXJzKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVj
dG9yTmV0d29ya0FnZW50OjpzZXRFeHRyYUhUVFBIZWFkZXJzKFJlZjxKU09OOjpPYmplY3Q+JiYg
aGVhZGVycykKIHsKLSAgICBmb3IgKGF1dG8mIGVudHJ5IDogaGVhZGVycykgewotICAgICAgICBT
dHJpbmcgc3RyaW5nVmFsdWU7Ci0gICAgICAgIGlmIChlbnRyeS52YWx1ZS0+YXNTdHJpbmcoc3Ry
aW5nVmFsdWUpKQorICAgIGZvciAoYXV0byYgZW50cnkgOiBoZWFkZXJzLmdldCgpKSB7CisgICAg
ICAgIGF1dG8gc3RyaW5nVmFsdWUgPSBlbnRyeS52YWx1ZS0+YXNTdHJpbmcoKTsKKyAgICAgICAg
aWYgKCEhc3RyaW5nVmFsdWUpCiAgICAgICAgICAgICBtX2V4dHJhUmVxdWVzdEhlYWRlcnMuc2V0
KGVudHJ5LmtleSwgc3RyaW5nVmFsdWUpOwogICAgIH0KKworICAgIHJldHVybiB7IH07CiB9CiAK
LXZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50OjpnZXRSZXNwb25zZUJvZHkoRXJyb3JTdHJpbmcm
IGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgU3RyaW5nKiBjb250ZW50LCBi
b29sKiBiYXNlNjRFbmNvZGVkKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8c3RkOjp0dXBsZTxT
dHJpbmcsIGJvb2wgLyogYmFzZTY0RW5jb2RlZCAqLz4+IEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6
Z2V0UmVzcG9uc2VCb2R5KGNvbnN0IFByb3RvY29sOjpOZXR3b3JrOjpSZXF1ZXN0SWQmIHJlcXVl
c3RJZCkKIHsKICAgICBOZXR3b3JrUmVzb3VyY2VzRGF0YTo6UmVzb3VyY2VEYXRhIGNvbnN0KiBy
ZXNvdXJjZURhdGEgPSBtX3Jlc291cmNlc0RhdGEtPmRhdGEocmVxdWVzdElkKTsKLSAgICBpZiAo
IXJlc291cmNlRGF0YSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIHJlc291cmNl
IGZvciBnaXZlbiByZXF1ZXN0SWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYg
KCFyZXNvdXJjZURhdGEpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTWlzc2luZyBy
ZXNvdXJjZSBmb3IgZ2l2ZW4gcmVxdWVzdElkIl9zKTsKIAotICAgIGlmIChyZXNvdXJjZURhdGEt
Pmhhc0NvbnRlbnQoKSkgewotICAgICAgICAqYmFzZTY0RW5jb2RlZCA9IHJlc291cmNlRGF0YS0+
YmFzZTY0RW5jb2RlZCgpOwotICAgICAgICAqY29udGVudCA9IHJlc291cmNlRGF0YS0+Y29udGVu
dCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmIChyZXNvdXJjZURhdGEtPmhhc0Nv
bnRlbnQoKSkKKyAgICAgICAgcmV0dXJuIHsgeyByZXNvdXJjZURhdGEtPmNvbnRlbnQoKSwgcmVz
b3VyY2VEYXRhLT5iYXNlNjRFbmNvZGVkKCkgfSB9OwogCi0gICAgaWYgKHJlc291cmNlRGF0YS0+
aXNDb250ZW50RXZpY3RlZCgpKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIlJlc291cmNlIGNv
bnRlbnQgd2FzIGV2aWN0ZWQgZnJvbSBpbnNwZWN0b3IgY2FjaGUiX3M7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9CisgICAgaWYgKHJlc291cmNlRGF0YS0+aXNDb250ZW50RXZpY3RlZCgpKQorICAg
ICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIlJlc291cmNlIGNvbnRlbnQgd2FzIGV2aWN0ZWQg
ZnJvbSBpbnNwZWN0b3IgY2FjaGUiX3MpOwogCiAgICAgaWYgKHJlc291cmNlRGF0YS0+YnVmZmVy
KCkgJiYgIXJlc291cmNlRGF0YS0+dGV4dEVuY29kaW5nTmFtZSgpLmlzTnVsbCgpKSB7Ci0gICAg
ICAgICpiYXNlNjRFbmNvZGVkID0gZmFsc2U7Ci0gICAgICAgIGlmIChJbnNwZWN0b3JQYWdlQWdl
bnQ6OnNoYXJlZEJ1ZmZlckNvbnRlbnQocmVzb3VyY2VEYXRhLT5idWZmZXIoKSwgcmVzb3VyY2VE
YXRhLT50ZXh0RW5jb2RpbmdOYW1lKCksICpiYXNlNjRFbmNvZGVkLCBjb250ZW50KSkKLSAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgU3RyaW5nIGJvZHk7CisgICAgICAgIGlmIChJbnNwZWN0
b3JQYWdlQWdlbnQ6OnNoYXJlZEJ1ZmZlckNvbnRlbnQocmVzb3VyY2VEYXRhLT5idWZmZXIoKSwg
cmVzb3VyY2VEYXRhLT50ZXh0RW5jb2RpbmdOYW1lKCksIGZhbHNlLCAmYm9keSkpCisgICAgICAg
ICAgICByZXR1cm4geyB7IGJvZHksIGZhbHNlIH0gfTsKICAgICB9CiAKICAgICBpZiAocmVzb3Vy
Y2VEYXRhLT5jYWNoZWRSZXNvdXJjZSgpKSB7Ci0gICAgICAgIGlmIChJbnNwZWN0b3JOZXR3b3Jr
QWdlbnQ6OmNhY2hlZFJlc291cmNlQ29udGVudCgqcmVzb3VyY2VEYXRhLT5jYWNoZWRSZXNvdXJj
ZSgpLCBjb250ZW50LCBiYXNlNjRFbmNvZGVkKSkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgU3RyaW5nIGJvZHk7CisgICAgICAgIGJvb2wgYmFzZTY0RW5jb2RlZDsKKyAgICAgICAgaWYg
KEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6Y2FjaGVkUmVzb3VyY2VDb250ZW50KCpyZXNvdXJjZURh
dGEtPmNhY2hlZFJlc291cmNlKCksICZib2R5LCAmYmFzZTY0RW5jb2RlZCkpCisgICAgICAgICAg
ICByZXR1cm4geyB7IGJvZHksIGJhc2U2NEVuY29kZWQgfSB9OwogICAgIH0KIAotICAgIGVycm9y
U3RyaW5nID0gIk1pc3NpbmcgY29udGVudCBvZiByZXNvdXJjZSBmb3IgZ2l2ZW4gcmVxdWVzdElk
Il9zOworICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTWlzc2luZyBjb250ZW50IG9mIHJlc291
cmNlIGZvciBnaXZlbiByZXF1ZXN0SWQiX3MpOwogfQogCi12b2lkIEluc3BlY3Rvck5ldHdvcmtB
Z2VudDo6c2V0UmVzb3VyY2VDYWNoaW5nRGlzYWJsZWQoRXJyb3JTdHJpbmcmLCBib29sIGRpc2Fi
bGVkKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yTmV0d29ya0FnZW50
OjpzZXRSZXNvdXJjZUNhY2hpbmdEaXNhYmxlZChib29sIGRpc2FibGVkKQogewotICAgIHNldFJl
c291cmNlQ2FjaGluZ0Rpc2FibGVkKGRpc2FibGVkKTsKKyAgICBzZXRSZXNvdXJjZUNhY2hpbmdE
aXNhYmxlZEludGVyYWwoZGlzYWJsZWQpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJ
bnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmxvYWRSZXNvdXJjZShjb25zdCBTdHJpbmcmIGZyYW1lSWQs
IGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nLCBSZWY8TG9hZFJlc291cmNlQ2FsbGJhY2s+JiYgY2Fs
bGJhY2spCit2b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6bG9hZFJlc291cmNlKGNvbnN0IFBy
b3RvY29sOjpOZXR3b3JrOjpGcmFtZUlkJiBmcmFtZUlkLCBjb25zdCBTdHJpbmcmIHVybFN0cmlu
ZywgUmVmPExvYWRSZXNvdXJjZUNhbGxiYWNrPiYmIGNhbGxiYWNrKQogewotICAgIEVycm9yU3Ry
aW5nIGVycm9yU3RyaW5nOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsK
ICAgICBhdXRvKiBjb250ZXh0ID0gc2NyaXB0RXhlY3V0aW9uQ29udGV4dChlcnJvclN0cmluZywg
ZnJhbWVJZCk7CiAgICAgaWYgKCFjb250ZXh0KSB7CiAgICAgICAgIGNhbGxiYWNrLT5zZW5kRmFp
bHVyZShlcnJvclN0cmluZyk7CkBAIC05OTQsMjYgKzk5NCwyMiBAQCB2b2lkIEluc3BlY3Rvck5l
dHdvcmtBZ2VudDo6bG9hZFJlc291cmNlKGNvbnN0IFN0cmluZyYgZnJhbWVJZCwgY29uc3QgU3Ry
aW5nJiB1cgogICAgIGluc3BlY3RvclRocmVhZGFibGVMb2FkZXJDbGllbnQtPnNldExvYWRlcihX
VEZNb3ZlKGxvYWRlcikpOwogfQogCi12b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6Z2V0U2Vy
aWFsaXplZENlcnRpZmljYXRlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5n
JiByZXF1ZXN0SWQsIFN0cmluZyogc2VyaWFsaXplZENlcnRpZmljYXRlKQorUHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8U3RyaW5nPiBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmdldFNlcmlhbGl6ZWRD
ZXJ0aWZpY2F0ZShjb25zdCBQcm90b2NvbDo6TmV0d29yazo6UmVxdWVzdElkJiByZXF1ZXN0SWQp
CiB7CiAgICAgYXV0byogcmVzb3VyY2VEYXRhID0gbV9yZXNvdXJjZXNEYXRhLT5kYXRhKHJlcXVl
c3RJZCk7Ci0gICAgaWYgKCFyZXNvdXJjZURhdGEpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAi
TWlzc2luZyByZXNvdXJjZSBmb3IgZ2l2ZW4gcmVxdWVzdElkIl9zOwotICAgICAgICByZXR1cm47
Ci0gICAgfQorICAgIGlmICghcmVzb3VyY2VEYXRhKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoIk1pc3NpbmcgcmVzb3VyY2UgZm9yIGdpdmVuIHJlcXVlc3RJZCJfcyk7CiAKICAgICBh
dXRvJiBjZXJ0aWZpY2F0ZSA9IHJlc291cmNlRGF0YS0+Y2VydGlmaWNhdGVJbmZvKCk7Ci0gICAg
aWYgKCFjZXJ0aWZpY2F0ZSB8fCBjZXJ0aWZpY2F0ZS52YWx1ZSgpLmlzRW1wdHkoKSkgewotICAg
ICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIGNlcnRpZmljYXRlIG9mIHJlc291cmNlIGZvciBn
aXZlbiByZXF1ZXN0SWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKCFjZXJ0
aWZpY2F0ZSB8fCBjZXJ0aWZpY2F0ZS52YWx1ZSgpLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJu
IG1ha2VVbmV4cGVjdGVkKCJNaXNzaW5nIGNlcnRpZmljYXRlIG9mIHJlc291cmNlIGZvciBnaXZl
biByZXF1ZXN0SWQiX3MpOwogCiAgICAgV1RGOjpQZXJzaXN0ZW5jZTo6RW5jb2RlciBlbmNvZGVy
OwogICAgIFdURjo6UGVyc2lzdGVuY2U6OkNvZGVyPFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbz46
OmVuY29kZShlbmNvZGVyLCBjZXJ0aWZpY2F0ZS52YWx1ZSgpKTsKLSAgICAqc2VyaWFsaXplZENl
cnRpZmljYXRlID0gYmFzZTY0RW5jb2RlKGVuY29kZXIuYnVmZmVyKCksIGVuY29kZXIuYnVmZmVy
U2l6ZSgpKTsKKyAgICByZXR1cm4gYmFzZTY0RW5jb2RlKGVuY29kZXIuYnVmZmVyKCksIGVuY29k
ZXIuYnVmZmVyU2l6ZSgpKTsKIH0KIAotV2ViU29ja2V0KiBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6
OndlYlNvY2tldEZvclJlcXVlc3RJZChjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCkKK1dlYlNvY2tl
dCogSW5zcGVjdG9yTmV0d29ya0FnZW50Ojp3ZWJTb2NrZXRGb3JSZXF1ZXN0SWQoY29uc3QgUHJv
dG9jb2w6Ok5ldHdvcms6OlJlcXVlc3RJZCYgcmVxdWVzdElkKQogewogICAgIExvY2tIb2xkZXIg
bG9jayhXZWJTb2NrZXQ6OmFsbEFjdGl2ZVdlYlNvY2tldHNNdXRleCgpKTsKIApAQCAtMTAzMSwz
OSArMTAyNywzNiBAQCBzdGF0aWMgSlNDOjpKU1ZhbHVlIHdlYlNvY2tldEFzU2NyaXB0VmFsdWUo
SlNDOjpKU0dsb2JhbE9iamVjdCYgc3RhdGUsIFdlYlNvY2tldAogICAgIHJldHVybiB0b0pTKCZz
dGF0ZSwgZGVwcmVjYXRlZEdsb2JhbE9iamVjdEZvclByb3RvdHlwZSgmc3RhdGUpLCB3ZWJTb2Nr
ZXQpOwogfQogCi12b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6cmVzb2x2ZVdlYlNvY2tldChF
cnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBjb25zdCBT
dHJpbmcqIG9iamVjdEdyb3VwLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6
UmVtb3RlT2JqZWN0PiYgcmVzdWx0KQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPFByb3Rv
Y29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+PiBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OnJlc29s
dmVXZWJTb2NrZXQoY29uc3QgUHJvdG9jb2w6Ok5ldHdvcms6OlJlcXVlc3RJZCYgcmVxdWVzdElk
LCBjb25zdCBTdHJpbmcmIG9iamVjdEdyb3VwKQogewogICAgIFdlYlNvY2tldCogd2ViU29ja2V0
ID0gd2ViU29ja2V0Rm9yUmVxdWVzdElkKHJlcXVlc3RJZCk7Ci0gICAgaWYgKCF3ZWJTb2NrZXQp
IHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWlzc2luZyB3ZWIgc29ja2V0IGZvciBnaXZlbiBy
ZXF1ZXN0SWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKCF3ZWJTb2NrZXQp
CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTWlzc2luZyB3ZWIgc29ja2V0IGZvciBn
aXZlbiByZXF1ZXN0SWQiX3MpOwogCiAgICAgLy8gRklYTUU6IDxodHRwczovL3dlYmtpdC5vcmcv
Yi8xNjg0NzU+IFdlYiBJbnNwZWN0b3I6IENvcnJlY3RseSBkaXNwbGF5IGlmcmFtZSdzIGFuZCB3
b3JrZXIncyBXZWJTb2NrZXRzCiAgICAgaWYgKCFpczxEb2N1bWVudD4od2ViU29ja2V0LT5zY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCkpKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBt
YWtlVW5leHBlY3RlZCgiTm90IHN1cHBvcnRlZCIpOwogCiAgICAgYXV0byogZG9jdW1lbnQgPSBk
b3duY2FzdDxEb2N1bWVudD4od2ViU29ja2V0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOwog
ICAgIGF1dG8qIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSkgewot
ICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIGZyYW1lIG9mIHdlYiBzb2NrZXQgZm9yIGdp
dmVuIHJlcXVlc3RJZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoIWZyYW1l
KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk1pc3NpbmcgZnJhbWUgb2Ygd2ViIHNv
Y2tldCBmb3IgZ2l2ZW4gcmVxdWVzdElkIl9zKTsKIAogICAgIGF1dG8mIHN0YXRlID0gKm1haW5X
b3JsZEV4ZWNTdGF0ZShmcmFtZSk7CiAgICAgYXV0byBpbmplY3RlZFNjcmlwdCA9IG1faW5qZWN0
ZWRTY3JpcHRNYW5hZ2VyLmluamVjdGVkU2NyaXB0Rm9yKCZzdGF0ZSk7CiAgICAgQVNTRVJUKCFp
bmplY3RlZFNjcmlwdC5oYXNOb1ZhbHVlKCkpOwogCi0gICAgU3RyaW5nIG9iamVjdEdyb3VwTmFt
ZSA9IG9iamVjdEdyb3VwID8gKm9iamVjdEdyb3VwIDogU3RyaW5nKCk7Ci0gICAgcmVzdWx0ID0g
aW5qZWN0ZWRTY3JpcHQud3JhcE9iamVjdCh3ZWJTb2NrZXRBc1NjcmlwdFZhbHVlKHN0YXRlLCB3
ZWJTb2NrZXQpLCBvYmplY3RHcm91cE5hbWUpOworICAgIGF1dG8gb2JqZWN0ID0gaW5qZWN0ZWRT
Y3JpcHQud3JhcE9iamVjdCh3ZWJTb2NrZXRBc1NjcmlwdFZhbHVlKHN0YXRlLCB3ZWJTb2NrZXQp
LCBvYmplY3RHcm91cCk7CisgICAgaWYgKCFvYmplY3QpCisgICAgICAgIHJldHVybiBtYWtlVW5l
eHBlY3RlZCgiSW50ZXJuYWwgZXJyb3I6IHVuYWJsZSB0byBjYXN0IFdlYlNvY2tldCIpOworCisg
ICAgcmV0dXJuIG9iamVjdC5yZWxlYXNlTm9uTnVsbCgpOwogfQogCi12b2lkIEluc3BlY3Rvck5l
dHdvcmtBZ2VudDo6c2V0SW50ZXJjZXB0aW9uRW5hYmxlZChFcnJvclN0cmluZyYgZXJyb3JTdHJp
bmcsIGJvb2wgZW5hYmxlZCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3Rv
ck5ldHdvcmtBZ2VudDo6c2V0SW50ZXJjZXB0aW9uRW5hYmxlZChib29sIGVuYWJsZWQpCiB7Ci0g
ICAgaWYgKG1faW50ZXJjZXB0aW9uRW5hYmxlZCA9PSBlbmFibGVkKSB7Ci0gICAgICAgIGVycm9y
U3RyaW5nID0gbV9pbnRlcmNlcHRpb25FbmFibGVkID8gIkludGVyY2VwdGlvbiBhbHJlYWR5IGVu
YWJsZWQiX3MgOiAiSW50ZXJjZXB0aW9uIGFscmVhZHkgZGlzYWJsZWQiX3M7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9CisgICAgaWYgKG1faW50ZXJjZXB0aW9uRW5hYmxlZCA9PSBlbmFibGVkKQor
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQobV9pbnRlcmNlcHRpb25FbmFibGVkID8gIklu
dGVyY2VwdGlvbiBhbHJlYWR5IGVuYWJsZWQiX3MgOiAiSW50ZXJjZXB0aW9uIGFscmVhZHkgZGlz
YWJsZWQiX3MpOwogCiAgICAgbV9pbnRlcmNlcHRpb25FbmFibGVkID0gZW5hYmxlZDsKIApAQCAt
MTA3MSw0NiArMTA2NCw0MCBAQCB2b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6c2V0SW50ZXJj
ZXB0aW9uRW5hYmxlZChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGJvbwogICAgICAgICBjb250
aW51ZVBlbmRpbmdSZXF1ZXN0cygpOwogICAgICAgICBjb250aW51ZVBlbmRpbmdSZXNwb25zZXMo
KTsKICAgICB9CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3Rvck5ldHdvcmtB
Z2VudDo6YWRkSW50ZXJjZXB0aW9uKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3Ry
aW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgbmV0d29ya1N0YWdlU3RyaW5nLCBjb25zdCBib29sKiBv
cHRpb25hbENhc2VTZW5zaXRpdmUsIGNvbnN0IGJvb2wqIG9wdGlvbmFsSXNSZWdleCkKK1Byb3Rv
Y29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6YWRkSW50ZXJj
ZXB0aW9uKGNvbnN0IFN0cmluZyYgdXJsLCBQcm90b2NvbDo6TmV0d29yazo6TmV0d29ya1N0YWdl
IG5ldHdvcmtTdGFnZSwgT3B0aW9uYWw8Ym9vbD4mJiBjYXNlU2Vuc2l0aXZlLCBPcHRpb25hbDxi
b29sPiYmIGlzUmVnZXgpCiB7Ci0gICAgYXV0byBuZXR3b3JrU3RhZ2UgPSBJbnNwZWN0b3I6OlBy
b3RvY29sOjpJbnNwZWN0b3JIZWxwZXJzOjpwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVj
dG9yOjpQcm90b2NvbDo6TmV0d29yazo6TmV0d29ya1N0YWdlPihuZXR3b3JrU3RhZ2VTdHJpbmcp
OwotICAgIGlmICghbmV0d29ya1N0YWdlKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gbWFrZVN0
cmluZygiVW5rbm93biBuZXR3b3JrU3RhZ2U6ICJfcywgbmV0d29ya1N0YWdlU3RyaW5nKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIEludGVyY2VwdCBpbnRlcmNlcHQ7CiAgICAgaW50
ZXJjZXB0LnVybCA9IHVybDsKLSAgICBpZiAob3B0aW9uYWxDYXNlU2Vuc2l0aXZlKQotICAgICAg
ICBpbnRlcmNlcHQuY2FzZVNlbnNpdGl2ZSA9ICpvcHRpb25hbENhc2VTZW5zaXRpdmU7Ci0gICAg
aWYgKG9wdGlvbmFsSXNSZWdleCkKLSAgICAgICAgaW50ZXJjZXB0LmlzUmVnZXggPSAqb3B0aW9u
YWxJc1JlZ2V4OwotICAgIGludGVyY2VwdC5uZXR3b3JrU3RhZ2UgPSBuZXR3b3JrU3RhZ2UudmFs
dWUoKTsKKyAgICBpZiAoY2FzZVNlbnNpdGl2ZSkKKyAgICAgICAgaW50ZXJjZXB0LmNhc2VTZW5z
aXRpdmUgPSAqY2FzZVNlbnNpdGl2ZTsKKyAgICBpZiAoaXNSZWdleCkKKyAgICAgICAgaW50ZXJj
ZXB0LmlzUmVnZXggPSAqaXNSZWdleDsKKyAgICBpbnRlcmNlcHQubmV0d29ya1N0YWdlID0gbmV0
d29ya1N0YWdlOwogCiAgICAgaWYgKCFtX2ludGVyY2VwdHMuYXBwZW5kSWZOb3RDb250YWlucyhp
bnRlcmNlcHQpKQotICAgICAgICBlcnJvclN0cmluZyA9ICJJbnRlcmNlcHQgZm9yIGdpdmVuIHVy
bCwgZ2l2ZW4gaXNSZWdleCwgYW5kIGdpdmVuIHN0YWdlIGFscmVhZHkgZXhpc3RzIl9zOworICAg
ICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkludGVyY2VwdCBmb3IgZ2l2ZW4gdXJsLCBnaXZl
biBpc1JlZ2V4LCBhbmQgZ2l2ZW4gc3RhZ2UgYWxyZWFkeSBleGlzdHMiX3MpOworCisgICAgcmV0
dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OnJlbW92ZUludGVyY2Vw
dGlvbihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBT
dHJpbmcmIG5ldHdvcmtTdGFnZVN0cmluZywgY29uc3QgYm9vbCogb3B0aW9uYWxDYXNlU2Vuc2l0
aXZlLCBjb25zdCBib29sKiBvcHRpb25hbElzUmVnZXgpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdP
cjx2b2lkPiBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OnJlbW92ZUludGVyY2VwdGlvbihjb25zdCBT
dHJpbmcmIHVybCwgUHJvdG9jb2w6Ok5ldHdvcms6Ok5ldHdvcmtTdGFnZSBuZXR3b3JrU3RhZ2Us
IE9wdGlvbmFsPGJvb2w+JiYgY2FzZVNlbnNpdGl2ZSwgT3B0aW9uYWw8Ym9vbD4mJiBpc1JlZ2V4
KQogewotICAgIGF1dG8gbmV0d29ya1N0YWdlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6SW5zcGVj
dG9ySGVscGVyczo6cGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6
Ok5ldHdvcms6Ok5ldHdvcmtTdGFnZT4obmV0d29ya1N0YWdlU3RyaW5nKTsKLSAgICBpZiAoIW5l
dHdvcmtTdGFnZSkgewotICAgICAgICBlcnJvclN0cmluZyA9IG1ha2VTdHJpbmcoIlVua25vd24g
bmV0d29ya1N0YWdlOiAiX3MsIG5ldHdvcmtTdGFnZVN0cmluZyk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KICAgICBJbnRlcmNlcHQgaW50ZXJjZXB0OwogICAgIGludGVyY2VwdC51cmwgPSB1
cmw7Ci0gICAgaWYgKG9wdGlvbmFsQ2FzZVNlbnNpdGl2ZSkKLSAgICAgICAgaW50ZXJjZXB0LmNh
c2VTZW5zaXRpdmUgPSAqb3B0aW9uYWxDYXNlU2Vuc2l0aXZlOwotICAgIGlmIChvcHRpb25hbElz
UmVnZXgpCi0gICAgICAgIGludGVyY2VwdC5pc1JlZ2V4ID0gKm9wdGlvbmFsSXNSZWdleDsKLSAg
ICBpbnRlcmNlcHQubmV0d29ya1N0YWdlID0gbmV0d29ya1N0YWdlLnZhbHVlKCk7CisgICAgaWYg
KGNhc2VTZW5zaXRpdmUpCisgICAgICAgIGludGVyY2VwdC5jYXNlU2Vuc2l0aXZlID0gKmNhc2VT
ZW5zaXRpdmU7CisgICAgaWYgKGlzUmVnZXgpCisgICAgICAgIGludGVyY2VwdC5pc1JlZ2V4ID0g
KmlzUmVnZXg7CisgICAgaW50ZXJjZXB0Lm5ldHdvcmtTdGFnZSA9IG5ldHdvcmtTdGFnZTsKIAog
ICAgIGlmICghbV9pbnRlcmNlcHRzLnJlbW92ZUFsbChpbnRlcmNlcHQpKQotICAgICAgICBlcnJv
clN0cmluZyA9ICJNaXNzaW5nIGludGVyY2VwdCBmb3IgZ2l2ZW4gdXJsLCBnaXZlbiBpc1JlZ2V4
LCBhbmQgZ2l2ZW4gc3RhZ2UiX3M7CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTWlz
c2luZyBpbnRlcmNlcHQgZm9yIGdpdmVuIHVybCwgZ2l2ZW4gaXNSZWdleCwgYW5kIGdpdmVuIHN0
YWdlIl9zKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKIGJvb2wgSW5zcGVjdG9yTmV0d29ya0Fn
ZW50Ojp3aWxsSW50ZXJjZXB0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKQEAgLTEx
MTgsOCArMTEwNSw4IEBAIGJvb2wgSW5zcGVjdG9yTmV0d29ya0FnZW50Ojp3aWxsSW50ZXJjZXB0
KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKICAgICBpZiAoIW1faW50ZXJjZXB0aW9u
RW5hYmxlZCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmV0dXJuIHNob3VsZEludGVy
Y2VwdChyZXF1ZXN0LnVybCgpLCBOZXR3b3JrU3RhZ2U6OlJlcXVlc3QpCi0gICAgICAgIHx8IHNo
b3VsZEludGVyY2VwdChyZXF1ZXN0LnVybCgpLCBOZXR3b3JrU3RhZ2U6OlJlc3BvbnNlKTsKKyAg
ICByZXR1cm4gc2hvdWxkSW50ZXJjZXB0KHJlcXVlc3QudXJsKCksIFByb3RvY29sOjpOZXR3b3Jr
OjpOZXR3b3JrU3RhZ2U6OlJlcXVlc3QpCisgICAgICAgIHx8IHNob3VsZEludGVyY2VwdChyZXF1
ZXN0LnVybCgpLCBQcm90b2NvbDo6TmV0d29yazo6TmV0d29ya1N0YWdlOjpSZXNwb25zZSk7CiB9
CiAKIGJvb2wgSW5zcGVjdG9yTmV0d29ya0FnZW50OjpzaG91bGRJbnRlcmNlcHRSZXF1ZXN0KGNv
bnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKQEAgLTExMjcsNyArMTExNCw3IEBAIGJvb2wg
SW5zcGVjdG9yTmV0d29ya0FnZW50OjpzaG91bGRJbnRlcmNlcHRSZXF1ZXN0KGNvbnN0IFJlc291
cmNlUmVxdWVzdCYgcmVxdWVzCiAgICAgaWYgKCFtX2ludGVyY2VwdGlvbkVuYWJsZWQpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiBzaG91bGRJbnRlcmNlcHQocmVxdWVzdC51
cmwoKSwgTmV0d29ya1N0YWdlOjpSZXF1ZXN0KTsKKyAgICByZXR1cm4gc2hvdWxkSW50ZXJjZXB0
KHJlcXVlc3QudXJsKCksIFByb3RvY29sOjpOZXR3b3JrOjpOZXR3b3JrU3RhZ2U6OlJlcXVlc3Qp
OwogfQogCiBib29sIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6c2hvdWxkSW50ZXJjZXB0UmVzcG9u
c2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCkBAIC0xMTM1LDcgKzExMjIsNyBA
QCBib29sIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6c2hvdWxkSW50ZXJjZXB0UmVzcG9uc2UoY29u
c3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcAogICAgIGlmICghbV9pbnRlcmNlcHRpb25FbmFibGVk
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gc2hvdWxkSW50ZXJjZXB0KHJl
c3BvbnNlLnVybCgpLCBOZXR3b3JrU3RhZ2U6OlJlc3BvbnNlKTsKKyAgICByZXR1cm4gc2hvdWxk
SW50ZXJjZXB0KHJlc3BvbnNlLnVybCgpLCBQcm90b2NvbDo6TmV0d29yazo6TmV0d29ya1N0YWdl
OjpSZXNwb25zZSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50OjppbnRlcmNlcHRS
ZXF1ZXN0KFJlc291cmNlTG9hZGVyJiBsb2FkZXIsIEZ1bmN0aW9uPHZvaWQoY29uc3QgUmVzb3Vy
Y2VSZXF1ZXN0Jik+JiYgaGFuZGxlcikKQEAgLTExNjYsOTIgKzExNTMsODkgQEAgdm9pZCBJbnNw
ZWN0b3JOZXR3b3JrQWdlbnQ6OmludGVyY2VwdFJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9u
c2UmIHJlc3BvbnNlLAogCiAgICAgbV9wZW5kaW5nSW50ZXJjZXB0UmVzcG9uc2VzLnNldChyZXF1
ZXN0SWQsIG1ha2VVbmlxdWU8UGVuZGluZ0ludGVyY2VwdFJlc3BvbnNlPihyZXNwb25zZSwgV1RG
TW92ZShoYW5kbGVyKSkpOwogCi0gICAgbV9mcm9udGVuZERpc3BhdGNoZXItPnJlc3BvbnNlSW50
ZXJjZXB0ZWQocmVxdWVzdElkLCBidWlsZE9iamVjdEZvclJlc291cmNlUmVzcG9uc2UocmVzcG9u
c2UsIG51bGxwdHIpKTsKKyAgICBhdXRvIHJlc291cmNlUmVzcG9uc2UgPSBidWlsZE9iamVjdEZv
clJlc291cmNlUmVzcG9uc2UocmVzcG9uc2UsIG51bGxwdHIpOworICAgIGlmICghcmVzb3VyY2VS
ZXNwb25zZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPnJl
c3BvbnNlSW50ZXJjZXB0ZWQocmVxdWVzdElkLCByZXNvdXJjZVJlc3BvbnNlLnJlbGVhc2VOb25O
dWxsKCkpOwogfQogCi12b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6aW50ZXJjZXB0Q29udGlu
dWUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgY29u
c3QgU3RyaW5nJiBuZXR3b3JrU3RhZ2VTdHJpbmcpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2
b2lkPiBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmludGVyY2VwdENvbnRpbnVlKGNvbnN0IFByb3Rv
Y29sOjpOZXR3b3JrOjpSZXF1ZXN0SWQmIHJlcXVlc3RJZCwgUHJvdG9jb2w6Ok5ldHdvcms6Ok5l
dHdvcmtTdGFnZSBuZXR3b3JrU3RhZ2UpCiB7Ci0gICAgYXV0byBuZXR3b3JrU3RhZ2UgPSBJbnNw
ZWN0b3I6OlByb3RvY29sOjpJbnNwZWN0b3JIZWxwZXJzOjpwYXJzZUVudW1WYWx1ZUZyb21TdHJp
bmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6TmV0d29ya1N0YWdlPihuZXR3b3JrU3Rh
Z2VTdHJpbmcpOwotICAgIGlmICghbmV0d29ya1N0YWdlKSB7Ci0gICAgICAgIGVycm9yU3RyaW5n
ID0gbWFrZVN0cmluZygiVW5rbm93biBuZXR3b3JrU3RhZ2U6ICJfcywgbmV0d29ya1N0YWdlU3Ry
aW5nKTsKLSAgICAgICAgcmV0dXJuOworICAgIHN3aXRjaCAobmV0d29ya1N0YWdlKSB7CisgICAg
Y2FzZSBQcm90b2NvbDo6TmV0d29yazo6TmV0d29ya1N0YWdlOjpSZXF1ZXN0OgorICAgICAgICBp
ZiAoYXV0byBwZW5kaW5nSW50ZXJjZXB0UmVxdWVzdCA9IG1fcGVuZGluZ0ludGVyY2VwdFJlcXVl
c3RzLnRha2UocmVxdWVzdElkKSkgeworICAgICAgICAgICAgcGVuZGluZ0ludGVyY2VwdFJlcXVl
c3QtPmNvbnRpbnVlV2l0aE9yaWdpbmFsUmVxdWVzdCgpOworICAgICAgICAgICAgcmV0dXJuIHsg
fTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk1pc3NpbmcgcGVu
ZGluZyBpbnRlcmNlcHQgcmVxdWVzdCBmb3IgZ2l2ZW4gcmVxdWVzdElkIl9zKTsKKworICAgIGNh
c2UgUHJvdG9jb2w6Ok5ldHdvcms6Ok5ldHdvcmtTdGFnZTo6UmVzcG9uc2U6CisgICAgICAgIGlm
IChhdXRvIHBlbmRpbmdJbnRlcmNlcHRSZXNwb25zZSA9IG1fcGVuZGluZ0ludGVyY2VwdFJlc3Bv
bnNlcy50YWtlKHJlcXVlc3RJZCkpIHsKKyAgICAgICAgICAgIHBlbmRpbmdJbnRlcmNlcHRSZXNw
b25zZS0+cmVzcG9uZFdpdGhPcmlnaW5hbFJlc3BvbnNlKCk7CisgICAgICAgICAgICByZXR1cm4g
eyB9OworICAgICAgICB9CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTWlzc2luZyBw
ZW5kaW5nIGludGVyY2VwdCByZXNwb25zZSBmb3IgZ2l2ZW4gcmVxdWVzdElkIl9zKTsKICAgICB9
CiAKLSAgICBzd2l0Y2ggKG5ldHdvcmtTdGFnZS52YWx1ZSgpKSB7Ci0gICAgY2FzZSBOZXR3b3Jr
U3RhZ2U6OlJlcXVlc3Q6Ci0gICAgICAgIGlmIChhdXRvIHBlbmRpbmdJbnRlcmNlcHRSZXF1ZXN0
ID0gbV9wZW5kaW5nSW50ZXJjZXB0UmVxdWVzdHMudGFrZShyZXF1ZXN0SWQpKQotICAgICAgICAg
ICAgcGVuZGluZ0ludGVyY2VwdFJlcXVlc3QtPmNvbnRpbnVlV2l0aE9yaWdpbmFsUmVxdWVzdCgp
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIHBlbmRp
bmcgaW50ZXJjZXB0IHJlcXVlc3QgZm9yIGdpdmVuIHJlcXVlc3RJZCJfczsKLSAgICAgICAgcmV0
dXJuOwotICAgIGNhc2UgTmV0d29ya1N0YWdlOjpSZXNwb25zZToKLSAgICAgICAgaWYgKGF1dG8g
cGVuZGluZ0ludGVyY2VwdFJlc3BvbnNlID0gbV9wZW5kaW5nSW50ZXJjZXB0UmVzcG9uc2VzLnRh
a2UocmVxdWVzdElkKSkKLSAgICAgICAgICAgIHBlbmRpbmdJbnRlcmNlcHRSZXNwb25zZS0+cmVz
cG9uZFdpdGhPcmlnaW5hbFJlc3BvbnNlKCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGVy
cm9yU3RyaW5nID0gIk1pc3NpbmcgcGVuZGluZyBpbnRlcmNlcHQgcmVzcG9uc2UgZm9yIGdpdmVu
IHJlcXVlc3RJZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2Vu
dDo6aW50ZXJjZXB0V2l0aFJlcXVlc3QoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBT
dHJpbmcmIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nKiB1cmwsIGNvbnN0IFN0cmluZyogbWV0aG9k
LCBjb25zdCBKU09OOjpPYmplY3QqIGhlYWRlcnMsIGNvbnN0IFN0cmluZyogcG9zdERhdGEpCitQ
cm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmludGVy
Y2VwdFdpdGhSZXF1ZXN0KGNvbnN0IFByb3RvY29sOjpOZXR3b3JrOjpSZXF1ZXN0SWQmIHJlcXVl
c3RJZCwgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWZQdHI8SlNP
Tjo6T2JqZWN0PiYmIGhlYWRlcnMsIGNvbnN0IFN0cmluZyYgcG9zdERhdGEpCiB7CiAgICAgYXV0
byBwZW5kaW5nUmVxdWVzdCA9IG1fcGVuZGluZ0ludGVyY2VwdFJlcXVlc3RzLnRha2UocmVxdWVz
dElkKTsKLSAgICBpZiAoIXBlbmRpbmdSZXF1ZXN0KSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0g
Ik1pc3NpbmcgcGVuZGluZyBpbnRlcmNlcHQgcmVxdWVzdCBmb3IgZ2l2ZW4gcmVxdWVzdElkIl9z
OwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghcGVuZGluZ1JlcXVlc3QpCisgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTWlzc2luZyBwZW5kaW5nIGludGVyY2VwdCByZXF1
ZXN0IGZvciBnaXZlbiByZXF1ZXN0SWQiX3MpOwogCiAgICAgYXV0byYgbG9hZGVyID0gKnBlbmRp
bmdSZXF1ZXN0LT5tX2xvYWRlcjsKICAgICBSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdCA9IGxvYWRl
ci5yZXF1ZXN0KCk7Ci0gICAgaWYgKHVybCkKLSAgICAgICAgcmVxdWVzdC5zZXRVUkwoVVJMKHsg
fSwgKnVybCkpOwotICAgIGlmIChtZXRob2QpCi0gICAgICAgIHJlcXVlc3Quc2V0SFRUUE1ldGhv
ZCgqbWV0aG9kKTsKKyAgICBpZiAoISF1cmwpCisgICAgICAgIHJlcXVlc3Quc2V0VVJMKFVSTCh7
IH0sIHVybCkpOworICAgIGlmICghIW1ldGhvZCkKKyAgICAgICAgcmVxdWVzdC5zZXRIVFRQTWV0
aG9kKG1ldGhvZCk7CiAgICAgaWYgKGhlYWRlcnMpIHsKICAgICAgICAgSFRUUEhlYWRlck1hcCBl
eHBsaWNpdEhlYWRlcnM7CiAgICAgICAgIGZvciAoYXV0byYgaGVhZGVyIDogKmhlYWRlcnMpIHsK
LSAgICAgICAgICAgIFN0cmluZyBoZWFkZXJWYWx1ZTsKLSAgICAgICAgICAgIGlmIChoZWFkZXIu
dmFsdWUtPmFzU3RyaW5nKGhlYWRlclZhbHVlKSkKKyAgICAgICAgICAgIGF1dG8gaGVhZGVyVmFs
dWUgPSBoZWFkZXIudmFsdWUtPmFzU3RyaW5nKCk7CisgICAgICAgICAgICBpZiAoISFoZWFkZXJW
YWx1ZSkKICAgICAgICAgICAgICAgICBleHBsaWNpdEhlYWRlcnMuYWRkKGhlYWRlci5rZXksIGhl
YWRlclZhbHVlKTsKICAgICAgICAgfQogICAgICAgICByZXF1ZXN0LnNldEhUVFBIZWFkZXJGaWVs
ZHMoV1RGTW92ZShleHBsaWNpdEhlYWRlcnMpKTsKICAgICB9Ci0gICAgaWYgKHBvc3REYXRhKSB7
CisgICAgaWYgKCEhcG9zdERhdGEpIHsKICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGJ1ZmZlcjsK
LSAgICAgICAgaWYgKCFiYXNlNjREZWNvZGUoKnBvc3REYXRhLCBidWZmZXIpKSB7Ci0gICAgICAg
ICAgICBlcnJvclN0cmluZyA9ICJVbmFibGUgdG8gZGVjb2RlIGdpdmVuIHBvc3REYXRhIl9zOwot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9CisgICAgICAgIGlmICghYmFzZTY0RGVjb2Rl
KHBvc3REYXRhLCBidWZmZXIpKQorICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJV
bmFibGUgdG8gZGVjb2RlIGdpdmVuIHBvc3REYXRhIl9zKTsKIAogICAgICAgICByZXF1ZXN0LnNl
dEhUVFBCb2R5KEZvcm1EYXRhOjpjcmVhdGUoYnVmZmVyKSk7CiAgICAgfQogICAgIC8vIEZJWE1F
OiBmaWd1cmUgb3V0IGhvdyB0byBpZGVudGlmeSB3aGVuIGEgcmVxdWVzdCBoYXMgYmVlbiBvdmVy
cmlkZGVuIHdoZW4gd2UgYWRkIHRoaXMgdG8gdGhlIGZyb250ZW5kLgogICAgIHBlbmRpbmdSZXF1
ZXN0LT5jb250aW51ZVdpdGhSZXF1ZXN0KHJlcXVlc3QpOworCisgICAgcmV0dXJuIHsgfTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmludGVyY2VwdFdpdGhSZXNwb25zZShFcnJv
clN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBjb25zdCBTdHJp
bmcmIGNvbnRlbnQsIGJvb2wgYmFzZTY0RW5jb2RlZCwgY29uc3QgU3RyaW5nKiBtaW1lVHlwZSwg
Y29uc3QgaW50KiBzdGF0dXMsIGNvbnN0IFN0cmluZyogc3RhdHVzVGV4dCwgY29uc3QgSlNPTjo6
T2JqZWN0KiBoZWFkZXJzKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9y
TmV0d29ya0FnZW50OjppbnRlcmNlcHRXaXRoUmVzcG9uc2UoY29uc3QgUHJvdG9jb2w6Ok5ldHdv
cms6OlJlcXVlc3RJZCYgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQsIGJvb2wgYmFz
ZTY0RW5jb2RlZCwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8aW50PiYmIHN0YXR1
cywgY29uc3QgU3RyaW5nJiBzdGF0dXNUZXh0LCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIGhlYWRl
cnMpCiB7CiAgICAgYXV0byBwZW5kaW5nSW50ZXJjZXB0UmVzcG9uc2UgPSBtX3BlbmRpbmdJbnRl
cmNlcHRSZXNwb25zZXMudGFrZShyZXF1ZXN0SWQpOwotICAgIGlmICghcGVuZGluZ0ludGVyY2Vw
dFJlc3BvbnNlKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIk1pc3NpbmcgcGVuZGluZyBpbnRl
cmNlcHQgcmVzcG9uc2UgZm9yIGdpdmVuIHJlcXVlc3RJZCJfczsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KKyAgICBpZiAoIXBlbmRpbmdJbnRlcmNlcHRSZXNwb25zZSkKKyAgICAgICAgcmV0dXJu
IG1ha2VVbmV4cGVjdGVkKCJNaXNzaW5nIHBlbmRpbmcgaW50ZXJjZXB0IHJlc3BvbnNlIGZvciBn
aXZlbiByZXF1ZXN0SWQiX3MpOwogCiAgICAgUmVzb3VyY2VSZXNwb25zZSBvdmVycmlkZVJlc3Bv
bnNlKHBlbmRpbmdJbnRlcmNlcHRSZXNwb25zZS0+b3JpZ2luYWxSZXNwb25zZSgpKTsKICAgICBv
dmVycmlkZVJlc3BvbnNlLnNldFNvdXJjZShSZXNvdXJjZVJlc3BvbnNlOjpTb3VyY2U6Okluc3Bl
Y3Rvck92ZXJyaWRlKTsKIAogICAgIGlmIChzdGF0dXMpCiAgICAgICAgIG92ZXJyaWRlUmVzcG9u
c2Uuc2V0SFRUUFN0YXR1c0NvZGUoKnN0YXR1cyk7Ci0gICAgaWYgKHN0YXR1c1RleHQpCi0gICAg
ICAgIG92ZXJyaWRlUmVzcG9uc2Uuc2V0SFRUUFN0YXR1c1RleHQoKnN0YXR1c1RleHQpOwotICAg
IGlmIChtaW1lVHlwZSkKLSAgICAgICAgb3ZlcnJpZGVSZXNwb25zZS5zZXRNaW1lVHlwZSgqbWlt
ZVR5cGUpOworICAgIGlmICghIXN0YXR1c1RleHQpCisgICAgICAgIG92ZXJyaWRlUmVzcG9uc2Uu
c2V0SFRUUFN0YXR1c1RleHQoc3RhdHVzVGV4dCk7CisgICAgaWYgKCEhbWltZVR5cGUpCisgICAg
ICAgIG92ZXJyaWRlUmVzcG9uc2Uuc2V0TWltZVR5cGUobWltZVR5cGUpOwogICAgIGlmIChoZWFk
ZXJzKSB7CiAgICAgICAgIEhUVFBIZWFkZXJNYXAgZXhwbGljaXRIZWFkZXJzOwogICAgICAgICBm
b3IgKGF1dG8mIGhlYWRlciA6ICpoZWFkZXJzKSB7Ci0gICAgICAgICAgICBTdHJpbmcgaGVhZGVy
VmFsdWU7Ci0gICAgICAgICAgICBpZiAoaGVhZGVyLnZhbHVlLT5hc1N0cmluZyhoZWFkZXJWYWx1
ZSkpCisgICAgICAgICAgICBhdXRvIGhlYWRlclZhbHVlID0gaGVhZGVyLnZhbHVlLT5hc1N0cmlu
ZygpOworICAgICAgICAgICAgaWYgKCEhaGVhZGVyVmFsdWUpCiAgICAgICAgICAgICAgICAgZXhw
bGljaXRIZWFkZXJzLmFkZChoZWFkZXIua2V5LCBoZWFkZXJWYWx1ZSk7CiAgICAgICAgIH0KICAg
ICAgICAgb3ZlcnJpZGVSZXNwb25zZS5zZXRIVFRQSGVhZGVyRmllbGRzKFdURk1vdmUoZXhwbGlj
aXRIZWFkZXJzKSk7CkBAIC0xMjYxLDQxICsxMjQ1LDM0IEBAIHZvaWQgSW5zcGVjdG9yTmV0d29y
a0FnZW50OjppbnRlcmNlcHRXaXRoUmVzcG9uc2UoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBj
b25zCiAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gb3ZlcnJpZGVEYXRhOwogICAgIGlmIChiYXNl
NjRFbmNvZGVkKSB7CiAgICAgICAgIFZlY3Rvcjx1aW50OF90PiBidWZmZXI7Ci0gICAgICAgIGlm
ICghYmFzZTY0RGVjb2RlKGNvbnRlbnQsIGJ1ZmZlcikpIHsKLSAgICAgICAgICAgIGVycm9yU3Ry
aW5nID0gIlVuYWJsZSB0byBkZWNvZGUgZ2l2ZW4gY29udGVudCJfczsKLSAgICAgICAgICAgIHBl
bmRpbmdJbnRlcmNlcHRSZXNwb25zZS0+cmVzcG9uZFdpdGhPcmlnaW5hbFJlc3BvbnNlKCk7Ci0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKCFiYXNlNjREZWNvZGUo
Y29udGVudCwgYnVmZmVyKSkKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiVW5h
YmxlIHRvIGRlY29kZSBnaXZlbiBjb250ZW50Il9zKTsKIAogICAgICAgICBvdmVycmlkZURhdGEg
PSBTaGFyZWRCdWZmZXI6OmNyZWF0ZShXVEZNb3ZlKGJ1ZmZlcikpOwogICAgIH0gZWxzZQogICAg
ICAgICBvdmVycmlkZURhdGEgPSBTaGFyZWRCdWZmZXI6OmNyZWF0ZShjb250ZW50LnV0ZjgoKS5k
YXRhKCksIGNvbnRlbnQudXRmOCgpLmxlbmd0aCgpKTsKIAogICAgIHBlbmRpbmdJbnRlcmNlcHRS
ZXNwb25zZS0+cmVzcG9uZChvdmVycmlkZVJlc3BvbnNlLCBvdmVycmlkZURhdGEpOworCisgICAg
cmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmludGVyY2VwdFJl
cXVlc3RXaXRoUmVzcG9uc2UoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcm
IHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBjb250ZW50LCBib29sIGJhc2U2NEVuY29kZWQsIGNv
bnN0IFN0cmluZyYgbWltZVR5cGUsIGludCBzdGF0dXMsIGNvbnN0IFN0cmluZyYgc3RhdHVzVGV4
dCwgY29uc3QgSlNPTjo6T2JqZWN0JiBoZWFkZXJzKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8
dm9pZD4gSW5zcGVjdG9yTmV0d29ya0FnZW50OjppbnRlcmNlcHRSZXF1ZXN0V2l0aFJlc3BvbnNl
KGNvbnN0IFByb3RvY29sOjpOZXR3b3JrOjpSZXF1ZXN0SWQmIHJlcXVlc3RJZCwgY29uc3QgU3Ry
aW5nJiBjb250ZW50LCBib29sIGJhc2U2NEVuY29kZWQsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUs
IGludCBzdGF0dXMsIGNvbnN0IFN0cmluZyYgc3RhdHVzVGV4dCwgUmVmPEpTT046Ok9iamVjdD4m
JiBoZWFkZXJzKQogewogICAgIGF1dG8gcGVuZGluZ1JlcXVlc3QgPSBtX3BlbmRpbmdJbnRlcmNl
cHRSZXF1ZXN0cy50YWtlKHJlcXVlc3RJZCk7Ci0gICAgaWYgKCFwZW5kaW5nUmVxdWVzdCkgewot
ICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIHBlbmRpbmcgaW50ZXJjZXB0IHJlcXVlc3Qg
Zm9yIGdpdmVuIHJlcXVlc3RJZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAo
IXBlbmRpbmdSZXF1ZXN0KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk1pc3Npbmcg
cGVuZGluZyBpbnRlcmNlcHQgcmVxdWVzdCBmb3IgZ2l2ZW4gcmVxdWVzdElkIl9zKTsKIAogICAg
IC8vIExvYWRlciB3aWxsIGJlIHJldGFpbmVkIGluIHRoZSBkaWRSZWNlaXZlUmVzcG9uc2UgbGFt
YmRhIGJlbG93LgogICAgIFJlZlB0cjxSZXNvdXJjZUxvYWRlcj4gbG9hZGVyID0gcGVuZGluZ1Jl
cXVlc3QtPm1fbG9hZGVyLmdldCgpOwotICAgIGlmIChsb2FkZXItPnJlYWNoZWRUZXJtaW5hbFN0
YXRlKCkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiVW5hYmxlIHRvIGZ1bGZpbGwgcmVxdWVz
dCwgaXQgaGFzIGFscmVhZHkgYmVlbiBwcm9jZXNzZWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9CisgICAgaWYgKGxvYWRlci0+cmVhY2hlZFRlcm1pbmFsU3RhdGUoKSkKKyAgICAgICAgcmV0
dXJuIG1ha2VVbmV4cGVjdGVkKCJVbmFibGUgdG8gZnVsZmlsbCByZXF1ZXN0LCBpdCBoYXMgYWxy
ZWFkeSBiZWVuIHByb2Nlc3NlZCJfcyk7CiAKICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBkYXRh
OwogICAgIGlmIChiYXNlNjRFbmNvZGVkKSB7CiAgICAgICAgIFZlY3Rvcjx1aW50OF90PiBidWZm
ZXI7Ci0gICAgICAgIGlmICghYmFzZTY0RGVjb2RlKGNvbnRlbnQsIGJ1ZmZlcikpIHsKLSAgICAg
ICAgICAgIGVycm9yU3RyaW5nID0gIlVuYWJsZSB0byBkZWNvZGUgZ2l2ZW4gY29udGVudCJfczsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQorICAgICAgICBpZiAoIWJhc2U2NERlY29k
ZShjb250ZW50LCBidWZmZXIpKQorICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJV
bmFibGUgdG8gZGVjb2RlIGdpdmVuIGNvbnRlbnQiX3MpOwogCiAgICAgICAgIGRhdGEgPSBTaGFy
ZWRCdWZmZXI6OmNyZWF0ZShXVEZNb3ZlKGJ1ZmZlcikpOwogICAgIH0gZWxzZQpAQCAtMTMwNyw5
ICsxMjg0LDkgQEAgdm9pZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmludGVyY2VwdFJlcXVlc3RX
aXRoUmVzcG9uc2UoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW4KICAgICByZXNwb25zZS5zZXRIVFRQ
U3RhdHVzQ29kZShzdGF0dXMpOwogICAgIHJlc3BvbnNlLnNldEhUVFBTdGF0dXNUZXh0KHN0YXR1
c1RleHQpOwogICAgIEhUVFBIZWFkZXJNYXAgZXhwbGljaXRIZWFkZXJzOwotICAgIGZvciAoYXV0
byYgaGVhZGVyIDogaGVhZGVycykgewotICAgICAgICBTdHJpbmcgaGVhZGVyVmFsdWU7Ci0gICAg
ICAgIGlmIChoZWFkZXIudmFsdWUtPmFzU3RyaW5nKGhlYWRlclZhbHVlKSkKKyAgICBmb3IgKGF1
dG8mIGhlYWRlciA6IGhlYWRlcnMuZ2V0KCkpIHsKKyAgICAgICAgYXV0byBoZWFkZXJWYWx1ZSA9
IGhlYWRlci52YWx1ZS0+YXNTdHJpbmcoKTsKKyAgICAgICAgaWYgKCEhaGVhZGVyVmFsdWUpCiAg
ICAgICAgICAgICBleHBsaWNpdEhlYWRlcnMuYWRkKGhlYWRlci5rZXksIGhlYWRlclZhbHVlKTsK
ICAgICB9CiAgICAgcmVzcG9uc2Uuc2V0SFRUUEhlYWRlckZpZWxkcyhXVEZNb3ZlKGV4cGxpY2l0
SGVhZGVycykpOwpAQCAtMTMxOSw0NCArMTI5Niw0MCBAQCB2b2lkIEluc3BlY3Rvck5ldHdvcmtB
Z2VudDo6aW50ZXJjZXB0UmVxdWVzdFdpdGhSZXNwb25zZShFcnJvclN0cmluZyYgZXJyb3JTdHJp
bgogICAgICAgICAgICAgbG9hZGVyLT5kaWRSZWNlaXZlQnVmZmVyKFdURk1vdmUoYnVmZmVyKSwg
YnVmZmVyLT5zaXplKCksIERhdGFQYXlsb2FkV2hvbGVSZXNvdXJjZSk7CiAgICAgICAgIGxvYWRl
ci0+ZGlkRmluaXNoTG9hZGluZyhOZXR3b3JrTG9hZE1ldHJpY3MoKSk7CiAgICAgfSk7CisKKyAg
ICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6aW50ZXJjZXB0
UmVxdWVzdFdpdGhFcnJvcihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYg
cmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIGVycm9yVHlwZVN0cmluZykKK1Byb3RvY29sOjpFcnJv
clN0cmluZ09yPHZvaWQ+IEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6aW50ZXJjZXB0UmVxdWVzdFdp
dGhFcnJvcihjb25zdCBQcm90b2NvbDo6TmV0d29yazo6UmVxdWVzdElkJiByZXF1ZXN0SWQsIFBy
b3RvY29sOjpOZXR3b3JrOjpSZXNvdXJjZUVycm9yVHlwZSBlcnJvclR5cGUpCiB7CiAgICAgYXV0
byBwZW5kaW5nUmVxdWVzdCA9IG1fcGVuZGluZ0ludGVyY2VwdFJlcXVlc3RzLnRha2UocmVxdWVz
dElkKTsKLSAgICBpZiAoIXBlbmRpbmdSZXF1ZXN0KSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0g
Ik1pc3NpbmcgcGVuZGluZyBpbnRlcmNlcHQgcmVxdWVzdCBmb3IgZ2l2ZW4gcmVxdWVzdElkIl9z
OwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghcGVuZGluZ1JlcXVlc3QpCisgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTWlzc2luZyBwZW5kaW5nIGludGVyY2VwdCByZXF1
ZXN0IGZvciBnaXZlbiByZXF1ZXN0SWQiX3MpOwogCiAgICAgYXV0byYgbG9hZGVyID0gKnBlbmRp
bmdSZXF1ZXN0LT5tX2xvYWRlcjsKLSAgICBpZiAobG9hZGVyLnJlYWNoZWRUZXJtaW5hbFN0YXRl
KCkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiVW5hYmxlIHRvIGFib3J0IHJlcXVlc3QsIGl0
IGhhcyBhbHJlYWR5IGJlZW4gcHJvY2Vzc2VkIl9zOwotICAgICAgICByZXR1cm47CisgICAgaWYg
KGxvYWRlci5yZWFjaGVkVGVybWluYWxTdGF0ZSgpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoIlVuYWJsZSB0byBhYm9ydCByZXF1ZXN0LCBpdCBoYXMgYWxyZWFkeSBiZWVuIHByb2Nl
c3NlZCJfcyk7CisKKyAgICBzd2l0Y2ggKGVycm9yVHlwZSkgeworICAgIGNhc2UgUHJvdG9jb2w6
Ok5ldHdvcms6OlJlc291cmNlRXJyb3JUeXBlOjpHZW5lcmFsOgorICAgICAgICBsb2FkZXIuZGlk
RmFpbChSZXNvdXJjZUVycm9yKGVycm9yRG9tYWluV2ViS2l0SW50ZXJuYWwsIDAsIGxvYWRlci51
cmwoKSwgIlJlcXVlc3QgaW50ZXJjZXB0ZWQiX3MsIFJlc291cmNlRXJyb3I6OlR5cGU6OkdlbmVy
YWwpKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIGNhc2UgUHJvdG9jb2w6Ok5ldHdvcms6
OlJlc291cmNlRXJyb3JUeXBlOjpBY2Nlc3NDb250cm9sOgorICAgICAgICBsb2FkZXIuZGlkRmFp
bChSZXNvdXJjZUVycm9yKGVycm9yRG9tYWluV2ViS2l0SW50ZXJuYWwsIDAsIGxvYWRlci51cmwo
KSwgIkFjY2VzcyBkZW5pZWQiX3MsIFJlc291cmNlRXJyb3I6OlR5cGU6OkFjY2Vzc0NvbnRyb2wp
KTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIGNhc2UgUHJvdG9jb2w6Ok5ldHdvcms6OlJl
c291cmNlRXJyb3JUeXBlOjpDYW5jZWxsYXRpb246CisgICAgICAgIGxvYWRlci5kaWRGYWlsKFJl
c291cmNlRXJyb3IoZXJyb3JEb21haW5XZWJLaXRJbnRlcm5hbCwgMCwgbG9hZGVyLnVybCgpLCAi
UmVxdWVzdCBjYW5jZWxlZCJfcywgUmVzb3VyY2VFcnJvcjo6VHlwZTo6Q2FuY2VsbGF0aW9uKSk7
CisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBjYXNlIFByb3RvY29sOjpOZXR3b3JrOjpSZXNv
dXJjZUVycm9yVHlwZTo6VGltZW91dDoKKyAgICAgICAgbG9hZGVyLmRpZEZhaWwoUmVzb3VyY2VF
cnJvcihlcnJvckRvbWFpbldlYktpdEludGVybmFsLCAwLCBsb2FkZXIudXJsKCksICJSZXF1ZXN0
IHRpbWVkIG91dCJfcywgUmVzb3VyY2VFcnJvcjo6VHlwZTo6VGltZW91dCkpOworICAgICAgICBy
ZXR1cm4geyB9OwogICAgIH0KIAotICAgIGF1dG8gZXJyb3JUeXBlID0gSW5zcGVjdG9yOjpQcm90
b2NvbDo6SW5zcGVjdG9ySGVscGVyczo6cGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rv
cjo6UHJvdG9jb2w6Ok5ldHdvcms6OlJlc291cmNlRXJyb3JUeXBlPihlcnJvclR5cGVTdHJpbmcp
OwotICAgIGlmICghZXJyb3JUeXBlKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gbWFrZVN0cmlu
ZygiVW5rbm93biBlcnJvclR5cGU6ICJfcywgZXJyb3JUeXBlU3RyaW5nKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIFJlc291cmNlRXJyb3IgZXJyb3I7Ci0gICAgc3dpdGNoIChlcnJv
clR5cGUudmFsdWUoKSkgewotICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6
UmVzb3VyY2VFcnJvclR5cGU6OkdlbmVyYWw6Ci0gICAgICAgIGVycm9yID0gUmVzb3VyY2VFcnJv
cihlcnJvckRvbWFpbldlYktpdEludGVybmFsLCAwLCBsb2FkZXIudXJsKCksICJSZXF1ZXN0IGlu
dGVyY2VwdGVkIl9zLCBSZXNvdXJjZUVycm9yOjpUeXBlOjpHZW5lcmFsKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpSZXNvdXJjZUVycm9y
VHlwZTo6QWNjZXNzQ29udHJvbDoKLSAgICAgICAgZXJyb3IgPSBSZXNvdXJjZUVycm9yKGVycm9y
RG9tYWluV2ViS2l0SW50ZXJuYWwsIDAsIGxvYWRlci51cmwoKSwgIkFjY2VzcyBkZW5pZWQiX3Ms
IFJlc291cmNlRXJyb3I6OlR5cGU6OkFjY2Vzc0NvbnRyb2wpOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OlJlc291cmNlRXJyb3JUeXBlOjpD
YW5jZWxsYXRpb246Ci0gICAgICAgIGVycm9yID0gUmVzb3VyY2VFcnJvcihlcnJvckRvbWFpbldl
YktpdEludGVybmFsLCAwLCBsb2FkZXIudXJsKCksICJSZXF1ZXN0IGNhbmNlbGVkIl9zLCBSZXNv
dXJjZUVycm9yOjpUeXBlOjpDYW5jZWxsYXRpb24pOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OlJlc291cmNlRXJyb3JUeXBlOjpUaW1lb3V0
OgotICAgICAgICBlcnJvciA9IFJlc291cmNlRXJyb3IoZXJyb3JEb21haW5XZWJLaXRJbnRlcm5h
bCwgMCwgbG9hZGVyLnVybCgpLCAiUmVxdWVzdCB0aW1lZCBvdXQiX3MsIFJlc291cmNlRXJyb3I6
OlR5cGU6OlRpbWVvdXQpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgbG9hZGVyLmRpZEZh
aWwoZXJyb3IpOworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiB7IH07CiB9
CiAKIGJvb2wgSW5zcGVjdG9yTmV0d29ya0FnZW50OjpzaG91bGRUcmVhdEFzVGV4dChjb25zdCBT
dHJpbmcmIG1pbWVUeXBlKQpAQCAtMTQzOSw5ICsxNDEyLDkgQEAgYm9vbCBJbnNwZWN0b3JOZXR3
b3JrQWdlbnQ6OmNhY2hlZFJlc291cmNlQ29udGVudChDYWNoZWRSZXNvdXJjZSYgcmVzb3VyY2Us
IFN0cmkKICAgICB9CiB9CiAKLXN0YXRpYyBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6
U2VhcmNoUmVzdWx0PiBidWlsZE9iamVjdEZvclNlYXJjaFJlc3VsdChjb25zdCBTdHJpbmcmIHJl
cXVlc3RJZCwgY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBjb25zdCBTdHJpbmcmIHVybCwgaW50IG1h
dGNoZXNDb3VudCkKK3N0YXRpYyBSZWY8UHJvdG9jb2w6OlBhZ2U6OlNlYXJjaFJlc3VsdD4gYnVp
bGRPYmplY3RGb3JTZWFyY2hSZXN1bHQoY29uc3QgUHJvdG9jb2w6Ok5ldHdvcms6OlJlcXVlc3RJ
ZCYgcmVxdWVzdElkLCBjb25zdCBQcm90b2NvbDo6TmV0d29yazo6RnJhbWVJZCYgZnJhbWVJZCwg
Y29uc3QgU3RyaW5nJiB1cmwsIGludCBtYXRjaGVzQ291bnQpCiB7Ci0gICAgYXV0byBzZWFyY2hS
ZXN1bHQgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpTZWFyY2hSZXN1bHQ6OmNyZWF0ZSgp
CisgICAgYXV0byBzZWFyY2hSZXN1bHQgPSBQcm90b2NvbDo6UGFnZTo6U2VhcmNoUmVzdWx0Ojpj
cmVhdGUoKQogICAgICAgICAuc2V0VXJsKHVybCkKICAgICAgICAgLnNldEZyYW1lSWQoZnJhbWVJ
ZCkKICAgICAgICAgLnNldE1hdGNoZXNDb3VudChtYXRjaGVzQ291bnQpCkBAIC0xNDYxLDcgKzE0
MzQsNyBAQCBzdGF0aWMgT3B0aW9uYWw8U3RyaW5nPiB0ZXh0Q29udGVudEZvclJlc291cmNlRGF0
YShjb25zdCBOZXR3b3JrUmVzb3VyY2VzRGF0YTo6UgogICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CiB9CiAKLXZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50OjpzZWFyY2hPdGhlclJlcXVlc3RzKGNv
bnN0IEpTQzo6WWFycjo6UmVndWxhckV4cHJlc3Npb24mIHJlZ2V4LCBSZWZQdHI8SlNPTjo6QXJy
YXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpTZWFyY2hSZXN1bHQ+PiYgcmVzdWx0KQor
dm9pZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OnNlYXJjaE90aGVyUmVxdWVzdHMoY29uc3QgSlND
OjpZYXJyOjpSZWd1bGFyRXhwcmVzc2lvbiYgcmVnZXgsIFJlZjxKU09OOjpBcnJheU9mPFByb3Rv
Y29sOjpQYWdlOjpTZWFyY2hSZXN1bHQ+PiYgcmVzdWx0KQogewogICAgIFZlY3RvcjxOZXR3b3Jr
UmVzb3VyY2VzRGF0YTo6UmVzb3VyY2VEYXRhKj4gcmVzb3VyY2VzID0gbV9yZXNvdXJjZXNEYXRh
LT5yZXNvdXJjZXMoKTsKICAgICBmb3IgKGF1dG8qIHJlc291cmNlRGF0YSA6IHJlc291cmNlcykg
ewpAQCAtMTQ3Myw3ICsxNDQ2LDcgQEAgdm9pZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OnNlYXJj
aE90aGVyUmVxdWVzdHMoY29uc3QgSlNDOjpZYXJyOjpSZWd1bGFyRXhwcmVzc2kKICAgICB9CiB9
CiAKLXZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50OjpzZWFyY2hJblJlcXVlc3QoRXJyb3JTdHJp
bmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBx
dWVyeSwgYm9vbCBjYXNlU2Vuc2l0aXZlLCBib29sIGlzUmVnZXgsIFJlZlB0cjxKU09OOjpBcnJh
eU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkdlbmVyaWNUeXBlczo6U2VhcmNoTWF0Y2g+PiYgcmVz
dWx0cykKK3ZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50OjpzZWFyY2hJblJlcXVlc3QoUHJvdG9j
b2w6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgUHJvdG9jb2w6Ok5ldHdvcms6OlJl
cXVlc3RJZCYgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIHF1ZXJ5LCBib29sIGNhc2VTZW5zaXRp
dmUsIGJvb2wgaXNSZWdleCwgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkdlbmVyaWNU
eXBlczo6U2VhcmNoTWF0Y2g+PiYgcmVzdWx0cykKIHsKICAgICBOZXR3b3JrUmVzb3VyY2VzRGF0
YTo6UmVzb3VyY2VEYXRhIGNvbnN0KiByZXNvdXJjZURhdGEgPSBtX3Jlc291cmNlc0RhdGEtPmRh
dGEocmVxdWVzdElkKTsKICAgICBpZiAoIXJlc291cmNlRGF0YSkgewpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JOZXR3b3JrQWdlbnQuaCBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yTmV0d29ya0FnZW50LmgKaW5k
ZXggMzQ0MGU3MWE1ZWQ1ZWYzODQ2MjBhOWY2MjgwMzc1MWU5ODNkYjViMS4uNDBlMjNjNDNhNzBl
NzliMGMyYzBiMWQ2YTE1M2VkZTM5NTgwMmFhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JOZXR3b3JrQWdlbnQuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rvck5ldHdvcmtBZ2VudC5oCkBAIC02MSw4ICs2
MSw2IEBAIGNsYXNzIFdlYlNvY2tldDsKIAogc3RydWN0IFdlYlNvY2tldEZyYW1lOwogCi10eXBl
ZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQogY2xhc3MgSW5zcGVjdG9yTmV0d29ya0FnZW50IDog
cHVibGljIEluc3BlY3RvckFnZW50QmFzZSwgcHVibGljIEluc3BlY3Rvcjo6TmV0d29ya0JhY2tl
bmREaXNwYXRjaGVySGFuZGxlciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW5zcGVjdG9y
TmV0d29ya0FnZW50KTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKQEAgLTc5LDIyICs3
NywyMiBAQCBwdWJsaWM6CiAgICAgdm9pZCB3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJ
bnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24pIGZpbmFsOwogCiAgICAgLy8gTmV0d29ya0JhY2tl
bmREaXNwYXRjaGVySGFuZGxlcgotICAgIHZvaWQgZW5hYmxlKEVycm9yU3RyaW5nJikgZmluYWw7
Ci0gICAgdm9pZCBkaXNhYmxlKEVycm9yU3RyaW5nJikgZmluYWw7Ci0gICAgdm9pZCBzZXRFeHRy
YUhUVFBIZWFkZXJzKEVycm9yU3RyaW5nJiwgY29uc3QgSlNPTjo6T2JqZWN0JiBoZWFkZXJzKSBm
aW5hbDsKLSAgICB2b2lkIGdldFJlc3BvbnNlQm9keShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmlu
ZyYgcmVxdWVzdElkLCBTdHJpbmcqIGNvbnRlbnQsIGJvb2wqIGJhc2U2NEVuY29kZWQpIGZpbmFs
OwotICAgIHZvaWQgc2V0UmVzb3VyY2VDYWNoaW5nRGlzYWJsZWQoRXJyb3JTdHJpbmcmLCBib29s
IGRpc2FibGVkKSBmaW5hbDsKLSAgICB2b2lkIGxvYWRSZXNvdXJjZShjb25zdCBTdHJpbmcmIGZy
YW1lSWQsIGNvbnN0IFN0cmluZyYgdXJsLCBSZWY8TG9hZFJlc291cmNlQ2FsbGJhY2s+JiYpIGZp
bmFsOwotICAgIHZvaWQgZ2V0U2VyaWFsaXplZENlcnRpZmljYXRlKEVycm9yU3RyaW5nJiwgY29u
c3QgU3RyaW5nJiByZXF1ZXN0SWQsIFN0cmluZyogc2VyaWFsaXplZENlcnRpZmljYXRlKSBmaW5h
bDsKLSAgICB2b2lkIHJlc29sdmVXZWJTb2NrZXQoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcm
IHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nKiBvYmplY3RHcm91cCwgUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mKSBmaW5hbDsKLSAgICB2b2lkIHNldElu
dGVyY2VwdGlvbkVuYWJsZWQoRXJyb3JTdHJpbmcmLCBib29sIGVuYWJsZWQpIGZpbmFsOwotICAg
IHZvaWQgYWRkSW50ZXJjZXB0aW9uKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiB1cmwsIGNv
bnN0IFN0cmluZyYgbmV0d29ya1N0YWdlU3RyaW5nLCBjb25zdCBib29sKiBjYXNlU2Vuc2l0aXZl
LCBjb25zdCBib29sKiBpc1JlZ2V4KSBmaW5hbDsKLSAgICB2b2lkIHJlbW92ZUludGVyY2VwdGlv
bihFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIG5ldHdvcmtT
dGFnZVN0cmluZywgY29uc3QgYm9vbCogY2FzZVNlbnNpdGl2ZSwgY29uc3QgYm9vbCogaXNSZWdl
eCkgZmluYWw7Ci0gICAgdm9pZCBpbnRlcmNlcHRDb250aW51ZShFcnJvclN0cmluZyYsIGNvbnN0
IFN0cmluZyYgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG5ldHdvcmtTdGFnZVN0cmluZykgZmlu
YWw7Ci0gICAgdm9pZCBpbnRlcmNlcHRXaXRoUmVxdWVzdChFcnJvclN0cmluZyYsIGNvbnN0IFN0
cmluZyYgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcqIHVybCwgY29uc3QgU3RyaW5nKiBtZXRob2Qs
IGNvbnN0IEpTT046Ok9iamVjdCogaGVhZGVycywgY29uc3QgU3RyaW5nKiBwb3N0RGF0YSkgZmlu
YWw7Ci0gICAgdm9pZCBpbnRlcmNlcHRXaXRoUmVzcG9uc2UoRXJyb3JTdHJpbmcmLCBjb25zdCBT
dHJpbmcmIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBjb250ZW50LCBib29sIGJhc2U2NEVuY29k
ZWQsIGNvbnN0IFN0cmluZyogbWltZVR5cGUsIGNvbnN0IGludCogc3RhdHVzLCBjb25zdCBTdHJp
bmcqIHN0YXR1c1RleHQsIGNvbnN0IEpTT046Ok9iamVjdCogaGVhZGVycykgZmluYWw7Ci0gICAg
dm9pZCBpbnRlcmNlcHRSZXF1ZXN0V2l0aFJlc3BvbnNlKEVycm9yU3RyaW5nJiwgY29uc3QgU3Ry
aW5nJiByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgY29udGVudCwgYm9vbCBiYXNlNjRFbmNvZGVk
LCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBpbnQgc3RhdHVzLCBjb25zdCBTdHJpbmcmIHN0YXR1
c1RleHQsIGNvbnN0IEpTT046Ok9iamVjdCYgaGVhZGVycykgZmluYWw7Ci0gICAgdm9pZCBpbnRl
cmNlcHRSZXF1ZXN0V2l0aEVycm9yKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiByZXF1ZXN0
SWQsIGNvbnN0IFN0cmluZyYgZXJyb3JUeXBlKSBmaW5hbDsKKyAgICBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGVuYWJsZSgpIGZpbmFsOworICAgIEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZGlzYWJsZSgpIGZpbmFsOworICAgIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc2V0RXh0cmFIVFRQSGVhZGVycyhS
ZWY8SlNPTjo6T2JqZWN0PiYmKSBmaW5hbDsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJv
clN0cmluZ09yPHN0ZDo6dHVwbGU8U3RyaW5nLCBib29sIC8qIGJhc2U2NEVuY29kZWQgKi8+PiBn
ZXRSZXNwb25zZUJvZHkoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6UmVxdWVz
dElkJikgZmluYWw7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lk
PiBzZXRSZXNvdXJjZUNhY2hpbmdEaXNhYmxlZChib29sKSBmaW5hbDsKKyAgICB2b2lkIGxvYWRS
ZXNvdXJjZShjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpGcmFtZUlkJiwgY29u
c3QgU3RyaW5nJiB1cmwsIFJlZjxMb2FkUmVzb3VyY2VDYWxsYmFjaz4mJikgZmluYWw7CisgICAg
SW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxTdHJpbmc+IGdldFNlcmlhbGl6ZWRD
ZXJ0aWZpY2F0ZShjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpSZXF1ZXN0SWQm
KSBmaW5hbDsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+PiByZXNvbHZlV2ViU29ja2V0
KGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OlJlcXVlc3RJZCYsIGNvbnN0IFN0
cmluZyYgb2JqZWN0R3JvdXApIGZpbmFsOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8dm9pZD4gc2V0SW50ZXJjZXB0aW9uRW5hYmxlZChib29sKSBmaW5hbDsKKyAgICBJ
bnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGFkZEludGVyY2VwdGlvbihj
b25zdCBTdHJpbmcmIHVybCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6TmV0d29ya1N0
YWdlLCBPcHRpb25hbDxib29sPiYmIGNhc2VTZW5zaXRpdmUsIE9wdGlvbmFsPGJvb2w+JiYgaXNS
ZWdleCkgZmluYWw7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lk
PiByZW1vdmVJbnRlcmNlcHRpb24oY29uc3QgU3RyaW5nJiB1cmwsIEluc3BlY3Rvcjo6UHJvdG9j
b2w6Ok5ldHdvcms6Ok5ldHdvcmtTdGFnZSwgT3B0aW9uYWw8Ym9vbD4mJiBjYXNlU2Vuc2l0aXZl
LCBPcHRpb25hbDxib29sPiYmIGlzUmVnZXgpIGZpbmFsOworICAgIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gaW50ZXJjZXB0Q29udGludWUoY29uc3QgSW5zcGVjdG9y
OjpQcm90b2NvbDo6TmV0d29yazo6UmVxdWVzdElkJiwgSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0
d29yazo6TmV0d29ya1N0YWdlKSBmaW5hbDsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJv
clN0cmluZ09yPHZvaWQ+IGludGVyY2VwdFdpdGhSZXF1ZXN0KGNvbnN0IEluc3BlY3Rvcjo6UHJv
dG9jb2w6Ok5ldHdvcms6OlJlcXVlc3RJZCYsIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJp
bmcmIG1ldGhvZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBoZWFkZXJzLCBjb25zdCBTdHJpbmcm
IHBvc3REYXRhKSBmaW5hbDsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09y
PHZvaWQ+IGludGVyY2VwdFdpdGhSZXNwb25zZShjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpO
ZXR3b3JrOjpSZXF1ZXN0SWQmLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQsIGJvb2wgYmFzZTY0RW5j
b2RlZCwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8aW50PiYmIHN0YXR1cywgY29u
c3QgU3RyaW5nJiBzdGF0dXNUZXh0LCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIGhlYWRlcnMpIGZp
bmFsOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gaW50ZXJj
ZXB0UmVxdWVzdFdpdGhSZXNwb25zZShjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3Jr
OjpSZXF1ZXN0SWQmLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQsIGJvb2wgYmFzZTY0RW5jb2RlZCwg
Y29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgaW50IHN0YXR1cywgY29uc3QgU3RyaW5nJiBzdGF0dXNU
ZXh0LCBSZWY8SlNPTjo6T2JqZWN0PiYmIGhlYWRlcnMpIGZpbmFsOworICAgIEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gaW50ZXJjZXB0UmVxdWVzdFdpdGhFcnJvcihj
b25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpSZXF1ZXN0SWQmLCBJbnNwZWN0b3I6
OlByb3RvY29sOjpOZXR3b3JrOjpSZXNvdXJjZUVycm9yVHlwZSkgZmluYWw7CiAKICAgICAvLyBJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb24KICAgICB2b2lkIHdpbGxSZWNhbGN1bGF0ZVN0eWxlKCk7
CkBAIC0xMjcsMzIgKzEyNSwyOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBpbnRlcmNlcHRSZXNwb25z
ZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmLCBSZWZQdHI8U2hhcmVk
QnVmZmVyPik+JiYpOwogICAgIHZvaWQgaW50ZXJjZXB0UmVxdWVzdChSZXNvdXJjZUxvYWRlciYs
IEZ1bmN0aW9uPHZvaWQoY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jik+JiYpOwogCi0gICAgdm9pZCBz
ZWFyY2hPdGhlclJlcXVlc3RzKGNvbnN0IEpTQzo6WWFycjo6UmVndWxhckV4cHJlc3Npb24mLCBS
ZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpTZWFyY2hSZXN1
bHQ+PiYpOwotICAgIHZvaWQgc2VhcmNoSW5SZXF1ZXN0KEVycm9yU3RyaW5nJiwgY29uc3QgU3Ry
aW5nJiByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgcXVlcnksIGJvb2wgY2FzZVNlbnNpdGl2ZSwg
Ym9vbCBpc1JlZ2V4LCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpH
ZW5lcmljVHlwZXM6OlNlYXJjaE1hdGNoPj4mKTsKKyAgICB2b2lkIHNlYXJjaE90aGVyUmVxdWVz
dHMoY29uc3QgSlNDOjpZYXJyOjpSZWd1bGFyRXhwcmVzc2lvbiYsIFJlZjxKU09OOjpBcnJheU9m
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OlNlYXJjaFJlc3VsdD4+Jik7CisgICAgdm9pZCBz
ZWFyY2hJblJlcXVlc3QoSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBjb25zdCBJ
bnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpSZXF1ZXN0SWQmLCBjb25zdCBTdHJpbmcmIHF1
ZXJ5LCBib29sIGNhc2VTZW5zaXRpdmUsIGJvb2wgaXNSZWdleCwgUmVmUHRyPEpTT046OkFycmF5
T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6R2VuZXJpY1R5cGVzOjpTZWFyY2hNYXRjaD4+Jik7CiAK
IHByb3RlY3RlZDoKICAgICBJbnNwZWN0b3JOZXR3b3JrQWdlbnQoV2ViQWdlbnRDb250ZXh0Jik7
CiAKLSAgICB2aXJ0dWFsIFN0cmluZyBsb2FkZXJJZGVudGlmaWVyKERvY3VtZW50TG9hZGVyKikg
PSAwOwotICAgIHZpcnR1YWwgU3RyaW5nIGZyYW1lSWRlbnRpZmllcihEb2N1bWVudExvYWRlciop
ID0gMDsKKyAgICB2aXJ0dWFsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OkxvYWRlcklk
IGxvYWRlcklkZW50aWZpZXIoRG9jdW1lbnRMb2FkZXIqKSA9IDA7CisgICAgdmlydHVhbCBJbnNw
ZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpGcmFtZUlkIGZyYW1lSWRlbnRpZmllcihEb2N1bWVu
dExvYWRlciopID0gMDsKICAgICB2aXJ0dWFsIFZlY3RvcjxXZWJTb2NrZXQqPiBhY3RpdmVXZWJT
b2NrZXRzKGNvbnN0IExvY2tIb2xkZXImKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldFJlc291
cmNlQ2FjaGluZ0Rpc2FibGVkKGJvb2wpID0gMDsKLSAgICB2aXJ0dWFsIFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJp
bmcmIGZyYW1lSWQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0UmVzb3VyY2VDYWNoaW5nRGlz
YWJsZWRJbnRlcmFsKGJvb2wpID0gMDsKKyAgICB2aXJ0dWFsIFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJp
bmcmLCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpGcmFtZUlkJikgPSAwOwog
ICAgIHZpcnR1YWwgYm9vbCBzaG91bGRGb3JjZUJ1ZmZlcmluZ05ldHdvcmtSZXNvdXJjZURhdGEo
KSBjb25zdCA9IDA7CiAKIHByaXZhdGU6Ci0gICAgdm9pZCBlbmFibGUoKTsKLQogICAgIHZvaWQg
d2lsbFNlbmRSZXF1ZXN0KHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgRG9jdW1lbnRMb2FkZXIq
LCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZWRpcmVjdFJlc3Bv
bnNlLCBJbnNwZWN0b3JQYWdlQWdlbnQ6OlJlc291cmNlVHlwZSk7CiAKLSAgICB1c2luZyBOZXR3
b3JrU3RhZ2UgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpOZXR3b3JrU3RhZ2U7Ci0g
ICAgYm9vbCBzaG91bGRJbnRlcmNlcHQoVVJMLCBOZXR3b3JrU3RhZ2UpOworICAgIGJvb2wgc2hv
dWxkSW50ZXJjZXB0KFVSTCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6TmV0d29ya1N0
YWdlKTsKICAgICB2b2lkIGNvbnRpbnVlUGVuZGluZ1JlcXVlc3RzKCk7CiAgICAgdm9pZCBjb250
aW51ZVBlbmRpbmdSZXNwb25zZXMoKTsKIAotICAgIFdlYlNvY2tldCogd2ViU29ja2V0Rm9yUmVx
dWVzdElkKGNvbnN0IFN0cmluZyYgcmVxdWVzdElkKTsKKyAgICBXZWJTb2NrZXQqIHdlYlNvY2tl
dEZvclJlcXVlc3RJZChjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpSZXF1ZXN0
SWQmKTsKIAotICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpJbml0aWF0
b3I+IGJ1aWxkSW5pdGlhdG9yT2JqZWN0KERvY3VtZW50KiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0
KiA9IG51bGxwdHIpOworICAgIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpJbml0
aWF0b3I+IGJ1aWxkSW5pdGlhdG9yT2JqZWN0KERvY3VtZW50KiwgY29uc3QgUmVzb3VyY2VSZXF1
ZXN0KiA9IG51bGxwdHIpOwogICAgIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpS
ZXNvdXJjZVRpbWluZz4gYnVpbGRPYmplY3RGb3JUaW1pbmcoY29uc3QgTmV0d29ya0xvYWRNZXRy
aWNzKiwgUmVzb3VyY2VMb2FkZXImKTsKICAgICBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0
d29yazo6TWV0cmljcz4gYnVpbGRPYmplY3RGb3JNZXRyaWNzKGNvbnN0IE5ldHdvcmtMb2FkTWV0
cmljcyYpOwogICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpSZXNwb25z
ZT4gYnVpbGRPYmplY3RGb3JSZXNvdXJjZVJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2Um
LCBSZXNvdXJjZUxvYWRlciopOwpAQCAtMjM2LDcgKzIzMSw3IEBAIHByaXZhdGU6CiAgICAgICAg
IFN0cmluZyB1cmw7CiAgICAgICAgIGJvb2wgY2FzZVNlbnNpdGl2ZSB7IHRydWUgfTsKICAgICAg
ICAgYm9vbCBpc1JlZ2V4IHsgZmFsc2UgfTsKLSAgICAgICAgTmV0d29ya1N0YWdlIG5ldHdvcmtT
dGFnZSB7IE5ldHdvcmtTdGFnZTo6UmVzcG9uc2UgfTsKKyAgICAgICAgSW5zcGVjdG9yOjpQcm90
b2NvbDo6TmV0d29yazo6TmV0d29ya1N0YWdlIG5ldHdvcmtTdGFnZSB7IEluc3BlY3Rvcjo6UHJv
dG9jb2w6Ok5ldHdvcms6Ok5ldHdvcmtTdGFnZTo6UmVzcG9uc2UgfTsKIAogICAgICAgICBpbmxp
bmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEludGVyY2VwdCYgb3RoZXIpIGNvbnN0CiAgICAgICAg
IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9y
UGFnZUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9y
UGFnZUFnZW50LmNwcAppbmRleCA1MzllODEwNWI2NmU3YjJhNmEwNTU3MWExZTFjOGNkNmJkZjI3
YzkwLi44YmY3YWUxZTBkMDVhMjY0OWMxM2FiYjBkMTRkMjA4NDM3NzU4MDk5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JQYWdlQWdlbnQu
Y3BwCkBAIC0xNTEsNyArMTUxLDcgQEAgVmVjdG9yPENhY2hlZFJlc291cmNlKj4gSW5zcGVjdG9y
UGFnZUFnZW50OjpjYWNoZWRSZXNvdXJjZXNGb3JGcmFtZShGcmFtZSogZnJhbWUKICAgICByZXR1
cm4gcmVzdWx0OwogfQogCi12b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6cmVzb3VyY2VDb250ZW50
KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgRnJhbWUqIGZyYW1lLCBjb25zdCBVUkwmIHVybCwg
U3RyaW5nKiByZXN1bHQsIGJvb2wqIGJhc2U2NEVuY29kZWQpCit2b2lkIEluc3BlY3RvclBhZ2VB
Z2VudDo6cmVzb3VyY2VDb250ZW50KFByb3RvY29sOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcs
IEZyYW1lKiBmcmFtZSwgY29uc3QgVVJMJiB1cmwsIFN0cmluZyogcmVzdWx0LCBib29sKiBiYXNl
NjRFbmNvZGVkKQogewogICAgIERvY3VtZW50TG9hZGVyKiBsb2FkZXIgPSBhc3NlcnREb2N1bWVu
dExvYWRlcihlcnJvclN0cmluZywgZnJhbWUpOwogICAgIGlmICghbG9hZGVyKQpAQCAtMjEzLDM3
ICsyMTMsMzcgQEAgQ2FjaGVkUmVzb3VyY2UqIEluc3BlY3RvclBhZ2VBZ2VudDo6Y2FjaGVkUmVz
b3VyY2UoRnJhbWUqIGZyYW1lLCBjb25zdCBVUkwmIHVybCkKICAgICByZXR1cm4gY2FjaGVkUmVz
b3VyY2U7CiB9CiAKLUluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OlJlc291cmNlVHlwZSBJbnNw
ZWN0b3JQYWdlQWdlbnQ6OnJlc291cmNlVHlwZUpTT04oSW5zcGVjdG9yUGFnZUFnZW50OjpSZXNv
dXJjZVR5cGUgcmVzb3VyY2VUeXBlKQorUHJvdG9jb2w6OlBhZ2U6OlJlc291cmNlVHlwZSBJbnNw
ZWN0b3JQYWdlQWdlbnQ6OnJlc291cmNlVHlwZUpTT04oSW5zcGVjdG9yUGFnZUFnZW50OjpSZXNv
dXJjZVR5cGUgcmVzb3VyY2VUeXBlKQogewogICAgIHN3aXRjaCAocmVzb3VyY2VUeXBlKSB7CiAg
ICAgY2FzZSBEb2N1bWVudFJlc291cmNlOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90
b2NvbDo6UGFnZTo6UmVzb3VyY2VUeXBlOjpEb2N1bWVudDsKKyAgICAgICAgcmV0dXJuIFByb3Rv
Y29sOjpQYWdlOjpSZXNvdXJjZVR5cGU6OkRvY3VtZW50OwogICAgIGNhc2UgSW1hZ2VSZXNvdXJj
ZToKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OlJlc291cmNlVHlw
ZTo6SW1hZ2U7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6UGFnZTo6UmVzb3VyY2VUeXBlOjpJ
bWFnZTsKICAgICBjYXNlIEZvbnRSZXNvdXJjZToKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlBhZ2U6OlJlc291cmNlVHlwZTo6Rm9udDsKKyAgICAgICAgcmV0dXJuIFByb3Rv
Y29sOjpQYWdlOjpSZXNvdXJjZVR5cGU6OkZvbnQ7CiAgICAgY2FzZSBTdHlsZVNoZWV0UmVzb3Vy
Y2U6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpSZXNvdXJjZVR5
cGU6OlN0eWxlU2hlZXQ7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6UGFnZTo6UmVzb3VyY2VU
eXBlOjpTdHlsZVNoZWV0OwogICAgIGNhc2UgU2NyaXB0UmVzb3VyY2U6Ci0gICAgICAgIHJldHVy
biBJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpSZXNvdXJjZVR5cGU6OlNjcmlwdDsKKyAgICAg
ICAgcmV0dXJuIFByb3RvY29sOjpQYWdlOjpSZXNvdXJjZVR5cGU6OlNjcmlwdDsKICAgICBjYXNl
IFhIUlJlc291cmNlOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6
UmVzb3VyY2VUeXBlOjpYSFI7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6UGFnZTo6UmVzb3Vy
Y2VUeXBlOjpYSFI7CiAgICAgY2FzZSBGZXRjaFJlc291cmNlOgotICAgICAgICByZXR1cm4gSW5z
cGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6UmVzb3VyY2VUeXBlOjpGZXRjaDsKKyAgICAgICAgcmV0
dXJuIFByb3RvY29sOjpQYWdlOjpSZXNvdXJjZVR5cGU6OkZldGNoOwogICAgIGNhc2UgUGluZ1Jl
c291cmNlOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6UmVzb3Vy
Y2VUeXBlOjpQaW5nOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OlBhZ2U6OlJlc291cmNlVHlw
ZTo6UGluZzsKICAgICBjYXNlIEJlYWNvblJlc291cmNlOgotICAgICAgICByZXR1cm4gSW5zcGVj
dG9yOjpQcm90b2NvbDo6UGFnZTo6UmVzb3VyY2VUeXBlOjpCZWFjb247CisgICAgICAgIHJldHVy
biBQcm90b2NvbDo6UGFnZTo6UmVzb3VyY2VUeXBlOjpCZWFjb247CiAgICAgY2FzZSBXZWJTb2Nr
ZXRSZXNvdXJjZToKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OlJl
c291cmNlVHlwZTo6V2ViU29ja2V0OworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OlBhZ2U6OlJl
c291cmNlVHlwZTo6V2ViU29ja2V0OwogICAgIGNhc2UgT3RoZXJSZXNvdXJjZToKLSAgICAgICAg
cmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OlJlc291cmNlVHlwZTo6T3RoZXI7Cisg
ICAgICAgIHJldHVybiBQcm90b2NvbDo6UGFnZTo6UmVzb3VyY2VUeXBlOjpPdGhlcjsKICNpZiBF
TkFCTEUoQVBQTElDQVRJT05fTUFOSUZFU1QpCiAgICAgY2FzZSBBcHBsaWNhdGlvbk1hbmlmZXN0
UmVzb3VyY2U6CiAgICAgICAgIGJyZWFrOwogI2VuZGlmCiAgICAgfQotICAgIHJldHVybiBJbnNw
ZWN0b3I6OlByb3RvY29sOjpQYWdlOjpSZXNvdXJjZVR5cGU6Ok90aGVyOworICAgIHJldHVybiBQ
cm90b2NvbDo6UGFnZTo6UmVzb3VyY2VUeXBlOjpPdGhlcjsKIH0KIAogSW5zcGVjdG9yUGFnZUFn
ZW50OjpSZXNvdXJjZVR5cGUgSW5zcGVjdG9yUGFnZUFnZW50OjppbnNwZWN0b3JSZXNvdXJjZVR5
cGUoQ2FjaGVkUmVzb3VyY2U6OlR5cGUgdHlwZSkKQEAgLTI5Nyw3ICsyOTcsNyBAQCBJbnNwZWN0
b3JQYWdlQWdlbnQ6OlJlc291cmNlVHlwZSBJbnNwZWN0b3JQYWdlQWdlbnQ6Omluc3BlY3RvclJl
c291cmNlVHlwZShjb25zdAogICAgIHJldHVybiBpbnNwZWN0b3JSZXNvdXJjZVR5cGUoY2FjaGVk
UmVzb3VyY2UudHlwZSgpKTsKIH0KIAotSW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6UmVzb3Vy
Y2VUeXBlIEluc3BlY3RvclBhZ2VBZ2VudDo6Y2FjaGVkUmVzb3VyY2VUeXBlSlNPTihjb25zdCBD
YWNoZWRSZXNvdXJjZSYgY2FjaGVkUmVzb3VyY2UpCitQcm90b2NvbDo6UGFnZTo6UmVzb3VyY2VU
eXBlIEluc3BlY3RvclBhZ2VBZ2VudDo6Y2FjaGVkUmVzb3VyY2VUeXBlSlNPTihjb25zdCBDYWNo
ZWRSZXNvdXJjZSYgY2FjaGVkUmVzb3VyY2UpCiB7CiAgICAgcmV0dXJuIHJlc291cmNlVHlwZUpT
T04oaW5zcGVjdG9yUmVzb3VyY2VUeXBlKGNhY2hlZFJlc291cmNlKSk7CiB9CkBAIC0zMTEsNyAr
MzExLDcgQEAgRnJhbWUqIEluc3BlY3RvclBhZ2VBZ2VudDo6ZmluZEZyYW1lV2l0aFNlY3VyaXR5
T3JpZ2luKFBhZ2UmIHBhZ2UsIGNvbnN0IFN0cmluZyYKICAgICByZXR1cm4gbnVsbHB0cjsKIH0K
IAotRG9jdW1lbnRMb2FkZXIqIEluc3BlY3RvclBhZ2VBZ2VudDo6YXNzZXJ0RG9jdW1lbnRMb2Fk
ZXIoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBGcmFtZSogZnJhbWUpCitEb2N1bWVudExvYWRl
ciogSW5zcGVjdG9yUGFnZUFnZW50Ojphc3NlcnREb2N1bWVudExvYWRlcihQcm90b2NvbDo6RXJy
b3JTdHJpbmcmIGVycm9yU3RyaW5nLCBGcmFtZSogZnJhbWUpCiB7CiAgICAgRnJhbWVMb2FkZXIm
IGZyYW1lTG9hZGVyID0gZnJhbWUtPmxvYWRlcigpOwogICAgIERvY3VtZW50TG9hZGVyKiBkb2N1
bWVudExvYWRlciA9IGZyYW1lTG9hZGVyLmRvY3VtZW50TG9hZGVyKCk7CkBAIC0zMzgsMTYgKzMz
OCwxMyBAQCB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6ZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNr
ZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRSb3V0ZXIqLAogCiB2b2lkIEluc3BlY3RvclBhZ2VBZ2Vu
dDo6d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVh
c29uKQogewotICAgIEVycm9yU3RyaW5nIHVudXNlZDsKLSAgICBkaXNhYmxlKHVudXNlZCk7Cisg
ICAgZGlzYWJsZSgpOwogfQogCi12b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6ZW5hYmxlKEVycm9y
U3RyaW5nJiBlcnJvclN0cmluZykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3Bl
Y3RvclBhZ2VBZ2VudDo6ZW5hYmxlKCkKIHsKLSAgICBpZiAobV9pbnN0cnVtZW50aW5nQWdlbnRz
LmVuYWJsZWRQYWdlQWdlbnQoKSA9PSB0aGlzKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIlBh
Z2UgZG9tYWluIGFscmVhZHkgZW5hYmxlZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAg
ICBpZiAobV9pbnN0cnVtZW50aW5nQWdlbnRzLmVuYWJsZWRQYWdlQWdlbnQoKSA9PSB0aGlzKQor
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIlBhZ2UgZG9tYWluIGFscmVhZHkgZW5hYmxl
ZCJfcyk7CiAKICAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMuc2V0RW5hYmxlZFBhZ2VBZ2VudCh0
aGlzKTsKIApAQCAtMzU4LDIxICszNTUsMjIgQEAgdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmVu
YWJsZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCiAjaWYgRU5BQkxFKERBUktfTU9ERV9DU1Mp
IHx8IEhBVkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCiAgICAgZGVmYXVsdEFwcGVhcmFuY2VEaWRD
aGFuZ2UobV9pbnNwZWN0ZWRQYWdlLmRlZmF1bHRVc2VEYXJrQXBwZWFyYW5jZSgpKTsKICNlbmRp
ZgorCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmRpc2Fi
bGUoRXJyb3JTdHJpbmcmKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9y
UGFnZUFnZW50OjpkaXNhYmxlKCkKIHsKICAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMuc2V0RW5h
YmxlZFBhZ2VBZ2VudChudWxscHRyKTsKIAotICAgIEVycm9yU3RyaW5nIHVudXNlZDsKLSAgICBz
ZXRTaG93UGFpbnRSZWN0cyh1bnVzZWQsIGZhbHNlKTsKKyAgICBzZXRTaG93UGFpbnRSZWN0cyhm
YWxzZSk7CiAjaWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgc2V0U2hvd1J1bGVycyh1bnVz
ZWQsIGZhbHNlKTsKKyAgICBzZXRTaG93UnVsZXJzKGZhbHNlKTsKICNlbmRpZgotICAgIG92ZXJy
aWRlVXNlckFnZW50KHVudXNlZCwgbnVsbHB0cik7Ci0gICAgc2V0RW11bGF0ZWRNZWRpYSh1bnVz
ZWQsIGVtcHR5U3RyaW5nKCkpOworICAgIG92ZXJyaWRlVXNlckFnZW50KG51bGxTdHJpbmcoKSk7
CisgICAgc2V0RW11bGF0ZWRNZWRpYShlbXB0eVN0cmluZygpKTsKICNpZiBFTkFCTEUoREFSS19N
T0RFX0NTUykgfHwgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKLSAgICBzZXRGb3JjZWRBcHBl
YXJhbmNlKHVudXNlZCwgZW1wdHlTdHJpbmcoKSk7CisgICAgc2V0Rm9yY2VkQXBwZWFyYW5jZShX
VEY6Om51bGxvcHQpOwogI2VuZGlmCiAKICAgICBhdXRvJiBpbnNwZWN0ZWRQYWdlU2V0dGluZ3Mg
PSBtX2luc3BlY3RlZFBhZ2Uuc2V0dGluZ3MoKTsKQEAgLTM5MSw2ICszODksOCBAQCB2b2lkIElu
c3BlY3RvclBhZ2VBZ2VudDo6ZGlzYWJsZShFcnJvclN0cmluZyYpCiAgICAgbV9jbGllbnQtPnNl
dERldmVsb3BlclByZWZlcmVuY2VPdmVycmlkZShJbnNwZWN0b3JDbGllbnQ6OkRldmVsb3BlclBy
ZWZlcmVuY2U6OkFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZUVuYWJsZWQsIFdURjo6bnVsbG9w
dCk7CiAgICAgbV9jbGllbnQtPnNldERldmVsb3BlclByZWZlcmVuY2VPdmVycmlkZShJbnNwZWN0
b3JDbGllbnQ6OkRldmVsb3BlclByZWZlcmVuY2U6OklUUERlYnVnTW9kZUVuYWJsZWQsIFdURjo6
bnVsbG9wdCk7CiAgICAgbV9jbGllbnQtPnNldERldmVsb3BlclByZWZlcmVuY2VPdmVycmlkZShJ
bnNwZWN0b3JDbGllbnQ6OkRldmVsb3BlclByZWZlcmVuY2U6Ok1vY2tDYXB0dXJlRGV2aWNlc0Vu
YWJsZWQsIFdURjo6bnVsbG9wdCk7CisKKyAgICByZXR1cm4geyB9OwogfQogCiBkb3VibGUgSW5z
cGVjdG9yUGFnZUFnZW50Ojp0aW1lc3RhbXAoKQpAQCAtMzk4LDIxICszOTgsMTkgQEAgZG91Ymxl
IEluc3BlY3RvclBhZ2VBZ2VudDo6dGltZXN0YW1wKCkKICAgICByZXR1cm4gbV9lbnZpcm9ubWVu
dC5leGVjdXRpb25TdG9wd2F0Y2goKS5lbGFwc2VkVGltZSgpLnNlY29uZHMoKTsKIH0KIAotdm9p
ZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OnJlbG9hZChFcnJvclN0cmluZyYsIGNvbnN0IGJvb2wqIG9w
dGlvbmFsUmVsb2FkRnJvbU9yaWdpbiwgY29uc3QgYm9vbCogb3B0aW9uYWxSZXZhbGlkYXRlQWxs
UmVzb3VyY2VzKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yUGFnZUFn
ZW50OjpyZWxvYWQoT3B0aW9uYWw8Ym9vbD4mJiBpZ25vcmVDYWNoZSwgT3B0aW9uYWw8Ym9vbD4m
JiByZXZhbGlkYXRlQWxsUmVzb3VyY2VzKQogewotICAgIGJvb2wgcmVsb2FkRnJvbU9yaWdpbiA9
IG9wdGlvbmFsUmVsb2FkRnJvbU9yaWdpbiAmJiAqb3B0aW9uYWxSZWxvYWRGcm9tT3JpZ2luOwot
ICAgIGJvb2wgcmV2YWxpZGF0ZUFsbFJlc291cmNlcyA9IG9wdGlvbmFsUmV2YWxpZGF0ZUFsbFJl
c291cmNlcyAmJiAqb3B0aW9uYWxSZXZhbGlkYXRlQWxsUmVzb3VyY2VzOwotCiAgICAgT3B0aW9u
U2V0PFJlbG9hZE9wdGlvbj4gcmVsb2FkT3B0aW9uczsKLSAgICBpZiAocmVsb2FkRnJvbU9yaWdp
bikKKyAgICBpZiAoaWdub3JlQ2FjaGUgJiYgKmlnbm9yZUNhY2hlKQogICAgICAgICByZWxvYWRP
cHRpb25zLmFkZChSZWxvYWRPcHRpb246OkZyb21PcmlnaW4pOwotICAgIGlmICghcmV2YWxpZGF0
ZUFsbFJlc291cmNlcykKKyAgICBpZiAoIXJldmFsaWRhdGVBbGxSZXNvdXJjZXMgfHwgISpyZXZh
bGlkYXRlQWxsUmVzb3VyY2VzKQogICAgICAgICByZWxvYWRPcHRpb25zLmFkZChSZWxvYWRPcHRp
b246OkV4cGlyZWRPbmx5KTsKLQogICAgIG1faW5zcGVjdGVkUGFnZS5tYWluRnJhbWUoKS5sb2Fk
ZXIoKS5yZWxvYWQocmVsb2FkT3B0aW9ucyk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lk
IEluc3BlY3RvclBhZ2VBZ2VudDo6bmF2aWdhdGUoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcm
IHVybCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvclBhZ2VBZ2VudDo6
bmF2aWdhdGUoY29uc3QgU3RyaW5nJiB1cmwpCiB7CiAgICAgVXNlckdlc3R1cmVJbmRpY2F0b3Ig
aW5kaWNhdG9yIHsgUHJvY2Vzc2luZ1VzZXJHZXN0dXJlIH07CiAgICAgRnJhbWUmIGZyYW1lID0g
bV9pbnNwZWN0ZWRQYWdlLm1haW5GcmFtZSgpOwpAQCAtNDIxLDExMSArNDE5LDk3IEBAIHZvaWQg
SW5zcGVjdG9yUGFnZUFnZW50OjpuYXZpZ2F0ZShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYg
dXJsKQogICAgIEZyYW1lTG9hZFJlcXVlc3QgZnJhbWVMb2FkUmVxdWVzdCB7ICpmcmFtZS5kb2N1
bWVudCgpLCBmcmFtZS5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLCBXVEZNb3ZlKHJlc291
cmNlUmVxdWVzdCksICJfc2VsZiJfcywgSW5pdGlhdGVkQnlNYWluRnJhbWU6OlVua25vd24gfTsK
ICAgICBmcmFtZUxvYWRSZXF1ZXN0LmRpc2FibGVOYXZpZ2F0aW9uVG9JbnZhbGlkVVJMKCk7CiAg
ICAgZnJhbWUubG9hZGVyKCkuY2hhbmdlTG9jYXRpb24oV1RGTW92ZShmcmFtZUxvYWRSZXF1ZXN0
KSk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6b3Zl
cnJpZGVVc2VyQWdlbnQoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcqIHZhbHVlKQorUHJvdG9j
b2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yUGFnZUFnZW50OjpvdmVycmlkZVVzZXJB
Z2VudChjb25zdCBTdHJpbmcmIHZhbHVlKQogewotICAgIG1fdXNlckFnZW50T3ZlcnJpZGUgPSB2
YWx1ZSA/ICp2YWx1ZSA6IFN0cmluZygpOworICAgIG1fdXNlckFnZW50T3ZlcnJpZGUgPSB2YWx1
ZTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXN0YXRpYyBpbmxpbmUgT3B0aW9uYWw8Ym9vbD4g
YXNPcHRpb25hbEJvb2woY29uc3QgYm9vbCogdmFsdWUpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdP
cjx2b2lkPiBJbnNwZWN0b3JQYWdlQWdlbnQ6Om92ZXJyaWRlU2V0dGluZyhQcm90b2NvbDo6UGFn
ZTo6U2V0dGluZyBzZXR0aW5nLCBPcHRpb25hbDxib29sPiYmIHZhbHVlKQogewotICAgIGlmICgh
dmFsdWUpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgcmV0dXJuICp2YWx1ZTsK
LX0KLQotdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6Om92ZXJyaWRlU2V0dGluZyhFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgc2V0dGluZ1N0cmluZywgY29uc3QgYm9vbCog
dmFsdWUpCi17Ci0gICAgaWYgKHNldHRpbmdTdHJpbmcuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGVy
cm9yU3RyaW5nID0gInNldHRpbmdTdHJpbmcgaXMgZW1wdHkiX3M7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBhdXRvIHNldHRpbmcgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpJbnNwZWN0
b3JIZWxwZXJzOjpwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6
UGFnZTo6U2V0dGluZz4oc2V0dGluZ1N0cmluZyk7Ci0gICAgaWYgKCFzZXR0aW5nKSB7Ci0gICAg
ICAgIGVycm9yU3RyaW5nID0gbWFrZVN0cmluZygiVW5rbm93biBzZXR0aW5nU3RyaW5nOiAiX3Ms
IHNldHRpbmdTdHJpbmcpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgYXV0byYgaW5z
cGVjdGVkUGFnZVNldHRpbmdzID0gbV9pbnNwZWN0ZWRQYWdlLnNldHRpbmdzKCk7CiAKLSAgICBh
dXRvIG92ZXJyaWRlVmFsdWUgPSBhc09wdGlvbmFsQm9vbCh2YWx1ZSk7Ci0gICAgc3dpdGNoIChz
ZXR0aW5nLnZhbHVlKCkpIHsKLSAgICBjYXNlIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OlNl
dHRpbmc6OkFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZUVuYWJsZWQ6Ci0gICAgICAgIG1fY2xp
ZW50LT5zZXREZXZlbG9wZXJQcmVmZXJlbmNlT3ZlcnJpZGUoSW5zcGVjdG9yQ2xpZW50OjpEZXZl
bG9wZXJQcmVmZXJlbmNlOjpBZENsaWNrQXR0cmlidXRpb25EZWJ1Z01vZGVFbmFibGVkLCBvdmVy
cmlkZVZhbHVlKTsKLSAgICAgICAgcmV0dXJuOworICAgIHN3aXRjaCAoc2V0dGluZykgeworICAg
IGNhc2UgUHJvdG9jb2w6OlBhZ2U6OlNldHRpbmc6OkFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9k
ZUVuYWJsZWQ6CisgICAgICAgIG1fY2xpZW50LT5zZXREZXZlbG9wZXJQcmVmZXJlbmNlT3ZlcnJp
ZGUoSW5zcGVjdG9yQ2xpZW50OjpEZXZlbG9wZXJQcmVmZXJlbmNlOjpBZENsaWNrQXR0cmlidXRp
b25EZWJ1Z01vZGVFbmFibGVkLCB2YWx1ZSk7CisgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBj
YXNlIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OlNldHRpbmc6OkF1dGhvckFuZFVzZXJTdHls
ZXNFbmFibGVkOgotICAgICAgICBpbnNwZWN0ZWRQYWdlU2V0dGluZ3Muc2V0QXV0aG9yQW5kVXNl
clN0eWxlc0VuYWJsZWRJbnNwZWN0b3JPdmVycmlkZShvdmVycmlkZVZhbHVlKTsKLSAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgUHJvdG9jb2w6OlBhZ2U6OlNldHRpbmc6OkF1dGhvckFuZFVzZXJT
dHlsZXNFbmFibGVkOgorICAgICAgICBpbnNwZWN0ZWRQYWdlU2V0dGluZ3Muc2V0QXV0aG9yQW5k
VXNlclN0eWxlc0VuYWJsZWRJbnNwZWN0b3JPdmVycmlkZSh2YWx1ZSk7CisgICAgICAgIHJldHVy
biB7IH07CiAKLSAgICBjYXNlIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OlNldHRpbmc6OklD
RUNhbmRpZGF0ZUZpbHRlcmluZ0VuYWJsZWQ6Ci0gICAgICAgIGluc3BlY3RlZFBhZ2VTZXR0aW5n
cy5zZXRJQ0VDYW5kaWRhdGVGaWx0ZXJpbmdFbmFibGVkSW5zcGVjdG9yT3ZlcnJpZGUob3ZlcnJp
ZGVWYWx1ZSk7Ci0gICAgICAgIHJldHVybjsKKyAgICBjYXNlIFByb3RvY29sOjpQYWdlOjpTZXR0
aW5nOjpJQ0VDYW5kaWRhdGVGaWx0ZXJpbmdFbmFibGVkOgorICAgICAgICBpbnNwZWN0ZWRQYWdl
U2V0dGluZ3Muc2V0SUNFQ2FuZGlkYXRlRmlsdGVyaW5nRW5hYmxlZEluc3BlY3Rvck92ZXJyaWRl
KHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90
b2NvbDo6UGFnZTo6U2V0dGluZzo6SVRQRGVidWdNb2RlRW5hYmxlZDoKLSAgICAgICAgbV9jbGll
bnQtPnNldERldmVsb3BlclByZWZlcmVuY2VPdmVycmlkZShJbnNwZWN0b3JDbGllbnQ6OkRldmVs
b3BlclByZWZlcmVuY2U6OklUUERlYnVnTW9kZUVuYWJsZWQsIG92ZXJyaWRlVmFsdWUpOwotICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBQcm90b2NvbDo6UGFnZTo6U2V0dGluZzo6SVRQRGVidWdN
b2RlRW5hYmxlZDoKKyAgICAgICAgbV9jbGllbnQtPnNldERldmVsb3BlclByZWZlcmVuY2VPdmVy
cmlkZShJbnNwZWN0b3JDbGllbnQ6OkRldmVsb3BlclByZWZlcmVuY2U6OklUUERlYnVnTW9kZUVu
YWJsZWQsIHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGNhc2UgSW5zcGVjdG9y
OjpQcm90b2NvbDo6UGFnZTo6U2V0dGluZzo6SW1hZ2VzRW5hYmxlZDoKLSAgICAgICAgaW5zcGVj
dGVkUGFnZVNldHRpbmdzLnNldEltYWdlc0VuYWJsZWRJbnNwZWN0b3JPdmVycmlkZShvdmVycmlk
ZVZhbHVlKTsKLSAgICAgICAgcmV0dXJuOworICAgIGNhc2UgUHJvdG9jb2w6OlBhZ2U6OlNldHRp
bmc6OkltYWdlc0VuYWJsZWQ6CisgICAgICAgIGluc3BlY3RlZFBhZ2VTZXR0aW5ncy5zZXRJbWFn
ZXNFbmFibGVkSW5zcGVjdG9yT3ZlcnJpZGUodmFsdWUpOworICAgICAgICByZXR1cm4geyB9Owog
Ci0gICAgY2FzZSBJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpTZXR0aW5nOjpNZWRpYUNhcHR1
cmVSZXF1aXJlc1NlY3VyZUNvbm5lY3Rpb246Ci0gICAgICAgIGluc3BlY3RlZFBhZ2VTZXR0aW5n
cy5zZXRNZWRpYUNhcHR1cmVSZXF1aXJlc1NlY3VyZUNvbm5lY3Rpb25JbnNwZWN0b3JPdmVycmlk
ZShvdmVycmlkZVZhbHVlKTsKLSAgICAgICAgcmV0dXJuOworICAgIGNhc2UgUHJvdG9jb2w6OlBh
Z2U6OlNldHRpbmc6Ok1lZGlhQ2FwdHVyZVJlcXVpcmVzU2VjdXJlQ29ubmVjdGlvbjoKKyAgICAg
ICAgaW5zcGVjdGVkUGFnZVNldHRpbmdzLnNldE1lZGlhQ2FwdHVyZVJlcXVpcmVzU2VjdXJlQ29u
bmVjdGlvbkluc3BlY3Rvck92ZXJyaWRlKHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAot
ICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6U2V0dGluZzo6TW9ja0NhcHR1cmVE
ZXZpY2VzRW5hYmxlZDoKLSAgICAgICAgaW5zcGVjdGVkUGFnZVNldHRpbmdzLnNldE1vY2tDYXB0
dXJlRGV2aWNlc0VuYWJsZWRJbnNwZWN0b3JPdmVycmlkZShvdmVycmlkZVZhbHVlKTsKLSAgICAg
ICAgbV9jbGllbnQtPnNldERldmVsb3BlclByZWZlcmVuY2VPdmVycmlkZShJbnNwZWN0b3JDbGll
bnQ6OkRldmVsb3BlclByZWZlcmVuY2U6Ok1vY2tDYXB0dXJlRGV2aWNlc0VuYWJsZWQsIG92ZXJy
aWRlVmFsdWUpOwotICAgICAgICByZXR1cm47CisgICAgY2FzZSBQcm90b2NvbDo6UGFnZTo6U2V0
dGluZzo6TW9ja0NhcHR1cmVEZXZpY2VzRW5hYmxlZDoKKyAgICAgICAgaW5zcGVjdGVkUGFnZVNl
dHRpbmdzLnNldE1vY2tDYXB0dXJlRGV2aWNlc0VuYWJsZWRJbnNwZWN0b3JPdmVycmlkZSh2YWx1
ZSk7CisgICAgICAgIG1fY2xpZW50LT5zZXREZXZlbG9wZXJQcmVmZXJlbmNlT3ZlcnJpZGUoSW5z
cGVjdG9yQ2xpZW50OjpEZXZlbG9wZXJQcmVmZXJlbmNlOjpNb2NrQ2FwdHVyZURldmljZXNFbmFi
bGVkLCB2YWx1ZSk7CisgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBjYXNlIEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlBhZ2U6OlNldHRpbmc6Ok5lZWRzU2l0ZVNwZWNpZmljUXVpcmtzOgotICAgICAg
ICBpbnNwZWN0ZWRQYWdlU2V0dGluZ3Muc2V0TmVlZHNTaXRlU3BlY2lmaWNRdWlya3NJbnNwZWN0
b3JPdmVycmlkZShvdmVycmlkZVZhbHVlKTsKLSAgICAgICAgcmV0dXJuOworICAgIGNhc2UgUHJv
dG9jb2w6OlBhZ2U6OlNldHRpbmc6Ok5lZWRzU2l0ZVNwZWNpZmljUXVpcmtzOgorICAgICAgICBp
bnNwZWN0ZWRQYWdlU2V0dGluZ3Muc2V0TmVlZHNTaXRlU3BlY2lmaWNRdWlya3NJbnNwZWN0b3JP
dmVycmlkZSh2YWx1ZSk7CisgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBjYXNlIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlBhZ2U6OlNldHRpbmc6OlNjcmlwdEVuYWJsZWQ6Ci0gICAgICAgIGluc3Bl
Y3RlZFBhZ2VTZXR0aW5ncy5zZXRTY3JpcHRFbmFibGVkSW5zcGVjdG9yT3ZlcnJpZGUob3ZlcnJp
ZGVWYWx1ZSk7Ci0gICAgICAgIHJldHVybjsKKyAgICBjYXNlIFByb3RvY29sOjpQYWdlOjpTZXR0
aW5nOjpTY3JpcHRFbmFibGVkOgorICAgICAgICBpbnNwZWN0ZWRQYWdlU2V0dGluZ3Muc2V0U2Ny
aXB0RW5hYmxlZEluc3BlY3Rvck92ZXJyaWRlKHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHsgfTsK
IAotICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6U2V0dGluZzo6U2hvd0RlYnVn
Qm9yZGVyczoKLSAgICAgICAgaW5zcGVjdGVkUGFnZVNldHRpbmdzLnNldFNob3dEZWJ1Z0JvcmRl
cnNJbnNwZWN0b3JPdmVycmlkZShvdmVycmlkZVZhbHVlKTsKLSAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgUHJvdG9jb2w6OlBhZ2U6OlNldHRpbmc6OlNob3dEZWJ1Z0JvcmRlcnM6CisgICAgICAg
IGluc3BlY3RlZFBhZ2VTZXR0aW5ncy5zZXRTaG93RGVidWdCb3JkZXJzSW5zcGVjdG9yT3ZlcnJp
ZGUodmFsdWUpOworICAgICAgICByZXR1cm4geyB9OwogCi0gICAgY2FzZSBJbnNwZWN0b3I6OlBy
b3RvY29sOjpQYWdlOjpTZXR0aW5nOjpTaG93UmVwYWludENvdW50ZXI6Ci0gICAgICAgIGluc3Bl
Y3RlZFBhZ2VTZXR0aW5ncy5zZXRTaG93UmVwYWludENvdW50ZXJJbnNwZWN0b3JPdmVycmlkZShv
dmVycmlkZVZhbHVlKTsKLSAgICAgICAgcmV0dXJuOworICAgIGNhc2UgUHJvdG9jb2w6OlBhZ2U6
OlNldHRpbmc6OlNob3dSZXBhaW50Q291bnRlcjoKKyAgICAgICAgaW5zcGVjdGVkUGFnZVNldHRp
bmdzLnNldFNob3dSZXBhaW50Q291bnRlckluc3BlY3Rvck92ZXJyaWRlKHZhbHVlKTsKKyAgICAg
ICAgcmV0dXJuIHsgfTsKIAotICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6U2V0
dGluZzo6V2ViUlRDRW5jcnlwdGlvbkVuYWJsZWQ6Ci0gICAgICAgIGluc3BlY3RlZFBhZ2VTZXR0
aW5ncy5zZXRXZWJSVENFbmNyeXB0aW9uRW5hYmxlZEluc3BlY3Rvck92ZXJyaWRlKG92ZXJyaWRl
VmFsdWUpOwotICAgICAgICByZXR1cm47CisgICAgY2FzZSBQcm90b2NvbDo6UGFnZTo6U2V0dGlu
Zzo6V2ViUlRDRW5jcnlwdGlvbkVuYWJsZWQ6CisgICAgICAgIGluc3BlY3RlZFBhZ2VTZXR0aW5n
cy5zZXRXZWJSVENFbmNyeXB0aW9uRW5hYmxlZEluc3BlY3Rvck92ZXJyaWRlKHZhbHVlKTsKKyAg
ICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6
U2V0dGluZzo6V2ViU2VjdXJpdHlFbmFibGVkOgotICAgICAgICBpbnNwZWN0ZWRQYWdlU2V0dGlu
Z3Muc2V0V2ViU2VjdXJpdHlFbmFibGVkSW5zcGVjdG9yT3ZlcnJpZGUob3ZlcnJpZGVWYWx1ZSk7
Ci0gICAgICAgIHJldHVybjsKKyAgICBjYXNlIFByb3RvY29sOjpQYWdlOjpTZXR0aW5nOjpXZWJT
ZWN1cml0eUVuYWJsZWQ6CisgICAgICAgIGluc3BlY3RlZFBhZ2VTZXR0aW5ncy5zZXRXZWJTZWN1
cml0eUVuYWJsZWRJbnNwZWN0b3JPdmVycmlkZSh2YWx1ZSk7CisgICAgICAgIHJldHVybiB7IH07
CiAgICAgfQogCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIHsgfTsKIH0K
IAotc3RhdGljIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkNvb2tpZVNhbWVTaXRlUG9saWN5
IGNvb2tpZVNhbWVTaXRlUG9saWN5SlNPTihDb29raWU6OlNhbWVTaXRlUG9saWN5IHBvbGljeSkK
K3N0YXRpYyBQcm90b2NvbDo6UGFnZTo6Q29va2llU2FtZVNpdGVQb2xpY3kgY29va2llU2FtZVNp
dGVQb2xpY3lKU09OKENvb2tpZTo6U2FtZVNpdGVQb2xpY3kgcG9saWN5KQogewogICAgIHN3aXRj
aCAocG9saWN5KSB7CiAgICAgY2FzZSBDb29raWU6OlNhbWVTaXRlUG9saWN5OjpOb25lOgotICAg
ICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6Q29va2llU2FtZVNpdGVQb2xp
Y3k6Ok5vbmU7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6UGFnZTo6Q29va2llU2FtZVNpdGVQ
b2xpY3k6Ok5vbmU7CiAgICAgY2FzZSBDb29raWU6OlNhbWVTaXRlUG9saWN5OjpMYXg6Ci0gICAg
ICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpDb29raWVTYW1lU2l0ZVBvbGlj
eTo6TGF4OworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OlBhZ2U6OkNvb2tpZVNhbWVTaXRlUG9s
aWN5OjpMYXg7CiAgICAgY2FzZSBDb29raWU6OlNhbWVTaXRlUG9saWN5OjpTdHJpY3Q6Ci0gICAg
ICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpDb29raWVTYW1lU2l0ZVBvbGlj
eTo6U3RyaWN0OworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OlBhZ2U6OkNvb2tpZVNhbWVTaXRl
UG9saWN5OjpTdHJpY3Q7CiAgICAgfQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJl
dHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpDb29raWVTYW1lU2l0ZVBvbGljeTo6Tm9u
ZTsKKyAgICByZXR1cm4gUHJvdG9jb2w6OlBhZ2U6OkNvb2tpZVNhbWVTaXRlUG9saWN5OjpOb25l
OwogfQogCi1zdGF0aWMgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkNvb2tpZT4gYnVp
bGRPYmplY3RGb3JDb29raWUoY29uc3QgQ29va2llJiBjb29raWUpCitzdGF0aWMgUmVmPFByb3Rv
Y29sOjpQYWdlOjpDb29raWU+IGJ1aWxkT2JqZWN0Rm9yQ29va2llKGNvbnN0IENvb2tpZSYgY29v
a2llKQogewotICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpDb29raWU6OmNy
ZWF0ZSgpCisgICAgcmV0dXJuIFByb3RvY29sOjpQYWdlOjpDb29raWU6OmNyZWF0ZSgpCiAgICAg
ICAgIC5zZXROYW1lKGNvb2tpZS5uYW1lKQogICAgICAgICAuc2V0VmFsdWUoY29va2llLnZhbHVl
KQogICAgICAgICAuc2V0RG9tYWluKGNvb2tpZS5kb21haW4pCkBAIC01MzgsOSArNTIyLDkgQEAg
c3RhdGljIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpDb29raWU+IGJ1aWxkT2JqZWN0
Rm9yQ29va2llKGNvbnN0IENvb2tpZSYKICAgICAgICAgLnJlbGVhc2UoKTsKIH0KIAotc3RhdGlj
IFJlZjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkNvb2tpZT4+IGJ1
aWxkQXJyYXlGb3JDb29raWVzKExpc3RIYXNoU2V0PENvb2tpZT4mIGNvb2tpZXNMaXN0KQorc3Rh
dGljIFJlZjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpQYWdlOjpDb29raWU+PiBidWlsZEFycmF5
Rm9yQ29va2llcyhMaXN0SGFzaFNldDxDb29raWU+JiBjb29raWVzTGlzdCkKIHsKLSAgICBhdXRv
IGNvb2tpZXMgPSBKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkNvb2tp
ZT46OmNyZWF0ZSgpOworICAgIGF1dG8gY29va2llcyA9IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6
OlBhZ2U6OkNvb2tpZT46OmNyZWF0ZSgpOwogCiAgICAgZm9yIChjb25zdCBhdXRvJiBjb29raWUg
OiBjb29raWVzTGlzdCkKICAgICAgICAgY29va2llcy0+YWRkSXRlbShidWlsZE9iamVjdEZvckNv
b2tpZShjb29raWUpKTsKQEAgLTU2MCw3ICs1NDQsNyBAQCBzdGF0aWMgVmVjdG9yPFVSTD4gYWxs
UmVzb3VyY2VzVVJMc0ZvckZyYW1lKEZyYW1lKiBmcmFtZSkKICAgICByZXR1cm4gcmVzdWx0Owog
fQogCi12b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6Z2V0Q29va2llcyhFcnJvclN0cmluZyYsIFJl
ZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkNvb2tpZT4+JiBj
b29raWVzKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEpTT046OkFycmF5T2Y8UHJvdG9j
b2w6OlBhZ2U6OkNvb2tpZT4+PiBJbnNwZWN0b3JQYWdlQWdlbnQ6OmdldENvb2tpZXMoKQogewog
ICAgIExpc3RIYXNoU2V0PENvb2tpZT4gYWxsUmF3Q29va2llczsKIApAQCAtNTc5LDcyICs1NjMs
ODQgQEAgdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmdldENvb2tpZXMoRXJyb3JTdHJpbmcmLCBS
ZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3IKICAgICAgICAgfQogICAgIH0KIAotICAgIGNv
b2tpZXMgPSBidWlsZEFycmF5Rm9yQ29va2llcyhhbGxSYXdDb29raWVzKTsKKyAgICByZXR1cm4g
YnVpbGRBcnJheUZvckNvb2tpZXMoYWxsUmF3Q29va2llcyk7CiB9CiAKLXN0YXRpYyBPcHRpb25h
bDxDb29raWU+IHBhcnNlQ29va2llT2JqZWN0KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29u
c3QgSlNPTjo6T2JqZWN0JiBjb29raWVPYmplY3QpCitzdGF0aWMgT3B0aW9uYWw8Q29va2llPiBw
YXJzZUNvb2tpZU9iamVjdChQcm90b2NvbDo6RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBSZWY8
SlNPTjo6T2JqZWN0PiYmIGNvb2tpZU9iamVjdCkKIHsKICAgICBDb29raWUgY29va2llOwogCi0g
ICAgaWYgKCFjb29raWVPYmplY3QuZ2V0U3RyaW5nKCJuYW1lIl9zLCBjb29raWUubmFtZSkpIHsK
KyAgICBjb29raWUubmFtZSA9IGNvb2tpZU9iamVjdC0+Z2V0U3RyaW5nKFByb3RvY29sOjpQYWdl
OjpDb29raWU6Om5hbWVLZXkpOworICAgIGlmICghY29va2llLm5hbWUpIHsKICAgICAgICAgZXJy
b3JTdHJpbmcgPSAiSW52YWxpZCB2YWx1ZSBmb3Iga2V5IG5hbWUgaW4gZ2l2ZW4gY29va2llIjsK
ICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICB9CiAKLSAgICBpZiAoIWNvb2tpZU9i
amVjdC5nZXRTdHJpbmcoInZhbHVlIl9zLCBjb29raWUudmFsdWUpKSB7CisgICAgY29va2llLnZh
bHVlID0gY29va2llT2JqZWN0LT5nZXRTdHJpbmcoUHJvdG9jb2w6OlBhZ2U6OkNvb2tpZTo6dmFs
dWVLZXkpOworICAgIGlmICghY29va2llLnZhbHVlKSB7CiAgICAgICAgIGVycm9yU3RyaW5nID0g
IkludmFsaWQgdmFsdWUgZm9yIGtleSB2YWx1ZSBpbiBnaXZlbiBjb29raWUiOwogICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIH0KIAotICAgIGlmICghY29va2llT2JqZWN0LmdldFN0
cmluZygiZG9tYWluIl9zLCBjb29raWUuZG9tYWluKSkgeworICAgIGNvb2tpZS5kb21haW4gPSBj
b29raWVPYmplY3QtPmdldFN0cmluZyhQcm90b2NvbDo6UGFnZTo6Q29va2llOjpkb21haW5LZXkp
OworICAgIGlmICghY29va2llLmRvbWFpbikgewogICAgICAgICBlcnJvclN0cmluZyA9ICJJbnZh
bGlkIHZhbHVlIGZvciBrZXkgZG9tYWluIGluIGdpdmVuIGNvb2tpZSI7CiAgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CiAgICAgfQogCi0gICAgaWYgKCFjb29raWVPYmplY3QuZ2V0U3RyaW5n
KCJwYXRoIl9zLCBjb29raWUucGF0aCkpIHsKKyAgICBjb29raWUucGF0aCA9IGNvb2tpZU9iamVj
dC0+Z2V0U3RyaW5nKFByb3RvY29sOjpQYWdlOjpDb29raWU6OnBhdGhLZXkpOworICAgIGlmICgh
Y29va2llLnBhdGgpIHsKICAgICAgICAgZXJyb3JTdHJpbmcgPSAiSW52YWxpZCB2YWx1ZSBmb3Ig
a2V5IHBhdGggaW4gZ2l2ZW4gY29va2llIjsKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
ICAgICB9CiAKLSAgICBpZiAoIWNvb2tpZU9iamVjdC5nZXRCb29sZWFuKCJodHRwT25seSJfcywg
Y29va2llLmh0dHBPbmx5KSkgeworICAgIGF1dG8gaHR0cE9ubHkgPSBjb29raWVPYmplY3QtPmdl
dEJvb2xlYW4oUHJvdG9jb2w6OlBhZ2U6OkNvb2tpZTo6aHR0cE9ubHlLZXkpOworICAgIGlmICgh
aHR0cE9ubHkpIHsKICAgICAgICAgZXJyb3JTdHJpbmcgPSAiSW52YWxpZCB2YWx1ZSBmb3Iga2V5
IGh0dHBPbmx5IGluIGdpdmVuIGNvb2tpZSI7CiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CiAgICAgfQogCi0gICAgaWYgKCFjb29raWVPYmplY3QuZ2V0Qm9vbGVhbigic2VjdXJlIl9zLCBj
b29raWUuc2VjdXJlKSkgeworICAgIGNvb2tpZS5odHRwT25seSA9ICpodHRwT25seTsKKworICAg
IGF1dG8gc2VjdXJlID0gY29va2llT2JqZWN0LT5nZXRCb29sZWFuKFByb3RvY29sOjpQYWdlOjpD
b29raWU6OnNlY3VyZUtleSk7CisgICAgaWYgKCFzZWN1cmUpIHsKICAgICAgICAgZXJyb3JTdHJp
bmcgPSAiSW52YWxpZCB2YWx1ZSBmb3Iga2V5IHNlY3VyZSBpbiBnaXZlbiBjb29raWUiOwogICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIH0KIAotICAgIGJvb2wgdmFsaWRTZXNzaW9u
ID0gY29va2llT2JqZWN0LmdldEJvb2xlYW4oInNlc3Npb24iX3MsIGNvb2tpZS5zZXNzaW9uKTsK
LSAgICBjb29raWUuZXhwaXJlcyA9IGNvb2tpZU9iamVjdC5nZXROdW1iZXI8ZG91YmxlPigiZXhw
aXJlcyJfcyk7Ci0gICAgaWYgKCF2YWxpZFNlc3Npb24gJiYgIWNvb2tpZS5leHBpcmVzKSB7Cisg
ICAgY29va2llLnNlY3VyZSA9ICpzZWN1cmU7CisKKyAgICBhdXRvIHNlc3Npb24gPSBjb29raWVP
YmplY3QtPmdldEJvb2xlYW4oUHJvdG9jb2w6OlBhZ2U6OkNvb2tpZTo6c2Vzc2lvbktleSk7Cisg
ICAgY29va2llLmV4cGlyZXMgPSBjb29raWVPYmplY3QtPmdldERvdWJsZShQcm90b2NvbDo6UGFn
ZTo6Q29va2llOjpleHBpcmVzS2V5KTsKKyAgICBpZiAoIXNlc3Npb24gJiYgIWNvb2tpZS5leHBp
cmVzKSB7CiAgICAgICAgIGVycm9yU3RyaW5nID0gIkludmFsaWQgdmFsdWUgZm9yIGtleSBleHBp
cmVzIGluIGdpdmVuIGNvb2tpZSI7CiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAg
fQogCi0gICAgU3RyaW5nIHNhbWVTaXRlU3RyaW5nOwotICAgIGlmICghY29va2llT2JqZWN0Lmdl
dFN0cmluZygic2FtZVNpdGUiX3MsIHNhbWVTaXRlU3RyaW5nKSkgeworICAgIGNvb2tpZS5zZXNz
aW9uID0gKnNlc3Npb247CisKKyAgICBhdXRvIHNhbWVTaXRlU3RyaW5nID0gY29va2llT2JqZWN0
LT5nZXRTdHJpbmcoUHJvdG9jb2w6OlBhZ2U6OkNvb2tpZTo6c2FtZVNpdGVLZXkpOworICAgIGlm
ICghc2FtZVNpdGVTdHJpbmcpIHsKICAgICAgICAgZXJyb3JTdHJpbmcgPSAiSW52YWxpZCB2YWx1
ZSBmb3Iga2V5IHNhbWVTaXRlIGluIGdpdmVuIGNvb2tpZSI7CiAgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CiAgICAgfQogCi0gICAgYXV0byBzYW1lU2l0ZSA9IEluc3BlY3Rvcjo6UHJvdG9j
b2w6Okluc3BlY3RvckhlbHBlcnM6OnBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6
OlByb3RvY29sOjpQYWdlOjpDb29raWVTYW1lU2l0ZVBvbGljeT4oc2FtZVNpdGVTdHJpbmcpOwor
ICAgIGF1dG8gc2FtZVNpdGUgPSBQcm90b2NvbDo6SGVscGVyczo6cGFyc2VFbnVtVmFsdWVGcm9t
U3RyaW5nPFByb3RvY29sOjpQYWdlOjpDb29raWVTYW1lU2l0ZVBvbGljeT4oc2FtZVNpdGVTdHJp
bmcpOwogICAgIGlmICghc2FtZVNpdGUpIHsKICAgICAgICAgZXJyb3JTdHJpbmcgPSAiSW52YWxp
ZCB2YWx1ZSBmb3Iga2V5IHNhbWVTaXRlIGluIGdpdmVuIGNvb2tpZSI7CiAgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CiAgICAgfQogCiAgICAgc3dpdGNoIChzYW1lU2l0ZS52YWx1ZSgpKSB7
Ci0gICAgY2FzZSBJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpDb29raWVTYW1lU2l0ZVBvbGlj
eTo6Tm9uZToKKyAgICBjYXNlIFByb3RvY29sOjpQYWdlOjpDb29raWVTYW1lU2l0ZVBvbGljeTo6
Tm9uZToKICAgICAgICAgY29va2llLnNhbWVTaXRlID0gQ29va2llOjpTYW1lU2l0ZVBvbGljeTo6
Tm9uZTsKLQogICAgICAgICBicmVhazsKLSAgICBjYXNlIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBh
Z2U6OkNvb2tpZVNhbWVTaXRlUG9saWN5OjpMYXg6CisKKyAgICBjYXNlIFByb3RvY29sOjpQYWdl
OjpDb29raWVTYW1lU2l0ZVBvbGljeTo6TGF4OgogICAgICAgICBjb29raWUuc2FtZVNpdGUgPSBD
b29raWU6OlNhbWVTaXRlUG9saWN5OjpMYXg7Ci0KICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJ
bnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpDb29raWVTYW1lU2l0ZVBvbGljeTo6U3RyaWN0Ogor
CisgICAgY2FzZSBQcm90b2NvbDo6UGFnZTo6Q29va2llU2FtZVNpdGVQb2xpY3k6OlN0cmljdDoK
ICAgICAgICAgY29va2llLnNhbWVTaXRlID0gQ29va2llOjpTYW1lU2l0ZVBvbGljeTo6U3RyaWN0
OwogICAgICAgICBicmVhazsKICAgICB9CkBAIC02NTIsMTEgKzY0OCwxMyBAQCBzdGF0aWMgT3B0
aW9uYWw8Q29va2llPiBwYXJzZUNvb2tpZU9iamVjdChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcs
IGNvbnN0IEpTT046OgogICAgIHJldHVybiBjb29raWU7CiB9CiAKLXZvaWQgSW5zcGVjdG9yUGFn
ZUFnZW50OjpzZXRDb29raWUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBKU09OOjpP
YmplY3QmIGNvb2tpZU9iamVjdCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3Bl
Y3RvclBhZ2VBZ2VudDo6c2V0Q29va2llKFJlZjxKU09OOjpPYmplY3Q+JiYgY29va2llT2JqZWN0
KQogewotICAgIGF1dG8gY29va2llID0gcGFyc2VDb29raWVPYmplY3QoZXJyb3JTdHJpbmcsIGNv
b2tpZU9iamVjdCk7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCisg
ICAgYXV0byBjb29raWUgPSBwYXJzZUNvb2tpZU9iamVjdChlcnJvclN0cmluZywgV1RGTW92ZShj
b29raWVPYmplY3QpKTsKICAgICBpZiAoIWNvb2tpZSkKLSAgICAgICAgcmV0dXJuOworICAgICAg
ICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCiAgICAgZm9yIChhdXRvKiBm
cmFtZSA9ICZtX2luc3BlY3RlZFBhZ2UubWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1l
LT50cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsKICAgICAgICAgaWYgKGF1dG8qIGRvY3VtZW50ID0g
ZnJhbWUtPmRvY3VtZW50KCkpIHsKQEAgLTY2NCw5ICs2NjIsMTEgQEAgdm9pZCBJbnNwZWN0b3JQ
YWdlQWdlbnQ6OnNldENvb2tpZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IEpTT046
Ok9iamVjdCYKICAgICAgICAgICAgICAgICBwYWdlLT5jb29raWVKYXIoKS5zZXRSYXdDb29raWUo
KmRvY3VtZW50LCBjb29raWUudmFsdWUoKSk7CiAgICAgICAgIH0KICAgICB9CisKKyAgICByZXR1
cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6ZGVsZXRlQ29va2llKEVycm9y
U3RyaW5nJiwgY29uc3QgU3RyaW5nJiBjb29raWVOYW1lLCBjb25zdCBTdHJpbmcmIHVybCkKK1By
b3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvclBhZ2VBZ2VudDo6ZGVsZXRlQ29v
a2llKGNvbnN0IFN0cmluZyYgY29va2llTmFtZSwgY29uc3QgU3RyaW5nJiB1cmwpCiB7CiAgICAg
VVJMIHBhcnNlZFVSTCh7IH0sIHVybCk7CiAgICAgZm9yIChGcmFtZSogZnJhbWUgPSAmbV9pbnNw
ZWN0ZWRQYWdlLm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZl
cnNlTmV4dCgpKSB7CkBAIC02NzUsNDggKzY3NSw1OSBAQCB2b2lkIEluc3BlY3RvclBhZ2VBZ2Vu
dDo6ZGVsZXRlQ29va2llKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBjb29raWVOYW1lLCBj
bwogICAgICAgICAgICAgICAgIHBhZ2UtPmNvb2tpZUphcigpLmRlbGV0ZUNvb2tpZSgqZG9jdW1l
bnQsIHBhcnNlZFVSTCwgY29va2llTmFtZSk7CiAgICAgICAgIH0KICAgICB9CisKKyAgICByZXR1
cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6Z2V0UmVzb3VyY2VUcmVlKEVy
cm9yU3RyaW5nJiwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkZyYW1lUmVzb3Vy
Y2VUcmVlPiYgb2JqZWN0KQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPFByb3RvY29sOjpQ
YWdlOjpGcmFtZVJlc291cmNlVHJlZT4+IEluc3BlY3RvclBhZ2VBZ2VudDo6Z2V0UmVzb3VyY2VU
cmVlKCkKIHsKLSAgICBvYmplY3QgPSBidWlsZE9iamVjdEZvckZyYW1lVHJlZSgmbV9pbnNwZWN0
ZWRQYWdlLm1haW5GcmFtZSgpKTsKKyAgICByZXR1cm4gYnVpbGRPYmplY3RGb3JGcmFtZVRyZWUo
Jm1faW5zcGVjdGVkUGFnZS5tYWluRnJhbWUoKSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yUGFnZUFn
ZW50OjpnZXRSZXNvdXJjZUNvbnRlbnQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBT
dHJpbmcmIGZyYW1lSWQsIGNvbnN0IFN0cmluZyYgdXJsLCBTdHJpbmcqIGNvbnRlbnQsIGJvb2wq
IGJhc2U2NEVuY29kZWQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxzdGQ6OnR1cGxlPFN0cmlu
ZywgYm9vbCAvKiBiYXNlNjRFbmNvZGVkICovPj4gSW5zcGVjdG9yUGFnZUFnZW50OjpnZXRSZXNv
dXJjZUNvbnRlbnQoY29uc3QgUHJvdG9jb2w6Ok5ldHdvcms6OkZyYW1lSWQmIGZyYW1lSWQsIGNv
bnN0IFN0cmluZyYgdXJsKQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmlu
ZzsKKwogICAgIEZyYW1lKiBmcmFtZSA9IGFzc2VydEZyYW1lKGVycm9yU3RyaW5nLCBmcmFtZUlk
KTsKICAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtl
VW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKLSAgICByZXNvdXJjZUNvbnRlbnQoZXJyb3JTdHJp
bmcsIGZyYW1lLCBVUkwoeyB9LCB1cmwpLCBjb250ZW50LCBiYXNlNjRFbmNvZGVkKTsKKyAgICBT
dHJpbmcgY29udGVudDsKKyAgICBib29sIGJhc2U2NEVuY29kZWQ7CisKKyAgICByZXNvdXJjZUNv
bnRlbnQoZXJyb3JTdHJpbmcsIGZyYW1lLCBVUkwoeyB9LCB1cmwpLCAmY29udGVudCwgJmJhc2U2
NEVuY29kZWQpOworCisgICAgcmV0dXJuIHsgeyBjb250ZW50LCBiYXNlNjRFbmNvZGVkIH0gfTsK
IH0KIAotdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OnNldEJvb3RzdHJhcFNjcmlwdChFcnJvclN0
cmluZyYsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxTb3VyY2UpCitQcm90b2NvbDo6RXJyb3JTdHJp
bmdPcjx2b2lkPiBJbnNwZWN0b3JQYWdlQWdlbnQ6OnNldEJvb3RzdHJhcFNjcmlwdChjb25zdCBT
dHJpbmcmIHNvdXJjZSkKIHsKLSAgICBtX2Jvb3RzdHJhcFNjcmlwdCA9IG9wdGlvbmFsU291cmNl
ID8gKm9wdGlvbmFsU291cmNlIDogbnVsbFN0cmluZygpOworICAgIG1fYm9vdHN0cmFwU2NyaXB0
ID0gc291cmNlOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JQYWdlQWdl
bnQ6OnNlYXJjaEluUmVzb3VyY2UoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJp
bmcmIGZyYW1lSWQsIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIHF1ZXJ5LCBjb25z
dCBib29sKiBvcHRpb25hbENhc2VTZW5zaXRpdmUsIGNvbnN0IGJvb2wqIG9wdGlvbmFsSXNSZWdl
eCwgY29uc3QgU3RyaW5nKiBvcHRpb25hbFJlcXVlc3RJZCwgUmVmUHRyPEpTT046OkFycmF5T2Y8
SW5zcGVjdG9yOjpQcm90b2NvbDo6R2VuZXJpY1R5cGVzOjpTZWFyY2hNYXRjaD4+JiByZXN1bHRz
KQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6Okdl
bmVyaWNUeXBlczo6U2VhcmNoTWF0Y2g+Pj4gSW5zcGVjdG9yUGFnZUFnZW50OjpzZWFyY2hJblJl
c291cmNlKGNvbnN0IFByb3RvY29sOjpOZXR3b3JrOjpGcmFtZUlkJiBmcmFtZUlkLCBjb25zdCBT
dHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBxdWVyeSwgT3B0aW9uYWw8Ym9vbD4mJiBjYXNlU2Vu
c2l0aXZlLCBPcHRpb25hbDxib29sPiYmIGlzUmVnZXgsIGNvbnN0IFByb3RvY29sOjpOZXR3b3Jr
OjpSZXF1ZXN0SWQmIHJlcXVlc3RJZCkKIHsKLSAgICByZXN1bHRzID0gSlNPTjo6QXJyYXlPZjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpHZW5lcmljVHlwZXM6OlNlYXJjaE1hdGNoPjo6Y3JlYXRlKCk7
CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOwogCi0gICAgYm9vbCBpc1Jl
Z2V4ID0gb3B0aW9uYWxJc1JlZ2V4ID8gKm9wdGlvbmFsSXNSZWdleCA6IGZhbHNlOwotICAgIGJv
b2wgY2FzZVNlbnNpdGl2ZSA9IG9wdGlvbmFsQ2FzZVNlbnNpdGl2ZSA/ICpvcHRpb25hbENhc2VT
ZW5zaXRpdmUgOiBmYWxzZTsKLQotICAgIGlmIChvcHRpb25hbFJlcXVlc3RJZCkgeworICAgIGlm
ICghIXJlcXVlc3RJZCkgewogICAgICAgICBpZiAoYXV0byogbmV0d29ya0FnZW50ID0gbV9pbnN0
cnVtZW50aW5nQWdlbnRzLmVuYWJsZWROZXR3b3JrQWdlbnQoKSkgewotICAgICAgICAgICAgbmV0
d29ya0FnZW50LT5zZWFyY2hJblJlcXVlc3QoZXJyb3JTdHJpbmcsICpvcHRpb25hbFJlcXVlc3RJ
ZCwgcXVlcnksIGNhc2VTZW5zaXRpdmUsIGlzUmVnZXgsIHJlc3VsdHMpOwotICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkdlbmVy
aWNUeXBlczo6U2VhcmNoTWF0Y2g+PiByZXN1bHQ7CisgICAgICAgICAgICBuZXR3b3JrQWdlbnQt
PnNlYXJjaEluUmVxdWVzdChlcnJvclN0cmluZywgcmVxdWVzdElkLCBxdWVyeSwgY2FzZVNlbnNp
dGl2ZSAmJiAqY2FzZVNlbnNpdGl2ZSwgaXNSZWdleCAmJiAqaXNSZWdleCwgcmVzdWx0KTsKKyAg
ICAgICAgICAgIGlmICghcmVzdWx0KQorICAgICAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBl
Y3RlZChlcnJvclN0cmluZyk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2VOb25O
dWxsKCk7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBGcmFtZSogZnJhbWUgPSBhc3NlcnRGcmFt
ZShlcnJvclN0cmluZywgZnJhbWVJZCk7CiAgICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJu
OworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCiAgICAgRG9j
dW1lbnRMb2FkZXIqIGxvYWRlciA9IGFzc2VydERvY3VtZW50TG9hZGVyKGVycm9yU3RyaW5nLCBm
cmFtZSk7CiAgICAgaWYgKCFsb2FkZXIpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJu
IG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgIFVSTCBrdXJsKHsgfSwgdXJsKTsK
IApAQCAtNzM1LDI5ICs3NDYsMjYgQEAgdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OnNlYXJjaElu
UmVzb3VyY2UoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcKICAgICB9CiAK
ICAgICBpZiAoIXN1Y2Nlc3MpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIEpTT046
OkFycmF5T2Y8UHJvdG9jb2w6OkdlbmVyaWNUeXBlczo6U2VhcmNoTWF0Y2g+OjpjcmVhdGUoKTsK
IAotICAgIHJlc3VsdHMgPSBDb250ZW50U2VhcmNoVXRpbGl0aWVzOjpzZWFyY2hJblRleHRCeUxp
bmVzKGNvbnRlbnQsIHF1ZXJ5LCBjYXNlU2Vuc2l0aXZlLCBpc1JlZ2V4KTsKKyAgICByZXR1cm4g
Q29udGVudFNlYXJjaFV0aWxpdGllczo6c2VhcmNoSW5UZXh0QnlMaW5lcyhjb250ZW50LCBxdWVy
eSwgY2FzZVNlbnNpdGl2ZSAmJiAqY2FzZVNlbnNpdGl2ZSwgaXNSZWdleCAmJiAqaXNSZWdleCk7
CiB9CiAKLXN0YXRpYyBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6U2VhcmNoUmVzdWx0
PiBidWlsZE9iamVjdEZvclNlYXJjaFJlc3VsdChjb25zdCBTdHJpbmcmIGZyYW1lSWQsIGNvbnN0
IFN0cmluZyYgdXJsLCBpbnQgbWF0Y2hlc0NvdW50KQorc3RhdGljIFJlZjxQcm90b2NvbDo6UGFn
ZTo6U2VhcmNoUmVzdWx0PiBidWlsZE9iamVjdEZvclNlYXJjaFJlc3VsdChjb25zdCBQcm90b2Nv
bDo6TmV0d29yazo6RnJhbWVJZCYgZnJhbWVJZCwgY29uc3QgU3RyaW5nJiB1cmwsIGludCBtYXRj
aGVzQ291bnQpCiB7Ci0gICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OlNlYXJj
aFJlc3VsdDo6Y3JlYXRlKCkKKyAgICByZXR1cm4gUHJvdG9jb2w6OlBhZ2U6OlNlYXJjaFJlc3Vs
dDo6Y3JlYXRlKCkKICAgICAgICAgLnNldFVybCh1cmwpCiAgICAgICAgIC5zZXRGcmFtZUlkKGZy
YW1lSWQpCiAgICAgICAgIC5zZXRNYXRjaGVzQ291bnQobWF0Y2hlc0NvdW50KQogICAgICAgICAu
cmVsZWFzZSgpOwogfQogCi12b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6c2VhcmNoSW5SZXNvdXJj
ZXMoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IGJvb2wqIG9wdGlvbmFs
Q2FzZVNlbnNpdGl2ZSwgY29uc3QgYm9vbCogb3B0aW9uYWxJc1JlZ2V4LCBSZWZQdHI8SlNPTjo6
QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpTZWFyY2hSZXN1bHQ+PiYgcmVzdWx0
KQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlBh
Z2U6OlNlYXJjaFJlc3VsdD4+PiBJbnNwZWN0b3JQYWdlQWdlbnQ6OnNlYXJjaEluUmVzb3VyY2Vz
KGNvbnN0IFN0cmluZyYgdGV4dCwgT3B0aW9uYWw8Ym9vbD4mJiBjYXNlU2Vuc2l0aXZlLCBPcHRp
b25hbDxib29sPiYmIGlzUmVnZXgpCiB7Ci0gICAgcmVzdWx0ID0gSlNPTjo6QXJyYXlPZjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpQYWdlOjpTZWFyY2hSZXN1bHQ+OjpjcmVhdGUoKTsKKyAgICBhdXRv
IHJlc3VsdCA9IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlBhZ2U6OlNlYXJjaFJlc3VsdD46OmNy
ZWF0ZSgpOwogCi0gICAgYm9vbCBjYXNlU2Vuc2l0aXZlID0gb3B0aW9uYWxDYXNlU2Vuc2l0aXZl
ID8gKm9wdGlvbmFsQ2FzZVNlbnNpdGl2ZSA6IGZhbHNlOwotICAgIGJvb2wgaXNSZWdleCA9IG9w
dGlvbmFsSXNSZWdleCA/ICpvcHRpb25hbElzUmVnZXggOiBmYWxzZTsKLQotICAgIGF1dG8gc2Vh
cmNoU3RyaW5nVHlwZSA9IGlzUmVnZXggPyBDb250ZW50U2VhcmNoVXRpbGl0aWVzOjpTZWFyY2hT
dHJpbmdUeXBlOjpSZWdleCA6IENvbnRlbnRTZWFyY2hVdGlsaXRpZXM6OlNlYXJjaFN0cmluZ1R5
cGU6OkNvbnRhaW5zU3RyaW5nOwotICAgIGF1dG8gcmVnZXggPSBDb250ZW50U2VhcmNoVXRpbGl0
aWVzOjpjcmVhdGVSZWd1bGFyRXhwcmVzc2lvbkZvclNlYXJjaFN0cmluZyh0ZXh0LCBjYXNlU2Vu
c2l0aXZlLCBzZWFyY2hTdHJpbmdUeXBlKTsKKyAgICBhdXRvIHNlYXJjaFN0cmluZ1R5cGUgPSAo
aXNSZWdleCAmJiAqaXNSZWdleCkgPyBDb250ZW50U2VhcmNoVXRpbGl0aWVzOjpTZWFyY2hTdHJp
bmdUeXBlOjpSZWdleCA6IENvbnRlbnRTZWFyY2hVdGlsaXRpZXM6OlNlYXJjaFN0cmluZ1R5cGU6
OkNvbnRhaW5zU3RyaW5nOworICAgIGF1dG8gcmVnZXggPSBDb250ZW50U2VhcmNoVXRpbGl0aWVz
OjpjcmVhdGVSZWd1bGFyRXhwcmVzc2lvbkZvclNlYXJjaFN0cmluZyh0ZXh0LCBjYXNlU2Vuc2l0
aXZlICYmICpjYXNlU2Vuc2l0aXZlLCBzZWFyY2hTdHJpbmdUeXBlKTsKIAogICAgIGZvciAoRnJh
bWUqIGZyYW1lID0gJm1faW5zcGVjdGVkUGFnZS5tYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0g
ZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoKSkgewogICAgICAgICBmb3IgKGF1dG8qIGNhY2hl
ZFJlc291cmNlIDogY2FjaGVkUmVzb3VyY2VzRm9yRnJhbWUoZnJhbWUpKSB7CkBAIC03NzEsMjQg
Kzc3OSwzMCBAQCB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6c2VhcmNoSW5SZXNvdXJjZXMoRXJy
b3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHRleHQsIGNvbgogCiAgICAgaWYgKGF1dG8qIG5ldHdv
cmtBZ2VudCA9IG1faW5zdHJ1bWVudGluZ0FnZW50cy5lbmFibGVkTmV0d29ya0FnZW50KCkpCiAg
ICAgICAgIG5ldHdvcmtBZ2VudC0+c2VhcmNoT3RoZXJSZXF1ZXN0cyhyZWdleCwgcmVzdWx0KTsK
KworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKICNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKLXZv
aWQgSW5zcGVjdG9yUGFnZUFnZW50OjpzZXRTaG93UnVsZXJzKEVycm9yU3RyaW5nJiwgYm9vbCBz
aG93UnVsZXJzKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yUGFnZUFn
ZW50OjpzZXRTaG93UnVsZXJzKGJvb2wgc2hvd1J1bGVycykKIHsKICAgICBtX292ZXJsYXktPnNl
dFNob3dSdWxlcnMoc2hvd1J1bGVycyk7CisKKyAgICByZXR1cm4geyB9OwogfQogI2VuZGlmCiAK
LXZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpzZXRTaG93UGFpbnRSZWN0cyhFcnJvclN0cmluZyYs
IGJvb2wgc2hvdykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvclBhZ2VB
Z2VudDo6c2V0U2hvd1BhaW50UmVjdHMoYm9vbCBzaG93KQogewogICAgIG1fc2hvd1BhaW50UmVj
dHMgPSBzaG93OwogICAgIG1fY2xpZW50LT5zZXRTaG93UGFpbnRSZWN0cyhzaG93KTsKIAogICAg
IGlmIChtX2NsaWVudC0+b3ZlcnJpZGVzU2hvd1BhaW50UmVjdHMoKSkKLSAgICAgICAgcmV0dXJu
OworICAgICAgICByZXR1cm4geyB9OwogCiAgICAgbV9vdmVybGF5LT5zZXRTaG93UGFpbnRSZWN0
cyhzaG93KTsKKworICAgIHJldHVybiB7IH07CiB9CiAKIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50
Ojpkb21Db250ZW50RXZlbnRGaXJlZCgpCkBAIC04MTYsNyArODMwLDcgQEAgdm9pZCBJbnNwZWN0
b3JQYWdlQWdlbnQ6OmZyYW1lRGV0YWNoZWQoRnJhbWUmIGZyYW1lKQogICAgIG1faWRlbnRpZmll
clRvRnJhbWUucmVtb3ZlKGlkZW50aWZpZXIpOwogfQogCi1GcmFtZSogSW5zcGVjdG9yUGFnZUFn
ZW50OjpmcmFtZUZvcklkKGNvbnN0IFN0cmluZyYgZnJhbWVJZCkKK0ZyYW1lKiBJbnNwZWN0b3JQ
YWdlQWdlbnQ6OmZyYW1lRm9ySWQoY29uc3QgUHJvdG9jb2w6Ok5ldHdvcms6OkZyYW1lSWQmIGZy
YW1lSWQpCiB7CiAgICAgcmV0dXJuIGZyYW1lSWQuaXNFbXB0eSgpID8gbnVsbHB0ciA6IG1faWRl
bnRpZmllclRvRnJhbWUuZ2V0KGZyYW1lSWQpOwogfQpAQCAtODQxLDcgKzg1NSw3IEBAIFN0cmlu
ZyBJbnNwZWN0b3JQYWdlQWdlbnQ6OmxvYWRlcklkKERvY3VtZW50TG9hZGVyKiBsb2FkZXIpCiAg
ICAgfSkuaXRlcmF0b3ItPnZhbHVlOwogfQogCi1GcmFtZSogSW5zcGVjdG9yUGFnZUFnZW50Ojph
c3NlcnRGcmFtZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgZnJhbWVJ
ZCkKK0ZyYW1lKiBJbnNwZWN0b3JQYWdlQWdlbnQ6OmFzc2VydEZyYW1lKFByb3RvY29sOjpFcnJv
clN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFByb3RvY29sOjpOZXR3b3JrOjpGcmFtZUlkJiBm
cmFtZUlkKQogewogICAgIEZyYW1lKiBmcmFtZSA9IGZyYW1lRm9ySWQoZnJhbWVJZCk7CiAgICAg
aWYgKCFmcmFtZSkKQEAgLTg3Nyw3ICs4OTEsNyBAQCB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6
ZnJhbWVDbGVhcmVkU2NoZWR1bGVkTmF2aWdhdGlvbihGcmFtZSYgZnJhbWUpCiAjaWYgRU5BQkxF
KERBUktfTU9ERV9DU1MpIHx8IEhBVkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCiB2b2lkIEluc3Bl
Y3RvclBhZ2VBZ2VudDo6ZGVmYXVsdEFwcGVhcmFuY2VEaWRDaGFuZ2UoYm9vbCB1c2VEYXJrQXBw
ZWFyYW5jZSkKIHsKLSAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+ZGVmYXVsdEFwcGVhcmFuY2VE
aWRDaGFuZ2UodXNlRGFya0FwcGVhcmFuY2UgPyBJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpB
cHBlYXJhbmNlOjpEYXJrIDogSW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6QXBwZWFyYW5jZTo6
TGlnaHQpOworICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5kZWZhdWx0QXBwZWFyYW5jZURpZENo
YW5nZSh1c2VEYXJrQXBwZWFyYW5jZSA/IFByb3RvY29sOjpQYWdlOjpBcHBlYXJhbmNlOjpEYXJr
IDogUHJvdG9jb2w6OlBhZ2U6OkFwcGVhcmFuY2U6OkxpZ2h0KTsKIH0KICNlbmRpZgogCkBAIC05
MzMsMTEgKzk0NywxMSBAQCB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6ZGlkUmVjYWxjdWxhdGVT
dHlsZSgpCiAgICAgbV9vdmVybGF5LT51cGRhdGUoKTsKIH0KIAotUmVmPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OlBhZ2U6OkZyYW1lPiBJbnNwZWN0b3JQYWdlQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yRnJh
bWUoRnJhbWUqIGZyYW1lKQorUmVmPFByb3RvY29sOjpQYWdlOjpGcmFtZT4gSW5zcGVjdG9yUGFn
ZUFnZW50OjpidWlsZE9iamVjdEZvckZyYW1lKEZyYW1lKiBmcmFtZSkKIHsKICAgICBBU1NFUlRf
QVJHKGZyYW1lLCBmcmFtZSk7CiAKLSAgICBhdXRvIGZyYW1lT2JqZWN0ID0gSW5zcGVjdG9yOjpQ
cm90b2NvbDo6UGFnZTo6RnJhbWU6OmNyZWF0ZSgpCisgICAgYXV0byBmcmFtZU9iamVjdCA9IFBy
b3RvY29sOjpQYWdlOjpGcmFtZTo6Y3JlYXRlKCkKICAgICAgICAgLnNldElkKGZyYW1lSWQoZnJh
bWUpKQogICAgICAgICAuc2V0TG9hZGVySWQobG9hZGVySWQoZnJhbWUtPmxvYWRlcigpLmRvY3Vt
ZW50TG9hZGVyKCkpKQogICAgICAgICAuc2V0VXJsKGZyYW1lLT5kb2N1bWVudCgpLT51cmwoKS5z
dHJpbmcoKSkKQEAgLTk1NiwxOSArOTcwLDE5IEBAIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpQ
YWdlOjpGcmFtZT4gSW5zcGVjdG9yUGFnZUFnZW50OjpidWlsZE9iamVjdEZvckZyYW1lKEZyCiAg
ICAgcmV0dXJuIGZyYW1lT2JqZWN0OwogfQogCi1SZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFn
ZTo6RnJhbWVSZXNvdXJjZVRyZWU+IEluc3BlY3RvclBhZ2VBZ2VudDo6YnVpbGRPYmplY3RGb3JG
cmFtZVRyZWUoRnJhbWUqIGZyYW1lKQorUmVmPFByb3RvY29sOjpQYWdlOjpGcmFtZVJlc291cmNl
VHJlZT4gSW5zcGVjdG9yUGFnZUFnZW50OjpidWlsZE9iamVjdEZvckZyYW1lVHJlZShGcmFtZSog
ZnJhbWUpCiB7CiAgICAgQVNTRVJUX0FSRyhmcmFtZSwgZnJhbWUpOwogCi0gICAgUmVmPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkZyYW1lPiBmcmFtZU9iamVjdCA9IGJ1aWxkT2JqZWN0Rm9y
RnJhbWUoZnJhbWUpOwotICAgIGF1dG8gc3VicmVzb3VyY2VzID0gSlNPTjo6QXJyYXlPZjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpQYWdlOjpGcmFtZVJlc291cmNlPjo6Y3JlYXRlKCk7Ci0gICAgYXV0
byByZXN1bHQgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpGcmFtZVJlc291cmNlVHJlZTo6
Y3JlYXRlKCkKKyAgICBSZWY8UHJvdG9jb2w6OlBhZ2U6OkZyYW1lPiBmcmFtZU9iamVjdCA9IGJ1
aWxkT2JqZWN0Rm9yRnJhbWUoZnJhbWUpOworICAgIGF1dG8gc3VicmVzb3VyY2VzID0gSlNPTjo6
QXJyYXlPZjxQcm90b2NvbDo6UGFnZTo6RnJhbWVSZXNvdXJjZT46OmNyZWF0ZSgpOworICAgIGF1
dG8gcmVzdWx0ID0gUHJvdG9jb2w6OlBhZ2U6OkZyYW1lUmVzb3VyY2VUcmVlOjpjcmVhdGUoKQog
ICAgICAgICAuc2V0RnJhbWUoV1RGTW92ZShmcmFtZU9iamVjdCkpCiAgICAgICAgIC5zZXRSZXNv
dXJjZXMoc3VicmVzb3VyY2VzLmNvcHlSZWYoKSkKICAgICAgICAgLnJlbGVhc2UoKTsKIAogICAg
IGZvciAoYXV0byogY2FjaGVkUmVzb3VyY2UgOiBjYWNoZWRSZXNvdXJjZXNGb3JGcmFtZShmcmFt
ZSkpIHsKLSAgICAgICAgYXV0byByZXNvdXJjZU9iamVjdCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlBhZ2U6OkZyYW1lUmVzb3VyY2U6OmNyZWF0ZSgpCisgICAgICAgIGF1dG8gcmVzb3VyY2VPYmpl
Y3QgPSBQcm90b2NvbDo6UGFnZTo6RnJhbWVSZXNvdXJjZTo6Y3JlYXRlKCkKICAgICAgICAgICAg
IC5zZXRVcmwoY2FjaGVkUmVzb3VyY2UtPnVybCgpLnN0cmluZygpKQogICAgICAgICAgICAgLnNl
dFR5cGUoY2FjaGVkUmVzb3VyY2VUeXBlSlNPTigqY2FjaGVkUmVzb3VyY2UpKQogICAgICAgICAg
ICAgLnNldE1pbWVUeXBlKGNhY2hlZFJlc291cmNlLT5yZXNwb25zZSgpLm1pbWVUeXBlKCkpCkBA
IC05ODYsMjEgKzEwMDAsMjEgQEAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkZyYW1l
UmVzb3VyY2VUcmVlPiBJbnNwZWN0b3JQYWdlQWdlbnQ6OmJ1aWxkT2JqZWMKICAgICAgICAgc3Vi
cmVzb3VyY2VzLT5hZGRJdGVtKFdURk1vdmUocmVzb3VyY2VPYmplY3QpKTsKICAgICB9CiAKLSAg
ICBSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpGcmFtZVJl
c291cmNlVHJlZT4+IGNoaWxkcmVuQXJyYXk7CisgICAgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJv
dG9jb2w6OlBhZ2U6OkZyYW1lUmVzb3VyY2VUcmVlPj4gY2hpbGRyZW5BcnJheTsKICAgICBmb3Ig
KEZyYW1lKiBjaGlsZCA9IGZyYW1lLT50cmVlKCkuZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQg
PSBjaGlsZC0+dHJlZSgpLm5leHRTaWJsaW5nKCkpIHsKICAgICAgICAgaWYgKCFjaGlsZHJlbkFy
cmF5KSB7Ci0gICAgICAgICAgICBjaGlsZHJlbkFycmF5ID0gSlNPTjo6QXJyYXlPZjxJbnNwZWN0
b3I6OlByb3RvY29sOjpQYWdlOjpGcmFtZVJlc291cmNlVHJlZT46OmNyZWF0ZSgpOwotICAgICAg
ICAgICAgcmVzdWx0LT5zZXRDaGlsZEZyYW1lcyhjaGlsZHJlbkFycmF5KTsKKyAgICAgICAgICAg
IGNoaWxkcmVuQXJyYXkgPSBKU09OOjpBcnJheU9mPFByb3RvY29sOjpQYWdlOjpGcmFtZVJlc291
cmNlVHJlZT46OmNyZWF0ZSgpOworICAgICAgICAgICAgcmVzdWx0LT5zZXRDaGlsZEZyYW1lcygq
Y2hpbGRyZW5BcnJheSk7CiAgICAgICAgIH0KICAgICAgICAgY2hpbGRyZW5BcnJheS0+YWRkSXRl
bShidWlsZE9iamVjdEZvckZyYW1lVHJlZShjaGlsZCkpOwogICAgIH0KICAgICByZXR1cm4gcmVz
dWx0OwogfQogCi12b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6c2V0RW11bGF0ZWRNZWRpYShFcnJv
clN0cmluZyYsIGNvbnN0IFN0cmluZyYgbWVkaWEpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2
b2lkPiBJbnNwZWN0b3JQYWdlQWdlbnQ6OnNldEVtdWxhdGVkTWVkaWEoY29uc3QgU3RyaW5nJiBt
ZWRpYSkKIHsKICAgICBpZiAobWVkaWEgPT0gbV9lbXVsYXRlZE1lZGlhKQotICAgICAgICByZXR1
cm47CisgICAgICAgIHJldHVybiB7IH07CiAKICAgICBtX2VtdWxhdGVkTWVkaWEgPSBtZWRpYTsK
IApAQCAtMTAwOSwyMSArMTAyMywzNCBAQCB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6c2V0RW11
bGF0ZWRNZWRpYShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgbWVkaWEpCiAKICAgICBhdXRv
IGRvY3VtZW50ID0gbWFrZVJlZlB0cihtX2luc3BlY3RlZFBhZ2UubWFpbkZyYW1lKCkuZG9jdW1l
bnQoKSk7CiAgICAgaWYgKCFkb2N1bWVudCkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1
cm4geyB9OwogCiAgICAgZG9jdW1lbnQtPnVwZGF0ZUxheW91dCgpOwogICAgIGRvY3VtZW50LT5l
dmFsdWF0ZU1lZGlhUXVlcmllc0FuZFJlcG9ydENoYW5nZXMoKTsKKworICAgIHJldHVybiB7IH07
CiB9CiAKICNpZiBFTkFCTEUoREFSS19NT0RFX0NTUykgfHwgSEFWRShPU19EQVJLX01PREVfU1VQ
UE9SVCkKLXZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpzZXRGb3JjZWRBcHBlYXJhbmNlKEVycm9y
U3RyaW5nJiwgY29uc3QgU3RyaW5nJiBhcHBlYXJhbmNlKQorUHJvdG9jb2w6OkVycm9yU3RyaW5n
T3I8dm9pZD4gSW5zcGVjdG9yUGFnZUFnZW50OjpzZXRGb3JjZWRBcHBlYXJhbmNlKE9wdGlvbmFs
PFByb3RvY29sOjpQYWdlOjpBcHBlYXJhbmNlPiYmIGFwcGVhcmFuY2UpCiB7Ci0gICAgaWYgKGFw
cGVhcmFuY2UgPT0gIkxpZ2h0Il9zKQotICAgICAgICBtX2luc3BlY3RlZFBhZ2Uuc2V0VXNlRGFy
a0FwcGVhcmFuY2VPdmVycmlkZShmYWxzZSk7Ci0gICAgZWxzZSBpZiAoYXBwZWFyYW5jZSA9PSAi
RGFyayJfcykKLSAgICAgICAgbV9pbnNwZWN0ZWRQYWdlLnNldFVzZURhcmtBcHBlYXJhbmNlT3Zl
cnJpZGUodHJ1ZSk7Ci0gICAgZWxzZQorICAgIGlmICghYXBwZWFyYW5jZSkgewogICAgICAgICBt
X2luc3BlY3RlZFBhZ2Uuc2V0VXNlRGFya0FwcGVhcmFuY2VPdmVycmlkZShXVEY6Om51bGxvcHQp
OworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIHN3aXRjaCAoKmFwcGVhcmFuY2Up
IHsKKyAgICBjYXNlIFByb3RvY29sOjpQYWdlOjpBcHBlYXJhbmNlOjpMaWdodDoKKyAgICAgICAg
bV9pbnNwZWN0ZWRQYWdlLnNldFVzZURhcmtBcHBlYXJhbmNlT3ZlcnJpZGUoZmFsc2UpOworICAg
ICAgICByZXR1cm4geyB9OworCisgICAgY2FzZSBQcm90b2NvbDo6UGFnZTo6QXBwZWFyYW5jZTo6
RGFyazoKKyAgICAgICAgbV9pbnNwZWN0ZWRQYWdlLnNldFVzZURhcmtBcHBlYXJhbmNlT3ZlcnJp
ZGUodHJ1ZSk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgcmV0dXJuIHsgfTsKIH0KICNlbmRpZgogCkBAIC0xMDM5LDUxICsxMDY2
LDQ3IEBAIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjphcHBseUVtdWxhdGVkTWVkaWEoU3RyaW5n
JiBtZWRpYSkKICAgICAgICAgbWVkaWEgPSBtX2VtdWxhdGVkTWVkaWE7CiB9CiAKLXZvaWQgSW5z
cGVjdG9yUGFnZUFnZW50OjpzbmFwc2hvdE5vZGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBp
bnQgbm9kZUlkLCBTdHJpbmcqIG91dERhdGFVUkwpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxT
dHJpbmc+IEluc3BlY3RvclBhZ2VBZ2VudDo6c25hcHNob3ROb2RlKFByb3RvY29sOjpET006Ok5v
ZGVJZCBub2RlSWQpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOwor
CiAgICAgSW5zcGVjdG9yRE9NQWdlbnQqIGRvbUFnZW50ID0gbV9pbnN0cnVtZW50aW5nQWdlbnRz
LnBlcnNpc3RlbnRET01BZ2VudCgpOwogICAgIEFTU0VSVChkb21BZ2VudCk7CiAgICAgTm9kZSog
bm9kZSA9IGRvbUFnZW50LT5hc3NlcnROb2RlKGVycm9yU3RyaW5nLCBub2RlSWQpOwogICAgIGlm
ICghbm9kZSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQo
ZXJyb3JTdHJpbmcpOwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBzbmFwc2hv
dCA9IFdlYkNvcmU6OnNuYXBzaG90Tm9kZShtX2luc3BlY3RlZFBhZ2UubWFpbkZyYW1lKCksICpu
b2RlKTsKLSAgICBpZiAoIXNuYXBzaG90KSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIkNvdWxk
IG5vdCBjYXB0dXJlIHNuYXBzaG90Il9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlm
ICghc25hcHNob3QpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiQ291bGQgbm90IGNh
cHR1cmUgc25hcHNob3QiX3MpOwogCi0gICAgKm91dERhdGFVUkwgPSBzbmFwc2hvdC0+dG9EYXRh
VVJMKCJpbWFnZS9wbmciX3MsIFdURjo6bnVsbG9wdCwgUHJlc2VydmVSZXNvbHV0aW9uOjpZZXMp
OworICAgIHJldHVybiBzbmFwc2hvdC0+dG9EYXRhVVJMKCJpbWFnZS9wbmciX3MsIFdURjo6bnVs
bG9wdCwgUHJlc2VydmVSZXNvbHV0aW9uOjpZZXMpOwogfQogCi12b2lkIEluc3BlY3RvclBhZ2VB
Z2VudDo6c25hcHNob3RSZWN0KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IHgsIGludCB5
LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGNvbnN0IFN0cmluZyYgY29vcmRpbmF0ZVN5c3RlbSwg
U3RyaW5nKiBvdXREYXRhVVJMKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8U3RyaW5nPiBJbnNw
ZWN0b3JQYWdlQWdlbnQ6OnNuYXBzaG90UmVjdChpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50
IGhlaWdodCwgUHJvdG9jb2w6OlBhZ2U6OkNvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3Rl
bSkKIHsKICAgICBTbmFwc2hvdE9wdGlvbnMgb3B0aW9ucyA9IFNuYXBzaG90T3B0aW9uc05vbmU7
Ci0gICAgaWYgKGNvb3JkaW5hdGVTeXN0ZW0gPT0gIlZpZXdwb3J0IikKKyAgICBpZiAoY29vcmRp
bmF0ZVN5c3RlbSA9PSBQcm90b2NvbDo6UGFnZTo6Q29vcmRpbmF0ZVN5c3RlbTo6Vmlld3BvcnQp
CiAgICAgICAgIG9wdGlvbnMgfD0gU25hcHNob3RPcHRpb25zSW5WaWV3Q29vcmRpbmF0ZXM7CiAK
ICAgICBJbnRSZWN0IHJlY3RhbmdsZSh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKICAgICBzdGQ6OnVu
aXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IHNuYXBzaG90ID0gc25hcHNob3RGcmFtZVJlY3QobV9pbnNw
ZWN0ZWRQYWdlLm1haW5GcmFtZSgpLCByZWN0YW5nbGUsIG9wdGlvbnMpOwogCi0gICAgaWYgKCFz
bmFwc2hvdCkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJDb3VsZCBub3QgY2FwdHVyZSBzbmFw
c2hvdCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoIXNuYXBzaG90KQorICAg
ICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkNvdWxkIG5vdCBjYXB0dXJlIHNuYXBzaG90Il9z
KTsKIAotICAgICpvdXREYXRhVVJMID0gc25hcHNob3QtPnRvRGF0YVVSTCgiaW1hZ2UvcG5nIl9z
LCBXVEY6Om51bGxvcHQsIFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKTsKKyAgICByZXR1cm4gc25h
cHNob3QtPnRvRGF0YVVSTCgiaW1hZ2UvcG5nIl9zLCBXVEY6Om51bGxvcHQsIFByZXNlcnZlUmVz
b2x1dGlvbjo6WWVzKTsKIH0KIAogI2lmIEVOQUJMRShXRUJfQVJDSElWRSkgJiYgVVNFKENGKQot
dm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmFyY2hpdmUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5n
LCBTdHJpbmcqIGRhdGEpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxTdHJpbmc+IEluc3BlY3Rv
clBhZ2VBZ2VudDo6YXJjaGl2ZSgpCiB7CiAgICAgYXV0byBhcmNoaXZlID0gTGVnYWN5V2ViQXJj
aGl2ZTo6Y3JlYXRlKG1faW5zcGVjdGVkUGFnZS5tYWluRnJhbWUoKSk7Ci0gICAgaWYgKCFhcmNo
aXZlKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIkNvdWxkIG5vdCBjcmVhdGUgd2ViIGFyY2hp
dmUgZm9yIG1haW4gZnJhbWUiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKCFh
cmNoaXZlKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkNvdWxkIG5vdCBjcmVhdGUg
d2ViIGFyY2hpdmUgZm9yIG1haW4gZnJhbWUiX3MpOwogCiAgICAgUmV0YWluUHRyPENGRGF0YVJl
Zj4gYnVmZmVyID0gYXJjaGl2ZS0+cmF3RGF0YVJlcHJlc2VudGF0aW9uKCk7Ci0gICAgKmRhdGEg
PSBiYXNlNjRFbmNvZGUoQ0ZEYXRhR2V0Qnl0ZVB0cihidWZmZXIuZ2V0KCkpLCBDRkRhdGFHZXRM
ZW5ndGgoYnVmZmVyLmdldCgpKSk7CisgICAgcmV0dXJuIGJhc2U2NEVuY29kZShDRkRhdGFHZXRC
eXRlUHRyKGJ1ZmZlci5nZXQoKSksIENGRGF0YUdldExlbmd0aChidWZmZXIuZ2V0KCkpKTsKIH0K
ICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0lu
c3BlY3RvclBhZ2VBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNw
ZWN0b3JQYWdlQWdlbnQuaAppbmRleCAzYmNkMDQ4N2NmYzg3NjZiYWEwMWM3ODA0MTczYTE1NzQ3
YjQ3YjJkLi5kMmIwNjVlMTM2NTFmYWZlNzQ3MzI1ZjAyZTc3MDFmYmYxZThlNDVlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclBhZ2VBZ2VudC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUGFnZUFnZW50
LmgKQEAgLTUxLDE0ICs1MSwxMiBAQCBjbGFzcyBQYWdlOwogY2xhc3MgUmVuZGVyT2JqZWN0Owog
Y2xhc3MgU2hhcmVkQnVmZmVyOwogCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQogY2xh
c3MgSW5zcGVjdG9yUGFnZUFnZW50IGZpbmFsIDogcHVibGljIEluc3BlY3RvckFnZW50QmFzZSwg
cHVibGljIEluc3BlY3Rvcjo6UGFnZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7CiAgICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoSW5zcGVjdG9yUGFnZUFnZW50KTsKICAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBJbnNwZWN0b3JQYWdlQWdlbnQoUGFnZUFnZW50Q29u
dGV4dCYsIEluc3BlY3RvckNsaWVudCosIEluc3BlY3Rvck92ZXJsYXkqKTsKLSAgICB+SW5zcGVj
dG9yUGFnZUFnZW50KCkgb3ZlcnJpZGU7CisgICAgfkluc3BlY3RvclBhZ2VBZ2VudCgpOwogCiAg
ICAgZW51bSBSZXNvdXJjZVR5cGUgewogICAgICAgICBEb2N1bWVudFJlc291cmNlLApAQCAtNzks
NyArNzcsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgYm9vbCBzaGFyZWRCdWZmZXJDb250ZW50
KFJlZlB0cjxTaGFyZWRCdWZmZXI+JiYsIGNvbnN0IFN0cmluZyYgdGV4dEVuY29kaW5nTmFtZSwg
Ym9vbCB3aXRoQmFzZTY0RW5jb2RlLCBTdHJpbmcqIHJlc3VsdCk7CiAgICAgc3RhdGljIFZlY3Rv
cjxDYWNoZWRSZXNvdXJjZSo+IGNhY2hlZFJlc291cmNlc0ZvckZyYW1lKEZyYW1lKik7Ci0gICAg
c3RhdGljIHZvaWQgcmVzb3VyY2VDb250ZW50KEVycm9yU3RyaW5nJiwgRnJhbWUqLCBjb25zdCBV
UkwmLCBTdHJpbmcqIHJlc3VsdCwgYm9vbCogYmFzZTY0RW5jb2RlZCk7CisgICAgc3RhdGljIHZv
aWQgcmVzb3VyY2VDb250ZW50KEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nJiwgRnJh
bWUqLCBjb25zdCBVUkwmLCBTdHJpbmcqIHJlc3VsdCwgYm9vbCogYmFzZTY0RW5jb2RlZCk7CiAg
ICAgc3RhdGljIFN0cmluZyBzb3VyY2VNYXBVUkxGb3JSZXNvdXJjZShDYWNoZWRSZXNvdXJjZSop
OwogICAgIHN0YXRpYyBDYWNoZWRSZXNvdXJjZSogY2FjaGVkUmVzb3VyY2UoRnJhbWUqLCBjb25z
dCBVUkwmKTsKICAgICBzdGF0aWMgSW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6UmVzb3VyY2VU
eXBlIHJlc291cmNlVHlwZUpTT04oUmVzb3VyY2VUeXBlKTsKQEAgLTg3LDM5ICs4NSwzOSBAQCBw
dWJsaWM6CiAgICAgc3RhdGljIFJlc291cmNlVHlwZSBpbnNwZWN0b3JSZXNvdXJjZVR5cGUoY29u
c3QgQ2FjaGVkUmVzb3VyY2UmKTsKICAgICBzdGF0aWMgSW5zcGVjdG9yOjpQcm90b2NvbDo6UGFn
ZTo6UmVzb3VyY2VUeXBlIGNhY2hlZFJlc291cmNlVHlwZUpTT04oY29uc3QgQ2FjaGVkUmVzb3Vy
Y2UmKTsKICAgICBzdGF0aWMgRnJhbWUqIGZpbmRGcmFtZVdpdGhTZWN1cml0eU9yaWdpbihQYWdl
JiwgY29uc3QgU3RyaW5nJiBvcmlnaW5SYXdTdHJpbmcpOwotICAgIHN0YXRpYyBEb2N1bWVudExv
YWRlciogYXNzZXJ0RG9jdW1lbnRMb2FkZXIoRXJyb3JTdHJpbmcmLCBGcmFtZSopOworICAgIHN0
YXRpYyBEb2N1bWVudExvYWRlciogYXNzZXJ0RG9jdW1lbnRMb2FkZXIoSW5zcGVjdG9yOjpQcm90
b2NvbDo6RXJyb3JTdHJpbmcmLCBGcmFtZSopOwogCiAgICAgLy8gSW5zcGVjdG9yQWdlbnRCYXNl
Ci0gICAgdm9pZCBkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9udGVu
ZFJvdXRlciosIEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXIqKSBvdmVycmlkZTsKLSAgICB2
b2lkIHdpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlzY29ubmVjdFJl
YXNvbikgb3ZlcnJpZGU7CisgICAgdm9pZCBkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5z
cGVjdG9yOjpGcm9udGVuZFJvdXRlciosIEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXIqKTsK
KyAgICB2b2lkIHdpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlzY29u
bmVjdFJlYXNvbik7CiAKICAgICAvLyBQYWdlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyCi0gICAg
dm9pZCBlbmFibGUoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2b2lkIGRpc2FibGUoRXJy
b3JTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2b2lkIHJlbG9hZChFcnJvclN0cmluZyYsIGNvbnN0
IGJvb2wqIG9wdGlvbmFsUmVsb2FkRnJvbU9yaWdpbiwgY29uc3QgYm9vbCogb3B0aW9uYWxSZXZh
bGlkYXRlQWxsUmVzb3VyY2VzKSBvdmVycmlkZTsKLSAgICB2b2lkIG5hdmlnYXRlKEVycm9yU3Ry
aW5nJiwgY29uc3QgU3RyaW5nJiB1cmwpIG92ZXJyaWRlOwotICAgIHZvaWQgb3ZlcnJpZGVVc2Vy
QWdlbnQoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcqIHZhbHVlKSBvdmVycmlkZTsKLSAgICB2
b2lkIG92ZXJyaWRlU2V0dGluZyhFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgc2V0dGluZywg
Y29uc3QgYm9vbCogdmFsdWUpIG92ZXJyaWRlOwotICAgIHZvaWQgZ2V0Q29va2llcyhFcnJvclN0
cmluZyYsIFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkNv
b2tpZT4+JiBjb29raWVzKSBvdmVycmlkZTsKLSAgICB2b2lkIHNldENvb2tpZShFcnJvclN0cmlu
ZyYsIGNvbnN0IEpTT046Ok9iamVjdCYgY29va2llT2JqZWN0KSBvdmVycmlkZTsKLSAgICB2b2lk
IGRlbGV0ZUNvb2tpZShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgY29va2llTmFtZSwgY29u
c3QgU3RyaW5nJiB1cmwpIG92ZXJyaWRlOwotICAgIHZvaWQgZ2V0UmVzb3VyY2VUcmVlKEVycm9y
U3RyaW5nJiwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkZyYW1lUmVzb3VyY2VU
cmVlPiYpIG92ZXJyaWRlOwotICAgIHZvaWQgZ2V0UmVzb3VyY2VDb250ZW50KEVycm9yU3RyaW5n
JiwgY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBjb25zdCBTdHJpbmcmIHVybCwgU3RyaW5nKiBjb250
ZW50LCBib29sKiBiYXNlNjRFbmNvZGVkKSBvdmVycmlkZTsKLSAgICB2b2lkIHNldEJvb3RzdHJh
cFNjcmlwdChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxTb3VyY2UpIGZpbmFs
OwotICAgIHZvaWQgc2VhcmNoSW5SZXNvdXJjZShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYg
ZnJhbWVJZCwgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgcXVlcnksIGNvbnN0IGJv
b2wqIG9wdGlvbmFsQ2FzZVNlbnNpdGl2ZSwgY29uc3QgYm9vbCogb3B0aW9uYWxJc1JlZ2V4LCBj
b25zdCBTdHJpbmcqIG9wdGlvbmFsUmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpHZW5lcmljVHlwZXM6OlNlYXJjaE1hdGNoPj4mKSBvdmVycmlkZTsK
LSAgICB2b2lkIHNlYXJjaEluUmVzb3VyY2VzKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiwg
Y29uc3QgYm9vbCogY2FzZVNlbnNpdGl2ZSwgY29uc3QgYm9vbCogaXNSZWdleCwgUmVmUHRyPEpT
T046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6U2VhcmNoUmVzdWx0Pj4mKSBv
dmVycmlkZTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGVu
YWJsZSgpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZGlz
YWJsZSgpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gcmVs
b2FkKE9wdGlvbmFsPGJvb2w+JiYgaWdub3JlQ2FjaGUsIE9wdGlvbmFsPGJvb2w+JiYgcmV2YWxp
ZGF0ZUFsbFJlc291cmNlcyk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdP
cjx2b2lkPiBuYXZpZ2F0ZShjb25zdCBTdHJpbmcmIHVybCk7CisgICAgSW5zcGVjdG9yOjpQcm90
b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBvdmVycmlkZVVzZXJBZ2VudChjb25zdCBTdHJpbmcm
KTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IG92ZXJyaWRl
U2V0dGluZyhJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpTZXR0aW5nLCBPcHRpb25hbDxib29s
PiYmIHZhbHVlKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxK
U09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkNvb2tpZT4+PiBnZXRDb29r
aWVzKCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzZXRD
b29raWUoUmVmPEpTT046Ok9iamVjdD4mJik7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJy
b3JTdHJpbmdPcjx2b2lkPiBkZWxldGVDb29raWUoY29uc3QgU3RyaW5nJiBjb29raWVOYW1lLCBj
b25zdCBTdHJpbmcmIHVybCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdP
cjxSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6RnJhbWVSZXNvdXJjZVRyZWU+PiBnZXRS
ZXNvdXJjZVRyZWUoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHN0
ZDo6dHVwbGU8U3RyaW5nLCBib29sIC8qIGJhc2U2NEVuY29kZWQgKi8+PiBnZXRSZXNvdXJjZUNv
bnRlbnQoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6RnJhbWVJZCYsIGNvbnN0
IFN0cmluZyYgdXJsKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZv
aWQ+IHNldEJvb3RzdHJhcFNjcmlwdChjb25zdCBTdHJpbmcmIHNvdXJjZSk7CisgICAgSW5zcGVj
dG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6
OlByb3RvY29sOjpHZW5lcmljVHlwZXM6OlNlYXJjaE1hdGNoPj4+IHNlYXJjaEluUmVzb3VyY2Uo
Y29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6RnJhbWVJZCYsIGNvbnN0IFN0cmlu
ZyYgdXJsLCBjb25zdCBTdHJpbmcmIHF1ZXJ5LCBPcHRpb25hbDxib29sPiYmIGNhc2VTZW5zaXRp
dmUsIE9wdGlvbmFsPGJvb2w+JiYgaXNSZWdleCwgY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6
TmV0d29yazo6UmVxdWVzdElkJik7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJp
bmdPcjxSZWY8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpTZWFyY2hS
ZXN1bHQ+Pj4gc2VhcmNoSW5SZXNvdXJjZXMoY29uc3QgU3RyaW5nJiwgT3B0aW9uYWw8Ym9vbD4m
JiBjYXNlU2Vuc2l0aXZlLCBPcHRpb25hbDxib29sPiYmIGlzUmVnZXgpOwogI2lmICFQTEFURk9S
TShJT1NfRkFNSUxZKQotICAgIHZvaWQgc2V0U2hvd1J1bGVycyhFcnJvclN0cmluZyYsIGJvb2wp
IG92ZXJyaWRlOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4g
c2V0U2hvd1J1bGVycyhib29sKTsKICNlbmRpZgotICAgIHZvaWQgc2V0U2hvd1BhaW50UmVjdHMo
RXJyb3JTdHJpbmcmLCBib29sIHNob3cpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0RW11bGF0ZWRN
ZWRpYShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlOworICAgIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc2V0U2hvd1BhaW50UmVjdHMoYm9vbCk7
CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzZXRFbXVsYXRl
ZE1lZGlhKGNvbnN0IFN0cmluZyYpOwogI2lmIEVOQUJMRShEQVJLX01PREVfQ1NTKSB8fCBIQVZF
KE9TX0RBUktfTU9ERV9TVVBQT1JUKQotICAgIHZvaWQgc2V0Rm9yY2VkQXBwZWFyYW5jZShFcnJv
clN0cmluZyYsIGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlOworICAgIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc2V0Rm9yY2VkQXBwZWFyYW5jZShPcHRpb25hbDxJbnNw
ZWN0b3I6OlByb3RvY29sOjpQYWdlOjpBcHBlYXJhbmNlPiYmKTsKICNlbmRpZgotICAgIHZvaWQg
c25hcHNob3ROb2RlKEVycm9yU3RyaW5nJiwgaW50IG5vZGVJZCwgU3RyaW5nKiBvdXREYXRhVVJM
KSBvdmVycmlkZTsKLSAgICB2b2lkIHNuYXBzaG90UmVjdChFcnJvclN0cmluZyYsIGludCB4LCBp
bnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBjb25zdCBTdHJpbmcmIGNvb3JkaW5hdGVTeXN0
ZW0sIFN0cmluZyogb3V0RGF0YVVSTCkgb3ZlcnJpZGU7CisgICAgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6RXJyb3JTdHJpbmdPcjxTdHJpbmc+IHNuYXBzaG90Tm9kZShJbnNwZWN0b3I6OlByb3RvY29s
OjpET006Ok5vZGVJZCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxT
dHJpbmc+IHNuYXBzaG90UmVjdChpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCwg
SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6Q29vcmRpbmF0ZVN5c3RlbSk7CiAjaWYgRU5BQkxF
KFdFQl9BUkNISVZFKSAmJiBVU0UoQ0YpCi0gICAgdm9pZCBhcmNoaXZlKEVycm9yU3RyaW5nJiwg
U3RyaW5nKiBkYXRhKSBvdmVycmlkZTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0
cmluZ09yPFN0cmluZz4gYXJjaGl2ZSgpOwogI2VuZGlmCiAKICAgICAvLyBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb24KQEAgLTE0MywxMCArMTQxLDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIGRpZFNj
cm9sbCgpOwogICAgIHZvaWQgZGlkUmVjYWxjdWxhdGVTdHlsZSgpOwogCi0gICAgRnJhbWUqIGZy
YW1lRm9ySWQoY29uc3QgU3RyaW5nJiBmcmFtZUlkKTsKKyAgICBGcmFtZSogZnJhbWVGb3JJZChj
b25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpGcmFtZUlkJik7CiAgICAgV0VCQ09S
RV9FWFBPUlQgU3RyaW5nIGZyYW1lSWQoRnJhbWUqKTsKICAgICBTdHJpbmcgbG9hZGVySWQoRG9j
dW1lbnRMb2FkZXIqKTsKLSAgICBGcmFtZSogYXNzZXJ0RnJhbWUoRXJyb3JTdHJpbmcmLCBjb25z
dCBTdHJpbmcmIGZyYW1lSWQpOworICAgIEZyYW1lKiBhc3NlcnRGcmFtZShJbnNwZWN0b3I6OlBy
b3RvY29sOjpFcnJvclN0cmluZyYsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6
OkZyYW1lSWQmKTsKIAogcHJpdmF0ZToKICAgICBkb3VibGUgdGltZXN0YW1wKCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclRpbWVsaW5lQWdl
bnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JUaW1lbGlu
ZUFnZW50LmNwcAppbmRleCAwYjQ2NjA2OGQ5MGZlMTQ5NWE4NDI5Yjc2MzlmMzEzNWJkNDMzZjQ4
Li4wZGY5NTA1NzAzZDBiMzgxODExMjVlNTMwMWUyMDQxMTI3ZmMzYjU1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclRpbWVsaW5lQWdlbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yVGltZWxpbmVB
Z2VudC5jcHAKQEAgLTEwMiw4MCArMTAyLDgyIEBAIHZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2Vu
dDo6ZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRSb3V0CiAK
IHZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tl
bmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKQogewotICAgIEVycm9yU3RyaW5nIGlnbm9y
ZWQ7Ci0gICAgZGlzYWJsZShpZ25vcmVkKTsKKyAgICBkaXNhYmxlKCk7CiB9CiAKLXZvaWQgSW5z
cGVjdG9yVGltZWxpbmVBZ2VudDo6ZW5hYmxlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZykKK1By
b3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OmVuYWJs
ZSgpCiB7Ci0gICAgaWYgKG1faW5zdHJ1bWVudGluZ0FnZW50cy5lbmFibGVkVGltZWxpbmVBZ2Vu
dCgpID09IHRoaXMpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiVGltZWxpbmUgZG9tYWluIGFs
cmVhZHkgZW5hYmxlZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAobV9pbnN0
cnVtZW50aW5nQWdlbnRzLmVuYWJsZWRUaW1lbGluZUFnZW50KCkgPT0gdGhpcykKKyAgICAgICAg
cmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJUaW1lbGluZSBkb21haW4gYWxyZWFkeSBlbmFibGVkIl9z
KTsKIAogICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy5zZXRFbmFibGVkVGltZWxpbmVBZ2VudCh0
aGlzKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2Vu
dDo6ZGlzYWJsZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCitQcm90b2NvbDo6RXJyb3JTdHJp
bmdPcjx2b2lkPiBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpkaXNhYmxlKCkKIHsKLSAgICBpZiAo
bV9pbnN0cnVtZW50aW5nQWdlbnRzLmVuYWJsZWRUaW1lbGluZUFnZW50KCkgIT0gdGhpcykgewot
ICAgICAgICBlcnJvclN0cmluZyA9ICJUaW1lbGluZSBkb21haW4gYWxyZWFkeSBkaXNhYmxlZCJf
czsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAobV9pbnN0cnVtZW50aW5nQWdlbnRz
LmVuYWJsZWRUaW1lbGluZUFnZW50KCkgIT0gdGhpcykKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4
cGVjdGVkKCJUaW1lbGluZSBkb21haW4gYWxyZWFkeSBkaXNhYmxlZCJfcyk7CiAKICAgICBtX2lu
c3RydW1lbnRpbmdBZ2VudHMuc2V0RW5hYmxlZFRpbWVsaW5lQWdlbnQobnVsbHB0cik7CiAKLSAg
ICBFcnJvclN0cmluZyBpZ25vcmVkOwotICAgIHN0b3AoaWdub3JlZCk7CisgICAgc3RvcCgpOwog
CiAgICAgbV9hdXRvQ2FwdHVyZUVuYWJsZWQgPSBmYWxzZTsKICAgICBtX2luc3RydW1lbnRzLmNs
ZWFyKCk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvclRpbWVsaW5lQWdl
bnQ6OnN0YXJ0KEVycm9yU3RyaW5nJiwgY29uc3QgaW50KiBtYXhDYWxsU3RhY2tEZXB0aCkKK1By
b3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OnN0YXJ0
KE9wdGlvbmFsPGludD4mJiBtYXhDYWxsU3RhY2tEZXB0aCkKIHsKICAgICBtX3RyYWNraW5nRnJv
bUZyb250ZW5kID0gdHJ1ZTsKIAotICAgIGludGVybmFsU3RhcnQobWF4Q2FsbFN0YWNrRGVwdGgp
OworICAgIGludGVybmFsU3RhcnQoV1RGTW92ZShtYXhDYWxsU3RhY2tEZXB0aCkpOworCisgICAg
cmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpzdG9wKEVycm9y
U3RyaW5nJikKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvclRpbWVsaW5l
QWdlbnQ6OnN0b3AoKQogewogICAgIGludGVybmFsU3RvcCgpOwogCiAgICAgbV90cmFja2luZ0Zy
b21Gcm9udGVuZCA9IGZhbHNlOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0
b3JUaW1lbGluZUFnZW50OjpzZXRBdXRvQ2FwdHVyZUVuYWJsZWQoRXJyb3JTdHJpbmcmLCBib29s
IGVuYWJsZWQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JUaW1lbGlu
ZUFnZW50OjpzZXRBdXRvQ2FwdHVyZUVuYWJsZWQoYm9vbCBlbmFibGVkKQogewogICAgIG1fYXV0
b0NhcHR1cmVFbmFibGVkID0gZW5hYmxlZDsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQg
SW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6c2V0SW5zdHJ1bWVudHMoRXJyb3JTdHJpbmcmIGVycm9y
U3RyaW5nLCBjb25zdCBKU09OOjpBcnJheSYgaW5zdHJ1bWVudHMpCitQcm90b2NvbDo6RXJyb3JT
dHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpzZXRJbnN0cnVtZW50cyhSZWY8
SlNPTjo6QXJyYXk+JiYgaW5zdHJ1bWVudHMpCiB7CiAgICAgVmVjdG9yPFByb3RvY29sOjpUaW1l
bGluZTo6SW5zdHJ1bWVudD4gbmV3SW5zdHJ1bWVudHM7Ci0gICAgbmV3SW5zdHJ1bWVudHMucmVz
ZXJ2ZUNhcGFjaXR5KGluc3RydW1lbnRzLmxlbmd0aCgpKTsKKyAgICBuZXdJbnN0cnVtZW50cy5y
ZXNlcnZlQ2FwYWNpdHkoaW5zdHJ1bWVudHMtPmxlbmd0aCgpKTsKIAotICAgIGZvciAoY29uc3Qg
YXV0byYgaW5zdHJ1bWVudFZhbHVlIDogaW5zdHJ1bWVudHMpIHsKLSAgICAgICAgU3RyaW5nIGVu
dW1WYWx1ZVN0cmluZzsKLSAgICAgICAgaWYgKCFpbnN0cnVtZW50VmFsdWUtPmFzU3RyaW5nKGVu
dW1WYWx1ZVN0cmluZykpIHsKLSAgICAgICAgICAgIGVycm9yU3RyaW5nID0gIlVuZXhwZWN0ZWQg
bm9uLXN0cmluZyB2YWx1ZSBpbiBnaXZlbiBpbnN0cnVtZW50cyJfczsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQorICAgIGZvciAoY29uc3QgYXV0byYgaW5zdHJ1bWVudFZhbHVlIDog
aW5zdHJ1bWVudHMuZ2V0KCkpIHsKKyAgICAgICAgYXV0byBpbnN0cnVtZW50U3RyaW5nID0gaW5z
dHJ1bWVudFZhbHVlLT5hc1N0cmluZygpOworICAgICAgICBpZiAoIWluc3RydW1lbnRTdHJpbmcp
CisgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIlVuZXhwZWN0ZWQgbm9uLXN0cmlu
ZyB2YWx1ZSBpbiBnaXZlbiBpbnN0cnVtZW50cyJfcyk7CiAKLSAgICAgICAgT3B0aW9uYWw8UHJv
dG9jb2w6OlRpbWVsaW5lOjpJbnN0cnVtZW50PiBpbnN0cnVtZW50VHlwZSA9IFByb3RvY29sOjpJ
bnNwZWN0b3JIZWxwZXJzOjpwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8UHJvdG9jb2w6OlRpbWVs
aW5lOjpJbnN0cnVtZW50PihlbnVtVmFsdWVTdHJpbmcpOwotICAgICAgICBpZiAoIWluc3RydW1l
bnRUeXBlKSB7Ci0gICAgICAgICAgICBlcnJvclN0cmluZyA9IG1ha2VTdHJpbmcoIlVua25vd24g
aXRlbSBpbiBnaXZlbiBpbnN0cnVtZW50czogIiwgZW51bVZhbHVlU3RyaW5nKTsKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQorICAgICAgICBhdXRvIGluc3RydW1lbnQgPSBQcm90b2Nv
bDo6SGVscGVyczo6cGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPFByb3RvY29sOjpUaW1lbGluZTo6
SW5zdHJ1bWVudD4oaW5zdHJ1bWVudFN0cmluZyk7CisgICAgICAgIGlmICghaW5zdHJ1bWVudCkK
KyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChtYWtlU3RyaW5nKCJVbmtub3duIGlu
c3RydW1lbnQ6ICIsIGluc3RydW1lbnRTdHJpbmcpKTsKIAotICAgICAgICBuZXdJbnN0cnVtZW50
cy51bmNoZWNrZWRBcHBlbmQoKmluc3RydW1lbnRUeXBlKTsKKyAgICAgICAgbmV3SW5zdHJ1bWVu
dHMudW5jaGVja2VkQXBwZW5kKCppbnN0cnVtZW50KTsKICAgICB9CiAKICAgICBtX2luc3RydW1l
bnRzLnN3YXAobmV3SW5zdHJ1bWVudHMpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJ
bnNwZWN0b3JUaW1lbGluZUFnZW50OjppbnRlcm5hbFN0YXJ0KGNvbnN0IGludCogbWF4Q2FsbFN0
YWNrRGVwdGgpCit2b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OmludGVybmFsU3RhcnQoT3B0
aW9uYWw8aW50PiYmIG1heENhbGxTdGFja0RlcHRoKQogewogICAgIGlmIChtX3RyYWNraW5nKQog
ICAgICAgICByZXR1cm47CkBAIC0yOTIsOCArMjk0LDcgQEAgdm9pZCBJbnNwZWN0b3JUaW1lbGlu
ZUFnZW50OjpzdGFydEZyb21Db25zb2xlKEpTQzo6SlNHbG9iYWxPYmplY3QqIGV4ZWMsIGNvbnN0
IFMKICAgICAvLyBBbGxvdyBkdXBsaWNhdGUgdW5uYW1lZCBwcm9maWxlcy4gRGlzYWxsb3cgZHVw
bGljYXRlIG5hbWVkIHByb2ZpbGVzLgogICAgIGlmICghdGl0bGUuaXNFbXB0eSgpKSB7CiAgICAg
ICAgIGZvciAoY29uc3QgVGltZWxpbmVSZWNvcmRFbnRyeSYgcmVjb3JkIDogbV9wZW5kaW5nQ29u
c29sZVByb2ZpbGVSZWNvcmRzKSB7Ci0gICAgICAgICAgICBTdHJpbmcgcmVjb3JkVGl0bGU7Ci0g
ICAgICAgICAgICByZWNvcmQuZGF0YS0+Z2V0U3RyaW5nKCJ0aXRsZSJfcywgcmVjb3JkVGl0bGUp
OworICAgICAgICAgICAgYXV0byByZWNvcmRUaXRsZSA9IHJlY29yZC5kYXRhLT5nZXRTdHJpbmco
InRpdGxlIl9zKTsKICAgICAgICAgICAgIGlmIChyZWNvcmRUaXRsZSA9PSB0aXRsZSkgewogICAg
ICAgICAgICAgICAgIGlmIChhdXRvKiBjb25zb2xlQWdlbnQgPSBtX2luc3RydW1lbnRpbmdBZ2Vu
dHMud2ViQ29uc29sZUFnZW50KCkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFNl
bmQgYW4gZW51bSB0byB0aGUgZnJvbnRlbmQgZm9yIGxvY2FsaXphdGlvbj8KQEAgLTMxOCw4ICsz
MTksNyBAQCB2b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OnN0b3BGcm9tQ29uc29sZShKU0M6
OkpTR2xvYmFsT2JqZWN0KiwgY29uc3QgU3RyaW5nJgogICAgIGZvciAoaW50IGkgPSBtX3BlbmRp
bmdDb25zb2xlUHJvZmlsZVJlY29yZHMuc2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKICAgICAg
ICAgY29uc3QgVGltZWxpbmVSZWNvcmRFbnRyeSYgcmVjb3JkID0gbV9wZW5kaW5nQ29uc29sZVBy
b2ZpbGVSZWNvcmRzW2ldOwogCi0gICAgICAgIFN0cmluZyByZWNvcmRUaXRsZTsKLSAgICAgICAg
cmVjb3JkLmRhdGEtPmdldFN0cmluZygidGl0bGUiX3MsIHJlY29yZFRpdGxlKTsKKyAgICAgICAg
YXV0byByZWNvcmRUaXRsZSA9IHJlY29yZC5kYXRhLT5nZXRTdHJpbmcoInRpdGxlIl9zKTsKICAg
ICAgICAgaWYgKHRpdGxlLmlzRW1wdHkoKSB8fCByZWNvcmRUaXRsZSA9PSB0aXRsZSkgewogICAg
ICAgICAgICAgZGlkQ29tcGxldGVSZWNvcmRFbnRyeShyZWNvcmQpOwogICAgICAgICAgICAgbV9w
ZW5kaW5nQ29uc29sZVByb2ZpbGVSZWNvcmRzLnJlbW92ZShpKTsKQEAgLTQ5NiwxMCArNDk2LDgg
QEAgdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjptYWluRnJhbWVTdGFydGVkTG9hZGluZygp
CiAgICAgbV9hdXRvQ2FwdHVyZVBoYXNlID0gQXV0b0NhcHR1cmVQaGFzZTo6QmVmb3JlTG9hZDsK
IAogICAgIC8vIFByZS1lbXB0aXZlbHkgZGlzYWJsZSBicmVha3BvaW50cy4gVGhlIGZyb250ZW5k
IG11c3QgcmUtZW5hYmxlIHRoZW0uCi0gICAgaWYgKGF1dG8qIHdlYkRlYnVnZ2VyQWdlbnQgPSBt
X2luc3RydW1lbnRpbmdBZ2VudHMuZW5hYmxlZFdlYkRlYnVnZ2VyQWdlbnQoKSkgewotICAgICAg
ICBFcnJvclN0cmluZyBpZ25vcmVkOwotICAgICAgICB3ZWJEZWJ1Z2dlckFnZW50LT5zZXRCcmVh
a3BvaW50c0FjdGl2ZShpZ25vcmVkLCBmYWxzZSk7Ci0gICAgfQorICAgIGlmIChhdXRvKiB3ZWJE
ZWJ1Z2dlckFnZW50ID0gbV9pbnN0cnVtZW50aW5nQWdlbnRzLmVuYWJsZWRXZWJEZWJ1Z2dlckFn
ZW50KCkpCisgICAgICAgIHdlYkRlYnVnZ2VyQWdlbnQtPnNldEJyZWFrcG9pbnRzQWN0aXZlKGZh
bHNlKTsKIAogICAgIC8vIEluZm9ybSB0aGUgZnJvbnRlbmQgd2Ugc3RhcnRlZCBhbiBhdXRvIGNh
cHR1cmUuIFRoZSBmcm9udGVuZCBtdXN0IHN0b3AgY2FwdHVyZS4KICAgICBtX2Zyb250ZW5kRGlz
cGF0Y2hlci0+YXV0b0NhcHR1cmVTdGFydGVkKCk7CkBAIC01MjMsMTAgKzUyMSw4IEBAIHZvaWQg
SW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6c3RhcnRQcm9ncmFtbWF0aWNDYXB0dXJlKCkKICAgICAv
LyBEaXNhYmxlIGJyZWFrcG9pbnRzIGR1cmluZyBwcm9ncmFtbWF0aWMgY2FwdHVyZS4KICAgICBp
ZiAoYXV0byogd2ViRGVidWdnZXJBZ2VudCA9IG1faW5zdHJ1bWVudGluZ0FnZW50cy5lbmFibGVk
V2ViRGVidWdnZXJBZ2VudCgpKSB7CiAgICAgICAgIG1fcHJvZ3JhbW1hdGljQ2FwdHVyZVJlc3Rv
cmVCcmVha3BvaW50QWN0aXZlVmFsdWUgPSB3ZWJEZWJ1Z2dlckFnZW50LT5icmVha3BvaW50c0Fj
dGl2ZSgpOwotICAgICAgICBpZiAobV9wcm9ncmFtbWF0aWNDYXB0dXJlUmVzdG9yZUJyZWFrcG9p
bnRBY3RpdmVWYWx1ZSkgewotICAgICAgICAgICAgRXJyb3JTdHJpbmcgaWdub3JlZDsKLSAgICAg
ICAgICAgIHdlYkRlYnVnZ2VyQWdlbnQtPnNldEJyZWFrcG9pbnRzQWN0aXZlKGlnbm9yZWQsIGZh
bHNlKTsKLSAgICAgICAgfQorICAgICAgICBpZiAobV9wcm9ncmFtbWF0aWNDYXB0dXJlUmVzdG9y
ZUJyZWFrcG9pbnRBY3RpdmVWYWx1ZSkKKyAgICAgICAgICAgIHdlYkRlYnVnZ2VyQWdlbnQtPnNl
dEJyZWFrcG9pbnRzQWN0aXZlKGZhbHNlKTsKICAgICB9IGVsc2UKICAgICAgICAgbV9wcm9ncmFt
bWF0aWNDYXB0dXJlUmVzdG9yZUJyZWFrcG9pbnRBY3RpdmVWYWx1ZSA9IGZhbHNlOwogCkBAIC01
NDYsMTAgKzU0Miw4IEBAIHZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6c3RvcFByb2dyYW1t
YXRpY0NhcHR1cmUoKQogCiAgICAgLy8gUmUtZW5hYmxlIGJyZWFrcG9pbnRzIGlmIHRoZXkgd2Vy
ZSBlbmFibGVkLgogICAgIGlmIChtX3Byb2dyYW1tYXRpY0NhcHR1cmVSZXN0b3JlQnJlYWtwb2lu
dEFjdGl2ZVZhbHVlKSB7Ci0gICAgICAgIGlmIChhdXRvKiB3ZWJEZWJ1Z2dlckFnZW50ID0gbV9p
bnN0cnVtZW50aW5nQWdlbnRzLmVuYWJsZWRXZWJEZWJ1Z2dlckFnZW50KCkpIHsKLSAgICAgICAg
ICAgIEVycm9yU3RyaW5nIGlnbm9yZWQ7Ci0gICAgICAgICAgICB3ZWJEZWJ1Z2dlckFnZW50LT5z
ZXRCcmVha3BvaW50c0FjdGl2ZShpZ25vcmVkLCB0cnVlKTsKLSAgICAgICAgfQorICAgICAgICBp
ZiAoYXV0byogd2ViRGVidWdnZXJBZ2VudCA9IG1faW5zdHJ1bWVudGluZ0FnZW50cy5lbmFibGVk
V2ViRGVidWdnZXJBZ2VudCgpKQorICAgICAgICAgICAgd2ViRGVidWdnZXJBZ2VudC0+c2V0QnJl
YWtwb2ludHNBY3RpdmUodHJ1ZSk7CiAgICAgfQogfQogCkBAIC01NTcsMjYgKzU1MSwyNiBAQCB2
b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OnRvZ2dsZUluc3RydW1lbnRzKEluc3RydW1lbnRT
dGF0ZSBzdGF0ZSkKIHsKICAgICBmb3IgKGF1dG8gaW5zdHJ1bWVudFR5cGUgOiBtX2luc3RydW1l
bnRzKSB7CiAgICAgICAgIHN3aXRjaCAoaW5zdHJ1bWVudFR5cGUpIHsKLSAgICAgICAgY2FzZSBJ
bnNwZWN0b3I6OlByb3RvY29sOjpUaW1lbGluZTo6SW5zdHJ1bWVudDo6U2NyaXB0UHJvZmlsZXI6
IHsKKyAgICAgICAgY2FzZSBQcm90b2NvbDo6VGltZWxpbmU6Okluc3RydW1lbnQ6OlNjcmlwdFBy
b2ZpbGVyOiB7CiAgICAgICAgICAgICB0b2dnbGVTY3JpcHRQcm9maWxlckluc3RydW1lbnQoc3Rh
dGUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgY2FzZSBJbnNwZWN0
b3I6OlByb3RvY29sOjpUaW1lbGluZTo6SW5zdHJ1bWVudDo6SGVhcDogeworICAgICAgICBjYXNl
IFByb3RvY29sOjpUaW1lbGluZTo6SW5zdHJ1bWVudDo6SGVhcDogewogICAgICAgICAgICAgdG9n
Z2xlSGVhcEluc3RydW1lbnQoc3RhdGUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
LSAgICAgICAgY2FzZSBJbnNwZWN0b3I6OlByb3RvY29sOjpUaW1lbGluZTo6SW5zdHJ1bWVudDo6
Q1BVOiB7CisgICAgICAgIGNhc2UgUHJvdG9jb2w6OlRpbWVsaW5lOjpJbnN0cnVtZW50OjpDUFU6
IHsKICAgICAgICAgICAgIHRvZ2dsZUNQVUluc3RydW1lbnQoc3RhdGUpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgY2FzZSBJbnNwZWN0b3I6OlByb3RvY29sOjpUaW1l
bGluZTo6SW5zdHJ1bWVudDo6TWVtb3J5OiB7CisgICAgICAgIGNhc2UgUHJvdG9jb2w6OlRpbWVs
aW5lOjpJbnN0cnVtZW50OjpNZW1vcnk6IHsKICAgICAgICAgICAgIHRvZ2dsZU1lbW9yeUluc3Ry
dW1lbnQoc3RhdGUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgY2Fz
ZSBJbnNwZWN0b3I6OlByb3RvY29sOjpUaW1lbGluZTo6SW5zdHJ1bWVudDo6VGltZWxpbmU6Cisg
ICAgICAgIGNhc2UgUHJvdG9jb2w6OlRpbWVsaW5lOjpJbnN0cnVtZW50OjpUaW1lbGluZToKICAg
ICAgICAgICAgIHRvZ2dsZVRpbWVsaW5lSW5zdHJ1bWVudChzdGF0ZSk7CiAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBJbnNwZWN0b3I6OlByb3RvY29sOjpUaW1lbGluZTo6SW5zdHJ1
bWVudDo6QW5pbWF0aW9uOgorICAgICAgICBjYXNlIFByb3RvY29sOjpUaW1lbGluZTo6SW5zdHJ1
bWVudDo6QW5pbWF0aW9uOgogICAgICAgICAgICAgdG9nZ2xlQW5pbWF0aW9uSW5zdHJ1bWVudChz
dGF0ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtNTg2LDI0ICs1ODAsMjEg
QEAgdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50Ojp0b2dnbGVJbnN0cnVtZW50cyhJbnN0cnVt
ZW50U3RhdGUgc3RhdGUpCiB2b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OnRvZ2dsZVNjcmlw
dFByb2ZpbGVySW5zdHJ1bWVudChJbnN0cnVtZW50U3RhdGUgc3RhdGUpCiB7CiAgICAgaWYgKGF1
dG8qIHNjcmlwdFByb2ZpbGVyQWdlbnQgPSBtX2luc3RydW1lbnRpbmdBZ2VudHMucGVyc2lzdGVu
dFNjcmlwdFByb2ZpbGVyQWdlbnQoKSkgewotICAgICAgICBFcnJvclN0cmluZyBpZ25vcmVkOwot
ICAgICAgICBpZiAoc3RhdGUgPT0gSW5zdHJ1bWVudFN0YXRlOjpTdGFydCkgewotICAgICAgICAg
ICAgY29uc3QgYm9vbCBpbmNsdWRlU2FtcGxlcyA9IHRydWU7Ci0gICAgICAgICAgICBzY3JpcHRQ
cm9maWxlckFnZW50LT5zdGFydFRyYWNraW5nKGlnbm9yZWQsICZpbmNsdWRlU2FtcGxlcyk7Ci0g
ICAgICAgIH0gZWxzZQotICAgICAgICAgICAgc2NyaXB0UHJvZmlsZXJBZ2VudC0+c3RvcFRyYWNr
aW5nKGlnbm9yZWQpOworICAgICAgICBpZiAoc3RhdGUgPT0gSW5zdHJ1bWVudFN0YXRlOjpTdGFy
dCkKKyAgICAgICAgICAgIHNjcmlwdFByb2ZpbGVyQWdlbnQtPnN0YXJ0VHJhY2tpbmcodHJ1ZSk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNjcmlwdFByb2ZpbGVyQWdlbnQtPnN0b3BUcmFj
a2luZygpOwogICAgIH0KIH0KIAogdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50Ojp0b2dnbGVI
ZWFwSW5zdHJ1bWVudChJbnN0cnVtZW50U3RhdGUgc3RhdGUpCiB7CiAgICAgaWYgKGF1dG8qIGhl
YXBBZ2VudCA9IG1faW5zdHJ1bWVudGluZ0FnZW50cy5lbmFibGVkUGFnZUhlYXBBZ2VudCgpKSB7
Ci0gICAgICAgIEVycm9yU3RyaW5nIGlnbm9yZWQ7CiAgICAgICAgIGlmIChzdGF0ZSA9PSBJbnN0
cnVtZW50U3RhdGU6OlN0YXJ0KSB7CiAgICAgICAgICAgICBpZiAobV9hdXRvQ2FwdHVyZVBoYXNl
ID09IEF1dG9DYXB0dXJlUGhhc2U6Ok5vbmUgfHwgbV9hdXRvQ2FwdHVyZVBoYXNlID09IEF1dG9D
YXB0dXJlUGhhc2U6OkZpcnN0TmF2aWdhdGlvbikKLSAgICAgICAgICAgICAgICBoZWFwQWdlbnQt
PnN0YXJ0VHJhY2tpbmcoaWdub3JlZCk7CisgICAgICAgICAgICAgICAgaGVhcEFnZW50LT5zdGFy
dFRyYWNraW5nKCk7CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgaGVhcEFnZW50LT5zdG9w
VHJhY2tpbmcoaWdub3JlZCk7CisgICAgICAgICAgICBoZWFwQWdlbnQtPnN0b3BUcmFja2luZygp
OwogICAgIH0KIH0KIApAQCAtNjExLDExICs2MDIsMTAgQEAgdm9pZCBJbnNwZWN0b3JUaW1lbGlu
ZUFnZW50Ojp0b2dnbGVDUFVJbnN0cnVtZW50KEluc3RydW1lbnRTdGF0ZSBzdGF0ZSkKIHsKICNp
ZiBFTkFCTEUoUkVTT1VSQ0VfVVNBR0UpCiAgICAgaWYgKGF1dG8qIGNwdVByb2ZpbGVyQWdlbnQg
PSBtX2luc3RydW1lbnRpbmdBZ2VudHMucGVyc2lzdGVudENQVVByb2ZpbGVyQWdlbnQoKSkgewot
ICAgICAgICBFcnJvclN0cmluZyBpZ25vcmVkOwogICAgICAgICBpZiAoc3RhdGUgPT0gSW5zdHJ1
bWVudFN0YXRlOjpTdGFydCkKLSAgICAgICAgICAgIGNwdVByb2ZpbGVyQWdlbnQtPnN0YXJ0VHJh
Y2tpbmcoaWdub3JlZCk7CisgICAgICAgICAgICBjcHVQcm9maWxlckFnZW50LT5zdGFydFRyYWNr
aW5nKCk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNwdVByb2ZpbGVyQWdlbnQtPnN0b3BU
cmFja2luZyhpZ25vcmVkKTsKKyAgICAgICAgICAgIGNwdVByb2ZpbGVyQWdlbnQtPnN0b3BUcmFj
a2luZygpOwogICAgIH0KICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKQEAgLTYyNiwx
MSArNjE2LDEwIEBAIHZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6dG9nZ2xlTWVtb3J5SW5z
dHJ1bWVudChJbnN0cnVtZW50U3RhdGUgc3RhdGUpCiB7CiAjaWYgRU5BQkxFKFJFU09VUkNFX1VT
QUdFKQogICAgIGlmIChhdXRvKiBtZW1vcnlBZ2VudCA9IG1faW5zdHJ1bWVudGluZ0FnZW50cy5w
ZXJzaXN0ZW50TWVtb3J5QWdlbnQoKSkgewotICAgICAgICBFcnJvclN0cmluZyBpZ25vcmVkOwog
ICAgICAgICBpZiAoc3RhdGUgPT0gSW5zdHJ1bWVudFN0YXRlOjpTdGFydCkKLSAgICAgICAgICAg
IG1lbW9yeUFnZW50LT5zdGFydFRyYWNraW5nKGlnbm9yZWQpOworICAgICAgICAgICAgbWVtb3J5
QWdlbnQtPnN0YXJ0VHJhY2tpbmcoKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbWVtb3J5
QWdlbnQtPnN0b3BUcmFja2luZyhpZ25vcmVkKTsKKyAgICAgICAgICAgIG1lbW9yeUFnZW50LT5z
dG9wVHJhY2tpbmcoKTsKICAgICB9CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBA
IC02NDAsNyArNjI5LDcgQEAgdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50Ojp0b2dnbGVNZW1v
cnlJbnN0cnVtZW50KEluc3RydW1lbnRTdGF0ZSBzdGF0ZSkKIHZvaWQgSW5zcGVjdG9yVGltZWxp
bmVBZ2VudDo6dG9nZ2xlVGltZWxpbmVJbnN0cnVtZW50KEluc3RydW1lbnRTdGF0ZSBzdGF0ZSkK
IHsKICAgICBpZiAoc3RhdGUgPT0gSW5zdHJ1bWVudFN0YXRlOjpTdGFydCkKLSAgICAgICAgaW50
ZXJuYWxTdGFydCgpOworICAgICAgICBpbnRlcm5hbFN0YXJ0KFdURjo6bnVsbG9wdCk7CiAgICAg
ZWxzZQogICAgICAgICBpbnRlcm5hbFN0b3AoKTsKIH0KQEAgLTY0OCwxMSArNjM3LDEwIEBAIHZv
aWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6dG9nZ2xlVGltZWxpbmVJbnN0cnVtZW50KEluc3Ry
dW1lbnRTdGF0ZSBzdGF0ZSkKIHZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6dG9nZ2xlQW5p
bWF0aW9uSW5zdHJ1bWVudChJbnN0cnVtZW50U3RhdGUgc3RhdGUpCiB7CiAgICAgaWYgKGF1dG8q
IGFuaW1hdGlvbkFnZW50ID0gbV9pbnN0cnVtZW50aW5nQWdlbnRzLnBlcnNpc3RlbnRBbmltYXRp
b25BZ2VudCgpKSB7Ci0gICAgICAgIEVycm9yU3RyaW5nIGlnbm9yZWQ7CiAgICAgICAgIGlmIChz
dGF0ZSA9PSBJbnN0cnVtZW50U3RhdGU6OlN0YXJ0KQotICAgICAgICAgICAgYW5pbWF0aW9uQWdl
bnQtPnN0YXJ0VHJhY2tpbmcoaWdub3JlZCk7CisgICAgICAgICAgICBhbmltYXRpb25BZ2VudC0+
c3RhcnRUcmFja2luZygpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBhbmltYXRpb25BZ2Vu
dC0+c3RvcFRyYWNraW5nKGlnbm9yZWQpOworICAgICAgICAgICAgYW5pbWF0aW9uQWdlbnQtPnN0
b3BUcmFja2luZygpOwogICAgIH0KIH0KIApAQCAtNjkxLDcxICs2NzksNzEgQEAgdm9pZCBJbnNw
ZWN0b3JUaW1lbGluZUFnZW50OjpicmVha3BvaW50QWN0aW9uUHJvYmUoSlNDOjpKU0dsb2JhbE9i
amVjdCogbGV4aWNhbEcKICAgICBhcHBlbmRSZWNvcmQoVGltZWxpbmVSZWNvcmRGYWN0b3J5Ojpj
cmVhdGVQcm9iZVNhbXBsZURhdGEoYWN0aW9uSUQsIHNhbXBsZUlkKSwgVGltZWxpbmVSZWNvcmRU
eXBlOjpQcm9iZVNhbXBsZSwgZmFsc2UsIGZyYW1lRnJvbUV4ZWNTdGF0ZShsZXhpY2FsR2xvYmFs
T2JqZWN0KSk7CiB9CiAKLXN0YXRpYyBJbnNwZWN0b3I6OlByb3RvY29sOjpUaW1lbGluZTo6RXZl
bnRUeXBlIHRvUHJvdG9jb2woVGltZWxpbmVSZWNvcmRUeXBlIHR5cGUpCitzdGF0aWMgUHJvdG9j
b2w6OlRpbWVsaW5lOjpFdmVudFR5cGUgdG9Qcm90b2NvbChUaW1lbGluZVJlY29yZFR5cGUgdHlw
ZSkKIHsKICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICBjYXNlIFRpbWVsaW5lUmVjb3JkVHlwZTo6
RXZlbnREaXNwYXRjaDoKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRpbWVs
aW5lOjpFdmVudFR5cGU6OkV2ZW50RGlzcGF0Y2g7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6
VGltZWxpbmU6OkV2ZW50VHlwZTo6RXZlbnREaXNwYXRjaDsKICAgICBjYXNlIFRpbWVsaW5lUmVj
b3JkVHlwZTo6U2NoZWR1bGVTdHlsZVJlY2FsY3VsYXRpb246Ci0gICAgICAgIHJldHVybiBJbnNw
ZWN0b3I6OlByb3RvY29sOjpUaW1lbGluZTo6RXZlbnRUeXBlOjpTY2hlZHVsZVN0eWxlUmVjYWxj
dWxhdGlvbjsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpUaW1lbGluZTo6RXZlbnRUeXBlOjpT
Y2hlZHVsZVN0eWxlUmVjYWxjdWxhdGlvbjsKICAgICBjYXNlIFRpbWVsaW5lUmVjb3JkVHlwZTo6
UmVjYWxjdWxhdGVTdHlsZXM6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpU
aW1lbGluZTo6RXZlbnRUeXBlOjpSZWNhbGN1bGF0ZVN0eWxlczsKKyAgICAgICAgcmV0dXJuIFBy
b3RvY29sOjpUaW1lbGluZTo6RXZlbnRUeXBlOjpSZWNhbGN1bGF0ZVN0eWxlczsKICAgICBjYXNl
IFRpbWVsaW5lUmVjb3JkVHlwZTo6SW52YWxpZGF0ZUxheW91dDoKLSAgICAgICAgcmV0dXJuIElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlRpbWVsaW5lOjpFdmVudFR5cGU6OkludmFsaWRhdGVMYXlvdXQ7
CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6VGltZWxpbmU6OkV2ZW50VHlwZTo6SW52YWxpZGF0
ZUxheW91dDsKICAgICBjYXNlIFRpbWVsaW5lUmVjb3JkVHlwZTo6TGF5b3V0OgotICAgICAgICBy
ZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6VGltZWxpbmU6OkV2ZW50VHlwZTo6TGF5b3V0Owor
ICAgICAgICByZXR1cm4gUHJvdG9jb2w6OlRpbWVsaW5lOjpFdmVudFR5cGU6OkxheW91dDsKICAg
ICBjYXNlIFRpbWVsaW5lUmVjb3JkVHlwZTo6UGFpbnQ6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0
b3I6OlByb3RvY29sOjpUaW1lbGluZTo6RXZlbnRUeXBlOjpQYWludDsKKyAgICAgICAgcmV0dXJu
IFByb3RvY29sOjpUaW1lbGluZTo6RXZlbnRUeXBlOjpQYWludDsKICAgICBjYXNlIFRpbWVsaW5l
UmVjb3JkVHlwZTo6Q29tcG9zaXRlOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2Nv
bDo6VGltZWxpbmU6OkV2ZW50VHlwZTo6Q29tcG9zaXRlOworICAgICAgICByZXR1cm4gUHJvdG9j
b2w6OlRpbWVsaW5lOjpFdmVudFR5cGU6OkNvbXBvc2l0ZTsKICAgICBjYXNlIFRpbWVsaW5lUmVj
b3JkVHlwZTo6UmVuZGVyaW5nRnJhbWU6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpUaW1lbGluZTo6RXZlbnRUeXBlOjpSZW5kZXJpbmdGcmFtZTsKKyAgICAgICAgcmV0dXJu
IFByb3RvY29sOjpUaW1lbGluZTo6RXZlbnRUeXBlOjpSZW5kZXJpbmdGcmFtZTsKIAogICAgIGNh
c2UgVGltZWxpbmVSZWNvcmRUeXBlOjpUaW1lckluc3RhbGw6Ci0gICAgICAgIHJldHVybiBJbnNw
ZWN0b3I6OlByb3RvY29sOjpUaW1lbGluZTo6RXZlbnRUeXBlOjpUaW1lckluc3RhbGw7CisgICAg
ICAgIHJldHVybiBQcm90b2NvbDo6VGltZWxpbmU6OkV2ZW50VHlwZTo6VGltZXJJbnN0YWxsOwog
ICAgIGNhc2UgVGltZWxpbmVSZWNvcmRUeXBlOjpUaW1lclJlbW92ZToKLSAgICAgICAgcmV0dXJu
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRpbWVsaW5lOjpFdmVudFR5cGU6OlRpbWVyUmVtb3ZlOwor
ICAgICAgICByZXR1cm4gUHJvdG9jb2w6OlRpbWVsaW5lOjpFdmVudFR5cGU6OlRpbWVyUmVtb3Zl
OwogICAgIGNhc2UgVGltZWxpbmVSZWNvcmRUeXBlOjpUaW1lckZpcmU6Ci0gICAgICAgIHJldHVy
biBJbnNwZWN0b3I6OlByb3RvY29sOjpUaW1lbGluZTo6RXZlbnRUeXBlOjpUaW1lckZpcmU7Cisg
ICAgICAgIHJldHVybiBQcm90b2NvbDo6VGltZWxpbmU6OkV2ZW50VHlwZTo6VGltZXJGaXJlOwog
CiAgICAgY2FzZSBUaW1lbGluZVJlY29yZFR5cGU6OkV2YWx1YXRlU2NyaXB0OgotICAgICAgICBy
ZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6VGltZWxpbmU6OkV2ZW50VHlwZTo6RXZhbHVhdGVT
Y3JpcHQ7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6VGltZWxpbmU6OkV2ZW50VHlwZTo6RXZh
bHVhdGVTY3JpcHQ7CiAKICAgICBjYXNlIFRpbWVsaW5lUmVjb3JkVHlwZTo6VGltZVN0YW1wOgot
ICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6VGltZWxpbmU6OkV2ZW50VHlwZTo6
VGltZVN0YW1wOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OlRpbWVsaW5lOjpFdmVudFR5cGU6
OlRpbWVTdGFtcDsKICAgICBjYXNlIFRpbWVsaW5lUmVjb3JkVHlwZTo6VGltZToKLSAgICAgICAg
cmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRpbWVsaW5lOjpFdmVudFR5cGU6OlRpbWU7Cisg
ICAgICAgIHJldHVybiBQcm90b2NvbDo6VGltZWxpbmU6OkV2ZW50VHlwZTo6VGltZTsKICAgICBj
YXNlIFRpbWVsaW5lUmVjb3JkVHlwZTo6VGltZUVuZDoKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlRpbWVsaW5lOjpFdmVudFR5cGU6OlRpbWVFbmQ7CisgICAgICAgIHJldHVy
biBQcm90b2NvbDo6VGltZWxpbmU6OkV2ZW50VHlwZTo6VGltZUVuZDsKIAogICAgIGNhc2UgVGlt
ZWxpbmVSZWNvcmRUeXBlOjpGdW5jdGlvbkNhbGw6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6
OlByb3RvY29sOjpUaW1lbGluZTo6RXZlbnRUeXBlOjpGdW5jdGlvbkNhbGw7CisgICAgICAgIHJl
dHVybiBQcm90b2NvbDo6VGltZWxpbmU6OkV2ZW50VHlwZTo6RnVuY3Rpb25DYWxsOwogICAgIGNh
c2UgVGltZWxpbmVSZWNvcmRUeXBlOjpQcm9iZVNhbXBsZToKLSAgICAgICAgcmV0dXJuIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlRpbWVsaW5lOjpFdmVudFR5cGU6OlByb2JlU2FtcGxlOworICAgICAg
ICByZXR1cm4gUHJvdG9jb2w6OlRpbWVsaW5lOjpFdmVudFR5cGU6OlByb2JlU2FtcGxlOwogICAg
IGNhc2UgVGltZWxpbmVSZWNvcmRUeXBlOjpDb25zb2xlUHJvZmlsZToKLSAgICAgICAgcmV0dXJu
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRpbWVsaW5lOjpFdmVudFR5cGU6OkNvbnNvbGVQcm9maWxl
OworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OlRpbWVsaW5lOjpFdmVudFR5cGU6OkNvbnNvbGVQ
cm9maWxlOwogCiAgICAgY2FzZSBUaW1lbGluZVJlY29yZFR5cGU6OlJlcXVlc3RBbmltYXRpb25G
cmFtZToKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRpbWVsaW5lOjpFdmVu
dFR5cGU6OlJlcXVlc3RBbmltYXRpb25GcmFtZTsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpU
aW1lbGluZTo6RXZlbnRUeXBlOjpSZXF1ZXN0QW5pbWF0aW9uRnJhbWU7CiAgICAgY2FzZSBUaW1l
bGluZVJlY29yZFR5cGU6OkNhbmNlbEFuaW1hdGlvbkZyYW1lOgotICAgICAgICByZXR1cm4gSW5z
cGVjdG9yOjpQcm90b2NvbDo6VGltZWxpbmU6OkV2ZW50VHlwZTo6Q2FuY2VsQW5pbWF0aW9uRnJh
bWU7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6VGltZWxpbmU6OkV2ZW50VHlwZTo6Q2FuY2Vs
QW5pbWF0aW9uRnJhbWU7CiAgICAgY2FzZSBUaW1lbGluZVJlY29yZFR5cGU6OkZpcmVBbmltYXRp
b25GcmFtZToKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRpbWVsaW5lOjpF
dmVudFR5cGU6OkZpcmVBbmltYXRpb25GcmFtZTsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpU
aW1lbGluZTo6RXZlbnRUeXBlOjpGaXJlQW5pbWF0aW9uRnJhbWU7CiAKICAgICBjYXNlIFRpbWVs
aW5lUmVjb3JkVHlwZTo6T2JzZXJ2ZXJDYWxsYmFjazoKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlRpbWVsaW5lOjpFdmVudFR5cGU6Ok9ic2VydmVyQ2FsbGJhY2s7CisgICAg
ICAgIHJldHVybiBQcm90b2NvbDo6VGltZWxpbmU6OkV2ZW50VHlwZTo6T2JzZXJ2ZXJDYWxsYmFj
azsKICAgICB9CiAKLSAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6VGltZWxpbmU6OkV2
ZW50VHlwZTo6VGltZVN0YW1wOworICAgIHJldHVybiBQcm90b2NvbDo6VGltZWxpbmU6OkV2ZW50
VHlwZTo6VGltZVN0YW1wOwogfQogCi12b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OmFkZFJl
Y29yZFRvVGltZWxpbmUoUmVmUHRyPEpTT046Ok9iamVjdD4mJiByZWNvcmQsIFRpbWVsaW5lUmVj
b3JkVHlwZSB0eXBlKQordm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjphZGRSZWNvcmRUb1Rp
bWVsaW5lKFJlZjxKU09OOjpPYmplY3Q+JiYgcmVjb3JkLCBUaW1lbGluZVJlY29yZFR5cGUgdHlw
ZSkKIHsKLSAgICBBU1NFUlRfQVJHKHJlY29yZCwgcmVjb3JkKTsKLSAgICByZWNvcmQtPnNldFN0
cmluZygidHlwZSIsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Okluc3BlY3RvckhlbHBlcnM6OmdldEVu
dW1Db25zdGFudFZhbHVlKHRvUHJvdG9jb2wodHlwZSkpKTsKKyAgICByZWNvcmQtPnNldFN0cmlu
ZyhQcm90b2NvbDo6VGltZWxpbmU6OlRpbWVsaW5lRXZlbnQ6OnR5cGVLZXksIFByb3RvY29sOjpI
ZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZSh0b1Byb3RvY29sKHR5cGUpKSk7CiAKICAgICBp
ZiAobV9yZWNvcmRTdGFjay5pc0VtcHR5KCkpIHsKLSAgICAgICAgYXV0byByZWNvcmRPYmplY3Qg
PSBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRpbWVsaW5lOjpUaW1lbGluZUV2
ZW50Pjo6cnVudGltZUNhc3QoV1RGTW92ZShyZWNvcmQpKTsKKyAgICAgICAgLy8gRklYTUU6IHJ1
bnRpbWVDYXN0IGlzIGEgaGFjay4gV2UgZG8gaXQgYmVjYXVzZSB3ZSBjYW4ndCBidWlsZCBUaW1l
bGluZUV2ZW50IGRpcmVjdGx5IG5vdy4KKyAgICAgICAgYXV0byByZWNvcmRPYmplY3QgPSBQcm90
b2NvbDo6QmluZGluZ1RyYWl0czxQcm90b2NvbDo6VGltZWxpbmU6OlRpbWVsaW5lRXZlbnQ+Ojpy
dW50aW1lQ2FzdChXVEZNb3ZlKHJlY29yZCkpOwogICAgICAgICBzZW5kRXZlbnQoV1RGTW92ZShy
ZWNvcmRPYmplY3QpKTsKICAgICB9IGVsc2UgewogICAgICAgICBjb25zdCBUaW1lbGluZVJlY29y
ZEVudHJ5JiBwYXJlbnQgPSBtX3JlY29yZFN0YWNrLmxhc3QoKTsKQEAgLTc4MSw4ICs3NjksOSBA
QCB2b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OnNldEZyYW1lSWRlbnRpZmllcihKU09OOjpP
YmplY3QqIHJlY29yZCwgRnJhbWUqIGZyYQogCiB2b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6
OmRpZENvbXBsZXRlUmVjb3JkRW50cnkoY29uc3QgVGltZWxpbmVSZWNvcmRFbnRyeSYgZW50cnkp
CiB7Ci0gICAgZW50cnkucmVjb3JkLT5zZXRPYmplY3QoImRhdGEiX3MsIGVudHJ5LmRhdGEpOwot
ICAgIGVudHJ5LnJlY29yZC0+c2V0QXJyYXkoImNoaWxkcmVuIl9zLCBlbnRyeS5jaGlsZHJlbik7
CisgICAgZW50cnkucmVjb3JkLT5zZXRPYmplY3QoUHJvdG9jb2w6OlRpbWVsaW5lOjpUaW1lbGlu
ZUV2ZW50OjpkYXRhS2V5LCBlbnRyeS5kYXRhLmNvcHlSZWYoKSk7CisgICAgaWYgKGVudHJ5LmNo
aWxkcmVuKQorICAgICAgICBlbnRyeS5yZWNvcmQtPnNldEFycmF5KFByb3RvY29sOjpUaW1lbGlu
ZTo6VGltZWxpbmVFdmVudDo6Y2hpbGRyZW5LZXksICplbnRyeS5jaGlsZHJlbik7CiAgICAgZW50
cnkucmVjb3JkLT5zZXREb3VibGUoImVuZFRpbWUiX3MsIHRpbWVzdGFtcCgpKTsKICAgICBhZGRS
ZWNvcmRUb1RpbWVsaW5lKGVudHJ5LnJlY29yZC5jb3B5UmVmKCksIGVudHJ5LnR5cGUpOwogfQpA
QCAtODA0LDI5ICs3OTMsMjkgQEAgdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpkaWRDb21w
bGV0ZUN1cnJlbnRSZWNvcmQoVGltZWxpbmVSZWNvcmRUeXBlIHR5cGUpCiAgICAgfQogfQogCi12
b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OmFwcGVuZFJlY29yZChSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiYmIGRhdGEsIFRpbWVsaW5lUmVjb3JkVHlwZSB0eXBlLCBib29sIGNhcHR1cmVDYWxsU3Rh
Y2ssIEZyYW1lKiBmcmFtZSkKK3ZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6YXBwZW5kUmVj
b3JkKFJlZjxKU09OOjpPYmplY3Q+JiYgZGF0YSwgVGltZWxpbmVSZWNvcmRUeXBlIHR5cGUsIGJv
b2wgY2FwdHVyZUNhbGxTdGFjaywgRnJhbWUqIGZyYW1lKQogewogICAgIFJlZjxKU09OOjpPYmpl
Y3Q+IHJlY29yZCA9IFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlR2VuZXJpY1JlY29yZCh0
aW1lc3RhbXAoKSwgY2FwdHVyZUNhbGxTdGFjayA/IG1fbWF4Q2FsbFN0YWNrRGVwdGggOiAwKTsK
LSAgICByZWNvcmQtPnNldE9iamVjdCgiZGF0YSIsIFdURk1vdmUoZGF0YSkpOworICAgIHJlY29y
ZC0+c2V0T2JqZWN0KFByb3RvY29sOjpUaW1lbGluZTo6VGltZWxpbmVFdmVudDo6ZGF0YUtleSwg
V1RGTW92ZShkYXRhKSk7CiAgICAgc2V0RnJhbWVJZGVudGlmaWVyKCZyZWNvcmQuZ2V0KCksIGZy
YW1lKTsKICAgICBhZGRSZWNvcmRUb1RpbWVsaW5lKFdURk1vdmUocmVjb3JkKSwgdHlwZSk7CiB9
CiAKLXZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6c2VuZEV2ZW50KFJlZlB0cjxKU09OOjpP
YmplY3Q+JiYgZXZlbnQpCit2b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OnNlbmRFdmVudChS
ZWY8SlNPTjo6T2JqZWN0PiYmIGV2ZW50KQogewogICAgIC8vIEZJWE1FOiBydW50aW1lQ2FzdCBp
cyBhIGhhY2suIFdlIGRvIGl0IGJlY2F1c2Ugd2UgY2FuJ3QgYnVpbGQgVGltZWxpbmVFdmVudCBk
aXJlY3RseSBub3cuCi0gICAgYXV0byByZWNvcmRDaGVja2VkID0gQmluZGluZ1RyYWl0czxJbnNw
ZWN0b3I6OlByb3RvY29sOjpUaW1lbGluZTo6VGltZWxpbmVFdmVudD46OnJ1bnRpbWVDYXN0KFdU
Rk1vdmUoZXZlbnQpKTsKKyAgICBhdXRvIHJlY29yZENoZWNrZWQgPSBQcm90b2NvbDo6QmluZGlu
Z1RyYWl0czxQcm90b2NvbDo6VGltZWxpbmU6OlRpbWVsaW5lRXZlbnQ+OjpydW50aW1lQ2FzdChX
VEZNb3ZlKGV2ZW50KSk7CiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPmV2ZW50UmVjb3JkZWQo
V1RGTW92ZShyZWNvcmRDaGVja2VkKSk7CiB9CiAKLUluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OlRp
bWVsaW5lUmVjb3JkRW50cnkgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6Y3JlYXRlUmVjb3JkRW50
cnkoUmVmUHRyPEpTT046Ok9iamVjdD4mJiBkYXRhLCBUaW1lbGluZVJlY29yZFR5cGUgdHlwZSwg
Ym9vbCBjYXB0dXJlQ2FsbFN0YWNrLCBGcmFtZSogZnJhbWUpCitJbnNwZWN0b3JUaW1lbGluZUFn
ZW50OjpUaW1lbGluZVJlY29yZEVudHJ5IEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OmNyZWF0ZVJl
Y29yZEVudHJ5KFJlZjxKU09OOjpPYmplY3Q+JiYgZGF0YSwgVGltZWxpbmVSZWNvcmRUeXBlIHR5
cGUsIGJvb2wgY2FwdHVyZUNhbGxTdGFjaywgRnJhbWUqIGZyYW1lKQogewogICAgIFJlZjxKU09O
OjpPYmplY3Q+IHJlY29yZCA9IFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlR2VuZXJpY1Jl
Y29yZCh0aW1lc3RhbXAoKSwgY2FwdHVyZUNhbGxTdGFjayA/IG1fbWF4Q2FsbFN0YWNrRGVwdGgg
OiAwKTsKICAgICBzZXRGcmFtZUlkZW50aWZpZXIoJnJlY29yZC5nZXQoKSwgZnJhbWUpOwogICAg
IHJldHVybiBUaW1lbGluZVJlY29yZEVudHJ5KFdURk1vdmUocmVjb3JkKSwgV1RGTW92ZShkYXRh
KSwgSlNPTjo6QXJyYXk6OmNyZWF0ZSgpLCB0eXBlKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JUaW1l
bGluZUFnZW50OjpwdXNoQ3VycmVudFJlY29yZChSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIGRhdGEs
IFRpbWVsaW5lUmVjb3JkVHlwZSB0eXBlLCBib29sIGNhcHR1cmVDYWxsU3RhY2ssIEZyYW1lKiBm
cmFtZSkKK3ZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6cHVzaEN1cnJlbnRSZWNvcmQoUmVm
PEpTT046Ok9iamVjdD4mJiBkYXRhLCBUaW1lbGluZVJlY29yZFR5cGUgdHlwZSwgYm9vbCBjYXB0
dXJlQ2FsbFN0YWNrLCBGcmFtZSogZnJhbWUpCiB7CiAgICAgcHVzaEN1cnJlbnRSZWNvcmQoY3Jl
YXRlUmVjb3JkRW50cnkoV1RGTW92ZShkYXRhKSwgdHlwZSwgY2FwdHVyZUNhbGxTdGFjaywgZnJh
bWUpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5z
cGVjdG9yVGltZWxpbmVBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9J
bnNwZWN0b3JUaW1lbGluZUFnZW50LmgKaW5kZXggYWU3NTc5YTE1ZjA1NzJiNTJmOWFhZTFhZmJl
ZTA5MmZiODI0YzgxOS4uZmU3NWU0MGI0MzRmODVkOTczYWVkYmI0Mjk3YTk0YmFlMThmYmIyYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JUaW1l
bGluZUFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0
b3JUaW1lbGluZUFnZW50LmgKQEAgLTUwLDggKzUwLDYgQEAgY2xhc3MgRnJhbWU7CiBjbGFzcyBS
ZW5kZXJPYmplY3Q7CiBjbGFzcyBSdW5Mb29wT2JzZXJ2ZXI7CiAKLXR5cGVkZWYgU3RyaW5nIEVy
cm9yU3RyaW5nOwotCiBlbnVtIGNsYXNzIFRpbWVsaW5lUmVjb3JkVHlwZSB7CiAgICAgRXZlbnRE
aXNwYXRjaCwKICAgICBTY2hlZHVsZVN0eWxlUmVjYWxjdWxhdGlvbiwKQEAgLTg4LDIyICs4Niwy
MiBAQCBjbGFzcyBJbnNwZWN0b3JUaW1lbGluZUFnZW50IGZpbmFsIDogcHVibGljIEluc3BlY3Rv
ckFnZW50QmFzZSAsIHB1YmxpYyBJbnNwZWN0bwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OwogcHVibGljOgogICAgIEluc3BlY3RvclRpbWVsaW5lQWdlbnQoUGFnZUFnZW50Q29udGV4dCYp
OwotICAgIH5JbnNwZWN0b3JUaW1lbGluZUFnZW50KCkgb3ZlcnJpZGU7CisgICAgfkluc3BlY3Rv
clRpbWVsaW5lQWdlbnQoKTsKIAogICAgIC8vIEluc3BlY3RvckFnZW50QmFzZQotICAgIHZvaWQg
ZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRSb3V0ZXIqLCBJ
bnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyKikgb3ZlcnJpZGU7Ci0gICAgdm9pZCB3aWxsRGVz
dHJveUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24pIG92ZXJy
aWRlOworICAgIHZvaWQgZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJv
bnRlbmRSb3V0ZXIqLCBJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyKik7CisgICAgdm9pZCB3
aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24p
OwogCiAgICAgLy8gVGltZWxpbmVCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIKLSAgICB2b2lkIGVu
YWJsZShFcnJvclN0cmluZyYpIG92ZXJyaWRlOwotICAgIHZvaWQgZGlzYWJsZShFcnJvclN0cmlu
ZyYpIG92ZXJyaWRlOwotICAgIHZvaWQgc3RhcnQoRXJyb3JTdHJpbmcmLCBjb25zdCBpbnQqIG1h
eENhbGxTdGFja0RlcHRoID0gbnVsbHB0cikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzdG9wKEVycm9y
U3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRBdXRvQ2FwdHVyZUVuYWJsZWQoRXJyb3JT
dHJpbmcmLCBib29sKSBvdmVycmlkZTsKLSAgICB2b2lkIHNldEluc3RydW1lbnRzKEVycm9yU3Ry
aW5nJiwgY29uc3QgSlNPTjo6QXJyYXkmKSBvdmVycmlkZTsKKyAgICBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGVuYWJsZSgpOworICAgIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZGlzYWJsZSgpOworICAgIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc3RhcnQoT3B0aW9uYWw8aW50PiYmIG1heENhbGxTdGFj
a0RlcHRoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHN0
b3AoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHNldEF1
dG9DYXB0dXJlRW5hYmxlZChib29sKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0
cmluZ09yPHZvaWQ+IHNldEluc3RydW1lbnRzKFJlZjxKU09OOjpBcnJheT4mJik7CiAKICAgICAv
LyBKU0M6OkRlYnVnZ2VyOjpPYnNlcnZlcgotICAgIHZvaWQgYnJlYWtwb2ludEFjdGlvblByb2Jl
KEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OkJyZWFrcG9pbnRBY3Rpb25JRCwgdW5zaWduZWQg
YmF0Y2hJZCwgdW5zaWduZWQgc2FtcGxlSWQsIEpTQzo6SlNWYWx1ZSByZXN1bHQpIGZpbmFsOwor
ICAgIHZvaWQgYnJlYWtwb2ludEFjdGlvblByb2JlKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6
OkJyZWFrcG9pbnRBY3Rpb25JRCwgdW5zaWduZWQgYmF0Y2hJZCwgdW5zaWduZWQgc2FtcGxlSWQs
IEpTQzo6SlNWYWx1ZSByZXN1bHQpOwogCiAgICAgLy8gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
CiAgICAgdm9pZCBkaWRJbnN0YWxsVGltZXIoaW50IHRpbWVySWQsIFNlY29uZHMgdGltZW91dCwg
Ym9vbCBzaW5nbGVTaG90LCBGcmFtZSopOwpAQCAtMTYwLDkgKzE1OCw3IEBAIHByaXZhdGU6CiAg
ICAgZnJpZW5kIGNsYXNzIFRpbWVsaW5lUmVjb3JkU3RhY2s7CiAKICAgICBzdHJ1Y3QgVGltZWxp
bmVSZWNvcmRFbnRyeSB7Ci0gICAgICAgIFRpbWVsaW5lUmVjb3JkRW50cnkoKQotICAgICAgICAg
ICAgOiB0eXBlKFRpbWVsaW5lUmVjb3JkVHlwZTo6RXZlbnREaXNwYXRjaCkgeyB9Ci0gICAgICAg
IFRpbWVsaW5lUmVjb3JkRW50cnkoUmVmUHRyPEpTT046Ok9iamVjdD4mJiByZWNvcmQsIFJlZlB0
cjxKU09OOjpPYmplY3Q+JiYgZGF0YSwgUmVmUHRyPEpTT046OkFycmF5PiYmIGNoaWxkcmVuLCBU
aW1lbGluZVJlY29yZFR5cGUgdHlwZSkKKyAgICAgICAgVGltZWxpbmVSZWNvcmRFbnRyeShSZWY8
SlNPTjo6T2JqZWN0PiYmIHJlY29yZCwgUmVmPEpTT046Ok9iamVjdD4mJiBkYXRhLCBSZWZQdHI8
SlNPTjo6QXJyYXk+JiYgY2hpbGRyZW4sIFRpbWVsaW5lUmVjb3JkVHlwZSB0eXBlKQogICAgICAg
ICAgICAgOiByZWNvcmQoV1RGTW92ZShyZWNvcmQpKQogICAgICAgICAgICAgLCBkYXRhKFdURk1v
dmUoZGF0YSkpCiAgICAgICAgICAgICAsIGNoaWxkcmVuKFdURk1vdmUoY2hpbGRyZW4pKQpAQCAt
MTcwLDI5ICsxNjYsMjkgQEAgcHJpdmF0ZToKICAgICAgICAgewogICAgICAgICB9CiAKLSAgICAg
ICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcmVjb3JkOwotICAgICAgICBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiBkYXRhOworICAgICAgICBSZWY8SlNPTjo6T2JqZWN0PiByZWNvcmQ7CisgICAgICAgIFJl
ZjxKU09OOjpPYmplY3Q+IGRhdGE7CiAgICAgICAgIFJlZlB0cjxKU09OOjpBcnJheT4gY2hpbGRy
ZW47CiAgICAgICAgIFRpbWVsaW5lUmVjb3JkVHlwZSB0eXBlOwogICAgIH07CiAKLSAgICB2b2lk
IGludGVybmFsU3RhcnQoY29uc3QgaW50KiBtYXhDYWxsU3RhY2tEZXB0aCA9IG51bGxwdHIpOwor
ICAgIHZvaWQgaW50ZXJuYWxTdGFydChPcHRpb25hbDxpbnQ+JiYgbWF4Q2FsbFN0YWNrRGVwdGgp
OwogICAgIHZvaWQgaW50ZXJuYWxTdG9wKCk7CiAgICAgZG91YmxlIHRpbWVzdGFtcCgpOwogCi0g
ICAgdm9pZCBzZW5kRXZlbnQoUmVmUHRyPEpTT046Ok9iamVjdD4mJik7Ci0gICAgdm9pZCBhcHBl
bmRSZWNvcmQoUmVmUHRyPEpTT046Ok9iamVjdD4mJiBkYXRhLCBUaW1lbGluZVJlY29yZFR5cGUs
IGJvb2wgY2FwdHVyZUNhbGxTdGFjaywgRnJhbWUqKTsKLSAgICB2b2lkIHB1c2hDdXJyZW50UmVj
b3JkKFJlZlB0cjxKU09OOjpPYmplY3Q+JiYsIFRpbWVsaW5lUmVjb3JkVHlwZSwgYm9vbCBjYXB0
dXJlQ2FsbFN0YWNrLCBGcmFtZSopOworICAgIHZvaWQgc2VuZEV2ZW50KFJlZjxKU09OOjpPYmpl
Y3Q+JiYpOworICAgIHZvaWQgYXBwZW5kUmVjb3JkKFJlZjxKU09OOjpPYmplY3Q+JiYgZGF0YSwg
VGltZWxpbmVSZWNvcmRUeXBlLCBib29sIGNhcHR1cmVDYWxsU3RhY2ssIEZyYW1lKik7CisgICAg
dm9pZCBwdXNoQ3VycmVudFJlY29yZChSZWY8SlNPTjo6T2JqZWN0PiYmLCBUaW1lbGluZVJlY29y
ZFR5cGUsIGJvb2wgY2FwdHVyZUNhbGxTdGFjaywgRnJhbWUqKTsKICAgICB2b2lkIHB1c2hDdXJy
ZW50UmVjb3JkKGNvbnN0IFRpbWVsaW5lUmVjb3JkRW50cnkmIHJlY29yZCkgeyBtX3JlY29yZFN0
YWNrLmFwcGVuZChyZWNvcmQpOyB9CiAKLSAgICBUaW1lbGluZVJlY29yZEVudHJ5IGNyZWF0ZVJl
Y29yZEVudHJ5KFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgZGF0YSwgVGltZWxpbmVSZWNvcmRUeXBl
LCBib29sIGNhcHR1cmVDYWxsU3RhY2ssIEZyYW1lKik7CisgICAgVGltZWxpbmVSZWNvcmRFbnRy
eSBjcmVhdGVSZWNvcmRFbnRyeShSZWY8SlNPTjo6T2JqZWN0PiYmIGRhdGEsIFRpbWVsaW5lUmVj
b3JkVHlwZSwgYm9vbCBjYXB0dXJlQ2FsbFN0YWNrLCBGcmFtZSopOwogCiAgICAgdm9pZCBzZXRG
cmFtZUlkZW50aWZpZXIoSlNPTjo6T2JqZWN0KiByZWNvcmQsIEZyYW1lKik7CiAKICAgICB2b2lk
IGRpZENvbXBsZXRlUmVjb3JkRW50cnkoY29uc3QgVGltZWxpbmVSZWNvcmRFbnRyeSYpOwogICAg
IHZvaWQgZGlkQ29tcGxldGVDdXJyZW50UmVjb3JkKFRpbWVsaW5lUmVjb3JkVHlwZSk7CiAKLSAg
ICB2b2lkIGFkZFJlY29yZFRvVGltZWxpbmUoUmVmUHRyPEpTT046Ok9iamVjdD4mJiwgVGltZWxp
bmVSZWNvcmRUeXBlKTsKKyAgICB2b2lkIGFkZFJlY29yZFRvVGltZWxpbmUoUmVmPEpTT046Ok9i
amVjdD4mJiwgVGltZWxpbmVSZWNvcmRUeXBlKTsKIAogICAgIHZvaWQgbG9jYWxUb1BhZ2VRdWFk
KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IExheW91dFJlY3QmLCBGbG9hdFF1YWQqKTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JXb3Jr
ZXJBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rvcldv
cmtlckFnZW50LmNwcAppbmRleCA5MDljNDY2Zjg3ZTliZmE4YzRjMTcyOGM0NmFkNmU3ZTU5MDdi
NDZlLi4zM2NhYTBhYTIwNzlhZDQwODFjYzI5NjA1YTUzNTM3YzI0ZDY2YmVmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvcldvcmtlckFnZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvcldvcmtlckFn
ZW50LmNwcApAQCAtNTMsNTUgKzUzLDU2IEBAIHZvaWQgSW5zcGVjdG9yV29ya2VyQWdlbnQ6Ondp
bGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKERpc2Nvbm5lY3RSZWFzb24pCiB7CiAgICAgbV9p
bnN0cnVtZW50aW5nQWdlbnRzLnNldFBlcnNpc3RlbnRXb3JrZXJBZ2VudChudWxscHRyKTsKIAot
ICAgIEVycm9yU3RyaW5nIGlnbm9yZWQ7Ci0gICAgZGlzYWJsZShpZ25vcmVkKTsKKyAgICBkaXNh
YmxlKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yV29ya2VyQWdlbnQ6OmVuYWJsZShFcnJvclN0cmlu
ZyYpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JXb3JrZXJBZ2VudDo6
ZW5hYmxlKCkKIHsKICAgICBpZiAobV9lbmFibGVkKQotICAgICAgICByZXR1cm47CisgICAgICAg
IHJldHVybiB7IH07CiAKICAgICBtX2VuYWJsZWQgPSB0cnVlOwogCiAgICAgY29ubmVjdFRvQWxs
V29ya2VySW5zcGVjdG9yUHJveGllc0ZvclBhZ2UoKTsKKworICAgIHJldHVybiB7IH07CiB9CiAK
LXZvaWQgSW5zcGVjdG9yV29ya2VyQWdlbnQ6OmRpc2FibGUoRXJyb3JTdHJpbmcmKQorUHJvdG9j
b2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yV29ya2VyQWdlbnQ6OmRpc2FibGUoKQog
ewogICAgIGlmICghbV9lbmFibGVkKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB7
IH07CiAKICAgICBtX2VuYWJsZWQgPSBmYWxzZTsKIAogICAgIGRpc2Nvbm5lY3RGcm9tQWxsV29y
a2VySW5zcGVjdG9yUHJveGllcygpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNw
ZWN0b3JXb3JrZXJBZ2VudDo6aW5pdGlhbGl6ZWQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBj
b25zdCBTdHJpbmcmIHdvcmtlcklkKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5z
cGVjdG9yV29ya2VyQWdlbnQ6OmluaXRpYWxpemVkKGNvbnN0IFN0cmluZyYgd29ya2VySWQpCiB7
CiAgICAgV29ya2VySW5zcGVjdG9yUHJveHkqIHByb3h5ID0gbV9jb25uZWN0ZWRQcm94aWVzLmdl
dCh3b3JrZXJJZCk7Ci0gICAgaWYgKCFwcm94eSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJN
aXNzaW5nIHdvcmtlciBmb3IgZ2l2ZW4gd29ya2VySWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9CisgICAgaWYgKCFwcm94eSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJNaXNz
aW5nIHdvcmtlciBmb3IgZ2l2ZW4gd29ya2VySWQiX3MpOwogCiAgICAgcHJveHktPnJlc3VtZVdv
cmtlcklmUGF1c2VkKCk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3Rvcldv
cmtlckFnZW50OjpzZW5kTWVzc2FnZVRvV29ya2VyKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywg
Y29uc3QgU3RyaW5nJiB3b3JrZXJJZCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQorUHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yV29ya2VyQWdlbnQ6OnNlbmRNZXNzYWdlVG9X
b3JrZXIoY29uc3QgU3RyaW5nJiB3b3JrZXJJZCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQogewot
ICAgIGlmICghbV9lbmFibGVkKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIldvcmtlciBkb21h
aW4gbXVzdCBiZSBlbmFibGVkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICgh
bV9lbmFibGVkKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIldvcmtlciBkb21haW4g
bXVzdCBiZSBlbmFibGVkIl9zKTsKIAogICAgIFdvcmtlckluc3BlY3RvclByb3h5KiBwcm94eSA9
IG1fY29ubmVjdGVkUHJveGllcy5nZXQod29ya2VySWQpOwotICAgIGlmICghcHJveHkpIHsKLSAg
ICAgICAgZXJyb3JTdHJpbmcgPSAiTWlzc2luZyB3b3JrZXIgZm9yIGdpdmVuIHdvcmtlcklkIl9z
OwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghcHJveHkpCisgICAgICAgIHJldHVy
biBtYWtlVW5leHBlY3RlZCgiTWlzc2luZyB3b3JrZXIgZm9yIGdpdmVuIHdvcmtlcklkIl9zKTsK
IAogICAgIHByb3h5LT5zZW5kTWVzc2FnZVRvV29ya2VySW5zcGVjdG9yQ29udHJvbGxlcihtZXNz
YWdlKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKIHZvaWQgSW5zcGVjdG9yV29ya2VyQWdlbnQ6
OnNlbmRNZXNzYWdlRnJvbVdvcmtlclRvRnJvbnRlbmQoV29ya2VySW5zcGVjdG9yUHJveHkmIHBy
b3h5LCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvcldvcmtlckFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvcldvcmtlckFnZW50LmgKaW5kZXggMTdkMWJlYWU5MDEw
ZjMyMDAxYWM2NGRkOWQ4OTJhOTNmMTBhN2Q1Ni4uNjM2YmM4MWRkNWE1MGFlZTA1M2MyZTA0ZTY4
Njk5ZDNmYTZiNjRlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50
cy9JbnNwZWN0b3JXb3JrZXJBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9h
Z2VudHMvSW5zcGVjdG9yV29ya2VyQWdlbnQuaApAQCAtMzUsMjcgKzM1LDI1IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogY2xhc3MgUGFnZTsKIAotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7
Ci0KIGNsYXNzIEluc3BlY3RvcldvcmtlckFnZW50IGZpbmFsIDogcHVibGljIEluc3BlY3RvckFn
ZW50QmFzZSwgcHVibGljIEluc3BlY3Rvcjo6V29ya2VyQmFja2VuZERpc3BhdGNoZXJIYW5kbGVy
LCBwdWJsaWMgV29ya2VySW5zcGVjdG9yUHJveHk6OlBhZ2VDaGFubmVsIHsKICAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShJbnNwZWN0b3JXb3JrZXJBZ2VudCk7CiAgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgSW5zcGVjdG9yV29ya2VyQWdlbnQoUGFnZUFnZW50Q29u
dGV4dCYpOwotICAgIH5JbnNwZWN0b3JXb3JrZXJBZ2VudCgpIG92ZXJyaWRlOworICAgIH5JbnNw
ZWN0b3JXb3JrZXJBZ2VudCgpOwogCiAgICAgLy8gSW5zcGVjdG9yQWdlbnRCYXNlCi0gICAgdm9p
ZCBkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9udGVuZFJvdXRlcios
IEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXIqKSBvdmVycmlkZTsKLSAgICB2b2lkIHdpbGxE
ZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlzY29ubmVjdFJlYXNvbikgb3Zl
cnJpZGU7CisgICAgdm9pZCBkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpG
cm9udGVuZFJvdXRlciosIEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXIqKTsKKyAgICB2b2lk
IHdpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlzY29ubmVjdFJlYXNv
bik7CiAKICAgICAvLyBXb3JrZXJCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIKLSAgICB2b2lkIGVu
YWJsZShFcnJvclN0cmluZyYpIG92ZXJyaWRlOwotICAgIHZvaWQgZGlzYWJsZShFcnJvclN0cmlu
ZyYpIG92ZXJyaWRlOwotICAgIHZvaWQgaW5pdGlhbGl6ZWQoRXJyb3JTdHJpbmcmLCBjb25zdCBT
dHJpbmcmIHdvcmtlcklkKSBvdmVycmlkZTsKLSAgICB2b2lkIHNlbmRNZXNzYWdlVG9Xb3JrZXIo
RXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHdvcmtlcklkLCBjb25zdCBTdHJpbmcmIG1lc3Nh
Z2UpIG92ZXJyaWRlOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9p
ZD4gZW5hYmxlKCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lk
PiBkaXNhYmxlKCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lk
PiBpbml0aWFsaXplZChjb25zdCBTdHJpbmcmIHdvcmtlcklkKTsKKyAgICBJbnNwZWN0b3I6OlBy
b3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHNlbmRNZXNzYWdlVG9Xb3JrZXIoY29uc3QgU3Ry
aW5nJiB3b3JrZXJJZCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKIAogICAgIC8vIFdvcmtlcklu
c3BlY3RvclByb3h5OjpQYWdlQ2hhbm5lbAotICAgIHZvaWQgc2VuZE1lc3NhZ2VGcm9tV29ya2Vy
VG9Gcm9udGVuZChXb3JrZXJJbnNwZWN0b3JQcm94eSYsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkg
b3ZlcnJpZGU7CisgICAgdm9pZCBzZW5kTWVzc2FnZUZyb21Xb3JrZXJUb0Zyb250ZW5kKFdvcmtl
ckluc3BlY3RvclByb3h5JiwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKIAogICAgIC8vIEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbgogICAgIGJvb2wgc2hvdWxkV2FpdEZvckRlYnVnZ2VyT25TdGFy
dCgpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9X
ZWJDb25zb2xlQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvV2ViQ29u
c29sZUFnZW50LmgKaW5kZXggZjdkODI3ODA3MGZlNDcwMjk5ZjJkZDZiYWI2NjQ2MmQ1ODU4ODkw
NS4uMGI4ZjIwZWFjMzQzYjY2ODE3YWM5ZjBmMGM2YzhjYjIwYzliYWM3YiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9XZWJDb25zb2xlQWdlbnQuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL1dlYkNvbnNvbGVBZ2VudC5oCkBAIC0zMyw3
ICszMyw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIERPTVdpbmRvdzsKIGNsYXNzIFJl
c291cmNlRXJyb3I7CiBjbGFzcyBSZXNvdXJjZVJlc3BvbnNlOwotdHlwZWRlZiBTdHJpbmcgRXJy
b3JTdHJpbmc7CiAKIGNsYXNzIFdlYkNvbnNvbGVBZ2VudCA6IHB1YmxpYyBJbnNwZWN0b3I6Oklu
c3BlY3RvckNvbnNvbGVBZ2VudCB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoV2ViQ29uc29s
ZUFnZW50KTsKQEAgLTQ2LDggKzQ1LDYgQEAgcHVibGljOgogICAgIHZvaWQgZnJhbWVXaW5kb3dE
aXNjYXJkZWQoRE9NV2luZG93Kik7CiAgICAgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UodW5zaWdu
ZWQgbG9uZyByZXF1ZXN0SWRlbnRpZmllciwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOwogICAg
IHZvaWQgZGlkRmFpbExvYWRpbmcodW5zaWduZWQgbG9uZyByZXF1ZXN0SWRlbnRpZmllciwgY29u
c3QgUmVzb3VyY2VFcnJvciYpOwotCi1wcm90ZWN0ZWQ6CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL1dlYkRl
YnVnZ2VyQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9XZWJEZWJ1
Z2dlckFnZW50LmNwcAppbmRleCBiOTNhODFmYmY0ZjUwNjQ2NmFkYjNlMTNiYmU4OGNjNTM5MjM1
YjdlLi4xYzYxMzU3YWZkY2UzNTBhZTIzYWJjMjA3ZjIyNzA0Yzk0ZWJmNGYzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL1dlYkRlYnVnZ2VyQWdlbnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvV2ViRGVidWdnZXJBZ2VudC5jcHAK
QEAgLTQ5LDE4ICs0OSwxOCBAQCBib29sIFdlYkRlYnVnZ2VyQWdlbnQ6OmVuYWJsZWQoKSBjb25z
dAogICAgIHJldHVybiBtX2luc3RydW1lbnRpbmdBZ2VudHMuZW5hYmxlZFdlYkRlYnVnZ2VyQWdl
bnQoKSA9PSB0aGlzICYmIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmVuYWJsZWQoKTsKIH0KIAot
dm9pZCBXZWJEZWJ1Z2dlckFnZW50OjplbmFibGUoKQordm9pZCBXZWJEZWJ1Z2dlckFnZW50Ojpp
bnRlcm5hbEVuYWJsZSgpCiB7CiAgICAgbV9pbnN0cnVtZW50aW5nQWdlbnRzLnNldEVuYWJsZWRX
ZWJEZWJ1Z2dlckFnZW50KHRoaXMpOwogCi0gICAgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZW5h
YmxlKCk7CisgICAgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6aW50ZXJuYWxFbmFibGUoKTsKIH0K
IAotdm9pZCBXZWJEZWJ1Z2dlckFnZW50OjpkaXNhYmxlKGJvb2wgaXNCZWluZ0Rlc3Ryb3llZCkK
K3ZvaWQgV2ViRGVidWdnZXJBZ2VudDo6aW50ZXJuYWxEaXNhYmxlKGJvb2wgaXNCZWluZ0Rlc3Ry
b3llZCkKIHsKICAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMuc2V0RW5hYmxlZFdlYkRlYnVnZ2Vy
QWdlbnQobnVsbHB0cik7CiAKLSAgICBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkaXNhYmxlKGlz
QmVpbmdEZXN0cm95ZWQpOworICAgIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmludGVybmFsRGlz
YWJsZShpc0JlaW5nRGVzdHJveWVkKTsKIH0KIAogdm9pZCBXZWJEZWJ1Z2dlckFnZW50OjpkaWRB
ZGRFdmVudExpc3RlbmVyKEV2ZW50VGFyZ2V0JiB0YXJnZXQsIGNvbnN0IEF0b21TdHJpbmcmIGV2
ZW50VHlwZSwgRXZlbnRMaXN0ZW5lciYgbGlzdGVuZXIsIGJvb2wgY2FwdHVyZSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvV2ViRGVidWdnZXJBZ2VudC5oIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9XZWJEZWJ1Z2dlckFnZW50LmgKaW5kZXgg
MTBiOTY0ODg4MWFhMDE1NjRmY2JlNzJlNzRmZmJhYzc5Njg0NTc2Mi4uYTkyMzcxZGE1ZDIzYWEw
NWVkYjY4OTg3NTllYTQxMWVlNzVhNjk4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2FnZW50cy9XZWJEZWJ1Z2dlckFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2FnZW50cy9XZWJEZWJ1Z2dlckFnZW50LmgKQEAgLTM1LDcgKzM1LDYgQEAgY2xhc3Mg
RXZlbnRUYXJnZXQ7CiBjbGFzcyBJbnN0cnVtZW50aW5nQWdlbnRzOwogY2xhc3MgUmVnaXN0ZXJl
ZEV2ZW50TGlzdGVuZXI7CiBjbGFzcyBUaW1lckJhc2U7Ci10eXBlZGVmIFN0cmluZyBFcnJvclN0
cmluZzsKIAogY2xhc3MgV2ViRGVidWdnZXJBZ2VudCA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3Bl
Y3RvckRlYnVnZ2VyQWdlbnQgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFdlYkRlYnVnZ2Vy
QWdlbnQpOwpAQCAtNTYsOCArNTUsOCBAQCBwdWJsaWM6CiAKIHByb3RlY3RlZDoKICAgICBXZWJE
ZWJ1Z2dlckFnZW50KFdlYkFnZW50Q29udGV4dCYpOwotICAgIHZvaWQgZW5hYmxlKCkgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCBkaXNhYmxlKGJvb2wgaXNCZWluZ0Rlc3Ryb3llZCkgb3ZlcnJpZGU7Cisg
ICAgdm9pZCBpbnRlcm5hbEVuYWJsZSgpIG92ZXJyaWRlOworICAgIHZvaWQgaW50ZXJuYWxEaXNh
YmxlKGJvb2wgaXNCZWluZ0Rlc3Ryb3llZCkgb3ZlcnJpZGU7CiAKICAgICB2b2lkIGRpZENsZWFy
QXN5bmNTdGFja1RyYWNlRGF0YSgpIGZpbmFsOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvYWdlbnRzL1dlYkhlYXBBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvYWdlbnRzL1dlYkhlYXBBZ2VudC5jcHAKaW5kZXggNWFhNzQ1M2QwOTU2MDc2Mjc4ZWIw
MzBmODA4ZGRmMDE0ZGFiZmI4NS4uOTI3NWU4Zjc5ZDAwZmUxYTExODIxZWQ4YTg2OWMwZTE3YjQw
ODAyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9XZWJIZWFw
QWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvV2ViSGVhcEFn
ZW50LmNwcApAQCAtMzUsNyArMzUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1l
c3BhY2UgSW5zcGVjdG9yOwogCiBzdHJ1Y3QgR2FyYmFnZUNvbGxlY3Rpb25EYXRhIHsKLSAgICBJ
bnNwZWN0b3I6OlByb3RvY29sOjpIZWFwOjpHYXJiYWdlQ29sbGVjdGlvbjo6VHlwZSB0eXBlOwor
ICAgIFByb3RvY29sOjpIZWFwOjpHYXJiYWdlQ29sbGVjdGlvbjo6VHlwZSB0eXBlOwogICAgIFNl
Y29uZHMgc3RhcnRUaW1lOwogICAgIFNlY29uZHMgZW5kVGltZTsKIH07CkBAIC0xMDMsMjUgKzEw
MywyNyBAQCBXZWJIZWFwQWdlbnQ6OldlYkhlYXBBZ2VudChXZWJBZ2VudENvbnRleHQmIGNvbnRl
eHQpCiAKIFdlYkhlYXBBZ2VudDo6fldlYkhlYXBBZ2VudCgpID0gZGVmYXVsdDsKIAotdm9pZCBX
ZWJIZWFwQWdlbnQ6OmVuYWJsZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCitQcm90b2NvbDo6
RXJyb3JTdHJpbmdPcjx2b2lkPiBXZWJIZWFwQWdlbnQ6OmVuYWJsZSgpCiB7Ci0gICAgSW5zcGVj
dG9ySGVhcEFnZW50OjplbmFibGUoZXJyb3JTdHJpbmcpOworICAgIGF1dG8gcmVzdWx0ID0gSW5z
cGVjdG9ySGVhcEFnZW50OjplbmFibGUoKTsKIAogICAgIGlmIChhdXRvKiBjb25zb2xlQWdlbnQg
PSBtX2luc3RydW1lbnRpbmdBZ2VudHMud2ViQ29uc29sZUFnZW50KCkpCiAgICAgICAgIGNvbnNv
bGVBZ2VudC0+c2V0SGVhcEFnZW50KHRoaXMpOworCisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAot
dm9pZCBXZWJIZWFwQWdlbnQ6OmRpc2FibGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nKQorUHJv
dG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gV2ViSGVhcEFnZW50OjpkaXNhYmxlKCkKIHsKICAg
ICBtX3NlbmRHYXJiYWdlQ29sbGVjdGlvbkV2ZW50c1Rhc2stPnJlc2V0KCk7CiAKICAgICBpZiAo
YXV0byogY29uc29sZUFnZW50ID0gbV9pbnN0cnVtZW50aW5nQWdlbnRzLndlYkNvbnNvbGVBZ2Vu
dCgpKQogICAgICAgICBjb25zb2xlQWdlbnQtPnNldEhlYXBBZ2VudChudWxscHRyKTsKIAotICAg
IEluc3BlY3RvckhlYXBBZ2VudDo6ZGlzYWJsZShlcnJvclN0cmluZyk7CisgICAgcmV0dXJuIElu
c3BlY3RvckhlYXBBZ2VudDo6ZGlzYWJsZSgpOwogfQogCi12b2lkIFdlYkhlYXBBZ2VudDo6ZGlz
cGF0Y2hHYXJiYWdlQ29sbGVjdGVkRXZlbnQoSW5zcGVjdG9yOjpQcm90b2NvbDo6SGVhcDo6R2Fy
YmFnZUNvbGxlY3Rpb246OlR5cGUgdHlwZSwgU2Vjb25kcyBzdGFydFRpbWUsIFNlY29uZHMgZW5k
VGltZSkKK3ZvaWQgV2ViSGVhcEFnZW50OjpkaXNwYXRjaEdhcmJhZ2VDb2xsZWN0ZWRFdmVudChQ
cm90b2NvbDo6SGVhcDo6R2FyYmFnZUNvbGxlY3Rpb246OlR5cGUgdHlwZSwgU2Vjb25kcyBzdGFy
dFRpbWUsIFNlY29uZHMgZW5kVGltZSkKIHsKICAgICAvLyBEaXNwYXRjaCB0aGUgZXZlbnQgYXN5
bmNocm9ub3VzbHkgYmVjYXVzZSB0aGlzIG1ldGhvZCBtYXkgYmUKICAgICAvLyBjYWxsZWQgYmV0
d2VlbiBjb2xsZWN0aW9uIGFuZCBzd2VlcGluZyBhbmQgd2UgZG9uJ3Qgd2FudCB0bwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9XZWJIZWFwQWdlbnQuaCBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvV2ViSGVhcEFnZW50LmgKaW5kZXggMGJjOGU2
NGFmNWE4NmE3MmQ1ZjgwNDQwZmRiMTE2M2ZlMTdlMTU3My4uYTM1ZTU3Y2M3YTcxZjhhZjQxMzg2
Mzc4N2NlZjM2YmVlNDE2ZjZiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2FnZW50cy9XZWJIZWFwQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdl
bnRzL1dlYkhlYXBBZ2VudC5oCkBAIC0zMyw3ICszMyw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogY2xhc3MgU2VuZEdhcmJhZ2VDb2xsZWN0aW9uRXZlbnRzVGFzazsKIHN0cnVjdCBHYXJiYWdl
Q29sbGVjdGlvbkRhdGE7Ci10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKIAogY2xhc3MgV2Vi
SGVhcEFnZW50IDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9ySGVhcEFnZW50IHsKICAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShXZWJIZWFwQWdlbnQpOwpAQCAtNDQsOCArNDMsOCBAQCBwdWJs
aWM6CiAgICAgfldlYkhlYXBBZ2VudCgpIG92ZXJyaWRlOwogCiAgICAgLy8gSGVhcEJhY2tlbmRE
aXNwYXRjaGVySGFuZGxlcgotICAgIHZvaWQgZW5hYmxlKEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7
Ci0gICAgdm9pZCBkaXNhYmxlKEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7CisgICAgSW5zcGVjdG9y
OjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBlbmFibGUoKSBvdmVycmlkZTsKKyAgICBJ
bnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGRpc2FibGUoKSBvdmVycmlk
ZTsKIAogcHJvdGVjdGVkOgogICAgIHZvaWQgZGlzcGF0Y2hHYXJiYWdlQ29sbGVjdGVkRXZlbnQo
SW5zcGVjdG9yOjpQcm90b2NvbDo6SGVhcDo6R2FyYmFnZUNvbGxlY3Rpb246OlR5cGUsIFNlY29u
ZHMgc3RhcnRUaW1lLCBTZWNvbmRzIGVuZFRpbWUpIGZpbmFsOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VBdWRpdEFnZW50LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlQXVkaXRBZ2VudC5jcHAKaW5kZXgg
ZGRkNTNiYTVkZmJjYTU1MzdiYmI2YjdiZTA2NTA1N2Q3MmZiYWJkOC4uOWFjZmU0ZGQ0YjE2MGVl
OWIzODkxMGNjOWM3NWEyNDEyNGNlZmVkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VBdWRpdEFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZUF1ZGl0QWdlbnQuY3BwCkBAIC01Niw3ICs1Niw3
IEBAIFBhZ2VBdWRpdEFnZW50OjpQYWdlQXVkaXRBZ2VudChQYWdlQWdlbnRDb250ZXh0JiBjb250
ZXh0KQogCiBQYWdlQXVkaXRBZ2VudDo6flBhZ2VBdWRpdEFnZW50KCkgPSBkZWZhdWx0OwogCi1J
bmplY3RlZFNjcmlwdCBQYWdlQXVkaXRBZ2VudDo6aW5qZWN0ZWRTY3JpcHRGb3JFdmFsKGNvbnN0
IGludCogZXhlY3V0aW9uQ29udGV4dElkKQorSW5qZWN0ZWRTY3JpcHQgUGFnZUF1ZGl0QWdlbnQ6
OmluamVjdGVkU2NyaXB0Rm9yRXZhbChPcHRpb25hbDxQcm90b2NvbDo6UnVudGltZTo6RXhlY3V0
aW9uQ29udGV4dElkPiYmIGV4ZWN1dGlvbkNvbnRleHRJZCkKIHsKICAgICBpZiAoZXhlY3V0aW9u
Q29udGV4dElkKQogICAgICAgICByZXR1cm4gaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKCkuaW5qZWN0
ZWRTY3JpcHRGb3JJZCgqZXhlY3V0aW9uQ29udGV4dElkKTsKQEAgLTY1LDkgKzY1LDkgQEAgSW5q
ZWN0ZWRTY3JpcHQgUGFnZUF1ZGl0QWdlbnQ6OmluamVjdGVkU2NyaXB0Rm9yRXZhbChjb25zdCBp
bnQqIGV4ZWN1dGlvbkNvbnRleHQKICAgICByZXR1cm4gaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKCku
aW5qZWN0ZWRTY3JpcHRGb3Ioc2NyaXB0U3RhdGUpOwogfQogCi1JbmplY3RlZFNjcmlwdCBQYWdl
QXVkaXRBZ2VudDo6aW5qZWN0ZWRTY3JpcHRGb3JFdmFsKEVycm9yU3RyaW5nJiBlcnJvclN0cmlu
ZywgY29uc3QgaW50KiBleGVjdXRpb25Db250ZXh0SWQpCitJbmplY3RlZFNjcmlwdCBQYWdlQXVk
aXRBZ2VudDo6aW5qZWN0ZWRTY3JpcHRGb3JFdmFsKFByb3RvY29sOjpFcnJvclN0cmluZyYgZXJy
b3JTdHJpbmcsIE9wdGlvbmFsPFByb3RvY29sOjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0SWQ+
JiYgZXhlY3V0aW9uQ29udGV4dElkKQogewotICAgIEluamVjdGVkU2NyaXB0IGluamVjdGVkU2Ny
aXB0ID0gaW5qZWN0ZWRTY3JpcHRGb3JFdmFsKGV4ZWN1dGlvbkNvbnRleHRJZCk7CisgICAgSW5q
ZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHQgPSBpbmplY3RlZFNjcmlwdEZvckV2YWwoV1RGTW92
ZShleGVjdXRpb25Db250ZXh0SWQpKTsKICAgICBpZiAoaW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1
ZSgpKSB7CiAgICAgICAgIGlmIChleGVjdXRpb25Db250ZXh0SWQpCiAgICAgICAgICAgICBlcnJv
clN0cmluZyA9ICJNaXNzaW5nIGluamVjdGVkIHNjcmlwdCBmb3IgZ2l2ZW4gZXhlY3V0aW9uQ29u
dGV4dElkIl9zOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9w
YWdlL1BhZ2VBdWRpdEFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3Bh
Z2UvUGFnZUF1ZGl0QWdlbnQuaAppbmRleCBkZGVjNDY1MTdlMWEwNWNiZjViZjhmZmQ3ZDFhYzg4
OGEwODk0Zjc5Li42OTNmYWMzMjc0NjlhOTA0NGQ4NzAxNzZmYWEyYTFkNDlmYmExYjM5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZUF1ZGl0QWdl
bnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZUF1ZGl0
QWdlbnQuaApAQCAtMzcsMTYgKzM3LDE2IEBAIGNsYXNzIFBhZ2VBdWRpdEFnZW50IGZpbmFsIDog
cHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yQXVkaXRBZ2VudCB7CiAgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgUGFnZUF1ZGl0QWdlbnQoUGFnZUFnZW50Q29udGV4
dCYpOwotICAgIH5QYWdlQXVkaXRBZ2VudCgpIG92ZXJyaWRlOworICAgIH5QYWdlQXVkaXRBZ2Vu
dCgpOwogCiBwcml2YXRlOgotICAgIEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRT
Y3JpcHRGb3JFdmFsKGNvbnN0IGludCogZXhlY3V0aW9uQ29udGV4dElkKTsKLSAgICBJbnNwZWN0
b3I6OkluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0Rm9yRXZhbChJbnNwZWN0b3I6OkVycm9y
U3RyaW5nJiwgY29uc3QgaW50KiBleGVjdXRpb25Db250ZXh0SWQpIG92ZXJyaWRlOworICAgIElu
c3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHRGb3JFdmFsKE9wdGlvbmFsPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkV4ZWN1dGlvbkNvbnRleHRJZD4mJik7CisgICAg
SW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdEZvckV2YWwoSW5zcGVjdG9y
OjpQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpS
dW50aW1lOjpFeGVjdXRpb25Db250ZXh0SWQ+JiYpOwogCi0gICAgdm9pZCBwb3B1bGF0ZUF1ZGl0
T2JqZWN0KEpTQzo6SlNHbG9iYWxPYmplY3QqLCBKU0M6OlN0cm9uZzxKU0M6OkpTT2JqZWN0PiYg
YXVkaXRPYmplY3QpIG92ZXJyaWRlOworICAgIHZvaWQgcG9wdWxhdGVBdWRpdE9iamVjdChKU0M6
OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJvbmc8SlNDOjpKU09iamVjdD4mIGF1ZGl0T2JqZWN0
KTsKIAotICAgIHZvaWQgbXV0ZUNvbnNvbGUoKSBvdmVycmlkZTsKLSAgICB2b2lkIHVubXV0ZUNv
bnNvbGUoKSBvdmVycmlkZTsKKyAgICB2b2lkIG11dGVDb25zb2xlKCk7CisgICAgdm9pZCB1bm11
dGVDb25zb2xlKCk7CiAKICAgICBQYWdlJiBtX2luc3BlY3RlZFBhZ2U7CiB9OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VDb25zb2xlQWdlbnQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VDb25zb2xlQWdl
bnQuY3BwCmluZGV4IDEzZmQxZDdkYWJhYTk5ZDBiYjBjNDlmZjdiYjVlNTJmNTRjNjYzZDMuLjEy
MTJiODY2ZDllMjg5OTY3N2E5M2ZkNzE2YzFlODY4ZDNjMWZmZmIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlQ29uc29sZUFnZW50LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZUNvbnNvbGVBZ2VudC5j
cHAKQEAgLTU0LDc5ICs1NCw4MyBAQCBQYWdlQ29uc29sZUFnZW50OjpQYWdlQ29uc29sZUFnZW50
KFBhZ2VBZ2VudENvbnRleHQmIGNvbnRleHQpCiAKIFBhZ2VDb25zb2xlQWdlbnQ6On5QYWdlQ29u
c29sZUFnZW50KCkgPSBkZWZhdWx0OwogCi12b2lkIFBhZ2VDb25zb2xlQWdlbnQ6OmNsZWFyTWVz
c2FnZXMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8
dm9pZD4gUGFnZUNvbnNvbGVBZ2VudDo6Y2xlYXJNZXNzYWdlcygpCiB7CiAgICAgaWYgKGF1dG8q
IGRvbUFnZW50ID0gbV9pbnN0cnVtZW50aW5nQWdlbnRzLnBlcnNpc3RlbnRET01BZ2VudCgpKQog
ICAgICAgICBkb21BZ2VudC0+cmVsZWFzZURhbmdsaW5nTm9kZXMoKTsKIAotICAgIFdlYkNvbnNv
bGVBZ2VudDo6Y2xlYXJNZXNzYWdlcyhlcnJvclN0cmluZyk7CisgICAgcmV0dXJuIFdlYkNvbnNv
bGVBZ2VudDo6Y2xlYXJNZXNzYWdlcygpOwogfQogCi12b2lkIFBhZ2VDb25zb2xlQWdlbnQ6Omdl
dExvZ2dpbmdDaGFubmVscyhFcnJvclN0cmluZyYsIFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWw+PiYgY2hhbm5lbHMpCitQcm90b2NvbDo6
RXJyb3JTdHJpbmdPcjxSZWY8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6Q29uc29sZTo6Q2hhbm5l
bD4+PiBQYWdlQ29uc29sZUFnZW50OjpnZXRMb2dnaW5nQ2hhbm5lbHMoKQogewotICAgIHN0YXRp
YyBjb25zdCBzdHJ1Y3QgQ2hhbm5lbFRhYmxlIHsKLSAgICAgICAgTmV2ZXJEZXN0cm95ZWQ8U3Ry
aW5nPiBuYW1lOwotICAgICAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpDb25zb2xlOjpDaGFubmVs
U291cmNlIHNvdXJjZTsKLSAgICB9IGNoYW5uZWxUYWJsZVtdID0gewotICAgICAgICB7IE1BS0Vf
U1RBVElDX1NUUklOR19JTVBMKCJXZWJSVEMiKSwgSW5zcGVjdG9yOjpQcm90b2NvbDo6Q29uc29s
ZTo6Q2hhbm5lbFNvdXJjZTo6V2ViUlRDIH0sCi0gICAgICAgIHsgTUFLRV9TVEFUSUNfU1RSSU5H
X0lNUEwoIk1lZGlhIiksIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWxTb3Vy
Y2U6Ok1lZGlhIH0sCi0gICAgICAgIHsgTUFLRV9TVEFUSUNfU1RSSU5HX0lNUEwoIk1lZGlhU291
cmNlIiksIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWxTb3VyY2U6Ok1lZGlh
U291cmNlIH0sCi0gICAgfTsKKyAgICBhdXRvIGNoYW5uZWxzID0gSlNPTjo6QXJyYXlPZjxQcm90
b2NvbDo6Q29uc29sZTo6Q2hhbm5lbD46OmNyZWF0ZSgpOwogCi0gICAgY2hhbm5lbHMgPSBKU09O
OjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWw+OjpjcmVhdGUo
KTsKLQotICAgIHNpemVfdCBsZW5ndGggPSBXVEZfQVJSQVlfTEVOR1RIKGNoYW5uZWxUYWJsZSk7
Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICBhdXRv
KiBsb2dDaGFubmVsID0gZ2V0TG9nQ2hhbm5lbChjaGFubmVsVGFibGVbaV0ubmFtZSk7CisgICAg
YXV0byBhZGRMb2dDaGFubmVsID0gWyZdIChQcm90b2NvbDo6Q29uc29sZTo6Q2hhbm5lbFNvdXJj
ZSBzb3VyY2UpIHsKKyAgICAgICAgYXV0byogbG9nQ2hhbm5lbCA9IGdldExvZ0NoYW5uZWwoUHJv
dG9jb2w6OkhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKHNvdXJjZSkpOwogICAgICAgICBp
ZiAoIWxvZ0NoYW5uZWwpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgYXV0byBsZXZl
bCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWxMZXZlbDo6T2ZmOworICAg
ICAgICBhdXRvIGxldmVsID0gUHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWxMZXZlbDo6T2ZmOwog
ICAgICAgICBpZiAobG9nQ2hhbm5lbC0+c3RhdGUgIT0gV1RGTG9nQ2hhbm5lbFN0YXRlOjpPZmYp
IHsKICAgICAgICAgICAgIHN3aXRjaCAobG9nQ2hhbm5lbC0+bGV2ZWwpIHsKICAgICAgICAgICAg
IGNhc2UgV1RGTG9nTGV2ZWw6OkFsd2F5czoKICAgICAgICAgICAgIGNhc2UgV1RGTG9nTGV2ZWw6
OkVycm9yOgogICAgICAgICAgICAgY2FzZSBXVEZMb2dMZXZlbDo6V2FybmluZzoKICAgICAgICAg
ICAgIGNhc2UgV1RGTG9nTGV2ZWw6OkluZm86Ci0gICAgICAgICAgICAgICAgbGV2ZWwgPSBJbnNw
ZWN0b3I6OlByb3RvY29sOjpDb25zb2xlOjpDaGFubmVsTGV2ZWw6OkJhc2ljOworICAgICAgICAg
ICAgICAgIGxldmVsID0gUHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWxMZXZlbDo6QmFzaWM7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CisKICAgICAgICAgICAgIGNhc2UgV1RGTG9nTGV2ZWw6OkRl
YnVnOgotICAgICAgICAgICAgICAgIGxldmVsID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q29uc29s
ZTo6Q2hhbm5lbExldmVsOjpWZXJib3NlOworICAgICAgICAgICAgICAgIGxldmVsID0gUHJvdG9j
b2w6OkNvbnNvbGU6OkNoYW5uZWxMZXZlbDo6VmVyYm9zZTsKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIGF1dG8gY2hhbm5lbCA9IElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWw6OmNyZWF0ZSgpCi0gICAgICAgICAg
ICAuc2V0U291cmNlKGNoYW5uZWxUYWJsZVtpXS5zb3VyY2UpCisgICAgICAgIGF1dG8gY2hhbm5l
bCA9IFByb3RvY29sOjpDb25zb2xlOjpDaGFubmVsOjpjcmVhdGUoKQorICAgICAgICAgICAgLnNl
dFNvdXJjZShzb3VyY2UpCiAgICAgICAgICAgICAuc2V0TGV2ZWwobGV2ZWwpCiAgICAgICAgICAg
ICAucmVsZWFzZSgpOwogICAgICAgICBjaGFubmVscy0+YWRkSXRlbShXVEZNb3ZlKGNoYW5uZWwp
KTsKLSAgICB9CisgICAgfTsKKyAgICBhZGRMb2dDaGFubmVsKFByb3RvY29sOjpDb25zb2xlOjpD
aGFubmVsU291cmNlOjpYTUwpOworICAgIGFkZExvZ0NoYW5uZWwoUHJvdG9jb2w6OkNvbnNvbGU6
OkNoYW5uZWxTb3VyY2U6OkphdmFTY3JpcHQpOworICAgIGFkZExvZ0NoYW5uZWwoUHJvdG9jb2w6
OkNvbnNvbGU6OkNoYW5uZWxTb3VyY2U6Ok5ldHdvcmspOworICAgIGFkZExvZ0NoYW5uZWwoUHJv
dG9jb2w6OkNvbnNvbGU6OkNoYW5uZWxTb3VyY2U6OkNvbnNvbGVBUEkpOworICAgIGFkZExvZ0No
YW5uZWwoUHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWxTb3VyY2U6OlN0b3JhZ2UpOworICAgIGFk
ZExvZ0NoYW5uZWwoUHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWxTb3VyY2U6OkFwcGNhY2hlKTsK
KyAgICBhZGRMb2dDaGFubmVsKFByb3RvY29sOjpDb25zb2xlOjpDaGFubmVsU291cmNlOjpSZW5k
ZXJpbmcpOworICAgIGFkZExvZ0NoYW5uZWwoUHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWxTb3Vy
Y2U6OkNTUyk7CisgICAgYWRkTG9nQ2hhbm5lbChQcm90b2NvbDo6Q29uc29sZTo6Q2hhbm5lbFNv
dXJjZTo6U2VjdXJpdHkpOworICAgIGFkZExvZ0NoYW5uZWwoUHJvdG9jb2w6OkNvbnNvbGU6OkNo
YW5uZWxTb3VyY2U6OkNvbnRlbnRCbG9ja2VyKTsKKyAgICBhZGRMb2dDaGFubmVsKFByb3RvY29s
OjpDb25zb2xlOjpDaGFubmVsU291cmNlOjpNZWRpYSk7CisgICAgYWRkTG9nQ2hhbm5lbChQcm90
b2NvbDo6Q29uc29sZTo6Q2hhbm5lbFNvdXJjZTo6TWVkaWFTb3VyY2UpOworICAgIGFkZExvZ0No
YW5uZWwoUHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWxTb3VyY2U6OldlYlJUQyk7CisgICAgYWRk
TG9nQ2hhbm5lbChQcm90b2NvbDo6Q29uc29sZTo6Q2hhbm5lbFNvdXJjZTo6SVRQRGVidWcpOwor
ICAgIGFkZExvZ0NoYW5uZWwoUHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWxTb3VyY2U6OkFkQ2xp
Y2tBdHRyaWJ1dGlvbik7CisgICAgYWRkTG9nQ2hhbm5lbChQcm90b2NvbDo6Q29uc29sZTo6Q2hh
bm5lbFNvdXJjZTo6T3RoZXIpOworCisgICAgcmV0dXJuIFdURk1vdmUoY2hhbm5lbHMpOwogfQog
Ci1zdGF0aWMgT3B0aW9uYWw8c3RkOjpwYWlyPFdURkxvZ0NoYW5uZWxTdGF0ZSwgV1RGTG9nTGV2
ZWw+PiBjaGFubmVsQ29uZmlndXJhdGlvbkZvclN0cmluZyhjb25zdCBTdHJpbmcmIGxldmVsU3Ry
aW5nKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gUGFnZUNvbnNvbGVBZ2VudDo6c2V0
TG9nZ2luZ0NoYW5uZWxMZXZlbChQcm90b2NvbDo6Q29uc29sZTo6Q2hhbm5lbFNvdXJjZSBzb3Vy
Y2UsIFByb3RvY29sOjpDb25zb2xlOjpDaGFubmVsTGV2ZWwgbGV2ZWwpCiB7Ci0gICAgaWYgKGVx
dWFsSWdub3JpbmdBU0NJSUNhc2UobGV2ZWxTdHJpbmcsICJvZmYiKSkKLSAgICAgICAgcmV0dXJu
IHsgeyBXVEZMb2dDaGFubmVsU3RhdGU6Ok9mZiwgV1RGTG9nTGV2ZWw6OkVycm9yIH0gfTsKKyAg
ICBzd2l0Y2ggKGxldmVsKSB7CisgICAgY2FzZSBQcm90b2NvbDo6Q29uc29sZTo6Q2hhbm5lbExl
dmVsOjpPZmY6CisgICAgICAgIG1faW5zcGVjdGVkUGFnZS5jb25maWd1cmVMb2dnaW5nQ2hhbm5l
bChQcm90b2NvbDo6SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUoc291cmNlKSwgV1RGTG9n
Q2hhbm5lbFN0YXRlOjpPZmYsIFdURkxvZ0xldmVsOjpFcnJvcik7CisgICAgICAgIHJldHVybiB7
IH07CiAKLSAgICBpZiAoZXF1YWxJZ25vcmluZ0FTQ0lJQ2FzZShsZXZlbFN0cmluZywgImJhc2lj
IikpCi0gICAgICAgIHJldHVybiB7IHsgV1RGTG9nQ2hhbm5lbFN0YXRlOjpPbiwgV1RGTG9nTGV2
ZWw6OkluZm8gfSB9OworICAgIGNhc2UgUHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWxMZXZlbDo6
QmFzaWM6CisgICAgICAgIG1faW5zcGVjdGVkUGFnZS5jb25maWd1cmVMb2dnaW5nQ2hhbm5lbChQ
cm90b2NvbDo6SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUoc291cmNlKSwgV1RGTG9nQ2hh
bm5lbFN0YXRlOjpPbiwgV1RGTG9nTGV2ZWw6OkluZm8pOworICAgICAgICByZXR1cm4geyB9Owog
Ci0gICAgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UobGV2ZWxTdHJpbmcsICJ2ZXJib3NlIikp
Ci0gICAgICAgIHJldHVybiB7IHsgV1RGTG9nQ2hhbm5lbFN0YXRlOjpPbiwgV1RGTG9nTGV2ZWw6
OkRlYnVnIH0gfTsKLQotICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci19Ci0KLXZvaWQgUGFnZUNv
bnNvbGVBZ2VudDo6c2V0TG9nZ2luZ0NoYW5uZWxMZXZlbChFcnJvclN0cmluZyYgZXJyb3JTdHJp
bmcsIGNvbnN0IFN0cmluZyYgY2hhbm5lbE5hbWUsIGNvbnN0IFN0cmluZyYgY2hhbm5lbExldmVs
KQotewotICAgIGF1dG8gY29uZmlndXJhdGlvbiA9IGNoYW5uZWxDb25maWd1cmF0aW9uRm9yU3Ry
aW5nKGNoYW5uZWxMZXZlbCk7Ci0gICAgaWYgKCFjb25maWd1cmF0aW9uKSB7Ci0gICAgICAgIGVy
cm9yU3RyaW5nID0gbWFrZVN0cmluZygiVW5rbm93biBjaGFubmVsTGV2ZWw6ICJfcywgY2hhbm5l
bExldmVsKTsKLSAgICAgICAgcmV0dXJuOworICAgIGNhc2UgUHJvdG9jb2w6OkNvbnNvbGU6OkNo
YW5uZWxMZXZlbDo6VmVyYm9zZToKKyAgICAgICAgbV9pbnNwZWN0ZWRQYWdlLmNvbmZpZ3VyZUxv
Z2dpbmdDaGFubmVsKFByb3RvY29sOjpIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShzb3Vy
Y2UpLCBXVEZMb2dDaGFubmVsU3RhdGU6Ok9uLCBXVEZMb2dMZXZlbDo6RGVidWcpOworICAgICAg
ICByZXR1cm4geyB9OwogICAgIH0KIAotICAgIG1faW5zcGVjdGVkUGFnZS5jb25maWd1cmVMb2dn
aW5nQ2hhbm5lbChjaGFubmVsTmFtZSwgY29uZmlndXJhdGlvbi52YWx1ZSgpLmZpcnN0LCBjb25m
aWd1cmF0aW9uLnZhbHVlKCkuc2Vjb25kKTsKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICByZXR1cm4geyB9OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZUNvbnNvbGVBZ2VudC5oIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VDb25zb2xlQWdlbnQuaApp
bmRleCA0YzQ1ZjJkYWQwZjdjMWI0MDQ1MzlmZTRmNTdlNWE4NmRiMjA2MzE4Li40MWZlNzZkMDMy
MDcwZTBkNDEwM2U0MGEyYzE0NGNlMzc5ODFjODMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZUNvbnNvbGVBZ2VudC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlQ29uc29sZUFnZW50LmgKQEAgLTQxLDEy
ICs0MSwxMiBAQCBjbGFzcyBQYWdlQ29uc29sZUFnZW50IGZpbmFsIDogcHVibGljIFdlYkNvbnNv
bGVBZ2VudCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgUGFn
ZUNvbnNvbGVBZ2VudChQYWdlQWdlbnRDb250ZXh0Jik7Ci0gICAgflBhZ2VDb25zb2xlQWdlbnQo
KSBvdmVycmlkZTsKKyAgICB+UGFnZUNvbnNvbGVBZ2VudCgpOwogCiAgICAgLy8gQ29uc29sZUJh
Y2tlbmREaXNwYXRjaGVySGFuZGxlcgotICAgIHZvaWQgY2xlYXJNZXNzYWdlcyhFcnJvclN0cmlu
ZyYpIG92ZXJyaWRlOwotICAgIHZvaWQgZ2V0TG9nZ2luZ0NoYW5uZWxzKEVycm9yU3RyaW5nJiwg
UmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q29uc29sZTo6Q2hhbm5l
bD4+Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRMb2dnaW5nQ2hhbm5lbExldmVsKEVycm9yU3Ry
aW5nJiwgY29uc3QgU3RyaW5nJiBjaGFubmVsLCBjb25zdCBTdHJpbmcmIGxldmVsKSBvdmVycmlk
ZTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGNsZWFyTWVz
c2FnZXMoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxKU09O
OjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWw+Pj4gZ2V0TG9n
Z2luZ0NoYW5uZWxzKCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2
b2lkPiBzZXRMb2dnaW5nQ2hhbm5lbExldmVsKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNvbnNvbGU6
OkNoYW5uZWxTb3VyY2UsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWxMZXZl
bCk7CiAKIHByaXZhdGU6CiAgICAgSW5zdHJ1bWVudGluZ0FnZW50cyYgbV9pbnN0cnVtZW50aW5n
QWdlbnRzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdl
L1BhZ2VET01EZWJ1Z2dlckFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2Vu
dHMvcGFnZS9QYWdlRE9NRGVidWdnZXJBZ2VudC5jcHAKaW5kZXggN2M1ZmZhNGUzODNmNTJjYWI1
ZTJhMjdmZDkxNTkwOWZiY2VmNTE0Yy4uYzg4YmJkYzAzZDI1NDEwZmI2OTU4YjBmMDlhZmM1YmYx
ODhkYjI1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdl
L1BhZ2VET01EZWJ1Z2dlckFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
YWdlbnRzL3BhZ2UvUGFnZURPTURlYnVnZ2VyQWdlbnQuY3BwCkBAIC02OSw4NCArNjksNzQgQEAg
dm9pZCBQYWdlRE9NRGVidWdnZXJBZ2VudDo6ZGlzYWJsZSgpCiAgICAgSW5zcGVjdG9yRE9NRGVi
dWdnZXJBZ2VudDo6ZGlzYWJsZSgpOwogfQogCi12b2lkIFBhZ2VET01EZWJ1Z2dlckFnZW50Ojpz
ZXRET01CcmVha3BvaW50KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJZCwgY29u
c3QgU3RyaW5nJiB0eXBlU3RyaW5nLCBjb25zdCBKU09OOjpPYmplY3QqIG9wdGlvbnNQYXlsb2Fk
KQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gUGFnZURPTURlYnVnZ2VyQWdlbnQ6OnNl
dERPTUJyZWFrcG9pbnQoUHJvdG9jb2w6OkRPTTo6Tm9kZUlkIG5vZGVJZCwgUHJvdG9jb2w6OkRP
TURlYnVnZ2VyOjpET01CcmVha3BvaW50VHlwZSB0eXBlLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYm
IG9wdGlvbnMpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAg
ICAgYXV0byogZG9tQWdlbnQgPSBtX2luc3RydW1lbnRpbmdBZ2VudHMucGVyc2lzdGVudERPTUFn
ZW50KCk7Ci0gICAgaWYgKCFkb21BZ2VudCkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJET00g
ZG9tYWluIG11c3QgYmUgZW5hYmxlZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBp
ZiAoIWRvbUFnZW50KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkRPTSBkb21haW4g
bXVzdCBiZSBlbmFibGVkIl9zKTsKIAogICAgIE5vZGUqIG5vZGUgPSBkb21BZ2VudC0+YXNzZXJ0
Tm9kZShlcnJvclN0cmluZywgbm9kZUlkKTsKICAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJldHVy
bjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAotICAgIGF1
dG8gdHlwZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6Okluc3BlY3RvckhlbHBlcnM6OnBhcnNlRW51
bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpET01EZWJ1Z2dlcjo6RE9NQnJl
YWtwb2ludFR5cGU+KHR5cGVTdHJpbmcpOwotICAgIGlmICghdHlwZSkgewotICAgICAgICBlcnJv
clN0cmluZyA9IG1ha2VTdHJpbmcoIlVua25vd24gdHlwZTogIl9zLCB0eXBlU3RyaW5nKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8gYnJlYWtwb2ludCA9IEluc3BlY3RvckRl
YnVnZ2VyQWdlbnQ6OmRlYnVnZ2VyQnJlYWtwb2ludEZyb21QYXlsb2FkKGVycm9yU3RyaW5nLCBv
cHRpb25zUGF5bG9hZCk7CisgICAgYXV0byBicmVha3BvaW50ID0gSW5zcGVjdG9yRGVidWdnZXJB
Z2VudDo6ZGVidWdnZXJCcmVha3BvaW50RnJvbVBheWxvYWQoZXJyb3JTdHJpbmcsIFdURk1vdmUo
b3B0aW9ucykpOwogICAgIGlmICghYnJlYWtwb2ludCkKLSAgICAgICAgcmV0dXJuOworICAgICAg
ICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCi0gICAgc3dpdGNoICgqdHlw
ZSkgewotICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NRGVidWdnZXI6OkRPTUJyZWFr
cG9pbnRUeXBlOjpTdWJ0cmVlTW9kaWZpZWQ6CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2Fz
ZSBQcm90b2NvbDo6RE9NRGVidWdnZXI6OkRPTUJyZWFrcG9pbnRUeXBlOjpTdWJ0cmVlTW9kaWZp
ZWQ6CiAgICAgICAgIGlmICghbV9kb21TdWJ0cmVlTW9kaWZpZWRCcmVha3BvaW50cy5hZGQobm9k
ZSwgYnJlYWtwb2ludC5yZWxlYXNlTm9uTnVsbCgpKSkKLSAgICAgICAgICAgIGVycm9yU3RyaW5n
ID0gIkJyZWFrcG9pbnQgZm9yIGdpdmVuIG5vZGUgYW5kIGdpdmVuIHR5cGUgYWxyZWFkeSBleGlz
dHMiX3M7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3Rl
ZCgiQnJlYWtwb2ludCBmb3IgZ2l2ZW4gbm9kZSBhbmQgZ2l2ZW4gdHlwZSBhbHJlYWR5IGV4aXN0
cyJfcyk7CisgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBjYXNlIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRPTURlYnVnZ2VyOjpET01CcmVha3BvaW50VHlwZTo6QXR0cmlidXRlTW9kaWZpZWQ6Cisg
ICAgY2FzZSBQcm90b2NvbDo6RE9NRGVidWdnZXI6OkRPTUJyZWFrcG9pbnRUeXBlOjpBdHRyaWJ1
dGVNb2RpZmllZDoKICAgICAgICAgaWYgKCFtX2RvbUF0dHJpYnV0ZU1vZGlmaWVkQnJlYWtwb2lu
dHMuYWRkKG5vZGUsIGJyZWFrcG9pbnQucmVsZWFzZU5vbk51bGwoKSkpCi0gICAgICAgICAgICBl
cnJvclN0cmluZyA9ICJCcmVha3BvaW50IGZvciBnaXZlbiBub2RlIGFuZCBnaXZlbiB0eXBlIGFs
cmVhZHkgZXhpc3RzIl9zOwotICAgICAgICByZXR1cm47CisgICAgICAgICAgICByZXR1cm4gbWFr
ZVVuZXhwZWN0ZWQoIkJyZWFrcG9pbnQgZm9yIGdpdmVuIG5vZGUgYW5kIGdpdmVuIHR5cGUgYWxy
ZWFkeSBleGlzdHMiX3MpOworICAgICAgICByZXR1cm4geyB9OwogCi0gICAgY2FzZSBJbnNwZWN0
b3I6OlByb3RvY29sOjpET01EZWJ1Z2dlcjo6RE9NQnJlYWtwb2ludFR5cGU6Ok5vZGVSZW1vdmVk
OgorICAgIGNhc2UgUHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpET01CcmVha3BvaW50VHlwZTo6Tm9k
ZVJlbW92ZWQ6CiAgICAgICAgIGlmICghbV9kb21Ob2RlUmVtb3ZlZEJyZWFrcG9pbnRzLmFkZChu
b2RlLCBicmVha3BvaW50LnJlbGVhc2VOb25OdWxsKCkpKQotICAgICAgICAgICAgZXJyb3JTdHJp
bmcgPSAiQnJlYWtwb2ludCBmb3IgZ2l2ZW4gbm9kZSBhbmQgZ2l2ZW4gdHlwZSBhbHJlYWR5IGV4
aXN0cyJfczsKLSAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVj
dGVkKCJCcmVha3BvaW50IGZvciBnaXZlbiBub2RlIGFuZCBnaXZlbiB0eXBlIGFscmVhZHkgZXhp
c3RzIl9zKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk5vdCBzdXBwb3J0ZWQiKTsKIH0K
IAotdm9pZCBQYWdlRE9NRGVidWdnZXJBZ2VudDo6cmVtb3ZlRE9NQnJlYWtwb2ludChFcnJvclN0
cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQsIGNvbnN0IFN0cmluZyYgdHlwZVN0cmluZykK
K1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IFBhZ2VET01EZWJ1Z2dlckFnZW50OjpyZW1v
dmVET01CcmVha3BvaW50KFByb3RvY29sOjpET006Ok5vZGVJZCBub2RlSWQsIFByb3RvY29sOjpE
T01EZWJ1Z2dlcjo6RE9NQnJlYWtwb2ludFR5cGUgdHlwZSkKIHsKKyAgICBQcm90b2NvbDo6RXJy
b3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBhdXRvKiBkb21BZ2VudCA9IG1faW5zdHJ1bWVu
dGluZ0FnZW50cy5wZXJzaXN0ZW50RE9NQWdlbnQoKTsKLSAgICBpZiAoIWRvbUFnZW50KSB7Ci0g
ICAgICAgIGVycm9yU3RyaW5nID0gIkRPTSBkb21haW4gbXVzdCBiZSBlbmFibGVkIl9zOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghZG9tQWdlbnQpCisgICAgICAgIHJldHVybiBt
YWtlVW5leHBlY3RlZCgiRE9NIGRvbWFpbiBtdXN0IGJlIGVuYWJsZWQiX3MpOwogCiAgICAgTm9k
ZSogbm9kZSA9IGRvbUFnZW50LT5hc3NlcnROb2RlKGVycm9yU3RyaW5nLCBub2RlSWQpOwogICAg
IGlmICghbm9kZSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0
ZWQoZXJyb3JTdHJpbmcpOwogCi0gICAgYXV0byB0eXBlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6
SW5zcGVjdG9ySGVscGVyczo6cGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRPTURlYnVnZ2VyOjpET01CcmVha3BvaW50VHlwZT4odHlwZVN0cmluZyk7Ci0gICAg
aWYgKCF0eXBlKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gbWFrZVN0cmluZygiVW5rbm93biB0
eXBlOiAiX3MsIHR5cGVTdHJpbmcpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgc3dp
dGNoICgqdHlwZSkgewotICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NRGVidWdnZXI6
OkRPTUJyZWFrcG9pbnRUeXBlOjpTdWJ0cmVlTW9kaWZpZWQ6CisgICAgc3dpdGNoICh0eXBlKSB7
CisgICAgY2FzZSBQcm90b2NvbDo6RE9NRGVidWdnZXI6OkRPTUJyZWFrcG9pbnRUeXBlOjpTdWJ0
cmVlTW9kaWZpZWQ6CiAgICAgICAgIGlmICghbV9kb21TdWJ0cmVlTW9kaWZpZWRCcmVha3BvaW50
cy5yZW1vdmUobm9kZSkpCi0gICAgICAgICAgICBlcnJvclN0cmluZyA9ICJCcmVha3BvaW50IGZv
ciBnaXZlbiBub2RlIGFuZCBnaXZlbiB0eXBlIG1pc3NpbmciX3M7Ci0gICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiQnJlYWtwb2ludCBmb3IgZ2l2ZW4g
bm9kZSBhbmQgZ2l2ZW4gdHlwZSBtaXNzaW5nIl9zKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAot
ICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NRGVidWdnZXI6OkRPTUJyZWFrcG9pbnRU
eXBlOjpBdHRyaWJ1dGVNb2RpZmllZDoKKyAgICBjYXNlIFByb3RvY29sOjpET01EZWJ1Z2dlcjo6
RE9NQnJlYWtwb2ludFR5cGU6OkF0dHJpYnV0ZU1vZGlmaWVkOgogICAgICAgICBpZiAoIW1fZG9t
QXR0cmlidXRlTW9kaWZpZWRCcmVha3BvaW50cy5yZW1vdmUobm9kZSkpCi0gICAgICAgICAgICBl
cnJvclN0cmluZyA9ICJCcmVha3BvaW50IGZvciBnaXZlbiBub2RlIGFuZCBnaXZlbiB0eXBlIG1p
c3NpbmciX3M7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBl
Y3RlZCgiQnJlYWtwb2ludCBmb3IgZ2l2ZW4gbm9kZSBhbmQgZ2l2ZW4gdHlwZSBtaXNzaW5nIl9z
KTsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6
RE9NRGVidWdnZXI6OkRPTUJyZWFrcG9pbnRUeXBlOjpOb2RlUmVtb3ZlZDoKKyAgICBjYXNlIFBy
b3RvY29sOjpET01EZWJ1Z2dlcjo6RE9NQnJlYWtwb2ludFR5cGU6Ok5vZGVSZW1vdmVkOgogICAg
ICAgICBpZiAoIW1fZG9tTm9kZVJlbW92ZWRCcmVha3BvaW50cy5yZW1vdmUobm9kZSkpCi0gICAg
ICAgICAgICBlcnJvclN0cmluZyA9ICJCcmVha3BvaW50IGZvciBnaXZlbiBub2RlIGFuZCBnaXZl
biB0eXBlIG1pc3NpbmciX3M7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVybiBt
YWtlVW5leHBlY3RlZCgiQnJlYWtwb2ludCBmb3IgZ2l2ZW4gbm9kZSBhbmQgZ2l2ZW4gdHlwZSBt
aXNzaW5nIl9zKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk5vdCBzdXBwb3J0ZWQiKTsK
IH0KIAogdm9pZCBQYWdlRE9NRGVidWdnZXJBZ2VudDo6bWFpbkZyYW1lTmF2aWdhdGVkKCkKQEAg
LTIxMyw3ICsyMDMsNyBAQCB2b2lkIFBhZ2VET01EZWJ1Z2dlckFnZW50Ojp3aWxsSW5zZXJ0RE9N
Tm9kZShOb2RlJiBwYXJlbnQpCiAKICAgICBBU1NFUlQoY2xvc2VzdEJyZWFrcG9pbnRPd25lcik7
CiAKLSAgICBhdXRvIHBhdXNlRGF0YSA9IGJ1aWxkUGF1c2VEYXRhRm9yRE9NQnJlYWtwb2ludChJ
bnNwZWN0b3I6OlByb3RvY29sOjpET01EZWJ1Z2dlcjo6RE9NQnJlYWtwb2ludFR5cGU6OlN1YnRy
ZWVNb2RpZmllZCwgKmNsb3Nlc3RCcmVha3BvaW50T3duZXIpOworICAgIGF1dG8gcGF1c2VEYXRh
ID0gYnVpbGRQYXVzZURhdGFGb3JET01CcmVha3BvaW50KFByb3RvY29sOjpET01EZWJ1Z2dlcjo6
RE9NQnJlYWtwb2ludFR5cGU6OlN1YnRyZWVNb2RpZmllZCwgKmNsb3Nlc3RCcmVha3BvaW50T3du
ZXIpOwogICAgIHBhdXNlRGF0YS0+c2V0Qm9vbGVhbigiaW5zZXJ0aW9uIiwgdHJ1ZSk7CiAgICAg
Ly8gRklYTUU6IDxodHRwczovL3dlYmtpdC5vcmcvYi8yMTM0OTk+IFdlYiBJbnNwZWN0b3I6IGFs
bG93IERPTSBub2RlcyB0byBiZSBpbnN0cnVtZW50ZWQgYXQgYW55IHBvaW50LCByZWdhcmRsZXNz
IG9mIHdoZXRoZXIgdGhlIG1haW4gZG9jdW1lbnQgaGFzIGFsc28gYmVlbiBpbnN0cnVtZW50ZWQK
ICAgICAvLyBJbmNsdWRlIHRoZSBuZXcgY2hpbGQgbm9kZSBJRCBzbyB0aGUgZnJvbnRlbmQgY2Fu
IHNob3cgdGhlIG5vZGUgdGhhdCdzIGFib3V0IHRvIGJlIGluc2VydGVkLgpAQCAtMjMwLDcgKzIy
MCw3IEBAIHZvaWQgUGFnZURPTURlYnVnZ2VyQWdlbnQ6OndpbGxSZW1vdmVET01Ob2RlKE5vZGUm
IG5vZGUpCiAKICAgICBPcHRpb25hbDxzaXplX3Q+IGNsb3Nlc3REaXN0YW5jZTsKICAgICBSZWZQ
dHI8SlNDOjpCcmVha3BvaW50PiBjbG9zZXN0QnJlYWtwb2ludDsKLSAgICBPcHRpb25hbDxJbnNw
ZWN0b3I6OlByb3RvY29sOjpET01EZWJ1Z2dlcjo6RE9NQnJlYWtwb2ludFR5cGU+IGNsb3Nlc3RC
cmVha3BvaW50VHlwZTsKKyAgICBPcHRpb25hbDxQcm90b2NvbDo6RE9NRGVidWdnZXI6OkRPTUJy
ZWFrcG9pbnRUeXBlPiBjbG9zZXN0QnJlYWtwb2ludFR5cGU7CiAgICAgTm9kZSogY2xvc2VzdEJy
ZWFrcG9pbnRPd25lciA9IG51bGxwdHI7CiAKICAgICBmb3IgKGF1dG8gW2JyZWFrcG9pbnRPd25l
ciwgYnJlYWtwb2ludF0gOiBtX2RvbU5vZGVSZW1vdmVkQnJlYWtwb2ludHMpIHsKQEAgLTI0MSw3
ICsyMzEsNyBAQCB2b2lkIFBhZ2VET01EZWJ1Z2dlckFnZW50Ojp3aWxsUmVtb3ZlRE9NTm9kZShO
b2RlJiBub2RlKQogICAgICAgICBpZiAoIWNsb3Nlc3REaXN0YW5jZSB8fCBkaXN0YW5jZSA8IGNs
b3Nlc3REaXN0YW5jZSkgewogICAgICAgICAgICAgY2xvc2VzdERpc3RhbmNlID0gZGlzdGFuY2U7
CiAgICAgICAgICAgICBjbG9zZXN0QnJlYWtwb2ludCA9IGJyZWFrcG9pbnQuY29weVJlZigpOwot
ICAgICAgICAgICAgY2xvc2VzdEJyZWFrcG9pbnRUeXBlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6
RE9NRGVidWdnZXI6OkRPTUJyZWFrcG9pbnRUeXBlOjpOb2RlUmVtb3ZlZDsKKyAgICAgICAgICAg
IGNsb3Nlc3RCcmVha3BvaW50VHlwZSA9IFByb3RvY29sOjpET01EZWJ1Z2dlcjo6RE9NQnJlYWtw
b2ludFR5cGU6Ok5vZGVSZW1vdmVkOwogICAgICAgICAgICAgY2xvc2VzdEJyZWFrcG9pbnRPd25l
ciA9IGJyZWFrcG9pbnRPd25lcjsKICAgICAgICAgfQogICAgIH0KQEAgLTI1NSw3ICsyNDUsNyBA
QCB2b2lkIFBhZ2VET01EZWJ1Z2dlckFnZW50Ojp3aWxsUmVtb3ZlRE9NTm9kZShOb2RlJiBub2Rl
KQogICAgICAgICAgICAgaWYgKCFjbG9zZXN0RGlzdGFuY2UgfHwgZGlzdGFuY2UgPCBjbG9zZXN0
RGlzdGFuY2UpIHsKICAgICAgICAgICAgICAgICBjbG9zZXN0RGlzdGFuY2UgPSBkaXN0YW5jZTsK
ICAgICAgICAgICAgICAgICBjbG9zZXN0QnJlYWtwb2ludCA9IGJyZWFrcG9pbnQuY29weVJlZigp
OwotICAgICAgICAgICAgICAgIGNsb3Nlc3RCcmVha3BvaW50VHlwZSA9IEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRPTURlYnVnZ2VyOjpET01CcmVha3BvaW50VHlwZTo6U3VidHJlZU1vZGlmaWVkOwor
ICAgICAgICAgICAgICAgIGNsb3Nlc3RCcmVha3BvaW50VHlwZSA9IFByb3RvY29sOjpET01EZWJ1
Z2dlcjo6RE9NQnJlYWtwb2ludFR5cGU6OlN1YnRyZWVNb2RpZmllZDsKICAgICAgICAgICAgICAg
ICBjbG9zZXN0QnJlYWtwb2ludE93bmVyID0gYnJlYWtwb2ludE93bmVyOwogICAgICAgICAgICAg
fQogICAgICAgICB9CkBAIC0yOTYsNyArMjg2LDcgQEAgdm9pZCBQYWdlRE9NRGVidWdnZXJBZ2Vu
dDo6d2lsbE1vZGlmeURPTUF0dHIoRWxlbWVudCYgZWxlbWVudCkKICAgICBpZiAoaXQgPT0gbV9k
b21BdHRyaWJ1dGVNb2RpZmllZEJyZWFrcG9pbnRzLmVuZCgpKQogICAgICAgICByZXR1cm47CiAK
LSAgICBhdXRvIHBhdXNlRGF0YSA9IGJ1aWxkUGF1c2VEYXRhRm9yRE9NQnJlYWtwb2ludChJbnNw
ZWN0b3I6OlByb3RvY29sOjpET01EZWJ1Z2dlcjo6RE9NQnJlYWtwb2ludFR5cGU6OkF0dHJpYnV0
ZU1vZGlmaWVkLCBlbGVtZW50KTsKKyAgICBhdXRvIHBhdXNlRGF0YSA9IGJ1aWxkUGF1c2VEYXRh
Rm9yRE9NQnJlYWtwb2ludChQcm90b2NvbDo6RE9NRGVidWdnZXI6OkRPTUJyZWFrcG9pbnRUeXBl
OjpBdHRyaWJ1dGVNb2RpZmllZCwgZWxlbWVudCk7CiAgICAgbV9kZWJ1Z2dlckFnZW50LT5icmVh
a1Byb2dyYW0oSW5zcGVjdG9yOjpEZWJ1Z2dlckZyb250ZW5kRGlzcGF0Y2hlcjo6UmVhc29uOjpE
T00sIFdURk1vdmUocGF1c2VEYXRhKSwgaXQtPnZhbHVlLmNvcHlSZWYoKSk7CiB9CiAKQEAgLTMz
MywyNyArMzIzLDI4IEBAIHZvaWQgUGFnZURPTURlYnVnZ2VyQWdlbnQ6OndpbGxJbnZhbGlkYXRl
U3R5bGVBdHRyKEVsZW1lbnQmIGVsZW1lbnQpCiAgICAgaWYgKGl0ID09IG1fZG9tQXR0cmlidXRl
TW9kaWZpZWRCcmVha3BvaW50cy5lbmQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byBw
YXVzZURhdGEgPSBidWlsZFBhdXNlRGF0YUZvckRPTUJyZWFrcG9pbnQoSW5zcGVjdG9yOjpQcm90
b2NvbDo6RE9NRGVidWdnZXI6OkRPTUJyZWFrcG9pbnRUeXBlOjpBdHRyaWJ1dGVNb2RpZmllZCwg
ZWxlbWVudCk7CisgICAgYXV0byBwYXVzZURhdGEgPSBidWlsZFBhdXNlRGF0YUZvckRPTUJyZWFr
cG9pbnQoUHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpET01CcmVha3BvaW50VHlwZTo6QXR0cmlidXRl
TW9kaWZpZWQsIGVsZW1lbnQpOwogICAgIG1fZGVidWdnZXJBZ2VudC0+YnJlYWtQcm9ncmFtKElu
c3BlY3Rvcjo6RGVidWdnZXJGcm9udGVuZERpc3BhdGNoZXI6OlJlYXNvbjo6RE9NLCBXVEZNb3Zl
KHBhdXNlRGF0YSksIGl0LT52YWx1ZS5jb3B5UmVmKCkpOwogfQogCi12b2lkIFBhZ2VET01EZWJ1
Z2dlckFnZW50OjpzZXRBbmltYXRpb25GcmFtZUJyZWFrcG9pbnQoRXJyb3JTdHJpbmcmIGVycm9y
U3RyaW5nLCBSZWZQdHI8SlNDOjpCcmVha3BvaW50PiYmIGJyZWFrcG9pbnQpCitib29sIFBhZ2VE
T01EZWJ1Z2dlckFnZW50OjpzZXRBbmltYXRpb25GcmFtZUJyZWFrcG9pbnQoUHJvdG9jb2w6OkVy
cm9yU3RyaW5nJiBlcnJvclN0cmluZywgUmVmUHRyPEpTQzo6QnJlYWtwb2ludD4mJiBicmVha3Bv
aW50KQogewogICAgIGlmICghbV9wYXVzZU9uQWxsQW5pbWF0aW9uRnJhbWVzQnJlYWtwb2ludCA9
PSAhYnJlYWtwb2ludCkgewogICAgICAgICBlcnJvclN0cmluZyA9IG1fcGF1c2VPbkFsbEFuaW1h
dGlvbkZyYW1lc0JyZWFrcG9pbnQgPyAiQnJlYWtwb2ludCBmb3IgQW5pbWF0aW9uRnJhbWUgYWxy
ZWFkeSBleGlzdHMiX3MgOiAiQnJlYWtwb2ludCBmb3IgQW5pbWF0aW9uRnJhbWUgbWlzc2luZyJf
czsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAg
bV9wYXVzZU9uQWxsQW5pbWF0aW9uRnJhbWVzQnJlYWtwb2ludCA9IFdURk1vdmUoYnJlYWtwb2lu
dCk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKLVJlZjxKU09OOjpPYmplY3Q+IFBhZ2VET01EZWJ1
Z2dlckFnZW50OjpidWlsZFBhdXNlRGF0YUZvckRPTUJyZWFrcG9pbnQoSW5zcGVjdG9yOjpQcm90
b2NvbDo6RE9NRGVidWdnZXI6OkRPTUJyZWFrcG9pbnRUeXBlIGJyZWFrcG9pbnRUeXBlLCBOb2Rl
JiBicmVha3BvaW50T3duZXIpCitSZWY8SlNPTjo6T2JqZWN0PiBQYWdlRE9NRGVidWdnZXJBZ2Vu
dDo6YnVpbGRQYXVzZURhdGFGb3JET01CcmVha3BvaW50KFByb3RvY29sOjpET01EZWJ1Z2dlcjo6
RE9NQnJlYWtwb2ludFR5cGUgYnJlYWtwb2ludFR5cGUsIE5vZGUmIGJyZWFrcG9pbnRPd25lcikK
IHsKICAgICBBU1NFUlQobV9kZWJ1Z2dlckFnZW50LT5icmVha3BvaW50c0FjdGl2ZSgpKTsKICAg
ICBBU1NFUlQobV9kb21TdWJ0cmVlTW9kaWZpZWRCcmVha3BvaW50cy5jb250YWlucygmYnJlYWtw
b2ludE93bmVyKSB8fCBtX2RvbUF0dHJpYnV0ZU1vZGlmaWVkQnJlYWtwb2ludHMuY29udGFpbnMo
JmJyZWFrcG9pbnRPd25lcikgfHwgbV9kb21Ob2RlUmVtb3ZlZEJyZWFrcG9pbnRzLmNvbnRhaW5z
KCZicmVha3BvaW50T3duZXIpKTsKIAogICAgIGF1dG8gcGF1c2VEYXRhID0gSlNPTjo6T2JqZWN0
OjpjcmVhdGUoKTsKLSAgICBwYXVzZURhdGEtPnNldFN0cmluZygidHlwZSIsIEluc3BlY3Rvcjo6
UHJvdG9jb2w6Okluc3BlY3RvckhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKGJyZWFrcG9p
bnRUeXBlKSk7CisgICAgcGF1c2VEYXRhLT5zZXRTdHJpbmcoInR5cGUiLCBQcm90b2NvbDo6SGVs
cGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUoYnJlYWtwb2ludFR5cGUpKTsKICAgICBpZiAoYXV0
byogZG9tQWdlbnQgPSBtX2luc3RydW1lbnRpbmdBZ2VudHMucGVyc2lzdGVudERPTUFnZW50KCkp
IHsKICAgICAgICAgaWYgKGF1dG8gYnJlYWtwb2ludE93bmVyTm9kZUlkID0gZG9tQWdlbnQtPnB1
c2hOb2RlVG9Gcm9udGVuZCgmYnJlYWtwb2ludE93bmVyKSkKICAgICAgICAgICAgIHBhdXNlRGF0
YS0+c2V0SW50ZWdlcigibm9kZUlkIiwgYnJlYWtwb2ludE93bmVyTm9kZUlkKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlRE9NRGVidWdnZXJB
Z2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VET01EZWJ1
Z2dlckFnZW50LmgKaW5kZXggYWQwMWM2NzdlNWQyMjI1YTA2NWNmMDEwNDUxNTY5YjE3OTRkNjlh
OS4uZDg3MjgyOTI1ZWM2OTMxMGUwYmMwZTc4ODNjZGNhNTA4ZDEwMzUyMiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VET01EZWJ1Z2dlckFnZW50
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VET01EZWJ1
Z2dlckFnZW50LmgKQEAgLTM2LDIxICszNiwxOSBAQCBjbGFzcyBFbGVtZW50OwogY2xhc3MgRnJh
bWU7CiBjbGFzcyBOb2RlOwogCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQogY2xhc3Mg
UGFnZURPTURlYnVnZ2VyQWdlbnQgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yRE9NRGVidWdnZXJB
Z2VudCB7CiBwdWJsaWM6CiAgICAgUGFnZURPTURlYnVnZ2VyQWdlbnQoUGFnZUFnZW50Q29udGV4
dCYsIEluc3BlY3Rvcjo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudCopOwotICAgIH5QYWdlRE9NRGVi
dWdnZXJBZ2VudCgpIG92ZXJyaWRlOworICAgIH5QYWdlRE9NRGVidWdnZXJBZ2VudCgpOwogCi0g
ICAgYm9vbCBlbmFibGVkKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBlbmFibGVkKCkgY29u
c3Q7CiAKICAgICAvLyBET01EZWJ1Z2dlckJhY2tlbmREaXNwYXRjaGVySGFuZGxlcgotICAgIHZv
aWQgc2V0RE9NQnJlYWtwb2ludChFcnJvclN0cmluZyYsIGludCBub2RlSWQsIGNvbnN0IFN0cmlu
ZyYgdHlwZSwgY29uc3QgSlNPTjo6T2JqZWN0KiBvcHRpb25zKSBvdmVycmlkZTsKLSAgICB2b2lk
IHJlbW92ZURPTUJyZWFrcG9pbnQoRXJyb3JTdHJpbmcmLCBpbnQgbm9kZUlkLCBjb25zdCBTdHJp
bmcmIHR5cGUpIG92ZXJyaWRlOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5n
T3I8dm9pZD4gc2V0RE9NQnJlYWtwb2ludChJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJ
ZCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NRGVidWdnZXI6OkRPTUJyZWFrcG9pbnRUeXBlLCBS
ZWZQdHI8SlNPTjo6T2JqZWN0PiYmIG9wdGlvbnMpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8dm9pZD4gcmVtb3ZlRE9NQnJlYWtwb2ludChJbnNwZWN0b3I6OlByb3Rv
Y29sOjpET006Ok5vZGVJZCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NRGVidWdnZXI6OkRPTUJy
ZWFrcG9pbnRUeXBlKTsKIAogICAgIC8vIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbgotICAgIHZv
aWQgbWFpbkZyYW1lTmF2aWdhdGVkKCkgZmluYWw7CisgICAgdm9pZCBtYWluRnJhbWVOYXZpZ2F0
ZWQoKTsKICAgICB2b2lkIGZyYW1lRG9jdW1lbnRVcGRhdGVkKEZyYW1lJik7CiAgICAgdm9pZCB3
aWxsSW5zZXJ0RE9NTm9kZShOb2RlJiBwYXJlbnQpOwogICAgIHZvaWQgd2lsbFJlbW92ZURPTU5v
ZGUoTm9kZSYpOwpAQCAtNjEsMTAgKzU5LDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIGRpZEZpcmVB
bmltYXRpb25GcmFtZSgpOwogCiBwcml2YXRlOgotICAgIHZvaWQgZW5hYmxlKCkgb3ZlcnJpZGU7
Ci0gICAgdm9pZCBkaXNhYmxlKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBlbmFibGUoKTsKKyAgICB2
b2lkIGRpc2FibGUoKTsKIAotICAgIHZvaWQgc2V0QW5pbWF0aW9uRnJhbWVCcmVha3BvaW50KEVy
cm9yU3RyaW5nJiwgUmVmUHRyPEpTQzo6QnJlYWtwb2ludD4mJikgb3ZlcnJpZGU7CisgICAgYm9v
bCBzZXRBbmltYXRpb25GcmFtZUJyZWFrcG9pbnQoSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JT
dHJpbmcmLCBSZWZQdHI8SlNDOjpCcmVha3BvaW50PiYmKTsKIAogICAgIFJlZjxKU09OOjpPYmpl
Y3Q+IGJ1aWxkUGF1c2VEYXRhRm9yRE9NQnJlYWtwb2ludChJbnNwZWN0b3I6OlByb3RvY29sOjpE
T01EZWJ1Z2dlcjo6RE9NQnJlYWtwb2ludFR5cGUsIE5vZGUmIGJyZWFrcG9pbnRPd25lcik7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlRGVi
dWdnZXJBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFn
ZURlYnVnZ2VyQWdlbnQuY3BwCmluZGV4IDBjMjAzOTgyNzMzYjRlZThiYWJkMDU1OGZhMzNiMmEx
ZGM0ZjhmMjUuLjYxODcyNjhiZDI3NTE4MWU5OGY0NWVlMGZhN2UxNmE3NTA5YmMxNjAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlRGVidWdnZXJB
Z2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VE
ZWJ1Z2dlckFnZW50LmNwcApAQCAtNjgsMjYgKzY4LDI1IEBAIGJvb2wgUGFnZURlYnVnZ2VyQWdl
bnQ6OmVuYWJsZWQoKSBjb25zdAogICAgIHJldHVybiBtX2luc3RydW1lbnRpbmdBZ2VudHMuZW5h
YmxlZFBhZ2VEZWJ1Z2dlckFnZW50KCkgPT0gdGhpcyAmJiBXZWJEZWJ1Z2dlckFnZW50OjplbmFi
bGVkKCk7CiB9CiAKLXZvaWQgUGFnZURlYnVnZ2VyQWdlbnQ6OmV2YWx1YXRlT25DYWxsRnJhbWUo
RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGNhbGxGcmFtZUlkLCBjb25z
dCBTdHJpbmcmIGV4cHJlc3Npb24sIGNvbnN0IFN0cmluZyogb2JqZWN0R3JvdXAsIGNvbnN0IGJv
b2wqIGluY2x1ZGVDb21tYW5kTGluZUFQSSwgY29uc3QgYm9vbCogZG9Ob3RQYXVzZU9uRXhjZXB0
aW9uc0FuZE11dGVDb25zb2xlLCBjb25zdCBib29sKiByZXR1cm5CeVZhbHVlLCBjb25zdCBib29s
KiBnZW5lcmF0ZVByZXZpZXcsIGNvbnN0IGJvb2wqIHNhdmVSZXN1bHQsIGNvbnN0IGJvb2wqIGVt
dWxhdGVVc2VyR2VzdHVyZSwgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+
JiByZXN1bHQsIE9wdGlvbmFsPGJvb2w+JiB3YXNUaHJvd24sIE9wdGlvbmFsPGludD4mIHNhdmVk
UmVzdWx0SW5kZXgpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxzdGQ6OnR1cGxlPFJlZjxQcm90
b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiwgT3B0aW9uYWw8Ym9vbD4gLyogd2FzVGhyb3du
ICovLCBPcHRpb25hbDxpbnQ+IC8qIHNhdmVkUmVzdWx0SW5kZXggKi8+PiBQYWdlRGVidWdnZXJB
Z2VudDo6ZXZhbHVhdGVPbkNhbGxGcmFtZShjb25zdCBQcm90b2NvbDo6RGVidWdnZXI6OkNhbGxG
cmFtZUlkJiBjYWxsRnJhbWVJZCwgY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBjb25zdCBTdHJp
bmcmIG9iamVjdEdyb3VwLCBPcHRpb25hbDxib29sPiYmIGluY2x1ZGVDb21tYW5kTGluZUFQSSwg
T3B0aW9uYWw8Ym9vbD4mJiBkb05vdFBhdXNlT25FeGNlcHRpb25zQW5kTXV0ZUNvbnNvbGUsIE9w
dGlvbmFsPGJvb2w+JiYgcmV0dXJuQnlWYWx1ZSwgT3B0aW9uYWw8Ym9vbD4mJiBnZW5lcmF0ZVBy
ZXZpZXcsIE9wdGlvbmFsPGJvb2w+JiYgc2F2ZVJlc3VsdCwgT3B0aW9uYWw8Ym9vbD4mJiBlbXVs
YXRlVXNlckdlc3R1cmUpCiB7Ci0gICAgYXV0byBzaG91bGRFbXVsYXRlVXNlckdlc3R1cmUgPSBl
bXVsYXRlVXNlckdlc3R1cmUgJiYgKmVtdWxhdGVVc2VyR2VzdHVyZTsKLSAgICBVc2VyR2VzdHVy
ZUVtdWxhdGlvblNjb3BlIHVzZXJHZXN0dXJlU2NvcGUobV9pbnNwZWN0ZWRQYWdlLCBzaG91bGRF
bXVsYXRlVXNlckdlc3R1cmUpOworICAgIFVzZXJHZXN0dXJlRW11bGF0aW9uU2NvcGUgdXNlckdl
c3R1cmVTY29wZShtX2luc3BlY3RlZFBhZ2UsIGVtdWxhdGVVc2VyR2VzdHVyZSAmJiAqZW11bGF0
ZVVzZXJHZXN0dXJlKTsKIAotICAgIFdlYkRlYnVnZ2VyQWdlbnQ6OmV2YWx1YXRlT25DYWxsRnJh
bWUoZXJyb3JTdHJpbmcsIGNhbGxGcmFtZUlkLCBleHByZXNzaW9uLCBvYmplY3RHcm91cCwgaW5j
bHVkZUNvbW1hbmRMaW5lQVBJLCBkb05vdFBhdXNlT25FeGNlcHRpb25zQW5kTXV0ZUNvbnNvbGUs
IHJldHVybkJ5VmFsdWUsIGdlbmVyYXRlUHJldmlldywgc2F2ZVJlc3VsdCwgZW11bGF0ZVVzZXJH
ZXN0dXJlLCByZXN1bHQsIHdhc1Rocm93biwgc2F2ZWRSZXN1bHRJbmRleCk7CisgICAgcmV0dXJu
IFdlYkRlYnVnZ2VyQWdlbnQ6OmV2YWx1YXRlT25DYWxsRnJhbWUoY2FsbEZyYW1lSWQsIGV4cHJl
c3Npb24sIG9iamVjdEdyb3VwLCBXVEZNb3ZlKGluY2x1ZGVDb21tYW5kTGluZUFQSSksIFdURk1v
dmUoZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xlKSwgV1RGTW92ZShyZXR1cm5C
eVZhbHVlKSwgV1RGTW92ZShnZW5lcmF0ZVByZXZpZXcpLCBXVEZNb3ZlKHNhdmVSZXN1bHQpLCBX
VEZNb3ZlKGVtdWxhdGVVc2VyR2VzdHVyZSkpOwogfQogCi12b2lkIFBhZ2VEZWJ1Z2dlckFnZW50
OjplbmFibGUoKQordm9pZCBQYWdlRGVidWdnZXJBZ2VudDo6aW50ZXJuYWxFbmFibGUoKQogewog
ICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy5zZXRFbmFibGVkUGFnZURlYnVnZ2VyQWdlbnQodGhp
cyk7CiAKLSAgICBXZWJEZWJ1Z2dlckFnZW50OjplbmFibGUoKTsKKyAgICBXZWJEZWJ1Z2dlckFn
ZW50OjppbnRlcm5hbEVuYWJsZSgpOwogfQogCi12b2lkIFBhZ2VEZWJ1Z2dlckFnZW50OjpkaXNh
YmxlKGJvb2wgaXNCZWluZ0Rlc3Ryb3llZCkKK3ZvaWQgUGFnZURlYnVnZ2VyQWdlbnQ6OmludGVy
bmFsRGlzYWJsZShib29sIGlzQmVpbmdEZXN0cm95ZWQpCiB7CiAgICAgbV9pbnN0cnVtZW50aW5n
QWdlbnRzLnNldEVuYWJsZWRQYWdlRGVidWdnZXJBZ2VudChudWxscHRyKTsKIAotICAgIFdlYkRl
YnVnZ2VyQWdlbnQ6OmRpc2FibGUoaXNCZWluZ0Rlc3Ryb3llZCk7CisgICAgV2ViRGVidWdnZXJB
Z2VudDo6aW50ZXJuYWxEaXNhYmxlKGlzQmVpbmdEZXN0cm95ZWQpOwogfQogCiBTdHJpbmcgUGFn
ZURlYnVnZ2VyQWdlbnQ6OnNvdXJjZU1hcFVSTEZvclNjcmlwdChjb25zdCBKU0M6OkRlYnVnZ2Vy
OjpTY3JpcHQmIHNjcmlwdCkKQEAgLTEyNiw3ICsxMjUsNyBAQCB2b2lkIFBhZ2VEZWJ1Z2dlckFn
ZW50OjpicmVha3BvaW50QWN0aW9uTG9nKEpTQzo6SlNHbG9iYWxPYmplY3QqIGxleGljYWxHbG9i
YWxPYgogICAgIG1faW5zcGVjdGVkUGFnZS5jb25zb2xlKCkuYWRkTWVzc2FnZShNZXNzYWdlU291
cmNlOjpKUywgTWVzc2FnZUxldmVsOjpMb2csIG1lc3NhZ2UsIGNyZWF0ZVNjcmlwdENhbGxTdGFj
ayhsZXhpY2FsR2xvYmFsT2JqZWN0KSk7CiB9CiAKLUluamVjdGVkU2NyaXB0IFBhZ2VEZWJ1Z2dl
ckFnZW50OjppbmplY3RlZFNjcmlwdEZvckV2YWwoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBj
b25zdCBpbnQqIGV4ZWN1dGlvbkNvbnRleHRJZCkKK0luamVjdGVkU2NyaXB0IFBhZ2VEZWJ1Z2dl
ckFnZW50OjppbmplY3RlZFNjcmlwdEZvckV2YWwoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJv
clN0cmluZywgT3B0aW9uYWw8UHJvdG9jb2w6OlJ1bnRpbWU6OkV4ZWN1dGlvbkNvbnRleHRJZD4m
JiBleGVjdXRpb25Db250ZXh0SWQpCiB7CiAgICAgaWYgKCFleGVjdXRpb25Db250ZXh0SWQpIHsK
ICAgICAgICAgSlNDOjpKU0dsb2JhbE9iamVjdCogc2NyaXB0U3RhdGUgPSBtYWluV29ybGRFeGVj
U3RhdGUoJm1faW5zcGVjdGVkUGFnZS5tYWluRnJhbWUoKSk7CkBAIC0xNTMsOCArMTUyLDcgQEAg
dm9pZCBQYWdlRGVidWdnZXJBZ2VudDo6bWFpbkZyYW1lU3RhcnRlZExvYWRpbmcoKQogICAgIGlm
IChpc1BhdXNlZCgpKSB7CiAgICAgICAgIHNldFN1cHByZXNzQWxsUGF1c2VzKHRydWUpOwogCi0g
ICAgICAgIEVycm9yU3RyaW5nIGlnbm9yZWQ7Ci0gICAgICAgIHJlc3VtZShpZ25vcmVkKTsKKyAg
ICAgICAgcmVzdW1lKCk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZURlYnVnZ2VyQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlRGVidWdnZXJBZ2VudC5oCmluZGV4IDRjMjdkZDFj
NzRiMTJlODU3YjZjZjY1MTBmODk5NzYwN2ExNjYyMDcuLmJmZWJlOTM2MmM0OTM1ZTEwMWUxYTFm
MTNjN2EwMmJlMTUzYzllYjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9h
Z2VudHMvcGFnZS9QYWdlRGVidWdnZXJBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9hZ2VudHMvcGFnZS9QYWdlRGVidWdnZXJBZ2VudC5oCkBAIC00NSwxNCArNDUsMTQgQEAg
Y2xhc3MgUGFnZURlYnVnZ2VyQWdlbnQgZmluYWwgOiBwdWJsaWMgV2ViRGVidWdnZXJBZ2VudCB7
CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgUGFnZURlYnVnZ2Vy
QWdlbnQoUGFnZUFnZW50Q29udGV4dCYpOwotICAgIH5QYWdlRGVidWdnZXJBZ2VudCgpIG92ZXJy
aWRlOwotICAgIGJvb2wgZW5hYmxlZCgpIGNvbnN0IGZpbmFsOworICAgIH5QYWdlRGVidWdnZXJB
Z2VudCgpOworICAgIGJvb2wgZW5hYmxlZCgpIGNvbnN0OwogCiAgICAgLy8gRGVidWdnZXJCYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXIKLSAgICB2b2lkIGV2YWx1YXRlT25DYWxsRnJhbWUoRXJyb3JT
dHJpbmcmLCBjb25zdCBTdHJpbmcmIGNhbGxGcmFtZUlkLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Np
b24sIGNvbnN0IFN0cmluZyogb2JqZWN0R3JvdXAsIGNvbnN0IGJvb2wqIGluY2x1ZGVDb21tYW5k
TGluZUFQSSwgY29uc3QgYm9vbCogZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xl
LCBjb25zdCBib29sKiByZXR1cm5CeVZhbHVlLCBjb25zdCBib29sKiBnZW5lcmF0ZVByZXZpZXcs
IGNvbnN0IGJvb2wqIHNhdmVSZXN1bHQsIGNvbnN0IGJvb2wqIGVtdWxhdGVVc2VyR2VzdHVyZSwg
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3Vs
dCwgT3B0aW9uYWw8Ym9vbD4mIHdhc1Rocm93biwgT3B0aW9uYWw8aW50PiYgc2F2ZWRSZXN1bHRJ
bmRleCkgb3ZlcnJpZGU7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxz
dGQ6OnR1cGxlPFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+
LCBPcHRpb25hbDxib29sPiAvKiB3YXNUaHJvd24gKi8sIE9wdGlvbmFsPGludD4gLyogc2F2ZWRS
ZXN1bHRJbmRleCAqLz4+IGV2YWx1YXRlT25DYWxsRnJhbWUoY29uc3QgSW5zcGVjdG9yOjpQcm90
b2NvbDo6RGVidWdnZXI6OkNhbGxGcmFtZUlkJiwgY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBj
b25zdCBTdHJpbmcmIG9iamVjdEdyb3VwLCBPcHRpb25hbDxib29sPiYmIGluY2x1ZGVDb21tYW5k
TGluZUFQSSwgT3B0aW9uYWw8Ym9vbD4mJiBkb05vdFBhdXNlT25FeGNlcHRpb25zQW5kTXV0ZUNv
bnNvbGUsIE9wdGlvbmFsPGJvb2w+JiYgcmV0dXJuQnlWYWx1ZSwgT3B0aW9uYWw8Ym9vbD4mJiBn
ZW5lcmF0ZVByZXZpZXcsIE9wdGlvbmFsPGJvb2w+JiYgc2F2ZVJlc3VsdCwgT3B0aW9uYWw8Ym9v
bD4mJiBlbXVsYXRlVXNlckdlc3R1cmUpOwogCiAgICAgLy8gSlNDOjpEZWJ1Z2dlcjo6T2JzZXJ2
ZXIKLSAgICB2b2lkIGJyZWFrcG9pbnRBY3Rpb25Mb2coSlNDOjpKU0dsb2JhbE9iamVjdCosIGNv
bnN0IFN0cmluZyYgZGF0YSkgZmluYWw7CisgICAgdm9pZCBicmVha3BvaW50QWN0aW9uTG9nKEpT
Qzo6SlNHbG9iYWxPYmplY3QqLCBjb25zdCBTdHJpbmcmIGRhdGEpOwogCiAgICAgLy8gSW5zcGVj
dG9ySW5zdHJ1bWVudGF0aW9uCiAgICAgdm9pZCBkaWRDbGVhcldpbmRvd09iamVjdEluV29ybGQo
RnJhbWUmLCBET01XcmFwcGVyV29ybGQmKTsKQEAgLTY0LDE1ICs2NCwxNSBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBkaWRDYW5jZWxBbmltYXRpb25GcmFtZShpbnQgY2FsbGJhY2tJZCk7CiAKIHByaXZh
dGU6Ci0gICAgdm9pZCBlbmFibGUoKSBvdmVycmlkZTsKLSAgICB2b2lkIGRpc2FibGUoYm9vbCBp
c0JlaW5nRGVzdHJveWVkKSBvdmVycmlkZTsKKyAgICB2b2lkIGludGVybmFsRW5hYmxlKCk7Cisg
ICAgdm9pZCBpbnRlcm5hbERpc2FibGUoYm9vbCBpc0JlaW5nRGVzdHJveWVkKTsKIAotICAgIFN0
cmluZyBzb3VyY2VNYXBVUkxGb3JTY3JpcHQoY29uc3QgSlNDOjpEZWJ1Z2dlcjo6U2NyaXB0Jikg
b3ZlcnJpZGU7CisgICAgU3RyaW5nIHNvdXJjZU1hcFVSTEZvclNjcmlwdChjb25zdCBKU0M6OkRl
YnVnZ2VyOjpTY3JpcHQmKTsKIAotICAgIHZvaWQgbXV0ZUNvbnNvbGUoKSBvdmVycmlkZTsKLSAg
ICB2b2lkIHVubXV0ZUNvbnNvbGUoKSBvdmVycmlkZTsKKyAgICB2b2lkIG11dGVDb25zb2xlKCk7
CisgICAgdm9pZCB1bm11dGVDb25zb2xlKCk7CiAKLSAgICBJbnNwZWN0b3I6OkluamVjdGVkU2Ny
aXB0IGluamVjdGVkU2NyaXB0Rm9yRXZhbChFcnJvclN0cmluZyYsIGNvbnN0IGludCogZXhlY3V0
aW9uQ29udGV4dElkKSBvdmVycmlkZTsKKyAgICBJbnNwZWN0b3I6OkluamVjdGVkU2NyaXB0IGlu
amVjdGVkU2NyaXB0Rm9yRXZhbChJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZyYsIE9w
dGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkV4ZWN1dGlvbkNvbnRleHRJZD4m
Jik7CiAKICAgICBQYWdlJiBtX2luc3BlY3RlZFBhZ2U7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VIZWFwQWdlbnQuY3BwIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VIZWFwQWdlbnQuY3BwCmluZGV4IDQ5
MjE4ZWYxMjgzZWJkNGRkNzU0MjExMzY5YjM0OWE0ODI1MjJkOTguLjQwMzZhMjNjNjg1MDdlNTk0
YWIyZTk3NGY1YjYyZGI4NjdjNzg3NjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9hZ2VudHMvcGFnZS9QYWdlSGVhcEFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZUhlYXBBZ2VudC5jcHAKQEAgLTM5LDE2ICszOSwyMCBA
QCBQYWdlSGVhcEFnZW50OjpQYWdlSGVhcEFnZW50KFBhZ2VBZ2VudENvbnRleHQmIGNvbnRleHQp
CiAKIFBhZ2VIZWFwQWdlbnQ6On5QYWdlSGVhcEFnZW50KCkgPSBkZWZhdWx0OwogCi12b2lkIFBh
Z2VIZWFwQWdlbnQ6OmVuYWJsZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCitQcm90b2NvbDo6
RXJyb3JTdHJpbmdPcjx2b2lkPiBQYWdlSGVhcEFnZW50OjplbmFibGUoKQogewotICAgIFdlYkhl
YXBBZ2VudDo6ZW5hYmxlKGVycm9yU3RyaW5nKTsKKyAgICBhdXRvIHJlc3VsdCA9IFdlYkhlYXBB
Z2VudDo6ZW5hYmxlKCk7CisKICAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMuc2V0RW5hYmxlZFBh
Z2VIZWFwQWdlbnQodGhpcyk7CisKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIFBhZ2VI
ZWFwQWdlbnQ6OmRpc2FibGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nKQorUHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8dm9pZD4gUGFnZUhlYXBBZ2VudDo6ZGlzYWJsZSgpCiB7CiAgICAgbV9pbnN0
cnVtZW50aW5nQWdlbnRzLnNldEVuYWJsZWRQYWdlSGVhcEFnZW50KG51bGxwdHIpOwotICAgIFdl
YkhlYXBBZ2VudDo6ZGlzYWJsZShlcnJvclN0cmluZyk7CisKKyAgICByZXR1cm4gV2ViSGVhcEFn
ZW50OjpkaXNhYmxlKCk7CiB9CiAKIHZvaWQgUGFnZUhlYXBBZ2VudDo6bWFpbkZyYW1lTmF2aWdh
dGVkKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9Q
YWdlSGVhcEFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFn
ZUhlYXBBZ2VudC5oCmluZGV4IDFiZDZjYTBmYzllZjE1YTFkN2EyNTI4NDI5NWE4ZTE5ZTg1ZjEw
ZGUuLmYyNmZmODRiMzhiOTRjOTcyZDlmNDZjYzljNGE3NGVhZmY3NGM3YWIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlSGVhcEFnZW50LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VIZWFwQWdlbnQuaApA
QCAtMzEsMTggKzMxLDE2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdHlwZWRlZiBTdHJp
bmcgRXJyb3JTdHJpbmc7Ci0KIGNsYXNzIFBhZ2VIZWFwQWdlbnQgZmluYWwgOiBwdWJsaWMgV2Vi
SGVhcEFnZW50IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShQYWdlSGVhcEFnZW50KTsKICAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBQYWdlSGVhcEFnZW50KFBh
Z2VBZ2VudENvbnRleHQmKTsKLSAgICB+UGFnZUhlYXBBZ2VudCgpIG92ZXJyaWRlOworICAgIH5Q
YWdlSGVhcEFnZW50KCk7CiAKICAgICAvLyBIZWFwQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyCi0g
ICAgdm9pZCBlbmFibGUoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2b2lkIGRpc2FibGUo
RXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0
cmluZ09yPHZvaWQ+IGVuYWJsZSgpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3Ry
aW5nT3I8dm9pZD4gZGlzYWJsZSgpOwogCiAgICAgLy8gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9u
CiAgICAgdm9pZCBtYWluRnJhbWVOYXZpZ2F0ZWQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlTmV0d29ya0FnZW50LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlTmV0d29ya0FnZW50LmNwcAppbmRleCAy
YzY1YjgxMDQ5NGJiZWI3M2Q1MzRlNjYyYWMzMTE5M2Y0MGMzYzY4Li45ZmUxMzk5YzNiNzI2MjM1
NTJiNDIzYjAwMzNlMzNmOTgxYzNiM2Q0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZU5ldHdvcmtBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VOZXR3b3JrQWdlbnQuY3BwCkBAIC00Nyw3ICs0
Nyw3IEBAIFBhZ2VOZXR3b3JrQWdlbnQ6OlBhZ2VOZXR3b3JrQWdlbnQoUGFnZUFnZW50Q29udGV4
dCYgY29udGV4dCkKIAogUGFnZU5ldHdvcmtBZ2VudDo6flBhZ2VOZXR3b3JrQWdlbnQoKSA9IGRl
ZmF1bHQ7CiAKLVN0cmluZyBQYWdlTmV0d29ya0FnZW50Ojpsb2FkZXJJZGVudGlmaWVyKERvY3Vt
ZW50TG9hZGVyKiBsb2FkZXIpCitQcm90b2NvbDo6TmV0d29yazo6TG9hZGVySWQgUGFnZU5ldHdv
cmtBZ2VudDo6bG9hZGVySWRlbnRpZmllcihEb2N1bWVudExvYWRlciogbG9hZGVyKQogewogICAg
IGlmIChsb2FkZXIpIHsKICAgICAgICAgaWYgKGF1dG8qIHBhZ2VBZ2VudCA9IG1faW5zdHJ1bWVu
dGluZ0FnZW50cy5lbmFibGVkUGFnZUFnZW50KCkpCkBAIC01Niw3ICs1Niw3IEBAIFN0cmluZyBQ
YWdlTmV0d29ya0FnZW50Ojpsb2FkZXJJZGVudGlmaWVyKERvY3VtZW50TG9hZGVyKiBsb2FkZXIp
CiAgICAgcmV0dXJuIHsgfTsKIH0KIAotU3RyaW5nIFBhZ2VOZXR3b3JrQWdlbnQ6OmZyYW1lSWRl
bnRpZmllcihEb2N1bWVudExvYWRlciogbG9hZGVyKQorUHJvdG9jb2w6Ok5ldHdvcms6OkZyYW1l
SWQgUGFnZU5ldHdvcmtBZ2VudDo6ZnJhbWVJZGVudGlmaWVyKERvY3VtZW50TG9hZGVyKiBsb2Fk
ZXIpCiB7CiAgICAgaWYgKGxvYWRlcikgewogICAgICAgICBpZiAoYXV0byogcGFnZUFnZW50ID0g
bV9pbnN0cnVtZW50aW5nQWdlbnRzLmVuYWJsZWRQYWdlQWdlbnQoKSkKQEAgLTkxLDEyICs5MSwx
MiBAQCBWZWN0b3I8V2ViU29ja2V0Kj4gUGFnZU5ldHdvcmtBZ2VudDo6YWN0aXZlV2ViU29ja2V0
cyhjb25zdCBMb2NrSG9sZGVyJiBsb2NrKQogICAgIHJldHVybiB3ZWJTb2NrZXRzOwogfQogCi12
b2lkIFBhZ2VOZXR3b3JrQWdlbnQ6OnNldFJlc291cmNlQ2FjaGluZ0Rpc2FibGVkKGJvb2wgZGlz
YWJsZWQpCit2b2lkIFBhZ2VOZXR3b3JrQWdlbnQ6OnNldFJlc291cmNlQ2FjaGluZ0Rpc2FibGVk
SW50ZXJhbChib29sIGRpc2FibGVkKQogewogICAgIG1faW5zcGVjdGVkUGFnZS5zZXRSZXNvdXJj
ZUNhY2hpbmdEaXNhYmxlZEJ5V2ViSW5zcGVjdG9yKGRpc2FibGVkKTsKIH0KIAotU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogUGFnZU5ldHdvcmtBZ2VudDo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dChF
cnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgZnJhbWVJZCkKK1NjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIFBhZ2VOZXR3b3JrQWdlbnQ6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
UHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgUHJvdG9jb2w6Ok5ldHdv
cms6OkZyYW1lSWQmIGZyYW1lSWQpCiB7CiAgICAgYXV0byogcGFnZUFnZW50ID0gbV9pbnN0cnVt
ZW50aW5nQWdlbnRzLmVuYWJsZWRQYWdlQWdlbnQoKTsKICAgICBpZiAoIXBhZ2VBZ2VudCkgewpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VOZXR3
b3JrQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlTmV0
d29ya0FnZW50LmgKaW5kZXggYmVkY2UzZThkYmI3YzlkMjJiMmUxYjk3MmQyMmIyYTViY2U0MGFj
YS4uMDJkNGJlYjIxYzUyZmMxYjM0NjcyZGNlYWEzNzUwNDUxYmU1MjQxZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VOZXR3b3JrQWdlbnQuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZU5ldHdvcmtBZ2Vu
dC5oCkBAIC0zNiwxNSArMzYsMTUgQEAgY2xhc3MgUGFnZU5ldHdvcmtBZ2VudCBmaW5hbCA6IHB1
YmxpYyBJbnNwZWN0b3JOZXR3b3JrQWdlbnQgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OwogcHVibGljOgogICAgIFBhZ2VOZXR3b3JrQWdlbnQoUGFnZUFnZW50Q29udGV4dCYpOwotICAg
IH5QYWdlTmV0d29ya0FnZW50KCkgb3ZlcnJpZGU7CisgICAgflBhZ2VOZXR3b3JrQWdlbnQoKTsK
IAogcHJpdmF0ZToKLSAgICBTdHJpbmcgbG9hZGVySWRlbnRpZmllcihEb2N1bWVudExvYWRlciop
IG92ZXJyaWRlOwotICAgIFN0cmluZyBmcmFtZUlkZW50aWZpZXIoRG9jdW1lbnRMb2FkZXIqKSBv
dmVycmlkZTsKLSAgICBWZWN0b3I8V2ViU29ja2V0Kj4gYWN0aXZlV2ViU29ja2V0cyhjb25zdCBM
b2NrSG9sZGVyJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRSZXNvdXJjZUNhY2hpbmdEaXNhYmxl
ZChib29sKSBvdmVycmlkZTsKLSAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVj
dXRpb25Db250ZXh0KEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBmcmFtZUlkKSBvdmVycmlk
ZTsKLSAgICBib29sIHNob3VsZEZvcmNlQnVmZmVyaW5nTmV0d29ya1Jlc291cmNlRGF0YSgpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6
TmV0d29yazo6TG9hZGVySWQgbG9hZGVySWRlbnRpZmllcihEb2N1bWVudExvYWRlciopOworICAg
IEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OkZyYW1lSWQgZnJhbWVJZGVudGlmaWVyKERv
Y3VtZW50TG9hZGVyKik7CisgICAgVmVjdG9yPFdlYlNvY2tldCo+IGFjdGl2ZVdlYlNvY2tldHMo
Y29uc3QgTG9ja0hvbGRlciYpOworICAgIHZvaWQgc2V0UmVzb3VyY2VDYWNoaW5nRGlzYWJsZWRJ
bnRlcmFsKGJvb2wpOworICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBjb25zdCBJbnNwZWN0
b3I6OlByb3RvY29sOjpOZXR3b3JrOjpGcmFtZUlkJik7CisgICAgYm9vbCBzaG91bGRGb3JjZUJ1
ZmZlcmluZ05ldHdvcmtSZXNvdXJjZURhdGEoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCiAg
ICAgUGFnZSYgbV9pbnNwZWN0ZWRQYWdlOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlUnVudGltZUFnZW50LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlUnVudGltZUFnZW50LmNwcAppbmRleCBlOGFi
NWY0Yzg5YWRlNGZjODVjMDQyYjQzNDMzYjcyNjU2M2FiZGQyLi4wMGU2OWYxYWEyZTNmOGVhMmY0
NDVlOGRkNDQ2ZGQxNmVhNjM2M2RmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvYWdlbnRzL3BhZ2UvUGFnZVJ1bnRpbWVBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VSdW50aW1lQWdlbnQuY3BwCkBAIC01MiwxMSArNTIs
NiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CiAK
LXN0YXRpYyBib29sIGFzQm9vbChjb25zdCBib29sKiBiKQotewotICAgIHJldHVybiBiICYmICpi
OwotfQotCiBQYWdlUnVudGltZUFnZW50OjpQYWdlUnVudGltZUFnZW50KFBhZ2VBZ2VudENvbnRl
eHQmIGNvbnRleHQpCiAgICAgOiBJbnNwZWN0b3JSdW50aW1lQWdlbnQoY29udGV4dCkKICAgICAs
IG1fZnJvbnRlbmREaXNwYXRjaGVyKG1ha2VVbmlxdWU8SW5zcGVjdG9yOjpSdW50aW1lRnJvbnRl
bmREaXNwYXRjaGVyPihjb250ZXh0LmZyb250ZW5kUm91dGVyKSkKQEAgLTY4LDI3ICs2MywyOSBA
QCBQYWdlUnVudGltZUFnZW50OjpQYWdlUnVudGltZUFnZW50KFBhZ2VBZ2VudENvbnRleHQmIGNv
bnRleHQpCiAKIFBhZ2VSdW50aW1lQWdlbnQ6On5QYWdlUnVudGltZUFnZW50KCkgPSBkZWZhdWx0
OwogCi12b2lkIFBhZ2VSdW50aW1lQWdlbnQ6OmVuYWJsZShFcnJvclN0cmluZyYgZXJyb3JTdHJp
bmcpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBQYWdlUnVudGltZUFnZW50OjplbmFi
bGUoKQogewogICAgIGlmIChtX2luc3RydW1lbnRpbmdBZ2VudHMuZW5hYmxlZFBhZ2VSdW50aW1l
QWdlbnQoKSA9PSB0aGlzKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB7IH07CiAK
LSAgICBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmVuYWJsZShlcnJvclN0cmluZyk7Ci0gICAgaWYg
KCFlcnJvclN0cmluZy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKKyAgICBhdXRvIHJlc3Vs
dCA9IEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6ZW5hYmxlKCk7CisgICAgaWYgKCFyZXN1bHQpCisg
ICAgICAgIHJldHVybiByZXN1bHQ7CiAKICAgICAvLyBSZXBvcnQgaW5pdGlhbCBjb250ZXh0cyBi
ZWZvcmUgZW5hYmxpbmcgaW5zdHJ1bWVudGF0aW9uIGFzIHRoZSByZXBvcnRpbmcKICAgICAvLyBj
YW4gZm9yY2UgY3JlYXRpb24gb2Ygc2NyaXB0IHN0YXRlIHdoaWNoIGNvdWxkIHJlc3VsdCBpbiBk
dXBsaWNhdGUgbm90aWZpY2F0aW9ucy4KICAgICByZXBvcnRFeGVjdXRpb25Db250ZXh0Q3JlYXRp
b24oKTsKIAogICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy5zZXRFbmFibGVkUGFnZVJ1bnRpbWVB
Z2VudCh0aGlzKTsKKworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgUGFnZVJ1bnRpbWVB
Z2VudDo6ZGlzYWJsZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCitQcm90b2NvbDo6RXJyb3JT
dHJpbmdPcjx2b2lkPiBQYWdlUnVudGltZUFnZW50OjpkaXNhYmxlKCkKIHsKICAgICBtX2luc3Ry
dW1lbnRpbmdBZ2VudHMuc2V0RW5hYmxlZFBhZ2VSdW50aW1lQWdlbnQobnVsbHB0cik7CiAKLSAg
ICBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmRpc2FibGUoZXJyb3JTdHJpbmcpOworICAgIHJldHVy
biBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmRpc2FibGUoKTsKIH0KIAogdm9pZCBQYWdlUnVudGlt
ZUFnZW50OjpmcmFtZU5hdmlnYXRlZChGcmFtZSYgZnJhbWUpCkBAIC0xMDYsNyArMTAzLDcgQEAg
dm9pZCBQYWdlUnVudGltZUFnZW50OjpkaWRDbGVhcldpbmRvd09iamVjdEluV29ybGQoRnJhbWUm
IGZyYW1lLCBET01XcmFwcGVyV29ybGQKICAgICBub3RpZnlDb250ZXh0Q3JlYXRlZChwYWdlQWdl
bnQtPmZyYW1lSWQoJmZyYW1lKSwgZnJhbWUuc2NyaXB0KCkuZ2xvYmFsT2JqZWN0KHdvcmxkKSwg
d29ybGQpOwogfQogCi1JbmplY3RlZFNjcmlwdCBQYWdlUnVudGltZUFnZW50OjppbmplY3RlZFNj
cmlwdEZvckV2YWwoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBpbnQqIGV4ZWN1dGlv
bkNvbnRleHRJZCkKK0luamVjdGVkU2NyaXB0IFBhZ2VSdW50aW1lQWdlbnQ6OmluamVjdGVkU2Ny
aXB0Rm9yRXZhbChQcm90b2NvbDo6RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBPcHRpb25hbDxQ
cm90b2NvbDo6UnVudGltZTo6RXhlY3V0aW9uQ29udGV4dElkPiYmIGV4ZWN1dGlvbkNvbnRleHRJ
ZCkKIHsKICAgICBpZiAoIWV4ZWN1dGlvbkNvbnRleHRJZCkgewogICAgICAgICBKU0M6OkpTR2xv
YmFsT2JqZWN0KiBzY3JpcHRTdGF0ZSA9IG1haW5Xb3JsZEV4ZWNTdGF0ZSgmbV9pbnNwZWN0ZWRQ
YWdlLm1haW5GcmFtZSgpKTsKQEAgLTE1OSwyMiArMTU2LDIyIEBAIHZvaWQgUGFnZVJ1bnRpbWVB
Z2VudDo6cmVwb3J0RXhlY3V0aW9uQ29udGV4dENyZWF0aW9uKCkKICAgICB9CiB9CiAKLXN0YXRp
YyBJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0VHlwZSB0b1By
b3RvY29sKERPTVdyYXBwZXJXb3JsZDo6VHlwZSB0eXBlKQorc3RhdGljIFByb3RvY29sOjpSdW50
aW1lOjpFeGVjdXRpb25Db250ZXh0VHlwZSB0b1Byb3RvY29sKERPTVdyYXBwZXJXb3JsZDo6VHlw
ZSB0eXBlKQogewogICAgIHN3aXRjaCAodHlwZSkgewogICAgIGNhc2UgRE9NV3JhcHBlcldvcmxk
OjpUeXBlOjpOb3JtYWw6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50
aW1lOjpFeGVjdXRpb25Db250ZXh0VHlwZTo6Tm9ybWFsOworICAgICAgICByZXR1cm4gUHJvdG9j
b2w6OlJ1bnRpbWU6OkV4ZWN1dGlvbkNvbnRleHRUeXBlOjpOb3JtYWw7CiAgICAgY2FzZSBET01X
cmFwcGVyV29ybGQ6OlR5cGU6OlVzZXI6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0VHlwZTo6VXNlcjsKKyAgICAgICAgcmV0dXJu
IFByb3RvY29sOjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0VHlwZTo6VXNlcjsKICAgICBjYXNl
IERPTVdyYXBwZXJXb3JsZDo6VHlwZTo6SW50ZXJuYWw6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0
b3I6OlByb3RvY29sOjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0VHlwZTo6SW50ZXJuYWw7Cisg
ICAgICAgIHJldHVybiBQcm90b2NvbDo6UnVudGltZTo6RXhlY3V0aW9uQ29udGV4dFR5cGU6Oklu
dGVybmFsOwogICAgIH0KIAogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBJ
bnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0VHlwZTo6SW50ZXJu
YWw7CisgICAgcmV0dXJuIFByb3RvY29sOjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0VHlwZTo6
SW50ZXJuYWw7CiB9CiAKLXZvaWQgUGFnZVJ1bnRpbWVBZ2VudDo6bm90aWZ5Q29udGV4dENyZWF0
ZWQoY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIGNvbnN0IERPTVdyYXBwZXJXb3JsZCYgd29ybGQsIFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0
eU9yaWdpbikKK3ZvaWQgUGFnZVJ1bnRpbWVBZ2VudDo6bm90aWZ5Q29udGV4dENyZWF0ZWQoY29u
c3QgUHJvdG9jb2w6Ok5ldHdvcms6OkZyYW1lSWQmIGZyYW1lSWQsIEpTQzo6SlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgY29uc3QgRE9NV3JhcHBlcldvcmxkJiB3b3JsZCwgU2VjdXJpdHlP
cmlnaW4qIHNlY3VyaXR5T3JpZ2luKQogewogICAgIGF1dG8gaW5qZWN0ZWRTY3JpcHQgPSBpbmpl
Y3RlZFNjcmlwdE1hbmFnZXIoKS5pbmplY3RlZFNjcmlwdEZvcihnbG9iYWxPYmplY3QpOwogICAg
IGlmIChpbmplY3RlZFNjcmlwdC5oYXNOb1ZhbHVlKCkpCkBAIC0xODQsNyArMTgxLDcgQEAgdm9p
ZCBQYWdlUnVudGltZUFnZW50Ojpub3RpZnlDb250ZXh0Q3JlYXRlZChjb25zdCBTdHJpbmcmIGZy
YW1lSWQsIEpTQzo6SlNHbG9iYWwKICAgICBpZiAobmFtZS5pc0VtcHR5KCkgJiYgc2VjdXJpdHlP
cmlnaW4pCiAgICAgICAgIG5hbWUgPSBzZWN1cml0eU9yaWdpbi0+dG9SYXdTdHJpbmcoKTsKIAot
ICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5leGVjdXRpb25Db250ZXh0Q3JlYXRlZChJbnNwZWN0
b3I6OlByb3RvY29sOjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0RGVzY3JpcHRpb246OmNyZWF0
ZSgpCisgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPmV4ZWN1dGlvbkNvbnRleHRDcmVhdGVkKFBy
b3RvY29sOjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0RGVzY3JpcHRpb246OmNyZWF0ZSgpCiAg
ICAgICAgIC5zZXRJZChpbmplY3RlZFNjcmlwdE1hbmFnZXIoKS5pbmplY3RlZFNjcmlwdElkRm9y
KGdsb2JhbE9iamVjdCkpCiAgICAgICAgIC5zZXRUeXBlKHRvUHJvdG9jb2wod29ybGQudHlwZSgp
KSkKICAgICAgICAgLnNldE5hbWUobmFtZSkKQEAgLTE5MiwxNiArMTg5LDE2IEBAIHZvaWQgUGFn
ZVJ1bnRpbWVBZ2VudDo6bm90aWZ5Q29udGV4dENyZWF0ZWQoY29uc3QgU3RyaW5nJiBmcmFtZUlk
LCBKU0M6OkpTR2xvYmFsCiAgICAgICAgIC5yZWxlYXNlKCkpOwogfQogCi12b2lkIFBhZ2VSdW50
aW1lQWdlbnQ6OmV2YWx1YXRlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5n
JiBleHByZXNzaW9uLCBjb25zdCBTdHJpbmcqIG9iamVjdEdyb3VwLCBjb25zdCBib29sKiBpbmNs
dWRlQ29tbWFuZExpbmVBUEksIGNvbnN0IGJvb2wqIGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRN
dXRlQ29uc29sZSwgY29uc3QgaW50KiBleGVjdXRpb25Db250ZXh0SWQsIGNvbnN0IGJvb2wqIHJl
dHVybkJ5VmFsdWUsIGNvbnN0IGJvb2wqIGdlbmVyYXRlUHJldmlldywgY29uc3QgYm9vbCogc2F2
ZVJlc3VsdCwgY29uc3QgYm9vbCogZW11bGF0ZVVzZXJHZXN0dXJlLCBSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0LCBPcHRpb25hbDxib29s
PiYgd2FzVGhyb3duLCBPcHRpb25hbDxpbnQ+JiBzYXZlZFJlc3VsdEluZGV4KQorUHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8c3RkOjp0dXBsZTxSZWY8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9i
amVjdD4sIE9wdGlvbmFsPGJvb2w+IC8qIHdhc1Rocm93biAqLywgT3B0aW9uYWw8aW50PiAvKiBz
YXZlZFJlc3VsdEluZGV4ICovPj4gUGFnZVJ1bnRpbWVBZ2VudDo6ZXZhbHVhdGUoY29uc3QgU3Ry
aW5nJiBleHByZXNzaW9uLCBjb25zdCBTdHJpbmcmIG9iamVjdEdyb3VwLCBPcHRpb25hbDxib29s
PiYmIGluY2x1ZGVDb21tYW5kTGluZUFQSSwgT3B0aW9uYWw8Ym9vbD4mJiBkb05vdFBhdXNlT25F
eGNlcHRpb25zQW5kTXV0ZUNvbnNvbGUsIE9wdGlvbmFsPFByb3RvY29sOjpSdW50aW1lOjpFeGVj
dXRpb25Db250ZXh0SWQ+JiYgZXhlY3V0aW9uQ29udGV4dElkLCBPcHRpb25hbDxib29sPiYmIHJl
dHVybkJ5VmFsdWUsIE9wdGlvbmFsPGJvb2w+JiYgZ2VuZXJhdGVQcmV2aWV3LCBPcHRpb25hbDxi
b29sPiYmIHNhdmVSZXN1bHQsIE9wdGlvbmFsPGJvb2w+JiYgZW11bGF0ZVVzZXJHZXN0dXJlKQog
ewotICAgIFVzZXJHZXN0dXJlRW11bGF0aW9uU2NvcGUgdXNlckdlc3R1cmVTY29wZShtX2luc3Bl
Y3RlZFBhZ2UsIGFzQm9vbChlbXVsYXRlVXNlckdlc3R1cmUpKTsKLSAgICBJbnNwZWN0b3JSdW50
aW1lQWdlbnQ6OmV2YWx1YXRlKGVycm9yU3RyaW5nLCBleHByZXNzaW9uLCBvYmplY3RHcm91cCwg
aW5jbHVkZUNvbW1hbmRMaW5lQVBJLCBkb05vdFBhdXNlT25FeGNlcHRpb25zQW5kTXV0ZUNvbnNv
bGUsIGV4ZWN1dGlvbkNvbnRleHRJZCwgcmV0dXJuQnlWYWx1ZSwgZ2VuZXJhdGVQcmV2aWV3LCBz
YXZlUmVzdWx0LCBlbXVsYXRlVXNlckdlc3R1cmUsIHJlc3VsdCwgd2FzVGhyb3duLCBzYXZlZFJl
c3VsdEluZGV4KTsKKyAgICBVc2VyR2VzdHVyZUVtdWxhdGlvblNjb3BlIHVzZXJHZXN0dXJlU2Nv
cGUobV9pbnNwZWN0ZWRQYWdlLCBlbXVsYXRlVXNlckdlc3R1cmUgJiYgKmVtdWxhdGVVc2VyR2Vz
dHVyZSk7CisgICAgcmV0dXJuIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6ZXZhbHVhdGUoZXhwcmVz
c2lvbiwgb2JqZWN0R3JvdXAsIFdURk1vdmUoaW5jbHVkZUNvbW1hbmRMaW5lQVBJKSwgV1RGTW92
ZShkb05vdFBhdXNlT25FeGNlcHRpb25zQW5kTXV0ZUNvbnNvbGUpLCBXVEZNb3ZlKGV4ZWN1dGlv
bkNvbnRleHRJZCksIFdURk1vdmUocmV0dXJuQnlWYWx1ZSksIFdURk1vdmUoZ2VuZXJhdGVQcmV2
aWV3KSwgV1RGTW92ZShzYXZlUmVzdWx0KSwgV1RGTW92ZShlbXVsYXRlVXNlckdlc3R1cmUpKTsK
IH0KIAotdm9pZCBQYWdlUnVudGltZUFnZW50OjpjYWxsRnVuY3Rpb25PbihFcnJvclN0cmluZyYg
ZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgb2JqZWN0SWQsIGNvbnN0IFN0cmluZyYgZXhwcmVz
c2lvbiwgY29uc3QgSlNPTjo6QXJyYXkqIG9wdGlvbmFsQXJndW1lbnRzLCBjb25zdCBib29sKiBk
b05vdFBhdXNlT25FeGNlcHRpb25zQW5kTXV0ZUNvbnNvbGUsIGNvbnN0IGJvb2wqIHJldHVybkJ5
VmFsdWUsIGNvbnN0IGJvb2wqIGdlbmVyYXRlUHJldmlldywgY29uc3QgYm9vbCogZW11bGF0ZVVz
ZXJHZXN0dXJlLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2Jq
ZWN0PiYgcmVzdWx0LCBPcHRpb25hbDxib29sPiYgd2FzVGhyb3duKQorUHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8c3RkOjp0dXBsZTxSZWY8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4s
IE9wdGlvbmFsPGJvb2w+IC8qIHdhc1Rocm93biAqLz4+IFBhZ2VSdW50aW1lQWdlbnQ6OmNhbGxG
dW5jdGlvbk9uKGNvbnN0IFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3RJZCYgb2JqZWN0
SWQsIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgUmVmUHRyPEpTT046OkFycmF5PiYmIG9wdGlv
bmFsQXJndW1lbnRzLCBPcHRpb25hbDxib29sPiYmIGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRN
dXRlQ29uc29sZSwgT3B0aW9uYWw8Ym9vbD4mJiByZXR1cm5CeVZhbHVlLCBPcHRpb25hbDxib29s
PiYmIGdlbmVyYXRlUHJldmlldywgT3B0aW9uYWw8Ym9vbD4mJiBlbXVsYXRlVXNlckdlc3R1cmUp
CiB7Ci0gICAgVXNlckdlc3R1cmVFbXVsYXRpb25TY29wZSB1c2VyR2VzdHVyZVNjb3BlKG1faW5z
cGVjdGVkUGFnZSwgYXNCb29sKGVtdWxhdGVVc2VyR2VzdHVyZSkpOwotICAgIEluc3BlY3RvclJ1
bnRpbWVBZ2VudDo6Y2FsbEZ1bmN0aW9uT24oZXJyb3JTdHJpbmcsIG9iamVjdElkLCBleHByZXNz
aW9uLCBvcHRpb25hbEFyZ3VtZW50cywgZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25z
b2xlLCByZXR1cm5CeVZhbHVlLCBnZW5lcmF0ZVByZXZpZXcsIGVtdWxhdGVVc2VyR2VzdHVyZSwg
cmVzdWx0LCB3YXNUaHJvd24pOworICAgIFVzZXJHZXN0dXJlRW11bGF0aW9uU2NvcGUgdXNlckdl
c3R1cmVTY29wZShtX2luc3BlY3RlZFBhZ2UsIGVtdWxhdGVVc2VyR2VzdHVyZSAmJiAqZW11bGF0
ZVVzZXJHZXN0dXJlKTsKKyAgICByZXR1cm4gSW5zcGVjdG9yUnVudGltZUFnZW50OjpjYWxsRnVu
Y3Rpb25PbihvYmplY3RJZCwgZXhwcmVzc2lvbiwgV1RGTW92ZShvcHRpb25hbEFyZ3VtZW50cyks
IFdURk1vdmUoZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xlKSwgV1RGTW92ZShy
ZXR1cm5CeVZhbHVlKSwgV1RGTW92ZShnZW5lcmF0ZVByZXZpZXcpLCBXVEZNb3ZlKGVtdWxhdGVV
c2VyR2VzdHVyZSkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZVJ1bnRpbWVBZ2VudC5oIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VSdW50aW1lQWdlbnQuaApp
bmRleCAyYWYzNzM5YjdmZTdjMTZmYWE3ZDhkMjc5N2NlNmQwMTAyMTUzOThkLi4yOTg0NjVjNTJi
NDI0NjRjMjczMzY1OWUwN2YzZjc2MDE3NGE5NWViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZVJ1bnRpbWVBZ2VudC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlUnVudGltZUFnZW50LmgKQEAgLTQ1LDMx
ICs0NSwzMCBAQCBjbGFzcyBET01XcmFwcGVyV29ybGQ7CiBjbGFzcyBGcmFtZTsKIGNsYXNzIFBh
Z2U7CiBjbGFzcyBTZWN1cml0eU9yaWdpbjsKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwog
CiBjbGFzcyBQYWdlUnVudGltZUFnZW50IGZpbmFsIDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVj
dG9yUnVudGltZUFnZW50IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShQYWdlUnVudGltZUFn
ZW50KTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBQYWdlUnVu
dGltZUFnZW50KFBhZ2VBZ2VudENvbnRleHQmKTsKLSAgICB+UGFnZVJ1bnRpbWVBZ2VudCgpIG92
ZXJyaWRlOworICAgIH5QYWdlUnVudGltZUFnZW50KCk7CiAKICAgICAvLyBSdW50aW1lQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyCi0gICAgdm9pZCBlbmFibGUoRXJyb3JTdHJpbmcmKSBvdmVycmlk
ZTsKLSAgICB2b2lkIGRpc2FibGUoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2b2lkIGV2
YWx1YXRlKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBjb25zdCBTdHJp
bmcqIG9iamVjdEdyb3VwLCBjb25zdCBib29sKiBpbmNsdWRlQ29tbWFuZExpbmVBUEksIGNvbnN0
IGJvb2wqIGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29sZSwgY29uc3QgaW50KiBl
eGVjdXRpb25Db250ZXh0SWQsIGNvbnN0IGJvb2wqIHJldHVybkJ5VmFsdWUsIGNvbnN0IGJvb2wq
IGdlbmVyYXRlUHJldmlldywgY29uc3QgYm9vbCogc2F2ZVJlc3VsdCwgY29uc3QgYm9vbCogZW11
bGF0ZVVzZXJHZXN0dXJlLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6UmVt
b3RlT2JqZWN0PiYgcmVzdWx0LCBPcHRpb25hbDxib29sPiYgd2FzVGhyb3duLCBPcHRpb25hbDxp
bnQ+JiBzYXZlZFJlc3VsdEluZGV4KSBvdmVycmlkZTsKLSAgICB2b2lkIGNhbGxGdW5jdGlvbk9u
KEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBvYmplY3RJZCwgY29uc3QgU3RyaW5nJiBleHBy
ZXNzaW9uLCBjb25zdCBKU09OOjpBcnJheSogb3B0aW9uYWxBcmd1bWVudHMsIGNvbnN0IGJvb2wq
IGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29sZSwgY29uc3QgYm9vbCogcmV0dXJu
QnlWYWx1ZSwgY29uc3QgYm9vbCogZ2VuZXJhdGVQcmV2aWV3LCBjb25zdCBib29sKiBlbXVsYXRl
VXNlckdlc3R1cmUsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVP
YmplY3Q+JiByZXN1bHQsIE9wdGlvbmFsPGJvb2w+JiB3YXNUaHJvd24pIG92ZXJyaWRlOworICAg
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZW5hYmxlKCk7CisgICAg
SW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBkaXNhYmxlKCk7CisgICAg
SW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxzdGQ6OnR1cGxlPFJlZjxJbnNwZWN0
b3I6OlByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+LCBPcHRpb25hbDxib29sPiAvKiB3
YXNUaHJvd24gKi8sIE9wdGlvbmFsPGludD4gLyogc2F2ZWRSZXN1bHRJbmRleCAqLz4+IGV2YWx1
YXRlKGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCwg
T3B0aW9uYWw8Ym9vbD4mJiBpbmNsdWRlQ29tbWFuZExpbmVBUEksIE9wdGlvbmFsPGJvb2w+JiYg
ZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xlLCBPcHRpb25hbDxJbnNwZWN0b3I6
OlByb3RvY29sOjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0SWQ+JiYsIE9wdGlvbmFsPGJvb2w+
JiYgcmV0dXJuQnlWYWx1ZSwgT3B0aW9uYWw8Ym9vbD4mJiBnZW5lcmF0ZVByZXZpZXcsIE9wdGlv
bmFsPGJvb2w+JiYgc2F2ZVJlc3VsdCwgT3B0aW9uYWw8Ym9vbD4mJiBlbXVsYXRlVXNlckdlc3R1
cmUpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8c3RkOjp0dXBsZTxS
ZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiwgT3B0aW9uYWw8
Ym9vbD4gLyogd2FzVGhyb3duICovPj4gY2FsbEZ1bmN0aW9uT24oY29uc3QgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0SWQmLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Np
b24sIFJlZlB0cjxKU09OOjpBcnJheT4mJiBhcmd1bWVudHMsIE9wdGlvbmFsPGJvb2w+JiYgZG9O
b3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xlLCBPcHRpb25hbDxib29sPiYmIHJldHVy
bkJ5VmFsdWUsIE9wdGlvbmFsPGJvb2w+JiYgZ2VuZXJhdGVQcmV2aWV3LCBPcHRpb25hbDxib29s
PiYmIGVtdWxhdGVVc2VyR2VzdHVyZSk7CiAKICAgICAvLyBJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b24KICAgICB2b2lkIGZyYW1lTmF2aWdhdGVkKEZyYW1lJik7CiAgICAgdm9pZCBkaWRDbGVhcldp
bmRvd09iamVjdEluV29ybGQoRnJhbWUmLCBET01XcmFwcGVyV29ybGQmKTsKIAogcHJpdmF0ZToK
LSAgICBJbnNwZWN0b3I6OkluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0Rm9yRXZhbChFcnJv
clN0cmluZyYsIGNvbnN0IGludCogZXhlY3V0aW9uQ29udGV4dElkKSBvdmVycmlkZTsKLSAgICB2
b2lkIG11dGVDb25zb2xlKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCB1bm11dGVDb25zb2xlKCkgb3Zl
cnJpZGU7CisgICAgSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdEZvckV2
YWwoSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBPcHRpb25hbDxJbnNwZWN0b3I6
OlByb3RvY29sOjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0SWQ+JiYpOworICAgIHZvaWQgbXV0
ZUNvbnNvbGUoKTsKKyAgICB2b2lkIHVubXV0ZUNvbnNvbGUoKTsKICAgICB2b2lkIHJlcG9ydEV4
ZWN1dGlvbkNvbnRleHRDcmVhdGlvbigpOwotICAgIHZvaWQgbm90aWZ5Q29udGV4dENyZWF0ZWQo
Y29uc3QgU3RyaW5nJiBmcmFtZUlkLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgY29uc3QgRE9NV3Jh
cHBlcldvcmxkJiwgU2VjdXJpdHlPcmlnaW4qID0gbnVsbHB0cik7CisgICAgdm9pZCBub3RpZnlD
b250ZXh0Q3JlYXRlZChjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpGcmFtZUlk
JiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIGNvbnN0IERPTVdyYXBwZXJXb3JsZCYsIFNlY3VyaXR5
T3JpZ2luKiA9IG51bGxwdHIpOwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPEluc3BlY3Rvcjo6UnVu
dGltZUZyb250ZW5kRGlzcGF0Y2hlcj4gbV9mcm9udGVuZERpc3BhdGNoZXI7CiAgICAgUmVmUHRy
PEluc3BlY3Rvcjo6UnVudGltZUJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVy
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvU2Vy
dmljZVdvcmtlckFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29y
a2VyL1NlcnZpY2VXb3JrZXJBZ2VudC5jcHAKaW5kZXggMThhNjBjM2MxY2IyZmExMTMzZTg5NDE5
MTI2MzlmOTM3MmVmZjJhNi4uYmJlMmNjMDNkNjQ1ZmMxMjkwODRkYmVlOWRkODA0MjJiYmQ2M2Zk
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvU2Vy
dmljZVdvcmtlckFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRz
L3dvcmtlci9TZXJ2aWNlV29ya2VyQWdlbnQuY3BwCkBAIC01NCw5ICs1NCw5IEBAIHZvaWQgU2Vy
dmljZVdvcmtlckFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6
OkRpc2Nvbm5lY3RSZWFzCiB7CiB9CiAKLXZvaWQgU2VydmljZVdvcmtlckFnZW50OjpnZXRJbml0
aWFsaXphdGlvbkluZm8oRXJyb3JTdHJpbmcmLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
U2VydmljZVdvcmtlcjo6Q29uZmlndXJhdGlvbj4mIGluZm8pCitQcm90b2NvbDo6RXJyb3JTdHJp
bmdPcjxSZWY8UHJvdG9jb2w6OlNlcnZpY2VXb3JrZXI6OkNvbmZpZ3VyYXRpb24+PiBTZXJ2aWNl
V29ya2VyQWdlbnQ6OmdldEluaXRpYWxpemF0aW9uSW5mbygpCiB7Ci0gICAgaW5mbyA9IEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlNlcnZpY2VXb3JrZXI6OkNvbmZpZ3VyYXRpb246OmNyZWF0ZSgpCisg
ICAgcmV0dXJuIFByb3RvY29sOjpTZXJ2aWNlV29ya2VyOjpDb25maWd1cmF0aW9uOjpjcmVhdGUo
KQogICAgICAgICAuc2V0VGFyZ2V0SWQobV9zZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGUuaWRlbnRp
ZmllcigpKQogICAgICAgICAuc2V0U2VjdXJpdHlPcmlnaW4obV9zZXJ2aWNlV29ya2VyR2xvYmFs
U2NvcGUuc2VjdXJpdHlPcmlnaW4oKS0+dG9SYXdTdHJpbmcoKSkKICAgICAgICAgLnNldFVybCht
X3NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZS50aHJlYWQoKS5jb250ZXh0RGF0YSgpLnNjcmlwdFVS
TC5zdHJpbmcoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMv
d29ya2VyL1NlcnZpY2VXb3JrZXJBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Fn
ZW50cy93b3JrZXIvU2VydmljZVdvcmtlckFnZW50LmgKaW5kZXggODE0OWZmM2RhYzM1NzhmYzA0
OGI2NThlNjMxN2RlMzJiMTk3ZDQwMC4uMGJhNWNjNWNjN2YzM2Q2MTFiNDVhMDQ5ODc0NTA1NWI4
ZjI5ZmZjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93b3Jr
ZXIvU2VydmljZVdvcmtlckFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Fn
ZW50cy93b3JrZXIvU2VydmljZVdvcmtlckFnZW50LmgKQEAgLTM0LDIxICszNCwxOSBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFNlcnZpY2VXb3JrZXJHbG9iYWxTY29wZTsKIAotdHlw
ZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7Ci0KIGNsYXNzIFNlcnZpY2VXb3JrZXJBZ2VudCBmaW5h
bCA6IHB1YmxpYyBJbnNwZWN0b3JBZ2VudEJhc2UsIHB1YmxpYyBJbnNwZWN0b3I6OlNlcnZpY2VX
b3JrZXJCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KFNlcnZpY2VXb3JrZXJBZ2VudCk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJs
aWM6CiAgICAgU2VydmljZVdvcmtlckFnZW50KFdvcmtlckFnZW50Q29udGV4dCYpOwotICAgIH5T
ZXJ2aWNlV29ya2VyQWdlbnQoKSBvdmVycmlkZTsKKyAgICB+U2VydmljZVdvcmtlckFnZW50KCk7
CiAKICAgICAvLyBJbnNwZWN0b3JBZ2VudEJhc2UKLSAgICB2b2lkIGRpZENyZWF0ZUZyb250ZW5k
QW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kUm91dGVyKiwgSW5zcGVjdG9yOjpCYWNrZW5k
RGlzcGF0Y2hlciopIG92ZXJyaWRlOwotICAgIHZvaWQgd2lsbERlc3Ryb3lGcm9udGVuZEFuZEJh
Y2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKSBvdmVycmlkZTsKKyAgICB2b2lkIGRp
ZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kUm91dGVyKiwgSW5z
cGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlciopOworICAgIHZvaWQgd2lsbERlc3Ryb3lGcm9udGVu
ZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKTsKIAogICAgIC8vIFNlcnZp
Y2VXb3JrZXJCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIKLSAgICB2b2lkIGdldEluaXRpYWxpemF0
aW9uSW5mbyhFcnJvclN0cmluZyYsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpTZXJ2aWNl
V29ya2VyOjpDb25maWd1cmF0aW9uPiYpIG92ZXJyaWRlOworICAgIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkVycm9yU3RyaW5nT3I8UmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlNlcnZpY2VXb3JrZXI6
OkNvbmZpZ3VyYXRpb24+PiBnZXRJbml0aWFsaXphdGlvbkluZm8oKTsKIAogcHJpdmF0ZToKICAg
ICBTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGUmIG1fc2VydmljZVdvcmtlckdsb2JhbFNjb3BlOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2Vy
QXVkaXRBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9X
b3JrZXJBdWRpdEFnZW50LmNwcAppbmRleCBjMTJiNWFhNDEzMmY4OWFjNTgyZGViOWY3MmYxODUx
YTllZWY5NTNmLi44OTI0MTkwZWU2MjBmMTU1MTRhMjUwZDc2MmUyYmU0YTE5MzMwNjNkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJBdWRp
dEFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9X
b3JrZXJBdWRpdEFnZW50LmNwcApAQCAtNDgsNyArNDgsNyBAQCBXb3JrZXJBdWRpdEFnZW50OjpX
b3JrZXJBdWRpdEFnZW50KFdvcmtlckFnZW50Q29udGV4dCYgY29udGV4dCkKIAogV29ya2VyQXVk
aXRBZ2VudDo6fldvcmtlckF1ZGl0QWdlbnQoKSA9IGRlZmF1bHQ7CiAKLUluamVjdGVkU2NyaXB0
IFdvcmtlckF1ZGl0QWdlbnQ6OmluamVjdGVkU2NyaXB0Rm9yRXZhbChFcnJvclN0cmluZyYgZXJy
b3JTdHJpbmcsIGNvbnN0IGludCogZXhlY3V0aW9uQ29udGV4dElkKQorSW5qZWN0ZWRTY3JpcHQg
V29ya2VyQXVkaXRBZ2VudDo6aW5qZWN0ZWRTY3JpcHRGb3JFdmFsKFByb3RvY29sOjpFcnJvclN0
cmluZyYgZXJyb3JTdHJpbmcsIE9wdGlvbmFsPFByb3RvY29sOjpSdW50aW1lOjpFeGVjdXRpb25D
b250ZXh0SWQ+JiYgZXhlY3V0aW9uQ29udGV4dElkKQogewogICAgIGlmIChleGVjdXRpb25Db250
ZXh0SWQpIHsKICAgICAgICAgZXJyb3JTdHJpbmcgPSAiZXhlY3V0aW9uQ29udGV4dElkIGlzIG5v
dCBzdXBwb3J0ZWQgZm9yIHdvcmtlcnMgYXMgdGhlcmUgaXMgb25seSBvbmUgZXhlY3V0aW9uIGNv
bnRleHQiX3M7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dv
cmtlci9Xb3JrZXJBdWRpdEFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRz
L3dvcmtlci9Xb3JrZXJBdWRpdEFnZW50LmgKaW5kZXggZDZhY2RjMGVhM2U4OWYwZmFkMzFjY2Iy
ZDc2OGUwZTE0NmJkMzIzNS4uZDI1OWM2YTc2YzJlY2IwZWViOGVkZDczMzllYzA0NTliZDM3MmIz
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29y
a2VyQXVkaXRBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29y
a2VyL1dvcmtlckF1ZGl0QWdlbnQuaApAQCAtMzcsMTAgKzM3LDEwIEBAIGNsYXNzIFdvcmtlckF1
ZGl0QWdlbnQgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JBdWRpdEFnZW50IHsK
ICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBXb3JrZXJBdWRpdEFn
ZW50KFdvcmtlckFnZW50Q29udGV4dCYpOwotICAgIH5Xb3JrZXJBdWRpdEFnZW50KCkgb3ZlcnJp
ZGU7CisgICAgfldvcmtlckF1ZGl0QWdlbnQoKTsKIAogcHJpdmF0ZToKLSAgICBJbnNwZWN0b3I6
OkluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0Rm9yRXZhbChJbnNwZWN0b3I6OkVycm9yU3Ry
aW5nJiwgY29uc3QgaW50KiBleGVjdXRpb25Db250ZXh0SWQpIG92ZXJyaWRlOworICAgIEluc3Bl
Y3Rvcjo6SW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHRGb3JFdmFsKEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkVycm9yU3RyaW5nJiwgT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGlt
ZTo6RXhlY3V0aW9uQ29udGV4dElkPiYmKTsKIAogICAgIFdvcmtlckdsb2JhbFNjb3BlJiBtX3dv
cmtlckdsb2JhbFNjb3BlOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9hZ2VudHMvd29ya2VyL1dvcmtlckNvbnNvbGVBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2VyQ29uc29sZUFnZW50LmgKaW5kZXggYjdiNTVkMDA2
NTkwZWZiMDgzZmViYjk0ZTQzYjQxMmQ2M2NlYWZkMC4uNTcxNTk5MTI0N2NhZmI5ZDY3ZWYzMzE3
MWFkZmQxYzk2YzdlNDgyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Fn
ZW50cy93b3JrZXIvV29ya2VyQ29uc29sZUFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2VyQ29uc29sZUFnZW50LmgKQEAgLTM1LDcgKzM1LDcg
QEAgY2xhc3MgV29ya2VyQ29uc29sZUFnZW50IGZpbmFsIDogcHVibGljIFdlYkNvbnNvbGVBZ2Vu
dCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgV29ya2VyQ29u
c29sZUFnZW50KFdvcmtlckFnZW50Q29udGV4dCYpOwotICAgIH5Xb3JrZXJDb25zb2xlQWdlbnQo
KSBvdmVycmlkZTsKKyAgICB+V29ya2VyQ29uc29sZUFnZW50KCk7CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRz
L3dvcmtlci9Xb3JrZXJET01EZWJ1Z2dlckFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlckRPTURlYnVnZ2VyQWdlbnQuY3BwCmluZGV4IGJkNWQ4
YTgzNGVhZTg2MzMwZmNiOTcyYzU5MmQ1ZjcwYTdlNzMwNGMuLjkyMjc0MzUwYzYzNzE0NjA1MWQ3
NDk5YzliZmI3NDYwNzAzMjIxMTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9hZ2VudHMvd29ya2VyL1dvcmtlckRPTURlYnVnZ2VyQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlckRPTURlYnVnZ2VyQWdlbnQuY3Bw
CkBAIC0zNywxOSArMzcsMjAgQEAgV29ya2VyRE9NRGVidWdnZXJBZ2VudDo6V29ya2VyRE9NRGVi
dWdnZXJBZ2VudChXb3JrZXJBZ2VudENvbnRleHQmIGNvbnRleHQsIEluc3AKIAogV29ya2VyRE9N
RGVidWdnZXJBZ2VudDo6fldvcmtlckRPTURlYnVnZ2VyQWdlbnQoKSA9IGRlZmF1bHQ7CiAKLXZv
aWQgV29ya2VyRE9NRGVidWdnZXJBZ2VudDo6c2V0RE9NQnJlYWtwb2ludChFcnJvclN0cmluZyYg
ZXJyb3JTdHJpbmcsIGludCAvKiBub2RlSWQgKi8sIGNvbnN0IFN0cmluZyYgLyogdHlwZVN0cmlu
ZyAqLywgY29uc3QgSlNPTjo6T2JqZWN0KiAvKiBvcHRpb25zUGF5bG9hZCAqLykKK1Byb3RvY29s
OjpFcnJvclN0cmluZ09yPHZvaWQ+IFdvcmtlckRPTURlYnVnZ2VyQWdlbnQ6OnNldERPTUJyZWFr
cG9pbnQoUHJvdG9jb2w6OkRPTTo6Tm9kZUlkLCBQcm90b2NvbDo6RE9NRGVidWdnZXI6OkRPTUJy
ZWFrcG9pbnRUeXBlLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIC8qIG9wdGlvbnMgKi8pCiB7Ci0g
ICAgZXJyb3JTdHJpbmcgPSAiTm90IHN1cHBvcnRlZCJfczsKKyAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoIk5vdCBzdXBwb3J0ZWQiX3MpOwogfQogCi12b2lkIFdvcmtlckRPTURlYnVnZ2VyQWdl
bnQ6OnJlbW92ZURPTUJyZWFrcG9pbnQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgLyog
bm9kZUlkICovLCBjb25zdCBTdHJpbmcmIC8qIHR5cGVTdHJpbmcgKi8pCitQcm90b2NvbDo6RXJy
b3JTdHJpbmdPcjx2b2lkPiBXb3JrZXJET01EZWJ1Z2dlckFnZW50OjpyZW1vdmVET01CcmVha3Bv
aW50KFByb3RvY29sOjpET006Ok5vZGVJZCwgUHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpET01CcmVh
a3BvaW50VHlwZSkKIHsKLSAgICBlcnJvclN0cmluZyA9ICJOb3Qgc3VwcG9ydGVkIl9zOworICAg
IHJldHVybiBtYWtlVW5leHBlY3RlZCgiTm90IHN1cHBvcnRlZCJfcyk7CiB9CiAKLXZvaWQgV29y
a2VyRE9NRGVidWdnZXJBZ2VudDo6c2V0QW5pbWF0aW9uRnJhbWVCcmVha3BvaW50KEVycm9yU3Ry
aW5nJiBlcnJvclN0cmluZywgUmVmUHRyPEpTQzo6QnJlYWtwb2ludD4mJikKK2Jvb2wgV29ya2Vy
RE9NRGVidWdnZXJBZ2VudDo6c2V0QW5pbWF0aW9uRnJhbWVCcmVha3BvaW50KFByb3RvY29sOjpF
cnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIFJlZlB0cjxKU0M6OkJyZWFrcG9pbnQ+JiYpCiB7CiAg
ICAgZXJyb3JTdHJpbmcgPSAiTm90IHN1cHBvcnRlZCJfczsKKyAgICByZXR1cm4gZmFsc2U7CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlckRPTURlYnVnZ2VyQWdlbnQuaCBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlckRPTURlYnVnZ2VyQWdlbnQuaApp
bmRleCA4NmViOTNmNWUxOTc1NTFiYmQyMDk2OTY1NzljNzA4OTRkNThjMjFjLi41NmY1YTA5MGEz
MzA4NjAxZGJkYmE5YzRmMmI0ZDNmN2MxMTMzZDE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJET01EZWJ1Z2dlckFnZW50LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2VyRE9NRGVidWdnZXJB
Z2VudC5oCkBAIC0zMSwxOSArMzEsMTcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi10eXBl
ZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQogY2xhc3MgV29ya2VyRE9NRGVidWdnZXJBZ2VudCBm
aW5hbCA6IHB1YmxpYyBJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50IHsKIHB1YmxpYzoKICAgICBX
b3JrZXJET01EZWJ1Z2dlckFnZW50KFdvcmtlckFnZW50Q29udGV4dCYsIEluc3BlY3Rvcjo6SW5z
cGVjdG9yRGVidWdnZXJBZ2VudCopOwotICAgIH5Xb3JrZXJET01EZWJ1Z2dlckFnZW50KCkgb3Zl
cnJpZGU7CisgICAgfldvcmtlckRPTURlYnVnZ2VyQWdlbnQoKTsKIAogICAgIC8vIERPTURlYnVn
Z2VyQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyCi0gICAgdm9pZCBzZXRET01CcmVha3BvaW50KEVy
cm9yU3RyaW5nJiwgaW50IG5vZGVJZCwgY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBKU09OOjpP
YmplY3QqIG9wdGlvbnMpIG92ZXJyaWRlOwotICAgIHZvaWQgcmVtb3ZlRE9NQnJlYWtwb2ludChF
cnJvclN0cmluZyYsIGludCBub2RlSWQsIGNvbnN0IFN0cmluZyYgdHlwZSkgb3ZlcnJpZGU7Cisg
ICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzZXRET01CcmVha3Bv
aW50KEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkLCBJbnNwZWN0b3I6OlByb3RvY29s
OjpET01EZWJ1Z2dlcjo6RE9NQnJlYWtwb2ludFR5cGUsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYg
b3B0aW9ucyk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBy
ZW1vdmVET01CcmVha3BvaW50KEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkLCBJbnNw
ZWN0b3I6OlByb3RvY29sOjpET01EZWJ1Z2dlcjo6RE9NQnJlYWtwb2ludFR5cGUpOwogCiBwcml2
YXRlOgotICAgIHZvaWQgc2V0QW5pbWF0aW9uRnJhbWVCcmVha3BvaW50KEVycm9yU3RyaW5nJiwg
UmVmUHRyPEpTQzo6QnJlYWtwb2ludD4mJikgb3ZlcnJpZGU7CisgICAgYm9vbCBzZXRBbmltYXRp
b25GcmFtZUJyZWFrcG9pbnQoSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBSZWZQ
dHI8SlNDOjpCcmVha3BvaW50PiYmKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlckRl
YnVnZ2VyQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93b3JrZXIv
V29ya2VyRGVidWdnZXJBZ2VudC5jcHAKaW5kZXggY2JjNjIwNTIyMTk0ZjI5YTk0MTg3YThhMjdh
YzEyYjQxOWQzNTllMC4uN2FhNzJiNmE0YzY0Y2E5ZjY3ODE1MGQwNmEzMmQwMjk0YzUwODgyNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2Vy
RGVidWdnZXJBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93
b3JrZXIvV29ya2VyRGVidWdnZXJBZ2VudC5jcHAKQEAgLTUzLDcgKzUzLDcgQEAgdm9pZCBXb3Jr
ZXJEZWJ1Z2dlckFnZW50OjpicmVha3BvaW50QWN0aW9uTG9nKEpTR2xvYmFsT2JqZWN0KiBsZXhp
Y2FsR2xvYmFsT2JqZWMKICAgICBtX3dvcmtlckdsb2JhbFNjb3BlLmFkZENvbnNvbGVNZXNzYWdl
KG1ha2VVbmlxdWU8Q29uc29sZU1lc3NhZ2U+KE1lc3NhZ2VTb3VyY2U6OkpTLCBNZXNzYWdlVHlw
ZTo6TG9nLCBNZXNzYWdlTGV2ZWw6OkxvZywgbWVzc2FnZSwgY3JlYXRlU2NyaXB0Q2FsbFN0YWNr
KGxleGljYWxHbG9iYWxPYmplY3QpKSk7CiB9CiAKLUluamVjdGVkU2NyaXB0IFdvcmtlckRlYnVn
Z2VyQWdlbnQ6OmluamVjdGVkU2NyaXB0Rm9yRXZhbChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcs
IGNvbnN0IGludCogZXhlY3V0aW9uQ29udGV4dElkKQorSW5qZWN0ZWRTY3JpcHQgV29ya2VyRGVi
dWdnZXJBZ2VudDo6aW5qZWN0ZWRTY3JpcHRGb3JFdmFsKFByb3RvY29sOjpFcnJvclN0cmluZyYg
ZXJyb3JTdHJpbmcsIE9wdGlvbmFsPFByb3RvY29sOjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0
SWQ+JiYgZXhlY3V0aW9uQ29udGV4dElkKQogewogICAgIGlmIChleGVjdXRpb25Db250ZXh0SWQp
IHsKICAgICAgICAgZXJyb3JTdHJpbmcgPSAiZXhlY3V0aW9uQ29udGV4dElkIGlzIG5vdCBzdXBw
b3J0ZWQgZm9yIHdvcmtlcnMgYXMgdGhlcmUgaXMgb25seSBvbmUgZXhlY3V0aW9uIGNvbnRleHQi
X3M7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9X
b3JrZXJEZWJ1Z2dlckFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dv
cmtlci9Xb3JrZXJEZWJ1Z2dlckFnZW50LmgKaW5kZXggNGFjMDdkNmNjMzdjMjI4MDMzMzhlYjgw
ZDM0MjE5NTIxYjk2ZjNkZS4uN2NhNjRlNDAxM2E1NGI0MThkNTNlNDc0ODAyZTczMmJmMTkwOGM5
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29y
a2VyRGVidWdnZXJBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMv
d29ya2VyL1dvcmtlckRlYnVnZ2VyQWdlbnQuaApAQCAtMzYsMTcgKzM2LDE3IEBAIGNsYXNzIFdv
cmtlckRlYnVnZ2VyQWdlbnQgZmluYWwgOiBwdWJsaWMgV2ViRGVidWdnZXJBZ2VudCB7CiAgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgV29ya2VyRGVidWdnZXJBZ2Vu
dChXb3JrZXJBZ2VudENvbnRleHQmKTsKLSAgICB+V29ya2VyRGVidWdnZXJBZ2VudCgpIG92ZXJy
aWRlOworICAgIH5Xb3JrZXJEZWJ1Z2dlckFnZW50KCk7CiAKICAgICAvLyBKU0M6OkRlYnVnZ2Vy
OjpPYnNlcnZlcgotICAgIHZvaWQgYnJlYWtwb2ludEFjdGlvbkxvZyhKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiwgY29uc3QgU3RyaW5nJiBkYXRhKSBmaW5hbDsKKyAgICB2b2lkIGJyZWFrcG9pbnRBY3Rp
b25Mb2coSlNDOjpKU0dsb2JhbE9iamVjdCosIGNvbnN0IFN0cmluZyYgZGF0YSk7CiAKIHByaXZh
dGU6CiAgICAgLy8gV2UgZG9uJ3QgbmVlZCB0byBtdXRlIGNvbnNvbGUgZm9yIHdvcmtlcnMuCi0g
ICAgdm9pZCBtdXRlQ29uc29sZSgpIG92ZXJyaWRlIHsgfQotICAgIHZvaWQgdW5tdXRlQ29uc29s
ZSgpIG92ZXJyaWRlIHsgfQorICAgIHZvaWQgbXV0ZUNvbnNvbGUoKSB7IH0KKyAgICB2b2lkIHVu
bXV0ZUNvbnNvbGUoKSB7IH0KIAotICAgIEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHQgaW5qZWN0
ZWRTY3JpcHRGb3JFdmFsKEVycm9yU3RyaW5nJiwgY29uc3QgaW50KiBleGVjdXRpb25Db250ZXh0
SWQpIG92ZXJyaWRlOworICAgIEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3Jp
cHRGb3JFdmFsKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nJiwgT3B0aW9uYWw8SW5z
cGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RXhlY3V0aW9uQ29udGV4dElkPiYmKTsKIAogICAg
IFdvcmtlckdsb2JhbFNjb3BlJiBtX3dvcmtlckdsb2JhbFNjb3BlOwogfTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlck5ldHdvcmtBZ2Vu
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJOZXR3
b3JrQWdlbnQuY3BwCmluZGV4IDUzZmE4ODNhZDk3MTg4Njg0Y2I5NGMwOTBlNzk2MTY5MDgxYjZi
NGQuLjJiMTY4ZTZkM2E3YTFiZTE0NjgzNjljMzBjYzJlYjZjOWIzOWQyNzcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlck5ldHdvcmtBZ2Vu
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2Vy
TmV0d29ya0FnZW50LmNwcApAQCAtNDMsMTIgKzQzLDEyIEBAIFdvcmtlck5ldHdvcmtBZ2VudDo6
V29ya2VyTmV0d29ya0FnZW50KFdvcmtlckFnZW50Q29udGV4dCYgY29udGV4dCkKIAogV29ya2Vy
TmV0d29ya0FnZW50Ojp+V29ya2VyTmV0d29ya0FnZW50KCkgPSBkZWZhdWx0OwogCi1TdHJpbmcg
V29ya2VyTmV0d29ya0FnZW50Ojpsb2FkZXJJZGVudGlmaWVyKERvY3VtZW50TG9hZGVyKikKK1By
b3RvY29sOjpOZXR3b3JrOjpMb2FkZXJJZCBXb3JrZXJOZXR3b3JrQWdlbnQ6OmxvYWRlcklkZW50
aWZpZXIoRG9jdW1lbnRMb2FkZXIqKQogewogICAgIHJldHVybiB7IH07CiB9CiAKLVN0cmluZyBX
b3JrZXJOZXR3b3JrQWdlbnQ6OmZyYW1lSWRlbnRpZmllcihEb2N1bWVudExvYWRlciopCitQcm90
b2NvbDo6TmV0d29yazo6RnJhbWVJZCBXb3JrZXJOZXR3b3JrQWdlbnQ6OmZyYW1lSWRlbnRpZmll
cihEb2N1bWVudExvYWRlciopCiB7CiAgICAgcmV0dXJuIHsgfTsKIH0KQEAgLTU5LDEyICs1OSwx
MiBAQCBWZWN0b3I8V2ViU29ja2V0Kj4gV29ya2VyTmV0d29ya0FnZW50OjphY3RpdmVXZWJTb2Nr
ZXRzKGNvbnN0IExvY2tIb2xkZXImKQogICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgV29ya2Vy
TmV0d29ya0FnZW50OjpzZXRSZXNvdXJjZUNhY2hpbmdEaXNhYmxlZChib29sIGRpc2FibGVkKQor
dm9pZCBXb3JrZXJOZXR3b3JrQWdlbnQ6OnNldFJlc291cmNlQ2FjaGluZ0Rpc2FibGVkSW50ZXJh
bChib29sIGRpc2FibGVkKQogewogICAgIG1fd29ya2VyR2xvYmFsU2NvcGUudGhyZWFkKCkud29y
a2VyRGVidWdnZXJQcm94eSgpLnNldFJlc291cmNlQ2FjaGluZ0Rpc2FibGVkQnlXZWJJbnNwZWN0
b3IoZGlzYWJsZWQpOwogfQogCi1TY3JpcHRFeGVjdXRpb25Db250ZXh0KiBXb3JrZXJOZXR3b3Jr
QWdlbnQ6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcm
KQorU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogV29ya2VyTmV0d29ya0FnZW50OjpzY3JpcHRFeGVj
dXRpb25Db250ZXh0KFByb3RvY29sOjpFcnJvclN0cmluZyYsIGNvbnN0IFByb3RvY29sOjpOZXR3
b3JrOjpGcmFtZUlkJikKIHsKICAgICByZXR1cm4gJm1fd29ya2VyR2xvYmFsU2NvcGU7CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJO
ZXR3b3JrQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dv
cmtlck5ldHdvcmtBZ2VudC5oCmluZGV4IDg5OWYwYTU2ZmQxYjdkYTk0M2E0NTUzYjhjOTRjZjNj
N2JmYjBiOTQuLjkxYjA1YjljMjMwZWM3Y2QzNWE0NmNlNTdjNTY2MzkyNzIyMmRmZjMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlck5ldHdv
cmtBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dv
cmtlck5ldHdvcmtBZ2VudC5oCkBAIC0zNCwxNSArMzQsMTUgQEAgY2xhc3MgV29ya2VyTmV0d29y
a0FnZW50IGZpbmFsIDogcHVibGljIEluc3BlY3Rvck5ldHdvcmtBZ2VudCB7CiAgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgV29ya2VyTmV0d29ya0FnZW50KFdvcmtl
ckFnZW50Q29udGV4dCYpOwotICAgIH5Xb3JrZXJOZXR3b3JrQWdlbnQoKSBvdmVycmlkZTsKKyAg
ICB+V29ya2VyTmV0d29ya0FnZW50KCk7CiAKIHByaXZhdGU6Ci0gICAgU3RyaW5nIGxvYWRlcklk
ZW50aWZpZXIoRG9jdW1lbnRMb2FkZXIqKSBvdmVycmlkZTsKLSAgICBTdHJpbmcgZnJhbWVJZGVu
dGlmaWVyKERvY3VtZW50TG9hZGVyKikgb3ZlcnJpZGU7Ci0gICAgVmVjdG9yPFdlYlNvY2tldCo+
IGFjdGl2ZVdlYlNvY2tldHMoY29uc3QgTG9ja0hvbGRlciYpIG92ZXJyaWRlOwotICAgIHZvaWQg
c2V0UmVzb3VyY2VDYWNoaW5nRGlzYWJsZWQoYm9vbCkgb3ZlcnJpZGU7Ci0gICAgU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dChFcnJvclN0cmluZyYsIGNvbnN0
IFN0cmluZyYgZnJhbWVJZCkgb3ZlcnJpZGU7Ci0gICAgYm9vbCBzaG91bGRGb3JjZUJ1ZmZlcmlu
Z05ldHdvcmtSZXNvdXJjZURhdGEoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9Cisg
ICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6TG9hZGVySWQgbG9hZGVySWRlbnRpZmll
cihEb2N1bWVudExvYWRlciopOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OkZy
YW1lSWQgZnJhbWVJZGVudGlmaWVyKERvY3VtZW50TG9hZGVyKik7CisgICAgVmVjdG9yPFdlYlNv
Y2tldCo+IGFjdGl2ZVdlYlNvY2tldHMoY29uc3QgTG9ja0hvbGRlciYpOworICAgIHZvaWQgc2V0
UmVzb3VyY2VDYWNoaW5nRGlzYWJsZWRJbnRlcmFsKGJvb2wpOworICAgIFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJy
b3JTdHJpbmcmLCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpGcmFtZUlkJik7
CisgICAgYm9vbCBzaG91bGRGb3JjZUJ1ZmZlcmluZ05ldHdvcmtSZXNvdXJjZURhdGEoKSBjb25z
dCB7IHJldHVybiB0cnVlOyB9CiAKICAgICBXb3JrZXJHbG9iYWxTY29wZSYgbV93b3JrZXJHbG9i
YWxTY29wZTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRz
L3dvcmtlci9Xb3JrZXJSdW50aW1lQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2FnZW50cy93b3JrZXIvV29ya2VyUnVudGltZUFnZW50LmNwcAppbmRleCBkOTIzMDgxYzUxZTNi
ZDI3NTIxYWEyNDFjN2NhYzhmYjQwZDNlMjgzLi5mZmZkM2NlYTIxNTM1OWZlNmYwZWQxZWRkNzcy
ZDE2YjcwOTUxZGViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRz
L3dvcmtlci9Xb3JrZXJSdW50aW1lQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlclJ1bnRpbWVBZ2VudC5jcHAKQEAgLTUxLDcgKzUxLDcg
QEAgV29ya2VyUnVudGltZUFnZW50OjpXb3JrZXJSdW50aW1lQWdlbnQoV29ya2VyQWdlbnRDb250
ZXh0JiBjb250ZXh0KQogCiBXb3JrZXJSdW50aW1lQWdlbnQ6On5Xb3JrZXJSdW50aW1lQWdlbnQo
KSA9IGRlZmF1bHQ7CiAKLUluamVjdGVkU2NyaXB0IFdvcmtlclJ1bnRpbWVBZ2VudDo6aW5qZWN0
ZWRTY3JpcHRGb3JFdmFsKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgaW50KiBleGVj
dXRpb25Db250ZXh0SWQpCitJbmplY3RlZFNjcmlwdCBXb3JrZXJSdW50aW1lQWdlbnQ6OmluamVj
dGVkU2NyaXB0Rm9yRXZhbChQcm90b2NvbDo6RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBPcHRp
b25hbDxQcm90b2NvbDo6UnVudGltZTo6RXhlY3V0aW9uQ29udGV4dElkPiYmIGV4ZWN1dGlvbkNv
bnRleHRJZCkKIHsKICAgICBpZiAoZXhlY3V0aW9uQ29udGV4dElkKSB7CiAgICAgICAgIGVycm9y
U3RyaW5nID0gImV4ZWN1dGlvbkNvbnRleHRJZCBpcyBub3Qgc3VwcG9ydGVkIGZvciB3b3JrZXJz
IGFzIHRoZXJlIGlzIG9ubHkgb25lIGV4ZWN1dGlvbiBjb250ZXh0Il9zOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2VyUnVudGltZUFnZW50
LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJSdW50aW1l
QWdlbnQuaAppbmRleCA1MzA4ZWI0Mzg4ZDRkMTA1MmVjNzQ1ODUwNDdhMWU4OGU3ZDQzYjRiLi42
Yjk5OGY0ZDE3MzE4NTFmOTliNjdlZTE1YTVkMjAwMTU4N2Y0ZDA2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJSdW50aW1lQWdlbnQuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJSdW50aW1l
QWdlbnQuaApAQCAtMzcsMjEgKzM3LDIwIEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNz
IFdvcmtlckdsb2JhbFNjb3BlOwotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiAKIGNsYXNz
IFdvcmtlclJ1bnRpbWVBZ2VudCBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3BlY3RvclJ1
bnRpbWVBZ2VudCB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoV29ya2VyUnVudGltZUFnZW50
KTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBXb3JrZXJSdW50
aW1lQWdlbnQoV29ya2VyQWdlbnRDb250ZXh0Jik7Ci0gICAgfldvcmtlclJ1bnRpbWVBZ2VudCgp
IG92ZXJyaWRlOworICAgIH5Xb3JrZXJSdW50aW1lQWdlbnQoKTsKIAogcHJpdmF0ZToKLSAgICBJ
bnNwZWN0b3I6OkluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0Rm9yRXZhbChFcnJvclN0cmlu
ZyYsIGNvbnN0IGludCogZXhlY3V0aW9uQ29udGV4dElkKSBvdmVycmlkZTsKKyAgICBJbnNwZWN0
b3I6OkluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0Rm9yRXZhbChJbnNwZWN0b3I6OlByb3Rv
Y29sOjpFcnJvclN0cmluZyYsIE9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6
OkV4ZWN1dGlvbkNvbnRleHRJZD4mJik7CiAKICAgICAvLyBXZSBkb24ndCBuZWVkIHRvIG11dGUg
Y29uc29sZSBmb3Igd29ya2Vycy4KLSAgICB2b2lkIG11dGVDb25zb2xlKCkgb3ZlcnJpZGUgeyB9
Ci0gICAgdm9pZCB1bm11dGVDb25zb2xlKCkgb3ZlcnJpZGUgeyB9CisgICAgdm9pZCBtdXRlQ29u
c29sZSgpIHsgfQorICAgIHZvaWQgdW5tdXRlQ29uc29sZSgpIHsgfQogCiAgICAgUmVmUHRyPElu
c3BlY3Rvcjo6UnVudGltZUJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOwog
ICAgIFdvcmtlckdsb2JhbFNjb3BlJiBtX3dvcmtlckdsb2JhbFNjb3BlOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNVXRpbGl0aWVzLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NETVV0aWxpdGllcy5jcHAK
aW5kZXggNWU4ODVhZDZlNTg2OTA5YzBlZDIxNWJlZTViZThlOGVmN2MyN2FmOC4uNWJlYmNiNDlh
YThlYjlhMmJiMDcxMWVhZTA4MGYzNzdlMjJiOTgzNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNVXRpbGl0aWVzLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1VdGlsaXRpZXMuY3BwCkBAIC00Nywx
MiArNDcsMTIgQEAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyc2VKU09OT2JqZWN0KGNvbnN0IFNo
YXJlZEJ1ZmZlciYgYnVmZmVyKQogCiAgICAgLy8gUGFyc2UgdGhlIGJ1ZmZlciBjb250ZW50cyBh
cyBKU09OLCByZXR1cm5pbmcgdGhlIHJvb3Qgb2JqZWN0IChpZiBhbnkpLgogICAgIFN0cmluZyBq
c29uIHsgYnVmZmVyLmRhdGEoKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHNpemUpIH07Ci0gICAg
UmVmUHRyPEpTT046OlZhbHVlPiB2YWx1ZTsKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBvYmpl
Y3Q7Ci0gICAgaWYgKCFKU09OOjpWYWx1ZTo6cGFyc2VKU09OKGpzb24sIHZhbHVlKSB8fCAhdmFs
dWUtPmFzT2JqZWN0KG9iamVjdCkpCisKKyAgICBhdXRvIHZhbHVlID0gSlNPTjo6VmFsdWU6OnBh
cnNlSlNPTihqc29uKTsKKyAgICBpZiAoIXZhbHVlKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
IAotICAgIHJldHVybiBvYmplY3Q7CisgICAgcmV0dXJuIHZhbHVlLT5hc09iamVjdCgpOwogfQog
CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEv
Y2xlYXJrZXkvQ0RNQ2xlYXJLZXkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlw
dGVkbWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJLZXkuY3BwCmluZGV4IGU2Y2MyMmQ5MGM3YWMzOWI1
NmZkODJhMTZiMDc2NWVjMWUxY2ZhODcuLjVhMTgyZmRmNDUyNjQyYWE4ZWY0NjBiNzc0YWM5ZTdi
NDBjMmVjNTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1l
ZGlhL2NsZWFya2V5L0NETUNsZWFyS2V5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9lbmNyeXB0ZWRtZWRpYS9jbGVhcmtleS9DRE1DbGVhcktleS5jcHAKQEAgLTU1LDIzICs1NSwy
NyBAQCBzdGF0aWMgT3B0aW9uYWw8VmVjdG9yPFJlZlB0cjxLZXlIYW5kbGU+Pj4gcGFyc2VMaWNl
bnNlRm9ybWF0KGNvbnN0IEpTT046Ok9iamVjdAogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OwogCiAgICAgLy8gUmV0cmlldmUgdGhlIGtleXMgYXJyYXkuCi0gICAgUmVmUHRyPEpTT046OkFy
cmF5PiBrZXlzQXJyYXk7Ci0gICAgaWYgKCFpdC0+dmFsdWUtPmFzQXJyYXkoa2V5c0FycmF5KSkK
KyAgICBhdXRvIGtleXNBcnJheSA9IGl0LT52YWx1ZS0+YXNBcnJheSgpOworICAgIGlmICgha2V5
c0FycmF5KQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgVmVjdG9yPFJlZlB0
cjxLZXlIYW5kbGU+PiBkZWNvZGVkS2V5czsKICAgICBib29sIHZhbGlkRm9ybWF0ID0gc3RkOjph
bGxfb2Yoa2V5c0FycmF5LT5iZWdpbigpLCBrZXlzQXJyYXktPmVuZCgpLAogICAgICAgICBbJmRl
Y29kZWRLZXlzXSAoY29uc3QgYXV0byYgdmFsdWUpIHsKLSAgICAgICAgICAgIFJlZlB0cjxKU09O
OjpPYmplY3Q+IGtleU9iamVjdDsKLSAgICAgICAgICAgIGlmICghdmFsdWUtPmFzT2JqZWN0KGtl
eU9iamVjdCkpCisgICAgICAgICAgICBhdXRvIGtleU9iamVjdCA9IHZhbHVlLT5hc09iamVjdCgp
OworICAgICAgICAgICAgaWYgKCFrZXlPYmplY3QpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgICAgICAgICBTdHJpbmcga2V5VHlwZTsKLSAgICAgICAgICAgIGlmICgha2V5
T2JqZWN0LT5nZXRTdHJpbmcoImt0eSIsIGtleVR5cGUpIHx8ICFlcXVhbExldHRlcnNJZ25vcmlu
Z0FTQ0lJQ2FzZShrZXlUeXBlLCAib2N0IikpCisgICAgICAgICAgICBhdXRvIGtleVR5cGUgPSBr
ZXlPYmplY3QtPmdldFN0cmluZygia3R5Iik7CisgICAgICAgICAgICBpZiAoIWtleVR5cGUgfHwg
IWVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGtleVR5cGUsICJvY3QiKSkKICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgICAgIFN0cmluZyBrZXlJRCwga2V5VmFs
dWU7Ci0gICAgICAgICAgICBpZiAoIWtleU9iamVjdC0+Z2V0U3RyaW5nKCJraWQiLCBrZXlJRCkg
fHwgIWtleU9iamVjdC0+Z2V0U3RyaW5nKCJrIiwga2V5VmFsdWUpKQorICAgICAgICAgICAgYXV0
byBrZXlJRCA9IGtleU9iamVjdC0+Z2V0U3RyaW5nKCJraWQiKTsKKyAgICAgICAgICAgIGlmICgh
a2V5SUQpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICBhdXRv
IGtleVZhbHVlID0ga2V5T2JqZWN0LT5nZXRTdHJpbmcoImsiKTsKKyAgICAgICAgICAgIGlmICgh
a2V5VmFsdWUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgICAgICBL
ZXlJRFR5cGUga2V5SUREYXRhOwpAQCAtOTYsOCArMTAwLDggQEAgc3RhdGljIGJvb2wgcGFyc2VM
aWNlbnNlUmVsZWFzZUFja25vd2xlZGdlbWVudEZvcm1hdChjb25zdCBKU09OOjpPYmplY3QmIHJv
b3QpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIFJldHJpZXZlIHRoZSBraWRzIGFy
cmF5LgotICAgIFJlZlB0cjxKU09OOjpBcnJheT4ga2lkc0FycmF5OwotICAgIGlmICghaXQtPnZh
bHVlLT5hc0FycmF5KGtpZHNBcnJheSkpCisgICAgYXV0byBraWRzQXJyYXkgPSBpdC0+dmFsdWUt
PmFzQXJyYXkoKTsKKyAgICBpZiAoIWtpZHNBcnJheSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CiAgICAgLy8gRklYTUU6IFJldHVybiB0aGUga2V5IElEcyBhbmQgdmFsaWRhdGUgdGhlbS4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9D
RE1GYWlyUGxheVN0cmVhbWluZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9hdmZvdW5kYXRpb24vQ0RNRmFpclBsYXlTdHJlYW1pbmcuY3BwCmluZGV4IDhhYzQ4ZWM1ZGM2
OWIzMTQ5NTdiYTQzM2Y5NzEwMWVhMjc3Njk2NDQuLjRmNDJjNDkzY2MzNTcwZGRjNmFmMDhkZTM5
MDVkMGNjODQ5ZDlhNzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2F2Zm91bmRhdGlvbi9DRE1GYWlyUGxheVN0cmVhbWluZy5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0NETUZhaXJQbGF5U3RyZWFtaW5n
LmNwcApAQCAtOTIsMjQgKzkyLDI0IEBAIHN0YXRpYyBWZWN0b3I8UmVmPFNoYXJlZEJ1ZmZlcj4+
IGV4dHJhY3RTaW5mRGF0YShjb25zdCBTaGFyZWRCdWZmZXImIGJ1ZmZlcikKICAgICAgICAgcmV0
dXJuIHsgfTsKICAgICBTdHJpbmcganNvbiB7IGJ1ZmZlci5kYXRhKCksIHN0YXRpY19jYXN0PHVu
c2lnbmVkPihidWZmZXIuc2l6ZSgpKSB9OwogCi0gICAgUmVmUHRyPEpTT046OlZhbHVlPiB2YWx1
ZTsKLSAgICBpZiAoIUpTT046OlZhbHVlOjpwYXJzZUpTT04oanNvbiwgdmFsdWUpKQorICAgIGF1
dG8gdmFsdWUgPSBKU09OOjpWYWx1ZTo6cGFyc2VKU09OKGpzb24pOworICAgIGlmICghdmFsdWUp
CiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBvYmplY3Q7
Ci0gICAgaWYgKCF2YWx1ZS0+YXNPYmplY3Qob2JqZWN0KSkKKyAgICBhdXRvIG9iamVjdCA9IHZh
bHVlLT5hc09iamVjdCgpOworICAgIGlmICghb2JqZWN0KQogICAgICAgICByZXR1cm4geyB9Owog
Ci0gICAgUmVmUHRyPEpTT046OkFycmF5PiBzaW5mQXJyYXk7Ci0gICAgaWYgKCFvYmplY3QtPmdl
dEFycmF5KENETVByaXZhdGVGYWlyUGxheVN0cmVhbWluZzo6c2luZk5hbWUoKSwgc2luZkFycmF5
KSkKKyAgICBhdXRvIHNpbmZBcnJheSA9IG9iamVjdC0+Z2V0QXJyYXkoQ0RNUHJpdmF0ZUZhaXJQ
bGF5U3RyZWFtaW5nOjpzaW5mTmFtZSgpKTsKKyAgICBpZiAoIXNpbmZBcnJheSkKICAgICAgICAg
cmV0dXJuIHsgfTsKIAogICAgIFZlY3RvcjxSZWY8U2hhcmVkQnVmZmVyPj4gc2luZnM7CiAgICAg
c2luZnMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShzaW5mQXJyYXktPmxlbmd0aCgpKTsKIAogICAg
IGZvciAoYXV0byYgdmFsdWUgOiAqc2luZkFycmF5KSB7Ci0gICAgICAgIFN0cmluZyBrZXlJRDsK
LSAgICAgICAgaWYgKCF2YWx1ZS0+YXNTdHJpbmcoa2V5SUQpKQorICAgICAgICBhdXRvIGtleUlE
ID0gdmFsdWUtPmFzU3RyaW5nKCk7CisgICAgICAgIGlmICgha2V5SUQpCiAgICAgICAgICAgICBj
b250aW51ZTsKIAogICAgICAgICBWZWN0b3I8Y2hhcj4gc2luZkRhdGE7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1JbnN0
YW5jZUZhaXJQbGF5U3RyZWFtaW5nQVZGT2JqQy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NETUluc3RhbmNlRmFpclBsYXlTdHJlYW1pbmdB
VkZPYmpDLm1tCmluZGV4IGMwNTE5YThjMjIxOTMwZjVjNjFhMGE4MGU5ZWMzYTFlOTljOGYxZDQu
LjFjNDlmODg3NTNhOTRjOTA3YmRmNmRiMDE5ZjIxOTViODQ3YjQ4M2QgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NETUluc3Rh
bmNlRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NETUluc3RhbmNlRmFpclBsYXlTdHJlYW1p
bmdBVkZPYmpDLm1tCkBAIC0zMTIsMTEgKzMxMiw4IEBAIHN0YXRpYyBSZWZQdHI8SlNPTjo6VmFs
dWU+IHBhcnNlSlNPTlZhbHVlKGNvbnN0IFNoYXJlZEJ1ZmZlciYgYnVmZmVyKQogCiAgICAgLy8g
UGFyc2UgdGhlIGJ1ZmZlciBjb250ZW50cyBhcyBKU09OLCByZXR1cm5pbmcgdGhlIHJvb3Qgb2Jq
ZWN0IChpZiBhbnkpLgogICAgIFN0cmluZyBqc29uIHsgYnVmZmVyLmRhdGEoKSwgc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KHNpemUpIH07Ci0gICAgUmVmUHRyPEpTT046OlZhbHVlPiB2YWx1ZTsKLSAg
ICBpZiAoIUpTT046OlZhbHVlOjpwYXJzZUpTT04oanNvbiwgdmFsdWUpKQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiB2YWx1ZTsKKyAgICByZXR1cm4gSlNPTjo6VmFsdWU6
OnBhcnNlSlNPTihqc29uKTsKIH0KIAogYm9vbCBDRE1JbnN0YW5jZUZhaXJQbGF5U3RyZWFtaW5n
QVZGT2JqQzo6c3VwcG9ydHNQZXJzaXN0YWJsZVN0YXRlKCkKQEAgLTgwNCwxOSArODAxLDI0IEBA
IHZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9uRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDOjp1cGRhdGVM
aWNlbnNlKGNvbnN0IFN0cmluZyYsIExpCiAgICAgICAgIH0pOwogCiAgICAgICAgIGF1dG8gcm9v
dCA9IHBhcnNlSlNPTlZhbHVlKHJlc3BvbnNlRGF0YSk7Ci0gICAgICAgIFJlZlB0cjxKU09OOjpB
cnJheT4gYXJyYXk7Ci0gICAgICAgIGlmICghcm9vdCB8fCAhcm9vdC0+YXNBcnJheShhcnJheSkp
IHsKKyAgICAgICAgaWYgKCFyb290KSB7CiAgICAgICAgICAgICBjYWxsYmFjayhmYWxzZSwgV1RG
OjpudWxsb3B0LCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCwgRmFpbGVkKTsKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIGF1dG8gcGFyc2VSZXNwb25zZSA9IFsm
XShSZWZQdHI8SlNPTjo6VmFsdWU+JiB2YWx1ZSkgLT4gYm9vbCB7Ci0gICAgICAgICAgICBSZWZQ
dHI8SlNPTjo6T2JqZWN0PiBvYmplY3Q7Ci0gICAgICAgICAgICBpZiAoIXZhbHVlLT5hc09iamVj
dChvYmplY3QpKQorICAgICAgICBhdXRvIGFycmF5ID0gcm9vdC0+YXNBcnJheSgpOworICAgICAg
ICBpZiAoIWFycmF5KSB7CisgICAgICAgICAgICBjYWxsYmFjayhmYWxzZSwgV1RGOjpudWxsb3B0
LCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCwgRmFpbGVkKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorCisgICAgICAgIGF1dG8gcGFyc2VSZXNwb25zZSA9IFsmXShSZWY8SlNP
Tjo6VmFsdWU+JiYgdmFsdWUpIC0+IGJvb2wgeworICAgICAgICAgICAgYXV0byBvYmplY3QgPSB2
YWx1ZS0+YXNPYmplY3QoKTsKKyAgICAgICAgICAgIGlmICghb2JqZWN0KQogICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICAgICAgU3RyaW5nIGtleUlEU3RyaW5nOwotICAg
ICAgICAgICAgaWYgKCFvYmplY3QtPmdldFN0cmluZygia2V5SUQiLCBrZXlJRFN0cmluZykpCisg
ICAgICAgICAgICBhdXRvIGtleUlEU3RyaW5nID0gb2JqZWN0LT5nZXRTdHJpbmcoImtleUlEIik7
CisgICAgICAgICAgICBpZiAoIWtleUlEU3RyaW5nKQogICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKIAogICAgICAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IGtleUlEVmVjdG9yOwpAQCAtODQz
LDE0ICs4NDUsMTQgQEAgdm9pZCBDRE1JbnN0YW5jZVNlc3Npb25GYWlyUGxheVN0cmVhbWluZ0FW
Rk9iakM6OnVwZGF0ZUxpY2Vuc2UoY29uc3QgU3RyaW5nJiwgTGkKICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKICAgICAgICAgICAgIGlmIChoYXNFcnJvcikgewotICAgICAgICAgICAg
ICAgIE5TSW50ZWdlciBlcnJvckNvZGU7Ci0gICAgICAgICAgICAgICAgaWYgKCFlcnJvckZpbmRS
ZXN1bHRzLT52YWx1ZS0+YXNJbnRlZ2VyKGVycm9yQ29kZSkpCisgICAgICAgICAgICAgICAgYXV0
byBlcnJvckNvZGUgPSBlcnJvckZpbmRSZXN1bHRzLT52YWx1ZS0+YXNJbnRlZ2VyKCk7CisgICAg
ICAgICAgICAgICAgaWYgKCFlcnJvckNvZGUpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgICAgICAgICBhdXRvIGVycm9yID0gYWRvcHROUyhbW05TRXJyb3IgYWxs
b2NdIGluaXRXaXRoRG9tYWluOkAib3JnLndlYmtpdC5lbWUiIGNvZGU6ZXJyb3JDb2RlIHVzZXJJ
bmZvOm5pbF0pOworICAgICAgICAgICAgICAgIGF1dG8gZXJyb3IgPSBhZG9wdE5TKFtbTlNFcnJv
ciBhbGxvY10gaW5pdFdpdGhEb21haW46QCJvcmcud2Via2l0LmVtZSIgY29kZToqZXJyb3JDb2Rl
IHVzZXJJbmZvOm5pbF0pOwogICAgICAgICAgICAgICAgIFtyZXF1ZXN0IHByb2Nlc3NDb250ZW50
S2V5UmVzcG9uc2VFcnJvcjplcnJvci5nZXQoKV07CiAgICAgICAgICAgICB9IGVsc2UgaWYgKGhh
c1BheWxvYWQpIHsKLSAgICAgICAgICAgICAgICBTdHJpbmcgcGF5bG9hZFN0cmluZzsKLSAgICAg
ICAgICAgICAgICBpZiAoIXBheWxvYWRGaW5kUmVzdWx0cy0+dmFsdWUtPmFzU3RyaW5nKHBheWxv
YWRTdHJpbmcpKQorICAgICAgICAgICAgICAgIGF1dG8gcGF5bG9hZFN0cmluZyA9IHBheWxvYWRG
aW5kUmVzdWx0cy0+dmFsdWUtPmFzU3RyaW5nKCk7CisgICAgICAgICAgICAgICAgaWYgKCFwYXls
b2FkU3RyaW5nKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAg
ICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHBheWxvYWRWZWN0b3I7CiAgICAgICAgICAgICAgICAgaWYg
KCFiYXNlNjREZWNvZGUocGF5bG9hZFN0cmluZywgcGF5bG9hZFZlY3RvcikpCkBAIC04NjEsNyAr
ODYzLDcgQEAgdm9pZCBDRE1JbnN0YW5jZVNlc3Npb25GYWlyUGxheVN0cmVhbWluZ0FWRk9iakM6
OnVwZGF0ZUxpY2Vuc2UoY29uc3QgU3RyaW5nJiwgTGkKICAgICAgICAgICAgIHJldHVybiB0cnVl
OwogICAgICAgICB9OwogICAgICAgICBmb3IgKGF1dG8gdmFsdWUgOiAqYXJyYXkpIHsKLSAgICAg
ICAgICAgIGlmICghcGFyc2VSZXNwb25zZSh2YWx1ZSkpIHsKKyAgICAgICAgICAgIGlmICghcGFy
c2VSZXNwb25zZShXVEZNb3ZlKHZhbHVlKSkpIHsKICAgICAgICAgICAgICAgICBERUJVR19MT0df
SUZfUE9TU0lCTEUoTE9HSURFTlRJRklFUiwgIidjZW5jJyBpbml0RGF0YSwgRmFpbGVkLCBjb3Vs
ZCBub3QgcGFyc2UgcmVzcG9uc2UiKTsKICAgICAgICAgICAgICAgICBjYWxsYmFjayhmYWxzZSwg
V1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCwgRmFpbGVkKTsKICAgICAg
ICAgICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViRHJpdmVyL0NvbW1hbmRS
ZXN1bHQuY3BwIGIvU291cmNlL1dlYkRyaXZlci9Db21tYW5kUmVzdWx0LmNwcAppbmRleCBhNzIw
NzA5OTA4OTNkYjE1NmQ3ZmQ2ZmUzMDdhNTNmMjBjYjIzNTBhLi4wODMxYWY3MTIxYTFmOTBiMDdj
NmM4Y2FjNDgxNzZkNTkwNWEyNjQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViRHJpdmVyL0NvbW1h
bmRSZXN1bHQuY3BwCisrKyBiL1NvdXJjZS9XZWJEcml2ZXIvQ29tbWFuZFJlc3VsdC5jcHAKQEAg
LTQ5LDE4ICs0OSwxOSBAQCBDb21tYW5kUmVzdWx0OjpDb21tYW5kUmVzdWx0KFJlZlB0cjxKU09O
OjpWYWx1ZT4mJiByZXN1bHQsIE9wdGlvbmFsPEVycm9yQ29kZT4gZQogICAgIGlmICghcmVzdWx0
KQogICAgICAgICByZXR1cm47CiAKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBlcnJvck9iamVj
dDsKLSAgICBpZiAoIXJlc3VsdC0+YXNPYmplY3QoZXJyb3JPYmplY3QpKQorICAgIGF1dG8gZXJy
b3JPYmplY3QgPSByZXN1bHQtPmFzT2JqZWN0KCk7CisgICAgaWYgKCFlcnJvck9iamVjdCkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgaW50IGVycm9yOwotICAgIGlmICghZXJyb3JPYmplY3QtPmdl
dEludGVnZXIoImNvZGUiLCBlcnJvcikpCi0gICAgICAgIHJldHVybjsKLSAgICBTdHJpbmcgZXJy
b3JNZXNzYWdlOwotICAgIGlmICghZXJyb3JPYmplY3QtPmdldFN0cmluZygibWVzc2FnZSIsIGVy
cm9yTWVzc2FnZSkpCisgICAgYXV0byBlcnJvciA9IGVycm9yT2JqZWN0LT5nZXRJbnRlZ2VyKCJj
b2RlIik7CisgICAgaWYgKCFlcnJvcikKICAgICAgICAgcmV0dXJuOwogCi0gICAgc3dpdGNoIChl
cnJvcikgeworICAgIGF1dG8gZXJyb3JNZXNzYWdlID0gZXJyb3JPYmplY3QtPmdldFN0cmluZygi
bWVzc2FnZSIpOworICAgIGlmICghZXJyb3JNZXNzYWdlKQorICAgICAgICByZXR1cm47CisKKyAg
ICBzd2l0Y2ggKCplcnJvcikgewogICAgIGNhc2UgUHJvdG9jb2xFcnJvckNvZGU6OlBhcnNlRXJy
b3I6CiAgICAgY2FzZSBQcm90b2NvbEVycm9yQ29kZTo6SW52YWxpZFJlcXVlc3Q6CiAgICAgY2Fz
ZSBQcm90b2NvbEVycm9yQ29kZTo6TWV0aG9kTm90Rm91bmQ6CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViRHJpdmVyL1Nlc3Npb24uY3BwIGIvU291cmNlL1dlYkRyaXZlci9TZXNzaW9uLmNwcAppbmRl
eCBhNTVmYTQ5MzgwYzQ5NTEzMGZlMzFhOTZjODRlMDg5Yjc2ZDFjYWM4Li5hZWE0MDYxZTIyNWE3
Y2RjYmNkZWQ3ZTc4YmM2ZDcwZjlmZDgwM2Q1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViRHJpdmVy
L1Nlc3Npb24uY3BwCisrKyBiL1NvdXJjZS9XZWJEcml2ZXIvU2Vzc2lvbi5jcHAKQEAgLTgzLDEx
ICs4MywxMCBAQCBib29sIFNlc3Npb246OmlzQ29ubmVjdGVkKCkgY29uc3QKIAogc3RhdGljIE9w
dGlvbmFsPFN0cmluZz4gZmlyc3RXaW5kb3dIYW5kbGVJblJlc3VsdChKU09OOjpWYWx1ZSYgcmVz
dWx0KQogewotICAgIFJlZlB0cjxKU09OOjpBcnJheT4gaGFuZGxlczsKLSAgICBpZiAocmVzdWx0
LmFzQXJyYXkoaGFuZGxlcykgJiYgaGFuZGxlcy0+bGVuZ3RoKCkpIHsKLSAgICAgICAgYXV0byBo
YW5kbGVWYWx1ZSA9IGhhbmRsZXMtPmdldCgwKTsKLSAgICAgICAgU3RyaW5nIGhhbmRsZTsKLSAg
ICAgICAgaWYgKGhhbmRsZVZhbHVlLT5hc1N0cmluZyhoYW5kbGUpKQorICAgIGF1dG8gaGFuZGxl
cyA9IHJlc3VsdC5hc0FycmF5KCk7CisgICAgaWYgKGhhbmRsZXMgJiYgaGFuZGxlcy0+bGVuZ3Ro
KCkpIHsKKyAgICAgICAgYXV0byBoYW5kbGUgPSBoYW5kbGVzLT5nZXQoMCktPmFzU3RyaW5nKCk7
CisgICAgICAgIGlmICghIWhhbmRsZSkKICAgICAgICAgICAgIHJldHVybiBoYW5kbGU7CiAgICAg
fQogICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CkBAIC0xMjYsNyArMTI1LDcgQEAgdm9pZCBTZXNz
aW9uOjpjbG9zZShGdW5jdGlvbjx2b2lkIChDb21tYW5kUmVzdWx0JiYpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQogCiB2b2lkIFNlc3Npb246OmdldFRpbWVvdXRzKEZ1bmN0aW9uPHZvaWQgKENvbW1h
bmRSZXN1bHQmJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgUmVmUHRyPEpTT046Ok9i
amVjdD4gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgYXV0byBwYXJh
bWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICBpZiAobV9zY3JpcHRUaW1lb3V0
ID09IHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6aW5maW5pdHkoKSkKICAgICAgICAgcGFy
YW1ldGVycy0+c2V0VmFsdWUoInNjcmlwdCJfcywgSlNPTjo6VmFsdWU6Om51bGwoKSk7CiAgICAg
ZWxzZQpAQCAtMTg3LDExICsxODYsMTMgQEAgdm9pZCBTZXNzaW9uOjpjcmVhdGVUb3BMZXZlbEJy
b3dzaW5nQ29udGV4dChGdW5jdGlvbjx2b2lkIChDb21tYW5kUmVzdWx0JiYpPiYmIGMKICAgICAg
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoV1RGTW92ZShyZXNw
b25zZS5yZXNwb25zZU9iamVjdCkpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQot
ICAgICAgICBTdHJpbmcgaGFuZGxlOwotICAgICAgICBpZiAoIXJlc3BvbnNlLnJlc3BvbnNlT2Jq
ZWN0LT5nZXRTdHJpbmcoImhhbmRsZSJfcywgaGFuZGxlKSkgeworCisgICAgICAgIGF1dG8gaGFu
ZGxlID0gcmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdldFN0cmluZygiaGFuZGxlIl9zKTsKKyAg
ICAgICAgaWYgKCFoYW5kbGUpIHsKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1h
bmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQorCiAgICAgICAgIHN3aXRjaFRvVG9wTGV2
ZWxCcm93c2luZ0NvbnRleHQoaGFuZGxlKTsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29t
bWFuZFJlc3VsdDo6c3VjY2VzcygpKTsKICAgICB9KTsKQEAgLTE5OSwxNSArMjAwLDE2IEBAIHZv
aWQgU2Vzc2lvbjo6Y3JlYXRlVG9wTGV2ZWxCcm93c2luZ0NvbnRleHQoRnVuY3Rpb248dm9pZCAo
Q29tbWFuZFJlc3VsdCYmKT4mJiBjCiAKIHZvaWQgU2Vzc2lvbjo6aGFuZGxlVXNlclByb21wdHMo
RnVuY3Rpb248dm9pZCAoQ29tbWFuZFJlc3VsdCYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsK
LSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVh
dGUoKTsKKyAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAg
IHBhcmFtZXRlcnMtPnNldFN0cmluZygiYnJvd3NpbmdDb250ZXh0SGFuZGxlIl9zLCBtX3RvcGxl
dmVsQnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwogICAgIG1faG9zdC0+c2VuZENvbW1hbmRUb0Jh
Y2tlbmQoImlzU2hvd2luZ0phdmFTY3JpcHREaWFsb2ciX3MsIFdURk1vdmUocGFyYW1ldGVycyks
IFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVy
ID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKFNlc3Npb25Ib3N0OjpDb21tYW5kUmVzcG9u
c2UmJiByZXNwb25zZSkgbXV0YWJsZSB7CiAgICAgICAgIGlmIChyZXNwb25zZS5pc0Vycm9yIHx8
ICFyZXNwb25zZS5yZXNwb25zZU9iamVjdCkgewogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChXVEZNb3ZlKHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0KSkp
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIGJvb2wgaXNTaG93aW5n
SmF2YVNjcmlwdERpYWxvZzsKLSAgICAgICAgaWYgKCFyZXNwb25zZS5yZXNwb25zZU9iamVjdC0+
Z2V0Qm9vbGVhbigicmVzdWx0IiwgaXNTaG93aW5nSmF2YVNjcmlwdERpYWxvZykpIHsKKworICAg
ICAgICBhdXRvIGlzU2hvd2luZ0phdmFTY3JpcHREaWFsb2cgPSByZXNwb25zZS5yZXNwb25zZU9i
amVjdC0+Z2V0Qm9vbGVhbigicmVzdWx0Iik7CisgICAgICAgIGlmICghaXNTaG93aW5nSmF2YVNj
cmlwdERpYWxvZykgewogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3Vs
dDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikpOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC0yNzMsMTMgKzI3NSwxMyBAQCB2b2lkIFNlc3Np
b246OnJlcG9ydFVuZXhwZWN0ZWRBbGVydE9wZW4oRnVuY3Rpb248dm9pZCAoQ29tbWFuZFJlc3Vs
dCYmKT4mJiBjb21wbAogICAgIGdldEFsZXJ0VGV4dChbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oQ29tbWFuZFJlc3VsdCYmIHJlc3VsdCkgewogICAgICAg
ICBPcHRpb25hbDxTdHJpbmc+IGFsZXJ0VGV4dDsKICAgICAgICAgaWYgKCFyZXN1bHQuaXNFcnJv
cigpKSB7Ci0gICAgICAgICAgICBTdHJpbmcgdmFsdWVTdHJpbmc7Ci0gICAgICAgICAgICBpZiAo
cmVzdWx0LnJlc3VsdCgpLT5hc1N0cmluZyh2YWx1ZVN0cmluZykpCisgICAgICAgICAgICBhdXRv
IHZhbHVlU3RyaW5nID0gcmVzdWx0LnJlc3VsdCgpLT5hc1N0cmluZygpOworICAgICAgICAgICAg
aWYgKCEhdmFsdWVTdHJpbmcpCiAgICAgICAgICAgICAgICAgYWxlcnRUZXh0ID0gdmFsdWVTdHJp
bmc7CiAgICAgICAgIH0KICAgICAgICAgYXV0byBlcnJvclJlc3VsdCA9IENvbW1hbmRSZXN1bHQ6
OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmV4cGVjdGVkQWxlcnRPcGVuKTsKICAg
ICAgICAgaWYgKGFsZXJ0VGV4dCkgewotICAgICAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4g
YWRkaXRvbmFsRGF0YSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgICAgICBhdXRv
IGFkZGl0b25hbERhdGEgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICAgICAgYWRk
aXRvbmFsRGF0YS0+c2V0U3RyaW5nKCJ0ZXh0Il9zLCBhbGVydFRleHQudmFsdWUoKSk7CiAgICAg
ICAgICAgICBlcnJvclJlc3VsdC5zZXRBZGRpdGlvbmFsRXJyb3JEYXRhKFdURk1vdmUoYWRkaXRv
bmFsRGF0YSkpOwogICAgICAgICB9CkBAIC0zMDAsNyArMzAyLDcgQEAgdm9pZCBTZXNzaW9uOjpn
byhjb25zdCBTdHJpbmcmIHVybCwgRnVuY3Rpb248dm9pZCAoQ29tbWFuZFJlc3VsdCYmKT4mJiBj
b21wbGV0aW8KICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIFJlZlB0
cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAg
ICAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICBw
YXJhbWV0ZXJzLT5zZXRTdHJpbmcoImhhbmRsZSJfcywgbV90b3BsZXZlbEJyb3dzaW5nQ29udGV4
dC52YWx1ZSgpKTsKICAgICAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJ1cmwiX3MsIHVybCk7
CiAgICAgICAgIHBhcmFtZXRlcnMtPnNldERvdWJsZSgicGFnZUxvYWRUaW1lb3V0Il9zLCBtX3Bh
Z2VMb2FkVGltZW91dCk7CkBAIC0zMzAsMjMgKzMzMiwyNiBAQCB2b2lkIFNlc3Npb246OmdldEN1
cnJlbnRVUkwoRnVuY3Rpb248dm9pZCAoQ29tbWFuZFJlc3VsdCYmKT4mJiBjb21wbGV0aW9uSGFu
ZGxlcgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgUmVmUHRyPEpT
T046Ok9iamVjdD4gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAg
IGF1dG8gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgIHBhcmFt
ZXRlcnMtPnNldFN0cmluZygiaGFuZGxlIl9zLCBtX3RvcGxldmVsQnJvd3NpbmdDb250ZXh0LnZh
bHVlKCkpOwogICAgICAgICBtX2hvc3QtPnNlbmRDb21tYW5kVG9CYWNrZW5kKCJnZXRCcm93c2lu
Z0NvbnRleHQiX3MsIFdURk1vdmUocGFyYW1ldGVycyksIFtwcm90ZWN0ZWRUaGlzLCBjb21wbGV0
aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXShTZXNzaW9uSG9zdDo6Q29t
bWFuZFJlc3BvbnNlJiYgcmVzcG9uc2UpIHsKICAgICAgICAgICAgIGlmIChyZXNwb25zZS5pc0Vy
cm9yIHx8ICFyZXNwb25zZS5yZXNwb25zZU9iamVjdCkgewogICAgICAgICAgICAgICAgIGNvbXBs
ZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoV1RGTW92ZShyZXNwb25zZS5yZXNwb25z
ZU9iamVjdCkpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBicm93c2luZ0NvbnRleHQ7Ci0gICAgICAgICAg
ICBpZiAoIXJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRPYmplY3QoImNvbnRleHQiLCBicm93
c2luZ0NvbnRleHQpKSB7CisKKyAgICAgICAgICAgIGF1dG8gYnJvd3NpbmdDb250ZXh0ID0gcmVz
cG9uc2UucmVzcG9uc2VPYmplY3QtPmdldE9iamVjdCgiY29udGV4dCIpOworICAgICAgICAgICAg
aWYgKCFicm93c2luZ0NvbnRleHQpIHsKICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVy
cm9yKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQotICAgICAgICAg
ICAgU3RyaW5nIHVybDsKLSAgICAgICAgICAgIGlmICghYnJvd3NpbmdDb250ZXh0LT5nZXRTdHJp
bmcoInVybCIsIHVybCkpIHsKKworICAgICAgICAgICAgYXV0byB1cmwgPSBicm93c2luZ0NvbnRl
eHQtPmdldFN0cmluZygidXJsIik7CisgICAgICAgICAgICBpZiAoIXVybCkgewogICAgICAgICAg
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3Vs
dDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgICAgICB9CisKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1
bHQ6OnN1Y2Nlc3MoSlNPTjo6VmFsdWU6OmNyZWF0ZSh1cmwpKSk7CiAgICAgICAgIH0pOwogICAg
IH0pOwpAQCAtMzY0LDcgKzM2OSw3IEBAIHZvaWQgU2Vzc2lvbjo6YmFjayhGdW5jdGlvbjx2b2lk
IChDb21tYW5kUmVzdWx0JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogICAgICAgICAgICAgY29t
cGxldGlvbkhhbmRsZXIoV1RGTW92ZShyZXN1bHQpKTsKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQotICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzID0gSlNPTjo6
T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgYXV0byBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0
OjpjcmVhdGUoKTsKICAgICAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJoYW5kbGUiX3MsIG1f
dG9wbGV2ZWxCcm93c2luZ0NvbnRleHQudmFsdWUoKSk7CiAgICAgICAgIHBhcmFtZXRlcnMtPnNl
dERvdWJsZSgicGFnZUxvYWRUaW1lb3V0Il9zLCBtX3BhZ2VMb2FkVGltZW91dCk7CiAgICAgICAg
IGlmIChhdXRvIHBhZ2VMb2FkU3RyYXRlZ3kgPSBwYWdlTG9hZFN0cmF0ZWd5U3RyaW5nKCkpCkBA
IC0zOTIsNyArMzk3LDcgQEAgdm9pZCBTZXNzaW9uOjpmb3J3YXJkKEZ1bmN0aW9uPHZvaWQgKENv
bW1hbmRSZXN1bHQmJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiAgICAgICAgICAgICBjb21wbGV0
aW9uSGFuZGxlcihXVEZNb3ZlKHJlc3VsdCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9Ci0gICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnMgPSBKU09OOjpPYmpl
Y3Q6OmNyZWF0ZSgpOworICAgICAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNy
ZWF0ZSgpOwogICAgICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoImhhbmRsZSJfcywgbV90b3Bs
ZXZlbEJyb3dzaW5nQ29udGV4dC52YWx1ZSgpKTsKICAgICAgICAgcGFyYW1ldGVycy0+c2V0RG91
YmxlKCJwYWdlTG9hZFRpbWVvdXQiX3MsIG1fcGFnZUxvYWRUaW1lb3V0KTsKICAgICAgICAgaWYg
KGF1dG8gcGFnZUxvYWRTdHJhdGVneSA9IHBhZ2VMb2FkU3RyYXRlZ3lTdHJpbmcoKSkKQEAgLTQy
MCw3ICs0MjUsNyBAQCB2b2lkIFNlc3Npb246OnJlZnJlc2goRnVuY3Rpb248dm9pZCAoQ29tbWFu
ZFJlc3VsdCYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKICAgICAgICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKFdURk1vdmUocmVzdWx0KSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
LSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6
Y3JlYXRlKCk7CisgICAgICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRl
KCk7CiAgICAgICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiaGFuZGxlIl9zLCBtX3RvcGxldmVs
QnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwogICAgICAgICBwYXJhbWV0ZXJzLT5zZXREb3VibGUo
InBhZ2VMb2FkVGltZW91dCJfcywgbV9wYWdlTG9hZFRpbWVvdXQpOwogICAgICAgICBpZiAoYXV0
byBwYWdlTG9hZFN0cmF0ZWd5ID0gcGFnZUxvYWRTdHJhdGVneVN0cmluZygpKQpAQCAtNDQ4LDcg
KzQ1Myw3IEBAIHZvaWQgU2Vzc2lvbjo6Z2V0VGl0bGUoRnVuY3Rpb248dm9pZCAoQ29tbWFuZFJl
c3VsdCYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5k
bGVyKFdURk1vdmUocmVzdWx0KSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAg
ICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3Jl
YXRlKCk7CisgICAgICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7
CiAgICAgICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiYnJvd3NpbmdDb250ZXh0SGFuZGxlIl9z
LCBtX3RvcGxldmVsQnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwogICAgICAgICBwYXJhbWV0ZXJz
LT5zZXRTdHJpbmcoImZ1bmN0aW9uIl9zLCAiZnVuY3Rpb24oKSB7IHJldHVybiBkb2N1bWVudC50
aXRsZTsgfSJfcyk7CiAgICAgICAgIHBhcmFtZXRlcnMtPnNldEFycmF5KCJhcmd1bWVudHMiX3Ms
IEpTT046OkFycmF5OjpjcmVhdGUoKSk7CkBAIC00NTcsMTYgKzQ2MiwxOSBAQCB2b2lkIFNlc3Np
b246OmdldFRpdGxlKEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSZXN1bHQmJik+JiYgY29tcGxldGlv
bkhhbmRsZXIpCiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3Vs
dDo6ZmFpbChXVEZNb3ZlKHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0KSkpOwogICAgICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFN0cmluZyB2YWx1ZVN0cmlu
ZzsKLSAgICAgICAgICAgIGlmICghcmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdldFN0cmluZygi
cmVzdWx0Il9zLCB2YWx1ZVN0cmluZykpIHsKKworICAgICAgICAgICAgYXV0byB2YWx1ZVN0cmlu
ZyA9IHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRTdHJpbmcoInJlc3VsdCJfcyk7CisgICAg
ICAgICAgICBpZiAoIXZhbHVlU3RyaW5nKSB7CiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhh
bmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OlVua25v
d25FcnJvcikpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gcmVzdWx0VmFsdWU7Ci0gICAgICAgICAgICBpZiAo
IUpTT046OlZhbHVlOjpwYXJzZUpTT04odmFsdWVTdHJpbmcsIHJlc3VsdFZhbHVlKSkgeworCisg
ICAgICAgICAgICBhdXRvIHJlc3VsdFZhbHVlID0gSlNPTjo6VmFsdWU6OnBhcnNlSlNPTih2YWx1
ZVN0cmluZyk7CisgICAgICAgICAgICBpZiAoIXJlc3VsdFZhbHVlKSB7CiAgICAgICAgICAgICAg
ICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpF
cnJvckNvZGU6OlVua25vd25FcnJvcikpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgICAgIH0KKwogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6
c3VjY2VzcyhXVEZNb3ZlKHJlc3VsdFZhbHVlKSkpOwogICAgICAgICB9KTsKICAgICB9KTsKQEAg
LTQ3OSwzMCArNDg3LDMzIEBAIHZvaWQgU2Vzc2lvbjo6Z2V0V2luZG93SGFuZGxlKEZ1bmN0aW9u
PHZvaWQgKENvbW1hbmRSZXN1bHQmJik+JiYgY29tcGxldGlvbkhhbmRsCiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzID0gSlNPTjo6
T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNy
ZWF0ZSgpOwogICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiaGFuZGxlIl9zLCBtX3RvcGxldmVs
QnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwogICAgIG1faG9zdC0+c2VuZENvbW1hbmRUb0JhY2tl
bmQoImdldEJyb3dzaW5nQ29udGV4dCJfcywgV1RGTW92ZShwYXJhbWV0ZXJzKSwgW3Byb3RlY3Rl
ZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKV0oU2Vzc2lvbkhvc3Q6OkNvbW1hbmRSZXNwb25zZSYmIHJlc3BvbnNlKSB7
CiAgICAgICAgIGlmIChyZXNwb25zZS5pc0Vycm9yIHx8ICFyZXNwb25zZS5yZXNwb25zZU9iamVj
dCkgewogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChX
VEZNb3ZlKHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0KSkpOwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9Ci0gICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IGJyb3dzaW5nQ29udGV4dDsK
LSAgICAgICAgaWYgKCFyZXNwb25zZS5yZXNwb25zZU9iamVjdC0+Z2V0T2JqZWN0KCJjb250ZXh0
Il9zLCBicm93c2luZ0NvbnRleHQpKSB7CisKKyAgICAgICAgYXV0byBicm93c2luZ0NvbnRleHQg
PSByZXNwb25zZS5yZXNwb25zZU9iamVjdC0+Z2V0T2JqZWN0KCJjb250ZXh0Il9zKTsKKyAgICAg
ICAgaWYgKCFicm93c2luZ0NvbnRleHQpIHsKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVy
KENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtub3duRXJy
b3IpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBTdHJpbmcgaGFu
ZGxlOwotICAgICAgICBpZiAoIWJyb3dzaW5nQ29udGV4dC0+Z2V0U3RyaW5nKCJoYW5kbGUiX3Ms
IGhhbmRsZSkpIHsKKworICAgICAgICBhdXRvIGhhbmRsZSA9IGJyb3dzaW5nQ29udGV4dC0+Z2V0
U3RyaW5nKCJoYW5kbGUiX3MpOworICAgICAgICBpZiAoIWhhbmRsZSkgewogICAgICAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJv
ckNvZGU6OlVua25vd25FcnJvcikpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CisK
ICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6c3VjY2VzcyhKU09OOjpW
YWx1ZTo6Y3JlYXRlKGhhbmRsZSkpKTsKICAgICB9KTsKIH0KIAogdm9pZCBTZXNzaW9uOjpjbG9z
ZVRvcExldmVsQnJvd3NpbmdDb250ZXh0KGNvbnN0IFN0cmluZyYgdG9wbGV2ZWxCcm93c2luZ0Nv
bnRleHQsIEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSZXN1bHQmJik+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCiB7Ci0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVycyA9IEpTT046Ok9iamVj
dDo6Y3JlYXRlKCk7CisgICAgYXV0byBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUo
KTsKICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoImhhbmRsZSJfcywgdG9wbGV2ZWxCcm93c2lu
Z0NvbnRleHQpOwogICAgIG1faG9zdC0+c2VuZENvbW1hbmRUb0JhY2tlbmQoImNsb3NlQnJvd3Np
bmdDb250ZXh0Il9zLCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9
IG1ha2VSZWYoKnRoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpXShTZXNzaW9uSG9zdDo6Q29tbWFuZFJlc3BvbnNlJiYgcmVzcG9uc2UpIG11dGFibGUg
ewogICAgICAgICBpZiAoIW1faG9zdC0+aXNDb25uZWN0ZWQoKSkgewpAQCAtNTQ1LDcgKzU1Niw3
IEBAIHZvaWQgU2Vzc2lvbjo6Y2xvc2VXaW5kb3coRnVuY3Rpb248dm9pZCAoQ29tbWFuZFJlc3Vs
dCYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIAogdm9pZCBTZXNzaW9uOjpzd2l0Y2hUb1dpbmRv
dyhjb25zdCBTdHJpbmcmIHdpbmRvd0hhbmRsZSwgRnVuY3Rpb248dm9pZCAoQ29tbWFuZFJlc3Vs
dCYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBw
YXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBhdXRvIHBhcmFtZXRlcnMg
PSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiYnJv
d3NpbmdDb250ZXh0SGFuZGxlIl9zLCB3aW5kb3dIYW5kbGUpOwogICAgIG1faG9zdC0+c2VuZENv
bW1hbmRUb0JhY2tlbmQoInN3aXRjaFRvQnJvd3NpbmdDb250ZXh0Il9zLCBXVEZNb3ZlKHBhcmFt
ZXRlcnMpLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCB3aW5kb3dIYW5k
bGUsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKFNlc3Np
b25Ib3N0OjpDb21tYW5kUmVzcG9uc2UmJiByZXNwb25zZSkgewogICAgICAgICBpZiAocmVzcG9u
c2UuaXNFcnJvcikgewpAQCAtNTY0LDIyICs1NzUsMjMgQEAgdm9pZCBTZXNzaW9uOjpnZXRXaW5k
b3dIYW5kbGVzKEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSZXN1bHQmJik+JiYgY29tcGxldGlvbkhh
bmQKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoV1RG
TW92ZShyZXNwb25zZS5yZXNwb25zZU9iamVjdCkpKTsKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQotICAgICAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IGJyb3dzaW5nQ29udGV4dEFycmF5
OwotICAgICAgICBpZiAoIXJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRBcnJheSgiY29udGV4
dHMiX3MsIGJyb3dzaW5nQ29udGV4dEFycmF5KSkgeworCisgICAgICAgIGF1dG8gYnJvd3NpbmdD
b250ZXh0QXJyYXkgPSByZXNwb25zZS5yZXNwb25zZU9iamVjdC0+Z2V0QXJyYXkoImNvbnRleHRz
Il9zKTsKKyAgICAgICAgaWYgKCFicm93c2luZ0NvbnRleHRBcnJheSkgewogICAgICAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJv
ckNvZGU6OlVua25vd25FcnJvcikpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0g
ICAgICAgIFJlZlB0cjxKU09OOjpBcnJheT4gd2luZG93SGFuZGxlcyA9IEpTT046OkFycmF5Ojpj
cmVhdGUoKTsKKworICAgICAgICBhdXRvIHdpbmRvd0hhbmRsZXMgPSBKU09OOjpBcnJheTo6Y3Jl
YXRlKCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBicm93c2luZ0NvbnRleHRB
cnJheS0+bGVuZ3RoKCk7ICsraSkgewotICAgICAgICAgICAgUmVmUHRyPEpTT046OlZhbHVlPiBi
cm93c2luZ0NvbnRleHRWYWx1ZSA9IGJyb3dzaW5nQ29udGV4dEFycmF5LT5nZXQoaSk7Ci0gICAg
ICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBicm93c2luZ0NvbnRleHQ7Ci0gICAgICAgICAg
ICBpZiAoIWJyb3dzaW5nQ29udGV4dFZhbHVlLT5hc09iamVjdChicm93c2luZ0NvbnRleHQpKSB7
CisgICAgICAgICAgICBhdXRvIGJyb3dzaW5nQ29udGV4dCA9IGJyb3dzaW5nQ29udGV4dEFycmF5
LT5nZXQoaSktPmFzT2JqZWN0KCk7CisgICAgICAgICAgICBpZiAoIWJyb3dzaW5nQ29udGV4dCkg
ewogICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwo
Q29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKICAgICAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIFN0cmluZyBoYW5kbGU7Ci0g
ICAgICAgICAgICBpZiAoIWJyb3dzaW5nQ29udGV4dC0+Z2V0U3RyaW5nKCJoYW5kbGUiX3MsIGhh
bmRsZSkpIHsKKyAgICAgICAgICAgIGF1dG8gaGFuZGxlID0gYnJvd3NpbmdDb250ZXh0LT5nZXRT
dHJpbmcoImhhbmRsZSJfcyk7CisgICAgICAgICAgICBpZiAoIWhhbmRsZSkgewogICAgICAgICAg
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3Vs
dDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgICAgICB9CkBAIC02MTMsMTcgKzYyNSwyMCBAQCB2b2lkIFNlc3Npb246Om5ld1dpbmRv
dyhPcHRpb25hbDxTdHJpbmc+IHR5cGVIaW50LCBGdW5jdGlvbjx2b2lkIChDb21tYW5kUmVzdWx0
JgogICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwo
V1RGTW92ZShyZXNwb25zZS5yZXNwb25zZU9iamVjdCkpKTsKICAgICAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBTdHJpbmcgaGFuZGxlOwotICAgICAgICAg
ICAgaWYgKCFyZXNwb25zZS5yZXNwb25zZU9iamVjdC0+Z2V0U3RyaW5nKCJoYW5kbGUiX3MsIGhh
bmRsZSkpIHsKKworICAgICAgICAgICAgYXV0byBoYW5kbGUgPSByZXNwb25zZS5yZXNwb25zZU9i
amVjdC0+Z2V0U3RyaW5nKCJoYW5kbGUiX3MpOworICAgICAgICAgICAgaWYgKCFoYW5kbGUpIHsK
ICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENv
bW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVycm9yKSk7CiAgICAgICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgU3RyaW5nIHByZXNlbnRhdGlvbjsK
LSAgICAgICAgICAgIGlmICghcmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdldFN0cmluZygicHJl
c2VudGF0aW9uIl9zLCBwcmVzZW50YXRpb24pKSB7CisKKyAgICAgICAgICAgIGF1dG8gcHJlc2Vu
dGF0aW9uID0gcmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdldFN0cmluZygicHJlc2VudGF0aW9u
Il9zKTsKKyAgICAgICAgICAgIGlmICghcHJlc2VudGF0aW9uKSB7CiAgICAgICAgICAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJv
ckNvZGU6OlVua25vd25FcnJvcikpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9i
amVjdDo6Y3JlYXRlKCk7CisKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gSlNPTjo6T2JqZWN0
OjpjcmVhdGUoKTsKICAgICAgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJoYW5kbGUiX3MsIGhh
bmRsZSk7CiAgICAgICAgICAgICByZXN1bHQtPnNldFN0cmluZygidHlwZSJfcywgcHJlc2VudGF0
aW9uID09ICJXaW5kb3ciX3MgPyAid2luZG93Il9zIDogInRhYiJfcyk7CiAgICAgICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpzdWNjZXNzKFdURk1vdmUocmVzdWx0KSkp
OwpAQCAtNjQ5LDE1ICs2NjQsMTQgQEAgdm9pZCBTZXNzaW9uOjpzd2l0Y2hUb0ZyYW1lKFJlZlB0
cjxKU09OOjpWYWx1ZT4mJiBmcmFtZUlELCBGdW5jdGlvbjx2b2lkIChDb21tYW4KICAgICAgICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUocmVzdWx0KSk7CiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KLSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVycyA9
IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTT046
Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiYnJvd3Np
bmdDb250ZXh0SGFuZGxlIl9zLCBtX3RvcGxldmVsQnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwog
ICAgICAgICBpZiAobV9jdXJyZW50QnJvd3NpbmdDb250ZXh0KQogICAgICAgICAgICAgcGFyYW1l
dGVycy0+c2V0U3RyaW5nKCJmcmFtZUhhbmRsZSJfcywgbV9jdXJyZW50QnJvd3NpbmdDb250ZXh0
LnZhbHVlKCkpOwogCi0gICAgICAgIGludCBmcmFtZUluZGV4OwotICAgICAgICBpZiAoZnJhbWVJ
RC0+YXNJbnRlZ2VyKGZyYW1lSW5kZXgpKSB7CisgICAgICAgIGlmIChhdXRvIGZyYW1lSW5kZXgg
PSBmcmFtZUlELT5hc0ludGVnZXIoKSkgewogICAgICAgICAgICAgQVNTRVJUKGZyYW1lSW5kZXgg
Pj0gMCAmJiBmcmFtZUluZGV4IDwgc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZCBzaG9ydD46
Om1heCgpKTsKLSAgICAgICAgICAgIHBhcmFtZXRlcnMtPnNldEludGVnZXIoIm9yZGluYWwiX3Ms
IGZyYW1lSW5kZXgpOworICAgICAgICAgICAgcGFyYW1ldGVycy0+c2V0SW50ZWdlcigib3JkaW5h
bCJfcywgKmZyYW1lSW5kZXgpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgU3RyaW5n
IGZyYW1lRWxlbWVudElEID0gZXh0cmFjdEVsZW1lbnRJRCgqZnJhbWVJRCk7CiAgICAgICAgICAg
ICBBU1NFUlQoIWZyYW1lRWxlbWVudElELmlzRW1wdHkoKSk7CkBAIC02NjksMTEgKzY4MywxMyBA
QCB2b2lkIFNlc3Npb246OnN3aXRjaFRvRnJhbWUoUmVmUHRyPEpTT046OlZhbHVlPiYmIGZyYW1l
SUQsIEZ1bmN0aW9uPHZvaWQgKENvbW1hbgogICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5k
bGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoV1RGTW92ZShyZXNwb25zZS5yZXNwb25zZU9iamVjdCkp
KTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBT
dHJpbmcgZnJhbWVIYW5kbGU7Ci0gICAgICAgICAgICBpZiAoIXJlc3BvbnNlLnJlc3BvbnNlT2Jq
ZWN0LT5nZXRTdHJpbmcoInJlc3VsdCJfcywgZnJhbWVIYW5kbGUpKSB7CisKKyAgICAgICAgICAg
IGF1dG8gZnJhbWVIYW5kbGUgPSByZXNwb25zZS5yZXNwb25zZU9iamVjdC0+Z2V0U3RyaW5nKCJy
ZXN1bHQiX3MpOworICAgICAgICAgICAgaWYgKCFmcmFtZUhhbmRsZSkgewogICAgICAgICAgICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6
RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgICAgICB9CisKICAgICAgICAgICAgIHN3aXRjaFRvQnJvd3NpbmdDb250ZXh0KGZyYW1lSGFu
ZGxlKTsKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OnN1Y2Nl
c3MoKSk7CiAgICAgICAgIH0pOwpAQCAtNjk3LDcgKzcxMyw3IEBAIHZvaWQgU2Vzc2lvbjo6c3dp
dGNoVG9QYXJlbnRGcmFtZShGdW5jdGlvbjx2b2lkIChDb21tYW5kUmVzdWx0JiYpPiYmIGNvbXBs
ZXRpb25ICiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKHJlc3VsdCkpOwog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIFJlZlB0cjxKU09OOjpPYmpl
Y3Q+IHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBhdXRvIHBh
cmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICBwYXJhbWV0ZXJzLT5z
ZXRTdHJpbmcoImJyb3dzaW5nQ29udGV4dEhhbmRsZSJfcywgbV90b3BsZXZlbEJyb3dzaW5nQ29u
dGV4dC52YWx1ZSgpKTsKICAgICAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJmcmFtZUhhbmRs
ZSJfcywgbV9jdXJyZW50QnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwogICAgICAgICBtX2hvc3Qt
PnNlbmRDb21tYW5kVG9CYWNrZW5kKCJyZXNvbHZlUGFyZW50RnJhbWVIYW5kbGUiX3MsIFdURk1v
dmUocGFyYW1ldGVycyksIFt0aGlzLCBwcm90ZWN0ZWRUaGlzLCBjb21wbGV0aW9uSGFuZGxlciA9
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXShTZXNzaW9uSG9zdDo6Q29tbWFuZFJlc3BvbnNl
JiYgcmVzcG9uc2UpIHsKQEAgLTcwNSwxMSArNzIxLDEzIEBAIHZvaWQgU2Vzc2lvbjo6c3dpdGNo
VG9QYXJlbnRGcmFtZShGdW5jdGlvbjx2b2lkIChDb21tYW5kUmVzdWx0JiYpPiYmIGNvbXBsZXRp
b25ICiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFp
bChXVEZNb3ZlKHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0KSkpOwogICAgICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFN0cmluZyBmcmFtZUhhbmRsZTsKLSAg
ICAgICAgICAgIGlmICghcmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdldFN0cmluZygicmVzdWx0
Il9zLCBmcmFtZUhhbmRsZSkpIHsKKworICAgICAgICAgICAgYXV0byBmcmFtZUhhbmRsZSA9IHJl
c3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRTdHJpbmcoInJlc3VsdCJfcyk7CisgICAgICAgICAg
ICBpZiAoIWZyYW1lSGFuZGxlKSB7CiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIo
Q29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OlVua25vd25FcnJv
cikpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KKwogICAgICAgICAg
ICAgc3dpdGNoVG9Ccm93c2luZ0NvbnRleHQoZnJhbWVIYW5kbGUpOwogICAgICAgICAgICAgY29t
cGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6c3VjY2VzcygpKTsKICAgICAgICAgfSk7CkBA
IC03MTgsMzkgKzczNiw2MSBAQCB2b2lkIFNlc3Npb246OnN3aXRjaFRvUGFyZW50RnJhbWUoRnVu
Y3Rpb248dm9pZCAoQ29tbWFuZFJlc3VsdCYmKT4mJiBjb21wbGV0aW9uSAogCiB2b2lkIFNlc3Np
b246OmdldFRvcGxldmVsQnJvd3NpbmdDb250ZXh0UmVjdChGdW5jdGlvbjx2b2lkIChDb21tYW5k
UmVzdWx0JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIFJlZlB0cjxKU09OOjpPYmpl
Y3Q+IHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGF1dG8gcGFyYW1l
dGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5n
KCJoYW5kbGUiX3MsIG1fdG9wbGV2ZWxCcm93c2luZ0NvbnRleHQudmFsdWUoKSk7CiAgICAgbV9o
b3N0LT5zZW5kQ29tbWFuZFRvQmFja2VuZCgiZ2V0QnJvd3NpbmdDb250ZXh0Il9zLCBXVEZNb3Zl
KHBhcmFtZXRlcnMpLCBbcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjb21wbGV0aW9u
SGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXShTZXNzaW9uSG9zdDo6Q29tbWFu
ZFJlc3BvbnNlJiYgcmVzcG9uc2UpIHsKICAgICAgICAgaWYgKHJlc3BvbnNlLmlzRXJyb3IgfHwg
IXJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0KSB7CiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cihDb21tYW5kUmVzdWx0OjpmYWlsKFdURk1vdmUocmVzcG9uc2UucmVzcG9uc2VPYmplY3QpKSk7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgUmVmUHRyPEpTT046Ok9i
amVjdD4gYnJvd3NpbmdDb250ZXh0OwotICAgICAgICBpZiAoIXJlc3BvbnNlLnJlc3BvbnNlT2Jq
ZWN0LT5nZXRPYmplY3QoImNvbnRleHQiX3MsIGJyb3dzaW5nQ29udGV4dCkpIHsKKworICAgICAg
ICBhdXRvIGJyb3dzaW5nQ29udGV4dCA9IHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRPYmpl
Y3QoImNvbnRleHQiX3MpOworICAgICAgICBpZiAoIWJyb3dzaW5nQ29udGV4dCkgewogICAgICAg
ICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0
OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9Ci0gICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHdpbmRvd09yaWdpbjsKLSAgICAgICAg
ZG91YmxlIHggPSAwLCB5ID0gMDsKLSAgICAgICAgaWYgKCFicm93c2luZ0NvbnRleHQtPmdldE9i
amVjdCgid2luZG93T3JpZ2luIl9zLCB3aW5kb3dPcmlnaW4pCi0gICAgICAgICAgICB8fCAhd2lu
ZG93T3JpZ2luLT5nZXREb3VibGUoIngiX3MsIHgpCi0gICAgICAgICAgICB8fCAhd2luZG93T3Jp
Z2luLT5nZXREb3VibGUoInkiX3MsIHkpKSB7CisKKyAgICAgICAgYXV0byB3aW5kb3dPcmlnaW4g
PSBicm93c2luZ0NvbnRleHQtPmdldE9iamVjdCgid2luZG93T3JpZ2luIl9zKTsKKyAgICAgICAg
aWYgKCF3aW5kb3dPcmlnaW4pIHsKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1h
bmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiB3aW5kb3dTaXplOwotICAgICAgICBkb3VibGUgd2lkdGggPSAwLCBoZWlnaHQgPSAwOwot
ICAgICAgICBpZiAoIWJyb3dzaW5nQ29udGV4dC0+Z2V0T2JqZWN0KCJ3aW5kb3dTaXplIl9zLCB3
aW5kb3dTaXplKQotICAgICAgICAgICAgfHwgIXdpbmRvd1NpemUtPmdldERvdWJsZSgid2lkdGgi
X3MsIHdpZHRoKQotICAgICAgICAgICAgfHwgIXdpbmRvd1NpemUtPmdldERvdWJsZSgiaGVpZ2h0
Il9zLCBoZWlnaHQpKSB7CisKKyAgICAgICAgYXV0byB4ID0gd2luZG93T3JpZ2luLT5nZXREb3Vi
bGUoIngiX3MpOworICAgICAgICBpZiAoIXgpIHsKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5k
bGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtub3du
RXJyb3IpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQorCisgICAgICAgIGF1dG8g
eSA9IHdpbmRvd09yaWdpbi0+Z2V0RG91YmxlKCJ5Il9zKTsKKyAgICAgICAgaWYgKCF5KSB7Cisg
ICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRS
ZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVycm9yKSk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKworICAgICAgICBhdXRvIHdpbmRvd1NpemUgPSBicm93c2luZ0NvbnRleHQtPmdl
dE9iamVjdCgid2luZG93U2l6ZSJfcyk7CisgICAgICAgIGlmICghd2luZG93U2l6ZSkgeworICAg
ICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVz
dWx0OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisKKyAgICAgICAgYXV0byB3aWR0aCA9IHdpbmRvd1NpemUtPmdldERvdWJsZSgid2lk
dGgiX3MpOworICAgICAgICBpZiAoIXdpZHRoKSB7CisgICAgICAgICAgICBjb21wbGV0aW9uSGFu
ZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93
bkVycm9yKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBhdXRv
IGhlaWdodCA9IHdpbmRvd1NpemUtPmdldERvdWJsZSgiaGVpZ2h0Il9zKTsKKyAgICAgICAgaWYg
KCFoZWlnaHQpIHsKKyAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6
OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorCiAgICAgICAgIGF1dG8gd2luZG93UmVjdCA9IEpTT046
Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgICAgIHdpbmRvd1JlY3QtPnNldERvdWJsZSgieCJfcywg
eCk7Ci0gICAgICAgIHdpbmRvd1JlY3QtPnNldERvdWJsZSgieSJfcywgeSk7Ci0gICAgICAgIHdp
bmRvd1JlY3QtPnNldERvdWJsZSgid2lkdGgiX3MsIHdpZHRoKTsKLSAgICAgICAgd2luZG93UmVj
dC0+c2V0RG91YmxlKCJoZWlnaHQiX3MsIGhlaWdodCk7CisgICAgICAgIHdpbmRvd1JlY3QtPnNl
dERvdWJsZSgieCJfcywgKngpOworICAgICAgICB3aW5kb3dSZWN0LT5zZXREb3VibGUoInkiX3Ms
ICp5KTsKKyAgICAgICAgd2luZG93UmVjdC0+c2V0RG91YmxlKCJ3aWR0aCJfcywgKndpZHRoKTsK
KyAgICAgICAgd2luZG93UmVjdC0+c2V0RG91YmxlKCJoZWlnaHQiX3MsICpoZWlnaHQpOwogICAg
ICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpzdWNjZXNzKFdURk1vdmUod2lu
ZG93UmVjdCkpKTsKICAgICB9KTsKIH0KQEAgLTc4NCwxNiArODI0LDE2IEBAIHZvaWQgU2Vzc2lv
bjo6c2V0V2luZG93UmVjdChPcHRpb25hbDxkb3VibGU+IHgsIE9wdGlvbmFsPGRvdWJsZT4geSwg
T3B0aW9uYWw8ZG91CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBS
ZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsK
KyAgICAgICAgYXV0byBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICAg
ICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJoYW5kbGUiX3MsIG1fdG9wbGV2ZWxCcm93c2luZ0Nv
bnRleHQudmFsdWUoKSk7CiAgICAgICAgIGlmICh4ICYmIHkpIHsKLSAgICAgICAgICAgIFJlZlB0
cjxKU09OOjpPYmplY3Q+IHdpbmRvd09yaWdpbiA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Cisg
ICAgICAgICAgICBhdXRvIHdpbmRvd09yaWdpbiA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAg
ICAgICAgICAgICB3aW5kb3dPcmlnaW4tPnNldERvdWJsZSgieCIsIHgudmFsdWUoKSk7CiAgICAg
ICAgICAgICB3aW5kb3dPcmlnaW4tPnNldERvdWJsZSgieSIsIHkudmFsdWUoKSk7CiAgICAgICAg
ICAgICBwYXJhbWV0ZXJzLT5zZXRPYmplY3QoIm9yaWdpbiJfcywgV1RGTW92ZSh3aW5kb3dPcmln
aW4pKTsKICAgICAgICAgfQogICAgICAgICBpZiAod2lkdGggJiYgaGVpZ2h0KSB7Ci0gICAgICAg
ICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiB3aW5kb3dTaXplID0gSlNPTjo6T2JqZWN0OjpjcmVh
dGUoKTsKKyAgICAgICAgICAgIGF1dG8gd2luZG93U2l6ZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRl
KCk7CiAgICAgICAgICAgICB3aW5kb3dTaXplLT5zZXREb3VibGUoIndpZHRoIiwgd2lkdGgudmFs
dWUoKSk7CiAgICAgICAgICAgICB3aW5kb3dTaXplLT5zZXREb3VibGUoImhlaWdodCIsIGhlaWdo
dC52YWx1ZSgpKTsKICAgICAgICAgICAgIHBhcmFtZXRlcnMtPnNldE9iamVjdCgic2l6ZSJfcywg
V1RGTW92ZSh3aW5kb3dTaXplKSk7CkBAIC04MjEsNyArODYxLDcgQEAgdm9pZCBTZXNzaW9uOjpt
YXhpbWl6ZVdpbmRvdyhGdW5jdGlvbjx2b2lkIChDb21tYW5kUmVzdWx0JiYpPiYmIGNvbXBsZXRp
b25IYW5kbGUKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIFJlZlB0
cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAg
ICAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICBw
YXJhbWV0ZXJzLT5zZXRTdHJpbmcoImhhbmRsZSJfcywgbV90b3BsZXZlbEJyb3dzaW5nQ29udGV4
dC52YWx1ZSgpKTsKICAgICAgICAgbV9ob3N0LT5zZW5kQ29tbWFuZFRvQmFja2VuZCgibWF4aW1p
emVXaW5kb3dPZkJyb3dzaW5nQ29udGV4dCJfcywgV1RGTW92ZShwYXJhbWV0ZXJzKSwgW3RoaXMs
IHByb3RlY3RlZFRoaXMsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcildIChTZXNzaW9uSG9zdDo6Q29tbWFuZFJlc3BvbnNlJiYgcmVzcG9uc2UpIG11dGFibGUg
ewogICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmlzRXJyb3IpIHsKQEAgLTg0Niw3ICs4ODYsNyBA
QCB2b2lkIFNlc3Npb246Om1pbmltaXplV2luZG93KEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSZXN1
bHQmJik+JiYgY29tcGxldGlvbkhhbmRsZQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CiAKLSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVycyA9IEpTT046Ok9iamVj
dDo6Y3JlYXRlKCk7CisgICAgICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3Jl
YXRlKCk7CiAgICAgICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiaGFuZGxlIl9zLCBtX3RvcGxl
dmVsQnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwogICAgICAgICBtX2hvc3QtPnNlbmRDb21tYW5k
VG9CYWNrZW5kKCJoaWRlV2luZG93T2ZCcm93c2luZ0NvbnRleHQiX3MsIFdURk1vdmUocGFyYW1l
dGVycyksIFt0aGlzLCBwcm90ZWN0ZWRUaGlzLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpXSAoU2Vzc2lvbkhvc3Q6OkNvbW1hbmRSZXNwb25zZSYmIHJlc3Bv
bnNlKSBtdXRhYmxlIHsKICAgICAgICAgICAgIGlmIChyZXNwb25zZS5pc0Vycm9yKSB7CkBAIC04
NzEsNyArOTExLDcgQEAgdm9pZCBTZXNzaW9uOjpmdWxsc2NyZWVuV2luZG93KEZ1bmN0aW9uPHZv
aWQgKENvbW1hbmRSZXN1bHQmJik+JiYgY29tcGxldGlvbkhhbmQKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQogCi0gICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnMg
PSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU09O
OjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoImJyb3dz
aW5nQ29udGV4dEhhbmRsZSJfcywgbV90b3BsZXZlbEJyb3dzaW5nQ29udGV4dC52YWx1ZSgpKTsK
ICAgICAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJmdW5jdGlvbiJfcywgU3RyaW5nKEVudGVy
RnVsbHNjcmVlbkphdmFTY3JpcHQsIHNpemVvZihFbnRlckZ1bGxzY3JlZW5KYXZhU2NyaXB0KSkp
OwogICAgICAgICBwYXJhbWV0ZXJzLT5zZXRBcnJheSgiYXJndW1lbnRzIl9zLCBKU09OOjpBcnJh
eTo6Y3JlYXRlKCkpOwpAQCAtODgyLDEzICs5MjIsMTQgQEAgdm9pZCBTZXNzaW9uOjpmdWxsc2Ny
ZWVuV2luZG93KEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSZXN1bHQmJik+JiYgY29tcGxldGlvbkhh
bmQKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
IFN0cmluZyB2YWx1ZVN0cmluZzsKLSAgICAgICAgICAgIGlmICghcmVzcG9uc2UucmVzcG9uc2VP
YmplY3QtPmdldFN0cmluZygicmVzdWx0Il9zLCB2YWx1ZVN0cmluZykpIHsKKyAgICAgICAgICAg
IGF1dG8gdmFsdWVTdHJpbmcgPSByZXNwb25zZS5yZXNwb25zZU9iamVjdC0+Z2V0U3RyaW5nKCJy
ZXN1bHQiX3MpOworICAgICAgICAgICAgaWYgKCF2YWx1ZVN0cmluZykgewogICAgICAgICAgICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6
RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHJlc3VsdFZhbHVlOwot
ICAgICAgICAgICAgaWYgKCFKU09OOjpWYWx1ZTo6cGFyc2VKU09OKHZhbHVlU3RyaW5nLCByZXN1
bHRWYWx1ZSkpIHsKKworICAgICAgICAgICAgYXV0byByZXN1bHRWYWx1ZSA9IEpTT046OlZhbHVl
OjpwYXJzZUpTT04odmFsdWVTdHJpbmcpOworICAgICAgICAgICAgaWYgKCFyZXN1bHRWYWx1ZSkg
ewogICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwo
Q29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKICAgICAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgICAgICB9CkBAIC05MDAsMjIgKzk0MSwyNSBAQCB2b2lkIFNlc3Np
b246OmZ1bGxzY3JlZW5XaW5kb3coRnVuY3Rpb248dm9pZCAoQ29tbWFuZFJlc3VsdCYmKT4mJiBj
b21wbGV0aW9uSGFuZAogCiBSZWZQdHI8SlNPTjo6T2JqZWN0PiBTZXNzaW9uOjpjcmVhdGVFbGVt
ZW50KFJlZlB0cjxKU09OOjpWYWx1ZT4mJiB2YWx1ZSkKIHsKLSAgICBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiB2YWx1ZU9iamVjdDsKLSAgICBpZiAoIXZhbHVlLT5hc09iamVjdCh2YWx1ZU9iamVjdCkp
CisgICAgaWYgKCF2YWx1ZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBTdHJpbmcg
ZWxlbWVudElEOwotICAgIGlmICghdmFsdWVPYmplY3QtPmdldFN0cmluZygic2Vzc2lvbi1ub2Rl
LSIgKyBpZCgpLCBlbGVtZW50SUQpKQorICAgIGF1dG8gdmFsdWVPYmplY3QgPSB2YWx1ZS0+YXNP
YmplY3QoKTsKKyAgICBpZiAoIXZhbHVlT2JqZWN0KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
IAotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IGVsZW1lbnRPYmplY3QgPSBKU09OOjpPYmplY3Q6
OmNyZWF0ZSgpOworICAgIGF1dG8gZWxlbWVudElEID0gdmFsdWVPYmplY3QtPmdldFN0cmluZygi
c2Vzc2lvbi1ub2RlLSIgKyBpZCgpKTsKKyAgICBpZiAoIWVsZW1lbnRJRCkKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisKKyAgICBhdXRvIGVsZW1lbnRPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNy
ZWF0ZSgpOwogICAgIGVsZW1lbnRPYmplY3QtPnNldFN0cmluZyh3ZWJFbGVtZW50SWRlbnRpZmll
cigpLCBlbGVtZW50SUQpOwogICAgIHJldHVybiBlbGVtZW50T2JqZWN0OwogfQogCi1SZWZQdHI8
SlNPTjo6T2JqZWN0PiBTZXNzaW9uOjpjcmVhdGVFbGVtZW50KGNvbnN0IFN0cmluZyYgZWxlbWVu
dElEKQorUmVmPEpTT046Ok9iamVjdD4gU2Vzc2lvbjo6Y3JlYXRlRWxlbWVudChjb25zdCBTdHJp
bmcmIGVsZW1lbnRJRCkKIHsKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBlbGVtZW50T2JqZWN0
ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBhdXRvIGVsZW1lbnRPYmplY3QgPSBKU09O
OjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgIGVsZW1lbnRPYmplY3QtPnNldFN0cmluZygic2Vzc2lv
bi1ub2RlLSIgKyBpZCgpLCBlbGVtZW50SUQpOwogICAgIHJldHVybiBlbGVtZW50T2JqZWN0Owog
fQpAQCAtOTIzLDE3ICs5NjcsMTcgQEAgUmVmUHRyPEpTT046Ok9iamVjdD4gU2Vzc2lvbjo6Y3Jl
YXRlRWxlbWVudChjb25zdCBTdHJpbmcmIGVsZW1lbnRJRCkKIFJlZlB0cjxKU09OOjpPYmplY3Q+
IFNlc3Npb246OmV4dHJhY3RFbGVtZW50KEpTT046OlZhbHVlJiB2YWx1ZSkKIHsKICAgICBTdHJp
bmcgZWxlbWVudElEID0gZXh0cmFjdEVsZW1lbnRJRCh2YWx1ZSk7Ci0gICAgcmV0dXJuICFlbGVt
ZW50SUQuaXNFbXB0eSgpID8gY3JlYXRlRWxlbWVudChlbGVtZW50SUQpIDogbnVsbHB0cjsKKyAg
ICByZXR1cm4gIWVsZW1lbnRJRC5pc0VtcHR5KCkgPyBjcmVhdGVFbGVtZW50KGVsZW1lbnRJRCku
cHRyKCkgOiBudWxscHRyOwogfQogCiBTdHJpbmcgU2Vzc2lvbjo6ZXh0cmFjdEVsZW1lbnRJRChK
U09OOjpWYWx1ZSYgdmFsdWUpCiB7Ci0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gdmFsdWVPYmpl
Y3Q7Ci0gICAgaWYgKCF2YWx1ZS5hc09iamVjdCh2YWx1ZU9iamVjdCkpCisgICAgYXV0byB2YWx1
ZU9iamVjdCA9IHZhbHVlLmFzT2JqZWN0KCk7CisgICAgaWYgKCF2YWx1ZU9iamVjdCkKICAgICAg
ICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CiAKLSAgICBTdHJpbmcgZWxlbWVudElEOwotICAgIGlm
ICghdmFsdWVPYmplY3QtPmdldFN0cmluZyh3ZWJFbGVtZW50SWRlbnRpZmllcigpLCBlbGVtZW50
SUQpKQorICAgIGF1dG8gZWxlbWVudElEID0gdmFsdWVPYmplY3QtPmdldFN0cmluZyh3ZWJFbGVt
ZW50SWRlbnRpZmllcigpKTsKKyAgICBpZiAoIWVsZW1lbnRJRCkKICAgICAgICAgcmV0dXJuIGVt
cHR5U3RyaW5nKCk7CiAKICAgICByZXR1cm4gZWxlbWVudElEOwpAQCAtOTQzLDcgKzk4Nyw3IEBA
IHZvaWQgU2Vzc2lvbjo6Y29tcHV0ZUVsZW1lbnRMYXlvdXQoY29uc3QgU3RyaW5nJiBlbGVtZW50
SUQsIE9wdGlvblNldDxFbGVtZW50TGF5CiB7CiAgICAgQVNTRVJUKG1fdG9wbGV2ZWxCcm93c2lu
Z0NvbnRleHQudmFsdWUoKSk7CiAKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJz
ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU09OOjpP
YmplY3Q6OmNyZWF0ZSgpOwogICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiYnJvd3NpbmdDb250
ZXh0SGFuZGxlIl9zLCBtX3RvcGxldmVsQnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwogICAgIHBh
cmFtZXRlcnMtPnNldFN0cmluZygiZnJhbWVIYW5kbGUiX3MsIG1fY3VycmVudEJyb3dzaW5nQ29u
dGV4dC52YWx1ZU9yKGVtcHR5U3RyaW5nKCkpKTsKICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmco
Im5vZGVIYW5kbGUiX3MsIGVsZW1lbnRJRCk7CkBAIC05NTQsNTkgKzk5OCw2MCBAQCB2b2lkIFNl
c3Npb246OmNvbXB1dGVFbGVtZW50TGF5b3V0KGNvbnN0IFN0cmluZyYgZWxlbWVudElELCBPcHRp
b25TZXQ8RWxlbWVudExheQogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGOjpudWxs
b3B0LCBXVEY6Om51bGxvcHQsIGZhbHNlLCBXVEZNb3ZlKHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0
KSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgUmVmUHRyPEpTT046
Ok9iamVjdD4gcmVjdE9iamVjdDsKLSAgICAgICAgaWYgKCFyZXNwb25zZS5yZXNwb25zZU9iamVj
dC0+Z2V0T2JqZWN0KCJyZWN0Il9zLCByZWN0T2JqZWN0KSkgeworCisgICAgICAgIGF1dG8gcmVj
dE9iamVjdCA9IHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRPYmplY3QoInJlY3QiX3MpOwor
ICAgICAgICBpZiAoIXJlY3RPYmplY3QpIHsKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVy
KFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0LCBmYWxzZSwgbnVsbHB0cik7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KKwogICAgICAgICBPcHRpb25hbDxpbnQ+IGVsZW1lbnRYOwog
ICAgICAgICBPcHRpb25hbDxpbnQ+IGVsZW1lbnRZOwotICAgICAgICBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiBlbGVtZW50UG9zaXRpb247Ci0gICAgICAgIGlmIChyZWN0T2JqZWN0LT5nZXRPYmplY3Qo
Im9yaWdpbiJfcywgZWxlbWVudFBvc2l0aW9uKSkgewotICAgICAgICAgICAgaW50IHgsIHk7Ci0g
ICAgICAgICAgICBpZiAoZWxlbWVudFBvc2l0aW9uLT5nZXRJbnRlZ2VyKCJ4Il9zLCB4KSAmJiBl
bGVtZW50UG9zaXRpb24tPmdldEludGVnZXIoInkiX3MsIHkpKSB7Ci0gICAgICAgICAgICAgICAg
ZWxlbWVudFggPSB4OwotICAgICAgICAgICAgICAgIGVsZW1lbnRZID0geTsKLSAgICAgICAgICAg
IH0KKyAgICAgICAgYXV0byBlbGVtZW50UG9zaXRpb24gPSByZWN0T2JqZWN0LT5nZXRPYmplY3Qo
Im9yaWdpbiJfcyk7CisgICAgICAgIGlmIChlbGVtZW50UG9zaXRpb24pIHsKKyAgICAgICAgICAg
IGVsZW1lbnRYID0gZWxlbWVudFBvc2l0aW9uLT5nZXRJbnRlZ2VyKCJ4Il9zKTsKKyAgICAgICAg
ICAgIGVsZW1lbnRZID0gZWxlbWVudFBvc2l0aW9uLT5nZXRJbnRlZ2VyKCJ5Il9zKTsKICAgICAg
ICAgfQogICAgICAgICBpZiAoIWVsZW1lbnRYIHx8ICFlbGVtZW50WSkgewogICAgICAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIoV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQsIGZhbHNlLCBudWxs
cHRyKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQorCiAgICAgICAgIE9wdGlvbmFs
PGludD4gZWxlbWVudFdpZHRoOwogICAgICAgICBPcHRpb25hbDxpbnQ+IGVsZW1lbnRIZWlnaHQ7
Ci0gICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IGVsZW1lbnRTaXplOwotICAgICAgICBpZiAo
cmVjdE9iamVjdC0+Z2V0T2JqZWN0KCJzaXplIl9zLCBlbGVtZW50U2l6ZSkpIHsKLSAgICAgICAg
ICAgIGludCB3aWR0aCwgaGVpZ2h0OwotICAgICAgICAgICAgaWYgKGVsZW1lbnRTaXplLT5nZXRJ
bnRlZ2VyKCJ3aWR0aCJfcywgd2lkdGgpICYmIGVsZW1lbnRTaXplLT5nZXRJbnRlZ2VyKCJoZWln
aHQiX3MsIGhlaWdodCkpIHsKLSAgICAgICAgICAgICAgICBlbGVtZW50V2lkdGggPSB3aWR0aDsK
LSAgICAgICAgICAgICAgICBlbGVtZW50SGVpZ2h0ID0gaGVpZ2h0OwotICAgICAgICAgICAgfQor
ICAgICAgICBhdXRvIGVsZW1lbnRTaXplID0gcmVjdE9iamVjdC0+Z2V0T2JqZWN0KCJzaXplIl9z
KTsKKyAgICAgICAgaWYgKGVsZW1lbnRTaXplKSB7CisgICAgICAgICAgICBlbGVtZW50V2lkdGgg
PSBlbGVtZW50U2l6ZS0+Z2V0SW50ZWdlcigid2lkdGgiX3MpOworICAgICAgICAgICAgZWxlbWVu
dEhlaWdodCA9IGVsZW1lbnRTaXplLT5nZXRJbnRlZ2VyKCJoZWlnaHQiX3MpOwogICAgICAgICB9
CiAgICAgICAgIGlmICghZWxlbWVudFdpZHRoIHx8ICFlbGVtZW50SGVpZ2h0KSB7CiAgICAgICAg
ICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCwgZmFsc2Us
IG51bGxwdHIpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CisKICAgICAgICAgUmVj
dCByZWN0ID0geyB7IGVsZW1lbnRYLnZhbHVlKCksIGVsZW1lbnRZLnZhbHVlKCkgfSwgeyBlbGVt
ZW50V2lkdGgudmFsdWUoKSwgZWxlbWVudEhlaWdodC52YWx1ZSgpIH0gfTsKIAotICAgICAgICBi
b29sIGlzT2JzY3VyZWQ7Ci0gICAgICAgIGlmICghcmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdl
dEJvb2xlYW4oImlzT2JzY3VyZWQiX3MsIGlzT2JzY3VyZWQpKSB7CisgICAgICAgIGF1dG8gaXNP
YnNjdXJlZCA9IHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRCb29sZWFuKCJpc09ic2N1cmVk
Il9zKTsKKyAgICAgICAgaWYgKCFpc09ic2N1cmVkKSB7CiAgICAgICAgICAgICBjb21wbGV0aW9u
SGFuZGxlcihXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCwgZmFsc2UsIG51bGxwdHIpOwogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+
IGluVmlld0NlbnRlclBvaW50T2JqZWN0OwotICAgICAgICBpZiAoIXJlc3BvbnNlLnJlc3BvbnNl
T2JqZWN0LT5nZXRPYmplY3QoImluVmlld0NlbnRlclBvaW50Il9zLCBpblZpZXdDZW50ZXJQb2lu
dE9iamVjdCkpIHsKLSAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHJlY3QsIFdURjo6bnVs
bG9wdCwgaXNPYnNjdXJlZCwgbnVsbHB0cik7CisKKyAgICAgICAgYXV0byBpblZpZXdDZW50ZXJQ
b2ludE9iamVjdCA9IHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRPYmplY3QoImluVmlld0Nl
bnRlclBvaW50Il9zKTsKKyAgICAgICAgaWYgKCFpblZpZXdDZW50ZXJQb2ludE9iamVjdCkgewor
ICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIocmVjdCwgV1RGOjpudWxsb3B0LCAqaXNPYnNj
dXJlZCwgbnVsbHB0cik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAg
aW50IGluVmlld0NlbnRlclBvaW50WCA9IDAsIGluVmlld0NlbnRlclBvaW50WSA9IDA7Ci0gICAg
ICAgIGlmICghaW5WaWV3Q2VudGVyUG9pbnRPYmplY3QtPmdldEludGVnZXIoIngiX3MsIGluVmll
d0NlbnRlclBvaW50WCkKLSAgICAgICAgICAgIHx8ICFpblZpZXdDZW50ZXJQb2ludE9iamVjdC0+
Z2V0SW50ZWdlcigieSJfcywgaW5WaWV3Q2VudGVyUG9pbnRZKSkgewotICAgICAgICAgICAgY29t
cGxldGlvbkhhbmRsZXIoV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQsIGlzT2JzY3VyZWQsIG51
bGxwdHIpOworCisgICAgICAgIGF1dG8gaW5WaWV3Q2VudGVyUG9pbnRYID0gaW5WaWV3Q2VudGVy
UG9pbnRPYmplY3QtPmdldEludGVnZXIoIngiX3MpOworICAgICAgICBhdXRvIGluVmlld0NlbnRl
clBvaW50WSA9IGluVmlld0NlbnRlclBvaW50T2JqZWN0LT5nZXRJbnRlZ2VyKCJ5Il9zKTsKKyAg
ICAgICAgaWYgKCFpblZpZXdDZW50ZXJQb2ludFggfHwgIWluVmlld0NlbnRlclBvaW50WSkgewor
ICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQs
ICppc09ic2N1cmVkLCBudWxscHRyKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQot
ICAgICAgICBQb2ludCBpblZpZXdDZW50ZXJQb2ludCA9IHsgaW5WaWV3Q2VudGVyUG9pbnRYLCBp
blZpZXdDZW50ZXJQb2ludFkgfTsKLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIocmVjdCwgaW5W
aWV3Q2VudGVyUG9pbnQsIGlzT2JzY3VyZWQsIG51bGxwdHIpOworCisgICAgICAgIFBvaW50IGlu
Vmlld0NlbnRlclBvaW50ID0geyAqaW5WaWV3Q2VudGVyUG9pbnRYLCAqaW5WaWV3Q2VudGVyUG9p
bnRZIH07CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHJlY3QsIGluVmlld0NlbnRlclBvaW50
LCAqaXNPYnNjdXJlZCwgbnVsbHB0cik7CiAgICAgfSk7CiB9CiAKQEAgLTEwMjIsNyArMTA2Nyw3
IEBAIHZvaWQgU2Vzc2lvbjo6ZmluZEVsZW1lbnRzKGNvbnN0IFN0cmluZyYgc3RyYXRlZ3ksIGNv
bnN0IFN0cmluZyYgc2VsZWN0b3IsIEZpbmRFCiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cihXVEZNb3ZlKHJlc3VsdCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAg
ICAgIFJlZlB0cjxKU09OOjpBcnJheT4gYXJndW1lbnRzID0gSlNPTjo6QXJyYXk6OmNyZWF0ZSgp
OworICAgICAgICBhdXRvIGFyZ3VtZW50cyA9IEpTT046OkFycmF5OjpjcmVhdGUoKTsKICAgICAg
ICAgYXJndW1lbnRzLT5wdXNoU3RyaW5nKEpTT046OlZhbHVlOjpjcmVhdGUoc3RyYXRlZ3kpLT50
b0pTT05TdHJpbmcoKSk7CiAgICAgICAgIGlmIChyb290RWxlbWVudElELmlzRW1wdHkoKSkKICAg
ICAgICAgICAgIGFyZ3VtZW50cy0+cHVzaFN0cmluZyhKU09OOjpWYWx1ZTo6bnVsbCgpLT50b0pT
T05TdHJpbmcoKSk7CkBAIC0xMDMyLDcgKzEwNzcsNyBAQCB2b2lkIFNlc3Npb246OmZpbmRFbGVt
ZW50cyhjb25zdCBTdHJpbmcmIHN0cmF0ZWd5LCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yLCBGaW5k
RQogICAgICAgICBhcmd1bWVudHMtPnB1c2hTdHJpbmcoSlNPTjo6VmFsdWU6OmNyZWF0ZShtb2Rl
ID09IEZpbmRFbGVtZW50c01vZGU6OlNpbmdsZSktPnRvSlNPTlN0cmluZygpKTsKICAgICAgICAg
YXJndW1lbnRzLT5wdXNoU3RyaW5nKEpTT046OlZhbHVlOjpjcmVhdGUobV9pbXBsaWNpdFdhaXRU
aW1lb3V0KS0+dG9KU09OU3RyaW5nKCkpOwogCi0gICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+
IHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBhdXRvIHBhcmFt
ZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICBwYXJhbWV0ZXJzLT5zZXRT
dHJpbmcoImJyb3dzaW5nQ29udGV4dEhhbmRsZSJfcywgbV90b3BsZXZlbEJyb3dzaW5nQ29udGV4
dC52YWx1ZSgpKTsKICAgICAgICAgaWYgKG1fY3VycmVudEJyb3dzaW5nQ29udGV4dCkKICAgICAg
ICAgICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiZnJhbWVIYW5kbGUiX3MsIG1fY3VycmVudEJy
b3dzaW5nQ29udGV4dC52YWx1ZSgpKTsKQEAgLTEwNDgsMjAgKzEwOTMsMjMgQEAgdm9pZCBTZXNz
aW9uOjpmaW5kRWxlbWVudHMoY29uc3QgU3RyaW5nJiBzdHJhdGVneSwgY29uc3QgU3RyaW5nJiBz
ZWxlY3RvciwgRmluZEUKICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5k
UmVzdWx0OjpmYWlsKFdURk1vdmUocmVzcG9uc2UucmVzcG9uc2VPYmplY3QpKSk7CiAgICAgICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgU3RyaW5nIHZhbHVl
U3RyaW5nOwotICAgICAgICAgICAgaWYgKCFyZXNwb25zZS5yZXNwb25zZU9iamVjdC0+Z2V0U3Ry
aW5nKCJyZXN1bHQiX3MsIHZhbHVlU3RyaW5nKSkgewotICAgICAgICAgICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpV
bmtub3duRXJyb3IpKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHJlc3VsdFZhbHVlOwotICAgICAgICAgICAg
aWYgKCFKU09OOjpWYWx1ZTo6cGFyc2VKU09OKHZhbHVlU3RyaW5nLCByZXN1bHRWYWx1ZSkpIHsK
KworICAgICAgICAgICAgYXV0byB2YWx1ZVN0cmluZyA9IHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0
LT5nZXRTdHJpbmcoInJlc3VsdCJfcyk7CisgICAgICAgICAgICBpZiAoIXZhbHVlU3RyaW5nKSB7
CiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChD
b21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikpOwogICAgICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgICAgIH0KIAorICAgICAgICAgICAgYXV0byByZXN1bHRWYWx1ZSA9
IEpTT046OlZhbHVlOjpwYXJzZUpTT04odmFsdWVTdHJpbmcpOworICAgICAgICAgICAgaWYgKCFy
ZXN1bHRWYWx1ZSkgeworICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRS
ZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKwogICAgICAgICAgICAgc3dp
dGNoIChtb2RlKSB7CiAgICAgICAgICAgICBjYXNlIEZpbmRFbGVtZW50c01vZGU6OlNpbmdsZTog
ewotICAgICAgICAgICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IGVsZW1lbnRPYmplY3QgPSBj
cmVhdGVFbGVtZW50KFdURk1vdmUocmVzdWx0VmFsdWUpKTsKKyAgICAgICAgICAgICAgICBhdXRv
IGVsZW1lbnRPYmplY3QgPSBjcmVhdGVFbGVtZW50KFdURk1vdmUocmVzdWx0VmFsdWUpKTsKICAg
ICAgICAgICAgICAgICBpZiAoIWVsZW1lbnRPYmplY3QpIHsKICAgICAgICAgICAgICAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJv
ckNvZGU6Ok5vU3VjaEVsZW1lbnQpKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAt
MTA3MCwxNiArMTExOCwxNyBAQCB2b2lkIFNlc3Npb246OmZpbmRFbGVtZW50cyhjb25zdCBTdHJp
bmcmIHN0cmF0ZWd5LCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yLCBGaW5kRQogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgY2FzZSBGaW5kRWxlbWVudHNN
b2RlOjpNdWx0aXBsZTogewotICAgICAgICAgICAgICAgIFJlZlB0cjxKU09OOjpBcnJheT4gZWxl
bWVudHNBcnJheTsKLSAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdFZhbHVlLT5hc0FycmF5KGVs
ZW1lbnRzQXJyYXkpKSB7CisgICAgICAgICAgICAgICAgYXV0byBlbGVtZW50c0FycmF5ID0gcmVz
dWx0VmFsdWUtPmFzQXJyYXkoKTsKKyAgICAgICAgICAgICAgICBpZiAoIWVsZW1lbnRzQXJyYXkp
IHsKICAgICAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6
ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6Ok5vU3VjaEVsZW1lbnQpKTsKICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBS
ZWZQdHI8SlNPTjo6QXJyYXk+IGVsZW1lbnRPYmplY3RzQXJyYXkgPSBKU09OOjpBcnJheTo6Y3Jl
YXRlKCk7CisKKyAgICAgICAgICAgICAgICBhdXRvIGVsZW1lbnRPYmplY3RzQXJyYXkgPSBKU09O
OjpBcnJheTo6Y3JlYXRlKCk7CiAgICAgICAgICAgICAgICAgdW5zaWduZWQgZWxlbWVudHNBcnJh
eUxlbmd0aCA9IGVsZW1lbnRzQXJyYXktPmxlbmd0aCgpOwogICAgICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBlbGVtZW50c0FycmF5TGVuZ3RoOyArK2kpIHsKICAgICAgICAg
ICAgICAgICAgICAgaWYgKGF1dG8gZWxlbWVudE9iamVjdCA9IGNyZWF0ZUVsZW1lbnQoZWxlbWVu
dHNBcnJheS0+Z2V0KGkpKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRPYmplY3Rz
QXJyYXktPnB1c2hPYmplY3QoV1RGTW92ZShlbGVtZW50T2JqZWN0KSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBlbGVtZW50T2JqZWN0c0FycmF5LT5wdXNoT2JqZWN0KGVsZW1lbnRPYmplY3Qu
cmVsZWFzZU5vbk51bGwoKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGNv
bXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OnN1Y2Nlc3MoV1RGTW92ZShlbGVtZW50T2Jq
ZWN0c0FycmF5KSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTEwMSw3ICsxMTUwLDcg
QEAgdm9pZCBTZXNzaW9uOjpnZXRBY3RpdmVFbGVtZW50KEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRS
ZXN1bHQmJik+JiYgY29tcGxldGlvbkhhbmQKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVy
KFdURk1vdmUocmVzdWx0KSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAg
ICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRl
KCk7CisgICAgICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAg
ICAgICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiYnJvd3NpbmdDb250ZXh0SGFuZGxlIl9zLCBt
X3RvcGxldmVsQnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwogICAgICAgICBwYXJhbWV0ZXJzLT5z
ZXRTdHJpbmcoImZ1bmN0aW9uIl9zLCAiZnVuY3Rpb24oKSB7IHJldHVybiBkb2N1bWVudC5hY3Rp
dmVFbGVtZW50OyB9Il9zKTsKICAgICAgICAgcGFyYW1ldGVycy0+c2V0QXJyYXkoImFyZ3VtZW50
cyJfcywgSlNPTjo6QXJyYXk6OmNyZWF0ZSgpKTsKQEAgLTExMTAsMTcgKzExNTksMjAgQEAgdm9p
ZCBTZXNzaW9uOjpnZXRBY3RpdmVFbGVtZW50KEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSZXN1bHQm
Jik+JiYgY29tcGxldGlvbkhhbmQKICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihD
b21tYW5kUmVzdWx0OjpmYWlsKFdURk1vdmUocmVzcG9uc2UucmVzcG9uc2VPYmplY3QpKSk7CiAg
ICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgU3RyaW5n
IHZhbHVlU3RyaW5nOwotICAgICAgICAgICAgaWYgKCFyZXNwb25zZS5yZXNwb25zZU9iamVjdC0+
Z2V0U3RyaW5nKCJyZXN1bHQiX3MsIHZhbHVlU3RyaW5nKSkgeworCisgICAgICAgICAgICBhdXRv
IHZhbHVlU3RyaW5nID0gcmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdldFN0cmluZygicmVzdWx0
Il9zKTsKKyAgICAgICAgICAgIGlmICghdmFsdWVTdHJpbmcpIHsKICAgICAgICAgICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9y
Q29kZTo6VW5rbm93bkVycm9yKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAg
ICAgfQotICAgICAgICAgICAgUmVmUHRyPEpTT046OlZhbHVlPiByZXN1bHRWYWx1ZTsKLSAgICAg
ICAgICAgIGlmICghSlNPTjo6VmFsdWU6OnBhcnNlSlNPTih2YWx1ZVN0cmluZywgcmVzdWx0VmFs
dWUpKSB7CisKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0VmFsdWUgPSBKU09OOjpWYWx1ZTo6cGFy
c2VKU09OKHZhbHVlU3RyaW5nKTsKKyAgICAgICAgICAgIGlmICghcmVzdWx0VmFsdWUpIHsKICAg
ICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1h
bmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVycm9yKSk7CiAgICAgICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gZWxl
bWVudE9iamVjdCA9IGNyZWF0ZUVsZW1lbnQoV1RGTW92ZShyZXN1bHRWYWx1ZSkpOworCisgICAg
ICAgICAgICBhdXRvIGVsZW1lbnRPYmplY3QgPSBjcmVhdGVFbGVtZW50KFdURk1vdmUocmVzdWx0
VmFsdWUpKTsKICAgICAgICAgICAgIGlmICghZWxlbWVudE9iamVjdCkgewogICAgICAgICAgICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6
RXJyb3JDb2RlOjpOb1N1Y2hFbGVtZW50KSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAt
MTE0MiwxMSArMTE5NCwxMSBAQCB2b2lkIFNlc3Npb246OmlzRWxlbWVudFNlbGVjdGVkKGNvbnN0
IFN0cmluZyYgZWxlbWVudElELCBGdW5jdGlvbjx2b2lkIChDb21tYW5kUgogICAgICAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShyZXN1bHQpKTsKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQotICAgICAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IGFyZ3VtZW50cyA9IEpTT046
OkFycmF5OjpjcmVhdGUoKTsKKyAgICAgICAgYXV0byBhcmd1bWVudHMgPSBKU09OOjpBcnJheTo6
Y3JlYXRlKCk7CiAgICAgICAgIGFyZ3VtZW50cy0+cHVzaFN0cmluZyhjcmVhdGVFbGVtZW50KGVs
ZW1lbnRJRCktPnRvSlNPTlN0cmluZygpKTsKICAgICAgICAgYXJndW1lbnRzLT5wdXNoU3RyaW5n
KEpTT046OlZhbHVlOjpjcmVhdGUoInNlbGVjdGVkIiktPnRvSlNPTlN0cmluZygpKTsKIAotICAg
ICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVh
dGUoKTsKKyAgICAgICAgYXV0byBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsK
ICAgICAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJicm93c2luZ0NvbnRleHRIYW5kbGUiX3Ms
IG1fdG9wbGV2ZWxCcm93c2luZ0NvbnRleHQudmFsdWUoKSk7CiAgICAgICAgIGlmIChtX2N1cnJl
bnRCcm93c2luZ0NvbnRleHQpCiAgICAgICAgICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoImZy
YW1lSGFuZGxlIl9zLCBtX2N1cnJlbnRCcm93c2luZ0NvbnRleHQudmFsdWUoKSk7CkBAIC0xMTU3
LDI1ICsxMjA5LDMwIEBAIHZvaWQgU2Vzc2lvbjo6aXNFbGVtZW50U2VsZWN0ZWQoY29uc3QgU3Ry
aW5nJiBlbGVtZW50SUQsIEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSCiAgICAgICAgICAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChXVEZNb3ZlKHJlc3BvbnNlLnJl
c3BvbnNlT2JqZWN0KSkpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIFN0cmluZyB2YWx1ZVN0cmluZzsKLSAgICAgICAgICAgIGlmICghcmVzcG9u
c2UucmVzcG9uc2VPYmplY3QtPmdldFN0cmluZygicmVzdWx0Il9zLCB2YWx1ZVN0cmluZykpIHsK
KworICAgICAgICAgICAgYXV0byB2YWx1ZVN0cmluZyA9IHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0
LT5nZXRTdHJpbmcoInJlc3VsdCJfcyk7CisgICAgICAgICAgICBpZiAoIXZhbHVlU3RyaW5nKSB7
CiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChD
b21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikpOwogICAgICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4g
cmVzdWx0VmFsdWU7Ci0gICAgICAgICAgICBpZiAoIUpTT046OlZhbHVlOjpwYXJzZUpTT04odmFs
dWVTdHJpbmcsIHJlc3VsdFZhbHVlKSkgeworCisgICAgICAgICAgICBhdXRvIHJlc3VsdFZhbHVl
ID0gSlNPTjo6VmFsdWU6OnBhcnNlSlNPTih2YWx1ZVN0cmluZyk7CisgICAgICAgICAgICBpZiAo
IXJlc3VsdFZhbHVlKSB7CiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFu
ZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikpOwog
ICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgaWYg
KHJlc3VsdFZhbHVlLT5pc051bGwoKSkgewogICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5k
bGVyKENvbW1hbmRSZXN1bHQ6OnN1Y2Nlc3MoSlNPTjo6VmFsdWU6OmNyZWF0ZShmYWxzZSkpKTsK
ICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBTdHJp
bmcgYm9vbGVhblJlc3VsdDsKLSAgICAgICAgICAgIGlmICghcmVzdWx0VmFsdWUtPmFzU3RyaW5n
KGJvb2xlYW5SZXN1bHQpIHx8IGJvb2xlYW5SZXN1bHQgIT0gInRydWUiKSB7CisKKyAgICAgICAg
ICAgIGF1dG8gYm9vbGVhblJlc3VsdCA9IHJlc3VsdFZhbHVlLT5hc1N0cmluZygpOworICAgICAg
ICAgICAgaWYgKCFib29sZWFuUmVzdWx0IHx8IGJvb2xlYW5SZXN1bHQgIT0gInRydWUiKSB7CiAg
ICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21t
YW5kUmVzdWx0OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikpOwogICAgICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29t
bWFuZFJlc3VsdDo6c3VjY2VzcyhKU09OOjpWYWx1ZTo6Y3JlYXRlKHRydWUpKSk7CiAgICAgICAg
IH0pOwogICAgIH0pOwpAQCAtMTE5MywxMCArMTI1MCwxMCBAQCB2b2lkIFNlc3Npb246OmdldEVs
ZW1lbnRUZXh0KGNvbnN0IFN0cmluZyYgZWxlbWVudElELCBGdW5jdGlvbjx2b2lkIChDb21tYW5k
UmVzdQogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShyZXN1bHQpKTsKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBSZWZQdHI8SlNPTjo6QXJyYXk+
IGFyZ3VtZW50cyA9IEpTT046OkFycmF5OjpjcmVhdGUoKTsKKyAgICAgICAgYXV0byBhcmd1bWVu
dHMgPSBKU09OOjpBcnJheTo6Y3JlYXRlKCk7CiAgICAgICAgIGFyZ3VtZW50cy0+cHVzaFN0cmlu
ZyhjcmVhdGVFbGVtZW50KGVsZW1lbnRJRCktPnRvSlNPTlN0cmluZygpKTsKIAotICAgICAgICBS
ZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsK
KyAgICAgICAgYXV0byBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICAg
ICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJicm93c2luZ0NvbnRleHRIYW5kbGUiX3MsIG1fdG9w
bGV2ZWxCcm93c2luZ0NvbnRleHQudmFsdWUoKSk7CiAgICAgICAgIGlmIChtX2N1cnJlbnRCcm93
c2luZ0NvbnRleHQpCiAgICAgICAgICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoImZyYW1lSGFu
ZGxlIl9zLCBtX2N1cnJlbnRCcm93c2luZ0NvbnRleHQudmFsdWUoKSk7CkBAIC0xMjA4LDE2ICsx
MjY1LDE5IEBAIHZvaWQgU2Vzc2lvbjo6Z2V0RWxlbWVudFRleHQoY29uc3QgU3RyaW5nJiBlbGVt
ZW50SUQsIEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSZXN1CiAgICAgICAgICAgICAgICAgY29tcGxl
dGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChXVEZNb3ZlKHJlc3BvbnNlLnJlc3BvbnNl
T2JqZWN0KSkpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIFN0cmluZyB2YWx1ZVN0cmluZzsKLSAgICAgICAgICAgIGlmICghcmVzcG9uc2UucmVz
cG9uc2VPYmplY3QtPmdldFN0cmluZygicmVzdWx0Il9zLCB2YWx1ZVN0cmluZykpIHsKKworICAg
ICAgICAgICAgYXV0byB2YWx1ZVN0cmluZyA9IHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRT
dHJpbmcoInJlc3VsdCJfcyk7CisgICAgICAgICAgICBpZiAoIXZhbHVlU3RyaW5nKSB7CiAgICAg
ICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5k
UmVzdWx0OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikpOwogICAgICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gcmVzdWx0
VmFsdWU7Ci0gICAgICAgICAgICBpZiAoIUpTT046OlZhbHVlOjpwYXJzZUpTT04odmFsdWVTdHJp
bmcsIHJlc3VsdFZhbHVlKSkgeworCisgICAgICAgICAgICBhdXRvIHJlc3VsdFZhbHVlID0gSlNP
Tjo6VmFsdWU6OnBhcnNlSlNPTih2YWx1ZVN0cmluZyk7CisgICAgICAgICAgICBpZiAoIXJlc3Vs
dFZhbHVlKSB7CiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3Vs
dDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikpOwogICAgICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgY29tcGxldGlv
bkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6c3VjY2VzcyhXVEZNb3ZlKHJlc3VsdFZhbHVlKSkpOwog
ICAgICAgICB9KTsKICAgICB9KTsKQEAgLTEyMzUsMTAgKzEyOTUsMTAgQEAgdm9pZCBTZXNzaW9u
OjpnZXRFbGVtZW50VGFnTmFtZShjb25zdCBTdHJpbmcmIGVsZW1lbnRJRCwgRnVuY3Rpb248dm9p
ZCAoQ29tbWFuZFIKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUocmVzdWx0
KSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgUmVmUHRyPEpTT046
OkFycmF5PiBhcmd1bWVudHMgPSBKU09OOjpBcnJheTo6Y3JlYXRlKCk7CisgICAgICAgIGF1dG8g
YXJndW1lbnRzID0gSlNPTjo6QXJyYXk6OmNyZWF0ZSgpOwogICAgICAgICBhcmd1bWVudHMtPnB1
c2hTdHJpbmcoY3JlYXRlRWxlbWVudChlbGVtZW50SUQpLT50b0pTT05TdHJpbmcoKSk7CiAKLSAg
ICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3Jl
YXRlKCk7CisgICAgICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7
CiAgICAgICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiYnJvd3NpbmdDb250ZXh0SGFuZGxlIl9z
LCBtX3RvcGxldmVsQnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwogICAgICAgICBpZiAobV9jdXJy
ZW50QnJvd3NpbmdDb250ZXh0KQogICAgICAgICAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJm
cmFtZUhhbmRsZSJfcywgbV9jdXJyZW50QnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwpAQCAtMTI0
OSwxNiArMTMwOSwxOSBAQCB2b2lkIFNlc3Npb246OmdldEVsZW1lbnRUYWdOYW1lKGNvbnN0IFN0
cmluZyYgZWxlbWVudElELCBGdW5jdGlvbjx2b2lkIChDb21tYW5kUgogICAgICAgICAgICAgICAg
IGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoV1RGTW92ZShyZXNwb25zZS5y
ZXNwb25zZU9iamVjdCkpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICBTdHJpbmcgdmFsdWVTdHJpbmc7Ci0gICAgICAgICAgICBpZiAoIXJlc3Bv
bnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRTdHJpbmcoInJlc3VsdCJfcywgdmFsdWVTdHJpbmcpKSB7
CisKKyAgICAgICAgICAgIGF1dG8gdmFsdWVTdHJpbmcgPSByZXNwb25zZS5yZXNwb25zZU9iamVj
dC0+Z2V0U3RyaW5nKCJyZXN1bHQiX3MpOworICAgICAgICAgICAgaWYgKCF2YWx1ZVN0cmluZykg
ewogICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwo
Q29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKICAgICAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+
IHJlc3VsdFZhbHVlOwotICAgICAgICAgICAgaWYgKCFKU09OOjpWYWx1ZTo6cGFyc2VKU09OKHZh
bHVlU3RyaW5nLCByZXN1bHRWYWx1ZSkpIHsKKworICAgICAgICAgICAgYXV0byByZXN1bHRWYWx1
ZSA9IEpTT046OlZhbHVlOjpwYXJzZUpTT04odmFsdWVTdHJpbmcpOworICAgICAgICAgICAgaWYg
KCFyZXN1bHRWYWx1ZSkgewogICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1h
bmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsK
ICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CisKICAgICAgICAgICAgIGNv
bXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OnN1Y2Nlc3MoV1RGTW92ZShyZXN1bHRWYWx1
ZSkpKTsKICAgICAgICAgfSk7CiAgICAgfSk7CkBAIC0xMjgxLDcgKzEzNDQsNyBAQCB2b2lkIFNl
c3Npb246OmdldEVsZW1lbnRSZWN0KGNvbnN0IFN0cmluZyYgZWxlbWVudElELCBGdW5jdGlvbjx2
b2lkIChDb21tYW5kUmVzdQogICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1h
bmRSZXN1bHQ6OmZhaWwoV1RGTW92ZShlcnJvcikpKTsKICAgICAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiByZWN0T2Jq
ZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgICAgIGF1dG8gcmVjdE9iamVj
dCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgICAgICByZWN0T2JqZWN0LT5zZXRJ
bnRlZ2VyKCJ4Il9zLCByZWN0LnZhbHVlKCkub3JpZ2luLngpOwogICAgICAgICAgICAgcmVjdE9i
amVjdC0+c2V0SW50ZWdlcigieSJfcywgcmVjdC52YWx1ZSgpLm9yaWdpbi55KTsKICAgICAgICAg
ICAgIHJlY3RPYmplY3QtPnNldEludGVnZXIoIndpZHRoIl9zLCByZWN0LnZhbHVlKCkuc2l6ZS53
aWR0aCk7CkBAIC0xMzAzLDEwICsxMzY2LDEwIEBAIHZvaWQgU2Vzc2lvbjo6aXNFbGVtZW50RW5h
YmxlZChjb25zdCBTdHJpbmcmIGVsZW1lbnRJRCwgRnVuY3Rpb248dm9pZCAoQ29tbWFuZFJlCiAg
ICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKHJlc3VsdCkpOwogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIFJlZlB0cjxKU09OOjpBcnJheT4gYXJndW1l
bnRzID0gSlNPTjo6QXJyYXk6OmNyZWF0ZSgpOworICAgICAgICBhdXRvIGFyZ3VtZW50cyA9IEpT
T046OkFycmF5OjpjcmVhdGUoKTsKICAgICAgICAgYXJndW1lbnRzLT5wdXNoU3RyaW5nKGNyZWF0
ZUVsZW1lbnQoZWxlbWVudElEKS0+dG9KU09OU3RyaW5nKCkpOwogCi0gICAgICAgIFJlZlB0cjxK
U09OOjpPYmplY3Q+IHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgICAg
ICBhdXRvIHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICBwYXJh
bWV0ZXJzLT5zZXRTdHJpbmcoImJyb3dzaW5nQ29udGV4dEhhbmRsZSJfcywgbV90b3BsZXZlbEJy
b3dzaW5nQ29udGV4dC52YWx1ZSgpKTsKICAgICAgICAgaWYgKG1fY3VycmVudEJyb3dzaW5nQ29u
dGV4dCkKICAgICAgICAgICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiZnJhbWVIYW5kbGUiX3Ms
IG1fY3VycmVudEJyb3dzaW5nQ29udGV4dC52YWx1ZSgpKTsKQEAgLTEzMTcsMTYgKzEzODAsMTkg
QEAgdm9pZCBTZXNzaW9uOjppc0VsZW1lbnRFbmFibGVkKGNvbnN0IFN0cmluZyYgZWxlbWVudElE
LCBGdW5jdGlvbjx2b2lkIChDb21tYW5kUmUKICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFu
ZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKFdURk1vdmUocmVzcG9uc2UucmVzcG9uc2VPYmplY3Qp
KSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQotICAgICAgICAgICAg
U3RyaW5nIHZhbHVlU3RyaW5nOwotICAgICAgICAgICAgaWYgKCFyZXNwb25zZS5yZXNwb25zZU9i
amVjdC0+Z2V0U3RyaW5nKCJyZXN1bHQiX3MsIHZhbHVlU3RyaW5nKSkgeworCisgICAgICAgICAg
ICBhdXRvIHZhbHVlU3RyaW5nID0gcmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdldFN0cmluZygi
cmVzdWx0Il9zKTsKKyAgICAgICAgICAgIGlmICghdmFsdWVTdHJpbmcpIHsKICAgICAgICAgICAg
ICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6
OkVycm9yQ29kZTo6VW5rbm93bkVycm9yKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAgICAgfQotICAgICAgICAgICAgUmVmUHRyPEpTT046OlZhbHVlPiByZXN1bHRWYWx1ZTsK
LSAgICAgICAgICAgIGlmICghSlNPTjo6VmFsdWU6OnBhcnNlSlNPTih2YWx1ZVN0cmluZywgcmVz
dWx0VmFsdWUpKSB7CisKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0VmFsdWUgPSBKU09OOjpWYWx1
ZTo6cGFyc2VKU09OKHZhbHVlU3RyaW5nKTsKKyAgICAgICAgICAgIGlmICghcmVzdWx0VmFsdWUp
IHsKICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWls
KENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVycm9yKSk7CiAgICAgICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cihDb21tYW5kUmVzdWx0OjpzdWNjZXNzKFdURk1vdmUocmVzdWx0VmFsdWUpKSk7CiAgICAgICAg
IH0pOwogICAgIH0pOwpAQCAtMTM0NCwxMCArMTQxMCwxMCBAQCB2b2lkIFNlc3Npb246OmlzRWxl
bWVudERpc3BsYXllZChjb25zdCBTdHJpbmcmIGVsZW1lbnRJRCwgRnVuY3Rpb248dm9pZCAoQ29t
bWFuZAogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShyZXN1bHQpKTsKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBSZWZQdHI8SlNPTjo6QXJyYXk+
IGFyZ3VtZW50cyA9IEpTT046OkFycmF5OjpjcmVhdGUoKTsKKyAgICAgICAgYXV0byBhcmd1bWVu
dHMgPSBKU09OOjpBcnJheTo6Y3JlYXRlKCk7CiAgICAgICAgIGFyZ3VtZW50cy0+cHVzaFN0cmlu
ZyhjcmVhdGVFbGVtZW50KGVsZW1lbnRJRCktPnRvSlNPTlN0cmluZygpKTsKIAotICAgICAgICBS
ZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsK
KyAgICAgICAgYXV0byBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICAg
ICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJicm93c2luZ0NvbnRleHRIYW5kbGUiX3MsIG1fdG9w
bGV2ZWxCcm93c2luZ0NvbnRleHQudmFsdWUoKSk7CiAgICAgICAgIGlmIChtX2N1cnJlbnRCcm93
c2luZ0NvbnRleHQpCiAgICAgICAgICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoImZyYW1lSGFu
ZGxlIl9zLCBtX2N1cnJlbnRCcm93c2luZ0NvbnRleHQudmFsdWUoKSk7CkBAIC0xMzU4LDE2ICsx
NDI0LDE5IEBAIHZvaWQgU2Vzc2lvbjo6aXNFbGVtZW50RGlzcGxheWVkKGNvbnN0IFN0cmluZyYg
ZWxlbWVudElELCBGdW5jdGlvbjx2b2lkIChDb21tYW5kCiAgICAgICAgICAgICAgICAgY29tcGxl
dGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChXVEZNb3ZlKHJlc3BvbnNlLnJlc3BvbnNl
T2JqZWN0KSkpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIFN0cmluZyB2YWx1ZVN0cmluZzsKLSAgICAgICAgICAgIGlmICghcmVzcG9uc2UucmVz
cG9uc2VPYmplY3QtPmdldFN0cmluZygicmVzdWx0Il9zLCB2YWx1ZVN0cmluZykpIHsKKworICAg
ICAgICAgICAgYXV0byB2YWx1ZVN0cmluZyA9IHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRT
dHJpbmcoInJlc3VsdCJfcyk7CisgICAgICAgICAgICBpZiAoIXZhbHVlU3RyaW5nKSB7CiAgICAg
ICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5k
UmVzdWx0OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikpOwogICAgICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gcmVzdWx0
VmFsdWU7Ci0gICAgICAgICAgICBpZiAoIUpTT046OlZhbHVlOjpwYXJzZUpTT04odmFsdWVTdHJp
bmcsIHJlc3VsdFZhbHVlKSkgeworCisgICAgICAgICAgICBhdXRvIHJlc3VsdFZhbHVlID0gSlNP
Tjo6VmFsdWU6OnBhcnNlSlNPTih2YWx1ZVN0cmluZyk7CisgICAgICAgICAgICBpZiAoIXJlc3Vs
dFZhbHVlKSB7CiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3Vs
dDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikpOwogICAgICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgY29tcGxldGlv
bkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6c3VjY2VzcyhXVEZNb3ZlKHJlc3VsdFZhbHVlKSkpOwog
ICAgICAgICB9KTsKICAgICB9KTsKQEAgLTEzODUsMTEgKzE0NTQsMTEgQEAgdm9pZCBTZXNzaW9u
OjpnZXRFbGVtZW50QXR0cmlidXRlKGNvbnN0IFN0cmluZyYgZWxlbWVudElELCBjb25zdCBTdHJp
bmcmIGF0dHJpYnUKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUocmVzdWx0
KSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgUmVmUHRyPEpTT046
OkFycmF5PiBhcmd1bWVudHMgPSBKU09OOjpBcnJheTo6Y3JlYXRlKCk7CisgICAgICAgIGF1dG8g
YXJndW1lbnRzID0gSlNPTjo6QXJyYXk6OmNyZWF0ZSgpOwogICAgICAgICBhcmd1bWVudHMtPnB1
c2hTdHJpbmcoY3JlYXRlRWxlbWVudChlbGVtZW50SUQpLT50b0pTT05TdHJpbmcoKSk7CiAgICAg
ICAgIGFyZ3VtZW50cy0+cHVzaFN0cmluZyhKU09OOjpWYWx1ZTo6Y3JlYXRlKGF0dHJpYnV0ZSkt
PnRvSlNPTlN0cmluZygpKTsKIAotICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0
ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgYXV0byBwYXJhbWV0ZXJzID0g
SlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJi
cm93c2luZ0NvbnRleHRIYW5kbGUiX3MsIG1fdG9wbGV2ZWxCcm93c2luZ0NvbnRleHQudmFsdWUo
KSk7CiAgICAgICAgIGlmIChtX2N1cnJlbnRCcm93c2luZ0NvbnRleHQpCiAgICAgICAgICAgICBw
YXJhbWV0ZXJzLT5zZXRTdHJpbmcoImZyYW1lSGFuZGxlIl9zLCBtX2N1cnJlbnRCcm93c2luZ0Nv
bnRleHQudmFsdWUoKSk7CkBAIC0xNDAwLDE2ICsxNDY5LDE5IEBAIHZvaWQgU2Vzc2lvbjo6Z2V0
RWxlbWVudEF0dHJpYnV0ZShjb25zdCBTdHJpbmcmIGVsZW1lbnRJRCwgY29uc3QgU3RyaW5nJiBh
dHRyaWJ1CiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6
ZmFpbChXVEZNb3ZlKHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0KSkpOwogICAgICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFN0cmluZyB2YWx1ZVN0cmluZzsK
LSAgICAgICAgICAgIGlmICghcmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdldFN0cmluZygicmVz
dWx0Il9zLCB2YWx1ZVN0cmluZykpIHsKKworICAgICAgICAgICAgYXV0byB2YWx1ZVN0cmluZyA9
IHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRTdHJpbmcoInJlc3VsdCJfcyk7CisgICAgICAg
ICAgICBpZiAoIXZhbHVlU3RyaW5nKSB7CiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OlVua25vd25F
cnJvcikpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gcmVzdWx0VmFsdWU7Ci0gICAgICAgICAgICBpZiAoIUpT
T046OlZhbHVlOjpwYXJzZUpTT04odmFsdWVTdHJpbmcsIHJlc3VsdFZhbHVlKSkgeworCisgICAg
ICAgICAgICBhdXRvIHJlc3VsdFZhbHVlID0gSlNPTjo6VmFsdWU6OnBhcnNlSlNPTih2YWx1ZVN0
cmluZyk7CisgICAgICAgICAgICBpZiAoIXJlc3VsdFZhbHVlKSB7CiAgICAgICAgICAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJv
ckNvZGU6OlVua25vd25FcnJvcikpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
ICAgIH0KKwogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6c3Vj
Y2VzcyhXVEZNb3ZlKHJlc3VsdFZhbHVlKSkpOwogICAgICAgICB9KTsKICAgICB9KTsKQEAgLTE0
MjcsMTAgKzE0OTksMTAgQEAgdm9pZCBTZXNzaW9uOjpnZXRFbGVtZW50UHJvcGVydHkoY29uc3Qg
U3RyaW5nJiBlbGVtZW50SUQsIGNvbnN0IFN0cmluZyYgcHJvcGVydHkKICAgICAgICAgICAgIGNv
bXBsZXRpb25IYW5kbGVyKFdURk1vdmUocmVzdWx0KSk7CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KLSAgICAgICAgUmVmUHRyPEpTT046OkFycmF5PiBhcmd1bWVudHMgPSBKU09OOjpB
cnJheTo6Y3JlYXRlKCk7CisgICAgICAgIGF1dG8gYXJndW1lbnRzID0gSlNPTjo6QXJyYXk6OmNy
ZWF0ZSgpOwogICAgICAgICBhcmd1bWVudHMtPnB1c2hTdHJpbmcoY3JlYXRlRWxlbWVudChlbGVt
ZW50SUQpLT50b0pTT05TdHJpbmcoKSk7CiAKLSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4g
cGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIGF1dG8gcGFyYW1l
dGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgIHBhcmFtZXRlcnMtPnNldFN0
cmluZygiYnJvd3NpbmdDb250ZXh0SGFuZGxlIl9zLCBtX3RvcGxldmVsQnJvd3NpbmdDb250ZXh0
LnZhbHVlKCkpOwogICAgICAgICBpZiAobV9jdXJyZW50QnJvd3NpbmdDb250ZXh0KQogICAgICAg
ICAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJmcmFtZUhhbmRsZSJfcywgbV9jdXJyZW50QnJv
d3NpbmdDb250ZXh0LnZhbHVlKCkpOwpAQCAtMTQ0MSwxNiArMTUxMywxOSBAQCB2b2lkIFNlc3Np
b246OmdldEVsZW1lbnRQcm9wZXJ0eShjb25zdCBTdHJpbmcmIGVsZW1lbnRJRCwgY29uc3QgU3Ry
aW5nJiBwcm9wZXJ0eQogICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRS
ZXN1bHQ6OmZhaWwoV1RGTW92ZShyZXNwb25zZS5yZXNwb25zZU9iamVjdCkpKTsKICAgICAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBTdHJpbmcgdmFsdWVT
dHJpbmc7Ci0gICAgICAgICAgICBpZiAoIXJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRTdHJp
bmcoInJlc3VsdCJfcywgdmFsdWVTdHJpbmcpKSB7CisKKyAgICAgICAgICAgIGF1dG8gdmFsdWVT
dHJpbmcgPSByZXNwb25zZS5yZXNwb25zZU9iamVjdC0+Z2V0U3RyaW5nKCJyZXN1bHQiX3MpOwor
ICAgICAgICAgICAgaWYgKCF2YWx1ZVN0cmluZykgewogICAgICAgICAgICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpV
bmtub3duRXJyb3IpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHJlc3VsdFZhbHVlOwotICAgICAgICAgICAg
aWYgKCFKU09OOjpWYWx1ZTo6cGFyc2VKU09OKHZhbHVlU3RyaW5nLCByZXN1bHRWYWx1ZSkpIHsK
KworICAgICAgICAgICAgYXV0byByZXN1bHRWYWx1ZSA9IEpTT046OlZhbHVlOjpwYXJzZUpTT04o
dmFsdWVTdHJpbmcpOworICAgICAgICAgICAgaWYgKCFyZXN1bHRWYWx1ZSkgewogICAgICAgICAg
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3Vs
dDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgICAgICB9CisKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1
bHQ6OnN1Y2Nlc3MoV1RGTW92ZShyZXN1bHRWYWx1ZSkpKTsKICAgICAgICAgfSk7CiAgICAgfSk7
CkBAIC0xNDY4LDEwICsxNTQzLDEwIEBAIHZvaWQgU2Vzc2lvbjo6Z2V0RWxlbWVudENTU1ZhbHVl
KGNvbnN0IFN0cmluZyYgZWxlbWVudElELCBjb25zdCBTdHJpbmcmIGNzc1Byb3BlCiAgICAgICAg
ICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKHJlc3VsdCkpOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9Ci0gICAgICAgIFJlZlB0cjxKU09OOjpBcnJheT4gYXJndW1lbnRzID0g
SlNPTjo6QXJyYXk6OmNyZWF0ZSgpOworICAgICAgICBhdXRvIGFyZ3VtZW50cyA9IEpTT046OkFy
cmF5OjpjcmVhdGUoKTsKICAgICAgICAgYXJndW1lbnRzLT5wdXNoU3RyaW5nKGNyZWF0ZUVsZW1l
bnQoZWxlbWVudElEKS0+dG9KU09OU3RyaW5nKCkpOwogCi0gICAgICAgIFJlZlB0cjxKU09OOjpP
YmplY3Q+IHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBhdXRv
IHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICBwYXJhbWV0ZXJz
LT5zZXRTdHJpbmcoImJyb3dzaW5nQ29udGV4dEhhbmRsZSJfcywgbV90b3BsZXZlbEJyb3dzaW5n
Q29udGV4dC52YWx1ZSgpKTsKICAgICAgICAgaWYgKG1fY3VycmVudEJyb3dzaW5nQ29udGV4dCkK
ICAgICAgICAgICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiZnJhbWVIYW5kbGUiX3MsIG1fY3Vy
cmVudEJyb3dzaW5nQ29udGV4dC52YWx1ZSgpKTsKQEAgLTE0ODIsMTYgKzE1NTcsMTkgQEAgdm9p
ZCBTZXNzaW9uOjpnZXRFbGVtZW50Q1NTVmFsdWUoY29uc3QgU3RyaW5nJiBlbGVtZW50SUQsIGNv
bnN0IFN0cmluZyYgY3NzUHJvcGUKICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihD
b21tYW5kUmVzdWx0OjpmYWlsKFdURk1vdmUocmVzcG9uc2UucmVzcG9uc2VPYmplY3QpKSk7CiAg
ICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgU3RyaW5n
IHZhbHVlU3RyaW5nOwotICAgICAgICAgICAgaWYgKCFyZXNwb25zZS5yZXNwb25zZU9iamVjdC0+
Z2V0U3RyaW5nKCJyZXN1bHQiX3MsIHZhbHVlU3RyaW5nKSkgeworCisgICAgICAgICAgICBhdXRv
IHZhbHVlU3RyaW5nID0gcmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdldFN0cmluZygicmVzdWx0
Il9zKTsKKyAgICAgICAgICAgIGlmICghdmFsdWVTdHJpbmcpIHsKICAgICAgICAgICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9y
Q29kZTo6VW5rbm93bkVycm9yKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAg
ICAgfQotICAgICAgICAgICAgUmVmUHRyPEpTT046OlZhbHVlPiByZXN1bHRWYWx1ZTsKLSAgICAg
ICAgICAgIGlmICghSlNPTjo6VmFsdWU6OnBhcnNlSlNPTih2YWx1ZVN0cmluZywgcmVzdWx0VmFs
dWUpKSB7CisKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0VmFsdWUgPSBKU09OOjpWYWx1ZTo6cGFy
c2VKU09OKHZhbHVlU3RyaW5nKTsKKyAgICAgICAgICAgIGlmICghcmVzdWx0VmFsdWUpIHsKICAg
ICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1h
bmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVycm9yKSk7CiAgICAgICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21t
YW5kUmVzdWx0OjpzdWNjZXNzKFdURk1vdmUocmVzdWx0VmFsdWUpKSk7CiAgICAgICAgIH0pOwog
ICAgIH0pOwpAQCAtMTUwNCw3ICsxNTgyLDcgQEAgdm9pZCBTZXNzaW9uOjp3YWl0Rm9yTmF2aWdh
dGlvblRvQ29tcGxldGUoRnVuY3Rpb248dm9pZCAoQ29tbWFuZFJlc3VsdCYmKT4mJiBjb20KICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRl
cnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTT046
Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJicm93c2luZ0Nv
bnRleHRIYW5kbGUiX3MsIG1fdG9wbGV2ZWxCcm93c2luZ0NvbnRleHQudmFsdWUoKSk7CiAgICAg
aWYgKG1fY3VycmVudEJyb3dzaW5nQ29udGV4dCkKICAgICAgICAgcGFyYW1ldGVycy0+c2V0U3Ry
aW5nKCJmcmFtZUhhbmRsZSJfcywgbV9jdXJyZW50QnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwpA
QCAtMTUzNCw3ICsxNjEyLDcgQEAgdm9pZCBTZXNzaW9uOjp3YWl0Rm9yTmF2aWdhdGlvblRvQ29t
cGxldGUoRnVuY3Rpb248dm9pZCAoQ29tbWFuZFJlc3VsdCYmKT4mJiBjb20KIAogdm9pZCBTZXNz
aW9uOjplbGVtZW50SXNGaWxlVXBsb2FkKGNvbnN0IFN0cmluZyYgZWxlbWVudElELCBGdW5jdGlv
bjx2b2lkIChDb21tYW5kUmVzdWx0JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIFJl
ZlB0cjxKU09OOjpBcnJheT4gYXJndW1lbnRzID0gSlNPTjo6QXJyYXk6OmNyZWF0ZSgpOworICAg
IGF1dG8gYXJndW1lbnRzID0gSlNPTjo6QXJyYXk6OmNyZWF0ZSgpOwogICAgIGFyZ3VtZW50cy0+
cHVzaFN0cmluZyhjcmVhdGVFbGVtZW50KGVsZW1lbnRJRCktPnRvSlNPTlN0cmluZygpKTsKIAog
ICAgIHN0YXRpYyBjb25zdCBjaGFyIGlzRmlsZVVwbG9hZFNjcmlwdFtdID0KQEAgLTE1NDQsNyAr
MTYyMiw3IEBAIHZvaWQgU2Vzc2lvbjo6ZWxlbWVudElzRmlsZVVwbG9hZChjb25zdCBTdHJpbmcm
IGVsZW1lbnRJRCwgRnVuY3Rpb248dm9pZCAoQ29tbWFuCiAgICAgICAgICIgICAgcmV0dXJuIHsg
J2ZpbGVVcGxvYWQnOiBmYWxzZSB9OyIKICAgICAgICAgIn0iOwogCi0gICAgUmVmUHRyPEpTT046
Ok9iamVjdD4gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgYXV0byBw
YXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICBwYXJhbWV0ZXJzLT5zZXRT
dHJpbmcoImJyb3dzaW5nQ29udGV4dEhhbmRsZSJfcywgbV90b3BsZXZlbEJyb3dzaW5nQ29udGV4
dC52YWx1ZSgpKTsKICAgICBpZiAobV9jdXJyZW50QnJvd3NpbmdDb250ZXh0KQogICAgICAgICBw
YXJhbWV0ZXJzLT5zZXRTdHJpbmcoImZyYW1lSGFuZGxlIl9zLCBtX2N1cnJlbnRCcm93c2luZ0Nv
bnRleHQudmFsdWUoKSk7CkBAIC0xNTU1LDMyICsxNjMzLDM4IEBAIHZvaWQgU2Vzc2lvbjo6ZWxl
bWVudElzRmlsZVVwbG9hZChjb25zdCBTdHJpbmcmIGVsZW1lbnRJRCwgRnVuY3Rpb248dm9pZCAo
Q29tbWFuCiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWls
KFdURk1vdmUocmVzcG9uc2UucmVzcG9uc2VPYmplY3QpKSk7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KLSAgICAgICAgU3RyaW5nIHZhbHVlU3RyaW5nOwotICAgICAgICBpZiAoIXJl
c3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRTdHJpbmcoInJlc3VsdCJfcywgdmFsdWVTdHJpbmcp
KSB7CisKKyAgICAgICAgYXV0byB2YWx1ZVN0cmluZyA9IHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0
LT5nZXRTdHJpbmcoInJlc3VsdCJfcyk7CisgICAgICAgIGlmICghdmFsdWVTdHJpbmcpIHsKICAg
ICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJl
c3VsdDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQotICAgICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHJlc3VsdFZhbHVlOwotICAgICAg
ICBpZiAoIUpTT046OlZhbHVlOjpwYXJzZUpTT04odmFsdWVTdHJpbmcsIHJlc3VsdFZhbHVlKSkg
eworCisgICAgICAgIGF1dG8gcmVzdWx0VmFsdWUgPSBKU09OOjpWYWx1ZTo6cGFyc2VKU09OKHZh
bHVlU3RyaW5nKTsKKyAgICAgICAgaWYgKCFyZXN1bHRWYWx1ZSkgewogICAgICAgICAgICAgY29t
cGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNv
ZGU6OlVua25vd25FcnJvcikpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CisKICAg
ICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6c3VjY2VzcyhXVEZNb3ZlKHJl
c3VsdFZhbHVlKSkpOwogICAgIH0pOwogfQogCiBPcHRpb25hbDxTZXNzaW9uOjpGaWxlVXBsb2Fk
VHlwZT4gU2Vzc2lvbjo6cGFyc2VFbGVtZW50SXNGaWxlVXBsb2FkUmVzdWx0KGNvbnN0IFJlZlB0
cjxKU09OOjpWYWx1ZT4mIHJlc3VsdFZhbHVlKQogewotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+
IHJlc3VsdDsKLSAgICBpZiAoIXJlc3VsdFZhbHVlLT5hc09iamVjdChyZXN1bHQpKQorICAgIGlm
ICghcmVzdWx0VmFsdWUpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBib29s
IGlzRmlsZVVwbG9hZDsKLSAgICBpZiAoIXJlc3VsdC0+Z2V0Qm9vbGVhbigiZmlsZVVwbG9hZCJf
cywgaXNGaWxlVXBsb2FkKSB8fCAhaXNGaWxlVXBsb2FkKQorICAgIGF1dG8gcmVzdWx0ID0gcmVz
dWx0VmFsdWUtPmFzT2JqZWN0KCk7CisgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CiAKLSAgICBib29sIG11bHRpcGxlOwotICAgIGlmICghcmVzdWx0LT5nZXRC
b29sZWFuKCJtdWx0aXBsZSJfcywgbXVsdGlwbGUpIHx8ICFtdWx0aXBsZSkKKyAgICBhdXRvIGlz
RmlsZVVwbG9hZCA9IHJlc3VsdC0+Z2V0Qm9vbGVhbigiZmlsZVVwbG9hZCJfcyk7CisgICAgaWYg
KCFpc0ZpbGVVcGxvYWQgfHwgISppc0ZpbGVVcGxvYWQpCisgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CisKKyAgICBhdXRvIG11bHRpcGxlID0gcmVzdWx0LT5nZXRCb29sZWFuKCJtdWx0aXBs
ZSJfcyk7CisgICAgaWYgKCFtdWx0aXBsZSB8fCAhKm11bHRpcGxlKQogICAgICAgICByZXR1cm4g
RmlsZVVwbG9hZFR5cGU6OlNpbmdsZTsKIAogICAgIHJldHVybiBGaWxlVXBsb2FkVHlwZTo6TXVs
dGlwbGU7CkBAIC0xNTg4LDcgKzE2NzIsNyBAQCBPcHRpb25hbDxTZXNzaW9uOjpGaWxlVXBsb2Fk
VHlwZT4gU2Vzc2lvbjo6cGFyc2VFbGVtZW50SXNGaWxlVXBsb2FkUmVzdWx0KGNvbnN0CiAKIHZv
aWQgU2Vzc2lvbjo6c2VsZWN0T3B0aW9uRWxlbWVudChjb25zdCBTdHJpbmcmIGVsZW1lbnRJRCwg
RnVuY3Rpb248dm9pZCAoQ29tbWFuZFJlc3VsdCYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsK
LSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVh
dGUoKTsKKyAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAg
IHBhcmFtZXRlcnMtPnNldFN0cmluZygiYnJvd3NpbmdDb250ZXh0SGFuZGxlIl9zLCBtX3RvcGxl
dmVsQnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwogICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygi
ZnJhbWVIYW5kbGUiX3MsIG1fY3VycmVudEJyb3dzaW5nQ29udGV4dC52YWx1ZU9yKGVtcHR5U3Ry
aW5nKCkpKTsKICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoIm5vZGVIYW5kbGUiX3MsIGVsZW1l
bnRJRCk7CkBAIC0xNjQxLDggKzE3MjUsOCBAQCB2b2lkIFNlc3Npb246OmVsZW1lbnRDbGljayhj
b25zdCBTdHJpbmcmIGVsZW1lbnRJRCwgRnVuY3Rpb248dm9pZCAoQ29tbWFuZFJlc3VsdAogICAg
ICAgICAgICAgICAgIGdldEVsZW1lbnRUYWdOYW1lKGVsZW1lbnRJRCwgW3RoaXMsIGVsZW1lbnRJ
RCwgaW5WaWV3Q2VudGVyID0gV1RGTW92ZShpblZpZXdDZW50ZXIpLCBjb21wbGV0aW9uSGFuZGxl
ciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXShDb21tYW5kUmVzdWx0JiYgcmVzdWx0KSBt
dXRhYmxlIHsKICAgICAgICAgICAgICAgICAgICAgYm9vbCBpc09wdGlvbkVsZW1lbnQgPSBmYWxz
ZTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQuaXNFcnJvcigpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBTdHJpbmcgdGFnTmFtZTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChyZXN1bHQucmVzdWx0KCktPmFzU3RyaW5nKHRhZ05hbWUpKQorICAgICAgICAgICAgICAg
ICAgICAgICAgYXV0byB0YWdOYW1lID0gcmVzdWx0LnJlc3VsdCgpLT5hc1N0cmluZygpOworICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCEhdGFnTmFtZSkKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpc09wdGlvbkVsZW1lbnQgPSB0YWdOYW1lID09ICJvcHRpb24iOwogICAgICAgICAg
ICAgICAgICAgICB9CiAKQEAgLTE2NjYsNyArMTc1MCw3IEBAIHZvaWQgU2Vzc2lvbjo6ZWxlbWVu
dENsaWNrKGNvbnN0IFN0cmluZyYgZWxlbWVudElELCBGdW5jdGlvbjx2b2lkIChDb21tYW5kUmVz
dWx0CiAKIHZvaWQgU2Vzc2lvbjo6ZWxlbWVudElzRWRpdGFibGUoY29uc3QgU3RyaW5nJiBlbGVt
ZW50SUQsIEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSZXN1bHQmJik+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCiB7Ci0gICAgUmVmUHRyPEpTT046OkFycmF5PiBhcmd1bWVudHMgPSBKU09OOjpBcnJheTo6
Y3JlYXRlKCk7CisgICAgYXV0byBhcmd1bWVudHMgPSBKU09OOjpBcnJheTo6Y3JlYXRlKCk7CiAg
ICAgYXJndW1lbnRzLT5wdXNoU3RyaW5nKGNyZWF0ZUVsZW1lbnQoZWxlbWVudElEKS0+dG9KU09O
U3RyaW5nKCkpOwogCiAgICAgc3RhdGljIGNvbnN0IGNoYXIgaXNFZGl0YWJsZVNjcmlwdFtdID0K
QEAgLTE2ODYsNyArMTc3MCw3IEBAIHZvaWQgU2Vzc2lvbjo6ZWxlbWVudElzRWRpdGFibGUoY29u
c3QgU3RyaW5nJiBlbGVtZW50SUQsIEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSCiAgICAgICAgICIg
ICAgcmV0dXJuIGZhbHNlOyIKICAgICAgICAgIn0iOwogCi0gICAgUmVmUHRyPEpTT046Ok9iamVj
dD4gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgYXV0byBwYXJhbWV0
ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmco
ImJyb3dzaW5nQ29udGV4dEhhbmRsZSJfcywgbV90b3BsZXZlbEJyb3dzaW5nQ29udGV4dC52YWx1
ZSgpKTsKICAgICBpZiAobV9jdXJyZW50QnJvd3NpbmdDb250ZXh0KQogICAgICAgICBwYXJhbWV0
ZXJzLT5zZXRTdHJpbmcoImZyYW1lSGFuZGxlIl9zLCBtX2N1cnJlbnRCcm93c2luZ0NvbnRleHQu
dmFsdWUoKSk7CkBAIC0xNjk3LDE2ICsxNzgxLDE5IEBAIHZvaWQgU2Vzc2lvbjo6ZWxlbWVudElz
RWRpdGFibGUoY29uc3QgU3RyaW5nJiBlbGVtZW50SUQsIEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRS
CiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKFdURk1v
dmUocmVzcG9uc2UucmVzcG9uc2VPYmplY3QpKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KLSAgICAgICAgU3RyaW5nIHZhbHVlU3RyaW5nOwotICAgICAgICBpZiAoIXJlc3BvbnNl
LnJlc3BvbnNlT2JqZWN0LT5nZXRTdHJpbmcoInJlc3VsdCJfcywgdmFsdWVTdHJpbmcpKSB7CisK
KyAgICAgICAgYXV0byB2YWx1ZVN0cmluZyA9IHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRT
dHJpbmcoInJlc3VsdCJfcyk7CisgICAgICAgIGlmICghdmFsdWVTdHJpbmcpIHsKICAgICAgICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6
RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQotICAgICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHJlc3VsdFZhbHVlOwotICAgICAgICBpZiAo
IUpTT046OlZhbHVlOjpwYXJzZUpTT04odmFsdWVTdHJpbmcsIHJlc3VsdFZhbHVlKSkgeworCisg
ICAgICAgIGF1dG8gcmVzdWx0VmFsdWUgPSBKU09OOjpWYWx1ZTo6cGFyc2VKU09OKHZhbHVlU3Ry
aW5nKTsKKyAgICAgICAgaWYgKCFyZXN1bHRWYWx1ZSkgewogICAgICAgICAgICAgY29tcGxldGlv
bkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OlVu
a25vd25FcnJvcikpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CisKICAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6c3VjY2VzcyhXVEZNb3ZlKHJlc3VsdFZh
bHVlKSkpOwogICAgIH0pOwogfQpAQCAtMTczMCw4ICsxODE3LDggQEAgdm9pZCBTZXNzaW9uOjpl
bGVtZW50Q2xlYXIoY29uc3QgU3RyaW5nJiBlbGVtZW50SUQsIEZ1bmN0aW9uPHZvaWQgKENvbW1h
bmRSZXN1bHQKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAKLSAgICAg
ICAgICAgIGJvb2wgaXNFZGl0YWJsZTsKLSAgICAgICAgICAgIGlmICghcmVzdWx0LnJlc3VsdCgp
LT5hc0Jvb2xlYW4oaXNFZGl0YWJsZSkgfHwgIWlzRWRpdGFibGUpIHsKKyAgICAgICAgICAgIGF1
dG8gaXNFZGl0YWJsZSA9IHJlc3VsdC5yZXN1bHQoKS0+YXNCb29sZWFuKCk7CisgICAgICAgICAg
ICBpZiAoIWlzRWRpdGFibGUgfHwgISppc0VkaXRhYmxlKSB7CiAgICAgICAgICAgICAgICAgY29t
cGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNv
ZGU6OkludmFsaWRFbGVtZW50U3RhdGUpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgICAgICB9CkBAIC0xNzQ2LDEwICsxODMzLDEwIEBAIHZvaWQgU2Vzc2lvbjo6ZWxlbWVudENs
ZWFyKGNvbnN0IFN0cmluZyYgZWxlbWVudElELCBGdW5jdGlvbjx2b2lkIChDb21tYW5kUmVzdWx0
CiAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZh
aWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpFbGVtZW50Tm90SW50ZXJhY3RhYmxlKSk7CiAg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgUmVmUHRyPEpTT046OkFycmF5PiBhcmd1bWVudHMgPSBKU09OOjpBcnJheTo6Y3JlYXRl
KCk7CisgICAgICAgICAgICAgICAgYXV0byBhcmd1bWVudHMgPSBKU09OOjpBcnJheTo6Y3JlYXRl
KCk7CiAgICAgICAgICAgICAgICAgYXJndW1lbnRzLT5wdXNoU3RyaW5nKGNyZWF0ZUVsZW1lbnQo
ZWxlbWVudElEKS0+dG9KU09OU3RyaW5nKCkpOwogCi0gICAgICAgICAgICAgICAgUmVmUHRyPEpT
T046Ok9iamVjdD4gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAg
ICAgICAgICAgYXV0byBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICAg
ICAgICAgICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoImJyb3dzaW5nQ29udGV4dEhhbmRsZSJf
cywgbV90b3BsZXZlbEJyb3dzaW5nQ29udGV4dC52YWx1ZSgpKTsKICAgICAgICAgICAgICAgICBp
ZiAobV9jdXJyZW50QnJvd3NpbmdDb250ZXh0KQogICAgICAgICAgICAgICAgICAgICBwYXJhbWV0
ZXJzLT5zZXRTdHJpbmcoImZyYW1lSGFuZGxlIl9zLCBtX2N1cnJlbnRCcm93c2luZ0NvbnRleHQu
dmFsdWUoKSk7CkBAIC0xNzgwLDcgKzE4NjcsNyBAQCB2b2lkIFNlc3Npb246OnNldElucHV0Rmls
ZVVwbG9hZEZpbGVzKGNvbnN0IFN0cmluZyYgZWxlbWVudElELCBjb25zdCBTdHJpbmcmIHRleAog
ICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgUmVmUHRyPEpTT046OkFycmF5PiBmaWxlbmFt
ZXMgPSBKU09OOjpBcnJheTo6Y3JlYXRlKCk7CisgICAgYXV0byBmaWxlbmFtZXMgPSBKU09OOjpB
cnJheTo6Y3JlYXRlKCk7CiAgICAgZm9yIChjb25zdCBhdXRvJiBmaWxlIDogZmlsZXMpIHsKICAg
ICAgICAgaWYgKCFGaWxlU3lzdGVtOjpmaWxlRXhpc3RzKGZpbGUpKSB7CiAgICAgICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9y
Q29kZTo6SW52YWxpZEFyZ3VtZW50KSk7CkBAIC0xNzg5LDcgKzE4NzYsNyBAQCB2b2lkIFNlc3Np
b246OnNldElucHV0RmlsZVVwbG9hZEZpbGVzKGNvbnN0IFN0cmluZyYgZWxlbWVudElELCBjb25z
dCBTdHJpbmcmIHRleAogICAgICAgICBmaWxlbmFtZXMtPnB1c2hTdHJpbmcoZmlsZSk7CiAgICAg
fQogCi0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6
Y3JlYXRlKCk7CisgICAgYXV0byBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsK
ICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoImJyb3dzaW5nQ29udGV4dEhhbmRsZSJfcywgbV90
b3BsZXZlbEJyb3dzaW5nQ29udGV4dC52YWx1ZSgpKTsKICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJp
bmcoImZyYW1lSGFuZGxlIl9zLCBtX2N1cnJlbnRCcm93c2luZ0NvbnRleHQudmFsdWVPcihlbXB0
eVN0cmluZygpKSk7CiAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJub2RlSGFuZGxlIl9zLCBl
bGVtZW50SUQpOwpAQCAtMTk4MCw5ICsyMDY3LDkgQEAgdm9pZCBTZXNzaW9uOjplbGVtZW50U2Vu
ZEtleXMoY29uc3QgU3RyaW5nJiBlbGVtZW50SUQsIGNvbnN0IFN0cmluZyYgdGV4dCwgRnVuY3QK
ICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgdGhyb3cge25hbWU6ICdFbGVtZW50Tm90SW50
ZXJhY3RhYmxlJywgbWVzc2FnZTogJ0VsZW1lbnQgaXMgbm90IGZvY3VzYWJsZS4nfTsiCiAgICAg
ICAgICAgICAgICAgICAgICJ9IjsKIAotICAgICAgICAgICAgICAgIFJlZlB0cjxKU09OOjpBcnJh
eT4gYXJndW1lbnRzID0gSlNPTjo6QXJyYXk6OmNyZWF0ZSgpOworICAgICAgICAgICAgICAgIGF1
dG8gYXJndW1lbnRzID0gSlNPTjo6QXJyYXk6OmNyZWF0ZSgpOwogICAgICAgICAgICAgICAgIGFy
Z3VtZW50cy0+cHVzaFN0cmluZyhjcmVhdGVFbGVtZW50KGVsZW1lbnRJRCktPnRvSlNPTlN0cmlu
ZygpKTsKLSAgICAgICAgICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzID0g
SlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgICAgICAgICBhdXRvIHBhcmFtZXRlcnMg
PSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMtPnNl
dFN0cmluZygiYnJvd3NpbmdDb250ZXh0SGFuZGxlIl9zLCBtX3RvcGxldmVsQnJvd3NpbmdDb250
ZXh0LnZhbHVlKCkpOwogICAgICAgICAgICAgICAgIGlmIChtX2N1cnJlbnRCcm93c2luZ0NvbnRl
eHQpCiAgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiZnJhbWVIYW5k
bGUiX3MsIG1fY3VycmVudEJyb3dzaW5nQ29udGV4dC52YWx1ZSgpKTsKQEAgLTIwNTYsNyArMjE0
Myw3IEBAIHZvaWQgU2Vzc2lvbjo6Z2V0UGFnZVNvdXJjZShGdW5jdGlvbjx2b2lkIChDb21tYW5k
UmVzdWx0JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyCiAgICAgICAgICAgICBjb21wbGV0aW9uSGFu
ZGxlcihXVEZNb3ZlKHJlc3VsdCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0g
ICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNy
ZWF0ZSgpOworICAgICAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgp
OwogICAgICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoImJyb3dzaW5nQ29udGV4dEhhbmRsZSJf
cywgbV90b3BsZXZlbEJyb3dzaW5nQ29udGV4dC52YWx1ZSgpKTsKICAgICAgICAgcGFyYW1ldGVy
cy0+c2V0U3RyaW5nKCJmdW5jdGlvbiJfcywgImZ1bmN0aW9uKCkgeyByZXR1cm4gZG9jdW1lbnQu
ZG9jdW1lbnRFbGVtZW50Lm91dGVySFRNTDsgfSJfcyk7CiAgICAgICAgIHBhcmFtZXRlcnMtPnNl
dEFycmF5KCJhcmd1bWVudHMiX3MsIEpTT046OkFycmF5OjpjcmVhdGUoKSk7CkBAIC0yMDY1LDM4
ICsyMTUyLDM5IEBAIHZvaWQgU2Vzc2lvbjo6Z2V0UGFnZVNvdXJjZShGdW5jdGlvbjx2b2lkIChD
b21tYW5kUmVzdWx0JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyCiAgICAgICAgICAgICAgICAgY29t
cGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChXVEZNb3ZlKHJlc3BvbnNlLnJlc3Bv
bnNlT2JqZWN0KSkpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIFN0cmluZyB2YWx1ZVN0cmluZzsKLSAgICAgICAgICAgIGlmICghcmVzcG9uc2Uu
cmVzcG9uc2VPYmplY3QtPmdldFN0cmluZygicmVzdWx0Il9zLCB2YWx1ZVN0cmluZykpIHsKKwor
ICAgICAgICAgICAgYXV0byB2YWx1ZVN0cmluZyA9IHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5n
ZXRTdHJpbmcoInJlc3VsdCJfcyk7CisgICAgICAgICAgICBpZiAoIXZhbHVlU3RyaW5nKSB7CiAg
ICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21t
YW5kUmVzdWx0OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikpOwogICAgICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gcmVz
dWx0VmFsdWU7Ci0gICAgICAgICAgICBpZiAoIUpTT046OlZhbHVlOjpwYXJzZUpTT04odmFsdWVT
dHJpbmcsIHJlc3VsdFZhbHVlKSkgeworCisgICAgICAgICAgICBhdXRvIHJlc3VsdFZhbHVlID0g
SlNPTjo6VmFsdWU6OnBhcnNlSlNPTih2YWx1ZVN0cmluZyk7CisgICAgICAgICAgICBpZiAoIXJl
c3VsdFZhbHVlKSB7CiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJl
c3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikpOwogICAg
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgY29tcGxl
dGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6c3VjY2VzcyhXVEZNb3ZlKHJlc3VsdFZhbHVlKSkp
OwogICAgICAgICB9KTsKICAgICB9KTsKIH0KIAotUmVmUHRyPEpTT046OlZhbHVlPiBTZXNzaW9u
OjpoYW5kbGVTY3JpcHRSZXN1bHQoUmVmUHRyPEpTT046OlZhbHVlPiYmIHJlc3VsdFZhbHVlKQor
UmVmPEpTT046OlZhbHVlPiBTZXNzaW9uOjpoYW5kbGVTY3JpcHRSZXN1bHQoUmVmPEpTT046OlZh
bHVlPiYmIHJlc3VsdFZhbHVlKQogewotICAgIFJlZlB0cjxKU09OOjpBcnJheT4gcmVzdWx0QXJy
YXk7Ci0gICAgaWYgKHJlc3VsdFZhbHVlLT5hc0FycmF5KHJlc3VsdEFycmF5KSkgewotICAgICAg
ICBSZWZQdHI8SlNPTjo6QXJyYXk+IHJldHVyblZhbHVlQXJyYXkgPSBKU09OOjpBcnJheTo6Y3Jl
YXRlKCk7CisgICAgaWYgKGF1dG8gcmVzdWx0QXJyYXkgPSByZXN1bHRWYWx1ZS0+YXNBcnJheSgp
KSB7CisgICAgICAgIGF1dG8gcmV0dXJuVmFsdWVBcnJheSA9IEpTT046OkFycmF5OjpjcmVhdGUo
KTsKICAgICAgICAgdW5zaWduZWQgcmVzdWx0QXJyYXlMZW5ndGggPSByZXN1bHRBcnJheS0+bGVu
Z3RoKCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZXN1bHRBcnJheUxlbmd0
aDsgKytpKQogICAgICAgICAgICAgcmV0dXJuVmFsdWVBcnJheS0+cHVzaFZhbHVlKGhhbmRsZVNj
cmlwdFJlc3VsdChyZXN1bHRBcnJheS0+Z2V0KGkpKSk7CiAgICAgICAgIHJldHVybiByZXR1cm5W
YWx1ZUFycmF5OwogICAgIH0KIAotICAgIGlmIChhdXRvIGVsZW1lbnQgPSBjcmVhdGVFbGVtZW50
KFJlZlB0cjxKU09OOjpWYWx1ZT4ocmVzdWx0VmFsdWUpKSkKLSAgICAgICAgcmV0dXJuIGVsZW1l
bnQ7CisgICAgaWYgKGF1dG8gZWxlbWVudCA9IGNyZWF0ZUVsZW1lbnQocmVzdWx0VmFsdWUuY29w
eVJlZigpKSkKKyAgICAgICAgcmV0dXJuIGVsZW1lbnQucmVsZWFzZU5vbk51bGwoKTsKIAotICAg
IFJlZlB0cjxKU09OOjpPYmplY3Q+IHJlc3VsdE9iamVjdDsKLSAgICBpZiAocmVzdWx0VmFsdWUt
PmFzT2JqZWN0KHJlc3VsdE9iamVjdCkpIHsKLSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4g
cmV0dXJuVmFsdWVPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGlmIChhdXRv
IHJlc3VsdE9iamVjdCA9IHJlc3VsdFZhbHVlLT5hc09iamVjdCgpKSB7CisgICAgICAgIGF1dG8g
cmV0dXJuVmFsdWVPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICBhdXRv
IGVuZCA9IHJlc3VsdE9iamVjdC0+ZW5kKCk7CiAgICAgICAgIGZvciAoYXV0byBpdCA9IHJlc3Vs
dE9iamVjdC0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQogICAgICAgICAgICAgcmV0dXJuVmFs
dWVPYmplY3QtPnNldFZhbHVlKGl0LT5rZXksIGhhbmRsZVNjcmlwdFJlc3VsdChXVEZNb3ZlKGl0
LT52YWx1ZSkpKTsKQEAgLTIxMTgsMTggKzIyMDYsMTcgQEAgdm9pZCBTZXNzaW9uOjpleGVjdXRl
U2NyaXB0KGNvbnN0IFN0cmluZyYgc2NyaXB0LCBSZWZQdHI8SlNPTjo6QXJyYXk+JiYgYXJndW1l
bnQKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUocmVzdWx0KSk7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgUmVmUHRyPEpTT046OkFycmF5PiBh
cmd1bWVudHMgPSBKU09OOjpBcnJheTo6Y3JlYXRlKCk7CisgICAgICAgIGF1dG8gYXJndW1lbnRz
ID0gSlNPTjo6QXJyYXk6OmNyZWF0ZSgpOwogICAgICAgICB1bnNpZ25lZCBhcmd1bWVudHNMZW5n
dGggPSBhcmd1bWVudHNBcnJheS0+bGVuZ3RoKCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBhcmd1bWVudHNMZW5ndGg7ICsraSkgewotICAgICAgICAgICAgaWYgKGF1dG8gYXJn
dW1lbnQgPSBhcmd1bWVudHNBcnJheS0+Z2V0KGkpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGF1
dG8gZWxlbWVudCA9IGV4dHJhY3RFbGVtZW50KCphcmd1bWVudCkpCi0gICAgICAgICAgICAgICAg
ICAgIGFyZ3VtZW50cy0+cHVzaFN0cmluZyhlbGVtZW50LT50b0pTT05TdHJpbmcoKSk7Ci0gICAg
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBhcmd1bWVudHMtPnB1c2hTdHJp
bmcoYXJndW1lbnQtPnRvSlNPTlN0cmluZygpKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGF1dG8gYXJndW1lbnQgPSBhcmd1bWVudHNBcnJheS0+Z2V0KGkpOworICAgICAgICAgICAgaWYg
KGF1dG8gZWxlbWVudCA9IGV4dHJhY3RFbGVtZW50KGFyZ3VtZW50KSkKKyAgICAgICAgICAgICAg
ICBhcmd1bWVudHMtPnB1c2hTdHJpbmcoZWxlbWVudC0+dG9KU09OU3RyaW5nKCkpOworICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGFyZ3VtZW50cy0+cHVzaFN0cmluZyhhcmd1bWVu
dC0+dG9KU09OU3RyaW5nKCkpOwogICAgICAgICB9CiAKLSAgICAgICAgUmVmUHRyPEpTT046Ok9i
amVjdD4gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIGF1dG8g
cGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgIHBhcmFtZXRlcnMt
PnNldFN0cmluZygiYnJvd3NpbmdDb250ZXh0SGFuZGxlIl9zLCBtX3RvcGxldmVsQnJvd3NpbmdD
b250ZXh0LnZhbHVlKCkpOwogICAgICAgICBpZiAobV9jdXJyZW50QnJvd3NpbmdDb250ZXh0KQog
ICAgICAgICAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJmcmFtZUhhbmRsZSJfcywgbV9jdXJy
ZW50QnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwpAQCAtMjE0OCwxNyArMjIzNSwyMCBAQCB2b2lk
IFNlc3Npb246OmV4ZWN1dGVTY3JpcHQoY29uc3QgU3RyaW5nJiBzY3JpcHQsIFJlZlB0cjxKU09O
OjpBcnJheT4mJiBhcmd1bWVudAogICAgICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cihXVEZNb3ZlKHJlc3VsdCkpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIFN0cmluZyB2YWx1ZVN0cmluZzsKLSAgICAgICAgICAgIGlmICghcmVz
cG9uc2UucmVzcG9uc2VPYmplY3QtPmdldFN0cmluZygicmVzdWx0Il9zLCB2YWx1ZVN0cmluZykp
IHsKKworICAgICAgICAgICAgYXV0byB2YWx1ZVN0cmluZyA9IHJlc3BvbnNlLnJlc3BvbnNlT2Jq
ZWN0LT5nZXRTdHJpbmcoInJlc3VsdCJfcyk7CisgICAgICAgICAgICBpZiAoIXZhbHVlU3RyaW5n
KSB7CiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFp
bChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikpOwogICAgICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFJlZlB0cjxKU09OOjpWYWx1
ZT4gcmVzdWx0VmFsdWU7Ci0gICAgICAgICAgICBpZiAoIUpTT046OlZhbHVlOjpwYXJzZUpTT04o
dmFsdWVTdHJpbmcsIHJlc3VsdFZhbHVlKSkgeworCisgICAgICAgICAgICBhdXRvIHJlc3VsdFZh
bHVlID0gSlNPTjo6VmFsdWU6OnBhcnNlSlNPTih2YWx1ZVN0cmluZyk7CisgICAgICAgICAgICBp
ZiAoIXJlc3VsdFZhbHVlKSB7CiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29t
bWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikp
OwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNv
bXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OnN1Y2Nlc3MoaGFuZGxlU2NyaXB0UmVzdWx0
KFdURk1vdmUocmVzdWx0VmFsdWUpKSkpOworCisgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cihDb21tYW5kUmVzdWx0OjpzdWNjZXNzKGhhbmRsZVNjcmlwdFJlc3VsdChyZXN1bHRWYWx1ZS5y
ZWxlYXNlTm9uTnVsbCgpKSkpOwogICAgICAgICB9KTsKICAgICB9KTsKIH0KQEAgLTIxODEsOSAr
MjI3MSw5IEBAIHN0YXRpYyBTdHJpbmcgbW91c2VCdXR0b25Gb3JBdXRvbWF0aW9uKE1vdXNlQnV0
dG9uIGJ1dHRvbikKIAogdm9pZCBTZXNzaW9uOjpwZXJmb3JtTW91c2VJbnRlcmFjdGlvbihpbnQg
eCwgaW50IHksIE1vdXNlQnV0dG9uIGJ1dHRvbiwgTW91c2VJbnRlcmFjdGlvbiBpbnRlcmFjdGlv
biwgRnVuY3Rpb248dm9pZCAoQ29tbWFuZFJlc3VsdCYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
IHsKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0Ojpj
cmVhdGUoKTsKKyAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwog
ICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiaGFuZGxlIl9zLCBtX3RvcGxldmVsQnJvd3NpbmdD
b250ZXh0LnZhbHVlKCkpOwotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBvc2l0aW9uID0gSlNP
Tjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBhdXRvIHBvc2l0aW9uID0gSlNPTjo6T2JqZWN0Ojpj
cmVhdGUoKTsKICAgICBwb3NpdGlvbi0+c2V0SW50ZWdlcigieCJfcywgeCk7CiAgICAgcG9zaXRp
b24tPnNldEludGVnZXIoInkiX3MsIHkpOwogICAgIHBhcmFtZXRlcnMtPnNldE9iamVjdCgicG9z
aXRpb24iX3MsIFdURk1vdmUocG9zaXRpb24pKTsKQEAgLTIyMTcsMTEgKzIzMDcsMTEgQEAgdm9p
ZCBTZXNzaW9uOjpwZXJmb3JtTW91c2VJbnRlcmFjdGlvbihpbnQgeCwgaW50IHksIE1vdXNlQnV0
dG9uIGJ1dHRvbiwgTW91c2VJbnQKIAogdm9pZCBTZXNzaW9uOjpwZXJmb3JtS2V5Ym9hcmRJbnRl
cmFjdGlvbnMoVmVjdG9yPEtleWJvYXJkSW50ZXJhY3Rpb24+JiYgaW50ZXJhY3Rpb25zLCBGdW5j
dGlvbjx2b2lkIChDb21tYW5kUmVzdWx0JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAg
IFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgp
OworICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgcGFy
YW1ldGVycy0+c2V0U3RyaW5nKCJoYW5kbGUiX3MsIG1fdG9wbGV2ZWxCcm93c2luZ0NvbnRleHQu
dmFsdWUoKSk7Ci0gICAgUmVmUHRyPEpTT046OkFycmF5PiBpbnRlcmFjdGlvbnNBcnJheSA9IEpT
T046OkFycmF5OjpjcmVhdGUoKTsKKyAgICBhdXRvIGludGVyYWN0aW9uc0FycmF5ID0gSlNPTjo6
QXJyYXk6OmNyZWF0ZSgpOwogICAgIGZvciAoY29uc3QgYXV0byYgaW50ZXJhY3Rpb24gOiBpbnRl
cmFjdGlvbnMpIHsKLSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gaW50ZXJhY3Rpb25PYmpl
Y3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBhdXRvIGludGVyYWN0aW9uT2Jq
ZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICAgc3dpdGNoIChpbnRlcmFjdGlv
bi50eXBlKSB7CiAgICAgICAgIGNhc2UgS2V5Ym9hcmRJbnRlcmFjdGlvblR5cGU6OktleVByZXNz
OgogICAgICAgICAgICAgaW50ZXJhY3Rpb25PYmplY3QtPnNldFN0cmluZygidHlwZSJfcywgIktl
eVByZXNzIl9zKTsKQEAgLTIyNTIsMzcgKzIzNDIsNDMgQEAgdm9pZCBTZXNzaW9uOjpwZXJmb3Jt
S2V5Ym9hcmRJbnRlcmFjdGlvbnMoVmVjdG9yPEtleWJvYXJkSW50ZXJhY3Rpb24+JiYgaW50ZXJh
Y3QKIHN0YXRpYyBPcHRpb25hbDxTZXNzaW9uOjpDb29raWU+IHBhcnNlQXV0b21hdGlvbkNvb2tp
ZShjb25zdCBKU09OOjpPYmplY3QmIGNvb2tpZU9iamVjdCkKIHsKICAgICBTZXNzaW9uOjpDb29r
aWUgY29va2llOwotICAgIGlmICghY29va2llT2JqZWN0LmdldFN0cmluZygibmFtZSJfcywgY29v
a2llLm5hbWUpKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIGlmICghY29va2ll
T2JqZWN0LmdldFN0cmluZygidmFsdWUiX3MsIGNvb2tpZS52YWx1ZSkpCisKKyAgICBjb29raWUu
bmFtZSA9IGNvb2tpZU9iamVjdC5nZXRTdHJpbmcoIm5hbWUiX3MpOworICAgIGlmICghY29va2ll
Lm5hbWUpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBTdHJpbmcgcGF0aDsK
LSAgICBpZiAoY29va2llT2JqZWN0LmdldFN0cmluZygicGF0aCJfcywgcGF0aCkpCisgICAgY29v
a2llLnZhbHVlID0gY29va2llT2JqZWN0LmdldFN0cmluZygidmFsdWUiX3MpOworICAgIGlmICgh
Y29va2llLnZhbHVlKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgYXV0byBw
YXRoID0gY29va2llT2JqZWN0LmdldFN0cmluZygicGF0aCJfcyk7CisgICAgaWYgKCEhcGF0aCkK
ICAgICAgICAgY29va2llLnBhdGggPSBwYXRoOwotICAgIFN0cmluZyBkb21haW47Ci0gICAgaWYg
KGNvb2tpZU9iamVjdC5nZXRTdHJpbmcoImRvbWFpbiJfcywgZG9tYWluKSkKKworICAgIGF1dG8g
ZG9tYWluID0gY29va2llT2JqZWN0LmdldFN0cmluZygiZG9tYWluIl9zKTsKKyAgICBpZiAoISFk
b21haW4pCiAgICAgICAgIGNvb2tpZS5kb21haW4gPSBkb21haW47Ci0gICAgYm9vbCBzZWN1cmU7
Ci0gICAgaWYgKGNvb2tpZU9iamVjdC5nZXRCb29sZWFuKCJzZWN1cmUiX3MsIHNlY3VyZSkpCi0g
ICAgICAgIGNvb2tpZS5zZWN1cmUgPSBzZWN1cmU7Ci0gICAgYm9vbCBodHRwT25seTsKLSAgICBp
ZiAoY29va2llT2JqZWN0LmdldEJvb2xlYW4oImh0dHBPbmx5Il9zLCBodHRwT25seSkpCi0gICAg
ICAgIGNvb2tpZS5odHRwT25seSA9IGh0dHBPbmx5OwotICAgIGJvb2wgc2Vzc2lvbiA9IGZhbHNl
OwotICAgIGNvb2tpZU9iamVjdC5nZXRCb29sZWFuKCJzZXNzaW9uIl9zLCBzZXNzaW9uKTsKKwor
ICAgIGF1dG8gc2VjdXJlID0gY29va2llT2JqZWN0LmdldEJvb2xlYW4oInNlY3VyZSJfcyk7Cisg
ICAgaWYgKHNlY3VyZSkKKyAgICAgICAgY29va2llLnNlY3VyZSA9ICpzZWN1cmU7CisKKyAgICBh
dXRvIGh0dHBPbmx5ID0gY29va2llT2JqZWN0LmdldEJvb2xlYW4oImh0dHBPbmx5Il9zKTsKKyAg
ICBpZiAoaHR0cE9ubHkpCisgICAgICAgIGNvb2tpZS5odHRwT25seSA9ICpodHRwT25seTsKKwor
ICAgIGF1dG8gc2Vzc2lvbiA9IGNvb2tpZU9iamVjdC5nZXRCb29sZWFuKCJzZXNzaW9uIl9zKTsK
ICAgICBpZiAoIXNlc3Npb24pIHsKLSAgICAgICAgZG91YmxlIGV4cGlyeTsKLSAgICAgICAgaWYg
KGNvb2tpZU9iamVjdC5nZXREb3VibGUoImV4cGlyZXMiX3MsIGV4cGlyeSkpCi0gICAgICAgICAg
ICBjb29raWUuZXhwaXJ5ID0gZXhwaXJ5OworICAgICAgICBpZiAoYXV0byBleHBpcnkgPSBjb29r
aWVPYmplY3QuZ2V0RG91YmxlKCJleHBpcmVzIl9zKSkKKyAgICAgICAgICAgIGNvb2tpZS5leHBp
cnkgPSAqZXhwaXJ5OwogICAgIH0KIAogICAgIHJldHVybiBjb29raWU7CiB9CiAKLXN0YXRpYyBS
ZWZQdHI8SlNPTjo6T2JqZWN0PiBidWlsdEF1dG9tYXRpb25Db29raWUoY29uc3QgU2Vzc2lvbjo6
Q29va2llJiBjb29raWUpCitzdGF0aWMgUmVmPEpTT046Ok9iamVjdD4gYnVpbHRBdXRvbWF0aW9u
Q29va2llKGNvbnN0IFNlc3Npb246OkNvb2tpZSYgY29va2llKQogewotICAgIFJlZlB0cjxKU09O
OjpPYmplY3Q+IGNvb2tpZU9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgYXV0
byBjb29raWVPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgIGNvb2tpZU9iamVj
dC0+c2V0U3RyaW5nKCJuYW1lIl9zLCBjb29raWUubmFtZSk7CiAgICAgY29va2llT2JqZWN0LT5z
ZXRTdHJpbmcoInZhbHVlIl9zLCBjb29raWUudmFsdWUpOwogICAgIGNvb2tpZU9iamVjdC0+c2V0
U3RyaW5nKCJwYXRoIl9zLCBjb29raWUucGF0aC52YWx1ZU9yKCIvIikpOwpAQCAtMjI5NCw5ICsy
MzkwLDkgQEAgc3RhdGljIFJlZlB0cjxKU09OOjpPYmplY3Q+IGJ1aWx0QXV0b21hdGlvbkNvb2tp
ZShjb25zdCBTZXNzaW9uOjpDb29raWUmIGNvb2tpZSkKICAgICByZXR1cm4gY29va2llT2JqZWN0
OwogfQogCi1zdGF0aWMgUmVmUHRyPEpTT046Ok9iamVjdD4gc2VyaWFsaXplQ29va2llKGNvbnN0
IFNlc3Npb246OkNvb2tpZSYgY29va2llKQorc3RhdGljIFJlZjxKU09OOjpPYmplY3Q+IHNlcmlh
bGl6ZUNvb2tpZShjb25zdCBTZXNzaW9uOjpDb29raWUmIGNvb2tpZSkKIHsKLSAgICBSZWZQdHI8
SlNPTjo6T2JqZWN0PiBjb29raWVPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAg
IGF1dG8gY29va2llT2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICBjb29raWVP
YmplY3QtPnNldFN0cmluZygibmFtZSJfcywgY29va2llLm5hbWUpOwogICAgIGNvb2tpZU9iamVj
dC0+c2V0U3RyaW5nKCJ2YWx1ZSJfcywgY29va2llLnZhbHVlKTsKICAgICBpZiAoY29va2llLnBh
dGgpCkBAIC0yMzI1LDIzICsyNDIxLDI0IEBAIHZvaWQgU2Vzc2lvbjo6Z2V0QWxsQ29va2llcyhG
dW5jdGlvbjx2b2lkIChDb21tYW5kUmVzdWx0JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyCiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0
PiBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgYXV0byBwYXJh
bWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICAgcGFyYW1ldGVycy0+c2V0
U3RyaW5nKCJicm93c2luZ0NvbnRleHRIYW5kbGUiX3MsIG1fdG9wbGV2ZWxCcm93c2luZ0NvbnRl
eHQudmFsdWUoKSk7CiAgICAgICAgIG1faG9zdC0+c2VuZENvbW1hbmRUb0JhY2tlbmQoImdldEFs
bENvb2tpZXMiX3MsIFdURk1vdmUocGFyYW1ldGVycyksIFtwcm90ZWN0ZWRUaGlzLCBjb21wbGV0
aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXShTZXNzaW9uSG9zdDo6Q29t
bWFuZFJlc3BvbnNlJiYgcmVzcG9uc2UpIG11dGFibGUgewogICAgICAgICAgICAgaWYgKHJlc3Bv
bnNlLmlzRXJyb3IgfHwgIXJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0KSB7CiAgICAgICAgICAgICAg
ICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChXVEZNb3ZlKHJlc3BvbnNl
LnJlc3BvbnNlT2JqZWN0KSkpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIFJlZlB0cjxKU09OOjpBcnJheT4gY29va2llc0FycmF5OwotICAgICAg
ICAgICAgaWYgKCFyZXNwb25zZS5yZXNwb25zZU9iamVjdC0+Z2V0QXJyYXkoImNvb2tpZXMiX3Ms
IGNvb2tpZXNBcnJheSkpIHsKKworICAgICAgICAgICAgYXV0byBjb29raWVzQXJyYXkgPSByZXNw
b25zZS5yZXNwb25zZU9iamVjdC0+Z2V0QXJyYXkoImNvb2tpZXMiX3MpOworICAgICAgICAgICAg
aWYgKCFjb29raWVzQXJyYXkpIHsKICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihD
b21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVycm9y
KSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQotICAgICAgICAgICAg
UmVmUHRyPEpTT046OkFycmF5PiBjb29raWVzID0gSlNPTjo6QXJyYXk6OmNyZWF0ZSgpOworCisg
ICAgICAgICAgICBhdXRvIGNvb2tpZXMgPSBKU09OOjpBcnJheTo6Y3JlYXRlKCk7CiAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY29va2llc0FycmF5LT5sZW5ndGgoKTsgKytp
KSB7Ci0gICAgICAgICAgICAgICAgUmVmUHRyPEpTT046OlZhbHVlPiBjb29raWVWYWx1ZSA9IGNv
b2tpZXNBcnJheS0+Z2V0KGkpOwotICAgICAgICAgICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+
IGNvb2tpZU9iamVjdDsKLSAgICAgICAgICAgICAgICBpZiAoIWNvb2tpZVZhbHVlLT5hc09iamVj
dChjb29raWVPYmplY3QpKSB7CisgICAgICAgICAgICAgICAgYXV0byBjb29raWVPYmplY3QgPSBj
b29raWVzQXJyYXktPmdldChpKS0+YXNPYmplY3QoKTsKKyAgICAgICAgICAgICAgICBpZiAoIWNv
b2tpZU9iamVjdCkgewogICAgICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21t
YW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVycm9yKSk7
CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9CkBAIC0yMzY1
LDE0ICsyNDYyLDExIEBAIHZvaWQgU2Vzc2lvbjo6Z2V0TmFtZWRDb29raWUoY29uc3QgU3RyaW5n
JiBuYW1lLCBGdW5jdGlvbjx2b2lkIChDb21tYW5kUmVzdWx0JiYpCiAgICAgICAgICAgICBjb21w
bGV0aW9uSGFuZGxlcihXVEZNb3ZlKHJlc3VsdCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9Ci0gICAgICAgIFJlZlB0cjxKU09OOjpBcnJheT4gY29va2llc0FycmF5OwotICAgICAg
ICByZXN1bHQucmVzdWx0KCktPmFzQXJyYXkoY29va2llc0FycmF5KTsKKworICAgICAgICBhdXRv
IGNvb2tpZXNBcnJheSA9IHJlc3VsdC5yZXN1bHQoKS0+YXNBcnJheSgpOwogICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgY29va2llc0FycmF5LT5sZW5ndGgoKTsgKytpKSB7Ci0gICAg
ICAgICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IGNvb2tpZVZhbHVlID0gY29va2llc0FycmF5LT5n
ZXQoaSk7Ci0gICAgICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBjb29raWVPYmplY3Q7Ci0g
ICAgICAgICAgICBjb29raWVWYWx1ZS0+YXNPYmplY3QoY29va2llT2JqZWN0KTsKLSAgICAgICAg
ICAgIFN0cmluZyBjb29raWVOYW1lOwotICAgICAgICAgICAgY29va2llT2JqZWN0LT5nZXRTdHJp
bmcoIm5hbWUiX3MsIGNvb2tpZU5hbWUpOworICAgICAgICAgICAgYXV0byBjb29raWVPYmplY3Qg
PSBjb29raWVzQXJyYXktPmdldChpKS0+YXNPYmplY3QoKTsKKyAgICAgICAgICAgIGF1dG8gY29v
a2llTmFtZSA9IGNvb2tpZU9iamVjdC0+Z2V0U3RyaW5nKCJuYW1lIl9zKTsKICAgICAgICAgICAg
IGlmIChjb29raWVOYW1lID09IG5hbWUpIHsKICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFu
ZGxlcihDb21tYW5kUmVzdWx0OjpzdWNjZXNzKFdURk1vdmUoY29va2llT2JqZWN0KSkpOwogICAg
ICAgICAgICAgICAgIHJldHVybjsKQEAgLTIzOTQsNyArMjQ4OCw3IEBAIHZvaWQgU2Vzc2lvbjo6
YWRkQ29va2llKGNvbnN0IENvb2tpZSYgY29va2llLCBGdW5jdGlvbjx2b2lkIChDb21tYW5kUmVz
dWx0JiYpPiYmCiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKHJlc3VsdCkp
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIFJlZlB0cjxKU09OOjpP
YmplY3Q+IHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBhdXRv
IHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICBwYXJhbWV0ZXJz
LT5zZXRTdHJpbmcoImJyb3dzaW5nQ29udGV4dEhhbmRsZSJfcywgbV90b3BsZXZlbEJyb3dzaW5n
Q29udGV4dC52YWx1ZSgpKTsKICAgICAgICAgcGFyYW1ldGVycy0+c2V0T2JqZWN0KCJjb29raWUi
X3MsIFdURk1vdmUoY29va2llKSk7CiAgICAgICAgIG1faG9zdC0+c2VuZENvbW1hbmRUb0JhY2tl
bmQoImFkZFNpbmdsZUNvb2tpZSJfcywgV1RGTW92ZShwYXJhbWV0ZXJzKSwgW3Byb3RlY3RlZFRo
aXMsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKFNlc3Np
b25Ib3N0OjpDb21tYW5kUmVzcG9uc2UmJiByZXNwb25zZSkgewpAQCAtMjQxOSw3ICsyNTEzLDcg
QEAgdm9pZCBTZXNzaW9uOjpkZWxldGVDb29raWUoY29uc3QgU3RyaW5nJiBuYW1lLCBGdW5jdGlv
bjx2b2lkIChDb21tYW5kUmVzdWx0JiYpPiYKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVy
KFdURk1vdmUocmVzdWx0KSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAg
ICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRl
KCk7CisgICAgICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAg
ICAgICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiYnJvd3NpbmdDb250ZXh0SGFuZGxlIl9zLCBt
X3RvcGxldmVsQnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwogICAgICAgICBwYXJhbWV0ZXJzLT5z
ZXRTdHJpbmcoImNvb2tpZU5hbWUiX3MsIG5hbWUpOwogICAgICAgICBtX2hvc3QtPnNlbmRDb21t
YW5kVG9CYWNrZW5kKCJkZWxldGVTaW5nbGVDb29raWUiX3MsIFdURk1vdmUocGFyYW1ldGVycyks
IFtwcm90ZWN0ZWRUaGlzLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpXShTZXNzaW9uSG9zdDo6Q29tbWFuZFJlc3BvbnNlJiYgcmVzcG9uc2UpIHsKQEAgLTI0
NDQsNyArMjUzOCw3IEBAIHZvaWQgU2Vzc2lvbjo6ZGVsZXRlQWxsQ29va2llcyhGdW5jdGlvbjx2
b2lkIChDb21tYW5kUmVzdWx0JiYpPiYmIGNvbXBsZXRpb25IYW5kCiAgICAgICAgICAgICBjb21w
bGV0aW9uSGFuZGxlcihXVEZNb3ZlKHJlc3VsdCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9Ci0gICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnMgPSBKU09OOjpP
YmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6
OmNyZWF0ZSgpOwogICAgICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoImJyb3dzaW5nQ29udGV4
dEhhbmRsZSJfcywgbV90b3BsZXZlbEJyb3dzaW5nQ29udGV4dC52YWx1ZSgpKTsKICAgICAgICAg
bV9ob3N0LT5zZW5kQ29tbWFuZFRvQmFja2VuZCgiZGVsZXRlQWxsQ29va2llcyJfcywgV1RGTW92
ZShwYXJhbWV0ZXJzKSwgW3Byb3RlY3RlZFRoaXMsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcildKFNlc3Npb25Ib3N0OjpDb21tYW5kUmVzcG9uc2UmJiByZXNw
b25zZSkgewogICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmlzRXJyb3IpIHsKQEAgLTI1MTcsMjMg
KzI2MTEsMjMgQEAgdm9pZCBTZXNzaW9uOjpwZXJmb3JtQWN0aW9ucyhWZWN0b3I8VmVjdG9yPEFj
dGlvbj4+JiYgYWN0aW9uc0J5VGljaywgRnVuY3Rpb248dm8KICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQogCi0gICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnMgPSBK
U09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU09OOjpP
YmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoImhhbmRsZSJf
cywgbV90b3BsZXZlbEJyb3dzaW5nQ29udGV4dC52YWx1ZSgpKTsKICAgICAgICAgaWYgKG1fY3Vy
cmVudEJyb3dzaW5nQ29udGV4dCkKICAgICAgICAgICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygi
ZnJhbWVIYW5kbGUiX3MsIG1fY3VycmVudEJyb3dzaW5nQ29udGV4dC52YWx1ZSgpKTsKLSAgICAg
ICAgUmVmUHRyPEpTT046OkFycmF5PiBpbnB1dFNvdXJjZXMgPSBKU09OOjpBcnJheTo6Y3JlYXRl
KCk7CisgICAgICAgIGF1dG8gaW5wdXRTb3VyY2VzID0gSlNPTjo6QXJyYXk6OmNyZWF0ZSgpOwog
ICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGlucHV0U291cmNlIDogbV9hY3RpdmVJbnB1dFNvdXJj
ZXMpIHsKLSAgICAgICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IGlucHV0U291cmNlT2JqZWN0
ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgICAgIGF1dG8gaW5wdXRTb3VyY2VP
YmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICAgICAgaW5wdXRTb3VyY2VP
YmplY3QtPnNldFN0cmluZygic291cmNlSWQiX3MsIGlucHV0U291cmNlLmtleSk7CiAgICAgICAg
ICAgICBpbnB1dFNvdXJjZU9iamVjdC0+c2V0U3RyaW5nKCJzb3VyY2VUeXBlIl9zLCBhdXRvbWF0
aW9uU291cmNlVHlwZShpbnB1dFNvdXJjZS52YWx1ZS50eXBlKSk7CiAgICAgICAgICAgICBpbnB1
dFNvdXJjZXMtPnB1c2hPYmplY3QoV1RGTW92ZShpbnB1dFNvdXJjZU9iamVjdCkpOwogICAgICAg
ICB9CiAgICAgICAgIHBhcmFtZXRlcnMtPnNldEFycmF5KCJpbnB1dFNvdXJjZXMiX3MsIFdURk1v
dmUoaW5wdXRTb3VyY2VzKSk7Ci0gICAgICAgIFJlZlB0cjxKU09OOjpBcnJheT4gc3RlcHMgPSBK
U09OOjpBcnJheTo6Y3JlYXRlKCk7CisgICAgICAgIGF1dG8gc3RlcHMgPSBKU09OOjpBcnJheTo6
Y3JlYXRlKCk7CiAgICAgICAgIGZvciAoY29uc3QgYXV0byYgdGljayA6IGFjdGlvbnNCeVRpY2sp
IHsKLSAgICAgICAgICAgIFJlZlB0cjxKU09OOjpBcnJheT4gc3RhdGVzID0gSlNPTjo6QXJyYXk6
OmNyZWF0ZSgpOworICAgICAgICAgICAgYXV0byBzdGF0ZXMgPSBKU09OOjpBcnJheTo6Y3JlYXRl
KCk7CiAgICAgICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGFjdGlvbiA6IHRpY2spIHsKLSAgICAg
ICAgICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBzdGF0ZSA9IEpTT046Ok9iamVjdDo6Y3Jl
YXRlKCk7CisgICAgICAgICAgICAgICAgYXV0byBzdGF0ZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRl
KCk7CiAgICAgICAgICAgICAgICAgYXV0byYgY3VycmVudFN0YXRlID0gaW5wdXRTb3VyY2VTdGF0
ZShhY3Rpb24uaWQpOwogICAgICAgICAgICAgICAgIHN0YXRlLT5zZXRTdHJpbmcoInNvdXJjZUlk
Il9zLCBhY3Rpb24uaWQpOwogICAgICAgICAgICAgICAgIHN3aXRjaCAoYWN0aW9uLnR5cGUpIHsK
QEAgLTI1NTEsNyArMjY0NSw3IEBAIHZvaWQgU2Vzc2lvbjo6cGVyZm9ybUFjdGlvbnMoVmVjdG9y
PFZlY3RvcjxBY3Rpb24+PiYmIGFjdGlvbnNCeVRpY2ssIEZ1bmN0aW9uPHZvCiAgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgY2FzZSBBY3Rpb246OlN1
YnR5cGU6OlBvaW50ZXJNb3ZlOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+c2V0
U3RyaW5nKCJvcmlnaW4iX3MsIGF1dG9tYXRpb25PcmlnaW5UeXBlKGFjdGlvbi5vcmlnaW4tPnR5
cGUpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IGxvY2F0
aW9uID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF1
dG8gbG9jYXRpb24gPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgbG9jYXRpb24tPnNldEludGVnZXIoIngiX3MsIGFjdGlvbi54LnZhbHVlKCkpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb24tPnNldEludGVnZXIoInkiX3MsIGFjdGlvbi55
LnZhbHVlKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUtPnNldE9iamVjdCgibG9j
YXRpb24iX3MsIFdURk1vdmUobG9jYXRpb24pKTsKQEAgLTI2MTcsNyArMjcxMSw3IEBAIHZvaWQg
U2Vzc2lvbjo6cGVyZm9ybUFjdGlvbnMoVmVjdG9yPFZlY3RvcjxBY3Rpb24+PiYmIGFjdGlvbnNC
eVRpY2ssIEZ1bmN0aW9uPHZvCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHN0
YXRlcy0+cHVzaE9iamVjdChXVEZNb3ZlKHN0YXRlKSk7CiAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBzdGVwU3RhdGVzID0gSlNPTjo6T2JqZWN0OjpjcmVh
dGUoKTsKKyAgICAgICAgICAgIGF1dG8gc3RlcFN0YXRlcyA9IEpTT046Ok9iamVjdDo6Y3JlYXRl
KCk7CiAgICAgICAgICAgICBzdGVwU3RhdGVzLT5zZXRBcnJheSgic3RhdGVzIl9zLCBXVEZNb3Zl
KHN0YXRlcykpOwogICAgICAgICAgICAgc3RlcHMtPnB1c2hPYmplY3QoV1RGTW92ZShzdGVwU3Rh
dGVzKSk7CiAgICAgICAgIH0KQEAgLTI2NDMsNyArMjczNyw3IEBAIHZvaWQgU2Vzc2lvbjo6cmVs
ZWFzZUFjdGlvbnMoRnVuY3Rpb248dm9pZCAoQ29tbWFuZFJlc3VsdCYmKT4mJiBjb21wbGV0aW9u
SGFuZGxlCiAgICAgbV9hY3RpdmVJbnB1dFNvdXJjZXMuY2xlYXIoKTsKICAgICBtX2lucHV0U3Rh
dGVUYWJsZS5jbGVhcigpOwogCi0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVycyA9
IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgYXV0byBwYXJhbWV0ZXJzID0gSlNPTjo6T2Jq
ZWN0OjpjcmVhdGUoKTsKICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoImhhbmRsZSJfcywgbV90
b3BsZXZlbEJyb3dzaW5nQ29udGV4dC52YWx1ZSgpKTsKICAgICBtX2hvc3QtPnNlbmRDb21tYW5k
VG9CYWNrZW5kKCJjYW5jZWxJbnRlcmFjdGlvblNlcXVlbmNlIl9zLCBXVEZNb3ZlKHBhcmFtZXRl
cnMpLCBbcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXShTZXNzaW9uSG9zdDo6Q29tbWFuZFJlc3BvbnNl
JiYgcmVzcG9uc2UpIHsKICAgICAgICAgaWYgKHJlc3BvbnNlLmlzRXJyb3IpIHsKQEAgLTI2NjEs
NyArMjc1NSw3IEBAIHZvaWQgU2Vzc2lvbjo6ZGlzbWlzc0FsZXJ0KEZ1bmN0aW9uPHZvaWQgKENv
bW1hbmRSZXN1bHQmJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0
OjpjcmVhdGUoKTsKKyAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgp
OwogICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiYnJvd3NpbmdDb250ZXh0SGFuZGxlIl9zLCBt
X3RvcGxldmVsQnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwogICAgIG1faG9zdC0+c2VuZENvbW1h
bmRUb0JhY2tlbmQoImRpc21pc3NDdXJyZW50SmF2YVNjcmlwdERpYWxvZyJfcywgV1RGTW92ZShw
YXJhbWV0ZXJzKSwgW3Byb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY29tcGxldGlvbkhh
bmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oU2Vzc2lvbkhvc3Q6OkNvbW1hbmRS
ZXNwb25zZSYmIHJlc3BvbnNlKSB7CiAgICAgICAgIGlmIChyZXNwb25zZS5pc0Vycm9yKSB7CkBA
IC0yNjc5LDcgKzI3NzMsNyBAQCB2b2lkIFNlc3Npb246OmFjY2VwdEFsZXJ0KEZ1bmN0aW9uPHZv
aWQgKENvbW1hbmRSZXN1bHQmJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzID0gSlNPTjo6
T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNy
ZWF0ZSgpOwogICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiYnJvd3NpbmdDb250ZXh0SGFuZGxl
Il9zLCBtX3RvcGxldmVsQnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwogICAgIG1faG9zdC0+c2Vu
ZENvbW1hbmRUb0JhY2tlbmQoImFjY2VwdEN1cnJlbnRKYXZhU2NyaXB0RGlhbG9nIl9zLCBXVEZN
b3ZlKHBhcmFtZXRlcnMpLCBbcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjb21wbGV0
aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXShTZXNzaW9uSG9zdDo6Q29t
bWFuZFJlc3BvbnNlJiYgcmVzcG9uc2UpIHsKICAgICAgICAgaWYgKHJlc3BvbnNlLmlzRXJyb3Ip
IHsKQEAgLTI2OTcsMTggKzI3OTEsMjAgQEAgdm9pZCBTZXNzaW9uOjpnZXRBbGVydFRleHQoRnVu
Y3Rpb248dm9pZCAoQ29tbWFuZFJlc3VsdCYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnMg
PSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTT046Ok9i
amVjdDo6Y3JlYXRlKCk7CiAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJicm93c2luZ0NvbnRl
eHRIYW5kbGUiX3MsIG1fdG9wbGV2ZWxCcm93c2luZ0NvbnRleHQudmFsdWUoKSk7CiAgICAgbV9o
b3N0LT5zZW5kQ29tbWFuZFRvQmFja2VuZCgibWVzc2FnZU9mQ3VycmVudEphdmFTY3JpcHREaWFs
b2ciX3MsIFdURk1vdmUocGFyYW1ldGVycyksIFtwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhp
cyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKFNlc3Np
b25Ib3N0OjpDb21tYW5kUmVzcG9uc2UmJiByZXNwb25zZSkgewogICAgICAgICBpZiAocmVzcG9u
c2UuaXNFcnJvciB8fCAhcmVzcG9uc2UucmVzcG9uc2VPYmplY3QpIHsKICAgICAgICAgICAgIGNv
bXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoV1RGTW92ZShyZXNwb25zZS5yZXNw
b25zZU9iamVjdCkpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBT
dHJpbmcgdmFsdWVTdHJpbmc7Ci0gICAgICAgIGlmICghcmVzcG9uc2UucmVzcG9uc2VPYmplY3Qt
PmdldFN0cmluZygibWVzc2FnZSJfcywgdmFsdWVTdHJpbmcpKSB7CisKKyAgICAgICAgYXV0byB2
YWx1ZVN0cmluZyA9IHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRTdHJpbmcoIm1lc3NhZ2Ui
X3MpOworICAgICAgICBpZiAoIXZhbHVlU3RyaW5nKSB7CiAgICAgICAgICAgICBjb21wbGV0aW9u
SGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5r
bm93bkVycm9yKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KKwogICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpzdWNjZXNzKEpTT046OlZhbHVlOjpjcmVh
dGUodmFsdWVTdHJpbmcpKSk7CiAgICAgfSk7CiB9CkBAIC0yNzIwLDcgKzI4MTYsNyBAQCB2b2lk
IFNlc3Npb246OnNlbmRBbGVydFRleHQoY29uc3QgU3RyaW5nJiB0ZXh0LCBGdW5jdGlvbjx2b2lk
IChDb21tYW5kUmVzdWx0JiYpPgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgUmVmUHRy
PEpTT046Ok9iamVjdD4gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAg
YXV0byBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICBwYXJhbWV0ZXJz
LT5zZXRTdHJpbmcoImJyb3dzaW5nQ29udGV4dEhhbmRsZSJfcywgbV90b3BsZXZlbEJyb3dzaW5n
Q29udGV4dC52YWx1ZSgpKTsKICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoInVzZXJJbnB1dCJf
cywgdGV4dCk7CiAgICAgbV9ob3N0LT5zZW5kQ29tbWFuZFRvQmFja2VuZCgic2V0VXNlcklucHV0
Rm9yQ3VycmVudEphdmFTY3JpcHRQcm9tcHQiX3MsIFdURk1vdmUocGFyYW1ldGVycyksIFtwcm90
ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlcildKFNlc3Npb25Ib3N0OjpDb21tYW5kUmVzcG9uc2UmJiByZXNwb25z
ZSkgewpAQCAtMjc0NCw3ICsyODQwLDcgQEAgdm9pZCBTZXNzaW9uOjp0YWtlU2NyZWVuc2hvdChP
cHRpb25hbDxTdHJpbmc+IGVsZW1lbnRJRCwgT3B0aW9uYWw8Ym9vbD4gc2Nyb2xsSW4KICAgICAg
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUocmVzdWx0KSk7CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVy
cyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIGF1dG8gcGFyYW1ldGVycyA9IEpT
T046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiaGFu
ZGxlIl9zLCBtX3RvcGxldmVsQnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwogICAgICAgICBpZiAo
bV9jdXJyZW50QnJvd3NpbmdDb250ZXh0KQogICAgICAgICAgICAgcGFyYW1ldGVycy0+c2V0U3Ry
aW5nKCJmcmFtZUhhbmRsZSJfcywgbV9jdXJyZW50QnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwpA
QCAtMjc1OCwxMSArMjg1NCwxMyBAQCB2b2lkIFNlc3Npb246OnRha2VTY3JlZW5zaG90KE9wdGlv
bmFsPFN0cmluZz4gZWxlbWVudElELCBPcHRpb25hbDxib29sPiBzY3JvbGxJbgogICAgICAgICAg
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoV1RGTW92ZShyZXNw
b25zZS5yZXNwb25zZU9iamVjdCkpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBTdHJpbmcgZGF0YTsKLSAgICAgICAgICAgIGlmICghcmVzcG9u
c2UucmVzcG9uc2VPYmplY3QtPmdldFN0cmluZygiZGF0YSJfcywgZGF0YSkpIHsKKworICAgICAg
ICAgICAgYXV0byBkYXRhID0gcmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdldFN0cmluZygiZGF0
YSJfcyk7CisgICAgICAgICAgICBpZiAoIWRhdGEpIHsKICAgICAgICAgICAgICAgICBjb21wbGV0
aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6
VW5rbm93bkVycm9yKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQor
CiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpzdWNjZXNzKEpT
T046OlZhbHVlOjpjcmVhdGUoZGF0YSkpKTsKICAgICAgICAgfSk7CiAgICAgfSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViRHJpdmVyL1Nlc3Npb24uaCBiL1NvdXJjZS9XZWJEcml2ZXIvU2Vzc2lv
bi5oCmluZGV4IDg0NDlhYTg5ODhiNzc5Mzc0Zjg4MmZlZDdkMmZjZGNkMzQ0NzM0ZTIuLmFkMDU2
M2JiOTE5ZjFlM2U4NzllZTcxZWYyMzliOGE3YWY1ZDQ3MTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJEcml2ZXIvU2Vzc2lvbi5oCisrKyBiL1NvdXJjZS9XZWJEcml2ZXIvU2Vzc2lvbi5oCkBAIC0x
NDMsMTAgKzE0MywxMCBAQCBwcml2YXRlOgogICAgIHZvaWQgcmVwb3J0VW5leHBlY3RlZEFsZXJ0
T3BlbihGdW5jdGlvbjx2b2lkIChDb21tYW5kUmVzdWx0JiYpPiYmKTsKIAogICAgIFJlZlB0cjxK
U09OOjpPYmplY3Q+IGNyZWF0ZUVsZW1lbnQoUmVmUHRyPEpTT046OlZhbHVlPiYmKTsKLSAgICBS
ZWZQdHI8SlNPTjo6T2JqZWN0PiBjcmVhdGVFbGVtZW50KGNvbnN0IFN0cmluZyYgZWxlbWVudElE
KTsKKyAgICBSZWY8SlNPTjo6T2JqZWN0PiBjcmVhdGVFbGVtZW50KGNvbnN0IFN0cmluZyYgZWxl
bWVudElEKTsKICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBleHRyYWN0RWxlbWVudChKU09OOjpW
YWx1ZSYpOwogICAgIFN0cmluZyBleHRyYWN0RWxlbWVudElEKEpTT046OlZhbHVlJik7Ci0gICAg
UmVmUHRyPEpTT046OlZhbHVlPiBoYW5kbGVTY3JpcHRSZXN1bHQoUmVmUHRyPEpTT046OlZhbHVl
PiYmKTsKKyAgICBSZWY8SlNPTjo6VmFsdWU+IGhhbmRsZVNjcmlwdFJlc3VsdChSZWY8SlNPTjo6
VmFsdWU+JiYpOwogICAgIHZvaWQgZWxlbWVudElzRWRpdGFibGUoY29uc3QgU3RyaW5nJiBlbGVt
ZW50SUQsIEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSZXN1bHQmJik+JiYpOwogCiAgICAgc3RydWN0
IFBvaW50IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJEcml2ZXIvU2Vzc2lvbkhvc3QuY3BwIGIv
U291cmNlL1dlYkRyaXZlci9TZXNzaW9uSG9zdC5jcHAKaW5kZXggZDE2OWI5NWM0YjZjZWU0Mjg5
ZDhjODg5ZTU1M2RmNzYzOTU1YWFiYy4uNDcyZWJkZmFmNGE2MmI2YjIwMGI0ZDFlYzdiMjFiZTU5
MTE4NWUwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkRyaXZlci9TZXNzaW9uSG9zdC5jcHAKKysr
IGIvU291cmNlL1dlYkRyaXZlci9TZXNzaW9uSG9zdC5jcHAKQEAgLTYyLDMxICs2MiwyNyBAQCBs
b25nIFNlc3Npb25Ib3N0OjpzZW5kQ29tbWFuZFRvQmFja2VuZChjb25zdCBTdHJpbmcmIGNvbW1h
bmQsIFJlZlB0cjxKU09OOjpPYmplYwogCiB2b2lkIFNlc3Npb25Ib3N0OjpkaXNwYXRjaE1lc3Nh
Z2UoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQogewotICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gbWVz
c2FnZVZhbHVlOwotICAgIGlmICghSlNPTjo6VmFsdWU6OnBhcnNlSlNPTihtZXNzYWdlLCBtZXNz
YWdlVmFsdWUpKQorICAgIGF1dG8gbWVzc2FnZVZhbHVlID0gSlNPTjo6VmFsdWU6OnBhcnNlSlNP
TihtZXNzYWdlKTsKKyAgICBpZiAoIW1lc3NhZ2VWYWx1ZSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgUmVmUHRyPEpTT046Ok9iamVjdD4gbWVzc2FnZU9iamVjdDsKLSAgICBpZiAoIW1lc3NhZ2VW
YWx1ZS0+YXNPYmplY3QobWVzc2FnZU9iamVjdCkpCisgICAgYXV0byBtZXNzYWdlT2JqZWN0ID0g
bWVzc2FnZVZhbHVlLT5hc09iamVjdCgpOworICAgIGlmICghbWVzc2FnZU9iamVjdCkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgbG9uZyBzZXF1ZW5jZUlEOwotICAgIGlmICghbWVzc2FnZU9iamVj
dC0+Z2V0SW50ZWdlcigiaWQiX3MsIHNlcXVlbmNlSUQpKQorICAgIGF1dG8gc2VxdWVuY2VJRCA9
IG1lc3NhZ2VPYmplY3QtPmdldEludGVnZXIoImlkIl9zKTsKKyAgICBpZiAoIXNlcXVlbmNlSUQp
CiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gcmVzcG9uc2VIYW5kbGVyID0gbV9jb21tYW5k
UmVxdWVzdHMudGFrZShzZXF1ZW5jZUlEKTsKKyAgICBhdXRvIHJlc3BvbnNlSGFuZGxlciA9IG1f
Y29tbWFuZFJlcXVlc3RzLnRha2UoKnNlcXVlbmNlSUQpOwogICAgIEFTU0VSVChyZXNwb25zZUhh
bmRsZXIpOwogCiAgICAgQ29tbWFuZFJlc3BvbnNlIHJlc3BvbnNlOwotICAgIFJlZlB0cjxKU09O
OjpPYmplY3Q+IGVycm9yT2JqZWN0OwotICAgIGlmIChtZXNzYWdlT2JqZWN0LT5nZXRPYmplY3Qo
ImVycm9yIl9zLCBlcnJvck9iamVjdCkpIHsKKyAgICBpZiAoYXV0byBlcnJvck9iamVjdCA9IG1l
c3NhZ2VPYmplY3QtPmdldE9iamVjdCgiZXJyb3IiX3MpKSB7CiAgICAgICAgIHJlc3BvbnNlLnJl
c3BvbnNlT2JqZWN0ID0gV1RGTW92ZShlcnJvck9iamVjdCk7CiAgICAgICAgIHJlc3BvbnNlLmlz
RXJyb3IgPSB0cnVlOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+
IHJlc3VsdE9iamVjdDsKLSAgICAgICAgaWYgKG1lc3NhZ2VPYmplY3QtPmdldE9iamVjdCgicmVz
dWx0Il9zLCByZXN1bHRPYmplY3QpICYmIHJlc3VsdE9iamVjdC0+c2l6ZSgpKQotICAgICAgICAg
ICAgcmVzcG9uc2UucmVzcG9uc2VPYmplY3QgPSBXVEZNb3ZlKHJlc3VsdE9iamVjdCk7Ci0gICAg
fQorICAgIH0gZWxzZSBpZiAoYXV0byByZXN1bHRPYmplY3QgPSBtZXNzYWdlT2JqZWN0LT5nZXRP
YmplY3QoInJlc3VsdCJfcykpCisgICAgICAgIHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0ID0gV1RG
TW92ZShyZXN1bHRPYmplY3QpOwogCiAgICAgcmVzcG9uc2VIYW5kbGVyKFdURk1vdmUocmVzcG9u
c2UpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJEcml2ZXIvV2ViRHJpdmVyU2VydmljZS5j
cHAgYi9Tb3VyY2UvV2ViRHJpdmVyL1dlYkRyaXZlclNlcnZpY2UuY3BwCmluZGV4IDliYjk3NmQ5
ZjBjNWUzYjQ4OWIyMDlmM2RiODUwZGMzMjFiNjBmNGUuLjI0NmY3NzJhZDRhNDgwZjM2YTJkMTQ0
MTc1NDMyMDU0NWMyZGY0ZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJEcml2ZXIvV2ViRHJpdmVy
U2VydmljZS5jcHAKKysrIGIvU291cmNlL1dlYkRyaXZlci9XZWJEcml2ZXJTZXJ2aWNlLmNwcApA
QCAtMjM5LDEzICsyMzksMTQgQEAgdm9pZCBXZWJEcml2ZXJTZXJ2aWNlOjpoYW5kbGVSZXF1ZXN0
KEhUVFBSZXF1ZXN0SGFuZGxlcjo6UmVxdWVzdCYmIHJlcXVlc3QsIEZ1bmMKIAogICAgIFJlZlB0
cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnNPYmplY3Q7CiAgICAgaWYgKG1ldGhvZC52YWx1ZSgp
ID09IEhUVFBNZXRob2Q6OlBvc3QpIHsKLSAgICAgICAgUmVmUHRyPEpTT046OlZhbHVlPiBtZXNz
YWdlVmFsdWU7Ci0gICAgICAgIGlmICghSlNPTjo6VmFsdWU6OnBhcnNlSlNPTihTdHJpbmc6OmZy
b21VVEY4KHJlcXVlc3QuZGF0YSwgcmVxdWVzdC5kYXRhTGVuZ3RoKSwgbWVzc2FnZVZhbHVlKSkg
eworICAgICAgICBhdXRvIG1lc3NhZ2VWYWx1ZSA9IEpTT046OlZhbHVlOjpwYXJzZUpTT04oU3Ry
aW5nOjpmcm9tVVRGOChyZXF1ZXN0LmRhdGEsIHJlcXVlc3QuZGF0YUxlbmd0aCkpOworICAgICAg
ICBpZiAoIW1lc3NhZ2VWYWx1ZSkgewogICAgICAgICAgICAgc2VuZFJlc3BvbnNlKFdURk1vdmUo
cmVwbHlIYW5kbGVyKSwgQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNv
ZGU6OkludmFsaWRBcmd1bWVudCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAK
LSAgICAgICAgaWYgKCFtZXNzYWdlVmFsdWUtPmFzT2JqZWN0KHBhcmFtZXRlcnNPYmplY3QpKSB7
CisgICAgICAgIHBhcmFtZXRlcnNPYmplY3QgPSBtZXNzYWdlVmFsdWUtPmFzT2JqZWN0KCk7Cisg
ICAgICAgIGlmICghcGFyYW1ldGVyc09iamVjdCkgewogICAgICAgICAgICAgc2VuZFJlc3BvbnNl
KFdURk1vdmUocmVwbHlIYW5kbGVyKSwgQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0
OjpFcnJvckNvZGU6OkludmFsaWRBcmd1bWVudCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9CkBAIC0yNzQsNyArMjc1LDcgQEAgdm9pZCBXZWJEcml2ZXJTZXJ2aWNlOjpzZW5kUmVz
cG9uc2UoRnVuY3Rpb248dm9pZCAoSFRUUFJlcXVlc3RIYW5kbGVyOjpSZXNwb25zZSYKICAgICAg
ICAgZXJyb3JPYmplY3QtPnNldFN0cmluZygic3RhY2t0cmFjZSJfcywgZW1wdHlTdHJpbmcoKSk7
CiAgICAgICAgIC8vIElmIHRoZSBlcnJvciBkYXRhIGRpY3Rpb25hcnkgY29udGFpbnMgYW55IGVu
dHJpZXMsIHNldCB0aGUgImRhdGEiIGZpZWxkIG9uIGJvZHkgdG8gYSBuZXcgSlNPTiBPYmplY3Qg
cG9wdWxhdGVkIHdpdGggdGhlIGRpY3Rpb25hcnkuCiAgICAgICAgIGlmIChhdXRvJiBhZGRpdGlv
bmFsRGF0YSA9IHJlc3VsdC5hZGRpdGlvbmFsRXJyb3JEYXRhKCkpCi0gICAgICAgICAgICBlcnJv
ck9iamVjdC0+c2V0T2JqZWN0KCJkYXRhIl9zLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiB7IGFkZGl0
aW9uYWxEYXRhIH0pOworICAgICAgICAgICAgZXJyb3JPYmplY3QtPnNldE9iamVjdCgiZGF0YSJf
cywgKmFkZGl0aW9uYWxEYXRhKTsKICAgICAgICAgLy8gU2VuZCBhIHJlc3BvbnNlIHdpdGggc3Rh
dHVzIGFuZCBib2R5IGFzIGFyZ3VtZW50cy4KICAgICAgICAgcmVzdWx0VmFsdWUgPSBXVEZNb3Zl
KGVycm9yT2JqZWN0KTsKICAgICB9IGVsc2UgaWYgKGF1dG8gdmFsdWUgPSByZXN1bHQucmVzdWx0
KCkpCkBAIC0yODQsMjQgKzI4NSwyNCBAQCB2b2lkIFdlYkRyaXZlclNlcnZpY2U6OnNlbmRSZXNw
b25zZShGdW5jdGlvbjx2b2lkIChIVFRQUmVxdWVzdEhhbmRsZXI6OlJlc3BvbnNlJgogCiAgICAg
Ly8gV2hlbiByZXF1aXJlZCB0byBzZW5kIGEgcmVzcG9uc2UuCiAgICAgLy8gaHR0cHM6Ly93M2Mu
Z2l0aHViLmlvL3dlYmRyaXZlci93ZWJkcml2ZXItc3BlYy5odG1sI2Rmbi1zZW5kLWEtcmVzcG9u
c2UKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiByZXNwb25zZU9iamVjdCA9IEpTT046Ok9iamVj
dDo6Y3JlYXRlKCk7Ci0gICAgcmVzcG9uc2VPYmplY3QtPnNldFZhbHVlKCJ2YWx1ZSJfcywgV1RG
TW92ZShyZXN1bHRWYWx1ZSkpOworICAgIGF1dG8gcmVzcG9uc2VPYmplY3QgPSBKU09OOjpPYmpl
Y3Q6OmNyZWF0ZSgpOworICAgIHJlc3BvbnNlT2JqZWN0LT5zZXRWYWx1ZSgidmFsdWUiX3MsIHJl
c3VsdFZhbHVlLnJlbGVhc2VOb25OdWxsKCkpOwogICAgIHJlcGx5SGFuZGxlcih7IHJlc3VsdC5o
dHRwU3RhdHVzQ29kZSgpLCByZXNwb25zZU9iamVjdC0+dG9KU09OU3RyaW5nKCkudXRmOCgpLCAi
YXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOCJfcyB9KTsKIH0KIAogc3RhdGljIE9wdGlv
bmFsPGRvdWJsZT4gdmFsdWVBc051bWJlckluUmFuZ2UoY29uc3QgSlNPTjo6VmFsdWUmIHZhbHVl
LCBkb3VibGUgbWluQWxsb3dlZCA9IDAsIGRvdWJsZSBtYXhBbGxvd2VkID0gc3RkOjpudW1lcmlj
X2xpbWl0czxpbnQ+OjptYXgoKSkKIHsKLSAgICBkb3VibGUgbnVtYmVyOwotICAgIGlmICghdmFs
dWUuYXNEb3VibGUobnVtYmVyKSkKKyAgICBhdXRvIG51bWJlciA9IHZhbHVlLmFzRG91YmxlKCk7
CisgICAgaWYgKCFudW1iZXIpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBp
ZiAoc3RkOjppc25hbihudW1iZXIpIHx8IHN0ZDo6aXNpbmYobnVtYmVyKSkKKyAgICBpZiAoc3Rk
Ojppc25hbigqbnVtYmVyKSB8fCBzdGQ6OmlzaW5mKCpudW1iZXIpKQogICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwogCi0gICAgaWYgKG51bWJlciA8IG1pbkFsbG93ZWQgfHwgbnVtYmVyID4g
bWF4QWxsb3dlZCkKKyAgICBpZiAoKm51bWJlciA8IG1pbkFsbG93ZWQgfHwgKm51bWJlciA+IG1h
eEFsbG93ZWQpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICByZXR1cm4gbnVt
YmVyOworICAgIHJldHVybiAqbnVtYmVyOwogfQogCiBzdGF0aWMgT3B0aW9uYWw8dWludDY0X3Q+
IHVuc2lnbmVkVmFsdWUoSlNPTjo6VmFsdWUmIHZhbHVlKQpAQCAtMzM4LDcgKzMzOSw3IEBAIHN0
YXRpYyBPcHRpb25hbDxUaW1lb3V0cz4gZGVzZXJpYWxpemVUaW1lb3V0cyhKU09OOjpPYmplY3Qm
IHRpbWVvdXRzT2JqZWN0LCBJZ25vCiAgICAgICAgIH0KIAogICAgICAgICAvLyBJZiB2YWx1ZSBp
cyBub3QgYW4gaW50ZWdlciwgb3IgaXQgaXMgbGVzcyB0aGFuIDAgb3IgZ3JlYXRlciB0aGFuIHRo
ZSBtYXhpbXVtIHNhZmUgaW50ZWdlciwgcmV0dXJuIGVycm9yIHdpdGggZXJyb3IgY29kZSBpbnZh
bGlkIGFyZ3VtZW50LgotICAgICAgICBhdXRvIHRpbWVvdXRNUyA9IHVuc2lnbmVkVmFsdWUoKml0
LT52YWx1ZSk7CisgICAgICAgIGF1dG8gdGltZW91dE1TID0gdW5zaWduZWRWYWx1ZShpdC0+dmFs
dWUpOwogICAgICAgICBpZiAoIXRpbWVvdXRNUykKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CiAKQEAgLTM1OSw2MSArMzYwLDYxIEBAIHN0YXRpYyBPcHRpb25hbDxQcm94eT4gZGVz
ZXJpYWxpemVQcm94eShKU09OOjpPYmplY3QmIHByb3h5T2JqZWN0KQogICAgIC8vIMKnNy4xIFBy
b3h5LgogICAgIC8vIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJkcml2ZXIvI3Byb3h5CiAgICAg
UHJveHkgcHJveHk7Ci0gICAgaWYgKCFwcm94eU9iamVjdC5nZXRTdHJpbmcoInByb3h5VHlwZSJf
cywgcHJveHkudHlwZSkpCisKKyAgICBwcm94eS50eXBlID0gcHJveHlPYmplY3QuZ2V0U3RyaW5n
KCJwcm94eVR5cGUiX3MpOworICAgIGlmICghcHJveHkudHlwZSkKICAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKIAogICAgIGlmIChwcm94eS50eXBlID09ICJkaXJlY3QiIHx8IHByb3h5LnR5
cGUgPT0gImF1dG9kZXRlY3QiIHx8IHByb3h5LnR5cGUgPT0gInN5c3RlbSIpCiAgICAgICAgIHJl
dHVybiBwcm94eTsKIAogICAgIGlmIChwcm94eS50eXBlID09ICJwYWMiKSB7Ci0gICAgICAgIFN0
cmluZyBhdXRvY29uZmlnVVJMOwotICAgICAgICBpZiAoIXByb3h5T2JqZWN0LmdldFN0cmluZygi
cHJveHlBdXRvY29uZmlnVXJsIl9zLCBhdXRvY29uZmlnVVJMKSkKKyAgICAgICAgcHJveHkuYXV0
b2NvbmZpZ1VSTCA9IHByb3h5T2JqZWN0LmdldFN0cmluZygicHJveHlBdXRvY29uZmlnVXJsIl9z
KTsKKyAgICAgICAgaWYgKCFwcm94eS5hdXRvY29uZmlnVVJMKQogICAgICAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKIAotICAgICAgICBwcm94eS5hdXRvY29uZmlnVVJMID0gYXV0b2NvbmZp
Z1VSTDsKICAgICAgICAgcmV0dXJuIHByb3h5OwogICAgIH0KIAogICAgIGlmIChwcm94eS50eXBl
ID09ICJtYW51YWwiKSB7Ci0gICAgICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gdmFsdWU7Ci0gICAg
ICAgIGlmIChwcm94eU9iamVjdC5nZXRWYWx1ZSgiZnRwUHJveHkiX3MsIHZhbHVlKSkgewotICAg
ICAgICAgICAgU3RyaW5nIGZ0cFByb3h5OwotICAgICAgICAgICAgaWYgKCF2YWx1ZS0+YXNTdHJp
bmcoZnRwUHJveHkpKQorICAgICAgICBpZiAoYXV0byB2YWx1ZSA9IHByb3h5T2JqZWN0LmdldFZh
bHVlKCJmdHBQcm94eSJfcykpIHsKKyAgICAgICAgICAgIGF1dG8gZnRwUHJveHkgPSB2YWx1ZS0+
YXNTdHJpbmcoKTsKKyAgICAgICAgICAgIGlmICghZnRwUHJveHkpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgICAgICAgICAgcHJveHkuZnRwVVJMID0gVVJMKHsg
fSwgbWFrZVN0cmluZygiZnRwOi8vIiwgZnRwUHJveHkpKTsKICAgICAgICAgICAgIGlmICghcHJv
eHkuZnRwVVJMLT5pc1ZhbGlkKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKICAgICAgICAgfQotICAgICAgICBpZiAocHJveHlPYmplY3QuZ2V0VmFsdWUoImh0dHBQcm94
eSJfcywgdmFsdWUpKSB7Ci0gICAgICAgICAgICBTdHJpbmcgaHR0cFByb3h5OwotICAgICAgICAg
ICAgaWYgKCF2YWx1ZS0+YXNTdHJpbmcoaHR0cFByb3h5KSkKKyAgICAgICAgaWYgKGF1dG8gdmFs
dWUgPSBwcm94eU9iamVjdC5nZXRWYWx1ZSgiaHR0cFByb3h5Il9zKSkgeworICAgICAgICAgICAg
YXV0byBodHRwUHJveHkgPSB2YWx1ZS0+YXNTdHJpbmcoKTsKKyAgICAgICAgICAgIGlmICghaHR0
cFByb3h5KQogICAgICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICAgICAg
ICAgIHByb3h5Lmh0dHBVUkwgPSBVUkwoeyB9LCBtYWtlU3RyaW5nKCJodHRwOi8vIiwgaHR0cFBy
b3h5KSk7CiAgICAgICAgICAgICBpZiAoIXByb3h5Lmh0dHBVUkwtPmlzVmFsaWQoKSkKICAgICAg
ICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAgICB9Ci0gICAgICAgIGlmIChw
cm94eU9iamVjdC5nZXRWYWx1ZSgic3NsUHJveHkiX3MsIHZhbHVlKSkgewotICAgICAgICAgICAg
U3RyaW5nIHNzbFByb3h5OwotICAgICAgICAgICAgaWYgKCF2YWx1ZS0+YXNTdHJpbmcoc3NsUHJv
eHkpKQorICAgICAgICBpZiAoYXV0byB2YWx1ZSA9IHByb3h5T2JqZWN0LmdldFZhbHVlKCJzc2xQ
cm94eSJfcykpIHsKKyAgICAgICAgICAgIGF1dG8gc3NsUHJveHkgPSB2YWx1ZS0+YXNTdHJpbmco
KTsKKyAgICAgICAgICAgIGlmICghc3NsUHJveHkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKIAogICAgICAgICAgICAgcHJveHkuaHR0cHNVUkwgPSBVUkwoeyB9LCBtYWtl
U3RyaW5nKCJodHRwczovLyIsIHNzbFByb3h5KSk7CiAgICAgICAgICAgICBpZiAoIXByb3h5Lmh0
dHBzVVJMLT5pc1ZhbGlkKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
ICAgICAgICAgfQotICAgICAgICBpZiAocHJveHlPYmplY3QuZ2V0VmFsdWUoInNvY2tzUHJveHki
LCB2YWx1ZSkpIHsKLSAgICAgICAgICAgIFN0cmluZyBzb2Nrc1Byb3h5OwotICAgICAgICAgICAg
aWYgKCF2YWx1ZS0+YXNTdHJpbmcoc29ja3NQcm94eSkpCisgICAgICAgIGlmIChhdXRvIHZhbHVl
ID0gcHJveHlPYmplY3QuZ2V0VmFsdWUoInNvY2tzUHJveHkiKSkgeworICAgICAgICAgICAgYXV0
byBzb2Nrc1Byb3h5ID0gdmFsdWUtPmFzU3RyaW5nKCk7CisgICAgICAgICAgICBpZiAoIXNvY2tz
UHJveHkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgICAgICAg
ICAgcHJveHkuc29ja3NVUkwgPSBVUkwoeyB9LCBtYWtlU3RyaW5nKCJzb2NrczovLyIsIHNvY2tz
UHJveHkpKTsKICAgICAgICAgICAgIGlmICghcHJveHkuc29ja3NVUkwtPmlzVmFsaWQoKSkKICAg
ICAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgICAgICAgICBSZWZQdHI8
SlNPTjo6VmFsdWU+IHNvY2tzVmVyc2lvblZhbHVlOwotICAgICAgICAgICAgaWYgKCFwcm94eU9i
amVjdC5nZXRWYWx1ZSgic29ja3NWZXJzaW9uIiwgc29ja3NWZXJzaW9uVmFsdWUpKQorICAgICAg
ICAgICAgYXV0byBzb2Nrc1ZlcnNpb25WYWx1ZSA9IHByb3h5T2JqZWN0LmdldFZhbHVlKCJzb2Nr
c1ZlcnNpb24iKTsKKyAgICAgICAgICAgIGlmICghc29ja3NWZXJzaW9uVmFsdWUpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgICAgICAgICAgYXV0byBzb2Nrc1Zl
cnNpb24gPSB1bnNpZ25lZFZhbHVlKCpzb2Nrc1ZlcnNpb25WYWx1ZSk7CkBAIC00MjEsMTggKzQy
MiwxNyBAQCBzdGF0aWMgT3B0aW9uYWw8UHJveHk+IGRlc2VyaWFsaXplUHJveHkoSlNPTjo6T2Jq
ZWN0JiBwcm94eU9iamVjdCkKICAgICAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owog
ICAgICAgICAgICAgcHJveHkuc29ja3NWZXJzaW9uID0gc29ja3NWZXJzaW9uLnZhbHVlKCk7CiAg
ICAgICAgIH0KLSAgICAgICAgaWYgKHByb3h5T2JqZWN0LmdldFZhbHVlKCJub1Byb3h5Il9zLCB2
YWx1ZSkpIHsKLSAgICAgICAgICAgIFJlZlB0cjxKU09OOjpBcnJheT4gbm9Qcm94eTsKLSAgICAg
ICAgICAgIGlmICghdmFsdWUtPmFzQXJyYXkobm9Qcm94eSkpCisgICAgICAgIGlmIChhdXRvIHZh
bHVlID0gcHJveHlPYmplY3QuZ2V0VmFsdWUoIm5vUHJveHkiX3MpKSB7CisgICAgICAgICAgICBh
dXRvIG5vUHJveHkgPSB2YWx1ZS0+YXNBcnJheSgpOworICAgICAgICAgICAgaWYgKCFub1Byb3h5
KQogICAgICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICAgICAgICAgIGF1
dG8gbm9Qcm94eUxlbmd0aCA9IG5vUHJveHktPmxlbmd0aCgpOwogICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG5vUHJveHlMZW5ndGg7ICsraSkgewotICAgICAgICAgICAgICAg
IFJlZlB0cjxKU09OOjpWYWx1ZT4gYWRkcmVzc1ZhbHVlID0gbm9Qcm94eS0+Z2V0KGkpOwotICAg
ICAgICAgICAgICAgIFN0cmluZyBhZGRyZXNzOwotICAgICAgICAgICAgICAgIGlmICghYWRkcmVz
c1ZhbHVlLT5hc1N0cmluZyhhZGRyZXNzKSkKKyAgICAgICAgICAgICAgICBhdXRvIGFkZHJlc3Mg
PSBub1Byb3h5LT5nZXQoaSktPmFzU3RyaW5nKCk7CisgICAgICAgICAgICAgICAgaWYgKCFhZGRy
ZXNzKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgICAgICAg
ICAgICAgIHByb3h5Lmlnbm9yZUFkZHJlc3NMaXN0LmFwcGVuZChXVEZNb3ZlKGFkZHJlc3MpKTsK
KyAgICAgICAgICAgICAgICBwcm94eS5pZ25vcmVBZGRyZXNzTGlzdC5hcHBlbmQoYWRkcmVzcyk7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIApAQCAtNDcxLDQzICs0NzEsNTMgQEAgc3RhdGlj
IE9wdGlvbmFsPFVuaGFuZGxlZFByb21wdEJlaGF2aW9yPiBkZXNlcmlhbGl6ZVVuaGFuZGxlZFBy
b21wdEJlaGF2aW9yKGNvbnMKIHZvaWQgV2ViRHJpdmVyU2VydmljZTo6cGFyc2VDYXBhYmlsaXRp
ZXMoY29uc3QgSlNPTjo6T2JqZWN0JiBtYXRjaGVkQ2FwYWJpbGl0aWVzLCBDYXBhYmlsaXRpZXMm
IGNhcGFiaWxpdGllcykgY29uc3QKIHsKICAgICAvLyBNYXRjaGVkIGNhcGFiaWxpdGllcyBoYXZl
IGFscmVhZHkgYmVlbiB2YWxpZGF0ZWQuCi0gICAgYm9vbCBhY2NlcHRJbnNlY3VyZUNlcnRzOwot
ICAgIGlmIChtYXRjaGVkQ2FwYWJpbGl0aWVzLmdldEJvb2xlYW4oImFjY2VwdEluc2VjdXJlQ2Vy
dHMiX3MsIGFjY2VwdEluc2VjdXJlQ2VydHMpKQotICAgICAgICBjYXBhYmlsaXRpZXMuYWNjZXB0
SW5zZWN1cmVDZXJ0cyA9IGFjY2VwdEluc2VjdXJlQ2VydHM7Ci0gICAgYm9vbCBzZXRXaW5kb3dS
ZWN0OwotICAgIGlmIChtYXRjaGVkQ2FwYWJpbGl0aWVzLmdldEJvb2xlYW4oInNldFdpbmRvd1Jl
Y3QiX3MsIHNldFdpbmRvd1JlY3QpKQotICAgICAgICBjYXBhYmlsaXRpZXMuc2V0V2luZG93UmVj
dCA9IHNldFdpbmRvd1JlY3Q7Ci0gICAgU3RyaW5nIGJyb3dzZXJOYW1lOwotICAgIGlmIChtYXRj
aGVkQ2FwYWJpbGl0aWVzLmdldFN0cmluZygiYnJvd3Nlck5hbWUiX3MsIGJyb3dzZXJOYW1lKSkK
KyAgICBhdXRvIGFjY2VwdEluc2VjdXJlQ2VydHMgPSBtYXRjaGVkQ2FwYWJpbGl0aWVzLmdldEJv
b2xlYW4oImFjY2VwdEluc2VjdXJlQ2VydHMiX3MpOworICAgIGlmIChhY2NlcHRJbnNlY3VyZUNl
cnRzKQorICAgICAgICBjYXBhYmlsaXRpZXMuYWNjZXB0SW5zZWN1cmVDZXJ0cyA9ICphY2NlcHRJ
bnNlY3VyZUNlcnRzOworCisgICAgYXV0byBzZXRXaW5kb3dSZWN0ID0gbWF0Y2hlZENhcGFiaWxp
dGllcy5nZXRCb29sZWFuKCJzZXRXaW5kb3dSZWN0Il9zKTsKKyAgICBpZiAoc2V0V2luZG93UmVj
dCkKKyAgICAgICAgY2FwYWJpbGl0aWVzLnNldFdpbmRvd1JlY3QgPSAqc2V0V2luZG93UmVjdDsK
KworICAgIGF1dG8gYnJvd3Nlck5hbWUgPSBtYXRjaGVkQ2FwYWJpbGl0aWVzLmdldFN0cmluZygi
YnJvd3Nlck5hbWUiX3MpOworICAgIGlmICghIWJyb3dzZXJOYW1lKQogICAgICAgICBjYXBhYmls
aXRpZXMuYnJvd3Nlck5hbWUgPSBicm93c2VyTmFtZTsKLSAgICBTdHJpbmcgYnJvd3NlclZlcnNp
b247Ci0gICAgaWYgKG1hdGNoZWRDYXBhYmlsaXRpZXMuZ2V0U3RyaW5nKCJicm93c2VyVmVyc2lv
biJfcywgYnJvd3NlclZlcnNpb24pKQorCisgICAgYXV0byBicm93c2VyVmVyc2lvbiA9IG1hdGNo
ZWRDYXBhYmlsaXRpZXMuZ2V0U3RyaW5nKCJicm93c2VyVmVyc2lvbiJfcyk7CisgICAgaWYgKCEh
YnJvd3NlclZlcnNpb24pCiAgICAgICAgIGNhcGFiaWxpdGllcy5icm93c2VyVmVyc2lvbiA9IGJy
b3dzZXJWZXJzaW9uOwotICAgIFN0cmluZyBwbGF0Zm9ybU5hbWU7Ci0gICAgaWYgKG1hdGNoZWRD
YXBhYmlsaXRpZXMuZ2V0U3RyaW5nKCJwbGF0Zm9ybU5hbWUiX3MsIHBsYXRmb3JtTmFtZSkpCisK
KyAgICBhdXRvIHBsYXRmb3JtTmFtZSA9IG1hdGNoZWRDYXBhYmlsaXRpZXMuZ2V0U3RyaW5nKCJw
bGF0Zm9ybU5hbWUiX3MpOworICAgIGlmICghIXBsYXRmb3JtTmFtZSkKICAgICAgICAgY2FwYWJp
bGl0aWVzLnBsYXRmb3JtTmFtZSA9IHBsYXRmb3JtTmFtZTsKLSAgICBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiBwcm94eTsKLSAgICBpZiAobWF0Y2hlZENhcGFiaWxpdGllcy5nZXRPYmplY3QoInByb3h5
Il9zLCBwcm94eSkpCisKKyAgICBhdXRvIHByb3h5ID0gbWF0Y2hlZENhcGFiaWxpdGllcy5nZXRP
YmplY3QoInByb3h5Il9zKTsKKyAgICBpZiAocHJveHkpCiAgICAgICAgIGNhcGFiaWxpdGllcy5w
cm94eSA9IGRlc2VyaWFsaXplUHJveHkoKnByb3h5KTsKLSAgICBib29sIHN0cmljdEZpbGVJbnRl
cmFjdGFiaWxpdHk7Ci0gICAgaWYgKG1hdGNoZWRDYXBhYmlsaXRpZXMuZ2V0Qm9vbGVhbigic3Ry
aWN0RmlsZUludGVyYWN0YWJpbGl0eSJfcywgc3RyaWN0RmlsZUludGVyYWN0YWJpbGl0eSkpCi0g
ICAgICAgIGNhcGFiaWxpdGllcy5zdHJpY3RGaWxlSW50ZXJhY3RhYmlsaXR5ID0gc3RyaWN0Rmls
ZUludGVyYWN0YWJpbGl0eTsKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiB0aW1lb3V0czsKLSAg
ICBpZiAobWF0Y2hlZENhcGFiaWxpdGllcy5nZXRPYmplY3QoInRpbWVvdXRzIl9zLCB0aW1lb3V0
cykpCisKKyAgICBhdXRvIHN0cmljdEZpbGVJbnRlcmFjdGFiaWxpdHkgPSBtYXRjaGVkQ2FwYWJp
bGl0aWVzLmdldEJvb2xlYW4oInN0cmljdEZpbGVJbnRlcmFjdGFiaWxpdHkiX3MpOworICAgIGlm
IChzdHJpY3RGaWxlSW50ZXJhY3RhYmlsaXR5KQorICAgICAgICBjYXBhYmlsaXRpZXMuc3RyaWN0
RmlsZUludGVyYWN0YWJpbGl0eSA9ICpzdHJpY3RGaWxlSW50ZXJhY3RhYmlsaXR5OworCisgICAg
YXV0byB0aW1lb3V0cyA9IG1hdGNoZWRDYXBhYmlsaXRpZXMuZ2V0T2JqZWN0KCJ0aW1lb3V0cyJf
cyk7CisgICAgaWYgKHRpbWVvdXRzKQogICAgICAgICBjYXBhYmlsaXRpZXMudGltZW91dHMgPSBk
ZXNlcmlhbGl6ZVRpbWVvdXRzKCp0aW1lb3V0cywgSWdub3JlVW5rbm93blRpbWVvdXQ6Ok5vKTsK
LSAgICBTdHJpbmcgcGFnZUxvYWRTdHJhdGVneTsKLSAgICBpZiAobWF0Y2hlZENhcGFiaWxpdGll
cy5nZXRTdHJpbmcoInBhZ2VMb2FkU3RyYXRlZ3kiX3MsIHBhZ2VMb2FkU3RyYXRlZ3kpKQorCisg
ICAgYXV0byBwYWdlTG9hZFN0cmF0ZWd5ID0gbWF0Y2hlZENhcGFiaWxpdGllcy5nZXRTdHJpbmco
InBhZ2VMb2FkU3RyYXRlZ3kiX3MpOworICAgIGlmICghIXBhZ2VMb2FkU3RyYXRlZ3kpCiAgICAg
ICAgIGNhcGFiaWxpdGllcy5wYWdlTG9hZFN0cmF0ZWd5ID0gZGVzZXJpYWxpemVQYWdlTG9hZFN0
cmF0ZWd5KHBhZ2VMb2FkU3RyYXRlZ3kpOwotICAgIFN0cmluZyB1bmhhbmRsZWRQcm9tcHRCZWhh
dmlvcjsKLSAgICBpZiAobWF0Y2hlZENhcGFiaWxpdGllcy5nZXRTdHJpbmcoInVuaGFuZGxlZFBy
b21wdEJlaGF2aW9yIl9zLCB1bmhhbmRsZWRQcm9tcHRCZWhhdmlvcikpCisKKyAgICBhdXRvIHVu
aGFuZGxlZFByb21wdEJlaGF2aW9yID0gbWF0Y2hlZENhcGFiaWxpdGllcy5nZXRTdHJpbmcoInVu
aGFuZGxlZFByb21wdEJlaGF2aW9yIl9zKTsKKyAgICBpZiAoISF1bmhhbmRsZWRQcm9tcHRCZWhh
dmlvcikKICAgICAgICAgY2FwYWJpbGl0aWVzLnVuaGFuZGxlZFByb21wdEJlaGF2aW9yID0gZGVz
ZXJpYWxpemVVbmhhbmRsZWRQcm9tcHRCZWhhdmlvcih1bmhhbmRsZWRQcm9tcHRCZWhhdmlvcik7
CisKICAgICBwbGF0Zm9ybVBhcnNlQ2FwYWJpbGl0aWVzKG1hdGNoZWRDYXBhYmlsaXRpZXMsIGNh
cGFiaWxpdGllcyk7CiB9CiAKIGJvb2wgV2ViRHJpdmVyU2VydmljZTo6ZmluZFNlc3Npb25PckNv
bXBsZXRlV2l0aEVycm9yKEpTT046Ok9iamVjdCYgcGFyYW1ldGVycywgRnVuY3Rpb248dm9pZCAo
Q29tbWFuZFJlc3VsdCYmKT4mIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIFN0cmluZyBzZXNz
aW9uSUQ7Ci0gICAgaWYgKCFwYXJhbWV0ZXJzLmdldFN0cmluZygic2Vzc2lvbklkIl9zLCBzZXNz
aW9uSUQpKSB7CisgICAgYXV0byBzZXNzaW9uSUQgPSBwYXJhbWV0ZXJzLmdldFN0cmluZygic2Vz
c2lvbklkIl9zKTsKKyAgICBpZiAoIXNlc3Npb25JRCkgewogICAgICAgICBjb21wbGV0aW9uSGFu
ZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6SW52YWxp
ZEFyZ3VtZW50KSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CkBAIC01MzAsNTAgKzU0
MCw1MCBAQCBSZWZQdHI8SlNPTjo6T2JqZWN0PiBXZWJEcml2ZXJTZXJ2aWNlOjp2YWxpZGF0ZWRD
YXBhYmlsaXRpZXMoY29uc3QgSlNPTjo6T2JqZWN0JgogewogICAgIC8vIMKnNy4yIFByb2Nlc3Np
bmcgQ2FwYWJpbGl0aWVzLgogICAgIC8vIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJkcml2ZXIv
d2ViZHJpdmVyLXNwZWMuaHRtbCNkZm4tdmFsaWRhdGUtY2FwYWJpbGl0aWVzCi0gICAgUmVmUHRy
PEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBhdXRv
IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgYXV0byBlbmQgPSBjYXBhYmls
aXRpZXMuZW5kKCk7CiAgICAgZm9yIChhdXRvIGl0ID0gY2FwYWJpbGl0aWVzLmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkgewogICAgICAgICBpZiAoaXQtPnZhbHVlLT5pc051bGwoKSkKICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICBpZiAoaXQtPmtleSA9PSAiYWNjZXB0SW5zZWN1cmVD
ZXJ0cyIpIHsKLSAgICAgICAgICAgIGJvb2wgYWNjZXB0SW5zZWN1cmVDZXJ0czsKLSAgICAgICAg
ICAgIGlmICghaXQtPnZhbHVlLT5hc0Jvb2xlYW4oYWNjZXB0SW5zZWN1cmVDZXJ0cykpCisgICAg
ICAgICAgICBhdXRvIGFjY2VwdEluc2VjdXJlQ2VydHMgPSBpdC0+dmFsdWUtPmFzQm9vbGVhbigp
OworICAgICAgICAgICAgaWYgKCFhY2NlcHRJbnNlY3VyZUNlcnRzKQogICAgICAgICAgICAgICAg
IHJldHVybiBudWxscHRyOwotICAgICAgICAgICAgcmVzdWx0LT5zZXRCb29sZWFuKGl0LT5rZXks
IGFjY2VwdEluc2VjdXJlQ2VydHMpOworICAgICAgICAgICAgcmVzdWx0LT5zZXRCb29sZWFuKGl0
LT5rZXksICphY2NlcHRJbnNlY3VyZUNlcnRzKTsKICAgICAgICAgfSBlbHNlIGlmIChpdC0+a2V5
ID09ICJicm93c2VyTmFtZSIgfHwgaXQtPmtleSA9PSAiYnJvd3NlclZlcnNpb24iIHx8IGl0LT5r
ZXkgPT0gInBsYXRmb3JtTmFtZSIpIHsKLSAgICAgICAgICAgIFN0cmluZyBzdHJpbmdWYWx1ZTsK
LSAgICAgICAgICAgIGlmICghaXQtPnZhbHVlLT5hc1N0cmluZyhzdHJpbmdWYWx1ZSkpCisgICAg
ICAgICAgICBhdXRvIHN0cmluZ1ZhbHVlID0gaXQtPnZhbHVlLT5hc1N0cmluZygpOworICAgICAg
ICAgICAgaWYgKCFzdHJpbmdWYWx1ZSkKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
ICAgICAgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKGl0LT5rZXksIHN0cmluZ1ZhbHVlKTsKICAg
ICAgICAgfSBlbHNlIGlmIChpdC0+a2V5ID09ICJwYWdlTG9hZFN0cmF0ZWd5IikgewotICAgICAg
ICAgICAgU3RyaW5nIHBhZ2VMb2FkU3RyYXRlZ3k7Ci0gICAgICAgICAgICBpZiAoIWl0LT52YWx1
ZS0+YXNTdHJpbmcocGFnZUxvYWRTdHJhdGVneSkgfHwgIWRlc2VyaWFsaXplUGFnZUxvYWRTdHJh
dGVneShwYWdlTG9hZFN0cmF0ZWd5KSkKKyAgICAgICAgICAgIGF1dG8gcGFnZUxvYWRTdHJhdGVn
eSA9IGl0LT52YWx1ZS0+YXNTdHJpbmcoKTsKKyAgICAgICAgICAgIGlmICghcGFnZUxvYWRTdHJh
dGVneSB8fCAhZGVzZXJpYWxpemVQYWdlTG9hZFN0cmF0ZWd5KHBhZ2VMb2FkU3RyYXRlZ3kpKQog
ICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICAgICAgcmVzdWx0LT5zZXRT
dHJpbmcoaXQtPmtleSwgcGFnZUxvYWRTdHJhdGVneSk7CiAgICAgICAgIH0gZWxzZSBpZiAoaXQt
PmtleSA9PSAicHJveHkiKSB7Ci0gICAgICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwcm94
eTsKLSAgICAgICAgICAgIGlmICghaXQtPnZhbHVlLT5hc09iamVjdChwcm94eSkgfHwgIWRlc2Vy
aWFsaXplUHJveHkoKnByb3h5KSkKKyAgICAgICAgICAgIGF1dG8gcHJveHkgPSBpdC0+dmFsdWUt
PmFzT2JqZWN0KCk7CisgICAgICAgICAgICBpZiAoIXByb3h5IHx8ICFkZXNlcmlhbGl6ZVByb3h5
KCpwcm94eSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgICAgICBy
ZXN1bHQtPnNldFZhbHVlKGl0LT5rZXksIFJlZlB0cjxKU09OOjpWYWx1ZT4oaXQtPnZhbHVlKSk7
CisgICAgICAgICAgICByZXN1bHQtPnNldFZhbHVlKGl0LT5rZXksICpwcm94eSk7CiAgICAgICAg
IH0gZWxzZSBpZiAoaXQtPmtleSA9PSAic3RyaWN0RmlsZUludGVyYWN0YWJpbGl0eSIpIHsKLSAg
ICAgICAgICAgIGJvb2wgc3RyaWN0RmlsZUludGVyYWN0YWJpbGl0eTsKLSAgICAgICAgICAgIGlm
ICghaXQtPnZhbHVlLT5hc0Jvb2xlYW4oc3RyaWN0RmlsZUludGVyYWN0YWJpbGl0eSkpCisgICAg
ICAgICAgICBhdXRvIHN0cmljdEZpbGVJbnRlcmFjdGFiaWxpdHkgPSBpdC0+dmFsdWUtPmFzQm9v
bGVhbigpOworICAgICAgICAgICAgaWYgKCFzdHJpY3RGaWxlSW50ZXJhY3RhYmlsaXR5KQogICAg
ICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICAgICAgcmVzdWx0LT5zZXRCb29s
ZWFuKGl0LT5rZXksIHN0cmljdEZpbGVJbnRlcmFjdGFiaWxpdHkpOworICAgICAgICAgICAgcmVz
dWx0LT5zZXRCb29sZWFuKGl0LT5rZXksICpzdHJpY3RGaWxlSW50ZXJhY3RhYmlsaXR5KTsKICAg
ICAgICAgfSBlbHNlIGlmIChpdC0+a2V5ID09ICJ0aW1lb3V0cyIpIHsKLSAgICAgICAgICAgIFJl
ZlB0cjxKU09OOjpPYmplY3Q+IHRpbWVvdXRzOwotICAgICAgICAgICAgaWYgKCFpdC0+dmFsdWUt
PmFzT2JqZWN0KHRpbWVvdXRzKSB8fCAhZGVzZXJpYWxpemVUaW1lb3V0cygqdGltZW91dHMsIEln
bm9yZVVua25vd25UaW1lb3V0OjpObykpCisgICAgICAgICAgICBhdXRvIHRpbWVvdXRzID0gaXQt
PnZhbHVlLT5hc09iamVjdCgpOworICAgICAgICAgICAgaWYgKCF0aW1lb3V0cyB8fCAhZGVzZXJp
YWxpemVUaW1lb3V0cygqdGltZW91dHMsIElnbm9yZVVua25vd25UaW1lb3V0OjpObykpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgICAgICByZXN1bHQtPnNldFZhbHVl
KGl0LT5rZXksIFJlZlB0cjxKU09OOjpWYWx1ZT4oaXQtPnZhbHVlKSk7CisgICAgICAgICAgICBy
ZXN1bHQtPnNldFZhbHVlKGl0LT5rZXksICp0aW1lb3V0cyk7CiAgICAgICAgIH0gZWxzZSBpZiAo
aXQtPmtleSA9PSAidW5oYW5kbGVkUHJvbXB0QmVoYXZpb3IiKSB7Ci0gICAgICAgICAgICBTdHJp
bmcgdW5oYW5kbGVkUHJvbXB0QmVoYXZpb3I7Ci0gICAgICAgICAgICBpZiAoIWl0LT52YWx1ZS0+
YXNTdHJpbmcodW5oYW5kbGVkUHJvbXB0QmVoYXZpb3IpIHx8ICFkZXNlcmlhbGl6ZVVuaGFuZGxl
ZFByb21wdEJlaGF2aW9yKHVuaGFuZGxlZFByb21wdEJlaGF2aW9yKSkKKyAgICAgICAgICAgIGF1
dG8gdW5oYW5kbGVkUHJvbXB0QmVoYXZpb3IgPSBpdC0+dmFsdWUtPmFzU3RyaW5nKCk7CisgICAg
ICAgICAgICBpZiAoIXVuaGFuZGxlZFByb21wdEJlaGF2aW9yIHx8ICFkZXNlcmlhbGl6ZVVuaGFu
ZGxlZFByb21wdEJlaGF2aW9yKHVuaGFuZGxlZFByb21wdEJlaGF2aW9yKSkKICAgICAgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKGl0LT5r
ZXksIHVuaGFuZGxlZFByb21wdEJlaGF2aW9yKTsKICAgICAgICAgfSBlbHNlIGlmIChpdC0+a2V5
LmZpbmQoIjoiKSAhPSBub3RGb3VuZCkgewogICAgICAgICAgICAgaWYgKCFwbGF0Zm9ybVZhbGlk
YXRlQ2FwYWJpbGl0eShpdC0+a2V5LCBpdC0+dmFsdWUpKQogICAgICAgICAgICAgICAgIHJldHVy
biBudWxscHRyOwotICAgICAgICAgICAgcmVzdWx0LT5zZXRWYWx1ZShpdC0+a2V5LCBSZWZQdHI8
SlNPTjo6VmFsdWU+KGl0LT52YWx1ZSkpOworICAgICAgICAgICAgcmVzdWx0LT5zZXRWYWx1ZShp
dC0+a2V5LCBpdC0+dmFsdWUuY29weVJlZigpKTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKICAgICB9CkBAIC01ODQsMTQgKzU5NCwxNCBAQCBSZWZQdHI8SlNP
Tjo6T2JqZWN0PiBXZWJEcml2ZXJTZXJ2aWNlOjptZXJnZUNhcGFiaWxpdGllcyhjb25zdCBKU09O
OjpPYmplY3QmIHJlcQogewogICAgIC8vIMKnNy4yIFByb2Nlc3NpbmcgQ2FwYWJpbGl0aWVzLgog
ICAgIC8vIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJkcml2ZXIvd2ViZHJpdmVyLXNwZWMuaHRt
bCNkZm4tbWVyZ2luZy1jYXBhYmlsaXRpZXMKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiByZXN1
bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGF1dG8gcmVzdWx0ID0gSlNPTjo6T2Jq
ZWN0OjpjcmVhdGUoKTsKICAgICBhdXRvIHJlcXVpcmVkRW5kID0gcmVxdWlyZWRDYXBhYmlsaXRp
ZXMuZW5kKCk7CiAgICAgZm9yIChhdXRvIGl0ID0gcmVxdWlyZWRDYXBhYmlsaXRpZXMuYmVnaW4o
KTsgaXQgIT0gcmVxdWlyZWRFbmQ7ICsraXQpCi0gICAgICAgIHJlc3VsdC0+c2V0VmFsdWUoaXQt
PmtleSwgUmVmUHRyPEpTT046OlZhbHVlPihpdC0+dmFsdWUpKTsKKyAgICAgICAgcmVzdWx0LT5z
ZXRWYWx1ZShpdC0+a2V5LCBpdC0+dmFsdWUuY29weVJlZigpKTsKIAogICAgIGF1dG8gZmlyc3RN
YXRjaEVuZCA9IGZpcnN0TWF0Y2hDYXBhYmlsaXRpZXMuZW5kKCk7CiAgICAgZm9yIChhdXRvIGl0
ID0gZmlyc3RNYXRjaENhcGFiaWxpdGllcy5iZWdpbigpOyBpdCAhPSBmaXJzdE1hdGNoRW5kOyAr
K2l0KQotICAgICAgICByZXN1bHQtPnNldFZhbHVlKGl0LT5rZXksIFJlZlB0cjxKU09OOjpWYWx1
ZT4oaXQtPnZhbHVlKSk7CisgICAgICAgIHJlc3VsdC0+c2V0VmFsdWUoaXQtPmtleSwgaXQtPnZh
bHVlLmNvcHlSZWYoKSk7CiAKICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAtNjA0LDcgKzYxNCw3
IEBAIFJlZlB0cjxKU09OOjpPYmplY3Q+IFdlYkRyaXZlclNlcnZpY2U6Om1hdGNoQ2FwYWJpbGl0
aWVzKGNvbnN0IEpTT046Ok9iamVjdCYgbWVyCiAKICAgICAvLyBTb21lIGNhcGFiaWxpdGllcyBs
aWtlIGJyb3dzZXIgbmFtZSBhbmQgdmVyc2lvbiBtaWdodCBuZWVkIHRvIGxhdW5jaCB0aGUgYnJv
d3NlciwKICAgICAvLyBzbyB3ZSBvbmx5IHJlamVjdCB0aGUga25vd24gY2FwYWJpbGl0aWVzIHRo
YXQgZG9uJ3QgbWF0Y2guCi0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gbWF0Y2hlZENhcGFiaWxp
dGllcyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgYXV0byBtYXRjaGVkQ2FwYWJpbGl0
aWVzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICBpZiAocGxhdGZvcm1DYXBhYmlsaXRp
ZXMuYnJvd3Nlck5hbWUpCiAgICAgICAgIG1hdGNoZWRDYXBhYmlsaXRpZXMtPnNldFN0cmluZygi
YnJvd3Nlck5hbWUiX3MsIHBsYXRmb3JtQ2FwYWJpbGl0aWVzLmJyb3dzZXJOYW1lLnZhbHVlKCkp
OwogICAgIGlmIChwbGF0Zm9ybUNhcGFiaWxpdGllcy5icm93c2VyVmVyc2lvbikKQEAgLTYyMSwz
NSArNjMxLDI4IEBAIFJlZlB0cjxKU09OOjpPYmplY3Q+IFdlYkRyaXZlclNlcnZpY2U6Om1hdGNo
Q2FwYWJpbGl0aWVzKGNvbnN0IEpTT046Ok9iamVjdCYgbWVyCiAgICAgYXV0byBlbmQgPSBtZXJn
ZWRDYXBhYmlsaXRpZXMuZW5kKCk7CiAgICAgZm9yIChhdXRvIGl0ID0gbWVyZ2VkQ2FwYWJpbGl0
aWVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICBpZiAoaXQtPmtleSA9PSAi
YnJvd3Nlck5hbWUiICYmIHBsYXRmb3JtQ2FwYWJpbGl0aWVzLmJyb3dzZXJOYW1lKSB7Ci0gICAg
ICAgICAgICBTdHJpbmcgYnJvd3Nlck5hbWU7Ci0gICAgICAgICAgICBpdC0+dmFsdWUtPmFzU3Ry
aW5nKGJyb3dzZXJOYW1lKTsKKyAgICAgICAgICAgIGF1dG8gYnJvd3Nlck5hbWUgPSBpdC0+dmFs
dWUtPmFzU3RyaW5nKCk7CiAgICAgICAgICAgICBpZiAoIWVxdWFsSWdub3JpbmdBU0NJSUNhc2Uo
cGxhdGZvcm1DYXBhYmlsaXRpZXMuYnJvd3Nlck5hbWUudmFsdWUoKSwgYnJvd3Nlck5hbWUpKQog
ICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICB9IGVsc2UgaWYgKGl0LT5r
ZXkgPT0gImJyb3dzZXJWZXJzaW9uIiAmJiBwbGF0Zm9ybUNhcGFiaWxpdGllcy5icm93c2VyVmVy
c2lvbikgewotICAgICAgICAgICAgU3RyaW5nIGJyb3dzZXJWZXJzaW9uOwotICAgICAgICAgICAg
aXQtPnZhbHVlLT5hc1N0cmluZyhicm93c2VyVmVyc2lvbik7CisgICAgICAgICAgICBhdXRvIGJy
b3dzZXJWZXJzaW9uID0gaXQtPnZhbHVlLT5hc1N0cmluZygpOwogICAgICAgICAgICAgaWYgKCFw
bGF0Zm9ybUNvbXBhcmVCcm93c2VyVmVyc2lvbnMoYnJvd3NlclZlcnNpb24sIHBsYXRmb3JtQ2Fw
YWJpbGl0aWVzLmJyb3dzZXJWZXJzaW9uLnZhbHVlKCkpKQogICAgICAgICAgICAgICAgIHJldHVy
biBudWxscHRyOwogICAgICAgICB9IGVsc2UgaWYgKGl0LT5rZXkgPT0gInBsYXRmb3JtTmFtZSIg
JiYgcGxhdGZvcm1DYXBhYmlsaXRpZXMucGxhdGZvcm1OYW1lKSB7Ci0gICAgICAgICAgICBTdHJp
bmcgcGxhdGZvcm1OYW1lOwotICAgICAgICAgICAgaXQtPnZhbHVlLT5hc1N0cmluZyhwbGF0Zm9y
bU5hbWUpOworICAgICAgICAgICAgYXV0byBwbGF0Zm9ybU5hbWUgPSBpdC0+dmFsdWUtPmFzU3Ry
aW5nKCk7CiAgICAgICAgICAgICBpZiAoIWVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHBs
YXRmb3JtTmFtZSwgImFueSIpICYmIHBsYXRmb3JtQ2FwYWJpbGl0aWVzLnBsYXRmb3JtTmFtZS52
YWx1ZSgpICE9IHBsYXRmb3JtTmFtZSkKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
ICAgICAgICAgfSBlbHNlIGlmIChpdC0+a2V5ID09ICJhY2NlcHRJbnNlY3VyZUNlcnRzIiAmJiBw
bGF0Zm9ybUNhcGFiaWxpdGllcy5hY2NlcHRJbnNlY3VyZUNlcnRzKSB7Ci0gICAgICAgICAgICBi
b29sIGFjY2VwdEluc2VjdXJlQ2VydHM7Ci0gICAgICAgICAgICBpdC0+dmFsdWUtPmFzQm9vbGVh
bihhY2NlcHRJbnNlY3VyZUNlcnRzKTsKKyAgICAgICAgICAgIGF1dG8gYWNjZXB0SW5zZWN1cmVD
ZXJ0cyA9IGl0LT52YWx1ZS0+YXNCb29sZWFuKCk7CiAgICAgICAgICAgICBpZiAoYWNjZXB0SW5z
ZWN1cmVDZXJ0cyAmJiAhcGxhdGZvcm1DYXBhYmlsaXRpZXMuYWNjZXB0SW5zZWN1cmVDZXJ0cy52
YWx1ZSgpKQogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICB9IGVsc2Ug
aWYgKGl0LT5rZXkgPT0gInByb3h5IikgewotICAgICAgICAgICAgUmVmUHRyPEpTT046Ok9iamVj
dD4gcHJveHk7Ci0gICAgICAgICAgICBpdC0+dmFsdWUtPmFzT2JqZWN0KHByb3h5KTsKLSAgICAg
ICAgICAgIFN0cmluZyBwcm94eVR5cGU7Ci0gICAgICAgICAgICBwcm94eS0+Z2V0U3RyaW5nKCJw
cm94eVR5cGUiX3MsIHByb3h5VHlwZSk7CisgICAgICAgICAgICBhdXRvIHByb3h5VHlwZSA9IGl0
LT52YWx1ZS0+YXNPYmplY3QoKS0+Z2V0U3RyaW5nKCJwcm94eVR5cGUiX3MpOwogICAgICAgICAg
ICAgaWYgKCFwbGF0Zm9ybVN1cHBvcnRQcm94eVR5cGUocHJveHlUeXBlKSkKICAgICAgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgfSBlbHNlIGlmICghcGxhdGZvcm1NYXRjaENh
cGFiaWxpdHkoaXQtPmtleSwgaXQtPnZhbHVlKSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRy
OwotICAgICAgICBtYXRjaGVkQ2FwYWJpbGl0aWVzLT5zZXRWYWx1ZShpdC0+a2V5LCBSZWZQdHI8
SlNPTjo6VmFsdWU+KGl0LT52YWx1ZSkpOworICAgICAgICBtYXRjaGVkQ2FwYWJpbGl0aWVzLT5z
ZXRWYWx1ZShpdC0+a2V5LCBpdC0+dmFsdWUuY29weVJlZigpKTsKICAgICB9CiAKICAgICByZXR1
cm4gbWF0Y2hlZENhcGFiaWxpdGllczsKQEAgLTY2MSwxOSArNjY0LDE5IEBAIFZlY3RvcjxDYXBh
YmlsaXRpZXM+IFdlYkRyaXZlclNlcnZpY2U6OnByb2Nlc3NDYXBhYmlsaXRpZXMoY29uc3QgSlNP
Tjo6T2JqZWN0JiBwCiAgICAgLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmRyaXZlci93ZWJk
cml2ZXItc3BlYy5odG1sI3Byb2Nlc3NpbmctY2FwYWJpbGl0aWVzCiAKICAgICAvLyAxLiBMZXQg
Y2FwYWJpbGl0aWVzIHJlcXVlc3QgYmUgdGhlIHJlc3VsdCBvZiBnZXR0aW5nIHRoZSBwcm9wZXJ0
eSAiY2FwYWJpbGl0aWVzIiBmcm9tIHBhcmFtZXRlcnMuCi0gICAgUmVmUHRyPEpTT046Ok9iamVj
dD4gY2FwYWJpbGl0aWVzT2JqZWN0OwotICAgIGlmICghcGFyYW1ldGVycy5nZXRPYmplY3QoImNh
cGFiaWxpdGllcyJfcywgY2FwYWJpbGl0aWVzT2JqZWN0KSkgeworICAgIGF1dG8gY2FwYWJpbGl0
aWVzT2JqZWN0ID0gcGFyYW1ldGVycy5nZXRPYmplY3QoImNhcGFiaWxpdGllcyJfcyk7CisgICAg
aWYgKCFjYXBhYmlsaXRpZXNPYmplY3QpIHsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29t
bWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OkludmFsaWRBcmd1bWVu
dCkpOwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAogICAgIC8vIDIuIExldCByZXF1aXJl
ZCBjYXBhYmlsaXRpZXMgYmUgdGhlIHJlc3VsdCBvZiBnZXR0aW5nIHRoZSBwcm9wZXJ0eSAiYWx3
YXlzTWF0Y2giIGZyb20gY2FwYWJpbGl0aWVzIHJlcXVlc3QuCi0gICAgUmVmUHRyPEpTT046OlZh
bHVlPiByZXF1aXJlZENhcGFiaWxpdGllc1ZhbHVlOwogICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+
IHJlcXVpcmVkQ2FwYWJpbGl0aWVzOwotICAgIGlmICghY2FwYWJpbGl0aWVzT2JqZWN0LT5nZXRW
YWx1ZSgiYWx3YXlzTWF0Y2giX3MsIHJlcXVpcmVkQ2FwYWJpbGl0aWVzVmFsdWUpKQorICAgIGF1
dG8gcmVxdWlyZWRDYXBhYmlsaXRpZXNWYWx1ZSA9IGNhcGFiaWxpdGllc09iamVjdC0+Z2V0VmFs
dWUoImFsd2F5c01hdGNoIl9zKTsKKyAgICBpZiAoIXJlcXVpcmVkQ2FwYWJpbGl0aWVzVmFsdWUp
IHsKICAgICAgICAgLy8gMi4xLiBJZiByZXF1aXJlZCBjYXBhYmlsaXRpZXMgaXMgdW5kZWZpbmVk
LCBzZXQgdGhlIHZhbHVlIHRvIGFuIGVtcHR5IEpTT04gT2JqZWN0LgogICAgICAgICByZXF1aXJl
ZENhcGFiaWxpdGllcyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgZWxzZSBpZiAoIXJl
cXVpcmVkQ2FwYWJpbGl0aWVzVmFsdWUtPmFzT2JqZWN0KHJlcXVpcmVkQ2FwYWJpbGl0aWVzKSkg
eworICAgIH0gZWxzZSBpZiAoIShyZXF1aXJlZENhcGFiaWxpdGllcyA9IHJlcXVpcmVkQ2FwYWJp
bGl0aWVzVmFsdWUtPmFzT2JqZWN0KCkpKSB7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENv
bW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpJbnZhbGlkQXJndW1l
bnQsIFN0cmluZygiYWx3YXlzTWF0Y2ggaXMgaW52YWxpZCBpbiBjYXBhYmlsaXRpZXMiKSkpOwog
ICAgICAgICByZXR1cm4geyB9OwogICAgIH0KQEAgLTY4NiwxMyArNjg5LDEzIEBAIFZlY3RvcjxD
YXBhYmlsaXRpZXM+IFdlYkRyaXZlclNlcnZpY2U6OnByb2Nlc3NDYXBhYmlsaXRpZXMoY29uc3Qg
SlNPTjo6T2JqZWN0JiBwCiAgICAgfQogCiAgICAgLy8gMy4gTGV0IGFsbCBmaXJzdCBtYXRjaCBj
YXBhYmlsaXRpZXMgYmUgdGhlIHJlc3VsdCBvZiBnZXR0aW5nIHRoZSBwcm9wZXJ0eSAiZmlyc3RN
YXRjaCIgZnJvbSBjYXBhYmlsaXRpZXMgcmVxdWVzdC4KLSAgICBSZWZQdHI8SlNPTjo6VmFsdWU+
IGZpcnN0TWF0Y2hDYXBhYmlsaXRpZXNWYWx1ZTsKICAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IGZp
cnN0TWF0Y2hDYXBhYmlsaXRpZXNMaXN0OwotICAgIGlmICghY2FwYWJpbGl0aWVzT2JqZWN0LT5n
ZXRWYWx1ZSgiZmlyc3RNYXRjaCJfcywgZmlyc3RNYXRjaENhcGFiaWxpdGllc1ZhbHVlKSkgewor
ICAgIGF1dG8gZmlyc3RNYXRjaENhcGFiaWxpdGllc1ZhbHVlID0gY2FwYWJpbGl0aWVzT2JqZWN0
LT5nZXRWYWx1ZSgiZmlyc3RNYXRjaCJfcyk7CisgICAgaWYgKCFmaXJzdE1hdGNoQ2FwYWJpbGl0
aWVzVmFsdWUpIHsKICAgICAgICAgLy8gMy4xLiBJZiBhbGwgZmlyc3QgbWF0Y2ggY2FwYWJpbGl0
aWVzIGlzIHVuZGVmaW5lZCwgc2V0IHRoZSB2YWx1ZSB0byBhIEpTT04gTGlzdCB3aXRoIGEgc2lu
Z2xlIGVudHJ5IG9mIGFuIGVtcHR5IEpTT04gT2JqZWN0LgogICAgICAgICBmaXJzdE1hdGNoQ2Fw
YWJpbGl0aWVzTGlzdCA9IEpTT046OkFycmF5OjpjcmVhdGUoKTsKICAgICAgICAgZmlyc3RNYXRj
aENhcGFiaWxpdGllc0xpc3QtPnB1c2hPYmplY3QoSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSk7Ci0g
ICAgfSBlbHNlIGlmICghZmlyc3RNYXRjaENhcGFiaWxpdGllc1ZhbHVlLT5hc0FycmF5KGZpcnN0
TWF0Y2hDYXBhYmlsaXRpZXNMaXN0KSkgeworICAgIH0gZWxzZSBpZiAoIShmaXJzdE1hdGNoQ2Fw
YWJpbGl0aWVzTGlzdCA9IGZpcnN0TWF0Y2hDYXBhYmlsaXRpZXNWYWx1ZS0+YXNBcnJheSgpKSkg
ewogICAgICAgICAvLyAzLjIuIElmIGFsbCBmaXJzdCBtYXRjaCBjYXBhYmlsaXRpZXMgaXMgbm90
IGEgSlNPTiBMaXN0LCByZXR1cm4gZXJyb3Igd2l0aCBlcnJvciBjb2RlIGludmFsaWQgYXJndW1l
bnQuCiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFu
ZFJlc3VsdDo6RXJyb3JDb2RlOjpJbnZhbGlkQXJndW1lbnQsIFN0cmluZygiZmlyc3RNYXRjaCBp
cyBpbnZhbGlkIGluIGNhcGFiaWxpdGllcyIpKSk7CiAgICAgICAgIHJldHVybiB7IH07CkBAIC03
MDQsOSArNzA3LDggQEAgVmVjdG9yPENhcGFiaWxpdGllcz4gV2ViRHJpdmVyU2VydmljZTo6cHJv
Y2Vzc0NhcGFiaWxpdGllcyhjb25zdCBKU09OOjpPYmplY3QmIHAKICAgICB2YWxpZGF0ZWRGaXJz
dE1hdGNoQ2FwYWJpbGl0aWVzTGlzdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGZpcnN0TWF0Y2hD
YXBhYmlsaXRpZXNMaXN0TGVuZ3RoKTsKICAgICAvLyA1LiBGb3IgZWFjaCBmaXJzdCBtYXRjaCBj
YXBhYmlsaXRpZXMgY29ycmVzcG9uZGluZyB0byBhbiBpbmRleGVkIHByb3BlcnR5IGluIGFsbCBm
aXJzdCBtYXRjaCBjYXBhYmlsaXRpZXMuCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZp
cnN0TWF0Y2hDYXBhYmlsaXRpZXNMaXN0TGVuZ3RoOyArK2kpIHsKLSAgICAgICAgUmVmUHRyPEpT
T046OlZhbHVlPiBmaXJzdE1hdGNoQ2FwYWJpbGl0aWVzVmFsdWUgPSBmaXJzdE1hdGNoQ2FwYWJp
bGl0aWVzTGlzdC0+Z2V0KGkpOwotICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBmaXJzdE1h
dGNoQ2FwYWJpbGl0aWVzOwotICAgICAgICBpZiAoIWZpcnN0TWF0Y2hDYXBhYmlsaXRpZXNWYWx1
ZS0+YXNPYmplY3QoZmlyc3RNYXRjaENhcGFiaWxpdGllcykpIHsKKyAgICAgICAgYXV0byBmaXJz
dE1hdGNoQ2FwYWJpbGl0aWVzID0gZmlyc3RNYXRjaENhcGFiaWxpdGllc0xpc3QtPmdldChpKS0+
YXNPYmplY3QoKTsKKyAgICAgICAgaWYgKCFmaXJzdE1hdGNoQ2FwYWJpbGl0aWVzKSB7CiAgICAg
ICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1
bHQ6OkVycm9yQ29kZTo6SW52YWxpZEFyZ3VtZW50LCBTdHJpbmcoIkludmFsaWQgY2FwYWJpbGl0
aWVzIGZvdW5kIGluIGZpcnN0TWF0Y2giKSkpOwogICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAg
ICAgICAgfQpAQCAtODE1LDkgKzgxNyw5IEBAIHZvaWQgV2ViRHJpdmVyU2VydmljZTo6Y3JlYXRl
U2Vzc2lvbihWZWN0b3I8Q2FwYWJpbGl0aWVzPiYmIGNhcGFiaWxpdGllc0xpc3QsIHN0CiAKICAg
ICAgICAgICAgIG1fc2Vzc2lvbiA9IFdURk1vdmUoc2Vzc2lvbik7CiAKLSAgICAgICAgICAgIFJl
ZlB0cjxKU09OOjpPYmplY3Q+IHJlc3VsdE9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7
CisgICAgICAgICAgICBhdXRvIHJlc3VsdE9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7
CiAgICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZygic2Vzc2lvbklkIl9zLCBtX3Nl
c3Npb24tPmlkKCkpOwotICAgICAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gY2FwYWJpbGl0
aWVzT2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgICAgIGF1dG8gY2Fw
YWJpbGl0aWVzT2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICAgICAgIGNv
bnN0IGF1dG8mIGNhcGFiaWxpdGllcyA9IG1fc2Vzc2lvbi0+Y2FwYWJpbGl0aWVzKCk7CiAgICAg
ICAgICAgICBjYXBhYmlsaXRpZXNPYmplY3QtPnNldFN0cmluZygiYnJvd3Nlck5hbWUiX3MsIGNh
cGFiaWxpdGllcy5icm93c2VyTmFtZS52YWx1ZU9yKGVtcHR5U3RyaW5nKCkpKTsKICAgICAgICAg
ICAgIGNhcGFiaWxpdGllc09iamVjdC0+c2V0U3RyaW5nKCJicm93c2VyVmVyc2lvbiJfcywgY2Fw
YWJpbGl0aWVzLmJyb3dzZXJWZXJzaW9uLnZhbHVlT3IoZW1wdHlTdHJpbmcoKSkpOwpAQCAtODU1
LDcgKzg1Nyw3IEBAIHZvaWQgV2ViRHJpdmVyU2VydmljZTo6Y3JlYXRlU2Vzc2lvbihWZWN0b3I8
Q2FwYWJpbGl0aWVzPiYmIGNhcGFiaWxpdGllc0xpc3QsIHN0CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICBpZiAoIWNhcGFiaWxpdGllcy5wcm94eSkKICAgICAgICAgICAgICAgICBjYXBhYmls
aXRpZXNPYmplY3QtPnNldE9iamVjdCgicHJveHkiX3MsIEpTT046Ok9iamVjdDo6Y3JlYXRlKCkp
OwotICAgICAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gdGltZW91dHNPYmplY3QgPSBKU09O
OjpPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICAgICAgYXV0byB0aW1lb3V0c09iamVjdCA9IEpT
T046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgICAgICBpZiAobV9zZXNzaW9uLT5zY3JpcHRU
aW1lb3V0KCkgPT0gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjppbmZpbml0eSgpKQogICAg
ICAgICAgICAgICAgIHRpbWVvdXRzT2JqZWN0LT5zZXRWYWx1ZSgic2NyaXB0Il9zLCBKU09OOjpW
YWx1ZTo6bnVsbCgpKTsKICAgICAgICAgICAgIGVsc2UKQEAgLTg3NCw4ICs4NzYsOCBAQCB2b2lk
IFdlYkRyaXZlclNlcnZpY2U6OmRlbGV0ZVNlc3Npb24oUmVmUHRyPEpTT046Ok9iamVjdD4mJiBw
YXJhbWV0ZXJzLCBGdW5jdGlvbgogewogICAgIC8vIMKnOC4yIERlbGV0ZSBTZXNzaW9uLgogICAg
IC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi93ZWJkcml2ZXIvI2RlbGV0ZS1zZXNzaW9uCi0gICAg
U3RyaW5nIHNlc3Npb25JRDsKLSAgICBpZiAoIXBhcmFtZXRlcnMtPmdldFN0cmluZygic2Vzc2lv
bklkIl9zLCBzZXNzaW9uSUQpKSB7CisgICAgYXV0byBzZXNzaW9uSUQgPSBwYXJhbWV0ZXJzLT5n
ZXRTdHJpbmcoInNlc3Npb25JZCJfcyk7CisgICAgaWYgKCFzZXNzaW9uSUQpIHsKICAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJv
ckNvZGU6OkludmFsaWRBcmd1bWVudCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtOTM4
LDggKzk0MCw4IEBAIHZvaWQgV2ViRHJpdmVyU2VydmljZTo6Z28oUmVmUHRyPEpTT046Ok9iamVj
dD4mJiBwYXJhbWV0ZXJzLCBGdW5jdGlvbjx2b2lkIChDb21tCiAgICAgaWYgKCFmaW5kU2Vzc2lv
bk9yQ29tcGxldGVXaXRoRXJyb3IoKnBhcmFtZXRlcnMsIGNvbXBsZXRpb25IYW5kbGVyKSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgU3RyaW5nIHVybDsKLSAgICBpZiAoIXBhcmFtZXRlcnMtPmdl
dFN0cmluZygidXJsIl9zLCB1cmwpKSB7CisgICAgYXV0byB1cmwgPSBwYXJhbWV0ZXJzLT5nZXRT
dHJpbmcoInVybCJfcyk7CisgICAgaWYgKCF1cmwpIHsKICAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OkludmFsaWRB
cmd1bWVudCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTA1Myw5ICsxMDU1LDggQEAg
dm9pZCBXZWJEcml2ZXJTZXJ2aWNlOjpzZXRXaW5kb3dSZWN0KFJlZlB0cjxKU09OOjpPYmplY3Q+
JiYgcGFyYW1ldGVycywgRnVuY3Rpb24KIHsKICAgICAvLyDCpzEwLjcuMiBTZXQgV2luZG93IFJl
Y3QuCiAgICAgLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmRyaXZlci93ZWJkcml2ZXItc3Bl
Yy5odG1sI3NldC13aW5kb3ctcmVjdAotICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gdmFsdWU7CiAg
ICAgT3B0aW9uYWw8ZG91YmxlPiB3aWR0aDsKLSAgICBpZiAocGFyYW1ldGVycy0+Z2V0VmFsdWUo
IndpZHRoIl9zLCB2YWx1ZSkpIHsKKyAgICBpZiAoYXV0byB2YWx1ZSA9IHBhcmFtZXRlcnMtPmdl
dFZhbHVlKCJ3aWR0aCJfcykpIHsKICAgICAgICAgaWYgKGF1dG8gbnVtYmVyID0gdmFsdWVBc051
bWJlckluUmFuZ2UoKnZhbHVlKSkKICAgICAgICAgICAgIHdpZHRoID0gbnVtYmVyOwogICAgICAg
ICBlbHNlIGlmICghdmFsdWUtPmlzTnVsbCgpKSB7CkBAIC0xMDY0LDcgKzEwNjUsNyBAQCB2b2lk
IFdlYkRyaXZlclNlcnZpY2U6OnNldFdpbmRvd1JlY3QoUmVmUHRyPEpTT046Ok9iamVjdD4mJiBw
YXJhbWV0ZXJzLCBGdW5jdGlvbgogICAgICAgICB9CiAgICAgfQogICAgIE9wdGlvbmFsPGRvdWJs
ZT4gaGVpZ2h0OwotICAgIGlmIChwYXJhbWV0ZXJzLT5nZXRWYWx1ZSgiaGVpZ2h0Il9zLCB2YWx1
ZSkpIHsKKyAgICBpZiAoYXV0byB2YWx1ZSA9IHBhcmFtZXRlcnMtPmdldFZhbHVlKCJoZWlnaHQi
X3MpKSB7CiAgICAgICAgIGlmIChhdXRvIG51bWJlciA9IHZhbHVlQXNOdW1iZXJJblJhbmdlKCp2
YWx1ZSkpCiAgICAgICAgICAgICBoZWlnaHQgPSBudW1iZXI7CiAgICAgICAgIGVsc2UgaWYgKCF2
YWx1ZS0+aXNOdWxsKCkpIHsKQEAgLTEwNzMsNyArMTA3NCw3IEBAIHZvaWQgV2ViRHJpdmVyU2Vy
dmljZTo6c2V0V2luZG93UmVjdChSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMsIEZ1
bmN0aW9uCiAgICAgICAgIH0KICAgICB9CiAgICAgT3B0aW9uYWw8ZG91YmxlPiB4OwotICAgIGlm
IChwYXJhbWV0ZXJzLT5nZXRWYWx1ZSgieCJfcywgdmFsdWUpKSB7CisgICAgaWYgKGF1dG8gdmFs
dWUgPSBwYXJhbWV0ZXJzLT5nZXRWYWx1ZSgieCJfcykpIHsKICAgICAgICAgaWYgKGF1dG8gbnVt
YmVyID0gdmFsdWVBc051bWJlckluUmFuZ2UoKnZhbHVlLCBJTlRfTUlOKSkKICAgICAgICAgICAg
IHggPSBudW1iZXI7CiAgICAgICAgIGVsc2UgaWYgKCF2YWx1ZS0+aXNOdWxsKCkpIHsKQEAgLTEw
ODIsNyArMTA4Myw3IEBAIHZvaWQgV2ViRHJpdmVyU2VydmljZTo6c2V0V2luZG93UmVjdChSZWZQ
dHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMsIEZ1bmN0aW9uCiAgICAgICAgIH0KICAgICB9
CiAgICAgT3B0aW9uYWw8ZG91YmxlPiB5OwotICAgIGlmIChwYXJhbWV0ZXJzLT5nZXRWYWx1ZSgi
eSJfcywgdmFsdWUpKSB7CisgICAgaWYgKGF1dG8gdmFsdWUgPSBwYXJhbWV0ZXJzLT5nZXRWYWx1
ZSgieSJfcykpIHsKICAgICAgICAgaWYgKGF1dG8gbnVtYmVyID0gdmFsdWVBc051bWJlckluUmFu
Z2UoKnZhbHVlLCBJTlRfTUlOKSkKICAgICAgICAgICAgIHkgPSBudW1iZXI7CiAgICAgICAgIGVs
c2UgaWYgKCF2YWx1ZS0+aXNOdWxsKCkpIHsKQEAgLTExMzUsOCArMTEzNiw4IEBAIHZvaWQgV2Vi
RHJpdmVyU2VydmljZTo6Y2xvc2VXaW5kb3coUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0
ZXJzLCBGdW5jdGlvbjx2CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAg
ICBSZWZQdHI8SlNPTjo6QXJyYXk+IGhhbmRsZXM7Ci0gICAgICAgIGlmIChyZXN1bHQucmVzdWx0
KCktPmFzQXJyYXkoaGFuZGxlcykgJiYgIWhhbmRsZXMtPmxlbmd0aCgpKQorICAgICAgICBhdXRv
IGhhbmRsZXMgPSByZXN1bHQucmVzdWx0KCktPmFzQXJyYXkoKTsKKyAgICAgICAgaWYgKGhhbmRs
ZXMgJiYgIWhhbmRsZXMtPmxlbmd0aCgpKQogICAgICAgICAgICAgbV9zZXNzaW9uID0gbnVsbHB0
cjsKIAogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKHJlc3VsdCkpOwpAQCAtMTE1
MCw4ICsxMTUxLDggQEAgdm9pZCBXZWJEcml2ZXJTZXJ2aWNlOjpzd2l0Y2hUb1dpbmRvdyhSZWZQ
dHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMsIEZ1bmN0aW8KICAgICBpZiAoIWZpbmRTZXNz
aW9uT3JDb21wbGV0ZVdpdGhFcnJvcigqcGFyYW1ldGVycywgY29tcGxldGlvbkhhbmRsZXIpKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBTdHJpbmcgaGFuZGxlOwotICAgIGlmICghcGFyYW1ldGVy
cy0+Z2V0U3RyaW5nKCJoYW5kbGUiX3MsIGhhbmRsZSkpIHsKKyAgICBhdXRvIGhhbmRsZSA9IHBh
cmFtZXRlcnMtPmdldFN0cmluZygiaGFuZGxlIl9zKTsKKyAgICBpZiAoIWhhbmRsZSkgewogICAg
ICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6
OkVycm9yQ29kZTo6SW52YWxpZEFyZ3VtZW50KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBA
IC0xMTc1LDEzICsxMTc2LDExIEBAIHZvaWQgV2ViRHJpdmVyU2VydmljZTo6bmV3V2luZG93KFJl
ZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycywgRnVuY3Rpb248dm9pCiAgICAgICAgIHJl
dHVybjsKIAogICAgIE9wdGlvbmFsPFN0cmluZz4gdHlwZUhpbnQ7Ci0gICAgUmVmUHRyPEpTT046
OlZhbHVlPiB2YWx1ZTsKLSAgICBpZiAocGFyYW1ldGVycy0+Z2V0VmFsdWUoInR5cGUiX3MsIHZh
bHVlKSkgewotICAgICAgICBTdHJpbmcgdmFsdWVTdHJpbmc7Ci0gICAgICAgIGlmICh2YWx1ZS0+
YXNTdHJpbmcodmFsdWVTdHJpbmcpKSB7Ci0gICAgICAgICAgICBpZiAodmFsdWVTdHJpbmcgPT0g
IndpbmRvdyIgfHwgdmFsdWVTdHJpbmcgPT0gInRhYiIpCi0gICAgICAgICAgICAgICAgdHlwZUhp
bnQgPSB2YWx1ZVN0cmluZzsKLSAgICAgICAgfSBlbHNlIGlmICghdmFsdWUtPmlzTnVsbCgpKSB7
CisgICAgaWYgKGF1dG8gdmFsdWUgPSBwYXJhbWV0ZXJzLT5nZXRWYWx1ZSgidHlwZSJfcykpIHsK
KyAgICAgICAgYXV0byB2YWx1ZVN0cmluZyA9IHZhbHVlLT5hc1N0cmluZygpOworICAgICAgICBp
ZiAodmFsdWVTdHJpbmcgPT0gIndpbmRvdyIgfHwgdmFsdWVTdHJpbmcgPT0gInRhYiIpCisgICAg
ICAgICAgICB0eXBlSGludCA9IHZhbHVlU3RyaW5nOworICAgICAgICBlbHNlIGlmICghdmFsdWUt
PmlzTnVsbCgpKSB7CiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0
OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6SW52YWxpZEFyZ3VtZW50KSk7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTExOTcsOCArMTE5Niw4IEBAIHZvaWQgV2Vi
RHJpdmVyU2VydmljZTo6c3dpdGNoVG9GcmFtZShSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFt
ZXRlcnMsIEZ1bmN0aW9uCiAgICAgaWYgKCFmaW5kU2Vzc2lvbk9yQ29tcGxldGVXaXRoRXJyb3Io
KnBhcmFtZXRlcnMsIGNvbXBsZXRpb25IYW5kbGVyKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
UmVmUHRyPEpTT046OlZhbHVlPiBmcmFtZUlEOwotICAgIGlmICghcGFyYW1ldGVycy0+Z2V0VmFs
dWUoImlkIl9zLCBmcmFtZUlEKSkgeworICAgIGF1dG8gZnJhbWVJRCA9IHBhcmFtZXRlcnMtPmdl
dFZhbHVlKCJpZCJfcyk7CisgICAgaWYgKCFmcmFtZUlEKSB7CiAgICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpJbnZh
bGlkQXJndW1lbnQpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTEyMTQsOCArMTIxMyw3
IEBAIHZvaWQgV2ViRHJpdmVyU2VydmljZTo6c3dpdGNoVG9GcmFtZShSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiYmIHBhcmFtZXRlcnMsIEZ1bmN0aW9uCiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBKU09OOjpWYWx1ZTo6VHlwZTo6T2JqZWN0OiB7Ci0gICAgICAgIFJlZlB0cjxKU09O
OjpPYmplY3Q+IGZyYW1lSURPYmplY3Q7Ci0gICAgICAgIGZyYW1lSUQtPmFzT2JqZWN0KGZyYW1l
SURPYmplY3QpOworICAgICAgICBhdXRvIGZyYW1lSURPYmplY3QgPSBmcmFtZUlELT5hc09iamVj
dCgpOwogICAgICAgICBpZiAoZnJhbWVJRE9iamVjdC0+ZmluZChTZXNzaW9uOjp3ZWJFbGVtZW50
SWRlbnRpZmllcigpKSA9PSBmcmFtZUlET2JqZWN0LT5lbmQoKSkgewogICAgICAgICAgICAgY29t
cGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNv
ZGU6OkludmFsaWRBcmd1bWVudCkpOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTI1Niw4ICsx
MjU0LDggQEAgdm9pZCBXZWJEcml2ZXJTZXJ2aWNlOjpzd2l0Y2hUb1BhcmVudEZyYW1lKFJlZlB0
cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycywgRnUKIAogc3RhdGljIE9wdGlvbmFsPFN0cmlu
Zz4gZmluZEVsZW1lbnRPckNvbXBsZXRlV2l0aEVycm9yKEpTT046Ok9iamVjdCYgcGFyYW1ldGVy
cywgRnVuY3Rpb248dm9pZCAoQ29tbWFuZFJlc3VsdCYmKT4mIGNvbXBsZXRpb25IYW5kbGVyKQog
ewotICAgIFN0cmluZyBlbGVtZW50SUQ7Ci0gICAgaWYgKCFwYXJhbWV0ZXJzLmdldFN0cmluZygi
ZWxlbWVudElkIl9zLCBlbGVtZW50SUQpIHx8IGVsZW1lbnRJRC5pc0VtcHR5KCkpIHsKKyAgICBh
dXRvIGVsZW1lbnRJRCA9IHBhcmFtZXRlcnMuZ2V0U3RyaW5nKCJlbGVtZW50SWQiX3MpOworICAg
IGlmIChlbGVtZW50SUQuaXNFbXB0eSgpKSB7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENv
bW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpJbnZhbGlkQXJndW1l
bnQpKTsKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICB9CkBAIC0xMjc3LDExICsx
Mjc1LDEzIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc1ZhbGlkU3RyYXRlZ3koY29uc3QgU3RyaW5n
JiBzdHJhdGVneSkKIAogc3RhdGljIGJvb2wgZmluZFN0cmF0ZWd5QW5kU2VsZWN0b3JPckNvbXBs
ZXRlV2l0aEVycm9yKEpTT046Ok9iamVjdCYgcGFyYW1ldGVycywgRnVuY3Rpb248dm9pZCAoQ29t
bWFuZFJlc3VsdCYmKT4mIGNvbXBsZXRpb25IYW5kbGVyLCBTdHJpbmcmIHN0cmF0ZWd5LCBTdHJp
bmcmIHNlbGVjdG9yKQogewotICAgIGlmICghcGFyYW1ldGVycy5nZXRTdHJpbmcoInVzaW5nIl9z
LCBzdHJhdGVneSkgfHwgIWlzVmFsaWRTdHJhdGVneShzdHJhdGVneSkpIHsKKyAgICBzdHJhdGVn
eSA9IHBhcmFtZXRlcnMuZ2V0U3RyaW5nKCJ1c2luZyJfcyk7CisgICAgaWYgKCFpc1ZhbGlkU3Ry
YXRlZ3koc3RyYXRlZ3kpKSB7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1
bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpJbnZhbGlkQXJndW1lbnQpKTsKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICBpZiAoIXBhcmFtZXRlcnMuZ2V0U3RyaW5n
KCJ2YWx1ZSJfcywgc2VsZWN0b3IpKSB7CisgICAgc2VsZWN0b3IgPSBwYXJhbWV0ZXJzLmdldFN0
cmluZygidmFsdWUiX3MpOworICAgIGlmICghc2VsZWN0b3IpIHsKICAgICAgICAgY29tcGxldGlv
bkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6Oklu
dmFsaWRBcmd1bWVudCkpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQpAQCAtMTQwNSw4
ICsxNDA1LDggQEAgdm9pZCBXZWJEcml2ZXJTZXJ2aWNlOjpnZXRFbGVtZW50QXR0cmlidXRlKFJl
ZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycywgRnUKICAgICBpZiAoIWVsZW1lbnRJRCkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgU3RyaW5nIGF0dHJpYnV0ZTsKLSAgICBpZiAoIXBhcmFt
ZXRlcnMtPmdldFN0cmluZygibmFtZSJfcywgYXR0cmlidXRlKSkgeworICAgIGF1dG8gYXR0cmli
dXRlID0gcGFyYW1ldGVycy0+Z2V0U3RyaW5nKCJuYW1lIl9zKTsKKyAgICBpZiAoIWF0dHJpYnV0
ZSkgewogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1h
bmRSZXN1bHQ6OkVycm9yQ29kZTo6SW52YWxpZEFyZ3VtZW50KSk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CkBAIC0xNDI1LDggKzE0MjUsOCBAQCB2b2lkIFdlYkRyaXZlclNlcnZpY2U6OmdldEVs
ZW1lbnRQcm9wZXJ0eShSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMsIEZ1bgogICAg
IGlmICghZWxlbWVudElEKQogICAgICAgICByZXR1cm47CiAKLSAgICBTdHJpbmcgYXR0cmlidXRl
OwotICAgIGlmICghcGFyYW1ldGVycy0+Z2V0U3RyaW5nKCJuYW1lIl9zLCBhdHRyaWJ1dGUpKSB7
CisgICAgYXV0byBhdHRyaWJ1dGUgPSBwYXJhbWV0ZXJzLT5nZXRTdHJpbmcoIm5hbWUiX3MpOwor
ICAgIGlmICghYXR0cmlidXRlKSB7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRS
ZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpJbnZhbGlkQXJndW1lbnQpKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTE0NDUsOCArMTQ0NSw4IEBAIHZvaWQgV2ViRHJp
dmVyU2VydmljZTo6Z2V0RWxlbWVudENTU1ZhbHVlKFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFy
YW1ldGVycywgRnVuCiAgICAgaWYgKCFlbGVtZW50SUQpCiAgICAgICAgIHJldHVybjsKIAotICAg
IFN0cmluZyBjc3NQcm9wZXJ0eTsKLSAgICBpZiAoIXBhcmFtZXRlcnMtPmdldFN0cmluZygibmFt
ZSJfcywgY3NzUHJvcGVydHkpKSB7CisgICAgYXV0byBjc3NQcm9wZXJ0eSA9IHBhcmFtZXRlcnMt
PmdldFN0cmluZygibmFtZSJfcyk7CisgICAgaWYgKCFjc3NQcm9wZXJ0eSkgewogICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9y
Q29kZTo6SW52YWxpZEFyZ3VtZW50KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xNTYz
LDggKzE1NjMsOCBAQCB2b2lkIFdlYkRyaXZlclNlcnZpY2U6OmVsZW1lbnRTZW5kS2V5cyhSZWZQ
dHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMsIEZ1bmN0aQogICAgIGlmICghZWxlbWVudElE
KQogICAgICAgICByZXR1cm47CiAKLSAgICBTdHJpbmcgdGV4dDsKLSAgICBpZiAoIXBhcmFtZXRl
cnMtPmdldFN0cmluZygidGV4dCJfcywgdGV4dCkgfHwgdGV4dC5pc0VtcHR5KCkpIHsKKyAgICBh
dXRvIHRleHQgPSBwYXJhbWV0ZXJzLT5nZXRTdHJpbmcoInRleHQiX3MpOworICAgIGlmICh0ZXh0
LmlzRW1wdHkoKSkgewogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0Ojpm
YWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6SW52YWxpZEFyZ3VtZW50KSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CkBAIC0xNTg0LDExICsxNTg0LDEzIEBAIHZvaWQgV2ViRHJpdmVyU2Vy
dmljZTo6Z2V0UGFnZVNvdXJjZShSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMsIEZ1
bmN0aW9uCiAKIHN0YXRpYyBib29sIGZpbmRTY3JpcHRBbmRBcmd1bWVudHNPckNvbXBsZXRlV2l0
aEVycm9yKEpTT046Ok9iamVjdCYgcGFyYW1ldGVycywgRnVuY3Rpb248dm9pZCAoQ29tbWFuZFJl
c3VsdCYmKT4mIGNvbXBsZXRpb25IYW5kbGVyLCBTdHJpbmcmIHNjcmlwdCwgUmVmUHRyPEpTT046
OkFycmF5PiYgYXJndW1lbnRzKQogewotICAgIGlmICghcGFyYW1ldGVycy5nZXRTdHJpbmcoInNj
cmlwdCJfcywgc2NyaXB0KSkgeworICAgIHNjcmlwdCA9IHBhcmFtZXRlcnMuZ2V0U3RyaW5nKCJz
Y3JpcHQiX3MpOworICAgIGlmICghc2NyaXB0KSB7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVy
KENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpJbnZhbGlkQXJn
dW1lbnQpKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICBpZiAoIXBhcmFtZXRl
cnMuZ2V0QXJyYXkoImFyZ3MiX3MsIGFyZ3VtZW50cykpIHsKKyAgICBhcmd1bWVudHMgPSBwYXJh
bWV0ZXJzLmdldEFycmF5KCJhcmdzIl9zKTsKKyAgICBpZiAoIWFyZ3VtZW50cykgewogICAgICAg
ICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVy
cm9yQ29kZTo6SW52YWxpZEFyZ3VtZW50KSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9
CkBAIC0xNjYwLDggKzE2NjIsOCBAQCB2b2lkIFdlYkRyaXZlclNlcnZpY2U6OmdldE5hbWVkQ29v
a2llKFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycywgRnVuY3RpbwogICAgIGlmICgh
ZmluZFNlc3Npb25PckNvbXBsZXRlV2l0aEVycm9yKCpwYXJhbWV0ZXJzLCBjb21wbGV0aW9uSGFu
ZGxlcikpCiAgICAgICAgIHJldHVybjsKIAotICAgIFN0cmluZyBuYW1lOwotICAgIGlmICghcGFy
YW1ldGVycy0+Z2V0U3RyaW5nKCJuYW1lIl9zLCBuYW1lKSkgeworICAgIGF1dG8gbmFtZSA9IHBh
cmFtZXRlcnMtPmdldFN0cmluZygibmFtZSJfcyk7CisgICAgaWYgKCFuYW1lKSB7CiAgICAgICAg
IGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJy
b3JDb2RlOjpJbnZhbGlkQXJndW1lbnQpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTE2
NzgsMzcgKzE2ODAsNDAgQEAgdm9pZCBXZWJEcml2ZXJTZXJ2aWNlOjpnZXROYW1lZENvb2tpZShS
ZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMsIEZ1bmN0aW8KIHN0YXRpYyBPcHRpb25h
bDxTZXNzaW9uOjpDb29raWU+IGRlc2VyaWFsaXplQ29va2llKEpTT046Ok9iamVjdCYgY29va2ll
T2JqZWN0KQogewogICAgIFNlc3Npb246OkNvb2tpZSBjb29raWU7Ci0gICAgaWYgKCFjb29raWVP
YmplY3QuZ2V0U3RyaW5nKCJuYW1lIl9zLCBjb29raWUubmFtZSkgfHwgY29va2llLm5hbWUuaXNF
bXB0eSgpKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIGlmICghY29va2llT2Jq
ZWN0LmdldFN0cmluZygidmFsdWUiX3MsIGNvb2tpZS52YWx1ZSkgfHwgY29va2llLnZhbHVlLmlz
RW1wdHkoKSkKKworICAgIGNvb2tpZS5uYW1lID0gY29va2llT2JqZWN0LmdldFN0cmluZygibmFt
ZSJfcyk7CisgICAgaWYgKGNvb2tpZS5uYW1lLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKIAotICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gdmFsdWU7Ci0gICAgaWYgKGNv
b2tpZU9iamVjdC5nZXRWYWx1ZSgicGF0aCJfcywgdmFsdWUpKSB7Ci0gICAgICAgIFN0cmluZyBw
YXRoOwotICAgICAgICBpZiAoIXZhbHVlLT5hc1N0cmluZyhwYXRoKSkKKyAgICBjb29raWUudmFs
dWUgPSBjb29raWVPYmplY3QuZ2V0U3RyaW5nKCJ2YWx1ZSJfcyk7CisgICAgaWYgKGNvb2tpZS52
YWx1ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBpZiAo
YXV0byB2YWx1ZSA9IGNvb2tpZU9iamVjdC5nZXRWYWx1ZSgicGF0aCJfcykpIHsKKyAgICAgICAg
YXV0byBwYXRoID0gdmFsdWUtPmFzU3RyaW5nKCk7CisgICAgICAgIGlmICghcGF0aCkKICAgICAg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAgIGNvb2tpZS5wYXRoID0gcGF0aDsK
ICAgICB9Ci0gICAgaWYgKGNvb2tpZU9iamVjdC5nZXRWYWx1ZSgiZG9tYWluIl9zLCB2YWx1ZSkp
IHsKLSAgICAgICAgU3RyaW5nIGRvbWFpbjsKLSAgICAgICAgaWYgKCF2YWx1ZS0+YXNTdHJpbmco
ZG9tYWluKSkKKyAgICBpZiAoYXV0byB2YWx1ZSA9IGNvb2tpZU9iamVjdC5nZXRWYWx1ZSgiZG9t
YWluIl9zKSkgeworICAgICAgICBhdXRvIGRvbWFpbiA9IHZhbHVlLT5hc1N0cmluZygpOworICAg
ICAgICBpZiAoIWRvbWFpbikKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAg
ICAgIGNvb2tpZS5kb21haW4gPSBkb21haW47CiAgICAgfQotICAgIGlmIChjb29raWVPYmplY3Qu
Z2V0VmFsdWUoInNlY3VyZSJfcywgdmFsdWUpKSB7Ci0gICAgICAgIGJvb2wgc2VjdXJlOwotICAg
ICAgICBpZiAoIXZhbHVlLT5hc0Jvb2xlYW4oc2VjdXJlKSkKKyAgICBpZiAoYXV0byB2YWx1ZSA9
IGNvb2tpZU9iamVjdC5nZXRWYWx1ZSgic2VjdXJlIl9zKSkgeworICAgICAgICBhdXRvIHNlY3Vy
ZSA9IHZhbHVlLT5hc0Jvb2xlYW4oKTsKKyAgICAgICAgaWYgKCFzZWN1cmUpCiAgICAgICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAgICBjb29raWUuc2VjdXJlID0gc2VjdXJlOwog
ICAgIH0KLSAgICBpZiAoY29va2llT2JqZWN0LmdldFZhbHVlKCJodHRwT25seSJfcywgdmFsdWUp
KSB7Ci0gICAgICAgIGJvb2wgaHR0cE9ubHk7Ci0gICAgICAgIGlmICghdmFsdWUtPmFzQm9vbGVh
bihodHRwT25seSkpCisgICAgaWYgKGF1dG8gdmFsdWUgPSBjb29raWVPYmplY3QuZ2V0VmFsdWUo
Imh0dHBPbmx5Il9zKSkgeworICAgICAgICBhdXRvIGh0dHBPbmx5ID0gdmFsdWUtPmFzQm9vbGVh
bigpOworICAgICAgICBpZiAoIWh0dHBPbmx5KQogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKICAgICAgICAgY29va2llLmh0dHBPbmx5ID0gaHR0cE9ubHk7CiAgICAgfQotICAgIGlm
IChjb29raWVPYmplY3QuZ2V0VmFsdWUoImV4cGlyeSJfcywgdmFsdWUpKSB7CisgICAgaWYgKGF1
dG8gdmFsdWUgPSBjb29raWVPYmplY3QuZ2V0VmFsdWUoImV4cGlyeSJfcykpIHsKICAgICAgICAg
YXV0byBleHBpcnkgPSB1bnNpZ25lZFZhbHVlKCp2YWx1ZSk7CiAgICAgICAgIGlmICghZXhwaXJ5
KQogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKQEAgLTE3MjUsOCArMTczMCw4IEBA
IHZvaWQgV2ViRHJpdmVyU2VydmljZTo6YWRkQ29va2llKFJlZlB0cjxKU09OOjpPYmplY3Q+JiYg
cGFyYW1ldGVycywgRnVuY3Rpb248dm9pCiAgICAgaWYgKCFmaW5kU2Vzc2lvbk9yQ29tcGxldGVX
aXRoRXJyb3IoKnBhcmFtZXRlcnMsIGNvbXBsZXRpb25IYW5kbGVyKSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gY29va2llT2JqZWN0OwotICAgIGlmICghcGFy
YW1ldGVycy0+Z2V0T2JqZWN0KCJjb29raWUiX3MsIGNvb2tpZU9iamVjdCkpIHsKKyAgICBhdXRv
IGNvb2tpZU9iamVjdCA9IHBhcmFtZXRlcnMtPmdldE9iamVjdCgiY29va2llIl9zKTsKKyAgICBp
ZiAoIWNvb2tpZU9iamVjdCkgewogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVz
dWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6SW52YWxpZEFyZ3VtZW50KSk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xNzUzLDggKzE3NTgsOCBAQCB2b2lkIFdlYkRyaXZl
clNlcnZpY2U6OmRlbGV0ZUNvb2tpZShSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMs
IEZ1bmN0aW9uPAogICAgIGlmICghZmluZFNlc3Npb25PckNvbXBsZXRlV2l0aEVycm9yKCpwYXJh
bWV0ZXJzLCBjb21wbGV0aW9uSGFuZGxlcikpCiAgICAgICAgIHJldHVybjsKIAotICAgIFN0cmlu
ZyBuYW1lOwotICAgIGlmICghcGFyYW1ldGVycy0+Z2V0U3RyaW5nKCJuYW1lIl9zLCBuYW1lKSkg
eworYXV0byBuYW1lID0gcGFyYW1ldGVycy0+Z2V0U3RyaW5nKCJuYW1lIl9zKTsKKyAgICBpZiAo
IW5hbWUpIHsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChD
b21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OkludmFsaWRBcmd1bWVudCkpOwogICAgICAgICByZXR1
cm47CiAgICAgfQpAQCAtMTc4Niw4ICsxNzkxLDggQEAgdm9pZCBXZWJEcml2ZXJTZXJ2aWNlOjpk
ZWxldGVBbGxDb29raWVzKFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycywgRnVuY3QK
IAogc3RhdGljIGJvb2wgcHJvY2Vzc1BhdXNlQWN0aW9uKEpTT046Ok9iamVjdCYgYWN0aW9uSXRl
bSwgQWN0aW9uJiBhY3Rpb24sIE9wdGlvbmFsPFN0cmluZz4mIGVycm9yTWVzc2FnZSkKIHsKLSAg
ICBSZWZQdHI8SlNPTjo6VmFsdWU+IGR1cmF0aW9uVmFsdWU7Ci0gICAgaWYgKCFhY3Rpb25JdGVt
LmdldFZhbHVlKCJkdXJhdGlvbiJfcywgZHVyYXRpb25WYWx1ZSkpCisgICAgYXV0byBkdXJhdGlv
blZhbHVlID0gYWN0aW9uSXRlbS5nZXRWYWx1ZSgiZHVyYXRpb24iX3MpOworICAgIGlmICghZHVy
YXRpb25WYWx1ZSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBhdXRvIGR1cmF0aW9uID0g
dW5zaWduZWRWYWx1ZSgqZHVyYXRpb25WYWx1ZSk7CkBAIC0xODAyLDggKzE4MDcsNyBAQCBzdGF0
aWMgYm9vbCBwcm9jZXNzUGF1c2VBY3Rpb24oSlNPTjo6T2JqZWN0JiBhY3Rpb25JdGVtLCBBY3Rp
b24mIGFjdGlvbiwgT3B0aW9uYQogCiBzdGF0aWMgT3B0aW9uYWw8QWN0aW9uPiBwcm9jZXNzTnVs
bEFjdGlvbihjb25zdCBTdHJpbmcmIGlkLCBKU09OOjpPYmplY3QmIGFjdGlvbkl0ZW0sIE9wdGlv
bmFsPFN0cmluZz4mIGVycm9yTWVzc2FnZSkKIHsKLSAgICBTdHJpbmcgc3VidHlwZTsKLSAgICBh
Y3Rpb25JdGVtLmdldFN0cmluZygidHlwZSJfcywgc3VidHlwZSk7CisgICAgYXV0byBzdWJ0eXBl
ID0gYWN0aW9uSXRlbS5nZXRTdHJpbmcoInR5cGUiX3MpOwogICAgIGlmIChzdWJ0eXBlICE9ICJw
YXVzZSIpIHsKICAgICAgICAgZXJyb3JNZXNzYWdlID0gU3RyaW5nKCJUaGUgcGFyYW1ldGVyICd0
eXBlJyBpbiBudWxsIGFjdGlvbiBpcyBpbnZhbGlkIG9yIG1pc3NpbmciKTsKICAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKQEAgLTE4MTksOCArMTgyMyw3IEBAIHN0YXRpYyBPcHRpb25hbDxB
Y3Rpb24+IHByb2Nlc3NOdWxsQWN0aW9uKGNvbnN0IFN0cmluZyYgaWQsIEpTT046Ok9iamVjdCYg
YWN0aW9uCiBzdGF0aWMgT3B0aW9uYWw8QWN0aW9uPiBwcm9jZXNzS2V5QWN0aW9uKGNvbnN0IFN0
cmluZyYgaWQsIEpTT046Ok9iamVjdCYgYWN0aW9uSXRlbSwgT3B0aW9uYWw8U3RyaW5nPiYgZXJy
b3JNZXNzYWdlKQogewogICAgIEFjdGlvbjo6U3VidHlwZSBhY3Rpb25TdWJ0eXBlOwotICAgIFN0
cmluZyBzdWJ0eXBlOwotICAgIGFjdGlvbkl0ZW0uZ2V0U3RyaW5nKCJ0eXBlIl9zLCBzdWJ0eXBl
KTsKKyAgICBhdXRvIHN1YnR5cGUgPSBhY3Rpb25JdGVtLmdldFN0cmluZygidHlwZSJfcyk7CiAg
ICAgaWYgKHN1YnR5cGUgPT0gInBhdXNlIikKICAgICAgICAgYWN0aW9uU3VidHlwZSA9IEFjdGlv
bjo6U3VidHlwZTo6UGF1c2U7CiAgICAgZWxzZSBpZiAoc3VidHlwZSA9PSAia2V5VXAiKQpAQCAt
MTg0MSwxMyArMTg0NCwxMyBAQCBzdGF0aWMgT3B0aW9uYWw8QWN0aW9uPiBwcm9jZXNzS2V5QWN0
aW9uKGNvbnN0IFN0cmluZyYgaWQsIEpTT046Ok9iamVjdCYgYWN0aW9uSQogICAgICAgICBicmVh
azsKICAgICBjYXNlIEFjdGlvbjo6U3VidHlwZTo6S2V5VXA6CiAgICAgY2FzZSBBY3Rpb246OlN1
YnR5cGU6OktleURvd246IHsKLSAgICAgICAgUmVmUHRyPEpTT046OlZhbHVlPiBrZXlWYWx1ZTsK
LSAgICAgICAgaWYgKCFhY3Rpb25JdGVtLmdldFZhbHVlKCJ2YWx1ZSJfcywga2V5VmFsdWUpKSB7
CisgICAgICAgIGF1dG8ga2V5VmFsdWUgPSBhY3Rpb25JdGVtLmdldFZhbHVlKCJ2YWx1ZSJfcyk7
CisgICAgICAgIGlmICgha2V5VmFsdWUpIHsKICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IFN0
cmluZygiVGhlIHBhcmFtYXRlciAndmFsdWUnIGlzIG1pc3NpbmcgZm9yIGtleSB1cC9kb3duIGFj
dGlvbiIpOwogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAgICAgfQotICAg
ICAgICBTdHJpbmcga2V5OwotICAgICAgICBpZiAoIWtleVZhbHVlLT5hc1N0cmluZyhrZXkpIHx8
IGtleS5pc0VtcHR5KCkpIHsKKyAgICAgICAgYXV0byBrZXkgPSBrZXlWYWx1ZS0+YXNTdHJpbmco
KTsKKyAgICAgICAgaWYgKCFrZXkuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBlcnJvck1lc3Nh
Z2UgPSBTdHJpbmcoIlRoZSBwYXJhbWF0ZXIgJ3ZhbHVlJyBpcyBpbnZhbGlkIGZvciBrZXkgdXAv
ZG93biBhY3Rpb24iKTsKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAg
IH0KQEAgLTE4ODQsOCArMTg4Nyw3IEBAIHN0YXRpYyBNb3VzZUJ1dHRvbiBhY3Rpb25Nb3VzZUJ1
dHRvbih1bnNpZ25lZCBidXR0b24pCiBzdGF0aWMgT3B0aW9uYWw8QWN0aW9uPiBwcm9jZXNzUG9p
bnRlckFjdGlvbihjb25zdCBTdHJpbmcmIGlkLCBQb2ludGVyUGFyYW1ldGVycyYgcGFyYW1ldGVy
cywgSlNPTjo6T2JqZWN0JiBhY3Rpb25JdGVtLCBPcHRpb25hbDxTdHJpbmc+JiBlcnJvck1lc3Nh
Z2UpCiB7CiAgICAgQWN0aW9uOjpTdWJ0eXBlIGFjdGlvblN1YnR5cGU7Ci0gICAgU3RyaW5nIHN1
YnR5cGU7Ci0gICAgYWN0aW9uSXRlbS5nZXRTdHJpbmcoInR5cGUiX3MsIHN1YnR5cGUpOworICAg
IGF1dG8gc3VidHlwZSA9IGFjdGlvbkl0ZW0uZ2V0U3RyaW5nKCJ0eXBlIl9zKTsKICAgICBpZiAo
c3VidHlwZSA9PSAicGF1c2UiKQogICAgICAgICBhY3Rpb25TdWJ0eXBlID0gQWN0aW9uOjpTdWJ0
eXBlOjpQYXVzZTsKICAgICBlbHNlIGlmIChzdWJ0eXBlID09ICJwb2ludGVyVXAiKQpAQCAtMTkx
MSw4ICsxOTEzLDggQEAgc3RhdGljIE9wdGlvbmFsPEFjdGlvbj4gcHJvY2Vzc1BvaW50ZXJBY3Rp
b24oY29uc3QgU3RyaW5nJiBpZCwgUG9pbnRlclBhcmFtZXRlcnMKICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBBY3Rpb246OlN1YnR5cGU6OlBvaW50ZXJVcDoKICAgICBjYXNlIEFjdGlvbjo6U3Vi
dHlwZTo6UG9pbnRlckRvd246IHsKLSAgICAgICAgUmVmUHRyPEpTT046OlZhbHVlPiBidXR0b25W
YWx1ZTsKLSAgICAgICAgaWYgKCFhY3Rpb25JdGVtLmdldFZhbHVlKCJidXR0b24iX3MsIGJ1dHRv
blZhbHVlKSkgeworICAgICAgICBhdXRvIGJ1dHRvblZhbHVlID0gYWN0aW9uSXRlbS5nZXRWYWx1
ZSgiYnV0dG9uIl9zKTsKKyAgICAgICAgaWYgKCFidXR0b25WYWx1ZSkgewogICAgICAgICAgICAg
ZXJyb3JNZXNzYWdlID0gU3RyaW5nKCJUaGUgcGFyYW1hdGVyICdidXR0b24nIGlzIG1pc3Npbmcg
Zm9yIHBvaW50ZXIgdXAvZG93biBhY3Rpb24iKTsKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CiAgICAgICAgIH0KQEAgLTE5MjUsOCArMTkyNyw3IEBAIHN0YXRpYyBPcHRpb25hbDxB
Y3Rpb24+IHByb2Nlc3NQb2ludGVyQWN0aW9uKGNvbnN0IFN0cmluZyYgaWQsIFBvaW50ZXJQYXJh
bWV0ZXJzCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIEFjdGlvbjo6U3VidHlwZTo6
UG9pbnRlck1vdmU6IHsKLSAgICAgICAgUmVmUHRyPEpTT046OlZhbHVlPiBkdXJhdGlvblZhbHVl
OwotICAgICAgICBpZiAoYWN0aW9uSXRlbS5nZXRWYWx1ZSgiZHVyYXRpb24iX3MsIGR1cmF0aW9u
VmFsdWUpKSB7CisgICAgICAgIGlmIChhdXRvIGR1cmF0aW9uVmFsdWUgPSBhY3Rpb25JdGVtLmdl
dFZhbHVlKCJkdXJhdGlvbiJfcykpIHsKICAgICAgICAgICAgIGF1dG8gZHVyYXRpb24gPSB1bnNp
Z25lZFZhbHVlKCpkdXJhdGlvblZhbHVlKTsKICAgICAgICAgICAgIGlmICghZHVyYXRpb24pIHsK
ICAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBTdHJpbmcoIlRoZSBwYXJhbWV0ZXIgJ2R1
cmF0aW9uJyBpcyBpbnZhbGlkIGluIHBvaW50ZXIgbW92ZSBhY3Rpb24iKTsKQEAgLTE5MzUsMjAg
KzE5MzYsMTYgQEAgc3RhdGljIE9wdGlvbmFsPEFjdGlvbj4gcHJvY2Vzc1BvaW50ZXJBY3Rpb24o
Y29uc3QgU3RyaW5nJiBpZCwgUG9pbnRlclBhcmFtZXRlcnMKICAgICAgICAgICAgIGFjdGlvbi5k
dXJhdGlvbiA9IGR1cmF0aW9uLnZhbHVlKCk7CiAgICAgICAgIH0KIAotICAgICAgICBSZWZQdHI8
SlNPTjo6VmFsdWU+IG9yaWdpblZhbHVlOwotICAgICAgICBpZiAoYWN0aW9uSXRlbS5nZXRWYWx1
ZSgib3JpZ2luIl9zLCBvcmlnaW5WYWx1ZSkpIHsKLSAgICAgICAgICAgIGlmIChvcmlnaW5WYWx1
ZS0+dHlwZSgpID09IEpTT046OlZhbHVlOjpUeXBlOjpPYmplY3QpIHsKLSAgICAgICAgICAgICAg
ICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBvcmlnaW5PYmplY3Q7Ci0gICAgICAgICAgICAgICAgb3Jp
Z2luVmFsdWUtPmFzT2JqZWN0KG9yaWdpbk9iamVjdCk7Ci0gICAgICAgICAgICAgICAgU3RyaW5n
IGVsZW1lbnRJRDsKLSAgICAgICAgICAgICAgICBpZiAoIW9yaWdpbk9iamVjdC0+Z2V0U3RyaW5n
KFNlc3Npb246OndlYkVsZW1lbnRJZGVudGlmaWVyKCksIGVsZW1lbnRJRCkpIHsKKyAgICAgICAg
aWYgKGF1dG8gb3JpZ2luVmFsdWUgPSBhY3Rpb25JdGVtLmdldFZhbHVlKCJvcmlnaW4iX3MpKSB7
CisgICAgICAgICAgICBpZiAoYXV0byBvcmlnaW5PYmplY3QgPSBvcmlnaW5WYWx1ZS0+YXNPYmpl
Y3QoKSkgeworICAgICAgICAgICAgICAgIGF1dG8gZWxlbWVudElEID0gb3JpZ2luT2JqZWN0LT5n
ZXRTdHJpbmcoU2Vzc2lvbjo6d2ViRWxlbWVudElkZW50aWZpZXIoKSk7CisgICAgICAgICAgICAg
ICAgaWYgKCFlbGVtZW50SUQpIHsKICAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0g
U3RyaW5nKCJUaGUgcGFyYW1ldGVyICdvcmlnaW4nIGlzIG5vdCBhIHZhbGlkIHdlYiBlbGVtZW50
IG9iamVjdCBpbiBwb2ludGVyIG1vdmUgYWN0aW9uIik7CiAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGFj
dGlvbi5vcmlnaW4gPSBQb2ludGVyT3JpZ2luIHsgUG9pbnRlck9yaWdpbjo6VHlwZTo6RWxlbWVu
dCwgZWxlbWVudElEIH07CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIFN0
cmluZyBvcmlnaW47Ci0gICAgICAgICAgICAgICAgb3JpZ2luVmFsdWUtPmFzU3RyaW5nKG9yaWdp
bik7CisgICAgICAgICAgICAgICAgYXV0byBvcmlnaW4gPSBvcmlnaW5WYWx1ZS0+YXNTdHJpbmco
KTsKICAgICAgICAgICAgICAgICBpZiAob3JpZ2luID09ICJ2aWV3cG9ydCIpCiAgICAgICAgICAg
ICAgICAgICAgIGFjdGlvbi5vcmlnaW4gPSBQb2ludGVyT3JpZ2luIHsgUG9pbnRlck9yaWdpbjo6
VHlwZTo6Vmlld3BvcnQsIFdURjo6bnVsbG9wdCB9OwogICAgICAgICAgICAgICAgIGVsc2UgaWYg
KG9yaWdpbiA9PSAicG9pbnRlciIpCkBAIC0xOTYxLDggKzE5NTgsNyBAQCBzdGF0aWMgT3B0aW9u
YWw8QWN0aW9uPiBwcm9jZXNzUG9pbnRlckFjdGlvbihjb25zdCBTdHJpbmcmIGlkLCBQb2ludGVy
UGFyYW1ldGVycwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIGFjdGlvbi5vcmlnaW4gPSBQ
b2ludGVyT3JpZ2luIHsgUG9pbnRlck9yaWdpbjo6VHlwZTo6Vmlld3BvcnQsIFdURjo6bnVsbG9w
dCB9OwogCi0gICAgICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4geFZhbHVlOwotICAgICAgICBpZiAo
YWN0aW9uSXRlbS5nZXRWYWx1ZSgieCJfcywgeFZhbHVlKSkgeworICAgICAgICBpZiAoYXV0byB4
VmFsdWUgPSBhY3Rpb25JdGVtLmdldFZhbHVlKCJ4Il9zKSkgewogICAgICAgICAgICAgYXV0byB4
ID0gdmFsdWVBc051bWJlckluUmFuZ2UoKnhWYWx1ZSwgSU5UX01JTik7CiAgICAgICAgICAgICBp
ZiAoIXgpIHsKICAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBTdHJpbmcoIlRoZSBwYXJh
bWF0ZXIgJ3gnIGlzIGludmFsaWQgZm9yIHBvaW50ZXIgbW92ZSBhY3Rpb24iKTsKQEAgLTE5NzEs
OCArMTk2Nyw3IEBAIHN0YXRpYyBPcHRpb25hbDxBY3Rpb24+IHByb2Nlc3NQb2ludGVyQWN0aW9u
KGNvbnN0IFN0cmluZyYgaWQsIFBvaW50ZXJQYXJhbWV0ZXJzCiAgICAgICAgICAgICBhY3Rpb24u
eCA9IHgudmFsdWUoKTsKICAgICAgICAgfQogCi0gICAgICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4g
eVZhbHVlOwotICAgICAgICBpZiAoYWN0aW9uSXRlbS5nZXRWYWx1ZSgieSJfcywgeVZhbHVlKSkg
eworICAgICAgICBpZiAoYXV0byB5VmFsdWUgPSBhY3Rpb25JdGVtLmdldFZhbHVlKCJ5Il9zKSkg
ewogICAgICAgICAgICAgYXV0byB5ID0gdmFsdWVBc051bWJlckluUmFuZ2UoKnlWYWx1ZSwgSU5U
X01JTik7CiAgICAgICAgICAgICBpZiAoIXkpIHsKICAgICAgICAgICAgICAgICBlcnJvck1lc3Nh
Z2UgPSBTdHJpbmcoIlRoZSBwYXJhbWF0ZXIgJ3knIGlzIGludmFsaWQgZm9yIHBvaW50ZXIgbW92
ZSBhY3Rpb24iKTsKQEAgLTE5OTUsMTggKzE5OTAsMTkgQEAgc3RhdGljIE9wdGlvbmFsPEFjdGlv
bj4gcHJvY2Vzc1BvaW50ZXJBY3Rpb24oY29uc3QgU3RyaW5nJiBpZCwgUG9pbnRlclBhcmFtZXRl
cnMKIHN0YXRpYyBPcHRpb25hbDxQb2ludGVyUGFyYW1ldGVycz4gcHJvY2Vzc1BvaW50ZXJQYXJh
bWV0ZXJzKEpTT046Ok9iamVjdCYgYWN0aW9uU2VxdWVuY2UsIE9wdGlvbmFsPFN0cmluZz4mIGVy
cm9yTWVzc2FnZSkKIHsKICAgICBQb2ludGVyUGFyYW1ldGVycyBwYXJhbWV0ZXJzOwotICAgIFJl
ZlB0cjxKU09OOjpWYWx1ZT4gcGFyYW1ldGVyc0RhdGFWYWx1ZTsKLSAgICBpZiAoIWFjdGlvblNl
cXVlbmNlLmdldFZhbHVlKCJwYXJhbWV0ZXJzIl9zLCBwYXJhbWV0ZXJzRGF0YVZhbHVlKSkKKwor
ICAgIGF1dG8gcGFyYW1ldGVyc0RhdGFWYWx1ZSA9IGFjdGlvblNlcXVlbmNlLmdldFZhbHVlKCJw
YXJhbWV0ZXJzIl9zKTsKKyAgICBpZiAoIXBhcmFtZXRlcnNEYXRhVmFsdWUpCiAgICAgICAgIHJl
dHVybiBwYXJhbWV0ZXJzOwogCi0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVyc0Rh
dGE7Ci0gICAgaWYgKCFwYXJhbWV0ZXJzRGF0YVZhbHVlLT5hc09iamVjdChwYXJhbWV0ZXJzRGF0
YSkpIHsKKyAgICBhdXRvIHBhcmFtZXRlcnNEYXRhID0gcGFyYW1ldGVyc0RhdGFWYWx1ZS0+YXNP
YmplY3QoKTsKKyAgICBpZiAoIXBhcmFtZXRlcnNEYXRhKSB7CiAgICAgICAgIGVycm9yTWVzc2Fn
ZSA9IFN0cmluZygiQWN0aW9uIHNlcXVlbmNlIHBvaW50ZXIgcGFyYW1ldGVycyBpcyBub3QgYW4g
b2JqZWN0Iik7CiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgfQogCi0gICAgU3Ry
aW5nIHBvaW50ZXJUeXBlOwotICAgIGlmICghcGFyYW1ldGVyc0RhdGEtPmdldFN0cmluZygicG9p
bnRlclR5cGUiX3MsIHBvaW50ZXJUeXBlKSkKKyAgICBhdXRvIHBvaW50ZXJUeXBlID0gcGFyYW1l
dGVyc0RhdGEtPmdldFN0cmluZygicG9pbnRlclR5cGUiX3MpOworICAgIGlmICghcG9pbnRlclR5
cGUpCiAgICAgICAgIHJldHVybiBwYXJhbWV0ZXJzOwogCiAgICAgaWYgKHBvaW50ZXJUeXBlID09
ICJtb3VzZSIpCkBAIC0yMDI1LDE0ICsyMDIxLDEzIEBAIHN0YXRpYyBPcHRpb25hbDxQb2ludGVy
UGFyYW1ldGVycz4gcHJvY2Vzc1BvaW50ZXJQYXJhbWV0ZXJzKEpTT046Ok9iamVjdCYgYWN0aW9u
CiAKIHN0YXRpYyBPcHRpb25hbDxWZWN0b3I8QWN0aW9uPj4gcHJvY2Vzc0lucHV0QWN0aW9uU2Vx
dWVuY2UoU2Vzc2lvbiYgc2Vzc2lvbiwgSlNPTjo6VmFsdWUmIGFjdGlvblNlcXVlbmNlVmFsdWUs
IE9wdGlvbmFsPFN0cmluZz4mIGVycm9yTWVzc2FnZSkKIHsKLSAgICBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiBhY3Rpb25TZXF1ZW5jZTsKLSAgICBpZiAoIWFjdGlvblNlcXVlbmNlVmFsdWUuYXNPYmpl
Y3QoYWN0aW9uU2VxdWVuY2UpKSB7CisgICAgYXV0byBhY3Rpb25TZXF1ZW5jZSA9IGFjdGlvblNl
cXVlbmNlVmFsdWUuYXNPYmplY3QoKTsKKyAgICBpZiAoIWFjdGlvblNlcXVlbmNlKSB7CiAgICAg
ICAgIGVycm9yTWVzc2FnZSA9IFN0cmluZygiVGhlIGFjdGlvbiBzZXF1ZW5jZSBpcyBub3QgYW4g
b2JqZWN0Iik7CiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgfQogCi0gICAgU3Ry
aW5nIHR5cGU7Ci0gICAgYWN0aW9uU2VxdWVuY2UtPmdldFN0cmluZygidHlwZSJfcywgdHlwZSk7
CisgICAgYXV0byB0eXBlID0gYWN0aW9uU2VxdWVuY2UtPmdldFN0cmluZygidHlwZSJfcyk7CiAg
ICAgSW5wdXRTb3VyY2U6OlR5cGUgaW5wdXRTb3VyY2VUeXBlOwogICAgIGlmICh0eXBlID09ICJr
ZXkiKQogICAgICAgICBpbnB1dFNvdXJjZVR5cGUgPSBJbnB1dFNvdXJjZTo6VHlwZTo6S2V5OwpA
QCAtMjA0NSw4ICsyMDQwLDggQEAgc3RhdGljIE9wdGlvbmFsPFZlY3RvcjxBY3Rpb24+PiBwcm9j
ZXNzSW5wdXRBY3Rpb25TZXF1ZW5jZShTZXNzaW9uJiBzZXNzaW9uLCBKU08KICAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKICAgICB9CiAKLSAgICBTdHJpbmcgaWQ7Ci0gICAgaWYgKCFhY3Rp
b25TZXF1ZW5jZS0+Z2V0U3RyaW5nKCJpZCJfcywgaWQpKSB7CisgICAgYXV0byBpZCA9IGFjdGlv
blNlcXVlbmNlLT5nZXRTdHJpbmcoImlkIl9zKTsKKyAgICBpZiAoIWlkKSB7CiAgICAgICAgIGVy
cm9yTWVzc2FnZSA9IFN0cmluZygiVGhlIHBhcmFtZXRlciAnaWQnIGlzIGludmFsaWQgb3IgbWlz
c2luZyBpbiBhY3Rpb24gc2VxdWVuY2UiKTsKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
ICAgICB9CkBAIC0yMDcyLDggKzIwNjcsOCBAQCBzdGF0aWMgT3B0aW9uYWw8VmVjdG9yPEFjdGlv
bj4+IHByb2Nlc3NJbnB1dEFjdGlvblNlcXVlbmNlKFNlc3Npb24mIHNlc3Npb24sIEpTTwogICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIH0KIAotICAgIFJlZlB0cjxKU09OOjpBcnJh
eT4gYWN0aW9uSXRlbXM7Ci0gICAgaWYgKCFhY3Rpb25TZXF1ZW5jZS0+Z2V0QXJyYXkoImFjdGlv
bnMiX3MsIGFjdGlvbkl0ZW1zKSkgeworICAgIGF1dG8gYWN0aW9uSXRlbXMgPSBhY3Rpb25TZXF1
ZW5jZS0+Z2V0QXJyYXkoImFjdGlvbnMiX3MpOworICAgIGlmICghYWN0aW9uSXRlbXMpIHsKICAg
ICAgICAgZXJyb3JNZXNzYWdlID0gU3RyaW5nKCJUaGUgcGFyYW1ldGVyICdhY3Rpb25zJyBpcyBp
bnZhbGlkIG9yIG5vdCBwcmVzZW50IGluIGFjdGlvbiBzZXF1ZW5jZSIpOwogICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwogICAgIH0KQEAgLTIwODEsOSArMjA3Niw4IEBAIHN0YXRpYyBPcHRp
b25hbDxWZWN0b3I8QWN0aW9uPj4gcHJvY2Vzc0lucHV0QWN0aW9uU2VxdWVuY2UoU2Vzc2lvbiYg
c2Vzc2lvbiwgSlNPCiAgICAgVmVjdG9yPEFjdGlvbj4gYWN0aW9uczsKICAgICB1bnNpZ25lZCBh
Y3Rpb25JdGVtc0xlbmd0aCA9IGFjdGlvbkl0ZW1zLT5sZW5ndGgoKTsKICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgYWN0aW9uSXRlbXNMZW5ndGg7ICsraSkgewotICAgICAgICBhdXRvIGFj
dGlvbkl0ZW1WYWx1ZSA9IGFjdGlvbkl0ZW1zLT5nZXQoaSk7Ci0gICAgICAgIFJlZlB0cjxKU09O
OjpPYmplY3Q+IGFjdGlvbkl0ZW07Ci0gICAgICAgIGlmICghYWN0aW9uSXRlbVZhbHVlLT5hc09i
amVjdChhY3Rpb25JdGVtKSkgeworICAgICAgICBhdXRvIGFjdGlvbkl0ZW0gPSBhY3Rpb25JdGVt
cy0+Z2V0KGkpLT5hc09iamVjdCgpOworICAgICAgICBpZiAoIWFjdGlvbkl0ZW0pIHsKICAgICAg
ICAgICAgIGVycm9yTWVzc2FnZSA9IFN0cmluZygiQW4gYWN0aW9uIGluIGFjdGlvbiBzZXF1ZW5j
ZSBpcyBub3QgYW4gb2JqZWN0Iik7CiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owog
ICAgICAgICB9CkBAIC0yMTExLDggKzIxMDUsOCBAQCB2b2lkIFdlYkRyaXZlclNlcnZpY2U6OnBl
cmZvcm1BY3Rpb25zKFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycywgRnVuY3Rpbwog
ICAgIGlmICghZmluZFNlc3Npb25PckNvbXBsZXRlV2l0aEVycm9yKCpwYXJhbWV0ZXJzLCBjb21w
bGV0aW9uSGFuZGxlcikpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlZlB0cjxKU09OOjpBcnJh
eT4gYWN0aW9uc0FycmF5OwotICAgIGlmICghcGFyYW1ldGVycy0+Z2V0QXJyYXkoImFjdGlvbnMi
X3MsIGFjdGlvbnNBcnJheSkpIHsKKyAgICBhdXRvIGFjdGlvbnNBcnJheSA9IHBhcmFtZXRlcnMt
PmdldEFycmF5KCJhY3Rpb25zIl9zKTsKKyAgICBpZiAoIWFjdGlvbnNBcnJheSkgewogICAgICAg
ICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVy
cm9yQ29kZTo6SW52YWxpZEFyZ3VtZW50LCBTdHJpbmcoIlRoZSBwYXJhbWF0ZXIgJ2FjdGlvbnMn
IGlzIGludmFsaWQgb3Igbm90IHByZXNlbnQiKSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQpA
QCAtMjEyMiw3ICsyMTE2LDcgQEAgdm9pZCBXZWJEcml2ZXJTZXJ2aWNlOjpwZXJmb3JtQWN0aW9u
cyhSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMsIEZ1bmN0aW8KICAgICB1bnNpZ25l
ZCBhY3Rpb25zQXJyYXlMZW5ndGggPSBhY3Rpb25zQXJyYXktPmxlbmd0aCgpOwogICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBhY3Rpb25zQXJyYXlMZW5ndGg7ICsraSkgewogICAgICAgICBh
dXRvIGFjdGlvblNlcXVlbmNlID0gYWN0aW9uc0FycmF5LT5nZXQoaSk7Ci0gICAgICAgIGF1dG8g
aW5wdXRTb3VyY2VBY3Rpb25zID0gcHJvY2Vzc0lucHV0QWN0aW9uU2VxdWVuY2UoKm1fc2Vzc2lv
biwgKmFjdGlvblNlcXVlbmNlLCBlcnJvck1lc3NhZ2UpOworICAgICAgICBhdXRvIGlucHV0U291
cmNlQWN0aW9ucyA9IHByb2Nlc3NJbnB1dEFjdGlvblNlcXVlbmNlKCptX3Nlc3Npb24sIGFjdGlv
blNlcXVlbmNlLCBlcnJvck1lc3NhZ2UpOwogICAgICAgICBpZiAoIWlucHV0U291cmNlQWN0aW9u
cykgewogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChD
b21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OkludmFsaWRBcmd1bWVudCwgZXJyb3JNZXNzYWdlLnZh
bHVlKCkpKTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTIyMDIsOCArMjE5Niw4IEBAIHZvaWQg
V2ViRHJpdmVyU2VydmljZTo6c2VuZEFsZXJ0VGV4dChSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBh
cmFtZXRlcnMsIEZ1bmN0aW9uCiAgICAgaWYgKCFmaW5kU2Vzc2lvbk9yQ29tcGxldGVXaXRoRXJy
b3IoKnBhcmFtZXRlcnMsIGNvbXBsZXRpb25IYW5kbGVyKSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgU3RyaW5nIHRleHQ7Ci0gICAgaWYgKCFwYXJhbWV0ZXJzLT5nZXRTdHJpbmcoInRleHQiX3Ms
IHRleHQpKSB7CisgICAgYXV0byB0ZXh0ID0gcGFyYW1ldGVycy0+Z2V0U3RyaW5nKCJ0ZXh0Il9z
KTsKKyAgICBpZiAoIXRleHQpIHsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJl
c3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OkludmFsaWRBcmd1bWVudCkpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkRyaXZlci9XZWJE
cml2ZXJTZXJ2aWNlLmggYi9Tb3VyY2UvV2ViRHJpdmVyL1dlYkRyaXZlclNlcnZpY2UuaAppbmRl
eCBhMzRiZWI4ZjBkZDNkNjQwNGNjOTY3NmRmMjBiNDBiODIwMTk1ODBiLi5lZDlkYjA4ODU3Yjk0
NzQ5ZjRlN2E0OGU4ZjBhOTZmNGI0NDMyYjM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViRHJpdmVy
L1dlYkRyaXZlclNlcnZpY2UuaAorKysgYi9Tb3VyY2UvV2ViRHJpdmVyL1dlYkRyaXZlclNlcnZp
Y2UuaApAQCAtMTIyLDggKzEyMiw4IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPEpTT046Ok9iamVj
dD4gdmFsaWRhdGVkQ2FwYWJpbGl0aWVzKGNvbnN0IEpTT046Ok9iamVjdCYpIGNvbnN0OwogICAg
IFJlZlB0cjxKU09OOjpPYmplY3Q+IG1lcmdlQ2FwYWJpbGl0aWVzKGNvbnN0IEpTT046Ok9iamVj
dCYsIGNvbnN0IEpTT046Ok9iamVjdCYpIGNvbnN0OwogICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+
IG1hdGNoQ2FwYWJpbGl0aWVzKGNvbnN0IEpTT046Ok9iamVjdCYpIGNvbnN0OwotICAgIGJvb2wg
cGxhdGZvcm1WYWxpZGF0ZUNhcGFiaWxpdHkoY29uc3QgU3RyaW5nJiwgY29uc3QgUmVmUHRyPEpT
T046OlZhbHVlPiYpIGNvbnN0OwotICAgIGJvb2wgcGxhdGZvcm1NYXRjaENhcGFiaWxpdHkoY29u
c3QgU3RyaW5nJiwgY29uc3QgUmVmUHRyPEpTT046OlZhbHVlPiYpIGNvbnN0OworICAgIGJvb2wg
cGxhdGZvcm1WYWxpZGF0ZUNhcGFiaWxpdHkoY29uc3QgU3RyaW5nJiwgY29uc3QgUmVmPEpTT046
OlZhbHVlPiYpIGNvbnN0OworICAgIGJvb2wgcGxhdGZvcm1NYXRjaENhcGFiaWxpdHkoY29uc3Qg
U3RyaW5nJiwgY29uc3QgUmVmPEpTT046OlZhbHVlPiYpIGNvbnN0OwogICAgIGJvb2wgcGxhdGZv
cm1TdXBwb3J0UHJveHlUeXBlKGNvbnN0IFN0cmluZyYpIGNvbnN0OwogICAgIHZvaWQgcGFyc2VD
YXBhYmlsaXRpZXMoY29uc3QgSlNPTjo6T2JqZWN0JiBkZXNpcmVkQ2FwYWJpbGl0aWVzLCBDYXBh
YmlsaXRpZXMmKSBjb25zdDsKICAgICB2b2lkIHBsYXRmb3JtUGFyc2VDYXBhYmlsaXRpZXMoY29u
c3QgSlNPTjo6T2JqZWN0JiBkZXNpcmVkQ2FwYWJpbGl0aWVzLCBDYXBhYmlsaXRpZXMmKSBjb25z
dDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJEcml2ZXIvZ3RrL1dlYkRyaXZlclNlcnZpY2VHdGsu
Y3BwIGIvU291cmNlL1dlYkRyaXZlci9ndGsvV2ViRHJpdmVyU2VydmljZUd0ay5jcHAKaW5kZXgg
MjRkMWJkZDAxNGEwNzBiNTk3NjQ0YjU1MzY3ZDQzNzQwN2UyYzE5NC4uNDRjOTFhYTVmNjczNzVl
MTU5OTQwYjRiMGEwZGQ5NDRiZmQwZjJmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkRyaXZlci9n
dGsvV2ViRHJpdmVyU2VydmljZUd0ay5jcHAKKysrIGIvU291cmNlL1dlYkRyaXZlci9ndGsvV2Vi
RHJpdmVyU2VydmljZUd0ay5jcHAKQEAgLTQwLDY0ICs0MCw0OCBAQCBDYXBhYmlsaXRpZXMgV2Vi
RHJpdmVyU2VydmljZTo6cGxhdGZvcm1DYXBhYmlsaXRpZXMoKQogICAgIHJldHVybiBjYXBhYmls
aXRpZXM7CiB9CiAKLWJvb2wgV2ViRHJpdmVyU2VydmljZTo6cGxhdGZvcm1WYWxpZGF0ZUNhcGFi
aWxpdHkoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBSZWZQdHI8SlNPTjo6VmFsdWU+JiB2YWx1
ZSkgY29uc3QKK2Jvb2wgV2ViRHJpdmVyU2VydmljZTo6cGxhdGZvcm1WYWxpZGF0ZUNhcGFiaWxp
dHkoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBSZWY8SlNPTjo6VmFsdWU+JiB2YWx1ZSkgY29u
c3QKIHsKICAgICBpZiAobmFtZSAhPSAid2Via2l0Z3RrOmJyb3dzZXJPcHRpb25zIikKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBicm93c2VyT3B0aW9u
czsKLSAgICBpZiAoIXZhbHVlLT5hc09iamVjdChicm93c2VyT3B0aW9ucykpCisgICAgYXV0byBi
cm93c2VyT3B0aW9ucyA9IHZhbHVlLT5hc09iamVjdCgpOworICAgIGlmICghYnJvd3Nlck9wdGlv
bnMpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChicm93c2VyT3B0aW9ucy0+aXNO
dWxsKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgUmVmUHRyPEpTT046OlZhbHVlPiBi
aW5hcnlWYWx1ZTsKLSAgICBTdHJpbmcgYmluYXJ5OwotICAgIGlmIChicm93c2VyT3B0aW9ucy0+
Z2V0VmFsdWUoImJpbmFyeSJfcywgYmluYXJ5VmFsdWUpICYmICFiaW5hcnlWYWx1ZS0+YXNTdHJp
bmcoYmluYXJ5KSkKKyAgICBhdXRvIGJpbmFyeSA9IGJyb3dzZXJPcHRpb25zLT5nZXRTdHJpbmco
ImJpbmFyeSJfcyk7CisgICAgaWYgKCFiaW5hcnkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gdXNlT3ZlcmxheVNjcm9sbGJhcnNWYWx1ZTsKLSAgICBi
b29sIHVzZU92ZXJsYXlTY3JvbGxiYXJzOwotICAgIGlmIChicm93c2VyT3B0aW9ucy0+Z2V0VmFs
dWUoInVzZU92ZXJsYXlTY3JvbGxiYXJzIl9zLCB1c2VPdmVybGF5U2Nyb2xsYmFyc1ZhbHVlKSAm
JiAhdXNlT3ZlcmxheVNjcm9sbGJhcnNWYWx1ZS0+YXNCb29sZWFuKHVzZU92ZXJsYXlTY3JvbGxi
YXJzKSkKKyAgICBhdXRvIHVzZU92ZXJsYXlTY3JvbGxiYXJzID0gYnJvd3Nlck9wdGlvbnMtPmdl
dEJvb2xlYW4oInVzZU92ZXJsYXlTY3JvbGxiYXJzIl9zKTsKKyAgICBpZiAoIXVzZU92ZXJsYXlT
Y3JvbGxiYXJzKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBSZWZQdHI8SlNPTjo6VmFs
dWU+IGJyb3dzZXJBcmd1bWVudHNWYWx1ZTsKLSAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IGJyb3dz
ZXJBcmd1bWVudHM7Ci0gICAgaWYgKGJyb3dzZXJPcHRpb25zLT5nZXRWYWx1ZSgiYXJncyJfcywg
YnJvd3NlckFyZ3VtZW50c1ZhbHVlKSkgewotICAgICAgICBpZiAoIWJyb3dzZXJBcmd1bWVudHNW
YWx1ZS0+YXNBcnJheShicm93c2VyQXJndW1lbnRzKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLQorICAgIGlmIChhdXRvIGJyb3dzZXJBcmd1bWVudHMgPSBicm93c2VyT3B0aW9ucy0+Z2V0
QXJyYXkoImFyZ3MiX3MpKSB7CiAgICAgICAgIHVuc2lnbmVkIGJyb3dzZXJBcmd1bWVudHNMZW5n
dGggPSBicm93c2VyQXJndW1lbnRzLT5sZW5ndGgoKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGJyb3dzZXJBcmd1bWVudHNMZW5ndGg7ICsraSkgewotICAgICAgICAgICAgUmVm
UHRyPEpTT046OlZhbHVlPiB2YWx1ZSA9IGJyb3dzZXJBcmd1bWVudHMtPmdldChpKTsKLSAgICAg
ICAgICAgIFN0cmluZyBhcmd1bWVudDsKLSAgICAgICAgICAgIGlmICghdmFsdWUtPmFzU3RyaW5n
KGFyZ3VtZW50KSkKKyAgICAgICAgICAgIGF1dG8gYXJndW1lbnQgPSBicm93c2VyQXJndW1lbnRz
LT5nZXQoaSktPmFzU3RyaW5nKCk7CisgICAgICAgICAgICBpZiAoIWFyZ3VtZW50KQogICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgIH0KIAotICAgIFJlZlB0cjxK
U09OOjpWYWx1ZT4gY2VydGlmaWNhdGVzVmFsdWU7Ci0gICAgaWYgKGJyb3dzZXJPcHRpb25zLT5n
ZXRWYWx1ZSgiY2VydGlmaWNhdGVzIl9zLCBjZXJ0aWZpY2F0ZXNWYWx1ZSkpIHsKLSAgICAgICAg
UmVmUHRyPEpTT046OkFycmF5PiBjZXJ0aWZpY2F0ZXM7Ci0gICAgICAgIGlmICghY2VydGlmaWNh
dGVzVmFsdWUtPmFzQXJyYXkoY2VydGlmaWNhdGVzKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLQorICAgIGlmIChhdXRvIGNlcnRpZmljYXRlcyA9IGJyb3dzZXJPcHRpb25zLT5nZXRBcnJh
eSgiY2VydGlmaWNhdGVzIl9zKSkgewogICAgICAgICB1bnNpZ25lZCBjZXJ0aWZpY2F0ZXNMZW5n
dGggPSBjZXJ0aWZpY2F0ZXMtPmxlbmd0aCgpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgY2VydGlmaWNhdGVzTGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIFJlZlB0cjxKU09O
OjpWYWx1ZT4gY2VydGlmaWNhdGVWYWx1ZSA9IGNlcnRpZmljYXRlcy0+Z2V0KGkpOwotICAgICAg
ICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gY2VydGlmaWNhdGU7Ci0gICAgICAgICAgICBpZiAo
IWNlcnRpZmljYXRlVmFsdWUtPmFzT2JqZWN0KGNlcnRpZmljYXRlKSkKKyAgICAgICAgICAgIGF1
dG8gY2VydGlmaWNhdGUgPSBjZXJ0aWZpY2F0ZXMtPmdldChpKS0+YXNPYmplY3QoKTsKKyAgICAg
ICAgICAgIGlmICghY2VydGlmaWNhdGUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgICAgICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IGhvc3RWYWx1ZTsKLSAgICAgICAgICAg
IFN0cmluZyBob3N0OwotICAgICAgICAgICAgaWYgKCFjZXJ0aWZpY2F0ZS0+Z2V0VmFsdWUoImhv
c3QiX3MsIGhvc3RWYWx1ZSkgfHwgIWhvc3RWYWx1ZS0+YXNTdHJpbmcoaG9zdCkpCisgICAgICAg
ICAgICBhdXRvIGhvc3QgPSBjZXJ0aWZpY2F0ZS0+Z2V0U3RyaW5nKCJob3N0Il9zKTsKKyAgICAg
ICAgICAgIGlmICghaG9zdCkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAg
ICAgICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gY2VydGlmaWNhdGVGaWxlVmFsdWU7Ci0gICAgICAg
ICAgICBTdHJpbmcgY2VydGlmaWNhdGVGaWxlOwotICAgICAgICAgICAgaWYgKCFjZXJ0aWZpY2F0
ZS0+Z2V0VmFsdWUoImNlcnRpZmljYXRlRmlsZSJfcywgY2VydGlmaWNhdGVGaWxlVmFsdWUpIHx8
ICFjZXJ0aWZpY2F0ZUZpbGVWYWx1ZS0+YXNTdHJpbmcoY2VydGlmaWNhdGVGaWxlKSkKKyAgICAg
ICAgICAgIGF1dG8gY2VydGlmaWNhdGVGaWxlID0gY2VydGlmaWNhdGUtPmdldFN0cmluZygiY2Vy
dGlmaWNhdGVGaWxlIl9zKTsKKyAgICAgICAgICAgIGlmICghY2VydGlmaWNhdGVGaWxlKQogICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgIH0KQEAgLTEwNSw3ICs4
OSw3IEBAIGJvb2wgV2ViRHJpdmVyU2VydmljZTo6cGxhdGZvcm1WYWxpZGF0ZUNhcGFiaWxpdHko
Y29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBSZWZQCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJv
b2wgV2ViRHJpdmVyU2VydmljZTo6cGxhdGZvcm1NYXRjaENhcGFiaWxpdHkoY29uc3QgU3RyaW5n
JiwgY29uc3QgUmVmUHRyPEpTT046OlZhbHVlPiYpIGNvbnN0Citib29sIFdlYkRyaXZlclNlcnZp
Y2U6OnBsYXRmb3JtTWF0Y2hDYXBhYmlsaXR5KGNvbnN0IFN0cmluZyYsIGNvbnN0IFJlZjxKU09O
OjpWYWx1ZT4mKSBjb25zdAogewogICAgIHJldHVybiB0cnVlOwogfQpAQCAtMTE2LDUzICsxMDAs
NDYgQEAgdm9pZCBXZWJEcml2ZXJTZXJ2aWNlOjpwbGF0Zm9ybVBhcnNlQ2FwYWJpbGl0aWVzKGNv
bnN0IEpTT046Ok9iamVjdCYgbWF0Y2hlZENhcGEKICAgICBjYXBhYmlsaXRpZXMuYnJvd3NlckFy
Z3VtZW50cyA9IFZlY3RvcjxTdHJpbmc+IHsgIi0tYXV0b21hdGlvbiJfcyB9OwogICAgIGNhcGFi
aWxpdGllcy51c2VPdmVybGF5U2Nyb2xsYmFycyA9IHRydWU7CiAKLSAgICBSZWZQdHI8SlNPTjo6
T2JqZWN0PiBicm93c2VyT3B0aW9uczsKLSAgICBpZiAoIW1hdGNoZWRDYXBhYmlsaXRpZXMuZ2V0
T2JqZWN0KCJ3ZWJraXRndGs6YnJvd3Nlck9wdGlvbnMiX3MsIGJyb3dzZXJPcHRpb25zKSkKKyAg
ICBhdXRvIGJyb3dzZXJPcHRpb25zID0gbWF0Y2hlZENhcGFiaWxpdGllcy5nZXRPYmplY3QoIndl
YmtpdGd0azpicm93c2VyT3B0aW9ucyJfcyk7CisgICAgaWYgKCFicm93c2VyT3B0aW9ucykKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgU3RyaW5nIGJyb3dzZXJCaW5hcnk7Ci0gICAgaWYgKGJyb3dz
ZXJPcHRpb25zLT5nZXRTdHJpbmcoImJpbmFyeSJfcywgYnJvd3NlckJpbmFyeSkpIHsKKyAgICBh
dXRvIGJyb3dzZXJCaW5hcnkgPSBicm93c2VyT3B0aW9ucy0+Z2V0U3RyaW5nKCJiaW5hcnkiX3Mp
OworICAgIGlmICghIWJyb3dzZXJCaW5hcnkpIHsKICAgICAgICAgY2FwYWJpbGl0aWVzLmJyb3dz
ZXJCaW5hcnkgPSBicm93c2VyQmluYXJ5OwogICAgICAgICBjYXBhYmlsaXRpZXMuYnJvd3NlckFy
Z3VtZW50cyA9IFdURjo6bnVsbG9wdDsKICAgICB9CiAKLSAgICBSZWZQdHI8SlNPTjo6QXJyYXk+
IGJyb3dzZXJBcmd1bWVudHM7Ci0gICAgaWYgKGJyb3dzZXJPcHRpb25zLT5nZXRBcnJheSgiYXJn
cyJfcywgYnJvd3NlckFyZ3VtZW50cykgJiYgYnJvd3NlckFyZ3VtZW50cy0+bGVuZ3RoKCkpIHsK
KyAgICBhdXRvIGJyb3dzZXJBcmd1bWVudHMgPSBicm93c2VyT3B0aW9ucy0+Z2V0QXJyYXkoImFy
Z3MiX3MpOworICAgIGlmIChicm93c2VyQXJndW1lbnRzICYmIGJyb3dzZXJBcmd1bWVudHMtPmxl
bmd0aCgpKSB7CiAgICAgICAgIHVuc2lnbmVkIGJyb3dzZXJBcmd1bWVudHNMZW5ndGggPSBicm93
c2VyQXJndW1lbnRzLT5sZW5ndGgoKTsKICAgICAgICAgY2FwYWJpbGl0aWVzLmJyb3dzZXJBcmd1
bWVudHMgPSBWZWN0b3I8U3RyaW5nPigpOwogICAgICAgICBjYXBhYmlsaXRpZXMuYnJvd3NlckFy
Z3VtZW50cy0+cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShicm93c2VyQXJndW1lbnRzTGVuZ3RoKTsK
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJyb3dzZXJBcmd1bWVudHNMZW5ndGg7
ICsraSkgewotICAgICAgICAgICAgUmVmUHRyPEpTT046OlZhbHVlPiB2YWx1ZSA9IGJyb3dzZXJB
cmd1bWVudHMtPmdldChpKTsKLSAgICAgICAgICAgIFN0cmluZyBhcmd1bWVudDsKLSAgICAgICAg
ICAgIHZhbHVlLT5hc1N0cmluZyhhcmd1bWVudCk7CisgICAgICAgICAgICBhdXRvIGFyZ3VtZW50
ID0gYnJvd3NlckFyZ3VtZW50cy0+Z2V0KGkpLT5hc1N0cmluZygpOwogICAgICAgICAgICAgQVNT
RVJUKCFhcmd1bWVudC5pc051bGwoKSk7CiAgICAgICAgICAgICBjYXBhYmlsaXRpZXMuYnJvd3Nl
ckFyZ3VtZW50cy0+dW5jaGVja2VkQXBwZW5kKFdURk1vdmUoYXJndW1lbnQpKTsKICAgICAgICAg
fQogICAgIH0KIAotICAgIGJvb2wgdXNlT3ZlcmxheVNjcm9sbGJhcnM7Ci0gICAgaWYgKGJyb3dz
ZXJPcHRpb25zLT5nZXRCb29sZWFuKCJ1c2VPdmVybGF5U2Nyb2xsYmFycyJfcywgdXNlT3Zlcmxh
eVNjcm9sbGJhcnMpKQorICAgIGlmIChhdXRvIHVzZU92ZXJsYXlTY3JvbGxiYXJzID0gYnJvd3Nl
ck9wdGlvbnMtPmdldEJvb2xlYW4oInVzZU92ZXJsYXlTY3JvbGxiYXJzIl9zKSkKICAgICAgICAg
Y2FwYWJpbGl0aWVzLnVzZU92ZXJsYXlTY3JvbGxiYXJzID0gdXNlT3ZlcmxheVNjcm9sbGJhcnM7
CiAgICAgZWxzZQogICAgICAgICBjYXBhYmlsaXRpZXMudXNlT3ZlcmxheVNjcm9sbGJhcnMgPSB0
cnVlOwogCi0gICAgUmVmUHRyPEpTT046OkFycmF5PiBjZXJ0aWZpY2F0ZXM7Ci0gICAgaWYgKGJy
b3dzZXJPcHRpb25zLT5nZXRBcnJheSgiY2VydGlmaWNhdGVzIl9zLCBjZXJ0aWZpY2F0ZXMpICYm
IGNlcnRpZmljYXRlcy0+bGVuZ3RoKCkpIHsKKyAgICBhdXRvIGNlcnRpZmljYXRlcyA9IGJyb3dz
ZXJPcHRpb25zLT5nZXRBcnJheSgiY2VydGlmaWNhdGVzIl9zKTsKKyAgICBpZiAoY2VydGlmaWNh
dGVzICYmIGNlcnRpZmljYXRlcy0+bGVuZ3RoKCkpIHsKICAgICAgICAgdW5zaWduZWQgY2VydGlm
aWNhdGVzTGVuZ3RoID0gY2VydGlmaWNhdGVzLT5sZW5ndGgoKTsKICAgICAgICAgY2FwYWJpbGl0
aWVzLmNlcnRpZmljYXRlcyA9IFZlY3RvcjxzdGQ6OnBhaXI8U3RyaW5nLCBTdHJpbmc+PigpOwog
ICAgICAgICBjYXBhYmlsaXRpZXMuY2VydGlmaWNhdGVzLT5yZXNlcnZlSW5pdGlhbENhcGFjaXR5
KGNlcnRpZmljYXRlc0xlbmd0aCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBj
ZXJ0aWZpY2F0ZXNMZW5ndGg7ICsraSkgewotICAgICAgICAgICAgUmVmUHRyPEpTT046OlZhbHVl
PiB2YWx1ZSA9IGNlcnRpZmljYXRlcy0+Z2V0KGkpOwotICAgICAgICAgICAgUmVmUHRyPEpTT046
Ok9iamVjdD4gY2VydGlmaWNhdGU7Ci0gICAgICAgICAgICB2YWx1ZS0+YXNPYmplY3QoY2VydGlm
aWNhdGUpOworICAgICAgICAgICAgYXV0byBjZXJ0aWZpY2F0ZSA9IGNlcnRpZmljYXRlcy0+Z2V0
KGkpLT5hc09iamVjdCgpOwogICAgICAgICAgICAgQVNTRVJUKGNlcnRpZmljYXRlKTsKIAotICAg
ICAgICAgICAgU3RyaW5nIGhvc3Q7Ci0gICAgICAgICAgICBjZXJ0aWZpY2F0ZS0+Z2V0U3RyaW5n
KCJob3N0Il9zLCBob3N0KTsKKyAgICAgICAgICAgIGF1dG8gaG9zdCA9IGNlcnRpZmljYXRlLT5n
ZXRTdHJpbmcoImhvc3QiX3MpOwogICAgICAgICAgICAgQVNTRVJUKCFob3N0LmlzTnVsbCgpKTsK
IAotICAgICAgICAgICAgU3RyaW5nIGNlcnRpZmljYXRlRmlsZTsKLSAgICAgICAgICAgIGNlcnRp
ZmljYXRlLT5nZXRTdHJpbmcoImNlcnRpZmljYXRlRmlsZSJfcywgY2VydGlmaWNhdGVGaWxlKTsK
KyAgICAgICAgICAgIGF1dG8gY2VydGlmaWNhdGVGaWxlID0gY2VydGlmaWNhdGUtPmdldFN0cmlu
ZygiY2VydGlmaWNhdGVGaWxlIl9zKTsKICAgICAgICAgICAgIEFTU0VSVCghY2VydGlmaWNhdGVG
aWxlLmlzTnVsbCgpKTsKIAogICAgICAgICAgICAgY2FwYWJpbGl0aWVzLmNlcnRpZmljYXRlcy0+
dW5jaGVja2VkQXBwZW5kKHsgV1RGTW92ZShob3N0KSwgV1RGTW92ZShjZXJ0aWZpY2F0ZUZpbGUp
IH0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkRyaXZlci93aW4vV2ViRHJpdmVyU2VydmljZVdp
bi5jcHAgYi9Tb3VyY2UvV2ViRHJpdmVyL3dpbi9XZWJEcml2ZXJTZXJ2aWNlV2luLmNwcAppbmRl
eCBlY2ZlNGNkMTA1MjZlYWExZWNjYWNhMDQzOTg4Y2Q2MzMwNGQzODRkLi45YTk2MGYwYmJmMmRh
Mzg4YTk2ZjY5ZjRhZjc0MTdlZTYwZWQzNzM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViRHJpdmVy
L3dpbi9XZWJEcml2ZXJTZXJ2aWNlV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViRHJpdmVyL3dpbi9X
ZWJEcml2ZXJTZXJ2aWNlV2luLmNwcApAQCAtNDQsMTIgKzQ0LDEyIEBAIGJvb2wgV2ViRHJpdmVy
U2VydmljZTo6cGxhdGZvcm1Db21wYXJlQnJvd3NlclZlcnNpb25zKGNvbnN0IFN0cmluZyYgcmVx
dWlyZWRWZXJzCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgV2ViRHJpdmVyU2VydmljZTo6
cGxhdGZvcm1WYWxpZGF0ZUNhcGFiaWxpdHkoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBSZWZQ
dHI8SlNPTjo6VmFsdWU+JiB2YWx1ZSkgY29uc3QKK2Jvb2wgV2ViRHJpdmVyU2VydmljZTo6cGxh
dGZvcm1WYWxpZGF0ZUNhcGFiaWxpdHkoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBSZWY8SlNP
Tjo6VmFsdWU+JiB2YWx1ZSkgY29uc3QKIHsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBX
ZWJEcml2ZXJTZXJ2aWNlOjpwbGF0Zm9ybU1hdGNoQ2FwYWJpbGl0eShjb25zdCBTdHJpbmcmLCBj
b25zdCBSZWZQdHI8SlNPTjo6VmFsdWU+JikgY29uc3QKK2Jvb2wgV2ViRHJpdmVyU2VydmljZTo6
cGxhdGZvcm1NYXRjaENhcGFiaWxpdHkoY29uc3QgU3RyaW5nJiwgY29uc3QgUmVmPEpTT046OlZh
bHVlPiYpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHRydWU7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViRHJpdmVyL3dwZS9XZWJEcml2ZXJTZXJ2aWNlV1BFLmNwcCBiL1NvdXJjZS9XZWJEcml2ZXIv
d3BlL1dlYkRyaXZlclNlcnZpY2VXUEUuY3BwCmluZGV4IDA2ZDNhNWMyYTgyNTI5MThlNzRmMTAz
ZWJjODljYjUyMzc5ZTkwMzcuLjJiN2IxNzFmMjJkYTUzZmVmOTU4MWJkZjZkYjc2NjNjYjFkY2Ez
MTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJEcml2ZXIvd3BlL1dlYkRyaXZlclNlcnZpY2VXUEUu
Y3BwCisrKyBiL1NvdXJjZS9XZWJEcml2ZXIvd3BlL1dlYkRyaXZlclNlcnZpY2VXUEUuY3BwCkBA
IC00MCw1NyArNDAsNDcgQEAgQ2FwYWJpbGl0aWVzIFdlYkRyaXZlclNlcnZpY2U6OnBsYXRmb3Jt
Q2FwYWJpbGl0aWVzKCkKICAgICByZXR1cm4gY2FwYWJpbGl0aWVzOwogfQogCi1ib29sIFdlYkRy
aXZlclNlcnZpY2U6OnBsYXRmb3JtVmFsaWRhdGVDYXBhYmlsaXR5KGNvbnN0IFN0cmluZyYgbmFt
ZSwgY29uc3QgUmVmUHRyPEpTT046OlZhbHVlPiYgdmFsdWUpIGNvbnN0Citib29sIFdlYkRyaXZl
clNlcnZpY2U6OnBsYXRmb3JtVmFsaWRhdGVDYXBhYmlsaXR5KGNvbnN0IFN0cmluZyYgbmFtZSwg
Y29uc3QgUmVmPEpTT046OlZhbHVlPiYgdmFsdWUpIGNvbnN0CiB7CiAgICAgaWYgKG5hbWUgIT0g
IndwZTpicm93c2VyT3B0aW9ucyIpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgUmVmUHRy
PEpTT046Ok9iamVjdD4gYnJvd3Nlck9wdGlvbnM7Ci0gICAgaWYgKCF2YWx1ZS0+YXNPYmplY3Qo
YnJvd3Nlck9wdGlvbnMpKQorICAgIGF1dG8gYnJvd3Nlck9wdGlvbnMgPSB2YWx1ZS0+YXNPYmpl
Y3QoKTsKKyAgICBpZiAoIWJyb3dzZXJPcHRpb25zKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
ICAgICBpZiAoYnJvd3Nlck9wdGlvbnMtPmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsK
IAogICAgIC8vIElmIGJyb3dzZXIgb3B0aW9ucyBhcmUgcHJvdmlkZWQsIGJpbmFyeSBpcyByZXF1
aXJlZC4KLSAgICBTdHJpbmcgYmluYXJ5OwotICAgIGlmICghYnJvd3Nlck9wdGlvbnMtPmdldFN0
cmluZygiYmluYXJ5Il9zLCBiaW5hcnkpKQorICAgIGF1dG8gYmluYXJ5ID0gYnJvd3Nlck9wdGlv
bnMtPmdldFN0cmluZygiYmluYXJ5Il9zKTsKKyAgICBpZiAoIWJpbmFyeSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgUmVmUHRyPEpTT046OlZhbHVlPiBicm93c2VyQXJndW1lbnRzVmFs
dWU7Ci0gICAgUmVmUHRyPEpTT046OkFycmF5PiBicm93c2VyQXJndW1lbnRzOwotICAgIGlmIChi
cm93c2VyT3B0aW9ucy0+Z2V0VmFsdWUoImFyZ3MiX3MsIGJyb3dzZXJBcmd1bWVudHNWYWx1ZSkg
JiYgIWJyb3dzZXJBcmd1bWVudHNWYWx1ZS0+YXNBcnJheShicm93c2VyQXJndW1lbnRzKSkKKyAg
ICBhdXRvIGJyb3dzZXJBcmd1bWVudHMgPSBicm93c2VyT3B0aW9ucy0+Z2V0QXJyYXkoImFyZ3Mi
X3MpOworICAgIGlmICghYnJvd3NlckFyZ3VtZW50cykKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CiAgICAgdW5zaWduZWQgYnJvd3NlckFyZ3VtZW50c0xlbmd0aCA9IGJyb3dzZXJBcmd1bWVudHMt
Pmxlbmd0aCgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBicm93c2VyQXJndW1lbnRz
TGVuZ3RoOyArK2kpIHsKLSAgICAgICAgUmVmUHRyPEpTT046OlZhbHVlPiB2YWx1ZSA9IGJyb3dz
ZXJBcmd1bWVudHMtPmdldChpKTsKLSAgICAgICAgU3RyaW5nIGFyZ3VtZW50OwotICAgICAgICBp
ZiAoIXZhbHVlLT5hc1N0cmluZyhhcmd1bWVudCkpCisgICAgICAgIGF1dG8gYXJndW1lbnQgPSBi
cm93c2VyQXJndW1lbnRzLT5nZXQoaSktPmFzU3RyaW5nKCk7CisgICAgICAgIGlmICghYXJndW1l
bnQpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgUmVmUHRyPEpTT046
OlZhbHVlPiBjZXJ0aWZpY2F0ZXNWYWx1ZTsKLSAgICBpZiAoYnJvd3Nlck9wdGlvbnMtPmdldFZh
bHVlKCJjZXJ0aWZpY2F0ZXMiX3MsIGNlcnRpZmljYXRlc1ZhbHVlKSkgewotICAgICAgICBSZWZQ
dHI8SlNPTjo6QXJyYXk+IGNlcnRpZmljYXRlczsKLSAgICAgICAgaWYgKCFjZXJ0aWZpY2F0ZXNW
YWx1ZS0+YXNBcnJheShjZXJ0aWZpY2F0ZXMpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
CisgICAgaWYgKGF1dG8gY2VydGlmaWNhdGVzID0gYnJvd3Nlck9wdGlvbnMtPmdldEFycmF5KCJj
ZXJ0aWZpY2F0ZXMiX3MpKSB7CiAgICAgICAgIHVuc2lnbmVkIGNlcnRpZmljYXRlc0xlbmd0aCA9
IGNlcnRpZmljYXRlcy0+bGVuZ3RoKCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBjZXJ0aWZpY2F0ZXNMZW5ndGg7ICsraSkgewotICAgICAgICAgICAgUmVmUHRyPEpTT046OlZh
bHVlPiBjZXJ0aWZpY2F0ZVZhbHVlID0gY2VydGlmaWNhdGVzLT5nZXQoaSk7Ci0gICAgICAgICAg
ICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBjZXJ0aWZpY2F0ZTsKLSAgICAgICAgICAgIGlmICghY2Vy
dGlmaWNhdGVWYWx1ZS0+YXNPYmplY3QoY2VydGlmaWNhdGUpKQorICAgICAgICAgICAgYXV0byBj
ZXJ0aWZpY2F0ZSA9IGNlcnRpZmljYXRlcy0+Z2V0KGkpLT5hc09iamVjdCgpOworICAgICAgICAg
ICAgaWYgKCFjZXJ0aWZpY2F0ZSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAg
ICAgICAgICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gaG9zdFZhbHVlOwotICAgICAgICAgICAgU3Ry
aW5nIGhvc3Q7Ci0gICAgICAgICAgICBpZiAoIWNlcnRpZmljYXRlLT5nZXRWYWx1ZSgiaG9zdCJf
cywgaG9zdFZhbHVlKSB8fCAhaG9zdFZhbHVlLT5hc1N0cmluZyhob3N0KSkKKyAgICAgICAgICAg
IGF1dG8gaG9zdCA9IGNlcnRpZmljYXRlLT5nZXRTdHJpbmcoImhvc3QiX3MpOworICAgICAgICAg
ICAgaWYgKCFob3N0KQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICAg
ICAgUmVmUHRyPEpTT046OlZhbHVlPiBjZXJ0aWZpY2F0ZUZpbGVWYWx1ZTsKLSAgICAgICAgICAg
IFN0cmluZyBjZXJ0aWZpY2F0ZUZpbGU7Ci0gICAgICAgICAgICBpZiAoIWNlcnRpZmljYXRlLT5n
ZXRWYWx1ZSgiY2VydGlmaWNhdGVGaWxlIl9zLCBjZXJ0aWZpY2F0ZUZpbGVWYWx1ZSkgfHwgIWNl
cnRpZmljYXRlRmlsZVZhbHVlLT5hc1N0cmluZyhjZXJ0aWZpY2F0ZUZpbGUpKQorICAgICAgICAg
ICAgYXV0byBjZXJ0aWZpY2F0ZUZpbGUgPSBjZXJ0aWZpY2F0ZS0+Z2V0U3RyaW5nKCJjZXJ0aWZp
Y2F0ZUZpbGUiX3MpOworICAgICAgICAgICAgaWYgKCFjZXJ0aWZpY2F0ZUZpbGUpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgfQpAQCAtOTgsNyArODgsNyBA
QCBib29sIFdlYkRyaXZlclNlcnZpY2U6OnBsYXRmb3JtVmFsaWRhdGVDYXBhYmlsaXR5KGNvbnN0
IFN0cmluZyYgbmFtZSwgY29uc3QgUmVmUAogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFdl
YkRyaXZlclNlcnZpY2U6OnBsYXRmb3JtTWF0Y2hDYXBhYmlsaXR5KGNvbnN0IFN0cmluZyYsIGNv
bnN0IFJlZlB0cjxKU09OOjpWYWx1ZT4mKSBjb25zdAorYm9vbCBXZWJEcml2ZXJTZXJ2aWNlOjpw
bGF0Zm9ybU1hdGNoQ2FwYWJpbGl0eShjb25zdCBTdHJpbmcmLCBjb25zdCBSZWY8SlNPTjo6VmFs
dWU+JikgY29uc3QKIHsKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTEwOCw0NyArOTgsNDEgQEAg
dm9pZCBXZWJEcml2ZXJTZXJ2aWNlOjpwbGF0Zm9ybVBhcnNlQ2FwYWJpbGl0aWVzKGNvbnN0IEpT
T046Ok9iamVjdCYgbWF0Y2hlZENhcGEKICAgICBjYXBhYmlsaXRpZXMuYnJvd3NlckJpbmFyeSA9
IFN0cmluZygiTWluaUJyb3dzZXIiKTsKICAgICBjYXBhYmlsaXRpZXMuYnJvd3NlckFyZ3VtZW50
cyA9IFZlY3RvcjxTdHJpbmc+IHsgIi0tYXV0b21hdGlvbiJfcyB9OwogCi0gICAgUmVmUHRyPEpT
T046Ok9iamVjdD4gYnJvd3Nlck9wdGlvbnM7Ci0gICAgaWYgKCFtYXRjaGVkQ2FwYWJpbGl0aWVz
LmdldE9iamVjdCgid3BlOmJyb3dzZXJPcHRpb25zIl9zLCBicm93c2VyT3B0aW9ucykpCisgICAg
YXV0byBicm93c2VyT3B0aW9ucyA9IG1hdGNoZWRDYXBhYmlsaXRpZXMuZ2V0T2JqZWN0KCJ3cGU6
YnJvd3Nlck9wdGlvbnMiX3MpOworICAgIGlmICghYnJvd3Nlck9wdGlvbnMpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIFN0cmluZyBicm93c2VyQmluYXJ5OwotICAgIGlmIChicm93c2VyT3B0aW9u
cy0+Z2V0U3RyaW5nKCJiaW5hcnkiX3MsIGJyb3dzZXJCaW5hcnkpKSB7CisgICAgYXV0byBicm93
c2VyQmluYXJ5ID0gYnJvd3Nlck9wdGlvbnMtPmdldFN0cmluZygiYmluYXJ5Il9zKTsKKyAgICBp
ZiAoISFicm93c2VyQmluYXJ5KSB7CiAgICAgICAgIGNhcGFiaWxpdGllcy5icm93c2VyQmluYXJ5
ID0gYnJvd3NlckJpbmFyeTsKICAgICAgICAgY2FwYWJpbGl0aWVzLmJyb3dzZXJBcmd1bWVudHMg
PSBXVEY6Om51bGxvcHQ7CiAgICAgfQogCi0gICAgUmVmUHRyPEpTT046OkFycmF5PiBicm93c2Vy
QXJndW1lbnRzOwotICAgIGlmIChicm93c2VyT3B0aW9ucy0+Z2V0QXJyYXkoImFyZ3MiX3MsIGJy
b3dzZXJBcmd1bWVudHMpICYmIGJyb3dzZXJBcmd1bWVudHMtPmxlbmd0aCgpKSB7CisgICAgYXV0
byBicm93c2VyQXJndW1lbnRzID0gYnJvd3Nlck9wdGlvbnMtPmdldEFycmF5KCJhcmdzIl9zKTsK
KyAgICBpZiAoYnJvd3NlckFyZ3VtZW50cyAmJiBicm93c2VyQXJndW1lbnRzLT5sZW5ndGgoKSkg
ewogICAgICAgICB1bnNpZ25lZCBicm93c2VyQXJndW1lbnRzTGVuZ3RoID0gYnJvd3NlckFyZ3Vt
ZW50cy0+bGVuZ3RoKCk7CiAgICAgICAgIGNhcGFiaWxpdGllcy5icm93c2VyQXJndW1lbnRzID0g
VmVjdG9yPFN0cmluZz4oKTsKICAgICAgICAgY2FwYWJpbGl0aWVzLmJyb3dzZXJBcmd1bWVudHMt
PnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoYnJvd3NlckFyZ3VtZW50c0xlbmd0aCk7CiAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBicm93c2VyQXJndW1lbnRzTGVuZ3RoOyArK2kpIHsK
LSAgICAgICAgICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gdmFsdWUgPSBicm93c2VyQXJndW1lbnRz
LT5nZXQoaSk7Ci0gICAgICAgICAgICBTdHJpbmcgYXJndW1lbnQ7Ci0gICAgICAgICAgICB2YWx1
ZS0+YXNTdHJpbmcoYXJndW1lbnQpOworICAgICAgICAgICAgYXV0byBhcmd1bWVudCA9IGJyb3dz
ZXJBcmd1bWVudHMtPmdldChpKS0+YXNTdHJpbmcoKTsKICAgICAgICAgICAgIEFTU0VSVCghYXJn
dW1lbnQuaXNOdWxsKCkpOwogICAgICAgICAgICAgY2FwYWJpbGl0aWVzLmJyb3dzZXJBcmd1bWVu
dHMtPnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKGFyZ3VtZW50KSk7CiAgICAgICAgIH0KICAgICB9
CiAKLSAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IGNlcnRpZmljYXRlczsKLSAgICBpZiAoYnJvd3Nl
ck9wdGlvbnMtPmdldEFycmF5KCJjZXJ0aWZpY2F0ZXMiX3MsIGNlcnRpZmljYXRlcykgJiYgY2Vy
dGlmaWNhdGVzLT5sZW5ndGgoKSkgeworICAgIGF1dG8gY2VydGlmaWNhdGVzID0gYnJvd3Nlck9w
dGlvbnMtPmdldEFycmF5KCJjZXJ0aWZpY2F0ZXMiX3MpOworICAgIGlmIChjZXJ0aWZpY2F0ZXMg
JiYgY2VydGlmaWNhdGVzLT5sZW5ndGgoKSkgewogICAgICAgICB1bnNpZ25lZCBjZXJ0aWZpY2F0
ZXNMZW5ndGggPSBjZXJ0aWZpY2F0ZXMtPmxlbmd0aCgpOwogICAgICAgICBjYXBhYmlsaXRpZXMu
Y2VydGlmaWNhdGVzID0gVmVjdG9yPHN0ZDo6cGFpcjxTdHJpbmcsIFN0cmluZz4+KCk7CiAgICAg
ICAgIGNhcGFiaWxpdGllcy5jZXJ0aWZpY2F0ZXMtPnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoY2Vy
dGlmaWNhdGVzTGVuZ3RoKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNlcnRp
ZmljYXRlc0xlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHZh
bHVlID0gY2VydGlmaWNhdGVzLT5nZXQoaSk7Ci0gICAgICAgICAgICBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiBjZXJ0aWZpY2F0ZTsKLSAgICAgICAgICAgIHZhbHVlLT5hc09iamVjdChjZXJ0aWZpY2F0
ZSk7CisgICAgICAgICAgICBhdXRvIGNlcnRpZmljYXRlID0gY2VydGlmaWNhdGVzLT5nZXQoaSkt
PmFzT2JqZWN0KCk7CiAgICAgICAgICAgICBBU1NFUlQoY2VydGlmaWNhdGUpOwogCi0gICAgICAg
ICAgICBTdHJpbmcgaG9zdDsKLSAgICAgICAgICAgIGNlcnRpZmljYXRlLT5nZXRTdHJpbmcoImhv
c3QiX3MsIGhvc3QpOworICAgICAgICAgICAgYXV0byBob3N0ID0gY2VydGlmaWNhdGUtPmdldFN0
cmluZygiaG9zdCJfcyk7CiAgICAgICAgICAgICBBU1NFUlQoIWhvc3QuaXNOdWxsKCkpOwogCi0g
ICAgICAgICAgICBTdHJpbmcgY2VydGlmaWNhdGVGaWxlOwotICAgICAgICAgICAgY2VydGlmaWNh
dGUtPmdldFN0cmluZygiY2VydGlmaWNhdGVGaWxlIl9zLCBjZXJ0aWZpY2F0ZUZpbGUpOworICAg
ICAgICAgICAgYXV0byBjZXJ0aWZpY2F0ZUZpbGUgPSBjZXJ0aWZpY2F0ZS0+Z2V0U3RyaW5nKCJj
ZXJ0aWZpY2F0ZUZpbGUiX3MpOwogICAgICAgICAgICAgQVNTRVJUKCFjZXJ0aWZpY2F0ZUZpbGUu
aXNOdWxsKCkpOwogCiAgICAgICAgICAgICBjYXBhYmlsaXRpZXMuY2VydGlmaWNhdGVzLT51bmNo
ZWNrZWRBcHBlbmQoeyBXVEZNb3ZlKGhvc3QpLCBXVEZNb3ZlKGNlcnRpZmljYXRlRmlsZSkgfSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9s
bGVycy9DU1NNYW5hZ2VyLmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2Uv
Q29udHJvbGxlcnMvQ1NTTWFuYWdlci5qcwppbmRleCA2OGFlYWE5Nzg3MDI4ZWU4ZDE4NThhMWQy
NzA3NTAzMzYwYmQ0ZTkyLi4xNWI2MjMxYWYzM2I0Y2Y3ZWViOGQyOTA5ODczYjRkYTRhNWJhN2E0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9s
bGVycy9DU1NNYW5hZ2VyLmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJm
YWNlL0NvbnRyb2xsZXJzL0NTU01hbmFnZXIuanMKQEAgLTIwMywzMiArMjAzLDM0IEBAIFdJLkNT
U01hbmFnZXIgPSBjbGFzcyBDU1NNYW5hZ2VyIGV4dGVuZHMgV0kuT2JqZWN0CiAgICAgICAgIGlm
ICghdGhpcy5jYW5Gb3JjZUFwcGVhcmFuY2UoKSkKICAgICAgICAgICAgIHJldHVybjsKIAotICAg
ICAgICBsZXQgcHJvdG9jb2xOYW1lID0gIiI7CisgICAgICAgIGxldCBjb21tYW5kQXJndW1lbnRz
ID0ge307CiAKICAgICAgICAgc3dpdGNoIChuYW1lKSB7CiAgICAgICAgIGNhc2UgV0kuQ1NTTWFu
YWdlci5BcHBlYXJhbmNlLkxpZ2h0OgotICAgICAgICAgICAgcHJvdG9jb2xOYW1lID0gSW5zcGVj
dG9yQmFja2VuZC5FbnVtLlBhZ2UuQXBwZWFyYW5jZS5MaWdodDsKKyAgICAgICAgICAgIGNvbW1h
bmRBcmd1bWVudHMuYXBwZWFyYW5jZSA9IEluc3BlY3RvckJhY2tlbmQuRW51bS5QYWdlLkFwcGVh
cmFuY2UuTGlnaHQ7CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIFdJLkNTU01h
bmFnZXIuQXBwZWFyYW5jZS5EYXJrOgotICAgICAgICAgICAgcHJvdG9jb2xOYW1lID0gSW5zcGVj
dG9yQmFja2VuZC5FbnVtLlBhZ2UuQXBwZWFyYW5jZS5EYXJrOworICAgICAgICAgICAgY29tbWFu
ZEFyZ3VtZW50cy5hcHBlYXJhbmNlID0gSW5zcGVjdG9yQmFja2VuZC5FbnVtLlBhZ2UuQXBwZWFy
YW5jZS5EYXJrOwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBudWxsOgotICAg
ICAgICBjYXNlIHVuZGVmaW5lZDoKLSAgICAgICAgY2FzZSAiIjoKLSAgICAgICAgICAgIHByb3Rv
Y29sTmFtZSA9ICIiOworICAgICAgICAgICAgLy8gQ09NUEFUSUJJTElUWSAoaU9TIDE0KTogdGhl
IGBhcHBlYXJhbmNlYGAgcGFyYW1ldGVyIG9mIGBQYWdlLnNldEZvcmNlZEFwcGVhcmFuY2VgIHdh
cyBub3Qgb3B0aW9uYWwuCisgICAgICAgICAgICAvLyBTaW5jZSBzdXBwb3J0IGNhbid0IGJlIHRl
c3RlZCBkaXJlY3RseSwgY2hlY2sgZm9yIHRoZSBgb3B0aW9uc2BgIHBhcmFtZXRlciBvZiBgRE9N
RGVidWdnZXIuc2V0RE9NQnJlYWtwb2ludGAgKGlPUyAxNC4wKykuCisgICAgICAgICAgICAvLyBG
SVhNRTogVXNlIGV4cGxpY2l0IHZlcnNpb24gY2hlY2tpbmcgb25jZSBodHRwczovL3dlYmtpdC5v
cmcvYi8xNDg2ODAgaXMgZml4ZWQuCisgICAgICAgICAgICBpZiAoIUluc3BlY3RvckJhY2tlbmQu
aGFzQ29tbWFuZCgiRE9NRGVidWdnZXIuc2V0RE9NQnJlYWtwb2ludCIsICJvcHRpb25zIikpCisg
ICAgICAgICAgICAgICAgY29tbWFuZEFyZ3VtZW50cy5hcHBlYXJhbmNlID0gIiI7CiAgICAgICAg
ICAgICBicmVhazsKIAogICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgLy8gQWJvcnQgZm9y
IHVua25vd24gdmFsdWVzLgorICAgICAgICAgICAgY29uc29sZS5hc3NlcnQoZmFsc2UsICJVbmtu
b3duIGFwcGVhcmFuY2UiLCBuYW1lKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQog
CiAgICAgICAgIHRoaXMuX2ZvcmNlZEFwcGVhcmFuY2UgPSBuYW1lIHx8IG51bGw7CiAKICAgICAg
ICAgbGV0IHRhcmdldCA9IFdJLmFzc3VtaW5nTWFpblRhcmdldCgpOwotICAgICAgICB0YXJnZXQu
UGFnZUFnZW50LnNldEZvcmNlZEFwcGVhcmFuY2UocHJvdG9jb2xOYW1lKS50aGVuKCgpID0+IHsK
KyAgICAgICAgdGFyZ2V0LlBhZ2VBZ2VudC5zZXRGb3JjZWRBcHBlYXJhbmNlLmludm9rZShjb21t
YW5kQXJndW1lbnRzKS50aGVuKCgpID0+IHsKICAgICAgICAgICAgIHRoaXMubWVkaWFRdWVyeVJl
c3VsdENoYW5nZWQoKTsKICAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJz
KFdJLkNTU01hbmFnZXIuRXZlbnQuRm9yY2VkQXBwZWFyYW5jZURpZENoYW5nZSwge2FwcGVhcmFu
Y2U6IHRoaXMuX2ZvcmNlZEFwcGVhcmFuY2V9KTsKICAgICAgICAgfSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9TZXR0aW5nc1RhYkNvbnRl
bnRWaWV3LmpzIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvU2V0
dGluZ3NUYWJDb250ZW50Vmlldy5qcwppbmRleCA0ODJlMTQyYWUxMWQ2M2MwMDE1Zjk2Yzc0YmNi
MmRlYTJmZTUwNjlkLi45MTgzNmVjYzc2OTc3NTZhOTY2ZWZlYTcxMDNjOTJkMzQwOGU0NDYxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9TZXR0
aW5nc1RhYkNvbnRlbnRWaWV3LmpzCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50
ZXJmYWNlL1ZpZXdzL1NldHRpbmdzVGFiQ29udGVudFZpZXcuanMKQEAgLTM0NiwxNCArMzQ2LDE4
IEBAIFdJLlNldHRpbmdzVGFiQ29udGVudFZpZXcgPSBjbGFzcyBTZXR0aW5nc1RhYkNvbnRlbnRW
aWV3IGV4dGVuZHMgV0kuVGFiQ29udGVudFZpCiAgICAgICAgICAgICAgICAgW1dJLkxvZ2dpbmdD
aGFubmVsLkxldmVsLlZlcmJvc2UsIFdJLlVJU3RyaW5nKCJWZXJib3NlIildLAogICAgICAgICAg
ICAgXTsKICAgICAgICAgICAgIGNvbnN0IGVkaXRvckxhYmVscyA9IHsKLSAgICAgICAgICAgICAg
ICBtZWRpYTogV0kuVUlTdHJpbmcoIk1lZGlhIExvZ2dpbmc6IiksCi0gICAgICAgICAgICAgICAg
bWVkaWFzb3VyY2U6IFdJLlVJU3RyaW5nKCJNU0UgTG9nZ2luZzoiKSwKLSAgICAgICAgICAgICAg
ICB3ZWJydGM6IFdJLlVJU3RyaW5nKCJXZWJSVEMgTG9nZ2luZzoiKSwKKyAgICAgICAgICAgICAg
ICBbV0kuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZVNvdXJjZS5NZWRpYV06IFdJLlVJU3RyaW5nKCJN
ZWRpYSBMb2dnaW5nOiIpLAorICAgICAgICAgICAgICAgIFtXSS5Db25zb2xlTWVzc2FnZS5NZXNz
YWdlU291cmNlLk1lZGlhU291cmNlXTogV0kuVUlTdHJpbmcoIk1TRSBMb2dnaW5nOiIpLAorICAg
ICAgICAgICAgICAgIFtXSS5Db25zb2xlTWVzc2FnZS5NZXNzYWdlU291cmNlLldlYlJUQ106IFdJ
LlVJU3RyaW5nKCJXZWJSVEMgTG9nZ2luZzoiKSwKICAgICAgICAgICAgIH07CiAKICAgICAgICAg
ICAgIGxldCBjaGFubmVscyA9IFdJLmNvbnNvbGVNYW5hZ2VyLmN1c3RvbUxvZ2dpbmdDaGFubmVs
czsKICAgICAgICAgICAgIGZvciAobGV0IGNoYW5uZWwgb2YgY2hhbm5lbHMpIHsKLSAgICAgICAg
ICAgICAgICBsZXQgbG9nRWRpdG9yID0gY29uc29sZVNldHRpbmdzVmlldy5hZGRHcm91cFdpdGhD
dXN0b21TZXR0aW5nKGVkaXRvckxhYmVsc1tjaGFubmVsLnNvdXJjZV0sIFdJLlNldHRpbmdFZGl0
b3IuVHlwZS5TZWxlY3QsIHt2YWx1ZXM6IGxvZ0xldmVsc30pOworICAgICAgICAgICAgICAgIGxl
dCBsYWJlbCA9IGVkaXRvckxhYmVsc1tjaGFubmVsLnNvdXJjZV07CisgICAgICAgICAgICAgICAg
aWYgKCFsYWJlbCkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAg
ICAgICBsZXQgbG9nRWRpdG9yID0gY29uc29sZVNldHRpbmdzVmlldy5hZGRHcm91cFdpdGhDdXN0
b21TZXR0aW5nKGxhYmVsLCBXSS5TZXR0aW5nRWRpdG9yLlR5cGUuU2VsZWN0LCB7dmFsdWVzOiBs
b2dMZXZlbHN9KTsKICAgICAgICAgICAgICAgICBsb2dFZGl0b3IudmFsdWUgPSBjaGFubmVsLmxl
dmVsOwogICAgICAgICAgICAgICAgIGxvZ0VkaXRvci5hZGRFdmVudExpc3RlbmVyKFdJLlNldHRp
bmdFZGl0b3IuRXZlbnQuVmFsdWVEaWRDaGFuZ2UsICgpID0+IHsKICAgICAgICAgICAgICAgICAg
ICAgZm9yIChsZXQgdGFyZ2V0IG9mIFdJLnRhcmdldHMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL0F1dG9tYXRpb24uanNvbiBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0F1dG9tYXRpb24vQXV0b21hdGlvbi5qc29uCmluZGV4IDNkY2IyMTQxZWIwZDI3
OTQ3MDdkZTI4NGM4NzA3MTBlODc3MjFjMzkuLmViM2NkYjVmODY2YzVmOTNhODgyMjk4M2E0OWQ5
MTZmM2U2ZWFmZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRp
b24vQXV0b21hdGlvbi5qc29uCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRp
b24vQXV0b21hdGlvbi5qc29uCkBAIC0zMiw3ICszMiw4IEBACiAgICAgICAgICAgICAiZGVzY3Jp
cHRpb24iOiAiVGhlIGNvb3JkaW5hdGUgc3lzdGVtIGluIHdoaWNoIHJlY3RzLCBwb2ludHMsIGFu
ZCBzaXplcyBhcmUgdG8gYmUgaW50ZXJwcmV0ZWQuIiwKICAgICAgICAgICAgICJlbnVtIjogWwog
ICAgICAgICAgICAgICAgICJQYWdlIiwKLSAgICAgICAgICAgICAgICAiVmlld3BvcnQiCisgICAg
ICAgICAgICAgICAgIlZpZXdwb3J0IiwKKyAgICAgICAgICAgICAgICAiTGF5b3V0Vmlld3BvcnQi
CiAgICAgICAgICAgICBdCiAgICAgICAgIH0sCiAgICAgICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uY3BwIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbi5j
cHAKaW5kZXggZDg3YTRkZmVjNzk0ZjMxZGNiNjRlNWU5ZWY0YmNlNGIxOGMxOTJhMi4uM2Y3ZTQw
ZTU4ZDRhZDgxYWY3NDIwOGJjYTYxMGJhOWY4ZjUxNzc4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbi5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbi5j
cHAKQEAgLTMwNSw3ICszMDUsNyBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpnZXRCcm93
c2luZ0NvbnRleHRzKFJlZjxHZXRCcm93c2luZ0NvbnRleHRzQ2FsbGJhY2s+JgogICAgIGdldE5l
eHRDb250ZXh0KG1ha2VSZWYoKnRoaXMpLCBXVEZNb3ZlKHBhZ2VzKSwgSlNPTjo6QXJyYXlPZjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHQ+OjpjcmVhdGUo
KSwgV1RGTW92ZShjYWxsYmFjaykpOwogfQogCi12b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpn
ZXRCcm93c2luZ0NvbnRleHQoY29uc3QgU3RyaW5nJiBoYW5kbGUsIFJlZjxHZXRCcm93c2luZ0Nv
bnRleHRDYWxsYmFjaz4mJiBjYWxsYmFjaykKK3ZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246Omdl
dEJyb3dzaW5nQ29udGV4dChjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpC
cm93c2luZ0NvbnRleHRIYW5kbGUmIGhhbmRsZSwgUmVmPEdldEJyb3dzaW5nQ29udGV4dENhbGxi
YWNrPiYmIGNhbGxiYWNrKQogewogICAgIFdlYlBhZ2VQcm94eSogcGFnZSA9IHdlYlBhZ2VQcm94
eUZvckhhbmRsZShoYW5kbGUpOwogICAgIGlmICghcGFnZSkKQEAgLTMyOCw3ICszMjgsNyBAQCBz
dGF0aWMgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0UHJl
c2VudGF0aW9uIHRvUHJvdG9jb2woQQogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiB9CiAKLXZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OmNyZWF0ZUJyb3dzaW5nQ29udGV4dChj
b25zdCBTdHJpbmcqIG9wdGlvbmFsUHJlc2VudGF0aW9uSGludCwgUmVmPENyZWF0ZUJyb3dzaW5n
Q29udGV4dENhbGxiYWNrPiYmIGNhbGxiYWNrKQordm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6
Y3JlYXRlQnJvd3NpbmdDb250ZXh0KE9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9t
YXRpb246OkJyb3dzaW5nQ29udGV4dFByZXNlbnRhdGlvbj4mJiBwcmVzZW50YXRpb25IaW50LCBS
ZWY8Q3JlYXRlQnJvd3NpbmdDb250ZXh0Q2FsbGJhY2s+JiYgY2FsbGJhY2spCiB7CiAgICAgQVNT
RVJUKG1fY2xpZW50KTsKICAgICBpZiAoIW1fY2xpZW50KQpAQCAtMzM2LDExICszMzYsOCBAQCB2
b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpjcmVhdGVCcm93c2luZ0NvbnRleHQoY29uc3QgU3Ry
aW5nKiBvcHRpb25hbFByZXNlbnRhdAogCiAgICAgdWludDE2X3Qgb3B0aW9ucyA9IDA7CiAKLSAg
ICBpZiAob3B0aW9uYWxQcmVzZW50YXRpb25IaW50KSB7Ci0gICAgICAgIGF1dG8gcGFyc2VkUHJl
c2VudGF0aW9uSGludCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb25IZWxwZXJzOjpw
YXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6
QnJvd3NpbmdDb250ZXh0UHJlc2VudGF0aW9uPigqb3B0aW9uYWxQcmVzZW50YXRpb25IaW50KTsK
LSAgICAgICAgaWYgKHBhcnNlZFByZXNlbnRhdGlvbkhpbnQuaGFzVmFsdWUoKSAmJiBwYXJzZWRQ
cmVzZW50YXRpb25IaW50LnZhbHVlKCkgPT0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlv
bjo6QnJvd3NpbmdDb250ZXh0UHJlc2VudGF0aW9uOjpUYWIpCi0gICAgICAgICAgICBvcHRpb25z
IHw9IEFQSTo6QXV0b21hdGlvblNlc3Npb25Ccm93c2luZ0NvbnRleHRPcHRpb25zUHJlZmVyTmV3
VGFiOwotICAgIH0KKyAgICBpZiAocHJlc2VudGF0aW9uSGludCA9PSBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRQcmVzZW50YXRpb246OlRhYikKKyAgICAg
ICAgb3B0aW9ucyB8PSBBUEk6OkF1dG9tYXRpb25TZXNzaW9uQnJvd3NpbmdDb250ZXh0T3B0aW9u
c1ByZWZlck5ld1RhYjsKIAogICAgIG1fY2xpZW50LT5yZXF1ZXN0TmV3UGFnZVdpdGhPcHRpb25z
KCp0aGlzLCBzdGF0aWNfY2FzdDxBUEk6OkF1dG9tYXRpb25TZXNzaW9uQnJvd3NpbmdDb250ZXh0
T3B0aW9ucz4ob3B0aW9ucyksIFtwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNhbGxi
YWNrID0gV1RGTW92ZShjYWxsYmFjayldKFdlYlBhZ2VQcm94eSogcGFnZSkgewogICAgICAgICBp
ZiAoIXBhZ2UpCkBAIC0zNTIsMjMgKzM0OSwyNSBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9u
OjpjcmVhdGVCcm93c2luZ0NvbnRleHQoY29uc3QgU3RyaW5nKiBvcHRpb25hbFByZXNlbnRhdAog
ICAgIH0pOwogfQogCi12b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpjbG9zZUJyb3dzaW5nQ29u
dGV4dChJbnNwZWN0b3I6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBo
YW5kbGUpCitJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IFdlYkF1dG9t
YXRpb25TZXNzaW9uOjpjbG9zZUJyb3dzaW5nQ29udGV4dChjb25zdCBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRIYW5kbGUmIGhhbmRsZSkKIHsKICAgICBX
ZWJQYWdlUHJveHkqIHBhZ2UgPSB3ZWJQYWdlUHJveHlGb3JIYW5kbGUoaGFuZGxlKTsKICAgICBp
ZiAoIXBhZ2UpCiAgICAgICAgIFNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1IoV2luZG93
Tm90Rm91bmQpOwogCiAgICAgcGFnZS0+Y2xvc2VQYWdlKCk7CisKKyAgICByZXR1cm4geyB9Owog
fQogCi12b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpzd2l0Y2hUb0Jyb3dzaW5nQ29udGV4dChj
b25zdCBTdHJpbmcmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSwgY29uc3QgU3RyaW5nKiBvcHRpb25h
bEZyYW1lSGFuZGxlLCBSZWY8U3dpdGNoVG9Ccm93c2luZ0NvbnRleHRDYWxsYmFjaz4mJiBjYWxs
YmFjaykKK3ZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OnN3aXRjaFRvQnJvd3NpbmdDb250ZXh0
KGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhh
bmRsZSYgYnJvd3NpbmdDb250ZXh0SGFuZGxlLCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpB
dXRvbWF0aW9uOjpGcmFtZUhhbmRsZSYgZnJhbWVIYW5kbGUsIFJlZjxTd2l0Y2hUb0Jyb3dzaW5n
Q29udGV4dENhbGxiYWNrPiYmIGNhbGxiYWNrKQogewogICAgIFdlYlBhZ2VQcm94eSogcGFnZSA9
IHdlYlBhZ2VQcm94eUZvckhhbmRsZShicm93c2luZ0NvbnRleHRIYW5kbGUpOwogICAgIGlmICgh
cGFnZSkKICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1IoV2luZG93Tm90
Rm91bmQpOwogCiAgICAgYm9vbCBmcmFtZU5vdEZvdW5kID0gZmFsc2U7Ci0gICAgYXV0byBmcmFt
ZUlEID0gd2ViRnJhbWVJREZvckhhbmRsZShvcHRpb25hbEZyYW1lSGFuZGxlID8gKm9wdGlvbmFs
RnJhbWVIYW5kbGUgOiBlbXB0eVN0cmluZygpLCBmcmFtZU5vdEZvdW5kKTsKKyAgICBhdXRvIGZy
YW1lSUQgPSB3ZWJGcmFtZUlERm9ySGFuZGxlKGZyYW1lSGFuZGxlLCBmcmFtZU5vdEZvdW5kKTsK
ICAgICBpZiAoZnJhbWVOb3RGb3VuZCkKICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklO
RURfRVJST1IoRnJhbWVOb3RGb3VuZCk7CiAKQEAgLTM4MSwyNSArMzgwLDI1IEBAIHZvaWQgV2Vi
QXV0b21hdGlvblNlc3Npb246OnN3aXRjaFRvQnJvd3NpbmdDb250ZXh0KGNvbnN0IFN0cmluZyYg
YnJvd3NpbmdDb250ZXh0CiAgICAgfSk7CiB9CiAKLXZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246
OnNldFdpbmRvd0ZyYW1lT2ZCcm93c2luZ0NvbnRleHQoY29uc3QgU3RyaW5nJiBoYW5kbGUsIGNv
bnN0IEpTT046Ok9iamVjdCogb3B0aW9uYWxPcmlnaW5PYmplY3QsIGNvbnN0IEpTT046Ok9iamVj
dCogb3B0aW9uYWxTaXplT2JqZWN0LCBSZWY8U2V0V2luZG93RnJhbWVPZkJyb3dzaW5nQ29udGV4
dENhbGxiYWNrPiYmIGNhbGxiYWNrKQordm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6c2V0V2lu
ZG93RnJhbWVPZkJyb3dzaW5nQ29udGV4dChjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRv
bWF0aW9uOjpCcm93c2luZ0NvbnRleHRIYW5kbGUmIGhhbmRsZSwgUmVmUHRyPEpTT046Ok9iamVj
dD4mJiBvcmlnaW4sIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgc2l6ZSwgUmVmPFNldFdpbmRvd0Zy
YW1lT2ZCcm93c2luZ0NvbnRleHRDYWxsYmFjaz4mJiBjYWxsYmFjaykKIHsKLSAgICBPcHRpb25h
bDxmbG9hdD4geDsKLSAgICBPcHRpb25hbDxmbG9hdD4geTsKLSAgICBpZiAob3B0aW9uYWxPcmln
aW5PYmplY3QpIHsKLSAgICAgICAgaWYgKCEoeCA9IG9wdGlvbmFsT3JpZ2luT2JqZWN0LT5nZXRO
dW1iZXI8ZmxvYXQ+KCJ4Il9zKSkpCisgICAgT3B0aW9uYWw8ZG91YmxlPiB4OworICAgIE9wdGlv
bmFsPGRvdWJsZT4geTsKKyAgICBpZiAob3JpZ2luKSB7CisgICAgICAgIGlmICghKHggPSBvcmln
aW4tPmdldERvdWJsZSgieCJfcykpKQogICAgICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURF
RklORURfRVJST1JfQU5EX0RFVEFJTFMoTWlzc2luZ1BhcmFtZXRlciwgIlRoZSAneCcgcGFyYW1l
dGVyIHdhcyBub3QgZm91bmQgb3IgaW52YWxpZC4iKTsKIAotICAgICAgICBpZiAoISh5ID0gb3B0
aW9uYWxPcmlnaW5PYmplY3QtPmdldE51bWJlcjxmbG9hdD4oInkiX3MpKSkKKyAgICAgICAgaWYg
KCEoeSA9IG9yaWdpbi0+Z2V0RG91YmxlKCJ5Il9zKSkpCiAgICAgICAgICAgICBBU1lOQ19GQUlM
X1dJVEhfUFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhNaXNzaW5nUGFyYW1ldGVyLCAiVGhl
ICd5JyBwYXJhbWV0ZXIgd2FzIG5vdCBmb3VuZCBvciBpbnZhbGlkLiIpOwogICAgIH0KIAotICAg
IE9wdGlvbmFsPGZsb2F0PiB3aWR0aDsKLSAgICBPcHRpb25hbDxmbG9hdD4gaGVpZ2h0OwotICAg
IGlmIChvcHRpb25hbFNpemVPYmplY3QpIHsKLSAgICAgICAgaWYgKCEod2lkdGggPSBvcHRpb25h
bFNpemVPYmplY3QtPmdldE51bWJlcjxmbG9hdD4oIndpZHRoIl9zKSkpCisgICAgT3B0aW9uYWw8
ZG91YmxlPiB3aWR0aDsKKyAgICBPcHRpb25hbDxkb3VibGU+IGhlaWdodDsKKyAgICBpZiAoc2l6
ZSkgeworICAgICAgICBpZiAoISh3aWR0aCA9IHNpemUtPmdldERvdWJsZSgid2lkdGgiX3MpKSkK
ICAgICAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxT
KE1pc3NpbmdQYXJhbWV0ZXIsICJUaGUgJ3dpZHRoJyBwYXJhbWV0ZXIgd2FzIG5vdCBmb3VuZCBv
ciBpbnZhbGlkLiIpOwogCi0gICAgICAgIGlmICghKGhlaWdodCA9IG9wdGlvbmFsU2l6ZU9iamVj
dC0+Z2V0TnVtYmVyPGZsb2F0PigiaGVpZ2h0Il9zKSkpCisgICAgICAgIGlmICghKGhlaWdodCA9
IHNpemUtPmdldERvdWJsZSgiaGVpZ2h0Il9zKSkpCiAgICAgICAgICAgICBBU1lOQ19GQUlMX1dJ
VEhfUFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhNaXNzaW5nUGFyYW1ldGVyLCAiVGhlICdo
ZWlnaHQnIHBhcmFtZXRlciB3YXMgbm90IGZvdW5kIG9yIGludmFsaWQuIik7CiAKICAgICAgICAg
aWYgKHdpZHRoLnZhbHVlKCkgPCAwKQpAQCAtNDI4LDI2ICs0MjcsMTggQEAgdm9pZCBXZWJBdXRv
bWF0aW9uU2Vzc2lvbjo6c2V0V2luZG93RnJhbWVPZkJyb3dzaW5nQ29udGV4dChjb25zdCBTdHJp
bmcmIGhhbmRsZSwKICAgICB9KTsKIH0KIAotc3RhdGljIE9wdGlvbmFsPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkF1dG9tYXRpb246OlBhZ2VMb2FkU3RyYXRlZ3k+IHBhZ2VMb2FkU3RyYXRlZ3lGcm9t
U3RyaW5nUGFyYW1ldGVyKGNvbnN0IFN0cmluZyogb3B0aW9uYWxQYWdlTG9hZFN0cmF0ZWd5U3Ry
aW5nKQorc3RhdGljIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OlBhZ2VMb2FkU3Ry
YXRlZ3kgcGFnZUxvYWRTdHJhdGVneUZyb21QYXJhbWV0ZXIoT3B0aW9uYWw8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6QXV0b21hdGlvbjo6UGFnZUxvYWRTdHJhdGVneT4mJiBvcHRpb25hbFBhZ2VMb2Fk
U3RyYXRlZ3kpCiB7Ci0gICAgaWYgKCFvcHRpb25hbFBhZ2VMb2FkU3RyYXRlZ3lTdHJpbmcpCi0g
ICAgICAgIHJldHVybiBkZWZhdWx0UGFnZUxvYWRTdHJhdGVneTsKLQotICAgIGF1dG8gcGFyc2Vk
UGFnZUxvYWRTdHJhdGVneSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb25IZWxwZXJz
OjpwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlv
bjo6UGFnZUxvYWRTdHJhdGVneT4oKm9wdGlvbmFsUGFnZUxvYWRTdHJhdGVneVN0cmluZyk7Ci0g
ICAgaWYgKCFwYXJzZWRQYWdlTG9hZFN0cmF0ZWd5KQotICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwotICAgIHJldHVybiBwYXJzZWRQYWdlTG9hZFN0cmF0ZWd5OworICAgIHJldHVybiBvcHRp
b25hbFBhZ2VMb2FkU3RyYXRlZ3kudmFsdWVPcihkZWZhdWx0UGFnZUxvYWRTdHJhdGVneSk7CiB9
CiAKLXZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OndhaXRGb3JOYXZpZ2F0aW9uVG9Db21wbGV0
ZShjb25zdCBTdHJpbmcmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSwgY29uc3QgU3RyaW5nKiBvcHRp
b25hbEZyYW1lSGFuZGxlLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsUGFnZUxvYWRTdHJhdGVneVN0
cmluZywgY29uc3QgZG91YmxlKiBvcHRpb25hbFBhZ2VMb2FkVGltZW91dCwgUmVmPFdhaXRGb3JO
YXZpZ2F0aW9uVG9Db21wbGV0ZUNhbGxiYWNrPiYmIGNhbGxiYWNrKQordm9pZCBXZWJBdXRvbWF0
aW9uU2Vzc2lvbjo6d2FpdEZvck5hdmlnYXRpb25Ub0NvbXBsZXRlKGNvbnN0IEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYgYnJvd3NpbmdDb250
ZXh0SGFuZGxlLCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpGcmFtZUhh
bmRsZSYgb3B0aW9uYWxGcmFtZUhhbmRsZSwgT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6
QXV0b21hdGlvbjo6UGFnZUxvYWRTdHJhdGVneT4mJiBvcHRpb25hbFBhZ2VMb2FkU3RyYXRlZ3ks
IE9wdGlvbmFsPGRvdWJsZT4mJiBvcHRpb25hbFBhZ2VMb2FkVGltZW91dCwgUmVmPFdhaXRGb3JO
YXZpZ2F0aW9uVG9Db21wbGV0ZUNhbGxiYWNrPiYmIGNhbGxiYWNrKQogewogICAgIFdlYlBhZ2VQ
cm94eSogcGFnZSA9IHdlYlBhZ2VQcm94eUZvckhhbmRsZShicm93c2luZ0NvbnRleHRIYW5kbGUp
OwogICAgIGlmICghcGFnZSkKICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJS
T1IoV2luZG93Tm90Rm91bmQpOwogCi0gICAgYXV0byBwYWdlTG9hZFN0cmF0ZWd5ID0gcGFnZUxv
YWRTdHJhdGVneUZyb21TdHJpbmdQYXJhbWV0ZXIob3B0aW9uYWxQYWdlTG9hZFN0cmF0ZWd5U3Ry
aW5nKTsKLSAgICBpZiAoIXBhZ2VMb2FkU3RyYXRlZ3kpCi0gICAgICAgIEFTWU5DX0ZBSUxfV0lU
SF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxTKEludmFsaWRQYXJhbWV0ZXIsICJUaGUgcGFy
YW1ldGVyICdwYWdlTG9hZFN0cmF0ZWd5JyBpcyBpbnZhbGlkLiIpOworICAgIGF1dG8gcGFnZUxv
YWRTdHJhdGVneSA9IHBhZ2VMb2FkU3RyYXRlZ3lGcm9tUGFyYW1ldGVyKFdURk1vdmUob3B0aW9u
YWxQYWdlTG9hZFN0cmF0ZWd5KSk7CiAgICAgYXV0byBwYWdlTG9hZFRpbWVvdXQgPSBvcHRpb25h
bFBhZ2VMb2FkVGltZW91dCA/IFNlY29uZHM6OmZyb21NaWxsaXNlY29uZHMoKm9wdGlvbmFsUGFn
ZUxvYWRUaW1lb3V0KSA6IGRlZmF1bHRQYWdlTG9hZFRpbWVvdXQ7CiAKICAgICAvLyBJZiBwYWdl
IGlzIGxvYWRpbmcgYW5kIHRoZXJlJ3MgYW4gYWN0aXZlIEphdmFTY3JpcHQgZGlhbG9nIGlzIHBy
b2JhYmx5IGJlY2F1c2UgdGhlCkBAIC00NTUsMjIgKzQ0NiwyMiBAQCB2b2lkIFdlYkF1dG9tYXRp
b25TZXNzaW9uOjp3YWl0Rm9yTmF2aWdhdGlvblRvQ29tcGxldGUoY29uc3QgU3RyaW5nJiBicm93
c2luZ0NvbgogICAgIC8vIGxvYWQgd2lsbCBub3QgZmluaXNoIHVudGlsIHRoZSBkaWFsb2cgaXMg
ZGlzbWlzc2VkLiBJbnN0ZWFkIG9mIHdhaXRpbmcgZm9yIHRoZSB0aW1lb3V0LAogICAgIC8vIHdl
IHJldHVybiB3aXRob3V0IHdhaXRpbmcgc2luY2Ugd2Uga25vdyBpdCB3aWxsIHRpbWVvdXQgZm9y
IHN1cmUuIFdlIHdhbnQgdG8gY2hlY2sKICAgICAvLyBhcmd1bWVudHMgZmlyc3QsIHRob3VnaC4K
LSAgICBib29sIHNob3VsZFRpbWVvdXREdWVUb1VuZXhwZWN0ZWRBbGVydCA9IHBhZ2VMb2FkU3Ry
YXRlZ3kudmFsdWUoKSA9PSBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpQYWdlTG9h
ZFN0cmF0ZWd5OjpOb3JtYWwKKyAgICBib29sIHNob3VsZFRpbWVvdXREdWVUb1VuZXhwZWN0ZWRB
bGVydCA9IHBhZ2VMb2FkU3RyYXRlZ3kgPT0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlv
bjo6UGFnZUxvYWRTdHJhdGVneTo6Tm9ybWFsCiAgICAgICAgICYmIHBhZ2UtPnBhZ2VMb2FkU3Rh
dGUoKS5pc0xvYWRpbmcoKSAmJiBtX2NsaWVudC0+aXNTaG93aW5nSmF2YVNjcmlwdERpYWxvZ09u
UGFnZSgqdGhpcywgKnBhZ2UpOwogCi0gICAgaWYgKG9wdGlvbmFsRnJhbWVIYW5kbGUgJiYgIW9w
dGlvbmFsRnJhbWVIYW5kbGUtPmlzRW1wdHkoKSkgeworICAgIGlmICghb3B0aW9uYWxGcmFtZUhh
bmRsZS5pc0VtcHR5KCkpIHsKICAgICAgICAgYm9vbCBmcmFtZU5vdEZvdW5kID0gZmFsc2U7Ci0g
ICAgICAgIGF1dG8gZnJhbWVJRCA9IHdlYkZyYW1lSURGb3JIYW5kbGUoKm9wdGlvbmFsRnJhbWVI
YW5kbGUsIGZyYW1lTm90Rm91bmQpOworICAgICAgICBhdXRvIGZyYW1lSUQgPSB3ZWJGcmFtZUlE
Rm9ySGFuZGxlKG9wdGlvbmFsRnJhbWVIYW5kbGUsIGZyYW1lTm90Rm91bmQpOwogICAgICAgICBp
ZiAoZnJhbWVOb3RGb3VuZCkKICAgICAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVE
X0VSUk9SKEZyYW1lTm90Rm91bmQpOwogICAgICAgICBXZWJGcmFtZVByb3h5KiBmcmFtZSA9IHBh
Z2UtPnByb2Nlc3MoKS53ZWJGcmFtZShmcmFtZUlELnZhbHVlKCkpOwogICAgICAgICBpZiAoIWZy
YW1lKQogICAgICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1IoRnJhbWVO
b3RGb3VuZCk7CiAgICAgICAgIGlmICghc2hvdWxkVGltZW91dER1ZVRvVW5leHBlY3RlZEFsZXJ0
KQotICAgICAgICAgICAgd2FpdEZvck5hdmlnYXRpb25Ub0NvbXBsZXRlT25GcmFtZSgqZnJhbWUs
IHBhZ2VMb2FkU3RyYXRlZ3kudmFsdWUoKSwgcGFnZUxvYWRUaW1lb3V0LCBXVEZNb3ZlKGNhbGxi
YWNrKSk7CisgICAgICAgICAgICB3YWl0Rm9yTmF2aWdhdGlvblRvQ29tcGxldGVPbkZyYW1lKCpm
cmFtZSwgcGFnZUxvYWRTdHJhdGVneSwgcGFnZUxvYWRUaW1lb3V0LCBXVEZNb3ZlKGNhbGxiYWNr
KSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKCFzaG91bGRUaW1lb3V0RHVlVG9VbmV4cGVj
dGVkQWxlcnQpCi0gICAgICAgICAgICB3YWl0Rm9yTmF2aWdhdGlvblRvQ29tcGxldGVPblBhZ2Uo
KnBhZ2UsIHBhZ2VMb2FkU3RyYXRlZ3kudmFsdWUoKSwgcGFnZUxvYWRUaW1lb3V0LCBXVEZNb3Zl
KGNhbGxiYWNrKSk7CisgICAgICAgICAgICB3YWl0Rm9yTmF2aWdhdGlvblRvQ29tcGxldGVPblBh
Z2UoKnBhZ2UsIHBhZ2VMb2FkU3RyYXRlZ3ksIHBhZ2VMb2FkVGltZW91dCwgV1RGTW92ZShjYWxs
YmFjaykpOwogICAgIH0KIAogICAgIGlmIChzaG91bGRUaW1lb3V0RHVlVG9VbmV4cGVjdGVkQWxl
cnQpIHsKQEAgLTUyNyw3ICs1MTgsNyBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjp3YWl0
Rm9yTmF2aWdhdGlvblRvQ29tcGxldGVPbkZyYW1lKFdlYkZyYW1lUHJveHkmIGZyYQogCiB2b2lk
IFdlYkF1dG9tYXRpb25TZXNzaW9uOjpyZXNwb25kVG9QZW5kaW5nUGFnZU5hdmlnYXRpb25DYWxs
YmFja3NXaXRoVGltZW91dChIYXNoTWFwPFdlYlBhZ2VQcm94eUlkZW50aWZpZXIsIFJlZlB0cjxJ
bnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyOjpDYWxsYmFja0Jhc2U+PiYgbWFwKQogewotICAg
IEluc3BlY3Rvcjo6RXJyb3JTdHJpbmcgdGltZW91dEVycm9yID0gU1RSSU5HX0ZPUl9QUkVERUZJ
TkVEX0VSUk9SX05BTUUoVGltZW91dCk7CisgICAgYXV0byB0aW1lb3V0RXJyb3IgPSBTVFJJTkdf
Rk9SX1BSRURFRklORURfRVJST1JfTkFNRShUaW1lb3V0KTsKICAgICBmb3IgKGF1dG8gaWQgOiBj
b3B5VG9WZWN0b3IobWFwLmtleXMoKSkpIHsKICAgICAgICAgYXV0byBwYWdlID0gV2ViUHJvY2Vz
c1Byb3h5Ojp3ZWJQYWdlKGlkKTsKICAgICAgICAgYXV0byBjYWxsYmFjayA9IG1hcC50YWtlKGlk
KTsKQEAgLTU0OSw3ICs1NDAsNyBAQCBzdGF0aWMgV2ViUGFnZVByb3h5KiBmaW5kUGFnZUZvckZy
YW1lSUQoY29uc3QgV2ViUHJvY2Vzc1Bvb2wmIHByb2Nlc3NQb29sLCBGcmFtZQogCiB2b2lkIFdl
YkF1dG9tYXRpb25TZXNzaW9uOjpyZXNwb25kVG9QZW5kaW5nRnJhbWVOYXZpZ2F0aW9uQ2FsbGJh
Y2tzV2l0aFRpbWVvdXQoSGFzaE1hcDxGcmFtZUlkZW50aWZpZXIsIFJlZlB0cjxJbnNwZWN0b3I6
OkJhY2tlbmREaXNwYXRjaGVyOjpDYWxsYmFja0Jhc2U+PiYgbWFwKQogewotICAgIEluc3BlY3Rv
cjo6RXJyb3JTdHJpbmcgdGltZW91dEVycm9yID0gU1RSSU5HX0ZPUl9QUkVERUZJTkVEX0VSUk9S
X05BTUUoVGltZW91dCk7CisgICAgYXV0byB0aW1lb3V0RXJyb3IgPSBTVFJJTkdfRk9SX1BSRURF
RklORURfRVJST1JfTkFNRShUaW1lb3V0KTsKICAgICBmb3IgKGF1dG8gaWQgOiBjb3B5VG9WZWN0
b3IobWFwLmtleXMoKSkpIHsKICAgICAgICAgYXV0byogcGFnZSA9IGZpbmRQYWdlRm9yRnJhbWVJ
RCgqbV9wcm9jZXNzUG9vbCwgaWQpOwogICAgICAgICBhdXRvIGNhbGxiYWNrID0gbWFwLnRha2Uo
aWQpOwpAQCAtNTY4LDcgKzU1OSw3IEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OmxvYWRU
aW1lckZpcmVkKCkKICAgICByZXNwb25kVG9QZW5kaW5nUGFnZU5hdmlnYXRpb25DYWxsYmFja3NX
aXRoVGltZW91dChtX3BlbmRpbmdFYWdlck5hdmlnYXRpb25JbkJyb3dzaW5nQ29udGV4dENhbGxi
YWNrc1BlclBhZ2UpOwogfQogCi12b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjptYXhpbWl6ZVdp
bmRvd09mQnJvd3NpbmdDb250ZXh0KGNvbnN0IFN0cmluZyYgYnJvd3NpbmdDb250ZXh0SGFuZGxl
LCBSZWY8TWF4aW1pemVXaW5kb3dPZkJyb3dzaW5nQ29udGV4dENhbGxiYWNrPiYmIGNhbGxiYWNr
KQordm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6bWF4aW1pemVXaW5kb3dPZkJyb3dzaW5nQ29u
dGV4dChjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRl
eHRIYW5kbGUmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSwgUmVmPE1heGltaXplV2luZG93T2ZCcm93
c2luZ0NvbnRleHRDYWxsYmFjaz4mJiBjYWxsYmFjaykKIHsKICAgICBhdXRvKiBwYWdlID0gd2Vi
UGFnZVByb3h5Rm9ySGFuZGxlKGJyb3dzaW5nQ29udGV4dEhhbmRsZSk7CiAgICAgaWYgKCFwYWdl
KQpAQCAtNTg0LDcgKzU3NSw3IEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246Om1heGltaXpl
V2luZG93T2ZCcm93c2luZ0NvbnRleHQoY29uc3QgU3RyaW5nJiBicm93c2luCiAgICAgfSk7CiB9
CiAKLXZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OmhpZGVXaW5kb3dPZkJyb3dzaW5nQ29udGV4
dChjb25zdCBTdHJpbmcmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSwgUmVmPEhpZGVXaW5kb3dPZkJy
b3dzaW5nQ29udGV4dENhbGxiYWNrPiYmIGNhbGxiYWNrKQordm9pZCBXZWJBdXRvbWF0aW9uU2Vz
c2lvbjo6aGlkZVdpbmRvd09mQnJvd3NpbmdDb250ZXh0KGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYgYnJvd3NpbmdDb250ZXh0SGFu
ZGxlLCBSZWY8SGlkZVdpbmRvd09mQnJvd3NpbmdDb250ZXh0Q2FsbGJhY2s+JiYgY2FsbGJhY2sp
CiB7CiAgICAgV2ViUGFnZVByb3h5KiBwYWdlID0gd2ViUGFnZVByb3h5Rm9ySGFuZGxlKGJyb3dz
aW5nQ29udGV4dEhhbmRsZSk7CiAgICAgaWYgKCFwYWdlKQpAQCAtNjkzLDY0ICs2ODQsNTYgQEAg
dm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6ZGlkRXhpdEZ1bGxTY3JlZW5Gb3JQYWdlKGNvbnN0
IFdlYlBhZ2VQcm94eSYpCiAgICAgICAgIG1fd2luZG93U3RhdGVUcmFuc2l0aW9uQ2FsbGJhY2so
V2luZG93VHJhbnNpdGlvbmVkVG9TdGF0ZTo6VW5mdWxsc2NyZWVuKTsKIH0KIAotdm9pZCBXZWJB
dXRvbWF0aW9uU2Vzc2lvbjo6bmF2aWdhdGVCcm93c2luZ0NvbnRleHQoY29uc3QgU3RyaW5nJiBo
YW5kbGUsIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsUGFnZUxvYWRT
dHJhdGVneVN0cmluZywgY29uc3QgZG91YmxlKiBvcHRpb25hbFBhZ2VMb2FkVGltZW91dCwgUmVm
PE5hdmlnYXRlQnJvd3NpbmdDb250ZXh0Q2FsbGJhY2s+JiYgY2FsbGJhY2spCit2b2lkIFdlYkF1
dG9tYXRpb25TZXNzaW9uOjpuYXZpZ2F0ZUJyb3dzaW5nQ29udGV4dChjb25zdCBJbnNwZWN0b3I6
OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRIYW5kbGUmIGhhbmRsZSwgY29u
c3QgU3RyaW5nJiB1cmwsIE9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246
OlBhZ2VMb2FkU3RyYXRlZ3k+JiYgb3B0aW9uYWxQYWdlTG9hZFN0cmF0ZWd5LCBPcHRpb25hbDxk
b3VibGU+JiYgb3B0aW9uYWxQYWdlTG9hZFRpbWVvdXQsIFJlZjxOYXZpZ2F0ZUJyb3dzaW5nQ29u
dGV4dENhbGxiYWNrPiYmIGNhbGxiYWNrKQogewogICAgIFdlYlBhZ2VQcm94eSogcGFnZSA9IHdl
YlBhZ2VQcm94eUZvckhhbmRsZShoYW5kbGUpOwogICAgIGlmICghcGFnZSkKICAgICAgICAgQVNZ
TkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1IoV2luZG93Tm90Rm91bmQpOwogCi0gICAgYXV0
byBwYWdlTG9hZFN0cmF0ZWd5ID0gcGFnZUxvYWRTdHJhdGVneUZyb21TdHJpbmdQYXJhbWV0ZXIo
b3B0aW9uYWxQYWdlTG9hZFN0cmF0ZWd5U3RyaW5nKTsKLSAgICBpZiAoIXBhZ2VMb2FkU3RyYXRl
Z3kpCi0gICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxT
KEludmFsaWRQYXJhbWV0ZXIsICJUaGUgcGFyYW1ldGVyICdwYWdlTG9hZFN0cmF0ZWd5JyBpcyBp
bnZhbGlkLiIpOworICAgIGF1dG8gcGFnZUxvYWRTdHJhdGVneSA9IHBhZ2VMb2FkU3RyYXRlZ3lG
cm9tUGFyYW1ldGVyKFdURk1vdmUob3B0aW9uYWxQYWdlTG9hZFN0cmF0ZWd5KSk7CiAgICAgYXV0
byBwYWdlTG9hZFRpbWVvdXQgPSBvcHRpb25hbFBhZ2VMb2FkVGltZW91dCA/IFNlY29uZHM6OmZy
b21NaWxsaXNlY29uZHMoKm9wdGlvbmFsUGFnZUxvYWRUaW1lb3V0KSA6IGRlZmF1bHRQYWdlTG9h
ZFRpbWVvdXQ7CiAKICAgICBwYWdlLT5sb2FkUmVxdWVzdChVUkwoVVJMKCksIHVybCkpOwotICAg
IHdhaXRGb3JOYXZpZ2F0aW9uVG9Db21wbGV0ZU9uUGFnZSgqcGFnZSwgcGFnZUxvYWRTdHJhdGVn
eS52YWx1ZSgpLCBwYWdlTG9hZFRpbWVvdXQsIFdURk1vdmUoY2FsbGJhY2spKTsKKyAgICB3YWl0
Rm9yTmF2aWdhdGlvblRvQ29tcGxldGVPblBhZ2UoKnBhZ2UsIHBhZ2VMb2FkU3RyYXRlZ3ksIHBh
Z2VMb2FkVGltZW91dCwgV1RGTW92ZShjYWxsYmFjaykpOwogfQogCi12b2lkIFdlYkF1dG9tYXRp
b25TZXNzaW9uOjpnb0JhY2tJbkJyb3dzaW5nQ29udGV4dChjb25zdCBTdHJpbmcmIGhhbmRsZSwg
Y29uc3QgU3RyaW5nKiBvcHRpb25hbFBhZ2VMb2FkU3RyYXRlZ3lTdHJpbmcsIGNvbnN0IGRvdWJs
ZSogb3B0aW9uYWxQYWdlTG9hZFRpbWVvdXQsIFJlZjxHb0JhY2tJbkJyb3dzaW5nQ29udGV4dENh
bGxiYWNrPiYmIGNhbGxiYWNrKQordm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6Z29CYWNrSW5C
cm93c2luZ0NvbnRleHQoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJv
d3NpbmdDb250ZXh0SGFuZGxlJiBoYW5kbGUsIE9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkF1dG9tYXRpb246OlBhZ2VMb2FkU3RyYXRlZ3k+JiYgb3B0aW9uYWxQYWdlTG9hZFN0cmF0ZWd5
LCBPcHRpb25hbDxkb3VibGU+JiYgb3B0aW9uYWxQYWdlTG9hZFRpbWVvdXQsIFJlZjxHb0JhY2tJ
bkJyb3dzaW5nQ29udGV4dENhbGxiYWNrPiYmIGNhbGxiYWNrKQogewogICAgIFdlYlBhZ2VQcm94
eSogcGFnZSA9IHdlYlBhZ2VQcm94eUZvckhhbmRsZShoYW5kbGUpOwogICAgIGlmICghcGFnZSkK
ICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1IoV2luZG93Tm90Rm91bmQp
OwogCi0gICAgYXV0byBwYWdlTG9hZFN0cmF0ZWd5ID0gcGFnZUxvYWRTdHJhdGVneUZyb21TdHJp
bmdQYXJhbWV0ZXIob3B0aW9uYWxQYWdlTG9hZFN0cmF0ZWd5U3RyaW5nKTsKLSAgICBpZiAoIXBh
Z2VMb2FkU3RyYXRlZ3kpCi0gICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9S
X0FORF9ERVRBSUxTKEludmFsaWRQYXJhbWV0ZXIsICJUaGUgcGFyYW1ldGVyICdwYWdlTG9hZFN0
cmF0ZWd5JyBpcyBpbnZhbGlkLiIpOworICAgIGF1dG8gcGFnZUxvYWRTdHJhdGVneSA9IHBhZ2VM
b2FkU3RyYXRlZ3lGcm9tUGFyYW1ldGVyKFdURk1vdmUob3B0aW9uYWxQYWdlTG9hZFN0cmF0ZWd5
KSk7CiAgICAgYXV0byBwYWdlTG9hZFRpbWVvdXQgPSBvcHRpb25hbFBhZ2VMb2FkVGltZW91dCA/
IFNlY29uZHM6OmZyb21NaWxsaXNlY29uZHMoKm9wdGlvbmFsUGFnZUxvYWRUaW1lb3V0KSA6IGRl
ZmF1bHRQYWdlTG9hZFRpbWVvdXQ7CiAKICAgICBwYWdlLT5nb0JhY2soKTsKLSAgICB3YWl0Rm9y
TmF2aWdhdGlvblRvQ29tcGxldGVPblBhZ2UoKnBhZ2UsIHBhZ2VMb2FkU3RyYXRlZ3kudmFsdWUo
KSwgcGFnZUxvYWRUaW1lb3V0LCBXVEZNb3ZlKGNhbGxiYWNrKSk7CisgICAgd2FpdEZvck5hdmln
YXRpb25Ub0NvbXBsZXRlT25QYWdlKCpwYWdlLCBwYWdlTG9hZFN0cmF0ZWd5LCBwYWdlTG9hZFRp
bWVvdXQsIFdURk1vdmUoY2FsbGJhY2spKTsKIH0KIAotdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lv
bjo6Z29Gb3J3YXJkSW5Ccm93c2luZ0NvbnRleHQoY29uc3QgU3RyaW5nJiBoYW5kbGUsIGNvbnN0
IFN0cmluZyogb3B0aW9uYWxQYWdlTG9hZFN0cmF0ZWd5U3RyaW5nLCBjb25zdCBkb3VibGUqIG9w
dGlvbmFsUGFnZUxvYWRUaW1lb3V0LCBSZWY8R29Gb3J3YXJkSW5Ccm93c2luZ0NvbnRleHRDYWxs
YmFjaz4mJiBjYWxsYmFjaykKK3ZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OmdvRm9yd2FyZElu
QnJvd3NpbmdDb250ZXh0KGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJy
b3dzaW5nQ29udGV4dEhhbmRsZSYgaGFuZGxlLCBPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29s
OjpBdXRvbWF0aW9uOjpQYWdlTG9hZFN0cmF0ZWd5PiYmIG9wdGlvbmFsUGFnZUxvYWRTdHJhdGVn
eSwgT3B0aW9uYWw8ZG91YmxlPiYmIG9wdGlvbmFsUGFnZUxvYWRUaW1lb3V0LCBSZWY8R29Gb3J3
YXJkSW5Ccm93c2luZ0NvbnRleHRDYWxsYmFjaz4mJiBjYWxsYmFjaykKIHsKICAgICBXZWJQYWdl
UHJveHkqIHBhZ2UgPSB3ZWJQYWdlUHJveHlGb3JIYW5kbGUoaGFuZGxlKTsKICAgICBpZiAoIXBh
Z2UpCiAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SKFdpbmRvd05vdEZv
dW5kKTsKIAotICAgIGF1dG8gcGFnZUxvYWRTdHJhdGVneSA9IHBhZ2VMb2FkU3RyYXRlZ3lGcm9t
U3RyaW5nUGFyYW1ldGVyKG9wdGlvbmFsUGFnZUxvYWRTdHJhdGVneVN0cmluZyk7Ci0gICAgaWYg
KCFwYWdlTG9hZFN0cmF0ZWd5KQotICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9F
UlJPUl9BTkRfREVUQUlMUyhJbnZhbGlkUGFyYW1ldGVyLCAiVGhlIHBhcmFtZXRlciAncGFnZUxv
YWRTdHJhdGVneScgaXMgaW52YWxpZC4iKTsKKyAgICBhdXRvIHBhZ2VMb2FkU3RyYXRlZ3kgPSBw
YWdlTG9hZFN0cmF0ZWd5RnJvbVBhcmFtZXRlcihXVEZNb3ZlKG9wdGlvbmFsUGFnZUxvYWRTdHJh
dGVneSkpOwogICAgIGF1dG8gcGFnZUxvYWRUaW1lb3V0ID0gb3B0aW9uYWxQYWdlTG9hZFRpbWVv
dXQgPyBTZWNvbmRzOjpmcm9tTWlsbGlzZWNvbmRzKCpvcHRpb25hbFBhZ2VMb2FkVGltZW91dCkg
OiBkZWZhdWx0UGFnZUxvYWRUaW1lb3V0OwogCiAgICAgcGFnZS0+Z29Gb3J3YXJkKCk7Ci0gICAg
d2FpdEZvck5hdmlnYXRpb25Ub0NvbXBsZXRlT25QYWdlKCpwYWdlLCBwYWdlTG9hZFN0cmF0ZWd5
LnZhbHVlKCksIHBhZ2VMb2FkVGltZW91dCwgV1RGTW92ZShjYWxsYmFjaykpOworICAgIHdhaXRG
b3JOYXZpZ2F0aW9uVG9Db21wbGV0ZU9uUGFnZSgqcGFnZSwgcGFnZUxvYWRTdHJhdGVneSwgcGFn
ZUxvYWRUaW1lb3V0LCBXVEZNb3ZlKGNhbGxiYWNrKSk7CiB9CiAKLXZvaWQgV2ViQXV0b21hdGlv
blNlc3Npb246OnJlbG9hZEJyb3dzaW5nQ29udGV4dChjb25zdCBTdHJpbmcmIGhhbmRsZSwgY29u
c3QgU3RyaW5nKiBvcHRpb25hbFBhZ2VMb2FkU3RyYXRlZ3lTdHJpbmcsIGNvbnN0IGRvdWJsZSog
b3B0aW9uYWxQYWdlTG9hZFRpbWVvdXQsIFJlZjxSZWxvYWRCcm93c2luZ0NvbnRleHRDYWxsYmFj
az4mJiBjYWxsYmFjaykKK3ZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OnJlbG9hZEJyb3dzaW5n
Q29udGV4dChjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0Nv
bnRleHRIYW5kbGUmIGhhbmRsZSwgT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21h
dGlvbjo6UGFnZUxvYWRTdHJhdGVneT4mJiBvcHRpb25hbFBhZ2VMb2FkU3RyYXRlZ3ksIE9wdGlv
bmFsPGRvdWJsZT4mJiBvcHRpb25hbFBhZ2VMb2FkVGltZW91dCwgUmVmPFJlbG9hZEJyb3dzaW5n
Q29udGV4dENhbGxiYWNrPiYmIGNhbGxiYWNrKQogewogICAgIFdlYlBhZ2VQcm94eSogcGFnZSA9
IHdlYlBhZ2VQcm94eUZvckhhbmRsZShoYW5kbGUpOwogICAgIGlmICghcGFnZSkKICAgICAgICAg
QVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1IoV2luZG93Tm90Rm91bmQpOwogCi0gICAg
YXV0byBwYWdlTG9hZFN0cmF0ZWd5ID0gcGFnZUxvYWRTdHJhdGVneUZyb21TdHJpbmdQYXJhbWV0
ZXIob3B0aW9uYWxQYWdlTG9hZFN0cmF0ZWd5U3RyaW5nKTsKLSAgICBpZiAoIXBhZ2VMb2FkU3Ry
YXRlZ3kpCi0gICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRB
SUxTKEludmFsaWRQYXJhbWV0ZXIsICJUaGUgcGFyYW1ldGVyICdwYWdlTG9hZFN0cmF0ZWd5JyBp
cyBpbnZhbGlkLiIpOworICAgIGF1dG8gcGFnZUxvYWRTdHJhdGVneSA9IHBhZ2VMb2FkU3RyYXRl
Z3lGcm9tUGFyYW1ldGVyKFdURk1vdmUob3B0aW9uYWxQYWdlTG9hZFN0cmF0ZWd5KSk7CiAgICAg
YXV0byBwYWdlTG9hZFRpbWVvdXQgPSBvcHRpb25hbFBhZ2VMb2FkVGltZW91dCA/IFNlY29uZHM6
OmZyb21NaWxsaXNlY29uZHMoKm9wdGlvbmFsUGFnZUxvYWRUaW1lb3V0KSA6IGRlZmF1bHRQYWdl
TG9hZFRpbWVvdXQ7CiAKICAgICBwYWdlLT5yZWxvYWQoeyB9KTsKLSAgICB3YWl0Rm9yTmF2aWdh
dGlvblRvQ29tcGxldGVPblBhZ2UoKnBhZ2UsIHBhZ2VMb2FkU3RyYXRlZ3kudmFsdWUoKSwgcGFn
ZUxvYWRUaW1lb3V0LCBXVEZNb3ZlKGNhbGxiYWNrKSk7CisgICAgd2FpdEZvck5hdmlnYXRpb25U
b0NvbXBsZXRlT25QYWdlKCpwYWdlLCBwYWdlTG9hZFN0cmF0ZWd5LCBwYWdlTG9hZFRpbWVvdXQs
IFdURk1vdmUoY2FsbGJhY2spKTsKIH0KIAogdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6bmF2
aWdhdGlvbk9jY3VycmVkRm9yRnJhbWUoY29uc3QgV2ViRnJhbWVQcm94eSYgZnJhbWUpCkBAIC05
MjIsMzUgKzkwNSwyNyBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpoYW5kbGVSdW5PcGVu
UGFuZWwoY29uc3QgV2ViUGFnZVByb3h5JiBwYWdlLCBjb25zdCBXZQogICAgIG1fZG9tYWluTm90
aWZpZXItPmZpbGVDaG9vc2VyRGlzbWlzc2VkKGJyb3dzaW5nQ29udGV4dEhhbmRsZSwgZmFsc2Up
OwogfQogCi12b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpldmFsdWF0ZUphdmFTY3JpcHRGdW5j
dGlvbihjb25zdCBTdHJpbmcmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSwgY29uc3QgU3RyaW5nKiBv
cHRpb25hbEZyYW1lSGFuZGxlLCBjb25zdCBTdHJpbmcmIGZ1bmN0aW9uLCBjb25zdCBKU09OOjpB
cnJheSYgYXJndW1lbnRzLCBjb25zdCBib29sKiBvcHRpb25hbEV4cGVjdHNJbXBsaWNpdENhbGxi
YWNrQXJndW1lbnQsIGNvbnN0IGRvdWJsZSogb3B0aW9uYWxDYWxsYmFja1RpbWVvdXQsIFJlZjxF
dmFsdWF0ZUphdmFTY3JpcHRGdW5jdGlvbkNhbGxiYWNrPiYmIGNhbGxiYWNrKQordm9pZCBXZWJB
dXRvbWF0aW9uU2Vzc2lvbjo6ZXZhbHVhdGVKYXZhU2NyaXB0RnVuY3Rpb24oY29uc3QgSW5zcGVj
dG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJiBicm93c2lu
Z0NvbnRleHRIYW5kbGUsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkZy
YW1lSGFuZGxlJiBmcmFtZUhhbmRsZSwgY29uc3QgU3RyaW5nJiBmdW5jdGlvbiwgUmVmPEpTT046
OkFycmF5PiYmIGFyZ3VtZW50cywgT3B0aW9uYWw8Ym9vbD4mJiBleHBlY3RzSW1wbGljaXRDYWxs
YmFja0FyZ3VtZW50LCBPcHRpb25hbDxkb3VibGU+JiYgY2FsbGJhY2tUaW1lb3V0LCBSZWY8RXZh
bHVhdGVKYXZhU2NyaXB0RnVuY3Rpb25DYWxsYmFjaz4mJiBjYWxsYmFjaykKIHsKICAgICBXZWJQ
YWdlUHJveHkqIHBhZ2UgPSB3ZWJQYWdlUHJveHlGb3JIYW5kbGUoYnJvd3NpbmdDb250ZXh0SGFu
ZGxlKTsKICAgICBpZiAoIXBhZ2UpCiAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVE
X0VSUk9SKFdpbmRvd05vdEZvdW5kKTsKIAogICAgIGJvb2wgZnJhbWVOb3RGb3VuZCA9IGZhbHNl
OwotICAgIGF1dG8gZnJhbWVJRCA9IHdlYkZyYW1lSURGb3JIYW5kbGUob3B0aW9uYWxGcmFtZUhh
bmRsZSA/ICpvcHRpb25hbEZyYW1lSGFuZGxlIDogZW1wdHlTdHJpbmcoKSwgZnJhbWVOb3RGb3Vu
ZCk7CisgICAgYXV0byBmcmFtZUlEID0gd2ViRnJhbWVJREZvckhhbmRsZShmcmFtZUhhbmRsZSwg
ZnJhbWVOb3RGb3VuZCk7CiAgICAgaWYgKGZyYW1lTm90Rm91bmQpCiAgICAgICAgIEFTWU5DX0ZB
SUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SKEZyYW1lTm90Rm91bmQpOwogCiAgICAgVmVjdG9yPFN0
cmluZz4gYXJndW1lbnRzVmVjdG9yOwotICAgIGFyZ3VtZW50c1ZlY3Rvci5yZXNlcnZlQ2FwYWNp
dHkoYXJndW1lbnRzLmxlbmd0aCgpKTsKKyAgICBhcmd1bWVudHNWZWN0b3IucmVzZXJ2ZUNhcGFj
aXR5KGFyZ3VtZW50cy0+bGVuZ3RoKCkpOwogCi0gICAgZm9yIChhdXRvJiBhcmd1bWVudCA6IGFy
Z3VtZW50cykgewotICAgICAgICBTdHJpbmcgYXJndW1lbnRTdHJpbmc7Ci0gICAgICAgIGFyZ3Vt
ZW50LT5hc1N0cmluZyhhcmd1bWVudFN0cmluZyk7Ci0gICAgICAgIGFyZ3VtZW50c1ZlY3Rvci51
bmNoZWNrZWRBcHBlbmQoYXJndW1lbnRTdHJpbmcpOwotICAgIH0KLQotICAgIGJvb2wgZXhwZWN0
c0ltcGxpY2l0Q2FsbGJhY2tBcmd1bWVudCA9IG9wdGlvbmFsRXhwZWN0c0ltcGxpY2l0Q2FsbGJh
Y2tBcmd1bWVudCA/ICpvcHRpb25hbEV4cGVjdHNJbXBsaWNpdENhbGxiYWNrQXJndW1lbnQgOiBm
YWxzZTsKLSAgICBPcHRpb25hbDxkb3VibGU+IGNhbGxiYWNrVGltZW91dDsKLSAgICBpZiAob3B0
aW9uYWxDYWxsYmFja1RpbWVvdXQpCi0gICAgICAgIGNhbGxiYWNrVGltZW91dCA9ICpvcHRpb25h
bENhbGxiYWNrVGltZW91dDsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGFyZ3VtZW50IDogYXJndW1l
bnRzLmdldCgpKQorICAgICAgICBhcmd1bWVudHNWZWN0b3IudW5jaGVja2VkQXBwZW5kKGFyZ3Vt
ZW50LT5hc1N0cmluZygpKTsKIAogICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBtX25leHRFdmFs
dWF0ZUphdmFTY3JpcHRDYWxsYmFja0lEKys7CiAgICAgbV9ldmFsdWF0ZUphdmFTY3JpcHRGdW5j
dGlvbkNhbGxiYWNrcy5zZXQoY2FsbGJhY2tJRCwgV1RGTW92ZShjYWxsYmFjaykpOwogCi0gICAg
cGFnZS0+cHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6OldlYkF1dG9tYXRpb25TZXNzaW9uUHJveHk6
OkV2YWx1YXRlSmF2YVNjcmlwdEZ1bmN0aW9uKHBhZ2UtPndlYlBhZ2VJRCgpLCBmcmFtZUlELCBm
dW5jdGlvbiwgYXJndW1lbnRzVmVjdG9yLCBleHBlY3RzSW1wbGljaXRDYWxsYmFja0FyZ3VtZW50
LCBjYWxsYmFja1RpbWVvdXQsIGNhbGxiYWNrSUQpLCAwKTsKKyAgICBwYWdlLT5wcm9jZXNzKCku
c2VuZChNZXNzYWdlczo6V2ViQXV0b21hdGlvblNlc3Npb25Qcm94eTo6RXZhbHVhdGVKYXZhU2Ny
aXB0RnVuY3Rpb24ocGFnZS0+d2ViUGFnZUlEKCksIGZyYW1lSUQsIGZ1bmN0aW9uLCBhcmd1bWVu
dHNWZWN0b3IsIGV4cGVjdHNJbXBsaWNpdENhbGxiYWNrQXJndW1lbnQudmFsdWVPcihmYWxzZSks
IFdURk1vdmUoY2FsbGJhY2tUaW1lb3V0KSwgY2FsbGJhY2tJRCksIDApOwogfQogCiB2b2lkIFdl
YkF1dG9tYXRpb25TZXNzaW9uOjpkaWRFdmFsdWF0ZUphdmFTY3JpcHRGdW5jdGlvbih1aW50NjRf
dCBjYWxsYmFja0lELCBjb25zdCBTdHJpbmcmIHJlc3VsdCwgY29uc3QgU3RyaW5nJiBlcnJvclR5
cGUpCkBAIC05NjUsNyArOTQwLDcgQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6ZGlkRXZh
bHVhdGVKYXZhU2NyaXB0RnVuY3Rpb24odWludDY0X3QgY2FsbGJhY2tJRCwgY28KICAgICAgICAg
Y2FsbGJhY2stPnNlbmRTdWNjZXNzKHJlc3VsdCk7CiB9CiAKLXZvaWQgV2ViQXV0b21hdGlvblNl
c3Npb246OnJlc29sdmVDaGlsZEZyYW1lSGFuZGxlKGNvbnN0IFN0cmluZyYgYnJvd3NpbmdDb250
ZXh0SGFuZGxlLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsRnJhbWVIYW5kbGUsIGNvbnN0IGludCog
b3B0aW9uYWxPcmRpbmFsLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsTmFtZSwgY29uc3QgU3RyaW5n
KiBvcHRpb25hbE5vZGVIYW5kbGUsIFJlZjxSZXNvbHZlQ2hpbGRGcmFtZUhhbmRsZUNhbGxiYWNr
PiYmIGNhbGxiYWNrKQordm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6cmVzb2x2ZUNoaWxkRnJh
bWVIYW5kbGUoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdD
b250ZXh0SGFuZGxlJiBicm93c2luZ0NvbnRleHRIYW5kbGUsIGNvbnN0IEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkF1dG9tYXRpb246OkZyYW1lSGFuZGxlJiBmcmFtZUhhbmRsZSwgT3B0aW9uYWw8aW50
PiYmIG9wdGlvbmFsT3JkaW5hbCwgY29uc3QgU3RyaW5nJiBvcHRpb25hbE5hbWUsIGNvbnN0IElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246Ok5vZGVIYW5kbGUmIG9wdGlvbmFsTm9kZUhh
bmRsZSwgUmVmPFJlc29sdmVDaGlsZEZyYW1lSGFuZGxlQ2FsbGJhY2s+JiYgY2FsbGJhY2spCiB7
CiAgICAgaWYgKCFvcHRpb25hbE9yZGluYWwgJiYgIW9wdGlvbmFsTmFtZSAmJiAhb3B0aW9uYWxO
b2RlSGFuZGxlKQogICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUl9BTkRf
REVUQUlMUyhNaXNzaW5nUGFyYW1ldGVyLCAiQ29tbWFuZCBtdXN0IHNwZWNpZnkgYSBjaGlsZCBm
cmFtZSBieSBvcmRpbmFsLCBuYW1lLCBvciBlbGVtZW50IGhhbmRsZS4iKTsKQEAgLTk3NSw3ICs5
NTAsNyBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpyZXNvbHZlQ2hpbGRGcmFtZUhhbmRs
ZShjb25zdCBTdHJpbmcmIGJyb3dzaW5nQ29udGV4dAogICAgICAgICBBU1lOQ19GQUlMX1dJVEhf
UFJFREVGSU5FRF9FUlJPUihXaW5kb3dOb3RGb3VuZCk7CiAKICAgICBib29sIGZyYW1lTm90Rm91
bmQgPSBmYWxzZTsKLSAgICBhdXRvIGZyYW1lSUQgPSB3ZWJGcmFtZUlERm9ySGFuZGxlKG9wdGlv
bmFsRnJhbWVIYW5kbGUgPyAqb3B0aW9uYWxGcmFtZUhhbmRsZSA6IGVtcHR5U3RyaW5nKCksIGZy
YW1lTm90Rm91bmQpOworICAgIGF1dG8gZnJhbWVJRCA9IHdlYkZyYW1lSURGb3JIYW5kbGUoZnJh
bWVIYW5kbGUsIGZyYW1lTm90Rm91bmQpOwogICAgIGlmIChmcmFtZU5vdEZvdW5kKQogICAgICAg
ICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUihGcmFtZU5vdEZvdW5kKTsKIApAQCAt
OTg4LDEzICs5NjMsMTMgQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6cmVzb2x2ZUNoaWxk
RnJhbWVIYW5kbGUoY29uc3QgU3RyaW5nJiBicm93c2luZ0NvbnRleHQKICAgICAgICAgY2FsbGJh
Y2stPnNlbmRTdWNjZXNzKGhhbmRsZUZvcldlYkZyYW1lSUQoZnJhbWVJRCkpOwogICAgIH07CiAK
LSAgICBpZiAob3B0aW9uYWxOb2RlSGFuZGxlKSB7Ci0gICAgICAgIHBhZ2UtPnByb2Nlc3MoKS5z
ZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkF1dG9tYXRpb25TZXNzaW9uUHJveHk6OlJl
c29sdmVDaGlsZEZyYW1lV2l0aE5vZGVIYW5kbGUocGFnZS0+d2ViUGFnZUlEKCksIGZyYW1lSUQs
ICpvcHRpb25hbE5vZGVIYW5kbGUpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CisgICAg
aWYgKCEhb3B0aW9uYWxOb2RlSGFuZGxlKSB7CisgICAgICAgIHBhZ2UtPnByb2Nlc3MoKS5zZW5k
V2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkF1dG9tYXRpb25TZXNzaW9uUHJveHk6OlJlc29s
dmVDaGlsZEZyYW1lV2l0aE5vZGVIYW5kbGUocGFnZS0+d2ViUGFnZUlEKCksIGZyYW1lSUQsIG9w
dGlvbmFsTm9kZUhhbmRsZSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAotICAgIGlmIChvcHRpb25hbE5hbWUpIHsKLSAgICAgICAgcGFnZS0+
cHJvY2VzcygpLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQXV0b21hdGlvblNlc3Np
b25Qcm94eTo6UmVzb2x2ZUNoaWxkRnJhbWVXaXRoTmFtZShwYWdlLT53ZWJQYWdlSUQoKSwgZnJh
bWVJRCwgKm9wdGlvbmFsTmFtZSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICBp
ZiAoISFvcHRpb25hbE5hbWUpIHsKKyAgICAgICAgcGFnZS0+cHJvY2VzcygpLnNlbmRXaXRoQXN5
bmNSZXBseShNZXNzYWdlczo6V2ViQXV0b21hdGlvblNlc3Npb25Qcm94eTo6UmVzb2x2ZUNoaWxk
RnJhbWVXaXRoTmFtZShwYWdlLT53ZWJQYWdlSUQoKSwgZnJhbWVJRCwgb3B0aW9uYWxOYW1lKSwg
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBA
IC0xMDA2LDcgKzk4MSw3IEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OnJlc29sdmVDaGls
ZEZyYW1lSGFuZGxlKGNvbnN0IFN0cmluZyYgYnJvd3NpbmdDb250ZXh0CiAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiB9CiAKLXZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OnJlc29sdmVQYXJl
bnRGcmFtZUhhbmRsZShjb25zdCBTdHJpbmcmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSwgY29uc3Qg
U3RyaW5nJiBmcmFtZUhhbmRsZSwgUmVmPFJlc29sdmVQYXJlbnRGcmFtZUhhbmRsZUNhbGxiYWNr
PiYmIGNhbGxiYWNrKQordm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6cmVzb2x2ZVBhcmVudEZy
YW1lSGFuZGxlKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5n
Q29udGV4dEhhbmRsZSYgYnJvd3NpbmdDb250ZXh0SGFuZGxlLCBjb25zdCBJbnNwZWN0b3I6OlBy
b3RvY29sOjpBdXRvbWF0aW9uOjpGcmFtZUhhbmRsZSYgZnJhbWVIYW5kbGUsIFJlZjxSZXNvbHZl
UGFyZW50RnJhbWVIYW5kbGVDYWxsYmFjaz4mJiBjYWxsYmFjaykKIHsKICAgICBXZWJQYWdlUHJv
eHkqIHBhZ2UgPSB3ZWJQYWdlUHJveHlGb3JIYW5kbGUoYnJvd3NpbmdDb250ZXh0SGFuZGxlKTsK
ICAgICBpZiAoIXBhZ2UpCkBAIC0xMDI5LDE2ICsxMDA0LDIyIEBAIHZvaWQgV2ViQXV0b21hdGlv
blNlc3Npb246OnJlc29sdmVQYXJlbnRGcmFtZUhhbmRsZShjb25zdCBTdHJpbmcmIGJyb3dzaW5n
Q29udGV4CiAgICAgcGFnZS0+cHJvY2VzcygpLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6
V2ViQXV0b21hdGlvblNlc3Npb25Qcm94eTo6UmVzb2x2ZVBhcmVudEZyYW1lKHBhZ2UtPndlYlBh
Z2VJRCgpLCBmcmFtZUlEKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCi1zdGF0
aWMgT3B0aW9uYWw8Q29vcmRpbmF0ZVN5c3RlbT4gcHJvdG9jb2xTdHJpbmdUb0Nvb3JkaW5hdGVT
eXN0ZW0oY29uc3QgU3RyaW5nJiBjb29yZGluYXRlU3lzdGVtU3RyaW5nKQorc3RhdGljIE9wdGlv
bmFsPENvb3JkaW5hdGVTeXN0ZW0+IHByb3RvY29sU3RyaW5nVG9Db29yZGluYXRlU3lzdGVtKElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkNvb3JkaW5hdGVTeXN0ZW0gY29vcmRpbmF0
ZVN5c3RlbSkKIHsKLSAgICBpZiAoY29vcmRpbmF0ZVN5c3RlbVN0cmluZyA9PSAiUGFnZSIpCisg
ICAgc3dpdGNoIChjb29yZGluYXRlU3lzdGVtKSB7CisgICAgY2FzZSBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpBdXRvbWF0aW9uOjpDb29yZGluYXRlU3lzdGVtOjpQYWdlOgogICAgICAgICByZXR1cm4g
Q29vcmRpbmF0ZVN5c3RlbTo6UGFnZTsKLSAgICBpZiAoY29vcmRpbmF0ZVN5c3RlbVN0cmluZyA9
PSAiTGF5b3V0Vmlld3BvcnQiKQorCisgICAgY2FzZSBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRv
bWF0aW9uOjpDb29yZGluYXRlU3lzdGVtOjpWaWV3cG9ydDoKKyAgICBjYXNlIEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkF1dG9tYXRpb246OkNvb3JkaW5hdGVTeXN0ZW06OkxheW91dFZpZXdwb3J0Ogog
ICAgICAgICByZXR1cm4gQ29vcmRpbmF0ZVN5c3RlbTo6TGF5b3V0Vmlld3BvcnQ7CisgICAgfQor
CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0K
IAotdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6Y29tcHV0ZUVsZW1lbnRMYXlvdXQoY29uc3Qg
U3RyaW5nJiBicm93c2luZ0NvbnRleHRIYW5kbGUsIGNvbnN0IFN0cmluZyYgZnJhbWVIYW5kbGUs
IGNvbnN0IFN0cmluZyYgbm9kZUhhbmRsZSwgY29uc3QgYm9vbCogb3B0aW9uYWxTY3JvbGxJbnRv
Vmlld0lmTmVlZGVkLCBjb25zdCBTdHJpbmcmIGNvb3JkaW5hdGVTeXN0ZW1TdHJpbmcsIFJlZjxD
b21wdXRlRWxlbWVudExheW91dENhbGxiYWNrPiYmIGNhbGxiYWNrKQordm9pZCBXZWJBdXRvbWF0
aW9uU2Vzc2lvbjo6Y29tcHV0ZUVsZW1lbnRMYXlvdXQoY29uc3QgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJiBicm93c2luZ0NvbnRleHRIYW5k
bGUsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkZyYW1lSGFuZGxlJiBm
cmFtZUhhbmRsZSwgY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6Tm9kZUhh
bmRsZSYgbm9kZUhhbmRsZSwgT3B0aW9uYWw8Ym9vbD4mJiBvcHRpb25hbFNjcm9sbEludG9WaWV3
SWZOZWVkZWQsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkNvb3JkaW5hdGVTeXN0
ZW0gY29vcmRpbmF0ZVN5c3RlbVZhbHVlLCBSZWY8Q29tcHV0ZUVsZW1lbnRMYXlvdXRDYWxsYmFj
az4mJiBjYWxsYmFjaykKIHsKICAgICBXZWJQYWdlUHJveHkqIHBhZ2UgPSB3ZWJQYWdlUHJveHlG
b3JIYW5kbGUoYnJvd3NpbmdDb250ZXh0SGFuZGxlKTsKICAgICBpZiAoIXBhZ2UpCkBAIC0xMDQ5
LDcgKzEwMzAsNyBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpjb21wdXRlRWxlbWVudExh
eW91dChjb25zdCBTdHJpbmcmIGJyb3dzaW5nQ29udGV4dEhhbgogICAgIGlmIChmcmFtZU5vdEZv
dW5kKQogICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUihGcmFtZU5vdEZv
dW5kKTsKIAotICAgIE9wdGlvbmFsPENvb3JkaW5hdGVTeXN0ZW0+IGNvb3JkaW5hdGVTeXN0ZW0g
PSBwcm90b2NvbFN0cmluZ1RvQ29vcmRpbmF0ZVN5c3RlbShjb29yZGluYXRlU3lzdGVtU3RyaW5n
KTsKKyAgICBPcHRpb25hbDxDb29yZGluYXRlU3lzdGVtPiBjb29yZGluYXRlU3lzdGVtID0gcHJv
dG9jb2xTdHJpbmdUb0Nvb3JkaW5hdGVTeXN0ZW0oY29vcmRpbmF0ZVN5c3RlbVZhbHVlKTsKICAg
ICBpZiAoIWNvb3JkaW5hdGVTeXN0ZW0pCiAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJ
TkVEX0VSUk9SX0FORF9ERVRBSUxTKEludmFsaWRQYXJhbWV0ZXIsICJUaGUgcGFyYW1ldGVyICdj
b29yZGluYXRlU3lzdGVtJyBpcyBpbnZhbGlkLiIpOwogCkBAIC0xMDkxLDcgKzEwNzIsNyBAQCB2
b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpjb21wdXRlRWxlbWVudExheW91dChjb25zdCBTdHJp
bmcmIGJyb3dzaW5nQ29udGV4dEhhbgogICAgIHBhZ2UtPnByb2Nlc3MoKS5zZW5kV2l0aEFzeW5j
UmVwbHkoTWVzc2FnZXM6OldlYkF1dG9tYXRpb25TZXNzaW9uUHJveHk6OkNvbXB1dGVFbGVtZW50
TGF5b3V0KHBhZ2UtPndlYlBhZ2VJRCgpLCBmcmFtZUlELCBub2RlSGFuZGxlLCBzY3JvbGxJbnRv
Vmlld0lmTmVlZGVkLCBjb29yZGluYXRlU3lzdGVtLnZhbHVlKCkpLCBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7CiB9CiAKLXZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OnNlbGVjdE9wdGlv
bkVsZW1lbnQoY29uc3QgU3RyaW5nJiBicm93c2luZ0NvbnRleHRIYW5kbGUsIGNvbnN0IFN0cmlu
ZyYgZnJhbWVIYW5kbGUsIGNvbnN0IFN0cmluZyYgbm9kZUhhbmRsZSwgUmVmPFNlbGVjdE9wdGlv
bkVsZW1lbnRDYWxsYmFjaz4mJiBjYWxsYmFjaykKK3ZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246
OnNlbGVjdE9wdGlvbkVsZW1lbnQoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlv
bjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJiBicm93c2luZ0NvbnRleHRIYW5kbGUsIGNvbnN0IElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkZyYW1lSGFuZGxlJiBmcmFtZUhhbmRsZSwg
Y29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6Tm9kZUhhbmRsZSYgbm9kZUhh
bmRsZSwgUmVmPFNlbGVjdE9wdGlvbkVsZW1lbnRDYWxsYmFjaz4mJiBjYWxsYmFjaykKIHsKICAg
ICBXZWJQYWdlUHJveHkqIHBhZ2UgPSB3ZWJQYWdlUHJveHlGb3JIYW5kbGUoYnJvd3NpbmdDb250
ZXh0SGFuZGxlKTsKICAgICBpZiAoIXBhZ2UpCkBAIC0xMTE0LDcgKzEwOTUsNyBAQCB2b2lkIFdl
YkF1dG9tYXRpb25TZXNzaW9uOjpzZWxlY3RPcHRpb25FbGVtZW50KGNvbnN0IFN0cmluZyYgYnJv
d3NpbmdDb250ZXh0SGFuZAogICAgIHBhZ2UtPnByb2Nlc3MoKS5zZW5kV2l0aEFzeW5jUmVwbHko
TWVzc2FnZXM6OldlYkF1dG9tYXRpb25TZXNzaW9uUHJveHk6OlNlbGVjdE9wdGlvbkVsZW1lbnQo
cGFnZS0+d2ViUGFnZUlEKCksIGZyYW1lSUQsIG5vZGVIYW5kbGUpLCBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7CiB9CiAKLXZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OmlzU2hvd2luZ0ph
dmFTY3JpcHREaWFsb2coSW5zcGVjdG9yOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0
IFN0cmluZyYgYnJvd3NpbmdDb250ZXh0SGFuZGxlLCBib29sKiByZXN1bHQpCitJbnNwZWN0b3I6
OlByb3RvY29sOjpFcnJvclN0cmluZ09yPGJvb2w+IFdlYkF1dG9tYXRpb25TZXNzaW9uOjppc1No
b3dpbmdKYXZhU2NyaXB0RGlhbG9nKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRp
b246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYgYnJvd3NpbmdDb250ZXh0SGFuZGxlKQogewogICAg
IEFTU0VSVChtX2NsaWVudCk7CiAgICAgaWYgKCFtX2NsaWVudCkKQEAgLTExMjQsMTAgKzExMDUs
MTAgQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6aXNTaG93aW5nSmF2YVNjcmlwdERpYWxv
ZyhJbnNwZWN0b3I6OkVycm9yU3RyaW5nJiBlcnIKICAgICBpZiAoIXBhZ2UpCiAgICAgICAgIFNZ
TkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1IoV2luZG93Tm90Rm91bmQpOwogCi0gICAgKnJl
c3VsdCA9IG1fY2xpZW50LT5pc1Nob3dpbmdKYXZhU2NyaXB0RGlhbG9nT25QYWdlKCp0aGlzLCAq
cGFnZSk7CisgICAgcmV0dXJuIG1fY2xpZW50LT5pc1Nob3dpbmdKYXZhU2NyaXB0RGlhbG9nT25Q
YWdlKCp0aGlzLCAqcGFnZSk7CiB9CiAKLXZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OmRpc21p
c3NDdXJyZW50SmF2YVNjcmlwdERpYWxvZyhJbnNwZWN0b3I6OkVycm9yU3RyaW5nJiBlcnJvclN0
cmluZywgY29uc3QgU3RyaW5nJiBicm93c2luZ0NvbnRleHRIYW5kbGUpCitJbnNwZWN0b3I6OlBy
b3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IFdlYkF1dG9tYXRpb25TZXNzaW9uOjpkaXNtaXNz
Q3VycmVudEphdmFTY3JpcHREaWFsb2coY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21h
dGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJiBicm93c2luZ0NvbnRleHRIYW5kbGUpCiB7CiAg
ICAgQVNTRVJUKG1fY2xpZW50KTsKICAgICBpZiAoIW1fY2xpZW50KQpAQCAtMTE0MSw5ICsxMTIy
LDExIEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OmRpc21pc3NDdXJyZW50SmF2YVNjcmlw
dERpYWxvZyhJbnNwZWN0b3I6OkVycm9yU3RyaW5nCiAgICAgICAgIFNZTkNfRkFJTF9XSVRIX1BS
RURFRklORURfRVJST1IoTm9KYXZhU2NyaXB0RGlhbG9nKTsKIAogICAgIG1fY2xpZW50LT5kaXNt
aXNzQ3VycmVudEphdmFTY3JpcHREaWFsb2dPblBhZ2UoKnRoaXMsICpwYWdlKTsKKworICAgIHJl
dHVybiB7IH07CiB9CiAKLXZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OmFjY2VwdEN1cnJlbnRK
YXZhU2NyaXB0RGlhbG9nKEluc3BlY3Rvcjo6RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25z
dCBTdHJpbmcmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSkKK0luc3BlY3Rvcjo6UHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8dm9pZD4gV2ViQXV0b21hdGlvblNlc3Npb246OmFjY2VwdEN1cnJlbnRKYXZh
U2NyaXB0RGlhbG9nKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dz
aW5nQ29udGV4dEhhbmRsZSYgYnJvd3NpbmdDb250ZXh0SGFuZGxlKQogewogICAgIEFTU0VSVCht
X2NsaWVudCk7CiAgICAgaWYgKCFtX2NsaWVudCkKQEAgLTExNTcsOSArMTE0MCwxMSBAQCB2b2lk
IFdlYkF1dG9tYXRpb25TZXNzaW9uOjphY2NlcHRDdXJyZW50SmF2YVNjcmlwdERpYWxvZyhJbnNw
ZWN0b3I6OkVycm9yU3RyaW5nJgogICAgICAgICBTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VS
Uk9SKE5vSmF2YVNjcmlwdERpYWxvZyk7CiAKICAgICBtX2NsaWVudC0+YWNjZXB0Q3VycmVudEph
dmFTY3JpcHREaWFsb2dPblBhZ2UoKnRoaXMsICpwYWdlKTsKKworICAgIHJldHVybiB7IH07CiB9
CiAKLXZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246Om1lc3NhZ2VPZkN1cnJlbnRKYXZhU2NyaXB0
RGlhbG9nKEluc3BlY3Rvcjo6RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcm
IGJyb3dzaW5nQ29udGV4dEhhbmRsZSwgU3RyaW5nKiB0ZXh0KQorSW5zcGVjdG9yOjpQcm90b2Nv
bDo6RXJyb3JTdHJpbmdPcjxTdHJpbmc+IFdlYkF1dG9tYXRpb25TZXNzaW9uOjptZXNzYWdlT2ZD
dXJyZW50SmF2YVNjcmlwdERpYWxvZyhjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0
aW9uOjpCcm93c2luZ0NvbnRleHRIYW5kbGUmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSkKIHsKICAg
ICBBU1NFUlQobV9jbGllbnQpOwogICAgIGlmICghbV9jbGllbnQpCkBAIC0xMTcyLDEwICsxMTU3
LDEwIEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246Om1lc3NhZ2VPZkN1cnJlbnRKYXZhU2Ny
aXB0RGlhbG9nKEluc3BlY3Rvcjo6RXJyb3JTdHJpCiAgICAgaWYgKCFtX2NsaWVudC0+aXNTaG93
aW5nSmF2YVNjcmlwdERpYWxvZ09uUGFnZSgqdGhpcywgKnBhZ2UpKQogICAgICAgICBTWU5DX0ZB
SUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SKE5vSmF2YVNjcmlwdERpYWxvZyk7CiAKLSAgICAqdGV4
dCA9IG1fY2xpZW50LT5tZXNzYWdlT2ZDdXJyZW50SmF2YVNjcmlwdERpYWxvZ09uUGFnZSgqdGhp
cywgKnBhZ2UpOworICAgIHJldHVybiBtX2NsaWVudC0+bWVzc2FnZU9mQ3VycmVudEphdmFTY3Jp
cHREaWFsb2dPblBhZ2UoKnRoaXMsICpwYWdlKTsKIH0KIAotdm9pZCBXZWJBdXRvbWF0aW9uU2Vz
c2lvbjo6c2V0VXNlcklucHV0Rm9yQ3VycmVudEphdmFTY3JpcHRQcm9tcHQoSW5zcGVjdG9yOjpF
cnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgYnJvd3NpbmdDb250ZXh0SGFu
ZGxlLCBjb25zdCBTdHJpbmcmIHByb21wdFZhbHVlKQorSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJy
b3JTdHJpbmdPcjx2b2lkPiBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6c2V0VXNlcklucHV0Rm9yQ3Vy
cmVudEphdmFTY3JpcHRQcm9tcHQoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlv
bjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJiBicm93c2luZ0NvbnRleHRIYW5kbGUsIGNvbnN0IFN0
cmluZyYgcHJvbXB0VmFsdWUpCiB7CiAgICAgQVNTRVJUKG1fY2xpZW50KTsKICAgICBpZiAoIW1f
Y2xpZW50KQpAQCAtMTIwNywxOSArMTE5MiwyMSBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9u
OjpzZXRVc2VySW5wdXRGb3JDdXJyZW50SmF2YVNjcmlwdFByb21wdChJbnNwZWN0b3I6OkVycgog
ICAgIH0KIAogICAgIG1fY2xpZW50LT5zZXRVc2VySW5wdXRGb3JDdXJyZW50SmF2YVNjcmlwdFBy
b21wdE9uUGFnZSgqdGhpcywgKnBhZ2UsIHByb21wdFZhbHVlKTsKKworICAgIHJldHVybiB7IH07
CiB9CiAKLXZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OnNldEZpbGVzVG9TZWxlY3RGb3JGaWxl
VXBsb2FkKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBicm93c2luZ0Nv
bnRleHRIYW5kbGUsIGNvbnN0IEpTT046OkFycmF5JiBmaWxlbmFtZXMsIGNvbnN0IEpTT046OkFy
cmF5KiBmaWxlQ29udGVudHMpCitJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZv
aWQ+IFdlYkF1dG9tYXRpb25TZXNzaW9uOjpzZXRGaWxlc1RvU2VsZWN0Rm9yRmlsZVVwbG9hZChj
b25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRIYW5k
bGUmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSwgUmVmPEpTT046OkFycmF5PiYmIGZpbGVuYW1lcywg
UmVmUHRyPEpTT046OkFycmF5PiYmIGZpbGVDb250ZW50cykKIHsKICAgICBWZWN0b3I8U3RyaW5n
PiBuZXdGaWxlTGlzdDsKLSAgICBuZXdGaWxlTGlzdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGZp
bGVuYW1lcy5sZW5ndGgoKSk7CisgICAgbmV3RmlsZUxpc3QucmVzZXJ2ZUluaXRpYWxDYXBhY2l0
eShmaWxlbmFtZXMtPmxlbmd0aCgpKTsKIAotICAgIGlmIChmaWxlQ29udGVudHMgJiYgZmlsZUNv
bnRlbnRzLT5sZW5ndGgoKSAhPSBmaWxlbmFtZXMubGVuZ3RoKCkpCisgICAgaWYgKGZpbGVDb250
ZW50cyAmJiBmaWxlQ29udGVudHMtPmxlbmd0aCgpICE9IGZpbGVuYW1lcy0+bGVuZ3RoKCkpCiAg
ICAgICAgIFNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoSW50ZXJu
YWxFcnJvciwgIlRoZSBwYXJhbWV0ZXJzICdmaWxlbmFtZXMnIGFuZCAnZmlsZUNvbnRlbnRzJyBt
dXN0IGhhdmUgZXF1YWwgbGVuZ3RoLiIpOwogCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBm
aWxlbmFtZXMubGVuZ3RoKCk7ICsraSkgewotICAgICAgICBTdHJpbmcgZmlsZW5hbWU7Ci0gICAg
ICAgIGlmICghZmlsZW5hbWVzLmdldChpKS0+YXNTdHJpbmcoZmlsZW5hbWUpKQorICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgZmlsZW5hbWVzLT5sZW5ndGgoKTsgKytpKSB7CisgICAgICAgIGF1
dG8gZmlsZW5hbWUgPSBmaWxlbmFtZXMtPmdldChpKS0+YXNTdHJpbmcoKTsKKyAgICAgICAgaWYg
KCFmaWxlbmFtZSkKICAgICAgICAgICAgIFNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1Jf
QU5EX0RFVEFJTFMoSW50ZXJuYWxFcnJvciwgIlRoZSBwYXJhbWV0ZXIgJ2ZpbGVuYW1lcycgY29u
dGFpbnMgYSBub24tc3RyaW5nIHZhbHVlLiIpOwogCiAgICAgICAgIGlmICghZmlsZUNvbnRlbnRz
KSB7CkBAIC0xMjI3LDggKzEyMTQsOCBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpzZXRG
aWxlc1RvU2VsZWN0Rm9yRmlsZVVwbG9hZChFcnJvclN0cmluZyYgZXJyb3JTdHJpbgogICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAgICAgICBTdHJpbmcgZmlsZURhdGE7Ci0g
ICAgICAgIGlmICghZmlsZUNvbnRlbnRzLT5nZXQoaSktPmFzU3RyaW5nKGZpbGVEYXRhKSkKKyAg
ICAgICAgYXV0byBmaWxlRGF0YSA9IGZpbGVDb250ZW50cy0+Z2V0KGkpLT5hc1N0cmluZygpOwor
ICAgICAgICBpZiAoIWZpbGVEYXRhKQogICAgICAgICAgICAgU1lOQ19GQUlMX1dJVEhfUFJFREVG
SU5FRF9FUlJPUl9BTkRfREVUQUlMUyhJbnRlcm5hbEVycm9yLCAiVGhlIHBhcmFtZXRlciAnZmls
ZUNvbnRlbnRzJyBjb250YWlucyBhIG5vbi1zdHJpbmcgdmFsdWUuIik7CiAKICAgICAgICAgT3B0
aW9uYWw8U3RyaW5nPiBsb2NhbEZpbGVQYXRoID0gcGxhdGZvcm1HZW5lcmF0ZUxvY2FsRmlsZVBh
dGhGb3JSZW1vdGVGaWxlKGZpbGVuYW1lLCBmaWxlRGF0YSk7CkBAIC0xMjM5LDkgKzEyMjYsMTEg
QEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6c2V0RmlsZXNUb1NlbGVjdEZvckZpbGVVcGxv
YWQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW4KICAgICB9CiAKICAgICBtX2ZpbGVzVG9TZWxlY3RG
b3JGaWxlVXBsb2FkLnN3YXAobmV3RmlsZUxpc3QpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAot
dm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6c2V0RmlsZXNGb3JJbnB1dEZpbGVVcGxvYWQoY29u
c3QgU3RyaW5nJiBicm93c2luZ0NvbnRleHRIYW5kbGUsIGNvbnN0IFN0cmluZyYgZnJhbWVIYW5k
bGUsIGNvbnN0IFN0cmluZyYgbm9kZUhhbmRsZSwgY29uc3QgSlNPTjo6QXJyYXkmIGZpbGVuYW1l
cywgUmVmPFNldEZpbGVzRm9ySW5wdXRGaWxlVXBsb2FkQ2FsbGJhY2s+JiYgY2FsbGJhY2spCit2
b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpzZXRGaWxlc0ZvcklucHV0RmlsZVVwbG9hZChjb25z
dCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRIYW5kbGUm
IGJyb3dzaW5nQ29udGV4dEhhbmRsZSwgY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21h
dGlvbjo6RnJhbWVIYW5kbGUmIGZyYW1lSGFuZGxlLCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29s
OjpBdXRvbWF0aW9uOjpOb2RlSGFuZGxlJiBub2RlSGFuZGxlLCBSZWY8SlNPTjo6QXJyYXk+JiYg
ZmlsZW5hbWVzLCBSZWY8U2V0RmlsZXNGb3JJbnB1dEZpbGVVcGxvYWRDYWxsYmFjaz4mJiBjYWxs
YmFjaykKIHsKICAgICBXZWJQYWdlUHJveHkqIHBhZ2UgPSB3ZWJQYWdlUHJveHlGb3JIYW5kbGUo
YnJvd3NpbmdDb250ZXh0SGFuZGxlKTsKICAgICBpZiAoIXBhZ2UpCkBAIC0xMjUzLDEwICsxMjQy
LDEwIEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OnNldEZpbGVzRm9ySW5wdXRGaWxlVXBs
b2FkKGNvbnN0IFN0cmluZyYgYnJvd3NpbmdDb250CiAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9Q
UkVERUZJTkVEX0VSUk9SKEZyYW1lTm90Rm91bmQpOwogCiAgICAgVmVjdG9yPFN0cmluZz4gbmV3
RmlsZUxpc3Q7Ci0gICAgbmV3RmlsZUxpc3QucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShmaWxlbmFt
ZXMubGVuZ3RoKCkpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZmlsZW5hbWVzLmxlbmd0
aCgpOyArK2kpIHsKLSAgICAgICAgU3RyaW5nIGZpbGVuYW1lOwotICAgICAgICBpZiAoIWZpbGVu
YW1lcy5nZXQoaSktPmFzU3RyaW5nKGZpbGVuYW1lKSkKKyAgICBuZXdGaWxlTGlzdC5yZXNlcnZl
SW5pdGlhbENhcGFjaXR5KGZpbGVuYW1lcy0+bGVuZ3RoKCkpOworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgZmlsZW5hbWVzLT5sZW5ndGgoKTsgKytpKSB7CisgICAgICAgIGF1dG8gZmlsZW5h
bWUgPSBmaWxlbmFtZXMtPmdldChpKS0+YXNTdHJpbmcoKTsKKyAgICAgICAgaWYgKCFmaWxlbmFt
ZSkKICAgICAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRB
SUxTKEludGVybmFsRXJyb3IsICJUaGUgcGFyYW1ldGVyICdmaWxlbmFtZXMnIGNvbnRhaW5zIGEg
bm9uLXN0cmluZyB2YWx1ZS4iKTsKIAogICAgICAgICBuZXdGaWxlTGlzdC5hcHBlbmQoZmlsZW5h
bWUpOwpAQCAtMTI5OSw3ICsxMjg4LDcgQEAgc3RhdGljIFJlZjxKU09OOjpBcnJheU9mPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkNvb2tpZT4+IGJ1aWxkQXJyYXlGb3IKICAgICBy
ZXR1cm4gY29va2llczsKIH0KIAotdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6Z2V0QWxsQ29v
a2llcyhjb25zdCBTdHJpbmcmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSwgUmVmPEdldEFsbENvb2tp
ZXNDYWxsYmFjaz4mJiBjYWxsYmFjaykKK3ZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OmdldEFs
bENvb2tpZXMoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdD
b250ZXh0SGFuZGxlJiBicm93c2luZ0NvbnRleHRIYW5kbGUsIFJlZjxHZXRBbGxDb29raWVzQ2Fs
bGJhY2s+JiYgY2FsbGJhY2spCiB7CiAgICAgV2ViUGFnZVByb3h5KiBwYWdlID0gd2ViUGFnZVBy
b3h5Rm9ySGFuZGxlKGJyb3dzaW5nQ29udGV4dEhhbmRsZSk7CiAgICAgaWYgKCFwYWdlKQpAQCAt
MTMxNyw3ICsxMzA2LDcgQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6Z2V0QWxsQ29va2ll
cyhjb25zdCBTdHJpbmcmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSwgUmUKICAgICBwYWdlLT5wcm9j
ZXNzKCkuc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJBdXRvbWF0aW9uU2Vzc2lvblBy
b3h5OjpHZXRDb29raWVzRm9yRnJhbWUocGFnZS0+d2ViUGFnZUlEKCksIFdURjo6bnVsbG9wdCks
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAotdm9pZCBXZWJBdXRvbWF0aW9uU2Vz
c2lvbjo6ZGVsZXRlU2luZ2xlQ29va2llKGNvbnN0IFN0cmluZyYgYnJvd3NpbmdDb250ZXh0SGFu
ZGxlLCBjb25zdCBTdHJpbmcmIGNvb2tpZU5hbWUsIFJlZjxEZWxldGVTaW5nbGVDb29raWVDYWxs
YmFjaz4mJiBjYWxsYmFjaykKK3ZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OmRlbGV0ZVNpbmds
ZUNvb2tpZShjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0Nv
bnRleHRIYW5kbGUmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSwgY29uc3QgU3RyaW5nJiBjb29raWVO
YW1lLCBSZWY8RGVsZXRlU2luZ2xlQ29va2llQ2FsbGJhY2s+JiYgY2FsbGJhY2spCiB7CiAgICAg
V2ViUGFnZVByb3h5KiBwYWdlID0gd2ViUGFnZVByb3h5Rm9ySGFuZGxlKGJyb3dzaW5nQ29udGV4
dEhhbmRsZSk7CiAgICAgaWYgKCFwYWdlKQpAQCAtMTM0Nyw3ICsxMzM2LDcgQEAgc3RhdGljIFN0
cmluZyBkb21haW5CeUFkZGluZ0RvdFByZWZpeElmTmVlZGVkKFN0cmluZyBkb21haW4pCiAgICAg
cmV0dXJuIGRvbWFpbjsKIH0KICAgICAKLXZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OmFkZFNp
bmdsZUNvb2tpZShjb25zdCBTdHJpbmcmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSwgY29uc3QgSlNP
Tjo6T2JqZWN0JiBjb29raWVPYmplY3QsIFJlZjxBZGRTaW5nbGVDb29raWVDYWxsYmFjaz4mJiBj
YWxsYmFjaykKK3ZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OmFkZFNpbmdsZUNvb2tpZShjb25z
dCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRIYW5kbGUm
IGJyb3dzaW5nQ29udGV4dEhhbmRsZSwgUmVmPEpTT046Ok9iamVjdD4mJiBjb29raWVPYmplY3Qs
IFJlZjxBZGRTaW5nbGVDb29raWVDYWxsYmFjaz4mJiBjYWxsYmFjaykKIHsKICAgICBXZWJQYWdl
UHJveHkqIHBhZ2UgPSB3ZWJQYWdlUHJveHlGb3JIYW5kbGUoYnJvd3NpbmdDb250ZXh0SGFuZGxl
KTsKICAgICBpZiAoIXBhZ2UpCkBAIC0xMzU4LDE0ICsxMzQ3LDE2IEBAIHZvaWQgV2ViQXV0b21h
dGlvblNlc3Npb246OmFkZFNpbmdsZUNvb2tpZShjb25zdCBTdHJpbmcmIGJyb3dzaW5nQ29udGV4
dEhhbmRsZSwKIAogICAgIFdlYkNvcmU6OkNvb2tpZSBjb29raWU7CiAKLSAgICBpZiAoIWNvb2tp
ZU9iamVjdC5nZXRTdHJpbmcoIm5hbWUiX3MsIGNvb2tpZS5uYW1lKSkKKyAgICBjb29raWUubmFt
ZSA9IGNvb2tpZU9iamVjdC0+Z2V0U3RyaW5nKCJuYW1lIl9zKTsKKyAgICBpZiAoIWNvb2tpZS5u
YW1lKQogICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlM
UyhNaXNzaW5nUGFyYW1ldGVyLCAiVGhlIHBhcmFtZXRlciAnbmFtZScgd2FzIG5vdCBmb3VuZC4i
KTsKIAotICAgIGlmICghY29va2llT2JqZWN0LmdldFN0cmluZygidmFsdWUiX3MsIGNvb2tpZS52
YWx1ZSkpCisgICAgY29va2llLnZhbHVlID0gY29va2llT2JqZWN0LT5nZXRTdHJpbmcoInZhbHVl
Il9zKTsKKyAgICBpZiAoIWNvb2tpZS52YWx1ZSkKICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BS
RURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoTWlzc2luZ1BhcmFtZXRlciwgIlRoZSBwYXJhbWV0
ZXIgJ3ZhbHVlJyB3YXMgbm90IGZvdW5kLiIpOwogCi0gICAgU3RyaW5nIGRvbWFpbjsKLSAgICBp
ZiAoIWNvb2tpZU9iamVjdC5nZXRTdHJpbmcoImRvbWFpbiJfcywgZG9tYWluKSkKKyAgICBhdXRv
IGRvbWFpbiA9IGNvb2tpZU9iamVjdC0+Z2V0U3RyaW5nKCJkb21haW4iX3MpOworICAgIGlmICgh
ZG9tYWluKQogICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUl9BTkRfREVU
QUlMUyhNaXNzaW5nUGFyYW1ldGVyLCAiVGhlIHBhcmFtZXRlciAnZG9tYWluJyB3YXMgbm90IGZv
dW5kLiIpOwogCiAgICAgLy8gSW5oZXJpdCB0aGUgZG9tYWluL2hvc3QgZnJvbSB0aGUgbWFpbiBm
cmFtZSdzIFVSTCBpZiBpdCBpcyBub3QgZXhwbGljaXRseSBzZXQuCkBAIC0xMzc0LDMxICsxMzY1
LDQxIEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OmFkZFNpbmdsZUNvb2tpZShjb25zdCBT
dHJpbmcmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSwKICAgICBlbHNlCiAgICAgICAgIGNvb2tpZS5k
b21haW4gPSBkb21haW5CeUFkZGluZ0RvdFByZWZpeElmTmVlZGVkKGRvbWFpbik7CiAKLSAgICBp
ZiAoIWNvb2tpZU9iamVjdC5nZXRTdHJpbmcoInBhdGgiX3MsIGNvb2tpZS5wYXRoKSkKKyAgICBj
b29raWUucGF0aCA9IGNvb2tpZU9iamVjdC0+Z2V0U3RyaW5nKCJwYXRoIl9zKTsKKyAgICBpZiAo
IWNvb2tpZS5wYXRoKQogICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUl9B
TkRfREVUQUlMUyhNaXNzaW5nUGFyYW1ldGVyLCAiVGhlIHBhcmFtZXRlciAncGF0aCcgd2FzIG5v
dCBmb3VuZC4iKTsKIAotICAgIGRvdWJsZSBleHBpcmVzOwotICAgIGlmICghY29va2llT2JqZWN0
LmdldERvdWJsZSgiZXhwaXJlcyJfcywgZXhwaXJlcykpCisgICAgYXV0byBleHBpcmVzID0gY29v
a2llT2JqZWN0LT5nZXREb3VibGUoImV4cGlyZXMiX3MpOworICAgIGlmICghZXhwaXJlcykKICAg
ICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoTWlzc2lu
Z1BhcmFtZXRlciwgIlRoZSBwYXJhbWV0ZXIgJ2V4cGlyZXMnIHdhcyBub3QgZm91bmQuIik7CiAK
LSAgICBjb29raWUuZXhwaXJlcyA9IGV4cGlyZXMgKiAxMDAwLjA7CisgICAgY29va2llLmV4cGly
ZXMgPSAqZXhwaXJlcyAqIDEwMDAuMDsKIAotICAgIGlmICghY29va2llT2JqZWN0LmdldEJvb2xl
YW4oInNlY3VyZSJfcywgY29va2llLnNlY3VyZSkpCisgICAgYXV0byBzZWN1cmUgPSBjb29raWVP
YmplY3QtPmdldEJvb2xlYW4oInNlY3VyZSJfcyk7CisgICAgaWYgKCFzZWN1cmUpCiAgICAgICAg
IEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxTKE1pc3NpbmdQYXJh
bWV0ZXIsICJUaGUgcGFyYW1ldGVyICdzZWN1cmUnIHdhcyBub3QgZm91bmQuIik7CiAKLSAgICBp
ZiAoIWNvb2tpZU9iamVjdC5nZXRCb29sZWFuKCJzZXNzaW9uIl9zLCBjb29raWUuc2Vzc2lvbikp
CisgICAgY29va2llLnNlY3VyZSA9ICpzZWN1cmU7CisKKyAgICBhdXRvIHNlc3Npb24gPSBjb29r
aWVPYmplY3QtPmdldEJvb2xlYW4oInNlc3Npb24iX3MpOworICAgIGlmICghc2Vzc2lvbikKICAg
ICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoTWlzc2lu
Z1BhcmFtZXRlciwgIlRoZSBwYXJhbWV0ZXIgJ3Nlc3Npb24nIHdhcyBub3QgZm91bmQuIik7CiAK
LSAgICBpZiAoIWNvb2tpZU9iamVjdC5nZXRCb29sZWFuKCJodHRwT25seSJfcywgY29va2llLmh0
dHBPbmx5KSkKKyAgICBjb29raWUuc2Vzc2lvbiA9ICpzZXNzaW9uOworCisgICAgYXV0byBodHRw
T25seSA9IGNvb2tpZU9iamVjdC0+Z2V0Qm9vbGVhbigiaHR0cE9ubHkiX3MpOworICAgIGlmICgh
aHR0cE9ubHkpCiAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9E
RVRBSUxTKE1pc3NpbmdQYXJhbWV0ZXIsICJUaGUgcGFyYW1ldGVyICdodHRwT25seScgd2FzIG5v
dCBmb3VuZC4iKTsKIAorICAgIGNvb2tpZS5odHRwT25seSA9ICpodHRwT25seTsKKwogICAgIFdl
YkNvb2tpZU1hbmFnZXJQcm94eSogY29va2llTWFuYWdlciA9IG1fcHJvY2Vzc1Bvb2wtPnN1cHBs
ZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpOwogICAgIGNvb2tpZU1hbmFnZXItPnNldENv
b2tpZXMocGFnZS0+d2Vic2l0ZURhdGFTdG9yZSgpLnNlc3Npb25JRCgpLCB7IGNvb2tpZSB9LCBb
Y2FsbGJhY2tdKCkgewogICAgICAgICBjYWxsYmFjay0+c2VuZFN1Y2Nlc3MoKTsKICAgICB9KTsK
IH0KIAotdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6ZGVsZXRlQWxsQ29va2llcyhFcnJvclN0
cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgYnJvd3NpbmdDb250ZXh0SGFuZGxlKQor
SW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBXZWJBdXRvbWF0aW9uU2Vz
c2lvbjo6ZGVsZXRlQWxsQ29va2llcyhjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0
aW9uOjpCcm93c2luZ0NvbnRleHRIYW5kbGUmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSkKIHsKICAg
ICBXZWJQYWdlUHJveHkqIHBhZ2UgPSB3ZWJQYWdlUHJveHlGb3JIYW5kbGUoYnJvd3NpbmdDb250
ZXh0SGFuZGxlKTsKICAgICBpZiAoIXBhZ2UpCkBAIC0xNDExLDkgKzE0MTIsMTEgQEAgdm9pZCBX
ZWJBdXRvbWF0aW9uU2Vzc2lvbjo6ZGVsZXRlQWxsQ29va2llcyhFcnJvclN0cmluZyYgZXJyb3JT
dHJpbmcsIGNvbnN0IFN0cmkKIAogICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eSogY29va2llTWFu
YWdlciA9IG1fcHJvY2Vzc1Bvb2wtPnN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5Pigp
OwogICAgIGNvb2tpZU1hbmFnZXItPmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZXMocGFnZS0+d2Vi
c2l0ZURhdGFTdG9yZSgpLnNlc3Npb25JRCgpLCB7IGhvc3QsIGRvbWFpbkJ5QWRkaW5nRG90UHJl
Zml4SWZOZWVkZWQoaG9zdCkgfSk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIFdlYkF1
dG9tYXRpb25TZXNzaW9uOjpnZXRTZXNzaW9uUGVybWlzc2lvbnMoRXJyb3JTdHJpbmcmLCBSZWZQ
dHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpTZXNzaW9u
UGVybWlzc2lvbkRhdGE+PiYgb3V0X3Blcm1pc3Npb25zKQorSW5zcGVjdG9yOjpQcm90b2NvbDo6
RXJyb3JTdHJpbmdPcjxSZWY8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRv
bWF0aW9uOjpTZXNzaW9uUGVybWlzc2lvbkRhdGE+Pj4gV2ViQXV0b21hdGlvblNlc3Npb246Omdl
dFNlc3Npb25QZXJtaXNzaW9ucygpCiB7CiAgICAgYXV0byBwZXJtaXNzaW9uc09iamVjdEFycmF5
ID0gSlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpTZXNzaW9u
UGVybWlzc2lvbkRhdGE+OjpjcmVhdGUoKTsKICAgICBhdXRvIGdldFVzZXJNZWRpYVBlcm1pc3Np
b25PYmplY3QgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpTZXNzaW9uUGVybWlz
c2lvbkRhdGE6OmNyZWF0ZSgpCkBAIC0xNDIyLDM0ICsxNDI1LDM2IEBAIHZvaWQgV2ViQXV0b21h
dGlvblNlc3Npb246OmdldFNlc3Npb25QZXJtaXNzaW9ucyhFcnJvclN0cmluZyYsIFJlZlB0cjxK
U09OOjpBcnJhCiAgICAgICAgIC5yZWxlYXNlKCk7CiAKICAgICBwZXJtaXNzaW9uc09iamVjdEFy
cmF5LT5hZGRJdGVtKFdURk1vdmUoZ2V0VXNlck1lZGlhUGVybWlzc2lvbk9iamVjdCkpOwotICAg
IG91dF9wZXJtaXNzaW9ucyA9IFdURk1vdmUocGVybWlzc2lvbnNPYmplY3RBcnJheSk7CisgICAg
cmV0dXJuIFdURk1vdmUocGVybWlzc2lvbnNPYmplY3RBcnJheSk7CiB9CiAKLXZvaWQgV2ViQXV0
b21hdGlvblNlc3Npb246OnNldFNlc3Npb25QZXJtaXNzaW9ucyhFcnJvclN0cmluZyYgZXJyb3JT
dHJpbmcsIGNvbnN0IEpTT046OkFycmF5JiBwZXJtaXNzaW9ucykKK0luc3BlY3Rvcjo6UHJvdG9j
b2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gV2ViQXV0b21hdGlvblNlc3Npb246OnNldFNlc3Npb25Q
ZXJtaXNzaW9ucyhSZWY8SlNPTjo6QXJyYXk+JiYgcGVybWlzc2lvbnMpCiB7Ci0gICAgZm9yIChh
dXRvIGl0ID0gcGVybWlzc2lvbnMuYmVnaW4oKTsgaXQgIT0gcGVybWlzc2lvbnMuZW5kKCk7ICsr
aXQpIHsKLSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGVybWlzc2lvbjsKLSAgICAgICAg
aWYgKCFpdC0+Z2V0KCktPmFzT2JqZWN0KHBlcm1pc3Npb24pKQorICAgIGZvciAoYXV0byBpdCA9
IHBlcm1pc3Npb25zLT5iZWdpbigpOyBpdCAhPSBwZXJtaXNzaW9ucy0+ZW5kKCk7ICsraXQpIHsK
KyAgICAgICAgYXV0byBwZXJtaXNzaW9uID0gaXQtPmdldCgpLmFzT2JqZWN0KCk7CisgICAgICAg
IGlmICghcGVybWlzc2lvbikKICAgICAgICAgICAgIFNZTkNfRkFJTF9XSVRIX1BSRURFRklORURf
RVJST1JfQU5EX0RFVEFJTFMoSW52YWxpZFBhcmFtZXRlciwgIlRoZSBwYXJhbWV0ZXIgJ3Blcm1p
c3Npb25zJyBpcyBpbnZhbGlkLiIpOwogCi0gICAgICAgIFN0cmluZyBwZXJtaXNzaW9uTmFtZTsK
LSAgICAgICAgaWYgKCFwZXJtaXNzaW9uLT5nZXRTdHJpbmcoInBlcm1pc3Npb24iX3MsIHBlcm1p
c3Npb25OYW1lKSkKKyAgICAgICAgYXV0byBwZXJtaXNzaW9uTmFtZSA9IHBlcm1pc3Npb24tPmdl
dFN0cmluZygicGVybWlzc2lvbiJfcyk7CisgICAgICAgIGlmICghcGVybWlzc2lvbk5hbWUpCiAg
ICAgICAgICAgICBTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxTKElu
dmFsaWRQYXJhbWV0ZXIsICJUaGUgcGFyYW1ldGVyICdwZXJtaXNzaW9uJyBpcyBtaXNzaW5nIG9y
IGludmFsaWQuIik7CiAKICAgICAgICAgYXV0byBwYXJzZWRQZXJtaXNzaW9uTmFtZSA9IEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb25IZWxwZXJzOjpwYXJzZUVudW1WYWx1ZUZyb21TdHJp
bmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6U2Vzc2lvblBlcm1pc3Npb24+KHBl
cm1pc3Npb25OYW1lKTsKICAgICAgICAgaWYgKCFwYXJzZWRQZXJtaXNzaW9uTmFtZSkKICAgICAg
ICAgICAgIFNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoSW52YWxp
ZFBhcmFtZXRlciwgIlRoZSBwYXJhbWV0ZXIgJ3Blcm1pc3Npb24nIGhhcyBhbiB1bmtub3duIHZh
bHVlLiIpOwogCi0gICAgICAgIGJvb2wgcGVybWlzc2lvblZhbHVlOwotICAgICAgICBpZiAoIXBl
cm1pc3Npb24tPmdldEJvb2xlYW4oInZhbHVlIl9zLCBwZXJtaXNzaW9uVmFsdWUpKQorICAgICAg
ICBhdXRvIHBlcm1pc3Npb25WYWx1ZSA9IHBlcm1pc3Npb24tPmdldEJvb2xlYW4oInZhbHVlIl9z
KTsKKyAgICAgICAgaWYgKCFwZXJtaXNzaW9uVmFsdWUpCiAgICAgICAgICAgICBTWU5DX0ZBSUxf
V0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxTKEludmFsaWRQYXJhbWV0ZXIsICJUaGUg
cGFyYW1ldGVyICd2YWx1ZScgaXMgbWlzc2luZyBvciBpbnZhbGlkLiIpOwogCiAgICAgICAgIHN3
aXRjaCAocGFyc2VkUGVybWlzc2lvbk5hbWUudmFsdWUoKSkgewogICAgICAgICBjYXNlIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OlNlc3Npb25QZXJtaXNzaW9uOjpHZXRVc2VyTWVk
aWE6Ci0gICAgICAgICAgICBtX3Blcm1pc3Npb25Gb3JHZXRVc2VyTWVkaWEgPSBwZXJtaXNzaW9u
VmFsdWU7CisgICAgICAgICAgICBtX3Blcm1pc3Npb25Gb3JHZXRVc2VyTWVkaWEgPSAqcGVybWlz
c2lvblZhbHVlOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9CisKKyAgICBy
ZXR1cm4geyB9OwogfQogCiBib29sIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpzaG91bGRBbGxvd0dl
dFVzZXJNZWRpYUZvclBhZ2UoY29uc3QgV2ViUGFnZVByb3h5JikgY29uc3QKQEAgLTE0OTQsNyAr
MTQ5OSw3IEBAIFNpbXVsYXRlZElucHV0U291cmNlKiBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6aW5w
dXRTb3VyY2VGb3JUeXBlKFNpbXVsYXRlZElucHV0U291CiB9CiAKIC8vIE1BUks6IFNpbXVsYXRl
ZElucHV0RGlzcGF0Y2hlcjo6Q2xpZW50IEFQSQotdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6
dmlld3BvcnRJblZpZXdDZW50ZXJQb2ludE9mRWxlbWVudChXZWJQYWdlUHJveHkmIHBhZ2UsIE9w
dGlvbmFsPEZyYW1lSWRlbnRpZmllcj4gZnJhbWVJRCwgY29uc3QgU3RyaW5nJiBub2RlSGFuZGxl
LCBGdW5jdGlvbjx2b2lkIChPcHRpb25hbDxXZWJDb3JlOjpJbnRQb2ludD4sIE9wdGlvbmFsPEF1
dG9tYXRpb25Db21tYW5kRXJyb3I+KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3ZvaWQgV2ViQXV0
b21hdGlvblNlc3Npb246OnZpZXdwb3J0SW5WaWV3Q2VudGVyUG9pbnRPZkVsZW1lbnQoV2ViUGFn
ZVByb3h5JiBwYWdlLCBPcHRpb25hbDxGcmFtZUlkZW50aWZpZXI+IGZyYW1lSUQsIGNvbnN0IElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246Ok5vZGVIYW5kbGUmIG5vZGVIYW5kbGUsIEZ1
bmN0aW9uPHZvaWQoT3B0aW9uYWw8V2ViQ29yZTo6SW50UG9pbnQ+LCBPcHRpb25hbDxBdXRvbWF0
aW9uQ29tbWFuZEVycm9yPik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgV1RGOjpDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKE9wdGlvbmFsPFN0cmluZz4sIFdlYkNvcmU6OkludFJlY3QsIE9w
dGlvbmFsPFdlYkNvcmU6OkludFBvaW50PiwgYm9vbCk+IGRpZENvbXB1dGVFbGVtZW50TGF5b3V0
SGFuZGxlciA9IFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
XShPcHRpb25hbDxTdHJpbmc+IGVycm9yVHlwZSwgV2ViQ29yZTo6SW50UmVjdCwgT3B0aW9uYWw8
V2ViQ29yZTo6SW50UG9pbnQ+IGluVmlld0NlbnRlclBvaW50LCBib29sKSBtdXRhYmxlIHsKICAg
ICAgICAgaWYgKGVycm9yVHlwZSkgewpAQCAtMTYzNSw3ICsxNjQwLDcgQEAgc3RhdGljIFdlYkV2
ZW50OjpNb2RpZmllciBwcm90b2NvbE1vZGlmaWVyVG9XZWJFdmVudE1vZGlmaWVyKEluc3BlY3Rv
cjo6UHJvdG9jb2wKIH0KICNlbmRpZiAvLyBFTkFCTEUoV0VCRFJJVkVSX01PVVNFX0lOVEVSQUNU
SU9OUykKIAotdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6cGVyZm9ybU1vdXNlSW50ZXJhY3Rp
b24oY29uc3QgU3RyaW5nJiBoYW5kbGUsIGNvbnN0IEpTT046Ok9iamVjdCYgcmVxdWVzdGVkUG9z
aXRpb25PYmplY3QsIGNvbnN0IFN0cmluZyYgbW91c2VCdXR0b25TdHJpbmcsIGNvbnN0IFN0cmlu
ZyYgbW91c2VJbnRlcmFjdGlvblN0cmluZywgY29uc3QgSlNPTjo6QXJyYXkmIGtleU1vZGlmaWVy
U3RyaW5ncywgUmVmPFBlcmZvcm1Nb3VzZUludGVyYWN0aW9uQ2FsbGJhY2s+JiYgY2FsbGJhY2sp
Cit2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpwZXJmb3JtTW91c2VJbnRlcmFjdGlvbihjb25z
dCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRIYW5kbGUm
IGhhbmRsZSwgUmVmPEpTT046Ok9iamVjdD4mJiByZXF1ZXN0ZWRQb3NpdGlvbiwgSW5zcGVjdG9y
OjpQcm90b2NvbDo6QXV0b21hdGlvbjo6TW91c2VCdXR0b24gbW91c2VCdXR0b24sIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkF1dG9tYXRpb246Ok1vdXNlSW50ZXJhY3Rpb24gbW91c2VJbnRlcmFjdGlv
biwgUmVmPEpTT046OkFycmF5PiYmIGtleU1vZGlmaWVyU3RyaW5ncywgUmVmPFBlcmZvcm1Nb3Vz
ZUludGVyYWN0aW9uQ2FsbGJhY2s+JiYgY2FsbGJhY2spCiB7CiAjaWYgIUVOQUJMRShXRUJEUklW
RVJfTU9VU0VfSU5URVJBQ1RJT05TKQogICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VS
Uk9SKE5vdEltcGxlbWVudGVkKTsKQEAgLTE2NDQsNDggKzE2NDksNDQgQEAgdm9pZCBXZWJBdXRv
bWF0aW9uU2Vzc2lvbjo6cGVyZm9ybU1vdXNlSW50ZXJhY3Rpb24oY29uc3QgU3RyaW5nJiBoYW5k
bGUsIGNvbnN0IEoKICAgICBpZiAoIXBhZ2UpCiAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVE
RUZJTkVEX0VSUk9SKFdpbmRvd05vdEZvdW5kKTsKIAotICAgIGZsb2F0IHg7Ci0gICAgaWYgKCFy
ZXF1ZXN0ZWRQb3NpdGlvbk9iamVjdC5nZXREb3VibGUoIngiX3MsIHgpKQorICAgIGF1dG8geCA9
IHJlcXVlc3RlZFBvc2l0aW9uLT5nZXREb3VibGUoIngiX3MpOworICAgIGlmICgheCkKICAgICAg
ICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoTWlzc2luZ1Bh
cmFtZXRlciwgIlRoZSBwYXJhbWV0ZXIgJ3gnIHdhcyBub3QgZm91bmQuIik7CiAKLSAgICBmbG9h
dCB5OwotICAgIGlmICghcmVxdWVzdGVkUG9zaXRpb25PYmplY3QuZ2V0RG91YmxlKCJ5Il9zLCB5
KSkKKyAgICBhdXRvIGZsb2F0WCA9IHN0YXRpY19jYXN0PGZsb2F0PigqeCk7CisKKyAgICBhdXRv
IHkgPSByZXF1ZXN0ZWRQb3NpdGlvbi0+Z2V0RG91YmxlKCJ5Il9zKTsKKyAgICBpZiAoIXkpCiAg
ICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxTKE1pc3Np
bmdQYXJhbWV0ZXIsICJUaGUgcGFyYW1ldGVyICd5JyB3YXMgbm90IGZvdW5kLiIpOwogCisgICAg
YXV0byBmbG9hdFkgPSBzdGF0aWNfY2FzdDxmbG9hdD4oKnkpOworCiAgICAgT3B0aW9uU2V0PFdl
YkV2ZW50OjpNb2RpZmllcj4ga2V5TW9kaWZpZXJzOwotICAgIGZvciAoYXV0byBpdCA9IGtleU1v
ZGlmaWVyU3RyaW5ncy5iZWdpbigpOyBpdCAhPSBrZXlNb2RpZmllclN0cmluZ3MuZW5kKCk7ICsr
aXQpIHsKLSAgICAgICAgU3RyaW5nIG1vZGlmaWVyU3RyaW5nOwotICAgICAgICBpZiAoIWl0LT5n
ZXQoKS0+YXNTdHJpbmcobW9kaWZpZXJTdHJpbmcpKQorICAgIGZvciAoYXV0byBpdCA9IGtleU1v
ZGlmaWVyU3RyaW5ncy0+YmVnaW4oKTsgaXQgIT0ga2V5TW9kaWZpZXJTdHJpbmdzLT5lbmQoKTsg
KytpdCkgeworICAgICAgICBhdXRvIG1vZGlmaWVyU3RyaW5nID0gaXQtPmdldCgpLmFzU3RyaW5n
KCk7CisgICAgICAgIGlmICghbW9kaWZpZXJTdHJpbmcpCiAgICAgICAgICAgICBBU1lOQ19GQUlM
X1dJVEhfUFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhJbnZhbGlkUGFyYW1ldGVyLCAiVGhl
IHBhcmFtZXRlciAnbW9kaWZpZXJzJyBpcyBpbnZhbGlkLiIpOwogCiAgICAgICAgIGF1dG8gcGFy
c2VkTW9kaWZpZXIgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uSGVscGVyczo6cGFy
c2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246Oktl
eU1vZGlmaWVyPihtb2RpZmllclN0cmluZyk7CiAgICAgICAgIGlmICghcGFyc2VkTW9kaWZpZXIp
CiAgICAgICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlM
UyhJbnZhbGlkUGFyYW1ldGVyLCAiQSBtb2RpZmllciBpbiB0aGUgJ21vZGlmaWVycycgYXJyYXkg
aXMgaW52YWxpZC4iKTsKKwogICAgICAgICBrZXlNb2RpZmllcnMuYWRkKHByb3RvY29sTW9kaWZp
ZXJUb1dlYkV2ZW50TW9kaWZpZXIocGFyc2VkTW9kaWZpZXIudmFsdWUoKSkpOwogICAgIH0KIAot
ICAgIHBhZ2UtPmdldFdpbmRvd0ZyYW1lV2l0aENhbGxiYWNrKFt0aGlzLCBwcm90ZWN0ZWRUaGlz
ID0gbWFrZVJlZigqdGhpcyksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIHBhZ2UgPSBt
YWtlUmVmKCpwYWdlKSwgeCwgeSwgbW91c2VJbnRlcmFjdGlvblN0cmluZywgbW91c2VCdXR0b25T
dHJpbmcsIGtleU1vZGlmaWVyc10oV2ViQ29yZTo6RmxvYXRSZWN0IHdpbmRvd0ZyYW1lKSBtdXRh
YmxlIHsKKyAgICBwYWdlLT5nZXRXaW5kb3dGcmFtZVdpdGhDYWxsYmFjayhbdGhpcywgcHJvdGVj
dGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spLCBw
YWdlID0gbWFrZVJlZigqcGFnZSksIGZsb2F0WCwgZmxvYXRZLCBtb3VzZUludGVyYWN0aW9uLCBt
b3VzZUJ1dHRvbiwga2V5TW9kaWZpZXJzXShXZWJDb3JlOjpGbG9hdFJlY3Qgd2luZG93RnJhbWUp
IG11dGFibGUgeworICAgICAgICBmbG9hdFggPSBzdGQ6Om1pbihzdGQ6Om1heCgwLjBmLCBmbG9h
dFgpLCB3aW5kb3dGcmFtZS5zaXplKCkud2lkdGgoKSk7CisgICAgICAgIGZsb2F0WSA9IHN0ZDo6
bWluKHN0ZDo6bWF4KDAuMGYsIGZsb2F0WSksIHdpbmRvd0ZyYW1lLnNpemUoKS5oZWlnaHQoKSk7
CiAKLSAgICAgICAgeCA9IHN0ZDo6bWluKHN0ZDo6bWF4KDAuMGYsIHgpLCB3aW5kb3dGcmFtZS5z
aXplKCkud2lkdGgoKSk7Ci0gICAgICAgIHkgPSBzdGQ6Om1pbihzdGQ6Om1heCgwLjBmLCB5KSwg
d2luZG93RnJhbWUuc2l6ZSgpLmhlaWdodCgpKTsKKyAgICAgICAgV2ViQ29yZTo6SW50UG9pbnQg
bG9jYXRpb25JblZpZXdwb3J0ID0gV2ViQ29yZTo6SW50UG9pbnQoc3RhdGljX2Nhc3Q8aW50Pihm
bG9hdFgpLCBzdGF0aWNfY2FzdDxpbnQ+KGZsb2F0WSkpOwogCi0gICAgICAgIFdlYkNvcmU6Oklu
dFBvaW50IGxvY2F0aW9uSW5WaWV3cG9ydCA9IFdlYkNvcmU6OkludFBvaW50KHN0YXRpY19jYXN0
PGludD4oeCksIHN0YXRpY19jYXN0PGludD4oeSkpOwotCi0gICAgICAgIGF1dG8gcGFyc2VkSW50
ZXJhY3Rpb24gPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uSGVscGVyczo6cGFyc2VF
bnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246Ok1vdXNl
SW50ZXJhY3Rpb24+KG1vdXNlSW50ZXJhY3Rpb25TdHJpbmcpOwotICAgICAgICBpZiAoIXBhcnNl
ZEludGVyYWN0aW9uKQotICAgICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJS
T1JfQU5EX0RFVEFJTFMoSW52YWxpZFBhcmFtZXRlciwgIlRoZSBwYXJhbWV0ZXIgJ2ludGVyYWN0
aW9uJyBpcyBpbnZhbGlkLiIpOwotCi0gICAgICAgIGF1dG8gcGFyc2VkQnV0dG9uID0gSW5zcGVj
dG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbkhlbHBlcnM6OnBhcnNlRW51bVZhbHVlRnJvbVN0cmlu
ZzxJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpNb3VzZUJ1dHRvbj4obW91c2VCdXR0
b25TdHJpbmcpOwotICAgICAgICBpZiAoIXBhcnNlZEJ1dHRvbikKLSAgICAgICAgICAgIEFTWU5D
X0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxTKEludmFsaWRQYXJhbWV0ZXIs
ICJUaGUgcGFyYW1ldGVyICdidXR0b24nIGlzIGludmFsaWQuIik7Ci0KLSAgICAgICAgYXV0byBt
b3VzZUV2ZW50c0ZsdXNoZWRDYWxsYmFjayA9IFtwcm90ZWN0ZWRUaGlzID0gV1RGTW92ZShwcm90
ZWN0ZWRUaGlzKSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgcGFnZSwgeCwgeV0oT3B0
aW9uYWw8QXV0b21hdGlvbkNvbW1hbmRFcnJvcj4gZXJyb3IpIHsKKyAgICAgICAgYXV0byBtb3Vz
ZUV2ZW50c0ZsdXNoZWRDYWxsYmFjayA9IFtwcm90ZWN0ZWRUaGlzID0gV1RGTW92ZShwcm90ZWN0
ZWRUaGlzKSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgcGFnZSwgZmxvYXRYLCBmbG9h
dFldKE9wdGlvbmFsPEF1dG9tYXRpb25Db21tYW5kRXJyb3I+IGVycm9yKSB7CiAgICAgICAgICAg
ICBpZiAoZXJyb3IpCiAgICAgICAgICAgICAgICAgY2FsbGJhY2stPnNlbmRGYWlsdXJlKGVycm9y
LnZhbHVlKCkudG9Qcm90b2NvbFN0cmluZygpKTsKICAgICAgICAgICAgIGVsc2UgewogICAgICAg
ICAgICAgICAgIGNhbGxiYWNrLT5zZW5kU3VjY2VzcyhJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRv
bWF0aW9uOjpQb2ludDo6Y3JlYXRlKCkKLSAgICAgICAgICAgICAgICAgICAgLnNldFgoeCkKLSAg
ICAgICAgICAgICAgICAgICAgLnNldFkoeSAtIHBhZ2UtPnRvcENvbnRlbnRJbnNldCgpKQorICAg
ICAgICAgICAgICAgICAgICAuc2V0WChmbG9hdFgpCisgICAgICAgICAgICAgICAgICAgIC5zZXRZ
KGZsb2F0WSAtIHBhZ2UtPnRvcENvbnRlbnRJbnNldCgpKQogICAgICAgICAgICAgICAgICAgICAu
cmVsZWFzZSgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfTsKQEAgLTE2OTUsNyArMTY5Niw3
IEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OnBlcmZvcm1Nb3VzZUludGVyYWN0aW9uKGNv
bnN0IFN0cmluZyYgaGFuZGxlLCBjb25zdCBKCiAgICAgICAgICAgICBjYWxsYmFja0luTWFwKEFV
VE9NQVRJT05fQ09NTUFORF9FUlJPUl9XSVRIX05BTUUoVGltZW91dCkpOwogICAgICAgICBjYWxs
YmFja0luTWFwID0gV1RGTW92ZShtb3VzZUV2ZW50c0ZsdXNoZWRDYWxsYmFjayk7CiAKLSAgICAg
ICAgcGxhdGZvcm1TaW11bGF0ZU1vdXNlSW50ZXJhY3Rpb24ocGFnZSwgcGFyc2VkSW50ZXJhY3Rp
b24udmFsdWUoKSwgcGFyc2VkQnV0dG9uLnZhbHVlKCksIGxvY2F0aW9uSW5WaWV3cG9ydCwga2V5
TW9kaWZpZXJzKTsKKyAgICAgICAgcGxhdGZvcm1TaW11bGF0ZU1vdXNlSW50ZXJhY3Rpb24ocGFn
ZSwgbW91c2VJbnRlcmFjdGlvbiwgbW91c2VCdXR0b24sIGxvY2F0aW9uSW5WaWV3cG9ydCwga2V5
TW9kaWZpZXJzKTsKIAogICAgICAgICAvLyBJZiB0aGUgZXZlbnQgbG9jYXRpb24gd2FzIHByZXZp
b3VzbHkgY2xpcHBlZCBhbmQgZG9lcyBub3QgaGl0IHRlc3QgYW55dGhpbmcgaW4gdGhlIHdpbmRv
dywgdGhlbiBpdCB3aWxsIG5vdCBiZSBwcm9jZXNzZWQuCiAgICAgICAgIC8vIEZvciBjb21wYXRp
YmlsaXR5IHdpdGggcHJlLVczQyBkcml2ZXIgaW1wbGVtZW50YXRpb25zLCBkb24ndCBtYWtlIHRo
aXMgYSBoYXJkIGVycm9yOyBqdXN0IGRvIG5vdGhpbmcgc2lsZW50bHkuCkBAIC0xNzA4LDcgKzE3
MDksNyBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpwZXJmb3JtTW91c2VJbnRlcmFjdGlv
bihjb25zdCBTdHJpbmcmIGhhbmRsZSwgY29uc3QgSgogI2VuZGlmIC8vIEVOQUJMRShXRUJEUklW
RVJfTU9VU0VfSU5URVJBQ1RJT05TKQogfQogCi12b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpw
ZXJmb3JtS2V5Ym9hcmRJbnRlcmFjdGlvbnMoY29uc3QgU3RyaW5nJiBoYW5kbGUsIGNvbnN0IEpT
T046OkFycmF5JiBpbnRlcmFjdGlvbnMsIFJlZjxQZXJmb3JtS2V5Ym9hcmRJbnRlcmFjdGlvbnND
YWxsYmFjaz4mJiBjYWxsYmFjaykKK3ZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OnBlcmZvcm1L
ZXlib2FyZEludGVyYWN0aW9ucyhjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9u
OjpCcm93c2luZ0NvbnRleHRIYW5kbGUmIGhhbmRsZSwgUmVmPEpTT046OkFycmF5PiYmIGludGVy
YWN0aW9ucywgUmVmPFBlcmZvcm1LZXlib2FyZEludGVyYWN0aW9uc0NhbGxiYWNrPiYmIGNhbGxi
YWNrKQogewogI2lmICFFTkFCTEUoV0VCRFJJVkVSX0tFWUJPQVJEX0lOVEVSQUNUSU9OUykKICAg
ICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUihOb3RJbXBsZW1lbnRlZCk7CkBAIC0x
NzE3LDI4ICsxNzE4LDI3IEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OnBlcmZvcm1LZXli
b2FyZEludGVyYWN0aW9ucyhjb25zdCBTdHJpbmcmIGhhbmRsZSwgY29uCiAgICAgaWYgKCFwYWdl
KQogICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUihXaW5kb3dOb3RGb3Vu
ZCk7CiAKLSAgICBpZiAoIWludGVyYWN0aW9ucy5sZW5ndGgoKSkKKyAgICBpZiAoIWludGVyYWN0
aW9ucy0+bGVuZ3RoKCkpCiAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9S
X0FORF9ERVRBSUxTKEludmFsaWRQYXJhbWV0ZXIsICJUaGUgcGFyYW1ldGVyICdpbnRlcmFjdGlv
bnMnIHdhcyBub3QgZm91bmQgb3IgZW1wdHkuIik7CiAKICAgICAvLyBWYWxpZGF0ZSBhbGwgb2Yg
dGhlIHBhcmFtZXRlcnMgYmVmb3JlIHBlcmZvcm1pbmcgYW55IGludGVyYWN0aW9ucyB3aXRoIHRo
ZSBicm93c2luZyBjb250ZXh0IHVuZGVyIHRlc3QuCiAgICAgVmVjdG9yPFdURjo6RnVuY3Rpb248
dm9pZCgpPj4gYWN0aW9uc1RvUGVyZm9ybTsKLSAgICBhY3Rpb25zVG9QZXJmb3JtLnJlc2VydmVD
YXBhY2l0eShpbnRlcmFjdGlvbnMubGVuZ3RoKCkpOworICAgIGFjdGlvbnNUb1BlcmZvcm0ucmVz
ZXJ2ZUNhcGFjaXR5KGludGVyYWN0aW9ucy0+bGVuZ3RoKCkpOwogCi0gICAgZm9yIChjb25zdCBh
dXRvJiBpbnRlcmFjdGlvbiA6IGludGVyYWN0aW9ucykgewotICAgICAgICBSZWZQdHI8SlNPTjo6
T2JqZWN0PiBpbnRlcmFjdGlvbk9iamVjdDsKLSAgICAgICAgaWYgKCFpbnRlcmFjdGlvbi0+YXNP
YmplY3QoaW50ZXJhY3Rpb25PYmplY3QpKQorICAgIGZvciAoY29uc3QgYXV0byYgaW50ZXJhY3Rp
b25WYWx1ZSA6IGludGVyYWN0aW9ucy5nZXQoKSkgeworICAgICAgICBhdXRvIGludGVyYWN0aW9u
T2JqZWN0ID0gaW50ZXJhY3Rpb25WYWx1ZS0+YXNPYmplY3QoKTsKKyAgICAgICAgaWYgKCFpbnRl
cmFjdGlvbk9iamVjdCkKICAgICAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VS
Uk9SX0FORF9ERVRBSUxTKEludmFsaWRQYXJhbWV0ZXIsICJBbiBpbnRlcmFjdGlvbiBpbiB0aGUg
J2ludGVyYWN0aW9ucycgcGFyYW1ldGVyIHdhcyBpbnZhbGlkLiIpOwogCi0gICAgICAgIFN0cmlu
ZyBpbnRlcmFjdGlvblR5cGVTdHJpbmc7Ci0gICAgICAgIGlmICghaW50ZXJhY3Rpb25PYmplY3Qt
PmdldFN0cmluZygidHlwZSJfcywgaW50ZXJhY3Rpb25UeXBlU3RyaW5nKSkKKyAgICAgICAgYXV0
byBpbnRlcmFjdGlvblR5cGVTdHJpbmcgPSBpbnRlcmFjdGlvbk9iamVjdC0+Z2V0U3RyaW5nKCJ0
eXBlIl9zKTsKKyAgICAgICAgaWYgKCFpbnRlcmFjdGlvblR5cGVTdHJpbmcpCiAgICAgICAgICAg
ICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhJbnZhbGlkUGFy
YW1ldGVyLCAiQW4gaW50ZXJhY3Rpb24gaW4gdGhlICdpbnRlcmFjdGlvbnMnIHBhcmFtZXRlciBp
cyBtaXNzaW5nIHRoZSAndHlwZScga2V5LiIpOwogICAgICAgICBhdXRvIGludGVyYWN0aW9uVHlw
ZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb25IZWxwZXJzOjpwYXJzZUVudW1WYWx1
ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6S2V5Ym9hcmRJbnRl
cmFjdGlvblR5cGU+KGludGVyYWN0aW9uVHlwZVN0cmluZyk7CiAgICAgICAgIGlmICghaW50ZXJh
Y3Rpb25UeXBlKQogICAgICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1Jf
QU5EX0RFVEFJTFMoSW52YWxpZFBhcmFtZXRlciwgIkFuIGludGVyYWN0aW9uIGluIHRoZSAnaW50
ZXJhY3Rpb25zJyBwYXJhbWV0ZXIgaGFzIGFuIGludmFsaWQgJ3R5cGUnIGtleS4iKTsKIAotICAg
ICAgICBTdHJpbmcgdmlydHVhbEtleVN0cmluZzsKLSAgICAgICAgYm9vbCBmb3VuZFZpcnR1YWxL
ZXkgPSBpbnRlcmFjdGlvbk9iamVjdC0+Z2V0U3RyaW5nKCJrZXkiX3MsIHZpcnR1YWxLZXlTdHJp
bmcpOwotICAgICAgICBpZiAoZm91bmRWaXJ0dWFsS2V5KSB7CisgICAgICAgIGF1dG8gdmlydHVh
bEtleVN0cmluZyA9IGludGVyYWN0aW9uT2JqZWN0LT5nZXRTdHJpbmcoImtleSJfcyk7CisgICAg
ICAgIGlmICghIXZpcnR1YWxLZXlTdHJpbmcpIHsKICAgICAgICAgICAgIE9wdGlvbmFsPFZpcnR1
YWxLZXk+IHZpcnR1YWxLZXkgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uSGVscGVy
czo6cGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRp
b246OlZpcnR1YWxLZXk+KHZpcnR1YWxLZXlTdHJpbmcpOwogICAgICAgICAgICAgaWYgKCF2aXJ0
dWFsS2V5KQogICAgICAgICAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9S
X0FORF9ERVRBSUxTKEludmFsaWRQYXJhbWV0ZXIsICJBbiBpbnRlcmFjdGlvbiBpbiB0aGUgJ2lu
dGVyYWN0aW9ucycgcGFyYW1ldGVyIGhhcyBhbiBpbnZhbGlkICdrZXknIHZhbHVlLiIpOwpAQCAt
MTc0OCw5ICsxNzQ4LDggQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6cGVyZm9ybUtleWJv
YXJkSW50ZXJhY3Rpb25zKGNvbnN0IFN0cmluZyYgaGFuZGxlLCBjb24KICAgICAgICAgICAgIH0p
OwogICAgICAgICB9CiAKLSAgICAgICAgU3RyaW5nIGtleVNlcXVlbmNlOwotICAgICAgICBib29s
IGZvdW5kS2V5U2VxdWVuY2UgPSBpbnRlcmFjdGlvbk9iamVjdC0+Z2V0U3RyaW5nKCJ0ZXh0Il9z
LCBrZXlTZXF1ZW5jZSk7Ci0gICAgICAgIGlmIChmb3VuZEtleVNlcXVlbmNlKSB7CisgICAgICAg
IGF1dG8ga2V5U2VxdWVuY2UgPSBpbnRlcmFjdGlvbk9iamVjdC0+Z2V0U3RyaW5nKCJ0ZXh0Il9z
KTsKKyAgICAgICAgaWYgKCEha2V5U2VxdWVuY2UpIHsKICAgICAgICAgICAgIHN3aXRjaCAoaW50
ZXJhY3Rpb25UeXBlLnZhbHVlKCkpIHsKICAgICAgICAgICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90
b2NvbDo6QXV0b21hdGlvbjo6S2V5Ym9hcmRJbnRlcmFjdGlvblR5cGU6OktleVByZXNzOgogICAg
ICAgICAgICAgY2FzZSBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpLZXlib2FyZElu
dGVyYWN0aW9uVHlwZTo6S2V5UmVsZWFzZToKQEAgLTE3NjUsNyArMTc2NCw3IEBAIHZvaWQgV2Vi
QXV0b21hdGlvblNlc3Npb246OnBlcmZvcm1LZXlib2FyZEludGVyYWN0aW9ucyhjb25zdCBTdHJp
bmcmIGhhbmRsZSwgY29uCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBpZiAo
IWZvdW5kVmlydHVhbEtleSAmJiAhZm91bmRLZXlTZXF1ZW5jZSkKKyAgICAgICAgaWYgKCF2aXJ0
dWFsS2V5U3RyaW5nICYmICFrZXlTZXF1ZW5jZSkKICAgICAgICAgICAgIEFTWU5DX0ZBSUxfV0lU
SF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxTKE1pc3NpbmdQYXJhbWV0ZXIsICJBbiBpbnRl
cmFjdGlvbiBpbiB0aGUgJ2ludGVyYWN0aW9ucycgcGFyYW1ldGVyIGlzIG1pc3NpbmcgYm90aCAn
a2V5JyBhbmQgJ3RleHQnLiBPbmUgbXVzdCBiZSBwcm92aWRlZC4iKTsKICAgICB9CiAKQEAgLTE4
MDgsNyArMTgwNyw3IEBAIHN0YXRpYyBTaW11bGF0ZWRJbnB1dFNvdXJjZVR5cGUgc2ltdWxhdGVk
SW5wdXRTb3VyY2VUeXBlRnJvbVByb3RvY29sU291cmNlVHlwZShJCiB9CiAjZW5kaWYgLy8gRU5B
QkxFKFdFQkRSSVZFUl9BQ1RJT05TX0FQSSkKIAotdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6
cGVyZm9ybUludGVyYWN0aW9uU2VxdWVuY2UoY29uc3QgU3RyaW5nJiBoYW5kbGUsIGNvbnN0IFN0
cmluZyogb3B0aW9uYWxGcmFtZUhhbmRsZSwgY29uc3QgSlNPTjo6QXJyYXkmIGlucHV0U291cmNl
cywgY29uc3QgSlNPTjo6QXJyYXkmIHN0ZXBzLCBSZWY8V2ViQXV0b21hdGlvblNlc3Npb246OlBl
cmZvcm1JbnRlcmFjdGlvblNlcXVlbmNlQ2FsbGJhY2s+JiYgY2FsbGJhY2spCit2b2lkIFdlYkF1
dG9tYXRpb25TZXNzaW9uOjpwZXJmb3JtSW50ZXJhY3Rpb25TZXF1ZW5jZShjb25zdCBJbnNwZWN0
b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRIYW5kbGUmIGhhbmRsZSwg
Y29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6RnJhbWVIYW5kbGUmIGZyYW1l
SGFuZGxlLCBSZWY8SlNPTjo6QXJyYXk+JiYgaW5wdXRTb3VyY2VzLCBSZWY8SlNPTjo6QXJyYXk+
JiYgc3RlcHMsIFJlZjxXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6UGVyZm9ybUludGVyYWN0aW9uU2Vx
dWVuY2VDYWxsYmFjaz4mJiBjYWxsYmFjaykKIHsKICAgICAvLyBUaGlzIGNvbW1hbmQgaW1wbGVt
ZW50cyBXZWJLaXQgc3VwcG9ydCBmb3IgwqcxNy41IFBlcmZvcm0gQWN0aW9ucy4KIApAQCAtMTgy
MCw3ICsxODE5LDcgQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6cGVyZm9ybUludGVyYWN0
aW9uU2VxdWVuY2UoY29uc3QgU3RyaW5nJiBoYW5kbGUsIGNvbnMKICAgICAgICAgQVNZTkNfRkFJ
TF9XSVRIX1BSRURFRklORURfRVJST1IoV2luZG93Tm90Rm91bmQpOwogCiAgICAgYm9vbCBmcmFt
ZU5vdEZvdW5kID0gZmFsc2U7Ci0gICAgYXV0byBmcmFtZUlEID0gd2ViRnJhbWVJREZvckhhbmRs
ZShvcHRpb25hbEZyYW1lSGFuZGxlID8gKm9wdGlvbmFsRnJhbWVIYW5kbGUgOiBlbXB0eVN0cmlu
ZygpLCBmcmFtZU5vdEZvdW5kKTsKKyAgICBhdXRvIGZyYW1lSUQgPSB3ZWJGcmFtZUlERm9ySGFu
ZGxlKGZyYW1lSGFuZGxlLCBmcmFtZU5vdEZvdW5kKTsKICAgICBpZiAoZnJhbWVOb3RGb3VuZCkK
ICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1IoRnJhbWVOb3RGb3VuZCk7
CiAKQEAgLTE4MjksMjAgKzE4MjgsMjAgQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6cGVy
Zm9ybUludGVyYWN0aW9uU2VxdWVuY2UoY29uc3QgU3RyaW5nJiBoYW5kbGUsIGNvbnMKIAogICAg
IC8vIFBhcnNlIGFuZCB2YWxpZGF0ZSBBdXRvbWF0aW9uIHByb3RvY29sIGFyZ3VtZW50cy4gQnkg
dGhpcyBwb2ludCwgdGhlIGRyaXZlciBoYXMKICAgICAvLyBhbHJlYWR5IHBlcmZvcm1lZCB0aGUg
c3RlcHMgaW4gwqcxNy4zIFByb2Nlc3NpbmcgQWN0aW9ucyBSZXF1ZXN0cy4KLSAgICBpZiAoIWlu
cHV0U291cmNlcy5sZW5ndGgoKSkKKyAgICBpZiAoIWlucHV0U291cmNlcy0+bGVuZ3RoKCkpCiAg
ICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxTKEludmFs
aWRQYXJhbWV0ZXIsICJUaGUgcGFyYW1ldGVyICdpbnB1dFNvdXJjZXMnIHdhcyBub3QgZm91bmQg
b3IgZW1wdHkuIik7CiAKLSAgICBmb3IgKGNvbnN0IGF1dG8mIGlucHV0U291cmNlIDogaW5wdXRT
b3VyY2VzKSB7Ci0gICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IGlucHV0U291cmNlT2JqZWN0
OwotICAgICAgICBpZiAoIWlucHV0U291cmNlLT5hc09iamVjdChpbnB1dFNvdXJjZU9iamVjdCkp
CisgICAgZm9yIChjb25zdCBhdXRvJiBpbnB1dFNvdXJjZVZhbHVlIDogaW5wdXRTb3VyY2VzLmdl
dCgpKSB7CisgICAgICAgIGF1dG8gaW5wdXRTb3VyY2VPYmplY3QgPSBpbnB1dFNvdXJjZVZhbHVl
LT5hc09iamVjdCgpOworICAgICAgICBpZiAoIWlucHV0U291cmNlT2JqZWN0KQogICAgICAgICAg
ICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoSW52YWxpZFBh
cmFtZXRlciwgIkFuIGlucHV0IHNvdXJjZSBpbiB0aGUgJ2lucHV0U291cmNlcycgcGFyYW1ldGVy
IHdhcyBpbnZhbGlkLiIpOwotICAgICAgICAKLSAgICAgICAgU3RyaW5nIHNvdXJjZUlkOwotICAg
ICAgICBpZiAoIWlucHV0U291cmNlT2JqZWN0LT5nZXRTdHJpbmcoInNvdXJjZUlkIl9zLCBzb3Vy
Y2VJZCkpCisKKyAgICAgICAgYXV0byBzb3VyY2VJZCA9IGlucHV0U291cmNlT2JqZWN0LT5nZXRT
dHJpbmcoInNvdXJjZUlkIl9zKTsKKyAgICAgICAgaWYgKCFzb3VyY2VJZCkKICAgICAgICAgICAg
IEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxTKEludmFsaWRQYXJh
bWV0ZXIsICJBbiBpbnB1dCBzb3VyY2UgaW4gdGhlICdpbnB1dFNvdXJjZXMnIHBhcmFtZXRlciBp
cyBtaXNzaW5nIGEgJ3NvdXJjZUlkJy4iKTsKIAotICAgICAgICBTdHJpbmcgc291cmNlVHlwZTsK
LSAgICAgICAgaWYgKCFpbnB1dFNvdXJjZU9iamVjdC0+Z2V0U3RyaW5nKCJzb3VyY2VUeXBlIl9z
LCBzb3VyY2VUeXBlKSkKKyAgICAgICAgYXV0byBzb3VyY2VUeXBlID0gaW5wdXRTb3VyY2VPYmpl
Y3QtPmdldFN0cmluZygic291cmNlVHlwZSJfcyk7CisgICAgICAgIGlmICghc291cmNlVHlwZSkK
ICAgICAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxT
KEludmFsaWRQYXJhbWV0ZXIsICJBbiBpbnB1dCBzb3VyY2UgaW4gdGhlICdpbnB1dFNvdXJjZXMn
IHBhcmFtZXRlciBpcyBtaXNzaW5nIGEgJ3NvdXJjZVR5cGUnLiIpOwogCiAgICAgICAgIGF1dG8g
cGFyc2VkSW5wdXRTb3VyY2VUeXBlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbkhl
bHBlcnM6OnBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRv
bWF0aW9uOjpJbnB1dFNvdXJjZVR5cGU+KHNvdXJjZVR5cGUpOwpAQCAtMTg4MSwyOCArMTg4MCwy
OCBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpwZXJmb3JtSW50ZXJhY3Rpb25TZXF1ZW5j
ZShjb25zdCBTdHJpbmcmIGhhbmRsZSwgY29ucwogCiAgICAgVmVjdG9yPFNpbXVsYXRlZElucHV0
S2V5RnJhbWU+IGtleUZyYW1lczsKIAotICAgIGlmICghc3RlcHMubGVuZ3RoKCkpCisgICAgaWYg
KCFzdGVwcy0+bGVuZ3RoKCkpCiAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VS
Uk9SX0FORF9ERVRBSUxTKEludmFsaWRQYXJhbWV0ZXIsICJUaGUgcGFyYW1ldGVyICdzdGVwcycg
d2FzIG5vdCBmb3VuZCBvciBlbXB0eS4iKTsKIAotICAgIGZvciAoY29uc3QgYXV0byYgc3RlcCA6
IHN0ZXBzKSB7Ci0gICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHN0ZXBPYmplY3Q7Ci0gICAg
ICAgIGlmICghc3RlcC0+YXNPYmplY3Qoc3RlcE9iamVjdCkpCisgICAgZm9yIChjb25zdCBhdXRv
JiBzdGVwVmFsdWUgOiBzdGVwcy5nZXQoKSkgeworICAgICAgICBhdXRvIHN0ZXBPYmplY3QgPSBz
dGVwVmFsdWUtPmFzT2JqZWN0KCk7CisgICAgICAgIGlmICghc3RlcE9iamVjdCkKICAgICAgICAg
ICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxTKEludmFsaWRQ
YXJhbWV0ZXIsICJBIHN0ZXAgaW4gdGhlICdzdGVwcycgcGFyYW1ldGVyIHdhcyBub3QgYW4gb2Jq
ZWN0LiIpOwogCi0gICAgICAgIFJlZlB0cjxKU09OOjpBcnJheT4gc3RlcFN0YXRlczsKLSAgICAg
ICAgaWYgKCFzdGVwT2JqZWN0LT5nZXRBcnJheSgic3RhdGVzIl9zLCBzdGVwU3RhdGVzKSkKKyAg
ICAgICAgYXV0byBzdGVwU3RhdGVzID0gc3RlcE9iamVjdC0+Z2V0QXJyYXkoInN0YXRlcyJfcyk7
CisgICAgICAgIGlmICghc3RlcFN0YXRlcykKICAgICAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9Q
UkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxTKEludmFsaWRQYXJhbWV0ZXIsICJBIHN0ZXAgaXMg
bWlzc2luZyB0aGUgJ3N0YXRlcycgcHJvcGVydHkuIik7CiAKICAgICAgICAgVmVjdG9yPFNpbXVs
YXRlZElucHV0S2V5RnJhbWU6OlN0YXRlRW50cnk+IGVudHJpZXM7CiAgICAgICAgIGVudHJpZXMu
cmVzZXJ2ZUNhcGFjaXR5KHN0ZXBTdGF0ZXMtPmxlbmd0aCgpKTsKIAotICAgICAgICBmb3IgKGNv
bnN0IGF1dG8mIHN0YXRlIDogKnN0ZXBTdGF0ZXMpIHsKLSAgICAgICAgICAgIFJlZlB0cjxKU09O
OjpPYmplY3Q+IHN0YXRlT2JqZWN0OwotICAgICAgICAgICAgaWYgKCFzdGF0ZS0+YXNPYmplY3Qo
c3RhdGVPYmplY3QpKQorICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHN0YXRlVmFsdWUgOiAqc3Rl
cFN0YXRlcykgeworICAgICAgICAgICAgYXV0byBzdGF0ZU9iamVjdCA9IHN0YXRlVmFsdWUtPmFz
T2JqZWN0KCk7CisgICAgICAgICAgICBpZiAoIXN0YXRlT2JqZWN0KQogICAgICAgICAgICAgICAg
IEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxTKEludmFsaWRQYXJh
bWV0ZXIsICJFbmNvdW50ZXJlZCBhIG5vbi1vYmplY3Qgc3RlcCBzdGF0ZS4iKTsKIAotICAgICAg
ICAgICAgU3RyaW5nIHNvdXJjZUlkOwotICAgICAgICAgICAgaWYgKCFzdGF0ZU9iamVjdC0+Z2V0
U3RyaW5nKCJzb3VyY2VJZCJfcywgc291cmNlSWQpKQorICAgICAgICAgICAgYXV0byBzb3VyY2VJ
ZCA9IHN0YXRlT2JqZWN0LT5nZXRTdHJpbmcoInNvdXJjZUlkIl9zKTsKKyAgICAgICAgICAgIGlm
ICghc291cmNlSWQpCiAgICAgICAgICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURf
RVJST1JfQU5EX0RFVEFJTFMoSW52YWxpZFBhcmFtZXRlciwgIlN0ZXAgc3RhdGUgbGFja3MgcmVx
dWlyZWQgJ3NvdXJjZUlkJyBwcm9wZXJ0eS4iKTsKIAogICAgICAgICAgICAgaWYgKCFzb3VyY2VJ
ZFRvSW5wdXRTb3VyY2VNYXAuY29udGFpbnMoc291cmNlSWQpKQpAQCAtMTkxMSwxNyArMTkxMCwx
NiBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpwZXJmb3JtSW50ZXJhY3Rpb25TZXF1ZW5j
ZShjb25zdCBTdHJpbmcmIGhhbmRsZSwgY29ucwogICAgICAgICAgICAgU2ltdWxhdGVkSW5wdXRT
b3VyY2UmIGlucHV0U291cmNlID0gKnNvdXJjZUlkVG9JbnB1dFNvdXJjZU1hcC5nZXQoc291cmNl
SWQpOwogICAgICAgICAgICAgU2ltdWxhdGVkSW5wdXRTb3VyY2VTdGF0ZSBzb3VyY2VTdGF0ZSB7
IH07CiAKLSAgICAgICAgICAgIFN0cmluZyBwcmVzc2VkQ2hhcktleVN0cmluZzsKLSAgICAgICAg
ICAgIGlmIChzdGF0ZU9iamVjdC0+Z2V0U3RyaW5nKCJwcmVzc2VkQ2hhcktleSJfcywgcHJlc3Nl
ZENoYXJLZXlTdHJpbmcpKQorICAgICAgICAgICAgYXV0byBwcmVzc2VkQ2hhcktleVN0cmluZyA9
IHN0YXRlT2JqZWN0LT5nZXRTdHJpbmcoInByZXNzZWRDaGFyS2V5Il9zKTsKKyAgICAgICAgICAg
IGlmICghIXByZXNzZWRDaGFyS2V5U3RyaW5nKQogICAgICAgICAgICAgICAgIHNvdXJjZVN0YXRl
LnByZXNzZWRDaGFyS2V5ID0gcHJlc3NlZENoYXJLZXlTdHJpbmcuY2hhcmFjdGVyQXQoMCk7CiAK
LSAgICAgICAgICAgIFJlZlB0cjxKU09OOjpBcnJheT4gcHJlc3NlZFZpcnR1YWxLZXlzQXJyYXk7
Ci0gICAgICAgICAgICBpZiAoc3RhdGVPYmplY3QtPmdldEFycmF5KCJwcmVzc2VkVmlydHVhbEtl
eXMiX3MsIHByZXNzZWRWaXJ0dWFsS2V5c0FycmF5KSkgeworICAgICAgICAgICAgaWYgKGF1dG8g
cHJlc3NlZFZpcnR1YWxLZXlzQXJyYXkgPSBzdGF0ZU9iamVjdC0+Z2V0QXJyYXkoInByZXNzZWRW
aXJ0dWFsS2V5cyJfcykpIHsKICAgICAgICAgICAgICAgICBWaXJ0dWFsS2V5U2V0IHByZXNzZWRW
aXJ0dWFsS2V5cyB7IH07CiAKICAgICAgICAgICAgICAgICBmb3IgKGF1dG8gaXQgPSBwcmVzc2Vk
VmlydHVhbEtleXNBcnJheS0+YmVnaW4oKTsgaXQgIT0gcHJlc3NlZFZpcnR1YWxLZXlzQXJyYXkt
PmVuZCgpOyArK2l0KSB7Ci0gICAgICAgICAgICAgICAgICAgIFN0cmluZyBwcmVzc2VkVmlydHVh
bEtleVN0cmluZzsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCEoKml0KS0+YXNTdHJpbmcocHJl
c3NlZFZpcnR1YWxLZXlTdHJpbmcpKQorICAgICAgICAgICAgICAgICAgICBhdXRvIHByZXNzZWRW
aXJ0dWFsS2V5U3RyaW5nID0gKCppdCktPmFzU3RyaW5nKCk7CisgICAgICAgICAgICAgICAgICAg
IGlmICghcHJlc3NlZFZpcnR1YWxLZXlTdHJpbmcpCiAgICAgICAgICAgICAgICAgICAgICAgICBB
U1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhJbnZhbGlkUGFyYW1l
dGVyLCAiRW5jb3VudGVyZWQgYSBub24tc3RyaW5nIHZpcnR1YWwga2V5IHZhbHVlLiIpOwogCiAg
ICAgICAgICAgICAgICAgICAgIE9wdGlvbmFsPFZpcnR1YWxLZXk+IHBhcnNlZFZpcnR1YWxLZXkg
PSBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uSGVscGVyczo6cGFyc2VFbnVtVmFsdWVG
cm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OlZpcnR1YWxLZXk+KHBy
ZXNzZWRWaXJ0dWFsS2V5U3RyaW5nKTsKQEAgLTE5MzQsMzMgKzE5MzIsMzIgQEAgdm9pZCBXZWJB
dXRvbWF0aW9uU2Vzc2lvbjo6cGVyZm9ybUludGVyYWN0aW9uU2VxdWVuY2UoY29uc3QgU3RyaW5n
JiBoYW5kbGUsIGNvbnMKICAgICAgICAgICAgICAgICBzb3VyY2VTdGF0ZS5wcmVzc2VkVmlydHVh
bEtleXMgPSBwcmVzc2VkVmlydHVhbEtleXM7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
IFN0cmluZyBwcmVzc2VkQnV0dG9uU3RyaW5nOwotICAgICAgICAgICAgaWYgKHN0YXRlT2JqZWN0
LT5nZXRTdHJpbmcoInByZXNzZWRCdXR0b24iX3MsIHByZXNzZWRCdXR0b25TdHJpbmcpKSB7Cisg
ICAgICAgICAgICBhdXRvIHByZXNzZWRCdXR0b25TdHJpbmcgPSBzdGF0ZU9iamVjdC0+Z2V0U3Ry
aW5nKCJwcmVzc2VkQnV0dG9uIl9zKTsKKyAgICAgICAgICAgIGlmICghIXByZXNzZWRCdXR0b25T
dHJpbmcpIHsKICAgICAgICAgICAgICAgICBhdXRvIHByb3RvY29sQnV0dG9uID0gSW5zcGVjdG9y
OjpQcm90b2NvbDo6QXV0b21hdGlvbkhlbHBlcnM6OnBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJ
bnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpNb3VzZUJ1dHRvbj4ocHJlc3NlZEJ1dHRv
blN0cmluZyk7CiAgICAgICAgICAgICAgICAgc291cmNlU3RhdGUucHJlc3NlZE1vdXNlQnV0dG9u
ID0gcHJvdG9jb2xCdXR0b24udmFsdWVPcihNb3VzZUJ1dHRvbjo6Tm9uZSk7CiAgICAgICAgICAg
ICB9CiAKLSAgICAgICAgICAgIFN0cmluZyBvcmlnaW5TdHJpbmc7Ci0gICAgICAgICAgICBpZiAo
c3RhdGVPYmplY3QtPmdldFN0cmluZygib3JpZ2luIl9zLCBvcmlnaW5TdHJpbmcpKQorICAgICAg
ICAgICAgYXV0byBvcmlnaW5TdHJpbmcgPSBzdGF0ZU9iamVjdC0+Z2V0U3RyaW5nKCJvcmlnaW4i
X3MpOworICAgICAgICAgICAgaWYgKCEhb3JpZ2luU3RyaW5nKQogICAgICAgICAgICAgICAgIHNv
dXJjZVN0YXRlLm9yaWdpbiA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb25IZWxwZXJz
OjpwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlv
bjo6TW91c2VNb3ZlT3JpZ2luPihvcmlnaW5TdHJpbmcpOwogCiAgICAgICAgICAgICBpZiAoc291
cmNlU3RhdGUub3JpZ2luICYmIHNvdXJjZVN0YXRlLm9yaWdpbi52YWx1ZSgpID09IEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkF1dG9tYXRpb246Ok1vdXNlTW92ZU9yaWdpbjo6RWxlbWVudCkgewotICAg
ICAgICAgICAgICAgIFN0cmluZyBub2RlSGFuZGxlU3RyaW5nOwotICAgICAgICAgICAgICAgIGlm
ICghc3RhdGVPYmplY3QtPmdldFN0cmluZygibm9kZUhhbmRsZSJfcywgbm9kZUhhbmRsZVN0cmlu
ZykpCisgICAgICAgICAgICAgICAgYXV0byBub2RlSGFuZGxlU3RyaW5nID0gc3RhdGVPYmplY3Qt
PmdldFN0cmluZygibm9kZUhhbmRsZSJfcyk7CisgICAgICAgICAgICAgICAgaWYgKCFub2RlSGFu
ZGxlU3RyaW5nKQogICAgICAgICAgICAgICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5F
RF9FUlJPUl9BTkRfREVUQUlMUyhJbnZhbGlkUGFyYW1ldGVyLCAiTm9kZSBoYW5kbGUgbm90IHBy
b3ZpZGVkIGZvciAnRWxlbWVudCcgb3JpZ2luIik7CiAgICAgICAgICAgICAgICAgc291cmNlU3Rh
dGUubm9kZUhhbmRsZSA9IG5vZGVIYW5kbGVTdHJpbmc7CiAgICAgICAgICAgICB9CiAKLSAgICAg
ICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IGxvY2F0aW9uT2JqZWN0OwotICAgICAgICAgICAg
aWYgKHN0YXRlT2JqZWN0LT5nZXRPYmplY3QoImxvY2F0aW9uIl9zLCBsb2NhdGlvbk9iamVjdCkp
IHsKLSAgICAgICAgICAgICAgICBpbnQgeCA9IDAsIHkgPSAwOwotICAgICAgICAgICAgICAgIGlm
IChsb2NhdGlvbk9iamVjdC0+Z2V0SW50ZWdlcigieCJfcywgeCkgJiYgbG9jYXRpb25PYmplY3Qt
PmdldEludGVnZXIoInkiX3MsIHkpKQotICAgICAgICAgICAgICAgICAgICBzb3VyY2VTdGF0ZS5s
b2NhdGlvbiA9IFdlYkNvcmU6OkludFBvaW50KHgsIHkpOworICAgICAgICAgICAgaWYgKGF1dG8g
bG9jYXRpb25PYmplY3QgPSBzdGF0ZU9iamVjdC0+Z2V0T2JqZWN0KCJsb2NhdGlvbiJfcykpIHsK
KyAgICAgICAgICAgICAgICBhdXRvIHggPSBsb2NhdGlvbk9iamVjdC0+Z2V0SW50ZWdlcigieCJf
cyk7CisgICAgICAgICAgICAgICAgYXV0byB5ID0gbG9jYXRpb25PYmplY3QtPmdldEludGVnZXIo
InkiX3MpOworICAgICAgICAgICAgICAgIGlmICh4ICYmIHkpCisgICAgICAgICAgICAgICAgICAg
IHNvdXJjZVN0YXRlLmxvY2F0aW9uID0gV2ViQ29yZTo6SW50UG9pbnQoKngsICp5KTsKICAgICAg
ICAgICAgIH0KIAotICAgICAgICAgICAgaW50IHBhcnNlZER1cmF0aW9uOwotICAgICAgICAgICAg
aWYgKHN0YXRlT2JqZWN0LT5nZXRJbnRlZ2VyKCJkdXJhdGlvbiJfcywgcGFyc2VkRHVyYXRpb24p
KQotICAgICAgICAgICAgICAgIHNvdXJjZVN0YXRlLmR1cmF0aW9uID0gU2Vjb25kczo6ZnJvbU1p
bGxpc2Vjb25kcyhwYXJzZWREdXJhdGlvbik7CisgICAgICAgICAgICBpZiAoYXV0byBkdXJhdGlv
biA9IHN0YXRlT2JqZWN0LT5nZXRJbnRlZ2VyKCJkdXJhdGlvbiJfcykpCisgICAgICAgICAgICAg
ICAgc291cmNlU3RhdGUuZHVyYXRpb24gPSBTZWNvbmRzOjpmcm9tTWlsbGlzZWNvbmRzKCpkdXJh
dGlvbik7CiAKICAgICAgICAgICAgIGVudHJpZXMudW5jaGVja2VkQXBwZW5kKHN0ZDo6cGFpcjxT
aW11bGF0ZWRJbnB1dFNvdXJjZSYsIFNpbXVsYXRlZElucHV0U291cmNlU3RhdGU+IHsgaW5wdXRT
b3VyY2UsIHNvdXJjZVN0YXRlIH0pOwogICAgICAgICB9CkBAIC0xOTg0LDcgKzE5ODEsNyBAQCB2
b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpwZXJmb3JtSW50ZXJhY3Rpb25TZXF1ZW5jZShjb25z
dCBTdHJpbmcmIGhhbmRsZSwgY29ucwogI2VuZGlmIC8vIEVOQUJMRShXRUJEUklWRVJfQUNUSU9O
U19BUEkpCiB9CiAKLXZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OmNhbmNlbEludGVyYWN0aW9u
U2VxdWVuY2UoY29uc3QgU3RyaW5nJiBoYW5kbGUsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxGcmFt
ZUhhbmRsZSwgUmVmPENhbmNlbEludGVyYWN0aW9uU2VxdWVuY2VDYWxsYmFjaz4mJiBjYWxsYmFj
aykKK3ZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OmNhbmNlbEludGVyYWN0aW9uU2VxdWVuY2Uo
Y29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFu
ZGxlJiBoYW5kbGUsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkZyYW1l
SGFuZGxlJiBmcmFtZUhhbmRsZSwgUmVmPENhbmNlbEludGVyYWN0aW9uU2VxdWVuY2VDYWxsYmFj
az4mJiBjYWxsYmFjaykKIHsKICAgICAvLyBUaGlzIGNvbW1hbmQgaW1wbGVtZW50cyBXZWJLaXQg
c3VwcG9ydCBmb3IgwqcxNy42IFJlbGVhc2UgQWN0aW9ucy4KIApAQCAtMTk5Niw3ICsxOTkzLDcg
QEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6Y2FuY2VsSW50ZXJhY3Rpb25TZXF1ZW5jZShj
b25zdCBTdHJpbmcmIGhhbmRsZSwgY29uc3QKICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURF
RklORURfRVJST1IoV2luZG93Tm90Rm91bmQpOwogCiAgICAgYm9vbCBmcmFtZU5vdEZvdW5kID0g
ZmFsc2U7Ci0gICAgYXV0byBmcmFtZUlEID0gd2ViRnJhbWVJREZvckhhbmRsZShvcHRpb25hbEZy
YW1lSGFuZGxlID8gKm9wdGlvbmFsRnJhbWVIYW5kbGUgOiBlbXB0eVN0cmluZygpLCBmcmFtZU5v
dEZvdW5kKTsKKyAgICBhdXRvIGZyYW1lSUQgPSB3ZWJGcmFtZUlERm9ySGFuZGxlKGZyYW1lSGFu
ZGxlLCBmcmFtZU5vdEZvdW5kKTsKICAgICBpZiAoZnJhbWVOb3RGb3VuZCkKICAgICAgICAgQVNZ
TkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1IoRnJhbWVOb3RGb3VuZCk7CiAKQEAgLTIwMTMs
MTkgKzIwMTAsMTggQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6Y2FuY2VsSW50ZXJhY3Rp
b25TZXF1ZW5jZShjb25zdCBTdHJpbmcmIGhhbmRsZSwgY29uc3QKICNlbmRpZiAvLyBFTkFCTEUo
V0VCRFJJVkVSX0FDVElPTlNfQVBJKQogfQogCi12b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjp0
YWtlU2NyZWVuc2hvdChjb25zdCBTdHJpbmcmIGhhbmRsZSwgY29uc3QgU3RyaW5nKiBvcHRpb25h
bEZyYW1lSGFuZGxlLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsTm9kZUhhbmRsZSwgY29uc3QgYm9v
bCogb3B0aW9uYWxTY3JvbGxJbnRvVmlld0lmTmVlZGVkLCBjb25zdCBib29sKiBvcHRpb25hbENs
aXBUb1ZpZXdwb3J0LCBSZWY8VGFrZVNjcmVlbnNob3RDYWxsYmFjaz4mJiBjYWxsYmFjaykKK3Zv
aWQgV2ViQXV0b21hdGlvblNlc3Npb246OnRha2VTY3JlZW5zaG90KGNvbnN0IEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYgaGFuZGxlLCBjb25z
dCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpGcmFtZUhhbmRsZSYgZnJhbWVIYW5k
bGUsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246Ok5vZGVIYW5kbGUmIG5v
ZGVIYW5kbGUsIE9wdGlvbmFsPGJvb2w+JiYgb3B0aW9uYWxTY3JvbGxJbnRvVmlld0lmTmVlZGVk
LCBPcHRpb25hbDxib29sPiYmIG9wdGlvbmFsQ2xpcFRvVmlld3BvcnQsIFJlZjxUYWtlU2NyZWVu
c2hvdENhbGxiYWNrPiYmIGNhbGxiYWNrKQogewogICAgIFdlYlBhZ2VQcm94eSogcGFnZSA9IHdl
YlBhZ2VQcm94eUZvckhhbmRsZShoYW5kbGUpOwogICAgIGlmICghcGFnZSkKICAgICAgICAgQVNZ
TkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1IoV2luZG93Tm90Rm91bmQpOwogCiAgICAgYm9v
bCBmcmFtZU5vdEZvdW5kID0gZmFsc2U7Ci0gICAgYXV0byBmcmFtZUlEID0gd2ViRnJhbWVJREZv
ckhhbmRsZShvcHRpb25hbEZyYW1lSGFuZGxlID8gKm9wdGlvbmFsRnJhbWVIYW5kbGUgOiBlbXB0
eVN0cmluZygpLCBmcmFtZU5vdEZvdW5kKTsKKyAgICBhdXRvIGZyYW1lSUQgPSB3ZWJGcmFtZUlE
Rm9ySGFuZGxlKGZyYW1lSGFuZGxlLCBmcmFtZU5vdEZvdW5kKTsKICAgICBpZiAoZnJhbWVOb3RG
b3VuZCkKICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1IoRnJhbWVOb3RG
b3VuZCk7CiAKICAgICBib29sIHNjcm9sbEludG9WaWV3SWZOZWVkZWQgPSBvcHRpb25hbFNjcm9s
bEludG9WaWV3SWZOZWVkZWQgPyAqb3B0aW9uYWxTY3JvbGxJbnRvVmlld0lmTmVlZGVkIDogZmFs
c2U7Ci0gICAgU3RyaW5nIG5vZGVIYW5kbGUgPSBvcHRpb25hbE5vZGVIYW5kbGUgPyAqb3B0aW9u
YWxOb2RlSGFuZGxlIDogZW1wdHlTdHJpbmcoKTsKICAgICBib29sIGNsaXBUb1ZpZXdwb3J0ID0g
b3B0aW9uYWxDbGlwVG9WaWV3cG9ydCA/ICpvcHRpb25hbENsaXBUb1ZpZXdwb3J0IDogZmFsc2U7
CiAKICNpZiBQTEFURk9STShHVEspCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmgKaW5kZXggMzYyNzY2MDM5NWNi
NWY0NGU3N2E5Zjg2MWQ0MmU5NzFkYmExYmJmYy4uOGQ5MDg5MmE0YjEzNDI2NGE0ZTg1YmU0ZjY1
ZGZhMjBmYzAxM2EyZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21h
dGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbi5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uaApAQCAtMTM1LDEwICsxMzUsMTAgQEAg
cHVibGljOgogCiAjaWYgRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCiAgICAgLy8gSW5zcGVjdG9y
OjpSZW1vdGVBdXRvbWF0aW9uVGFyZ2V0IEFQSQotICAgIFN0cmluZyBuYW1lKCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gbV9zZXNzaW9uSWRlbnRpZmllcjsgfQotICAgIHZvaWQgZGlzcGF0Y2hN
ZXNzYWdlRnJvbVJlbW90ZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UpIG92ZXJyaWRlOwotICAgIHZv
aWQgY29ubmVjdChJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbCYsIGJvb2wgaXNBdXRvbWF0aWND
b25uZWN0aW9uID0gZmFsc2UsIGJvb2wgaW1tZWRpYXRlbHlQYXVzZSA9IGZhbHNlKSBvdmVycmlk
ZTsKLSAgICB2b2lkIGRpc2Nvbm5lY3QoSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWwmKSBvdmVy
cmlkZTsKKyAgICBTdHJpbmcgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2Vzc2lvbklkZW50aWZp
ZXI7IH0KKyAgICB2b2lkIGRpc3BhdGNoTWVzc2FnZUZyb21SZW1vdGUoY29uc3QgU3RyaW5nJiBt
ZXNzYWdlKTsKKyAgICB2b2lkIGNvbm5lY3QoSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWwmLCBi
b29sIGlzQXV0b21hdGljQ29ubmVjdGlvbiA9IGZhbHNlLCBib29sIGltbWVkaWF0ZWx5UGF1c2Ug
PSBmYWxzZSk7CisgICAgdm9pZCBkaXNjb25uZWN0KEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFubmVs
Jik7CiAjZW5kaWYKICAgICB2b2lkIHRlcm1pbmF0ZSgpOwogCkBAIC0xNDYsMTUgKzE0NiwxNSBA
QCBwdWJsaWM6CiAKICAgICAvLyBTaW11bGF0ZWRJbnB1dERpc3BhdGNoZXI6OkNsaWVudCBBUEkK
ICNpZiBFTkFCTEUoV0VCRFJJVkVSX01PVVNFX0lOVEVSQUNUSU9OUykKLSAgICB2b2lkIHNpbXVs
YXRlTW91c2VJbnRlcmFjdGlvbihXZWJQYWdlUHJveHkmLCBNb3VzZUludGVyYWN0aW9uLCBNb3Vz
ZUJ1dHRvbiwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGxvY2F0aW9uSW5WaWV3LCBBdXRvbWF0
aW9uQ29tcGxldGlvbkhhbmRsZXImJikgZmluYWw7CisgICAgdm9pZCBzaW11bGF0ZU1vdXNlSW50
ZXJhY3Rpb24oV2ViUGFnZVByb3h5JiwgTW91c2VJbnRlcmFjdGlvbiwgTW91c2VCdXR0b24sIGNv
bnN0IFdlYkNvcmU6OkludFBvaW50JiBsb2NhdGlvbkluVmlldywgQXV0b21hdGlvbkNvbXBsZXRp
b25IYW5kbGVyJiYpOwogI2VuZGlmCiAjaWYgRU5BQkxFKFdFQkRSSVZFUl9UT1VDSF9JTlRFUkFD
VElPTlMpCi0gICAgdm9pZCBzaW11bGF0ZVRvdWNoSW50ZXJhY3Rpb24oV2ViUGFnZVByb3h5Jiwg
VG91Y2hJbnRlcmFjdGlvbiwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGxvY2F0aW9uSW5WaWV3
LCBPcHRpb25hbDxTZWNvbmRzPiBkdXJhdGlvbiwgQXV0b21hdGlvbkNvbXBsZXRpb25IYW5kbGVy
JiYpIGZpbmFsOworICAgIHZvaWQgc2ltdWxhdGVUb3VjaEludGVyYWN0aW9uKFdlYlBhZ2VQcm94
eSYsIFRvdWNoSW50ZXJhY3Rpb24sIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBsb2NhdGlvbklu
VmlldywgT3B0aW9uYWw8U2Vjb25kcz4gZHVyYXRpb24sIEF1dG9tYXRpb25Db21wbGV0aW9uSGFu
ZGxlciYmKTsKICNlbmRpZgogI2lmIEVOQUJMRShXRUJEUklWRVJfS0VZQk9BUkRfSU5URVJBQ1RJ
T05TKQotICAgIHZvaWQgc2ltdWxhdGVLZXlib2FyZEludGVyYWN0aW9uKFdlYlBhZ2VQcm94eSYs
IEtleWJvYXJkSW50ZXJhY3Rpb24sIFdURjo6VmFyaWFudDxWaXJ0dWFsS2V5LCBDaGFyS2V5PiYm
LCBBdXRvbWF0aW9uQ29tcGxldGlvbkhhbmRsZXImJikgZmluYWw7CisgICAgdm9pZCBzaW11bGF0
ZUtleWJvYXJkSW50ZXJhY3Rpb24oV2ViUGFnZVByb3h5JiwgS2V5Ym9hcmRJbnRlcmFjdGlvbiwg
V1RGOjpWYXJpYW50PFZpcnR1YWxLZXksIENoYXJLZXk+JiYsIEF1dG9tYXRpb25Db21wbGV0aW9u
SGFuZGxlciYmKTsKICNlbmRpZgotICAgIHZvaWQgdmlld3BvcnRJblZpZXdDZW50ZXJQb2ludE9m
RWxlbWVudChXZWJQYWdlUHJveHkmLCBPcHRpb25hbDxXZWJDb3JlOjpGcmFtZUlkZW50aWZpZXI+
LCBjb25zdCBTdHJpbmcmIG5vZGVIYW5kbGUsIEZ1bmN0aW9uPHZvaWQgKE9wdGlvbmFsPFdlYkNv
cmU6OkludFBvaW50PiwgT3B0aW9uYWw8QXV0b21hdGlvbkNvbW1hbmRFcnJvcj4pPiYmKSBmaW5h
bDsKKyAgICB2b2lkIHZpZXdwb3J0SW5WaWV3Q2VudGVyUG9pbnRPZkVsZW1lbnQoV2ViUGFnZVBy
b3h5JiwgT3B0aW9uYWw8V2ViQ29yZTo6RnJhbWVJZGVudGlmaWVyPiwgY29uc3QgSW5zcGVjdG9y
OjpQcm90b2NvbDo6QXV0b21hdGlvbjo6Tm9kZUhhbmRsZSYsIEZ1bmN0aW9uPHZvaWQoT3B0aW9u
YWw8V2ViQ29yZTo6SW50UG9pbnQ+LCBPcHRpb25hbDxBdXRvbWF0aW9uQ29tbWFuZEVycm9yPik+
JiYpOwogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkRSSVZFUl9BQ1RJT05TX0FQSSkKIApAQCAtMTYz
LDQ1ICsxNjMsNDUgQEAgcHVibGljOgogICAgIC8vIGFuZCB0aGUgLS1wbGF0Zm9ybSBhcmd1bWVu
dCBwYXNzZWQgdG8gdGhlIHByb3RvY29sIGJpbmRpbmdzIGdlbmVyYXRvci4KIAogICAgIC8vIFBs
YXRmb3JtOiBHZW5lcmljCi0gICAgdm9pZCBnZXRCcm93c2luZ0NvbnRleHRzKFJlZjxHZXRCcm93
c2luZ0NvbnRleHRzQ2FsbGJhY2s+JiYpIGZpbmFsOwotICAgIHZvaWQgZ2V0QnJvd3NpbmdDb250
ZXh0KGNvbnN0IFN0cmluZyYsIFJlZjxHZXRCcm93c2luZ0NvbnRleHRDYWxsYmFjaz4mJikgZmlu
YWw7Ci0gICAgdm9pZCBjcmVhdGVCcm93c2luZ0NvbnRleHQoY29uc3QgU3RyaW5nKiBvcHRpb25h
bFByZXNlbnRhdGlvbkhpbnQsIFJlZjxDcmVhdGVCcm93c2luZ0NvbnRleHRDYWxsYmFjaz4mJikg
ZmluYWw7Ci0gICAgdm9pZCBjbG9zZUJyb3dzaW5nQ29udGV4dChJbnNwZWN0b3I6OkVycm9yU3Ry
aW5nJiwgY29uc3QgU3RyaW5nJikgZmluYWw7Ci0gICAgdm9pZCBzd2l0Y2hUb0Jyb3dzaW5nQ29u
dGV4dChjb25zdCBTdHJpbmcmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSwgY29uc3QgU3RyaW5nKiBv
cHRpb25hbEZyYW1lSGFuZGxlLCBSZWY8U3dpdGNoVG9Ccm93c2luZ0NvbnRleHRDYWxsYmFjaz4m
JikgZmluYWw7Ci0gICAgdm9pZCBzZXRXaW5kb3dGcmFtZU9mQnJvd3NpbmdDb250ZXh0KGNvbnN0
IFN0cmluZyYgaGFuZGxlLCBjb25zdCBKU09OOjpPYmplY3QqIG9yaWdpbiwgY29uc3QgSlNPTjo6
T2JqZWN0KiBzaXplLCBSZWY8U2V0V2luZG93RnJhbWVPZkJyb3dzaW5nQ29udGV4dENhbGxiYWNr
PiYmKSBmaW5hbDsKLSAgICB2b2lkIG1heGltaXplV2luZG93T2ZCcm93c2luZ0NvbnRleHQoY29u
c3QgU3RyaW5nJiBoYW5kbGUsIFJlZjxNYXhpbWl6ZVdpbmRvd09mQnJvd3NpbmdDb250ZXh0Q2Fs
bGJhY2s+JiYpIGZpbmFsOwotICAgIHZvaWQgaGlkZVdpbmRvd09mQnJvd3NpbmdDb250ZXh0KGNv
bnN0IFN0cmluZyYgaGFuZGxlLCBSZWY8SGlkZVdpbmRvd09mQnJvd3NpbmdDb250ZXh0Q2FsbGJh
Y2s+JiYpIGZpbmFsOwotICAgIHZvaWQgbmF2aWdhdGVCcm93c2luZ0NvbnRleHQoY29uc3QgU3Ry
aW5nJiBoYW5kbGUsIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsUGFn
ZUxvYWRTdHJhdGVneVN0cmluZywgY29uc3QgZG91YmxlKiBvcHRpb25hbFBhZ2VMb2FkVGltZW91
dCwgUmVmPE5hdmlnYXRlQnJvd3NpbmdDb250ZXh0Q2FsbGJhY2s+JiYpIG92ZXJyaWRlOwotICAg
IHZvaWQgZ29CYWNrSW5Ccm93c2luZ0NvbnRleHQoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5n
KiBvcHRpb25hbFBhZ2VMb2FkU3RyYXRlZ3lTdHJpbmcsIGNvbnN0IGRvdWJsZSogb3B0aW9uYWxQ
YWdlTG9hZFRpbWVvdXQsIFJlZjxHb0JhY2tJbkJyb3dzaW5nQ29udGV4dENhbGxiYWNrPiYmKSBv
dmVycmlkZTsKLSAgICB2b2lkIGdvRm9yd2FyZEluQnJvd3NpbmdDb250ZXh0KGNvbnN0IFN0cmlu
ZyYsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxQYWdlTG9hZFN0cmF0ZWd5U3RyaW5nLCBjb25zdCBk
b3VibGUqIG9wdGlvbmFsUGFnZUxvYWRUaW1lb3V0LCBSZWY8R29Gb3J3YXJkSW5Ccm93c2luZ0Nv
bnRleHRDYWxsYmFjaz4mJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZWxvYWRCcm93c2luZ0NvbnRl
eHQoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nKiBvcHRpb25hbFBhZ2VMb2FkU3RyYXRlZ3lT
dHJpbmcsIGNvbnN0IGRvdWJsZSogb3B0aW9uYWxQYWdlTG9hZFRpbWVvdXQsIFJlZjxSZWxvYWRC
cm93c2luZ0NvbnRleHRDYWxsYmFjaz4mJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCB3YWl0Rm9yTmF2
aWdhdGlvblRvQ29tcGxldGUoY29uc3QgU3RyaW5nJiBicm93c2luZ0NvbnRleHRIYW5kbGUsIGNv
bnN0IFN0cmluZyogb3B0aW9uYWxGcmFtZUhhbmRsZSwgY29uc3QgU3RyaW5nKiBvcHRpb25hbFBh
Z2VMb2FkU3RyYXRlZ3lTdHJpbmcsIGNvbnN0IGRvdWJsZSogb3B0aW9uYWxQYWdlTG9hZFRpbWVv
dXQsIFJlZjxXYWl0Rm9yTmF2aWdhdGlvblRvQ29tcGxldGVDYWxsYmFjaz4mJikgb3ZlcnJpZGU7
Ci0gICAgdm9pZCBldmFsdWF0ZUphdmFTY3JpcHRGdW5jdGlvbihjb25zdCBTdHJpbmcmIGJyb3dz
aW5nQ29udGV4dEhhbmRsZSwgY29uc3QgU3RyaW5nKiBvcHRpb25hbEZyYW1lSGFuZGxlLCBjb25z
dCBTdHJpbmcmIGZ1bmN0aW9uLCBjb25zdCBKU09OOjpBcnJheSYgYXJndW1lbnRzLCBjb25zdCBi
b29sKiBvcHRpb25hbEV4cGVjdHNJbXBsaWNpdENhbGxiYWNrQXJndW1lbnQsIGNvbnN0IGRvdWJs
ZSogb3B0aW9uYWxDYWxsYmFja1RpbWVvdXQsIFJlZjxJbnNwZWN0b3I6OkF1dG9tYXRpb25CYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkV2YWx1YXRlSmF2YVNjcmlwdEZ1bmN0aW9uQ2FsbGJhY2s+
JiYpIG92ZXJyaWRlOwotICAgIHZvaWQgcGVyZm9ybU1vdXNlSW50ZXJhY3Rpb24oY29uc3QgU3Ry
aW5nJiBoYW5kbGUsIGNvbnN0IEpTT046Ok9iamVjdCYgcmVxdWVzdGVkUG9zaXRpb24sIGNvbnN0
IFN0cmluZyYgbW91c2VCdXR0b24sIGNvbnN0IFN0cmluZyYgbW91c2VJbnRlcmFjdGlvbiwgY29u
c3QgSlNPTjo6QXJyYXkmIGtleU1vZGlmaWVycywgUmVmPFBlcmZvcm1Nb3VzZUludGVyYWN0aW9u
Q2FsbGJhY2s+JiYpIGZpbmFsOwotICAgIHZvaWQgcGVyZm9ybUtleWJvYXJkSW50ZXJhY3Rpb25z
KGNvbnN0IFN0cmluZyYgaGFuZGxlLCBjb25zdCBKU09OOjpBcnJheSYgaW50ZXJhY3Rpb25zLCBS
ZWY8UGVyZm9ybUtleWJvYXJkSW50ZXJhY3Rpb25zQ2FsbGJhY2s+JiYpIG92ZXJyaWRlOwotICAg
IHZvaWQgcGVyZm9ybUludGVyYWN0aW9uU2VxdWVuY2UoY29uc3QgU3RyaW5nJiBoYW5kbGUsIGNv
bnN0IFN0cmluZyogb3B0aW9uYWxGcmFtZUhhbmRsZSwgY29uc3QgSlNPTjo6QXJyYXkmIHNvdXJj
ZXMsIGNvbnN0IEpTT046OkFycmF5JiBzdGVwcywgUmVmPFBlcmZvcm1JbnRlcmFjdGlvblNlcXVl
bmNlQ2FsbGJhY2s+JiYpIG92ZXJyaWRlOwotICAgIHZvaWQgY2FuY2VsSW50ZXJhY3Rpb25TZXF1
ZW5jZShjb25zdCBTdHJpbmcmIGhhbmRsZSwgY29uc3QgU3RyaW5nKiBvcHRpb25hbEZyYW1lSGFu
ZGxlLCBSZWY8Q2FuY2VsSW50ZXJhY3Rpb25TZXF1ZW5jZUNhbGxiYWNrPiYmKSBvdmVycmlkZTsK
LSAgICB2b2lkIHRha2VTY3JlZW5zaG90KGNvbnN0IFN0cmluZyYgaGFuZGxlLCBjb25zdCBTdHJp
bmcqIG9wdGlvbmFsRnJhbWVIYW5kbGUsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxOb2RlSGFuZGxl
LCBjb25zdCBib29sKiBvcHRpb25hbFNjcm9sbEludG9WaWV3SWZOZWVkZWQsIGNvbnN0IGJvb2wq
IG9wdGlvbmFsQ2xpcFRvVmlld3BvcnQsIFJlZjxUYWtlU2NyZWVuc2hvdENhbGxiYWNrPiYmKSBv
dmVycmlkZTsKLSAgICB2b2lkIHJlc29sdmVDaGlsZEZyYW1lSGFuZGxlKGNvbnN0IFN0cmluZyYg
YnJvd3NpbmdDb250ZXh0SGFuZGxlLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsRnJhbWVIYW5kbGUs
IGNvbnN0IGludCogb3B0aW9uYWxPcmRpbmFsLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsTmFtZSwg
Y29uc3QgU3RyaW5nKiBvcHRpb25hbE5vZGVIYW5kbGUsIFJlZjxSZXNvbHZlQ2hpbGRGcmFtZUhh
bmRsZUNhbGxiYWNrPiYmKSBvdmVycmlkZTsKLSAgICB2b2lkIHJlc29sdmVQYXJlbnRGcmFtZUhh
bmRsZShjb25zdCBTdHJpbmcmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSwgY29uc3QgU3RyaW5nJiBm
cmFtZUhhbmRsZSwgUmVmPFJlc29sdmVQYXJlbnRGcmFtZUhhbmRsZUNhbGxiYWNrPiYmKSBvdmVy
cmlkZTsKLSAgICB2b2lkIGNvbXB1dGVFbGVtZW50TGF5b3V0KGNvbnN0IFN0cmluZyYgYnJvd3Np
bmdDb250ZXh0SGFuZGxlLCBjb25zdCBTdHJpbmcmIGZyYW1lSGFuZGxlLCBjb25zdCBTdHJpbmcm
IG5vZGVIYW5kbGUsIGNvbnN0IGJvb2wqIG9wdGlvbmFsU2Nyb2xsSW50b1ZpZXdJZk5lZWRlZCwg
Y29uc3QgU3RyaW5nJiBjb29yZGluYXRlU3lzdGVtLCBSZWY8SW5zcGVjdG9yOjpBdXRvbWF0aW9u
QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpDb21wdXRlRWxlbWVudExheW91dENhbGxiYWNrPiYm
KSBvdmVycmlkZTsKLSAgICB2b2lkIHNlbGVjdE9wdGlvbkVsZW1lbnQoY29uc3QgU3RyaW5nJiBi
cm93c2luZ0NvbnRleHRIYW5kbGUsIGNvbnN0IFN0cmluZyYgZnJhbWVIYW5kbGUsIGNvbnN0IFN0
cmluZyYgbm9kZUhhbmRsZSwgUmVmPEluc3BlY3Rvcjo6QXV0b21hdGlvbkJhY2tlbmREaXNwYXRj
aGVySGFuZGxlcjo6U2VsZWN0T3B0aW9uRWxlbWVudENhbGxiYWNrPiYmKSBvdmVycmlkZTsKLSAg
ICB2b2lkIGlzU2hvd2luZ0phdmFTY3JpcHREaWFsb2coSW5zcGVjdG9yOjpFcnJvclN0cmluZyYs
IGNvbnN0IFN0cmluZyYgYnJvd3NpbmdDb250ZXh0SGFuZGxlLCBib29sKiByZXN1bHQpIG92ZXJy
aWRlOwotICAgIHZvaWQgZGlzbWlzc0N1cnJlbnRKYXZhU2NyaXB0RGlhbG9nKEluc3BlY3Rvcjo6
RXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSkgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCBhY2NlcHRDdXJyZW50SmF2YVNjcmlwdERpYWxvZyhJbnNwZWN0b3I6OkVy
cm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBicm93c2luZ0NvbnRleHRIYW5kbGUpIG92ZXJyaWRl
OwotICAgIHZvaWQgbWVzc2FnZU9mQ3VycmVudEphdmFTY3JpcHREaWFsb2coSW5zcGVjdG9yOjpF
cnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgYnJvd3NpbmdDb250ZXh0SGFuZGxlLCBTdHJpbmcq
IHRleHQpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0VXNlcklucHV0Rm9yQ3VycmVudEphdmFTY3Jp
cHRQcm9tcHQoSW5zcGVjdG9yOjpFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgYnJvd3NpbmdD
b250ZXh0SGFuZGxlLCBjb25zdCBTdHJpbmcmIHRleHQpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0
RmlsZXNUb1NlbGVjdEZvckZpbGVVcGxvYWQoSW5zcGVjdG9yOjpFcnJvclN0cmluZyYsIGNvbnN0
IFN0cmluZyYgYnJvd3NpbmdDb250ZXh0SGFuZGxlLCBjb25zdCBKU09OOjpBcnJheSYgZmlsZW5h
bWVzLCBjb25zdCBKU09OOjpBcnJheSogb3B0aW9uYWxGaWxlQ29udGVudHMpIG92ZXJyaWRlOwot
ICAgIHZvaWQgc2V0RmlsZXNGb3JJbnB1dEZpbGVVcGxvYWQoY29uc3QgU3RyaW5nJiBicm93c2lu
Z0NvbnRleHRIYW5kbGUsIGNvbnN0IFN0cmluZyYgZnJhbWVIYW5kbGUsIGNvbnN0IFN0cmluZyYg
bm9kZUhhbmRsZSwgY29uc3QgSlNPTjo6QXJyYXkmIGZpbGVuYW1lcywgUmVmPFNldEZpbGVzRm9y
SW5wdXRGaWxlVXBsb2FkQ2FsbGJhY2s+JiYpIG92ZXJyaWRlOwotICAgIHZvaWQgZ2V0QWxsQ29v
a2llcyhjb25zdCBTdHJpbmcmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSwgUmVmPEdldEFsbENvb2tp
ZXNDYWxsYmFjaz4mJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkZWxldGVTaW5nbGVDb29raWUoY29u
c3QgU3RyaW5nJiBicm93c2luZ0NvbnRleHRIYW5kbGUsIGNvbnN0IFN0cmluZyYgY29va2llTmFt
ZSwgUmVmPERlbGV0ZVNpbmdsZUNvb2tpZUNhbGxiYWNrPiYmKSBvdmVycmlkZTsKLSAgICB2b2lk
IGFkZFNpbmdsZUNvb2tpZShjb25zdCBTdHJpbmcmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSwgY29u
c3QgSlNPTjo6T2JqZWN0JiBjb29raWUsIFJlZjxBZGRTaW5nbGVDb29raWVDYWxsYmFjaz4mJikg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBkZWxldGVBbGxDb29raWVzKEluc3BlY3Rvcjo6RXJyb3JTdHJp
bmcmLCBjb25zdCBTdHJpbmcmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSkgb3ZlcnJpZGU7Ci0gICAg
dm9pZCBnZXRTZXNzaW9uUGVybWlzc2lvbnMoSW5zcGVjdG9yOjpFcnJvclN0cmluZyYsIFJlZlB0
cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OlNlc3Npb25Q
ZXJtaXNzaW9uRGF0YT4+JiBvdXRfcGVybWlzc2lvbnMpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0
U2Vzc2lvblBlcm1pc3Npb25zKEluc3BlY3Rvcjo6RXJyb3JTdHJpbmcmLCBjb25zdCBKU09OOjpB
cnJheSYgaW5fcGVybWlzc2lvbnMpIG92ZXJyaWRlOworICAgIHZvaWQgZ2V0QnJvd3NpbmdDb250
ZXh0cyhSZWY8R2V0QnJvd3NpbmdDb250ZXh0c0NhbGxiYWNrPiYmKTsKKyAgICB2b2lkIGdldEJy
b3dzaW5nQ29udGV4dChjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93
c2luZ0NvbnRleHRIYW5kbGUmLCBSZWY8R2V0QnJvd3NpbmdDb250ZXh0Q2FsbGJhY2s+JiYpOwor
ICAgIHZvaWQgY3JlYXRlQnJvd3NpbmdDb250ZXh0KE9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dFByZXNlbnRhdGlvbj4mJiwgUmVmPENyZWF0
ZUJyb3dzaW5nQ29udGV4dENhbGxiYWNrPiYmKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpF
cnJvclN0cmluZ09yPHZvaWQ+IGNsb3NlQnJvd3NpbmdDb250ZXh0KGNvbnN0IEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYpOworICAgIHZvaWQg
c3dpdGNoVG9Ccm93c2luZ0NvbnRleHQoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21h
dGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJiwgY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6
QXV0b21hdGlvbjo6RnJhbWVIYW5kbGUmLCBSZWY8U3dpdGNoVG9Ccm93c2luZ0NvbnRleHRDYWxs
YmFjaz4mJik7CisgICAgdm9pZCBzZXRXaW5kb3dGcmFtZU9mQnJvd3NpbmdDb250ZXh0KGNvbnN0
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYs
IFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgb3JpZ2luLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHNp
emUsIFJlZjxTZXRXaW5kb3dGcmFtZU9mQnJvd3NpbmdDb250ZXh0Q2FsbGJhY2s+JiYpOworICAg
IHZvaWQgbWF4aW1pemVXaW5kb3dPZkJyb3dzaW5nQ29udGV4dChjb25zdCBJbnNwZWN0b3I6OlBy
b3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRIYW5kbGUmLCBSZWY8TWF4aW1pemVX
aW5kb3dPZkJyb3dzaW5nQ29udGV4dENhbGxiYWNrPiYmKTsKKyAgICB2b2lkIGhpZGVXaW5kb3dP
ZkJyb3dzaW5nQ29udGV4dChjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpC
cm93c2luZ0NvbnRleHRIYW5kbGUmLCBSZWY8SGlkZVdpbmRvd09mQnJvd3NpbmdDb250ZXh0Q2Fs
bGJhY2s+JiYpOworICAgIHZvaWQgbmF2aWdhdGVCcm93c2luZ0NvbnRleHQoY29uc3QgSW5zcGVj
dG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJiwgY29uc3Qg
U3RyaW5nJiB1cmwsIE9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OlBh
Z2VMb2FkU3RyYXRlZ3k+JiYsIE9wdGlvbmFsPGRvdWJsZT4mJiBwYWdlTG9hZFRpbWVvdXQsIFJl
ZjxOYXZpZ2F0ZUJyb3dzaW5nQ29udGV4dENhbGxiYWNrPiYmKTsKKyAgICB2b2lkIGdvQmFja0lu
QnJvd3NpbmdDb250ZXh0KGNvbnN0IFN0cmluZyYsIE9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkF1dG9tYXRpb246OlBhZ2VMb2FkU3RyYXRlZ3k+JiYsIE9wdGlvbmFsPGRvdWJsZT4mJiBw
YWdlTG9hZFRpbWVvdXQsIFJlZjxHb0JhY2tJbkJyb3dzaW5nQ29udGV4dENhbGxiYWNrPiYmKTsK
KyAgICB2b2lkIGdvRm9yd2FyZEluQnJvd3NpbmdDb250ZXh0KGNvbnN0IFN0cmluZyYsIE9wdGlv
bmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OlBhZ2VMb2FkU3RyYXRlZ3k+JiYs
IE9wdGlvbmFsPGRvdWJsZT4mJiBwYWdlTG9hZFRpbWVvdXQsIFJlZjxHb0ZvcndhcmRJbkJyb3dz
aW5nQ29udGV4dENhbGxiYWNrPiYmKTsKKyAgICB2b2lkIHJlbG9hZEJyb3dzaW5nQ29udGV4dChj
b25zdCBTdHJpbmcmLCBPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpQ
YWdlTG9hZFN0cmF0ZWd5PiYmLCBPcHRpb25hbDxkb3VibGU+JiYgcGFnZUxvYWRUaW1lb3V0LCBS
ZWY8UmVsb2FkQnJvd3NpbmdDb250ZXh0Q2FsbGJhY2s+JiYpOworICAgIHZvaWQgd2FpdEZvck5h
dmlnYXRpb25Ub0NvbXBsZXRlKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246
OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9t
YXRpb246OkZyYW1lSGFuZGxlJiwgT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21h
dGlvbjo6UGFnZUxvYWRTdHJhdGVneT4mJiwgT3B0aW9uYWw8ZG91YmxlPiYmIHBhZ2VMb2FkVGlt
ZW91dCwgUmVmPFdhaXRGb3JOYXZpZ2F0aW9uVG9Db21wbGV0ZUNhbGxiYWNrPiYmKTsKKyAgICB2
b2lkIGV2YWx1YXRlSmF2YVNjcmlwdEZ1bmN0aW9uKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYsIGNvbnN0IEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkF1dG9tYXRpb246OkZyYW1lSGFuZGxlJiwgY29uc3QgU3RyaW5nJiBmdW5jdGlvbiwg
UmVmPEpTT046OkFycmF5PiYmIGFyZ3VtZW50cywgT3B0aW9uYWw8Ym9vbD4mJiBleHBlY3RzSW1w
bGljaXRDYWxsYmFja0FyZ3VtZW50LCBPcHRpb25hbDxkb3VibGU+JiYgY2FsbGJhY2tUaW1lb3V0
LCBSZWY8RXZhbHVhdGVKYXZhU2NyaXB0RnVuY3Rpb25DYWxsYmFjaz4mJik7CisgICAgdm9pZCBw
ZXJmb3JtTW91c2VJbnRlcmFjdGlvbihjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0
aW9uOjpCcm93c2luZ0NvbnRleHRIYW5kbGUmLCBSZWY8SlNPTjo6T2JqZWN0PiYmIHJlcXVlc3Rl
ZFBvc2l0aW9uLCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpNb3VzZUJ1dHRvbiwg
SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6TW91c2VJbnRlcmFjdGlvbiwgUmVmPEpT
T046OkFycmF5PiYmIGtleU1vZGlmaWVycywgUmVmPFBlcmZvcm1Nb3VzZUludGVyYWN0aW9uQ2Fs
bGJhY2s+JiYpOworICAgIHZvaWQgcGVyZm9ybUtleWJvYXJkSW50ZXJhY3Rpb25zKGNvbnN0IElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYsIFJl
ZjxKU09OOjpBcnJheT4mJiBpbnRlcmFjdGlvbnMsIFJlZjxQZXJmb3JtS2V5Ym9hcmRJbnRlcmFj
dGlvbnNDYWxsYmFjaz4mJik7CisgICAgdm9pZCBwZXJmb3JtSW50ZXJhY3Rpb25TZXF1ZW5jZShj
b25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRIYW5k
bGUmLCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpGcmFtZUhhbmRsZSYs
IFJlZjxKU09OOjpBcnJheT4mJiBzb3VyY2VzLCBSZWY8SlNPTjo6QXJyYXk+JiYgc3RlcHMsIFJl
ZjxQZXJmb3JtSW50ZXJhY3Rpb25TZXF1ZW5jZUNhbGxiYWNrPiYmKTsKKyAgICB2b2lkIGNhbmNl
bEludGVyYWN0aW9uU2VxdWVuY2UoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlv
bjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJiwgY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0
b21hdGlvbjo6RnJhbWVIYW5kbGUmLCBSZWY8Q2FuY2VsSW50ZXJhY3Rpb25TZXF1ZW5jZUNhbGxi
YWNrPiYmKTsKKyAgICB2b2lkIHRha2VTY3JlZW5zaG90KGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYsIGNvbnN0IEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkF1dG9tYXRpb246OkZyYW1lSGFuZGxlJiwgY29uc3QgSW5zcGVjdG9yOjpQcm90
b2NvbDo6QXV0b21hdGlvbjo6Tm9kZUhhbmRsZSYsIE9wdGlvbmFsPGJvb2w+JiYgc2Nyb2xsSW50
b1ZpZXdJZk5lZWRlZCwgT3B0aW9uYWw8Ym9vbD4mJiBjbGlwVG9WaWV3cG9ydCwgUmVmPFRha2VT
Y3JlZW5zaG90Q2FsbGJhY2s+JiYpOworICAgIHZvaWQgcmVzb2x2ZUNoaWxkRnJhbWVIYW5kbGUo
Y29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFu
ZGxlJiwgY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6RnJhbWVIYW5kbGUm
LCBPcHRpb25hbDxpbnQ+JiYgb3JkaW5hbCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJbnNw
ZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpOb2RlSGFuZGxlJiwgUmVmPFJlc29sdmVDaGls
ZEZyYW1lSGFuZGxlQ2FsbGJhY2s+JiYpOworICAgIHZvaWQgcmVzb2x2ZVBhcmVudEZyYW1lSGFu
ZGxlKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4
dEhhbmRsZSYsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkZyYW1lSGFu
ZGxlJiwgUmVmPFJlc29sdmVQYXJlbnRGcmFtZUhhbmRsZUNhbGxiYWNrPiYmKTsKKyAgICB2b2lk
IGNvbXB1dGVFbGVtZW50TGF5b3V0KGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRp
b246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1
dG9tYXRpb246OkZyYW1lSGFuZGxlJiwgY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21h
dGlvbjo6Tm9kZUhhbmRsZSYsIE9wdGlvbmFsPGJvb2w+JiYgc2Nyb2xsSW50b1ZpZXdJZk5lZWRl
ZCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6Q29vcmRpbmF0ZVN5c3RlbSwgUmVm
PENvbXB1dGVFbGVtZW50TGF5b3V0Q2FsbGJhY2s+JiYpOworICAgIHZvaWQgc2VsZWN0T3B0aW9u
RWxlbWVudChjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0Nv
bnRleHRIYW5kbGUmLCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpGcmFt
ZUhhbmRsZSYsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246Ok5vZGVIYW5k
bGUmLCBSZWY8U2VsZWN0T3B0aW9uRWxlbWVudENhbGxiYWNrPiYmKTsKKyAgICBJbnNwZWN0b3I6
OlByb3RvY29sOjpFcnJvclN0cmluZ09yPGJvb2w+IGlzU2hvd2luZ0phdmFTY3JpcHREaWFsb2co
Y29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFu
ZGxlJik7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBkaXNt
aXNzQ3VycmVudEphdmFTY3JpcHREaWFsb2coY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0
b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJik7CisgICAgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBhY2NlcHRDdXJyZW50SmF2YVNjcmlwdERpYWxvZyhjb25z
dCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRIYW5kbGUm
KTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFN0cmluZz4gbWVzc2Fn
ZU9mQ3VycmVudEphdmFTY3JpcHREaWFsb2coY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0
b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJik7CisgICAgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzZXRVc2VySW5wdXRGb3JDdXJyZW50SmF2YVNjcmlwdFBy
b21wdChjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRl
eHRIYW5kbGUmLCBjb25zdCBTdHJpbmcmIHRleHQpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8dm9pZD4gc2V0RmlsZXNUb1NlbGVjdEZvckZpbGVVcGxvYWQoY29uc3Qg
SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJiwg
UmVmPEpTT046OkFycmF5PiYmIGZpbGVuYW1lcywgUmVmUHRyPEpTT046OkFycmF5PiYmIGZpbGVD
b250ZW50cyk7CisgICAgdm9pZCBzZXRGaWxlc0ZvcklucHV0RmlsZVVwbG9hZChjb25zdCBJbnNw
ZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRIYW5kbGUmLCBjb25z
dCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpGcmFtZUhhbmRsZSYsIGNvbnN0IElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246Ok5vZGVIYW5kbGUmLCBSZWY8SlNPTjo6QXJy
YXk+JiYgZmlsZW5hbWVzLCBSZWY8U2V0RmlsZXNGb3JJbnB1dEZpbGVVcGxvYWRDYWxsYmFjaz4m
Jik7CisgICAgdm9pZCBnZXRBbGxDb29raWVzKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1
dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYsIFJlZjxHZXRBbGxDb29raWVzQ2FsbGJh
Y2s+JiYpOworICAgIHZvaWQgZGVsZXRlU2luZ2xlQ29va2llKGNvbnN0IEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYsIGNvbnN0IFN0cmluZyYg
Y29va2llTmFtZSwgUmVmPERlbGV0ZVNpbmdsZUNvb2tpZUNhbGxiYWNrPiYmKTsKKyAgICB2b2lk
IGFkZFNpbmdsZUNvb2tpZShjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpC
cm93c2luZ0NvbnRleHRIYW5kbGUmLCBSZWY8SlNPTjo6T2JqZWN0PiYmIGNvb2tpZSwgUmVmPEFk
ZFNpbmdsZUNvb2tpZUNhbGxiYWNrPiYmKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJv
clN0cmluZ09yPHZvaWQ+IGRlbGV0ZUFsbENvb2tpZXMoY29uc3QgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJik7CisgICAgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpBdXRvbWF0aW9uOjpTZXNzaW9uUGVybWlzc2lvbkRhdGE+Pj4gZ2V0U2Vzc2lvblBlcm1p
c3Npb25zKCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBz
ZXRTZXNzaW9uUGVybWlzc2lvbnMoUmVmPEpTT046OkFycmF5PiYmKTsKIAogI2lmIFBMQVRGT1JN
KE1BQykKLSAgICB2b2lkIGluc3BlY3RCcm93c2luZ0NvbnRleHQoY29uc3QgU3RyaW5nJiwgY29u
c3QgYm9vbCogb3B0aW9uYWxFbmFibGVBdXRvQ2FwdHVyaW5nLCBSZWY8SW5zcGVjdEJyb3dzaW5n
Q29udGV4dENhbGxiYWNrPiYmKSBvdmVycmlkZTsKKyAgICB2b2lkIGluc3BlY3RCcm93c2luZ0Nv
bnRleHQoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250
ZXh0SGFuZGxlJiwgT3B0aW9uYWw8Ym9vbD4mJiBlbmFibGVBdXRvQ2FwdHVyaW5nLCBSZWY8SW5z
cGVjdEJyb3dzaW5nQ29udGV4dENhbGxiYWNrPiYmKTsKICNlbmRpZgogCiAgICAgLy8gRXZlbnQg
U2ltdWxhdGlvbiBTdXBwb3J0LgpAQCAtMjM4LDcgKzIzOCw3IEBAIHByaXZhdGU6CiAgICAgdm9p
ZCBoaWRlV2luZG93Rm9yUGFnZShXZWJQYWdlUHJveHkmLCBXVEY6OkNvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4mJik7CiAKICAgICAvLyBJUEM6Ok1lc3NhZ2VSZWNlaXZlciAoSW1wbGVtZW50ZWQg
YnkgZ2VuZXJhdGVkIGNvZGUgaW4gV2ViQXV0b21hdGlvblNlc3Npb25NZXNzYWdlUmVjZWl2ZXIu
Y3BwKS4KLSAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6
RGVjb2RlciYpIG92ZXJyaWRlOworICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25u
ZWN0aW9uJiwgSVBDOjpEZWNvZGVyJik7CiAKICAgICAvLyBDYWxsZWQgYnkgV2ViQXV0b21hdGlv
blNlc3Npb24gbWVzc2FnZXMuCiAgICAgdm9pZCBkaWRFdmFsdWF0ZUphdmFTY3JpcHRGdW5jdGlv
bih1aW50NjRfdCBjYWxsYmFja0lELCBjb25zdCBTdHJpbmcmIHJlc3VsdCwgY29uc3QgU3RyaW5n
JiBlcnJvclR5cGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21h
dGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbk1hY3Jvcy5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbk1hY3Jvcy5oCmluZGV4IDkzYWY1YWJj
NzA4YmQ1OThmMGY0MGJjYzI5NDg1MmEzNzA1Mjk3YWUuLjRkMzZkNjRmZDQwZjQzZjNlNzgxZDVl
NTk1YTNiZTg0Y2NlZWQ2NTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1
dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb25NYWNyb3MuaAorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uTWFjcm9zLmgKQEAgLTQ0
LDE0ICs0NCwxMiBAQAogLy8gQ29udmVuaWVuY2UgbWFjcm9zIGZvciBmaWxsaW5nIGluIHRoZSBl
cnJvciBzdHJpbmcgb2Ygc3luY2hyb25vdXMgY29tbWFuZHMgaW4gYmFpbG91dCBicmFuY2hlcy4K
ICNkZWZpbmUgU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUihlcnJvck5hbWUpIFwKIGRv
IHsgXAotICAgIGVycm9yU3RyaW5nID0gU1RSSU5HX0ZPUl9QUkVERUZJTkVEX0VSUk9SX05BTUUo
ZXJyb3JOYW1lKTsgXAotICAgIHJldHVybjsgXAorICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChT
VFJJTkdfRk9SX1BSRURFRklORURfRVJST1JfTkFNRShlcnJvck5hbWUpKTsgXAogfSB3aGlsZSAo
ZmFsc2UpCiAKICNkZWZpbmUgU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUl9BTkRfREVU
QUlMUyhlcnJvck5hbWUsIGRldGFpbHNTdHJpbmcpIFwKIGRvIHsgXAotICAgIGVycm9yU3RyaW5n
ID0gU1RSSU5HX0ZPUl9QUkVERUZJTkVEX0VSUk9SX05BTUVfQU5EX0RFVEFJTFMoZXJyb3JOYW1l
LCBkZXRhaWxzU3RyaW5nKTsgXAotICAgIHJldHVybjsgXAorICAgIHJldHVybiBtYWtlVW5leHBl
Y3RlZChTVFJJTkdfRk9SX1BSRURFRklORURfRVJST1JfTkFNRV9BTkRfREVUQUlMUyhlcnJvck5h
bWUsIGRldGFpbHNTdHJpbmcpKTsgXAogfSB3aGlsZSAoZmFsc2UpCiAKICNkZWZpbmUgQVNZTkNf
RkFJTF9XSVRIX1BSRURFRklORURfRVJST1IoZXJyb3JOYW1lKSBcCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL21hYy9XZWJBdXRvbWF0aW9uU2Vzc2lvbk1h
Yy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vbWFjL1dlYkF1dG9tYXRp
b25TZXNzaW9uTWFjLm1tCmluZGV4IDNjYWVjYzMzN2QwOTk3OTUzNGU3ZmNiZjVlMWUxMGJkODM1
Zjc2Y2QuLjlkYmYyZTA3ODdhYTk5NzA2YzZmMjkwNzU0YTkxMzkwYWJmMWY3MGQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vbWFjL1dlYkF1dG9tYXRpb25T
ZXNzaW9uTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vbWFj
L1dlYkF1dG9tYXRpb25TZXNzaW9uTWFjLm1tCkBAIC00NCw3ICs0NCw3IEBAIHVzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOwogCiAjcHJhZ21hIG1hcmsgQ29tbWFuZHMgZm9yICdQTEFURk9STShNQUMp
JwogCi12b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjppbnNwZWN0QnJvd3NpbmdDb250ZXh0KGNv
bnN0IFN0cmluZyYgaGFuZGxlLCBjb25zdCBib29sKiBvcHRpb25hbEVuYWJsZUF1dG9DYXB0dXJp
bmcsIFJlZjxJbnNwZWN0QnJvd3NpbmdDb250ZXh0Q2FsbGJhY2s+JiYgY2FsbGJhY2spCit2b2lk
IFdlYkF1dG9tYXRpb25TZXNzaW9uOjppbnNwZWN0QnJvd3NpbmdDb250ZXh0KGNvbnN0IEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYgaGFuZGxl
LCBPcHRpb25hbDxib29sPiYmIGVuYWJsZUF1dG9DYXB0dXJpbmcsIFJlZjxJbnNwZWN0QnJvd3Np
bmdDb250ZXh0Q2FsbGJhY2s+JiYgY2FsbGJhY2spCiB7CiAgICAgV2ViUGFnZVByb3h5KiBwYWdl
ID0gd2ViUGFnZVByb3h5Rm9ySGFuZGxlKGhhbmRsZSk7CiAgICAgaWYgKCFwYWdlKQpAQCAtNjAs
NyArNjAsNyBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjppbnNwZWN0QnJvd3NpbmdDb250
ZXh0KGNvbnN0IFN0cmluZyYgaGFuZGxlLCBjb25zdCBibwogICAgICAgICBwYWdlLT5pbnNwZWN0
b3IoKS0+c2hvdygpOwogCiAgICAgICAgIC8vIFN0YXJ0IGNvbGxlY3RpbmcgcHJvZmlsZSBpbmZv
cm1hdGlvbiBpbW1lZGlhdGVseSBzbyB0aGUgZW50aXJlIHNlc3Npb24gaXMgY2FwdHVyZWQuCi0g
ICAgICAgIGlmIChvcHRpb25hbEVuYWJsZUF1dG9DYXB0dXJpbmcgJiYgKm9wdGlvbmFsRW5hYmxl
QXV0b0NhcHR1cmluZykKKyAgICAgICAgaWYgKGVuYWJsZUF1dG9DYXB0dXJpbmcgJiYgKmVuYWJs
ZUF1dG9DYXB0dXJpbmcpCiAgICAgICAgICAgICBwYWdlLT5pbnNwZWN0b3IoKS0+dG9nZ2xlUGFn
ZVByb2ZpbGluZygpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0luc3BlY3Rvci9BZ2VudHMvSW5zcGVjdG9yQnJvd3NlckFnZW50LmNwcCBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9BZ2VudHMvSW5zcGVjdG9yQnJvd3NlckFnZW50LmNw
cAppbmRleCBjMWZmYTZjZjYxNDY2NmU0YzhiNWVjNWI0M2NjNjRmODA3MGU2NTk5Li5kZjRhMTBh
NDBmOGIwMmZjNWQ3NTA5ZTk2YzU5NGViYmM1YWM5ZjE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvQWdlbnRzL0luc3BlY3RvckJyb3dzZXJBZ2VudC5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL0FnZW50cy9JbnNwZWN0b3JC
cm93c2VyQWdlbnQuY3BwCkBAIC02MCwzNSArNjAsMzQgQEAgdm9pZCBJbnNwZWN0b3JCcm93c2Vy
QWdlbnQ6OmRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kUm91
dGUKIAogdm9pZCBJbnNwZWN0b3JCcm93c2VyQWdlbnQ6OndpbGxEZXN0cm95RnJvbnRlbmRBbmRC
YWNrZW5kKEluc3BlY3Rvcjo6RGlzY29ubmVjdFJlYXNvbikKIHsKLSAgICBFcnJvclN0cmluZyBp
Z25vcmVkOwotICAgIGRpc2FibGUoaWdub3JlZCk7CisgICAgZGlzYWJsZSgpOwogfQogCi12b2lk
IEluc3BlY3RvckJyb3dzZXJBZ2VudDo6ZW5hYmxlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZykK
K0luc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yQnJvd3Nl
ckFnZW50OjplbmFibGUoKQogewotICAgIGlmIChlbmFibGVkKCkpIHsKLSAgICAgICAgZXJyb3JT
dHJpbmcgPSAiQnJvd3NlciBkb21haW4gYWxyZWFkeSBlbmFibGVkIl9zOwotICAgICAgICByZXR1
cm47Ci0gICAgfQorICAgIGlmIChlbmFibGVkKCkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBl
Y3RlZCgiQnJvd3NlciBkb21haW4gYWxyZWFkeSBlbmFibGVkIl9zKTsKIAogICAgIG1faW5zcGVj
dGVkUGFnZS5pbnNwZWN0b3JDb250cm9sbGVyKCkuc2V0RW5hYmxlZEJyb3dzZXJBZ2VudCh0aGlz
KTsKIAogICAgIGF1dG8qIGluc3BlY3RvciA9IG1faW5zcGVjdGVkUGFnZS5pbnNwZWN0b3IoKTsK
ICAgICBBU1NFUlQoaW5zcGVjdG9yKTsKICAgICBtX2luc3BlY3RlZFBhZ2UuaW5zcGVjdG9yQ2xp
ZW50KCkuYnJvd3NlckRvbWFpbkVuYWJsZWQobV9pbnNwZWN0ZWRQYWdlLCAqaW5zcGVjdG9yKTsK
KworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yQnJvd3NlckFnZW50OjpkaXNh
YmxlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZykKK0luc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yQnJvd3NlckFnZW50OjpkaXNhYmxlKCkKIHsKLSAgICBp
ZiAoIWVuYWJsZWQoKSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJCcm93c2VyIGRvbWFpbiBh
bHJlYWR5IGRpc2FibGVkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghZW5h
YmxlZCgpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkJyb3dzZXIgZG9tYWluIGFs
cmVhZHkgZGlzYWJsZWQiX3MpOwogCiAgICAgbV9pbnNwZWN0ZWRQYWdlLmluc3BlY3RvckNvbnRy
b2xsZXIoKS5zZXRFbmFibGVkQnJvd3NlckFnZW50KG51bGxwdHIpOwogCiAgICAgaWYgKGF1dG8q
IGluc3BlY3RvciA9IG1faW5zcGVjdGVkUGFnZS5pbnNwZWN0b3IoKSkKICAgICAgICAgbV9pbnNw
ZWN0ZWRQYWdlLmluc3BlY3RvckNsaWVudCgpLmJyb3dzZXJEb21haW5EaXNhYmxlZChtX2luc3Bl
Y3RlZFBhZ2UsICppbnNwZWN0b3IpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAogdm9pZCBJbnNw
ZWN0b3JCcm93c2VyQWdlbnQ6OmV4dGVuc2lvbnNFbmFibGVkKEhhc2hNYXA8U3RyaW5nLCBTdHJp
bmc+JiYgZXh0ZW5zaW9uSURUb05hbWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9JbnNwZWN0b3IvQWdlbnRzL0luc3BlY3RvckJyb3dzZXJBZ2VudC5oIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL0FnZW50cy9JbnNwZWN0b3JCcm93c2VyQWdlbnQuaApp
bmRleCBhMTM5NTgzY2Q4ZDg0MjMyOWY0YjNmMzUyMWIzNjI0MGVhYjUzOTExLi4zMzFiZmFiYjU1
NzQ0ZWU5OGE3ZmYwZjdkYTc2OTUzMWFjNGM3Mjc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9JbnNwZWN0b3IvQWdlbnRzL0luc3BlY3RvckJyb3dzZXJBZ2VudC5oCisrKyBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9BZ2VudHMvSW5zcGVjdG9yQnJvd3Nl
ckFnZW50LmgKQEAgLTMzLDIzICszMywyMiBAQAogbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNz
IFdlYlBhZ2VQcm94eTsKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwogCiBjbGFzcyBJbnNw
ZWN0b3JCcm93c2VyQWdlbnQgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yQWdlbnRCYXNlLCBwdWJs
aWMgSW5zcGVjdG9yOjpCcm93c2VyQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKICAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShJbnNwZWN0b3JCcm93c2VyQWdlbnQpOwogICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIEluc3BlY3RvckJyb3dzZXJBZ2VudChXZWJQYWdl
QWdlbnRDb250ZXh0Jik7Ci0gICAgfkluc3BlY3RvckJyb3dzZXJBZ2VudCgpIG92ZXJyaWRlOwor
ICAgIH5JbnNwZWN0b3JCcm93c2VyQWdlbnQoKTsKICAgICBib29sIGVuYWJsZWQoKSBjb25zdDsK
IAogICAgIC8vIEluc3BlY3RvckFnZW50QmFzZQotICAgIHZvaWQgZGlkQ3JlYXRlRnJvbnRlbmRB
bmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRSb3V0ZXIqLCBJbnNwZWN0b3I6OkJhY2tlbmRE
aXNwYXRjaGVyKikgb3ZlcnJpZGU7Ci0gICAgdm9pZCB3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFj
a2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24pIG92ZXJyaWRlOworICAgIHZvaWQgZGlk
Q3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRSb3V0ZXIqLCBJbnNw
ZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyKik7CisgICAgdm9pZCB3aWxsRGVzdHJveUZyb250ZW5k
QW5kQmFja2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24pOwogCiAgICAgLy8gQnJvd3Nl
ckJhY2tlbmREaXNwYXRjaGVySGFuZGxlcgotICAgIHZvaWQgZW5hYmxlKEVycm9yU3RyaW5nJikg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBkaXNhYmxlKEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7CisgICAg
SW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBlbmFibGUoKTsKKyAgICBJ
bnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGRpc2FibGUoKTsKIAogICAg
IHZvaWQgZXh0ZW5zaW9uc0VuYWJsZWQoSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mJik7CiAgICAg
dm9pZCBleHRlbnNpb25zRGlzYWJsZWQoSGFzaFNldDxTdHJpbmc+JiYpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JD
bGllbnQuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL3NvY2tldC9SZW1v
dGVJbnNwZWN0b3JDbGllbnQuY3BwCmluZGV4IGZiZWU1Y2RmZjM4YjNjNzc5YTI2MjczOGM0MTk1
MTViNDQ1OGI5ZGQuLjVmNTE3ZjEwYTQ4NzcwZDljYjg5Y2Y4OGY5ZDYwMzc4YmJkNTJhZDQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9zb2NrZXQvUmVtb3Rl
SW5zcGVjdG9yQ2xpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0
b3Ivc29ja2V0L1JlbW90ZUluc3BlY3RvckNsaWVudC5jcHAKQEAgLTIwNiwyNSArMjA2LDM4IEBA
IHZvaWQgUmVtb3RlSW5zcGVjdG9yQ2xpZW50OjpzZXRUYXJnZXRMaXN0KGNvbnN0IEV2ZW50JiBl
dmVudCkKICAgICBpZiAoIWV2ZW50LmNvbm5lY3Rpb25JRCB8fCAhZXZlbnQubWVzc2FnZSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgUmVmUHRyPEpTT046OlZhbHVlPiBtZXNzYWdlVmFsdWU7Ci0g
ICAgaWYgKCFKU09OOjpWYWx1ZTo6cGFyc2VKU09OKGV2ZW50Lm1lc3NhZ2UudmFsdWUoKSwgbWVz
c2FnZVZhbHVlKSkKKyAgICBhdXRvIG1lc3NhZ2VWYWx1ZSA9IEpTT046OlZhbHVlOjpwYXJzZUpT
T04oZXZlbnQubWVzc2FnZS52YWx1ZSgpKTsKKyAgICBpZiAoIW1lc3NhZ2VWYWx1ZSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgUmVmUHRyPEpTT046OkFycmF5PiBtZXNzYWdlQXJyYXk7Ci0gICAg
aWYgKCFtZXNzYWdlVmFsdWUtPmFzQXJyYXkobWVzc2FnZUFycmF5KSkKKyAgICBhdXRvIG1lc3Nh
Z2VBcnJheSA9IG1lc3NhZ2VWYWx1ZS0+YXNBcnJheSgpOworICAgIGlmICghbWVzc2FnZUFycmF5
KQogICAgICAgICByZXR1cm47CiAKICAgICBWZWN0b3I8VGFyZ2V0PiB0YXJnZXRMaXN0OwogICAg
IGZvciAoYXV0byYgaXRlbVZhbHVlIDogKm1lc3NhZ2VBcnJheSkgewotICAgICAgICBSZWZQdHI8
SlNPTjo6T2JqZWN0PiBpdGVtT2JqZWN0OwotICAgICAgICBpZiAoIWl0ZW1WYWx1ZS0+YXNPYmpl
Y3QoaXRlbU9iamVjdCkpCisgICAgICAgIGF1dG8gaXRlbU9iamVjdCA9IGl0ZW1WYWx1ZS0+YXNP
YmplY3QoKTsKKyAgICAgICAgaWYgKCFpdGVtT2JqZWN0KQogICAgICAgICAgICAgY29udGludWU7
CiAKICAgICAgICAgVGFyZ2V0IHRhcmdldDsKLSAgICAgICAgaWYgKCFpdGVtT2JqZWN0LT5nZXRJ
bnRlZ2VyKCJ0YXJnZXRJRCJfcywgdGFyZ2V0LmlkKQotICAgICAgICAgICAgfHwgIWl0ZW1PYmpl
Y3QtPmdldFN0cmluZygibmFtZSJfcywgdGFyZ2V0Lm5hbWUpCi0gICAgICAgICAgICB8fCAhaXRl
bU9iamVjdC0+Z2V0U3RyaW5nKCJ1cmwiX3MsIHRhcmdldC51cmwpCi0gICAgICAgICAgICB8fCAh
aXRlbU9iamVjdC0+Z2V0U3RyaW5nKCJ0eXBlIl9zLCB0YXJnZXQudHlwZSkpCisKKyAgICAgICAg
YXV0byB0YXJnZXRJRCA9IGl0ZW1PYmplY3QtPmdldEludGVnZXIoInRhcmdldElEIl9zKTsKKyAg
ICAgICAgaWYgKCF0YXJnZXRJRCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIHRh
cmdldC50YXJnZXRJRCA9ICp0YXJnZXRJRDsKKworICAgICAgICB0YXJnZXQubmFtZSA9IGl0ZW1P
YmplY3QtPmdldFN0cmluZygibmFtZSJfcyk7CisgICAgICAgIGlmICghdGFyZ2V0Lm5hbWUpCisg
ICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICB0YXJnZXQudXJsID0gaXRlbU9iamVjdC0+
Z2V0U3RyaW5nKCJ1cmwiX3MpOworICAgICAgICBpZiAoIXRhcmdldC51cmwpCisgICAgICAgICAg
ICBjb250aW51ZTsKKworICAgICAgICB0YXJnZXQudHlwZSA9IGl0ZW1PYmplY3QtPmdldFN0cmlu
ZygidHlwZSJfcyk7CisgICAgICAgIGlmICghdGFyZ2V0LnR5cGUpCiAgICAgICAgICAgICBjb250
aW51ZTsKIAogICAgICAgICB0YXJnZXRMaXN0LmFwcGVuZChXVEZNb3ZlKHRhcmdldCkpOwpkaWZm
IC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IGU4OGI5ODFj
ODdjOWJhMmExYjg4NDJkODY5MzJhN2I2ZTNlYTUyZTIuLjZlNzg5MTM3ODdkZTk0ZWZjZWQ2MTVl
NTE0YzcwOWU3NTdiNDkxNjggMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29s
cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAyMC0wOS0wOCAgRGV2aW4gUm91c3NvICA8
ZHJvdXNzb0BhcHBsZS5jb20+CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogbW9kZXJuaXplIGdl
bmVyYXRlZCBiYWNrZW5kIHByb3RvY29sIGNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNjMwMgorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNjg1
NDc2NDk+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9KU09OVmFsdWUuY3BwOgorCiAyMDIwLTA5LTA0ICBB
bGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAKICAgICAgICAgTW92
ZSBQREYgaGVhZHMtdXAgZGlzcGxheSB0byBVSSBwcm9jZXNzIG9uIG1hY09TCmRpZmYgLS1naXQg
YS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9KU09OVmFsdWUuY3BwIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XVEYvSlNPTlZhbHVlLmNwcAppbmRleCA5MWVjNDFjM2I3ZDQxNjJk
MjNlYzQ1ZTRkYjM2MzdhOTNjZGNiYjQ1Li5jMzgwNjI3NjQ0ZGY2OTE2NjQwMTZmZGM2YzExNDkw
OGZhOGY4MjE1IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9KU09O
VmFsdWUuY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0pTT05WYWx1ZS5j
cHAKQEAgLTQyLDgyICs0Miw2OCBAQCBURVNUKEpTT05WYWx1ZSwgQ29uc3RydWN0KQogICAgIHsK
ICAgICAgICAgUmVmPEpTT046OlZhbHVlPiB2YWx1ZSA9IEpTT046OlZhbHVlOjpjcmVhdGUodHJ1
ZSk7CiAgICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlLT50eXBlKCkgPT0gSlNPTjo6VmFsdWU6OlR5
cGU6OkJvb2xlYW4pOwotICAgICAgICBib29sIGJvb2xlYW5WYWx1ZTsKLSAgICAgICAgRVhQRUNU
X1RSVUUodmFsdWUtPmFzQm9vbGVhbihib29sZWFuVmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX0VR
KGJvb2xlYW5WYWx1ZSwgdHJ1ZSk7CisgICAgICAgIGF1dG8gYm9vbGVhblZhbHVlID0gdmFsdWUt
PmFzQm9vbGVhbigpOworICAgICAgICBFWFBFQ1RfVFJVRShib29sZWFuVmFsdWUpOworICAgICAg
ICBFWFBFQ1RfRVEoKmJvb2xlYW5WYWx1ZSwgdHJ1ZSk7CiAKICAgICAgICAgdmFsdWUgPSBKU09O
OjpWYWx1ZTo6Y3JlYXRlKGZhbHNlKTsKICAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUtPnR5cGUo
KSA9PSBKU09OOjpWYWx1ZTo6VHlwZTo6Qm9vbGVhbik7Ci0gICAgICAgIEVYUEVDVF9UUlVFKHZh
bHVlLT5hc0Jvb2xlYW4oYm9vbGVhblZhbHVlKSk7Ci0gICAgICAgIEVYUEVDVF9FUShib29sZWFu
VmFsdWUsIGZhbHNlKTsKKyAgICAgICAgYm9vbGVhblZhbHVlID0gdmFsdWUtPmFzQm9vbGVhbigp
OworICAgICAgICBFWFBFQ1RfVFJVRShib29sZWFuVmFsdWUpOworICAgICAgICBFWFBFQ1RfRVEo
KmJvb2xlYW5WYWx1ZSwgZmFsc2UpOwogICAgIH0KIAogICAgIHsKICAgICAgICAgUmVmPEpTT046
OlZhbHVlPiB2YWx1ZSA9IEpTT046OlZhbHVlOjpjcmVhdGUoMSk7CiAgICAgICAgIEVYUEVDVF9U
UlVFKHZhbHVlLT50eXBlKCkgPT0gSlNPTjo6VmFsdWU6OlR5cGU6OkludGVnZXIpOwotICAgICAg
ICBpbnQgaW50ZWdlclZhbHVlOwotICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+YXNJbnRlZ2Vy
KGludGVnZXJWYWx1ZSkpOwotICAgICAgICBFWFBFQ1RfRVEoaW50ZWdlclZhbHVlLCAxKTsKKyAg
ICAgICAgYXV0byBpbnRlZ2VyVmFsdWUgPSB2YWx1ZS0+YXNJbnRlZ2VyKCk7CisgICAgICAgIEVY
UEVDVF9UUlVFKGludGVnZXJWYWx1ZSk7CisgICAgICAgIEVYUEVDVF9FUSgqaW50ZWdlclZhbHVl
LCAxKTsKIAotICAgICAgICAvLyBEb3VibGVzIGNhbiBiZSBnZXQgYXMgaW50ZWdlcnMsIGJ1dCBu
b3QgdGhlIG90aGVyIHdheSBhcm91bmQuCi0gICAgICAgIGZsb2F0IGZsb2F0VmFsdWU7Ci0gICAg
ICAgIEVYUEVDVF9GQUxTRSh2YWx1ZS0+YXNEb3VibGUoZmxvYXRWYWx1ZSkpOworICAgICAgICAv
LyBJbnRlZ2VycyBjYW4gYmUgZ2V0IGFzIGRvdWJsZXMuCisgICAgICAgIGF1dG8gZG91YmxlVmFs
dWUgPSB2YWx1ZS0+YXNEb3VibGUoKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoZG91YmxlVmFsdWUp
OworICAgICAgICBFWFBFQ1RfRVEoKmRvdWJsZVZhbHVlLCAxKTsKIAogICAgICAgICB2YWx1ZSA9
IEpTT046OlZhbHVlOjpjcmVhdGUoc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSk7Ci0g
ICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlLT5hc0ludGVnZXIoaW50ZWdlclZhbHVlKSk7Ci0gICAg
ICAgIEVYUEVDVF9FUShpbnRlZ2VyVmFsdWUsIHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4
KCkpOwotICAgICAgICB1bnNpZ25lZCB1bnNpZ25lZFZhbHVlOwotICAgICAgICBFWFBFQ1RfVFJV
RSh2YWx1ZS0+YXNJbnRlZ2VyKHVuc2lnbmVkVmFsdWUpKTsKLSAgICAgICAgbG9uZyBsb25nVmFs
dWU7Ci0gICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlLT5hc0ludGVnZXIobG9uZ1ZhbHVlKSk7Ci0g
ICAgICAgIGxvbmcgbG9uZyBsb25nTG9uZ1ZhbHVlOwotICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1
ZS0+YXNJbnRlZ2VyKGxvbmdMb25nVmFsdWUpKTsKLSAgICAgICAgdW5zaWduZWQgbG9uZyB1bnNp
Z25lZExvbmdWYWx1ZTsKLSAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUtPmFzSW50ZWdlcih1bnNp
Z25lZExvbmdWYWx1ZSkpOwotICAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgdW5zaWduZWRMb25n
TG9uZ1ZhbHVlOwotICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+YXNJbnRlZ2VyKHVuc2lnbmVk
TG9uZ0xvbmdWYWx1ZSkpOworICAgICAgICBpbnRlZ2VyVmFsdWUgPSB2YWx1ZS0+YXNJbnRlZ2Vy
KCk7CisgICAgICAgIEVYUEVDVF9UUlVFKGludGVnZXJWYWx1ZSk7CisgICAgICAgIEVYUEVDVF9F
USgqaW50ZWdlclZhbHVlLCBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpKTsKICAgICB9
CiAKICAgICB7CiAgICAgICAgIFJlZjxKU09OOjpWYWx1ZT4gdmFsdWUgPSBKU09OOjpWYWx1ZTo6
Y3JlYXRlKDEuNSk7CiAgICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlLT50eXBlKCkgPT0gSlNPTjo6
VmFsdWU6OlR5cGU6OkRvdWJsZSk7Ci0gICAgICAgIGRvdWJsZSBkb3VibGVWYWx1ZTsKLSAgICAg
ICAgRVhQRUNUX1RSVUUodmFsdWUtPmFzRG91YmxlKGRvdWJsZVZhbHVlKSk7Ci0gICAgICAgIEVY
UEVDVF9FUShkb3VibGVWYWx1ZSwgMS41KTsKIAotICAgICAgICBmbG9hdCBmbG9hdFZhbHVlOwot
ICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+YXNEb3VibGUoZmxvYXRWYWx1ZSkpOworICAgICAg
ICBhdXRvIGRvdWJsZVZhbHVlID0gdmFsdWUtPmFzRG91YmxlKCk7CisgICAgICAgIEVYUEVDVF9U
UlVFKGRvdWJsZVZhbHVlKTsKKyAgICAgICAgRVhQRUNUX0VRKCpkb3VibGVWYWx1ZSwgMS41KTsK
IAotICAgICAgICBpbnQgaW50ZWdlclZhbHVlOwotICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+
YXNJbnRlZ2VyKGludGVnZXJWYWx1ZSkpOwotICAgICAgICBFWFBFQ1RfRVEoaW50ZWdlclZhbHVl
LCBzdGF0aWNfY2FzdDxpbnQ+KDEuNSkpOwotCi0gICAgICAgIHVuc2lnbmVkIHVuc2lnbmVkVmFs
dWU7Ci0gICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlLT5hc0ludGVnZXIodW5zaWduZWRWYWx1ZSkp
OwotICAgICAgICBsb25nIGxvbmdWYWx1ZTsKLSAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUtPmFz
SW50ZWdlcihsb25nVmFsdWUpKTsKLSAgICAgICAgbG9uZyBsb25nIGxvbmdMb25nVmFsdWU7Ci0g
ICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlLT5hc0ludGVnZXIobG9uZ0xvbmdWYWx1ZSkpOwotICAg
ICAgICB1bnNpZ25lZCBsb25nIHVuc2lnbmVkTG9uZ1ZhbHVlOwotICAgICAgICBFWFBFQ1RfVFJV
RSh2YWx1ZS0+YXNJbnRlZ2VyKHVuc2lnbmVkTG9uZ1ZhbHVlKSk7Ci0gICAgICAgIHVuc2lnbmVk
IGxvbmcgbG9uZyB1bnNpZ25lZExvbmdMb25nVmFsdWU7Ci0gICAgICAgIEVYUEVDVF9UUlVFKHZh
bHVlLT5hc0ludGVnZXIodW5zaWduZWRMb25nTG9uZ1ZhbHVlKSk7CisgICAgICAgIC8vIERvdWJs
ZXMgY2FuIGJlIGdldCBhcyBpbnRlZ2Vycy4KKyAgICAgICAgYXV0byBpbnRlZ2VyVmFsdWUgPSB2
YWx1ZS0+YXNJbnRlZ2VyKCk7CisgICAgICAgIEVYUEVDVF9UUlVFKGludGVnZXJWYWx1ZSk7Cisg
ICAgICAgIEVYUEVDVF9FUSgqaW50ZWdlclZhbHVlLCBzdGF0aWNfY2FzdDxpbnQ+KDEuNSkpOwog
ICAgIH0KIAogICAgIHsKICAgICAgICAgUmVmPEpTT046OlZhbHVlPiB2YWx1ZSA9IEpTT046OlZh
bHVlOjpjcmVhdGUoIndlYmtpdCIpOwogICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+dHlwZSgp
ID09IEpTT046OlZhbHVlOjpUeXBlOjpTdHJpbmcpOwotICAgICAgICBTdHJpbmcgc3RyaW5nVmFs
dWU7Ci0gICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlLT5hc1N0cmluZyhzdHJpbmdWYWx1ZSkpOwor
ICAgICAgICBhdXRvIHN0cmluZ1ZhbHVlID0gdmFsdWUtPmFzU3RyaW5nKCk7CisgICAgICAgIEVY
UEVDVF9UUlVFKCEhc3RyaW5nVmFsdWUpOwogICAgICAgICBFWFBFQ1RfRVEoc3RyaW5nVmFsdWUs
ICJ3ZWJraXQiKTsKIAogICAgICAgICBTdHJpbmcgbnVsbFN0cmluZzsKICAgICAgICAgdmFsdWUg
PSBKU09OOjpWYWx1ZTo6Y3JlYXRlKG51bGxTdHJpbmcpOwotICAgICAgICBFWFBFQ1RfVFJVRSh2
YWx1ZS0+YXNTdHJpbmcoc3RyaW5nVmFsdWUpKTsKKyAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUt
PnR5cGUoKSA9PSBKU09OOjpWYWx1ZTo6VHlwZTo6U3RyaW5nKTsKKyAgICAgICAgc3RyaW5nVmFs
dWUgPSB2YWx1ZS0+YXNTdHJpbmcoKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKCEhc3RyaW5nVmFs
dWUpOwogICAgICAgICBFWFBFQ1RfVFJVRShzdHJpbmdWYWx1ZS5pc051bGwoKSk7CisgICAgICAg
IEVYUEVDVF9UUlVFKHN0cmluZ1ZhbHVlLmlzRW1wdHkoKSk7CiAKICAgICAgICAgdmFsdWUgPSBK
U09OOjpWYWx1ZTo6Y3JlYXRlKGVtcHR5U3RyaW5nKCkpOwotICAgICAgICBFWFBFQ1RfVFJVRSh2
YWx1ZS0+YXNTdHJpbmcoc3RyaW5nVmFsdWUpKTsKKyAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUt
PnR5cGUoKSA9PSBKU09OOjpWYWx1ZTo6VHlwZTo6U3RyaW5nKTsKKyAgICAgICAgc3RyaW5nVmFs
dWUgPSB2YWx1ZS0+YXNTdHJpbmcoKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoISFzdHJpbmdWYWx1
ZSk7CiAgICAgICAgIEVYUEVDVF9GQUxTRShzdHJpbmdWYWx1ZS5pc051bGwoKSk7CiAgICAgICAg
IEVYUEVDVF9UUlVFKHN0cmluZ1ZhbHVlLmlzRW1wdHkoKSk7CiAgICAgfQpAQCAtMTMxLDcgKzEx
Nyw3IEBAIFRFU1QoSlNPTlZhbHVlLCBDb25zdHJ1Y3QpCiAgICAgewogICAgICAgICBSZWY8SlNP
Tjo6T2JqZWN0PiBvYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICBFWFBF
Q1RfVFJVRShvYmplY3QtPnR5cGUoKSA9PSBKU09OOjpWYWx1ZTo6VHlwZTo6T2JqZWN0KTsKLSAg
ICAgICAgRVhQRUNUX0VRKG9iamVjdC0+c2l6ZSgpLCAwKTsKKyAgICAgICAgRVhQRUNUX0VRKG9i
amVjdC0+c2l6ZSgpLCAwVSk7CiAgICAgfQogCiAgICAgewpAQCAtMTU0LDQ4ICsxNDAsNDggQEAg
VEVTVChKU09OQXJyYXksIEJhc2ljKQogICAgIEVYUEVDVF9FUShhcnJheS0+bGVuZ3RoKCksIDJV
KTsKICAgICB2YWx1ZSA9IGFycmF5LT5nZXQoMSk7CiAgICAgRVhQRUNUX1RSVUUodmFsdWUtPnR5
cGUoKSA9PSBKU09OOjpWYWx1ZTo6VHlwZTo6Qm9vbGVhbik7Ci0gICAgYm9vbCBib29sZWFuVmFs
dWU7Ci0gICAgRVhQRUNUX1RSVUUodmFsdWUtPmFzQm9vbGVhbihib29sZWFuVmFsdWUpKTsKLSAg
ICBFWFBFQ1RfRVEoYm9vbGVhblZhbHVlLCB0cnVlKTsKKyAgICBhdXRvIGJvb2xlYW5WYWx1ZSA9
IHZhbHVlLT5hc0Jvb2xlYW4oKTsKKyAgICBFWFBFQ1RfVFJVRShib29sZWFuVmFsdWUpOworICAg
IEVYUEVDVF9FUSgqYm9vbGVhblZhbHVlLCB0cnVlKTsKIAogICAgIGFycmF5LT5wdXNoSW50ZWdl
cigxKTsKICAgICBFWFBFQ1RfRVEoYXJyYXktPmxlbmd0aCgpLCAzVSk7CiAgICAgdmFsdWUgPSBh
cnJheS0+Z2V0KDIpOwogICAgIEVYUEVDVF9UUlVFKHZhbHVlLT50eXBlKCkgPT0gSlNPTjo6VmFs
dWU6OlR5cGU6OkludGVnZXIpOwotICAgIGludCBpbnRlZ2VyVmFsdWU7Ci0gICAgRVhQRUNUX1RS
VUUodmFsdWUtPmFzSW50ZWdlcihpbnRlZ2VyVmFsdWUpKTsKLSAgICBFWFBFQ1RfRVEoaW50ZWdl
clZhbHVlLCAxKTsKKyAgICBhdXRvIGludGVnZXJWYWx1ZSA9IHZhbHVlLT5hc0ludGVnZXIoKTsK
KyAgICBFWFBFQ1RfVFJVRShpbnRlZ2VyVmFsdWUpOworICAgIEVYUEVDVF9FUSgqaW50ZWdlclZh
bHVlLCAxKTsKIAogICAgIGFycmF5LT5wdXNoRG91YmxlKDEuNSk7CiAgICAgRVhQRUNUX0VRKGFy
cmF5LT5sZW5ndGgoKSwgNFUpOwogICAgIHZhbHVlID0gYXJyYXktPmdldCgzKTsKICAgICBFWFBF
Q1RfVFJVRSh2YWx1ZS0+dHlwZSgpID09IEpTT046OlZhbHVlOjpUeXBlOjpEb3VibGUpOwotICAg
IGRvdWJsZSBkb3VibGVWYWx1ZTsKLSAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+YXNEb3VibGUoZG91
YmxlVmFsdWUpKTsKLSAgICBFWFBFQ1RfRVEoZG91YmxlVmFsdWUsIDEuNSk7CisgICAgYXV0byBk
b3VibGVWYWx1ZSA9IHZhbHVlLT5hc0RvdWJsZSgpOworICAgIEVYUEVDVF9UUlVFKGRvdWJsZVZh
bHVlKTsKKyAgICBFWFBFQ1RfRVEoKmRvdWJsZVZhbHVlLCAxLjUpOwogCiAgICAgYXJyYXktPnB1
c2hTdHJpbmcoIndlYmtpdCIpOwogICAgIEVYUEVDVF9FUShhcnJheS0+bGVuZ3RoKCksIDVVKTsK
ICAgICB2YWx1ZSA9IGFycmF5LT5nZXQoNCk7CiAgICAgRVhQRUNUX1RSVUUodmFsdWUtPnR5cGUo
KSA9PSBKU09OOjpWYWx1ZTo6VHlwZTo6U3RyaW5nKTsKLSAgICBTdHJpbmcgc3RyaW5nVmFsdWU7
Ci0gICAgRVhQRUNUX1RSVUUodmFsdWUtPmFzU3RyaW5nKHN0cmluZ1ZhbHVlKSk7CisgICAgYXV0
byBzdHJpbmdWYWx1ZSA9IHZhbHVlLT5hc1N0cmluZygpOworICAgIEVYUEVDVF9UUlVFKCEhc3Ry
aW5nVmFsdWUpOwogICAgIEVYUEVDVF9FUShzdHJpbmdWYWx1ZSwgIndlYmtpdCIpOwogCiAgICAg
YXJyYXktPnB1c2hPYmplY3QoSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSk7CiAgICAgRVhQRUNUX0VR
KGFycmF5LT5sZW5ndGgoKSwgNlUpOwogICAgIHZhbHVlID0gYXJyYXktPmdldCg1KTsKICAgICBF
WFBFQ1RfVFJVRSh2YWx1ZS0+dHlwZSgpID09IEpTT046OlZhbHVlOjpUeXBlOjpPYmplY3QpOwot
ICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG9iamVjdFZhbHVlOwotICAgIEVYUEVDVF9UUlVFKHZh
bHVlLT5hc09iamVjdChvYmplY3RWYWx1ZSkpOwotICAgIEVYUEVDVF9FUShvYmplY3RWYWx1ZS0+
c2l6ZSgpLCAwKTsKKyAgICBhdXRvIG9iamVjdFZhbHVlID0gdmFsdWUtPmFzT2JqZWN0KCk7Cisg
ICAgRVhQRUNUX1RSVUUob2JqZWN0VmFsdWUpOworICAgIEVYUEVDVF9FUShvYmplY3RWYWx1ZS0+
c2l6ZSgpLCAwVSk7CiAKICAgICBhcnJheS0+cHVzaEFycmF5KEpTT046OkFycmF5OjpjcmVhdGUo
KSk7CiAgICAgRVhQRUNUX0VRKGFycmF5LT5sZW5ndGgoKSwgN1UpOwogICAgIHZhbHVlID0gYXJy
YXktPmdldCg2KTsKICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+dHlwZSgpID09IEpTT046OlZhbHVl
OjpUeXBlOjpBcnJheSk7Ci0gICAgUmVmUHRyPEpTT046OkFycmF5PiBhcnJheVZhbHVlOwotICAg
IEVYUEVDVF9UUlVFKHZhbHVlLT5hc0FycmF5KGFycmF5VmFsdWUpKTsKKyAgICBhdXRvIGFycmF5
VmFsdWUgPSB2YWx1ZS0+YXNBcnJheSgpOworICAgIEVYUEVDVF9UUlVFKGFycmF5VmFsdWUpOwog
ICAgIEVYUEVDVF9FUShhcnJheVZhbHVlLT5sZW5ndGgoKSwgMFUpOwogCiAgICAgYXV0byBpdCA9
IGFycmF5LT5iZWdpbigpOwpAQCAtMjUxLDQwICsyMzcsNDAgQEAgVEVTVChKU09OQXJyYXlPZiwg
QmFzaWMpCiAgICAgRVhQRUNUX0VRKGFycmF5LT5sZW5ndGgoKSwgMlUpOwogICAgIHZhbHVlID0g
YXJyYXktPmdldCgxKTsKICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+dHlwZSgpID09IEpTT046OlZh
bHVlOjpUeXBlOjpJbnRlZ2VyKTsKLSAgICBpbnQgaW50ZWdlclZhbHVlOwotICAgIEVYUEVDVF9U
UlVFKHZhbHVlLT5hc0ludGVnZXIoaW50ZWdlclZhbHVlKSk7Ci0gICAgRVhQRUNUX0VRKGludGVn
ZXJWYWx1ZSwgMSk7CisgICAgYXV0byBpbnRlZ2VyVmFsdWUgPSB2YWx1ZS0+YXNJbnRlZ2VyKCk7
CisgICAgRVhQRUNUX1RSVUUoaW50ZWdlclZhbHVlKTsKKyAgICBFWFBFQ1RfRVEoKmludGVnZXJW
YWx1ZSwgMSk7CiAKICAgICBhcnJheS0+YWRkSXRlbSgxLjUpOwogICAgIEVYUEVDVF9FUShhcnJh
eS0+bGVuZ3RoKCksIDNVKTsKICAgICB2YWx1ZSA9IGFycmF5LT5nZXQoMik7CiAgICAgRVhQRUNU
X1RSVUUodmFsdWUtPnR5cGUoKSA9PSBKU09OOjpWYWx1ZTo6VHlwZTo6RG91YmxlKTsKLSAgICBk
b3VibGUgZG91YmxlVmFsdWU7Ci0gICAgRVhQRUNUX1RSVUUodmFsdWUtPmFzRG91YmxlKGRvdWJs
ZVZhbHVlKSk7Ci0gICAgRVhQRUNUX0VRKGRvdWJsZVZhbHVlLCAxLjUpOworICAgIGF1dG8gZG91
YmxlVmFsdWUgPSB2YWx1ZS0+YXNEb3VibGUoKTsKKyAgICBFWFBFQ1RfVFJVRShkb3VibGVWYWx1
ZSk7CisgICAgRVhQRUNUX0VRKCpkb3VibGVWYWx1ZSwgMS41KTsKIAogICAgIGFycmF5LT5hZGRJ
dGVtKCJ3ZWJraXQiKTsKICAgICBFWFBFQ1RfRVEoYXJyYXktPmxlbmd0aCgpLCA0VSk7CiAgICAg
dmFsdWUgPSBhcnJheS0+Z2V0KDMpOwogICAgIEVYUEVDVF9UUlVFKHZhbHVlLT50eXBlKCkgPT0g
SlNPTjo6VmFsdWU6OlR5cGU6OlN0cmluZyk7Ci0gICAgU3RyaW5nIHN0cmluZ1ZhbHVlOwotICAg
IEVYUEVDVF9UUlVFKHZhbHVlLT5hc1N0cmluZyhzdHJpbmdWYWx1ZSkpOworICAgIGF1dG8gc3Ry
aW5nVmFsdWUgPSB2YWx1ZS0+YXNTdHJpbmcoKTsKKyAgICBFWFBFQ1RfVFJVRSghIXN0cmluZ1Zh
bHVlKTsKICAgICBFWFBFQ1RfRVEoc3RyaW5nVmFsdWUsICJ3ZWJraXQiKTsKIAogICAgIGFycmF5
LT5hZGRJdGVtKEpTT046Ok9iamVjdDo6Y3JlYXRlKCkpOwogICAgIEVYUEVDVF9FUShhcnJheS0+
bGVuZ3RoKCksIDVVKTsKICAgICB2YWx1ZSA9IGFycmF5LT5nZXQoNCk7CiAgICAgRVhQRUNUX1RS
VUUodmFsdWUtPnR5cGUoKSA9PSBKU09OOjpWYWx1ZTo6VHlwZTo6T2JqZWN0KTsKLSAgICBSZWZQ
dHI8SlNPTjo6T2JqZWN0PiBvYmplY3RWYWx1ZTsKLSAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+YXNP
YmplY3Qob2JqZWN0VmFsdWUpKTsKLSAgICBFWFBFQ1RfRVEob2JqZWN0VmFsdWUtPnNpemUoKSwg
MCk7CisgICAgYXV0byBvYmplY3RWYWx1ZSA9IHZhbHVlLT5hc09iamVjdCgpOworICAgIEVYUEVD
VF9UUlVFKG9iamVjdFZhbHVlKTsKKyAgICBFWFBFQ1RfRVEob2JqZWN0VmFsdWUtPnNpemUoKSwg
MFUpOwogCiAgICAgYXJyYXktPmFkZEl0ZW0oSlNPTjo6QXJyYXk6OmNyZWF0ZSgpKTsKICAgICBF
WFBFQ1RfRVEoYXJyYXktPmxlbmd0aCgpLCA2VSk7CiAgICAgdmFsdWUgPSBhcnJheS0+Z2V0KDUp
OwogICAgIEVYUEVDVF9UUlVFKHZhbHVlLT50eXBlKCkgPT0gSlNPTjo6VmFsdWU6OlR5cGU6OkFy
cmF5KTsKLSAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IGFycmF5VmFsdWU7Ci0gICAgRVhQRUNUX1RS
VUUodmFsdWUtPmFzQXJyYXkoYXJyYXlWYWx1ZSkpOworICAgIGF1dG8gYXJyYXlWYWx1ZSA9IHZh
bHVlLT5hc0FycmF5KCk7CisgICAgRVhQRUNUX1RSVUUoYXJyYXlWYWx1ZSk7CiAgICAgRVhQRUNU
X0VRKGFycmF5VmFsdWUtPmxlbmd0aCgpLCAwVSk7CiAKICAgICBhdXRvIGl0ID0gYXJyYXktPmJl
Z2luKCk7CkBAIC0zMjQsNDUgKzMxMCw0NSBAQCBURVNUKEpTT05PYmplY3QsIEJhc2ljKQogICAg
IFJlZjxKU09OOjpPYmplY3Q+IG9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAKICAg
ICBvYmplY3QtPnNldFZhbHVlKCJudWxsIiwgSlNPTjo6VmFsdWU6Om51bGwoKSk7Ci0gICAgRVhQ
RUNUX0VRKG9iamVjdC0+c2l6ZSgpLCAxKTsKLSAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHZhbHVl
OwotICAgIEVYUEVDVF9UUlVFKG9iamVjdC0+Z2V0VmFsdWUoIm51bGwiLCB2YWx1ZSkpOworICAg
IEVYUEVDVF9FUShvYmplY3QtPnNpemUoKSwgMVUpOworICAgIGF1dG8gdmFsdWUgPSBvYmplY3Qt
PmdldFZhbHVlKCJudWxsIik7CisgICAgRVhQRUNUX1RSVUUodmFsdWUpOwogICAgIEVYUEVDVF9U
UlVFKHZhbHVlLT5pc051bGwoKSk7CiAKICAgICBvYmplY3QtPnNldEJvb2xlYW4oImJvb2xlYW4i
LCB0cnVlKTsKLSAgICBFWFBFQ1RfRVEob2JqZWN0LT5zaXplKCksIDIpOwotICAgIGJvb2wgYm9v
bGVhblZhbHVlOwotICAgIEVYUEVDVF9UUlVFKG9iamVjdC0+Z2V0Qm9vbGVhbigiYm9vbGVhbiIs
IGJvb2xlYW5WYWx1ZSkpOwotICAgIEVYUEVDVF9FUShib29sZWFuVmFsdWUsIHRydWUpOworICAg
IEVYUEVDVF9FUShvYmplY3QtPnNpemUoKSwgMlUpOworICAgIGF1dG8gYm9vbGVhblZhbHVlID0g
b2JqZWN0LT5nZXRCb29sZWFuKCJib29sZWFuIik7CisgICAgRVhQRUNUX1RSVUUoYm9vbGVhblZh
bHVlKTsKKyAgICBFWFBFQ1RfRVEoKmJvb2xlYW5WYWx1ZSwgdHJ1ZSk7CiAKICAgICBvYmplY3Qt
PnNldEludGVnZXIoImludGVnZXIiLCAxKTsKLSAgICBFWFBFQ1RfRVEob2JqZWN0LT5zaXplKCks
IDMpOwotICAgIGludCBpbnRlZ2VyVmFsdWU7Ci0gICAgRVhQRUNUX1RSVUUob2JqZWN0LT5nZXRJ
bnRlZ2VyKCJpbnRlZ2VyIiwgaW50ZWdlclZhbHVlKSk7Ci0gICAgRVhQRUNUX0VRKGludGVnZXJW
YWx1ZSwgMSk7CisgICAgRVhQRUNUX0VRKG9iamVjdC0+c2l6ZSgpLCAzVSk7CisgICAgYXV0byBp
bnRlZ2VyVmFsdWUgPSBvYmplY3QtPmdldEludGVnZXIoImludGVnZXIiKTsKKyAgICBFWFBFQ1Rf
VFJVRShpbnRlZ2VyVmFsdWUpOworICAgIEVYUEVDVF9FUSgqaW50ZWdlclZhbHVlLCAxKTsKIAog
ICAgIG9iamVjdC0+c2V0RG91YmxlKCJkb3VibGUiLCAxLjUpOwotICAgIEVYUEVDVF9FUShvYmpl
Y3QtPnNpemUoKSwgNCk7Ci0gICAgZG91YmxlIGRvdWJsZVZhbHVlOwotICAgIEVYUEVDVF9UUlVF
KG9iamVjdC0+Z2V0RG91YmxlKCJkb3VibGUiLCBkb3VibGVWYWx1ZSkpOwotICAgIEVYUEVDVF9F
UShkb3VibGVWYWx1ZSwgMS41KTsKKyAgICBFWFBFQ1RfRVEob2JqZWN0LT5zaXplKCksIDRVKTsK
KyAgICBhdXRvIGRvdWJsZVZhbHVlID0gb2JqZWN0LT5nZXREb3VibGUoImRvdWJsZSIpOworICAg
IEVYUEVDVF9UUlVFKGRvdWJsZVZhbHVlKTsKKyAgICBFWFBFQ1RfRVEoKmRvdWJsZVZhbHVlLCAx
LjUpOwogCiAgICAgb2JqZWN0LT5zZXRTdHJpbmcoInN0cmluZyIsICJ3ZWJraXQiKTsKLSAgICBF
WFBFQ1RfRVEob2JqZWN0LT5zaXplKCksIDUpOwotICAgIFN0cmluZyBzdHJpbmdWYWx1ZTsKLSAg
ICBFWFBFQ1RfVFJVRShvYmplY3QtPmdldFN0cmluZygic3RyaW5nIiwgc3RyaW5nVmFsdWUpKTsK
KyAgICBFWFBFQ1RfRVEob2JqZWN0LT5zaXplKCksIDVVKTsKKyAgICBhdXRvIHN0cmluZ1ZhbHVl
ID0gb2JqZWN0LT5nZXRTdHJpbmcoInN0cmluZyIpOworICAgIEVYUEVDVF9UUlVFKCEhc3RyaW5n
VmFsdWUpOwogICAgIEVYUEVDVF9FUShzdHJpbmdWYWx1ZSwgIndlYmtpdCIpOwogCiAgICAgb2Jq
ZWN0LT5zZXRPYmplY3QoIm9iamVjdCIsIEpTT046Ok9iamVjdDo6Y3JlYXRlKCkpOwotICAgIEVY
UEVDVF9FUShvYmplY3QtPnNpemUoKSwgNik7Ci0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gb2Jq
ZWN0VmFsdWU7Ci0gICAgRVhQRUNUX1RSVUUob2JqZWN0LT5nZXRPYmplY3QoIm9iamVjdCIsIG9i
amVjdFZhbHVlKSk7Ci0gICAgRVhQRUNUX0VRKG9iamVjdFZhbHVlLT5zaXplKCksIDApOworICAg
IEVYUEVDVF9FUShvYmplY3QtPnNpemUoKSwgNlUpOworICAgIGF1dG8gb2JqZWN0VmFsdWUgPSBv
YmplY3QtPmdldE9iamVjdCgib2JqZWN0Iik7CisgICAgRVhQRUNUX1RSVUUob2JqZWN0VmFsdWUp
OworICAgIEVYUEVDVF9FUShvYmplY3RWYWx1ZS0+c2l6ZSgpLCAwVSk7CiAKICAgICBvYmplY3Qt
PnNldEFycmF5KCJhcnJheSIsIEpTT046OkFycmF5OjpjcmVhdGUoKSk7Ci0gICAgRVhQRUNUX0VR
KG9iamVjdC0+c2l6ZSgpLCA3KTsKLSAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IGFycmF5VmFsdWU7
Ci0gICAgRVhQRUNUX1RSVUUob2JqZWN0LT5nZXRBcnJheSgiYXJyYXkiLCBhcnJheVZhbHVlKSk7
CisgICAgRVhQRUNUX0VRKG9iamVjdC0+c2l6ZSgpLCA3VSk7CisgICAgYXV0byBhcnJheVZhbHVl
ID0gb2JqZWN0LT5nZXRBcnJheSgiYXJyYXkiKTsKKyAgICBFWFBFQ1RfVFJVRShhcnJheVZhbHVl
KTsKICAgICBFWFBFQ1RfRVEoYXJyYXlWYWx1ZS0+bGVuZ3RoKCksIDBVKTsKIAogICAgIFZlY3Rv
cjxjb25zdCBjaGFyKj4ga2V5cyA9IHsgIm51bGwiLCAiYm9vbGVhbiIsICJpbnRlZ2VyIiwgImRv
dWJsZSIsICJzdHJpbmciLCAib2JqZWN0IiwgImFycmF5IiB9OwpAQCAtMzc2LDMxICszNjIsMzEg
QEAgVEVTVChKU09OT2JqZWN0LCBCYXNpYykKICAgICBFWFBFQ1RfVFJVRShrZXlzLmlzRW1wdHko
KSk7CiAKICAgICBvYmplY3QtPnJlbW92ZSgibnVsbCIpOwotICAgIEVYUEVDVF9FUShvYmplY3Qt
PnNpemUoKSwgNik7CisgICAgRVhQRUNUX0VRKG9iamVjdC0+c2l6ZSgpLCA2VSk7CiAgICAgRVhQ
RUNUX1RSVUUob2JqZWN0LT5maW5kKCJudWxsIikgPT0gb2JqZWN0LT5lbmQoKSk7CiAKICAgICBv
YmplY3QtPnJlbW92ZSgiYm9vbGVhbiIpOwotICAgIEVYUEVDVF9FUShvYmplY3QtPnNpemUoKSwg
NSk7CisgICAgRVhQRUNUX0VRKG9iamVjdC0+c2l6ZSgpLCA1VSk7CiAgICAgRVhQRUNUX1RSVUUo
b2JqZWN0LT5maW5kKCJib29sZWFuIikgPT0gb2JqZWN0LT5lbmQoKSk7CiAKICAgICBvYmplY3Qt
PnJlbW92ZSgiaW50ZWdlciIpOwotICAgIEVYUEVDVF9FUShvYmplY3QtPnNpemUoKSwgNCk7Cisg
ICAgRVhQRUNUX0VRKG9iamVjdC0+c2l6ZSgpLCA0VSk7CiAgICAgRVhQRUNUX1RSVUUob2JqZWN0
LT5maW5kKCJpbnRlZ2VyIikgPT0gb2JqZWN0LT5lbmQoKSk7CiAKICAgICBvYmplY3QtPnJlbW92
ZSgiZG91YmxlIik7Ci0gICAgRVhQRUNUX0VRKG9iamVjdC0+c2l6ZSgpLCAzKTsKKyAgICBFWFBF
Q1RfRVEob2JqZWN0LT5zaXplKCksIDNVKTsKICAgICBFWFBFQ1RfVFJVRShvYmplY3QtPmZpbmQo
ImRvdWJsZSIpID09IG9iamVjdC0+ZW5kKCkpOwogCiAgICAgb2JqZWN0LT5yZW1vdmUoInN0cmlu
ZyIpOwotICAgIEVYUEVDVF9FUShvYmplY3QtPnNpemUoKSwgMik7CisgICAgRVhQRUNUX0VRKG9i
amVjdC0+c2l6ZSgpLCAyVSk7CiAgICAgRVhQRUNUX1RSVUUob2JqZWN0LT5maW5kKCJzdHJpbmci
KSA9PSBvYmplY3QtPmVuZCgpKTsKIAogICAgIG9iamVjdC0+cmVtb3ZlKCJvYmplY3QiKTsKLSAg
ICBFWFBFQ1RfRVEob2JqZWN0LT5zaXplKCksIDEpOworICAgIEVYUEVDVF9FUShvYmplY3QtPnNp
emUoKSwgMVUpOwogICAgIEVYUEVDVF9UUlVFKG9iamVjdC0+ZmluZCgib2JqZWN0IikgPT0gb2Jq
ZWN0LT5lbmQoKSk7CiAKICAgICBvYmplY3QtPnJlbW92ZSgiYXJyYXkiKTsKLSAgICBFWFBFQ1Rf
RVEob2JqZWN0LT5zaXplKCksIDApOworICAgIEVYUEVDVF9FUShvYmplY3QtPnNpemUoKSwgMFUp
OwogICAgIEVYUEVDVF9UUlVFKG9iamVjdC0+ZmluZCgiYXJyYXkiKSA9PSBvYmplY3QtPmVuZCgp
KTsKIH0KIApAQCAtNDc5LDIwMSArNDY1LDIwNCBAQCBURVNUKEpTT05WYWx1ZSwgVG9KU09OU3Ry
aW5nKQogVEVTVChKU09OVmFsdWUsIFBhcnNlSlNPTikKIHsKICAgICB7Ci0gICAgICAgIFJlZlB0
cjxKU09OOjpWYWx1ZT4gdmFsdWU7Ci0gICAgICAgIEVYUEVDVF9UUlVFKEpTT046OlZhbHVlOjpw
YXJzZUpTT04oIm51bGwiLCB2YWx1ZSkpOworICAgICAgICBhdXRvIHZhbHVlID0gSlNPTjo6VmFs
dWU6OnBhcnNlSlNPTigibnVsbCIpOworICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1ZSk7CiAgICAg
ICAgIEVYUEVDVF9UUlVFKHZhbHVlLT5pc051bGwoKSk7CiAgICAgfQogCiAgICAgewotICAgICAg
ICBSZWZQdHI8SlNPTjo6VmFsdWU+IHZhbHVlOwotICAgICAgICBFWFBFQ1RfVFJVRShKU09OOjpW
YWx1ZTo6cGFyc2VKU09OKCJ0cnVlIiwgdmFsdWUpKTsKKyAgICAgICAgYXV0byB2YWx1ZSA9IEpT
T046OlZhbHVlOjpwYXJzZUpTT04oInRydWUiKTsKKyAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUp
OwogICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+dHlwZSgpID09IEpTT046OlZhbHVlOjpUeXBl
OjpCb29sZWFuKTsKLSAgICAgICAgYm9vbCBib29sZWFuVmFsdWU7Ci0gICAgICAgIEVYUEVDVF9U
UlVFKHZhbHVlLT5hc0Jvb2xlYW4oYm9vbGVhblZhbHVlKSk7Ci0gICAgICAgIEVYUEVDVF9FUShi
b29sZWFuVmFsdWUsIHRydWUpOworICAgICAgICBhdXRvIGJvb2xlYW5WYWx1ZSA9IHZhbHVlLT5h
c0Jvb2xlYW4oKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoYm9vbGVhblZhbHVlKTsKKyAgICAgICAg
RVhQRUNUX0VRKCpib29sZWFuVmFsdWUsIHRydWUpOwogCi0gICAgICAgIEVYUEVDVF9UUlVFKEpT
T046OlZhbHVlOjpwYXJzZUpTT04oImZhbHNlIiwgdmFsdWUpKTsKKyAgICAgICAgdmFsdWUgPSBK
U09OOjpWYWx1ZTo6cGFyc2VKU09OKCJmYWxzZSIpOworICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1
ZSk7CiAgICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlLT50eXBlKCkgPT0gSlNPTjo6VmFsdWU6OlR5
cGU6OkJvb2xlYW4pOwotICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+YXNCb29sZWFuKGJvb2xl
YW5WYWx1ZSkpOwotICAgICAgICBFWFBFQ1RfRVEoYm9vbGVhblZhbHVlLCBmYWxzZSk7CisgICAg
ICAgIGJvb2xlYW5WYWx1ZSA9IHZhbHVlLT5hc0Jvb2xlYW4oKTsKKyAgICAgICAgRVhQRUNUX1RS
VUUoYm9vbGVhblZhbHVlKTsKKyAgICAgICAgRVhQRUNUX0VRKCpib29sZWFuVmFsdWUsIGZhbHNl
KTsKICAgICB9CiAKICAgICB7Ci0gICAgICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gdmFsdWU7Ci0g
ICAgICAgIEVYUEVDVF9UUlVFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIjEiLCB2YWx1ZSkpOwor
ICAgICAgICBhdXRvIHZhbHVlID0gSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiMSIpOworICAgICAg
ICBFWFBFQ1RfVFJVRSh2YWx1ZSk7CiAgICAgICAgIC8vIE51bWJlcnMgYXJlIGFsd2F5cyBwYXJz
ZWQgYXMgZG91YmxlLgogICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+dHlwZSgpID09IEpTT046
OlZhbHVlOjpUeXBlOjpEb3VibGUpOwotICAgICAgICBkb3VibGUgZG91YmxlVmFsdWU7Ci0gICAg
ICAgIEVYUEVDVF9UUlVFKHZhbHVlLT5hc0RvdWJsZShkb3VibGVWYWx1ZSkpOwotICAgICAgICBF
WFBFQ1RfRVEoZG91YmxlVmFsdWUsIDEuMCk7CisgICAgICAgIGF1dG8gZG91YmxlVmFsdWUgPSB2
YWx1ZS0+YXNEb3VibGUoKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoZG91YmxlVmFsdWUpOworICAg
ICAgICBFWFBFQ1RfRVEoKmRvdWJsZVZhbHVlLCAxLjApOwogCi0gICAgICAgIEVYUEVDVF9UUlVF
KEpTT046OlZhbHVlOjpwYXJzZUpTT04oIjEuNSIsIHZhbHVlKSk7CisgICAgICAgIHZhbHVlID0g
SlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiMS41Iik7CisgICAgICAgIEVYUEVDVF9UUlVFKHZhbHVl
KTsKICAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUtPnR5cGUoKSA9PSBKU09OOjpWYWx1ZTo6VHlw
ZTo6RG91YmxlKTsKLSAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUtPmFzRG91YmxlKGRvdWJsZVZh
bHVlKSk7Ci0gICAgICAgIEVYUEVDVF9FUShkb3VibGVWYWx1ZSwgMS41KTsKKyAgICAgICAgZG91
YmxlVmFsdWUgPSB2YWx1ZS0+YXNEb3VibGUoKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoZG91Ymxl
VmFsdWUpOworICAgICAgICBFWFBFQ1RfRVEoKmRvdWJsZVZhbHVlLCAxLjUpOwogICAgIH0KIAog
ICAgIHsKLSAgICAgICAgUmVmUHRyPEpTT046OlZhbHVlPiB2YWx1ZTsKLSAgICAgICAgRVhQRUNU
X1RSVUUoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiXCJzdHJpbmdcIiIsIHZhbHVlKSk7CisgICAg
ICAgIGF1dG8gdmFsdWUgPSBKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJcInN0cmluZ1wiIik7Cisg
ICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlKTsKICAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUtPnR5
cGUoKSA9PSBKU09OOjpWYWx1ZTo6VHlwZTo6U3RyaW5nKTsKLSAgICAgICAgU3RyaW5nIHN0cmlu
Z1ZhbHVlOwotICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+YXNTdHJpbmcoc3RyaW5nVmFsdWUp
KTsKKyAgICAgICAgYXV0byBzdHJpbmdWYWx1ZSA9IHZhbHVlLT5hc1N0cmluZygpOworICAgICAg
ICBFWFBFQ1RfVFJVRSghIXN0cmluZ1ZhbHVlKTsKICAgICAgICAgRVhQRUNUX0VRKHN0cmluZ1Zh
bHVlLCAic3RyaW5nIik7CiAgICAgfQogCiAgICAgewotICAgICAgICBSZWZQdHI8SlNPTjo6VmFs
dWU+IHZhbHVlOwotICAgICAgICBFWFBFQ1RfVFJVRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJb
XSIsIHZhbHVlKSk7CisgICAgICAgIGF1dG8gdmFsdWUgPSBKU09OOjpWYWx1ZTo6cGFyc2VKU09O
KCJbXSIpOworICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1ZSk7CiAgICAgICAgIEVYUEVDVF9UUlVF
KHZhbHVlLT50eXBlKCkgPT0gSlNPTjo6VmFsdWU6OlR5cGU6OkFycmF5KTsKLSAgICAgICAgUmVm
UHRyPEpTT046OkFycmF5PiBhcnJheVZhbHVlOwotICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+
YXNBcnJheShhcnJheVZhbHVlKSk7CisgICAgICAgIGF1dG8gYXJyYXlWYWx1ZSA9IHZhbHVlLT5h
c0FycmF5KCk7CisgICAgICAgIEVYUEVDVF9UUlVFKGFycmF5VmFsdWUpOwogICAgICAgICBFWFBF
Q1RfRVEoYXJyYXlWYWx1ZS0+bGVuZ3RoKCksIDBVKTsKIAotICAgICAgICBFWFBFQ1RfVFJVRShK
U09OOjpWYWx1ZTo6cGFyc2VKU09OKCJbbnVsbCwgMSAsMi41LFt7XCJmb29cIjpcImJhclwifSx7
XCJiYXpcIjpmYWxzZX1dLFwid2Via2l0XCJdIiwgdmFsdWUpKTsKKyAgICAgICAgdmFsdWUgPSBK
U09OOjpWYWx1ZTo6cGFyc2VKU09OKCJbbnVsbCwgMSAsMi41LFt7XCJmb29cIjpcImJhclwifSx7
XCJiYXpcIjpmYWxzZX1dLFwid2Via2l0XCJdIik7CisgICAgICAgIEVYUEVDVF9UUlVFKHZhbHVl
KTsKICAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUtPnR5cGUoKSA9PSBKU09OOjpWYWx1ZTo6VHlw
ZTo6QXJyYXkpOwotICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+YXNBcnJheShhcnJheVZhbHVl
KSk7CisgICAgICAgIGFycmF5VmFsdWUgPSB2YWx1ZS0+YXNBcnJheSgpOworICAgICAgICBFWFBF
Q1RfVFJVRShhcnJheVZhbHVlKTsKICAgICAgICAgRVhQRUNUX0VRKGFycmF5VmFsdWUtPmxlbmd0
aCgpLCA1VSk7CiAgICAgICAgIGF1dG8gaXQgPSBhcnJheVZhbHVlLT5iZWdpbigpOwotICAgICAg
ICBSZWZQdHI8SlNPTjo6VmFsdWU+IGl0ZW1WYWx1ZSA9IGl0LT5nZXQoKTsKLSAgICAgICAgRVhQ
RUNUX1RSVUUoaXRlbVZhbHVlLT50eXBlKCkgPT0gSlNPTjo6VmFsdWU6OlR5cGU6Ok51bGwpOwor
ICAgICAgICBFWFBFQ1RfVFJVRSgoKml0KS0+dHlwZSgpID09IEpTT046OlZhbHVlOjpUeXBlOjpO
dWxsKTsKICAgICAgICAgKytpdDsKICAgICAgICAgRVhQRUNUX0ZBTFNFKGl0ID09IGFycmF5VmFs
dWUtPmVuZCgpKTsKIAotICAgICAgICBpdGVtVmFsdWUgPSBpdC0+Z2V0KCk7Ci0gICAgICAgIEVY
UEVDVF9UUlVFKGl0ZW1WYWx1ZS0+dHlwZSgpID09IEpTT046OlZhbHVlOjpUeXBlOjpEb3VibGUp
OwotICAgICAgICBpbnQgaW50ZWdlclZhbHVlOwotICAgICAgICBFWFBFQ1RfVFJVRShpdGVtVmFs
dWUtPmFzSW50ZWdlcihpbnRlZ2VyVmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX0VRKGludGVnZXJW
YWx1ZSwgMSk7CisgICAgICAgIEVYUEVDVF9UUlVFKCgqaXQpLT50eXBlKCkgPT0gSlNPTjo6VmFs
dWU6OlR5cGU6OkRvdWJsZSk7CisgICAgICAgIGF1dG8gaW50ZWdlclZhbHVlID0gKCppdCktPmFz
SW50ZWdlcigpOworICAgICAgICBFWFBFQ1RfVFJVRShpbnRlZ2VyVmFsdWUpOworICAgICAgICBF
WFBFQ1RfRVEoKmludGVnZXJWYWx1ZSwgMSk7CiAgICAgICAgICsraXQ7CiAgICAgICAgIEVYUEVD
VF9GQUxTRShpdCA9PSBhcnJheVZhbHVlLT5lbmQoKSk7CiAKLSAgICAgICAgaXRlbVZhbHVlID0g
aXQtPmdldCgpOwotICAgICAgICBFWFBFQ1RfVFJVRShpdGVtVmFsdWUtPnR5cGUoKSA9PSBKU09O
OjpWYWx1ZTo6VHlwZTo6RG91YmxlKTsKLSAgICAgICAgZG91YmxlIGRvdWJsZVZhbHVlOwotICAg
ICAgICBFWFBFQ1RfVFJVRShpdGVtVmFsdWUtPmFzRG91YmxlKGRvdWJsZVZhbHVlKSk7Ci0gICAg
ICAgIEVYUEVDVF9FUShkb3VibGVWYWx1ZSwgMi41KTsKKyAgICAgICAgRVhQRUNUX1RSVUUoKCpp
dCktPnR5cGUoKSA9PSBKU09OOjpWYWx1ZTo6VHlwZTo6RG91YmxlKTsKKyAgICAgICAgYXV0byBk
b3VibGVWYWx1ZSA9ICgqaXQpLT5hc0RvdWJsZSgpOworICAgICAgICBFWFBFQ1RfVFJVRShkb3Vi
bGVWYWx1ZSk7CisgICAgICAgIEVYUEVDVF9FUSgqZG91YmxlVmFsdWUsIDIuNSk7CiAgICAgICAg
ICsraXQ7CiAgICAgICAgIEVYUEVDVF9GQUxTRShpdCA9PSBhcnJheVZhbHVlLT5lbmQoKSk7CiAK
LSAgICAgICAgaXRlbVZhbHVlID0gaXQtPmdldCgpOwotICAgICAgICBFWFBFQ1RfVFJVRShpdGVt
VmFsdWUtPnR5cGUoKSA9PSBKU09OOjpWYWx1ZTo6VHlwZTo6QXJyYXkpOwotICAgICAgICBSZWZQ
dHI8SlNPTjo6QXJyYXk+IHN1YkFycmF5VmFsdWU7Ci0gICAgICAgIEVYUEVDVF9UUlVFKGl0ZW1W
YWx1ZS0+YXNBcnJheShzdWJBcnJheVZhbHVlKSk7CisgICAgICAgIEVYUEVDVF9UUlVFKCgqaXQp
LT50eXBlKCkgPT0gSlNPTjo6VmFsdWU6OlR5cGU6OkFycmF5KTsKKyAgICAgICAgYXV0byBzdWJB
cnJheVZhbHVlID0gKCppdCktPmFzQXJyYXkoKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoc3ViQXJy
YXlWYWx1ZSk7CiAgICAgICAgIEVYUEVDVF9FUShzdWJBcnJheVZhbHVlLT5sZW5ndGgoKSwgMlUp
OwotICAgICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IG9iamVjdFZhbHVlID0gc3ViQXJyYXlWYWx1
ZS0+Z2V0KDApOworICAgICAgICBhdXRvIG9iamVjdFZhbHVlID0gc3ViQXJyYXlWYWx1ZS0+Z2V0
KDApOwogICAgICAgICBFWFBFQ1RfVFJVRShvYmplY3RWYWx1ZS0+dHlwZSgpID09IEpTT046OlZh
bHVlOjpUeXBlOjpPYmplY3QpOwotICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBvYmplY3Q7
Ci0gICAgICAgIEVYUEVDVF9UUlVFKG9iamVjdFZhbHVlLT5hc09iamVjdChvYmplY3QpKTsKLSAg
ICAgICAgRVhQRUNUX0VRKG9iamVjdC0+c2l6ZSgpLCAxKTsKLSAgICAgICAgU3RyaW5nIHN0cmlu
Z1ZhbHVlOwotICAgICAgICBFWFBFQ1RfVFJVRShvYmplY3QtPmdldFN0cmluZygiZm9vIiwgc3Ry
aW5nVmFsdWUpKTsKKyAgICAgICAgYXV0byBvYmplY3QgPSBvYmplY3RWYWx1ZS0+YXNPYmplY3Qo
KTsKKyAgICAgICAgRVhQRUNUX1RSVUUob2JqZWN0KTsKKyAgICAgICAgRVhQRUNUX0VRKG9iamVj
dC0+c2l6ZSgpLCAxVSk7CisgICAgICAgIGF1dG8gc3RyaW5nVmFsdWUgPSBvYmplY3QtPmdldFN0
cmluZygiZm9vIik7CisgICAgICAgIEVYUEVDVF9UUlVFKCEhc3RyaW5nVmFsdWUpOwogICAgICAg
ICBFWFBFQ1RfRVEoc3RyaW5nVmFsdWUsICJiYXIiKTsKICAgICAgICAgb2JqZWN0VmFsdWUgPSBz
dWJBcnJheVZhbHVlLT5nZXQoMSk7CiAgICAgICAgIEVYUEVDVF9UUlVFKG9iamVjdFZhbHVlLT50
eXBlKCkgPT0gSlNPTjo6VmFsdWU6OlR5cGU6Ok9iamVjdCk7Ci0gICAgICAgIEVYUEVDVF9UUlVF
KG9iamVjdFZhbHVlLT5hc09iamVjdChvYmplY3QpKTsKLSAgICAgICAgRVhQRUNUX0VRKG9iamVj
dC0+c2l6ZSgpLCAxKTsKLSAgICAgICAgYm9vbCBib29sZWFuVmFsdWU7Ci0gICAgICAgIEVYUEVD
VF9UUlVFKG9iamVjdC0+Z2V0Qm9vbGVhbigiYmF6IiwgYm9vbGVhblZhbHVlKSk7Ci0gICAgICAg
IEVYUEVDVF9FUShib29sZWFuVmFsdWUsIGZhbHNlKTsKKyAgICAgICAgb2JqZWN0ID1vYmplY3RW
YWx1ZS0+YXNPYmplY3QoKTsKKyAgICAgICAgRVhQRUNUX1RSVUUob2JqZWN0KTsKKyAgICAgICAg
RVhQRUNUX0VRKG9iamVjdC0+c2l6ZSgpLCAxVSk7CisgICAgICAgIGF1dG8gYm9vbGVhblZhbHVl
ID0gb2JqZWN0LT5nZXRCb29sZWFuKCJiYXoiKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoYm9vbGVh
blZhbHVlKTsKKyAgICAgICAgRVhQRUNUX0VRKCpib29sZWFuVmFsdWUsIGZhbHNlKTsKICAgICAg
ICAgKytpdDsKICAgICAgICAgRVhQRUNUX0ZBTFNFKGl0ID09IGFycmF5VmFsdWUtPmVuZCgpKTsK
IAotICAgICAgICBpdGVtVmFsdWUgPSBpdC0+Z2V0KCk7Ci0gICAgICAgIEVYUEVDVF9UUlVFKGl0
ZW1WYWx1ZS0+dHlwZSgpID09IEpTT046OlZhbHVlOjpUeXBlOjpTdHJpbmcpOwotICAgICAgICBF
WFBFQ1RfVFJVRShpdGVtVmFsdWUtPmFzU3RyaW5nKHN0cmluZ1ZhbHVlKSk7CisgICAgICAgIEVY
UEVDVF9UUlVFKCgqaXQpLT50eXBlKCkgPT0gSlNPTjo6VmFsdWU6OlR5cGU6OlN0cmluZyk7Cisg
ICAgICAgIHN0cmluZ1ZhbHVlID0gKCppdCktPmFzU3RyaW5nKCk7CisgICAgICAgIEVYUEVDVF9U
UlVFKCEhc3RyaW5nVmFsdWUpOwogICAgICAgICBFWFBFQ1RfRVEoc3RyaW5nVmFsdWUsICJ3ZWJr
aXQiKTsKICAgICAgICAgKytpdDsKICAgICAgICAgRVhQRUNUX1RSVUUoaXQgPT0gYXJyYXlWYWx1
ZS0+ZW5kKCkpOwogICAgIH0KIAogICAgIHsKLSAgICAgICAgUmVmUHRyPEpTT046OlZhbHVlPiB2
YWx1ZTsKLSAgICAgICAgRVhQRUNUX1RSVUUoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigie30iLCB2
YWx1ZSkpOworICAgICAgICBhdXRvIHZhbHVlID0gSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigie30i
KTsKKyAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUpOwogICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1
ZS0+dHlwZSgpID09IEpTT046OlZhbHVlOjpUeXBlOjpPYmplY3QpOwotICAgICAgICBSZWZQdHI8
SlNPTjo6T2JqZWN0PiBvYmplY3RWYWx1ZTsKLSAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUtPmFz
T2JqZWN0KG9iamVjdFZhbHVlKSk7Ci0gICAgICAgIEVYUEVDVF9FUShvYmplY3RWYWx1ZS0+c2l6
ZSgpLCAwKTsKKyAgICAgICAgYXV0byBvYmplY3RWYWx1ZSA9IHZhbHVlLT5hc09iamVjdCgpOwor
ICAgICAgICBFWFBFQ1RfVFJVRShvYmplY3RWYWx1ZSk7CisgICAgICAgIEVYUEVDVF9FUShvYmpl
Y3RWYWx1ZS0+c2l6ZSgpLCAwVSk7CiAKLSAgICAgICAgRVhQRUNUX1RSVUUoSlNPTjo6VmFsdWU6
OnBhcnNlSlNPTigie1wiZm9vXCI6IFwiYmFyXCIsIFwiYmF6XCI6IHtcInN1YlwiOltudWxsLGZh
bHNlXX19IiwgdmFsdWUpKTsKKyAgICAgICAgdmFsdWUgPSBKU09OOjpWYWx1ZTo6cGFyc2VKU09O
KCJ7XCJmb29cIjogXCJiYXJcIiwgXCJiYXpcIjoge1wic3ViXCI6W251bGwsZmFsc2VdfX0iKTsK
KyAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUpOwogICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+
dHlwZSgpID09IEpTT046OlZhbHVlOjpUeXBlOjpPYmplY3QpOwotICAgICAgICBFWFBFQ1RfVFJV
RSh2YWx1ZS0+YXNPYmplY3Qob2JqZWN0VmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX0VRKG9iamVj
dFZhbHVlLT5zaXplKCksIDIpOworICAgICAgICBvYmplY3RWYWx1ZSA9IHZhbHVlLT5hc09iamVj
dCgpOworICAgICAgICBFWFBFQ1RfVFJVRShvYmplY3RWYWx1ZSk7CisgICAgICAgIEVYUEVDVF9F
UShvYmplY3RWYWx1ZS0+c2l6ZSgpLCAyVSk7CiAKLSAgICAgICAgU3RyaW5nIHN0cmluZ1ZhbHVl
OwotICAgICAgICBFWFBFQ1RfVFJVRShvYmplY3RWYWx1ZS0+Z2V0U3RyaW5nKCJmb28iLCBzdHJp
bmdWYWx1ZSkpOworICAgICAgICBhdXRvIHN0cmluZ1ZhbHVlID0gb2JqZWN0VmFsdWUtPmdldFN0
cmluZygiZm9vIik7CisgICAgICAgIEVYUEVDVF9UUlVFKCEhc3RyaW5nVmFsdWUpOwogICAgICAg
ICBFWFBFQ1RfRVEoc3RyaW5nVmFsdWUsICJiYXIiKTsKIAotICAgICAgICBSZWZQdHI8SlNPTjo6
T2JqZWN0PiBvYmplY3Q7Ci0gICAgICAgIEVYUEVDVF9UUlVFKG9iamVjdFZhbHVlLT5nZXRPYmpl
Y3QoImJheiIsIG9iamVjdCkpOwotICAgICAgICBFWFBFQ1RfRVEob2JqZWN0LT5zaXplKCksIDEp
OwotICAgICAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IGFycmF5OwotICAgICAgICBFWFBFQ1RfVFJV
RShvYmplY3QtPmdldEFycmF5KCJzdWIiLCBhcnJheSkpOworICAgICAgICBhdXRvIG9iamVjdCA9
IG9iamVjdFZhbHVlLT5nZXRPYmplY3QoImJheiIpOworICAgICAgICBFWFBFQ1RfVFJVRShvYmpl
Y3QpOworICAgICAgICBFWFBFQ1RfRVEob2JqZWN0LT5zaXplKCksIDFVKTsKKyAgICAgICAgYXV0
byBhcnJheSA9IG9iamVjdC0+Z2V0QXJyYXkoInN1YiIpOworICAgICAgICBFWFBFQ1RfVFJVRShh
cnJheSk7CiAgICAgICAgIEVYUEVDVF9FUShhcnJheS0+bGVuZ3RoKCksIDJVKTsKICAgICB9CiAK
ICAgICB7Ci0gICAgICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gdmFsdWU7Ci0gICAgICAgIEVYUEVD
VF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCIsIiwgdmFsdWUpKTsKLSAgICAgICAgRVhQ
RUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIlwiZm9vIiwgdmFsdWUpKTsKLSAgICAg
ICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oImZvb1wiIiwgdmFsdWUpKTsK
LSAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIlRyVWUiLCB2YWx1
ZSkpOwotICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiRmFsc2Ui
LCB2YWx1ZSkpOwotICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigi
MS5kIiwgdmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpT
T04oIlsxLF0iLCB2YWx1ZSkpOwotICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBh
cnNlSlNPTigiMSwyXSIsIHZhbHVlKSk7Ci0gICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1
ZTo6cGFyc2VKU09OKCJbMSwyIiwgdmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046
OlZhbHVlOjpwYXJzZUpTT04oIlsxIDJdIiwgdmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX0ZBTFNF
KEpTT046OlZhbHVlOjpwYXJzZUpTT04oIlsxLDJdXSIsIHZhbHVlKSk7Ci0gICAgICAgIEVYUEVD
VF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJbMSwyXSwiLCB2YWx1ZSkpOwotICAgICAg
ICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigie2ZvbzpcImJhclwifSIsIHZh
bHVlKSk7Ci0gICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJ7XCJm
b29cIjpiYXJ9IiwgdmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpw
YXJzZUpTT04oIntcImZvbzpcImJhclwifSIsIHZhbHVlKSk7Ci0gICAgICAgIEVYUEVDVF9GQUxT
RShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJ7Zm9vXCI6XCJiYXJcIn0iLCB2YWx1ZSkpOwotICAg
ICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigie3tcImZvb1wiOlwiYmFy
XCJ9fSIsIHZhbHVlKSk7Ci0gICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VK
U09OKCJ7XCJmb29cIjpcImJhclwifSwiLCB2YWx1ZSkpOwotICAgICAgICBFWFBFQ1RfRkFMU0Uo
SlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiW3tcImZvb1wiOlwiYmFyXCJ9LHtcImJhelwiOmZhbHNl
fSxdIiwgdmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpT
T04oIlt7XCJmb29cIjp7XCJiYXpcIjpmYWxzZX1dIiwgdmFsdWUpKTsKKyAgICAgICAgRVhQRUNU
X0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIiwiKSk7CisgICAgICAgIEVYUEVDVF9GQUxT
RShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJcImZvbyIpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNF
KEpTT046OlZhbHVlOjpwYXJzZUpTT04oImZvb1wiIikpOworICAgICAgICBFWFBFQ1RfRkFMU0Uo
SlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiVHJVZSIpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKEpT
T046OlZhbHVlOjpwYXJzZUpTT04oIkZhbHNlIikpOworICAgICAgICBFWFBFQ1RfRkFMU0UoSlNP
Tjo6VmFsdWU6OnBhcnNlSlNPTigiMS5kIikpOworICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6
VmFsdWU6OnBhcnNlSlNPTigiWzEsXSIpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZh
bHVlOjpwYXJzZUpTT04oIjEsMl0iKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1
ZTo6cGFyc2VKU09OKCJbMSwyIikpOworICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6
OnBhcnNlSlNPTigiWzEgMl0iKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6
cGFyc2VKU09OKCJbMSwyXV0iKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6
cGFyc2VKU09OKCJbMSwyXSwiKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6
cGFyc2VKU09OKCJ7Zm9vOlwiYmFyXCJ9IikpOworICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6
VmFsdWU6OnBhcnNlSlNPTigie1wiZm9vXCI6YmFyfSIpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNF
KEpTT046OlZhbHVlOjpwYXJzZUpTT04oIntcImZvbzpcImJhclwifSIpKTsKKyAgICAgICAgRVhQ
RUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIntmb29cIjpcImJhclwifSIpKTsKKyAg
ICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oInt7XCJmb29cIjpcImJh
clwifX0iKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJ7
XCJmb29cIjpcImJhclwifSwiKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6
cGFyc2VKU09OKCJbe1wiZm9vXCI6XCJiYXJcIn0se1wiYmF6XCI6ZmFsc2V9LF0iKSk7CisgICAg
ICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJbe1wiZm9vXCI6e1wiYmF6
XCI6ZmFsc2V9XSIpKTsKICAgICB9CiAKICAgICB7Ci0gICAgICAgIFJlZlB0cjxKU09OOjpWYWx1
ZT4gdmFsdWU7Ci0gICAgICAgIEVYUEVDVF9UUlVFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIiBc
ImZvb1wiIFxuIiwgdmFsdWUpKTsKLSAgICAgICAgU3RyaW5nIHN0cmluZ1ZhbHVlOwotICAgICAg
ICBFWFBFQ1RfVFJVRSh2YWx1ZS0+YXNTdHJpbmcoc3RyaW5nVmFsdWUpKTsKKyAgICAgICAgYXV0
byB2YWx1ZSA9IEpTT046OlZhbHVlOjpwYXJzZUpTT04oIiBcImZvb1wiIFxuIik7CisgICAgICAg
IEVYUEVDVF9UUlVFKHZhbHVlKTsKKyAgICAgICAgYXV0byBzdHJpbmdWYWx1ZSA9IHZhbHVlLT5h
c1N0cmluZygpOworICAgICAgICBFWFBFQ1RfVFJVRSghIXN0cmluZ1ZhbHVlKTsKICAgICAgICAg
RVhQRUNUX0VRKCJmb28iLCBzdHJpbmdWYWx1ZSk7CiAgICAgfQogCiAgICAgewotICAgICAgICBS
ZWZQdHI8SlNPTjo6VmFsdWU+IHZhbHVlOwotICAgICAgICBFWFBFQ1RfVFJVRShKU09OOjpWYWx1
ZTo6cGFyc2VKU09OKCIgMSIsIHZhbHVlKSk7Ci0gICAgICAgIEVYUEVDVF9UUlVFKEpTT046OlZh
bHVlOjpwYXJzZUpTT04oIlx0MSIsIHZhbHVlKSk7Ci0gICAgICAgIEVYUEVDVF9UUlVFKEpTT046
OlZhbHVlOjpwYXJzZUpTT04oIlxuMSIsIHZhbHVlKSk7Ci0gICAgICAgIEVYUEVDVF9UUlVFKEpT
T046OlZhbHVlOjpwYXJzZUpTT04oIjEgIiwgdmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX1RSVUUo
SlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiMVx0IiwgdmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX1RS
VUUoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiMVxuIiwgdmFsdWUpKTsKLSAgICAgICAgRVhQRUNU
X1RSVUUoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiIDEgIiwgdmFsdWUpKTsKLSAgICAgICAgRVhQ
RUNUX1RSVUUoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiIHt9ICIsIHZhbHVlKSk7Ci0gICAgICAg
IEVYUEVDVF9UUlVFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIiBbXSAiLCB2YWx1ZSkpOwotICAg
ICAgICBFWFBFQ1RfVFJVRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJcIlxceEZGXCIiLCB2YWx1
ZSkpOwotICAgICAgICBFWFBFQ1RfVFJVRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJcIlxcdTEy
MzRcIiIsIHZhbHVlKSk7CisgICAgICAgIEVYUEVDVF9UUlVFKEpTT046OlZhbHVlOjpwYXJzZUpT
T04oIiAxIikpOworICAgICAgICBFWFBFQ1RfVFJVRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJc
dDEiKSk7CisgICAgICAgIEVYUEVDVF9UUlVFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIlxuMSIp
KTsKKyAgICAgICAgRVhQRUNUX1RSVUUoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiMSAiKSk7Cisg
ICAgICAgIEVYUEVDVF9UUlVFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIjFcdCIpKTsKKyAgICAg
ICAgRVhQRUNUX1RSVUUoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiMVxuIikpOworICAgICAgICBF
WFBFQ1RfVFJVRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCIgMSAiKSk7CisgICAgICAgIEVYUEVD
VF9UUlVFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIiB7fSAiKSk7CisgICAgICAgIEVYUEVDVF9U
UlVFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIiBbXSAiKSk7CisgICAgICAgIEVYUEVDVF9UUlVF
KEpTT046OlZhbHVlOjpwYXJzZUpTT04oIlwiXFx4RkZcIiIpKTsKKyAgICAgICAgRVhQRUNUX1RS
VUUoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiXCJcXHUxMjM0XCIiKSk7CiAKLSAgICAgICAgRVhQ
RUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIjEgMSIsIHZhbHVlKSk7Ci0gICAgICAg
IEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJ7fSB7fSIsIHZhbHVlKSk7Ci0g
ICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJbXSBbXSIsIHZhbHVl
KSk7Ci0gICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJcIlxcIiwg
dmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIlwi
XFx4RiIsIHZhbHVlKSk7Ci0gICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VK
U09OKCJcIlxceEZcIiIsIHZhbHVlKSk7Ci0gICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1
ZTo6cGFyc2VKU09OKCJcIlxceEYgXCIiLCB2YWx1ZSkpOwotICAgICAgICBFWFBFQ1RfRkFMU0Uo
SlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiXCJcXHUxIiwgdmFsdWUpKTsKLSAgICAgICAgRVhQRUNU
X0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIlwiXFx1MVwiIiwgdmFsdWUpKTsKLSAgICAg
ICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIlwiXFx1MSAgIFwiIiwgdmFs
dWUpKTsKLSAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIlwiXFx1
MTIiLCB2YWx1ZSkpOwotICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNP
TigiXCJcXHUxMlwiIiwgdmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVl
OjpwYXJzZUpTT04oIlwiXFx1MTIgIFwiIiwgdmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX0ZBTFNF
KEpTT046OlZhbHVlOjpwYXJzZUpTT04oIlwiXFx1MTIzIiwgdmFsdWUpKTsKLSAgICAgICAgRVhQ
RUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIlwiXFx1MTIzXCIiLCB2YWx1ZSkpOwot
ICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiXCJcXHUxMjMgXCIi
LCB2YWx1ZSkpOworICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigi
MSAxIikpOworICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigie30g
e30iKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJbXSBb
XSIpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIlwiXFwi
KSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJcIlxceEYi
KSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJcIlxceEZc
IiIpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIlwiXFx4
RiBcIiIpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIlwi
XFx1MSIpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIlwi
XFx1MVwiIikpOworICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigi
XCJcXHUxICAgXCIiKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VK
U09OKCJcIlxcdTEyIikpOworICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNl
SlNPTigiXCJcXHUxMlwiIikpOworICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBh
cnNlSlNPTigiXCJcXHUxMiAgXCIiKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1
ZTo6cGFyc2VKU09OKCJcIlxcdTEyMyIpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZh
bHVlOjpwYXJzZUpTT04oIlwiXFx1MTIzXCIiKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShKU09O
OjpWYWx1ZTo6cGFyc2VKU09OKCJcIlxcdTEyMyBcIiIpKTsKICAgICB9CiB9CiAKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA3
YmVhOGFkMGQzMTYzZGNiMzU5ZWNiYmViYTc1ZDE2OWJiNDM3NDc2Li40NDIyMzRmMzc4MDdhYjNi
MmEyODNmMzg0MTM1OGViZmQzZGZkYzdjIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMjAtMDkt
MDggIERldmluIFJvdXNzbyAgPGRyb3Vzc29AYXBwbGUuY29tPgorCisgICAgICAgIFdlYiBJbnNw
ZWN0b3I6IG1vZGVybml6ZSBnZW5lcmF0ZWQgYmFja2VuZCBwcm90b2NvbCBjb2RlCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTYzMDIKKyAgICAgICAg
PHJkYXI6Ly9wcm9ibGVtLzY4NTQ3NjQ5PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogaW5zcGVjdG9yL2NhbnZhcy9yZXF1ZXN0U2hhZGVyU291cmNl
LWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBpbnNwZWN0b3IvY2FudmFzL3VwZGF0ZVNoYWRlci1l
eHBlY3RlZC50eHQ6CisgICAgICAgICogaW5zcGVjdG9yL2NvbnNvbGUvd2ViY29yZS1sb2dnaW5n
LWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBpbnNwZWN0b3IvZG9tL2hpZ2hsaWdodFF1YWQtZXhw
ZWN0ZWQudHh0OgorICAgICAgICAqIGluc3BlY3Rvci93b3JrZXIvZG9tLWRlYnVnZ2VyLWRvbS1i
cmVha3BvaW50cy1leHBlY3RlZC50eHQ6CisKIDIwMjAtMDktMDUgIERldmluIFJvdXNzbyAgPGRy
b3Vzc29AYXBwbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IGFsbG93IERPTSBicmVh
a3BvaW50cyB0byBiZSBjb25maWd1cmVkCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0
b3IvY2FudmFzL3JlcXVlc3RTaGFkZXJTb3VyY2UtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMv
aW5zcGVjdG9yL2NhbnZhcy9yZXF1ZXN0U2hhZGVyU291cmNlLWV4cGVjdGVkLnR4dAppbmRleCBm
OTJmNDk1ZDM4Y2U2ODUzYTNhNTM1NGFhNTgxM2UwYmM0Y2UxNTVlLi4yYzVkY2U4MzIwNDEyNWQw
YWUwZDBiZmEwYzIzMzk4ZTY1M2Q0ZDMxIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbnNwZWN0
b3IvY2FudmFzL3JlcXVlc3RTaGFkZXJTb3VyY2UtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRl
c3RzL2luc3BlY3Rvci9jYW52YXMvcmVxdWVzdFNoYWRlclNvdXJjZS1leHBlY3RlZC50eHQKQEAg
LTQsNSArNCw1IEBAIENvbW1vbiB0ZXN0cyBmb3IgQ2FudmFzLnJlcXVlc3RTaGFkZXJTb3VyY2Ug
Y29tbWFuZC4KID09IFJ1bm5pbmcgdGVzdCBzdWl0ZTogQ2FudmFzLnJlcXVlc3RTaGFkZXJTb3Vy
Y2UKIC0tIFJ1bm5pbmcgdGVzdCBjYXNlOiBDYW52YXMucmVxdWVzdFNoYWRlclNvdXJjZS5Qcm9n
cmFtSWQuSW52YWxpZAogUEFTUzogU2hvdWxkIHByb2R1Y2UgYW4gZXJyb3IuCi1FcnJvcjogTWlz
c2luZyBwcm9ncmFtIGZvciBnaXZlbiBwcm9ncmFtSWQKK0Vycm9yOiBVbmtub3duIHNoYWRlclR5
cGU6IElOVkFMSURfU0hBREVSX1RZUEUKIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVj
dG9yL2NhbnZhcy91cGRhdGVTaGFkZXItZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaW5zcGVj
dG9yL2NhbnZhcy91cGRhdGVTaGFkZXItZXhwZWN0ZWQudHh0CmluZGV4IGNlMzdlOGU2YTljODAw
ZWZjOGY3ZjA2ZWNjNDUyY2E0MzFjYjEwMTcuLjM0ZjFiZDJmOTIxMjY5ZDcwZjYyYmI3ZmFmYjhk
MDI2NDM0MmE4MGIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9jYW52YXMvdXBk
YXRlU2hhZGVyLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvY2FudmFz
L3VwZGF0ZVNoYWRlci1leHBlY3RlZC50eHQKQEAgLTQsNSArNCw1IEBAIENvbW1vbiB0ZXN0cyBm
b3IgQ2FudmFzLnVwZGF0ZVNoYWRlciBjb21tYW5kLgogPT0gUnVubmluZyB0ZXN0IHN1aXRlOiBD
YW52YXMudXBkYXRlU2hhZGVyCiAtLSBSdW5uaW5nIHRlc3QgY2FzZTogQ2FudmFzLnVwZGF0ZVNo
YWRlci5Qcm9ncmFtSWQuSW52YWxpZAogUEFTUzogU2hvdWxkIHByb2R1Y2UgYW4gZXJyb3IuCi1F
cnJvcjogTWlzc2luZyBwcm9ncmFtIGZvciBnaXZlbiBwcm9ncmFtSWQKK0Vycm9yOiBVbmtub3du
IHNoYWRlclR5cGU6IElOVkFMSURfU0hBREVSX1RZUEUKIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvaW5zcGVjdG9yL2NvbnNvbGUvd2ViY29yZS1sb2dnaW5nLWV4cGVjdGVkLnR4dCBiL0xheW91
dFRlc3RzL2luc3BlY3Rvci9jb25zb2xlL3dlYmNvcmUtbG9nZ2luZy1leHBlY3RlZC50eHQKaW5k
ZXggNWI1MmUyYTcyY2E4MWM3MDJjYmJmNWZlNTljM2M2YjBmYTI3NTdhMy4uNTI4NGM5MjA2YmZl
ODkzYTI0MDAwZTdkNzFiYzgwYzVhNTM4ZGE0MCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW5z
cGVjdG9yL2NvbnNvbGUvd2ViY29yZS1sb2dnaW5nLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRU
ZXN0cy9pbnNwZWN0b3IvY29uc29sZS93ZWJjb3JlLWxvZ2dpbmctZXhwZWN0ZWQudHh0CkBAIC0x
NSw5ICsxNSwxMyBAQCBQQVNTOiBMb2cgY2hhbm5lbCBoYXMga25vd24gc291cmNlLgogUEFTUzog
TG9nIGNoYW5uZWwgZGlzYWJsZWQgYnkgZGVmYXVsdC4KIFBBU1M6IExvZyBjaGFubmVsIGhhcyBr
bm93biBzb3VyY2UuCiBQQVNTOiBMb2cgY2hhbm5lbCBkaXNhYmxlZCBieSBkZWZhdWx0LgorUEFT
UzogTG9nIGNoYW5uZWwgaGFzIGtub3duIHNvdXJjZS4KK1BBU1M6IExvZyBjaGFubmVsIGRpc2Fi
bGVkIGJ5IGRlZmF1bHQuCitQQVNTOiBMb2cgY2hhbm5lbCBoYXMga25vd24gc291cmNlLgorUEFT
UzogTG9nIGNoYW5uZWwgZGlzYWJsZWQgYnkgZGVmYXVsdC4KIAogLS0gUnVubmluZyB0ZXN0IGNh
c2U6IENvbnNvbGUuTG9nZ2luZy5JbnZhbGlkTGV2ZWwKLVBBU1M6IFVua25vd24gY2hhbm5lbExl
dmVsOiBET0VTX05PVF9FWElTVAorUEFTUzogVW5rbm93biBsZXZlbDogRE9FU19OT1RfRVhJU1QK
IAogLS0gUnVubmluZyB0ZXN0IGNhc2U6IENvbnNvbGUuTG9nZ2luZy5Ob0xvZ2dpbmcKIFBBU1M6
IE1lZGlhIGxvZ2dpbmcgZGlzYWJsZWQuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0
b3IvZG9tL2hpZ2hsaWdodFF1YWQtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9y
L2RvbS9oaWdobGlnaHRRdWFkLWV4cGVjdGVkLnR4dAppbmRleCBlNzgxMTdhM2E1MGZhYzk3NTli
NGYzNGUxZTgyNWNlMDdlZDExYTg1Li5hMWYzYjJmZTc2NTgyN2JmYjE0YWEyYmIwNmQwYWQ4NjQ2
NzQ2NjU1IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZG9tL2hpZ2hsaWdodFF1
YWQtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9kb20vaGlnaGxpZ2h0
UXVhZC1leHBlY3RlZC50eHQKQEAgLTMxLDUgKzMxLDUgQEAgSGlnaGxpZ2h0IFJlY3Q6IHsieCI6
LTEwLCJ5IjotMTAsIndpZHRoIjoxMDAwLCJoZWlnaHQiOjIwMDAsInRvcCI6LTEwLCJyaWdodCI6
OTkKIAogLS0gUnVubmluZyB0ZXN0IGNhc2U6IEJhZFF1YWRTaG91bGRFcnJvcgogUEFTUzogU2hv
dWxkIHByb2R1Y2UgYW4gZXJyb3IuCi1FcnJvcjogVW5leHBlY3RlZCBpbnZhbGlkIHF1YWRBcnJh
eQorRXJyb3I6IFVuZXhwZWN0ZWQgaW52YWxpZCBxdWFkCiAKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL2luc3BlY3Rvci93b3JrZXIvZG9tLWRlYnVnZ2VyLWRvbS1icmVha3BvaW50cy1leHBlY3Rl
ZC50eHQgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3Ivd29ya2VyL2RvbS1kZWJ1Z2dlci1kb20tYnJl
YWtwb2ludHMtZXhwZWN0ZWQudHh0CmluZGV4IGZhOGU3NjJhYTMyY2U1YWUxY2ZlODUxZjk3NDhi
MzUzOWY1MWUyNGYuLjNkZjIyODg2ZTMxMmJlZjU2OWIxMzk0YzRhNDRjODMzZWMzYjU2NDMgMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL2luc3BlY3Rvci93b3JrZXIvZG9tLWRlYnVnZ2VyLWRvbS1i
cmVha3BvaW50cy1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3dvcmtl
ci9kb20tZGVidWdnZXItZG9tLWJyZWFrcG9pbnRzLWV4cGVjdGVkLnR4dApAQCAtNCw5ICs0LDkg
QEAgVGVzdHMgZm9yIERPTSBicmVha3BvaW50IGZ1bmN0aW9uYWxpdHkgKERPTURlYnVnZ2VyKSBp
biBhIFdvcmtlci4KID09IFJ1bm5pbmcgdGVzdCBzdWl0ZTogV29ya2VyLkRPTURlYnVnZ2VyLkRP
TUJyZWFrcG9pbnQKIC0tIFJ1bm5pbmcgdGVzdCBjYXNlOiBXb3JrZXIuRE9NRGVidWdnZXIuRE9N
QnJlYWtwb2ludC5zZXRET01CcmVha3BvaW50CiBQQVNTOiBTaG91bGQgcHJvZHVjZSBhbiBleGNl
cHRpb24uCi1FcnJvcjogTm90IHN1cHBvcnRlZAorRXJyb3I6IFVua25vd24gdHlwZTogSU5WQUxJ
RAogCiAtLSBSdW5uaW5nIHRlc3QgY2FzZTogV29ya2VyLkRPTURlYnVnZ2VyLkRPTUJyZWFrcG9p
bnQucmVtb3ZlRE9NQnJlYWtwb2ludAogUEFTUzogU2hvdWxkIHByb2R1Y2UgYW4gZXhjZXB0aW9u
LgotRXJyb3I6IE5vdCBzdXBwb3J0ZWQKK0Vycm9yOiBVbmtub3duIHR5cGU6IElOVkFMSUQKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>408318</attachid>
            <date>2020-09-09 00:29:32 -0700</date>
            <delta_ts>2020-09-09 23:52:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216302-20200909002930.patch</filename>
            <type>text/plain</type>
            <size>1527153</size>
            <attacher name="Devin Rousso">hi</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDdhMGViNGY4YTlhMTBhMTkyZjg2MGNjMTc1MjI4
ZDNkMWRhMzQ0NDEuLmEwYzllMzA1YmRlOTRjNzVjMDZkNDQyMDM2N2U2MTdiNWZkYjU0YzQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzMCBAQAorMjAyMC0wOS0wOCAgRGV2
aW4gUm91c3NvICA8ZHJvdXNzb0BhcHBsZS5jb20+CisKKyAgICAgICAgV2ViIEluc3BlY3Rvcjog
bW9kZXJuaXplIGdlbmVyYXRlZCBiYWNrZW5kIHByb3RvY29sIGNvZGUKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNjMwMgorICAgICAgICA8cmRhcjov
L3Byb2JsZW0vNjg1NDc2NDk+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgUHJldmlvdXNseSwgdGhlIGluc3BlY3RvciBwcm90b2NvbCB3YXMgZXhwcmVz
c2VkIGluIGNvZGUgaW4gYSBzb21ld2hhdCBjb25mdXNpbmcgd2F5OgorICAgICAgICAgLSB0aGUg
ZXJyb3Igc3RyaW5nIHdhcyB0aGUgZmlyc3QgYXJndW1lbnQKKyAgICAgICAgIC0gcmVxdWlyZWQg
cGFyYW1ldGVycyB3ZXJlIGBUYCBvciBgY29uc3QgVCZgCisgICAgICAgICAtIG9wdGlvbmFsIHBh
cmFtZXRlcnMgd2VyZSBgY29uc3QgVCpgCisgICAgICAgICAtIGVudW0gcGFyYW1ldGVycyB3ZXJl
IHRoZSB1bmRlcmx5aW5nIHR5cGUgcmVxdWlyaW5nIHRoZSBiYWNrZW5kIGRpc3BhdGNoZXIgaGFu
ZGxlciB0bworICAgICAgICAgICBwcm9jZXNzIGl0IGluc3RlYWQgb2YgaXQgYmVpbmcgcHJlcHJv
Y2Vzc2VkCisgICAgICAgICAtIHJlcXVpcmVkIHJldHVybnMgd2VyZSBgVCZgCisgICAgICAgICAt
IG9wdGlvbmFsIHJldHVybnMgd2VyZSBgVCpgCisgICAgICAgIFRoaXMgZG9lc24ndCByZWFsbHkg
bWFrZSBmb3IgZWFzeS9vYnZpb3VzIHJlYWRpbmcgb2YgY29kZSBzaW5jZSB0aGUgb3JkZXIgb2Yg
YXJndW1lbnRzIGlzCisgICAgICAgIG5vdCB3ZWlyZCAoZS5nLiBlcnJvciBzdHJpbmcgZmlyc3Qp
LCBhbmQgdGhhdCB0aGVyZSBhcmUgcmVmZXJlbmNlcy9wb2ludGVycyB0byBwcmltaXRpdmUKKyAg
ICAgICAgdHlwZXMuCisKKyAgICAgICAgVGhpcyBwYXRjaCBjbGVhbnMgdXAgdGhlIGdlbmVyYXRl
ZCBpbnNwZWN0b3IgcHJvdG9jb2wgY29kZSB0byBiZToKKyAgICAgICAgIC0gcmVxdWlyZWQgcGFy
YW1ldGVycyBhcmUgYFRgIG9yIGBSZWY8VD4mJmAKKyAgICAgICAgIC0gb3B0aW9uYWwgcGFyYW1l
dGVycyBhcmUgYE9wdGlvbmFsPFQ+JiZgIG9yIGBSZWZQdHI8VD4mJmAKKyAgICAgICAgIC0gZW51
bSBwYXJhbWV0ZXJzIGFyZSBwcmVwcm9jZXNzZWQgYW5kIHBhc3NlZCB0byB0aGUgYmFja2VuZCBk
aXNwYXRjaGVyIGhhbmRsZXIgaWYgdmFsaWQKKyAgICAgICAgIC0gc3luY2hyb25vdXMgY29tbWFu
ZHMgcmV0dXJuIGBFeHBlY3RlZDxYLCBFcnJvclN0cmluZz5gIHVzaW5nIHRoZSBzYW1lIHR5cGVz
L3J1bGVzIGFib3ZlCisgICAgICAgICAgIHdoZXJlIGBYYCBpcyBlaXRoZXIgYSBzaW5nbGUgcmV0
dXJuIG9yIGEgYHN0ZDo6dHVwbGVgIG9mIG11bHRpcGxlIHJldHVybnMKKworICAgICAgICBUaGUg
b25lIGV4Y2VwdGlvbiB0byB0aGUgYWJvdmUgaXMgYFN0cmluZ2AsIHdoaWNoIGlzIGFscmVhZHkg
YSB0cmktc3RhdGUgb2YgYG51bGxTdHJpbmcoKWAsCisgICAgICAgIGBlbXB0eVN0cmluZygpYCwg
YW5kIHNvbWV0aGluZyBzZXQsIHNvIHRoZXJlJ3Mgbm8gbmVlZCB0byB1c2UgYE9wdGlvbmFsPFN0
cmluZz5gLgorCisgICAgICAgIEFsc28gdXNlIGBQcm90b2NvbGAgb2JqZWN0cy9gdHlwZWRlZnNg
IHdoZXJldmVyIHBvc3NpYmxlIHRvIGZ1cnRoZXIgcmVsYXRlIHRoZSBwcm90b2NvbAorICAgICAg
ICBKU09OIGFuZCB0aGUgYWN0dWFsIGJhY2tlbmQgZGlzcGF0Y2hlciBoYW5kbGVyIGltcGxlbWVu
dGF0aW9uLgorCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0b3Iu
cHk6CisgICAgICAgIChHZW5lcmF0b3IuZ2VuZXJhdGVfaW5jbHVkZXNfZnJvbV9lbnRyaWVzKToK
KyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2NwcF9nZW5lcmF0b3JfdGVtcGxh
dGVzLnB5OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vY3BwX2dlbmVyYXRv
ci5weToKKyAgICAgICAgKENwcEdlbmVyYXRvci5oZWxwZXJzX25hbWVzcGFjZSk6CisgICAgICAg
IChDcHBHZW5lcmF0b3IuY3BwX2dldHRlcl9tZXRob2RfZm9yX3R5cGUpOgorICAgICAgICAoQ3Bw
R2VuZXJhdG9yLmNwcF9zZXR0ZXJfbWV0aG9kX2Zvcl90eXBlKToKKyAgICAgICAgKENwcEdlbmVy
YXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZSk6CisgICAgICAgIChDcHBHZW5lcmF0b3Iu
Y3BwX3R5cGVfZm9yX3R5cGVfbWVtYmVyX2FyZ3VtZW50KTogQWRkZWQuCisgICAgICAgIChDcHBH
ZW5lcmF0b3IuY3BwX3R5cGVfZm9yX2NvbW1hbmRfcGFyYW1ldGVyKTogQWRkZWQuCisgICAgICAg
IChDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX2NvbW1hbmRfcmV0dXJuX2RlY2xhcmF0aW9uKTog
QWRkZWQuCisgICAgICAgIChDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX2NvbW1hbmRfcmV0dXJu
X2FyZ3VtZW50KTogQWRkZWQuCisgICAgICAgIChDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX2V2
ZW50X3BhcmFtZXRlcik6IEFkZGVkLgorICAgICAgICAoQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zv
cl9lbnVtKTogQWRkZWQuCisgICAgICAgIChDcHBHZW5lcmF0b3Iuc2hvdWxkX21vdmVfYXJndW1l
bnQpOiBBZGRlZC4KKyAgICAgICAgKENwcEdlbmVyYXRvci5zaG91bGRfcmVsZWFzZV9hcmd1bWVu
dCk6IEFkZGVkLgorICAgICAgICAoQ3BwR2VuZXJhdG9yLnNob3VsZF9kZXJlZmVyZW5jZV9hcmd1
bWVudCk6IEFkZGVkLgorICAgICAgICAoQ3BwR2VuZXJhdG9yLmNwcF9wcm90b2NvbF90eXBlX2Zv
cl90eXBlX21lbWJlcik6IERlbGV0ZWQuCisgICAgICAgIChDcHBHZW5lcmF0b3IuY3BwX3R5cGVf
Zm9yX3VuY2hlY2tlZF9mb3JtYWxfaW5fcGFyYW1ldGVyKTogRGVsZXRlZC4KKyAgICAgICAgKENw
cEdlbmVyYXRvci5jcHBfdHlwZV9mb3JfY2hlY2tlZF9mb3JtYWxfZXZlbnRfcGFyYW1ldGVyKTog
RGVsZXRlZC4KKyAgICAgICAgKENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3JfdHlwZV9tZW1iZXIp
OiBEZWxldGVkLgorICAgICAgICAoQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl90eXBlX3dpdGhf
bmFtZSk6IERlbGV0ZWQuCisgICAgICAgIChDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX2Zvcm1h
bF9vdXRfcGFyYW1ldGVyKTogRGVsZXRlZC4KKyAgICAgICAgKENwcEdlbmVyYXRvci5jcHBfdHlw
ZV9mb3JfZm9ybWFsX2FzeW5jX3BhcmFtZXRlcik6IERlbGV0ZWQuCisgICAgICAgIChDcHBHZW5l
cmF0b3IuY3BwX3R5cGVfZm9yX3N0YWNrX2luX3BhcmFtZXRlcik6IERlbGV0ZWQuCisgICAgICAg
IChDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX3N0YWNrX291dF9wYXJhbWV0ZXIpOiBEZWxldGVk
LgorICAgICAgICAoQ3BwR2VuZXJhdG9yLmNwcF9hc3NlcnRpb25fbWV0aG9kX2Zvcl90eXBlX21l
bWJlcik6IERlbGV0ZWQuCisgICAgICAgIChDcHBHZW5lcmF0b3IuY3BwX2Fzc2VydGlvbl9tZXRo
b2RfZm9yX3R5cGVfbWVtYmVyLmFzc2VydGlvbl9tZXRob2RfZm9yX3R5cGUpOiBEZWxldGVkLgor
ICAgICAgICAoQ3BwR2VuZXJhdG9yLnNob3VsZF91c2Vfd3JhcHBlcl9mb3JfcmV0dXJuX3R5cGUp
OiBEZWxldGVkLgorICAgICAgICAoQ3BwR2VuZXJhdG9yLnNob3VsZF91c2VfcmVmZXJlbmNlc19m
b3JfdHlwZSk6IERlbGV0ZWQuCisgICAgICAgIChDcHBHZW5lcmF0b3Iuc2hvdWxkX3Bhc3NfYnlf
Y29weV9mb3JfcmV0dXJuX3R5cGUpOiBEZWxldGVkLgorICAgICAgICAqIGluc3BlY3Rvci9zY3Jp
cHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2FsdGVybmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVh
ZGVyLnB5OgorICAgICAgICAoQ3BwQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5l
cmF0b3IuX2dlbmVyYXRlX3NlY29uZGFyeV9oZWFkZXJfaW5jbHVkZXMpOgorICAgICAgICAoQ3Bw
QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRlX2hhbmRs
ZXJfZGVjbGFyYXRpb25fZm9yX2NvbW1hbmQpOgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRz
L2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHk6CisgICAg
ICAgIChDcHBCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvci5nZW5lcmF0ZV9vdXRwdXQp
OgorICAgICAgICAoQ3BwQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRl
X3NlY29uZGFyeV9oZWFkZXJfaW5jbHVkZXMpOgorICAgICAgICAoQ3BwQmFja2VuZERpc3BhdGNo
ZXJIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRlX2hhbmRsZXJfZGVjbGFyYXRpb25zX2Zvcl9kb21h
aW4pOgorICAgICAgICAoQ3BwQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IuX2dlbmVy
YXRlX2hhbmRsZXJfZGVjbGFyYXRpb25fZm9yX2NvbW1hbmQpOgorICAgICAgICAoQ3BwQmFja2Vu
ZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRlX2FzeW5jX2hhbmRsZXJfZGVjbGFy
YXRpb25fZm9yX2NvbW1hbmQpOgorICAgICAgICAoQ3BwQmFja2VuZERpc3BhdGNoZXJIZWFkZXJH
ZW5lcmF0b3IuX2dlbmVyYXRlX2Rpc3BhdGNoZXJfZGVjbGFyYXRpb25fZm9yX2NvbW1hbmQpOgor
ICAgICAgICAoQ3BwQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRlX2Fu
b255bW91c19lbnVtX2Zvcl9wYXJhbWV0ZXIpOiBEZWxldGVkLgorICAgICAgICAqIGluc3BlY3Rv
ci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1l
bnRhdGlvbi5weToKKyAgICAgICAgKENwcEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25H
ZW5lcmF0b3IuX2dlbmVyYXRlX3NlY29uZGFyeV9oZWFkZXJfaW5jbHVkZXMpOgorICAgICAgICAo
Q3BwQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfc21h
bGxfZGlzcGF0Y2hlcl9zd2l0Y2hfaW1wbGVtZW50YXRpb25fZm9yX2RvbWFpbik6CisgICAgICAg
IChDcHBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9h
c3luY19kaXNwYXRjaGVyX2NsYXNzX2Zvcl9kb21haW4pOgorICAgICAgICAoQ3BwQmFja2VuZERp
c3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfZGlzcGF0Y2hlcl9pbXBs
ZW1lbnRhdGlvbl9mb3JfY29tbWFuZCk6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29k
ZWdlbi9nZW5lcmF0ZV9jcHBfZnJvbnRlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHk6CisgICAgICAg
IChDcHBGcm9udGVuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRlX3NlY29uZGFy
eV9oZWFkZXJfaW5jbHVkZXMpOgorICAgICAgICAoQ3BwRnJvbnRlbmREaXNwYXRjaGVySGVhZGVy
R2VuZXJhdG9yLl9nZW5lcmF0ZV9kaXNwYXRjaGVyX2RlY2xhcmF0aW9uX2Zvcl9ldmVudCk6Cisg
ICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfZnJvbnRlbmRf
ZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weToKKyAgICAgICAgKENwcEZyb250ZW5kRGlzcGF0
Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9zZWNvbmRhcnlfaGVhZGVyX2lu
Y2x1ZGVzKToKKyAgICAgICAgKENwcEZyb250ZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2Vu
ZXJhdG9yLl9nZW5lcmF0ZV9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uX2Zvcl9ldmVudCk6Cisg
ICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfcHJvdG9jb2xf
dHlwZXNfaGVhZGVyLnB5OgorICAgICAgICAoQ3BwUHJvdG9jb2xUeXBlc0hlYWRlckdlbmVyYXRv
ci5fZ2VuZXJhdGVfc2Vjb25kYXJ5X2hlYWRlcl9pbmNsdWRlcyk6CisgICAgICAgICogaW5zcGVj
dG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfcHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50
YXRpb24ucHk6CisgICAgICAgIChDcHBQcm90b2NvbFR5cGVzSW1wbGVtZW50YXRpb25HZW5lcmF0
b3IuX2dlbmVyYXRlX3NlY29uZGFyeV9oZWFkZXJfaW5jbHVkZXMpOgorICAgICAgICAoQ3BwUHJv
dG9jb2xUeXBlc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9lbnVtX2NvbnZlcnNp
b25fbWV0aG9kc19mb3JfZG9tYWluKToKKyAgICAgICAgKENwcFByb3RvY29sVHlwZXNJbXBsZW1l
bnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfb3Blbl9maWVsZF9uYW1lcyk6CisgICAgICAgIChD
cHBQcm90b2NvbFR5cGVzSW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX2Fzc2VydGlv
bl9mb3JfZW51bSk6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0
ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHk6CisgICAgICAgIChPYmpDQmFja2Vu
ZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IuX2dlbmVyYXRlX29iamNfaGFuZGxlcl9kZWNsYXJh
dGlvbl9mb3JfY29tbWFuZCk6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9n
ZW5lcmF0ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weToKKyAgICAg
ICAgKE9iakNCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0
ZV9oYW5kbGVyX2ltcGxlbWVudGF0aW9uX2Zvcl9jb21tYW5kKToKKyAgICAgICAgKE9iakNCYWNr
ZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9zdWNjZXNzX2Js
b2NrX2Zvcl9jb21tYW5kKToKKyAgICAgICAgKE9iakNCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVu
dGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9zdWNjZXNzX2Jsb2NrX2Zvcl9jb21tYW5kLmFuZCk6
CisgICAgICAgIChPYmpDQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5f
Z2VuZXJhdGVfY29udmVyc2lvbnNfZm9yX2NvbW1hbmQuaW5fcGFyYW1fZXhwcmVzc2lvbik6Cisg
ICAgICAgIChPYmpDQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2Vu
ZXJhdGVfY29udmVyc2lvbnNfZm9yX2NvbW1hbmQpOgorICAgICAgICAoT2JqQ0JhY2tlbmREaXNw
YXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX2ludm9jYXRpb25fZm9yX2Nv
bW1hbmQpOgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2Jq
Y19mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5OgorICAgICAgICAoT2JqQ0Zy
b250ZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9ldmVudCk6
CisgICAgICAgIChPYmpDRnJvbnRlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3Iu
X2dlbmVyYXRlX2V2ZW50X291dF9wYXJhbWV0ZXJzKToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2Ny
aXB0cy9jb2RlZ2VuL29iamNfZ2VuZXJhdG9yX3RlbXBsYXRlcy5weToKKyAgICAgICAgKiBpbnNw
ZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL29iamNfZ2VuZXJhdG9yLnB5OgorICAgICAgICAoT2JqQ0dl
bmVyYXRvci5wcm90b2NvbF90eXBlX2Zvcl90eXBlKToKKyAgICAgICAgKE9iakNHZW5lcmF0b3Iu
b2JqY190eXBlX2Zvcl9wYXJhbV9pbnRlcm5hbCk6CisgICAgICAgIChPYmpDR2VuZXJhdG9yLm9i
amNfcHJvdG9jb2xfaW1wb3J0X2V4cHJlc3Npb25fZm9yX3BhcmFtZXRlcik6CisKKyAgICAgICAg
KiBpbnNwZWN0b3IvcHJvdG9jb2wvUGFnZS5qc29uOgorICAgICAgICBOb3cgdGhhdCBlbnVtcyBh
cmUgcHJvY2Vzc2VkIGJlZm9yZSBiZWluZyBwYXNzZWQgdG8gYmFja2VuZCBkaXNwYWNoZXIgaGFu
ZGxlcnMsIHRoZQorICAgICAgICBgYXBwZWFyYW5jZWAgcGFyYW1ldGVyIG9mIGBQYWdlLnNldEZv
cmNlZEFwcGVhcmFuY2VgIG11c3QgYmUgbWFya2VkIGBvcHRpb25hbGAgYXMKKyAgICAgICAgdGhl
cmUncyBubyB3YXkgZm9yIGl0IHRvIGFjY2VwdCBhbiBlbXB0eSBzdHJpbmcsIGFzIHRoYXQncyBu
b3QgcG9zc2libGUgZm9yIGFuIGVudW0uCisKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0lu
c3BlY3RvckFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBZ2Vu
dC5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBdWRpdEFnZW50Lmg6
CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBdWRpdEFnZW50LmNwcDoKKyAg
ICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNvbnNvbGVBZ2VudC5oOgorICAgICAg
ICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ29uc29sZUFnZW50LmNwcDoKKyAgICAgICAg
KiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuaDoKKyAgICAgICAgKiBp
bnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwOgorICAgICAgICAqIGlu
c3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9ySGVhcEFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9y
L2FnZW50cy9JbnNwZWN0b3JIZWFwQWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2Vu
dHMvSW5zcGVjdG9yUnVudGltZUFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9J
bnNwZWN0b3JSdW50aW1lQWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5z
cGVjdG9yU2NyaXB0UHJvZmlsZXJBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9yU2NyaXB0UHJvZmlsZXJBZ2VudC5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL2Fn
ZW50cy9JbnNwZWN0b3JUYXJnZXRBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9yVGFyZ2V0QWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSlNH
bG9iYWxPYmplY3RBdWRpdEFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9KU0ds
b2JhbE9iamVjdEF1ZGl0QWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSlNH
bG9iYWxPYmplY3REZWJ1Z2dlckFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9K
U0dsb2JhbE9iamVjdERlYnVnZ2VyQWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2Vu
dHMvSlNHbG9iYWxPYmplY3RSdW50aW1lQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdl
bnRzL0pTR2xvYmFsT2JqZWN0UnVudGltZUFnZW50LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3Iv
SlNHbG9iYWxPYmplY3RDb25zb2xlQ2xpZW50LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSlNH
bG9iYWxPYmplY3RJbnNwZWN0b3JDb250cm9sbGVyLmNwcDoKKyAgICAgICAgRWxpZGVkIGJhY2tl
bmQgZGlzcGF0Y2hlciBoYW5kbGVyIGNoYW5nZXMgZGVzY3JpYmUgYWJvdmUuCisKKyAgICAgICAg
KiBiaW5kaW5ncy9TY3JpcHRWYWx1ZS5jcHA6CisgICAgICAgIChJbnNwZWN0b3I6OmpzVG9JbnNw
ZWN0b3JWYWx1ZSk6CisgICAgICAgICogaW5zcGVjdG9yL0FzeW5jU3RhY2tUcmFjZS5oOgorICAg
ICAgICAqIGluc3BlY3Rvci9Bc3luY1N0YWNrVHJhY2UuY3BwOgorICAgICAgICAoSW5zcGVjdG9y
OjpBc3luY1N0YWNrVHJhY2U6OmJ1aWxkSW5zcGVjdG9yT2JqZWN0IGNvbnN0KToKKyAgICAgICAg
KiBpbnNwZWN0b3IvQ29uc29sZU1lc3NhZ2UuY3BwOgorICAgICAgICAoSW5zcGVjdG9yOjpDb25z
b2xlTWVzc2FnZTo6YWRkVG9Gcm9udGVuZCk6CisgICAgICAgICogaW5zcGVjdG9yL0luamVjdGVk
U2NyaXB0QmFzZS5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbmplY3RlZFNjcmlwdEJhc2UuY3Bw
OgorICAgICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdEJhc2U6Om1ha2VFdmFsQ2FsbCk6
CisgICAgICAgIChJbnNwZWN0b3I6OkluamVjdGVkU2NyaXB0QmFzZTo6Y2hlY2tDYWxsUmVzdWx0
KToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHRCYXNlOjpjaGVja0FzeW5jQ2Fs
bFJlc3VsdCk6CisgICAgICAgICogaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0Lmg6CisgICAgICAg
ICogaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0LmNwcDoKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5q
ZWN0ZWRTY3JpcHQ6OmV4ZWN1dGUpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlw
dDo6ZXZhbHVhdGUpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdDo6Y2FsbEZ1
bmN0aW9uT24pOgorICAgICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdDo6ZXZhbHVhdGVP
bkNhbGxGcmFtZSk6CisgICAgICAgIChJbnNwZWN0b3I6OkluamVjdGVkU2NyaXB0OjpnZXRGdW5j
dGlvbkRldGFpbHMpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdDo6ZnVuY3Rp
b25EZXRhaWxzKToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHQ6OmdldFByZXZp
ZXcpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdDo6Z2V0UHJvcGVydGllcyk6
CisgICAgICAgIChJbnNwZWN0b3I6OkluamVjdGVkU2NyaXB0OjpnZXREaXNwbGF5YWJsZVByb3Bl
cnRpZXMpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdDo6Z2V0SW50ZXJuYWxQ
cm9wZXJ0aWVzKToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHQ6OmdldENvbGxl
Y3Rpb25FbnRyaWVzKToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHQ6OnNhdmVS
ZXN1bHQpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdDo6d3JhcENhbGxGcmFt
ZXMgY29uc3QpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdDo6d3JhcE9iamVj
dCBjb25zdCk6CisgICAgICAgIChJbnNwZWN0b3I6OkluamVjdGVkU2NyaXB0Ojp3cmFwSlNPTlN0
cmluZyBjb25zdCk6CisgICAgICAgIChJbnNwZWN0b3I6OkluamVjdGVkU2NyaXB0Ojp3cmFwVGFi
bGUgY29uc3QpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdDo6cHJldmlld1Zh
bHVlIGNvbnN0KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmNw
cDoKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOjppbmplY3RlZFNj
cmlwdEZvck9iamVjdElkKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXIuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXIuY3BwOgorICAgICAgICAoSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tC
YXNlOjpzZW5kU3VjY2Vzcyk6CisgICAgICAgIChJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVy
OjpkaXNwYXRjaCk6CisgICAgICAgIChJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyOjpzZW5k
UmVzcG9uc2UpOgorICAgICAgICAoSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0UHJv
cGVydHlWYWx1ZSk6CisgICAgICAgIChJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyOjpnZXRC
b29sZWFuKToKKyAgICAgICAgKEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXI6OmdldEludGVn
ZXIpOgorICAgICAgICAoSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0RG91YmxlKToK
KyAgICAgICAgKEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXI6OmdldFN0cmluZyk6CisgICAg
ICAgIChJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyOjpnZXRWYWx1ZSk6CisgICAgICAgIChJ
bnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyOjpnZXRPYmplY3QpOgorICAgICAgICAoSW5zcGVj
dG9yOjpCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0QXJyYXkpOgorICAgICAgICAoSW5zcGVjdG9yOjpj
YXN0VG9JbnRlZ2VyKTogRGVsZXRlZC4KKyAgICAgICAgKEluc3BlY3Rvcjo6Y2FzdFRvTnVtYmVy
KTogRGVsZXRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5o
OgorICAgICAgICAoSW5zcGVjdG9yOjpQcm90b2NvbDo6QmluZGluZ1RyYWl0czxKU09OOjpBcnJh
eU9mPFQ+Pjo6cnVudGltZUNhc3QpOgorICAgICAgICAoSW5zcGVjdG9yOjpQcm90b2NvbDo6Qmlu
ZGluZ1RyYWl0czxKU09OOjpBcnJheU9mPFQ+Pjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUp
OgorICAgICAgICAqIGluc3BlY3Rvci9yZW1vdGUvc29ja2V0L1JlbW90ZUluc3BlY3RvckNvbm5l
Y3Rpb25DbGllbnQuY3BwOgorICAgICAgICAoSW5zcGVjdG9yOjpSZW1vdGVJbnNwZWN0b3JDb25u
ZWN0aW9uQ2xpZW50OjpleHRyYWN0RXZlbnQpOgorICAgICAgICAqIGluc3BlY3Rvci9yZW1vdGUv
c29ja2V0L1JlbW90ZUluc3BlY3RvclNvY2tldC5jcHA6CisgICAgICAgIChJbnNwZWN0b3I6OlJl
bW90ZUluc3BlY3Rvcjo6cHVzaExpc3RpbmdzTm93KToKKyAgICAgICAgKiBydW50aW1lL1R5cGVT
ZXQuY3BwOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTaGFwZTo6aW5zcGVjdG9yUmVwcmVzZW50
YXRpb24pOgorICAgICAgICBgSlNPTmAgY2xhc3NlcyBub3cgdXNlIGBSZWYmJmAgd2hlcmV2ZXIg
cG9zc2libGUgYW5kIGBPcHRpb25hbGAgaW5zdGVhZCBvZiBhbiBvdXQgcGFyYW1ldGVyCisgICAg
ICAgIGZvciBgZ2V0KmAvYGFzKmAgc28gdGhhdCB2YWx1ZXMgY2FuIGJlIG1vcmUgZWFzaWx5IG1h
bmlwdWxhdGVkIGFuZCBjYW4gYmUgY29uZmlkZW50bHkga25vd24KKyAgICAgICAgdG8gZXhpc3Qu
CisKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9lbnVtLXZhbHVlcy5qc29uOgor
ICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2NvbW1hbmQtdGFyZ2V0
VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbi1yZXN1bHQ6CisgICAgICAg
ICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1hc3luYy1h
dHRyaWJ1dGUuanNvbi1yZXN1bHQ6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
ZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVybi1wYXJhbWV0ZXJzLmpz
b24tcmVzdWx0OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2Rl
ZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24tcmVzdWx0OgorICAgICAgICAqIGluc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2RvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMuanNvbi1y
ZXN1bHQ6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZG9tYWlu
LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24tcmVzdWx0Ogor
ICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2RvbWFpbi10YXJnZXRU
eXBlcy5qc29uLXJlc3VsdDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBl
Y3RlZC9kb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24tcmVzdWx0OgorICAg
ICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2VudW0tdmFsdWVzLmpzb24t
cmVzdWx0OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2V2ZW50
LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24tcmVzdWx0Ogor
ICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2V2ZW50cy13aXRoLW9w
dGlvbmFsLXBhcmFtZXRlcnMuanNvbi1yZXN1bHQ6CisgICAgICAgICogaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZXhwZWN0ZWQvZ2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpz
b24tcmVzdWx0OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3Nh
bWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9tYWluLmpzb24tcmVzdWx0OgorICAgICAgICAqIGluc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3NoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVy
cy5qc29uLXJlc3VsdDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3Rl
ZC9zaG91bGQtc3RyaXAtY29tbWVudHMuanNvbi1yZXN1bHQ6CisgICAgICAgICogaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2
ZS10eXBlLmpzb24tcmVzdWx0OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4
cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uLXJlc3VsdDoKKyAgICAgICAg
KiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWVudW0t
dHlwZS5qc29uLXJlc3VsdDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBl
Y3RlZC90eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24tcmVzdWx0OgorICAgICAgICAq
IGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtcmVxdWlyaW5nLXJ1bnRpbWUt
Y2FzdHMuanNvbi1yZXN1bHQ6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhw
ZWN0ZWQvdHlwZS13aXRoLW9wZW4tcGFyYW1ldGVycy5qc29uLXJlc3VsdDoKKyAgICAgICAgKiBp
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC92ZXJzaW9uLmpzb24tcmVzdWx0OgorCiAy
MDIwLTA5LTA1ICBEZXZpbiBSb3Vzc28gIDxkcm91c3NvQGFwcGxlLmNvbT4KIAogICAgICAgICBX
ZWIgSW5zcGVjdG9yOiBhbGxvdyBET00gYnJlYWtwb2ludHMgdG8gYmUgY29uZmlndXJlZApkaWZm
IC0tZ2l0IGEvU291cmNlL1dURi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwppbmRl
eCBkMGI1MWVkYjgwNjA4NjBiN2JiMTNjMDYyYTUwMzExZmE0MjRmMWRhLi4yMDM2YmQzMjlkMzEw
MTM5N2I4OWJhZDY0MmI4Yjk2MDU5MDQ2ZTRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZworKysgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUyIEBACisyMDIwLTA5
LTA4ICBEZXZpbiBSb3Vzc28gIDxkcm91c3NvQGFwcGxlLmNvbT4KKworICAgICAgICBXZWIgSW5z
cGVjdG9yOiBtb2Rlcm5pemUgZ2VuZXJhdGVkIGJhY2tlbmQgcHJvdG9jb2wgY29kZQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE2MzAyCisgICAgICAg
IDxyZGFyOi8vcHJvYmxlbS82ODU0NzY0OT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIHd0Zi9KU09OVmFsdWVzLmg6CisgICAgICAgIChXVEY6OkpT
T05JbXBsOjpPYmplY3RCYXNlOjpzZXRWYWx1ZSk6CisgICAgICAgIChXVEY6OkpTT05JbXBsOjpP
YmplY3RCYXNlOjpzZXRPYmplY3QpOgorICAgICAgICAoV1RGOjpKU09OSW1wbDo6T2JqZWN0QmFz
ZTo6c2V0QXJyYXkpOgorICAgICAgICAoV1RGOjpKU09OSW1wbDo6QXJyYXlCYXNlOjpwdXNoVmFs
dWUpOgorICAgICAgICAoV1RGOjpKU09OSW1wbDo6QXJyYXlCYXNlOjpwdXNoT2JqZWN0KToKKyAg
ICAgICAgKFdURjo6SlNPTkltcGw6OkFycmF5QmFzZTo6cHVzaEFycmF5KToKKyAgICAgICAgKFdU
Rjo6SlNPTkltcGw6OkFycmF5T2Y6OkFycmF5T2YpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpK
U09OSW1wbDo6QXJyYXlPZjo6Y2FzdGVkQXJyYXkpOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpK
U09OSW1wbDo6QXJyYXlPZjo6YWRkSXRlbSk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OkpTT05J
bXBsOjpBcnJheU9mOjpjcmVhdGUpOiBEZWxldGVkLgorICAgICAgICAqIHd0Zi9KU09OVmFsdWVz
LmNwcDoKKyAgICAgICAgKFdURjo6SlNPTkltcGw6OlZhbHVlOjphc1ZhbHVlKToKKyAgICAgICAg
KFdURjo6SlNPTkltcGw6OlZhbHVlOjphc09iamVjdCk6CisgICAgICAgIChXVEY6OkpTT05JbXBs
OjpWYWx1ZTo6YXNBcnJheSk6CisgICAgICAgIChXVEY6OkpTT05JbXBsOjpWYWx1ZTo6cGFyc2VK
U09OKToKKyAgICAgICAgKFdURjo6SlNPTkltcGw6OlZhbHVlOjphc0Jvb2xlYW4gY29uc3QpOgor
ICAgICAgICAoV1RGOjpKU09OSW1wbDo6VmFsdWU6OmFzRG91YmxlIGNvbnN0KToKKyAgICAgICAg
KFdURjo6SlNPTkltcGw6OlZhbHVlOjphc0ludGVnZXIgY29uc3QpOgorICAgICAgICAoV1RGOjpK
U09OSW1wbDo6VmFsdWU6OmFzU3RyaW5nIGNvbnN0KToKKyAgICAgICAgKFdURjo6SlNPTkltcGw6
Ok9iamVjdEJhc2U6OmFzT2JqZWN0KToKKyAgICAgICAgKFdURjo6SlNPTkltcGw6Ok9iamVjdEJh
c2U6Om1lbW9yeUNvc3QgY29uc3QpOgorICAgICAgICAoV1RGOjpKU09OSW1wbDo6T2JqZWN0QmFz
ZTo6Z2V0Qm9vbGVhbiBjb25zdCk6CisgICAgICAgIChXVEY6OkpTT05JbXBsOjpPYmplY3RCYXNl
OjpnZXREb3VibGUgY29uc3QpOgorICAgICAgICAoV1RGOjpKU09OSW1wbDo6T2JqZWN0QmFzZTo6
Z2V0SW50ZWdlciBjb25zdCk6CisgICAgICAgIChXVEY6OkpTT05JbXBsOjpPYmplY3RCYXNlOjpn
ZXRTdHJpbmcgY29uc3QpOgorICAgICAgICAoV1RGOjpKU09OSW1wbDo6T2JqZWN0QmFzZTo6Z2V0
T2JqZWN0IGNvbnN0KToKKyAgICAgICAgKFdURjo6SlNPTkltcGw6Ok9iamVjdEJhc2U6OmdldEFy
cmF5IGNvbnN0KToKKyAgICAgICAgKFdURjo6SlNPTkltcGw6Ok9iamVjdEJhc2U6OmdldFZhbHVl
IGNvbnN0KToKKyAgICAgICAgKFdURjo6SlNPTkltcGw6Ok9iamVjdEJhc2U6Ok9iamVjdEJhc2Up
OgorICAgICAgICAoV1RGOjpKU09OSW1wbDo6QXJyYXlCYXNlOjphc0FycmF5KToKKyAgICAgICAg
KFdURjo6SlNPTkltcGw6OkFycmF5QmFzZTo6d3JpdGVKU09OIGNvbnN0KToKKyAgICAgICAgKFdU
Rjo6SlNPTkltcGw6OkFycmF5QmFzZTo6QXJyYXlCYXNlKToKKyAgICAgICAgKFdURjo6SlNPTklt
cGw6OkFycmF5QmFzZTo6Z2V0IGNvbnN0KToKKyAgICAgICAgKFdURjo6SlNPTkltcGw6OkFycmF5
QmFzZTo6bWVtb3J5Q29zdCBjb25zdCk6CisgICAgICAgIChXVEY6OkpTT05JbXBsOjpPYmplY3RC
YXNlOjpvcGVuQWNjZXNzb3JzKTogRGVsZXRlZC4KKyAgICAgICAgVXNlIGBSZWYmJmAgd2hlcmV2
ZXIgcG9zc2libGUgYW5kIGBPcHRpb25hbGAgaW5zdGVhZCBvZiBhbiBvdXQgcGFyYW1ldGVyIGZv
ciBgZ2V0KmAvYGFzKmAKKyAgICAgICAgc28gdGhhdCB2YWx1ZXMgY2FuIGJlIG1vcmUgZWFzaWx5
IG1hbmlwdWxhdGVkIGFuZCBjYW4gYmUgY29uZmlkZW50bHkgYXNzdW1lZCB0byBleGlzdC4KKyAg
ICAgICAgUmVtb3ZlIHVudXNlZCBvdmVybG9hZHMgYW5kIGFsbG93IHN1YmNsYXNzZXMgdG8gY2Fs
bCBgYXMqYCBpbnN0ZWFkIG9mIGBvcGVuQWNjZXNzb3JzYCBhcworICAgICAgICB0aGV5J3JlIGVm
ZmVjdGl2ZWx5IHRoZSBzYW1lIHRoaW5nLgorCiAyMDIwLTA5LTA1ICBNeWxlcyBDLiBNYXhmaWVs
ZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CiAKICAgICAgICAgW0NvY29hXSBDVEZvbnRJc1N5c3Rl
bVVJRm9udCgpIGlzIGZhc3RlciB0aGFuIENURm9udERlc2NyaXB0b3JJc1N5c3RlbVVJRm9udCgp
L0NURm9udENvcHlGb250RGVzY3JpcHRvcigpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDdhNTM1ZDRkODRjM2U5
YWJmOGIyNWYwZWFhNmQyOGJlZTMyM2I5ZC4uNDRlMDljYjJlOWNjMTIxNDRhM2VhMmM3YzcxY2M1
NTUwYWE3NDM4MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzOSBAQAorMjAyMC0wOS0wOCAgRGV2
aW4gUm91c3NvICA8ZHJvdXNzb0BhcHBsZS5jb20+CisKKyAgICAgICAgV2ViIEluc3BlY3Rvcjog
bW9kZXJuaXplIGdlbmVyYXRlZCBiYWNrZW5kIHByb3RvY29sIGNvZGUKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNjMwMgorICAgICAgICA8cmRhcjov
L3Byb2JsZW0vNjg1NDc2NDk+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgUHJldmlvdXNseSwgdGhlIGluc3BlY3RvciBwcm90b2NvbCB3YXMgZXhwcmVz
c2VkIGluIGNvZGUgaW4gYSBzb21ld2hhdCBjb25mdXNpbmcgd2F5OgorICAgICAgICAgLSB0aGUg
ZXJyb3Igc3RyaW5nIHdhcyB0aGUgZmlyc3QgYXJndW1lbnQKKyAgICAgICAgIC0gcmVxdWlyZWQg
cGFyYW1ldGVycyB3ZXJlIGBUYCBvciBgY29uc3QgVCZgCisgICAgICAgICAtIG9wdGlvbmFsIHBh
cmFtZXRlcnMgd2VyZSBgY29uc3QgVCpgCisgICAgICAgICAtIGVudW0gcGFyYW1ldGVycyB3ZXJl
IHRoZSB1bmRlcmx5aW5nIHR5cGUgcmVxdWlyaW5nIHRoZSBiYWNrZW5kIGRpc3BhdGNoZXIgaGFu
ZGxlciB0bworICAgICAgICAgICBwcm9jZXNzIGl0IGluc3RlYWQgb2YgaXQgYmVpbmcgcHJlcHJv
Y2Vzc2VkCisgICAgICAgICAtIHJlcXVpcmVkIHJldHVybnMgd2VyZSBgVCZgCisgICAgICAgICAt
IG9wdGlvbmFsIHJldHVybnMgd2VyZSBgVCpgCisgICAgICAgIFRoaXMgZG9lc24ndCByZWFsbHkg
bWFrZSBmb3IgZWFzeS9vYnZpb3VzIHJlYWRpbmcgb2YgY29kZSBzaW5jZSB0aGUgb3JkZXIgb2Yg
YXJndW1lbnRzIGlzCisgICAgICAgIG5vdCB3ZWlyZCAoZS5nLiBlcnJvciBzdHJpbmcgZmlyc3Qp
LCBhbmQgdGhhdCB0aGVyZSBhcmUgcmVmZXJlbmNlcy9wb2ludGVycyB0byBwcmltaXRpdmUKKyAg
ICAgICAgdHlwZXMuCisKKyAgICAgICAgVGhpcyBwYXRjaCBjbGVhbnMgdXAgdGhlIGdlbmVyYXRl
ZCBpbnNwZWN0b3IgcHJvdG9jb2wgY29kZSB0byBiZToKKyAgICAgICAgIC0gcmVxdWlyZWQgcGFy
YW1ldGVycyBhcmUgYFRgIG9yIGBSZWY8VD4mJmAKKyAgICAgICAgIC0gb3B0aW9uYWwgcGFyYW1l
dGVycyBhcmUgYE9wdGlvbmFsPFQ+JiZgIG9yIGBSZWZQdHI8VD4mJmAKKyAgICAgICAgIC0gZW51
bSBwYXJhbWV0ZXJzIGFyZSBwcmVwcm9jZXNzZWQgYW5kIHBhc3NlZCB0byB0aGUgYmFja2VuZCBk
aXNwYXRjaGVyIGhhbmRsZXIgaWYgdmFsaWQKKyAgICAgICAgIC0gc3luY2hyb25vdXMgY29tbWFu
ZHMgcmV0dXJuIGBFeHBlY3RlZDxYLCBFcnJvclN0cmluZz5gIHVzaW5nIHRoZSBzYW1lIHR5cGVz
L3J1bGVzIGFib3ZlCisgICAgICAgICAgIHdoZXJlIGBYYCBpcyBlaXRoZXIgYSBzaW5nbGUgcmV0
dXJuIG9yIGEgYHN0ZDo6dHVwbGVgIG9mIG11bHRpcGxlIHJldHVybnMKKworICAgICAgICBUaGUg
b25lIGV4Y2VwdGlvbiB0byB0aGUgYWJvdmUgaXMgYFN0cmluZ2AsIHdoaWNoIGlzIGFscmVhZHkg
YSB0cmktc3RhdGUgb2YgYG51bGxTdHJpbmcoKWAsCisgICAgICAgIGBlbXB0eVN0cmluZygpYCwg
YW5kIHNvbWV0aGluZyBzZXQsIHNvIHRoZXJlJ3Mgbm8gbmVlZCB0byB1c2UgYE9wdGlvbmFsPFN0
cmluZz5gLgorCisgICAgICAgIEFsc28gdXNlIGBQcm90b2NvbGAgb2JqZWN0cy9gdHlwZWRlZnNg
IHdoZXJldmVyIHBvc3NpYmxlIHRvIGZ1cnRoZXIgcmVsYXRlIHRoZSBwcm90b2NvbAorICAgICAg
ICBKU09OIGFuZCB0aGUgYWN0dWFsIGJhY2tlbmQgZGlzcGF0Y2hlciBoYW5kbGVyIGltcGxlbWVu
dGF0aW9uLgorCisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckF1ZGl0UmVzb3VyY2VzT2Jq
ZWN0LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzLmg6CisgICAgICAg
ICogaW5zcGVjdG9yL0luc3BlY3RvckNhbnZhcy5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL0lu
c3BlY3RvckNvbnRyb2xsZXIuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JTdHls
ZVNoZWV0Lmg6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwOgor
ICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQW5pbWF0aW9uQWdlbnQuaDoKKyAg
ICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckFuaW1hdGlvbkFnZW50LmNwcDoKKyAg
ICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5o
OgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFn
ZW50LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNQVVByb2ZpbGVy
QWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNQVVByb2ZpbGVy
QWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ1NTQWdlbnQu
aDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNTU0FnZW50LmNwcDoKKyAg
ICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNhbnZhc0FnZW50Lmg6CisgICAgICAg
ICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDYW52YXNBZ2VudC5jcHA6CisgICAgICAgICog
aW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01BZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rv
ci9hZ2VudHMvSW5zcGVjdG9yRE9NQWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2Vu
dHMvSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2Vu
dHMvSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudC5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL2Fn
ZW50cy9JbnNwZWN0b3JET01TdG9yYWdlQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdl
bnRzL0luc3BlY3RvckRPTVN0b3JhZ2VBZ2VudC5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL2Fn
ZW50cy9JbnNwZWN0b3JEYXRhYmFzZUFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50
cy9JbnNwZWN0b3JEYXRhYmFzZUFnZW50LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRz
L0luc3BlY3RvckluZGV4ZWREQkFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9J
bnNwZWN0b3JJbmRleGVkREJBZ2VudC5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9J
bnNwZWN0b3JMYXllclRyZWVBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5z
cGVjdG9yTGF5ZXJUcmVlQWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5z
cGVjdG9yTWVtb3J5QWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rv
ck1lbW9yeUFnZW50LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rvck5l
dHdvcmtBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yTmV0d29y
a0FnZW50LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclBhZ2VBZ2Vu
dC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUGFnZUFnZW50LmNwcDoK
KyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclRpbWVsaW5lQWdlbnQuaDoKKyAg
ICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclRpbWVsaW5lQWdlbnQuY3BwOgorICAg
ICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yV29ya2VyQWdlbnQuaDoKKyAgICAgICAg
KiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvcldvcmtlckFnZW50LmNwcDoKKyAgICAgICAgKiBp
bnNwZWN0b3IvYWdlbnRzL1dlYkNvbnNvbGVBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9h
Z2VudHMvV2ViRGVidWdnZXJBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvV2Vi
RGVidWdnZXJBZ2VudC5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9XZWJIZWFwQWdl
bnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL1dlYkhlYXBBZ2VudC5jcHA6CisgICAg
ICAgICogaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VBdWRpdEFnZW50Lmg6CisgICAgICAgICog
aW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VBdWRpdEFnZW50LmNwcDoKKyAgICAgICAgKiBpbnNw
ZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZUNvbnNvbGVBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rv
ci9hZ2VudHMvcGFnZS9QYWdlQ29uc29sZUFnZW50LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3Iv
YWdlbnRzL3BhZ2UvUGFnZURPTURlYnVnZ2VyQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3Iv
YWdlbnRzL3BhZ2UvUGFnZURPTURlYnVnZ2VyQWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rv
ci9hZ2VudHMvcGFnZS9QYWdlRGVidWdnZXJBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9h
Z2VudHMvcGFnZS9QYWdlRGVidWdnZXJBZ2VudC5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL2Fn
ZW50cy9wYWdlL1BhZ2VIZWFwQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL3Bh
Z2UvUGFnZUhlYXBBZ2VudC5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9wYWdlL1Bh
Z2VOZXR3b3JrQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZU5l
dHdvcmtBZ2VudC5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VSdW50
aW1lQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZVJ1bnRpbWVB
Z2VudC5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvU2VydmljZVdvcmtl
ckFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvU2VydmljZVdvcmtl
ckFnZW50LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJBdWRp
dEFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2VyQ29uc29s
ZUFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2VyQXVkaXRB
Z2VudC5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2VyRE9NRGVi
dWdnZXJBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlckRP
TURlYnVnZ2VyQWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dv
cmtlckRlYnVnZ2VyQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9X
b3JrZXJEZWJ1Z2dlckFnZW50LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL3dvcmtl
ci9Xb3JrZXJOZXR3b3JrQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL3dvcmtl
ci9Xb3JrZXJOZXR3b3JrQWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvd29y
a2VyL1dvcmtlclJ1bnRpbWVBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvd29y
a2VyL1dvcmtlclJ1bnRpbWVBZ2VudC5jcHA6CisgICAgICAgIEVsaWRlZCBiYWNrZW5kIGRpc3Bh
dGNoZXIgaGFuZGxlciBjaGFuZ2VzIGRlc2NyaWJlIGFib3ZlLgorCisgICAgICAgICogaW5zcGVj
dG9yL0NvbW1hbmRMaW5lQVBJSG9zdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb21tYW5kTGlu
ZUFQSUhvc3Q6Omluc3BlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q29tbWFuZExpbmVBUElIb3N0
OjpjbGVhckNvbnNvbGVNZXNzYWdlcyk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckZy
b250ZW5kSG9zdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjp2YWx1ZVBheWxvYWRGcm9tSlNPTlZh
bHVlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckZyb250ZW5kSG9zdDo6bG9nRGlhZ25v
c3RpY0V2ZW50KToKKyAgICAgICAgKiBpbnNwZWN0b3IvVGltZWxpbmVSZWNvcmRGYWN0b3J5Lmg6
CisgICAgICAgICogaW5zcGVjdG9yL1RpbWVsaW5lUmVjb3JkRmFjdG9yeS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmFwcGVuZExheW91dFJvb3QpOgorICAg
ICAgICAqIE1vZHVsZXMvYXBwbGljYXRpb25tYW5pZmVzdC9BcHBsaWNhdGlvbk1hbmlmZXN0UGFy
c2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXI6OnBh
cnNlTWFuaWZlc3QpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25NYW5pZmVzdFBhcnNl
cjo6cGFyc2VTdGFydFVSTCk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbk1hbmlmZXN0
UGFyc2VyOjpwYXJzZURpc3BsYXkpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25NYW5p
ZmVzdFBhcnNlcjo6cGFyc2VTY29wZSk6CisgICAgICAgIChXZWJDb3JlOjpBcHBsaWNhdGlvbk1h
bmlmZXN0UGFyc2VyOjpwYXJzZUdlbmVyaWNTdHJpbmcpOgorICAgICAgICAqIE1vZHVsZXMvZW5j
cnlwdGVkbWVkaWEvSW5pdERhdGFSZWdpc3RyeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpleHRy
YWN0S2V5SURzS2V5aWRzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1V
dGlsaXRpZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0RNVXRpbGl0aWVzOjpwYXJzZUpTT05P
YmplY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL2NsZWFya2V5L0NETUNs
ZWFyS2V5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlTGljZW5zZUZvcm1hdCk6CisgICAg
ICAgIChXZWJDb3JlOjpwYXJzZUxpY2Vuc2VSZWxlYXNlQWNrbm93bGVkZ2VtZW50Rm9ybWF0KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vQ0RNRmFpclBsYXlTdHJl
YW1pbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZXh0cmFjdFNpbmZEYXRhKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1JbnN0YW5jZUZhaXJQbGF5
U3RyZWFtaW5nQVZGT2JqQy5tbToKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlSlNPTlZhbHVlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNETUluc3RhbmNlU2Vzc2lvbkZhaXJQbGF5U3RyZWFtaW5nQVZG
T2JqQzo6dXBkYXRlTGljZW5zZSk6CisgICAgICAgIGBKU09OYCBjbGFzc2VzIG5vdyB1c2UgYFJl
ZiYmYCB3aGVyZXZlciBwb3NzaWJsZSBhbmQgYE9wdGlvbmFsYCBpbnN0ZWFkIG9mIGFuIG91dCBw
YXJhbWV0ZXIKKyAgICAgICAgZm9yIGBnZXQqYC9gYXMqYCBzbyB0aGF0IHZhbHVlcyBjYW4gYmUg
bW9yZSBlYXNpbHkgbWFuaXB1bGF0ZWQgYW5kIGNhbiBiZSBjb25maWRlbnRseSBrbm93bgorICAg
ICAgICB0byBleGlzdC4KKwogMjAyMC0wOS0wNSAgRGV2aW4gUm91c3NvICA8ZHJvdXNzb0BhcHBs
ZS5jb20+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogYWxsb3cgRE9NIGJyZWFrcG9pbnRzIHRv
IGJlIGNvbmZpZ3VyZWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJEcml2ZXIvQ2hhbmdlTG9nIGIv
U291cmNlL1dlYkRyaXZlci9DaGFuZ2VMb2cKaW5kZXggZGEzYjY0Y2FkNWVlMTQ5NTY2NGM3Zjhj
YjBmNzg0ODk5ZjU3ODg5NC4uZjFjOWYwZTYyNDM2MzFhMTkzZjFlMjdjMmZmOThlNWUwYjc4NWNh
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkRyaXZlci9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
YkRyaXZlci9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMzcgQEAKKzIwMjAtMDktMDggIERldmluIFJv
dXNzbyAgPGRyb3Vzc29AYXBwbGUuY29tPgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IG1vZGVy
bml6ZSBnZW5lcmF0ZWQgYmFja2VuZCBwcm90b2NvbCBjb2RlCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTYzMDIKKyAgICAgICAgPHJkYXI6Ly9wcm9i
bGVtLzY4NTQ3NjQ5PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogQ29tbWFuZFJlc3VsdC5jcHA6CisgICAgICAgIChXZWJEcml2ZXI6OkNvbW1hbmRS
ZXN1bHQ6OkNvbW1hbmRSZXN1bHQpOgorICAgICAgICAqIFNlc3Npb24uY3BwOgorICAgICAgICAo
V2ViRHJpdmVyOjpmaXJzdFdpbmRvd0hhbmRsZUluUmVzdWx0KToKKyAgICAgICAgKFdlYkRyaXZl
cjo6U2Vzc2lvbjo6Z2V0VGltZW91dHMpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjpj
cmVhdGVUb3BMZXZlbEJyb3dzaW5nQ29udGV4dCk6CisgICAgICAgIChXZWJEcml2ZXI6OlNlc3Np
b246OmhhbmRsZVVzZXJQcm9tcHRzKToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6cmVw
b3J0VW5leHBlY3RlZEFsZXJ0T3Blbik6CisgICAgICAgIChXZWJEcml2ZXI6OlNlc3Npb246Omdv
KToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6Z2V0Q3VycmVudFVSTCk6CisgICAgICAg
IChXZWJEcml2ZXI6OlNlc3Npb246OmJhY2spOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9u
Ojpmb3J3YXJkKToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6cmVmcmVzaCk6CisgICAg
ICAgIChXZWJEcml2ZXI6OlNlc3Npb246OmdldFRpdGxlKToKKyAgICAgICAgKFdlYkRyaXZlcjo6
U2Vzc2lvbjo6Z2V0V2luZG93SGFuZGxlKToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6
Y2xvc2VUb3BMZXZlbEJyb3dzaW5nQ29udGV4dCk6CisgICAgICAgIChXZWJEcml2ZXI6OlNlc3Np
b246OnN3aXRjaFRvV2luZG93KToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6Z2V0V2lu
ZG93SGFuZGxlcyk6CisgICAgICAgIChXZWJEcml2ZXI6OlNlc3Npb246Om5ld1dpbmRvdyk6Cisg
ICAgICAgIChXZWJEcml2ZXI6OlNlc3Npb246OnN3aXRjaFRvRnJhbWUpOgorICAgICAgICAoV2Vi
RHJpdmVyOjpTZXNzaW9uOjpzd2l0Y2hUb1BhcmVudEZyYW1lKToKKyAgICAgICAgKFdlYkRyaXZl
cjo6U2Vzc2lvbjo6Z2V0VG9wbGV2ZWxCcm93c2luZ0NvbnRleHRSZWN0KToKKyAgICAgICAgKFdl
YkRyaXZlcjo6U2Vzc2lvbjo6c2V0V2luZG93UmVjdCk6CisgICAgICAgIChXZWJEcml2ZXI6OlNl
c3Npb246Om1heGltaXplV2luZG93KToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6bWlu
aW1pemVXaW5kb3cpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjpmdWxsc2NyZWVuV2lu
ZG93KToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6Y3JlYXRlRWxlbWVudCk6CisgICAg
ICAgIChXZWJEcml2ZXI6OlNlc3Npb246OmV4dHJhY3RFbGVtZW50SUQpOgorICAgICAgICAoV2Vi
RHJpdmVyOjpTZXNzaW9uOjpjb21wdXRlRWxlbWVudExheW91dCk6CisgICAgICAgIChXZWJEcml2
ZXI6OlNlc3Npb246OmZpbmRFbGVtZW50cyk6CisgICAgICAgIChXZWJEcml2ZXI6OlNlc3Npb246
OmdldEFjdGl2ZUVsZW1lbnQpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjppc0VsZW1l
bnRTZWxlY3RlZCk6CisgICAgICAgIChXZWJEcml2ZXI6OlNlc3Npb246OmdldEVsZW1lbnRUZXh0
KToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6Z2V0RWxlbWVudFRhZ05hbWUpOgorICAg
ICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjpnZXRFbGVtZW50UmVjdCk6CisgICAgICAgIChXZWJE
cml2ZXI6OlNlc3Npb246OmlzRWxlbWVudEVuYWJsZWQpOgorICAgICAgICAoV2ViRHJpdmVyOjpT
ZXNzaW9uOjppc0VsZW1lbnREaXNwbGF5ZWQpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9u
OjpnZXRFbGVtZW50QXR0cmlidXRlKToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6Z2V0
RWxlbWVudFByb3BlcnR5KToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6Z2V0RWxlbWVu
dENTU1ZhbHVlKToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6d2FpdEZvck5hdmlnYXRp
b25Ub0NvbXBsZXRlKToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6ZWxlbWVudElzRmls
ZVVwbG9hZCk6CisgICAgICAgIChXZWJEcml2ZXI6OlNlc3Npb246OnBhcnNlRWxlbWVudElzRmls
ZVVwbG9hZFJlc3VsdCk6CisgICAgICAgIChXZWJEcml2ZXI6OlNlc3Npb246OnNlbGVjdE9wdGlv
bkVsZW1lbnQpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjplbGVtZW50Q2xpY2spOgor
ICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjplbGVtZW50SXNFZGl0YWJsZSk6CisgICAgICAg
IChXZWJEcml2ZXI6OlNlc3Npb246OmVsZW1lbnRDbGVhcik6CisgICAgICAgIChXZWJEcml2ZXI6
OlNlc3Npb246OnNldElucHV0RmlsZVVwbG9hZEZpbGVzKToKKyAgICAgICAgKFdlYkRyaXZlcjo6
U2Vzc2lvbjo6ZWxlbWVudFNlbmRLZXlzKToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6
Z2V0UGFnZVNvdXJjZSk6CisgICAgICAgIChXZWJEcml2ZXI6OlNlc3Npb246OmhhbmRsZVNjcmlw
dFJlc3VsdCk6CisgICAgICAgIChXZWJEcml2ZXI6OlNlc3Npb246OmV4ZWN1dGVTY3JpcHQpOgor
ICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjpwZXJmb3JtTW91c2VJbnRlcmFjdGlvbik6Cisg
ICAgICAgIChXZWJEcml2ZXI6OlNlc3Npb246OnBlcmZvcm1LZXlib2FyZEludGVyYWN0aW9ucyk6
CisgICAgICAgIChXZWJEcml2ZXI6OmJ1aWx0QXV0b21hdGlvbkNvb2tpZSk6CisgICAgICAgIChX
ZWJEcml2ZXI6OnNlcmlhbGl6ZUNvb2tpZSk6CisgICAgICAgIChXZWJEcml2ZXI6OlNlc3Npb246
OmdldEFsbENvb2tpZXMpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjpnZXROYW1lZENv
b2tpZSk6CisgICAgICAgIChXZWJEcml2ZXI6OlNlc3Npb246OmFkZENvb2tpZSk6CisgICAgICAg
IChXZWJEcml2ZXI6OlNlc3Npb246OmRlbGV0ZUNvb2tpZSk6CisgICAgICAgIChXZWJEcml2ZXI6
OlNlc3Npb246OmRlbGV0ZUFsbENvb2tpZXMpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9u
OjpwZXJmb3JtQWN0aW9ucyk6CisgICAgICAgIChXZWJEcml2ZXI6OlNlc3Npb246OnJlbGVhc2VB
Y3Rpb25zKToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6ZGlzbWlzc0FsZXJ0KToKKyAg
ICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6YWNjZXB0QWxlcnQpOgorICAgICAgICAoV2ViRHJp
dmVyOjpTZXNzaW9uOjpnZXRBbGVydFRleHQpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9u
OjpzZW5kQWxlcnRUZXh0KToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6dGFrZVNjcmVl
bnNob3QpOgorICAgICAgICAqIFNlc3Npb25Ib3N0LmNwcDoKKyAgICAgICAgKFdlYkRyaXZlcjo6
U2Vzc2lvbkhvc3Q6OmRpc3BhdGNoTWVzc2FnZSk6CisgICAgICAgICogV2ViRHJpdmVyU2Vydmlj
ZS5oOgorICAgICAgICAqIFdlYkRyaXZlclNlcnZpY2UuY3BwOgorICAgICAgICAoV2ViRHJpdmVy
OjpXZWJEcml2ZXJTZXJ2aWNlOjpoYW5kbGVSZXF1ZXN0KToKKyAgICAgICAgKFdlYkRyaXZlcjo6
V2ViRHJpdmVyU2VydmljZTo6c2VuZFJlc3BvbnNlIGNvbnN0KToKKyAgICAgICAgKFdlYkRyaXZl
cjo6dmFsdWVBc051bWJlckluUmFuZ2UpOgorICAgICAgICAoV2ViRHJpdmVyOjpkZXNlcmlhbGl6
ZVRpbWVvdXRzKToKKyAgICAgICAgKFdlYkRyaXZlcjo6ZGVzZXJpYWxpemVQcm94eSk6CisgICAg
ICAgIChXZWJEcml2ZXI6OldlYkRyaXZlclNlcnZpY2U6OnBhcnNlQ2FwYWJpbGl0aWVzIGNvbnN0
KToKKyAgICAgICAgKFdlYkRyaXZlcjo6V2ViRHJpdmVyU2VydmljZTo6ZmluZFNlc3Npb25PckNv
bXBsZXRlV2l0aEVycm9yKToKKyAgICAgICAgKFdlYkRyaXZlcjo6V2ViRHJpdmVyU2VydmljZTo6
dmFsaWRhdGVkQ2FwYWJpbGl0aWVzIGNvbnN0KToKKyAgICAgICAgKFdlYkRyaXZlcjo6V2ViRHJp
dmVyU2VydmljZTo6bWVyZ2VDYXBhYmlsaXRpZXMgY29uc3QpOgorICAgICAgICAoV2ViRHJpdmVy
OjpXZWJEcml2ZXJTZXJ2aWNlOjptYXRjaENhcGFiaWxpdGllcyBjb25zdCk6CisgICAgICAgIChX
ZWJEcml2ZXI6OldlYkRyaXZlclNlcnZpY2U6OnByb2Nlc3NDYXBhYmlsaXRpZXMgY29uc3QpOgor
ICAgICAgICAoV2ViRHJpdmVyOjpXZWJEcml2ZXJTZXJ2aWNlOjpjcmVhdGVTZXNzaW9uKToKKyAg
ICAgICAgKFdlYkRyaXZlcjo6V2ViRHJpdmVyU2VydmljZTo6ZGVsZXRlU2Vzc2lvbik6CisgICAg
ICAgIChXZWJEcml2ZXI6OldlYkRyaXZlclNlcnZpY2U6OmdvKToKKyAgICAgICAgKFdlYkRyaXZl
cjo6V2ViRHJpdmVyU2VydmljZTo6c2V0V2luZG93UmVjdCk6CisgICAgICAgIChXZWJEcml2ZXI6
OldlYkRyaXZlclNlcnZpY2U6OmNsb3NlV2luZG93KToKKyAgICAgICAgKFdlYkRyaXZlcjo6V2Vi
RHJpdmVyU2VydmljZTo6c3dpdGNoVG9XaW5kb3cpOgorICAgICAgICAoV2ViRHJpdmVyOjpXZWJE
cml2ZXJTZXJ2aWNlOjpuZXdXaW5kb3cpOgorICAgICAgICAoV2ViRHJpdmVyOjpXZWJEcml2ZXJT
ZXJ2aWNlOjpzd2l0Y2hUb0ZyYW1lKToKKyAgICAgICAgKFdlYkRyaXZlcjo6ZmluZEVsZW1lbnRP
ckNvbXBsZXRlV2l0aEVycm9yKToKKyAgICAgICAgKFdlYkRyaXZlcjo6ZmluZFN0cmF0ZWd5QW5k
U2VsZWN0b3JPckNvbXBsZXRlV2l0aEVycm9yKToKKyAgICAgICAgKFdlYkRyaXZlcjo6V2ViRHJp
dmVyU2VydmljZTo6Z2V0RWxlbWVudEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJEcml2ZXI6Oldl
YkRyaXZlclNlcnZpY2U6OmdldEVsZW1lbnRQcm9wZXJ0eSk6CisgICAgICAgIChXZWJEcml2ZXI6
OldlYkRyaXZlclNlcnZpY2U6OmdldEVsZW1lbnRDU1NWYWx1ZSk6CisgICAgICAgIChXZWJEcml2
ZXI6OldlYkRyaXZlclNlcnZpY2U6OmVsZW1lbnRTZW5kS2V5cyk6CisgICAgICAgIChXZWJEcml2
ZXI6OmZpbmRTY3JpcHRBbmRBcmd1bWVudHNPckNvbXBsZXRlV2l0aEVycm9yKToKKyAgICAgICAg
KFdlYkRyaXZlcjo6V2ViRHJpdmVyU2VydmljZTo6Z2V0TmFtZWRDb29raWUpOgorICAgICAgICAo
V2ViRHJpdmVyOjpkZXNlcmlhbGl6ZUNvb2tpZSk6CisgICAgICAgIChXZWJEcml2ZXI6OldlYkRy
aXZlclNlcnZpY2U6OmFkZENvb2tpZSk6CisgICAgICAgIChXZWJEcml2ZXI6OldlYkRyaXZlclNl
cnZpY2U6OmRlbGV0ZUNvb2tpZSk6CisgICAgICAgIChXZWJEcml2ZXI6OnByb2Nlc3NQYXVzZUFj
dGlvbik6CisgICAgICAgIChXZWJEcml2ZXI6OnByb2Nlc3NOdWxsQWN0aW9uKToKKyAgICAgICAg
KFdlYkRyaXZlcjo6cHJvY2Vzc0tleUFjdGlvbik6CisgICAgICAgIChXZWJEcml2ZXI6OnByb2Nl
c3NQb2ludGVyQWN0aW9uKToKKyAgICAgICAgKFdlYkRyaXZlcjo6cHJvY2Vzc1BvaW50ZXJQYXJh
bWV0ZXJzKToKKyAgICAgICAgKFdlYkRyaXZlcjo6cHJvY2Vzc0lucHV0QWN0aW9uU2VxdWVuY2Up
OgorICAgICAgICAoV2ViRHJpdmVyOjpXZWJEcml2ZXJTZXJ2aWNlOjpwZXJmb3JtQWN0aW9ucyk6
CisgICAgICAgIChXZWJEcml2ZXI6OldlYkRyaXZlclNlcnZpY2U6OnNlbmRBbGVydFRleHQpOgor
ICAgICAgICAqIFdlYkRyaXZlci9ndGsvV2ViRHJpdmVyU2VydmljZUd0ay5jcHA6CisgICAgICAg
IChXZWJEcml2ZXI6OldlYkRyaXZlclNlcnZpY2U6OnBsYXRmb3JtTWF0Y2hDYXBhYmlsaXR5KToK
KyAgICAgICAgKFdlYkRyaXZlcjo6V2ViRHJpdmVyU2VydmljZTo6cGxhdGZvcm1WYWxpZGF0ZUNh
cGFiaWxpdHkpOgorICAgICAgICAoV2ViRHJpdmVyOjpXZWJEcml2ZXJTZXJ2aWNlOjpwbGF0Zm9y
bVBhcnNlQ2FwYWJpbGl0aWVzKToKKyAgICAgICAgKiBXZWJEcml2ZXIvd2luL1dlYkRyaXZlclNl
cnZpY2VXaW4uY3BwOgorICAgICAgICAoV2ViRHJpdmVyOjpXZWJEcml2ZXJTZXJ2aWNlOjpwbGF0
Zm9ybU1hdGNoQ2FwYWJpbGl0eSk6CisgICAgICAgIChXZWJEcml2ZXI6OldlYkRyaXZlclNlcnZp
Y2U6OnBsYXRmb3JtVmFsaWRhdGVDYXBhYmlsaXR5KToKKyAgICAgICAgKFdlYkRyaXZlcjo6V2Vi
RHJpdmVyU2VydmljZTo6cGxhdGZvcm1QYXJzZUNhcGFiaWxpdGllcyk6CisgICAgICAgICogV2Vi
RHJpdmVyL3dwZS9XZWJEcml2ZXJTZXJ2aWNlV1BFLmNwcDoKKyAgICAgICAgKFdlYkRyaXZlcjo6
V2ViRHJpdmVyU2VydmljZTo6cGxhdGZvcm1NYXRjaENhcGFiaWxpdHkpOgorICAgICAgICAoV2Vi
RHJpdmVyOjpXZWJEcml2ZXJTZXJ2aWNlOjpwbGF0Zm9ybVZhbGlkYXRlQ2FwYWJpbGl0eSk6Cisg
ICAgICAgIChXZWJEcml2ZXI6OldlYkRyaXZlclNlcnZpY2U6OnBsYXRmb3JtUGFyc2VDYXBhYmls
aXRpZXMpOgorICAgICAgICBgSlNPTmAgY2xhc3NlcyBub3cgdXNlIGBSZWYmJmAgd2hlcmV2ZXIg
cG9zc2libGUgYW5kIGBPcHRpb25hbGAgaW5zdGVhZCBvZiBhbiBvdXQgcGFyYW1ldGVyCisgICAg
ICAgIGZvciBgZ2V0KmAvYGFzKmAgc28gdGhhdCB2YWx1ZXMgY2FuIGJlIG1vcmUgZWFzaWx5IG1h
bmlwdWxhdGVkIGFuZCBjYW4gYmUgY29uZmlkZW50bHkga25vd24KKyAgICAgICAgdG8gZXhpc3Qu
CisKIDIwMjAtMDctMTUgIEZ1amlpIEhpcm9ub3JpICA8SGlyb25vcmkuRnVqaWlAc29ueS5jb20+
CiAKICAgICAgICAgW0NNYWtlXVtXZWJEcml2ZXJdIEdlbmVyYXRpbmcgV2ViRHJpdmVyQXRvbXMu
Y3BwIGlzIHJhcmVseSBmYWlsaW5nIGFzICJJbXBvcnRFcnJvcjogTm8gbW9kdWxlIG5hbWVkIGpz
bWluIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKaW5kZXggOTljYzFjNzAxYjEzZWI4ZWJmZjRiODI0
Njk5ZTU0ODA4MGUwOTZjZC4uNGNlODk0OTI4NTg2YzMxODI4ZWMyYTY1MDE1MjE5ZmE3ZWViY2Yw
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV2ViSW5zcGVjdG9yVUkvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjQgQEAKKzIwMjAtMDktMDgg
IERldmluIFJvdXNzbyAgPGRyb3Vzc29AYXBwbGUuY29tPgorCisgICAgICAgIFdlYiBJbnNwZWN0
b3I6IG1vZGVybml6ZSBnZW5lcmF0ZWQgYmFja2VuZCBwcm90b2NvbCBjb2RlCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTYzMDIKKyAgICAgICAgPHJk
YXI6Ly9wcm9ibGVtLzY4NTQ3NjQ5PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogVXNlckludGVyZmFjZS9Db250cm9sbGVycy9DU1NNYW5hZ2VyLmpz
OgorICAgICAgICAoV0kuQ1NTTWFuYWdlci5wcm90b3R5cGUuc2V0IGZvcmNlZEFwcGVhcmFuY2Up
OgorICAgICAgICBOb3cgdGhhdCBlbnVtcyBhcmUgcHJvY2Vzc2VkIGJlZm9yZSBiZWluZyBwYXNz
ZWQgdG8gYmFja2VuZCBkaXNwYWNoZXIgaGFuZGxlcnMsIHRoZQorICAgICAgICBgYXBwZWFyYW5j
ZWAgcGFyYW1ldGVyIG9mIGBQYWdlLnNldEZvcmNlZEFwcGVhcmFuY2VgIG11c3QgYmUgbWFya2Vk
IGBvcHRpb25hbGAgYXMKKyAgICAgICAgdGhlcmUncyBubyB3YXkgZm9yIGl0IHRvIGFjY2VwdCBh
biBlbXB0eSBzdHJpbmcsIGFzIHRoYXQncyBub3QgcG9zc2libGUgZm9yIGFuIGVudW0uCisgICAg
ICAgIEFzIHN1Y2gsIHJld29yayB0aGUgZnJvbnRlbmQgbG9naWMgZm9yIGludm9raW5nIGBQYWdl
LnNldEZvcmNlZEFwcGVhcmFuY2VgIHRvIGluc3RlYWQKKyAgICAgICAgbm90IHByb3ZpZGUgYW4g
YGFwcGVhcmFuY2VgIHBhcmFtZXRlciBhdCBhbGwgd2hlbiB3YW50aW5nIHRvICJ1bnNldCIgaXQu
CisKKyAgICAgICAgKiBVc2VySW50ZXJmYWNlL1ZpZXdzL1NldHRpbmdzVGFiQ29udGVudFZpZXcu
anM6CisgICAgICAgIChXSS5TZXR0aW5nc1RhYkNvbnRlbnRWaWV3LnByb3RvdHlwZS5fY3JlYXRl
Q29uc29sZVNldHRpbmdzVmlldyk6CisgICAgICAgIE5vdyB0aGF0IGFsbCBsb2dnaW5nIGNoYW5u
ZWxzIG1hdGNoaW5nIGEgYENvbnNvbGUuQ2hhbm5lbFNvdXJjZWAgYXJlIHJldHVybmVkIGluc3Rl
YWQgb2YKKyAgICAgICAganVzdCB0aGUgaGFyZGNvZGVkIGxpc3QsIGNoZWNrIGZvciBhIG1hdGNo
aW5nIGBXSS5VSVN0cmluZ2AgYmVmb3JlIHNob3dpbmcgYSBgPHNlbGVjdD5gLgorCiAyMDIwLTA5
LTA1ICBEZXZpbiBSb3Vzc28gIDxkcm91c3NvQGFwcGxlLmNvbT4KIAogICAgICAgICBXZWIgSW5z
cGVjdG9yOiBhbGxvdyBET00gYnJlYWtwb2ludHMgdG8gYmUgY29uZmlndXJlZApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRl
eCAxYzg3ODA3ODM0M2EzMjM3Y2RjN2I4MTQyZDk0YzI1OTcyZGI5ZDc3Li4yZDM5NWU5ZDlkYjJk
NDkzZDc4MjkxM2YzNTE3ODg2MjgxMzgwOGJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDU1IEBACisy
MDIwLTA5LTA4ICBEZXZpbiBSb3Vzc28gIDxkcm91c3NvQGFwcGxlLmNvbT4KKworICAgICAgICBX
ZWIgSW5zcGVjdG9yOiBtb2Rlcm5pemUgZ2VuZXJhdGVkIGJhY2tlbmQgcHJvdG9jb2wgY29kZQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE2MzAyCisg
ICAgICAgIDxyZGFyOi8vcHJvYmxlbS82ODU0NzY0OT4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQcmV2aW91c2x5LCB0aGUgaW5zcGVjdG9yIHByb3Rv
Y29sIHdhcyBleHByZXNzZWQgaW4gY29kZSBpbiBhIHNvbWV3aGF0IGNvbmZ1c2luZyB3YXk6Cisg
ICAgICAgICAtIHRoZSBlcnJvciBzdHJpbmcgd2FzIHRoZSBmaXJzdCBhcmd1bWVudAorICAgICAg
ICAgLSByZXF1aXJlZCBwYXJhbWV0ZXJzIHdlcmUgYFRgIG9yIGBjb25zdCBUJmAKKyAgICAgICAg
IC0gb3B0aW9uYWwgcGFyYW1ldGVycyB3ZXJlIGBjb25zdCBUKmAKKyAgICAgICAgIC0gZW51bSBw
YXJhbWV0ZXJzIHdlcmUgdGhlIHVuZGVybHlpbmcgdHlwZSByZXF1aXJpbmcgdGhlIGJhY2tlbmQg
ZGlzcGF0Y2hlciBoYW5kbGVyIHRvCisgICAgICAgICAgIHByb2Nlc3MgaXQgaW5zdGVhZCBvZiBp
dCBiZWluZyBwcmVwcm9jZXNzZWQKKyAgICAgICAgIC0gcmVxdWlyZWQgcmV0dXJucyB3ZXJlIGBU
JmAKKyAgICAgICAgIC0gb3B0aW9uYWwgcmV0dXJucyB3ZXJlIGBUKmAKKyAgICAgICAgVGhpcyBk
b2Vzbid0IHJlYWxseSBtYWtlIGZvciBlYXN5L29idmlvdXMgcmVhZGluZyBvZiBjb2RlIHNpbmNl
IHRoZSBvcmRlciBvZiBhcmd1bWVudHMgaXMKKyAgICAgICAgbm90IHdlaXJkIChlLmcuIGVycm9y
IHN0cmluZyBmaXJzdCksIGFuZCB0aGF0IHRoZXJlIGFyZSByZWZlcmVuY2VzL3BvaW50ZXJzIHRv
IHByaW1pdGl2ZQorICAgICAgICB0eXBlcy4KKworICAgICAgICBUaGlzIHBhdGNoIGNsZWFucyB1
cCB0aGUgZ2VuZXJhdGVkIGluc3BlY3RvciBwcm90b2NvbCBjb2RlIHRvIGJlOgorICAgICAgICAg
LSByZXF1aXJlZCBwYXJhbWV0ZXJzIGFyZSBgVGAgb3IgYFJlZjxUPiYmYAorICAgICAgICAgLSBv
cHRpb25hbCBwYXJhbWV0ZXJzIGFyZSBgT3B0aW9uYWw8VD4mJmAgb3IgYFJlZlB0cjxUPiYmYAor
ICAgICAgICAgLSBlbnVtIHBhcmFtZXRlcnMgYXJlIHByZXByb2Nlc3NlZCBhbmQgcGFzc2VkIHRv
IHRoZSBiYWNrZW5kIGRpc3BhdGNoZXIgaGFuZGxlciBpZiB2YWxpZAorICAgICAgICAgLSBzeW5j
aHJvbm91cyBjb21tYW5kcyByZXR1cm4gYEV4cGVjdGVkPFgsIEVycm9yU3RyaW5nPmAgdXNpbmcg
dGhlIHNhbWUgdHlwZXMvcnVsZXMgYWJvdmUKKyAgICAgICAgICAgd2hlcmUgYFhgIGlzIGVpdGhl
ciBhIHNpbmdsZSByZXR1cm4gb3IgYSBgc3RkOjp0dXBsZWAgb2YgbXVsdGlwbGUgcmV0dXJucwor
CisgICAgICAgIFRoZSBvbmUgZXhjZXB0aW9uIHRvIHRoZSBhYm92ZSBpcyBgU3RyaW5nYCwgd2hp
Y2ggaXMgYWxyZWFkeSBhIHRyaS1zdGF0ZSBvZiBgbnVsbFN0cmluZygpYCwKKyAgICAgICAgYGVt
cHR5U3RyaW5nKClgLCBhbmQgc29tZXRoaW5nIHNldCwgc28gdGhlcmUncyBubyBuZWVkIHRvIHVz
ZSBgT3B0aW9uYWw8U3RyaW5nPmAuCisKKyAgICAgICAgQWxzbyB1c2UgYFByb3RvY29sYCBvYmpl
Y3RzL2B0eXBlZGVmc2Agd2hlcmV2ZXIgcG9zc2libGUgdG8gZnVydGhlciByZWxhdGUgdGhlIHBy
b3RvY29sCisgICAgICAgIEpTT04gYW5kIHRoZSBhY3R1YWwgYmFja2VuZCBkaXNwYXRjaGVyIGhh
bmRsZXIgaW1wbGVtZW50YXRpb24uCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQXV0b21hdGlvbi9B
dXRvbWF0aW9uLmpzb246CisgICAgICAgIGBDb29yZGluYXRlU3lzdGVtYCBoYXMgYFBhZ2VgIGFu
ZCBgVmlld3BvcnRgIGVudW0gdmFsdWVzLCBidXQgYFdlYkF1dG9tYXRpb25TZXNzaW9uYCBjaGVj
a3MKKyAgICAgICAgZm9yIGAiUGFnZSJgIGFuZCBgIkxheW91dFZpZXdwb3J0ImAuIEFkZCBhIGBM
YXlvdXRWaWV3cG9ydGAgZW51bSB2YWx1ZSBub3cgdGhhdCBlbnVtcyBhcmUKKyAgICAgICAgcHJv
Y2Vzc2VkIGJlZm9yZSBiZWluZyBwYXNzZWQgdG8gYmFja2VuZCBkaXNwYWNoZXIgaGFuZGxlcnMg
dG8gcHJlc2VydmUgZnVuY3Rpb25hbGl0eS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9JbnNwZWN0
b3IvQWdlbnRzL0luc3BlY3RvckJyb3dzZXJBZ2VudC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9J
bnNwZWN0b3IvQWdlbnRzL0luc3BlY3RvckJyb3dzZXJBZ2VudC5jcHA6CisgICAgICAgICogVUlQ
cm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb25NYWNyb3MuaDoKKyAgICAgICAg
KiBVSVByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbi5oOgorICAgICAgICAq
IFVJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmNwcDoKKyAgICAgICAg
KiBVSVByb2Nlc3MvQXV0b21hdGlvbi9tYWMvV2ViQXV0b21hdGlvblNlc3Npb25NYWMubW06Cisg
ICAgICAgIEVsaWRlZCBiYWNrZW5kIGRpc3BhdGNoZXIgaGFuZGxlciBjaGFuZ2VzIGRlc2NyaWJl
IGFib3ZlLgorCisgICAgICAgICogVUlQcm9jZXNzL0luc3BlY3Rvci9zb2NrZXQvUmVtb3RlSW5z
cGVjdG9yQ2xpZW50LmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlSW5zcGVjdG9yQ2xpZW50
OjpzZXRUYXJnZXRMaXN0KToKKyAgICAgICAgYEpTT05gIGNsYXNzZXMgbm93IHVzZSBgUmVmJiZg
IHdoZXJldmVyIHBvc3NpYmxlIGFuZCBgT3B0aW9uYWxgIGluc3RlYWQgb2YgYW4gb3V0IHBhcmFt
ZXRlcgorICAgICAgICBmb3IgYGdldCpgL2BhcypgIHNvIHRoYXQgdmFsdWVzIGNhbiBiZSBtb3Jl
IGVhc2lseSBtYW5pcHVsYXRlZCBhbmQgY2FuIGJlIGNvbmZpZGVudGx5IGtub3duCisgICAgICAg
IHRvIGV4aXN0LgorCiAyMDIwLTA5LTA1ICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4K
IAogICAgICAgICBbV2ViSURMXSBSZWFsaWduIG91ciBJREwgZXh0ZW5kZWQgYXR0cmlidXRlIG5h
bWVzIHdpdGggdGhvc2Ugc3BlY2lmaWVkIGluIFdlYklETApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2JpbmRpbmdzL1NjcmlwdFZhbHVlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iaW5kaW5ncy9TY3JpcHRWYWx1ZS5jcHAKaW5kZXggNmI4NTNjOTMxZjFkY2U5MjUzYmJh
YzA2YTk1ZTZhYWM1MjdjZjI1YS4uNzk2OGI5MGE3M2IyODJkZjU5ODIyNTZhNmVkY2IyZDZlNTc0
Mzk2ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2JpbmRpbmdzL1NjcmlwdFZh
bHVlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvU2NyaXB0VmFsdWUu
Y3BwCkBAIC02OSw3ICs2OSw3IEBAIHN0YXRpYyBSZWZQdHI8SlNPTjo6VmFsdWU+IGpzVG9JbnNw
ZWN0b3JWYWx1ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhCiAgICAgICAgICAg
ICAgICAgYXV0byBlbGVtZW50VmFsdWUgPSBqc1RvSW5zcGVjdG9yVmFsdWUoZ2xvYmFsT2JqZWN0
LCBhcnJheS5nZXRJbmRleChnbG9iYWxPYmplY3QsIGkpLCBtYXhEZXB0aCk7CiAgICAgICAgICAg
ICAgICAgaWYgKCFlbGVtZW50VmFsdWUpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOwotICAgICAgICAgICAgICAgIGluc3BlY3RvckFycmF5LT5wdXNoVmFsdWUoV1RGTW92ZShl
bGVtZW50VmFsdWUpKTsKKyAgICAgICAgICAgICAgICBpbnNwZWN0b3JBcnJheS0+cHVzaFZhbHVl
KGVsZW1lbnRWYWx1ZS5yZWxlYXNlTm9uTnVsbCgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIHJldHVybiBpbnNwZWN0b3JBcnJheTsKICAgICAgICAgfQpAQCAtODIsNyArODIsNyBAQCBz
dGF0aWMgUmVmUHRyPEpTT046OlZhbHVlPiBqc1RvSW5zcGVjdG9yVmFsdWUoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNWYQogICAgICAgICAgICAgYXV0byBpbnNwZWN0b3JWYWx1ZSA9
IGpzVG9JbnNwZWN0b3JWYWx1ZShnbG9iYWxPYmplY3QsIG9iamVjdC5nZXQoZ2xvYmFsT2JqZWN0
LCBuYW1lKSwgbWF4RGVwdGgpOwogICAgICAgICAgICAgaWYgKCFpbnNwZWN0b3JWYWx1ZSkKICAg
ICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgICAgIGluc3BlY3Rvck9iamVj
dC0+c2V0VmFsdWUobmFtZS5zdHJpbmcoKSwgV1RGTW92ZShpbnNwZWN0b3JWYWx1ZSkpOworICAg
ICAgICAgICAgaW5zcGVjdG9yT2JqZWN0LT5zZXRWYWx1ZShuYW1lLnN0cmluZygpLCBpbnNwZWN0
b3JWYWx1ZS5yZWxlYXNlTm9uTnVsbCgpKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gaW5z
cGVjdG9yT2JqZWN0OwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3IvQXN5bmNTdGFja1RyYWNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3IvQXN5bmNTdGFja1RyYWNlLmNwcAppbmRleCA1NDUwZTJmM2MwMDljNjAxOGNmOWM1MzBh
MDM2YzNkYjdhNjM0NTBlLi5hNTk2Mzk1Y2JlYTc5MWU3MGJlM2UyMzYyZmU1N2Y0MzgzNGE1OTRh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0FzeW5jU3RhY2tU
cmFjZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9Bc3luY1N0YWNr
VHJhY2UuY3BwCkBAIC05Nyw3ICs5Nyw3IEBAIHZvaWQgQXN5bmNTdGFja1RyYWNlOjpkaWRDYW5j
ZWxBc3luY0NhbGwoKQogICAgIG1fc3RhdGUgPSBTdGF0ZTo6Q2FuY2VsZWQ7CiB9CiAKLVJlZlB0
cjxQcm90b2NvbDo6Q29uc29sZTo6U3RhY2tUcmFjZT4gQXN5bmNTdGFja1RyYWNlOjpidWlsZElu
c3BlY3Rvck9iamVjdCgpIGNvbnN0CitSZWY8UHJvdG9jb2w6OkNvbnNvbGU6OlN0YWNrVHJhY2U+
IEFzeW5jU3RhY2tUcmFjZTo6YnVpbGRJbnNwZWN0b3JPYmplY3QoKSBjb25zdAogewogICAgIFJl
ZlB0cjxQcm90b2NvbDo6Q29uc29sZTo6U3RhY2tUcmFjZT4gdG9wU3RhY2tUcmFjZTsKICAgICBS
ZWZQdHI8UHJvdG9jb2w6OkNvbnNvbGU6OlN0YWNrVHJhY2U+IHByZXZpb3VzU3RhY2tUcmFjZTsK
QEAgLTEyMCwxMyArMTIwLDEzIEBAIFJlZlB0cjxQcm90b2NvbDo6Q29uc29sZTo6U3RhY2tUcmFj
ZT4gQXN5bmNTdGFja1RyYWNlOjpidWlsZEluc3BlY3Rvck9iamVjdCgpIGNvCiAgICAgICAgICAg
ICB0b3BTdGFja1RyYWNlID0gcHJvdG9jb2xPYmplY3QucHRyKCk7CiAKICAgICAgICAgaWYgKHBy
ZXZpb3VzU3RhY2tUcmFjZSkKLSAgICAgICAgICAgIHByZXZpb3VzU3RhY2tUcmFjZS0+c2V0UGFy
ZW50U3RhY2tUcmFjZShwcm90b2NvbE9iamVjdC5wdHIoKSk7CisgICAgICAgICAgICBwcmV2aW91
c1N0YWNrVHJhY2UtPnNldFBhcmVudFN0YWNrVHJhY2UocHJvdG9jb2xPYmplY3QuY29weVJlZigp
KTsKIAogICAgICAgICBwcmV2aW91c1N0YWNrVHJhY2UgPSBXVEZNb3ZlKHByb3RvY29sT2JqZWN0
KTsKICAgICAgICAgc3RhY2tUcmFjZSA9IHN0YWNrVHJhY2UtPm1fcGFyZW50LmdldCgpOwogICAg
IH0KIAotICAgIHJldHVybiB0b3BTdGFja1RyYWNlOworICAgIHJldHVybiB0b3BTdGFja1RyYWNl
LnJlbGVhc2VOb25OdWxsKCk7CiB9CiAKIHZvaWQgQXN5bmNTdGFja1RyYWNlOjp0cnVuY2F0ZShz
aXplX3QgbWF4RGVwdGgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL0FzeW5jU3RhY2tUcmFjZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9B
c3luY1N0YWNrVHJhY2UuaAppbmRleCA2ZWRlNmM0MjVhYmNhYTJkNjFlNWJiN2IxYmExOWUzMmU1
NzIzYjZjLi40OTlhMWUwNWZkNTk0M2Y5ZmFlZGMzMGUwYmQzZDIwZTBjNWRkYmVhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0FzeW5jU3RhY2tUcmFjZS5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvQXN5bmNTdGFja1RyYWNlLmgKQEAg
LTUxLDcgKzUxLDcgQEAgcHVibGljOgogICAgIHZvaWQgZGlkRGlzcGF0Y2hBc3luY0NhbGwoKTsK
ICAgICB2b2lkIGRpZENhbmNlbEFzeW5jQ2FsbCgpOwogCi0gICAgUmVmUHRyPFByb3RvY29sOjpD
b25zb2xlOjpTdGFja1RyYWNlPiBidWlsZEluc3BlY3Rvck9iamVjdCgpIGNvbnN0OworICAgIFJl
ZjxQcm90b2NvbDo6Q29uc29sZTo6U3RhY2tUcmFjZT4gYnVpbGRJbnNwZWN0b3JPYmplY3QoKSBj
b25zdDsKIAogICAgIH5Bc3luY1N0YWNrVHJhY2UoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9Db25zb2xlTWVzc2FnZS5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL0NvbnNvbGVNZXNzYWdlLmNwcAppbmRleCA1NDJjN2M3YjM3ZWZi
MmU0YTc2YTMyYTAwOGQwNjNkYmM4MDVjZGQwLi45MGExZGQ5NjA0NzBhNTRlZDNiMTQ2NmNlY2Zk
ZWZhODM0OTQ1ODBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L0NvbnNvbGVNZXNzYWdlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L0NvbnNvbGVNZXNzYWdlLmNwcApAQCAtMjYxLDkgKzI2MSwxMSBAQCB2b2lkIENvbnNvbGVNZXNz
YWdlOjphZGRUb0Zyb250ZW5kKENvbnNvbGVGcm9udGVuZERpc3BhdGNoZXImIGNvbnNvbGVGcm9u
dGVuZERpcwogICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgYXJndW1lbnRzT2JqZWN0LT5hZGRJdGVtKFdURk1vdmUoaW5zcGVj
dG9yVmFsdWUpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1fYXJndW1lbnRzLT5hcmd1bWVu
dENvdW50KCkgPiAxKQotICAgICAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRzT2JqZWN0LT5h
ZGRJdGVtKGluamVjdGVkU2NyaXB0LndyYXBPYmplY3QoY29sdW1ucywgImNvbnNvbGUiX3MsIHRy
dWUpKTsKKyAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRzT2JqZWN0LT5hZGRJdGVtKGluc3Bl
Y3RvclZhbHVlLnJlbGVhc2VOb25OdWxsKCkpOworICAgICAgICAgICAgICAgICAgICBpZiAobV9h
cmd1bWVudHMtPmFyZ3VtZW50Q291bnQoKSA+IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChhdXRvIGluc3BlY3Rvck9iamVjdCA9IGluamVjdGVkU2NyaXB0LndyYXBPYmplY3QoY29s
dW1ucywgImNvbnNvbGUiX3MsIHRydWUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFy
Z3VtZW50c09iamVjdC0+YWRkSXRlbShpbnNwZWN0b3JPYmplY3QucmVsZWFzZU5vbk51bGwoKSk7
CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9hcmd1bWVudHMtPmFyZ3Vt
ZW50Q291bnQoKTsgKytpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIGluc3BlY3Rv
clZhbHVlID0gaW5qZWN0ZWRTY3JpcHQud3JhcE9iamVjdChtX2FyZ3VtZW50cy0+YXJndW1lbnRB
dChpKSwgImNvbnNvbGUiX3MsIGdlbmVyYXRlUHJldmlldyk7CkBAIC0yNzEsNyArMjczLDcgQEAg
dm9pZCBDb25zb2xlTWVzc2FnZTo6YWRkVG9Gcm9udGVuZChDb25zb2xlRnJvbnRlbmREaXNwYXRj
aGVyJiBjb25zb2xlRnJvbnRlbmREaXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBhcmd1bWVu
dHNPYmplY3QtPmFkZEl0ZW0oV1RGTW92ZShpbnNwZWN0b3JWYWx1ZSkpOworICAgICAgICAgICAg
ICAgICAgICAgICAgYXJndW1lbnRzT2JqZWN0LT5hZGRJdGVtKGluc3BlY3RvclZhbHVlLnJlbGVh
c2VOb25OdWxsKCkpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgfQpAQCAtMjg0LDcgKzI4Niw3IEBAIHZvaWQgQ29uc29sZU1lc3NhZ2U6OmFk
ZFRvRnJvbnRlbmQoQ29uc29sZUZyb250ZW5kRGlzcGF0Y2hlciYgY29uc29sZUZyb250ZW5kRGlz
CiAgICAgICAgICAgICAgICAgICAgIGlmICghaW5zcGVjdG9yVmFsdWUpCiAgICAgICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICAgICAgICAgICAgICBhcmd1bWVudHNPYmpl
Y3QtPmFkZEl0ZW0oV1RGTW92ZShpbnNwZWN0b3JWYWx1ZSkpOworICAgICAgICAgICAgICAgICAg
ICBhcmd1bWVudHNPYmplY3QtPmFkZEl0ZW0oaW5zcGVjdG9yVmFsdWUucmVsZWFzZU5vbk51bGwo
KSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0LmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHQuY3BwCmluZGV4IGNjODQ5ZjA1
MWZhNDA1MThhOWQxYTAzNDI5YmMyYjRkYmNmYjMxMDIuLjY5MDlhMzM5ZWEyZTNkZTYwMGY1NWZk
NmZlNDY4MzY0NjE3MWUwYTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3IvSW5qZWN0ZWRTY3JpcHQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3IvSW5qZWN0ZWRTY3JpcHQuY3BwCkBAIC01Niw3ICs1Niw3IEBAIEluamVjdGVkU2NyaXB0
Ojp+SW5qZWN0ZWRTY3JpcHQoKQogewogfQogCi12b2lkIEluamVjdGVkU2NyaXB0OjpleGVjdXRl
KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBmdW5jdGlvblN0cmluZywg
RXhlY3V0ZU9wdGlvbnMmJiBvcHRpb25zLCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90
ZU9iamVjdD4mIHJlc3VsdCwgT3B0aW9uYWw8Ym9vbD4mIHdhc1Rocm93biwgT3B0aW9uYWw8aW50
PiYgc2F2ZWRSZXN1bHRJbmRleCkKK3ZvaWQgSW5qZWN0ZWRTY3JpcHQ6OmV4ZWN1dGUoUHJvdG9j
b2w6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBmdW5jdGlvblN0cmlu
ZywgRXhlY3V0ZU9wdGlvbnMmJiBvcHRpb25zLCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJl
bW90ZU9iamVjdD4mIHJlc3VsdCwgT3B0aW9uYWw8Ym9vbD4mIHdhc1Rocm93biwgT3B0aW9uYWw8
aW50PiYgc2F2ZWRSZXN1bHRJbmRleCkKIHsKICAgICBEZXByZWNhdGVkOjpTY3JpcHRGdW5jdGlv
bkNhbGwgZnVuY3Rpb24oaW5qZWN0ZWRTY3JpcHRPYmplY3QoKSwgImV4ZWN1dGUiX3MsIGluc3Bl
Y3RvckVudmlyb25tZW50KCktPmZ1bmN0aW9uQ2FsbEhhbmRsZXIoKSk7CiAgICAgZnVuY3Rpb24u
YXBwZW5kQXJndW1lbnQoZnVuY3Rpb25TdHJpbmcpOwpAQCAtNjksNyArNjksNyBAQCB2b2lkIElu
amVjdGVkU2NyaXB0OjpleGVjdXRlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3Ry
aW5nJiBmdW5jdGlvblN0cgogICAgIG1ha2VFdmFsQ2FsbChlcnJvclN0cmluZywgZnVuY3Rpb24s
IHJlc3VsdCwgd2FzVGhyb3duLCBzYXZlZFJlc3VsdEluZGV4KTsKIH0KIAotdm9pZCBJbmplY3Rl
ZFNjcmlwdDo6ZXZhbHVhdGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcm
IGV4cHJlc3Npb24sIGNvbnN0IFN0cmluZyYgb2JqZWN0R3JvdXAsIGJvb2wgaW5jbHVkZUNvbW1h
bmRMaW5lQVBJLCBib29sIHJldHVybkJ5VmFsdWUsIGJvb2wgZ2VuZXJhdGVQcmV2aWV3LCBib29s
IHNhdmVSZXN1bHQsIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYgcmVz
dWx0LCBPcHRpb25hbDxib29sPiYgd2FzVGhyb3duLCBPcHRpb25hbDxpbnQ+JiBzYXZlZFJlc3Vs
dEluZGV4KQordm9pZCBJbmplY3RlZFNjcmlwdDo6ZXZhbHVhdGUoUHJvdG9jb2w6OkVycm9yU3Ry
aW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBjb25zdCBTdHJpbmcm
IG9iamVjdEdyb3VwLCBib29sIGluY2x1ZGVDb21tYW5kTGluZUFQSSwgYm9vbCByZXR1cm5CeVZh
bHVlLCBib29sIGdlbmVyYXRlUHJldmlldywgYm9vbCBzYXZlUmVzdWx0LCBSZWZQdHI8UHJvdG9j
b2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3VsdCwgT3B0aW9uYWw8Ym9vbD4mIHdhc1Ro
cm93biwgT3B0aW9uYWw8aW50PiYgc2F2ZWRSZXN1bHRJbmRleCkKIHsKICAgICBEZXByZWNhdGVk
OjpTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24oaW5qZWN0ZWRTY3JpcHRPYmplY3QoKSwgImV2
YWx1YXRlIl9zLCBpbnNwZWN0b3JFbnZpcm9ubWVudCgpLT5mdW5jdGlvbkNhbGxIYW5kbGVyKCkp
OwogICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KGV4cHJlc3Npb24pOwpAQCAtOTEsNyArOTEs
NyBAQCB2b2lkIEluamVjdGVkU2NyaXB0Ojphd2FpdFByb21pc2UoY29uc3QgU3RyaW5nJiBwcm9t
aXNlT2JqZWN0SWQsIGJvb2wgcmV0dXJuQnlWYQogICAgIG1ha2VBc3luY0NhbGwoZnVuY3Rpb24s
IFdURk1vdmUoY2FsbGJhY2spKTsKIH0KIAotdm9pZCBJbmplY3RlZFNjcmlwdDo6Y2FsbEZ1bmN0
aW9uT24oRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBj
b25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIGNvbnN0IFN0cmluZyYgYXJndW1lbnRzLCBib29sIHJl
dHVybkJ5VmFsdWUsIGJvb2wgZ2VuZXJhdGVQcmV2aWV3LCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRp
bWU6OlJlbW90ZU9iamVjdD4mIHJlc3VsdCwgT3B0aW9uYWw8Ym9vbD4mIHdhc1Rocm93bikKK3Zv
aWQgSW5qZWN0ZWRTY3JpcHQ6OmNhbGxGdW5jdGlvbk9uKFByb3RvY29sOjpFcnJvclN0cmluZyYg
ZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgb2JqZWN0SWQsIGNvbnN0IFN0cmluZyYgZXhwcmVz
c2lvbiwgY29uc3QgU3RyaW5nJiBhcmd1bWVudHMsIGJvb2wgcmV0dXJuQnlWYWx1ZSwgYm9vbCBn
ZW5lcmF0ZVByZXZpZXcsIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYg
cmVzdWx0LCBPcHRpb25hbDxib29sPiYgd2FzVGhyb3duKQogewogICAgIERlcHJlY2F0ZWQ6OlNj
cmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihpbmplY3RlZFNjcmlwdE9iamVjdCgpLCAiY2FsbEZ1
bmN0aW9uT24iX3MsIGluc3BlY3RvckVudmlyb25tZW50KCktPmZ1bmN0aW9uQ2FsbEhhbmRsZXIo
KSk7CiAgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQob2JqZWN0SWQpOwpAQCAtMTA1LDcgKzEw
NSw3IEBAIHZvaWQgSW5qZWN0ZWRTY3JpcHQ6OmNhbGxGdW5jdGlvbk9uKEVycm9yU3RyaW5nJiBl
cnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBvYmplCiAgICAgQVNTRVJUKCFzYXZlZFJlc3VsdElu
ZGV4KTsKIH0KIAotdm9pZCBJbmplY3RlZFNjcmlwdDo6ZXZhbHVhdGVPbkNhbGxGcmFtZShFcnJv
clN0cmluZyYgZXJyb3JTdHJpbmcsIEpTQzo6SlNWYWx1ZSBjYWxsRnJhbWVzLCBjb25zdCBTdHJp
bmcmIGNhbGxGcmFtZUlkLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIGNvbnN0IFN0cmluZyYg
b2JqZWN0R3JvdXAsIGJvb2wgaW5jbHVkZUNvbW1hbmRMaW5lQVBJLCBib29sIHJldHVybkJ5VmFs
dWUsIGJvb2wgZ2VuZXJhdGVQcmV2aWV3LCBib29sIHNhdmVSZXN1bHQsIFJlZlB0cjxQcm90b2Nv
bDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0LCBPcHRpb25hbDxib29sPiYgd2FzVGhy
b3duLCBPcHRpb25hbDxpbnQ+JiBzYXZlZFJlc3VsdEluZGV4KQordm9pZCBJbmplY3RlZFNjcmlw
dDo6ZXZhbHVhdGVPbkNhbGxGcmFtZShQcm90b2NvbDo6RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5n
LCBKU0M6OkpTVmFsdWUgY2FsbEZyYW1lcywgY29uc3QgU3RyaW5nJiBjYWxsRnJhbWVJZCwgY29u
c3QgU3RyaW5nJiBleHByZXNzaW9uLCBjb25zdCBTdHJpbmcmIG9iamVjdEdyb3VwLCBib29sIGlu
Y2x1ZGVDb21tYW5kTGluZUFQSSwgYm9vbCByZXR1cm5CeVZhbHVlLCBib29sIGdlbmVyYXRlUHJl
dmlldywgYm9vbCBzYXZlUmVzdWx0LCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9i
amVjdD4mIHJlc3VsdCwgT3B0aW9uYWw8Ym9vbD4mIHdhc1Rocm93biwgT3B0aW9uYWw8aW50PiYg
c2F2ZWRSZXN1bHRJbmRleCkKIHsKICAgICBEZXByZWNhdGVkOjpTY3JpcHRGdW5jdGlvbkNhbGwg
ZnVuY3Rpb24oaW5qZWN0ZWRTY3JpcHRPYmplY3QoKSwgImV2YWx1YXRlT25DYWxsRnJhbWUiX3Ms
IGluc3BlY3RvckVudmlyb25tZW50KCktPmZ1bmN0aW9uQ2FsbEhhbmRsZXIoKSk7CiAgICAgZnVu
Y3Rpb24uYXBwZW5kQXJndW1lbnQoY2FsbEZyYW1lcyk7CkBAIC0xMTksNTIgKzExOSw1NSBAQCB2
b2lkIEluamVjdGVkU2NyaXB0OjpldmFsdWF0ZU9uQ2FsbEZyYW1lKEVycm9yU3RyaW5nJiBlcnJv
clN0cmluZywgSlNDOjpKU1ZhbHVlCiAgICAgbWFrZUV2YWxDYWxsKGVycm9yU3RyaW5nLCBmdW5j
dGlvbiwgcmVzdWx0LCB3YXNUaHJvd24sIHNhdmVkUmVzdWx0SW5kZXgpOwogfQogCi12b2lkIElu
amVjdGVkU2NyaXB0OjpnZXRGdW5jdGlvbkRldGFpbHMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5n
LCBjb25zdCBTdHJpbmcmIGZ1bmN0aW9uSWQsIFJlZlB0cjxQcm90b2NvbDo6RGVidWdnZXI6OkZ1
bmN0aW9uRGV0YWlscz4mIHJlc3VsdCkKK3ZvaWQgSW5qZWN0ZWRTY3JpcHQ6OmdldEZ1bmN0aW9u
RGV0YWlscyhQcm90b2NvbDo6RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcm
IGZ1bmN0aW9uSWQsIFJlZlB0cjxQcm90b2NvbDo6RGVidWdnZXI6OkZ1bmN0aW9uRGV0YWlscz4m
IHJlc3VsdCkKIHsKICAgICBEZXByZWNhdGVkOjpTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24o
aW5qZWN0ZWRTY3JpcHRPYmplY3QoKSwgImdldEZ1bmN0aW9uRGV0YWlscyJfcywgaW5zcGVjdG9y
RW52aXJvbm1lbnQoKS0+ZnVuY3Rpb25DYWxsSGFuZGxlcigpKTsKICAgICBmdW5jdGlvbi5hcHBl
bmRBcmd1bWVudChmdW5jdGlvbklkKTsKIAogICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gcmVzdWx0
VmFsdWUgPSBtYWtlQ2FsbChmdW5jdGlvbik7CiAgICAgaWYgKCFyZXN1bHRWYWx1ZSB8fCByZXN1
bHRWYWx1ZS0+dHlwZSgpICE9IEpTT046OlZhbHVlOjpUeXBlOjpPYmplY3QpIHsKLSAgICAgICAg
aWYgKCFyZXN1bHRWYWx1ZS0+YXNTdHJpbmcoZXJyb3JTdHJpbmcpKQorICAgICAgICBlcnJvclN0
cmluZyA9IHJlc3VsdFZhbHVlLT5hc1N0cmluZygpOworICAgICAgICBpZiAoIWVycm9yU3RyaW5n
KQogICAgICAgICAgICAgZXJyb3JTdHJpbmcgPSAiSW50ZXJuYWwgZXJyb3IiX3M7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICByZXN1bHQgPSBCaW5kaW5nVHJhaXRzPFByb3RvY29sOjpE
ZWJ1Z2dlcjo6RnVuY3Rpb25EZXRhaWxzPjo6cnVudGltZUNhc3QoV1RGTW92ZShyZXN1bHRWYWx1
ZSkpOworICAgIHJlc3VsdCA9IFByb3RvY29sOjpCaW5kaW5nVHJhaXRzPFByb3RvY29sOjpEZWJ1
Z2dlcjo6RnVuY3Rpb25EZXRhaWxzPjo6cnVudGltZUNhc3QocmVzdWx0VmFsdWUucmVsZWFzZU5v
bk51bGwoKSk7CiB9CiAKLXZvaWQgSW5qZWN0ZWRTY3JpcHQ6OmZ1bmN0aW9uRGV0YWlscyhFcnJv
clN0cmluZyYgZXJyb3JTdHJpbmcsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgUmVmUHRyPFByb3RvY29s
OjpEZWJ1Z2dlcjo6RnVuY3Rpb25EZXRhaWxzPiYgcmVzdWx0KQordm9pZCBJbmplY3RlZFNjcmlw
dDo6ZnVuY3Rpb25EZXRhaWxzKFByb3RvY29sOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIEpT
Qzo6SlNWYWx1ZSB2YWx1ZSwgUmVmUHRyPFByb3RvY29sOjpEZWJ1Z2dlcjo6RnVuY3Rpb25EZXRh
aWxzPiYgcmVzdWx0KQogewogICAgIERlcHJlY2F0ZWQ6OlNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5j
dGlvbihpbmplY3RlZFNjcmlwdE9iamVjdCgpLCAiZnVuY3Rpb25EZXRhaWxzIl9zLCBpbnNwZWN0
b3JFbnZpcm9ubWVudCgpLT5mdW5jdGlvbkNhbGxIYW5kbGVyKCkpOwogICAgIGZ1bmN0aW9uLmFw
cGVuZEFyZ3VtZW50KHZhbHVlKTsKIAogICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gcmVzdWx0VmFs
dWUgPSBtYWtlQ2FsbChmdW5jdGlvbik7CiAgICAgaWYgKCFyZXN1bHRWYWx1ZSB8fCByZXN1bHRW
YWx1ZS0+dHlwZSgpICE9IEpTT046OlZhbHVlOjpUeXBlOjpPYmplY3QpIHsKLSAgICAgICAgaWYg
KCFyZXN1bHRWYWx1ZS0+YXNTdHJpbmcoZXJyb3JTdHJpbmcpKQorICAgICAgICBlcnJvclN0cmlu
ZyA9IHJlc3VsdFZhbHVlLT5hc1N0cmluZygpOworICAgICAgICBpZiAoIWVycm9yU3RyaW5nKQog
ICAgICAgICAgICAgZXJyb3JTdHJpbmcgPSAiSW50ZXJuYWwgZXJyb3IiX3M7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSAgICByZXN1bHQgPSBCaW5kaW5nVHJhaXRzPFByb3RvY29sOjpEZWJ1
Z2dlcjo6RnVuY3Rpb25EZXRhaWxzPjo6cnVudGltZUNhc3QoV1RGTW92ZShyZXN1bHRWYWx1ZSkp
OworICAgIHJlc3VsdCA9IFByb3RvY29sOjpCaW5kaW5nVHJhaXRzPFByb3RvY29sOjpEZWJ1Z2dl
cjo6RnVuY3Rpb25EZXRhaWxzPjo6cnVudGltZUNhc3QocmVzdWx0VmFsdWUucmVsZWFzZU5vbk51
bGwoKSk7CiB9CiAKLXZvaWQgSW5qZWN0ZWRTY3JpcHQ6OmdldFByZXZpZXcoRXJyb3JTdHJpbmcm
IGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBSZWZQdHI8UHJvdG9jb2w6OlJ1
bnRpbWU6Ok9iamVjdFByZXZpZXc+JiByZXN1bHQpCit2b2lkIEluamVjdGVkU2NyaXB0OjpnZXRQ
cmV2aWV3KFByb3RvY29sOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYg
b2JqZWN0SWQsIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6T2JqZWN0UHJldmlldz4mIHJlc3Vs
dCkKIHsKICAgICBEZXByZWNhdGVkOjpTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24oaW5qZWN0
ZWRTY3JpcHRPYmplY3QoKSwgImdldFByZXZpZXciX3MsIGluc3BlY3RvckVudmlyb25tZW50KCkt
PmZ1bmN0aW9uQ2FsbEhhbmRsZXIoKSk7CiAgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQob2Jq
ZWN0SWQpOwogCiAgICAgUmVmUHRyPEpTT046OlZhbHVlPiByZXN1bHRWYWx1ZSA9IG1ha2VDYWxs
KGZ1bmN0aW9uKTsKICAgICBpZiAoIXJlc3VsdFZhbHVlIHx8IHJlc3VsdFZhbHVlLT50eXBlKCkg
IT0gSlNPTjo6VmFsdWU6OlR5cGU6Ok9iamVjdCkgewotICAgICAgICBpZiAoIXJlc3VsdFZhbHVl
LT5hc1N0cmluZyhlcnJvclN0cmluZykpCisgICAgICAgIGVycm9yU3RyaW5nID0gcmVzdWx0VmFs
dWUtPmFzU3RyaW5nKCk7CisgICAgICAgIGlmICghZXJyb3JTdHJpbmcpCiAgICAgICAgICAgICBl
cnJvclN0cmluZyA9ICJJbnRlcm5hbCBlcnJvciJfczsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAotICAgIHJlc3VsdCA9IEJpbmRpbmdUcmFpdHM8UHJvdG9jb2w6OlJ1bnRpbWU6Ok9iamVjdFBy
ZXZpZXc+OjpydW50aW1lQ2FzdChXVEZNb3ZlKHJlc3VsdFZhbHVlKSk7CisgICAgcmVzdWx0ID0g
UHJvdG9jb2w6OkJpbmRpbmdUcmFpdHM8UHJvdG9jb2w6OlJ1bnRpbWU6Ok9iamVjdFByZXZpZXc+
OjpydW50aW1lQ2FzdChyZXN1bHRWYWx1ZS5yZWxlYXNlTm9uTnVsbCgpKTsKIH0KIAotdm9pZCBJ
bmplY3RlZFNjcmlwdDo6Z2V0UHJvcGVydGllcyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNv
bnN0IFN0cmluZyYgb2JqZWN0SWQsIGJvb2wgb3duUHJvcGVydGllcywgaW50IGZldGNoU3RhcnQs
IGludCBmZXRjaENvdW50LCBib29sIGdlbmVyYXRlUHJldmlldywgUmVmUHRyPEpTT046OkFycmF5
T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OlByb3BlcnR5RGVzY3JpcHRvcj4+JiBwcm9wZXJ0aWVzKQor
dm9pZCBJbmplY3RlZFNjcmlwdDo6Z2V0UHJvcGVydGllcyhQcm90b2NvbDo6RXJyb3JTdHJpbmcm
IGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBib29sIG93blByb3BlcnRpZXMs
IGludCBmZXRjaFN0YXJ0LCBpbnQgZmV0Y2hDb3VudCwgYm9vbCBnZW5lcmF0ZVByZXZpZXcsIFJl
ZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpQcm9wZXJ0eURlc2NyaXB0b3I+
PiYgcHJvcGVydGllcykKIHsKICAgICBBU1NFUlQoZmV0Y2hTdGFydCA+PSAwKTsKICAgICBBU1NF
UlQoZmV0Y2hDb3VudCA+PSAwKTsKQEAgLTE4MiwxMCArMTg1LDEwIEBAIHZvaWQgSW5qZWN0ZWRT
Y3JpcHQ6OmdldFByb3BlcnRpZXMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJp
bmcmIG9iamVjCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBwcm9wZXJ0aWVzID0gQmlu
ZGluZ1RyYWl0czxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpQcm9wZXJ0eURlc2Ny
aXB0b3I+Pjo6cnVudGltZUNhc3QoV1RGTW92ZShyZXN1bHQpKTsKKyAgICBwcm9wZXJ0aWVzID0g
UHJvdG9jb2w6OkJpbmRpbmdUcmFpdHM8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UnVudGltZTo6
UHJvcGVydHlEZXNjcmlwdG9yPj46OnJ1bnRpbWVDYXN0KHJlc3VsdC5yZWxlYXNlTm9uTnVsbCgp
KTsKIH0KIAotdm9pZCBJbmplY3RlZFNjcmlwdDo6Z2V0RGlzcGxheWFibGVQcm9wZXJ0aWVzKEVy
cm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBvYmplY3RJZCwgaW50IGZldGNo
U3RhcnQsIGludCBmZXRjaENvdW50LCBib29sIGdlbmVyYXRlUHJldmlldywgUmVmUHRyPEpTT046
OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OlByb3BlcnR5RGVzY3JpcHRvcj4+JiBwcm9wZXJ0
aWVzKQordm9pZCBJbmplY3RlZFNjcmlwdDo6Z2V0RGlzcGxheWFibGVQcm9wZXJ0aWVzKFByb3Rv
Y29sOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgb2JqZWN0SWQsIGlu
dCBmZXRjaFN0YXJ0LCBpbnQgZmV0Y2hDb3VudCwgYm9vbCBnZW5lcmF0ZVByZXZpZXcsIFJlZlB0
cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpQcm9wZXJ0eURlc2NyaXB0b3I+PiYg
cHJvcGVydGllcykKIHsKICAgICBBU1NFUlQoZmV0Y2hTdGFydCA+PSAwKTsKICAgICBBU1NFUlQo
ZmV0Y2hDb3VudCA+PSAwKTsKQEAgLTIwMiwxMCArMjA1LDEwIEBAIHZvaWQgSW5qZWN0ZWRTY3Jp
cHQ6OmdldERpc3BsYXlhYmxlUHJvcGVydGllcyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNv
bnN0IFN0CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBwcm9wZXJ0aWVzID0gQmluZGlu
Z1RyYWl0czxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpQcm9wZXJ0eURlc2NyaXB0
b3I+Pjo6cnVudGltZUNhc3QoV1RGTW92ZShyZXN1bHQpKTsKKyAgICBwcm9wZXJ0aWVzID0gUHJv
dG9jb2w6OkJpbmRpbmdUcmFpdHM8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UnVudGltZTo6UHJv
cGVydHlEZXNjcmlwdG9yPj46OnJ1bnRpbWVDYXN0KHJlc3VsdC5yZWxlYXNlTm9uTnVsbCgpKTsK
IH0KIAotdm9pZCBJbmplY3RlZFNjcmlwdDo6Z2V0SW50ZXJuYWxQcm9wZXJ0aWVzKEVycm9yU3Ry
aW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBvYmplY3RJZCwgYm9vbCBnZW5lcmF0ZVBy
ZXZpZXcsIFJlZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpJbnRlcm5hbFBy
b3BlcnR5RGVzY3JpcHRvcj4+JiBwcm9wZXJ0aWVzKQordm9pZCBJbmplY3RlZFNjcmlwdDo6Z2V0
SW50ZXJuYWxQcm9wZXJ0aWVzKFByb3RvY29sOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNv
bnN0IFN0cmluZyYgb2JqZWN0SWQsIGJvb2wgZ2VuZXJhdGVQcmV2aWV3LCBSZWZQdHI8SlNPTjo6
QXJyYXlPZjxQcm90b2NvbDo6UnVudGltZTo6SW50ZXJuYWxQcm9wZXJ0eURlc2NyaXB0b3I+PiYg
cHJvcGVydGllcykKIHsKICAgICBEZXByZWNhdGVkOjpTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rp
b24oaW5qZWN0ZWRTY3JpcHRPYmplY3QoKSwgImdldEludGVybmFsUHJvcGVydGllcyJfcywgaW5z
cGVjdG9yRW52aXJvbm1lbnQoKS0+ZnVuY3Rpb25DYWxsSGFuZGxlcigpKTsKICAgICBmdW5jdGlv
bi5hcHBlbmRBcmd1bWVudChvYmplY3RJZCk7CkBAIC0yMTcsMTEgKzIyMCwxMiBAQCB2b2lkIElu
amVjdGVkU2NyaXB0OjpnZXRJbnRlcm5hbFByb3BlcnRpZXMoRXJyb3JTdHJpbmcmIGVycm9yU3Ry
aW5nLCBjb25zdCBTdHJpbgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXV0byBhcnJh
eSA9IEJpbmRpbmdUcmFpdHM8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UnVudGltZTo6SW50ZXJu
YWxQcm9wZXJ0eURlc2NyaXB0b3I+Pjo6cnVudGltZUNhc3QoV1RGTW92ZShyZXN1bHQpKTsKLSAg
ICBwcm9wZXJ0aWVzID0gYXJyYXktPmxlbmd0aCgpID4gMCA/IGFycmF5IDogbnVsbHB0cjsKKyAg
ICBhdXRvIGFycmF5ID0gUHJvdG9jb2w6OkJpbmRpbmdUcmFpdHM8SlNPTjo6QXJyYXlPZjxQcm90
b2NvbDo6UnVudGltZTo6SW50ZXJuYWxQcm9wZXJ0eURlc2NyaXB0b3I+Pjo6cnVudGltZUNhc3Qo
cmVzdWx0LnJlbGVhc2VOb25OdWxsKCkpOworICAgIGlmIChhcnJheS0+bGVuZ3RoKCkpCisgICAg
ICAgIHByb3BlcnRpZXMgPSBXVEZNb3ZlKGFycmF5KTsKIH0KIAotdm9pZCBJbmplY3RlZFNjcmlw
dDo6Z2V0Q29sbGVjdGlvbkVudHJpZXMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBT
dHJpbmcmIG9iamVjdElkLCBjb25zdCBTdHJpbmcmIG9iamVjdEdyb3VwLCBpbnQgZmV0Y2hTdGFy
dCwgaW50IGZldGNoQ291bnQsIFJlZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1l
OjpDb2xsZWN0aW9uRW50cnk+PiYgZW50cmllcykKK3ZvaWQgSW5qZWN0ZWRTY3JpcHQ6OmdldENv
bGxlY3Rpb25FbnRyaWVzKFByb3RvY29sOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0
IFN0cmluZyYgb2JqZWN0SWQsIGNvbnN0IFN0cmluZyYgb2JqZWN0R3JvdXAsIGludCBmZXRjaFN0
YXJ0LCBpbnQgZmV0Y2hDb3VudCwgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRp
bWU6OkNvbGxlY3Rpb25FbnRyeT4+JiBlbnRyaWVzKQogewogICAgIEFTU0VSVChmZXRjaFN0YXJ0
ID49IDApOwogICAgIEFTU0VSVChmZXRjaENvdW50ID49IDApOwpAQCAtMjM4LDEwICsyNDIsMTAg
QEAgdm9pZCBJbmplY3RlZFNjcmlwdDo6Z2V0Q29sbGVjdGlvbkVudHJpZXMoRXJyb3JTdHJpbmcm
IGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IGVudHJpZXMgPSBCaW5kaW5nVHJhaXRzPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6
OkNvbGxlY3Rpb25FbnRyeT4+OjpydW50aW1lQ2FzdChXVEZNb3ZlKHJlc3VsdCkpOworICAgIGVu
dHJpZXMgPSBQcm90b2NvbDo6QmluZGluZ1RyYWl0czxKU09OOjpBcnJheU9mPFByb3RvY29sOjpS
dW50aW1lOjpDb2xsZWN0aW9uRW50cnk+Pjo6cnVudGltZUNhc3QocmVzdWx0LnJlbGVhc2VOb25O
dWxsKCkpOwogfQogCi12b2lkIEluamVjdGVkU2NyaXB0OjpzYXZlUmVzdWx0KEVycm9yU3RyaW5n
JiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBjYWxsQXJndW1lbnRKU09OLCBPcHRpb25hbDxp
bnQ+JiBzYXZlZFJlc3VsdEluZGV4KQordm9pZCBJbmplY3RlZFNjcmlwdDo6c2F2ZVJlc3VsdChQ
cm90b2NvbDo6RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGNhbGxBcmd1
bWVudEpTT04sIE9wdGlvbmFsPGludD4mIHNhdmVkUmVzdWx0SW5kZXgpCiB7CiAgICAgRGVwcmVj
YXRlZDo6U2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKGluamVjdGVkU2NyaXB0T2JqZWN0KCks
ICJzYXZlUmVzdWx0Il9zLCBpbnNwZWN0b3JFbnZpcm9ubWVudCgpLT5mdW5jdGlvbkNhbGxIYW5k
bGVyKCkpOwogICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KGNhbGxBcmd1bWVudEpTT04pOwpA
QCAtMjUyLDkgKzI1Niw3IEBAIHZvaWQgSW5qZWN0ZWRTY3JpcHQ6OnNhdmVSZXN1bHQoRXJyb3JT
dHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGNhbGxBcmd1CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKLSAgICBpbnQgcmVzdWx0SW5kZXggPSAwOwotICAgIGlmIChyZXN1bHQtPmFz
SW50ZWdlcihyZXN1bHRJbmRleCkgJiYgcmVzdWx0SW5kZXggPiAwKQotICAgICAgICBzYXZlZFJl
c3VsdEluZGV4ID0gcmVzdWx0SW5kZXg7CisgICAgc2F2ZWRSZXN1bHRJbmRleCA9IHJlc3VsdC0+
YXNJbnRlZ2VyKCk7CiB9CiAKIFJlZjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpEZWJ1Z2dlcjo6
Q2FsbEZyYW1lPj4gSW5qZWN0ZWRTY3JpcHQ6OndyYXBDYWxsRnJhbWVzKEpTQzo6SlNWYWx1ZSBj
YWxsRnJhbWVzKSBjb25zdApAQCAtMjY5LDggKzI3MSw4IEBAIFJlZjxKU09OOjpBcnJheU9mPFBy
b3RvY29sOjpEZWJ1Z2dlcjo6Q2FsbEZyYW1lPj4gSW5qZWN0ZWRTY3JpcHQ6OndyYXBDYWxsRnJh
bWVzCiAgICAgICAgIHJldHVybiBKU09OOjpBcnJheU9mPFByb3RvY29sOjpEZWJ1Z2dlcjo6Q2Fs
bEZyYW1lPjo6Y3JlYXRlKCk7CiAKICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHJlc3VsdCA9IHRv
SW5zcGVjdG9yVmFsdWUoZ2xvYmFsT2JqZWN0KCksIGNhbGxSZXN1bHQudmFsdWUoKSk7Ci0gICAg
aWYgKHJlc3VsdC0+dHlwZSgpID09IEpTT046OlZhbHVlOjpUeXBlOjpBcnJheSkKLSAgICAgICAg
cmV0dXJuIEJpbmRpbmdUcmFpdHM8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6RGVidWdnZXI6OkNh
bGxGcmFtZT4+OjpydW50aW1lQ2FzdChXVEZNb3ZlKHJlc3VsdCkpLnJlbGVhc2VOb25OdWxsKCk7
CisgICAgaWYgKHJlc3VsdCAmJiByZXN1bHQtPnR5cGUoKSA9PSBKU09OOjpWYWx1ZTo6VHlwZTo6
QXJyYXkpCisgICAgICAgIHJldHVybiBQcm90b2NvbDo6QmluZGluZ1RyYWl0czxKU09OOjpBcnJh
eU9mPFByb3RvY29sOjpEZWJ1Z2dlcjo6Q2FsbEZyYW1lPj46OnJ1bnRpbWVDYXN0KHJlc3VsdC5y
ZWxlYXNlTm9uTnVsbCgpKTsKIAogICAgIHJldHVybiBKU09OOjpBcnJheU9mPFByb3RvY29sOjpE
ZWJ1Z2dlcjo6Q2FsbEZyYW1lPjo6Y3JlYXRlKCk7CiB9CkBAIC0yODgsMTEgKzI5MCwxNSBAQCBS
ZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4gSW5qZWN0ZWRTY3JpcHQ6Ondy
YXBPYmplY3QoSlNDOjpKU1ZhbHVlCiAgICAgaWYgKCFjYWxsUmVzdWx0KQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKIAotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHJlc3VsdE9iamVjdDsKLSAg
ICBib29sIGNhc3RTdWNjZWVkZWQgPSB0b0luc3BlY3RvclZhbHVlKGdsb2JhbE9iamVjdCgpLCBj
YWxsUmVzdWx0LnZhbHVlKCkpLT5hc09iamVjdChyZXN1bHRPYmplY3QpOwotICAgIEFTU0VSVF9V
TlVTRUQoY2FzdFN1Y2NlZWRlZCwgY2FzdFN1Y2NlZWRlZCk7CisgICAgYXV0byByZXN1bHRWYWx1
ZSA9IHRvSW5zcGVjdG9yVmFsdWUoZ2xvYmFsT2JqZWN0KCksIGNhbGxSZXN1bHQudmFsdWUoKSk7
CisgICAgaWYgKCFyZXN1bHRWYWx1ZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBy
ZXR1cm4gQmluZGluZ1RyYWl0czxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0Pjo6cnVu
dGltZUNhc3QocmVzdWx0T2JqZWN0KTsKKyAgICBhdXRvIHJlc3VsdE9iamVjdCA9IHJlc3VsdFZh
bHVlLT5hc09iamVjdCgpOworICAgIGlmICghcmVzdWx0T2JqZWN0KQorICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKworICAgIHJldHVybiBQcm90b2NvbDo6QmluZGluZ1RyYWl0czxQcm90b2NvbDo6
UnVudGltZTo6UmVtb3RlT2JqZWN0Pjo6cnVudGltZUNhc3QocmVzdWx0T2JqZWN0LnJlbGVhc2VO
b25OdWxsKCkpOwogfQogCiBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4g
SW5qZWN0ZWRTY3JpcHQ6OndyYXBKU09OU3RyaW5nKGNvbnN0IFN0cmluZyYganNvbiwgY29uc3Qg
U3RyaW5nJiBncm91cE5hbWUsIGJvb2wgZ2VuZXJhdGVQcmV2aWV3KSBjb25zdApAQCAtMzEwLDEx
ICszMTYsMTUgQEAgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+IEluamVj
dGVkU2NyaXB0Ojp3cmFwSlNPTlN0cmluZyhjb25zdCBTdHIKICAgICBpZiAoY2FsbFJlc3VsdC52
YWx1ZSgpLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIFJlZlB0cjxK
U09OOjpPYmplY3Q+IHJlc3VsdE9iamVjdDsKLSAgICBib29sIGNhc3RTdWNjZWVkZWQgPSB0b0lu
c3BlY3RvclZhbHVlKGdsb2JhbE9iamVjdCgpLCBjYWxsUmVzdWx0LnZhbHVlKCkpLT5hc09iamVj
dChyZXN1bHRPYmplY3QpOwotICAgIEFTU0VSVF9VTlVTRUQoY2FzdFN1Y2NlZWRlZCwgY2FzdFN1
Y2NlZWRlZCk7CisgICAgYXV0byByZXN1bHRWYWx1ZSA9IHRvSW5zcGVjdG9yVmFsdWUoZ2xvYmFs
T2JqZWN0KCksIGNhbGxSZXN1bHQudmFsdWUoKSk7CisgICAgaWYgKCFyZXN1bHRWYWx1ZSkKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gQmluZGluZ1RyYWl0czxQcm90b2Nv
bDo6UnVudGltZTo6UmVtb3RlT2JqZWN0Pjo6cnVudGltZUNhc3QocmVzdWx0T2JqZWN0KTsKKyAg
ICBhdXRvIHJlc3VsdE9iamVjdCA9IHJlc3VsdFZhbHVlLT5hc09iamVjdCgpOworICAgIGlmICgh
cmVzdWx0T2JqZWN0KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBQcm90
b2NvbDo6QmluZGluZ1RyYWl0czxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0Pjo6cnVu
dGltZUNhc3QocmVzdWx0T2JqZWN0LnJlbGVhc2VOb25OdWxsKCkpOwogfQogCiBSZWZQdHI8UHJv
dG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4gSW5qZWN0ZWRTY3JpcHQ6OndyYXBUYWJsZShK
U0M6OkpTVmFsdWUgdGFibGUsIEpTQzo6SlNWYWx1ZSBjb2x1bW5zKSBjb25zdApAQCAtMzMyLDEx
ICszNDIsMTUgQEAgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+IEluamVj
dGVkU2NyaXB0Ojp3cmFwVGFibGUoSlNDOjpKU1ZhbHVlIHQKICAgICBpZiAoIWNhbGxSZXN1bHQp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcmVz
dWx0T2JqZWN0OwotICAgIGJvb2wgY2FzdFN1Y2NlZWRlZCA9IHRvSW5zcGVjdG9yVmFsdWUoZ2xv
YmFsT2JqZWN0KCksIGNhbGxSZXN1bHQudmFsdWUoKSktPmFzT2JqZWN0KHJlc3VsdE9iamVjdCk7
Ci0gICAgQVNTRVJUX1VOVVNFRChjYXN0U3VjY2VlZGVkLCBjYXN0U3VjY2VlZGVkKTsKKyAgICBh
dXRvIHJlc3VsdFZhbHVlID0gdG9JbnNwZWN0b3JWYWx1ZShnbG9iYWxPYmplY3QoKSwgY2FsbFJl
c3VsdC52YWx1ZSgpKTsKKyAgICBpZiAoIXJlc3VsdFZhbHVlKQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKIAotICAgIHJldHVybiBCaW5kaW5nVHJhaXRzPFByb3RvY29sOjpSdW50aW1lOjpSZW1v
dGVPYmplY3Q+OjpydW50aW1lQ2FzdChyZXN1bHRPYmplY3QpOworICAgIGF1dG8gcmVzdWx0T2Jq
ZWN0ID0gcmVzdWx0VmFsdWUtPmFzT2JqZWN0KCk7CisgICAgaWYgKCFyZXN1bHRPYmplY3QpCisg
ICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuIFByb3RvY29sOjpCaW5kaW5nVHJh
aXRzPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+OjpydW50aW1lQ2FzdChyZXN1bHRP
YmplY3QucmVsZWFzZU5vbk51bGwoKSk7CiB9CiAKIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6
T2JqZWN0UHJldmlldz4gSW5qZWN0ZWRTY3JpcHQ6OnByZXZpZXdWYWx1ZShKU0M6OkpTVmFsdWUg
dmFsdWUpIGNvbnN0CkBAIC0zNDksMTEgKzM2MywxNSBAQCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRp
bWU6Ok9iamVjdFByZXZpZXc+IEluamVjdGVkU2NyaXB0OjpwcmV2aWV3VmFsdWUoSlNDOjpKU1Zh
bAogICAgIGlmICghY2FsbFJlc3VsdCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBS
ZWZQdHI8SlNPTjo6T2JqZWN0PiByZXN1bHRPYmplY3Q7Ci0gICAgYm9vbCBjYXN0U3VjY2VlZGVk
ID0gdG9JbnNwZWN0b3JWYWx1ZShnbG9iYWxPYmplY3QoKSwgY2FsbFJlc3VsdC52YWx1ZSgpKS0+
YXNPYmplY3QocmVzdWx0T2JqZWN0KTsKLSAgICBBU1NFUlRfVU5VU0VEKGNhc3RTdWNjZWVkZWQs
IGNhc3RTdWNjZWVkZWQpOworICAgIGF1dG8gcmVzdWx0VmFsdWUgPSB0b0luc3BlY3RvclZhbHVl
KGdsb2JhbE9iamVjdCgpLCBjYWxsUmVzdWx0LnZhbHVlKCkpOworICAgIGlmICghcmVzdWx0VmFs
dWUpCisgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJuIEJpbmRpbmdUcmFpdHM8
UHJvdG9jb2w6OlJ1bnRpbWU6Ok9iamVjdFByZXZpZXc+OjpydW50aW1lQ2FzdChyZXN1bHRPYmpl
Y3QpOworICAgIGF1dG8gcmVzdWx0T2JqZWN0ID0gcmVzdWx0VmFsdWUtPmFzT2JqZWN0KCk7Cisg
ICAgaWYgKCFyZXN1bHRPYmplY3QpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0
dXJuIFByb3RvY29sOjpCaW5kaW5nVHJhaXRzPFByb3RvY29sOjpSdW50aW1lOjpPYmplY3RQcmV2
aWV3Pjo6cnVudGltZUNhc3QocmVzdWx0T2JqZWN0LnJlbGVhc2VOb25OdWxsKCkpOwogfQogCiB2
b2lkIEluamVjdGVkU2NyaXB0OjpzZXRFdmVudFZhbHVlKEpTQzo6SlNWYWx1ZSB2YWx1ZSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHQu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHQuaAppbmRl
eCBjZGVlNDVmMmQ2YjMzNzdmMWUwNTIzY2ZlNDAxYWUyOGJjZjJkZjZmLi5kNjNhZWYwMjU5OTY0
ODg0NmM2ODM2MTVjYjU2YzY0M2MzODliMWE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdC5oCkBAIC01OSwyMCArNTksMjAgQEAgcHVibGlj
OgogICAgICAgICBib29sIHNhdmVSZXN1bHQgeyBmYWxzZSB9OwogICAgICAgICBWZWN0b3I8SlND
OjpKU1ZhbHVlPiBhcmdzOwogICAgIH07Ci0gICAgdm9pZCBleGVjdXRlKEVycm9yU3RyaW5nJiwg
Y29uc3QgU3RyaW5nJiBmdW5jdGlvblN0cmluZywgRXhlY3V0ZU9wdGlvbnMmJiwgUmVmUHRyPFBy
b3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiByZXN1bHQsIE9wdGlvbmFsPGJvb2w+JiB3
YXNUaHJvd24sIE9wdGlvbmFsPGludD4mIHNhdmVkUmVzdWx0SW5kZXgpOworICAgIHZvaWQgZXhl
Y3V0ZShQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGZ1bmN0aW9uU3RyaW5n
LCBFeGVjdXRlT3B0aW9ucyYmLCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVj
dD4mIHJlc3VsdCwgT3B0aW9uYWw8Ym9vbD4mIHdhc1Rocm93biwgT3B0aW9uYWw8aW50PiYgc2F2
ZWRSZXN1bHRJbmRleCk7CiAKLSAgICB2b2lkIGV2YWx1YXRlKEVycm9yU3RyaW5nJiwgY29uc3Qg
U3RyaW5nJiBleHByZXNzaW9uLCBjb25zdCBTdHJpbmcmIG9iamVjdEdyb3VwLCBib29sIGluY2x1
ZGVDb21tYW5kTGluZUFQSSwgYm9vbCByZXR1cm5CeVZhbHVlLCBib29sIGdlbmVyYXRlUHJldmll
dywgYm9vbCBzYXZlUmVzdWx0LCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVj
dD4mIHJlc3VsdCwgT3B0aW9uYWw8Ym9vbD4mIHdhc1Rocm93biwgT3B0aW9uYWw8aW50PiYgc2F2
ZWRSZXN1bHRJbmRleCk7CisgICAgdm9pZCBldmFsdWF0ZShQcm90b2NvbDo6RXJyb3JTdHJpbmcm
LCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIGNvbnN0IFN0cmluZyYgb2JqZWN0R3JvdXAsIGJv
b2wgaW5jbHVkZUNvbW1hbmRMaW5lQVBJLCBib29sIHJldHVybkJ5VmFsdWUsIGJvb2wgZ2VuZXJh
dGVQcmV2aWV3LCBib29sIHNhdmVSZXN1bHQsIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVt
b3RlT2JqZWN0PiYgcmVzdWx0LCBPcHRpb25hbDxib29sPiYgd2FzVGhyb3duLCBPcHRpb25hbDxp
bnQ+JiBzYXZlZFJlc3VsdEluZGV4KTsKICAgICB2b2lkIGF3YWl0UHJvbWlzZShjb25zdCBTdHJp
bmcmIHByb21pc2VPYmplY3RJZCwgYm9vbCByZXR1cm5CeVZhbHVlLCBib29sIGdlbmVyYXRlUHJl
dmlldywgYm9vbCBzYXZlUmVzdWx0LCBBc3luY0NhbGxDYWxsYmFjayYmKTsKLSAgICB2b2lkIGV2
YWx1YXRlT25DYWxsRnJhbWUoRXJyb3JTdHJpbmcmLCBKU0M6OkpTVmFsdWUgY2FsbEZyYW1lcywg
Y29uc3QgU3RyaW5nJiBjYWxsRnJhbWVJZCwgY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBjb25z
dCBTdHJpbmcmIG9iamVjdEdyb3VwLCBib29sIGluY2x1ZGVDb21tYW5kTGluZUFQSSwgYm9vbCBy
ZXR1cm5CeVZhbHVlLCBib29sIGdlbmVyYXRlUHJldmlldywgYm9vbCBzYXZlUmVzdWx0LCBSZWZQ
dHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3VsdCwgT3B0aW9uYWw8Ym9v
bD4mIHdhc1Rocm93biwgT3B0aW9uYWw8aW50PiYgc2F2ZWRSZXN1bHRJbmRleCk7Ci0gICAgdm9p
ZCBjYWxsRnVuY3Rpb25PbihFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgb2JqZWN0SWQsIGNv
bnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgY29uc3QgU3RyaW5nJiBhcmd1bWVudHMsIGJvb2wgcmV0
dXJuQnlWYWx1ZSwgYm9vbCBnZW5lcmF0ZVByZXZpZXcsIFJlZlB0cjxQcm90b2NvbDo6UnVudGlt
ZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0LCBPcHRpb25hbDxib29sPiYgd2FzVGhyb3duKTsKLSAg
ICB2b2lkIGdldEZ1bmN0aW9uRGV0YWlscyhFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgZnVu
Y3Rpb25JZCwgUmVmUHRyPFByb3RvY29sOjpEZWJ1Z2dlcjo6RnVuY3Rpb25EZXRhaWxzPiYgcmVz
dWx0KTsKLSAgICB2b2lkIGZ1bmN0aW9uRGV0YWlscyhFcnJvclN0cmluZyYsIEpTQzo6SlNWYWx1
ZSwgUmVmUHRyPFByb3RvY29sOjpEZWJ1Z2dlcjo6RnVuY3Rpb25EZXRhaWxzPiYgcmVzdWx0KTsK
LSAgICB2b2lkIGdldFByZXZpZXcoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIG9iamVjdElk
LCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6Ok9iamVjdFByZXZpZXc+JiByZXN1bHQpOwotICAg
IHZvaWQgZ2V0UHJvcGVydGllcyhFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgb2JqZWN0SWQs
IGJvb2wgb3duUHJvcGVydGllcywgaW50IGZldGNoU3RhcnQsIGludCBmZXRjaENvdW50LCBib29s
IGdlbmVyYXRlUHJldmlldywgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6
OlByb3BlcnR5RGVzY3JpcHRvcj4+JiByZXN1bHQpOwotICAgIHZvaWQgZ2V0RGlzcGxheWFibGVQ
cm9wZXJ0aWVzKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBvYmplY3RJZCwgaW50IGZldGNo
U3RhcnQsIGludCBmZXRjaENvdW50LCBib29sIGdlbmVyYXRlUHJldmlldywgUmVmUHRyPEpTT046
OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OlByb3BlcnR5RGVzY3JpcHRvcj4+JiByZXN1bHQp
OwotICAgIHZvaWQgZ2V0SW50ZXJuYWxQcm9wZXJ0aWVzKEVycm9yU3RyaW5nJiwgY29uc3QgU3Ry
aW5nJiBvYmplY3RJZCwgYm9vbCBnZW5lcmF0ZVByZXZpZXcsIFJlZlB0cjxKU09OOjpBcnJheU9m
PFByb3RvY29sOjpSdW50aW1lOjpJbnRlcm5hbFByb3BlcnR5RGVzY3JpcHRvcj4+JiByZXN1bHQp
OwotICAgIHZvaWQgZ2V0Q29sbGVjdGlvbkVudHJpZXMoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJp
bmcmIG9iamVjdElkLCBjb25zdCBTdHJpbmcmIG9iamVjdEdyb3VwLCBpbnQgZmV0Y2hTdGFydCwg
aW50IGZldGNoQ291bnQsIFJlZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpD
b2xsZWN0aW9uRW50cnk+PiYgZW50cmllcyk7Ci0gICAgdm9pZCBzYXZlUmVzdWx0KEVycm9yU3Ry
aW5nJiwgY29uc3QgU3RyaW5nJiBjYWxsQXJndW1lbnRKU09OLCBPcHRpb25hbDxpbnQ+JiBzYXZl
ZFJlc3VsdEluZGV4KTsKKyAgICB2b2lkIGV2YWx1YXRlT25DYWxsRnJhbWUoUHJvdG9jb2w6OkVy
cm9yU3RyaW5nJiwgSlNDOjpKU1ZhbHVlIGNhbGxGcmFtZXMsIGNvbnN0IFN0cmluZyYgY2FsbEZy
YW1lSWQsIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91
cCwgYm9vbCBpbmNsdWRlQ29tbWFuZExpbmVBUEksIGJvb2wgcmV0dXJuQnlWYWx1ZSwgYm9vbCBn
ZW5lcmF0ZVByZXZpZXcsIGJvb2wgc2F2ZVJlc3VsdCwgUmVmUHRyPFByb3RvY29sOjpSdW50aW1l
OjpSZW1vdGVPYmplY3Q+JiByZXN1bHQsIE9wdGlvbmFsPGJvb2w+JiB3YXNUaHJvd24sIE9wdGlv
bmFsPGludD4mIHNhdmVkUmVzdWx0SW5kZXgpOworICAgIHZvaWQgY2FsbEZ1bmN0aW9uT24oUHJv
dG9jb2w6OkVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBvYmplY3RJZCwgY29uc3QgU3RyaW5n
JiBleHByZXNzaW9uLCBjb25zdCBTdHJpbmcmIGFyZ3VtZW50cywgYm9vbCByZXR1cm5CeVZhbHVl
LCBib29sIGdlbmVyYXRlUHJldmlldywgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVP
YmplY3Q+JiByZXN1bHQsIE9wdGlvbmFsPGJvb2w+JiB3YXNUaHJvd24pOworICAgIHZvaWQgZ2V0
RnVuY3Rpb25EZXRhaWxzKFByb3RvY29sOjpFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgZnVu
Y3Rpb25JZCwgUmVmUHRyPFByb3RvY29sOjpEZWJ1Z2dlcjo6RnVuY3Rpb25EZXRhaWxzPiYgcmVz
dWx0KTsKKyAgICB2b2lkIGZ1bmN0aW9uRGV0YWlscyhQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBK
U0M6OkpTVmFsdWUsIFJlZlB0cjxQcm90b2NvbDo6RGVidWdnZXI6OkZ1bmN0aW9uRGV0YWlscz4m
IHJlc3VsdCk7CisgICAgdm9pZCBnZXRQcmV2aWV3KFByb3RvY29sOjpFcnJvclN0cmluZyYsIGNv
bnN0IFN0cmluZyYgb2JqZWN0SWQsIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6T2JqZWN0UHJl
dmlldz4mIHJlc3VsdCk7CisgICAgdm9pZCBnZXRQcm9wZXJ0aWVzKFByb3RvY29sOjpFcnJvclN0
cmluZyYsIGNvbnN0IFN0cmluZyYgb2JqZWN0SWQsIGJvb2wgb3duUHJvcGVydGllcywgaW50IGZl
dGNoU3RhcnQsIGludCBmZXRjaENvdW50LCBib29sIGdlbmVyYXRlUHJldmlldywgUmVmUHRyPEpT
T046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OlByb3BlcnR5RGVzY3JpcHRvcj4+JiByZXN1
bHQpOworICAgIHZvaWQgZ2V0RGlzcGxheWFibGVQcm9wZXJ0aWVzKFByb3RvY29sOjpFcnJvclN0
cmluZyYsIGNvbnN0IFN0cmluZyYgb2JqZWN0SWQsIGludCBmZXRjaFN0YXJ0LCBpbnQgZmV0Y2hD
b3VudCwgYm9vbCBnZW5lcmF0ZVByZXZpZXcsIFJlZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29s
OjpSdW50aW1lOjpQcm9wZXJ0eURlc2NyaXB0b3I+PiYgcmVzdWx0KTsKKyAgICB2b2lkIGdldElu
dGVybmFsUHJvcGVydGllcyhQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIG9i
amVjdElkLCBib29sIGdlbmVyYXRlUHJldmlldywgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9j
b2w6OlJ1bnRpbWU6OkludGVybmFsUHJvcGVydHlEZXNjcmlwdG9yPj4mIHJlc3VsdCk7CisgICAg
dm9pZCBnZXRDb2xsZWN0aW9uRW50cmllcyhQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBjb25zdCBT
dHJpbmcmIG9iamVjdElkLCBjb25zdCBTdHJpbmcmIG9iamVjdEdyb3VwLCBpbnQgZmV0Y2hTdGFy
dCwgaW50IGZldGNoQ291bnQsIFJlZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1l
OjpDb2xsZWN0aW9uRW50cnk+PiYgZW50cmllcyk7CisgICAgdm9pZCBzYXZlUmVzdWx0KFByb3Rv
Y29sOjpFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgY2FsbEFyZ3VtZW50SlNPTiwgT3B0aW9u
YWw8aW50PiYgc2F2ZWRSZXN1bHRJbmRleCk7CiAKICAgICBSZWY8SlNPTjo6QXJyYXlPZjxQcm90
b2NvbDo6RGVidWdnZXI6OkNhbGxGcmFtZT4+IHdyYXBDYWxsRnJhbWVzKEpTQzo6SlNWYWx1ZSkg
Y29uc3Q7CiAgICAgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+IHdyYXBP
YmplY3QoSlNDOjpKU1ZhbHVlLCBjb25zdCBTdHJpbmcmIGdyb3VwTmFtZSwgYm9vbCBnZW5lcmF0
ZVByZXZpZXcgPSBmYWxzZSkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0QmFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0QmFzZS5jcHAKaW5kZXggNzU2OWY1YjVkOTc1ODA4
ODI0ZjY0ZWIyZWYwYTQwNmI2NGE0ZDkzOS4uMDkwMTY2YTkxZmM2NmFkMWNkZTcxODE5NTNjZjQ3
NzNmZjY2ZjA4ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9J
bmplY3RlZFNjcmlwdEJhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3IvSW5qZWN0ZWRTY3JpcHRCYXNlLmNwcApAQCAtMTAwLDcgKzEwMCw3IEBAIFJlZjxKU09OOjpW
YWx1ZT4gSW5qZWN0ZWRTY3JpcHRCYXNlOjptYWtlQ2FsbChEZXByZWNhdGVkOjpTY3JpcHRGdW5j
dGlvbkNhbGwmIGZ1CiAgICAgcmV0dXJuIHJlc3VsdEpTT05WYWx1ZS5yZWxlYXNlTm9uTnVsbCgp
OwogfQogCi12b2lkIEluamVjdGVkU2NyaXB0QmFzZTo6bWFrZUV2YWxDYWxsKEVycm9yU3RyaW5n
JiBlcnJvclN0cmluZywgRGVwcmVjYXRlZDo6U2NyaXB0RnVuY3Rpb25DYWxsJiBmdW5jdGlvbiwg
UmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiBvdXRfcmVzdWx0T2JqZWN0
LCBPcHRpb25hbDxib29sPiYgb3V0X3dhc1Rocm93biwgT3B0aW9uYWw8aW50PiYgb3V0X3NhdmVk
UmVzdWx0SW5kZXgpCit2b2lkIEluamVjdGVkU2NyaXB0QmFzZTo6bWFrZUV2YWxDYWxsKFByb3Rv
Y29sOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIERlcHJlY2F0ZWQ6OlNjcmlwdEZ1bmN0aW9u
Q2FsbCYgZnVuY3Rpb24sIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYg
b3V0X3Jlc3VsdE9iamVjdCwgT3B0aW9uYWw8Ym9vbD4mIG91dF93YXNUaHJvd24sIE9wdGlvbmFs
PGludD4mIG91dF9zYXZlZFJlc3VsdEluZGV4KQogewogICAgIGNoZWNrQ2FsbFJlc3VsdChlcnJv
clN0cmluZywgbWFrZUNhbGwoZnVuY3Rpb24pLCBvdXRfcmVzdWx0T2JqZWN0LCBvdXRfd2FzVGhy
b3duLCBvdXRfc2F2ZWRSZXN1bHRJbmRleCk7CiB9CkBAIC0xNDMsNyArMTQzLDcgQEAgdm9pZCBJ
bmplY3RlZFNjcmlwdEJhc2U6Om1ha2VBc3luY0NhbGwoRGVwcmVjYXRlZDo6U2NyaXB0RnVuY3Rp
b25DYWxsJiBmdW5jdGlvbiwKICAgICB9CiB9CiAKLXZvaWQgSW5qZWN0ZWRTY3JpcHRCYXNlOjpj
aGVja0NhbGxSZXN1bHQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBSZWZQdHI8SlNPTjo6VmFs
dWU+IHJlc3VsdCwgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiBvdXRf
cmVzdWx0T2JqZWN0LCBPcHRpb25hbDxib29sPiYgb3V0X3dhc1Rocm93biwgT3B0aW9uYWw8aW50
PiYgb3V0X3NhdmVkUmVzdWx0SW5kZXgpCit2b2lkIEluamVjdGVkU2NyaXB0QmFzZTo6Y2hlY2tD
YWxsUmVzdWx0KFByb3RvY29sOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIFJlZlB0cjxKU09O
OjpWYWx1ZT4gcmVzdWx0LCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4m
IG91dF9yZXN1bHRPYmplY3QsIE9wdGlvbmFsPGJvb2w+JiBvdXRfd2FzVGhyb3duLCBPcHRpb25h
bDxpbnQ+JiBvdXRfc2F2ZWRSZXN1bHRJbmRleCkKIHsKICAgICBpZiAoIXJlc3VsdCkgewogICAg
ICAgICBlcnJvclN0cmluZyA9ICJJbnRlcm5hbCBlcnJvcjogcmVzdWx0IHZhbHVlIGlzIGVtcHR5
Il9zOwpAQCAtMTUxLDQ5ICsxNTEsNDIgQEAgdm9pZCBJbmplY3RlZFNjcmlwdEJhc2U6OmNoZWNr
Q2FsbFJlc3VsdChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIFJlZlB0cjxKU09OOjoKICAgICB9
CiAKICAgICBpZiAocmVzdWx0LT50eXBlKCkgPT0gSlNPTjo6VmFsdWU6OlR5cGU6OlN0cmluZykg
ewotICAgICAgICByZXN1bHQtPmFzU3RyaW5nKGVycm9yU3RyaW5nKTsKLSAgICAgICAgQVNTRVJU
KGVycm9yU3RyaW5nLmxlbmd0aCgpKTsKKyAgICAgICAgZXJyb3JTdHJpbmcgPSByZXN1bHQtPmFz
U3RyaW5nKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiByZXN1bHRUdXBsZTsKLSAgICBpZiAoIXJlc3VsdC0+YXNPYmplY3QocmVzdWx0VHVwbGUp
KSB7CisgICAgYXV0byByZXN1bHRUdXBsZSA9IHJlc3VsdC0+YXNPYmplY3QoKTsKKyAgICBpZiAo
IXJlc3VsdFR1cGxlKSB7CiAgICAgICAgIGVycm9yU3RyaW5nID0gIkludGVybmFsIGVycm9yOiBy
ZXN1bHQgaXMgbm90IGFuIE9iamVjdCJfczsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IFJlZlB0cjxKU09OOjpPYmplY3Q+IHJlc3VsdE9iamVjdDsKLSAgICBpZiAoIXJlc3VsdFR1cGxl
LT5nZXRPYmplY3QoInJlc3VsdCJfcywgcmVzdWx0T2JqZWN0KSkgeworICAgIGF1dG8gcmVzdWx0
T2JqZWN0ID0gcmVzdWx0VHVwbGUtPmdldE9iamVjdCgicmVzdWx0Il9zKTsKKyAgICBpZiAoIXJl
c3VsdE9iamVjdCkgewogICAgICAgICBlcnJvclN0cmluZyA9ICJJbnRlcm5hbCBlcnJvcjogcmVz
dWx0IGlzIG5vdCBhIHBhaXIgb2YgdmFsdWUgYW5kIHdhc1Rocm93biBmbGFnIl9zOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgYm9vbCB3YXNUaHJvd24gPSBmYWxzZTsKLSAgICBpZiAo
IXJlc3VsdFR1cGxlLT5nZXRCb29sZWFuKCJ3YXNUaHJvd24iX3MsIHdhc1Rocm93bikpIHsKKyAg
ICBvdXRfd2FzVGhyb3duID0gcmVzdWx0VHVwbGUtPmdldEJvb2xlYW4oIndhc1Rocm93biJfcyk7
CisgICAgaWYgKCFvdXRfd2FzVGhyb3duKSB7CiAgICAgICAgIGVycm9yU3RyaW5nID0gIkludGVy
bmFsIGVycm9yOiByZXN1bHQgaXMgbm90IGEgcGFpciBvZiB2YWx1ZSBhbmQgd2FzVGhyb3duIGZs
YWciX3M7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBvdXRfcmVzdWx0T2JqZWN0ID0g
QmluZGluZ1RyYWl0czxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0Pjo6cnVudGltZUNh
c3QocmVzdWx0T2JqZWN0KTsKLQotICAgIGlmICh3YXNUaHJvd24pCi0gICAgICAgIG91dF93YXNU
aHJvd24gPSB3YXNUaHJvd247Ci0KLSAgICBpbnQgc2F2ZWRSZXN1bHRJbmRleDsKLSAgICBpZiAo
cmVzdWx0VHVwbGUtPmdldEludGVnZXIoInNhdmVkUmVzdWx0SW5kZXgiX3MsIHNhdmVkUmVzdWx0
SW5kZXgpKQotICAgICAgICBvdXRfc2F2ZWRSZXN1bHRJbmRleCA9IHNhdmVkUmVzdWx0SW5kZXg7
CisgICAgb3V0X3Jlc3VsdE9iamVjdCA9IFByb3RvY29sOjpCaW5kaW5nVHJhaXRzPFByb3RvY29s
OjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+OjpydW50aW1lQ2FzdChyZXN1bHRPYmplY3QucmVsZWFz
ZU5vbk51bGwoKSk7CisgICAgb3V0X3NhdmVkUmVzdWx0SW5kZXggPSByZXN1bHRUdXBsZS0+Z2V0
SW50ZWdlcigic2F2ZWRSZXN1bHRJbmRleCJfcyk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRTY3JpcHRC
YXNlOjpjaGVja0FzeW5jQ2FsbFJlc3VsdChSZWZQdHI8SlNPTjo6VmFsdWU+IHJlc3VsdCwgY29u
c3QgQXN5bmNDYWxsQ2FsbGJhY2smIGNhbGxiYWNrKQogewotICAgIEVycm9yU3RyaW5nIGVycm9y
U3RyaW5nOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKICAgICBSZWZQ
dHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4gcmVzdWx0T2JqZWN0OwogICAgIE9w
dGlvbmFsPGJvb2w+IHdhc1Rocm93bjsKICAgICBPcHRpb25hbDxpbnQ+IHNhdmVkUmVzdWx0SW5k
ZXg7CiAKICAgICBjaGVja0NhbGxSZXN1bHQoZXJyb3JTdHJpbmcsIHJlc3VsdCwgcmVzdWx0T2Jq
ZWN0LCB3YXNUaHJvd24sIHNhdmVkUmVzdWx0SW5kZXgpOwogCi0gICAgY2FsbGJhY2soZXJyb3JT
dHJpbmcsIFdURk1vdmUocmVzdWx0T2JqZWN0KSwgd2FzVGhyb3duLCBzYXZlZFJlc3VsdEluZGV4
KTsKKyAgICBjYWxsYmFjayhlcnJvclN0cmluZywgV1RGTW92ZShyZXN1bHRPYmplY3QpLCBXVEZN
b3ZlKHdhc1Rocm93biksIFdURk1vdmUoc2F2ZWRSZXN1bHRJbmRleCkpOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBJbnNwZWN0b3IKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3IvSW5qZWN0ZWRTY3JpcHRCYXNlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL0luamVjdGVkU2NyaXB0QmFzZS5oCmluZGV4IDgxMjNmMWQ2NmU5YjEzYWQ0YWQwZWNiMWEz
Y2FkMzNmNTk3NmQ1ZDcuLmY0ZTZhMGZlZWE0MTFjZDA1ODU5ODRiZDc0YWNjNGIyNGFhOGVkMGYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3Jp
cHRCYXNlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNj
cmlwdEJhc2UuaApAQCAtNDcsOCArNDcsNyBAQCBjbGFzcyBTY3JpcHRGdW5jdGlvbkNhbGw7CiAK
IG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLXR5
cGVkZWYgV1RGOjpGdW5jdGlvbjx2b2lkKEVycm9yU3RyaW5nJiwgUmVmUHRyPFByb3RvY29sOjpS
dW50aW1lOjpSZW1vdGVPYmplY3Q+JiYsIE9wdGlvbmFsPGJvb2w+JiwgT3B0aW9uYWw8aW50PiYp
PiBBc3luY0NhbGxDYWxsYmFjazsKK3VzaW5nIEFzeW5jQ2FsbENhbGxiYWNrID0gV1RGOjpGdW5j
dGlvbjx2b2lkKFByb3RvY29sOjpFcnJvclN0cmluZyYsIFJlZlB0cjxQcm90b2NvbDo6UnVudGlt
ZTo6UmVtb3RlT2JqZWN0PiYmLCBPcHRpb25hbDxib29sPiYmLCBPcHRpb25hbDxpbnQ+JiYpPjsK
IAogY2xhc3MgSlNfRVhQT1JUX1BSSVZBVEUgSW5qZWN0ZWRTY3JpcHRCYXNlIHsKIHB1YmxpYzoK
QEAgLTY5LDExICs2OCwxMSBAQCBwcm90ZWN0ZWQ6CiAgICAgY29uc3QgRGVwcmVjYXRlZDo6U2Ny
aXB0T2JqZWN0JiBpbmplY3RlZFNjcmlwdE9iamVjdCgpIGNvbnN0OwogICAgIEV4cGVjdGVkPEpT
Qzo6SlNWYWx1ZSwgTmFrZWRQdHI8SlNDOjpFeGNlcHRpb24+PiBjYWxsRnVuY3Rpb25XaXRoRXZh
bEVuYWJsZWQoRGVwcmVjYXRlZDo6U2NyaXB0RnVuY3Rpb25DYWxsJikgY29uc3Q7CiAgICAgUmVm
PEpTT046OlZhbHVlPiBtYWtlQ2FsbChEZXByZWNhdGVkOjpTY3JpcHRGdW5jdGlvbkNhbGwmKTsK
LSAgICB2b2lkIG1ha2VFdmFsQ2FsbChFcnJvclN0cmluZyYsIERlcHJlY2F0ZWQ6OlNjcmlwdEZ1
bmN0aW9uQ2FsbCYsIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYgcmVz
dWx0T2JqZWN0LCBPcHRpb25hbDxib29sPiYgd2FzVGhyb3duLCBPcHRpb25hbDxpbnQ+JiBzYXZl
ZFJlc3VsdEluZGV4KTsKKyAgICB2b2lkIG1ha2VFdmFsQ2FsbChQcm90b2NvbDo6RXJyb3JTdHJp
bmcmLCBEZXByZWNhdGVkOjpTY3JpcHRGdW5jdGlvbkNhbGwmLCBSZWZQdHI8UHJvdG9jb2w6OlJ1
bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3VsdE9iamVjdCwgT3B0aW9uYWw8Ym9vbD4mIHdhc1Ro
cm93biwgT3B0aW9uYWw8aW50PiYgc2F2ZWRSZXN1bHRJbmRleCk7CiAgICAgdm9pZCBtYWtlQXN5
bmNDYWxsKERlcHJlY2F0ZWQ6OlNjcmlwdEZ1bmN0aW9uQ2FsbCYsIEFzeW5jQ2FsbENhbGxiYWNr
JiYpOwogCiBwcml2YXRlOgotICAgIHZvaWQgY2hlY2tDYWxsUmVzdWx0KEVycm9yU3RyaW5nJiwg
UmVmUHRyPEpTT046OlZhbHVlPiByZXN1bHQsIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVt
b3RlT2JqZWN0PiYgcmVzdWx0T2JqZWN0LCBPcHRpb25hbDxib29sPiYgd2FzVGhyb3duLCBPcHRp
b25hbDxpbnQ+JiBzYXZlZFJlc3VsdEluZGV4KTsKKyAgICB2b2lkIGNoZWNrQ2FsbFJlc3VsdChQ
cm90b2NvbDo6RXJyb3JTdHJpbmcmLCBSZWZQdHI8SlNPTjo6VmFsdWU+IHJlc3VsdCwgUmVmUHRy
PFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiByZXN1bHRPYmplY3QsIE9wdGlvbmFs
PGJvb2w+JiB3YXNUaHJvd24sIE9wdGlvbmFsPGludD4mIHNhdmVkUmVzdWx0SW5kZXgpOwogICAg
IHZvaWQgY2hlY2tBc3luY0NhbGxSZXN1bHQoUmVmUHRyPEpTT046OlZhbHVlPiByZXN1bHQsIGNv
bnN0IEFzeW5jQ2FsbENhbGxiYWNrJik7CiAKICAgICBTdHJpbmcgbV9uYW1lOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdE1hbmFnZXIu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdE1hbmFn
ZXIuY3BwCmluZGV4IDkwYWY3YThmM2EzMzA1NjE2YjQ5NWU1YjNjYWRmMDUzMzExZTIzNTAuLmZj
Y2M4ZWYxOTg2ZDg4NmQ3NTYwMGY3MzYxMDBhN2ViMzk2YjUwMDUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0TWFuYWdlci5j
cHAKQEAgLTEwMiwxOSArMTAyLDE5IEBAIGludCBJbmplY3RlZFNjcmlwdE1hbmFnZXI6OmluamVj
dGVkU2NyaXB0SWRGb3IoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKIAogSW5qZWN0ZWRT
Y3JpcHQgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOjppbmplY3RlZFNjcmlwdEZvck9iamVjdElkKGNv
bnN0IFN0cmluZyYgb2JqZWN0SWQpCiB7Ci0gICAgUmVmUHRyPEpTT046OlZhbHVlPiBwYXJzZWRP
YmplY3RJZDsKLSAgICBpZiAoIUpTT046OlZhbHVlOjpwYXJzZUpTT04ob2JqZWN0SWQsIHBhcnNl
ZE9iamVjdElkKSkKKyAgICBhdXRvIHBhcnNlZE9iamVjdElkID0gSlNPTjo6VmFsdWU6OnBhcnNl
SlNPTihvYmplY3RJZCk7CisgICAgaWYgKCFwYXJzZWRPYmplY3RJZCkKICAgICAgICAgcmV0dXJu
IEluamVjdGVkU2NyaXB0KCk7CiAKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiByZXN1bHRPYmpl
Y3Q7Ci0gICAgaWYgKCFwYXJzZWRPYmplY3RJZC0+YXNPYmplY3QocmVzdWx0T2JqZWN0KSkKKyAg
ICBhdXRvIHJlc3VsdE9iamVjdCA9IHBhcnNlZE9iamVjdElkLT5hc09iamVjdCgpOworICAgIGlm
ICghcmVzdWx0T2JqZWN0KQogICAgICAgICByZXR1cm4gSW5qZWN0ZWRTY3JpcHQoKTsKIAotICAg
IGxvbmcgaW5qZWN0ZWRTY3JpcHRJZCA9IDA7Ci0gICAgaWYgKCFyZXN1bHRPYmplY3QtPmdldElu
dGVnZXIoImluamVjdGVkU2NyaXB0SWQiX3MsIGluamVjdGVkU2NyaXB0SWQpKQorICAgIGF1dG8g
aW5qZWN0ZWRTY3JpcHRJZCA9IHJlc3VsdE9iamVjdC0+Z2V0SW50ZWdlcigiaW5qZWN0ZWRTY3Jp
cHRJZCJfcyk7CisgICAgaWYgKCFpbmplY3RlZFNjcmlwdElkKQogICAgICAgICByZXR1cm4gSW5q
ZWN0ZWRTY3JpcHQoKTsKIAotICAgIHJldHVybiBtX2lkVG9JbmplY3RlZFNjcmlwdC5nZXQoaW5q
ZWN0ZWRTY3JpcHRJZCk7CisgICAgcmV0dXJuIG1faWRUb0luamVjdGVkU2NyaXB0LmdldCgqaW5q
ZWN0ZWRTY3JpcHRJZCk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyOjpyZWxlYXNl
T2JqZWN0R3JvdXAoY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlci5jcHAKaW5kZXggNjkzZThiMjVjNzM3NzgzNDBlODM5NDA0Njc4NmQ5MzE4YThhMDkyNC4u
ZGJhMTdkNGE2NWE3MGQzNTg1MWM4YzUxOWFkMWVjYmQ1NzE3NTJkZCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlci5jcHAKQEAgLTY4LDcgKzY4LDcgQEAgdm9pZCBCYWNrZW5kRGlzcGF0Y2hlcjo6
Q2FsbGJhY2tCYXNlOjpzZW5kRmFpbHVyZShjb25zdCBFcnJvclN0cmluZyYgZXJyb3IpCiAgICAg
bV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKIH0KIAotdm9pZCBCYWNr
ZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlOjpzZW5kU3VjY2VzcyhSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiYmIHBhcnRpYWxNZXNzYWdlKQordm9pZCBCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tC
YXNlOjpzZW5kU3VjY2VzcyhSZWY8SlNPTjo6T2JqZWN0PiYmIHBhcnRpYWxNZXNzYWdlKQogewog
ICAgIGlmIChtX2FscmVhZHlTZW50KQogICAgICAgICByZXR1cm47CkBAIC0xMDcsNyArMTA3LDcg
QEAgdm9pZCBCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2goY29uc3QgU3RyaW5nJiBtZXNzYWdl
KQogCiAgICAgQVNTRVJUKCFtX3Byb3RvY29sRXJyb3JzLnNpemUoKSk7CiAKLSAgICBsb25nIHJl
cXVlc3RJZCA9IDA7CisgICAgaW50IHJlcXVlc3RJZCA9IDA7CiAgICAgUmVmUHRyPEpTT046Ok9i
amVjdD4gbWVzc2FnZU9iamVjdDsKIAogICAgIHsKQEAgLTExNSw0NiArMTE1LDUwIEBAIHZvaWQg
QmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKICAgICAg
ICAgLy8gdGhlIG91dGVyIHJlcXVlc3QncyBpZCBqdXN0IGJlY2F1c2UgdGhlIGlubmVyIHJlcXVl
c3QgaXMgYm9ndXMuCiAgICAgICAgIFNldEZvclNjb3BlPE9wdGlvbmFsPGxvbmc+PiBzY29wZWRS
ZXF1ZXN0SWQobV9jdXJyZW50UmVxdWVzdElkLCBXVEY6Om51bGxvcHQpOwogCi0gICAgICAgIFJl
ZlB0cjxKU09OOjpWYWx1ZT4gcGFyc2VkTWVzc2FnZTsKLSAgICAgICAgaWYgKCFKU09OOjpWYWx1
ZTo6cGFyc2VKU09OKG1lc3NhZ2UsIHBhcnNlZE1lc3NhZ2UpKSB7CisgICAgICAgIGF1dG8gcGFy
c2VkTWVzc2FnZSA9IEpTT046OlZhbHVlOjpwYXJzZUpTT04obWVzc2FnZSk7CisgICAgICAgIGlm
ICghcGFyc2VkTWVzc2FnZSkgewogICAgICAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihQYXJz
ZUVycm9yLCAiTWVzc2FnZSBtdXN0IGJlIGluIEpTT04gZm9ybWF0Il9zKTsKICAgICAgICAgICAg
IHNlbmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAot
ICAgICAgICBpZiAoIXBhcnNlZE1lc3NhZ2UtPmFzT2JqZWN0KG1lc3NhZ2VPYmplY3QpKSB7Cisg
ICAgICAgIG1lc3NhZ2VPYmplY3QgPSBwYXJzZWRNZXNzYWdlLT5hc09iamVjdCgpOworICAgICAg
ICBpZiAoIW1lc3NhZ2VPYmplY3QpIHsKICAgICAgICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3Io
SW52YWxpZFJlcXVlc3QsICJNZXNzYWdlIG11c3QgYmUgYSBKU09OaWZpZWQgb2JqZWN0Il9zKTsK
ICAgICAgICAgICAgIHNlbmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KIAotICAgICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHJlcXVlc3RJZFZhbHVlOwot
ICAgICAgICBpZiAoIW1lc3NhZ2VPYmplY3QtPmdldFZhbHVlKCJpZCJfcywgcmVxdWVzdElkVmFs
dWUpKSB7CisgICAgICAgIGF1dG8gcmVxdWVzdElkVmFsdWUgPSBtZXNzYWdlT2JqZWN0LT5nZXRW
YWx1ZSgiaWQiX3MpOworICAgICAgICBpZiAoIXJlcXVlc3RJZFZhbHVlKSB7CiAgICAgICAgICAg
ICByZXBvcnRQcm90b2NvbEVycm9yKEludmFsaWRSZXF1ZXN0LCAiJ2lkJyBwcm9wZXJ0eSB3YXMg
bm90IGZvdW5kIl9zKTsKICAgICAgICAgICAgIHNlbmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoIXJlcXVlc3RJZFZhbHVlLT5h
c0ludGVnZXIocmVxdWVzdElkKSkgeworICAgICAgICBhdXRvIHJlcXVlc3RJZEludCA9IHJlcXVl
c3RJZFZhbHVlLT5hc0ludGVnZXIoKTsKKyAgICAgICAgaWYgKCFyZXF1ZXN0SWRJbnQpIHsKICAg
ICAgICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoSW52YWxpZFJlcXVlc3QsICJUaGUgdHlwZSBv
ZiAnaWQnIHByb3BlcnR5IG11c3QgYmUgaW50ZWdlciJfcyk7CiAgICAgICAgICAgICBzZW5kUGVu
ZGluZ0Vycm9ycygpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CisKKyAgICAgICAg
cmVxdWVzdElkID0gKnJlcXVlc3RJZEludDsKICAgICB9CiAKICAgICB7CiAgICAgICAgIC8vIFdl
IGNvdWxkIGJlIGNhbGxlZCByZS1lbnRyYW50bHkgZnJvbSBhIG5lc3RlZCBydW4gbG9vcCwgc28g
cmVzdG9yZSB0aGUgcHJldmlvdXMgaWQuCiAgICAgICAgIFNldEZvclNjb3BlPE9wdGlvbmFsPGxv
bmc+PiBzY29wZWRSZXF1ZXN0SWQobV9jdXJyZW50UmVxdWVzdElkLCByZXF1ZXN0SWQpOwogCi0g
ICAgICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gbWV0aG9kVmFsdWU7Ci0gICAgICAgIGlmICghbWVz
c2FnZU9iamVjdC0+Z2V0VmFsdWUoIm1ldGhvZCJfcywgbWV0aG9kVmFsdWUpKSB7CisgICAgICAg
IGF1dG8gbWV0aG9kVmFsdWUgPSBtZXNzYWdlT2JqZWN0LT5nZXRWYWx1ZSgibWV0aG9kIl9zKTsK
KyAgICAgICAgaWYgKCFtZXRob2RWYWx1ZSkgewogICAgICAgICAgICAgcmVwb3J0UHJvdG9jb2xF
cnJvcihJbnZhbGlkUmVxdWVzdCwgIidtZXRob2QnIHByb3BlcnR5IHdhc24ndCBmb3VuZCJfcyk7
CiAgICAgICAgICAgICBzZW5kUGVuZGluZ0Vycm9ycygpOwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CiAKLSAgICAgICAgU3RyaW5nIG1ldGhvZFN0cmluZzsKLSAgICAgICAgaWYgKCFt
ZXRob2RWYWx1ZS0+YXNTdHJpbmcobWV0aG9kU3RyaW5nKSkgeworICAgICAgICBhdXRvIG1ldGhv
ZFN0cmluZyA9IG1ldGhvZFZhbHVlLT5hc1N0cmluZygpOworICAgICAgICBpZiAoIW1ldGhvZFN0
cmluZykgewogICAgICAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihJbnZhbGlkUmVxdWVzdCwg
IlRoZSB0eXBlIG9mICdtZXRob2QnIHByb3BlcnR5IG11c3QgYmUgc3RyaW5nIl9zKTsKICAgICAg
ICAgICAgIHNlbmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgICAgICAgICByZXR1cm47CkBAIC0xODQs
MTIgKzE4OCwxMiBAQCB2b2lkIEJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChjb25zdCBTdHJp
bmcmIG1lc3NhZ2UpCiB9CiAKIC8vIEZJWE1FOiByZW1vdmUgdGhpcyBmdW5jdGlvbiB3aGVuIGxl
Z2FjeSBJbnNwZWN0b3JPYmplY3Qgc3ltYm9scyBhcmUgbm8gbG9uZ2VyIG5lZWRlZCA8aHR0cDov
L3dlYmtpdC5vcmcvYi8xNzk4NDc+Lgotdm9pZCBCYWNrZW5kRGlzcGF0Y2hlcjo6c2VuZFJlc3Bv
bnNlKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHJlc3VsdCkKK3ZvaWQg
QmFja2VuZERpc3BhdGNoZXI6OnNlbmRSZXNwb25zZShsb25nIHJlcXVlc3RJZCwgUmVmPEpTT046
Ok9iamVjdD4mJiByZXN1bHQpCiB7CiAgICAgc2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92
ZShyZXN1bHQpLCBmYWxzZSk7CiB9CiAKLXZvaWQgQmFja2VuZERpc3BhdGNoZXI6OnNlbmRSZXNw
b25zZShsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiByZXN1bHQsIGJvb2wp
Cit2b2lkIEJhY2tlbmREaXNwYXRjaGVyOjpzZW5kUmVzcG9uc2UobG9uZyByZXF1ZXN0SWQsIFJl
ZjxKU09OOjpPYmplY3Q+JiYgcmVzdWx0LCBib29sKQogewogICAgIEFTU0VSVCghbV9wcm90b2Nv
bEVycm9ycy5zaXplKCkpOwogCkBAIC0yNzAsNzQgKzI3NCw2NCBAQCB2b2lkIEJhY2tlbmREaXNw
YXRjaGVyOjpyZXBvcnRQcm90b2NvbEVycm9yKE9wdGlvbmFsPGxvbmc+IHJlbGF0ZWRSZXF1ZXN0
SWQsIENvbQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotVCBCYWNrZW5kRGlzcGF0Y2hlcjo6
Z2V0UHJvcGVydHlWYWx1ZShKU09OOjpPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1l
LCBib29sKiBvdXRfb3B0aW9uYWxWYWx1ZUZvdW5kLCBUIGRlZmF1bHRWYWx1ZSwgc3RkOjpmdW5j
dGlvbjxib29sKEpTT046OlZhbHVlJiwgVCYpPiBhc01ldGhvZCwgY29uc3QgY2hhciogdHlwZU5h
bWUpCitUIEJhY2tlbmREaXNwYXRjaGVyOjpnZXRQcm9wZXJ0eVZhbHVlKEpTT046Ok9iamVjdCog
b2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wgcmVxdWlyZWQsIHN0ZDo6ZnVuY3Rpb248
VChKU09OOjpWYWx1ZSYpPiBjb252ZXJ0ZXIsIGNvbnN0IGNoYXIqIHR5cGVOYW1lKQogewotICAg
IFQgcmVzdWx0KGRlZmF1bHRWYWx1ZSk7Ci0gICAgLy8gb3V0X29wdGlvbmFsVmFsdWVGb3VuZCBz
aWduYWxzIHRvIHRoZSBjYWxsZXIgd2hldGhlciBhbiBvcHRpb25hbCBwcm9wZXJ0eSB3YXMgZm91
bmQuCi0gICAgLy8gaWYgb3V0X29wdGlvbmFsVmFsdWVGb3VuZCA9PSBudWxscHRyLCB0aGVuIHRo
aXMgaXMgYSByZXF1aXJlZCBwcm9wZXJ0eS4KLSAgICBpZiAob3V0X29wdGlvbmFsVmFsdWVGb3Vu
ZCkKLSAgICAgICAgKm91dF9vcHRpb25hbFZhbHVlRm91bmQgPSBmYWxzZTsKKyAgICBUIHJlc3Vs
dDsKIAogICAgIGlmICghb2JqZWN0KSB7Ci0gICAgICAgIGlmICghb3V0X29wdGlvbmFsVmFsdWVG
b3VuZCkKKyAgICAgICAgaWYgKHJlcXVpcmVkKQogICAgICAgICAgICAgcmVwb3J0UHJvdG9jb2xF
cnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFtcywgbWFrZVN0cmluZygiJ3BhcmFt
cycgb2JqZWN0IG11c3QgY29udGFpbiByZXF1aXJlZCBwYXJhbWV0ZXIgJyIsIG5hbWUsICInIHdp
dGggdHlwZSAnIiwgdHlwZU5hbWUsICInLiIpKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAg
ICB9CiAKICAgICBhdXRvIGZpbmRSZXN1bHQgPSBvYmplY3QtPmZpbmQobmFtZSk7CiAgICAgaWYg
KGZpbmRSZXN1bHQgPT0gb2JqZWN0LT5lbmQoKSkgewotICAgICAgICBpZiAoIW91dF9vcHRpb25h
bFZhbHVlRm91bmQpCisgICAgICAgIGlmIChyZXF1aXJlZCkKICAgICAgICAgICAgIHJlcG9ydFBy
b3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OkludmFsaWRQYXJhbXMsIG1ha2VTdHJpbmco
IlBhcmFtZXRlciAnIiwgbmFtZSwgIicgd2l0aCB0eXBlICciLCB0eXBlTmFtZSwgIicgd2FzIG5v
dCBmb3VuZC4iKSk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCi0gICAgaWYgKCFh
c01ldGhvZCgqZmluZFJlc3VsdC0+dmFsdWUsIHJlc3VsdCkpIHsKLSAgICAgICAgcmVwb3J0UHJv
dG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFtcywgbWFrZVN0cmluZygi
UGFyYW1ldGVyICciLCBuYW1lLCAiJyBoYXMgd3JvbmcgdHlwZS4gSXQgbXVzdCBiZSAnIiwgdHlw
ZU5hbWUsICInLiIpKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9CisgICAgcmVzdWx0
ID0gY29udmVydGVyKGZpbmRSZXN1bHQtPnZhbHVlKTsKIAotICAgIGlmIChvdXRfb3B0aW9uYWxW
YWx1ZUZvdW5kKQotICAgICAgICAqb3V0X29wdGlvbmFsVmFsdWVGb3VuZCA9IHRydWU7CisgICAg
aWYgKCFyZXN1bHQpCisgICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNo
ZXI6OkludmFsaWRQYXJhbXMsIG1ha2VTdHJpbmcoIlBhcmFtZXRlciAnIiwgbmFtZSwgIicgaGFz
IHdyb25nIHR5cGUuIEl0IG11c3QgYmUgJyIsIHR5cGVOYW1lLCAiJy4iKSk7CiAKICAgICByZXR1
cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgYm9vbCBjYXN0VG9JbnRlZ2VyKEpTT046OlZhbHVlJiB2
YWx1ZSwgaW50JiByZXN1bHQpIHsgcmV0dXJuIHZhbHVlLmFzSW50ZWdlcihyZXN1bHQpOyB9Ci1z
dGF0aWMgYm9vbCBjYXN0VG9OdW1iZXIoSlNPTjo6VmFsdWUmIHZhbHVlLCBkb3VibGUmIHJlc3Vs
dCkgeyByZXR1cm4gdmFsdWUuYXNEb3VibGUocmVzdWx0KTsgfQotCi1pbnQgQmFja2VuZERpc3Bh
dGNoZXI6OmdldEludGVnZXIoSlNPTjo6T2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFt
ZSwgYm9vbCogdmFsdWVGb3VuZCkKK09wdGlvbmFsPGJvb2w+IEJhY2tlbmREaXNwYXRjaGVyOjpn
ZXRCb29sZWFuKEpTT046Ok9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wg
cmVxdWlyZWQpCiB7Ci0gICAgcmV0dXJuIGdldFByb3BlcnR5VmFsdWU8aW50PihvYmplY3QsIG5h
bWUsIHZhbHVlRm91bmQsIDAsICZjYXN0VG9JbnRlZ2VyLCAiSW50ZWdlciIpOworICAgIHJldHVy
biBnZXRQcm9wZXJ0eVZhbHVlPE9wdGlvbmFsPGJvb2w+PihvYmplY3QsIG5hbWUsIHJlcXVpcmVk
LCAmSlNPTjo6VmFsdWU6OmFzQm9vbGVhbiwgIkJvb2xlYW4iKTsKIH0KIAotZG91YmxlIEJhY2tl
bmREaXNwYXRjaGVyOjpnZXREb3VibGUoSlNPTjo6T2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmlu
ZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCkKK09wdGlvbmFsPGludD4gQmFja2VuZERpc3BhdGNo
ZXI6OmdldEludGVnZXIoSlNPTjo6T2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwg
Ym9vbCByZXF1aXJlZCkKIHsKLSAgICByZXR1cm4gZ2V0UHJvcGVydHlWYWx1ZTxkb3VibGU+KG9i
amVjdCwgbmFtZSwgdmFsdWVGb3VuZCwgMCwgJmNhc3RUb051bWJlciwgIk51bWJlciIpOworICAg
IHJldHVybiBnZXRQcm9wZXJ0eVZhbHVlPE9wdGlvbmFsPGludD4+KG9iamVjdCwgbmFtZSwgcmVx
dWlyZWQsICZKU09OOjpWYWx1ZTo6YXNJbnRlZ2VyLCAiSW50ZWdlciIpOwogfQogCi1TdHJpbmcg
QmFja2VuZERpc3BhdGNoZXI6OmdldFN0cmluZyhKU09OOjpPYmplY3QqIG9iamVjdCwgY29uc3Qg
U3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kKQorT3B0aW9uYWw8ZG91YmxlPiBCYWNrZW5k
RGlzcGF0Y2hlcjo6Z2V0RG91YmxlKEpTT046Ok9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcm
IG5hbWUsIGJvb2wgcmVxdWlyZWQpCiB7Ci0gICAgcmV0dXJuIGdldFByb3BlcnR5VmFsdWU8U3Ry
aW5nPihvYmplY3QsIG5hbWUsIHZhbHVlRm91bmQsICIiLCAmSlNPTjo6VmFsdWU6OmFzU3RyaW5n
LCAiU3RyaW5nIik7CisgICAgcmV0dXJuIGdldFByb3BlcnR5VmFsdWU8T3B0aW9uYWw8ZG91Ymxl
Pj4ob2JqZWN0LCBuYW1lLCByZXF1aXJlZCwgJkpTT046OlZhbHVlOjphc0RvdWJsZSwgIk51bWJl
ciIpOwogfQogCi1ib29sIEJhY2tlbmREaXNwYXRjaGVyOjpnZXRCb29sZWFuKEpTT046Ok9iamVj
dCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQpCitTdHJpbmcg
QmFja2VuZERpc3BhdGNoZXI6OmdldFN0cmluZyhKU09OOjpPYmplY3QqIG9iamVjdCwgY29uc3Qg
U3RyaW5nJiBuYW1lLCBib29sIHJlcXVpcmVkKQogewotICAgIHJldHVybiBnZXRQcm9wZXJ0eVZh
bHVlPGJvb2w+KG9iamVjdCwgbmFtZSwgdmFsdWVGb3VuZCwgZmFsc2UsICZKU09OOjpWYWx1ZTo6
YXNCb29sZWFuLCAiQm9vbGVhbiIpOworICAgIHJldHVybiBnZXRQcm9wZXJ0eVZhbHVlPFN0cmlu
Zz4ob2JqZWN0LCBuYW1lLCByZXF1aXJlZCwgJkpTT046OlZhbHVlOjphc1N0cmluZywgIlN0cmlu
ZyIpOwogfQogCi1SZWZQdHI8SlNPTjo6T2JqZWN0PiBCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0T2Jq
ZWN0KEpTT046Ok9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVl
Rm91bmQpCitSZWZQdHI8SlNPTjo6VmFsdWU+IEJhY2tlbmREaXNwYXRjaGVyOjpnZXRWYWx1ZShK
U09OOjpPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sIHJlcXVpcmVkKQog
ewotICAgIHJldHVybiBnZXRQcm9wZXJ0eVZhbHVlPFJlZlB0cjxKU09OOjpPYmplY3Q+PihvYmpl
Y3QsIG5hbWUsIHZhbHVlRm91bmQsIG51bGxwdHIsICZKU09OOjpWYWx1ZTo6YXNPYmplY3QsICJP
YmplY3QiKTsKKyAgICByZXR1cm4gZ2V0UHJvcGVydHlWYWx1ZTxSZWZQdHI8SlNPTjo6VmFsdWU+
PihvYmplY3QsIG5hbWUsIHJlcXVpcmVkLCAmSlNPTjo6VmFsdWU6OmFzVmFsdWUsICJWYWx1ZSIp
OwogfQogCi1SZWZQdHI8SlNPTjo6QXJyYXk+IEJhY2tlbmREaXNwYXRjaGVyOjpnZXRBcnJheShK
U09OOjpPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5k
KQorUmVmUHRyPEpTT046Ok9iamVjdD4gQmFja2VuZERpc3BhdGNoZXI6OmdldE9iamVjdChKU09O
OjpPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sIHJlcXVpcmVkKQogewot
ICAgIHJldHVybiBnZXRQcm9wZXJ0eVZhbHVlPFJlZlB0cjxKU09OOjpBcnJheT4+KG9iamVjdCwg
bmFtZSwgdmFsdWVGb3VuZCwgbnVsbHB0ciwgJkpTT046OlZhbHVlOjphc0FycmF5LCAiQXJyYXki
KTsKKyAgICByZXR1cm4gZ2V0UHJvcGVydHlWYWx1ZTxSZWZQdHI8SlNPTjo6T2JqZWN0Pj4ob2Jq
ZWN0LCBuYW1lLCByZXF1aXJlZCwgJkpTT046OlZhbHVlOjphc09iamVjdCwgIk9iamVjdCIpOwog
fQogCi1SZWZQdHI8SlNPTjo6VmFsdWU+IEJhY2tlbmREaXNwYXRjaGVyOjpnZXRWYWx1ZShKU09O
OjpPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kKQor
UmVmUHRyPEpTT046OkFycmF5PiBCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0QXJyYXkoSlNPTjo6T2Jq
ZWN0KiBvYmplY3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCByZXF1aXJlZCkKIHsKLSAgICBy
ZXR1cm4gZ2V0UHJvcGVydHlWYWx1ZTxSZWZQdHI8SlNPTjo6VmFsdWU+PihvYmplY3QsIG5hbWUs
IHZhbHVlRm91bmQsIG51bGxwdHIsICZKU09OOjpWYWx1ZTo6YXNWYWx1ZSwgIlZhbHVlIik7Cisg
ICAgcmV0dXJuIGdldFByb3BlcnR5VmFsdWU8UmVmUHRyPEpTT046OkFycmF5Pj4ob2JqZWN0LCBu
YW1lLCByZXF1aXJlZCwgJkpTT046OlZhbHVlOjphc0FycmF5LCAiQXJyYXkiKTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgSW5zcGVjdG9yCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmgKaW5kZXggOTVkOWQ4
MTE4OGU3MzVlOGYxYjcwY2MwZGVlZTI2ODJjYjY3MTRmMC4uMDJjOTZkNzI2MzhjMjIyZjAzMGQx
NDkxY2M5YjkyNjJiMDhiZWNiYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaApAQCAtMjksOCAr
MjksMTAgQEAKICNpbmNsdWRlICJJbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oIgogI2luY2x1ZGUg
Ikluc3BlY3RvclByb3RvY29sVHlwZXMuaCIKICNpbmNsdWRlIDxmdW5jdGlvbmFsPgorI2luY2x1
ZGUgPHd0Zi9GdW5jdGlvbi5oPgogI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUg
PHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKQEAgLTU5LDcgKzYx
LDcgQEAgcHVibGljOgogICAgICAgICBib29sIGlzQWN0aXZlKCkgY29uc3Q7CiAgICAgICAgIHZv
aWQgZGlzYWJsZSgpIHsgbV9hbHJlYWR5U2VudCA9IHRydWU7IH0KIAotICAgICAgICB2b2lkIHNl
bmRTdWNjZXNzKFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpOworICAgICAgICB2b2lkIHNlbmRTdWNj
ZXNzKFJlZjxKU09OOjpPYmplY3Q+JiYpOwogICAgICAgICB2b2lkIHNlbmRGYWlsdXJlKGNvbnN0
IEVycm9yU3RyaW5nJik7CiAKICAgICBwcml2YXRlOgpAQCAtODcsMjggKzg5LDI3IEBAIHB1Ymxp
YzoKICAgICAvLyBOb3RlIHRoYXQgJ3VudXNlZCcgaXMgYSB3b3JrYXJvdW5kIHNvIHRoZSBjb21w
aWxlciBjYW4gcGljayB0aGUgcmlnaHQgc2VuZFJlc3BvbnNlIGJhc2VkIG9uIGFyaXR5LgogICAg
IC8vIFdoZW4gPGh0dHA6Ly93ZWJraXQub3JnL2IvMTc5ODQ3PiBpcyBmaXhlZCBvciB0aGlzIGNs
YXNzIGlzIHJlbmFtZWQgZm9yIHRoZSBKU09OOjpPYmplY3QgY2FzZSwKICAgICAvLyB0aGVuIHRo
aXMgYWx0ZXJuYXRlIG1ldGhvZCB3aXRoIGEgZHVtbXkgcGFyYW1ldGVyIGNhbiBiZSByZW1vdmVk
IGluIGZhdm9yIG9mIHRoZSBvbmUgd2l0aG91dCBpdC4KLSAgICB2b2lkIHNlbmRSZXNwb25zZShs
b25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiByZXN1bHQsIGJvb2wgdW51c2Vk
KTsKLSAgICB2b2lkIHNlbmRSZXNwb25zZShsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9i
amVjdD4mJiByZXN1bHQpOworICAgIHZvaWQgc2VuZFJlc3BvbnNlKGxvbmcgcmVxdWVzdElkLCBS
ZWY8SlNPTjo6T2JqZWN0PiYmIHJlc3VsdCwgYm9vbCB1bnVzZWQpOworICAgIHZvaWQgc2VuZFJl
c3BvbnNlKGxvbmcgcmVxdWVzdElkLCBSZWY8SlNPTjo6T2JqZWN0PiYmIHJlc3VsdCk7CiAgICAg
dm9pZCBzZW5kUGVuZGluZ0Vycm9ycygpOwogCiAgICAgdm9pZCByZXBvcnRQcm90b2NvbEVycm9y
KENvbW1vbkVycm9yQ29kZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UpOwogICAgIHZvaWQg
cmVwb3J0UHJvdG9jb2xFcnJvcihPcHRpb25hbDxsb25nPiByZWxhdGVkUmVxdWVzdElkLCBDb21t
b25FcnJvckNvZGUsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKTsKIAotICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+Ci0gICAgV1RGX0lOVEVSTkFMCi0gICAgVCBnZXRQcm9wZXJ0eVZhbHVlKEpT
T046Ok9iamVjdCosIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogb3V0X29wdGlvbmFsVmFsdWVG
b3VuZCwgVCBkZWZhdWx0VmFsdWUsIHN0ZDo6ZnVuY3Rpb248Ym9vbChKU09OOjpWYWx1ZSYsIFQm
KT4sIGNvbnN0IGNoYXIqIHR5cGVOYW1lKTsKLQotICAgIGludCBnZXRJbnRlZ2VyKEpTT046Ok9i
amVjdCosIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCk7Ci0gICAgZG91Ymxl
IGdldERvdWJsZShKU09OOjpPYmplY3QqLCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVl
Rm91bmQpOwotICAgIFN0cmluZyBnZXRTdHJpbmcoSlNPTjo6T2JqZWN0KiwgY29uc3QgU3RyaW5n
JiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kKTsKLSAgICBib29sIGdldEJvb2xlYW4oSlNPTjo6T2Jq
ZWN0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kKTsKLSAgICBSZWZQdHI8
SlNPTjo6VmFsdWU+IGdldFZhbHVlKEpTT046Ok9iamVjdCosIGNvbnN0IFN0cmluZyYgbmFtZSwg
Ym9vbCogdmFsdWVGb3VuZCk7Ci0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gZ2V0T2JqZWN0KEpT
T046Ok9iamVjdCosIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCk7Ci0gICAg
UmVmUHRyPEpTT046OkFycmF5PiBnZXRBcnJheShKU09OOjpPYmplY3QqLCBjb25zdCBTdHJpbmcm
IG5hbWUsIGJvb2wqIHZhbHVlRm91bmQpOworICAgIE9wdGlvbmFsPGJvb2w+IGdldEJvb2xlYW4o
SlNPTjo6T2JqZWN0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sIHJlcXVpcmVkKTsKKyAgICBP
cHRpb25hbDxpbnQ+IGdldEludGVnZXIoSlNPTjo6T2JqZWN0KiwgY29uc3QgU3RyaW5nJiBuYW1l
LCBib29sIHJlcXVpcmVkKTsKKyAgICBPcHRpb25hbDxkb3VibGU+IGdldERvdWJsZShKU09OOjpP
YmplY3QqLCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wgcmVxdWlyZWQpOworICAgIFN0cmluZyBn
ZXRTdHJpbmcoSlNPTjo6T2JqZWN0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sIHJlcXVpcmVk
KTsKKyAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IGdldFZhbHVlKEpTT046Ok9iamVjdCosIGNvbnN0
IFN0cmluZyYgbmFtZSwgYm9vbCByZXF1aXJlZCk7CisgICAgUmVmUHRyPEpTT046Ok9iamVjdD4g
Z2V0T2JqZWN0KEpTT046Ok9iamVjdCosIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCByZXF1aXJl
ZCk7CisgICAgUmVmUHRyPEpTT046OkFycmF5PiBnZXRBcnJheShKU09OOjpPYmplY3QqLCBjb25z
dCBTdHJpbmcmIG5hbWUsIGJvb2wgcmVxdWlyZWQpOwogCiBwcml2YXRlOgogICAgIEJhY2tlbmRE
aXNwYXRjaGVyKFJlZjxGcm9udGVuZFJvdXRlcj4mJik7CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgorICAgIFQgZ2V0UHJvcGVydHlWYWx1ZShKU09OOjpPYmplY3QqLCBjb25zdCBTdHJpbmcm
IG5hbWUsIGJvb2wgcmVxdWlyZWQsIHN0ZDo6ZnVuY3Rpb248VChKU09OOjpWYWx1ZSYpPiBjb252
ZXJ0ZXIsIGNvbnN0IGNoYXIqIHR5cGVOYW1lKTsKKwogICAgIFJlZjxGcm9udGVuZFJvdXRlcj4g
bV9mcm9udGVuZFJvdXRlcjsKICAgICBIYXNoTWFwPFN0cmluZywgU3VwcGxlbWVudGFsQmFja2Vu
ZERpc3BhdGNoZXIqPiBtX2Rpc3BhdGNoZXJzOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvclByb3RvY29sVHlwZXMuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oCmluZGV4IGQ3MDEw
YTVjNjJlODYzM2E0ZGQwMWIyYzAwNjA1YmFhY2M5YzhjNzkuLjU4NzdlMGQ3NDEwODJmNzExYTVm
ZmVkNDM1Y2VmYzBmMjEzMTMzNWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oCkBAIC0yNywxMiArMjcsMTkg
QEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRl
IDx3dGYvRXhwZWN0ZWQuaD4KICNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAogbmFtZXNw
YWNlIFByb3RvY29sIHsKIAordXNpbmcgRXJyb3JTdHJpbmcgPSBTdHJpbmc7CisKK3RlbXBsYXRl
IDx0eXBlbmFtZSBUPgordXNpbmcgRXJyb3JTdHJpbmdPciA9IEV4cGVjdGVkPFQsIEVycm9yU3Ry
aW5nPjsKKwogdGVtcGxhdGU8dHlwZW5hbWU+IHN0cnVjdCBCaW5kaW5nVHJhaXRzOwogCiB0ZW1w
bGF0ZTxKU09OOjpWYWx1ZTo6VHlwZSB0eXBlPiBzdHJ1Y3QgUHJpbWl0aXZlQmluZGluZ1RyYWl0
cyB7CkBAIC00NCwyOSArNTEsMjMgQEAgdGVtcGxhdGU8SlNPTjo6VmFsdWU6OlR5cGUgdHlwZT4g
c3RydWN0IFByaW1pdGl2ZUJpbmRpbmdUcmFpdHMgewogfTsKIAogdGVtcGxhdGU8dHlwZW5hbWUg
VD4gc3RydWN0IEJpbmRpbmdUcmFpdHM8SlNPTjo6QXJyYXlPZjxUPj4gewotICAgIHN0YXRpYyBS
ZWZQdHI8SlNPTjo6QXJyYXlPZjxUPj4gcnVudGltZUNhc3QoUmVmUHRyPEpTT046OlZhbHVlPiYm
IHZhbHVlKQorICAgIHN0YXRpYyBSZWY8SlNPTjo6QXJyYXlPZjxUPj4gcnVudGltZUNhc3QoUmVm
PEpTT046OlZhbHVlPiYmIHZhbHVlKQogICAgIHsKLSAgICAgICAgQVNTRVJUX0FSRyh2YWx1ZSwg
dmFsdWUpOwotICAgICAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IGFycmF5OwotICAgICAgICBib29s
IGNhc3RTdWNjZWVkZWQgPSB2YWx1ZS0+YXNBcnJheShhcnJheSk7Ci0gICAgICAgIEFTU0VSVF9V
TlVTRUQoY2FzdFN1Y2NlZWRlZCwgY2FzdFN1Y2NlZWRlZCk7Ci0gICAgICAgIGFzc2VydFZhbHVl
SGFzRXhwZWN0ZWRUeXBlKGFycmF5LmdldCgpKTsKKyAgICAgICAgYXV0byBhcnJheSA9IHZhbHVl
LT5hc0FycmF5KCk7CisgICAgICAgIEJpbmRpbmdUcmFpdHM8SlNPTjo6QXJyYXlPZjxUPj46OmFz
c2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKGFycmF5LmdldCgpKTsKICAgICAgICAgQ09NUElMRV9B
U1NFUlQoc2l6ZW9mKEpTT046OkFycmF5T2Y8VD4pID09IHNpemVvZihKU09OOjpBcnJheSksIHR5
cGVfY2FzdF9wcm9ibGVtKTsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEpTT046OkFycmF5
T2Y8VD4qPihzdGF0aWNfY2FzdDxKU09OOjpBcnJheUJhc2UqPihhcnJheS5nZXQoKSkpOworICAg
ICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEpTT046OkFycmF5T2Y8VD4+KHN0YXRp
Y19yZWZlcmVuY2VfY2FzdDxKU09OOjpBcnJheUJhc2U+KGFycmF5LnJlbGVhc2VOb25OdWxsKCkp
KTsKICAgICB9CiAKICAgICBzdGF0aWMgdm9pZCBhc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShK
U09OOjpWYWx1ZSogdmFsdWUpCiAgICAgeworICAgICAgICBBU1NFUlRfVU5VU0VEKHZhbHVlLCB2
YWx1ZSk7CiAjaWYgQVNTRVJUX0VOQUJMRUQKLSAgICAgICAgQVNTRVJUX0FSRyh2YWx1ZSwgdmFs
dWUpOwotICAgICAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IGFycmF5OwotICAgICAgICBib29sIGNh
c3RTdWNjZWVkZWQgPSB2YWx1ZS0+YXNBcnJheShhcnJheSk7Ci0gICAgICAgIEFTU0VSVF9VTlVT
RUQoY2FzdFN1Y2NlZWRlZCwgY2FzdFN1Y2NlZWRlZCk7CisgICAgICAgIGF1dG8gYXJyYXkgPSB2
YWx1ZS0+YXNBcnJheSgpOworICAgICAgICBBU1NFUlQoYXJyYXkpOwogICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgYXJyYXktPmxlbmd0aCgpOyBpKyspCi0gICAgICAgICAgICBCaW5k
aW5nVHJhaXRzPFQ+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShhcnJheS0+Z2V0KGkpLmdl
dCgpKTsKLSNlbHNlCi0gICAgICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7Ci0jZW5kaWYgLy8gQVNT
RVJUX0VOQUJMRUQKKyAgICAgICAgICAgIEJpbmRpbmdUcmFpdHM8VD46OmFzc2VydFZhbHVlSGFz
RXhwZWN0ZWRUeXBlKGFycmF5LT5nZXQoaSkucHRyKCkpOworI2VuZGlmCiAgICAgfQogfTsKIApA
QCAtODUsNiArODYsNCBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBCaW5kaW5nVHJhaXRzPGludD4gOiBQ
cmltaXRpdmVCaW5kaW5nVHJhaXRzPEpTT046OlZhbHVlOjpUeXBlOgogCiB9CiAKLXVzaW5nIFBy
b3RvY29sOjpCaW5kaW5nVHJhaXRzOwotCiB9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNHbG9iYWxPYmplY3RDb25z
b2xlQ2xpZW50LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNHbG9iYWxP
YmplY3RDb25zb2xlQ2xpZW50LmNwcAppbmRleCA0NmQwYjY5NDMyOGVlMDQxNzY2NTAzZmU1NmY5
ZDZjMjI5OTc1N2M2Li5iYzYzNjlhMGMzOWQ5YmI2NDA5NWY1ZDg3MDQ0ZDYwNzUzY2Q0ODdkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTR2xvYmFsT2JqZWN0
Q29uc29sZUNsaWVudC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9K
U0dsb2JhbE9iamVjdENvbnNvbGVDbGllbnQuY3BwCkBAIC0xMzYsMjggKzEzNiwyMiBAQCB2b2lk
IEpTR2xvYmFsT2JqZWN0Q29uc29sZUNsaWVudDo6cHJvZmlsZUVuZChKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiwgY29uc3QgU3RyaW5nJgogCiB2b2lkIEpTR2xvYmFsT2JqZWN0Q29uc29sZUNsaWVudDo6
c3RhcnRDb25zb2xlUHJvZmlsZSgpCiB7Ci0gICAgRXJyb3JTdHJpbmcgaWdub3JlZDsKLQogICAg
IGlmIChtX2RlYnVnZ2VyQWdlbnQpIHsKICAgICAgICAgbV9wcm9maWxlUmVzdG9yZUJyZWFrcG9p
bnRBY3RpdmVWYWx1ZSA9IG1fZGVidWdnZXJBZ2VudC0+YnJlYWtwb2ludHNBY3RpdmUoKTsKLSAg
ICAgICAgbV9kZWJ1Z2dlckFnZW50LT5zZXRCcmVha3BvaW50c0FjdGl2ZShpZ25vcmVkLCBmYWxz
ZSk7CisgICAgICAgIG1fZGVidWdnZXJBZ2VudC0+c2V0QnJlYWtwb2ludHNBY3RpdmUoZmFsc2Up
OwogICAgIH0KIAotICAgIGlmIChtX3NjcmlwdFByb2ZpbGVyQWdlbnQpIHsKLSAgICAgICAgY29u
c3QgYm9vbCBpbmNsdWRlU2FtcGxlcyA9IHRydWU7Ci0gICAgICAgIG1fc2NyaXB0UHJvZmlsZXJB
Z2VudC0+c3RhcnRUcmFja2luZyhpZ25vcmVkLCAmaW5jbHVkZVNhbXBsZXMpOwotICAgIH0KKyAg
ICBpZiAobV9zY3JpcHRQcm9maWxlckFnZW50KQorICAgICAgICBtX3NjcmlwdFByb2ZpbGVyQWdl
bnQtPnN0YXJ0VHJhY2tpbmcodHJ1ZSk7CiB9CiAKIHZvaWQgSlNHbG9iYWxPYmplY3RDb25zb2xl
Q2xpZW50OjpzdG9wQ29uc29sZVByb2ZpbGUoKQogewotICAgIEVycm9yU3RyaW5nIGlnbm9yZWQ7
Ci0KICAgICBpZiAobV9zY3JpcHRQcm9maWxlckFnZW50KQotICAgICAgICBtX3NjcmlwdFByb2Zp
bGVyQWdlbnQtPnN0b3BUcmFja2luZyhpZ25vcmVkKTsKKyAgICAgICAgbV9zY3JpcHRQcm9maWxl
ckFnZW50LT5zdG9wVHJhY2tpbmcoKTsKIAogICAgIGlmIChtX2RlYnVnZ2VyQWdlbnQpCi0gICAg
ICAgIG1fZGVidWdnZXJBZ2VudC0+c2V0QnJlYWtwb2ludHNBY3RpdmUoaWdub3JlZCwgbV9wcm9m
aWxlUmVzdG9yZUJyZWFrcG9pbnRBY3RpdmVWYWx1ZSk7CisgICAgICAgIG1fZGVidWdnZXJBZ2Vu
dC0+c2V0QnJlYWtwb2ludHNBY3RpdmUobV9wcm9maWxlUmVzdG9yZUJyZWFrcG9pbnRBY3RpdmVW
YWx1ZSk7CiB9CiAKIHZvaWQgSlNHbG9iYWxPYmplY3RDb25zb2xlQ2xpZW50Ojp0YWtlSGVhcFNu
YXBzaG90KEpTQzo6SlNHbG9iYWxPYmplY3QqLCBjb25zdCBTdHJpbmcmIHRpdGxlKQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0dsb2JhbE9iamVjdEluc3Bl
Y3RvckNvbnRyb2xsZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0ds
b2JhbE9iamVjdEluc3BlY3RvckNvbnRyb2xsZXIuY3BwCmluZGV4IGQ0ZGI1NjNlYmQ3NjUzMjY2
MDRmNTEyYzMxZTlkYjI4NmQxMDgzZjQuLmE2MGYyNWQ0MzdmYmU5ZmRmY2U2YmE1OGQzZTgyYzI2
ZGQ1NmQ2M2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNH
bG9iYWxPYmplY3RJbnNwZWN0b3JDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL0pTR2xvYmFsT2JqZWN0SW5zcGVjdG9yQ29udHJvbGxlci5jcHAKQEAg
LTIzMSw5ICsyMzEsOCBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0SW5zcGVjdG9yQ29udHJvbGxlcjo6
ZnJvbnRlbmRJbml0aWFsaXplZCgpCiAgICAgaWYgKG1fcGF1c2VBZnRlckluaXRpYWxpemF0aW9u
KSB7CiAgICAgICAgIG1fcGF1c2VBZnRlckluaXRpYWxpemF0aW9uID0gZmFsc2U7CiAKLSAgICAg
ICAgRXJyb3JTdHJpbmcgaWdub3JlZDsKLSAgICAgICAgZW5zdXJlRGVidWdnZXJBZ2VudCgpLmVu
YWJsZShpZ25vcmVkKTsKLSAgICAgICAgZW5zdXJlRGVidWdnZXJBZ2VudCgpLnBhdXNlKGlnbm9y
ZWQpOworICAgICAgICBlbnN1cmVEZWJ1Z2dlckFnZW50KCkuZW5hYmxlKCk7CisgICAgICAgIGVu
c3VyZURlYnVnZ2VyQWdlbnQoKS5wYXVzZSgpOwogICAgIH0KIAogI2lmIEVOQUJMRShSRU1PVEVf
SU5TUEVDVE9SKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9h
Z2VudHMvSW5zcGVjdG9yQWdlbnQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9hZ2VudHMvSW5zcGVjdG9yQWdlbnQuY3BwCmluZGV4IDViOWE3MTU0MDg1MDg2NDFjYTA2MWFl
Y2Y4ZjAxMTg0NmY3MTA0NDguLjg2ODZkNjk0MWI3ODQ3OTk1YjJkZmZkZDY3OGI2NmQzYjQ4MWRk
YjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0lu
c3BlY3RvckFnZW50LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2Fn
ZW50cy9JbnNwZWN0b3JBZ2VudC5jcHAKQEAgLTU0LDQ0ICs1NCw0OSBAQCB2b2lkIEluc3BlY3Rv
ckFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChEaXNjb25uZWN0UmVhc29uKQog
ewogICAgIG1fcGVuZGluZ0V2YWx1YXRlVGVzdENvbW1hbmRzLmNsZWFyKCk7CiAKLSAgICBFcnJv
clN0cmluZyBpZ25vcmVkOwotICAgIGRpc2FibGUoaWdub3JlZCk7CisgICAgZGlzYWJsZSgpOwog
fQogCi12b2lkIEluc3BlY3RvckFnZW50OjplbmFibGUoRXJyb3JTdHJpbmcmKQorUHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yQWdlbnQ6OmVuYWJsZSgpCiB7CiAgICAgbV9l
bmFibGVkID0gdHJ1ZTsKIAogICAgIGlmIChtX3BlbmRpbmdJbnNwZWN0RGF0YS5maXJzdCkKLSAg
ICAgICAgaW5zcGVjdChtX3BlbmRpbmdJbnNwZWN0RGF0YS5maXJzdC5jb3B5UmVmKCksIG1fcGVu
ZGluZ0luc3BlY3REYXRhLnNlY29uZC5jb3B5UmVmKCkpOworICAgICAgICBpbnNwZWN0KG1fcGVu
ZGluZ0luc3BlY3REYXRhLmZpcnN0LnJlbGVhc2VOb25OdWxsKCksIG1fcGVuZGluZ0luc3BlY3RE
YXRhLnNlY29uZC5yZWxlYXNlTm9uTnVsbCgpKTsKIAogICAgIGZvciAoYXV0byYgdGVzdENvbW1h
bmQgOiBtX3BlbmRpbmdFdmFsdWF0ZVRlc3RDb21tYW5kcykKICAgICAgICAgbV9mcm9udGVuZERp
c3BhdGNoZXItPmV2YWx1YXRlRm9yVGVzdEluRnJvbnRlbmQodGVzdENvbW1hbmQpOwogCiAgICAg
bV9wZW5kaW5nRXZhbHVhdGVUZXN0Q29tbWFuZHMuY2xlYXIoKTsKKworICAgIHJldHVybiB7IH07
CiB9CiAKLXZvaWQgSW5zcGVjdG9yQWdlbnQ6OmRpc2FibGUoRXJyb3JTdHJpbmcmKQorUHJvdG9j
b2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yQWdlbnQ6OmRpc2FibGUoKQogewogICAg
IG1fZW5hYmxlZCA9IGZhbHNlOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0
b3JBZ2VudDo6aW5pdGlhbGl6ZWQoRXJyb3JTdHJpbmcmKQorUHJvdG9jb2w6OkVycm9yU3RyaW5n
T3I8dm9pZD4gSW5zcGVjdG9yQWdlbnQ6OmluaXRpYWxpemVkKCkKIHsKICAgICBtX2Vudmlyb25t
ZW50LmZyb250ZW5kSW5pdGlhbGl6ZWQoKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQg
SW5zcGVjdG9yQWdlbnQ6Omluc3BlY3QoUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVP
YmplY3Q+JiYgb2JqZWN0VG9JbnNwZWN0LCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIGhpbnRzKQor
dm9pZCBJbnNwZWN0b3JBZ2VudDo6aW5zcGVjdChSZWY8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90
ZU9iamVjdD4mJiBvYmplY3QsIFJlZjxKU09OOjpPYmplY3Q+JiYgaGludHMpCiB7CiAgICAgaWYg
KG1fZW5hYmxlZCkgewotICAgICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+aW5zcGVjdChvYmpl
Y3RUb0luc3BlY3QsIGhpbnRzKTsKKyAgICAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPmluc3Bl
Y3QoV1RGTW92ZShvYmplY3QpLCBXVEZNb3ZlKGhpbnRzKSk7CiAgICAgICAgIG1fcGVuZGluZ0lu
c3BlY3REYXRhLmZpcnN0ID0gbnVsbHB0cjsKICAgICAgICAgbV9wZW5kaW5nSW5zcGVjdERhdGEu
c2Vjb25kID0gbnVsbHB0cjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1fcGVuZGlu
Z0luc3BlY3REYXRhLmZpcnN0ID0gb2JqZWN0VG9JbnNwZWN0OwotICAgIG1fcGVuZGluZ0luc3Bl
Y3REYXRhLnNlY29uZCA9IGhpbnRzOworICAgIG1fcGVuZGluZ0luc3BlY3REYXRhLmZpcnN0ID0g
V1RGTW92ZShvYmplY3QpOworICAgIG1fcGVuZGluZ0luc3BlY3REYXRhLnNlY29uZCA9IFdURk1v
dmUoaGludHMpOwogfQogCiB2b2lkIEluc3BlY3RvckFnZW50OjpldmFsdWF0ZUZvclRlc3RJbkZy
b250ZW5kKGNvbnN0IFN0cmluZyYgc2NyaXB0KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQWdlbnQuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckFnZW50LmgKaW5kZXggODU4YzY5YWMy
ZWI4NmRjMTgyOGEyZjNlMTI2NzE1ODA5ZTg5ZjM1YS4uNTk0Y2VlNzE3NDA2MDU5OWM4OTkzNmQw
YzI3MzZhMTUzYWEyNzNkNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9hZ2VudHMvSW5zcGVjdG9yQWdlbnQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBZ2VudC5oCkBAIC00MCwyNiArNDAsMjQgQEAgbmFt
ZXNwYWNlIEluc3BlY3RvciB7CiBjbGFzcyBCYWNrZW5kRGlzcGF0Y2hlcjsKIGNsYXNzIEluc3Bl
Y3RvckVudmlyb25tZW50OwogCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQogY2xhc3Mg
SlNfRVhQT1JUX1BSSVZBVEUgSW5zcGVjdG9yQWdlbnQgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9y
QWdlbnRCYXNlLCBwdWJsaWMgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKICAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbnNwZWN0b3JBZ2VudCk7CiAgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgSW5zcGVjdG9yQWdlbnQoQWdlbnRDb250ZXh0Jik7
Ci0gICAgfkluc3BlY3RvckFnZW50KCkgZmluYWw7CisgICAgfkluc3BlY3RvckFnZW50KCk7CiAK
ICAgICAvLyBJbnNwZWN0b3JBZ2VudEJhc2UKLSAgICB2b2lkIGRpZENyZWF0ZUZyb250ZW5kQW5k
QmFja2VuZChGcm9udGVuZFJvdXRlciosIEJhY2tlbmREaXNwYXRjaGVyKikgZmluYWw7Ci0gICAg
dm9pZCB3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChEaXNjb25uZWN0UmVhc29uKSBmaW5h
bDsKKyAgICB2b2lkIGRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChGcm9udGVuZFJvdXRlcios
IEJhY2tlbmREaXNwYXRjaGVyKik7CisgICAgdm9pZCB3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFj
a2VuZChEaXNjb25uZWN0UmVhc29uKTsKIAogICAgIC8vIEluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVySGFuZGxlcgotICAgIHZvaWQgZW5hYmxlKEVycm9yU3RyaW5nJikgZmluYWw7Ci0gICAgdm9p
ZCBkaXNhYmxlKEVycm9yU3RyaW5nJikgZmluYWw7Ci0gICAgdm9pZCBpbml0aWFsaXplZChFcnJv
clN0cmluZyYpIGZpbmFsOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGVuYWJs
ZSgpOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGRpc2FibGUoKTsKKyAgICBQ
cm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBpbml0aWFsaXplZCgpOwogCiAgICAgLy8gQ29t
bWFuZExpbmVBUEkKLSAgICB2b2lkIGluc3BlY3QoUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpS
ZW1vdGVPYmplY3Q+JiYgb2JqZWN0VG9JbnNwZWN0LCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIGhp
bnRzKTsKKyAgICB2b2lkIGluc3BlY3QoUmVmPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmpl
Y3Q+JiYsIFJlZjxKU09OOjpPYmplY3Q+JiYgaGludHMpOwogCiAgICAgdm9pZCBldmFsdWF0ZUZv
clRlc3RJbkZyb250ZW5kKGNvbnN0IFN0cmluZyYgc2NyaXB0KTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQXVkaXRBZ2VudC5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBdWRp
dEFnZW50LmNwcAppbmRleCAwMGIxZWNjMWFmNDgwNzBlZmVkYzc2NmEzYmE2ZmY1YjZmNGJhNzAw
Li4yZjlmOGYwNTljYjEzOTEzYWZhMzBmNjQ5NzdlMDMzYjUzNGM5NDkzIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBdWRpdEFnZW50
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0
b3JBdWRpdEFnZW50LmNwcApAQCAtNTcsNDEgKzU3LDQxIEBAIHZvaWQgSW5zcGVjdG9yQXVkaXRB
Z2VudDo6d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoRGlzY29ubmVjdFJlYXNvbikKIHsK
IH0KIAotdm9pZCBJbnNwZWN0b3JBdWRpdEFnZW50OjpzZXR1cChFcnJvclN0cmluZyYgZXJyb3JT
dHJpbmcsIGNvbnN0IGludCogZXhlY3V0aW9uQ29udGV4dElkKQorUHJvdG9jb2w6OkVycm9yU3Ry
aW5nT3I8dm9pZD4gSW5zcGVjdG9yQXVkaXRBZ2VudDo6c2V0dXAoT3B0aW9uYWw8UHJvdG9jb2w6
OlJ1bnRpbWU6OkV4ZWN1dGlvbkNvbnRleHRJZD4mJiBleGVjdXRpb25Db250ZXh0SWQpCiB7Ci0g
ICAgaWYgKGhhc0FjdGl2ZUF1ZGl0KCkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiTXVzdCBj
YWxsIHRlYXJkb3duIGJlZm9yZSBjYWxsaW5nIHNldHVwIGFnYWluIl9zOwotICAgICAgICByZXR1
cm47Ci0gICAgfQorICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKIAotICAg
IEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0ID0gaW5qZWN0ZWRTY3JpcHRGb3JFdmFsKGVy
cm9yU3RyaW5nLCBleGVjdXRpb25Db250ZXh0SWQpOworICAgIGlmIChoYXNBY3RpdmVBdWRpdCgp
KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk11c3QgY2FsbCB0ZWFyZG93biBiZWZv
cmUgY2FsbGluZyBzZXR1cCBhZ2FpbiJfcyk7CisKKyAgICBJbmplY3RlZFNjcmlwdCBpbmplY3Rl
ZFNjcmlwdCA9IGluamVjdGVkU2NyaXB0Rm9yRXZhbChlcnJvclN0cmluZywgV1RGTW92ZShleGVj
dXRpb25Db250ZXh0SWQpKTsKICAgICBpZiAoaW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKQot
ICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmlu
Zyk7CiAKICAgICBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBpbmplY3RlZFNj
cmlwdC5nbG9iYWxPYmplY3QoKTsKLSAgICBpZiAoIWdsb2JhbE9iamVjdCkgewotICAgICAgICBl
cnJvclN0cmluZyA9ICJNaXNzaW5nIGV4ZWN1dGlvbiBzdGF0ZSBvZiBpbmplY3RlZCBzY3JpcHQg
Zm9yIGdpdmVuIGV4ZWN1dGlvbkNvbnRleHRJZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
KyAgICBpZiAoIWdsb2JhbE9iamVjdCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJN
aXNzaW5nIGV4ZWN1dGlvbiBzdGF0ZSBvZiBpbmplY3RlZCBzY3JpcHQgZm9yIGdpdmVuIGV4ZWN1
dGlvbkNvbnRleHRJZCJfcyk7CiAKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAK
ICAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKGdsb2JhbE9iamVjdCk7CiAKICAgICBtX2luamVj
dGVkV2ViSW5zcGVjdG9yQXVkaXRWYWx1ZS5zZXQodm0sIGNvbnN0cnVjdEVtcHR5T2JqZWN0KGds
b2JhbE9iamVjdCkpOwotICAgIGlmICghbV9pbmplY3RlZFdlYkluc3BlY3RvckF1ZGl0VmFsdWUp
IHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiVW5hYmxlIHRvIGNvbnN0cnVjdCBpbmplY3RlZCBX
ZWJJbnNwZWN0b3JBdWRpdCBvYmplY3QuIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAg
IGlmICghbV9pbmplY3RlZFdlYkluc3BlY3RvckF1ZGl0VmFsdWUpCisgICAgICAgIHJldHVybiBt
YWtlVW5leHBlY3RlZCgiVW5hYmxlIHRvIGNvbnN0cnVjdCBpbmplY3RlZCBXZWJJbnNwZWN0b3JB
dWRpdCBvYmplY3QuIl9zKTsKIAogICAgIHBvcHVsYXRlQXVkaXRPYmplY3QoZ2xvYmFsT2JqZWN0
LCBtX2luamVjdGVkV2ViSW5zcGVjdG9yQXVkaXRWYWx1ZSk7CisKKyAgICByZXR1cm4geyB9Owog
fQogCi12b2lkIEluc3BlY3RvckF1ZGl0QWdlbnQ6OnJ1bihFcnJvclN0cmluZyYgZXJyb3JTdHJp
bmcsIGNvbnN0IFN0cmluZyYgdGVzdCwgY29uc3QgaW50KiBleGVjdXRpb25Db250ZXh0SWQsIFJl
ZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0LCBPcHRpb25hbDxi
b29sPiYgd2FzVGhyb3duKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8c3RkOjp0dXBsZTxSZWY8
UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4sIE9wdGlvbmFsPGJvb2w+IC8qIHdhc1Ro
cm93biAqLz4+IEluc3BlY3RvckF1ZGl0QWdlbnQ6OnJ1bihjb25zdCBTdHJpbmcmIHRlc3QsIE9w
dGlvbmFsPFByb3RvY29sOjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0SWQ+JiYgZXhlY3V0aW9u
Q29udGV4dElkKQogewotICAgIEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0ID0gaW5qZWN0
ZWRTY3JpcHRGb3JFdmFsKGVycm9yU3RyaW5nLCBleGVjdXRpb25Db250ZXh0SWQpOworICAgIFBy
b3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKworICAgIEluamVjdGVkU2NyaXB0IGlu
amVjdGVkU2NyaXB0ID0gaW5qZWN0ZWRTY3JpcHRGb3JFdmFsKGVycm9yU3RyaW5nLCBXVEZNb3Zl
KGV4ZWN1dGlvbkNvbnRleHRJZCkpOwogICAgIGlmIChpbmplY3RlZFNjcmlwdC5oYXNOb1ZhbHVl
KCkpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9y
U3RyaW5nKTsKIAogICAgIFN0cmluZ0J1aWxkZXIgZnVuY3Rpb25TdHJpbmc7CiAgICAgZnVuY3Rp
b25TdHJpbmcuYXBwZW5kTGl0ZXJhbCgiKGZ1bmN0aW9uKFdlYkluc3BlY3RvckF1ZGl0KSB7IFwi
dXNlIHN0cmljdFwiOyByZXR1cm4gZXZhbChgKCIpOwpAQCAtMTAzLDYgKzEwMyw4IEBAIHZvaWQg
SW5zcGVjdG9yQXVkaXRBZ2VudDo6cnVuKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3Qg
U3RyaW5nJiB0ZXN0LCBjb25zCiAgICAgaWYgKG1faW5qZWN0ZWRXZWJJbnNwZWN0b3JBdWRpdFZh
bHVlKQogICAgICAgICBvcHRpb25zLmFyZ3MgPSB7IG1faW5qZWN0ZWRXZWJJbnNwZWN0b3JBdWRp
dFZhbHVlLmdldCgpIH07CiAKKyAgICBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9i
amVjdD4gcmVzdWx0OworICAgIE9wdGlvbmFsPGJvb2w+IHdhc1Rocm93bjsKICAgICBPcHRpb25h
bDxpbnQ+IHNhdmVkUmVzdWx0SW5kZXg7CiAKICAgICBKU0M6OkRlYnVnZ2VyOjpUZW1wb3Jhcmls
eURpc2FibGVFeGNlcHRpb25CcmVha3BvaW50cyB0ZW1wb3JhcmlseURpc2FibGVFeGNlcHRpb25C
cmVha3BvaW50cyhtX2RlYnVnZ2VyKTsKQEAgLTExMywxNiArMTE1LDIxIEBAIHZvaWQgSW5zcGVj
dG9yQXVkaXRBZ2VudDo6cnVuKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5n
JiB0ZXN0LCBjb25zCiAgICAgaW5qZWN0ZWRTY3JpcHQuZXhlY3V0ZShlcnJvclN0cmluZywgZnVu
Y3Rpb25TdHJpbmcudG9TdHJpbmcoKSwgV1RGTW92ZShvcHRpb25zKSwgcmVzdWx0LCB3YXNUaHJv
d24sIHNhdmVkUmVzdWx0SW5kZXgpOwogCiAgICAgdW5tdXRlQ29uc29sZSgpOworCisgICAgaWYg
KCFyZXN1bHQpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CisK
KyAgICByZXR1cm4geyB7IHJlc3VsdC5yZWxlYXNlTm9uTnVsbCgpLCBXVEZNb3ZlKHdhc1Rocm93
bikgfSB9OwogfQogCi12b2lkIEluc3BlY3RvckF1ZGl0QWdlbnQ6OnRlYXJkb3duKEVycm9yU3Ry
aW5nJiBlcnJvclN0cmluZykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3Rv
ckF1ZGl0QWdlbnQ6OnRlYXJkb3duKCkKIHsKLSAgICBpZiAoIWhhc0FjdGl2ZUF1ZGl0KCkpIHsK
LSAgICAgICAgZXJyb3JTdHJpbmcgPSAiTXVzdCBjYWxsIHNldHVwIGJlZm9yZSBjYWxsaW5nIHRl
YXJkb3duIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghaGFzQWN0aXZlQXVk
aXQoKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJNdXN0IGNhbGwgc2V0dXAgYmVm
b3JlIGNhbGxpbmcgdGVhcmRvd24iX3MpOwogCiAgICAgbV9pbmplY3RlZFdlYkluc3BlY3RvckF1
ZGl0VmFsdWUuY2xlYXIoKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKIGJvb2wgSW5zcGVjdG9y
QXVkaXRBZ2VudDo6aGFzQWN0aXZlQXVkaXQoKSBjb25zdApAQCAtMTM5LDcgKzE0Niw3IEBAIHZv
aWQgSW5zcGVjdG9yQXVkaXRBZ2VudDo6cG9wdWxhdGVBdWRpdE9iamVjdChKU0M6OkpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsCiAgICAgSlNDOjpWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZt
KCk7CiAgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayh2bSk7CiAKLSAgICBhdWRpdE9iamVjdC0+
cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJWZXJzaW9uIiks
IEpTQzo6SlNWYWx1ZShJbnNwZWN0b3I6OlByb3RvY29sOjpBdWRpdDo6VkVSU0lPTikpOworICAg
IGF1ZGl0T2JqZWN0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2
bSwgIlZlcnNpb24iKSwgSlNDOjpKU1ZhbHVlKFByb3RvY29sOjpBdWRpdDo6VkVSU0lPTikpOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckF1ZGl0QWdlbnQuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckF1ZGl0QWdlbnQuaAppbmRl
eCA1YjZkOGFhYjcyMjYzZjE4YWE2NDEwNzg1YzAxYzliYThjNGQzMGY4Li5iZjUwNmMzNmQyZGZm
M2Y2ZmNhNTk5ZjY3ZTU4NTRhMjY4YTdiMWQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBdWRpdEFnZW50LmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQXVkaXRBZ2VudC5oCkBA
IC00MCw3ICs0MCw2IEBAIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCiBjbGFzcyBJbmplY3RlZFNj
cmlwdDsKIGNsYXNzIEluamVjdGVkU2NyaXB0TWFuYWdlcjsKLXR5cGVkZWYgU3RyaW5nIEVycm9y
U3RyaW5nOwogCiBjbGFzcyBKU19FWFBPUlRfUFJJVkFURSBJbnNwZWN0b3JBdWRpdEFnZW50IDog
cHVibGljIEluc3BlY3RvckFnZW50QmFzZSwgcHVibGljIEF1ZGl0QmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbnNwZWN0b3JBdWRpdEFnZW50KTsK
QEAgLTUzLDkgKzUyLDkgQEAgcHVibGljOgogICAgIHZvaWQgd2lsbERlc3Ryb3lGcm9udGVuZEFu
ZEJhY2tlbmQoRGlzY29ubmVjdFJlYXNvbikgZmluYWw7CiAKICAgICAvLyBBdWRpdEJhY2tlbmRE
aXNwYXRjaGVySGFuZGxlcgotICAgIHZvaWQgc2V0dXAoRXJyb3JTdHJpbmcmLCBjb25zdCBpbnQq
IGV4ZWN1dGlvbkNvbnRleHRJZCkgZmluYWw7Ci0gICAgdm9pZCBydW4oRXJyb3JTdHJpbmcmLCBj
b25zdCBTdHJpbmcmIHRlc3QsIGNvbnN0IGludCogZXhlY3V0aW9uQ29udGV4dElkLCBSZWZQdHI8
UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3VsdCwgT3B0aW9uYWw8Ym9vbD4m
IHdhc1Rocm93bikgZmluYWw7Ci0gICAgdm9pZCB0ZWFyZG93bihFcnJvclN0cmluZyYpIGZpbmFs
OworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHNldHVwKE9wdGlvbmFsPFByb3Rv
Y29sOjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0SWQ+JiYpIGZpbmFsOworICAgIFByb3RvY29s
OjpFcnJvclN0cmluZ09yPHN0ZDo6dHVwbGU8UmVmPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVP
YmplY3Q+LCBPcHRpb25hbDxib29sPiAvKiB3YXNUaHJvd24gKi8+PiBydW4oY29uc3QgU3RyaW5n
JiB0ZXN0LCBPcHRpb25hbDxQcm90b2NvbDo6UnVudGltZTo6RXhlY3V0aW9uQ29udGV4dElkPiYm
KSBmaW5hbDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiB0ZWFyZG93bigpIGZp
bmFsOwogCiAgICAgYm9vbCBoYXNBY3RpdmVBdWRpdCgpIGNvbnN0OwogCkBAIC02NCw3ICs2Myw3
IEBAIHByb3RlY3RlZDoKIAogICAgIEluamVjdGVkU2NyaXB0TWFuYWdlciYgaW5qZWN0ZWRTY3Jp
cHRNYW5hZ2VyKCkgeyByZXR1cm4gbV9pbmplY3RlZFNjcmlwdE1hbmFnZXI7IH0KIAotICAgIHZp
cnR1YWwgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHRGb3JFdmFsKEVycm9yU3RyaW5nJiwg
Y29uc3QgaW50KiBleGVjdXRpb25Db250ZXh0SWQpID0gMDsKKyAgICB2aXJ0dWFsIEluamVjdGVk
U2NyaXB0IGluamVjdGVkU2NyaXB0Rm9yRXZhbChQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBPcHRp
b25hbDxQcm90b2NvbDo6UnVudGltZTo6RXhlY3V0aW9uQ29udGV4dElkPiYmKSA9IDA7CiAKICAg
ICB2aXJ0dWFsIHZvaWQgcG9wdWxhdGVBdWRpdE9iamVjdChKU0M6OkpTR2xvYmFsT2JqZWN0Kiwg
SlNDOjpTdHJvbmc8SlNDOjpKU09iamVjdD4mIGF1ZGl0T2JqZWN0KTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ29uc29sZUFn
ZW50LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rv
ckNvbnNvbGVBZ2VudC5jcHAKaW5kZXggMTA1ZmU2ZmM2YzIyMDhlZjc2MzcxZWFlZGRiZmE0NzMx
ZmJmYjY1NC4uMTNiNjIzNGQxZjUzMjg1MGUzMDA1Mjc5NzNjMjE1YjcyZTM2YWUxNyAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ29u
c29sZUFnZW50LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50
cy9JbnNwZWN0b3JDb25zb2xlQWdlbnQuY3BwCkBAIC01Myw4ICs1Myw3IEBAIHZvaWQgSW5zcGVj
dG9yQ29uc29sZUFnZW50OjpkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoRnJvbnRlbmRSb3V0
ZXIqLCBCYWNrZW5kCiAKIHZvaWQgSW5zcGVjdG9yQ29uc29sZUFnZW50Ojp3aWxsRGVzdHJveUZy
b250ZW5kQW5kQmFja2VuZChEaXNjb25uZWN0UmVhc29uKQogewotICAgIFN0cmluZyBlcnJvclN0
cmluZzsKLSAgICBkaXNhYmxlKGVycm9yU3RyaW5nKTsKKyAgICBkaXNhYmxlKCk7CiB9CiAKIHZv
aWQgSW5zcGVjdG9yQ29uc29sZUFnZW50OjpkaXNjYXJkVmFsdWVzKCkKQEAgLTYzLDEwICs2Miwx
MCBAQCB2b2lkIEluc3BlY3RvckNvbnNvbGVBZ2VudDo6ZGlzY2FyZFZhbHVlcygpCiAgICAgbV9l
eHBpcmVkQ29uc29sZU1lc3NhZ2VDb3VudCA9IDA7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ29uc29s
ZUFnZW50OjplbmFibGUoRXJyb3JTdHJpbmcmKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9p
ZD4gSW5zcGVjdG9yQ29uc29sZUFnZW50OjplbmFibGUoKQogewogICAgIGlmIChtX2VuYWJsZWQp
Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIG1fZW5hYmxlZCA9
IHRydWU7CiAKQEAgLTgwLDE3ICs3OSwyMSBAQCB2b2lkIEluc3BlY3RvckNvbnNvbGVBZ2VudDo6
ZW5hYmxlKEVycm9yU3RyaW5nJikKIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbWVzc2Fn
ZXMuc2l6ZSgpOyArK2kpCiAgICAgICAgIG1lc3NhZ2VzW2ldLT5hZGRUb0Zyb250ZW5kKCptX2Zy
b250ZW5kRGlzcGF0Y2hlciwgbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIsIGZhbHNlKTsKKworICAg
IHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ29uc29sZUFnZW50OjpkaXNhYmxlKEVy
cm9yU3RyaW5nJikKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckNvbnNv
bGVBZ2VudDo6ZGlzYWJsZSgpCiB7CiAgICAgaWYgKCFtX2VuYWJsZWQpCi0gICAgICAgIHJldHVy
bjsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIG1fZW5hYmxlZCA9IGZhbHNlOworCisgICAg
cmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OmNsZWFyTWVzc2Fn
ZXMoRXJyb3JTdHJpbmcmKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9y
Q29uc29sZUFnZW50OjpjbGVhck1lc3NhZ2VzKCkKIHsKICAgICBtX2NvbnNvbGVNZXNzYWdlcy5j
bGVhcigpOwogICAgIG1fZXhwaXJlZENvbnNvbGVNZXNzYWdlQ291bnQgPSAwOwpAQCAtOTksNiAr
MTAyLDggQEAgdm9pZCBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OmNsZWFyTWVzc2FnZXMoRXJyb3JT
dHJpbmcmKQogCiAgICAgaWYgKG1fZW5hYmxlZCkKICAgICAgICAgbV9mcm9udGVuZERpc3BhdGNo
ZXItPm1lc3NhZ2VzQ2xlYXJlZCgpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAogYm9vbCBJbnNw
ZWN0b3JDb25zb2xlQWdlbnQ6OmRldmVsb3BlckV4dHJhc0VuYWJsZWQoKSBjb25zdApAQCAtMTA4
LDggKzExMyw3IEBAIGJvb2wgSW5zcGVjdG9yQ29uc29sZUFnZW50OjpkZXZlbG9wZXJFeHRyYXNF
bmFibGVkKCkgY29uc3QKIAogdm9pZCBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OnJlc2V0KCkKIHsK
LSAgICBFcnJvclN0cmluZyBpZ25vcmVkOwotICAgIGNsZWFyTWVzc2FnZXMoaWdub3JlZCk7Cisg
ICAgY2xlYXJNZXNzYWdlcygpOwogCiAgICAgbV90aW1lcy5jbGVhcigpOwogICAgIG1fY291bnRz
LmNsZWFyKCk7CkBAIC0xMTcsMTAgKzEyMSw4IEBAIHZvaWQgSW5zcGVjdG9yQ29uc29sZUFnZW50
OjpyZXNldCgpCiAKIHZvaWQgSW5zcGVjdG9yQ29uc29sZUFnZW50OjphZGRNZXNzYWdlVG9Db25z
b2xlKHN0ZDo6dW5pcXVlX3B0cjxDb25zb2xlTWVzc2FnZT4gbWVzc2FnZSkKIHsKLSAgICBpZiAo
bWVzc2FnZS0+dHlwZSgpID09IE1lc3NhZ2VUeXBlOjpDbGVhcikgewotICAgICAgICBFcnJvclN0
cmluZyBpZ25vcmVkOwotICAgICAgICBjbGVhck1lc3NhZ2VzKGlnbm9yZWQpOwotICAgIH0KKyAg
ICBpZiAobWVzc2FnZS0+dHlwZSgpID09IE1lc3NhZ2VUeXBlOjpDbGVhcikKKyAgICAgICAgY2xl
YXJNZXNzYWdlcygpOwogCiAgICAgYWRkQ29uc29sZU1lc3NhZ2UoV1RGTW92ZShtZXNzYWdlKSk7
CiB9CkBAIC0xOTEsMTIgKzE5MywxMiBAQCB2b2lkIEluc3BlY3RvckNvbnNvbGVBZ2VudDo6dGFr
ZUhlYXBTbmFwc2hvdChjb25zdCBTdHJpbmcmIHRpdGxlKQogICAgIGlmICghbV9oZWFwQWdlbnQp
CiAgICAgICAgIHJldHVybjsKIAotICAgIEVycm9yU3RyaW5nIGlnbm9yZWQ7Ci0gICAgZG91Ymxl
IHRpbWVzdGFtcDsKLSAgICBTdHJpbmcgc25hcHNob3REYXRhOwotICAgIG1faGVhcEFnZW50LT5z
bmFwc2hvdChpZ25vcmVkLCAmdGltZXN0YW1wLCAmc25hcHNob3REYXRhKTsKKyAgICBhdXRvIHJl
c3VsdCA9IG1faGVhcEFnZW50LT5zbmFwc2hvdCgpOworICAgIGlmICghcmVzdWx0KQorICAgICAg
ICByZXR1cm47CiAKLSAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+aGVhcFNuYXBzaG90KHRpbWVz
dGFtcCwgc25hcHNob3REYXRhLCB0aXRsZS5pc0VtcHR5KCkgPyBudWxscHRyIDogJnRpdGxlKTsK
KyAgICBhdXRvIFt0aW1lc3RhbXAsIHNuYXBzaG90RGF0YV0gPSBXVEZNb3ZlKHJlc3VsdC52YWx1
ZSgpKTsKKyAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+aGVhcFNuYXBzaG90KHRpbWVzdGFtcCwg
c25hcHNob3REYXRhLCB0aXRsZSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ29uc29sZUFnZW50Ojpj
b3VudChKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFN0cmluZyYgbGFi
ZWwpCkBAIC0yNTYsMTUgKzI1OCwxNSBAQCB2b2lkIEluc3BlY3RvckNvbnNvbGVBZ2VudDo6YWRk
Q29uc29sZU1lc3NhZ2Uoc3RkOjp1bmlxdWVfcHRyPENvbnNvbGVNZXNzYWdlPiBjbwogICAgIH0K
IH0KIAotdm9pZCBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OmdldExvZ2dpbmdDaGFubmVscyhFcnJv
clN0cmluZyYsIFJlZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpDb25zb2xlOjpDaGFubmVs
Pj4mIGNoYW5uZWxzKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEpTT046OkFycmF5T2Y8
UHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWw+Pj4gSW5zcGVjdG9yQ29uc29sZUFnZW50OjpnZXRM
b2dnaW5nQ2hhbm5lbHMoKQogewogICAgIC8vIERlZmF1bHQgaW1wbGVtZW50YXRpb24gaGFzIG5v
IGxvZ2dpbmcgY2hhbm5lbHMuCi0gICAgY2hhbm5lbHMgPSBKU09OOjpBcnJheU9mPFByb3RvY29s
OjpDb25zb2xlOjpDaGFubmVsPjo6Y3JlYXRlKCk7CisgICAgcmV0dXJuIEpTT046OkFycmF5T2Y8
UHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWw+OjpjcmVhdGUoKTsKIH0KIAotdm9pZCBJbnNwZWN0
b3JDb25zb2xlQWdlbnQ6OnNldExvZ2dpbmdDaGFubmVsTGV2ZWwoRXJyb3JTdHJpbmcmIGVycm9y
U3RyaW5nLCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKQorUHJvdG9jb2w6OkVycm9yU3Ry
aW5nT3I8dm9pZD4gSW5zcGVjdG9yQ29uc29sZUFnZW50OjpzZXRMb2dnaW5nQ2hhbm5lbExldmVs
KFByb3RvY29sOjpDb25zb2xlOjpDaGFubmVsU291cmNlLCBQcm90b2NvbDo6Q29uc29sZTo6Q2hh
bm5lbExldmVsKQogewotICAgIGVycm9yU3RyaW5nID0gIk5vdCBzdXBwb3J0ZWQiX3M7CisgICAg
cmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJOb3Qgc3VwcG9ydGVkIl9zKTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgSW5zcGVjdG9yCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL2FnZW50cy9JbnNwZWN0b3JDb25zb2xlQWdlbnQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNvbnNvbGVBZ2VudC5oCmluZGV4IDc4Y2FmMWFk
MDhhZTU3YjFlMDc4NWM5YWRkNTE2NzUzNmFmYmYyOTYuLmVkOGUxZjY5OWE1ZDBjOTFjZDA1NjY5
MWE3ZGIyMTk4MGYyMzVkMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3IvYWdlbnRzL0luc3BlY3RvckNvbnNvbGVBZ2VudC5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNvbnNvbGVBZ2VudC5oCkBAIC00Niw3
ICs0Niw2IEBAIGNsYXNzIEluamVjdGVkU2NyaXB0TWFuYWdlcjsKIGNsYXNzIEluc3BlY3Rvckhl
YXBBZ2VudDsKIGNsYXNzIFNjcmlwdEFyZ3VtZW50czsKIGNsYXNzIFNjcmlwdENhbGxTdGFjazsK
LXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwogCiBjbGFzcyBKU19FWFBPUlRfUFJJVkFURSBJ
bnNwZWN0b3JDb25zb2xlQWdlbnQgOiBwdWJsaWMgSW5zcGVjdG9yQWdlbnRCYXNlLCBwdWJsaWMg
Q29uc29sZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoSW5zcGVjdG9yQ29uc29sZUFnZW50KTsKQEAgLTYxLDExICs2MCwxMSBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBkaXNjYXJkVmFsdWVzKCkgZmluYWw7CiAKICAgICAvLyBDb25zb2xlQmFja2VuZERp
c3BhdGNoZXJIYW5kbGVyCi0gICAgdm9pZCBlbmFibGUoRXJyb3JTdHJpbmcmKSBmaW5hbDsKLSAg
ICB2b2lkIGRpc2FibGUoRXJyb3JTdHJpbmcmKSBmaW5hbDsKLSAgICB2b2lkIGNsZWFyTWVzc2Fn
ZXMoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2b2lkIGdldExvZ2dpbmdDaGFubmVscyhF
cnJvclN0cmluZyYsIFJlZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpDb25zb2xlOjpDaGFu
bmVsPj4mKSBvdmVycmlkZTsKLSAgICB2b2lkIHNldExvZ2dpbmdDaGFubmVsTGV2ZWwoRXJyb3JT
dHJpbmcmLCBjb25zdCBTdHJpbmcmIGNoYW5uZWwsIGNvbnN0IFN0cmluZyYgbGV2ZWwpIG92ZXJy
aWRlOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGVuYWJsZSgpIGZpbmFsOwor
ICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGRpc2FibGUoKSBmaW5hbDsKKyAgICBQ
cm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBjbGVhck1lc3NhZ2VzKCkgb3ZlcnJpZGU7Cisg
ICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkNv
bnNvbGU6OkNoYW5uZWw+Pj4gZ2V0TG9nZ2luZ0NoYW5uZWxzKCkgb3ZlcnJpZGU7CisgICAgUHJv
dG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc2V0TG9nZ2luZ0NoYW5uZWxMZXZlbChQcm90b2Nv
bDo6Q29uc29sZTo6Q2hhbm5lbFNvdXJjZSwgUHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWxMZXZl
bCkgb3ZlcnJpZGU7CiAKICAgICB2b2lkIHNldEhlYXBBZ2VudChJbnNwZWN0b3JIZWFwQWdlbnQq
IGFnZW50KSB7IG1faGVhcEFnZW50ID0gYWdlbnQ7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JEZWJ1Z2dl
ckFnZW50LmNwcAppbmRleCAxM2ZjMmM1M2I1YWM0NjVlNmUzZDY2YWJlMDU1YzBlZTZkNGRjMDcw
Li40MWY0YmE0MjdlYTRmNzlkYzE0NDdmZWE1OTY0YWQ4MDYzY2JkZjcyIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JEZWJ1Z2dlckFn
ZW50LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNw
ZWN0b3JEZWJ1Z2dlckFnZW50LmNwcApAQCAtNjQsMjUgKzY0LDI1IEBAIHN0YXRpYyBib29sIGlz
V2ViS2l0SW5qZWN0ZWRTY3JpcHQoY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwpCiAgICAgcmV0dXJu
IHNvdXJjZVVSTC5zdGFydHNXaXRoKCJfX0luamVjdGVkU2NyaXB0XyIpICYmIHNvdXJjZVVSTC5l
bmRzV2l0aCgiLmpzIik7CiB9CiAKLXN0YXRpYyBPcHRpb25hbDxKU0M6OkJyZWFrcG9pbnQ6OkFj
dGlvbjo6VHlwZT4gYnJlYWtwb2ludEFjdGlvblR5cGVGb3JTdHJpbmcoRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHR5cGVTdHJpbmcpCitzdGF0aWMgT3B0aW9uYWw8SlND
OjpCcmVha3BvaW50OjpBY3Rpb246OlR5cGU+IGJyZWFrcG9pbnRBY3Rpb25UeXBlRm9yU3RyaW5n
KFByb3RvY29sOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgdHlwZVN0
cmluZykKIHsKLSAgICBhdXRvIHR5cGUgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpJbnNwZWN0b3JI
ZWxwZXJzOjpwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGVi
dWdnZXI6OkJyZWFrcG9pbnRBY3Rpb246OlR5cGU+KHR5cGVTdHJpbmcpOworICAgIGF1dG8gdHlw
ZSA9IFByb3RvY29sOjpIZWxwZXJzOjpwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8UHJvdG9jb2w6
OkRlYnVnZ2VyOjpCcmVha3BvaW50QWN0aW9uOjpUeXBlPih0eXBlU3RyaW5nKTsKICAgICBpZiAo
IXR5cGUpIHsKICAgICAgICAgZXJyb3JTdHJpbmcgPSBtYWtlU3RyaW5nKCJVbmtub3duIGJyZWFr
cG9pbnQgYWN0aW9uIHR5cGU6ICJfcywgdHlwZVN0cmluZyk7CiAgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CiAgICAgfQogCiAgICAgc3dpdGNoICgqdHlwZSkgewotICAgIGNhc2UgSW5zcGVj
dG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OkJyZWFrcG9pbnRBY3Rpb246OlR5cGU6OkxvZzoKKyAg
ICBjYXNlIFByb3RvY29sOjpEZWJ1Z2dlcjo6QnJlYWtwb2ludEFjdGlvbjo6VHlwZTo6TG9nOgog
ICAgICAgICByZXR1cm4gSlNDOjpCcmVha3BvaW50OjpBY3Rpb246OlR5cGU6OkxvZzsKIAotICAg
IGNhc2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OkJyZWFrcG9pbnRBY3Rpb246OlR5
cGU6OkV2YWx1YXRlOgorICAgIGNhc2UgUHJvdG9jb2w6OkRlYnVnZ2VyOjpCcmVha3BvaW50QWN0
aW9uOjpUeXBlOjpFdmFsdWF0ZToKICAgICAgICAgcmV0dXJuIEpTQzo6QnJlYWtwb2ludDo6QWN0
aW9uOjpUeXBlOjpFdmFsdWF0ZTsKIAotICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGVi
dWdnZXI6OkJyZWFrcG9pbnRBY3Rpb246OlR5cGU6OlNvdW5kOgorICAgIGNhc2UgUHJvdG9jb2w6
OkRlYnVnZ2VyOjpCcmVha3BvaW50QWN0aW9uOjpUeXBlOjpTb3VuZDoKICAgICAgICAgcmV0dXJu
IEpTQzo6QnJlYWtwb2ludDo6QWN0aW9uOjpUeXBlOjpTb3VuZDsKIAotICAgIGNhc2UgSW5zcGVj
dG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OkJyZWFrcG9pbnRBY3Rpb246OlR5cGU6OlByb2JlOgor
ICAgIGNhc2UgUHJvdG9jb2w6OkRlYnVnZ2VyOjpCcmVha3BvaW50QWN0aW9uOjpUeXBlOjpQcm9i
ZToKICAgICAgICAgcmV0dXJuIEpTQzo6QnJlYWtwb2ludDo6QWN0aW9uOjpUeXBlOjpQcm9iZTsK
ICAgICB9CiAKQEAgLTkxLDMwICs5MSwyOSBAQCBzdGF0aWMgT3B0aW9uYWw8SlNDOjpCcmVha3Bv
aW50OjpBY3Rpb246OlR5cGU+IGJyZWFrcG9pbnRBY3Rpb25UeXBlRm9yU3RyaW5nKEVycgogfQog
CiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLXN0YXRpYyBUIHBhcnNlQnJlYWtwb2ludE9wdGlvbnMo
RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBKU09OOjpPYmplY3QqIG9wdGlvbnNQYXls
b2FkLCBGdW5jdGlvbjxUKGNvbnN0IFN0cmluZyYsIEpTQzo6QnJlYWtwb2ludDo6QWN0aW9uc1Zl
Y3RvciYmLCBib29sLCBzaXplX3QpPiBjYWxsYmFjaykKK3N0YXRpYyBUIHBhcnNlQnJlYWtwb2lu
dE9wdGlvbnMoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgUmVmUHRyPEpTT046
Ok9iamVjdD4mJiBvcHRpb25zLCBGdW5jdGlvbjxUKGNvbnN0IFN0cmluZyYsIEpTQzo6QnJlYWtw
b2ludDo6QWN0aW9uc1ZlY3RvciYmLCBib29sLCBzaXplX3QpPiBjYWxsYmFjaykKIHsKICAgICBT
dHJpbmcgY29uZGl0aW9uOwogICAgIEpTQzo6QnJlYWtwb2ludDo6QWN0aW9uc1ZlY3RvciBhY3Rp
b25zOwogICAgIGJvb2wgYXV0b0NvbnRpbnVlID0gZmFsc2U7CiAgICAgc2l6ZV90IGlnbm9yZUNv
dW50ID0gMDsKIAotICAgIGlmIChvcHRpb25zUGF5bG9hZCkgewotICAgICAgICBvcHRpb25zUGF5
bG9hZC0+Z2V0U3RyaW5nKCJjb25kaXRpb24iX3MsIGNvbmRpdGlvbik7CisgICAgaWYgKG9wdGlv
bnMpIHsKKyAgICAgICAgY29uZGl0aW9uID0gb3B0aW9ucy0+Z2V0U3RyaW5nKFByb3RvY29sOjpE
ZWJ1Z2dlcjo6QnJlYWtwb2ludE9wdGlvbnM6OmNvbmRpdGlvbktleSk7CiAKLSAgICAgICAgUmVm
UHRyPEpTT046OkFycmF5PiBhY3Rpb25zUGF5bG9hZDsKLSAgICAgICAgb3B0aW9uc1BheWxvYWQt
PmdldEFycmF5KCJhY3Rpb25zIl9zLCBhY3Rpb25zUGF5bG9hZCk7CisgICAgICAgIGF1dG8gYWN0
aW9uc1BheWxvYWQgPSBvcHRpb25zLT5nZXRBcnJheShQcm90b2NvbDo6RGVidWdnZXI6OkJyZWFr
cG9pbnRPcHRpb25zOjphY3Rpb25zS2V5KTsKICAgICAgICAgaWYgKGF1dG8gY291bnQgPSBhY3Rp
b25zUGF5bG9hZCA/IGFjdGlvbnNQYXlsb2FkLT5sZW5ndGgoKSA6IDApIHsKICAgICAgICAgICAg
IGFjdGlvbnMucmVzZXJ2ZUNhcGFjaXR5KGNvdW50KTsKIAogICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgICAgICAgICBSZWZQdHI8SlNP
Tjo6T2JqZWN0PiBhY3Rpb25PYmplY3Q7Ci0gICAgICAgICAgICAgICAgaWYgKCFhY3Rpb25zUGF5
bG9hZC0+Z2V0KGkpLT5hc09iamVjdChhY3Rpb25PYmplY3QpKSB7CisgICAgICAgICAgICAgICAg
YXV0byBhY3Rpb25PYmplY3QgPSBhY3Rpb25zUGF5bG9hZC0+Z2V0KGkpLT5hc09iamVjdCgpOwor
ICAgICAgICAgICAgICAgIGlmICghYWN0aW9uT2JqZWN0KSB7CiAgICAgICAgICAgICAgICAgICAg
IGVycm9yU3RyaW5nID0gIlVuZXhwZWN0ZWQgbm9uLW9iamVjdCBpdGVtIGluIGdpdmVuIGFjdGlv
bnMiX3M7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IH07CiAgICAgICAgICAgICAgICAg
fQogCi0gICAgICAgICAgICAgICAgU3RyaW5nIGFjdGlvblR5cGVTdHJpbmc7Ci0gICAgICAgICAg
ICAgICAgaWYgKCFhY3Rpb25PYmplY3QtPmdldFN0cmluZygidHlwZSJfcywgYWN0aW9uVHlwZVN0
cmluZykpIHsKKyAgICAgICAgICAgICAgICBhdXRvIGFjdGlvblR5cGVTdHJpbmcgPSBhY3Rpb25P
YmplY3QtPmdldFN0cmluZyhQcm90b2NvbDo6RGVidWdnZXI6OkJyZWFrcG9pbnRBY3Rpb246OnR5
cGVLZXkpOworICAgICAgICAgICAgICAgIGlmICghYWN0aW9uVHlwZVN0cmluZykgewogICAgICAg
ICAgICAgICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIHR5cGUgZm9yIGl0ZW0gaW4gZ2l2
ZW4gYWN0aW9ucyJfczsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAgICAg
ICAgICAgICB9CkBAIC0xMjUsMzMgKzEyNCwzMyBAQCBzdGF0aWMgVCBwYXJzZUJyZWFrcG9pbnRP
cHRpb25zKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgSlNPTjo6T2JqZWN0KiBvcAog
CiAgICAgICAgICAgICAgICAgSlNDOjpCcmVha3BvaW50OjpBY3Rpb24gYWN0aW9uKCphY3Rpb25U
eXBlKTsKIAotICAgICAgICAgICAgICAgIGFjdGlvbk9iamVjdC0+Z2V0U3RyaW5nKCJkYXRhIl9z
LCBhY3Rpb24uZGF0YSk7CisgICAgICAgICAgICAgICAgYWN0aW9uLmRhdGEgPSBhY3Rpb25PYmpl
Y3QtPmdldFN0cmluZyhQcm90b2NvbDo6RGVidWdnZXI6OkJyZWFrcG9pbnRBY3Rpb246OmRhdGFL
ZXkpOwogCiAgICAgICAgICAgICAgICAgLy8gU3BlY2lmeWluZyBhbiBpZGVudGlmaWVyIGlzIG9w
dGlvbmFsLiBUaGV5IGFyZSB1c2VkIHRvIGNvcnJlbGF0ZSBwcm9iZSBzYW1wbGVzCiAgICAgICAg
ICAgICAgICAgLy8gaW4gdGhlIGZyb250ZW5kIGFjcm9zcyBtdWx0aXBsZSBiYWNrZW5kIHByb2Jl
IGFjdGlvbnMgYW5kIHNlZ3JlZ2F0ZSBvYmplY3QgZ3JvdXBzLgotICAgICAgICAgICAgICAgIGFj
dGlvbk9iamVjdC0+Z2V0SW50ZWdlcigiaWQiX3MsIGFjdGlvbi5pZCk7CisgICAgICAgICAgICAg
ICAgYWN0aW9uLmlkID0gYWN0aW9uT2JqZWN0LT5nZXRJbnRlZ2VyKFByb3RvY29sOjpEZWJ1Z2dl
cjo6QnJlYWtwb2ludEFjdGlvbjo6aWRLZXkpLnZhbHVlT3IoSlNDOjpub0JyZWFrcG9pbnRBY3Rp
b25JRCk7CiAKICAgICAgICAgICAgICAgICBhY3Rpb25zLmFwcGVuZChXVEZNb3ZlKGFjdGlvbikp
OwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgb3B0aW9uc1BheWxvYWQtPmdl
dEJvb2xlYW4oImF1dG9Db250aW51ZSJfcywgYXV0b0NvbnRpbnVlKTsKLSAgICAgICAgb3B0aW9u
c1BheWxvYWQtPmdldEludGVnZXIoImlnbm9yZUNvdW50Il9zLCBpZ25vcmVDb3VudCk7CisgICAg
ICAgIGF1dG9Db250aW51ZSA9IG9wdGlvbnMtPmdldEJvb2xlYW4oUHJvdG9jb2w6OkRlYnVnZ2Vy
OjpCcmVha3BvaW50T3B0aW9uczo6YXV0b0NvbnRpbnVlS2V5KS52YWx1ZU9yKGZhbHNlKTsKKyAg
ICAgICAgaWdub3JlQ291bnQgPSBvcHRpb25zLT5nZXRJbnRlZ2VyKFByb3RvY29sOjpEZWJ1Z2dl
cjo6QnJlYWtwb2ludE9wdGlvbnM6Omlnbm9yZUNvdW50S2V5KS52YWx1ZU9yKDApOwogICAgIH0K
IAogICAgIHJldHVybiBjYWxsYmFjayhjb25kaXRpb24sIFdURk1vdmUoYWN0aW9ucyksIGF1dG9D
b250aW51ZSwgaWdub3JlQ291bnQpOwogfQogCi1PcHRpb25hbDxJbnNwZWN0b3JEZWJ1Z2dlckFn
ZW50OjpQcm90b2NvbEJyZWFrcG9pbnQ+IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OlByb3RvY29s
QnJlYWtwb2ludDo6ZnJvbVBheWxvYWQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBKU0M6OlNv
dXJjZUlEIHNvdXJjZUlELCB1bnNpZ25lZCBsaW5lTnVtYmVyLCB1bnNpZ25lZCBjb2x1bW5OdW1i
ZXIsIGNvbnN0IEpTT046Ok9iamVjdCogb3B0aW9uc1BheWxvYWQpCitPcHRpb25hbDxJbnNwZWN0
b3JEZWJ1Z2dlckFnZW50OjpQcm90b2NvbEJyZWFrcG9pbnQ+IEluc3BlY3RvckRlYnVnZ2VyQWdl
bnQ6OlByb3RvY29sQnJlYWtwb2ludDo6ZnJvbVBheWxvYWQoUHJvdG9jb2w6OkVycm9yU3RyaW5n
JiBlcnJvclN0cmluZywgSlNDOjpTb3VyY2VJRCBzb3VyY2VJRCwgdW5zaWduZWQgbGluZU51bWJl
ciwgdW5zaWduZWQgY29sdW1uTnVtYmVyLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIG9wdGlvbnMp
CiB7Ci0gICAgcmV0dXJuIHBhcnNlQnJlYWtwb2ludE9wdGlvbnM8T3B0aW9uYWw8UHJvdG9jb2xC
cmVha3BvaW50Pj4oZXJyb3JTdHJpbmcsIG9wdGlvbnNQYXlsb2FkLCBbJl0gKGNvbnN0IFN0cmlu
ZyYgY29uZGl0aW9uLCBKU0M6OkJyZWFrcG9pbnQ6OkFjdGlvbnNWZWN0b3ImJiBhY3Rpb25zLCBi
b29sIGF1dG9Db250aW51ZSwgc2l6ZV90IGlnbm9yZUNvdW50KSAtPiBPcHRpb25hbDxQcm90b2Nv
bEJyZWFrcG9pbnQ+IHsKKyAgICByZXR1cm4gcGFyc2VCcmVha3BvaW50T3B0aW9uczxPcHRpb25h
bDxQcm90b2NvbEJyZWFrcG9pbnQ+PihlcnJvclN0cmluZywgV1RGTW92ZShvcHRpb25zKSwgWyZd
IChjb25zdCBTdHJpbmcmIGNvbmRpdGlvbiwgSlNDOjpCcmVha3BvaW50OjpBY3Rpb25zVmVjdG9y
JiYgYWN0aW9ucywgYm9vbCBhdXRvQ29udGludWUsIHNpemVfdCBpZ25vcmVDb3VudCkgLT4gT3B0
aW9uYWw8UHJvdG9jb2xCcmVha3BvaW50PiB7CiAgICAgICAgIHJldHVybiBQcm90b2NvbEJyZWFr
cG9pbnQoc291cmNlSUQsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlciwgY29uZGl0aW9uLCBXVEZN
b3ZlKGFjdGlvbnMpLCBhdXRvQ29udGludWUsIGlnbm9yZUNvdW50KTsKICAgICB9KTsKIH0KIAot
T3B0aW9uYWw8SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6UHJvdG9jb2xCcmVha3BvaW50PiBJbnNw
ZWN0b3JEZWJ1Z2dlckFnZW50OjpQcm90b2NvbEJyZWFrcG9pbnQ6OmZyb21QYXlsb2FkKEVycm9y
U3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiB1cmwsIGJvb2wgaXNSZWdleCwgdW5z
aWduZWQgbGluZU51bWJlciwgdW5zaWduZWQgY29sdW1uTnVtYmVyLCBjb25zdCBKU09OOjpPYmpl
Y3QqIG9wdGlvbnNQYXlsb2FkKQorT3B0aW9uYWw8SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6UHJv
dG9jb2xCcmVha3BvaW50PiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpQcm90b2NvbEJyZWFrcG9p
bnQ6OmZyb21QYXlsb2FkKFByb3RvY29sOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0
IFN0cmluZyYgdXJsLCBib29sIGlzUmVnZXgsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIHVuc2lnbmVk
IGNvbHVtbk51bWJlciwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBvcHRpb25zKQogewotICAgIHJl
dHVybiBwYXJzZUJyZWFrcG9pbnRPcHRpb25zPE9wdGlvbmFsPFByb3RvY29sQnJlYWtwb2ludD4+
KGVycm9yU3RyaW5nLCBvcHRpb25zUGF5bG9hZCwgWyZdIChjb25zdCBTdHJpbmcmIGNvbmRpdGlv
biwgSlNDOjpCcmVha3BvaW50OjpBY3Rpb25zVmVjdG9yJiYgYWN0aW9ucywgYm9vbCBhdXRvQ29u
dGludWUsIHNpemVfdCBpZ25vcmVDb3VudCkgLT4gT3B0aW9uYWw8UHJvdG9jb2xCcmVha3BvaW50
PiB7CisgICAgcmV0dXJuIHBhcnNlQnJlYWtwb2ludE9wdGlvbnM8T3B0aW9uYWw8UHJvdG9jb2xC
cmVha3BvaW50Pj4oZXJyb3JTdHJpbmcsIFdURk1vdmUob3B0aW9ucyksIFsmXSAoY29uc3QgU3Ry
aW5nJiBjb25kaXRpb24sIEpTQzo6QnJlYWtwb2ludDo6QWN0aW9uc1ZlY3RvciYmIGFjdGlvbnMs
IGJvb2wgYXV0b0NvbnRpbnVlLCBzaXplX3QgaWdub3JlQ291bnQpIC0+IE9wdGlvbmFsPFByb3Rv
Y29sQnJlYWtwb2ludD4gewogICAgICAgICByZXR1cm4gUHJvdG9jb2xCcmVha3BvaW50KHVybCwg
aXNSZWdleCwgbGluZU51bWJlciwgY29sdW1uTnVtYmVyLCBjb25kaXRpb24sIFdURk1vdmUoYWN0
aW9ucyksIGF1dG9Db250aW51ZSwgaWdub3JlQ291bnQpOwogICAgIH0pOwogfQpAQCAtMjA3LDkg
KzIwNiw5IEBAIGJvb2wgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6UHJvdG9jb2xCcmVha3BvaW50
OjptYXRjaGVzU2NyaXB0VVJMKGNvbnN0IFN0cmluZyYKICAgICByZXR1cm4gbV91cmwgPT0gc2Ny
aXB0VVJMOwogfQogCi1SZWZQdHI8SlNDOjpCcmVha3BvaW50PiBJbnNwZWN0b3JEZWJ1Z2dlckFn
ZW50OjpkZWJ1Z2dlckJyZWFrcG9pbnRGcm9tUGF5bG9hZChFcnJvclN0cmluZyYgZXJyb3JTdHJp
bmcsIGNvbnN0IEpTT046Ok9iamVjdCogb3B0aW9uc1BheWxvYWQpCitSZWZQdHI8SlNDOjpCcmVh
a3BvaW50PiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkZWJ1Z2dlckJyZWFrcG9pbnRGcm9tUGF5
bG9hZChQcm90b2NvbDo6RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiYmIG9wdGlvbnMpCiB7Ci0gICAgcmV0dXJuIHBhcnNlQnJlYWtwb2ludE9wdGlvbnM8UmVm
UHRyPEpTQzo6QnJlYWtwb2ludD4+KGVycm9yU3RyaW5nLCBvcHRpb25zUGF5bG9hZCwgW10gKGNv
bnN0IFN0cmluZyYgY29uZGl0aW9uLCBKU0M6OkJyZWFrcG9pbnQ6OkFjdGlvbnNWZWN0b3ImJiBh
Y3Rpb25zLCBib29sIGF1dG9Db250aW51ZSwgc2l6ZV90IGlnbm9yZUNvdW50KSB7CisgICAgcmV0
dXJuIHBhcnNlQnJlYWtwb2ludE9wdGlvbnM8UmVmUHRyPEpTQzo6QnJlYWtwb2ludD4+KGVycm9y
U3RyaW5nLCBXVEZNb3ZlKG9wdGlvbnMpLCBbXSAoY29uc3QgU3RyaW5nJiBjb25kaXRpb24sIEpT
Qzo6QnJlYWtwb2ludDo6QWN0aW9uc1ZlY3RvciYmIGFjdGlvbnMsIGJvb2wgYXV0b0NvbnRpbnVl
LCBzaXplX3QgaWdub3JlQ291bnQpIHsKICAgICAgICAgcmV0dXJuIEpTQzo6QnJlYWtwb2ludDo6
Y3JlYXRlKEpTQzo6bm9CcmVha3BvaW50SUQsIGNvbmRpdGlvbiwgV1RGTW92ZShhY3Rpb25zKSwg
YXV0b0NvbnRpbnVlLCBpZ25vcmVDb3VudCk7CiAgICAgfSk7CiB9CkBAIC0yMzQsMTAgKzIzMywx
MCBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpZENyZWF0ZUZyb250ZW5kQW5kQmFj
a2VuZChGcm9udGVuZFJvdXRlciosIEJhY2tlbgogdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50
Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChEaXNjb25uZWN0UmVhc29uIHJlYXNvbikK
IHsKICAgICBpZiAoZW5hYmxlZCgpKQotICAgICAgICBkaXNhYmxlKHJlYXNvbiA9PSBEaXNjb25u
ZWN0UmVhc29uOjpJbnNwZWN0ZWRUYXJnZXREZXN0cm95ZWQpOworICAgICAgICBpbnRlcm5hbERp
c2FibGUocmVhc29uID09IERpc2Nvbm5lY3RSZWFzb246Okluc3BlY3RlZFRhcmdldERlc3Ryb3ll
ZCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZW5hYmxlKCkKK3ZvaWQgSW5z
cGVjdG9yRGVidWdnZXJBZ2VudDo6aW50ZXJuYWxFbmFibGUoKQogewogICAgIG1fZW5hYmxlZCA9
IHRydWU7CiAKQEAgLTI1Nyw3ICsyNTYsNyBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6
OmVuYWJsZSgpCiAgICAgfQogfQogCi12b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpc2Fi
bGUoYm9vbCBpc0JlaW5nRGVzdHJveWVkKQordm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojpp
bnRlcm5hbERpc2FibGUoYm9vbCBpc0JlaW5nRGVzdHJveWVkKQogewogICAgIGZvciAoYXV0byog
bGlzdGVuZXIgOiBjb3B5VG9WZWN0b3IobV9saXN0ZW5lcnMpKQogICAgICAgICBsaXN0ZW5lci0+
ZGVidWdnZXJXYXNEaXNhYmxlZCgpOwpAQCAtMjc3LDE5ICsyNzYsMjEgQEAgdm9pZCBJbnNwZWN0
b3JEZWJ1Z2dlckFnZW50OjpkaXNhYmxlKGJvb2wgaXNCZWluZ0Rlc3Ryb3llZCkKICAgICBtX2Vu
YWJsZWQgPSBmYWxzZTsKIH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjplbmFibGUo
RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4g
SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZW5hYmxlKCkKIHsKLSAgICBpZiAoZW5hYmxlZCgpKSB7
Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIkRlYnVnZ2VyIGRvbWFpbiBhbHJlYWR5IGVuYWJsZWQi
X3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKGVuYWJsZWQoKSkKKyAgICAgICAg
cmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJEZWJ1Z2dlciBkb21haW4gYWxyZWFkeSBlbmFibGVkIl9z
KTsKIAotICAgIGVuYWJsZSgpOworICAgIGludGVybmFsRW5hYmxlKCk7CisKKyAgICByZXR1cm4g
eyB9OwogfQogCi12b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpc2FibGUoRXJyb3JTdHJp
bmcmKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yRGVidWdnZXJBZ2Vu
dDo6ZGlzYWJsZSgpCiB7Ci0gICAgZGlzYWJsZShmYWxzZSk7CisgICAgaW50ZXJuYWxEaXNhYmxl
KGZhbHNlKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKIGJvb2wgSW5zcGVjdG9yRGVidWdnZXJB
Z2VudDo6YnJlYWtwb2ludHNBY3RpdmUoKSBjb25zdApAQCAtMjk3LDI4ICsyOTgsMzAgQEAgYm9v
bCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpicmVha3BvaW50c0FjdGl2ZSgpIGNvbnN0CiAgICAg
cmV0dXJuIG1fZGVidWdnZXIuYnJlYWtwb2ludHNBY3RpdmUoKTsKIH0KIAotdm9pZCBJbnNwZWN0
b3JEZWJ1Z2dlckFnZW50OjpzZXRBc3luY1N0YWNrVHJhY2VEZXB0aChFcnJvclN0cmluZyYgZXJy
b3JTdHJpbmcsIGludCBkZXB0aCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3Bl
Y3RvckRlYnVnZ2VyQWdlbnQ6OnNldEFzeW5jU3RhY2tUcmFjZURlcHRoKGludCBkZXB0aCkKIHsK
ICAgICBpZiAobV9hc3luY1N0YWNrVHJhY2VEZXB0aCA9PSBkZXB0aCkKLSAgICAgICAgcmV0dXJu
OworICAgICAgICByZXR1cm4geyB9OwogCi0gICAgaWYgKGRlcHRoIDwgMCkgewotICAgICAgICBl
cnJvclN0cmluZyA9ICJVbmV4cGVjdGVkIG5lZ2F0aXZlIGRlcHRoIl9zOwotICAgICAgICByZXR1
cm47Ci0gICAgfQorICAgIGlmIChkZXB0aCA8IDApCisgICAgICAgIHJldHVybiBtYWtlVW5leHBl
Y3RlZCgiVW5leHBlY3RlZCBuZWdhdGl2ZSBkZXB0aCJfcyk7CiAKICAgICBtX2FzeW5jU3RhY2tU
cmFjZURlcHRoID0gZGVwdGg7CiAKICAgICBpZiAoIW1fYXN5bmNTdGFja1RyYWNlRGVwdGgpCiAg
ICAgICAgIGNsZWFyQXN5bmNTdGFja1RyYWNlRGF0YSgpOworCisgICAgcmV0dXJuIHsgfTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZXRCcmVha3BvaW50c0FjdGl2ZShFcnJv
clN0cmluZyYsIGJvb2wgYWN0aXZlKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5z
cGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0QnJlYWtwb2ludHNBY3RpdmUoYm9vbCBhY3RpdmUpCiB7
CiAgICAgaWYgKGFjdGl2ZSkKICAgICAgICAgbV9kZWJ1Z2dlci5hY3RpdmF0ZUJyZWFrcG9pbnRz
KCk7CiAgICAgZWxzZQogICAgICAgICBtX2RlYnVnZ2VyLmRlYWN0aXZhdGVCcmVha3BvaW50cygp
OworCisgICAgcmV0dXJuIHsgfTsKIH0KIAogYm9vbCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojpp
c1BhdXNlZCgpIGNvbnN0CkBAIC0zNDIsMjAgKzM0NSwyMCBAQCB2b2lkIEluc3BlY3RvckRlYnVn
Z2VyQWdlbnQ6OnVwZGF0ZVBhdXNlUmVhc29uQW5kRGF0YShEZWJ1Z2dlckZyb250ZW5kRGlzcGF0
Y2hlcgogICAgIG1fcGF1c2VEYXRhID0gV1RGTW92ZShkYXRhKTsKIH0KIAotc3RhdGljIFJlZlB0
cjxKU09OOjpPYmplY3Q+IGJ1aWxkQXNzZXJ0UGF1c2VSZWFzb24oY29uc3QgU3RyaW5nJiBtZXNz
YWdlKQorc3RhdGljIFJlZjxKU09OOjpPYmplY3Q+IGJ1aWxkQXNzZXJ0UGF1c2VSZWFzb24oY29u
c3QgU3RyaW5nJiBtZXNzYWdlKQogewogICAgIGF1dG8gcmVhc29uID0gUHJvdG9jb2w6OkRlYnVn
Z2VyOjpBc3NlcnRQYXVzZVJlYXNvbjo6Y3JlYXRlKCkucmVsZWFzZSgpOwogICAgIGlmICghbWVz
c2FnZS5pc051bGwoKSkKICAgICAgICAgcmVhc29uLT5zZXRNZXNzYWdlKG1lc3NhZ2UpOwotICAg
IHJldHVybiByZWFzb24tPm9wZW5BY2Nlc3NvcnMoKTsKKyAgICByZXR1cm4gKnJlYXNvbi0+YXNP
YmplY3QoKTsKIH0KIAotc3RhdGljIFJlZlB0cjxKU09OOjpPYmplY3Q+IGJ1aWxkQ1NQVmlvbGF0
aW9uUGF1c2VSZWFzb24oY29uc3QgU3RyaW5nJiBkaXJlY3RpdmVUZXh0KQorc3RhdGljIFJlZjxK
U09OOjpPYmplY3Q+IGJ1aWxkQ1NQVmlvbGF0aW9uUGF1c2VSZWFzb24oY29uc3QgU3RyaW5nJiBk
aXJlY3RpdmVUZXh0KQogewogICAgIGF1dG8gcmVhc29uID0gUHJvdG9jb2w6OkRlYnVnZ2VyOjpD
U1BWaW9sYXRpb25QYXVzZVJlYXNvbjo6Y3JlYXRlKCkKICAgICAgICAgLnNldERpcmVjdGl2ZShk
aXJlY3RpdmVUZXh0KQogICAgICAgICAucmVsZWFzZSgpOwotICAgIHJldHVybiByZWFzb24tPm9w
ZW5BY2Nlc3NvcnMoKTsKKyAgICByZXR1cm4gKnJlYXNvbi0+YXNPYmplY3QoKTsKIH0KIAogUmVm
UHRyPEpTT046Ok9iamVjdD4gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6YnVpbGRCcmVha3BvaW50
UGF1c2VSZWFzb24oSlNDOjpCcmVha3BvaW50SUQgZGVidWdnZXJCcmVha3BvaW50SUQpCkBAIC0z
NjgsNyArMzcxLDcgQEAgUmVmUHRyPEpTT046Ok9iamVjdD4gSW5zcGVjdG9yRGVidWdnZXJBZ2Vu
dDo6YnVpbGRCcmVha3BvaW50UGF1c2VSZWFzb24oSlNDOjpCcmUKICAgICAgICAgICAgICAgICBh
dXRvIHJlYXNvbiA9IFByb3RvY29sOjpEZWJ1Z2dlcjo6QnJlYWtwb2ludFBhdXNlUmVhc29uOjpj
cmVhdGUoKQogICAgICAgICAgICAgICAgICAgICAuc2V0QnJlYWtwb2ludElkKHByb3RvY29sQnJl
YWtwb2ludElEKQogICAgICAgICAgICAgICAgICAgICAucmVsZWFzZSgpOwotICAgICAgICAgICAg
ICAgIHJldHVybiByZWFzb24tPm9wZW5BY2Nlc3NvcnMoKTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gcmVhc29uLT5hc09iamVjdCgpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpA
QCAtMzg2LDcgKzM4OSwxMSBAQCBSZWZQdHI8SlNPTjo6T2JqZWN0PiBJbnNwZWN0b3JEZWJ1Z2dl
ckFnZW50OjpidWlsZEV4Y2VwdGlvblBhdXNlUmVhc29uKEpTQzo6SlNWYQogICAgIGlmIChpbmpl
Y3RlZFNjcmlwdC5oYXNOb1ZhbHVlKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAg
cmV0dXJuIGluamVjdGVkU2NyaXB0LndyYXBPYmplY3QoZXhjZXB0aW9uLCBJbnNwZWN0b3JEZWJ1
Z2dlckFnZW50OjpiYWNrdHJhY2VPYmplY3RHcm91cCktPm9wZW5BY2Nlc3NvcnMoKTsKKyAgICBh
dXRvIGV4Y2VwdGlvblZhbHVlID0gaW5qZWN0ZWRTY3JpcHQud3JhcE9iamVjdChleGNlcHRpb24s
IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmJhY2t0cmFjZU9iamVjdEdyb3VwKTsKKyAgICBpZiAo
IWV4Y2VwdGlvblZhbHVlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBl
eGNlcHRpb25WYWx1ZS0+YXNPYmplY3QoKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFn
ZW50OjpoYW5kbGVDb25zb2xlQXNzZXJ0KGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKQEAgLTQ5Miw3
ICs0OTksNyBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpZERpc3BhdGNoQXN5bmND
YWxsKCkKICAgICAgICAgbV9wZW5kaW5nQXN5bmNDYWxscy5yZW1vdmUoaWRlbnRpZmllcik7CiB9
CiAKLXN0YXRpYyBSZWZQdHI8UHJvdG9jb2w6OkRlYnVnZ2VyOjpMb2NhdGlvbj4gYnVpbGREZWJ1
Z2dlckxvY2F0aW9uKGNvbnN0IEpTQzo6QnJlYWtwb2ludCYgZGVidWdnZXJCcmVha3BvaW50KQor
c3RhdGljIFJlZjxQcm90b2NvbDo6RGVidWdnZXI6OkxvY2F0aW9uPiBidWlsZERlYnVnZ2VyTG9j
YXRpb24oY29uc3QgSlNDOjpCcmVha3BvaW50JiBkZWJ1Z2dlckJyZWFrcG9pbnQpCiB7CiAgICAg
QVNTRVJUKGRlYnVnZ2VyQnJlYWtwb2ludC5pc1Jlc29sdmVkKCkpOwogCkBAIC01MDEsNTAgKzUw
OCw0OSBAQCBzdGF0aWMgUmVmUHRyPFByb3RvY29sOjpEZWJ1Z2dlcjo6TG9jYXRpb24+IGJ1aWxk
RGVidWdnZXJMb2NhdGlvbihjb25zdCBKU0M6OkJyZQogICAgICAgICAuc2V0TGluZU51bWJlcihk
ZWJ1Z2dlckJyZWFrcG9pbnQubGluZU51bWJlcigpKQogICAgICAgICAucmVsZWFzZSgpOwogICAg
IGxvY2F0aW9uLT5zZXRDb2x1bW5OdW1iZXIoZGVidWdnZXJCcmVha3BvaW50LmNvbHVtbk51bWJl
cigpKTsKLQogICAgIHJldHVybiBsb2NhdGlvbjsKIH0KIAotc3RhdGljIGJvb2wgcGFyc2VMb2Nh
dGlvbihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IEpTT046Ok9iamVjdCYgbG9jYXRp
b24sIEpTQzo6U291cmNlSUQmIHNvdXJjZUlELCB1bnNpZ25lZCYgbGluZU51bWJlciwgdW5zaWdu
ZWQmIGNvbHVtbk51bWJlcikKK3N0YXRpYyBib29sIHBhcnNlTG9jYXRpb24oUHJvdG9jb2w6OkVy
cm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgSlNPTjo6T2JqZWN0JiBsb2NhdGlvbiwgSlND
OjpTb3VyY2VJRCYgc291cmNlSUQsIHVuc2lnbmVkJiBsaW5lTnVtYmVyLCB1bnNpZ25lZCYgY29s
dW1uTnVtYmVyKQogewotICAgIGlmICghbG9jYXRpb24uZ2V0SW50ZWdlcigibGluZU51bWJlciJf
cywgbGluZU51bWJlcikpIHsKKyAgICBhdXRvIGxpbmVOdW1iZXJWYWx1ZSA9IGxvY2F0aW9uLmdl
dEludGVnZXIoUHJvdG9jb2w6OkRlYnVnZ2VyOjpMb2NhdGlvbjo6bGluZU51bWJlcktleSk7Cisg
ICAgaWYgKCFsaW5lTnVtYmVyVmFsdWUpIHsKICAgICAgICAgZXJyb3JTdHJpbmcgPSAiVW5leHBl
Y3RlZCBub24taW50ZWdlciBsaW5lTnVtYmVyIGluIGdpdmVuIGxvY2F0aW9uIl9zOwogICAgICAg
ICBzb3VyY2VJRCA9IEpTQzo6bm9Tb3VyY2VJRDsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IH0KIAotICAgIFN0cmluZyBzY3JpcHRJRFN0cjsKLSAgICBpZiAoIWxvY2F0aW9uLmdldFN0cmlu
Zygic2NyaXB0SWQiX3MsIHNjcmlwdElEU3RyKSkgeworICAgIGxpbmVOdW1iZXIgPSAqbGluZU51
bWJlclZhbHVlOworCisgICAgYXV0byBzY3JpcHRJRFN0ciA9IGxvY2F0aW9uLmdldFN0cmluZyhQ
cm90b2NvbDo6RGVidWdnZXI6OkxvY2F0aW9uOjpzY3JpcHRJZEtleSk7CisgICAgaWYgKCFzY3Jp
cHRJRFN0cikgewogICAgICAgICBzb3VyY2VJRCA9IEpTQzo6bm9Tb3VyY2VJRDsKICAgICAgICAg
ZXJyb3JTdHJpbmcgPSAiVW5leGVwY3RlZCBub24tc3RyaW5nIHNjcmlwdElkIGluIGdpdmVuIGxv
Y2F0aW9uIl9zOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgc291cmNlSUQg
PSBzY3JpcHRJRFN0ci50b0ludFB0cigpOwotICAgIGNvbHVtbk51bWJlciA9IDA7Ci0gICAgbG9j
YXRpb24uZ2V0SW50ZWdlcigiY29sdW1uTnVtYmVyIl9zLCBjb2x1bW5OdW1iZXIpOworICAgIGNv
bHVtbk51bWJlciA9IGxvY2F0aW9uLmdldEludGVnZXIoUHJvdG9jb2w6OkRlYnVnZ2VyOjpMb2Nh
dGlvbjo6Y29sdW1uTnVtYmVyS2V5KS52YWx1ZU9yKDApOwogICAgIHJldHVybiB0cnVlOwogfQog
Ci12b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldEJyZWFrcG9pbnRCeVVybChFcnJvclN0
cmluZyYgZXJyb3JTdHJpbmcsIGludCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFs
VVJMLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsVVJMUmVnZXgsIGNvbnN0IGludCogb3B0aW9uYWxD
b2x1bW5OdW1iZXIsIGNvbnN0IEpTT046Ok9iamVjdCogb3B0aW9uc1BheWxvYWQsIFByb3RvY29s
OjpEZWJ1Z2dlcjo6QnJlYWtwb2ludElkKiBvdXRCcmVha3BvaW50SWQsIFJlZlB0cjxKU09OOjpB
cnJheU9mPFByb3RvY29sOjpEZWJ1Z2dlcjo6TG9jYXRpb24+PiYgb3V0TG9jYXRpb25zKQorUHJv
dG9jb2w6OkVycm9yU3RyaW5nT3I8c3RkOjp0dXBsZTxQcm90b2NvbDo6RGVidWdnZXI6OkJyZWFr
cG9pbnRJZCwgUmVmPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkRlYnVnZ2VyOjpMb2NhdGlvbj4+
Pj4gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0QnJlYWtwb2ludEJ5VXJsKGludCBsaW5lTnVt
YmVyLCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiB1cmxSZWdleCwgT3B0aW9uYWw8
aW50PiYmIGNvbHVtbk51bWJlciwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBvcHRpb25zKQogewot
ICAgIGlmICghb3B0aW9uYWxVUkwgPT0gIW9wdGlvbmFsVVJMUmVnZXgpIHsKLSAgICAgICAgZXJy
b3JTdHJpbmcgPSAiRWl0aGVyIHVybCBvciB1cmxSZWdleCBtdXN0IGJlIHNwZWNpZmllZCJfczsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoIXVybCA9PSAhdXJsUmVnZXgpCisgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiRWl0aGVyIHVybCBvciB1cmxSZWdleCBtdXN0IGJl
IHNwZWNpZmllZCJfcyk7CiAKLSAgICBhdXRvIHByb3RvY29sQnJlYWtwb2ludCA9IFByb3RvY29s
QnJlYWtwb2ludDo6ZnJvbVBheWxvYWQoZXJyb3JTdHJpbmcsIG9wdGlvbmFsVVJMID8gKm9wdGlv
bmFsVVJMIDogKm9wdGlvbmFsVVJMUmVnZXgsICEhb3B0aW9uYWxVUkxSZWdleCwgbGluZU51bWJl
ciwgb3B0aW9uYWxDb2x1bW5OdW1iZXIgPyAqb3B0aW9uYWxDb2x1bW5OdW1iZXIgOiAwLCBvcHRp
b25zUGF5bG9hZCk7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCisg
ICAgYXV0byBwcm90b2NvbEJyZWFrcG9pbnQgPSBQcm90b2NvbEJyZWFrcG9pbnQ6OmZyb21QYXls
b2FkKGVycm9yU3RyaW5nLCAhIXVybCA/IHVybCA6IHVybFJlZ2V4LCAhIXVybFJlZ2V4LCBsaW5l
TnVtYmVyLCBjb2x1bW5OdW1iZXIudmFsdWVPcigwKSwgV1RGTW92ZShvcHRpb25zKSk7CiAgICAg
aWYgKCFwcm90b2NvbEJyZWFrcG9pbnQpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJu
IG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAotICAgIGlmIChtX3Byb3RvY29sQnJlYWtw
b2ludEZvclByb3RvY29sQnJlYWtwb2ludElELmNvbnRhaW5zKHByb3RvY29sQnJlYWtwb2ludC0+
aWQoKSkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiQnJlYWtwb2ludCBmb3IgZ2l2ZW4gbG9j
YXRpb24gYWxyZWFkeSBleGlzdHMuIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlm
IChtX3Byb3RvY29sQnJlYWtwb2ludEZvclByb3RvY29sQnJlYWtwb2ludElELmNvbnRhaW5zKHBy
b3RvY29sQnJlYWtwb2ludC0+aWQoKSkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgi
QnJlYWtwb2ludCBmb3IgZ2l2ZW4gbG9jYXRpb24gYWxyZWFkeSBleGlzdHMuIl9zKTsKIAogICAg
IG1fcHJvdG9jb2xCcmVha3BvaW50Rm9yUHJvdG9jb2xCcmVha3BvaW50SUQuc2V0KHByb3RvY29s
QnJlYWtwb2ludC0+aWQoKSwgKnByb3RvY29sQnJlYWtwb2ludCk7CiAKLSAgICBvdXRMb2NhdGlv
bnMgPSBKU09OOjpBcnJheU9mPFByb3RvY29sOjpEZWJ1Z2dlcjo6TG9jYXRpb24+OjpjcmVhdGUo
KTsKKyAgICBhdXRvIGxvY2F0aW9ucyA9IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkRlYnVnZ2Vy
OjpMb2NhdGlvbj46OmNyZWF0ZSgpOwogCiAgICAgZm9yIChhdXRvJiBbc291cmNlSUQsIHNjcmlw
dF0gOiBtX3NjcmlwdHMpIHsKICAgICAgICAgU3RyaW5nIHNjcmlwdFVSTEZvckJyZWFrcG9pbnRz
ID0gIXNjcmlwdC5zb3VyY2VVUkwuaXNFbXB0eSgpID8gc2NyaXB0LnNvdXJjZVVSTCA6IHNjcmlw
dC51cmw7CkBAIC01NjEsMjkgKzU2NywyOSBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6
OnNldEJyZWFrcG9pbnRCeVVybChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBsaQogCiAg
ICAgICAgIGRpZFNldEJyZWFrcG9pbnQoKnByb3RvY29sQnJlYWtwb2ludCwgZGVidWdnZXJCcmVh
a3BvaW50KTsKIAotICAgICAgICBvdXRMb2NhdGlvbnMtPmFkZEl0ZW0oYnVpbGREZWJ1Z2dlckxv
Y2F0aW9uKGRlYnVnZ2VyQnJlYWtwb2ludCkpOworICAgICAgICBsb2NhdGlvbnMtPmFkZEl0ZW0o
YnVpbGREZWJ1Z2dlckxvY2F0aW9uKGRlYnVnZ2VyQnJlYWtwb2ludCkpOwogICAgIH0KIAotICAg
ICpvdXRCcmVha3BvaW50SWQgPSBwcm90b2NvbEJyZWFrcG9pbnQtPmlkKCk7CisgICAgcmV0dXJu
IHsgeyBwcm90b2NvbEJyZWFrcG9pbnQtPmlkKCksIFdURk1vdmUobG9jYXRpb25zKSB9IH07CiB9
CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0QnJlYWtwb2ludChFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcsIGNvbnN0IEpTT046Ok9iamVjdCYgbG9jYXRpb24sIGNvbnN0IEpTT046
Ok9iamVjdCogb3B0aW9uc1BheWxvYWQsIFByb3RvY29sOjpEZWJ1Z2dlcjo6QnJlYWtwb2ludElk
KiBvdXRCcmVha3BvaW50SWQsIFJlZlB0cjxQcm90b2NvbDo6RGVidWdnZXI6OkxvY2F0aW9uPiYg
b3V0QWN0dWFsTG9jYXRpb24pCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxzdGQ6OnR1cGxlPFBy
b3RvY29sOjpEZWJ1Z2dlcjo6QnJlYWtwb2ludElkLCBSZWY8UHJvdG9jb2w6OkRlYnVnZ2VyOjpM
b2NhdGlvbj4+PiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZXRCcmVha3BvaW50KFJlZjxKU09O
OjpPYmplY3Q+JiYgbG9jYXRpb24sIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgb3B0aW9ucykKIHsK
KyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBKU0M6OlNvdXJj
ZUlEIHNvdXJjZUlEOwogICAgIHVuc2lnbmVkIGxpbmVOdW1iZXI7CiAgICAgdW5zaWduZWQgY29s
dW1uTnVtYmVyOwogICAgIGlmICghcGFyc2VMb2NhdGlvbihlcnJvclN0cmluZywgbG9jYXRpb24s
IHNvdXJjZUlELCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIpKQotICAgICAgICByZXR1cm47Cisg
ICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAgICBhdXRvIHNj
cmlwdEl0ZXJhdG9yID0gbV9zY3JpcHRzLmZpbmQoc291cmNlSUQpOwotICAgIGlmIChzY3JpcHRJ
dGVyYXRvciA9PSBtX3NjcmlwdHMuZW5kKCkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWlz
c2luZyBzY3JpcHQgZm9yIHNjcmlwdElkIGluIGdpdmVuIGxvY2F0aW9uIl9zOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQorICAgIGlmIChzY3JpcHRJdGVyYXRvciA9PSBtX3NjcmlwdHMuZW5kKCkp
CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTWlzc2luZyBzY3JpcHQgZm9yIHNjcmlw
dElkIGluIGdpdmVuIGxvY2F0aW9uIl9zKTsKIAotICAgIGF1dG8gcHJvdG9jb2xCcmVha3BvaW50
ID0gUHJvdG9jb2xCcmVha3BvaW50Ojpmcm9tUGF5bG9hZChlcnJvclN0cmluZywgc291cmNlSUQs
IGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlciwgb3B0aW9uc1BheWxvYWQpOworICAgIGF1dG8gcHJv
dG9jb2xCcmVha3BvaW50ID0gUHJvdG9jb2xCcmVha3BvaW50Ojpmcm9tUGF5bG9hZChlcnJvclN0
cmluZywgc291cmNlSUQsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlciwgV1RGTW92ZShvcHRpb25z
KSk7CiAgICAgaWYgKCFwcm90b2NvbEJyZWFrcG9pbnQpCi0gICAgICAgIHJldHVybjsKKyAgICAg
ICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgIC8vIERvbid0IHNh
dmUgYHByb3RvY29sQnJlYWtwb2ludGAgaW4gYG1fcHJvdG9jb2xCcmVha3BvaW50Rm9yUHJvdG9j
b2xCcmVha3BvaW50SURgIGJlY2F1c2UgaXQKICAgICAvLyB3YXMgc2V0IHNwZWNpZmljYWxseSBm
b3IgdGhlIGdpdmVuIGBzb3VyY2VJRGAsIHdoaWNoIGlzIHVuaXF1ZSwgbWVhbmluZyB0aGF0IGl0
IHdpbGwgbmV2ZXIKQEAgLTU5MSwyMCArNTk3LDE1IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJB
Z2VudDo6c2V0QnJlYWtwb2ludChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IEpTT046
CiAKICAgICBhdXRvIGRlYnVnZ2VyQnJlYWtwb2ludCA9IHByb3RvY29sQnJlYWtwb2ludC0+Y3Jl
YXRlRGVidWdnZXJCcmVha3BvaW50KG1fbmV4dERlYnVnZ2VyQnJlYWtwb2ludElEKyssIHNvdXJj
ZUlEKTsKIAotICAgIGlmICghcmVzb2x2ZUJyZWFrcG9pbnQoc2NyaXB0SXRlcmF0b3ItPnZhbHVl
LCBkZWJ1Z2dlckJyZWFrcG9pbnQpKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIkNvdWxkIG5v
dCByZXNvbHZlIGJyZWFrcG9pbnQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYg
KCFyZXNvbHZlQnJlYWtwb2ludChzY3JpcHRJdGVyYXRvci0+dmFsdWUsIGRlYnVnZ2VyQnJlYWtw
b2ludCkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiQ291bGQgbm90IHJlc29sdmUg
YnJlYWtwb2ludCJfcyk7CiAKLSAgICBpZiAoIXNldEJyZWFrcG9pbnQoZGVidWdnZXJCcmVha3Bv
aW50KSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJCcmVha3BvaW50IGZvciBnaXZlbiBsb2Nh
dGlvbiBhbHJlYWR5IGV4aXN0cyJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAo
IXNldEJyZWFrcG9pbnQoZGVidWdnZXJCcmVha3BvaW50KSkKKyAgICAgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKCJCcmVha3BvaW50IGZvciBnaXZlbiBsb2NhdGlvbiBhbHJlYWR5IGV4aXN0cyJf
cyk7CiAKICAgICBkaWRTZXRCcmVha3BvaW50KCpwcm90b2NvbEJyZWFrcG9pbnQsIGRlYnVnZ2Vy
QnJlYWtwb2ludCk7CiAKLSAgICBvdXRBY3R1YWxMb2NhdGlvbiA9IGJ1aWxkRGVidWdnZXJMb2Nh
dGlvbihkZWJ1Z2dlckJyZWFrcG9pbnQpOwotICAgICpvdXRCcmVha3BvaW50SWQgPSBwcm90b2Nv
bEJyZWFrcG9pbnQtPmlkKCk7CisgICAgcmV0dXJuIHsgeyBwcm90b2NvbEJyZWFrcG9pbnQtPmlk
KCksIGJ1aWxkRGVidWdnZXJMb2NhdGlvbihkZWJ1Z2dlckJyZWFrcG9pbnQpIH0gfTsKIH0KIAog
dm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkaWRTZXRCcmVha3BvaW50KFByb3RvY29sQnJl
YWtwb2ludCYgcHJvdG9jb2xCcmVha3BvaW50LCBKU0M6OkJyZWFrcG9pbnQmIGRlYnVnZ2VyQnJl
YWtwb2ludCkKQEAgLTYzMCw3ICs2MzEsNyBAQCBib29sIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6
OnNldEJyZWFrcG9pbnQoSlNDOjpCcmVha3BvaW50JiBkZWJ1Z2dlckJyZWFrcG9pbnQpCiAgICAg
cmV0dXJuIG1fZGVidWdnZXIuc2V0QnJlYWtwb2ludChkZWJ1Z2dlckJyZWFrcG9pbnQpOwogfQog
Ci12b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnJlbW92ZUJyZWFrcG9pbnQoRXJyb3JTdHJp
bmcmLCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6QnJlYWtwb2ludElkJiBw
cm90b2NvbEJyZWFrcG9pbnRJRCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3Bl
Y3RvckRlYnVnZ2VyQWdlbnQ6OnJlbW92ZUJyZWFrcG9pbnQoY29uc3QgUHJvdG9jb2w6OkRlYnVn
Z2VyOjpCcmVha3BvaW50SWQmIHByb3RvY29sQnJlYWtwb2ludElEKQogewogICAgIG1fcHJvdG9j
b2xCcmVha3BvaW50Rm9yUHJvdG9jb2xCcmVha3BvaW50SUQucmVtb3ZlKHByb3RvY29sQnJlYWtw
b2ludElEKTsKIApAQCAtNjQxLDI0ICs2NDIsMzQgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFn
ZW50OjpyZW1vdmVCcmVha3BvaW50KEVycm9yU3RyaW5nJiwgY29uc3QgSW5zcGVjdG9yOjpQcm8K
ICAgICAgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9ja2VyKG1fZGVidWdnZXIudm0oKSk7CiAgICAg
ICAgIG1fZGVidWdnZXIucmVtb3ZlQnJlYWtwb2ludChkZWJ1Z2dlckJyZWFrcG9pbnQpOwogICAg
IH0KKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6
Y29udGludWVVbnRpbE5leHRSdW5Mb29wKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZykKK1Byb3Rv
Y29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmNvbnRpbnVl
VW50aWxOZXh0UnVuTG9vcCgpCiB7Ci0gICAgaWYgKCFhc3NlcnRQYXVzZWQoZXJyb3JTdHJpbmcp
KQotICAgICAgICByZXR1cm47CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5n
OwogCi0gICAgcmVzdW1lKGVycm9yU3RyaW5nKTsKKyAgICBpZiAoIWFzc2VydFBhdXNlZChlcnJv
clN0cmluZykpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CisK
KyAgICBhdXRvIHJlc3VtZVJlc3VsdCA9IHJlc3VtZSgpOworICAgIGlmICghcmVzdW1lUmVzdWx0
KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQocmVzdW1lUmVzdWx0LmVycm9yKCkpOwog
CiAgICAgbV9lbmFibGVQYXVzZVdoZW5JZGxlID0gdHJ1ZTsKIAogICAgIHJlZ2lzdGVySWRsZUhh
bmRsZXIoKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJB
Z2VudDo6Y29udGludWVUb0xvY2F0aW9uKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3Qg
SlNPTjo6T2JqZWN0JiBsb2NhdGlvbikKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IElu
c3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmNvbnRpbnVlVG9Mb2NhdGlvbihSZWY8SlNPTjo6T2JqZWN0
PiYmIGxvY2F0aW9uKQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsK
KwogICAgIGlmICghYXNzZXJ0UGF1c2VkKGVycm9yU3RyaW5nKSkKLSAgICAgICAgcmV0dXJuOwor
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCiAgICAgaWYgKG1f
Y29udGludWVUb0xvY2F0aW9uRGVidWdnZXJCcmVha3BvaW50KSB7CiAgICAgICAgIG1fZGVidWdn
ZXIucmVtb3ZlQnJlYWtwb2ludCgqbV9jb250aW51ZVRvTG9jYXRpb25EZWJ1Z2dlckJyZWFrcG9p
bnQpOwpAQCAtNjY5LDE5ICs2ODAsMTggQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojpj
b250aW51ZVRvTG9jYXRpb24oRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdAogICAgIHVu
c2lnbmVkIGxpbmVOdW1iZXI7CiAgICAgdW5zaWduZWQgY29sdW1uTnVtYmVyOwogICAgIGlmICgh
cGFyc2VMb2NhdGlvbihlcnJvclN0cmluZywgbG9jYXRpb24sIHNvdXJjZUlELCBsaW5lTnVtYmVy
LCBjb2x1bW5OdW1iZXIpKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5l
eHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAgICBhdXRvIHNjcmlwdEl0ZXJhdG9yID0gbV9zY3Jp
cHRzLmZpbmQoc291cmNlSUQpOwogICAgIGlmIChzY3JpcHRJdGVyYXRvciA9PSBtX3NjcmlwdHMu
ZW5kKCkpIHsKICAgICAgICAgbV9kZWJ1Z2dlci5jb250aW51ZVByb2dyYW0oKTsKICAgICAgICAg
bV9mcm9udGVuZERpc3BhdGNoZXItPnJlc3VtZWQoKTsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAi
TWlzc2luZyBzY3JpcHQgZm9yIHNjcmlwdElkIGluIGdpdmVuIGxvY2F0aW9uIl9zOwotICAgICAg
ICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTWlzc2luZyBzY3JpcHQg
Zm9yIHNjcmlwdElkIGluIGdpdmVuIGxvY2F0aW9uIl9zKTsKICAgICB9CiAKICAgICBhdXRvIHBy
b3RvY29sQnJlYWtwb2ludCA9IFByb3RvY29sQnJlYWtwb2ludDo6ZnJvbVBheWxvYWQoZXJyb3JT
dHJpbmcsIHNvdXJjZUlELCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIpOwogICAgIGlmICghcHJv
dG9jb2xCcmVha3BvaW50KQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5l
eHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAgICAvLyBEb24ndCBzYXZlIGBwcm90b2NvbEJyZWFr
cG9pbnRgIGluIGBtX3Byb3RvY29sQnJlYWtwb2ludEZvclByb3RvY29sQnJlYWtwb2ludElEYCBi
ZWNhdXNlIGl0CiAgICAgLy8gaXMgYSB0ZW1wb3JhcnkgYnJlYWtwb2ludCB0aGF0IHdpbGwgYmUg
cmVtb3ZlZCBhcyBzb29uIGFzIGBsb2NhdGlvbmAgaXMgcmVhY2hlZC4KQEAgLTY5MSw4ICs3MDEs
NyBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmNvbnRpbnVlVG9Mb2NhdGlvbihFcnJv
clN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0CiAgICAgaWYgKCFyZXNvbHZlQnJlYWtwb2ludChz
Y3JpcHRJdGVyYXRvci0+dmFsdWUsIGRlYnVnZ2VyQnJlYWtwb2ludCkpIHsKICAgICAgICAgbV9k
ZWJ1Z2dlci5jb250aW51ZVByb2dyYW0oKTsKICAgICAgICAgbV9mcm9udGVuZERpc3BhdGNoZXIt
PnJlc3VtZWQoKTsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiQ291bGQgbm90IHJlc29sdmUgYnJl
YWtwb2ludCJfczsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0
ZWQoIkNvdWxkIG5vdCByZXNvbHZlIGJyZWFrcG9pbnQiX3MpOwogICAgIH0KIAogICAgIGlmICgh
c2V0QnJlYWtwb2ludChkZWJ1Z2dlckJyZWFrcG9pbnQpKSB7CkBAIC03MDEsNyArNzEwLDcgQEAg
dm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojpjb250aW51ZVRvTG9jYXRpb24oRXJyb3JTdHJp
bmcmIGVycm9yU3RyaW5nLCBjb25zdAogICAgICAgICAvLyBoaXQgdGhpcyBuZXcgYnJlYWtwb2lu
dCBvciBub3QuCiAgICAgICAgIG1fZGVidWdnZXIuY29udGludWVQcm9ncmFtKCk7CiAgICAgICAg
IG1fZnJvbnRlbmREaXNwYXRjaGVyLT5yZXN1bWVkKCk7Ci0gICAgICAgIHJldHVybjsKKyAgICAg
ICAgcmV0dXJuIHsgfTsKICAgICB9CiAKICAgICBtX2NvbnRpbnVlVG9Mb2NhdGlvbkRlYnVnZ2Vy
QnJlYWtwb2ludCA9IFdURk1vdmUoZGVidWdnZXJCcmVha3BvaW50KTsKQEAgLTcxMCw0MSArNzE5
LDQyIEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6Y29udGludWVUb0xvY2F0aW9uKEVy
cm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QKICAgICAvLyBTbyBkb24ndCBpc3N1ZSBhIHJl
c3VtZWQgZXZlbnQgdW5sZXNzIHdlIGV4aXQgdGhlIFZNIHdpdGhvdXQgcGF1c2luZy4KICAgICB3
aWxsU3RlcEFuZE1heUJlY29tZUlkbGUoKTsKICAgICBtX2RlYnVnZ2VyLmNvbnRpbnVlUHJvZ3Jh
bSgpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50
OjpzZWFyY2hJbkNvbnRlbnQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcm
IHNjcmlwdElEU3RyLCBjb25zdCBTdHJpbmcmIHF1ZXJ5LCBjb25zdCBib29sKiBvcHRpb25hbENh
c2VTZW5zaXRpdmUsIGNvbnN0IGJvb2wqIG9wdGlvbmFsSXNSZWdleCwgUmVmUHRyPEpTT046OkFy
cmF5T2Y8UHJvdG9jb2w6OkdlbmVyaWNUeXBlczo6U2VhcmNoTWF0Y2g+PiYgcmVzdWx0cykKK1By
b3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpHZW5lcmlj
VHlwZXM6OlNlYXJjaE1hdGNoPj4+IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNlYXJjaEluQ29u
dGVudChjb25zdCBQcm90b2NvbDo6RGVidWdnZXI6OlNjcmlwdElkJiBzY3JpcHRJZCwgY29uc3Qg
U3RyaW5nJiBxdWVyeSwgT3B0aW9uYWw8Ym9vbD4mJiBjYXNlU2Vuc2l0aXZlLCBPcHRpb25hbDxi
b29sPiYmIGlzUmVnZXgpCiB7Ci0gICAgSlNDOjpTb3VyY2VJRCBzb3VyY2VJRCA9IHNjcmlwdElE
U3RyLnRvSW50UHRyKCk7Ci0gICAgYXV0byBpdCA9IG1fc2NyaXB0cy5maW5kKHNvdXJjZUlEKTsK
LSAgICBpZiAoaXQgPT0gbV9zY3JpcHRzLmVuZCgpKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0g
Ik1pc3Npbmcgc2NyaXB0IGZvciBnaXZlbiBzY3JpcHRJZCI7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9CisgICAgYXV0byBpdCA9IG1fc2NyaXB0cy5maW5kKHNjcmlwdElkLnRvSW50UHRyKCkpOwor
ICAgIGlmIChpdCA9PSBtX3NjcmlwdHMuZW5kKCkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBl
Y3RlZCgiTWlzc2luZyBzY3JpcHQgZm9yIGdpdmVuIHNjcmlwdElkIl9zKTsKIAotICAgIGJvb2wg
aXNSZWdleCA9IG9wdGlvbmFsSXNSZWdleCA/ICpvcHRpb25hbElzUmVnZXggOiBmYWxzZTsKLSAg
ICBib29sIGNhc2VTZW5zaXRpdmUgPSBvcHRpb25hbENhc2VTZW5zaXRpdmUgPyAqb3B0aW9uYWxD
YXNlU2Vuc2l0aXZlIDogZmFsc2U7Ci0gICAgcmVzdWx0cyA9IENvbnRlbnRTZWFyY2hVdGlsaXRp
ZXM6OnNlYXJjaEluVGV4dEJ5TGluZXMoaXQtPnZhbHVlLnNvdXJjZSwgcXVlcnksIGNhc2VTZW5z
aXRpdmUsIGlzUmVnZXgpOworICAgIHJldHVybiBDb250ZW50U2VhcmNoVXRpbGl0aWVzOjpzZWFy
Y2hJblRleHRCeUxpbmVzKGl0LT52YWx1ZS5zb3VyY2UsIHF1ZXJ5LCBjYXNlU2Vuc2l0aXZlLnZh
bHVlT3IoZmFsc2UpLCBpc1JlZ2V4LnZhbHVlT3IoZmFsc2UpKTsKIH0KIAotdm9pZCBJbnNwZWN0
b3JEZWJ1Z2dlckFnZW50OjpnZXRTY3JpcHRTb3VyY2UoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5n
LCBjb25zdCBTdHJpbmcmIHNjcmlwdElEU3RyLCBTdHJpbmcqIHNjcmlwdFNvdXJjZSkKK1Byb3Rv
Y29sOjpFcnJvclN0cmluZ09yPFN0cmluZz4gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6Z2V0U2Ny
aXB0U291cmNlKGNvbnN0IFByb3RvY29sOjpEZWJ1Z2dlcjo6U2NyaXB0SWQmIHNjcmlwdElkKQog
ewotICAgIEpTQzo6U291cmNlSUQgc291cmNlSUQgPSBzY3JpcHRJRFN0ci50b0ludFB0cigpOwot
ICAgIGF1dG8gaXQgPSBtX3NjcmlwdHMuZmluZChzb3VyY2VJRCk7Ci0gICAgaWYgKGl0ICE9IG1f
c2NyaXB0cy5lbmQoKSkKLSAgICAgICAgKnNjcmlwdFNvdXJjZSA9IGl0LT52YWx1ZS5zb3VyY2U7
Ci0gICAgZWxzZQotICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIHNjcmlwdCBmb3IgZ2l2
ZW4gc2NyaXB0SWQiOworICAgIGF1dG8gaXQgPSBtX3NjcmlwdHMuZmluZChzY3JpcHRJZC50b0lu
dFB0cigpKTsKKyAgICBpZiAoaXQgPT0gbV9zY3JpcHRzLmVuZCgpKQorICAgICAgICByZXR1cm4g
bWFrZVVuZXhwZWN0ZWQoIk1pc3Npbmcgc2NyaXB0IGZvciBnaXZlbiBzY3JpcHRJZCIpOworCisg
ICAgcmV0dXJuIGl0LT52YWx1ZS5zb3VyY2U7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJB
Z2VudDo6Z2V0RnVuY3Rpb25EZXRhaWxzKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3Qg
U3RyaW5nJiBmdW5jdGlvbklkLCBSZWZQdHI8UHJvdG9jb2w6OkRlYnVnZ2VyOjpGdW5jdGlvbkRl
dGFpbHM+JiBkZXRhaWxzKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPFByb3RvY29sOjpE
ZWJ1Z2dlcjo6RnVuY3Rpb25EZXRhaWxzPj4gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6Z2V0RnVu
Y3Rpb25EZXRhaWxzKGNvbnN0IFN0cmluZyYgZnVuY3Rpb25JZCkKIHsKKyAgICBQcm90b2NvbDo6
RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNj
cmlwdCA9IG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmluamVjdGVkU2NyaXB0Rm9yT2JqZWN0SWQo
ZnVuY3Rpb25JZCk7Ci0gICAgaWYgKGluamVjdGVkU2NyaXB0Lmhhc05vVmFsdWUoKSkgewotICAg
ICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIGluamVjdGVkIHNjcmlwdCBmb3IgZ2l2ZW4gZnVu
Y3Rpb25JZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoaW5qZWN0ZWRTY3Jp
cHQuaGFzTm9WYWx1ZSgpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk1pc3Npbmcg
aW5qZWN0ZWQgc2NyaXB0IGZvciBnaXZlbiBmdW5jdGlvbklkIl9zKTsKIAorICAgIFJlZlB0cjxQ
cm90b2NvbDo6RGVidWdnZXI6OkZ1bmN0aW9uRGV0YWlscz4gZGV0YWlsczsKICAgICBpbmplY3Rl
ZFNjcmlwdC5nZXRGdW5jdGlvbkRldGFpbHMoZXJyb3JTdHJpbmcsIGZ1bmN0aW9uSWQsIGRldGFp
bHMpOworICAgIGlmICghZGV0YWlscykKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVy
cm9yU3RyaW5nKTsKKworICAgIHJldHVybiBkZXRhaWxzLnJlbGVhc2VOb25OdWxsKCk7CiB9CiAK
IHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2NoZWR1bGVQYXVzZUF0TmV4dE9wcG9ydHVu
aXR5KERlYnVnZ2VyRnJvbnRlbmREaXNwYXRjaGVyOjpSZWFzb24gcmVhc29uLCBSZWZQdHI8SlNP
Tjo6T2JqZWN0PiYmIGRhdGEpCkBAIC03OTIsNTcgKzgwMiw3NSBAQCBib29sIEluc3BlY3RvckRl
YnVnZ2VyQWdlbnQ6OmNhbmNlbFBhdXNlRm9yU3BlY2lhbEJyZWFrcG9pbnQoSlNDOjpCcmVha3Bv
aW50JiBicgogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdl
bnQ6OnBhdXNlKEVycm9yU3RyaW5nJikKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IElu
c3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnBhdXNlKCkKIHsKICAgICBzY2hlZHVsZVBhdXNlQXROZXh0
T3Bwb3J0dW5pdHkoRGVidWdnZXJGcm9udGVuZERpc3BhdGNoZXI6OlJlYXNvbjo6UGF1c2VPbk5l
eHRTdGF0ZW1lbnQpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1
Z2dlckFnZW50OjpyZXN1bWUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nKQorUHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6cmVzdW1lKCkKIHsKLSAg
ICBpZiAoIW1fcGF1c2VkR2xvYmFsT2JqZWN0ICYmICFtX2phdmFTY3JpcHRQYXVzZVNjaGVkdWxl
ZCkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJNdXN0IGJlIHBhdXNlZCBvciB3YWl0aW5nIHRv
IHBhdXNlIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghbV9wYXVzZWRHbG9i
YWxPYmplY3QgJiYgIW1famF2YVNjcmlwdFBhdXNlU2NoZWR1bGVkKQorICAgICAgICByZXR1cm4g
bWFrZVVuZXhwZWN0ZWQoIk11c3QgYmUgcGF1c2VkIG9yIHdhaXRpbmcgdG8gcGF1c2UiX3MpOwog
CiAgICAgY2FuY2VsUGF1c2VBdE5leHRPcHBvcnR1bml0eSgpOwogICAgIG1fZGVidWdnZXIuY29u
dGludWVQcm9ncmFtKCk7CiAgICAgbV9jb25kaXRpb25Ub0Rpc3BhdGNoUmVzdW1lZCA9IFNob3Vs
ZERpc3BhdGNoUmVzdW1lZDo6V2hlbkNvbnRpbnVlZDsKKworICAgIHJldHVybiB7IH07CiB9CiAK
LXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c3RlcE5leHQoRXJyb3JTdHJpbmcmIGVycm9y
U3RyaW5nKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yRGVidWdnZXJB
Z2VudDo6c3RlcE5leHQoKQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmlu
ZzsKKwogICAgIGlmICghYXNzZXJ0UGF1c2VkKGVycm9yU3RyaW5nKSkKLSAgICAgICAgcmV0dXJu
OworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCiAgICAgd2ls
bFN0ZXBBbmRNYXlCZWNvbWVJZGxlKCk7CiAgICAgbV9kZWJ1Z2dlci5zdGVwTmV4dEV4cHJlc3Np
b24oKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2Vu
dDo6c3RlcE92ZXIoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nKQorUHJvdG9jb2w6OkVycm9yU3Ry
aW5nT3I8dm9pZD4gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c3RlcE92ZXIoKQogeworICAgIFBy
b3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIGlmICghYXNzZXJ0UGF1c2Vk
KGVycm9yU3RyaW5nKSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoZXJyb3JTdHJpbmcpOwogCiAgICAgd2lsbFN0ZXBBbmRNYXlCZWNvbWVJZGxlKCk7CiAg
ICAgbV9kZWJ1Z2dlci5zdGVwT3ZlclN0YXRlbWVudCgpOworCisgICAgcmV0dXJuIHsgfTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzdGVwSW50byhFcnJvclN0cmluZyYgZXJy
b3JTdHJpbmcpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JEZWJ1Z2dl
ckFnZW50OjpzdGVwSW50bygpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3Ry
aW5nOworCiAgICAgaWYgKCFhc3NlcnRQYXVzZWQoZXJyb3JTdHJpbmcpKQotICAgICAgICByZXR1
cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAgICB3
aWxsU3RlcEFuZE1heUJlY29tZUlkbGUoKTsKICAgICBtX2RlYnVnZ2VyLnN0ZXBJbnRvU3RhdGVt
ZW50KCk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdl
bnQ6OnN0ZXBPdXQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nKQorUHJvdG9jb2w6OkVycm9yU3Ry
aW5nT3I8dm9pZD4gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c3RlcE91dCgpCiB7CisgICAgUHJv
dG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAgICAgaWYgKCFhc3NlcnRQYXVzZWQo
ZXJyb3JTdHJpbmcpKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBl
Y3RlZChlcnJvclN0cmluZyk7CiAKICAgICB3aWxsU3RlcEFuZE1heUJlY29tZUlkbGUoKTsKICAg
ICBtX2RlYnVnZ2VyLnN0ZXBPdXRPZkZ1bmN0aW9uKCk7CisKKyAgICByZXR1cm4geyB9OwogfQog
CiB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnJlZ2lzdGVySWRsZUhhbmRsZXIoKQpAQCAt
ODc3LDg2ICs5MDUsOTggQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkaWRCZWNvbWVJ
ZGxlKCkKIAogICAgIG1fY29uZGl0aW9uVG9EaXNwYXRjaFJlc3VtZWQgPSBTaG91bGREaXNwYXRj
aFJlc3VtZWQ6Ok5vOwogCi0gICAgaWYgKG1fZW5hYmxlUGF1c2VXaGVuSWRsZSkgewotICAgICAg
ICBFcnJvclN0cmluZyBpZ25vcmVkOwotICAgICAgICBwYXVzZShpZ25vcmVkKTsKLSAgICB9Cisg
ICAgaWYgKG1fZW5hYmxlUGF1c2VXaGVuSWRsZSkKKyAgICAgICAgcGF1c2UoKTsKIH0KIAotdm9p
ZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZXRQYXVzZU9uRGVidWdnZXJTdGF0ZW1lbnRzKEVy
cm9yU3RyaW5nJiBlcnJvclN0cmluZywgYm9vbCBlbmFibGVkLCBjb25zdCBKU09OOjpPYmplY3Qq
IG9wdGlvbnNQYXlsb2FkKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9y
RGVidWdnZXJBZ2VudDo6c2V0UGF1c2VPbkRlYnVnZ2VyU3RhdGVtZW50cyhib29sIGVuYWJsZWQs
IFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgb3B0aW9ucykKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JT
dHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBpZiAoIWVuYWJsZWQpIHsKICAgICAgICAgbV9kZWJ1
Z2dlci5zZXRQYXVzZU9uRGVidWdnZXJTdGF0ZW1lbnRzQnJlYWtwb2ludChudWxscHRyKTsKLSAg
ICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAotICAgIGF1dG8gYnJl
YWtwb2ludCA9IGRlYnVnZ2VyQnJlYWtwb2ludEZyb21QYXlsb2FkKGVycm9yU3RyaW5nLCBvcHRp
b25zUGF5bG9hZCk7CisgICAgYXV0byBicmVha3BvaW50ID0gZGVidWdnZXJCcmVha3BvaW50RnJv
bVBheWxvYWQoZXJyb3JTdHJpbmcsIFdURk1vdmUob3B0aW9ucykpOwogICAgIGlmICghYnJlYWtw
b2ludCkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJy
b3JTdHJpbmcpOwogCiAgICAgbV9kZWJ1Z2dlci5zZXRQYXVzZU9uRGVidWdnZXJTdGF0ZW1lbnRz
QnJlYWtwb2ludChXVEZNb3ZlKGJyZWFrcG9pbnQpKTsKKworICAgIHJldHVybiB7IH07CiB9CiAK
LXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0UGF1c2VPbkV4Y2VwdGlvbnMoRXJyb3JT
dHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHN0YXRlU3RyaW5nLCBjb25zdCBKU09O
OjpPYmplY3QqIG9wdGlvbnNQYXlsb2FkKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4g
SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0UGF1c2VPbkV4Y2VwdGlvbnMoY29uc3QgU3RyaW5n
JiBzdGF0ZVN0cmluZywgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBvcHRpb25zKQogeworICAgIFBy
b3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIFJlZlB0cjxKU0M6OkJyZWFr
cG9pbnQ+IGFsbEV4Y2VwdGlvbnNCcmVha3BvaW50OwogICAgIFJlZlB0cjxKU0M6OkJyZWFrcG9p
bnQ+IHVuY2F1Z2h0RXhjZXB0aW9uc0JyZWFrcG9pbnQ7CiAKICAgICBpZiAoc3RhdGVTdHJpbmcg
PT0gImFsbCIpIHsKLSAgICAgICAgYWxsRXhjZXB0aW9uc0JyZWFrcG9pbnQgPSBkZWJ1Z2dlckJy
ZWFrcG9pbnRGcm9tUGF5bG9hZChlcnJvclN0cmluZywgb3B0aW9uc1BheWxvYWQpOworICAgICAg
ICBhbGxFeGNlcHRpb25zQnJlYWtwb2ludCA9IGRlYnVnZ2VyQnJlYWtwb2ludEZyb21QYXlsb2Fk
KGVycm9yU3RyaW5nLCBXVEZNb3ZlKG9wdGlvbnMpKTsKICAgICAgICAgaWYgKCFhbGxFeGNlcHRp
b25zQnJlYWtwb2ludCkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVybiBt
YWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAgICAgfSBlbHNlIGlmIChzdGF0ZVN0cmluZyA9
PSAidW5jYXVnaHQiKSB7Ci0gICAgICAgIHVuY2F1Z2h0RXhjZXB0aW9uc0JyZWFrcG9pbnQgPSBk
ZWJ1Z2dlckJyZWFrcG9pbnRGcm9tUGF5bG9hZChlcnJvclN0cmluZywgb3B0aW9uc1BheWxvYWQp
OworICAgICAgICB1bmNhdWdodEV4Y2VwdGlvbnNCcmVha3BvaW50ID0gZGVidWdnZXJCcmVha3Bv
aW50RnJvbVBheWxvYWQoZXJyb3JTdHJpbmcsIFdURk1vdmUob3B0aW9ucykpOwogICAgICAgICBp
ZiAoIXVuY2F1Z2h0RXhjZXB0aW9uc0JyZWFrcG9pbnQpCi0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgfSBlbHNlIGlmIChzdGF0ZVN0cmluZyAhPSAibm9uZSIpIHsKLSAgICAgICAgZXJyb3JTdHJp
bmcgPSBtYWtlU3RyaW5nKCJVbmtub3duIHN0YXRlOiAiX3MsIHN0YXRlU3RyaW5nKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJv
clN0cmluZyk7CisgICAgfSBlbHNlIGlmIChzdGF0ZVN0cmluZyAhPSAibm9uZSIpCisgICAgICAg
IHJldHVybiBtYWtlVW5leHBlY3RlZChtYWtlU3RyaW5nKCJVbmtub3duIHN0YXRlOiAiX3MsIHN0
YXRlU3RyaW5nKSk7CiAKICAgICBtX2RlYnVnZ2VyLnNldFBhdXNlT25BbGxFeGNlcHRpb25zQnJl
YWtwb2ludChXVEZNb3ZlKGFsbEV4Y2VwdGlvbnNCcmVha3BvaW50KSk7CiAgICAgbV9kZWJ1Z2dl
ci5zZXRQYXVzZU9uVW5jYXVnaHRFeGNlcHRpb25zQnJlYWtwb2ludChXVEZNb3ZlKHVuY2F1Z2h0
RXhjZXB0aW9uc0JyZWFrcG9pbnQpKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5z
cGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0UGF1c2VPbkFzc2VydGlvbnMoRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBib29sIGVuYWJsZWQsIGNvbnN0IEpTT046Ok9iamVjdCogb3B0aW9uc1BheWxv
YWQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50
OjpzZXRQYXVzZU9uQXNzZXJ0aW9ucyhib29sIGVuYWJsZWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+
JiYgb3B0aW9ucykKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisK
ICAgICBpZiAoIWVuYWJsZWQpIHsKICAgICAgICAgbV9wYXVzZU9uQXNzZXJ0aW9uc0JyZWFrcG9p
bnQgPSBudWxscHRyOwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB7IH07CiAgICAg
fQogCi0gICAgYXV0byBicmVha3BvaW50ID0gZGVidWdnZXJCcmVha3BvaW50RnJvbVBheWxvYWQo
ZXJyb3JTdHJpbmcsIG9wdGlvbnNQYXlsb2FkKTsKKyAgICBhdXRvIGJyZWFrcG9pbnQgPSBkZWJ1
Z2dlckJyZWFrcG9pbnRGcm9tUGF5bG9hZChlcnJvclN0cmluZywgV1RGTW92ZShvcHRpb25zKSk7
CiAgICAgaWYgKCFicmVha3BvaW50KQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBt
YWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAgICBtX3BhdXNlT25Bc3NlcnRpb25zQnJl
YWtwb2ludCA9IFdURk1vdmUoYnJlYWtwb2ludCk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12
b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldFBhdXNlT25NaWNyb3Rhc2tzKEVycm9yU3Ry
aW5nJiBlcnJvclN0cmluZywgYm9vbCBlbmFibGVkLCBjb25zdCBKU09OOjpPYmplY3QqIG9wdGlv
bnNQYXlsb2FkKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yRGVidWdn
ZXJBZ2VudDo6c2V0UGF1c2VPbk1pY3JvdGFza3MoYm9vbCBlbmFibGVkLCBSZWZQdHI8SlNPTjo6
T2JqZWN0PiYmIG9wdGlvbnMpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3Ry
aW5nOworCiAgICAgaWYgKCFlbmFibGVkKSB7CiAgICAgICAgIG1fcGF1c2VPbk1pY3JvdGFza3NC
cmVha3BvaW50ID0gbnVsbHB0cjsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4geyB9
OwogICAgIH0KIAotICAgIGF1dG8gYnJlYWtwb2ludCA9IGRlYnVnZ2VyQnJlYWtwb2ludEZyb21Q
YXlsb2FkKGVycm9yU3RyaW5nLCBvcHRpb25zUGF5bG9hZCk7CisgICAgYXV0byBicmVha3BvaW50
ID0gZGVidWdnZXJCcmVha3BvaW50RnJvbVBheWxvYWQoZXJyb3JTdHJpbmcsIFdURk1vdmUob3B0
aW9ucykpOwogICAgIGlmICghYnJlYWtwb2ludCkKLSAgICAgICAgcmV0dXJuOworICAgICAgICBy
ZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCiAgICAgbV9wYXVzZU9uTWljcm90
YXNrc0JyZWFrcG9pbnQgPSBXVEZNb3ZlKGJyZWFrcG9pbnQpOworCisgICAgcmV0dXJuIHsgfTsK
IH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpldmFsdWF0ZU9uQ2FsbEZyYW1lKEVy
cm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBjYWxsRnJhbWVJZCwgY29uc3Qg
U3RyaW5nJiBleHByZXNzaW9uLCBjb25zdCBTdHJpbmcqIG9iamVjdEdyb3VwLCBjb25zdCBib29s
KiBpbmNsdWRlQ29tbWFuZExpbmVBUEksIGNvbnN0IGJvb2wqIGRvTm90UGF1c2VPbkV4Y2VwdGlv
bnNBbmRNdXRlQ29uc29sZSwgY29uc3QgYm9vbCogcmV0dXJuQnlWYWx1ZSwgY29uc3QgYm9vbCog
Z2VuZXJhdGVQcmV2aWV3LCBjb25zdCBib29sKiBzYXZlUmVzdWx0LCBjb25zdCBib29sKiAvKiBl
bXVsYXRlVXNlckdlc3R1cmUgKi8sIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2Jq
ZWN0PiYgcmVzdWx0LCBPcHRpb25hbDxib29sPiYgd2FzVGhyb3duLCBPcHRpb25hbDxpbnQ+JiBz
YXZlZFJlc3VsdEluZGV4KQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8c3RkOjp0dXBsZTxSZWY8
UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4sIE9wdGlvbmFsPGJvb2w+IC8qIHdhc1Ro
cm93biAqLywgT3B0aW9uYWw8aW50PiAvKiBzYXZlZFJlc3VsdEluZGV4ICovPj4gSW5zcGVjdG9y
RGVidWdnZXJBZ2VudDo6ZXZhbHVhdGVPbkNhbGxGcmFtZShjb25zdCBQcm90b2NvbDo6RGVidWdn
ZXI6OkNhbGxGcmFtZUlkJiBjYWxsRnJhbWVJZCwgY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBj
b25zdCBTdHJpbmcmIG9iamVjdEdyb3VwLCBPcHRpb25hbDxib29sPiYmIGluY2x1ZGVDb21tYW5k
TGluZUFQSSwgT3B0aW9uYWw8Ym9vbD4mJiBkb05vdFBhdXNlT25FeGNlcHRpb25zQW5kTXV0ZUNv
bnNvbGUsIE9wdGlvbmFsPGJvb2w+JiYgcmV0dXJuQnlWYWx1ZSwgT3B0aW9uYWw8Ym9vbD4mJiBn
ZW5lcmF0ZVByZXZpZXcsIE9wdGlvbmFsPGJvb2w+JiYgc2F2ZVJlc3VsdCwgT3B0aW9uYWw8Ym9v
bD4mJiAgLyogZW11bGF0ZVVzZXJHZXN0dXJlICovKQogeworICAgIFByb3RvY29sOjpFcnJvclN0
cmluZyBlcnJvclN0cmluZzsKKwogICAgIGlmICghYXNzZXJ0UGF1c2VkKGVycm9yU3RyaW5nKSkK
LSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJp
bmcpOwogCiAgICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHQgPSBtX2luamVjdGVkU2Ny
aXB0TWFuYWdlci5pbmplY3RlZFNjcmlwdEZvck9iamVjdElkKGNhbGxGcmFtZUlkKTsKLSAgICBp
ZiAoaW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0g
Ik1pc3NpbmcgaW5qZWN0ZWQgc2NyaXB0IGZvciBnaXZlbiBjYWxsRnJhbWVJZCJfczsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoaW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKQor
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk1pc3NpbmcgaW5qZWN0ZWQgc2NyaXB0IGZv
ciBnaXZlbiBjYWxsRnJhbWVJZCJfcyk7CiAKICAgICBKU0M6OkRlYnVnZ2VyOjpUZW1wb3Jhcmls
eURpc2FibGVFeGNlcHRpb25CcmVha3BvaW50cyB0ZW1wb3JhcmlseURpc2FibGVFeGNlcHRpb25C
cmVha3BvaW50cyhtX2RlYnVnZ2VyKTsKIApAQCAtOTY2LDI4ICsxMDA2LDMxIEBAIHZvaWQgSW5z
cGVjdG9yRGVidWdnZXJBZ2VudDo6ZXZhbHVhdGVPbkNhbGxGcmFtZShFcnJvclN0cmluZyYgZXJy
b3JTdHJpbmcsIGNvbnN0CiAgICAgICAgIG11dGVDb25zb2xlKCk7CiAgICAgfQogCi0gICAgaW5q
ZWN0ZWRTY3JpcHQuZXZhbHVhdGVPbkNhbGxGcmFtZShlcnJvclN0cmluZywgbV9jdXJyZW50Q2Fs
bFN0YWNrLmdldCgpLCBjYWxsRnJhbWVJZCwgZXhwcmVzc2lvbiwKLSAgICAgICAgb2JqZWN0R3Jv
dXAgPyAqb2JqZWN0R3JvdXAgOiBlbXB0eVN0cmluZygpLCBpbmNsdWRlQ29tbWFuZExpbmVBUEkg
JiYgKmluY2x1ZGVDb21tYW5kTGluZUFQSSwgcmV0dXJuQnlWYWx1ZSAmJiAqcmV0dXJuQnlWYWx1
ZSwgZ2VuZXJhdGVQcmV2aWV3ICYmICpnZW5lcmF0ZVByZXZpZXcsIHNhdmVSZXN1bHQgJiYgKnNh
dmVSZXN1bHQsCi0gICAgICAgIHJlc3VsdCwgd2FzVGhyb3duLCBzYXZlZFJlc3VsdEluZGV4KTsK
KyAgICBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4gcmVzdWx0OworICAg
IE9wdGlvbmFsPGJvb2w+IHdhc1Rocm93bjsKKyAgICBPcHRpb25hbDxpbnQ+IHNhdmVkUmVzdWx0
SW5kZXg7CisKKyAgICBpbmplY3RlZFNjcmlwdC5ldmFsdWF0ZU9uQ2FsbEZyYW1lKGVycm9yU3Ry
aW5nLCBtX2N1cnJlbnRDYWxsU3RhY2suZ2V0KCksIGNhbGxGcmFtZUlkLCBleHByZXNzaW9uLCBv
YmplY3RHcm91cCwgaW5jbHVkZUNvbW1hbmRMaW5lQVBJLnZhbHVlT3IoZmFsc2UpLCByZXR1cm5C
eVZhbHVlLnZhbHVlT3IoZmFsc2UpLCBnZW5lcmF0ZVByZXZpZXcudmFsdWVPcihmYWxzZSksIHNh
dmVSZXN1bHQudmFsdWVPcihmYWxzZSksIHJlc3VsdCwgd2FzVGhyb3duLCBzYXZlZFJlc3VsdElu
ZGV4KTsKIAogICAgIGlmIChwYXVzZUFuZE11dGUpCiAgICAgICAgIHVubXV0ZUNvbnNvbGUoKTsK
KworICAgIGlmICghcmVzdWx0KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JT
dHJpbmcpOworCisgICAgcmV0dXJuIHsgeyByZXN1bHQucmVsZWFzZU5vbk51bGwoKSwgV1RGTW92
ZSh3YXNUaHJvd24pLCBXVEZNb3ZlKHNhdmVkUmVzdWx0SW5kZXgpIH0gfTsKIH0KIAotdm9pZCBJ
bnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZXRTaG91bGRCbGFja2JveFVSTChFcnJvclN0cmluZyYg
ZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgdXJsLCBib29sIHNob3VsZEJsYWNrYm94LCBjb25z
dCBib29sKiBvcHRpb25hbENhc2VTZW5zaXRpdmUsIGNvbnN0IGJvb2wqIG9wdGlvbmFsSXNSZWdl
eCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6
OnNldFNob3VsZEJsYWNrYm94VVJMKGNvbnN0IFN0cmluZyYgdXJsLCBib29sIHNob3VsZEJsYWNr
Ym94LCBPcHRpb25hbDxib29sPiYmIG9wdGlvbmFsQ2FzZVNlbnNpdGl2ZSwgT3B0aW9uYWw8Ym9v
bD4mJiBvcHRpb25hbElzUmVnZXgpCiB7Ci0gICAgaWYgKHVybC5pc0VtcHR5KCkpIHsKLSAgICAg
ICAgZXJyb3JTdHJpbmcgPSAiVVJMIG11c3Qgbm90IGJlIGVtcHR5Il9zOwotICAgICAgICByZXR1
cm47Ci0gICAgfQorICAgIGlmICh1cmwuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbWFrZVVu
ZXhwZWN0ZWQoIlVSTCBtdXN0IG5vdCBiZSBlbXB0eSJfcyk7CiAKLSAgICBib29sIGNhc2VTZW5z
aXRpdmUgPSBvcHRpb25hbENhc2VTZW5zaXRpdmUgJiYgKm9wdGlvbmFsQ2FzZVNlbnNpdGl2ZTsK
LSAgICBib29sIGlzUmVnZXggPSBvcHRpb25hbElzUmVnZXggJiYgKm9wdGlvbmFsSXNSZWdleDsK
KyAgICBib29sIGNhc2VTZW5zaXRpdmUgPSBvcHRpb25hbENhc2VTZW5zaXRpdmUudmFsdWVPcihm
YWxzZSk7CisgICAgYm9vbCBpc1JlZ2V4ID0gb3B0aW9uYWxJc1JlZ2V4LnZhbHVlT3IoZmFsc2Up
OwogCi0gICAgaWYgKCFjYXNlU2Vuc2l0aXZlICYmICFpc1JlZ2V4ICYmIGlzV2ViS2l0SW5qZWN0
ZWRTY3JpcHQodXJsKSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJCbGFja2JveGluZyBvZiBp
bnRlcm5hbCBzY3JpcHRzIGlzIGNvbnRyb2xsZWQgYnkgJ0RlYnVnZ2VyLnNldFBhdXNlRm9ySW50
ZXJuYWxTY3JpcHRzJyJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoIWNhc2VT
ZW5zaXRpdmUgJiYgIWlzUmVnZXggJiYgaXNXZWJLaXRJbmplY3RlZFNjcmlwdCh1cmwpKQorICAg
ICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkJsYWNrYm94aW5nIG9mIGludGVybmFsIHNjcmlw
dHMgaXMgY29udHJvbGxlZCBieSAnRGVidWdnZXIuc2V0UGF1c2VGb3JJbnRlcm5hbFNjcmlwdHMn
Il9zKTsKIAogICAgIEJsYWNrYm94Q29uZmlnIGNvbmZpZyB7IHVybCwgY2FzZVNlbnNpdGl2ZSwg
aXNSZWdleCB9OwogICAgIGlmIChzaG91bGRCbGFja2JveCkKQEAgLTEwMDQsNiArMTA0Nyw4IEBA
IHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0U2hvdWxkQmxhY2tib3hVUkwoRXJyb3JT
dHJpbmcmIGVycm9yU3RyaW5nLCBjb25zCiAgICAgICAgICAgICBibGFja2JveFR5cGUgPSBKU0M6
OkRlYnVnZ2VyOjpCbGFja2JveFR5cGU6OkRlZmVycmVkOwogICAgICAgICBtX2RlYnVnZ2VyLnNl
dEJsYWNrYm94VHlwZShzb3VyY2VJRCwgYmxhY2tib3hUeXBlKTsKICAgICB9CisKKyAgICByZXR1
cm4geyB9OwogfQogCiBib29sIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNob3VsZEJsYWNrYm94
VVJMKGNvbnN0IFN0cmluZyYgdXJsKSBjb25zdApAQCAtMTAzOSwxMCArMTA4NCwxMCBAQCBTdHJp
bmcgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c291cmNlTWFwVVJMRm9yU2NyaXB0KGNvbnN0IEpT
Qzo6RGVidWdnZXI6OlNjcmlwdAogICAgIHJldHVybiBzY3JpcHQuc291cmNlTWFwcGluZ1VSTDsK
IH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZXRQYXVzZUZvckludGVybmFsU2Ny
aXB0cyhFcnJvclN0cmluZyYsIGJvb2wgc2hvdWxkUGF1c2UpCitQcm90b2NvbDo6RXJyb3JTdHJp
bmdPcjx2b2lkPiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZXRQYXVzZUZvckludGVybmFsU2Ny
aXB0cyhib29sIHNob3VsZFBhdXNlKQogewogICAgIGlmIChzaG91bGRQYXVzZSA9PSBtX3BhdXNl
Rm9ySW50ZXJuYWxTY3JpcHRzKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB7IH07
CiAKICAgICBtX3BhdXNlRm9ySW50ZXJuYWxTY3JpcHRzID0gc2hvdWxkUGF1c2U7CiAKQEAgLTEw
NTIsNiArMTA5Nyw4IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0UGF1c2VGb3JJ
bnRlcm5hbFNjcmlwdHMoRXJyb3JTdHJpbmcmLCBib29sIHNob3VsCiAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgbV9kZWJ1Z2dlci5zZXRCbGFja2JveFR5cGUoc291cmNlSUQsIGJsYWNr
Ym94VHlwZSk7CiAgICAgfQorCisgICAgcmV0dXJuIHsgfTsKIH0KIAogdm9pZCBJbnNwZWN0b3JE
ZWJ1Z2dlckFnZW50OjpkaWRQYXJzZVNvdXJjZShKU0M6OlNvdXJjZUlEIHNvdXJjZUlELCBjb25z
dCBKU0M6OkRlYnVnZ2VyOjpTY3JpcHQmIHNjcmlwdCkKQEAgLTEwNjEsMTIgKzExMDgsNyBAQCB2
b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpZFBhcnNlU291cmNlKEpTQzo6U291cmNlSUQg
c291cmNlSUQsIGNvbnN0IEpTQzo6RAogICAgIFN0cmluZyBzb3VyY2VVUkwgPSBzY3JpcHQuc291
cmNlVVJMOwogICAgIFN0cmluZyBzb3VyY2VNYXBwaW5nVVJMID0gc291cmNlTWFwVVJMRm9yU2Ny
aXB0KHNjcmlwdCk7CiAKLSAgICBjb25zdCBib29sIGlzTW9kdWxlID0gc2NyaXB0LnNvdXJjZVBy
b3ZpZGVyLT5zb3VyY2VUeXBlKCkgPT0gSlNDOjpTb3VyY2VQcm92aWRlclNvdXJjZVR5cGU6Ok1v
ZHVsZTsKLSAgICBjb25zdCBib29sKiBpc0NvbnRlbnRTY3JpcHQgPSBzY3JpcHQuaXNDb250ZW50
U2NyaXB0ID8gJnNjcmlwdC5pc0NvbnRlbnRTY3JpcHQgOiBudWxscHRyOwotICAgIFN0cmluZyog
c291cmNlVVJMUGFyYW0gPSBoYXNTb3VyY2VVUkwgPyAmc291cmNlVVJMIDogbnVsbHB0cjsKLSAg
ICBTdHJpbmcqIHNvdXJjZU1hcFVSTFBhcmFtID0gc291cmNlTWFwcGluZ1VSTC5pc0VtcHR5KCkg
PyBudWxscHRyIDogJnNvdXJjZU1hcHBpbmdVUkw7Ci0KLSAgICBtX2Zyb250ZW5kRGlzcGF0Y2hl
ci0+c2NyaXB0UGFyc2VkKHNjcmlwdElEU3RyLCBzY3JpcHQudXJsLCBzY3JpcHQuc3RhcnRMaW5l
LCBzY3JpcHQuc3RhcnRDb2x1bW4sIHNjcmlwdC5lbmRMaW5lLCBzY3JpcHQuZW5kQ29sdW1uLCBp
c0NvbnRlbnRTY3JpcHQsIHNvdXJjZVVSTFBhcmFtLCBzb3VyY2VNYXBVUkxQYXJhbSwgaXNNb2R1
bGUgPyAmaXNNb2R1bGUgOiBudWxscHRyKTsKKyAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+c2Ny
aXB0UGFyc2VkKHNjcmlwdElEU3RyLCBzY3JpcHQudXJsLCBzY3JpcHQuc3RhcnRMaW5lLCBzY3Jp
cHQuc3RhcnRDb2x1bW4sIHNjcmlwdC5lbmRMaW5lLCBzY3JpcHQuZW5kQ29sdW1uLCBzY3JpcHQu
aXNDb250ZW50U2NyaXB0LCBzb3VyY2VVUkwsIHNvdXJjZU1hcHBpbmdVUkwsIHNjcmlwdC5zb3Vy
Y2VQcm92aWRlci0+c291cmNlVHlwZSgpID09IEpTQzo6U291cmNlUHJvdmlkZXJTb3VyY2VUeXBl
OjpNb2R1bGUpOwogCiAgICAgbV9zY3JpcHRzLnNldChzb3VyY2VJRCwgc2NyaXB0KTsKIApAQCAt
MTE4MCwxMiArMTIyMiwxMyBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpZFBhdXNl
KEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpEZQogICAgICAgICBpZiAo
YXV0byBkZWJ1Z2dlckJyZWFrcG9pbnRJZCA9IG1fZGVidWdnZXIucGF1c2luZ0JyZWFrcG9pbnRJ
RCgpKSB7CiAgICAgICAgICAgICBBU1NFUlQoIW1fY29udGludWVUb0xvY2F0aW9uRGVidWdnZXJC
cmVha3BvaW50IHx8IGRlYnVnZ2VyQnJlYWtwb2ludElkICE9IG1fY29udGludWVUb0xvY2F0aW9u
RGVidWdnZXJCcmVha3BvaW50LT5pZCgpKTsKICAgICAgICAgICAgIGRhdGEgPSBKU09OOjpPYmpl
Y3Q6OmNyZWF0ZSgpOwotICAgICAgICAgICAgZGF0YS0+c2V0U3RyaW5nKCJvcmlnaW5hbFJlYXNv
biJfcywgUHJvdG9jb2w6Okluc3BlY3RvckhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKERl
YnVnZ2VyRnJvbnRlbmREaXNwYXRjaGVyOjpSZWFzb246OkJyZWFrcG9pbnQpKTsKLSAgICAgICAg
ICAgIGRhdGEtPnNldFZhbHVlKCJvcmlnaW5hbERhdGEiX3MsIGJ1aWxkQnJlYWtwb2ludFBhdXNl
UmVhc29uKGRlYnVnZ2VyQnJlYWtwb2ludElkKSk7CisgICAgICAgICAgICBkYXRhLT5zZXRTdHJp
bmcoIm9yaWdpbmFsUmVhc29uIl9zLCBQcm90b2NvbDo6SGVscGVyczo6Z2V0RW51bUNvbnN0YW50
VmFsdWUoRGVidWdnZXJGcm9udGVuZERpc3BhdGNoZXI6OlJlYXNvbjo6QnJlYWtwb2ludCkpOwor
ICAgICAgICAgICAgaWYgKGF1dG8gcGF1c2VSZWFzb24gPSBidWlsZEJyZWFrcG9pbnRQYXVzZVJl
YXNvbihkZWJ1Z2dlckJyZWFrcG9pbnRJZCkpCisgICAgICAgICAgICAgICAgZGF0YS0+c2V0VmFs
dWUoIm9yaWdpbmFsRGF0YSJfcywgcGF1c2VSZWFzb24ucmVsZWFzZU5vbk51bGwoKSk7CiAgICAg
ICAgIH0gZWxzZSBpZiAobV9wcmVCbGFja2JveFBhdXNlRGF0YSkgewogICAgICAgICAgICAgZGF0
YSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgICAgICAgICBkYXRhLT5zZXRTdHJpbmco
Im9yaWdpbmFsUmVhc29uIl9zLCBQcm90b2NvbDo6SW5zcGVjdG9ySGVscGVyczo6Z2V0RW51bUNv
bnN0YW50VmFsdWUobV9wcmVCbGFja2JveFBhdXNlUmVhc29uKSk7Ci0gICAgICAgICAgICBkYXRh
LT5zZXRWYWx1ZSgib3JpZ2luYWxEYXRhIl9zLCBtX3ByZUJsYWNrYm94UGF1c2VEYXRhKTsKKyAg
ICAgICAgICAgIGRhdGEtPnNldFN0cmluZygib3JpZ2luYWxSZWFzb24iX3MsIFByb3RvY29sOjpI
ZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShtX3ByZUJsYWNrYm94UGF1c2VSZWFzb24pKTsK
KyAgICAgICAgICAgIGRhdGEtPnNldFZhbHVlKCJvcmlnaW5hbERhdGEiX3MsIG1fcHJlQmxhY2ti
b3hQYXVzZURhdGEucmVsZWFzZU5vbk51bGwoKSk7CiAgICAgICAgIH0KICAgICAgICAgdXBkYXRl
UGF1c2VSZWFzb25BbmREYXRhKERlYnVnZ2VyRnJvbnRlbmREaXNwYXRjaGVyOjpSZWFzb246OkJs
YWNrYm94ZWRTY3JpcHQsIFdURk1vdmUoZGF0YSkpOwogICAgIH0KQEAgLTEyMDYsNyArMTI0OSw3
IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlkUGF1c2UoSlNDOjpKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkRlCiAgICAgICAgICAgICBhc3luY1N0YWNrVHJhY2Ug
PSBpdC0+dmFsdWUtPmJ1aWxkSW5zcGVjdG9yT2JqZWN0KCk7CiAgICAgfQogCi0gICAgbV9mcm9u
dGVuZERpc3BhdGNoZXItPnBhdXNlZChjdXJyZW50Q2FsbEZyYW1lcyhpbmplY3RlZFNjcmlwdCks
IG1fcGF1c2VSZWFzb24sIG1fcGF1c2VEYXRhLCBhc3luY1N0YWNrVHJhY2UpOworICAgIG1fZnJv
bnRlbmREaXNwYXRjaGVyLT5wYXVzZWQoY3VycmVudENhbGxGcmFtZXMoaW5qZWN0ZWRTY3JpcHQp
LCBQcm90b2NvbDo6SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUobV9wYXVzZVJlYXNvbiks
IG1fcGF1c2VEYXRhLmNvcHlSZWYoKSwgV1RGTW92ZShhc3luY1N0YWNrVHJhY2UpKTsKIAogICAg
IG1famF2YVNjcmlwdFBhdXNlU2NoZWR1bGVkID0gZmFsc2U7CiAKQEAgLTEyMzEsMTIgKzEyNzQs
MTUgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpicmVha3BvaW50QWN0aW9uUHJvYmUo
SlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2IKIHsKICAgICBJbmplY3RlZFNjcmlwdCBpbmpl
Y3RlZFNjcmlwdCA9IG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmluamVjdGVkU2NyaXB0Rm9yKGds
b2JhbE9iamVjdCk7CiAgICAgYXV0byBwYXlsb2FkID0gaW5qZWN0ZWRTY3JpcHQud3JhcE9iamVj
dChzYW1wbGUsIG9iamVjdEdyb3VwRm9yQnJlYWtwb2ludEFjdGlvbihhY3Rpb25JRCksIHRydWUp
OworICAgIGlmICghcGF5bG9hZCkKKyAgICAgICAgcmV0dXJuOworCiAgICAgYXV0byByZXN1bHQg
PSBQcm90b2NvbDo6RGVidWdnZXI6OlByb2JlU2FtcGxlOjpjcmVhdGUoKQogICAgICAgICAuc2V0
UHJvYmVJZChhY3Rpb25JRCkKICAgICAgICAgLnNldEJhdGNoSWQoYmF0Y2hJZCkKICAgICAgICAg
LnNldFNhbXBsZUlkKHNhbXBsZUlkKQogICAgICAgICAuc2V0VGltZXN0YW1wKG1faW5qZWN0ZWRT
Y3JpcHRNYW5hZ2VyLmluc3BlY3RvckVudmlyb25tZW50KCkuZXhlY3V0aW9uU3RvcHdhdGNoKCku
ZWxhcHNlZFRpbWUoKS5zZWNvbmRzKCkpCi0gICAgICAgIC5zZXRQYXlsb2FkKFdURk1vdmUocGF5
bG9hZCkpCisgICAgICAgIC5zZXRQYXlsb2FkKHBheWxvYWQucmVsZWFzZU5vbk51bGwoKSkKICAg
ICAgICAgLnJlbGVhc2UoKTsKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+ZGlkU2FtcGxlUHJv
YmUoV1RGTW92ZShyZXN1bHQpKTsKIH0KQEAgLTEyNjcsOSArMTMxMyw4IEBAIHZvaWQgSW5zcGVj
dG9yRGVidWdnZXJBZ2VudDo6YnJlYWtQcm9ncmFtKERlYnVnZ2VyRnJvbnRlbmREaXNwYXRjaGVy
OjpSZWFzb24gcmVhCiAKIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6Y2xlYXJJbnNwZWN0
b3JCcmVha3BvaW50U3RhdGUoKQogewotICAgIEVycm9yU3RyaW5nIGlnbm9yZWQ7CiAgICAgZm9y
IChhdXRvJiBwcm90b2NvbEJyZWFrcG9pbnRJRCA6IGNvcHlUb1ZlY3RvcihtX2RlYnVnZ2VyQnJl
YWtwb2ludHNGb3JQcm90b2NvbEJyZWFrcG9pbnRJRC5rZXlzKCkpKQotICAgICAgICByZW1vdmVC
cmVha3BvaW50KGlnbm9yZWQsIHByb3RvY29sQnJlYWtwb2ludElEKTsKKyAgICAgICAgcmVtb3Zl
QnJlYWtwb2ludChwcm90b2NvbEJyZWFrcG9pbnRJRCk7CiAKICAgICBtX3Byb3RvY29sQnJlYWtw
b2ludEZvclByb3RvY29sQnJlYWtwb2ludElELmNsZWFyKCk7CiAKQEAgLTEzMTcsNyArMTM2Miw3
IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlkQ2xlYXJHbG9iYWxPYmplY3QoKQog
ICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5nbG9iYWxPYmplY3RDbGVhcmVkKCk7CiB9CiAKLWJv
b2wgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6YXNzZXJ0UGF1c2VkKEVycm9yU3RyaW5nJiBlcnJv
clN0cmluZykKK2Jvb2wgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6YXNzZXJ0UGF1c2VkKFByb3Rv
Y29sOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCiB7CiAgICAgaWYgKCFtX3BhdXNlZEdsb2Jh
bE9iamVjdCkgewogICAgICAgICBlcnJvclN0cmluZyA9ICJNdXN0IGJlIHBhdXNlZCJfczsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRz
L0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuaAppbmRleCAzMGZmOWYzYzI2ZDFhZTA0NjZhNzFhNWJm
NjM2NjE4Mjk1NGZhMmQ4Li40ZmMzZjg0YTZlMjEyYjg4NWI2YTJmMzI4ZjgxZWRmNzVmOTBhNDZj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNw
ZWN0b3JEZWJ1Z2dlckFnZW50LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9hZ2VudHMvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5oCkBAIC00OCw3ICs0OCw2IEBAIG5hbWVz
cGFjZSBJbnNwZWN0b3IgewogY2xhc3MgQXN5bmNTdGFja1RyYWNlOwogY2xhc3MgSW5qZWN0ZWRT
Y3JpcHQ7CiBjbGFzcyBJbmplY3RlZFNjcmlwdE1hbmFnZXI7Ci10eXBlZGVmIFN0cmluZyBFcnJv
clN0cmluZzsKIAogY2xhc3MgSlNfRVhQT1JUX1BSSVZBVEUgSW5zcGVjdG9yRGVidWdnZXJBZ2Vu
dCA6IHB1YmxpYyBJbnNwZWN0b3JBZ2VudEJhc2UsIHB1YmxpYyBEZWJ1Z2dlckJhY2tlbmREaXNw
YXRjaGVySGFuZGxlciwgcHVibGljIEpTQzo6RGVidWdnZXI6Ok9ic2VydmVyIHsKICAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShJbnNwZWN0b3JEZWJ1Z2dlckFnZW50KTsKQEAgLTU2LDcgKzU1LDcg
QEAgY2xhc3MgSlNfRVhQT1JUX1BSSVZBVEUgSW5zcGVjdG9yRGVidWdnZXJBZ2VudCA6IHB1Ymxp
YyBJbnNwZWN0b3JBZ2VudEJhc2UsIHB1YmwKIHB1YmxpYzoKICAgICB+SW5zcGVjdG9yRGVidWdn
ZXJBZ2VudCgpIG92ZXJyaWRlOwogCi0gICAgc3RhdGljIFJlZlB0cjxKU0M6OkJyZWFrcG9pbnQ+
IGRlYnVnZ2VyQnJlYWtwb2ludEZyb21QYXlsb2FkKEVycm9yU3RyaW5nJiwgY29uc3QgSlNPTjo6
T2JqZWN0KiBvcHRpb25zUGF5bG9hZCk7CisgICAgc3RhdGljIFJlZlB0cjxKU0M6OkJyZWFrcG9p
bnQ+IGRlYnVnZ2VyQnJlYWtwb2ludEZyb21QYXlsb2FkKFByb3RvY29sOjpFcnJvclN0cmluZyYs
IFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgb3B0aW9ucyk7CiAKICAgICBzdGF0aWMgY29uc3QgY2hh
ciogY29uc3QgYmFja3RyYWNlT2JqZWN0R3JvdXA7CiAKQEAgLTY2LDMxICs2NSwzMSBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCBib29sIGVuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2VuYWJsZWQ7
IH0KIAogICAgIC8vIERlYnVnZ2VyQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyCi0gICAgdm9pZCBl
bmFibGUoRXJyb3JTdHJpbmcmKSBmaW5hbDsKLSAgICB2b2lkIGRpc2FibGUoRXJyb3JTdHJpbmcm
KSBmaW5hbDsKLSAgICB2b2lkIHNldEFzeW5jU3RhY2tUcmFjZURlcHRoKEVycm9yU3RyaW5nJiwg
aW50IGRlcHRoKSBmaW5hbDsKLSAgICB2b2lkIHNldEJyZWFrcG9pbnRzQWN0aXZlKEVycm9yU3Ry
aW5nJiwgYm9vbCBhY3RpdmUpIGZpbmFsOwotICAgIHZvaWQgc2V0QnJlYWtwb2ludEJ5VXJsKEVy
cm9yU3RyaW5nJiwgaW50IGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxVUkwsIGNv
bnN0IFN0cmluZyogb3B0aW9uYWxVUkxSZWdleCwgY29uc3QgaW50KiBvcHRpb25hbENvbHVtbk51
bWJlciwgY29uc3QgSlNPTjo6T2JqZWN0KiBvcHRpb25zLCBQcm90b2NvbDo6RGVidWdnZXI6OkJy
ZWFrcG9pbnRJZCosIFJlZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpEZWJ1Z2dlcjo6TG9j
YXRpb24+PiYgbG9jYXRpb25zKSBmaW5hbDsKLSAgICB2b2lkIHNldEJyZWFrcG9pbnQoRXJyb3JT
dHJpbmcmLCBjb25zdCBKU09OOjpPYmplY3QmIGxvY2F0aW9uLCBjb25zdCBKU09OOjpPYmplY3Qq
IG9wdGlvbnMsIFByb3RvY29sOjpEZWJ1Z2dlcjo6QnJlYWtwb2ludElkKiBvdXRCcmVha3BvaW50
SWQsIFJlZlB0cjxQcm90b2NvbDo6RGVidWdnZXI6OkxvY2F0aW9uPiYgb3V0QWN0dWFsTG9jYXRp
b24pIGZpbmFsOwotICAgIHZvaWQgcmVtb3ZlQnJlYWtwb2ludChFcnJvclN0cmluZyYsIGNvbnN0
IFN0cmluZyYgYnJlYWtwb2ludElkZW50aWZpZXIpIGZpbmFsOwotICAgIHZvaWQgY29udGludWVV
bnRpbE5leHRSdW5Mb29wKEVycm9yU3RyaW5nJikgZmluYWw7Ci0gICAgdm9pZCBjb250aW51ZVRv
TG9jYXRpb24oRXJyb3JTdHJpbmcmLCBjb25zdCBKU09OOjpPYmplY3QmIGxvY2F0aW9uKSBmaW5h
bDsKLSAgICB2b2lkIHN0ZXBOZXh0KEVycm9yU3RyaW5nJikgZmluYWw7Ci0gICAgdm9pZCBzdGVw
T3ZlcihFcnJvclN0cmluZyYpIGZpbmFsOwotICAgIHZvaWQgc3RlcEludG8oRXJyb3JTdHJpbmcm
KSBmaW5hbDsKLSAgICB2b2lkIHN0ZXBPdXQoRXJyb3JTdHJpbmcmKSBmaW5hbDsKLSAgICB2b2lk
IHBhdXNlKEVycm9yU3RyaW5nJikgZmluYWw7Ci0gICAgdm9pZCByZXN1bWUoRXJyb3JTdHJpbmcm
KSBmaW5hbDsKLSAgICB2b2lkIHNlYXJjaEluQ29udGVudChFcnJvclN0cmluZyYsIGNvbnN0IFN0
cmluZyYgc2NyaXB0SUQsIGNvbnN0IFN0cmluZyYgcXVlcnksIGNvbnN0IGJvb2wqIG9wdGlvbmFs
Q2FzZVNlbnNpdGl2ZSwgY29uc3QgYm9vbCogb3B0aW9uYWxJc1JlZ2V4LCBSZWZQdHI8SlNPTjo6
QXJyYXlPZjxQcm90b2NvbDo6R2VuZXJpY1R5cGVzOjpTZWFyY2hNYXRjaD4+JikgZmluYWw7Ci0g
ICAgdm9pZCBnZXRTY3JpcHRTb3VyY2UoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHNjcmlw
dElELCBTdHJpbmcqIHNjcmlwdFNvdXJjZSkgZmluYWw7Ci0gICAgdm9pZCBnZXRGdW5jdGlvbkRl
dGFpbHMoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGZ1bmN0aW9uSWQsIFJlZlB0cjxQcm90
b2NvbDo6RGVidWdnZXI6OkZ1bmN0aW9uRGV0YWlscz4mKSBmaW5hbDsKLSAgICB2b2lkIHNldFBh
dXNlT25EZWJ1Z2dlclN0YXRlbWVudHMoRXJyb3JTdHJpbmcmLCBib29sIGVuYWJsZWQsIGNvbnN0
IEpTT046Ok9iamVjdCogb3B0aW9ucykgZmluYWw7Ci0gICAgdm9pZCBzZXRQYXVzZU9uRXhjZXB0
aW9ucyhFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgcGF1c2VTdGF0ZSwgY29uc3QgSlNPTjo6
T2JqZWN0KiBvcHRpb25zKSBmaW5hbDsKLSAgICB2b2lkIHNldFBhdXNlT25Bc3NlcnRpb25zKEVy
cm9yU3RyaW5nJiwgYm9vbCBlbmFibGVkLCBjb25zdCBKU09OOjpPYmplY3QqIG9wdGlvbnMpIGZp
bmFsOwotICAgIHZvaWQgc2V0UGF1c2VPbk1pY3JvdGFza3MoRXJyb3JTdHJpbmcmLCBib29sIGVu
YWJsZWQsIGNvbnN0IEpTT046Ok9iamVjdCogb3B0aW9ucykgZmluYWw7Ci0gICAgdm9pZCBzZXRQ
YXVzZUZvckludGVybmFsU2NyaXB0cyhFcnJvclN0cmluZyYsIGJvb2wgc2hvdWxkUGF1c2UpIGZp
bmFsOwotICAgIHZvaWQgZXZhbHVhdGVPbkNhbGxGcmFtZShFcnJvclN0cmluZyYsIGNvbnN0IFN0
cmluZyYgY2FsbEZyYW1lSWQsIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgY29uc3QgU3RyaW5n
KiBvYmplY3RHcm91cCwgY29uc3QgYm9vbCogaW5jbHVkZUNvbW1hbmRMaW5lQVBJLCBjb25zdCBi
b29sKiBkb05vdFBhdXNlT25FeGNlcHRpb25zQW5kTXV0ZUNvbnNvbGUsIGNvbnN0IGJvb2wqIHJl
dHVybkJ5VmFsdWUsIGNvbnN0IGJvb2wqIGdlbmVyYXRlUHJldmlldywgY29uc3QgYm9vbCogc2F2
ZVJlc3VsdCwgY29uc3QgYm9vbCogZW11bGF0ZVVzZXJHZXN0dXJlLCBSZWZQdHI8UHJvdG9jb2w6
OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3VsdCwgT3B0aW9uYWw8Ym9vbD4mIHdhc1Rocm93
biwgT3B0aW9uYWw8aW50PiYgc2F2ZWRSZXN1bHRJbmRleCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBz
ZXRTaG91bGRCbGFja2JveFVSTChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgdXJsLCBib29s
IHNob3VsZEJsYWNrYm94LCBjb25zdCBib29sKiBjYXNlU2Vuc2l0aXZlLCBjb25zdCBib29sKiBp
c1JlZ2V4KSBmaW5hbDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBlbmFibGUo
KSBmaW5hbDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBkaXNhYmxlKCkgZmlu
YWw7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc2V0QXN5bmNTdGFja1RyYWNl
RGVwdGgoaW50KSBmaW5hbDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzZXRC
cmVha3BvaW50c0FjdGl2ZShib29sKSBmaW5hbDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdP
cjxzdGQ6OnR1cGxlPFByb3RvY29sOjpEZWJ1Z2dlcjo6QnJlYWtwb2ludElkLCBSZWY8SlNPTjo6
QXJyYXlPZjxQcm90b2NvbDo6RGVidWdnZXI6OkxvY2F0aW9uPj4+PiBzZXRCcmVha3BvaW50QnlV
cmwoaW50IGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIHVybFJl
Z2V4LCBPcHRpb25hbDxpbnQ+JiYgY29sdW1uTnVtYmVyLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYm
IG9wdGlvbnMpIGZpbmFsOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHN0ZDo6dHVwbGU8
UHJvdG9jb2w6OkRlYnVnZ2VyOjpCcmVha3BvaW50SWQsIFJlZjxQcm90b2NvbDo6RGVidWdnZXI6
OkxvY2F0aW9uPj4+IHNldEJyZWFrcG9pbnQoUmVmPEpTT046Ok9iamVjdD4mJiBsb2NhdGlvbiwg
UmVmUHRyPEpTT046Ok9iamVjdD4mJiBvcHRpb25zKSBmaW5hbDsKKyAgICBQcm90b2NvbDo6RXJy
b3JTdHJpbmdPcjx2b2lkPiByZW1vdmVCcmVha3BvaW50KGNvbnN0IFByb3RvY29sOjpEZWJ1Z2dl
cjo6QnJlYWtwb2ludElkJikgZmluYWw7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9p
ZD4gY29udGludWVVbnRpbE5leHRSdW5Mb29wKCkgZmluYWw7CisgICAgUHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8dm9pZD4gY29udGludWVUb0xvY2F0aW9uKFJlZjxKU09OOjpPYmplY3Q+JiYgbG9j
YXRpb24pIGZpbmFsOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHN0ZXBOZXh0
KCkgZmluYWw7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc3RlcE92ZXIoKSBm
aW5hbDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzdGVwSW50bygpIGZpbmFs
OworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHN0ZXBPdXQoKSBmaW5hbDsKKyAg
ICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBwYXVzZSgpIGZpbmFsOworICAgIFByb3Rv
Y29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHJlc3VtZSgpIGZpbmFsOworICAgIFByb3RvY29sOjpF
cnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpHZW5lcmljVHlwZXM6OlNl
YXJjaE1hdGNoPj4+IHNlYXJjaEluQ29udGVudChjb25zdCBQcm90b2NvbDo6RGVidWdnZXI6OlNj
cmlwdElkJiwgY29uc3QgU3RyaW5nJiBxdWVyeSwgT3B0aW9uYWw8Ym9vbD4mJiBjYXNlU2Vuc2l0
aXZlLCBPcHRpb25hbDxib29sPiYmIGlzUmVnZXgpIGZpbmFsOworICAgIFByb3RvY29sOjpFcnJv
clN0cmluZ09yPFN0cmluZz4gZ2V0U2NyaXB0U291cmNlKGNvbnN0IFByb3RvY29sOjpEZWJ1Z2dl
cjo6U2NyaXB0SWQmKSBmaW5hbDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8UHJv
dG9jb2w6OkRlYnVnZ2VyOjpGdW5jdGlvbkRldGFpbHM+PiBnZXRGdW5jdGlvbkRldGFpbHMoY29u
c3QgU3RyaW5nJiBmdW5jdGlvbklkKSBmaW5hbDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdP
cjx2b2lkPiBzZXRQYXVzZU9uRGVidWdnZXJTdGF0ZW1lbnRzKGJvb2wgZW5hYmxlZCwgUmVmUHRy
PEpTT046Ok9iamVjdD4mJiBvcHRpb25zKSBmaW5hbDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJp
bmdPcjx2b2lkPiBzZXRQYXVzZU9uRXhjZXB0aW9ucyhjb25zdCBTdHJpbmcmIHN0YXRlLCBSZWZQ
dHI8SlNPTjo6T2JqZWN0PiYmIG9wdGlvbnMpIGZpbmFsOworICAgIFByb3RvY29sOjpFcnJvclN0
cmluZ09yPHZvaWQ+IHNldFBhdXNlT25Bc3NlcnRpb25zKGJvb2wgZW5hYmxlZCwgUmVmUHRyPEpT
T046Ok9iamVjdD4mJiBvcHRpb25zKSBmaW5hbDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdP
cjx2b2lkPiBzZXRQYXVzZU9uTWljcm90YXNrcyhib29sIGVuYWJsZWQsIFJlZlB0cjxKU09OOjpP
YmplY3Q+JiYgb3B0aW9ucykgZmluYWw7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9p
ZD4gc2V0UGF1c2VGb3JJbnRlcm5hbFNjcmlwdHMoYm9vbCBzaG91bGRQYXVzZSkgZmluYWw7Cisg
ICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8c3RkOjp0dXBsZTxSZWY8UHJvdG9jb2w6OlJ1bnRp
bWU6OlJlbW90ZU9iamVjdD4sIE9wdGlvbmFsPGJvb2w+IC8qIHdhc1Rocm93biAqLywgT3B0aW9u
YWw8aW50PiAvKiBzYXZlZFJlc3VsdEluZGV4ICovPj4gZXZhbHVhdGVPbkNhbGxGcmFtZShjb25z
dCBQcm90b2NvbDo6RGVidWdnZXI6OkNhbGxGcmFtZUlkJiwgY29uc3QgU3RyaW5nJiBleHByZXNz
aW9uLCBjb25zdCBTdHJpbmcmIG9iamVjdEdyb3VwLCBPcHRpb25hbDxib29sPiYmIGluY2x1ZGVD
b21tYW5kTGluZUFQSSwgT3B0aW9uYWw8Ym9vbD4mJiBkb05vdFBhdXNlT25FeGNlcHRpb25zQW5k
TXV0ZUNvbnNvbGUsIE9wdGlvbmFsPGJvb2w+JiYgcmV0dXJuQnlWYWx1ZSwgT3B0aW9uYWw8Ym9v
bD4mJiBnZW5lcmF0ZVByZXZpZXcsIE9wdGlvbmFsPGJvb2w+JiYgc2F2ZVJlc3VsdCwgT3B0aW9u
YWw8Ym9vbD4mJiBlbXVsYXRlVXNlckdlc3R1cmUpIG92ZXJyaWRlOworICAgIFByb3RvY29sOjpF
cnJvclN0cmluZ09yPHZvaWQ+IHNldFNob3VsZEJsYWNrYm94VVJMKGNvbnN0IFN0cmluZyYgdXJs
LCBib29sIHNob3VsZEJsYWNrYm94LCBPcHRpb25hbDxib29sPiYmIGNhc2VTZW5zaXRpdmUsIE9w
dGlvbmFsPGJvb2w+JiYgaXNSZWdleCkgZmluYWw7CiAKICAgICAvLyBKU0M6OkRlYnVnZ2VyOjpP
YnNlcnZlcgogICAgIHZvaWQgZGlkUGFyc2VTb3VyY2UoSlNDOjpTb3VyY2VJRCwgY29uc3QgSlND
OjpEZWJ1Z2dlcjo6U2NyaXB0JikgZmluYWw7CkBAIC0xNDIsMTEgKzE0MSwxMSBAQCBwdWJsaWM6
CiAKIHByb3RlY3RlZDoKICAgICBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50KEFnZW50Q29udGV4dCYp
OwotICAgIHZpcnR1YWwgdm9pZCBlbmFibGUoKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlzYWJsZShi
b29sIGlzQmVpbmdEZXN0cm95ZWQpOworICAgIHZpcnR1YWwgdm9pZCBpbnRlcm5hbEVuYWJsZSgp
OworICAgIHZpcnR1YWwgdm9pZCBpbnRlcm5hbERpc2FibGUoYm9vbCBpc0JlaW5nRGVzdHJveWVk
KTsKIAogICAgIEluamVjdGVkU2NyaXB0TWFuYWdlciYgaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKCkg
Y29uc3QgeyByZXR1cm4gbV9pbmplY3RlZFNjcmlwdE1hbmFnZXI7IH0KLSAgICB2aXJ0dWFsIElu
amVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0Rm9yRXZhbChFcnJvclN0cmluZyYsIGNvbnN0IGlu
dCogZXhlY3V0aW9uQ29udGV4dElkKSA9IDA7CisgICAgdmlydHVhbCBJbmplY3RlZFNjcmlwdCBp
bmplY3RlZFNjcmlwdEZvckV2YWwoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiwgT3B0aW9uYWw8UHJv
dG9jb2w6OlJ1bnRpbWU6OkV4ZWN1dGlvbkNvbnRleHRJZD4mJikgPSAwOwogCiAgICAgSlNDOjpE
ZWJ1Z2dlciYgZGVidWdnZXIoKSB7IHJldHVybiBtX2RlYnVnZ2VyOyB9CiAKQEAgLTE2Niw4ICsx
NjUsOCBAQCBwcml2YXRlOgogICAgIGNsYXNzIFByb3RvY29sQnJlYWtwb2ludCB7CiAgICAgICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIE9w
dGlvbmFsPFByb3RvY29sQnJlYWtwb2ludD4gZnJvbVBheWxvYWQoRXJyb3JTdHJpbmcmLCBKU0M6
OlNvdXJjZUlELCB1bnNpZ25lZCBsaW5lTnVtYmVyLCB1bnNpZ25lZCBjb2x1bW5OdW1iZXIsIGNv
bnN0IEpTT046Ok9iamVjdCogb3B0aW9uc1BheWxvYWQgPSBudWxscHRyKTsKLSAgICAgICAgc3Rh
dGljIE9wdGlvbmFsPFByb3RvY29sQnJlYWtwb2ludD4gZnJvbVBheWxvYWQoRXJyb3JTdHJpbmcm
LCBjb25zdCBTdHJpbmcmIHVybCwgYm9vbCBpc1JlZ2V4LCB1bnNpZ25lZCBsaW5lTnVtYmVyLCB1
bnNpZ25lZCBjb2x1bW5OdW1iZXIsIGNvbnN0IEpTT046Ok9iamVjdCogb3B0aW9uc1BheWxvYWQg
PSBudWxscHRyKTsKKyAgICAgICAgc3RhdGljIE9wdGlvbmFsPFByb3RvY29sQnJlYWtwb2ludD4g
ZnJvbVBheWxvYWQoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiwgSlNDOjpTb3VyY2VJRCwgdW5zaWdu
ZWQgbGluZU51bWJlciwgdW5zaWduZWQgY29sdW1uTnVtYmVyLCBSZWZQdHI8SlNPTjo6T2JqZWN0
PiYmIG9wdGlvbnMgPSBudWxscHRyKTsKKyAgICAgICAgc3RhdGljIE9wdGlvbmFsPFByb3RvY29s
QnJlYWtwb2ludD4gZnJvbVBheWxvYWQoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiwgY29uc3QgU3Ry
aW5nJiB1cmwsIGJvb2wgaXNSZWdleCwgdW5zaWduZWQgbGluZU51bWJlciwgdW5zaWduZWQgY29s
dW1uTnVtYmVyLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIG9wdGlvbnMgPSBudWxscHRyKTsKIAog
ICAgICAgICBQcm90b2NvbEJyZWFrcG9pbnQoKTsKICAgICAgICAgUHJvdG9jb2xCcmVha3BvaW50
KEpTQzo6U291cmNlSUQsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIHVuc2lnbmVkIGNvbHVtbk51bWJl
ciwgY29uc3QgU3RyaW5nJiBjb25kaXRpb24gPSBudWxsU3RyaW5nKCksIEpTQzo6QnJlYWtwb2lu
dDo6QWN0aW9uc1ZlY3RvciYmIGFjdGlvbnMgPSB7IH0sIGJvb2wgYXV0b0NvbnRpbnVlID0gZmFs
c2UsIHNpemVfdCBpZ25vcmVDb3VudCA9IDApOwpAQCAtMTc1LDEyICsxNzQsMTIgQEAgcHJpdmF0
ZToKIAogICAgICAgICBSZWY8SlNDOjpCcmVha3BvaW50PiBjcmVhdGVEZWJ1Z2dlckJyZWFrcG9p
bnQoSlNDOjpCcmVha3BvaW50SUQsIEpTQzo6U291cmNlSUQpIGNvbnN0OwogCi0gICAgICAgIGNv
bnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpCcmVha3BvaW50SWQmIGlkKCkgY29u
c3QgeyByZXR1cm4gbV9pZDsgfQorICAgICAgICBjb25zdCBQcm90b2NvbDo6RGVidWdnZXI6OkJy
ZWFrcG9pbnRJZCYgaWQoKSBjb25zdCB7IHJldHVybiBtX2lkOyB9CiAKICAgICAgICAgYm9vbCBt
YXRjaGVzU2NyaXB0VVJMKGNvbnN0IFN0cmluZyYpIGNvbnN0OwogCiAgICAgcHJpdmF0ZToKLSAg
ICAgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OkJyZWFrcG9pbnRJZCBtX2lkOwor
ICAgICAgICBQcm90b2NvbDo6RGVidWdnZXI6OkJyZWFrcG9pbnRJZCBtX2lkOwogCiAjaWYgQVNT
RVJUX0VOQUJMRUQKICAgICAgICAgSlNDOjpTb3VyY2VJRCBtX3NvdXJjZUlEIHsgSlNDOjpub1Nv
dXJjZUlEIH07CkBAIC0yMDIsNyArMjAxLDcgQEAgcHJpdmF0ZToKICAgICBib29sIHNldEJyZWFr
cG9pbnQoSlNDOjpCcmVha3BvaW50Jik7CiAgICAgdm9pZCBkaWRTZXRCcmVha3BvaW50KFByb3Rv
Y29sQnJlYWtwb2ludCYsIEpTQzo6QnJlYWtwb2ludCYpOwogCi0gICAgYm9vbCBhc3NlcnRQYXVz
ZWQoRXJyb3JTdHJpbmcmKTsKKyAgICBib29sIGFzc2VydFBhdXNlZChQcm90b2NvbDo6RXJyb3JT
dHJpbmcmKTsKICAgICB2b2lkIGNsZWFyRGVidWdnZXJCcmVha3BvaW50U3RhdGUoKTsKICAgICB2
b2lkIGNsZWFySW5zcGVjdG9yQnJlYWtwb2ludFN0YXRlKCk7CiAgICAgdm9pZCBjbGVhclBhdXNl
RGV0YWlscygpOwpAQCAtMjQ4LDggKzI0Nyw4IEBAIHByaXZhdGU6CiAgICAgSlNDOjpKU0dsb2Jh
bE9iamVjdCogbV9wYXVzZWRHbG9iYWxPYmplY3QgeyBudWxscHRyIH07CiAgICAgSlNDOjpTdHJv
bmc8SlNDOjpVbmtub3duPiBtX2N1cnJlbnRDYWxsU3RhY2s7CiAKLSAgICBIYXNoTWFwPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpCcmVha3BvaW50SWQsIFByb3RvY29sQnJlYWtwb2lu
dD4gbV9wcm90b2NvbEJyZWFrcG9pbnRGb3JQcm90b2NvbEJyZWFrcG9pbnRJRDsKLSAgICBIYXNo
TWFwPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpCcmVha3BvaW50SWQsIEpTQzo6QnJl
YWtwb2ludHNWZWN0b3I+IG1fZGVidWdnZXJCcmVha3BvaW50c0ZvclByb3RvY29sQnJlYWtwb2lu
dElEOworICAgIEhhc2hNYXA8UHJvdG9jb2w6OkRlYnVnZ2VyOjpCcmVha3BvaW50SWQsIFByb3Rv
Y29sQnJlYWtwb2ludD4gbV9wcm90b2NvbEJyZWFrcG9pbnRGb3JQcm90b2NvbEJyZWFrcG9pbnRJ
RDsKKyAgICBIYXNoTWFwPFByb3RvY29sOjpEZWJ1Z2dlcjo6QnJlYWtwb2ludElkLCBKU0M6OkJy
ZWFrcG9pbnRzVmVjdG9yPiBtX2RlYnVnZ2VyQnJlYWtwb2ludHNGb3JQcm90b2NvbEJyZWFrcG9p
bnRJRDsKICAgICBKU0M6OkJyZWFrcG9pbnRJRCBtX25leHREZWJ1Z2dlckJyZWFrcG9pbnRJRCB7
IEpTQzo6bm9CcmVha3BvaW50SUQgKyAxIH07CiAKICAgICBSZWZQdHI8SlNDOjpCcmVha3BvaW50
PiBtX2NvbnRpbnVlVG9Mb2NhdGlvbkRlYnVnZ2VyQnJlYWtwb2ludDsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckhlYXBBZ2VudC5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JIZWFw
QWdlbnQuY3BwCmluZGV4IDhjNjIxYWQ0MWM0ZGE1MDA0M2QzMDIyMDBhNDZmYWU5ZWZjOTcxOGMu
Ljg1Y2VkOWYzZGY2MjIzMDFiOTVlMzNlNDkzNWNiYmYxNjJiN2UzMzAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckhlYXBBZ2VudC5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9y
SGVhcEFnZW50LmNwcApAQCAtNTYsMjggKzU2LDI1IEBAIHZvaWQgSW5zcGVjdG9ySGVhcEFnZW50
OjpkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoRnJvbnRlbmRSb3V0ZXIqLCBCYWNrZW5kRGlz
CiAKIHZvaWQgSW5zcGVjdG9ySGVhcEFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2Vu
ZChEaXNjb25uZWN0UmVhc29uKQogewotICAgIEVycm9yU3RyaW5nIGlnbm9yZWQ7Ci0gICAgZGlz
YWJsZShpZ25vcmVkKTsKKyAgICBkaXNhYmxlKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9ySGVhcEFn
ZW50OjplbmFibGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nKQorUHJvdG9jb2w6OkVycm9yU3Ry
aW5nT3I8dm9pZD4gSW5zcGVjdG9ySGVhcEFnZW50OjplbmFibGUoKQogewotICAgIGlmIChtX2Vu
YWJsZWQpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiSGVhcCBkb21haW4gYWxyZWFkeSBlbmFi
bGVkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmIChtX2VuYWJsZWQpCisgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiSGVhcCBkb21haW4gYWxyZWFkeSBlbmFibGVkIl9z
KTsKIAogICAgIG1fZW5hYmxlZCA9IHRydWU7CiAKICAgICBtX2Vudmlyb25tZW50LnZtKCkuaGVh
cC5hZGRPYnNlcnZlcih0aGlzKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVj
dG9ySGVhcEFnZW50OjpkaXNhYmxlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZykKK1Byb3RvY29s
OjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckhlYXBBZ2VudDo6ZGlzYWJsZSgpCiB7Ci0g
ICAgaWYgKCFtX2VuYWJsZWQpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiSGVhcCBkb21haW4g
YWxyZWFkeSBkaXNhYmxlZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoIW1f
ZW5hYmxlZCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJIZWFwIGRvbWFpbiBhbHJl
YWR5IGRpc2FibGVkIl9zKTsKIAogICAgIG1fZW5hYmxlZCA9IGZhbHNlOwogICAgIG1fdHJhY2tp
bmcgPSBmYWxzZTsKQEAgLTg1LDE3ICs4MiwyMSBAQCB2b2lkIEluc3BlY3RvckhlYXBBZ2VudDo6
ZGlzYWJsZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCiAgICAgbV9lbnZpcm9ubWVudC52bSgp
LmhlYXAucmVtb3ZlT2JzZXJ2ZXIodGhpcyk7CiAKICAgICBjbGVhckhlYXBTbmFwc2hvdHMoKTsK
KworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9ySGVhcEFnZW50OjpnYyhFcnJv
clN0cmluZyYpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JIZWFwQWdl
bnQ6OmdjKCkKIHsKICAgICBWTSYgdm0gPSBtX2Vudmlyb25tZW50LnZtKCk7CiAgICAgSlNMb2Nr
SG9sZGVyIGxvY2sodm0pOwogICAgIHNhbml0aXplU3RhY2tGb3JWTSh2bSk7CiAgICAgdm0uaGVh
cC5jb2xsZWN0Tm93KFN5bmMsIENvbGxlY3Rpb25TY29wZTo6RnVsbCk7CisKKyAgICByZXR1cm4g
eyB9OwogfQogCi12b2lkIEluc3BlY3RvckhlYXBBZ2VudDo6c25hcHNob3QoRXJyb3JTdHJpbmcm
LCBkb3VibGUqIHRpbWVzdGFtcCwgU3RyaW5nKiBzbmFwc2hvdERhdGEpCitQcm90b2NvbDo6RXJy
b3JTdHJpbmdPcjxzdGQ6OnR1cGxlPGRvdWJsZSwgUHJvdG9jb2w6OkhlYXA6OkhlYXBTbmFwc2hv
dERhdGE+PiBJbnNwZWN0b3JIZWFwQWdlbnQ6OnNuYXBzaG90KCkKIHsKICAgICBWTSYgdm0gPSBt
X2Vudmlyb25tZW50LnZtKCk7CiAgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOwpAQCAtMTAzLDgg
KzEwNCw4IEBAIHZvaWQgSW5zcGVjdG9ySGVhcEFnZW50OjpzbmFwc2hvdChFcnJvclN0cmluZyYs
IGRvdWJsZSogdGltZXN0YW1wLCBTdHJpbmcqIHNuYXBzCiAgICAgSGVhcFNuYXBzaG90QnVpbGRl
ciBzbmFwc2hvdEJ1aWxkZXIodm0uZW5zdXJlSGVhcFByb2ZpbGVyKCkpOwogICAgIHNuYXBzaG90
QnVpbGRlci5idWlsZFNuYXBzaG90KCk7CiAKLSAgICAqdGltZXN0YW1wID0gbV9lbnZpcm9ubWVu
dC5leGVjdXRpb25TdG9wd2F0Y2goKS5lbGFwc2VkVGltZSgpLnNlY29uZHMoKTsKLSAgICAqc25h
cHNob3REYXRhID0gc25hcHNob3RCdWlsZGVyLmpzb24oWyZdIChjb25zdCBIZWFwU25hcHNob3RO
b2RlJiBub2RlKSB7CisgICAgYXV0byB0aW1lc3RhbXAgPSBtX2Vudmlyb25tZW50LmV4ZWN1dGlv
blN0b3B3YXRjaCgpLmVsYXBzZWRUaW1lKCkuc2Vjb25kcygpOworICAgIGF1dG8gc25hcHNob3RE
YXRhID0gc25hcHNob3RCdWlsZGVyLmpzb24oWyZdIChjb25zdCBIZWFwU25hcHNob3ROb2RlJiBu
b2RlKSB7CiAgICAgICAgIGlmIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG5vZGUuY2VsbC0+c3Ry
dWN0dXJlKHZtKSkgewogICAgICAgICAgICAgaWYgKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QgPSBzdHJ1Y3R1cmUtPmdsb2JhbE9iamVjdCgpKSB7CiAgICAgICAgICAgICAgICAgaWYgKCFt
X2Vudmlyb25tZW50LmNhbkFjY2Vzc0luc3BlY3RlZFNjcmlwdFN0YXRlKGdsb2JhbE9iamVjdCkp
CkBAIC0xMTMsMzcgKzExNCw0NSBAQCB2b2lkIEluc3BlY3RvckhlYXBBZ2VudDo6c25hcHNob3Qo
RXJyb3JTdHJpbmcmLCBkb3VibGUqIHRpbWVzdGFtcCwgU3RyaW5nKiBzbmFwcwogICAgICAgICB9
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0pOworCisgICAgcmV0dXJuIHsgeyB0aW1lc3Rh
bXAsIHNuYXBzaG90RGF0YSB9IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9ySGVhcEFnZW50OjpzdGFy
dFRyYWNraW5nKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZykKK1Byb3RvY29sOjpFcnJvclN0cmlu
Z09yPHZvaWQ+IEluc3BlY3RvckhlYXBBZ2VudDo6c3RhcnRUcmFja2luZygpCiB7CiAgICAgaWYg
KG1fdHJhY2tpbmcpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAogICAg
IG1fdHJhY2tpbmcgPSB0cnVlOwogCi0gICAgZG91YmxlIHRpbWVzdGFtcDsKLSAgICBTdHJpbmcg
c25hcHNob3REYXRhOwotICAgIHNuYXBzaG90KGVycm9yU3RyaW5nLCAmdGltZXN0YW1wLCAmc25h
cHNob3REYXRhKTsKKyAgICBhdXRvIHJlc3VsdCA9IHNuYXBzaG90KCk7CisgICAgaWYgKCFyZXN1
bHQpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChXVEZNb3ZlKHJlc3VsdC5lcnJvcigp
KSk7CiAKKyAgICBhdXRvIFt0aW1lc3RhbXAsIHNuYXBzaG90RGF0YV0gPSBXVEZNb3ZlKHJlc3Vs
dC52YWx1ZSgpKTsKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+dHJhY2tpbmdTdGFydCh0aW1l
c3RhbXAsIHNuYXBzaG90RGF0YSk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3Bl
Y3RvckhlYXBBZ2VudDo6c3RvcFRyYWNraW5nKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZykKK1By
b3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckhlYXBBZ2VudDo6c3RvcFRyYWNr
aW5nKCkKIHsKICAgICBpZiAoIW1fdHJhY2tpbmcpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAg
cmV0dXJuIHsgfTsKIAogICAgIG1fdHJhY2tpbmcgPSBmYWxzZTsKIAotICAgIGRvdWJsZSB0aW1l
c3RhbXA7Ci0gICAgU3RyaW5nIHNuYXBzaG90RGF0YTsKLSAgICBzbmFwc2hvdChlcnJvclN0cmlu
ZywgJnRpbWVzdGFtcCwgJnNuYXBzaG90RGF0YSk7CisgICAgYXV0byByZXN1bHQgPSBzbmFwc2hv
dCgpOworICAgIGlmICghcmVzdWx0KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoV1RG
TW92ZShyZXN1bHQuZXJyb3IoKSkpOwogCisgICAgYXV0byBbdGltZXN0YW1wLCBzbmFwc2hvdERh
dGFdID0gV1RGTW92ZShyZXN1bHQudmFsdWUoKSk7CiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXIt
PnRyYWNraW5nQ29tcGxldGUodGltZXN0YW1wLCBzbmFwc2hvdERhdGEpOworCisgICAgcmV0dXJu
IHsgfTsKIH0KIAotT3B0aW9uYWw8SGVhcFNuYXBzaG90Tm9kZT4gSW5zcGVjdG9ySGVhcEFnZW50
Ojpub2RlRm9ySGVhcE9iamVjdElkZW50aWZpZXIoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCB1
bnNpZ25lZCBoZWFwT2JqZWN0SWRlbnRpZmllcikKK09wdGlvbmFsPEhlYXBTbmFwc2hvdE5vZGU+
IEluc3BlY3RvckhlYXBBZ2VudDo6bm9kZUZvckhlYXBPYmplY3RJZGVudGlmaWVyKFByb3RvY29s
OjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIHVuc2lnbmVkIGhlYXBPYmplY3RJZGVudGlmaWVy
KQogewogICAgIEhlYXBQcm9maWxlciogaGVhcFByb2ZpbGVyID0gbV9lbnZpcm9ubWVudC52bSgp
LmhlYXBQcm9maWxlcigpOwogICAgIGlmICghaGVhcFByb2ZpbGVyKSB7CkBAIC0xNjYsOCArMTc1
LDEwIEBAIE9wdGlvbmFsPEhlYXBTbmFwc2hvdE5vZGU+IEluc3BlY3RvckhlYXBBZ2VudDo6bm9k
ZUZvckhlYXBPYmplY3RJZGVudGlmaWVyKEVycm9yCiAgICAgcmV0dXJuIG9wdGlvbmFsTm9kZTsK
IH0KIAotdm9pZCBJbnNwZWN0b3JIZWFwQWdlbnQ6OmdldFByZXZpZXcoRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBpbnQgaGVhcE9iamVjdElkLCBPcHRpb25hbDxTdHJpbmc+JiByZXN1bHRTdHJp
bmcsIFJlZlB0cjxQcm90b2NvbDo6RGVidWdnZXI6OkZ1bmN0aW9uRGV0YWlscz4mIGZ1bmN0aW9u
RGV0YWlscywgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpPYmplY3RQcmV2aWV3PiYgb2JqZWN0
UHJldmlldykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHN0ZDo6dHVwbGU8U3RyaW5nLCBSZWZQ
dHI8UHJvdG9jb2w6OkRlYnVnZ2VyOjpGdW5jdGlvbkRldGFpbHM+LCBSZWZQdHI8UHJvdG9jb2w6
OlJ1bnRpbWU6Ok9iamVjdFByZXZpZXc+Pj4gSW5zcGVjdG9ySGVhcEFnZW50OjpnZXRQcmV2aWV3
KGludCBoZWFwT2JqZWN0SWQpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3Ry
aW5nOworCiAgICAgLy8gUHJldmVudCB0aGUgY2VsbCBmcm9tIGdldHRpbmcgY29sbGVjdGVkIGFz
IHdlIGxvb2sgaXQgdXAuCiAgICAgVk0mIHZtID0gbV9lbnZpcm9ubWVudC52bSgpOwogICAgIEpT
TG9ja0hvbGRlciBsb2NrKHZtKTsKQEAgLTE3Niw1MyArMTg3LDQ4IEBAIHZvaWQgSW5zcGVjdG9y
SGVhcEFnZW50OjpnZXRQcmV2aWV3KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IGhlYXBP
YmplY3RJZCwKICAgICB1bnNpZ25lZCBoZWFwT2JqZWN0SWRlbnRpZmllciA9IHN0YXRpY19jYXN0
PHVuc2lnbmVkPihoZWFwT2JqZWN0SWQpOwogICAgIGNvbnN0IE9wdGlvbmFsPEhlYXBTbmFwc2hv
dE5vZGU+IG9wdGlvbmFsTm9kZSA9IG5vZGVGb3JIZWFwT2JqZWN0SWRlbnRpZmllcihlcnJvclN0
cmluZywgaGVhcE9iamVjdElkZW50aWZpZXIpOwogICAgIGlmICghb3B0aW9uYWxOb2RlKQotICAg
ICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7
CiAKICAgICAvLyBTdHJpbmcgcHJldmlldy4KICAgICBKU0NlbGwqIGNlbGwgPSBvcHRpb25hbE5v
ZGUtPmNlbGw7Ci0gICAgaWYgKGNlbGwtPmlzU3RyaW5nKCkpIHsKLSAgICAgICAgcmVzdWx0U3Ry
aW5nID0gYXNTdHJpbmcoY2VsbCktPnRyeUdldFZhbHVlKCk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9CisgICAgaWYgKGNlbGwtPmlzU3RyaW5nKCkpCisgICAgICAgIHJldHVybiB7IHsgYXNTdHJp
bmcoY2VsbCktPnRyeUdldFZhbHVlKCksIG51bGxwdHIsIG51bGxwdHIgfSB9OwogCiAgICAgLy8g
QmlnSW50IHByZXZpZXcuCi0gICAgaWYgKGNlbGwtPmlzSGVhcEJpZ0ludCgpKSB7Ci0gICAgICAg
IHJlc3VsdFN0cmluZyA9IEpTQmlnSW50Ojp0cnlHZXRTdHJpbmcodm0sIGFzSGVhcEJpZ0ludChj
ZWxsKSwgMTApOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmIChjZWxsLT5pc0hlYXBC
aWdJbnQoKSkKKyAgICAgICAgcmV0dXJuIHsgeyBKU0JpZ0ludDo6dHJ5R2V0U3RyaW5nKHZtLCBh
c0hlYXBCaWdJbnQoY2VsbCksIDEwKSwgbnVsbHB0ciwgbnVsbHB0ciB9IH07CiAKICAgICAvLyBG
SVhNRTogUHJvdmlkZSBwcmV2aWV3IGluZm9ybWF0aW9uIGZvciBJbnRlcm5hbCBPYmplY3RzPyBD
b2RlQmxvY2ssIEV4ZWN1dGFibGUsIGV0Yy4KIAogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0g
Y2VsbC0+c3RydWN0dXJlKHZtKTsKLSAgICBpZiAoIXN0cnVjdHVyZSkgewotICAgICAgICBlcnJv
clN0cmluZyA9ICJVbmFibGUgdG8gZ2V0IG9iamVjdCBkZXRhaWxzIC0gU3RydWN0dXJlIl9zOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghc3RydWN0dXJlKQorICAgICAgICByZXR1
cm4gbWFrZVVuZXhwZWN0ZWQoIlVuYWJsZSB0byBnZXQgb2JqZWN0IGRldGFpbHMgLSBTdHJ1Y3R1
cmUiX3MpOwogCiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHN0cnVjdHVyZS0+
Z2xvYmFsT2JqZWN0KCk7Ci0gICAgaWYgKCFnbG9iYWxPYmplY3QpIHsKLSAgICAgICAgZXJyb3JT
dHJpbmcgPSAiVW5hYmxlIHRvIGdldCBvYmplY3QgZGV0YWlscyAtIEdsb2JhbE9iamVjdCJfczsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoIWdsb2JhbE9iamVjdCkKKyAgICAgICAg
cmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJVbmFibGUgdG8gZ2V0IG9iamVjdCBkZXRhaWxzIC0gR2xv
YmFsT2JqZWN0Il9zKTsKIAogICAgIEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0ID0gbV9p
bmplY3RlZFNjcmlwdE1hbmFnZXIuaW5qZWN0ZWRTY3JpcHRGb3IoZ2xvYmFsT2JqZWN0KTsKLSAg
ICBpZiAoaW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKSB7Ci0gICAgICAgIGVycm9yU3RyaW5n
ID0gIlVuYWJsZSB0byBnZXQgb2JqZWN0IGRldGFpbHMgLSBJbmplY3RlZFNjcmlwdCJfczsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoaW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgp
KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIlVuYWJsZSB0byBnZXQgb2JqZWN0IGRl
dGFpbHMgLSBJbmplY3RlZFNjcmlwdCJfcyk7CiAKICAgICAvLyBGdW5jdGlvbiBwcmV2aWV3Lgog
ICAgIGlmIChjZWxsLT5pbmhlcml0czxKU0Z1bmN0aW9uPih2bSkpIHsKKyAgICAgICAgUmVmUHRy
PFByb3RvY29sOjpEZWJ1Z2dlcjo6RnVuY3Rpb25EZXRhaWxzPiBmdW5jdGlvbkRldGFpbHM7CiAg
ICAgICAgIGluamVjdGVkU2NyaXB0LmZ1bmN0aW9uRGV0YWlscyhlcnJvclN0cmluZywgY2VsbCwg
ZnVuY3Rpb25EZXRhaWxzKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAoIWZ1bmN0aW9u
RGV0YWlscykKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7
CisgICAgICAgIHJldHVybiB7IHsgbnVsbFN0cmluZygpLCBmdW5jdGlvbkRldGFpbHMsIG51bGxw
dHIgfSB9OwogICAgIH0KIAogICAgIC8vIE9iamVjdCBwcmV2aWV3LgotICAgIG9iamVjdFByZXZp
ZXcgPSBpbmplY3RlZFNjcmlwdC5wcmV2aWV3VmFsdWUoY2VsbCk7CisgICAgcmV0dXJuIHsgeyBu
dWxsU3RyaW5nKCksIG51bGxwdHIsIGluamVjdGVkU2NyaXB0LnByZXZpZXdWYWx1ZShjZWxsKSB9
IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9ySGVhcEFnZW50OjpnZXRSZW1vdGVPYmplY3QoRXJyb3JT
dHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgaGVhcE9iamVjdElkLCBjb25zdCBTdHJpbmcqIG9wdGlv
bmFsT2JqZWN0R3JvdXAsIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYg
cmVzdWx0KQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPFByb3RvY29sOjpSdW50aW1lOjpS
ZW1vdGVPYmplY3Q+PiBJbnNwZWN0b3JIZWFwQWdlbnQ6OmdldFJlbW90ZU9iamVjdChpbnQgaGVh
cE9iamVjdElkLCBjb25zdCBTdHJpbmcmIG9iamVjdEdyb3VwKQogeworICAgIFByb3RvY29sOjpF
cnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIC8vIFByZXZlbnQgdGhlIGNlbGwgZnJvbSBn
ZXR0aW5nIGNvbGxlY3RlZCBhcyB3ZSBsb29rIGl0IHVwLgogICAgIFZNJiB2bSA9IG1fZW52aXJv
bm1lbnQudm0oKTsKICAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CkBAIC0yMzEsMjkgKzIzNywy
NiBAQCB2b2lkIEluc3BlY3RvckhlYXBBZ2VudDo6Z2V0UmVtb3RlT2JqZWN0KEVycm9yU3RyaW5n
JiBlcnJvclN0cmluZywgaW50IGhlYXBPYmplYwogICAgIHVuc2lnbmVkIGhlYXBPYmplY3RJZGVu
dGlmaWVyID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGhlYXBPYmplY3RJZCk7CiAgICAgY29uc3Qg
T3B0aW9uYWw8SGVhcFNuYXBzaG90Tm9kZT4gb3B0aW9uYWxOb2RlID0gbm9kZUZvckhlYXBPYmpl
Y3RJZGVudGlmaWVyKGVycm9yU3RyaW5nLCBoZWFwT2JqZWN0SWRlbnRpZmllcik7CiAgICAgaWYg
KCFvcHRpb25hbE5vZGUpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4
cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgIEpTQ2VsbCogY2VsbCA9IG9wdGlvbmFsTm9kZS0+
Y2VsbDsKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGNlbGwtPnN0cnVjdHVyZSh2bSk7Ci0g
ICAgaWYgKCFzdHJ1Y3R1cmUpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiVW5hYmxlIHRvIGdl
dCBvYmplY3QgZGV0YWlscyAtIFN0cnVjdHVyZSJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
KyAgICBpZiAoIXN0cnVjdHVyZSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJVbmFi
bGUgdG8gZ2V0IG9iamVjdCBkZXRhaWxzIC0gU3RydWN0dXJlIl9zKTsKIAogICAgIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QgPSBzdHJ1Y3R1cmUtPmdsb2JhbE9iamVjdCgpOwotICAgIGlm
ICghZ2xvYmFsT2JqZWN0KSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIlVuYWJsZSB0byBnZXQg
b2JqZWN0IGRldGFpbHMgLSBHbG9iYWxPYmplY3QiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
CisgICAgaWYgKCFnbG9iYWxPYmplY3QpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgi
VW5hYmxlIHRvIGdldCBvYmplY3QgZGV0YWlscyAtIEdsb2JhbE9iamVjdCJfcyk7CiAKICAgICBJ
bmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdCA9IG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmlu
amVjdGVkU2NyaXB0Rm9yKGdsb2JhbE9iamVjdCk7Ci0gICAgaWYgKGluamVjdGVkU2NyaXB0Lmhh
c05vVmFsdWUoKSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJVbmFibGUgdG8gZ2V0IG9iamVj
dCBkZXRhaWxzIC0gSW5qZWN0ZWRTY3JpcHQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Cisg
ICAgaWYgKGluamVjdGVkU2NyaXB0Lmhhc05vVmFsdWUoKSkKKyAgICAgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKCJVbmFibGUgdG8gZ2V0IG9iamVjdCBkZXRhaWxzIC0gSW5qZWN0ZWRTY3JpcHQi
X3MpOwogCi0gICAgU3RyaW5nIG9iamVjdEdyb3VwID0gb3B0aW9uYWxPYmplY3RHcm91cCA/ICpv
cHRpb25hbE9iamVjdEdyb3VwIDogU3RyaW5nKCk7Ci0gICAgcmVzdWx0ID0gaW5qZWN0ZWRTY3Jp
cHQud3JhcE9iamVjdChjZWxsLCBvYmplY3RHcm91cCwgdHJ1ZSk7CisgICAgYXV0byBvYmplY3Qg
PSBpbmplY3RlZFNjcmlwdC53cmFwT2JqZWN0KGNlbGwsIG9iamVjdEdyb3VwLCB0cnVlKTsKKyAg
ICBpZiAoIW9iamVjdCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJJbnRlcm5hbCBl
cnJvcjogdW5hYmxlIHRvIGNhc3QgT2JqZWN0Iik7CisKKyAgICByZXR1cm4gb2JqZWN0LnJlbGVh
c2VOb25OdWxsKCk7CiB9CiAKIHN0YXRpYyBQcm90b2NvbDo6SGVhcDo6R2FyYmFnZUNvbGxlY3Rp
b246OlR5cGUgcHJvdG9jb2xUeXBlRm9ySGVhcE9wZXJhdGlvbihDb2xsZWN0aW9uU2NvcGUgc2Nv
cGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9J
bnNwZWN0b3JIZWFwQWdlbnQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdl
bnRzL0luc3BlY3RvckhlYXBBZ2VudC5oCmluZGV4IGRlZjZhY2RlOTQ2MGU3MTI4MDA0MWRhYTY1
ZmNjZDY4NWUwZjdjMGYuLmNhYTUxMmQwYWIyZTEwYTg4ZTBlZTYwYzJlMzJkNzQzOTQyMjI3YWQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3Bl
Y3RvckhlYXBBZ2VudC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdl
bnRzL0luc3BlY3RvckhlYXBBZ2VudC5oCkBAIC00MCw3ICs0MCw2IEBAIHN0cnVjdCBIZWFwU25h
cHNob3ROb2RlOwogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKIGNsYXNzIEluamVjdGVkU2NyaXB0
TWFuYWdlcjsKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwogCiBjbGFzcyBKU19FWFBPUlRf
UFJJVkFURSBJbnNwZWN0b3JIZWFwQWdlbnQgOiBwdWJsaWMgSW5zcGVjdG9yQWdlbnRCYXNlLCBw
dWJsaWMgSGVhcEJhY2tlbmREaXNwYXRjaGVySGFuZGxlciwgcHVibGljIEpTQzo6SGVhcE9ic2Vy
dmVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbnNwZWN0b3JIZWFwQWdlbnQpOwpAQCAt
NTQsMTQgKzUzLDE0IEBAIHB1YmxpYzoKICAgICB2b2lkIHdpbGxEZXN0cm95RnJvbnRlbmRBbmRC
YWNrZW5kKERpc2Nvbm5lY3RSZWFzb24pIGZpbmFsOwogCiAgICAgLy8gSGVhcEJhY2tlbmREaXNw
YXRjaGVySGFuZGxlcgotICAgIHZvaWQgZW5hYmxlKEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCBkaXNhYmxlKEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBnYyhFcnJv
clN0cmluZyYpIGZpbmFsOwotICAgIHZvaWQgc25hcHNob3QoRXJyb3JTdHJpbmcmLCBkb3VibGUq
IHRpbWVzdGFtcCwgU3RyaW5nKiBzbmFwc2hvdERhdGEpIGZpbmFsOwotICAgIHZvaWQgc3RhcnRU
cmFja2luZyhFcnJvclN0cmluZyYpIGZpbmFsOwotICAgIHZvaWQgc3RvcFRyYWNraW5nKEVycm9y
U3RyaW5nJikgZmluYWw7Ci0gICAgdm9pZCBnZXRQcmV2aWV3KEVycm9yU3RyaW5nJiwgaW50IGhl
YXBPYmplY3RJZCwgT3B0aW9uYWw8U3RyaW5nPiYgcmVzdWx0U3RyaW5nLCBSZWZQdHI8UHJvdG9j
b2w6OkRlYnVnZ2VyOjpGdW5jdGlvbkRldGFpbHM+JiwgUmVmUHRyPFByb3RvY29sOjpSdW50aW1l
OjpPYmplY3RQcmV2aWV3PiYpIGZpbmFsOwotICAgIHZvaWQgZ2V0UmVtb3RlT2JqZWN0KEVycm9y
U3RyaW5nJiwgaW50IGhlYXBPYmplY3RJZCwgY29uc3QgU3RyaW5nKiBvcHRpb25hbE9iamVjdEdy
b3VwLCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3VsdCkgZmlu
YWw7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZW5hYmxlKCkgb3ZlcnJpZGU7
CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZGlzYWJsZSgpIG92ZXJyaWRlOwor
ICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGdjKCkgZmluYWw7CisgICAgUHJvdG9j
b2w6OkVycm9yU3RyaW5nT3I8c3RkOjp0dXBsZTxkb3VibGUsIFByb3RvY29sOjpIZWFwOjpIZWFw
U25hcHNob3REYXRhPj4gc25hcHNob3QoKSBmaW5hbDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJp
bmdPcjx2b2lkPiBzdGFydFRyYWNraW5nKCkgZmluYWw7CisgICAgUHJvdG9jb2w6OkVycm9yU3Ry
aW5nT3I8dm9pZD4gc3RvcFRyYWNraW5nKCkgZmluYWw7CisgICAgUHJvdG9jb2w6OkVycm9yU3Ry
aW5nT3I8c3RkOjp0dXBsZTxTdHJpbmcsIFJlZlB0cjxQcm90b2NvbDo6RGVidWdnZXI6OkZ1bmN0
aW9uRGV0YWlscz4sIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6T2JqZWN0UHJldmlldz4+PiBn
ZXRQcmV2aWV3KGludCBoZWFwT2JqZWN0SWQpIGZpbmFsOworICAgIFByb3RvY29sOjpFcnJvclN0
cmluZ09yPFJlZjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0Pj4gZ2V0UmVtb3RlT2Jq
ZWN0KGludCBoZWFwT2JqZWN0SWQsIGNvbnN0IFN0cmluZyYgb2JqZWN0R3JvdXApIGZpbmFsOwog
CiAgICAgLy8gSlNDOjpIZWFwT2JzZXJ2ZXIKICAgICB2b2lkIHdpbGxHYXJiYWdlQ29sbGVjdCgp
IGZpbmFsOwpAQCAtNzMsNyArNzIsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIGRp
c3BhdGNoR2FyYmFnZUNvbGxlY3RlZEV2ZW50KFByb3RvY29sOjpIZWFwOjpHYXJiYWdlQ29sbGVj
dGlvbjo6VHlwZSwgU2Vjb25kcyBzdGFydFRpbWUsIFNlY29uZHMgZW5kVGltZSk7CiAKIHByaXZh
dGU6Ci0gICAgT3B0aW9uYWw8SlNDOjpIZWFwU25hcHNob3ROb2RlPiBub2RlRm9ySGVhcE9iamVj
dElkZW50aWZpZXIoRXJyb3JTdHJpbmcmLCB1bnNpZ25lZCBoZWFwT2JqZWN0SWRlbnRpZmllcik7
CisgICAgT3B0aW9uYWw8SlNDOjpIZWFwU25hcHNob3ROb2RlPiBub2RlRm9ySGVhcE9iamVjdElk
ZW50aWZpZXIoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiwgdW5zaWduZWQgaGVhcE9iamVjdElkZW50
aWZpZXIpOwogCiAgICAgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyJiBtX2luamVjdGVkU2NyaXB0TWFu
YWdlcjsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SGVhcEZyb250ZW5kRGlzcGF0Y2hlcj4gbV9mcm9u
dGVuZERpc3BhdGNoZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL2FnZW50cy9JbnNwZWN0b3JSdW50aW1lQWdlbnQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUnVudGltZUFnZW50LmNwcAppbmRleCA5YWIx
YWY3NGQ0MzM2MzcxZjY0OTI5YmY2MDY1YTQyY2UxYjk5Zjg0Li4wNTFjOWYzMzY4MjhiZGUyOTk0
MDJkM2NhNjkyMWU2ZTkyMjkzODBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JSdW50aW1lQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclJ1bnRpbWVBZ2VudC5jcHAK
QEAgLTQ5LDE4ICs0OSw2IEBAIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCiB1c2luZyBuYW1lc3Bh
Y2UgSlNDOwogCi1zdGF0aWMgYm9vbCBhc0Jvb2woY29uc3QgYm9vbCogYikKLXsKLSAgICByZXR1
cm4gYiAmJiAqYjsKLX0KLQotc3RhdGljIGludCBhc0ludChjb25zdCBpbnQqIGkpCi17Ci0gICAg
aWYgKGkpCi0gICAgICAgIHJldHVybiAqaTsKLSAgICByZXR1cm4gMDsKLX0KLQogSW5zcGVjdG9y
UnVudGltZUFnZW50OjpJbnNwZWN0b3JSdW50aW1lQWdlbnQoQWdlbnRDb250ZXh0JiBjb250ZXh0
KQogICAgIDogSW5zcGVjdG9yQWdlbnRCYXNlKCJSdW50aW1lIl9zKQogICAgICwgbV9pbmplY3Rl
ZFNjcmlwdE1hbmFnZXIoY29udGV4dC5pbmplY3RlZFNjcmlwdE1hbmFnZXIpCkBAIC04MSwyNSAr
NjksNDYgQEAgc3RhdGljIFJlZjxQcm90b2NvbDo6UnVudGltZTo6RXJyb3JSYW5nZT4gYnVpbGRF
cnJvclJhbmdlT2JqZWN0KGNvbnN0IEpTVG9rZW5Mb2MKICAgICAgICAgLnJlbGVhc2UoKTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OnBhcnNlKEVycm9yU3RyaW5nJiwgY29uc3Qg
U3RyaW5nJiBleHByZXNzaW9uLCBQcm90b2NvbDo6UnVudGltZTo6U3ludGF4RXJyb3JUeXBlKiBy
ZXN1bHQsIE9wdGlvbmFsPFN0cmluZz4mIG1lc3NhZ2UsIFJlZlB0cjxQcm90b2NvbDo6UnVudGlt
ZTo6RXJyb3JSYW5nZT4mIHJhbmdlKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5z
cGVjdG9yUnVudGltZUFnZW50OjplbmFibGUoKQoreworICAgIG1fZW5hYmxlZCA9IHRydWU7CisK
KyAgICByZXR1cm4geyB9OworfQorCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNw
ZWN0b3JSdW50aW1lQWdlbnQ6OmRpc2FibGUoKQoreworICAgIG1fZW5hYmxlZCA9IGZhbHNlOwor
CisgICAgcmV0dXJuIHsgfTsKK30KKworUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8c3RkOjp0dXBs
ZTxQcm90b2NvbDo6UnVudGltZTo6U3ludGF4RXJyb3JUeXBlLCBTdHJpbmcgLyogbWVzc2FnZSAq
LywgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpFcnJvclJhbmdlPj4+IEluc3BlY3RvclJ1bnRp
bWVBZ2VudDo6cGFyc2UoY29uc3QgU3RyaW5nJiBleHByZXNzaW9uKQogewogICAgIEpTTG9ja0hv
bGRlciBsb2NrKG1fdm0pOwogCiAgICAgUGFyc2VyRXJyb3IgZXJyb3I7CiAgICAgY2hlY2tTeW50
YXgobV92bSwgSlNDOjptYWtlU291cmNlKGV4cHJlc3Npb24sIHsgfSksIGVycm9yKTsKIAorICAg
IE9wdGlvbmFsPFByb3RvY29sOjpSdW50aW1lOjpTeW50YXhFcnJvclR5cGU+IHJlc3VsdDsKKyAg
ICBTdHJpbmcgbWVzc2FnZTsKKyAgICBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OkVycm9yUmFu
Z2U+IHJhbmdlOworCiAgICAgc3dpdGNoIChlcnJvci5zeW50YXhFcnJvclR5cGUoKSkgewogICAg
IGNhc2UgUGFyc2VyRXJyb3I6OlN5bnRheEVycm9yTm9uZToKLSAgICAgICAgKnJlc3VsdCA9IFBy
b3RvY29sOjpSdW50aW1lOjpTeW50YXhFcnJvclR5cGU6Ok5vbmU7CisgICAgICAgIHJlc3VsdCA9
IFByb3RvY29sOjpSdW50aW1lOjpTeW50YXhFcnJvclR5cGU6Ok5vbmU7CiAgICAgICAgIGJyZWFr
OworCiAgICAgY2FzZSBQYXJzZXJFcnJvcjo6U3ludGF4RXJyb3JJcnJlY292ZXJhYmxlOgotICAg
ICAgICAqcmVzdWx0ID0gUHJvdG9jb2w6OlJ1bnRpbWU6OlN5bnRheEVycm9yVHlwZTo6SXJyZWNv
dmVyYWJsZTsKKyAgICAgICAgcmVzdWx0ID0gUHJvdG9jb2w6OlJ1bnRpbWU6OlN5bnRheEVycm9y
VHlwZTo6SXJyZWNvdmVyYWJsZTsKICAgICAgICAgYnJlYWs7CisKICAgICBjYXNlIFBhcnNlckVy
cm9yOjpTeW50YXhFcnJvclVudGVybWluYXRlZExpdGVyYWw6Ci0gICAgICAgICpyZXN1bHQgPSBQ
cm90b2NvbDo6UnVudGltZTo6U3ludGF4RXJyb3JUeXBlOjpVbnRlcm1pbmF0ZWRMaXRlcmFsOwor
ICAgICAgICByZXN1bHQgPSBQcm90b2NvbDo6UnVudGltZTo6U3ludGF4RXJyb3JUeXBlOjpVbnRl
cm1pbmF0ZWRMaXRlcmFsOwogICAgICAgICBicmVhazsKKwogICAgIGNhc2UgUGFyc2VyRXJyb3I6
OlN5bnRheEVycm9yUmVjb3ZlcmFibGU6Ci0gICAgICAgICpyZXN1bHQgPSBQcm90b2NvbDo6UnVu
dGltZTo6U3ludGF4RXJyb3JUeXBlOjpSZWNvdmVyYWJsZTsKKyAgICAgICAgcmVzdWx0ID0gUHJv
dG9jb2w6OlJ1bnRpbWU6OlN5bnRheEVycm9yVHlwZTo6UmVjb3ZlcmFibGU7CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KIApAQCAtMTA3LDI5ICsxMTYsNDIgQEAgdm9pZCBJbnNwZWN0b3JSdW50aW1l
QWdlbnQ6OnBhcnNlKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBQcm90
b2MKICAgICAgICAgbWVzc2FnZSA9IGVycm9yLm1lc3NhZ2UoKTsKICAgICAgICAgcmFuZ2UgPSBi
dWlsZEVycm9yUmFuZ2VPYmplY3QoZXJyb3IudG9rZW4oKS5tX2xvY2F0aW9uKTsKICAgICB9CisK
KyAgICByZXR1cm4geyB7ICpyZXN1bHQsIG1lc3NhZ2UsIFdURk1vdmUocmFuZ2UpIH0gfTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmV2YWx1YXRlKEVycm9yU3RyaW5nJiBlcnJv
clN0cmluZywgY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBjb25zdCBTdHJpbmcqIG9iamVjdEdy
b3VwLCBjb25zdCBib29sKiBpbmNsdWRlQ29tbWFuZExpbmVBUEksIGNvbnN0IGJvb2wqIGRvTm90
UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29sZSwgY29uc3QgaW50KiBleGVjdXRpb25Db250
ZXh0SWQsIGNvbnN0IGJvb2wqIHJldHVybkJ5VmFsdWUsIGNvbnN0IGJvb2wqIGdlbmVyYXRlUHJl
dmlldywgY29uc3QgYm9vbCogc2F2ZVJlc3VsdCwgY29uc3QgYm9vbCogLyogZW11bGF0ZVVzZXJH
ZXN0dXJlICovLCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3Vs
dCwgT3B0aW9uYWw8Ym9vbD4mIHdhc1Rocm93biwgT3B0aW9uYWw8aW50PiYgc2F2ZWRSZXN1bHRJ
bmRleCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHN0ZDo6dHVwbGU8UmVmPFByb3RvY29sOjpS
dW50aW1lOjpSZW1vdGVPYmplY3Q+LCBPcHRpb25hbDxib29sPiAvKiB3YXNUaHJvd24gKi8sIE9w
dGlvbmFsPGludD4gLyogc2F2ZWRSZXN1bHRJbmRleCAqLz4+IEluc3BlY3RvclJ1bnRpbWVBZ2Vu
dDo6ZXZhbHVhdGUoY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBjb25zdCBTdHJpbmcmIG9iamVj
dEdyb3VwLCBPcHRpb25hbDxib29sPiYmIGluY2x1ZGVDb21tYW5kTGluZUFQSSwgT3B0aW9uYWw8
Ym9vbD4mJiBkb05vdFBhdXNlT25FeGNlcHRpb25zQW5kTXV0ZUNvbnNvbGUsIE9wdGlvbmFsPFBy
b3RvY29sOjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0SWQ+JiYgZXhlY3V0aW9uQ29udGV4dElk
LCBPcHRpb25hbDxib29sPiYmIHJldHVybkJ5VmFsdWUsIE9wdGlvbmFsPGJvb2w+JiYgZ2VuZXJh
dGVQcmV2aWV3LCBPcHRpb25hbDxib29sPiYmIHNhdmVSZXN1bHQsIE9wdGlvbmFsPGJvb2w+JiYg
LyogZW11bGF0ZVVzZXJHZXN0dXJlICovKQogewotICAgIEluamVjdGVkU2NyaXB0IGluamVjdGVk
U2NyaXB0ID0gaW5qZWN0ZWRTY3JpcHRGb3JFdmFsKGVycm9yU3RyaW5nLCBleGVjdXRpb25Db250
ZXh0SWQpOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKworICAgIElu
amVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0ID0gaW5qZWN0ZWRTY3JpcHRGb3JFdmFsKGVycm9y
U3RyaW5nLCBXVEZNb3ZlKGV4ZWN1dGlvbkNvbnRleHRJZCkpOwogICAgIGlmIChpbmplY3RlZFNj
cmlwdC5oYXNOb1ZhbHVlKCkpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKKworICAgIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6
UmVtb3RlT2JqZWN0PiByZXN1bHQ7CisgICAgT3B0aW9uYWw8Ym9vbD4gd2FzVGhyb3duOworICAg
IE9wdGlvbmFsPGludD4gc2F2ZWRSZXN1bHRJbmRleDsKIAogICAgIEpTQzo6RGVidWdnZXI6OlRl
bXBvcmFyaWx5RGlzYWJsZUV4Y2VwdGlvbkJyZWFrcG9pbnRzIHRlbXBvcmFyaWx5RGlzYWJsZUV4
Y2VwdGlvbkJyZWFrcG9pbnRzKG1fZGVidWdnZXIpOwogCi0gICAgYm9vbCBwYXVzZUFuZE11dGUg
PSBhc0Jvb2woZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xlKTsKKyAgICBib29s
IHBhdXNlQW5kTXV0ZSA9IGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29sZS52YWx1
ZU9yKGZhbHNlKTsKICAgICBpZiAocGF1c2VBbmRNdXRlKSB7CiAgICAgICAgIHRlbXBvcmFyaWx5
RGlzYWJsZUV4Y2VwdGlvbkJyZWFrcG9pbnRzLnJlcGxhY2UoKTsKICAgICAgICAgbXV0ZUNvbnNv
bGUoKTsKICAgICB9CiAKLSAgICBpbmplY3RlZFNjcmlwdC5ldmFsdWF0ZShlcnJvclN0cmluZywg
ZXhwcmVzc2lvbiwgb2JqZWN0R3JvdXAgPyAqb2JqZWN0R3JvdXAgOiBTdHJpbmcoKSwgYXNCb29s
KGluY2x1ZGVDb21tYW5kTGluZUFQSSksIGFzQm9vbChyZXR1cm5CeVZhbHVlKSwgYXNCb29sKGdl
bmVyYXRlUHJldmlldyksIGFzQm9vbChzYXZlUmVzdWx0KSwgcmVzdWx0LCB3YXNUaHJvd24sIHNh
dmVkUmVzdWx0SW5kZXgpOworICAgIGluamVjdGVkU2NyaXB0LmV2YWx1YXRlKGVycm9yU3RyaW5n
LCBleHByZXNzaW9uLCBvYmplY3RHcm91cCwgaW5jbHVkZUNvbW1hbmRMaW5lQVBJLnZhbHVlT3Io
ZmFsc2UpLCByZXR1cm5CeVZhbHVlLnZhbHVlT3IoZmFsc2UpLCBnZW5lcmF0ZVByZXZpZXcudmFs
dWVPcihmYWxzZSksIHNhdmVSZXN1bHQudmFsdWVPcihmYWxzZSksIHJlc3VsdCwgd2FzVGhyb3du
LCBzYXZlZFJlc3VsdEluZGV4KTsKIAogICAgIGlmIChwYXVzZUFuZE11dGUpCiAgICAgICAgIHVu
bXV0ZUNvbnNvbGUoKTsKKworICAgIGlmICghcmVzdWx0KQorICAgICAgICByZXR1cm4gbWFrZVVu
ZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOworCisgICAgcmV0dXJuIHsge3Jlc3VsdC5yZWxlYXNlTm9u
TnVsbCgpLCBXVEZNb3ZlKHdhc1Rocm93biksIFdURk1vdmUoc2F2ZWRSZXN1bHRJbmRleCkgfSB9
OwogfQogCi12b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6YXdhaXRQcm9taXNlKGNvbnN0IFN0
cmluZyYgcHJvbWlzZU9iamVjdElkLCBjb25zdCBib29sKiByZXR1cm5CeVZhbHVlLCBjb25zdCBi
b29sKiBnZW5lcmF0ZVByZXZpZXcsIGNvbnN0IGJvb2wqIHNhdmVSZXN1bHQsIFJlZjxBd2FpdFBy
b21pc2VDYWxsYmFjaz4mJiBjYWxsYmFjaykKK3ZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50Ojph
d2FpdFByb21pc2UoY29uc3QgUHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdElkJiBwcm9t
aXNlT2JqZWN0SWQsIE9wdGlvbmFsPGJvb2w+JiYgcmV0dXJuQnlWYWx1ZSwgT3B0aW9uYWw8Ym9v
bD4mJiBnZW5lcmF0ZVByZXZpZXcsIE9wdGlvbmFsPGJvb2w+JiYgc2F2ZVJlc3VsdCwgUmVmPEF3
YWl0UHJvbWlzZUNhbGxiYWNrPiYmIGNhbGxiYWNrKQogewogICAgIEluamVjdGVkU2NyaXB0IGlu
amVjdGVkU2NyaXB0ID0gbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIuaW5qZWN0ZWRTY3JpcHRGb3JP
YmplY3RJZChwcm9taXNlT2JqZWN0SWQpOwogICAgIGlmIChpbmplY3RlZFNjcmlwdC5oYXNOb1Zh
bHVlKCkpIHsKQEAgLTEzNywyMTkgKzE1OSwyNDQgQEAgdm9pZCBJbnNwZWN0b3JSdW50aW1lQWdl
bnQ6OmF3YWl0UHJvbWlzZShjb25zdCBTdHJpbmcmIHByb21pc2VPYmplY3RJZCwgY29uc3QgYm8K
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGluamVjdGVkU2NyaXB0LmF3YWl0UHJvbWlz
ZShwcm9taXNlT2JqZWN0SWQsIGFzQm9vbChyZXR1cm5CeVZhbHVlKSwgYXNCb29sKGdlbmVyYXRl
UHJldmlldyksIGFzQm9vbChzYXZlUmVzdWx0KSwgW2NhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFj
ayldIChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6
UmVtb3RlT2JqZWN0PiYmIHJlc3VsdCwgT3B0aW9uYWw8Ym9vbD4mIHdhc1Rocm93biwgT3B0aW9u
YWw8aW50PiYgc2F2ZWRSZXN1bHRJbmRleCkgewotICAgICAgICBpZiAoIWVycm9yU3RyaW5nLmlz
RW1wdHkoKSkKKyAgICBpbmplY3RlZFNjcmlwdC5hd2FpdFByb21pc2UocHJvbWlzZU9iamVjdElk
LCByZXR1cm5CeVZhbHVlLnZhbHVlT3IoZmFsc2UpLCBnZW5lcmF0ZVByZXZpZXcudmFsdWVPcihm
YWxzZSksIHNhdmVSZXN1bHQudmFsdWVPcihmYWxzZSksIFtjYWxsYmFjayA9IFdURk1vdmUoY2Fs
bGJhY2spXSAoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgUmVmUHRyPFByb3Rv
Y29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiYgcmVzdWx0LCBPcHRpb25hbDxib29sPiYmIHdh
c1Rocm93biwgT3B0aW9uYWw8aW50PiYmIHNhdmVkUmVzdWx0SW5kZXgpIHsKKyAgICAgICAgaWYg
KCFyZXN1bHQpCiAgICAgICAgICAgICBjYWxsYmFjay0+c2VuZEZhaWx1cmUoZXJyb3JTdHJpbmcp
OwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBjYWxsYmFjay0+c2VuZFN1Y2Nlc3MoV1RGTW92
ZShyZXN1bHQpLCB3YXNUaHJvd24sIHNhdmVkUmVzdWx0SW5kZXgpOworICAgICAgICAgICAgY2Fs
bGJhY2stPnNlbmRTdWNjZXNzKHJlc3VsdC5yZWxlYXNlTm9uTnVsbCgpLCBXVEZNb3ZlKHdhc1Ro
cm93biksIFdURk1vdmUoc2F2ZWRSZXN1bHRJbmRleCkpOwogICAgIH0pOwogfQogCi12b2lkIElu
c3BlY3RvclJ1bnRpbWVBZ2VudDo6Y2FsbEZ1bmN0aW9uT24oRXJyb3JTdHJpbmcmIGVycm9yU3Ry
aW5nLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIGNv
bnN0IEpTT046OkFycmF5KiBvcHRpb25hbEFyZ3VtZW50cywgY29uc3QgYm9vbCogZG9Ob3RQYXVz
ZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xlLCBjb25zdCBib29sKiByZXR1cm5CeVZhbHVlLCBj
b25zdCBib29sKiBnZW5lcmF0ZVByZXZpZXcsIGNvbnN0IGJvb2wqIC8qIGVtdWxhdGVVc2VyR2Vz
dHVyZSAqLywgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiByZXN1bHQs
IE9wdGlvbmFsPGJvb2w+JiB3YXNUaHJvd24pCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxzdGQ6
OnR1cGxlPFJlZjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiwgT3B0aW9uYWw8Ym9v
bD4gLyogd2FzVGhyb3duICovPj4gSW5zcGVjdG9yUnVudGltZUFnZW50OjpjYWxsRnVuY3Rpb25P
bihjb25zdCBQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0SWQmIG9iamVjdElkLCBjb25z
dCBTdHJpbmcmIGZ1bmN0aW9uRGVjbGFyYXRpb24sIFJlZlB0cjxKU09OOjpBcnJheT4mJiBhcmd1
bWVudHMsIE9wdGlvbmFsPGJvb2w+JiYgZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25z
b2xlLCBPcHRpb25hbDxib29sPiYmIHJldHVybkJ5VmFsdWUsIE9wdGlvbmFsPGJvb2w+JiYgZ2Vu
ZXJhdGVQcmV2aWV3LCBPcHRpb25hbDxib29sPiYmIC8qIGVtdWxhdGVVc2VyR2VzdHVyZSAqLykK
IHsKLSAgICBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdCA9IG1faW5qZWN0ZWRTY3JpcHRN
YW5hZ2VyLmluamVjdGVkU2NyaXB0Rm9yT2JqZWN0SWQob2JqZWN0SWQpOwotICAgIGlmIChpbmpl
Y3RlZFNjcmlwdC5oYXNOb1ZhbHVlKCkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWlzc2lu
ZyBpbmplY3RlZCBzY3JpcHQgZm9yIGdpdmVuIG9iamVjdElkIl9zOwotICAgICAgICByZXR1cm47
Ci0gICAgfQorICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKIAotICAgIFN0
cmluZyBhcmd1bWVudHM7Ci0gICAgaWYgKG9wdGlvbmFsQXJndW1lbnRzKQotICAgICAgICBhcmd1
bWVudHMgPSBvcHRpb25hbEFyZ3VtZW50cy0+dG9KU09OU3RyaW5nKCk7CisgICAgSW5qZWN0ZWRT
Y3JpcHQgaW5qZWN0ZWRTY3JpcHQgPSBtX2luamVjdGVkU2NyaXB0TWFuYWdlci5pbmplY3RlZFNj
cmlwdEZvck9iamVjdElkKG9iamVjdElkKTsKKyAgICBpZiAoaW5qZWN0ZWRTY3JpcHQuaGFzTm9W
YWx1ZSgpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk1pc3NpbmcgaW5qZWN0ZWQg
c2NyaXB0IGZvciBnaXZlbiBvYmplY3RJZCJfcyk7CisKKyAgICBSZWZQdHI8UHJvdG9jb2w6OlJ1
bnRpbWU6OlJlbW90ZU9iamVjdD4gcmVzdWx0OworICAgIE9wdGlvbmFsPGJvb2w+IHdhc1Rocm93
bjsKIAogICAgIEpTQzo6RGVidWdnZXI6OlRlbXBvcmFyaWx5RGlzYWJsZUV4Y2VwdGlvbkJyZWFr
cG9pbnRzIHRlbXBvcmFyaWx5RGlzYWJsZUV4Y2VwdGlvbkJyZWFrcG9pbnRzKG1fZGVidWdnZXIp
OwogCi0gICAgYm9vbCBwYXVzZUFuZE11dGUgPSBhc0Jvb2woZG9Ob3RQYXVzZU9uRXhjZXB0aW9u
c0FuZE11dGVDb25zb2xlKTsKKyAgICBib29sIHBhdXNlQW5kTXV0ZSA9IGRvTm90UGF1c2VPbkV4
Y2VwdGlvbnNBbmRNdXRlQ29uc29sZS52YWx1ZU9yKGZhbHNlKTsKICAgICBpZiAocGF1c2VBbmRN
dXRlKSB7CiAgICAgICAgIHRlbXBvcmFyaWx5RGlzYWJsZUV4Y2VwdGlvbkJyZWFrcG9pbnRzLnJl
cGxhY2UoKTsKICAgICAgICAgbXV0ZUNvbnNvbGUoKTsKICAgICB9CiAKLSAgICBpbmplY3RlZFNj
cmlwdC5jYWxsRnVuY3Rpb25PbihlcnJvclN0cmluZywgb2JqZWN0SWQsIGV4cHJlc3Npb24sIGFy
Z3VtZW50cywgYXNCb29sKHJldHVybkJ5VmFsdWUpLCBhc0Jvb2woZ2VuZXJhdGVQcmV2aWV3KSwg
cmVzdWx0LCB3YXNUaHJvd24pOworICAgIGluamVjdGVkU2NyaXB0LmNhbGxGdW5jdGlvbk9uKGVy
cm9yU3RyaW5nLCBvYmplY3RJZCwgZnVuY3Rpb25EZWNsYXJhdGlvbiwgYXJndW1lbnRzID8gYXJn
dW1lbnRzLT50b0pTT05TdHJpbmcoKSA6IG51bGxTdHJpbmcoKSwgcmV0dXJuQnlWYWx1ZS52YWx1
ZU9yKGZhbHNlKSwgZ2VuZXJhdGVQcmV2aWV3LnZhbHVlT3IoZmFsc2UpLCByZXN1bHQsIHdhc1Ro
cm93bik7CiAKICAgICBpZiAocGF1c2VBbmRNdXRlKQogICAgICAgICB1bm11dGVDb25zb2xlKCk7
CisKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9y
U3RyaW5nKTsKKworICAgIHJldHVybiB7IHsgcmVzdWx0LnJlbGVhc2VOb25OdWxsKCksIFdURk1v
dmUod2FzVGhyb3duKSB9IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50OjpnZXRQ
cmV2aWV3KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBvYmplY3RJZCwg
UmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpPYmplY3RQcmV2aWV3PiYgcHJldmlldykKK1Byb3Rv
Y29sOjpFcnJvclN0cmluZ09yPFJlZjxQcm90b2NvbDo6UnVudGltZTo6T2JqZWN0UHJldmlldz4+
IEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6Z2V0UHJldmlldyhjb25zdCBQcm90b2NvbDo6UnVudGlt
ZTo6UmVtb3RlT2JqZWN0SWQmIG9iamVjdElkKQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmlu
ZyBlcnJvclN0cmluZzsKKwogICAgIEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0ID0gbV9p
bmplY3RlZFNjcmlwdE1hbmFnZXIuaW5qZWN0ZWRTY3JpcHRGb3JPYmplY3RJZChvYmplY3RJZCk7
Ci0gICAgaWYgKGluamVjdGVkU2NyaXB0Lmhhc05vVmFsdWUoKSkgewotICAgICAgICBlcnJvclN0
cmluZyA9ICJNaXNzaW5nIGluamVjdGVkIHNjcmlwdCBmb3IgZ2l2ZW4gb2JqZWN0SWQiX3M7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKGluamVjdGVkU2NyaXB0Lmhhc05vVmFsdWUo
KSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJNaXNzaW5nIGluamVjdGVkIHNjcmlw
dCBmb3IgZ2l2ZW4gb2JqZWN0SWQiX3MpOwogCiAgICAgSlNDOjpEZWJ1Z2dlcjo6VGVtcG9yYXJp
bHlEaXNhYmxlRXhjZXB0aW9uQnJlYWtwb2ludHMgdGVtcG9yYXJpbHlEaXNhYmxlRXhjZXB0aW9u
QnJlYWtwb2ludHMobV9kZWJ1Z2dlcik7CiAgICAgdGVtcG9yYXJpbHlEaXNhYmxlRXhjZXB0aW9u
QnJlYWtwb2ludHMucmVwbGFjZSgpOwogCisgICAgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpP
YmplY3RQcmV2aWV3PiBwcmV2aWV3OworCiAgICAgbXV0ZUNvbnNvbGUoKTsKIAogICAgIGluamVj
dGVkU2NyaXB0LmdldFByZXZpZXcoZXJyb3JTdHJpbmcsIG9iamVjdElkLCBwcmV2aWV3KTsKIAog
ICAgIHVubXV0ZUNvbnNvbGUoKTsKKworICAgIGlmICghcHJldmlldykKKyAgICAgICAgcmV0dXJu
IG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKKworICAgIHJldHVybiBwcmV2aWV3LnJlbGVh
c2VOb25OdWxsKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50OjpnZXRQcm9wZXJ0
aWVzKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBvYmplY3RJZCwgY29u
c3QgYm9vbCogb3duUHJvcGVydGllcywgY29uc3QgaW50KiBmZXRjaFN0YXJ0LCBjb25zdCBpbnQq
IGZldGNoQ291bnQsIGNvbnN0IGJvb2wqIGdlbmVyYXRlUHJldmlldywgUmVmUHRyPEpTT046OkFy
cmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OlByb3BlcnR5RGVzY3JpcHRvcj4+JiBwcm9wZXJ0aWVz
LCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UnVudGltZTo6SW50ZXJuYWxQcm9wZXJ0
eURlc2NyaXB0b3I+PiYgaW50ZXJuYWxQcm9wZXJ0aWVzKQorUHJvdG9jb2w6OkVycm9yU3RyaW5n
T3I8c3RkOjp0dXBsZTxSZWY8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UnVudGltZTo6UHJvcGVy
dHlEZXNjcmlwdG9yPj4sIFJlZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpJ
bnRlcm5hbFByb3BlcnR5RGVzY3JpcHRvcj4+Pj4gSW5zcGVjdG9yUnVudGltZUFnZW50OjpnZXRQ
cm9wZXJ0aWVzKGNvbnN0IFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3RJZCYgb2JqZWN0
SWQsIE9wdGlvbmFsPGJvb2w+JiYgb3duUHJvcGVydGllcywgT3B0aW9uYWw8aW50PiYmIGZldGNo
U3RhcnQsIE9wdGlvbmFsPGludD4mJiBmZXRjaENvdW50LCBPcHRpb25hbDxib29sPiYmIGdlbmVy
YXRlUHJldmlldykKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisK
ICAgICBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdCA9IG1faW5qZWN0ZWRTY3JpcHRNYW5h
Z2VyLmluamVjdGVkU2NyaXB0Rm9yT2JqZWN0SWQob2JqZWN0SWQpOwotICAgIGlmIChpbmplY3Rl
ZFNjcmlwdC5oYXNOb1ZhbHVlKCkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWlzc2luZyBp
bmplY3RlZCBzY3JpcHQgZm9yIGdpdmVuIG9iamVjdElkIl9zOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQorICAgIGlmIChpbmplY3RlZFNjcmlwdC5oYXNOb1ZhbHVlKCkpCisgICAgICAgIHJldHVy
biBtYWtlVW5leHBlY3RlZCgiTWlzc2luZyBpbmplY3RlZCBzY3JpcHQgZm9yIGdpdmVuIG9iamVj
dElkIl9zKTsKIAotICAgIGludCBzdGFydCA9IGFzSW50KGZldGNoU3RhcnQpOwotICAgIGlmIChz
dGFydCA8IDApIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiZmV0Y2hTdGFydCBjYW5ub3QgYmUg
bmVnYXRpdmUiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaW50IHN0YXJ0ID0gZmV0
Y2hTdGFydC52YWx1ZU9yKDApOworICAgIGlmIChzdGFydCA8IDApCisgICAgICAgIHJldHVybiBt
YWtlVW5leHBlY3RlZCgiZmV0Y2hTdGFydCBjYW5ub3QgYmUgbmVnYXRpdmUiX3MpOwogCi0gICAg
aW50IGNvdW50ID0gYXNJbnQoZmV0Y2hDb3VudCk7Ci0gICAgaWYgKGNvdW50IDwgMCkgewotICAg
ICAgICBlcnJvclN0cmluZyA9ICJmZXRjaENvdW50IGNhbm5vdCBiZSBuZWdhdGl2ZSJfczsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpbnQgY291bnQgPSBmZXRjaENvdW50LnZhbHVlT3Io
MCk7CisgICAgaWYgKGNvdW50IDwgMCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJm
ZXRjaENvdW50IGNhbm5vdCBiZSBuZWdhdGl2ZSJfcyk7CisKKyAgICBSZWZQdHI8SlNPTjo6QXJy
YXlPZjxQcm90b2NvbDo6UnVudGltZTo6UHJvcGVydHlEZXNjcmlwdG9yPj4gcHJvcGVydGllczsK
KyAgICBSZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UnVudGltZTo6SW50ZXJuYWxQcm9w
ZXJ0eURlc2NyaXB0b3I+PiBpbnRlcm5hbFByb3BlcnRpZXM7CiAKICAgICBKU0M6OkRlYnVnZ2Vy
OjpUZW1wb3JhcmlseURpc2FibGVFeGNlcHRpb25CcmVha3BvaW50cyB0ZW1wb3JhcmlseURpc2Fi
bGVFeGNlcHRpb25CcmVha3BvaW50cyhtX2RlYnVnZ2VyKTsKICAgICB0ZW1wb3JhcmlseURpc2Fi
bGVFeGNlcHRpb25CcmVha3BvaW50cy5yZXBsYWNlKCk7CiAKICAgICBtdXRlQ29uc29sZSgpOwog
Ci0gICAgaW5qZWN0ZWRTY3JpcHQuZ2V0UHJvcGVydGllcyhlcnJvclN0cmluZywgb2JqZWN0SWQs
IGFzQm9vbChvd25Qcm9wZXJ0aWVzKSwgc3RhcnQsIGNvdW50LCBhc0Jvb2woZ2VuZXJhdGVQcmV2
aWV3KSwgcHJvcGVydGllcyk7CisgICAgaW5qZWN0ZWRTY3JpcHQuZ2V0UHJvcGVydGllcyhlcnJv
clN0cmluZywgb2JqZWN0SWQsIG93blByb3BlcnRpZXMudmFsdWVPcihmYWxzZSksIHN0YXJ0LCBj
b3VudCwgZ2VuZXJhdGVQcmV2aWV3LnZhbHVlT3IoZmFsc2UpLCBwcm9wZXJ0aWVzKTsKIAogICAg
IC8vIE9ubHkgaW5jbHVkZSBpbnRlcm5hbCBwcm9wZXJ0aWVzIGZvciB0aGUgZmlyc3QgZmV0Y2gu
CiAgICAgaWYgKCFzdGFydCkKLSAgICAgICAgaW5qZWN0ZWRTY3JpcHQuZ2V0SW50ZXJuYWxQcm9w
ZXJ0aWVzKGVycm9yU3RyaW5nLCBvYmplY3RJZCwgYXNCb29sKGdlbmVyYXRlUHJldmlldyksIGlu
dGVybmFsUHJvcGVydGllcyk7CisgICAgICAgIGluamVjdGVkU2NyaXB0LmdldEludGVybmFsUHJv
cGVydGllcyhlcnJvclN0cmluZywgb2JqZWN0SWQsIGdlbmVyYXRlUHJldmlldy52YWx1ZU9yKGZh
bHNlKSwgaW50ZXJuYWxQcm9wZXJ0aWVzKTsKIAogICAgIHVubXV0ZUNvbnNvbGUoKTsKKworICAg
IGlmICghcHJvcGVydGllcykKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3Ry
aW5nKTsKKworICAgIHJldHVybiB7IHsgcHJvcGVydGllcy5yZWxlYXNlTm9uTnVsbCgpLCBXVEZN
b3ZlKGludGVybmFsUHJvcGVydGllcykgfSB9OwogfQogCi12b2lkIEluc3BlY3RvclJ1bnRpbWVB
Z2VudDo6Z2V0RGlzcGxheWFibGVQcm9wZXJ0aWVzKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywg
Y29uc3QgU3RyaW5nJiBvYmplY3RJZCwgY29uc3QgaW50KiBmZXRjaFN0YXJ0LCBjb25zdCBpbnQq
IGZldGNoQ291bnQsIGNvbnN0IGJvb2wqIGdlbmVyYXRlUHJldmlldywgUmVmUHRyPEpTT046OkFy
cmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OlByb3BlcnR5RGVzY3JpcHRvcj4+JiBwcm9wZXJ0aWVz
LCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UnVudGltZTo6SW50ZXJuYWxQcm9wZXJ0
eURlc2NyaXB0b3I+PiYgaW50ZXJuYWxQcm9wZXJ0aWVzKQorUHJvdG9jb2w6OkVycm9yU3RyaW5n
T3I8c3RkOjp0dXBsZTxSZWY8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UnVudGltZTo6UHJvcGVy
dHlEZXNjcmlwdG9yPj4sIFJlZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpJ
bnRlcm5hbFByb3BlcnR5RGVzY3JpcHRvcj4+Pj4gSW5zcGVjdG9yUnVudGltZUFnZW50OjpnZXRE
aXNwbGF5YWJsZVByb3BlcnRpZXMoY29uc3QgUHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVj
dElkJiBvYmplY3RJZCwgT3B0aW9uYWw8aW50PiYmIGZldGNoU3RhcnQsIE9wdGlvbmFsPGludD4m
JiBmZXRjaENvdW50LCBPcHRpb25hbDxib29sPiYmIGdlbmVyYXRlUHJldmlldykKIHsKKyAgICBQ
cm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBJbmplY3RlZFNjcmlwdCBp
bmplY3RlZFNjcmlwdCA9IG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmluamVjdGVkU2NyaXB0Rm9y
T2JqZWN0SWQob2JqZWN0SWQpOwotICAgIGlmIChpbmplY3RlZFNjcmlwdC5oYXNOb1ZhbHVlKCkp
IHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWlzc2luZyBpbmplY3RlZCBzY3JpcHQgZm9yIGdp
dmVuIG9iamVjdElkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmIChpbmplY3Rl
ZFNjcmlwdC5oYXNOb1ZhbHVlKCkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTWlz
c2luZyBpbmplY3RlZCBzY3JpcHQgZm9yIGdpdmVuIG9iamVjdElkIl9zKTsKIAotICAgIGludCBz
dGFydCA9IGFzSW50KGZldGNoU3RhcnQpOwotICAgIGlmIChzdGFydCA8IDApIHsKLSAgICAgICAg
ZXJyb3JTdHJpbmcgPSAiZmV0Y2hTdGFydCBjYW5ub3QgYmUgbmVnYXRpdmUiX3M7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9CisgICAgaW50IHN0YXJ0ID0gZmV0Y2hTdGFydC52YWx1ZU9yKDApOwor
ICAgIGlmIChzdGFydCA8IDApCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiZmV0Y2hT
dGFydCBjYW5ub3QgYmUgbmVnYXRpdmUiX3MpOwogCi0gICAgaW50IGNvdW50ID0gYXNJbnQoZmV0
Y2hDb3VudCk7Ci0gICAgaWYgKGNvdW50IDwgMCkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJm
ZXRjaENvdW50IGNhbm5vdCBiZSBuZWdhdGl2ZSJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
KyAgICBpbnQgY291bnQgPSBmZXRjaENvdW50LnZhbHVlT3IoMCk7CisgICAgaWYgKGNvdW50IDwg
MCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJmZXRjaENvdW50IGNhbm5vdCBiZSBu
ZWdhdGl2ZSJfcyk7CisKKyAgICBSZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UnVudGlt
ZTo6UHJvcGVydHlEZXNjcmlwdG9yPj4gcHJvcGVydGllczsKKyAgICBSZWZQdHI8SlNPTjo6QXJy
YXlPZjxQcm90b2NvbDo6UnVudGltZTo6SW50ZXJuYWxQcm9wZXJ0eURlc2NyaXB0b3I+PiBpbnRl
cm5hbFByb3BlcnRpZXM7CiAKICAgICBKU0M6OkRlYnVnZ2VyOjpUZW1wb3JhcmlseURpc2FibGVF
eGNlcHRpb25CcmVha3BvaW50cyB0ZW1wb3JhcmlseURpc2FibGVFeGNlcHRpb25CcmVha3BvaW50
cyhtX2RlYnVnZ2VyKTsKICAgICB0ZW1wb3JhcmlseURpc2FibGVFeGNlcHRpb25CcmVha3BvaW50
cy5yZXBsYWNlKCk7CiAKICAgICBtdXRlQ29uc29sZSgpOwogCi0gICAgaW5qZWN0ZWRTY3JpcHQu
Z2V0RGlzcGxheWFibGVQcm9wZXJ0aWVzKGVycm9yU3RyaW5nLCBvYmplY3RJZCwgc3RhcnQsIGNv
dW50LCBhc0Jvb2woZ2VuZXJhdGVQcmV2aWV3KSwgcHJvcGVydGllcyk7CisgICAgaW5qZWN0ZWRT
Y3JpcHQuZ2V0RGlzcGxheWFibGVQcm9wZXJ0aWVzKGVycm9yU3RyaW5nLCBvYmplY3RJZCwgc3Rh
cnQsIGNvdW50LCBnZW5lcmF0ZVByZXZpZXcudmFsdWVPcihmYWxzZSksIHByb3BlcnRpZXMpOwog
CiAgICAgLy8gT25seSBpbmNsdWRlIGludGVybmFsIHByb3BlcnRpZXMgZm9yIHRoZSBmaXJzdCBm
ZXRjaC4KICAgICBpZiAoIXN0YXJ0KQotICAgICAgICBpbmplY3RlZFNjcmlwdC5nZXRJbnRlcm5h
bFByb3BlcnRpZXMoZXJyb3JTdHJpbmcsIG9iamVjdElkLCBhc0Jvb2woZ2VuZXJhdGVQcmV2aWV3
KSwgaW50ZXJuYWxQcm9wZXJ0aWVzKTsKKyAgICAgICAgaW5qZWN0ZWRTY3JpcHQuZ2V0SW50ZXJu
YWxQcm9wZXJ0aWVzKGVycm9yU3RyaW5nLCBvYmplY3RJZCwgZ2VuZXJhdGVQcmV2aWV3LnZhbHVl
T3IoZmFsc2UpLCBpbnRlcm5hbFByb3BlcnRpZXMpOwogCiAgICAgdW5tdXRlQ29uc29sZSgpOwor
CisgICAgaWYgKCFwcm9wZXJ0aWVzKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJy
b3JTdHJpbmcpOworCisgICAgcmV0dXJuIHsgeyBwcm9wZXJ0aWVzLnJlbGVhc2VOb25OdWxsKCks
IFdURk1vdmUoaW50ZXJuYWxQcm9wZXJ0aWVzKSB9IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yUnVu
dGltZUFnZW50OjpnZXRDb2xsZWN0aW9uRW50cmllcyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcs
IGNvbnN0IFN0cmluZyYgb2JqZWN0SWQsIGNvbnN0IFN0cmluZyogb2JqZWN0R3JvdXAsIGNvbnN0
IGludCogZmV0Y2hTdGFydCwgY29uc3QgaW50KiBmZXRjaENvdW50LCBSZWZQdHI8SlNPTjo6QXJy
YXlPZjxQcm90b2NvbDo6UnVudGltZTo6Q29sbGVjdGlvbkVudHJ5Pj4mIGVudHJpZXMpCitQcm90
b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UnVudGltZTo6
Q29sbGVjdGlvbkVudHJ5Pj4+IEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6Z2V0Q29sbGVjdGlvbkVu
dHJpZXMoY29uc3QgUHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdElkJiBvYmplY3RJZCwg
Y29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCwgT3B0aW9uYWw8aW50PiYmIGZldGNoU3RhcnQsIE9w
dGlvbmFsPGludD4mJiBmZXRjaENvdW50KQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBl
cnJvclN0cmluZzsKKwogICAgIEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0ID0gbV9pbmpl
Y3RlZFNjcmlwdE1hbmFnZXIuaW5qZWN0ZWRTY3JpcHRGb3JPYmplY3RJZChvYmplY3RJZCk7Ci0g
ICAgaWYgKGluamVjdGVkU2NyaXB0Lmhhc05vVmFsdWUoKSkgewotICAgICAgICBlcnJvclN0cmlu
ZyA9ICJNaXNzaW5nIGluamVjdGVkIHNjcmlwdCBmb3IgZ2l2ZW4gb2JqZWN0SWQiX3M7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKGluamVjdGVkU2NyaXB0Lmhhc05vVmFsdWUoKSkK
KyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJNaXNzaW5nIGluamVjdGVkIHNjcmlwdCBm
b3IgZ2l2ZW4gb2JqZWN0SWQiX3MpOwogCi0gICAgaW50IHN0YXJ0ID0gYXNJbnQoZmV0Y2hTdGFy
dCk7Ci0gICAgaWYgKHN0YXJ0IDwgMCkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJmZXRjaFN0
YXJ0IGNhbm5vdCBiZSBuZWdhdGl2ZSJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBp
bnQgc3RhcnQgPSBmZXRjaFN0YXJ0LnZhbHVlT3IoMCk7CisgICAgaWYgKHN0YXJ0IDwgMCkKKyAg
ICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJmZXRjaFN0YXJ0IGNhbm5vdCBiZSBuZWdhdGl2
ZSJfcyk7CiAKLSAgICBpbnQgY291bnQgPSBhc0ludChmZXRjaENvdW50KTsKLSAgICBpZiAoY291
bnQgPCAwKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gImZldGNoQ291bnQgY2Fubm90IGJlIG5l
Z2F0aXZlIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGludCBjb3VudCA9IGZldGNo
Q291bnQudmFsdWVPcigwKTsKKyAgICBpZiAoY291bnQgPCAwKQorICAgICAgICByZXR1cm4gbWFr
ZVVuZXhwZWN0ZWQoImZldGNoQ291bnQgY2Fubm90IGJlIG5lZ2F0aXZlIl9zKTsKIAotICAgIGlu
amVjdGVkU2NyaXB0LmdldENvbGxlY3Rpb25FbnRyaWVzKGVycm9yU3RyaW5nLCBvYmplY3RJZCwg
b2JqZWN0R3JvdXAgPyAqb2JqZWN0R3JvdXAgOiBTdHJpbmcoKSwgc3RhcnQsIGNvdW50LCBlbnRy
aWVzKTsKKyAgICBSZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UnVudGltZTo6Q29sbGVj
dGlvbkVudHJ5Pj4gZW50cmllczsKKworICAgIGluamVjdGVkU2NyaXB0LmdldENvbGxlY3Rpb25F
bnRyaWVzKGVycm9yU3RyaW5nLCBvYmplY3RJZCwgb2JqZWN0R3JvdXAsIHN0YXJ0LCBjb3VudCwg
ZW50cmllcyk7CisKKyAgICBpZiAoIWVudHJpZXMpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBl
Y3RlZChlcnJvclN0cmluZyk7CisKKyAgICByZXR1cm4gZW50cmllcy5yZWxlYXNlTm9uTnVsbCgp
OwogfQogCi12b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6c2F2ZVJlc3VsdChFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcsIGNvbnN0IEpTT046Ok9iamVjdCYgY2FsbEFyZ3VtZW50LCBjb25zdCBp
bnQqIGV4ZWN1dGlvbkNvbnRleHRJZCwgT3B0aW9uYWw8aW50PiYgc2F2ZWRSZXN1bHRJbmRleCkK
K1Byb3RvY29sOjpFcnJvclN0cmluZ09yPE9wdGlvbmFsPGludD4gLyogc2F2ZVJlc3VsdEluZGV4
ICovPiBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OnNhdmVSZXN1bHQoUmVmPEpTT046Ok9iamVjdD4m
JiBjYWxsQXJndW1lbnQsIE9wdGlvbmFsPFByb3RvY29sOjpSdW50aW1lOjpFeGVjdXRpb25Db250
ZXh0SWQ+JiYgZXhlY3V0aW9uQ29udGV4dElkKQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmlu
ZyBlcnJvclN0cmluZzsKKwogICAgIEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0OwogCi0g
ICAgU3RyaW5nIG9iamVjdElkOwotICAgIGlmIChjYWxsQXJndW1lbnQuZ2V0U3RyaW5nKCJvYmpl
Y3RJZCJfcywgb2JqZWN0SWQpKSB7Ci0gICAgICAgIGluamVjdGVkU2NyaXB0ID0gbV9pbmplY3Rl
ZFNjcmlwdE1hbmFnZXIuaW5qZWN0ZWRTY3JpcHRGb3JPYmplY3RJZChvYmplY3RJZCk7Ci0gICAg
ICAgIGlmIChpbmplY3RlZFNjcmlwdC5oYXNOb1ZhbHVlKCkpIHsKLSAgICAgICAgICAgIGVycm9y
U3RyaW5nID0gIk1pc3NpbmcgaW5qZWN0ZWQgc2NyaXB0IGZvciBnaXZlbiBvYmplY3RJZCJfczsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlu
amVjdGVkU2NyaXB0ID0gaW5qZWN0ZWRTY3JpcHRGb3JFdmFsKGVycm9yU3RyaW5nLCBleGVjdXRp
b25Db250ZXh0SWQpOworICAgIGF1dG8gb2JqZWN0SWQgPSBjYWxsQXJndW1lbnQtPmdldFN0cmlu
ZyhQcm90b2NvbDo6UnVudGltZTo6Q2FsbEFyZ3VtZW50OjpvYmplY3RJZEtleSk7CisgICAgaWYg
KCFvYmplY3RJZCkgeworICAgICAgICBpbmplY3RlZFNjcmlwdCA9IGluamVjdGVkU2NyaXB0Rm9y
RXZhbChlcnJvclN0cmluZywgV1RGTW92ZShleGVjdXRpb25Db250ZXh0SWQpKTsKICAgICAgICAg
aWYgKGluamVjdGVkU2NyaXB0Lmhhc05vVmFsdWUoKSkKLSAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgaW5qZWN0ZWRTY3JpcHQgPSBtX2luamVjdGVkU2NyaXB0TWFuYWdlci5pbmpl
Y3RlZFNjcmlwdEZvck9iamVjdElkKG9iamVjdElkKTsKKyAgICAgICAgaWYgKGluamVjdGVkU2Ny
aXB0Lmhhc05vVmFsdWUoKSkKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTWlz
c2luZyBpbmplY3RlZCBzY3JpcHQgZm9yIGdpdmVuIG9iamVjdElkIl9zKTsKICAgICB9Ci0gICAg
Ci0gICAgaW5qZWN0ZWRTY3JpcHQuc2F2ZVJlc3VsdChlcnJvclN0cmluZywgY2FsbEFyZ3VtZW50
LnRvSlNPTlN0cmluZygpLCBzYXZlZFJlc3VsdEluZGV4KTsKKworICAgIE9wdGlvbmFsPGludD4g
c2F2ZWRSZXN1bHRJbmRleDsKKworICAgIGluamVjdGVkU2NyaXB0LnNhdmVSZXN1bHQoZXJyb3JT
dHJpbmcsIGNhbGxBcmd1bWVudC0+dG9KU09OU3RyaW5nKCksIHNhdmVkUmVzdWx0SW5kZXgpOwor
CisgICAgaWYgKCFzYXZlZFJlc3VsdEluZGV4KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0
ZWQoZXJyb3JTdHJpbmcpOworCisgICAgcmV0dXJuIFdURk1vdmUoc2F2ZWRSZXN1bHRJbmRleCk7
CiB9CiAKLXZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50OjpzZXRTYXZlZFJlc3VsdEFsaWFzKEVy
cm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nKiBhbGlhcykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09y
PHZvaWQ+IEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6c2V0U2F2ZWRSZXN1bHRBbGlhcyhjb25zdCBT
dHJpbmcmIHNhdmVkUmVzdWx0QWxpYXMpCiB7Ci0gICAgT3B0aW9uYWw8U3RyaW5nPiBzYXZlZFJl
c3VsdEFsaWFzOwotICAgIGlmIChhbGlhcyAmJiAhYWxpYXMtPmlzRW1wdHkoKSkKLSAgICAgICAg
c2F2ZWRSZXN1bHRBbGlhcyA9ICphbGlhczsKICAgICBtX2luamVjdGVkU2NyaXB0TWFuYWdlci5p
bmplY3RlZFNjcmlwdEhvc3QoKS5zZXRTYXZlZFJlc3VsdEFsaWFzKHNhdmVkUmVzdWx0QWxpYXMp
OworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OnJl
bGVhc2VPYmplY3QoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIG9iamVjdElkKQorUHJvdG9j
b2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yUnVudGltZUFnZW50OjpyZWxlYXNlT2Jq
ZWN0KGNvbnN0IFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3RJZCYgb2JqZWN0SWQpCiB7
CiAgICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHQgPSBtX2luamVjdGVkU2NyaXB0TWFu
YWdlci5pbmplY3RlZFNjcmlwdEZvck9iamVjdElkKG9iamVjdElkKTsKICAgICBpZiAoIWluamVj
dGVkU2NyaXB0Lmhhc05vVmFsdWUoKSkKICAgICAgICAgaW5qZWN0ZWRTY3JpcHQucmVsZWFzZU9i
amVjdChvYmplY3RJZCk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvclJ1
bnRpbWVBZ2VudDo6cmVsZWFzZU9iamVjdEdyb3VwKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5n
JiBvYmplY3RHcm91cCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvclJ1
bnRpbWVBZ2VudDo6cmVsZWFzZU9iamVjdEdyb3VwKGNvbnN0IFN0cmluZyYgb2JqZWN0R3JvdXAp
CiB7CiAgICAgbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIucmVsZWFzZU9iamVjdEdyb3VwKG9iamVj
dEdyb3VwKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yUnVudGltZUFn
ZW50OjpnZXRSdW50aW1lVHlwZXNGb3JWYXJpYWJsZXNBdE9mZnNldHMoRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBjb25zdCBKU09OOjpBcnJheSYgbG9jYXRpb25zLCBSZWZQdHI8SlNPTjo6QXJy
YXlPZjxQcm90b2NvbDo6UnVudGltZTo6VHlwZURlc2NyaXB0aW9uPj4mIHR5cGVEZXNjcmlwdGlv
bnMpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6
UnVudGltZTo6VHlwZURlc2NyaXB0aW9uPj4+IEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6Z2V0UnVu
dGltZVR5cGVzRm9yVmFyaWFibGVzQXRPZmZzZXRzKFJlZjxKU09OOjpBcnJheT4mJiBsb2NhdGlv
bnMpCiB7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZlcmJvc2UgPSBmYWxzZTsKIAotICAg
IHR5cGVEZXNjcmlwdGlvbnMgPSBKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpUeXBl
RGVzY3JpcHRpb24+OjpjcmVhdGUoKTsKLSAgICBpZiAoIW1fdm0udHlwZVByb2ZpbGVyKCkpIHsK
LSAgICAgICAgZXJyb3JTdHJpbmcgPSAiVk0gaGFzIG5vIHR5cGUgaW5mb3JtYXRpb24iX3M7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKCFtX3ZtLnR5cGVQcm9maWxlcigpKQorICAg
ICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIlZNIGhhcyBubyB0eXBlIGluZm9ybWF0aW9uIl9z
KTsKKworICAgIGF1dG8gdHlwZXMgPSBKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpU
eXBlRGVzY3JpcHRpb24+OjpjcmVhdGUoKTsKIAogICAgIE1vbm90b25pY1RpbWUgc3RhcnQgPSBN
b25vdG9uaWNUaW1lOjpub3coKTsKICAgICBtX3ZtLnR5cGVQcm9maWxlckxvZygpLT5wcm9jZXNz
TG9nRW50cmllcyhtX3ZtLCAiVXNlciBRdWVyeSJfcyk7CiAKLSAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGxvY2F0aW9ucy5sZW5ndGgoKTsgaSsrKSB7Ci0gICAgICAgIFJlZlB0cjxKU09OOjpW
YWx1ZT4gdmFsdWUgPSBsb2NhdGlvbnMuZ2V0KGkpOwotICAgICAgICBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiBsb2NhdGlvbjsKLSAgICAgICAgaWYgKCF2YWx1ZS0+YXNPYmplY3QobG9jYXRpb24pKSB7
Ci0gICAgICAgICAgICBlcnJvclN0cmluZyA9ICJVbmV4cGVjdGVkIG5vbi1vYmplY3QgaXRlbSBp
biBsb2NhdGlvbnMiX3M7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGxvY2F0aW9ucy0+bGVuZ3RoKCk7IGkrKykgeworICAgICAgICBh
dXRvIGxvY2F0aW9uID0gbG9jYXRpb25zLT5nZXQoaSktPmFzT2JqZWN0KCk7CisgICAgICAgIGlm
ICghbG9jYXRpb24pCisgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIlVuZXhwZWN0
ZWQgbm9uLW9iamVjdCBpdGVtIGluIGxvY2F0aW9ucyJfcyk7CiAKLSAgICAgICAgaW50IGRlc2Ny
aXB0b3I7Ci0gICAgICAgIFN0cmluZyBzb3VyY2VJREFzU3RyaW5nOwotICAgICAgICBpbnQgZGl2
b3Q7Ci0gICAgICAgIGxvY2F0aW9uLT5nZXRJbnRlZ2VyKCJ0eXBlSW5mb3JtYXRpb25EZXNjcmlw
dG9yIl9zLCBkZXNjcmlwdG9yKTsKLSAgICAgICAgbG9jYXRpb24tPmdldFN0cmluZygic291cmNl
SUQiX3MsIHNvdXJjZUlEQXNTdHJpbmcpOwotICAgICAgICBsb2NhdGlvbi0+Z2V0SW50ZWdlcigi
ZGl2b3QiX3MsIGRpdm90KTsKKyAgICAgICAgYXV0byBkZXNjcmlwdG9yID0gbG9jYXRpb24tPmdl
dEludGVnZXIoUHJvdG9jb2w6OlJ1bnRpbWU6OlR5cGVMb2NhdGlvbjo6dHlwZUluZm9ybWF0aW9u
RGVzY3JpcHRvcktleSkudmFsdWVPcihUeXBlUHJvZmlsZXJTZWFyY2hEZXNjcmlwdG9yTm9ybWFs
KTsKKyAgICAgICAgYXV0byBzb3VyY2VJRFN0cmluZyA9IGxvY2F0aW9uLT5nZXRTdHJpbmcoUHJv
dG9jb2w6OlJ1bnRpbWU6OlR5cGVMb2NhdGlvbjo6c291cmNlSURLZXkpOworICAgICAgICBhdXRv
IGRpdm90ID0gbG9jYXRpb24tPmdldEludGVnZXIoUHJvdG9jb2w6OlJ1bnRpbWU6OlR5cGVMb2Nh
dGlvbjo6ZGl2b3RLZXkpLnZhbHVlT3IoMCk7CiAKICAgICAgICAgYm9vbCBva2F5OwotICAgICAg
ICBUeXBlTG9jYXRpb24qIHR5cGVMb2NhdGlvbiA9IG1fdm0udHlwZVByb2ZpbGVyKCktPmZpbmRM
b2NhdGlvbihkaXZvdCwgc291cmNlSURBc1N0cmluZy50b0ludFB0clN0cmljdCgmb2theSksIHN0
YXRpY19jYXN0PFR5cGVQcm9maWxlclNlYXJjaERlc2NyaXB0b3I+KGRlc2NyaXB0b3IpLCBtX3Zt
KTsKKyAgICAgICAgVHlwZUxvY2F0aW9uKiB0eXBlTG9jYXRpb24gPSBtX3ZtLnR5cGVQcm9maWxl
cigpLT5maW5kTG9jYXRpb24oZGl2b3QsIHNvdXJjZUlEU3RyaW5nLnRvSW50UHRyU3RyaWN0KCZv
a2F5KSwgc3RhdGljX2Nhc3Q8VHlwZVByb2ZpbGVyU2VhcmNoRGVzY3JpcHRvcj4oZGVzY3JpcHRv
ciksIG1fdm0pOwogICAgICAgICBBU1NFUlQob2theSk7CiAKICAgICAgICAgUmVmUHRyPFR5cGVT
ZXQ+IHR5cGVTZXQ7CkBAIC0zNzIsMTIgKzQxOSwxNCBAQCB2b2lkIEluc3BlY3RvclJ1bnRpbWVB
Z2VudDo6Z2V0UnVudGltZVR5cGVzRm9yVmFyaWFibGVzQXRPZmZzZXRzKEVycm9yU3RyaW5nJiBl
cgogICAgICAgICAgICAgZGVzY3JpcHRpb24tPnNldElzVHJ1bmNhdGVkKHR5cGVTZXQtPmlzT3Zl
cmZsb3duKCkpOwogICAgICAgICB9CiAKLSAgICAgICAgdHlwZURlc2NyaXB0aW9ucy0+YWRkSXRl
bShXVEZNb3ZlKGRlc2NyaXB0aW9uKSk7CisgICAgICAgIHR5cGVzLT5hZGRJdGVtKFdURk1vdmUo
ZGVzY3JpcHRpb24pKTsKICAgICB9CiAKICAgICBNb25vdG9uaWNUaW1lIGVuZCA9IE1vbm90b25p
Y1RpbWU6Om5vdygpOwogICAgIGlmICh2ZXJib3NlKQogICAgICAgICBkYXRhTG9nRigiSW5zcGVj
dG9yOjpnZXRSdW50aW1lVHlwZXNGb3JWYXJpYWJsZXNBdE9mZnNldHMgdG9vayAlbGZtc1xuIiwg
KGVuZCAtIHN0YXJ0KS5taWxsaXNlY29uZHMoKSk7CisKKyAgICByZXR1cm4gV1RGTW92ZSh0eXBl
cyk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50OjpkaWRDcmVhdGVGcm9udGVuZEFu
ZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9udGVuZFJvdXRlciosIEluc3BlY3Rvcjo6QmFja2VuZERp
c3BhdGNoZXIqKQpAQCAtMzg5LDI4ICs0MzgsMzUgQEAgdm9pZCBJbnNwZWN0b3JSdW50aW1lQWdl
bnQ6OndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKERpc2Nvbm5lY3RSZWFzb24gcmVhc28K
ICAgICBpZiAocmVhc29uICE9IERpc2Nvbm5lY3RSZWFzb246Okluc3BlY3RlZFRhcmdldERlc3Ry
b3llZCAmJiBtX2lzVHlwZVByb2ZpbGluZ0VuYWJsZWQpCiAgICAgICAgIHNldFR5cGVQcm9maWxl
ckVuYWJsZWRTdGF0ZShmYWxzZSk7CiAKLSAgICBTdHJpbmcgdW51c2VkOwotICAgIGRpc2FibGUo
dW51c2VkKTsKKyAgICBkaXNhYmxlKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50
OjplbmFibGVUeXBlUHJvZmlsZXIoRXJyb3JTdHJpbmcmKQorUHJvdG9jb2w6OkVycm9yU3RyaW5n
T3I8dm9pZD4gSW5zcGVjdG9yUnVudGltZUFnZW50OjplbmFibGVUeXBlUHJvZmlsZXIoKQogewog
ICAgIHNldFR5cGVQcm9maWxlckVuYWJsZWRTdGF0ZSh0cnVlKTsKKworICAgIHJldHVybiB7IH07
CiB9CiAKLXZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50OjpkaXNhYmxlVHlwZVByb2ZpbGVyKEVy
cm9yU3RyaW5nJikKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvclJ1bnRp
bWVBZ2VudDo6ZGlzYWJsZVR5cGVQcm9maWxlcigpCiB7CiAgICAgc2V0VHlwZVByb2ZpbGVyRW5h
YmxlZFN0YXRlKGZhbHNlKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9y
UnVudGltZUFnZW50OjplbmFibGVDb250cm9sRmxvd1Byb2ZpbGVyKEVycm9yU3RyaW5nJikKK1By
b3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6ZW5hYmxl
Q29udHJvbEZsb3dQcm9maWxlcigpCiB7CiAgICAgc2V0Q29udHJvbEZsb3dQcm9maWxlckVuYWJs
ZWRTdGF0ZSh0cnVlKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yUnVu
dGltZUFnZW50OjpkaXNhYmxlQ29udHJvbEZsb3dQcm9maWxlcihFcnJvclN0cmluZyYpCitQcm90
b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmRpc2FibGVD
b250cm9sRmxvd1Byb2ZpbGVyKCkKIHsKICAgICBzZXRDb250cm9sRmxvd1Byb2ZpbGVyRW5hYmxl
ZFN0YXRlKGZhbHNlKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKIHZvaWQgSW5zcGVjdG9yUnVu
dGltZUFnZW50OjpzZXRUeXBlUHJvZmlsZXJFbmFibGVkU3RhdGUoYm9vbCBpc1R5cGVQcm9maWxp
bmdFbmFibGVkKQpAQCAtNDQyLDE5ICs0OTgsMTMgQEAgdm9pZCBJbnNwZWN0b3JSdW50aW1lQWdl
bnQ6OnNldENvbnRyb2xGbG93UHJvZmlsZXJFbmFibGVkU3RhdGUoYm9vbCBpc0NvbnRyb2xGbG8K
ICAgICB9KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmdldEJhc2ljQmxvY2tz
KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBzb3VyY2VJREFzU3RyaW5n
LCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UnVudGltZTo6QmFzaWNCbG9jaz4+JiBi
YXNpY0Jsb2NrcykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPFBy
b3RvY29sOjpSdW50aW1lOjpCYXNpY0Jsb2NrPj4+IEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6Z2V0
QmFzaWNCbG9ja3MoY29uc3QgU3RyaW5nJiBzb3VyY2VJRCkKIHsKLSAgICBpZiAoIW1fdm0uY29u
dHJvbEZsb3dQcm9maWxlcigpKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIlZNIGhhcyBubyBj
b250cm9sIGZsb3cgaW5mb3JtYXRpb24iX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAg
aWYgKCFtX3ZtLmNvbnRyb2xGbG93UHJvZmlsZXIoKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4
cGVjdGVkKCJWTSBoYXMgbm8gY29udHJvbCBmbG93IGluZm9ybWF0aW9uIl9zKTsKIAotICAgIGJv
b2wgb2theTsKLSAgICBpbnRwdHJfdCBzb3VyY2VJRCA9IHNvdXJjZUlEQXNTdHJpbmcudG9JbnRQ
dHJTdHJpY3QoJm9rYXkpOwotICAgIEFTU0VSVChva2F5KTsKLSAgICBjb25zdCBWZWN0b3I8QmFz
aWNCbG9ja1JhbmdlPiYgYmFzaWNCbG9ja1JhbmdlcyA9IG1fdm0uY29udHJvbEZsb3dQcm9maWxl
cigpLT5nZXRCYXNpY0Jsb2Nrc0ZvclNvdXJjZUlEKHNvdXJjZUlELCBtX3ZtKTsKLSAgICBiYXNp
Y0Jsb2NrcyA9IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OkJhc2ljQmxvY2s+Ojpj
cmVhdGUoKTsKLSAgICBmb3IgKGNvbnN0IEJhc2ljQmxvY2tSYW5nZSYgYmxvY2sgOiBiYXNpY0Js
b2NrUmFuZ2VzKSB7CisgICAgYXV0byBiYXNpY0Jsb2NrcyA9IEpTT046OkFycmF5T2Y8UHJvdG9j
b2w6OlJ1bnRpbWU6OkJhc2ljQmxvY2s+OjpjcmVhdGUoKTsKKyAgICBmb3IgKGNvbnN0IGF1dG8m
IGJsb2NrIDogbV92bS5jb250cm9sRmxvd1Byb2ZpbGVyKCktPmdldEJhc2ljQmxvY2tzRm9yU291
cmNlSUQoc291cmNlSUQudG9JbnRQdHIoKSwgbV92bSkpIHsKICAgICAgICAgYXV0byBsb2NhdGlv
biA9IFByb3RvY29sOjpSdW50aW1lOjpCYXNpY0Jsb2NrOjpjcmVhdGUoKQogICAgICAgICAgICAg
LnNldFN0YXJ0T2Zmc2V0KGJsb2NrLm1fc3RhcnRPZmZzZXQpCiAgICAgICAgICAgICAuc2V0RW5k
T2Zmc2V0KGJsb2NrLm1fZW5kT2Zmc2V0KQpAQCAtNDYzLDYgKzUxMyw3IEBAIHZvaWQgSW5zcGVj
dG9yUnVudGltZUFnZW50OjpnZXRCYXNpY0Jsb2NrcyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcs
IGNvbnN0IFN0cmluCiAgICAgICAgICAgICAucmVsZWFzZSgpOwogICAgICAgICBiYXNpY0Jsb2Nr
cy0+YWRkSXRlbShXVEZNb3ZlKGxvY2F0aW9uKSk7CiAgICAgfQorICAgIHJldHVybiBXVEZNb3Zl
KGJhc2ljQmxvY2tzKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JSdW50aW1l
QWdlbnQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rv
clJ1bnRpbWVBZ2VudC5oCmluZGV4IDE3NTYxNTExYWY5NzliM2IyYjc5MWM3NGRkNzI3ZDRhZTMx
MjRlY2UuLmY0MDI5NDZmZjZkYWE4OGM0ODVkMDk3YWFjNjFjMWQ5ZWJmYzA5YWEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclJ1bnRp
bWVBZ2VudC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0lu
c3BlY3RvclJ1bnRpbWVBZ2VudC5oCkBAIC00NSw3ICs0NSw2IEBAIG5hbWVzcGFjZSBJbnNwZWN0
b3IgewogCiBjbGFzcyBJbmplY3RlZFNjcmlwdDsKIGNsYXNzIEluamVjdGVkU2NyaXB0TWFuYWdl
cjsKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwogCiBjbGFzcyBKU19FWFBPUlRfUFJJVkFU
RSBJbnNwZWN0b3JSdW50aW1lQWdlbnQgOiBwdWJsaWMgSW5zcGVjdG9yQWdlbnRCYXNlLCBwdWJs
aWMgUnVudGltZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7CiAgICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoSW5zcGVjdG9yUnVudGltZUFnZW50KTsKQEAgLTU4LDMzICs1NywzMyBAQCBwdWJsaWM6
CiAgICAgdm9pZCB3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChEaXNjb25uZWN0UmVhc29u
KSBmaW5hbDsKIAogICAgIC8vIFJ1bnRpbWVCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIKLSAgICB2
b2lkIGVuYWJsZShFcnJvclN0cmluZyYpIG92ZXJyaWRlIHsgbV9lbmFibGVkID0gdHJ1ZTsgfQot
ICAgIHZvaWQgZGlzYWJsZShFcnJvclN0cmluZyYpIG92ZXJyaWRlIHsgbV9lbmFibGVkID0gZmFs
c2U7IH0KLSAgICB2b2lkIHBhcnNlKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBleHByZXNz
aW9uLCBQcm90b2NvbDo6UnVudGltZTo6U3ludGF4RXJyb3JUeXBlKiByZXN1bHQsIE9wdGlvbmFs
PFN0cmluZz4mIG1lc3NhZ2UsIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6RXJyb3JSYW5nZT4m
KSBmaW5hbDsKLSAgICB2b2lkIGV2YWx1YXRlKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBl
eHByZXNzaW9uLCBjb25zdCBTdHJpbmcqIG9iamVjdEdyb3VwLCBjb25zdCBib29sKiBpbmNsdWRl
Q29tbWFuZExpbmVBUEksIGNvbnN0IGJvb2wqIGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRl
Q29uc29sZSwgY29uc3QgaW50KiBleGVjdXRpb25Db250ZXh0SWQsIGNvbnN0IGJvb2wqIHJldHVy
bkJ5VmFsdWUsIGNvbnN0IGJvb2wqIGdlbmVyYXRlUHJldmlldywgY29uc3QgYm9vbCogc2F2ZVJl
c3VsdCwgY29uc3QgYm9vbCogZW11bGF0ZVVzZXJHZXN0dXJlLCBSZWZQdHI8UHJvdG9jb2w6OlJ1
bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3VsdCwgT3B0aW9uYWw8Ym9vbD4mIHdhc1Rocm93biwg
T3B0aW9uYWw8aW50PiYgc2F2ZWRSZXN1bHRJbmRleCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBhd2Fp
dFByb21pc2UoY29uc3QgU3RyaW5nJiBwcm9taXNlT2JqZWN0SWQsIGNvbnN0IGJvb2wqIHJldHVy
bkJ5VmFsdWUsIGNvbnN0IGJvb2wqIGdlbmVyYXRlUHJldmlldywgY29uc3QgYm9vbCogc2F2ZVJl
c3VsdCwgUmVmPEF3YWl0UHJvbWlzZUNhbGxiYWNrPiYmKSBmaW5hbDsKLSAgICB2b2lkIGNhbGxG
dW5jdGlvbk9uKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBvYmplY3RJZCwgY29uc3QgU3Ry
aW5nJiBleHByZXNzaW9uLCBjb25zdCBKU09OOjpBcnJheSogb3B0aW9uYWxBcmd1bWVudHMsIGNv
bnN0IGJvb2wqIGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29sZSwgY29uc3QgYm9v
bCogcmV0dXJuQnlWYWx1ZSwgY29uc3QgYm9vbCogZ2VuZXJhdGVQcmV2aWV3LCBjb25zdCBib29s
KiBlbXVsYXRlVXNlckdlc3R1cmUsIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2Jq
ZWN0PiYgcmVzdWx0LCBPcHRpb25hbDxib29sPiYgd2FzVGhyb3duKSBvdmVycmlkZTsKLSAgICB2
b2lkIHJlbGVhc2VPYmplY3QoRXJyb3JTdHJpbmcmLCBjb25zdCBFcnJvclN0cmluZyYgb2JqZWN0
SWQpIGZpbmFsOwotICAgIHZvaWQgZ2V0UHJldmlldyhFcnJvclN0cmluZyYsIGNvbnN0IFN0cmlu
ZyYgb2JqZWN0SWQsIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6T2JqZWN0UHJldmlldz4mKSBm
aW5hbDsKLSAgICB2b2lkIGdldFByb3BlcnRpZXMoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcm
IG9iamVjdElkLCBjb25zdCBib29sKiBvd25Qcm9wZXJ0aWVzLCBjb25zdCBpbnQqIGZldGNoU3Rh
cnQsIGNvbnN0IGludCogZmV0Y2hDb3VudCwgY29uc3QgYm9vbCogZ2VuZXJhdGVQcmV2aWV3LCBS
ZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UnVudGltZTo6UHJvcGVydHlEZXNjcmlwdG9y
Pj4mIHByb3BlcnRpZXMsIFJlZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpJ
bnRlcm5hbFByb3BlcnR5RGVzY3JpcHRvcj4+JiBpbnRlcm5hbFByb3BlcnRpZXMpIGZpbmFsOwot
ICAgIHZvaWQgZ2V0RGlzcGxheWFibGVQcm9wZXJ0aWVzKEVycm9yU3RyaW5nJiwgY29uc3QgU3Ry
aW5nJiBvYmplY3RJZCwgY29uc3QgaW50KiBmZXRjaFN0YXJ0LCBjb25zdCBpbnQqIGZldGNoQ291
bnQsIGNvbnN0IGJvb2wqIGdlbmVyYXRlUHJldmlldywgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJv
dG9jb2w6OlJ1bnRpbWU6OlByb3BlcnR5RGVzY3JpcHRvcj4+JiBwcm9wZXJ0aWVzLCBSZWZQdHI8
SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UnVudGltZTo6SW50ZXJuYWxQcm9wZXJ0eURlc2NyaXB0
b3I+PiYgaW50ZXJuYWxQcm9wZXJ0aWVzKSBmaW5hbDsKLSAgICB2b2lkIGdldENvbGxlY3Rpb25F
bnRyaWVzKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBvYmplY3RJZCwgY29uc3QgU3RyaW5n
KiBvYmplY3RHcm91cCwgY29uc3QgaW50KiBmZXRjaFN0YXJ0LCBjb25zdCBpbnQqIGZldGNoQ291
bnQsIFJlZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpDb2xsZWN0aW9uRW50
cnk+PiYgZW50cmllcykgZmluYWw7Ci0gICAgdm9pZCBzYXZlUmVzdWx0KEVycm9yU3RyaW5nJiwg
Y29uc3QgSlNPTjo6T2JqZWN0JiBjYWxsQXJndW1lbnQsIGNvbnN0IGludCogZXhlY3V0aW9uQ29u
dGV4dElkLCBPcHRpb25hbDxpbnQ+JiBzYXZlZFJlc3VsdEluZGV4KSBmaW5hbDsKLSAgICB2b2lk
IHNldFNhdmVkUmVzdWx0QWxpYXMoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcqIGFsaWFzKSBm
aW5hbDsKLSAgICB2b2lkIHJlbGVhc2VPYmplY3RHcm91cChFcnJvclN0cmluZyYsIGNvbnN0IFN0
cmluZyYgb2JqZWN0R3JvdXApIGZpbmFsOwotICAgIHZvaWQgZ2V0UnVudGltZVR5cGVzRm9yVmFy
aWFibGVzQXRPZmZzZXRzKEVycm9yU3RyaW5nJiwgY29uc3QgSlNPTjo6QXJyYXkmIGxvY2F0aW9u
cywgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OlR5cGVEZXNjcmlwdGlv
bj4+JikgZmluYWw7Ci0gICAgdm9pZCBlbmFibGVUeXBlUHJvZmlsZXIoRXJyb3JTdHJpbmcmKSBm
aW5hbDsKLSAgICB2b2lkIGRpc2FibGVUeXBlUHJvZmlsZXIoRXJyb3JTdHJpbmcmKSBmaW5hbDsK
LSAgICB2b2lkIGVuYWJsZUNvbnRyb2xGbG93UHJvZmlsZXIoRXJyb3JTdHJpbmcmKSBmaW5hbDsK
LSAgICB2b2lkIGRpc2FibGVDb250cm9sRmxvd1Byb2ZpbGVyKEVycm9yU3RyaW5nJikgZmluYWw7
Ci0gICAgdm9pZCBnZXRCYXNpY0Jsb2NrcyhFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgaW5f
c291cmNlSUQsIFJlZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpCYXNpY0Js
b2NrPj4mIG91dF9iYXNpY0Jsb2NrcykgZmluYWw7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5n
T3I8dm9pZD4gZW5hYmxlKCkgb3ZlcnJpZGU7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8
dm9pZD4gZGlzYWJsZSgpIG92ZXJyaWRlOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHN0
ZDo6dHVwbGU8UHJvdG9jb2w6OlJ1bnRpbWU6OlN5bnRheEVycm9yVHlwZSwgU3RyaW5nIC8qIG1l
c3NhZ2UgKi8sIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6RXJyb3JSYW5nZT4+PiBwYXJzZShj
b25zdCBTdHJpbmcmIGV4cHJlc3Npb24pIGZpbmFsOworICAgIFByb3RvY29sOjpFcnJvclN0cmlu
Z09yPHN0ZDo6dHVwbGU8UmVmPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+LCBPcHRp
b25hbDxib29sPiAvKiB3YXNUaHJvd24gKi8sIE9wdGlvbmFsPGludD4gLyogc2F2ZWRSZXN1bHRJ
bmRleCAqLz4+IGV2YWx1YXRlKGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgY29uc3QgU3RyaW5n
JiBvYmplY3RHcm91cCwgT3B0aW9uYWw8Ym9vbD4mJiBpbmNsdWRlQ29tbWFuZExpbmVBUEksIE9w
dGlvbmFsPGJvb2w+JiYgZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xlLCBPcHRp
b25hbDxQcm90b2NvbDo6UnVudGltZTo6RXhlY3V0aW9uQ29udGV4dElkPiYmLCBPcHRpb25hbDxi
b29sPiYmIHJldHVybkJ5VmFsdWUsIE9wdGlvbmFsPGJvb2w+JiYgZ2VuZXJhdGVQcmV2aWV3LCBP
cHRpb25hbDxib29sPiYmIHNhdmVSZXN1bHQsIE9wdGlvbmFsPGJvb2w+JiYgZW11bGF0ZVVzZXJH
ZXN0dXJlKSBvdmVycmlkZTsKKyAgICB2b2lkIGF3YWl0UHJvbWlzZShjb25zdCBQcm90b2NvbDo6
UnVudGltZTo6UmVtb3RlT2JqZWN0SWQmLCBPcHRpb25hbDxib29sPiYmIHJldHVybkJ5VmFsdWUs
IE9wdGlvbmFsPGJvb2w+JiYgZ2VuZXJhdGVQcmV2aWV3LCBPcHRpb25hbDxib29sPiYmIHNhdmVS
ZXN1bHQsIFJlZjxBd2FpdFByb21pc2VDYWxsYmFjaz4mJikgZmluYWw7CisgICAgUHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8c3RkOjp0dXBsZTxSZWY8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9i
amVjdD4sIE9wdGlvbmFsPGJvb2w+IC8qIHdhc1Rocm93biAqLz4+IGNhbGxGdW5jdGlvbk9uKGNv
bnN0IFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3RJZCYsIGNvbnN0IFN0cmluZyYgZnVu
Y3Rpb25EZWNsYXJhdGlvbiwgUmVmUHRyPEpTT046OkFycmF5PiYmIGFyZ3VtZW50cywgT3B0aW9u
YWw8Ym9vbD4mJiBkb05vdFBhdXNlT25FeGNlcHRpb25zQW5kTXV0ZUNvbnNvbGUsIE9wdGlvbmFs
PGJvb2w+JiYgcmV0dXJuQnlWYWx1ZSwgT3B0aW9uYWw8Ym9vbD4mJiBnZW5lcmF0ZVByZXZpZXcs
IE9wdGlvbmFsPGJvb2w+JiYgZW11bGF0ZVVzZXJHZXN0dXJlKSBvdmVycmlkZTsKKyAgICBQcm90
b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiByZWxlYXNlT2JqZWN0KGNvbnN0IFByb3RvY29sOjpS
dW50aW1lOjpSZW1vdGVPYmplY3RJZCYpIGZpbmFsOworICAgIFByb3RvY29sOjpFcnJvclN0cmlu
Z09yPFJlZjxQcm90b2NvbDo6UnVudGltZTo6T2JqZWN0UHJldmlldz4+IGdldFByZXZpZXcoY29u
c3QgUHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdElkJikgZmluYWw7CisgICAgUHJvdG9j
b2w6OkVycm9yU3RyaW5nT3I8c3RkOjp0dXBsZTxSZWY8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6
UnVudGltZTo6UHJvcGVydHlEZXNjcmlwdG9yPj4sIFJlZlB0cjxKU09OOjpBcnJheU9mPFByb3Rv
Y29sOjpSdW50aW1lOjpJbnRlcm5hbFByb3BlcnR5RGVzY3JpcHRvcj4+Pj4gZ2V0UHJvcGVydGll
cyhjb25zdCBQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0SWQmLCBPcHRpb25hbDxib29s
PiYmIG93blByb3BlcnRpZXMsIE9wdGlvbmFsPGludD4mJiBmZXRjaFN0YXJ0LCBPcHRpb25hbDxp
bnQ+JiYgZmV0Y2hDb3VudCwgT3B0aW9uYWw8Ym9vbD4mJiBnZW5lcmF0ZVByZXZpZXcpIGZpbmFs
OworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHN0ZDo6dHVwbGU8UmVmPEpTT046OkFycmF5
T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OlByb3BlcnR5RGVzY3JpcHRvcj4+LCBSZWZQdHI8SlNPTjo6
QXJyYXlPZjxQcm90b2NvbDo6UnVudGltZTo6SW50ZXJuYWxQcm9wZXJ0eURlc2NyaXB0b3I+Pj4+
IGdldERpc3BsYXlhYmxlUHJvcGVydGllcyhjb25zdCBQcm90b2NvbDo6UnVudGltZTo6UmVtb3Rl
T2JqZWN0SWQmLCBPcHRpb25hbDxpbnQ+JiYgZmV0Y2hTdGFydCwgT3B0aW9uYWw8aW50PiYmIGZl
dGNoQ291bnQsIE9wdGlvbmFsPGJvb2w+JiYgZ2VuZXJhdGVQcmV2aWV3KSBmaW5hbDsKKyAgICBQ
cm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UnVudGlt
ZTo6Q29sbGVjdGlvbkVudHJ5Pj4+IGdldENvbGxlY3Rpb25FbnRyaWVzKGNvbnN0IFByb3RvY29s
OjpSdW50aW1lOjpSZW1vdGVPYmplY3RJZCYsIGNvbnN0IFN0cmluZyYgb2JqZWN0R3JvdXAsIE9w
dGlvbmFsPGludD4mJiBmZXRjaFN0YXJ0LCBPcHRpb25hbDxpbnQ+JiYgZmV0Y2hDb3VudCkgZmlu
YWw7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8T3B0aW9uYWw8aW50PiAvKiBzYXZlUmVz
dWx0SW5kZXggKi8+IHNhdmVSZXN1bHQoUmVmPEpTT046Ok9iamVjdD4mJiBjYWxsQXJndW1lbnQs
IE9wdGlvbmFsPFByb3RvY29sOjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0SWQ+JiYpIGZpbmFs
OworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHNldFNhdmVkUmVzdWx0QWxpYXMo
Y29uc3QgU3RyaW5nJikgZmluYWw7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4g
cmVsZWFzZU9iamVjdEdyb3VwKGNvbnN0IFN0cmluZyYpIGZpbmFsOworICAgIFByb3RvY29sOjpF
cnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpUeXBlRGVz
Y3JpcHRpb24+Pj4gZ2V0UnVudGltZVR5cGVzRm9yVmFyaWFibGVzQXRPZmZzZXRzKFJlZjxKU09O
OjpBcnJheT4mJiBsb2NhdGlvbnMpIGZpbmFsOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09y
PHZvaWQ+IGVuYWJsZVR5cGVQcm9maWxlcigpIGZpbmFsOworICAgIFByb3RvY29sOjpFcnJvclN0
cmluZ09yPHZvaWQ+IGRpc2FibGVUeXBlUHJvZmlsZXIoKSBmaW5hbDsKKyAgICBQcm90b2NvbDo6
RXJyb3JTdHJpbmdPcjx2b2lkPiBlbmFibGVDb250cm9sRmxvd1Byb2ZpbGVyKCkgZmluYWw7Cisg
ICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZGlzYWJsZUNvbnRyb2xGbG93UHJvZmls
ZXIoKSBmaW5hbDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SlNPTjo6QXJyYXlP
ZjxQcm90b2NvbDo6UnVudGltZTo6QmFzaWNCbG9jaz4+PiBnZXRCYXNpY0Jsb2Nrcyhjb25zdCBT
dHJpbmcmIHNvdXJjZUlEKSBmaW5hbDsKIAogcHJvdGVjdGVkOgogICAgIEluc3BlY3RvclJ1bnRp
bWVBZ2VudChBZ2VudENvbnRleHQmKTsKIAogICAgIEluamVjdGVkU2NyaXB0TWFuYWdlciYgaW5q
ZWN0ZWRTY3JpcHRNYW5hZ2VyKCkgeyByZXR1cm4gbV9pbmplY3RlZFNjcmlwdE1hbmFnZXI7IH0K
IAotICAgIHZpcnR1YWwgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHRGb3JFdmFsKEVycm9y
U3RyaW5nJiwgY29uc3QgaW50KiBleGVjdXRpb25Db250ZXh0SWQpID0gMDsKKyAgICB2aXJ0dWFs
IEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0Rm9yRXZhbChQcm90b2NvbDo6RXJyb3JTdHJp
bmcmLCBPcHRpb25hbDxQcm90b2NvbDo6UnVudGltZTo6RXhlY3V0aW9uQ29udGV4dElkPiYmKSA9
IDA7CiAKICAgICB2aXJ0dWFsIHZvaWQgbXV0ZUNvbnNvbGUoKSA9IDA7CiAgICAgdmlydHVhbCB2
b2lkIHVubXV0ZUNvbnNvbGUoKSA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JTY3JpcHRQcm9maWxlckFnZW50LmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclNjcmlwdFByb2Zp
bGVyQWdlbnQuY3BwCmluZGV4IDY4MTNlMDc1YTk0YjM2MzFmYjUyZWFkZDljZTc5OWI5YzdkY2Q4
ZGUuLjdlYjUxYWYzMGZkYTgwMmNhODFhOGIxMGVjZDdlNmViZWUyMjExN2MgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclNjcmlwdFBy
b2ZpbGVyQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdl
bnRzL0luc3BlY3RvclNjcmlwdFByb2ZpbGVyQWdlbnQuY3BwCkBAIC02NCwxMCArNjQsMTAgQEAg
dm9pZCBJbnNwZWN0b3JTY3JpcHRQcm9maWxlckFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5k
QmFja2VuZChEaXNjb25uZWN0UmVhc28KICAgICB9CiB9CiAKLXZvaWQgSW5zcGVjdG9yU2NyaXB0
UHJvZmlsZXJBZ2VudDo6c3RhcnRUcmFja2luZyhFcnJvclN0cmluZyYsIGNvbnN0IGJvb2wqIGlu
Y2x1ZGVTYW1wbGVzKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yU2Ny
aXB0UHJvZmlsZXJBZ2VudDo6c3RhcnRUcmFja2luZyhPcHRpb25hbDxib29sPiYmIGluY2x1ZGVT
YW1wbGVzKQogewogICAgIGlmIChtX3RyYWNraW5nKQotICAgICAgICByZXR1cm47CisgICAgICAg
IHJldHVybiB7IH07CiAKICAgICBtX3RyYWNraW5nID0gdHJ1ZTsKIApAQCAtOTEsMTIgKzkxLDE0
IEBAIHZvaWQgSW5zcGVjdG9yU2NyaXB0UHJvZmlsZXJBZ2VudDo6c3RhcnRUcmFja2luZyhFcnJv
clN0cmluZyYsIGNvbnN0IGJvb2wqIGluY2x1CiAgICAgbV9lbnZpcm9ubWVudC5kZWJ1Z2dlcigp
LnNldFByb2ZpbGluZ0NsaWVudCh0aGlzKTsKIAogICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT50
cmFja2luZ1N0YXJ0KHN0b3B3YXRjaC5lbGFwc2VkVGltZSgpLnNlY29uZHMoKSk7CisKKyAgICBy
ZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvclNjcmlwdFByb2ZpbGVyQWdlbnQ6OnN0b3BU
cmFja2luZyhFcnJvclN0cmluZyYpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNw
ZWN0b3JTY3JpcHRQcm9maWxlckFnZW50OjpzdG9wVHJhY2tpbmcoKQogewogICAgIGlmICghbV90
cmFja2luZykKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4geyB9OwogCiAgICAgbV90
cmFja2luZyA9IGZhbHNlOwogICAgIG1fYWN0aXZlRXZhbHVhdGVTY3JpcHQgPSBmYWxzZTsKQEAg
LTEwNCw2ICsxMDYsOCBAQCB2b2lkIEluc3BlY3RvclNjcmlwdFByb2ZpbGVyQWdlbnQ6OnN0b3BU
cmFja2luZyhFcnJvclN0cmluZyYpCiAgICAgbV9lbnZpcm9ubWVudC5kZWJ1Z2dlcigpLnNldFBy
b2ZpbGluZ0NsaWVudChudWxscHRyKTsKIAogICAgIHRyYWNraW5nQ29tcGxldGUoKTsKKworICAg
IHJldHVybiB7IH07CiB9CiAKIGJvb2wgSW5zcGVjdG9yU2NyaXB0UHJvZmlsZXJBZ2VudDo6aXNB
bHJlYWR5UHJvZmlsaW5nKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclNjcmlwdFByb2ZpbGVyQWdlbnQuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclNjcmlwdFByb2ZpbGVy
QWdlbnQuaAppbmRleCA3ZTdjZGM5Zjk3NTA2Nzc2NjI5NzQwYWFkY2I1NGZiNGRhMDBkMDhmLi4y
OGY1NDg4ZDBhZmMwNjNiMjlkZDBmZjdjZGQ1MGU1ZDUwYTY0Nzg3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JTY3JpcHRQcm9maWxl
ckFnZW50LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5z
cGVjdG9yU2NyaXB0UHJvZmlsZXJBZ2VudC5oCkBAIC0zNywyNyArMzcsMjUgQEAgY2xhc3MgUHJv
ZmlsZTsKIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3Ry
aW5nOwotCiBjbGFzcyBKU19FWFBPUlRfUFJJVkFURSBJbnNwZWN0b3JTY3JpcHRQcm9maWxlckFn
ZW50IGZpbmFsIDogcHVibGljIEluc3BlY3RvckFnZW50QmFzZSwgcHVibGljIFNjcmlwdFByb2Zp
bGVyQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyLCBwdWJsaWMgSlNDOjpEZWJ1Z2dlcjo6UHJvZmls
aW5nQ2xpZW50IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbnNwZWN0b3JTY3JpcHRQcm9m
aWxlckFnZW50KTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBJ
bnNwZWN0b3JTY3JpcHRQcm9maWxlckFnZW50KEFnZW50Q29udGV4dCYpOwotICAgIH5JbnNwZWN0
b3JTY3JpcHRQcm9maWxlckFnZW50KCkgZmluYWw7CisgICAgfkluc3BlY3RvclNjcmlwdFByb2Zp
bGVyQWdlbnQoKTsKIAogICAgIC8vIEluc3BlY3RvckFnZW50QmFzZQotICAgIHZvaWQgZGlkQ3Jl
YXRlRnJvbnRlbmRBbmRCYWNrZW5kKEZyb250ZW5kUm91dGVyKiwgQmFja2VuZERpc3BhdGNoZXIq
KSBmaW5hbDsKLSAgICB2b2lkIHdpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKERpc2Nvbm5l
Y3RSZWFzb24pIGZpbmFsOworICAgIHZvaWQgZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEZy
b250ZW5kUm91dGVyKiwgQmFja2VuZERpc3BhdGNoZXIqKTsKKyAgICB2b2lkIHdpbGxEZXN0cm95
RnJvbnRlbmRBbmRCYWNrZW5kKERpc2Nvbm5lY3RSZWFzb24pOwogCiAgICAgLy8gU2NyaXB0UHJv
ZmlsZXJCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIKLSAgICB2b2lkIHN0YXJ0VHJhY2tpbmcoRXJy
b3JTdHJpbmcmLCBjb25zdCBib29sKiBpbmNsdWRlU2FtcGxlcykgZmluYWw7Ci0gICAgdm9pZCBz
dG9wVHJhY2tpbmcoRXJyb3JTdHJpbmcmKSBmaW5hbDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJp
bmdPcjx2b2lkPiBzdGFydFRyYWNraW5nKE9wdGlvbmFsPGJvb2w+JiYgaW5jbHVkZVNhbXBsZXMp
OworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHN0b3BUcmFja2luZygpOwogCiAg
ICAgLy8gSlNDOjpEZWJ1Z2dlcjo6UHJvZmlsaW5nQ2xpZW50Ci0gICAgYm9vbCBpc0FscmVhZHlQ
cm9maWxpbmcoKSBjb25zdCBmaW5hbDsKLSAgICBTZWNvbmRzIHdpbGxFdmFsdWF0ZVNjcmlwdCgp
IGZpbmFsOwotICAgIHZvaWQgZGlkRXZhbHVhdGVTY3JpcHQoU2Vjb25kcywgSlNDOjpQcm9maWxp
bmdSZWFzb24pIGZpbmFsOworICAgIGJvb2wgaXNBbHJlYWR5UHJvZmlsaW5nKCkgY29uc3Q7Cisg
ICAgU2Vjb25kcyB3aWxsRXZhbHVhdGVTY3JpcHQoKTsKKyAgICB2b2lkIGRpZEV2YWx1YXRlU2Ny
aXB0KFNlY29uZHMsIEpTQzo6UHJvZmlsaW5nUmVhc29uKTsKIAogcHJpdmF0ZToKICAgICB2b2lk
IGFkZEV2ZW50KFNlY29uZHMgc3RhcnRUaW1lLCBTZWNvbmRzIGVuZFRpbWUsIEpTQzo6UHJvZmls
aW5nUmVhc29uKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
YWdlbnRzL0luc3BlY3RvclRhcmdldEFnZW50LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclRhcmdldEFnZW50LmNwcAppbmRleCA4ZmNiNWExZTU1
NzUwZDMyNWE4NDgyNGQ4NmM0OWNmZTZmYjA0MjY4Li41MDhlYjAyZWM5NWM1MjQwODM4NGExZTJi
Nzc2NDhhZmQ0MjZkZDlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL2FnZW50cy9JbnNwZWN0b3JUYXJnZXRBZ2VudC5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yVGFyZ2V0QWdlbnQuY3BwCkBAIC01NSwz
NiArNTUsMzYgQEAgdm9pZCBJbnNwZWN0b3JUYXJnZXRBZ2VudDo6d2lsbERlc3Ryb3lGcm9udGVu
ZEFuZEJhY2tlbmQoRGlzY29ubmVjdFJlYXNvbikKICAgICBtX3Nob3VsZFBhdXNlT25TdGFydCA9
IGZhbHNlOwogfQogCi12b2lkIEluc3BlY3RvclRhcmdldEFnZW50OjpzZXRQYXVzZU9uU3RhcnQo
RXJyb3JTdHJpbmcmLCBib29sIHBhdXNlT25TdGFydCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09y
PHZvaWQ+IEluc3BlY3RvclRhcmdldEFnZW50OjpzZXRQYXVzZU9uU3RhcnQoYm9vbCBwYXVzZU9u
U3RhcnQpCiB7CiAgICAgbV9zaG91bGRQYXVzZU9uU3RhcnQgPSBwYXVzZU9uU3RhcnQ7CisKKyAg
ICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvclRhcmdldEFnZW50OjpyZXN1bWUoRXJy
b3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHRhcmdldElkKQorUHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yVGFyZ2V0QWdlbnQ6OnJlc3VtZShjb25zdCBT
dHJpbmcmIHRhcmdldElkKQogewogICAgIGF1dG8qIHRhcmdldCA9IG1fdGFyZ2V0cy5nZXQodGFy
Z2V0SWQpOwotICAgIGlmICghdGFyZ2V0KSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIk1pc3Np
bmcgdGFyZ2V0IGZvciBnaXZlbiB0YXJnZXRJZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
KyAgICBpZiAoIXRhcmdldCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJNaXNzaW5n
IHRhcmdldCBmb3IgZ2l2ZW4gdGFyZ2V0SWQiX3MpOwogCi0gICAgaWYgKCF0YXJnZXQtPmlzUGF1
c2VkKCkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiVGFyZ2V0IGZvciBnaXZlbiB0YXJnZXRJ
ZCBpcyBub3QgcGF1c2VkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghdGFy
Z2V0LT5pc1BhdXNlZCgpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIlRhcmdldCBm
b3IgZ2l2ZW4gdGFyZ2V0SWQgaXMgbm90IHBhdXNlZCJfcyk7CiAKICAgICB0YXJnZXQtPnJlc3Vt
ZSgpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JUYXJnZXRBZ2VudDo6
c2VuZE1lc3NhZ2VUb1RhcmdldChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmlu
ZyYgdGFyZ2V0SWQsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK1Byb3RvY29sOjpFcnJvclN0cmlu
Z09yPHZvaWQ+IEluc3BlY3RvclRhcmdldEFnZW50OjpzZW5kTWVzc2FnZVRvVGFyZ2V0KGNvbnN0
IFN0cmluZyYgdGFyZ2V0SWQsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKIHsKICAgICBJbnNwZWN0
b3JUYXJnZXQqIHRhcmdldCA9IG1fdGFyZ2V0cy5nZXQodGFyZ2V0SWQpOwotICAgIGlmICghdGFy
Z2V0KSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIk1pc3NpbmcgdGFyZ2V0IGZvciBnaXZlbiB0
YXJnZXRJZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoIXRhcmdldCkKKyAg
ICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJNaXNzaW5nIHRhcmdldCBmb3IgZ2l2ZW4gdGFy
Z2V0SWQiX3MpOwogCiAgICAgdGFyZ2V0LT5zZW5kTWVzc2FnZVRvVGFyZ2V0QmFja2VuZChtZXNz
YWdlKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKIHZvaWQgSW5zcGVjdG9yVGFyZ2V0QWdlbnQ6
OnNlbmRNZXNzYWdlRnJvbVRhcmdldFRvRnJvbnRlbmQoY29uc3QgU3RyaW5nJiB0YXJnZXRJZCwg
Y29uc3QgU3RyaW5nJiBtZXNzYWdlKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yVGFyZ2V0QWdlbnQuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclRhcmdldEFnZW50LmgKaW5kZXggYjky
OWRkZmZlMjljM2ZiMDg4YWI2NzE0MDg3Yzk5MzAyYzI3NTIxNC4uZWRjZDQ4OWI3NmUwODA4Mjdl
MDc0MWYxNGJhYjA5ZjllYTkzMDNkNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yVGFyZ2V0QWdlbnQuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JUYXJnZXRBZ2VudC5oCkBAIC0z
NSwyMyArMzUsMjEgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKIGNsYXNzIEluc3BlY3RvclRh
cmdldDsKIAotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7Ci0KIGNsYXNzIEpTX0VYUE9SVF9Q
UklWQVRFIEluc3BlY3RvclRhcmdldEFnZW50IGZpbmFsIDogcHVibGljIEluc3BlY3RvckFnZW50
QmFzZSwgcHVibGljIFRhcmdldEJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7CiAgICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoSW5zcGVjdG9yVGFyZ2V0QWdlbnQpOwogICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOwogcHVibGljOgogICAgIEluc3BlY3RvclRhcmdldEFnZW50KEZyb250ZW5kUm91
dGVyJiwgQmFja2VuZERpc3BhdGNoZXImKTsKLSAgICB+SW5zcGVjdG9yVGFyZ2V0QWdlbnQoKSBm
aW5hbDsKKyAgICB+SW5zcGVjdG9yVGFyZ2V0QWdlbnQoKTsKIAogICAgIC8vIEluc3BlY3RvckFn
ZW50QmFzZQotICAgIHZvaWQgZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEZyb250ZW5kUm91
dGVyKiwgQmFja2VuZERpc3BhdGNoZXIqKSBmaW5hbDsKLSAgICB2b2lkIHdpbGxEZXN0cm95RnJv
bnRlbmRBbmRCYWNrZW5kKERpc2Nvbm5lY3RSZWFzb24pIGZpbmFsOworICAgIHZvaWQgZGlkQ3Jl
YXRlRnJvbnRlbmRBbmRCYWNrZW5kKEZyb250ZW5kUm91dGVyKiwgQmFja2VuZERpc3BhdGNoZXIq
KTsKKyAgICB2b2lkIHdpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKERpc2Nvbm5lY3RSZWFz
b24pOwogCiAgICAgLy8gVGFyZ2V0QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyCi0gICAgdm9pZCBz
ZXRQYXVzZU9uU3RhcnQoRXJyb3JTdHJpbmcmLCBib29sIHBhdXNlT25TdGFydCkgZmluYWw7Ci0g
ICAgdm9pZCByZXN1bWUoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHRhcmdldElkKSBmaW5h
bDsKLSAgICB2b2lkIHNlbmRNZXNzYWdlVG9UYXJnZXQoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJp
bmcmIHRhcmdldElkLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpIGZpbmFsOworICAgIFByb3RvY29s
OjpFcnJvclN0cmluZ09yPHZvaWQ+IHNldFBhdXNlT25TdGFydChib29sKTsKKyAgICBQcm90b2Nv
bDo6RXJyb3JTdHJpbmdPcjx2b2lkPiByZXN1bWUoY29uc3QgU3RyaW5nJiB0YXJnZXRJZCk7Cisg
ICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc2VuZE1lc3NhZ2VUb1RhcmdldChjb25z
dCBTdHJpbmcmIHRhcmdldElkLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOwogCiAgICAgLy8gVGFy
Z2V0IGxpZmVjeWNsZS4KICAgICB2b2lkIHRhcmdldENyZWF0ZWQoSW5zcGVjdG9yVGFyZ2V0Jik7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9KU0ds
b2JhbE9iamVjdEF1ZGl0QWdlbnQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9hZ2VudHMvSlNHbG9iYWxPYmplY3RBdWRpdEFnZW50LmNwcAppbmRleCA0YmZhOWY1YWE3ZmRl
MTU0YjUzM2M4ZjIzY2Q3YmFlNjc3NThhYjAwLi4yOWZjZWM5N2JiOGU3ZjQ3NzJkNGQ3Y2M4ZmFk
NmM5MjMxNzFmODk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L2FnZW50cy9KU0dsb2JhbE9iamVjdEF1ZGl0QWdlbnQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0pTR2xvYmFsT2JqZWN0QXVkaXRBZ2VudC5jcHAKQEAg
LTQxLDcgKzQxLDcgQEAgSlNHbG9iYWxPYmplY3RBdWRpdEFnZW50OjpKU0dsb2JhbE9iamVjdEF1
ZGl0QWdlbnQoSlNBZ2VudENvbnRleHQmIGNvbnRleHQpCiAKIEpTR2xvYmFsT2JqZWN0QXVkaXRB
Z2VudDo6fkpTR2xvYmFsT2JqZWN0QXVkaXRBZ2VudCgpID0gZGVmYXVsdDsKIAotSW5qZWN0ZWRT
Y3JpcHQgSlNHbG9iYWxPYmplY3RBdWRpdEFnZW50OjppbmplY3RlZFNjcmlwdEZvckV2YWwoRXJy
b3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBpbnQqIGV4ZWN1dGlvbkNvbnRleHRJZCkKK0lu
amVjdGVkU2NyaXB0IEpTR2xvYmFsT2JqZWN0QXVkaXRBZ2VudDo6aW5qZWN0ZWRTY3JpcHRGb3JF
dmFsKFByb3RvY29sOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIE9wdGlvbmFsPFByb3RvY29s
OjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0SWQ+JiYgZXhlY3V0aW9uQ29udGV4dElkKQogewog
ICAgIGlmIChleGVjdXRpb25Db250ZXh0SWQpIHsKICAgICAgICAgZXJyb3JTdHJpbmcgPSAiZXhl
Y3V0aW9uQ29udGV4dElkIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIEpTQ29udGV4dHMgYXMgdGhlcmUg
aXMgb25seSBvbmUgZXhlY3V0aW9uIGNvbnRleHQiX3M7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9KU0dsb2JhbE9iamVjdEF1ZGl0QWdlbnQuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0pTR2xvYmFsT2JqZWN0QXVk
aXRBZ2VudC5oCmluZGV4IDdkNDY3MGQwNGRjN2ZkMzMwODNhMTUwNjFkMzc3NjViMWE2YzNlZTYu
LjU4NGQwNTAyNjQ1ODliNDgwNWM2MWI0YzRkYmEzODE5OWE2ZmVkZTAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0pTR2xvYmFsT2JqZWN0QXVkaXRB
Z2VudC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0pTR2xv
YmFsT2JqZWN0QXVkaXRBZ2VudC5oCkBAIC0zOCwxMCArMzgsMTAgQEAgY2xhc3MgSlNHbG9iYWxP
YmplY3RBdWRpdEFnZW50IGZpbmFsIDogcHVibGljIEluc3BlY3RvckF1ZGl0QWdlbnQgewogICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIEpTR2xvYmFsT2JqZWN0QXVk
aXRBZ2VudChKU0FnZW50Q29udGV4dCYpOwotICAgIH5KU0dsb2JhbE9iamVjdEF1ZGl0QWdlbnQo
KSBmaW5hbDsKKyAgICB+SlNHbG9iYWxPYmplY3RBdWRpdEFnZW50KCk7CiAKIHByaXZhdGU6Ci0g
ICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHRGb3JFdmFsKEVycm9yU3RyaW5nJiwgY29u
c3QgaW50KiBleGVjdXRpb25Db250ZXh0SWQpIGZpbmFsOworICAgIEluamVjdGVkU2NyaXB0IGlu
amVjdGVkU2NyaXB0Rm9yRXZhbChQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBPcHRpb25hbDxQcm90
b2NvbDo6UnVudGltZTo6RXhlY3V0aW9uQ29udGV4dElkPiYmKTsKIAogICAgIEpTQzo6SlNHbG9i
YWxPYmplY3QmIG1fZ2xvYmFsT2JqZWN0OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0pTR2xvYmFsT2JqZWN0RGVidWdnZXJBZ2VudC5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9KU0dsb2JhbE9iamVjdERl
YnVnZ2VyQWdlbnQuY3BwCmluZGV4IDI1NTFlN2E0MjM5Mzk5NWQ2YTNlZWE5Y2U0OTE3NDlhMzg3
ODkxODkuLjNiNzAyODc4YTFjYTUxNjI0NDA5OTlmNGU2NGI1M2ZjMzRmOTUzMmYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0pTR2xvYmFsT2JqZWN0
RGVidWdnZXJBZ2VudC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9h
Z2VudHMvSlNHbG9iYWxPYmplY3REZWJ1Z2dlckFnZW50LmNwcApAQCAtNDQsNyArNDQsNyBAQCBK
U0dsb2JhbE9iamVjdERlYnVnZ2VyQWdlbnQ6OkpTR2xvYmFsT2JqZWN0RGVidWdnZXJBZ2VudChK
U0FnZW50Q29udGV4dCYgY29udGV4dAogCiBKU0dsb2JhbE9iamVjdERlYnVnZ2VyQWdlbnQ6On5K
U0dsb2JhbE9iamVjdERlYnVnZ2VyQWdlbnQoKSA9IGRlZmF1bHQ7CiAKLUluamVjdGVkU2NyaXB0
IEpTR2xvYmFsT2JqZWN0RGVidWdnZXJBZ2VudDo6aW5qZWN0ZWRTY3JpcHRGb3JFdmFsKEVycm9y
U3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgaW50KiBleGVjdXRpb25Db250ZXh0SWQpCitJbmpl
Y3RlZFNjcmlwdCBKU0dsb2JhbE9iamVjdERlYnVnZ2VyQWdlbnQ6OmluamVjdGVkU2NyaXB0Rm9y
RXZhbChQcm90b2NvbDo6RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBPcHRpb25hbDxQcm90b2Nv
bDo6UnVudGltZTo6RXhlY3V0aW9uQ29udGV4dElkPiYmIGV4ZWN1dGlvbkNvbnRleHRJZCkKIHsK
ICAgICBpZiAoZXhlY3V0aW9uQ29udGV4dElkKSB7CiAgICAgICAgIGVycm9yU3RyaW5nID0gImV4
ZWN1dGlvbkNvbnRleHRJZCBpcyBub3Qgc3VwcG9ydGVkIGZvciBKU0NvbnRleHRzIGFzIHRoZXJl
IGlzIG9ubHkgb25lIGV4ZWN1dGlvbiBjb250ZXh0Il9zOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSlNHbG9iYWxPYmplY3REZWJ1Z2dlckFnZW50
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9KU0dsb2JhbE9iamVj
dERlYnVnZ2VyQWdlbnQuaAppbmRleCA2Zjc5Mjc4ZDUzMzE3MWUxZmRkMGFlZmU5ZGQyOWIzM2Jm
ZDFmZTk1Li4xMDBmYjIzZTMxNWRmMDQ3ZjlmODU2Y2NjOWE1YTZmODBlODNkNzc2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9KU0dsb2JhbE9iamVj
dERlYnVnZ2VyQWdlbnQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2Fn
ZW50cy9KU0dsb2JhbE9iamVjdERlYnVnZ2VyQWdlbnQuaApAQCAtMzYsMTggKzM2LDE4IEBAIGNs
YXNzIEpTR2xvYmFsT2JqZWN0RGVidWdnZXJBZ2VudCBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3JE
ZWJ1Z2dlckFnZW50IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAg
ICBKU0dsb2JhbE9iamVjdERlYnVnZ2VyQWdlbnQoSlNBZ2VudENvbnRleHQmLCBJbnNwZWN0b3JD
b25zb2xlQWdlbnQqKTsKLSAgICB+SlNHbG9iYWxPYmplY3REZWJ1Z2dlckFnZW50KCkgZmluYWw7
CisgICAgfkpTR2xvYmFsT2JqZWN0RGVidWdnZXJBZ2VudCgpOwogCiAgICAgLy8gSlNDOjpEZWJ1
Z2dlcjo6T2JzZXJ2ZXIKLSAgICB2b2lkIGJyZWFrcG9pbnRBY3Rpb25Mb2coSlNDOjpKU0dsb2Jh
bE9iamVjdCosIGNvbnN0IFN0cmluZyYgZGF0YSkgZmluYWw7CisgICAgdm9pZCBicmVha3BvaW50
QWN0aW9uTG9nKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBjb25zdCBTdHJpbmcmIGRhdGEpOwogCiBw
cml2YXRlOgotICAgIEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0Rm9yRXZhbChFcnJvclN0
cmluZyYsIGNvbnN0IGludCogZXhlY3V0aW9uQ29udGV4dElkKSBmaW5hbDsKKyAgICBJbmplY3Rl
ZFNjcmlwdCBpbmplY3RlZFNjcmlwdEZvckV2YWwoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiwgT3B0
aW9uYWw8UHJvdG9jb2w6OlJ1bnRpbWU6OkV4ZWN1dGlvbkNvbnRleHRJZD4mJik7CiAKICAgICAv
LyBOT1RFOiBKYXZhU2NyaXB0IGluc3BlY3RvciBkb2VzIG5vdCB5ZXQgbmVlZCB0byBtdXRlIGEg
Y29uc29sZSBiZWNhdXNlIG5vIG1lc3NhZ2VzCiAgICAgLy8gYXJlIHNlbnQgdG8gdGhlIGNvbnNv
bGUgb3V0c2lkZSBvZiB0aGUgQVBJIGJvdW5kYXJ5IG9yIGNvbnNvbGUgb2JqZWN0LgotICAgIHZv
aWQgbXV0ZUNvbnNvbGUoKSBmaW5hbCB7IH0KLSAgICB2b2lkIHVubXV0ZUNvbnNvbGUoKSBmaW5h
bCB7IH0KKyAgICB2b2lkIG11dGVDb25zb2xlKCkgeyB9CisgICAgdm9pZCB1bm11dGVDb25zb2xl
KCkgeyB9CiAKICAgICBJbnNwZWN0b3JDb25zb2xlQWdlbnQqIG1fY29uc29sZUFnZW50IHsgbnVs
bHB0ciB9OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
YWdlbnRzL0pTR2xvYmFsT2JqZWN0UnVudGltZUFnZW50LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0pTR2xvYmFsT2JqZWN0UnVudGltZUFnZW50LmNwcAppbmRl
eCBjODY2OWVlMGFhNWI4Y2E4NGU1ZDI5NDM3ZjM0NDQ3MWMxZjlhMDYwLi5lMjU0NDg3NDhmMTRl
NTBhMmZjNWNkZTc2YjA2ODkwMmIwMzgzYjFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL2FnZW50cy9KU0dsb2JhbE9iamVjdFJ1bnRpbWVBZ2VudC5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSlNHbG9iYWxPYmplY3RS
dW50aW1lQWdlbnQuY3BwCkBAIC00Myw5ICs0MywxMiBAQCBKU0dsb2JhbE9iamVjdFJ1bnRpbWVB
Z2VudDo6SlNHbG9iYWxPYmplY3RSdW50aW1lQWdlbnQoSlNBZ2VudENvbnRleHQmIGNvbnRleHQp
CiAKIEpTR2xvYmFsT2JqZWN0UnVudGltZUFnZW50Ojp+SlNHbG9iYWxPYmplY3RSdW50aW1lQWdl
bnQoKSA9IGRlZmF1bHQ7CiAKLUluamVjdGVkU2NyaXB0IEpTR2xvYmFsT2JqZWN0UnVudGltZUFn
ZW50OjppbmplY3RlZFNjcmlwdEZvckV2YWwoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25z
dCBpbnQqIGV4ZWN1dGlvbkNvbnRleHRJZCkKK0luamVjdGVkU2NyaXB0IEpTR2xvYmFsT2JqZWN0
UnVudGltZUFnZW50OjppbmplY3RlZFNjcmlwdEZvckV2YWwoUHJvdG9jb2w6OkVycm9yU3RyaW5n
JiBlcnJvclN0cmluZywgT3B0aW9uYWw8UHJvdG9jb2w6OlJ1bnRpbWU6OkV4ZWN1dGlvbkNvbnRl
eHRJZD4mJiBleGVjdXRpb25Db250ZXh0SWQpCiB7Ci0gICAgQVNTRVJUX1VOVVNFRChleGVjdXRp
b25Db250ZXh0SWQsICFleGVjdXRpb25Db250ZXh0SWQpOworICAgIGlmIChleGVjdXRpb25Db250
ZXh0SWQpIHsKKyAgICAgICAgZXJyb3JTdHJpbmcgPSAiZXhlY3V0aW9uQ29udGV4dElkIGlzIG5v
dCBzdXBwb3J0ZWQgZm9yIEpTQ29udGV4dHMgYXMgdGhlcmUgaXMgb25seSBvbmUgZXhlY3V0aW9u
IGNvbnRleHQiX3M7CisgICAgICAgIHJldHVybiBJbmplY3RlZFNjcmlwdCgpOworICAgIH0KIAog
ICAgIEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0ID0gaW5qZWN0ZWRTY3JpcHRNYW5hZ2Vy
KCkuaW5qZWN0ZWRTY3JpcHRGb3IoJm1fZ2xvYmFsT2JqZWN0KTsKICAgICBpZiAoaW5qZWN0ZWRT
Y3JpcHQuaGFzTm9WYWx1ZSgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9hZ2VudHMvSlNHbG9iYWxPYmplY3RSdW50aW1lQWdlbnQuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0pTR2xvYmFsT2JqZWN0UnVudGltZUFnZW50LmgK
aW5kZXggNmYwY2U5MDU5ZDcyMzM4Mzc4YjFkNDdhNzFhNzI1YzM5MmNkMjc3YS4uYmZlYmRhOTJh
MDhhOTFkMzhjZTJjNTE3NTY3OTY3MzFkNTlhMmM5YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSlNHbG9iYWxPYmplY3RSdW50aW1lQWdlbnQuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9KU0dsb2JhbE9iamVj
dFJ1bnRpbWVBZ2VudC5oCkBAIC0zOSwxNSArMzksMTUgQEAgY2xhc3MgSlNHbG9iYWxPYmplY3RS
dW50aW1lQWdlbnQgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yUnVudGltZUFnZW50IHsKICAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBKU0dsb2JhbE9iamVjdFJ1bnRp
bWVBZ2VudChKU0FnZW50Q29udGV4dCYpOwotICAgIH5KU0dsb2JhbE9iamVjdFJ1bnRpbWVBZ2Vu
dCgpIGZpbmFsOworICAgIH5KU0dsb2JhbE9iamVjdFJ1bnRpbWVBZ2VudCgpOwogCiBwcml2YXRl
OgotICAgIEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0Rm9yRXZhbChFcnJvclN0cmluZyYs
IGNvbnN0IGludCogZXhlY3V0aW9uQ29udGV4dElkKSBmaW5hbDsKKyAgICBJbmplY3RlZFNjcmlw
dCBpbmplY3RlZFNjcmlwdEZvckV2YWwoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiwgT3B0aW9uYWw8
UHJvdG9jb2w6OlJ1bnRpbWU6OkV4ZWN1dGlvbkNvbnRleHRJZD4mJik7CiAKICAgICAvLyBOT1RF
OiBKYXZhU2NyaXB0IGluc3BlY3RvciBkb2VzIG5vdCB5ZXQgbmVlZCB0byBtdXRlIGEgY29uc29s
ZSBiZWNhdXNlIG5vIG1lc3NhZ2VzCiAgICAgLy8gYXJlIHNlbnQgdG8gdGhlIGNvbnNvbGUgb3V0
c2lkZSBvZiB0aGUgQVBJIGJvdW5kYXJ5IG9yIGNvbnNvbGUgb2JqZWN0LgotICAgIHZvaWQgbXV0
ZUNvbnNvbGUoKSBmaW5hbCB7IH0KLSAgICB2b2lkIHVubXV0ZUNvbnNvbGUoKSBmaW5hbCB7IH0K
KyAgICB2b2lkIG11dGVDb25zb2xlKCkgeyB9CisgICAgdm9pZCB1bm11dGVDb25zb2xlKCkgeyB9
CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UnVudGltZUZyb250ZW5kRGlzcGF0Y2hlcj4gbV9mcm9u
dGVuZERpc3BhdGNoZXI7CiAgICAgUmVmUHRyPFJ1bnRpbWVCYWNrZW5kRGlzcGF0Y2hlcj4gbV9i
YWNrZW5kRGlzcGF0Y2hlcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3IvcHJvdG9jb2wvUGFnZS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9wcm90b2NvbC9QYWdlLmpzb24KaW5kZXggM2I4ZmExOGJkN2U4ZDk1ZDdlOGY5NWI0NDJhZmM2
M2U1NTBjZTYzYS4uZmRlNGY2OTY0ZDQwZThhNTY1MTE2YmUyYmM2OTJhNDUxYzJkYTEwNiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9QYWdlLmpz
b24KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9wcm90b2NvbC9QYWdlLmpz
b24KQEAgLTI2Nyw3ICsyNjcsNyBAQAogICAgICAgICAgICAgImNvbmRpdGlvbiI6ICIoZGVmaW5l
ZChFTkFCTEVfREFSS19NT0RFX0NTUykgJiYgRU5BQkxFX0RBUktfTU9ERV9DU1MpIHx8IChkZWZp
bmVkKEhBVkVfT1NfREFSS19NT0RFX1NVUFBPUlQpICYmIEhBVkVfT1NfREFSS19NT0RFX1NVUFBP
UlQpIiwKICAgICAgICAgICAgICJ0YXJnZXRUeXBlcyI6IFsicGFnZSJdLAogICAgICAgICAgICAg
InBhcmFtZXRlcnMiOiBbCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJhcHBlYXJhbmNlIiwg
IiRyZWYiOiAiQXBwZWFyYW5jZSIsICJkZXNjcmlwdGlvbiI6ICJBcHBlYXJhbmNlIG5hbWUgdG8g
Zm9yY2UuIEVtcHR5IHN0cmluZyBkaXNhYmxlcyB0aGUgb3ZlcnJpZGUuIiB9CisgICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJhcHBlYXJhbmNlIiwgIiRyZWYiOiAiQXBwZWFyYW5jZSIsICJvcHRp
b25hbCI6IHRydWUgfQogICAgICAgICAgICAgXQogICAgICAgICB9LAogICAgICAgICB7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3JlbW90ZS9zb2NrZXQvUmVt
b3RlSW5zcGVjdG9yQ29ubmVjdGlvbkNsaWVudC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3JlbW90ZS9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yQ29ubmVjdGlvbkNsaWVudC5j
cHAKaW5kZXggMDY1MmUxMjcwOGJmODYyMzBiZTQ2MjlmZTY1NzI1YmJiYzM1YjY3MC4uODk2NWRh
MjFkYTgxMDE0Mzg5MWEyMzlhM2UxY2FmYjMxZmY0ZmJmMiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9yZW1vdGUvc29ja2V0L1JlbW90ZUluc3BlY3RvckNvbm5l
Y3Rpb25DbGllbnQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcmVt
b3RlL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JDb25uZWN0aW9uQ2xpZW50LmNwcApAQCAtOTIsMzEg
KzkyLDI5IEBAIE9wdGlvbmFsPFJlbW90ZUluc3BlY3RvckNvbm5lY3Rpb25DbGllbnQ6OkV2ZW50
PiBSZW1vdGVJbnNwZWN0b3JDb25uZWN0aW9uQ2xpZW50CiAKICAgICBTdHJpbmcganNvbkRhdGEg
PSBTdHJpbmc6OmZyb21VVEY4KGRhdGEpOwogCi0gICAgUmVmUHRyPEpTT046OlZhbHVlPiBtZXNz
YWdlVmFsdWU7Ci0gICAgaWYgKCFKU09OOjpWYWx1ZTo6cGFyc2VKU09OKGpzb25EYXRhLCBtZXNz
YWdlVmFsdWUpKQorICAgIGF1dG8gbWVzc2FnZVZhbHVlID0gSlNPTjo6VmFsdWU6OnBhcnNlSlNP
Tihqc29uRGF0YSk7CisgICAgaWYgKCFtZXNzYWdlVmFsdWUpCiAgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CiAKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBtZXNzYWdlT2JqZWN0OwotICAg
IGlmICghbWVzc2FnZVZhbHVlLT5hc09iamVjdChtZXNzYWdlT2JqZWN0KSkKKyAgICBhdXRvIG1l
c3NhZ2VPYmplY3QgPSBtZXNzYWdlVmFsdWUtPmFzT2JqZWN0KCk7CisgICAgaWYgKCFtZXNzYWdl
T2JqZWN0KQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgRXZlbnQgZXZlbnQ7
Ci0gICAgaWYgKCFtZXNzYWdlT2JqZWN0LT5nZXRTdHJpbmcoImV2ZW50Il9zLCBldmVudC5tZXRo
b2ROYW1lKSkKKworICAgIGV2ZW50Lm1ldGhvZE5hbWUgPSBtZXNzYWdlT2JqZWN0LT5nZXRTdHJp
bmcoImV2ZW50Il9zKTsKKyAgICBpZiAoIWV2ZW50Lm1ldGhvZE5hbWUpCiAgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CiAKICAgICBldmVudC5jbGllbnRJRCA9IGNsaWVudElEOwogCi0gICAg
Q29ubmVjdGlvbklEIGNvbm5lY3Rpb25JRDsKLSAgICBpZiAobWVzc2FnZU9iamVjdC0+Z2V0SW50
ZWdlcigiY29ubmVjdGlvbklEIl9zLCBjb25uZWN0aW9uSUQpKQotICAgICAgICBldmVudC5jb25u
ZWN0aW9uSUQgPSBjb25uZWN0aW9uSUQ7CisgICAgaWYgKGF1dG8gY29ubmVjdGlvbklEID0gbWVz
c2FnZU9iamVjdC0+Z2V0SW50ZWdlcigiY29ubmVjdGlvbklEIl9zKSkKKyAgICAgICAgZXZlbnQu
Y29ubmVjdGlvbklEID0gKmNvbm5lY3Rpb25JRDsKIAotICAgIFRhcmdldElEIHRhcmdldElEOwot
ICAgIGlmIChtZXNzYWdlT2JqZWN0LT5nZXRJbnRlZ2VyKCJ0YXJnZXRJRCJfcywgdGFyZ2V0SUQp
KQotICAgICAgICBldmVudC50YXJnZXRJRCA9IHRhcmdldElEOworICAgIGlmIChhdXRvIHRhcmdl
dElEID0gbWVzc2FnZU9iamVjdC0+Z2V0SW50ZWdlcigidGFyZ2V0SUQiX3MpKQorICAgICAgICBl
dmVudC50YXJnZXRJRCA9ICp0YXJnZXRJRDsKIAotICAgIFN0cmluZyBtZXNzYWdlOwotICAgIGlm
IChtZXNzYWdlT2JqZWN0LT5nZXRTdHJpbmcoIm1lc3NhZ2UiX3MsIG1lc3NhZ2UpKQotICAgICAg
ICBldmVudC5tZXNzYWdlID0gbWVzc2FnZTsKKyAgICBldmVudC5tZXNzYWdlID0gbWVzc2FnZU9i
amVjdC0+Z2V0U3RyaW5nKCJtZXNzYWdlIl9zKTsKIAogICAgIHJldHVybiBldmVudDsKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcmVtb3RlL3NvY2tldC9S
ZW1vdGVJbnNwZWN0b3JTb2NrZXQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9yZW1vdGUvc29ja2V0L1JlbW90ZUluc3BlY3RvclNvY2tldC5jcHAKaW5kZXggZTNlMDQ1MDZl
OTc4YjUwMTlkOGUwMDU4ZTg3NzlhNDZjYjFmMjAxNC4uYTliOGYxNmM1MDhhODIyNDMwNzJiNDY1
MDdjOTBiNjI0MmQ5NGRjYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9yZW1vdGUvc29ja2V0L1JlbW90ZUluc3BlY3RvclNvY2tldC5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9yZW1vdGUvc29ja2V0L1JlbW90ZUluc3BlY3RvclNv
Y2tldC5jcHAKQEAgLTE1OCw3ICsxNTgsNyBAQCB2b2lkIFJlbW90ZUluc3BlY3Rvcjo6cHVzaExp
c3RpbmdzTm93KCkKIAogICAgIGF1dG8gdGFyZ2V0TGlzdEpTT04gPSBKU09OOjpBcnJheTo6Y3Jl
YXRlKCk7CiAgICAgZm9yIChhdXRvIGxpc3RpbmcgOiBtX3RhcmdldExpc3RpbmdNYXAudmFsdWVz
KCkpCi0gICAgICAgIHRhcmdldExpc3RKU09OLT5wdXNoT2JqZWN0KGxpc3RpbmcpOworICAgICAg
ICB0YXJnZXRMaXN0SlNPTi0+cHVzaE9iamVjdCgqbGlzdGluZyk7CiAKICAgICBhdXRvIGpzb25F
dmVudCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAganNvbkV2ZW50LT5zZXRTdHJpbmco
ImV2ZW50Il9zLCAiU2V0VGFyZ2V0TGlzdCJfcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9jcHBfZ2VuZXJhdG9yLnB5IGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vY3BwX2dlbmVyYXRv
ci5weQppbmRleCBmNzMzOGY2ZGQzZjE4MWU4OTVlMTllZWM2NmNhMjFkNTljYmJkYWZhLi40NmI5
MDY1N2MzOWU0ZDI1MDNiN2M3MWQyYzRjZGQzNzk3ODVjN2NjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9jcHBfZ2VuZXJhdG9yLnB5
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2Nw
cF9nZW5lcmF0b3IucHkKQEAgLTU1LDI3OSArNTUsMzI5IEBAIGNsYXNzIENwcEdlbmVyYXRvcihH
ZW5lcmF0b3IpOgogICAgICAgICByZXR1cm4gc2VsZi5tb2RlbCgpLmZyYW1ld29yay5zZXR0aW5n
KCdjcHBfcHJvdG9jb2xfZ3JvdXAnLCAnJykKIAogICAgIGRlZiBoZWxwZXJzX25hbWVzcGFjZShz
ZWxmKToKLSAgICAgICAgcmV0dXJuICclc0hlbHBlcnMnICUgc2VsZi5wcm90b2NvbF9uYW1lKCkK
KyAgICAgICAgbmFtZXNwYWNlID0gJ0hlbHBlcnMnCisgICAgICAgIGlmIHNlbGYucHJvdG9jb2xf
bmFtZSgpICE9ICdJbnNwZWN0b3InOgorICAgICAgICAgICAgbmFtZXNwYWNlID0gc2VsZi5wcm90
b2NvbF9uYW1lKCkgKyBuYW1lc3BhY2UKKyAgICAgICAgcmV0dXJuIG5hbWVzcGFjZQogCiAgICAg
IyBNaXNjZWxsYW5lb3VzIHRleHQgbWFuaXB1bGF0aW9uIHJvdXRpbmVzLgogICAgIEBzdGF0aWNt
ZXRob2QKICAgICBkZWYgY3BwX2dldHRlcl9tZXRob2RfZm9yX3R5cGUoX3R5cGUpOgotICAgICAg
ICBpZiBpc2luc3RhbmNlKF90eXBlLCBPYmplY3RUeXBlKToKLSAgICAgICAgICAgIHJldHVybiAn
Z2V0T2JqZWN0JwotICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBBcnJheVR5cGUpOgotICAg
ICAgICAgICAgcmV0dXJuICdnZXRBcnJheScKLSAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwg
UHJpbWl0aXZlVHlwZSk6Ci0gICAgICAgICAgICBpZiBfdHlwZS5yYXdfbmFtZSgpID09ICdpbnRl
Z2VyJzoKLSAgICAgICAgICAgICAgICByZXR1cm4gJ2dldEludGVnZXInCi0gICAgICAgICAgICBl
bGlmIF90eXBlLnJhd19uYW1lKCkgPT0gJ251bWJlcic6Ci0gICAgICAgICAgICAgICAgcmV0dXJu
ICdnZXREb3VibGUnCi0gICAgICAgICAgICBlbGlmIF90eXBlLnJhd19uYW1lKCkgPT0gJ2FueSc6
Ci0gICAgICAgICAgICAgICAgcmV0dXJuICdnZXRWYWx1ZScKLSAgICAgICAgICAgIGVsc2U6Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuICdnZXQnICsgdWNmaXJzdChfdHlwZS5yYXdfbmFtZSgpKQog
ICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBBbGlhc2VkVHlwZSk6Ci0gICAgICAgICAgICBy
ZXR1cm4gQ3BwR2VuZXJhdG9yLmNwcF9nZXR0ZXJfbWV0aG9kX2Zvcl90eXBlKF90eXBlLmFsaWFz
ZWRfdHlwZSkKKyAgICAgICAgICAgIF90eXBlID0gX3R5cGUuYWxpYXNlZF90eXBlCisgICAgICAg
ICAgICAjIGZhbGx0aHJvdWdoCisKICAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgRW51bVR5
cGUpOgotICAgICAgICAgICAgcmV0dXJuIENwcEdlbmVyYXRvci5jcHBfZ2V0dGVyX21ldGhvZF9m
b3JfdHlwZShfdHlwZS5wcmltaXRpdmVfdHlwZSkKKyAgICAgICAgICAgIF90eXBlID0gX3R5cGUu
cHJpbWl0aXZlX3R5cGUKKyAgICAgICAgICAgICMgZmFsbHRocm91Z2gKKworICAgICAgICBpZiBp
c2luc3RhbmNlKF90eXBlLCBPYmplY3RUeXBlKSBvciBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpIGlu
IFsnb2JqZWN0J106CisgICAgICAgICAgICByZXR1cm4gJ2dldE9iamVjdCcKKworICAgICAgICBp
ZiBpc2luc3RhbmNlKF90eXBlLCBBcnJheVR5cGUpIG9yIF90eXBlLnF1YWxpZmllZF9uYW1lKCkg
aW4gWydhcnJheSddOgorICAgICAgICAgICAgcmV0dXJuICdnZXRBcnJheScKKworICAgICAgICBp
ZiBpc2luc3RhbmNlKF90eXBlLCBQcmltaXRpdmVUeXBlKToKKyAgICAgICAgICAgIGlmIF90eXBl
LnJhd19uYW1lKCkgPT0gJ251bWJlcic6CisgICAgICAgICAgICAgICAgcmV0dXJuICdnZXREb3Vi
bGUnCisgICAgICAgICAgICBpZiBfdHlwZS5yYXdfbmFtZSgpID09ICdhbnknOgorICAgICAgICAg
ICAgICAgIHJldHVybiAnZ2V0VmFsdWUnCisgICAgICAgICAgICByZXR1cm4gJ2dldCcgKyB1Y2Zp
cnN0KF90eXBlLnJhd19uYW1lKCkpCisKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigidW5rbm93
biB0eXBlIikKIAogICAgIEBzdGF0aWNtZXRob2QKICAgICBkZWYgY3BwX3NldHRlcl9tZXRob2Rf
Zm9yX3R5cGUoX3R5cGUpOgotICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBPYmplY3RUeXBl
KToKLSAgICAgICAgICAgIHJldHVybiAnc2V0T2JqZWN0JwotICAgICAgICBpZiBpc2luc3RhbmNl
KF90eXBlLCBBcnJheVR5cGUpOgotICAgICAgICAgICAgcmV0dXJuICdzZXRBcnJheScKLSAgICAg
ICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgUHJpbWl0aXZlVHlwZSk6Ci0gICAgICAgICAgICBpZiBf
dHlwZS5yYXdfbmFtZSgpID09ICdpbnRlZ2VyJzoKLSAgICAgICAgICAgICAgICByZXR1cm4gJ3Nl
dEludGVnZXInCi0gICAgICAgICAgICBlbGlmIF90eXBlLnJhd19uYW1lKCkgPT0gJ251bWJlcic6
Ci0gICAgICAgICAgICAgICAgcmV0dXJuICdzZXREb3VibGUnCi0gICAgICAgICAgICBlbGlmIF90
eXBlLnJhd19uYW1lKCkgPT0gJ2FueSc6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICdzZXRWYWx1
ZScKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICdzZXQnICsgdWNm
aXJzdChfdHlwZS5yYXdfbmFtZSgpKQogICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBBbGlh
c2VkVHlwZSk6Ci0gICAgICAgICAgICByZXR1cm4gQ3BwR2VuZXJhdG9yLmNwcF9zZXR0ZXJfbWV0
aG9kX2Zvcl90eXBlKF90eXBlLmFsaWFzZWRfdHlwZSkKKyAgICAgICAgICAgIF90eXBlID0gX3R5
cGUuYWxpYXNlZF90eXBlCisgICAgICAgICAgICAjIGZhbGx0aHJvdWdoCisKICAgICAgICAgaWYg
aXNpbnN0YW5jZShfdHlwZSwgRW51bVR5cGUpOgotICAgICAgICAgICAgcmV0dXJuIENwcEdlbmVy
YXRvci5jcHBfc2V0dGVyX21ldGhvZF9mb3JfdHlwZShfdHlwZS5wcmltaXRpdmVfdHlwZSkKKyAg
ICAgICAgICAgIF90eXBlID0gX3R5cGUucHJpbWl0aXZlX3R5cGUKKyAgICAgICAgICAgICMgZmFs
bHRocm91Z2gKKworICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBPYmplY3RUeXBlKSBvciBf
dHlwZS5xdWFsaWZpZWRfbmFtZSgpIGluIFsnb2JqZWN0J106CisgICAgICAgICAgICByZXR1cm4g
J3NldE9iamVjdCcKKworICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBBcnJheVR5cGUpIG9y
IF90eXBlLnF1YWxpZmllZF9uYW1lKCkgaW4gWydhcnJheSddOgorICAgICAgICAgICAgcmV0dXJu
ICdzZXRBcnJheScKKworICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBQcmltaXRpdmVUeXBl
KToKKyAgICAgICAgICAgIGlmIF90eXBlLnJhd19uYW1lKCkgPT0gJ251bWJlcic6CisgICAgICAg
ICAgICAgICAgcmV0dXJuICdzZXREb3VibGUnCisgICAgICAgICAgICBpZiBfdHlwZS5yYXdfbmFt
ZSgpID09ICdhbnknOgorICAgICAgICAgICAgICAgIHJldHVybiAnc2V0VmFsdWUnCisgICAgICAg
ICAgICByZXR1cm4gJ3NldCcgKyB1Y2ZpcnN0KF90eXBlLnJhd19uYW1lKCkpCisKKyAgICAgICAg
cmFpc2UgVmFsdWVFcnJvcigidW5rbm93biB0eXBlIikKIAogICAgICMgR2VuZXJhdGUgdHlwZSBy
ZXByZXNlbnRhdGlvbnMgZm9yIHZhcmlvdXMgc2l0dWF0aW9ucy4KICAgICBAc3RhdGljbWV0aG9k
CiAgICAgZGVmIGNwcF9wcm90b2NvbF90eXBlX2Zvcl90eXBlKF90eXBlKToKICAgICAgICAgaWYg
aXNpbnN0YW5jZShfdHlwZSwgQWxpYXNlZFR5cGUpOgotICAgICAgICAgICAgX3R5cGUgPSBfdHlw
ZS5hbGlhc2VkX3R5cGUgICMgRmFsbCB0aHJvdWdoIHRvIGVudW0gb3IgcHJpbWl0aXZlLgorICAg
ICAgICAgICAgX3R5cGUgPSBfdHlwZS5hbGlhc2VkX3R5cGUKKyAgICAgICAgICAgICMgZmFsbHRo
cm91Z2gKIAotICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBPYmplY3RUeXBlKSBhbmQgbGVu
KF90eXBlLm1lbWJlcnMpID09IDA6Ci0gICAgICAgICAgICByZXR1cm4gJ0pTT046Ok9iamVjdCcK
ICAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgQXJyYXlUeXBlKToKLSAgICAgICAgICAgIGlm
IF90eXBlLnJhd19uYW1lKCkgaXMgTm9uZTogICMgT3RoZXJ3aXNlLCBmYWxsIHRocm91Z2ggYW5k
IHVzZSB0eXBlZGVmJ2QgbmFtZS4KKyAgICAgICAgICAgIGlmIF90eXBlLnJhd19uYW1lKCkgaXMg
Tm9uZToKICAgICAgICAgICAgICAgICByZXR1cm4gJ0pTT046OkFycmF5T2Y8JXM+JyAlIENwcEdl
bmVyYXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZShfdHlwZS5lbGVtZW50X3R5cGUpCisg
ICAgICAgICAgICAjIGZhbGx0aHJvdWdoCisKICAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwg
KE9iamVjdFR5cGUsIEVudW1UeXBlLCBBcnJheVR5cGUpKToKLSAgICAgICAgICAgIHJldHVybiAn
SW5zcGVjdG9yOjpQcm90b2NvbDo6JXM6OiVzJyAlIChfdHlwZS50eXBlX2RvbWFpbigpLmRvbWFp
bl9uYW1lLCBfdHlwZS5yYXdfbmFtZSgpKQorICAgICAgICAgICAgcmV0dXJuICdQcm90b2NvbDo6
JXM6OiVzJyAlIChfdHlwZS50eXBlX2RvbWFpbigpLmRvbWFpbl9uYW1lLCBfdHlwZS5yYXdfbmFt
ZSgpKQorCiAgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIFByaW1pdGl2ZVR5cGUpOgogICAg
ICAgICAgICAgcmV0dXJuIENwcEdlbmVyYXRvci5jcHBfbmFtZV9mb3JfcHJpbWl0aXZlX3R5cGUo
X3R5cGUpCiAKLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIGNwcF9wcm90b2NvbF90eXBlX2Zv
cl90eXBlX21lbWJlcih0eXBlX21lbWJlciwgb2JqZWN0X2RlY2xhcmF0aW9uKToKLSAgICAgICAg
aWYgaXNpbnN0YW5jZSh0eXBlX21lbWJlci50eXBlLCBFbnVtVHlwZSkgYW5kIHR5cGVfbWVtYmVy
LnR5cGUuaXNfYW5vbnltb3VzOgotICAgICAgICAgICAgcmV0dXJuICc6Oicuam9pbihbQ3BwR2Vu
ZXJhdG9yLmNwcF9wcm90b2NvbF90eXBlX2Zvcl90eXBlKG9iamVjdF9kZWNsYXJhdGlvbi50eXBl
KSwgdWNmaXJzdCh0eXBlX21lbWJlci5tZW1iZXJfbmFtZSldKQotICAgICAgICBlbHNlOgotICAg
ICAgICAgICAgcmV0dXJuIENwcEdlbmVyYXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZSh0
eXBlX21lbWJlci50eXBlKQorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJ1bmtub3duIHR5cGUi
KQogCiAgICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBjcHBfdHlwZV9mb3JfdW5jaGVja2VkX2Zv
cm1hbF9pbl9wYXJhbWV0ZXIocGFyYW1ldGVyKToKLSAgICAgICAgX3R5cGUgPSBwYXJhbWV0ZXIu
dHlwZQorICAgIGRlZiBjcHBfdHlwZV9mb3JfdHlwZV9tZW1iZXJfYXJndW1lbnQoX3R5cGUsIG5h
bWUpOgogICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBBbGlhc2VkVHlwZSk6Ci0gICAgICAg
ICAgICBfdHlwZSA9IF90eXBlLmFsaWFzZWRfdHlwZSAgIyBGYWxsIHRocm91Z2ggdG8gZW51bSBv
ciBwcmltaXRpdmUuCisgICAgICAgICAgICBfdHlwZSA9IF90eXBlLmFsaWFzZWRfdHlwZQorICAg
ICAgICAgICAgIyBmYWxsdGhyb3VnaAogCi0gICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEVu
dW1UeXBlKToKLSAgICAgICAgICAgIF90eXBlID0gX3R5cGUucHJpbWl0aXZlX3R5cGUgICMgRmFs
bCB0aHJvdWdoIHRvIHByaW1pdGl2ZS4KLQotICAgICAgICAjIFRoaXMgaGFuZGxlcyB0aGUgJ2Fu
eScgdHlwZSBhbmQgb2JqZWN0cyB3aXRoIGRlZmluZWQgcHJvcGVydGllcy4KLSAgICAgICAgaWYg
aXNpbnN0YW5jZShfdHlwZSwgT2JqZWN0VHlwZSkgb3IgX3R5cGUucXVhbGlmaWVkX25hbWUoKSA9
PSAnb2JqZWN0JzoKLSAgICAgICAgICAgIGNwcF9uYW1lID0gJ0pTT046Ok9iamVjdCcKLSAgICAg
ICAgICAgIGlmIHBhcmFtZXRlci5pc19vcHRpb25hbDoKLSAgICAgICAgICAgICAgICByZXR1cm4g
J2NvbnN0ICVzKicgJSBjcHBfbmFtZQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAg
ICByZXR1cm4gJ2NvbnN0ICVzJicgJSBjcHBfbmFtZQotICAgICAgICBpZiBpc2luc3RhbmNlKF90
eXBlLCBBcnJheVR5cGUpOgotICAgICAgICAgICAgY3BwX25hbWUgPSAnSlNPTjo6QXJyYXknCi0g
ICAgICAgICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6Ci0gICAgICAgICAgICAgICAgcmV0
dXJuICdjb25zdCAlcyonICUgY3BwX25hbWUKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuICdjb25zdCAlcyYnICUgY3BwX25hbWUKLSAgICAgICAgaWYgaXNpbnN0YW5j
ZShfdHlwZSwgUHJpbWl0aXZlVHlwZSk6Ci0gICAgICAgICAgICBjcHBfbmFtZSA9IENwcEdlbmVy
YXRvci5jcHBfbmFtZV9mb3JfcHJpbWl0aXZlX3R5cGUoX3R5cGUpCi0gICAgICAgICAgICBpZiBw
YXJhbWV0ZXIuaXNfb3B0aW9uYWw6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICdjb25zdCAlcyon
ICUgY3BwX25hbWUKLSAgICAgICAgICAgIGVsaWYgX3R5cGUucmF3X25hbWUoKSBpbiBbJ3N0cmlu
ZyddOgotICAgICAgICAgICAgICAgIHJldHVybiAnY29uc3QgJXMmJyAlIGNwcF9uYW1lCi0gICAg
ICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJldHVybiBjcHBfbmFtZQotCi0gICAgICAg
IHJldHVybiAidW5rbm93bl91bmNoZWNrZWRfZm9ybWFsX2luX3BhcmFtZXRlcl90eXBlIgotCi0g
ICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBjcHBfdHlwZV9mb3JfY2hlY2tlZF9mb3JtYWxfZXZl
bnRfcGFyYW1ldGVyKHBhcmFtZXRlcik6Ci0gICAgICAgIHJldHVybiBDcHBHZW5lcmF0b3IuY3Bw
X3R5cGVfZm9yX3R5cGVfd2l0aF9uYW1lKHBhcmFtZXRlci50eXBlLCBwYXJhbWV0ZXIucGFyYW1l
dGVyX25hbWUsIHBhcmFtZXRlci5pc19vcHRpb25hbCkKLQotICAgIEBzdGF0aWNtZXRob2QKLSAg
ICBkZWYgY3BwX3R5cGVfZm9yX3R5cGVfbWVtYmVyKG1lbWJlcik6Ci0gICAgICAgIHJldHVybiBD
cHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX3R5cGVfd2l0aF9uYW1lKG1lbWJlci50eXBlLCBtZW1i
ZXIubWVtYmVyX25hbWUsIEZhbHNlKQotCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBjcHBf
dHlwZV9mb3JfdHlwZV93aXRoX25hbWUoX3R5cGUsIHR5cGVfbmFtZSwgaXNfb3B0aW9uYWwpOgog
ICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCAoQXJyYXlUeXBlLCBPYmplY3RUeXBlKSk6Ci0g
ICAgICAgICAgICByZXR1cm4gJ1JlZlB0cjwlcz4nICUgQ3BwR2VuZXJhdG9yLmNwcF9wcm90b2Nv
bF90eXBlX2Zvcl90eXBlKF90eXBlKQotICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBBbGlh
c2VkVHlwZSk6Ci0gICAgICAgICAgICBidWlsZGVyX3R5cGUgPSBDcHBHZW5lcmF0b3IuY3BwX3By
b3RvY29sX3R5cGVfZm9yX3R5cGUoX3R5cGUpCi0gICAgICAgICAgICBpZiBpc19vcHRpb25hbDoK
LSAgICAgICAgICAgICAgICByZXR1cm4gJ2NvbnN0ICVzKicgJSBidWlsZGVyX3R5cGUKLSAgICAg
ICAgICAgIGVsaWYgX3R5cGUuYWxpYXNlZF90eXBlLnF1YWxpZmllZF9uYW1lKCkgaW4gWydpbnRl
Z2VyJywgJ251bWJlciddOgotICAgICAgICAgICAgICAgIHJldHVybiBDcHBHZW5lcmF0b3IuY3Bw
X25hbWVfZm9yX3ByaW1pdGl2ZV90eXBlKF90eXBlLmFsaWFzZWRfdHlwZSkKLSAgICAgICAgICAg
IGVsaWYgX3R5cGUuYWxpYXNlZF90eXBlLnF1YWxpZmllZF9uYW1lKCkgaW4gWydzdHJpbmcnXToK
LSAgICAgICAgICAgICAgICByZXR1cm4gJ2NvbnN0ICVzJicgJSBidWlsZGVyX3R5cGUKLSAgICAg
ICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGJ1aWxkZXJfdHlwZQotICAgICAg
ICBpZiBpc2luc3RhbmNlKF90eXBlLCBQcmltaXRpdmVUeXBlKToKLSAgICAgICAgICAgIGNwcF9u
YW1lID0gQ3BwR2VuZXJhdG9yLmNwcF9uYW1lX2Zvcl9wcmltaXRpdmVfdHlwZShfdHlwZSkKLSAg
ICAgICAgICAgIGlmIF90eXBlLnF1YWxpZmllZF9uYW1lKCkgaW4gWydvYmplY3QnXToKLSAgICAg
ICAgICAgICAgICByZXR1cm4gJ1JlZlB0cjxKU09OOjpPYmplY3Q+JwotICAgICAgICAgICAgZWxp
ZiBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpIGluIFsnYW55J106Ci0gICAgICAgICAgICAgICAgcmV0
dXJuICdSZWZQdHI8SlNPTjo6VmFsdWU+JwotICAgICAgICAgICAgZWxpZiBpc19vcHRpb25hbDoK
LSAgICAgICAgICAgICAgICByZXR1cm4gJ2NvbnN0ICVzKicgJSBjcHBfbmFtZQotICAgICAgICAg
ICAgZWxpZiBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpIGluIFsnc3RyaW5nJ106Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuICdjb25zdCAlcyYnICUgY3BwX25hbWUKLSAgICAgICAgICAgIGVsc2U6Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIGNwcF9uYW1lCisgICAgICAgICAgICByZXR1cm4gJ1JlZjwl
cz4mJicgJSBDcHBHZW5lcmF0b3IuY3BwX3Byb3RvY29sX3R5cGVfZm9yX3R5cGUoX3R5cGUpCisK
KyAgICAgICAgaWYgX3R5cGUucXVhbGlmaWVkX25hbWUoKSA9PSAnb2JqZWN0JzoKKyAgICAgICAg
ICAgIHJldHVybiAnUmVmPEpTT046Ok9iamVjdD4mJicKKworICAgICAgICBpZiBfdHlwZS5xdWFs
aWZpZWRfbmFtZSgpID09ICdhcnJheSc6CisgICAgICAgICAgICByZXR1cm4gJ1JlZjxKU09OOjpB
cnJheT4mJicKKworICAgICAgICBpZiBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpID09ICdhbnknOgor
ICAgICAgICAgICAgcmV0dXJuICdSZWY8SlNPTjo6VmFsdWU+JiYnCisKKyAgICAgICAgaWYgX3R5
cGUucXVhbGlmaWVkX25hbWUoKSA9PSAnc3RyaW5nJzoKKyAgICAgICAgICAgIHJldHVybiAnY29u
c3QgJXMmJyAlIENwcEdlbmVyYXRvci5jcHBfbmFtZV9mb3JfcHJpbWl0aXZlX3R5cGUoX3R5cGUp
CisKICAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgRW51bVR5cGUpOgogICAgICAgICAgICAg
aWYgX3R5cGUuaXNfYW5vbnltb3VzOgotICAgICAgICAgICAgICAgIGVudW1fdHlwZV9uYW1lID0g
dWNmaXJzdCh0eXBlX25hbWUpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGVu
dW1fdHlwZV9uYW1lID0gJ0luc3BlY3Rvcjo6UHJvdG9jb2w6OiVzOjolcycgJSAoX3R5cGUudHlw
ZV9kb21haW4oKS5kb21haW5fbmFtZSwgX3R5cGUucmF3X25hbWUoKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gdWNmaXJzdChuYW1lKQorICAgICAgICAgICAgcmV0dXJuICdQcm90b2NvbDo6JXM6
OiVzJyAlIChfdHlwZS50eXBlX2RvbWFpbigpLmRvbWFpbl9uYW1lLCBfdHlwZS5yYXdfbmFtZSgp
KQogCi0gICAgICAgICAgICBpZiBpc19vcHRpb25hbDoKLSAgICAgICAgICAgICAgICByZXR1cm4g
JyVzKicgJSBlbnVtX3R5cGVfbmFtZQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAg
ICByZXR1cm4gJyVzJyAlIGVudW1fdHlwZV9uYW1lCi0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAg
ZGVmIGNwcF90eXBlX2Zvcl9mb3JtYWxfb3V0X3BhcmFtZXRlcihwYXJhbWV0ZXIpOgotICAgICAg
ICBfdHlwZSA9IHBhcmFtZXRlci50eXBlCi0KLSAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwg
QWxpYXNlZFR5cGUpOgotICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5hbGlhc2VkX3R5cGUgICMg
RmFsbCB0aHJvdWdoLgotCi0gICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIChPYmplY3RUeXBl
LCBBcnJheVR5cGUpKToKLSAgICAgICAgICAgIHJldHVybiAnUmVmUHRyPCVzPiYnICUgQ3BwR2Vu
ZXJhdG9yLmNwcF9wcm90b2NvbF90eXBlX2Zvcl90eXBlKF90eXBlKQogICAgICAgICBpZiBpc2lu
c3RhbmNlKF90eXBlLCBQcmltaXRpdmVUeXBlKToKLSAgICAgICAgICAgIGNwcF9uYW1lID0gQ3Bw
R2VuZXJhdG9yLmNwcF9uYW1lX2Zvcl9wcmltaXRpdmVfdHlwZShfdHlwZSkKLSAgICAgICAgICAg
IGlmIHBhcmFtZXRlci5pc19vcHRpb25hbDoKLSAgICAgICAgICAgICAgICByZXR1cm4gIk9wdGlv
bmFsPCVzPiYiICUgY3BwX25hbWUKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAg
cmV0dXJuICclcyonICUgY3BwX25hbWUKLSAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgRW51
bVR5cGUpOgotICAgICAgICAgICAgaWYgX3R5cGUuaXNfYW5vbnltb3VzOgotICAgICAgICAgICAg
ICAgIHJldHVybiAnJXNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OiVzKicgJSAoX3R5cGUudHlw
ZV9kb21haW4oKS5kb21haW5fbmFtZSwgdWNmaXJzdChwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUp
KQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByZXR1cm4gJ0luc3BlY3Rvcjo6
UHJvdG9jb2w6OiVzOjolcyonICUgKF90eXBlLnR5cGVfZG9tYWluKCkuZG9tYWluX25hbWUsIF90
eXBlLnJhd19uYW1lKCkpCisgICAgICAgICAgICByZXR1cm4gQ3BwR2VuZXJhdG9yLmNwcF9uYW1l
X2Zvcl9wcmltaXRpdmVfdHlwZShfdHlwZSkKIAotICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJ1
bmtub3duIGZvcm1hbCBvdXQgcGFyYW1ldGVyIHR5cGUuIikKLQotICAgICMgRklYTUU6IHRoaXMg
aXMgb25seSBzbGlnaHRseSBkaWZmZXJlbnQgZnJvbSBvdXQgcGFyYW1ldGVyczsgdGhleSBjb3Vs
ZCBiZSB1bmlmaWVkLgotICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgY3BwX3R5cGVfZm9yX2Zv
cm1hbF9hc3luY19wYXJhbWV0ZXIocGFyYW1ldGVyKToKLSAgICAgICAgX3R5cGUgPSBwYXJhbWV0
ZXIudHlwZQotICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBBbGlhc2VkVHlwZSk6Ci0gICAg
ICAgICAgICBfdHlwZSA9IF90eXBlLmFsaWFzZWRfdHlwZSAgIyBGYWxsIHRocm91Z2guCi0KLSAg
ICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgKE9iamVjdFR5cGUsIEFycmF5VHlwZSkpOgotICAg
ICAgICAgICAgcmV0dXJuICdSZWZQdHI8JXM+JiYnICUgQ3BwR2VuZXJhdG9yLmNwcF9wcm90b2Nv
bF90eXBlX2Zvcl90eXBlKF90eXBlKQotICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBQcmlt
aXRpdmVUeXBlKToKLSAgICAgICAgICAgIGNwcF9uYW1lID0gQ3BwR2VuZXJhdG9yLmNwcF9uYW1l
X2Zvcl9wcmltaXRpdmVfdHlwZShfdHlwZSkKLSAgICAgICAgICAgIGlmIHBhcmFtZXRlci5pc19v
cHRpb25hbDoKLSAgICAgICAgICAgICAgICByZXR1cm4gIk9wdGlvbmFsPCVzPiYiICUgY3BwX25h
bWUKLSAgICAgICAgICAgIGVsaWYgX3R5cGUucXVhbGlmaWVkX25hbWUoKSBpbiBbJ2ludGVnZXIn
LCAnbnVtYmVyJ106Ci0gICAgICAgICAgICAgICAgcmV0dXJuIENwcEdlbmVyYXRvci5jcHBfbmFt
ZV9mb3JfcHJpbWl0aXZlX3R5cGUoX3R5cGUpCi0gICAgICAgICAgICBlbGlmIF90eXBlLnF1YWxp
ZmllZF9uYW1lKCkgaW4gWydzdHJpbmcnXToKLSAgICAgICAgICAgICAgICByZXR1cm4gJ2NvbnN0
ICVzJicgJSBjcHBfbmFtZQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByZXR1
cm4gY3BwX25hbWUKLSAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgRW51bVR5cGUpOgotICAg
ICAgICAgICAgaWYgX3R5cGUuaXNfYW5vbnltb3VzOgotICAgICAgICAgICAgICAgIGNwcF9uYW1l
ID0gJyVzQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjolcycgJSAoX3R5cGUudHlwZV9kb21haW4o
KS5kb21haW5fbmFtZSwgdWNmaXJzdChwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpKQotICAgICAg
ICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBjcHBfbmFtZSA9ICdJbnNwZWN0b3I6OlByb3Rv
Y29sOjolczo6JXMnICUgKF90eXBlLnR5cGVfZG9tYWluKCkuZG9tYWluX25hbWUsIF90eXBlLnJh
d19uYW1lKCkpCi0KLSAgICAgICAgICAgIGlmIHBhcmFtZXRlci5pc19vcHRpb25hbDoKLSAgICAg
ICAgICAgICAgICByZXR1cm4gIk9wdGlvbmFsPCVzPiIgJSBjcHBfbmFtZQotICAgICAgICAgICAg
ZWxzZToKLSAgICAgICAgICAgICAgICByZXR1cm4gY3BwX25hbWUKLQotICAgICAgICByYWlzZSBW
YWx1ZUVycm9yKCJVbmtub3duIGZvcm1hbCBhc3luYyBwYXJhbWV0ZXIgdHlwZS4iKQorICAgICAg
ICByYWlzZSBWYWx1ZUVycm9yKCJ1bmtub3duIHR5cGUiKQogCiAgICAgIyBJbi1wYXJhbWV0ZXJz
IGRvbid0IHVzZSBidWlsZGVyIHR5cGVzLCBiZWNhdXNlIHRoZXkgY291bGQgYmUgcGFzc2VkCiAg
ICAgIyAib3BlbiB0eXBlcyIgdGhhdCBhcmUgbWFudWFsbHkgY29uc3RydWN0ZWQgb3V0IG9mIElu
c3BlY3Rvck9iamVjdHMuCi0KLSAgICAjIEZJWE1FOiBPbmx5IHBhcmFtZXRlcnMgdGhhdCBhcmUg
YWN0dWFsbHkgb3BlbiB0eXBlcyBzaG91bGQgbmVlZCBub24tYnVpbGRlciBwYXJhbWV0ZXIgdHlw
ZXMuCiAgICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBjcHBfdHlwZV9mb3Jfc3RhY2tfaW5fcGFy
YW1ldGVyKHBhcmFtZXRlcik6Ci0gICAgICAgIF90eXBlID0gcGFyYW1ldGVyLnR5cGUKKyAgICBk
ZWYgY3BwX3R5cGVfZm9yX2NvbW1hbmRfcGFyYW1ldGVyKF90eXBlLCBpc19vcHRpb25hbCk6CiAg
ICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEFsaWFzZWRUeXBlKToKLSAgICAgICAgICAgIF90
eXBlID0gX3R5cGUuYWxpYXNlZF90eXBlICAjIEZhbGwgdGhyb3VnaC4KKyAgICAgICAgICAgIF90
eXBlID0gX3R5cGUuYWxpYXNlZF90eXBlCisgICAgICAgICAgICAjIGZhbGx0aHJvdWdoCisKKyAg
ICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgRW51bVR5cGUpIGFuZCBfdHlwZS5pc19hbm9ueW1v
dXM6CisgICAgICAgICAgICBfdHlwZSA9IF90eXBlLnByaW1pdGl2ZV90eXBlCisgICAgICAgICAg
ICAjIGZhbGx0aHJvdWdoCisKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgT2JqZWN0VHlw
ZSkgb3IgX3R5cGUucXVhbGlmaWVkX25hbWUoKSA9PSAnb2JqZWN0JzoKKyAgICAgICAgICAgIGlm
IGlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAgIHJldHVybiAnUmVmUHRyPEpTT046Ok9iamVj
dD4mJicKKyAgICAgICAgICAgIHJldHVybiAnUmVmPEpTT046Ok9iamVjdD4mJicKKworICAgICAg
ICBpZiBpc2luc3RhbmNlKF90eXBlLCBBcnJheVR5cGUpIG9yIF90eXBlLnF1YWxpZmllZF9uYW1l
KCkgPT0gJ2FycmF5JzoKKyAgICAgICAgICAgIGlmIGlzX29wdGlvbmFsOgorICAgICAgICAgICAg
ICAgIHJldHVybiAnUmVmUHRyPEpTT046OkFycmF5PiYmJworICAgICAgICAgICAgcmV0dXJuICdS
ZWY8SlNPTjo6QXJyYXk+JiYnCisKKyAgICAgICAgaWYgX3R5cGUucXVhbGlmaWVkX25hbWUoKSA9
PSAnYW55JzoKKyAgICAgICAgICAgIGlmIGlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAgIHJl
dHVybiAnUmVmUHRyPEpTT046OlZhbHVlPiYmJworICAgICAgICAgICAgcmV0dXJuICdSZWY8SlNP
Tjo6VmFsdWU+JiYnCisKKyAgICAgICAgaWYgX3R5cGUucXVhbGlmaWVkX25hbWUoKSA9PSAnc3Ry
aW5nJzoKKyAgICAgICAgICAgIHJldHVybiAnY29uc3QgJXMmJyAlIENwcEdlbmVyYXRvci5jcHBf
bmFtZV9mb3JfcHJpbWl0aXZlX3R5cGUoX3R5cGUpCiAKICAgICAgICAgaWYgaXNpbnN0YW5jZShf
dHlwZSwgRW51bVR5cGUpOgotICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5wcmltaXRpdmVfdHlw
ZSAgIyBGYWxsIHRocm91Z2guCi0KLSAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgT2JqZWN0
VHlwZSk6Ci0gICAgICAgICAgICByZXR1cm4gIlJlZlB0cjxKU09OOjpPYmplY3Q+IgotICAgICAg
ICBpZiBpc2luc3RhbmNlKF90eXBlLCBBcnJheVR5cGUpOgotICAgICAgICAgICAgcmV0dXJuICJS
ZWZQdHI8SlNPTjo6QXJyYXk+IgotICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBQcmltaXRp
dmVUeXBlKToKKyAgICAgICAgICAgIGNwcF9uYW1lID0gJ1Byb3RvY29sOjolczo6JXMnICUgKF90
eXBlLnR5cGVfZG9tYWluKCkuZG9tYWluX25hbWUsIF90eXBlLnJhd19uYW1lKCkpCisgICAgICAg
IGVsaWYgaXNpbnN0YW5jZShfdHlwZSwgUHJpbWl0aXZlVHlwZSk6CiAgICAgICAgICAgICBjcHBf
bmFtZSA9IENwcEdlbmVyYXRvci5jcHBfbmFtZV9mb3JfcHJpbWl0aXZlX3R5cGUoX3R5cGUpCi0g
ICAgICAgICAgICBpZiBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpIGluIFsnYW55JywgJ29iamVjdCdd
OgotICAgICAgICAgICAgICAgIHJldHVybiAiUmVmUHRyPCVzPiIgJSBDcHBHZW5lcmF0b3IuY3Bw
X25hbWVfZm9yX3ByaW1pdGl2ZV90eXBlKF90eXBlKQotICAgICAgICAgICAgZWxpZiBwYXJhbWV0
ZXIuaXNfb3B0aW9uYWwgYW5kIF90eXBlLnF1YWxpZmllZF9uYW1lKCkgbm90IGluIFsnYm9vbGVh
bicsICdzdHJpbmcnLCAnaW50ZWdlcicsICdudW1iZXInXToKLSAgICAgICAgICAgICAgICByZXR1
cm4gIk9wdGlvbmFsPCVzPiIgJSBjcHBfbmFtZQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAg
ICAgICAgICByZXR1cm4gY3BwX25hbWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNl
IFZhbHVlRXJyb3IoInVua25vd24gdHlwZSIpCisKKyAgICAgICAgaWYgaXNfb3B0aW9uYWw6Cisg
ICAgICAgICAgICBjcHBfbmFtZSA9ICdPcHRpb25hbDwlcz4mJicgJSBjcHBfbmFtZQorICAgICAg
ICByZXR1cm4gY3BwX25hbWUKIAogICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgY3BwX3R5cGVf
Zm9yX3N0YWNrX291dF9wYXJhbWV0ZXIocGFyYW1ldGVyKToKLSAgICAgICAgX3R5cGUgPSBwYXJh
bWV0ZXIudHlwZQorICAgIGRlZiBjcHBfdHlwZV9mb3JfY29tbWFuZF9yZXR1cm5fZGVjbGFyYXRp
b24oX3R5cGUsIGlzX29wdGlvbmFsKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgQWxp
YXNlZFR5cGUpOgorICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5hbGlhc2VkX3R5cGUKKyAgICAg
ICAgICAgICMgZmFsbHRocm91Z2gKKworICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBFbnVt
VHlwZSkgYW5kIF90eXBlLmlzX2Fub255bW91czoKKyAgICAgICAgICAgIF90eXBlID0gX3R5cGUu
cHJpbWl0aXZlX3R5cGUKKyAgICAgICAgICAgICMgZmFsbHRocm91Z2gKKwogICAgICAgICBpZiBp
c2luc3RhbmNlKF90eXBlLCAoQXJyYXlUeXBlLCBPYmplY3RUeXBlKSk6Ci0gICAgICAgICAgICBy
ZXR1cm4gJ1JlZlB0cjwlcz4nICUgQ3BwR2VuZXJhdG9yLmNwcF9wcm90b2NvbF90eXBlX2Zvcl90
eXBlKF90eXBlKQotICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBBbGlhc2VkVHlwZSk6Ci0g
ICAgICAgICAgICBidWlsZGVyX3R5cGUgPSBDcHBHZW5lcmF0b3IuY3BwX3Byb3RvY29sX3R5cGVf
Zm9yX3R5cGUoX3R5cGUpCi0gICAgICAgICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuICJPcHRpb25hbDwlcz4iICUgYnVpbGRlcl90eXBlCi0gICAg
ICAgICAgICByZXR1cm4gJyVzJyAlIGJ1aWxkZXJfdHlwZQotICAgICAgICBpZiBpc2luc3RhbmNl
KF90eXBlLCBQcmltaXRpdmVUeXBlKToKLSAgICAgICAgICAgIGNwcF9uYW1lID0gQ3BwR2VuZXJh
dG9yLmNwcF9uYW1lX2Zvcl9wcmltaXRpdmVfdHlwZShfdHlwZSkKLSAgICAgICAgICAgIGlmIHBh
cmFtZXRlci5pc19vcHRpb25hbDoKLSAgICAgICAgICAgICAgICByZXR1cm4gIk9wdGlvbmFsPCVz
PiIgJSBjcHBfbmFtZQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByZXR1cm4g
Y3BwX25hbWUKKyAgICAgICAgICAgIGlmIGlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAgIHJl
dHVybiAnUmVmUHRyPCVzPicgJSBDcHBHZW5lcmF0b3IuY3BwX3Byb3RvY29sX3R5cGVfZm9yX3R5
cGUoX3R5cGUpCisgICAgICAgICAgICByZXR1cm4gJ1JlZjwlcz4nICUgQ3BwR2VuZXJhdG9yLmNw
cF9wcm90b2NvbF90eXBlX2Zvcl90eXBlKF90eXBlKQorCisgICAgICAgIGlmIF90eXBlLnF1YWxp
ZmllZF9uYW1lKCkgPT0gJ29iamVjdCc6CisgICAgICAgICAgICBpZiBpc19vcHRpb25hbDoKKyAg
ICAgICAgICAgICAgICByZXR1cm4gJ1JlZlB0cjxKU09OOjpPYmplY3Q+JworICAgICAgICAgICAg
cmV0dXJuICdSZWY8SlNPTjo6T2JqZWN0PicKKworICAgICAgICBpZiBfdHlwZS5xdWFsaWZpZWRf
bmFtZSgpID09ICdhcnJheSc6CisgICAgICAgICAgICBpZiBpc19vcHRpb25hbDoKKyAgICAgICAg
ICAgICAgICByZXR1cm4gJ1JlZlB0cjxKU09OOjpBcnJheT4nCisgICAgICAgICAgICByZXR1cm4g
J1JlZjxKU09OOjpBcnJheT4nCisKKyAgICAgICAgaWYgX3R5cGUucXVhbGlmaWVkX25hbWUoKSA9
PSAnYW55JzoKKyAgICAgICAgICAgIGlmIGlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAgIHJl
dHVybiAnUmVmUHRyPEpTT046OlZhbHVlPicKKyAgICAgICAgICAgIHJldHVybiAnUmVmPEpTT046
OlZhbHVlPicKKworICAgICAgICBpZiBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpID09ICdzdHJpbmcn
OgorICAgICAgICAgICAgcmV0dXJuIENwcEdlbmVyYXRvci5jcHBfbmFtZV9mb3JfcHJpbWl0aXZl
X3R5cGUoX3R5cGUpCisKICAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgRW51bVR5cGUpOgot
ICAgICAgICAgICAgaWYgX3R5cGUuaXNfYW5vbnltb3VzOgotICAgICAgICAgICAgICAgIHJldHVy
biAnJXNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OiVzJyAlIChfdHlwZS50eXBlX2RvbWFpbigp
LmRvbWFpbl9uYW1lLCB1Y2ZpcnN0KHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkpCi0gICAgICAg
ICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJldHVybiAnSW5zcGVjdG9yOjpQcm90b2NvbDo6
JXM6OiVzJyAlIChfdHlwZS50eXBlX2RvbWFpbigpLmRvbWFpbl9uYW1lLCBfdHlwZS5yYXdfbmFt
ZSgpKQorICAgICAgICAgICAgY3BwX25hbWUgPSAnUHJvdG9jb2w6OiVzOjolcycgJSAoX3R5cGUu
dHlwZV9kb21haW4oKS5kb21haW5fbmFtZSwgX3R5cGUucmF3X25hbWUoKSkKKyAgICAgICAgZWxp
ZiBpc2luc3RhbmNlKF90eXBlLCBQcmltaXRpdmVUeXBlKToKKyAgICAgICAgICAgIGNwcF9uYW1l
ID0gQ3BwR2VuZXJhdG9yLmNwcF9uYW1lX2Zvcl9wcmltaXRpdmVfdHlwZShfdHlwZSkKKyAgICAg
ICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInVua25vd24gdHlwZSIpCisK
KyAgICAgICAgaWYgaXNfb3B0aW9uYWw6CisgICAgICAgICAgICBjcHBfbmFtZSA9ICdPcHRpb25h
bDwlcz4nICUgY3BwX25hbWUKKyAgICAgICAgcmV0dXJuIGNwcF9uYW1lCiAKICAgICBAc3RhdGlj
bWV0aG9kCi0gICAgZGVmIGNwcF9hc3NlcnRpb25fbWV0aG9kX2Zvcl90eXBlX21lbWJlcih0eXBl
X21lbWJlciwgb2JqZWN0X2RlY2xhcmF0aW9uKToKKyAgICBkZWYgY3BwX3R5cGVfZm9yX2NvbW1h
bmRfcmV0dXJuX2FyZ3VtZW50KF90eXBlLCBpc19vcHRpb25hbCk6CisgICAgICAgIGlmIGlzaW5z
dGFuY2UoX3R5cGUsIEFsaWFzZWRUeXBlKToKKyAgICAgICAgICAgIF90eXBlID0gX3R5cGUuYWxp
YXNlZF90eXBlCisgICAgICAgICAgICAjIGZhbGx0aHJvdWcKIAotICAgICAgICBkZWYgYXNzZXJ0
aW9uX21ldGhvZF9mb3JfdHlwZShfdHlwZSk6Ci0gICAgICAgICAgICByZXR1cm4gJ0JpbmRpbmdU
cmFpdHM8JXM+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZScgJSBDcHBHZW5lcmF0b3IuY3Bw
X3Byb3RvY29sX3R5cGVfZm9yX3R5cGUoX3R5cGUpCisgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5
cGUsIEVudW1UeXBlKSBhbmQgX3R5cGUuaXNfYW5vbnltb3VzOgorICAgICAgICAgICAgX3R5cGUg
PSBfdHlwZS5wcmltaXRpdmVfdHlwZQorICAgICAgICAgICAgIyBmYWxsdGhyb3VnaAogCi0gICAg
ICAgIGlmIGlzaW5zdGFuY2UodHlwZV9tZW1iZXIudHlwZSwgQWxpYXNlZFR5cGUpOgotICAgICAg
ICAgICAgcmV0dXJuIGFzc2VydGlvbl9tZXRob2RfZm9yX3R5cGUodHlwZV9tZW1iZXIudHlwZS5h
bGlhc2VkX3R5cGUpCi0gICAgICAgIGlmIGlzaW5zdGFuY2UodHlwZV9tZW1iZXIudHlwZSwgRW51
bVR5cGUpIGFuZCB0eXBlX21lbWJlci50eXBlLmlzX2Fub255bW91czoKLSAgICAgICAgICAgIHJl
dHVybiAnQmluZGluZ1RyYWl0czwlcz46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlJyAlIENw
cEdlbmVyYXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZV9tZW1iZXIodHlwZV9tZW1iZXIs
IG9iamVjdF9kZWNsYXJhdGlvbikKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgKEFycmF5
VHlwZSwgT2JqZWN0VHlwZSkpOgorICAgICAgICAgICAgaWYgaXNfb3B0aW9uYWw6CisgICAgICAg
ICAgICAgICAgcmV0dXJuICdSZWZQdHI8JXM+JiYnICUgQ3BwR2VuZXJhdG9yLmNwcF9wcm90b2Nv
bF90eXBlX2Zvcl90eXBlKF90eXBlKQorICAgICAgICAgICAgcmV0dXJuICdSZWY8JXM+JiYnICUg
Q3BwR2VuZXJhdG9yLmNwcF9wcm90b2NvbF90eXBlX2Zvcl90eXBlKF90eXBlKQogCi0gICAgICAg
IHJldHVybiBhc3NlcnRpb25fbWV0aG9kX2Zvcl90eXBlKHR5cGVfbWVtYmVyLnR5cGUpCisgICAg
ICAgIGlmIF90eXBlLnF1YWxpZmllZF9uYW1lKCkgPT0gJ29iamVjdCc6CisgICAgICAgICAgICBp
ZiBpc19vcHRpb25hbDoKKyAgICAgICAgICAgICAgICByZXR1cm4gJ1JlZlB0cjxKU09OOjpPYmpl
Y3Q+JiYnCisgICAgICAgICAgICByZXR1cm4gJ1JlZjxKU09OOjpPYmplY3Q+JiYnCisKKyAgICAg
ICAgaWYgX3R5cGUucXVhbGlmaWVkX25hbWUoKSA9PSAnYXJyYXknOgorICAgICAgICAgICAgaWYg
aXNfb3B0aW9uYWw6CisgICAgICAgICAgICAgICAgcmV0dXJuICdSZWZQdHI8SlNPTjo6QXJyYXk+
JiYnCisgICAgICAgICAgICByZXR1cm4gJ1JlZjxKU09OOjpBcnJheT4mJicKKworICAgICAgICBp
ZiBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpID09ICdhbnknOgorICAgICAgICAgICAgaWYgaXNfb3B0
aW9uYWw6CisgICAgICAgICAgICAgICAgcmV0dXJuICdSZWZQdHI8SlNPTjo6VmFsdWU+JiYnCisg
ICAgICAgICAgICByZXR1cm4gJ1JlZjxKU09OOjpWYWx1ZT4mJicKKworICAgICAgICBpZiBfdHlw
ZS5xdWFsaWZpZWRfbmFtZSgpID09ICdzdHJpbmcnOgorICAgICAgICAgICAgcmV0dXJuICdjb25z
dCAlcyYnICUgQ3BwR2VuZXJhdG9yLmNwcF9uYW1lX2Zvcl9wcmltaXRpdmVfdHlwZShfdHlwZSkK
KworICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBFbnVtVHlwZSk6CisgICAgICAgICAgICBj
cHBfbmFtZSA9ICdQcm90b2NvbDo6JXM6OiVzJyAlIChfdHlwZS50eXBlX2RvbWFpbigpLmRvbWFp
bl9uYW1lLCBfdHlwZS5yYXdfbmFtZSgpKQorICAgICAgICBlbGlmIGlzaW5zdGFuY2UoX3R5cGUs
IFByaW1pdGl2ZVR5cGUpOgorICAgICAgICAgICAgY3BwX25hbWUgPSBDcHBHZW5lcmF0b3IuY3Bw
X25hbWVfZm9yX3ByaW1pdGl2ZV90eXBlKF90eXBlKQorICAgICAgICBlbHNlOgorICAgICAgICAg
ICAgcmFpc2UgVmFsdWVFcnJvcigidW5rbm93biB0eXBlIikKKworICAgICAgICBpZiBpc19vcHRp
b25hbDoKKyAgICAgICAgICAgIGNwcF9uYW1lID0gJ09wdGlvbmFsPCVzPiYmJyAlIGNwcF9uYW1l
CisgICAgICAgIHJldHVybiBjcHBfbmFtZQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBj
cHBfdHlwZV9mb3JfZXZlbnRfcGFyYW1ldGVyKF90eXBlLCBpc19vcHRpb25hbCk6CisgICAgICAg
IGlmIGlzaW5zdGFuY2UoX3R5cGUsIEFsaWFzZWRUeXBlKToKKyAgICAgICAgICAgIF90eXBlID0g
X3R5cGUuYWxpYXNlZF90eXBlCisgICAgICAgICAgICAjIGZhbGx0aHJvdWdoCisKKyAgICAgICAg
aWYgaXNpbnN0YW5jZShfdHlwZSwgRW51bVR5cGUpIGFuZCBfdHlwZS5pc19hbm9ueW1vdXM6Cisg
ICAgICAgICAgICBfdHlwZSA9IF90eXBlLnByaW1pdGl2ZV90eXBlCisgICAgICAgICAgICAjIGZh
bGx0aHJvdWdoCisKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgKEFycmF5VHlwZSwgT2Jq
ZWN0VHlwZSkpOgorICAgICAgICAgICAgaWYgaXNfb3B0aW9uYWw6CisgICAgICAgICAgICAgICAg
cmV0dXJuICdSZWZQdHI8JXM+JiYnICUgQ3BwR2VuZXJhdG9yLmNwcF9wcm90b2NvbF90eXBlX2Zv
cl90eXBlKF90eXBlKQorICAgICAgICAgICAgcmV0dXJuICdSZWY8JXM+JiYnICUgQ3BwR2VuZXJh
dG9yLmNwcF9wcm90b2NvbF90eXBlX2Zvcl90eXBlKF90eXBlKQorCisgICAgICAgIGlmIF90eXBl
LnF1YWxpZmllZF9uYW1lKCkgPT0gJ29iamVjdCc6CisgICAgICAgICAgICBpZiBpc19vcHRpb25h
bDoKKyAgICAgICAgICAgICAgICByZXR1cm4gJ1JlZlB0cjxKU09OOjpPYmplY3Q+JiYnCisgICAg
ICAgICAgICByZXR1cm4gJ1JlZjxKU09OOjpPYmplY3Q+JiYnCisKKyAgICAgICAgaWYgX3R5cGUu
cXVhbGlmaWVkX25hbWUoKSA9PSAnYXJyYXknOgorICAgICAgICAgICAgaWYgaXNfb3B0aW9uYWw6
CisgICAgICAgICAgICAgICAgcmV0dXJuICdSZWZQdHI8SlNPTjo6QXJyYXk+JiYnCisgICAgICAg
ICAgICByZXR1cm4gJ1JlZjxKU09OOjpBcnJheT4mJicKKworICAgICAgICBpZiBfdHlwZS5xdWFs
aWZpZWRfbmFtZSgpID09ICdhbnknOgorICAgICAgICAgICAgaWYgaXNfb3B0aW9uYWw6CisgICAg
ICAgICAgICAgICAgcmV0dXJuICdSZWZQdHI8SlNPTjo6VmFsdWU+JiYnCisgICAgICAgICAgICBy
ZXR1cm4gJ1JlZjxKU09OOjpWYWx1ZT4mJicKKworICAgICAgICBpZiBfdHlwZS5xdWFsaWZpZWRf
bmFtZSgpID09ICdzdHJpbmcnOgorICAgICAgICAgICAgcmV0dXJuICdjb25zdCAlcyYnICUgQ3Bw
R2VuZXJhdG9yLmNwcF9uYW1lX2Zvcl9wcmltaXRpdmVfdHlwZShfdHlwZSkKKworICAgICAgICBp
ZiBpc2luc3RhbmNlKF90eXBlLCBFbnVtVHlwZSk6CisgICAgICAgICAgICBjcHBfbmFtZSA9ICdQ
cm90b2NvbDo6JXM6OiVzJyAlIChfdHlwZS50eXBlX2RvbWFpbigpLmRvbWFpbl9uYW1lLCBfdHlw
ZS5yYXdfbmFtZSgpKQorICAgICAgICBlbGlmIGlzaW5zdGFuY2UoX3R5cGUsIFByaW1pdGl2ZVR5
cGUpOgorICAgICAgICAgICAgY3BwX25hbWUgPSBDcHBHZW5lcmF0b3IuY3BwX25hbWVfZm9yX3By
aW1pdGl2ZV90eXBlKF90eXBlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgVmFs
dWVFcnJvcigidW5rbm93biB0eXBlIikKKworICAgICAgICBpZiBpc19vcHRpb25hbDoKKyAgICAg
ICAgICAgIGNwcF9uYW1lID0gJ09wdGlvbmFsPCVzPiYmJyAlIGNwcF9uYW1lCisgICAgICAgIHJl
dHVybiBjcHBfbmFtZQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBjcHBfdHlwZV9mb3Jf
ZW51bShlbnVtX3R5cGUsIG5hbWUpOgorICAgICAgICBpZiBlbnVtX3R5cGUuaXNfYW5vbnltb3Vz
OgorICAgICAgICAgICAgcmV0dXJuICdQcm90b2NvbDo6JXM6OiVzJyAlIChlbnVtX3R5cGUudHlw
ZV9kb21haW4oKS5kb21haW5fbmFtZSwgdWNmaXJzdChuYW1lKSkKKyAgICAgICAgcmV0dXJuICdQ
cm90b2NvbDo6JXM6OiVzJyAlIChlbnVtX3R5cGUudHlwZV9kb21haW4oKS5kb21haW5fbmFtZSwg
ZW51bV90eXBlLnJhd19uYW1lKCkpCiAKICAgICBAc3RhdGljbWV0aG9kCiAgICAgZGVmIGNwcF9u
YW1lX2Zvcl9wcmltaXRpdmVfdHlwZShfdHlwZSk6CiAgICAgICAgIHJldHVybiBfUFJJTUlUSVZF
X1RPX0NQUF9OQU1FX01BUC5nZXQoX3R5cGUucmF3X25hbWUoKSkKIAotICAgICMgRGVjaWRlIHdo
ZXRoZXIgY2VydGFpbiBoZWxwZXJzIGFyZSBuZWNlc3NhcnkgaW4gYSBzaXR1YXRpb24uCiAgICAg
QHN0YXRpY21ldGhvZAotICAgIGRlZiBzaG91bGRfdXNlX3dyYXBwZXJfZm9yX3JldHVybl90eXBl
KF90eXBlKToKLSAgICAgICAgcmV0dXJuIG5vdCBpc2luc3RhbmNlKF90eXBlLCAoQXJyYXlUeXBl
LCBPYmplY3RUeXBlKSkKKyAgICBkZWYgc2hvdWxkX21vdmVfYXJndW1lbnQoX3R5cGUsIGlzX29w
dGlvbmFsKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgQWxpYXNlZFR5cGUpOgorICAg
ICAgICAgICAgX3R5cGUgPSBfdHlwZS5hbGlhc2VkX3R5cGUKKyAgICAgICAgaWYgaXNpbnN0YW5j
ZShfdHlwZSwgRW51bVR5cGUpOgorICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5wcmltaXRpdmVf
dHlwZQorCisgICAgICAgIGlmIF90eXBlLnJhd19uYW1lKCkgPT0gJ3N0cmluZyc6CisgICAgICAg
ICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIGlzX29wdGlvbmFsID09IChfdHlwZS5y
YXdfbmFtZSgpIGluIFsnYm9vbGVhbicsICdpbnRlZ2VyJywgJ251bWJlciddKQogCiAgICAgQHN0
YXRpY21ldGhvZAotICAgIGRlZiBzaG91bGRfdXNlX3JlZmVyZW5jZXNfZm9yX3R5cGUoX3R5cGUp
OgotICAgICAgICByZXR1cm4gaXNpbnN0YW5jZShfdHlwZSwgKEFycmF5VHlwZSwgT2JqZWN0VHlw
ZSkpIG9yIChpc2luc3RhbmNlKF90eXBlLCAoUHJpbWl0aXZlVHlwZSkpIGFuZCBfdHlwZS5xdWFs
aWZpZWRfbmFtZSgpIGluIFsiYW55IiwgIm9iamVjdCJdKQorICAgIGRlZiBzaG91bGRfcmVsZWFz
ZV9hcmd1bWVudChfdHlwZSwgaXNfb3B0aW9uYWwpOgorICAgICAgICBpZiBpc2luc3RhbmNlKF90
eXBlLCBBbGlhc2VkVHlwZSk6CisgICAgICAgICAgICBfdHlwZSA9IF90eXBlLmFsaWFzZWRfdHlw
ZQorICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBFbnVtVHlwZSk6CisgICAgICAgICAgICBf
dHlwZSA9IF90eXBlLnByaW1pdGl2ZV90eXBlCisKKyAgICAgICAgaWYgX3R5cGUucmF3X25hbWUo
KSA9PSAnc3RyaW5nJzoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBpZiBfdHlw
ZS5yYXdfbmFtZSgpIGluIFsnYm9vbGVhbicsICdpbnRlZ2VyJywgJ251bWJlciddOgorICAgICAg
ICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHJldHVybiBpc19vcHRpb25hbAogCiAgICAgQHN0
YXRpY21ldGhvZAotICAgIGRlZiBzaG91bGRfcGFzc19ieV9jb3B5X2Zvcl9yZXR1cm5fdHlwZShf
dHlwZSk6Ci0gICAgICAgIHJldHVybiBpc2luc3RhbmNlKF90eXBlLCAoQXJyYXlUeXBlLCBPYmpl
Y3RUeXBlKSkgb3IgKGlzaW5zdGFuY2UoX3R5cGUsIChQcmltaXRpdmVUeXBlKSkgYW5kIF90eXBl
LnF1YWxpZmllZF9uYW1lKCkgPT0gIm9iamVjdCIpCisgICAgZGVmIHNob3VsZF9kZXJlZmVyZW5j
ZV9hcmd1bWVudChfdHlwZSwgaXNfb3B0aW9uYWwpOgorICAgICAgICBpZiBpc2luc3RhbmNlKF90
eXBlLCBBbGlhc2VkVHlwZSk6CisgICAgICAgICAgICBfdHlwZSA9IF90eXBlLmFsaWFzZWRfdHlw
ZQorICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBFbnVtVHlwZSk6CisgICAgICAgICAgICBf
dHlwZSA9IF90eXBlLnByaW1pdGl2ZV90eXBlCisKKyAgICAgICAgaWYgX3R5cGUucmF3X25hbWUo
KSA9PSAnc3RyaW5nJzoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBpZiBfdHlw
ZS5yYXdfbmFtZSgpIG5vdCBpbiBbJ2Jvb2xlYW4nLCAnaW50ZWdlcicsICdudW1iZXInXToKKyAg
ICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICByZXR1cm4gaXNfb3B0aW9uYWwKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2Nw
cF9nZW5lcmF0b3JfdGVtcGxhdGVzLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL2NvZGVnZW4vY3BwX2dlbmVyYXRvcl90ZW1wbGF0ZXMucHkKaW5kZXggMDgyYmUz
M2YxNWRlMjViZTg4OTU3Y2IxNDIyOTM1MjAzNmVlMjJjZi4uN2M4NDg1Nzg2ZTljZGNmMTQyZTkz
OTYyYWUyY2Y0ZDEwNzFlMWQ4NyAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vY3BwX2dlbmVyYXRvcl90ZW1wbGF0ZXMucHkKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vY3BwX2dlbmVy
YXRvcl90ZW1wbGF0ZXMucHkKQEAgLTk1LDcgKzk1LDcgQEAgcHJvdGVjdGVkOgogICAgICIiIiR7
Y2xhc3NBbmRFeHBvcnRNYWNyb30gJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyIGZpbmFs
IDogcHVibGljIFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIHsKIHB1YmxpYzoKICAgICBz
dGF0aWMgUmVmPCR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEJhY2tlbmRE
aXNwYXRjaGVyJiwgJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwotICAg
IHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8
SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpIGZpbmFsOworICAgIHZvaWQgZGlzcGF0Y2gobG9uZyBw
cm90b2NvbF9jYWxsSWQsIGNvbnN0IFN0cmluZyYgcHJvdG9jb2xfbWV0aG9kLCBSZWY8SlNPTjo6
T2JqZWN0PiYmIHByb3RvY29sX21lc3NhZ2UpIGZpbmFsOwogJHtjb21tYW5kRGVjbGFyYXRpb25z
fQogcHJpdmF0ZToKICAgICAke2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERp
c3BhdGNoZXImLCAke2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7CkBAIC0x
MTQsMzIgKzExNCwzMCBAQCBwcml2YXRlOgogICAgICIiIiAgICAke2NsYXNzQW5kRXhwb3J0TWFj
cm99ICR7Y2FsbGJhY2tOYW1lfSA6IHB1YmxpYyBCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tC
YXNlIHsKICAgICBwdWJsaWM6CiAgICAgICAgICR7Y2FsbGJhY2tOYW1lfShSZWY8QmFja2VuZERp
c3BhdGNoZXI+JiYsIGludCBpZCk7Ci0gICAgICAgIHZvaWQgc2VuZFN1Y2Nlc3MoJHtvdXRQYXJh
bWV0ZXJzfSk7CisgICAgICAgIHZvaWQgc2VuZFN1Y2Nlc3MoJHtyZXR1cm5zfSk7CiAgICAgfTsK
LSAgICB2aXJ0dWFsIHZvaWQgJHtjb21tYW5kTmFtZX0oJHtpblBhcmFtZXRlcnN9KSA9IDA7IiIi
KQorICAgIHZpcnR1YWwgdm9pZCAke2NvbW1hbmROYW1lfSgke3BhcmFtZXRlcnN9KSA9IDA7IiIi
KQogCiAgICAgQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvblNtYWxsU3dpdGNoID0gKAot
ICAgICIiInZvaWQgJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25n
IHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVz
c2FnZSkKKyAgICAiIiJ2b2lkICR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0
Y2gobG9uZyBwcm90b2NvbF9jYWxsSWQsIGNvbnN0IFN0cmluZyYgcHJvdG9jb2xfbWV0aG9kLCBS
ZWY8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX21lc3NhZ2UpCiB7CiAgICAgUmVmPCR7ZG9tYWlu
TmFtZX1CYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7CiAKLSAgICBSZWZQdHI8SlNP
Tjo6T2JqZWN0PiBwYXJhbWV0ZXJzOwotICAgIG1lc3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9z
LCBwYXJhbWV0ZXJzKTsKKyAgICBhdXRvIHByb3RvY29sX3BhcmFtZXRlcnMgPSBwcm90b2NvbF9t
ZXNzYWdlLT5nZXRPYmplY3QoInBhcmFtcyJfcyk7CiAKICR7ZGlzcGF0Y2hDYXNlc30KIAotICAg
IG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNo
ZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJyR7ZG9tYWluTmFtZX0uIiArIG1ldGhvZCArICInIHdhcyBu
b3QgZm91bmQiKTsKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9y
KEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIicke2RvbWFpbk5hbWV9LiIgKyBw
cm90b2NvbF9tZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7CiB9IiIiKQogCiAgICAgQmFja2Vu
ZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkxhcmdlU3dpdGNoID0gKAotIiIidm9pZCAke2RvbWFp
bk5hbWV9QmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBT
dHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKQorIiIidm9pZCAke2Rv
bWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcHJvdG9jb2xfY2FsbElk
LCBjb25zdCBTdHJpbmcmIHByb3RvY29sX21ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBwcm90
b2NvbF9tZXNzYWdlKQogewogICAgIFJlZjwke2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXI+
IHByb3RlY3QoKnRoaXMpOwogCi0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVyczsK
LSAgICBtZXNzYWdlLT5nZXRPYmplY3QoInBhcmFtcyJfcywgcGFyYW1ldGVycyk7CisgICAgYXV0
byBwcm90b2NvbF9wYXJhbWV0ZXJzID0gcHJvdG9jb2xfbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJh
bXMiX3MpOwogCi0gICAgdXNpbmcgQ2FsbEhhbmRsZXIgPSB2b2lkICgke2RvbWFpbk5hbWV9QmFj
a2VuZERpc3BhdGNoZXI6OiopKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYm
IG1lc3NhZ2UpOworICAgIHVzaW5nIENhbGxIYW5kbGVyID0gdm9pZCAoJHtkb21haW5OYW1lfUJh
Y2tlbmREaXNwYXRjaGVyOjoqKShsb25nIHByb3RvY29sX2NhbGxJZCwgUmVmUHRyPEpTT046Ok9i
amVjdD4mJiBwcm90b2NvbF9tZXNzYWdlKTsKICAgICB1c2luZyBEaXNwYXRjaE1hcCA9IEhhc2hN
YXA8U3RyaW5nLCBDYWxsSGFuZGxlcj47CiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPERpc3Bh
dGNoTWFwPiBkaXNwYXRjaE1hcDsKICAgICBpZiAoZGlzcGF0Y2hNYXAuZ2V0KCkuaXNFbXB0eSgp
KSB7CkBAIC0xNTQsMTMgKzE1MiwxMyBAQCAke2Rpc3BhdGNoQ2FzZXN9CiAgICAgICAgICAgICBk
aXNwYXRjaE1hcC5nZXQoKS5hZGQoY29tbWFuZHNbaV0ubmFtZSwgY29tbWFuZHNbaV0uaGFuZGxl
cik7CiAgICAgfQogCi0gICAgYXV0byBmaW5kUmVzdWx0ID0gZGlzcGF0Y2hNYXAuZ2V0KCkuZmlu
ZChtZXRob2QpOworICAgIGF1dG8gZmluZFJlc3VsdCA9IGRpc3BhdGNoTWFwLmdldCgpLmZpbmQo
cHJvdG9jb2xfbWV0aG9kKTsKICAgICBpZiAoZmluZFJlc3VsdCA9PSBkaXNwYXRjaE1hcC5nZXQo
KS5lbmQoKSkgewotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVy
cm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIicke2RvbWFpbk5hbWV9LiIg
KyBtZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNo
ZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5k
LCAiJyR7ZG9tYWluTmFtZX0uIiArIHByb3RvY29sX21ldGhvZCArICInIHdhcyBub3QgZm91bmQi
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgICgoKnRoaXMpLipmaW5kUmVzdWx0LT52
YWx1ZSkocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKKyAgICAoKCp0aGlzKS4qZmlu
ZFJlc3VsdC0+dmFsdWUpKHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9wYXJhbWV0
ZXJzKSk7CiB9IiIiKQogCiAgICAgQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkRvbWFp
bkNvbnN0cnVjdG9yID0gKApAQCAtMTc3LDcgKzE3NSw3IEBAICR7ZG9tYWluTmFtZX1CYWNrZW5k
RGlzcGF0Y2hlcjo6JHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRj
aGVyCiB9IiIiKQogCiAgICAgQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvblByZXBhcmVD
b21tYW5kQXJndW1lbnRzID0gKAotIiIiJHtpblBhcmFtZXRlckRlY2xhcmF0aW9uc30KKyIiIiR7
cGFyYW1ldGVyRGVjbGFyYXRpb25zfQogICAgIGlmIChtX2JhY2tlbmREaXNwYXRjaGVyLT5oYXNQ
cm90b2NvbEVycm9ycygpKSB7CiAgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFBy
b3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OkludmFsaWRQYXJhbXMsICJTb21lIGFyZ3Vt
ZW50cyBvZiBtZXRob2QgXCcke2RvbWFpbk5hbWV9LiR7Y29tbWFuZE5hbWV9XCcgY2FuJ3QgYmUg
cHJvY2Vzc2VkIl9zKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMTg3LDExICsxODUsMTEgQEAgJHtk
b21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyOjoke2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNo
ZXIoQmFja2VuZERpc3BhdGNoZXIKICAgICBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9u
QXN5bmNDb21tYW5kID0gKAogIiIiJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVySGFuZGxl
cjo6JHtjYWxsYmFja05hbWV9Ojoke2NhbGxiYWNrTmFtZX0oUmVmPEJhY2tlbmREaXNwYXRjaGVy
PiYmIGJhY2tlbmREaXNwYXRjaGVyLCBpbnQgaWQpIDogQmFja2VuZERpc3BhdGNoZXI6OkNhbGxi
YWNrQmFzZShXVEZNb3ZlKGJhY2tlbmREaXNwYXRjaGVyKSwgaWQpIHsgfQogCi12b2lkICR7ZG9t
YWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OiR7Y2FsbGJhY2tOYW1lfTo6c2VuZFN1
Y2Nlc3MoJHtmb3JtYWxQYXJhbWV0ZXJzfSkKK3ZvaWQgJHtkb21haW5OYW1lfUJhY2tlbmREaXNw
YXRjaGVySGFuZGxlcjo6JHtjYWxsYmFja05hbWV9OjpzZW5kU3VjY2Vzcygke2NhbGxiYWNrUGFy
YW1ldGVyc30pCiB7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpP
YmplY3Q6OmNyZWF0ZSgpOwotJHtvdXRQYXJhbWV0ZXJBc3NpZ25tZW50c30KLSAgICBDYWxsYmFj
a0Jhc2U6OnNlbmRTdWNjZXNzKFdURk1vdmUoanNvbk1lc3NhZ2UpKTsKKyAgICBhdXRvIHByb3Rv
Y29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyR7cmV0dXJuQXNzaWdu
bWVudHN9CisgICAgQ2FsbGJhY2tCYXNlOjpzZW5kU3VjY2VzcyhXVEZNb3ZlKHByb3RvY29sX2pz
b25NZXNzYWdlKSk7CiB9IiIiKQogCiAgICAgRnJvbnRlbmREaXNwYXRjaGVyRG9tYWluRGlzcGF0
Y2hlckRlY2xhcmF0aW9uID0gKApAQCAtMjQ2LDEzICsyNDQsMTEgQEAgJHtjb25zdHJ1Y3RvckV4
YW1wbGV9CiAgICAgfSIiIikKIAogICAgIFByb3RvY29sT2JqZWN0UnVudGltZUNhc3QgPSAoCi0i
IiJSZWZQdHI8JHtvYmplY3RUeXBlfT4gQmluZGluZ1RyYWl0czwke29iamVjdFR5cGV9Pjo6cnVu
dGltZUNhc3QoUmVmUHRyPEpTT046OlZhbHVlPiYmIHZhbHVlKQorIiIiUmVmPCR7b2JqZWN0VHlw
ZX0+IEJpbmRpbmdUcmFpdHM8JHtvYmplY3RUeXBlfT46OnJ1bnRpbWVDYXN0KFJlZjxKU09OOjpW
YWx1ZT4mJiB2YWx1ZSkKIHsKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiByZXN1bHQ7Ci0gICAg
Ym9vbCBjYXN0U3VjY2VlZGVkID0gdmFsdWUtPmFzT2JqZWN0KHJlc3VsdCk7Ci0gICAgQVNTRVJU
X1VOVVNFRChjYXN0U3VjY2VlZGVkLCBjYXN0U3VjY2VlZGVkKTsKKyAgICBhdXRvIHJlc3VsdCA9
IHZhbHVlLT5hc09iamVjdCgpOwogICAgIEJpbmRpbmdUcmFpdHM8JHtvYmplY3RUeXBlfT46OmFz
c2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKHJlc3VsdC5nZXQoKSk7CiAgICAgQ09NUElMRV9BU1NF
UlQoc2l6ZW9mKCR7b2JqZWN0VHlwZX0pID09IHNpemVvZihKU09OOjpPYmplY3RCYXNlKSwgdHlw
ZV9jYXN0X3Byb2JsZW0pOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDwke29iamVjdFR5cGV9Kj4o
c3RhdGljX2Nhc3Q8SlNPTjo6T2JqZWN0QmFzZSo+KHJlc3VsdC5nZXQoKSkpOworICAgIHJldHVy
biBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8JHtvYmplY3RUeXBlfT4oc3RhdGljX3JlZmVyZW5jZV9j
YXN0PEpTT046Ok9iamVjdEJhc2U+KHJlc3VsdC5yZWxlYXNlTm9uTnVsbCgpKSk7CiB9CiAiIiIp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29k
ZWdlbi9nZW5lcmF0ZV9jcHBfYWx0ZXJuYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0
ZV9jcHBfYWx0ZXJuYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkKaW5kZXggZTFhNjYx
YmEzNzljZGVhNDA2NGM2Zjc3YzRlZmNiMTE2MmFjZWZjMC4uYjljNjYxNzQ5MjI0NGQwMGUwYTc0
NWQ3OTRiYWI2NzEwMmU3NDRjNSAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2FsdGVybmF0ZV9iYWNrZW5kX2Rp
c3BhdGNoZXJfaGVhZGVyLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9hbHRlcm5hdGVfYmFja2VuZF9kaXNwYXRjaGVy
X2hlYWRlci5weQpAQCAtMzMsOSArMzMsMTEgQEAgZnJvbSBzdHJpbmcgaW1wb3J0IFRlbXBsYXRl
CiB0cnk6CiAgICAgZnJvbSAuY3BwX2dlbmVyYXRvciBpbXBvcnQgQ3BwR2VuZXJhdG9yCiAgICAg
ZnJvbSAuY3BwX2dlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IENwcEdlbmVyYXRvclRlbXBsYXRl
cyBhcyBDcHBUZW1wbGF0ZXMKKyAgICBmcm9tIC5tb2RlbHMgaW1wb3J0IEVudW1UeXBlLCBBbGlh
c2VkVHlwZQogZXhjZXB0IFZhbHVlRXJyb3I6CiAgICAgZnJvbSBjcHBfZ2VuZXJhdG9yIGltcG9y
dCBDcHBHZW5lcmF0b3IKICAgICBmcm9tIGNwcF9nZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBD
cHBHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgQ3BwVGVtcGxhdGVzCisgICAgZnJvbSBtb2RlbHMgaW1w
b3J0IEVudW1UeXBlLCBBbGlhc2VkVHlwZQogCiBsb2cgPSBsb2dnaW5nLmdldExvZ2dlcignZ2xv
YmFsJykKIApAQCAtNjUsNyArNjcsNyBAQCBjbGFzcyBDcHBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0
Y2hlckhlYWRlckdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgIGRlZiBfZ2VuZXJhdGVfc2Vj
b25kYXJ5X2hlYWRlcl9pbmNsdWRlcyhzZWxmKToKICAgICAgICAgdGFyZ2V0X2ZyYW1ld29ya19u
YW1lID0gc2VsZi5tb2RlbCgpLmZyYW1ld29yay5uYW1lCiAgICAgICAgIGhlYWRlcl9pbmNsdWRl
cyA9IFsKLSAgICAgICAgICAgIChbdGFyZ2V0X2ZyYW1ld29ya19uYW1lXSwgKHRhcmdldF9mcmFt
ZXdvcmtfbmFtZSwgIiVzUHJvdG9jb2xUeXBlcy5oIiAlIHNlbGYucHJvdG9jb2xfbmFtZSgpKSks
CisgICAgICAgICAgICAoW3RhcmdldF9mcmFtZXdvcmtfbmFtZV0sICh0YXJnZXRfZnJhbWV3b3Jr
X25hbWUsICIlc1Byb3RvY29sT2JqZWN0cy5oIiAlIHNlbGYucHJvdG9jb2xfbmFtZSgpKSksCiAg
ICAgICAgICAgICAoWyJKYXZhU2NyaXB0Q29yZSJdLCAoIkphdmFTY3JpcHRDb3JlIiwgImluc3Bl
Y3Rvci9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oIikpLAogICAgICAgICAgICAgKFsiSmF2YVNj
cmlwdENvcmUiXSwgKCJKYXZhU2NyaXB0Q29yZSIsICJpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXIuaCIpKSwKICAgICAgICAgXQpAQCAtOTEsOSArOTMsMTkgQEAgY2xhc3MgQ3Bw
QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToK
IAogICAgIGRlZiBfZ2VuZXJhdGVfaGFuZGxlcl9kZWNsYXJhdGlvbl9mb3JfY29tbWFuZChzZWxm
LCBjb21tYW5kKToKICAgICAgICAgbGluZXMgPSBbXQotICAgICAgICBwYXJhbWV0ZXJzID0gWyds
b25nIGNhbGxJZCddCi0gICAgICAgIGZvciBfcGFyYW1ldGVyIGluIGNvbW1hbmQuY2FsbF9wYXJh
bWV0ZXJzOgotICAgICAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoJyVzIGluXyVzJyAlIChDcHBH
ZW5lcmF0b3IuY3BwX3R5cGVfZm9yX3VuY2hlY2tlZF9mb3JtYWxfaW5fcGFyYW1ldGVyKF9wYXJh
bWV0ZXIpLCBfcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKSkKKyAgICAgICAgcGFyYW1ldGVycyA9
IFsnbG9uZyBwcm90b2NvbF9jYWxsSWQnXQorICAgICAgICBmb3IgcGFyYW1ldGVyIGluIGNvbW1h
bmQuY2FsbF9wYXJhbWV0ZXJzOgorICAgICAgICAgICAgcGFyYW1ldGVyX3R5cGUgPSBwYXJhbWV0
ZXIudHlwZQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShwYXJhbWV0ZXJfdHlwZSwgQWxpYXNl
ZFR5cGUpOgorICAgICAgICAgICAgICAgIHBhcmFtZXRlcl90eXBlID0gcGFyYW1ldGVyX3R5cGUu
YWxpYXNlZF90eXBlCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHBhcmFtZXRlcl90eXBlLCBF
bnVtVHlwZSk6CisgICAgICAgICAgICAgICAgcGFyYW1ldGVyX3R5cGUgPSBwYXJhbWV0ZXJfdHlw
ZS5wcmltaXRpdmVfdHlwZQorCisgICAgICAgICAgICBwYXJhbWV0ZXJfbmFtZSA9IHBhcmFtZXRl
ci5wYXJhbWV0ZXJfbmFtZQorICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgor
ICAgICAgICAgICAgICAgIHBhcmFtZXRlcl9uYW1lID0gJ29wdF8nICsgcGFyYW1ldGVyX25hbWUK
KworICAgICAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoJyVzICVzJyAlIChDcHBHZW5lcmF0b3Iu
Y3BwX3R5cGVfZm9yX2NvbW1hbmRfcGFyYW1ldGVyKHBhcmFtZXRlcl90eXBlLCBwYXJhbWV0ZXIu
aXNfb3B0aW9uYWwpLCBwYXJhbWV0ZXJfbmFtZSkpCiAKICAgICAgICAgY29tbWFuZF9hcmdzID0g
ewogICAgICAgICAgICAgJ2NvbW1hbmROYW1lJzogY29tbWFuZC5jb21tYW5kX25hbWUsCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9n
ZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weSBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9iYWNrZW5kX2Rp
c3BhdGNoZXJfaGVhZGVyLnB5CmluZGV4IDEwZDhmMTRiZDVmZWJlYjhhMWIwNmIwMTc2NzVhMTQz
YThkNGY3MzguLjZkOWRkMmE0OGRjMzQ2OTIwNzFjMWRiYzFiOGIzYjRlN2M3M2E5MTUgMTAwNzU1
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dl
bmVyYXRlX2NwcF9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5CisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9iYWNrZW5k
X2Rpc3BhdGNoZXJfaGVhZGVyLnB5CkBAIC01NSwxMCArNTUsOSBAQCBjbGFzcyBDcHBCYWNrZW5k
RGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAgICByZXR1cm4g
W2RvbWFpbiBmb3IgZG9tYWluIGluIEdlbmVyYXRvci5kb21haW5zX3RvX2dlbmVyYXRlKHNlbGYp
IGlmIGxlbihzZWxmLmNvbW1hbmRzX2Zvcl9kb21haW4oZG9tYWluKSkgPiAwXQogCiAgICAgZGVm
IGdlbmVyYXRlX291dHB1dChzZWxmKToKLSAgICAgICAgdHlwZWRlZnMgPSBbKCdTdHJpbmcnLCAn
RXJyb3JTdHJpbmcnKV0KICAgICAgICAgaGVhZGVyX2FyZ3MgPSB7CiAgICAgICAgICAgICAnaW5j
bHVkZXMnOiBzZWxmLl9nZW5lcmF0ZV9zZWNvbmRhcnlfaGVhZGVyX2luY2x1ZGVzKCksCi0gICAg
ICAgICAgICAndHlwZWRlZnMnOiAnXG4nLmpvaW4oWyd0eXBlZGVmICVzICVzOycgJSB0eXBlZGVm
IGZvciB0eXBlZGVmIGluIHR5cGVkZWZzXSksCisgICAgICAgICAgICAndHlwZWRlZnMnOiAnJywK
ICAgICAgICAgfQogCiAgICAgICAgIGRvbWFpbnMgPSBzZWxmLmRvbWFpbnNfdG9fZ2VuZXJhdGUo
KQpAQCAtNzksOSArNzgsMTEgQEAgY2xhc3MgQ3BwQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5l
cmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAgICAgaGVhZGVyX2luY2x1ZGVzID0gWwogICAgICAg
ICAgICAgKFsiSmF2YVNjcmlwdENvcmUiLCAiV2ViS2l0Il0sIChzZWxmLm1vZGVsKCkuZnJhbWV3
b3JrLm5hbWUsICIlc1Byb3RvY29sT2JqZWN0cy5oIiAlIHNlbGYucHJvdG9jb2xfbmFtZSgpKSks
CiAgICAgICAgICAgICAoWyJKYXZhU2NyaXB0Q29yZSIsICJXZWJLaXQiXSwgKCJKYXZhU2NyaXB0
Q29yZSIsICJpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaCIpKSwKLSAgICAg
ICAgICAgIChbIkphdmFTY3JpcHRDb3JlIiwgIldlYktpdCJdLCAoIldURiIsICJ3dGYvdGV4dC9X
VEZTdHJpbmcuaCIpKQorICAgICAgICAgICAgKFsiSmF2YVNjcmlwdENvcmUiLCAiV2ViS2l0Il0s
ICgiV1RGIiwgInd0Zi9FeHBlY3RlZC5oIikpLAorICAgICAgICAgICAgKFsiSmF2YVNjcmlwdENv
cmUiLCAiV2ViS2l0Il0sICgiV1RGIiwgInd0Zi9PcHRpb25hbC5oIikpLAorICAgICAgICAgICAg
KFsiSmF2YVNjcmlwdENvcmUiLCAiV2ViS2l0Il0sICgiV1RGIiwgInd0Zi90ZXh0L1dURlN0cmlu
Zy5oIikpLAorICAgICAgICAgICAgKFsiSmF2YVNjcmlwdENvcmUiLCAiV2ViS2l0Il0sICgic3Rk
IiwgInR1cGxlIikpLAogICAgICAgICBdCi0KICAgICAgICAgcmV0dXJuICdcbicuam9pbihzZWxm
LmdlbmVyYXRlX2luY2x1ZGVzX2Zyb21fZW50cmllcyhoZWFkZXJfaW5jbHVkZXMpKQogCiAgICAg
ZGVmIF9nZW5lcmF0ZV9hbHRlcm5hdGVfaGFuZGxlcl9mb3J3YXJkX2RlY2xhcmF0aW9uc19mb3Jf
ZG9tYWlucyhzZWxmLCBkb21haW5zKToKQEAgLTEwMSwxMSArMTAyLDkgQEAgY2xhc3MgQ3BwQmFj
a2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAgICAgaWYg
ZXhwb3J0TWFjcm8gaXMgbm90IE5vbmU6CiAgICAgICAgICAgICBjbGFzc0NvbXBvbmVudHMuYXBw
ZW5kKGV4cG9ydE1hY3JvKQogCi0gICAgICAgIHVzZWRfZW51bV9uYW1lcyA9IHNldCgpCi0KICAg
ICAgICAgY29tbWFuZF9kZWNsYXJhdGlvbnMgPSBbXQogICAgICAgICBmb3IgY29tbWFuZCBpbiBz
ZWxmLmNvbW1hbmRzX2Zvcl9kb21haW4oZG9tYWluKToKLSAgICAgICAgICAgIGNvbW1hbmRfZGVj
bGFyYXRpb25zLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9oYW5kbGVyX2RlY2xhcmF0aW9uX2Zvcl9j
b21tYW5kKGNvbW1hbmQsIHVzZWRfZW51bV9uYW1lcykpCisgICAgICAgICAgICBjb21tYW5kX2Rl
Y2xhcmF0aW9ucy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfaGFuZGxlcl9kZWNsYXJhdGlvbl9mb3Jf
Y29tbWFuZChjb21tYW5kKSkKIAogICAgICAgICBoYW5kbGVyX2FyZ3MgPSB7CiAgICAgICAgICAg
ICAnY2xhc3NBbmRFeHBvcnRNYWNybyc6ICIgIi5qb2luKGNsYXNzQ29tcG9uZW50cyksCkBAIC0x
MTUsNjkgKzExNCw1NiBAQCBjbGFzcyBDcHBCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRv
cihDcHBHZW5lcmF0b3IpOgogCiAgICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9m
b3JfY29uZGl0aW9uKGRvbWFpbi5jb25kaXRpb24sIFRlbXBsYXRlKENwcFRlbXBsYXRlcy5CYWNr
ZW5kRGlzcGF0Y2hlckhlYWRlckRvbWFpbkhhbmRsZXJEZWNsYXJhdGlvbikuc3Vic3RpdHV0ZShO
b25lLCAqKmhhbmRsZXJfYXJncykpCiAKLSAgICBkZWYgX2dlbmVyYXRlX2Fub255bW91c19lbnVt
X2Zvcl9wYXJhbWV0ZXIoc2VsZiwgcGFyYW1ldGVyLCBjb21tYW5kKToKLSAgICAgICAgZW51bV9h
cmdzID0gewotICAgICAgICAgICAgJ3BhcmFtZXRlck5hbWUnOiBwYXJhbWV0ZXIucGFyYW1ldGVy
X25hbWUsCi0gICAgICAgICAgICAnY29tbWFuZE5hbWUnOiBjb21tYW5kLmNvbW1hbmRfbmFtZQot
ICAgICAgICB9Ci0KLSAgICAgICAgbGluZXMgPSBbXQotICAgICAgICBsaW5lcy5hcHBlbmQoJyAg
ICAvLyBOYW1lZCBhZnRlciBwYXJhbWV0ZXIgXCclKHBhcmFtZXRlck5hbWUpc1wnIHdoaWxlIGdl
bmVyYXRpbmcgY29tbWFuZC9ldmVudCAlKGNvbW1hbmROYW1lKXMuJyAlIGVudW1fYXJncykKLSAg
ICAgICAgbGluZXMuYXBwZW5kKCcgICAgZW51bSBjbGFzcyAlcyB7JyAlIHVjZmlyc3QocGFyYW1l
dGVyLnBhcmFtZXRlcl9uYW1lKSkKLSAgICAgICAgZm9yIGVudW1fdmFsdWUgaW4gcGFyYW1ldGVy
LnR5cGUuZW51bV92YWx1ZXMoKToKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICAl
cyA9ICVkLCcgJSAoR2VuZXJhdG9yLnN0eWxpemVkX25hbWVfZm9yX2VudW1fdmFsdWUoZW51bV92
YWx1ZSksIHNlbGYuZW5jb2RpbmdfZm9yX2VudW1fdmFsdWUoZW51bV92YWx1ZSkpKQotICAgICAg
ICBsaW5lcy5hcHBlbmQoJyAgICB9OyAvLyBlbnVtIGNsYXNzICVzJyAlIHVjZmlyc3QocGFyYW1l
dGVyLnBhcmFtZXRlcl9uYW1lKSkKLSAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKLQot
ICAgIGRlZiBfZ2VuZXJhdGVfaGFuZGxlcl9kZWNsYXJhdGlvbl9mb3JfY29tbWFuZChzZWxmLCBj
b21tYW5kLCB1c2VkX2VudW1fbmFtZXMpOgorICAgIGRlZiBfZ2VuZXJhdGVfaGFuZGxlcl9kZWNs
YXJhdGlvbl9mb3JfY29tbWFuZChzZWxmLCBjb21tYW5kKToKICAgICAgICAgaWYgY29tbWFuZC5p
c19hc3luYzoKICAgICAgICAgICAgIHJldHVybiBzZWxmLl9nZW5lcmF0ZV9hc3luY19oYW5kbGVy
X2RlY2xhcmF0aW9uX2Zvcl9jb21tYW5kKGNvbW1hbmQpCiAKICAgICAgICAgbGluZXMgPSBbXQot
ICAgICAgICBwYXJhbWV0ZXJzID0gWydFcnJvclN0cmluZyYnXQotICAgICAgICBmb3IgX3BhcmFt
ZXRlciBpbiBjb21tYW5kLmNhbGxfcGFyYW1ldGVyczoKLSAgICAgICAgICAgIHBhcmFtZXRlcl9u
YW1lID0gJ2luXycgKyBfcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lCi0gICAgICAgICAgICBpZiBf
cGFyYW1ldGVyLmlzX29wdGlvbmFsOgorCisgICAgICAgIHBhcmFtZXRlcnMgPSBbXQorICAgICAg
ICBmb3IgcGFyYW1ldGVyIGluIGNvbW1hbmQuY2FsbF9wYXJhbWV0ZXJzOgorICAgICAgICAgICAg
cGFyYW1ldGVyX25hbWUgPSBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUKKyAgICAgICAgICAgIGlm
IHBhcmFtZXRlci5pc19vcHRpb25hbDoKICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfbmFtZSA9
ICdvcHRfJyArIHBhcmFtZXRlcl9uYW1lCisgICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZCgi
JXMgJXMiICUgKENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3JfY29tbWFuZF9wYXJhbWV0ZXIocGFy
YW1ldGVyLnR5cGUsIHBhcmFtZXRlci5pc19vcHRpb25hbCksIHBhcmFtZXRlcl9uYW1lKSkKIAot
ICAgICAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoIiVzICVzIiAlIChDcHBHZW5lcmF0b3IuY3Bw
X3R5cGVfZm9yX3VuY2hlY2tlZF9mb3JtYWxfaW5fcGFyYW1ldGVyKF9wYXJhbWV0ZXIpLCBwYXJh
bWV0ZXJfbmFtZSkpCi0KLSAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoX3BhcmFtZXRlci50eXBl
LCBFbnVtVHlwZSkgYW5kIF9wYXJhbWV0ZXIudHlwZS5pc19hbm9ueW1vdXMgYW5kIF9wYXJhbWV0
ZXIucGFyYW1ldGVyX25hbWUgbm90IGluIHVzZWRfZW51bV9uYW1lczoKLSAgICAgICAgICAgICAg
ICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYW5vbnltb3VzX2VudW1fZm9yX3BhcmFtZXRl
cihfcGFyYW1ldGVyLCBjb21tYW5kKSkKLSAgICAgICAgICAgICAgICB1c2VkX2VudW1fbmFtZXMu
YWRkKF9wYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpCi0KLSAgICAgICAgZm9yIF9wYXJhbWV0ZXIg
aW4gY29tbWFuZC5yZXR1cm5fcGFyYW1ldGVyczoKLSAgICAgICAgICAgIHBhcmFtZXRlcl9uYW1l
ID0gJ291dF8nICsgX3BhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZQotICAgICAgICAgICAgaWYgX3Bh
cmFtZXRlci5pc19vcHRpb25hbDoKKyAgICAgICAgcmV0dXJucyA9IFtdCisgICAgICAgIGZvciBw
YXJhbWV0ZXIgaW4gY29tbWFuZC5yZXR1cm5fcGFyYW1ldGVyczoKKyAgICAgICAgICAgIHBhcmFt
ZXRlcl9uYW1lID0gcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lCisgICAgICAgICAgICBpZiBwYXJh
bWV0ZXIuaXNfb3B0aW9uYWw6CiAgICAgICAgICAgICAgICAgcGFyYW1ldGVyX25hbWUgPSAnb3B0
XycgKyBwYXJhbWV0ZXJfbmFtZQotICAgICAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoIiVzICVz
IiAlIChDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX2Zvcm1hbF9vdXRfcGFyYW1ldGVyKF9wYXJh
bWV0ZXIpLCBwYXJhbWV0ZXJfbmFtZSkpCi0KLSAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoX3Bh
cmFtZXRlci50eXBlLCBFbnVtVHlwZSkgYW5kIF9wYXJhbWV0ZXIudHlwZS5pc19hbm9ueW1vdXMg
YW5kIF9wYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUgbm90IGluIHVzZWRfZW51bV9uYW1lczoKLSAg
ICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2VsZi5fZ2VuZXJhdGVfYW5vbnltb3VzX2VudW1f
Zm9yX3BhcmFtZXRlcihfcGFyYW1ldGVyLCBjb21tYW5kKSkKLSAgICAgICAgICAgICAgICB1c2Vk
X2VudW1fbmFtZXMuYWRkKF9wYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpCisgICAgICAgICAgICBy
ZXR1cm5zLmFwcGVuZCgnJXMgLyogJXMgKi8nICUgKENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3Jf
Y29tbWFuZF9yZXR1cm5fZGVjbGFyYXRpb24ocGFyYW1ldGVyLnR5cGUsIHBhcmFtZXRlci5pc19v
cHRpb25hbCksIHBhcmFtZXRlcl9uYW1lKSkKIAogICAgICAgICBjb21tYW5kX2FyZ3MgPSB7CiAg
ICAgICAgICAgICAnY29tbWFuZE5hbWUnOiBjb21tYW5kLmNvbW1hbmRfbmFtZSwKLSAgICAgICAg
ICAgICdwYXJhbWV0ZXJzJzogIiwgIi5qb2luKHBhcmFtZXRlcnMpCisgICAgICAgICAgICAncGFy
YW1ldGVycyc6ICIsICIuam9pbihwYXJhbWV0ZXJzKSwKKyAgICAgICAgICAgICdyZXR1cm5zJzog
IiwgIi5qb2luKHJldHVybnMpLAogICAgICAgICB9Ci0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAg
IHZpcnR1YWwgdm9pZCAlKGNvbW1hbmROYW1lKXMoJShwYXJhbWV0ZXJzKXMpID0gMDsnICUgY29t
bWFuZF9hcmdzKQorICAgICAgICBpZiBsZW4ocmV0dXJucykgPT0gMToKKyAgICAgICAgICAgIGxp
bmVzLmFwcGVuZCgnICAgIHZpcnR1YWwgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8JShyZXR1cm5z
KXM+ICUoY29tbWFuZE5hbWUpcyglKHBhcmFtZXRlcnMpcykgPSAwOycgJSBjb21tYW5kX2FyZ3Mp
CisgICAgICAgIGVsaWYgbGVuKHJldHVybnMpID4gMToKKyAgICAgICAgICAgIGxpbmVzLmFwcGVu
ZCgnICAgIHZpcnR1YWwgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8c3RkOjp0dXBsZTwlKHJldHVy
bnMpcz4+ICUoY29tbWFuZE5hbWUpcyglKHBhcmFtZXRlcnMpcykgPSAwOycgJSBjb21tYW5kX2Fy
Z3MpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICB2aXJ0dWFs
IFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+ICUoY29tbWFuZE5hbWUpcyglKHBhcmFtZXRl
cnMpcykgPSAwOycgJSBjb21tYW5kX2FyZ3MpCiAgICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0
aF9ndWFyZF9mb3JfY29uZGl0aW9uKGNvbW1hbmQuY29uZGl0aW9uLCAnXG4nLmpvaW4obGluZXMp
KQogCiAgICAgZGVmIF9nZW5lcmF0ZV9hc3luY19oYW5kbGVyX2RlY2xhcmF0aW9uX2Zvcl9jb21t
YW5kKHNlbGYsIGNvbW1hbmQpOgogICAgICAgICBjYWxsYmFja05hbWUgPSAiJXNDYWxsYmFjayIg
JSB1Y2ZpcnN0KGNvbW1hbmQuY29tbWFuZF9uYW1lKQogCi0gICAgICAgIGluX3BhcmFtZXRlcnMg
PSBbXQotICAgICAgICBmb3IgX3BhcmFtZXRlciBpbiBjb21tYW5kLmNhbGxfcGFyYW1ldGVyczoK
LSAgICAgICAgICAgIHBhcmFtZXRlcl9uYW1lID0gJ2luXycgKyBfcGFyYW1ldGVyLnBhcmFtZXRl
cl9uYW1lCi0gICAgICAgICAgICBpZiBfcGFyYW1ldGVyLmlzX29wdGlvbmFsOgorICAgICAgICBw
YXJhbWV0ZXJzID0gW10KKyAgICAgICAgZm9yIHBhcmFtZXRlciBpbiBjb21tYW5kLmNhbGxfcGFy
YW1ldGVyczoKKyAgICAgICAgICAgIHBhcmFtZXRlcl9uYW1lID0gcGFyYW1ldGVyLnBhcmFtZXRl
cl9uYW1lCisgICAgICAgICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6CiAgICAgICAgICAg
ICAgICAgcGFyYW1ldGVyX25hbWUgPSAnb3B0XycgKyBwYXJhbWV0ZXJfbmFtZQorICAgICAgICAg
ICAgcGFyYW1ldGVycy5hcHBlbmQoIiVzICVzIiAlIChDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9y
X2NvbW1hbmRfcGFyYW1ldGVyKHBhcmFtZXRlci50eXBlLCBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwp
LCBwYXJhbWV0ZXJfbmFtZSkpCisgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKCJSZWY8JXM+JiYi
ICUgY2FsbGJhY2tOYW1lKQogCi0gICAgICAgICAgICBpbl9wYXJhbWV0ZXJzLmFwcGVuZCgiJXMg
JXMiICUgKENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3JfdW5jaGVja2VkX2Zvcm1hbF9pbl9wYXJh
bWV0ZXIoX3BhcmFtZXRlciksIHBhcmFtZXRlcl9uYW1lKSkKLSAgICAgICAgaW5fcGFyYW1ldGVy
cy5hcHBlbmQoIlJlZjwlcz4mJiBjYWxsYmFjayIgJSBjYWxsYmFja05hbWUpCi0KLSAgICAgICAg
b3V0X3BhcmFtZXRlcnMgPSBbXQotICAgICAgICBmb3IgX3BhcmFtZXRlciBpbiBjb21tYW5kLnJl
dHVybl9wYXJhbWV0ZXJzOgotICAgICAgICAgICAgb3V0X3BhcmFtZXRlcnMuYXBwZW5kKCIlcyAl
cyIgJSAoQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl9mb3JtYWxfYXN5bmNfcGFyYW1ldGVyKF9w
YXJhbWV0ZXIpLCBfcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKSkKKyAgICAgICAgcmV0dXJucyA9
IFtdCisgICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gY29tbWFuZC5yZXR1cm5fcGFyYW1ldGVyczoK
KyAgICAgICAgICAgIHBhcmFtZXRlcl9uYW1lID0gcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lCisg
ICAgICAgICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6CisgICAgICAgICAgICAgICAgcGFy
YW1ldGVyX25hbWUgPSAnb3B0XycgKyBwYXJhbWV0ZXJfbmFtZQorICAgICAgICAgICAgcmV0dXJu
cy5hcHBlbmQoIiVzICVzIiAlIChDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX2NvbW1hbmRfcmV0
dXJuX2FyZ3VtZW50KHBhcmFtZXRlci50eXBlLCBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwpLCBwYXJh
bWV0ZXJfbmFtZSkpCiAKICAgICAgICAgY2xhc3NfY29tcG9uZW50cyA9IFsnY2xhc3MnXQogICAg
ICAgICBleHBvcnRfbWFjcm8gPSBzZWxmLm1vZGVsKCkuZnJhbWV3b3JrLnNldHRpbmcoJ2V4cG9y
dF9tYWNybycsIE5vbmUpCkBAIC0xODgsOCArMTc0LDggQEAgY2xhc3MgQ3BwQmFja2VuZERpc3Bh
dGNoZXJIZWFkZXJHZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAgICAgICAgICdjbGFzc0Fu
ZEV4cG9ydE1hY3JvJzogJyAnLmpvaW4oY2xhc3NfY29tcG9uZW50cyksCiAgICAgICAgICAgICAn
Y2FsbGJhY2tOYW1lJzogY2FsbGJhY2tOYW1lLAogICAgICAgICAgICAgJ2NvbW1hbmROYW1lJzog
Y29tbWFuZC5jb21tYW5kX25hbWUsCi0gICAgICAgICAgICAnaW5QYXJhbWV0ZXJzJzogIiwgIi5q
b2luKGluX3BhcmFtZXRlcnMpLAotICAgICAgICAgICAgJ291dFBhcmFtZXRlcnMnOiAiLCAiLmpv
aW4ob3V0X3BhcmFtZXRlcnMpLAorICAgICAgICAgICAgJ3BhcmFtZXRlcnMnOiAiLCAiLmpvaW4o
cGFyYW1ldGVycyksCisgICAgICAgICAgICAncmV0dXJucyc6ICIsICIuam9pbihyZXR1cm5zKSwK
ICAgICAgICAgfQogCiAgICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29u
ZGl0aW9uKGNvbW1hbmQuY29uZGl0aW9uLCBUZW1wbGF0ZShDcHBUZW1wbGF0ZXMuQmFja2VuZERp
c3BhdGNoZXJIZWFkZXJBc3luY0NvbW1hbmREZWNsYXJhdGlvbikuc3Vic3RpdHV0ZShOb25lLCAq
KmNvbW1hbmRfYXJncykpCkBAIC0yMjMsNCArMjA5LDQgQEAgY2xhc3MgQ3BwQmFja2VuZERpc3Bh
dGNoZXJIZWFkZXJHZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAgICAgcmV0dXJuIHNlbGYu
d3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZG9tYWluLmNvbmRpdGlvbiwgVGVtcGxhdGUo
Q3BwVGVtcGxhdGVzLkJhY2tlbmREaXNwYXRjaGVySGVhZGVyRG9tYWluRGlzcGF0Y2hlckRlY2xh
cmF0aW9uKS5zdWJzdGl0dXRlKE5vbmUsICoqaGFuZGxlcl9hcmdzKSkKIAogICAgIGRlZiBfZ2Vu
ZXJhdGVfZGlzcGF0Y2hlcl9kZWNsYXJhdGlvbl9mb3JfY29tbWFuZChzZWxmLCBjb21tYW5kKToK
LSAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oY29tbWFu
ZC5jb25kaXRpb24sICIgICAgdm9pZCAlcyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9i
amVjdD4mJiBwYXJhbWV0ZXJzKTsiICUgY29tbWFuZC5jb21tYW5kX25hbWUpCisgICAgICAgIHJl
dHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGNvbW1hbmQuY29uZGl0aW9u
LCAiICAgIHZvaWQgJXMobG9uZyBwcm90b2NsX2NhbGxJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4m
JiBwcm90b2NvbF9wYXJhbWV0ZXJzKTsiICUgY29tbWFuZC5jb21tYW5kX25hbWUpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5l
cmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5IGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2JhY2tl
bmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQppbmRleCBkYWYxOWM5NTBmYjA3YWFhMmQ4
YjMxYTJmNDljN2NhYjUwNzAyYzYwLi44ZGZiMjk0YWI5ZDI2ZTRlODU1ZjVlMTI5ZGI4MzFlN2Y5
MDFhYmRlIDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9u
LnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2Vu
L2dlbmVyYXRlX2NwcF9iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkKQEAgLTMz
LDEyICszMywxMiBAQCB0cnk6CiAgICAgZnJvbSAuY3BwX2dlbmVyYXRvciBpbXBvcnQgQ3BwR2Vu
ZXJhdG9yCiAgICAgZnJvbSAuY3BwX2dlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IENwcEdlbmVy
YXRvclRlbXBsYXRlcyBhcyBDcHBUZW1wbGF0ZXMKICAgICBmcm9tIC5nZW5lcmF0b3IgaW1wb3J0
IEdlbmVyYXRvciwgdWNmaXJzdAotICAgIGZyb20gLm1vZGVscyBpbXBvcnQgT2JqZWN0VHlwZSwg
QXJyYXlUeXBlCisgICAgZnJvbSAubW9kZWxzIGltcG9ydCBPYmplY3RUeXBlLCBBcnJheVR5cGUs
IEFsaWFzZWRUeXBlLCBFbnVtVHlwZQogZXhjZXB0IFZhbHVlRXJyb3I6CiAgICAgZnJvbSBjcHBf
Z2VuZXJhdG9yIGltcG9ydCBDcHBHZW5lcmF0b3IKICAgICBmcm9tIGNwcF9nZW5lcmF0b3JfdGVt
cGxhdGVzIGltcG9ydCBDcHBHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgQ3BwVGVtcGxhdGVzCiAgICAg
ZnJvbSBnZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvciwgdWNmaXJzdAotICAgIGZyb20gbW9kZWxz
IGltcG9ydCBPYmplY3RUeXBlLCBBcnJheVR5cGUKKyAgICBmcm9tIG1vZGVscyBpbXBvcnQgT2Jq
ZWN0VHlwZSwgQXJyYXlUeXBlLCBBbGlhc2VkVHlwZSwgRW51bVR5cGUKIAogbG9nID0gbG9nZ2lu
Zy5nZXRMb2dnZXIoJ2dsb2JhbCcpCiAKQEAgLTgwLDExICs4MCw4IEBAIGNsYXNzIENwcEJhY2tl
bmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICBk
ZWYgX2dlbmVyYXRlX3NlY29uZGFyeV9oZWFkZXJfaW5jbHVkZXMoc2VsZik6CiAgICAgICAgIGhl
YWRlcl9pbmNsdWRlcyA9IFsKICAgICAgICAgICAgIChbIkphdmFTY3JpcHRDb3JlIiwgIldlYktp
dCJdLCAoIkphdmFTY3JpcHRDb3JlIiwgImluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZFJvdXRl
ci5oIikpLAotICAgICAgICAgICAgKFsiSmF2YVNjcmlwdENvcmUiLCAiV2ViS2l0Il0sICgiV1RG
IiwgInd0Zi9KU09OVmFsdWVzLmgiKSksCiAgICAgICAgICAgICAoWyJKYXZhU2NyaXB0Q29yZSIs
ICJXZWJLaXQiXSwgKCJXVEYiLCAid3RmL05ldmVyRGVzdHJveWVkLmgiKSksCi0gICAgICAgICAg
ICAoWyJKYXZhU2NyaXB0Q29yZSIsICJXZWJLaXQiXSwgKCJXVEYiLCAid3RmL3RleHQvQ1N0cmlu
Zy5oIikpCiAgICAgICAgIF0KLQogICAgICAgICByZXR1cm4gc2VsZi5nZW5lcmF0ZV9pbmNsdWRl
c19mcm9tX2VudHJpZXMoaGVhZGVyX2luY2x1ZGVzKQogCiAKQEAgLTEyMyw4ICsxMjAsOCBAQCBj
bGFzcyBDcHBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKENwcEdlbmVy
YXRvcik6CiAgICAgICAgIGNhc2VzID0gW10KIAogICAgICAgICBmaXJzdF9jb21tYW5kX3N0cmlu
ZyA9ICJcbiIuam9pbihbCi0gICAgICAgICAgICAnICAgIGlmIChtZXRob2QgPT0gIiVzIikgeycg
JSBjb21tYW5kc1swXS5jb21tYW5kX25hbWUsCi0gICAgICAgICAgICAnICAgICAgICAlcyhyZXF1
ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykpOycgJSBjb21tYW5kc1swXS5jb21tYW5kX25hbWUs
CisgICAgICAgICAgICAnICAgIGlmIChwcm90b2NvbF9tZXRob2QgPT0gIiVzIikgeycgJSBjb21t
YW5kc1swXS5jb21tYW5kX25hbWUsCisgICAgICAgICAgICAnICAgICAgICAlcyhwcm90b2NvbF9j
YWxsSWQsIFdURk1vdmUocHJvdG9jb2xfcGFyYW1ldGVycykpOycgJSBjb21tYW5kc1swXS5jb21t
YW5kX25hbWUsCiAgICAgICAgICAgICAnICAgICAgICByZXR1cm47JywKICAgICAgICAgICAgICcg
ICAgfScsCiAgICAgICAgIF0pCkBAIC0xMzIsOCArMTI5LDggQEAgY2xhc3MgQ3BwQmFja2VuZERp
c3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogCiAgICAgICAg
IGZvciBjb21tYW5kIGluIGNvbW1hbmRzWzE6XToKICAgICAgICAgICAgIGFkZGl0aW9uYWxfY29t
bWFuZF9zdHJpbmcgPSAiXG4iLmpvaW4oWwotICAgICAgICAgICAgICAgICcgICAgaWYgKG1ldGhv
ZCA9PSAiJXMiKSB7JyAlIGNvbW1hbmQuY29tbWFuZF9uYW1lLAotICAgICAgICAgICAgICAgICcg
ICAgICAgICVzKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7JyAlIGNvbW1hbmQuY29t
bWFuZF9uYW1lLAorICAgICAgICAgICAgICAgICcgICAgaWYgKHByb3RvY29sX21ldGhvZCA9PSAi
JXMiKSB7JyAlIGNvbW1hbmQuY29tbWFuZF9uYW1lLAorICAgICAgICAgICAgICAgICcgICAgICAg
ICVzKHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9wYXJhbWV0ZXJzKSk7JyAlIGNv
bW1hbmQuY29tbWFuZF9uYW1lLAogICAgICAgICAgICAgICAgICcgICAgICAgIHJldHVybjsnLAog
ICAgICAgICAgICAgICAgICcgICAgfScsCiAgICAgICAgICAgICBdKQpAQCAtMTY1LDE0NiArMTYy
LDEzNiBAQCBjbGFzcyBDcHBCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9y
KENwcEdlbmVyYXRvcik6CiAgICAgICAgIHJldHVybiBUZW1wbGF0ZShDcHBUZW1wbGF0ZXMuQmFj
a2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkxhcmdlU3dpdGNoKS5zdWJzdGl0dXRlKE5vbmUs
ICoqc3dpdGNoX2FyZ3MpCiAKICAgICBkZWYgX2dlbmVyYXRlX2FzeW5jX2Rpc3BhdGNoZXJfY2xh
c3NfZm9yX2RvbWFpbihzZWxmLCBjb21tYW5kLCBkb21haW4pOgotICAgICAgICBvdXRfcGFyYW1l
dGVyX2Fzc2lnbm1lbnRzID0gW10KLSAgICAgICAgZm9ybWFsX3BhcmFtZXRlcnMgPSBbXQorICAg
ICAgICByZXR1cm5fYXNzaWdubWVudHMgPSBbXQorICAgICAgICBjYWxsYmFja19wYXJhbWV0ZXJz
ID0gW10KIAogICAgICAgICBmb3IgcGFyYW1ldGVyIGluIGNvbW1hbmQucmV0dXJuX3BhcmFtZXRl
cnM6CisgICAgICAgICAgICBwYXJhbWV0ZXJfbmFtZSA9IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFt
ZQorICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAg
IHBhcmFtZXRlcl9uYW1lID0gJ29wdF8nICsgcGFyYW1ldGVyX25hbWUKKworICAgICAgICAgICAg
cGFyYW1ldGVyX3ZhbHVlID0gcGFyYW1ldGVyX25hbWUKKworICAgICAgICAgICAgX3R5cGUgPSBw
YXJhbWV0ZXIudHlwZQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgQWxpYXNlZFR5
cGUpOgorICAgICAgICAgICAgICAgIF90eXBlID0gX3R5cGUuYWxpYXNlZF90eXBlCisgICAgICAg
ICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBFbnVtVHlwZSkgYW5kIF90eXBlLmlzX2Fub255bW91
czoKKyAgICAgICAgICAgICAgICBfdHlwZSA9IF90eXBlLnByaW1pdGl2ZV90eXBlCisKKyAgICAg
ICAgICAgIGlmIF90eXBlLmlzX2VudW0oKToKKyAgICAgICAgICAgICAgICBpZiBwYXJhbWV0ZXIu
aXNfb3B0aW9uYWw6CisgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcl92YWx1ZSA9ICcqJyAr
IHBhcmFtZXRlcl92YWx1ZQorICAgICAgICAgICAgICAgIHBhcmFtZXRlcl92YWx1ZSA9ICdQcm90
b2NvbDo6JXM6OmdldEVudW1Db25zdGFudFZhbHVlKCVzKScgJSAoc2VsZi5oZWxwZXJzX25hbWVz
cGFjZSgpLCBwYXJhbWV0ZXJfdmFsdWUpCisgICAgICAgICAgICBlbGlmIENwcEdlbmVyYXRvci5z
aG91bGRfcmVsZWFzZV9hcmd1bWVudChfdHlwZSwgcGFyYW1ldGVyLmlzX29wdGlvbmFsKToKKyAg
ICAgICAgICAgICAgICBwYXJhbWV0ZXJfdmFsdWUgPSBwYXJhbWV0ZXJfdmFsdWUgKyAnLnJlbGVh
c2VOb25OdWxsKCknCisgICAgICAgICAgICBlbGlmIENwcEdlbmVyYXRvci5zaG91bGRfZGVyZWZl
cmVuY2VfYXJndW1lbnQoX3R5cGUsIHBhcmFtZXRlci5pc19vcHRpb25hbCk6CisgICAgICAgICAg
ICAgICAgcGFyYW1ldGVyX3ZhbHVlID0gJyonICsgcGFyYW1ldGVyX3ZhbHVlCisgICAgICAgICAg
ICBlbGlmIENwcEdlbmVyYXRvci5zaG91bGRfbW92ZV9hcmd1bWVudChfdHlwZSwgcGFyYW1ldGVy
LmlzX29wdGlvbmFsKToKKyAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfdmFsdWUgPSAnV1RGTW92
ZSglcyknICUgcGFyYW1ldGVyX3ZhbHVlCisKICAgICAgICAgICAgIHBhcmFtX2FyZ3MgPSB7Ci0g
ICAgICAgICAgICAgICAgJ2tleWVkU2V0TWV0aG9kJzogQ3BwR2VuZXJhdG9yLmNwcF9zZXR0ZXJf
bWV0aG9kX2Zvcl90eXBlKHBhcmFtZXRlci50eXBlKSwKKyAgICAgICAgICAgICAgICAna2V5ZWRT
ZXRNZXRob2QnOiBDcHBHZW5lcmF0b3IuY3BwX3NldHRlcl9tZXRob2RfZm9yX3R5cGUoX3R5cGUp
LAogICAgICAgICAgICAgICAgICdwYXJhbWV0ZXJLZXknOiBwYXJhbWV0ZXIucGFyYW1ldGVyX25h
bWUsCi0gICAgICAgICAgICAgICAgJ3BhcmFtZXRlck5hbWUnOiBwYXJhbWV0ZXIucGFyYW1ldGVy
X25hbWUsCi0gICAgICAgICAgICAgICAgJ3BhcmFtZXRlclR5cGUnOiBDcHBHZW5lcmF0b3IuY3Bw
X3R5cGVfZm9yX3N0YWNrX2luX3BhcmFtZXRlcihwYXJhbWV0ZXIpLAotICAgICAgICAgICAgICAg
ICdoZWxwZXJzTmFtZXNwYWNlJzogc2VsZi5oZWxwZXJzX25hbWVzcGFjZSgpLAorICAgICAgICAg
ICAgICAgICdwYXJhbWV0ZXJOYW1lJzogcGFyYW1ldGVyX25hbWUsCisgICAgICAgICAgICAgICAg
J3BhcmFtZXRlclZhbHVlJzogcGFyYW1ldGVyX3ZhbHVlLAogICAgICAgICAgICAgfQogCi0gICAg
ICAgICAgICBmb3JtYWxfcGFyYW1ldGVycy5hcHBlbmQoJyVzICVzJyAlIChDcHBHZW5lcmF0b3Iu
Y3BwX3R5cGVfZm9yX2Zvcm1hbF9hc3luY19wYXJhbWV0ZXIocGFyYW1ldGVyKSwgcGFyYW1ldGVy
LnBhcmFtZXRlcl9uYW1lKSkKKyAgICAgICAgICAgIGNhbGxiYWNrX3BhcmFtZXRlcnMuYXBwZW5k
KCclcyAlcycgJSAoQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl9jb21tYW5kX3JldHVybl9hcmd1
bWVudChfdHlwZSwgcGFyYW1ldGVyLmlzX29wdGlvbmFsKSwgcGFyYW1ldGVyX25hbWUpKQogCiAg
ICAgICAgICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6Ci0gICAgICAgICAgICAgICAgaWYg
Q3BwR2VuZXJhdG9yLnNob3VsZF91c2Vfd3JhcHBlcl9mb3JfcmV0dXJuX3R5cGUocGFyYW1ldGVy
LnR5cGUpOgotICAgICAgICAgICAgICAgICAgICBvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRzLmFw
cGVuZCgnICAgIGlmICglKHBhcmFtZXRlck5hbWUpcy5oYXNWYWx1ZSgpKScgJSBwYXJhbV9hcmdz
KQotICAgICAgICAgICAgICAgICAgICBvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRzLmFwcGVuZCgn
ICAgICAgICBqc29uTWVzc2FnZS0+JShrZXllZFNldE1ldGhvZClzKCIlKHBhcmFtZXRlcktleSlz
Il9zLCAqJShwYXJhbWV0ZXJOYW1lKXMpOycgJSBwYXJhbV9hcmdzKQotICAgICAgICAgICAgICAg
IGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBw
ZW5kKCcgICAgaWYgKCUocGFyYW1ldGVyTmFtZSlzKScgJSBwYXJhbV9hcmdzKQotICAgICAgICAg
ICAgICAgICAgICBvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAgICAgICBqc29u
TWVzc2FnZS0+JShrZXllZFNldE1ldGhvZClzKCIlKHBhcmFtZXRlcktleSlzIl9zLCAlKHBhcmFt
ZXRlck5hbWUpcyk7JyAlIHBhcmFtX2FyZ3MpCi0gICAgICAgICAgICBlbGlmIHBhcmFtZXRlci50
eXBlLmlzX2VudW0oKToKLSAgICAgICAgICAgICAgICBvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRz
LmFwcGVuZCgnICAgIGpzb25NZXNzYWdlLT4lKGtleWVkU2V0TWV0aG9kKXMoIiUocGFyYW1ldGVy
S2V5KXMiX3MsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OiUoaGVscGVyc05hbWVzcGFjZSlzOjpnZXRF
bnVtQ29uc3RhbnRWYWx1ZSglKHBhcmFtZXRlck5hbWUpcykpOycgJSBwYXJhbV9hcmdzKQorICAg
ICAgICAgICAgICAgIHJldHVybl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICBpZiAoISElKHBhcmFt
ZXRlck5hbWUpcyknICUgcGFyYW1fYXJncykKKyAgICAgICAgICAgICAgICByZXR1cm5fYXNzaWdu
bWVudHMuYXBwZW5kKCcgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT4lKGtleWVkU2V0TWV0
aG9kKXMoIiUocGFyYW1ldGVyS2V5KXMiX3MsICUocGFyYW1ldGVyVmFsdWUpcyk7JyAlIHBhcmFt
X2FyZ3MpCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIG91dF9wYXJhbWV0ZXJf
YXNzaWdubWVudHMuYXBwZW5kKCcgICAganNvbk1lc3NhZ2UtPiUoa2V5ZWRTZXRNZXRob2Qpcygi
JShwYXJhbWV0ZXJLZXkpcyJfcywgJShwYXJhbWV0ZXJOYW1lKXMpOycgJSBwYXJhbV9hcmdzKQor
ICAgICAgICAgICAgICAgIHJldHVybl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICBwcm90b2NvbF9q
c29uTWVzc2FnZS0+JShrZXllZFNldE1ldGhvZClzKCIlKHBhcmFtZXRlcktleSlzIl9zLCAlKHBh
cmFtZXRlclZhbHVlKXMpOycgJSBwYXJhbV9hcmdzKQogCiAgICAgICAgIGFzeW5jX2FyZ3MgPSB7
CiAgICAgICAgICAgICAnZG9tYWluTmFtZSc6IGRvbWFpbi5kb21haW5fbmFtZSwKICAgICAgICAg
ICAgICdjYWxsYmFja05hbWUnOiB1Y2ZpcnN0KGNvbW1hbmQuY29tbWFuZF9uYW1lKSArICdDYWxs
YmFjaycsCi0gICAgICAgICAgICAnZm9ybWFsUGFyYW1ldGVycyc6ICIsICIuam9pbihmb3JtYWxf
cGFyYW1ldGVycyksCi0gICAgICAgICAgICAnb3V0UGFyYW1ldGVyQXNzaWdubWVudHMnOiAiXG4i
LmpvaW4ob3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cykKKyAgICAgICAgICAgICdjYWxsYmFja1Bh
cmFtZXRlcnMnOiAiLCAiLmpvaW4oY2FsbGJhY2tfcGFyYW1ldGVycyksCisgICAgICAgICAgICAn
cmV0dXJuQXNzaWdubWVudHMnOiAiXG4iLmpvaW4ocmV0dXJuX2Fzc2lnbm1lbnRzKQogICAgICAg
ICB9CiAgICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGNv
bW1hbmQuY29uZGl0aW9uLCBUZW1wbGF0ZShDcHBUZW1wbGF0ZXMuQmFja2VuZERpc3BhdGNoZXJJ
bXBsZW1lbnRhdGlvbkFzeW5jQ29tbWFuZCkuc3Vic3RpdHV0ZShOb25lLCAqKmFzeW5jX2FyZ3Mp
KQogCiAgICAgZGVmIF9nZW5lcmF0ZV9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uX2Zvcl9jb21t
YW5kKHNlbGYsIGNvbW1hbmQsIGRvbWFpbik6Ci0gICAgICAgIGluX3BhcmFtZXRlcl9kZWNsYXJh
dGlvbnMgPSBbXQotICAgICAgICBvdXRfcGFyYW1ldGVyX2RlY2xhcmF0aW9ucyA9IFtdCi0gICAg
ICAgIG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMgPSBbXQotICAgICAgICBhbHRlcm5hdGVfZGlz
cGF0Y2hlcl9tZXRob2RfcGFyYW1ldGVycyA9IFsncmVxdWVzdElkJ10KKyAgICAgICAgcGFyYW1l
dGVyX2RlY2xhcmF0aW9ucyA9IFtdCisgICAgICAgIHBhcmFtZXRlcl9lbnVtX3Jlc29sdXRpb25z
ID0gW10KKyAgICAgICAgYWx0ZXJuYXRlX2Rpc3BhdGNoZXJfbWV0aG9kX3BhcmFtZXRlcnMgPSBb
J3Byb3RvY29sX2NhbGxJZCddCiAgICAgICAgIG1ldGhvZF9wYXJhbWV0ZXJzID0gW10KLSAgICAg
ICAgaWYgbm90IGNvbW1hbmQuaXNfYXN5bmM6Ci0gICAgICAgICAgICBtZXRob2RfcGFyYW1ldGVy
cy5hcHBlbmQoJ2Vycm9yJykKIAogICAgICAgICBmb3IgcGFyYW1ldGVyIGluIGNvbW1hbmQuY2Fs
bF9wYXJhbWV0ZXJzOgotICAgICAgICAgICAgcGFyYW1ldGVyX25hbWUgPSAnaW5fJyArIHBhcmFt
ZXRlci5wYXJhbWV0ZXJfbmFtZQorICAgICAgICAgICAgcGFyYW1ldGVyX25hbWUgPSBwYXJhbWV0
ZXIucGFyYW1ldGVyX25hbWUKICAgICAgICAgICAgIGlmIHBhcmFtZXRlci5pc19vcHRpb25hbDoK
ICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfbmFtZSA9ICdvcHRfJyArIHBhcmFtZXRlcl9uYW1l
CisgICAgICAgICAgICBwYXJhbWV0ZXJfbmFtZSA9ICdpbl8nICsgcGFyYW1ldGVyX25hbWUKIAot
ICAgICAgICAgICAgb3V0X3N1Y2Nlc3NfYXJndW1lbnQgPSAnbnVsbHB0cicKLSAgICAgICAgICAg
IGlmIHBhcmFtZXRlci5pc19vcHRpb25hbDoKLSAgICAgICAgICAgICAgICBvdXRfc3VjY2Vzc19h
cmd1bWVudCA9ICcmJXNfdmFsdWVGb3VuZCcgJSBwYXJhbWV0ZXJfbmFtZQotICAgICAgICAgICAg
ICAgIGluX3BhcmFtZXRlcl9kZWNsYXJhdGlvbnMuYXBwZW5kKCcgICAgYm9vbCAlc192YWx1ZUZv
dW5kID0gZmFsc2U7JyAlIHBhcmFtZXRlcl9uYW1lKQorICAgICAgICAgICAgdmFyaWFibGVfbmFt
ZSA9IHBhcmFtZXRlcl9uYW1lCiAKLSAgICAgICAgICAgICMgTm93IGFkZCBhcHByb3ByaWF0ZSBv
cGVyYXRvcnMuCi0gICAgICAgICAgICBwYXJhbWV0ZXJfZXhwcmVzc2lvbiA9IHBhcmFtZXRlcl9u
YW1lCisgICAgICAgICAgICBfdHlwZSA9IHBhcmFtZXRlci50eXBlCisgICAgICAgICAgICBpZiBp
c2luc3RhbmNlKF90eXBlLCBBbGlhc2VkVHlwZSk6CisgICAgICAgICAgICAgICAgX3R5cGUgPSBf
dHlwZS5hbGlhc2VkX3R5cGUKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEVudW1U
eXBlKSBhbmQgX3R5cGUuaXNfYW5vbnltb3VzOgorICAgICAgICAgICAgICAgIF90eXBlID0gX3R5
cGUucHJpbWl0aXZlX3R5cGUKIAotICAgICAgICAgICAgaWYgQ3BwR2VuZXJhdG9yLnNob3VsZF91
c2VfcmVmZXJlbmNlc19mb3JfdHlwZShwYXJhbWV0ZXIudHlwZSk6Ci0gICAgICAgICAgICAgICAg
aWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgotICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJf
ZXhwcmVzc2lvbiA9ICclcy5nZXQoKScgJSBwYXJhbWV0ZXJfZXhwcmVzc2lvbgotICAgICAgICAg
ICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICMgVGhpcyBhc3N1bWVzIHRoYXQgd2Ug
aGF2ZSBhbHJlYWR5IHByb3ZlZCB0aGUgb2JqZWN0IGlzIG5vbi1udWxsLgotICAgICAgICAgICAg
ICAgICAgICAjIElmIGEgcmVxdWlyZWQgcHJvcGVydHkgaXMgbWlzc2luZywgSW5zcGVjdG9yQmFj
a2VuZDo6Z2V0T2JqZWN0IHdpbGwKLSAgICAgICAgICAgICAgICAgICAgIyBhcHBlbmQgYSBwcm90
b2NvbCBlcnJvciwgYW5kIHRoZSBtZXRob2QgZGlzcGF0Y2hlciB3aWxsIHJldHVybiB3aXRob3V0
Ci0gICAgICAgICAgICAgICAgICAgICMgaW52b2tpbmcgdGhlIGJhY2tlbmQgbWV0aG9kIChhbmQg
ZGVyZWZlcmVuY2luZyB0aGUgb2JqZWN0KS4KLSAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVy
X2V4cHJlc3Npb24gPSAnKiVzJyAlIHBhcmFtZXRlcl9leHByZXNzaW9uCi0gICAgICAgICAgICBl
bGlmIHBhcmFtZXRlci5pc19vcHRpb25hbDoKLSAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfZXhw
cmVzc2lvbiA9ICcmJXMnICUgcGFyYW1ldGVyX2V4cHJlc3Npb24KKyAgICAgICAgICAgIGlmIF90
eXBlLmlzX2VudW0oKToKKyAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfbmFtZSA9IHBhcmFtZXRl
cl9uYW1lICsgJ19qc29uJwogCi0gICAgICAgICAgICBwYXJhbV9hcmdzID0gewotICAgICAgICAg
ICAgICAgICdwYXJhbWV0ZXJUeXBlJzogQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl9zdGFja19p
bl9wYXJhbWV0ZXIocGFyYW1ldGVyKSwKLSAgICAgICAgICAgICAgICAncGFyYW1ldGVyS2V5Jzog
cGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lLAotICAgICAgICAgICAgICAgICdwYXJhbWV0ZXJOYW1l
JzogcGFyYW1ldGVyX25hbWUsCi0gICAgICAgICAgICAgICAgJ3BhcmFtZXRlckV4cHJlc3Npb24n
OiBwYXJhbWV0ZXJfZXhwcmVzc2lvbiwKLSAgICAgICAgICAgICAgICAna2V5ZWRHZXRNZXRob2Qn
OiBDcHBHZW5lcmF0b3IuY3BwX2dldHRlcl9tZXRob2RfZm9yX3R5cGUocGFyYW1ldGVyLnR5cGUp
LAotICAgICAgICAgICAgICAgICdzdWNjZXNzT3V0UGFyYW0nOiBvdXRfc3VjY2Vzc19hcmd1bWVu
dAotICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGFsdGVybmF0ZV9kaXNwYXRjaGVyX21l
dGhvZF9wYXJhbWV0ZXJzLmFwcGVuZChwYXJhbWV0ZXJfbmFtZSkKIAotICAgICAgICAgICAgaW5f
cGFyYW1ldGVyX2RlY2xhcmF0aW9ucy5hcHBlbmQoJyAgICAlKHBhcmFtZXRlclR5cGUpcyAlKHBh
cmFtZXRlck5hbWUpcyA9IG1fYmFja2VuZERpc3BhdGNoZXItPiUoa2V5ZWRHZXRNZXRob2Qpcyhw
YXJhbWV0ZXJzLmdldCgpLCAiJShwYXJhbWV0ZXJLZXkpcyJfcywgJShzdWNjZXNzT3V0UGFyYW0p
cyk7JyAlIHBhcmFtX2FyZ3MpCi0KLSAgICAgICAgICAgIGlmIHBhcmFtZXRlci5pc19vcHRpb25h
bDoKLSAgICAgICAgICAgICAgICBvcHRpb25hbF9pbl9wYXJhbWV0ZXJfc3RyaW5nID0gJyUocGFy
YW1ldGVyTmFtZSlzX3ZhbHVlRm91bmQgPyAlKHBhcmFtZXRlckV4cHJlc3Npb24pcyA6IG51bGxw
dHInICUgcGFyYW1fYXJncwotICAgICAgICAgICAgICAgIGFsdGVybmF0ZV9kaXNwYXRjaGVyX21l
dGhvZF9wYXJhbWV0ZXJzLmFwcGVuZChvcHRpb25hbF9pbl9wYXJhbWV0ZXJfc3RyaW5nKQotICAg
ICAgICAgICAgICAgIG1ldGhvZF9wYXJhbWV0ZXJzLmFwcGVuZChvcHRpb25hbF9pbl9wYXJhbWV0
ZXJfc3RyaW5nKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBhbHRlcm5hdGVf
ZGlzcGF0Y2hlcl9tZXRob2RfcGFyYW1ldGVycy5hcHBlbmQocGFyYW1ldGVyX2V4cHJlc3Npb24p
Ci0gICAgICAgICAgICAgICAgbWV0aG9kX3BhcmFtZXRlcnMuYXBwZW5kKHBhcmFtZXRlcl9leHBy
ZXNzaW9uKQotCi0gICAgICAgIGlmIGNvbW1hbmQuaXNfYXN5bmM6Ci0gICAgICAgICAgICBhc3lu
Y19hcmdzID0gewotICAgICAgICAgICAgICAgICdkb21haW5OYW1lJzogZG9tYWluLmRvbWFpbl9u
YW1lLAotICAgICAgICAgICAgICAgICdjYWxsYmFja05hbWUnOiB1Y2ZpcnN0KGNvbW1hbmQuY29t
bWFuZF9uYW1lKSArICdDYWxsYmFjaycKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgb3V0
X3BhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICAgICAgY2FsbGJhY2stPmRpc2FibGUo
KTsnKQotICAgICAgICAgICAgb3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICAg
ICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0
Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsnKQotICAgICAgICAgICAgb3V0X3BhcmFtZXRlcl9h
c3NpZ25tZW50cy5hcHBlbmQoJyAgICAgICAgcmV0dXJuOycpCi0gICAgICAgICAgICBtZXRob2Rf
cGFyYW1ldGVycy5hcHBlbmQoJ2NhbGxiYWNrLmNvcHlSZWYoKScpCi0KLSAgICAgICAgZWxzZToK
LSAgICAgICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gY29tbWFuZC5yZXR1cm5fcGFyYW1ldGVyczoK
LSAgICAgICAgICAgICAgICBwYXJhbV9hcmdzID0gewotICAgICAgICAgICAgICAgICAgICAncGFy
YW1ldGVyVHlwZSc6IENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3Jfc3RhY2tfb3V0X3BhcmFtZXRl
cihwYXJhbWV0ZXIpLAotICAgICAgICAgICAgICAgICAgICAncGFyYW1ldGVyS2V5JzogcGFyYW1l
dGVyLnBhcmFtZXRlcl9uYW1lLAotICAgICAgICAgICAgICAgICAgICAncGFyYW1ldGVyTmFtZSc6
IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgJ2tleWVkU2V0
TWV0aG9kJzogQ3BwR2VuZXJhdG9yLmNwcF9zZXR0ZXJfbWV0aG9kX2Zvcl90eXBlKHBhcmFtZXRl
ci50eXBlKSwKKyAgICAgICAgICAgICAgICBlbnVtX2FyZ3MgPSB7CiAgICAgICAgICAgICAgICAg
ICAgICdoZWxwZXJzTmFtZXNwYWNlJzogc2VsZi5oZWxwZXJzX25hbWVzcGFjZSgpLAorICAgICAg
ICAgICAgICAgICAgICAncGFyYW1ldGVyS2V5JzogcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lLAor
ICAgICAgICAgICAgICAgICAgICAnZW51bVR5cGUnOiBDcHBHZW5lcmF0b3IuY3BwX3Byb3RvY29s
X3R5cGVfZm9yX3R5cGUoX3R5cGUpLAorICAgICAgICAgICAgICAgICAgICAnZW51bVZhcmlhYmxl
TmFtZSc6IHZhcmlhYmxlX25hbWUsCisgICAgICAgICAgICAgICAgICAgICdzdHJpbmdWYXJpYWJs
ZU5hbWUnOiBwYXJhbWV0ZXJfbmFtZSwKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
ICAgICBvdXRfcGFyYW1ldGVyX2RlY2xhcmF0aW9ucy5hcHBlbmQoJyAgICAlKHBhcmFtZXRlclR5
cGUpcyBvdXRfJShwYXJhbWV0ZXJOYW1lKXM7JyAlIHBhcmFtX2FyZ3MpCisgICAgICAgICAgICAg
ICAgaWYgbGVuKHBhcmFtZXRlcl9lbnVtX3Jlc29sdXRpb25zKToKKyAgICAgICAgICAgICAgICAg
ICAgcGFyYW1ldGVyX2VudW1fcmVzb2x1dGlvbnMuYXBwZW5kKCcnKQorICAgICAgICAgICAgICAg
IHBhcmFtZXRlcl9lbnVtX3Jlc29sdXRpb25zLmFwcGVuZCgnICAgIGF1dG8gJShlbnVtVmFyaWFi
bGVOYW1lKXMgPSBQcm90b2NvbDo6JShoZWxwZXJzTmFtZXNwYWNlKXM6OnBhcnNlRW51bVZhbHVl
RnJvbVN0cmluZzwlKGVudW1UeXBlKXM+KCUoc3RyaW5nVmFyaWFibGVOYW1lKXMpOycgJSBlbnVt
X2FyZ3MpCiAgICAgICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgotICAgICAg
ICAgICAgICAgICAgICBpZiBDcHBHZW5lcmF0b3Iuc2hvdWxkX3VzZV93cmFwcGVyX2Zvcl9yZXR1
cm5fdHlwZShwYXJhbWV0ZXIudHlwZSk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBvdXRfcGFy
YW1ldGVyX2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAgICAgICBpZiAob3V0XyUocGFyYW1ldGVyTmFt
ZSlzLmhhc1ZhbHVlKCkpJyAlIHBhcmFtX2FyZ3MpCi0gICAgICAgICAgICAgICAgICAgICAgICBv
dXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAgICAgICAgICAgcmVzdWx0LT4lKGtl
eWVkU2V0TWV0aG9kKXMoIiUocGFyYW1ldGVyS2V5KXMiX3MsICpvdXRfJShwYXJhbWV0ZXJOYW1l
KXMpOycgJSBwYXJhbV9hcmdzKQotICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAg
ICAgICAgICAgICAgICAgb3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICAgICAg
aWYgKG91dF8lKHBhcmFtZXRlck5hbWUpcyknICUgcGFyYW1fYXJncykKLSAgICAgICAgICAgICAg
ICAgICAgICAgIG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAgICAgICAgICBy
ZXN1bHQtPiUoa2V5ZWRTZXRNZXRob2QpcygiJShwYXJhbWV0ZXJLZXkpcyJfcywgb3V0XyUocGFy
YW1ldGVyTmFtZSlzKTsnICUgcGFyYW1fYXJncykKLSAgICAgICAgICAgICAgICBlbGlmIHBhcmFt
ZXRlci50eXBlLmlzX2VudW0oKToKLSAgICAgICAgICAgICAgICAgICAgb3V0X3BhcmFtZXRlcl9h
c3NpZ25tZW50cy5hcHBlbmQoJyAgICAgICAgcmVzdWx0LT4lKGtleWVkU2V0TWV0aG9kKXMoIiUo
cGFyYW1ldGVyS2V5KXMiX3MsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OiUoaGVscGVyc05hbWVzcGFj
ZSlzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShvdXRfJShwYXJhbWV0ZXJOYW1lKXMpKTsnICUgcGFy
YW1fYXJncykKKyAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyX2V4cHJlc3Npb24gPSAnV1RG
TW92ZSglcyknICUgdmFyaWFibGVfbmFtZQogICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAg
ICAgICAgICAgICAgIG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAgICAgIHJl
c3VsdC0+JShrZXllZFNldE1ldGhvZClzKCIlKHBhcmFtZXRlcktleSlzIl9zLCBvdXRfJShwYXJh
bWV0ZXJOYW1lKXMpOycgJSBwYXJhbV9hcmdzKQorICAgICAgICAgICAgICAgICAgICBwYXJhbWV0
ZXJfZW51bV9yZXNvbHV0aW9ucy5hcHBlbmQoJyAgICBpZiAoISUoZW51bVZhcmlhYmxlTmFtZSlz
KSB7JyAlIGVudW1fYXJncykKKyAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyX2VudW1fcmVz
b2x1dGlvbnMuYXBwZW5kKCcgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3Rv
Y29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBtYWtlU3RyaW5nKCJVbmtu
b3duICUocGFyYW1ldGVyS2V5KXM6ICJfcywgJShzdHJpbmdWYXJpYWJsZU5hbWUpcykpOycgJSBl
bnVtX2FyZ3MpCisgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcl9lbnVtX3Jlc29sdXRpb25z
LmFwcGVuZCgnICAgICAgICByZXR1cm47JykKKyAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVy
X2VudW1fcmVzb2x1dGlvbnMuYXBwZW5kKCcgICAgfScpCisgICAgICAgICAgICAgICAgICAgIHBh
cmFtZXRlcl9leHByZXNzaW9uID0gJyonICsgdmFyaWFibGVfbmFtZQorICAgICAgICAgICAgZWxz
ZToKKyAgICAgICAgICAgICAgICBpZiBfdHlwZS5yYXdfbmFtZSgpID09ICdzdHJpbmcnOgorICAg
ICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfZXhwcmVzc2lvbiA9IHZhcmlhYmxlX25hbWUKKyAg
ICAgICAgICAgICAgICBlbGlmIHBhcmFtZXRlci5pc19vcHRpb25hbDoKKyAgICAgICAgICAgICAg
ICAgICAgcGFyYW1ldGVyX2V4cHJlc3Npb24gPSAnV1RGTW92ZSglcyknICUgdmFyaWFibGVfbmFt
ZQorICAgICAgICAgICAgICAgIGVsaWYgX3R5cGUucmF3X25hbWUoKSBpbiBbJ2Jvb2xlYW4nLCAn
aW50ZWdlcicsICdudW1iZXInXToKKyAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyX2V4cHJl
c3Npb24gPSAnKicgKyB2YXJpYWJsZV9uYW1lCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAg
ICAgICAgICAgICAgICAgcGFyYW1ldGVyX2V4cHJlc3Npb24gPSB2YXJpYWJsZV9uYW1lICsgJy5y
ZWxlYXNlTm9uTnVsbCgpJworICAgICAgICAgICAgICAgIGFsdGVybmF0ZV9kaXNwYXRjaGVyX21l
dGhvZF9wYXJhbWV0ZXJzLmFwcGVuZChwYXJhbWV0ZXJfZXhwcmVzc2lvbikKKyAgICAgICAgICAg
IG1ldGhvZF9wYXJhbWV0ZXJzLmFwcGVuZChwYXJhbWV0ZXJfZXhwcmVzc2lvbikKIAotICAgICAg
ICAgICAgICAgIGlmIENwcEdlbmVyYXRvci5zaG91bGRfcGFzc19ieV9jb3B5X2Zvcl9yZXR1cm5f
dHlwZShwYXJhbWV0ZXIudHlwZSkgb3IgcGFyYW1ldGVyLmlzX29wdGlvbmFsIGFuZCBDcHBHZW5l
cmF0b3Iuc2hvdWxkX3VzZV93cmFwcGVyX2Zvcl9yZXR1cm5fdHlwZShwYXJhbWV0ZXIudHlwZSk6
Ci0gICAgICAgICAgICAgICAgICAgIG1ldGhvZF9wYXJhbWV0ZXJzLmFwcGVuZCgnb3V0XycgKyBw
YXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAg
ICAgICAgICAgICAgbWV0aG9kX3BhcmFtZXRlcnMuYXBwZW5kKCcmb3V0XycgKyBwYXJhbWV0ZXIu
cGFyYW1ldGVyX25hbWUpCisgICAgICAgICAgICBwYXJhbV9hcmdzID0geworICAgICAgICAgICAg
ICAgICdwYXJhbWV0ZXJLZXknOiBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUsCisgICAgICAgICAg
ICAgICAgJ3BhcmFtZXRlck5hbWUnOiBwYXJhbWV0ZXJfbmFtZSwKKyAgICAgICAgICAgICAgICAn
a2V5ZWRHZXRNZXRob2QnOiBDcHBHZW5lcmF0b3IuY3BwX2dldHRlcl9tZXRob2RfZm9yX3R5cGUo
X3R5cGUpLAorICAgICAgICAgICAgICAgICdyZXF1aXJlZCc6ICdmYWxzZScgaWYgcGFyYW1ldGVy
LmlzX29wdGlvbmFsIGVsc2UgJ3RydWUnLAorICAgICAgICAgICAgfQorICAgICAgICAgICAgcGFy
YW1ldGVyX2RlY2xhcmF0aW9ucy5hcHBlbmQoJyAgICBhdXRvICUocGFyYW1ldGVyTmFtZSlzID0g
bV9iYWNrZW5kRGlzcGF0Y2hlci0+JShrZXllZEdldE1ldGhvZClzKHByb3RvY29sX3BhcmFtZXRl
cnMuZ2V0KCksICIlKHBhcmFtZXRlcktleSlzIl9zLCAlKHJlcXVpcmVkKXMpOycgJSBwYXJhbV9h
cmdzKQorCisgICAgICAgIGlmIGNvbW1hbmQuaXNfYXN5bmM6CisgICAgICAgICAgICBtZXRob2Rf
cGFyYW1ldGVycy5hcHBlbmQoJ2Fkb3B0UmVmKCpuZXcgJXNCYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXI6OiVzKG1fYmFja2VuZERpc3BhdGNoZXIuY29weVJlZigpLCBwcm90b2NvbF9jYWxsSWQpKScg
JSAoZG9tYWluLmRvbWFpbl9uYW1lLCAnJXNDYWxsYmFjaycgJSB1Y2ZpcnN0KGNvbW1hbmQuY29t
bWFuZF9uYW1lKSkpCiAKICAgICAgICAgY29tbWFuZF9hcmdzID0gewogICAgICAgICAgICAgJ2Rv
bWFpbk5hbWUnOiBkb21haW4uZG9tYWluX25hbWUsCi0gICAgICAgICAgICAnY2FsbGJhY2tOYW1l
JzogJyVzQ2FsbGJhY2snICUgdWNmaXJzdChjb21tYW5kLmNvbW1hbmRfbmFtZSksCiAgICAgICAg
ICAgICAnY29tbWFuZE5hbWUnOiBjb21tYW5kLmNvbW1hbmRfbmFtZSwKLSAgICAgICAgICAgICdp
blBhcmFtZXRlckRlY2xhcmF0aW9ucyc6ICdcbicuam9pbihpbl9wYXJhbWV0ZXJfZGVjbGFyYXRp
b25zKSwKKyAgICAgICAgICAgICdwYXJhbWV0ZXJEZWNsYXJhdGlvbnMnOiAnXG4nLmpvaW4ocGFy
YW1ldGVyX2RlY2xhcmF0aW9ucyksCiAgICAgICAgICAgICAnaW52b2NhdGlvblBhcmFtZXRlcnMn
OiAnLCAnLmpvaW4obWV0aG9kX3BhcmFtZXRlcnMpLAogICAgICAgICAgICAgJ2FsdGVybmF0ZUlu
dm9jYXRpb25QYXJhbWV0ZXJzJzogJywgJy5qb2luKGFsdGVybmF0ZV9kaXNwYXRjaGVyX21ldGhv
ZF9wYXJhbWV0ZXJzKSwKICAgICAgICAgfQogCiAgICAgICAgIGxpbmVzID0gW10KICAgICAgICAg
aWYgbGVuKGNvbW1hbmQuY2FsbF9wYXJhbWV0ZXJzKSA9PSAwOgotICAgICAgICAgICAgbGluZXMu
YXBwZW5kKCd2b2lkICUoZG9tYWluTmFtZSlzQmFja2VuZERpc3BhdGNoZXI6OiUoY29tbWFuZE5h
bWUpcyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiknICUgY29tbWFuZF9h
cmdzKQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCd2b2lkICUoZG9tYWluTmFtZSlzQmFja2Vu
ZERpc3BhdGNoZXI6OiUoY29tbWFuZE5hbWUpcyhsb25nIHByb3RvY29sX2NhbGxJZCwgUmVmUHRy
PEpTT046Ok9iamVjdD4mJiknICUgY29tbWFuZF9hcmdzKQogICAgICAgICBlbHNlOgotICAgICAg
ICAgICAgbGluZXMuYXBwZW5kKCd2b2lkICUoZG9tYWluTmFtZSlzQmFja2VuZERpc3BhdGNoZXI6
OiUoY29tbWFuZE5hbWUpcyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBw
YXJhbWV0ZXJzKScgJSBjb21tYW5kX2FyZ3MpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ3Zv
aWQgJShkb21haW5OYW1lKXNCYWNrZW5kRGlzcGF0Y2hlcjo6JShjb21tYW5kTmFtZSlzKGxvbmcg
cHJvdG9jb2xfY2FsbElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX3BhcmFtZXRl
cnMpJyAlIGNvbW1hbmRfYXJncykKICAgICAgICAgbGluZXMuYXBwZW5kKCd7JykKIAogICAgICAg
ICBpZiBsZW4oY29tbWFuZC5jYWxsX3BhcmFtZXRlcnMpID4gMDoKQEAgLTMxOSwzMSArMzA2LDcx
IEBAIGNsYXNzIENwcEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IoQ3Bw
R2VuZXJhdG9yKToKICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnI2VuZGlmIC8vIEVOQUJMRShJ
TlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKScpCiAgICAgICAgICAgICBsaW5lcy5hcHBl
bmQoJycpCiAKKyAgICAgICAgaWYgbGVuKHBhcmFtZXRlcl9lbnVtX3Jlc29sdXRpb25zKToKKyAg
ICAgICAgICAgIGxpbmVzLmV4dGVuZChwYXJhbWV0ZXJfZW51bV9yZXNvbHV0aW9ucykKKyAgICAg
ICAgICAgIGxpbmVzLmFwcGVuZCgnJykKKwogICAgICAgICBpZiBjb21tYW5kLmlzX2FzeW5jOgot
ICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgUmVmPCUoZG9tYWluTmFtZSlzQmFja2VuZERp
c3BhdGNoZXJIYW5kbGVyOjolKGNhbGxiYWNrTmFtZSlzPiBjYWxsYmFjayA9IGFkb3B0UmVmKCpu
ZXcgJShkb21haW5OYW1lKXNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OiUoY2FsbGJhY2tOYW1l
KXMobV9iYWNrZW5kRGlzcGF0Y2hlci5jb3B5UmVmKCksIHJlcXVlc3RJZCkpOycgJSBjb21tYW5k
X2FyZ3MpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBtX2FnZW50LT4lKGNvbW1hbmRO
YW1lKXMoJShpbnZvY2F0aW9uUGFyYW1ldGVycylzKTsnICUgY29tbWFuZF9hcmdzKQogICAgICAg
ICBlbHNlOgotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgRXJyb3JTdHJpbmcgZXJyb3I7
JykKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3Vs
dCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7JykKKyAgICAgICAgICAgIHJlc3VsdF9leHRyYWN0
aW9uX25hbWVzID0gW10KKyAgICAgICAgICAgIHJlc3VsdF9jb252ZXJzaW9uX2xpbmVzID0gW10K
KyAgICAgICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gY29tbWFuZC5yZXR1cm5fcGFyYW1ldGVyczoK
KyAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfbmFtZSA9IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFt
ZQorICAgICAgICAgICAgICAgIGlmIHBhcmFtZXRlci5pc19vcHRpb25hbDoKKyAgICAgICAgICAg
ICAgICAgICAgcGFyYW1ldGVyX25hbWUgPSAnb3B0XycgKyBwYXJhbWV0ZXJfbmFtZQorICAgICAg
ICAgICAgICAgIHBhcmFtZXRlcl9uYW1lID0gJ291dF8nICsgcGFyYW1ldGVyX25hbWUKIAotICAg
ICAgICBpZiBsZW4oY29tbWFuZC5yZXR1cm5fcGFyYW1ldGVycykgPiAwOgotICAgICAgICAgICAg
bGluZXMuZXh0ZW5kKG91dF9wYXJhbWV0ZXJfZGVjbGFyYXRpb25zKQotICAgICAgICBsaW5lcy5h
cHBlbmQoJyAgICBtX2FnZW50LT4lKGNvbW1hbmROYW1lKXMoJShpbnZvY2F0aW9uUGFyYW1ldGVy
cylzKTsnICUgY29tbWFuZF9hcmdzKQotICAgICAgICBsaW5lcy5hcHBlbmQoJycpCisgICAgICAg
ICAgICAgICAgcmVzdWx0X2V4dHJhY3Rpb25fbmFtZXMuYXBwZW5kKHBhcmFtZXRlcl9uYW1lKQog
Ci0gICAgICAgIGlmIG5vdCBjb21tYW5kLmlzX2FzeW5jOgotICAgICAgICAgICAgaWYgbGVuKGNv
bW1hbmQucmV0dXJuX3BhcmFtZXRlcnMpID4gMToKLSAgICAgICAgICAgICAgICBsaW5lcy5hcHBl
bmQoJyAgICBpZiAoIWVycm9yLmxlbmd0aCgpKSB7JykKLSAgICAgICAgICAgICAgICBsaW5lcy5l
eHRlbmQob3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cykKLSAgICAgICAgICAgICAgICBsaW5lcy5h
cHBlbmQoJyAgICB9JykKLSAgICAgICAgICAgIGVsaWYgbGVuKGNvbW1hbmQucmV0dXJuX3BhcmFt
ZXRlcnMpID09IDE6Ci0gICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgaWYgKCFlcnJv
ci5sZW5ndGgoKSknKQotICAgICAgICAgICAgICAgIGxpbmVzLmV4dGVuZChvdXRfcGFyYW1ldGVy
X2Fzc2lnbm1lbnRzKQorICAgICAgICAgICAgICAgIHBhcmFtZXRlcl92YWx1ZSA9IHBhcmFtZXRl
cl9uYW1lCisKKyAgICAgICAgICAgICAgICBfdHlwZSA9IHBhcmFtZXRlci50eXBlCisgICAgICAg
ICAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgQWxpYXNlZFR5cGUpOgorICAgICAgICAgICAg
ICAgICAgICBfdHlwZSA9IF90eXBlLmFsaWFzZWRfdHlwZQorICAgICAgICAgICAgICAgIGlmIGlz
aW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKSBhbmQgX3R5cGUuaXNfYW5vbnltb3VzOgorICAgICAg
ICAgICAgICAgICAgICBfdHlwZSA9IF90eXBlLnByaW1pdGl2ZV90eXBlCisKKyAgICAgICAgICAg
ICAgICBpZiBfdHlwZS5pc19lbnVtKCk6CisgICAgICAgICAgICAgICAgICAgIGlmIHBhcmFtZXRl
ci5pc19vcHRpb25hbDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcl92YWx1ZSA9
ICcqJyArIHBhcmFtZXRlcl92YWx1ZQorICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfdmFs
dWUgPSAnUHJvdG9jb2w6OiVzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZSglcyknICUgKHNlbGYuaGVs
cGVyc19uYW1lc3BhY2UoKSwgcGFyYW1ldGVyX3ZhbHVlKQorICAgICAgICAgICAgICAgIGVsaWYg
Q3BwR2VuZXJhdG9yLnNob3VsZF9yZWxlYXNlX2FyZ3VtZW50KF90eXBlLCBwYXJhbWV0ZXIuaXNf
b3B0aW9uYWwpOgorICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfdmFsdWUgPSBwYXJhbWV0
ZXJfdmFsdWUgKyAnLnJlbGVhc2VOb25OdWxsKCknCisgICAgICAgICAgICAgICAgZWxpZiBDcHBH
ZW5lcmF0b3Iuc2hvdWxkX2RlcmVmZXJlbmNlX2FyZ3VtZW50KF90eXBlLCBwYXJhbWV0ZXIuaXNf
b3B0aW9uYWwpOgorICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfdmFsdWUgPSAnKicgKyBw
YXJhbWV0ZXJfdmFsdWUKKyAgICAgICAgICAgICAgICBlbGlmIENwcEdlbmVyYXRvci5zaG91bGRf
bW92ZV9hcmd1bWVudChfdHlwZSwgcGFyYW1ldGVyLmlzX29wdGlvbmFsKToKKyAgICAgICAgICAg
ICAgICAgICAgcGFyYW1ldGVyX3ZhbHVlID0gJ1dURk1vdmUoJXMpJyAlIHBhcmFtZXRlcl92YWx1
ZQorCisgICAgICAgICAgICAgICAgcGFyYW1fYXJncyA9IHsKKyAgICAgICAgICAgICAgICAgICAg
J2tleWVkU2V0TWV0aG9kJzogQ3BwR2VuZXJhdG9yLmNwcF9zZXR0ZXJfbWV0aG9kX2Zvcl90eXBl
KF90eXBlKSwKKyAgICAgICAgICAgICAgICAgICAgJ3BhcmFtZXRlcktleSc6IHBhcmFtZXRlci5w
YXJhbWV0ZXJfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgJ3BhcmFtZXRlck5hbWUnOiBwYXJh
bWV0ZXJfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgJ3BhcmFtZXRlclZhbHVlJzogcGFyYW1l
dGVyX3ZhbHVlLAorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIHBhcmFt
ZXRlci5pc19vcHRpb25hbDoKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0X2NvbnZlcnNpb25f
bGluZXMuYXBwZW5kKCcgICAgaWYgKCEhJShwYXJhbWV0ZXJOYW1lKXMpJyAlIHBhcmFtX2FyZ3Mp
CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdF9jb252ZXJzaW9uX2xpbmVzLmFwcGVuZCgnICAg
ICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+JShrZXllZFNldE1ldGhvZClzKCIlKHBhcmFtZXRl
cktleSlzIl9zLCAlKHBhcmFtZXRlclZhbHVlKXMpOycgJSBwYXJhbV9hcmdzKQorICAgICAgICAg
ICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdF9jb252ZXJzaW9uX2xpbmVz
LmFwcGVuZCgnICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT4lKGtleWVkU2V0TWV0aG9kKXMoIiUo
cGFyYW1ldGVyS2V5KXMiX3MsICUocGFyYW1ldGVyVmFsdWUpcyk7JyAlIHBhcmFtX2FyZ3MpCisK
KyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGF1dG8gcmVzdWx0ID0gbV9hZ2VudC0+JShj
b21tYW5kTmFtZSlzKCUoaW52b2NhdGlvblBhcmFtZXRlcnMpcyk7JyAlIGNvbW1hbmRfYXJncykK
KyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGlmICghcmVzdWx0KSB7JykKKyAgICAgICAg
ICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBBU1NFUlQoIXJlc3VsdC5lcnJvcigpLmlzRW1wdHko
KSk7JykKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBtX2JhY2tlbmREaXNwYXRj
aGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwg
cmVzdWx0LmVycm9yKCkpOycpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgcmV0
dXJuOycpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICB9JykKKyAgICAgICAgICAgIGxp
bmVzLmFwcGVuZCgnJykKKyAgICAgICAgICAgIGlmIGxlbihyZXN1bHRfZXh0cmFjdGlvbl9uYW1l
cykgPT0gMToKKyAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBhdXRvICVzID0gV1RG
TW92ZShyZXN1bHQudmFsdWUoKSk7JyAlIHJlc3VsdF9leHRyYWN0aW9uX25hbWVzWzBdKQogICAg
ICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnJykKLQotICAgICAgICAgICAgbGluZXMuYXBwZW5k
KCcgICAgaWYgKCFlcnJvci5sZW5ndGgoKSknKQotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcg
ICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1v
dmUocmVzdWx0KSwgZmFsc2UpOycpCi0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBlbHNl
JykKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVy
LT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RG
TW92ZShlcnJvcikpOycpCisgICAgICAgICAgICBlbGlmIGxlbihyZXN1bHRfZXh0cmFjdGlvbl9u
YW1lcykgPiAxOgorICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGF1dG8gWyVzXSA9
IFdURk1vdmUocmVzdWx0LnZhbHVlKCkpOycgJSAiLCAiLmpvaW4ocmVzdWx0X2V4dHJhY3Rpb25f
bmFtZXMpKQorICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnJykKKyAgICAgICAgICAgIGxp
bmVzLmFwcGVuZCgnICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6
OmNyZWF0ZSgpOycpCisgICAgICAgICAgICBsaW5lcy5leHRlbmQocmVzdWx0X2NvbnZlcnNpb25f
bGluZXMpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBtX2JhY2tlbmREaXNwYXRjaGVy
LT5zZW5kUmVzcG9uc2UocHJvdG9jb2xfY2FsbElkLCBXVEZNb3ZlKHByb3RvY29sX2pzb25NZXNz
YWdlKSwgZmFsc2UpOycpCiAKICAgICAgICAgbGluZXMuYXBwZW5kKCd9JykKICAgICAgICAgcmV0
dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oY29tbWFuZC5jb25kaXRpb24s
ICJcbiIuam9pbihsaW5lcykpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfZnJvbnRlbmRfZGlzcGF0Y2hlcl9o
ZWFkZXIucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdl
bi9nZW5lcmF0ZV9jcHBfZnJvbnRlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkKaW5kZXggMTE5ZDIz
YzM4Y2RmMjRjZjU2ZDBmZmM2NmQ1N2I4YTNkNGUyZGE0NC4uYmVhYTE3Yzk4MTU0YjdlZTIyZTNi
NWI5NzZkMDE4Mzk0MGE0NjkxMyAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2Zyb250ZW5kX2Rpc3BhdGNoZXJf
aGVhZGVyLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9j
b2RlZ2VuL2dlbmVyYXRlX2NwcF9mcm9udGVuZF9kaXNwYXRjaGVyX2hlYWRlci5weQpAQCAtNzMs
OSArNzMsOSBAQCBjbGFzcyBDcHBGcm9udGVuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IoQ3Bw
R2VuZXJhdG9yKToKICAgICAgICAgaGVhZGVyX2luY2x1ZGVzID0gWwogICAgICAgICAgICAgKFsi
SmF2YVNjcmlwdENvcmUiLCAiV2ViS2l0Il0sIChzZWxmLm1vZGVsKCkuZnJhbWV3b3JrLm5hbWUs
ICIlc1Byb3RvY29sT2JqZWN0cy5oIiAlIHNlbGYucHJvdG9jb2xfbmFtZSgpKSksCiAgICAgICAg
ICAgICAoWyJKYXZhU2NyaXB0Q29yZSIsICJXZWJLaXQiXSwgKCJXVEYiLCAid3RmL0pTT05WYWx1
ZXMuaCIpKSwKLSAgICAgICAgICAgIChbIkphdmFTY3JpcHRDb3JlIiwgIldlYktpdCJdLCAoIldU
RiIsICJ3dGYvdGV4dC9XVEZTdHJpbmcuaCIpKQorICAgICAgICAgICAgKFsiSmF2YVNjcmlwdENv
cmUiLCAiV2ViS2l0Il0sICgiV1RGIiwgInd0Zi9PcHRpb25hbC5oIikpLAorICAgICAgICAgICAg
KFsiSmF2YVNjcmlwdENvcmUiLCAiV2ViS2l0Il0sICgiV1RGIiwgInd0Zi90ZXh0L1dURlN0cmlu
Zy5oIikpLAogICAgICAgICBdCi0KICAgICAgICAgcmV0dXJuICdcbicuam9pbihzZWxmLmdlbmVy
YXRlX2luY2x1ZGVzX2Zyb21fZW50cmllcyhoZWFkZXJfaW5jbHVkZXMpKQogCiAgICAgZGVmIF9n
ZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9mb3JfcGFyYW1ldGVyKHNlbGYsIHBhcmFtZXRlciwgZXZl
bnQpOgpAQCAtMTE3LDggKzExNywxMyBAQCBjbGFzcyBDcHBGcm9udGVuZERpc3BhdGNoZXJIZWFk
ZXJHZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAgICAgZm9ybWFsX3BhcmFtZXRlcnMgPSBb
XQogICAgICAgICBsaW5lcyA9IFtdCiAgICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gZXZlbnQuZXZl
bnRfcGFyYW1ldGVyczoKLSAgICAgICAgICAgIGZvcm1hbF9wYXJhbWV0ZXJzLmFwcGVuZCgnJXMg
JXMnICUgKENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3JfY2hlY2tlZF9mb3JtYWxfZXZlbnRfcGFy
YW1ldGVyKHBhcmFtZXRlciksIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkpCi0gICAgICAgICAg
ICBpZiBpc2luc3RhbmNlKHBhcmFtZXRlci50eXBlLCBFbnVtVHlwZSkgYW5kIHBhcmFtZXRlci5w
YXJhbWV0ZXJfbmFtZSBub3QgaW4gdXNlZF9lbnVtX25hbWVzOgorICAgICAgICAgICAgcGFyYW1l
dGVyX25hbWUgPSBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUKKyAgICAgICAgICAgIGlmIHBhcmFt
ZXRlci5pc19vcHRpb25hbDoKKyAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfbmFtZSA9ICdvcHRf
JyArIHBhcmFtZXRlcl9uYW1lCisKKyAgICAgICAgICAgIGZvcm1hbF9wYXJhbWV0ZXJzLmFwcGVu
ZCgnJXMgJXMnICUgKENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3JfZXZlbnRfcGFyYW1ldGVyKHBh
cmFtZXRlci50eXBlLCBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwpLCBwYXJhbWV0ZXJfbmFtZSkpCisK
KyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UocGFyYW1ldGVyLnR5cGUsIEVudW1UeXBlKSBhbmQg
cGFyYW1ldGVyLnR5cGUuaXNfYW5vbnltb3VzIGFuZCBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUg
bm90IGluIHVzZWRfZW51bV9uYW1lczoKICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoc2Vs
Zi5fZ2VuZXJhdGVfYW5vbnltb3VzX2VudW1fZm9yX3BhcmFtZXRlcihwYXJhbWV0ZXIsIGV2ZW50
KSkKICAgICAgICAgICAgICAgICB1c2VkX2VudW1fbmFtZXMuYWRkKHBhcmFtZXRlci5wYXJhbWV0
ZXJfbmFtZSkKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50
YXRpb24ucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdl
bi9nZW5lcmF0ZV9jcHBfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQppbmRl
eCA2NmRjNmUxODVjZmUyYjYxYjFlY2E3NzU3M2NlMTY3NGU2YjM1YTQ5Li43NjNlMDFkZmI3OGNk
ZWM4ZDYwMzBkMmVkYzM1MDU0ODkxNzY5ODBjIDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfZnJvbnRlbmRfZGlz
cGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfZnJvbnRlbmRfZGlzcGF0Y2hlcl9p
bXBsZW1lbnRhdGlvbi5weQpAQCAtMzMsMTIgKzMzLDEyIEBAIHRyeToKICAgICBmcm9tIC5jcHBf
Z2VuZXJhdG9yIGltcG9ydCBDcHBHZW5lcmF0b3IKICAgICBmcm9tIC5jcHBfZ2VuZXJhdG9yX3Rl
bXBsYXRlcyBpbXBvcnQgQ3BwR2VuZXJhdG9yVGVtcGxhdGVzIGFzIENwcFRlbXBsYXRlcwogICAg
IGZyb20gLmdlbmVyYXRvciBpbXBvcnQgR2VuZXJhdG9yLCB1Y2ZpcnN0Ci0gICAgZnJvbSAubW9k
ZWxzIGltcG9ydCBPYmplY3RUeXBlLCBBcnJheVR5cGUKKyAgICBmcm9tIC5tb2RlbHMgaW1wb3J0
IE9iamVjdFR5cGUsIEFycmF5VHlwZSwgQWxpYXNlZFR5cGUsIEVudW1UeXBlCiBleGNlcHQ6CiAg
ICAgZnJvbSBjcHBfZ2VuZXJhdG9yIGltcG9ydCBDcHBHZW5lcmF0b3IKICAgICBmcm9tIGNwcF9n
ZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBDcHBHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgQ3BwVGVt
cGxhdGVzCiAgICAgZnJvbSBnZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvciwgdWNmaXJzdAotICAg
IGZyb20gbW9kZWxzIGltcG9ydCBPYmplY3RUeXBlLCBBcnJheVR5cGUKKyAgICBmcm9tIG1vZGVs
cyBpbXBvcnQgT2JqZWN0VHlwZSwgQXJyYXlUeXBlLCBBbGlhc2VkVHlwZSwgRW51bVR5cGUKIAog
bG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2JhbCcpCiAKQEAgLTcxLDkgKzcxLDcgQEAgY2xh
c3MgQ3BwRnJvbnRlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IoQ3BwR2VuZXJh
dG9yKToKICAgICBkZWYgX2dlbmVyYXRlX3NlY29uZGFyeV9oZWFkZXJfaW5jbHVkZXMoc2VsZik6
CiAgICAgICAgIGhlYWRlcl9pbmNsdWRlcyA9IFsKICAgICAgICAgICAgIChbIkphdmFTY3JpcHRD
b3JlIiwgIldlYktpdCJdLCAoIkphdmFTY3JpcHRDb3JlIiwgImluc3BlY3Rvci9JbnNwZWN0b3JG
cm9udGVuZFJvdXRlci5oIikpLAotICAgICAgICAgICAgKFsiSmF2YVNjcmlwdENvcmUiLCAiV2Vi
S2l0Il0sICgiV1RGIiwgInd0Zi90ZXh0L0NTdHJpbmcuaCIpKQogICAgICAgICBdCi0KICAgICAg
ICAgcmV0dXJuICdcbicuam9pbihzZWxmLmdlbmVyYXRlX2luY2x1ZGVzX2Zyb21fZW50cmllcyho
ZWFkZXJfaW5jbHVkZXMpKQogCiAgICAgZGVmIF9nZW5lcmF0ZV9kaXNwYXRjaGVyX2ltcGxlbWVu
dGF0aW9uc19mb3JfZG9tYWluKHNlbGYsIGRvbWFpbik6CkBAIC05MCwyNyArODgsNDMgQEAgY2xh
c3MgQ3BwRnJvbnRlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IoQ3BwR2VuZXJh
dG9yKToKICAgICAgICAgZm9ybWFsX3BhcmFtZXRlcnMgPSBbXQogCiAgICAgICAgIGZvciBwYXJh
bWV0ZXIgaW4gZXZlbnQuZXZlbnRfcGFyYW1ldGVyczoKKyAgICAgICAgICAgIHBhcmFtZXRlcl9u
YW1lID0gcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lCisgICAgICAgICAgICBpZiBwYXJhbWV0ZXIu
aXNfb3B0aW9uYWw6CisgICAgICAgICAgICAgICAgcGFyYW1ldGVyX25hbWUgPSAnb3B0XycgKyBw
YXJhbWV0ZXJfbmFtZQogCi0gICAgICAgICAgICBwYXJhbWV0ZXJfdmFsdWUgPSBwYXJhbWV0ZXIu
cGFyYW1ldGVyX25hbWUKLSAgICAgICAgICAgIGlmIHBhcmFtZXRlci5pc19vcHRpb25hbCBhbmQg
bm90IENwcEdlbmVyYXRvci5zaG91bGRfcGFzc19ieV9jb3B5X2Zvcl9yZXR1cm5fdHlwZShwYXJh
bWV0ZXIudHlwZSk6CisgICAgICAgICAgICBwYXJhbWV0ZXJfdmFsdWUgPSBwYXJhbWV0ZXJfbmFt
ZQorCisgICAgICAgICAgICBfdHlwZSA9IHBhcmFtZXRlci50eXBlCisgICAgICAgICAgICBpZiBp
c2luc3RhbmNlKF90eXBlLCBBbGlhc2VkVHlwZSk6CisgICAgICAgICAgICAgICAgX3R5cGUgPSBf
dHlwZS5hbGlhc2VkX3R5cGUKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEVudW1U
eXBlKSBhbmQgX3R5cGUuaXNfYW5vbnltb3VzOgorICAgICAgICAgICAgICAgIF90eXBlID0gX3R5
cGUucHJpbWl0aXZlX3R5cGUKKworICAgICAgICAgICAgaWYgX3R5cGUuaXNfZW51bSgpOgorICAg
ICAgICAgICAgICAgIGlmIHBhcmFtZXRlci5pc19vcHRpb25hbDoKKyAgICAgICAgICAgICAgICAg
ICAgcGFyYW1ldGVyX3ZhbHVlID0gJyonICsgcGFyYW1ldGVyX3ZhbHVlCisgICAgICAgICAgICAg
ICAgcGFyYW1ldGVyX3ZhbHVlID0gJ1Byb3RvY29sOjolczo6Z2V0RW51bUNvbnN0YW50VmFsdWUo
JXMpJyAlIChzZWxmLmhlbHBlcnNfbmFtZXNwYWNlKCksIHBhcmFtZXRlcl92YWx1ZSkKKyAgICAg
ICAgICAgIGVsaWYgQ3BwR2VuZXJhdG9yLnNob3VsZF9yZWxlYXNlX2FyZ3VtZW50KF90eXBlLCBw
YXJhbWV0ZXIuaXNfb3B0aW9uYWwpOgorICAgICAgICAgICAgICAgIHBhcmFtZXRlcl92YWx1ZSA9
IHBhcmFtZXRlcl92YWx1ZSArICcucmVsZWFzZU5vbk51bGwoKScKKyAgICAgICAgICAgIGVsaWYg
Q3BwR2VuZXJhdG9yLnNob3VsZF9kZXJlZmVyZW5jZV9hcmd1bWVudChfdHlwZSwgcGFyYW1ldGVy
LmlzX29wdGlvbmFsKToKICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfdmFsdWUgPSAnKicgKyBw
YXJhbWV0ZXJfdmFsdWUKLSAgICAgICAgICAgIGlmIHBhcmFtZXRlci50eXBlLmlzX2VudW0oKToK
LSAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfdmFsdWUgPSAnSW5zcGVjdG9yOjpQcm90b2NvbDo6
JXM6OmdldEVudW1Db25zdGFudFZhbHVlKCVzKScgJSAoc2VsZi5oZWxwZXJzX25hbWVzcGFjZSgp
LCBwYXJhbWV0ZXJfdmFsdWUpCisgICAgICAgICAgICBlbGlmIENwcEdlbmVyYXRvci5zaG91bGRf
bW92ZV9hcmd1bWVudChfdHlwZSwgcGFyYW1ldGVyLmlzX29wdGlvbmFsKToKKyAgICAgICAgICAg
ICAgICBwYXJhbWV0ZXJfdmFsdWUgPSAnV1RGTW92ZSglcyknICUgcGFyYW1ldGVyX3ZhbHVlCiAK
ICAgICAgICAgICAgIHBhcmFtZXRlcl9hcmdzID0gewotICAgICAgICAgICAgICAgICdwYXJhbWV0
ZXJUeXBlJzogQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl9zdGFja19vdXRfcGFyYW1ldGVyKHBh
cmFtZXRlciksCi0gICAgICAgICAgICAgICAgJ3BhcmFtZXRlck5hbWUnOiBwYXJhbWV0ZXIucGFy
YW1ldGVyX25hbWUsCisgICAgICAgICAgICAgICAgJ3BhcmFtZXRlcktleSc6IHBhcmFtZXRlci5w
YXJhbWV0ZXJfbmFtZSwKKyAgICAgICAgICAgICAgICAncGFyYW1ldGVyTmFtZSc6IHBhcmFtZXRl
cl9uYW1lLAogICAgICAgICAgICAgICAgICdwYXJhbWV0ZXJWYWx1ZSc6IHBhcmFtZXRlcl92YWx1
ZSwKLSAgICAgICAgICAgICAgICAna2V5ZWRTZXRNZXRob2QnOiBDcHBHZW5lcmF0b3IuY3BwX3Nl
dHRlcl9tZXRob2RfZm9yX3R5cGUocGFyYW1ldGVyLnR5cGUpLAorICAgICAgICAgICAgICAgICdr
ZXllZFNldE1ldGhvZCc6IENwcEdlbmVyYXRvci5jcHBfc2V0dGVyX21ldGhvZF9mb3JfdHlwZShf
dHlwZSksCiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIHBhcmFtZXRlci5pc19vcHRp
b25hbDoKLSAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAg
aWYgKCUocGFyYW1ldGVyTmFtZSlzKScgJSBwYXJhbWV0ZXJfYXJncykKLSAgICAgICAgICAgICAg
ICBwYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAgICAgIHBhcmFtc09iamVjdC0+JShr
ZXllZFNldE1ldGhvZClzKCIlKHBhcmFtZXRlck5hbWUpcyJfcywgJShwYXJhbWV0ZXJWYWx1ZSlz
KTsnICUgcGFyYW1ldGVyX2FyZ3MpCisgICAgICAgICAgICAgICAgcGFyYW1ldGVyX2Fzc2lnbm1l
bnRzLmFwcGVuZCgnICAgIGlmICghISUocGFyYW1ldGVyTmFtZSlzKScgJSBwYXJhbWV0ZXJfYXJn
cykKKyAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAgICAg
IHByb3RvY29sX3BhcmFtc09iamVjdC0+JShrZXllZFNldE1ldGhvZClzKCIlKHBhcmFtZXRlcktl
eSlzIl9zLCAlKHBhcmFtZXRlclZhbHVlKXMpOycgJSBwYXJhbWV0ZXJfYXJncykKICAgICAgICAg
ICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcGFyYW1ldGVyX2Fzc2lnbm1lbnRzLmFwcGVuZCgn
ICAgIHBhcmFtc09iamVjdC0+JShrZXllZFNldE1ldGhvZClzKCIlKHBhcmFtZXRlck5hbWUpcyJf
cywgJShwYXJhbWV0ZXJWYWx1ZSlzKTsnICUgcGFyYW1ldGVyX2FyZ3MpCisgICAgICAgICAgICAg
ICAgcGFyYW1ldGVyX2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAgIHByb3RvY29sX3BhcmFtc09iamVj
dC0+JShrZXllZFNldE1ldGhvZClzKCIlKHBhcmFtZXRlcktleSlzIl9zLCAlKHBhcmFtZXRlclZh
bHVlKXMpOycgJSBwYXJhbWV0ZXJfYXJncykKIAotICAgICAgICAgICAgZm9ybWFsX3BhcmFtZXRl
cnMuYXBwZW5kKCclcyAlcycgJSAoQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl9jaGVja2VkX2Zv
cm1hbF9ldmVudF9wYXJhbWV0ZXIocGFyYW1ldGVyKSwgcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1l
KSkKKyAgICAgICAgICAgIGZvcm1hbF9wYXJhbWV0ZXJzLmFwcGVuZCgnJXMgJXMnICUgKENwcEdl
bmVyYXRvci5jcHBfdHlwZV9mb3JfZXZlbnRfcGFyYW1ldGVyKF90eXBlLCBwYXJhbWV0ZXIuaXNf
b3B0aW9uYWwpLCBwYXJhbWV0ZXJfbmFtZSkpCiAKICAgICAgICAgZXZlbnRfYXJncyA9IHsKICAg
ICAgICAgICAgICdkb21haW5OYW1lJzogZG9tYWluLmRvbWFpbl9uYW1lLApAQCAtMTIwLDE1ICsx
MzQsMTUgQEAgY2xhc3MgQ3BwRnJvbnRlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0
b3IoQ3BwR2VuZXJhdG9yKToKIAogICAgICAgICBsaW5lcy5hcHBlbmQoJ3ZvaWQgJShkb21haW5O
YW1lKXNGcm9udGVuZERpc3BhdGNoZXI6OiUoZXZlbnROYW1lKXMoJShmb3JtYWxQYXJhbWV0ZXJz
KXMpJyAlIGV2ZW50X2FyZ3MpCiAgICAgICAgIGxpbmVzLmFwcGVuZCgneycpCi0gICAgICAgIGxp
bmVzLmFwcGVuZCgnICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2Jq
ZWN0OjpjcmVhdGUoKTsnKQotICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBqc29uTWVzc2FnZS0+
c2V0U3RyaW5nKCJtZXRob2QiX3MsICIlKGRvbWFpbk5hbWUpcy4lKGV2ZW50TmFtZSlzIl9zKTsn
ICUgZXZlbnRfYXJncykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgYXV0byBwcm90b2NvbF9q
c29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7JykKKyAgICAgICAgbGluZXMuYXBw
ZW5kKCcgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiJShk
b21haW5OYW1lKXMuJShldmVudE5hbWUpcyJfcyk7JyAlIGV2ZW50X2FyZ3MpCiAKICAgICAgICAg
aWYgbGVuKHBhcmFtZXRlcl9hc3NpZ25tZW50cykgPiAwOgotICAgICAgICAgICAgbGluZXMuYXBw
ZW5kKCcgICAgUmVmPEpTT046Ok9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSlNPTjo6T2JqZWN0Ojpj
cmVhdGUoKTsnKQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgYXV0byBwcm90b2NvbF9w
YXJhbXNPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOycpCiAgICAgICAgICAgICBsaW5l
cy5leHRlbmQocGFyYW1ldGVyX2Fzc2lnbm1lbnRzKQotICAgICAgICAgICAgbGluZXMuYXBwZW5k
KCcgICAganNvbk1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIl9zLCBXVEZNb3ZlKHBhcmFtc09i
amVjdCkpOycpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBwcm90b2NvbF9qc29uTWVz
c2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiX3MsIFdURk1vdmUocHJvdG9jb2xfcGFyYW1zT2JqZWN0
KSk7JykKIAogICAgICAgICBsaW5lcy5hcHBlbmQoJycpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgn
ICAgIG1fZnJvbnRlbmRSb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmco
KSk7JykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgbV9mcm9udGVuZFJvdXRlci5zZW5kRXZl
bnQocHJvdG9jb2xfanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsnKQogICAgICAgICBsaW5l
cy5hcHBlbmQoJ30nKQogICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2Nv
bmRpdGlvbihldmVudC5jb25kaXRpb24sICJcbiIuam9pbihsaW5lcykpCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9j
cHBfcHJvdG9jb2xfdHlwZXNfaGVhZGVyLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX3Byb3RvY29sX3R5cGVzX2hlYWRlci5w
eQppbmRleCAwMDE5MjRkZTBlYjA4MjdmNzQ1ZDNkNzM2YzBhYjkyMDIxMjRkYjM2Li43ODFkMDZk
OTQwNTY2YjE3MmVjNTVjMmVmYmQxMDFhMDA1MGQ3MWE4IDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfcHJvdG9j
b2xfdHlwZXNfaGVhZGVyLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9wcm90b2NvbF90eXBlc19oZWFkZXIucHkKQEAg
LTg1LDkgKzg1LDEwIEBAIGNsYXNzIENwcFByb3RvY29sVHlwZXNIZWFkZXJHZW5lcmF0b3IoQ3Bw
R2VuZXJhdG9yKToKICAgICBkZWYgX2dlbmVyYXRlX3NlY29uZGFyeV9oZWFkZXJfaW5jbHVkZXMo
c2VsZik6CiAgICAgICAgIGhlYWRlcl9pbmNsdWRlcyA9IFsKICAgICAgICAgICAgIChbIkphdmFT
Y3JpcHRDb3JlIiwgIldlYktpdCJdLCAoIkphdmFTY3JpcHRDb3JlIiwgImluc3BlY3Rvci9JbnNw
ZWN0b3JQcm90b2NvbFR5cGVzLmgiKSksCi0gICAgICAgICAgICAoWyJKYXZhU2NyaXB0Q29yZSIs
ICJXZWJLaXQiXSwgKCJXVEYiLCAid3RmL0Fzc2VydGlvbnMuaCIpKQorICAgICAgICAgICAgKFsi
SmF2YVNjcmlwdENvcmUiLCAiV2ViS2l0Il0sICgiV1RGIiwgInd0Zi9KU09OVmFsdWVzLmgiKSks
CisgICAgICAgICAgICAoWyJKYXZhU2NyaXB0Q29yZSIsICJXZWJLaXQiXSwgKCJXVEYiLCAid3Rm
L09wdGlvbmFsLmgiKSksCisgICAgICAgICAgICAoWyJKYXZhU2NyaXB0Q29yZSIsICJXZWJLaXQi
XSwgKCJXVEYiLCAid3RmL3RleHQvV1RGU3RyaW5nLmgiKSksCiAgICAgICAgIF0KLQogICAgICAg
ICByZXR1cm4gJ1xuJy5qb2luKHNlbGYuZ2VuZXJhdGVfaW5jbHVkZXNfZnJvbV9lbnRyaWVzKGhl
YWRlcl9pbmNsdWRlcykpCiAKICAgICBkZWYgX2dlbmVyYXRlX3ZlcnNpb25zKHNlbGYsIGRvbWFp
bnMpOgpAQCAtMjMyLDkgKzIzMyw2IEBAIGNsYXNzIENwcFByb3RvY29sVHlwZXNIZWFkZXJHZW5l
cmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJk
X2Zvcl9jb25kaXRpb24oZG9tYWluLmNvbmRpdGlvbiwgJ1xuJy5qb2luKGxpbmVzKSkKIAogICAg
IGRlZiBfZ2VuZXJhdGVfY2xhc3NfZm9yX29iamVjdF9kZWNsYXJhdGlvbihzZWxmLCB0eXBlX2Rl
Y2xhcmF0aW9uLCBkb21haW4pOgotICAgICAgICBpZiBsZW4odHlwZV9kZWNsYXJhdGlvbi50eXBl
X21lbWJlcnMpID09IDA6Ci0gICAgICAgICAgICByZXR1cm4gJycKLQogICAgICAgICBlbnVtX21l
bWJlcnMgPSBbbWVtYmVyIGZvciBtZW1iZXIgaW4gdHlwZV9kZWNsYXJhdGlvbi50eXBlX21lbWJl
cnMgaWYgaXNpbnN0YW5jZShtZW1iZXIudHlwZSwgRW51bVR5cGUpIGFuZCBtZW1iZXIudHlwZS5p
c19hbm9ueW1vdXNdCiAgICAgICAgIHJlcXVpcmVkX21lbWJlcnMgPSBbbWVtYmVyIGZvciBtZW1i
ZXIgaW4gdHlwZV9kZWNsYXJhdGlvbi50eXBlX21lbWJlcnMgaWYgbm90IG1lbWJlci5pc19vcHRp
b25hbF0KICAgICAgICAgb3B0aW9uYWxfbWVtYmVycyA9IFttZW1iZXIgZm9yIG1lbWJlciBpbiB0
eXBlX2RlY2xhcmF0aW9uLnR5cGVfbWVtYmVycyBpZiBtZW1iZXIuaXNfb3B0aW9uYWxdCkBAIC0y
NDYsMTEgKzI0NCwxMiBAQCBjbGFzcyBDcHBQcm90b2NvbFR5cGVzSGVhZGVyR2VuZXJhdG9yKENw
cEdlbmVyYXRvcik6CiAgICAgICAgIGJhc2VfY2xhc3MgPSAnSlNPTjo6T2JqZWN0JwogICAgICAg
ICBpZiBub3QgR2VuZXJhdG9yLnR5cGVfaGFzX29wZW5fZmllbGRzKHR5cGVfZGVjbGFyYXRpb24u
dHlwZSk6CiAgICAgICAgICAgICBiYXNlX2NsYXNzID0gYmFzZV9jbGFzcyArICdCYXNlJwotICAg
ICAgICBsaW5lcy5hcHBlbmQoJ2NsYXNzICVzIDogcHVibGljICVzIHsnICUgKG9iamVjdF9uYW1l
LCBiYXNlX2NsYXNzKSkKKyAgICAgICAgbGluZXMuYXBwZW5kKCdjbGFzcyAlcyBmaW5hbCA6IHB1
YmxpYyAlcyB7JyAlIChvYmplY3RfbmFtZSwgYmFzZV9jbGFzcykpCiAgICAgICAgIGxpbmVzLmFw
cGVuZCgncHVibGljOicpCiAgICAgICAgIGZvciBlbnVtX21lbWJlciBpbiBlbnVtX21lbWJlcnM6
CiAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAvLyBOYW1lZCBhZnRlciBwcm9wZXJ0eSBu
YW1lIFwnJXNcJyB3aGlsZSBnZW5lcmF0aW5nICVzLicgJSAoZW51bV9tZW1iZXIubWVtYmVyX25h
bWUsIG9iamVjdF9uYW1lKSkKICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0
ZV9zdHJ1Y3RfZm9yX2Fub255bW91c19lbnVtX21lbWJlcihlbnVtX21lbWJlcikpCisgICAgICAg
ICAgICBsaW5lcy5hcHBlbmQoJycpCiAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0
ZV9idWlsZGVyX3N0YXRlX2VudW0odHlwZV9kZWNsYXJhdGlvbikpCiAKICAgICAgICAgY29uc3Ry
dWN0b3JfZXhhbXBsZSA9IFtdCkBAIC0yNzcsNyArMjc2LDcgQEAgY2xhc3MgQ3BwUHJvdG9jb2xU
eXBlc0hlYWRlckdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAgICAgICAgb3Blbl9tZW1i
ZXJzID0gR2VuZXJhdG9yLm9wZW5fZmllbGRzKHR5cGVfZGVjbGFyYXRpb24pCiAgICAgICAgICAg
ICBmb3IgdHlwZV9tZW1iZXIgaW4gb3Blbl9tZW1iZXJzOgogICAgICAgICAgICAgICAgIGV4cG9y
dF9tYWNybyA9IHNlbGYubW9kZWwoKS5mcmFtZXdvcmsuc2V0dGluZygnZXhwb3J0X21hY3JvJywg
Tm9uZSkKLSAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAlcyBzdGF0aWMgY29uc3Qg
Y2hhciogJXM7JyAlIChleHBvcnRfbWFjcm8sIHVjZmlyc3QodHlwZV9tZW1iZXIubWVtYmVyX25h
bWUpKSkKKyAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAlcyBzdGF0aWMgY29uc3Qg
Y2hhciogJXNLZXk7JyAlIChleHBvcnRfbWFjcm8sIHR5cGVfbWVtYmVyLm1lbWJlcl9uYW1lKSkK
IAogICAgICAgICBsaW5lcy5hcHBlbmQoJ307JykKICAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93
aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24odHlwZV9kZWNsYXJhdGlvbi5jb25kaXRpb24sICdcbicu
am9pbihsaW5lcykpCkBAIC0zMjgsNDcgKzMyNyw1NiBAQCBjbGFzcyBDcHBQcm90b2NvbFR5cGVz
SGVhZGVyR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAgIHJldHVybiAnXG4nLmpvaW4o
bGluZXMpCiAKICAgICBkZWYgX2dlbmVyYXRlX2J1aWxkZXJfc2V0dGVyX2Zvcl9tZW1iZXIoc2Vs
ZiwgdHlwZV9tZW1iZXIsIGRvbWFpbik6CisgICAgICAgIG1lbWJlcl9uYW1lID0gJ2luXycgKyB0
eXBlX21lbWJlci5tZW1iZXJfbmFtZQorCisgICAgICAgIG1lbWJlcl92YWx1ZSA9IG1lbWJlcl9u
YW1lCisgICAgICAgIGlmIHR5cGVfbWVtYmVyLnR5cGUuaXNfZW51bSgpOgorICAgICAgICAgICAg
bWVtYmVyX3ZhbHVlID0gJ1Byb3RvY29sOjolczo6Z2V0RW51bUNvbnN0YW50VmFsdWUoJXMpJyAl
IChzZWxmLmhlbHBlcnNfbmFtZXNwYWNlKCksIG1lbWJlcl92YWx1ZSkKKyAgICAgICAgZWxpZiBD
cHBHZW5lcmF0b3Iuc2hvdWxkX21vdmVfYXJndW1lbnQodHlwZV9tZW1iZXIudHlwZSwgRmFsc2Up
OgorICAgICAgICAgICAgbWVtYmVyX3ZhbHVlID0gJ1dURk1vdmUoJXMpJyAlIG1lbWJlcl92YWx1
ZQorCiAgICAgICAgIHNldHRlcl9hcmdzID0gewogICAgICAgICAgICAgJ2NhbWVsTmFtZSc6IHVj
Zmlyc3QodHlwZV9tZW1iZXIubWVtYmVyX25hbWUpLAotICAgICAgICAgICAgJ2tleWVkU2V0Jzog
Q3BwR2VuZXJhdG9yLmNwcF9zZXR0ZXJfbWV0aG9kX2Zvcl90eXBlKHR5cGVfbWVtYmVyLnR5cGUp
LAotICAgICAgICAgICAgJ25hbWUnOiB0eXBlX21lbWJlci5tZW1iZXJfbmFtZSwKLSAgICAgICAg
ICAgICdwYXJhbWV0ZXJUeXBlJzogQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl90eXBlX21lbWJl
cih0eXBlX21lbWJlciksCi0gICAgICAgICAgICAnaGVscGVyc05hbWVzcGFjZSc6IHNlbGYuaGVs
cGVyc19uYW1lc3BhY2UoKSwKKyAgICAgICAgICAgICdzZXR0ZXInOiBDcHBHZW5lcmF0b3IuY3Bw
X3NldHRlcl9tZXRob2RfZm9yX3R5cGUodHlwZV9tZW1iZXIudHlwZSksCisgICAgICAgICAgICAn
bWVtYmVyVHlwZSc6IENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3JfdHlwZV9tZW1iZXJfYXJndW1l
bnQodHlwZV9tZW1iZXIudHlwZSwgdHlwZV9tZW1iZXIubWVtYmVyX25hbWUpLAorICAgICAgICAg
ICAgJ21lbWJlcktleSc6IHR5cGVfbWVtYmVyLm1lbWJlcl9uYW1lLAorICAgICAgICAgICAgJ21l
bWJlck5hbWUnOiBtZW1iZXJfbmFtZSwKKyAgICAgICAgICAgICdtZW1iZXJWYWx1ZSc6IG1lbWJl
cl92YWx1ZSwKICAgICAgICAgfQogCiAgICAgICAgIGxpbmVzID0gW10KICAgICAgICAgbGluZXMu
YXBwZW5kKCcnKQotICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgQnVpbGRlcjxTVEFURSB8
ICUoY2FtZWxOYW1lKXNTZXQ+JiBzZXQlKGNhbWVsTmFtZSlzKCUocGFyYW1ldGVyVHlwZSlzIHZh
bHVlKScgJSBzZXR0ZXJfYXJncykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIEJ1aWxk
ZXI8U1RBVEUgfCAlKGNhbWVsTmFtZSlzU2V0PiYgc2V0JShjYW1lbE5hbWUpcyglKG1lbWJlclR5
cGUpcyAlKG1lbWJlck5hbWUpcyknICUgc2V0dGVyX2FyZ3MpCiAgICAgICAgIGxpbmVzLmFwcGVu
ZCgnICAgICAgICB7JykKLSAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgICAgICBDT01QSUxF
X0FTU0VSVCghKFNUQVRFICYgJShjYW1lbE5hbWUpc1NldCksIHByb3BlcnR5XyUobmFtZSlzX2Fs
cmVhZHlfc2V0KTsnICUgc2V0dGVyX2FyZ3MpCi0KLSAgICAgICAgaWYgaXNpbnN0YW5jZSh0eXBl
X21lbWJlci50eXBlLCBFbnVtVHlwZSk6Ci0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAg
ICAgICAgIG1fcmVzdWx0LT4lKGtleWVkU2V0KXMoIiUobmFtZSlzIl9zLCBJbnNwZWN0b3I6OlBy
b3RvY29sOjolKGhlbHBlcnNOYW1lc3BhY2Upczo6Z2V0RW51bUNvbnN0YW50VmFsdWUodmFsdWUp
KTsnICUgc2V0dGVyX2FyZ3MpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBsaW5lcy5hcHBl
bmQoJyAgICAgICAgICAgIG1fcmVzdWx0LT4lKGtleWVkU2V0KXMoIiUobmFtZSlzIl9zLCB2YWx1
ZSk7JyAlIHNldHRlcl9hcmdzKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKCEoU1RBVEUgJiAlKGNhbWVsTmFtZSlzU2V0KSwgcHJvcGVydHlfJShtZW1i
ZXJLZXkpc19hbHJlYWR5X3NldCk7JyAlIHNldHRlcl9hcmdzKQorICAgICAgICBsaW5lcy5hcHBl
bmQoJyAgICAgICAgICAgIG1fcmVzdWx0LT4lKHNldHRlcilzKCIlKG1lbWJlcktleSlzIl9zLCAl
KG1lbWJlclZhbHVlKXMpOycgJSBzZXR0ZXJfYXJncykKICAgICAgICAgbGluZXMuYXBwZW5kKCcg
ICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPCUoY2FtZWxOYW1lKXNTZXQ+KCk7JyAlIHNldHRl
cl9hcmdzKQogICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgfScpCiAgICAgICAgIHJldHVy
biAnXG4nLmpvaW4obGluZXMpCiAKICAgICBkZWYgX2dlbmVyYXRlX3VuY2hlY2tlZF9zZXR0ZXJf
Zm9yX21lbWJlcihzZWxmLCB0eXBlX21lbWJlciwgZG9tYWluKToKKyAgICAgICAgbWVtYmVyX25h
bWUgPSAnaW5fb3B0XycgKyB0eXBlX21lbWJlci5tZW1iZXJfbmFtZQorCisgICAgICAgIG1lbWJl
cl92YWx1ZSA9IG1lbWJlcl9uYW1lCisgICAgICAgIGlmIHR5cGVfbWVtYmVyLnR5cGUuaXNfZW51
bSgpOgorICAgICAgICAgICAgbWVtYmVyX3ZhbHVlID0gJ1Byb3RvY29sOjolczo6Z2V0RW51bUNv
bnN0YW50VmFsdWUoJXMpJyAlIChzZWxmLmhlbHBlcnNfbmFtZXNwYWNlKCksIG1lbWJlcl92YWx1
ZSkKKyAgICAgICAgZWxpZiBDcHBHZW5lcmF0b3Iuc2hvdWxkX21vdmVfYXJndW1lbnQodHlwZV9t
ZW1iZXIudHlwZSwgRmFsc2UpOgorICAgICAgICAgICAgbWVtYmVyX3ZhbHVlID0gJ1dURk1vdmUo
JXMpJyAlIG1lbWJlcl92YWx1ZQorCiAgICAgICAgIHNldHRlcl9hcmdzID0gewogICAgICAgICAg
ICAgJ2NhbWVsTmFtZSc6IHVjZmlyc3QodHlwZV9tZW1iZXIubWVtYmVyX25hbWUpLAotICAgICAg
ICAgICAgJ2tleWVkU2V0JzogQ3BwR2VuZXJhdG9yLmNwcF9zZXR0ZXJfbWV0aG9kX2Zvcl90eXBl
KHR5cGVfbWVtYmVyLnR5cGUpLAotICAgICAgICAgICAgJ25hbWUnOiB0eXBlX21lbWJlci5tZW1i
ZXJfbmFtZSwKLSAgICAgICAgICAgICdwYXJhbWV0ZXJUeXBlJzogQ3BwR2VuZXJhdG9yLmNwcF90
eXBlX2Zvcl90eXBlX21lbWJlcih0eXBlX21lbWJlciksCi0gICAgICAgICAgICAnaGVscGVyc05h
bWVzcGFjZSc6IHNlbGYuaGVscGVyc19uYW1lc3BhY2UoKSwKKyAgICAgICAgICAgICdzZXR0ZXIn
OiBDcHBHZW5lcmF0b3IuY3BwX3NldHRlcl9tZXRob2RfZm9yX3R5cGUodHlwZV9tZW1iZXIudHlw
ZSksCisgICAgICAgICAgICAnbWVtYmVyS2V5JzogdHlwZV9tZW1iZXIubWVtYmVyX25hbWUsCisg
ICAgICAgICAgICAnbWVtYmVyTmFtZSc6IG1lbWJlcl9uYW1lLAorICAgICAgICAgICAgJ21lbWJl
clZhbHVlJzogbWVtYmVyX3ZhbHVlLAorICAgICAgICAgICAgJ21lbWJlclR5cGUnOiBDcHBHZW5l
cmF0b3IuY3BwX3R5cGVfZm9yX3R5cGVfbWVtYmVyX2FyZ3VtZW50KHR5cGVfbWVtYmVyLnR5cGUs
IHR5cGVfbWVtYmVyLm1lbWJlcl9uYW1lKSwKICAgICAgICAgfQogCiAgICAgICAgIGxpbmVzID0g
W10KICAgICAgICAgbGluZXMuYXBwZW5kKCcnKQotICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICB2
b2lkIHNldCUoY2FtZWxOYW1lKXMoJShwYXJhbWV0ZXJUeXBlKXMgdmFsdWUpJyAlIHNldHRlcl9h
cmdzKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICB2b2lkIHNldCUoY2FtZWxOYW1lKXMoJSht
ZW1iZXJUeXBlKXMgJShtZW1iZXJOYW1lKXMpJyAlIHNldHRlcl9hcmdzKQogICAgICAgICBsaW5l
cy5hcHBlbmQoJyAgICB7JykKLSAgICAgICAgaWYgaXNpbnN0YW5jZSh0eXBlX21lbWJlci50eXBl
LCBFbnVtVHlwZSk6Ci0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgSlNPTjo6T2Jq
ZWN0QmFzZTo6JShrZXllZFNldClzKCIlKG5hbWUpcyJfcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6
JShoZWxwZXJzTmFtZXNwYWNlKXM6OmdldEVudW1Db25zdGFudFZhbHVlKHZhbHVlKSk7JyAlIHNl
dHRlcl9hcmdzKQotICAgICAgICBlbGlmIENwcEdlbmVyYXRvci5zaG91bGRfdXNlX3JlZmVyZW5j
ZXNfZm9yX3R5cGUodHlwZV9tZW1iZXIudHlwZSk6Ci0gICAgICAgICAgICBsaW5lcy5hcHBlbmQo
JyAgICAgICAgSlNPTjo6T2JqZWN0QmFzZTo6JShrZXllZFNldClzKCIlKG5hbWUpcyJfcywgV1RG
TW92ZSh2YWx1ZSkpOycgJSBzZXR0ZXJfYXJncykKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAg
IGxpbmVzLmFwcGVuZCgnICAgICAgICBKU09OOjpPYmplY3RCYXNlOjolKGtleWVkU2V0KXMoIiUo
bmFtZSlzIl9zLCB2YWx1ZSk7JyAlIHNldHRlcl9hcmdzKQorICAgICAgICBsaW5lcy5hcHBlbmQo
JyAgICAgICAgSlNPTjo6T2JqZWN0QmFzZTo6JShzZXR0ZXIpcygiJShtZW1iZXJLZXkpcyJfcywg
JShtZW1iZXJWYWx1ZSlzKTsnICUgc2V0dGVyX2FyZ3MpCiAgICAgICAgIGxpbmVzLmFwcGVuZCgn
ICAgIH0nKQogICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQogCkBAIC0zODEsMTMgKzM4
OSwxMyBAQCBjbGFzcyBDcHBQcm90b2NvbFR5cGVzSGVhZGVyR2VuZXJhdG9yKENwcEdlbmVyYXRv
cik6CiAgICAgICAgICAgICBkZWNsYXJhdGlvbnNfdG9fZ2VuZXJhdGUgPSBbZGVjbCBmb3IgZGVj
bCBpbiB0eXBlX2RlY2xhcmF0aW9ucyBpZiBzZWxmLnR5cGVfbmVlZHNfc2hhcGVfYXNzZXJ0aW9u
cyhkZWNsLnR5cGUpXQogCiAgICAgICAgICAgICBmb3IgdHlwZV9kZWNsYXJhdGlvbiBpbiBkZWNs
YXJhdGlvbnNfdG9fZ2VuZXJhdGU6Ci0gICAgICAgICAgICAgICAgZm9yIHR5cGVfbWVtYmVyIGlu
IHR5cGVfZGVjbGFyYXRpb24udHlwZV9tZW1iZXJzOgotICAgICAgICAgICAgICAgICAgICBpZiBp
c2luc3RhbmNlKHR5cGVfbWVtYmVyLnR5cGUsIEVudW1UeXBlKToKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHR5cGVfYXJndW1lbnRzLmFwcGVuZCgoc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2Nv
bmRpdGlvbih0eXBlX2RlY2xhcmF0aW9uLmNvbmRpdGlvbiwgQ3BwR2VuZXJhdG9yLmNwcF9wcm90
b2NvbF90eXBlX2Zvcl90eXBlX21lbWJlcih0eXBlX21lbWJlciwgdHlwZV9kZWNsYXJhdGlvbikp
LCBGYWxzZSkpCi0KICAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHR5cGVfZGVjbGFyYXRp
b24udHlwZSwgT2JqZWN0VHlwZSk6CiAgICAgICAgICAgICAgICAgICAgIHR5cGVfYXJndW1lbnRz
LmFwcGVuZCgoc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbih0eXBlX2RlY2xhcmF0
aW9uLmNvbmRpdGlvbiwgQ3BwR2VuZXJhdG9yLmNwcF9wcm90b2NvbF90eXBlX2Zvcl90eXBlKHR5
cGVfZGVjbGFyYXRpb24udHlwZSkpLCBHZW5lcmF0b3IudHlwZV9uZWVkc19ydW50aW1lX2Nhc3Rz
KHR5cGVfZGVjbGFyYXRpb24udHlwZSkpKQogCisgICAgICAgICAgICAgICAgZm9yIHR5cGVfbWVt
YmVyIGluIHR5cGVfZGVjbGFyYXRpb24udHlwZV9tZW1iZXJzOgorICAgICAgICAgICAgICAgICAg
ICBpZiBpc2luc3RhbmNlKHR5cGVfbWVtYmVyLnR5cGUsIEVudW1UeXBlKToKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHR5cGVfYXJndW1lbnRzLmFwcGVuZCgoc2VsZi53cmFwX3dpdGhfZ3VhcmRf
Zm9yX2NvbmRpdGlvbih0eXBlX2RlY2xhcmF0aW9uLmNvbmRpdGlvbiwgQ3BwR2VuZXJhdG9yLmNw
cF90eXBlX2Zvcl9lbnVtKHR5cGVfbWVtYmVyLnR5cGUsICclczo6JXMnICUgKHR5cGVfZGVjbGFy
YXRpb24udHlwZV9uYW1lLCB1Y2ZpcnN0KHR5cGVfbWVtYmVyLm1lbWJlcl9uYW1lKSkpKSwgRmFs
c2UpKQorCiAgICAgICAgIHN0cnVjdF9rZXl3b3JkcyA9IFsnc3RydWN0J10KICAgICAgICAgZnVu
Y3Rpb25fa2V5d29yZHMgPSBbJ3N0YXRpYyB2b2lkJ10KICAgICAgICAgZXhwb3J0X21hY3JvID0g
c2VsZi5tb2RlbCgpLmZyYW1ld29yay5zZXR0aW5nKCdleHBvcnRfbWFjcm8nLCBOb25lKQpAQCAt
Mzk5LDcgKzQwNyw3IEBAIGNsYXNzIENwcFByb3RvY29sVHlwZXNIZWFkZXJHZW5lcmF0b3IoQ3Bw
R2VuZXJhdG9yKToKICAgICAgICAgZm9yIGFyZ3VtZW50IGluIHR5cGVfYXJndW1lbnRzOgogICAg
ICAgICAgICAgbGluZXMuYXBwZW5kKCd0ZW1wbGF0ZTw+ICVzIEJpbmRpbmdUcmFpdHM8JXM+IHsn
ICUgKCcgJy5qb2luKHN0cnVjdF9rZXl3b3JkcyksIGFyZ3VtZW50WzBdKSkKICAgICAgICAgICAg
IGlmIGFyZ3VtZW50WzFdOgotICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnc3RhdGljIFJl
ZlB0cjwlcz4gcnVudGltZUNhc3QoUmVmUHRyPEpTT046OlZhbHVlPiYmIHZhbHVlKTsnICUgYXJn
dW1lbnRbMF0pCisgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCdzdGF0aWMgUmVmPCVzPiBy
dW50aW1lQ2FzdChSZWY8SlNPTjo6VmFsdWU+JiYgdmFsdWUpOycgJSBhcmd1bWVudFswXSkKICAg
ICAgICAgICAgIGxpbmVzLmFwcGVuZCgnJXMgYXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoSlNP
Tjo6VmFsdWUqKTsnICUgJyAnLmpvaW4oZnVuY3Rpb25fa2V5d29yZHMpKQogICAgICAgICAgICAg
bGluZXMuYXBwZW5kKCd9OycpCiAgICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCkBAIC00
MzgsMTMgKzQ0NiwxMyBAQCBjbGFzcyBDcHBQcm90b2NvbFR5cGVzSGVhZGVyR2VuZXJhdG9yKENw
cEdlbmVyYXRvcik6CiAgICAgICAgICAgICBkb21haW5fbGluZXMgPSBbXQogICAgICAgICAgICAg
ZG9tYWluX2xpbmVzLmFwcGVuZCgiLy8gRW51bXMgaW4gdGhlICclcycgRG9tYWluIiAlIGRvbWFp
bi5kb21haW5fbmFtZSkKICAgICAgICAgICAgIGZvciBlbnVtX3R5cGUgaW4gZW51bV90eXBlczoK
LSAgICAgICAgICAgICAgICBjcHBfcHJvdG9jb2xfdHlwZSA9IENwcEdlbmVyYXRvci5jcHBfcHJv
dG9jb2xfdHlwZV9mb3JfdHlwZShlbnVtX3R5cGUpCisgICAgICAgICAgICAgICAgY3BwX3Byb3Rv
Y29sX3R5cGUgPSBDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX2VudW0oZW51bV90eXBlLCBlbnVt
X3R5cGUucmF3X25hbWUoKSkKICAgICAgICAgICAgICAgICBkb21haW5fbGluZXMuYXBwZW5kKHNl
bGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZW51bV90eXBlLmRlY2xhcmF0aW9uKCku
Y29uZGl0aW9uLCAndGVtcGxhdGU8PlxuJXMgcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPCVzPihj
b25zdCBTdHJpbmcmKTsnICUgKHJldHVybl90eXBlX3dpdGhfZXhwb3J0X21hY3JvKGNwcF9wcm90
b2NvbF90eXBlKSwgY3BwX3Byb3RvY29sX3R5cGUpKSkKIAogICAgICAgICAgICAgZm9yIG9iamVj
dF90eXBlIGluIG9iamVjdF90eXBlczoKICAgICAgICAgICAgICAgICBvYmplY3RfbGluZXMgPSBb
XQogICAgICAgICAgICAgICAgIGZvciBlbnVtX21lbWJlciBpbiBmaWx0ZXIodHlwZV9tZW1iZXJf
aXNfYW5vbnltb3VzX2VudW1fdHlwZSwgb2JqZWN0X3R5cGUubWVtYmVycyk6Ci0gICAgICAgICAg
ICAgICAgICAgIGNwcF9wcm90b2NvbF90eXBlID0gQ3BwR2VuZXJhdG9yLmNwcF9wcm90b2NvbF90
eXBlX2Zvcl90eXBlX21lbWJlcihlbnVtX21lbWJlciwgb2JqZWN0X3R5cGUuZGVjbGFyYXRpb24o
KSkKKyAgICAgICAgICAgICAgICAgICAgY3BwX3Byb3RvY29sX3R5cGUgPSBDcHBHZW5lcmF0b3Iu
Y3BwX3R5cGVfZm9yX2VudW0oZW51bV9tZW1iZXIudHlwZSwgJyVzOjolcycgJSAob2JqZWN0X3R5
cGUucmF3X25hbWUoKSwgdWNmaXJzdChlbnVtX21lbWJlci5tZW1iZXJfbmFtZSkpKQogICAgICAg
ICAgICAgICAgICAgICBvYmplY3RfbGluZXMuYXBwZW5kKCd0ZW1wbGF0ZTw+XG4lcyBwYXJzZUVu
dW1WYWx1ZUZyb21TdHJpbmc8JXM+KGNvbnN0IFN0cmluZyYpOycgJSAocmV0dXJuX3R5cGVfd2l0
aF9leHBvcnRfbWFjcm8oY3BwX3Byb3RvY29sX3R5cGUpLCBjcHBfcHJvdG9jb2xfdHlwZSkpCiAg
ICAgICAgICAgICAgICAgaWYgbGVuKG9iamVjdF9saW5lcyk6CiAgICAgICAgICAgICAgICAgICAg
IGRvbWFpbl9saW5lcy5hcHBlbmQoc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihv
YmplY3RfdHlwZS5kZWNsYXJhdGlvbigpLmNvbmRpdGlvbiwgJ1xuJy5qb2luKG9iamVjdF9saW5l
cykpKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2NvZGVnZW4vZ2VuZXJhdGVfY3BwX3Byb3RvY29sX3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5IGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVf
Y3BwX3Byb3RvY29sX3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5CmluZGV4IDVkZDUzNDY5NDQ4NTUx
NTQ4ZDY3YWEwYjQ1NmM2YTFhNjY1OGQ1OTMuLjEzZTU4OTcyNmQ0Y2RiN2E0NTJjNjcwYzgzMjVl
YjFhMzllZTYyMjIgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9wcm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlv
bi5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdl
bi9nZW5lcmF0ZV9jcHBfcHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50YXRpb24ucHkKQEAgLTgyLDEw
ICs4Miw4IEBAIGNsYXNzIENwcFByb3RvY29sVHlwZXNJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihD
cHBHZW5lcmF0b3IpOgogCiAgICAgZGVmIF9nZW5lcmF0ZV9zZWNvbmRhcnlfaGVhZGVyX2luY2x1
ZGVzKHNlbGYpOgogICAgICAgICBoZWFkZXJfaW5jbHVkZXMgPSBbCi0gICAgICAgICAgICAoWyJK
YXZhU2NyaXB0Q29yZSIsICJXZWJLaXQiXSwgKCJXVEYiLCAid3RmL09wdGlvbmFsLmgiKSksCi0g
ICAgICAgICAgICAoWyJKYXZhU2NyaXB0Q29yZSIsICJXZWJLaXQiXSwgKCJXVEYiLCAid3RmL3Rl
eHQvQ1N0cmluZy5oIikpLAorICAgICAgICAgICAgKFsiSmF2YVNjcmlwdENvcmUiLCAiV2ViS2l0
Il0sICgiV1RGIiwgInd0Zi9Bc3NlcnRpb25zLmgiKSksCiAgICAgICAgIF0KLQogICAgICAgICBy
ZXR1cm4gJ1xuJy5qb2luKHNlbGYuZ2VuZXJhdGVfaW5jbHVkZXNfZnJvbV9lbnRyaWVzKGhlYWRl
cl9pbmNsdWRlcykpCiAKICAgICBkZWYgX2dlbmVyYXRlX2VudW1fbWFwcGluZyhzZWxmKToKQEAg
LTE0NCwxNCArMTQyLDE0IEBAIGNsYXNzIENwcFByb3RvY29sVHlwZXNJbXBsZW1lbnRhdGlvbkdl
bmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAgICBsaW5lcyA9IFtdCiAgICAgICAgIGxpbmVz
LmFwcGVuZCgiLy8gRW51bXMgaW4gdGhlICclcycgRG9tYWluIiAlIGRvbWFpbi5kb21haW5fbmFt
ZSkKICAgICAgICAgZm9yIGVudW1fdHlwZSBpbiBlbnVtX3R5cGVzOgotICAgICAgICAgICAgY3Bw
X3Byb3RvY29sX3R5cGUgPSBDcHBHZW5lcmF0b3IuY3BwX3Byb3RvY29sX3R5cGVfZm9yX3R5cGUo
ZW51bV90eXBlKQorICAgICAgICAgICAgY3BwX3Byb3RvY29sX3R5cGUgPSBDcHBHZW5lcmF0b3Iu
Y3BwX3R5cGVfZm9yX2VudW0oZW51bV90eXBlLCBlbnVtX3R5cGUucmF3X25hbWUoKSkKICAgICAg
ICAgICAgIGxpbmVzLmFwcGVuZCgnJykKICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLndy
YXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGVudW1fdHlwZS5kZWNsYXJhdGlvbigpLmNvbmRp
dGlvbiwgZ2VuZXJhdGVfY29udmVyc2lvbl9tZXRob2RfYm9keShlbnVtX3R5cGUsIGNwcF9wcm90
b2NvbF90eXBlKSkpCiAKICAgICAgICAgZm9yIG9iamVjdF90eXBlIGluIG9iamVjdF90eXBlczoK
ICAgICAgICAgICAgIG9iamVjdF9saW5lcyA9IFtdCiAgICAgICAgICAgICBmb3IgZW51bV9tZW1i
ZXIgaW4gZmlsdGVyKHR5cGVfbWVtYmVyX2lzX2Fub255bW91c19lbnVtX3R5cGUsIG9iamVjdF90
eXBlLm1lbWJlcnMpOgotICAgICAgICAgICAgICAgIGNwcF9wcm90b2NvbF90eXBlID0gQ3BwR2Vu
ZXJhdG9yLmNwcF9wcm90b2NvbF90eXBlX2Zvcl90eXBlX21lbWJlcihlbnVtX21lbWJlciwgb2Jq
ZWN0X3R5cGUuZGVjbGFyYXRpb24oKSkKKyAgICAgICAgICAgICAgICBjcHBfcHJvdG9jb2xfdHlw
ZSA9IENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3JfZW51bShlbnVtX21lbWJlci50eXBlLCAnJXM6
OiVzJyAlIChvYmplY3RfdHlwZS5yYXdfbmFtZSgpLCB1Y2ZpcnN0KGVudW1fbWVtYmVyLm1lbWJl
cl9uYW1lKSkpCiAgICAgICAgICAgICAgICAgb2JqZWN0X2xpbmVzLmFwcGVuZChnZW5lcmF0ZV9j
b252ZXJzaW9uX21ldGhvZF9ib2R5KGVudW1fbWVtYmVyLnR5cGUsIGNwcF9wcm90b2NvbF90eXBl
KSkKICAgICAgICAgICAgIGlmIGxlbihvYmplY3RfbGluZXMpOgogICAgICAgICAgICAgICAgIGlm
IGxlbihsaW5lcyk6CkBAIC0xODMsOCArMTgxLDcgQEAgY2xhc3MgQ3BwUHJvdG9jb2xUeXBlc0lt
cGxlbWVudGF0aW9uR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAgICAgICBmb3IgdHlw
ZV9kZWNsYXJhdGlvbiBpbiBbZGVjbCBmb3IgZGVjbCBpbiB0eXBlX2RlY2xhcmF0aW9ucyBpZiBH
ZW5lcmF0b3IudHlwZV9oYXNfb3Blbl9maWVsZHMoZGVjbC50eXBlKV06CiAgICAgICAgICAgICAg
ICAgb3Blbl9tZW1iZXJzID0gR2VuZXJhdG9yLm9wZW5fZmllbGRzKHR5cGVfZGVjbGFyYXRpb24p
CiAgICAgICAgICAgICAgICAgZm9yIHR5cGVfbWVtYmVyIGluIHNvcnRlZChvcGVuX21lbWJlcnMs
IGtleT1sYW1iZGEgbWVtYmVyOiBtZW1iZXIubWVtYmVyX25hbWUpOgotICAgICAgICAgICAgICAg
ICAgICBmaWVsZF9uYW1lID0gJzo6Jy5qb2luKFsnSW5zcGVjdG9yJywgJ1Byb3RvY29sJywgZG9t
YWluLmRvbWFpbl9uYW1lLCB1Y2ZpcnN0KHR5cGVfZGVjbGFyYXRpb24udHlwZV9uYW1lKSwgdWNm
aXJzdCh0eXBlX21lbWJlci5tZW1iZXJfbmFtZSldKQotICAgICAgICAgICAgICAgICAgICBkb21h
aW5fbGluZXMuYXBwZW5kKCdjb25zdCBjaGFyKiAlcyA9ICIlcyI7JyAlIChmaWVsZF9uYW1lLCB0
eXBlX21lbWJlci5tZW1iZXJfbmFtZSkpCisgICAgICAgICAgICAgICAgICAgIGRvbWFpbl9saW5l
cy5hcHBlbmQoJ2NvbnN0IGNoYXIqIFByb3RvY29sOjolczo6JXM6OiVzS2V5ID0gIiVzIjsnICUg
KGRvbWFpbi5kb21haW5fbmFtZSwgdWNmaXJzdCh0eXBlX2RlY2xhcmF0aW9uLnR5cGVfbmFtZSks
IHR5cGVfbWVtYmVyLm1lbWJlcl9uYW1lLCB0eXBlX21lbWJlci5tZW1iZXJfbmFtZSkpCiAgICAg
ICAgICAgICBpZiBsZW4oZG9tYWluX2xpbmVzKToKICAgICAgICAgICAgICAgICBsaW5lcy5hcHBl
bmQoc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihkb21haW4uY29uZGl0aW9uLCAn
XG4nLmpvaW4oZG9tYWluX2xpbmVzKSkpCiAKQEAgLTIyNywzNyArMjI0LDU0IEBAIGNsYXNzIENw
cFByb3RvY29sVHlwZXNJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogCiAg
ICAgICAgIGxpbmVzLmFwcGVuZCgndm9pZCBCaW5kaW5nVHJhaXRzPCVzPjo6YXNzZXJ0VmFsdWVI
YXNFeHBlY3RlZFR5cGUoSlNPTjo6VmFsdWUqIHZhbHVlKScgJSAoQ3BwR2VuZXJhdG9yLmNwcF9w
cm90b2NvbF90eXBlX2Zvcl90eXBlKG9iamVjdF9kZWNsYXJhdGlvbi50eXBlKSkpCiAgICAgICAg
IGxpbmVzLmFwcGVuZCgiIiJ7CisgICAgQVNTRVJUX1VOVVNFRCh2YWx1ZSwgdmFsdWUpOwogI2lm
IEFTU0VSVF9FTkFCTEVECi0gICAgQVNTRVJUX0FSRyh2YWx1ZSwgdmFsdWUpOwotICAgIFJlZlB0
cjxKU09OOjpPYmplY3Q+IG9iamVjdDsKLSAgICBib29sIGNhc3RTdWNjZWVkZWQgPSB2YWx1ZS0+
YXNPYmplY3Qob2JqZWN0KTsKLSAgICBBU1NFUlRfVU5VU0VEKGNhc3RTdWNjZWVkZWQsIGNhc3RT
dWNjZWVkZWQpOyIiIikKKyAgICBhdXRvIG9iamVjdCA9IHZhbHVlLT5hc09iamVjdCgpOworICAg
IEFTU0VSVChvYmplY3QpOyIiIikKICAgICAgICAgZm9yIHR5cGVfbWVtYmVyIGluIHJlcXVpcmVk
X21lbWJlcnM6CisgICAgICAgICAgICBtZW1iZXJfdHlwZSA9IHR5cGVfbWVtYmVyLnR5cGUKKyAg
ICAgICAgICAgIGlmIGlzaW5zdGFuY2UobWVtYmVyX3R5cGUsIEFsaWFzZWRUeXBlKToKKyAgICAg
ICAgICAgICAgICBtZW1iZXJfdHlwZSA9IG1lbWJlcl90eXBlLmFsaWFzZWRfdHlwZQorCisgICAg
ICAgICAgICBpZiBpc2luc3RhbmNlKG1lbWJlcl90eXBlLCBFbnVtVHlwZSk6CisgICAgICAgICAg
ICAgICAgbWVtYmVyX3R5cGUgPSBDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX2VudW0obWVtYmVy
X3R5cGUsICclczo6JXMnICUgKG9iamVjdF9kZWNsYXJhdGlvbi50eXBlX25hbWUsIHVjZmlyc3Qo
dHlwZV9tZW1iZXIubWVtYmVyX25hbWUpKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAg
ICAgICAgbWVtYmVyX3R5cGUgPSBDcHBHZW5lcmF0b3IuY3BwX3Byb3RvY29sX3R5cGVfZm9yX3R5
cGUobWVtYmVyX3R5cGUpCisKICAgICAgICAgICAgIGFyZ3MgPSB7CiAgICAgICAgICAgICAgICAg
J21lbWJlck5hbWUnOiB0eXBlX21lbWJlci5tZW1iZXJfbmFtZSwKLSAgICAgICAgICAgICAgICAn
YXNzZXJ0TWV0aG9kJzogQ3BwR2VuZXJhdG9yLmNwcF9hc3NlcnRpb25fbWV0aG9kX2Zvcl90eXBl
X21lbWJlcih0eXBlX21lbWJlciwgb2JqZWN0X2RlY2xhcmF0aW9uKQorICAgICAgICAgICAgICAg
ICdtZW1iZXJUeXBlJzogbWVtYmVyX3R5cGUKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAg
bGluZXMuYXBwZW5kKCIiIiAgICB7CiAgICAgICAgIGF1dG8gJShtZW1iZXJOYW1lKXNQb3MgPSBv
YmplY3QtPmZpbmQoIiUobWVtYmVyTmFtZSlzIl9zKTsKICAgICAgICAgQVNTRVJUKCUobWVtYmVy
TmFtZSlzUG9zICE9IG9iamVjdC0+ZW5kKCkpOwotICAgICAgICAlKGFzc2VydE1ldGhvZClzKCUo
bWVtYmVyTmFtZSlzUG9zLT52YWx1ZS5nZXQoKSk7CisgICAgICAgIEJpbmRpbmdUcmFpdHM8JSht
ZW1iZXJUeXBlKXM+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZSglKG1lbWJlck5hbWUpc1Bv
cy0+dmFsdWUucHRyKCkpOwogICAgIH0iIiIgJSBhcmdzKQogCiAgICAgICAgIGlmIHNob3VsZF9j
b3VudF9wcm9wZXJ0aWVzOgogICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcnKQotICAgICAgICAg
ICAgbGluZXMuYXBwZW5kKCcgICAgaW50IGZvdW5kUHJvcGVydGllc0NvdW50ID0gJXM7JyAlIGxl
bihyZXF1aXJlZF9tZW1iZXJzKSkKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIHNpemVf
dCBmb3VuZFByb3BlcnRpZXNDb3VudCA9ICVzOycgJSBsZW4ocmVxdWlyZWRfbWVtYmVycykpCiAK
ICAgICAgICAgZm9yIHR5cGVfbWVtYmVyIGluIG9wdGlvbmFsX21lbWJlcnM6CisgICAgICAgICAg
ICBtZW1iZXJfdHlwZSA9IHR5cGVfbWVtYmVyLnR5cGUKKyAgICAgICAgICAgIGlmIGlzaW5zdGFu
Y2UobWVtYmVyX3R5cGUsIEFsaWFzZWRUeXBlKToKKyAgICAgICAgICAgICAgICBtZW1iZXJfdHlw
ZSA9IG1lbWJlcl90eXBlLmFsaWFzZWRfdHlwZQorCisgICAgICAgICAgICBpZiBpc2luc3RhbmNl
KG1lbWJlcl90eXBlLCBFbnVtVHlwZSk6CisgICAgICAgICAgICAgICAgbWVtYmVyX3R5cGUgPSBD
cHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX2VudW0obWVtYmVyX3R5cGUsICclczo6JXMnICUgKG9i
amVjdF9kZWNsYXJhdGlvbi50eXBlX25hbWUsIHVjZmlyc3QodHlwZV9tZW1iZXIubWVtYmVyX25h
bWUpKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbWVtYmVyX3R5cGUgPSBD
cHBHZW5lcmF0b3IuY3BwX3Byb3RvY29sX3R5cGVfZm9yX3R5cGUobWVtYmVyX3R5cGUpCisKICAg
ICAgICAgICAgIGFyZ3MgPSB7CiAgICAgICAgICAgICAgICAgJ21lbWJlck5hbWUnOiB0eXBlX21l
bWJlci5tZW1iZXJfbmFtZSwKLSAgICAgICAgICAgICAgICAnYXNzZXJ0TWV0aG9kJzogQ3BwR2Vu
ZXJhdG9yLmNwcF9hc3NlcnRpb25fbWV0aG9kX2Zvcl90eXBlX21lbWJlcih0eXBlX21lbWJlciwg
b2JqZWN0X2RlY2xhcmF0aW9uKQorICAgICAgICAgICAgICAgICdtZW1iZXJUeXBlJzogbWVtYmVy
X3R5cGUKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgbGluZXMuYXBwZW5kKCIiIiAgICB7
CiAgICAgICAgIGF1dG8gJShtZW1iZXJOYW1lKXNQb3MgPSBvYmplY3QtPmZpbmQoIiUobWVtYmVy
TmFtZSlzIl9zKTsKICAgICAgICAgaWYgKCUobWVtYmVyTmFtZSlzUG9zICE9IG9iamVjdC0+ZW5k
KCkpIHsKLSAgICAgICAgICAgICUoYXNzZXJ0TWV0aG9kKXMoJShtZW1iZXJOYW1lKXNQb3MtPnZh
bHVlLmdldCgpKTsiIiIgJSBhcmdzKQorICAgICAgICAgICAgQmluZGluZ1RyYWl0czwlKG1lbWJl
clR5cGUpcz46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKCUobWVtYmVyTmFtZSlzUG9zLT52
YWx1ZS5wdHIoKSk7IiIiICUgYXJncykKIAogICAgICAgICAgICAgaWYgc2hvdWxkX2NvdW50X3By
b3BlcnRpZXM6CiAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgICAgICArK2Zv
dW5kUHJvcGVydGllc0NvdW50OycpCkBAIC0yNjcsMjcgKzI4MSwyMiBAQCBjbGFzcyBDcHBQcm90
b2NvbFR5cGVzSW1wbGVtZW50YXRpb25HZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAgICAg
aWYgc2hvdWxkX2NvdW50X3Byb3BlcnRpZXM6CiAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAg
ICBpZiAoZm91bmRQcm9wZXJ0aWVzQ291bnQgIT0gb2JqZWN0LT5zaXplKCkpJykKICAgICAgICAg
ICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBGQVRBTCgiVW5leHBlY3RlZCBwcm9wZXJ0aWVzIGlu
IG9iamVjdDogJXNcXG4iLCBvYmplY3QtPnRvSlNPTlN0cmluZygpLmFzY2lpKCkuZGF0YSgpKTsn
KQotICAgICAgICBsaW5lcy5hcHBlbmQoJyNlbHNlIC8vIEFTU0VSVF9FTkFCTEVEJykKLSAgICAg
ICAgbGluZXMuYXBwZW5kKCcgICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsnKQotICAgICAgICBsaW5l
cy5hcHBlbmQoJyNlbmRpZiAvLyBBU1NFUlRfRU5BQkxFRCcpCisgICAgICAgIGxpbmVzLmFwcGVu
ZCgnI2VuZGlmJykKICAgICAgICAgbGluZXMuYXBwZW5kKCd9JykKICAgICAgICAgcmV0dXJuICdc
bicuam9pbihsaW5lcykKIAogICAgIGRlZiBfZ2VuZXJhdGVfYXNzZXJ0aW9uX2Zvcl9lbnVtKHNl
bGYsIGVudW1fbWVtYmVyLCBvYmplY3RfZGVjbGFyYXRpb24pOgogICAgICAgICBsaW5lcyA9IFtd
Ci0gICAgICAgIGxpbmVzLmFwcGVuZCgndm9pZCAlcyhKU09OOjpWYWx1ZSogdmFsdWUpJyAlIENw
cEdlbmVyYXRvci5jcHBfYXNzZXJ0aW9uX21ldGhvZF9mb3JfdHlwZV9tZW1iZXIoZW51bV9tZW1i
ZXIsIG9iamVjdF9kZWNsYXJhdGlvbikpCisgICAgICAgIGxpbmVzLmFwcGVuZCgndm9pZCBCaW5k
aW5nVHJhaXRzPCVzPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoSlNPTjo6VmFsdWUqIHZh
bHVlKScgJSBDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX2VudW0oZW51bV9tZW1iZXIudHlwZSwg
JyVzOjolcycgJSAob2JqZWN0X2RlY2xhcmF0aW9uLnR5cGVfbmFtZSwgdWNmaXJzdChlbnVtX21l
bWJlci5tZW1iZXJfbmFtZSkpKSkKICAgICAgICAgbGluZXMuYXBwZW5kKCd7JykKKyAgICAgICAg
bGluZXMuYXBwZW5kKCcgICAgQVNTRVJUX1VOVVNFRCh2YWx1ZSwgdmFsdWUpOycpCiAgICAgICAg
IGxpbmVzLmFwcGVuZCgnI2lmIEFTU0VSVF9FTkFCTEVEJykKLSAgICAgICAgbGluZXMuYXBwZW5k
KCcgICAgQVNTRVJUX0FSRyh2YWx1ZSwgdmFsdWUpOycpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgn
ICAgIFN0cmluZyByZXN1bHQ7JykKLSAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgYm9vbCBjYXN0
U3VjY2VlZGVkID0gdmFsdWUtPmFzU3RyaW5nKHJlc3VsdCk7JykKLSAgICAgICAgbGluZXMuYXBw
ZW5kKCcgICAgQVNTRVJUKGNhc3RTdWNjZWVkZWQpOycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgn
ICAgIGF1dG8gcmVzdWx0ID0gdmFsdWUtPmFzU3RyaW5nKCk7JykKKyAgICAgICAgbGluZXMuYXBw
ZW5kKCcgICAgQVNTRVJUKHJlc3VsdCk7JykKIAogICAgICAgICBhc3NlcnRfY29uZGl0aW9uID0g
JyB8fCAnLmpvaW4oWydyZXN1bHQgPT0gIiVzIicgJSBlbnVtX3ZhbHVlIGZvciBlbnVtX3ZhbHVl
IGluIGVudW1fbWVtYmVyLnR5cGUuZW51bV92YWx1ZXMoKV0pCiAgICAgICAgIGxpbmVzLmFwcGVu
ZCgnICAgIEFTU0VSVCglcyk7JyAlIGFzc2VydF9jb25kaXRpb24pCi0gICAgICAgIGxpbmVzLmFw
cGVuZCgnI2Vsc2UgLy8gQVNTRVJUX0VOQUJMRUQnKQotICAgICAgICBsaW5lcy5hcHBlbmQoJyAg
ICBVTlVTRURfUEFSQU0odmFsdWUpOycpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnI2VuZGlmIC8v
IEFTU0VSVF9FTkFCTEVEJykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcjZW5kaWYnKQogICAgICAg
ICBsaW5lcy5hcHBlbmQoJ30nKQogCiAgICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdl
bi9nZW5lcmF0ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2JhY2tl
bmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkKaW5kZXggM2UxMzk3NGFiMzYyMTNkYTc4YjcyY2EyMzJl
NzdlMWE5OTRjNTVmNy4uOTZiNmI2MTI2ZGM3ZWQ4MTMyYzNmMmUyMzVkZTNmNzAxZGNmODkxMSAx
MDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVn
ZW4vZ2VuZXJhdGVfb2JqY19iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5CisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNf
YmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weQpAQCAtMzMsMTMgKzMzLDEzIEBAIGZyb20gc3Ry
aW5nIGltcG9ydCBUZW1wbGF0ZQogdHJ5OgogICAgIGZyb20gLmNwcF9nZW5lcmF0b3IgaW1wb3J0
IENwcEdlbmVyYXRvcgogICAgIGZyb20gLmdlbmVyYXRvciBpbXBvcnQgR2VuZXJhdG9yCi0gICAg
ZnJvbSAubW9kZWxzIGltcG9ydCBGcmFtZXdvcmtzCisgICAgZnJvbSAubW9kZWxzIGltcG9ydCBF
bnVtVHlwZSwgQWxpYXNlZFR5cGUsIEZyYW1ld29ya3MKICAgICBmcm9tIC5vYmpjX2dlbmVyYXRv
ciBpbXBvcnQgT2JqQ0dlbmVyYXRvcgogICAgIGZyb20gLm9iamNfZ2VuZXJhdG9yX3RlbXBsYXRl
cyBpbXBvcnQgT2JqQ0dlbmVyYXRvclRlbXBsYXRlcyBhcyBPYmpDVGVtcGxhdGVzCiBleGNlcHQg
VmFsdWVFcnJvcjoKICAgICBmcm9tIGNwcF9nZW5lcmF0b3IgaW1wb3J0IENwcEdlbmVyYXRvcgog
ICAgIGZyb20gZ2VuZXJhdG9yIGltcG9ydCBHZW5lcmF0b3IKLSAgICBmcm9tIG1vZGVscyBpbXBv
cnQgRnJhbWV3b3JrcworICAgIGZyb20gbW9kZWxzIGltcG9ydCBFbnVtVHlwZSwgQWxpYXNlZFR5
cGUsIEZyYW1ld29ya3MKICAgICBmcm9tIG9iamNfZ2VuZXJhdG9yIGltcG9ydCBPYmpDR2VuZXJh
dG9yCiAgICAgZnJvbSBvYmpjX2dlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IE9iakNHZW5lcmF0
b3JUZW1wbGF0ZXMgYXMgT2JqQ1RlbXBsYXRlcwogCkBAIC0xMDMsOSArMTAzLDE5IEBAIGNsYXNz
IE9iakNCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvcihPYmpDR2VuZXJhdG9yKToKIAog
ICAgIGRlZiBfZ2VuZXJhdGVfb2JqY19oYW5kbGVyX2RlY2xhcmF0aW9uX2Zvcl9jb21tYW5kKHNl
bGYsIGNvbW1hbmQpOgogICAgICAgICBsaW5lcyA9IFtdCi0gICAgICAgIHBhcmFtZXRlcnMgPSBb
J2xvbmcgcmVxdWVzdElkJ10KLSAgICAgICAgZm9yIF9wYXJhbWV0ZXIgaW4gY29tbWFuZC5jYWxs
X3BhcmFtZXRlcnM6Ci0gICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZCgnJXMgaW5fJXMnICUg
KENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3JfdW5jaGVja2VkX2Zvcm1hbF9pbl9wYXJhbWV0ZXIo
X3BhcmFtZXRlciksIF9wYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpKQorICAgICAgICBwYXJhbWV0
ZXJzID0gWydsb25nIHByb3RvY29sX2NhbGxJZCddCisgICAgICAgIGZvciBwYXJhbWV0ZXIgaW4g
Y29tbWFuZC5jYWxsX3BhcmFtZXRlcnM6CisgICAgICAgICAgICBwYXJhbWV0ZXJfdHlwZSA9IHBh
cmFtZXRlci50eXBlCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHBhcmFtZXRlcl90eXBlLCBB
bGlhc2VkVHlwZSk6CisgICAgICAgICAgICAgICAgcGFyYW1ldGVyX3R5cGUgPSBwYXJhbWV0ZXJf
dHlwZS5hbGlhc2VkX3R5cGUKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UocGFyYW1ldGVyX3R5
cGUsIEVudW1UeXBlKToKKyAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfdHlwZSA9IHBhcmFtZXRl
cl90eXBlLnByaW1pdGl2ZV90eXBlCisKKyAgICAgICAgICAgIHBhcmFtZXRlcl9uYW1lID0gcGFy
YW1ldGVyLnBhcmFtZXRlcl9uYW1lCisgICAgICAgICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9u
YWw6CisgICAgICAgICAgICAgICAgcGFyYW1ldGVyX25hbWUgPSAnb3B0XycgKyBwYXJhbWV0ZXJf
bmFtZQorCisgICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZCgnJXMgJXMnICUgKENwcEdlbmVy
YXRvci5jcHBfdHlwZV9mb3JfY29tbWFuZF9wYXJhbWV0ZXIocGFyYW1ldGVyX3R5cGUsIHBhcmFt
ZXRlci5pc19vcHRpb25hbCksIHBhcmFtZXRlcl9uYW1lKSkKIAogICAgICAgICBjb21tYW5kX2Fy
Z3MgPSB7CiAgICAgICAgICAgICAnY29tbWFuZE5hbWUnOiBjb21tYW5kLmNvbW1hbmRfbmFtZSwK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2Rl
Z2VuL2dlbmVyYXRlX29iamNfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5IGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVf
b2JqY19iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkKaW5kZXggZjVlZThlNTgz
OThkNjliYWU0YmViNGMxODY3MDYzY2NkNTIyMDllYy4uMWJkOTYzNWJkMzI1MTk5MTUxY2ZkOTgw
MTNhNTEyNzI4OTg4ZDFiOSAxMDA3NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19iYWNrZW5kX2Rpc3BhdGNoZXJfaW1w
bGVtZW50YXRpb24ucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRp
b24ucHkKQEAgLTkwLDkgKzkwLDIwIEBAIGNsYXNzIE9iakNCYWNrZW5kRGlzcGF0Y2hlckltcGxl
bWVudGF0aW9uR2VuZXJhdG9yKE9iakNHZW5lcmF0b3IpOgogCiAgICAgZGVmIF9nZW5lcmF0ZV9o
YW5kbGVyX2ltcGxlbWVudGF0aW9uX2Zvcl9jb21tYW5kKHNlbGYsIGRvbWFpbiwgY29tbWFuZCk6
CiAgICAgICAgIGxpbmVzID0gW10KLSAgICAgICAgcGFyYW1ldGVycyA9IFsnbG9uZyByZXF1ZXN0
SWQnXQorICAgICAgICBwYXJhbWV0ZXJzID0gWydsb25nIHByb3RvY29sX2NhbGxJZCddCiAgICAg
ICAgIGZvciBwYXJhbWV0ZXIgaW4gY29tbWFuZC5jYWxsX3BhcmFtZXRlcnM6Ci0gICAgICAgICAg
ICBwYXJhbWV0ZXJzLmFwcGVuZCgnJXMgaW5fJXMnICUgKENwcEdlbmVyYXRvci5jcHBfdHlwZV9m
b3JfdW5jaGVja2VkX2Zvcm1hbF9pbl9wYXJhbWV0ZXIocGFyYW1ldGVyKSwgcGFyYW1ldGVyLnBh
cmFtZXRlcl9uYW1lKSkKKyAgICAgICAgICAgIHBhcmFtZXRlcl90eXBlID0gcGFyYW1ldGVyLnR5
cGUKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UocGFyYW1ldGVyX3R5cGUsIEFsaWFzZWRUeXBl
KToKKyAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfdHlwZSA9IHBhcmFtZXRlcl90eXBlLmFsaWFz
ZWRfdHlwZQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShwYXJhbWV0ZXJfdHlwZSwgRW51bVR5
cGUpOgorICAgICAgICAgICAgICAgIHBhcmFtZXRlcl90eXBlID0gcGFyYW1ldGVyX3R5cGUucHJp
bWl0aXZlX3R5cGUKKworICAgICAgICAgICAgcGFyYW1ldGVyX25hbWUgPSBwYXJhbWV0ZXIucGFy
YW1ldGVyX25hbWUKKyAgICAgICAgICAgIGlmIHBhcmFtZXRlci5pc19vcHRpb25hbDoKKyAgICAg
ICAgICAgICAgICBwYXJhbWV0ZXJfbmFtZSA9ICdvcHRfJyArIHBhcmFtZXRlcl9uYW1lCisgICAg
ICAgICAgICBwYXJhbWV0ZXJfbmFtZSA9ICdpbl8nICsgcGFyYW1ldGVyX25hbWUKKworICAgICAg
ICAgICAgcGFyYW1ldGVycy5hcHBlbmQoJyVzICVzJyAlIChDcHBHZW5lcmF0b3IuY3BwX3R5cGVf
Zm9yX2NvbW1hbmRfcGFyYW1ldGVyKHBhcmFtZXRlcl90eXBlLCBwYXJhbWV0ZXIuaXNfb3B0aW9u
YWwpLCBwYXJhbWV0ZXJfbmFtZSkpCiAKICAgICAgICAgY29tbWFuZF9hcmdzID0gewogICAgICAg
ICAgICAgJ2RvbWFpbk5hbWUnOiBkb21haW4uZG9tYWluX25hbWUsCkBAIC0xMTUsNDUgKzEyNiw1
NCBAQCBjbGFzcyBPYmpDQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihP
YmpDR2VuZXJhdG9yKToKICAgICAgICAgaWYgY29tbWFuZC5yZXR1cm5fcGFyYW1ldGVyczoKICAg
ICAgICAgICAgIHN1Y2Nlc3NfYmxvY2tfcGFyYW1ldGVycyA9IFtdCiAgICAgICAgICAgICBmb3Ig
cGFyYW1ldGVyIGluIGNvbW1hbmQucmV0dXJuX3BhcmFtZXRlcnM6CisgICAgICAgICAgICAgICAg
b3V0X3BhcmFtX25hbWUgPSBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUKKyAgICAgICAgICAgICAg
ICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6CisgICAgICAgICAgICAgICAgICAgIG91dF9wYXJh
bV9uYW1lID0gJ29wdF8nICsgb3V0X3BhcmFtX25hbWUKKyAgICAgICAgICAgICAgICBvdXRfcGFy
YW1fbmFtZSA9ICdvdXRfJyArIG91dF9wYXJhbV9uYW1lCiAgICAgICAgICAgICAgICAgb2JqY190
eXBlID0gc2VsZi5vYmpjX3R5cGVfZm9yX3BhcmFtKGRvbWFpbiwgY29tbWFuZC5jb21tYW5kX25h
bWUsIHBhcmFtZXRlcikKLSAgICAgICAgICAgICAgICB2YXJfbmFtZSA9IE9iakNHZW5lcmF0b3Iu
aWRlbnRpZmllcl90b19vYmpjX2lkZW50aWZpZXIocGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKQot
ICAgICAgICAgICAgICAgIHN1Y2Nlc3NfYmxvY2tfcGFyYW1ldGVycy5hcHBlbmQoam9pbl90eXBl
X2FuZF9uYW1lKG9iamNfdHlwZSwgdmFyX25hbWUpKQorICAgICAgICAgICAgICAgIHN1Y2Nlc3Nf
YmxvY2tfcGFyYW1ldGVycy5hcHBlbmQoam9pbl90eXBlX2FuZF9uYW1lKG9iamNfdHlwZSwgb3V0
X3BhcmFtX25hbWUpKQogICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgaWQgc3VjY2Vzc0Nh
bGxiYWNrID0gXiglcykgeycgJSAnLCAnLmpvaW4oc3VjY2Vzc19ibG9ja19wYXJhbWV0ZXJzKSkK
ICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGlkIHN1Y2Nlc3ND
YWxsYmFjayA9IF57JykKIAorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgYXV0byBwcm90
b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7JykKICAgICAgICAgaWYg
Y29tbWFuZC5yZXR1cm5fcGFyYW1ldGVyczoKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAg
ICAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHRPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0
ZSgpOycpCi0KICAgICAgICAgICAgIHJlcXVpcmVkX3BvaW50ZXJfcGFyYW1ldGVycyA9IFtwYXJh
bWV0ZXIgZm9yIHBhcmFtZXRlciBpbiBjb21tYW5kLnJldHVybl9wYXJhbWV0ZXJzIGlmIG5vdCBw
YXJhbWV0ZXIuaXNfb3B0aW9uYWwgYW5kIE9iakNHZW5lcmF0b3IuaXNfdHlwZV9vYmpjX3BvaW50
ZXJfdHlwZShwYXJhbWV0ZXIudHlwZSldCiAgICAgICAgICAgICBmb3IgcGFyYW1ldGVyIGluIHJl
cXVpcmVkX3BvaW50ZXJfcGFyYW1ldGVyczoKLSAgICAgICAgICAgICAgICB2YXJfbmFtZSA9IE9i
akNHZW5lcmF0b3IuaWRlbnRpZmllcl90b19vYmpjX2lkZW50aWZpZXIocGFyYW1ldGVyLnBhcmFt
ZXRlcl9uYW1lKQotICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBUSFJPV19F
WENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUiglcywgQCIlcyIpOycgJSAodmFyX25hbWUs
IHZhcl9uYW1lKSkKKyAgICAgICAgICAgICAgICBvdXRfcGFyYW1fbmFtZSA9IHBhcmFtZXRlci5w
YXJhbWV0ZXJfbmFtZQorICAgICAgICAgICAgICAgIGlmIHBhcmFtZXRlci5pc19vcHRpb25hbDoK
KyAgICAgICAgICAgICAgICAgICAgb3V0X3BhcmFtX25hbWUgPSAnb3B0XycgKyBvdXRfcGFyYW1f
bmFtZQorICAgICAgICAgICAgICAgIG91dF9wYXJhbV9uYW1lID0gJ291dF8nICsgb3V0X3BhcmFt
X25hbWUKKyAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgVEhST1dfRVhDRVBU
SU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIoJXMsIEAiJXMiKTsnICUgKG91dF9wYXJhbV9uYW1l
LCBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpKQogICAgICAgICAgICAgICAgIG9iamNfYXJyYXlf
Y2xhc3MgPSBzZWxmLm9iamNfY2xhc3NfZm9yX2FycmF5X3R5cGUocGFyYW1ldGVyLnR5cGUpCiAg
ICAgICAgICAgICAgICAgaWYgb2JqY19hcnJheV9jbGFzcyBhbmQgb2JqY19hcnJheV9jbGFzcy5z
dGFydHN3aXRoKHNlbGYub2JqY19wcmVmaXgoKSk6Ci0gICAgICAgICAgICAgICAgICAgIGxpbmVz
LmFwcGVuZCgnICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFX0lOX0FSUkFZKCVz
LCBbJXMgY2xhc3NdKTsnICUgKHZhcl9uYW1lLCBvYmpjX2FycmF5X2NsYXNzKSkKKyAgICAgICAg
ICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFE
X1RZUEVfSU5fQVJSQVkoJXMsIFslcyBjbGFzc10pOycgJSAob3V0X3BhcmFtX25hbWUsIG9iamNf
YXJyYXlfY2xhc3MpKQogCiAgICAgICAgICAgICBvcHRpb25hbF9wb2ludGVyX3BhcmFtZXRlcnMg
PSBbcGFyYW1ldGVyIGZvciBwYXJhbWV0ZXIgaW4gY29tbWFuZC5yZXR1cm5fcGFyYW1ldGVycyBp
ZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwgYW5kIE9iakNHZW5lcmF0b3IuaXNfdHlwZV9vYmpjX3Bv
aW50ZXJfdHlwZShwYXJhbWV0ZXIudHlwZSldCiAgICAgICAgICAgICBmb3IgcGFyYW1ldGVyIGlu
IG9wdGlvbmFsX3BvaW50ZXJfcGFyYW1ldGVyczoKLSAgICAgICAgICAgICAgICB2YXJfbmFtZSA9
IE9iakNHZW5lcmF0b3IuaWRlbnRpZmllcl90b19vYmpjX2lkZW50aWZpZXIocGFyYW1ldGVyLnBh
cmFtZXRlcl9uYW1lKQotICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBUSFJP
V19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIoJXMsIEAiJXMiKTsnICUgKHZh
cl9uYW1lLCB2YXJfbmFtZSkpCisgICAgICAgICAgICAgICAgb3V0X3BhcmFtX25hbWUgPSBwYXJh
bWV0ZXIucGFyYW1ldGVyX25hbWUKKyAgICAgICAgICAgICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0
aW9uYWw6CisgICAgICAgICAgICAgICAgICAgIG91dF9wYXJhbV9uYW1lID0gJ29wdF8nICsgb3V0
X3BhcmFtX25hbWUKKyAgICAgICAgICAgICAgICBvdXRfcGFyYW1fbmFtZSA9ICdvdXRfJyArIG91
dF9wYXJhbV9uYW1lCisgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIFRIUk9X
X0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUiglcywgQCIlcyIpOycgJSAob3V0
X3BhcmFtX25hbWUsIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkpCiAgICAgICAgICAgICAgICAg
b2JqY19hcnJheV9jbGFzcyA9IHNlbGYub2JqY19jbGFzc19mb3JfYXJyYXlfdHlwZShwYXJhbWV0
ZXIudHlwZSkKICAgICAgICAgICAgICAgICBpZiBvYmpjX2FycmF5X2NsYXNzIGFuZCBvYmpjX2Fy
cmF5X2NsYXNzLnN0YXJ0c3dpdGgoc2VsZi5vYmpjX3ByZWZpeCgpKToKLSAgICAgICAgICAgICAg
ICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX1RZUEVf
SU5fT1BUSU9OQUxfQVJSQVkoJXMsIFslcyBjbGFzc10pOycgJSAodmFyX25hbWUsIG9iamNfYXJy
YXlfY2xhc3MpKQorICAgICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgVEhS
T1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRV9JTl9PUFRJT05BTF9BUlJBWSglcywgWyVzIGNsYXNz
XSk7JyAlIChvdXRfcGFyYW1fbmFtZSwgb2JqY19hcnJheV9jbGFzcykpCiAKICAgICAgICAgICAg
IGZvciBwYXJhbWV0ZXIgaW4gY29tbWFuZC5yZXR1cm5fcGFyYW1ldGVyczoKKyAgICAgICAgICAg
ICAgICBvdXRfcGFyYW1fbmFtZSA9IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZQorICAgICAgICAg
ICAgICAgIGlmIHBhcmFtZXRlci5pc19vcHRpb25hbDoKKyAgICAgICAgICAgICAgICAgICAgb3V0
X3BhcmFtX25hbWUgPSAnb3B0XycgKyBvdXRfcGFyYW1fbmFtZQorICAgICAgICAgICAgICAgIG91
dF9wYXJhbV9uYW1lID0gJ291dF8nICsgb3V0X3BhcmFtX25hbWUKICAgICAgICAgICAgICAgICBr
ZXllZF9zZXRfbWV0aG9kID0gQ3BwR2VuZXJhdG9yLmNwcF9zZXR0ZXJfbWV0aG9kX2Zvcl90eXBl
KHBhcmFtZXRlci50eXBlKQotICAgICAgICAgICAgICAgIHZhcl9uYW1lID0gT2JqQ0dlbmVyYXRv
ci5pZGVudGlmaWVyX3RvX29iamNfaWRlbnRpZmllcihwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUp
Ci0gICAgICAgICAgICAgICAgdmFyX2V4cHJlc3Npb24gPSAnKiVzJyAlIHZhcl9uYW1lIGlmIHBh
cmFtZXRlci5pc19vcHRpb25hbCBlbHNlIHZhcl9uYW1lCisgICAgICAgICAgICAgICAgdmFyX2V4
cHJlc3Npb24gPSAnKiVzJyAlIG91dF9wYXJhbV9uYW1lIGlmIHBhcmFtZXRlci5pc19vcHRpb25h
bCBlbHNlIG91dF9wYXJhbV9uYW1lCiAgICAgICAgICAgICAgICAgZXhwb3J0X2V4cHJlc3Npb24g
PSBzZWxmLm9iamNfcHJvdG9jb2xfZXhwb3J0X2V4cHJlc3Npb25fZm9yX3ZhcmlhYmxlKHBhcmFt
ZXRlci50eXBlLCB2YXJfZXhwcmVzc2lvbikKICAgICAgICAgICAgICAgICBpZiBub3QgcGFyYW1l
dGVyLmlzX29wdGlvbmFsOgotICAgICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAg
ICAgcmVzdWx0T2JqZWN0LT4lcygiJXMiX3MsICVzKTsnICUgKGtleWVkX3NldF9tZXRob2QsIHBh
cmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwgZXhwb3J0X2V4cHJlc3Npb24pKQorICAgICAgICAgICAg
ICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPiVzKCIl
cyJfcywgJXMpOycgJSAoa2V5ZWRfc2V0X21ldGhvZCwgcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1l
LCBleHBvcnRfZXhwcmVzc2lvbikpCiAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAg
ICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIGlmICglcyknICUgdmFyX25hbWUpCi0gICAg
ICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT4l
cygiJXMiX3MsICVzKTsnICUgKGtleWVkX3NldF9tZXRob2QsIHBhcmFtZXRlci5wYXJhbWV0ZXJf
bmFtZSwgZXhwb3J0X2V4cHJlc3Npb24pKQotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAg
ICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUo
cmVzdWx0T2JqZWN0KSwgZmFsc2UpOycpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBsaW5l
cy5hcHBlbmQoJyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVl
c3RJZCwgSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSwgZmFsc2UpOycpCisgICAgICAgICAgICAgICAg
ICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBpZiAoISElcyknICUgb3V0X3BhcmFtX25hbWUpCisg
ICAgICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICAgICAgcHJvdG9jb2xfanNv
bk1lc3NhZ2UtPiVzKCIlcyJfcywgJXMpOycgJSAoa2V5ZWRfc2V0X21ldGhvZCwgcGFyYW1ldGVy
LnBhcmFtZXRlcl9uYW1lLCBleHBvcnRfZXhwcmVzc2lvbikpCisgICAgICAgIGxpbmVzLmFwcGVu
ZCgnICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocHJvdG9jb2xfY2Fs
bElkLCBXVEZNb3ZlKHByb3RvY29sX2pzb25NZXNzYWdlKSwgZmFsc2UpOycpCiAKICAgICAgICAg
bGluZXMuYXBwZW5kKCcgICAgfTsnKQogICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQpA
QCAtMTY2LDE3ICsxODYsMjcgQEAgY2xhc3MgT2JqQ0JhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50
YXRpb25HZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6CiAgICAgICAgIGRlZiBpbl9wYXJhbV9leHBy
ZXNzaW9uKHBhcmFtX25hbWUsIHBhcmFtZXRlcik6CiAgICAgICAgICAgICBfdHlwZSA9IHBhcmFt
ZXRlci50eXBlCiAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBBbGlhc2VkVHlwZSk6
Ci0gICAgICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5hbGlhc2VkX3R5cGUgICMgRmFsbCB0aHJv
dWdoIHRvIGVudW0gb3IgcHJpbWl0aXZlLgorICAgICAgICAgICAgICAgIF90eXBlID0gX3R5cGUu
YWxpYXNlZF90eXBlCiAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBFbnVtVHlwZSk6
Ci0gICAgICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5wcmltaXRpdmVfdHlwZSAgIyBGYWxsIHRo
cm91Z2ggdG8gcHJpbWl0aXZlLgotICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgUHJp
bWl0aXZlVHlwZSk6Ci0gICAgICAgICAgICAgICAgaWYgX3R5cGUucmF3X25hbWUoKSBpbiBbJ2Fy
cmF5JywgJ2FueScsICdvYmplY3QnXToKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuICcmJXMn
ICUgcGFyYW1fbmFtZSBpZiBub3QgcGFyYW1ldGVyLmlzX29wdGlvbmFsIGVsc2UgcGFyYW1fbmFt
ZQotICAgICAgICAgICAgICAgIHJldHVybiAnKiVzJyAlIHBhcmFtX25hbWUgaWYgcGFyYW1ldGVy
LmlzX29wdGlvbmFsIGVsc2UgcGFyYW1fbmFtZQotICAgICAgICAgICAgcmV0dXJuICcmJXMnICUg
cGFyYW1fbmFtZSBpZiBub3QgcGFyYW1ldGVyLmlzX29wdGlvbmFsIGVsc2UgcGFyYW1fbmFtZQor
ICAgICAgICAgICAgICAgIF90eXBlID0gX3R5cGUucHJpbWl0aXZlX3R5cGUKKworICAgICAgICAg
ICAgaWYgX3R5cGUuaXNfZW51bSgpOgorICAgICAgICAgICAgICAgIGlmIHBhcmFtZXRlci5pc19v
cHRpb25hbDoKKyAgICAgICAgICAgICAgICAgICAgcGFyYW1fbmFtZSA9ICcqJyArIHBhcmFtX25h
bWUKKyAgICAgICAgICAgICAgICByZXR1cm4gJ1Byb3RvY29sOjpIZWxwZXJzOjpnZXRFbnVtQ29u
c3RhbnRWYWx1ZSglcyknICUgcGFyYW1fbmFtZQorICAgICAgICAgICAgaWYgQ3BwR2VuZXJhdG9y
LnNob3VsZF9yZWxlYXNlX2FyZ3VtZW50KF90eXBlLCBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwpOgor
ICAgICAgICAgICAgICAgIHJldHVybiBwYXJhbV9uYW1lICsgJy5yZWxlYXNlTm9uTnVsbCgpJwor
ICAgICAgICAgICAgaWYgQ3BwR2VuZXJhdG9yLnNob3VsZF9kZXJlZmVyZW5jZV9hcmd1bWVudChf
dHlwZSwgcGFyYW1ldGVyLmlzX29wdGlvbmFsKToKKyAgICAgICAgICAgICAgICByZXR1cm4gJyon
ICsgcGFyYW1fbmFtZQorICAgICAgICAgICAgaWYgQ3BwR2VuZXJhdG9yLnNob3VsZF9tb3ZlX2Fy
Z3VtZW50KF90eXBlLCBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwpOgorICAgICAgICAgICAgICAgIHJl
dHVybiAnV1RGTW92ZSglcyknICUgcGFyYW1fbmFtZQorICAgICAgICAgICAgcmV0dXJuIHBhcmFt
X25hbWUKIAogICAgICAgICBmb3IgcGFyYW1ldGVyIGluIGNvbW1hbmQuY2FsbF9wYXJhbWV0ZXJz
OgotICAgICAgICAgICAgaW5fcGFyYW1fbmFtZSA9ICdpbl8lcycgJSBwYXJhbWV0ZXIucGFyYW1l
dGVyX25hbWUKKyAgICAgICAgICAgIGluX3BhcmFtX25hbWUgPSBwYXJhbWV0ZXIucGFyYW1ldGVy
X25hbWUKKyAgICAgICAgICAgIGlmIHBhcmFtZXRlci5pc19vcHRpb25hbDoKKyAgICAgICAgICAg
ICAgICBpbl9wYXJhbV9uYW1lID0gJ29wdF8nICsgaW5fcGFyYW1fbmFtZQorICAgICAgICAgICAg
aW5fcGFyYW1fbmFtZSA9ICdpbl8nICsgaW5fcGFyYW1fbmFtZQogICAgICAgICAgICAgb2JqY19p
bl9wYXJhbV9uYW1lID0gJ29fJXMnICUgaW5fcGFyYW1fbmFtZQogICAgICAgICAgICAgb2JqY190
eXBlID0gc2VsZi5vYmpjX3R5cGVfZm9yX3BhcmFtKGRvbWFpbiwgY29tbWFuZC5jb21tYW5kX25h
bWUsIHBhcmFtZXRlciwgRmFsc2UpCiAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHBhcmFtZXRl
ci50eXBlLCBFbnVtVHlwZSk6CkBAIC0xOTQsMTEgKzIyNCw4IEBAIGNsYXNzIE9iakNCYWNrZW5k
RGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKE9iakNHZW5lcmF0b3IpOgogCiAgICAg
ICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICVzOycgJSBq
b2luX3R5cGVfYW5kX25hbWUob2JqY190eXBlLCBvYmpjX2luX3BhcmFtX25hbWUpKQotICAgICAg
ICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGlmICglcyknICUgaW5fcGFyYW1fbmFtZSkKKyAg
ICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBpZiAoISElcyknICUgaW5fcGFyYW1fbmFt
ZSkKICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgJXMgPSAlczsnICUgKG9i
amNfaW5fcGFyYW1fbmFtZSwgaW1wb3J0X2V4cHJlc3Npb24pKQotCi0gICAgICAgIGlmIGxpbmVz
OgotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcnKQogICAgICAgICByZXR1cm4gJ1xuJy5qb2lu
KGxpbmVzKQogCiAgICAgZGVmIF9nZW5lcmF0ZV9pbnZvY2F0aW9uX2Zvcl9jb21tYW5kKHNlbGYs
IGRvbWFpbiwgY29tbWFuZCk6CkBAIC0yMDYsNyArMjMzLDEwIEBAIGNsYXNzIE9iakNCYWNrZW5k
RGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKE9iakNHZW5lcmF0b3IpOgogICAgICAg
ICBwYWlycy5hcHBlbmQoJ1dpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2snKQogICAgICAg
ICBwYWlycy5hcHBlbmQoJ3N1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2snKQogICAgICAg
ICBmb3IgcGFyYW1ldGVyIGluIGNvbW1hbmQuY2FsbF9wYXJhbWV0ZXJzOgotICAgICAgICAgICAg
aW5fcGFyYW1fbmFtZSA9ICdpbl8lcycgJSBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUKKyAgICAg
ICAgICAgIGluX3BhcmFtX25hbWUgPSBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUKKyAgICAgICAg
ICAgIGlmIHBhcmFtZXRlci5pc19vcHRpb25hbDoKKyAgICAgICAgICAgICAgICBpbl9wYXJhbV9u
YW1lID0gJ29wdF8nICsgaW5fcGFyYW1fbmFtZQorICAgICAgICAgICAgaW5fcGFyYW1fbmFtZSA9
ICdpbl8nICsgaW5fcGFyYW1fbmFtZQogICAgICAgICAgICAgb2JqY19pbl9wYXJhbV9leHByZXNz
aW9uID0gJ29fJXMnICUgaW5fcGFyYW1fbmFtZQogICAgICAgICAgICAgaWYgbm90IHBhcmFtZXRl
ci5pc19vcHRpb25hbDoKICAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHBhcmFtZXRlci50
eXBlLCBFbnVtVHlwZSk6CkBAIC0yMTcsNiArMjQ3LDYgQEAgY2xhc3MgT2JqQ0JhY2tlbmREaXNw
YXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6CiAgICAgICAgICAg
ICAgICAgaWYgaXNpbnN0YW5jZShwYXJhbWV0ZXIudHlwZSwgRW51bVR5cGUpOgogICAgICAgICAg
ICAgICAgICAgICBvYmpjX2luX3BhcmFtX2V4cHJlc3Npb24gPSAnJXMudmFsdWUoKScgJSBvYmpj
X2luX3BhcmFtX2V4cHJlc3Npb24KIAotICAgICAgICAgICAgICAgIG9wdGlvbmFsX2V4cHJlc3Np
b24gPSAnKCVzID8gJiVzIDogbmlsKScgJSAoaW5fcGFyYW1fbmFtZSwgb2JqY19pbl9wYXJhbV9l
eHByZXNzaW9uKQorICAgICAgICAgICAgICAgIG9wdGlvbmFsX2V4cHJlc3Npb24gPSAnKCEhJXMg
PyAmJXMgOiBuaWwpJyAlIChpbl9wYXJhbV9uYW1lLCBvYmpjX2luX3BhcmFtX2V4cHJlc3Npb24p
CiAgICAgICAgICAgICAgICAgcGFpcnMuYXBwZW5kKCclczolcycgJSAocGFyYW1ldGVyLnBhcmFt
ZXRlcl9uYW1lLCBvcHRpb25hbF9leHByZXNzaW9uKSkKICAgICAgICAgcmV0dXJuICcgICAgW21f
ZGVsZWdhdGUgJXMlc107JyAlIChjb21tYW5kLmNvbW1hbmRfbmFtZSwgJyAnLmpvaW4ocGFpcnMp
KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2Nv
ZGVnZW4vZ2VuZXJhdGVfb2JqY19mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJh
dGVfb2JqY19mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5CmluZGV4IGRkZGIy
N2E4OGMyYmFmZjVmYzZmMjdiYzQzYTAxZTMxZWE5Y2Q0OWQuLjhkNDE5MzgxMjNmOTA2ZmJmMDkx
ZTJhYjdiMzZhNjA3MzNkYjM5NTIgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfZnJvbnRlbmRfZGlzcGF0Y2hl
cl9pbXBsZW1lbnRhdGlvbi5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2Zyb250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVt
ZW50YXRpb24ucHkKQEAgLTEyNSwxMSArMTI1LDExIEBAIGNsYXNzIE9iakNGcm9udGVuZERpc3Bh
dGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihPYmpDR2VuZXJhdG9yKToKICAgICAgICAgaWYg
cmVxdWlyZWRfcG9pbnRlcl9wYXJhbWV0ZXJzIG9yIG9wdGlvbmFsX3BvaW50ZXJfcGFyYW1ldGVy
czoKICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnJykKIAotICAgICAgICBsaW5lcy5hcHBlbmQo
JyAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRl
KCk7JykKLSAgICAgICAgbGluZXMuYXBwZW5kKCcgICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygi
bWV0aG9kIl9zLCAiJXMuJXMiX3MpOycgJSAoZG9tYWluLmRvbWFpbl9uYW1lLCBldmVudC5ldmVu
dF9uYW1lKSkKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgYXV0byBwcm90b2NvbF9qc29uTWVz
c2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7JykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcg
ICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiJXMuJXMiX3Mp
OycgJSAoZG9tYWluLmRvbWFpbl9uYW1lLCBldmVudC5ldmVudF9uYW1lKSkKICAgICAgICAgaWYg
ZXZlbnQuZXZlbnRfcGFyYW1ldGVyczoKICAgICAgICAgICAgIGxpbmVzLmV4dGVuZChzZWxmLl9n
ZW5lcmF0ZV9ldmVudF9vdXRfcGFyYW1ldGVycyhkb21haW4sIGV2ZW50KSkKLSAgICAgICAgbGlu
ZXMuYXBwZW5kKCcgICAgcm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5n
KCkpOycpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIHJvdXRlci5zZW5kRXZlbnQocHJvdG9j
b2xfanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsnKQogICAgICAgICBsaW5lcy5hcHBlbmQo
J30nKQogICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihl
dmVudC5jb25kaXRpb24sICdcbicuam9pbihsaW5lcykpCiAKQEAgLTE0NSwxNiArMTQ1LDE2IEBA
IGNsYXNzIE9iakNGcm9udGVuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihPYmpD
R2VuZXJhdG9yKToKIAogICAgIGRlZiBfZ2VuZXJhdGVfZXZlbnRfb3V0X3BhcmFtZXRlcnMoc2Vs
ZiwgZG9tYWluLCBldmVudCk6CiAgICAgICAgIGxpbmVzID0gW10KLSAgICAgICAgbGluZXMuYXBw
ZW5kKCcgICAgUmVmPEpTT046Ok9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSlNPTjo6T2JqZWN0Ojpj
cmVhdGUoKTsnKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBhdXRvIHByb3RvY29sX3BhcmFt
c09iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7JykKICAgICAgICAgZm9yIHBhcmFtZXRl
ciBpbiBldmVudC5ldmVudF9wYXJhbWV0ZXJzOgogICAgICAgICAgICAga2V5ZWRfc2V0X21ldGhv
ZCA9IENwcEdlbmVyYXRvci5jcHBfc2V0dGVyX21ldGhvZF9mb3JfdHlwZShwYXJhbWV0ZXIudHlw
ZSkKICAgICAgICAgICAgIHZhcl9uYW1lID0gcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lCiAgICAg
ICAgICAgICBzYWZlX3Zhcl9uYW1lID0gJygqJXMpJyAlIHZhcl9uYW1lIGlmIHBhcmFtZXRlci5p
c19vcHRpb25hbCBlbHNlIHZhcl9uYW1lCiAgICAgICAgICAgICBleHBvcnRfZXhwcmVzc2lvbiA9
IHNlbGYub2JqY19wcm90b2NvbF9leHBvcnRfZXhwcmVzc2lvbl9mb3JfdmFyaWFibGUocGFyYW1l
dGVyLnR5cGUsIHNhZmVfdmFyX25hbWUpCiAgICAgICAgICAgICBpZiBub3QgcGFyYW1ldGVyLmlz
X29wdGlvbmFsOgotICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIHBhcmFtc09iamVj
dC0+JXMoIiVzIl9zLCAlcyk7JyAlIChrZXllZF9zZXRfbWV0aG9kLCBwYXJhbWV0ZXIucGFyYW1l
dGVyX25hbWUsIGV4cG9ydF9leHByZXNzaW9uKSkKKyAgICAgICAgICAgICAgICBsaW5lcy5hcHBl
bmQoJyAgICBwcm90b2NvbF9wYXJhbXNPYmplY3QtPiVzKCIlcyJfcywgJXMpOycgJSAoa2V5ZWRf
c2V0X21ldGhvZCwgcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lLCBleHBvcnRfZXhwcmVzc2lvbikp
CiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGlm
ICglcyknICUgKHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkpCi0gICAgICAgICAgICAgICAgbGlu
ZXMuYXBwZW5kKCcgICAgICAgIHBhcmFtc09iamVjdC0+JXMoIiVzIl9zLCAlcyk7JyAlIChrZXll
ZF9zZXRfbWV0aG9kLCBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUsIGV4cG9ydF9leHByZXNzaW9u
KSkKLSAgICAgICAgbGluZXMuYXBwZW5kKCcgICAganNvbk1lc3NhZ2UtPnNldE9iamVjdCgicGFy
YW1zIl9zLCBXVEZNb3ZlKHBhcmFtc09iamVjdCkpOycpCisgICAgICAgICAgICAgICAgbGluZXMu
YXBwZW5kKCcgICAgICAgIHByb3RvY29sX3BhcmFtc09iamVjdC0+JXMoIiVzIl9zLCAlcyk7JyAl
IChrZXllZF9zZXRfbWV0aG9kLCBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUsIGV4cG9ydF9leHBy
ZXNzaW9uKSkKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2Ut
PnNldE9iamVjdCgicGFyYW1zIl9zLCBXVEZNb3ZlKHByb3RvY29sX3BhcmFtc09iamVjdCkpOycp
CiAgICAgICAgIHJldHVybiBsaW5lcwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdG9yLnB5IGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdG9yLnB5CmluZGV4IDk0ZDE4
ZDlkNjYxOTRkMTU4NWMwZTEwYzA0OTRiYjRiMWExM2I5NTUuLjI5YTJkZWE3MjRmMGJiZWNmZWJh
NmRiOTIwNjA4MTcwMWU1MTBjNTEgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRvci5weQorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0b3IucHkKQEAgLTczLDkg
KzczLDYgQEAgX1RZUEVTX05FRURJTkdfUlVOVElNRV9DQVNUUyA9IHNldChbCiAgICAgIlJ1bnRp
bWUuQ29sbGVjdGlvbkVudHJ5IiwKICAgICAiRGVidWdnZXIuRnVuY3Rpb25EZXRhaWxzIiwKICAg
ICAiRGVidWdnZXIuQ2FsbEZyYW1lIiwKLSAgICAiQ2FudmFzLlRyYWNlTG9nIiwKLSAgICAiQ2Fu
dmFzLlJlc291cmNlSW5mbyIsCi0gICAgIkNhbnZhcy5SZXNvdXJjZVN0YXRlIiwKICAgICAjIFRo
aXMgc2hvdWxkIGJlIGEgdGVtcG9yYXJ5IGhhY2suIFRpbWVsaW5lRXZlbnQgc2hvdWxkIGJlIGNy
ZWF0ZWQgdmlhIGdlbmVyYXRlZCBDKysgQVBJLgogICAgICJUaW1lbGluZS5UaW1lbGluZUV2ZW50
IiwKICAgICAjIEZvciB0ZXN0aW5nIHB1cnBvc2VzIG9ubHkuCkBAIC04NSwxMCArODIsMTkgQEAg
X1RZUEVTX05FRURJTkdfUlVOVElNRV9DQVNUUyA9IHNldChbCiAjIEZJWE1FOiBUaGlzIHNob3Vs
ZCBiZSBjb252ZXJ0ZWQgaW50byBhIHByb3BlcnR5IGluIEpTT04uCiBfVFlQRVNfV0lUSF9PUEVO
X0ZJRUxEUyA9IHsKICAgICAiVGltZWxpbmUuVGltZWxpbmVFdmVudCI6IFtdLAotICAgICMgSW5z
cGVjdG9yU3R5bGVTaGVldCBub3Qgb25seSBjcmVhdGVzIHRoaXMgcHJvcGVydHkgYnV0IHdhbnRz
IHRvIHJlYWQgaXQgYW5kIG1vZGlmeSBpdC4KLSAgICAiQ1NTLkNTU1Byb3BlcnR5IjogW10sCi0g
ICAgIyBJbnNwZWN0b3JOZXR3b3JrQWdlbnQgbmVlZHMgdG8gdXBkYXRlIG1pbWUtdHlwZS4KLSAg
ICAiTmV0d29yay5SZXNwb25zZSI6IFsibWltZVR5cGUiXSwKKyAgICAiQ1NTLkNTU1Byb3BlcnR5
IjogWyJwcmlvcml0eSIsICJwYXJzZWRPayIsICJzdGF0dXMiXSwKKyAgICAiRE9NLkhpZ2hsaWdo
dENvbmZpZyI6IFtdLAorICAgICJET00uUkdCQUNvbG9yIjogW10sCisgICAgIkRPTVN0b3JhZ2Uu
U3RvcmFnZUlkIjogW10sCisgICAgIkRlYnVnZ2VyLkJyZWFrcG9pbnRBY3Rpb24iOiBbXSwKKyAg
ICAiRGVidWdnZXIuQnJlYWtwb2ludE9wdGlvbnMiOiBbXSwKKyAgICAiRGVidWdnZXIuTG9jYXRp
b24iOiBbXSwKKyAgICAiSW5kZXhlZERCLktleSI6IFtdLAorICAgICJJbmRleGVkREIuS2V5UmFu
Z2UiOiBbXSwKKyAgICAiTmV0d29yay5SZXNwb25zZSI6IFsic3RhdHVzIiwgInN0YXR1c1RleHQi
LCAibWltZVR5cGUiLCAic291cmNlIl0sCisgICAgIlBhZ2UuQ29va2llIjogW10sCisgICAgIlJ1
bnRpbWUuQ2FsbEFyZ3VtZW50IjogWyJvYmplY3RJZCJdLAorICAgICJSdW50aW1lLlR5cGVMb2Nh
dGlvbiI6IFtdLAogICAgICMgRm9yIHRlc3RpbmcgcHVycG9zZXMgb25seS4KICAgICAiVGVzdC5P
cGVuUGFyYW1ldGVycyI6IFsiYWxwaGEiXSwKIH0KQEAgLTEzNCw3ICsxNDAsNyBAQCBjbGFzcyBH
ZW5lcmF0b3I6CiAgICAgICAgICAgICBpZiBzZWxmLm1vZGVsKCkuZnJhbWV3b3JrLm5hbWUgbm90
IGluIGFsbG93ZWRfZnJhbWV3b3JrczoKICAgICAgICAgICAgICAgICBjb250aW51ZQogCi0gICAg
ICAgICAgICBpZiBmcmFtZXdvcmtfbmFtZSA9PSAiV1RGIjoKKyAgICAgICAgICAgIGlmIGZyYW1l
d29ya19uYW1lID09ICJXVEYiIG9yIGZyYW1ld29ya19uYW1lID09ICJzdGQiOgogICAgICAgICAg
ICAgICAgIGluY2x1ZGVzLmFkZCgiI2luY2x1ZGUgPCVzPiIgJSBoZWFkZXJfcGF0aCkKICAgICAg
ICAgICAgIGVsaWYgc2VsZi5tb2RlbCgpLmZyYW1ld29yay5uYW1lICE9IGZyYW1ld29ya19uYW1l
OgogICAgICAgICAgICAgICAgIGluY2x1ZGVzLmFkZCgiI2luY2x1ZGUgPCVzLyVzPiIgJSAoZnJh
bWV3b3JrX25hbWUsIG9zLnBhdGguYmFzZW5hbWUoaGVhZGVyX3BhdGgpKSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL29iamNfZ2Vu
ZXJhdG9yLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVn
ZW4vb2JqY19nZW5lcmF0b3IucHkKaW5kZXggNzMxNTNiOTU0NjY3MmI5OTA0ZTdmNWViOTE4ODY1
ZmM4YTUxNjhiNi4uYTJkMzc2ZGYzYjk0M2RkYzkxNjc4YmJiYTVhMmVkM2YwMmUzNzBjMCAxMDA3
NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4v
b2JqY19nZW5lcmF0b3IucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL2NvZGVnZW4vb2JqY19nZW5lcmF0b3IucHkKQEAgLTI2Myw3ICsyNjMsNyBAQCBjbGFz
cyBPYmpDR2VuZXJhdG9yKEdlbmVyYXRvcik6CiAgICAgICAgIGlmIChpc2luc3RhbmNlKF90eXBl
LCBFbnVtVHlwZSkpOgogICAgICAgICAgICAgcmV0dXJuIE9iakNHZW5lcmF0b3IucHJvdG9jb2xf
dHlwZV9mb3JfdHlwZShfdHlwZS5wcmltaXRpdmVfdHlwZSkKICAgICAgICAgaWYgKGlzaW5zdGFu
Y2UoX3R5cGUsIE9iamVjdFR5cGUpKToKLSAgICAgICAgICAgIHJldHVybiAnSW5zcGVjdG9yOjpQ
cm90b2NvbDo6JXM6OiVzJyAlIChfdHlwZS50eXBlX2RvbWFpbigpLmRvbWFpbl9uYW1lLCBfdHlw
ZS5yYXdfbmFtZSgpKQorICAgICAgICAgICAgcmV0dXJuICdQcm90b2NvbDo6JXM6OiVzJyAlIChf
dHlwZS50eXBlX2RvbWFpbigpLmRvbWFpbl9uYW1lLCBfdHlwZS5yYXdfbmFtZSgpKQogICAgICAg
ICBpZiAoaXNpbnN0YW5jZShfdHlwZSwgQXJyYXlUeXBlKSk6CiAgICAgICAgICAgICBzdWJfdHlw
ZSA9IE9iakNHZW5lcmF0b3IucHJvdG9jb2xfdHlwZV9mb3JfdHlwZShfdHlwZS5lbGVtZW50X3R5
cGUpCiAgICAgICAgICAgICByZXR1cm4gJ0pTT046OkFycmF5T2Y8JXM+JyAlIHN1Yl90eXBlCkBA
IC0zNTMsOCArMzUzLDYgQEAgY2xhc3MgT2JqQ0dlbmVyYXRvcihHZW5lcmF0b3IpOgogICAgICAg
ICBpZiAoaXNpbnN0YW5jZShfdHlwZSwgUHJpbWl0aXZlVHlwZSkpOgogICAgICAgICAgICAgcmV0
dXJuIHNlbGYub2JqY190eXBlX2Zvcl9yYXdfbmFtZShfdHlwZS5yYXdfbmFtZSgpKQogICAgICAg
ICBpZiAoaXNpbnN0YW5jZShfdHlwZSwgRW51bVR5cGUpKToKLSAgICAgICAgICAgIGlmIF90eXBl
LmlzX2Fub255bW91czoKLSAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5vYmpjX2VudW1fbmFt
ZV9mb3JfYW5vbnltb3VzX2VudW1fcGFyYW1ldGVyKGRvbWFpbiwgZXZlbnRfb3JfY29tbWFuZF9u
YW1lLCBwYXJhbWV0ZXIpCiAgICAgICAgICAgICByZXR1cm4gc2VsZi5vYmpjX2VudW1fbmFtZV9m
b3Jfbm9uX2Fub255bW91c19lbnVtKF90eXBlKQogICAgICAgICBpZiAoaXNpbnN0YW5jZShfdHlw
ZSwgT2JqZWN0VHlwZSkpOgogICAgICAgICAgICAgcmV0dXJuIHNlbGYub2JqY19uYW1lX2Zvcl90
eXBlKF90eXBlKSArICcgKicKQEAgLTM5OCw4ICszOTYsNiBAQCBjbGFzcyBPYmpDR2VuZXJhdG9y
KEdlbmVyYXRvcik6CiAKICAgICBkZWYgb2JqY19wcm90b2NvbF9pbXBvcnRfZXhwcmVzc2lvbl9m
b3JfcGFyYW1ldGVyKHNlbGYsIG5hbWUsIGRvbWFpbiwgZXZlbnRfb3JfY29tbWFuZF9uYW1lLCBw
YXJhbWV0ZXIpOgogICAgICAgICBpZiBpc2luc3RhbmNlKHBhcmFtZXRlci50eXBlLCBFbnVtVHlw
ZSk6Ci0gICAgICAgICAgICBpZiBwYXJhbWV0ZXIudHlwZS5pc19hbm9ueW1vdXM6Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuICdmcm9tUHJvdG9jb2xTdHJpbmc8JXM+KCVzKScgJSAoc2VsZi5vYmpj
X2VudW1fbmFtZV9mb3JfYW5vbnltb3VzX2VudW1fcGFyYW1ldGVyKGRvbWFpbiwgZXZlbnRfb3Jf
Y29tbWFuZF9uYW1lLCBwYXJhbWV0ZXIpLCBuYW1lKQogICAgICAgICAgICAgcmV0dXJuICdmcm9t
UHJvdG9jb2xTdHJpbmc8JXM+KCVzKScgJSAoc2VsZi5vYmpjX2VudW1fbmFtZV9mb3Jfbm9uX2Fu
b255bW91c19lbnVtKHBhcmFtZXRlci50eXBlKSwgbmFtZSkKICAgICAgICAgcmV0dXJuIHNlbGYu
b2JqY19wcm90b2NvbF9pbXBvcnRfZXhwcmVzc2lvbl9mb3JfdmFyaWFibGUocGFyYW1ldGVyLnR5
cGUsIG5hbWUpCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9jb2RlZ2VuL29iamNfZ2VuZXJhdG9yX3RlbXBsYXRlcy5weSBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL29iamNfZ2VuZXJhdG9yX3RlbXBs
YXRlcy5weQppbmRleCAzMjZjMjYyNWVhMzRmMDY2YjJkNGNjOTg0NmUxNGEyMzQxYjgxODgxLi5i
NTZkMTQ4MTk1YzRiNjVmZmQyNDNhOTkxMGFhZDM2MzMzYTA4NTJkIDEwMDc1NQotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9vYmpjX2dlbmVyYXRv
cl90ZW1wbGF0ZXMucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2NvZGVnZW4vb2JqY19nZW5lcmF0b3JfdGVtcGxhdGVzLnB5CkBAIC0xMTQsMTMgKzExNCwx
MyBAQCBwcml2YXRlOgogICAgICIiInZvaWQgT2JqQ0luc3BlY3RvciR7ZG9tYWluTmFtZX1CYWNr
ZW5kRGlzcGF0Y2hlcjo6JHtjb21tYW5kTmFtZX0oJHtwYXJhbWV0ZXJzfSkKIHsKICAgICBpZiAo
ISR7cmVzcG9uZHNUb1NlbGVjdG9yfSkgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5y
ZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5v
dEZvdW5kLCAiJyR7ZG9tYWluTmFtZX0uJHtjb21tYW5kTmFtZX0nIHdhcyBub3QgZm91bmQiX3Mp
OworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHByb3Rv
Y29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJyR7ZG9tYWlu
TmFtZX0uJHtjb21tYW5kTmFtZX0nIHdhcyBub3QgZm91bmQiX3MpOwogICAgICAgICBiYWNrZW5k
RGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCiAgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7Ci0gICAgICAg
IGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNr
ZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAgICAgYmFja2VuZERpc3Bh
dGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxsSWQsIEJhY2tlbmREaXNw
YXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwogICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigp
LT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9lbnVtLXZhbHVlcy5qc29uIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2VudW0tdmFsdWVzLmpz
b24KaW5kZXggY2RhZDYxZGY3YzlmOWM3NmU2OTI4OTdjM2RmZTBiMDgyM2Y5MGU0ZC4uMjgxNTYx
Yjk0OGUxOWE0MWZhMGEyYzgwZWNmMmUwOWFmM2E4YmM0OSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2VudW0tdmFsdWVzLmpzb24KKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2VudW0tdmFs
dWVzLmpzb24KQEAgLTMsOSArMyw5IEBACiAgICAgImRvbWFpbiI6ICJUeXBlRG9tYWluIiwKICAg
ICAidHlwZXMiOiBbCiAgICAgICAgIHsKLSAgICAgICAgICAgICJpZCI6ICJUeXBlRG9tYWluRW51
bSIsCisgICAgICAgICAgICAiaWQiOiAiRW51bSIsCiAgICAgICAgICAgICAidHlwZSI6ICJzdHJp
bmciLAotICAgICAgICAgICAgImVudW0iOiBbInNoYXJlZCIsICJyZWQiLCAiZ3JlZW4iLCAiYmx1
ZSJdCisgICAgICAgICAgICAiZW51bSI6IFsic2hhcmVkIiwgIjEiLCAiMiJdCiAgICAgICAgIH0K
ICAgICBdCiB9LApAQCAtMTMsMTAgKzEzLDE4IEBACiAgICAgImRvbWFpbiI6ICJDb21tYW5kRG9t
YWluIiwKICAgICAiY29tbWFuZHMiOiBbCiAgICAgICAgIHsKLSAgICAgICAgICAgICJuYW1lIjog
ImNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlIiwKLSAgICAgICAgICAgICJwYXJhbWV0ZXJzIjog
W10sCisgICAgICAgICAgICAibmFtZSI6ICJjb21tYW5kIiwKKyAgICAgICAgICAgICJwYXJhbWV0
ZXJzIjogWworICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZW51bVJlcXVpcmVkIiwgIiRyZWYi
OiAiVHlwZURvbWFpbi5FbnVtIiB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZW51bU9w
dGlvbmFsIiwgIiRyZWYiOiAiVHlwZURvbWFpbi5FbnVtIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAor
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicGFyYW1ldGVyUmVxdWlyZWQiLCAidHlwZSI6ICJz
dHJpbmciLCAiZW51bSI6IFsic2hhcmVkIiwgInNoYXJlZFJlcXVpcmVkIiwgImJsYWNrIl0gfSwK
KyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBhcmFtZXRlck9wdGlvbmFsIiwgInR5cGUiOiAi
c3RyaW5nIiwgImVudW0iOiBbInNoYXJlZCIsICJzaGFyZWRPcHRpb25hbCIsICJyZWQiXSwgIm9w
dGlvbmFsIjogdHJ1ZSB9CisgICAgICAgICAgICBdLAogICAgICAgICAgICAgInJldHVybnMiOiBb
Ci0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJyZXR1cm5WYWx1ZSIsICJ0eXBlIjogInN0cmlu
ZyIsICJlbnVtIjogWyJzaGFyZWQiLCAiY3lhbiIsICJtYWdlbnRhIiwgInllbGxvdyJdIH0KKyAg
ICAgICAgICAgICAgICB7ICJuYW1lIjogImVudW1SZXF1aXJlZCIsICIkcmVmIjogIlR5cGVEb21h
aW4uRW51bSIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImVudW1PcHRpb25hbCIsICIk
cmVmIjogIlR5cGVEb21haW4uRW51bSIsICJvcHRpb25hbCI6IHRydWUgfSwKKyAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogInJldHVyblJlcXVpcmVkIiwgInR5cGUiOiAic3RyaW5nIiwgImVudW0i
OiBbInNoYXJlZCIsICJzaGFyZWRSZXF1aXJlZCIsICJ3aGl0ZSJdIH0sCisgICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJyZXR1cm5PcHRpb25hbCIsICJ0eXBlIjogInN0cmluZyIsICJlbnVtIjog
WyJzaGFyZWQiLCAic2hhcmVkT3B0aW9uYWwiLCAiYmx1ZSJdLCAib3B0aW9uYWwiOiB0cnVlIH0K
ICAgICAgICAgICAgIF0KICAgICAgICAgfQogICAgIF0KQEAgLTI1LDkgKzMzLDEyIEBACiAgICAg
ImRvbWFpbiI6ICJFdmVudERvbWFpbiIsCiAgICAgImV2ZW50cyI6IFsKICAgICAgICAgewotICAg
ICAgICAgICAgIm5hbWUiOiAiZXZlbnRXaXRoRW51bVBhcmFtZXRlciIsCisgICAgICAgICAgICAi
bmFtZSI6ICJldmVudCIsCiAgICAgICAgICAgICAicGFyYW1ldGVycyI6IFsKLSAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogInBhcmFtZXRlciIsICJ0eXBlIjogInN0cmluZyIsICJlbnVtIjogWyJz
aGFyZWQiLCAiYmxhY2siLCAid2hpdGUiXSB9CisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJl
bnVtUmVxdWlyZWQiLCAiJHJlZiI6ICJUeXBlRG9tYWluLkVudW0iIH0sCisgICAgICAgICAgICAg
ICAgeyAibmFtZSI6ICJlbnVtT3B0aW9uYWwiLCAiJHJlZiI6ICJUeXBlRG9tYWluLkVudW0iLCAi
b3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwYXJhbWV0ZXJS
ZXF1aXJlZCIsICJ0eXBlIjogInN0cmluZyIsICJlbnVtIjogWyJzaGFyZWQiLCAic2hhcmVkUmVx
dWlyZWQiLCAiZ3JleSJdIH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJwYXJhbWV0ZXJP
cHRpb25hbCIsICJ0eXBlIjogInN0cmluZyIsICJlbnVtIjogWyJzaGFyZWQiLCAic2hhcmVkT3B0
aW9uYWwiLCAiZ3JlZW4iXSwgIm9wdGlvbmFsIjogdHJ1ZSB9CiAgICAgICAgICAgICBdCiAgICAg
ICAgIH0KICAgICBdCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvY29tbWFuZC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFp
bi1kZWJ1Z2dhYmxlVHlwZS5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9jb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmct
ZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24tcmVzdWx0CmluZGV4IGU5YzE4YmZhZTViMzJjOTU3
YmJlYWQ0ZTBlYjlkMDZiNjM5OGIwNjMuLjMyZDRhOGU4MTE0NjAxZWZkNjZlZjk4NzliZGNhNmNm
ZmU3MGJjODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9leHBlY3RlZC9jb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRl
YnVnZ2FibGVUeXBlLmpzb24tcmVzdWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9jb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmct
ZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24tcmVzdWx0CkBAIC03MCw3ICs3MCw3IEBAIEluc3Bl
Y3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIkRvbWFpbiIsIFsicGFnZSJdKTsKIAogI2lmIEVO
QUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogCi0jaW5jbHVkZSAiVGVzdFBy
b3RvY29sVHlwZXMuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KICNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgogCkBAIC04OCw3ICs4
OCw3IEBAIHByaXZhdGU6CiBjbGFzcyBBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlciA6
IHB1YmxpYyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7CiBwdWJsaWM6CiAgICAgdmlydHVh
bCB+QWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIoKSB7IH0KLSAgICB2aXJ0dWFsIHZv
aWQgQ29tbWFuZChsb25nIGNhbGxJZCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBDb21tYW5kKGxv
bmcgcHJvdG9jb2xfY2FsbElkKSA9IDA7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IK
QEAgLTEzMCwxMSArMTMwLDE0IEBAIHB1YmxpYzoKIAogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9i
amVjdHMuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlci5oPgorI2luY2x1ZGUgPHR1cGxlPgorI2luY2x1ZGUgPHd0Zi9FeHBlY3RlZC5oPgorI2lu
Y2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgog
CiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisK
IAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogY2xhc3MgQWx0
ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXI7CkBAIC0xNDIsNyArMTQ1LDcgQEAgY2xhc3Mg
QWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXI7CiAKIGNsYXNzIERvbWFpbkJhY2tlbmRE
aXNwYXRjaGVySGFuZGxlciB7CiBwdWJsaWM6Ci0gICAgdmlydHVhbCB2b2lkIENvbW1hbmQoRXJy
b3JTdHJpbmcmKSA9IDA7CisgICAgdmlydHVhbCBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lk
PiBDb21tYW5kKCkgPSAwOwogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgfkRvbWFpbkJhY2tlbmRE
aXNwYXRjaGVySGFuZGxlcigpOwogfTsKQEAgLTE1MCw5ICsxNTMsOSBAQCBwcm90ZWN0ZWQ6CiBj
bGFzcyBEb21haW5CYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBTdXBwbGVtZW50YWxC
YWNrZW5kRGlzcGF0Y2hlciB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxEb21haW5CYWNrZW5k
RGlzcGF0Y2hlcj4gY3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiwgRG9tYWluQmFja2VuZERpc3Bh
dGNoZXJIYW5kbGVyKik7Ci0gICAgdm9pZCBkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3Qg
U3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkgZmluYWw7CisgICAg
dm9pZCBkaXNwYXRjaChsb25nIHByb3RvY29sX2NhbGxJZCwgY29uc3QgU3RyaW5nJiBwcm90b2Nv
bF9tZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfbWVzc2FnZSkgZmluYWw7CiBw
cml2YXRlOgotICAgIHZvaWQgQ29tbWFuZChsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9i
amVjdD4mJiBwYXJhbWV0ZXJzKTsKKyAgICB2b2lkIENvbW1hbmQobG9uZyBwcm90b2NsX2NhbGxJ
ZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9wYXJhbWV0ZXJzKTsKICNpZiBFTkFC
TEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIHB1YmxpYzoKICAgICB2b2lkIHNl
dEFsdGVybmF0ZURpc3BhdGNoZXIoQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIqIGFs
dGVybmF0ZURpc3BhdGNoZXIpIHsgbV9hbHRlcm5hdGVEaXNwYXRjaGVyID0gYWx0ZXJuYXRlRGlz
cGF0Y2hlcjsgfQpAQCAtMjAxLDkgKzIwNCw3IEBAIHByaXZhdGU6CiAjaW5jbHVkZSAiVGVzdEJh
Y2tlbmREaXNwYXRjaGVycy5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
RnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgogI2luY2x1ZGUg
PHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAog
I2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogI2luY2x1ZGUgIlRl
c3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKQEAgLTIyNSwzOCArMjI2LDM4IEBAIERv
bWFpbkJhY2tlbmREaXNwYXRjaGVyOjpEb21haW5CYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlz
cGF0Y2hlciYgYmFja2VuZERpc3BhCiAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJE
aXNwYXRjaGVyRm9yRG9tYWluKCJEb21haW4iX3MsIHRoaXMpOwogfQogCi12b2lkIERvbWFpbkJh
Y2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBt
ZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkKK3ZvaWQgRG9tYWluQmFja2VuZERp
c3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBjb25zdCBTdHJpbmcmIHBy
b3RvY29sX21ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9tZXNzYWdlKQogewog
ICAgIFJlZjxEb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7CiAKLSAgICBS
ZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzOwotICAgIG1lc3NhZ2UtPmdldE9iamVjdCgi
cGFyYW1zIl9zLCBwYXJhbWV0ZXJzKTsKKyAgICBhdXRvIHByb3RvY29sX3BhcmFtZXRlcnMgPSBw
cm90b2NvbF9tZXNzYWdlLT5nZXRPYmplY3QoInBhcmFtcyJfcyk7CiAKLSAgICBpZiAobWV0aG9k
ID09ICJDb21tYW5kIikgewotICAgICAgICBDb21tYW5kKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJh
bWV0ZXJzKSk7CisgICAgaWYgKHByb3RvY29sX21ldGhvZCA9PSAiQ29tbWFuZCIpIHsKKyAgICAg
ICAgQ29tbWFuZChwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJvdG9jb2xfcGFyYW1ldGVycykp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVw
b3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRG9t
YWluLiIgKyBtZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7CisgICAgbV9iYWNrZW5kRGlzcGF0
Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91
bmQsICInRG9tYWluLiIgKyBwcm90b2NvbF9tZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7CiB9
CiAKLXZvaWQgRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkNvbW1hbmQobG9uZyByZXF1ZXN0SWQs
IFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCit2b2lkIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpD
b21tYW5kKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQogewog
I2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogICAgIGlmIChtX2Fs
dGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5Db21t
YW5kKHJlcXVlc3RJZCk7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+Q29tbWFuZChw
cm90b2NvbF9jYWxsSWQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmIC8vIEVOQUJM
RShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogCi0gICAgRXJyb3JTdHJpbmcgZXJy
b3I7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUo
KTsKLSAgICBtX2FnZW50LT5Db21tYW5kKGVycm9yKTsKKyAgICBhdXRvIHJlc3VsdCA9IG1fYWdl
bnQtPkNvbW1hbmQoKTsKKyAgICBpZiAoIXJlc3VsdCkgeworICAgICAgICBBU1NFUlQoIXJlc3Vs
dC5lcnJvcigpLmlzRW1wdHkoKSk7CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9y
dFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCByZXN1bHQuZXJy
b3IoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBpZiAoIWVycm9yLmxlbmd0aCgp
KQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBX
VEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3Bh
dGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9y
LCBXVEZNb3ZlKGVycm9yKSk7CisgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046
Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNl
KHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSksIGZhbHNlKTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCkBAIC0yOTcsNiArMjk4LDcgQEAgdm9pZCBE
b21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Q29tbWFuZChsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpT
T046Ok9iamVjdD4mJikKIAogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNs
dWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKQEAgLTM0
OSwxNiArMzUxLDE1IEBAIHByaXZhdGU6CiAjaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hl
cnMuaCIKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVy
Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9y
IHsKIAogdm9pZCBEb21haW5Gcm9udGVuZERpc3BhdGNoZXI6OkV2ZW50KCkKIHsKLSAgICBSZWY8
SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAg
anNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiRG9tYWluLkV2ZW50Il9zKTsKKyAg
ICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAg
ICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJEb21haW4uRXZl
bnQiX3MpOwogCi0gICAgbV9mcm9udGVuZFJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRv
SlNPTlN0cmluZygpKTsKKyAgICBtX2Zyb250ZW5kUm91dGVyLnNlbmRFdmVudChwcm90b2NvbF9q
c29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKQEAgLTM5OCw3ICszOTksOSBAQCB2b2lkIERvbWFpbkZyb250ZW5kRGlzcGF0Y2hlcjo6RXZl
bnQoKQogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQ
cm90b2NvbFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3
dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtNDUyLDgg
KzQ1NSw3IEBAIG5hbWVzcGFjZSBQcm90b2NvbCB7CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+
Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25z
Lmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC01MDksNyArNTExLDcgQEAgY2xhc3Mg
T2JqQ0luc3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEFsdGVy
bmF0ZURvbWFpbkJhY2tlbmQKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoK
ICAgICBPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXIoaWQ8VGVzdFByb3RvY29s
RG9tYWluRG9tYWluSGFuZGxlcj4gaGFuZGxlcikgeyBtX2RlbGVnYXRlID0gaGFuZGxlcjsgfQot
ICAgIHZvaWQgQ29tbWFuZChsb25nIHJlcXVlc3RJZCkgZmluYWw7CisgICAgdm9pZCBDb21tYW5k
KGxvbmcgcHJvdG9jb2xfY2FsbElkKSBmaW5hbDsKIHByaXZhdGU6CiAgICAgUmV0YWluUHRyPGlk
PFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+PiBtX2RlbGVnYXRlOwogfTsKQEAgLTU1
NywyMSArNTU5LDIyIEBAIHByaXZhdGU6CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCi12b2lk
IE9iakNJbnNwZWN0b3JEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Q29tbWFuZChsb25nIHJlcXVl
c3RJZCkKK3ZvaWQgT2JqQ0luc3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpDb21tYW5k
KGxvbmcgcHJvdG9jb2xfY2FsbElkKQogewogICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNU
b1NlbGVjdG9yOkBzZWxlY3RvcihDb21tYW5kV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxi
YWNrOildKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJy
b3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRG9tYWlu
LkNvbW1hbmQnIHdhcyBub3QgZm91bmQiX3MpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigp
LT5yZXBvcnRQcm90b2NvbEVycm9yKHByb3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6
Ok1ldGhvZE5vdEZvdW5kLCAiJ0RvbWFpbi5Db21tYW5kJyB3YXMgbm90IGZvdW5kIl9zKTsKICAg
ICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAogICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJv
cikgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJl
cXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CisgICAgICAg
IGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocHJvdG9jb2xfY2FsbElk
LCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKICAgICAgICAgYmFja2Vu
ZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKICAgICB9OwogCiAgICAgaWQgc3Vj
Y2Vzc0NhbGxiYWNrID0gXnsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3Bv
bnNlKHJlcXVlc3RJZCwgSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSwgZmFsc2UpOworICAgICAgICBh
dXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAg
ICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHByb3RvY29sX2NhbGxJZCwgV1RG
TW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSksIGZhbHNlKTsKICAgICB9OwogCiAgICAgW21fZGVs
ZWdhdGUgQ29tbWFuZFdpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxi
YWNrOnN1Y2Nlc3NDYWxsYmFja107CkBAIC03NzMsOSArNzc2LDkgQEAgdXNpbmcgbmFtZXNwYWNl
IEluc3BlY3RvcjsKIHsKICAgICBjb25zdCBGcm9udGVuZFJvdXRlciYgcm91dGVyID0gX2NvbnRy
b2xsZXItPmZyb250ZW5kUm91dGVyKCk7CiAKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVz
c2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAganNvbk1lc3NhZ2UtPnNldFN0cmlu
ZygibWV0aG9kIl9zLCAiRG9tYWluLkV2ZW50Il9zKTsKLSAgICByb3V0ZXIuc2VuZEV2ZW50KGpz
b25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7CisgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2Fn
ZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNl
dFN0cmluZygibWV0aG9kIl9zLCAiRG9tYWluLkV2ZW50Il9zKTsKKyAgICByb3V0ZXIuc2VuZEV2
ZW50KHByb3RvY29sX2pzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7CiB9CiAKIEBlbmQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9l
eHBlY3RlZC9jb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uLXJlc3VsdCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9jb21tYW5k
cy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uLXJlc3VsdAppbmRleCBkMWM2OWIwMzFjZGI0NzFk
MThhMmU0OTc4ZjIxMjdiMGVjZDQ3YzUyLi40Y2U2ZmMzZDIxMzZhNGViNGFiMjI0NjUxYTliZmIx
NjVlNDUzMGY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1hc3luYy1hdHRyaWJ1dGUuanNvbi1y
ZXN1bHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2V4cGVjdGVkL2NvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmlidXRlLmpzb24tcmVzdWx0CkBAIC03
Myw3ICs3Myw3IEBAIEluc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIkRhdGFiYXNlIiwg
bnVsbCk7CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIAot
I2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2Jq
ZWN0cy5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIu
aD4KIApAQCAtOTEsMTAgKzkxLDEwIEBAIHByaXZhdGU6CiBjbGFzcyBBbHRlcm5hdGVEYXRhYmFz
ZUJhY2tlbmREaXNwYXRjaGVyIDogcHVibGljIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsK
IHB1YmxpYzoKICAgICB2aXJ0dWFsIH5BbHRlcm5hdGVEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVy
KCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1
ZXMobG9uZyBjYWxsSWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5
KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFs
dWVzKGxvbmcgY2FsbElkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVy
eSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU1FMU3luYyhsb25nIGNhbGxJZCwgaW50
IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnkpID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgZXhlY3V0ZVNRTEFzeW5jKGxvbmcgY2FsbElkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29u
c3QgU3RyaW5nJiBpbl9xdWVyeSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU1FMU3lu
Y09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBpbnQgZGF0YWJhc2VJ
ZCwgY29uc3QgU3RyaW5nJiBxdWVyeSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU1FM
QXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIHByb3RvY29sX2NhbGxJZCwgaW50IGRhdGFi
YXNlSWQsIGNvbnN0IFN0cmluZyYgcXVlcnkpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0
ZVNRTFN5bmMobG9uZyBwcm90b2NvbF9jYWxsSWQsIGludCBkYXRhYmFzZUlkLCBjb25zdCBTdHJp
bmcmIHF1ZXJ5KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVTUUxBc3luYyhsb25nIHBy
b3RvY29sX2NhbGxJZCwgaW50IGRhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgcXVlcnkpID0gMDsK
IH07CiAKIH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgpAQCAtMTM2LDExICsxMzYsMTQgQEAgcHVi
bGljOgogCiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8dHVwbGU+
CisjaW5jbHVkZSA8d3RmL0V4cGVjdGVkLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAj
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3Igewog
Ci10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKwogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9B
TFRFUk5BVEVfRElTUEFUQ0hFUlMpCiBjbGFzcyBBbHRlcm5hdGVEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVyOwpAQCAtMTQ4LDI3ICsxNTEsMjAgQEAgY2xhc3MgQWx0ZXJuYXRlRGF0YWJhc2VCYWNr
ZW5kRGlzcGF0Y2hlcjsKIAogY2xhc3MgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIg
ewogcHVibGljOgotICAgIC8vIE5hbWVkIGFmdGVyIHBhcmFtZXRlciAncHJpbnRDb2xvcicgd2hp
bGUgZ2VuZXJhdGluZyBjb21tYW5kL2V2ZW50IGV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5W
YWx1ZXMuCi0gICAgZW51bSBjbGFzcyBQcmludENvbG9yIHsKLSAgICAgICAgQ3lhbiA9IDMsCi0g
ICAgICAgIE1hZ2VudGEgPSA0LAotICAgICAgICBZZWxsb3cgPSA1LAotICAgICAgICBCbGFjayA9
IDYsCi0gICAgfTsgLy8gZW51bSBjbGFzcyBQcmludENvbG9yCi0gICAgdmlydHVhbCB2b2lkIGV4
ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMoRXJyb3JTdHJpbmcmLCBpbnQgaW5fZGF0
YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSwgUmVmUHRyPEpTT046OkFycmF5T2Y8U3Ry
aW5nPj4mIG9wdF9vdXRfY29sdW1uTmFtZXMsIE9wdGlvbmFsPFN0cmluZz4mIG9wdF9vdXRfbm90
ZXMsIE9wdGlvbmFsPGRvdWJsZT4mIG9wdF9vdXRfdGltZXN0YW1wLCBPcHRpb25hbDxKU09OOjpP
YmplY3Q+JiBvcHRfb3V0X3ZhbHVlcywgT3B0aW9uYWw8SlNPTjo6VmFsdWU+JiBvcHRfb3V0X3Bh
eWxvYWQsIE9wdGlvbmFsPGludD4mIG9wdF9vdXRfZGF0YWJhc2VJZCwgUmVmUHRyPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4mIG9wdF9vdXRfc3FsRXJyb3IsIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzKiBvcHRfb3V0X3NjcmVlbkNvbG9y
LCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4mIG9wdF9v
dXRfYWx0ZXJuYXRlQ29sb3JzLCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UHJp
bnRDb2xvciogb3B0X291dF9wcmludENvbG9yKSA9IDA7CisgICAgdmlydHVhbCBQcm90b2NvbDo6
RXJyb3JTdHJpbmdPcjxzdGQ6OnR1cGxlPFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+IC8q
IG9wdF9jb2x1bW5OYW1lcyAqLywgU3RyaW5nIC8qIG9wdF9ub3RlcyAqLywgT3B0aW9uYWw8ZG91
YmxlPiAvKiBvcHRfdGltZXN0YW1wICovLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiAvKiBvcHRfdmFs
dWVzICovLCBSZWZQdHI8SlNPTjo6VmFsdWU+IC8qIG9wdF9wYXlsb2FkICovLCBPcHRpb25hbDxp
bnQ+IC8qIG9wdF9kYXRhYmFzZUlkICovLCBSZWZQdHI8UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJv
cj4gLyogb3B0X3NxbEVycm9yICovLCBPcHRpb25hbDxQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1h
cnlDb2xvcnM+IC8qIG9wdF9zY3JlZW5Db2xvciAqLywgUmVmUHRyPFByb3RvY29sOjpEYXRhYmFz
ZTo6Q29sb3JMaXN0PiAvKiBvcHRfYWx0ZXJuYXRlQ29sb3JzICovLCBTdHJpbmcgLyogb3B0X3By
aW50Q29sb3IgKi8+PiBleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGludCBkYXRh
YmFzZUlkLCBjb25zdCBTdHJpbmcmIHF1ZXJ5KSA9IDA7CiAgICAgY2xhc3MgRXhlY3V0ZVNRTEFz
eW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNDYWxsYmFjayA6IHB1YmxpYyBCYWNrZW5kRGlzcGF0Y2hl
cjo6Q2FsbGJhY2tCYXNlIHsKICAgICBwdWJsaWM6CiAgICAgICAgIEV4ZWN1dGVTUUxBc3luY09w
dGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJhY2soUmVmPEJhY2tlbmREaXNwYXRjaGVyPiYmLCBpbnQg
aWQpOwotICAgICAgICB2b2lkIHNlbmRTdWNjZXNzKFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmlu
Zz4+JiYgY29sdW1uTmFtZXMsIE9wdGlvbmFsPFN0cmluZz4mIG5vdGVzLCBPcHRpb25hbDxkb3Vi
bGU+JiB0aW1lc3RhbXAsIE9wdGlvbmFsPEpTT046Ok9iamVjdD4mIHZhbHVlcywgT3B0aW9uYWw8
SlNPTjo6VmFsdWU+JiBwYXlsb2FkLCBPcHRpb25hbDxpbnQ+JiBkYXRhYmFzZUlkLCBSZWZQdHI8
SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiYmIHNxbEVycm9yLCBPcHRpb25h
bDxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4gc2NyZWVuQ29s
b3IsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiYmIGFs
dGVybmF0ZUNvbG9ycywgT3B0aW9uYWw8RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6
OlByaW50Q29sb3I+IHByaW50Q29sb3IpOworICAgICAgICB2b2lkIHNlbmRTdWNjZXNzKFJlZlB0
cjxKU09OOjpBcnJheU9mPFN0cmluZz4+JiYgb3B0X2NvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcm
IG9wdF9ub3RlcywgT3B0aW9uYWw8ZG91YmxlPiYmIG9wdF90aW1lc3RhbXAsIFJlZlB0cjxKU09O
OjpPYmplY3Q+JiYgb3B0X3ZhbHVlcywgUmVmUHRyPEpTT046OlZhbHVlPiYmIG9wdF9wYXlsb2Fk
LCBPcHRpb25hbDxpbnQ+JiYgb3B0X2RhdGFiYXNlSWQsIFJlZlB0cjxQcm90b2NvbDo6RGF0YWJh
c2U6OkVycm9yPiYmIG9wdF9zcWxFcnJvciwgT3B0aW9uYWw8UHJvdG9jb2w6OkRhdGFiYXNlOjpQ
cmltYXJ5Q29sb3JzPiYmIG9wdF9zY3JlZW5Db2xvciwgUmVmUHRyPFByb3RvY29sOjpEYXRhYmFz
ZTo6Q29sb3JMaXN0PiYmIG9wdF9hbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyYgb3B0X3By
aW50Q29sb3IpOwogICAgIH07Ci0gICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVTUUxBc3luY09wdGlv
bmFsUmV0dXJuVmFsdWVzKGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5
LCBSZWY8RXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNDYWxsYmFjaz4mJiBjYWxs
YmFjaykgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU1FMU3luYyhFcnJvclN0cmluZyYs
IGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5LCBSZWZQdHI8SlNPTjo6
QXJyYXlPZjxTdHJpbmc+PiYgb3V0X2NvbHVtbk5hbWVzLCBTdHJpbmcqIG91dF9ub3RlcywgZG91
YmxlKiBvdXRfdGltZXN0YW1wLCBKU09OOjpPYmplY3QqIG91dF92YWx1ZXMsIEpTT046OlZhbHVl
KiBvdXRfcGF5bG9hZCwgaW50KiBvdXRfZGF0YWJhc2VJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4mIG91dF9zcWxFcnJvciwgUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+JiBvdXRfYWx0ZXJuYXRlQ29sb3JzLCBJbnNw
ZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyogb3V0X3NjcmVlbkNvbG9y
LCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UHJpbnRDb2xvciogb3V0X3ByaW50
Q29sb3IpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1
cm5WYWx1ZXMoaW50IGRhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgcXVlcnksIFJlZjxFeGVjdXRl
U1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc0NhbGxiYWNrPiYmKSA9IDA7CisgICAgdmlydHVh
bCBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxzdGQ6OnR1cGxlPFJlZjxKU09OOjpBcnJheU9mPFN0
cmluZz4+IC8qIGNvbHVtbk5hbWVzICovLCBTdHJpbmcgLyogbm90ZXMgKi8sIGRvdWJsZSAvKiB0
aW1lc3RhbXAgKi8sIFJlZjxKU09OOjpPYmplY3Q+IC8qIHZhbHVlcyAqLywgUmVmPEpTT046OlZh
bHVlPiAvKiBwYXlsb2FkICovLCBpbnQgLyogZGF0YWJhc2VJZCAqLywgUmVmPFByb3RvY29sOjpE
YXRhYmFzZTo6RXJyb3I+IC8qIHNxbEVycm9yICovLCBSZWY8UHJvdG9jb2w6OkRhdGFiYXNlOjpD
b2xvckxpc3Q+IC8qIGFsdGVybmF0ZUNvbG9ycyAqLywgUHJvdG9jb2w6OkRhdGFiYXNlOjpQcmlt
YXJ5Q29sb3JzIC8qIHNjcmVlbkNvbG9yICovLCBTdHJpbmcgLyogcHJpbnRDb2xvciAqLz4+IGV4
ZWN1dGVTUUxTeW5jKGludCBkYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIHF1ZXJ5KSA9IDA7CiAg
ICAgY2xhc3MgRXhlY3V0ZVNRTEFzeW5jQ2FsbGJhY2sgOiBwdWJsaWMgQmFja2VuZERpc3BhdGNo
ZXI6OkNhbGxiYWNrQmFzZSB7CiAgICAgcHVibGljOgogICAgICAgICBFeGVjdXRlU1FMQXN5bmND
YWxsYmFjayhSZWY8QmFja2VuZERpc3BhdGNoZXI+JiYsIGludCBpZCk7Ci0gICAgICAgIHZvaWQg
c2VuZFN1Y2Nlc3MoUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4mJiBjb2x1bW5OYW1lcywg
Y29uc3QgU3RyaW5nJiBub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgSlNPTjo6T2JqZWN0IHZhbHVl
cywgSlNPTjo6VmFsdWUgcGF5bG9hZCwgaW50IGRhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+JiYgc3FsRXJyb3IsIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzIHNjcmVlbkNvbG9yLCBSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4mJiBhbHRlcm5hdGVDb2xvcnMsIERhdGFi
YXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQcmludENvbG9yIHByaW50Q29sb3IpOworICAg
ICAgICB2b2lkIHNlbmRTdWNjZXNzKFJlZjxKU09OOjpBcnJheU9mPFN0cmluZz4+JiYgY29sdW1u
TmFtZXMsIGNvbnN0IFN0cmluZyYgbm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIFJlZjxKU09OOjpP
YmplY3Q+JiYgdmFsdWVzLCBSZWY8SlNPTjo6VmFsdWU+JiYgcGF5bG9hZCwgaW50IGRhdGFiYXNl
SWQsIFJlZjxQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiYmIHNxbEVycm9yLCBQcm90b2NvbDo6
RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMgc2NyZWVuQ29sb3IsIFJlZjxQcm90b2NvbDo6RGF0YWJh
c2U6OkNvbG9yTGlzdD4mJiBhbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyYgcHJpbnRDb2xv
cik7CiAgICAgfTsKLSAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNRTEFzeW5jKGludCBpbl9kYXRh
YmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5LCBSZWY8RXhlY3V0ZVNRTEFzeW5jQ2FsbGJh
Y2s+JiYgY2FsbGJhY2spID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNRTEFzeW5jKGlu
dCBkYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIHF1ZXJ5LCBSZWY8RXhlY3V0ZVNRTEFzeW5jQ2Fs
bGJhY2s+JiYpID0gMDsKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIH5EYXRhYmFzZUJhY2tlbmRE
aXNwYXRjaGVySGFuZGxlcigpOwogfTsKQEAgLTE3NiwxMiArMTcyLDEyIEBAIHByb3RlY3RlZDoK
IGNsYXNzIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgU3VwcGxlbWVu
dGFsQmFja2VuZERpc3BhdGNoZXIgewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8RGF0YWJhc2VC
YWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiwgRGF0YWJhc2VCYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKLSAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVzdElk
LCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKSBmaW5h
bDsKKyAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBjb25zdCBTdHJpbmcm
IHByb3RvY29sX21ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9tZXNzYWdlKSBm
aW5hbDsKIHByaXZhdGU6Ci0gICAgdm9pZCBleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFs
dWVzKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOwot
ICAgIHZvaWQgZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyByZXF1ZXN0
SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7Ci0gICAgdm9pZCBleGVjdXRl
U1FMU3luYyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJz
KTsKLSAgICB2b2lkIGV4ZWN1dGVTUUxBc3luYyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046
Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKKyAgICB2b2lkIGV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxS
ZXR1cm5WYWx1ZXMobG9uZyBwcm90b2NsX2NhbGxJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBw
cm90b2NvbF9wYXJhbWV0ZXJzKTsKKyAgICB2b2lkIGV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0
dXJuVmFsdWVzKGxvbmcgcHJvdG9jbF9jYWxsSWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcHJv
dG9jb2xfcGFyYW1ldGVycyk7CisgICAgdm9pZCBleGVjdXRlU1FMU3luYyhsb25nIHByb3RvY2xf
Y2FsbElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX3BhcmFtZXRlcnMpOworICAg
IHZvaWQgZXhlY3V0ZVNRTEFzeW5jKGxvbmcgcHJvdG9jbF9jYWxsSWQsIFJlZlB0cjxKU09OOjpP
YmplY3Q+JiYgcHJvdG9jb2xfcGFyYW1ldGVycyk7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRF
Uk5BVEVfRElTUEFUQ0hFUlMpCiBwdWJsaWM6CiAgICAgdm9pZCBzZXRBbHRlcm5hdGVEaXNwYXRj
aGVyKEFsdGVybmF0ZURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIqIGFsdGVybmF0ZURpc3BhdGNo
ZXIpIHsgbV9hbHRlcm5hdGVEaXNwYXRjaGVyID0gYWx0ZXJuYXRlRGlzcGF0Y2hlcjsgfQpAQCAt
MjMwLDkgKzIyNiw3IEBAIHByaXZhdGU6CiAjaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVy
cy5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIu
aD4KLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ry
b3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogI2lmIEVOQUJMRShJTlNQ
RUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNr
ZW5kRGlzcGF0Y2hlcnMuaCIKQEAgLTI1NCwzNyArMjQ4LDM2IEBAIERhdGFiYXNlQmFja2VuZERp
c3BhdGNoZXI6OkRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImIGJh
Y2tlbmRECiAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRjaGVyRm9yRG9t
YWluKCJEYXRhYmFzZSJfcywgdGhpcyk7CiB9CiAKLXZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0
Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8
SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpCit2b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6
OmRpc3BhdGNoKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBjb25zdCBTdHJpbmcmIHByb3RvY29sX21l
dGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9tZXNzYWdlKQogewogICAgIFJlZjxE
YXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKIAotICAgIFJlZlB0cjxK
U09OOjpPYmplY3Q+IHBhcmFtZXRlcnM7Ci0gICAgbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJhbXMi
X3MsIHBhcmFtZXRlcnMpOworICAgIGF1dG8gcHJvdG9jb2xfcGFyYW1ldGVycyA9IHByb3RvY29s
X21lc3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9zKTsKIAotICAgIGlmIChtZXRob2QgPT0gImV4
ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMiKSB7Ci0gICAgICAgIGV4ZWN1dGVTUUxT
eW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsK
KyAgICBpZiAocHJvdG9jb2xfbWV0aG9kID09ICJleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJu
VmFsdWVzIikgeworICAgICAgICBleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKHBy
b3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9wYXJhbWV0ZXJzKSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9Ci0gICAgaWYgKG1ldGhvZCA9PSAiZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxS
ZXR1cm5WYWx1ZXMiKSB7Ci0gICAgICAgIGV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFs
dWVzKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7CisgICAgaWYgKHByb3RvY29sX21l
dGhvZCA9PSAiZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMiKSB7CisgICAgICAg
IGV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKHByb3RvY29sX2NhbGxJZCwgV1RG
TW92ZShwcm90b2NvbF9wYXJhbWV0ZXJzKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAg
aWYgKG1ldGhvZCA9PSAiZXhlY3V0ZVNRTFN5bmMiKSB7Ci0gICAgICAgIGV4ZWN1dGVTUUxTeW5j
KHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7CisgICAgaWYgKHByb3RvY29sX21ldGhv
ZCA9PSAiZXhlY3V0ZVNRTFN5bmMiKSB7CisgICAgICAgIGV4ZWN1dGVTUUxTeW5jKHByb3RvY29s
X2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9wYXJhbWV0ZXJzKSk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9Ci0gICAgaWYgKG1ldGhvZCA9PSAiZXhlY3V0ZVNRTEFzeW5jIikgewotICAgICAgICBl
eGVjdXRlU1FMQXN5bmMocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKKyAgICBpZiAo
cHJvdG9jb2xfbWV0aG9kID09ICJleGVjdXRlU1FMQXN5bmMiKSB7CisgICAgICAgIGV4ZWN1dGVT
UUxBc3luYyhwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJvdG9jb2xfcGFyYW1ldGVycykpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0
UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRGF0YWJh
c2UuIiArIG1ldGhvZCArICInIHdhcyBub3QgZm91bmQiKTsKKyAgICBtX2JhY2tlbmREaXNwYXRj
aGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3Vu
ZCwgIidEYXRhYmFzZS4iICsgcHJvdG9jb2xfbWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOwog
fQogCi12b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxTeW5jT3B0aW9u
YWxSZXR1cm5WYWx1ZXMobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFy
YW1ldGVycykKK3ZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTFN5bmNP
cHRpb25hbFJldHVyblZhbHVlcyhsb25nIHByb3RvY29sX2NhbGxJZCwgUmVmUHRyPEpTT046Ok9i
amVjdD4mJiBwcm90b2NvbF9wYXJhbWV0ZXJzKQogewotICAgIGludCBpbl9kYXRhYmFzZUlkID0g
bV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0SW50ZWdlcihwYXJhbWV0ZXJzLmdldCgpLCAiZGF0YWJh
c2VJZCJfcywgbnVsbHB0cik7Ci0gICAgU3RyaW5nIGluX3F1ZXJ5ID0gbV9iYWNrZW5kRGlzcGF0
Y2hlci0+Z2V0U3RyaW5nKHBhcmFtZXRlcnMuZ2V0KCksICJxdWVyeSJfcywgbnVsbHB0cik7Cisg
ICAgYXV0byBpbl9kYXRhYmFzZUlkID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0SW50ZWdlcihw
cm90b2NvbF9wYXJhbWV0ZXJzLmdldCgpLCAiZGF0YWJhc2VJZCJfcywgdHJ1ZSk7CisgICAgYXV0
byBpbl9xdWVyeSA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFN0cmluZyhwcm90b2NvbF9wYXJh
bWV0ZXJzLmdldCgpLCAicXVlcnkiX3MsIHRydWUpOwogICAgIGlmIChtX2JhY2tlbmREaXNwYXRj
aGVyLT5oYXNQcm90b2NvbEVycm9ycygpKSB7CiAgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXIt
PnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OkludmFsaWRQYXJhbXMsICJT
b21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJ0RhdGFiYXNlLmV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxS
ZXR1cm5WYWx1ZXMnIGNhbid0IGJlIHByb2Nlc3NlZCJfcyk7CiAgICAgICAgIHJldHVybjsKQEAg
LTI5Miw4NSArMjg1LDc2IEBAIHZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0
ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIHJlcXVlc3RJCiAKICNpZiBFTkFCTEUo
SU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKICAgICBpZiAobV9hbHRlcm5hdGVEaXNw
YXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+ZXhlY3V0ZVNRTFN5bmNP
cHRpb25hbFJldHVyblZhbHVlcyhyZXF1ZXN0SWQsIGluX2RhdGFiYXNlSWQsIGluX3F1ZXJ5KTsK
KyAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5leGVjdXRlU1FMU3luY09wdGlvbmFsUmV0
dXJuVmFsdWVzKHByb3RvY29sX2NhbGxJZCwgKmluX2RhdGFiYXNlSWQsIGluX3F1ZXJ5KTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKIAotICAgIEVycm9yU3RyaW5nIGVycm9yOwotICAgIFJlZjxKU09OOjpP
YmplY3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgUmVmUHRyPEpTT046
OkFycmF5T2Y8U3RyaW5nPj4gb3V0X2NvbHVtbk5hbWVzOwotICAgIE9wdGlvbmFsPFN0cmluZz4g
b3V0X25vdGVzOwotICAgIE9wdGlvbmFsPGRvdWJsZT4gb3V0X3RpbWVzdGFtcDsKLSAgICBPcHRp
b25hbDxKU09OOjpPYmplY3Q+IG91dF92YWx1ZXM7Ci0gICAgT3B0aW9uYWw8SlNPTjo6VmFsdWU+
IG91dF9wYXlsb2FkOwotICAgIE9wdGlvbmFsPGludD4gb3V0X2RhdGFiYXNlSWQ7Ci0gICAgUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4gb3V0X3NxbEVycm9yOwot
ICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzIG91dF9zY3Jl
ZW5Db2xvcjsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9y
TGlzdD4gb3V0X2FsdGVybmF0ZUNvbG9yczsKLSAgICBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVy
SGFuZGxlcjo6UHJpbnRDb2xvciBvdXRfcHJpbnRDb2xvcjsKLSAgICBtX2FnZW50LT5leGVjdXRl
U1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGVycm9yLCBpbl9kYXRhYmFzZUlkLCBpbl9xdWVy
eSwgb3V0X2NvbHVtbk5hbWVzLCBvdXRfbm90ZXMsIG91dF90aW1lc3RhbXAsIG91dF92YWx1ZXMs
IG91dF9wYXlsb2FkLCBvdXRfZGF0YWJhc2VJZCwgb3V0X3NxbEVycm9yLCBvdXRfc2NyZWVuQ29s
b3IsIG91dF9hbHRlcm5hdGVDb2xvcnMsIG91dF9wcmludENvbG9yKTsKLQotICAgIGlmICghZXJy
b3IubGVuZ3RoKCkpIHsKLSAgICAgICAgaWYgKG91dF9jb2x1bW5OYW1lcykKLSAgICAgICAgICAg
IHJlc3VsdC0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCBvdXRfY29sdW1uTmFtZXMpOwotICAg
ICAgICBpZiAob3V0X25vdGVzLmhhc1ZhbHVlKCkpCi0gICAgICAgICAgICByZXN1bHQtPnNldFN0
cmluZygibm90ZXMiX3MsICpvdXRfbm90ZXMpOwotICAgICAgICBpZiAob3V0X3RpbWVzdGFtcC5o
YXNWYWx1ZSgpKQotICAgICAgICAgICAgcmVzdWx0LT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywg
Km91dF90aW1lc3RhbXApOwotICAgICAgICBpZiAob3V0X3ZhbHVlcy5oYXNWYWx1ZSgpKQotICAg
ICAgICAgICAgcmVzdWx0LT5zZXRPYmplY3QoInZhbHVlcyJfcywgKm91dF92YWx1ZXMpOwotICAg
ICAgICBpZiAob3V0X3BheWxvYWQuaGFzVmFsdWUoKSkKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0
VmFsdWUoInBheWxvYWQiX3MsICpvdXRfcGF5bG9hZCk7Ci0gICAgICAgIGlmIChvdXRfZGF0YWJh
c2VJZC5oYXNWYWx1ZSgpKQotICAgICAgICAgICAgcmVzdWx0LT5zZXRJbnRlZ2VyKCJkYXRhYmFz
ZUlkIl9zLCAqb3V0X2RhdGFiYXNlSWQpOwotICAgICAgICBpZiAob3V0X3NxbEVycm9yKQotICAg
ICAgICAgICAgcmVzdWx0LT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBvdXRfc3FsRXJyb3IpOwot
ICAgICAgICBpZiAob3V0X3NjcmVlbkNvbG9yLmhhc1ZhbHVlKCkpCi0gICAgICAgICAgICByZXN1
bHQtPnNldFN0cmluZygic2NyZWVuQ29sb3IiX3MsICpvdXRfc2NyZWVuQ29sb3IpOwotICAgICAg
ICBpZiAob3V0X2FsdGVybmF0ZUNvbG9ycykKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0QXJyYXko
ImFsdGVybmF0ZUNvbG9ycyJfcywgb3V0X2FsdGVybmF0ZUNvbG9ycyk7Ci0gICAgICAgIGlmIChv
dXRfcHJpbnRDb2xvci5oYXNWYWx1ZSgpKQotICAgICAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmco
InByaW50Q29sb3IiX3MsICpvdXRfcHJpbnRDb2xvcik7CisgICAgYXV0byByZXN1bHQgPSBtX2Fn
ZW50LT5leGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKCppbl9kYXRhYmFzZUlkLCBp
bl9xdWVyeSk7CisgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAgICAgQVNTRVJUKCFyZXN1bHQuZXJy
b3IoKS5pc0VtcHR5KCkpOworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90
b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgcmVzdWx0LmVycm9yKCkp
OworICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCi0gICAg
ICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUo
cmVzdWx0KSwgZmFsc2UpOwotICAgIGVsc2UKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+
cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1v
dmUoZXJyb3IpKTsKKworICAgIGF1dG8gW291dF9vcHRfY29sdW1uTmFtZXMsIG91dF9vcHRfbm90
ZXMsIG91dF9vcHRfdGltZXN0YW1wLCBvdXRfb3B0X3ZhbHVlcywgb3V0X29wdF9wYXlsb2FkLCBv
dXRfb3B0X2RhdGFiYXNlSWQsIG91dF9vcHRfc3FsRXJyb3IsIG91dF9vcHRfc2NyZWVuQ29sb3Is
IG91dF9vcHRfYWx0ZXJuYXRlQ29sb3JzLCBvdXRfb3B0X3ByaW50Q29sb3JdID0gV1RGTW92ZShy
ZXN1bHQudmFsdWUoKSk7CisKKyAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6
T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBpZiAoISFvdXRfb3B0X2NvbHVtbk5hbWVzKQorICAgICAg
ICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCBvdXRfb3B0
X2NvbHVtbk5hbWVzLnJlbGVhc2VOb25OdWxsKCkpOworICAgIGlmICghIW91dF9vcHRfbm90ZXMp
CisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm5vdGVzIl9zLCBvdXRf
b3B0X25vdGVzKTsKKyAgICBpZiAoISFvdXRfb3B0X3RpbWVzdGFtcCkKKyAgICAgICAgcHJvdG9j
b2xfanNvbk1lc3NhZ2UtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCAqb3V0X29wdF90aW1lc3Rh
bXApOworICAgIGlmICghIW91dF9vcHRfdmFsdWVzKQorICAgICAgICBwcm90b2NvbF9qc29uTWVz
c2FnZS0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIG91dF9vcHRfdmFsdWVzLnJlbGVhc2VOb25OdWxs
KCkpOworICAgIGlmICghIW91dF9vcHRfcGF5bG9hZCkKKyAgICAgICAgcHJvdG9jb2xfanNvbk1l
c3NhZ2UtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCBvdXRfb3B0X3BheWxvYWQucmVsZWFzZU5vbk51
bGwoKSk7CisgICAgaWYgKCEhb3V0X29wdF9kYXRhYmFzZUlkKQorICAgICAgICBwcm90b2NvbF9q
c29uTWVzc2FnZS0+c2V0SW50ZWdlcigiZGF0YWJhc2VJZCJfcywgKm91dF9vcHRfZGF0YWJhc2VJ
ZCk7CisgICAgaWYgKCEhb3V0X29wdF9zcWxFcnJvcikKKyAgICAgICAgcHJvdG9jb2xfanNvbk1l
c3NhZ2UtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIG91dF9vcHRfc3FsRXJyb3IucmVsZWFzZU5v
bk51bGwoKSk7CisgICAgaWYgKCEhb3V0X29wdF9zY3JlZW5Db2xvcikKKyAgICAgICAgcHJvdG9j
b2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygic2NyZWVuQ29sb3IiX3MsIFByb3RvY29sOjpUZXN0
SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUoKm91dF9vcHRfc2NyZWVuQ29sb3IpKTsKKyAg
ICBpZiAoISFvdXRfb3B0X2FsdGVybmF0ZUNvbG9ycykKKyAgICAgICAgcHJvdG9jb2xfanNvbk1l
c3NhZ2UtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIG91dF9vcHRfYWx0ZXJuYXRlQ29s
b3JzLnJlbGVhc2VOb25OdWxsKCkpOworICAgIGlmICghIW91dF9vcHRfcHJpbnRDb2xvcikKKyAg
ICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygicHJpbnRDb2xvciJfcywgb3V0
X29wdF9wcmludENvbG9yKTsKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2Uo
cHJvdG9jb2xfY2FsbElkLCBXVEZNb3ZlKHByb3RvY29sX2pzb25NZXNzYWdlKSwgZmFsc2UpOwog
fQogCiBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5jT3B0
aW9uYWxSZXR1cm5WYWx1ZXNDYWxsYmFjazo6RXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5W
YWx1ZXNDYWxsYmFjayhSZWY8QmFja2VuZERpc3BhdGNoZXI+JiYgYmFja2VuZERpc3BhdGNoZXIs
IGludCBpZCkgOiBCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlKFdURk1vdmUoYmFja2Vu
ZERpc3BhdGNoZXIpLCBpZCkgeyB9CiAKLXZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXI6OkV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJhY2s6OnNlbmRT
dWNjZXNzKFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+JiYgY29sdW1uTmFtZXMsIE9wdGlv
bmFsPFN0cmluZz4mIG5vdGVzLCBPcHRpb25hbDxkb3VibGU+JiB0aW1lc3RhbXAsIE9wdGlvbmFs
PEpTT046Ok9iamVjdD4mIHZhbHVlcywgT3B0aW9uYWw8SlNPTjo6VmFsdWU+JiBwYXlsb2FkLCBP
cHRpb25hbDxpbnQ+JiBkYXRhYmFzZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0
YWJhc2U6OkVycm9yPiYmIHNxbEVycm9yLCBPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpE
YXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4gc2NyZWVuQ29sb3IsIFJlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiYmIGFsdGVybmF0ZUNvbG9ycywgT3B0aW9uYWw8
RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3I+IHByaW50Q29sb3Ip
Cit2b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNP
cHRpb25hbFJldHVyblZhbHVlc0NhbGxiYWNrOjpzZW5kU3VjY2VzcyhSZWZQdHI8SlNPTjo6QXJy
YXlPZjxTdHJpbmc+PiYmIG9wdF9jb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBvcHRfbm90ZXMs
IE9wdGlvbmFsPGRvdWJsZT4mJiBvcHRfdGltZXN0YW1wLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYm
IG9wdF92YWx1ZXMsIFJlZlB0cjxKU09OOjpWYWx1ZT4mJiBvcHRfcGF5bG9hZCwgT3B0aW9uYWw8
aW50PiYmIG9wdF9kYXRhYmFzZUlkLCBSZWZQdHI8UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4m
JiBvcHRfc3FsRXJyb3IsIE9wdGlvbmFsPFByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9y
cz4mJiBvcHRfc2NyZWVuQ29sb3IsIFJlZlB0cjxQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlz
dD4mJiBvcHRfYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcmIG9wdF9wcmludENvbG9yKQog
ewotICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVh
dGUoKTsKLSAgICBpZiAoY29sdW1uTmFtZXMpCi0gICAgICAgIGpzb25NZXNzYWdlLT5zZXRBcnJh
eSgiY29sdW1uTmFtZXMiX3MsIGNvbHVtbk5hbWVzKTsKLSAgICBpZiAobm90ZXMuaGFzVmFsdWUo
KSkKLSAgICAgICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibm90ZXMiX3MsICpub3Rlcyk7Ci0g
ICAgaWYgKHRpbWVzdGFtcC5oYXNWYWx1ZSgpKQotICAgICAgICBqc29uTWVzc2FnZS0+c2V0RG91
YmxlKCJ0aW1lc3RhbXAiX3MsICp0aW1lc3RhbXApOwotICAgIGlmICh2YWx1ZXMuaGFzVmFsdWUo
KSkKLSAgICAgICAganNvbk1lc3NhZ2UtPnNldE9iamVjdCgidmFsdWVzIl9zLCAqdmFsdWVzKTsK
LSAgICBpZiAocGF5bG9hZC5oYXNWYWx1ZSgpKQotICAgICAgICBqc29uTWVzc2FnZS0+c2V0VmFs
dWUoInBheWxvYWQiX3MsICpwYXlsb2FkKTsKLSAgICBpZiAoZGF0YWJhc2VJZC5oYXNWYWx1ZSgp
KQotICAgICAgICBqc29uTWVzc2FnZS0+c2V0SW50ZWdlcigiZGF0YWJhc2VJZCJfcywgKmRhdGFi
YXNlSWQpOwotICAgIGlmIChzcWxFcnJvcikKLSAgICAgICAganNvbk1lc3NhZ2UtPnNldE9iamVj
dCgic3FsRXJyb3IiX3MsIHNxbEVycm9yKTsKLSAgICBpZiAoc2NyZWVuQ29sb3IuaGFzVmFsdWUo
KSkKLSAgICAgICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygic2NyZWVuQ29sb3IiX3MsICpzY3Jl
ZW5Db2xvcik7Ci0gICAgaWYgKGFsdGVybmF0ZUNvbG9ycykKLSAgICAgICAganNvbk1lc3NhZ2Ut
PnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIGFsdGVybmF0ZUNvbG9ycyk7Ci0gICAgaWYg
KHByaW50Q29sb3IuaGFzVmFsdWUoKSkKLSAgICAgICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygi
cHJpbnRDb2xvciJfcywgKnByaW50Q29sb3IpOwotICAgIENhbGxiYWNrQmFzZTo6c2VuZFN1Y2Nl
c3MoV1RGTW92ZShqc29uTWVzc2FnZSkpOworICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2Ug
PSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGlmICghIW9wdF9jb2x1bW5OYW1lcykKKyAg
ICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgb3B0
X2NvbHVtbk5hbWVzLnJlbGVhc2VOb25OdWxsKCkpOworICAgIGlmICghIW9wdF9ub3RlcykKKyAg
ICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygibm90ZXMiX3MsIG9wdF9ub3Rl
cyk7CisgICAgaWYgKCEhb3B0X3RpbWVzdGFtcCkKKyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3Nh
Z2UtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCAqb3B0X3RpbWVzdGFtcCk7CisgICAgaWYgKCEh
b3B0X3ZhbHVlcykKKyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldE9iamVjdCgidmFs
dWVzIl9zLCBvcHRfdmFsdWVzLnJlbGVhc2VOb25OdWxsKCkpOworICAgIGlmICghIW9wdF9wYXls
b2FkKQorICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0VmFsdWUoInBheWxvYWQiX3Ms
IG9wdF9wYXlsb2FkLnJlbGVhc2VOb25OdWxsKCkpOworICAgIGlmICghIW9wdF9kYXRhYmFzZUlk
KQorICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0SW50ZWdlcigiZGF0YWJhc2VJZCJf
cywgKm9wdF9kYXRhYmFzZUlkKTsKKyAgICBpZiAoISFvcHRfc3FsRXJyb3IpCisgICAgICAgIHBy
b3RvY29sX2pzb25NZXNzYWdlLT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBvcHRfc3FsRXJyb3Iu
cmVsZWFzZU5vbk51bGwoKSk7CisgICAgaWYgKCEhb3B0X3NjcmVlbkNvbG9yKQorICAgICAgICBw
cm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgUHJvdG9jb2w6
OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZSgqb3B0X3NjcmVlbkNvbG9yKSk7Cisg
ICAgaWYgKCEhb3B0X2FsdGVybmF0ZUNvbG9ycykKKyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3Nh
Z2UtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIG9wdF9hbHRlcm5hdGVDb2xvcnMucmVs
ZWFzZU5vbk51bGwoKSk7CisgICAgaWYgKCEhb3B0X3ByaW50Q29sb3IpCisgICAgICAgIHByb3Rv
Y29sX2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoInByaW50Q29sb3IiX3MsIG9wdF9wcmludENvbG9y
KTsKKyAgICBDYWxsYmFja0Jhc2U6OnNlbmRTdWNjZXNzKFdURk1vdmUocHJvdG9jb2xfanNvbk1l
c3NhZ2UpKTsKIH0KIAotdm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FM
QXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9i
amVjdD4mJiBwYXJhbWV0ZXJzKQordm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVj
dXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIHByb3RvY29sX2NhbGxJZCwgUmVm
UHRyPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9wYXJhbWV0ZXJzKQogewotICAgIGludCBpbl9k
YXRhYmFzZUlkID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0SW50ZWdlcihwYXJhbWV0ZXJzLmdl
dCgpLCAiZGF0YWJhc2VJZCJfcywgbnVsbHB0cik7Ci0gICAgU3RyaW5nIGluX3F1ZXJ5ID0gbV9i
YWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3RyaW5nKHBhcmFtZXRlcnMuZ2V0KCksICJxdWVyeSJfcywg
bnVsbHB0cik7CisgICAgYXV0byBpbl9kYXRhYmFzZUlkID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+
Z2V0SW50ZWdlcihwcm90b2NvbF9wYXJhbWV0ZXJzLmdldCgpLCAiZGF0YWJhc2VJZCJfcywgdHJ1
ZSk7CisgICAgYXV0byBpbl9xdWVyeSA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFN0cmluZyhw
cm90b2NvbF9wYXJhbWV0ZXJzLmdldCgpLCAicXVlcnkiX3MsIHRydWUpOwogICAgIGlmIChtX2Jh
Y2tlbmREaXNwYXRjaGVyLT5oYXNQcm90b2NvbEVycm9ycygpKSB7CiAgICAgICAgIG1fYmFja2Vu
ZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OkludmFs
aWRQYXJhbXMsICJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJ0RhdGFiYXNlLmV4ZWN1dGVTUUxB
c3luY09wdGlvbmFsUmV0dXJuVmFsdWVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiX3MpOwogICAgICAg
ICByZXR1cm47CkBAIC0zNzgsMjAgKzM2MiwxOCBAQCB2b2lkIERhdGFiYXNlQmFja2VuZERpc3Bh
dGNoZXI6OmV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgcmVxdWVzdAog
CiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAgICAgaWYgKG1f
YWx0ZXJuYXRlRGlzcGF0Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmV4
ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKHJlcXVlc3RJZCwgaW5fZGF0YWJhc2VJ
ZCwgaW5fcXVlcnkpOworICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmV4ZWN1dGVTUUxB
c3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKHByb3RvY29sX2NhbGxJZCwgKmluX2RhdGFiYXNlSWQs
IGluX3F1ZXJ5KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZiAvLyBFTkFCTEUoSU5T
UEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIAotICAgIFJlZjxEYXRhYmFzZUJhY2tlbmRE
aXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNDYWxs
YmFjaz4gY2FsbGJhY2sgPSBhZG9wdFJlZigqbmV3IERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc0NhbGxiYWNrKG1fYmFj
a2VuZERpc3BhdGNoZXIuY29weVJlZigpLCByZXF1ZXN0SWQpKTsKLSAgICBtX2FnZW50LT5leGVj
dXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhpbl9kYXRhYmFzZUlkLCBpbl9xdWVyeSwg
Y2FsbGJhY2suY29weVJlZigpKTsKLQorICAgIG1fYWdlbnQtPmV4ZWN1dGVTUUxBc3luY09wdGlv
bmFsUmV0dXJuVmFsdWVzKCppbl9kYXRhYmFzZUlkLCBpbl9xdWVyeSwgYWRvcHRSZWYoKm5ldyBE
YXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxS
ZXR1cm5WYWx1ZXNDYWxsYmFjayhtX2JhY2tlbmREaXNwYXRjaGVyLmNvcHlSZWYoKSwgcHJvdG9j
b2xfY2FsbElkKSkpOwogfQogCi12b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1
dGVTUUxTeW5jKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRl
cnMpCit2b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxTeW5jKGxvbmcg
cHJvdG9jb2xfY2FsbElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX3BhcmFtZXRl
cnMpCiB7Ci0gICAgaW50IGluX2RhdGFiYXNlSWQgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRJ
bnRlZ2VyKHBhcmFtZXRlcnMuZ2V0KCksICJkYXRhYmFzZUlkIl9zLCBudWxscHRyKTsKLSAgICBT
dHJpbmcgaW5fcXVlcnkgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRTdHJpbmcocGFyYW1ldGVy
cy5nZXQoKSwgInF1ZXJ5Il9zLCBudWxscHRyKTsKKyAgICBhdXRvIGluX2RhdGFiYXNlSWQgPSBt
X2JhY2tlbmREaXNwYXRjaGVyLT5nZXRJbnRlZ2VyKHByb3RvY29sX3BhcmFtZXRlcnMuZ2V0KCks
ICJkYXRhYmFzZUlkIl9zLCB0cnVlKTsKKyAgICBhdXRvIGluX3F1ZXJ5ID0gbV9iYWNrZW5kRGlz
cGF0Y2hlci0+Z2V0U3RyaW5nKHByb3RvY29sX3BhcmFtZXRlcnMuZ2V0KCksICJxdWVyeSJfcywg
dHJ1ZSk7CiAgICAgaWYgKG1fYmFja2VuZERpc3BhdGNoZXItPmhhc1Byb3RvY29sRXJyb3JzKCkp
IHsKICAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNr
ZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFtcywgIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAn
RGF0YWJhc2UuZXhlY3V0ZVNRTFN5bmMnIGNhbid0IGJlIHByb2Nlc3NlZCJfcyk7CiAgICAgICAg
IHJldHVybjsKQEAgLTM5OSw2NSArMzgxLDU2IEBAIHZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0
Y2hlcjo6ZXhlY3V0ZVNRTFN5bmMobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplCiAK
ICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKICAgICBpZiAobV9h
bHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+ZXhl
Y3V0ZVNRTFN5bmMocmVxdWVzdElkLCBpbl9kYXRhYmFzZUlkLCBpbl9xdWVyeSk7CisgICAgICAg
IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+ZXhlY3V0ZVNRTFN5bmMocHJvdG9jb2xfY2FsbElkLCAq
aW5fZGF0YWJhc2VJZCwgaW5fcXVlcnkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlm
IC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogCi0gICAgRXJyb3JT
dHJpbmcgZXJyb3I7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0
OjpjcmVhdGUoKTsKLSAgICBSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiBvdXRfY29sdW1u
TmFtZXM7Ci0gICAgU3RyaW5nIG91dF9ub3RlczsKLSAgICBkb3VibGUgb3V0X3RpbWVzdGFtcDsK
LSAgICBKU09OOjpPYmplY3Qgb3V0X3ZhbHVlczsKLSAgICBKU09OOjpWYWx1ZSBvdXRfcGF5bG9h
ZDsKLSAgICBpbnQgb3V0X2RhdGFiYXNlSWQ7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRhdGFiYXNlOjpFcnJvcj4gb3V0X3NxbEVycm9yOwotICAgIFJlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiBvdXRfYWx0ZXJuYXRlQ29sb3JzOwotICAg
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzIG91dF9zY3JlZW5D
b2xvcjsKLSAgICBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UHJpbnRDb2xvciBv
dXRfcHJpbnRDb2xvcjsKLSAgICBtX2FnZW50LT5leGVjdXRlU1FMU3luYyhlcnJvciwgaW5fZGF0
YWJhc2VJZCwgaW5fcXVlcnksIG91dF9jb2x1bW5OYW1lcywgJm91dF9ub3RlcywgJm91dF90aW1l
c3RhbXAsIG91dF92YWx1ZXMsICZvdXRfcGF5bG9hZCwgJm91dF9kYXRhYmFzZUlkLCBvdXRfc3Fs
RXJyb3IsIG91dF9hbHRlcm5hdGVDb2xvcnMsICZvdXRfc2NyZWVuQ29sb3IsICZvdXRfcHJpbnRD
b2xvcik7Ci0KLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKSB7Ci0gICAgICAgIHJlc3VsdC0+c2V0
QXJyYXkoImNvbHVtbk5hbWVzIl9zLCBvdXRfY29sdW1uTmFtZXMpOwotICAgICAgICByZXN1bHQt
PnNldFN0cmluZygibm90ZXMiX3MsIG91dF9ub3Rlcyk7Ci0gICAgICAgIHJlc3VsdC0+c2V0RG91
YmxlKCJ0aW1lc3RhbXAiX3MsIG91dF90aW1lc3RhbXApOwotICAgICAgICByZXN1bHQtPnNldE9i
amVjdCgidmFsdWVzIl9zLCBvdXRfdmFsdWVzKTsKLSAgICAgICAgcmVzdWx0LT5zZXRWYWx1ZSgi
cGF5bG9hZCJfcywgb3V0X3BheWxvYWQpOwotICAgICAgICByZXN1bHQtPnNldEludGVnZXIoImRh
dGFiYXNlSWQiX3MsIG91dF9kYXRhYmFzZUlkKTsKLSAgICAgICAgcmVzdWx0LT5zZXRPYmplY3Qo
InNxbEVycm9yIl9zLCBvdXRfc3FsRXJyb3IpOwotICAgICAgICByZXN1bHQtPnNldEFycmF5KCJh
bHRlcm5hdGVDb2xvcnMiX3MsIG91dF9hbHRlcm5hdGVDb2xvcnMpOwotICAgICAgICByZXN1bHQt
PnNldFN0cmluZygic2NyZWVuQ29sb3IiX3MsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3RIZWxw
ZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShvdXRfc2NyZWVuQ29sb3IpKTsKLSAgICAgICAgcmVz
dWx0LT5zZXRTdHJpbmcoInByaW50Q29sb3IiX3MsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3RI
ZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShvdXRfcHJpbnRDb2xvcikpOworICAgIGF1dG8g
cmVzdWx0ID0gbV9hZ2VudC0+ZXhlY3V0ZVNRTFN5bmMoKmluX2RhdGFiYXNlSWQsIGluX3F1ZXJ5
KTsKKyAgICBpZiAoIXJlc3VsdCkgeworICAgICAgICBBU1NFUlQoIXJlc3VsdC5lcnJvcigpLmlz
RW1wdHkoKSk7CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJy
b3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCByZXN1bHQuZXJyb3IoKSk7CisgICAg
ICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKLSAgICAgICAgbV9i
YWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQp
LCBmYWxzZSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQ
cm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJv
cikpOworCisgICAgYXV0byBbb3V0X2NvbHVtbk5hbWVzLCBvdXRfbm90ZXMsIG91dF90aW1lc3Rh
bXAsIG91dF92YWx1ZXMsIG91dF9wYXlsb2FkLCBvdXRfZGF0YWJhc2VJZCwgb3V0X3NxbEVycm9y
LCBvdXRfYWx0ZXJuYXRlQ29sb3JzLCBvdXRfc2NyZWVuQ29sb3IsIG91dF9wcmludENvbG9yXSA9
IFdURk1vdmUocmVzdWx0LnZhbHVlKCkpOworCisgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2Fn
ZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNl
dEFycmF5KCJjb2x1bW5OYW1lcyJfcywgV1RGTW92ZShvdXRfY29sdW1uTmFtZXMpKTsKKyAgICBw
cm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJub3RlcyJfcywgb3V0X25vdGVzKTsKKyAg
ICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsIG91dF90aW1l
c3RhbXApOworICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRPYmplY3QoInZhbHVlcyJfcywg
V1RGTW92ZShvdXRfdmFsdWVzKSk7CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFZhbHVl
KCJwYXlsb2FkIl9zLCBXVEZNb3ZlKG91dF9wYXlsb2FkKSk7CisgICAgcHJvdG9jb2xfanNvbk1l
c3NhZ2UtPnNldEludGVnZXIoImRhdGFiYXNlSWQiX3MsIG91dF9kYXRhYmFzZUlkKTsKKyAgICBw
cm90b2NvbF9qc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJzcWxFcnJvciJfcywgV1RGTW92ZShvdXRf
c3FsRXJyb3IpKTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0QXJyYXkoImFsdGVybmF0
ZUNvbG9ycyJfcywgV1RGTW92ZShvdXRfYWx0ZXJuYXRlQ29sb3JzKSk7CisgICAgcHJvdG9jb2xf
anNvbk1lc3NhZ2UtPnNldFN0cmluZygic2NyZWVuQ29sb3IiX3MsIFByb3RvY29sOjpUZXN0SGVs
cGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUob3V0X3NjcmVlbkNvbG9yKSk7CisgICAgcHJvdG9j
b2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygicHJpbnRDb2xvciJfcywgb3V0X3ByaW50Q29sb3Ip
OworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShwcm90b2NvbF9jYWxsSWQs
IFdURk1vdmUocHJvdG9jb2xfanNvbk1lc3NhZ2UpLCBmYWxzZSk7CiB9CiAKIERhdGFiYXNlQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNDYWxsYmFjazo6RXhlY3V0ZVNR
TEFzeW5jQ2FsbGJhY2soUmVmPEJhY2tlbmREaXNwYXRjaGVyPiYmIGJhY2tlbmREaXNwYXRjaGVy
LCBpbnQgaWQpIDogQmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZShXVEZNb3ZlKGJhY2tl
bmREaXNwYXRjaGVyKSwgaWQpIHsgfQogCi12b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNDYWxsYmFjazo6c2VuZFN1Y2Nlc3MoUmVmUHRyPEpTT046
OkFycmF5T2Y8U3RyaW5nPj4mJiBjb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBub3RlcywgZG91
YmxlIHRpbWVzdGFtcCwgSlNPTjo6T2JqZWN0IHZhbHVlcywgSlNPTjo6VmFsdWUgcGF5bG9hZCwg
aW50IGRhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJy
b3I+JiYgc3FsRXJyb3IsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29s
b3JzIHNjcmVlbkNvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkNv
bG9yTGlzdD4mJiBhbHRlcm5hdGVDb2xvcnMsIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyOjpQcmludENvbG9yIHByaW50Q29sb3IpCit2b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNo
ZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNDYWxsYmFjazo6c2VuZFN1Y2Nlc3MoUmVmPEpTT046
OkFycmF5T2Y8U3RyaW5nPj4mJiBjb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBub3RlcywgZG91
YmxlIHRpbWVzdGFtcCwgUmVmPEpTT046Ok9iamVjdD4mJiB2YWx1ZXMsIFJlZjxKU09OOjpWYWx1
ZT4mJiBwYXlsb2FkLCBpbnQgZGF0YWJhc2VJZCwgUmVmPFByb3RvY29sOjpEYXRhYmFzZTo6RXJy
b3I+JiYgc3FsRXJyb3IsIFByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyBzY3JlZW5D
b2xvciwgUmVmPFByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiYmIGFsdGVybmF0ZUNvbG9y
cywgY29uc3QgU3RyaW5nJiBwcmludENvbG9yKQogewotICAgIFJlZjxKU09OOjpPYmplY3Q+IGpz
b25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0
QXJyYXkoImNvbHVtbk5hbWVzIl9zLCBjb2x1bW5OYW1lcyk7Ci0gICAganNvbk1lc3NhZ2UtPnNl
dFN0cmluZygibm90ZXMiX3MsIG5vdGVzKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0RG91YmxlKCJ0
aW1lc3RhbXAiX3MsIHRpbWVzdGFtcCk7Ci0gICAganNvbk1lc3NhZ2UtPnNldE9iamVjdCgidmFs
dWVzIl9zLCB2YWx1ZXMpOwotICAgIGpzb25NZXNzYWdlLT5zZXRWYWx1ZSgicGF5bG9hZCJfcywg
cGF5bG9hZCk7Ci0gICAganNvbk1lc3NhZ2UtPnNldEludGVnZXIoImRhdGFiYXNlSWQiX3MsIGRh
dGFiYXNlSWQpOwotICAgIGpzb25NZXNzYWdlLT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBzcWxF
cnJvcik7Ci0gICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygic2NyZWVuQ29sb3IiX3MsIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShzY3JlZW5D
b2xvcikpOwotICAgIGpzb25NZXNzYWdlLT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCBh
bHRlcm5hdGVDb2xvcnMpOwotICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoInByaW50Q29sb3Ii
X3MsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1
ZShwcmludENvbG9yKSk7Ci0gICAgQ2FsbGJhY2tCYXNlOjpzZW5kU3VjY2VzcyhXVEZNb3ZlKGpz
b25NZXNzYWdlKSk7CisgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVj
dDo6Y3JlYXRlKCk7CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldEFycmF5KCJjb2x1bW5O
YW1lcyJfcywgV1RGTW92ZShjb2x1bW5OYW1lcykpOworICAgIHByb3RvY29sX2pzb25NZXNzYWdl
LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCBub3Rlcyk7CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2Ut
PnNldERvdWJsZSgidGltZXN0YW1wIl9zLCB0aW1lc3RhbXApOworICAgIHByb3RvY29sX2pzb25N
ZXNzYWdlLT5zZXRPYmplY3QoInZhbHVlcyJfcywgV1RGTW92ZSh2YWx1ZXMpKTsKKyAgICBwcm90
b2NvbF9qc29uTWVzc2FnZS0+c2V0VmFsdWUoInBheWxvYWQiX3MsIFdURk1vdmUocGF5bG9hZCkp
OworICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRJbnRlZ2VyKCJkYXRhYmFzZUlkIl9zLCBk
YXRhYmFzZUlkKTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJzcWxFcnJv
ciJfcywgV1RGTW92ZShzcWxFcnJvcikpOworICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRT
dHJpbmcoInNjcmVlbkNvbG9yIl9zLCBQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25z
dGFudFZhbHVlKHNjcmVlbkNvbG9yKSk7CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldEFy
cmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIFdURk1vdmUoYWx0ZXJuYXRlQ29sb3JzKSk7CisgICAg
cHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygicHJpbnRDb2xvciJfcywgcHJpbnRDb2xv
cik7CisgICAgQ2FsbGJhY2tCYXNlOjpzZW5kU3VjY2VzcyhXVEZNb3ZlKHByb3RvY29sX2pzb25N
ZXNzYWdlKSk7CiB9CiAKLXZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNR
TEFzeW5jKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMp
Cit2b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxBc3luYyhsb25nIHBy
b3RvY29sX2NhbGxJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9wYXJhbWV0ZXJz
KQogewotICAgIGludCBpbl9kYXRhYmFzZUlkID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0SW50
ZWdlcihwYXJhbWV0ZXJzLmdldCgpLCAiZGF0YWJhc2VJZCJfcywgbnVsbHB0cik7Ci0gICAgU3Ry
aW5nIGluX3F1ZXJ5ID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3RyaW5nKHBhcmFtZXRlcnMu
Z2V0KCksICJxdWVyeSJfcywgbnVsbHB0cik7CisgICAgYXV0byBpbl9kYXRhYmFzZUlkID0gbV9i
YWNrZW5kRGlzcGF0Y2hlci0+Z2V0SW50ZWdlcihwcm90b2NvbF9wYXJhbWV0ZXJzLmdldCgpLCAi
ZGF0YWJhc2VJZCJfcywgdHJ1ZSk7CisgICAgYXV0byBpbl9xdWVyeSA9IG1fYmFja2VuZERpc3Bh
dGNoZXItPmdldFN0cmluZyhwcm90b2NvbF9wYXJhbWV0ZXJzLmdldCgpLCAicXVlcnkiX3MsIHRy
dWUpOwogICAgIGlmIChtX2JhY2tlbmREaXNwYXRjaGVyLT5oYXNQcm90b2NvbEVycm9ycygpKSB7
CiAgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2Vu
ZERpc3BhdGNoZXI6OkludmFsaWRQYXJhbXMsICJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJ0Rh
dGFiYXNlLmV4ZWN1dGVTUUxBc3luYycgY2FuJ3QgYmUgcHJvY2Vzc2VkIl9zKTsKICAgICAgICAg
cmV0dXJuOwpAQCAtNDY1LDE0ICs0MzgsMTIgQEAgdm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRj
aGVyOjpleGVjdXRlU1FMQXN5bmMobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmoKIAog
I2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogICAgIGlmIChtX2Fs
dGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5leGVj
dXRlU1FMQXN5bmMocmVxdWVzdElkLCBpbl9kYXRhYmFzZUlkLCBpbl9xdWVyeSk7CisgICAgICAg
IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+ZXhlY3V0ZVNRTEFzeW5jKHByb3RvY29sX2NhbGxJZCwg
KmluX2RhdGFiYXNlSWQsIGluX3F1ZXJ5KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRp
ZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIAotICAgIFJlZjxE
YXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5jQ2FsbGJhY2s+
IGNhbGxiYWNrID0gYWRvcHRSZWYoKm5ldyBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxl
cjo6RXhlY3V0ZVNRTEFzeW5jQ2FsbGJhY2sobV9iYWNrZW5kRGlzcGF0Y2hlci5jb3B5UmVmKCks
IHJlcXVlc3RJZCkpOwotICAgIG1fYWdlbnQtPmV4ZWN1dGVTUUxBc3luYyhpbl9kYXRhYmFzZUlk
LCBpbl9xdWVyeSwgY2FsbGJhY2suY29weVJlZigpKTsKLQorICAgIG1fYWdlbnQtPmV4ZWN1dGVT
UUxBc3luYygqaW5fZGF0YWJhc2VJZCwgaW5fcXVlcnksIGFkb3B0UmVmKCpuZXcgRGF0YWJhc2VC
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkV4ZWN1dGVTUUxBc3luY0NhbGxiYWNrKG1fYmFja2Vu
ZERpc3BhdGNoZXIuY29weVJlZigpLCBwcm90b2NvbF9jYWxsSWQpKSk7CiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgpAQCAtNTEzLDYgKzQ4NCw3IEBAIHZvaWQgRGF0YWJhc2VCYWNrZW5k
RGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTEFzeW5jKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6
T2JqCiAKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8d3RmL0pT
T05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CkBAIC01NTYsNyArNTI4LDYg
QEAgY2xhc3MgRnJvbnRlbmRSb3V0ZXI7CiAjaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hl
cnMuaCIKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVy
Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9y
IHsKIApAQCAtNTk3LDcgKzU2OCw5IEBAIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogI3ByYWdtYSBv
bmNlCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+
Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5o
PgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtNjE5LDcgKzU5Miw3IEBAIGVudW0g
Y2xhc3MgUHJpbWFyeUNvbG9yczsKIG5hbWVzcGFjZSBEYXRhYmFzZSB7CiAvKiBVbmlxdWUgaWRl
bnRpZmllciBvZiBEYXRhYmFzZSBvYmplY3QuICovCiB1c2luZyBEYXRhYmFzZUlkID0gaW50Owot
dXNpbmcgQ29sb3JMaXN0ID0gSlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRh
YmFzZTo6UHJpbWFyeUNvbG9ycz47Cit1c2luZyBDb2xvckxpc3QgPSBKU09OOjpBcnJheU9mPFBy
b3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz47CiB9IC8vIERhdGFiYXNlCiAvLyBFbmQg
b2YgdHlwZWRlZnMuCiAKQEAgLTY0Myw3ICs2MTYsNyBAQCBlbnVtIGNsYXNzIFByaW1hcnlDb2xv
cnMgewogfTsgLy8gZW51bSBjbGFzcyBQcmltYXJ5Q29sb3JzCiAKIC8qIERhdGFiYXNlIGVycm9y
LiAqLwotY2xhc3MgRXJyb3IgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7CitjbGFzcyBFcnJv
ciBmaW5hbCA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKIHB1YmxpYzoKICAgICBlbnVtIHsK
ICAgICAgICAgTm9GaWVsZHNTZXQgPSAwLApAQCAtNjcwLDE3ICs2NDMsMTcgQEAgcHVibGljOgog
ICAgICAgICBmcmllbmQgY2xhc3MgRXJyb3I7CiAgICAgcHVibGljOgogCi0gICAgICAgIEJ1aWxk
ZXI8U1RBVEUgfCBNZXNzYWdlU2V0PiYgc2V0TWVzc2FnZShjb25zdCBTdHJpbmcmIHZhbHVlKQor
ICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTWVzc2FnZVNldD4mIHNldE1lc3NhZ2UoY29uc3QgU3Ry
aW5nJiBpbl9tZXNzYWdlKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCgh
KFNUQVRFICYgTWVzc2FnZVNldCksIHByb3BlcnR5X21lc3NhZ2VfYWxyZWFkeV9zZXQpOwotICAg
ICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibWVzc2FnZSJfcywgdmFsdWUpOworICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibWVzc2FnZSJfcywgaW5fbWVzc2FnZSk7CiAgICAg
ICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE1lc3NhZ2VTZXQ+KCk7CiAgICAgICAgIH0KIAotICAg
ICAgICBCdWlsZGVyPFNUQVRFIHwgQ29kZVNldD4mIHNldENvZGUoaW50IHZhbHVlKQorICAgICAg
ICBCdWlsZGVyPFNUQVRFIHwgQ29kZVNldD4mIHNldENvZGUoaW50IGluX2NvZGUpCiAgICAgICAg
IHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBDb2RlU2V0KSwgcHJvcGVy
dHlfY29kZV9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0SW50ZWdlcigi
Y29kZSJfcywgdmFsdWUpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldEludGVnZXIoImNvZGUi
X3MsIGluX2NvZGUpOwogICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxDb2RlU2V0PigpOwog
ICAgICAgICB9CiAKQEAgLTcxOSw3ICs2OTIsNyBAQCBPcHRpb25hbDxQcm90b2NvbEVudW1UeXBl
PiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmcoY29uc3QgU3RyaW5nJik7CiAKIC8vIEVudW1zIGlu
IHRoZSAnRGF0YWJhc2UnIERvbWFpbgogdGVtcGxhdGU8PgotT3B0aW9uYWw8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmlu
ZzxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4oY29uc3QgU3Ry
aW5nJik7CitPcHRpb25hbDxQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+IHBhcnNl
RW51bVZhbHVlRnJvbVN0cmluZzxQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+KGNv
bnN0IFN0cmluZyYpOwogCiB9IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycwogCkBAIC03NzEsOCAr
NzQ0LDcgQEAgc3RydWN0IERlZmF1bHRIYXNoPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNl
OjpQcmltYXJ5Q29sb3JzPiA6IEludEhhc2g8SW5zcGUKICNpbmNsdWRlICJjb25maWcuaCIKICNp
bmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAKLSNpbmNsdWRlIDx3dGYvT3B0aW9uYWwu
aD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlv
bnMuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKQEAgLTc5NywxNiArNzY5LDE2IEBAIFN0
cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSkgewogLy8gRW51bXMgaW4gdGhlICdE
YXRhYmFzZScgRG9tYWluCiAKIHRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5z
cGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+KGNvbnN0IFN0cmluZyYg
cHJvdG9jb2xTdHJpbmcpCitPcHRpb25hbDxQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xv
cnM+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlD
b2xvcnM+KGNvbnN0IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcpCiB7CiAgICAgc3RhdGljIGNvbnN0
IHNpemVfdCBjb25zdGFudFZhbHVlc1tdID0gewotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzOjpSZWQsCi0gICAgICAgIChzaXplX3Qp
SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM6OkdyZWVuLAotICAg
ICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3Jz
OjpCbHVlLAorICAgICAgICAoc2l6ZV90KVByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9y
czo6UmVkLAorICAgICAgICAoc2l6ZV90KVByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9y
czo6R3JlZW4sCisgICAgICAgIChzaXplX3QpUHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29s
b3JzOjpCbHVlLAogICAgIH07CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAzOyArK2kpCiAg
ICAgICAgIGlmIChwcm90b2NvbFN0cmluZyA9PSBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb25zdGFu
dFZhbHVlc1tpXV0pCi0gICAgICAgICAgICByZXR1cm4gKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRh
dGFiYXNlOjpQcmltYXJ5Q29sb3JzKWNvbnN0YW50VmFsdWVzW2ldOworICAgICAgICAgICAgcmV0
dXJuIChQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMpY29uc3RhbnRWYWx1ZXNbaV07
CiAKICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQpAQCAtODYzLDEwICs4MzUsMTAgQEAgY2xh
c3MgT2JqQ0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMg
QWx0ZXJuYXRlRGF0YWJhc2VCYWMKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1Ymxp
YzoKICAgICBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcihpZDxUZXN0UHJv
dG9jb2xEYXRhYmFzZURvbWFpbkhhbmRsZXI+IGhhbmRsZXIpIHsgbV9kZWxlZ2F0ZSA9IGhhbmRs
ZXI7IH0KLSAgICB2b2lkIGV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyBy
ZXF1ZXN0SWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5KSBmaW5h
bDsKLSAgICB2b2lkIGV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgcmVx
dWVzdElkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSkgZmluYWw7
Ci0gICAgdm9pZCBleGVjdXRlU1FMU3luYyhsb25nIHJlcXVlc3RJZCwgaW50IGluX2RhdGFiYXNl
SWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnkpIGZpbmFsOwotICAgIHZvaWQgZXhlY3V0ZVNRTEFz
eW5jKGxvbmcgcmVxdWVzdElkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9x
dWVyeSkgZmluYWw7CisgICAgdm9pZCBleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVz
KGxvbmcgcHJvdG9jb2xfY2FsbElkLCBpbnQgZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBxdWVy
eSkgZmluYWw7CisgICAgdm9pZCBleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhs
b25nIHByb3RvY29sX2NhbGxJZCwgaW50IGRhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgcXVlcnkp
IGZpbmFsOworICAgIHZvaWQgZXhlY3V0ZVNRTFN5bmMobG9uZyBwcm90b2NvbF9jYWxsSWQsIGlu
dCBkYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIHF1ZXJ5KSBmaW5hbDsKKyAgICB2b2lkIGV4ZWN1
dGVTUUxBc3luYyhsb25nIHByb3RvY29sX2NhbGxJZCwgaW50IGRhdGFiYXNlSWQsIGNvbnN0IFN0
cmluZyYgcXVlcnkpIGZpbmFsOwogcHJpdmF0ZToKICAgICBSZXRhaW5QdHI8aWQ8VGVzdFByb3Rv
Y29sRGF0YWJhc2VEb21haW5IYW5kbGVyPj4gbV9kZWxlZ2F0ZTsKIH07CkBAIC05MTQsMTgzICs4
ODYsMTc5IEBAIHByaXZhdGU6CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCi12b2lkIE9iakNJ
bnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FMU3luY09wdGlvbmFs
UmV0dXJuVmFsdWVzKGxvbmcgcmVxdWVzdElkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3Ry
aW5nJiBpbl9xdWVyeSkKK3ZvaWQgT2JqQ0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNo
ZXI6OmV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyBwcm90b2NvbF9jYWxs
SWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5KQogewogICAgIGlm
ICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihleGVjdXRlU1FMU3lu
Y09wdGlvbmFsUmV0dXJuVmFsdWVzV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOmRh
dGFiYXNlSWQ6cXVlcnk6KV0pIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0
UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3Vu
ZCwgIidEYXRhYmFzZS5leGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzJyB3YXMgbm90
IGZvdW5kIl9zKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xF
cnJvcihwcm90b2NvbF9jYWxsSWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwg
IidEYXRhYmFzZS5leGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzJyB3YXMgbm90IGZv
dW5kIl9zKTsKICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMo
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5T
U3RyaW5nICplcnJvcikgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90
b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJv
cik7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocHJv
dG9jb2xfY2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKICAg
ICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKICAgICB9Owog
Ci0gICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKipjb2x1
bW5OYW1lcywgTlNTdHJpbmcgKipub3RlcywgZG91YmxlICp0aW1lc3RhbXAsIFJXSVByb3RvY29s
SlNPTk9iamVjdCAqKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqcGF5bG9hZCwgaW50
ICpkYXRhYmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoqc3FsRXJyb3IsIFRlc3RQ
cm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyAqc2NyZWVuQ29sb3IsIE5TQXJyYXkvKjxOU1N0
cmluZz4qLyAqKmFsdGVybmF0ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FM
U3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvciAqcHJpbnRDb2xvcikgewotICAgICAg
ICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHRPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgp
OwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIoY29s
dW1uTmFtZXMsIEAiY29sdW1uTmFtZXMiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9C
QURfT1BUSU9OQUxfUEFSQU1FVEVSKG5vdGVzLCBAIm5vdGVzIik7Ci0gICAgICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUih2YWx1ZXMsIEAidmFsdWVzIik7Ci0g
ICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihwYXlsb2Fk
LCBAInBheWxvYWQiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxf
UEFSQU1FVEVSKHNxbEVycm9yLCBAInNxbEVycm9yIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihhbHRlcm5hdGVDb2xvcnMsIEAiYWx0ZXJuYXRl
Q29sb3JzIik7Ci0gICAgICAgIGlmIChjb2x1bW5OYW1lcykKLSAgICAgICAgICAgIHJlc3VsdE9i
amVjdC0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCB0b0pTT05TdHJpbmdBcnJheSgqY29sdW1u
TmFtZXMpKTsKLSAgICAgICAgaWYgKG5vdGVzKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5z
ZXRTdHJpbmcoIm5vdGVzIl9zLCAqbm90ZXMpOwotICAgICAgICBpZiAodGltZXN0YW1wKQotICAg
ICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywgKnRpbWVzdGFt
cCk7Ci0gICAgICAgIGlmICh2YWx1ZXMpCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldE9i
amVjdCgidmFsdWVzIl9zLCBbKnZhbHVlcyB0b0pTT05PYmplY3RdKTsKLSAgICAgICAgaWYgKHBh
eWxvYWQpCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCBb
KnBheWxvYWQgdG9KU09OT2JqZWN0XSk7Ci0gICAgICAgIGlmIChkYXRhYmFzZUlkKQotICAgICAg
ICAgICAgcmVzdWx0T2JqZWN0LT5zZXRJbnRlZ2VyKCJkYXRhYmFzZUlkIl9zLCAqZGF0YWJhc2VJ
ZCk7Ci0gICAgICAgIGlmIChzcWxFcnJvcikKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0
T2JqZWN0KCJzcWxFcnJvciJfcywgWypzcWxFcnJvciB0b0pTT05PYmplY3RdKTsKLSAgICAgICAg
aWYgKHNjcmVlbkNvbG9yKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoInNj
cmVlbkNvbG9yIl9zLCB0b1Byb3RvY29sU3RyaW5nKCpzY3JlZW5Db2xvcikpOwotICAgICAgICBp
ZiAoYWx0ZXJuYXRlQ29sb3JzKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRBcnJheSgi
YWx0ZXJuYXRlQ29sb3JzIl9zLCB0b0pTT05TdHJpbmdBcnJheSgqYWx0ZXJuYXRlQ29sb3JzKSk7
Ci0gICAgICAgIGlmIChwcmludENvbG9yKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRT
dHJpbmcoInByaW50Q29sb3IiX3MsIHRvUHJvdG9jb2xTdHJpbmcoKnByaW50Q29sb3IpKTsKLSAg
ICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92
ZShyZXN1bHRPYmplY3QpLCBmYWxzZSk7CisgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXihOU0Fy
cmF5Lyo8TlNTdHJpbmc+Ki8gKipvdXRfb3B0X2NvbHVtbk5hbWVzLCBOU1N0cmluZyAqKm91dF9v
cHRfbm90ZXMsIGRvdWJsZSAqb3V0X29wdF90aW1lc3RhbXAsIFJXSVByb3RvY29sSlNPTk9iamVj
dCAqKm91dF9vcHRfdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKipvdXRfb3B0X3BheWxv
YWQsIGludCAqb3V0X29wdF9kYXRhYmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoq
b3V0X29wdF9zcWxFcnJvciwgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzICpvdXRf
b3B0X3NjcmVlbkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKipvdXRfb3B0X2FsdGVybmF0
ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0YWJhc2UoYW5vbnltb3VzKSAqb3V0X29wdF9wcmludENv
bG9yKSB7CisgICAgICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6
OmNyZWF0ZSgpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJB
TUVURVIob3V0X29wdF9jb2x1bW5OYW1lcywgQCJjb2x1bW5OYW1lcyIpOworICAgICAgICBUSFJP
V19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIob3V0X29wdF9ub3RlcywgQCJu
b3RlcyIpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVU
RVIob3V0X29wdF92YWx1ZXMsIEAidmFsdWVzIik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9G
T1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihvdXRfb3B0X3BheWxvYWQsIEAicGF5bG9hZCIpOwor
ICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIob3V0X29w
dF9zcWxFcnJvciwgQCJzcWxFcnJvciIpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JB
RF9PUFRJT05BTF9QQVJBTUVURVIob3V0X29wdF9hbHRlcm5hdGVDb2xvcnMsIEAiYWx0ZXJuYXRl
Q29sb3JzIik7CisgICAgICAgIGlmICghIW91dF9vcHRfY29sdW1uTmFtZXMpCisgICAgICAgICAg
ICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCB0b0pTT05T
dHJpbmdBcnJheSgqb3V0X29wdF9jb2x1bW5OYW1lcykpOworICAgICAgICBpZiAoISFvdXRfb3B0
X25vdGVzKQorICAgICAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygibm90
ZXMiX3MsICpvdXRfb3B0X25vdGVzKTsKKyAgICAgICAgaWYgKCEhb3V0X29wdF90aW1lc3RhbXAp
CisgICAgICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0RG91YmxlKCJ0aW1lc3RhbXAi
X3MsICpvdXRfb3B0X3RpbWVzdGFtcCk7CisgICAgICAgIGlmICghIW91dF9vcHRfdmFsdWVzKQor
ICAgICAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldE9iamVjdCgidmFsdWVzIl9zLCBb
Km91dF9vcHRfdmFsdWVzIHRvSlNPTk9iamVjdF0pOworICAgICAgICBpZiAoISFvdXRfb3B0X3Bh
eWxvYWQpCisgICAgICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0VmFsdWUoInBheWxv
YWQiX3MsIFsqb3V0X29wdF9wYXlsb2FkIHRvSlNPTk9iamVjdF0pOworICAgICAgICBpZiAoISFv
dXRfb3B0X2RhdGFiYXNlSWQpCisgICAgICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0
SW50ZWdlcigiZGF0YWJhc2VJZCJfcywgKm91dF9vcHRfZGF0YWJhc2VJZCk7CisgICAgICAgIGlm
ICghIW91dF9vcHRfc3FsRXJyb3IpCisgICAgICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+
c2V0T2JqZWN0KCJzcWxFcnJvciJfcywgWypvdXRfb3B0X3NxbEVycm9yIHRvSlNPTk9iamVjdF0p
OworICAgICAgICBpZiAoISFvdXRfb3B0X3NjcmVlbkNvbG9yKQorICAgICAgICAgICAgcHJvdG9j
b2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygic2NyZWVuQ29sb3IiX3MsIHRvUHJvdG9jb2xTdHJp
bmcoKm91dF9vcHRfc2NyZWVuQ29sb3IpKTsKKyAgICAgICAgaWYgKCEhb3V0X29wdF9hbHRlcm5h
dGVDb2xvcnMpCisgICAgICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0QXJyYXkoImFs
dGVybmF0ZUNvbG9ycyJfcywgdG9KU09OU3RyaW5nQXJyYXkoKm91dF9vcHRfYWx0ZXJuYXRlQ29s
b3JzKSk7CisgICAgICAgIGlmICghIW91dF9vcHRfcHJpbnRDb2xvcikKKyAgICAgICAgICAgIHBy
b3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoInByaW50Q29sb3IiX3MsIHRvUHJvdG9jb2xT
dHJpbmcoKm91dF9vcHRfcHJpbnRDb2xvcikpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigp
LT5zZW5kUmVzcG9uc2UocHJvdG9jb2xfY2FsbElkLCBXVEZNb3ZlKHByb3RvY29sX2pzb25NZXNz
YWdlKSwgZmFsc2UpOwogICAgIH07CiAKICAgICBpbnQgb19pbl9kYXRhYmFzZUlkID0gaW5fZGF0
YWJhc2VJZDsKICAgICBOU1N0cmluZyAqb19pbl9xdWVyeSA9IGluX3F1ZXJ5OwotCiAgICAgW21f
ZGVsZWdhdGUgZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1dpdGhFcnJvckNhbGxi
YWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjayBkYXRhYmFz
ZUlkOm9faW5fZGF0YWJhc2VJZCBxdWVyeTpvX2luX3F1ZXJ5XTsKIH0KIAotdm9pZCBPYmpDSW5z
cGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxS
ZXR1cm5WYWx1ZXMobG9uZyByZXF1ZXN0SWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJp
bmcmIGluX3F1ZXJ5KQordm9pZCBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hl
cjo6ZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyBwcm90b2NvbF9jYWxs
SWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5KQogewogICAgIGlm
ICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihleGVjdXRlU1FMQXN5
bmNPcHRpb25hbFJldHVyblZhbHVlc1dpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazpk
YXRhYmFzZUlkOnF1ZXJ5OildKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9y
dFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91
bmQsICInRGF0YWJhc2UuZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMnIHdhcyBu
b3QgZm91bmQiX3MpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2Nv
bEVycm9yKHByb3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5k
LCAiJ0RhdGFiYXNlLmV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzJyB3YXMgbm90
IGZvdW5kIl9zKTsKICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJv
cnMoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBe
KE5TU3RyaW5nICplcnJvcikgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQ
cm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBl
cnJvcik7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3Io
cHJvdG9jb2xfY2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsK
ICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKICAgICB9
OwogCi0gICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKipj
b2x1bW5OYW1lcywgTlNTdHJpbmcgKipub3RlcywgZG91YmxlICp0aW1lc3RhbXAsIFJXSVByb3Rv
Y29sSlNPTk9iamVjdCAqKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqcGF5bG9hZCwg
aW50ICpkYXRhYmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoqc3FsRXJyb3IsIFRl
c3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyAqc2NyZWVuQ29sb3IsIE5TQXJyYXkvKjxO
U1N0cmluZz4qLyAqKmFsdGVybmF0ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRl
U1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3IgKnByaW50Q29sb3IpIHsKLSAg
ICAgICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0T2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVh
dGUoKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVS
KGNvbHVtbk5hbWVzLCBAImNvbHVtbk5hbWVzIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9G
T1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihub3RlcywgQCJub3RlcyIpOwotICAgICAgICBUSFJP
V19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIodmFsdWVzLCBAInZhbHVlcyIp
OwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIocGF5
bG9hZCwgQCJwYXlsb2FkIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElP
TkFMX1BBUkFNRVRFUihzcWxFcnJvciwgQCJzcWxFcnJvciIpOwotICAgICAgICBUSFJPV19FWENF
UFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIoYWx0ZXJuYXRlQ29sb3JzLCBAImFsdGVy
bmF0ZUNvbG9ycyIpOwotICAgICAgICBpZiAoY29sdW1uTmFtZXMpCi0gICAgICAgICAgICByZXN1
bHRPYmplY3QtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgdG9KU09OU3RyaW5nQXJyYXkoKmNv
bHVtbk5hbWVzKSk7Ci0gICAgICAgIGlmIChub3RlcykKLSAgICAgICAgICAgIHJlc3VsdE9iamVj
dC0+c2V0U3RyaW5nKCJub3RlcyJfcywgKm5vdGVzKTsKLSAgICAgICAgaWYgKHRpbWVzdGFtcCkK
LSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsICp0aW1l
c3RhbXApOwotICAgICAgICBpZiAodmFsdWVzKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5z
ZXRPYmplY3QoInZhbHVlcyJfcywgWyp2YWx1ZXMgdG9KU09OT2JqZWN0XSk7Ci0gICAgICAgIGlm
IChwYXlsb2FkKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRWYWx1ZSgicGF5bG9hZCJf
cywgWypwYXlsb2FkIHRvSlNPTk9iamVjdF0pOwotICAgICAgICBpZiAoZGF0YWJhc2VJZCkKLSAg
ICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0SW50ZWdlcigiZGF0YWJhc2VJZCJfcywgKmRhdGFi
YXNlSWQpOwotICAgICAgICBpZiAoc3FsRXJyb3IpCi0gICAgICAgICAgICByZXN1bHRPYmplY3Qt
PnNldE9iamVjdCgic3FsRXJyb3IiX3MsIFsqc3FsRXJyb3IgdG9KU09OT2JqZWN0XSk7Ci0gICAg
ICAgIGlmIChzY3JlZW5Db2xvcikKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5n
KCJzY3JlZW5Db2xvciJfcywgdG9Qcm90b2NvbFN0cmluZygqc2NyZWVuQ29sb3IpKTsKLSAgICAg
ICAgaWYgKGFsdGVybmF0ZUNvbG9ycykKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0QXJy
YXkoImFsdGVybmF0ZUNvbG9ycyJfcywgdG9KU09OU3RyaW5nQXJyYXkoKmFsdGVybmF0ZUNvbG9y
cykpOwotICAgICAgICBpZiAocHJpbnRDb2xvcikKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+
c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCB0b1Byb3RvY29sU3RyaW5nKCpwcmludENvbG9yKSk7
Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdU
Rk1vdmUocmVzdWx0T2JqZWN0KSwgZmFsc2UpOworICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF4o
TlNBcnJheS8qPE5TU3RyaW5nPiovICoqb3V0X29wdF9jb2x1bW5OYW1lcywgTlNTdHJpbmcgKipv
dXRfb3B0X25vdGVzLCBkb3VibGUgKm91dF9vcHRfdGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05P
YmplY3QgKipvdXRfb3B0X3ZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqb3V0X29wdF9w
YXlsb2FkLCBpbnQgKm91dF9vcHRfZGF0YWJhc2VJZCwgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJv
ciAqKm91dF9vcHRfc3FsRXJyb3IsIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyAq
b3V0X29wdF9zY3JlZW5Db2xvciwgTlNBcnJheS8qPE5TU3RyaW5nPiovICoqb3V0X29wdF9hbHRl
cm5hdGVDb2xvcnMsIFRlc3RQcm90b2NvbERhdGFiYXNlKGFub255bW91cykgKm91dF9vcHRfcHJp
bnRDb2xvcikgeworICAgICAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2Jq
ZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxf
UEFSQU1FVEVSKG91dF9vcHRfY29sdW1uTmFtZXMsIEAiY29sdW1uTmFtZXMiKTsKKyAgICAgICAg
VEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKG91dF9vcHRfbm90ZXMs
IEAibm90ZXMiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFS
QU1FVEVSKG91dF9vcHRfdmFsdWVzLCBAInZhbHVlcyIpOworICAgICAgICBUSFJPV19FWENFUFRJ
T05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIob3V0X29wdF9wYXlsb2FkLCBAInBheWxvYWQi
KTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKG91
dF9vcHRfc3FsRXJyb3IsIEAic3FsRXJyb3IiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZP
Ul9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKG91dF9vcHRfYWx0ZXJuYXRlQ29sb3JzLCBAImFsdGVy
bmF0ZUNvbG9ycyIpOworICAgICAgICBpZiAoISFvdXRfb3B0X2NvbHVtbk5hbWVzKQorICAgICAg
ICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgdG9K
U09OU3RyaW5nQXJyYXkoKm91dF9vcHRfY29sdW1uTmFtZXMpKTsKKyAgICAgICAgaWYgKCEhb3V0
X29wdF9ub3RlcykKKyAgICAgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJpbmco
Im5vdGVzIl9zLCAqb3V0X29wdF9ub3Rlcyk7CisgICAgICAgIGlmICghIW91dF9vcHRfdGltZXN0
YW1wKQorICAgICAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldERvdWJsZSgidGltZXN0
YW1wIl9zLCAqb3V0X29wdF90aW1lc3RhbXApOworICAgICAgICBpZiAoISFvdXRfb3B0X3ZhbHVl
cykKKyAgICAgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRPYmplY3QoInZhbHVlcyJf
cywgWypvdXRfb3B0X3ZhbHVlcyB0b0pTT05PYmplY3RdKTsKKyAgICAgICAgaWYgKCEhb3V0X29w
dF9wYXlsb2FkKQorICAgICAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFZhbHVlKCJw
YXlsb2FkIl9zLCBbKm91dF9vcHRfcGF5bG9hZCB0b0pTT05PYmplY3RdKTsKKyAgICAgICAgaWYg
KCEhb3V0X29wdF9kYXRhYmFzZUlkKQorICAgICAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2Ut
PnNldEludGVnZXIoImRhdGFiYXNlSWQiX3MsICpvdXRfb3B0X2RhdGFiYXNlSWQpOworICAgICAg
ICBpZiAoISFvdXRfb3B0X3NxbEVycm9yKQorICAgICAgICAgICAgcHJvdG9jb2xfanNvbk1lc3Nh
Z2UtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIFsqb3V0X29wdF9zcWxFcnJvciB0b0pTT05PYmpl
Y3RdKTsKKyAgICAgICAgaWYgKCEhb3V0X29wdF9zY3JlZW5Db2xvcikKKyAgICAgICAgICAgIHBy
b3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCB0b1Byb3RvY29s
U3RyaW5nKCpvdXRfb3B0X3NjcmVlbkNvbG9yKSk7CisgICAgICAgIGlmICghIW91dF9vcHRfYWx0
ZXJuYXRlQ29sb3JzKQorICAgICAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldEFycmF5
KCJhbHRlcm5hdGVDb2xvcnMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KCpvdXRfb3B0X2FsdGVybmF0
ZUNvbG9ycykpOworICAgICAgICBpZiAoISFvdXRfb3B0X3ByaW50Q29sb3IpCisgICAgICAgICAg
ICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCB0b1Byb3Rv
Y29sU3RyaW5nKCpvdXRfb3B0X3ByaW50Q29sb3IpKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNo
ZXIoKS0+c2VuZFJlc3BvbnNlKHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9qc29u
TWVzc2FnZSksIGZhbHNlKTsKICAgICB9OwogCiAgICAgaW50IG9faW5fZGF0YWJhc2VJZCA9IGlu
X2RhdGFiYXNlSWQ7CiAgICAgTlNTdHJpbmcgKm9faW5fcXVlcnkgPSBpbl9xdWVyeTsKLQogICAg
IFttX2RlbGVnYXRlIGV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzV2l0aEVycm9y
Q2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrIGRh
dGFiYXNlSWQ6b19pbl9kYXRhYmFzZUlkIHF1ZXJ5Om9faW5fcXVlcnldOwogfQogCi12b2lkIE9i
akNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FMU3luYyhsb25n
IHJlcXVlc3RJZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnkpCit2
b2lkIE9iakNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FMU3lu
Yyhsb25nIHByb3RvY29sX2NhbGxJZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYg
aW5fcXVlcnkpCiB7CiAgICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNl
bGVjdG9yKGV4ZWN1dGVTUUxTeW5jV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOmRh
dGFiYXNlSWQ6cXVlcnk6KV0pIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0
UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3Vu
ZCwgIidEYXRhYmFzZS5leGVjdXRlU1FMU3luYycgd2FzIG5vdCBmb3VuZCJfcyk7CisgICAgICAg
IGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocHJvdG9jb2xfY2FsbElk
LCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRGF0YWJhc2UuZXhlY3V0ZVNR
TFN5bmMnIHdhcyBub3QgZm91bmQiX3MpOwogICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5z
ZW5kUGVuZGluZ0Vycm9ycygpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWQgZXJy
b3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRj
aGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6
U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0
UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxsSWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJF
cnJvciwgZXJyb3IpOwogICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vy
cm9ycygpOwogICAgIH07CiAKLSAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeKE5TQXJyYXkvKjxO
U1N0cmluZz4qLyAqY29sdW1uTmFtZXMsIE5TU3RyaW5nICpub3RlcywgZG91YmxlIHRpbWVzdGFt
cCwgUldJUHJvdG9jb2xKU09OT2JqZWN0ICp2YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAq
cGF5bG9hZCwgaW50IGRhdGFiYXNlSWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKnNxbEVy
cm9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmFsdGVybmF0ZUNvbG9ycywgVGVzdFByb3RvY29s
RGF0YWJhc2VQcmltYXJ5Q29sb3JzIHNjcmVlbkNvbG9yLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4
ZWN1dGVTUUxTeW5jUHJpbnRDb2xvciBwcmludENvbG9yKSB7Ci0gICAgICAgIFJlZjxKU09OOjpP
YmplY3Q+IHJlc3VsdE9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgICAgIFRI
Uk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKGNvbHVtbk5hbWVzLCBAImNvbHVt
bk5hbWVzIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVS
KG5vdGVzLCBAIm5vdGVzIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURf
UEFSQU1FVEVSKHZhbHVlcywgQCJ2YWx1ZXMiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZP
Ul9SRVFVSVJFRF9QQVJBTUVURVIocGF5bG9hZCwgQCJwYXlsb2FkIik7Ci0gICAgICAgIFRIUk9X
X0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKHNxbEVycm9yLCBAInNxbEVycm9yIik7
Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKGFsdGVybmF0
ZUNvbG9ycywgQCJhbHRlcm5hdGVDb2xvcnMiKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRB
cnJheSgiY29sdW1uTmFtZXMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KGNvbHVtbk5hbWVzKSk7Ci0g
ICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKCJub3RlcyJfcywgbm90ZXMpOwotICAgICAg
ICByZXN1bHRPYmplY3QtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCB0aW1lc3RhbXApOwotICAg
ICAgICByZXN1bHRPYmplY3QtPnNldE9iamVjdCgidmFsdWVzIl9zLCBbdmFsdWVzIHRvSlNPTk9i
amVjdF0pOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCBbcGF5
bG9hZCB0b0pTT05PYmplY3RdKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRJbnRlZ2VyKCJk
YXRhYmFzZUlkIl9zLCBkYXRhYmFzZUlkKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRPYmpl
Y3QoInNxbEVycm9yIl9zLCBbc3FsRXJyb3IgdG9KU09OT2JqZWN0XSk7Ci0gICAgICAgIHJlc3Vs
dE9iamVjdC0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywgdG9KU09OU3RyaW5nQXJyYXko
YWx0ZXJuYXRlQ29sb3JzKSk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKCJzY3Jl
ZW5Db2xvciJfcywgdG9Qcm90b2NvbFN0cmluZyhzY3JlZW5Db2xvcikpOwotICAgICAgICByZXN1
bHRPYmplY3QtPnNldFN0cmluZygicHJpbnRDb2xvciJfcywgdG9Qcm90b2NvbFN0cmluZyhwcmlu
dENvbG9yKSk7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1
ZXN0SWQsIFdURk1vdmUocmVzdWx0T2JqZWN0KSwgZmFsc2UpOworICAgIGlkIHN1Y2Nlc3NDYWxs
YmFjayA9IF4oTlNBcnJheS8qPE5TU3RyaW5nPiovICpvdXRfY29sdW1uTmFtZXMsIE5TU3RyaW5n
ICpvdXRfbm90ZXMsIGRvdWJsZSBvdXRfdGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05PYmplY3Qg
Km91dF92YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqb3V0X3BheWxvYWQsIGludCBvdXRf
ZGF0YWJhc2VJZCwgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqb3V0X3NxbEVycm9yLCBOU0Fy
cmF5Lyo8TlNTdHJpbmc+Ki8gKm91dF9hbHRlcm5hdGVDb2xvcnMsIFRlc3RQcm90b2NvbERhdGFi
YXNlUHJpbWFyeUNvbG9ycyBvdXRfc2NyZWVuQ29sb3IsIFRlc3RQcm90b2NvbERhdGFiYXNlKGFu
b255bW91cykgb3V0X3ByaW50Q29sb3IpIHsKKyAgICAgICAgYXV0byBwcm90b2NvbF9qc29uTWVz
c2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9G
T1JfUkVRVUlSRURfUEFSQU1FVEVSKG91dF9jb2x1bW5OYW1lcywgQCJjb2x1bW5OYW1lcyIpOwor
ICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihvdXRfbm90ZXMs
IEAibm90ZXMiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVU
RVIob3V0X3ZhbHVlcywgQCJ2YWx1ZXMiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9S
RVFVSVJFRF9QQVJBTUVURVIob3V0X3BheWxvYWQsIEAicGF5bG9hZCIpOworICAgICAgICBUSFJP
V19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihvdXRfc3FsRXJyb3IsIEAic3FsRXJy
b3IiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIob3V0
X2FsdGVybmF0ZUNvbG9ycywgQCJhbHRlcm5hdGVDb2xvcnMiKTsKKyAgICAgICAgcHJvdG9jb2xf
anNvbk1lc3NhZ2UtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgdG9KU09OU3RyaW5nQXJyYXko
b3V0X2NvbHVtbk5hbWVzKSk7CisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJp
bmcoIm5vdGVzIl9zLCBvdXRfbm90ZXMpOworICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+
c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsIG91dF90aW1lc3RhbXApOworICAgICAgICBwcm90b2Nv
bF9qc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIFtvdXRfdmFsdWVzIHRvSlNPTk9i
amVjdF0pOworICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0VmFsdWUoInBheWxvYWQi
X3MsIFtvdXRfcGF5bG9hZCB0b0pTT05PYmplY3RdKTsKKyAgICAgICAgcHJvdG9jb2xfanNvbk1l
c3NhZ2UtPnNldEludGVnZXIoImRhdGFiYXNlSWQiX3MsIG91dF9kYXRhYmFzZUlkKTsKKyAgICAg
ICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIFtvdXRfc3Fs
RXJyb3IgdG9KU09OT2JqZWN0XSk7CisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRB
cnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCB0b0pTT05TdHJpbmdBcnJheShvdXRfYWx0ZXJuYXRl
Q29sb3JzKSk7CisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoInNjcmVl
bkNvbG9yIl9zLCB0b1Byb3RvY29sU3RyaW5nKG91dF9zY3JlZW5Db2xvcikpOworICAgICAgICBw
cm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCB0b1Byb3RvY29s
U3RyaW5nKG91dF9wcmludENvbG9yKSk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNl
bmRSZXNwb25zZShwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJvdG9jb2xfanNvbk1lc3NhZ2Up
LCBmYWxzZSk7CiAgICAgfTsKIAogICAgIGludCBvX2luX2RhdGFiYXNlSWQgPSBpbl9kYXRhYmFz
ZUlkOwogICAgIE5TU3RyaW5nICpvX2luX3F1ZXJ5ID0gaW5fcXVlcnk7Ci0KICAgICBbbV9kZWxl
Z2F0ZSBleGVjdXRlU1FMU3luY1dpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vz
c0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjayBkYXRhYmFzZUlkOm9faW5fZGF0YWJhc2VJZCBxdWVy
eTpvX2luX3F1ZXJ5XTsKIH0KIAotdm9pZCBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlz
cGF0Y2hlcjo6ZXhlY3V0ZVNRTEFzeW5jKGxvbmcgcmVxdWVzdElkLCBpbnQgaW5fZGF0YWJhc2VJ
ZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSkKK3ZvaWQgT2JqQ0luc3BlY3RvckRhdGFiYXNlQmFj
a2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxBc3luYyhsb25nIHByb3RvY29sX2NhbGxJZCwgaW50
IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnkpCiB7CiAgICAgaWYgKCFbbV9k
ZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGV4ZWN1dGVTUUxBc3luY1dpdGhF
cnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazpkYXRhYmFzZUlkOnF1ZXJ5OildKSB7Ci0gICAg
ICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBC
YWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRGF0YWJhc2UuZXhlY3V0ZVNRTEFz
eW5jJyB3YXMgbm90IGZvdW5kIl9zKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVw
b3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxsSWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRo
b2ROb3RGb3VuZCwgIidEYXRhYmFzZS5leGVjdXRlU1FMQXN5bmMnIHdhcyBub3QgZm91bmQiX3Mp
OwogICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcg
KmVycm9yKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJy
b3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAg
ICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9j
YWxsSWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwogICAgICAgICBi
YWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgIH07CiAKLSAgICBp
ZCBzdWNjZXNzQ2FsbGJhY2sgPSBeKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqY29sdW1uTmFtZXMs
IE5TU3RyaW5nICpub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0
ICp2YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqcGF5bG9hZCwgaW50IGRhdGFiYXNlSWQs
IFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKnNxbEVycm9yLCBUZXN0UHJvdG9jb2xEYXRhYmFz
ZVByaW1hcnlDb2xvcnMgc2NyZWVuQ29sb3IsIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqYWx0ZXJu
YXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY1ByaW50Q29sb3Ig
cHJpbnRDb2xvcikgewotICAgICAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHRPYmplY3QgPSBK
U09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJ
UkVEX1BBUkFNRVRFUihjb2x1bW5OYW1lcywgQCJjb2x1bW5OYW1lcyIpOwotICAgICAgICBUSFJP
V19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihub3RlcywgQCJub3RlcyIpOwotICAg
ICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUih2YWx1ZXMsIEAidmFs
dWVzIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKHBh
eWxvYWQsIEAicGF5bG9hZCIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVE
X1BBUkFNRVRFUihzcWxFcnJvciwgQCJzcWxFcnJvciIpOwotICAgICAgICBUSFJPV19FWENFUFRJ
T05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihhbHRlcm5hdGVDb2xvcnMsIEAiYWx0ZXJuYXRlQ29s
b3JzIik7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCB0
b0pTT05TdHJpbmdBcnJheShjb2x1bW5OYW1lcykpOwotICAgICAgICByZXN1bHRPYmplY3QtPnNl
dFN0cmluZygibm90ZXMiX3MsIG5vdGVzKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXREb3Vi
bGUoInRpbWVzdGFtcCJfcywgdGltZXN0YW1wKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRP
YmplY3QoInZhbHVlcyJfcywgW3ZhbHVlcyB0b0pTT05PYmplY3RdKTsKLSAgICAgICAgcmVzdWx0
T2JqZWN0LT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgW3BheWxvYWQgdG9KU09OT2JqZWN0XSk7Ci0g
ICAgICAgIHJlc3VsdE9iamVjdC0+c2V0SW50ZWdlcigiZGF0YWJhc2VJZCJfcywgZGF0YWJhc2VJ
ZCk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0T2JqZWN0KCJzcWxFcnJvciJfcywgW3NxbEVy
cm9yIHRvSlNPTk9iamVjdF0pOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZygic2Ny
ZWVuQ29sb3IiX3MsIHRvUHJvdG9jb2xTdHJpbmcoc2NyZWVuQ29sb3IpKTsKLSAgICAgICAgcmVz
dWx0T2JqZWN0LT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCB0b0pTT05TdHJpbmdBcnJh
eShhbHRlcm5hdGVDb2xvcnMpKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoInBy
aW50Q29sb3IiX3MsIHRvUHJvdG9jb2xTdHJpbmcocHJpbnRDb2xvcikpOwotICAgICAgICBiYWNr
ZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdE9i
amVjdCksIGZhbHNlKTsKKyAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeKE5TQXJyYXkvKjxOU1N0
cmluZz4qLyAqb3V0X2NvbHVtbk5hbWVzLCBOU1N0cmluZyAqb3V0X25vdGVzLCBkb3VibGUgb3V0
X3RpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpvdXRfdmFsdWVzLCBSV0lQcm90b2Nv
bEpTT05PYmplY3QgKm91dF9wYXlsb2FkLCBpbnQgb3V0X2RhdGFiYXNlSWQsIFRlc3RQcm90b2Nv
bERhdGFiYXNlRXJyb3IgKm91dF9zcWxFcnJvciwgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5
Q29sb3JzIG91dF9zY3JlZW5Db2xvciwgTlNBcnJheS8qPE5TU3RyaW5nPiovICpvdXRfYWx0ZXJu
YXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZShhbm9ueW1vdXMpIG91dF9wcmludENvbG9y
KSB7CisgICAgICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNy
ZWF0ZSgpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihv
dXRfY29sdW1uTmFtZXMsIEAiY29sdW1uTmFtZXMiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9O
X0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIob3V0X25vdGVzLCBAIm5vdGVzIik7CisgICAgICAgIFRI
Uk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKG91dF92YWx1ZXMsIEAidmFsdWVz
Iik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKG91dF9w
YXlsb2FkLCBAInBheWxvYWQiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJF
RF9QQVJBTUVURVIob3V0X3NxbEVycm9yLCBAInNxbEVycm9yIik7CisgICAgICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKG91dF9hbHRlcm5hdGVDb2xvcnMsIEAiYWx0
ZXJuYXRlQ29sb3JzIik7CisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRBcnJheSgi
Y29sdW1uTmFtZXMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KG91dF9jb2x1bW5OYW1lcykpOworICAg
ICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJub3RlcyJfcywgb3V0X25vdGVz
KTsKKyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldERvdWJsZSgidGltZXN0YW1wIl9z
LCBvdXRfdGltZXN0YW1wKTsKKyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldE9iamVj
dCgidmFsdWVzIl9zLCBbb3V0X3ZhbHVlcyB0b0pTT05PYmplY3RdKTsKKyAgICAgICAgcHJvdG9j
b2xfanNvbk1lc3NhZ2UtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCBbb3V0X3BheWxvYWQgdG9KU09O
T2JqZWN0XSk7CisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRJbnRlZ2VyKCJkYXRh
YmFzZUlkIl9zLCBvdXRfZGF0YWJhc2VJZCk7CisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdl
LT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBbb3V0X3NxbEVycm9yIHRvSlNPTk9iamVjdF0pOwor
ICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywg
dG9Qcm90b2NvbFN0cmluZyhvdXRfc2NyZWVuQ29sb3IpKTsKKyAgICAgICAgcHJvdG9jb2xfanNv
bk1lc3NhZ2UtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIHRvSlNPTlN0cmluZ0FycmF5
KG91dF9hbHRlcm5hdGVDb2xvcnMpKTsKKyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNl
dFN0cmluZygicHJpbnRDb2xvciJfcywgdG9Qcm90b2NvbFN0cmluZyhvdXRfcHJpbnRDb2xvcikp
OworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocHJvdG9jb2xfY2Fs
bElkLCBXVEZNb3ZlKHByb3RvY29sX2pzb25NZXNzYWdlKSwgZmFsc2UpOwogICAgIH07CiAKICAg
ICBpbnQgb19pbl9kYXRhYmFzZUlkID0gaW5fZGF0YWJhc2VJZDsKICAgICBOU1N0cmluZyAqb19p
bl9xdWVyeSA9IGluX3F1ZXJ5OwotCiAgICAgW21fZGVsZWdhdGUgZXhlY3V0ZVNRTEFzeW5jV2l0
aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxi
YWNrIGRhdGFiYXNlSWQ6b19pbl9kYXRhYmFzZUlkIHF1ZXJ5Om9faW5fcXVlcnldOwogfQogCkBA
IC0xMzQ2LDEwICsxMzE0LDEwIEBAIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZhdWx0
IikpKQogCiBAcHJvdG9jb2wgVGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5IYW5kbGVyIDxOU09i
amVjdD4KIEBvcHRpb25hbAotLSAodm9pZClleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFs
dWVzV2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxi
YWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKShOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKipjb2x1
bW5OYW1lcywgTlNTdHJpbmcgKipub3RlcywgZG91YmxlICp0aW1lc3RhbXAsIFJXSVByb3RvY29s
SlNPTk9iamVjdCAqKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqcGF5bG9hZCwgaW50
ICpkYXRhYmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoqc3FsRXJyb3IsIFRlc3RQ
cm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyAqc2NyZWVuQ29sb3IsIE5TQXJyYXkvKjxOU1N0
cmluZz4qLyAqKmFsdGVybmF0ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FM
U3luY09wdGlvbmFsUmV0dXJuVmFsdWVzUHJpbnRDb2xvciAqcHJpbnRDb2xvcikpc3VjY2Vzc0Nh
bGxiYWNrIGRhdGFiYXNlSWQ6KGludClkYXRhYmFzZUlkIHF1ZXJ5OihOU1N0cmluZyAqKXF1ZXJ5
OwotLSAodm9pZClleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1dpdGhFcnJvckNh
bGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2Fs
bGJhY2s6KHZvaWQoXikoTlNBcnJheS8qPE5TU3RyaW5nPiovICoqY29sdW1uTmFtZXMsIE5TU3Ry
aW5nICoqbm90ZXMsIGRvdWJsZSAqdGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKip2
YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqKnBheWxvYWQsIGludCAqZGF0YWJhc2VJZCwg
VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKnNxbEVycm9yLCBUZXN0UHJvdG9jb2xEYXRhYmFz
ZVByaW1hcnlDb2xvcnMgKnNjcmVlbkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiphbHRl
cm5hdGVDb2xvcnMsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxS
ZXR1cm5WYWx1ZXNQcmludENvbG9yICpwcmludENvbG9yKSlzdWNjZXNzQ2FsbGJhY2sgZGF0YWJh
c2VJZDooaW50KWRhdGFiYXNlSWQgcXVlcnk6KE5TU3RyaW5nICopcXVlcnk7Ci0tICh2b2lkKWV4
ZWN1dGVTUUxTeW5jV2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSll
cnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKShOU0FycmF5Lyo8TlNTdHJpbmc+
Ki8gKmNvbHVtbk5hbWVzLCBOU1N0cmluZyAqbm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIFJXSVBy
b3RvY29sSlNPTk9iamVjdCAqdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKnBheWxvYWQs
IGludCBkYXRhYmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICpzcWxFcnJvciwgTlNB
cnJheS8qPE5TU3RyaW5nPiovICphbHRlcm5hdGVDb2xvcnMsIFRlc3RQcm90b2NvbERhdGFiYXNl
UHJpbWFyeUNvbG9ycyBzY3JlZW5Db2xvciwgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FM
U3luY1ByaW50Q29sb3IgcHJpbnRDb2xvcikpc3VjY2Vzc0NhbGxiYWNrIGRhdGFiYXNlSWQ6KGlu
dClkYXRhYmFzZUlkIHF1ZXJ5OihOU1N0cmluZyAqKXF1ZXJ5OwotLSAodm9pZClleGVjdXRlU1FM
QXN5bmNXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2Fs
bGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqY29s
dW1uTmFtZXMsIE5TU3RyaW5nICpub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgUldJUHJvdG9jb2xK
U09OT2JqZWN0ICp2YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqcGF5bG9hZCwgaW50IGRh
dGFiYXNlSWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKnNxbEVycm9yLCBUZXN0UHJvdG9j
b2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgc2NyZWVuQ29sb3IsIE5TQXJyYXkvKjxOU1N0cmluZz4q
LyAqYWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY1By
aW50Q29sb3IgcHJpbnRDb2xvcikpc3VjY2Vzc0NhbGxiYWNrIGRhdGFiYXNlSWQ6KGludClkYXRh
YmFzZUlkIHF1ZXJ5OihOU1N0cmluZyAqKXF1ZXJ5OworLSAodm9pZClleGVjdXRlU1FMU3luY09w
dGlvbmFsUmV0dXJuVmFsdWVzV2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVy
cm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKShOU0FycmF5Lyo8TlNT
dHJpbmc+Ki8gKipjb2x1bW5OYW1lcywgTlNTdHJpbmcgKipub3RlcywgZG91YmxlICp0aW1lc3Rh
bXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0
ICoqcGF5bG9hZCwgaW50ICpkYXRhYmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoq
c3FsRXJyb3IsIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyAqc2NyZWVuQ29sb3Is
IE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKmFsdGVybmF0ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0
YWJhc2UoYW5vbnltb3VzKSAqcHJpbnRDb2xvcikpc3VjY2Vzc0NhbGxiYWNrIGRhdGFiYXNlSWQ6
KGludClkYXRhYmFzZUlkIHF1ZXJ5OihOU1N0cmluZyAqKXF1ZXJ5OworLSAodm9pZClleGVjdXRl
U1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlc1dpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5T
U3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikoTlNB
cnJheS8qPE5TU3RyaW5nPiovICoqY29sdW1uTmFtZXMsIE5TU3RyaW5nICoqbm90ZXMsIGRvdWJs
ZSAqdGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKip2YWx1ZXMsIFJXSVByb3RvY29s
SlNPTk9iamVjdCAqKnBheWxvYWQsIGludCAqZGF0YWJhc2VJZCwgVGVzdFByb3RvY29sRGF0YWJh
c2VFcnJvciAqKnNxbEVycm9yLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgKnNj
cmVlbkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiphbHRlcm5hdGVDb2xvcnMsIFRlc3RQ
cm90b2NvbERhdGFiYXNlKGFub255bW91cykgKnByaW50Q29sb3IpKXN1Y2Nlc3NDYWxsYmFjayBk
YXRhYmFzZUlkOihpbnQpZGF0YWJhc2VJZCBxdWVyeTooTlNTdHJpbmcgKilxdWVyeTsKKy0gKHZv
aWQpZXhlY3V0ZVNRTFN5bmNXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJy
b3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKE5TQXJyYXkvKjxOU1N0
cmluZz4qLyAqY29sdW1uTmFtZXMsIE5TU3RyaW5nICpub3RlcywgZG91YmxlIHRpbWVzdGFtcCwg
UldJUHJvdG9jb2xKU09OT2JqZWN0ICp2YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqcGF5
bG9hZCwgaW50IGRhdGFiYXNlSWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKnNxbEVycm9y
LCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmFsdGVybmF0ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0
YWJhc2VQcmltYXJ5Q29sb3JzIHNjcmVlbkNvbG9yLCBUZXN0UHJvdG9jb2xEYXRhYmFzZShhbm9u
eW1vdXMpIHByaW50Q29sb3IpKXN1Y2Nlc3NDYWxsYmFjayBkYXRhYmFzZUlkOihpbnQpZGF0YWJh
c2VJZCBxdWVyeTooTlNTdHJpbmcgKilxdWVyeTsKKy0gKHZvaWQpZXhlY3V0ZVNRTEFzeW5jV2l0
aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1
Y2Nlc3NDYWxsYmFjazoodm9pZCheKShOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmNvbHVtbk5hbWVz
LCBOU1N0cmluZyAqbm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIFJXSVByb3RvY29sSlNPTk9iamVj
dCAqdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKnBheWxvYWQsIGludCBkYXRhYmFzZUlk
LCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICpzcWxFcnJvciwgVGVzdFByb3RvY29sRGF0YWJh
c2VQcmltYXJ5Q29sb3JzIHNjcmVlbkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmFsdGVy
bmF0ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0YWJhc2UoYW5vbnltb3VzKSBwcmludENvbG9yKSlz
dWNjZXNzQ2FsbGJhY2sgZGF0YWJhc2VJZDooaW50KWRhdGFiYXNlSWQgcXVlcnk6KE5TU3RyaW5n
ICopcXVlcnk7CiBAZW5kCiAKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2NvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2Fs
bC1yZXR1cm4tcGFyYW1ldGVycy5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9jb21tYW5kcy13aXRoLW9wdGlvbmFsLWNh
bGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbi1yZXN1bHQKaW5kZXggMWYyZjQ1ZDc0YzM5MzkxMTEy
MzZhODY3ZDdmZmZkMjQwZTZkOTljNS4uM2U0NDI3NDg5NGMyZWQwNjRlZThkMTk5ZTFhMGU0YzEx
NDRhYmZjZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2V4cGVjdGVkL2NvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFy
YW1ldGVycy5qc29uLXJlc3VsdAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVy
bi1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0CkBAIC03MCw3ICs3MCw3IEBAIEluc3BlY3RvckJhY2tl
bmQuYWN0aXZhdGVEb21haW4oIkRhdGFiYXNlIiwgbnVsbCk7CiAKICNpZiBFTkFCTEUoSU5TUEVD
VE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIAotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVz
LmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KIApAQCAtODgsOCArODgsOCBAQCBwcml2
YXRlOgogY2xhc3MgQWx0ZXJuYXRlRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlciA6IHB1YmxpYyBB
bHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+QWx0ZXJu
YXRlRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcigpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBleGVj
dXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgY2FsbElkLCBjb25zdCBKU09OOjpBcnJheSog
aW5fY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyogaW5fbm90ZXMsIGNvbnN0IGRvdWJsZSogaW5f
dGltZXN0YW1wLCBjb25zdCBKU09OOjpPYmplY3QqIGluX3ZhbHVlcywgY29uc3QgSlNPTjo6VmFs
dWUqIGluX3BheWxvYWQsIGNvbnN0IGludCogaW5fZGF0YWJhc2VJZCwgY29uc3QgSlNPTjo6T2Jq
ZWN0KiBpbl9zcWxFcnJvciwgY29uc3QgU3RyaW5nKiBpbl9zY3JlZW5Db2xvciwgY29uc3QgSlNP
Tjo6QXJyYXkqIGluX2FsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nKiBpbl9wcmludENvbG9y
KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhsb25n
IGNhbGxJZCwgY29uc3QgSlNPTjo6QXJyYXkmIGluX2NvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcm
IGluX25vdGVzLCBkb3VibGUgaW5fdGltZXN0YW1wLCBjb25zdCBKU09OOjpPYmplY3QmIGluX3Zh
bHVlcywgSlNPTjo6VmFsdWUgaW5fcGF5bG9hZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IEpT
T046Ok9iamVjdCYgaW5fc3FsRXJyb3IsIGNvbnN0IFN0cmluZyYgaW5fc2NyZWVuQ29sb3IsIGNv
bnN0IEpTT046OkFycmF5JiBpbl9hbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyYgaW5fcHJp
bnRDb2xvcikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0
ZXJzKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBSZWZQdHI8SlNPTjo6QXJyYXk+JiYgb3B0X2NvbHVt
bk5hbWVzLCBjb25zdCBTdHJpbmcmIG9wdF9ub3RlcywgT3B0aW9uYWw8ZG91YmxlPiYmIG9wdF90
aW1lc3RhbXAsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgb3B0X3ZhbHVlcywgUmVmUHRyPEpTT046
OlZhbHVlPiYmIG9wdF9wYXlsb2FkLCBPcHRpb25hbDxpbnQ+JiYgb3B0X2RhdGFiYXNlSWQsIFJl
ZlB0cjxKU09OOjpPYmplY3Q+JiYgb3B0X3NxbEVycm9yLCBjb25zdCBTdHJpbmcmIG9wdF9zY3Jl
ZW5Db2xvciwgUmVmUHRyPEpTT046OkFycmF5PiYmIG9wdF9hbHRlcm5hdGVDb2xvcnMsIGNvbnN0
IFN0cmluZyYgb3B0X3ByaW50Q29sb3IpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZU5v
T3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBSZWY8SlNPTjo6QXJyYXk+
JiYgY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgbm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIFJl
ZjxKU09OOjpPYmplY3Q+JiYgdmFsdWVzLCBSZWY8SlNPTjo6VmFsdWU+JiYgcGF5bG9hZCwgaW50
IGRhdGFiYXNlSWQsIFJlZjxKU09OOjpPYmplY3Q+JiYgc3FsRXJyb3IsIGNvbnN0IFN0cmluZyYg
c2NyZWVuQ29sb3IsIFJlZjxKU09OOjpBcnJheT4mJiBhbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0
cmluZyYgcHJpbnRDb2xvcikgPSAwOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCkBA
IC0xMzEsMTEgKzEzMSwxNCBAQCBwdWJsaWM6CiAKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmpl
Y3RzLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXIuaD4KKyNpbmNsdWRlIDx0dXBsZT4KKyNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4KKyNpbmNs
dWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAog
bmFtZXNwYWNlIEluc3BlY3RvciB7CiAKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCiAK
ICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIGNsYXNzIEFsdGVy
bmF0ZURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI7CkBAIC0xNDMsMTUgKzE0Niw4IEBAIGNsYXNz
IEFsdGVybmF0ZURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI7CiAKIGNsYXNzIERhdGFiYXNlQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKIHB1YmxpYzoKLSAgICAvLyBOYW1lZCBhZnRlciBwYXJh
bWV0ZXIgJ3ByaW50Q29sb3InIHdoaWxlIGdlbmVyYXRpbmcgY29tbWFuZC9ldmVudCBleGVjdXRl
QWxsT3B0aW9uYWxQYXJhbWV0ZXJzLgotICAgIGVudW0gY2xhc3MgUHJpbnRDb2xvciB7Ci0gICAg
ICAgIEN5YW4gPSAzLAotICAgICAgICBNYWdlbnRhID0gNCwKLSAgICAgICAgWWVsbG93ID0gNSwK
LSAgICAgICAgQmxhY2sgPSA2LAotICAgIH07IC8vIGVudW0gY2xhc3MgUHJpbnRDb2xvcgotICAg
IHZpcnR1YWwgdm9pZCBleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKEVycm9yU3RyaW5nJiwg
Y29uc3QgSlNPTjo6QXJyYXkqIG9wdF9pbl9jb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nKiBvcHRf
aW5fbm90ZXMsIGNvbnN0IGRvdWJsZSogb3B0X2luX3RpbWVzdGFtcCwgY29uc3QgSlNPTjo6T2Jq
ZWN0KiBvcHRfaW5fdmFsdWVzLCBjb25zdCBKU09OOjpWYWx1ZSogb3B0X2luX3BheWxvYWQsIGNv
bnN0IGludCogb3B0X2luX2RhdGFiYXNlSWQsIGNvbnN0IEpTT046Ok9iamVjdCogb3B0X2luX3Nx
bEVycm9yLCBjb25zdCBTdHJpbmcqIG9wdF9pbl9zY3JlZW5Db2xvciwgY29uc3QgSlNPTjo6QXJy
YXkqIG9wdF9pbl9hbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyogb3B0X2luX3ByaW50Q29s
b3IsIFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+JiBvcHRfb3V0X2NvbHVtbk5hbWVzLCBP
cHRpb25hbDxTdHJpbmc+JiBvcHRfb3V0X25vdGVzLCBPcHRpb25hbDxkb3VibGU+JiBvcHRfb3V0
X3RpbWVzdGFtcCwgT3B0aW9uYWw8SlNPTjo6T2JqZWN0PiYgb3B0X291dF92YWx1ZXMsIE9wdGlv
bmFsPEpTT046OlZhbHVlPiYgb3B0X291dF9wYXlsb2FkLCBPcHRpb25hbDxpbnQ+JiBvcHRfb3V0
X2RhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+
JiBvcHRfb3V0X3NxbEVycm9yLCBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFy
eUNvbG9ycyogb3B0X291dF9zY3JlZW5Db2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRhdGFiYXNlOjpDb2xvckxpc3Q+JiBvcHRfb3V0X2FsdGVybmF0ZUNvbG9ycywgRGF0YWJhc2VC
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3IqIG9wdF9vdXRfcHJpbnRDb2xvcikg
PSAwOwotICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMoRXJyb3JT
dHJpbmcmLCBjb25zdCBKU09OOjpBcnJheSYgaW5fY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYg
aW5fbm90ZXMsIGRvdWJsZSBpbl90aW1lc3RhbXAsIGNvbnN0IEpTT046Ok9iamVjdCYgaW5fdmFs
dWVzLCBKU09OOjpWYWx1ZSBpbl9wYXlsb2FkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgSlNP
Tjo6T2JqZWN0JiBpbl9zcWxFcnJvciwgY29uc3QgU3RyaW5nJiBpbl9zY3JlZW5Db2xvciwgY29u
c3QgSlNPTjo6QXJyYXkmIGluX2FsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nJiBpbl9wcmlu
dENvbG9yLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiYgb3V0X2NvbHVtbk5hbWVzLCBT
dHJpbmcqIG91dF9ub3RlcywgZG91YmxlKiBvdXRfdGltZXN0YW1wLCBKU09OOjpPYmplY3QqIG91
dF92YWx1ZXMsIEpTT046OlZhbHVlKiBvdXRfcGF5bG9hZCwgaW50KiBvdXRfZGF0YWJhc2VJZCwg
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4mIG91dF9zcWxFcnJv
ciwgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMqIG91dF9zY3Jl
ZW5Db2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+
JiBvdXRfYWx0ZXJuYXRlQ29sb3JzLCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6
UHJpbnRDb2xvciogb3V0X3ByaW50Q29sb3IpID0gMDsKKyAgICB2aXJ0dWFsIFByb3RvY29sOjpF
cnJvclN0cmluZ09yPHN0ZDo6dHVwbGU8UmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4gLyog
b3B0X2NvbHVtbk5hbWVzICovLCBTdHJpbmcgLyogb3B0X25vdGVzICovLCBPcHRpb25hbDxkb3Vi
bGU+IC8qIG9wdF90aW1lc3RhbXAgKi8sIFJlZlB0cjxKU09OOjpPYmplY3Q+IC8qIG9wdF92YWx1
ZXMgKi8sIFJlZlB0cjxKU09OOjpWYWx1ZT4gLyogb3B0X3BheWxvYWQgKi8sIE9wdGlvbmFsPGlu
dD4gLyogb3B0X2RhdGFiYXNlSWQgKi8sIFJlZlB0cjxQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9y
PiAvKiBvcHRfc3FsRXJyb3IgKi8sIE9wdGlvbmFsPFByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFy
eUNvbG9ycz4gLyogb3B0X3NjcmVlbkNvbG9yICovLCBSZWZQdHI8UHJvdG9jb2w6OkRhdGFiYXNl
OjpDb2xvckxpc3Q+IC8qIG9wdF9hbHRlcm5hdGVDb2xvcnMgKi8sIFN0cmluZyAvKiBvcHRfcHJp
bnRDb2xvciAqLz4+IGV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMoUmVmUHRyPEpTT046OkFy
cmF5PiYmIG9wdF9jb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBvcHRfbm90ZXMsIE9wdGlvbmFs
PGRvdWJsZT4mJiBvcHRfdGltZXN0YW1wLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIG9wdF92YWx1
ZXMsIFJlZlB0cjxKU09OOjpWYWx1ZT4mJiBvcHRfcGF5bG9hZCwgT3B0aW9uYWw8aW50PiYmIG9w
dF9kYXRhYmFzZUlkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIG9wdF9zcWxFcnJvciwgT3B0aW9u
YWw8UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPiYmIG9wdF9zY3JlZW5Db2xvciwg
UmVmUHRyPEpTT046OkFycmF5PiYmIG9wdF9hbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyYg
b3B0X3ByaW50Q29sb3IpID0gMDsKKyAgICB2aXJ0dWFsIFByb3RvY29sOjpFcnJvclN0cmluZ09y
PHN0ZDo6dHVwbGU8UmVmPEpTT046OkFycmF5T2Y8U3RyaW5nPj4gLyogY29sdW1uTmFtZXMgKi8s
IFN0cmluZyAvKiBub3RlcyAqLywgZG91YmxlIC8qIHRpbWVzdGFtcCAqLywgUmVmPEpTT046Ok9i
amVjdD4gLyogdmFsdWVzICovLCBSZWY8SlNPTjo6VmFsdWU+IC8qIHBheWxvYWQgKi8sIGludCAv
KiBkYXRhYmFzZUlkICovLCBSZWY8UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4gLyogc3FsRXJy
b3IgKi8sIFByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyAvKiBzY3JlZW5Db2xvciAq
LywgUmVmPFByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiAvKiBhbHRlcm5hdGVDb2xvcnMg
Ki8sIFN0cmluZyAvKiBwcmludENvbG9yICovPj4gZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJz
KFJlZjxKU09OOjpBcnJheT4mJiBjb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBub3RlcywgZG91
YmxlIHRpbWVzdGFtcCwgUmVmPEpTT046Ok9iamVjdD4mJiB2YWx1ZXMsIFJlZjxKU09OOjpWYWx1
ZT4mJiBwYXlsb2FkLCBpbnQgZGF0YWJhc2VJZCwgUmVmPEpTT046Ok9iamVjdD4mJiBzcWxFcnJv
ciwgUHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzIHNjcmVlbkNvbG9yLCBSZWY8SlNP
Tjo6QXJyYXk+JiYgYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcmIHByaW50Q29sb3IpID0g
MDsKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIH5EYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFu
ZGxlcigpOwogfTsKQEAgLTE1OSwxMCArMTU1LDEwIEBAIHByb3RlY3RlZDoKIGNsYXNzIERhdGFi
YXNlQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgU3VwcGxlbWVudGFsQmFja2VuZERp
c3BhdGNoZXIgewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8RGF0YWJhc2VCYWNrZW5kRGlzcGF0
Y2hlcj4gY3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiwgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXIqKTsKLSAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJp
bmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKSBmaW5hbDsKKyAgICB2b2lk
IGRpc3BhdGNoKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBjb25zdCBTdHJpbmcmIHByb3RvY29sX21l
dGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9tZXNzYWdlKSBmaW5hbDsKIHByaXZh
dGU6Ci0gICAgdm9pZCBleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcmVxdWVzdElk
LCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOwotICAgIHZvaWQgZXhlY3V0ZU5v
T3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYm
IHBhcmFtZXRlcnMpOworICAgIHZvaWQgZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhsb25n
IHByb3RvY2xfY2FsbElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX3BhcmFtZXRl
cnMpOworICAgIHZvaWQgZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcHJvdG9jbF9j
YWxsSWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfcGFyYW1ldGVycyk7CiAjaWYg
RU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiBwdWJsaWM6CiAgICAgdm9p
ZCBzZXRBbHRlcm5hdGVEaXNwYXRjaGVyKEFsdGVybmF0ZURhdGFiYXNlQmFja2VuZERpc3BhdGNo
ZXIqIGFsdGVybmF0ZURpc3BhdGNoZXIpIHsgbV9hbHRlcm5hdGVEaXNwYXRjaGVyID0gYWx0ZXJu
YXRlRGlzcGF0Y2hlcjsgfQpAQCAtMjExLDkgKzIwNyw3IEBAIHByaXZhdGU6CiAjaW5jbHVkZSAi
VGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgogI2lu
Y2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcu
aD4KIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogI2luY2x1
ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKQEAgLTIzNSw0NyArMjI5LDM2
IEBAIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OkRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIo
QmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmRECiAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVn
aXN0ZXJEaXNwYXRjaGVyRm9yRG9tYWluKCJEYXRhYmFzZSJfcywgdGhpcyk7CiB9CiAKLXZvaWQg
RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0
IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpCit2b2lkIERhdGFi
YXNlQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBjb25z
dCBTdHJpbmcmIHByb3RvY29sX21ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9t
ZXNzYWdlKQogewogICAgIFJlZjxEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0
aGlzKTsKIAotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnM7Ci0gICAgbWVzc2Fn
ZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3MsIHBhcmFtZXRlcnMpOworICAgIGF1dG8gcHJvdG9jb2xf
cGFyYW1ldGVycyA9IHByb3RvY29sX21lc3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9zKTsKIAot
ICAgIGlmIChtZXRob2QgPT0gImV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMiKSB7Ci0gICAg
ICAgIGV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFt
ZXRlcnMpKTsKKyAgICBpZiAocHJvdG9jb2xfbWV0aG9kID09ICJleGVjdXRlQWxsT3B0aW9uYWxQ
YXJhbWV0ZXJzIikgeworICAgICAgICBleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKHByb3Rv
Y29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9wYXJhbWV0ZXJzKSk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9Ci0gICAgaWYgKG1ldGhvZCA9PSAiZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJz
IikgewotICAgICAgICBleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMocmVxdWVzdElkLCBXVEZN
b3ZlKHBhcmFtZXRlcnMpKTsKKyAgICBpZiAocHJvdG9jb2xfbWV0aG9kID09ICJleGVjdXRlTm9P
cHRpb25hbFBhcmFtZXRlcnMiKSB7CisgICAgICAgIGV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVy
cyhwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJvdG9jb2xfcGFyYW1ldGVycykpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9j
b2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRGF0YWJhc2UuIiAr
IG1ldGhvZCArICInIHdhcyBub3QgZm91bmQiKTsKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5y
ZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidE
YXRhYmFzZS4iICsgcHJvdG9jb2xfbWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOwogfQogCi12
b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRl
cnMobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycykKK3Zv
aWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVy
cyhsb25nIHByb3RvY29sX2NhbGxJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9w
YXJhbWV0ZXJzKQogewotICAgIGJvb2wgb3B0X2luX2NvbHVtbk5hbWVzX3ZhbHVlRm91bmQgPSBm
YWxzZTsKLSAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IG9wdF9pbl9jb2x1bW5OYW1lcyA9IG1fYmFj
a2VuZERpc3BhdGNoZXItPmdldEFycmF5KHBhcmFtZXRlcnMuZ2V0KCksICJjb2x1bW5OYW1lcyJf
cywgJm9wdF9pbl9jb2x1bW5OYW1lc192YWx1ZUZvdW5kKTsKLSAgICBib29sIG9wdF9pbl9ub3Rl
c192YWx1ZUZvdW5kID0gZmFsc2U7Ci0gICAgU3RyaW5nIG9wdF9pbl9ub3RlcyA9IG1fYmFja2Vu
ZERpc3BhdGNoZXItPmdldFN0cmluZyhwYXJhbWV0ZXJzLmdldCgpLCAibm90ZXMiX3MsICZvcHRf
aW5fbm90ZXNfdmFsdWVGb3VuZCk7Ci0gICAgYm9vbCBvcHRfaW5fdGltZXN0YW1wX3ZhbHVlRm91
bmQgPSBmYWxzZTsKLSAgICBkb3VibGUgb3B0X2luX3RpbWVzdGFtcCA9IG1fYmFja2VuZERpc3Bh
dGNoZXItPmdldERvdWJsZShwYXJhbWV0ZXJzLmdldCgpLCAidGltZXN0YW1wIl9zLCAmb3B0X2lu
X3RpbWVzdGFtcF92YWx1ZUZvdW5kKTsKLSAgICBib29sIG9wdF9pbl92YWx1ZXNfdmFsdWVGb3Vu
ZCA9IGZhbHNlOwotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG9wdF9pbl92YWx1ZXMgPSBtX2Jh
Y2tlbmREaXNwYXRjaGVyLT5nZXRPYmplY3QocGFyYW1ldGVycy5nZXQoKSwgInZhbHVlcyJfcywg
Jm9wdF9pbl92YWx1ZXNfdmFsdWVGb3VuZCk7Ci0gICAgYm9vbCBvcHRfaW5fcGF5bG9hZF92YWx1
ZUZvdW5kID0gZmFsc2U7Ci0gICAgUmVmUHRyPEpTT046OlZhbHVlPiBvcHRfaW5fcGF5bG9hZCA9
IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFZhbHVlKHBhcmFtZXRlcnMuZ2V0KCksICJwYXlsb2Fk
Il9zLCAmb3B0X2luX3BheWxvYWRfdmFsdWVGb3VuZCk7Ci0gICAgYm9vbCBvcHRfaW5fZGF0YWJh
c2VJZF92YWx1ZUZvdW5kID0gZmFsc2U7Ci0gICAgaW50IG9wdF9pbl9kYXRhYmFzZUlkID0gbV9i
YWNrZW5kRGlzcGF0Y2hlci0+Z2V0SW50ZWdlcihwYXJhbWV0ZXJzLmdldCgpLCAiZGF0YWJhc2VJ
ZCJfcywgJm9wdF9pbl9kYXRhYmFzZUlkX3ZhbHVlRm91bmQpOwotICAgIGJvb2wgb3B0X2luX3Nx
bEVycm9yX3ZhbHVlRm91bmQgPSBmYWxzZTsKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBvcHRf
aW5fc3FsRXJyb3IgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRPYmplY3QocGFyYW1ldGVycy5n
ZXQoKSwgInNxbEVycm9yIl9zLCAmb3B0X2luX3NxbEVycm9yX3ZhbHVlRm91bmQpOwotICAgIGJv
b2wgb3B0X2luX3NjcmVlbkNvbG9yX3ZhbHVlRm91bmQgPSBmYWxzZTsKLSAgICBTdHJpbmcgb3B0
X2luX3NjcmVlbkNvbG9yID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3RyaW5nKHBhcmFtZXRl
cnMuZ2V0KCksICJzY3JlZW5Db2xvciJfcywgJm9wdF9pbl9zY3JlZW5Db2xvcl92YWx1ZUZvdW5k
KTsKLSAgICBib29sIG9wdF9pbl9hbHRlcm5hdGVDb2xvcnNfdmFsdWVGb3VuZCA9IGZhbHNlOwot
ICAgIFJlZlB0cjxKU09OOjpBcnJheT4gb3B0X2luX2FsdGVybmF0ZUNvbG9ycyA9IG1fYmFja2Vu
ZERpc3BhdGNoZXItPmdldEFycmF5KHBhcmFtZXRlcnMuZ2V0KCksICJhbHRlcm5hdGVDb2xvcnMi
X3MsICZvcHRfaW5fYWx0ZXJuYXRlQ29sb3JzX3ZhbHVlRm91bmQpOwotICAgIGJvb2wgb3B0X2lu
X3ByaW50Q29sb3JfdmFsdWVGb3VuZCA9IGZhbHNlOwotICAgIFN0cmluZyBvcHRfaW5fcHJpbnRD
b2xvciA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFN0cmluZyhwYXJhbWV0ZXJzLmdldCgpLCAi
cHJpbnRDb2xvciJfcywgJm9wdF9pbl9wcmludENvbG9yX3ZhbHVlRm91bmQpOworICAgIGF1dG8g
aW5fb3B0X2NvbHVtbk5hbWVzID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0QXJyYXkocHJvdG9j
b2xfcGFyYW1ldGVycy5nZXQoKSwgImNvbHVtbk5hbWVzIl9zLCBmYWxzZSk7CisgICAgYXV0byBp
bl9vcHRfbm90ZXMgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRTdHJpbmcocHJvdG9jb2xfcGFy
YW1ldGVycy5nZXQoKSwgIm5vdGVzIl9zLCBmYWxzZSk7CisgICAgYXV0byBpbl9vcHRfdGltZXN0
YW1wID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0RG91YmxlKHByb3RvY29sX3BhcmFtZXRlcnMu
Z2V0KCksICJ0aW1lc3RhbXAiX3MsIGZhbHNlKTsKKyAgICBhdXRvIGluX29wdF92YWx1ZXMgPSBt
X2JhY2tlbmREaXNwYXRjaGVyLT5nZXRPYmplY3QocHJvdG9jb2xfcGFyYW1ldGVycy5nZXQoKSwg
InZhbHVlcyJfcywgZmFsc2UpOworICAgIGF1dG8gaW5fb3B0X3BheWxvYWQgPSBtX2JhY2tlbmRE
aXNwYXRjaGVyLT5nZXRWYWx1ZShwcm90b2NvbF9wYXJhbWV0ZXJzLmdldCgpLCAicGF5bG9hZCJf
cywgZmFsc2UpOworICAgIGF1dG8gaW5fb3B0X2RhdGFiYXNlSWQgPSBtX2JhY2tlbmREaXNwYXRj
aGVyLT5nZXRJbnRlZ2VyKHByb3RvY29sX3BhcmFtZXRlcnMuZ2V0KCksICJkYXRhYmFzZUlkIl9z
LCBmYWxzZSk7CisgICAgYXV0byBpbl9vcHRfc3FsRXJyb3IgPSBtX2JhY2tlbmREaXNwYXRjaGVy
LT5nZXRPYmplY3QocHJvdG9jb2xfcGFyYW1ldGVycy5nZXQoKSwgInNxbEVycm9yIl9zLCBmYWxz
ZSk7CisgICAgYXV0byBpbl9vcHRfc2NyZWVuQ29sb3JfanNvbiA9IG1fYmFja2VuZERpc3BhdGNo
ZXItPmdldFN0cmluZyhwcm90b2NvbF9wYXJhbWV0ZXJzLmdldCgpLCAic2NyZWVuQ29sb3IiX3Ms
IGZhbHNlKTsKKyAgICBhdXRvIGluX29wdF9hbHRlcm5hdGVDb2xvcnMgPSBtX2JhY2tlbmREaXNw
YXRjaGVyLT5nZXRBcnJheShwcm90b2NvbF9wYXJhbWV0ZXJzLmdldCgpLCAiYWx0ZXJuYXRlQ29s
b3JzIl9zLCBmYWxzZSk7CisgICAgYXV0byBpbl9vcHRfcHJpbnRDb2xvciA9IG1fYmFja2VuZERp
c3BhdGNoZXItPmdldFN0cmluZyhwcm90b2NvbF9wYXJhbWV0ZXJzLmdldCgpLCAicHJpbnRDb2xv
ciJfcywgZmFsc2UpOwogICAgIGlmIChtX2JhY2tlbmREaXNwYXRjaGVyLT5oYXNQcm90b2NvbEVy
cm9ycygpKSB7CiAgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJy
b3IoQmFja2VuZERpc3BhdGNoZXI6OkludmFsaWRQYXJhbXMsICJTb21lIGFyZ3VtZW50cyBvZiBt
ZXRob2QgJ0RhdGFiYXNlLmV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMnIGNhbid0IGJlIHBy
b2Nlc3NlZCJfcyk7CiAgICAgICAgIHJldHVybjsKQEAgLTI4Myw2NSArMjY2LDU4IEBAIHZvaWQg
RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhs
b25nIHJlcXVlc3RJZCwgUmVmCiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQ
QVRDSEVSUykKICAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0
ZXJuYXRlRGlzcGF0Y2hlci0+ZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhyZXF1ZXN0SWQs
IG9wdF9pbl9jb2x1bW5OYW1lc192YWx1ZUZvdW5kID8gb3B0X2luX2NvbHVtbk5hbWVzLmdldCgp
IDogbnVsbHB0ciwgb3B0X2luX25vdGVzX3ZhbHVlRm91bmQgPyAmb3B0X2luX25vdGVzIDogbnVs
bHB0ciwgb3B0X2luX3RpbWVzdGFtcF92YWx1ZUZvdW5kID8gJm9wdF9pbl90aW1lc3RhbXAgOiBu
dWxscHRyLCBvcHRfaW5fdmFsdWVzX3ZhbHVlRm91bmQgPyBvcHRfaW5fdmFsdWVzLmdldCgpIDog
bnVsbHB0ciwgb3B0X2luX3BheWxvYWRfdmFsdWVGb3VuZCA/IG9wdF9pbl9wYXlsb2FkLmdldCgp
IDogbnVsbHB0ciwgb3B0X2luX2RhdGFiYXNlSWRfdmFsdWVGb3VuZCA/ICZvcHRfaW5fZGF0YWJh
c2VJZCA6IG51bGxwdHIsIG9wdF9pbl9zcWxFcnJvcl92YWx1ZUZvdW5kID8gb3B0X2luX3NxbEVy
cm9yLmdldCgpIDogbnVsbHB0ciwgb3B0X2luX3NjcmVlbkNvbG9yX3ZhbHVlRm91bmQgPyAmb3B0
X2luX3NjcmVlbkNvbG9yIDogbnVsbHB0ciwgb3B0X2luX2FsdGVybmF0ZUNvbG9yc192YWx1ZUZv
dW5kID8gb3B0X2luX2FsdGVybmF0ZUNvbG9ycy5nZXQoKSA6IG51bGxwdHIsIG9wdF9pbl9wcmlu
dENvbG9yX3ZhbHVlRm91bmQgPyAmb3B0X2luX3ByaW50Q29sb3IgOiBudWxscHRyKTsKKyAgICAg
ICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5leGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKHBy
b3RvY29sX2NhbGxJZCwgV1RGTW92ZShpbl9vcHRfY29sdW1uTmFtZXMpLCBpbl9vcHRfbm90ZXMs
IFdURk1vdmUoaW5fb3B0X3RpbWVzdGFtcCksIFdURk1vdmUoaW5fb3B0X3ZhbHVlcyksIFdURk1v
dmUoaW5fb3B0X3BheWxvYWQpLCBXVEZNb3ZlKGluX29wdF9kYXRhYmFzZUlkKSwgV1RGTW92ZShp
bl9vcHRfc3FsRXJyb3IpLCBpbl9vcHRfc2NyZWVuQ29sb3JfanNvbiwgV1RGTW92ZShpbl9vcHRf
YWx0ZXJuYXRlQ29sb3JzKSwgaW5fb3B0X3ByaW50Q29sb3IpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQog
Ci0gICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0g
SlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+
PiBvdXRfY29sdW1uTmFtZXM7Ci0gICAgT3B0aW9uYWw8U3RyaW5nPiBvdXRfbm90ZXM7Ci0gICAg
T3B0aW9uYWw8ZG91YmxlPiBvdXRfdGltZXN0YW1wOwotICAgIE9wdGlvbmFsPEpTT046Ok9iamVj
dD4gb3V0X3ZhbHVlczsKLSAgICBPcHRpb25hbDxKU09OOjpWYWx1ZT4gb3V0X3BheWxvYWQ7Ci0g
ICAgT3B0aW9uYWw8aW50PiBvdXRfZGF0YWJhc2VJZDsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiBvdXRfc3FsRXJyb3I7Ci0gICAgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMgb3V0X3NjcmVlbkNvbG9yOwotICAgIFJl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiBvdXRfYWx0ZXJu
YXRlQ29sb3JzOwotICAgIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQcmludENv
bG9yIG91dF9wcmludENvbG9yOwotICAgIG1fYWdlbnQtPmV4ZWN1dGVBbGxPcHRpb25hbFBhcmFt
ZXRlcnMoZXJyb3IsIG9wdF9pbl9jb2x1bW5OYW1lc192YWx1ZUZvdW5kID8gb3B0X2luX2NvbHVt
bk5hbWVzLmdldCgpIDogbnVsbHB0ciwgb3B0X2luX25vdGVzX3ZhbHVlRm91bmQgPyAmb3B0X2lu
X25vdGVzIDogbnVsbHB0ciwgb3B0X2luX3RpbWVzdGFtcF92YWx1ZUZvdW5kID8gJm9wdF9pbl90
aW1lc3RhbXAgOiBudWxscHRyLCBvcHRfaW5fdmFsdWVzX3ZhbHVlRm91bmQgPyBvcHRfaW5fdmFs
dWVzLmdldCgpIDogbnVsbHB0ciwgb3B0X2luX3BheWxvYWRfdmFsdWVGb3VuZCA/IG9wdF9pbl9w
YXlsb2FkLmdldCgpIDogbnVsbHB0ciwgb3B0X2luX2RhdGFiYXNlSWRfdmFsdWVGb3VuZCA/ICZv
cHRfaW5fZGF0YWJhc2VJZCA6IG51bGxwdHIsIG9wdF9pbl9zcWxFcnJvcl92YWx1ZUZvdW5kID8g
b3B0X2luX3NxbEVycm9yLmdldCgpIDogbnVsbHB0ciwgb3B0X2luX3NjcmVlbkNvbG9yX3ZhbHVl
Rm91bmQgPyAmb3B0X2luX3NjcmVlbkNvbG9yIDogbnVsbHB0ciwgb3B0X2luX2FsdGVybmF0ZUNv
bG9yc192YWx1ZUZvdW5kID8gb3B0X2luX2FsdGVybmF0ZUNvbG9ycy5nZXQoKSA6IG51bGxwdHIs
IG9wdF9pbl9wcmludENvbG9yX3ZhbHVlRm91bmQgPyAmb3B0X2luX3ByaW50Q29sb3IgOiBudWxs
cHRyLCBvdXRfY29sdW1uTmFtZXMsIG91dF9ub3Rlcywgb3V0X3RpbWVzdGFtcCwgb3V0X3ZhbHVl
cywgb3V0X3BheWxvYWQsIG91dF9kYXRhYmFzZUlkLCBvdXRfc3FsRXJyb3IsIG91dF9zY3JlZW5D
b2xvciwgb3V0X2FsdGVybmF0ZUNvbG9ycywgb3V0X3ByaW50Q29sb3IpOworICAgIGF1dG8gaW5f
b3B0X3NjcmVlbkNvbG9yID0gUHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpwYXJzZUVudW1WYWx1ZUZy
b21TdHJpbmc8UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPihpbl9vcHRfc2NyZWVu
Q29sb3JfanNvbik7CiAKLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKSB7Ci0gICAgICAgIGlmIChv
dXRfY29sdW1uTmFtZXMpCi0gICAgICAgICAgICByZXN1bHQtPnNldEFycmF5KCJjb2x1bW5OYW1l
cyJfcywgb3V0X2NvbHVtbk5hbWVzKTsKLSAgICAgICAgaWYgKG91dF9ub3Rlcy5oYXNWYWx1ZSgp
KQotICAgICAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCAqb3V0X25vdGVzKTsK
LSAgICAgICAgaWYgKG91dF90aW1lc3RhbXAuaGFzVmFsdWUoKSkKLSAgICAgICAgICAgIHJlc3Vs
dC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsICpvdXRfdGltZXN0YW1wKTsKLSAgICAgICAgaWYg
KG91dF92YWx1ZXMuaGFzVmFsdWUoKSkKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0T2JqZWN0KCJ2
YWx1ZXMiX3MsICpvdXRfdmFsdWVzKTsKLSAgICAgICAgaWYgKG91dF9wYXlsb2FkLmhhc1ZhbHVl
KCkpCi0gICAgICAgICAgICByZXN1bHQtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCAqb3V0X3BheWxv
YWQpOwotICAgICAgICBpZiAob3V0X2RhdGFiYXNlSWQuaGFzVmFsdWUoKSkKLSAgICAgICAgICAg
IHJlc3VsdC0+c2V0SW50ZWdlcigiZGF0YWJhc2VJZCJfcywgKm91dF9kYXRhYmFzZUlkKTsKLSAg
ICAgICAgaWYgKG91dF9zcWxFcnJvcikKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0T2JqZWN0KCJz
cWxFcnJvciJfcywgb3V0X3NxbEVycm9yKTsKLSAgICAgICAgaWYgKG91dF9zY3JlZW5Db2xvci5o
YXNWYWx1ZSgpKQotICAgICAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9z
LCAqb3V0X3NjcmVlbkNvbG9yKTsKLSAgICAgICAgaWYgKG91dF9hbHRlcm5hdGVDb2xvcnMpCi0g
ICAgICAgICAgICByZXN1bHQtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIG91dF9hbHRl
cm5hdGVDb2xvcnMpOwotICAgICAgICBpZiAob3V0X3ByaW50Q29sb3IuaGFzVmFsdWUoKSkKLSAg
ICAgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCAqb3V0X3ByaW50Q29s
b3IpOworICAgIGF1dG8gcmVzdWx0ID0gbV9hZ2VudC0+ZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1l
dGVycyhXVEZNb3ZlKGluX29wdF9jb2x1bW5OYW1lcyksIGluX29wdF9ub3RlcywgV1RGTW92ZShp
bl9vcHRfdGltZXN0YW1wKSwgV1RGTW92ZShpbl9vcHRfdmFsdWVzKSwgV1RGTW92ZShpbl9vcHRf
cGF5bG9hZCksIFdURk1vdmUoaW5fb3B0X2RhdGFiYXNlSWQpLCBXVEZNb3ZlKGluX29wdF9zcWxF
cnJvciksIFdURk1vdmUoaW5fb3B0X3NjcmVlbkNvbG9yKSwgV1RGTW92ZShpbl9vcHRfYWx0ZXJu
YXRlQ29sb3JzKSwgaW5fb3B0X3ByaW50Q29sb3IpOworICAgIGlmICghcmVzdWx0KSB7CisgICAg
ICAgIEFTU0VSVCghcmVzdWx0LmVycm9yKCkuaXNFbXB0eSgpKTsKKyAgICAgICAgbV9iYWNrZW5k
RGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVy
RXJyb3IsIHJlc3VsdC5lcnJvcigpKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAo
IWVycm9yLmxlbmd0aCgpKQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9u
c2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKLSAgICBlbHNlCi0gICAgICAg
IG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNo
ZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7CisKKyAgICBhdXRvIFtvdXRfb3B0X2Nv
bHVtbk5hbWVzLCBvdXRfb3B0X25vdGVzLCBvdXRfb3B0X3RpbWVzdGFtcCwgb3V0X29wdF92YWx1
ZXMsIG91dF9vcHRfcGF5bG9hZCwgb3V0X29wdF9kYXRhYmFzZUlkLCBvdXRfb3B0X3NxbEVycm9y
LCBvdXRfb3B0X3NjcmVlbkNvbG9yLCBvdXRfb3B0X2FsdGVybmF0ZUNvbG9ycywgb3V0X29wdF9w
cmludENvbG9yXSA9IFdURk1vdmUocmVzdWx0LnZhbHVlKCkpOworCisgICAgYXV0byBwcm90b2Nv
bF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgaWYgKCEhb3V0X29w
dF9jb2x1bW5OYW1lcykKKyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldEFycmF5KCJj
b2x1bW5OYW1lcyJfcywgb3V0X29wdF9jb2x1bW5OYW1lcy5yZWxlYXNlTm9uTnVsbCgpKTsKKyAg
ICBpZiAoISFvdXRfb3B0X25vdGVzKQorICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0
U3RyaW5nKCJub3RlcyJfcywgb3V0X29wdF9ub3Rlcyk7CisgICAgaWYgKCEhb3V0X29wdF90aW1l
c3RhbXApCisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXREb3VibGUoInRpbWVzdGFt
cCJfcywgKm91dF9vcHRfdGltZXN0YW1wKTsKKyAgICBpZiAoISFvdXRfb3B0X3ZhbHVlcykKKyAg
ICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldE9iamVjdCgidmFsdWVzIl9zLCBvdXRfb3B0
X3ZhbHVlcy5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICBpZiAoISFvdXRfb3B0X3BheWxvYWQpCisg
ICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgb3V0X29w
dF9wYXlsb2FkLnJlbGVhc2VOb25OdWxsKCkpOworICAgIGlmICghIW91dF9vcHRfZGF0YWJhc2VJ
ZCkKKyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldEludGVnZXIoImRhdGFiYXNlSWQi
X3MsICpvdXRfb3B0X2RhdGFiYXNlSWQpOworICAgIGlmICghIW91dF9vcHRfc3FsRXJyb3IpCisg
ICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBvdXRf
b3B0X3NxbEVycm9yLnJlbGVhc2VOb25OdWxsKCkpOworICAgIGlmICghIW91dF9vcHRfc2NyZWVu
Q29sb3IpCisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoInNjcmVlbkNv
bG9yIl9zLCBQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKCpvdXRf
b3B0X3NjcmVlbkNvbG9yKSk7CisgICAgaWYgKCEhb3V0X29wdF9hbHRlcm5hdGVDb2xvcnMpCisg
ICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9z
LCBvdXRfb3B0X2FsdGVybmF0ZUNvbG9ycy5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICBpZiAoISFv
dXRfb3B0X3ByaW50Q29sb3IpCisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJp
bmcoInByaW50Q29sb3IiX3MsIG91dF9vcHRfcHJpbnRDb2xvcik7CisgICAgbV9iYWNrZW5kRGlz
cGF0Y2hlci0+c2VuZFJlc3BvbnNlKHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9q
c29uTWVzc2FnZSksIGZhbHNlKTsKIH0KIAotdm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVy
OjpleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09O
OjpPYmplY3Q+JiYgcGFyYW1ldGVycykKK3ZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6
ZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBSZWZQdHI8
SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX3BhcmFtZXRlcnMpCiB7Ci0gICAgUmVmUHRyPEpTT046
OkFycmF5PiBpbl9jb2x1bW5OYW1lcyA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldEFycmF5KHBh
cmFtZXRlcnMuZ2V0KCksICJjb2x1bW5OYW1lcyJfcywgbnVsbHB0cik7Ci0gICAgU3RyaW5nIGlu
X25vdGVzID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3RyaW5nKHBhcmFtZXRlcnMuZ2V0KCks
ICJub3RlcyJfcywgbnVsbHB0cik7Ci0gICAgZG91YmxlIGluX3RpbWVzdGFtcCA9IG1fYmFja2Vu
ZERpc3BhdGNoZXItPmdldERvdWJsZShwYXJhbWV0ZXJzLmdldCgpLCAidGltZXN0YW1wIl9zLCBu
dWxscHRyKTsKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBpbl92YWx1ZXMgPSBtX2JhY2tlbmRE
aXNwYXRjaGVyLT5nZXRPYmplY3QocGFyYW1ldGVycy5nZXQoKSwgInZhbHVlcyJfcywgbnVsbHB0
cik7Ci0gICAgUmVmUHRyPEpTT046OlZhbHVlPiBpbl9wYXlsb2FkID0gbV9iYWNrZW5kRGlzcGF0
Y2hlci0+Z2V0VmFsdWUocGFyYW1ldGVycy5nZXQoKSwgInBheWxvYWQiX3MsIG51bGxwdHIpOwot
ICAgIGludCBpbl9kYXRhYmFzZUlkID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0SW50ZWdlcihw
YXJhbWV0ZXJzLmdldCgpLCAiZGF0YWJhc2VJZCJfcywgbnVsbHB0cik7Ci0gICAgUmVmUHRyPEpT
T046Ok9iamVjdD4gaW5fc3FsRXJyb3IgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRPYmplY3Qo
cGFyYW1ldGVycy5nZXQoKSwgInNxbEVycm9yIl9zLCBudWxscHRyKTsKLSAgICBTdHJpbmcgaW5f
c2NyZWVuQ29sb3IgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRTdHJpbmcocGFyYW1ldGVycy5n
ZXQoKSwgInNjcmVlbkNvbG9yIl9zLCBudWxscHRyKTsKLSAgICBSZWZQdHI8SlNPTjo6QXJyYXk+
IGluX2FsdGVybmF0ZUNvbG9ycyA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldEFycmF5KHBhcmFt
ZXRlcnMuZ2V0KCksICJhbHRlcm5hdGVDb2xvcnMiX3MsIG51bGxwdHIpOwotICAgIFN0cmluZyBp
bl9wcmludENvbG9yID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3RyaW5nKHBhcmFtZXRlcnMu
Z2V0KCksICJwcmludENvbG9yIl9zLCBudWxscHRyKTsKKyAgICBhdXRvIGluX2NvbHVtbk5hbWVz
ID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0QXJyYXkocHJvdG9jb2xfcGFyYW1ldGVycy5nZXQo
KSwgImNvbHVtbk5hbWVzIl9zLCB0cnVlKTsKKyAgICBhdXRvIGluX25vdGVzID0gbV9iYWNrZW5k
RGlzcGF0Y2hlci0+Z2V0U3RyaW5nKHByb3RvY29sX3BhcmFtZXRlcnMuZ2V0KCksICJub3RlcyJf
cywgdHJ1ZSk7CisgICAgYXV0byBpbl90aW1lc3RhbXAgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5n
ZXREb3VibGUocHJvdG9jb2xfcGFyYW1ldGVycy5nZXQoKSwgInRpbWVzdGFtcCJfcywgdHJ1ZSk7
CisgICAgYXV0byBpbl92YWx1ZXMgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRPYmplY3QocHJv
dG9jb2xfcGFyYW1ldGVycy5nZXQoKSwgInZhbHVlcyJfcywgdHJ1ZSk7CisgICAgYXV0byBpbl9w
YXlsb2FkID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0VmFsdWUocHJvdG9jb2xfcGFyYW1ldGVy
cy5nZXQoKSwgInBheWxvYWQiX3MsIHRydWUpOworICAgIGF1dG8gaW5fZGF0YWJhc2VJZCA9IG1f
YmFja2VuZERpc3BhdGNoZXItPmdldEludGVnZXIocHJvdG9jb2xfcGFyYW1ldGVycy5nZXQoKSwg
ImRhdGFiYXNlSWQiX3MsIHRydWUpOworICAgIGF1dG8gaW5fc3FsRXJyb3IgPSBtX2JhY2tlbmRE
aXNwYXRjaGVyLT5nZXRPYmplY3QocHJvdG9jb2xfcGFyYW1ldGVycy5nZXQoKSwgInNxbEVycm9y
Il9zLCB0cnVlKTsKKyAgICBhdXRvIGluX3NjcmVlbkNvbG9yX2pzb24gPSBtX2JhY2tlbmREaXNw
YXRjaGVyLT5nZXRTdHJpbmcocHJvdG9jb2xfcGFyYW1ldGVycy5nZXQoKSwgInNjcmVlbkNvbG9y
Il9zLCB0cnVlKTsKKyAgICBhdXRvIGluX2FsdGVybmF0ZUNvbG9ycyA9IG1fYmFja2VuZERpc3Bh
dGNoZXItPmdldEFycmF5KHByb3RvY29sX3BhcmFtZXRlcnMuZ2V0KCksICJhbHRlcm5hdGVDb2xv
cnMiX3MsIHRydWUpOworICAgIGF1dG8gaW5fcHJpbnRDb2xvciA9IG1fYmFja2VuZERpc3BhdGNo
ZXItPmdldFN0cmluZyhwcm90b2NvbF9wYXJhbWV0ZXJzLmdldCgpLCAicHJpbnRDb2xvciJfcywg
dHJ1ZSk7CiAgICAgaWYgKG1fYmFja2VuZERpc3BhdGNoZXItPmhhc1Byb3RvY29sRXJyb3JzKCkp
IHsKICAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNr
ZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFtcywgIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAn
RGF0YWJhc2UuZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzJyBjYW4ndCBiZSBwcm9jZXNzZWQi
X3MpOwogICAgICAgICByZXR1cm47CkBAIC0zNDksNDEgKzMyNSwzOCBAQCB2b2lkIERhdGFiYXNl
QmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhsb25nIHJlcXVl
c3RJZCwgUmVmUAogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMp
CiAgICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0ZURp
c3BhdGNoZXItPmV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhyZXF1ZXN0SWQsICppbl9jb2x1
bW5OYW1lcywgaW5fbm90ZXMsIGluX3RpbWVzdGFtcCwgKmluX3ZhbHVlcywgKmluX3BheWxvYWQs
IGluX2RhdGFiYXNlSWQsICppbl9zcWxFcnJvciwgaW5fc2NyZWVuQ29sb3IsICppbl9hbHRlcm5h
dGVDb2xvcnMsIGluX3ByaW50Q29sb3IpOworICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXIt
PmV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhwcm90b2NvbF9jYWxsSWQsIGluX2NvbHVtbk5h
bWVzLnJlbGVhc2VOb25OdWxsKCksIGluX25vdGVzLCAqaW5fdGltZXN0YW1wLCBpbl92YWx1ZXMu
cmVsZWFzZU5vbk51bGwoKSwgaW5fcGF5bG9hZC5yZWxlYXNlTm9uTnVsbCgpLCAqaW5fZGF0YWJh
c2VJZCwgaW5fc3FsRXJyb3IucmVsZWFzZU5vbk51bGwoKSwgaW5fc2NyZWVuQ29sb3JfanNvbiwg
aW5fYWx0ZXJuYXRlQ29sb3JzLnJlbGVhc2VOb25OdWxsKCksIGluX3ByaW50Q29sb3IpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRF
X0RJU1BBVENIRVJTKQogCi0gICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVmPEpTT046Ok9i
amVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBSZWZQdHI8SlNPTjo6
QXJyYXlPZjxTdHJpbmc+PiBvdXRfY29sdW1uTmFtZXM7Ci0gICAgU3RyaW5nIG91dF9ub3RlczsK
LSAgICBkb3VibGUgb3V0X3RpbWVzdGFtcDsKLSAgICBKU09OOjpPYmplY3Qgb3V0X3ZhbHVlczsK
LSAgICBKU09OOjpWYWx1ZSBvdXRfcGF5bG9hZDsKLSAgICBpbnQgb3V0X2RhdGFiYXNlSWQ7Ci0g
ICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4gb3V0X3NxbEVy
cm9yOwotICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzIG91
dF9zY3JlZW5Db2xvcjsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6
OkNvbG9yTGlzdD4gb3V0X2FsdGVybmF0ZUNvbG9yczsKLSAgICBEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVySGFuZGxlcjo6UHJpbnRDb2xvciBvdXRfcHJpbnRDb2xvcjsKLSAgICBtX2FnZW50LT5l
eGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMoZXJyb3IsICppbl9jb2x1bW5OYW1lcywgaW5fbm90
ZXMsIGluX3RpbWVzdGFtcCwgKmluX3ZhbHVlcywgKmluX3BheWxvYWQsIGluX2RhdGFiYXNlSWQs
ICppbl9zcWxFcnJvciwgaW5fc2NyZWVuQ29sb3IsICppbl9hbHRlcm5hdGVDb2xvcnMsIGluX3By
aW50Q29sb3IsIG91dF9jb2x1bW5OYW1lcywgJm91dF9ub3RlcywgJm91dF90aW1lc3RhbXAsIG91
dF92YWx1ZXMsICZvdXRfcGF5bG9hZCwgJm91dF9kYXRhYmFzZUlkLCBvdXRfc3FsRXJyb3IsICZv
dXRfc2NyZWVuQ29sb3IsIG91dF9hbHRlcm5hdGVDb2xvcnMsICZvdXRfcHJpbnRDb2xvcik7Ci0K
LSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKSB7Ci0gICAgICAgIHJlc3VsdC0+c2V0QXJyYXkoImNv
bHVtbk5hbWVzIl9zLCBvdXRfY29sdW1uTmFtZXMpOwotICAgICAgICByZXN1bHQtPnNldFN0cmlu
Zygibm90ZXMiX3MsIG91dF9ub3Rlcyk7Ci0gICAgICAgIHJlc3VsdC0+c2V0RG91YmxlKCJ0aW1l
c3RhbXAiX3MsIG91dF90aW1lc3RhbXApOwotICAgICAgICByZXN1bHQtPnNldE9iamVjdCgidmFs
dWVzIl9zLCBvdXRfdmFsdWVzKTsKLSAgICAgICAgcmVzdWx0LT5zZXRWYWx1ZSgicGF5bG9hZCJf
cywgb3V0X3BheWxvYWQpOwotICAgICAgICByZXN1bHQtPnNldEludGVnZXIoImRhdGFiYXNlSWQi
X3MsIG91dF9kYXRhYmFzZUlkKTsKLSAgICAgICAgcmVzdWx0LT5zZXRPYmplY3QoInNxbEVycm9y
Il9zLCBvdXRfc3FsRXJyb3IpOwotICAgICAgICByZXN1bHQtPnNldFN0cmluZygic2NyZWVuQ29s
b3IiX3MsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRW
YWx1ZShvdXRfc2NyZWVuQ29sb3IpKTsKLSAgICAgICAgcmVzdWx0LT5zZXRBcnJheSgiYWx0ZXJu
YXRlQ29sb3JzIl9zLCBvdXRfYWx0ZXJuYXRlQ29sb3JzKTsKLSAgICAgICAgcmVzdWx0LT5zZXRT
dHJpbmcoInByaW50Q29sb3IiX3MsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpn
ZXRFbnVtQ29uc3RhbnRWYWx1ZShvdXRfcHJpbnRDb2xvcikpOworICAgIGF1dG8gaW5fc2NyZWVu
Q29sb3IgPSBQcm90b2NvbDo6VGVzdEhlbHBlcnM6OnBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxQ
cm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+KGluX3NjcmVlbkNvbG9yX2pzb24pOwor
ICAgIGlmICghaW5fc2NyZWVuQ29sb3IpIHsKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+
cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIG1ha2VT
dHJpbmcoIlVua25vd24gc2NyZWVuQ29sb3I6ICJfcywgaW5fc2NyZWVuQ29sb3JfanNvbikpOwor
ICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCi0gICAgICAg
IG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVz
dWx0KSwgZmFsc2UpOwotICAgIGVsc2UKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVw
b3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUo
ZXJyb3IpKTsKKworICAgIGF1dG8gcmVzdWx0ID0gbV9hZ2VudC0+ZXhlY3V0ZU5vT3B0aW9uYWxQ
YXJhbWV0ZXJzKGluX2NvbHVtbk5hbWVzLnJlbGVhc2VOb25OdWxsKCksIGluX25vdGVzLCAqaW5f
dGltZXN0YW1wLCBpbl92YWx1ZXMucmVsZWFzZU5vbk51bGwoKSwgaW5fcGF5bG9hZC5yZWxlYXNl
Tm9uTnVsbCgpLCAqaW5fZGF0YWJhc2VJZCwgaW5fc3FsRXJyb3IucmVsZWFzZU5vbk51bGwoKSwg
KmluX3NjcmVlbkNvbG9yLCBpbl9hbHRlcm5hdGVDb2xvcnMucmVsZWFzZU5vbk51bGwoKSwgaW5f
cHJpbnRDb2xvcik7CisgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAgICAgQVNTRVJUKCFyZXN1bHQu
ZXJyb3IoKS5pc0VtcHR5KCkpOworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQ
cm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgcmVzdWx0LmVycm9y
KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYXV0byBbb3V0X2NvbHVtbk5hbWVz
LCBvdXRfbm90ZXMsIG91dF90aW1lc3RhbXAsIG91dF92YWx1ZXMsIG91dF9wYXlsb2FkLCBvdXRf
ZGF0YWJhc2VJZCwgb3V0X3NxbEVycm9yLCBvdXRfc2NyZWVuQ29sb3IsIG91dF9hbHRlcm5hdGVD
b2xvcnMsIG91dF9wcmludENvbG9yXSA9IFdURk1vdmUocmVzdWx0LnZhbHVlKCkpOworCisgICAg
YXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAg
cHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgV1RGTW92ZShv
dXRfY29sdW1uTmFtZXMpKTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJu
b3RlcyJfcywgb3V0X25vdGVzKTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0RG91Ymxl
KCJ0aW1lc3RhbXAiX3MsIG91dF90aW1lc3RhbXApOworICAgIHByb3RvY29sX2pzb25NZXNzYWdl
LT5zZXRPYmplY3QoInZhbHVlcyJfcywgV1RGTW92ZShvdXRfdmFsdWVzKSk7CisgICAgcHJvdG9j
b2xfanNvbk1lc3NhZ2UtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCBXVEZNb3ZlKG91dF9wYXlsb2Fk
KSk7CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldEludGVnZXIoImRhdGFiYXNlSWQiX3Ms
IG91dF9kYXRhYmFzZUlkKTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJz
cWxFcnJvciJfcywgV1RGTW92ZShvdXRfc3FsRXJyb3IpKTsKKyAgICBwcm90b2NvbF9qc29uTWVz
c2FnZS0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgUHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpn
ZXRFbnVtQ29uc3RhbnRWYWx1ZShvdXRfc2NyZWVuQ29sb3IpKTsKKyAgICBwcm90b2NvbF9qc29u
TWVzc2FnZS0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywgV1RGTW92ZShvdXRfYWx0ZXJu
YXRlQ29sb3JzKSk7CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygicHJpbnRD
b2xvciJfcywgb3V0X3ByaW50Q29sb3IpOworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRS
ZXNwb25zZShwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJvdG9jb2xfanNvbk1lc3NhZ2UpLCBm
YWxzZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgpAQCAtNDI0LDYgKzM5Nyw3IEBA
IHZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0
ZXJzKGxvbmcgcmVxdWVzdElkLCBSZWZQCiAKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3Rz
LmgiCiAjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwu
aD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3Rv
ciB7CkBAIC00NjcsNyArNDQxLDYgQEAgY2xhc3MgRnJvbnRlbmRSb3V0ZXI7CiAjaW5jbHVkZSAi
VGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0lu
c3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgog
CiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtNTA4LDcgKzQ4MSw5IEBAIG5hbWVzcGFjZSBJ
bnNwZWN0b3IgewogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JQcm90b2NvbFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNs
dWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAt
NTMwLDcgKzUwNSw3IEBAIGVudW0gY2xhc3MgUHJpbWFyeUNvbG9yczsKIG5hbWVzcGFjZSBEYXRh
YmFzZSB7CiAvKiBVbmlxdWUgaWRlbnRpZmllciBvZiBEYXRhYmFzZSBvYmplY3QuICovCiB1c2lu
ZyBEYXRhYmFzZUlkID0gaW50OwotdXNpbmcgQ29sb3JMaXN0ID0gSlNPTjo6QXJyYXlPZjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz47Cit1c2luZyBDb2xvckxp
c3QgPSBKU09OOjpBcnJheU9mPFByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz47CiB9
IC8vIERhdGFiYXNlCiAvLyBFbmQgb2YgdHlwZWRlZnMuCiAKQEAgLTU1NCw3ICs1MjksNyBAQCBl
bnVtIGNsYXNzIFByaW1hcnlDb2xvcnMgewogfTsgLy8gZW51bSBjbGFzcyBQcmltYXJ5Q29sb3Jz
CiAKIC8qIERhdGFiYXNlIGVycm9yLiAqLwotY2xhc3MgRXJyb3IgOiBwdWJsaWMgSlNPTjo6T2Jq
ZWN0QmFzZSB7CitjbGFzcyBFcnJvciBmaW5hbCA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsK
IHB1YmxpYzoKICAgICBlbnVtIHsKICAgICAgICAgTm9GaWVsZHNTZXQgPSAwLApAQCAtNTgxLDE3
ICs1NTYsMTcgQEAgcHVibGljOgogICAgICAgICBmcmllbmQgY2xhc3MgRXJyb3I7CiAgICAgcHVi
bGljOgogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBNZXNzYWdlU2V0PiYgc2V0TWVzc2FnZShj
b25zdCBTdHJpbmcmIHZhbHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTWVzc2FnZVNldD4m
IHNldE1lc3NhZ2UoY29uc3QgU3RyaW5nJiBpbl9tZXNzYWdlKQogICAgICAgICB7CiAgICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTWVzc2FnZVNldCksIHByb3BlcnR5X21lc3Nh
Z2VfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibWVzc2Fn
ZSJfcywgdmFsdWUpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibWVzc2FnZSJf
cywgaW5fbWVzc2FnZSk7CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE1lc3NhZ2VTZXQ+
KCk7CiAgICAgICAgIH0KIAotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQ29kZVNldD4mIHNldENv
ZGUoaW50IHZhbHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQ29kZVNldD4mIHNldENvZGUo
aW50IGluX2NvZGUpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RB
VEUgJiBDb2RlU2V0KSwgcHJvcGVydHlfY29kZV9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBt
X3Jlc3VsdC0+c2V0SW50ZWdlcigiY29kZSJfcywgdmFsdWUpOworICAgICAgICAgICAgbV9yZXN1
bHQtPnNldEludGVnZXIoImNvZGUiX3MsIGluX2NvZGUpOwogICAgICAgICAgICAgcmV0dXJuIGNh
c3RTdGF0ZTxDb2RlU2V0PigpOwogICAgICAgICB9CiAKQEAgLTYzMCw3ICs2MDUsNyBAQCBPcHRp
b25hbDxQcm90b2NvbEVudW1UeXBlPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmcoY29uc3QgU3Ry
aW5nJik7CiAKIC8vIEVudW1zIGluIHRoZSAnRGF0YWJhc2UnIERvbWFpbgogdGVtcGxhdGU8Pgot
T3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+IHBh
cnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJp
bWFyeUNvbG9ycz4oY29uc3QgU3RyaW5nJik7CitPcHRpb25hbDxQcm90b2NvbDo6RGF0YWJhc2U6
OlByaW1hcnlDb2xvcnM+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxQcm90b2NvbDo6RGF0YWJh
c2U6OlByaW1hcnlDb2xvcnM+KGNvbnN0IFN0cmluZyYpOwogCiB9IC8vIG5hbWVzcGFjZSBUZXN0
SGVscGVycwogCkBAIC02ODIsOCArNjU3LDcgQEAgc3RydWN0IERlZmF1bHRIYXNoPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPiA6IEludEhhc2g8SW5zcGUKICNp
bmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAKLSNp
bmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Cisj
aW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKQEAg
LTcwOCwxNiArNjgyLDE2IEBAIFN0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSkg
ewogLy8gRW51bXMgaW4gdGhlICdEYXRhYmFzZScgRG9tYWluCiAKIHRlbXBsYXRlPD4KLU9wdGlv
bmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPiBwYXJzZUVu
dW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlD
b2xvcnM+KGNvbnN0IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcpCitPcHRpb25hbDxQcm90b2NvbDo6
RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxQcm90b2Nv
bDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+KGNvbnN0IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcp
CiB7CiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBjb25zdGFudFZhbHVlc1tdID0gewotICAgICAg
ICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzOjpS
ZWQsCi0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1h
cnlDb2xvcnM6OkdyZWVuLAotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRh
dGFiYXNlOjpQcmltYXJ5Q29sb3JzOjpCbHVlLAorICAgICAgICAoc2l6ZV90KVByb3RvY29sOjpE
YXRhYmFzZTo6UHJpbWFyeUNvbG9yczo6UmVkLAorICAgICAgICAoc2l6ZV90KVByb3RvY29sOjpE
YXRhYmFzZTo6UHJpbWFyeUNvbG9yczo6R3JlZW4sCisgICAgICAgIChzaXplX3QpUHJvdG9jb2w6
OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzOjpCbHVlLAogICAgIH07CiAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCAzOyArK2kpCiAgICAgICAgIGlmIChwcm90b2NvbFN0cmluZyA9PSBlbnVtX2Nv
bnN0YW50X3ZhbHVlc1tjb25zdGFudFZhbHVlc1tpXV0pCi0gICAgICAgICAgICByZXR1cm4gKElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzKWNvbnN0YW50VmFsdWVz
W2ldOworICAgICAgICAgICAgcmV0dXJuIChQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xv
cnMpY29uc3RhbnRWYWx1ZXNbaV07CiAKICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQpAQCAt
Nzc0LDggKzc0OCw4IEBAIGNsYXNzIE9iakNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRj
aGVyIGZpbmFsIDogcHVibGljIEFsdGVybmF0ZURhdGFiYXNlQmFjCiAgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgT2JqQ0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERp
c3BhdGNoZXIoaWQ8VGVzdFByb3RvY29sRGF0YWJhc2VEb21haW5IYW5kbGVyPiBoYW5kbGVyKSB7
IG1fZGVsZWdhdGUgPSBoYW5kbGVyOyB9Ci0gICAgdm9pZCBleGVjdXRlQWxsT3B0aW9uYWxQYXJh
bWV0ZXJzKGxvbmcgcmVxdWVzdElkLCBjb25zdCBKU09OOjpBcnJheSogaW5fY29sdW1uTmFtZXMs
IGNvbnN0IFN0cmluZyogaW5fbm90ZXMsIGNvbnN0IGRvdWJsZSogaW5fdGltZXN0YW1wLCBjb25z
dCBKU09OOjpPYmplY3QqIGluX3ZhbHVlcywgY29uc3QgSlNPTjo6VmFsdWUqIGluX3BheWxvYWQs
IGNvbnN0IGludCogaW5fZGF0YWJhc2VJZCwgY29uc3QgSlNPTjo6T2JqZWN0KiBpbl9zcWxFcnJv
ciwgY29uc3QgU3RyaW5nKiBpbl9zY3JlZW5Db2xvciwgY29uc3QgSlNPTjo6QXJyYXkqIGluX2Fs
dGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nKiBpbl9wcmludENvbG9yKSBmaW5hbDsKLSAgICB2
b2lkIGV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhsb25nIHJlcXVlc3RJZCwgY29uc3QgSlNP
Tjo6QXJyYXkmIGluX2NvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIGluX25vdGVzLCBkb3VibGUg
aW5fdGltZXN0YW1wLCBjb25zdCBKU09OOjpPYmplY3QmIGluX3ZhbHVlcywgSlNPTjo6VmFsdWUg
aW5fcGF5bG9hZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IEpTT046Ok9iamVjdCYgaW5fc3Fs
RXJyb3IsIGNvbnN0IFN0cmluZyYgaW5fc2NyZWVuQ29sb3IsIGNvbnN0IEpTT046OkFycmF5JiBp
bl9hbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyYgaW5fcHJpbnRDb2xvcikgZmluYWw7Cisg
ICAgdm9pZCBleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcHJvdG9jb2xfY2FsbElk
LCBSZWZQdHI8SlNPTjo6QXJyYXk+JiYgb3B0X2NvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIG9w
dF9ub3RlcywgT3B0aW9uYWw8ZG91YmxlPiYmIG9wdF90aW1lc3RhbXAsIFJlZlB0cjxKU09OOjpP
YmplY3Q+JiYgb3B0X3ZhbHVlcywgUmVmUHRyPEpTT046OlZhbHVlPiYmIG9wdF9wYXlsb2FkLCBP
cHRpb25hbDxpbnQ+JiYgb3B0X2RhdGFiYXNlSWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgb3B0
X3NxbEVycm9yLCBjb25zdCBTdHJpbmcmIG9wdF9zY3JlZW5Db2xvciwgUmVmUHRyPEpTT046OkFy
cmF5PiYmIG9wdF9hbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyYgb3B0X3ByaW50Q29sb3Ip
IGZpbmFsOworICAgIHZvaWQgZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcHJvdG9j
b2xfY2FsbElkLCBSZWY8SlNPTjo6QXJyYXk+JiYgY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYg
bm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIFJlZjxKU09OOjpPYmplY3Q+JiYgdmFsdWVzLCBSZWY8
SlNPTjo6VmFsdWU+JiYgcGF5bG9hZCwgaW50IGRhdGFiYXNlSWQsIFJlZjxKU09OOjpPYmplY3Q+
JiYgc3FsRXJyb3IsIGNvbnN0IFN0cmluZyYgc2NyZWVuQ29sb3IsIFJlZjxKU09OOjpBcnJheT4m
JiBhbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyYgcHJpbnRDb2xvcikgZmluYWw7CiBwcml2
YXRlOgogICAgIFJldGFpblB0cjxpZDxUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkhhbmRsZXI+
PiBtX2RlbGVnYXRlOwogfTsKQEAgLTgyMywxMzcgKzc5NywxMzUgQEAgcHJpdmF0ZToKIAogbmFt
ZXNwYWNlIEluc3BlY3RvciB7CiAKLXZvaWQgT2JqQ0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERp
c3BhdGNoZXI6OmV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMobG9uZyByZXF1ZXN0SWQsIGNv
bnN0IEpTT046OkFycmF5KiBpbl9jb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nKiBpbl9ub3Rlcywg
Y29uc3QgZG91YmxlKiBpbl90aW1lc3RhbXAsIGNvbnN0IEpTT046Ok9iamVjdCogaW5fdmFsdWVz
LCBjb25zdCBKU09OOjpWYWx1ZSogaW5fcGF5bG9hZCwgY29uc3QgaW50KiBpbl9kYXRhYmFzZUlk
LCBjb25zdCBKU09OOjpPYmplY3QqIGluX3NxbEVycm9yLCBjb25zdCBTdHJpbmcqIGluX3NjcmVl
bkNvbG9yLCBjb25zdCBKU09OOjpBcnJheSogaW5fYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJp
bmcqIGluX3ByaW50Q29sb3IpCit2b2lkIE9iakNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVyOjpleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcHJvdG9jb2xfY2FsbElk
LCBSZWZQdHI8SlNPTjo6QXJyYXk+JiYgaW5fb3B0X2NvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcm
IGluX29wdF9ub3RlcywgT3B0aW9uYWw8ZG91YmxlPiYmIGluX29wdF90aW1lc3RhbXAsIFJlZlB0
cjxKU09OOjpPYmplY3Q+JiYgaW5fb3B0X3ZhbHVlcywgUmVmUHRyPEpTT046OlZhbHVlPiYmIGlu
X29wdF9wYXlsb2FkLCBPcHRpb25hbDxpbnQ+JiYgaW5fb3B0X2RhdGFiYXNlSWQsIFJlZlB0cjxK
U09OOjpPYmplY3Q+JiYgaW5fb3B0X3NxbEVycm9yLCBjb25zdCBTdHJpbmcmIGluX29wdF9zY3Jl
ZW5Db2xvciwgUmVmUHRyPEpTT046OkFycmF5PiYmIGluX29wdF9hbHRlcm5hdGVDb2xvcnMsIGNv
bnN0IFN0cmluZyYgaW5fb3B0X3ByaW50Q29sb3IpCiB7CiAgICAgaWYgKCFbbV9kZWxlZ2F0ZSBy
ZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNX
aXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6Y29sdW1uTmFtZXM6bm90ZXM6dGltZXN0
YW1wOnZhbHVlczpwYXlsb2FkOmRhdGFiYXNlSWQ6c3FsRXJyb3I6c2NyZWVuQ29sb3I6YWx0ZXJu
YXRlQ29sb3JzOnByaW50Q29sb3I6KV0pIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+
cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2RO
b3RGb3VuZCwgIidEYXRhYmFzZS5leGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzJyB3YXMgbm90
IGZvdW5kIl9zKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xF
cnJvcihwcm90b2NvbF9jYWxsSWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwg
IidEYXRhYmFzZS5leGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzJyB3YXMgbm90IGZvdW5kIl9z
KTsKICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5n
ICplcnJvcikgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVy
cm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7Cisg
ICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocHJvdG9jb2xf
Y2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKICAgICAgICAg
YmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKICAgICB9OwogCi0gICAg
aWQgc3VjY2Vzc0NhbGxiYWNrID0gXihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKipjb2x1bW5OYW1l
cywgTlNTdHJpbmcgKipub3RlcywgZG91YmxlICp0aW1lc3RhbXAsIFJXSVByb3RvY29sSlNPTk9i
amVjdCAqKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqcGF5bG9hZCwgaW50ICpkYXRh
YmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoqc3FsRXJyb3IsIFRlc3RQcm90b2Nv
bERhdGFiYXNlUHJpbWFyeUNvbG9ycyAqc2NyZWVuQ29sb3IsIE5TQXJyYXkvKjxOU1N0cmluZz4q
LyAqKmFsdGVybmF0ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9u
YWxQYXJhbWV0ZXJzUHJpbnRDb2xvciAqcHJpbnRDb2xvcikgewotICAgICAgICBSZWY8SlNPTjo6
T2JqZWN0PiByZXN1bHRPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgICAgICBU
SFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIoY29sdW1uTmFtZXMsIEAi
Y29sdW1uTmFtZXMiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxf
UEFSQU1FVEVSKG5vdGVzLCBAIm5vdGVzIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1Jf
QkFEX09QVElPTkFMX1BBUkFNRVRFUih2YWx1ZXMsIEAidmFsdWVzIik7Ci0gICAgICAgIFRIUk9X
X0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihwYXlsb2FkLCBAInBheWxvYWQi
KTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKHNx
bEVycm9yLCBAInNxbEVycm9yIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09Q
VElPTkFMX1BBUkFNRVRFUihhbHRlcm5hdGVDb2xvcnMsIEAiYWx0ZXJuYXRlQ29sb3JzIik7Ci0g
ICAgICAgIGlmIChjb2x1bW5OYW1lcykKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0QXJy
YXkoImNvbHVtbk5hbWVzIl9zLCB0b0pTT05TdHJpbmdBcnJheSgqY29sdW1uTmFtZXMpKTsKLSAg
ICAgICAgaWYgKG5vdGVzKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoIm5v
dGVzIl9zLCAqbm90ZXMpOwotICAgICAgICBpZiAodGltZXN0YW1wKQotICAgICAgICAgICAgcmVz
dWx0T2JqZWN0LT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywgKnRpbWVzdGFtcCk7Ci0gICAgICAg
IGlmICh2YWx1ZXMpCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldE9iamVjdCgidmFsdWVz
Il9zLCBbKnZhbHVlcyB0b0pTT05PYmplY3RdKTsKLSAgICAgICAgaWYgKHBheWxvYWQpCi0gICAg
ICAgICAgICByZXN1bHRPYmplY3QtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCBbKnBheWxvYWQgdG9K
U09OT2JqZWN0XSk7Ci0gICAgICAgIGlmIChkYXRhYmFzZUlkKQotICAgICAgICAgICAgcmVzdWx0
T2JqZWN0LT5zZXRJbnRlZ2VyKCJkYXRhYmFzZUlkIl9zLCAqZGF0YWJhc2VJZCk7Ci0gICAgICAg
IGlmIChzcWxFcnJvcikKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0T2JqZWN0KCJzcWxF
cnJvciJfcywgWypzcWxFcnJvciB0b0pTT05PYmplY3RdKTsKLSAgICAgICAgaWYgKHNjcmVlbkNv
bG9yKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9z
LCB0b1Byb3RvY29sU3RyaW5nKCpzY3JlZW5Db2xvcikpOwotICAgICAgICBpZiAoYWx0ZXJuYXRl
Q29sb3JzKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29s
b3JzIl9zLCB0b0pTT05TdHJpbmdBcnJheSgqYWx0ZXJuYXRlQ29sb3JzKSk7Ci0gICAgICAgIGlm
IChwcmludENvbG9yKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoInByaW50
Q29sb3IiX3MsIHRvUHJvdG9jb2xTdHJpbmcoKnByaW50Q29sb3IpKTsKLSAgICAgICAgYmFja2Vu
ZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHRPYmpl
Y3QpLCBmYWxzZSk7CisgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXihOU0FycmF5Lyo8TlNTdHJp
bmc+Ki8gKipvdXRfb3B0X2NvbHVtbk5hbWVzLCBOU1N0cmluZyAqKm91dF9vcHRfbm90ZXMsIGRv
dWJsZSAqb3V0X29wdF90aW1lc3RhbXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqKm91dF9vcHRf
dmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKipvdXRfb3B0X3BheWxvYWQsIGludCAqb3V0
X29wdF9kYXRhYmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoqb3V0X29wdF9zcWxF
cnJvciwgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzICpvdXRfb3B0X3NjcmVlbkNv
bG9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKipvdXRfb3B0X2FsdGVybmF0ZUNvbG9ycywgVGVz
dFByb3RvY29sRGF0YWJhc2UoYW5vbnltb3VzKSAqb3V0X29wdF9wcmludENvbG9yKSB7CisgICAg
ICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwor
ICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIob3V0X29w
dF9jb2x1bW5OYW1lcywgQCJjb2x1bW5OYW1lcyIpOworICAgICAgICBUSFJPV19FWENFUFRJT05f
Rk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIob3V0X29wdF9ub3RlcywgQCJub3RlcyIpOworICAg
ICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIob3V0X29wdF92
YWx1ZXMsIEAidmFsdWVzIik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElP
TkFMX1BBUkFNRVRFUihvdXRfb3B0X3BheWxvYWQsIEAicGF5bG9hZCIpOworICAgICAgICBUSFJP
V19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIob3V0X29wdF9zcWxFcnJvciwg
QCJzcWxFcnJvciIpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9Q
QVJBTUVURVIob3V0X29wdF9hbHRlcm5hdGVDb2xvcnMsIEAiYWx0ZXJuYXRlQ29sb3JzIik7Cisg
ICAgICAgIGlmICghIW91dF9vcHRfY29sdW1uTmFtZXMpCisgICAgICAgICAgICBwcm90b2NvbF9q
c29uTWVzc2FnZS0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCB0b0pTT05TdHJpbmdBcnJheSgq
b3V0X29wdF9jb2x1bW5OYW1lcykpOworICAgICAgICBpZiAoISFvdXRfb3B0X25vdGVzKQorICAg
ICAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygibm90ZXMiX3MsICpvdXRf
b3B0X25vdGVzKTsKKyAgICAgICAgaWYgKCEhb3V0X29wdF90aW1lc3RhbXApCisgICAgICAgICAg
ICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsICpvdXRfb3B0
X3RpbWVzdGFtcCk7CisgICAgICAgIGlmICghIW91dF9vcHRfdmFsdWVzKQorICAgICAgICAgICAg
cHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldE9iamVjdCgidmFsdWVzIl9zLCBbKm91dF9vcHRfdmFs
dWVzIHRvSlNPTk9iamVjdF0pOworICAgICAgICBpZiAoISFvdXRfb3B0X3BheWxvYWQpCisgICAg
ICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0VmFsdWUoInBheWxvYWQiX3MsIFsqb3V0
X29wdF9wYXlsb2FkIHRvSlNPTk9iamVjdF0pOworICAgICAgICBpZiAoISFvdXRfb3B0X2RhdGFi
YXNlSWQpCisgICAgICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0SW50ZWdlcigiZGF0
YWJhc2VJZCJfcywgKm91dF9vcHRfZGF0YWJhc2VJZCk7CisgICAgICAgIGlmICghIW91dF9vcHRf
c3FsRXJyb3IpCisgICAgICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJz
cWxFcnJvciJfcywgWypvdXRfb3B0X3NxbEVycm9yIHRvSlNPTk9iamVjdF0pOworICAgICAgICBp
ZiAoISFvdXRfb3B0X3NjcmVlbkNvbG9yKQorICAgICAgICAgICAgcHJvdG9jb2xfanNvbk1lc3Nh
Z2UtPnNldFN0cmluZygic2NyZWVuQ29sb3IiX3MsIHRvUHJvdG9jb2xTdHJpbmcoKm91dF9vcHRf
c2NyZWVuQ29sb3IpKTsKKyAgICAgICAgaWYgKCEhb3V0X29wdF9hbHRlcm5hdGVDb2xvcnMpCisg
ICAgICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9y
cyJfcywgdG9KU09OU3RyaW5nQXJyYXkoKm91dF9vcHRfYWx0ZXJuYXRlQ29sb3JzKSk7CisgICAg
ICAgIGlmICghIW91dF9vcHRfcHJpbnRDb2xvcikKKyAgICAgICAgICAgIHByb3RvY29sX2pzb25N
ZXNzYWdlLT5zZXRTdHJpbmcoInByaW50Q29sb3IiX3MsIHRvUHJvdG9jb2xTdHJpbmcoKm91dF9v
cHRfcHJpbnRDb2xvcikpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9u
c2UocHJvdG9jb2xfY2FsbElkLCBXVEZNb3ZlKHByb3RvY29sX2pzb25NZXNzYWdlKSwgZmFsc2Up
OwogICAgIH07CiAKLSAgICBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKm9faW5fY29sdW1uTmFtZXM7
Ci0gICAgaWYgKGluX2NvbHVtbk5hbWVzKQotICAgICAgICBvX2luX2NvbHVtbk5hbWVzID0gdG9P
YmpDU3RyaW5nQXJyYXkoaW5fY29sdW1uTmFtZXMpOwotICAgIE5TU3RyaW5nICpvX2luX25vdGVz
OwotICAgIGlmIChpbl9ub3RlcykKLSAgICAgICAgb19pbl9ub3RlcyA9ICppbl9ub3RlczsKLSAg
ICBkb3VibGUgb19pbl90aW1lc3RhbXA7Ci0gICAgaWYgKGluX3RpbWVzdGFtcCkKLSAgICAgICAg
b19pbl90aW1lc3RhbXAgPSAqaW5fdGltZXN0YW1wOwotICAgIFJXSVByb3RvY29sSlNPTk9iamVj
dCAqb19pbl92YWx1ZXM7Ci0gICAgaWYgKGluX3ZhbHVlcykKLSAgICAgICAgb19pbl92YWx1ZXMg
PSBbW1tSV0lQcm90b2NvbEpTT05PYmplY3QgYWxsb2NdIGluaXRXaXRoSlNPTk9iamVjdDppbl92
YWx1ZXNdIGF1dG9yZWxlYXNlXTsKLSAgICBSV0lQcm90b2NvbEpTT05PYmplY3QgKm9faW5fcGF5
bG9hZDsKLSAgICBpZiAoaW5fcGF5bG9hZCkKLSAgICAgICAgb19pbl9wYXlsb2FkID0gW1tbUldJ
UHJvdG9jb2xKU09OT2JqZWN0IGFsbG9jXSBpbml0V2l0aEpTT05PYmplY3Q6aW5fcGF5bG9hZF0g
YXV0b3JlbGVhc2VdOwotICAgIGludCBvX2luX2RhdGFiYXNlSWQ7Ci0gICAgaWYgKGluX2RhdGFi
YXNlSWQpCi0gICAgICAgIG9faW5fZGF0YWJhc2VJZCA9ICppbl9kYXRhYmFzZUlkOwotICAgIFRl
c3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKm9faW5fc3FsRXJyb3I7Ci0gICAgaWYgKGluX3NxbEVy
cm9yKQotICAgICAgICBvX2luX3NxbEVycm9yID0gW1tbVGVzdFByb3RvY29sRGF0YWJhc2VFcnJv
ciBhbGxvY10gaW5pdFdpdGhKU09OT2JqZWN0OmluX3NxbEVycm9yXSBhdXRvcmVsZWFzZV07Ci0g
ICAgT3B0aW9uYWw8VGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzPiBvX2luX3NjcmVl
bkNvbG9yOwotICAgIGlmIChpbl9zY3JlZW5Db2xvcikKLSAgICAgICAgb19pbl9zY3JlZW5Db2xv
ciA9IGZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnM+
KCppbl9zY3JlZW5Db2xvcik7Ci0gICAgTlNBcnJheS8qPE5TU3RyaW5nPiovICpvX2luX2FsdGVy
bmF0ZUNvbG9yczsKLSAgICBpZiAoaW5fYWx0ZXJuYXRlQ29sb3JzKQotICAgICAgICBvX2luX2Fs
dGVybmF0ZUNvbG9ycyA9IHRvT2JqQ1N0cmluZ0FycmF5KGluX2FsdGVybmF0ZUNvbG9ycyk7Ci0g
ICAgT3B0aW9uYWw8VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0
ZXJzUHJpbnRDb2xvcj4gb19pbl9wcmludENvbG9yOwotICAgIGlmIChpbl9wcmludENvbG9yKQot
ICAgICAgICBvX2luX3ByaW50Q29sb3IgPSBmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29s
RGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvcj4oKmluX3ByaW50
Q29sb3IpOwotCi0gICAgW21fZGVsZWdhdGUgZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1dp
dGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxs
YmFjayBjb2x1bW5OYW1lczooaW5fY29sdW1uTmFtZXMgPyAmb19pbl9jb2x1bW5OYW1lcyA6IG5p
bCkgbm90ZXM6KGluX25vdGVzID8gJm9faW5fbm90ZXMgOiBuaWwpIHRpbWVzdGFtcDooaW5fdGlt
ZXN0YW1wID8gJm9faW5fdGltZXN0YW1wIDogbmlsKSB2YWx1ZXM6KGluX3ZhbHVlcyA/ICZvX2lu
X3ZhbHVlcyA6IG5pbCkgcGF5bG9hZDooaW5fcGF5bG9hZCA/ICZvX2luX3BheWxvYWQgOiBuaWwp
IGRhdGFiYXNlSWQ6KGluX2RhdGFiYXNlSWQgPyAmb19pbl9kYXRhYmFzZUlkIDogbmlsKSBzcWxF
cnJvcjooaW5fc3FsRXJyb3IgPyAmb19pbl9zcWxFcnJvciA6IG5pbCkgc2NyZWVuQ29sb3I6KGlu
X3NjcmVlbkNvbG9yID8gJm9faW5fc2NyZWVuQ29sb3IudmFsdWUoKSA6IG5pbCkgYWx0ZXJuYXRl
Q29sb3JzOihpbl9hbHRlcm5hdGVDb2xvcnMgPyAmb19pbl9hbHRlcm5hdGVDb2xvcnMgOiBuaWwp
IHByaW50Q29sb3I6KGluX3ByaW50Q29sb3IgPyAmb19pbl9wcmludENvbG9yLnZhbHVlKCkgOiBu
aWwpXTsKKyAgICBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKm9faW5fb3B0X2NvbHVtbk5hbWVzOwor
ICAgIGlmICghIWluX29wdF9jb2x1bW5OYW1lcykKKyAgICAgICAgb19pbl9vcHRfY29sdW1uTmFt
ZXMgPSB0b09iakNTdHJpbmdBcnJheShpbl9vcHRfY29sdW1uTmFtZXMucmVsZWFzZU5vbk51bGwo
KSk7CisgICAgTlNTdHJpbmcgKm9faW5fb3B0X25vdGVzOworICAgIGlmICghIWluX29wdF9ub3Rl
cykKKyAgICAgICAgb19pbl9vcHRfbm90ZXMgPSBpbl9vcHRfbm90ZXM7CisgICAgZG91YmxlIG9f
aW5fb3B0X3RpbWVzdGFtcDsKKyAgICBpZiAoISFpbl9vcHRfdGltZXN0YW1wKQorICAgICAgICBv
X2luX29wdF90aW1lc3RhbXAgPSAqaW5fb3B0X3RpbWVzdGFtcDsKKyAgICBSV0lQcm90b2NvbEpT
T05PYmplY3QgKm9faW5fb3B0X3ZhbHVlczsKKyAgICBpZiAoISFpbl9vcHRfdmFsdWVzKQorICAg
ICAgICBvX2luX29wdF92YWx1ZXMgPSBbW1tSV0lQcm90b2NvbEpTT05PYmplY3QgYWxsb2NdIGlu
aXRXaXRoSlNPTk9iamVjdDppbl9vcHRfdmFsdWVzLnJlbGVhc2VOb25OdWxsKCldIGF1dG9yZWxl
YXNlXTsKKyAgICBSV0lQcm90b2NvbEpTT05PYmplY3QgKm9faW5fb3B0X3BheWxvYWQ7CisgICAg
aWYgKCEhaW5fb3B0X3BheWxvYWQpCisgICAgICAgIG9faW5fb3B0X3BheWxvYWQgPSBbW1tSV0lQ
cm90b2NvbEpTT05PYmplY3QgYWxsb2NdIGluaXRXaXRoSlNPTk9iamVjdDppbl9vcHRfcGF5bG9h
ZC5yZWxlYXNlTm9uTnVsbCgpXSBhdXRvcmVsZWFzZV07CisgICAgaW50IG9faW5fb3B0X2RhdGFi
YXNlSWQ7CisgICAgaWYgKCEhaW5fb3B0X2RhdGFiYXNlSWQpCisgICAgICAgIG9faW5fb3B0X2Rh
dGFiYXNlSWQgPSAqaW5fb3B0X2RhdGFiYXNlSWQ7CisgICAgVGVzdFByb3RvY29sRGF0YWJhc2VF
cnJvciAqb19pbl9vcHRfc3FsRXJyb3I7CisgICAgaWYgKCEhaW5fb3B0X3NxbEVycm9yKQorICAg
ICAgICBvX2luX29wdF9zcWxFcnJvciA9IFtbW1Rlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgYWxs
b2NdIGluaXRXaXRoSlNPTk9iamVjdDppbl9vcHRfc3FsRXJyb3IucmVsZWFzZU5vbk51bGwoKV0g
YXV0b3JlbGVhc2VdOworICAgIE9wdGlvbmFsPFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNv
bG9ycz4gb19pbl9vcHRfc2NyZWVuQ29sb3I7CisgICAgaWYgKCEhaW5fb3B0X3NjcmVlbkNvbG9y
KQorICAgICAgICBvX2luX29wdF9zY3JlZW5Db2xvciA9IGZyb21Qcm90b2NvbFN0cmluZzxUZXN0
UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnM+KGluX29wdF9zY3JlZW5Db2xvcik7CisgICAg
TlNBcnJheS8qPE5TU3RyaW5nPiovICpvX2luX29wdF9hbHRlcm5hdGVDb2xvcnM7CisgICAgaWYg
KCEhaW5fb3B0X2FsdGVybmF0ZUNvbG9ycykKKyAgICAgICAgb19pbl9vcHRfYWx0ZXJuYXRlQ29s
b3JzID0gdG9PYmpDU3RyaW5nQXJyYXkoaW5fb3B0X2FsdGVybmF0ZUNvbG9ycy5yZWxlYXNlTm9u
TnVsbCgpKTsKKyAgICBPcHRpb25hbDxUZXN0UHJvdG9jb2xEYXRhYmFzZShhbm9ueW1vdXMpPiBv
X2luX29wdF9wcmludENvbG9yOworICAgIGlmICghIWluX29wdF9wcmludENvbG9yKQorICAgICAg
ICBvX2luX29wdF9wcmludENvbG9yID0gZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbERh
dGFiYXNlKGFub255bW91cyk+KGluX29wdF9wcmludENvbG9yKTsKKyAgICBbbV9kZWxlZ2F0ZSBl
eGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFj
ayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrIGNvbHVtbk5hbWVzOighIWluX29wdF9j
b2x1bW5OYW1lcyA/ICZvX2luX29wdF9jb2x1bW5OYW1lcyA6IG5pbCkgbm90ZXM6KCEhaW5fb3B0
X25vdGVzID8gJm9faW5fb3B0X25vdGVzIDogbmlsKSB0aW1lc3RhbXA6KCEhaW5fb3B0X3RpbWVz
dGFtcCA/ICZvX2luX29wdF90aW1lc3RhbXAgOiBuaWwpIHZhbHVlczooISFpbl9vcHRfdmFsdWVz
ID8gJm9faW5fb3B0X3ZhbHVlcyA6IG5pbCkgcGF5bG9hZDooISFpbl9vcHRfcGF5bG9hZCA/ICZv
X2luX29wdF9wYXlsb2FkIDogbmlsKSBkYXRhYmFzZUlkOighIWluX29wdF9kYXRhYmFzZUlkID8g
Jm9faW5fb3B0X2RhdGFiYXNlSWQgOiBuaWwpIHNxbEVycm9yOighIWluX29wdF9zcWxFcnJvciA/
ICZvX2luX29wdF9zcWxFcnJvciA6IG5pbCkgc2NyZWVuQ29sb3I6KCEhaW5fb3B0X3NjcmVlbkNv
bG9yID8gJm9faW5fb3B0X3NjcmVlbkNvbG9yLnZhbHVlKCkgOiBuaWwpIGFsdGVybmF0ZUNvbG9y
czooISFpbl9vcHRfYWx0ZXJuYXRlQ29sb3JzID8gJm9faW5fb3B0X2FsdGVybmF0ZUNvbG9ycyA6
IG5pbCkgcHJpbnRDb2xvcjooISFpbl9vcHRfcHJpbnRDb2xvciA/ICZvX2luX29wdF9wcmludENv
bG9yLnZhbHVlKCkgOiBuaWwpXTsKIH0KIAotdm9pZCBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNr
ZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcmVxdWVzdElk
LCBjb25zdCBKU09OOjpBcnJheSYgaW5fY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgaW5fbm90
ZXMsIGRvdWJsZSBpbl90aW1lc3RhbXAsIGNvbnN0IEpTT046Ok9iamVjdCYgaW5fdmFsdWVzLCBK
U09OOjpWYWx1ZSBpbl9wYXlsb2FkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgSlNPTjo6T2Jq
ZWN0JiBpbl9zcWxFcnJvciwgY29uc3QgU3RyaW5nJiBpbl9zY3JlZW5Db2xvciwgY29uc3QgSlNP
Tjo6QXJyYXkmIGluX2FsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nJiBpbl9wcmludENvbG9y
KQordm9pZCBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZU5v
T3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBSZWY8SlNPTjo6QXJyYXk+
JiYgaW5fY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgaW5fbm90ZXMsIGRvdWJsZSBpbl90aW1l
c3RhbXAsIFJlZjxKU09OOjpPYmplY3Q+JiYgaW5fdmFsdWVzLCBSZWY8SlNPTjo6VmFsdWU+JiYg
aW5fcGF5bG9hZCwgaW50IGluX2RhdGFiYXNlSWQsIFJlZjxKU09OOjpPYmplY3Q+JiYgaW5fc3Fs
RXJyb3IsIGNvbnN0IFN0cmluZyYgaW5fc2NyZWVuQ29sb3IsIFJlZjxKU09OOjpBcnJheT4mJiBp
bl9hbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyYgaW5fcHJpbnRDb2xvcikKIHsKICAgICBp
ZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoZXhlY3V0ZU5vT3B0
aW9uYWxQYXJhbWV0ZXJzV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOmNvbHVtbk5h
bWVzOm5vdGVzOnRpbWVzdGFtcDp2YWx1ZXM6cGF5bG9hZDpkYXRhYmFzZUlkOnNxbEVycm9yOnNj
cmVlbkNvbG9yOmFsdGVybmF0ZUNvbG9yczpwcmludENvbG9yOildKSB7Ci0gICAgICAgIGJhY2tl
bmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlz
cGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRGF0YWJhc2UuZXhlY3V0ZU5vT3B0aW9uYWxQYXJh
bWV0ZXJzJyB3YXMgbm90IGZvdW5kIl9zKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+
cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxsSWQsIEJhY2tlbmREaXNwYXRjaGVyOjpN
ZXRob2ROb3RGb3VuZCwgIidEYXRhYmFzZS5leGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMnIHdh
cyBub3QgZm91bmQiX3MpOwogICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGlu
Z0Vycm9ycygpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWQgZXJyb3JDYWxsYmFj
ayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJl
cG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJy
b3IsIGVycm9yKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xF
cnJvcihwcm90b2NvbF9jYWxsSWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJy
b3IpOwogICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwog
ICAgIH07CiAKLSAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeKE5TQXJyYXkvKjxOU1N0cmluZz4q
LyAqY29sdW1uTmFtZXMsIE5TU3RyaW5nICpub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgUldJUHJv
dG9jb2xKU09OT2JqZWN0ICp2YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqcGF5bG9hZCwg
aW50IGRhdGFiYXNlSWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKnNxbEVycm9yLCBUZXN0
UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgc2NyZWVuQ29sb3IsIE5TQXJyYXkvKjxOU1N0
cmluZz4qLyAqYWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09w
dGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3IgcHJpbnRDb2xvcikgewotICAgICAgICBSZWY8SlNP
Tjo6T2JqZWN0PiByZXN1bHRPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgICAg
ICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihjb2x1bW5OYW1lcywgQCJj
b2x1bW5OYW1lcyIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFN
RVRFUihub3RlcywgQCJub3RlcyIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJ
UkVEX1BBUkFNRVRFUih2YWx1ZXMsIEAidmFsdWVzIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKHBheWxvYWQsIEAicGF5bG9hZCIpOwotICAgICAgICBU
SFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihzcWxFcnJvciwgQCJzcWxFcnJv
ciIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihhbHRl
cm5hdGVDb2xvcnMsIEAiYWx0ZXJuYXRlQ29sb3JzIik7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+
c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCB0b0pTT05TdHJpbmdBcnJheShjb2x1bW5OYW1lcykp
OwotICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZygibm90ZXMiX3MsIG5vdGVzKTsKLSAg
ICAgICAgcmVzdWx0T2JqZWN0LT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywgdGltZXN0YW1wKTsK
LSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRPYmplY3QoInZhbHVlcyJfcywgW3ZhbHVlcyB0b0pT
T05PYmplY3RdKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRWYWx1ZSgicGF5bG9hZCJfcywg
W3BheWxvYWQgdG9KU09OT2JqZWN0XSk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0SW50ZWdl
cigiZGF0YWJhc2VJZCJfcywgZGF0YWJhc2VJZCk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0
T2JqZWN0KCJzcWxFcnJvciJfcywgW3NxbEVycm9yIHRvSlNPTk9iamVjdF0pOwotICAgICAgICBy
ZXN1bHRPYmplY3QtPnNldFN0cmluZygic2NyZWVuQ29sb3IiX3MsIHRvUHJvdG9jb2xTdHJpbmco
c2NyZWVuQ29sb3IpKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRBcnJheSgiYWx0ZXJuYXRl
Q29sb3JzIl9zLCB0b0pTT05TdHJpbmdBcnJheShhbHRlcm5hdGVDb2xvcnMpKTsKLSAgICAgICAg
cmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoInByaW50Q29sb3IiX3MsIHRvUHJvdG9jb2xTdHJpbmco
cHJpbnRDb2xvcikpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2Uo
cmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdE9iamVjdCksIGZhbHNlKTsKKyAgICBpZCBzdWNjZXNz
Q2FsbGJhY2sgPSBeKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqb3V0X2NvbHVtbk5hbWVzLCBOU1N0
cmluZyAqb3V0X25vdGVzLCBkb3VibGUgb3V0X3RpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2Jq
ZWN0ICpvdXRfdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKm91dF9wYXlsb2FkLCBpbnQg
b3V0X2RhdGFiYXNlSWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKm91dF9zcWxFcnJvciwg
VGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzIG91dF9zY3JlZW5Db2xvciwgTlNBcnJh
eS8qPE5TU3RyaW5nPiovICpvdXRfYWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFz
ZShhbm9ueW1vdXMpIG91dF9wcmludENvbG9yKSB7CisgICAgICAgIGF1dG8gcHJvdG9jb2xfanNv
bk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBUSFJPV19FWENFUFRJ
T05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihvdXRfY29sdW1uTmFtZXMsIEAiY29sdW1uTmFtZXMi
KTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIob3V0X25v
dGVzLCBAIm5vdGVzIik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFS
QU1FVEVSKG91dF92YWx1ZXMsIEAidmFsdWVzIik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9G
T1JfUkVRVUlSRURfUEFSQU1FVEVSKG91dF9wYXlsb2FkLCBAInBheWxvYWQiKTsKKyAgICAgICAg
VEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIob3V0X3NxbEVycm9yLCBAInNx
bEVycm9yIik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVS
KG91dF9hbHRlcm5hdGVDb2xvcnMsIEAiYWx0ZXJuYXRlQ29sb3JzIik7CisgICAgICAgIHByb3Rv
Y29sX2pzb25NZXNzYWdlLT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIHRvSlNPTlN0cmluZ0Fy
cmF5KG91dF9jb2x1bW5OYW1lcykpOworICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0
U3RyaW5nKCJub3RlcyJfcywgb3V0X25vdGVzKTsKKyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3Nh
Z2UtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCBvdXRfdGltZXN0YW1wKTsKKyAgICAgICAgcHJv
dG9jb2xfanNvbk1lc3NhZ2UtPnNldE9iamVjdCgidmFsdWVzIl9zLCBbb3V0X3ZhbHVlcyB0b0pT
T05PYmplY3RdKTsKKyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFZhbHVlKCJwYXls
b2FkIl9zLCBbb3V0X3BheWxvYWQgdG9KU09OT2JqZWN0XSk7CisgICAgICAgIHByb3RvY29sX2pz
b25NZXNzYWdlLT5zZXRJbnRlZ2VyKCJkYXRhYmFzZUlkIl9zLCBvdXRfZGF0YWJhc2VJZCk7Cisg
ICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBbb3V0
X3NxbEVycm9yIHRvSlNPTk9iamVjdF0pOworICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+
c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgdG9Qcm90b2NvbFN0cmluZyhvdXRfc2NyZWVuQ29s
b3IpKTsKKyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldEFycmF5KCJhbHRlcm5hdGVD
b2xvcnMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KG91dF9hbHRlcm5hdGVDb2xvcnMpKTsKKyAgICAg
ICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygicHJpbnRDb2xvciJfcywgdG9Qcm90
b2NvbFN0cmluZyhvdXRfcHJpbnRDb2xvcikpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigp
LT5zZW5kUmVzcG9uc2UocHJvdG9jb2xfY2FsbElkLCBXVEZNb3ZlKHByb3RvY29sX2pzb25NZXNz
YWdlKSwgZmFsc2UpOwogICAgIH07CiAKLSAgICBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKm9faW5f
Y29sdW1uTmFtZXMgPSB0b09iakNTdHJpbmdBcnJheSgmaW5fY29sdW1uTmFtZXMpOworICAgIE5T
QXJyYXkvKjxOU1N0cmluZz4qLyAqb19pbl9jb2x1bW5OYW1lcyA9IHRvT2JqQ1N0cmluZ0FycmF5
KFdURk1vdmUoaW5fY29sdW1uTmFtZXMpKTsKICAgICBOU1N0cmluZyAqb19pbl9ub3RlcyA9IGlu
X25vdGVzOwogICAgIGRvdWJsZSBvX2luX3RpbWVzdGFtcCA9IGluX3RpbWVzdGFtcDsKLSAgICBS
V0lQcm90b2NvbEpTT05PYmplY3QgKm9faW5fdmFsdWVzID0gW1tbUldJUHJvdG9jb2xKU09OT2Jq
ZWN0IGFsbG9jXSBpbml0V2l0aEpTT05PYmplY3Q6JmluX3ZhbHVlc10gYXV0b3JlbGVhc2VdOwot
ICAgIFJXSVByb3RvY29sSlNPTk9iamVjdCAqb19pbl9wYXlsb2FkID0gW1tbUldJUHJvdG9jb2xK
U09OT2JqZWN0IGFsbG9jXSBpbml0V2l0aEpTT05PYmplY3Q6JmluX3BheWxvYWRdIGF1dG9yZWxl
YXNlXTsKKyAgICBSV0lQcm90b2NvbEpTT05PYmplY3QgKm9faW5fdmFsdWVzID0gW1tbUldJUHJv
dG9jb2xKU09OT2JqZWN0IGFsbG9jXSBpbml0V2l0aEpTT05PYmplY3Q6V1RGTW92ZShpbl92YWx1
ZXMpXSBhdXRvcmVsZWFzZV07CisgICAgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpvX2luX3BheWxv
YWQgPSBbW1tSV0lQcm90b2NvbEpTT05PYmplY3QgYWxsb2NdIGluaXRXaXRoSlNPTk9iamVjdDpX
VEZNb3ZlKGluX3BheWxvYWQpXSBhdXRvcmVsZWFzZV07CiAgICAgaW50IG9faW5fZGF0YWJhc2VJ
ZCA9IGluX2RhdGFiYXNlSWQ7Ci0gICAgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqb19pbl9z
cWxFcnJvciA9IFtbW1Rlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgYWxsb2NdIGluaXRXaXRoSlNP
Tk9iamVjdDomaW5fc3FsRXJyb3JdIGF1dG9yZWxlYXNlXTsKKyAgICBUZXN0UHJvdG9jb2xEYXRh
YmFzZUVycm9yICpvX2luX3NxbEVycm9yID0gW1tbVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciBh
bGxvY10gaW5pdFdpdGhKU09OT2JqZWN0OldURk1vdmUoaW5fc3FsRXJyb3IpXSBhdXRvcmVsZWFz
ZV07CiAgICAgT3B0aW9uYWw8VGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzPiBvX2lu
X3NjcmVlbkNvbG9yID0gZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbERhdGFiYXNlUHJp
bWFyeUNvbG9ycz4oaW5fc2NyZWVuQ29sb3IpOwogICAgIGlmICghb19pbl9zY3JlZW5Db2xvcikg
ewogICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tl
bmREaXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCAiUGFyYW1ldGVyICdzY3JlZW5Db2xvcicgb2Yg
bWV0aG9kICdEYXRhYmFzZS5leGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMnIGNhbm5vdCBiZSBw
cm9jZXNzZWQiX3MpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIE5TQXJyYXkvKjxOU1N0
cmluZz4qLyAqb19pbl9hbHRlcm5hdGVDb2xvcnMgPSB0b09iakNTdHJpbmdBcnJheSgmaW5fYWx0
ZXJuYXRlQ29sb3JzKTsKLSAgICBPcHRpb25hbDxUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVO
b09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3I+IG9faW5fcHJpbnRDb2xvciA9IGZyb21Qcm90
b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVy
c1ByaW50Q29sb3I+KGluX3ByaW50Q29sb3IpOworICAgIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAq
b19pbl9hbHRlcm5hdGVDb2xvcnMgPSB0b09iakNTdHJpbmdBcnJheShXVEZNb3ZlKGluX2FsdGVy
bmF0ZUNvbG9ycykpOworICAgIE9wdGlvbmFsPFRlc3RQcm90b2NvbERhdGFiYXNlKGFub255bW91
cyk+IG9faW5fcHJpbnRDb2xvciA9IGZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xEYXRh
YmFzZShhbm9ueW1vdXMpPihpbl9wcmludENvbG9yKTsKICAgICBpZiAoIW9faW5fcHJpbnRDb2xv
cikgewogICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKEJh
Y2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCAiUGFyYW1ldGVyICdwcmludENvbG9yJyBv
ZiBtZXRob2QgJ0RhdGFiYXNlLmV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycycgY2Fubm90IGJl
IHByb2Nlc3NlZCJfcyk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0KICAgICBbbV9kZWxlZ2F0
ZSBleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxi
YWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2sgY29sdW1uTmFtZXM6b19pbl9jb2x1
bW5OYW1lcyBub3RlczpvX2luX25vdGVzIHRpbWVzdGFtcDpvX2luX3RpbWVzdGFtcCB2YWx1ZXM6
b19pbl92YWx1ZXMgcGF5bG9hZDpvX2luX3BheWxvYWQgZGF0YWJhc2VJZDpvX2luX2RhdGFiYXNl
SWQgc3FsRXJyb3I6b19pbl9zcWxFcnJvciBzY3JlZW5Db2xvcjpvX2luX3NjcmVlbkNvbG9yLnZh
bHVlKCkgYWx0ZXJuYXRlQ29sb3JzOm9faW5fYWx0ZXJuYXRlQ29sb3JzIHByaW50Q29sb3I6b19p
bl9wcmludENvbG9yLnZhbHVlKCldOwogfQogCkBAIC0xMjEzLDggKzExODUsOCBAQCBfX2F0dHJp
YnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKIAogQHByb3RvY29sIFRlc3RQcm90b2Nv
bERhdGFiYXNlRG9tYWluSGFuZGxlciA8TlNPYmplY3Q+CiBAb3B0aW9uYWwKLS0gKHZvaWQpZXhl
Y3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1dpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3Ry
aW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikoTlNBcnJh
eS8qPE5TU3RyaW5nPiovICoqY29sdW1uTmFtZXMsIE5TU3RyaW5nICoqbm90ZXMsIGRvdWJsZSAq
dGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKip2YWx1ZXMsIFJXSVByb3RvY29sSlNP
Tk9iamVjdCAqKnBheWxvYWQsIGludCAqZGF0YWJhc2VJZCwgVGVzdFByb3RvY29sRGF0YWJhc2VF
cnJvciAqKnNxbEVycm9yLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgKnNjcmVl
bkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiphbHRlcm5hdGVDb2xvcnMsIFRlc3RQcm90
b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3IgKnByaW50
Q29sb3IpKXN1Y2Nlc3NDYWxsYmFjayBjb2x1bW5OYW1lczooTlNBcnJheS8qPE5TU3RyaW5nPiov
ICoqKWNvbHVtbk5hbWVzIG5vdGVzOihOU1N0cmluZyAqKilub3RlcyB0aW1lc3RhbXA6KGRvdWJs
ZSAqKXRpbWVzdGFtcCB2YWx1ZXM6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKil2YWx1ZXMgcGF5
bG9hZDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqKXBheWxvYWQgZGF0YWJhc2VJZDooaW50ICop
ZGF0YWJhc2VJZCBzcWxFcnJvcjooVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKilzcWxFcnJv
ciBzY3JlZW5Db2xvcjooVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzICopc2NyZWVu
Q29sb3IgYWx0ZXJuYXRlQ29sb3JzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiopYWx0ZXJuYXRl
Q29sb3JzIHByaW50Q29sb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFs
UGFyYW1ldGVyc1ByaW50Q29sb3IgKilwcmludENvbG9yOwotLSAodm9pZClleGVjdXRlTm9PcHRp
b25hbFBhcmFtZXRlcnNXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3Ip
KWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKE5TQXJyYXkvKjxOU1N0cmlu
Zz4qLyAqY29sdW1uTmFtZXMsIE5TU3RyaW5nICpub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgUldJ
UHJvdG9jb2xKU09OT2JqZWN0ICp2YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqcGF5bG9h
ZCwgaW50IGRhdGFiYXNlSWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKnNxbEVycm9yLCBU
ZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgc2NyZWVuQ29sb3IsIE5TQXJyYXkvKjxO
U1N0cmluZz4qLyAqYWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVO
b09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3IgcHJpbnRDb2xvcikpc3VjY2Vzc0NhbGxiYWNr
IGNvbHVtbk5hbWVzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiljb2x1bW5OYW1lcyBub3Rlczoo
TlNTdHJpbmcgKilub3RlcyB0aW1lc3RhbXA6KGRvdWJsZSl0aW1lc3RhbXAgdmFsdWVzOihSV0lQ
cm90b2NvbEpTT05PYmplY3QgKil2YWx1ZXMgcGF5bG9hZDooUldJUHJvdG9jb2xKU09OT2JqZWN0
ICopcGF5bG9hZCBkYXRhYmFzZUlkOihpbnQpZGF0YWJhc2VJZCBzcWxFcnJvcjooVGVzdFByb3Rv
Y29sRGF0YWJhc2VFcnJvciAqKXNxbEVycm9yIHNjcmVlbkNvbG9yOihUZXN0UHJvdG9jb2xEYXRh
YmFzZVByaW1hcnlDb2xvcnMpc2NyZWVuQ29sb3IgYWx0ZXJuYXRlQ29sb3JzOihOU0FycmF5Lyo8
TlNTdHJpbmc+Ki8gKilhbHRlcm5hdGVDb2xvcnMgcHJpbnRDb2xvcjooVGVzdFByb3RvY29sRGF0
YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yKXByaW50Q29sb3I7Cist
ICh2b2lkKWV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNXaXRoRXJyb3JDYWxsYmFjazoodm9p
ZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lk
KF4pKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKmNvbHVtbk5hbWVzLCBOU1N0cmluZyAqKm5vdGVz
LCBkb3VibGUgKnRpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqdmFsdWVzLCBSV0lQ
cm90b2NvbEpTT05PYmplY3QgKipwYXlsb2FkLCBpbnQgKmRhdGFiYXNlSWQsIFRlc3RQcm90b2Nv
bERhdGFiYXNlRXJyb3IgKipzcWxFcnJvciwgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29s
b3JzICpzY3JlZW5Db2xvciwgTlNBcnJheS8qPE5TU3RyaW5nPiovICoqYWx0ZXJuYXRlQ29sb3Jz
LCBUZXN0UHJvdG9jb2xEYXRhYmFzZShhbm9ueW1vdXMpICpwcmludENvbG9yKSlzdWNjZXNzQ2Fs
bGJhY2sgY29sdW1uTmFtZXM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKiljb2x1bW5OYW1lcyBu
b3RlczooTlNTdHJpbmcgKiopbm90ZXMgdGltZXN0YW1wOihkb3VibGUgKil0aW1lc3RhbXAgdmFs
dWVzOihSV0lQcm90b2NvbEpTT05PYmplY3QgKiopdmFsdWVzIHBheWxvYWQ6KFJXSVByb3RvY29s
SlNPTk9iamVjdCAqKilwYXlsb2FkIGRhdGFiYXNlSWQ6KGludCAqKWRhdGFiYXNlSWQgc3FsRXJy
b3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKiopc3FsRXJyb3Igc2NyZWVuQ29sb3I6KFRl
c3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyAqKXNjcmVlbkNvbG9yIGFsdGVybmF0ZUNv
bG9yczooTlNBcnJheS8qPE5TU3RyaW5nPiovICoqKWFsdGVybmF0ZUNvbG9ycyBwcmludENvbG9y
OihUZXN0UHJvdG9jb2xEYXRhYmFzZShhbm9ueW1vdXMpICopcHJpbnRDb2xvcjsKKy0gKHZvaWQp
ZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzV2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNT
dHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKShOU0Fy
cmF5Lyo8TlNTdHJpbmc+Ki8gKmNvbHVtbk5hbWVzLCBOU1N0cmluZyAqbm90ZXMsIGRvdWJsZSB0
aW1lc3RhbXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqdmFsdWVzLCBSV0lQcm90b2NvbEpTT05P
YmplY3QgKnBheWxvYWQsIGludCBkYXRhYmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9y
ICpzcWxFcnJvciwgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzIHNjcmVlbkNvbG9y
LCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmFsdGVybmF0ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0
YWJhc2UoYW5vbnltb3VzKSBwcmludENvbG9yKSlzdWNjZXNzQ2FsbGJhY2sgY29sdW1uTmFtZXM6
KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWNvbHVtbk5hbWVzIG5vdGVzOihOU1N0cmluZyAqKW5v
dGVzIHRpbWVzdGFtcDooZG91YmxlKXRpbWVzdGFtcCB2YWx1ZXM6KFJXSVByb3RvY29sSlNPTk9i
amVjdCAqKXZhbHVlcyBwYXlsb2FkOihSV0lQcm90b2NvbEpTT05PYmplY3QgKilwYXlsb2FkIGRh
dGFiYXNlSWQ6KGludClkYXRhYmFzZUlkIHNxbEVycm9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUVy
cm9yICopc3FsRXJyb3Igc2NyZWVuQ29sb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNv
bG9ycylzY3JlZW5Db2xvciBhbHRlcm5hdGVDb2xvcnM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAq
KWFsdGVybmF0ZUNvbG9ycyBwcmludENvbG9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZShhbm9ueW1v
dXMpKXByaW50Q29sb3I7CiBAZW5kCiAKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2RlZmluaXRpb25zLXdpdGgtbWFj
LXBsYXRmb3JtLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2RlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRmb3JtLmpzb24t
cmVzdWx0CmluZGV4IGQwMmJlZDdiOGQ2ZTJmZTAyYTUyNDJlZDEyMmY0YTI4NGY5MGM5YjkuLmIz
MGRmMTcwYWFiYTU5N2IzNjE5NjI0YmFkNjc5MzUxNTMzZTQ0OGMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9kZWZpbml0
aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uLXJlc3VsdAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZGVmaW5pdGlvbnMtd2l0aC1t
YWMtcGxhdGZvcm0uanNvbi1yZXN1bHQKQEAgLTc2LDcgKzc2LDcgQEAgSW5zcGVjdG9yQmFja2Vu
ZC5hY3RpdmF0ZURvbWFpbigiTmV0d29yayIsIG51bGwpOwogCiAjaWYgRU5BQkxFKElOU1BFQ1RP
Ul9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5o
IgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CiAKQEAgLTk2LDcgKzk2LDcgQEAgY2xhc3Mg
QWx0ZXJuYXRlTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyIDogcHVibGljIEFsdGVybmF0ZUJhY2tl
bmREaXNwYXRjaGVyIHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5BbHRlcm5hdGVOZXR3b3JrQmFj
a2VuZERpc3BhdGNoZXIoKSB7IH0KICNpZiBDT01NQU5ELU1BQwotICAgIHZpcnR1YWwgdm9pZCBs
b2FkUmVzb3VyY2UobG9uZyBjYWxsSWQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291
cmNlKGxvbmcgcHJvdG9jb2xfY2FsbElkKSA9IDA7CiAjZW5kaWYgLy8gQ09NTUFORC1NQUMKIH07
CiAjZW5kaWYgLy8gRE9NQUlOLU1BQwpAQCAtMTQwLDExICsxNDAsMTQgQEAgcHVibGljOgogCiAj
aW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8dHVwbGU+CisjaW5jbHVk
ZSA8d3RmL0V4cGVjdGVkLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCi10eXBlZGVm
IFN0cmluZyBFcnJvclN0cmluZzsKKwogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVf
RElTUEFUQ0hFUlMpCiAjaWYgRE9NQUlOLU1BQwpAQCAtMTU2LDcgKzE1OSw3IEBAIGNsYXNzIEFs
dGVybmF0ZU5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcjsKIGNsYXNzIE5ldHdvcmtCYWNrZW5kRGlz
cGF0Y2hlckhhbmRsZXIgewogcHVibGljOgogI2lmIENPTU1BTkQtTUFDCi0gICAgdmlydHVhbCB2
b2lkIGxvYWRSZXNvdXJjZShFcnJvclN0cmluZyYpID0gMDsKKyAgICB2aXJ0dWFsIFByb3RvY29s
OjpFcnJvclN0cmluZ09yPHZvaWQ+IGxvYWRSZXNvdXJjZSgpID0gMDsKICNlbmRpZiAvLyBDT01N
QU5ELU1BQwogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgfk5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXIoKTsKQEAgLTE2NywxMCArMTcwLDEwIEBAIHByb3RlY3RlZDoKIGNsYXNzIE5ldHdv
cmtCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5kRGlz
cGF0Y2hlciB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxOZXR3b3JrQmFja2VuZERpc3BhdGNo
ZXI+IGNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYsIE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXIqKTsKLSAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcm
IG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKSBmaW5hbDsKKyAgICB2b2lkIGRp
c3BhdGNoKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBjb25zdCBTdHJpbmcmIHByb3RvY29sX21ldGhv
ZCwgUmVmPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9tZXNzYWdlKSBmaW5hbDsKIHByaXZhdGU6
CiAjaWYgQ09NTUFORC1NQUMKLSAgICB2b2lkIGxvYWRSZXNvdXJjZShsb25nIHJlcXVlc3RJZCwg
UmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKKyAgICB2b2lkIGxvYWRSZXNvdXJj
ZShsb25nIHByb3RvY2xfY2FsbElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX3Bh
cmFtZXRlcnMpOwogI2VuZGlmIC8vIENPTU1BTkQtTUFDCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9B
TFRFUk5BVEVfRElTUEFUQ0hFUlMpCiBwdWJsaWM6CkBAIC0yMjEsOSArMjI0LDcgQEAgcHJpdmF0
ZToKICNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCiAKICNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi9KU09O
VmFsdWVzLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3Rm
L3RleHQvQ1N0cmluZy5oPgogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFU
Q0hFUlMpCiAjaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgpAQCAt
MjQ4LDQxICsyNDksNDEgQEAgTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyOjpOZXR3b3JrQmFja2Vu
ZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXMKICAgICBtX2JhY2tlbmRE
aXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4oIk5ldHdvcmsiX3MsIHRoaXMp
OwogfQogCi12b2lkIE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1
ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2Up
Cit2b2lkIE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyBwcm90b2NvbF9j
YWxsSWQsIGNvbnN0IFN0cmluZyYgcHJvdG9jb2xfbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYm
IHByb3RvY29sX21lc3NhZ2UpCiB7CiAgICAgUmVmPE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcj4g
cHJvdGVjdCgqdGhpcyk7CiAKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzOwot
ICAgIG1lc3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9zLCBwYXJhbWV0ZXJzKTsKKyAgICBhdXRv
IHByb3RvY29sX3BhcmFtZXRlcnMgPSBwcm90b2NvbF9tZXNzYWdlLT5nZXRPYmplY3QoInBhcmFt
cyJfcyk7CiAKICNpZiBDT01NQU5ELU1BQwotICAgIGlmIChtZXRob2QgPT0gImxvYWRSZXNvdXJj
ZSIpIHsKLSAgICAgICAgbG9hZFJlc291cmNlKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJz
KSk7CisgICAgaWYgKHByb3RvY29sX21ldGhvZCA9PSAibG9hZFJlc291cmNlIikgeworICAgICAg
ICBsb2FkUmVzb3VyY2UocHJvdG9jb2xfY2FsbElkLCBXVEZNb3ZlKHByb3RvY29sX3BhcmFtZXRl
cnMpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZiAvLyBDT01NQU5ELU1BQwogCi0g
ICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0
Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29yay4iICsgbWV0aG9kICsgIicgd2FzIG5vdCBm
b3VuZCIpOworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFj
a2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdvcmsuIiArIHByb3RvY29sX21l
dGhvZCArICInIHdhcyBub3QgZm91bmQiKTsKIH0KIAogI2lmIENPTU1BTkQtTUFDCi12b2lkIE5l
dHdvcmtCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlKGxvbmcgcmVxdWVzdElkLCBSZWZQ
dHI8SlNPTjo6T2JqZWN0PiYmKQordm9pZCBOZXR3b3JrQmFja2VuZERpc3BhdGNoZXI6OmxvYWRS
ZXNvdXJjZShsb25nIHByb3RvY29sX2NhbGxJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikKIHsK
ICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKICAgICBpZiAobV9h
bHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9h
ZFJlc291cmNlKHJlcXVlc3RJZCk7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9h
ZFJlc291cmNlKHByb3RvY29sX2NhbGxJZCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5k
aWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAKLSAgICBFcnJv
clN0cmluZyBlcnJvcjsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmpl
Y3Q6OmNyZWF0ZSgpOwotICAgIG1fYWdlbnQtPmxvYWRSZXNvdXJjZShlcnJvcik7CisgICAgYXV0
byByZXN1bHQgPSBtX2FnZW50LT5sb2FkUmVzb3VyY2UoKTsKKyAgICBpZiAoIXJlc3VsdCkgewor
ICAgICAgICBBU1NFUlQoIXJlc3VsdC5lcnJvcigpLmlzRW1wdHkoKSk7CisgICAgICAgIG1fYmFj
a2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNl
cnZlckVycm9yLCByZXN1bHQuZXJyb3IoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAg
ICBpZiAoIWVycm9yLmxlbmd0aCgpKQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5k
UmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKLSAgICBlbHNlCi0g
ICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERp
c3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7CisgICAgYXV0byBwcm90b2Nv
bF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgbV9iYWNrZW5kRGlz
cGF0Y2hlci0+c2VuZFJlc3BvbnNlKHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9q
c29uTWVzc2FnZSksIGZhbHNlKTsKIH0KICNlbmRpZiAvLyBDT01NQU5ELU1BQwogI2VuZGlmIC8v
IERPTUFJTi1NQUMKQEAgLTMyNSw2ICszMjYsNyBAQCB2b2lkIE5ldHdvcmtCYWNrZW5kRGlzcGF0
Y2hlcjo6bG9hZFJlc291cmNlKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0Pgog
CiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPHd0Zi9KU09OVmFs
dWVzLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewpAQCAtMzgxLDcgKzM4Myw2IEBAIHBy
aXZhdGU6CiAjaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKIAogI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3Rm
L3RleHQvQ1N0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtMzg5LDEwICsz
OTAsMTAgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiAjaWYgRVZFTlQtTUFDCiB2b2lkIE5ldHdv
cmtGcm9udGVuZERpc3BhdGNoZXI6OnJlc291cmNlTG9hZGVkKCkKIHsKLSAgICBSZWY8SlNPTjo6
T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAganNvbk1l
c3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiTmV0d29yay5yZXNvdXJjZUxvYWRlZCJfcyk7
CisgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7
CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiTmV0d29y
ay5yZXNvdXJjZUxvYWRlZCJfcyk7CiAKLSAgICBtX2Zyb250ZW5kUm91dGVyLnNlbmRFdmVudChq
c29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOworICAgIG1fZnJvbnRlbmRSb3V0ZXIuc2VuZEV2
ZW50KHByb3RvY29sX2pzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7CiB9CiAjZW5kaWYgLy8g
RVZFTlQtTUFDCiAjZW5kaWYgLy8gRE9NQUlOLU1BQwpAQCAtNDM0LDcgKzQzNSw5IEBAIHZvaWQg
TmV0d29ya0Zyb250ZW5kRGlzcGF0Y2hlcjo6cmVzb3VyY2VMb2FkZWQoKQogI3ByYWdtYSBvbmNl
CiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+Ci0j
aW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgor
I2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtNDYxLDcgKzQ2NCw3IEBAIGNsYXNzIE5l
dHdvcmtFcnJvcjsKIG5hbWVzcGFjZSBOZXR3b3JrIHsKIAogI2lmIFRZUEUtTUFDCi1jbGFzcyBO
ZXR3b3JrRXJyb3IgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7CitjbGFzcyBOZXR3b3JrRXJy
b3IgZmluYWwgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7CiBwdWJsaWM6CiAgICAgZW51bSB7
CiAgICAgICAgIE5vRmllbGRzU2V0ID0gMCwKQEAgLTQ4OCwxNyArNDkxLDE3IEBAIHB1YmxpYzoK
ICAgICAgICAgZnJpZW5kIGNsYXNzIE5ldHdvcmtFcnJvcjsKICAgICBwdWJsaWM6CiAKLSAgICAg
ICAgQnVpbGRlcjxTVEFURSB8IE1lc3NhZ2VTZXQ+JiBzZXRNZXNzYWdlKGNvbnN0IFN0cmluZyYg
dmFsdWUpCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBNZXNzYWdlU2V0PiYgc2V0TWVzc2FnZShj
b25zdCBTdHJpbmcmIGluX21lc3NhZ2UpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKCEoU1RBVEUgJiBNZXNzYWdlU2V0KSwgcHJvcGVydHlfbWVzc2FnZV9hbHJlYWR5X3Nl
dCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJtZXNzYWdlIl9zLCB2YWx1ZSk7
CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJtZXNzYWdlIl9zLCBpbl9tZXNzYWdl
KTsKICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8TWVzc2FnZVNldD4oKTsKICAgICAgICAg
fQogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDb2RlU2V0PiYgc2V0Q29kZShpbnQgdmFsdWUp
CisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDb2RlU2V0PiYgc2V0Q29kZShpbnQgaW5fY29kZSkK
ICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIENvZGVTZXQp
LCBwcm9wZXJ0eV9jb2RlX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRJ
bnRlZ2VyKCJjb2RlIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0SW50ZWdl
cigiY29kZSJfcywgaW5fY29kZSk7CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENvZGVT
ZXQ+KCk7CiAgICAgICAgIH0KIApAQCAtNTcwLDggKzU3Myw3IEBAIHB1YmxpYzoKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAKLSNpbmNsdWRl
IDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVk
ZSA8d3RmL0Fzc2VydGlvbnMuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKQEAgLTYzMSw3
ICs2MzMsNyBAQCBjbGFzcyBPYmpDSW5zcGVjdG9yTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyIGZp
bmFsIDogcHVibGljIEFsdGVybmF0ZU5ldHdvcmtCYWNrZQogcHVibGljOgogICAgIE9iakNJbnNw
ZWN0b3JOZXR3b3JrQmFja2VuZERpc3BhdGNoZXIoaWQ8VGVzdFByb3RvY29sTmV0d29ya0RvbWFp
bkhhbmRsZXI+IGhhbmRsZXIpIHsgbV9kZWxlZ2F0ZSA9IGhhbmRsZXI7IH0KICNpZiBDT01NQU5E
LU1BQwotICAgIHZvaWQgbG9hZFJlc291cmNlKGxvbmcgcmVxdWVzdElkKSBmaW5hbDsKKyAgICB2
b2lkIGxvYWRSZXNvdXJjZShsb25nIHByb3RvY29sX2NhbGxJZCkgZmluYWw7CiAjZW5kaWYgLy8g
Q09NTUFORC1NQUMKIHByaXZhdGU6CiAgICAgUmV0YWluUHRyPGlkPFRlc3RQcm90b2NvbE5ldHdv
cmtEb21haW5IYW5kbGVyPj4gbV9kZWxlZ2F0ZTsKQEAgLTY4MywyMSArNjg1LDIyIEBAIG5hbWVz
cGFjZSBJbnNwZWN0b3IgewogCiAjaWYgRE9NQUlOLU1BQwogI2lmIENPTU1BTkQtTUFDCi12b2lk
IE9iakNJbnNwZWN0b3JOZXR3b3JrQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZShsb25n
IHJlcXVlc3RJZCkKK3ZvaWQgT2JqQ0luc3BlY3Rvck5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcjo6
bG9hZFJlc291cmNlKGxvbmcgcHJvdG9jb2xfY2FsbElkKQogewogICAgIGlmICghW21fZGVsZWdh
dGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihsb2FkUmVzb3VyY2VXaXRoRXJyb3JDYWxs
YmFjazpzdWNjZXNzQ2FsbGJhY2s6KV0pIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+
cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2RO
b3RGb3VuZCwgIidOZXR3b3JrLmxvYWRSZXNvdXJjZScgd2FzIG5vdCBmb3VuZCJfcyk7CisgICAg
ICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocHJvdG9jb2xfY2Fs
bElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29yay5sb2FkUmVz
b3VyY2UnIHdhcyBub3QgZm91bmQiX3MpOwogICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5z
ZW5kUGVuZGluZ0Vycm9ycygpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWQgZXJy
b3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRj
aGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6
U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0
UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxsSWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJF
cnJvciwgZXJyb3IpOwogICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vy
cm9ycygpOwogICAgIH07CiAKICAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeewotICAgICAgICBi
YWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6
OmNyZWF0ZSgpLCBmYWxzZSk7CisgICAgICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBK
U09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5k
UmVzcG9uc2UocHJvdG9jb2xfY2FsbElkLCBXVEZNb3ZlKHByb3RvY29sX2pzb25NZXNzYWdlKSwg
ZmFsc2UpOwogICAgIH07CiAKICAgICBbbV9kZWxlZ2F0ZSBsb2FkUmVzb3VyY2VXaXRoRXJyb3JD
YWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOwpA
QCAtOTExLDkgKzkxNCw5IEBAIHVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CiB7CiAgICAgY29u
c3QgRnJvbnRlbmRSb3V0ZXImIHJvdXRlciA9IF9jb250cm9sbGVyLT5mcm9udGVuZFJvdXRlcigp
OwogCi0gICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNy
ZWF0ZSgpOwotICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIk5ldHdvcmsu
cmVzb3VyY2VMb2FkZWQiX3MpOwotICAgIHJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRv
SlNPTlN0cmluZygpKTsKKyAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2Jq
ZWN0OjpjcmVhdGUoKTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRo
b2QiX3MsICJOZXR3b3JrLnJlc291cmNlTG9hZGVkIl9zKTsKKyAgICByb3V0ZXIuc2VuZEV2ZW50
KHByb3RvY29sX2pzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7CiB9CiAjZW5kaWYgLy8gRVZF
TlQtTUFDCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9leHBlY3RlZC9kb21haW4tZGVidWdnYWJsZVR5cGVzLmpzb24tcmVzdWx0IGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2Rv
bWFpbi1kZWJ1Z2dhYmxlVHlwZXMuanNvbi1yZXN1bHQKaW5kZXggYTQ4ZjZmOWI1YTE5Nzk4MmFk
NjkxMDI5YWVhYWRjNjc1MmY4MTMyYS4uYzg3NTE0OGYzZGFmMDVlZDMxYWNlZDk3YzMyZWIzYmI3
NTQ3ZjhhYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2V4cGVjdGVkL2RvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMuanNvbi1yZXN1bHQKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVk
L2RvbWFpbi1kZWJ1Z2dhYmxlVHlwZXMuanNvbi1yZXN1bHQKQEAgLTcwLDcgKzcwLDcgQEAgSW5z
cGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiRG9tYWluIiwgWyJ3ZWItcGFnZSJdKTsKIAog
I2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogCi0jaW5jbHVkZSAi
VGVzdFByb3RvY29sVHlwZXMuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KICNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgogCkBAIC04
OCw3ICs4OCw3IEBAIHByaXZhdGU6CiBjbGFzcyBBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0
Y2hlciA6IHB1YmxpYyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7CiBwdWJsaWM6CiAgICAg
dmlydHVhbCB+QWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIoKSB7IH0KLSAgICB2aXJ0
dWFsIHZvaWQgQ29tbWFuZChsb25nIGNhbGxJZCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBDb21t
YW5kKGxvbmcgcHJvdG9jb2xfY2FsbElkKSA9IDA7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKQEAgLTEzMCwxMSArMTMwLDE0IEBAIHB1YmxpYzoKIAogI2luY2x1ZGUgIlRlc3RQcm90
b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHR1cGxlPgorI2luY2x1ZGUgPHd0Zi9FeHBlY3RlZC5o
PgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJp
bmc7CisKIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogY2xh
c3MgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXI7CkBAIC0xNDIsNyArMTQ1LDcgQEAg
Y2xhc3MgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXI7CiAKIGNsYXNzIERvbWFpbkJh
Y2tlbmREaXNwYXRjaGVySGFuZGxlciB7CiBwdWJsaWM6Ci0gICAgdmlydHVhbCB2b2lkIENvbW1h
bmQoRXJyb3JTdHJpbmcmKSA9IDA7CisgICAgdmlydHVhbCBQcm90b2NvbDo6RXJyb3JTdHJpbmdP
cjx2b2lkPiBDb21tYW5kKCkgPSAwOwogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgfkRvbWFpbkJh
Y2tlbmREaXNwYXRjaGVySGFuZGxlcigpOwogfTsKQEAgLTE1MCw5ICsxNTMsOSBAQCBwcm90ZWN0
ZWQ6CiBjbGFzcyBEb21haW5CYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBTdXBwbGVt
ZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxEb21haW5C
YWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEJhY2tlbmREaXNwYXRjaGVyJiwgRG9tYWluQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyKik7Ci0gICAgdm9pZCBkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwg
Y29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkgZmluYWw7
CisgICAgdm9pZCBkaXNwYXRjaChsb25nIHByb3RvY29sX2NhbGxJZCwgY29uc3QgU3RyaW5nJiBw
cm90b2NvbF9tZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfbWVzc2FnZSkgZmlu
YWw7CiBwcml2YXRlOgotICAgIHZvaWQgQ29tbWFuZChsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpT
T046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKKyAgICB2b2lkIENvbW1hbmQobG9uZyBwcm90b2Ns
X2NhbGxJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9wYXJhbWV0ZXJzKTsKICNp
ZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIHB1YmxpYzoKICAgICB2
b2lkIHNldEFsdGVybmF0ZURpc3BhdGNoZXIoQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNo
ZXIqIGFsdGVybmF0ZURpc3BhdGNoZXIpIHsgbV9hbHRlcm5hdGVEaXNwYXRjaGVyID0gYWx0ZXJu
YXRlRGlzcGF0Y2hlcjsgfQpAQCAtMjAxLDkgKzIwNCw3IEBAIHByaXZhdGU6CiAjaW5jbHVkZSAi
VGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgogI2lu
Y2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcu
aD4KIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogI2luY2x1
ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKQEAgLTIyNSwzOCArMjI2LDM4
IEBAIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpEb21haW5CYWNrZW5kRGlzcGF0Y2hlcihCYWNr
ZW5kRGlzcGF0Y2hlciYgYmFja2VuZERpc3BhCiAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVn
aXN0ZXJEaXNwYXRjaGVyRm9yRG9tYWluKCJEb21haW4iX3MsIHRoaXMpOwogfQogCi12b2lkIERv
bWFpbkJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3Ry
aW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkKK3ZvaWQgRG9tYWluQmFj
a2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBjb25zdCBTdHJp
bmcmIHByb3RvY29sX21ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9tZXNzYWdl
KQogewogICAgIFJlZjxEb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7CiAK
LSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzOwotICAgIG1lc3NhZ2UtPmdldE9i
amVjdCgicGFyYW1zIl9zLCBwYXJhbWV0ZXJzKTsKKyAgICBhdXRvIHByb3RvY29sX3BhcmFtZXRl
cnMgPSBwcm90b2NvbF9tZXNzYWdlLT5nZXRPYmplY3QoInBhcmFtcyJfcyk7CiAKLSAgICBpZiAo
bWV0aG9kID09ICJDb21tYW5kIikgewotICAgICAgICBDb21tYW5kKHJlcXVlc3RJZCwgV1RGTW92
ZShwYXJhbWV0ZXJzKSk7CisgICAgaWYgKHByb3RvY29sX21ldGhvZCA9PSAiQ29tbWFuZCIpIHsK
KyAgICAgICAgQ29tbWFuZChwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJvdG9jb2xfcGFyYW1l
dGVycykpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQs
ICInRG9tYWluLiIgKyBtZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7CisgICAgbV9iYWNrZW5k
RGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9k
Tm90Rm91bmQsICInRG9tYWluLiIgKyBwcm90b2NvbF9tZXRob2QgKyAiJyB3YXMgbm90IGZvdW5k
Iik7CiB9CiAKLXZvaWQgRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkNvbW1hbmQobG9uZyByZXF1
ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCit2b2lkIERvbWFpbkJhY2tlbmREaXNwYXRj
aGVyOjpDb21tYW5kKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYm
KQogewogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogICAgIGlm
IChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVy
LT5Db21tYW5kKHJlcXVlc3RJZCk7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+Q29t
bWFuZChwcm90b2NvbF9jYWxsSWQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmIC8v
IEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogCi0gICAgRXJyb3JTdHJp
bmcgZXJyb3I7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0Ojpj
cmVhdGUoKTsKLSAgICBtX2FnZW50LT5Db21tYW5kKGVycm9yKTsKKyAgICBhdXRvIHJlc3VsdCA9
IG1fYWdlbnQtPkNvbW1hbmQoKTsKKyAgICBpZiAoIXJlc3VsdCkgeworICAgICAgICBBU1NFUlQo
IXJlc3VsdC5lcnJvcigpLmlzRW1wdHkoKSk7CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXIt
PnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCByZXN1
bHQuZXJyb3IoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBpZiAoIWVycm9yLmxl
bmd0aCgpKQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVz
dElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2Vu
ZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZl
ckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7CisgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9
IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJl
c3BvbnNlKHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSksIGZh
bHNlKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCkBAIC0yOTcsNiArMjk4LDcgQEAg
dm9pZCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Q29tbWFuZChsb25nIHJlcXVlc3RJZCwgUmVm
UHRyPEpTT046Ok9iamVjdD4mJikKIAogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIK
ICNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgog
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsK
QEAgLTM0OSwxNiArMzUxLDE1IEBAIHByaXZhdGU6CiAjaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlz
cGF0Y2hlcnMuaCIKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5k
Um91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5z
cGVjdG9yIHsKIAogdm9pZCBEb21haW5Gcm9udGVuZERpc3BhdGNoZXI6OkV2ZW50KCkKIHsKLSAg
ICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7
Ci0gICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiRG9tYWluLkV2ZW50Il9z
KTsKKyAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUo
KTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJEb21h
aW4uRXZlbnQiX3MpOwogCi0gICAgbV9mcm9udGVuZFJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3Nh
Z2UtPnRvSlNPTlN0cmluZygpKTsKKyAgICBtX2Zyb250ZW5kUm91dGVyLnNlbmRFdmVudChwcm90
b2NvbF9qc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBJ
bnNwZWN0b3IKQEAgLTM5OCw3ICszOTksOSBAQCB2b2lkIERvbWFpbkZyb250ZW5kRGlzcGF0Y2hl
cjo6RXZlbnQoKQogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JQcm90b2NvbFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNs
dWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAt
NDUyLDggKzQ1NSw3IEBAIG5hbWVzcGFjZSBQcm90b2NvbCB7CiAjaW5jbHVkZSAiY29uZmlnLmgi
CiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogCi0jaW5jbHVkZSA8d3RmL09wdGlv
bmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3Nl
cnRpb25zLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC01MDksNyArNTExLDcgQEAg
Y2xhc3MgT2JqQ0luc3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGlj
IEFsdGVybmF0ZURvbWFpbkJhY2tlbmQKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1
YmxpYzoKICAgICBPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXIoaWQ8VGVzdFBy
b3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4gaGFuZGxlcikgeyBtX2RlbGVnYXRlID0gaGFuZGxl
cjsgfQotICAgIHZvaWQgQ29tbWFuZChsb25nIHJlcXVlc3RJZCkgZmluYWw7CisgICAgdm9pZCBD
b21tYW5kKGxvbmcgcHJvdG9jb2xfY2FsbElkKSBmaW5hbDsKIHByaXZhdGU6CiAgICAgUmV0YWlu
UHRyPGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+PiBtX2RlbGVnYXRlOwogfTsK
QEAgLTU1NywyMSArNTU5LDIyIEBAIHByaXZhdGU6CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3Igewog
Ci12b2lkIE9iakNJbnNwZWN0b3JEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Q29tbWFuZChsb25n
IHJlcXVlc3RJZCkKK3ZvaWQgT2JqQ0luc3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpD
b21tYW5kKGxvbmcgcHJvdG9jb2xfY2FsbElkKQogewogICAgIGlmICghW21fZGVsZWdhdGUgcmVz
cG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihDb21tYW5kV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vz
c0NhbGxiYWNrOildKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3Rv
Y29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICIn
RG9tYWluLkNvbW1hbmQnIHdhcyBub3QgZm91bmQiX3MpOworICAgICAgICBiYWNrZW5kRGlzcGF0
Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHByb3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3Bh
dGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RvbWFpbi5Db21tYW5kJyB3YXMgbm90IGZvdW5kIl9z
KTsKICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5n
ICplcnJvcikgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVy
cm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7Cisg
ICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocHJvdG9jb2xf
Y2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKICAgICAgICAg
YmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKICAgICB9OwogCiAgICAg
aWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2Vu
ZFJlc3BvbnNlKHJlcXVlc3RJZCwgSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSwgZmFsc2UpOworICAg
ICAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsK
KyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHByb3RvY29sX2NhbGxJ
ZCwgV1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSksIGZhbHNlKTsKICAgICB9OwogCiAgICAg
W21fZGVsZWdhdGUgQ29tbWFuZFdpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vz
c0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107CkBAIC03NzMsOSArNzc2LDkgQEAgdXNpbmcgbmFt
ZXNwYWNlIEluc3BlY3RvcjsKIHsKICAgICBjb25zdCBGcm9udGVuZFJvdXRlciYgcm91dGVyID0g
X2NvbnRyb2xsZXItPmZyb250ZW5kUm91dGVyKCk7CiAKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBq
c29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAganNvbk1lc3NhZ2UtPnNl
dFN0cmluZygibWV0aG9kIl9zLCAiRG9tYWluLkV2ZW50Il9zKTsKLSAgICByb3V0ZXIuc2VuZEV2
ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7CisgICAgYXV0byBwcm90b2NvbF9qc29u
TWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgcHJvdG9jb2xfanNvbk1lc3Nh
Z2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiRG9tYWluLkV2ZW50Il9zKTsKKyAgICByb3V0ZXIu
c2VuZEV2ZW50KHByb3RvY29sX2pzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7CiB9CiAKIEBl
bmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9leHBlY3RlZC9kb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJs
ZVR5cGUuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZXhwZWN0ZWQvZG9tYWluLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVn
Z2FibGVUeXBlLmpzb24tcmVzdWx0CmluZGV4IGE3N2ZlMzU4OTc4ODUzNDc1MDU2MjIzZTAxOWEx
YjBmYjFkNDdlNjguLjk0MmRjY2E4ZjI2MDFlYzY5NzJiYmM2MDk4NGJkYzc1NTc0MWMzZWYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9l
eHBlY3RlZC9kb21haW4tdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUu
anNvbi1yZXN1bHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2V4cGVjdGVkL2RvbWFpbi10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dh
YmxlVHlwZS5qc29uLXJlc3VsdApAQCAtNzAsNyArNzAsNyBAQCBJbnNwZWN0b3JCYWNrZW5kLmFj
dGl2YXRlRG9tYWluKCJEb21haW4iLCBbInBhZ2UiXSk7CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9S
X0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIAotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgi
CisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KIApAQCAtODgsNyArODgsNyBAQCBwcml2YXRl
OgogY2xhc3MgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIgOiBwdWJsaWMgQWx0ZXJu
YXRlQmFja2VuZERpc3BhdGNoZXIgewogcHVibGljOgogICAgIHZpcnR1YWwgfkFsdGVybmF0ZURv
bWFpbkJhY2tlbmREaXNwYXRjaGVyKCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIENvbW1hbmQobG9u
ZyBjYWxsSWQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgQ29tbWFuZChsb25nIHByb3RvY29sX2Nh
bGxJZCkgPSAwOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCkBAIC0xMzAsMTEgKzEz
MCwxNCBAQCBwdWJsaWM6CiAKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNs
dWRlIDx0dXBsZT4KKyNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4KKyNpbmNsdWRlIDx3dGYvT3B0
aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIElu
c3BlY3RvciB7CiAKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCiAKICNpZiBFTkFCTEUo
SU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIGNsYXNzIEFsdGVybmF0ZURvbWFpbkJh
Y2tlbmREaXNwYXRjaGVyOwpAQCAtMTQyLDcgKzE0NSw3IEBAIGNsYXNzIEFsdGVybmF0ZURvbWFp
bkJhY2tlbmREaXNwYXRjaGVyOwogCiBjbGFzcyBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXIgewogcHVibGljOgotICAgIHZpcnR1YWwgdm9pZCBDb21tYW5kKEVycm9yU3RyaW5nJikgPSAw
OworICAgIHZpcnR1YWwgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gQ29tbWFuZCgpID0g
MDsKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIH5Eb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXIoKTsKIH07CkBAIC0xNTAsOSArMTUzLDkgQEAgcHJvdGVjdGVkOgogY2xhc3MgRG9tYWluQmFj
a2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNo
ZXIgewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8RG9tYWluQmFja2VuZERpc3BhdGNoZXI+IGNy
ZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYsIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciop
OwotICAgIHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9k
LCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpIGZpbmFsOworICAgIHZvaWQgZGlzcGF0Y2go
bG9uZyBwcm90b2NvbF9jYWxsSWQsIGNvbnN0IFN0cmluZyYgcHJvdG9jb2xfbWV0aG9kLCBSZWY8
SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX21lc3NhZ2UpIGZpbmFsOwogcHJpdmF0ZToKLSAgICB2
b2lkIENvbW1hbmQobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1l
dGVycyk7CisgICAgdm9pZCBDb21tYW5kKGxvbmcgcHJvdG9jbF9jYWxsSWQsIFJlZlB0cjxKU09O
OjpPYmplY3Q+JiYgcHJvdG9jb2xfcGFyYW1ldGVycyk7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9B
TFRFUk5BVEVfRElTUEFUQ0hFUlMpCiBwdWJsaWM6CiAgICAgdm9pZCBzZXRBbHRlcm5hdGVEaXNw
YXRjaGVyKEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyKiBhbHRlcm5hdGVEaXNwYXRj
aGVyKSB7IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IGFsdGVybmF0ZURpc3BhdGNoZXI7IH0KQEAg
LTIwMSw5ICsyMDQsNyBAQCBwcml2YXRlOgogI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hl
cnMuaCIKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVy
Lmg+Ci0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0
cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKICNpZiBFTkFCTEUoSU5T
UEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKICNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFj
a2VuZERpc3BhdGNoZXJzLmgiCkBAIC0yMjUsMzggKzIyNiwzOCBAQCBEb21haW5CYWNrZW5kRGlz
cGF0Y2hlcjo6RG9tYWluQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImIGJhY2tl
bmREaXNwYQogICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRv
bWFpbigiRG9tYWluIl9zLCB0aGlzKTsKIH0KIAotdm9pZCBEb21haW5CYWNrZW5kRGlzcGF0Y2hl
cjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNP
Tjo6T2JqZWN0PiYmIG1lc3NhZ2UpCit2b2lkIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpkaXNw
YXRjaChsb25nIHByb3RvY29sX2NhbGxJZCwgY29uc3QgU3RyaW5nJiBwcm90b2NvbF9tZXRob2Qs
IFJlZjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfbWVzc2FnZSkKIHsKICAgICBSZWY8RG9tYWlu
QmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOwogCi0gICAgUmVmUHRyPEpTT046Ok9i
amVjdD4gcGFyYW1ldGVyczsKLSAgICBtZXNzYWdlLT5nZXRPYmplY3QoInBhcmFtcyJfcywgcGFy
YW1ldGVycyk7CisgICAgYXV0byBwcm90b2NvbF9wYXJhbWV0ZXJzID0gcHJvdG9jb2xfbWVzc2Fn
ZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3MpOwogCi0gICAgaWYgKG1ldGhvZCA9PSAiQ29tbWFuZCIp
IHsKLSAgICAgICAgQ29tbWFuZChyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykpOworICAg
IGlmIChwcm90b2NvbF9tZXRob2QgPT0gIkNvbW1hbmQiKSB7CisgICAgICAgIENvbW1hbmQocHJv
dG9jb2xfY2FsbElkLCBXVEZNb3ZlKHByb3RvY29sX3BhcmFtZXRlcnMpKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAotICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJy
b3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RvbWFpbi4iICsgbWV0aG9k
ICsgIicgd2FzIG5vdCBmb3VuZCIpOworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFBy
b3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RvbWFpbi4i
ICsgcHJvdG9jb2xfbWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOwogfQogCi12b2lkIERvbWFp
bkJhY2tlbmREaXNwYXRjaGVyOjpDb21tYW5kKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6
T2JqZWN0PiYmKQordm9pZCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Q29tbWFuZChsb25nIHBy
b3RvY29sX2NhbGxJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikKIHsKICNpZiBFTkFCTEUoSU5T
UEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKICAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRj
aGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+Q29tbWFuZChyZXF1ZXN0SWQp
OworICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPkNvbW1hbmQocHJvdG9jb2xfY2FsbElk
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FM
VEVSTkFURV9ESVNQQVRDSEVSUykKIAotICAgIEVycm9yU3RyaW5nIGVycm9yOwotICAgIFJlZjxK
U09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgbV9hZ2Vu
dC0+Q29tbWFuZChlcnJvcik7CisgICAgYXV0byByZXN1bHQgPSBtX2FnZW50LT5Db21tYW5kKCk7
CisgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAgICAgQVNTRVJUKCFyZXN1bHQuZXJyb3IoKS5pc0Vt
cHR5KCkpOworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9y
KEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgcmVzdWx0LmVycm9yKCkpOworICAgICAg
ICByZXR1cm47CisgICAgfQogCi0gICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKLSAgICAgICAgbV9i
YWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQp
LCBmYWxzZSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQ
cm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJv
cikpOworICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0
ZSgpOworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShwcm90b2NvbF9jYWxs
SWQsIFdURk1vdmUocHJvdG9jb2xfanNvbk1lc3NhZ2UpLCBmYWxzZSk7CiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgpAQCAtMjk3LDYgKzI5OCw3IEBAIHZvaWQgRG9tYWluQmFja2VuZERp
c3BhdGNoZXI6OkNvbW1hbmQobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYp
CiAKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8d3RmL0pTT05W
YWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CkBAIC0zNDksMTYgKzM1MSwxNSBA
QCBwcml2YXRlOgogI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCiAKICNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUg
PHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKIHZvaWQgRG9t
YWluRnJvbnRlbmREaXNwYXRjaGVyOjpFdmVudCgpCiB7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4g
anNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIGpzb25NZXNzYWdlLT5z
ZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRvbWFpbi5FdmVudCJfcyk7CisgICAgYXV0byBwcm90b2Nv
bF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgcHJvdG9jb2xfanNv
bk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiRG9tYWluLkV2ZW50Il9zKTsKIAotICAg
IG1fZnJvbnRlbmRSb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7
CisgICAgbV9mcm9udGVuZFJvdXRlci5zZW5kRXZlbnQocHJvdG9jb2xfanNvbk1lc3NhZ2UtPnRv
SlNPTlN0cmluZygpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCkBAIC0zOTgsNyAr
Mzk5LDkgQEAgdm9pZCBEb21haW5Gcm9udGVuZERpc3BhdGNoZXI6OkV2ZW50KCkKICNwcmFnbWEg
b25jZQogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5o
PgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMu
aD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKQEAgLTQ1Miw4ICs0NTUsNyBAQCBuYW1l
c3BhY2UgUHJvdG9jb2wgewogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlRlc3RQcm90
b2NvbE9iamVjdHMuaCIKIAotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0
Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogCiBuYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKIApAQCAtNTA5LDcgKzUxMSw3IEBAIGNsYXNzIE9iakNJbnNwZWN0b3JE
b21haW5CYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBBbHRlcm5hdGVEb21haW5CYWNr
ZW5kCiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgT2JqQ0luc3Bl
Y3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyKGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhh
bmRsZXI+IGhhbmRsZXIpIHsgbV9kZWxlZ2F0ZSA9IGhhbmRsZXI7IH0KLSAgICB2b2lkIENvbW1h
bmQobG9uZyByZXF1ZXN0SWQpIGZpbmFsOworICAgIHZvaWQgQ29tbWFuZChsb25nIHByb3RvY29s
X2NhbGxJZCkgZmluYWw7CiBwcml2YXRlOgogICAgIFJldGFpblB0cjxpZDxUZXN0UHJvdG9jb2xE
b21haW5Eb21haW5IYW5kbGVyPj4gbV9kZWxlZ2F0ZTsKIH07CkBAIC01NTcsMjEgKzU1OSwyMiBA
QCBwcml2YXRlOgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAotdm9pZCBPYmpDSW5zcGVjdG9y
RG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkNvbW1hbmQobG9uZyByZXF1ZXN0SWQpCit2b2lkIE9i
akNJbnNwZWN0b3JEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Q29tbWFuZChsb25nIHByb3RvY29s
X2NhbGxJZCkKIHsKICAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2Vs
ZWN0b3IoQ29tbWFuZFdpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazopXSkgewotICAg
ICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwg
QmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RvbWFpbi5Db21tYW5kJyB3YXMg
bm90IGZvdW5kIl9zKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9j
b2xFcnJvcihwcm90b2NvbF9jYWxsSWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3Vu
ZCwgIidEb21haW4uQ29tbWFuZCcgd2FzIG5vdCBmb3VuZCJfcyk7CiAgICAgICAgIGJhY2tlbmRE
aXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKICAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAg
YmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tl
bmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0
Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHByb3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3Bh
dGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CiAgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCkt
PnNlbmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgfTsKIAogICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9
IF57Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQs
IEpTT046Ok9iamVjdDo6Y3JlYXRlKCksIGZhbHNlKTsKKyAgICAgICAgYXV0byBwcm90b2NvbF9q
c29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIGJhY2tlbmREaXNw
YXRjaGVyKCktPnNlbmRSZXNwb25zZShwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJvdG9jb2xf
anNvbk1lc3NhZ2UpLCBmYWxzZSk7CiAgICAgfTsKIAogICAgIFttX2RlbGVnYXRlIENvbW1hbmRX
aXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2Fs
bGJhY2tdOwpAQCAtNzczLDkgKzc3Niw5IEBAIHVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CiB7
CiAgICAgY29uc3QgRnJvbnRlbmRSb3V0ZXImIHJvdXRlciA9IF9jb250cm9sbGVyLT5mcm9udGVu
ZFJvdXRlcigpOwogCi0gICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpP
YmplY3Q6OmNyZWF0ZSgpOwotICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywg
IkRvbWFpbi5FdmVudCJfcyk7Ci0gICAgcm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9K
U09OU3RyaW5nKCkpOworICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmpl
Y3Q6OmNyZWF0ZSgpOworICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhv
ZCJfcywgIkRvbWFpbi5FdmVudCJfcyk7CisgICAgcm91dGVyLnNlbmRFdmVudChwcm90b2NvbF9q
c29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwogfQogCiBAZW5kCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZG9tYWlu
LXRhcmdldFR5cGVzLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2RvbWFpbi10YXJnZXRUeXBlcy5qc29uLXJlc3VsdApp
bmRleCAwYWQ2ZDA0NDYwMWMyZWE0MDgzODhiY2YyNTRmYzY2NTQ1ZjdjZDA0Li44NDlmM2I3Mjlj
YWNkOGI5ZjExNGM4YjliZmIyMTcxOTFkMjcyOTFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZG9tYWluLXRhcmdldFR5
cGVzLmpzb24tcmVzdWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9leHBlY3RlZC9kb21haW4tdGFyZ2V0VHlwZXMuanNvbi1yZXN1bHQKQEAgLTcw
LDcgKzcwLDcgQEAgSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiRG9tYWluIiwgbnVs
bCk7CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIAotI2lu
Y2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0
cy5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
Lmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4K
IApAQCAtODgsNyArODgsNyBAQCBwcml2YXRlOgogY2xhc3MgQWx0ZXJuYXRlRG9tYWluQmFja2Vu
ZERpc3BhdGNoZXIgOiBwdWJsaWMgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewogcHVibGlj
OgogICAgIHZpcnR1YWwgfkFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyKCkgeyB9Ci0g
ICAgdmlydHVhbCB2b2lkIENvbW1hbmQobG9uZyBjYWxsSWQpID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgQ29tbWFuZChsb25nIHByb3RvY29sX2NhbGxJZCkgPSAwOwogfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgSW5zcGVjdG9yCkBAIC0xMzAsMTEgKzEzMCwxNCBAQCBwdWJsaWM6CiAKICNpbmNsdWRlICJU
ZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx0dXBsZT4KKyNpbmNsdWRlIDx3dGYvRXhw
ZWN0ZWQuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKLXR5cGVkZWYgU3RyaW5nIEVy
cm9yU3RyaW5nOworCiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVS
UykKIGNsYXNzIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyOwpAQCAtMTQyLDcgKzE0
NSw3IEBAIGNsYXNzIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyOwogCiBjbGFzcyBE
b21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewogcHVibGljOgotICAgIHZpcnR1YWwgdm9p
ZCBDb21tYW5kKEVycm9yU3RyaW5nJikgPSAwOworICAgIHZpcnR1YWwgUHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8dm9pZD4gQ29tbWFuZCgpID0gMDsKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIH5E
b21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKTsKIH07CkBAIC0xNTAsOSArMTUzLDkgQEAg
cHJvdGVjdGVkOgogY2xhc3MgRG9tYWluQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMg
U3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIgewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8
RG9tYWluQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYsIERvbWFp
bkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwotICAgIHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1
ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2Up
IGZpbmFsOworICAgIHZvaWQgZGlzcGF0Y2gobG9uZyBwcm90b2NvbF9jYWxsSWQsIGNvbnN0IFN0
cmluZyYgcHJvdG9jb2xfbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX21lc3Nh
Z2UpIGZpbmFsOwogcHJpdmF0ZToKLSAgICB2b2lkIENvbW1hbmQobG9uZyByZXF1ZXN0SWQsIFJl
ZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7CisgICAgdm9pZCBDb21tYW5kKGxvbmcg
cHJvdG9jbF9jYWxsSWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfcGFyYW1ldGVy
cyk7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiBwdWJsaWM6
CiAgICAgdm9pZCBzZXRBbHRlcm5hdGVEaXNwYXRjaGVyKEFsdGVybmF0ZURvbWFpbkJhY2tlbmRE
aXNwYXRjaGVyKiBhbHRlcm5hdGVEaXNwYXRjaGVyKSB7IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciA9
IGFsdGVybmF0ZURpc3BhdGNoZXI7IH0KQEAgLTIwMSw5ICsyMDQsNyBAQCBwcml2YXRlOgogI2lu
Y2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMu
aD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9D
U3RyaW5nLmg+CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykK
ICNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCkBAIC0yMjUsMzgg
KzIyNiwzOCBAQCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6RG9tYWluQmFja2VuZERpc3BhdGNo
ZXIoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYQogICAgIG1fYmFja2VuZERpc3BhdGNo
ZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbigiRG9tYWluIl9zLCB0aGlzKTsKIH0KIAot
dm9pZCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNv
bnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpCit2b2lkIERv
bWFpbkJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHByb3RvY29sX2NhbGxJZCwgY29u
c3QgU3RyaW5nJiBwcm90b2NvbF9tZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xf
bWVzc2FnZSkKIHsKICAgICBSZWY8RG9tYWluQmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRo
aXMpOwogCi0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVyczsKLSAgICBtZXNzYWdl
LT5nZXRPYmplY3QoInBhcmFtcyJfcywgcGFyYW1ldGVycyk7CisgICAgYXV0byBwcm90b2NvbF9w
YXJhbWV0ZXJzID0gcHJvdG9jb2xfbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3MpOwogCi0g
ICAgaWYgKG1ldGhvZCA9PSAiQ29tbWFuZCIpIHsKLSAgICAgICAgQ29tbWFuZChyZXF1ZXN0SWQs
IFdURk1vdmUocGFyYW1ldGVycykpOworICAgIGlmIChwcm90b2NvbF9tZXRob2QgPT0gIkNvbW1h
bmQiKSB7CisgICAgICAgIENvbW1hbmQocHJvdG9jb2xfY2FsbElkLCBXVEZNb3ZlKHByb3RvY29s
X3BhcmFtZXRlcnMpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1fYmFja2VuZERp
c3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5v
dEZvdW5kLCAiJ0RvbWFpbi4iICsgbWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOworICAgIG1f
YmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6
Ok1ldGhvZE5vdEZvdW5kLCAiJ0RvbWFpbi4iICsgcHJvdG9jb2xfbWV0aG9kICsgIicgd2FzIG5v
dCBmb3VuZCIpOwogfQogCi12b2lkIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpDb21tYW5kKGxv
bmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQordm9pZCBEb21haW5CYWNrZW5k
RGlzcGF0Y2hlcjo6Q29tbWFuZChsb25nIHByb3RvY29sX2NhbGxJZCwgUmVmUHRyPEpTT046Ok9i
amVjdD4mJikKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykK
ICAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlRGlz
cGF0Y2hlci0+Q29tbWFuZChyZXF1ZXN0SWQpOworICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNo
ZXItPkNvbW1hbmQocHJvdG9jb2xfY2FsbElkKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNl
bmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIAotICAgIEVy
cm9yU3RyaW5nIGVycm9yOwotICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9i
amVjdDo6Y3JlYXRlKCk7Ci0gICAgbV9hZ2VudC0+Q29tbWFuZChlcnJvcik7CisgICAgYXV0byBy
ZXN1bHQgPSBtX2FnZW50LT5Db21tYW5kKCk7CisgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAgICAg
QVNTRVJUKCFyZXN1bHQuZXJyb3IoKS5pc0VtcHR5KCkpOworICAgICAgICBtX2JhY2tlbmREaXNw
YXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJv
ciwgcmVzdWx0LmVycm9yKCkpOworICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgaWYgKCFl
cnJvci5sZW5ndGgoKSkKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNl
KHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7Ci0gICAgZWxzZQotICAgICAgICBt
X2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVy
OjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOworICAgIGF1dG8gcHJvdG9jb2xfanNvbk1l
c3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIG1fYmFja2VuZERpc3BhdGNoZXIt
PnNlbmRSZXNwb25zZShwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJvdG9jb2xfanNvbk1lc3Nh
Z2UpLCBmYWxzZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgpAQCAtMjk3LDYgKzI5
OCw3IEBAIHZvaWQgRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkNvbW1hbmQobG9uZyByZXF1ZXN0
SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCiAKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmpl
Y3RzLmgiCiAjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9u
YWwuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3Bl
Y3RvciB7CkBAIC0zNDksMTYgKzM1MSwxNSBAQCBwcml2YXRlOgogI2luY2x1ZGUgIlRlc3RGcm9u
dGVuZERpc3BhdGNoZXJzLmgiCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JG
cm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogbmFtZXNw
YWNlIEluc3BlY3RvciB7CiAKIHZvaWQgRG9tYWluRnJvbnRlbmREaXNwYXRjaGVyOjpFdmVudCgp
CiB7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNy
ZWF0ZSgpOwotICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRvbWFpbi5F
dmVudCJfcyk7CisgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6
Y3JlYXRlKCk7CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9z
LCAiRG9tYWluLkV2ZW50Il9zKTsKIAotICAgIG1fZnJvbnRlbmRSb3V0ZXIuc2VuZEV2ZW50KGpz
b25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7CisgICAgbV9mcm9udGVuZFJvdXRlci5zZW5kRXZl
bnQocHJvdG9jb2xfanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgSW5zcGVjdG9yCkBAIC0zOTgsNyArMzk5LDkgQEAgdm9pZCBEb21haW5Gcm9udGVuZERp
c3BhdGNoZXI6OkV2ZW50KCkKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+
CisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7
CiAKQEAgLTQ1Miw4ICs0NTUsNyBAQCBuYW1lc3BhY2UgUHJvdG9jb2wgewogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKIAotI2luY2x1ZGUgPHd0
Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3
dGYvQXNzZXJ0aW9ucy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtNTA5LDcgKzUx
MSw3IEBAIGNsYXNzIE9iakNJbnNwZWN0b3JEb21haW5CYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6
IHB1YmxpYyBBbHRlcm5hdGVEb21haW5CYWNrZW5kCiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CiBwdWJsaWM6CiAgICAgT2JqQ0luc3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyKGlk
PFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+IGhhbmRsZXIpIHsgbV9kZWxlZ2F0ZSA9
IGhhbmRsZXI7IH0KLSAgICB2b2lkIENvbW1hbmQobG9uZyByZXF1ZXN0SWQpIGZpbmFsOworICAg
IHZvaWQgQ29tbWFuZChsb25nIHByb3RvY29sX2NhbGxJZCkgZmluYWw7CiBwcml2YXRlOgogICAg
IFJldGFpblB0cjxpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPj4gbV9kZWxlZ2F0
ZTsKIH07CkBAIC01NTcsMjEgKzU1OSwyMiBAQCBwcml2YXRlOgogCiBuYW1lc3BhY2UgSW5zcGVj
dG9yIHsKIAotdm9pZCBPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkNvbW1h
bmQobG9uZyByZXF1ZXN0SWQpCit2b2lkIE9iakNJbnNwZWN0b3JEb21haW5CYWNrZW5kRGlzcGF0
Y2hlcjo6Q29tbWFuZChsb25nIHByb3RvY29sX2NhbGxJZCkKIHsKICAgICBpZiAoIVttX2RlbGVn
YXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoQ29tbWFuZFdpdGhFcnJvckNhbGxiYWNr
OnN1Y2Nlc3NDYWxsYmFjazopXSkgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBv
cnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZv
dW5kLCAiJ0RvbWFpbi5Db21tYW5kJyB3YXMgbm90IGZvdW5kIl9zKTsKKyAgICAgICAgYmFja2Vu
ZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxsSWQsIEJhY2tl
bmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEb21haW4uQ29tbWFuZCcgd2FzIG5vdCBm
b3VuZCJfcyk7CiAgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3Jz
KCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZCBlcnJvckNhbGxiYWNrID0gXihO
U1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJv
dG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJy
b3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHBy
b3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CiAg
ICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgfTsK
IAogICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF57Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVy
KCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIEpTT046Ok9iamVjdDo6Y3JlYXRlKCksIGZhbHNl
KTsKKyAgICAgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3Jl
YXRlKCk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShwcm90b2Nv
bF9jYWxsSWQsIFdURk1vdmUocHJvdG9jb2xfanNvbk1lc3NhZ2UpLCBmYWxzZSk7CiAgICAgfTsK
IAogICAgIFttX2RlbGVnYXRlIENvbW1hbmRXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNr
IHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOwpAQCAtNzczLDkgKzc3Niw5IEBAIHVz
aW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CiB7CiAgICAgY29uc3QgRnJvbnRlbmRSb3V0ZXImIHJv
dXRlciA9IF9jb250cm9sbGVyLT5mcm9udGVuZFJvdXRlcigpOwogCi0gICAgUmVmPEpTT046Ok9i
amVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIGpzb25NZXNz
YWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRvbWFpbi5FdmVudCJfcyk7Ci0gICAgcm91dGVy
LnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOworICAgIGF1dG8gcHJvdG9j
b2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIHByb3RvY29sX2pz
b25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRvbWFpbi5FdmVudCJfcyk7CisgICAg
cm91dGVyLnNlbmRFdmVudChwcm90b2NvbF9qc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwog
fQogCiBAZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvdGVzdHMvZXhwZWN0ZWQvZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5q
c29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9leHBlY3RlZC9kb21haW5zLXdpdGgtdmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24tcmVzdWx0
CmluZGV4IDQ3NWI4N2JkMGM4ZGE4NTJiNWY5OTBjYjIxY2IzYzJlMDc2MDk5ODQuLjQxOWY5MmVk
YTEzYWVjMjJkOGY0YWYyYWYxN2YwNWY3NWQyNDFhNzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9kb21haW5zLXdpdGgt
dmFyeWluZy1jb21tYW5kLXNpemVzLmpzb24tcmVzdWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9kb21haW5zLXdpdGgtdmFyeWlu
Zy1jb21tYW5kLXNpemVzLmpzb24tcmVzdWx0CkBAIC03OSw3ICs3OSw3IEBAIEluc3BlY3RvckJh
Y2tlbmQuYWN0aXZhdGVEb21haW4oIk5ldHdvcmszIiwgbnVsbCk7CiAKICNpZiBFTkFCTEUoSU5T
UEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIAotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5
cGVzLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CiAjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KIApAQCAtOTcsMTkgKzk3LDE5IEBA
IHByaXZhdGU6CiBjbGFzcyBBbHRlcm5hdGVOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyIDogcHVi
bGljIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5B
bHRlcm5hdGVOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyKCkgeyB9Ci0gICAgdmlydHVhbCB2b2lk
IGxvYWRSZXNvdXJjZTEobG9uZyBjYWxsSWQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJl
c291cmNlMShsb25nIHByb3RvY29sX2NhbGxJZCkgPSAwOwogfTsKIAogY2xhc3MgQWx0ZXJuYXRl
TmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlciA6IHB1YmxpYyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0
Y2hlciB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+QWx0ZXJuYXRlTmV0d29yazNCYWNrZW5kRGlz
cGF0Y2hlcigpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UxKGxvbmcgY2FsbElk
KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTIobG9uZyBjYWxsSWQpID0gMDsK
LSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlMyhsb25nIGNhbGxJZCkgPSAwOwotICAgIHZp
cnR1YWwgdm9pZCBsb2FkUmVzb3VyY2U0KGxvbmcgY2FsbElkKSA9IDA7Ci0gICAgdmlydHVhbCB2
b2lkIGxvYWRSZXNvdXJjZTUobG9uZyBjYWxsSWQpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgbG9h
ZFJlc291cmNlNihsb25nIGNhbGxJZCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3Vy
Y2U3KGxvbmcgY2FsbElkKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTEobG9u
ZyBwcm90b2NvbF9jYWxsSWQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlMihs
b25nIHByb3RvY29sX2NhbGxJZCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2Uz
KGxvbmcgcHJvdG9jb2xfY2FsbElkKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJj
ZTQobG9uZyBwcm90b2NvbF9jYWxsSWQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291
cmNlNShsb25nIHByb3RvY29sX2NhbGxJZCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVz
b3VyY2U2KGxvbmcgcHJvdG9jb2xfY2FsbElkKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGxvYWRS
ZXNvdXJjZTcobG9uZyBwcm90b2NvbF9jYWxsSWQpID0gMDsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgpAQCAtMTUxLDExICsxNTEsMTQgQEAgcHVibGljOgogCiAjaW5jbHVkZSAiVGVz
dFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8dHVwbGU+CisjaW5jbHVkZSA8d3RmL0V4cGVj
dGVkLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCi10eXBlZGVmIFN0cmluZyBFcnJv
clN0cmluZzsKKwogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMp
CiBjbGFzcyBBbHRlcm5hdGVOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOwpAQCAtMTY0LDIwICsx
NjcsMjAgQEAgY2xhc3MgQWx0ZXJuYXRlTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjsKIAogY2xh
c3MgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewogcHVibGljOgotICAgIHZpcnR1
YWwgdm9pZCBsb2FkUmVzb3VyY2UxKEVycm9yU3RyaW5nJikgPSAwOworICAgIHZpcnR1YWwgUHJv
dG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gbG9hZFJlc291cmNlMSgpID0gMDsKIHByb3RlY3Rl
ZDoKICAgICB2aXJ0dWFsIH5OZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpOwogfTsK
IAogY2xhc3MgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewogcHVibGljOgotICAg
IHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UxKEVycm9yU3RyaW5nJikgPSAwOwotICAgIHZpcnR1
YWwgdm9pZCBsb2FkUmVzb3VyY2UyKEVycm9yU3RyaW5nJikgPSAwOwotICAgIHZpcnR1YWwgdm9p
ZCBsb2FkUmVzb3VyY2UzKEVycm9yU3RyaW5nJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBsb2Fk
UmVzb3VyY2U0KEVycm9yU3RyaW5nJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3Vy
Y2U1KEVycm9yU3RyaW5nJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2U2KEVy
cm9yU3RyaW5nJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2U3KEVycm9yU3Ry
aW5nJikgPSAwOworICAgIHZpcnR1YWwgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gbG9h
ZFJlc291cmNlMSgpID0gMDsKKyAgICB2aXJ0dWFsIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZv
aWQ+IGxvYWRSZXNvdXJjZTIoKSA9IDA7CisgICAgdmlydHVhbCBQcm90b2NvbDo6RXJyb3JTdHJp
bmdPcjx2b2lkPiBsb2FkUmVzb3VyY2UzKCkgPSAwOworICAgIHZpcnR1YWwgUHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8dm9pZD4gbG9hZFJlc291cmNlNCgpID0gMDsKKyAgICB2aXJ0dWFsIFByb3Rv
Y29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGxvYWRSZXNvdXJjZTUoKSA9IDA7CisgICAgdmlydHVh
bCBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBsb2FkUmVzb3VyY2U2KCkgPSAwOworICAg
IHZpcnR1YWwgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gbG9hZFJlc291cmNlNygpID0g
MDsKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIH5OZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVySGFu
ZGxlcigpOwogfTsKQEAgLTE4NSw5ICsxODgsOSBAQCBwcm90ZWN0ZWQ6CiBjbGFzcyBOZXR3b3Jr
MUJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIFN1cHBsZW1lbnRhbEJhY2tlbmREaXNw
YXRjaGVyIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPE5ldHdvcmsxQmFja2VuZERpc3BhdGNo
ZXI+IGNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYsIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyKik7Ci0gICAgdm9pZCBkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5n
JiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkgZmluYWw7CisgICAgdm9pZCBk
aXNwYXRjaChsb25nIHByb3RvY29sX2NhbGxJZCwgY29uc3QgU3RyaW5nJiBwcm90b2NvbF9tZXRo
b2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfbWVzc2FnZSkgZmluYWw7CiBwcml2YXRl
OgotICAgIHZvaWQgbG9hZFJlc291cmNlMShsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9i
amVjdD4mJiBwYXJhbWV0ZXJzKTsKKyAgICB2b2lkIGxvYWRSZXNvdXJjZTEobG9uZyBwcm90b2Ns
X2NhbGxJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9wYXJhbWV0ZXJzKTsKICNp
ZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIHB1YmxpYzoKICAgICB2
b2lkIHNldEFsdGVybmF0ZURpc3BhdGNoZXIoQWx0ZXJuYXRlTmV0d29yazFCYWNrZW5kRGlzcGF0
Y2hlciogYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeyBtX2FsdGVybmF0ZURpc3BhdGNoZXIgPSBhbHRl
cm5hdGVEaXNwYXRjaGVyOyB9CkBAIC0yMDIsMTUgKzIwNSwxNSBAQCBwcml2YXRlOgogY2xhc3Mg
TmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNr
ZW5kRGlzcGF0Y2hlciB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxOZXR3b3JrM0JhY2tlbmRE
aXNwYXRjaGVyPiBjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImLCBOZXR3b3JrM0JhY2tlbmREaXNw
YXRjaGVySGFuZGxlciopOwotICAgIHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0
IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpIGZpbmFsOworICAg
IHZvaWQgZGlzcGF0Y2gobG9uZyBwcm90b2NvbF9jYWxsSWQsIGNvbnN0IFN0cmluZyYgcHJvdG9j
b2xfbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX21lc3NhZ2UpIGZpbmFsOwog
cHJpdmF0ZToKLSAgICB2b2lkIGxvYWRSZXNvdXJjZTEobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxK
U09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7Ci0gICAgdm9pZCBsb2FkUmVzb3VyY2UyKGxvbmcg
cmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOwotICAgIHZvaWQg
bG9hZFJlc291cmNlMyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJh
bWV0ZXJzKTsKLSAgICB2b2lkIGxvYWRSZXNvdXJjZTQobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxK
U09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7Ci0gICAgdm9pZCBsb2FkUmVzb3VyY2U1KGxvbmcg
cmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOwotICAgIHZvaWQg
bG9hZFJlc291cmNlNihsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJh
bWV0ZXJzKTsKLSAgICB2b2lkIGxvYWRSZXNvdXJjZTcobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxK
U09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7CisgICAgdm9pZCBsb2FkUmVzb3VyY2UxKGxvbmcg
cHJvdG9jbF9jYWxsSWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfcGFyYW1ldGVy
cyk7CisgICAgdm9pZCBsb2FkUmVzb3VyY2UyKGxvbmcgcHJvdG9jbF9jYWxsSWQsIFJlZlB0cjxK
U09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfcGFyYW1ldGVycyk7CisgICAgdm9pZCBsb2FkUmVzb3Vy
Y2UzKGxvbmcgcHJvdG9jbF9jYWxsSWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xf
cGFyYW1ldGVycyk7CisgICAgdm9pZCBsb2FkUmVzb3VyY2U0KGxvbmcgcHJvdG9jbF9jYWxsSWQs
IFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfcGFyYW1ldGVycyk7CisgICAgdm9pZCBs
b2FkUmVzb3VyY2U1KGxvbmcgcHJvdG9jbF9jYWxsSWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYg
cHJvdG9jb2xfcGFyYW1ldGVycyk7CisgICAgdm9pZCBsb2FkUmVzb3VyY2U2KGxvbmcgcHJvdG9j
bF9jYWxsSWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfcGFyYW1ldGVycyk7Cisg
ICAgdm9pZCBsb2FkUmVzb3VyY2U3KGxvbmcgcHJvdG9jbF9jYWxsSWQsIFJlZlB0cjxKU09OOjpP
YmplY3Q+JiYgcHJvdG9jb2xfcGFyYW1ldGVycyk7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRF
Uk5BVEVfRElTUEFUQ0hFUlMpCiBwdWJsaWM6CiAgICAgdm9pZCBzZXRBbHRlcm5hdGVEaXNwYXRj
aGVyKEFsdGVybmF0ZU5ldHdvcmszQmFja2VuZERpc3BhdGNoZXIqIGFsdGVybmF0ZURpc3BhdGNo
ZXIpIHsgbV9hbHRlcm5hdGVEaXNwYXRjaGVyID0gYWx0ZXJuYXRlRGlzcGF0Y2hlcjsgfQpAQCAt
MjU5LDkgKzI2Miw3IEBAIHByaXZhdGU6CiAjaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVy
cy5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIu
aD4KLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ry
b3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogI2lmIEVOQUJMRShJTlNQ
RUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNr
ZW5kRGlzcGF0Y2hlcnMuaCIKQEAgLTI4NCwzOCArMjg1LDM4IEBAIE5ldHdvcmsxQmFja2VuZERp
c3BhdGNoZXI6Ok5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImIGJh
Y2tlbmRECiAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRjaGVyRm9yRG9t
YWluKCJOZXR3b3JrMSJfcywgdGhpcyk7CiB9CiAKLXZvaWQgTmV0d29yazFCYWNrZW5kRGlzcGF0
Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8
SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpCit2b2lkIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI6
OmRpc3BhdGNoKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBjb25zdCBTdHJpbmcmIHByb3RvY29sX21l
dGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9tZXNzYWdlKQogewogICAgIFJlZjxO
ZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKIAotICAgIFJlZlB0cjxK
U09OOjpPYmplY3Q+IHBhcmFtZXRlcnM7Ci0gICAgbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJhbXMi
X3MsIHBhcmFtZXRlcnMpOworICAgIGF1dG8gcHJvdG9jb2xfcGFyYW1ldGVycyA9IHByb3RvY29s
X21lc3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9zKTsKIAotICAgIGlmIChtZXRob2QgPT0gImxv
YWRSZXNvdXJjZTEiKSB7Ci0gICAgICAgIGxvYWRSZXNvdXJjZTEocmVxdWVzdElkLCBXVEZNb3Zl
KHBhcmFtZXRlcnMpKTsKKyAgICBpZiAocHJvdG9jb2xfbWV0aG9kID09ICJsb2FkUmVzb3VyY2Ux
IikgeworICAgICAgICBsb2FkUmVzb3VyY2UxKHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90
b2NvbF9wYXJhbWV0ZXJzKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBtX2JhY2tl
bmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRo
b2ROb3RGb3VuZCwgIidOZXR3b3JrMS4iICsgbWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOwor
ICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3Bh
dGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdvcmsxLiIgKyBwcm90b2NvbF9tZXRob2QgKyAi
JyB3YXMgbm90IGZvdW5kIik7CiB9CiAKLXZvaWQgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6
bG9hZFJlc291cmNlMShsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikKK3Zv
aWQgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMShsb25nIHByb3RvY29s
X2NhbGxJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9S
X0FMVEVSTkFURV9ESVNQQVRDSEVSUykKICAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7
Ci0gICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJlc291cmNlMShyZXF1ZXN0SWQp
OworICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmxvYWRSZXNvdXJjZTEocHJvdG9jb2xf
Y2FsbElkKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZiAvLyBFTkFCTEUoSU5TUEVD
VE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIAotICAgIEVycm9yU3RyaW5nIGVycm9yOwotICAg
IFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAg
bV9hZ2VudC0+bG9hZFJlc291cmNlMShlcnJvcik7CisgICAgYXV0byByZXN1bHQgPSBtX2FnZW50
LT5sb2FkUmVzb3VyY2UxKCk7CisgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAgICAgQVNTRVJUKCFy
ZXN1bHQuZXJyb3IoKS5pc0VtcHR5KCkpOworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5y
ZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgcmVzdWx0
LmVycm9yKCkpOworICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgaWYgKCFlcnJvci5sZW5n
dGgoKSkKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJ
ZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tlbmRE
aXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJF
cnJvciwgV1RGTW92ZShlcnJvcikpOworICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBK
U09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNw
b25zZShwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJvdG9jb2xfanNvbk1lc3NhZ2UpLCBmYWxz
ZSk7CiB9CiAKIFJlZjxOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyPiBOZXR3b3JrM0JhY2tlbmRE
aXNwYXRjaGVyOjpjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYXRjaGVyLCBO
ZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQpCkBAIC0zMzAsMTQgKzMzMSwx
MyBAQCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVy
KEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRAogICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJl
Z2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbigiTmV0d29yazMiX3MsIHRoaXMpOwogfQogCi12b2lk
IE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25z
dCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKQordm9pZCBOZXR3
b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHByb3RvY29sX2NhbGxJZCwgY29u
c3QgU3RyaW5nJiBwcm90b2NvbF9tZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xf
bWVzc2FnZSkKIHsKICAgICBSZWY8TmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgq
dGhpcyk7CiAKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzOwotICAgIG1lc3Nh
Z2UtPmdldE9iamVjdCgicGFyYW1zIl9zLCBwYXJhbWV0ZXJzKTsKKyAgICBhdXRvIHByb3RvY29s
X3BhcmFtZXRlcnMgPSBwcm90b2NvbF9tZXNzYWdlLT5nZXRPYmplY3QoInBhcmFtcyJfcyk7CiAK
LSAgICB1c2luZyBDYWxsSGFuZGxlciA9IHZvaWQgKE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6
OiopKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpOworICAg
IHVzaW5nIENhbGxIYW5kbGVyID0gdm9pZCAoTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6Kiko
bG9uZyBwcm90b2NvbF9jYWxsSWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfbWVz
c2FnZSk7CiAgICAgdXNpbmcgRGlzcGF0Y2hNYXAgPSBIYXNoTWFwPFN0cmluZywgQ2FsbEhhbmRs
ZXI+OwogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxEaXNwYXRjaE1hcD4gZGlzcGF0Y2hNYXA7
CiAgICAgaWYgKGRpc3BhdGNoTWFwLmdldCgpLmlzRW1wdHkoKSkgewpAQCAtMzU4LDE0NiArMzU4
LDE1MyBAQCB2b2lkIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVx
dWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUgogICAgICAgICAgICAgZGlzcGF0Y2hNYXAu
Z2V0KCkuYWRkKGNvbW1hbmRzW2ldLm5hbWUsIGNvbW1hbmRzW2ldLmhhbmRsZXIpOwogICAgIH0K
IAotICAgIGF1dG8gZmluZFJlc3VsdCA9IGRpc3BhdGNoTWFwLmdldCgpLmZpbmQobWV0aG9kKTsK
KyAgICBhdXRvIGZpbmRSZXN1bHQgPSBkaXNwYXRjaE1hcC5nZXQoKS5maW5kKHByb3RvY29sX21l
dGhvZCk7CiAgICAgaWYgKGZpbmRSZXN1bHQgPT0gZGlzcGF0Y2hNYXAuZ2V0KCkuZW5kKCkpIHsK
LSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5k
RGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29yazMuIiArIG1ldGhvZCArICInIHdh
cyBub3QgZm91bmQiKTsKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9j
b2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29yazMuIiAr
IHByb3RvY29sX21ldGhvZCArICInIHdhcyBub3QgZm91bmQiKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgICgoKnRoaXMpLipmaW5kUmVzdWx0LT52YWx1ZSkocmVxdWVzdElkLCBXVEZN
b3ZlKHBhcmFtZXRlcnMpKTsKKyAgICAoKCp0aGlzKS4qZmluZFJlc3VsdC0+dmFsdWUpKHByb3Rv
Y29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9wYXJhbWV0ZXJzKSk7CiB9CiAKLXZvaWQgTmV0
d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMShsb25nIHJlcXVlc3RJZCwgUmVm
UHRyPEpTT046Ok9iamVjdD4mJikKK3ZvaWQgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9h
ZFJlc291cmNlMShsb25nIHByb3RvY29sX2NhbGxJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikK
IHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKICAgICBpZiAo
bV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+
bG9hZFJlc291cmNlMShyZXF1ZXN0SWQpOworICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXIt
PmxvYWRSZXNvdXJjZTEocHJvdG9jb2xfY2FsbElkKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
ICNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIAotICAg
IEVycm9yU3RyaW5nIGVycm9yOwotICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046
Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgbV9hZ2VudC0+bG9hZFJlc291cmNlMShlcnJvcik7Cisg
ICAgYXV0byByZXN1bHQgPSBtX2FnZW50LT5sb2FkUmVzb3VyY2UxKCk7CisgICAgaWYgKCFyZXN1
bHQpIHsKKyAgICAgICAgQVNTRVJUKCFyZXN1bHQuZXJyb3IoKS5pc0VtcHR5KCkpOworICAgICAg
ICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRj
aGVyOjpTZXJ2ZXJFcnJvciwgcmVzdWx0LmVycm9yKCkpOworICAgICAgICByZXR1cm47CisgICAg
fQogCi0gICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7Ci0gICAg
ZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJh
Y2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOworICAgIGF1dG8g
cHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIG1fYmFj
a2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJv
dG9jb2xfanNvbk1lc3NhZ2UpLCBmYWxzZSk7CiB9CiAKLXZvaWQgTmV0d29yazNCYWNrZW5kRGlz
cGF0Y2hlcjo6bG9hZFJlc291cmNlMihsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVj
dD4mJikKK3ZvaWQgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMihsb25n
IHByb3RvY29sX2NhbGxJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikKIHsKICNpZiBFTkFCTEUo
SU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKICAgICBpZiAobV9hbHRlcm5hdGVEaXNw
YXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJlc291cmNlMihy
ZXF1ZXN0SWQpOworICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmxvYWRSZXNvdXJjZTIo
cHJvdG9jb2xfY2FsbElkKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZiAvLyBFTkFC
TEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIAotICAgIEVycm9yU3RyaW5nIGVy
cm9yOwotICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRl
KCk7Ci0gICAgbV9hZ2VudC0+bG9hZFJlc291cmNlMihlcnJvcik7CisgICAgYXV0byByZXN1bHQg
PSBtX2FnZW50LT5sb2FkUmVzb3VyY2UyKCk7CisgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAgICAg
QVNTRVJUKCFyZXN1bHQuZXJyb3IoKS5pc0VtcHR5KCkpOworICAgICAgICBtX2JhY2tlbmREaXNw
YXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJv
ciwgcmVzdWx0LmVycm9yKCkpOworICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgaWYgKCFl
cnJvci5sZW5ndGgoKSkKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNl
KHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7Ci0gICAgZWxzZQotICAgICAgICBt
X2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVy
OjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOworICAgIGF1dG8gcHJvdG9jb2xfanNvbk1l
c3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIG1fYmFja2VuZERpc3BhdGNoZXIt
PnNlbmRSZXNwb25zZShwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJvdG9jb2xfanNvbk1lc3Nh
Z2UpLCBmYWxzZSk7CiB9CiAKLXZvaWQgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJl
c291cmNlMyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikKK3ZvaWQgTmV0
d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMyhsb25nIHByb3RvY29sX2NhbGxJ
ZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVS
TkFURV9ESVNQQVRDSEVSUykKICAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAg
ICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJlc291cmNlMyhyZXF1ZXN0SWQpOworICAg
ICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmxvYWRSZXNvdXJjZTMocHJvdG9jb2xfY2FsbElk
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FM
VEVSTkFURV9ESVNQQVRDSEVSUykKIAotICAgIEVycm9yU3RyaW5nIGVycm9yOwotICAgIFJlZjxK
U09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgbV9hZ2Vu
dC0+bG9hZFJlc291cmNlMyhlcnJvcik7CisgICAgYXV0byByZXN1bHQgPSBtX2FnZW50LT5sb2Fk
UmVzb3VyY2UzKCk7CisgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAgICAgQVNTRVJUKCFyZXN1bHQu
ZXJyb3IoKS5pc0VtcHR5KCkpOworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQ
cm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgcmVzdWx0LmVycm9y
KCkpOworICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgaWYgKCFlcnJvci5sZW5ndGgoKSkK
LSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RG
TW92ZShyZXN1bHQpLCBmYWxzZSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRj
aGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwg
V1RGTW92ZShlcnJvcikpOworICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpP
YmplY3Q6OmNyZWF0ZSgpOworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShw
cm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJvdG9jb2xfanNvbk1lc3NhZ2UpLCBmYWxzZSk7CiB9
CiAKLXZvaWQgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNChsb25nIHJl
cXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikKK3ZvaWQgTmV0d29yazNCYWNrZW5kRGlz
cGF0Y2hlcjo6bG9hZFJlc291cmNlNChsb25nIHByb3RvY29sX2NhbGxJZCwgUmVmUHRyPEpTT046
Ok9iamVjdD4mJikKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVS
UykKICAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRl
RGlzcGF0Y2hlci0+bG9hZFJlc291cmNlNChyZXF1ZXN0SWQpOworICAgICAgICBtX2FsdGVybmF0
ZURpc3BhdGNoZXItPmxvYWRSZXNvdXJjZTQocHJvdG9jb2xfY2FsbElkKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KICNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRD
SEVSUykKIAotICAgIEVycm9yU3RyaW5nIGVycm9yOwotICAgIFJlZjxKU09OOjpPYmplY3Q+IHJl
c3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgbV9hZ2VudC0+bG9hZFJlc291cmNl
NChlcnJvcik7CisgICAgYXV0byByZXN1bHQgPSBtX2FnZW50LT5sb2FkUmVzb3VyY2U0KCk7Cisg
ICAgaWYgKCFyZXN1bHQpIHsKKyAgICAgICAgQVNTRVJUKCFyZXN1bHQuZXJyb3IoKS5pc0VtcHR5
KCkpOworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJh
Y2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgcmVzdWx0LmVycm9yKCkpOworICAgICAgICBy
ZXR1cm47CisgICAgfQogCi0gICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKLSAgICAgICAgbV9iYWNr
ZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBm
YWxzZSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90
b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikp
OworICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgp
OworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShwcm90b2NvbF9jYWxsSWQs
IFdURk1vdmUocHJvdG9jb2xfanNvbk1lc3NhZ2UpLCBmYWxzZSk7CiB9CiAKLXZvaWQgTmV0d29y
azNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNShsb25nIHJlcXVlc3RJZCwgUmVmUHRy
PEpTT046Ok9iamVjdD4mJikKK3ZvaWQgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJl
c291cmNlNShsb25nIHByb3RvY29sX2NhbGxJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikKIHsK
ICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKICAgICBpZiAobV9h
bHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9h
ZFJlc291cmNlNShyZXF1ZXN0SWQpOworICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmxv
YWRSZXNvdXJjZTUocHJvdG9jb2xfY2FsbElkKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNl
bmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIAotICAgIEVy
cm9yU3RyaW5nIGVycm9yOwotICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9i
amVjdDo6Y3JlYXRlKCk7Ci0gICAgbV9hZ2VudC0+bG9hZFJlc291cmNlNShlcnJvcik7CisgICAg
YXV0byByZXN1bHQgPSBtX2FnZW50LT5sb2FkUmVzb3VyY2U1KCk7CisgICAgaWYgKCFyZXN1bHQp
IHsKKyAgICAgICAgQVNTRVJUKCFyZXN1bHQuZXJyb3IoKS5pc0VtcHR5KCkpOworICAgICAgICBt
X2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVy
OjpTZXJ2ZXJFcnJvciwgcmVzdWx0LmVycm9yKCkpOworICAgICAgICByZXR1cm47CisgICAgfQog
Ci0gICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+
c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7Ci0gICAgZWxz
ZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tl
bmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOworICAgIGF1dG8gcHJv
dG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIG1fYmFja2Vu
ZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJvdG9j
b2xfanNvbk1lc3NhZ2UpLCBmYWxzZSk7CiB9CiAKLXZvaWQgTmV0d29yazNCYWNrZW5kRGlzcGF0
Y2hlcjo6bG9hZFJlc291cmNlNihsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4m
JikKK3ZvaWQgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNihsb25nIHBy
b3RvY29sX2NhbGxJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikKIHsKICNpZiBFTkFCTEUoSU5T
UEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKICAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRj
aGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJlc291cmNlNihyZXF1
ZXN0SWQpOworICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmxvYWRSZXNvdXJjZTYocHJv
dG9jb2xfY2FsbElkKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZiAvLyBFTkFCTEUo
SU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIAotICAgIEVycm9yU3RyaW5nIGVycm9y
OwotICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7
Ci0gICAgbV9hZ2VudC0+bG9hZFJlc291cmNlNihlcnJvcik7CisgICAgYXV0byByZXN1bHQgPSBt
X2FnZW50LT5sb2FkUmVzb3VyY2U2KCk7CisgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAgICAgQVNT
RVJUKCFyZXN1bHQuZXJyb3IoKS5pc0VtcHR5KCkpOworICAgICAgICBtX2JhY2tlbmREaXNwYXRj
aGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwg
cmVzdWx0LmVycm9yKCkpOworICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgaWYgKCFlcnJv
ci5sZW5ndGgoKSkKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJl
cXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7Ci0gICAgZWxzZQotICAgICAgICBtX2Jh
Y2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpT
ZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOworICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3Nh
Z2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNl
bmRSZXNwb25zZShwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJvdG9jb2xfanNvbk1lc3NhZ2Up
LCBmYWxzZSk7CiB9CiAKLXZvaWQgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291
cmNlNyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikKK3ZvaWQgTmV0d29y
azNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNyhsb25nIHByb3RvY29sX2NhbGxJZCwg
UmVmUHRyPEpTT046Ok9iamVjdD4mJikKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKICAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAg
IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJlc291cmNlNyhyZXF1ZXN0SWQpOworICAgICAg
ICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmxvYWRSZXNvdXJjZTcocHJvdG9jb2xfY2FsbElkKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVS
TkFURV9ESVNQQVRDSEVSUykKIAotICAgIEVycm9yU3RyaW5nIGVycm9yOwotICAgIFJlZjxKU09O
OjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgbV9hZ2VudC0+
bG9hZFJlc291cmNlNyhlcnJvcik7CisgICAgYXV0byByZXN1bHQgPSBtX2FnZW50LT5sb2FkUmVz
b3VyY2U3KCk7CisgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAgICAgQVNTRVJUKCFyZXN1bHQuZXJy
b3IoKS5pc0VtcHR5KCkpOworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90
b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgcmVzdWx0LmVycm9yKCkp
OworICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKLSAg
ICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92
ZShyZXN1bHQpLCBmYWxzZSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVy
LT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RG
TW92ZShlcnJvcikpOworICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmpl
Y3Q6OmNyZWF0ZSgpOworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShwcm90
b2NvbF9jYWxsSWQsIFdURk1vdmUocHJvdG9jb2xfanNvbk1lc3NhZ2UpLCBmYWxzZSk7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgpAQCAtNTM4LDYgKzU0NSw3IEBAIHZvaWQgTmV0d29y
azNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNyhsb25nIHJlcXVlc3RJZCwgUmVmUHRy
PEpTT046Ok9iamVjCiAKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVk
ZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CkBAIC01ODEs
NyArNTg5LDYgQEAgY2xhc3MgRnJvbnRlbmRSb3V0ZXI7CiAjaW5jbHVkZSAiVGVzdEZyb250ZW5k
RGlzcGF0Y2hlcnMuaCIKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250
ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiBuYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKIApAQCAtNjIyLDcgKzYyOSw5IEBAIG5hbWVzcGFjZSBJbnNwZWN0b3Igewog
I3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2Nv
bFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvSlNP
TlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtNjgxLDggKzY5MCw3
IEBAIHVzaW5nIExvYWRlcklkID0gU3RyaW5nOwogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1
ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKIAotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgot
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5o
PgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtNzM5LDcgKzc0Nyw3IEBAIGNsYXNzIE9i
akNJbnNwZWN0b3JOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEFsdGVy
bmF0ZU5ldHdvcmsxQmFjCiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAg
ICAgT2JqQ0luc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIoaWQ8VGVzdFByb3RvY29s
TmV0d29yazFEb21haW5IYW5kbGVyPiBoYW5kbGVyKSB7IG1fZGVsZWdhdGUgPSBoYW5kbGVyOyB9
Ci0gICAgdm9pZCBsb2FkUmVzb3VyY2UxKGxvbmcgcmVxdWVzdElkKSBmaW5hbDsKKyAgICB2b2lk
IGxvYWRSZXNvdXJjZTEobG9uZyBwcm90b2NvbF9jYWxsSWQpIGZpbmFsOwogcHJpdmF0ZToKICAg
ICBSZXRhaW5QdHI8aWQ8VGVzdFByb3RvY29sTmV0d29yazFEb21haW5IYW5kbGVyPj4gbV9kZWxl
Z2F0ZTsKIH07CkBAIC03NDgsMTMgKzc1NiwxMyBAQCBjbGFzcyBPYmpDSW5zcGVjdG9yTmV0d29y
azNCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBBbHRlcm5hdGVOZXR3b3JrM0JhYwog
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIE9iakNJbnNwZWN0b3JO
ZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyKGlkPFRlc3RQcm90b2NvbE5ldHdvcmszRG9tYWluSGFu
ZGxlcj4gaGFuZGxlcikgeyBtX2RlbGVnYXRlID0gaGFuZGxlcjsgfQotICAgIHZvaWQgbG9hZFJl
c291cmNlMShsb25nIHJlcXVlc3RJZCkgZmluYWw7Ci0gICAgdm9pZCBsb2FkUmVzb3VyY2UyKGxv
bmcgcmVxdWVzdElkKSBmaW5hbDsKLSAgICB2b2lkIGxvYWRSZXNvdXJjZTMobG9uZyByZXF1ZXN0
SWQpIGZpbmFsOwotICAgIHZvaWQgbG9hZFJlc291cmNlNChsb25nIHJlcXVlc3RJZCkgZmluYWw7
Ci0gICAgdm9pZCBsb2FkUmVzb3VyY2U1KGxvbmcgcmVxdWVzdElkKSBmaW5hbDsKLSAgICB2b2lk
IGxvYWRSZXNvdXJjZTYobG9uZyByZXF1ZXN0SWQpIGZpbmFsOwotICAgIHZvaWQgbG9hZFJlc291
cmNlNyhsb25nIHJlcXVlc3RJZCkgZmluYWw7CisgICAgdm9pZCBsb2FkUmVzb3VyY2UxKGxvbmcg
cHJvdG9jb2xfY2FsbElkKSBmaW5hbDsKKyAgICB2b2lkIGxvYWRSZXNvdXJjZTIobG9uZyBwcm90
b2NvbF9jYWxsSWQpIGZpbmFsOworICAgIHZvaWQgbG9hZFJlc291cmNlMyhsb25nIHByb3RvY29s
X2NhbGxJZCkgZmluYWw7CisgICAgdm9pZCBsb2FkUmVzb3VyY2U0KGxvbmcgcHJvdG9jb2xfY2Fs
bElkKSBmaW5hbDsKKyAgICB2b2lkIGxvYWRSZXNvdXJjZTUobG9uZyBwcm90b2NvbF9jYWxsSWQp
IGZpbmFsOworICAgIHZvaWQgbG9hZFJlc291cmNlNihsb25nIHByb3RvY29sX2NhbGxJZCkgZmlu
YWw7CisgICAgdm9pZCBsb2FkUmVzb3VyY2U3KGxvbmcgcHJvdG9jb2xfY2FsbElkKSBmaW5hbDsK
IHByaXZhdGU6CiAgICAgUmV0YWluUHRyPGlkPFRlc3RQcm90b2NvbE5ldHdvcmszRG9tYWluSGFu
ZGxlcj4+IG1fZGVsZWdhdGU7CiB9OwpAQCAtODAyLDE2MSArODEwLDE2OSBAQCBwcml2YXRlOgog
CiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAotdm9pZCBPYmpDSW5zcGVjdG9yTmV0d29yazFCYWNr
ZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMShsb25nIHJlcXVlc3RJZCkKK3ZvaWQgT2JqQ0lu
c3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTEobG9uZyBwcm90
b2NvbF9jYWxsSWQpCiB7CiAgICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6
QHNlbGVjdG9yKGxvYWRSZXNvdXJjZTFXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6
KV0pIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihy
ZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidOZXR3b3JrMS5s
b2FkUmVzb3VyY2UxJyB3YXMgbm90IGZvdW5kIl9zKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNo
ZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxsSWQsIEJhY2tlbmREaXNwYXRj
aGVyOjpNZXRob2ROb3RGb3VuZCwgIidOZXR3b3JrMS5sb2FkUmVzb3VyY2UxJyB3YXMgbm90IGZv
dW5kIl9zKTsKICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMo
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5T
U3RyaW5nICplcnJvcikgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90
b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJv
cik7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocHJv
dG9jb2xfY2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKICAg
ICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKICAgICB9Owog
CiAgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIo
KS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSwgZmFsc2Up
OworICAgICAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVh
dGUoKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHByb3RvY29s
X2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSksIGZhbHNlKTsKICAgICB9Owog
CiAgICAgW21fZGVsZWdhdGUgbG9hZFJlc291cmNlMVdpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2Fs
bGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107CiB9CiAKLXZvaWQgT2JqQ0lu
c3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTEobG9uZyByZXF1
ZXN0SWQpCit2b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2Fk
UmVzb3VyY2UxKGxvbmcgcHJvdG9jb2xfY2FsbElkKQogewogICAgIGlmICghW21fZGVsZWdhdGUg
cmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihsb2FkUmVzb3VyY2UxV2l0aEVycm9yQ2FsbGJh
Y2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJl
cG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90
Rm91bmQsICInTmV0d29yazMubG9hZFJlc291cmNlMScgd2FzIG5vdCBmb3VuZCJfcyk7CisgICAg
ICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocHJvdG9jb2xfY2Fs
bElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29yazMubG9hZFJl
c291cmNlMScgd2FzIG5vdCBmb3VuZCJfcyk7CiAgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCkt
PnNlbmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZCBl
cnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERpc3Bh
dGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVy
OjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBv
cnRQcm90b2NvbEVycm9yKHByb3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZl
ckVycm9yLCBlcnJvcik7CiAgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5n
RXJyb3JzKCk7CiAgICAgfTsKIAogICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF57Ci0gICAgICAg
IGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIEpTT046Ok9iamVj
dDo6Y3JlYXRlKCksIGZhbHNlKTsKKyAgICAgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9
IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNl
bmRSZXNwb25zZShwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJvdG9jb2xfanNvbk1lc3NhZ2Up
LCBmYWxzZSk7CiAgICAgfTsKIAogICAgIFttX2RlbGVnYXRlIGxvYWRSZXNvdXJjZTFXaXRoRXJy
b3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2td
OwogfQogCi12b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2Fk
UmVzb3VyY2UyKGxvbmcgcmVxdWVzdElkKQordm9pZCBPYmpDSW5zcGVjdG9yTmV0d29yazNCYWNr
ZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMihsb25nIHByb3RvY29sX2NhbGxJZCkKIHsKICAg
ICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IobG9hZFJlc291
cmNlMldpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazopXSkgewotICAgICAgICBiYWNr
ZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERp
c3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdvcmszLmxvYWRSZXNvdXJjZTInIHdhcyBu
b3QgZm91bmQiX3MpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2Nv
bEVycm9yKHByb3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5k
LCAiJ05ldHdvcmszLmxvYWRSZXNvdXJjZTInIHdhcyBub3QgZm91bmQiX3MpOwogICAgICAgICBi
YWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCiAgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7Ci0g
ICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElk
LCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAgICAgYmFja2Vu
ZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxsSWQsIEJhY2tl
bmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwogICAgICAgICBiYWNrZW5kRGlzcGF0
Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgIH07CiAKICAgICBpZCBzdWNjZXNzQ2Fs
bGJhY2sgPSBeewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVx
dWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7CisgICAgICAgIGF1dG8gcHJv
dG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBiYWNr
ZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocHJvdG9jb2xfY2FsbElkLCBXVEZNb3ZlKHBy
b3RvY29sX2pzb25NZXNzYWdlKSwgZmFsc2UpOwogICAgIH07CiAKICAgICBbbV9kZWxlZ2F0ZSBs
b2FkUmVzb3VyY2UyV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJh
Y2s6c3VjY2Vzc0NhbGxiYWNrXTsKIH0KIAotdm9pZCBPYmpDSW5zcGVjdG9yTmV0d29yazNCYWNr
ZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMyhsb25nIHJlcXVlc3RJZCkKK3ZvaWQgT2JqQ0lu
c3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTMobG9uZyBwcm90
b2NvbF9jYWxsSWQpCiB7CiAgICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6
QHNlbGVjdG9yKGxvYWRSZXNvdXJjZTNXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6
KV0pIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihy
ZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidOZXR3b3JrMy5s
b2FkUmVzb3VyY2UzJyB3YXMgbm90IGZvdW5kIl9zKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNo
ZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxsSWQsIEJhY2tlbmREaXNwYXRj
aGVyOjpNZXRob2ROb3RGb3VuZCwgIidOZXR3b3JrMy5sb2FkUmVzb3VyY2UzJyB3YXMgbm90IGZv
dW5kIl9zKTsKICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMo
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5T
U3RyaW5nICplcnJvcikgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90
b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJv
cik7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocHJv
dG9jb2xfY2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKICAg
ICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKICAgICB9Owog
CiAgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIo
KS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSwgZmFsc2Up
OworICAgICAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVh
dGUoKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHByb3RvY29s
X2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSksIGZhbHNlKTsKICAgICB9Owog
CiAgICAgW21fZGVsZWdhdGUgbG9hZFJlc291cmNlM1dpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2Fs
bGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107CiB9CiAKLXZvaWQgT2JqQ0lu
c3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTQobG9uZyByZXF1
ZXN0SWQpCit2b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2Fk
UmVzb3VyY2U0KGxvbmcgcHJvdG9jb2xfY2FsbElkKQogewogICAgIGlmICghW21fZGVsZWdhdGUg
cmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihsb2FkUmVzb3VyY2U0V2l0aEVycm9yQ2FsbGJh
Y2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJl
cG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90
Rm91bmQsICInTmV0d29yazMubG9hZFJlc291cmNlNCcgd2FzIG5vdCBmb3VuZCJfcyk7CisgICAg
ICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocHJvdG9jb2xfY2Fs
bElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29yazMubG9hZFJl
c291cmNlNCcgd2FzIG5vdCBmb3VuZCJfcyk7CiAgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCkt
PnNlbmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZCBl
cnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERpc3Bh
dGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVy
OjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBv
cnRQcm90b2NvbEVycm9yKHByb3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZl
ckVycm9yLCBlcnJvcik7CiAgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5n
RXJyb3JzKCk7CiAgICAgfTsKIAogICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF57Ci0gICAgICAg
IGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIEpTT046Ok9iamVj
dDo6Y3JlYXRlKCksIGZhbHNlKTsKKyAgICAgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9
IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNl
bmRSZXNwb25zZShwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJvdG9jb2xfanNvbk1lc3NhZ2Up
LCBmYWxzZSk7CiAgICAgfTsKIAogICAgIFttX2RlbGVnYXRlIGxvYWRSZXNvdXJjZTRXaXRoRXJy
b3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2td
OwogfQogCi12b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2Fk
UmVzb3VyY2U1KGxvbmcgcmVxdWVzdElkKQordm9pZCBPYmpDSW5zcGVjdG9yTmV0d29yazNCYWNr
ZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNShsb25nIHByb3RvY29sX2NhbGxJZCkKIHsKICAg
ICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IobG9hZFJlc291
cmNlNVdpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazopXSkgewotICAgICAgICBiYWNr
ZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERp
c3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdvcmszLmxvYWRSZXNvdXJjZTUnIHdhcyBu
b3QgZm91bmQiX3MpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2Nv
bEVycm9yKHByb3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5k
LCAiJ05ldHdvcmszLmxvYWRSZXNvdXJjZTUnIHdhcyBub3QgZm91bmQiX3MpOwogICAgICAgICBi
YWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogCiAgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7Ci0g
ICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElk
LCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAgICAgYmFja2Vu
ZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxsSWQsIEJhY2tl
bmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwogICAgICAgICBiYWNrZW5kRGlzcGF0
Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgIH07CiAKICAgICBpZCBzdWNjZXNzQ2Fs
bGJhY2sgPSBeewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVx
dWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7CisgICAgICAgIGF1dG8gcHJv
dG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBiYWNr
ZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocHJvdG9jb2xfY2FsbElkLCBXVEZNb3ZlKHBy
b3RvY29sX2pzb25NZXNzYWdlKSwgZmFsc2UpOwogICAgIH07CiAKICAgICBbbV9kZWxlZ2F0ZSBs
b2FkUmVzb3VyY2U1V2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJh
Y2s6c3VjY2Vzc0NhbGxiYWNrXTsKIH0KIAotdm9pZCBPYmpDSW5zcGVjdG9yTmV0d29yazNCYWNr
ZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNihsb25nIHJlcXVlc3RJZCkKK3ZvaWQgT2JqQ0lu
c3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTYobG9uZyBwcm90
b2NvbF9jYWxsSWQpCiB7CiAgICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6
QHNlbGVjdG9yKGxvYWRSZXNvdXJjZTZXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6
KV0pIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihy
ZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidOZXR3b3JrMy5s
b2FkUmVzb3VyY2U2JyB3YXMgbm90IGZvdW5kIl9zKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNo
ZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxsSWQsIEJhY2tlbmREaXNwYXRj
aGVyOjpNZXRob2ROb3RGb3VuZCwgIidOZXR3b3JrMy5sb2FkUmVzb3VyY2U2JyB3YXMgbm90IGZv
dW5kIl9zKTsKICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMo
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5T
U3RyaW5nICplcnJvcikgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90
b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJv
cik7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocHJv
dG9jb2xfY2FsbElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKICAg
ICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKICAgICB9Owog
CiAgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIo
KS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSwgZmFsc2Up
OworICAgICAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVh
dGUoKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHByb3RvY29s
X2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSksIGZhbHNlKTsKICAgICB9Owog
CiAgICAgW21fZGVsZWdhdGUgbG9hZFJlc291cmNlNldpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2Fs
bGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107CiB9CiAKLXZvaWQgT2JqQ0lu
c3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTcobG9uZyByZXF1
ZXN0SWQpCit2b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2Fk
UmVzb3VyY2U3KGxvbmcgcHJvdG9jb2xfY2FsbElkKQogewogICAgIGlmICghW21fZGVsZWdhdGUg
cmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihsb2FkUmVzb3VyY2U3V2l0aEVycm9yQ2FsbGJh
Y2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJl
cG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90
Rm91bmQsICInTmV0d29yazMubG9hZFJlc291cmNlNycgd2FzIG5vdCBmb3VuZCJfcyk7CisgICAg
ICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocHJvdG9jb2xfY2Fs
bElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29yazMubG9hZFJl
c291cmNlNycgd2FzIG5vdCBmb3VuZCJfcyk7CiAgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCkt
PnNlbmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZCBl
cnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERpc3Bh
dGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVy
OjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBv
cnRQcm90b2NvbEVycm9yKHByb3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZl
ckVycm9yLCBlcnJvcik7CiAgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5n
RXJyb3JzKCk7CiAgICAgfTsKIAogICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF57Ci0gICAgICAg
IGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIEpTT046Ok9iamVj
dDo6Y3JlYXRlKCksIGZhbHNlKTsKKyAgICAgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9
IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNl
bmRSZXNwb25zZShwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJvdG9jb2xfanNvbk1lc3NhZ2Up
LCBmYWxzZSk7CiAgICAgfTsKIAogICAgIFttX2RlbGVnYXRlIGxvYWRSZXNvdXJjZTdXaXRoRXJy
b3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2td
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2V4cGVjdGVkL2VudW0tdmFsdWVzLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2VudW0tdmFsdWVzLmpzb24tcmVz
dWx0CmluZGV4IDc5NTNjYmYyMTgzODhmODQ3NzcyYmQ0MTNkMTgwMjYyOWE3YjgwNWIuLjk5M2Y5
YWEyOGM3MTM2NmRkZWU3YWRhMWYxYzYxMGM2NzFjMWZiMjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9lbnVtLXZhbHVl
cy5qc29uLXJlc3VsdAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZXhwZWN0ZWQvZW51bS12YWx1ZXMuanNvbi1yZXN1bHQKQEAgLTMwLDE4ICszMCwx
OSBAQAogCiAvLyBUeXBlRG9tYWluCiBJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluKCJU
eXBlRG9tYWluIiwgbnVsbCk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRW51bSgiVHlwZURv
bWFpbi5UeXBlRG9tYWluRW51bSIsIHtTaGFyZWQ6ICJzaGFyZWQiLCBSZWQ6ICJyZWQiLCBHcmVl
bjogImdyZWVuIiwgQmx1ZTogImJsdWUifSk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRW51
bSgiVHlwZURvbWFpbi5FbnVtIiwge1NoYXJlZDogInNoYXJlZCIsIDE6ICIxIiwgMjogIjIifSk7
CiBJbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJUeXBlRG9tYWluIiwgbnVsbCk7CiAK
IC8vIENvbW1hbmREb21haW4KIEluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW4oIkNvbW1h
bmREb21haW4iLCBudWxsKTsKLUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJDb21t
YW5kRG9tYWluLmNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlIiwgbnVsbCwgW10sIFsicmV0dXJu
VmFsdWUiXSk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiQ29tbWFuZERvbWFp
bi5jb21tYW5kIiwgbnVsbCwgW3sibmFtZSI6ICJlbnVtUmVxdWlyZWQiLCAidHlwZSI6ICJzdHJp
bmcifSwgeyJuYW1lIjogImVudW1PcHRpb25hbCIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25h
bCI6IHRydWV9LCB7Im5hbWUiOiAicGFyYW1ldGVyUmVxdWlyZWQiLCAidHlwZSI6ICJzdHJpbmci
fSwgeyJuYW1lIjogInBhcmFtZXRlck9wdGlvbmFsIiwgInR5cGUiOiAic3RyaW5nIiwgIm9wdGlv
bmFsIjogdHJ1ZX1dLCBbImVudW1SZXF1aXJlZCIsICJlbnVtT3B0aW9uYWwiLCAicmV0dXJuUmVx
dWlyZWQiLCAicmV0dXJuT3B0aW9uYWwiXSk7CiBJbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9t
YWluKCJDb21tYW5kRG9tYWluIiwgbnVsbCk7CiAKIC8vIEV2ZW50RG9tYWluCiBJbnNwZWN0b3JC
YWNrZW5kLnJlZ2lzdGVyRG9tYWluKCJFdmVudERvbWFpbiIsIG51bGwpOwotSW5zcGVjdG9yQmFj
a2VuZC5yZWdpc3RlckVudW0oIkV2ZW50RG9tYWluLkV2ZW50V2l0aEVudW1QYXJhbWV0ZXJQYXJh
bWV0ZXIiLCB7U2hhcmVkOiAic2hhcmVkIiwgQmxhY2s6ICJibGFjayIsIFdoaXRlOiAid2hpdGUi
fSk7Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRXZlbnQoIkV2ZW50RG9tYWluLmV2ZW50V2l0
aEVudW1QYXJhbWV0ZXIiLCBudWxsLCBbInBhcmFtZXRlciJdKTsKK0luc3BlY3RvckJhY2tlbmQu
cmVnaXN0ZXJFbnVtKCJFdmVudERvbWFpbi5FdmVudFBhcmFtZXRlclJlcXVpcmVkIiwge1NoYXJl
ZDogInNoYXJlZCIsIFNoYXJlZFJlcXVpcmVkOiAic2hhcmVkUmVxdWlyZWQiLCBHcmV5OiAiZ3Jl
eSJ9KTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFbnVtKCJFdmVudERvbWFpbi5FdmVudFBh
cmFtZXRlck9wdGlvbmFsIiwge1NoYXJlZDogInNoYXJlZCIsIFNoYXJlZE9wdGlvbmFsOiAic2hh
cmVkT3B0aW9uYWwiLCBHcmVlbjogImdyZWVuIn0pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3Rl
ckV2ZW50KCJFdmVudERvbWFpbi5ldmVudCIsIG51bGwsIFsiZW51bVJlcXVpcmVkIiwgImVudW1P
cHRpb25hbCIsICJwYXJhbWV0ZXJSZXF1aXJlZCIsICJwYXJhbWV0ZXJPcHRpb25hbCJdKTsKIElu
c3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFdmVudERvbWFpbkRpc3BhdGNoZXIgPSBJbnNwZWN0b3JC
YWNrZW5kLnJlZ2lzdGVyRGlzcGF0Y2hlci5iaW5kKEluc3BlY3RvckJhY2tlbmQsICJFdmVudERv
bWFpbiIpOwogSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiRXZlbnREb21haW4iLCBu
dWxsKTsKICMjIyBFbmQgRmlsZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzLmluCkBAIC04
MCw3ICs4MSw3IEBAIEluc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIkV2ZW50RG9tYWlu
IiwgbnVsbCk7CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykK
IAotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29s
T2JqZWN0cy5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNw
YXRjaGVyLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0
ZXIuaD4KIApAQCAtOTgsNyArOTksNyBAQCBwcml2YXRlOgogY2xhc3MgQWx0ZXJuYXRlQ29tbWFu
ZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyIDogcHVibGljIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRj
aGVyIHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5BbHRlcm5hdGVDb21tYW5kRG9tYWluQmFja2Vu
ZERpc3BhdGNoZXIoKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgY29tbWFuZFdpdGhFbnVtUmV0dXJu
VmFsdWUobG9uZyBjYWxsSWQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY29tbWFuZChsb25nIHBy
b3RvY29sX2NhbGxJZCwgY29uc3QgU3RyaW5nJiBlbnVtUmVxdWlyZWQsIGNvbnN0IFN0cmluZyYg
b3B0X2VudW1PcHRpb25hbCwgY29uc3QgU3RyaW5nJiBwYXJhbWV0ZXJSZXF1aXJlZCwgY29uc3Qg
U3RyaW5nJiBvcHRfcGFyYW1ldGVyT3B0aW9uYWwpID0gMDsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IEluc3BlY3RvcgpAQCAtMTQwLDExICsxNDEsMTQgQEAgcHVibGljOgogCiAjaW5jbHVkZSAiVGVz
dFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8dHVwbGU+CisjaW5jbHVkZSA8d3RmL0V4cGVj
dGVkLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCi10eXBlZGVmIFN0cmluZyBFcnJv
clN0cmluZzsKKwogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMp
CiBjbGFzcyBBbHRlcm5hdGVDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXI7CkBAIC0xNTIs
MTQgKzE1Niw3IEBAIGNsYXNzIEFsdGVybmF0ZUNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hl
cjsKIAogY2xhc3MgQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7CiBwdWJs
aWM6Ci0gICAgLy8gTmFtZWQgYWZ0ZXIgcGFyYW1ldGVyICdyZXR1cm5WYWx1ZScgd2hpbGUgZ2Vu
ZXJhdGluZyBjb21tYW5kL2V2ZW50IGNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlLgotICAgIGVu
dW0gY2xhc3MgUmV0dXJuVmFsdWUgewotICAgICAgICBTaGFyZWQgPSAwLAotICAgICAgICBDeWFu
ID0gNiwKLSAgICAgICAgTWFnZW50YSA9IDcsCi0gICAgICAgIFllbGxvdyA9IDgsCi0gICAgfTsg
Ly8gZW51bSBjbGFzcyBSZXR1cm5WYWx1ZQotICAgIHZpcnR1YWwgdm9pZCBjb21tYW5kV2l0aEVu
dW1SZXR1cm5WYWx1ZShFcnJvclN0cmluZyYsIENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hl
ckhhbmRsZXI6OlJldHVyblZhbHVlKiBvdXRfcmV0dXJuVmFsdWUpID0gMDsKKyAgICB2aXJ0dWFs
IFByb3RvY29sOjpFcnJvclN0cmluZ09yPHN0ZDo6dHVwbGU8UHJvdG9jb2w6OlR5cGVEb21haW46
OkVudW0gLyogZW51bVJlcXVpcmVkICovLCBPcHRpb25hbDxQcm90b2NvbDo6VHlwZURvbWFpbjo6
RW51bT4gLyogb3B0X2VudW1PcHRpb25hbCAqLywgU3RyaW5nIC8qIHJldHVyblJlcXVpcmVkICov
LCBTdHJpbmcgLyogb3B0X3JldHVybk9wdGlvbmFsICovPj4gY29tbWFuZChQcm90b2NvbDo6VHlw
ZURvbWFpbjo6RW51bSBlbnVtUmVxdWlyZWQsIE9wdGlvbmFsPFByb3RvY29sOjpUeXBlRG9tYWlu
OjpFbnVtPiYmIG9wdF9lbnVtT3B0aW9uYWwsIGNvbnN0IFN0cmluZyYgcGFyYW1ldGVyUmVxdWly
ZWQsIGNvbnN0IFN0cmluZyYgb3B0X3BhcmFtZXRlck9wdGlvbmFsKSA9IDA7CiBwcm90ZWN0ZWQ6
CiAgICAgdmlydHVhbCB+Q29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpOwog
fTsKQEAgLTE2Nyw5ICsxNjQsOSBAQCBwcm90ZWN0ZWQ6CiBjbGFzcyBDb21tYW5kRG9tYWluQmFj
a2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNo
ZXIgewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8Q29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRj
aGVyPiBjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImLCBDb21tYW5kRG9tYWluQmFja2VuZERpc3Bh
dGNoZXJIYW5kbGVyKik7Ci0gICAgdm9pZCBkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3Qg
U3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkgZmluYWw7CisgICAg
dm9pZCBkaXNwYXRjaChsb25nIHByb3RvY29sX2NhbGxJZCwgY29uc3QgU3RyaW5nJiBwcm90b2Nv
bF9tZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfbWVzc2FnZSkgZmluYWw7CiBw
cml2YXRlOgotICAgIHZvaWQgY29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUobG9uZyByZXF1ZXN0
SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7CisgICAgdm9pZCBjb21tYW5k
KGxvbmcgcHJvdG9jbF9jYWxsSWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfcGFy
YW1ldGVycyk7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiBw
dWJsaWM6CiAgICAgdm9pZCBzZXRBbHRlcm5hdGVEaXNwYXRjaGVyKEFsdGVybmF0ZUNvbW1hbmRE
b21haW5CYWNrZW5kRGlzcGF0Y2hlciogYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeyBtX2FsdGVybmF0
ZURpc3BhdGNoZXIgPSBhbHRlcm5hdGVEaXNwYXRjaGVyOyB9CkBAIC0yMTgsOSArMjE1LDcgQEAg
cHJpdmF0ZToKICNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCiAKICNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0
Zi9KU09OVmFsdWVzLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVk
ZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVf
RElTUEFUQ0hFUlMpCiAjaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5o
IgpAQCAtMjQyLDQyICsyMzcsNjMgQEAgQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpD
b21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXIKICAgICBtX2Jh
Y2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4oIkNvbW1hbmREb21h
aW4iX3MsIHRoaXMpOwogfQogCi12b2lkIENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6
ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6
T2JqZWN0PiYmIG1lc3NhZ2UpCit2b2lkIENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6
ZGlzcGF0Y2gobG9uZyBwcm90b2NvbF9jYWxsSWQsIGNvbnN0IFN0cmluZyYgcHJvdG9jb2xfbWV0
aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX21lc3NhZ2UpCiB7CiAgICAgUmVmPENv
bW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7CiAKLSAgICBSZWZQ
dHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzOwotICAgIG1lc3NhZ2UtPmdldE9iamVjdCgicGFy
YW1zIl9zLCBwYXJhbWV0ZXJzKTsKKyAgICBhdXRvIHByb3RvY29sX3BhcmFtZXRlcnMgPSBwcm90
b2NvbF9tZXNzYWdlLT5nZXRPYmplY3QoInBhcmFtcyJfcyk7CiAKLSAgICBpZiAobWV0aG9kID09
ICJjb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZSIpIHsKLSAgICAgICAgY29tbWFuZFdpdGhFbnVt
UmV0dXJuVmFsdWUocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKKyAgICBpZiAocHJv
dG9jb2xfbWV0aG9kID09ICJjb21tYW5kIikgeworICAgICAgICBjb21tYW5kKHByb3RvY29sX2Nh
bGxJZCwgV1RGTW92ZShwcm90b2NvbF9wYXJhbWV0ZXJzKSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tl
bmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidDb21tYW5kRG9tYWluLiIgKyBtZXRob2Qg
KyAiJyB3YXMgbm90IGZvdW5kIik7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJv
dG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInQ29tbWFuZERv
bWFpbi4iICsgcHJvdG9jb2xfbWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOwogfQogCi12b2lk
IENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Y29tbWFuZFdpdGhFbnVtUmV0dXJuVmFs
dWUobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCit2b2lkIENvbW1hbmRE
b21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Y29tbWFuZChsb25nIHByb3RvY29sX2NhbGxJZCwgUmVm
UHRyPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9wYXJhbWV0ZXJzKQogeworICAgIGF1dG8gaW5f
ZW51bVJlcXVpcmVkX2pzb24gPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRTdHJpbmcocHJvdG9j
b2xfcGFyYW1ldGVycy5nZXQoKSwgImVudW1SZXF1aXJlZCJfcywgdHJ1ZSk7CisgICAgYXV0byBp
bl9vcHRfZW51bU9wdGlvbmFsX2pzb24gPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRTdHJpbmco
cHJvdG9jb2xfcGFyYW1ldGVycy5nZXQoKSwgImVudW1PcHRpb25hbCJfcywgZmFsc2UpOworICAg
IGF1dG8gaW5fcGFyYW1ldGVyUmVxdWlyZWQgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRTdHJp
bmcocHJvdG9jb2xfcGFyYW1ldGVycy5nZXQoKSwgInBhcmFtZXRlclJlcXVpcmVkIl9zLCB0cnVl
KTsKKyAgICBhdXRvIGluX29wdF9wYXJhbWV0ZXJPcHRpb25hbCA9IG1fYmFja2VuZERpc3BhdGNo
ZXItPmdldFN0cmluZyhwcm90b2NvbF9wYXJhbWV0ZXJzLmdldCgpLCAicGFyYW1ldGVyT3B0aW9u
YWwiX3MsIGZhbHNlKTsKKyAgICBpZiAobV9iYWNrZW5kRGlzcGF0Y2hlci0+aGFzUHJvdG9jb2xF
cnJvcnMoKSkgeworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVy
cm9yKEJhY2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCAiU29tZSBhcmd1bWVudHMgb2Yg
bWV0aG9kICdDb21tYW5kRG9tYWluLmNvbW1hbmQnIGNhbid0IGJlIHByb2Nlc3NlZCJfcyk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9E
SVNQQVRDSEVSUykKICAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAgIG1f
YWx0ZXJuYXRlRGlzcGF0Y2hlci0+Y29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUocmVxdWVzdElk
KTsKKyAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5jb21tYW5kKHByb3RvY29sX2NhbGxJ
ZCwgaW5fZW51bVJlcXVpcmVkX2pzb24sIGluX29wdF9lbnVtT3B0aW9uYWxfanNvbiwgaW5fcGFy
YW1ldGVyUmVxdWlyZWQsIGluX29wdF9wYXJhbWV0ZXJPcHRpb25hbCk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hF
UlMpCiAKLSAgICBFcnJvclN0cmluZyBlcnJvcjsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1
bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIENvbW1hbmREb21haW5CYWNrZW5kRGlz
cGF0Y2hlckhhbmRsZXI6OlJldHVyblZhbHVlIG91dF9yZXR1cm5WYWx1ZTsKLSAgICBtX2FnZW50
LT5jb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZShlcnJvciwgJm91dF9yZXR1cm5WYWx1ZSk7Cisg
ICAgYXV0byBpbl9lbnVtUmVxdWlyZWQgPSBQcm90b2NvbDo6VGVzdEhlbHBlcnM6OnBhcnNlRW51
bVZhbHVlRnJvbVN0cmluZzxQcm90b2NvbDo6VHlwZURvbWFpbjo6RW51bT4oaW5fZW51bVJlcXVp
cmVkX2pzb24pOworICAgIGlmICghaW5fZW51bVJlcXVpcmVkKSB7CisgICAgICAgIG1fYmFja2Vu
ZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZl
ckVycm9yLCBtYWtlU3RyaW5nKCJVbmtub3duIGVudW1SZXF1aXJlZDogIl9zLCBpbl9lbnVtUmVx
dWlyZWRfanNvbikpOworICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgaWYgKCFlcnJvci5s
ZW5ndGgoKSkKLSAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoInJldHVyblZhbHVlIl9zLCBJbnNw
ZWN0b3I6OlByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUob3V0X3Jl
dHVyblZhbHVlKSk7CisgICAgYXV0byBpbl9vcHRfZW51bU9wdGlvbmFsID0gUHJvdG9jb2w6OlRl
c3RIZWxwZXJzOjpwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8UHJvdG9jb2w6OlR5cGVEb21haW46
OkVudW0+KGluX29wdF9lbnVtT3B0aW9uYWxfanNvbik7CiAKLSAgICBpZiAoIWVycm9yLmxlbmd0
aCgpKQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElk
LCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERp
c3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVy
cm9yLCBXVEZNb3ZlKGVycm9yKSk7CisgICAgYXV0byByZXN1bHQgPSBtX2FnZW50LT5jb21tYW5k
KCppbl9lbnVtUmVxdWlyZWQsIFdURk1vdmUoaW5fb3B0X2VudW1PcHRpb25hbCksIGluX3BhcmFt
ZXRlclJlcXVpcmVkLCBpbl9vcHRfcGFyYW1ldGVyT3B0aW9uYWwpOworICAgIGlmICghcmVzdWx0
KSB7CisgICAgICAgIEFTU0VSVCghcmVzdWx0LmVycm9yKCkuaXNFbXB0eSgpKTsKKyAgICAgICAg
bV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hl
cjo6U2VydmVyRXJyb3IsIHJlc3VsdC5lcnJvcigpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGF1dG8gW291dF9lbnVtUmVxdWlyZWQsIG91dF9vcHRfZW51bU9wdGlvbmFsLCBvdXRf
cmV0dXJuUmVxdWlyZWQsIG91dF9vcHRfcmV0dXJuT3B0aW9uYWxdID0gV1RGTW92ZShyZXN1bHQu
dmFsdWUoKSk7CisKKyAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0
OjpjcmVhdGUoKTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJlbnVtUmVx
dWlyZWQiX3MsIFByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUob3V0
X2VudW1SZXF1aXJlZCkpOworICAgIGlmICghIW91dF9vcHRfZW51bU9wdGlvbmFsKQorICAgICAg
ICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJlbnVtT3B0aW9uYWwiX3MsIFByb3Rv
Y29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUoKm91dF9vcHRfZW51bU9wdGlv
bmFsKSk7CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygicmV0dXJuUmVxdWly
ZWQiX3MsIG91dF9yZXR1cm5SZXF1aXJlZCk7CisgICAgaWYgKCEhb3V0X29wdF9yZXR1cm5PcHRp
b25hbCkKKyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygicmV0dXJuT3B0
aW9uYWwiX3MsIG91dF9vcHRfcmV0dXJuT3B0aW9uYWwpOworICAgIG1fYmFja2VuZERpc3BhdGNo
ZXItPnNlbmRSZXNwb25zZShwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUocHJvdG9jb2xfanNvbk1l
c3NhZ2UpLCBmYWxzZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgpAQCAtMzE4LDYg
KzMzNCw3IEBAIHZvaWQgQ29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpjb21tYW5kV2l0
aEVudW1SZXR1cm5WYWx1ZShsb25nIHJlcXVlc3RJZCwKIAogI2luY2x1ZGUgIlRlc3RQcm90b2Nv
bE9iamVjdHMuaCIKICNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9P
cHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKQEAgLTMyOCwxMyArMzQ1LDE5IEBAIGNsYXNzIEV2ZW50RG9tYWluRnJvbnRl
bmREaXNwYXRjaGVyIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAg
ICBFdmVudERvbWFpbkZyb250ZW5kRGlzcGF0Y2hlcihGcm9udGVuZFJvdXRlciYgZnJvbnRlbmRS
b3V0ZXIpIDogbV9mcm9udGVuZFJvdXRlcihmcm9udGVuZFJvdXRlcikgeyB9Ci0gICAgICAgIC8v
IE5hbWVkIGFmdGVyIHBhcmFtZXRlciAncGFyYW1ldGVyJyB3aGlsZSBnZW5lcmF0aW5nIGNvbW1h
bmQvZXZlbnQgZXZlbnRXaXRoRW51bVBhcmFtZXRlci4KLSAgICAgICAgZW51bSBjbGFzcyBQYXJh
bWV0ZXIgeworICAgICAgICAvLyBOYW1lZCBhZnRlciBwYXJhbWV0ZXIgJ3BhcmFtZXRlclJlcXVp
cmVkJyB3aGlsZSBnZW5lcmF0aW5nIGNvbW1hbmQvZXZlbnQgZXZlbnQuCisgICAgICAgIGVudW0g
Y2xhc3MgUGFyYW1ldGVyUmVxdWlyZWQgewogICAgICAgICAgICAgU2hhcmVkID0gMCwKLSAgICAg
ICAgICAgIEJsYWNrID0gNCwKLSAgICAgICAgICAgIFdoaXRlID0gNSwKLSAgICAgICAgfTsgLy8g
ZW51bSBjbGFzcyBQYXJhbWV0ZXIKLSAgICB2b2lkIGV2ZW50V2l0aEVudW1QYXJhbWV0ZXIoUGFy
YW1ldGVyIHBhcmFtZXRlcik7CisgICAgICAgICAgICBTaGFyZWRSZXF1aXJlZCA9IDMsCisgICAg
ICAgICAgICBHcmV5ID0gNCwKKyAgICAgICAgfTsgLy8gZW51bSBjbGFzcyBQYXJhbWV0ZXJSZXF1
aXJlZAorICAgICAgICAvLyBOYW1lZCBhZnRlciBwYXJhbWV0ZXIgJ3BhcmFtZXRlck9wdGlvbmFs
JyB3aGlsZSBnZW5lcmF0aW5nIGNvbW1hbmQvZXZlbnQgZXZlbnQuCisgICAgICAgIGVudW0gY2xh
c3MgUGFyYW1ldGVyT3B0aW9uYWwgeworICAgICAgICAgICAgU2hhcmVkID0gMCwKKyAgICAgICAg
ICAgIFNoYXJlZE9wdGlvbmFsID0gNSwKKyAgICAgICAgICAgIEdyZWVuID0gNiwKKyAgICAgICAg
fTsgLy8gZW51bSBjbGFzcyBQYXJhbWV0ZXJPcHRpb25hbAorICAgIHZvaWQgZXZlbnQoUHJvdG9j
b2w6OlR5cGVEb21haW46OkVudW0gZW51bVJlcXVpcmVkLCBPcHRpb25hbDxQcm90b2NvbDo6VHlw
ZURvbWFpbjo6RW51bT4mJiBvcHRfZW51bU9wdGlvbmFsLCBjb25zdCBTdHJpbmcmIHBhcmFtZXRl
clJlcXVpcmVkLCBjb25zdCBTdHJpbmcmIG9wdF9wYXJhbWV0ZXJPcHRpb25hbCk7CiBwcml2YXRl
OgogICAgIEZyb250ZW5kUm91dGVyJiBtX2Zyb250ZW5kUm91dGVyOwogfTsKQEAgLTM3NiwxOSAr
Mzk5LDIzIEBAIHByaXZhdGU6CiAjaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIK
IAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0j
aW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAot
dm9pZCBFdmVudERvbWFpbkZyb250ZW5kRGlzcGF0Y2hlcjo6ZXZlbnRXaXRoRW51bVBhcmFtZXRl
cihQYXJhbWV0ZXIgcGFyYW1ldGVyKQordm9pZCBFdmVudERvbWFpbkZyb250ZW5kRGlzcGF0Y2hl
cjo6ZXZlbnQoUHJvdG9jb2w6OlR5cGVEb21haW46OkVudW0gZW51bVJlcXVpcmVkLCBPcHRpb25h
bDxQcm90b2NvbDo6VHlwZURvbWFpbjo6RW51bT4mJiBvcHRfZW51bU9wdGlvbmFsLCBjb25zdCBT
dHJpbmcmIHBhcmFtZXRlclJlcXVpcmVkLCBjb25zdCBTdHJpbmcmIG9wdF9wYXJhbWV0ZXJPcHRp
b25hbCkKIHsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVj
dDo6Y3JlYXRlKCk7Ci0gICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiRXZl
bnREb21haW4uZXZlbnRXaXRoRW51bVBhcmFtZXRlciJfcyk7Ci0gICAgUmVmPEpTT046Ok9iamVj
dD4gcGFyYW1zT2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBwYXJhbXNPYmpl
Y3QtPnNldFN0cmluZygicGFyYW1ldGVyIl9zLCBJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0SGVs
cGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUocGFyYW1ldGVyKSk7Ci0gICAganNvbk1lc3NhZ2Ut
PnNldE9iamVjdCgicGFyYW1zIl9zLCBXVEZNb3ZlKHBhcmFtc09iamVjdCkpOworICAgIGF1dG8g
cHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIHByb3Rv
Y29sX2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkV2ZW50RG9tYWluLmV2ZW50
Il9zKTsKKyAgICBhdXRvIHByb3RvY29sX3BhcmFtc09iamVjdCA9IEpTT046Ok9iamVjdDo6Y3Jl
YXRlKCk7CisgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoImVudW1SZXF1aXJl
ZCJfcywgUHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShlbnVtUmVx
dWlyZWQpKTsKKyAgICBpZiAoISFvcHRfZW51bU9wdGlvbmFsKQorICAgICAgICBwcm90b2NvbF9w
YXJhbXNPYmplY3QtPnNldFN0cmluZygiZW51bU9wdGlvbmFsIl9zLCBQcm90b2NvbDo6VGVzdEhl
bHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKCpvcHRfZW51bU9wdGlvbmFsKSk7CisgICAgcHJv
dG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInBhcmFtZXRlclJlcXVpcmVkIl9zLCBwYXJh
bWV0ZXJSZXF1aXJlZCk7CisgICAgaWYgKCEhb3B0X3BhcmFtZXRlck9wdGlvbmFsKQorICAgICAg
ICBwcm90b2NvbF9wYXJhbXNPYmplY3QtPnNldFN0cmluZygicGFyYW1ldGVyT3B0aW9uYWwiX3Ms
IG9wdF9wYXJhbWV0ZXJPcHRpb25hbCk7CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldE9i
amVjdCgicGFyYW1zIl9zLCBXVEZNb3ZlKHByb3RvY29sX3BhcmFtc09iamVjdCkpOwogCi0gICAg
bV9mcm9udGVuZFJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsK
KyAgICBtX2Zyb250ZW5kUm91dGVyLnNlbmRFdmVudChwcm90b2NvbF9qc29uTWVzc2FnZS0+dG9K
U09OU3RyaW5nKCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKQEAgLTQyOCw3ICs0
NTUsOSBAQCB2b2lkIEV2ZW50RG9tYWluRnJvbnRlbmREaXNwYXRjaGVyOjpldmVudFdpdGhFbnVt
UGFyYW1ldGVyKFBhcmFtZXRlciBwYXJhbWV0ZXIpCiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYv
QXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3Rm
L09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFj
ZSBJbnNwZWN0b3IgewogCkBAIC00NDAsNyArNDY5LDcgQEAgbmFtZXNwYWNlIFByb3RvY29sIHsK
IAogLy8gRm9yd2FyZCBkZWNsYXJhdGlvbnMuCiBuYW1lc3BhY2UgVHlwZURvbWFpbiB7Ci1lbnVt
IGNsYXNzIFR5cGVEb21haW5FbnVtOworZW51bSBjbGFzcyBFbnVtOwogfSAvLyBUeXBlRG9tYWlu
CiAvLyBFbmQgb2YgZm9yd2FyZCBkZWNsYXJhdGlvbnMuCiAKQEAgLTQ2MCwxMiArNDg5LDExIEBA
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFN0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShUIGVudW1W
YWx1ZSkKIAogbmFtZXNwYWNlIFR5cGVEb21haW4gewogCi1lbnVtIGNsYXNzIFR5cGVEb21haW5F
bnVtIHsKK2VudW0gY2xhc3MgRW51bSB7CiAgICAgU2hhcmVkID0gMCwKLSAgICBSZWQgPSAxLAot
ICAgIEdyZWVuID0gMiwKLSAgICBCbHVlID0gMywKLX07IC8vIGVudW0gY2xhc3MgVHlwZURvbWFp
bkVudW0KKyAgICAxID0gMSwKKyAgICAyID0gMiwKK307IC8vIGVudW0gY2xhc3MgRW51bQogCiB9
IC8vIFR5cGVEb21haW4KIApAQCAtNDc4LDcgKzUwNiw3IEBAIE9wdGlvbmFsPFByb3RvY29sRW51
bVR5cGU+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZyhjb25zdCBTdHJpbmcmKTsKIAogLy8gRW51
bXMgaW4gdGhlICdUeXBlRG9tYWluJyBEb21haW4KIHRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlR5cGVEb21haW46OlR5cGVEb21haW5FbnVtPiBwYXJzZUVudW1WYWx1
ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6VHlwZURvbWFpbjo6VHlwZURvbWFpbkVu
dW0+KGNvbnN0IFN0cmluZyYpOworT3B0aW9uYWw8UHJvdG9jb2w6OlR5cGVEb21haW46OkVudW0+
IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxQcm90b2NvbDo6VHlwZURvbWFpbjo6RW51bT4oY29u
c3QgU3RyaW5nJik7CiAKIH0gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCiAKQEAgLTQ5Miw3ICs1
MjAsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7CiAKIC8vIEhh
c2ggZGVjbGFyYXRpb25zIGluIHRoZSAnVHlwZURvbWFpbicgRG9tYWluCiB0ZW1wbGF0ZTw+Ci1z
dHJ1Y3QgRGVmYXVsdEhhc2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6VHlwZURvbWFpbjo6VHlwZURv
bWFpbkVudW0+IDogSW50SGFzaDxJbnNwZWN0b3I6OlByb3RvY29sOjpUeXBlRG9tYWluOjpUeXBl
RG9tYWluRW51bT4geyB9Oworc3RydWN0IERlZmF1bHRIYXNoPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlR5cGVEb21haW46OkVudW0+IDogSW50SGFzaDxJbnNwZWN0b3I6OlByb3RvY29sOjpUeXBlRG9t
YWluOjpFbnVtPiB7IH07CiAKIH0gLy8gbmFtZXNwYWNlIFdURgogIyMjIEVuZCBGaWxlOiBUZXN0
UHJvdG9jb2xPYmplY3RzLmgKQEAgLTUzMCw4ICs1NTgsNyBAQCBzdHJ1Y3QgRGVmYXVsdEhhc2g8
SW5zcGVjdG9yOjpQcm90b2NvbDo6VHlwZURvbWFpbjo6VHlwZURvbWFpbkVudW0+IDogSW50SGFz
aDxJbgogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMu
aCIKIAotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJp
bmcuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9y
IHsKIApAQCAtNTQxLDE0ICs1NjgsMTYgQEAgbmFtZXNwYWNlIFRlc3RIZWxwZXJzIHsKIAogc3Rh
dGljIGNvbnN0IGNoYXIqIGNvbnN0IGVudW1fY29uc3RhbnRfdmFsdWVzW10gPSB7CiAgICAgInNo
YXJlZCIsCi0gICAgInJlZCIsCisgICAgIjEiLAorICAgICIyIiwKKyAgICAic2hhcmVkUmVxdWly
ZWQiLAorICAgICJncmV5IiwKKyAgICAic2hhcmVkT3B0aW9uYWwiLAogICAgICJncmVlbiIsCi0g
ICAgImJsdWUiLAogICAgICJibGFjayIsCisgICAgInJlZCIsCiAgICAgIndoaXRlIiwKLSAgICAi
Y3lhbiIsCi0gICAgIm1hZ2VudGEiLAotICAgICJ5ZWxsb3ciLAorICAgICJibHVlIiwKIH07CiAK
IFN0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSkgewpAQCAtNTU4LDE3ICs1ODcs
MTYgQEAgU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKSB7CiAvLyBFbnVtcyBp
biB0aGUgJ1R5cGVEb21haW4nIERvbWFpbgogCiB0ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJbnNwZWN0
b3I6OlByb3RvY29sOjpUeXBlRG9tYWluOjpUeXBlRG9tYWluRW51bT4gcGFyc2VFbnVtVmFsdWVG
cm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlR5cGVEb21haW46OlR5cGVEb21haW5FbnVt
Pihjb25zdCBTdHJpbmcmIHByb3RvY29sU3RyaW5nKQorT3B0aW9uYWw8UHJvdG9jb2w6OlR5cGVE
b21haW46OkVudW0+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxQcm90b2NvbDo6VHlwZURvbWFp
bjo6RW51bT4oY29uc3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKIHsKICAgICBzdGF0aWMgY29u
c3Qgc2l6ZV90IGNvbnN0YW50VmFsdWVzW10gPSB7Ci0gICAgICAgIChzaXplX3QpSW5zcGVjdG9y
OjpQcm90b2NvbDo6VHlwZURvbWFpbjo6VHlwZURvbWFpbkVudW06OlNoYXJlZCwKLSAgICAgICAg
KHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpUeXBlRG9tYWluOjpUeXBlRG9tYWluRW51bTo6
UmVkLAotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlR5cGVEb21haW46OlR5
cGVEb21haW5FbnVtOjpHcmVlbiwKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29s
OjpUeXBlRG9tYWluOjpUeXBlRG9tYWluRW51bTo6Qmx1ZSwKKyAgICAgICAgKHNpemVfdClQcm90
b2NvbDo6VHlwZURvbWFpbjo6RW51bTo6U2hhcmVkLAorICAgICAgICAoc2l6ZV90KVByb3RvY29s
OjpUeXBlRG9tYWluOjpFbnVtOjoxLAorICAgICAgICAoc2l6ZV90KVByb3RvY29sOjpUeXBlRG9t
YWluOjpFbnVtOjoyLAogICAgIH07Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCA0OyArK2kp
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAzOyArK2kpCiAgICAgICAgIGlmIChwcm90b2Nv
bFN0cmluZyA9PSBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb25zdGFudFZhbHVlc1tpXV0pCi0gICAg
ICAgICAgICByZXR1cm4gKEluc3BlY3Rvcjo6UHJvdG9jb2w6OlR5cGVEb21haW46OlR5cGVEb21h
aW5FbnVtKWNvbnN0YW50VmFsdWVzW2ldOworICAgICAgICAgICAgcmV0dXJuIChQcm90b2NvbDo6
VHlwZURvbWFpbjo6RW51bSljb25zdGFudFZhbHVlc1tpXTsKIAogICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CiB9CkBAIC02MjUsNyArNjUzLDcgQEAgY2xhc3MgT2JqQ0luc3BlY3RvckNvbW1hbmRE
b21haW5CYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBBbHRlcm5hdGVDb21tYW4KICAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBPYmpDSW5zcGVjdG9yQ29t
bWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyKGlkPFRlc3RQcm90b2NvbENvbW1hbmREb21haW5E
b21haW5IYW5kbGVyPiBoYW5kbGVyKSB7IG1fZGVsZWdhdGUgPSBoYW5kbGVyOyB9Ci0gICAgdm9p
ZCBjb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZShsb25nIHJlcXVlc3RJZCkgZmluYWw7CisgICAg
dm9pZCBjb21tYW5kKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBjb25zdCBTdHJpbmcmIGVudW1SZXF1
aXJlZCwgY29uc3QgU3RyaW5nJiBvcHRfZW51bU9wdGlvbmFsLCBjb25zdCBTdHJpbmcmIHBhcmFt
ZXRlclJlcXVpcmVkLCBjb25zdCBTdHJpbmcmIG9wdF9wYXJhbWV0ZXJPcHRpb25hbCkgZmluYWw7
CiBwcml2YXRlOgogICAgIFJldGFpblB0cjxpZDxUZXN0UHJvdG9jb2xDb21tYW5kRG9tYWluRG9t
YWluSGFuZGxlcj4+IG1fZGVsZWdhdGU7CiB9OwpAQCAtNjczLDI2ICs3MDEsNDcgQEAgcHJpdmF0
ZToKIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKLXZvaWQgT2JqQ0luc3BlY3RvckNvbW1hbmRE
b21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Y29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUobG9uZyBy
ZXF1ZXN0SWQpCit2b2lkIE9iakNJbnNwZWN0b3JDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNo
ZXI6OmNvbW1hbmQobG9uZyBwcm90b2NvbF9jYWxsSWQsIGNvbnN0IFN0cmluZyYgaW5fZW51bVJl
cXVpcmVkLCBjb25zdCBTdHJpbmcmIGluX29wdF9lbnVtT3B0aW9uYWwsIGNvbnN0IFN0cmluZyYg
aW5fcGFyYW1ldGVyUmVxdWlyZWQsIGNvbnN0IFN0cmluZyYgaW5fb3B0X3BhcmFtZXRlck9wdGlv
bmFsKQogewotICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rv
cihjb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZVdpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxs
YmFjazopXSkgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVy
cm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0NvbW1h
bmREb21haW4uY29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUnIHdhcyBub3QgZm91bmQiX3MpOwor
ICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihjb21tYW5k
V2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOmVudW1SZXF1aXJlZDplbnVtT3B0aW9u
YWw6cGFyYW1ldGVyUmVxdWlyZWQ6cGFyYW1ldGVyT3B0aW9uYWw6KV0pIHsKKyAgICAgICAgYmFj
a2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9jYWxsSWQsIEJh
Y2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidDb21tYW5kRG9tYWluLmNvbW1hbmQn
IHdhcyBub3QgZm91bmQiX3MpOwogICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVu
ZGluZ0Vycm9ycygpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWQgZXJyb3JDYWxs
YmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCkt
PnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVy
RXJyb3IsIGVycm9yKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9j
b2xFcnJvcihwcm90b2NvbF9jYWxsSWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwg
ZXJyb3IpOwogICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygp
OwogICAgIH07CiAKLSAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeKFRlc3RQcm90b2NvbENvbW1h
bmREb21haW5Db21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZVJldHVyblZhbHVlIHJldHVyblZhbHVl
KSB7Ci0gICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdE9iamVjdCA9IEpTT046Ok9iamVj
dDo6Y3JlYXRlKCk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKCJyZXR1cm5WYWx1
ZSJfcywgdG9Qcm90b2NvbFN0cmluZyhyZXR1cm5WYWx1ZSkpOwotICAgICAgICBiYWNrZW5kRGlz
cGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdE9iamVjdCks
IGZhbHNlKTsKKyAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeKFRlc3RQcm90b2NvbFR5cGVEb21h
aW5FbnVtIG91dF9lbnVtUmVxdWlyZWQsIFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtICpvdXRf
b3B0X2VudW1PcHRpb25hbCwgVGVzdFByb3RvY29sQ29tbWFuZERvbWFpbihhbm9ueW1vdXMpIG91
dF9yZXR1cm5SZXF1aXJlZCwgVGVzdFByb3RvY29sQ29tbWFuZERvbWFpbihhbm9ueW1vdXMpICpv
dXRfb3B0X3JldHVybk9wdGlvbmFsKSB7CisgICAgICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3Nh
Z2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBwcm90b2NvbF9qc29uTWVzc2Fn
ZS0+c2V0U3RyaW5nKCJlbnVtUmVxdWlyZWQiX3MsIHRvUHJvdG9jb2xTdHJpbmcob3V0X2VudW1S
ZXF1aXJlZCkpOworICAgICAgICBpZiAoISFvdXRfb3B0X2VudW1PcHRpb25hbCkKKyAgICAgICAg
ICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoImVudW1PcHRpb25hbCJfcywgdG9Q
cm90b2NvbFN0cmluZygqb3V0X29wdF9lbnVtT3B0aW9uYWwpKTsKKyAgICAgICAgcHJvdG9jb2xf
anNvbk1lc3NhZ2UtPnNldFN0cmluZygicmV0dXJuUmVxdWlyZWQiX3MsIHRvUHJvdG9jb2xTdHJp
bmcob3V0X3JldHVyblJlcXVpcmVkKSk7CisgICAgICAgIGlmICghIW91dF9vcHRfcmV0dXJuT3B0
aW9uYWwpCisgICAgICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJyZXR1
cm5PcHRpb25hbCJfcywgdG9Qcm90b2NvbFN0cmluZygqb3V0X29wdF9yZXR1cm5PcHRpb25hbCkp
OworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocHJvdG9jb2xfY2Fs
bElkLCBXVEZNb3ZlKHByb3RvY29sX2pzb25NZXNzYWdlKSwgZmFsc2UpOwogICAgIH07CiAKLSAg
ICBbbV9kZWxlZ2F0ZSBjb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZVdpdGhFcnJvckNhbGxiYWNr
OmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107CisgICAgT3B0
aW9uYWw8VGVzdFByb3RvY29sVHlwZURvbWFpbkVudW0+IG9faW5fZW51bVJlcXVpcmVkID0gZnJv
bVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtPihpbl9lbnVtUmVxdWly
ZWQpOworICAgIGlmICghb19pbl9lbnVtUmVxdWlyZWQpIHsKKyAgICAgICAgYmFja2VuZERpc3Bh
dGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBh
cmFtcywgIlBhcmFtZXRlciAnZW51bVJlcXVpcmVkJyBvZiBtZXRob2QgJ0NvbW1hbmREb21haW4u
Y29tbWFuZCcgY2Fubm90IGJlIHByb2Nlc3NlZCJfcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgT3B0aW9uYWw8VGVzdFByb3RvY29sVHlwZURvbWFpbkVudW0+IG9faW5fb3B0X2VudW1P
cHRpb25hbDsKKyAgICBpZiAoISFpbl9vcHRfZW51bU9wdGlvbmFsKQorICAgICAgICBvX2luX29w
dF9lbnVtT3B0aW9uYWwgPSBmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sVHlwZURvbWFp
bkVudW0+KGluX29wdF9lbnVtT3B0aW9uYWwpOworICAgIE9wdGlvbmFsPFRlc3RQcm90b2NvbENv
bW1hbmREb21haW4oYW5vbnltb3VzKT4gb19pbl9wYXJhbWV0ZXJSZXF1aXJlZCA9IGZyb21Qcm90
b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xDb21tYW5kRG9tYWluKGFub255bW91cyk+KGluX3BhcmFt
ZXRlclJlcXVpcmVkKTsKKyAgICBpZiAoIW9faW5fcGFyYW1ldGVyUmVxdWlyZWQpIHsKKyAgICAg
ICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0
Y2hlcjo6SW52YWxpZFBhcmFtcywgIlBhcmFtZXRlciAncGFyYW1ldGVyUmVxdWlyZWQnIG9mIG1l
dGhvZCAnQ29tbWFuZERvbWFpbi5jb21tYW5kJyBjYW5ub3QgYmUgcHJvY2Vzc2VkIl9zKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBPcHRpb25hbDxUZXN0UHJvdG9jb2xDb21tYW5kRG9t
YWluKGFub255bW91cyk+IG9faW5fb3B0X3BhcmFtZXRlck9wdGlvbmFsOworICAgIGlmICghIWlu
X29wdF9wYXJhbWV0ZXJPcHRpb25hbCkKKyAgICAgICAgb19pbl9vcHRfcGFyYW1ldGVyT3B0aW9u
YWwgPSBmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sQ29tbWFuZERvbWFpbihhbm9ueW1v
dXMpPihpbl9vcHRfcGFyYW1ldGVyT3B0aW9uYWwpOworICAgIFttX2RlbGVnYXRlIGNvbW1hbmRX
aXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2Fs
bGJhY2sgZW51bVJlcXVpcmVkOm9faW5fZW51bVJlcXVpcmVkLnZhbHVlKCkgZW51bU9wdGlvbmFs
OighIWluX29wdF9lbnVtT3B0aW9uYWwgPyAmb19pbl9vcHRfZW51bU9wdGlvbmFsLnZhbHVlKCkg
OiBuaWwpIHBhcmFtZXRlclJlcXVpcmVkOm9faW5fcGFyYW1ldGVyUmVxdWlyZWQudmFsdWUoKSBw
YXJhbWV0ZXJPcHRpb25hbDooISFpbl9vcHRfcGFyYW1ldGVyT3B0aW9uYWwgPyAmb19pbl9vcHRf
cGFyYW1ldGVyT3B0aW9uYWwudmFsdWUoKSA6IG5pbCldOwogfQogCiB9IC8vIG5hbWVzcGFjZSBJ
bnNwZWN0b3IKQEAgLTg4NywxNiArOTM2LDIxIEBAIHVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7
CiAgICAgcmV0dXJuIHNlbGY7CiB9CiAKLS0gKHZvaWQpZXZlbnRXaXRoRW51bVBhcmFtZXRlcldp
dGhQYXJhbWV0ZXI6KFRlc3RQcm90b2NvbEV2ZW50RG9tYWluRXZlbnRXaXRoRW51bVBhcmFtZXRl
clBhcmFtZXRlcilwYXJhbWV0ZXIKKy0gKHZvaWQpZXZlbnRXaXRoRW51bVJlcXVpcmVkOihUZXN0
UHJvdG9jb2xUeXBlRG9tYWluRW51bSllbnVtUmVxdWlyZWQgZW51bU9wdGlvbmFsOihUZXN0UHJv
dG9jb2xUeXBlRG9tYWluRW51bSAqKWVudW1PcHRpb25hbCBwYXJhbWV0ZXJSZXF1aXJlZDooVGVz
dFByb3RvY29sRXZlbnREb21haW4oYW5vbnltb3VzKSlwYXJhbWV0ZXJSZXF1aXJlZCBwYXJhbWV0
ZXJPcHRpb25hbDooVGVzdFByb3RvY29sRXZlbnREb21haW4oYW5vbnltb3VzKSAqKXBhcmFtZXRl
ck9wdGlvbmFsCiB7CiAgICAgY29uc3QgRnJvbnRlbmRSb3V0ZXImIHJvdXRlciA9IF9jb250cm9s
bGVyLT5mcm9udGVuZFJvdXRlcigpOwogCi0gICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3Nh
Z2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmco
Im1ldGhvZCJfcywgIkV2ZW50RG9tYWluLmV2ZW50V2l0aEVudW1QYXJhbWV0ZXIiX3MpOwotICAg
IFJlZjxKU09OOjpPYmplY3Q+IHBhcmFtc09iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7
Ci0gICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInBhcmFtZXRlciJfcywgdG9Qcm90b2NvbFN0
cmluZyhwYXJhbWV0ZXIpKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiX3Ms
IFdURk1vdmUocGFyYW1zT2JqZWN0KSk7Ci0gICAgcm91dGVyLnNlbmRFdmVudChqc29uTWVzc2Fn
ZS0+dG9KU09OU3RyaW5nKCkpOworICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09O
OjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJpbmco
Im1ldGhvZCJfcywgIkV2ZW50RG9tYWluLmV2ZW50Il9zKTsKKyAgICBhdXRvIHByb3RvY29sX3Bh
cmFtc09iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgcHJvdG9jb2xfcGFyYW1z
T2JqZWN0LT5zZXRTdHJpbmcoImVudW1SZXF1aXJlZCJfcywgdG9Qcm90b2NvbFN0cmluZyhlbnVt
UmVxdWlyZWQpKTsKKyAgICBpZiAoZW51bU9wdGlvbmFsKQorICAgICAgICBwcm90b2NvbF9wYXJh
bXNPYmplY3QtPnNldFN0cmluZygiZW51bU9wdGlvbmFsIl9zLCB0b1Byb3RvY29sU3RyaW5nKCgq
ZW51bU9wdGlvbmFsKSkpOworICAgIHByb3RvY29sX3BhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJw
YXJhbWV0ZXJSZXF1aXJlZCJfcywgdG9Qcm90b2NvbFN0cmluZyhwYXJhbWV0ZXJSZXF1aXJlZCkp
OworICAgIGlmIChwYXJhbWV0ZXJPcHRpb25hbCkKKyAgICAgICAgcHJvdG9jb2xfcGFyYW1zT2Jq
ZWN0LT5zZXRTdHJpbmcoInBhcmFtZXRlck9wdGlvbmFsIl9zLCB0b1Byb3RvY29sU3RyaW5nKCgq
cGFyYW1ldGVyT3B0aW9uYWwpKSk7CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldE9iamVj
dCgicGFyYW1zIl9zLCBXVEZNb3ZlKHByb3RvY29sX3BhcmFtc09iamVjdCkpOworICAgIHJvdXRl
ci5zZW5kRXZlbnQocHJvdG9jb2xfanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKIH0KIAog
QGVuZApAQCAtOTQzLDIxICs5OTcsMjAgQEAgdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKIAog
dHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW0pIHsK
ICAgICBUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bVNoYXJlZCwKLSAgICBUZXN0UHJvdG9jb2xU
eXBlRG9tYWluRW51bVJlZCwKLSAgICBUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bUdyZWVuLAot
ICAgIFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtQmx1ZSwKKyAgICBUZXN0UHJvdG9jb2xUeXBl
RG9tYWluRW51bTEsCisgICAgVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW0yLAogfTsKIAogCiAK
IEBwcm90b2NvbCBUZXN0UHJvdG9jb2xDb21tYW5kRG9tYWluRG9tYWluSGFuZGxlciA8TlNPYmpl
Y3Q+CiBAb3B0aW9uYWwKLS0gKHZvaWQpY29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWVXaXRoRXJy
b3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vz
c0NhbGxiYWNrOih2b2lkKF4pKFRlc3RQcm90b2NvbENvbW1hbmREb21haW5Db21tYW5kV2l0aEVu
dW1SZXR1cm5WYWx1ZVJldHVyblZhbHVlIHJldHVyblZhbHVlKSlzdWNjZXNzQ2FsbGJhY2s7Cist
ICh2b2lkKWNvbW1hbmRXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3Ip
KWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKFRlc3RQcm90b2NvbFR5cGVE
b21haW5FbnVtIGVudW1SZXF1aXJlZCwgVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW0gKmVudW1P
cHRpb25hbCwgVGVzdFByb3RvY29sQ29tbWFuZERvbWFpbihhbm9ueW1vdXMpIHJldHVyblJlcXVp
cmVkLCBUZXN0UHJvdG9jb2xDb21tYW5kRG9tYWluKGFub255bW91cykgKnJldHVybk9wdGlvbmFs
KSlzdWNjZXNzQ2FsbGJhY2sgZW51bVJlcXVpcmVkOihUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51
bSllbnVtUmVxdWlyZWQgZW51bU9wdGlvbmFsOihUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bSAq
KWVudW1PcHRpb25hbCBwYXJhbWV0ZXJSZXF1aXJlZDooVGVzdFByb3RvY29sQ29tbWFuZERvbWFp
bihhbm9ueW1vdXMpKXBhcmFtZXRlclJlcXVpcmVkIHBhcmFtZXRlck9wdGlvbmFsOihUZXN0UHJv
dG9jb2xDb21tYW5kRG9tYWluKGFub255bW91cykgKilwYXJhbWV0ZXJPcHRpb25hbDsKIEBlbmQK
IAogX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSAoImRlZmF1bHQiKSkpCiBAaW50ZXJmYWNlIFRl
c3RQcm90b2NvbEV2ZW50RG9tYWluRG9tYWluRXZlbnREaXNwYXRjaGVyIDogTlNPYmplY3QKLS0g
KHZvaWQpZXZlbnRXaXRoRW51bVBhcmFtZXRlcldpdGhQYXJhbWV0ZXI6KFRlc3RQcm90b2NvbEV2
ZW50RG9tYWluRXZlbnRXaXRoRW51bVBhcmFtZXRlclBhcmFtZXRlcilwYXJhbWV0ZXI7CistICh2
b2lkKWV2ZW50V2l0aEVudW1SZXF1aXJlZDooVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW0pZW51
bVJlcXVpcmVkIGVudW1PcHRpb25hbDooVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW0gKillbnVt
T3B0aW9uYWwgcGFyYW1ldGVyUmVxdWlyZWQ6KFRlc3RQcm90b2NvbEV2ZW50RG9tYWluKGFub255
bW91cykpcGFyYW1ldGVyUmVxdWlyZWQgcGFyYW1ldGVyT3B0aW9uYWw6KFRlc3RQcm90b2NvbEV2
ZW50RG9tYWluKGFub255bW91cykgKilwYXJhbWV0ZXJPcHRpb25hbDsKIEBlbmQKIAogCkBAIC0x
MDUwLDEyICsxMTAzLDEwIEBAIGlubGluZSBTdHJpbmcgdG9Qcm90b2NvbFN0cmluZyhUZXN0UHJv
dG9jb2xUeXBlRG9tYWluRW51bSB2YWx1ZSkKICAgICBzd2l0Y2godmFsdWUpIHsKICAgICBjYXNl
IFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtU2hhcmVkOgogICAgICAgICByZXR1cm4gInNoYXJl
ZCJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtUmVkOgotICAgICAgICBy
ZXR1cm4gInJlZCJfczsKLSAgICBjYXNlIFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtR3JlZW46
Ci0gICAgICAgIHJldHVybiAiZ3JlZW4iX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xUeXBlRG9t
YWluRW51bUJsdWU6Ci0gICAgICAgIHJldHVybiAiYmx1ZSJfczsKKyAgICBjYXNlIFRlc3RQcm90
b2NvbFR5cGVEb21haW5FbnVtMToKKyAgICAgICAgcmV0dXJuICIxIl9zOworICAgIGNhc2UgVGVz
dFByb3RvY29sVHlwZURvbWFpbkVudW0yOgorICAgICAgICByZXR1cm4gIjIiX3M7CiAgICAgfQog
fQogCkBAIC0xMDY0LDEyICsxMTE1LDEwIEBAIGlubGluZSBPcHRpb25hbDxUZXN0UHJvdG9jb2xU
eXBlRG9tYWluRW51bT4gZnJvbVByb3RvY29sU3RyaW5nKGNvbnN0IFN0cmluZyYgdmFsCiB7CiAg
ICAgaWYgKHZhbHVlID09ICJzaGFyZWQiKQogICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sVHlw
ZURvbWFpbkVudW1TaGFyZWQ7Ci0gICAgaWYgKHZhbHVlID09ICJyZWQiKQotICAgICAgICByZXR1
cm4gVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW1SZWQ7Ci0gICAgaWYgKHZhbHVlID09ICJncmVl
biIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bUdyZWVuOwotICAg
IGlmICh2YWx1ZSA9PSAiYmx1ZSIpCi0gICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xUeXBlRG9t
YWluRW51bUJsdWU7CisgICAgaWYgKHZhbHVlID09ICIxIikKKyAgICAgICAgcmV0dXJuIFRlc3RQ
cm90b2NvbFR5cGVEb21haW5FbnVtMTsKKyAgICBpZiAodmFsdWUgPT0gIjIiKQorICAgICAgICBy
ZXR1cm4gVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW0yOwogICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CiB9CiAKQEAgLTExMTcsMTcgKzExNjYsMTcgQEAgdXNpbmcgbmFtZXNwYWNlIEluc3BlY3Rv
cjsKIAogQGludGVyZmFjZSBUZXN0UHJvdG9jb2xUeXBlQ29udmVyc2lvbnMgKFR5cGVEb21haW5E
b21haW4pCiAKLSsgKHZvaWQpX3BhcnNlVHlwZURvbWFpbkVudW06KE5TTnVtYmVyICoqKW91dFZh
bHVlIGZyb21QYXlsb2FkOihpZClwYXlsb2FkOworKyAodm9pZClfcGFyc2VFbnVtOihOU051bWJl
ciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKIAogQGVuZAogCiBAaW1wbGVt
ZW50YXRpb24gVGVzdFByb3RvY29sVHlwZUNvbnZlcnNpb25zIChUeXBlRG9tYWluRG9tYWluKQog
Ci0rICh2b2lkKV9wYXJzZVR5cGVEb21haW5FbnVtOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9t
UGF5bG9hZDooaWQpcGF5bG9hZAorKyAodm9pZClfcGFyc2VFbnVtOihOU051bWJlciAqKilvdXRW
YWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZAogewogICAgIFRIUk9XX0VYQ0VQVElPTl9GT1Jf
QkFEX1RZUEUocGF5bG9hZCwgW05TU3RyaW5nIGNsYXNzXSk7CiAgICAgT3B0aW9uYWw8VGVzdFBy
b3RvY29sVHlwZURvbWFpbkVudW0+IHJlc3VsdCA9IEluc3BlY3Rvcjo6ZnJvbVByb3RvY29sU3Ry
aW5nPFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtPihwYXlsb2FkKTsKLSAgICBUSFJPV19FWENF
UFRJT05fRk9SX0JBRF9FTlVNX1ZBTFVFKHJlc3VsdCwgQCJUeXBlRG9tYWluRW51bSIpOworICAg
IFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX0VOVU1fVkFMVUUocmVzdWx0LCBAIkVudW0iKTsKICAg
ICAqb3V0VmFsdWUgPSBAKHJlc3VsdC52YWx1ZSgpKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2V2ZW50LXRh
cmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24tcmVzdWx0IGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2V2ZW50
LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24tcmVzdWx0Cmlu
ZGV4IGUyZWQ5Zjg4OTRjZTc3NmIyNzJkNjExM2U1MzZjYWE3NDZlYmNiODUuLmJlOTRiMzU5NDAw
MzJiM2U5YTMzNmQ1NDEzNDQ3N2I5NjVjZDNhNTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9ldmVudC10YXJnZXRUeXBl
LW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uLXJlc3VsdAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZXZlbnQtdGFy
Z2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbi1yZXN1bHQKQEAgLTcw
LDcgKzcwLDcgQEAgSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiRG9tYWluIiwgWyJw
YWdlIl0pOwogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAK
LSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9i
amVjdHMuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlci5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVy
Lmg+CiAKQEAgLTg4LDcgKzg4LDcgQEAgcHJpdmF0ZToKIGNsYXNzIEFsdGVybmF0ZURvbWFpbkJh
Y2tlbmREaXNwYXRjaGVyIDogcHVibGljIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKIHB1
YmxpYzoKICAgICB2aXJ0dWFsIH5BbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlcigpIHsg
fQotICAgIHZpcnR1YWwgdm9pZCBDb21tYW5kKGxvbmcgY2FsbElkKSA9IDA7CisgICAgdmlydHVh
bCB2b2lkIENvbW1hbmQobG9uZyBwcm90b2NvbF9jYWxsSWQpID0gMDsKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgpAQCAtMTMwLDExICsxMzAsMTQgQEAgcHVibGljOgogCiAjaW5jbHVk
ZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8dHVwbGU+CisjaW5jbHVkZSA8d3Rm
L0V4cGVjdGVkLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCi10eXBlZGVmIFN0cmlu
ZyBFcnJvclN0cmluZzsKKwogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFU
Q0hFUlMpCiBjbGFzcyBBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjsKQEAgLTE0Miw3
ICsxNDUsNyBAQCBjbGFzcyBBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjsKIAogY2xh
c3MgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKIHB1YmxpYzoKLSAgICB2aXJ0dWFs
IHZvaWQgQ29tbWFuZChFcnJvclN0cmluZyYpID0gMDsKKyAgICB2aXJ0dWFsIFByb3RvY29sOjpF
cnJvclN0cmluZ09yPHZvaWQ+IENvbW1hbmQoKSA9IDA7CiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVh
bCB+RG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKCk7CiB9OwpAQCAtMTUwLDkgKzE1Myw5
IEBAIHByb3RlY3RlZDoKIGNsYXNzIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVi
bGljIFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIHsKIHB1YmxpYzoKICAgICBzdGF0aWMg
UmVmPERvbWFpbkJhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImLCBE
b21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsKLSAgICB2b2lkIGRpc3BhdGNoKGxvbmcg
cmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNz
YWdlKSBmaW5hbDsKKyAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcHJvdG9jb2xfY2FsbElkLCBjb25z
dCBTdHJpbmcmIHByb3RvY29sX21ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9t
ZXNzYWdlKSBmaW5hbDsKIHByaXZhdGU6Ci0gICAgdm9pZCBDb21tYW5kKGxvbmcgcmVxdWVzdElk
LCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOworICAgIHZvaWQgQ29tbWFuZChs
b25nIHByb3RvY2xfY2FsbElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX3BhcmFt
ZXRlcnMpOwogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogcHVi
bGljOgogICAgIHZvaWQgc2V0QWx0ZXJuYXRlRGlzcGF0Y2hlcihBbHRlcm5hdGVEb21haW5CYWNr
ZW5kRGlzcGF0Y2hlciogYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeyBtX2FsdGVybmF0ZURpc3BhdGNo
ZXIgPSBhbHRlcm5hdGVEaXNwYXRjaGVyOyB9CkBAIC0yMDEsOSArMjA0LDcgQEAgcHJpdmF0ZToK
ICNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCiAKICNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi9KU09OVmFs
dWVzLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3Rl
eHQvQ1N0cmluZy5oPgogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hF
UlMpCiAjaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgpAQCAtMjI1
LDM4ICsyMjYsMzggQEAgRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkRvbWFpbkJhY2tlbmREaXNw
YXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGEKICAgICBtX2JhY2tlbmREaXNw
YXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4oIkRvbWFpbiJfcywgdGhpcyk7CiB9
CiAKLXZvaWQgRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElk
LCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKQordm9p
ZCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyBwcm90b2NvbF9jYWxsSWQs
IGNvbnN0IFN0cmluZyYgcHJvdG9jb2xfbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIHByb3Rv
Y29sX21lc3NhZ2UpCiB7CiAgICAgUmVmPERvbWFpbkJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0
KCp0aGlzKTsKIAotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnM7Ci0gICAgbWVz
c2FnZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3MsIHBhcmFtZXRlcnMpOworICAgIGF1dG8gcHJvdG9j
b2xfcGFyYW1ldGVycyA9IHByb3RvY29sX21lc3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9zKTsK
IAotICAgIGlmIChtZXRob2QgPT0gIkNvbW1hbmQiKSB7Ci0gICAgICAgIENvbW1hbmQocmVxdWVz
dElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKKyAgICBpZiAocHJvdG9jb2xfbWV0aG9kID09ICJD
b21tYW5kIikgeworICAgICAgICBDb21tYW5kKHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90
b2NvbF9wYXJhbWV0ZXJzKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBtX2JhY2tl
bmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRo
b2ROb3RGb3VuZCwgIidEb21haW4uIiArIG1ldGhvZCArICInIHdhcyBub3QgZm91bmQiKTsKKyAg
ICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRj
aGVyOjpNZXRob2ROb3RGb3VuZCwgIidEb21haW4uIiArIHByb3RvY29sX21ldGhvZCArICInIHdh
cyBub3QgZm91bmQiKTsKIH0KIAotdm9pZCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Q29tbWFu
ZChsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikKK3ZvaWQgRG9tYWluQmFj
a2VuZERpc3BhdGNoZXI6OkNvbW1hbmQobG9uZyBwcm90b2NvbF9jYWxsSWQsIFJlZlB0cjxKU09O
OjpPYmplY3Q+JiYpCiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hF
UlMpCiAgICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0
ZURpc3BhdGNoZXItPkNvbW1hbmQocmVxdWVzdElkKTsKKyAgICAgICAgbV9hbHRlcm5hdGVEaXNw
YXRjaGVyLT5Db21tYW5kKHByb3RvY29sX2NhbGxJZCk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAKLSAg
ICBFcnJvclN0cmluZyBlcnJvcjsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09O
OjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIG1fYWdlbnQtPkNvbW1hbmQoZXJyb3IpOworICAgIGF1
dG8gcmVzdWx0ID0gbV9hZ2VudC0+Q29tbWFuZCgpOworICAgIGlmICghcmVzdWx0KSB7CisgICAg
ICAgIEFTU0VSVCghcmVzdWx0LmVycm9yKCkuaXNFbXB0eSgpKTsKKyAgICAgICAgbV9iYWNrZW5k
RGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVy
RXJyb3IsIHJlc3VsdC5lcnJvcigpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIGlm
ICghZXJyb3IubGVuZ3RoKCkpCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNw
b25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2UpOwotICAgIGVsc2UKLSAgICAg
ICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0
Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKKyAgICBhdXRvIHByb3RvY29sX2pz
b25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBtX2JhY2tlbmREaXNwYXRj
aGVyLT5zZW5kUmVzcG9uc2UocHJvdG9jb2xfY2FsbElkLCBXVEZNb3ZlKHByb3RvY29sX2pzb25N
ZXNzYWdlKSwgZmFsc2UpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKQEAgLTI5Nyw2
ICsyOTgsNyBAQCB2b2lkIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpDb21tYW5kKGxvbmcgcmVx
dWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQogCiAjaW5jbHVkZSAiVGVzdFByb3RvY29s
T2JqZWN0cy5oIgogI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL09w
dGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJ
bnNwZWN0b3IgewpAQCAtMzQ5LDE2ICszNTEsMTUgQEAgcHJpdmF0ZToKICNpbmNsdWRlICJUZXN0
RnJvbnRlbmREaXNwYXRjaGVycy5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKIG5h
bWVzcGFjZSBJbnNwZWN0b3IgewogCiB2b2lkIERvbWFpbkZyb250ZW5kRGlzcGF0Y2hlcjo6RXZl
bnQoKQogewotICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0
OjpjcmVhdGUoKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJEb21h
aW4uRXZlbnQiX3MpOworICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmpl
Y3Q6OmNyZWF0ZSgpOworICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhv
ZCJfcywgIkRvbWFpbi5FdmVudCJfcyk7CiAKLSAgICBtX2Zyb250ZW5kUm91dGVyLnNlbmRFdmVu
dChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOworICAgIG1fZnJvbnRlbmRSb3V0ZXIuc2Vu
ZEV2ZW50KHByb3RvY29sX2pzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgpAQCAtMzk4LDcgKzM5OSw5IEBAIHZvaWQgRG9tYWluRnJvbnRl
bmREaXNwYXRjaGVyOjpFdmVudCgpCiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9u
cy5oPgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFs
Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0
b3IgewogCkBAIC00NTIsOCArNDU1LDcgQEAgbmFtZXNwYWNlIFByb3RvY29sIHsKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAKLSNpbmNsdWRl
IDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVk
ZSA8d3RmL0Fzc2VydGlvbnMuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKQEAgLTUwOSw3
ICs1MTEsNyBAQCBjbGFzcyBPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXIgZmlu
YWwgOiBwdWJsaWMgQWx0ZXJuYXRlRG9tYWluQmFja2VuZAogICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOwogcHVibGljOgogICAgIE9iakNJbnNwZWN0b3JEb21haW5CYWNrZW5kRGlzcGF0Y2hl
cihpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPiBoYW5kbGVyKSB7IG1fZGVsZWdh
dGUgPSBoYW5kbGVyOyB9Ci0gICAgdm9pZCBDb21tYW5kKGxvbmcgcmVxdWVzdElkKSBmaW5hbDsK
KyAgICB2b2lkIENvbW1hbmQobG9uZyBwcm90b2NvbF9jYWxsSWQpIGZpbmFsOwogcHJpdmF0ZToK
ICAgICBSZXRhaW5QdHI8aWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4+IG1fZGVs
ZWdhdGU7CiB9OwpAQCAtNTU3LDIxICs1NTksMjIgQEAgcHJpdmF0ZToKIAogbmFtZXNwYWNlIElu
c3BlY3RvciB7CiAKLXZvaWQgT2JqQ0luc3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpD
b21tYW5kKGxvbmcgcmVxdWVzdElkKQordm9pZCBPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERp
c3BhdGNoZXI6OkNvbW1hbmQobG9uZyBwcm90b2NvbF9jYWxsSWQpCiB7CiAgICAgaWYgKCFbbV9k
ZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKENvbW1hbmRXaXRoRXJyb3JDYWxs
YmFjazpzdWNjZXNzQ2FsbGJhY2s6KV0pIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+
cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2RO
b3RGb3VuZCwgIidEb21haW4uQ29tbWFuZCcgd2FzIG5vdCBmb3VuZCJfcyk7CisgICAgICAgIGJh
Y2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocHJvdG9jb2xfY2FsbElkLCBC
YWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRG9tYWluLkNvbW1hbmQnIHdhcyBu
b3QgZm91bmQiX3MpOwogICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vy
cm9ycygpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWQgZXJyb3JDYWxsYmFjayA9
IF4oTlNTdHJpbmcgKmVycm9yKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9y
dFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3Is
IGVycm9yKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJv
cihwcm90b2NvbF9jYWxsSWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3Ip
OwogICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAg
IH07CiAKICAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeewotICAgICAgICBiYWNrZW5kRGlzcGF0
Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBm
YWxzZSk7CisgICAgICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6
OmNyZWF0ZSgpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocHJv
dG9jb2xfY2FsbElkLCBXVEZNb3ZlKHByb3RvY29sX2pzb25NZXNzYWdlKSwgZmFsc2UpOwogICAg
IH07CiAKICAgICBbbV9kZWxlZ2F0ZSBDb21tYW5kV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxs
YmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsKQEAgLTc3Myw5ICs3NzYsOSBA
QCB1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwogewogICAgIGNvbnN0IEZyb250ZW5kUm91dGVy
JiByb3V0ZXIgPSBfY29udHJvbGxlci0+ZnJvbnRlbmRSb3V0ZXIoKTsKIAotICAgIFJlZjxKU09O
OjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBqc29u
TWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJEb21haW4uRXZlbnQiX3MpOwotICAgIHJv
dXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKKyAgICBhdXRvIHBy
b3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBwcm90b2Nv
bF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJEb21haW4uRXZlbnQiX3MpOwor
ICAgIHJvdXRlci5zZW5kRXZlbnQocHJvdG9jb2xfanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygp
KTsKIH0KIAogQGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2V2ZW50cy13aXRoLW9wdGlvbmFsLXBhcmFtZXRlcnMu
anNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZXhwZWN0ZWQvZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1ldGVycy5qc29uLXJlc3VsdApp
bmRleCA5MGUxNGU4YzdiYjRmMDUxNTEzY2JkN2MzYzZkYzdiOTZmY2MxYTc0Li44NDdiNDkzZjcx
YzU3ZTQyNzNkODQ5NjJiYWU5ZjZjOTIwZmRjOWRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZXZlbnRzLXdpdGgtb3B0
aW9uYWwtcGFyYW1ldGVycy5qc29uLXJlc3VsdAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFy
YW1ldGVycy5qc29uLXJlc3VsdApAQCAtNzAsNyArNzAsNyBAQCBJbnNwZWN0b3JCYWNrZW5kLmFj
dGl2YXRlRG9tYWluKCJEYXRhYmFzZSIsIG51bGwpOwogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9B
TFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgor
I2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CiAKQEAgLTEyNiwxMSArMTI2LDE0IEBAIHByaXZh
dGU6CiAKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx0dXBsZT4K
KyNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAK
LXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCiAKIAogCkBAIC0xNzEsOSArMTc0LDcgQEAg
dHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiAjaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRj
aGVycy5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0
ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRl
c3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogI2lmIEVOQUJMRShJ
TlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVC
YWNrZW5kRGlzcGF0Y2hlcnMuaCIKQEAgLTIyMSw2ICsyMjIsNyBAQCBuYW1lc3BhY2UgSW5zcGVj
dG9yIHsKIAogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDx3dGYv
SlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKQEAgLTIzMSw4ICsyMzMs
OCBAQCBjbGFzcyBEYXRhYmFzZUZyb250ZW5kRGlzcGF0Y2hlciB7CiAgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgRGF0YWJhc2VGcm9udGVuZERpc3BhdGNoZXIoRnJv
bnRlbmRSb3V0ZXImIGZyb250ZW5kUm91dGVyKSA6IG1fZnJvbnRlbmRSb3V0ZXIoZnJvbnRlbmRS
b3V0ZXIpIHsgfQotICAgIHZvaWQgZGlkRXhlY3V0ZU9wdGlvbmFsUGFyYW1ldGVycyhSZWZQdHI8
SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiBjb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nKiBub3Rlcywg
Y29uc3QgZG91YmxlKiB0aW1lc3RhbXAsIFJlZlB0cjxKU09OOjpPYmplY3Q+IHZhbHVlcywgUmVm
UHRyPEpTT046OlZhbHVlPiBwYXlsb2FkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0
YWJhc2U6OkVycm9yPiBzcWxFcnJvciwgY29uc3QgU3RyaW5nKiBzY3JlZW5Db2xvciwgUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+IGFsdGVybmF0ZUNvbG9y
cywgY29uc3QgU3RyaW5nKiBwcmludENvbG9yKTsKLSAgICB2b2lkIGRpZEV4ZWN1dGVOb09wdGlv
bmFsUGFyYW1ldGVycyhSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiBjb2x1bW5OYW1lcywg
Y29uc3QgU3RyaW5nJiBub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgUmVmUHRyPEpTT046Ok9iamVj
dD4gdmFsdWVzLCBSZWZQdHI8SlNPTjo6VmFsdWU+IHBheWxvYWQsIFJlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IHNxbEVycm9yLCBjb25zdCBTdHJpbmcmIHNjcmVl
bkNvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4g
YWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcmIHByaW50Q29sb3IpOworICAgIHZvaWQgZGlk
RXhlY3V0ZU9wdGlvbmFsUGFyYW1ldGVycyhSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiYm
IG9wdF9jb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBvcHRfbm90ZXMsIE9wdGlvbmFsPGRvdWJs
ZT4mJiBvcHRfdGltZXN0YW1wLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIG9wdF92YWx1ZXMsIFJl
ZlB0cjxKU09OOjpWYWx1ZT4mJiBvcHRfcGF5bG9hZCwgUmVmUHRyPFByb3RvY29sOjpEYXRhYmFz
ZTo6RXJyb3I+JiYgb3B0X3NxbEVycm9yLCBjb25zdCBTdHJpbmcmIG9wdF9zY3JlZW5Db2xvciwg
UmVmUHRyPFByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiYmIG9wdF9hbHRlcm5hdGVDb2xv
cnMsIGNvbnN0IFN0cmluZyYgb3B0X3ByaW50Q29sb3IpOworICAgIHZvaWQgZGlkRXhlY3V0ZU5v
T3B0aW9uYWxQYXJhbWV0ZXJzKFJlZjxKU09OOjpBcnJheU9mPFN0cmluZz4+JiYgY29sdW1uTmFt
ZXMsIGNvbnN0IFN0cmluZyYgbm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIFJlZjxKU09OOjpPYmpl
Y3Q+JiYgdmFsdWVzLCBSZWY8SlNPTjo6VmFsdWU+JiYgcGF5bG9hZCwgUmVmPFByb3RvY29sOjpE
YXRhYmFzZTo6RXJyb3I+JiYgc3FsRXJyb3IsIGNvbnN0IFN0cmluZyYgc2NyZWVuQ29sb3IsIFJl
ZjxQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4mJiBhbHRlcm5hdGVDb2xvcnMsIGNvbnN0
IFN0cmluZyYgcHJpbnRDb2xvcik7CiBwcml2YXRlOgogICAgIEZyb250ZW5kUm91dGVyJiBtX2Zy
b250ZW5kUm91dGVyOwogfTsKQEAgLTI3NCw1NSArMjc2LDU0IEBAIHByaXZhdGU6CiAjaW5jbHVk
ZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5o
PgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAotdm9pZCBEYXRhYmFzZUZyb250ZW5kRGlzcGF0
Y2hlcjo6ZGlkRXhlY3V0ZU9wdGlvbmFsUGFyYW1ldGVycyhSZWZQdHI8SlNPTjo6QXJyYXlPZjxT
dHJpbmc+PiBjb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nKiBub3RlcywgY29uc3QgZG91YmxlKiB0
aW1lc3RhbXAsIFJlZlB0cjxKU09OOjpPYmplY3Q+IHZhbHVlcywgUmVmUHRyPEpTT046OlZhbHVl
PiBwYXlsb2FkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiBz
cWxFcnJvciwgY29uc3QgU3RyaW5nKiBzY3JlZW5Db2xvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+IGFsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5n
KiBwcmludENvbG9yKQordm9pZCBEYXRhYmFzZUZyb250ZW5kRGlzcGF0Y2hlcjo6ZGlkRXhlY3V0
ZU9wdGlvbmFsUGFyYW1ldGVycyhSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiYmIG9wdF9j
b2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBvcHRfbm90ZXMsIE9wdGlvbmFsPGRvdWJsZT4mJiBv
cHRfdGltZXN0YW1wLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIG9wdF92YWx1ZXMsIFJlZlB0cjxK
U09OOjpWYWx1ZT4mJiBvcHRfcGF5bG9hZCwgUmVmUHRyPFByb3RvY29sOjpEYXRhYmFzZTo6RXJy
b3I+JiYgb3B0X3NxbEVycm9yLCBjb25zdCBTdHJpbmcmIG9wdF9zY3JlZW5Db2xvciwgUmVmUHRy
PFByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiYmIG9wdF9hbHRlcm5hdGVDb2xvcnMsIGNv
bnN0IFN0cmluZyYgb3B0X3ByaW50Q29sb3IpCiB7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4ganNv
bk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIGpzb25NZXNzYWdlLT5zZXRT
dHJpbmcoIm1ldGhvZCJfcywgIkRhdGFiYXNlLmRpZEV4ZWN1dGVPcHRpb25hbFBhcmFtZXRlcnMi
X3MpOwotICAgIFJlZjxKU09OOjpPYmplY3Q+IHBhcmFtc09iamVjdCA9IEpTT046Ok9iamVjdDo6
Y3JlYXRlKCk7Ci0gICAgaWYgKGNvbHVtbk5hbWVzKQotICAgICAgICBwYXJhbXNPYmplY3QtPnNl
dEFycmF5KCJjb2x1bW5OYW1lcyJfcywgY29sdW1uTmFtZXMpOwotICAgIGlmIChub3RlcykKLSAg
ICAgICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCAqbm90ZXMpOwotICAgIGlm
ICh0aW1lc3RhbXApCi0gICAgICAgIHBhcmFtc09iamVjdC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAi
X3MsICp0aW1lc3RhbXApOwotICAgIGlmICh2YWx1ZXMpCi0gICAgICAgIHBhcmFtc09iamVjdC0+
c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIHZhbHVlcyk7Ci0gICAgaWYgKHBheWxvYWQpCi0gICAgICAg
IHBhcmFtc09iamVjdC0+c2V0VmFsdWUoInBheWxvYWQiX3MsICpwYXlsb2FkKTsKLSAgICBpZiAo
c3FsRXJyb3IpCi0gICAgICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJzcWxFcnJvciJfcywg
c3FsRXJyb3IpOwotICAgIGlmIChzY3JlZW5Db2xvcikKLSAgICAgICAgcGFyYW1zT2JqZWN0LT5z
ZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCAqc2NyZWVuQ29sb3IpOwotICAgIGlmIChhbHRlcm5h
dGVDb2xvcnMpCi0gICAgICAgIHBhcmFtc09iamVjdC0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9y
cyJfcywgYWx0ZXJuYXRlQ29sb3JzKTsKLSAgICBpZiAocHJpbnRDb2xvcikKLSAgICAgICAgcGFy
YW1zT2JqZWN0LT5zZXRTdHJpbmcoInByaW50Q29sb3IiX3MsICpwcmludENvbG9yKTsKLSAgICBq
c29uTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiX3MsIFdURk1vdmUocGFyYW1zT2JqZWN0KSk7
CisgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7
CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiRGF0YWJh
c2UuZGlkRXhlY3V0ZU9wdGlvbmFsUGFyYW1ldGVycyJfcyk7CisgICAgYXV0byBwcm90b2NvbF9w
YXJhbXNPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGlmICghIW9wdF9jb2x1
bW5OYW1lcykKKyAgICAgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRBcnJheSgiY29sdW1u
TmFtZXMiX3MsIG9wdF9jb2x1bW5OYW1lcy5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICBpZiAoISFv
cHRfbm90ZXMpCisgICAgICAgIHByb3RvY29sX3BhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJub3Rl
cyJfcywgb3B0X25vdGVzKTsKKyAgICBpZiAoISFvcHRfdGltZXN0YW1wKQorICAgICAgICBwcm90
b2NvbF9wYXJhbXNPYmplY3QtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCAqb3B0X3RpbWVzdGFt
cCk7CisgICAgaWYgKCEhb3B0X3ZhbHVlcykKKyAgICAgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0
LT5zZXRPYmplY3QoInZhbHVlcyJfcywgb3B0X3ZhbHVlcy5yZWxlYXNlTm9uTnVsbCgpKTsKKyAg
ICBpZiAoISFvcHRfcGF5bG9hZCkKKyAgICAgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRW
YWx1ZSgicGF5bG9hZCJfcywgb3B0X3BheWxvYWQucmVsZWFzZU5vbk51bGwoKSk7CisgICAgaWYg
KCEhb3B0X3NxbEVycm9yKQorICAgICAgICBwcm90b2NvbF9wYXJhbXNPYmplY3QtPnNldE9iamVj
dCgic3FsRXJyb3IiX3MsIG9wdF9zcWxFcnJvci5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICBpZiAo
ISFvcHRfc2NyZWVuQ29sb3IpCisgICAgICAgIHByb3RvY29sX3BhcmFtc09iamVjdC0+c2V0U3Ry
aW5nKCJzY3JlZW5Db2xvciJfcywgb3B0X3NjcmVlbkNvbG9yKTsKKyAgICBpZiAoISFvcHRfYWx0
ZXJuYXRlQ29sb3JzKQorICAgICAgICBwcm90b2NvbF9wYXJhbXNPYmplY3QtPnNldEFycmF5KCJh
bHRlcm5hdGVDb2xvcnMiX3MsIG9wdF9hbHRlcm5hdGVDb2xvcnMucmVsZWFzZU5vbk51bGwoKSk7
CisgICAgaWYgKCEhb3B0X3ByaW50Q29sb3IpCisgICAgICAgIHByb3RvY29sX3BhcmFtc09iamVj
dC0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCBvcHRfcHJpbnRDb2xvcik7CisgICAgcHJvdG9j
b2xfanNvbk1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIl9zLCBXVEZNb3ZlKHByb3RvY29sX3Bh
cmFtc09iamVjdCkpOwogCi0gICAgbV9mcm9udGVuZFJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3Nh
Z2UtPnRvSlNPTlN0cmluZygpKTsKKyAgICBtX2Zyb250ZW5kUm91dGVyLnNlbmRFdmVudChwcm90
b2NvbF9qc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwogfQogCi12b2lkIERhdGFiYXNlRnJv
bnRlbmREaXNwYXRjaGVyOjpkaWRFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMoUmVmUHRyPEpT
T046OkFycmF5T2Y8U3RyaW5nPj4gY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgbm90ZXMsIGRv
dWJsZSB0aW1lc3RhbXAsIFJlZlB0cjxKU09OOjpPYmplY3Q+IHZhbHVlcywgUmVmUHRyPEpTT046
OlZhbHVlPiBwYXlsb2FkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVy
cm9yPiBzcWxFcnJvciwgY29uc3QgU3RyaW5nJiBzY3JlZW5Db2xvciwgUmVmUHRyPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+IGFsdGVybmF0ZUNvbG9ycywgY29uc3Qg
U3RyaW5nJiBwcmludENvbG9yKQordm9pZCBEYXRhYmFzZUZyb250ZW5kRGlzcGF0Y2hlcjo6ZGlk
RXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKFJlZjxKU09OOjpBcnJheU9mPFN0cmluZz4+JiYg
Y29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgbm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIFJlZjxK
U09OOjpPYmplY3Q+JiYgdmFsdWVzLCBSZWY8SlNPTjo6VmFsdWU+JiYgcGF5bG9hZCwgUmVmPFBy
b3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+JiYgc3FsRXJyb3IsIGNvbnN0IFN0cmluZyYgc2NyZWVu
Q29sb3IsIFJlZjxQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4mJiBhbHRlcm5hdGVDb2xv
cnMsIGNvbnN0IFN0cmluZyYgcHJpbnRDb2xvcikKIHsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBq
c29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAganNvbk1lc3NhZ2UtPnNl
dFN0cmluZygibWV0aG9kIl9zLCAiRGF0YWJhc2UuZGlkRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0
ZXJzIl9zKTsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBwYXJhbXNPYmplY3QgPSBKU09OOjpPYmpl
Y3Q6OmNyZWF0ZSgpOwotICAgIHBhcmFtc09iamVjdC0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9z
LCBjb2x1bW5OYW1lcyk7Ci0gICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCBu
b3Rlcyk7Ci0gICAgcGFyYW1zT2JqZWN0LT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywgdGltZXN0
YW1wKTsKLSAgICBwYXJhbXNPYmplY3QtPnNldE9iamVjdCgidmFsdWVzIl9zLCB2YWx1ZXMpOwot
ICAgIHBhcmFtc09iamVjdC0+c2V0VmFsdWUoInBheWxvYWQiX3MsIHBheWxvYWQpOwotICAgIHBh
cmFtc09iamVjdC0+c2V0T2JqZWN0KCJzcWxFcnJvciJfcywgc3FsRXJyb3IpOwotICAgIHBhcmFt
c09iamVjdC0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgc2NyZWVuQ29sb3IpOwotICAgIHBh
cmFtc09iamVjdC0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywgYWx0ZXJuYXRlQ29sb3Jz
KTsKLSAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygicHJpbnRDb2xvciJfcywgcHJpbnRDb2xv
cik7Ci0gICAganNvbk1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIl9zLCBXVEZNb3ZlKHBhcmFt
c09iamVjdCkpOworICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6
OmNyZWF0ZSgpOworICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJf
cywgIkRhdGFiYXNlLmRpZEV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyJfcyk7CisgICAgYXV0
byBwcm90b2NvbF9wYXJhbXNPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIHBy
b3RvY29sX3BhcmFtc09iamVjdC0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCBXVEZNb3ZlKGNv
bHVtbk5hbWVzKSk7CisgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoIm5vdGVz
Il9zLCBub3Rlcyk7CisgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT5zZXREb3VibGUoInRpbWVz
dGFtcCJfcywgdGltZXN0YW1wKTsKKyAgICBwcm90b2NvbF9wYXJhbXNPYmplY3QtPnNldE9iamVj
dCgidmFsdWVzIl9zLCBXVEZNb3ZlKHZhbHVlcykpOworICAgIHByb3RvY29sX3BhcmFtc09iamVj
dC0+c2V0VmFsdWUoInBheWxvYWQiX3MsIFdURk1vdmUocGF5bG9hZCkpOworICAgIHByb3RvY29s
X3BhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJzcWxFcnJvciJfcywgV1RGTW92ZShzcWxFcnJvcikp
OworICAgIHByb3RvY29sX3BhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywg
c2NyZWVuQ29sb3IpOworICAgIHByb3RvY29sX3BhcmFtc09iamVjdC0+c2V0QXJyYXkoImFsdGVy
bmF0ZUNvbG9ycyJfcywgV1RGTW92ZShhbHRlcm5hdGVDb2xvcnMpKTsKKyAgICBwcm90b2NvbF9w
YXJhbXNPYmplY3QtPnNldFN0cmluZygicHJpbnRDb2xvciJfcywgcHJpbnRDb2xvcik7CisgICAg
cHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIl9zLCBXVEZNb3ZlKHByb3Rv
Y29sX3BhcmFtc09iamVjdCkpOwogCi0gICAgbV9mcm9udGVuZFJvdXRlci5zZW5kRXZlbnQoanNv
bk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKKyAgICBtX2Zyb250ZW5kUm91dGVyLnNlbmRFdmVu
dChwcm90b2NvbF9qc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBJbnNwZWN0b3IKQEAgLTM2Miw3ICszNjMsOSBAQCB2b2lkIERhdGFiYXNlRnJvbnRlbmRE
aXNwYXRjaGVyOjpkaWRFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMoUmVmUHRyPEpTT046OkFy
cgogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90
b2NvbFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYv
SlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtMzkxLDcgKzM5
NCw3IEBAIHVzaW5nIENvbG9yTGlzdCA9IEpTT046OkFycmF5T2Y8U3RyaW5nPjsKIG5hbWVzcGFj
ZSBEYXRhYmFzZSB7CiAKIC8qIERhdGFiYXNlIGVycm9yLiAqLwotY2xhc3MgRXJyb3IgOiBwdWJs
aWMgSlNPTjo6T2JqZWN0QmFzZSB7CitjbGFzcyBFcnJvciBmaW5hbCA6IHB1YmxpYyBKU09OOjpP
YmplY3RCYXNlIHsKIHB1YmxpYzoKICAgICBlbnVtIHsKICAgICAgICAgTm9GaWVsZHNTZXQgPSAw
LApAQCAtNDE4LDE3ICs0MjEsMTcgQEAgcHVibGljOgogICAgICAgICBmcmllbmQgY2xhc3MgRXJy
b3I7CiAgICAgcHVibGljOgogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBNZXNzYWdlU2V0PiYg
c2V0TWVzc2FnZShjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRFIHwg
TWVzc2FnZVNldD4mIHNldE1lc3NhZ2UoY29uc3QgU3RyaW5nJiBpbl9tZXNzYWdlKQogICAgICAg
ICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTWVzc2FnZVNldCksIHBy
b3BlcnR5X21lc3NhZ2VfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0
cmluZygibWVzc2FnZSJfcywgdmFsdWUpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmlu
ZygibWVzc2FnZSJfcywgaW5fbWVzc2FnZSk7CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRl
PE1lc3NhZ2VTZXQ+KCk7CiAgICAgICAgIH0KIAotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQ29k
ZVNldD4mIHNldENvZGUoaW50IHZhbHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQ29kZVNl
dD4mIHNldENvZGUoaW50IGluX2NvZGUpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVf
QVNTRVJUKCEoU1RBVEUgJiBDb2RlU2V0KSwgcHJvcGVydHlfY29kZV9hbHJlYWR5X3NldCk7Ci0g
ICAgICAgICAgICBtX3Jlc3VsdC0+c2V0SW50ZWdlcigiY29kZSJfcywgdmFsdWUpOworICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldEludGVnZXIoImNvZGUiX3MsIGluX2NvZGUpOwogICAgICAgICAg
ICAgcmV0dXJuIGNhc3RTdGF0ZTxDb2RlU2V0PigpOwogICAgICAgICB9CiAKQEAgLTQ5OCw4ICs1
MDEsNyBAQCBwdWJsaWM6CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGVzdFByb3Rv
Y29sT2JqZWN0cy5oIgogCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3Rm
L3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAKIG5hbWVzcGFj
ZSBJbnNwZWN0b3IgewogCkBAIC03NzgsMjkgKzc4MCwyOSBAQCB1c2luZyBuYW1lc3BhY2UgSW5z
cGVjdG9yOwogICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihh
bHRlcm5hdGVDb2xvcnMsIEAiYWx0ZXJuYXRlQ29sb3JzIik7CiAgICAgVEhST1dfRVhDRVBUSU9O
X0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKHByaW50Q29sb3IsIEAicHJpbnRDb2xvciIpOwog
Ci0gICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0
ZSgpOwotICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRhdGFiYXNlLmRp
ZEV4ZWN1dGVPcHRpb25hbFBhcmFtZXRlcnMiX3MpOwotICAgIFJlZjxKU09OOjpPYmplY3Q+IHBh
cmFtc09iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgYXV0byBwcm90b2NvbF9q
c29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgcHJvdG9jb2xfanNvbk1l
c3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiRGF0YWJhc2UuZGlkRXhlY3V0ZU9wdGlvbmFs
UGFyYW1ldGVycyJfcyk7CisgICAgYXV0byBwcm90b2NvbF9wYXJhbXNPYmplY3QgPSBKU09OOjpP
YmplY3Q6OmNyZWF0ZSgpOwogICAgIGlmIChjb2x1bW5OYW1lcykKLSAgICAgICAgcGFyYW1zT2Jq
ZWN0LT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KCgqY29sdW1u
TmFtZXMpKSk7CisgICAgICAgIHByb3RvY29sX3BhcmFtc09iamVjdC0+c2V0QXJyYXkoImNvbHVt
bk5hbWVzIl9zLCB0b0pTT05TdHJpbmdBcnJheSgoKmNvbHVtbk5hbWVzKSkpOwogICAgIGlmIChu
b3RlcykKLSAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCAoKm5vdGVz
KSk7CisgICAgICAgIHByb3RvY29sX3BhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJub3RlcyJfcywg
KCpub3RlcykpOwogICAgIGlmICh0aW1lc3RhbXApCi0gICAgICAgIHBhcmFtc09iamVjdC0+c2V0
RG91YmxlKCJ0aW1lc3RhbXAiX3MsICgqdGltZXN0YW1wKSk7CisgICAgICAgIHByb3RvY29sX3Bh
cmFtc09iamVjdC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsICgqdGltZXN0YW1wKSk7CiAgICAg
aWYgKHZhbHVlcykKLSAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRPYmplY3QoInZhbHVlcyJfcywg
WygqdmFsdWVzKSB0b0pTT05PYmplY3RdKTsKKyAgICAgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0
LT5zZXRPYmplY3QoInZhbHVlcyJfcywgWygqdmFsdWVzKSB0b0pTT05PYmplY3RdKTsKICAgICBp
ZiAocGF5bG9hZCkKLSAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRWYWx1ZSgicGF5bG9hZCJfcywg
WygqcGF5bG9hZCkgdG9KU09OT2JqZWN0XSk7CisgICAgICAgIHByb3RvY29sX3BhcmFtc09iamVj
dC0+c2V0VmFsdWUoInBheWxvYWQiX3MsIFsoKnBheWxvYWQpIHRvSlNPTk9iamVjdF0pOwogICAg
IGlmIChzcWxFcnJvcikKLSAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRPYmplY3QoInNxbEVycm9y
Il9zLCBbKCpzcWxFcnJvcikgdG9KU09OT2JqZWN0XSk7CisgICAgICAgIHByb3RvY29sX3BhcmFt
c09iamVjdC0+c2V0T2JqZWN0KCJzcWxFcnJvciJfcywgWygqc3FsRXJyb3IpIHRvSlNPTk9iamVj
dF0pOwogICAgIGlmIChzY3JlZW5Db2xvcikKLSAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJp
bmcoInNjcmVlbkNvbG9yIl9zLCAoKnNjcmVlbkNvbG9yKSk7CisgICAgICAgIHByb3RvY29sX3Bh
cmFtc09iamVjdC0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgKCpzY3JlZW5Db2xvcikpOwog
ICAgIGlmIChhbHRlcm5hdGVDb2xvcnMpCi0gICAgICAgIHBhcmFtc09iamVjdC0+c2V0QXJyYXko
ImFsdGVybmF0ZUNvbG9ycyJfcywgdG9KU09OU3RyaW5nQXJyYXkoKCphbHRlcm5hdGVDb2xvcnMp
KSk7CisgICAgICAgIHByb3RvY29sX3BhcmFtc09iamVjdC0+c2V0QXJyYXkoImFsdGVybmF0ZUNv
bG9ycyJfcywgdG9KU09OU3RyaW5nQXJyYXkoKCphbHRlcm5hdGVDb2xvcnMpKSk7CiAgICAgaWYg
KHByaW50Q29sb3IpCi0gICAgICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJwcmludENvbG9y
Il9zLCAoKnByaW50Q29sb3IpKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMi
X3MsIFdURk1vdmUocGFyYW1zT2JqZWN0KSk7Ci0gICAgcm91dGVyLnNlbmRFdmVudChqc29uTWVz
c2FnZS0+dG9KU09OU3RyaW5nKCkpOworICAgICAgICBwcm90b2NvbF9wYXJhbXNPYmplY3QtPnNl
dFN0cmluZygicHJpbnRDb2xvciJfcywgKCpwcmludENvbG9yKSk7CisgICAgcHJvdG9jb2xfanNv
bk1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIl9zLCBXVEZNb3ZlKHByb3RvY29sX3BhcmFtc09i
amVjdCkpOworICAgIHJvdXRlci5zZW5kRXZlbnQocHJvdG9jb2xfanNvbk1lc3NhZ2UtPnRvSlNP
TlN0cmluZygpKTsKIH0KIAogLSAodm9pZClkaWRFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNX
aXRoQ29sdW1uTmFtZXM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWNvbHVtbk5hbWVzIG5vdGVz
OihOU1N0cmluZyAqKW5vdGVzIHRpbWVzdGFtcDooZG91YmxlKXRpbWVzdGFtcCB2YWx1ZXM6KFJX
SVByb3RvY29sSlNPTk9iamVjdCAqKXZhbHVlcyBwYXlsb2FkOihSV0lQcm90b2NvbEpTT05PYmpl
Y3QgKilwYXlsb2FkIHNxbEVycm9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICopc3FsRXJy
b3Igc2NyZWVuQ29sb3I6KE5TU3RyaW5nICopc2NyZWVuQ29sb3IgYWx0ZXJuYXRlQ29sb3JzOihO
U0FycmF5Lyo8TlNTdHJpbmc+Ki8gKilhbHRlcm5hdGVDb2xvcnMgcHJpbnRDb2xvcjooTlNTdHJp
bmcgKilwcmludENvbG9yCkBAIC04MTYsMjAgKzgxOCwyMCBAQCB1c2luZyBuYW1lc3BhY2UgSW5z
cGVjdG9yOwogICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKGFsdGVy
bmF0ZUNvbG9ycywgQCJhbHRlcm5hdGVDb2xvcnMiKTsKICAgICBUSFJPV19FWENFUFRJT05fRk9S
X1JFUVVJUkVEX1BBUkFNRVRFUihwcmludENvbG9yLCBAInByaW50Q29sb3IiKTsKIAotICAgIFJl
ZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAg
ICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJEYXRhYmFzZS5kaWRFeGVjdXRl
Tm9PcHRpb25hbFBhcmFtZXRlcnMiX3MpOwotICAgIFJlZjxKU09OOjpPYmplY3Q+IHBhcmFtc09i
amVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgcGFyYW1zT2JqZWN0LT5zZXRBcnJh
eSgiY29sdW1uTmFtZXMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KGNvbHVtbk5hbWVzKSk7Ci0gICAg
cGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCBub3Rlcyk7Ci0gICAgcGFyYW1zT2Jq
ZWN0LT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywgdGltZXN0YW1wKTsKLSAgICBwYXJhbXNPYmpl
Y3QtPnNldE9iamVjdCgidmFsdWVzIl9zLCBbdmFsdWVzIHRvSlNPTk9iamVjdF0pOwotICAgIHBh
cmFtc09iamVjdC0+c2V0VmFsdWUoInBheWxvYWQiX3MsIFtwYXlsb2FkIHRvSlNPTk9iamVjdF0p
OwotICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJzcWxFcnJvciJfcywgW3NxbEVycm9yIHRv
SlNPTk9iamVjdF0pOwotICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJf
cywgc2NyZWVuQ29sb3IpOwotICAgIHBhcmFtc09iamVjdC0+c2V0QXJyYXkoImFsdGVybmF0ZUNv
bG9ycyJfcywgdG9KU09OU3RyaW5nQXJyYXkoYWx0ZXJuYXRlQ29sb3JzKSk7Ci0gICAgcGFyYW1z
T2JqZWN0LT5zZXRTdHJpbmcoInByaW50Q29sb3IiX3MsIHByaW50Q29sb3IpOwotICAgIGpzb25N
ZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyJfcywgV1RGTW92ZShwYXJhbXNPYmplY3QpKTsKLSAg
ICByb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7CisgICAgYXV0
byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgcHJv
dG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiRGF0YWJhc2UuZGlkRXhl
Y3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzIl9zKTsKKyAgICBhdXRvIHByb3RvY29sX3BhcmFtc09i
amVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0
LT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KGNvbHVtbk5hbWVz
KSk7CisgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCBub3Rl
cyk7CisgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywg
dGltZXN0YW1wKTsKKyAgICBwcm90b2NvbF9wYXJhbXNPYmplY3QtPnNldE9iamVjdCgidmFsdWVz
Il9zLCBbdmFsdWVzIHRvSlNPTk9iamVjdF0pOworICAgIHByb3RvY29sX3BhcmFtc09iamVjdC0+
c2V0VmFsdWUoInBheWxvYWQiX3MsIFtwYXlsb2FkIHRvSlNPTk9iamVjdF0pOworICAgIHByb3Rv
Y29sX3BhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJzcWxFcnJvciJfcywgW3NxbEVycm9yIHRvSlNP
Tk9iamVjdF0pOworICAgIHByb3RvY29sX3BhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJzY3JlZW5D
b2xvciJfcywgc2NyZWVuQ29sb3IpOworICAgIHByb3RvY29sX3BhcmFtc09iamVjdC0+c2V0QXJy
YXkoImFsdGVybmF0ZUNvbG9ycyJfcywgdG9KU09OU3RyaW5nQXJyYXkoYWx0ZXJuYXRlQ29sb3Jz
KSk7CisgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInByaW50Q29sb3IiX3Ms
IHByaW50Q29sb3IpOworICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRPYmplY3QoInBhcmFt
cyJfcywgV1RGTW92ZShwcm90b2NvbF9wYXJhbXNPYmplY3QpKTsKKyAgICByb3V0ZXIuc2VuZEV2
ZW50KHByb3RvY29sX2pzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7CiB9CiAKIEBlbmQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9l
eHBlY3RlZC9nZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbi1yZXN1bHQg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQv
Z2VuZXJhdGUtZG9tYWlucy13aXRoLWZlYXR1cmUtZ3VhcmRzLmpzb24tcmVzdWx0CmluZGV4IDI5
NGJhOTA4MTIxOGEzNTAyZDk2ZDQ1NWQ0ZDYzZDJiM2Y1YWFlOWEuLjM5YzM2NjNhZmYyZjZmYjlj
MGVhN2I4NDljZjM5MGFmZGEzYmZiYWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9nZW5lcmF0ZS1kb21haW5zLXdpdGgt
ZmVhdHVyZS1ndWFyZHMuanNvbi1yZXN1bHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2dlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0
dXJlLWd1YXJkcy5qc29uLXJlc3VsdApAQCAtNzQsNyArNzQsNyBAQCBJbnNwZWN0b3JCYWNrZW5k
LmFjdGl2YXRlRG9tYWluKCJOZXR3b3JrMyIsIG51bGwpOwogCiAjaWYgRU5BQkxFKElOU1BFQ1RP
Ul9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5o
IgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CiAKQEAgLTkyLDcgKzkyLDcgQEAgcHJpdmF0
ZToKIGNsYXNzIEFsdGVybmF0ZU5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIgOiBwdWJsaWMgQWx0
ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewogcHVibGljOgogICAgIHZpcnR1YWwgfkFsdGVybmF0
ZU5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIoKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJl
c291cmNlKGxvbmcgY2FsbElkKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZShs
b25nIHByb3RvY29sX2NhbGxJZCkgPSAwOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
CkBAIC0xMzQsMTEgKzEzNCwxNCBAQCBwdWJsaWM6CiAKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xP
YmplY3RzLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXIuaD4KKyNpbmNsdWRlIDx0dXBsZT4KKyNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4KKyNp
bmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
IAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwor
CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIGNsYXNzIEFs
dGVybmF0ZU5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI7CkBAIC0xNDYsNyArMTQ5LDcgQEAgY2xh
c3MgQWx0ZXJuYXRlTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjsKIAogY2xhc3MgTmV0d29yazFC
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewogcHVibGljOgotICAgIHZpcnR1YWwgdm9pZCBsb2Fk
UmVzb3VyY2UoRXJyb3JTdHJpbmcmKSA9IDA7CisgICAgdmlydHVhbCBQcm90b2NvbDo6RXJyb3JT
dHJpbmdPcjx2b2lkPiBsb2FkUmVzb3VyY2UoKSA9IDA7CiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVh
bCB+TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKTsKIH07CkBAIC0xNTQsOSArMTU3
LDkgQEAgcHJvdGVjdGVkOgogY2xhc3MgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6
IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7CiBwdWJsaWM6CiAgICAgc3Rh
dGljIFJlZjxOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUoQmFja2VuZERpc3BhdGNo
ZXImLCBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwotICAgIHZvaWQgZGlzcGF0
Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0
PiYmIG1lc3NhZ2UpIGZpbmFsOworICAgIHZvaWQgZGlzcGF0Y2gobG9uZyBwcm90b2NvbF9jYWxs
SWQsIGNvbnN0IFN0cmluZyYgcHJvdG9jb2xfbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIHBy
b3RvY29sX21lc3NhZ2UpIGZpbmFsOwogcHJpdmF0ZToKLSAgICB2b2lkIGxvYWRSZXNvdXJjZShs
b25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKKyAgICB2
b2lkIGxvYWRSZXNvdXJjZShsb25nIHByb3RvY2xfY2FsbElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0
PiYmIHByb3RvY29sX3BhcmFtZXRlcnMpOwogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRF
X0RJU1BBVENIRVJTKQogcHVibGljOgogICAgIHZvaWQgc2V0QWx0ZXJuYXRlRGlzcGF0Y2hlcihB
bHRlcm5hdGVOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyKiBhbHRlcm5hdGVEaXNwYXRjaGVyKSB7
IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IGFsdGVybmF0ZURpc3BhdGNoZXI7IH0KQEAgLTIwNSw5
ICsyMDgsNyBAQCBwcml2YXRlOgogI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIK
IAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0j
aW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQu
aD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9S
X0FMVEVSTkFURV9ESVNQQVRDSEVSUykKICNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERp
c3BhdGNoZXJzLmgiCkBAIC0yMjksMzggKzIzMCwzOCBAQCBOZXR3b3JrMUJhY2tlbmREaXNwYXRj
aGVyOjpOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5k
RAogICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbigi
TmV0d29yazEiX3MsIHRoaXMpOwogfQogCi12b2lkIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI6
OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046
Ok9iamVjdD4mJiBtZXNzYWdlKQordm9pZCBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpkaXNw
YXRjaChsb25nIHByb3RvY29sX2NhbGxJZCwgY29uc3QgU3RyaW5nJiBwcm90b2NvbF9tZXRob2Qs
IFJlZjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfbWVzc2FnZSkKIHsKICAgICBSZWY8TmV0d29y
azFCYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7CiAKLSAgICBSZWZQdHI8SlNPTjo6
T2JqZWN0PiBwYXJhbWV0ZXJzOwotICAgIG1lc3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9zLCBw
YXJhbWV0ZXJzKTsKKyAgICBhdXRvIHByb3RvY29sX3BhcmFtZXRlcnMgPSBwcm90b2NvbF9tZXNz
YWdlLT5nZXRPYmplY3QoInBhcmFtcyJfcyk7CiAKLSAgICBpZiAobWV0aG9kID09ICJsb2FkUmVz
b3VyY2UiKSB7Ci0gICAgICAgIGxvYWRSZXNvdXJjZShyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1l
dGVycykpOworICAgIGlmIChwcm90b2NvbF9tZXRob2QgPT0gImxvYWRSZXNvdXJjZSIpIHsKKyAg
ICAgICAgbG9hZFJlc291cmNlKHByb3RvY29sX2NhbGxJZCwgV1RGTW92ZShwcm90b2NvbF9wYXJh
bWV0ZXJzKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBtX2JhY2tlbmREaXNwYXRj
aGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3Vu
ZCwgIidOZXR3b3JrMS4iICsgbWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOworICAgIG1fYmFj
a2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1l
dGhvZE5vdEZvdW5kLCAiJ05ldHdvcmsxLiIgKyBwcm90b2NvbF9tZXRob2QgKyAiJyB3YXMgbm90
IGZvdW5kIik7CiB9CiAKLXZvaWQgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291
cmNlKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQordm9pZCBOZXR3b3Jr
MUJhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UobG9uZyBwcm90b2NvbF9jYWxsSWQsIFJl
ZlB0cjxKU09OOjpPYmplY3Q+JiYpCiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVf
RElTUEFUQ0hFUlMpCiAgICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgewotICAgICAgICBt
X2FsdGVybmF0ZURpc3BhdGNoZXItPmxvYWRSZXNvdXJjZShyZXF1ZXN0SWQpOworICAgICAgICBt
X2FsdGVybmF0ZURpc3BhdGNoZXItPmxvYWRSZXNvdXJjZShwcm90b2NvbF9jYWxsSWQpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRF
X0RJU1BBVENIRVJTKQogCi0gICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVmPEpTT046Ok9i
amVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBtX2FnZW50LT5sb2Fk
UmVzb3VyY2UoZXJyb3IpOworICAgIGF1dG8gcmVzdWx0ID0gbV9hZ2VudC0+bG9hZFJlc291cmNl
KCk7CisgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAgICAgQVNTRVJUKCFyZXN1bHQuZXJyb3IoKS5p
c0VtcHR5KCkpOworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVy
cm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgcmVzdWx0LmVycm9yKCkpOworICAg
ICAgICByZXR1cm47CisgICAgfQogCi0gICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKLSAgICAgICAg
bV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1
bHQpLCBmYWxzZSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBv
cnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShl
cnJvcikpOworICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNy
ZWF0ZSgpOworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShwcm90b2NvbF9j
YWxsSWQsIFdURk1vdmUocHJvdG9jb2xfanNvbk1lc3NhZ2UpLCBmYWxzZSk7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgpAQCAtMzAxLDYgKzMwMiw3IEBAIHZvaWQgTmV0d29yazFCYWNr
ZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6
T2JqZWN0CiAKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8d3Rm
L0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CkBAIC0zNTMsMTYgKzM1
NSwxNSBAQCBwcml2YXRlOgogI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCiAK
ICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKIHZv
aWQgTmV0d29yazNGcm9udGVuZERpc3BhdGNoZXI6OnJlc291cmNlTG9hZGVkKCkKIHsKLSAgICBS
ZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0g
ICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiTmV0d29yazMucmVzb3VyY2VM
b2FkZWQiX3MpOworICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6
OmNyZWF0ZSgpOworICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJf
cywgIk5ldHdvcmszLnJlc291cmNlTG9hZGVkIl9zKTsKIAotICAgIG1fZnJvbnRlbmRSb3V0ZXIu
c2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7CisgICAgbV9mcm9udGVuZFJv
dXRlci5zZW5kRXZlbnQocHJvdG9jb2xfanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKIH0K
IAogfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCkBAIC00MDIsNyArNDAzLDkgQEAgdm9pZCBOZXR3
b3JrM0Zyb250ZW5kRGlzcGF0Y2hlcjo6cmVzb3VyY2VMb2FkZWQoKQogI3ByYWdtYSBvbmNlCiAK
ICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+Ci0jaW5j
bHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2lu
Y2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgog
CiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtNDIzLDcgKzQyNiw3IEBAIGNsYXNzIE5ldHdv
cmtFcnJvcjsKIAogbmFtZXNwYWNlIE5ldHdvcmsyIHsKIAotY2xhc3MgTmV0d29ya0Vycm9yIDog
cHVibGljIEpTT046Ok9iamVjdEJhc2UgeworY2xhc3MgTmV0d29ya0Vycm9yIGZpbmFsIDogcHVi
bGljIEpTT046Ok9iamVjdEJhc2UgewogcHVibGljOgogICAgIGVudW0gewogICAgICAgICBOb0Zp
ZWxkc1NldCA9IDAsCkBAIC00NTAsMTcgKzQ1MywxNyBAQCBwdWJsaWM6CiAgICAgICAgIGZyaWVu
ZCBjbGFzcyBOZXR3b3JrRXJyb3I7CiAgICAgcHVibGljOgogCi0gICAgICAgIEJ1aWxkZXI8U1RB
VEUgfCBNZXNzYWdlU2V0PiYgc2V0TWVzc2FnZShjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgICAg
ICBCdWlsZGVyPFNUQVRFIHwgTWVzc2FnZVNldD4mIHNldE1lc3NhZ2UoY29uc3QgU3RyaW5nJiBp
bl9tZXNzYWdlKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRF
ICYgTWVzc2FnZVNldCksIHByb3BlcnR5X21lc3NhZ2VfYWxyZWFkeV9zZXQpOwotICAgICAgICAg
ICAgbV9yZXN1bHQtPnNldFN0cmluZygibWVzc2FnZSJfcywgdmFsdWUpOworICAgICAgICAgICAg
bV9yZXN1bHQtPnNldFN0cmluZygibWVzc2FnZSJfcywgaW5fbWVzc2FnZSk7CiAgICAgICAgICAg
ICByZXR1cm4gY2FzdFN0YXRlPE1lc3NhZ2VTZXQ+KCk7CiAgICAgICAgIH0KIAotICAgICAgICBC
dWlsZGVyPFNUQVRFIHwgQ29kZVNldD4mIHNldENvZGUoaW50IHZhbHVlKQorICAgICAgICBCdWls
ZGVyPFNUQVRFIHwgQ29kZVNldD4mIHNldENvZGUoaW50IGluX2NvZGUpCiAgICAgICAgIHsKICAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBDb2RlU2V0KSwgcHJvcGVydHlfY29k
ZV9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0SW50ZWdlcigiY29kZSJf
cywgdmFsdWUpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldEludGVnZXIoImNvZGUiX3MsIGlu
X2NvZGUpOwogICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxDb2RlU2V0PigpOwogICAgICAg
ICB9CiAKQEAgLTUzMCw4ICs1MzMsNyBAQCBwdWJsaWM6CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFs
Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRp
b25zLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC01ODcsNyArNTg5LDcgQEAgY2xh
c3MgT2JqQ0luc3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMg
QWx0ZXJuYXRlTmV0d29yazFCYWMKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1Ymxp
YzoKICAgICBPYmpDSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcihpZDxUZXN0UHJv
dG9jb2xOZXR3b3JrMURvbWFpbkhhbmRsZXI+IGhhbmRsZXIpIHsgbV9kZWxlZ2F0ZSA9IGhhbmRs
ZXI7IH0KLSAgICB2b2lkIGxvYWRSZXNvdXJjZShsb25nIHJlcXVlc3RJZCkgZmluYWw7CisgICAg
dm9pZCBsb2FkUmVzb3VyY2UobG9uZyBwcm90b2NvbF9jYWxsSWQpIGZpbmFsOwogcHJpdmF0ZToK
ICAgICBSZXRhaW5QdHI8aWQ8VGVzdFByb3RvY29sTmV0d29yazFEb21haW5IYW5kbGVyPj4gbV9k
ZWxlZ2F0ZTsKIH07CkBAIC02MzUsMjEgKzYzNywyMiBAQCBwcml2YXRlOgogCiBuYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKIAotdm9pZCBPYmpDSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hl
cjo6bG9hZFJlc291cmNlKGxvbmcgcmVxdWVzdElkKQordm9pZCBPYmpDSW5zcGVjdG9yTmV0d29y
azFCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlKGxvbmcgcHJvdG9jb2xfY2FsbElkKQog
ewogICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihsb2Fk
UmVzb3VyY2VXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6KV0pIHsKLSAgICAgICAg
YmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tl
bmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidOZXR3b3JrMS5sb2FkUmVzb3VyY2UnIHdh
cyBub3QgZm91bmQiX3MpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90
b2NvbEVycm9yKHByb3RvY29sX2NhbGxJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZv
dW5kLCAiJ05ldHdvcmsxLmxvYWRSZXNvdXJjZScgd2FzIG5vdCBmb3VuZCJfcyk7CiAgICAgICAg
IGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKICAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsK
LSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0
SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgICAgICBiYWNr
ZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHByb3RvY29sX2NhbGxJZCwgQmFj
a2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CiAgICAgICAgIGJhY2tlbmREaXNw
YXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgfTsKIAogICAgIGlkIHN1Y2Nlc3ND
YWxsYmFjayA9IF57Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShy
ZXF1ZXN0SWQsIEpTT046Ok9iamVjdDo6Y3JlYXRlKCksIGZhbHNlKTsKKyAgICAgICAgYXV0byBw
cm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIGJh
Y2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShwcm90b2NvbF9jYWxsSWQsIFdURk1vdmUo
cHJvdG9jb2xfanNvbk1lc3NhZ2UpLCBmYWxzZSk7CiAgICAgfTsKIAogICAgIFttX2RlbGVnYXRl
IGxvYWRSZXNvdXJjZVdpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxi
YWNrOnN1Y2Nlc3NDYWxsYmFja107CkBAIC04NTEsOSArODU0LDkgQEAgdXNpbmcgbmFtZXNwYWNl
IEluc3BlY3RvcjsKIHsKICAgICBjb25zdCBGcm9udGVuZFJvdXRlciYgcm91dGVyID0gX2NvbnRy
b2xsZXItPmZyb250ZW5kUm91dGVyKCk7CiAKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVz
c2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAganNvbk1lc3NhZ2UtPnNldFN0cmlu
ZygibWV0aG9kIl9zLCAiTmV0d29yazMucmVzb3VyY2VMb2FkZWQiX3MpOwotICAgIHJvdXRlci5z
ZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKKyAgICBhdXRvIHByb3RvY29s
X2pzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBwcm90b2NvbF9qc29u
TWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJOZXR3b3JrMy5yZXNvdXJjZUxvYWRlZCJf
cyk7CisgICAgcm91dGVyLnNlbmRFdmVudChwcm90b2NvbF9qc29uTWVzc2FnZS0+dG9KU09OU3Ry
aW5nKCkpOwogfQogCiBAZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21h
aW4uanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
dGVzdHMvZXhwZWN0ZWQvc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbi1yZXN1bHQK
aW5kZXggNDUzZWY2ZTQ5NDhlYWIwMjVhYjU2MTM3OGQyYjhhYTk0ZjU1Yzg4ZC4uNTZlZjYzNGRl
OTgwNjg1ODZkYmRjZDA4ODFiOTFkODQ5ZTJmYmExNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3NhbWUtdHlwZS1pZC1k
aWZmZXJlbnQtZG9tYWluLmpzb24tcmVzdWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9zYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRv
bWFpbi5qc29uLXJlc3VsdApAQCAtNjMsNyArNjMsNyBAQAogCiAjaWYgRU5BQkxFKElOU1BFQ1RP
Ul9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5o
IgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CiAKQEAgLTExOSwxMSArMTE5LDE0IEBAIHBy
aXZhdGU6CiAKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx0dXBs
ZT4KKyNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4K
ICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7
CiAKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCiAKIAogCkBAIC0xNjQsOSArMTY3LDcg
QEAgdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiAjaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNw
YXRjaGVycy5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRS
b3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgogI2luY2x1ZGUgPHd0Zi9OZXZl
ckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogI2lmIEVOQUJM
RShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogI2luY2x1ZGUgIlRlc3RBbHRlcm5h
dGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKQEAgLTIxNCw2ICsyMTUsNyBAQCBuYW1lc3BhY2UgSW5z
cGVjdG9yIHsKIAogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDx3
dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKQEAgLTI1Nyw3ICsy
NTksNiBAQCBjbGFzcyBGcm9udGVuZFJvdXRlcjsKICNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNw
YXRjaGVycy5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRS
b3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNw
ZWN0b3IgewogCkBAIC0yOTgsNyArMjk5LDkgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiAjcHJh
Z21hIG9uY2UKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlw
ZXMuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9KU09OVmFs
dWVzLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC0zNjIsOCArMzY1LDcgQEAg
dXNpbmcgUmVtb3RlT2JqZWN0SWQgPSBTdHJpbmc7CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+
Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25z
Lmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvc2hhZG93ZWQtb3B0aW9u
YWwtdHlwZS1zZXR0ZXJzLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3NoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVy
cy5qc29uLXJlc3VsdAppbmRleCA1ZjJjZDc5MzMwNDI0N2U3NjU1ZjNlOTgxZWE3MDBmNTdjNzcw
ZmQ5Li44ZWNlY2M3MDEwMzQwNGRhN2RjMjc4Y2E5NzUxOWEyZGViZmMwMDViIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQv
c2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24tcmVzdWx0CisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9zaGFkb3dlZC1v
cHRpb25hbC10eXBlLXNldHRlcnMuanNvbi1yZXN1bHQKQEAgLTYzLDcgKzYzLDcgQEAKIAogI2lm
IEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogCi0jaW5jbHVkZSAiVGVz
dFByb3RvY29sVHlwZXMuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KICNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgogCkBAIC0xMTks
MTEgKzExOSwxNCBAQCBwcml2YXRlOgogCiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5o
IgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+
CisjaW5jbHVkZSA8dHVwbGU+CisjaW5jbHVkZSA8d3RmL0V4cGVjdGVkLmg+CisjaW5jbHVkZSA8
d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVz
cGFjZSBJbnNwZWN0b3IgewogCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKwogCiAKIApA
QCAtMTY0LDkgKzE2Nyw3IEBAIHR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwogI2luY2x1ZGUg
IlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0lu
c3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KICNp
bmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5n
Lmg+CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKICNpbmNs
dWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCkBAIC0yMTQsNiArMjE1LDcg
QEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3Rz
LmgiCiAjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwu
aD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3Rv
ciB7CkBAIC0yNTcsNyArMjU5LDYgQEAgY2xhc3MgRnJvbnRlbmRSb3V0ZXI7CiAjaW5jbHVkZSAi
VGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0lu
c3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgog
CiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtMjk4LDcgKzI5OSw5IEBAIG5hbWVzcGFjZSBJ
bnNwZWN0b3IgewogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JQcm90b2NvbFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNs
dWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAt
MzMxLDcgKzMzNCw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFN0cmluZyBnZXRFbnVtQ29uc3Rh
bnRWYWx1ZShUIGVudW1WYWx1ZSkKIG5hbWVzcGFjZSBSdW50aW1lIHsKIAogLyogS2V5IHBhdGgu
ICovCi1jbGFzcyBLZXlQYXRoIDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgeworY2xhc3MgS2V5
UGF0aCBmaW5hbCA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKIHB1YmxpYzoKICAgICAvLyBO
YW1lZCBhZnRlciBwcm9wZXJ0eSBuYW1lICd0eXBlJyB3aGlsZSBnZW5lcmF0aW5nIEtleVBhdGgu
CiAgICAgZW51bSBjbGFzcyBUeXBlIHsKQEAgLTMzOSw2ICszNDIsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIFN0cmluZyA9IDEsCiAgICAgICAgIEFycmF5ID0gMiwKICAgICB9OyAvLyBlbnVtIGNsYXNz
IFR5cGUKKwogICAgIGVudW0gewogICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCiAgICAgICAgIFR5
cGVTZXQgPSAxIDw8IDAsCkBAIC0zNjMsMTAgKzM2NywxMCBAQCBwdWJsaWM6CiAgICAgICAgIGZy
aWVuZCBjbGFzcyBLZXlQYXRoOwogICAgIHB1YmxpYzoKIAotICAgICAgICBCdWlsZGVyPFNUQVRF
IHwgVHlwZVNldD4mIHNldFR5cGUoVHlwZSB2YWx1ZSkKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8
IFR5cGVTZXQ+JiBzZXRUeXBlKFR5cGUgaW5fdHlwZSkKICAgICAgICAgewogICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoIShTVEFURSAmIFR5cGVTZXQpLCBwcm9wZXJ0eV90eXBlX2FscmVhZHlf
c2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInR5cGUiX3MsIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZSh2YWx1ZSkpOwor
ICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygidHlwZSJfcywgUHJvdG9jb2w6OlRlc3RI
ZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbl90eXBlKSk7CiAgICAgICAgICAgICByZXR1
cm4gY2FzdFN0YXRlPFR5cGVTZXQ+KCk7CiAgICAgICAgIH0KIApAQCAtMzkyLDE0ICszOTYsMTQg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSlNPTjo6T2Jq
ZWN0OjpjcmVhdGUoKSk7CiAgICAgfQogCi0gICAgdm9pZCBzZXRTdHJpbmcoY29uc3QgU3RyaW5n
JiB2YWx1ZSkKKyAgICB2b2lkIHNldFN0cmluZyhjb25zdCBTdHJpbmcmIGluX29wdF9zdHJpbmcp
CiAgICAgewotICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXRTdHJpbmcoInN0cmluZyJfcywg
dmFsdWUpOworICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXRTdHJpbmcoInN0cmluZyJfcywg
aW5fb3B0X3N0cmluZyk7CiAgICAgfQogCi0gICAgdm9pZCBzZXRBcnJheShSZWZQdHI8SlNPTjo6
QXJyYXlPZjxTdHJpbmc+PiB2YWx1ZSkKKyAgICB2b2lkIHNldEFycmF5KFJlZjxKU09OOjpBcnJh
eU9mPFN0cmluZz4+JiYgaW5fb3B0X2FycmF5KQogICAgIHsKLSAgICAgICAgSlNPTjo6T2JqZWN0
QmFzZTo6c2V0QXJyYXkoImFycmF5Il9zLCBXVEZNb3ZlKHZhbHVlKSk7CisgICAgICAgIEpTT046
Ok9iamVjdEJhc2U6OnNldEFycmF5KCJhcnJheSJfcywgV1RGTW92ZShpbl9vcHRfYXJyYXkpKTsK
ICAgICB9CiB9OwogCkBAIC00MTQsNyArNDE4LDcgQEAgT3B0aW9uYWw8UHJvdG9jb2xFbnVtVHlw
ZT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYpOwogCiAvLyBFbnVtcyBp
biB0aGUgJ1J1bnRpbWUnIERvbWFpbgogdGVtcGxhdGU8PgotT3B0aW9uYWw8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6UnVudGltZTo6S2V5UGF0aDo6VHlwZT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5n
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OktleVBhdGg6OlR5cGU+KGNvbnN0IFN0cmlu
ZyYpOworT3B0aW9uYWw8UHJvdG9jb2w6OlJ1bnRpbWU6OktleVBhdGg6OlR5cGU+IHBhcnNlRW51
bVZhbHVlRnJvbVN0cmluZzxQcm90b2NvbDo6UnVudGltZTo6S2V5UGF0aDo6VHlwZT4oY29uc3Qg
U3RyaW5nJik7CiAKIH0gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCiAKQEAgLTQ1Niw4ICs0NjAs
NyBAQCBPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpLZXlQYXRoOjpUeXBl
PiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SQogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1
ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKIAotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgot
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5o
PgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtNDc4LDE2ICs0ODEsMTYgQEAgU3RyaW5n
IGdldEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKSB7CiAvLyBFbnVtcyBpbiB0aGUgJ1J1bnRp
bWUnIERvbWFpbgogCiB0ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpS
dW50aW1lOjpLZXlQYXRoOjpUeXBlPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9y
OjpQcm90b2NvbDo6UnVudGltZTo6S2V5UGF0aDo6VHlwZT4oY29uc3QgU3RyaW5nJiBwcm90b2Nv
bFN0cmluZykKK09wdGlvbmFsPFByb3RvY29sOjpSdW50aW1lOjpLZXlQYXRoOjpUeXBlPiBwYXJz
ZUVudW1WYWx1ZUZyb21TdHJpbmc8UHJvdG9jb2w6OlJ1bnRpbWU6OktleVBhdGg6OlR5cGU+KGNv
bnN0IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcpCiB7CiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBj
b25zdGFudFZhbHVlc1tdID0gewotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6
OlJ1bnRpbWU6OktleVBhdGg6OlR5cGU6Ok51bGwsCi0gICAgICAgIChzaXplX3QpSW5zcGVjdG9y
OjpQcm90b2NvbDo6UnVudGltZTo6S2V5UGF0aDo6VHlwZTo6U3RyaW5nLAotICAgICAgICAoc2l6
ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OktleVBhdGg6OlR5cGU6OkFycmF5LAor
ICAgICAgICAoc2l6ZV90KVByb3RvY29sOjpSdW50aW1lOjpLZXlQYXRoOjpUeXBlOjpOdWxsLAor
ICAgICAgICAoc2l6ZV90KVByb3RvY29sOjpSdW50aW1lOjpLZXlQYXRoOjpUeXBlOjpTdHJpbmcs
CisgICAgICAgIChzaXplX3QpUHJvdG9jb2w6OlJ1bnRpbWU6OktleVBhdGg6OlR5cGU6OkFycmF5
LAogICAgIH07CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAzOyArK2kpCiAgICAgICAgIGlm
IChwcm90b2NvbFN0cmluZyA9PSBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb25zdGFudFZhbHVlc1tp
XV0pCi0gICAgICAgICAgICByZXR1cm4gKEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6Oktl
eVBhdGg6OlR5cGUpY29uc3RhbnRWYWx1ZXNbaV07CisgICAgICAgICAgICByZXR1cm4gKFByb3Rv
Y29sOjpSdW50aW1lOjpLZXlQYXRoOjpUeXBlKWNvbnN0YW50VmFsdWVzW2ldOwogCiAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9zaG91bGQtc3RyaXAtY29tbWVudHMuanNv
bi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
ZXhwZWN0ZWQvc2hvdWxkLXN0cmlwLWNvbW1lbnRzLmpzb24tcmVzdWx0CmluZGV4IDM0OGFjZTkz
YmFiMDk0N2RhZjg1YjQ1ZjU5YzlmY2FhNjcwMmRlMDAuLjAwYWEzNmZhM2QwMjQ5MTNjNWI4ZDI3
MzgxMWRhNWEwMTU0ODMxMjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9zaG91bGQtc3RyaXAtY29tbWVudHMuanNvbi1y
ZXN1bHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2V4cGVjdGVkL3Nob3VsZC1zdHJpcC1jb21tZW50cy5qc29uLXJlc3VsdApAQCAtNjMsNyArNjMs
NyBAQAogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAKLSNp
bmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVj
dHMuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
ci5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+
CiAKQEAgLTExOSwxMSArMTE5LDE0IEBAIHByaXZhdGU6CiAKICNpbmNsdWRlICJUZXN0UHJvdG9j
b2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERp
c3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx0dXBsZT4KKyNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4K
KyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5n
OworCiAKIAogCkBAIC0xNjQsOSArMTY3LDcgQEAgdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7
CiAjaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgogCiAjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSlNPTlZh
bHVlcy5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90
ZXh0L0NTdHJpbmcuaD4KIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENI
RVJTKQogI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKQEAgLTIx
NCw2ICsyMTUsNyBAQCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAogI2luY2x1ZGUgIlRlc3RQcm90
b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0
Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKQEAgLTI1Nyw3ICsyNTksNiBAQCBjbGFzcyBGcm9udGVuZFJvdXRlcjsK
ICNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgogCiAjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9D
U3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC0yOTgsNyArMjk5LDkgQEAg
bmFtZXNwYWNlIEluc3BlY3RvciB7CiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9u
cy5oPgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFs
Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0
b3IgewogCkBAIC0zNTIsOCArMzU1LDcgQEAgbmFtZXNwYWNlIFByb3RvY29sIHsKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAKLSNpbmNsdWRl
IDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVk
ZSA8d3RmL0Fzc2VydGlvbnMuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3Rl
ZC90eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbi1yZXN1bHQgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlw
ZS1kZWNsYXJhdGlvbi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24tcmVzdWx0CmluZGV4IDc5
Y2I5ODU0NTlmODgyNDU2NzdjNWUzYzI2MDVmNzM0NGUxMTZiZmMuLjM0YjFhY2JiY2FlYzgxMmQ4
NGQxNjlmZTNiMmI4MjcyNTY3YWJkNDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWFsaWFz
ZWQtcHJpbWl0aXZlLXR5cGUuanNvbi1yZXN1bHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tYWxpYXNl
ZC1wcmltaXRpdmUtdHlwZS5qc29uLXJlc3VsdApAQCAtNjMsNyArNjMsNyBAQAogCiAjaWYgRU5B
QkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAKLSNpbmNsdWRlICJUZXN0UHJv
dG9jb2xUeXBlcy5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgogI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CiAKQEAgLTExOSwxMSAr
MTE5LDE0IEBAIHByaXZhdGU6CiAKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNp
bmNsdWRlIDx0dXBsZT4KKyNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4KKyNpbmNsdWRlIDx3dGYv
T3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNl
IEluc3BlY3RvciB7CiAKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCiAKIAogCkBAIC0x
NjQsOSArMTY3LDcgQEAgdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiAjaW5jbHVkZSAiVGVz
dEJhY2tlbmREaXNwYXRjaGVycy5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgogI2luY2x1
ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
IAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogI2luY2x1ZGUg
IlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKQEAgLTIxNCw2ICsyMTUsNyBAQCBu
YW1lc3BhY2UgSW5zcGVjdG9yIHsKIAogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIK
ICNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgog
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsK
QEAgLTI1Nyw3ICsyNTksNiBAQCBjbGFzcyBGcm9udGVuZFJvdXRlcjsKICNpbmNsdWRlICJUZXN0
RnJvbnRlbmREaXNwYXRjaGVycy5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVj
dG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKIG5h
bWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC0yOTgsNyArMjk5LDkgQEAgbmFtZXNwYWNlIEluc3Bl
Y3RvciB7CiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3Rv
clByb3RvY29sVHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUg
PHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC0zNTcs
OCArMzYwLDcgQEAgdXNpbmcgUmVtb3RlT2JqZWN0SWQgPSBpbnQ7CiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogCi0jaW5jbHVkZSA8d3RmL09w
dGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi9B
c3NlcnRpb25zLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1k
ZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tYXJyYXkt
dHlwZS5qc29uLXJlc3VsdAppbmRleCBkODg4MGM2M2UzMzc4YzVjZmUzMDhjYWZkZjg0Y2M5ODc0
OTJiYmZjLi45NDBmMTU4MGJkYzFkOWJjYTQ0MDE0NzQxNTJhMjNiYjI1NGIxOTBmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0
ZWQvdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24tcmVzdWx0CisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xh
cmF0aW9uLWFycmF5LXR5cGUuanNvbi1yZXN1bHQKQEAgLTY4LDcgKzY4LDcgQEAgSW5zcGVjdG9y
QmFja2VuZC5hY3RpdmF0ZURvbWFpbigiRGVidWdnZXIiLCBudWxsKTsKIAogI2lmIEVOQUJMRShJ
TlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogCi0jaW5jbHVkZSAiVGVzdFByb3RvY29s
VHlwZXMuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KICNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgogCkBAIC0xMjQsMTEgKzEyNCwx
NCBAQCBwcml2YXRlOgogCiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVk
ZSA8dHVwbGU+CisjaW5jbHVkZSA8d3RmL0V4cGVjdGVkLmg+CisjaW5jbHVkZSA8d3RmL09wdGlv
bmFsLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNw
ZWN0b3IgewogCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKwogCiAKIApAQCAtMTY5LDkg
KzE3Miw3IEBAIHR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwogI2luY2x1ZGUgIlRlc3RCYWNr
ZW5kRGlzcGF0Y2hlcnMuaCIKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZy
b250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KICNpbmNsdWRlIDx3
dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKICNp
ZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKICNpbmNsdWRlICJUZXN0
QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCkBAIC0yMTksNiArMjIwLDcgQEAgbmFtZXNw
YWNlIEluc3BlY3RvciB7CiAKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5j
bHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CkBAIC0y
NjIsNyArMjY0LDYgQEAgY2xhc3MgRnJvbnRlbmRSb3V0ZXI7CiAjaW5jbHVkZSAiVGVzdEZyb250
ZW5kRGlzcGF0Y2hlcnMuaCIKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZy
b250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiBuYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKIApAQCAtMzAzLDcgKzMwNCw5IEBAIG5hbWVzcGFjZSBJbnNwZWN0b3Ig
ewogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90
b2NvbFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYv
SlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtMzMxLDcgKzMz
NCw3IEBAIHVzaW5nIEx1Y2t5TnVtYmVycyA9IEpTT046OkFycmF5T2Y8aW50PjsKIHVzaW5nIEJh
YnlOYW1lcyA9IEpTT046OkFycmF5T2Y8U3RyaW5nPjsKIHVzaW5nIE5ld09iamVjdHMgPSBKU09O
OjpBcnJheU9mPGludD47CiB1c2luZyBPbGRPYmplY3RzID0gSlNPTjo6QXJyYXlPZjxpbnQ+Owot
dXNpbmcgU3RvcFJlYXNvbnMgPSBKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRl
YnVnZ2VyOjpSZWFzb24+OwordXNpbmcgU3RvcFJlYXNvbnMgPSBKU09OOjpBcnJheU9mPFByb3Rv
Y29sOjpEZWJ1Z2dlcjo6UmVhc29uPjsKIH0gLy8gUnVudGltZQogLy8gRW5kIG9mIHR5cGVkZWZz
LgogCkBAIC0zNjUsNyArMzY4LDcgQEAgT3B0aW9uYWw8UHJvdG9jb2xFbnVtVHlwZT4gcGFyc2VF
bnVtVmFsdWVGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYpOwogCiAvLyBFbnVtcyBpbiB0aGUgJ0Rl
YnVnZ2VyJyBEb21haW4KIHRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRlYnVnZ2VyOjpSZWFzb24+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlBy
b3RvY29sOjpEZWJ1Z2dlcjo6UmVhc29uPihjb25zdCBTdHJpbmcmKTsKK09wdGlvbmFsPFByb3Rv
Y29sOjpEZWJ1Z2dlcjo6UmVhc29uPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8UHJvdG9jb2w6
OkRlYnVnZ2VyOjpSZWFzb24+KGNvbnN0IFN0cmluZyYpOwogCiB9IC8vIG5hbWVzcGFjZSBUZXN0
SGVscGVycwogCkBAIC00MTcsOCArNDIwLDcgQEAgc3RydWN0IERlZmF1bHRIYXNoPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpSZWFzb24+IDogSW50SGFzaDxJbnNwZWN0b3I6OlAKICNp
bmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAKLSNp
bmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Cisj
aW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKQEAg
LTQzOSwxNiArNDQxLDE2IEBAIFN0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSkg
ewogLy8gRW51bXMgaW4gdGhlICdEZWJ1Z2dlcicgRG9tYWluCiAKIHRlbXBsYXRlPD4KLU9wdGlv
bmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpSZWFzb24+IHBhcnNlRW51bVZhbHVl
RnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6UmVhc29uPihjb25zdCBT
dHJpbmcmIHByb3RvY29sU3RyaW5nKQorT3B0aW9uYWw8UHJvdG9jb2w6OkRlYnVnZ2VyOjpSZWFz
b24+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxQcm90b2NvbDo6RGVidWdnZXI6OlJlYXNvbj4o
Y29uc3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKIHsKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90
IGNvbnN0YW50VmFsdWVzW10gPSB7Ci0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2Nv
bDo6RGVidWdnZXI6OlJlYXNvbjo6RGllZCwKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlBy
b3RvY29sOjpEZWJ1Z2dlcjo6UmVhc29uOjpGYWludGVkLAotICAgICAgICAoc2l6ZV90KUluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpSZWFzb246Okh1bmdyeSwKKyAgICAgICAgKHNpemVf
dClQcm90b2NvbDo6RGVidWdnZXI6OlJlYXNvbjo6RGllZCwKKyAgICAgICAgKHNpemVfdClQcm90
b2NvbDo6RGVidWdnZXI6OlJlYXNvbjo6RmFpbnRlZCwKKyAgICAgICAgKHNpemVfdClQcm90b2Nv
bDo6RGVidWdnZXI6OlJlYXNvbjo6SHVuZ3J5LAogICAgIH07CiAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCAzOyArK2kpCiAgICAgICAgIGlmIChwcm90b2NvbFN0cmluZyA9PSBlbnVtX2NvbnN0
YW50X3ZhbHVlc1tjb25zdGFudFZhbHVlc1tpXV0pCi0gICAgICAgICAgICByZXR1cm4gKEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpSZWFzb24pY29uc3RhbnRWYWx1ZXNbaV07CisgICAg
ICAgICAgICByZXR1cm4gKFByb3RvY29sOjpEZWJ1Z2dlcjo6UmVhc29uKWNvbnN0YW50VmFsdWVz
W2ldOwogCiAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xh
cmF0aW9uLWVudW0tdHlwZS5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5q
c29uLXJlc3VsdAppbmRleCAzYTJjMjA1MjgzMDQ0ZTAwMDZiMzMxZWUzMTViMDQzN2E0ZmE1YmY5
Li45NTExNmJjNTBhYmYyNzk0MDY0NTkwNzEwZmNkM2UyNDZiZjBjNThiIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlw
ZS1kZWNsYXJhdGlvbi1lbnVtLXR5cGUuanNvbi1yZXN1bHQKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24t
ZW51bS10eXBlLmpzb24tcmVzdWx0CkBAIC02OSw3ICs2OSw3IEBAIEluc3BlY3RvckJhY2tlbmQu
YWN0aXZhdGVEb21haW4oIlJ1bnRpbWUiLCBudWxsKTsKIAogI2lmIEVOQUJMRShJTlNQRUNUT1Jf
QUxURVJOQVRFX0RJU1BBVENIRVJTKQogCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIK
KyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgogCkBAIC0xMjUsMTEgKzEyNSwxNCBAQCBwcml2
YXRlOgogCiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8dHVwbGU+
CisjaW5jbHVkZSA8d3RmL0V4cGVjdGVkLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAj
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3Igewog
Ci10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKwogCiAKIApAQCAtMTcwLDkgKzE3Myw3IEBA
IHR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwogI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0
Y2hlcnMuaCIKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91
dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJE
ZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKICNpZiBFTkFCTEUo
SU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKICNpbmNsdWRlICJUZXN0QWx0ZXJuYXRl
QmFja2VuZERpc3BhdGNoZXJzLmgiCkBAIC0yMjAsNiArMjIxLDcgQEAgbmFtZXNwYWNlIEluc3Bl
Y3RvciB7CiAKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8d3Rm
L0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CkBAIC0yNjMsNyArMjY1
LDYgQEAgY2xhc3MgRnJvbnRlbmRSb3V0ZXI7CiAjaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0
Y2hlcnMuaCIKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91
dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVj
dG9yIHsKIApAQCAtMzA0LDcgKzMwNSw5IEBAIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogI3ByYWdt
YSBvbmNlCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVz
Lmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVl
cy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtMzYyLDkgKzM2NSw5IEBAIE9w
dGlvbmFsPFByb3RvY29sRW51bVR5cGU+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZyhjb25zdCBT
dHJpbmcmKTsKIAogLy8gRW51bXMgaW4gdGhlICdSdW50aW1lJyBEb21haW4KIHRlbXBsYXRlPD4K
LU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkZhcm1BbmltYWxzPiBwYXJz
ZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RmFybUFu
aW1hbHM+KGNvbnN0IFN0cmluZyYpOworT3B0aW9uYWw8UHJvdG9jb2w6OlJ1bnRpbWU6OkZhcm1B
bmltYWxzPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8UHJvdG9jb2w6OlJ1bnRpbWU6OkZhcm1B
bmltYWxzPihjb25zdCBTdHJpbmcmKTsKIHRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlJ1bnRpbWU6OlR3b0xlZ2dlZEFuaW1hbHM+IHBhcnNlRW51bVZhbHVlRnJvbVN0
cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpUd29MZWdnZWRBbmltYWxzPihjb25z
dCBTdHJpbmcmKTsKK09wdGlvbmFsPFByb3RvY29sOjpSdW50aW1lOjpUd29MZWdnZWRBbmltYWxz
PiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8UHJvdG9jb2w6OlJ1bnRpbWU6OlR3b0xlZ2dlZEFu
aW1hbHM+KGNvbnN0IFN0cmluZyYpOwogCiB9IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycwogCkBA
IC00MTgsOCArNDIxLDcgQEAgc3RydWN0IERlZmF1bHRIYXNoPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlJ1bnRpbWU6OlR3b0xlZ2dlZEFuaW1hbHM+IDogSW50SGFzaDxJbnMKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAKLSNpbmNsdWRlIDx3dGYv
T3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3Rm
L0Fzc2VydGlvbnMuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKQEAgLTQ0NCwzMyArNDQ2
LDMzIEBAIFN0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSkgewogLy8gRW51bXMg
aW4gdGhlICdSdW50aW1lJyBEb21haW4KIAogdGVtcGxhdGU8PgotT3B0aW9uYWw8SW5zcGVjdG9y
OjpQcm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHM+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmlu
ZzxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpGYXJtQW5pbWFscz4oY29uc3QgU3RyaW5n
JiBwcm90b2NvbFN0cmluZykKK09wdGlvbmFsPFByb3RvY29sOjpSdW50aW1lOjpGYXJtQW5pbWFs
cz4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPFByb3RvY29sOjpSdW50aW1lOjpGYXJtQW5pbWFs
cz4oY29uc3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKIHsKICAgICBzdGF0aWMgY29uc3Qgc2l6
ZV90IGNvbnN0YW50VmFsdWVzW10gPSB7Ci0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90
b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHM6OlBpZ3MsCi0gICAgICAgIChzaXplX3QpSW5zcGVj
dG9yOjpQcm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHM6OkNvd3MsCi0gICAgICAgIChzaXpl
X3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHM6OkNhdHMsCi0gICAg
ICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHM6Okhl
bnMsCisgICAgICAgIChzaXplX3QpUHJvdG9jb2w6OlJ1bnRpbWU6OkZhcm1BbmltYWxzOjpQaWdz
LAorICAgICAgICAoc2l6ZV90KVByb3RvY29sOjpSdW50aW1lOjpGYXJtQW5pbWFsczo6Q293cywK
KyAgICAgICAgKHNpemVfdClQcm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHM6OkNhdHMsCisg
ICAgICAgIChzaXplX3QpUHJvdG9jb2w6OlJ1bnRpbWU6OkZhcm1BbmltYWxzOjpIZW5zLAogICAg
IH07CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCA0OyArK2kpCiAgICAgICAgIGlmIChwcm90
b2NvbFN0cmluZyA9PSBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb25zdGFudFZhbHVlc1tpXV0pCi0g
ICAgICAgICAgICByZXR1cm4gKEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkZhcm1Bbmlt
YWxzKWNvbnN0YW50VmFsdWVzW2ldOworICAgICAgICAgICAgcmV0dXJuIChQcm90b2NvbDo6UnVu
dGltZTo6RmFybUFuaW1hbHMpY29uc3RhbnRWYWx1ZXNbaV07CiAKICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwogfQogCiB0ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpS
dW50aW1lOjpUd29MZWdnZWRBbmltYWxzPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVj
dG9yOjpQcm90b2NvbDo6UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFscz4oY29uc3QgU3RyaW5nJiBw
cm90b2NvbFN0cmluZykKK09wdGlvbmFsPFByb3RvY29sOjpSdW50aW1lOjpUd29MZWdnZWRBbmlt
YWxzPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8UHJvdG9jb2w6OlJ1bnRpbWU6OlR3b0xlZ2dl
ZEFuaW1hbHM+KGNvbnN0IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcpCiB7CiAgICAgc3RhdGljIGNv
bnN0IHNpemVfdCBjb25zdGFudFZhbHVlc1tdID0gewotICAgICAgICAoc2l6ZV90KUluc3BlY3Rv
cjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlR3b0xlZ2dlZEFuaW1hbHM6OkR1Y2tzLAotICAgICAgICAo
c2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlR3b0xlZ2dlZEFuaW1hbHM6Okhl
bnMsCi0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6VHdvTGVn
Z2VkQW5pbWFsczo6Q3Jvd3MsCi0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6
UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFsczo6RmxhbWluZ29zLAorICAgICAgICAoc2l6ZV90KVBy
b3RvY29sOjpSdW50aW1lOjpUd29MZWdnZWRBbmltYWxzOjpEdWNrcywKKyAgICAgICAgKHNpemVf
dClQcm90b2NvbDo6UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFsczo6SGVucywKKyAgICAgICAgKHNp
emVfdClQcm90b2NvbDo6UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFsczo6Q3Jvd3MsCisgICAgICAg
IChzaXplX3QpUHJvdG9jb2w6OlJ1bnRpbWU6OlR3b0xlZ2dlZEFuaW1hbHM6OkZsYW1pbmdvcywK
ICAgICB9OwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgNDsgKytpKQogICAgICAgICBpZiAo
cHJvdG9jb2xTdHJpbmcgPT0gZW51bV9jb25zdGFudF92YWx1ZXNbY29uc3RhbnRWYWx1ZXNbaV1d
KQotICAgICAgICAgICAgcmV0dXJuIChJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpUd29M
ZWdnZWRBbmltYWxzKWNvbnN0YW50VmFsdWVzW2ldOworICAgICAgICAgICAgcmV0dXJuIChQcm90
b2NvbDo6UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFscyljb25zdGFudFZhbHVlc1tpXTsKIAogICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1vYmpl
Y3QtdHlwZS5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24tcmVz
dWx0CmluZGV4IDMyOGZlZDIzZGM0Y2E3ZjE4ODU5MGI2MzQ0ZDViZjdlNDczZGRjMDMuLmJhOWYx
N2M2MjUwZGNlMDY4Y2Y5NDY1NTk0NzBkZDQ1YjYxNzc0MDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xh
cmF0aW9uLW9iamVjdC10eXBlLmpzb24tcmVzdWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLW9iamVj
dC10eXBlLmpzb24tcmVzdWx0CkBAIC03MCw3ICs3MCw3IEBAIEluc3BlY3RvckJhY2tlbmQuYWN0
aXZhdGVEb21haW4oIkRhdGFiYXNlIiwgbnVsbCk7CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FM
VEVSTkFURV9ESVNQQVRDSEVSUykKIAotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCisj
aW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KIApAQCAtMTI2LDExICsxMjYsMTQgQEAgcHJpdmF0
ZToKIAogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHR1cGxlPgor
I2luY2x1ZGUgPHd0Zi9FeHBlY3RlZC5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAot
dHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKIAogCiAKQEAgLTE3MSw5ICsxNzQsNyBAQCB0
eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKICNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNo
ZXJzLmgiCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRl
ci5oPgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVz
dHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiAjaWYgRU5BQkxFKElO
U1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAjaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJh
Y2tlbmREaXNwYXRjaGVycy5oIgpAQCAtMjIxLDYgKzIyMiw3IEBAIG5hbWVzcGFjZSBJbnNwZWN0
b3IgewogCiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPHd0Zi9K
U09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewpAQCAtMjY0LDcgKzI2Niw2
IEBAIGNsYXNzIEZyb250ZW5kUm91dGVyOwogI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNo
ZXJzLmgiCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRl
ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3Rv
ciB7CiAKQEAgLTMwNSw3ICszMDYsOSBAQCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKICNwcmFnbWEg
b25jZQogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5o
PgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMu
aD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKQEAgLTMzMyw3ICszMzYsNyBAQCBjbGFz
cyBQYXJhbWV0ZXJCdW5kbGU7CiAKIC8vIFR5cGVkZWZzLgogbmFtZXNwYWNlIERhdGFiYXNlIHsK
LXVzaW5nIEVycm9yTGlzdCA9IEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0
YWJhc2U6OkVycm9yPjsKK3VzaW5nIEVycm9yTGlzdCA9IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6
OkRhdGFiYXNlOjpFcnJvcj47CiB9IC8vIERhdGFiYXNlCiAvLyBFbmQgb2YgdHlwZWRlZnMuCiAK
QEAgLTM1MSw3ICszNTQsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBTdHJpbmcgZ2V0RW51bUNv
bnN0YW50VmFsdWUoVCBlbnVtVmFsdWUpCiBuYW1lc3BhY2UgRGF0YWJhc2UgewogCiAvKiBEYXRh
YmFzZSBlcnJvci4gKi8KLWNsYXNzIEVycm9yIDogcHVibGljIEpTT046Ok9iamVjdEJhc2Ugewor
Y2xhc3MgRXJyb3IgZmluYWwgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7CiBwdWJsaWM6CiAg
ICAgZW51bSB7CiAgICAgICAgIE5vRmllbGRzU2V0ID0gMCwKQEAgLTM3OCwxNyArMzgxLDE3IEBA
IHB1YmxpYzoKICAgICAgICAgZnJpZW5kIGNsYXNzIEVycm9yOwogICAgIHB1YmxpYzoKIAotICAg
ICAgICBCdWlsZGVyPFNUQVRFIHwgTWVzc2FnZVNldD4mIHNldE1lc3NhZ2UoY29uc3QgU3RyaW5n
JiB2YWx1ZSkKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IE1lc3NhZ2VTZXQ+JiBzZXRNZXNzYWdl
KGNvbnN0IFN0cmluZyYgaW5fbWVzc2FnZSkKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoIShTVEFURSAmIE1lc3NhZ2VTZXQpLCBwcm9wZXJ0eV9tZXNzYWdlX2FscmVhZHlf
c2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm1lc3NhZ2UiX3MsIHZhbHVl
KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm1lc3NhZ2UiX3MsIGluX21lc3Nh
Z2UpOwogICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxNZXNzYWdlU2V0PigpOwogICAgICAg
ICB9CiAKLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IENvZGVTZXQ+JiBzZXRDb2RlKGludCB2YWx1
ZSkKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IENvZGVTZXQ+JiBzZXRDb2RlKGludCBpbl9jb2Rl
KQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQ29kZVNl
dCksIHByb3BlcnR5X2NvZGVfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNl
dEludGVnZXIoImNvZGUiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRJbnRl
Z2VyKCJjb2RlIl9zLCBpbl9jb2RlKTsKICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Q29k
ZVNldD4oKTsKICAgICAgICAgfQogCkBAIC00MjQsMTMgKzQyNywxNCBAQCBlbnVtIGNsYXNzIE1v
dXNlQnV0dG9uIHsKICAgICBSaWdodCA9IDMsCiB9OyAvLyBlbnVtIGNsYXNzIE1vdXNlQnV0dG9u
CiAKLWNsYXNzIE9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlIDogcHVibGljIEpTT046Ok9iamVjdEJh
c2UgeworY2xhc3MgT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGUgZmluYWwgOiBwdWJsaWMgSlNPTjo6
T2JqZWN0QmFzZSB7CiBwdWJsaWM6CiAgICAgLy8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAn
ZGlyZWN0aW9uYWxpdHknIHdoaWxlIGdlbmVyYXRpbmcgT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGUu
CiAgICAgZW51bSBjbGFzcyBEaXJlY3Rpb25hbGl0eSB7CiAgICAgICAgIExUUiA9IDQsCiAgICAg
ICAgIFJUTCA9IDUsCiAgICAgfTsgLy8gZW51bSBjbGFzcyBEaXJlY3Rpb25hbGl0eQorCiAgICAg
ZW51bSB7CiAgICAgICAgIE5vRmllbGRzU2V0ID0gMCwKICAgICAgICAgQWxsRmllbGRzU2V0ID0g
MApAQCAtNDc1LDU5ICs0NzksNjAgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gQnVpbGRlcjxO
b0ZpZWxkc1NldD4oSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSk7CiAgICAgfQogCi0gICAgdm9pZCBz
ZXRDb2x1bW5OYW1lcyhSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiB2YWx1ZSkKKyAgICB2
b2lkIHNldENvbHVtbk5hbWVzKFJlZjxKU09OOjpBcnJheU9mPFN0cmluZz4+JiYgaW5fb3B0X2Nv
bHVtbk5hbWVzKQogICAgIHsKLSAgICAgICAgSlNPTjo6T2JqZWN0QmFzZTo6c2V0QXJyYXkoImNv
bHVtbk5hbWVzIl9zLCBXVEZNb3ZlKHZhbHVlKSk7CisgICAgICAgIEpTT046Ok9iamVjdEJhc2U6
OnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgV1RGTW92ZShpbl9vcHRfY29sdW1uTmFtZXMpKTsK
ICAgICB9CiAKLSAgICB2b2lkIHNldEJ1dHRvbnMoUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVj
dG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9uPj4gdmFsdWUpCisgICAgdm9pZCBz
ZXRCdXR0b25zKFJlZjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpEYXRhYmFzZTo6TW91c2VCdXR0
b24+PiYmIGluX29wdF9idXR0b25zKQogICAgIHsKLSAgICAgICAgSlNPTjo6T2JqZWN0QmFzZTo6
c2V0QXJyYXkoImJ1dHRvbnMiX3MsIFdURk1vdmUodmFsdWUpKTsKKyAgICAgICAgSlNPTjo6T2Jq
ZWN0QmFzZTo6c2V0QXJyYXkoImJ1dHRvbnMiX3MsIFdURk1vdmUoaW5fb3B0X2J1dHRvbnMpKTsK
ICAgICB9CiAKLSAgICB2b2lkIHNldERpcmVjdGlvbmFsaXR5KERpcmVjdGlvbmFsaXR5IHZhbHVl
KQorICAgIHZvaWQgc2V0RGlyZWN0aW9uYWxpdHkoRGlyZWN0aW9uYWxpdHkgaW5fb3B0X2RpcmVj
dGlvbmFsaXR5KQogICAgIHsKLSAgICAgICAgSlNPTjo6T2JqZWN0QmFzZTo6c2V0U3RyaW5nKCJk
aXJlY3Rpb25hbGl0eSJfcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVu
dW1Db25zdGFudFZhbHVlKHZhbHVlKSk7CisgICAgICAgIEpTT046Ok9iamVjdEJhc2U6OnNldFN0
cmluZygiZGlyZWN0aW9uYWxpdHkiX3MsIFByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNv
bnN0YW50VmFsdWUoaW5fb3B0X2RpcmVjdGlvbmFsaXR5KSk7CiAgICAgfQogCi0gICAgdm9pZCBz
ZXROb3Rlcyhjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgIHZvaWQgc2V0Tm90ZXMoY29uc3QgU3Ry
aW5nJiBpbl9vcHRfbm90ZXMpCiAgICAgewotICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXRT
dHJpbmcoIm5vdGVzIl9zLCB2YWx1ZSk7CisgICAgICAgIEpTT046Ok9iamVjdEJhc2U6OnNldFN0
cmluZygibm90ZXMiX3MsIGluX29wdF9ub3Rlcyk7CiAgICAgfQogCi0gICAgdm9pZCBzZXRUaW1l
c3RhbXAoZG91YmxlIHZhbHVlKQorICAgIHZvaWQgc2V0VGltZXN0YW1wKGRvdWJsZSBpbl9vcHRf
dGltZXN0YW1wKQogICAgIHsKLSAgICAgICAgSlNPTjo6T2JqZWN0QmFzZTo6c2V0RG91YmxlKCJ0
aW1lc3RhbXAiX3MsIHZhbHVlKTsKKyAgICAgICAgSlNPTjo6T2JqZWN0QmFzZTo6c2V0RG91Ymxl
KCJ0aW1lc3RhbXAiX3MsIGluX29wdF90aW1lc3RhbXApOwogICAgIH0KIAotICAgIHZvaWQgc2V0
VmFsdWVzKFJlZlB0cjxKU09OOjpPYmplY3Q+IHZhbHVlKQorICAgIHZvaWQgc2V0VmFsdWVzKFJl
ZjxKU09OOjpPYmplY3Q+JiYgaW5fb3B0X3ZhbHVlcykKICAgICB7Ci0gICAgICAgIEpTT046Ok9i
amVjdEJhc2U6OnNldE9iamVjdCgidmFsdWVzIl9zLCBXVEZNb3ZlKHZhbHVlKSk7CisgICAgICAg
IEpTT046Ok9iamVjdEJhc2U6OnNldE9iamVjdCgidmFsdWVzIl9zLCBXVEZNb3ZlKGluX29wdF92
YWx1ZXMpKTsKICAgICB9CiAKLSAgICB2b2lkIHNldFBheWxvYWQoUmVmUHRyPEpTT046OlZhbHVl
PiB2YWx1ZSkKKyAgICB2b2lkIHNldFBheWxvYWQoUmVmPEpTT046OlZhbHVlPiYmIGluX29wdF9w
YXlsb2FkKQogICAgIHsKLSAgICAgICAgSlNPTjo6T2JqZWN0QmFzZTo6c2V0VmFsdWUoInBheWxv
YWQiX3MsIFdURk1vdmUodmFsdWUpKTsKKyAgICAgICAgSlNPTjo6T2JqZWN0QmFzZTo6c2V0VmFs
dWUoInBheWxvYWQiX3MsIFdURk1vdmUoaW5fb3B0X3BheWxvYWQpKTsKICAgICB9CiAKLSAgICB2
b2lkIHNldEVycm9yKFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+
IHZhbHVlKQorICAgIHZvaWQgc2V0RXJyb3IoUmVmPFByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+
JiYgaW5fb3B0X2Vycm9yKQogICAgIHsKLSAgICAgICAgSlNPTjo6T2JqZWN0QmFzZTo6c2V0T2Jq
ZWN0KCJlcnJvciJfcywgV1RGTW92ZSh2YWx1ZSkpOworICAgICAgICBKU09OOjpPYmplY3RCYXNl
OjpzZXRPYmplY3QoImVycm9yIl9zLCBXVEZNb3ZlKGluX29wdF9lcnJvcikpOwogICAgIH0KIAot
ICAgIHZvaWQgc2V0RXJyb3JMaXN0KFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFz
ZTo6RXJyb3JMaXN0PiB2YWx1ZSkKKyAgICB2b2lkIHNldEVycm9yTGlzdChSZWY8UHJvdG9jb2w6
OkRhdGFiYXNlOjpFcnJvckxpc3Q+JiYgaW5fb3B0X2Vycm9yTGlzdCkKICAgICB7Ci0gICAgICAg
IEpTT046Ok9iamVjdEJhc2U6OnNldEFycmF5KCJlcnJvckxpc3QiX3MsIFdURk1vdmUodmFsdWUp
KTsKKyAgICAgICAgSlNPTjo6T2JqZWN0QmFzZTo6c2V0QXJyYXkoImVycm9yTGlzdCJfcywgV1RG
TW92ZShpbl9vcHRfZXJyb3JMaXN0KSk7CiAgICAgfQogfTsKIAotY2xhc3MgUGFyYW1ldGVyQnVu
ZGxlIDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgeworY2xhc3MgUGFyYW1ldGVyQnVuZGxlIGZp
bmFsIDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgewogcHVibGljOgogICAgIC8vIE5hbWVkIGFm
dGVyIHByb3BlcnR5IG5hbWUgJ2RpcmVjdGlvbmFsaXR5JyB3aGlsZSBnZW5lcmF0aW5nIFBhcmFt
ZXRlckJ1bmRsZS4KICAgICBlbnVtIGNsYXNzIERpcmVjdGlvbmFsaXR5IHsKICAgICAgICAgTFRS
ID0gNCwKICAgICAgICAgUlRMID0gNSwKICAgICB9OyAvLyBlbnVtIGNsYXNzIERpcmVjdGlvbmFs
aXR5CisKICAgICBlbnVtIHsKICAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAogICAgICAgICBDb2x1
bW5OYW1lc1NldCA9IDEgPDwgMCwKQEAgLTU2MCw2NiArNTY1LDY2IEBAIHB1YmxpYzoKICAgICAg
ICAgZnJpZW5kIGNsYXNzIFBhcmFtZXRlckJ1bmRsZTsKICAgICBwdWJsaWM6CiAKLSAgICAgICAg
QnVpbGRlcjxTVEFURSB8IENvbHVtbk5hbWVzU2V0PiYgc2V0Q29sdW1uTmFtZXMoUmVmUHRyPEpT
T046OkFycmF5T2Y8U3RyaW5nPj4gdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDb2x1
bW5OYW1lc1NldD4mIHNldENvbHVtbk5hbWVzKFJlZjxKU09OOjpBcnJheU9mPFN0cmluZz4+JiYg
aW5fY29sdW1uTmFtZXMpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEo
U1RBVEUgJiBDb2x1bW5OYW1lc1NldCksIHByb3BlcnR5X2NvbHVtbk5hbWVzX2FscmVhZHlfc2V0
KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIHZhbHVl
KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIFdURk1v
dmUoaW5fY29sdW1uTmFtZXMpKTsKICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Q29sdW1u
TmFtZXNTZXQ+KCk7CiAgICAgICAgIH0KIAotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQnV0dG9u
c1NldD4mIHNldEJ1dHRvbnMoUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9uPj4gdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8U1RBVEUg
fCBCdXR0b25zU2V0PiYgc2V0QnV0dG9ucyhSZWY8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6RGF0
YWJhc2U6Ok1vdXNlQnV0dG9uPj4mJiBpbl9idXR0b25zKQogICAgICAgICB7CiAgICAgICAgICAg
ICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQnV0dG9uc1NldCksIHByb3BlcnR5X2J1dHRvbnNf
YWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldEFycmF5KCJidXR0b25zIl9z
LCB2YWx1ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0QXJyYXkoImJ1dHRvbnMiX3MsIFdU
Rk1vdmUoaW5fYnV0dG9ucykpOwogICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxCdXR0b25z
U2V0PigpOwogICAgICAgICB9CiAKLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IERpcmVjdGlvbmFs
aXR5U2V0PiYgc2V0RGlyZWN0aW9uYWxpdHkoRGlyZWN0aW9uYWxpdHkgdmFsdWUpCisgICAgICAg
IEJ1aWxkZXI8U1RBVEUgfCBEaXJlY3Rpb25hbGl0eVNldD4mIHNldERpcmVjdGlvbmFsaXR5KERp
cmVjdGlvbmFsaXR5IGluX2RpcmVjdGlvbmFsaXR5KQogICAgICAgICB7CiAgICAgICAgICAgICBD
T01QSUxFX0FTU0VSVCghKFNUQVRFICYgRGlyZWN0aW9uYWxpdHlTZXQpLCBwcm9wZXJ0eV9kaXJl
Y3Rpb25hbGl0eV9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5n
KCJkaXJlY3Rpb25hbGl0eSJfcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6Omdl
dEVudW1Db25zdGFudFZhbHVlKHZhbHVlKSk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3Ry
aW5nKCJkaXJlY3Rpb25hbGl0eSJfcywgUHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29u
c3RhbnRWYWx1ZShpbl9kaXJlY3Rpb25hbGl0eSkpOwogICAgICAgICAgICAgcmV0dXJuIGNhc3RT
dGF0ZTxEaXJlY3Rpb25hbGl0eVNldD4oKTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1aWxkZXI8
U1RBVEUgfCBOb3Rlc1NldD4mIHNldE5vdGVzKGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgICAg
IEJ1aWxkZXI8U1RBVEUgfCBOb3Rlc1NldD4mIHNldE5vdGVzKGNvbnN0IFN0cmluZyYgaW5fbm90
ZXMpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBOb3Rl
c1NldCksIHByb3BlcnR5X25vdGVzX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0
LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0
U3RyaW5nKCJub3RlcyJfcywgaW5fbm90ZXMpOwogICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0
ZTxOb3Rlc1NldD4oKTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBUaW1l
c3RhbXBTZXQ+JiBzZXRUaW1lc3RhbXAoZG91YmxlIHZhbHVlKQorICAgICAgICBCdWlsZGVyPFNU
QVRFIHwgVGltZXN0YW1wU2V0PiYgc2V0VGltZXN0YW1wKGRvdWJsZSBpbl90aW1lc3RhbXApCiAg
ICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBUaW1lc3RhbXBT
ZXQpLCBwcm9wZXJ0eV90aW1lc3RhbXBfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1
bHQtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICBtX3Jlc3Vs
dC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsIGluX3RpbWVzdGFtcCk7CiAgICAgICAgICAgICBy
ZXR1cm4gY2FzdFN0YXRlPFRpbWVzdGFtcFNldD4oKTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1
aWxkZXI8U1RBVEUgfCBWYWx1ZXNTZXQ+JiBzZXRWYWx1ZXMoUmVmUHRyPEpTT046Ok9iamVjdD4g
dmFsdWUpCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBWYWx1ZXNTZXQ+JiBzZXRWYWx1ZXMoUmVm
PEpTT046Ok9iamVjdD4mJiBpbl92YWx1ZXMpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJ
TEVfQVNTRVJUKCEoU1RBVEUgJiBWYWx1ZXNTZXQpLCBwcm9wZXJ0eV92YWx1ZXNfYWxyZWFkeV9z
ZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldE9iamVjdCgidmFsdWVzIl9zLCB2YWx1ZSk7
CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIFdURk1vdmUoaW5f
dmFsdWVzKSk7CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFZhbHVlc1NldD4oKTsKICAg
ICAgICAgfQogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBQYXlsb2FkU2V0PiYgc2V0UGF5bG9h
ZChSZWZQdHI8SlNPTjo6VmFsdWU+IHZhbHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRFIHwgUGF5
bG9hZFNldD4mIHNldFBheWxvYWQoUmVmPEpTT046OlZhbHVlPiYmIGluX3BheWxvYWQpCiAgICAg
ICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBQYXlsb2FkU2V0KSwg
cHJvcGVydHlfcGF5bG9hZF9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0
VmFsdWUoInBheWxvYWQiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRWYWx1
ZSgicGF5bG9hZCJfcywgV1RGTW92ZShpbl9wYXlsb2FkKSk7CiAgICAgICAgICAgICByZXR1cm4g
Y2FzdFN0YXRlPFBheWxvYWRTZXQ+KCk7CiAgICAgICAgIH0KIAotICAgICAgICBCdWlsZGVyPFNU
QVRFIHwgRXJyb3JTZXQ+JiBzZXRFcnJvcihSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0
YWJhc2U6OkVycm9yPiB2YWx1ZSkKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IEVycm9yU2V0PiYg
c2V0RXJyb3IoUmVmPFByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+JiYgaW5fZXJyb3IpCiAgICAg
ICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBFcnJvclNldCksIHBy
b3BlcnR5X2Vycm9yX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRPYmpl
Y3QoImVycm9yIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0KCJl
cnJvciJfcywgV1RGTW92ZShpbl9lcnJvcikpOwogICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0
ZTxFcnJvclNldD4oKTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBFcnJv
ckxpc3RTZXQ+JiBzZXRFcnJvckxpc3QoUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFi
YXNlOjpFcnJvckxpc3Q+IHZhbHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRFIHwgRXJyb3JMaXN0
U2V0PiYgc2V0RXJyb3JMaXN0KFJlZjxQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yTGlzdD4mJiBp
bl9lcnJvckxpc3QpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RB
VEUgJiBFcnJvckxpc3RTZXQpLCBwcm9wZXJ0eV9lcnJvckxpc3RfYWxyZWFkeV9zZXQpOwotICAg
ICAgICAgICAgbV9yZXN1bHQtPnNldEFycmF5KCJlcnJvckxpc3QiX3MsIHZhbHVlKTsKKyAgICAg
ICAgICAgIG1fcmVzdWx0LT5zZXRBcnJheSgiZXJyb3JMaXN0Il9zLCBXVEZNb3ZlKGluX2Vycm9y
TGlzdCkpOwogICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxFcnJvckxpc3RTZXQ+KCk7CiAg
ICAgICAgIH0KIApAQCAtNjU1LDcgKzY2MCw3IEBAIHB1YmxpYzoKIH07CiAKIC8qIENvbmZsaWN0
ZWQgbmFtZXMgbWF5IGNhdXNlIGdlbmVyYXRlZCBnZXR0ZXJzL3NldHRlcnMgdG8gY2xhc2ggd2l0
aCBidWlsdC1pbiBJbnNwZWN0b3JPYmplY3QgbWV0aG9kcy4gKi8KLWNsYXNzIE9iamVjdFdpdGhQ
cm9wZXJ0eU5hbWVDb25mbGljdHMgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7CitjbGFzcyBP
YmplY3RXaXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzIGZpbmFsIDogcHVibGljIEpTT046Ok9iamVj
dEJhc2UgewogcHVibGljOgogICAgIGVudW0gewogICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCkBA
IC02ODUsMzggKzY5MCwzOCBAQCBwdWJsaWM6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBPYmplY3RX
aXRoUHJvcGVydHlOYW1lQ29uZmxpY3RzOwogICAgIHB1YmxpYzoKIAotICAgICAgICBCdWlsZGVy
PFNUQVRFIHwgSW50ZWdlclNldD4mIHNldEludGVnZXIoY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAg
ICAgICAgQnVpbGRlcjxTVEFURSB8IEludGVnZXJTZXQ+JiBzZXRJbnRlZ2VyKGNvbnN0IFN0cmlu
ZyYgaW5faW50ZWdlcikKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShT
VEFURSAmIEludGVnZXJTZXQpLCBwcm9wZXJ0eV9pbnRlZ2VyX2FscmVhZHlfc2V0KTsKLSAgICAg
ICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoImludGVnZXIiX3MsIHZhbHVlKTsKKyAgICAgICAg
ICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoImludGVnZXIiX3MsIGluX2ludGVnZXIpOwogICAgICAg
ICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxJbnRlZ2VyU2V0PigpOwogICAgICAgICB9CiAKLSAgICAg
ICAgQnVpbGRlcjxTVEFURSB8IEFycmF5U2V0PiYgc2V0QXJyYXkoY29uc3QgU3RyaW5nJiB2YWx1
ZSkKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IEFycmF5U2V0PiYgc2V0QXJyYXkoY29uc3QgU3Ry
aW5nJiBpbl9hcnJheSkKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShT
VEFURSAmIEFycmF5U2V0KSwgcHJvcGVydHlfYXJyYXlfYWxyZWFkeV9zZXQpOwotICAgICAgICAg
ICAgbV9yZXN1bHQtPnNldFN0cmluZygiYXJyYXkiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIG1f
cmVzdWx0LT5zZXRTdHJpbmcoImFycmF5Il9zLCBpbl9hcnJheSk7CiAgICAgICAgICAgICByZXR1
cm4gY2FzdFN0YXRlPEFycmF5U2V0PigpOwogICAgICAgICB9CiAKLSAgICAgICAgQnVpbGRlcjxT
VEFURSB8IFN0cmluZ1NldD4mIHNldFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgICAg
ICBCdWlsZGVyPFNUQVRFIHwgU3RyaW5nU2V0PiYgc2V0U3RyaW5nKGNvbnN0IFN0cmluZyYgaW5f
c3RyaW5nKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYg
U3RyaW5nU2V0KSwgcHJvcGVydHlfc3RyaW5nX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1f
cmVzdWx0LT5zZXRTdHJpbmcoInN0cmluZyJfcywgdmFsdWUpOworICAgICAgICAgICAgbV9yZXN1
bHQtPnNldFN0cmluZygic3RyaW5nIl9zLCBpbl9zdHJpbmcpOwogICAgICAgICAgICAgcmV0dXJu
IGNhc3RTdGF0ZTxTdHJpbmdTZXQ+KCk7CiAgICAgICAgIH0KIAotICAgICAgICBCdWlsZGVyPFNU
QVRFIHwgVmFsdWVTZXQ+JiBzZXRWYWx1ZShjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgICAgICBC
dWlsZGVyPFNUQVRFIHwgVmFsdWVTZXQ+JiBzZXRWYWx1ZShjb25zdCBTdHJpbmcmIGluX3ZhbHVl
KQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVmFsdWVT
ZXQpLCBwcm9wZXJ0eV92YWx1ZV9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+
c2V0U3RyaW5nKCJ2YWx1ZSJfcywgdmFsdWUpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0
cmluZygidmFsdWUiX3MsIGluX3ZhbHVlKTsKICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8
VmFsdWVTZXQ+KCk7CiAgICAgICAgIH0KIAotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgT2JqZWN0
U2V0PiYgc2V0T2JqZWN0KGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8U1RB
VEUgfCBPYmplY3RTZXQ+JiBzZXRPYmplY3QoY29uc3QgU3RyaW5nJiBpbl9vYmplY3QpCiAgICAg
ICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBPYmplY3RTZXQpLCBw
cm9wZXJ0eV9vYmplY3RfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0
cmluZygib2JqZWN0Il9zLCB2YWx1ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5n
KCJvYmplY3QiX3MsIGluX29iamVjdCk7CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE9i
amVjdFNldD4oKTsKICAgICAgICAgfQogCkBAIC03NDcsMTcgKzc1Miw2NiBAQCBwdWJsaWM6CiAg
ICAgfQogfTsKIAorLyogQW4gb3BlbiBvYmplY3QgdGhhdCBkb2Vzbid0IGhhdmUgYW55IHByZWRl
ZmluZWQgZmllbGRzLiAqLworY2xhc3MgRHVtbXlPYmplY3QgZmluYWwgOiBwdWJsaWMgSlNPTjo6
T2JqZWN0QmFzZSB7CitwdWJsaWM6CisgICAgZW51bSB7CisgICAgICAgIE5vRmllbGRzU2V0ID0g
MCwKKyAgICAgICAgQWxsRmllbGRzU2V0ID0gMAorICAgIH07CisKKyAgICB0ZW1wbGF0ZTxpbnQg
U1RBVEU+CisgICAgY2xhc3MgQnVpbGRlciB7CisgICAgcHJpdmF0ZToKKyAgICAgICAgUmVmUHRy
PEpTT046Ok9iamVjdD4gbV9yZXN1bHQ7CisKKyAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1
aWxkZXI8U1RBVEUgfCBTVEVQPiYgY2FzdFN0YXRlKCkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuICpyZWludGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOwor
ICAgICAgICB9CisKKyAgICAgICAgQnVpbGRlcihSZWY8LypEdW1teU9iamVjdCovSlNPTjo6T2Jq
ZWN0PiYmIG9iamVjdCkKKyAgICAgICAgICAgIDogbV9yZXN1bHQoV1RGTW92ZShvYmplY3QpKQor
ICAgICAgICB7CisgICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1Nl
dCwgYnVpbGRlcl9jcmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKKyAgICAgICAgfQorICAgICAg
ICBmcmllbmQgY2xhc3MgRHVtbXlPYmplY3Q7CisgICAgcHVibGljOgorCisgICAgICAgIFJlZjxE
dW1teU9iamVjdD4gcmVsZWFzZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNT
RVJUKFNUQVRFID09IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CisgICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoRHVtbXlPYmplY3QpID09IHNpemVvZihKU09OOjpP
YmplY3QpLCBjYW5ub3RfY2FzdCk7CisKKyAgICAgICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IGpz
b25SZXN1bHQgPSBtX3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOworICAgICAgICAgICAgYXV0byBy
ZXN1bHQgPSBXVEZNb3ZlKCpyZWludGVycHJldF9jYXN0PFJlZjxEdW1teU9iamVjdD4qPigmanNv
blJlc3VsdCkpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgIH07
CisKKyAgICAvKgorICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKKyAgICAgKiBSZWY8RHVt
bXlPYmplY3Q+IHJlc3VsdCA9IER1bW15T2JqZWN0OjpjcmVhdGUoKQorICAgICAqICAgICAucmVs
ZWFzZSgpOworICAgICAqLworICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUo
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEpTT046Ok9iamVj
dDo6Y3JlYXRlKCkpOworICAgIH0KK307CisKIH0gLy8gRGF0YWJhc2UKIAogbmFtZXNwYWNlIFRl
c3QgewogCi1jbGFzcyBQYXJhbWV0ZXJCdW5kbGUgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7
CitjbGFzcyBQYXJhbWV0ZXJCdW5kbGUgZmluYWwgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7
CiBwdWJsaWM6CiAgICAgLy8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAnZGlyZWN0aW9uYWxp
dHknIHdoaWxlIGdlbmVyYXRpbmcgUGFyYW1ldGVyQnVuZGxlLgogICAgIGVudW0gY2xhc3MgRGly
ZWN0aW9uYWxpdHkgewogICAgICAgICBMVFIgPSA0LAogICAgICAgICBSVEwgPSA1LAogICAgIH07
IC8vIGVudW0gY2xhc3MgRGlyZWN0aW9uYWxpdHkKKwogICAgIGVudW0gewogICAgICAgICBOb0Zp
ZWxkc1NldCA9IDAsCiAgICAgICAgIERpcmVjdGlvbmFsaXR5U2V0ID0gMSA8PCAwLApAQCAtNzg5
LDU5ICs4NDMsNTkgQEAgcHVibGljOgogICAgICAgICBmcmllbmQgY2xhc3MgUGFyYW1ldGVyQnVu
ZGxlOwogICAgIHB1YmxpYzoKIAotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgRGlyZWN0aW9uYWxp
dHlTZXQ+JiBzZXREaXJlY3Rpb25hbGl0eShEaXJlY3Rpb25hbGl0eSB2YWx1ZSkKKyAgICAgICAg
QnVpbGRlcjxTVEFURSB8IERpcmVjdGlvbmFsaXR5U2V0PiYgc2V0RGlyZWN0aW9uYWxpdHkoRGly
ZWN0aW9uYWxpdHkgaW5fZGlyZWN0aW9uYWxpdHkpCiAgICAgICAgIHsKICAgICAgICAgICAgIENP
TVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBEaXJlY3Rpb25hbGl0eVNldCksIHByb3BlcnR5X2RpcmVj
dGlvbmFsaXR5X2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmco
ImRpcmVjdGlvbmFsaXR5Il9zLCBJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0
RW51bUNvbnN0YW50VmFsdWUodmFsdWUpKTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJp
bmcoImRpcmVjdGlvbmFsaXR5Il9zLCBQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25z
dGFudFZhbHVlKGluX2RpcmVjdGlvbmFsaXR5KSk7CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0
YXRlPERpcmVjdGlvbmFsaXR5U2V0PigpOwogICAgICAgICB9CiAKLSAgICAgICAgQnVpbGRlcjxT
VEFURSB8IEJ1dHRvbnNTZXQ+JiBzZXRCdXR0b25zKFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbj4+IHZhbHVlKQorICAgICAgICBC
dWlsZGVyPFNUQVRFIHwgQnV0dG9uc1NldD4mIHNldEJ1dHRvbnMoUmVmPEpTT046OkFycmF5T2Y8
UHJvdG9jb2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbj4+JiYgaW5fYnV0dG9ucykKICAgICAgICAg
ewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEJ1dHRvbnNTZXQpLCBwcm9w
ZXJ0eV9idXR0b25zX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRBcnJh
eSgiYnV0dG9ucyJfcywgdmFsdWUpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldEFycmF5KCJi
dXR0b25zIl9zLCBXVEZNb3ZlKGluX2J1dHRvbnMpKTsKICAgICAgICAgICAgIHJldHVybiBjYXN0
U3RhdGU8QnV0dG9uc1NldD4oKTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUg
fCBDb2x1bW5OYW1lc1NldD4mIHNldENvbHVtbk5hbWVzKFJlZlB0cjxKU09OOjpBcnJheU9mPFN0
cmluZz4+IHZhbHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQ29sdW1uTmFtZXNTZXQ+JiBz
ZXRDb2x1bW5OYW1lcyhSZWY8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiYmIGluX2NvbHVtbk5hbWVz
KQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQ29sdW1u
TmFtZXNTZXQpLCBwcm9wZXJ0eV9jb2x1bW5OYW1lc19hbHJlYWR5X3NldCk7Ci0gICAgICAgICAg
ICBtX3Jlc3VsdC0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCB2YWx1ZSk7CisgICAgICAgICAg
ICBtX3Jlc3VsdC0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCBXVEZNb3ZlKGluX2NvbHVtbk5h
bWVzKSk7CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENvbHVtbk5hbWVzU2V0PigpOwog
ICAgICAgICB9CiAKLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IE5vdGVzU2V0PiYgc2V0Tm90ZXMo
Y29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IE5vdGVzU2V0PiYg
c2V0Tm90ZXMoY29uc3QgU3RyaW5nJiBpbl9ub3RlcykKICAgICAgICAgewogICAgICAgICAgICAg
Q09NUElMRV9BU1NFUlQoIShTVEFURSAmIE5vdGVzU2V0KSwgcHJvcGVydHlfbm90ZXNfYWxyZWFk
eV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibm90ZXMiX3MsIHZhbHVl
KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCBpbl9ub3Rlcyk7
CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE5vdGVzU2V0PigpOwogICAgICAgICB9CiAK
LSAgICAgICAgQnVpbGRlcjxTVEFURSB8IFRpbWVzdGFtcFNldD4mIHNldFRpbWVzdGFtcChkb3Vi
bGUgdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBUaW1lc3RhbXBTZXQ+JiBzZXRUaW1l
c3RhbXAoZG91YmxlIGluX3RpbWVzdGFtcCkKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElM
RV9BU1NFUlQoIShTVEFURSAmIFRpbWVzdGFtcFNldCksIHByb3BlcnR5X3RpbWVzdGFtcF9hbHJl
YWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3Ms
IHZhbHVlKTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywg
aW5fdGltZXN0YW1wKTsKICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VGltZXN0YW1wU2V0
PigpOwogICAgICAgICB9CiAKLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IFZhbHVlc1NldD4mIHNl
dFZhbHVlcyhSZWZQdHI8SlNPTjo6T2JqZWN0PiB2YWx1ZSkKKyAgICAgICAgQnVpbGRlcjxTVEFU
RSB8IFZhbHVlc1NldD4mIHNldFZhbHVlcyhSZWY8SlNPTjo6T2JqZWN0PiYmIGluX3ZhbHVlcykK
ICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFZhbHVlc1Nl
dCksIHByb3BlcnR5X3ZhbHVlc19hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+
c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRP
YmplY3QoInZhbHVlcyJfcywgV1RGTW92ZShpbl92YWx1ZXMpKTsKICAgICAgICAgICAgIHJldHVy
biBjYXN0U3RhdGU8VmFsdWVzU2V0PigpOwogICAgICAgICB9CiAKLSAgICAgICAgQnVpbGRlcjxT
VEFURSB8IFBheWxvYWRTZXQ+JiBzZXRQYXlsb2FkKFJlZlB0cjxKU09OOjpWYWx1ZT4gdmFsdWUp
CisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBQYXlsb2FkU2V0PiYgc2V0UGF5bG9hZChSZWY8SlNP
Tjo6VmFsdWU+JiYgaW5fcGF5bG9hZCkKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoIShTVEFURSAmIFBheWxvYWRTZXQpLCBwcm9wZXJ0eV9wYXlsb2FkX2FscmVhZHlfc2V0
KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgdmFsdWUpOwor
ICAgICAgICAgICAgbV9yZXN1bHQtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCBXVEZNb3ZlKGluX3Bh
eWxvYWQpKTsKICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8UGF5bG9hZFNldD4oKTsKICAg
ICAgICAgfQogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBFcnJvclNldD4mIHNldEVycm9yKFJl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IHZhbHVlKQorICAgICAg
ICBCdWlsZGVyPFNUQVRFIHwgRXJyb3JTZXQ+JiBzZXRFcnJvcihSZWY8UHJvdG9jb2w6OkRhdGFi
YXNlOjpFcnJvcj4mJiBpbl9lcnJvcikKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9B
U1NFUlQoIShTVEFURSAmIEVycm9yU2V0KSwgcHJvcGVydHlfZXJyb3JfYWxyZWFkeV9zZXQpOwot
ICAgICAgICAgICAgbV9yZXN1bHQtPnNldE9iamVjdCgiZXJyb3IiX3MsIHZhbHVlKTsKKyAgICAg
ICAgICAgIG1fcmVzdWx0LT5zZXRPYmplY3QoImVycm9yIl9zLCBXVEZNb3ZlKGluX2Vycm9yKSk7
CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPEVycm9yU2V0PigpOwogICAgICAgICB9CiAK
QEAgLTg4NiwxNSArOTQwLDE1IEBAIE9wdGlvbmFsPFByb3RvY29sRW51bVR5cGU+IHBhcnNlRW51
bVZhbHVlRnJvbVN0cmluZyhjb25zdCBTdHJpbmcmKTsKIAogLy8gRW51bXMgaW4gdGhlICdEYXRh
YmFzZScgRG9tYWluCiB0ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpE
YXRhYmFzZTo6TW91c2VCdXR0b24+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6
OlByb3RvY29sOjpEYXRhYmFzZTo6TW91c2VCdXR0b24+KGNvbnN0IFN0cmluZyYpOworT3B0aW9u
YWw8UHJvdG9jb2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbj4gcGFyc2VFbnVtVmFsdWVGcm9tU3Ry
aW5nPFByb3RvY29sOjpEYXRhYmFzZTo6TW91c2VCdXR0b24+KGNvbnN0IFN0cmluZyYpOwogdGVt
cGxhdGU8PgotT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6Ok9wdGlvbmFs
UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5n
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpPcHRpb25hbFBhcmFtZXRlckJ1bmRsZTo6
RGlyZWN0aW9uYWxpdHk+KGNvbnN0IFN0cmluZyYpOworT3B0aW9uYWw8UHJvdG9jb2w6OkRhdGFi
YXNlOjpPcHRpb25hbFBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk+IHBhcnNlRW51bVZh
bHVlRnJvbVN0cmluZzxQcm90b2NvbDo6RGF0YWJhc2U6Ok9wdGlvbmFsUGFyYW1ldGVyQnVuZGxl
OjpEaXJlY3Rpb25hbGl0eT4oY29uc3QgU3RyaW5nJik7CiB0ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJ
bnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25h
bGl0eT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFi
YXNlOjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5Pihjb25zdCBTdHJpbmcmKTsKK09w
dGlvbmFsPFByb3RvY29sOjpEYXRhYmFzZTo6UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0
eT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPFByb3RvY29sOjpEYXRhYmFzZTo6UGFyYW1ldGVy
QnVuZGxlOjpEaXJlY3Rpb25hbGl0eT4oY29uc3QgU3RyaW5nJik7CiAKIC8vIEVudW1zIGluIHRo
ZSAnVGVzdCcgRG9tYWluCiB0ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29s
OjpUZXN0OjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5PiBwYXJzZUVudW1WYWx1ZUZy
b21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UGFyYW1ldGVyQnVuZGxlOjpEaXJl
Y3Rpb25hbGl0eT4oY29uc3QgU3RyaW5nJik7CitPcHRpb25hbDxQcm90b2NvbDo6VGVzdDo6UGFy
YW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPFBy
b3RvY29sOjpUZXN0OjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5Pihjb25zdCBTdHJp
bmcmKTsKIAogfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKIApAQCAtOTQ2LDggKzEwMDAsNyBA
QCBzdHJ1Y3QgRGVmYXVsdEhhc2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6Ok1vdXNl
QnV0dG9uPiA6IEludEhhc2g8SW5zcGVjdAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg
IlRlc3RQcm90b2NvbE9iamVjdHMuaCIKIAotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgog
CiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtOTcxLDQ1ICsxMDI0LDQ1IEBAIFN0cmluZyBn
ZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSkgewogLy8gRW51bXMgaW4gdGhlICdEYXRhYmFz
ZScgRG9tYWluCiAKIHRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRh
dGFiYXNlOjpNb3VzZUJ1dHRvbj4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbj4oY29uc3QgU3RyaW5nJiBwcm90b2NvbFN0
cmluZykKK09wdGlvbmFsPFByb3RvY29sOjpEYXRhYmFzZTo6TW91c2VCdXR0b24+IHBhcnNlRW51
bVZhbHVlRnJvbVN0cmluZzxQcm90b2NvbDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9uPihjb25zdCBT
dHJpbmcmIHByb3RvY29sU3RyaW5nKQogewogICAgIHN0YXRpYyBjb25zdCBzaXplX3QgY29uc3Rh
bnRWYWx1ZXNbXSA9IHsKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRh
YmFzZTo6TW91c2VCdXR0b246Ok5vbmUsCi0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90
b2NvbDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9uOjpMZWZ0LAotICAgICAgICAoc2l6ZV90KUluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbjo6TWlkZGxlLAotICAgICAgICAo
c2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbjo6UmlnaHQs
CisgICAgICAgIChzaXplX3QpUHJvdG9jb2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbjo6Tm9uZSwK
KyAgICAgICAgKHNpemVfdClQcm90b2NvbDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9uOjpMZWZ0LAor
ICAgICAgICAoc2l6ZV90KVByb3RvY29sOjpEYXRhYmFzZTo6TW91c2VCdXR0b246Ok1pZGRsZSwK
KyAgICAgICAgKHNpemVfdClQcm90b2NvbDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9uOjpSaWdodCwK
ICAgICB9OwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgNDsgKytpKQogICAgICAgICBpZiAo
cHJvdG9jb2xTdHJpbmcgPT0gZW51bV9jb25zdGFudF92YWx1ZXNbY29uc3RhbnRWYWx1ZXNbaV1d
KQotICAgICAgICAgICAgcmV0dXJuIChJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6TW91
c2VCdXR0b24pY29uc3RhbnRWYWx1ZXNbaV07CisgICAgICAgICAgICByZXR1cm4gKFByb3RvY29s
OjpEYXRhYmFzZTo6TW91c2VCdXR0b24pY29uc3RhbnRWYWx1ZXNbaV07CiAKICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwogfQogCiB0ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpEYXRhYmFzZTo6T3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5PiBw
YXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6Ok9w
dGlvbmFsUGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eT4oY29uc3QgU3RyaW5nJiBwcm90
b2NvbFN0cmluZykKK09wdGlvbmFsPFByb3RvY29sOjpEYXRhYmFzZTo6T3B0aW9uYWxQYXJhbWV0
ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5PiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8UHJvdG9j
b2w6OkRhdGFiYXNlOjpPcHRpb25hbFBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk+KGNv
bnN0IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcpCiB7CiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBj
b25zdGFudFZhbHVlc1tdID0gewotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRhdGFiYXNlOjpPcHRpb25hbFBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk6OkxUUiwK
LSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6T3B0aW9uYWxQ
YXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5OjpSVEwsCisgICAgICAgIChzaXplX3QpUHJv
dG9jb2w6OkRhdGFiYXNlOjpPcHRpb25hbFBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk6
OkxUUiwKKyAgICAgICAgKHNpemVfdClQcm90b2NvbDo6RGF0YWJhc2U6Ok9wdGlvbmFsUGFyYW1l
dGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eTo6UlRMLAogICAgIH07CiAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCAyOyArK2kpCiAgICAgICAgIGlmIChwcm90b2NvbFN0cmluZyA9PSBlbnVtX2Nv
bnN0YW50X3ZhbHVlc1tjb25zdGFudFZhbHVlc1tpXV0pCi0gICAgICAgICAgICByZXR1cm4gKElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpPcHRpb25hbFBhcmFtZXRlckJ1bmRsZTo6RGly
ZWN0aW9uYWxpdHkpY29uc3RhbnRWYWx1ZXNbaV07CisgICAgICAgICAgICByZXR1cm4gKFByb3Rv
Y29sOjpEYXRhYmFzZTo6T3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5KWNv
bnN0YW50VmFsdWVzW2ldOwogCiAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KIAogdGVtcGxh
dGU8PgotT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlBhcmFtZXRlckJ1
bmRsZTo6RGlyZWN0aW9uYWxpdHk+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6
OlByb3RvY29sOjpEYXRhYmFzZTo6UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eT4oY29u
c3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKK09wdGlvbmFsPFByb3RvY29sOjpEYXRhYmFzZTo6
UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5n
PFByb3RvY29sOjpEYXRhYmFzZTo6UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eT4oY29u
c3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKIHsKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNv
bnN0YW50VmFsdWVzW10gPSB7Ci0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6
RGF0YWJhc2U6OlBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk6OkxUUiwKLSAgICAgICAg
KHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UGFyYW1ldGVyQnVuZGxlOjpE
aXJlY3Rpb25hbGl0eTo6UlRMLAorICAgICAgICAoc2l6ZV90KVByb3RvY29sOjpEYXRhYmFzZTo6
UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eTo6TFRSLAorICAgICAgICAoc2l6ZV90KVBy
b3RvY29sOjpEYXRhYmFzZTo6UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eTo6UlRMLAog
ICAgIH07CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAyOyArK2kpCiAgICAgICAgIGlmIChw
cm90b2NvbFN0cmluZyA9PSBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb25zdGFudFZhbHVlc1tpXV0p
Ci0gICAgICAgICAgICByZXR1cm4gKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQYXJh
bWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5KWNvbnN0YW50VmFsdWVzW2ldOworICAgICAgICAg
ICAgcmV0dXJuIChQcm90b2NvbDo6RGF0YWJhc2U6OlBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9u
YWxpdHkpY29uc3RhbnRWYWx1ZXNbaV07CiAKICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQpA
QCAtMTAxNywxNSArMTA3MCwxNSBAQCBPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRh
YmFzZTo6UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eT4gcGFyc2VFbgogLy8gRW51bXMg
aW4gdGhlICdUZXN0JyBEb21haW4KIAogdGVtcGxhdGU8PgotT3B0aW9uYWw8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6VGVzdDo6UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eT4gcGFyc2VFbnVt
VmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlBhcmFtZXRlckJ1bmRs
ZTo6RGlyZWN0aW9uYWxpdHk+KGNvbnN0IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcpCitPcHRpb25h
bDxQcm90b2NvbDo6VGVzdDo6UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eT4gcGFyc2VF
bnVtVmFsdWVGcm9tU3RyaW5nPFByb3RvY29sOjpUZXN0OjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVj
dGlvbmFsaXR5Pihjb25zdCBTdHJpbmcmIHByb3RvY29sU3RyaW5nKQogewogICAgIHN0YXRpYyBj
b25zdCBzaXplX3QgY29uc3RhbnRWYWx1ZXNbXSA9IHsKLSAgICAgICAgKHNpemVfdClJbnNwZWN0
b3I6OlByb3RvY29sOjpUZXN0OjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5OjpMVFIs
Ci0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UGFyYW1ldGVyQnVu
ZGxlOjpEaXJlY3Rpb25hbGl0eTo6UlRMLAorICAgICAgICAoc2l6ZV90KVByb3RvY29sOjpUZXN0
OjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5OjpMVFIsCisgICAgICAgIChzaXplX3Qp
UHJvdG9jb2w6OlRlc3Q6OlBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk6OlJUTCwKICAg
ICB9OwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgMjsgKytpKQogICAgICAgICBpZiAocHJv
dG9jb2xTdHJpbmcgPT0gZW51bV9jb25zdGFudF92YWx1ZXNbY29uc3RhbnRWYWx1ZXNbaV1dKQot
ICAgICAgICAgICAgcmV0dXJuIChJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpQYXJhbWV0ZXJC
dW5kbGU6OkRpcmVjdGlvbmFsaXR5KWNvbnN0YW50VmFsdWVzW2ldOworICAgICAgICAgICAgcmV0
dXJuIChQcm90b2NvbDo6VGVzdDo6UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eSljb25z
dGFudFZhbHVlc1tpXTsKIAogICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQv
dHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0cy5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLXJlcXVpcmluZy1y
dW50aW1lLWNhc3RzLmpzb24tcmVzdWx0CmluZGV4IDI2Yjc1MGM2NmIyMDFiMGQ0ZWNiZjJmMzc0
OGFiOWY0MDMwOWE5ZWMuLjRkZTA0YWI0YjZkOTFkYzk3ZjAwNjM1OWE4ZDZjNzY4MGQ5MmYzN2Mg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9leHBlY3RlZC90eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24tcmVzdWx0CisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90
eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24tcmVzdWx0CkBAIC02OSw3ICs2OSw3IEBA
IEluc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIlRlc3QiLCBudWxsKTsKIAogI2lmIEVO
QUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogCi0jaW5jbHVkZSAiVGVzdFBy
b3RvY29sVHlwZXMuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KICNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgogCkBAIC0xMjUsMTEg
KzEyNSwxNCBAQCBwcml2YXRlOgogCiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgog
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+Cisj
aW5jbHVkZSA8dHVwbGU+CisjaW5jbHVkZSA8d3RmL0V4cGVjdGVkLmg+CisjaW5jbHVkZSA8d3Rm
L09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFj
ZSBJbnNwZWN0b3IgewogCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKwogCiAKIApAQCAt
MTcwLDkgKzE3Myw3IEBAIHR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwogI2luY2x1ZGUgIlRl
c3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KICNpbmNs
dWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+
CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKICNpbmNsdWRl
ICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCkBAIC0yMjAsNiArMjIxLDcgQEAg
bmFtZXNwYWNlIEluc3BlY3RvciB7CiAKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgi
CiAjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4K
ICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7
CkBAIC0yNjMsNyArMjY1LDYgQEAgY2xhc3MgRnJvbnRlbmRSb3V0ZXI7CiAjaW5jbHVkZSAiVGVz
dEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiBu
YW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtMzA0LDcgKzMwNSw5IEBAIG5hbWVzcGFjZSBJbnNw
ZWN0b3IgewogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JQcm90b2NvbFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRl
IDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtMzQ2
LDcgKzM0OSw3IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFN0cmluZyBnZXRFbnVtQ29uc3RhbnRW
YWx1ZShUIGVudW1WYWx1ZSkKIG5hbWVzcGFjZSBUZXN0IHsKIAogLyogQSBkdW1teSB0eXBlIHRo
YXQgcmVxdWlyZXMgcnVudGltZSBjYXN0cywgYW5kIGZvcmNlcyBub24tcHJpbWl0aXZlIHJlZmVy
ZW5jZWQgdHlwZXMgdG8gYWxzbyBlbWl0IHJ1bnRpbWUgY2FzdCBoZWxwZXJzLiAqLwotY2xhc3Mg
VHlwZU5lZWRpbmdDYXN0IDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgeworY2xhc3MgVHlwZU5l
ZWRpbmdDYXN0IGZpbmFsIDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgewogcHVibGljOgogICAg
IGVudW0gewogICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCkBAIC0zNzYsMzggKzM3OSwzOCBAQCBw
dWJsaWM6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBUeXBlTmVlZGluZ0Nhc3Q7CiAgICAgcHVibGlj
OgogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBTdHJpbmdTZXQ+JiBzZXRTdHJpbmcoY29uc3Qg
U3RyaW5nJiB2YWx1ZSkKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IFN0cmluZ1NldD4mIHNldFN0
cmluZyhjb25zdCBTdHJpbmcmIGluX3N0cmluZykKICAgICAgICAgewogICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoIShTVEFURSAmIFN0cmluZ1NldCksIHByb3BlcnR5X3N0cmluZ19hbHJlYWR5
X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJzdHJpbmciX3MsIHZhbHVl
KTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInN0cmluZyJfcywgaW5fc3RyaW5n
KTsKICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8U3RyaW5nU2V0PigpOwogICAgICAgICB9
CiAKLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IE51bWJlclNldD4mIHNldE51bWJlcihpbnQgdmFs
dWUpCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBOdW1iZXJTZXQ+JiBzZXROdW1iZXIoaW50IGlu
X251bWJlcikKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAm
IE51bWJlclNldCksIHByb3BlcnR5X251bWJlcl9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBt
X3Jlc3VsdC0+c2V0SW50ZWdlcigibnVtYmVyIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICBtX3Jl
c3VsdC0+c2V0SW50ZWdlcigibnVtYmVyIl9zLCBpbl9udW1iZXIpOwogICAgICAgICAgICAgcmV0
dXJuIGNhc3RTdGF0ZTxOdW1iZXJTZXQ+KCk7CiAgICAgICAgIH0KIAotICAgICAgICBCdWlsZGVy
PFNUQVRFIHwgQW5pbWFsc1NldD4mIHNldEFuaW1hbHMoSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVz
dDo6Q2FzdGVkQW5pbWFscyB2YWx1ZSkKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IEFuaW1hbHNT
ZXQ+JiBzZXRBbmltYWxzKFByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzIGluX2FuaW1hbHMp
CiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBBbmltYWxz
U2V0KSwgcHJvcGVydHlfYW5pbWFsc19hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3Vs
dC0+c2V0U3RyaW5nKCJhbmltYWxzIl9zLCBJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0SGVscGVy
czo6Z2V0RW51bUNvbnN0YW50VmFsdWUodmFsdWUpKTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5z
ZXRTdHJpbmcoImFuaW1hbHMiX3MsIFByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0
YW50VmFsdWUoaW5fYW5pbWFscykpOwogICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxBbmlt
YWxzU2V0PigpOwogICAgICAgICB9CiAKLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IElkU2V0PiYg
c2V0SWQoaW50IHZhbHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRFIHwgSWRTZXQ+JiBzZXRJZChp
bnQgaW5faWQpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUg
JiBJZFNldCksIHByb3BlcnR5X2lkX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0
LT5zZXRJbnRlZ2VyKCJpZCJfcywgdmFsdWUpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldElu
dGVnZXIoImlkIl9zLCBpbl9pZCk7CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPElkU2V0
PigpOwogICAgICAgICB9CiAKLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IFRyZWVTZXQ+JiBzZXRU
cmVlKFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpSZWN1cnNpdmVPYmplY3QxPiB2
YWx1ZSkKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IFRyZWVTZXQ+JiBzZXRUcmVlKFJlZjxQcm90
b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0MT4mJiBpbl90cmVlKQogICAgICAgICB7CiAgICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVHJlZVNldCksIHByb3BlcnR5X3RyZWVf
YWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldE9iamVjdCgidHJlZSJfcywg
dmFsdWUpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldE9iamVjdCgidHJlZSJfcywgV1RGTW92
ZShpbl90cmVlKSk7CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFRyZWVTZXQ+KCk7CiAg
ICAgICAgIH0KIApAQCAtNDUyLDcgKzQ1NSw3IEBAIGVudW0gY2xhc3MgQ2FzdGVkQW5pbWFscyB7
CiAgICAgRmxhbWluZ29zID0gMywKIH07IC8vIGVudW0gY2xhc3MgQ2FzdGVkQW5pbWFscwogCi1j
bGFzcyBSZWN1cnNpdmVPYmplY3QxIDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgeworY2xhc3Mg
UmVjdXJzaXZlT2JqZWN0MSBmaW5hbCA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKIHB1Ymxp
YzoKICAgICBlbnVtIHsKICAgICAgICAgTm9GaWVsZHNTZXQgPSAwLApAQCAtNDk4LDEzICs1MDEs
MTMgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSlNPTjo6
T2JqZWN0OjpjcmVhdGUoKSk7CiAgICAgfQogCi0gICAgdm9pZCBzZXRPYmooUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDI+IHZhbHVlKQorICAgIHZvaWQg
c2V0T2JqKFJlZjxQcm90b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0Mj4mJiBpbl9vcHRfb2Jq
KQogICAgIHsKLSAgICAgICAgSlNPTjo6T2JqZWN0QmFzZTo6c2V0T2JqZWN0KCJvYmoiX3MsIFdU
Rk1vdmUodmFsdWUpKTsKKyAgICAgICAgSlNPTjo6T2JqZWN0QmFzZTo6c2V0T2JqZWN0KCJvYmoi
X3MsIFdURk1vdmUoaW5fb3B0X29iaikpOwogICAgIH0KIH07CiAKLWNsYXNzIFJlY3Vyc2l2ZU9i
amVjdDIgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7CitjbGFzcyBSZWN1cnNpdmVPYmplY3Qy
IGZpbmFsIDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgewogcHVibGljOgogICAgIGVudW0gewog
ICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCkBAIC01NTAsMjUgKzU1MywyNSBAQCBwdWJsaWM6CiAg
ICAgICAgIHJldHVybiBCdWlsZGVyPE5vRmllbGRzU2V0PihKU09OOjpPYmplY3Q6OmNyZWF0ZSgp
KTsKICAgICB9CiAKLSAgICB2b2lkIHNldE9iaihSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
VGVzdDo6UmVjdXJzaXZlT2JqZWN0MT4gdmFsdWUpCisgICAgdm9pZCBzZXRPYmooUmVmPFByb3Rv
Y29sOjpUZXN0OjpSZWN1cnNpdmVPYmplY3QxPiYmIGluX29wdF9vYmopCiAgICAgewotICAgICAg
ICBKU09OOjpPYmplY3RCYXNlOjpzZXRPYmplY3QoIm9iaiJfcywgV1RGTW92ZSh2YWx1ZSkpOwor
ICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXRPYmplY3QoIm9iaiJfcywgV1RGTW92ZShpbl9v
cHRfb2JqKSk7CiAgICAgfQogfTsKIAogfSAvLyBUZXN0CiAKLXRlbXBsYXRlPD4gc3RydWN0IEJp
bmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFscz4gewor
dGVtcGxhdGU8PiBzdHJ1Y3QgQmluZGluZ1RyYWl0czxQcm90b2NvbDo6VGVzdDo6VHlwZU5lZWRp
bmdDYXN0PiB7CitzdGF0aWMgUmVmPFByb3RvY29sOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3Q+IHJ1
bnRpbWVDYXN0KFJlZjxKU09OOjpWYWx1ZT4mJiB2YWx1ZSk7CiBzdGF0aWMgdm9pZCBhc3NlcnRW
YWx1ZUhhc0V4cGVjdGVkVHlwZShKU09OOjpWYWx1ZSopOwogfTsKLXRlbXBsYXRlPD4gc3RydWN0
IEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0
PiB7Ci1zdGF0aWMgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlR5cGVOZWVkaW5n
Q2FzdD4gcnVudGltZUNhc3QoUmVmUHRyPEpTT046OlZhbHVlPiYmIHZhbHVlKTsKK3RlbXBsYXRl
PD4gc3RydWN0IEJpbmRpbmdUcmFpdHM8UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM+IHsK
IHN0YXRpYyB2b2lkIGFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKEpTT046OlZhbHVlKik7CiB9
OwotdGVtcGxhdGU8PiBzdHJ1Y3QgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpU
ZXN0OjpSZWN1cnNpdmVPYmplY3QxPiB7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBCaW5kaW5nVHJhaXRz
PFByb3RvY29sOjpUZXN0OjpSZWN1cnNpdmVPYmplY3QxPiB7CiBzdGF0aWMgdm9pZCBhc3NlcnRW
YWx1ZUhhc0V4cGVjdGVkVHlwZShKU09OOjpWYWx1ZSopOwogfTsKLXRlbXBsYXRlPD4gc3RydWN0
IEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0
Mj4gewordGVtcGxhdGU8PiBzdHJ1Y3QgQmluZGluZ1RyYWl0czxQcm90b2NvbDo6VGVzdDo6UmVj
dXJzaXZlT2JqZWN0Mj4gewogc3RhdGljIHZvaWQgYXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUo
SlNPTjo6VmFsdWUqKTsKIH07CiAKQEAgLTU3OSw5ICs1ODIsOSBAQCBPcHRpb25hbDxQcm90b2Nv
bEVudW1UeXBlPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmcoY29uc3QgU3RyaW5nJik7CiAKIC8v
IEVudW1zIGluIHRoZSAnVGVzdCcgRG9tYWluCiB0ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJbnNwZWN0
b3I6OlByb3RvY29sOjpUZXN0OjpVbmNhc3RlZEFuaW1hbHM+IHBhcnNlRW51bVZhbHVlRnJvbVN0
cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpVbmNhc3RlZEFuaW1hbHM+KGNvbnN0IFN0
cmluZyYpOworT3B0aW9uYWw8UHJvdG9jb2w6OlRlc3Q6OlVuY2FzdGVkQW5pbWFscz4gcGFyc2VF
bnVtVmFsdWVGcm9tU3RyaW5nPFByb3RvY29sOjpUZXN0OjpVbmNhc3RlZEFuaW1hbHM+KGNvbnN0
IFN0cmluZyYpOwogdGVtcGxhdGU8PgotT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVz
dDo6Q2FzdGVkQW5pbWFscz4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM+KGNvbnN0IFN0cmluZyYpOworT3B0aW9uYWw8UHJv
dG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxQcm90
b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFscz4oY29uc3QgU3RyaW5nJik7CiAKIH0gLy8gbmFtZXNw
YWNlIFRlc3RIZWxwZXJzCiAKQEAgLTYzNSw4ICs2MzgsNyBAQCBzdHJ1Y3QgRGVmYXVsdEhhc2g8
SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFscz4gOiBJbnRIYXNoPEluc3Bl
Y3RvcgogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMu
aCIKIAotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJp
bmcuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9y
IHsKIApAQCAtNjYxLDMzICs2NjMsMzMgQEAgU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKGlu
dCBjb2RlKSB7CiAvLyBFbnVtcyBpbiB0aGUgJ1Rlc3QnIERvbWFpbgogCiB0ZW1wbGF0ZTw+Ci1P
cHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpVbmNhc3RlZEFuaW1hbHM+IHBhcnNl
RW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpVbmNhc3RlZEFu
aW1hbHM+KGNvbnN0IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcpCitPcHRpb25hbDxQcm90b2NvbDo6
VGVzdDo6VW5jYXN0ZWRBbmltYWxzPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8UHJvdG9jb2w6
OlRlc3Q6OlVuY2FzdGVkQW5pbWFscz4oY29uc3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKIHsK
ICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNvbnN0YW50VmFsdWVzW10gPSB7Ci0gICAgICAgIChz
aXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VW5jYXN0ZWRBbmltYWxzOjpQaWdzLAot
ICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlVuY2FzdGVkQW5pbWFs
czo6Q293cywKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpVbmNh
c3RlZEFuaW1hbHM6OkNhdHMsCi0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6
VGVzdDo6VW5jYXN0ZWRBbmltYWxzOjpIZW5zLAorICAgICAgICAoc2l6ZV90KVByb3RvY29sOjpU
ZXN0OjpVbmNhc3RlZEFuaW1hbHM6OlBpZ3MsCisgICAgICAgIChzaXplX3QpUHJvdG9jb2w6OlRl
c3Q6OlVuY2FzdGVkQW5pbWFsczo6Q293cywKKyAgICAgICAgKHNpemVfdClQcm90b2NvbDo6VGVz
dDo6VW5jYXN0ZWRBbmltYWxzOjpDYXRzLAorICAgICAgICAoc2l6ZV90KVByb3RvY29sOjpUZXN0
OjpVbmNhc3RlZEFuaW1hbHM6OkhlbnMsCiAgICAgfTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IDQ7ICsraSkKICAgICAgICAgaWYgKHByb3RvY29sU3RyaW5nID09IGVudW1fY29uc3RhbnRf
dmFsdWVzW2NvbnN0YW50VmFsdWVzW2ldXSkKLSAgICAgICAgICAgIHJldHVybiAoSW5zcGVjdG9y
OjpQcm90b2NvbDo6VGVzdDo6VW5jYXN0ZWRBbmltYWxzKWNvbnN0YW50VmFsdWVzW2ldOworICAg
ICAgICAgICAgcmV0dXJuIChQcm90b2NvbDo6VGVzdDo6VW5jYXN0ZWRBbmltYWxzKWNvbnN0YW50
VmFsdWVzW2ldOwogCiAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KIAogdGVtcGxhdGU8Pgot
T3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFscz4gcGFyc2VF
bnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1h
bHM+KGNvbnN0IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcpCitPcHRpb25hbDxQcm90b2NvbDo6VGVz
dDo6Q2FzdGVkQW5pbWFscz4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPFByb3RvY29sOjpUZXN0
OjpDYXN0ZWRBbmltYWxzPihjb25zdCBTdHJpbmcmIHByb3RvY29sU3RyaW5nKQogewogICAgIHN0
YXRpYyBjb25zdCBzaXplX3QgY29uc3RhbnRWYWx1ZXNbXSA9IHsKLSAgICAgICAgKHNpemVfdClJ
bnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzOjpEdWNrcywKLSAgICAgICAg
KHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzOjpIZW5zLAot
ICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM6
OkNyb3dzLAotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OkNhc3Rl
ZEFuaW1hbHM6OkZsYW1pbmdvcywKKyAgICAgICAgKHNpemVfdClQcm90b2NvbDo6VGVzdDo6Q2Fz
dGVkQW5pbWFsczo6RHVja3MsCisgICAgICAgIChzaXplX3QpUHJvdG9jb2w6OlRlc3Q6OkNhc3Rl
ZEFuaW1hbHM6OkhlbnMsCisgICAgICAgIChzaXplX3QpUHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFu
aW1hbHM6OkNyb3dzLAorICAgICAgICAoc2l6ZV90KVByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmlt
YWxzOjpGbGFtaW5nb3MsCiAgICAgfTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDQ7ICsr
aSkKICAgICAgICAgaWYgKHByb3RvY29sU3RyaW5nID09IGVudW1fY29uc3RhbnRfdmFsdWVzW2Nv
bnN0YW50VmFsdWVzW2ldXSkKLSAgICAgICAgICAgIHJldHVybiAoSW5zcGVjdG9yOjpQcm90b2Nv
bDo6VGVzdDo6Q2FzdGVkQW5pbWFscyljb25zdGFudFZhbHVlc1tpXTsKKyAgICAgICAgICAgIHJl
dHVybiAoUHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHMpY29uc3RhbnRWYWx1ZXNbaV07CiAK
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQpAQCAtNjk2LDExNSArNjk4LDEwMSBAQCBPcHRp
b25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzPiBwYXJzZUVudW1W
YWx1ZUZyb21TdHJpbmc8SW5zcAogCiAKIAotdm9pZCBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlw
ZShKU09OOjpWYWx1ZSogdmFsdWUpCit2b2lkIEJpbmRpbmdUcmFpdHM8UHJvdG9jb2w6OlRlc3Q6
OkNhc3RlZEFuaW1hbHM+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShKU09OOjpWYWx1ZSog
dmFsdWUpCiB7CisgICAgQVNTRVJUX1VOVVNFRCh2YWx1ZSwgdmFsdWUpOwogI2lmIEFTU0VSVF9F
TkFCTEVECi0gICAgQVNTRVJUX0FSRyh2YWx1ZSwgdmFsdWUpOwotICAgIFN0cmluZyByZXN1bHQ7
Ci0gICAgYm9vbCBjYXN0U3VjY2VlZGVkID0gdmFsdWUtPmFzU3RyaW5nKHJlc3VsdCk7Ci0gICAg
QVNTRVJUKGNhc3RTdWNjZWVkZWQpOworICAgIGF1dG8gcmVzdWx0ID0gdmFsdWUtPmFzU3RyaW5n
KCk7CisgICAgQVNTRVJUKHJlc3VsdCk7CiAgICAgQVNTRVJUKHJlc3VsdCA9PSAiRHVja3MiIHx8
IHJlc3VsdCA9PSAiSGVucyIgfHwgcmVzdWx0ID09ICJDcm93cyIgfHwgcmVzdWx0ID09ICJGbGFt
aW5nb3MiKTsKLSNlbHNlIC8vIEFTU0VSVF9FTkFCTEVECi0gICAgVU5VU0VEX1BBUkFNKHZhbHVl
KTsKLSNlbmRpZiAvLyBBU1NFUlRfRU5BQkxFRAorI2VuZGlmCiB9CiAKLXZvaWQgQmluZGluZ1Ry
YWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3Q+Ojphc3NlcnRW
YWx1ZUhhc0V4cGVjdGVkVHlwZShKU09OOjpWYWx1ZSogdmFsdWUpCit2b2lkIEJpbmRpbmdUcmFp
dHM8UHJvdG9jb2w6OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdD46OmFzc2VydFZhbHVlSGFzRXhwZWN0
ZWRUeXBlKEpTT046OlZhbHVlKiB2YWx1ZSkKIHsKKyAgICBBU1NFUlRfVU5VU0VEKHZhbHVlLCB2
YWx1ZSk7CiAjaWYgQVNTRVJUX0VOQUJMRUQKLSAgICBBU1NFUlRfQVJHKHZhbHVlLCB2YWx1ZSk7
Ci0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gb2JqZWN0OwotICAgIGJvb2wgY2FzdFN1Y2NlZWRl
ZCA9IHZhbHVlLT5hc09iamVjdChvYmplY3QpOwotICAgIEFTU0VSVF9VTlVTRUQoY2FzdFN1Y2Nl
ZWRlZCwgY2FzdFN1Y2NlZWRlZCk7CisgICAgYXV0byBvYmplY3QgPSB2YWx1ZS0+YXNPYmplY3Qo
KTsKKyAgICBBU1NFUlQob2JqZWN0KTsKICAgICB7CiAgICAgICAgIGF1dG8gc3RyaW5nUG9zID0g
b2JqZWN0LT5maW5kKCJzdHJpbmciX3MpOwogICAgICAgICBBU1NFUlQoc3RyaW5nUG9zICE9IG9i
amVjdC0+ZW5kKCkpOwotICAgICAgICBCaW5kaW5nVHJhaXRzPFN0cmluZz46OmFzc2VydFZhbHVl
SGFzRXhwZWN0ZWRUeXBlKHN0cmluZ1Bvcy0+dmFsdWUuZ2V0KCkpOworICAgICAgICBCaW5kaW5n
VHJhaXRzPFN0cmluZz46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKHN0cmluZ1Bvcy0+dmFs
dWUucHRyKCkpOwogICAgIH0KICAgICB7CiAgICAgICAgIGF1dG8gbnVtYmVyUG9zID0gb2JqZWN0
LT5maW5kKCJudW1iZXIiX3MpOwogICAgICAgICBBU1NFUlQobnVtYmVyUG9zICE9IG9iamVjdC0+
ZW5kKCkpOwotICAgICAgICBCaW5kaW5nVHJhaXRzPGludD46OmFzc2VydFZhbHVlSGFzRXhwZWN0
ZWRUeXBlKG51bWJlclBvcy0+dmFsdWUuZ2V0KCkpOworICAgICAgICBCaW5kaW5nVHJhaXRzPGlu
dD46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKG51bWJlclBvcy0+dmFsdWUucHRyKCkpOwog
ICAgIH0KICAgICB7CiAgICAgICAgIGF1dG8gYW5pbWFsc1BvcyA9IG9iamVjdC0+ZmluZCgiYW5p
bWFscyJfcyk7CiAgICAgICAgIEFTU0VSVChhbmltYWxzUG9zICE9IG9iamVjdC0+ZW5kKCkpOwot
ICAgICAgICBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFu
aW1hbHM+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShhbmltYWxzUG9zLT52YWx1ZS5nZXQo
KSk7CisgICAgICAgIEJpbmRpbmdUcmFpdHM8UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM+
Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShhbmltYWxzUG9zLT52YWx1ZS5wdHIoKSk7CiAg
ICAgfQogICAgIHsKICAgICAgICAgYXV0byBpZFBvcyA9IG9iamVjdC0+ZmluZCgiaWQiX3MpOwog
ICAgICAgICBBU1NFUlQoaWRQb3MgIT0gb2JqZWN0LT5lbmQoKSk7Ci0gICAgICAgIEJpbmRpbmdU
cmFpdHM8aW50Pjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoaWRQb3MtPnZhbHVlLmdldCgp
KTsKKyAgICAgICAgQmluZGluZ1RyYWl0czxpbnQ+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlw
ZShpZFBvcy0+dmFsdWUucHRyKCkpOwogICAgIH0KICAgICB7CiAgICAgICAgIGF1dG8gdHJlZVBv
cyA9IG9iamVjdC0+ZmluZCgidHJlZSJfcyk7CiAgICAgICAgIEFTU0VSVCh0cmVlUG9zICE9IG9i
amVjdC0+ZW5kKCkpOwotICAgICAgICBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDE+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZSh0cmVl
UG9zLT52YWx1ZS5nZXQoKSk7CisgICAgICAgIEJpbmRpbmdUcmFpdHM8UHJvdG9jb2w6OlRlc3Q6
OlJlY3Vyc2l2ZU9iamVjdDE+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZSh0cmVlUG9zLT52
YWx1ZS5wdHIoKSk7CiAgICAgfQogCi0gICAgaW50IGZvdW5kUHJvcGVydGllc0NvdW50ID0gNTsK
KyAgICBzaXplX3QgZm91bmRQcm9wZXJ0aWVzQ291bnQgPSA1OwogICAgIGlmIChmb3VuZFByb3Bl
cnRpZXNDb3VudCAhPSBvYmplY3QtPnNpemUoKSkKICAgICAgICAgRkFUQUwoIlVuZXhwZWN0ZWQg
cHJvcGVydGllcyBpbiBvYmplY3Q6ICVzXG4iLCBvYmplY3QtPnRvSlNPTlN0cmluZygpLmFzY2lp
KCkuZGF0YSgpKTsKLSNlbHNlIC8vIEFTU0VSVF9FTkFCTEVECi0gICAgVU5VU0VEX1BBUkFNKHZh
bHVlKTsKLSNlbmRpZiAvLyBBU1NFUlRfRU5BQkxFRAorI2VuZGlmCiB9CiAKLVJlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3Q+IEJpbmRpbmdUcmFpdHM8SW5z
cGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0Pjo6cnVudGltZUNhc3QoUmVm
UHRyPEpTT046OlZhbHVlPiYmIHZhbHVlKQorUmVmPFByb3RvY29sOjpUZXN0OjpUeXBlTmVlZGlu
Z0Nhc3Q+IEJpbmRpbmdUcmFpdHM8UHJvdG9jb2w6OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdD46OnJ1
bnRpbWVDYXN0KFJlZjxKU09OOjpWYWx1ZT4mJiB2YWx1ZSkKIHsKLSAgICBSZWZQdHI8SlNPTjo6
T2JqZWN0PiByZXN1bHQ7Ci0gICAgYm9vbCBjYXN0U3VjY2VlZGVkID0gdmFsdWUtPmFzT2JqZWN0
KHJlc3VsdCk7Ci0gICAgQVNTRVJUX1VOVVNFRChjYXN0U3VjY2VlZGVkLCBjYXN0U3VjY2VlZGVk
KTsKLSAgICBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlR5cGVOZWVk
aW5nQ2FzdD46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKHJlc3VsdC5nZXQoKSk7Ci0gICAg
Q09NUElMRV9BU1NFUlQoc2l6ZW9mKEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlR5cGVOZWVk
aW5nQ2FzdCkgPT0gc2l6ZW9mKEpTT046Ok9iamVjdEJhc2UpLCB0eXBlX2Nhc3RfcHJvYmxlbSk7
Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlR5cGVO
ZWVkaW5nQ2FzdCo+KHN0YXRpY19jYXN0PEpTT046Ok9iamVjdEJhc2UqPihyZXN1bHQuZ2V0KCkp
KTsKKyAgICBhdXRvIHJlc3VsdCA9IHZhbHVlLT5hc09iamVjdCgpOworICAgIEJpbmRpbmdUcmFp
dHM8UHJvdG9jb2w6OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdD46OmFzc2VydFZhbHVlSGFzRXhwZWN0
ZWRUeXBlKHJlc3VsdC5nZXQoKSk7CisgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKFByb3RvY29s
OjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3QpID09IHNpemVvZihKU09OOjpPYmplY3RCYXNlKSwgdHlw
ZV9jYXN0X3Byb2JsZW0pOworICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8UHJvdG9j
b2w6OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdD4oc3RhdGljX3JlZmVyZW5jZV9jYXN0PEpTT046Ok9i
amVjdEJhc2U+KHJlc3VsdC5yZWxlYXNlTm9uTnVsbCgpKSk7CiB9CiAKIAotdm9pZCBCaW5kaW5n
VHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDE+Ojphc3Nl
cnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShKU09OOjpWYWx1ZSogdmFsdWUpCit2b2lkIEJpbmRpbmdU
cmFpdHM8UHJvdG9jb2w6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDE+Ojphc3NlcnRWYWx1ZUhhc0V4
cGVjdGVkVHlwZShKU09OOjpWYWx1ZSogdmFsdWUpCiB7CisgICAgQVNTRVJUX1VOVVNFRCh2YWx1
ZSwgdmFsdWUpOwogI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgQVNTRVJUX0FSRyh2YWx1ZSwgdmFs
dWUpOwotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG9iamVjdDsKLSAgICBib29sIGNhc3RTdWNj
ZWVkZWQgPSB2YWx1ZS0+YXNPYmplY3Qob2JqZWN0KTsKLSAgICBBU1NFUlRfVU5VU0VEKGNhc3RT
dWNjZWVkZWQsIGNhc3RTdWNjZWVkZWQpOworICAgIGF1dG8gb2JqZWN0ID0gdmFsdWUtPmFzT2Jq
ZWN0KCk7CisgICAgQVNTRVJUKG9iamVjdCk7CiAKLSAgICBpbnQgZm91bmRQcm9wZXJ0aWVzQ291
bnQgPSAwOworICAgIHNpemVfdCBmb3VuZFByb3BlcnRpZXNDb3VudCA9IDA7CiAgICAgewogICAg
ICAgICBhdXRvIG9ialBvcyA9IG9iamVjdC0+ZmluZCgib2JqIl9zKTsKICAgICAgICAgaWYgKG9i
alBvcyAhPSBvYmplY3QtPmVuZCgpKSB7Ci0gICAgICAgICAgICBCaW5kaW5nVHJhaXRzPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDI+Ojphc3NlcnRWYWx1ZUhhc0V4
cGVjdGVkVHlwZShvYmpQb3MtPnZhbHVlLmdldCgpKTsKKyAgICAgICAgICAgIEJpbmRpbmdUcmFp
dHM8UHJvdG9jb2w6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDI+Ojphc3NlcnRWYWx1ZUhhc0V4cGVj
dGVkVHlwZShvYmpQb3MtPnZhbHVlLnB0cigpKTsKICAgICAgICAgICAgICsrZm91bmRQcm9wZXJ0
aWVzQ291bnQ7CiAgICAgICAgIH0KICAgICB9CiAgICAgaWYgKGZvdW5kUHJvcGVydGllc0NvdW50
ICE9IG9iamVjdC0+c2l6ZSgpKQogICAgICAgICBGQVRBTCgiVW5leHBlY3RlZCBwcm9wZXJ0aWVz
IGluIG9iamVjdDogJXNcbiIsIG9iamVjdC0+dG9KU09OU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkp
OwotI2Vsc2UgLy8gQVNTRVJUX0VOQUJMRUQKLSAgICBVTlVTRURfUEFSQU0odmFsdWUpOwotI2Vu
ZGlmIC8vIEFTU0VSVF9FTkFCTEVECisjZW5kaWYKIH0KIAotdm9pZCBCaW5kaW5nVHJhaXRzPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDI+Ojphc3NlcnRWYWx1ZUhh
c0V4cGVjdGVkVHlwZShKU09OOjpWYWx1ZSogdmFsdWUpCit2b2lkIEJpbmRpbmdUcmFpdHM8UHJv
dG9jb2w6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDI+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlw
ZShKU09OOjpWYWx1ZSogdmFsdWUpCiB7CisgICAgQVNTRVJUX1VOVVNFRCh2YWx1ZSwgdmFsdWUp
OwogI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgQVNTRVJUX0FSRyh2YWx1ZSwgdmFsdWUpOwotICAg
IFJlZlB0cjxKU09OOjpPYmplY3Q+IG9iamVjdDsKLSAgICBib29sIGNhc3RTdWNjZWVkZWQgPSB2
YWx1ZS0+YXNPYmplY3Qob2JqZWN0KTsKLSAgICBBU1NFUlRfVU5VU0VEKGNhc3RTdWNjZWVkZWQs
IGNhc3RTdWNjZWVkZWQpOworICAgIGF1dG8gb2JqZWN0ID0gdmFsdWUtPmFzT2JqZWN0KCk7Cisg
ICAgQVNTRVJUKG9iamVjdCk7CiAKLSAgICBpbnQgZm91bmRQcm9wZXJ0aWVzQ291bnQgPSAwOwor
ICAgIHNpemVfdCBmb3VuZFByb3BlcnRpZXNDb3VudCA9IDA7CiAgICAgewogICAgICAgICBhdXRv
IG9ialBvcyA9IG9iamVjdC0+ZmluZCgib2JqIl9zKTsKICAgICAgICAgaWYgKG9ialBvcyAhPSBv
YmplY3QtPmVuZCgpKSB7Ci0gICAgICAgICAgICBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDE+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlw
ZShvYmpQb3MtPnZhbHVlLmdldCgpKTsKKyAgICAgICAgICAgIEJpbmRpbmdUcmFpdHM8UHJvdG9j
b2w6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDE+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShv
YmpQb3MtPnZhbHVlLnB0cigpKTsKICAgICAgICAgICAgICsrZm91bmRQcm9wZXJ0aWVzQ291bnQ7
CiAgICAgICAgIH0KICAgICB9CiAgICAgaWYgKGZvdW5kUHJvcGVydGllc0NvdW50ICE9IG9iamVj
dC0+c2l6ZSgpKQogICAgICAgICBGQVRBTCgiVW5leHBlY3RlZCBwcm9wZXJ0aWVzIGluIG9iamVj
dDogJXNcbiIsIG9iamVjdC0+dG9KU09OU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOwotI2Vsc2Ug
Ly8gQVNTRVJUX0VOQUJMRUQKLSAgICBVTlVTRURfUEFSQU0odmFsdWUpOwotI2VuZGlmIC8vIEFT
U0VSVF9FTkFCTEVECisjZW5kaWYKIH0KIAogfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBl
Y3RlZC90eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtd2l0aC1vcGVu
LXBhcmFtZXRlcnMuanNvbi1yZXN1bHQKaW5kZXggN2Q1Nzc2MmE4ZmY4YmU0YTlhZTQ5ZGM5ZWY1
NDdiOWQzMjEzZGM3Yi4uYjk4NGNiMDdjMmIzNzU1MWExZjc3YzIzYjA5NDA2MjI5MTZlZTVlMSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2V4cGVjdGVkL3R5cGUtd2l0aC1vcGVuLXBhcmFtZXRlcnMuanNvbi1yZXN1bHQKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUt
d2l0aC1vcGVuLXBhcmFtZXRlcnMuanNvbi1yZXN1bHQKQEAgLTYzLDcgKzYzLDcgQEAKIAogI2lm
IEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogCi0jaW5jbHVkZSAiVGVz
dFByb3RvY29sVHlwZXMuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KICNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgogCkBAIC0xMTks
MTEgKzExOSwxNCBAQCBwcml2YXRlOgogCiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5o
IgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+
CisjaW5jbHVkZSA8dHVwbGU+CisjaW5jbHVkZSA8d3RmL0V4cGVjdGVkLmg+CisjaW5jbHVkZSA8
d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVz
cGFjZSBJbnNwZWN0b3IgewogCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKwogCiAKIApA
QCAtMTY0LDkgKzE2Nyw3IEBAIHR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwogI2luY2x1ZGUg
IlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0lu
c3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KICNp
bmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5n
Lmg+CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKICNpbmNs
dWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCkBAIC0yMTQsNiArMjE1LDcg
QEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3Rz
LmgiCiAjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwu
aD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3Rv
ciB7CkBAIC0yNTcsNyArMjU5LDYgQEAgY2xhc3MgRnJvbnRlbmRSb3V0ZXI7CiAjaW5jbHVkZSAi
VGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0lu
c3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgog
CiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtMjk4LDcgKzI5OSw5IEBAIG5hbWVzcGFjZSBJ
bnNwZWN0b3IgewogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JQcm90b2NvbFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNs
dWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAt
MzIwLDcgKzMyMyw3IEBAIGNsYXNzIE9wZW5QYXJhbWV0ZXJzOwogCiBuYW1lc3BhY2UgVGVzdCB7
CiAKLWNsYXNzIE5vT3BlblBhcmFtZXRlcnMgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7Citj
bGFzcyBOb09wZW5QYXJhbWV0ZXJzIGZpbmFsIDogcHVibGljIEpTT046Ok9iamVjdEJhc2Ugewog
cHVibGljOgogICAgIGVudW0gewogICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCkBAIC0zNDcsMTcg
KzM1MCwxNyBAQCBwdWJsaWM6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBOb09wZW5QYXJhbWV0ZXJz
OwogICAgIHB1YmxpYzoKIAotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgT25lU2V0PiYgc2V0T25l
KGRvdWJsZSB2YWx1ZSkKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IE9uZVNldD4mIHNldE9uZShk
b3VibGUgaW5fb25lKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNU
QVRFICYgT25lU2V0KSwgcHJvcGVydHlfb25lX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1f
cmVzdWx0LT5zZXREb3VibGUoIm9uZSJfcywgdmFsdWUpOworICAgICAgICAgICAgbV9yZXN1bHQt
PnNldERvdWJsZSgib25lIl9zLCBpbl9vbmUpOwogICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0
ZTxPbmVTZXQ+KCk7CiAgICAgICAgIH0KIAotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVHdvU2V0
PiYgc2V0VHdvKGRvdWJsZSB2YWx1ZSkKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IFR3b1NldD4m
IHNldFR3byhkb3VibGUgaW5fdHdvKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FT
U0VSVCghKFNUQVRFICYgVHdvU2V0KSwgcHJvcGVydHlfdHdvX2FscmVhZHlfc2V0KTsKLSAgICAg
ICAgICAgIG1fcmVzdWx0LT5zZXREb3VibGUoInR3byJfcywgdmFsdWUpOworICAgICAgICAgICAg
bV9yZXN1bHQtPnNldERvdWJsZSgidHdvIl9zLCBpbl90d28pOwogICAgICAgICAgICAgcmV0dXJu
IGNhc3RTdGF0ZTxUd29TZXQ+KCk7CiAgICAgICAgIH0KIApAQCAtMzg1LDcgKzM4OCw3IEBAIHB1
YmxpYzoKICAgICB9CiB9OwogCi1jbGFzcyBPcGVuUGFyYW1ldGVycyA6IHB1YmxpYyBKU09OOjpP
YmplY3QgeworY2xhc3MgT3BlblBhcmFtZXRlcnMgZmluYWwgOiBwdWJsaWMgSlNPTjo6T2JqZWN0
IHsKIHB1YmxpYzoKICAgICBlbnVtIHsKICAgICAgICAgTm9GaWVsZHNTZXQgPSAwLApAQCAtNDEy
LDE3ICs0MTUsMTcgQEAgcHVibGljOgogICAgICAgICBmcmllbmQgY2xhc3MgT3BlblBhcmFtZXRl
cnM7CiAgICAgcHVibGljOgogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBBbHBoYVNldD4mIHNl
dEFscGhhKGRvdWJsZSB2YWx1ZSkKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IEFscGhhU2V0PiYg
c2V0QWxwaGEoZG91YmxlIGluX2FscGhhKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxF
X0FTU0VSVCghKFNUQVRFICYgQWxwaGFTZXQpLCBwcm9wZXJ0eV9hbHBoYV9hbHJlYWR5X3NldCk7
Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0RG91YmxlKCJhbHBoYSJfcywgdmFsdWUpOworICAg
ICAgICAgICAgbV9yZXN1bHQtPnNldERvdWJsZSgiYWxwaGEiX3MsIGluX2FscGhhKTsKICAgICAg
ICAgICAgIHJldHVybiBjYXN0U3RhdGU8QWxwaGFTZXQ+KCk7CiAgICAgICAgIH0KIAotICAgICAg
ICBCdWlsZGVyPFNUQVRFIHwgQmV0YVNldD4mIHNldEJldGEoZG91YmxlIHZhbHVlKQorICAgICAg
ICBCdWlsZGVyPFNUQVRFIHwgQmV0YVNldD4mIHNldEJldGEoZG91YmxlIGluX2JldGEpCiAgICAg
ICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBCZXRhU2V0KSwgcHJv
cGVydHlfYmV0YV9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0RG91Ymxl
KCJiZXRhIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0RG91YmxlKCJiZXRh
Il9zLCBpbl9iZXRhKTsKICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8QmV0YVNldD4oKTsK
ICAgICAgICAgfQogCkBAIC00NTAsNyArNDUzLDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIC8v
IFByb3BlcnR5IG5hbWVzIGZvciB0eXBlIGdlbmVyYXRlZCBhcyBvcGVuLgotICAgIE5vbmUgc3Rh
dGljIGNvbnN0IGNoYXIqIEFscGhhOworICAgIE5vbmUgc3RhdGljIGNvbnN0IGNoYXIqIGFscGhh
S2V5OwogfTsKIAogfSAvLyBUZXN0CkBAIC00OTUsMTQgKzQ5OCwxMyBAQCBwdWJsaWM6CiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogCi0jaW5j
bHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2lu
Y2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCiBuYW1l
c3BhY2UgUHJvdG9jb2wgewogCi1jb25zdCBjaGFyKiBJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0
OjpPcGVuUGFyYW1ldGVyczo6QWxwaGEgPSAiYWxwaGEiOworY29uc3QgY2hhciogUHJvdG9jb2w6
OlRlc3Q6Ok9wZW5QYXJhbWV0ZXJzOjphbHBoYUtleSA9ICJhbHBoYSI7CiAKIH0gLy8gbmFtZXNw
YWNlIFByb3RvY29sCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC92ZXJzaW9uLmpzb24tcmVzdWx0IGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3ZlcnNpb24uanNv
bi1yZXN1bHQKaW5kZXggZWY3NzhhMDZjN2YyNTExZjZjMjM0MTg2NzI1NTA1NjgzN2ZiZmEzZi4u
YzA0YWI1OTczZTc2NjEyMWU2YmU4Njk5OTg1NDFkNWE3MTI3MmU4ZCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3ZlcnNp
b24uanNvbi1yZXN1bHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2V4cGVjdGVkL3ZlcnNpb24uanNvbi1yZXN1bHQKQEAgLTY4LDcgKzY4LDcgQEAg
SW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiVmVyc2lvbkRvbWFpbiIsIG51bGwpOwog
CiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAKLSNpbmNsdWRl
ICJUZXN0UHJvdG9jb2xUeXBlcy5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIK
ICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgog
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CiAKQEAg
LTEyNCwxMSArMTI0LDE0IEBAIHByaXZhdGU6CiAKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmpl
Y3RzLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXIuaD4KKyNpbmNsdWRlIDx0dXBsZT4KKyNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4KKyNpbmNs
dWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAog
bmFtZXNwYWNlIEluc3BlY3RvciB7CiAKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCiAK
IAogCkBAIC0xNjksOSArMTcyLDcgQEAgdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiAjaW5j
bHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5o
PgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQog
I2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKQEAgLTIxOSw2ICsy
MjAsNyBAQCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9i
amVjdHMuaCIKICNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRp
b25hbC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5z
cGVjdG9yIHsKQEAgLTI2Miw3ICsyNjQsNiBAQCBjbGFzcyBGcm9udGVuZFJvdXRlcjsKICNpbmNs
dWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5n
Lmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC0zMDMsNyArMzA0LDkgQEAgbmFtZXNw
YWNlIEluc3BlY3RvciB7CiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgor
I2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3Igewog
CkBAIC0zNjIsOCArMzY1LDcgQEAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBWRVJTSU9OID0g
NDI7CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5o
IgogCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3Ig
ewogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlU2V0LmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVTZXQuY3BwCmluZGV4IGQ5OWZm
MzExZGI3NTU0YTJiMDEzMGQyNzIyNDljN2IwNGQwNWI4YTUuLjY1ZWEzNTQ1OWM0NDk3ODQyYjU4
YWEzYjRkMmMxNmFiY2M5ZmUxNTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1R5cGVTZXQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5
cGVTZXQuY3BwCkBAIC01MDEsMTQgKzUwMSwxNCBAQCBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6
UnVudGltZTo6U3RydWN0dXJlRGVzY3JpcHRpb24+IFN0cnVjdHVyZVNoYXBlOjppbnNwZWN0bwog
ICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGZpZWxkIDogY3VycmVudFNoYXBlLT5tX29wdGlvbmFs
RmllbGRzKQogICAgICAgICAgICAgb3B0aW9uYWxGaWVsZHMtPmFkZEl0ZW0oZmllbGQuZ2V0KCkp
OwogCi0gICAgICAgIGN1cnJlbnRPYmplY3QtPnNldEZpZWxkcygmZmllbGRzLmdldCgpKTsKLSAg
ICAgICAgY3VycmVudE9iamVjdC0+c2V0T3B0aW9uYWxGaWVsZHMoJm9wdGlvbmFsRmllbGRzLmdl
dCgpKTsKKyAgICAgICAgY3VycmVudE9iamVjdC0+c2V0RmllbGRzKFdURk1vdmUoZmllbGRzKSk7
CisgICAgICAgIGN1cnJlbnRPYmplY3QtPnNldE9wdGlvbmFsRmllbGRzKFdURk1vdmUob3B0aW9u
YWxGaWVsZHMpKTsKICAgICAgICAgY3VycmVudE9iamVjdC0+c2V0Q29uc3RydWN0b3JOYW1lKGN1
cnJlbnRTaGFwZS0+bV9jb25zdHJ1Y3Rvck5hbWUpOwogICAgICAgICBjdXJyZW50T2JqZWN0LT5z
ZXRJc0ltcHJlY2lzZShjdXJyZW50U2hhcGUtPm1faXNJbkRpY3Rpb25hcnlNb2RlKTsKIAogICAg
ICAgICBpZiAoY3VycmVudFNoYXBlLT5tX3Byb3RvKSB7CiAgICAgICAgICAgICBhdXRvIG5leHRP
YmplY3QgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpTdHJ1Y3R1cmVEZXNjcmlwdGlv
bjo6Y3JlYXRlKCkucmVsZWFzZSgpOwotICAgICAgICAgICAgY3VycmVudE9iamVjdC0+c2V0UHJv
dG90eXBlU3RydWN0dXJlKCZuZXh0T2JqZWN0LmdldCgpKTsKKyAgICAgICAgICAgIGN1cnJlbnRP
YmplY3QtPnNldFByb3RvdHlwZVN0cnVjdHVyZShuZXh0T2JqZWN0LmNvcHlSZWYoKSk7CiAgICAg
ICAgICAgICBjdXJyZW50T2JqZWN0ID0gV1RGTW92ZShuZXh0T2JqZWN0KTsKICAgICAgICAgfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9KU09OVmFsdWVzLmNwcCBiL1NvdXJjZS9XVEYv
d3RmL0pTT05WYWx1ZXMuY3BwCmluZGV4IDQwNTIwNzhmM2Y5N2MyZTkwZmFjZDA1MWRjMTkyZWM2
NTI2MTRjMzQuLjQ5YjNmMGNhMmZmMWY4ZTY5ZDBjNGY0M2FhYWNmY2M2YWJkYTZiNjAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL0pTT05WYWx1ZXMuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3Rm
L0pTT05WYWx1ZXMuY3BwCkBAIC01Nyw5ICs1Nyw5IEBAIGVudW0gY2xhc3MgVG9rZW4gewogICAg
IEludmFsaWQsCiB9OwogCi1jb25zdCBjaGFyKiBjb25zdCBudWxsU3RyaW5nID0gIm51bGwiOwot
Y29uc3QgY2hhciogY29uc3QgdHJ1ZVN0cmluZyA9ICJ0cnVlIjsKLWNvbnN0IGNoYXIqIGNvbnN0
IGZhbHNlU3RyaW5nID0gImZhbHNlIjsKK2NvbnN0IGNoYXIqIGNvbnN0IG51bGxUb2tlbiA9ICJu
dWxsIjsKK2NvbnN0IGNoYXIqIGNvbnN0IHRydWVUb2tlbiA9ICJ0cnVlIjsKK2NvbnN0IGNoYXIq
IGNvbnN0IGZhbHNlVG9rZW4gPSAiZmFsc2UiOwogCiBib29sIHBhcnNlQ29uc3RUb2tlbihjb25z
dCBVQ2hhciogc3RhcnQsIGNvbnN0IFVDaGFyKiBlbmQsIGNvbnN0IFVDaGFyKiogdG9rZW5FbmQs
IGNvbnN0IGNoYXIqIHRva2VuKQogewpAQCAtMjA5LDE1ICsyMDksMTUgQEAgVG9rZW4gcGFyc2VU
b2tlbihjb25zdCBVQ2hhciogc3RhcnQsIGNvbnN0IFVDaGFyKiBlbmQsIGNvbnN0IFVDaGFyKiog
dG9rZW5TdGFydCwKIAogICAgIHN3aXRjaCAoKnN0YXJ0KSB7CiAgICAgY2FzZSAnbic6Ci0gICAg
ICAgIGlmIChwYXJzZUNvbnN0VG9rZW4oc3RhcnQsIGVuZCwgdG9rZW5FbmQsIG51bGxTdHJpbmcp
KQorICAgICAgICBpZiAocGFyc2VDb25zdFRva2VuKHN0YXJ0LCBlbmQsIHRva2VuRW5kLCBudWxs
VG9rZW4pKQogICAgICAgICAgICAgcmV0dXJuIFRva2VuOjpOdWxsOwogICAgICAgICBicmVhazsK
ICAgICBjYXNlICd0JzoKLSAgICAgICAgaWYgKHBhcnNlQ29uc3RUb2tlbihzdGFydCwgZW5kLCB0
b2tlbkVuZCwgdHJ1ZVN0cmluZykpCisgICAgICAgIGlmIChwYXJzZUNvbnN0VG9rZW4oc3RhcnQs
IGVuZCwgdG9rZW5FbmQsIHRydWVUb2tlbikpCiAgICAgICAgICAgICByZXR1cm4gVG9rZW46OkJv
b2xUcnVlOwogICAgICAgICBicmVhazsKICAgICBjYXNlICdmJzoKLSAgICAgICAgaWYgKHBhcnNl
Q29uc3RUb2tlbihzdGFydCwgZW5kLCB0b2tlbkVuZCwgZmFsc2VTdHJpbmcpKQorICAgICAgICBp
ZiAocGFyc2VDb25zdFRva2VuKHN0YXJ0LCBlbmQsIHRva2VuRW5kLCBmYWxzZVRva2VuKSkKICAg
ICAgICAgICAgIHJldHVybiBUb2tlbjo6Qm9vbEZhbHNlOwogICAgICAgICBicmVhazsKICAgICBj
YXNlICdbJzoKQEAgLTM4MCw3ICszODAsNyBAQCBSZWZQdHI8SlNPTjo6VmFsdWU+IGJ1aWxkVmFs
dWUoY29uc3QgVUNoYXIqIHN0YXJ0LCBjb25zdCBVQ2hhciogZW5kLCBjb25zdCBVQ2hhcgogICAg
ICAgICAgICAgUmVmUHRyPEpTT046OlZhbHVlPiBhcnJheU5vZGUgPSBidWlsZFZhbHVlKHN0YXJ0
LCBlbmQsICZ0b2tlbkVuZCwgZGVwdGggKyAxKTsKICAgICAgICAgICAgIGlmICghYXJyYXlOb2Rl
KQogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICAgICAgYXJyYXktPnB1
c2hWYWx1ZShXVEZNb3ZlKGFycmF5Tm9kZSkpOworICAgICAgICAgICAgYXJyYXktPnB1c2hWYWx1
ZShhcnJheU5vZGUucmVsZWFzZU5vbk51bGwoKSk7CiAKICAgICAgICAgICAgIC8vIEFmdGVyIGEg
bGlzdCB2YWx1ZSwgd2UgZXhwZWN0IGEgY29tbWEgb3IgdGhlIGVuZCBvZiB0aGUgbGlzdC4KICAg
ICAgICAgICAgIHN0YXJ0ID0gdG9rZW5FbmQ7CkBAIC00MjAsNyArNDIwLDcgQEAgUmVmUHRyPEpT
T046OlZhbHVlPiBidWlsZFZhbHVlKGNvbnN0IFVDaGFyKiBzdGFydCwgY29uc3QgVUNoYXIqIGVu
ZCwgY29uc3QgVUNoYXIKICAgICAgICAgICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gdmFsdWUgPSBi
dWlsZFZhbHVlKHN0YXJ0LCBlbmQsICZ0b2tlbkVuZCwgZGVwdGggKyAxKTsKICAgICAgICAgICAg
IGlmICghdmFsdWUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgICAg
ICBvYmplY3QtPnNldFZhbHVlKGtleSwgV1RGTW92ZSh2YWx1ZSkpOworICAgICAgICAgICAgb2Jq
ZWN0LT5zZXRWYWx1ZShrZXksIHZhbHVlLnJlbGVhc2VOb25OdWxsKCkpOwogICAgICAgICAgICAg
c3RhcnQgPSB0b2tlbkVuZDsKIAogICAgICAgICAgICAgLy8gQWZ0ZXIgYSBrZXkvdmFsdWUgcGFp
ciwgd2UgZXhwZWN0IGEgY29tbWEgb3IgdGhlIGVuZCBvZiB0aGUKQEAgLTQ4OSw0MCArNDg5LDM4
IEBAIFJlZjxWYWx1ZT4gVmFsdWU6OmNyZWF0ZShjb25zdCBjaGFyKiB2YWx1ZSkKICAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBWYWx1ZSh2YWx1ZSkpOwogfQogCi1ib29sIFZhbHVlOjphc1ZhbHVl
KFJlZlB0cjxWYWx1ZT4mIHZhbHVlKQorUmVmUHRyPFZhbHVlPiBWYWx1ZTo6YXNWYWx1ZSgpCiB7
Ci0gICAgdmFsdWUgPSB0aGlzOwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiB0aGlzOwog
fQogCi1ib29sIFZhbHVlOjphc09iamVjdChSZWZQdHI8T2JqZWN0PiYpCitSZWZQdHI8T2JqZWN0
PiBWYWx1ZTo6YXNPYmplY3QoKQogewotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gbnVs
bHB0cjsKIH0KIAotYm9vbCBWYWx1ZTo6YXNBcnJheShSZWZQdHI8QXJyYXk+JikKK1JlZlB0cjxB
cnJheT4gVmFsdWU6OmFzQXJyYXkoKQogewotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4g
bnVsbHB0cjsKIH0KIAotYm9vbCBWYWx1ZTo6cGFyc2VKU09OKGNvbnN0IFN0cmluZyYganNvbklu
cHV0LCBSZWZQdHI8VmFsdWU+JiBvdXRwdXQpCitSZWZQdHI8VmFsdWU+IFZhbHVlOjpwYXJzZUpT
T04oY29uc3QgU3RyaW5nJiBqc29uKQogewogICAgIC8vIEZJWE1FOiBUaGlzIHdob2xlIGZpbGUg
c2hvdWxkIGp1c3QgdXNlIFN0cmluZ1ZpZXcgaW5zdGVhZCBvZiBVQ2hhci9sZW5ndGggYW5kIGF2
b2lkIHVwY29udmVydGluZy4KLSAgICBhdXRvIGNoYXJhY3RlcnMgPSBTdHJpbmdWaWV3KGpzb25J
bnB1dCkudXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7CisgICAgYXV0byBjaGFyYWN0ZXJzID0gU3Ry
aW5nVmlldyhqc29uKS51cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsKICAgICBjb25zdCBVQ2hhciog
c3RhcnQgPSBjaGFyYWN0ZXJzOwotICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBzdGFydCArIGpzb25J
bnB1dC5sZW5ndGgoKTsKKyAgICBjb25zdCBVQ2hhciogZW5kID0gc3RhcnQgKyBqc29uLmxlbmd0
aCgpOwogICAgIGNvbnN0IFVDaGFyKiB0b2tlbkVuZDsKICAgICBhdXRvIHJlc3VsdCA9IGJ1aWxk
VmFsdWUoc3RhcnQsIGVuZCwgJnRva2VuRW5kLCAwKTsKICAgICBpZiAoIXJlc3VsdCkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIGZvciAoY29u
c3QgVUNoYXIqIHZhbHVlRW5kID0gdG9rZW5FbmQ7IHZhbHVlRW5kIDwgZW5kOyArK3ZhbHVlRW5k
KSB7CiAgICAgICAgIGlmICghaXNTcGFjZU9yTmV3bGluZSgqdmFsdWVFbmQpKQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCi0g
ICAgb3V0cHV0ID0gV1RGTW92ZShyZXN1bHQpOwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKIHZvaWQgVmFsdWU6OmVzY2FwZVN0cmluZyhTdHJpbmdCdWlsZGVyJiBi
dWlsZGVyLCBTdHJpbmdWaWV3IHN0cmluZykKQEAgLTU3Myw5NCArNTcxLDMyIEBAIFN0cmluZyBW
YWx1ZTo6dG9KU09OU3RyaW5nKCkgY29uc3QKICAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7
CiB9CiAKLWJvb2wgVmFsdWU6OmFzQm9vbGVhbihib29sJiBvdXRwdXQpIGNvbnN0CitPcHRpb25h
bDxib29sPiBWYWx1ZTo6YXNCb29sZWFuKCkgY29uc3QKIHsKICAgICBpZiAodHlwZSgpICE9IFR5
cGU6OkJvb2xlYW4pCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIG91dHB1dCA9IG1fdmFs
dWUuYm9vbGVhbjsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKKyAgICByZXR1cm4gbV92YWx1ZS5ib29sZWFuOwogfQogCi1ib29sIFZhbHVlOjphc0RvdWJs
ZShkb3VibGUmIG91dHB1dCkgY29uc3QKK09wdGlvbmFsPGRvdWJsZT4gVmFsdWU6OmFzRG91Ymxl
KCkgY29uc3QKIHsKLSAgICBpZiAodHlwZSgpICE9IFR5cGU6OkRvdWJsZSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgb3V0cHV0ID0gbV92YWx1ZS5udW1iZXI7Ci0gICAgcmV0dXJuIHRy
dWU7CisgICAgaWYgKHR5cGUoKSAhPSBUeXBlOjpEb3VibGUgJiYgdHlwZSgpICE9IFR5cGU6Oklu
dGVnZXIpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgcmV0dXJuIG1fdmFsdWUu
bnVtYmVyOwogfQogCi1ib29sIFZhbHVlOjphc0RvdWJsZShmbG9hdCYgb3V0cHV0KSBjb25zdAor
T3B0aW9uYWw8aW50PiBWYWx1ZTo6YXNJbnRlZ2VyKCkgY29uc3QKIHsKLSAgICBpZiAodHlwZSgp
ICE9IFR5cGU6OkRvdWJsZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgb3V0cHV0ID0g
c3RhdGljX2Nhc3Q8ZmxvYXQ+KG1fdmFsdWUubnVtYmVyKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAg
ICBpZiAodHlwZSgpICE9IFR5cGU6OkRvdWJsZSAmJiB0eXBlKCkgIT0gVHlwZTo6SW50ZWdlcikK
KyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50
PihtX3ZhbHVlLm51bWJlcik7CiB9CiAKLWJvb2wgVmFsdWU6OmFzSW50ZWdlcihpbnQmIG91dHB1
dCkgY29uc3QKLXsKLSAgICBpZiAodHlwZSgpICE9IFR5cGU6OkludGVnZXIgJiYgdHlwZSgpICE9
IFR5cGU6OkRvdWJsZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgb3V0cHV0ID0gc3Rh
dGljX2Nhc3Q8aW50PihtX3ZhbHVlLm51bWJlcik7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJv
b2wgVmFsdWU6OmFzSW50ZWdlcih1bnNpZ25lZCYgb3V0cHV0KSBjb25zdAotewotICAgIGlmICh0
eXBlKCkgIT0gVHlwZTo6SW50ZWdlciAmJiB0eXBlKCkgIT0gVHlwZTo6RG91YmxlKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBvdXRwdXQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV92
YWx1ZS5udW1iZXIpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFZhbHVlOjphc0ludGVn
ZXIobG9uZyYgb3V0cHV0KSBjb25zdAotewotICAgIGlmICh0eXBlKCkgIT0gVHlwZTo6SW50ZWdl
ciAmJiB0eXBlKCkgIT0gVHlwZTo6RG91YmxlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBvdXRwdXQgPSBzdGF0aWNfY2FzdDxsb25nPihtX3ZhbHVlLm51bWJlcik7Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLWJvb2wgVmFsdWU6OmFzSW50ZWdlcihsb25nIGxvbmcmIG91dHB1dCkgY29u
c3QKLXsKLSAgICBpZiAodHlwZSgpICE9IFR5cGU6OkludGVnZXIgJiYgdHlwZSgpICE9IFR5cGU6
OkRvdWJsZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgb3V0cHV0ID0gc3RhdGljX2Nh
c3Q8bG9uZyBsb25nPihtX3ZhbHVlLm51bWJlcik7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJv
b2wgVmFsdWU6OmFzSW50ZWdlcih1bnNpZ25lZCBsb25nJiBvdXRwdXQpIGNvbnN0Ci17Ci0gICAg
aWYgKHR5cGUoKSAhPSBUeXBlOjpJbnRlZ2VyICYmIHR5cGUoKSAhPSBUeXBlOjpEb3VibGUpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIG91dHB1dCA9IHN0YXRpY19jYXN0PHVuc2lnbmVk
IGxvbmc+KG1fdmFsdWUubnVtYmVyKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBWYWx1
ZTo6YXNJbnRlZ2VyKHVuc2lnbmVkIGxvbmcgbG9uZyYgb3V0cHV0KSBjb25zdAotewotICAgIGlm
ICh0eXBlKCkgIT0gVHlwZTo6SW50ZWdlciAmJiB0eXBlKCkgIT0gVHlwZTo6RG91YmxlKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBvdXRwdXQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBs
b25nIGxvbmc+KG1fdmFsdWUubnVtYmVyKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBW
YWx1ZTo6YXNTdHJpbmcoU3RyaW5nJiBvdXRwdXQpIGNvbnN0CitTdHJpbmcgVmFsdWU6OmFzU3Ry
aW5nKCkgY29uc3QKIHsKICAgICBpZiAodHlwZSgpICE9IFR5cGU6OlN0cmluZykKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgb3V0cHV0ID0gbV92YWx1ZS5zdHJpbmc7Ci0gICAgcmV0dXJu
IHRydWU7CisgICAgICAgIHJldHVybiBudWxsU3RyaW5nKCk7CisgICAgcmV0dXJuIG1fdmFsdWUu
c3RyaW5nOwogfQogCiB2b2lkIFZhbHVlOjp3cml0ZUpTT04oU3RyaW5nQnVpbGRlciYgb3V0cHV0
KSBjb25zdApAQCAtNzAzLDc2ICs2MzksNzQgQEAgT2JqZWN0QmFzZTo6fk9iamVjdEJhc2UoKQog
ewogfQogCi1ib29sIE9iamVjdEJhc2U6OmFzT2JqZWN0KFJlZlB0cjxPYmplY3Q+JiBvdXRwdXQp
CitSZWZQdHI8T2JqZWN0PiBPYmplY3RCYXNlOjphc09iamVjdCgpCiB7CiAgICAgQ09NUElMRV9B
U1NFUlQoc2l6ZW9mKE9iamVjdCkgPT0gc2l6ZW9mKE9iamVjdEJhc2UpLCBjYW5ub3RfY2FzdCk7
Ci0KLSAgICBvdXRwdXQgPSBzdGF0aWNfY2FzdDxPYmplY3QqPih0aGlzKTsKLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotT2JqZWN0KiBPYmplY3RCYXNlOjpvcGVuQWNjZXNzb3JzKCkKLXsKLSAgICBD
T01QSUxFX0FTU0VSVChzaXplb2YoT2JqZWN0KSA9PSBzaXplb2YoT2JqZWN0QmFzZSksIGNhbm5v
dF9jYXN0KTsKLQogICAgIHJldHVybiBzdGF0aWNfY2FzdDxPYmplY3QqPih0aGlzKTsKIH0KIAog
c2l6ZV90IE9iamVjdEJhc2U6Om1lbW9yeUNvc3QoKSBjb25zdAogewogICAgIHNpemVfdCBtZW1v
cnlDb3N0ID0gVmFsdWU6Om1lbW9yeUNvc3QoKTsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIGVudHJ5
IDogbV9tYXApIHsKLSAgICAgICAgbWVtb3J5Q29zdCArPSBlbnRyeS5rZXkuc2l6ZUluQnl0ZXMo
KTsKLSAgICAgICAgaWYgKGVudHJ5LnZhbHVlKQotICAgICAgICAgICAgbWVtb3J5Q29zdCArPSBl
bnRyeS52YWx1ZS0+bWVtb3J5Q29zdCgpOwotICAgIH0KKyAgICBmb3IgKGNvbnN0IGF1dG8mIGVu
dHJ5IDogbV9tYXApCisgICAgICAgIG1lbW9yeUNvc3QgKz0gZW50cnkua2V5LnNpemVJbkJ5dGVz
KCkgKyBlbnRyeS52YWx1ZS0+bWVtb3J5Q29zdCgpOwogICAgIHJldHVybiBtZW1vcnlDb3N0Owog
fQogCi1ib29sIE9iamVjdEJhc2U6OmdldEJvb2xlYW4oY29uc3QgU3RyaW5nJiBuYW1lLCBib29s
JiBvdXRwdXQpIGNvbnN0CitPcHRpb25hbDxib29sPiBPYmplY3RCYXNlOjpnZXRCb29sZWFuKGNv
bnN0IFN0cmluZyYgbmFtZSkgY29uc3QKIHsKLSAgICBSZWZQdHI8VmFsdWU+IHZhbHVlOwotICAg
IGlmICghZ2V0VmFsdWUobmFtZSwgdmFsdWUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICByZXR1cm4gdmFsdWUtPmFzQm9vbGVhbihvdXRwdXQpOworICAgIGF1dG8gdmFsdWUgPSBnZXRW
YWx1ZShuYW1lKTsKKyAgICBpZiAoIXZhbHVlKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OworICAgIHJldHVybiB2YWx1ZS0+YXNCb29sZWFuKCk7CiB9CiAKLWJvb2wgT2JqZWN0QmFzZTo6
Z2V0U3RyaW5nKGNvbnN0IFN0cmluZyYgbmFtZSwgU3RyaW5nJiBvdXRwdXQpIGNvbnN0CitPcHRp
b25hbDxkb3VibGU+IE9iamVjdEJhc2U6OmdldERvdWJsZShjb25zdCBTdHJpbmcmIG5hbWUpIGNv
bnN0CiB7Ci0gICAgUmVmUHRyPFZhbHVlPiB2YWx1ZTsKLSAgICBpZiAoIWdldFZhbHVlKG5hbWUs
IHZhbHVlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHZhbHVlLT5hc1N0
cmluZyhvdXRwdXQpOworICAgIGF1dG8gdmFsdWUgPSBnZXRWYWx1ZShuYW1lKTsKKyAgICBpZiAo
IXZhbHVlKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHJldHVybiB2YWx1ZS0+
YXNEb3VibGUoKTsKIH0KIAotYm9vbCBPYmplY3RCYXNlOjpnZXRPYmplY3QoY29uc3QgU3RyaW5n
JiBuYW1lLCBSZWZQdHI8T2JqZWN0PiYgb3V0cHV0KSBjb25zdAorT3B0aW9uYWw8aW50PiBPYmpl
Y3RCYXNlOjpnZXRJbnRlZ2VyKGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3QKIHsKLSAgICBSZWZQ
dHI8VmFsdWU+IHZhbHVlOwotICAgIGlmICghZ2V0VmFsdWUobmFtZSwgdmFsdWUpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gdmFsdWUtPmFzT2JqZWN0KG91dHB1dCk7Cisg
ICAgYXV0byB2YWx1ZSA9IGdldFZhbHVlKG5hbWUpOworICAgIGlmICghdmFsdWUpCisgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgcmV0dXJuIHZhbHVlLT5hc0ludGVnZXIoKTsKIH0K
IAotYm9vbCBPYmplY3RCYXNlOjpnZXRBcnJheShjb25zdCBTdHJpbmcmIG5hbWUsIFJlZlB0cjxB
cnJheT4mIG91dHB1dCkgY29uc3QKK1N0cmluZyBPYmplY3RCYXNlOjpnZXRTdHJpbmcoY29uc3Qg
U3RyaW5nJiBuYW1lKSBjb25zdAogewotICAgIFJlZlB0cjxWYWx1ZT4gdmFsdWU7Ci0gICAgaWYg
KCFnZXRWYWx1ZShuYW1lLCB2YWx1ZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJl
dHVybiB2YWx1ZS0+YXNBcnJheShvdXRwdXQpOworICAgIGF1dG8gdmFsdWUgPSBnZXRWYWx1ZShu
YW1lKTsKKyAgICBpZiAoIXZhbHVlKQorICAgICAgICByZXR1cm4gbnVsbFN0cmluZygpOworICAg
IHJldHVybiB2YWx1ZS0+YXNTdHJpbmcoKTsKIH0KIAotYm9vbCBPYmplY3RCYXNlOjpnZXRWYWx1
ZShjb25zdCBTdHJpbmcmIG5hbWUsIFJlZlB0cjxWYWx1ZT4mIG91dHB1dCkgY29uc3QKK1JlZlB0
cjxPYmplY3Q+IE9iamVjdEJhc2U6OmdldE9iamVjdChjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0
CiB7Ci0gICAgRGljdGlvbmFyeTo6Y29uc3RfaXRlcmF0b3IgZmluZFJlc3VsdCA9IG1fbWFwLmZp
bmQobmFtZSk7CisgICAgYXV0byB2YWx1ZSA9IGdldFZhbHVlKG5hbWUpOworICAgIGlmICghdmFs
dWUpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiB2YWx1ZS0+YXNPYmplY3Qo
KTsKK30KKworUmVmUHRyPEFycmF5PiBPYmplY3RCYXNlOjpnZXRBcnJheShjb25zdCBTdHJpbmcm
IG5hbWUpIGNvbnN0Cit7CisgICAgYXV0byB2YWx1ZSA9IGdldFZhbHVlKG5hbWUpOworICAgIGlm
ICghdmFsdWUpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiB2YWx1ZS0+YXNB
cnJheSgpOworfQorCitSZWZQdHI8VmFsdWU+IE9iamVjdEJhc2U6OmdldFZhbHVlKGNvbnN0IFN0
cmluZyYgbmFtZSkgY29uc3QKK3sKKyAgICBhdXRvIGZpbmRSZXN1bHQgPSBtX21hcC5maW5kKG5h
bWUpOwogICAgIGlmIChmaW5kUmVzdWx0ID09IG1fbWFwLmVuZCgpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBvdXRwdXQgPSBmaW5kUmVzdWx0LT52YWx1ZTsKLSAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIGZpbmRSZXN1bHQtPnZhbHVl
LmNvcHlSZWYoKTsKIH0KIAogdm9pZCBPYmplY3RCYXNlOjpyZW1vdmUoY29uc3QgU3RyaW5nJiBu
YW1lKQpAQCAtNzk4LDggKzczMiw2IEBAIHZvaWQgT2JqZWN0QmFzZTo6d3JpdGVKU09OKFN0cmlu
Z0J1aWxkZXImIG91dHB1dCkgY29uc3QKIAogT2JqZWN0QmFzZTo6T2JqZWN0QmFzZSgpCiAgICAg
OiBWYWx1ZShUeXBlOjpPYmplY3QpCi0gICAgLCBtX21hcCgpCi0gICAgLCBtX29yZGVyKCkKIHsK
IH0KIApAQCAtODA3LDE3ICs3MzksMTYgQEAgQXJyYXlCYXNlOjp+QXJyYXlCYXNlKCkKIHsKIH0K
IAotYm9vbCBBcnJheUJhc2U6OmFzQXJyYXkoUmVmUHRyPEFycmF5PiYgb3V0cHV0KQorUmVmUHRy
PEFycmF5PiBBcnJheUJhc2U6OmFzQXJyYXkoKQogewogICAgIENPTVBJTEVfQVNTRVJUKHNpemVv
ZihBcnJheUJhc2UpID09IHNpemVvZihBcnJheSksIGNhbm5vdF9jYXN0KTsKLSAgICBvdXRwdXQg
PSBzdGF0aWNfY2FzdDxBcnJheSo+KHRoaXMpOwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVy
biBzdGF0aWNfY2FzdDxBcnJheSo+KHRoaXMpOwogfQogCiB2b2lkIEFycmF5QmFzZTo6d3JpdGVK
U09OKFN0cmluZ0J1aWxkZXImIG91dHB1dCkgY29uc3QKIHsKICAgICBvdXRwdXQuYXBwZW5kKCdb
Jyk7Ci0gICAgZm9yIChWZWN0b3I8UmVmUHRyPFZhbHVlPj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
bV9tYXAuYmVnaW4oKTsgaXQgIT0gbV9tYXAuZW5kKCk7ICsraXQpIHsKKyAgICBmb3IgKGF1dG8g
aXQgPSBtX21hcC5iZWdpbigpOyBpdCAhPSBtX21hcC5lbmQoKTsgKytpdCkgewogICAgICAgICBp
ZiAoaXQgIT0gbV9tYXAuYmVnaW4oKSkKICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoJywnKTsK
ICAgICAgICAgKCppdCktPndyaXRlSlNPTihvdXRwdXQpOwpAQCAtODI3LDExICs3NTgsMTAgQEAg
dm9pZCBBcnJheUJhc2U6OndyaXRlSlNPTihTdHJpbmdCdWlsZGVyJiBvdXRwdXQpIGNvbnN0CiAK
IEFycmF5QmFzZTo6QXJyYXlCYXNlKCkKICAgICA6IFZhbHVlKFR5cGU6OkFycmF5KQotICAgICwg
bV9tYXAoKQogewogfQogCi1SZWZQdHI8VmFsdWU+IEFycmF5QmFzZTo6Z2V0KHNpemVfdCBpbmRl
eCkgY29uc3QKK1JlZjxWYWx1ZT4gQXJyYXlCYXNlOjpnZXQoc2l6ZV90IGluZGV4KSBjb25zdAog
ewogICAgIFJFTEVBU0VfQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oaW5kZXggPCBt
X21hcC5zaXplKCkpOwogICAgIHJldHVybiBtX21hcFtpbmRleF07CkBAIC04NTAsMTAgKzc4MCw4
IEBAIFJlZjxBcnJheT4gQXJyYXk6OmNyZWF0ZSgpCiBzaXplX3QgQXJyYXlCYXNlOjptZW1vcnlD
b3N0KCkgY29uc3QKIHsKICAgICBzaXplX3QgbWVtb3J5Q29zdCA9IFZhbHVlOjptZW1vcnlDb3N0
KCk7Ci0gICAgZm9yIChjb25zdCBhdXRvJiBpdGVtIDogbV9tYXApIHsKLSAgICAgICAgaWYgKGl0
ZW0pCi0gICAgICAgICAgICBtZW1vcnlDb3N0ICs9IGl0ZW0tPm1lbW9yeUNvc3QoKTsKLSAgICB9
CisgICAgZm9yIChjb25zdCBhdXRvJiBpdGVtIDogbV9tYXApCisgICAgICAgIG1lbW9yeUNvc3Qg
Kz0gaXRlbS0+bWVtb3J5Q29zdCgpOwogICAgIHJldHVybiBtZW1vcnlDb3N0OwogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9KU09OVmFsdWVzLmggYi9Tb3VyY2UvV1RGL3d0Zi9KU09O
VmFsdWVzLmgKaW5kZXggZWJhYmM0NDlmODgwYjM5ZDNmYWRlNzhjZDYxYjFjNGQ1ZTBlNjg2My4u
NDMwNzQ1M2Q5Y2M4Zjg4Y2MxNjk5Y2Q4ODU3MjE2ODc3ZmRjOWIwOSAxMDA2NDQKLS0tIGEvU291
cmNlL1dURi93dGYvSlNPTlZhbHVlcy5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL0pTT05WYWx1ZXMu
aApAQCAtOTIsMjIgKzkyLDE1IEBAIHB1YmxpYzoKICAgICBUeXBlIHR5cGUoKSBjb25zdCB7IHJl
dHVybiBtX3R5cGU7IH0KICAgICBib29sIGlzTnVsbCgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSA9
PSBUeXBlOjpOdWxsOyB9CiAKLSAgICBib29sIGFzQm9vbGVhbihib29sJikgY29uc3Q7Ci0gICAg
Ym9vbCBhc0ludGVnZXIoaW50JikgY29uc3Q7Ci0gICAgYm9vbCBhc0ludGVnZXIodW5zaWduZWQm
KSBjb25zdDsKLSAgICBib29sIGFzSW50ZWdlcihsb25nJikgY29uc3Q7Ci0gICAgYm9vbCBhc0lu
dGVnZXIobG9uZyBsb25nJikgY29uc3Q7Ci0gICAgYm9vbCBhc0ludGVnZXIodW5zaWduZWQgbG9u
ZyYpIGNvbnN0OwotICAgIGJvb2wgYXNJbnRlZ2VyKHVuc2lnbmVkIGxvbmcgbG9uZyYpIGNvbnN0
OwotICAgIGJvb2wgYXNEb3VibGUoZG91YmxlJikgY29uc3Q7Ci0gICAgYm9vbCBhc0RvdWJsZShm
bG9hdCYpIGNvbnN0OwotICAgIGJvb2wgYXNTdHJpbmcoU3RyaW5nJikgY29uc3Q7Ci0gICAgYm9v
bCBhc1ZhbHVlKFJlZlB0cjxWYWx1ZT4mKTsKKyAgICBPcHRpb25hbDxib29sPiBhc0Jvb2xlYW4o
KSBjb25zdDsKKyAgICBPcHRpb25hbDxpbnQ+IGFzSW50ZWdlcigpIGNvbnN0OworICAgIE9wdGlv
bmFsPGRvdWJsZT4gYXNEb3VibGUoKSBjb25zdDsKKyAgICBTdHJpbmcgYXNTdHJpbmcoKSBjb25z
dDsKKyAgICBSZWZQdHI8VmFsdWU+IGFzVmFsdWUoKTsKKyAgICB2aXJ0dWFsIFJlZlB0cjxPYmpl
Y3Q+IGFzT2JqZWN0KCk7CisgICAgdmlydHVhbCBSZWZQdHI8QXJyYXk+IGFzQXJyYXkoKTsKIAot
ICAgIHZpcnR1YWwgYm9vbCBhc09iamVjdChSZWZQdHI8T2JqZWN0PiYpOwotICAgIHZpcnR1YWwg
Ym9vbCBhc0FycmF5KFJlZlB0cjxBcnJheT4mKTsKLQotICAgIHN0YXRpYyBib29sIHBhcnNlSlNP
Tihjb25zdCBTdHJpbmcmIGpzb25JbnB1dCwgUmVmUHRyPFZhbHVlPiYgb3V0cHV0KTsKKyAgICBz
dGF0aWMgUmVmUHRyPFZhbHVlPiBwYXJzZUpTT04oY29uc3QgU3RyaW5nJik7CiAgICAgc3RhdGlj
IHZvaWQgZXNjYXBlU3RyaW5nKFN0cmluZ0J1aWxkZXImLCBTdHJpbmdWaWV3KTsKIAogICAgIFN0
cmluZyB0b0pTT05TdHJpbmcoKSBjb25zdDsKQEAgLTE3Miw5NSArMTY1LDYzIEBAIHByaXZhdGU6
CiAKIGNsYXNzIFdURl9FWFBPUlRfUFJJVkFURSBPYmplY3RCYXNlIDogcHVibGljIFZhbHVlIHsK
IHByaXZhdGU6Ci0gICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgUmVmUHRyPFZhbHVlPj4gRGlj
dGlvbmFyeTsKKyAgICB1c2luZyBEYXRhU3RvcmFnZSA9IEhhc2hNYXA8U3RyaW5nLCBSZWY8VmFs
dWU+PjsKKyAgICB1c2luZyBPcmRlclN0b3JhZ2UgPSBWZWN0b3I8U3RyaW5nPjsKIAogcHVibGlj
OgotICAgIHR5cGVkZWYgRGljdGlvbmFyeTo6aXRlcmF0b3IgaXRlcmF0b3I7Ci0gICAgdHlwZWRl
ZiBEaWN0aW9uYXJ5Ojpjb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKKyAgICB1c2luZyBp
dGVyYXRvciA9IERhdGFTdG9yYWdlOjppdGVyYXRvcjsKKyAgICB1c2luZyBjb25zdF9pdGVyYXRv
ciA9IERhdGFTdG9yYWdlOjpjb25zdF9pdGVyYXRvcjsKIAotICAgIE9iamVjdCogb3BlbkFjY2Vz
c29ycygpOworICAgIFJlZlB0cjxPYmplY3Q+IGFzT2JqZWN0KCkgZmluYWw7CiAKICAgICBzaXpl
X3QgbWVtb3J5Q29zdCgpIGNvbnN0IGZpbmFsOwogCiBwcm90ZWN0ZWQ6CiAgICAgfk9iamVjdEJh
c2UoKSBvdmVycmlkZTsKIAotICAgIGJvb2wgYXNPYmplY3QoUmVmUHRyPE9iamVjdD4mIG91dHB1
dCkgb3ZlcnJpZGU7Ci0KICAgICAvLyBGSVhNRTogdXNlIHRlbXBsYXRlcyB0byByZWR1Y2UgdGhl
IGFtb3VudCBvZiBkdXBsaWNhdGVkIHNldCooKSBtZXRob2RzLgogICAgIHZvaWQgc2V0Qm9vbGVh
bihjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wpOwogICAgIHZvaWQgc2V0SW50ZWdlcihjb25zdCBT
dHJpbmcmIG5hbWUsIGludCk7CiAgICAgdm9pZCBzZXREb3VibGUoY29uc3QgU3RyaW5nJiBuYW1l
LCBkb3VibGUpOwogICAgIHZvaWQgc2V0U3RyaW5nKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3Qg
U3RyaW5nJik7Ci0gICAgdm9pZCBzZXRWYWx1ZShjb25zdCBTdHJpbmcmIG5hbWUsIFJlZlB0cjxW
YWx1ZT4mJik7Ci0gICAgdm9pZCBzZXRPYmplY3QoY29uc3QgU3RyaW5nJiBuYW1lLCBSZWZQdHI8
T2JqZWN0QmFzZT4mJik7Ci0gICAgdm9pZCBzZXRBcnJheShjb25zdCBTdHJpbmcmIG5hbWUsIFJl
ZlB0cjxBcnJheUJhc2U+JiYpOworICAgIHZvaWQgc2V0VmFsdWUoY29uc3QgU3RyaW5nJiBuYW1l
LCBSZWY8VmFsdWU+JiYpOworICAgIHZvaWQgc2V0T2JqZWN0KGNvbnN0IFN0cmluZyYgbmFtZSwg
UmVmPE9iamVjdEJhc2U+JiYpOworICAgIHZvaWQgc2V0QXJyYXkoY29uc3QgU3RyaW5nJiBuYW1l
LCBSZWY8QXJyYXlCYXNlPiYmKTsKIAogICAgIGl0ZXJhdG9yIGZpbmQoY29uc3QgU3RyaW5nJiBu
YW1lKTsKICAgICBjb25zdF9pdGVyYXRvciBmaW5kKGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3Q7
CiAKLSAgICAvLyBGSVhNRTogdXNlIHRlbXBsYXRlcyB0byByZWR1Y2UgdGhlIGFtb3VudCBvZiBk
dXBsaWNhdGVkIGdldCooKSBtZXRob2RzLgotICAgIGJvb2wgZ2V0Qm9vbGVhbihjb25zdCBTdHJp
bmcmIG5hbWUsIGJvb2wmIG91dHB1dCkgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgVD4gYm9v
bCBnZXREb3VibGUoY29uc3QgU3RyaW5nJiBuYW1lLCBUJiBvdXRwdXQpIGNvbnN0Ci0gICAgewot
ICAgICAgICBSZWZQdHI8VmFsdWU+IHZhbHVlOwotICAgICAgICBpZiAoIWdldFZhbHVlKG5hbWUs
IHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICByZXR1cm4gdmFs
dWUtPmFzRG91YmxlKG91dHB1dCk7Ci0gICAgfQotICAgIHRlbXBsYXRlPGNsYXNzIFQ+IGJvb2wg
Z2V0SW50ZWdlcihjb25zdCBTdHJpbmcmIG5hbWUsIFQmIG91dHB1dCkgY29uc3QKLSAgICB7Ci0g
ICAgICAgIFJlZlB0cjxWYWx1ZT4gdmFsdWU7Ci0gICAgICAgIGlmICghZ2V0VmFsdWUobmFtZSwg
dmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIHJldHVybiB2YWx1
ZS0+YXNJbnRlZ2VyKG91dHB1dCk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8Y2xhc3MgVD4gT3B0
aW9uYWw8VD4gZ2V0TnVtYmVyKGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3QKLSAgICB7Ci0gICAg
ICAgIFJlZlB0cjxWYWx1ZT4gdmFsdWU7Ci0gICAgICAgIGlmICghZ2V0VmFsdWUobmFtZSwgdmFs
dWUpKQotICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgICAgICBUIHJlc3Vs
dDsKLSAgICAgICAgaWYgKCF2YWx1ZS0+YXNEb3VibGUocmVzdWx0KSkKLSAgICAgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAg
ICBib29sIGdldFN0cmluZyhjb25zdCBTdHJpbmcmIG5hbWUsIFN0cmluZyYgb3V0cHV0KSBjb25z
dDsKLSAgICBib29sIGdldE9iamVjdChjb25zdCBTdHJpbmcmIG5hbWUsIFJlZlB0cjxPYmplY3Q+
JikgY29uc3Q7Ci0gICAgYm9vbCBnZXRBcnJheShjb25zdCBTdHJpbmcmIG5hbWUsIFJlZlB0cjxB
cnJheT4mKSBjb25zdDsKLSAgICBib29sIGdldFZhbHVlKGNvbnN0IFN0cmluZyYgbmFtZSwgUmVm
UHRyPFZhbHVlPiYpIGNvbnN0OworICAgIE9wdGlvbmFsPGJvb2w+IGdldEJvb2xlYW4oY29uc3Qg
U3RyaW5nJiBuYW1lKSBjb25zdDsKKyAgICBPcHRpb25hbDxkb3VibGU+IGdldERvdWJsZShjb25z
dCBTdHJpbmcmIG5hbWUpIGNvbnN0OworICAgIE9wdGlvbmFsPGludD4gZ2V0SW50ZWdlcihjb25z
dCBTdHJpbmcmIG5hbWUpIGNvbnN0OworICAgIFN0cmluZyBnZXRTdHJpbmcoY29uc3QgU3RyaW5n
JiBuYW1lKSBjb25zdDsKKyAgICBSZWZQdHI8T2JqZWN0PiBnZXRPYmplY3QoY29uc3QgU3RyaW5n
JiBuYW1lKSBjb25zdDsKKyAgICBSZWZQdHI8QXJyYXk+IGdldEFycmF5KGNvbnN0IFN0cmluZyYg
bmFtZSkgY29uc3Q7CisgICAgUmVmUHRyPFZhbHVlPiBnZXRWYWx1ZShjb25zdCBTdHJpbmcmIG5h
bWUpIGNvbnN0OwogCiAgICAgdm9pZCByZW1vdmUoY29uc3QgU3RyaW5nJiBuYW1lKTsKIAotICAg
IHZvaWQgd3JpdGVKU09OKFN0cmluZ0J1aWxkZXImIG91dHB1dCkgY29uc3Qgb3ZlcnJpZGU7Cisg
ICAgdm9pZCB3cml0ZUpTT04oU3RyaW5nQnVpbGRlciYgb3V0cHV0KSBjb25zdCBmaW5hbDsKIAog
ICAgIGl0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gbV9tYXAuYmVnaW4oKTsgfQogICAgIGl0ZXJh
dG9yIGVuZCgpIHsgcmV0dXJuIG1fbWFwLmVuZCgpOyB9CiAgICAgY29uc3RfaXRlcmF0b3IgYmVn
aW4oKSBjb25zdCB7IHJldHVybiBtX21hcC5iZWdpbigpOyB9CiAgICAgY29uc3RfaXRlcmF0b3Ig
ZW5kKCkgY29uc3QgeyByZXR1cm4gbV9tYXAuZW5kKCk7IH0KIAotICAgIGludCBzaXplKCkgY29u
c3QgeyByZXR1cm4gbV9tYXAuc2l6ZSgpOyB9CisgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fbWFwLnNpemUoKTsgfQogCiBwcm90ZWN0ZWQ6CiAgICAgT2JqZWN0QmFzZSgpOwog
CiBwcml2YXRlOgotICAgIERpY3Rpb25hcnkgbV9tYXA7Ci0gICAgVmVjdG9yPFN0cmluZz4gbV9v
cmRlcjsKKyAgICBEYXRhU3RvcmFnZSBtX21hcDsKKyAgICBPcmRlclN0b3JhZ2UgbV9vcmRlcjsK
IH07CiAKIGNsYXNzIE9iamVjdCA6IHB1YmxpYyBPYmplY3RCYXNlIHsKIHB1YmxpYzoKICAgICBz
dGF0aWMgV1RGX0VYUE9SVF9QUklWQVRFIFJlZjxPYmplY3Q+IGNyZWF0ZSgpOwogCi0gICAgdXNp
bmcgT2JqZWN0QmFzZTo6YXNPYmplY3Q7Ci0KICAgICAvLyBUaGlzIGNsYXNzIGV4cGVjdGVkIG5v
bi1jeWNsaWMgdmFsdWVzLCBhcyB3ZSBjYW5ub3Qgc2VyaWFsaXplIGN5Y2xlcyBpbiBKU09OLgog
ICAgIHVzaW5nIE9iamVjdEJhc2U6OnNldEJvb2xlYW47CiAgICAgdXNpbmcgT2JqZWN0QmFzZTo6
c2V0SW50ZWdlcjsKQEAgLTI3NCw3ICsyMzUsNiBAQCBwdWJsaWM6CiAgICAgdXNpbmcgT2JqZWN0
QmFzZTo6Z2V0Qm9vbGVhbjsKICAgICB1c2luZyBPYmplY3RCYXNlOjpnZXRJbnRlZ2VyOwogICAg
IHVzaW5nIE9iamVjdEJhc2U6OmdldERvdWJsZTsKLSAgICB1c2luZyBPYmplY3RCYXNlOjpnZXRO
dW1iZXI7CiAgICAgdXNpbmcgT2JqZWN0QmFzZTo6Z2V0U3RyaW5nOwogICAgIHVzaW5nIE9iamVj
dEJhc2U6OmdldE9iamVjdDsKICAgICB1c2luZyBPYmplY3RCYXNlOjpnZXRBcnJheTsKQEAgLTI5
MCw0OSArMjUwLDQ5IEBAIHB1YmxpYzoKIAogCiBjbGFzcyBXVEZfRVhQT1JUX1BSSVZBVEUgQXJy
YXlCYXNlIDogcHVibGljIFZhbHVlIHsKK3ByaXZhdGU6CisgICAgdXNpbmcgRGF0YVN0b3JhZ2Ug
PSBWZWN0b3I8UmVmPFZhbHVlPj47CisKIHB1YmxpYzoKLSAgICB0eXBlZGVmIFZlY3RvcjxSZWZQ
dHI8VmFsdWU+Pjo6aXRlcmF0b3IgaXRlcmF0b3I7Ci0gICAgdHlwZWRlZiBWZWN0b3I8UmVmUHRy
PFZhbHVlPj46OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOworICAgIHVzaW5nIGl0ZXJh
dG9yID0gRGF0YVN0b3JhZ2U6Oml0ZXJhdG9yOworICAgIHVzaW5nIGNvbnN0X2l0ZXJhdG9yID0g
RGF0YVN0b3JhZ2U6OmNvbnN0X2l0ZXJhdG9yOwogCi0gICAgdW5zaWduZWQgbGVuZ3RoKCkgY29u
c3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fbWFwLnNpemUoKSk7IH0KKyAgICBz
aXplX3QgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9tYXAuc2l6ZSgpOyB9CiAKLSAgICBSZWZQ
dHI8VmFsdWU+IGdldChzaXplX3QgaW5kZXgpIGNvbnN0OworICAgIFJlZjxWYWx1ZT4gZ2V0KHNp
emVfdCBpbmRleCkgY29uc3Q7CiAKICAgICBzaXplX3QgbWVtb3J5Q29zdCgpIGNvbnN0IGZpbmFs
OwogCisgICAgUmVmUHRyPEFycmF5PiBhc0FycmF5KCkgZmluYWw7CisKIHByb3RlY3RlZDoKICAg
ICB+QXJyYXlCYXNlKCkgb3ZlcnJpZGU7CiAKLSAgICBib29sIGFzQXJyYXkoUmVmUHRyPEFycmF5
PiYpIG92ZXJyaWRlOwotCiAgICAgdm9pZCBwdXNoQm9vbGVhbihib29sKTsKICAgICB2b2lkIHB1
c2hJbnRlZ2VyKGludCk7CiAgICAgdm9pZCBwdXNoRG91YmxlKGRvdWJsZSk7CiAgICAgdm9pZCBw
dXNoU3RyaW5nKGNvbnN0IFN0cmluZyYpOwotICAgIHZvaWQgcHVzaFZhbHVlKFJlZlB0cjxWYWx1
ZT4mJik7Ci0gICAgdm9pZCBwdXNoT2JqZWN0KFJlZlB0cjxPYmplY3RCYXNlPiYmKTsKLSAgICB2
b2lkIHB1c2hBcnJheShSZWZQdHI8QXJyYXlCYXNlPiYmKTsKLQotICAgIHZvaWQgd3JpdGVKU09O
KFN0cmluZ0J1aWxkZXImIG91dHB1dCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBwdXNoVmFs
dWUoUmVmPFZhbHVlPiYmKTsKKyAgICB2b2lkIHB1c2hPYmplY3QoUmVmPE9iamVjdEJhc2U+JiYp
OworICAgIHZvaWQgcHVzaEFycmF5KFJlZjxBcnJheUJhc2U+JiYpOwogCiAgICAgaXRlcmF0b3Ig
YmVnaW4oKSB7IHJldHVybiBtX21hcC5iZWdpbigpOyB9CiAgICAgaXRlcmF0b3IgZW5kKCkgeyBy
ZXR1cm4gbV9tYXAuZW5kKCk7IH0KICAgICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsg
cmV0dXJuIG1fbWFwLmJlZ2luKCk7IH0KICAgICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7
IHJldHVybiBtX21hcC5lbmQoKTsgfQorICAgIHZvaWQgd3JpdGVKU09OKFN0cmluZ0J1aWxkZXIm
IG91dHB1dCkgY29uc3QgZmluYWw7CiAKIHByb3RlY3RlZDoKICAgICBBcnJheUJhc2UoKTsKIAog
cHJpdmF0ZToKLSAgICBWZWN0b3I8UmVmUHRyPFZhbHVlPj4gbV9tYXA7CisgICAgRGF0YVN0b3Jh
Z2UgbV9tYXA7CiB9OwogCi1jbGFzcyBBcnJheSA6IHB1YmxpYyBBcnJheUJhc2UgeworY2xhc3Mg
QXJyYXkgZmluYWwgOiBwdWJsaWMgQXJyYXlCYXNlIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgV1RG
X0VYUE9SVF9QUklWQVRFIFJlZjxBcnJheT4gY3JlYXRlKCk7CiAKLSAgICB1c2luZyBBcnJheUJh
c2U6OmFzQXJyYXk7Ci0KICAgICAvLyBUaGlzIGNsYXNzIGV4cGVjdGVkIG5vbi1jeWNsaWMgdmFs
dWVzLCBhcyB3ZSBjYW5ub3Qgc2VyaWFsaXplIGN5Y2xlcyBpbiBKU09OLgogICAgIHVzaW5nIEFy
cmF5QmFzZTo6cHVzaEJvb2xlYW47CiAgICAgdXNpbmcgQXJyYXlCYXNlOjpwdXNoSW50ZWdlcjsK
QEAgLTM0OCw3ICszMDgsNiBAQCBwdWJsaWM6CiAgICAgdXNpbmcgQXJyYXlCYXNlOjplbmQ7CiB9
OwogCi0KIGlubGluZSBPYmplY3RCYXNlOjppdGVyYXRvciBPYmplY3RCYXNlOjpmaW5kKGNvbnN0
IFN0cmluZyYgbmFtZSkKIHsKICAgICByZXR1cm4gbV9tYXAuZmluZChuYW1lKTsKQEAgLTM3OSwy
MyArMzM4LDIwIEBAIGlubGluZSB2b2lkIE9iamVjdEJhc2U6OnNldFN0cmluZyhjb25zdCBTdHJp
bmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgc2V0VmFsdWUobmFtZSwgVmFsdWU6
OmNyZWF0ZSh2YWx1ZSkpOwogfQogCi1pbmxpbmUgdm9pZCBPYmplY3RCYXNlOjpzZXRWYWx1ZShj
b25zdCBTdHJpbmcmIG5hbWUsIFJlZlB0cjxWYWx1ZT4mJiB2YWx1ZSkKK2lubGluZSB2b2lkIE9i
amVjdEJhc2U6OnNldFZhbHVlKGNvbnN0IFN0cmluZyYgbmFtZSwgUmVmPFZhbHVlPiYmIHZhbHVl
KQogewotICAgIEFTU0VSVCh2YWx1ZSk7CiAgICAgaWYgKG1fbWFwLnNldChuYW1lLCBXVEZNb3Zl
KHZhbHVlKSkuaXNOZXdFbnRyeSkKICAgICAgICAgbV9vcmRlci5hcHBlbmQobmFtZSk7CiB9CiAK
LWlubGluZSB2b2lkIE9iamVjdEJhc2U6OnNldE9iamVjdChjb25zdCBTdHJpbmcmIG5hbWUsIFJl
ZlB0cjxPYmplY3RCYXNlPiYmIHZhbHVlKQoraW5saW5lIHZvaWQgT2JqZWN0QmFzZTo6c2V0T2Jq
ZWN0KGNvbnN0IFN0cmluZyYgbmFtZSwgUmVmPE9iamVjdEJhc2U+JiYgdmFsdWUpCiB7Ci0gICAg
QVNTRVJUKHZhbHVlKTsKICAgICBpZiAobV9tYXAuc2V0KG5hbWUsIFdURk1vdmUodmFsdWUpKS5p
c05ld0VudHJ5KQogICAgICAgICBtX29yZGVyLmFwcGVuZChuYW1lKTsKIH0KIAotaW5saW5lIHZv
aWQgT2JqZWN0QmFzZTo6c2V0QXJyYXkoY29uc3QgU3RyaW5nJiBuYW1lLCBSZWZQdHI8QXJyYXlC
YXNlPiYmIHZhbHVlKQoraW5saW5lIHZvaWQgT2JqZWN0QmFzZTo6c2V0QXJyYXkoY29uc3QgU3Ry
aW5nJiBuYW1lLCBSZWY8QXJyYXlCYXNlPiYmIHZhbHVlKQogewotICAgIEFTU0VSVCh2YWx1ZSk7
CiAgICAgaWYgKG1fbWFwLnNldChuYW1lLCBXVEZNb3ZlKHZhbHVlKSkuaXNOZXdFbnRyeSkKICAg
ICAgICAgbV9vcmRlci5hcHBlbmQobmFtZSk7CiB9CkBAIC00MjAsMjYgKzM3NiwyMyBAQCBpbmxp
bmUgdm9pZCBBcnJheUJhc2U6OnB1c2hTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICBt
X21hcC5hcHBlbmQoVmFsdWU6OmNyZWF0ZSh2YWx1ZSkpOwogfQogCi1pbmxpbmUgdm9pZCBBcnJh
eUJhc2U6OnB1c2hWYWx1ZShSZWZQdHI8VmFsdWU+JiYgdmFsdWUpCitpbmxpbmUgdm9pZCBBcnJh
eUJhc2U6OnB1c2hWYWx1ZShSZWY8VmFsdWU+JiYgdmFsdWUpCiB7Ci0gICAgQVNTRVJUKHZhbHVl
KTsKICAgICBtX21hcC5hcHBlbmQoV1RGTW92ZSh2YWx1ZSkpOwogfQogCi1pbmxpbmUgdm9pZCBB
cnJheUJhc2U6OnB1c2hPYmplY3QoUmVmUHRyPE9iamVjdEJhc2U+JiYgdmFsdWUpCitpbmxpbmUg
dm9pZCBBcnJheUJhc2U6OnB1c2hPYmplY3QoUmVmPE9iamVjdEJhc2U+JiYgdmFsdWUpCiB7Ci0g
ICAgQVNTRVJUKHZhbHVlKTsKICAgICBtX21hcC5hcHBlbmQoV1RGTW92ZSh2YWx1ZSkpOwogfQog
Ci1pbmxpbmUgdm9pZCBBcnJheUJhc2U6OnB1c2hBcnJheShSZWZQdHI8QXJyYXlCYXNlPiYmIHZh
bHVlKQoraW5saW5lIHZvaWQgQXJyYXlCYXNlOjpwdXNoQXJyYXkoUmVmPEFycmF5QmFzZT4mJiB2
YWx1ZSkKIHsKLSAgICBBU1NFUlQodmFsdWUpOwogICAgIG1fbWFwLmFwcGVuZChXVEZNb3ZlKHZh
bHVlKSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1jbGFzcyBBcnJheU9mIDogcHVibGlj
IEFycmF5QmFzZSB7CitjbGFzcyBBcnJheU9mIGZpbmFsIDogcHVibGljIEFycmF5QmFzZSB7CiBw
cml2YXRlOgogICAgIEFycmF5T2YoKSB7IH0KIApAQCAtNDUwLDcgKzQwMyw3IEBAIHByaXZhdGU6
CiAgICAgfQogCiBwdWJsaWM6Ci0gICAgdm9pZCBhZGRJdGVtKFJlZlB0cjxUPiYmIHZhbHVlKQor
ICAgIHZvaWQgYWRkSXRlbShSZWY8VD4mJiB2YWx1ZSkKICAgICB7CiAgICAgICAgIGNhc3RlZEFy
cmF5KCkucHVzaFZhbHVlKFdURk1vdmUodmFsdWUpKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2FwcGxpY2F0aW9ubWFuaWZlc3QvQXBwbGljYXRpb25NYW5pZmVz
dFBhcnNlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FwcGxpY2F0aW9ubWFuaWZlc3Qv
QXBwbGljYXRpb25NYW5pZmVzdFBhcnNlci5jcHAKaW5kZXggOGRjNzZmYTJlNTllYTY3ZTAyMTcz
OGMzMTFhMzU3N2Y0ZDM2ZTY5MS4uZjg4Y2FkYTY2MGYzOWFkZWZhMDA2ZDA5NWVjNTg3ZmIyOTM0
NjIwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBsaWNhdGlvbm1hbmlm
ZXN0L0FwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvYXBwbGljYXRpb25tYW5pZmVzdC9BcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyLmNwcApA
QCAtNTQsMTQgKzU0LDE0IEBAIEFwcGxpY2F0aW9uTWFuaWZlc3QgQXBwbGljYXRpb25NYW5pZmVz
dFBhcnNlcjo6cGFyc2VNYW5pZmVzdChjb25zdCBTdHJpbmcmIHRleHQsCiB7CiAgICAgbV9tYW5p
ZmVzdFVSTCA9IG1hbmlmZXN0VVJMOwogCi0gICAgUmVmUHRyPEpTT046OlZhbHVlPiBqc29uVmFs
dWU7Ci0gICAgaWYgKCFKU09OOjpWYWx1ZTo6cGFyc2VKU09OKHRleHQsIGpzb25WYWx1ZSkpIHsK
KyAgICBhdXRvIGpzb25WYWx1ZSA9IEpTT046OlZhbHVlOjpwYXJzZUpTT04odGV4dCk7CisgICAg
aWYgKCFqc29uVmFsdWUpIHsKICAgICAgICAgbG9nRGV2ZWxvcGVyV2FybmluZygiVGhlIG1hbmlm
ZXN0IGlzIG5vdCB2YWxpZCBKU09OIGRhdGEuIl9zKTsKICAgICAgICAganNvblZhbHVlID0gSlNP
Tjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICB9CiAKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBt
YW5pZmVzdDsKLSAgICBpZiAoIWpzb25WYWx1ZS0+YXNPYmplY3QobWFuaWZlc3QpKSB7CisgICAg
YXV0byBtYW5pZmVzdCA9IGpzb25WYWx1ZS0+YXNPYmplY3QoKTsKKyAgICBpZiAoIW1hbmlmZXN0
KSB7CiAgICAgICAgIGxvZ0RldmVsb3Blcldhcm5pbmcoIlRoZSBtYW5pZmVzdCBpcyBub3QgYSBK
U09OIHZhbHVlIG9mIHR5cGUgXCJvYmplY3RcIi4iX3MpOwogICAgICAgICBtYW5pZmVzdCA9IEpT
T046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgfQpAQCAtOTYsMTIgKzk2LDEyIEBAIHZvaWQgQXBw
bGljYXRpb25NYW5pZmVzdFBhcnNlcjo6bG9nRGV2ZWxvcGVyV2FybmluZyhjb25zdCBTdHJpbmcm
IG1lc3NhZ2UpCiAKIFVSTCBBcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyOjpwYXJzZVN0YXJ0VVJM
KGNvbnN0IEpTT046Ok9iamVjdCYgbWFuaWZlc3QsIGNvbnN0IFVSTCYgZG9jdW1lbnRVUkwpCiB7
Ci0gICAgUmVmUHRyPEpTT046OlZhbHVlPiB2YWx1ZTsKLSAgICBpZiAoIW1hbmlmZXN0LmdldFZh
bHVlKCJzdGFydF91cmwiLCB2YWx1ZSkpCisgICAgYXV0byB2YWx1ZSA9IG1hbmlmZXN0LmdldFZh
bHVlKCJzdGFydF91cmwiX3MpOworICAgIGlmICghdmFsdWUpCiAgICAgICAgIHJldHVybiBkb2N1
bWVudFVSTDsKIAotICAgIFN0cmluZyBzdHJpbmdWYWx1ZTsKLSAgICBpZiAoIXZhbHVlLT5hc1N0
cmluZyhzdHJpbmdWYWx1ZSkpIHsKKyAgICBhdXRvIHN0cmluZ1ZhbHVlID0gdmFsdWUtPmFzU3Ry
aW5nKCk7CisgICAgaWYgKCFzdHJpbmdWYWx1ZSkgewogICAgICAgICBsb2dNYW5pZmVzdFByb3Bl
cnR5Tm90QVN0cmluZygic3RhcnRfdXJsIl9zKTsKICAgICAgICAgcmV0dXJuIGRvY3VtZW50VVJM
OwogICAgIH0KQEAgLTEyNywxMiArMTI3LDEyIEBAIFVSTCBBcHBsaWNhdGlvbk1hbmlmZXN0UGFy
c2VyOjpwYXJzZVN0YXJ0VVJMKGNvbnN0IEpTT046Ok9iamVjdCYgbWFuaWZlc3QsIGNvbnN0CiAK
IEFwcGxpY2F0aW9uTWFuaWZlc3Q6OkRpc3BsYXkgQXBwbGljYXRpb25NYW5pZmVzdFBhcnNlcjo6
cGFyc2VEaXNwbGF5KGNvbnN0IEpTT046Ok9iamVjdCYgbWFuaWZlc3QpCiB7Ci0gICAgUmVmUHRy
PEpTT046OlZhbHVlPiB2YWx1ZTsKLSAgICBpZiAoIW1hbmlmZXN0LmdldFZhbHVlKCJkaXNwbGF5
Il9zLCB2YWx1ZSkpCisgICAgYXV0byB2YWx1ZSA9IG1hbmlmZXN0LmdldFZhbHVlKCJkaXNwbGF5
Il9zKTsKKyAgICBpZiAoIXZhbHVlKQogICAgICAgICByZXR1cm4gQXBwbGljYXRpb25NYW5pZmVz
dDo6RGlzcGxheTo6QnJvd3NlcjsKIAotICAgIFN0cmluZyBzdHJpbmdWYWx1ZTsKLSAgICBpZiAo
IXZhbHVlLT5hc1N0cmluZyhzdHJpbmdWYWx1ZSkpIHsKKyAgICBhdXRvIHN0cmluZ1ZhbHVlID0g
dmFsdWUtPmFzU3RyaW5nKCk7CisgICAgaWYgKCFzdHJpbmdWYWx1ZSkgewogICAgICAgICBsb2dN
YW5pZmVzdFByb3BlcnR5Tm90QVN0cmluZygiZGlzcGxheSJfcyk7CiAgICAgICAgIHJldHVybiBB
cHBsaWNhdGlvbk1hbmlmZXN0OjpEaXNwbGF5OjpCcm93c2VyOwogICAgIH0KQEAgLTE5NSwxMiAr
MTk1LDEyIEBAIFVSTCBBcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyOjpwYXJzZVNjb3BlKGNvbnN0
IEpTT046Ok9iamVjdCYgbWFuaWZlc3QsIGNvbnN0IFVSCiB7CiAgICAgVVJMIGRlZmF1bHRTY29w
ZSB7IHN0YXJ0VVJMLCAiLi8iIH07CiAKLSAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHZhbHVlOwot
ICAgIGlmICghbWFuaWZlc3QuZ2V0VmFsdWUoInNjb3BlIiwgdmFsdWUpKQorICAgIGF1dG8gdmFs
dWUgPSBtYW5pZmVzdC5nZXRWYWx1ZSgic2NvcGUiKTsKKyAgICBpZiAoIXZhbHVlKQogICAgICAg
ICByZXR1cm4gZGVmYXVsdFNjb3BlOwogCi0gICAgU3RyaW5nIHN0cmluZ1ZhbHVlOwotICAgIGlm
ICghdmFsdWUtPmFzU3RyaW5nKHN0cmluZ1ZhbHVlKSkgeworICAgIGF1dG8gc3RyaW5nVmFsdWUg
PSB2YWx1ZS0+YXNTdHJpbmcoKTsKKyAgICBpZiAoIXN0cmluZ1ZhbHVlKSB7CiAgICAgICAgIGxv
Z01hbmlmZXN0UHJvcGVydHlOb3RBU3RyaW5nKCJzY29wZSJfcyk7CiAgICAgICAgIHJldHVybiBk
ZWZhdWx0U2NvcGU7CiAgICAgfQpAQCAtMjMxLDEyICsyMzEsMTIgQEAgVVJMIEFwcGxpY2F0aW9u
TWFuaWZlc3RQYXJzZXI6OnBhcnNlU2NvcGUoY29uc3QgSlNPTjo6T2JqZWN0JiBtYW5pZmVzdCwg
Y29uc3QgVVIKIAogU3RyaW5nIEFwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXI6OnBhcnNlR2VuZXJp
Y1N0cmluZyhjb25zdCBKU09OOjpPYmplY3QmIG1hbmlmZXN0LCBjb25zdCBTdHJpbmcmIHByb3Bl
cnR5TmFtZSkKIHsKLSAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHZhbHVlOwotICAgIGlmICghbWFu
aWZlc3QuZ2V0VmFsdWUocHJvcGVydHlOYW1lLCB2YWx1ZSkpCisgICAgYXV0byB2YWx1ZSA9IG1h
bmlmZXN0LmdldFZhbHVlKHByb3BlcnR5TmFtZSk7CisgICAgaWYgKCF2YWx1ZSkKICAgICAgICAg
cmV0dXJuIHsgfTsKIAotICAgIFN0cmluZyBzdHJpbmdWYWx1ZTsKLSAgICBpZiAoIXZhbHVlLT5h
c1N0cmluZyhzdHJpbmdWYWx1ZSkpIHsKKyAgICBhdXRvIHN0cmluZ1ZhbHVlID0gdmFsdWUtPmFz
U3RyaW5nKCk7CisgICAgaWYgKCFzdHJpbmdWYWx1ZSkgewogICAgICAgICBsb2dNYW5pZmVzdFBy
b3BlcnR5Tm90QVN0cmluZyhwcm9wZXJ0eU5hbWUpOwogICAgICAgICByZXR1cm4geyB9OwogICAg
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW5jcnlwdGVkbWVkaWEvSW5p
dERhdGFSZWdpc3RyeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlh
L0luaXREYXRhUmVnaXN0cnkuY3BwCmluZGV4IDNiMjVkMDZiMTIzYTFhNTFhMGEyYWNmYjRmNjU2
ZjhkOTRhZGIzZmMuLjZhYjJmODc4YTNmOGNhOThlODJiMGU0MmU1ZjBiYWFhMjI4YjFjNWMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW5jcnlwdGVkbWVkaWEvSW5pdERhdGFS
ZWdpc3RyeS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9J
bml0RGF0YVJlZ2lzdHJ5LmNwcApAQCAtNjIsMjIgKzYyLDIyIEBAIHN0YXRpYyBPcHRpb25hbDxW
ZWN0b3I8UmVmPFNoYXJlZEJ1ZmZlcj4+PiBleHRyYWN0S2V5SURzS2V5aWRzKGNvbnN0IFNoYXJl
ZEJ1ZmZlCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgU3RyaW5nIGpzb24geyBi
dWZmZXIuZGF0YSgpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oYnVmZmVyLnNpemUoKSkgfTsKIAot
ICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gdmFsdWU7Ci0gICAgaWYgKCFKU09OOjpWYWx1ZTo6cGFy
c2VKU09OKGpzb24sIHZhbHVlKSkKKyAgICBhdXRvIHZhbHVlID0gSlNPTjo6VmFsdWU6OnBhcnNl
SlNPTihqc29uKTsKKyAgICBpZiAoIXZhbHVlKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OwogCi0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gb2JqZWN0OwotICAgIGlmICghdmFsdWUtPmFz
T2JqZWN0KG9iamVjdCkpCisgICAgYXV0byBvYmplY3QgPSB2YWx1ZS0+YXNPYmplY3QoKTsKKyAg
ICBpZiAoIW9iamVjdCkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIFJlZlB0
cjxKU09OOjpBcnJheT4ga2lkc0FycmF5OwotICAgIGlmICghb2JqZWN0LT5nZXRBcnJheSgia2lk
cyIsIGtpZHNBcnJheSkpCisgICAgYXV0byBraWRzQXJyYXkgPSBvYmplY3QtPmdldEFycmF5KCJr
aWRzIl9zKTsKKyAgICBpZiAoIWtpZHNBcnJheSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKIAogICAgIFZlY3RvcjxSZWY8U2hhcmVkQnVmZmVyPj4ga2V5SURzOwogICAgIGZvciAoYXV0
byYgdmFsdWUgOiAqa2lkc0FycmF5KSB7Ci0gICAgICAgIFN0cmluZyBrZXlJRDsKLSAgICAgICAg
aWYgKCF2YWx1ZS0+YXNTdHJpbmcoa2V5SUQpKQorICAgICAgICBhdXRvIGtleUlEID0gdmFsdWUt
PmFzU3RyaW5nKCk7CisgICAgICAgIGlmICgha2V5SUQpCiAgICAgICAgICAgICBjb250aW51ZTsK
IAogICAgICAgICBWZWN0b3I8Y2hhcj4ga2V5SUREYXRhOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0NvbW1hbmRMaW5lQVBJSG9zdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvQ29tbWFuZExpbmVBUElIb3N0LmNwcAppbmRleCBkY2UzNTllNzY4ZWY5YTEzYTZj
NmRlMTZkMWY4ZDNjOGJiZmY3YTk3Li45NGQwM2Q4NWQ2ZGE5ZjRmODhmOGNkMTJlNGJmZmJkMzNi
NGRjNTY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29tbWFuZExpbmVB
UElIb3N0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29tbWFuZExpbmVBUElI
b3N0LmNwcApAQCAtNzMsNyArNzMsNyBAQCB2b2lkIENvbW1hbmRMaW5lQVBJSG9zdDo6ZGlzY29u
bmVjdCgpCiAgICAgbV9pbnN0cnVtZW50aW5nQWdlbnRzID0gbnVsbHB0cjsKIH0KIAotdm9pZCBD
b21tYW5kTGluZUFQSUhvc3Q6Omluc3BlY3QoSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEds
b2JhbE9iamVjdCwgSlNDOjpKU1ZhbHVlIHZhbHVlVG9JbnNwZWN0LCBKU0M6OkpTVmFsdWUgaGlu
dHNWYWx1ZSkKK3ZvaWQgQ29tbWFuZExpbmVBUElIb3N0OjppbnNwZWN0KEpTQzo6SlNHbG9iYWxP
YmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBvYmplY3QsIEpTQzo6SlNW
YWx1ZSBoaW50cykKIHsKICAgICBpZiAoIW1faW5zdHJ1bWVudGluZ0FnZW50cykKICAgICAgICAg
cmV0dXJuOwpAQCAtODIsMTIgKzgyLDIwIEBAIHZvaWQgQ29tbWFuZExpbmVBUElIb3N0OjppbnNw
ZWN0KEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6CiAgICAg
aWYgKCFpbnNwZWN0b3JBZ2VudCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVmUHRyPEpTT046
Ok9iamVjdD4gaGludHNPYmplY3Q7Ci0gICAgaWYgKCFJbnNwZWN0b3I6OnRvSW5zcGVjdG9yVmFs
dWUoJmxleGljYWxHbG9iYWxPYmplY3QsIGhpbnRzVmFsdWUpLT5hc09iamVjdChoaW50c09iamVj
dCkpCisgICAgYXV0byBvYmplY3RWYWx1ZSA9IEluc3BlY3Rvcjo6dG9JbnNwZWN0b3JWYWx1ZSgm
bGV4aWNhbEdsb2JhbE9iamVjdCwgb2JqZWN0KTsKKyAgICBpZiAoIW9iamVjdFZhbHVlKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBhdXRvIHJlbW90ZU9iamVjdCA9IEJpbmRpbmdUcmFpdHM8SW5z
cGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0Pjo6cnVudGltZUNhc3QoSW5z
cGVjdG9yOjp0b0luc3BlY3RvclZhbHVlKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZVRvSW5z
cGVjdCkpOwotICAgIGluc3BlY3RvckFnZW50LT5pbnNwZWN0KFdURk1vdmUocmVtb3RlT2JqZWN0
KSwgV1RGTW92ZShoaW50c09iamVjdCkpOworICAgIGF1dG8gaGludHNWYWx1ZSA9IEluc3BlY3Rv
cjo6dG9JbnNwZWN0b3JWYWx1ZSgmbGV4aWNhbEdsb2JhbE9iamVjdCwgaGludHMpOworICAgIGlm
ICghaGludHNWYWx1ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byBoaW50c09iamVjdCA9
IGhpbnRzVmFsdWUtPmFzT2JqZWN0KCk7CisgICAgaWYgKCFoaW50c09iamVjdCkKKyAgICAgICAg
cmV0dXJuOworCisgICAgYXV0byByZW1vdGVPYmplY3QgPSBQcm90b2NvbDo6QmluZGluZ1RyYWl0
czxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0Pjo6cnVudGltZUNhc3Qob2JqZWN0VmFs
dWUucmVsZWFzZU5vbk51bGwoKSk7CisgICAgaW5zcGVjdG9yQWdlbnQtPmluc3BlY3QoV1RGTW92
ZShyZW1vdGVPYmplY3QpLCBoaW50c09iamVjdC5yZWxlYXNlTm9uTnVsbCgpKTsKIH0KIAogQ29t
bWFuZExpbmVBUElIb3N0OjpFdmVudExpc3RlbmVyc1JlY29yZCBDb21tYW5kTGluZUFQSUhvc3Q6
OmdldEV2ZW50TGlzdGVuZXJzKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBF
dmVudFRhcmdldCYgdGFyZ2V0KQpAQCAtMTM2LDggKzE0NCw3IEBAIHZvaWQgQ29tbWFuZExpbmVB
UElIb3N0OjpjbGVhckNvbnNvbGVNZXNzYWdlcygpCiAgICAgaWYgKCFjb25zb2xlQWdlbnQpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIEVycm9yU3RyaW5nIGlnbm9yZWQ7Ci0gICAgY29uc29sZUFn
ZW50LT5jbGVhck1lc3NhZ2VzKGlnbm9yZWQpOworICAgIGNvbnNvbGVBZ2VudC0+Y2xlYXJNZXNz
YWdlcygpOwogfQogCiB2b2lkIENvbW1hbmRMaW5lQVBJSG9zdDo6Y29weVRleHQoY29uc3QgU3Ry
aW5nJiB0ZXh0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckF1ZGl0UmVzb3VyY2VzT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JBdWRpdFJlc291cmNlc09iamVjdC5jcHAKaW5kZXggMDAxNDhlMGZmNDk0NGFiZDA5MGI4
MzZlYTkzMDVlY2Y3NDhjNmZhNC4uYjdmZjBlMTA0YTU1MDY5MTZjY2ZhOWQyMzBjOGIyYmJiMzYz
ZGYzYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckF1ZGl0
UmVzb3VyY2VzT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yQXVkaXRSZXNvdXJjZXNPYmplY3QuY3BwCkBAIC0xMDUsNyArMTA1LDcgQEAgRXhjZXB0aW9u
T3I8SW5zcGVjdG9yQXVkaXRSZXNvdXJjZXNPYmplY3Q6OlJlc291cmNlQ29udGVudD4gSW5zcGVj
dG9yQXVkaXRSZXNvdXIKICAgICBpZiAoIWNhY2hlZFJlc291cmNlKQogICAgICAgICByZXR1cm4g
RXhjZXB0aW9uIHsgTm90Rm91bmRFcnJvciwgbWFrZVN0cmluZygiVW5rbm93biBpZGVudGlmaWVy
ICJfcywgaWQpIH07CiAKLSAgICBFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKyAgICBQcm90b2Nv
bDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CiAgICAgUmVzb3VyY2VDb250ZW50IHJlc291cmNl
Q29udGVudDsKICAgICBJbnNwZWN0b3JQYWdlQWdlbnQ6OnJlc291cmNlQ29udGVudChlcnJvclN0
cmluZywgZnJhbWUsIGNhY2hlZFJlc291cmNlLT51cmwoKSwgJnJlc291cmNlQ29udGVudC5kYXRh
LCAmcmVzb3VyY2VDb250ZW50LmJhc2U2NEVuY29kZWQpOwogICAgIGlmICghZXJyb3JTdHJpbmcu
aXNFbXB0eSgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckNhbnZhcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzLmNw
cAppbmRleCA1YzU3YjYwNTc0ZWNhNTcyMmQxNTQ5OTJhZmRiZGM3NTVlNjMxOTlmLi5hNjFiOGVl
ZGEwNDE2Y2Y3ZjE1NGFhMDExYzg2MGNlOGZiMGIzMjViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzLmNwcApAQCAtMzU2LDEzICszNTYsMTMgQEAgdm9pZCBJ
bnNwZWN0b3JDYW52YXM6OnJlY29yZEFjdGlvbihjb25zdCBTdHJpbmcmIG5hbWUsIHN0ZDo6aW5p
dGlhbGl6ZXJfbGlzdDxSZWMKICAgICB9CiAKICAgICBpZiAoIW1fZnJhbWVzKQotICAgICAgICBt
X2ZyYW1lcyA9IEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6UmVjb3JkaW5nOjpG
cmFtZT46OmNyZWF0ZSgpOworICAgICAgICBtX2ZyYW1lcyA9IEpTT046OkFycmF5T2Y8UHJvdG9j
b2w6OlJlY29yZGluZzo6RnJhbWU+OjpjcmVhdGUoKTsKIAogICAgIGlmICghbV9jdXJyZW50QWN0
aW9ucykgewogICAgICAgICBtX2N1cnJlbnRBY3Rpb25zID0gSlNPTjo6QXJyYXlPZjxKU09OOjpW
YWx1ZT46OmNyZWF0ZSgpOwogCi0gICAgICAgIGF1dG8gZnJhbWUgPSBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpSZWNvcmRpbmc6OkZyYW1lOjpjcmVhdGUoKQotICAgICAgICAgICAgLnNldEFjdGlvbnMo
bV9jdXJyZW50QWN0aW9ucykKKyAgICAgICAgYXV0byBmcmFtZSA9IFByb3RvY29sOjpSZWNvcmRp
bmc6OkZyYW1lOjpjcmVhdGUoKQorICAgICAgICAgICAgLnNldEFjdGlvbnMoKm1fY3VycmVudEFj
dGlvbnMpCiAgICAgICAgICAgICAucmVsZWFzZSgpOwogCiAgICAgICAgIG1fZnJhbWVzLT5hZGRJ
dGVtKFdURk1vdmUoZnJhbWUpKTsKQEAgLTM3NSw3ICszNzUsNyBAQCB2b2lkIEluc3BlY3RvckNh
bnZhczo6cmVjb3JkQWN0aW9uKGNvbnN0IFN0cmluZyYgbmFtZSwgc3RkOjppbml0aWFsaXplcl9s
aXN0PFJlYwogCiAgICAgbV9sYXN0UmVjb3JkZWRBY3Rpb24gPSBidWlsZEFjdGlvbihuYW1lLCBX
VEZNb3ZlKHBhcmFtZXRlcnMpKTsKICAgICBtX2J1ZmZlclVzZWQgKz0gbV9sYXN0UmVjb3JkZWRB
Y3Rpb24tPm1lbW9yeUNvc3QoKTsKLSAgICBtX2N1cnJlbnRBY3Rpb25zLT5hZGRJdGVtKG1fbGFz
dFJlY29yZGVkQWN0aW9uLmdldCgpKTsKKyAgICBtX2N1cnJlbnRBY3Rpb25zLT5hZGRJdGVtKCpt
X2xhc3RSZWNvcmRlZEFjdGlvbik7CiAKICAgICBhdXRvKiBjb250ZXh0ID0gY2FudmFzQ29udGV4
dCgpOwogICAgIEFTU0VSVChjb250ZXh0KTsKQEAgLTM5OCw3ICszOTgsNyBAQCB2b2lkIEluc3Bl
Y3RvckNhbnZhczo6ZmluYWxpemVGcmFtZSgpCiAgICAgYXBwZW5kQWN0aW9uU25hcHNob3RJZk5l
ZWRlZCgpOwogCiAgICAgaWYgKG1fZnJhbWVzICYmIG1fZnJhbWVzLT5sZW5ndGgoKSAmJiAhc3Rk
Ojppc25hbihtX2N1cnJlbnRGcmFtZVN0YXJ0VGltZSkpIHsKLSAgICAgICAgYXV0byBjdXJyZW50
RnJhbWUgPSBzdGF0aWNfY2FzdDxJbnNwZWN0b3I6OlByb3RvY29sOjpSZWNvcmRpbmc6OkZyYW1l
Kj4obV9mcmFtZXMtPmdldChtX2ZyYW1lcy0+bGVuZ3RoKCkgLSAxKS5nZXQoKSk7CisgICAgICAg
IGF1dG8gY3VycmVudEZyYW1lID0gc3RhdGljX3JlZmVyZW5jZV9jYXN0PFByb3RvY29sOjpSZWNv
cmRpbmc6OkZyYW1lPihtX2ZyYW1lcy0+Z2V0KG1fZnJhbWVzLT5sZW5ndGgoKSAtIDEpKTsKICAg
ICAgICAgY3VycmVudEZyYW1lLT5zZXREdXJhdGlvbigoTW9ub3RvbmljVGltZTo6bm93KCkgLSBt
X2N1cnJlbnRGcmFtZVN0YXJ0VGltZSkubWlsbGlzZWNvbmRzKCkpOwogCiAgICAgICAgIG1fY3Vy
cmVudEZyYW1lU3RhcnRUaW1lID0gTW9ub3RvbmljVGltZTo6bmFuKCk7CkBAIC00MTIsNyArNDEy
LDggQEAgdm9pZCBJbnNwZWN0b3JDYW52YXM6Om1hcmtDdXJyZW50RnJhbWVJbmNvbXBsZXRlKCkK
ICAgICBpZiAoIW1fY3VycmVudEFjdGlvbnMgfHwgIW1fZnJhbWVzIHx8ICFtX2ZyYW1lcy0+bGVu
Z3RoKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIHN0YXRpY19jYXN0PEluc3BlY3Rvcjo6UHJv
dG9jb2w6OlJlY29yZGluZzo6RnJhbWUqPihtX2ZyYW1lcy0+Z2V0KG1fZnJhbWVzLT5sZW5ndGgo
KSAtIDEpLmdldCgpKS0+c2V0SW5jb21wbGV0ZSh0cnVlKTsKKyAgICBhdXRvIGN1cnJlbnRGcmFt
ZSA9IHN0YXRpY19yZWZlcmVuY2VfY2FzdDxQcm90b2NvbDo6UmVjb3JkaW5nOjpGcmFtZT4obV9m
cmFtZXMtPmdldChtX2ZyYW1lcy0+bGVuZ3RoKCkgLSAxKSk7CisgICAgY3VycmVudEZyYW1lLT5z
ZXRJbmNvbXBsZXRlKHRydWUpOwogfQogCiB2b2lkIEluc3BlY3RvckNhbnZhczo6c2V0QnVmZmVy
TGltaXQobG9uZyBtZW1vcnlMaW1pdCkKQEAgLTQzOCwyOSArNDM5LDI5IEBAIGJvb2wgSW5zcGVj
dG9yQ2FudmFzOjpvdmVyRnJhbWVDb3VudCgpIGNvbnN0CiAgICAgcmV0dXJuIG1fZnJhbWVDb3Vu
dCAmJiBtX2ZyYW1lc0NhcHR1cmVkID49IG1fZnJhbWVDb3VudC52YWx1ZSgpOwogfQogCi1SZWY8
SW5zcGVjdG9yOjpQcm90b2NvbDo6Q2FudmFzOjpDYW52YXM+IEluc3BlY3RvckNhbnZhczo6YnVp
bGRPYmplY3RGb3JDYW52YXMoYm9vbCBjYXB0dXJlQmFja3RyYWNlKQorUmVmPFByb3RvY29sOjpD
YW52YXM6OkNhbnZhcz4gSW5zcGVjdG9yQ2FudmFzOjpidWlsZE9iamVjdEZvckNhbnZhcyhib29s
IGNhcHR1cmVCYWNrdHJhY2UpCiB7Ci0gICAgdXNpbmcgQ29udGV4dFR5cGVUeXBlID0gT3B0aW9u
YWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q2FudmFzOjpDb250ZXh0VHlwZT47CisgICAgdXNpbmcg
Q29udGV4dFR5cGVUeXBlID0gT3B0aW9uYWw8UHJvdG9jb2w6OkNhbnZhczo6Q29udGV4dFR5cGU+
OwogICAgIGF1dG8gY29udGV4dFR5cGUgPSBXVEY6OnN3aXRjaE9uKG1fY29udGV4dCwKICAgICAg
ICAgW10gKHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8Q2FudmFzUmVuZGVyaW5nQ29udGV4dD4gY29u
dGV4dFdyYXBwZXIpIC0+IENvbnRleHRUeXBlVHlwZSB7CiAgICAgICAgICAgICBhdXRvJiBjb250
ZXh0ID0gY29udGV4dFdyYXBwZXIuZ2V0KCk7CiAgICAgICAgICAgICBpZiAoaXM8Q2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEPihjb250ZXh0KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gSW5zcGVj
dG9yOjpQcm90b2NvbDo6Q2FudmFzOjpDb250ZXh0VHlwZTo6Q2FudmFzMkQ7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIFByb3RvY29sOjpDYW52YXM6OkNvbnRleHRUeXBlOjpDYW52YXMyRDsKICAg
ICAgICAgICAgIGlmIChpczxJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQ+KGNvbnRleHQpKQot
ICAgICAgICAgICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpDYW52YXM6OkNvbnRl
eHRUeXBlOjpCaXRtYXBSZW5kZXJlcjsKKyAgICAgICAgICAgICAgICByZXR1cm4gUHJvdG9jb2w6
OkNhbnZhczo6Q29udGV4dFR5cGU6OkJpdG1hcFJlbmRlcmVyOwogI2lmIEVOQUJMRShXRUJHTCkK
ICAgICAgICAgICAgIGlmIChpczxXZWJHTFJlbmRlcmluZ0NvbnRleHQ+KGNvbnRleHQpKQotICAg
ICAgICAgICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpDYW52YXM6OkNvbnRleHRU
eXBlOjpXZWJHTDsKKyAgICAgICAgICAgICAgICByZXR1cm4gUHJvdG9jb2w6OkNhbnZhczo6Q29u
dGV4dFR5cGU6OldlYkdMOwogI2VuZGlmCiAjaWYgRU5BQkxFKFdFQkdMMikKICAgICAgICAgICAg
IGlmIChpczxXZWJHTDJSZW5kZXJpbmdDb250ZXh0Pihjb250ZXh0KSkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q2FudmFzOjpDb250ZXh0VHlwZTo6V2ViR0wy
OworICAgICAgICAgICAgICAgIHJldHVybiBQcm90b2NvbDo6Q2FudmFzOjpDb250ZXh0VHlwZTo6
V2ViR0wyOwogI2VuZGlmCiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAg
ICB9LAogI2lmIEVOQUJMRShXRUJHUFUpCiAgICAgICAgIFtdIChzdGQ6OnJlZmVyZW5jZV93cmFw
cGVyPFdlYkdQVURldmljZT4pIHsKLSAgICAgICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpDYW52YXM6OkNvbnRleHRUeXBlOjpXZWJHUFU7CisgICAgICAgICAgICByZXR1cm4gUHJv
dG9jb2w6OkNhbnZhczo6Q29udGV4dFR5cGU6OldlYkdQVTsKICAgICAgICAgfSwKICNlbmRpZgog
ICAgICAgICBbXSAoTW9ub3N0YXRlKSB7CkBAIC00NzAsMTAgKzQ3MSwxMCBAQCBSZWY8SW5zcGVj
dG9yOjpQcm90b2NvbDo6Q2FudmFzOjpDYW52YXM+IEluc3BlY3RvckNhbnZhczo6YnVpbGRPYmpl
Y3RGb3JDYW52YXMoYgogICAgICk7CiAgICAgaWYgKCFjb250ZXh0VHlwZSkgewogICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgY29udGV4dFR5cGUgPSBJbnNwZWN0b3I6OlBy
b3RvY29sOjpDYW52YXM6OkNvbnRleHRUeXBlOjpDYW52YXMyRDsKKyAgICAgICAgY29udGV4dFR5
cGUgPSBQcm90b2NvbDo6Q2FudmFzOjpDb250ZXh0VHlwZTo6Q2FudmFzMkQ7CiAgICAgfQogCi0g
ICAgYXV0byBjYW52YXMgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpDYW52YXM6OkNhbnZhczo6Y3Jl
YXRlKCkKKyAgICBhdXRvIGNhbnZhcyA9IFByb3RvY29sOjpDYW52YXM6OkNhbnZhczo6Y3JlYXRl
KCkKICAgICAgICAgLnNldENhbnZhc0lkKG1faWRlbnRpZmllcikKICAgICAgICAgLnNldENvbnRl
eHRUeXBlKGNvbnRleHRUeXBlLnZhbHVlKCkpCiAgICAgICAgIC5yZWxlYXNlKCk7CkBAIC00ODYs
MTIgKzQ4NywxMiBAQCBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q2FudmFzOjpDYW52YXM+IElu
c3BlY3RvckNhbnZhczo6YnVpbGRPYmplY3RGb3JDYW52YXMoYgogICAgICAgICAvLyBGSVhNRTog
PGh0dHBzOi8vd2Via2l0Lm9yZy9iLzE3ODI4Mj4gV2ViIEluc3BlY3Rvcjogc2VuZCBhIERPTSBu
b2RlIHdpdGggZWFjaCBDYW52YXMgcGF5bG9hZCBhbmQgZWxpbWluYXRlIENhbnZhcy5yZXF1ZXN0
Tm9kZQogICAgIH0KIAotICAgIHVzaW5nIENvbnRleHRBdHRyaWJ1dGVzVHlwZSA9IFJlZlB0cjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpDYW52YXM6OkNvbnRleHRBdHRyaWJ1dGVzPjsKKyAgICB1c2lu
ZyBDb250ZXh0QXR0cmlidXRlc1R5cGUgPSBSZWZQdHI8UHJvdG9jb2w6OkNhbnZhczo6Q29udGV4
dEF0dHJpYnV0ZXM+OwogICAgIGF1dG8gY29udGV4dEF0dHJpYnV0ZXMgPSBXVEY6OnN3aXRjaE9u
KG1fY29udGV4dCwKICAgICAgICAgW10gKHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8Q2FudmFzUmVu
ZGVyaW5nQ29udGV4dD4gY29udGV4dFdyYXBwZXIpIC0+IENvbnRleHRBdHRyaWJ1dGVzVHlwZSB7
CiAgICAgICAgICAgICBhdXRvJiBjb250ZXh0ID0gY29udGV4dFdyYXBwZXIuZ2V0KCk7CiAgICAg
ICAgICAgICBpZiAoaXM8SW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0Pihjb250ZXh0KSkgewot
ICAgICAgICAgICAgICAgIGF1dG8gY29udGV4dEF0dHJpYnV0ZXNQYXlsb2FkID0gSW5zcGVjdG9y
OjpQcm90b2NvbDo6Q2FudmFzOjpDb250ZXh0QXR0cmlidXRlczo6Y3JlYXRlKCkKKyAgICAgICAg
ICAgICAgICBhdXRvIGNvbnRleHRBdHRyaWJ1dGVzUGF5bG9hZCA9IFByb3RvY29sOjpDYW52YXM6
OkNvbnRleHRBdHRyaWJ1dGVzOjpjcmVhdGUoKQogICAgICAgICAgICAgICAgICAgICAucmVsZWFz
ZSgpOwogICAgICAgICAgICAgICAgIGNvbnRleHRBdHRyaWJ1dGVzUGF5bG9hZC0+c2V0QWxwaGEo
ZG93bmNhc3Q8SW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0Pihjb250ZXh0KS5oYXNBbHBoYSgp
KTsKICAgICAgICAgICAgICAgICByZXR1cm4gY29udGV4dEF0dHJpYnV0ZXNQYXlsb2FkOwpAQCAt
NTAwLDcgKzUwMSw3IEBAIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDYW52YXM6OkNhbnZhcz4g
SW5zcGVjdG9yQ2FudmFzOjpidWlsZE9iamVjdEZvckNhbnZhcyhiCiAjaWYgRU5BQkxFKFdFQkdM
KQogICAgICAgICAgICAgaWYgKGlzPFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U+KGNvbnRleHQp
KSB7CiAgICAgICAgICAgICAgICAgaWYgKGNvbnN0IGF1dG8mIGF0dHJpYnV0ZXMgPSBkb3duY2Fz
dDxXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlPihjb250ZXh0KS5nZXRDb250ZXh0QXR0cmlidXRl
cygpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gY29udGV4dEF0dHJpYnV0ZXNQYXlsb2Fk
ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q2FudmFzOjpDb250ZXh0QXR0cmlidXRlczo6Y3JlYXRl
KCkKKyAgICAgICAgICAgICAgICAgICAgYXV0byBjb250ZXh0QXR0cmlidXRlc1BheWxvYWQgPSBQ
cm90b2NvbDo6Q2FudmFzOjpDb250ZXh0QXR0cmlidXRlczo6Y3JlYXRlKCkKICAgICAgICAgICAg
ICAgICAgICAgICAgIC5yZWxlYXNlKCk7CiAgICAgICAgICAgICAgICAgICAgIGNvbnRleHRBdHRy
aWJ1dGVzUGF5bG9hZC0+c2V0QWxwaGEoYXR0cmlidXRlcy0+YWxwaGEpOwogICAgICAgICAgICAg
ICAgICAgICBjb250ZXh0QXR0cmlidXRlc1BheWxvYWQtPnNldERlcHRoKGF0dHJpYnV0ZXMtPmRl
cHRoKTsKQEAgLTUzMCw3ICs1MzEsNyBAQCBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q2FudmFz
OjpDYW52YXM+IEluc3BlY3RvckNhbnZhczo6YnVpbGRPYmplY3RGb3JDYW52YXMoYgogICAgICAg
ICBbXSAoc3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxXZWJHUFVEZXZpY2U+IGRldmljZVdyYXBwZXIp
IC0+IENvbnRleHRBdHRyaWJ1dGVzVHlwZSB7CiAgICAgICAgICAgICBhdXRvJiBkZXZpY2UgPSBk
ZXZpY2VXcmFwcGVyLmdldCgpOwogICAgICAgICAgICAgaWYgKGNvbnN0IGF1dG8mIG9wdGlvbnMg
PSBkZXZpY2UuYWRhcHRlcigpLm9wdGlvbnMoKSkgewotICAgICAgICAgICAgICAgIGF1dG8gY29u
dGV4dEF0dHJpYnV0ZXNQYXlsb2FkID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q2FudmFzOjpDb250
ZXh0QXR0cmlidXRlczo6Y3JlYXRlKCkKKyAgICAgICAgICAgICAgICBhdXRvIGNvbnRleHRBdHRy
aWJ1dGVzUGF5bG9hZCA9IFByb3RvY29sOjpDYW52YXM6OkNvbnRleHRBdHRyaWJ1dGVzOjpjcmVh
dGUoKQogICAgICAgICAgICAgICAgICAgICAucmVsZWFzZSgpOwogICAgICAgICAgICAgICAgIGlm
IChjb25zdCBhdXRvJiBwb3dlclByZWZlcmVuY2UgPSBvcHRpb25zLT5wb3dlclByZWZlcmVuY2Up
IHsKICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChwb3dlclByZWZlcmVuY2UudmFsdWUoKSkg
ewpAQCAtNTU0LDcgKzU1NSw3IEBAIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDYW52YXM6OkNh
bnZhcz4gSW5zcGVjdG9yQ2FudmFzOjpidWlsZE9iamVjdEZvckNhbnZhcyhiCiAgICAgICAgIH0K
ICAgICApOwogICAgIGlmIChjb250ZXh0QXR0cmlidXRlcykKLSAgICAgICAgY2FudmFzLT5zZXRD
b250ZXh0QXR0cmlidXRlcyhXVEZNb3ZlKGNvbnRleHRBdHRyaWJ1dGVzKSk7CisgICAgICAgIGNh
bnZhcy0+c2V0Q29udGV4dEF0dHJpYnV0ZXMoY29udGV4dEF0dHJpYnV0ZXMucmVsZWFzZU5vbk51
bGwoKSk7CiAKICAgICAvLyBGSVhNRTogPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzE4MDgzMz4gV2Vi
IEluc3BlY3Rvcjogc3VwcG9ydCBPZmZzY3JlZW5DYW52YXMgZm9yIENhbnZhcyByZWxhdGVkIG9w
ZXJhdGlvbnMKIApAQCAtNTcxLDcgKzU3Miw3IEBAIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpD
YW52YXM6OkNhbnZhcz4gSW5zcGVjdG9yQ2FudmFzOjpidWlsZE9iamVjdEZvckNhbnZhcyhiCiAg
ICAgcmV0dXJuIGNhbnZhczsKIH0KIAotUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlY29yZGlu
Zzo6UmVjb3JkaW5nPiBJbnNwZWN0b3JDYW52YXM6OnJlbGVhc2VPYmplY3RGb3JSZWNvcmRpbmco
KQorUmVmPFByb3RvY29sOjpSZWNvcmRpbmc6OlJlY29yZGluZz4gSW5zcGVjdG9yQ2FudmFzOjpy
ZWxlYXNlT2JqZWN0Rm9yUmVjb3JkaW5nKCkKIHsKICAgICBBU1NFUlQoIW1fY3VycmVudEFjdGlv
bnMpOwogICAgIEFTU0VSVCghbV9sYXN0UmVjb3JkZWRBY3Rpb24pOwpAQCAtNTgxLDI2ICs1ODIs
MjYgQEAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlY29yZGluZzo6UmVjb3JkaW5nPiBJbnNw
ZWN0b3JDYW52YXM6OnJlbGVhc2VPYmplY3RGb3IKICAgICBBU1NFUlQoY29udGV4dCk7CiAgICAg
Ly8gRklYTUU6IDxodHRwczovL3dlYmtpdC5vcmcvYi8yMDE2NTE+IFdlYiBJbnNwZWN0b3I6IENh
bnZhczogc3VwcG9ydCBjYW52YXMgcmVjb3JkaW5ncyBmb3IgV2ViR1BVRGV2aWNlCiAKLSAgICBJ
bnNwZWN0b3I6OlByb3RvY29sOjpSZWNvcmRpbmc6OlR5cGUgdHlwZTsKKyAgICBQcm90b2NvbDo6
UmVjb3JkaW5nOjpUeXBlIHR5cGU7CiAgICAgaWYgKGlzPENhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RD4oY29udGV4dCkpCi0gICAgICAgIHR5cGUgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpSZWNvcmRp
bmc6OlR5cGU6OkNhbnZhczJEOworICAgICAgICB0eXBlID0gUHJvdG9jb2w6OlJlY29yZGluZzo6
VHlwZTo6Q2FudmFzMkQ7CiAgICAgZWxzZSBpZiAoaXM8SW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250
ZXh0Pihjb250ZXh0KSkKLSAgICAgICAgdHlwZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlY29y
ZGluZzo6VHlwZTo6Q2FudmFzQml0bWFwUmVuZGVyZXI7CisgICAgICAgIHR5cGUgPSBQcm90b2Nv
bDo6UmVjb3JkaW5nOjpUeXBlOjpDYW52YXNCaXRtYXBSZW5kZXJlcjsKICNpZiBFTkFCTEUoV0VC
R0wpCiAgICAgZWxzZSBpZiAoaXM8V2ViR0xSZW5kZXJpbmdDb250ZXh0Pihjb250ZXh0KSkKLSAg
ICAgICAgdHlwZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlY29yZGluZzo6VHlwZTo6Q2FudmFz
V2ViR0w7CisgICAgICAgIHR5cGUgPSBQcm90b2NvbDo6UmVjb3JkaW5nOjpUeXBlOjpDYW52YXNX
ZWJHTDsKICNlbmRpZgogI2lmIEVOQUJMRShXRUJHTDIpCiAgICAgZWxzZSBpZiAoaXM8V2ViR0wy
UmVuZGVyaW5nQ29udGV4dD4oY29udGV4dCkpCi0gICAgICAgIHR5cGUgPSBJbnNwZWN0b3I6OlBy
b3RvY29sOjpSZWNvcmRpbmc6OlR5cGU6OkNhbnZhc1dlYkdMMjsKKyAgICAgICAgdHlwZSA9IFBy
b3RvY29sOjpSZWNvcmRpbmc6OlR5cGU6OkNhbnZhc1dlYkdMMjsKICNlbmRpZgogICAgIGVsc2Ug
ewogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgdHlwZSA9IEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlJlY29yZGluZzo6VHlwZTo6Q2FudmFzMkQ7CisgICAgICAgIHR5cGUgPSBQ
cm90b2NvbDo6UmVjb3JkaW5nOjpUeXBlOjpDYW52YXMyRDsKICAgICB9CiAKLSAgICBhdXRvIHJl
Y29yZGluZyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlY29yZGluZzo6UmVjb3JkaW5nOjpjcmVh
dGUoKQotICAgICAgICAuc2V0VmVyc2lvbihJbnNwZWN0b3I6OlByb3RvY29sOjpSZWNvcmRpbmc6
OlZFUlNJT04pCisgICAgYXV0byByZWNvcmRpbmcgPSBQcm90b2NvbDo6UmVjb3JkaW5nOjpSZWNv
cmRpbmc6OmNyZWF0ZSgpCisgICAgICAgIC5zZXRWZXJzaW9uKFByb3RvY29sOjpSZWNvcmRpbmc6
OlZFUlNJT04pCiAgICAgICAgIC5zZXRUeXBlKHR5cGUpCiAgICAgICAgIC5zZXRJbml0aWFsU3Rh
dGUobV9pbml0aWFsU3RhdGUucmVsZWFzZU5vbk51bGwoKSkKICAgICAgICAgLnNldERhdGEobV9z
ZXJpYWxpemVkRHVwbGljYXRlRGF0YS5yZWxlYXNlTm9uTnVsbCgpKQpAQCAtNjE0LDcgKzYxNSw3
IEBAIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpSZWNvcmRpbmc6OlJlY29yZGluZz4gSW5zcGVj
dG9yQ2FudmFzOjpyZWxlYXNlT2JqZWN0Rm9yCiAgICAgcmV0dXJuIHJlY29yZGluZzsKIH0KIAot
U3RyaW5nIEluc3BlY3RvckNhbnZhczo6Z2V0Q2FudmFzQ29udGVudEFzRGF0YVVSTChFcnJvclN0
cmluZyYgZXJyb3JTdHJpbmcpCitTdHJpbmcgSW5zcGVjdG9yQ2FudmFzOjpnZXRDYW52YXNDb250
ZW50QXNEYXRhVVJMKFByb3RvY29sOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCiB7CiAgICAg
YXV0byogbm9kZSA9IGNhbnZhc0VsZW1lbnQoKTsKICAgICBpZiAoIW5vZGUpIHsKQEAgLTY1MSw3
ICs2NTIsNyBAQCB2b2lkIEluc3BlY3RvckNhbnZhczo6YXBwZW5kQWN0aW9uU25hcHNob3RJZk5l
ZWRlZCgpCiAgICAgaWYgKG1fY29udGVudENoYW5nZWQpIHsKICAgICAgICAgbV9idWZmZXJVc2Vk
IC09IG1fbGFzdFJlY29yZGVkQWN0aW9uLT5tZW1vcnlDb3N0KCk7CiAKLSAgICAgICAgRXJyb3JT
dHJpbmcgaWdub3JlZDsKKyAgICAgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGlnbm9yZWQ7CiAg
ICAgICAgIG1fbGFzdFJlY29yZGVkQWN0aW9uLT5hZGRJdGVtKGluZGV4Rm9yRGF0YShnZXRDYW52
YXNDb250ZW50QXNEYXRhVVJMKGlnbm9yZWQpKSk7CiAKICAgICAgICAgbV9idWZmZXJVc2VkICs9
IG1fbGFzdFJlY29yZGVkQWN0aW9uLT5tZW1vcnlDb3N0KCk7CkBAIC03NzUsNyArNzc2LDcgQEAg
aW50IEluc3BlY3RvckNhbnZhczo6aW5kZXhGb3JEYXRhKER1cGxpY2F0ZURhdGFWYXJpYW50IGRh
dGEpCiAKICAgICBpZiAoaXRlbSkgewogICAgICAgICBtX2J1ZmZlclVzZWQgKz0gaXRlbS0+bWVt
b3J5Q29zdCgpOwotICAgICAgICBtX3NlcmlhbGl6ZWREdXBsaWNhdGVEYXRhLT5hZGRJdGVtKFdU
Rk1vdmUoaXRlbSkpOworICAgICAgICBtX3NlcmlhbGl6ZWREdXBsaWNhdGVEYXRhLT5hZGRJdGVt
KGl0ZW0ucmVsZWFzZU5vbk51bGwoKSk7CiAKICAgICAgICAgbV9pbmRleGVkRHVwbGljYXRlRGF0
YS5hcHBlbmQoZGF0YSk7CiAgICAgICAgIGluZGV4ID0gbV9pbmRleGVkRHVwbGljYXRlRGF0YS5z
aXplKCkgLSAxOwpAQCAtODEwLDEzICs4MTEsMTMgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3Rh
dGljIFJlZjxKU09OOjpBcnJheU9mPEpTT046OlZhbHVlPj4gYnVpbGRBcnJheUZvclZlY3RvcigK
ICAgICByZXR1cm4gYXJyYXk7CiB9CiAKLVJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpSZWNvcmRp
bmc6OkluaXRpYWxTdGF0ZT4gSW5zcGVjdG9yQ2FudmFzOjpidWlsZEluaXRpYWxTdGF0ZSgpCitS
ZWY8UHJvdG9jb2w6OlJlY29yZGluZzo6SW5pdGlhbFN0YXRlPiBJbnNwZWN0b3JDYW52YXM6OmJ1
aWxkSW5pdGlhbFN0YXRlKCkKIHsKICAgICBhdXRvKiBjb250ZXh0ID0gY2FudmFzQ29udGV4dCgp
OwogICAgIEFTU0VSVChjb250ZXh0KTsKICAgICAvLyBGSVhNRTogPGh0dHBzOi8vd2Via2l0Lm9y
Zy9iLzIwMTY1MT4gV2ViIEluc3BlY3RvcjogQ2FudmFzOiBzdXBwb3J0IGNhbnZhcyByZWNvcmRp
bmdzIGZvciBXZWJHUFVEZXZpY2UKIAotICAgIGF1dG8gaW5pdGlhbFN0YXRlUGF5bG9hZCA9IElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlJlY29yZGluZzo6SW5pdGlhbFN0YXRlOjpjcmVhdGUoKS5yZWxl
YXNlKCk7CisgICAgYXV0byBpbml0aWFsU3RhdGVQYXlsb2FkID0gUHJvdG9jb2w6OlJlY29yZGlu
Zzo6SW5pdGlhbFN0YXRlOjpjcmVhdGUoKS5yZWxlYXNlKCk7CiAKICAgICBhdXRvIGF0dHJpYnV0
ZXNQYXlsb2FkID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICBhdHRyaWJ1dGVzUGF5bG9h
ZC0+c2V0SW50ZWdlcigid2lkdGgiX3MsIGNvbnRleHQtPmNhbnZhc0Jhc2UoKS53aWR0aCgpKTsK
QEAgLTkwOCw3ICs5MDksNyBAQCBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6UmVjb3JkaW5nOjpJ
bml0aWFsU3RhdGU+IEluc3BlY3RvckNhbnZhczo6YnVpbGRJbml0aWFsUwogICAgIGlmIChwYXJh
bWV0ZXJzUGF5bG9hZC0+bGVuZ3RoKCkpCiAgICAgICAgIGluaXRpYWxTdGF0ZVBheWxvYWQtPnNl
dFBhcmFtZXRlcnMoV1RGTW92ZShwYXJhbWV0ZXJzUGF5bG9hZCkpOwogCi0gICAgRXJyb3JTdHJp
bmcgaWdub3JlZDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgaWdub3JlZDsKICAgICBpbml0
aWFsU3RhdGVQYXlsb2FkLT5zZXRDb250ZW50KGdldENhbnZhc0NvbnRlbnRBc0RhdGFVUkwoaWdu
b3JlZCkpOwogCiAgICAgcmV0dXJuIGluaXRpYWxTdGF0ZVBheWxvYWQ7CkBAIC05NDYsNyArOTQ3
LDcgQEAgUmVmPEpTT046OkFycmF5T2Y8SlNPTjo6VmFsdWU+PiBJbnNwZWN0b3JDYW52YXM6OmJ1
aWxkQWN0aW9uKGNvbnN0IFN0cmluZyYgbmFtZSwKICAgICAgICAgICAgICAgICBhcnJheS0+YWRk
SXRlbSh2YWx1ZS5kLnZhbHVlT3IoMSkpOwogICAgICAgICAgICAgICAgIGFycmF5LT5hZGRJdGVt
KHZhbHVlLmUudmFsdWVPcigwKSk7CiAgICAgICAgICAgICAgICAgYXJyYXktPmFkZEl0ZW0odmFs
dWUuZi52YWx1ZU9yKDApKTsKLSAgICAgICAgICAgICAgICBhZGRQYXJhbWV0ZXIoYXJyYXkucHRy
KCksIFJlY29yZGluZ1N3aXp6bGVUeXBlczo6RE9NTWF0cml4KTsKKyAgICAgICAgICAgICAgICBh
ZGRQYXJhbWV0ZXIoV1RGTW92ZShhcnJheSksIFJlY29yZGluZ1N3aXp6bGVUeXBlczo6RE9NTWF0
cml4KTsKICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICBbJl0gKGNvbnN0IEVsZW1lbnQqIHZh
bHVlKSB7CiAgICAgICAgICAgICAgICAgaWYgKHZhbHVlKSB7CkBAIC0xMTA2LDE2ICsxMTA3LDE2
IEBAIFJlZjxKU09OOjpBcnJheU9mPEpTT046OlZhbHVlPj4gSW5zcGVjdG9yQ2FudmFzOjpidWls
ZEFjdGlvbihjb25zdCBTdHJpbmcmIG5hbWUsCiAgICAgICAgICAgICAgICAgYXV0byBkZWR1cGxp
Y2F0ZWQgPSB2YWx1ZS5tYXAoWyZdIChjb25zdCBTdHJpbmcmIGl0ZW0pIHsKICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGluZGV4Rm9yRGF0YShpdGVtKTsKICAgICAgICAgICAgICAgICB9KTsK
LSAgICAgICAgICAgICAgICBhZGRQYXJhbWV0ZXIoYnVpbGRBcnJheUZvclZlY3RvcihkZWR1cGxp
Y2F0ZWQpLnB0cigpLCBSZWNvcmRpbmdTd2l6emxlVHlwZXM6OlN0cmluZyk7CisgICAgICAgICAg
ICAgICAgYWRkUGFyYW1ldGVyKGJ1aWxkQXJyYXlGb3JWZWN0b3IoZGVkdXBsaWNhdGVkKSwgUmVj
b3JkaW5nU3dpenpsZVR5cGVzOjpTdHJpbmcpOwogICAgICAgICAgICAgfSwKLSAgICAgICAgICAg
IFsmXSAoY29uc3QgVmVjdG9yPGZsb2F0PiYgdmFsdWUpIHsgYWRkUGFyYW1ldGVyKGJ1aWxkQXJy
YXlGb3JWZWN0b3IodmFsdWUpLnB0cigpLCBSZWNvcmRpbmdTd2l6emxlVHlwZXM6OkFycmF5KTsg
fSwKKyAgICAgICAgICAgIFsmXSAoY29uc3QgVmVjdG9yPGZsb2F0PiYgdmFsdWUpIHsgYWRkUGFy
YW1ldGVyKGJ1aWxkQXJyYXlGb3JWZWN0b3IodmFsdWUpLCBSZWNvcmRpbmdTd2l6emxlVHlwZXM6
OkFycmF5KTsgfSwKICAgICAgICAgICAgIFsmXSAoY29uc3QgVmVjdG9yPHVpbnQzMl90PiYgdmFs
dWUpIHsKICAgICAgICAgICAgICAgICBhdXRvIG1hcHBlZCA9IHZhbHVlLm1hcChbJl0gKHVpbnQz
Ml90IGl0ZW0pIHsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGRvdWJs
ZT4oaXRlbSk7CiAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgYWRkUGFyYW1l
dGVyKGJ1aWxkQXJyYXlGb3JWZWN0b3IobWFwcGVkKS5wdHIoKSwgUmVjb3JkaW5nU3dpenpsZVR5
cGVzOjpBcnJheSk7CisgICAgICAgICAgICAgICAgYWRkUGFyYW1ldGVyKGJ1aWxkQXJyYXlGb3JW
ZWN0b3IobWFwcGVkKSwgUmVjb3JkaW5nU3dpenpsZVR5cGVzOjpBcnJheSk7CiAgICAgICAgICAg
ICB9LAotICAgICAgICAgICAgWyZdIChjb25zdCBWZWN0b3I8aW50MzJfdD4mIHZhbHVlKSB7IGFk
ZFBhcmFtZXRlcihidWlsZEFycmF5Rm9yVmVjdG9yKHZhbHVlKS5wdHIoKSwgUmVjb3JkaW5nU3dp
enpsZVR5cGVzOjpBcnJheSk7IH0sCisgICAgICAgICAgICBbJl0gKGNvbnN0IFZlY3RvcjxpbnQz
Ml90PiYgdmFsdWUpIHsgYWRkUGFyYW1ldGVyKGJ1aWxkQXJyYXlGb3JWZWN0b3IodmFsdWUpLCBS
ZWNvcmRpbmdTd2l6emxlVHlwZXM6OkFycmF5KTsgfSwKICNpZiBFTkFCTEUoV0VCR0wpCiAgICAg
ICAgICAgICBbJl0gKGNvbnN0IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OkZsb2F0MzJMaXN0
OjpWYXJpYW50VHlwZSYgdmFsdWUpIHsKICAgICAgICAgICAgICAgICBXVEY6OnZpc2l0KHBhcnNl
UGFyYW1ldGVyLCB2YWx1ZSk7CkBAIC0xMTU5LDcgKzExNjAsNyBAQCBSZWY8SlNPTjo6QXJyYXlP
ZjxKU09OOjpWYWx1ZT4+IEluc3BlY3RvckNhbnZhczo6YnVpbGRBY3Rpb24oY29uc3QgU3RyaW5n
JiBuYW1lLAogUmVmPEpTT046OkFycmF5T2Y8SlNPTjo6VmFsdWU+PiBJbnNwZWN0b3JDYW52YXM6
OmJ1aWxkQXJyYXlGb3JDYW52YXNHcmFkaWVudChjb25zdCBDYW52YXNHcmFkaWVudCYgY2FudmFz
R3JhZGllbnQpCiB7CiAgICAgQVNDSUlMaXRlcmFsIHR5cGUgPSAibGluZWFyLWdyYWRpZW50Il9z
OwotICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTT046OkFycmF5T2Y8ZmxvYXQ+OjpjcmVhdGUoKTsK
KyAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU09OOjpBcnJheU9mPGRvdWJsZT46OmNyZWF0ZSgpOwog
ICAgIFdURjo6c3dpdGNoT24oY2FudmFzR3JhZGllbnQuZ3JhZGllbnQoKS5kYXRhKCksCiAgICAg
ICAgIFsmXSAoY29uc3QgR3JhZGllbnQ6OkxpbmVhckRhdGEmIGRhdGEpIHsKICAgICAgICAgICAg
IHBhcmFtZXRlcnMtPmFkZEl0ZW0oZGF0YS5wb2ludDAueCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDYW52YXMuaCBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JDYW52YXMuaAppbmRleCA3OGNiNmE4YTNiOGFiNzgwZTk1ZmIzZmFl
ZDNhYmM1OTRkMTQ2NTk4Li5iMjdiYzhkNDkyMzkxMTdiZWU1MjVkNWZlNmFjMjZlMmQ2MTZiNWM3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNhbnZhcy5oCkBAIC01OCw4
ICs1OCw2IEBAIGNsYXNzIE9mZnNjcmVlbkNhbnZhczsKIGNsYXNzIFR5cGVkT01DU1NJbWFnZVZh
bHVlOwogI2VuZGlmCiAKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCiBjbGFzcyBJbnNw
ZWN0b3JDYW52YXMgZmluYWwgOiBwdWJsaWMgUmVmQ291bnRlZDxJbnNwZWN0b3JDYW52YXM+IHsK
IHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPEluc3BlY3RvckNhbnZhcz4gY3JlYXRlKENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQmKTsKQEAgLTEwNyw3ICsxMDUsNyBAQCBwdWJsaWM6CiAgICAgUmVmPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6Q2FudmFzPiBidWlsZE9iamVjdEZvckNhbnZhcyhi
b29sIGNhcHR1cmVCYWNrdHJhY2UpOwogICAgIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpSZWNv
cmRpbmc6OlJlY29yZGluZz4gcmVsZWFzZU9iamVjdEZvclJlY29yZGluZygpOwogCi0gICAgU3Ry
aW5nIGdldENhbnZhc0NvbnRlbnRBc0RhdGFVUkwoRXJyb3JTdHJpbmcmKTsKKyAgICBTdHJpbmcg
Z2V0Q2FudmFzQ29udGVudEFzRGF0YVVSTChJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmlu
ZyYpOwogCiBwcml2YXRlOgogICAgIEluc3BlY3RvckNhbnZhcyhDYW52YXNSZW5kZXJpbmdDb250
ZXh0Jik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29u
dHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxl
ci5jcHAKaW5kZXggMmU5MGMxMTk0OGE3ZTBlYjYxMDVhODNlMmMwOGNiNGY4MmE4ZjJmZS4uNjMw
ZGY3MTc5MGM2M2I2ZTc1ODczNDUxYTE3NDBmODZmNjdlMDJkZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcApAQCAtNDc4LDEwICs0Nzgs
OCBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmZyb250ZW5kSW5pdGlhbGl6ZWQoKQogewog
ICAgIGlmIChtX3BhdXNlQWZ0ZXJJbml0aWFsaXphdGlvbikgewogICAgICAgICBtX3BhdXNlQWZ0
ZXJJbml0aWFsaXphdGlvbiA9IGZhbHNlOwotICAgICAgICBpZiAoYXV0byogZGVidWdnZXJBZ2Vu
dCA9IG1faW5zdHJ1bWVudGluZ0FnZW50cy0+ZW5hYmxlZFBhZ2VEZWJ1Z2dlckFnZW50KCkpIHsK
LSAgICAgICAgICAgIEVycm9yU3RyaW5nIGlnbm9yZWQ7Ci0gICAgICAgICAgICBkZWJ1Z2dlckFn
ZW50LT5wYXVzZShpZ25vcmVkKTsKLSAgICAgICAgfQorICAgICAgICBpZiAoYXV0byogZGVidWdn
ZXJBZ2VudCA9IG1faW5zdHJ1bWVudGluZ0FnZW50cy0+ZW5hYmxlZFBhZ2VEZWJ1Z2dlckFnZW50
KCkpCisgICAgICAgICAgICBkZWJ1Z2dlckFnZW50LT5wYXVzZSgpOwogICAgIH0KIAogI2lmIEVO
QUJMRShSRU1PVEVfSU5TUEVDVE9SKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckZyb250ZW5kSG9zdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNwcAppbmRleCA1MGUwYzgzYmM5MjA2NjJlNzY4MDI1NTc3
NTJiMzZmMjM3NWIwMzljLi5hNmJiODc3YTIyYTBhYTg2YmY4OTk4MzlhNzVmNWFmZjZlZjhkZTMw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRI
b3N0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRI
b3N0LmNwcApAQCAtNjA3LDcgKzYwNyw3IEBAIGJvb2wgSW5zcGVjdG9yRnJvbnRlbmRIb3N0Ojpk
aWFnbm9zdGljTG9nZ2luZ0F2YWlsYWJsZSgpCiAgICAgcmV0dXJuIG1fY2xpZW50ICYmIG1fY2xp
ZW50LT5kaWFnbm9zdGljTG9nZ2luZ0F2YWlsYWJsZSgpOwogfQogCi1zdGF0aWMgT3B0aW9uYWw8
RGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQ6OlZhbHVlUGF5bG9hZD4gdmFsdWVQYXlsb2FkRnJvbUpT
T05WYWx1ZShjb25zdCBSZWZQdHI8SlNPTjo6VmFsdWU+JiB2YWx1ZSkKK3N0YXRpYyBPcHRpb25h
bDxEaWFnbm9zdGljTG9nZ2luZ0NsaWVudDo6VmFsdWVQYXlsb2FkPiB2YWx1ZVBheWxvYWRGcm9t
SlNPTlZhbHVlKFJlZjxKU09OOjpWYWx1ZT4mJiB2YWx1ZSkKIHsKICAgICBzd2l0Y2ggKHZhbHVl
LT50eXBlKCkpIHsKICAgICBjYXNlIEpTT046OlZhbHVlOjpUeXBlOjpBcnJheToKQEAgLTYxNywy
NCArNjE3LDE2IEBAIHN0YXRpYyBPcHRpb25hbDxEaWFnbm9zdGljTG9nZ2luZ0NsaWVudDo6VmFs
dWVQYXlsb2FkPiB2YWx1ZVBheWxvYWRGcm9tSlNPTlZhbHVlCiAgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CiAKICAgICBjYXNlIEpTT046OlZhbHVlOjpUeXBlOjpCb29sZWFuOgotICAgICAg
ICBib29sIGJvb2xWYWx1ZTsKLSAgICAgICAgdmFsdWUtPmFzQm9vbGVhbihib29sVmFsdWUpOwot
ICAgICAgICByZXR1cm4gRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQ6OlZhbHVlUGF5bG9hZChib29s
VmFsdWUpOworICAgICAgICByZXR1cm4gRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQ6OlZhbHVlUGF5
bG9hZCh2YWx1ZS0+YXNCb29sZWFuKCkudmFsdWVPcihmYWxzZSkpOwogCiAgICAgY2FzZSBKU09O
OjpWYWx1ZTo6VHlwZTo6RG91YmxlOgotICAgICAgICBkb3VibGUgZG91YmxlVmFsdWU7Ci0gICAg
ICAgIHZhbHVlLT5hc0RvdWJsZShkb3VibGVWYWx1ZSk7Ci0gICAgICAgIHJldHVybiBEaWFnbm9z
dGljTG9nZ2luZ0NsaWVudDo6VmFsdWVQYXlsb2FkKGRvdWJsZVZhbHVlKTsKKyAgICAgICAgcmV0
dXJuIERpYWdub3N0aWNMb2dnaW5nQ2xpZW50OjpWYWx1ZVBheWxvYWQodmFsdWUtPmFzRG91Ymxl
KCkudmFsdWVPcigwKSk7CiAKICAgICBjYXNlIEpTT046OlZhbHVlOjpUeXBlOjpJbnRlZ2VyOgot
ICAgICAgICBsb25nIGxvbmcgaW50VmFsdWU7Ci0gICAgICAgIHZhbHVlLT5hc0ludGVnZXIoaW50
VmFsdWUpOwotICAgICAgICByZXR1cm4gRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQ6OlZhbHVlUGF5
bG9hZChpbnRWYWx1ZSk7CisgICAgICAgIHJldHVybiBEaWFnbm9zdGljTG9nZ2luZ0NsaWVudDo6
VmFsdWVQYXlsb2FkKHN0YXRpY19jYXN0PGxvbmcgbG9uZz4odmFsdWUtPmFzSW50ZWdlcigpLnZh
bHVlT3IoMCkpKTsKIAogICAgIGNhc2UgSlNPTjo6VmFsdWU6OlR5cGU6OlN0cmluZzoKLSAgICAg
ICAgU3RyaW5nIHN0cmluZ1ZhbHVlOwotICAgICAgICB2YWx1ZS0+YXNTdHJpbmcoc3RyaW5nVmFs
dWUpOwotICAgICAgICByZXR1cm4gRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQ6OlZhbHVlUGF5bG9h
ZChzdHJpbmdWYWx1ZSk7CisgICAgICAgIHJldHVybiBEaWFnbm9zdGljTG9nZ2luZ0NsaWVudDo6
VmFsdWVQYXlsb2FkKHZhbHVlLT5hc1N0cmluZygpKTsKICAgICB9CiAKICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKQEAgLTY0NiwxNyArNjM4LDE3IEBAIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmRI
b3N0Ojpsb2dEaWFnbm9zdGljRXZlbnQoY29uc3QgU3RyaW5nJiBldmVudE5hbWUsIGNvbnN0IFN0
CiAgICAgaWYgKCFzdXBwb3J0c0RpYWdub3N0aWNMb2dnaW5nKCkpCiAgICAgICAgIHJldHVybjsK
IAotICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gcGF5bG9hZFZhbHVlOwotICAgIGlmICghSlNPTjo6
VmFsdWU6OnBhcnNlSlNPTihwYXlsb2FkU3RyaW5nLCBwYXlsb2FkVmFsdWUpKQorICAgIGF1dG8g
cGF5bG9hZFZhbHVlID0gSlNPTjo6VmFsdWU6OnBhcnNlSlNPTihwYXlsb2FkU3RyaW5nKTsKKyAg
ICBpZiAoIXBheWxvYWRWYWx1ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVmUHRyPEpTT046
Ok9iamVjdD4gcGF5bG9hZE9iamVjdDsKLSAgICBpZiAoIXBheWxvYWRWYWx1ZS0+YXNPYmplY3Qo
cGF5bG9hZE9iamVjdCkpCisgICAgYXV0byBwYXlsb2FkT2JqZWN0ID0gcGF5bG9hZFZhbHVlLT5h
c09iamVjdCgpOworICAgIGlmICghcGF5bG9hZE9iamVjdCkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQ6OlZhbHVlRGljdGlvbmFyeSBkaWN0aW9uYXJ5Owot
ICAgIGZvciAoY29uc3QgYXV0byYgW2tleSwgdmFsdWVdIDogKnBheWxvYWRPYmplY3QpIHsKLSAg
ICAgICAgaWYgKGF1dG8gdmFsdWVQYXlsb2FkID0gdmFsdWVQYXlsb2FkRnJvbUpTT05WYWx1ZSh2
YWx1ZSkpCisgICAgZm9yIChhdXRvJiBba2V5LCB2YWx1ZV0gOiAqcGF5bG9hZE9iamVjdCkgewor
ICAgICAgICBpZiAoYXV0byB2YWx1ZVBheWxvYWQgPSB2YWx1ZVBheWxvYWRGcm9tSlNPTlZhbHVl
KFdURk1vdmUodmFsdWUpKSkKICAgICAgICAgICAgIGRpY3Rpb25hcnkuc2V0KGtleSwgV1RGTW92
ZSh2YWx1ZVBheWxvYWQudmFsdWUoKSkpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwCmluZGV4IGFlMGZlZjVkZmUzOWI5YTUx
NmU1NTEwMzA3ZWFiY2I2NjBkMWFiY2IuLjk3NjY5ZWZiNjg3ZDMzNTU0ZDUyYmM2OGUxOGM2ODQx
YWViNGNmNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JT
dHlsZVNoZWV0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5
bGVTaGVldC5jcHAKQEAgLTM4MCw3ICszODAsNyBAQCB2b2lkIFN0eWxlU2hlZXRIYW5kbGVyOjpv
YnNlcnZlQ29tbWVudCh1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0KQog
ICAgIG1fY3VycmVudFJ1bGVEYXRhU3RhY2subGFzdCgpLT5zdHlsZVNvdXJjZURhdGEtPnByb3Bl
cnR5RGF0YS5hcHBlbmQoQ1NTUHJvcGVydHlTb3VyY2VEYXRhKHByb3BlcnR5RGF0YS5uYW1lLCBw
cm9wZXJ0eURhdGEudmFsdWUsIGZhbHNlLCB0cnVlLCB0cnVlLCBTb3VyY2VSYW5nZShzdGFydE9m
ZnNldCAtIHRvcFJ1bGVCb2R5UmFuZ2Uuc3RhcnQsIGVuZE9mZnNldCAtIHRvcFJ1bGVCb2R5UmFu
Z2Uuc3RhcnQpKSk7CiB9CiAKLXN0YXRpYyBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NT
OjpTb3VyY2VSYW5nZT4gYnVpbGRTb3VyY2VSYW5nZU9iamVjdChjb25zdCBTb3VyY2VSYW5nZSYg
cmFuZ2UsIGNvbnN0IFZlY3RvcjxzaXplX3Q+JiBsaW5lRW5kaW5ncywgaW50KiBlbmRpbmdMaW5l
ID0gbnVsbHB0cikKK3N0YXRpYyBSZWZQdHI8UHJvdG9jb2w6OkNTUzo6U291cmNlUmFuZ2U+IGJ1
aWxkU291cmNlUmFuZ2VPYmplY3QoY29uc3QgU291cmNlUmFuZ2UmIHJhbmdlLCBjb25zdCBWZWN0
b3I8c2l6ZV90PiYgbGluZUVuZGluZ3MsIGludCogZW5kaW5nTGluZSA9IG51bGxwdHIpCiB7CiAg
ICAgaWYgKGxpbmVFbmRpbmdzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBA
IC0zOTEsNyArMzkxLDcgQEAgc3RhdGljIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6
OlNvdXJjZVJhbmdlPiBidWlsZFNvdXJjZVJhbmdlT2JqZWN0KGNvbnMKICAgICBpZiAoZW5kaW5n
TGluZSkKICAgICAgICAgKmVuZGluZ0xpbmUgPSBlbmQubV9saW5lLnplcm9CYXNlZEludCgpOwog
Ci0gICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U291cmNlUmFuZ2U6OmNyZWF0
ZSgpCisgICAgcmV0dXJuIFByb3RvY29sOjpDU1M6OlNvdXJjZVJhbmdlOjpjcmVhdGUoKQogICAg
ICAgICAuc2V0U3RhcnRMaW5lKHN0YXJ0Lm1fbGluZS56ZXJvQmFzZWRJbnQoKSkKICAgICAgICAg
LnNldFN0YXJ0Q29sdW1uKHN0YXJ0Lm1fY29sdW1uLnplcm9CYXNlZEludCgpKQogICAgICAgICAu
c2V0RW5kTGluZShlbmQubV9saW5lLnplcm9CYXNlZEludCgpKQpAQCAtNDI4LDM0ICs0MjgsMzQg
QEAgc3RhdGljIFJlZlB0cjxDU1NSdWxlTGlzdD4gYXNDU1NSdWxlTGlzdChDU1NSdWxlKiBydWxl
KQogICAgIHJldHVybiBudWxscHRyOwogfQogCi1zdGF0aWMgUmVmPEpTT046OkFycmF5T2Y8SW5z
cGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpHcm91cGluZz4+IGJ1aWxkQXJyYXlGb3JHcm91cGluZ3Mo
Q1NTUnVsZSYgcnVsZSkKK3N0YXRpYyBSZWY8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6Q1NTOjpH
cm91cGluZz4+IGJ1aWxkQXJyYXlGb3JHcm91cGluZ3MoQ1NTUnVsZSYgcnVsZSkKIHsKLSAgICBh
dXRvIGdyb3VwaW5nc1BheWxvYWQgPSBKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkNTUzo6R3JvdXBpbmc+OjpjcmVhdGUoKTsKKyAgICBhdXRvIGdyb3VwaW5nc1BheWxvYWQgPSBK
U09OOjpBcnJheU9mPFByb3RvY29sOjpDU1M6Okdyb3VwaW5nPjo6Y3JlYXRlKCk7CiAKICAgICBh
dXRvKiBwYXJlbnRSdWxlID0gJnJ1bGU7CiAgICAgd2hpbGUgKHBhcmVudFJ1bGUpIHsKLSAgICAg
ICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6R3JvdXBpbmc+IHJ1bGVHcm91cGlu
Z1BheWxvYWQ7CisgICAgICAgIFJlZlB0cjxQcm90b2NvbDo6Q1NTOjpHcm91cGluZz4gcnVsZUdy
b3VwaW5nUGF5bG9hZDsKIAogICAgICAgICBpZiAoaXM8Q1NTTWVkaWFSdWxlPihwYXJlbnRSdWxl
KSkgewogICAgICAgICAgICAgYXV0byogbWVkaWEgPSBkb3duY2FzdDxDU1NNZWRpYVJ1bGU+KHBh
cmVudFJ1bGUpLT5tZWRpYSgpOwogICAgICAgICAgICAgaWYgKG1lZGlhICYmIG1lZGlhLT5sZW5n
dGgoKSAmJiBtZWRpYS0+bWVkaWFUZXh0KCkgIT0gImFsbCIpIHsKLSAgICAgICAgICAgICAgICBy
dWxlR3JvdXBpbmdQYXlsb2FkID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpHcm91cGluZzo6
Y3JlYXRlKCkKKyAgICAgICAgICAgICAgICBydWxlR3JvdXBpbmdQYXlsb2FkID0gUHJvdG9jb2w6
OkNTUzo6R3JvdXBpbmc6OmNyZWF0ZSgpCiAgICAgICAgICAgICAgICAgICAgIC5zZXRUZXh0KG1l
ZGlhLT5tZWRpYVRleHQoKSkKLSAgICAgICAgICAgICAgICAgICAgLnNldFR5cGUoSW5zcGVjdG9y
OjpQcm90b2NvbDo6Q1NTOjpHcm91cGluZzo6VHlwZTo6TWVkaWFSdWxlKQorICAgICAgICAgICAg
ICAgICAgICAuc2V0VHlwZShQcm90b2NvbDo6Q1NTOjpHcm91cGluZzo6VHlwZTo6TWVkaWFSdWxl
KQogICAgICAgICAgICAgICAgICAgICAucmVsZWFzZSgpOwogICAgICAgICAgICAgfQogICAgICAg
ICB9IGVsc2UgaWYgKGlzPENTU0ltcG9ydFJ1bGU+KHBhcmVudFJ1bGUpKSB7CiAgICAgICAgICAg
ICBhdXRvJiBtZWRpYSA9IGRvd25jYXN0PENTU0ltcG9ydFJ1bGU+KHBhcmVudFJ1bGUpLT5tZWRp
YSgpOwogICAgICAgICAgICAgaWYgKG1lZGlhLmxlbmd0aCgpICYmIG1lZGlhLm1lZGlhVGV4dCgp
ICE9ICJhbGwiKSB7Ci0gICAgICAgICAgICAgICAgcnVsZUdyb3VwaW5nUGF5bG9hZCA9IEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkNTUzo6R3JvdXBpbmc6OmNyZWF0ZSgpCisgICAgICAgICAgICAgICAg
cnVsZUdyb3VwaW5nUGF5bG9hZCA9IFByb3RvY29sOjpDU1M6Okdyb3VwaW5nOjpjcmVhdGUoKQog
ICAgICAgICAgICAgICAgICAgICAuc2V0VGV4dChtZWRpYS5tZWRpYVRleHQoKSkKLSAgICAgICAg
ICAgICAgICAgICAgLnNldFR5cGUoSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpHcm91cGluZzo6
VHlwZTo6TWVkaWFJbXBvcnRSdWxlKQorICAgICAgICAgICAgICAgICAgICAuc2V0VHlwZShQcm90
b2NvbDo6Q1NTOjpHcm91cGluZzo6VHlwZTo6TWVkaWFJbXBvcnRSdWxlKQogICAgICAgICAgICAg
ICAgICAgICAucmVsZWFzZSgpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKGlz
PENTU1N1cHBvcnRzUnVsZT4ocGFyZW50UnVsZSkpIHsKLSAgICAgICAgICAgIHJ1bGVHcm91cGlu
Z1BheWxvYWQgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6Okdyb3VwaW5nOjpjcmVhdGUoKQor
ICAgICAgICAgICAgcnVsZUdyb3VwaW5nUGF5bG9hZCA9IFByb3RvY29sOjpDU1M6Okdyb3VwaW5n
OjpjcmVhdGUoKQogICAgICAgICAgICAgICAgIC5zZXRUZXh0KGRvd25jYXN0PENTU1N1cHBvcnRz
UnVsZT4ocGFyZW50UnVsZSktPmNvbmRpdGlvblRleHQoKSkKLSAgICAgICAgICAgICAgICAuc2V0
VHlwZShJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6Okdyb3VwaW5nOjpUeXBlOjpTdXBwb3J0c1J1
bGUpCisgICAgICAgICAgICAgICAgLnNldFR5cGUoUHJvdG9jb2w6OkNTUzo6R3JvdXBpbmc6OlR5
cGU6OlN1cHBvcnRzUnVsZSkKICAgICAgICAgICAgICAgICAucmVsZWFzZSgpOwogICAgICAgICB9
CiAKQEAgLTQ3MCw3ICs0NzAsNyBAQCBzdGF0aWMgUmVmPEpTT046OkFycmF5T2Y8SW5zcGVjdG9y
OjpQcm90b2NvbDo6Q1NTOjpHcm91cGluZz4+IGJ1aWxkQXJyYXlGb3JHcm91cAogICAgICAgICAg
ICAgICAgICAgICBydWxlR3JvdXBpbmdQYXlsb2FkLT5zZXRTb3VyY2VVUkwoc291cmNlVVJMKTsK
ICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgZ3JvdXBpbmdzUGF5bG9hZC0+YWRkSXRlbShX
VEZNb3ZlKHJ1bGVHcm91cGluZ1BheWxvYWQpKTsKKyAgICAgICAgICAgIGdyb3VwaW5nc1BheWxv
YWQtPmFkZEl0ZW0ocnVsZUdyb3VwaW5nUGF5bG9hZC5yZWxlYXNlTm9uTnVsbCgpKTsKICAgICAg
ICAgfQogCiAgICAgICAgIGlmIChwYXJlbnRSdWxlLT5wYXJlbnRSdWxlKCkpIHsKQEAgLTQ4Miw5
ICs0ODIsOSBAQCBzdGF0aWMgUmVmPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6
Q1NTOjpHcm91cGluZz4+IGJ1aWxkQXJyYXlGb3JHcm91cAogICAgICAgICB3aGlsZSAoc3R5bGVT
aGVldCkgewogICAgICAgICAgICAgYXV0byogbWVkaWEgPSBzdHlsZVNoZWV0LT5tZWRpYSgpOwog
ICAgICAgICAgICAgaWYgKG1lZGlhICYmIG1lZGlhLT5sZW5ndGgoKSAmJiBtZWRpYS0+bWVkaWFU
ZXh0KCkgIT0gImFsbCIpIHsKLSAgICAgICAgICAgICAgICBhdXRvIHNoZWV0R3JvdXBpbmdQYXls
b2FkID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpHcm91cGluZzo6Y3JlYXRlKCkKKyAgICAg
ICAgICAgICAgICBhdXRvIHNoZWV0R3JvdXBpbmdQYXlsb2FkID0gUHJvdG9jb2w6OkNTUzo6R3Jv
dXBpbmc6OmNyZWF0ZSgpCiAgICAgICAgICAgICAgICAgICAgIC5zZXRUZXh0KG1lZGlhLT5tZWRp
YVRleHQoKSkKLSAgICAgICAgICAgICAgICAgICAgLnNldFR5cGUoaXM8SFRNTFN0eWxlRWxlbWVu
dD4oc3R5bGVTaGVldC0+b3duZXJOb2RlKCkpID8gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpH
cm91cGluZzo6VHlwZTo6TWVkaWFTdHlsZU5vZGU6IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6
R3JvdXBpbmc6OlR5cGU6Ok1lZGlhTGlua05vZGUpCisgICAgICAgICAgICAgICAgICAgIC5zZXRU
eXBlKGlzPEhUTUxTdHlsZUVsZW1lbnQ+KHN0eWxlU2hlZXQtPm93bmVyTm9kZSgpKSA/IFByb3Rv
Y29sOjpDU1M6Okdyb3VwaW5nOjpUeXBlOjpNZWRpYVN0eWxlTm9kZTogUHJvdG9jb2w6OkNTUzo6
R3JvdXBpbmc6OlR5cGU6Ok1lZGlhTGlua05vZGUpCiAgICAgICAgICAgICAgICAgICAgIC5yZWxl
YXNlKCk7CiAKICAgICAgICAgICAgICAgICBTdHJpbmcgc291cmNlVVJMOwpAQCAtNTIzLDI4ICs1
MjMsMzAgQEAgSW5zcGVjdG9yU3R5bGU6Okluc3BlY3RvclN0eWxlKGNvbnN0IEluc3BlY3RvckNT
U0lkJiBzdHlsZUlkLCBSZWY8Q1NTU3R5bGVEZWNsYXIKIAogSW5zcGVjdG9yU3R5bGU6On5JbnNw
ZWN0b3JTdHlsZSgpID0gZGVmYXVsdDsKIAotUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNT
Uzo6Q1NTU3R5bGU+IEluc3BlY3RvclN0eWxlOjpidWlsZE9iamVjdEZvclN0eWxlKCkgY29uc3QK
K1JlZjxQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4gSW5zcGVjdG9yU3R5bGU6OmJ1aWxkT2JqZWN0
Rm9yU3R5bGUoKSBjb25zdAogewotICAgIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNT
U1N0eWxlPiByZXN1bHQgPSBzdHlsZVdpdGhQcm9wZXJ0aWVzKCk7Ci0gICAgaWYgKCFtX3N0eWxl
SWQuaXNFbXB0eSgpKQotICAgICAgICByZXN1bHQtPnNldFN0eWxlSWQobV9zdHlsZUlkLmFzUHJv
dG9jb2xWYWx1ZTxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlSWQ+KCkpOworICAg
IFJlZjxQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4gcmVzdWx0ID0gc3R5bGVXaXRoUHJvcGVydGll
cygpOworICAgIGlmIChhdXRvIHN0eWxlSWQgPSBtX3N0eWxlSWQuYXNQcm90b2NvbFZhbHVlPFBy
b3RvY29sOjpDU1M6OkNTU1N0eWxlSWQ+KCkpCisgICAgICAgIHJlc3VsdC0+c2V0U3R5bGVJZChz
dHlsZUlkLnJlbGVhc2VOb25OdWxsKCkpOwogCiAgICAgcmVzdWx0LT5zZXRXaWR0aChtX3N0eWxl
LT5nZXRQcm9wZXJ0eVZhbHVlKCJ3aWR0aCIpKTsKICAgICByZXN1bHQtPnNldEhlaWdodChtX3N0
eWxlLT5nZXRQcm9wZXJ0eVZhbHVlKCJoZWlnaHQiKSk7CiAKICAgICBSZWZQdHI8Q1NTUnVsZVNv
dXJjZURhdGE+IHNvdXJjZURhdGEgPSBleHRyYWN0U291cmNlRGF0YSgpOwotICAgIGlmIChzb3Vy
Y2VEYXRhKQotICAgICAgICByZXN1bHQtPnNldFJhbmdlKGJ1aWxkU291cmNlUmFuZ2VPYmplY3Qo
c291cmNlRGF0YS0+cnVsZUJvZHlSYW5nZSwgbV9wYXJlbnRTdHlsZVNoZWV0LT5saW5lRW5kaW5n
cygpKSk7CisgICAgaWYgKHNvdXJjZURhdGEpIHsKKyAgICAgICAgaWYgKGF1dG8gcmFuZ2UgPSBi
dWlsZFNvdXJjZVJhbmdlT2JqZWN0KHNvdXJjZURhdGEtPnJ1bGVCb2R5UmFuZ2UsIG1fcGFyZW50
U3R5bGVTaGVldC0+bGluZUVuZGluZ3MoKSkpCisgICAgICAgICAgICByZXN1bHQtPnNldFJhbmdl
KHJhbmdlLnJlbGVhc2VOb25OdWxsKCkpOworICAgIH0KIAogICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKLVJlZjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTQ29tcHV0
ZWRTdHlsZVByb3BlcnR5Pj4gSW5zcGVjdG9yU3R5bGU6OmJ1aWxkQXJyYXlGb3JDb21wdXRlZFN0
eWxlKCkgY29uc3QKK1JlZjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpDU1M6OkNTU0NvbXB1dGVk
U3R5bGVQcm9wZXJ0eT4+IEluc3BlY3RvclN0eWxlOjpidWlsZEFycmF5Rm9yQ29tcHV0ZWRTdHls
ZSgpIGNvbnN0CiB7Ci0gICAgYXV0byByZXN1bHQgPSBKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkNTUzo6Q1NTQ29tcHV0ZWRTdHlsZVByb3BlcnR5Pjo6Y3JlYXRlKCk7CisgICAg
YXV0byByZXN1bHQgPSBKU09OOjpBcnJheU9mPFByb3RvY29sOjpDU1M6OkNTU0NvbXB1dGVkU3R5
bGVQcm9wZXJ0eT46OmNyZWF0ZSgpOwogICAgIGZvciAoYXV0byYgcHJvcGVydHkgOiBjb2xsZWN0
UHJvcGVydGllcyh0cnVlKSkgewogICAgICAgICBjb25zdCBDU1NQcm9wZXJ0eVNvdXJjZURhdGEm
IHByb3BlcnR5RW50cnkgPSBwcm9wZXJ0eS5zb3VyY2VEYXRhOwotICAgICAgICBhdXRvIGVudHJ5
ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NDb21wdXRlZFN0eWxlUHJvcGVydHk6OmNy
ZWF0ZSgpCisgICAgICAgIGF1dG8gZW50cnkgPSBQcm90b2NvbDo6Q1NTOjpDU1NDb21wdXRlZFN0
eWxlUHJvcGVydHk6OmNyZWF0ZSgpCiAgICAgICAgICAgICAuc2V0TmFtZShwcm9wZXJ0eUVudHJ5
Lm5hbWUpCiAgICAgICAgICAgICAuc2V0VmFsdWUocHJvcGVydHlFbnRyeS52YWx1ZSkKICAgICAg
ICAgICAgIC5yZWxlYXNlKCk7CkBAIC02MjMsMTMgKzYyNSwxMyBAQCBWZWN0b3I8SW5zcGVjdG9y
U3R5bGVQcm9wZXJ0eT4gSW5zcGVjdG9yU3R5bGU6OmNvbGxlY3RQcm9wZXJ0aWVzKGJvb2wgaW5j
bHVkZUFsbAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLVJlZjxJbnNwZWN0b3I6OlByb3RvY29s
OjpDU1M6OkNTU1N0eWxlPiBJbnNwZWN0b3JTdHlsZTo6c3R5bGVXaXRoUHJvcGVydGllcygpIGNv
bnN0CitSZWY8UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+IEluc3BlY3RvclN0eWxlOjpzdHlsZVdp
dGhQcm9wZXJ0aWVzKCkgY29uc3QKIHsKICAgICBhdXRvIHByb3BlcnRpZXMgPSBjb2xsZWN0UHJv
cGVydGllcyhmYWxzZSk7CiAKLSAgICBhdXRvIHByb3BlcnRpZXNPYmplY3QgPSBKU09OOjpBcnJh
eU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUHJvcGVydHk+OjpjcmVhdGUoKTsKLSAg
ICBhdXRvIHNob3J0aGFuZEVudHJpZXMgPSBBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNT
Uzo6U2hvcnRoYW5kRW50cnk+OjpjcmVhdGUoKTsKLSAgICBIYXNoTWFwPFN0cmluZywgUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUHJvcGVydHk+PiBwcm9wZXJ0eU5hbWVUb1By
ZXZpb3VzQWN0aXZlUHJvcGVydHk7CisgICAgYXV0byBwcm9wZXJ0aWVzT2JqZWN0ID0gSlNPTjo6
QXJyYXlPZjxQcm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0eT46OmNyZWF0ZSgpOworICAgIGF1dG8g
c2hvcnRoYW5kRW50cmllcyA9IEFycmF5T2Y8UHJvdG9jb2w6OkNTUzo6U2hvcnRoYW5kRW50cnk+
OjpjcmVhdGUoKTsKKyAgICBIYXNoTWFwPFN0cmluZywgUmVmUHRyPFByb3RvY29sOjpDU1M6OkNT
U1Byb3BlcnR5Pj4gcHJvcGVydHlOYW1lVG9QcmV2aW91c0FjdGl2ZVByb3BlcnR5OwogICAgIEhh
c2hTZXQ8U3RyaW5nPiBmb3VuZFNob3J0aGFuZHM7CiAgICAgU3RyaW5nIHByZXZpb3VzUHJpb3Jp
dHk7CiAgICAgU3RyaW5nIHByZXZpb3VzU3RhdHVzOwpAQCAtNjQxLDkgKzY0Myw5IEBAIFJlZjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlPiBJbnNwZWN0b3JTdHlsZTo6c3R5bGVX
aXRoUHJvcGVydGllcygpIGNvCiAgICAgICAgIGNvbnN0IENTU1Byb3BlcnR5U291cmNlRGF0YSYg
cHJvcGVydHlFbnRyeSA9IGl0LT5zb3VyY2VEYXRhOwogICAgICAgICBjb25zdCBTdHJpbmcmIG5h
bWUgPSBwcm9wZXJ0eUVudHJ5Lm5hbWU7CiAKLSAgICAgICAgYXV0byBzdGF0dXMgPSBpdC0+ZGlz
YWJsZWQgPyBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1Byb3BlcnR5U3RhdHVzOjpEaXNh
YmxlZCA6IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUHJvcGVydHlTdGF0dXM6OkFjdGl2
ZTsKKyAgICAgICAgYXV0byBzdGF0dXMgPSBpdC0+ZGlzYWJsZWQgPyBQcm90b2NvbDo6Q1NTOjpD
U1NQcm9wZXJ0eVN0YXR1czo6RGlzYWJsZWQgOiBQcm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0eVN0
YXR1czo6QWN0aXZlOwogCi0gICAgICAgIGF1dG8gcHJvcGVydHkgPSBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpDU1M6OkNTU1Byb3BlcnR5OjpjcmVhdGUoKQorICAgICAgICBhdXRvIHByb3BlcnR5ID0g
UHJvdG9jb2w6OkNTUzo6Q1NTUHJvcGVydHk6OmNyZWF0ZSgpCiAgICAgICAgICAgICAuc2V0TmFt
ZShuYW1lLmNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlKCkpCiAgICAgICAgICAgICAuc2V0VmFsdWUo
cHJvcGVydHlFbnRyeS52YWx1ZSkKICAgICAgICAgICAgIC5yZWxlYXNlKCk7CkBAIC02NjksNyAr
NjcxLDggQEAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+IEluc3BlY3Rv
clN0eWxlOjpzdHlsZVdpdGhQcm9wZXJ0aWVzKCkgY28KICAgICAgICAgICAgIFNvdXJjZVJhbmdl
IGFic29sdXRlUHJvcGVydHlSYW5nZSA9IHByb3BlcnR5RW50cnkucmFuZ2U7CiAgICAgICAgICAg
ICBhYnNvbHV0ZVByb3BlcnR5UmFuZ2Uuc3RhcnQgKz0gcnVsZUJvZHlSYW5nZVN0YXJ0OwogICAg
ICAgICAgICAgYWJzb2x1dGVQcm9wZXJ0eVJhbmdlLmVuZCArPSBydWxlQm9keVJhbmdlU3RhcnQ7
Ci0gICAgICAgICAgICBwcm9wZXJ0eS0+c2V0UmFuZ2UoYnVpbGRTb3VyY2VSYW5nZU9iamVjdChh
YnNvbHV0ZVByb3BlcnR5UmFuZ2UsIGxpbmVFbmRpbmdzKSk7CisgICAgICAgICAgICBpZiAoYXV0
byByYW5nZSA9IGJ1aWxkU291cmNlUmFuZ2VPYmplY3QoYWJzb2x1dGVQcm9wZXJ0eVJhbmdlLCBs
aW5lRW5kaW5ncykpCisgICAgICAgICAgICAgICAgcHJvcGVydHktPnNldFJhbmdlKHJhbmdlLnJl
bGVhc2VOb25OdWxsKCkpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKCFpdC0+ZGlzYWJsZWQp
IHsKQEAgLTY4MywzMCArNjg2LDM1IEBAIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNT
U1N0eWxlPiBJbnNwZWN0b3JTdHlsZTo6c3R5bGVXaXRoUHJvcGVydGllcygpIGNvCiAKICAgICAg
ICAgICAgICAgICAvLyBDYW5vbmljYWxpemUgcHJvcGVydHkgbmFtZXMgdG8gdHJlYXQgbm9uLXBy
ZWZpeGVkIGFuZCB2ZW5kb3ItcHJlZml4ZWQgcHJvcGVydHkgbmFtZXMgdGhlIHNhbWUgKG9wYWNp
dHkgdnMuIC13ZWJraXQtb3BhY2l0eSkuCiAgICAgICAgICAgICAgICAgU3RyaW5nIGNhbm9uaWNh
bFByb3BlcnR5TmFtZSA9IHByb3BlcnR5SWQgPyBnZXRQcm9wZXJ0eU5hbWVTdHJpbmcocHJvcGVy
dHlJZCkgOiBuYW1lOwotICAgICAgICAgICAgICAgIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0eT4+OjppdGVyYXRvciBhY3RpdmVJdCA9
IHByb3BlcnR5TmFtZVRvUHJldmlvdXNBY3RpdmVQcm9wZXJ0eS5maW5kKGNhbm9uaWNhbFByb3Bl
cnR5TmFtZSk7CisgICAgICAgICAgICAgICAgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxQcm90b2Nv
bDo6Q1NTOjpDU1NQcm9wZXJ0eT4+OjppdGVyYXRvciBhY3RpdmVJdCA9IHByb3BlcnR5TmFtZVRv
UHJldmlvdXNBY3RpdmVQcm9wZXJ0eS5maW5kKGNhbm9uaWNhbFByb3BlcnR5TmFtZSk7CiAgICAg
ICAgICAgICAgICAgaWYgKGFjdGl2ZUl0ICE9IHByb3BlcnR5TmFtZVRvUHJldmlvdXNBY3RpdmVQ
cm9wZXJ0eS5lbmQoKSkgewogICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydHlFbnRyeS5w
YXJzZWRPaykgewotICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBzdWNjZXNzUHJpb3JpdHkg
PSBhY3RpdmVJdC0+dmFsdWUtPmdldFN0cmluZyhJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNT
U1Byb3BlcnR5OjpQcmlvcml0eSwgcHJldmlvdXNQcmlvcml0eSk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBib29sIHN1Y2Nlc3NTdGF0dXMgPSBhY3RpdmVJdC0+dmFsdWUtPmdldFN0cmluZyhJ
bnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1Byb3BlcnR5OjpTdGF0dXMsIHByZXZpb3VzU3Rh
dHVzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdWNjZXNzU3RhdHVzICYmIHByZXZp
b3VzU3RhdHVzICE9ICJpbmFjdGl2ZSIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAocHJvcGVydHlFbnRyeS5pbXBvcnRhbnQgfHwgIXN1Y2Nlc3NQcmlvcml0eSkgLy8gUHJpb3Jp
dHkgbm90IHNldCA9PSAibm90IGltcG9ydGFudCIuCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNob3VsZEluYWN0aXZhdGUgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGVsc2UgaWYgKHN0YXR1cyA9PSBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1Byb3Bl
cnR5U3RhdHVzOjpBY3RpdmUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
SW5hY3RpdmF0ZSBhIG5vbi1pbXBvcnRhbnQgcHJvcGVydHkgZm9sbG93aW5nIHRoZSBzYW1lLW5h
bWVkIGltcG9ydGFudCBwcm9wZXJ0eS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3RhdHVzID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0eVN0YXR1czo6SW5h
Y3RpdmU7CisgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIG5ld1ByaW9yaXR5ID0gYWN0aXZl
SXQtPnZhbHVlLT5nZXRTdHJpbmcoUHJvdG9jb2w6OkNTUzo6Q1NTUHJvcGVydHk6OnByaW9yaXR5
S2V5KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghIW5ld1ByaW9yaXR5KQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzUHJpb3JpdHkgPSBuZXdQcmlvcml0eTsKKwor
ICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBuZXdTdGF0dXMgPSBhY3RpdmVJdC0+dmFsdWUt
PmdldFN0cmluZyhQcm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0eTo6c3RhdHVzS2V5KTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICghIW5ld1N0YXR1cykgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHByZXZpb3VzU3RhdHVzID0gbmV3U3RhdHVzOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChwcmV2aW91c1N0YXR1cyAhPSBQcm90b2NvbDo6SGVscGVyczo6Z2V0RW51
bUNvbnN0YW50VmFsdWUoUHJvdG9jb2w6OkNTUzo6Q1NTUHJvcGVydHlTdGF0dXM6OkluYWN0aXZl
KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydHlFbnRyeS5p
bXBvcnRhbnQgfHwgISFuZXdQcmlvcml0eSkgLy8gUHJpb3JpdHkgbm90IHNldCA9PSAibm90IGlt
cG9ydGFudCIuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG91bGRJbmFj
dGl2YXRlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAo
c3RhdHVzID09IFByb3RvY29sOjpDU1M6OkNTU1Byb3BlcnR5U3RhdHVzOjpBY3RpdmUpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEluYWN0aXZhdGUgYSBub24taW1w
b3J0YW50IHByb3BlcnR5IGZvbGxvd2luZyB0aGUgc2FtZS1uYW1lZCBpbXBvcnRhbnQgcHJvcGVy
dHkuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSBQcm90b2Nv
bDo6Q1NTOjpDU1NQcm9wZXJ0eVN0YXR1czo6SW5hY3RpdmU7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBib29sIHByZXZpb3VzUGFyc2VkT2s7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBib29sIHN1Y2Nlc3MgPSBhY3RpdmVJdC0+dmFsdWUtPmdldEJvb2xlYW4oSW5zcGVjdG9y
OjpQcm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0eTo6UGFyc2VkT2ssIHByZXZpb3VzUGFyc2VkT2sp
OwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Y2Nlc3MgJiYgIXByZXZpb3VzUGFyc2Vk
T2spCisgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIHByZXZpb3VzUGFyc2VkT2sgPSBhY3Rp
dmVJdC0+dmFsdWUtPmdldEJvb2xlYW4oUHJvdG9jb2w6OkNTUzo6Q1NTUHJvcGVydHk6OnBhcnNl
ZE9rS2V5KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcmV2aW91c1BhcnNlZE9rICYm
ICFwcmV2aW91c1BhcnNlZE9rKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3VsZElu
YWN0aXZhdGUgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
fSBlbHNlCiAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZVRvUHJldmlvdXNBY3RpdmVQ
cm9wZXJ0eS5zZXQoY2Fub25pY2FsUHJvcGVydHlOYW1lLCBwcm9wZXJ0eS5jb3B5UmVmKCkpOwog
CiAgICAgICAgICAgICAgICAgaWYgKHNob3VsZEluYWN0aXZhdGUpIHsKLSAgICAgICAgICAgICAg
ICAgICAgYWN0aXZlSXQtPnZhbHVlLT5zZXRTdGF0dXMoSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NT
OjpDU1NQcm9wZXJ0eVN0YXR1czo6SW5hY3RpdmUpOworICAgICAgICAgICAgICAgICAgICBhY3Rp
dmVJdC0+dmFsdWUtPnNldFN0YXR1cyhQcm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0eVN0YXR1czo6
SW5hY3RpdmUpOwogICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWVUb1ByZXZpb3VzQWN0
aXZlUHJvcGVydHkuc2V0KGNhbm9uaWNhbFByb3BlcnR5TmFtZSwgcHJvcGVydHkuY29weVJlZigp
KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2UgewpAQCAtNzE0LDEzICs3
MjIsMTMgQEAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+IEluc3BlY3Rv
clN0eWxlOjpzdHlsZVdpdGhQcm9wZXJ0aWVzKCkgY28KICAgICAgICAgICAgICAgICAvLyBEZWZh
dWx0ICJpbXBsaWNpdCIgPT0gZmFsc2UuCiAgICAgICAgICAgICAgICAgaWYgKGltcGxpY2l0KQog
ICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eS0+c2V0SW1wbGljaXQodHJ1ZSk7Ci0gICAgICAg
ICAgICAgICAgc3RhdHVzID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0eVN0
YXR1czo6U3R5bGU7CisgICAgICAgICAgICAgICAgc3RhdHVzID0gUHJvdG9jb2w6OkNTUzo6Q1NT
UHJvcGVydHlTdGF0dXM6OlN0eWxlOwogCiAgICAgICAgICAgICAgICAgU3RyaW5nIHNob3J0aGFu
ZCA9IG1fc3R5bGUtPmdldFByb3BlcnR5U2hvcnRoYW5kKG5hbWUpOwogICAgICAgICAgICAgICAg
IGlmICghc2hvcnRoYW5kLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgICAgICBpZiAoIWZv
dW5kU2hvcnRoYW5kcy5jb250YWlucyhzaG9ydGhhbmQpKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBmb3VuZFNob3J0aGFuZHMuYWRkKHNob3J0aGFuZCk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBhdXRvIGVudHJ5ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTaG9ydGhhbmRFbnRy
eTo6Y3JlYXRlKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gZW50cnkgPSBQcm90b2Nv
bDo6Q1NTOjpTaG9ydGhhbmRFbnRyeTo6Y3JlYXRlKCkKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAuc2V0TmFtZShzaG9ydGhhbmQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNl
dFZhbHVlKHNob3J0aGFuZFZhbHVlKHNob3J0aGFuZCkpCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLnJlbGVhc2UoKTsKQEAgLTczMSwxMSArNzM5LDExIEBAIFJlZjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpDU1M6OkNTU1N0eWxlPiBJbnNwZWN0b3JTdHlsZTo6c3R5bGVXaXRoUHJvcGVydGll
cygpIGNvCiAgICAgICAgIH0KIAogICAgICAgICAvLyBEZWZhdWx0ICJzdGF0dXMiID09ICJzdHls
ZSIuCi0gICAgICAgIGlmIChzdGF0dXMgIT0gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NQ
cm9wZXJ0eVN0YXR1czo6U3R5bGUpCisgICAgICAgIGlmIChzdGF0dXMgIT0gUHJvdG9jb2w6OkNT
Uzo6Q1NTUHJvcGVydHlTdGF0dXM6OlN0eWxlKQogICAgICAgICAgICAgcHJvcGVydHktPnNldFN0
YXR1cyhzdGF0dXMpOwogICAgIH0KIAotICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpD
U1M6OkNTU1N0eWxlOjpjcmVhdGUoKQorICAgIHJldHVybiBQcm90b2NvbDo6Q1NTOjpDU1NTdHls
ZTo6Y3JlYXRlKCkKICAgICAgICAgLnNldENzc1Byb3BlcnRpZXMoV1RGTW92ZShwcm9wZXJ0aWVz
T2JqZWN0KSkKICAgICAgICAgLnNldFNob3J0aGFuZEVudHJpZXMoV1RGTW92ZShzaG9ydGhhbmRF
bnRyaWVzKSkKICAgICAgICAgLnJlbGVhc2UoKTsKQEAgLTgwNSw3ICs4MTMsNyBAQCBWZWN0b3I8
U3RyaW5nPiBJbnNwZWN0b3JTdHlsZTo6bG9uZ2hhbmRQcm9wZXJ0aWVzKGNvbnN0IFN0cmluZyYg
c2hvcnRoYW5kUHJvcGVydAogICAgIHJldHVybiBwcm9wZXJ0aWVzOwogfQogCi1SZWY8SW5zcGVj
dG9yU3R5bGVTaGVldD4gSW5zcGVjdG9yU3R5bGVTaGVldDo6Y3JlYXRlKEluc3BlY3RvclBhZ2VB
Z2VudCogcGFnZUFnZW50LCBjb25zdCBTdHJpbmcmIGlkLCBSZWZQdHI8Q1NTU3R5bGVTaGVldD4m
JiBwYWdlU3R5bGVTaGVldCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0T3Jp
Z2luIG9yaWdpbiwgY29uc3QgU3RyaW5nJiBkb2N1bWVudFVSTCwgTGlzdGVuZXIqIGxpc3RlbmVy
KQorUmVmPEluc3BlY3RvclN0eWxlU2hlZXQ+IEluc3BlY3RvclN0eWxlU2hlZXQ6OmNyZWF0ZShJ
bnNwZWN0b3JQYWdlQWdlbnQqIHBhZ2VBZ2VudCwgY29uc3QgU3RyaW5nJiBpZCwgUmVmUHRyPENT
U1N0eWxlU2hlZXQ+JiYgcGFnZVN0eWxlU2hlZXQsIFByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRP
cmlnaW4gb3JpZ2luLCBjb25zdCBTdHJpbmcmIGRvY3VtZW50VVJMLCBMaXN0ZW5lciogbGlzdGVu
ZXIpCiB7CiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSW5zcGVjdG9yU3R5bGVTaGVldChwYWdl
QWdlbnQsIGlkLCBXVEZNb3ZlKHBhZ2VTdHlsZVNoZWV0KSwgb3JpZ2luLCBkb2N1bWVudFVSTCwg
bGlzdGVuZXIpKTsKIH0KQEAgLTgxNyw3ICs4MjUsNyBAQCBTdHJpbmcgSW5zcGVjdG9yU3R5bGVT
aGVldDo6c3R5bGVTaGVldFVSTChDU1NTdHlsZVNoZWV0KiBwYWdlU3R5bGVTaGVldCkKICAgICBy
ZXR1cm4gZW1wdHlTdHJpbmcoKTsKIH0KIAotSW5zcGVjdG9yU3R5bGVTaGVldDo6SW5zcGVjdG9y
U3R5bGVTaGVldChJbnNwZWN0b3JQYWdlQWdlbnQqIHBhZ2VBZ2VudCwgY29uc3QgU3RyaW5nJiBp
ZCwgUmVmUHRyPENTU1N0eWxlU2hlZXQ+JiYgcGFnZVN0eWxlU2hlZXQsIEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbiBvcmlnaW4sIGNvbnN0IFN0cmluZyYgZG9jdW1l
bnRVUkwsIExpc3RlbmVyKiBsaXN0ZW5lcikKK0luc3BlY3RvclN0eWxlU2hlZXQ6Okluc3BlY3Rv
clN0eWxlU2hlZXQoSW5zcGVjdG9yUGFnZUFnZW50KiBwYWdlQWdlbnQsIGNvbnN0IFN0cmluZyYg
aWQsIFJlZlB0cjxDU1NTdHlsZVNoZWV0PiYmIHBhZ2VTdHlsZVNoZWV0LCBQcm90b2NvbDo6Q1NT
OjpTdHlsZVNoZWV0T3JpZ2luIG9yaWdpbiwgY29uc3QgU3RyaW5nJiBkb2N1bWVudFVSTCwgTGlz
dGVuZXIqIGxpc3RlbmVyKQogICAgIDogbV9wYWdlQWdlbnQocGFnZUFnZW50KQogICAgICwgbV9p
ZChpZCkKICAgICAsIG1fcGFnZVN0eWxlU2hlZXQoV1RGTW92ZShwYWdlU3R5bGVTaGVldCkpCkBA
IC05NDcsNyArOTU1LDcgQEAgRXhjZXB0aW9uT3I8Q1NTU3R5bGVSdWxlKj4gSW5zcGVjdG9yU3R5
bGVTaGVldDo6YWRkUnVsZShjb25zdCBTdHJpbmcmIHNlbGVjdG9yKQogICAgIHNldFRleHQoc3R5
bGVTaGVldFRleHQudG9TdHJpbmcoKSk7CiAKICAgICAvLyBJbnNwZWN0b3IgU3R5bGUgU2hlZXRz
IGFyZSBhbHdheXMgdHJlYXRlZCBhcyB0aG91Z2ggdGhlaXIgcGFyc2VkIGRhdGEgaXMgcmVhZHku
Ci0gICAgaWYgKG1fb3JpZ2luID09IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVl
dE9yaWdpbjo6SW5zcGVjdG9yKQorICAgIGlmIChtX29yaWdpbiA9PSBQcm90b2NvbDo6Q1NTOjpT
dHlsZVNoZWV0T3JpZ2luOjpJbnNwZWN0b3IpCiAgICAgICAgIGZpcmVTdHlsZVNoZWV0Q2hhbmdl
ZCgpOwogICAgIGVsc2UKICAgICAgICAgcmVwYXJzZVN0eWxlU2hlZXQoc3R5bGVTaGVldFRleHQu
dG9TdHJpbmcoKSk7CkBAIC0xMDA3LDcgKzEwMTUsNyBAQCBDU1NTdHlsZVJ1bGUqIEluc3BlY3Rv
clN0eWxlU2hlZXQ6OnJ1bGVGb3JJZChjb25zdCBJbnNwZWN0b3JDU1NJZCYgaWQpIGNvbnN0CiAg
ICAgcmV0dXJuIGlkLm9yZGluYWwoKSA+PSBtX2ZsYXRSdWxlcy5zaXplKCkgPyBudWxscHRyIDog
bV9mbGF0UnVsZXMuYXQoaWQub3JkaW5hbCgpKS5nZXQoKTsKIH0KIAotUmVmUHRyPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGVTaGVldEJvZHk+IEluc3BlY3RvclN0eWxlU2hlZXQ6
OmJ1aWxkT2JqZWN0Rm9yU3R5bGVTaGVldCgpCitSZWZQdHI8UHJvdG9jb2w6OkNTUzo6Q1NTU3R5
bGVTaGVldEJvZHk+IEluc3BlY3RvclN0eWxlU2hlZXQ6OmJ1aWxkT2JqZWN0Rm9yU3R5bGVTaGVl
dCgpCiB7CiAgICAgQ1NTU3R5bGVTaGVldCogc3R5bGVTaGVldCA9IHBhZ2VTdHlsZVNoZWV0KCk7
CiAgICAgaWYgKCFzdHlsZVNoZWV0KQpAQCAtMTAxNSw3ICsxMDIzLDcgQEAgUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGVTaGVldEJvZHk+IEluc3BlY3RvclN0eWxlU2hl
ZXQ6OmJ1aWxkT2IKIAogICAgIFJlZlB0cjxDU1NSdWxlTGlzdD4gY3NzUnVsZUxpc3QgPSBhc0NT
U1J1bGVMaXN0KHN0eWxlU2hlZXQpOwogCi0gICAgYXV0byByZXN1bHQgPSBJbnNwZWN0b3I6OlBy
b3RvY29sOjpDU1M6OkNTU1N0eWxlU2hlZXRCb2R5OjpjcmVhdGUoKQorICAgIGF1dG8gcmVzdWx0
ID0gUHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGVTaGVldEJvZHk6OmNyZWF0ZSgpCiAgICAgICAgIC5z
ZXRTdHlsZVNoZWV0SWQoaWQoKSkKICAgICAgICAgLnNldFJ1bGVzKGJ1aWxkQXJyYXlGb3JSdWxl
TGlzdChjc3NSdWxlTGlzdC5nZXQoKSkpCiAgICAgICAgIC5yZWxlYXNlKCk7CkBAIC0xMDI3LDcg
KzEwMzUsNyBAQCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZVNoZWV0
Qm9keT4gSW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGRPYgogICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKLVJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlU2hlZXRIZWFkZXI+
IEluc3BlY3RvclN0eWxlU2hlZXQ6OmJ1aWxkT2JqZWN0Rm9yU3R5bGVTaGVldEluZm8oKQorUmVm
UHRyPFByb3RvY29sOjpDU1M6OkNTU1N0eWxlU2hlZXRIZWFkZXI+IEluc3BlY3RvclN0eWxlU2hl
ZXQ6OmJ1aWxkT2JqZWN0Rm9yU3R5bGVTaGVldEluZm8oKQogewogICAgIENTU1N0eWxlU2hlZXQq
IHN0eWxlU2hlZXQgPSBwYWdlU3R5bGVTaGVldCgpOwogICAgIGlmICghc3R5bGVTaGVldCkKQEAg
LTEwMzUsNyArMTA0Myw3IEBAIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0
eWxlU2hlZXRIZWFkZXI+IEluc3BlY3RvclN0eWxlU2hlZXQ6OmJ1aWxkCiAKICAgICBEb2N1bWVu
dCogZG9jdW1lbnQgPSBzdHlsZVNoZWV0LT5vd25lckRvY3VtZW50KCk7CiAgICAgRnJhbWUqIGZy
YW1lID0gZG9jdW1lbnQgPyBkb2N1bWVudC0+ZnJhbWUoKSA6IG51bGxwdHI7Ci0gICAgcmV0dXJu
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGVTaGVldEhlYWRlcjo6Y3JlYXRlKCkK
KyAgICByZXR1cm4gUHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGVTaGVldEhlYWRlcjo6Y3JlYXRlKCkK
ICAgICAgICAgLnNldFN0eWxlU2hlZXRJZChpZCgpKQogICAgICAgICAuc2V0T3JpZ2luKG1fb3Jp
Z2luKQogICAgICAgICAuc2V0RGlzYWJsZWQoc3R5bGVTaGVldC0+ZGlzYWJsZWQoKSkKQEAgLTEw
NDgsOSArMTA1Niw5IEBAIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxl
U2hlZXRIZWFkZXI+IEluc3BlY3RvclN0eWxlU2hlZXQ6OmJ1aWxkCiAgICAgICAgIC5yZWxlYXNl
KCk7CiB9CiAKLXN0YXRpYyBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTZWxlY3Rv
cj4gYnVpbGRPYmplY3RGb3JTZWxlY3RvckhlbHBlcihjb25zdCBTdHJpbmcmIHNlbGVjdG9yVGV4
dCwgY29uc3QgQ1NTU2VsZWN0b3ImIHNlbGVjdG9yKQorc3RhdGljIFJlZjxQcm90b2NvbDo6Q1NT
OjpDU1NTZWxlY3Rvcj4gYnVpbGRPYmplY3RGb3JTZWxlY3RvckhlbHBlcihjb25zdCBTdHJpbmcm
IHNlbGVjdG9yVGV4dCwgY29uc3QgQ1NTU2VsZWN0b3ImIHNlbGVjdG9yKQogewotICAgIGF1dG8g
aW5zcGVjdG9yU2VsZWN0b3IgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1NlbGVjdG9y
OjpjcmVhdGUoKQorICAgIGF1dG8gaW5zcGVjdG9yU2VsZWN0b3IgPSBQcm90b2NvbDo6Q1NTOjpD
U1NTZWxlY3Rvcjo6Y3JlYXRlKCkKICAgICAgICAgLnNldFRleHQoc2VsZWN0b3JUZXh0KQogICAg
ICAgICAucmVsZWFzZSgpOwogCkBAIC0xMDY1LDExICsxMDczLDExIEBAIHN0YXRpYyBSZWY8SW5z
cGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTZWxlY3Rvcj4gYnVpbGRPYmplY3RGb3JTZWxlY3Rv
ckhlbHBlcihjCiAgICAgcmV0dXJuIGluc3BlY3RvclNlbGVjdG9yOwogfQogCi1zdGF0aWMgUmVm
PEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTZWxlY3Rvcj4+IHNl
bGVjdG9yc0Zyb21Tb3VyY2UoY29uc3QgQ1NTUnVsZVNvdXJjZURhdGEqIHNvdXJjZURhdGEsIGNv
bnN0IFN0cmluZyYgc2hlZXRUZXh0LCBjb25zdCBDU1NTZWxlY3Rvckxpc3QmIHNlbGVjdG9yTGlz
dCkKK3N0YXRpYyBSZWY8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6Q1NTOjpDU1NTZWxlY3Rvcj4+
IHNlbGVjdG9yc0Zyb21Tb3VyY2UoY29uc3QgQ1NTUnVsZVNvdXJjZURhdGEqIHNvdXJjZURhdGEs
IGNvbnN0IFN0cmluZyYgc2hlZXRUZXh0LCBjb25zdCBDU1NTZWxlY3Rvckxpc3QmIHNlbGVjdG9y
TGlzdCkKIHsKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SlNDOjpZYXJyOjpSZWd1bGFyRXhw
cmVzc2lvbj4gY29tbWVudCgiL1xcKlteXSo/XFwqLyIsIEpTQzo6WWFycjo6VGV4dENhc2VTZW5z
aXRpdmUsIEpTQzo6WWFycjo6TXVsdGlsaW5lRW5hYmxlZCk7CiAKLSAgICBhdXRvIHJlc3VsdCA9
IEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTZWxlY3Rvcj46OmNy
ZWF0ZSgpOworICAgIGF1dG8gcmVzdWx0ID0gSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6Q1NTOjpD
U1NTZWxlY3Rvcj46OmNyZWF0ZSgpOwogICAgIGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvciA9
IHNlbGVjdG9yTGlzdC5maXJzdCgpOwogICAgIGZvciAoYXV0byYgcmFuZ2UgOiBzb3VyY2VEYXRh
LT5zZWxlY3RvclJhbmdlcykgewogICAgICAgICAvLyBJZiB3ZSBkb24ndCBoYXZlIGEgc2VsZWN0
b3IsIHRoYXQgbWVhbnMgdGhlIFNvdXJjZURhdGEgZm9yIHRoaXMgQ1NTU3R5bGVTaGVldApAQCAt
MTA4OSwxNyArMTA5NywxNyBAQCBzdGF0aWMgUmVmPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6Q1NTOjpDU1NTZWxlY3Rvcj4+IHNlbGVjdG9yc0Zyb21TbwogICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKLVJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1NlbGVjdG9yPiBJ
bnNwZWN0b3JTdHlsZVNoZWV0OjpidWlsZE9iamVjdEZvclNlbGVjdG9yKGNvbnN0IENTU1NlbGVj
dG9yKiBzZWxlY3RvcikKK1JlZjxQcm90b2NvbDo6Q1NTOjpDU1NTZWxlY3Rvcj4gSW5zcGVjdG9y
U3R5bGVTaGVldDo6YnVpbGRPYmplY3RGb3JTZWxlY3Rvcihjb25zdCBDU1NTZWxlY3Rvciogc2Vs
ZWN0b3IpCiB7CiAgICAgcmV0dXJuIGJ1aWxkT2JqZWN0Rm9yU2VsZWN0b3JIZWxwZXIoc2VsZWN0
b3ItPnNlbGVjdG9yVGV4dCgpLCAqc2VsZWN0b3IpOwogfQogCi1SZWY8SW5zcGVjdG9yOjpQcm90
b2NvbDo6Q1NTOjpTZWxlY3Rvckxpc3Q+IEluc3BlY3RvclN0eWxlU2hlZXQ6OmJ1aWxkT2JqZWN0
Rm9yU2VsZWN0b3JMaXN0KENTU1N0eWxlUnVsZSogcnVsZSwgaW50JiBlbmRpbmdMaW5lKQorUmVm
PFByb3RvY29sOjpDU1M6OlNlbGVjdG9yTGlzdD4gSW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGRP
YmplY3RGb3JTZWxlY3Rvckxpc3QoQ1NTU3R5bGVSdWxlKiBydWxlLCBpbnQmIGVuZGluZ0xpbmUp
CiB7CiAgICAgUmVmUHRyPENTU1J1bGVTb3VyY2VEYXRhPiBzb3VyY2VEYXRhOwogICAgIGlmIChl
bnN1cmVQYXJzZWREYXRhUmVhZHkoKSkKICAgICAgICAgc291cmNlRGF0YSA9IHJ1bGVTb3VyY2VE
YXRhRm9yKCZydWxlLT5zdHlsZSgpKTsKLSAgICBSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0
b3I6OlByb3RvY29sOjpDU1M6OkNTU1NlbGVjdG9yPj4gc2VsZWN0b3JzOworICAgIFJlZlB0cjxK
U09OOjpBcnJheU9mPFByb3RvY29sOjpDU1M6OkNTU1NlbGVjdG9yPj4gc2VsZWN0b3JzOwogCiAg
ICAgLy8gVGhpcyBpbnRlbnRpb25hbGx5IGRvZXMgbm90IHJlbHkgb24gdGhlIHNvdXJjZSBkYXRh
IHRvIGF2b2lkIGNhdGNoaW5nIHRoZSB0cmFpbGluZyBjb21tZW50cyAoYmVmb3JlIHRoZSBkZWNs
YXJhdGlvbiBzdGFydGluZyAneycpLgogICAgIFN0cmluZyBzZWxlY3RvclRleHQgPSBydWxlLT5z
ZWxlY3RvclRleHQoKTsKQEAgLTExMDcsNDEgKzExMTUsNDIgQEAgUmVmPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkNTUzo6U2VsZWN0b3JMaXN0PiBJbnNwZWN0b3JTdHlsZVNoZWV0OjpidWlsZE9iamVj
dEZvclMKICAgICBpZiAoc291cmNlRGF0YSkKICAgICAgICAgc2VsZWN0b3JzID0gc2VsZWN0b3Jz
RnJvbVNvdXJjZShzb3VyY2VEYXRhLmdldCgpLCBtX3BhcnNlZFN0eWxlU2hlZXQtPnRleHQoKSwg
cnVsZS0+c3R5bGVSdWxlKCkuc2VsZWN0b3JMaXN0KCkpOwogICAgIGVsc2UgewotICAgICAgICBz
ZWxlY3RvcnMgPSBKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU2Vs
ZWN0b3I+OjpjcmVhdGUoKTsKKyAgICAgICAgc2VsZWN0b3JzID0gSlNPTjo6QXJyYXlPZjxQcm90
b2NvbDo6Q1NTOjpDU1NTZWxlY3Rvcj46OmNyZWF0ZSgpOwogICAgICAgICBjb25zdCBDU1NTZWxl
Y3Rvckxpc3QmIHNlbGVjdG9yTGlzdCA9IHJ1bGUtPnN0eWxlUnVsZSgpLnNlbGVjdG9yTGlzdCgp
OwogICAgICAgICBmb3IgKGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvciA9IHNlbGVjdG9yTGlz
dC5maXJzdCgpOyBzZWxlY3Rvcjsgc2VsZWN0b3IgPSBDU1NTZWxlY3Rvckxpc3Q6Om5leHQoc2Vs
ZWN0b3IpKQogICAgICAgICAgICAgc2VsZWN0b3JzLT5hZGRJdGVtKGJ1aWxkT2JqZWN0Rm9yU2Vs
ZWN0b3Ioc2VsZWN0b3IpKTsKICAgICB9Ci0gICAgYXV0byByZXN1bHQgPSBJbnNwZWN0b3I6OlBy
b3RvY29sOjpDU1M6OlNlbGVjdG9yTGlzdDo6Y3JlYXRlKCkKLSAgICAgICAgLnNldFNlbGVjdG9y
cyhXVEZNb3ZlKHNlbGVjdG9ycykpCisgICAgYXV0byByZXN1bHQgPSBQcm90b2NvbDo6Q1NTOjpT
ZWxlY3Rvckxpc3Q6OmNyZWF0ZSgpCisgICAgICAgIC5zZXRTZWxlY3RvcnMoc2VsZWN0b3JzLnJl
bGVhc2VOb25OdWxsKCkpCiAgICAgICAgIC5zZXRUZXh0KHNlbGVjdG9yVGV4dCkKICAgICAgICAg
LnJlbGVhc2UoKTsKLSAgICBpZiAoc291cmNlRGF0YSkKLSAgICAgICAgcmVzdWx0LT5zZXRSYW5n
ZShidWlsZFNvdXJjZVJhbmdlT2JqZWN0KHNvdXJjZURhdGEtPnJ1bGVIZWFkZXJSYW5nZSwgbGlu
ZUVuZGluZ3MoKSwgJmVuZGluZ0xpbmUpKTsKKyAgICBpZiAoc291cmNlRGF0YSkgeworICAgICAg
ICBpZiAoYXV0byByYW5nZSA9IGJ1aWxkU291cmNlUmFuZ2VPYmplY3Qoc291cmNlRGF0YS0+cnVs
ZUhlYWRlclJhbmdlLCBsaW5lRW5kaW5ncygpLCAmZW5kaW5nTGluZSkpCisgICAgICAgICAgICBy
ZXN1bHQtPnNldFJhbmdlKHJhbmdlLnJlbGVhc2VOb25OdWxsKCkpOworICAgIH0KICAgICByZXR1
cm4gcmVzdWx0OwogfQogCi1SZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NSdWxl
PiBJbnNwZWN0b3JTdHlsZVNoZWV0OjpidWlsZE9iamVjdEZvclJ1bGUoQ1NTU3R5bGVSdWxlKiBy
dWxlKQorUmVmUHRyPFByb3RvY29sOjpDU1M6OkNTU1J1bGU+IEluc3BlY3RvclN0eWxlU2hlZXQ6
OmJ1aWxkT2JqZWN0Rm9yUnVsZShDU1NTdHlsZVJ1bGUqIHJ1bGUpCiB7CiAgICAgQ1NTU3R5bGVT
aGVldCogc3R5bGVTaGVldCA9IHBhZ2VTdHlsZVNoZWV0KCk7CiAgICAgaWYgKCFzdHlsZVNoZWV0
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIGludCBlbmRpbmdMaW5lID0gMDsKLSAg
ICBhdXRvIHJlc3VsdCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUnVsZTo6Y3JlYXRl
KCkKKyAgICBhdXRvIHJlc3VsdCA9IFByb3RvY29sOjpDU1M6OkNTU1J1bGU6OmNyZWF0ZSgpCiAg
ICAgICAgIC5zZXRTZWxlY3Rvckxpc3QoYnVpbGRPYmplY3RGb3JTZWxlY3Rvckxpc3QocnVsZSwg
ZW5kaW5nTGluZSkpCiAgICAgICAgIC5zZXRTb3VyY2VMaW5lKGVuZGluZ0xpbmUpCiAgICAgICAg
IC5zZXRPcmlnaW4obV9vcmlnaW4pCiAgICAgICAgIC5zZXRTdHlsZShidWlsZE9iamVjdEZvclN0
eWxlKCZydWxlLT5zdHlsZSgpKSkKICAgICAgICAgLnJlbGVhc2UoKTsKIAotICAgIGlmIChtX29y
aWdpbiA9PSBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW46OkF1dGhv
ciB8fCBtX29yaWdpbiA9PSBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRPcmln
aW46OlVzZXIpCisgICAgaWYgKG1fb3JpZ2luID09IFByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRP
cmlnaW46OkF1dGhvciB8fCBtX29yaWdpbiA9PSBQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0T3Jp
Z2luOjpVc2VyKQogICAgICAgICByZXN1bHQtPnNldFNvdXJjZVVSTChmaW5hbFVSTCgpKTsKIAog
ICAgIGlmIChjYW5CaW5kKCkpIHsKLSAgICAgICAgSW5zcGVjdG9yQ1NTSWQgaWQocnVsZUlkKHJ1
bGUpKTsKLSAgICAgICAgaWYgKCFpZC5pc0VtcHR5KCkpCi0gICAgICAgICAgICByZXN1bHQtPnNl
dFJ1bGVJZChpZC5hc1Byb3RvY29sVmFsdWU8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NS
dWxlSWQ+KCkpOworICAgICAgICBpZiAoYXV0byBydWxlSWQgPSB0aGlzLT5ydWxlSWQocnVsZSku
YXNQcm90b2NvbFZhbHVlPFByb3RvY29sOjpDU1M6OkNTU1J1bGVJZD4oKSkKKyAgICAgICAgICAg
IHJlc3VsdC0+c2V0UnVsZUlkKHJ1bGVJZC5yZWxlYXNlTm9uTnVsbCgpKTsKICAgICB9CiAKICAg
ICBhdXRvIGdyb3VwaW5nc1BheWxvYWQgPSBidWlsZEFycmF5Rm9yR3JvdXBpbmdzKCpydWxlKTsK
QEAgLTExNTEsNyArMTE2MCw3IEBAIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNT
U1J1bGU+IEluc3BlY3RvclN0eWxlU2hlZXQ6OmJ1aWxkT2JqZWN0Rm9yUnVsCiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIAotUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+
IEluc3BlY3RvclN0eWxlU2hlZXQ6OmJ1aWxkT2JqZWN0Rm9yU3R5bGUoQ1NTU3R5bGVEZWNsYXJh
dGlvbiogc3R5bGUpCitSZWY8UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+IEluc3BlY3RvclN0eWxl
U2hlZXQ6OmJ1aWxkT2JqZWN0Rm9yU3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUpCiB7
CiAgICAgUmVmUHRyPENTU1J1bGVTb3VyY2VEYXRhPiBzb3VyY2VEYXRhOwogICAgIGlmIChlbnN1
cmVQYXJzZWREYXRhUmVhZHkoKSkKQEAgLTExNTksMTMgKzExNjgsMTUgQEAgUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+IEluc3BlY3RvclN0eWxlU2hlZXQ6OmJ1aWxk
T2JqZWN0Rm9yU3QKIAogICAgIEluc3BlY3RvckNTU0lkIGlkID0gcnVsZU9yU3R5bGVJZChzdHls
ZSk7CiAgICAgaWYgKGlkLmlzRW1wdHkoKSkgewotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQ
cm90b2NvbDo6Q1NTOjpDU1NTdHlsZTo6Y3JlYXRlKCkKLSAgICAgICAgICAgIC5zZXRDc3NQcm9w
ZXJ0aWVzKEFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0eT46OmNy
ZWF0ZSgpKQotICAgICAgICAgICAgLnNldFNob3J0aGFuZEVudHJpZXMoQXJyYXlPZjxJbnNwZWN0
b3I6OlByb3RvY29sOjpDU1M6OlNob3J0aGFuZEVudHJ5Pjo6Y3JlYXRlKCkpCisgICAgICAgIHJl
dHVybiBQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZTo6Y3JlYXRlKCkKKyAgICAgICAgICAgIC5zZXRD
c3NQcm9wZXJ0aWVzKEFycmF5T2Y8UHJvdG9jb2w6OkNTUzo6Q1NTUHJvcGVydHk+OjpjcmVhdGUo
KSkKKyAgICAgICAgICAgIC5zZXRTaG9ydGhhbmRFbnRyaWVzKEFycmF5T2Y8UHJvdG9jb2w6OkNT
Uzo6U2hvcnRoYW5kRW50cnk+OjpjcmVhdGUoKSkKICAgICAgICAgICAgIC5yZWxlYXNlKCk7CiAg
ICAgfQorCiAgICAgUmVmUHRyPEluc3BlY3RvclN0eWxlPiBpbnNwZWN0b3JTdHlsZSA9IGluc3Bl
Y3RvclN0eWxlRm9ySWQoaWQpOwotICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6
OkNTU1N0eWxlPiByZXN1bHQgPSBpbnNwZWN0b3JTdHlsZS0+YnVpbGRPYmplY3RGb3JTdHlsZSgp
OworCisgICAgYXV0byByZXN1bHQgPSBpbnNwZWN0b3JTdHlsZS0+YnVpbGRPYmplY3RGb3JTdHls
ZSgpOwogCiAgICAgLy8gU3R5bGUgdGV4dCBjYW5ub3QgYmUgcmV0cmlldmVkIHdpdGhvdXQgc3R5
bGVzaGVldCwgc28gc2V0IGNzc1RleHQgaGVyZS4KICAgICBpZiAoc291cmNlRGF0YSkgewpAQCAt
MTI3NCw3ICsxMjg1LDcgQEAgYm9vbCBJbnNwZWN0b3JTdHlsZVNoZWV0OjpzdHlsZVNoZWV0TXV0
YXRlZCgpIGNvbnN0CiAKIGJvb2wgSW5zcGVjdG9yU3R5bGVTaGVldDo6ZW5zdXJlUGFyc2VkRGF0
YVJlYWR5KCkKIHsKLSAgICBib29sIGFsbG93UGFyc2VkRGF0YSA9IG1fb3JpZ2luID09IEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6SW5zcGVjdG9yIHx8ICFzdHls
ZVNoZWV0TXV0YXRlZCgpOworICAgIGJvb2wgYWxsb3dQYXJzZWREYXRhID0gbV9vcmlnaW4gPT0g
UHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6SW5zcGVjdG9yIHx8ICFzdHlsZVNoZWV0
TXV0YXRlZCgpOwogICAgIHJldHVybiBhbGxvd1BhcnNlZERhdGEgJiYgZW5zdXJlVGV4dCgpICYm
IGVuc3VyZVNvdXJjZURhdGEoKTsKIH0KIApAQCAtMTM3MSw3ICsxMzgyLDcgQEAgSW5zcGVjdG9y
Q1NTSWQgSW5zcGVjdG9yU3R5bGVTaGVldDo6cnVsZUlkKENTU1N0eWxlUnVsZSogcnVsZSkgY29u
c3QKIAogYm9vbCBJbnNwZWN0b3JTdHlsZVNoZWV0OjpvcmlnaW5hbFN0eWxlU2hlZXRUZXh0KFN0
cmluZyogcmVzdWx0KSBjb25zdAogewotICAgIGlmICghbV9wYWdlU3R5bGVTaGVldCB8fCBtX29y
aWdpbiA9PSBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW46OlVzZXJB
Z2VudCkKKyAgICBpZiAoIW1fcGFnZVN0eWxlU2hlZXQgfHwgbV9vcmlnaW4gPT0gUHJvdG9jb2w6
OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6VXNlckFnZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgcmV0dXJuIGlubGluZVN0eWxlU2hlZXRUZXh0KHJlc3VsdCkgfHwgcmVzb3VyY2VTdHls
ZVNoZWV0VGV4dChyZXN1bHQpIHx8IGV4dGVuc2lvblN0eWxlU2hlZXRUZXh0KHJlc3VsdCk7CiB9
CkBAIC0xNDE0LDkgKzE0MjUsOSBAQCBib29sIEluc3BlY3RvclN0eWxlU2hlZXQ6OmV4dGVuc2lv
blN0eWxlU2hlZXRUZXh0KFN0cmluZyogcmVzdWx0KSBjb25zdAogICAgIHJldHVybiB0cnVlOwog
fQogCi1SZWY8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1J1bGU+
PiBJbnNwZWN0b3JTdHlsZVNoZWV0OjpidWlsZEFycmF5Rm9yUnVsZUxpc3QoQ1NTUnVsZUxpc3Qq
IHJ1bGVMaXN0KQorUmVmPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkNTUzo6Q1NTUnVsZT4+IElu
c3BlY3RvclN0eWxlU2hlZXQ6OmJ1aWxkQXJyYXlGb3JSdWxlTGlzdChDU1NSdWxlTGlzdCogcnVs
ZUxpc3QpCiB7Ci0gICAgYXV0byByZXN1bHQgPSBKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkNTUzo6Q1NTUnVsZT46OmNyZWF0ZSgpOworICAgIGF1dG8gcmVzdWx0ID0gSlNPTjo6
QXJyYXlPZjxQcm90b2NvbDo6Q1NTOjpDU1NSdWxlPjo6Y3JlYXRlKCk7CiAgICAgaWYgKCFydWxl
TGlzdCkKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKIApAQCAtMTQyNCw4ICsxNDM1LDEwIEBAIFJl
ZjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUnVsZT4+IEluc3Bl
Y3RvclN0eWxlU2hlZXQ6OmJ1aWxkCiAgICAgQ1NTU3R5bGVSdWxlVmVjdG9yIHJ1bGVzOwogICAg
IGNvbGxlY3RGbGF0UnVsZXMoV1RGTW92ZShyZWZSdWxlTGlzdCksICZydWxlcyk7CiAKLSAgICBm
b3IgKGF1dG8mIHJ1bGUgOiBydWxlcykKLSAgICAgICAgcmVzdWx0LT5hZGRJdGVtKGJ1aWxkT2Jq
ZWN0Rm9yUnVsZShydWxlLmdldCgpKSk7CisgICAgZm9yIChhdXRvJiBydWxlIDogcnVsZXMpIHsK
KyAgICAgICAgaWYgKGF1dG8gcnVsZU9iamVjdCA9IGJ1aWxkT2JqZWN0Rm9yUnVsZShydWxlLmdl
dCgpKSkKKyAgICAgICAgICAgIHJlc3VsdC0+YWRkSXRlbShydWxlT2JqZWN0LnJlbGVhc2VOb25O
dWxsKCkpOworICAgIH0KIAogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC0xNDQ4LDEyICsxNDYx
LDEyIEBAIHZvaWQgSW5zcGVjdG9yU3R5bGVTaGVldDo6Y29sbGVjdEZsYXRSdWxlcyhSZWZQdHI8
Q1NTUnVsZUxpc3Q+JiYgcnVsZUxpc3QsIENTU1N0CiAgICAgfQogfQogCi1SZWY8SW5zcGVjdG9y
U3R5bGVTaGVldEZvcklubGluZVN0eWxlPiBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5
bGU6OmNyZWF0ZShJbnNwZWN0b3JQYWdlQWdlbnQqIHBhZ2VBZ2VudCwgY29uc3QgU3RyaW5nJiBp
ZCwgUmVmPFN0eWxlZEVsZW1lbnQ+JiYgZWxlbWVudCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NT
OjpTdHlsZVNoZWV0T3JpZ2luIG9yaWdpbiwgTGlzdGVuZXIqIGxpc3RlbmVyKQorUmVmPEluc3Bl
Y3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZT4gSW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGlu
ZVN0eWxlOjpjcmVhdGUoSW5zcGVjdG9yUGFnZUFnZW50KiBwYWdlQWdlbnQsIGNvbnN0IFN0cmlu
ZyYgaWQsIFJlZjxTdHlsZWRFbGVtZW50PiYmIGVsZW1lbnQsIFByb3RvY29sOjpDU1M6OlN0eWxl
U2hlZXRPcmlnaW4gb3JpZ2luLCBMaXN0ZW5lciogbGlzdGVuZXIpCiB7CiAgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgSW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlKHBhZ2VBZ2VudCwg
aWQsIFdURk1vdmUoZWxlbWVudCksIG9yaWdpbiwgbGlzdGVuZXIpKTsKIH0KIAotSW5zcGVjdG9y
U3R5bGVTaGVldEZvcklubGluZVN0eWxlOjpJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5
bGUoSW5zcGVjdG9yUGFnZUFnZW50KiBwYWdlQWdlbnQsIGNvbnN0IFN0cmluZyYgaWQsIFJlZjxT
dHlsZWRFbGVtZW50PiYmIGVsZW1lbnQsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U3R5bGVT
aGVldE9yaWdpbiBvcmlnaW4sIExpc3RlbmVyKiBsaXN0ZW5lcikKK0luc3BlY3RvclN0eWxlU2hl
ZXRGb3JJbmxpbmVTdHlsZTo6SW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlKEluc3Bl
Y3RvclBhZ2VBZ2VudCogcGFnZUFnZW50LCBjb25zdCBTdHJpbmcmIGlkLCBSZWY8U3R5bGVkRWxl
bWVudD4mJiBlbGVtZW50LCBQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luIG9yaWdpbiwg
TGlzdGVuZXIqIGxpc3RlbmVyKQogICAgIDogSW5zcGVjdG9yU3R5bGVTaGVldChwYWdlQWdlbnQs
IGlkLCBudWxscHRyLCBvcmlnaW4sIFN0cmluZygpLCBsaXN0ZW5lcikKICAgICAsIG1fZWxlbWVu
dChXVEZNb3ZlKGVsZW1lbnQpKQogICAgICwgbV9ydWxlU291cmNlRGF0YShudWxscHRyKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuaCBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmgKaW5kZXggNzNk
MzYxOGU1YTQ4YTM3NDU3NjI2ZGQ1NDhkY2U3ZTM2YjFkZTEzNS4uNzhmMTRkMjkxNmJhYTVjMzdl
MDEwOTM5MmYyMWVmNjZhNjU1Zjc2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvclN0eWxlU2hlZXQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yU3R5bGVTaGVldC5oCkBAIC00NSwxOCArNDUsMTkgQEAgY2xhc3MgRWxlbWVudDsK
IGNsYXNzIEluc3BlY3RvclBhZ2VBZ2VudDsKIGNsYXNzIEluc3BlY3RvclN0eWxlU2hlZXQ7CiAK
LXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCiBjbGFzcyBJbnNwZWN0b3JDU1NJZCB7CiBw
dWJsaWM6CiAgICAgSW5zcGVjdG9yQ1NTSWQoKSA9IGRlZmF1bHQ7CiAKICAgICBleHBsaWNpdCBJ
bnNwZWN0b3JDU1NJZChjb25zdCBKU09OOjpPYmplY3QmIHZhbHVlKQogICAgIHsKLSAgICAgICAg
aWYgKCF2YWx1ZS5nZXRTdHJpbmcoInN0eWxlU2hlZXRJZCJfcywgbV9zdHlsZVNoZWV0SWQpKQor
ICAgICAgICBtX3N0eWxlU2hlZXRJZCA9IHZhbHVlLmdldFN0cmluZygic3R5bGVTaGVldElkIl9z
KTsKKyAgICAgICAgaWYgKCFtX3N0eWxlU2hlZXRJZCkKICAgICAgICAgICAgIHJldHVybjsKIAot
ICAgICAgICBpZiAoIXZhbHVlLmdldEludGVnZXIoIm9yZGluYWwiX3MsIG1fb3JkaW5hbCkpCisg
ICAgICAgIGlmIChhdXRvIG9yZGluYWwgPSB2YWx1ZS5nZXRJbnRlZ2VyKCJvcmRpbmFsIl9zKSkK
KyAgICAgICAgICAgIG1fb3JkaW5hbCA9ICpvcmRpbmFsOworICAgICAgICBlbHNlCiAgICAgICAg
ICAgICBtX3N0eWxlU2hlZXRJZCA9IFN0cmluZygpOwogICAgIH0KIApAQCAtMTI2LDcgKzEyNyw3
IEBAIHB1YmxpYzoKICAgICB+SW5zcGVjdG9yU3R5bGUoKTsKIAogICAgIENTU1N0eWxlRGVjbGFy
YXRpb24mIGNzc1N0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdHlsZS5nZXQoKTsgfQotICAgIFJl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlPiBidWlsZE9iamVjdEZvclN0
eWxlKCkgY29uc3Q7CisgICAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+
IGJ1aWxkT2JqZWN0Rm9yU3R5bGUoKSBjb25zdDsKICAgICBSZWY8SlNPTjo6QXJyYXlPZjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU0NvbXB1dGVkU3R5bGVQcm9wZXJ0eT4+IGJ1aWxkQXJy
YXlGb3JDb21wdXRlZFN0eWxlKCkgY29uc3Q7CiAKICAgICBFeGNlcHRpb25PcjxTdHJpbmc+IHRl
eHQoKSBjb25zdDsKQEAgLTE3NSw3ICsxNzYsNyBAQCBwdWJsaWM6CiAgICAgUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGVTaGVldEJvZHk+IGJ1aWxkT2JqZWN0Rm9yU3R5
bGVTaGVldCgpOwogICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxl
U2hlZXRIZWFkZXI+IGJ1aWxkT2JqZWN0Rm9yU3R5bGVTaGVldEluZm8oKTsKICAgICBSZWZQdHI8
SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NSdWxlPiBidWlsZE9iamVjdEZvclJ1bGUoQ1NT
U3R5bGVSdWxlKik7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5
bGU+IGJ1aWxkT2JqZWN0Rm9yU3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiopOworICAgIFJlZjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlPiBidWlsZE9iamVjdEZvclN0eWxlKENT
U1N0eWxlRGVjbGFyYXRpb24qKTsKICAgICBFeGNlcHRpb25Pcjx2b2lkPiBzZXRTdHlsZVRleHQo
Y29uc3QgSW5zcGVjdG9yQ1NTSWQmLCBjb25zdCBTdHJpbmcmIHRleHQsIFN0cmluZyogb2xkVGV4
dCk7CiAKICAgICB2aXJ0dWFsIEV4Y2VwdGlvbk9yPFN0cmluZz4gdGV4dCgpIGNvbnN0OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1RpbWVsaW5lUmVjb3JkRmFjdG9yeS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvVGltZWxpbmVSZWNvcmRGYWN0b3J5LmNwcApp
bmRleCAzNjNkMTY4ZTgwNWVhM2Y4N2Q3YmM5ZDgyOWQ0NmRlNmNiZjUyYWFlLi5hMDcwMzM2Yjc1
NjFkYTg1ZWNiNWZmZjRjMTRiNjFiZmYzOTYyMTM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvVGltZWxpbmVSZWNvcmRGYWN0b3J5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvVGltZWxpbmVSZWNvcmRGYWN0b3J5LmNwcApAQCAtMTYxLDkgKzE2MSw5IEBA
IFJlZjxKU09OOjpPYmplY3Q+IFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3JlYXRlUGFpbnREYXRh
KGNvbnN0IEZsb2F0UXVhZCYgcXVhZCkKICAgICByZXR1cm4gZGF0YTsKIH0KIAotdm9pZCBUaW1l
bGluZVJlY29yZEZhY3Rvcnk6OmFwcGVuZExheW91dFJvb3QoSlNPTjo6T2JqZWN0KiBkYXRhLCBj
b25zdCBGbG9hdFF1YWQmIHF1YWQpCit2b2lkIFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6YXBwZW5k
TGF5b3V0Um9vdChKU09OOjpPYmplY3QmIGRhdGEsIGNvbnN0IEZsb2F0UXVhZCYgcXVhZCkKIHsK
LSAgICBkYXRhLT5zZXRBcnJheSgicm9vdCJfcywgY3JlYXRlUXVhZChxdWFkKSk7CisgICAgZGF0
YS5zZXRBcnJheSgicm9vdCJfcywgY3JlYXRlUXVhZChxdWFkKSk7CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9UaW1lbGlu
ZVJlY29yZEZhY3RvcnkuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9UaW1lbGluZVJlY29y
ZEZhY3RvcnkuaAppbmRleCA0OGY0MzBlOWJlZDkzZDFhZmQyYmEzNmU1OTU3ZTdlZjA2MThiM2Fh
Li5jYTVkYjQxMDg5OGRiOTNjZDBhMzVjMjYyNzkwOWMxZDQ5ZTFjMjYyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvVGltZWxpbmVSZWNvcmRGYWN0b3J5LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1RpbWVsaW5lUmVjb3JkRmFjdG9yeS5oCkBAIC01OSw3ICs1
OSw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPEpTT046Ok9iamVjdD4gY3JlYXRlT2JzZXJ2
ZXJDYWxsYmFja0RhdGEoY29uc3QgU3RyaW5nJiBjYWxsYmFja1R5cGUpOwogICAgIHN0YXRpYyBS
ZWY8SlNPTjo6T2JqZWN0PiBjcmVhdGVQYWludERhdGEoY29uc3QgRmxvYXRRdWFkJik7CiAKLSAg
ICBzdGF0aWMgdm9pZCBhcHBlbmRMYXlvdXRSb290KEpTT046Ok9iamVjdCogZGF0YSwgY29uc3Qg
RmxvYXRRdWFkJik7CisgICAgc3RhdGljIHZvaWQgYXBwZW5kTGF5b3V0Um9vdChKU09OOjpPYmpl
Y3QmIGRhdGEsIGNvbnN0IEZsb2F0UXVhZCYpOwogCiBwcml2YXRlOgogICAgIFRpbWVsaW5lUmVj
b3JkRmFjdG9yeSgpIHsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Fn
ZW50cy9JbnNwZWN0b3JBbmltYXRpb25BZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvYWdlbnRzL0luc3BlY3RvckFuaW1hdGlvbkFnZW50LmNwcAppbmRleCA3MTMyNWY1MjJkM2Ex
MjNhNTM0ZmM3ZmYzYTU4NGI1OGJjOTRmOTM2Li4wMjU3MTJiMDk0NjRlYzZiMTU0N2VjZjcwNjZl
MjBiZGZhYmY0MWNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRz
L0luc3BlY3RvckFuaW1hdGlvbkFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvYWdlbnRzL0luc3BlY3RvckFuaW1hdGlvbkFnZW50LmNwcApAQCAtNzIsNDUgKzcyLDQ1IEBA
IHN0YXRpYyBPcHRpb25hbDxkb3VibGU+IHByb3RvY29sVmFsdWVGb3JTZWNvbmRzKGNvbnN0IFNl
Y29uZHMmIHNlY29uZHMpCiAgICAgcmV0dXJuIHNlY29uZHMubWlsbGlzZWNvbmRzKCk7CiB9CiAK
LXN0YXRpYyBPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpBbmltYXRpb246OlBsYXliYWNr
RGlyZWN0aW9uPiBwcm90b2NvbFZhbHVlRm9yUGxheWJhY2tEaXJlY3Rpb24oUGxheWJhY2tEaXJl
Y3Rpb24gcGxheWJhY2tEaXJlY3Rpb24pCitzdGF0aWMgT3B0aW9uYWw8UHJvdG9jb2w6OkFuaW1h
dGlvbjo6UGxheWJhY2tEaXJlY3Rpb24+IHByb3RvY29sVmFsdWVGb3JQbGF5YmFja0RpcmVjdGlv
bihQbGF5YmFja0RpcmVjdGlvbiBwbGF5YmFja0RpcmVjdGlvbikKIHsKICAgICBzd2l0Y2ggKHBs
YXliYWNrRGlyZWN0aW9uKSB7CiAgICAgY2FzZSBQbGF5YmFja0RpcmVjdGlvbjo6Tm9ybWFsOgot
ICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6QW5pbWF0aW9uOjpQbGF5YmFja0Rp
cmVjdGlvbjo6Tm9ybWFsOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OkFuaW1hdGlvbjo6UGxh
eWJhY2tEaXJlY3Rpb246Ok5vcm1hbDsKICAgICBjYXNlIFBsYXliYWNrRGlyZWN0aW9uOjpSZXZl
cnNlOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6QW5pbWF0aW9uOjpQbGF5
YmFja0RpcmVjdGlvbjo6UmV2ZXJzZTsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpBbmltYXRp
b246OlBsYXliYWNrRGlyZWN0aW9uOjpSZXZlcnNlOwogICAgIGNhc2UgUGxheWJhY2tEaXJlY3Rp
b246OkFsdGVybmF0ZToKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFuaW1h
dGlvbjo6UGxheWJhY2tEaXJlY3Rpb246OkFsdGVybmF0ZTsKKyAgICAgICAgcmV0dXJuIFByb3Rv
Y29sOjpBbmltYXRpb246OlBsYXliYWNrRGlyZWN0aW9uOjpBbHRlcm5hdGU7CiAgICAgY2FzZSBQ
bGF5YmFja0RpcmVjdGlvbjo6QWx0ZXJuYXRlUmV2ZXJzZToKLSAgICAgICAgcmV0dXJuIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkFuaW1hdGlvbjo6UGxheWJhY2tEaXJlY3Rpb246OkFsdGVybmF0ZVJl
dmVyc2U7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6QW5pbWF0aW9uOjpQbGF5YmFja0RpcmVj
dGlvbjo6QWx0ZXJuYXRlUmV2ZXJzZTsKICAgICB9CiAKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQogCi1zdGF0aWMgT3B0aW9uYWw8SW5zcGVj
dG9yOjpQcm90b2NvbDo6QW5pbWF0aW9uOjpGaWxsTW9kZT4gcHJvdG9jb2xWYWx1ZUZvckZpbGxN
b2RlKEZpbGxNb2RlIGZpbGxNb2RlKQorc3RhdGljIE9wdGlvbmFsPFByb3RvY29sOjpBbmltYXRp
b246OkZpbGxNb2RlPiBwcm90b2NvbFZhbHVlRm9yRmlsbE1vZGUoRmlsbE1vZGUgZmlsbE1vZGUp
CiB7CiAgICAgc3dpdGNoIChmaWxsTW9kZSkgewogICAgIGNhc2UgRmlsbE1vZGU6Ok5vbmU6Ci0g
ICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpBbmltYXRpb246OkZpbGxNb2RlOjpO
b25lOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OkFuaW1hdGlvbjo6RmlsbE1vZGU6Ok5vbmU7
CiAgICAgY2FzZSBGaWxsTW9kZTo6Rm9yd2FyZHM6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6
OlByb3RvY29sOjpBbmltYXRpb246OkZpbGxNb2RlOjpGb3J3YXJkczsKKyAgICAgICAgcmV0dXJu
IFByb3RvY29sOjpBbmltYXRpb246OkZpbGxNb2RlOjpGb3J3YXJkczsKICAgICBjYXNlIEZpbGxN
b2RlOjpCYWNrd2FyZHM6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpBbmlt
YXRpb246OkZpbGxNb2RlOjpCYWNrd2FyZHM7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6QW5p
bWF0aW9uOjpGaWxsTW9kZTo6QmFja3dhcmRzOwogICAgIGNhc2UgRmlsbE1vZGU6OkJvdGg6Ci0g
ICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpBbmltYXRpb246OkZpbGxNb2RlOjpC
b3RoOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OkFuaW1hdGlvbjo6RmlsbE1vZGU6OkJvdGg7
CiAgICAgY2FzZSBGaWxsTW9kZTo6QXV0bzoKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkFuaW1hdGlvbjo6RmlsbE1vZGU6OkF1dG87CisgICAgICAgIHJldHVybiBQcm90b2Nv
bDo6QW5pbWF0aW9uOjpGaWxsTW9kZTo6QXV0bzsKICAgICB9CiAKICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQogCi1zdGF0aWMgUmVmPEpTT046
OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6QW5pbWF0aW9uOjpLZXlmcmFtZT4+IGJ1aWxk
T2JqZWN0Rm9yS2V5ZnJhbWVzKEtleWZyYW1lRWZmZWN0JiBrZXlmcmFtZUVmZmVjdCkKK3N0YXRp
YyBSZWY8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6QW5pbWF0aW9uOjpLZXlmcmFtZT4+IGJ1aWxk
T2JqZWN0Rm9yS2V5ZnJhbWVzKEtleWZyYW1lRWZmZWN0JiBrZXlmcmFtZUVmZmVjdCkKIHsKLSAg
ICBhdXRvIGtleWZyYW1lc1BheWxvYWQgPSBKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkFuaW1hdGlvbjo6S2V5ZnJhbWU+OjpjcmVhdGUoKTsKKyAgICBhdXRvIGtleWZyYW1lc1Bh
eWxvYWQgPSBKU09OOjpBcnJheU9mPFByb3RvY29sOjpBbmltYXRpb246OktleWZyYW1lPjo6Y3Jl
YXRlKCk7CiAKICAgICBjb25zdCBhdXRvJiBibGVuZGluZ0tleWZyYW1lcyA9IGtleWZyYW1lRWZm
ZWN0LmJsZW5kaW5nS2V5ZnJhbWVzKCk7CiAgICAgY29uc3QgYXV0byYgcGFyc2VkS2V5ZnJhbWVz
ID0ga2V5ZnJhbWVFZmZlY3QucGFyc2VkS2V5ZnJhbWVzKCk7CkBAIC0xMzAsNyArMTMwLDcgQEAg
c3RhdGljIFJlZjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFuaW1hdGlvbjo6
S2V5ZnJhbWU+PiBidWlsZE9iamVjdEYKICAgICAgICAgICAgIEFTU0VSVChibGVuZGluZ0tleWZy
YW1lLnN0eWxlKCkpOwogICAgICAgICAgICAgYXV0byYgc3R5bGUgPSAqYmxlbmRpbmdLZXlmcmFt
ZS5zdHlsZSgpOwogCi0gICAgICAgICAgICBhdXRvIGtleWZyYW1lUGF5bG9hZCA9IEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkFuaW1hdGlvbjo6S2V5ZnJhbWU6OmNyZWF0ZSgpCisgICAgICAgICAgICBh
dXRvIGtleWZyYW1lUGF5bG9hZCA9IFByb3RvY29sOjpBbmltYXRpb246OktleWZyYW1lOjpjcmVh
dGUoKQogICAgICAgICAgICAgICAgIC5zZXRPZmZzZXQoYmxlbmRpbmdLZXlmcmFtZS5rZXkoKSkK
ICAgICAgICAgICAgICAgICAucmVsZWFzZSgpOwogCkBAIC0xNjcsNyArMTY3LDcgQEAgc3RhdGlj
IFJlZjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFuaW1hdGlvbjo6S2V5ZnJh
bWU+PiBidWlsZE9iamVjdEYKICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIGZvciAo
Y29uc3QgYXV0byYgcGFyc2VkS2V5ZnJhbWUgOiBwYXJzZWRLZXlmcmFtZXMpIHsKLSAgICAgICAg
ICAgIGF1dG8ga2V5ZnJhbWVQYXlsb2FkID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QW5pbWF0aW9u
OjpLZXlmcmFtZTo6Y3JlYXRlKCkKKyAgICAgICAgICAgIGF1dG8ga2V5ZnJhbWVQYXlsb2FkID0g
UHJvdG9jb2w6OkFuaW1hdGlvbjo6S2V5ZnJhbWU6OmNyZWF0ZSgpCiAgICAgICAgICAgICAgICAg
LnNldE9mZnNldChwYXJzZWRLZXlmcmFtZS5jb21wdXRlZE9mZnNldCkKICAgICAgICAgICAgICAg
ICAucmVsZWFzZSgpOwogCkBAIC0xODYsOSArMTg2LDkgQEAgc3RhdGljIFJlZjxKU09OOjpBcnJh
eU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFuaW1hdGlvbjo6S2V5ZnJhbWU+PiBidWlsZE9iamVj
dEYKICAgICByZXR1cm4ga2V5ZnJhbWVzUGF5bG9hZDsKIH0KIAotc3RhdGljIFJlZjxJbnNwZWN0
b3I6OlByb3RvY29sOjpBbmltYXRpb246OkVmZmVjdD4gYnVpbGRPYmplY3RGb3JFZmZlY3QoQW5p
bWF0aW9uRWZmZWN0JiBlZmZlY3QpCitzdGF0aWMgUmVmPFByb3RvY29sOjpBbmltYXRpb246OkVm
ZmVjdD4gYnVpbGRPYmplY3RGb3JFZmZlY3QoQW5pbWF0aW9uRWZmZWN0JiBlZmZlY3QpCiB7Ci0g
ICAgYXV0byBlZmZlY3RQYXlsb2FkID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QW5pbWF0aW9uOjpF
ZmZlY3Q6OmNyZWF0ZSgpCisgICAgYXV0byBlZmZlY3RQYXlsb2FkID0gUHJvdG9jb2w6OkFuaW1h
dGlvbjo6RWZmZWN0OjpjcmVhdGUoKQogICAgICAgICAucmVsZWFzZSgpOwogCiAgICAgaWYgKGF1
dG8gc3RhcnREZWxheSA9IHByb3RvY29sVmFsdWVGb3JTZWNvbmRzKGVmZmVjdC5kZWxheSgpKSkK
QEAgLTIzOCwyMCArMjM4LDE3IEBAIHZvaWQgSW5zcGVjdG9yQW5pbWF0aW9uQWdlbnQ6OmRpZENy
ZWF0ZUZyb250ZW5kQW5kQmFja2VuZChGcm9udGVuZFJvdXRlciosIEJhY2tlCiAKIHZvaWQgSW5z
cGVjdG9yQW5pbWF0aW9uQWdlbnQ6OndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKERpc2Nv
bm5lY3RSZWFzb24pCiB7Ci0gICAgRXJyb3JTdHJpbmcgaWdub3JlZDsKLSAgICBzdG9wVHJhY2tp
bmcoaWdub3JlZCk7Ci0gICAgZGlzYWJsZShpZ25vcmVkKTsKKyAgICBzdG9wVHJhY2tpbmcoKTsK
KyAgICBkaXNhYmxlKCk7CiAKICAgICBBU1NFUlQobV9pbnN0cnVtZW50aW5nQWdlbnRzLnBlcnNp
c3RlbnRBbmltYXRpb25BZ2VudCgpID09IHRoaXMpOwogICAgIG1faW5zdHJ1bWVudGluZ0FnZW50
cy5zZXRQZXJzaXN0ZW50QW5pbWF0aW9uQWdlbnQobnVsbHB0cik7CiB9CiAKLXZvaWQgSW5zcGVj
dG9yQW5pbWF0aW9uQWdlbnQ6OmVuYWJsZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCitQcm90
b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JBbmltYXRpb25BZ2VudDo6ZW5hYmxl
KCkKIHsKLSAgICBpZiAobV9pbnN0cnVtZW50aW5nQWdlbnRzLmVuYWJsZWRBbmltYXRpb25BZ2Vu
dCgpID09IHRoaXMpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiQW5pbWF0aW9uIGRvbWFpbiBh
bHJlYWR5IGVuYWJsZWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKG1faW5z
dHJ1bWVudGluZ0FnZW50cy5lbmFibGVkQW5pbWF0aW9uQWdlbnQoKSA9PSB0aGlzKQorICAgICAg
ICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkFuaW1hdGlvbiBkb21haW4gYWxyZWFkeSBlbmFibGVk
Il9zKTsKIAogICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy5zZXRFbmFibGVkQW5pbWF0aW9uQWdl
bnQodGhpcyk7CiAKQEAgLTI3MCw0OSArMjY3LDUxIEBAIHZvaWQgSW5zcGVjdG9yQW5pbWF0aW9u
QWdlbnQ6OmVuYWJsZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCiAgICAgICAgICAgICAgICAg
YmluZEFuaW1hdGlvbigqYW5pbWF0aW9uLCBmYWxzZSk7CiAgICAgICAgIH0KICAgICB9CisKKyAg
ICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckFuaW1hdGlvbkFnZW50OjpkaXNhYmxl
KEVycm9yU3RyaW5nJikKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckFu
aW1hdGlvbkFnZW50OjpkaXNhYmxlKCkKIHsKICAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMuc2V0
RW5hYmxlZEFuaW1hdGlvbkFnZW50KG51bGxwdHIpOwogCiAgICAgcmVzZXQoKTsKKworICAgIHJl
dHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yQW5pbWF0aW9uQWdlbnQ6OnJlcXVlc3RFZmZl
Y3RUYXJnZXQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGFuaW1hdGlv
bklkLCBpbnQqIG5vZGVJZCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPFByb3RvY29sOjpET006
Ok5vZGVJZD4gSW5zcGVjdG9yQW5pbWF0aW9uQWdlbnQ6OnJlcXVlc3RFZmZlY3RUYXJnZXQoY29u
c3QgUHJvdG9jb2w6OkFuaW1hdGlvbjo6QW5pbWF0aW9uSWQmIGFuaW1hdGlvbklkKQogeworICAg
IFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIGF1dG8qIGFuaW1hdGlv
biA9IGFzc2VydEFuaW1hdGlvbihlcnJvclN0cmluZywgYW5pbWF0aW9uSWQpOwogICAgIGlmICgh
YW5pbWF0aW9uKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3Rl
ZChlcnJvclN0cmluZyk7CiAKICAgICBhdXRvKiBkb21BZ2VudCA9IG1faW5zdHJ1bWVudGluZ0Fn
ZW50cy5wZXJzaXN0ZW50RE9NQWdlbnQoKTsKLSAgICBpZiAoIWRvbUFnZW50KSB7Ci0gICAgICAg
IGVycm9yU3RyaW5nID0gIkRPTSBkb21haW4gbXVzdCBiZSBlbmFibGVkIl9zOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQorICAgIGlmICghZG9tQWdlbnQpCisgICAgICAgIHJldHVybiBtYWtlVW5l
eHBlY3RlZCgiRE9NIGRvbWFpbiBtdXN0IGJlIGVuYWJsZWQiX3MpOwogCiAgICAgYXV0byogZWZm
ZWN0ID0gYW5pbWF0aW9uLT5lZmZlY3QoKTsKLSAgICBpZiAoIWlzPEtleWZyYW1lRWZmZWN0Pihl
ZmZlY3QpKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIkFuaW1hdGlvbiBmb3IgZ2l2ZW4gYW5p
bWF0aW9uSWQgZG9lcyBub3QgaGF2ZSBhbiBlZmZlY3QiX3M7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9CisgICAgaWYgKCFpczxLZXlmcmFtZUVmZmVjdD4oZWZmZWN0KSkKKyAgICAgICAgcmV0dXJu
IG1ha2VVbmV4cGVjdGVkKCJBbmltYXRpb24gZm9yIGdpdmVuIGFuaW1hdGlvbklkIGRvZXMgbm90
IGhhdmUgYW4gZWZmZWN0Il9zKTsKIAogICAgIGF1dG8mIGtleWZyYW1lRWZmZWN0ID0gZG93bmNh
c3Q8S2V5ZnJhbWVFZmZlY3Q+KCplZmZlY3QpOwogCiAgICAgYXV0byogdGFyZ2V0ID0ga2V5ZnJh
bWVFZmZlY3QudGFyZ2V0RWxlbWVudE9yUHNldWRvRWxlbWVudCgpOwotICAgIGlmICghdGFyZ2V0
KSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIkFuaW1hdGlvbiBmb3IgZ2l2ZW4gYW5pbWF0aW9u
SWQgZG9lcyBub3QgaGF2ZSBhIHRhcmdldCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAg
ICBpZiAoIXRhcmdldCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJBbmltYXRpb24g
Zm9yIGdpdmVuIGFuaW1hdGlvbklkIGRvZXMgbm90IGhhdmUgYSB0YXJnZXQiX3MpOwogCi0gICAg
Km5vZGVJZCA9IGRvbUFnZW50LT5wdXNoTm9kZVBhdGhUb0Zyb250ZW5kKGVycm9yU3RyaW5nLCB0
YXJnZXQpOworICAgIHJldHVybiBkb21BZ2VudC0+cHVzaE5vZGVQYXRoVG9Gcm9udGVuZChlcnJv
clN0cmluZywgdGFyZ2V0KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JBbmltYXRpb25BZ2VudDo6cmVz
b2x2ZUFuaW1hdGlvbihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgYW5p
bWF0aW9uSWQsIGNvbnN0IFN0cmluZyogb2JqZWN0R3JvdXAsIFJlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiByZXN1bHQpCitQcm90b2NvbDo6RXJyb3JT
dHJpbmdPcjxSZWY8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4+IEluc3BlY3RvckFu
aW1hdGlvbkFnZW50OjpyZXNvbHZlQW5pbWF0aW9uKGNvbnN0IFByb3RvY29sOjpBbmltYXRpb246
OkFuaW1hdGlvbklkJiBhbmltYXRpb25JZCwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCkKIHsK
KyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBhdXRvKiBhbmlt
YXRpb24gPSBhc3NlcnRBbmltYXRpb24oZXJyb3JTdHJpbmcsIGFuaW1hdGlvbklkKTsKICAgICBp
ZiAoIWFuaW1hdGlvbikKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoZXJyb3JTdHJpbmcpOwogCiAgICAgYXV0byogc3RhdGUgPSBhbmltYXRpb24tPnNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKS0+ZXhlY1N0YXRlKCk7CiAgICAgYXV0byBpbmplY3RlZFNjcmlw
dCA9IG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmluamVjdGVkU2NyaXB0Rm9yKHN0YXRlKTsKQEAg
LTMyOCwzOCArMzI3LDQyIEBAIHZvaWQgSW5zcGVjdG9yQW5pbWF0aW9uQWdlbnQ6OnJlc29sdmVB
bmltYXRpb24oRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTCiAKICAgICBpZiAoIXZh
bHVlKSB7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBlcnJvclN0cmlu
ZyA9ICJJbnRlcm5hbCBlcnJvcjogdW5rbm93biBBbmltYXRpb24gZm9yIGdpdmVuIGFuaW1hdGlv
bklkIl9zOwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgi
SW50ZXJuYWwgZXJyb3I6IHVua25vd24gQW5pbWF0aW9uIGZvciBnaXZlbiBhbmltYXRpb25JZCJf
cyk7CiAgICAgfQogCi0gICAgU3RyaW5nIG9iamVjdEdyb3VwTmFtZSA9IG9iamVjdEdyb3VwID8g
Km9iamVjdEdyb3VwIDogU3RyaW5nKCk7Ci0gICAgcmVzdWx0ID0gaW5qZWN0ZWRTY3JpcHQud3Jh
cE9iamVjdCh2YWx1ZSwgb2JqZWN0R3JvdXBOYW1lKTsKKyAgICBhdXRvIG9iamVjdCA9IGluamVj
dGVkU2NyaXB0LndyYXBPYmplY3QodmFsdWUsIG9iamVjdEdyb3VwKTsKKyAgICBpZiAoIW9iamVj
dCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJJbnRlcm5hbCBlcnJvcjogdW5hYmxl
IHRvIGNhc3QgQW5pbWF0aW9uIik7CisKKyAgICByZXR1cm4gb2JqZWN0LnJlbGVhc2VOb25OdWxs
KCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQW5pbWF0aW9uQWdlbnQ6OnN0YXJ0VHJhY2tpbmcoRXJy
b3JTdHJpbmcmIGVycm9yU3RyaW5nKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5z
cGVjdG9yQW5pbWF0aW9uQWdlbnQ6OnN0YXJ0VHJhY2tpbmcoKQogewotICAgIGlmIChtX2luc3Ry
dW1lbnRpbmdBZ2VudHMudHJhY2tpbmdBbmltYXRpb25BZ2VudCgpID09IHRoaXMpIHsKLSAgICAg
ICAgZXJyb3JTdHJpbmcgPSAiQW5pbWF0aW9uIGRvbWFpbiBhbHJlYWR5IHRyYWNraW5nIl9zOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmIChtX2luc3RydW1lbnRpbmdBZ2VudHMudHJh
Y2tpbmdBbmltYXRpb25BZ2VudCgpID09IHRoaXMpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBl
Y3RlZCgiQW5pbWF0aW9uIGRvbWFpbiBhbHJlYWR5IHRyYWNraW5nIl9zKTsKIAogICAgIG1faW5z
dHJ1bWVudGluZ0FnZW50cy5zZXRUcmFja2luZ0FuaW1hdGlvbkFnZW50KHRoaXMpOwogCiAgICAg
QVNTRVJUKG1fdHJhY2tlZERlY2xhcmF0aXZlQW5pbWF0aW9uRGF0YS5pc0VtcHR5KCkpOwogCiAg
ICAgbV9mcm9udGVuZERpc3BhdGNoZXItPnRyYWNraW5nU3RhcnQobV9lbnZpcm9ubWVudC5leGVj
dXRpb25TdG9wd2F0Y2goKS5lbGFwc2VkVGltZSgpLnNlY29uZHMoKSk7CisKKyAgICByZXR1cm4g
eyB9OwogfQogCi12b2lkIEluc3BlY3RvckFuaW1hdGlvbkFnZW50OjpzdG9wVHJhY2tpbmcoRXJy
b3JTdHJpbmcmKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yQW5pbWF0
aW9uQWdlbnQ6OnN0b3BUcmFja2luZygpCiB7CiAgICAgaWYgKG1faW5zdHJ1bWVudGluZ0FnZW50
cy50cmFja2luZ0FuaW1hdGlvbkFnZW50KCkgIT0gdGhpcykKLSAgICAgICAgcmV0dXJuOworICAg
ICAgICByZXR1cm4geyB9OwogCiAgICAgbV9pbnN0cnVtZW50aW5nQWdlbnRzLnNldFRyYWNraW5n
QW5pbWF0aW9uQWdlbnQobnVsbHB0cik7CiAKICAgICBtX3RyYWNrZWREZWNsYXJhdGl2ZUFuaW1h
dGlvbkRhdGEuY2xlYXIoKTsKIAogICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT50cmFja2luZ0Nv
bXBsZXRlKG1fZW52aXJvbm1lbnQuZXhlY3V0aW9uU3RvcHdhdGNoKCkuZWxhcHNlZFRpbWUoKS5z
ZWNvbmRzKCkpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAogc3RhdGljIGJvb2wgaXNEZWxheWVk
KENvbXB1dGVkRWZmZWN0VGltaW5nJiBjb21wdXRlZFRpbWluZykKQEAgLTM4MCwzMSArMzgzLDMx
IEBAIHZvaWQgSW5zcGVjdG9yQW5pbWF0aW9uQWdlbnQ6OndpbGxBcHBseUtleWZyYW1lRWZmZWN0
KEVsZW1lbnQmIHRhcmdldCwgS2V5ZnJhbWVFCiAgICAgfSk7CiAgICAgYXV0byYgdHJhY2tpbmdE
YXRhID0gZW5zdXJlUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKIAotICAgIE9wdGlvbmFsPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkFuaW1hdGlvbjo6QW5pbWF0aW9uU3RhdGU+IGFuaW1hdGlvbkFuaW1h
dGlvblN0YXRlOworICAgIE9wdGlvbmFsPFByb3RvY29sOjpBbmltYXRpb246OkFuaW1hdGlvblN0
YXRlPiBhbmltYXRpb25BbmltYXRpb25TdGF0ZTsKIAogICAgIGlmICgoZW5zdXJlUmVzdWx0Lmlz
TmV3RW50cnkgfHwgIWlzRGVsYXllZCh0cmFja2luZ0RhdGEubGFzdENvbXB1dGVkVGltaW5nKSkg
JiYgaXNEZWxheWVkKGNvbXB1dGVkVGltaW5nKSkKLSAgICAgICAgYW5pbWF0aW9uQW5pbWF0aW9u
U3RhdGUgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBbmltYXRpb246OkFuaW1hdGlvblN0YXRlOjpE
ZWxheWVkOworICAgICAgICBhbmltYXRpb25BbmltYXRpb25TdGF0ZSA9IFByb3RvY29sOjpBbmlt
YXRpb246OkFuaW1hdGlvblN0YXRlOjpEZWxheWVkOwogICAgIGVsc2UgaWYgKGVuc3VyZVJlc3Vs
dC5pc05ld0VudHJ5IHx8IHRyYWNraW5nRGF0YS5sYXN0Q29tcHV0ZWRUaW1pbmcucGhhc2UgIT0g
Y29tcHV0ZWRUaW1pbmcucGhhc2UpIHsKICAgICAgICAgc3dpdGNoIChjb21wdXRlZFRpbWluZy5w
aGFzZSkgewogICAgICAgICBjYXNlIEFuaW1hdGlvbkVmZmVjdFBoYXNlOjpCZWZvcmU6Ci0gICAg
ICAgICAgICBhbmltYXRpb25BbmltYXRpb25TdGF0ZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFu
aW1hdGlvbjo6QW5pbWF0aW9uU3RhdGU6OlJlYWR5OworICAgICAgICAgICAgYW5pbWF0aW9uQW5p
bWF0aW9uU3RhdGUgPSBQcm90b2NvbDo6QW5pbWF0aW9uOjpBbmltYXRpb25TdGF0ZTo6UmVhZHk7
CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIEFuaW1hdGlvbkVmZmVjdFBoYXNl
OjpBY3RpdmU6Ci0gICAgICAgICAgICBhbmltYXRpb25BbmltYXRpb25TdGF0ZSA9IEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkFuaW1hdGlvbjo6QW5pbWF0aW9uU3RhdGU6OkFjdGl2ZTsKKyAgICAgICAg
ICAgIGFuaW1hdGlvbkFuaW1hdGlvblN0YXRlID0gUHJvdG9jb2w6OkFuaW1hdGlvbjo6QW5pbWF0
aW9uU3RhdGU6OkFjdGl2ZTsKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgQW5p
bWF0aW9uRWZmZWN0UGhhc2U6OkFmdGVyOgotICAgICAgICAgICAgYW5pbWF0aW9uQW5pbWF0aW9u
U3RhdGUgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBbmltYXRpb246OkFuaW1hdGlvblN0YXRlOjpE
b25lOworICAgICAgICAgICAgYW5pbWF0aW9uQW5pbWF0aW9uU3RhdGUgPSBQcm90b2NvbDo6QW5p
bWF0aW9uOjpBbmltYXRpb25TdGF0ZTo6RG9uZTsKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAg
ICAgIGNhc2UgQW5pbWF0aW9uRWZmZWN0UGhhc2U6OklkbGU6Ci0gICAgICAgICAgICBhbmltYXRp
b25BbmltYXRpb25TdGF0ZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFuaW1hdGlvbjo6QW5pbWF0
aW9uU3RhdGU6OkNhbmNlbGVkOworICAgICAgICAgICAgYW5pbWF0aW9uQW5pbWF0aW9uU3RhdGUg
PSBQcm90b2NvbDo6QW5pbWF0aW9uOjpBbmltYXRpb25TdGF0ZTo6Q2FuY2VsZWQ7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAodHJhY2tpbmdEYXRhLmxhc3RD
b21wdXRlZFRpbWluZy5jdXJyZW50SXRlcmF0aW9uICE9IGNvbXB1dGVkVGltaW5nLmN1cnJlbnRJ
dGVyYXRpb24pIHsKICAgICAgICAgLy8gSXRlcmF0aW9ucyBhcmUgcmVwcmVzZW50ZWQgYnkgc2Vx
dWVudGlhbCAiYWN0aXZlIiBzdGF0ZSBldmVudHMuCi0gICAgICAgIGFuaW1hdGlvbkFuaW1hdGlv
blN0YXRlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QW5pbWF0aW9uOjpBbmltYXRpb25TdGF0ZTo6
QWN0aXZlOworICAgICAgICBhbmltYXRpb25BbmltYXRpb25TdGF0ZSA9IFByb3RvY29sOjpBbmlt
YXRpb246OkFuaW1hdGlvblN0YXRlOjpBY3RpdmU7CiAgICAgfQogCiAgICAgdHJhY2tpbmdEYXRh
Lmxhc3RDb21wdXRlZFRpbWluZyA9IGNvbXB1dGVkVGltaW5nOwpAQCAtNDEyLDcgKzQxNSw3IEBA
IHZvaWQgSW5zcGVjdG9yQW5pbWF0aW9uQWdlbnQ6OndpbGxBcHBseUtleWZyYW1lRWZmZWN0KEVs
ZW1lbnQmIHRhcmdldCwgS2V5ZnJhbWVFCiAgICAgaWYgKCFhbmltYXRpb25BbmltYXRpb25TdGF0
ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byBldmVudCA9IEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkFuaW1hdGlvbjo6VHJhY2tpbmdVcGRhdGU6OmNyZWF0ZSgpCisgICAgYXV0byBldmVudCA9
IFByb3RvY29sOjpBbmltYXRpb246OlRyYWNraW5nVXBkYXRlOjpjcmVhdGUoKQogICAgICAgICAu
c2V0VHJhY2tpbmdBbmltYXRpb25JZCh0cmFja2luZ0RhdGEudHJhY2tpbmdBbmltYXRpb25JZCkK
ICAgICAgICAgLnNldEFuaW1hdGlvblN0YXRlKGFuaW1hdGlvbkFuaW1hdGlvblN0YXRlLnZhbHVl
KCkpCiAgICAgICAgIC5yZWxlYXNlKCk7CkBAIC00NDEsOCArNDQ0LDcgQEAgdm9pZCBJbnNwZWN0
b3JBbmltYXRpb25BZ2VudDo6ZGlkQ2hhbmdlV2ViQW5pbWF0aW9uTmFtZShXZWJBbmltYXRpb24m
IGFuaW1hdGlvbikKICAgICBpZiAoYW5pbWF0aW9uSWQuaXNFbXB0eSgpKQogICAgICAgICByZXR1
cm47CiAKLSAgICBhdXRvIG5hbWUgPSBhbmltYXRpb24uaWQoKTsKLSAgICBtX2Zyb250ZW5kRGlz
cGF0Y2hlci0+bmFtZUNoYW5nZWQoYW5pbWF0aW9uSWQsICFuYW1lLmlzRW1wdHkoKSA/ICZuYW1l
IDogbnVsbHB0cik7CisgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPm5hbWVDaGFuZ2VkKGFuaW1h
dGlvbklkLCBhbmltYXRpb24uaWQoKSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQW5pbWF0aW9uQWdl
bnQ6OmRpZFNldFdlYkFuaW1hdGlvbkVmZmVjdChXZWJBbmltYXRpb24mIGFuaW1hdGlvbikKQEAg
LTUyNSw3ICs1MjcsNyBAQCBTdHJpbmcgSW5zcGVjdG9yQW5pbWF0aW9uQWdlbnQ6OmZpbmRBbmlt
YXRpb25JZChXZWJBbmltYXRpb24mIGFuaW1hdGlvbikKICAgICByZXR1cm4gbnVsbFN0cmluZygp
OwogfQogCi1XZWJBbmltYXRpb24qIEluc3BlY3RvckFuaW1hdGlvbkFnZW50Ojphc3NlcnRBbmlt
YXRpb24oRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGFuaW1hdGlvbklk
KQorV2ViQW5pbWF0aW9uKiBJbnNwZWN0b3JBbmltYXRpb25BZ2VudDo6YXNzZXJ0QW5pbWF0aW9u
KFByb3RvY29sOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgYW5pbWF0
aW9uSWQpCiB7CiAgICAgYXV0byogYW5pbWF0aW9uID0gbV9hbmltYXRpb25JZE1hcC5nZXQoYW5p
bWF0aW9uSWQpOwogICAgIGlmICghYW5pbWF0aW9uKQpAQCAtNTM4LDcgKzU0MCw3IEBAIHZvaWQg
SW5zcGVjdG9yQW5pbWF0aW9uQWdlbnQ6OmJpbmRBbmltYXRpb24oV2ViQW5pbWF0aW9uJiBhbmlt
YXRpb24sIGJvb2wgY2FwdHVyCiAgICAgYXV0byBhbmltYXRpb25JZCA9IG1ha2VTdHJpbmcoImFu
aW1hdGlvbjoiICsgSWRlbnRpZmllcnNGYWN0b3J5OjpjcmVhdGVJZGVudGlmaWVyKCkpOwogICAg
IG1fYW5pbWF0aW9uSWRNYXAuc2V0KGFuaW1hdGlvbklkLCAmYW5pbWF0aW9uKTsKIAotICAgIGF1
dG8gYW5pbWF0aW9uUGF5bG9hZCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFuaW1hdGlvbjo6QW5p
bWF0aW9uOjpjcmVhdGUoKQorICAgIGF1dG8gYW5pbWF0aW9uUGF5bG9hZCA9IFByb3RvY29sOjpB
bmltYXRpb246OkFuaW1hdGlvbjo6Y3JlYXRlKCkKICAgICAgICAgLnNldEFuaW1hdGlvbklkKGFu
aW1hdGlvbklkKQogICAgICAgICAucmVsZWFzZSgpOwogCkBAIC02MDMsOSArNjA1LDkgQEAgdm9p
ZCBJbnNwZWN0b3JBbmltYXRpb25BZ2VudDo6c3RvcFRyYWNraW5nRGVjbGFyYXRpdmVBbmltYXRp
b24oRGVjbGFyYXRpdmVBbmltYXQKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKGl0LT52YWx1
ZS5sYXN0Q29tcHV0ZWRUaW1pbmcucGhhc2UgIT0gQW5pbWF0aW9uRWZmZWN0UGhhc2U6OkFmdGVy
ICYmIGl0LT52YWx1ZS5sYXN0Q29tcHV0ZWRUaW1pbmcucGhhc2UgIT0gQW5pbWF0aW9uRWZmZWN0
UGhhc2U6OklkbGUpIHsKLSAgICAgICAgYXV0byBldmVudCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkFuaW1hdGlvbjo6VHJhY2tpbmdVcGRhdGU6OmNyZWF0ZSgpCisgICAgICAgIGF1dG8gZXZlbnQg
PSBQcm90b2NvbDo6QW5pbWF0aW9uOjpUcmFja2luZ1VwZGF0ZTo6Y3JlYXRlKCkKICAgICAgICAg
ICAgIC5zZXRUcmFja2luZ0FuaW1hdGlvbklkKGl0LT52YWx1ZS50cmFja2luZ0FuaW1hdGlvbklk
KQotICAgICAgICAgICAgLnNldEFuaW1hdGlvblN0YXRlKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFu
aW1hdGlvbjo6QW5pbWF0aW9uU3RhdGU6OkNhbmNlbGVkKQorICAgICAgICAgICAgLnNldEFuaW1h
dGlvblN0YXRlKFByb3RvY29sOjpBbmltYXRpb246OkFuaW1hdGlvblN0YXRlOjpDYW5jZWxlZCkK
ICAgICAgICAgICAgIC5yZWxlYXNlKCk7CiAgICAgICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT50
cmFja2luZ1VwZGF0ZShtX2Vudmlyb25tZW50LmV4ZWN1dGlvblN0b3B3YXRjaCgpLmVsYXBzZWRU
aW1lKCkuc2Vjb25kcygpLCBXVEZNb3ZlKGV2ZW50KSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBbmltYXRpb25BZ2VudC5oIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBbmltYXRpb25BZ2VudC5o
CmluZGV4IDhiNTExNjI4Yzk3YTIyMmE4ZjlhY2Q4ZDNlNWIyMDJhOGRiYjZiZWMuLjA2NGFjNDA2
M2MzMDlmZGI0MWM3MWJmY2Y2Y2JkOWVhNjRlZDkzMTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQW5pbWF0aW9uQWdlbnQuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckFuaW1hdGlvbkFnZW50LmgKQEAg
LTQ0LDI2ICs0NCwyNCBAQCBjbGFzcyBLZXlmcmFtZUVmZmVjdDsKIGNsYXNzIFBhZ2U7CiBjbGFz
cyBXZWJBbmltYXRpb247CiAKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCiBjbGFzcyBJ
bnNwZWN0b3JBbmltYXRpb25BZ2VudCBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3JBZ2VudEJhc2Us
IHB1YmxpYyBJbnNwZWN0b3I6OkFuaW1hdGlvbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7CiAg
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW5zcGVjdG9yQW5pbWF0aW9uQWdlbnQpOwogICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIEluc3BlY3RvckFuaW1hdGlvbkFn
ZW50KFBhZ2VBZ2VudENvbnRleHQmKTsKLSAgICB+SW5zcGVjdG9yQW5pbWF0aW9uQWdlbnQoKSBv
dmVycmlkZTsKKyAgICB+SW5zcGVjdG9yQW5pbWF0aW9uQWdlbnQoKTsKIAogICAgIC8vIEluc3Bl
Y3RvckFnZW50QmFzZQotICAgIHZvaWQgZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEluc3Bl
Y3Rvcjo6RnJvbnRlbmRSb3V0ZXIqLCBJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyKikgb3Zl
cnJpZGU7Ci0gICAgdm9pZCB3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6
OkRpc2Nvbm5lY3RSZWFzb24pIG92ZXJyaWRlOworICAgIHZvaWQgZGlkQ3JlYXRlRnJvbnRlbmRB
bmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRSb3V0ZXIqLCBJbnNwZWN0b3I6OkJhY2tlbmRE
aXNwYXRjaGVyKik7CisgICAgdm9pZCB3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJbnNw
ZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24pOwogCiAgICAgLy8gQW5pbWF0aW9uQmFja2VuZERpc3Bh
dGNoZXJIYW5kbGVyCi0gICAgdm9pZCBlbmFibGUoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKLSAg
ICB2b2lkIGRpc2FibGUoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2b2lkIHJlcXVlc3RF
ZmZlY3RUYXJnZXQoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGFuaW1hdGlvbklkLCBpbnQq
IG5vZGVJZCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZXNvbHZlQW5pbWF0aW9uKEVycm9yU3RyaW5n
JiwgY29uc3QgU3RyaW5nJiBhbmltYXRpb25JZCwgY29uc3QgU3RyaW5nKiBvYmplY3RHcm91cCwg
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mKSBvdmVy
cmlkZTsKLSAgICB2b2lkIHN0YXJ0VHJhY2tpbmcoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKLSAg
ICB2b2lkIHN0b3BUcmFja2luZyhFcnJvclN0cmluZyYpIG92ZXJyaWRlOworICAgIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZW5hYmxlKCk7CisgICAgSW5zcGVjdG9y
OjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBkaXNhYmxlKCk7CisgICAgSW5zcGVjdG9y
OjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJ
ZD4gcmVxdWVzdEVmZmVjdFRhcmdldChjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBbmltYXRp
b246OkFuaW1hdGlvbklkJik7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdP
cjxSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0Pj4gcmVzb2x2
ZUFuaW1hdGlvbihjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBbmltYXRpb246OkFuaW1hdGlv
bklkJiwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzdGFydFRyYWNraW5nKCk7CisgICAgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzdG9wVHJhY2tpbmcoKTsKIAogICAgIC8vIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbgogICAgIHZvaWQgd2lsbEFwcGx5S2V5ZnJhbWVFZmZlY3Qo
RWxlbWVudCYsIEtleWZyYW1lRWZmZWN0JiwgQ29tcHV0ZWRFZmZlY3RUaW1pbmcpOwpAQCAtNzcs
NyArNzUsNyBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgU3RyaW5nIGZpbmRBbmltYXRpb25J
ZChXZWJBbmltYXRpb24mKTsKLSAgICBXZWJBbmltYXRpb24qIGFzc2VydEFuaW1hdGlvbihFcnJv
clN0cmluZyYsIGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uSWQpOworICAgIFdlYkFuaW1hdGlvbiog
YXNzZXJ0QW5pbWF0aW9uKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nJiwgY29uc3Qg
U3RyaW5nJiBhbmltYXRpb25JZCk7CiAgICAgdm9pZCBiaW5kQW5pbWF0aW9uKFdlYkFuaW1hdGlv
biYsIGJvb2wgY2FwdHVyZUJhY2t0cmFjZSk7CiAgICAgdm9pZCB1bmJpbmRBbmltYXRpb24oY29u
c3QgU3RyaW5nJiBhbmltYXRpb25JZCk7CiAgICAgdm9pZCBhbmltYXRpb25EZXN0cm95ZWRUaW1l
ckZpcmVkKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0lu
c3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvYWdlbnRzL0luc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5jcHAKaW5kZXggOTEyOTI2
NDhkNjgyZDljMzgxZTUyNGZkMDk3MDA4YTQ3YzM2NTA0YS4uYWY2NzM3OGE2ZGRjZDFhZTc3MjQ0
ZTg5OTUzNjc3M2E3MDI3YjAzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2FnZW50cy9JbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50LmNw
cApAQCAtNTcsMzEgKzU3LDMwIEBAIHZvaWQgSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50
OjpkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoRnJvbnRlbmRSb3V0ZXIqCiAKIHZvaWQgSW5z
cGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2Vu
ZChJbnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24pCiB7Ci0gICAgRXJyb3JTdHJpbmcgaWdub3Jl
ZDsKLSAgICBkaXNhYmxlKGlnbm9yZWQpOworICAgIGRpc2FibGUoKTsKIH0KIAotdm9pZCBJbnNw
ZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQ6OmVuYWJsZShFcnJvclN0cmluZyYgZXJyb3JTdHJp
bmcpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JBcHBsaWNhdGlvbkNh
Y2hlQWdlbnQ6OmVuYWJsZSgpCiB7Ci0gICAgaWYgKG1faW5zdHJ1bWVudGluZ0FnZW50cy5lbmFi
bGVkQXBwbGljYXRpb25DYWNoZUFnZW50KCkgPT0gdGhpcykgewotICAgICAgICBlcnJvclN0cmlu
ZyA9ICJBcHBsaWNhdGlvbkNhY2hlIGRvbWFpbiBhbHJlYWR5IGVuYWJsZWQiX3M7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9CisgICAgaWYgKG1faW5zdHJ1bWVudGluZ0FnZW50cy5lbmFibGVkQXBw
bGljYXRpb25DYWNoZUFnZW50KCkgPT0gdGhpcykKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVj
dGVkKCJBcHBsaWNhdGlvbkNhY2hlIGRvbWFpbiBhbHJlYWR5IGVuYWJsZWQiX3MpOwogCiAgICAg
bV9pbnN0cnVtZW50aW5nQWdlbnRzLnNldEVuYWJsZWRBcHBsaWNhdGlvbkNhY2hlQWdlbnQodGhp
cyk7CiAKICAgICAvLyBXZSBuZWVkIHRvIHBhc3MgaW5pdGlhbCBuYXZpZ2F0b3Iub25PbmxpbmUu
CiAgICAgbmV0d29ya1N0YXRlQ2hhbmdlZCgpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9p
ZCBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQ6OmRpc2FibGUoRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yQXBwbGlj
YXRpb25DYWNoZUFnZW50OjpkaXNhYmxlKCkKIHsKLSAgICBpZiAobV9pbnN0cnVtZW50aW5nQWdl
bnRzLmVuYWJsZWRBcHBsaWNhdGlvbkNhY2hlQWdlbnQoKSAhPSB0aGlzKSB7Ci0gICAgICAgIGVy
cm9yU3RyaW5nID0gIkFwcGxpY2F0aW9uQ2FjaGUgZG9tYWluIGFscmVhZHkgZGlzYWJsZWQiX3M7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKG1faW5zdHJ1bWVudGluZ0FnZW50cy5l
bmFibGVkQXBwbGljYXRpb25DYWNoZUFnZW50KCkgIT0gdGhpcykKKyAgICAgICAgcmV0dXJuIG1h
a2VVbmV4cGVjdGVkKCJBcHBsaWNhdGlvbkNhY2hlIGRvbWFpbiBhbHJlYWR5IGRpc2FibGVkIl9z
KTsKIAogICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy5zZXRFbmFibGVkQXBwbGljYXRpb25DYWNo
ZUFnZW50KG51bGxwdHIpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAogdm9pZCBJbnNwZWN0b3JB
cHBsaWNhdGlvbkNhY2hlQWdlbnQ6OnVwZGF0ZUFwcGxpY2F0aW9uQ2FjaGVTdGF0dXMoRnJhbWUq
IGZyYW1lKQpAQCAtMTA5LDE2ICsxMDgsMTMgQEAgdm9pZCBJbnNwZWN0b3JBcHBsaWNhdGlvbkNh
Y2hlQWdlbnQ6Om5ldHdvcmtTdGF0ZUNoYW5nZWQoKQogICAgIG1fZnJvbnRlbmREaXNwYXRjaGVy
LT5uZXR3b3JrU3RhdGVVcGRhdGVkKHBsYXRmb3JtU3RyYXRlZ2llcygpLT5sb2FkZXJTdHJhdGVn
eSgpLT5pc09uTGluZSgpKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdl
bnQ6OmdldEZyYW1lc1dpdGhNYW5pZmVzdHMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBSZWZQ
dHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcHBsaWNhdGlvbkNhY2hlOjpG
cmFtZVdpdGhNYW5pZmVzdD4+JiByZXN1bHQpCitFeHBlY3RlZDxSZWY8SlNPTjo6QXJyYXlPZjxQ
cm90b2NvbDo6QXBwbGljYXRpb25DYWNoZTo6RnJhbWVXaXRoTWFuaWZlc3Q+PiwgUHJvdG9jb2w6
OkVycm9yU3RyaW5nPiBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQ6OmdldEZyYW1lc1dp
dGhNYW5pZmVzdHMoKQogewogICAgIGF1dG8qIHBhZ2VBZ2VudCA9IG1faW5zdHJ1bWVudGluZ0Fn
ZW50cy5lbmFibGVkUGFnZUFnZW50KCk7Ci0gICAgaWYgKCFwYWdlQWdlbnQpIHsKLSAgICAgICAg
ZXJyb3JTdHJpbmcgPSAiUGFnZSBkb21haW4gbXVzdCBiZSBlbmFibGVkIl9zOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgcmVzdWx0ID0gSlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpBcHBsaWNhdGlvbkNhY2hlOjpGcmFtZVdpdGhNYW5pZmVzdD46OmNyZWF0ZSgpOwor
ICAgIGlmICghcGFnZUFnZW50KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIlBhZ2Ug
ZG9tYWluIG11c3QgYmUgZW5hYmxlZCJfcyk7CiAKKyAgICBhdXRvIHJlc3VsdCA9IEpTT046OkFy
cmF5T2Y8UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkZyYW1lV2l0aE1hbmlmZXN0Pjo6Y3Jl
YXRlKCk7CiAgICAgZm9yIChGcmFtZSogZnJhbWUgPSAmbV9pbnNwZWN0ZWRQYWdlLm1haW5GcmFt
ZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKSB7CiAgICAg
ICAgIGF1dG8qIGRvY3VtZW50TG9hZGVyID0gZnJhbWUtPmxvYWRlcigpLmRvY3VtZW50TG9hZGVy
KCk7CiAgICAgICAgIGlmICghZG9jdW1lbnRMb2FkZXIpCkBAIC0xMjcsMTYgKzEyMywxNyBAQCB2
b2lkIEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudDo6Z2V0RnJhbWVzV2l0aE1hbmlmZXN0
cyhFcnJvclN0cmluZyYgZXJyb3JTdAogICAgICAgICBhdXRvJiBob3N0ID0gZG9jdW1lbnRMb2Fk
ZXItPmFwcGxpY2F0aW9uQ2FjaGVIb3N0KCk7CiAgICAgICAgIFN0cmluZyBtYW5pZmVzdFVSTCA9
IGhvc3QuYXBwbGljYXRpb25DYWNoZUluZm8oKS5tYW5pZmVzdC5zdHJpbmcoKTsKICAgICAgICAg
aWYgKCFtYW5pZmVzdFVSTC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIHJlc3VsdC0+YWRkSXRl
bShJbnNwZWN0b3I6OlByb3RvY29sOjpBcHBsaWNhdGlvbkNhY2hlOjpGcmFtZVdpdGhNYW5pZmVz
dDo6Y3JlYXRlKCkKKyAgICAgICAgICAgIHJlc3VsdC0+YWRkSXRlbShQcm90b2NvbDo6QXBwbGlj
YXRpb25DYWNoZTo6RnJhbWVXaXRoTWFuaWZlc3Q6OmNyZWF0ZSgpCiAgICAgICAgICAgICAgICAg
LnNldEZyYW1lSWQocGFnZUFnZW50LT5mcmFtZUlkKGZyYW1lKSkKICAgICAgICAgICAgICAgICAu
c2V0TWFuaWZlc3RVUkwobWFuaWZlc3RVUkwpCiAgICAgICAgICAgICAgICAgLnNldFN0YXR1cyhz
dGF0aWNfY2FzdDxpbnQ+KGhvc3Quc3RhdHVzKCkpKQogICAgICAgICAgICAgICAgIC5yZWxlYXNl
KCkpOwogICAgICAgICB9CiAgICAgfQorICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLURvY3VtZW50
TG9hZGVyKiBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQ6OmFzc2VydEZyYW1lV2l0aERv
Y3VtZW50TG9hZGVyKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBmcmFt
ZUlkKQorRG9jdW1lbnRMb2FkZXIqIEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudDo6YXNz
ZXJ0RnJhbWVXaXRoRG9jdW1lbnRMb2FkZXIoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0
cmluZywgY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6RnJhbWVJZCYgZnJhbWVJ
ZCkKIHsKICAgICBhdXRvKiBwYWdlQWdlbnQgPSBtX2luc3RydW1lbnRpbmdBZ2VudHMuZW5hYmxl
ZFBhZ2VBZ2VudCgpOwogICAgIGlmICghcGFnZUFnZW50KSB7CkBAIC0xNTEsMjggKzE0OCwzMiBA
QCBEb2N1bWVudExvYWRlciogSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50Ojphc3NlcnRG
cmFtZVdpdGhEb2N1bWVudExvYWRlcihFcgogICAgIHJldHVybiBJbnNwZWN0b3JQYWdlQWdlbnQ6
OmFzc2VydERvY3VtZW50TG9hZGVyKGVycm9yU3RyaW5nLCBmcmFtZSk7CiB9CiAKLXZvaWQgSW5z
cGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50OjpnZXRNYW5pZmVzdEZvckZyYW1lKEVycm9yU3Ry
aW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBTdHJpbmcqIG1hbmlmZXN0
VVJMKQorRXhwZWN0ZWQ8U3RyaW5nLCBQcm90b2NvbDo6RXJyb3JTdHJpbmc+IEluc3BlY3RvckFw
cGxpY2F0aW9uQ2FjaGVBZ2VudDo6Z2V0TWFuaWZlc3RGb3JGcmFtZShjb25zdCBJbnNwZWN0b3I6
OlByb3RvY29sOjpOZXR3b3JrOjpGcmFtZUlkJiBmcmFtZUlkKQogeworICAgIFByb3RvY29sOjpF
cnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIERvY3VtZW50TG9hZGVyKiBkb2N1bWVudExv
YWRlciA9IGFzc2VydEZyYW1lV2l0aERvY3VtZW50TG9hZGVyKGVycm9yU3RyaW5nLCBmcmFtZUlk
KTsKICAgICBpZiAoIWRvY3VtZW50TG9hZGVyKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJl
dHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKLSAgICAqbWFuaWZlc3RVUkwgPSBk
b2N1bWVudExvYWRlci0+YXBwbGljYXRpb25DYWNoZUhvc3QoKS5hcHBsaWNhdGlvbkNhY2hlSW5m
bygpLm1hbmlmZXN0LnN0cmluZygpOworICAgIHJldHVybiBkb2N1bWVudExvYWRlci0+YXBwbGlj
YXRpb25DYWNoZUhvc3QoKS5hcHBsaWNhdGlvbkNhY2hlSW5mbygpLm1hbmlmZXN0LnN0cmluZygp
OwogfQogCi12b2lkIEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudDo6Z2V0QXBwbGljYXRp
b25DYWNoZUZvckZyYW1lKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBm
cmFtZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXBwbGljYXRpb25DYWNoZTo6QXBw
bGljYXRpb25DYWNoZT4mIGFwcGxpY2F0aW9uQ2FjaGUpCitFeHBlY3RlZDxSZWY8UHJvdG9jb2w6
OkFwcGxpY2F0aW9uQ2FjaGU6OkFwcGxpY2F0aW9uQ2FjaGU+LCBQcm90b2NvbDo6RXJyb3JTdHJp
bmc+IEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudDo6Z2V0QXBwbGljYXRpb25DYWNoZUZv
ckZyYW1lKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OkZyYW1lSWQmIGZyYW1l
SWQpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAgICAgYXV0
byogZG9jdW1lbnRMb2FkZXIgPSBhc3NlcnRGcmFtZVdpdGhEb2N1bWVudExvYWRlcihlcnJvclN0
cmluZywgZnJhbWVJZCk7CiAgICAgaWYgKCFkb2N1bWVudExvYWRlcikKLSAgICAgICAgcmV0dXJu
OworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCiAgICAgYXV0
byYgaG9zdCA9IGRvY3VtZW50TG9hZGVyLT5hcHBsaWNhdGlvbkNhY2hlSG9zdCgpOwotICAgIGFw
cGxpY2F0aW9uQ2FjaGUgPSBidWlsZE9iamVjdEZvckFwcGxpY2F0aW9uQ2FjaGUoaG9zdC5yZXNv
dXJjZUxpc3QoKSwgaG9zdC5hcHBsaWNhdGlvbkNhY2hlSW5mbygpKTsKKyAgICByZXR1cm4gYnVp
bGRPYmplY3RGb3JBcHBsaWNhdGlvbkNhY2hlKGhvc3QucmVzb3VyY2VMaXN0KCksIGhvc3QuYXBw
bGljYXRpb25DYWNoZUluZm8oKSk7CiB9CiAKLVJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcHBs
aWNhdGlvbkNhY2hlOjpBcHBsaWNhdGlvbkNhY2hlPiBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hl
QWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yQXBwbGljYXRpb25DYWNoZShjb25zdCBWZWN0b3I8QXBwbGlj
YXRpb25DYWNoZUhvc3Q6OlJlc291cmNlSW5mbz4mIGFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZXMs
IGNvbnN0IEFwcGxpY2F0aW9uQ2FjaGVIb3N0OjpDYWNoZUluZm8mIGFwcGxpY2F0aW9uQ2FjaGVJ
bmZvKQorUmVmPFByb3RvY29sOjpBcHBsaWNhdGlvbkNhY2hlOjpBcHBsaWNhdGlvbkNhY2hlPiBJ
bnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yQXBwbGljYXRpb25D
YWNoZShjb25zdCBWZWN0b3I8QXBwbGljYXRpb25DYWNoZUhvc3Q6OlJlc291cmNlSW5mbz4mIGFw
cGxpY2F0aW9uQ2FjaGVSZXNvdXJjZXMsIGNvbnN0IEFwcGxpY2F0aW9uQ2FjaGVIb3N0OjpDYWNo
ZUluZm8mIGFwcGxpY2F0aW9uQ2FjaGVJbmZvKQogewotICAgIHJldHVybiBJbnNwZWN0b3I6OlBy
b3RvY29sOjpBcHBsaWNhdGlvbkNhY2hlOjpBcHBsaWNhdGlvbkNhY2hlOjpjcmVhdGUoKQorICAg
IHJldHVybiBQcm90b2NvbDo6QXBwbGljYXRpb25DYWNoZTo6QXBwbGljYXRpb25DYWNoZTo6Y3Jl
YXRlKCkKICAgICAgICAgLnNldE1hbmlmZXN0VVJMKGFwcGxpY2F0aW9uQ2FjaGVJbmZvLm1hbmlm
ZXN0LnN0cmluZygpKQogICAgICAgICAuc2V0U2l6ZShhcHBsaWNhdGlvbkNhY2hlSW5mby5zaXpl
KQogICAgICAgICAuc2V0Q3JlYXRpb25UaW1lKGFwcGxpY2F0aW9uQ2FjaGVJbmZvLmNyZWF0aW9u
VGltZSkKQEAgLTE4MSwxNSArMTgyLDE1IEBAIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcHBs
aWNhdGlvbkNhY2hlOjpBcHBsaWNhdGlvbkNhY2hlPiBJbnNwZWN0b3JBcHBsaWNhdGlvCiAgICAg
ICAgIC5yZWxlYXNlKCk7CiB9CiAKLVJlZjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZT4+IEluc3BlY3Rv
ckFwcGxpY2F0aW9uQ2FjaGVBZ2VudDo6YnVpbGRBcnJheUZvckFwcGxpY2F0aW9uQ2FjaGVSZXNv
dXJjZXMoY29uc3QgVmVjdG9yPEFwcGxpY2F0aW9uQ2FjaGVIb3N0OjpSZXNvdXJjZUluZm8+JiBh
cHBsaWNhdGlvbkNhY2hlUmVzb3VyY2VzKQorUmVmPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkFw
cGxpY2F0aW9uQ2FjaGU6OkFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZT4+IEluc3BlY3RvckFwcGxp
Y2F0aW9uQ2FjaGVBZ2VudDo6YnVpbGRBcnJheUZvckFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZXMo
Y29uc3QgVmVjdG9yPEFwcGxpY2F0aW9uQ2FjaGVIb3N0OjpSZXNvdXJjZUluZm8+JiBhcHBsaWNh
dGlvbkNhY2hlUmVzb3VyY2VzKQogewotICAgIGF1dG8gcmVzdWx0ID0gSlNPTjo6QXJyYXlPZjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpBcHBsaWNhdGlvbkNhY2hlOjpBcHBsaWNhdGlvbkNhY2hlUmVz
b3VyY2U+OjpjcmVhdGUoKTsKKyAgICBhdXRvIHJlc3VsdCA9IEpTT046OkFycmF5T2Y8UHJvdG9j
b2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZT46OmNyZWF0ZSgp
OwogICAgIGZvciAoYXV0byYgaW5mbyA6IGFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZXMpCiAgICAg
ICAgIHJlc3VsdC0+YWRkSXRlbShidWlsZE9iamVjdEZvckFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJj
ZShpbmZvKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotUmVmPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZT4gSW5zcGVjdG9y
QXBwbGljYXRpb25DYWNoZUFnZW50OjpidWlsZE9iamVjdEZvckFwcGxpY2F0aW9uQ2FjaGVSZXNv
dXJjZShjb25zdCBBcHBsaWNhdGlvbkNhY2hlSG9zdDo6UmVzb3VyY2VJbmZvJiByZXNvdXJjZUlu
Zm8pCitSZWY8UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkFwcGxpY2F0aW9uQ2FjaGVSZXNv
dXJjZT4gSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50OjpidWlsZE9iamVjdEZvckFwcGxp
Y2F0aW9uQ2FjaGVSZXNvdXJjZShjb25zdCBBcHBsaWNhdGlvbkNhY2hlSG9zdDo6UmVzb3VyY2VJ
bmZvJiByZXNvdXJjZUluZm8pCiB7CiAgICAgU3RyaW5nQnVpbGRlciB0eXBlczsKIApAQCAtMjA4
LDcgKzIwOSw3IEBAIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcHBsaWNhdGlvbkNhY2hlOjpB
cHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U+IEluc3BlY3RvckFwCiAgICAgaWYgKHJlc291cmNlSW5m
by5pc0V4cGxpY2l0KQogICAgICAgICB0eXBlcy5hcHBlbmRMaXRlcmFsKCJFeHBsaWNpdCAiKTsK
IAotICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpBcHBsaWNhdGlvbkNhY2hlOjpBcHBs
aWNhdGlvbkNhY2hlUmVzb3VyY2U6OmNyZWF0ZSgpCisgICAgcmV0dXJuIFByb3RvY29sOjpBcHBs
aWNhdGlvbkNhY2hlOjpBcHBsaWNhdGlvbkNhY2hlUmVzb3VyY2U6OmNyZWF0ZSgpCiAgICAgICAg
IC5zZXRVcmwocmVzb3VyY2VJbmZvLnJlc291cmNlLnN0cmluZygpKQogICAgICAgICAuc2V0U2l6
ZShzdGF0aWNfY2FzdDxpbnQ+KHJlc291cmNlSW5mby5zaXplKSkKICAgICAgICAgLnNldFR5cGUo
dHlwZXMudG9TdHJpbmcoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9h
Z2VudHMvSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5oCmluZGV4IDUx
OTg4ZjYxN2RlMTFlZjExNzA4YTdiMzkyY2YwY2UxOTRiNDg2ZWEuLjgwNzY3OTdjYWI2MDliOTIz
Njc5M2UyMjgxYTU4OWM0Y2QxNDYyNTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9hZ2VudHMvSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQu
aApAQCAtMzksMjUgKzM5LDIzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEZyYW1lOwog
Y2xhc3MgUGFnZTsKIAotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7Ci0KIGNsYXNzIEluc3Bl
Y3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudCBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3JBZ2VudEJh
c2UsIHB1YmxpYyBJbnNwZWN0b3I6OkFwcGxpY2F0aW9uQ2FjaGVCYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXIgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEluc3BlY3RvckFwcGxpY2F0aW9uQ2Fj
aGVBZ2VudCk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgSW5z
cGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50KFBhZ2VBZ2VudENvbnRleHQmKTsKLSAgICB+SW5z
cGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50KCkgb3ZlcnJpZGU7CisgICAgfkluc3BlY3RvckFw
cGxpY2F0aW9uQ2FjaGVBZ2VudCgpOwogCiAgICAgLy8gSW5zcGVjdG9yQWdlbnRCYXNlCi0gICAg
dm9pZCBkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9udGVuZFJvdXRl
ciosIEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXIqKSBvdmVycmlkZTsKLSAgICB2b2lkIHdp
bGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlzY29ubmVjdFJlYXNvbikg
b3ZlcnJpZGU7CisgICAgdm9pZCBkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9y
OjpGcm9udGVuZFJvdXRlciosIEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXIqKTsKKyAgICB2
b2lkIHdpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlzY29ubmVjdFJl
YXNvbik7CiAKICAgICAvLyBBcHBsaWNhdGlvbkNhY2hlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVy
Ci0gICAgdm9pZCBlbmFibGUoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2b2lkIGRpc2Fi
bGUoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2b2lkIGdldEZyYW1lc1dpdGhNYW5pZmVz
dHMoRXJyb3JTdHJpbmcmLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29s
OjpBcHBsaWNhdGlvbkNhY2hlOjpGcmFtZVdpdGhNYW5pZmVzdD4+JiByZXN1bHQpIG92ZXJyaWRl
OwotICAgIHZvaWQgZ2V0TWFuaWZlc3RGb3JGcmFtZShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmlu
ZyYgZnJhbWVJZCwgU3RyaW5nKiBtYW5pZmVzdFVSTCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBnZXRB
cHBsaWNhdGlvbkNhY2hlRm9yRnJhbWUoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGZyYW1l
SWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcHBsaWNhdGlvbkNhY2hlOjpBcHBsaWNh
dGlvbkNhY2hlPiYpIG92ZXJyaWRlOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3Ry
aW5nT3I8dm9pZD4gZW5hYmxlKCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJp
bmdPcjx2b2lkPiBkaXNhYmxlKCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJp
bmdPcjxSZWY8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcHBsaWNhdGlvbkNh
Y2hlOjpGcmFtZVdpdGhNYW5pZmVzdD4+PiBnZXRGcmFtZXNXaXRoTWFuaWZlc3RzKCk7CisgICAg
SW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxTdHJpbmc+IGdldE1hbmlmZXN0Rm9y
RnJhbWUoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6RnJhbWVJZCYpOworICAg
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkFwcGxpY2F0aW9uQ2FjaGU+PiBnZXRBcHBsaWNhdGlvbkNh
Y2hlRm9yRnJhbWUoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6RnJhbWVJZCYp
OwogCiAgICAgLy8gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uCiAgICAgdm9pZCB1cGRhdGVBcHBs
aWNhdGlvbkNhY2hlU3RhdHVzKEZyYW1lKik7CkBAIC02OCw3ICs2Niw3IEBAIHByaXZhdGU6CiAg
ICAgUmVmPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXBwbGljYXRpb25DYWNo
ZTo6QXBwbGljYXRpb25DYWNoZVJlc291cmNlPj4gYnVpbGRBcnJheUZvckFwcGxpY2F0aW9uQ2Fj
aGVSZXNvdXJjZXMoY29uc3QgVmVjdG9yPEFwcGxpY2F0aW9uQ2FjaGVIb3N0OjpSZXNvdXJjZUlu
Zm8+Jik7CiAgICAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkFw
cGxpY2F0aW9uQ2FjaGVSZXNvdXJjZT4gYnVpbGRPYmplY3RGb3JBcHBsaWNhdGlvbkNhY2hlUmVz
b3VyY2UoY29uc3QgQXBwbGljYXRpb25DYWNoZUhvc3Q6OlJlc291cmNlSW5mbyYpOwogCi0gICAg
RG9jdW1lbnRMb2FkZXIqIGFzc2VydEZyYW1lV2l0aERvY3VtZW50TG9hZGVyKEVycm9yU3RyaW5n
JiwgY29uc3QgU3RyaW5nJiBmcmFtZUlkKTsKKyAgICBEb2N1bWVudExvYWRlciogYXNzZXJ0RnJh
bWVXaXRoRG9jdW1lbnRMb2FkZXIoSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBj
b25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpGcmFtZUlkJik7CiAKICAgICBzdGQ6
OnVuaXF1ZV9wdHI8SW5zcGVjdG9yOjpBcHBsaWNhdGlvbkNhY2hlRnJvbnRlbmREaXNwYXRjaGVy
PiBtX2Zyb250ZW5kRGlzcGF0Y2hlcjsKICAgICBSZWZQdHI8SW5zcGVjdG9yOjpBcHBsaWNhdGlv
bkNhY2hlQmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNQVVByb2ZpbGVyQWdl
bnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDUFVQcm9m
aWxlckFnZW50LmNwcAppbmRleCBhMGU2ZmM0NTMxNTE2ZDk4OTMyMTE1YmI0YjljYTJiMmMyMzA1
NjkzLi44MjgxMWJlNTFjZjQ2M2M0MTE4MGJkZTgwNDU4MjJkNDdmZTFlNTI5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNQVVByb2ZpbGVyQWdl
bnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ1BV
UHJvZmlsZXJBZ2VudC5jcHAKQEAgLTUzLDE2ICs1MywxNSBAQCB2b2lkIEluc3BlY3RvckNQVVBy
b2ZpbGVyQWdlbnQ6OmRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChGcm9udGVuZFJvdXRlcios
IEJhYwogCiB2b2lkIEluc3BlY3RvckNQVVByb2ZpbGVyQWdlbnQ6OndpbGxEZXN0cm95RnJvbnRl
bmRBbmRCYWNrZW5kKERpc2Nvbm5lY3RSZWFzb24pCiB7Ci0gICAgRXJyb3JTdHJpbmcgaWdub3Jl
ZDsKLSAgICBzdG9wVHJhY2tpbmcoaWdub3JlZCk7CisgICAgc3RvcFRyYWNraW5nKCk7CiAKICAg
ICBtX2luc3RydW1lbnRpbmdBZ2VudHMuc2V0UGVyc2lzdGVudENQVVByb2ZpbGVyQWdlbnQobnVs
bHB0cik7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ1BVUHJvZmlsZXJBZ2VudDo6c3RhcnRUcmFja2lu
ZyhFcnJvclN0cmluZyYpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JD
UFVQcm9maWxlckFnZW50OjpzdGFydFRyYWNraW5nKCkKIHsKICAgICBpZiAobV90cmFja2luZykK
LSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4geyB9OwogCiAgICAgUmVzb3VyY2VVc2Fn
ZVRocmVhZDo6YWRkT2JzZXJ2ZXIodGhpcywgQ1BVLCBbdGhpc10gKGNvbnN0IFJlc291cmNlVXNh
Z2VEYXRhJiBkYXRhKSB7CiAgICAgICAgIGNvbGxlY3RTYW1wbGUoZGF0YSk7CkBAIC03MSwxOCAr
NzAsMjIgQEAgdm9pZCBJbnNwZWN0b3JDUFVQcm9maWxlckFnZW50OjpzdGFydFRyYWNraW5nKEVy
cm9yU3RyaW5nJikKICAgICBtX3RyYWNraW5nID0gdHJ1ZTsKIAogICAgIG1fZnJvbnRlbmREaXNw
YXRjaGVyLT50cmFja2luZ1N0YXJ0KG1fZW52aXJvbm1lbnQuZXhlY3V0aW9uU3RvcHdhdGNoKCku
ZWxhcHNlZFRpbWUoKS5zZWNvbmRzKCkpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJ
bnNwZWN0b3JDUFVQcm9maWxlckFnZW50OjpzdG9wVHJhY2tpbmcoRXJyb3JTdHJpbmcmKQorUHJv
dG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yQ1BVUHJvZmlsZXJBZ2VudDo6c3Rv
cFRyYWNraW5nKCkKIHsKICAgICBpZiAoIW1fdHJhY2tpbmcpCi0gICAgICAgIHJldHVybjsKKyAg
ICAgICAgcmV0dXJuIHsgfTsKIAogICAgIFJlc291cmNlVXNhZ2VUaHJlYWQ6OnJlbW92ZU9ic2Vy
dmVyKHRoaXMpOwogCiAgICAgbV90cmFja2luZyA9IGZhbHNlOwogCiAgICAgbV9mcm9udGVuZERp
c3BhdGNoZXItPnRyYWNraW5nQ29tcGxldGUobV9lbnZpcm9ubWVudC5leGVjdXRpb25TdG9wd2F0
Y2goKS5lbGFwc2VkVGltZSgpLnNlY29uZHMoKSk7CisKKyAgICByZXR1cm4geyB9OwogfQogCiBz
dGF0aWMgUmVmPFByb3RvY29sOjpDUFVQcm9maWxlcjo6VGhyZWFkSW5mbz4gYnVpbGRUaHJlYWRJ
bmZvKGNvbnN0IFRocmVhZENQVUluZm8mIHRocmVhZCkKQEAgLTExMyw3ICsxMTYsNyBAQCB2b2lk
IEluc3BlY3RvckNQVVByb2ZpbGVyQWdlbnQ6OmNvbGxlY3RTYW1wbGUoY29uc3QgUmVzb3VyY2VV
c2FnZURhdGEmIGRhdGEpCiAgICAgICAgIC5yZWxlYXNlKCk7CiAKICAgICBpZiAoIWRhdGEuY3B1
VGhyZWFkcy5pc0VtcHR5KCkpIHsKLSAgICAgICAgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9j
b2w6OkNQVVByb2ZpbGVyOjpUaHJlYWRJbmZvPj4gdGhyZWFkcyA9IEpTT046OkFycmF5T2Y8UHJv
dG9jb2w6OkNQVVByb2ZpbGVyOjpUaHJlYWRJbmZvPjo6Y3JlYXRlKCk7CisgICAgICAgIGF1dG8g
dGhyZWFkcyA9IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkNQVVByb2ZpbGVyOjpUaHJlYWRJbmZv
Pjo6Y3JlYXRlKCk7CiAgICAgICAgIGZvciAoYXV0byYgdGhyZWFkSW5mbyA6IGRhdGEuY3B1VGhy
ZWFkcykKICAgICAgICAgICAgIHRocmVhZHMtPmFkZEl0ZW0oYnVpbGRUaHJlYWRJbmZvKHRocmVh
ZEluZm8pKTsKICAgICAgICAgZXZlbnQtPnNldFRocmVhZHMoV1RGTW92ZSh0aHJlYWRzKSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNQVVBy
b2ZpbGVyQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9y
Q1BVUHJvZmlsZXJBZ2VudC5oCmluZGV4IDRlZThlOTc4NTNkNzEyZDNkYTY0MzliOTg5N2U4NjVh
ODk2ZGJmZmYuLmZlNWUxODVhYmRiMWM0ZjJmMTNiNGQ4YTA3YTkyYmZkNzllNjlkMGIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ1BVUHJvZmls
ZXJBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9y
Q1BVUHJvZmlsZXJBZ2VudC5oCkBAIC0zNCwyMiArMzQsMjAgQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQogY2xhc3MgSW5zcGVjdG9yQ1BV
UHJvZmlsZXJBZ2VudCBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3JBZ2VudEJhc2UsIHB1YmxpYyBJ
bnNwZWN0b3I6OkNQVVByb2ZpbGVyQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKICAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShJbnNwZWN0b3JDUFVQcm9maWxlckFnZW50KTsKICAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBJbnNwZWN0b3JDUFVQcm9maWxlckFnZW50
KFBhZ2VBZ2VudENvbnRleHQmKTsKLSAgICB+SW5zcGVjdG9yQ1BVUHJvZmlsZXJBZ2VudCgpIG92
ZXJyaWRlOworICAgIH5JbnNwZWN0b3JDUFVQcm9maWxlckFnZW50KCk7CiAKICAgICAvLyBJbnNw
ZWN0b3JBZ2VudEJhc2UKLSAgICB2b2lkIGRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJbnNw
ZWN0b3I6OkZyb250ZW5kUm91dGVyKiwgSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlciopIG92
ZXJyaWRlOwotICAgIHZvaWQgd2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9y
OjpEaXNjb25uZWN0UmVhc29uKSBvdmVycmlkZTsKKyAgICB2b2lkIGRpZENyZWF0ZUZyb250ZW5k
QW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kUm91dGVyKiwgSW5zcGVjdG9yOjpCYWNrZW5k
RGlzcGF0Y2hlciopOworICAgIHZvaWQgd2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5z
cGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKTsKIAogICAgIC8vIENQVVByb2ZpbGVyQmFja2VuZERp
c3BhdGNoZXJIYW5kbGVyCi0gICAgdm9pZCBzdGFydFRyYWNraW5nKEVycm9yU3RyaW5nJikgb3Zl
cnJpZGU7Ci0gICAgdm9pZCBzdG9wVHJhY2tpbmcoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKKyAg
ICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHN0YXJ0VHJhY2tpbmco
KTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHN0b3BUcmFj
a2luZygpOwogCiBwcml2YXRlOgogICAgIHZvaWQgY29sbGVjdFNhbXBsZShjb25zdCBSZXNvdXJj
ZVVzYWdlRGF0YSYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50
cy9JbnNwZWN0b3JDU1NBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRz
L0luc3BlY3RvckNTU0FnZW50LmNwcAppbmRleCA1NjVlYmUwODJjMDc4YmI2Njg3NzQwMzg5ZWIz
NzJlZTExOWI3NDFiLi41OTRjODQ1YzE4YTMyNWQ1MGQ5ZTVlMDM4MjEwOWY5MjJiM2JjZDIxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNTU0Fn
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNT
U0FnZW50LmNwcApAQCAtOTIsMTAgKzkyLDcgQEAgc3RhdGljIHVuc2lnbmVkIGNvbXB1dGVQc2V1
ZG9DbGFzc01hc2soY29uc3QgSlNPTjo6QXJyYXkmIHBzZXVkb0NsYXNzQXJyYXkpCiAKICAgICB1
bnNpZ25lZCByZXN1bHQgPSBQc2V1ZG9DbGFzc05vbmU7CiAgICAgZm9yIChhdXRvJiBwc2V1ZG9D
bGFzc1ZhbHVlIDogcHNldWRvQ2xhc3NBcnJheSkgewotICAgICAgICBTdHJpbmcgcHNldWRvQ2xh
c3M7Ci0gICAgICAgIGJvb2wgc3VjY2VzcyA9IHBzZXVkb0NsYXNzVmFsdWUtPmFzU3RyaW5nKHBz
ZXVkb0NsYXNzKTsKLSAgICAgICAgaWYgKCFzdWNjZXNzKQotICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIGF1dG8gcHNldWRvQ2xhc3MgPSBwc2V1ZG9DbGFzc1ZhbHVlLT5hc1N0cmluZygp
OwogICAgICAgICBpZiAocHNldWRvQ2xhc3MgPT0gYWN0aXZlKQogICAgICAgICAgICAgcmVzdWx0
IHw9IFBzZXVkb0NsYXNzQWN0aXZlOwogICAgICAgICBlbHNlIGlmIChwc2V1ZG9DbGFzcyA9PSBo
b3ZlcikKQEAgLTMxMiw4ICszMDksNyBAQCB2b2lkIEluc3BlY3RvckNTU0FnZW50OjpkaWRDcmVh
dGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9udGVuZFJvdXRlciosCiAKIHZvaWQg
SW5zcGVjdG9yQ1NTQWdlbnQ6OndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rv
cjo6RGlzY29ubmVjdFJlYXNvbikKIHsKLSAgICBTdHJpbmcgdW51c2VkOwotICAgIGRpc2FibGUo
dW51c2VkKTsKKyAgICBkaXNhYmxlKCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OnJl
c2V0KCkKQEAgLTMyNywxMCArMzIzLDEwIEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OnJlc2V0
KCkKICAgICByZXNldFBzZXVkb1N0YXRlcygpOwogfQogCi12b2lkIEluc3BlY3RvckNTU0FnZW50
OjplbmFibGUoRXJyb3JTdHJpbmcmKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5z
cGVjdG9yQ1NTQWdlbnQ6OmVuYWJsZSgpCiB7CiAgICAgaWYgKG1faW5zdHJ1bWVudGluZ0FnZW50
cy5lbmFibGVkQ1NTQWdlbnQoKSA9PSB0aGlzKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJl
dHVybiB7IH07CiAKICAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMuc2V0RW5hYmxlZENTU0FnZW50
KHRoaXMpOwogCkBAIC0zMzgsMTMgKzMzNCwxNyBAQCB2b2lkIEluc3BlY3RvckNTU0FnZW50Ojpl
bmFibGUoRXJyb3JTdHJpbmcmKQogICAgICAgICBmb3IgKGF1dG8qIGRvY3VtZW50IDogZG9tQWdl
bnQtPmRvY3VtZW50cygpKQogICAgICAgICAgICAgYWN0aXZlU3R5bGVTaGVldHNVcGRhdGVkKCpk
b2N1bWVudCk7CiAgICAgfQorCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JD
U1NBZ2VudDo6ZGlzYWJsZShFcnJvclN0cmluZyYpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2
b2lkPiBJbnNwZWN0b3JDU1NBZ2VudDo6ZGlzYWJsZSgpCiB7CiAgICAgbV9pbnN0cnVtZW50aW5n
QWdlbnRzLnNldEVuYWJsZWRDU1NBZ2VudChudWxscHRyKTsKIAogICAgIHJlc2V0KCk7CisKKyAg
ICByZXR1cm4geyB9OwogfQogCiB2b2lkIEluc3BlY3RvckNTU0FnZW50Ojpkb2N1bWVudERldGFj
aGVkKERvY3VtZW50JiBkb2N1bWVudCkKQEAgLTM4Nyw3ICszODcsNyBAQCB2b2lkIEluc3BlY3Rv
ckNTU0FnZW50OjpzZXRBY3RpdmVTdHlsZVNoZWV0c0ZvckRvY3VtZW50KERvY3VtZW50JiBkb2N1
bWVudCwgVmVjdAogICAgICAgICBwcmV2aW91c2x5S25vd25BY3RpdmVTdHlsZVNoZWV0cy5yZW1v
dmUoY3NzU3R5bGVTaGVldCk7CiAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JTdHlsZVNoZWV0PiBp
bnNwZWN0b3JTdHlsZVNoZWV0ID0gbV9jc3NTdHlsZVNoZWV0VG9JbnNwZWN0b3JTdHlsZVNoZWV0
LmdldChjc3NTdHlsZVNoZWV0KTsKICAgICAgICAgaWYgKG1faWRUb0luc3BlY3RvclN0eWxlU2hl
ZXQuY29udGFpbnMoaW5zcGVjdG9yU3R5bGVTaGVldC0+aWQoKSkpIHsKLSAgICAgICAgICAgIFN0
cmluZyBpZCA9IHVuYmluZFN0eWxlU2hlZXQoaW5zcGVjdG9yU3R5bGVTaGVldC5nZXQoKSk7Cisg
ICAgICAgICAgICBhdXRvIGlkID0gdW5iaW5kU3R5bGVTaGVldChpbnNwZWN0b3JTdHlsZVNoZWV0
LmdldCgpKTsKICAgICAgICAgICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5zdHlsZVNoZWV0UmVt
b3ZlZChpZCk7CiAgICAgICAgIH0KICAgICB9CkBAIC0zOTYsNyArMzk2LDggQEAgdm9pZCBJbnNw
ZWN0b3JDU1NBZ2VudDo6c2V0QWN0aXZlU3R5bGVTaGVldHNGb3JEb2N1bWVudChEb2N1bWVudCYg
ZG9jdW1lbnQsIFZlY3QKICAgICAgICAgcHJldmlvdXNseUtub3duQWN0aXZlU3R5bGVTaGVldHMu
YWRkKGNzc1N0eWxlU2hlZXQpOwogICAgICAgICBpZiAoIW1fY3NzU3R5bGVTaGVldFRvSW5zcGVj
dG9yU3R5bGVTaGVldC5jb250YWlucyhjc3NTdHlsZVNoZWV0KSkgewogICAgICAgICAgICAgSW5z
cGVjdG9yU3R5bGVTaGVldCogaW5zcGVjdG9yU3R5bGVTaGVldCA9IGJpbmRTdHlsZVNoZWV0KGNz
c1N0eWxlU2hlZXQpOwotICAgICAgICAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPnN0eWxlU2hl
ZXRBZGRlZChpbnNwZWN0b3JTdHlsZVNoZWV0LT5idWlsZE9iamVjdEZvclN0eWxlU2hlZXRJbmZv
KCkpOworICAgICAgICAgICAgaWYgKGF1dG8gaGVhZGVyID0gaW5zcGVjdG9yU3R5bGVTaGVldC0+
YnVpbGRPYmplY3RGb3JTdHlsZVNoZWV0SW5mbygpKQorICAgICAgICAgICAgICAgIG1fZnJvbnRl
bmREaXNwYXRjaGVyLT5zdHlsZVNoZWV0QWRkZWQoaGVhZGVyLnJlbGVhc2VOb25OdWxsKCkpOwog
ICAgICAgICB9CiAgICAgfQogfQpAQCAtNDEwLDcgKzQxMSw3IEBAIGJvb2wgSW5zcGVjdG9yQ1NT
QWdlbnQ6OmZvcmNlUHNldWRvU3RhdGUoY29uc3QgRWxlbWVudCYgZWxlbWVudCwgQ1NTU2VsZWN0
b3I6OlBzCiAgICAgaWYgKCFkb21BZ2VudCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
aW50IG5vZGVJZCA9IGRvbUFnZW50LT5ib3VuZE5vZGVJZCgmZWxlbWVudCk7CisgICAgYXV0byBu
b2RlSWQgPSBkb21BZ2VudC0+Ym91bmROb2RlSWQoJmVsZW1lbnQpOwogICAgIGlmICghbm9kZUlk
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTQyOSwzNyArNDMwLDM3IEBAIGJvb2wgSW5z
cGVjdG9yQ1NTQWdlbnQ6OmZvcmNlUHNldWRvU3RhdGUoY29uc3QgRWxlbWVudCYgZWxlbWVudCwg
Q1NTU2VsZWN0b3I6OlBzCiAgICAgfQogfQogCi1zdGF0aWMgT3B0aW9uYWw8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6Q1NTOjpQc2V1ZG9JZD4gcHJvdG9jb2xWYWx1ZUZvclBzZXVkb0lkKFBzZXVkb0lk
IHBzZXVkb0lkKQorc3RhdGljIE9wdGlvbmFsPFByb3RvY29sOjpDU1M6OlBzZXVkb0lkPiBwcm90
b2NvbFZhbHVlRm9yUHNldWRvSWQoUHNldWRvSWQgcHNldWRvSWQpCiB7CiAgICAgc3dpdGNoIChw
c2V1ZG9JZCkgewogICAgIGNhc2UgUHNldWRvSWQ6OkZpcnN0TGluZToKLSAgICAgICAgcmV0dXJu
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6UHNldWRvSWQ6OkZpcnN0TGluZTsKKyAgICAgICAg
cmV0dXJuIFByb3RvY29sOjpDU1M6OlBzZXVkb0lkOjpGaXJzdExpbmU7CiAgICAgY2FzZSBQc2V1
ZG9JZDo6Rmlyc3RMZXR0ZXI6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpD
U1M6OlBzZXVkb0lkOjpGaXJzdExldHRlcjsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpDU1M6
OlBzZXVkb0lkOjpGaXJzdExldHRlcjsKICAgICBjYXNlIFBzZXVkb0lkOjpNYXJrZXI6Ci0gICAg
ICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlBzZXVkb0lkOjpNYXJrZXI7Cisg
ICAgICAgIHJldHVybiBQcm90b2NvbDo6Q1NTOjpQc2V1ZG9JZDo6TWFya2VyOwogICAgIGNhc2Ug
UHNldWRvSWQ6OkJlZm9yZToKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNT
Uzo6UHNldWRvSWQ6OkJlZm9yZTsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpDU1M6OlBzZXVk
b0lkOjpCZWZvcmU7CiAgICAgY2FzZSBQc2V1ZG9JZDo6QWZ0ZXI6Ci0gICAgICAgIHJldHVybiBJ
bnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlBzZXVkb0lkOjpBZnRlcjsKKyAgICAgICAgcmV0dXJu
IFByb3RvY29sOjpDU1M6OlBzZXVkb0lkOjpBZnRlcjsKICAgICBjYXNlIFBzZXVkb0lkOjpTZWxl
Y3Rpb246Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlBzZXVkb0lk
OjpTZWxlY3Rpb247CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6Q1NTOjpQc2V1ZG9JZDo6U2Vs
ZWN0aW9uOwogICAgIGNhc2UgUHNldWRvSWQ6OkhpZ2hsaWdodDoKLSAgICAgICAgcmV0dXJuIElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6UHNldWRvSWQ6OkhpZ2hsaWdodDsKKyAgICAgICAgcmV0
dXJuIFByb3RvY29sOjpDU1M6OlBzZXVkb0lkOjpIaWdobGlnaHQ7CiAgICAgY2FzZSBQc2V1ZG9J
ZDo6U2Nyb2xsYmFyOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpQ
c2V1ZG9JZDo6U2Nyb2xsYmFyOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OkNTUzo6UHNldWRv
SWQ6OlNjcm9sbGJhcjsKICAgICBjYXNlIFBzZXVkb0lkOjpTY3JvbGxiYXJUaHVtYjoKLSAgICAg
ICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6UHNldWRvSWQ6OlNjcm9sbGJhclRo
dW1iOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OkNTUzo6UHNldWRvSWQ6OlNjcm9sbGJhclRo
dW1iOwogICAgIGNhc2UgUHNldWRvSWQ6OlNjcm9sbGJhckJ1dHRvbjoKLSAgICAgICAgcmV0dXJu
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6UHNldWRvSWQ6OlNjcm9sbGJhckJ1dHRvbjsKKyAg
ICAgICAgcmV0dXJuIFByb3RvY29sOjpDU1M6OlBzZXVkb0lkOjpTY3JvbGxiYXJCdXR0b247CiAg
ICAgY2FzZSBQc2V1ZG9JZDo6U2Nyb2xsYmFyVHJhY2s6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0
b3I6OlByb3RvY29sOjpDU1M6OlBzZXVkb0lkOjpTY3JvbGxiYXJUcmFjazsKKyAgICAgICAgcmV0
dXJuIFByb3RvY29sOjpDU1M6OlBzZXVkb0lkOjpTY3JvbGxiYXJUcmFjazsKICAgICBjYXNlIFBz
ZXVkb0lkOjpTY3JvbGxiYXJUcmFja1BpZWNlOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQ
cm90b2NvbDo6Q1NTOjpQc2V1ZG9JZDo6U2Nyb2xsYmFyVHJhY2tQaWVjZTsKKyAgICAgICAgcmV0
dXJuIFByb3RvY29sOjpDU1M6OlBzZXVkb0lkOjpTY3JvbGxiYXJUcmFja1BpZWNlOwogICAgIGNh
c2UgUHNldWRvSWQ6OlNjcm9sbGJhckNvcm5lcjoKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkNTUzo6UHNldWRvSWQ6OlNjcm9sbGJhckNvcm5lcjsKKyAgICAgICAgcmV0dXJu
IFByb3RvY29sOjpDU1M6OlBzZXVkb0lkOjpTY3JvbGxiYXJDb3JuZXI7CiAgICAgY2FzZSBQc2V1
ZG9JZDo6UmVzaXplcjoKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6
UHNldWRvSWQ6OlJlc2l6ZXI7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6Q1NTOjpQc2V1ZG9J
ZDo6UmVzaXplcjsKIAogICAgIGRlZmF1bHQ6CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwpAQCAtNDY3LDM2ICs0NjgsMzcgQEAgc3RhdGljIE9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkNTUzo6UHNldWRvSWQ+IHByb3RvY29sVmFsdWVGb3JQc2V1ZG9JZChQc2UKICAgICB9CiB9
CiAKLXZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldE1hdGNoZWRTdHlsZXNGb3JOb2RlKEVycm9y
U3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJZCwgY29uc3QgYm9vbCogaW5jbHVkZVBzZXVk
bywgY29uc3QgYm9vbCogaW5jbHVkZUluaGVyaXRlZCwgUmVmUHRyPEpTT046OkFycmF5T2Y8SW5z
cGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpSdWxlTWF0Y2g+PiYgbWF0Y2hlZENTU1J1bGVzLCBSZWZQ
dHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlBzZXVkb0lkTWF0Y2hl
cz4+JiBwc2V1ZG9JZE1hdGNoZXMsIFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkNTUzo6SW5oZXJpdGVkU3R5bGVFbnRyeT4+JiBpbmhlcml0ZWRFbnRyaWVzKQorUHJv
dG9jb2w6OkVycm9yU3RyaW5nT3I8c3RkOjp0dXBsZTxSZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90
b2NvbDo6Q1NTOjpSdWxlTWF0Y2g+PiwgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkNT
Uzo6UHNldWRvSWRNYXRjaGVzPj4sIFJlZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpDU1M6
OkluaGVyaXRlZFN0eWxlRW50cnk+Pj4+IEluc3BlY3RvckNTU0FnZW50OjpnZXRNYXRjaGVkU3R5
bGVzRm9yTm9kZShQcm90b2NvbDo6RE9NOjpOb2RlSWQgbm9kZUlkLCBPcHRpb25hbDxib29sPiYm
IGluY2x1ZGVQc2V1ZG8sIE9wdGlvbmFsPGJvb2w+JiYgaW5jbHVkZUluaGVyaXRlZCkKIHsKKyAg
ICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBFbGVtZW50KiBlbGVt
ZW50ID0gZWxlbWVudEZvcklkKGVycm9yU3RyaW5nLCBub2RlSWQpOwogICAgIGlmICghZWxlbWVu
dCkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JT
dHJpbmcpOwogCiAgICAgRWxlbWVudCogb3JpZ2luYWxFbGVtZW50ID0gZWxlbWVudDsKICAgICBQ
c2V1ZG9JZCBlbGVtZW50UHNldWRvSWQgPSBlbGVtZW50LT5wc2V1ZG9JZCgpOwogICAgIGlmIChl
bGVtZW50UHNldWRvSWQgIT0gUHNldWRvSWQ6Ok5vbmUpIHsKICAgICAgICAgZWxlbWVudCA9IGRv
d25jYXN0PFBzZXVkb0VsZW1lbnQ+KCplbGVtZW50KS5ob3N0RWxlbWVudCgpOwotICAgICAgICBp
ZiAoIWVsZW1lbnQpIHsKLSAgICAgICAgICAgIGVycm9yU3RyaW5nID0gIk1pc3NpbmcgcGFyZW50
IG9mIHBzZXVkby1lbGVtZW50IG5vZGUgZm9yIGdpdmVuIG5vZGVJZCJfczsKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfQorICAgICAgICBpZiAoIWVsZW1lbnQpCisgICAgICAgICAgICBy
ZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk1pc3NpbmcgcGFyZW50IG9mIHBzZXVkby1lbGVtZW50IG5v
ZGUgZm9yIGdpdmVuIG5vZGVJZCJfcyk7CiAgICAgfQogCiAgICAgLy8gTWF0Y2hlZCBydWxlcy4K
ICAgICBhdXRvJiBzdHlsZVJlc29sdmVyID0gZWxlbWVudC0+c3R5bGVSZXNvbHZlcigpOwogICAg
IGF1dG8gbWF0Y2hlZFJ1bGVzID0gc3R5bGVSZXNvbHZlci5wc2V1ZG9TdHlsZVJ1bGVzRm9yRWxl
bWVudChlbGVtZW50LCBlbGVtZW50UHNldWRvSWQsIFN0eWxlOjpSZXNvbHZlcjo6QWxsQ1NTUnVs
ZXMpOwotICAgIG1hdGNoZWRDU1NSdWxlcyA9IGJ1aWxkQXJyYXlGb3JNYXRjaGVkUnVsZUxpc3Qo
bWF0Y2hlZFJ1bGVzLCBzdHlsZVJlc29sdmVyLCAqZWxlbWVudCwgZWxlbWVudFBzZXVkb0lkKTsK
KyAgICBhdXRvIG1hdGNoZWRDU1NSdWxlcyA9IGJ1aWxkQXJyYXlGb3JNYXRjaGVkUnVsZUxpc3Qo
bWF0Y2hlZFJ1bGVzLCBzdHlsZVJlc29sdmVyLCAqZWxlbWVudCwgZWxlbWVudFBzZXVkb0lkKTsK
KyAgICBSZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6Q1NTOjpQc2V1ZG9JZE1hdGNoZXM+
PiBwc2V1ZG9FbGVtZW50czsKKyAgICBSZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6Q1NT
OjpJbmhlcml0ZWRTdHlsZUVudHJ5Pj4gaW5oZXJpdGVkOwogCiAgICAgaWYgKCFvcmlnaW5hbEVs
ZW1lbnQtPmlzUHNldWRvRWxlbWVudCgpKSB7Ci0gICAgICAgIC8vIFBzZXVkbyBlbGVtZW50cy4K
ICAgICAgICAgaWYgKCFpbmNsdWRlUHNldWRvIHx8ICppbmNsdWRlUHNldWRvKSB7Ci0gICAgICAg
ICAgICBhdXRvIHBzZXVkb0VsZW1lbnRzID0gSlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpDU1M6OlBzZXVkb0lkTWF0Y2hlcz46OmNyZWF0ZSgpOworICAgICAgICAgICAgcHNldWRv
RWxlbWVudHMgPSBKU09OOjpBcnJheU9mPFByb3RvY29sOjpDU1M6OlBzZXVkb0lkTWF0Y2hlcz46
OmNyZWF0ZSgpOwogICAgICAgICAgICAgZm9yIChQc2V1ZG9JZCBwc2V1ZG9JZCA9IFBzZXVkb0lk
OjpGaXJzdFB1YmxpY1BzZXVkb0lkOyBwc2V1ZG9JZCA8IFBzZXVkb0lkOjpBZnRlckxhc3RJbnRl
cm5hbFBzZXVkb0lkOyBwc2V1ZG9JZCA9IHN0YXRpY19jYXN0PFBzZXVkb0lkPihzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4ocHNldWRvSWQpICsgMSkpIHsKICAgICAgICAgICAgICAgICBpZiAoYXV0byBw
cm90b2NvbFBzZXVkb0lkID0gcHJvdG9jb2xWYWx1ZUZvclBzZXVkb0lkKHBzZXVkb0lkKSkgewog
ICAgICAgICAgICAgICAgICAgICBhdXRvIG1hdGNoZWRSdWxlcyA9IHN0eWxlUmVzb2x2ZXIucHNl
dWRvU3R5bGVSdWxlc0ZvckVsZW1lbnQoZWxlbWVudCwgcHNldWRvSWQsIFN0eWxlOjpSZXNvbHZl
cjo6QWxsQ1NTUnVsZXMpOwogICAgICAgICAgICAgICAgICAgICBpZiAoIW1hdGNoZWRSdWxlcy5p
c0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gbWF0Y2hlcyA9IEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkNTUzo6UHNldWRvSWRNYXRjaGVzOjpjcmVhdGUoKQorICAgICAgICAg
ICAgICAgICAgICAgICAgYXV0byBtYXRjaGVzID0gUHJvdG9jb2w6OkNTUzo6UHNldWRvSWRNYXRj
aGVzOjpjcmVhdGUoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRQc2V1ZG9JZChw
cm90b2NvbFBzZXVkb0lkLnZhbHVlKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNl
dE1hdGNoZXMoYnVpbGRBcnJheUZvck1hdGNoZWRSdWxlTGlzdChtYXRjaGVkUnVsZXMsIHN0eWxl
UmVzb2x2ZXIsICplbGVtZW50LCBwc2V1ZG9JZCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLnJlbGVhc2UoKTsKQEAgLTUwNCw2NiArNTA2LDY2IEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdl
bnQ6OmdldE1hdGNoZWRTdHlsZXNGb3JOb2RlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50
IG5vCiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIHBzZXVkb0lkTWF0Y2hlcyA9IFdURk1vdmUocHNldWRvRWxlbWVu
dHMpOwogICAgICAgICB9CiAKLSAgICAgICAgLy8gSW5oZXJpdGVkIHN0eWxlcy4KICAgICAgICAg
aWYgKCFpbmNsdWRlSW5oZXJpdGVkIHx8ICppbmNsdWRlSW5oZXJpdGVkKSB7Ci0gICAgICAgICAg
ICBhdXRvIGVudHJpZXMgPSBKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6
SW5oZXJpdGVkU3R5bGVFbnRyeT46OmNyZWF0ZSgpOworICAgICAgICAgICAgaW5oZXJpdGVkID0g
SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6Q1NTOjpJbmhlcml0ZWRTdHlsZUVudHJ5Pjo6Y3JlYXRl
KCk7CiAgICAgICAgICAgICBmb3IgKGF1dG8mIGFuY2VzdG9yIDogYW5jZXN0b3JzT2ZUeXBlPEVs
ZW1lbnQ+KCplbGVtZW50KSkgewogICAgICAgICAgICAgICAgIGF1dG8mIHBhcmVudFN0eWxlUmVz
b2x2ZXIgPSBhbmNlc3Rvci5zdHlsZVJlc29sdmVyKCk7CiAgICAgICAgICAgICAgICAgYXV0byBw
YXJlbnRNYXRjaGVkUnVsZXMgPSBwYXJlbnRTdHlsZVJlc29sdmVyLnN0eWxlUnVsZXNGb3JFbGVt
ZW50KCZhbmNlc3RvciwgU3R5bGU6OlJlc29sdmVyOjpBbGxDU1NSdWxlcyk7Ci0gICAgICAgICAg
ICAgICAgYXV0byBlbnRyeSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6SW5oZXJpdGVkU3R5
bGVFbnRyeTo6Y3JlYXRlKCkKKyAgICAgICAgICAgICAgICBhdXRvIGVudHJ5ID0gUHJvdG9jb2w6
OkNTUzo6SW5oZXJpdGVkU3R5bGVFbnRyeTo6Y3JlYXRlKCkKICAgICAgICAgICAgICAgICAgICAg
LnNldE1hdGNoZWRDU1NSdWxlcyhidWlsZEFycmF5Rm9yTWF0Y2hlZFJ1bGVMaXN0KHBhcmVudE1h
dGNoZWRSdWxlcywgc3R5bGVSZXNvbHZlciwgYW5jZXN0b3IsIFBzZXVkb0lkOjpOb25lKSkKICAg
ICAgICAgICAgICAgICAgICAgLnJlbGVhc2UoKTsKICAgICAgICAgICAgICAgICBpZiAoaXM8U3R5
bGVkRWxlbWVudD4oYW5jZXN0b3IpICYmIGRvd25jYXN0PFN0eWxlZEVsZW1lbnQ+KGFuY2VzdG9y
KS5jc3NvbVN0eWxlKCkubGVuZ3RoKCkpIHsKICAgICAgICAgICAgICAgICAgICAgYXV0byYgc3R5
bGVTaGVldCA9IGFzSW5zcGVjdG9yU3R5bGVTaGVldChkb3duY2FzdDxTdHlsZWRFbGVtZW50Pihh
bmNlc3RvcikpOwogICAgICAgICAgICAgICAgICAgICBlbnRyeS0+c2V0SW5saW5lU3R5bGUoc3R5
bGVTaGVldC5idWlsZE9iamVjdEZvclN0eWxlKHN0eWxlU2hlZXQuc3R5bGVGb3JJZChJbnNwZWN0
b3JDU1NJZChzdHlsZVNoZWV0LmlkKCksIDApKSkpOwogICAgICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgICAgIGVudHJpZXMtPmFkZEl0ZW0oV1RGTW92ZShlbnRyeSkpOworICAgICAgICAg
ICAgICAgIGluaGVyaXRlZC0+YWRkSXRlbShXVEZNb3ZlKGVudHJ5KSk7CiAgICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIGluaGVyaXRlZEVudHJpZXMgPSBXVEZNb3ZlKGVudHJpZXMpOwogICAg
ICAgICB9CiAgICAgfQorCisgICAgcmV0dXJuIHsgeyBXVEZNb3ZlKG1hdGNoZWRDU1NSdWxlcyks
IFdURk1vdmUocHNldWRvRWxlbWVudHMpLCBXVEZNb3ZlKGluaGVyaXRlZCkgfSB9OwogfQogCi12
b2lkIEluc3BlY3RvckNTU0FnZW50OjpnZXRJbmxpbmVTdHlsZXNGb3JOb2RlKEVycm9yU3RyaW5n
JiBlcnJvclN0cmluZywgaW50IG5vZGVJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNT
Uzo6Q1NTU3R5bGU+JiBpbmxpbmVTdHlsZSwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNT
Uzo6Q1NTU3R5bGU+JiBhdHRyaWJ1dGVzU3R5bGUpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxz
dGQ6OnR1cGxlPFJlZlB0cjxQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4gLyogaW5saW5lU3R5bGUg
Ki8sIFJlZlB0cjxQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4gLyogYXR0cmlidXRlc1N0eWxlICov
Pj4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldElubGluZVN0eWxlc0Zvck5vZGUoUHJvdG9jb2w6OkRP
TTo6Tm9kZUlkIG5vZGVJZCkKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJp
bmc7CisKICAgICBhdXRvKiBlbGVtZW50ID0gZWxlbWVudEZvcklkKGVycm9yU3RyaW5nLCBub2Rl
SWQpOwogICAgIGlmICghaXM8U3R5bGVkRWxlbWVudD4oZWxlbWVudCkpCi0gICAgICAgIHJldHVy
bjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgIGF1
dG8mIHN0eWxlZEVsZW1lbnQgPSBkb3duY2FzdDxTdHlsZWRFbGVtZW50PigqZWxlbWVudCk7CiAg
ICAgYXV0byYgc3R5bGVTaGVldCA9IGFzSW5zcGVjdG9yU3R5bGVTaGVldChzdHlsZWRFbGVtZW50
KTsKLSAgICBpbmxpbmVTdHlsZSA9IHN0eWxlU2hlZXQuYnVpbGRPYmplY3RGb3JTdHlsZSgmc3R5
bGVkRWxlbWVudC5jc3NvbVN0eWxlKCkpOwotICAgIGlmIChhdXRvIGF0dHJpYnV0ZXMgPSBidWls
ZE9iamVjdEZvckF0dHJpYnV0ZXNTdHlsZShzdHlsZWRFbGVtZW50KSkKLSAgICAgICAgYXR0cmli
dXRlc1N0eWxlID0gV1RGTW92ZShhdHRyaWJ1dGVzKTsKLSAgICBlbHNlCi0gICAgICAgIGF0dHJp
YnV0ZXNTdHlsZSA9IG51bGxwdHI7CisgICAgcmV0dXJuIHsgeyBzdHlsZVNoZWV0LmJ1aWxkT2Jq
ZWN0Rm9yU3R5bGUoJnN0eWxlZEVsZW1lbnQuY3Nzb21TdHlsZSgpKSwgYnVpbGRPYmplY3RGb3JB
dHRyaWJ1dGVzU3R5bGUoc3R5bGVkRWxlbWVudCkgfSB9OwogfQogCi12b2lkIEluc3BlY3RvckNT
U0FnZW50OjpnZXRDb21wdXRlZFN0eWxlRm9yTm9kZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcs
IGludCBub2RlSWQsIFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNT
Uzo6Q1NTQ29tcHV0ZWRTdHlsZVByb3BlcnR5Pj4mIHN0eWxlKQorUHJvdG9jb2w6OkVycm9yU3Ry
aW5nT3I8UmVmPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkNTUzo6Q1NTQ29tcHV0ZWRTdHlsZVBy
b3BlcnR5Pj4+IEluc3BlY3RvckNTU0FnZW50OjpnZXRDb21wdXRlZFN0eWxlRm9yTm9kZShQcm90
b2NvbDo6RE9NOjpOb2RlSWQgbm9kZUlkKQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBl
cnJvclN0cmluZzsKKwogICAgIGF1dG8qIGVsZW1lbnQgPSBlbGVtZW50Rm9ySWQoZXJyb3JTdHJp
bmcsIG5vZGVJZCk7CiAgICAgaWYgKCFlbGVtZW50KQotICAgICAgICByZXR1cm47CisgICAgICAg
IHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAgICBhdXRvIGNvbXB1dGVk
U3R5bGVJbmZvID0gQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uOjpjcmVhdGUoKmVsZW1lbnQs
IHRydWUpOwogICAgIGF1dG8gaW5zcGVjdG9yU3R5bGUgPSBJbnNwZWN0b3JTdHlsZTo6Y3JlYXRl
KEluc3BlY3RvckNTU0lkKCksIFdURk1vdmUoY29tcHV0ZWRTdHlsZUluZm8pLCBudWxscHRyKTsK
LSAgICBzdHlsZSA9IGluc3BlY3RvclN0eWxlLT5idWlsZEFycmF5Rm9yQ29tcHV0ZWRTdHlsZSgp
OworICAgIHJldHVybiBpbnNwZWN0b3JTdHlsZS0+YnVpbGRBcnJheUZvckNvbXB1dGVkU3R5bGUo
KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0QWxsU3R5bGVTaGVldHMoRXJyb3JT
dHJpbmcmLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNT
U1N0eWxlU2hlZXRIZWFkZXI+PiYgc3R5bGVJbmZvcykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09y
PFJlZjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpDU1M6OkNTU1N0eWxlU2hlZXRIZWFkZXI+Pj4g
SW5zcGVjdG9yQ1NTQWdlbnQ6OmdldEFsbFN0eWxlU2hlZXRzKCkKIHsKLSAgICBzdHlsZUluZm9z
ID0gSlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlU2hlZXRI
ZWFkZXI+OjpjcmVhdGUoKTsKKyAgICBhdXRvIGhlYWRlcnMgPSBKU09OOjpBcnJheU9mPFByb3Rv
Y29sOjpDU1M6OkNTU1N0eWxlU2hlZXRIZWFkZXI+OjpjcmVhdGUoKTsKIAogICAgIFZlY3RvcjxJ
bnNwZWN0b3JTdHlsZVNoZWV0Kj4gaW5zcGVjdG9yU3R5bGVTaGVldHM7CiAgICAgY29sbGVjdEFs
bFN0eWxlU2hlZXRzKGluc3BlY3RvclN0eWxlU2hlZXRzKTsKLSAgICBmb3IgKGF1dG8qIGluc3Bl
Y3RvclN0eWxlU2hlZXQgOiBpbnNwZWN0b3JTdHlsZVNoZWV0cykKLSAgICAgICAgc3R5bGVJbmZv
cy0+YWRkSXRlbShpbnNwZWN0b3JTdHlsZVNoZWV0LT5idWlsZE9iamVjdEZvclN0eWxlU2hlZXRJ
bmZvKCkpOworICAgIGZvciAoYXV0byogaW5zcGVjdG9yU3R5bGVTaGVldCA6IGluc3BlY3RvclN0
eWxlU2hlZXRzKSB7CisgICAgICAgIGlmIChhdXRvIGhlYWRlciA9IGluc3BlY3RvclN0eWxlU2hl
ZXQtPmJ1aWxkT2JqZWN0Rm9yU3R5bGVTaGVldEluZm8oKSkKKyAgICAgICAgICAgIGhlYWRlcnMt
PmFkZEl0ZW0oaGVhZGVyLnJlbGVhc2VOb25OdWxsKCkpOworICAgIH0KKworICAgIHJldHVybiBX
VEZNb3ZlKGhlYWRlcnMpOwogfQogCiB2b2lkIEluc3BlY3RvckNTU0FnZW50Ojpjb2xsZWN0QWxs
U3R5bGVTaGVldHMoVmVjdG9yPEluc3BlY3RvclN0eWxlU2hlZXQqPiYgcmVzdWx0KQpAQCAtNTk4
LDExNiArNjAwLDEyNCBAQCB2b2lkIEluc3BlY3RvckNTU0FnZW50Ojpjb2xsZWN0U3R5bGVTaGVl
dHMoQ1NTU3R5bGVTaGVldCogc3R5bGVTaGVldCwgVmVjdG9yPENTUwogICAgIH0KIH0KIAotdm9p
ZCBJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0U3R5bGVTaGVldChFcnJvclN0cmluZyYgZXJyb3JTdHJp
bmcsIGNvbnN0IFN0cmluZyYgc3R5bGVTaGVldElkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6Q1NTOjpDU1NTdHlsZVNoZWV0Qm9keT4mIHN0eWxlU2hlZXRPYmplY3QpCitQcm90b2NvbDo6
RXJyb3JTdHJpbmdPcjxSZWY8UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGVTaGVldEJvZHk+PiBJbnNw
ZWN0b3JDU1NBZ2VudDo6Z2V0U3R5bGVTaGVldChjb25zdCBQcm90b2NvbDo6Q1NTOjpTdHlsZVNo
ZWV0SWQmIHN0eWxlU2hlZXRJZCkKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JT
dHJpbmc7CisKICAgICBJbnNwZWN0b3JTdHlsZVNoZWV0KiBpbnNwZWN0b3JTdHlsZVNoZWV0ID0g
YXNzZXJ0U3R5bGVTaGVldEZvcklkKGVycm9yU3RyaW5nLCBzdHlsZVNoZWV0SWQpOwogICAgIGlm
ICghaW5zcGVjdG9yU3R5bGVTaGVldCkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4g
bWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCi0gICAgc3R5bGVTaGVldE9iamVjdCA9IGlu
c3BlY3RvclN0eWxlU2hlZXQtPmJ1aWxkT2JqZWN0Rm9yU3R5bGVTaGVldCgpOworICAgIGF1dG8g
c3R5bGVTaGVldCA9IGluc3BlY3RvclN0eWxlU2hlZXQtPmJ1aWxkT2JqZWN0Rm9yU3R5bGVTaGVl
dCgpOworICAgIGlmICghc3R5bGVTaGVldCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVk
KCJJbnRlcm5hbCBlcnJvcjogbWlzc2luZyBzdHlsZSBzaGVldCIpOworCisgICAgcmV0dXJuIHN0
eWxlU2hlZXQucmVsZWFzZU5vbk51bGwoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6
Z2V0U3R5bGVTaGVldFRleHQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcm
IHN0eWxlU2hlZXRJZCwgU3RyaW5nKiByZXN1bHQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxT
dHJpbmc+IEluc3BlY3RvckNTU0FnZW50OjpnZXRTdHlsZVNoZWV0VGV4dChjb25zdCBQcm90b2Nv
bDo6Q1NTOjpTdHlsZVNoZWV0SWQmIHN0eWxlU2hlZXRJZCkKIHsKKyAgICBQcm90b2NvbDo6RXJy
b3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBJbnNwZWN0b3JTdHlsZVNoZWV0KiBpbnNwZWN0
b3JTdHlsZVNoZWV0ID0gYXNzZXJ0U3R5bGVTaGVldEZvcklkKGVycm9yU3RyaW5nLCBzdHlsZVNo
ZWV0SWQpOwogICAgIGlmICghaW5zcGVjdG9yU3R5bGVTaGVldCkKLSAgICAgICAgcmV0dXJuOwor
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCiAgICAgYXV0byB0
ZXh0ID0gaW5zcGVjdG9yU3R5bGVTaGVldC0+dGV4dCgpOwotICAgIGlmICghdGV4dC5oYXNFeGNl
cHRpb24oKSkKLSAgICAgICAgKnJlc3VsdCA9IHRleHQucmVsZWFzZVJldHVyblZhbHVlKCk7Cisg
ICAgaWYgKHRleHQuaGFzRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3Rl
ZChJbnNwZWN0b3JET01BZ2VudDo6dG9FcnJvclN0cmluZyh0ZXh0LnJlbGVhc2VFeGNlcHRpb24o
KSkpOworCisgICAgcmV0dXJuIHRleHQucmVsZWFzZVJldHVyblZhbHVlKCk7CiB9CiAKLXZvaWQg
SW5zcGVjdG9yQ1NTQWdlbnQ6OnNldFN0eWxlU2hlZXRUZXh0KEVycm9yU3RyaW5nJiBlcnJvclN0
cmluZywgY29uc3QgU3RyaW5nJiBzdHlsZVNoZWV0SWQsIGNvbnN0IFN0cmluZyYgdGV4dCkKK1By
b3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckNTU0FnZW50OjpzZXRTdHlsZVNo
ZWV0VGV4dChjb25zdCBQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0SWQmIHN0eWxlU2hlZXRJZCwg
Y29uc3QgU3RyaW5nJiB0ZXh0KQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0
cmluZzsKKwogICAgIEluc3BlY3RvclN0eWxlU2hlZXQqIGluc3BlY3RvclN0eWxlU2hlZXQgPSBh
c3NlcnRTdHlsZVNoZWV0Rm9ySWQoZXJyb3JTdHJpbmcsIHN0eWxlU2hlZXRJZCk7CiAgICAgaWYg
KCFpbnNwZWN0b3JTdHlsZVNoZWV0KQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBt
YWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAgICBhdXRvKiBkb21BZ2VudCA9IG1faW5z
dHJ1bWVudGluZ0FnZW50cy5wZXJzaXN0ZW50RE9NQWdlbnQoKTsKLSAgICBpZiAoIWRvbUFnZW50
KSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIkRPTSBkb21haW4gbXVzdCBiZSBlbmFibGVkIl9z
OwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghZG9tQWdlbnQpCisgICAgICAgIHJl
dHVybiBtYWtlVW5leHBlY3RlZCgiRE9NIGRvbWFpbiBtdXN0IGJlIGVuYWJsZWQiX3MpOwogCiAg
ICAgYXV0byByZXN1bHQgPSBkb21BZ2VudC0+aGlzdG9yeSgpLT5wZXJmb3JtKG1ha2VVbmlxdWU8
U2V0U3R5bGVTaGVldFRleHRBY3Rpb24+KGluc3BlY3RvclN0eWxlU2hlZXQsIHRleHQpKTsKICAg
ICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKQotICAgICAgICBlcnJvclN0cmluZyA9IEluc3Bl
Y3RvckRPTUFnZW50Ojp0b0Vycm9yU3RyaW5nKHJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCkpOwor
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoSW5zcGVjdG9yRE9NQWdlbnQ6OnRvRXJyb3JT
dHJpbmcocmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKSkpOworCisgICAgcmV0dXJuIHsgfTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6c2V0U3R5bGVUZXh0KEVycm9yU3RyaW5nJiBlcnJv
clN0cmluZywgY29uc3QgSlNPTjo6T2JqZWN0JiBmdWxsU3R5bGVJZCwgY29uc3QgU3RyaW5nJiB0
ZXh0LCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4mIHJlc3VsdCkK
K1Byb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4+IElu
c3BlY3RvckNTU0FnZW50OjpzZXRTdHlsZVRleHQoUmVmPEpTT046Ok9iamVjdD4mJiBzdHlsZUlk
LCBjb25zdCBTdHJpbmcmIHRleHQpCiB7Ci0gICAgSW5zcGVjdG9yQ1NTSWQgY29tcG91bmRJZChm
dWxsU3R5bGVJZCk7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCisg
ICAgSW5zcGVjdG9yQ1NTSWQgY29tcG91bmRJZChzdHlsZUlkKTsKICAgICBBU1NFUlQoIWNvbXBv
dW5kSWQuaXNFbXB0eSgpKTsKIAogICAgIEluc3BlY3RvclN0eWxlU2hlZXQqIGluc3BlY3RvclN0
eWxlU2hlZXQgPSBhc3NlcnRTdHlsZVNoZWV0Rm9ySWQoZXJyb3JTdHJpbmcsIGNvbXBvdW5kSWQu
c3R5bGVTaGVldElkKCkpOwogICAgIGlmICghaW5zcGVjdG9yU3R5bGVTaGVldCkKLSAgICAgICAg
cmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCiAg
ICAgYXV0byogZG9tQWdlbnQgPSBtX2luc3RydW1lbnRpbmdBZ2VudHMucGVyc2lzdGVudERPTUFn
ZW50KCk7Ci0gICAgaWYgKCFkb21BZ2VudCkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJET00g
ZG9tYWluIG11c3QgYmUgZW5hYmxlZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBp
ZiAoIWRvbUFnZW50KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkRPTSBkb21haW4g
bXVzdCBiZSBlbmFibGVkIl9zKTsKIAogICAgIGF1dG8gcGVyZm9ybVJlc3VsdCA9IGRvbUFnZW50
LT5oaXN0b3J5KCktPnBlcmZvcm0obWFrZVVuaXF1ZTxTZXRTdHlsZVRleHRBY3Rpb24+KGluc3Bl
Y3RvclN0eWxlU2hlZXQsIGNvbXBvdW5kSWQsIHRleHQpKTsKLSAgICBpZiAocGVyZm9ybVJlc3Vs
dC5oYXNFeGNlcHRpb24oKSkgewotICAgICAgICBlcnJvclN0cmluZyA9IEluc3BlY3RvckRPTUFn
ZW50Ojp0b0Vycm9yU3RyaW5nKHBlcmZvcm1SZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAocGVyZm9ybVJlc3VsdC5oYXNFeGNlcHRpb24o
KSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEluc3BlY3RvckRPTUFnZW50Ojp0b0Vy
cm9yU3RyaW5nKHBlcmZvcm1SZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpKSk7CiAKLSAgICByZXN1
bHQgPSBpbnNwZWN0b3JTdHlsZVNoZWV0LT5idWlsZE9iamVjdEZvclN0eWxlKGluc3BlY3RvclN0
eWxlU2hlZXQtPnN0eWxlRm9ySWQoY29tcG91bmRJZCkpOworICAgIHJldHVybiBpbnNwZWN0b3JT
dHlsZVNoZWV0LT5idWlsZE9iamVjdEZvclN0eWxlKGluc3BlY3RvclN0eWxlU2hlZXQtPnN0eWxl
Rm9ySWQoY29tcG91bmRJZCkpOwogfQogCi12b2lkIEluc3BlY3RvckNTU0FnZW50OjpzZXRSdWxl
U2VsZWN0b3IoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBKU09OOjpPYmplY3QmIGZ1
bGxSdWxlSWQsIGNvbnN0IFN0cmluZyYgc2VsZWN0b3IsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpDU1M6OkNTU1J1bGU+JiByZXN1bHQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8
UHJvdG9jb2w6OkNTUzo6Q1NTUnVsZT4+IEluc3BlY3RvckNTU0FnZW50OjpzZXRSdWxlU2VsZWN0
b3IoUmVmPEpTT046Ok9iamVjdD4mJiBydWxlSWQsIGNvbnN0IFN0cmluZyYgc2VsZWN0b3IpCiB7
Ci0gICAgSW5zcGVjdG9yQ1NTSWQgY29tcG91bmRJZChmdWxsUnVsZUlkKTsKKyAgICBQcm90b2Nv
bDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKKyAgICBJbnNwZWN0b3JDU1NJZCBjb21wb3Vu
ZElkKHJ1bGVJZCk7CiAgICAgQVNTRVJUKCFjb21wb3VuZElkLmlzRW1wdHkoKSk7CiAKICAgICBJ
bnNwZWN0b3JTdHlsZVNoZWV0KiBpbnNwZWN0b3JTdHlsZVNoZWV0ID0gYXNzZXJ0U3R5bGVTaGVl
dEZvcklkKGVycm9yU3RyaW5nLCBjb21wb3VuZElkLnN0eWxlU2hlZXRJZCgpKTsKICAgICBpZiAo
IWluc3BlY3RvclN0eWxlU2hlZXQpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1h
a2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgIGF1dG8qIGRvbUFnZW50ID0gbV9pbnN0
cnVtZW50aW5nQWdlbnRzLnBlcnNpc3RlbnRET01BZ2VudCgpOwotICAgIGlmICghZG9tQWdlbnQp
IHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiRE9NIGRvbWFpbiBtdXN0IGJlIGVuYWJsZWQiX3M7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKCFkb21BZ2VudCkKKyAgICAgICAgcmV0
dXJuIG1ha2VVbmV4cGVjdGVkKCJET00gZG9tYWluIG11c3QgYmUgZW5hYmxlZCJfcyk7CiAKICAg
ICBhdXRvIHBlcmZvcm1SZXN1bHQgPSBkb21BZ2VudC0+aGlzdG9yeSgpLT5wZXJmb3JtKG1ha2VV
bmlxdWU8U2V0UnVsZVNlbGVjdG9yQWN0aW9uPihpbnNwZWN0b3JTdHlsZVNoZWV0LCBjb21wb3Vu
ZElkLCBzZWxlY3RvcikpOwotICAgIGlmIChwZXJmb3JtUmVzdWx0Lmhhc0V4Y2VwdGlvbigpKSB7
Ci0gICAgICAgIGVycm9yU3RyaW5nID0gSW5zcGVjdG9yRE9NQWdlbnQ6OnRvRXJyb3JTdHJpbmco
cGVyZm9ybVJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCkpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQorICAgIGlmIChwZXJmb3JtUmVzdWx0Lmhhc0V4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4g
bWFrZVVuZXhwZWN0ZWQoSW5zcGVjdG9yRE9NQWdlbnQ6OnRvRXJyb3JTdHJpbmcocGVyZm9ybVJl
c3VsdC5yZWxlYXNlRXhjZXB0aW9uKCkpKTsKIAotICAgIHJlc3VsdCA9IGluc3BlY3RvclN0eWxl
U2hlZXQtPmJ1aWxkT2JqZWN0Rm9yUnVsZShpbnNwZWN0b3JTdHlsZVNoZWV0LT5ydWxlRm9ySWQo
Y29tcG91bmRJZCkpOworICAgIGF1dG8gcnVsZSA9IGluc3BlY3RvclN0eWxlU2hlZXQtPmJ1aWxk
T2JqZWN0Rm9yUnVsZShpbnNwZWN0b3JTdHlsZVNoZWV0LT5ydWxlRm9ySWQoY29tcG91bmRJZCkp
OworICAgIGlmICghcnVsZSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJJbnRlcm5h
bCBlcnJvcjogbWlzc2luZyBzdHlsZSBzaGVldCIpOworCisgICAgcmV0dXJuIHJ1bGUucmVsZWFz
ZU5vbk51bGwoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6Y3JlYXRlU3R5bGVTaGVl
dChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgZnJhbWVJZCwgU3RyaW5n
KiBzdHlsZVNoZWV0SWQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxQcm90b2NvbDo6Q1NTOjpT
dHlsZVNoZWV0SWQ+IEluc3BlY3RvckNTU0FnZW50OjpjcmVhdGVTdHlsZVNoZWV0KGNvbnN0IFBy
b3RvY29sOjpOZXR3b3JrOjpGcmFtZUlkJiBmcmFtZUlkKQogeworICAgIFByb3RvY29sOjpFcnJv
clN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIGF1dG8qIHBhZ2VBZ2VudCA9IG1faW5zdHJ1bWVu
dGluZ0FnZW50cy5lbmFibGVkUGFnZUFnZW50KCk7Ci0gICAgaWYgKCFwYWdlQWdlbnQpIHsKLSAg
ICAgICAgZXJyb3JTdHJpbmcgPSAiUGFnZSBkb21haW4gbXVzdCBiZSBlbmFibGVkIl9zOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghcGFnZUFnZW50KQorICAgICAgICByZXR1cm4g
bWFrZVVuZXhwZWN0ZWQoIlBhZ2UgZG9tYWluIG11c3QgYmUgZW5hYmxlZCJfcyk7CiAKICAgICBh
dXRvKiBmcmFtZSA9IHBhZ2VBZ2VudC0+YXNzZXJ0RnJhbWUoZXJyb3JTdHJpbmcsIGZyYW1lSWQp
OwogICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGZyYW1l
LT5kb2N1bWVudCgpOwotICAgIGlmICghZG9jdW1lbnQpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcg
PSAiTWlzc2luZyBkb2N1bWVudCBvZiBmcmFtZSBmb3IgZ2l2ZW4gZnJhbWVJZCJfczsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoIWRvY3VtZW50KQorICAgICAgICByZXR1cm4gbWFr
ZVVuZXhwZWN0ZWQoIk1pc3NpbmcgZG9jdW1lbnQgb2YgZnJhbWUgZm9yIGdpdmVuIGZyYW1lSWQi
X3MpOwogCiAgICAgSW5zcGVjdG9yU3R5bGVTaGVldCogaW5zcGVjdG9yU3R5bGVTaGVldCA9IGNy
ZWF0ZUluc3BlY3RvclN0eWxlU2hlZXRGb3JEb2N1bWVudCgqZG9jdW1lbnQpOwotICAgIGlmICgh
aW5zcGVjdG9yU3R5bGVTaGVldCkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJDb3VsZCBub3Qg
Y3JlYXRlIHN0eWxlIHNoZWV0IGZvciBkb2N1bWVudCBvZiBmcmFtZSBmb3IgZ2l2ZW4gZnJhbWVJ
ZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoIWluc3BlY3RvclN0eWxlU2hl
ZXQpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiQ291bGQgbm90IGNyZWF0ZSBzdHls
ZSBzaGVldCBmb3IgZG9jdW1lbnQgb2YgZnJhbWUgZm9yIGdpdmVuIGZyYW1lSWQiX3MpOwogCi0g
ICAgKnN0eWxlU2hlZXRJZCA9IGluc3BlY3RvclN0eWxlU2hlZXQtPmlkKCk7CisgICAgcmV0dXJu
IGluc3BlY3RvclN0eWxlU2hlZXQtPmlkKCk7CiB9CiAKIEluc3BlY3RvclN0eWxlU2hlZXQqIElu
c3BlY3RvckNTU0FnZW50OjpjcmVhdGVJbnNwZWN0b3JTdHlsZVNoZWV0Rm9yRG9jdW1lbnQoRG9j
dW1lbnQmIGRvY3VtZW50KQpAQCAtNzUxLDQxICs3NjEsNDIgQEAgSW5zcGVjdG9yU3R5bGVTaGVl
dCogSW5zcGVjdG9yQ1NTQWdlbnQ6OmNyZWF0ZUluc3BlY3RvclN0eWxlU2hlZXRGb3JEb2N1bWVu
dChEb2MKICAgICByZXR1cm4gaW5zcGVjdG9yU3R5bGVTaGVldHNGb3JEb2N1bWVudC5sYXN0KCku
Z2V0KCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmFkZFJ1bGUoRXJyb3JTdHJpbmcm
IGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHN0eWxlU2hlZXRJZCwgY29uc3QgU3RyaW5nJiBz
ZWxlY3RvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUnVsZT4mIHJlc3Vs
dCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxQcm90b2NvbDo6Q1NTOjpDU1NSdWxlPj4g
SW5zcGVjdG9yQ1NTQWdlbnQ6OmFkZFJ1bGUoY29uc3QgUHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVl
dElkJiBzdHlsZVNoZWV0SWQsIGNvbnN0IFN0cmluZyYgc2VsZWN0b3IpCiB7CisgICAgUHJvdG9j
b2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAgICAgSW5zcGVjdG9yU3R5bGVTaGVldCog
aW5zcGVjdG9yU3R5bGVTaGVldCA9IGFzc2VydFN0eWxlU2hlZXRGb3JJZChlcnJvclN0cmluZywg
c3R5bGVTaGVldElkKTsKICAgICBpZiAoIWluc3BlY3RvclN0eWxlU2hlZXQpCi0gICAgICAgIHJl
dHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAg
IGF1dG8qIGRvbUFnZW50ID0gbV9pbnN0cnVtZW50aW5nQWdlbnRzLnBlcnNpc3RlbnRET01BZ2Vu
dCgpOwotICAgIGlmICghZG9tQWdlbnQpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiRE9NIGRv
bWFpbiBtdXN0IGJlIGVuYWJsZWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYg
KCFkb21BZ2VudCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJET00gZG9tYWluIG11
c3QgYmUgZW5hYmxlZCJfcyk7CiAKICAgICBhdXRvIGFjdGlvbiA9IG1ha2VVbmlxdWU8QWRkUnVs
ZUFjdGlvbj4oaW5zcGVjdG9yU3R5bGVTaGVldCwgc2VsZWN0b3IpOwogICAgIGF1dG8mIHJhd0Fj
dGlvbiA9ICphY3Rpb247CiAgICAgYXV0byBwZXJmb3JtUmVzdWx0ID0gZG9tQWdlbnQtPmhpc3Rv
cnkoKS0+cGVyZm9ybShXVEZNb3ZlKGFjdGlvbikpOwotICAgIGlmIChwZXJmb3JtUmVzdWx0Lmhh
c0V4Y2VwdGlvbigpKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gSW5zcGVjdG9yRE9NQWdlbnQ6
OnRvRXJyb3JTdHJpbmcocGVyZm9ybVJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCkpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQorICAgIGlmIChwZXJmb3JtUmVzdWx0Lmhhc0V4Y2VwdGlvbigpKQor
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoSW5zcGVjdG9yRE9NQWdlbnQ6OnRvRXJyb3JT
dHJpbmcocGVyZm9ybVJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCkpKTsKIAotICAgIEluc3BlY3Rv
ckNTU0lkIHJ1bGVJZCA9IHJhd0FjdGlvbi5uZXdSdWxlSWQoKTsKLSAgICBDU1NTdHlsZVJ1bGUq
IHJ1bGUgPSBpbnNwZWN0b3JTdHlsZVNoZWV0LT5ydWxlRm9ySWQocnVsZUlkKTsKLSAgICByZXN1
bHQgPSBpbnNwZWN0b3JTdHlsZVNoZWV0LT5idWlsZE9iamVjdEZvclJ1bGUocnVsZSk7CisgICAg
YXV0byBydWxlID0gaW5zcGVjdG9yU3R5bGVTaGVldC0+YnVpbGRPYmplY3RGb3JSdWxlKGluc3Bl
Y3RvclN0eWxlU2hlZXQtPnJ1bGVGb3JJZChyYXdBY3Rpb24ubmV3UnVsZUlkKCkpKTsKKyAgICBp
ZiAoIXJ1bGUpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiSW50ZXJuYWwgZXJyb3I6
IG1pc3Npbmcgc3R5bGUgc2hlZXQiKTsKKworICAgIHJldHVybiBydWxlLnJlbGVhc2VOb25OdWxs
KCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldFN1cHBvcnRlZENTU1Byb3BlcnRp
ZXMoRXJyb3JTdHJpbmcmLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29s
OjpDU1M6OkNTU1Byb3BlcnR5SW5mbz4+JiBjc3NQcm9wZXJ0aWVzKQorUHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8UmVmPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkNTUzo6Q1NTUHJvcGVydHlJbmZv
Pj4+IEluc3BlY3RvckNTU0FnZW50OjpnZXRTdXBwb3J0ZWRDU1NQcm9wZXJ0aWVzKCkKIHsKLSAg
ICBhdXRvIHByb3BlcnRpZXMgPSBKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNT
Uzo6Q1NTUHJvcGVydHlJbmZvPjo6Y3JlYXRlKCk7CisgICAgYXV0byBjc3NQcm9wZXJ0aWVzID0g
SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0eUluZm8+OjpjcmVhdGUoKTsK
KwogICAgIGZvciAoaW50IGkgPSBmaXJzdENTU1Byb3BlcnR5OyBpIDw9IGxhc3RDU1NQcm9wZXJ0
eTsgKytpKSB7CiAgICAgICAgIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCA9IGNvbnZlcnRUb0NT
U1Byb3BlcnR5SUQoaSk7CiAgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgdGFrZSBhY2NvdW50IGZv
ciBmbGFncyBpbiBzZXR0aW5ncygpLgogICAgICAgICBpZiAoaXNJbnRlcm5hbENTU1Byb3BlcnR5
KHByb3BlcnR5SUQpIHx8ICFpc0VuYWJsZWRDU1NQcm9wZXJ0eShwcm9wZXJ0eUlEKSkKICAgICAg
ICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIGF1dG8gcHJvcGVydHkgPSBJbnNwZWN0b3I6OlBy
b3RvY29sOjpDU1M6OkNTU1Byb3BlcnR5SW5mbzo6Y3JlYXRlKCkKKyAgICAgICAgYXV0byBwcm9w
ZXJ0eSA9IFByb3RvY29sOjpDU1M6OkNTU1Byb3BlcnR5SW5mbzo6Y3JlYXRlKCkKICAgICAgICAg
ICAgIC5zZXROYW1lKGdldFByb3BlcnR5TmFtZVN0cmluZyhwcm9wZXJ0eUlEKSkKICAgICAgICAg
ICAgIC5yZWxlYXNlKCk7CiAKQEAgLTgyMSw2MyArODMyLDY2IEBAIHZvaWQgSW5zcGVjdG9yQ1NT
QWdlbnQ6OmdldFN1cHBvcnRlZENTU1Byb3BlcnRpZXMoRXJyb3JTdHJpbmcmLCBSZWZQdHI8SlNP
Tjo6QXJyCiAgICAgICAgIGlmIChDU1NQcm9wZXJ0eTo6aXNJbmhlcml0ZWRQcm9wZXJ0eShwcm9w
ZXJ0eUlEKSkKICAgICAgICAgICAgIHByb3BlcnR5LT5zZXRJbmhlcml0ZWQodHJ1ZSk7CiAKLSAg
ICAgICAgcHJvcGVydGllcy0+YWRkSXRlbShXVEZNb3ZlKHByb3BlcnR5KSk7CisgICAgICAgIGNz
c1Byb3BlcnRpZXMtPmFkZEl0ZW0oV1RGTW92ZShwcm9wZXJ0eSkpOwogICAgIH0KLSAgICBjc3NQ
cm9wZXJ0aWVzID0gV1RGTW92ZShwcm9wZXJ0aWVzKTsKKworICAgIHJldHVybiBXVEZNb3ZlKGNz
c1Byb3BlcnRpZXMpOwogfQogCi12b2lkIEluc3BlY3RvckNTU0FnZW50OjpnZXRTdXBwb3J0ZWRT
eXN0ZW1Gb250RmFtaWx5TmFtZXMoRXJyb3JTdHJpbmcmLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxT
dHJpbmc+PiYgZm9udEZhbWlseU5hbWVzKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEpT
T046OkFycmF5T2Y8U3RyaW5nPj4+IEluc3BlY3RvckNTU0FnZW50OjpnZXRTdXBwb3J0ZWRTeXN0
ZW1Gb250RmFtaWx5TmFtZXMoKQogewotICAgIGF1dG8gZmFtaWxpZXMgPSBKU09OOjpBcnJheU9m
PFN0cmluZz46OmNyZWF0ZSgpOworICAgIGF1dG8gZm9udEZhbWlseU5hbWVzID0gSlNPTjo6QXJy
YXlPZjxTdHJpbmc+OjpjcmVhdGUoKTsKIAogICAgIFZlY3RvcjxTdHJpbmc+IHN5c3RlbUZvbnRG
YW1pbGllcyA9IEZvbnRDYWNoZTo6c2luZ2xldG9uKCkuc3lzdGVtRm9udEZhbWlsaWVzKCk7CiAg
ICAgZm9yIChjb25zdCBhdXRvJiBmYW1pbHlOYW1lIDogc3lzdGVtRm9udEZhbWlsaWVzKQotICAg
ICAgICBmYW1pbGllcy0+YWRkSXRlbShmYW1pbHlOYW1lKTsKKyAgICAgICAgZm9udEZhbWlseU5h
bWVzLT5hZGRJdGVtKGZhbWlseU5hbWUpOwogCi0gICAgZm9udEZhbWlseU5hbWVzID0gV1RGTW92
ZShmYW1pbGllcyk7CisgICAgcmV0dXJuIFdURk1vdmUoZm9udEZhbWlseU5hbWVzKTsKIH0KIAot
dm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6Zm9yY2VQc2V1ZG9TdGF0ZShFcnJvclN0cmluZyYgZXJy
b3JTdHJpbmcsIGludCBub2RlSWQsIGNvbnN0IEpTT046OkFycmF5JiBmb3JjZWRQc2V1ZG9DbGFz
c2VzKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmZv
cmNlUHNldWRvU3RhdGUoUHJvdG9jb2w6OkRPTTo6Tm9kZUlkIG5vZGVJZCwgUmVmPEpTT046OkFy
cmF5PiYmIGZvcmNlZFBzZXVkb0NsYXNzZXMpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5n
IGVycm9yU3RyaW5nOworCiAgICAgYXV0byogZG9tQWdlbnQgPSBtX2luc3RydW1lbnRpbmdBZ2Vu
dHMucGVyc2lzdGVudERPTUFnZW50KCk7Ci0gICAgaWYgKCFkb21BZ2VudCkgewotICAgICAgICBl
cnJvclN0cmluZyA9ICJET00gZG9tYWluIG11c3QgYmUgZW5hYmxlZCJfczsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KKyAgICBpZiAoIWRvbUFnZW50KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoIkRPTSBkb21haW4gbXVzdCBiZSBlbmFibGVkIl9zKTsKIAogICAgIEVsZW1lbnQqIGVs
ZW1lbnQgPSBkb21BZ2VudC0+YXNzZXJ0RWxlbWVudChlcnJvclN0cmluZywgbm9kZUlkKTsKICAg
ICBpZiAoIWVsZW1lbnQpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4
cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgIC8vIFJldHVybiBlYXJseSBpZiB0aGUgZm9yY2Vk
IHBzZXVkbyBzdGF0ZSB3YXMgYWxyZWFkeSBzZXQgY29ycmVjdGx5LgogICAgIHVuc2lnbmVkIGZv
cmNlZFBzZXVkb1N0YXRlID0gY29tcHV0ZVBzZXVkb0NsYXNzTWFzayhmb3JjZWRQc2V1ZG9DbGFz
c2VzKTsKICAgICBpZiAoZm9yY2VkUHNldWRvU3RhdGUpIHsKICAgICAgICAgYXV0byBpdGVyYXRv
ciA9IG1fbm9kZUlkVG9Gb3JjZWRQc2V1ZG9TdGF0ZS5hZGQobm9kZUlkLCAwKS5pdGVyYXRvcjsK
ICAgICAgICAgaWYgKGZvcmNlZFBzZXVkb1N0YXRlID09IGl0ZXJhdG9yLT52YWx1ZSkKLSAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVybiB7IH07CiAgICAgICAgIGl0ZXJhdG9y
LT52YWx1ZSA9IGZvcmNlZFBzZXVkb1N0YXRlOwogICAgICAgICBtX2RvY3VtZW50c1dpdGhGb3Jj
ZWRQc2V1ZG9TdGF0ZXMuYWRkKCZlbGVtZW50LT5kb2N1bWVudCgpKTsKICAgICB9IGVsc2Ugewog
ICAgICAgICBpZiAoIW1fbm9kZUlkVG9Gb3JjZWRQc2V1ZG9TdGF0ZS5yZW1vdmUobm9kZUlkKSkK
LSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVybiB7IH07CiAgICAgICAgIGlm
IChtX25vZGVJZFRvRm9yY2VkUHNldWRvU3RhdGUuaXNFbXB0eSgpKQogICAgICAgICAgICAgbV9k
b2N1bWVudHNXaXRoRm9yY2VkUHNldWRvU3RhdGVzLmNsZWFyKCk7CiAgICAgfQogCiAgICAgZWxl
bWVudC0+ZG9jdW1lbnQoKS5zdHlsZVNjb3BlKCkuZGlkQ2hhbmdlU3R5bGVTaGVldEVudmlyb25t
ZW50KCk7CisKKyAgICByZXR1cm4geyB9OwogfQogCiBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5s
aW5lU3R5bGUmIEluc3BlY3RvckNTU0FnZW50Ojphc0luc3BlY3RvclN0eWxlU2hlZXQoU3R5bGVk
RWxlbWVudCYgZWxlbWVudCkKIHsKICAgICByZXR1cm4gbV9ub2RlVG9JbnNwZWN0b3JTdHlsZVNo
ZWV0LmVuc3VyZSgmZWxlbWVudCwgW3RoaXMsICZlbGVtZW50XSB7CiAgICAgICAgIFN0cmluZyBu
ZXdTdHlsZVNoZWV0SWQgPSBTdHJpbmc6Om51bWJlcihtX2xhc3RTdHlsZVNoZWV0SWQrKyk7Ci0g
ICAgICAgIGF1dG8gaW5zcGVjdG9yU3R5bGVTaGVldCA9IEluc3BlY3RvclN0eWxlU2hlZXRGb3JJ
bmxpbmVTdHlsZTo6Y3JlYXRlKG1faW5zdHJ1bWVudGluZ0FnZW50cy5lbmFibGVkUGFnZUFnZW50
KCksIG5ld1N0eWxlU2hlZXRJZCwgZWxlbWVudCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpT
dHlsZVNoZWV0T3JpZ2luOjpBdXRob3IsIHRoaXMpOworICAgICAgICBhdXRvIGluc3BlY3RvclN0
eWxlU2hlZXQgPSBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU6OmNyZWF0ZShtX2lu
c3RydW1lbnRpbmdBZ2VudHMuZW5hYmxlZFBhZ2VBZ2VudCgpLCBuZXdTdHlsZVNoZWV0SWQsIGVs
ZW1lbnQsIFByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW46OkF1dGhvciwgdGhpcyk7CiAg
ICAgICAgIG1faWRUb0luc3BlY3RvclN0eWxlU2hlZXQuc2V0KG5ld1N0eWxlU2hlZXRJZCwgaW5z
cGVjdG9yU3R5bGVTaGVldC5jb3B5UmVmKCkpOwogICAgICAgICByZXR1cm4gaW5zcGVjdG9yU3R5
bGVTaGVldDsKICAgICB9KS5pdGVyYXRvci0+dmFsdWU7CiB9CiAKLUVsZW1lbnQqIEluc3BlY3Rv
ckNTU0FnZW50OjplbGVtZW50Rm9ySWQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgbm9k
ZUlkKQorRWxlbWVudCogSW5zcGVjdG9yQ1NTQWdlbnQ6OmVsZW1lbnRGb3JJZChQcm90b2NvbDo6
RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBQcm90b2NvbDo6RE9NOjpOb2RlSWQgbm9kZUlkKQog
ewogICAgIGF1dG8qIGRvbUFnZW50ID0gbV9pbnN0cnVtZW50aW5nQWdlbnRzLnBlcnNpc3RlbnRE
T01BZ2VudCgpOwogICAgIGlmICghZG9tQWdlbnQpIHsKQEAgLTkxNCw3ICs5MjgsNyBAQCBJbnNw
ZWN0b3JTdHlsZVNoZWV0KiBJbnNwZWN0b3JDU1NBZ2VudDo6YmluZFN0eWxlU2hlZXQoQ1NTU3R5
bGVTaGVldCogc3R5bGVTaGVldAogICAgIHJldHVybiBpbnNwZWN0b3JTdHlsZVNoZWV0LmdldCgp
OwogfQogCi1JbnNwZWN0b3JTdHlsZVNoZWV0KiBJbnNwZWN0b3JDU1NBZ2VudDo6YXNzZXJ0U3R5
bGVTaGVldEZvcklkKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBzdHls
ZVNoZWV0SWQpCitJbnNwZWN0b3JTdHlsZVNoZWV0KiBJbnNwZWN0b3JDU1NBZ2VudDo6YXNzZXJ0
U3R5bGVTaGVldEZvcklkKFByb3RvY29sOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0
IFN0cmluZyYgc3R5bGVTaGVldElkKQogewogICAgIElkVG9JbnNwZWN0b3JTdHlsZVNoZWV0Ojpp
dGVyYXRvciBpdCA9IG1faWRUb0luc3BlY3RvclN0eWxlU2hlZXQuZmluZChzdHlsZVNoZWV0SWQp
OwogICAgIGlmIChpdCA9PSBtX2lkVG9JbnNwZWN0b3JTdHlsZVNoZWV0LmVuZCgpKSB7CkBAIC05
MjQsMjkgKzkzOCwyOSBAQCBJbnNwZWN0b3JTdHlsZVNoZWV0KiBJbnNwZWN0b3JDU1NBZ2VudDo6
YXNzZXJ0U3R5bGVTaGVldEZvcklkKEVycm9yU3RyaW5nJiBlcnJvcgogICAgIHJldHVybiBpdC0+
dmFsdWUuZ2V0KCk7CiB9CiAKLUluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9y
aWdpbiBJbnNwZWN0b3JDU1NBZ2VudDo6ZGV0ZWN0T3JpZ2luKENTU1N0eWxlU2hlZXQqIHBhZ2VT
dHlsZVNoZWV0LCBEb2N1bWVudCogb3duZXJEb2N1bWVudCkKK1Byb3RvY29sOjpDU1M6OlN0eWxl
U2hlZXRPcmlnaW4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmRldGVjdE9yaWdpbihDU1NTdHlsZVNoZWV0
KiBwYWdlU3R5bGVTaGVldCwgRG9jdW1lbnQqIG93bmVyRG9jdW1lbnQpCiB7CiAgICAgaWYgKG1f
Y3JlYXRpbmdWaWFJbnNwZWN0b3JTdHlsZVNoZWV0KQotICAgICAgICByZXR1cm4gSW5zcGVjdG9y
OjpQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luOjpJbnNwZWN0b3I7CisgICAgICAgIHJl
dHVybiBQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luOjpJbnNwZWN0b3I7CiAKICAgICBp
ZiAocGFnZVN0eWxlU2hlZXQgJiYgIXBhZ2VTdHlsZVNoZWV0LT5vd25lck5vZGUoKSAmJiBwYWdl
U3R5bGVTaGVldC0+aHJlZigpLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6VXNlckFnZW50OworICAgICAgICByZXR1
cm4gUHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6VXNlckFnZW50OwogCiAgICAgaWYg
KHBhZ2VTdHlsZVNoZWV0ICYmIHBhZ2VTdHlsZVNoZWV0LT5jb250ZW50cygpLmlzVXNlclN0eWxl
U2hlZXQoKSkKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U3R5bGVT
aGVldE9yaWdpbjo6VXNlcjsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpDU1M6OlN0eWxlU2hl
ZXRPcmlnaW46OlVzZXI7CiAKICAgICBhdXRvIGl0ZXJhdG9yID0gbV9kb2N1bWVudFRvSW5zcGVj
dG9yU3R5bGVTaGVldC5maW5kKG93bmVyRG9jdW1lbnQpOwogICAgIGlmIChpdGVyYXRvciAhPSBt
X2RvY3VtZW50VG9JbnNwZWN0b3JTdHlsZVNoZWV0LmVuZCgpKSB7CiAgICAgICAgIGZvciAoYXV0
byYgaW5zcGVjdG9yU3R5bGVTaGVldCA6IGl0ZXJhdG9yLT52YWx1ZSkgewogICAgICAgICAgICAg
aWYgKHBhZ2VTdHlsZVNoZWV0ID09IGluc3BlY3RvclN0eWxlU2hlZXQtPnBhZ2VTdHlsZVNoZWV0
KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U3R5
bGVTaGVldE9yaWdpbjo6SW5zcGVjdG9yOworICAgICAgICAgICAgICAgIHJldHVybiBQcm90b2Nv
bDo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luOjpJbnNwZWN0b3I7CiAgICAgICAgIH0KICAgICB9CiAK
LSAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luOjpB
dXRob3I7CisgICAgcmV0dXJuIFByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW46OkF1dGhv
cjsKIH0KIAotUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUnVsZT4gSW5zcGVj
dG9yQ1NTQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yUnVsZShjb25zdCBTdHlsZVJ1bGUqIHN0eWxlUnVs
ZSwgU3R5bGU6OlJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBFbGVtZW50JiBlbGVtZW50KQorUmVm
UHRyPFByb3RvY29sOjpDU1M6OkNTU1J1bGU+IEluc3BlY3RvckNTU0FnZW50OjpidWlsZE9iamVj
dEZvclJ1bGUoY29uc3QgU3R5bGVSdWxlKiBzdHlsZVJ1bGUsIFN0eWxlOjpSZXNvbHZlciYgc3R5
bGVSZXNvbHZlciwgRWxlbWVudCYgZWxlbWVudCkKIHsKICAgICBpZiAoIXN0eWxlUnVsZSkKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC05NjgsNyArOTgyLDcgQEAgUmVmUHRyPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkNTUzo6Q1NTUnVsZT4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmJ1aWxkT2JqZWN0
Rm9yUnVsZSgKICAgICByZXR1cm4gaW5zcGVjdG9yU3R5bGVTaGVldCA/IGluc3BlY3RvclN0eWxl
U2hlZXQtPmJ1aWxkT2JqZWN0Rm9yUnVsZShjc3NvbVdyYXBwZXIpIDogbnVsbHB0cjsKIH0KIAot
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUnVsZT4gSW5zcGVjdG9yQ1NTQWdl
bnQ6OmJ1aWxkT2JqZWN0Rm9yUnVsZShDU1NTdHlsZVJ1bGUqIHJ1bGUpCitSZWZQdHI8UHJvdG9j
b2w6OkNTUzo6Q1NTUnVsZT4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yUnVsZShD
U1NTdHlsZVJ1bGUqIHJ1bGUpCiB7CiAgICAgaWYgKCFydWxlKQogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKQEAgLTk3OCwxNiArOTkyLDE2IEBAIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpD
U1M6OkNTU1J1bGU+IEluc3BlY3RvckNTU0FnZW50OjpidWlsZE9iamVjdEZvclJ1bGUoCiAgICAg
cmV0dXJuIGluc3BlY3RvclN0eWxlU2hlZXQgPyBpbnNwZWN0b3JTdHlsZVNoZWV0LT5idWlsZE9i
amVjdEZvclJ1bGUocnVsZSkgOiBudWxscHRyOwogfQogCi1SZWZQdHI8SlNPTjo6QXJyYXlPZjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlJ1bGVNYXRjaD4+IEluc3BlY3RvckNTU0FnZW50Ojpi
dWlsZEFycmF5Rm9yTWF0Y2hlZFJ1bGVMaXN0KGNvbnN0IFZlY3RvcjxSZWZQdHI8Y29uc3QgU3R5
bGVSdWxlPj4mIG1hdGNoZWRSdWxlcywgU3R5bGU6OlJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBF
bGVtZW50JiBlbGVtZW50LCBQc2V1ZG9JZCBwc2V1ZG9JZCkKK1JlZjxKU09OOjpBcnJheU9mPFBy
b3RvY29sOjpDU1M6OlJ1bGVNYXRjaD4+IEluc3BlY3RvckNTU0FnZW50OjpidWlsZEFycmF5Rm9y
TWF0Y2hlZFJ1bGVMaXN0KGNvbnN0IFZlY3RvcjxSZWZQdHI8Y29uc3QgU3R5bGVSdWxlPj4mIG1h
dGNoZWRSdWxlcywgU3R5bGU6OlJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBFbGVtZW50JiBlbGVt
ZW50LCBQc2V1ZG9JZCBwc2V1ZG9JZCkKIHsKLSAgICBhdXRvIHJlc3VsdCA9IEpTT046OkFycmF5
T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpSdWxlTWF0Y2g+OjpjcmVhdGUoKTsKKyAgICBh
dXRvIHJlc3VsdCA9IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkNTUzo6UnVsZU1hdGNoPjo6Y3Jl
YXRlKCk7CiAKICAgICBTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5nQ29udGV4dCBjb250ZXh0KFNl
bGVjdG9yQ2hlY2tlcjo6TW9kZTo6Q29sbGVjdGluZ1J1bGVzKTsKICAgICBjb250ZXh0LnBzZXVk
b0lkID0gcHNldWRvSWQgIT0gUHNldWRvSWQ6Ok5vbmUgPyBwc2V1ZG9JZCA6IGVsZW1lbnQucHNl
dWRvSWQoKTsKICAgICBTZWxlY3RvckNoZWNrZXIgc2VsZWN0b3JDaGVja2VyKGVsZW1lbnQuZG9j
dW1lbnQoKSk7CiAKICAgICBmb3IgKGF1dG8mIG1hdGNoZWRSdWxlIDogbWF0Y2hlZFJ1bGVzKSB7
Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1J1bGU+IHJ1bGVP
YmplY3QgPSBidWlsZE9iamVjdEZvclJ1bGUobWF0Y2hlZFJ1bGUuZ2V0KCksIHN0eWxlUmVzb2x2
ZXIsIGVsZW1lbnQpOworICAgICAgICBSZWZQdHI8UHJvdG9jb2w6OkNTUzo6Q1NTUnVsZT4gcnVs
ZU9iamVjdCA9IGJ1aWxkT2JqZWN0Rm9yUnVsZShtYXRjaGVkUnVsZS5nZXQoKSwgc3R5bGVSZXNv
bHZlciwgZWxlbWVudCk7CiAgICAgICAgIGlmICghcnVsZU9iamVjdCkKICAgICAgICAgICAgIGNv
bnRpbnVlOwogCkBAIC0xMDAxLDggKzEwMTUsOCBAQCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpDU1M6OlJ1bGVNYXRjaD4+IEluc3BlY3RvckNTU0FnZW50OjpidQog
ICAgICAgICAgICAgKytpbmRleDsKICAgICAgICAgfQogCi0gICAgICAgIGF1dG8gbWF0Y2ggPSBJ
bnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlJ1bGVNYXRjaDo6Y3JlYXRlKCkKLSAgICAgICAgICAg
IC5zZXRSdWxlKFdURk1vdmUocnVsZU9iamVjdCkpCisgICAgICAgIGF1dG8gbWF0Y2ggPSBQcm90
b2NvbDo6Q1NTOjpSdWxlTWF0Y2g6OmNyZWF0ZSgpCisgICAgICAgICAgICAuc2V0UnVsZShydWxl
T2JqZWN0LnJlbGVhc2VOb25OdWxsKCkpCiAgICAgICAgICAgICAuc2V0TWF0Y2hpbmdTZWxlY3Rv
cnMoV1RGTW92ZShtYXRjaGluZ1NlbGVjdG9ycykpCiAgICAgICAgICAgICAucmVsZWFzZSgpOwog
ICAgICAgICByZXN1bHQtPmFkZEl0ZW0oV1RGTW92ZShtYXRjaCkpOwpAQCAtMTAxMSw3ICsxMDI1
LDcgQEAgUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpSdWxl
TWF0Y2g+PiBJbnNwZWN0b3JDU1NBZ2VudDo6YnUKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1S
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4gSW5zcGVjdG9yQ1NTQWdl
bnQ6OmJ1aWxkT2JqZWN0Rm9yQXR0cmlidXRlc1N0eWxlKFN0eWxlZEVsZW1lbnQmIGVsZW1lbnQp
CitSZWZQdHI8UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+IEluc3BlY3RvckNTU0FnZW50OjpidWls
ZE9iamVjdEZvckF0dHJpYnV0ZXNTdHlsZShTdHlsZWRFbGVtZW50JiBlbGVtZW50KQogewogICAg
IC8vIEZJWE1FOiBVZ2xpbmVzcyBiZWxvdy4KICAgICBhdXRvKiBhdHRyaWJ1dGVTdHlsZSA9IGNv
bnN0X2Nhc3Q8U3R5bGVQcm9wZXJ0aWVzKj4oZWxlbWVudC5wcmVzZW50YXRpb25BdHRyaWJ1dGVT
dHlsZSgpKTsKQEAgLTEwMjMsNyArMTAzNyw3IEBAIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29s
OjpDU1M6OkNTU1N0eWxlPiBJbnNwZWN0b3JDU1NBZ2VudDo6YnVpbGRPYmplY3RGb3JBdHRyCiAg
ICAgcmV0dXJuIGluc3BlY3RvclN0eWxlLT5idWlsZE9iamVjdEZvclN0eWxlKCk7CiB9CiAKLXZv
aWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmRpZFJlbW92ZURPTU5vZGUoTm9kZSYgbm9kZSwgaW50IG5v
ZGVJZCkKK3ZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmRpZFJlbW92ZURPTU5vZGUoTm9kZSYgbm9k
ZSwgUHJvdG9jb2w6OkRPTTo6Tm9kZUlkIG5vZGVJZCkKIHsKICAgICBtX25vZGVJZFRvRm9yY2Vk
UHNldWRvU3RhdGUucmVtb3ZlKG5vZGVJZCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ1NTQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ1NTQWdlbnQuaAppbmRleCBmYTFkNjcxZGQ4MzNiMDAz
YTYxZGMyNzk2NTk2NjkyMTYxYWFkZjdmLi5kMmZjYTc5NWRjNjgwZjk4ZGU4NmNiY2MxZDZlOTBj
OGNhN2M3MGIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0lu
c3BlY3RvckNTU0FnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9J
bnNwZWN0b3JDU1NBZ2VudC5oCkBAIC02MSw3ICs2MSw3IEBAIGNsYXNzIEluc3BlY3RvckNTU0Fn
ZW50IGZpbmFsIDogcHVibGljIEluc3BlY3RvckFnZW50QmFzZSAsIHB1YmxpYyBJbnNwZWN0b3I6
OkNTCiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgSW5zcGVjdG9y
Q1NTQWdlbnQoV2ViQWdlbnRDb250ZXh0Jik7Ci0gICAgfkluc3BlY3RvckNTU0FnZW50KCkgb3Zl
cnJpZGU7CisgICAgfkluc3BlY3RvckNTU0FnZW50KCk7CiAKICAgICBjbGFzcyBJbmxpbmVTdHls
ZU92ZXJyaWRlU2NvcGUgewogICAgIHB1YmxpYzoKQEAgLTgzLDI5ICs4MywyOSBAQCBwdWJsaWM6
CiAgICAgc3RhdGljIENTU1N0eWxlUnVsZSogYXNDU1NTdHlsZVJ1bGUoQ1NTUnVsZSYpOwogCiAg
ICAgLy8gSW5zcGVjdG9yQWdlbnRCYXNlCi0gICAgdm9pZCBkaWRDcmVhdGVGcm9udGVuZEFuZEJh
Y2tlbmQoSW5zcGVjdG9yOjpGcm9udGVuZFJvdXRlciosIEluc3BlY3Rvcjo6QmFja2VuZERpc3Bh
dGNoZXIqKSBvdmVycmlkZTsKLSAgICB2b2lkIHdpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5k
KEluc3BlY3Rvcjo6RGlzY29ubmVjdFJlYXNvbikgb3ZlcnJpZGU7CisgICAgdm9pZCBkaWRDcmVh
dGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9udGVuZFJvdXRlciosIEluc3BlY3Rv
cjo6QmFja2VuZERpc3BhdGNoZXIqKTsKKyAgICB2b2lkIHdpbGxEZXN0cm95RnJvbnRlbmRBbmRC
YWNrZW5kKEluc3BlY3Rvcjo6RGlzY29ubmVjdFJlYXNvbik7CiAKICAgICAvLyBDU1NCYWNrZW5k
RGlzcGF0Y2hlckhhbmRsZXIKLSAgICB2b2lkIGVuYWJsZShFcnJvclN0cmluZyYpIG92ZXJyaWRl
OwotICAgIHZvaWQgZGlzYWJsZShFcnJvclN0cmluZyYpIG92ZXJyaWRlOwotICAgIHZvaWQgZ2V0
Q29tcHV0ZWRTdHlsZUZvck5vZGUoRXJyb3JTdHJpbmcmLCBpbnQgbm9kZUlkLCBSZWZQdHI8SlNP
Tjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU0NvbXB1dGVkU3R5bGVQcm9w
ZXJ0eT4+Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBnZXRJbmxpbmVTdHlsZXNGb3JOb2RlKEVycm9y
U3RyaW5nJiwgaW50IG5vZGVJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NT
U3R5bGU+JiBpbmxpbmVTdHlsZSwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NT
U3R5bGU+JiBhdHRyaWJ1dGVzKSBvdmVycmlkZTsKLSAgICB2b2lkIGdldE1hdGNoZWRTdHlsZXNG
b3JOb2RlKEVycm9yU3RyaW5nJiwgaW50IG5vZGVJZCwgY29uc3QgYm9vbCogaW5jbHVkZVBzZXVk
bywgY29uc3QgYm9vbCogaW5jbHVkZUluaGVyaXRlZCwgUmVmUHRyPEpTT046OkFycmF5T2Y8SW5z
cGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpSdWxlTWF0Y2g+PiYgbWF0Y2hlZENTU1J1bGVzLCBSZWZQ
dHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlBzZXVkb0lkTWF0Y2hl
cz4+JiwgUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpJbmhl
cml0ZWRTdHlsZUVudHJ5Pj4mIGluaGVyaXRlZEVudHJpZXMpIG92ZXJyaWRlOwotICAgIHZvaWQg
Z2V0QWxsU3R5bGVTaGVldHMoRXJyb3JTdHJpbmcmLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlU2hlZXRIZWFkZXI+PiYgc3R5bGVTaGVldElu
Zm9zKSBvdmVycmlkZTsKLSAgICB2b2lkIGdldFN0eWxlU2hlZXQoRXJyb3JTdHJpbmcmLCBjb25z
dCBTdHJpbmcmIHN0eWxlU2hlZXRJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6
Q1NTU3R5bGVTaGVldEJvZHk+JiByZXN1bHQpIG92ZXJyaWRlOwotICAgIHZvaWQgZ2V0U3R5bGVT
aGVldFRleHQoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHN0eWxlU2hlZXRJZCwgU3RyaW5n
KiByZXN1bHQpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0U3R5bGVTaGVldFRleHQoRXJyb3JTdHJp
bmcmLCBjb25zdCBTdHJpbmcmIHN0eWxlU2hlZXRJZCwgY29uc3QgU3RyaW5nJiB0ZXh0KSBvdmVy
cmlkZTsKLSAgICB2b2lkIHNldFN0eWxlVGV4dChFcnJvclN0cmluZyYsIGNvbnN0IEpTT046Ok9i
amVjdCYgc3R5bGVJZCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6Q1NTOjpDU1NTdHlsZT4mIHJlc3VsdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRSdWxl
U2VsZWN0b3IoRXJyb3JTdHJpbmcmLCBjb25zdCBKU09OOjpPYmplY3QmIHJ1bGVJZCwgY29uc3Qg
U3RyaW5nJiBzZWxlY3RvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUnVs
ZT4mIHJlc3VsdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjcmVhdGVTdHlsZVNoZWV0KEVycm9yU3Ry
aW5nJiwgY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBTdHJpbmcqIHN0eWxlU2hlZXRJZCkgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCBhZGRSdWxlKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBzdHlsZVNo
ZWV0SWQsIGNvbnN0IFN0cmluZyYgc2VsZWN0b3IsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29s
OjpDU1M6OkNTU1J1bGU+JiByZXN1bHQpIG92ZXJyaWRlOwotICAgIHZvaWQgZ2V0U3VwcG9ydGVk
Q1NTUHJvcGVydGllcyhFcnJvclN0cmluZyYsIFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkNTUzo6Q1NTUHJvcGVydHlJbmZvPj4mIHJlc3VsdCkgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCBnZXRTdXBwb3J0ZWRTeXN0ZW1Gb250RmFtaWx5TmFtZXMoRXJyb3JTdHJpbmcmLCBS
ZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiYgcmVzdWx0KSBvdmVycmlkZTsKLSAgICB2b2lk
IGZvcmNlUHNldWRvU3RhdGUoRXJyb3JTdHJpbmcmLCBpbnQgbm9kZUlkLCBjb25zdCBKU09OOjpB
cnJheSYgZm9yY2VkUHNldWRvQ2xhc3Nlcykgb3ZlcnJpZGU7CisgICAgSW5zcGVjdG9yOjpQcm90
b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBlbmFibGUoKTsKKyAgICBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGRpc2FibGUoKTsKKyAgICBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkNTUzo6Q1NTQ29tcHV0ZWRTdHlsZVByb3BlcnR5Pj4+IGdldENvbXB1dGVkU3R5bGVGb3JOb2Rl
KEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkKTsKKyAgICBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpFcnJvclN0cmluZ09yPHN0ZDo6dHVwbGU8UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkNTUzo6Q1NTU3R5bGU+IC8qIGlubGluZVN0eWxlICovLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6Q1NTOjpDU1NTdHlsZT4gLyogYXR0cmlidXRlc1N0eWxlICovPj4gZ2V0SW5saW5lU3R5
bGVzRm9yTm9kZShJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZCk7CisgICAgSW5zcGVj
dG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxzdGQ6OnR1cGxlPFJlZlB0cjxKU09OOjpBcnJh
eU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6UnVsZU1hdGNoPj4sIFJlZlB0cjxKU09OOjpB
cnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6UHNldWRvSWRNYXRjaGVzPj4sIFJlZlB0
cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6SW5oZXJpdGVkU3R5bGVF
bnRyeT4+Pj4gZ2V0TWF0Y2hlZFN0eWxlc0Zvck5vZGUoSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9N
OjpOb2RlSWQsIE9wdGlvbmFsPGJvb2w+JiYgaW5jbHVkZVBzZXVkbywgT3B0aW9uYWw8Ym9vbD4m
JiBpbmNsdWRlSW5oZXJpdGVkKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmlu
Z09yPFJlZjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGVT
aGVldEhlYWRlcj4+PiBnZXRBbGxTdHlsZVNoZWV0cygpOworICAgIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkVycm9yU3RyaW5nT3I8UmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGVT
aGVldEJvZHk+PiBnZXRTdHlsZVNoZWV0KGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6
U3R5bGVTaGVldElkJik7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxT
dHJpbmc+IGdldFN0eWxlU2hlZXRUZXh0KGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6
U3R5bGVTaGVldElkJik7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2
b2lkPiBzZXRTdHlsZVNoZWV0VGV4dChjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlN0
eWxlU2hlZXRJZCYsIGNvbnN0IFN0cmluZyYgdGV4dCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6RXJyb3JTdHJpbmdPcjxSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4+
IHNldFN0eWxlVGV4dChSZWY8SlNPTjo6T2JqZWN0PiYmIHN0eWxlSWQsIGNvbnN0IFN0cmluZyYg
dGV4dCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SW5zcGVj
dG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NSdWxlPj4gc2V0UnVsZVNlbGVjdG9yKFJlZjxKU09OOjpP
YmplY3Q+JiYgcnVsZUlkLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yKTsKKyAgICBJbnNwZWN0b3I6
OlByb3RvY29sOjpFcnJvclN0cmluZ09yPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U3R5bGVT
aGVldElkPiBjcmVhdGVTdHlsZVNoZWV0KGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdv
cms6OkZyYW1lSWQmKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFJl
ZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1J1bGU+PiBhZGRSdWxlKGNvbnN0IEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldElkJiwgY29uc3QgU3RyaW5nJiBzZWxlY3Rv
cik7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SlNPTjo6QXJy
YXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1Byb3BlcnR5SW5mbz4+PiBnZXRTdXBw
b3J0ZWRDU1NQcm9wZXJ0aWVzKCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJp
bmdPcjxSZWY8SlNPTjo6QXJyYXlPZjxTdHJpbmc+Pj4gZ2V0U3VwcG9ydGVkU3lzdGVtRm9udEZh
bWlseU5hbWVzKCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lk
PiBmb3JjZVBzZXVkb1N0YXRlKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkLCBSZWY8
SlNPTjo6QXJyYXk+JiYgZm9yY2VkUHNldWRvQ2xhc3Nlcyk7CiAKICAgICAvLyBJbnNwZWN0b3JT
dHlsZVNoZWV0OjpMaXN0ZW5lcgotICAgIHZvaWQgc3R5bGVTaGVldENoYW5nZWQoSW5zcGVjdG9y
U3R5bGVTaGVldCopIG92ZXJyaWRlOworICAgIHZvaWQgc3R5bGVTaGVldENoYW5nZWQoSW5zcGVj
dG9yU3R5bGVTaGVldCopOwogCiAgICAgLy8gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uCiAgICAg
dm9pZCBkb2N1bWVudERldGFjaGVkKERvY3VtZW50Jik7CkBAIC0xMTQsNyArMTE0LDcgQEAgcHVi
bGljOgogICAgIGJvb2wgZm9yY2VQc2V1ZG9TdGF0ZShjb25zdCBFbGVtZW50JiwgQ1NTU2VsZWN0
b3I6OlBzZXVkb0NsYXNzVHlwZSk7CiAKICAgICAvLyBJbnNwZWN0b3JET01BZ2VudCBob29rcwot
ICAgIHZvaWQgZGlkUmVtb3ZlRE9NTm9kZShOb2RlJiwgaW50IG5vZGVJZCk7CisgICAgdm9pZCBk
aWRSZW1vdmVET01Ob2RlKE5vZGUmLCBJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZCk7
CiAgICAgdm9pZCBkaWRNb2RpZnlET01BdHRyKEVsZW1lbnQmKTsKIAogICAgIHZvaWQgcmVzZXQo
KTsKQEAgLTEyNiwyOCArMTI2LDI4IEBAIHByaXZhdGU6CiAgICAgY2xhc3MgU2V0UnVsZVNlbGVj
dG9yQWN0aW9uOwogICAgIGNsYXNzIEFkZFJ1bGVBY3Rpb247CiAKLSAgICB0eXBlZGVmIEhhc2hN
YXA8U3RyaW5nLCBSZWZQdHI8SW5zcGVjdG9yU3R5bGVTaGVldD4+IElkVG9JbnNwZWN0b3JTdHls
ZVNoZWV0OworICAgIHR5cGVkZWYgSGFzaE1hcDxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlN0
eWxlU2hlZXRJZCwgUmVmUHRyPEluc3BlY3RvclN0eWxlU2hlZXQ+PiBJZFRvSW5zcGVjdG9yU3R5
bGVTaGVldDsKICAgICB0eXBlZGVmIEhhc2hNYXA8Q1NTU3R5bGVTaGVldCosIFJlZlB0cjxJbnNw
ZWN0b3JTdHlsZVNoZWV0Pj4gQ1NTU3R5bGVTaGVldFRvSW5zcGVjdG9yU3R5bGVTaGVldDsKICAg
ICB0eXBlZGVmIEhhc2hNYXA8UmVmUHRyPERvY3VtZW50PiwgVmVjdG9yPFJlZlB0cjxJbnNwZWN0
b3JTdHlsZVNoZWV0Pj4+IERvY3VtZW50VG9WaWFJbnNwZWN0b3JTdHlsZVNoZWV0OyAvLyAidmlh
IGluc3BlY3RvciIgc3R5bGVzaGVldHMKLSAgICB0eXBlZGVmIEhhc2hNYXA8aW50LCB1bnNpZ25l
ZD4gTm9kZUlkVG9Gb3JjZWRQc2V1ZG9TdGF0ZTsKKyAgICB0eXBlZGVmIEhhc2hNYXA8SW5zcGVj
dG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQsIHVuc2lnbmVkPiBOb2RlSWRUb0ZvcmNlZFBzZXVk
b1N0YXRlOwogCiAgICAgSW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlJiBhc0luc3Bl
Y3RvclN0eWxlU2hlZXQoU3R5bGVkRWxlbWVudCYpOwotICAgIEVsZW1lbnQqIGVsZW1lbnRGb3JJ
ZChFcnJvclN0cmluZyYsIGludCBub2RlSWQpOworICAgIEVsZW1lbnQqIGVsZW1lbnRGb3JJZChJ
bnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZyYsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRP
TTo6Tm9kZUlkKTsKIAogICAgIHZvaWQgY29sbGVjdEFsbFN0eWxlU2hlZXRzKFZlY3RvcjxJbnNw
ZWN0b3JTdHlsZVNoZWV0Kj4mKTsKICAgICB2b2lkIGNvbGxlY3RBbGxEb2N1bWVudFN0eWxlU2hl
ZXRzKERvY3VtZW50JiwgVmVjdG9yPENTU1N0eWxlU2hlZXQqPiYpOwogICAgIHZvaWQgY29sbGVj
dFN0eWxlU2hlZXRzKENTU1N0eWxlU2hlZXQqLCBWZWN0b3I8Q1NTU3R5bGVTaGVldCo+Jik7CiAg
ICAgdm9pZCBzZXRBY3RpdmVTdHlsZVNoZWV0c0ZvckRvY3VtZW50KERvY3VtZW50JiwgVmVjdG9y
PENTU1N0eWxlU2hlZXQqPiYgYWN0aXZlU3R5bGVTaGVldHMpOwogCi0gICAgU3RyaW5nIHVuYmlu
ZFN0eWxlU2hlZXQoSW5zcGVjdG9yU3R5bGVTaGVldCopOworICAgIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkNTUzo6U3R5bGVTaGVldElkIHVuYmluZFN0eWxlU2hlZXQoSW5zcGVjdG9yU3R5bGVTaGVl
dCopOwogICAgIEluc3BlY3RvclN0eWxlU2hlZXQqIGJpbmRTdHlsZVNoZWV0KENTU1N0eWxlU2hl
ZXQqKTsKLSAgICBJbnNwZWN0b3JTdHlsZVNoZWV0KiBhc3NlcnRTdHlsZVNoZWV0Rm9ySWQoRXJy
b3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmKTsKKyAgICBJbnNwZWN0b3JTdHlsZVNoZWV0KiBhc3Nl
cnRTdHlsZVNoZWV0Rm9ySWQoSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBjb25z
dCBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRJZCYpOwogICAgIEluc3BlY3Rv
clN0eWxlU2hlZXQqIGNyZWF0ZUluc3BlY3RvclN0eWxlU2hlZXRGb3JEb2N1bWVudChEb2N1bWVu
dCYpOwogICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbiBkZXRl
Y3RPcmlnaW4oQ1NTU3R5bGVTaGVldCogcGFnZVN0eWxlU2hlZXQsIERvY3VtZW50KiBvd25lckRv
Y3VtZW50KTsKIAogICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1J1bGU+
IGJ1aWxkT2JqZWN0Rm9yUnVsZShjb25zdCBTdHlsZVJ1bGUqLCBTdHlsZTo6UmVzb2x2ZXImLCBF
bGVtZW50Jik7CiAgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUnVsZT4g
YnVpbGRPYmplY3RGb3JSdWxlKENTU1N0eWxlUnVsZSopOwotICAgIFJlZlB0cjxKU09OOjpBcnJh
eU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6UnVsZU1hdGNoPj4gYnVpbGRBcnJheUZvck1h
dGNoZWRSdWxlTGlzdChjb25zdCBWZWN0b3I8UmVmUHRyPGNvbnN0IFN0eWxlUnVsZT4+JiwgU3R5
bGU6OlJlc29sdmVyJiwgRWxlbWVudCYsIFBzZXVkb0lkKTsKKyAgICBSZWY8SlNPTjo6QXJyYXlP
ZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlJ1bGVNYXRjaD4+IGJ1aWxkQXJyYXlGb3JNYXRj
aGVkUnVsZUxpc3QoY29uc3QgVmVjdG9yPFJlZlB0cjxjb25zdCBTdHlsZVJ1bGU+PiYsIFN0eWxl
OjpSZXNvbHZlciYsIEVsZW1lbnQmLCBQc2V1ZG9JZCk7CiAgICAgUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+IGJ1aWxkT2JqZWN0Rm9yQXR0cmlidXRlc1N0eWxlKFN0
eWxlZEVsZW1lbnQmKTsKIAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
YWdlbnRzL0luc3BlY3RvckNhbnZhc0FnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9hZ2VudHMvSW5zcGVjdG9yQ2FudmFzQWdlbnQuY3BwCmluZGV4IGQwOTE2ODI5NDAwZjk0NmYw
ODYwMDk1OGFhNDQzZTU3MDczZmU4YWEuLmE4NTAzOGY1YzA2NzdlN2Q5MjgxOTRkYjdkMDQwOWE5
NDhiYzk2YjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5z
cGVjdG9yQ2FudmFzQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2Vu
dHMvSW5zcGVjdG9yQ2FudmFzQWdlbnQuY3BwCkBAIC0xMDIsOCArMTAyLDcgQEAgdm9pZCBJbnNw
ZWN0b3JDYW52YXNBZ2VudDo6ZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6
RnJvbnRlbmRSb3V0ZXIKIAogdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6d2lsbERlc3Ryb3lG
cm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKQogewotICAgIEVy
cm9yU3RyaW5nIGlnbm9yZWQ7Ci0gICAgZGlzYWJsZShpZ25vcmVkKTsKKyAgICBkaXNhYmxlKCk7
CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmRpc2NhcmRBZ2VudCgpCkBAIC0xMTEs
MTAgKzExMCwxMCBAQCB2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjpkaXNjYXJkQWdlbnQoKQog
ICAgIHJlc2V0KCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmVuYWJsZShFcnJv
clN0cmluZyYpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JDYW52YXNB
Z2VudDo6ZW5hYmxlKCkKIHsKICAgICBpZiAobV9pbnN0cnVtZW50aW5nQWdlbnRzLmVuYWJsZWRD
YW52YXNBZ2VudCgpID09IHRoaXMpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHsg
fTsKIAogICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy5zZXRFbmFibGVkQ2FudmFzQWdlbnQodGhp
cyk7CiAKQEAgLTE3MCw3MyArMTY5LDg0IEBAIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmVu
YWJsZShFcnJvclN0cmluZyYpCiAgICAgICAgIH0KICAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKFdF
QkdQVSkKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6
OmRpc2FibGUoRXJyb3JTdHJpbmcmKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5z
cGVjdG9yQ2FudmFzQWdlbnQ6OmRpc2FibGUoKQogewogICAgIG1faW5zdHJ1bWVudGluZ0FnZW50
cy5zZXRFbmFibGVkQ2FudmFzQWdlbnQobnVsbHB0cik7CiAKICAgICByZXNldCgpOwogCiAgICAg
bV9yZWNvcmRpbmdBdXRvQ2FwdHVyZUZyYW1lQ291bnQgPSBXVEY6Om51bGxvcHQ7CisKKyAgICBy
ZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjpyZXF1ZXN0Tm9kZShF
cnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgY2FudmFzSWQsIGludCogbm9k
ZUlkKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UHJvdG9jb2w6OkRPTTo6Tm9kZUlkPiBJbnNw
ZWN0b3JDYW52YXNBZ2VudDo6cmVxdWVzdE5vZGUoY29uc3QgUHJvdG9jb2w6OkNhbnZhczo6Q2Fu
dmFzSWQmIGNhbnZhc0lkKQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmlu
ZzsKKwogICAgIGF1dG8gaW5zcGVjdG9yQ2FudmFzID0gYXNzZXJ0SW5zcGVjdG9yQ2FudmFzKGVy
cm9yU3RyaW5nLCBjYW52YXNJZCk7CiAgICAgaWYgKCFpbnNwZWN0b3JDYW52YXMpCi0gICAgICAg
IHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAog
ICAgIGF1dG8qIG5vZGUgPSBpbnNwZWN0b3JDYW52YXMtPmNhbnZhc0VsZW1lbnQoKTsKLSAgICBp
ZiAoIW5vZGUpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWlzc2luZyBlbGVtZW50IG9mIGNh
bnZhcyBmb3IgZ2l2ZW4gY2FudmFzSWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAg
aWYgKCFub2RlKQorICAgICAgICBtYWtlVW5leHBlY3RlZCgiTWlzc2luZyBlbGVtZW50IG9mIGNh
bnZhcyBmb3IgZ2l2ZW4gY2FudmFzSWQiX3MpOwogCiAgICAgLy8gRklYTUU6IDxodHRwczovL3dl
YmtpdC5vcmcvYi8yMTM0OTk+IFdlYiBJbnNwZWN0b3I6IGFsbG93IERPTSBub2RlcyB0byBiZSBp
bnN0cnVtZW50ZWQgYXQgYW55IHBvaW50LCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlIG1haW4g
ZG9jdW1lbnQgaGFzIGFsc28gYmVlbiBpbnN0cnVtZW50ZWQKICAgICBpbnQgZG9jdW1lbnROb2Rl
SWQgPSBtX2luc3RydW1lbnRpbmdBZ2VudHMucGVyc2lzdGVudERPTUFnZW50KCktPmJvdW5kTm9k
ZUlkKCZub2RlLT5kb2N1bWVudCgpKTsKLSAgICBpZiAoIWRvY3VtZW50Tm9kZUlkKSB7Ci0gICAg
ICAgIGVycm9yU3RyaW5nID0gIkRvY3VtZW50IG11c3QgaGF2ZSBiZWVuIHJlcXVlc3RlZCJfczsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoIWRvY3VtZW50Tm9kZUlkKQorICAgICAg
ICBtYWtlVW5leHBlY3RlZCgiRG9jdW1lbnQgbXVzdCBoYXZlIGJlZW4gcmVxdWVzdGVkIl9zKTsK
IAotICAgICpub2RlSWQgPSBtX2luc3RydW1lbnRpbmdBZ2VudHMucGVyc2lzdGVudERPTUFnZW50
KCktPnB1c2hOb2RlVG9Gcm9udGVuZChlcnJvclN0cmluZywgZG9jdW1lbnROb2RlSWQsIG5vZGUp
OworICAgIHJldHVybiBtX2luc3RydW1lbnRpbmdBZ2VudHMucGVyc2lzdGVudERPTUFnZW50KCkt
PnB1c2hOb2RlVG9Gcm9udGVuZChlcnJvclN0cmluZywgZG9jdW1lbnROb2RlSWQsIG5vZGUpOwog
fQogCi12b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjpyZXF1ZXN0Q29udGVudChFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgY2FudmFzSWQsIFN0cmluZyogY29udGVudCkK
K1Byb3RvY29sOjpFcnJvclN0cmluZ09yPFN0cmluZz4gSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnJl
cXVlc3RDb250ZW50KGNvbnN0IFByb3RvY29sOjpDYW52YXM6OkNhbnZhc0lkJiBjYW52YXNJZCkK
IHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBhdXRvIGlu
c3BlY3RvckNhbnZhcyA9IGFzc2VydEluc3BlY3RvckNhbnZhcyhlcnJvclN0cmluZywgY2FudmFz
SWQpOwogICAgIGlmICghaW5zcGVjdG9yQ2FudmFzKQotICAgICAgICByZXR1cm47CisgICAgICAg
IHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKLSAgICAqY29udGVudCA9IGlu
c3BlY3RvckNhbnZhcy0+Z2V0Q2FudmFzQ29udGVudEFzRGF0YVVSTChlcnJvclN0cmluZyk7Cisg
ICAgYXV0byByZXN1bHQgPSBpbnNwZWN0b3JDYW52YXMtPmdldENhbnZhc0NvbnRlbnRBc0RhdGFV
UkwoZXJyb3JTdHJpbmcpOworICAgIGlmICghcmVzdWx0KQorICAgICAgICByZXR1cm4gbWFrZVVu
ZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOworCisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBJ
bnNwZWN0b3JDYW52YXNBZ2VudDo6cmVxdWVzdENsaWVudE5vZGVzKEVycm9yU3RyaW5nJiBlcnJv
clN0cmluZywgY29uc3QgU3RyaW5nJiBjYW52YXNJZCwgUmVmUHRyPEpTT046OkFycmF5T2Y8aW50
Pj4mIGNsaWVudE5vZGVJZHMpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SlNPTjo6QXJy
YXlPZjxQcm90b2NvbDo6RE9NOjpOb2RlSWQ+Pj4gSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnJlcXVl
c3RDbGllbnROb2Rlcyhjb25zdCBQcm90b2NvbDo6Q2FudmFzOjpDYW52YXNJZCYgY2FudmFzSWQp
CiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAgICAgYXV0byog
ZG9tQWdlbnQgPSBtX2luc3RydW1lbnRpbmdBZ2VudHMucGVyc2lzdGVudERPTUFnZW50KCk7Ci0g
ICAgaWYgKCFkb21BZ2VudCkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJET00gZG9tYWluIG11
c3QgYmUgZW5hYmxlZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoIWRvbUFn
ZW50KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkRPTSBkb21haW4gbXVzdCBiZSBl
bmFibGVkIl9zKTsKIAogICAgIGF1dG8gaW5zcGVjdG9yQ2FudmFzID0gYXNzZXJ0SW5zcGVjdG9y
Q2FudmFzKGVycm9yU3RyaW5nLCBjYW52YXNJZCk7CiAgICAgaWYgKCFpbnNwZWN0b3JDYW52YXMp
Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3Ry
aW5nKTsKIAotICAgIGNsaWVudE5vZGVJZHMgPSBKU09OOjpBcnJheU9mPGludD46OmNyZWF0ZSgp
OworICAgIGF1dG8gY2xpZW50Tm9kZUlkcyA9IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkRPTTo6
Tm9kZUlkPjo6Y3JlYXRlKCk7CiAgICAgZm9yIChhdXRvJiBjbGllbnROb2RlIDogaW5zcGVjdG9y
Q2FudmFzLT5jbGllbnROb2RlcygpKSB7CiAgICAgICAgIC8vIEZJWE1FOiA8aHR0cHM6Ly93ZWJr
aXQub3JnL2IvMjEzNDk5PiBXZWIgSW5zcGVjdG9yOiBhbGxvdyBET00gbm9kZXMgdG8gYmUgaW5z
dHJ1bWVudGVkIGF0IGFueSBwb2ludCwgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZSBtYWluIGRv
Y3VtZW50IGhhcyBhbHNvIGJlZW4gaW5zdHJ1bWVudGVkCiAgICAgICAgIGlmIChhdXRvIGRvY3Vt
ZW50Tm9kZUlkID0gZG9tQWdlbnQtPmJvdW5kTm9kZUlkKCZjbGllbnROb2RlLT5kb2N1bWVudCgp
KSkKICAgICAgICAgICAgIGNsaWVudE5vZGVJZHMtPmFkZEl0ZW0oZG9tQWdlbnQtPnB1c2hOb2Rl
VG9Gcm9udGVuZChlcnJvclN0cmluZywgZG9jdW1lbnROb2RlSWQsIGNsaWVudE5vZGUpKTsKICAg
ICB9CisgICAgcmV0dXJuIFdURk1vdmUoY2xpZW50Tm9kZUlkcyk7CiB9CiAKLXZvaWQgSW5zcGVj
dG9yQ2FudmFzQWdlbnQ6OnJlc29sdmVDb250ZXh0KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywg
Y29uc3QgU3RyaW5nJiBjYW52YXNJZCwgY29uc3QgU3RyaW5nKiBvYmplY3RHcm91cCwgUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3VsdCkKK1By
b3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0
Pj4gSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnJlc29sdmVDb250ZXh0KGNvbnN0IFByb3RvY29sOjpD
YW52YXM6OkNhbnZhc0lkJiBjYW52YXNJZCwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCkKIHsK
KyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBhdXRvIGluc3Bl
Y3RvckNhbnZhcyA9IGFzc2VydEluc3BlY3RvckNhbnZhcyhlcnJvclN0cmluZywgY2FudmFzSWQp
OwogICAgIGlmICghaW5zcGVjdG9yQ2FudmFzKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJl
dHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAgICBhdXRvKiBzdGF0ZSA9IGlu
c3BlY3RvckNhbnZhcy0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5leGVjU3RhdGUoKTsKICAg
ICBhdXRvIGluamVjdGVkU2NyaXB0ID0gbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIuaW5qZWN0ZWRT
Y3JpcHRGb3Ioc3RhdGUpOwpAQCAtMjQ2LDEyMiArMjU2LDEyOSBAQCB2b2lkIEluc3BlY3RvckNh
bnZhc0FnZW50OjpyZXNvbHZlQ29udGV4dChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0
IFN0cmluZwogCiAgICAgaWYgKCF2YWx1ZSkgewogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiSW50ZXJuYWwgZXJyb3I6IHVua25vd24gY29udGV4
dCBvZiBjYW52YXMgZm9yIGdpdmVuIGNhbnZhc0lkIl9zOwotICAgICAgICByZXR1cm47CisgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiSW50ZXJuYWwgZXJyb3I6IHVua25vd24gY29udGV4
dCBvZiBjYW52YXMgZm9yIGdpdmVuIGNhbnZhc0lkIl9zKTsKICAgICB9CiAKLSAgICBTdHJpbmcg
b2JqZWN0R3JvdXBOYW1lID0gb2JqZWN0R3JvdXAgPyAqb2JqZWN0R3JvdXAgOiBTdHJpbmcoKTsK
LSAgICByZXN1bHQgPSBpbmplY3RlZFNjcmlwdC53cmFwT2JqZWN0KHZhbHVlLCBvYmplY3RHcm91
cE5hbWUpOworICAgIGF1dG8gcmVzdWx0ID0gaW5qZWN0ZWRTY3JpcHQud3JhcE9iamVjdCh2YWx1
ZSwgb2JqZWN0R3JvdXApOworICAgIGlmICghcmVzdWx0KQorICAgICAgICByZXR1cm4gbWFrZVVu
ZXhwZWN0ZWQoIkludGVybmFsIGVycm9yOiB1bmFibGUgdG8gY2FzdCBDb250ZXh0Iik7CisKKyAg
ICByZXR1cm4gcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ2Fu
dmFzQWdlbnQ6OnNldFJlY29yZGluZ0F1dG9DYXB0dXJlRnJhbWVDb3VudChFcnJvclN0cmluZyYs
IGludCBjb3VudCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckNhbnZh
c0FnZW50OjpzZXRSZWNvcmRpbmdBdXRvQ2FwdHVyZUZyYW1lQ291bnQoaW50IGNvdW50KQogewog
ICAgIGlmIChjb3VudCA+IDApCiAgICAgICAgIG1fcmVjb3JkaW5nQXV0b0NhcHR1cmVGcmFtZUNv
dW50ID0gY291bnQ7CiAgICAgZWxzZQogICAgICAgICBtX3JlY29yZGluZ0F1dG9DYXB0dXJlRnJh
bWVDb3VudCA9IFdURjo6bnVsbG9wdDsKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3Bl
Y3RvckNhbnZhc0FnZW50OjpzdGFydFJlY29yZGluZyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcs
IGNvbnN0IFN0cmluZyYgY2FudmFzSWQsIGNvbnN0IGludCogZnJhbWVDb3VudCwgY29uc3QgaW50
KiBtZW1vcnlMaW1pdCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckNh
bnZhc0FnZW50OjpzdGFydFJlY29yZGluZyhjb25zdCBQcm90b2NvbDo6Q2FudmFzOjpDYW52YXNJ
ZCYgY2FudmFzSWQsIE9wdGlvbmFsPGludD4mJiBmcmFtZUNvdW50LCBPcHRpb25hbDxpbnQ+JiYg
bWVtb3J5TGltaXQpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOwor
CiAgICAgYXV0byBpbnNwZWN0b3JDYW52YXMgPSBhc3NlcnRJbnNwZWN0b3JDYW52YXMoZXJyb3JT
dHJpbmcsIGNhbnZhc0lkKTsKICAgICBpZiAoIWluc3BlY3RvckNhbnZhcykKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgLy8gRklYTUU6IDxodHRwczovL3dlYmtpdC5vcmcvYi8yMDE2NTE+IFdlYiBJ
bnNwZWN0b3I6IENhbnZhczogc3VwcG9ydCBjYW52YXMgcmVjb3JkaW5ncyBmb3IgV2ViR1BVRGV2
aWNlCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAgICBh
dXRvKiBjb250ZXh0ID0gaW5zcGVjdG9yQ2FudmFzLT5jYW52YXNDb250ZXh0KCk7Ci0gICAgaWYg
KCFjb250ZXh0KQotICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoY29udGV4dC0+Y2FsbFRyYWNp
bmdBY3RpdmUoKSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJBbHJlYWR5IHJlY29yZGluZyBj
YW52YXMiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgLy8gRklYTUU6IDxodHRwczov
L3dlYmtpdC5vcmcvYi8yMDE2NTE+IFdlYiBJbnNwZWN0b3I6IENhbnZhczogc3VwcG9ydCBjYW52
YXMgcmVjb3JkaW5ncyBmb3IgV2ViR1BVRGV2aWNlCisgICAgaWYgKCFjb250ZXh0KQorICAgICAg
ICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk5vdCBzdXBwb3J0ZWQiX3MpOworCisgICAgaWYgKGNv
bnRleHQtPmNhbGxUcmFjaW5nQWN0aXZlKCkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3Rl
ZCgiQWxyZWFkeSByZWNvcmRpbmcgY2FudmFzIl9zKTsKIAogICAgIFJlY29yZGluZ09wdGlvbnMg
cmVjb3JkaW5nT3B0aW9uczsKICAgICBpZiAoZnJhbWVDb3VudCkKICAgICAgICAgcmVjb3JkaW5n
T3B0aW9ucy5mcmFtZUNvdW50ID0gKmZyYW1lQ291bnQ7CiAgICAgaWYgKG1lbW9yeUxpbWl0KQog
ICAgICAgICByZWNvcmRpbmdPcHRpb25zLm1lbW9yeUxpbWl0ID0gKm1lbW9yeUxpbWl0OwotICAg
IHN0YXJ0UmVjb3JkaW5nKCppbnNwZWN0b3JDYW52YXMsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJl
Y29yZGluZzo6SW5pdGlhdG9yOjpGcm9udGVuZCwgV1RGTW92ZShyZWNvcmRpbmdPcHRpb25zKSk7
CisgICAgc3RhcnRSZWNvcmRpbmcoKmluc3BlY3RvckNhbnZhcywgUHJvdG9jb2w6OlJlY29yZGlu
Zzo6SW5pdGlhdG9yOjpGcm9udGVuZCwgV1RGTW92ZShyZWNvcmRpbmdPcHRpb25zKSk7CisKKyAg
ICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjpzdG9wUmVjb3Jk
aW5nKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBjYW52YXNJZCkKK1By
b3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckNhbnZhc0FnZW50OjpzdG9wUmVj
b3JkaW5nKGNvbnN0IFByb3RvY29sOjpDYW52YXM6OkNhbnZhc0lkJiBjYW52YXNJZCkKIHsKKyAg
ICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBhdXRvIGluc3BlY3Rv
ckNhbnZhcyA9IGFzc2VydEluc3BlY3RvckNhbnZhcyhlcnJvclN0cmluZywgY2FudmFzSWQpOwog
ICAgIGlmICghaW5zcGVjdG9yQ2FudmFzKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBGSVhN
RTogPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzIwMTY1MT4gV2ViIEluc3BlY3RvcjogQ2FudmFzOiBz
dXBwb3J0IGNhbnZhcyByZWNvcmRpbmdzIGZvciBXZWJHUFVEZXZpY2UKKyAgICAgICAgcmV0dXJu
IG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgIGF1dG8qIGNvbnRleHQgPSBpbnNw
ZWN0b3JDYW52YXMtPmNhbnZhc0NvbnRleHQoKTsKLSAgICBpZiAoIWNvbnRleHQpCi0gICAgICAg
IHJldHVybjsKIAotICAgIGlmICghY29udGV4dC0+Y2FsbFRyYWNpbmdBY3RpdmUoKSkgewotICAg
ICAgICBlcnJvclN0cmluZyA9ICJOb3QgcmVjb3JkaW5nIGNhbnZhcyJfczsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KKyAgICAvLyBGSVhNRTogPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzIwMTY1MT4g
V2ViIEluc3BlY3RvcjogQ2FudmFzOiBzdXBwb3J0IGNhbnZhcyByZWNvcmRpbmdzIGZvciBXZWJH
UFVEZXZpY2UKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3Rl
ZCgiTm90IHN1cHBvcnRlZCJfcyk7CisKKyAgICBpZiAoIWNvbnRleHQtPmNhbGxUcmFjaW5nQWN0
aXZlKCkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTm90IHJlY29yZGluZyBjYW52
YXMiX3MpOwogCiAgICAgZGlkRmluaXNoUmVjb3JkaW5nQ2FudmFzRnJhbWUoKmNvbnRleHQsIHRy
dWUpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAogI2lmIEVOQUJMRShXRUJHTCkgfHwgRU5BQkxF
KFdFQkdQVSkKLXZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnJlcXVlc3RTaGFkZXJTb3VyY2Uo
RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHByb2dyYW1JZCwgY29uc3Qg
U3RyaW5nJiBzaGFkZXJUeXBlU3RyaW5nLCBTdHJpbmcqIG91dFNvdXJjZSkKK1Byb3RvY29sOjpF
cnJvclN0cmluZ09yPFN0cmluZz4gSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnJlcXVlc3RTaGFkZXJT
b3VyY2UoY29uc3QgUHJvdG9jb2w6OkNhbnZhczo6UHJvZ3JhbUlkJiBwcm9ncmFtSWQsIFByb3Rv
Y29sOjpDYW52YXM6OlNoYWRlclR5cGUgc2hhZGVyVHlwZSkKIHsKKyAgICBQcm90b2NvbDo6RXJy
b3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBhdXRvIGluc3BlY3RvclByb2dyYW0gPSBhc3Nl
cnRJbnNwZWN0b3JQcm9ncmFtKGVycm9yU3RyaW5nLCBwcm9ncmFtSWQpOwogICAgIGlmICghaW5z
cGVjdG9yUHJvZ3JhbSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoZXJyb3JTdHJpbmcpOwogCi0gICAgYXV0byBzaGFkZXJUeXBlID0gSW5zcGVjdG9yOjpQ
cm90b2NvbDo6SW5zcGVjdG9ySGVscGVyczo6cGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6U2hhZGVyVHlwZT4oc2hhZGVyVHlwZVN0cmluZyk7Ci0g
ICAgaWYgKCFzaGFkZXJUeXBlKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gbWFrZVN0cmluZygi
VW5rbm93biBzaGFkZXJUeXBlOiAiX3MsIHNoYWRlclR5cGVTdHJpbmcpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQorICAgIGF1dG8gc291cmNlID0gaW5zcGVjdG9yUHJvZ3JhbS0+cmVxdWVzdFNo
YWRlclNvdXJjZShzaGFkZXJUeXBlKTsKKyAgICBpZiAoIXNvdXJjZSkKKyAgICAgICAgcmV0dXJu
IG1ha2VVbmV4cGVjdGVkKCJNaXNzaW5nIHNoYWRlciBvZiBnaXZlbiBzaGFkZXJUeXBlIGZvciBn
aXZlbiBwcm9ncmFtSWQiX3MpOwogCi0gICAgYXV0byBzb3VyY2UgPSBpbnNwZWN0b3JQcm9ncmFt
LT5yZXF1ZXN0U2hhZGVyU291cmNlKHNoYWRlclR5cGUudmFsdWUoKSk7Ci0gICAgaWYgKCFzb3Vy
Y2UpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWlzc2luZyBzaGFkZXIgb2YgZ2l2ZW4gc2hh
ZGVyVHlwZSBmb3IgZ2l2ZW4gcHJvZ3JhbUlkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgKm91dFNvdXJjZSA9IHNvdXJjZTsKKyAgICByZXR1cm4gc291cmNlOwogfQogCi12b2lk
IEluc3BlY3RvckNhbnZhc0FnZW50Ojp1cGRhdGVTaGFkZXIoRXJyb3JTdHJpbmcmIGVycm9yU3Ry
aW5nLCBjb25zdCBTdHJpbmcmIHByb2dyYW1JZCwgY29uc3QgU3RyaW5nJiBzaGFkZXJUeXBlU3Ry
aW5nLCBjb25zdCBTdHJpbmcmIHNvdXJjZSkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+
IEluc3BlY3RvckNhbnZhc0FnZW50Ojp1cGRhdGVTaGFkZXIoY29uc3QgUHJvdG9jb2w6OkNhbnZh
czo6UHJvZ3JhbUlkJiBwcm9ncmFtSWQsIFByb3RvY29sOjpDYW52YXM6OlNoYWRlclR5cGUgc2hh
ZGVyVHlwZSwgY29uc3QgU3RyaW5nJiBzb3VyY2UpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3Ry
aW5nIGVycm9yU3RyaW5nOworCiAgICAgYXV0byBpbnNwZWN0b3JQcm9ncmFtID0gYXNzZXJ0SW5z
cGVjdG9yUHJvZ3JhbShlcnJvclN0cmluZywgcHJvZ3JhbUlkKTsKICAgICBpZiAoIWluc3BlY3Rv
clByb2dyYW0pCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVk
KGVycm9yU3RyaW5nKTsKIAotICAgIGF1dG8gc2hhZGVyVHlwZSA9IEluc3BlY3Rvcjo6UHJvdG9j
b2w6Okluc3BlY3RvckhlbHBlcnM6OnBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6
OlByb3RvY29sOjpDYW52YXM6OlNoYWRlclR5cGU+KHNoYWRlclR5cGVTdHJpbmcpOwotICAgIGlm
ICghc2hhZGVyVHlwZSkgewotICAgICAgICBlcnJvclN0cmluZyA9IG1ha2VTdHJpbmcoIlVua25v
d24gc2hhZGVyVHlwZTogIl9zLCBzaGFkZXJUeXBlU3RyaW5nKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KKyAgICBpZiAoIWluc3BlY3RvclByb2dyYW0tPnVwZGF0ZVNoYWRlcihzaGFkZXJUeXBl
LCBzb3VyY2UpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkZhaWxlZCB0byB1cGRh
dGUgc2hhZGVyIG9mIGdpdmVuIHNoYWRlclR5cGUgZm9yIGdpdmVuIHByb2dyYW1JZCJfcyk7CiAK
LSAgICBpZiAoIWluc3BlY3RvclByb2dyYW0tPnVwZGF0ZVNoYWRlcihzaGFkZXJUeXBlLnZhbHVl
KCksIHNvdXJjZSkpCi0gICAgICAgIGVycm9yU3RyaW5nID0gIkZhaWxlZCB0byB1cGRhdGUgc2hh
ZGVyIG9mIGdpdmVuIHNoYWRlclR5cGUgZm9yIGdpdmVuIHByb2dyYW1JZCJfczsKKyAgICByZXR1
cm4geyB9OwogfQogCiAjaWYgRU5BQkxFKFdFQkdMKQotdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2Vu
dDo6c2V0U2hhZGVyUHJvZ3JhbURpc2FibGVkKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29u
c3QgU3RyaW5nJiBwcm9ncmFtSWQsIGJvb2wgZGlzYWJsZWQpCitQcm90b2NvbDo6RXJyb3JTdHJp
bmdPcjx2b2lkPiBJbnNwZWN0b3JDYW52YXNBZ2VudDo6c2V0U2hhZGVyUHJvZ3JhbURpc2FibGVk
KGNvbnN0IFByb3RvY29sOjpDYW52YXM6OlByb2dyYW1JZCYgcHJvZ3JhbUlkLCBib29sIGRpc2Fi
bGVkKQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIGF1
dG8gaW5zcGVjdG9yUHJvZ3JhbSA9IGFzc2VydEluc3BlY3RvclByb2dyYW0oZXJyb3JTdHJpbmcs
IHByb2dyYW1JZCk7CiAgICAgaWYgKCFpbnNwZWN0b3JQcm9ncmFtKQotICAgICAgICByZXR1cm47
CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAgICBpbnNw
ZWN0b3JQcm9ncmFtLT5zZXREaXNhYmxlZChkaXNhYmxlZCk7CisKKyAgICByZXR1cm4geyB9Owog
fQogCi12b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjpzZXRTaGFkZXJQcm9ncmFtSGlnaGxpZ2h0
ZWQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHByb2dyYW1JZCwgYm9v
bCBoaWdobGlnaHRlZCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckNh
bnZhc0FnZW50OjpzZXRTaGFkZXJQcm9ncmFtSGlnaGxpZ2h0ZWQoY29uc3QgUHJvdG9jb2w6OkNh
bnZhczo6UHJvZ3JhbUlkJiBwcm9ncmFtSWQsIGJvb2wgaGlnaGxpZ2h0ZWQpCiB7CisgICAgUHJv
dG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAgICAgYXV0byBpbnNwZWN0b3JQcm9n
cmFtID0gYXNzZXJ0SW5zcGVjdG9yUHJvZ3JhbShlcnJvclN0cmluZywgcHJvZ3JhbUlkKTsKICAg
ICBpZiAoIWluc3BlY3RvclByb2dyYW0pCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJu
IG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgIGluc3BlY3RvclByb2dyYW0tPnNl
dEhpZ2hsaWdodGVkKGhpZ2hsaWdodGVkKTsKKworICAgIHJldHVybiB7IH07CiB9CiAjZW5kaWYg
Ly8gRU5BQkxFKFdFQkdMKQogI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkgfHwgRU5BQkxFKFdFQkdQ
VSkKQEAgLTQxMyw3ICs0MzAsNyBAQCB2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjpkaWRDcmVh
dGVDYW52YXNSZW5kZXJpbmdDb250ZXh0KENhbnZhc1JlbmRlcmluZ0NvbnRleAogICAgIGlmICht
X3JlY29yZGluZ0F1dG9DYXB0dXJlRnJhbWVDb3VudCkgewogICAgICAgICBSZWNvcmRpbmdPcHRp
b25zIHJlY29yZGluZ09wdGlvbnM7CiAgICAgICAgIHJlY29yZGluZ09wdGlvbnMuZnJhbWVDb3Vu
dCA9IG1fcmVjb3JkaW5nQXV0b0NhcHR1cmVGcmFtZUNvdW50LnZhbHVlKCk7Ci0gICAgICAgIHN0
YXJ0UmVjb3JkaW5nKGluc3BlY3RvckNhbnZhcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6UmVjb3Jk
aW5nOjpJbml0aWF0b3I6OkF1dG9DYXB0dXJlLCBXVEZNb3ZlKHJlY29yZGluZ09wdGlvbnMpKTsK
KyAgICAgICAgc3RhcnRSZWNvcmRpbmcoaW5zcGVjdG9yQ2FudmFzLCBQcm90b2NvbDo6UmVjb3Jk
aW5nOjpJbml0aWF0b3I6OkF1dG9DYXB0dXJlLCBXVEZNb3ZlKHJlY29yZGluZ09wdGlvbnMpKTsK
ICAgICB9CiB9CiAKQEAgLTU3Myw3ICs1OTAsNyBAQCB2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50
Ojpjb25zb2xlU3RhcnRSZWNvcmRpbmdDYW52YXMoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCYgYwog
ICAgICAgICBpZiAoSlNDOjpKU1ZhbHVlIG9wdGlvbk5hbWUgPSBvcHRpb25zLT5nZXQoJmV4ZWMs
IEpTQzo6SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgIm5hbWUiKSkpCiAgICAgICAgICAgICBy
ZWNvcmRpbmdPcHRpb25zLm5hbWUgPSBvcHRpb25OYW1lLnRvV1RGU3RyaW5nKCZleGVjKTsKICAg
ICB9Ci0gICAgc3RhcnRSZWNvcmRpbmcoKmluc3BlY3RvckNhbnZhcywgSW5zcGVjdG9yOjpQcm90
b2NvbDo6UmVjb3JkaW5nOjpJbml0aWF0b3I6OkNvbnNvbGUsIFdURk1vdmUocmVjb3JkaW5nT3B0
aW9ucykpOworICAgIHN0YXJ0UmVjb3JkaW5nKCppbnNwZWN0b3JDYW52YXMsIFByb3RvY29sOjpS
ZWNvcmRpbmc6OkluaXRpYXRvcjo6Q29uc29sZSwgV1RGTW92ZShyZWNvcmRpbmdPcHRpb25zKSk7
CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmNvbnNvbGVTdG9wUmVjb3JkaW5nQ2Fu
dmFzKENhbnZhc1JlbmRlcmluZ0NvbnRleHQmIGNvbnRleHQpCkBAIC02OTgsNyArNzE1LDcgQEAg
dm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6d2lsbERlc3Ryb3lXZWJHUFVQaXBlbGluZShXZWJH
UFVQaXBlbGluZSYgcGlwZWxpbmUpCiB9CiAjZW5kaWYgLy8gRU5BQkxFKFdFQkdQVSkKIAotdm9p
ZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6c3RhcnRSZWNvcmRpbmcoSW5zcGVjdG9yQ2FudmFzJiBp
bnNwZWN0b3JDYW52YXMsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlY29yZGluZzo6SW5pdGlhdG9y
IGluaXRpYXRvciwgUmVjb3JkaW5nT3B0aW9ucyYmIHJlY29yZGluZ09wdGlvbnMpCit2b2lkIElu
c3BlY3RvckNhbnZhc0FnZW50OjpzdGFydFJlY29yZGluZyhJbnNwZWN0b3JDYW52YXMmIGluc3Bl
Y3RvckNhbnZhcywgUHJvdG9jb2w6OlJlY29yZGluZzo6SW5pdGlhdG9yIGluaXRpYXRvciwgUmVj
b3JkaW5nT3B0aW9ucyYmIHJlY29yZGluZ09wdGlvbnMpCiB7CiAgICAgYXV0byogY29udGV4dCA9
IGluc3BlY3RvckNhbnZhcy5jYW52YXNDb250ZXh0KCk7CiAgICAgQVNTRVJUKGNvbnRleHQpOwpA
QCAtODQwLDcgKzg1Nyw3IEBAIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnVuYmluZENhbnZh
cyhJbnNwZWN0b3JDYW52YXMmIGluc3BlY3RvckNhbnZhcykKICAgICAgICAgbV9jYW52YXNEZXN0
cm95ZWRUaW1lci5zdGFydE9uZVNob3QoMF9zKTsKIH0KIAotUmVmUHRyPEluc3BlY3RvckNhbnZh
cz4gSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmFzc2VydEluc3BlY3RvckNhbnZhcyhFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgY2FudmFzSWQpCitSZWZQdHI8SW5zcGVjdG9y
Q2FudmFzPiBJbnNwZWN0b3JDYW52YXNBZ2VudDo6YXNzZXJ0SW5zcGVjdG9yQ2FudmFzKFByb3Rv
Y29sOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgY2FudmFzSWQpCiB7
CiAgICAgYXV0byBpbnNwZWN0b3JDYW52YXMgPSBtX2lkZW50aWZpZXJUb0luc3BlY3RvckNhbnZh
cy5nZXQoY2FudmFzSWQpOwogICAgIGlmICghaW5zcGVjdG9yQ2FudmFzKSB7CkBAIC04ODUsNyAr
OTAyLDcgQEAgdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6dW5iaW5kUHJvZ3JhbShJbnNwZWN0
b3JTaGFkZXJQcm9ncmFtJiBpbnNwZWN0b3JQcm9ncmEKICAgICAgICAgbV9wcm9ncmFtRGVzdHJv
eWVkVGltZXIuc3RhcnRPbmVTaG90KDBfcyk7CiB9CiAKLVJlZlB0cjxJbnNwZWN0b3JTaGFkZXJQ
cm9ncmFtPiBJbnNwZWN0b3JDYW52YXNBZ2VudDo6YXNzZXJ0SW5zcGVjdG9yUHJvZ3JhbShFcnJv
clN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgcHJvZ3JhbUlkKQorUmVmUHRyPElu
c3BlY3RvclNoYWRlclByb2dyYW0+IEluc3BlY3RvckNhbnZhc0FnZW50Ojphc3NlcnRJbnNwZWN0
b3JQcm9ncmFtKFByb3RvY29sOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmlu
ZyYgcHJvZ3JhbUlkKQogewogICAgIGF1dG8gaW5zcGVjdG9yUHJvZ3JhbSA9IG1faWRlbnRpZmll
clRvSW5zcGVjdG9yUHJvZ3JhbS5nZXQocHJvZ3JhbUlkKTsKICAgICBpZiAoIWluc3BlY3RvclBy
b2dyYW0pIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5z
cGVjdG9yQ2FudmFzQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5z
cGVjdG9yQ2FudmFzQWdlbnQuaAppbmRleCAwZWYxYWVmYjY0N2VhZDk5YjdkMGViMjQzZmQwYjQw
OGNlNDViNjBmLi44NmJkYjUxMjU2OWEzMTFmN2EyNTA4OTVlOGZmYmM5ZGQ5ZWJjZGMwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNhbnZhc0Fn
ZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDYW52
YXNBZ2VudC5oCkBAIC01Nyw0MyArNTcsNDEgQEAgY2xhc3MgV2ViR1BVU3dhcENoYWluOwogI2Vu
ZGlmIC8vIEVOQUJMRShXRUJHUFUpCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKSB8fCBFTkFCTEUo
V0VCR1BVKQogCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQogY2xhc3MgSW5zcGVjdG9y
Q2FudmFzQWdlbnQgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yQWdlbnRCYXNlLCBwdWJsaWMgSW5z
cGVjdG9yOjpDYW52YXNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIsIHB1YmxpYyBDYW52YXNPYnNl
cnZlciwgcHVibGljIENhbk1ha2VXZWFrUHRyPEluc3BlY3RvckNhbnZhc0FnZW50PiB7CiAgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoSW5zcGVjdG9yQ2FudmFzQWdlbnQpOwogICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIEluc3BlY3RvckNhbnZhc0FnZW50KFBhZ2VB
Z2VudENvbnRleHQmKTsKLSAgICB+SW5zcGVjdG9yQ2FudmFzQWdlbnQoKSBvdmVycmlkZTsKKyAg
ICB+SW5zcGVjdG9yQ2FudmFzQWdlbnQoKTsKIAogICAgIC8vIEluc3BlY3RvckFnZW50QmFzZQot
ICAgIHZvaWQgZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRS
b3V0ZXIqLCBJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyKikgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCB3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFz
b24pIG92ZXJyaWRlOwotICAgIHZvaWQgZGlzY2FyZEFnZW50KCkgb3ZlcnJpZGU7CisgICAgdm9p
ZCBkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9udGVuZFJvdXRlcios
IEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXIqKTsKKyAgICB2b2lkIHdpbGxEZXN0cm95RnJv
bnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlzY29ubmVjdFJlYXNvbik7CisgICAgdm9pZCBk
aXNjYXJkQWdlbnQoKTsKIAogICAgIC8vIENhbnZhc0JhY2tlbmREaXNwYXRjaGVySGFuZGxlcgot
ICAgIHZvaWQgZW5hYmxlKEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkaXNhYmxl
KEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZXF1ZXN0Tm9kZShFcnJvclN0cmlu
ZyYsIGNvbnN0IFN0cmluZyYgY2FudmFzSWQsIGludCogbm9kZUlkKSBvdmVycmlkZTsKLSAgICB2
b2lkIHJlcXVlc3RDb250ZW50KEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBjYW52YXNJZCwg
U3RyaW5nKiBjb250ZW50KSBvdmVycmlkZTsKLSAgICB2b2lkIHJlcXVlc3RDbGllbnROb2RlcyhF
cnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgY2FudmFzSWQsIFJlZlB0cjxKU09OOjpBcnJheU9m
PGludD4+Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZXNvbHZlQ29udGV4dChFcnJvclN0cmluZyYs
IGNvbnN0IFN0cmluZyYgY2FudmFzSWQsIGNvbnN0IFN0cmluZyogb2JqZWN0R3JvdXAsIFJlZlB0
cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+Jikgb3ZlcnJpZGU7
Ci0gICAgdm9pZCBzZXRSZWNvcmRpbmdBdXRvQ2FwdHVyZUZyYW1lQ291bnQoRXJyb3JTdHJpbmcm
LCBpbnQgY291bnQpIG92ZXJyaWRlOwotICAgIHZvaWQgc3RhcnRSZWNvcmRpbmcoRXJyb3JTdHJp
bmcmLCBjb25zdCBTdHJpbmcmIGNhbnZhc0lkLCBjb25zdCBpbnQqIGZyYW1lQ291bnQsIGNvbnN0
IGludCogbWVtb3J5TGltaXQpIG92ZXJyaWRlOwotICAgIHZvaWQgc3RvcFJlY29yZGluZyhFcnJv
clN0cmluZyYsIGNvbnN0IFN0cmluZyYgY2FudmFzSWQpIG92ZXJyaWRlOworICAgIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZW5hYmxlKCk7CisgICAgSW5zcGVjdG9y
OjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBkaXNhYmxlKCk7CisgICAgSW5zcGVjdG9y
OjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJ
ZD4gcmVxdWVzdE5vZGUoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6Q2FudmFzOjpDYW52YXNJ
ZCYpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8U3RyaW5nPiByZXF1
ZXN0Q29udGVudChjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpDYW52YXM6OkNhbnZhc0lkJik7
CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SlNPTjo6QXJyYXlP
ZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZD4+PiByZXF1ZXN0Q2xpZW50Tm9kZXMo
Y29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6Q2FudmFzOjpDYW52YXNJZCYpOworICAgIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1
bnRpbWU6OlJlbW90ZU9iamVjdD4+IHJlc29sdmVDb250ZXh0KGNvbnN0IEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkNhbnZhczo6Q2FudmFzSWQmLCBjb25zdCBTdHJpbmcmIG9iamVjdEdyb3VwKTsKKyAg
ICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHNldFJlY29yZGluZ0F1
dG9DYXB0dXJlRnJhbWVDb3VudChpbnQpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8dm9pZD4gc3RhcnRSZWNvcmRpbmcoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6
Q2FudmFzOjpDYW52YXNJZCYsIE9wdGlvbmFsPGludD4mJiBmcmFtZUNvdW50LCBPcHRpb25hbDxp
bnQ+JiYgbWVtb3J5TGltaXQpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5n
T3I8dm9pZD4gc3RvcFJlY29yZGluZyhjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpDYW52YXM6
OkNhbnZhc0lkJik7CiAjaWYgRU5BQkxFKFdFQkdMKSB8fCBFTkFCTEUoV0VCR1BVKQotICAgIHZv
aWQgcmVxdWVzdFNoYWRlclNvdXJjZShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgcHJvZ3Jh
bUlkLCBjb25zdCBTdHJpbmcmIHNoYWRlclR5cGUsIFN0cmluZyogc291cmNlKSBvdmVycmlkZTsK
LSAgICB2b2lkIHVwZGF0ZVNoYWRlcihFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgcHJvZ3Jh
bUlkLCBjb25zdCBTdHJpbmcmIHNoYWRlclR5cGUsIGNvbnN0IFN0cmluZyYgc291cmNlKSBvdmVy
cmlkZTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFN0cmluZz4gcmVx
dWVzdFNoYWRlclNvdXJjZShjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpDYW52YXM6OlByb2dy
YW1JZCYsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6U2hhZGVyVHlwZSk7CisgICAgSW5z
cGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiB1cGRhdGVTaGFkZXIoY29uc3Qg
SW5zcGVjdG9yOjpQcm90b2NvbDo6Q2FudmFzOjpQcm9ncmFtSWQmLCBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpDYW52YXM6OlNoYWRlclR5cGUsIGNvbnN0IFN0cmluZyYgc291cmNlKTsKICNpZiBFTkFC
TEUoV0VCR0wpCi0gICAgdm9pZCBzZXRTaGFkZXJQcm9ncmFtRGlzYWJsZWQoRXJyb3JTdHJpbmcm
LCBjb25zdCBTdHJpbmcmIHByb2dyYW1JZCwgYm9vbCBkaXNhYmxlZCkgb3ZlcnJpZGU7Ci0gICAg
dm9pZCBzZXRTaGFkZXJQcm9ncmFtSGlnaGxpZ2h0ZWQoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJp
bmcmIHByb2dyYW1JZCwgYm9vbCBoaWdobGlnaHRlZCkgb3ZlcnJpZGU7CisgICAgSW5zcGVjdG9y
OjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzZXRTaGFkZXJQcm9ncmFtRGlzYWJsZWQo
Y29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6Q2FudmFzOjpQcm9ncmFtSWQmLCBib29sIGRpc2Fi
bGVkKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHNldFNo
YWRlclByb2dyYW1IaWdobGlnaHRlZChjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpDYW52YXM6
OlByb2dyYW1JZCYsIGJvb2wgaGlnaGxpZ2h0ZWQpOwogI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkK
ICNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpIHx8IEVOQUJMRShXRUJHUFUpCiAKICAgICAvLyBDYW52
YXNPYnNlcnZlcgotICAgIHZvaWQgY2FudmFzQ2hhbmdlZChDYW52YXNCYXNlJiwgY29uc3QgRmxv
YXRSZWN0Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjYW52YXNSZXNpemVkKENhbnZhc0Jhc2UmKSBv
dmVycmlkZSB7IH0KLSAgICB2b2lkIGNhbnZhc0Rlc3Ryb3llZChDYW52YXNCYXNlJikgb3ZlcnJp
ZGU7CisgICAgdm9pZCBjYW52YXNDaGFuZ2VkKENhbnZhc0Jhc2UmLCBjb25zdCBGbG9hdFJlY3Qm
KTsKKyAgICB2b2lkIGNhbnZhc1Jlc2l6ZWQoQ2FudmFzQmFzZSYpIHsgfQorICAgIHZvaWQgY2Fu
dmFzRGVzdHJveWVkKENhbnZhc0Jhc2UmKTsKIAogICAgIC8vIEluc3BlY3Rvckluc3RydW1lbnRh
dGlvbgogICAgIHZvaWQgZnJhbWVOYXZpZ2F0ZWQoRnJhbWUmKTsKQEAgLTEzOCw3ICsxMzYsNyBA
QCBwcml2YXRlOgogICAgIEluc3BlY3RvckNhbnZhcyYgYmluZENhbnZhcyhXZWJHUFVEZXZpY2Um
LCBib29sIGNhcHR1cmVCYWNrdHJhY2UpOwogI2VuZGlmIC8vIEVOQUJMRShXRUJHUFUpCiAgICAg
dm9pZCB1bmJpbmRDYW52YXMoSW5zcGVjdG9yQ2FudmFzJik7Ci0gICAgUmVmUHRyPEluc3BlY3Rv
ckNhbnZhcz4gYXNzZXJ0SW5zcGVjdG9yQ2FudmFzKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5n
JiBjYW52YXNJZCk7CisgICAgUmVmUHRyPEluc3BlY3RvckNhbnZhcz4gYXNzZXJ0SW5zcGVjdG9y
Q2FudmFzKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBj
YW52YXNJZCk7CiAgICAgUmVmUHRyPEluc3BlY3RvckNhbnZhcz4gZmluZEluc3BlY3RvckNhbnZh
cyhDYW52YXNSZW5kZXJpbmdDb250ZXh0Jik7CiAjaWYgRU5BQkxFKFdFQkdQVSkKICAgICBSZWZQ
dHI8SW5zcGVjdG9yQ2FudmFzPiBmaW5kSW5zcGVjdG9yQ2FudmFzKFdlYkdQVURldmljZSYpOwpA
QCAtMTQ2LDcgKzE0NCw3IEBAIHByaXZhdGU6CiAKICNpZiBFTkFCTEUoV0VCR0wpIHx8IEVOQUJM
RShXRUJHUFUpCiAgICAgdm9pZCB1bmJpbmRQcm9ncmFtKEluc3BlY3RvclNoYWRlclByb2dyYW0m
KTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yU2hhZGVyUHJvZ3JhbT4gYXNzZXJ0SW5zcGVjdG9yUHJv
Z3JhbShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgcHJvZ3JhbUlkKTsKKyAgICBSZWZQdHI8
SW5zcGVjdG9yU2hhZGVyUHJvZ3JhbT4gYXNzZXJ0SW5zcGVjdG9yUHJvZ3JhbShJbnNwZWN0b3I6
OlByb3RvY29sOjpFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgcHJvZ3JhbUlkKTsKICNpZiBF
TkFCTEUoV0VCR0wpCiAgICAgUmVmUHRyPEluc3BlY3RvclNoYWRlclByb2dyYW0+IGZpbmRJbnNw
ZWN0b3JQcm9ncmFtKFdlYkdMUHJvZ3JhbSYpOwogI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NQWdl
bnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01BZ2Vu
dC5jcHAKaW5kZXggODM5YTU4YjU0ODg1NGRlNzU3NzBkMjYzM2Q4ZDU5YWY1OWYyNDExMi4uZGJk
Yjg1MThjOWExZGJlMWFhZjc3YjAyMmY2MGE5YzE2ZDQ0MDM4OCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01BZ2VudC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01BZ2VudC5jcHAKQEAgLTEy
OSw0MCArMTI5LDM5IEBAIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiBzdGF0aWMgY29uc3Qg
c2l6ZV90IG1heFRleHRTaXplID0gMTAwMDA7CiBzdGF0aWMgY29uc3QgVUNoYXIgZWxsaXBzaXNV
Q2hhcltdID0geyAweDIwMjYsIDAgfTsKIAotc3RhdGljIENvbG9yIHBhcnNlQ29sb3IoY29uc3Qg
SlNPTjo6T2JqZWN0KiBjb2xvck9iamVjdCkKK3N0YXRpYyBDb2xvciBwYXJzZUNvbG9yKFJlZlB0
cjxKU09OOjpPYmplY3Q+JiYgY29sb3JPYmplY3QpCiB7CiAgICAgaWYgKCFjb2xvck9iamVjdCkK
ICAgICAgICAgcmV0dXJuIENvbG9yOjp0cmFuc3BhcmVudEJsYWNrOwogCi0gICAgaW50IHIgPSAw
OwotICAgIGludCBnID0gMDsKLSAgICBpbnQgYiA9IDA7Ci0gICAgaWYgKCFjb2xvck9iamVjdC0+
Z2V0SW50ZWdlcigiciIsIHIpIHx8ICFjb2xvck9iamVjdC0+Z2V0SW50ZWdlcigiZyIsIGcpIHx8
ICFjb2xvck9iamVjdC0+Z2V0SW50ZWdlcigiYiIsIGIpKQorICAgIGF1dG8gciA9IGNvbG9yT2Jq
ZWN0LT5nZXRJbnRlZ2VyKFByb3RvY29sOjpET006OlJHQkFDb2xvcjo6cktleSk7CisgICAgYXV0
byBnID0gY29sb3JPYmplY3QtPmdldEludGVnZXIoUHJvdG9jb2w6OkRPTTo6UkdCQUNvbG9yOjpn
S2V5KTsKKyAgICBhdXRvIGIgPSBjb2xvck9iamVjdC0+Z2V0SW50ZWdlcihQcm90b2NvbDo6RE9N
OjpSR0JBQ29sb3I6OmJLZXkpOworICAgIGlmICghciB8fCAhZyB8fCAhYikKICAgICAgICAgcmV0
dXJuIENvbG9yOjp0cmFuc3BhcmVudEJsYWNrOwogCi0gICAgZG91YmxlIGEgPSAxLjA7Ci0gICAg
aWYgKCFjb2xvck9iamVjdC0+Z2V0RG91YmxlKCJhIiwgYSkpCi0gICAgICAgIHJldHVybiBjbGFt
cFRvQ29tcG9uZW50Qnl0ZXM8U1JHQkE+KHIsIGcsIGIpOwotICAgIHJldHVybiBjbGFtcFRvQ29t
cG9uZW50Qnl0ZXM8U1JHQkE+KHIsIGcsIGIsIGNvbnZlcnRUb0NvbXBvbmVudEJ5dGUoYSkpOwor
ICAgIGF1dG8gYSA9IGNvbG9yT2JqZWN0LT5nZXREb3VibGUoUHJvdG9jb2w6OkRPTTo6UkdCQUNv
bG9yOjphS2V5KTsKKyAgICBpZiAoIWEpCisgICAgICAgIHJldHVybiBjbGFtcFRvQ29tcG9uZW50
Qnl0ZXM8U1JHQkE+KCpyLCAqZywgKmIpOworICAgIHJldHVybiBjbGFtcFRvQ29tcG9uZW50Qnl0
ZXM8U1JHQkE+KCpyLCAqZywgKmIsIGNvbnZlcnRUb0NvbXBvbmVudEJ5dGUoKmEpKTsKIH0KIAot
c3RhdGljIENvbG9yIHBhcnNlQ29uZmlnQ29sb3IoY29uc3QgU3RyaW5nJiBmaWVsZE5hbWUsIGNv
bnN0IEpTT046Ok9iamVjdCogY29uZmlnT2JqZWN0KQorc3RhdGljIENvbG9yIHBhcnNlQ29uZmln
Q29sb3IoY29uc3QgU3RyaW5nJiBmaWVsZE5hbWUsIEpTT046Ok9iamVjdCYgY29uZmlnT2JqZWN0
KQogewotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IGNvbG9yT2JqZWN0OwotICAgIGNvbmZpZ09i
amVjdC0+Z2V0T2JqZWN0KGZpZWxkTmFtZSwgY29sb3JPYmplY3QpOwotCi0gICAgcmV0dXJuIHBh
cnNlQ29sb3IoY29sb3JPYmplY3QuZ2V0KCkpOworICAgIHJldHVybiBwYXJzZUNvbG9yKGNvbmZp
Z09iamVjdC5nZXRPYmplY3QoZmllbGROYW1lKSk7CiB9CiAKLXN0YXRpYyBib29sIHBhcnNlUXVh
ZChjb25zdCBKU09OOjpBcnJheSYgcXVhZEFycmF5LCBGbG9hdFF1YWQqIHF1YWQpCitzdGF0aWMg
Ym9vbCBwYXJzZVF1YWQoUmVmPEpTT046OkFycmF5PiYmIHF1YWRBcnJheSwgRmxvYXRRdWFkKiBx
dWFkKQogewogICAgIGNvbnN0IHNpemVfdCBjb29yZGluYXRlc0luUXVhZCA9IDg7CiAgICAgZG91
YmxlIGNvb3JkaW5hdGVzW2Nvb3JkaW5hdGVzSW5RdWFkXTsKLSAgICBpZiAocXVhZEFycmF5Lmxl
bmd0aCgpICE9IGNvb3JkaW5hdGVzSW5RdWFkKQorICAgIGlmIChxdWFkQXJyYXktPmxlbmd0aCgp
ICE9IGNvb3JkaW5hdGVzSW5RdWFkKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBjb29yZGluYXRlc0luUXVhZDsgKytpKSB7Ci0gICAgICAgIGlmICgh
cXVhZEFycmF5LmdldChpKS0+YXNEb3VibGUoKihjb29yZGluYXRlcyArIGkpKSkKKyAgICAgICAg
YXV0byBjb29yZGluYXRlID0gcXVhZEFycmF5LT5nZXQoaSktPmFzRG91YmxlKCk7CisgICAgICAg
IGlmICghY29vcmRpbmF0ZSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgY29v
cmRpbmF0ZXNbaV0gPSAqY29vcmRpbmF0ZTsKICAgICB9CiAgICAgcXVhZC0+c2V0UDEoRmxvYXRQ
b2ludChjb29yZGluYXRlc1swXSwgY29vcmRpbmF0ZXNbMV0pKTsKICAgICBxdWFkLT5zZXRQMihG
bG9hdFBvaW50KGNvb3JkaW5hdGVzWzJdLCBjb29yZGluYXRlc1szXSkpOwpAQCAtMjQzLDcgKzI0
Miw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBhdXRvKiBub2Rl
ID0gZG93bmNhc3Q8Tm9kZT4oZXZlbnQudGFyZ2V0KCkpOwotICAgICAgICBpbnQgbm9kZUlkID0g
bV9kb21BZ2VudC5wdXNoTm9kZVBhdGhUb0Zyb250ZW5kKG5vZGUpOworICAgICAgICBhdXRvIG5v
ZGVJZCA9IG1fZG9tQWdlbnQucHVzaE5vZGVQYXRoVG9Gcm9udGVuZChub2RlKTsKICAgICAgICAg
aWYgKCFub2RlSWQpCiAgICAgICAgICAgICByZXR1cm47CiAKQEAgLTMyMCw5ICszMTksOSBAQCB2
b2lkIEluc3BlY3RvckRPTUFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJbnNw
ZWN0b3I6OkRpc2Nvbm5lY3RSZWFzbwogICAgIG1fbW91c2VkT3Zlck5vZGUgPSBudWxscHRyOwog
ICAgIG1faW5zcGVjdGVkTm9kZSA9IG51bGxwdHI7CiAKLSAgICBFcnJvclN0cmluZyBpZ25vcmVk
OworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBpZ25vcmVkOwogICAgIHNldFNlYXJjaGluZ0Zv
ck5vZGUoaWdub3JlZCwgZmFsc2UsIG51bGxwdHIsIGZhbHNlKTsKLSAgICBoaWRlSGlnaGxpZ2h0
KGlnbm9yZWQpOworICAgIGhpZGVIaWdobGlnaHQoKTsKIAogICAgIG1faW5zdHJ1bWVudGluZ0Fn
ZW50cy5zZXRQZXJzaXN0ZW50RE9NQWdlbnQobnVsbHB0cik7CiAgICAgbV9kb2N1bWVudFJlcXVl
c3RlZCA9IGZhbHNlOwpAQCAtMzc0LDkgKzM3Myw5IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6
OnJlbGVhc2VEYW5nbGluZ05vZGVzKCkKICAgICBtX2RhbmdsaW5nTm9kZVRvSWRNYXBzLmNsZWFy
KCk7CiB9CiAKLWludCBJbnNwZWN0b3JET01BZ2VudDo6YmluZChOb2RlKiBub2RlLCBOb2RlVG9J
ZE1hcCogbm9kZXNNYXApCitQcm90b2NvbDo6RE9NOjpOb2RlSWQgSW5zcGVjdG9yRE9NQWdlbnQ6
OmJpbmQoTm9kZSogbm9kZSwgTm9kZVRvSWRNYXAqIG5vZGVzTWFwKQogewotICAgIGludCBpZCA9
IG5vZGVzTWFwLT5nZXQobm9kZSk7CisgICAgYXV0byBpZCA9IG5vZGVzTWFwLT5nZXQobm9kZSk7
CiAgICAgaWYgKGlkKQogICAgICAgICByZXR1cm4gaWQ7CiAgICAgaWQgPSBtX2xhc3ROb2RlSWQr
KzsKQEAgLTM4OCw3ICszODcsNyBAQCBpbnQgSW5zcGVjdG9yRE9NQWdlbnQ6OmJpbmQoTm9kZSog
bm9kZSwgTm9kZVRvSWRNYXAqIG5vZGVzTWFwKQogCiB2b2lkIEluc3BlY3RvckRPTUFnZW50Ojp1
bmJpbmQoTm9kZSogbm9kZSwgTm9kZVRvSWRNYXAqIG5vZGVzTWFwKQogewotICAgIGludCBpZCA9
IG5vZGVzTWFwLT5nZXQobm9kZSk7CisgICAgYXV0byBpZCA9IG5vZGVzTWFwLT5nZXQobm9kZSk7
CiAgICAgaWYgKCFpZCkKICAgICAgICAgcmV0dXJuOwogCkBAIC00MjIsNyArNDIxLDcgQEAgdm9p
ZCBJbnNwZWN0b3JET01BZ2VudDo6dW5iaW5kKE5vZGUqIG5vZGUsIE5vZGVUb0lkTWFwKiBub2Rl
c01hcCkKICAgICB9CiB9CiAKLU5vZGUqIEluc3BlY3RvckRPTUFnZW50Ojphc3NlcnROb2RlKEVy
cm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJZCkKK05vZGUqIEluc3BlY3RvckRPTUFn
ZW50Ojphc3NlcnROb2RlKFByb3RvY29sOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIFByb3Rv
Y29sOjpET006Ok5vZGVJZCBub2RlSWQpCiB7CiAgICAgTm9kZSogbm9kZSA9IG5vZGVGb3JJZChu
b2RlSWQpOwogICAgIGlmICghbm9kZSkgewpAQCAtNDMyLDcgKzQzMSw3IEBAIE5vZGUqIEluc3Bl
Y3RvckRPTUFnZW50Ojphc3NlcnROb2RlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5v
ZGVJZCkKICAgICByZXR1cm4gbm9kZTsKIH0KIAotRG9jdW1lbnQqIEluc3BlY3RvckRPTUFnZW50
Ojphc3NlcnREb2N1bWVudChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQpCitE
b2N1bWVudCogSW5zcGVjdG9yRE9NQWdlbnQ6OmFzc2VydERvY3VtZW50KFByb3RvY29sOjpFcnJv
clN0cmluZyYgZXJyb3JTdHJpbmcsIFByb3RvY29sOjpET006Ok5vZGVJZCBub2RlSWQpCiB7CiAg
ICAgTm9kZSogbm9kZSA9IGFzc2VydE5vZGUoZXJyb3JTdHJpbmcsIG5vZGVJZCk7CiAgICAgaWYg
KCFub2RlKQpAQCAtNDQ0LDcgKzQ0Myw3IEBAIERvY3VtZW50KiBJbnNwZWN0b3JET01BZ2VudDo6
YXNzZXJ0RG9jdW1lbnQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkCiAgICAg
cmV0dXJuIGRvd25jYXN0PERvY3VtZW50Pihub2RlKTsKIH0KIAotRWxlbWVudCogSW5zcGVjdG9y
RE9NQWdlbnQ6OmFzc2VydEVsZW1lbnQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgbm9k
ZUlkKQorRWxlbWVudCogSW5zcGVjdG9yRE9NQWdlbnQ6OmFzc2VydEVsZW1lbnQoUHJvdG9jb2w6
OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgUHJvdG9jb2w6OkRPTTo6Tm9kZUlkIG5vZGVJZCkK
IHsKICAgICBOb2RlKiBub2RlID0gYXNzZXJ0Tm9kZShlcnJvclN0cmluZywgbm9kZUlkKTsKICAg
ICBpZiAoIW5vZGUpCkBAIC00NTYsNyArNDU1LDcgQEAgRWxlbWVudCogSW5zcGVjdG9yRE9NQWdl
bnQ6OmFzc2VydEVsZW1lbnQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkKQog
ICAgIHJldHVybiBkb3duY2FzdDxFbGVtZW50Pihub2RlKTsKIH0KIAotTm9kZSogSW5zcGVjdG9y
RE9NQWdlbnQ6OmFzc2VydEVkaXRhYmxlTm9kZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGlu
dCBub2RlSWQpCitOb2RlKiBJbnNwZWN0b3JET01BZ2VudDo6YXNzZXJ0RWRpdGFibGVOb2RlKFBy
b3RvY29sOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIFByb3RvY29sOjpET006Ok5vZGVJZCBu
b2RlSWQpCiB7CiAgICAgTm9kZSogbm9kZSA9IGFzc2VydE5vZGUoZXJyb3JTdHJpbmcsIG5vZGVJ
ZCk7CiAgICAgaWYgKCFub2RlKQpAQCAtNDcyLDcgKzQ3MSw3IEBAIE5vZGUqIEluc3BlY3RvckRP
TUFnZW50Ojphc3NlcnRFZGl0YWJsZU5vZGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQg
bm9kZUlkCiAgICAgcmV0dXJuIG5vZGU7CiB9CiAKLUVsZW1lbnQqIEluc3BlY3RvckRPTUFnZW50
Ojphc3NlcnRFZGl0YWJsZUVsZW1lbnQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgbm9k
ZUlkKQorRWxlbWVudCogSW5zcGVjdG9yRE9NQWdlbnQ6OmFzc2VydEVkaXRhYmxlRWxlbWVudChQ
cm90b2NvbDo6RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBQcm90b2NvbDo6RE9NOjpOb2RlSWQg
bm9kZUlkKQogewogICAgIE5vZGUqIG5vZGUgPSBhc3NlcnRFZGl0YWJsZU5vZGUoZXJyb3JTdHJp
bmcsIG5vZGVJZCk7CiAgICAgaWYgKCFub2RlKQpAQCAtNDg0LDI3ICs0ODMsMjcgQEAgRWxlbWVu
dCogSW5zcGVjdG9yRE9NQWdlbnQ6OmFzc2VydEVkaXRhYmxlRWxlbWVudChFcnJvclN0cmluZyYg
ZXJyb3JTdHJpbmcsIGludAogICAgIHJldHVybiBkb3duY2FzdDxFbGVtZW50Pihub2RlKTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Z2V0RG9jdW1lbnQoRXJyb3JTdHJpbmcmIGVycm9y
U3RyaW5nLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlPiYgcm9vdCkKK1By
b3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxQcm90b2NvbDo6RE9NOjpOb2RlPj4gSW5zcGVjdG9y
RE9NQWdlbnQ6OmdldERvY3VtZW50KCkKIHsKICAgICBtX2RvY3VtZW50UmVxdWVzdGVkID0gdHJ1
ZTsKIAotICAgIGlmICghbV9kb2N1bWVudCkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJJbnRl
cm5hbCBlcnJvcjogbWlzc2luZyBkb2N1bWVudCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
KyAgICBpZiAoIW1fZG9jdW1lbnQpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiSW50
ZXJuYWwgZXJyb3I6IG1pc3NpbmcgZG9jdW1lbnQiX3MpOwogCiAgICAgLy8gUmVzZXQgYmFja2Vu
ZCBzdGF0ZS4KICAgICBSZWZQdHI8RG9jdW1lbnQ+IGRvY3VtZW50ID0gbV9kb2N1bWVudDsKICAg
ICByZXNldCgpOwogICAgIG1fZG9jdW1lbnQgPSBkb2N1bWVudDsKIAotICAgIHJvb3QgPSBidWls
ZE9iamVjdEZvck5vZGUobV9kb2N1bWVudC5nZXQoKSwgMiwgJm1fZG9jdW1lbnROb2RlVG9JZE1h
cCk7CisgICAgYXV0byByb290ID0gYnVpbGRPYmplY3RGb3JOb2RlKG1fZG9jdW1lbnQuZ2V0KCks
IDIsICZtX2RvY3VtZW50Tm9kZVRvSWRNYXApOwogCiAgICAgaWYgKG1fbm9kZVRvRm9jdXMpCiAg
ICAgICAgIGZvY3VzTm9kZSgpOworCisgICAgcmV0dXJuIFdURk1vdmUocm9vdCk7CiB9CiAKLXZv
aWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnB1c2hDaGlsZE5vZGVzVG9Gcm9udGVuZChpbnQgbm9kZUlk
LCBpbnQgZGVwdGgpCit2b2lkIEluc3BlY3RvckRPTUFnZW50OjpwdXNoQ2hpbGROb2Rlc1RvRnJv
bnRlbmQoUHJvdG9jb2w6OkRPTTo6Tm9kZUlkIG5vZGVJZCwgaW50IGRlcHRoKQogewogICAgIE5v
ZGUqIG5vZGUgPSBub2RlRm9ySWQobm9kZUlkKTsKICAgICBpZiAoIW5vZGUgfHwgKG5vZGUtPm5v
ZGVUeXBlKCkgIT0gTm9kZTo6RUxFTUVOVF9OT0RFICYmIG5vZGUtPm5vZGVUeXBlKCkgIT0gTm9k
ZTo6RE9DVU1FTlRfTk9ERSAmJiBub2RlLT5ub2RlVHlwZSgpICE9IE5vZGU6OkRPQ1VNRU5UX0ZS
QUdNRU5UX05PREUpKQpAQCAtNTE5LDcgKzUxOCw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6
OnB1c2hDaGlsZE5vZGVzVG9Gcm9udGVuZChpbnQgbm9kZUlkLCBpbnQgZGVwdGgpCiAgICAgICAg
IGRlcHRoLS07CiAKICAgICAgICAgZm9yIChub2RlID0gaW5uZXJGaXJzdENoaWxkKG5vZGUpOyBu
b2RlOyBub2RlID0gaW5uZXJOZXh0U2libGluZyhub2RlKSkgewotICAgICAgICAgICAgaW50IGNo
aWxkTm9kZUlkID0gbm9kZU1hcC0+Z2V0KG5vZGUpOworICAgICAgICAgICAgYXV0byBjaGlsZE5v
ZGVJZCA9IG5vZGVNYXAtPmdldChub2RlKTsKICAgICAgICAgICAgIEFTU0VSVChjaGlsZE5vZGVJ
ZCk7CiAgICAgICAgICAgICBwdXNoQ2hpbGROb2Rlc1RvRnJvbnRlbmQoY2hpbGROb2RlSWQsIGRl
cHRoKTsKICAgICAgICAgfQpAQCAtNTQxLDE4ICs1NDAsMTggQEAgdm9pZCBJbnNwZWN0b3JET01B
Z2VudDo6ZGlzY2FyZEJpbmRpbmdzKCkKICAgICBtX2NoaWxkcmVuUmVxdWVzdGVkLmNsZWFyKCk7
CiB9CiAKLWludCBJbnNwZWN0b3JET01BZ2VudDo6cHVzaE5vZGVUb0Zyb250ZW5kKE5vZGUqIG5v
ZGVUb1B1c2gpCitQcm90b2NvbDo6RE9NOjpOb2RlSWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnB1c2hO
b2RlVG9Gcm9udGVuZChOb2RlKiBub2RlVG9QdXNoKQogewogICAgIGlmICghbm9kZVRvUHVzaCkK
ICAgICAgICAgcmV0dXJuIDA7CiAKICAgICAvLyBGSVhNRTogPGh0dHBzOi8vd2Via2l0Lm9yZy9i
LzIxMzQ5OT4gV2ViIEluc3BlY3RvcjogYWxsb3cgRE9NIG5vZGVzIHRvIGJlIGluc3RydW1lbnRl
ZCBhdCBhbnkgcG9pbnQsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGUgbWFpbiBkb2N1bWVudCBo
YXMgYWxzbyBiZWVuIGluc3RydW1lbnRlZAogCi0gICAgRXJyb3JTdHJpbmcgaWdub3JlZDsKKyAg
ICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgaWdub3JlZDsKICAgICByZXR1cm4gcHVzaE5vZGVUb0Zy
b250ZW5kKGlnbm9yZWQsIGJvdW5kTm9kZUlkKCZub2RlVG9QdXNoLT5kb2N1bWVudCgpKSwgbm9k
ZVRvUHVzaCk7CiB9CiAKLWludCBJbnNwZWN0b3JET01BZ2VudDo6cHVzaE5vZGVUb0Zyb250ZW5k
KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IGRvY3VtZW50Tm9kZUlkLCBOb2RlKiBub2Rl
VG9QdXNoKQorUHJvdG9jb2w6OkRPTTo6Tm9kZUlkIEluc3BlY3RvckRPTUFnZW50OjpwdXNoTm9k
ZVRvRnJvbnRlbmQoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgUHJvdG9jb2w6
OkRPTTo6Tm9kZUlkIGRvY3VtZW50Tm9kZUlkLCBOb2RlKiBub2RlVG9QdXNoKQogewogICAgIERv
Y3VtZW50KiBkb2N1bWVudCA9IGFzc2VydERvY3VtZW50KGVycm9yU3RyaW5nLCBkb2N1bWVudE5v
ZGVJZCk7CiAgICAgaWYgKCFkb2N1bWVudCkKQEAgLTU2NSw3ICs1NjQsNyBAQCBpbnQgSW5zcGVj
dG9yRE9NQWdlbnQ6OnB1c2hOb2RlVG9Gcm9udGVuZChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcs
IGludCBkb2N1bWVudAogICAgIHJldHVybiBwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKGVycm9yU3Ry
aW5nLCBub2RlVG9QdXNoKTsKIH0KIAotTm9kZSogSW5zcGVjdG9yRE9NQWdlbnQ6Om5vZGVGb3JJ
ZChpbnQgaWQpCitOb2RlKiBJbnNwZWN0b3JET01BZ2VudDo6bm9kZUZvcklkKFByb3RvY29sOjpE
T006Ok5vZGVJZCBpZCkKIHsKICAgICBpZiAoIW1faWRUb05vZGUuaXNWYWxpZEtleShpZCkpCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtNTczLDcgKzU3Miw3IEBAIE5vZGUqIEluc3BlY3Rv
ckRPTUFnZW50Ojpub2RlRm9ySWQoaW50IGlkKQogICAgIHJldHVybiBtX2lkVG9Ob2RlLmdldChp
ZCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnJlcXVlc3RDaGlsZE5vZGVzKEVycm9y
U3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJZCwgY29uc3QgaW50KiBkZXB0aCkKK1Byb3Rv
Y29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRPTUFnZW50OjpyZXF1ZXN0Q2hpbGRO
b2RlcyhQcm90b2NvbDo6RE9NOjpOb2RlSWQgbm9kZUlkLCBPcHRpb25hbDxpbnQ+JiYgZGVwdGgp
CiB7CiAgICAgaW50IHNhbml0aXplZERlcHRoOwogCkBAIC01ODMsNjQgKzU4Miw2NCBAQCB2b2lk
IEluc3BlY3RvckRPTUFnZW50OjpyZXF1ZXN0Q2hpbGROb2RlcyhFcnJvclN0cmluZyYgZXJyb3JT
dHJpbmcsIGludCBub2RlSWQsCiAgICAgICAgIHNhbml0aXplZERlcHRoID0gSU5UX01BWDsKICAg
ICBlbHNlIGlmICgqZGVwdGggPiAwKQogICAgICAgICBzYW5pdGl6ZWREZXB0aCA9ICpkZXB0aDsK
LSAgICBlbHNlIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiVW5leHBlY3RlZCB2YWx1ZSBiZWxv
dyAtMSBmb3IgZ2l2ZW4gZGVwdGgiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgZWxz
ZQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIlVuZXhwZWN0ZWQgdmFsdWUgYmVsb3cg
LTEgZm9yIGdpdmVuIGRlcHRoIl9zKTsKIAogICAgIHB1c2hDaGlsZE5vZGVzVG9Gcm9udGVuZChu
b2RlSWQsIHNhbml0aXplZERlcHRoKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5z
cGVjdG9yRE9NQWdlbnQ6OnF1ZXJ5U2VsZWN0b3IoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBp
bnQgbm9kZUlkLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9ycywgaW50KiBlbGVtZW50SWQpCitQcm90
b2NvbDo6RXJyb3JTdHJpbmdPcjxQcm90b2NvbDo6RE9NOjpOb2RlSWQ+IEluc3BlY3RvckRPTUFn
ZW50OjpxdWVyeVNlbGVjdG9yKFByb3RvY29sOjpET006Ok5vZGVJZCBub2RlSWQsIGNvbnN0IFN0
cmluZyYgc2VsZWN0b3IpCiB7Ci0gICAgKmVsZW1lbnRJZCA9IDA7CisgICAgUHJvdG9jb2w6OkVy
cm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAgICAgTm9kZSogbm9kZSA9IGFzc2VydE5vZGUoZXJy
b3JTdHJpbmcsIG5vZGVJZCk7CiAgICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm47Ci0gICAg
aWYgKCFpczxDb250YWluZXJOb2RlPigqbm9kZSkpIHsKLSAgICAgICAgYXNzZXJ0RWxlbWVudChl
cnJvclN0cmluZywgbm9kZUlkKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICAgICAgcmV0
dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKKyAgICBpZiAoIWlzPENvbnRhaW5lck5v
ZGU+KCpub2RlKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJOb2RlIGZvciBnaXZl
biBub2RlSWQgaXMgbm90IGEgY29udGFpbmVyIG5vZGUiX3MpOwogCi0gICAgYXV0byBxdWVyeVJl
c3VsdCA9IGRvd25jYXN0PENvbnRhaW5lck5vZGU+KCpub2RlKS5xdWVyeVNlbGVjdG9yKHNlbGVj
dG9ycyk7Ci0gICAgaWYgKHF1ZXJ5UmVzdWx0Lmhhc0V4Y2VwdGlvbigpKSB7Ci0gICAgICAgIGVy
cm9yU3RyaW5nID0gIkRPTSBFcnJvciB3aGlsZSBxdWVyeWluZyB3aXRoIGdpdmVuIHNlbGVjdG9y
cyJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBhdXRvIHF1ZXJ5UmVzdWx0ID0gZG93
bmNhc3Q8Q29udGFpbmVyTm9kZT4oKm5vZGUpLnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpOworICAg
IGlmIChxdWVyeVJlc3VsdC5oYXNFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4
cGVjdGVkKEluc3BlY3RvckRPTUFnZW50Ojp0b0Vycm9yU3RyaW5nKHF1ZXJ5UmVzdWx0LnJlbGVh
c2VFeGNlcHRpb24oKSkpOwogCi0gICAgaWYgKGF1dG8qIGVsZW1lbnQgPSBxdWVyeVJlc3VsdC5y
ZWxlYXNlUmV0dXJuVmFsdWUoKSkKLSAgICAgICAgKmVsZW1lbnRJZCA9IHB1c2hOb2RlUGF0aFRv
RnJvbnRlbmQoZXJyb3JTdHJpbmcsIGVsZW1lbnQpOworICAgIGF1dG8gcmVzdWx0Tm9kZUlkID0g
cHVzaE5vZGVQYXRoVG9Gcm9udGVuZChlcnJvclN0cmluZywgcXVlcnlSZXN1bHQucmVsZWFzZVJl
dHVyblZhbHVlKCkpOworICAgIGlmICghcmVzdWx0Tm9kZUlkKQorICAgICAgICByZXR1cm4gbWFr
ZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOworCisgICAgcmV0dXJuIHJlc3VsdE5vZGVJZDsKIH0K
IAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6cXVlcnlTZWxlY3RvckFsbChFcnJvclN0cmluZyYg
ZXJyb3JTdHJpbmcsIGludCBub2RlSWQsIGNvbnN0IFN0cmluZyYgc2VsZWN0b3JzLCBSZWZQdHI8
SlNPTjo6QXJyYXlPZjxpbnQ+PiYgcmVzdWx0KQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVm
PEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkRPTTo6Tm9kZUlkPj4+IEluc3BlY3RvckRPTUFnZW50
OjpxdWVyeVNlbGVjdG9yQWxsKFByb3RvY29sOjpET006Ok5vZGVJZCBub2RlSWQsIGNvbnN0IFN0
cmluZyYgc2VsZWN0b3IpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5n
OworCiAgICAgTm9kZSogbm9kZSA9IGFzc2VydE5vZGUoZXJyb3JTdHJpbmcsIG5vZGVJZCk7CiAg
ICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKCFpczxDb250YWluZXJOb2Rl
Pigqbm9kZSkpIHsKLSAgICAgICAgYXNzZXJ0RWxlbWVudChlcnJvclN0cmluZywgbm9kZUlkKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVy
cm9yU3RyaW5nKTsKKyAgICBpZiAoIWlzPENvbnRhaW5lck5vZGU+KCpub2RlKSkKKyAgICAgICAg
cmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJOb2RlIGZvciBnaXZlbiBub2RlSWQgaXMgbm90IGEgY29u
dGFpbmVyIG5vZGUiX3MpOwogCi0gICAgYXV0byBxdWVyeVJlc3VsdCA9IGRvd25jYXN0PENvbnRh
aW5lck5vZGU+KCpub2RlKS5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9ycyk7Ci0gICAgaWYgKHF1
ZXJ5UmVzdWx0Lmhhc0V4Y2VwdGlvbigpKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIkRPTSBF
cnJvciB3aGlsZSBxdWVyeWluZyB3aXRoIGdpdmVuIHNlbGVjdG9ycyJfczsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KKyAgICBhdXRvIHF1ZXJ5UmVzdWx0ID0gZG93bmNhc3Q8Q29udGFpbmVyTm9k
ZT4oKm5vZGUpLnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpOworICAgIGlmIChxdWVyeVJlc3Vs
dC5oYXNFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEluc3BlY3Rv
ckRPTUFnZW50Ojp0b0Vycm9yU3RyaW5nKHF1ZXJ5UmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKSkp
OwogCiAgICAgYXV0byBub2RlcyA9IHF1ZXJ5UmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpOwot
ICAgIHJlc3VsdCA9IEpTT046OkFycmF5T2Y8aW50Pjo6Y3JlYXRlKCk7CisKKyAgICBhdXRvIG5v
ZGVJZHMgPSBKU09OOjpBcnJheU9mPFByb3RvY29sOjpET006Ok5vZGVJZD46OmNyZWF0ZSgpOwog
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBub2Rlcy0+bGVuZ3RoKCk7ICsraSkKLSAgICAg
ICAgcmVzdWx0LT5hZGRJdGVtKHB1c2hOb2RlUGF0aFRvRnJvbnRlbmQobm9kZXMtPml0ZW0oaSkp
KTsKKyAgICAgICAgbm9kZUlkcy0+YWRkSXRlbShwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKG5vZGVz
LT5pdGVtKGkpKSk7CisgICAgcmV0dXJuIFdURk1vdmUobm9kZUlkcyk7CiB9CiAKLWludCBJbnNw
ZWN0b3JET01BZ2VudDo6cHVzaE5vZGVQYXRoVG9Gcm9udGVuZChOb2RlKiBub2RlVG9QdXNoKQor
UHJvdG9jb2w6OkRPTTo6Tm9kZUlkIEluc3BlY3RvckRPTUFnZW50OjpwdXNoTm9kZVBhdGhUb0Zy
b250ZW5kKE5vZGUqIG5vZGVUb1B1c2gpCiB7Ci0gICAgRXJyb3JTdHJpbmcgaWdub3JlZDsKKyAg
ICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgaWdub3JlZDsKICAgICByZXR1cm4gcHVzaE5vZGVQYXRo
VG9Gcm9udGVuZChpZ25vcmVkLCBub2RlVG9QdXNoKTsKIH0KIAotaW50IEluc3BlY3RvckRPTUFn
ZW50OjpwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKEVycm9yU3RyaW5nIGVycm9yU3RyaW5nLCBOb2Rl
KiBub2RlVG9QdXNoKQorUHJvdG9jb2w6OkRPTTo6Tm9kZUlkIEluc3BlY3RvckRPTUFnZW50Ojpw
dXNoTm9kZVBhdGhUb0Zyb250ZW5kKFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZywg
Tm9kZSogbm9kZVRvUHVzaCkKIHsKICAgICBBU1NFUlQobm9kZVRvUHVzaCk7ICAvLyBJbnZhbGlk
IGlucHV0CiAKQEAgLTY1Niw4ICs2NTUsNyBAQCBpbnQgSW5zcGVjdG9yRE9NQWdlbnQ6OnB1c2hO
b2RlUGF0aFRvRnJvbnRlbmQoRXJyb3JTdHJpbmcgZXJyb3JTdHJpbmcsIE5vZGUqIG5vZAogICAg
IH0KIAogICAgIC8vIFJldHVybiBpZCBpbiBjYXNlIHRoZSBub2RlIGlzIGtub3duLgotICAgIGlu
dCByZXN1bHQgPSBtX2RvY3VtZW50Tm9kZVRvSWRNYXAuZ2V0KG5vZGVUb1B1c2gpOwotICAgIGlm
IChyZXN1bHQpCisgICAgaWYgKGF1dG8gcmVzdWx0ID0gbV9kb2N1bWVudE5vZGVUb0lkTWFwLmdl
dChub2RlVG9QdXNoKSkKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKIAogICAgIE5vZGUqIG5vZGUg
PSBub2RlVG9QdXNoOwpAQCAtNjcxLDcgKzY2OSw3IEBAIGludCBJbnNwZWN0b3JET01BZ2VudDo6
cHVzaE5vZGVQYXRoVG9Gcm9udGVuZChFcnJvclN0cmluZyBlcnJvclN0cmluZywgTm9kZSogbm9k
CiAgICAgICAgICAgICBhdXRvIG5ld01hcCA9IG1ha2VVbmlxdWU8Tm9kZVRvSWRNYXA+KCk7CiAg
ICAgICAgICAgICBkYW5nbGluZ01hcCA9IG5ld01hcC5nZXQoKTsKICAgICAgICAgICAgIG1fZGFu
Z2xpbmdOb2RlVG9JZE1hcHMuYXBwZW5kKG5ld01hcC5yZWxlYXNlKCkpOwotICAgICAgICAgICAg
YXV0byBjaGlsZHJlbiA9IEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpO
b2RlPjo6Y3JlYXRlKCk7CisgICAgICAgICAgICBhdXRvIGNoaWxkcmVuID0gSlNPTjo6QXJyYXlP
ZjxQcm90b2NvbDo6RE9NOjpOb2RlPjo6Y3JlYXRlKCk7CiAgICAgICAgICAgICBjaGlsZHJlbi0+
YWRkSXRlbShidWlsZE9iamVjdEZvck5vZGUobm9kZSwgMCwgZGFuZ2xpbmdNYXApKTsKICAgICAg
ICAgICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5zZXRDaGlsZE5vZGVzKDAsIFdURk1vdmUoY2hp
bGRyZW4pKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtNjg2LDIyMSArNjg0LDI1MiBAQCBpbnQg
SW5zcGVjdG9yRE9NQWdlbnQ6OnB1c2hOb2RlUGF0aFRvRnJvbnRlbmQoRXJyb3JTdHJpbmcgZXJy
b3JTdHJpbmcsIE5vZGUqIG5vZAogCiAgICAgTm9kZVRvSWRNYXAqIG1hcCA9IGRhbmdsaW5nTWFw
ID8gZGFuZ2xpbmdNYXAgOiAmbV9kb2N1bWVudE5vZGVUb0lkTWFwOwogICAgIGZvciAoaW50IGkg
PSBwYXRoLnNpemUoKSAtIDE7IGkgPj0gMDsgLS1pKSB7Ci0gICAgICAgIGludCBub2RlSWQgPSBt
YXAtPmdldChwYXRoLmF0KGkpKTsKKyAgICAgICAgYXV0byBub2RlSWQgPSBtYXAtPmdldChwYXRo
LmF0KGkpKTsKICAgICAgICAgQVNTRVJUKG5vZGVJZCk7CiAgICAgICAgIHB1c2hDaGlsZE5vZGVz
VG9Gcm9udGVuZChub2RlSWQpOwogICAgIH0KICAgICByZXR1cm4gbWFwLT5nZXQobm9kZVRvUHVz
aCk7CiB9CiAKLWludCBJbnNwZWN0b3JET01BZ2VudDo6Ym91bmROb2RlSWQoY29uc3QgTm9kZSog
bm9kZSkKK1Byb3RvY29sOjpET006Ok5vZGVJZCBJbnNwZWN0b3JET01BZ2VudDo6Ym91bmROb2Rl
SWQoY29uc3QgTm9kZSogbm9kZSkKIHsKICAgICByZXR1cm4gbV9kb2N1bWVudE5vZGVUb0lkTWFw
LmdldChjb25zdF9jYXN0PE5vZGUqPihub2RlKSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdl
bnQ6OnNldEF0dHJpYnV0ZVZhbHVlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IGVsZW1l
bnRJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKQorUHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yRE9NQWdlbnQ6OnNldEF0dHJpYnV0ZVZhbHVl
KFByb3RvY29sOjpET006Ok5vZGVJZCBub2RlSWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3Qg
U3RyaW5nJiB2YWx1ZSkKIHsKLSAgICBFbGVtZW50KiBlbGVtZW50ID0gYXNzZXJ0RWRpdGFibGVF
bGVtZW50KGVycm9yU3RyaW5nLCBlbGVtZW50SWQpOwotICAgIGlmICghZWxlbWVudCkKLSAgICAg
ICAgcmV0dXJuOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKIAotICAg
IG1fZG9tRWRpdG9yLT5zZXRBdHRyaWJ1dGUoKmVsZW1lbnQsIG5hbWUsIHZhbHVlLCBlcnJvclN0
cmluZyk7CisgICAgRWxlbWVudCogZWxlbWVudCA9IGFzc2VydEVkaXRhYmxlRWxlbWVudChlcnJv
clN0cmluZywgbm9kZUlkKTsKKyAgICBpZiAoIWVsZW1lbnQpCisgICAgICAgIHJldHVybiBtYWtl
VW5leHBlY3RlZChlcnJvclN0cmluZyk7CisKKyAgICBpZiAoIW1fZG9tRWRpdG9yLT5zZXRBdHRy
aWJ1dGUoKmVsZW1lbnQsIG5hbWUsIHZhbHVlLCBlcnJvclN0cmluZykpCisgICAgICAgIHJldHVy
biBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12
b2lkIEluc3BlY3RvckRPTUFnZW50OjpzZXRBdHRyaWJ1dGVzQXNUZXh0KEVycm9yU3RyaW5nJiBl
cnJvclN0cmluZywgaW50IGVsZW1lbnRJZCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBTdHJp
bmcqIG5hbWUpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JET01BZ2Vu
dDo6c2V0QXR0cmlidXRlc0FzVGV4dChQcm90b2NvbDo6RE9NOjpOb2RlSWQgbm9kZUlkLCBjb25z
dCBTdHJpbmcmIHRleHQsIGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKLSAgICBFbGVtZW50KiBlbGVt
ZW50ID0gYXNzZXJ0RWRpdGFibGVFbGVtZW50KGVycm9yU3RyaW5nLCBlbGVtZW50SWQpOworICAg
IFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKworICAgIEVsZW1lbnQqIGVsZW1l
bnQgPSBhc3NlcnRFZGl0YWJsZUVsZW1lbnQoZXJyb3JTdHJpbmcsIG5vZGVJZCk7CiAgICAgaWYg
KCFlbGVtZW50KQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3Rl
ZChlcnJvclN0cmluZyk7CiAKICAgICBhdXRvIHBhcnNlZEVsZW1lbnQgPSBjcmVhdGVIVE1MRWxl
bWVudChlbGVtZW50LT5kb2N1bWVudCgpLCBzcGFuVGFnKTsKICAgICBhdXRvIHJlc3VsdCA9IHBh
cnNlZEVsZW1lbnQuZ2V0KCkuc2V0SW5uZXJIVE1MKCI8c3BhbiAiICsgdGV4dCArICI+PC9zcGFu
PiIpOwotICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgZXJyb3JTdHJp
bmcgPSB0b0Vycm9yU3RyaW5nKHJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCkpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQorICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpCisgICAgICAgIHJl
dHVybiBtYWtlVW5leHBlY3RlZChJbnNwZWN0b3JET01BZ2VudDo6dG9FcnJvclN0cmluZyhyZXN1
bHQucmVsZWFzZUV4Y2VwdGlvbigpKSk7CiAKICAgICBOb2RlKiBjaGlsZCA9IHBhcnNlZEVsZW1l
bnQtPmZpcnN0Q2hpbGQoKTsKLSAgICBpZiAoIWNoaWxkKSB7Ci0gICAgICAgIGVycm9yU3RyaW5n
ID0gIkNvdWxkIG5vdCBwYXJzZSBnaXZlbiB0ZXh0Il9zOwotICAgICAgICByZXR1cm47Ci0gICAg
fQorICAgIGlmICghY2hpbGQpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiQ291bGQg
bm90IHBhcnNlIGdpdmVuIHRleHQiX3MpOwogCiAgICAgRWxlbWVudCogY2hpbGRFbGVtZW50ID0g
ZG93bmNhc3Q8RWxlbWVudD4oY2hpbGQpOwotICAgIGlmICghY2hpbGRFbGVtZW50LT5oYXNBdHRy
aWJ1dGVzKCkgJiYgbmFtZSkgewotICAgICAgICBtX2RvbUVkaXRvci0+cmVtb3ZlQXR0cmlidXRl
KCplbGVtZW50LCAqbmFtZSwgZXJyb3JTdHJpbmcpOwotICAgICAgICByZXR1cm47CisgICAgaWYg
KCFjaGlsZEVsZW1lbnQtPmhhc0F0dHJpYnV0ZXMoKSAmJiAhIW5hbWUpIHsKKyAgICAgICAgaWYg
KCFtX2RvbUVkaXRvci0+cmVtb3ZlQXR0cmlidXRlKCplbGVtZW50LCBuYW1lLCBlcnJvclN0cmlu
ZykpCisgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOworICAg
ICAgICByZXR1cm4geyB9OwogICAgIH0KIAogICAgIGJvb2wgZm91bmRPcmlnaW5hbEF0dHJpYnV0
ZSA9IGZhbHNlOwogICAgIGZvciAoY29uc3QgQXR0cmlidXRlJiBhdHRyaWJ1dGUgOiBjaGlsZEVs
ZW1lbnQtPmF0dHJpYnV0ZXNJdGVyYXRvcigpKSB7CiAgICAgICAgIC8vIEFkZCBhdHRyaWJ1dGUg
cGFpcgotICAgICAgICBmb3VuZE9yaWdpbmFsQXR0cmlidXRlID0gZm91bmRPcmlnaW5hbEF0dHJp
YnV0ZSB8fCAobmFtZSAmJiBhdHRyaWJ1dGUubmFtZSgpLnRvU3RyaW5nKCkgPT0gKm5hbWUpOwor
ICAgICAgICBmb3VuZE9yaWdpbmFsQXR0cmlidXRlID0gZm91bmRPcmlnaW5hbEF0dHJpYnV0ZSB8
fCBhdHRyaWJ1dGUubmFtZSgpLnRvU3RyaW5nKCkgPT0gbmFtZTsKICAgICAgICAgaWYgKCFtX2Rv
bUVkaXRvci0+c2V0QXR0cmlidXRlKCplbGVtZW50LCBhdHRyaWJ1dGUubmFtZSgpLnRvU3RyaW5n
KCksIGF0dHJpYnV0ZS52YWx1ZSgpLCBlcnJvclN0cmluZykpCi0gICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogICAgIH0K
IAotICAgIGlmICghZm91bmRPcmlnaW5hbEF0dHJpYnV0ZSAmJiBuYW1lICYmICFuYW1lLT5zdHJp
cFdoaXRlU3BhY2UoKS5pc0VtcHR5KCkpCi0gICAgICAgIG1fZG9tRWRpdG9yLT5yZW1vdmVBdHRy
aWJ1dGUoKmVsZW1lbnQsICpuYW1lLCBlcnJvclN0cmluZyk7CisgICAgaWYgKCFmb3VuZE9yaWdp
bmFsQXR0cmlidXRlICYmICFuYW1lLnN0cmlwV2hpdGVTcGFjZSgpLmlzRW1wdHkoKSkgeworICAg
ICAgICBpZiAoIW1fZG9tRWRpdG9yLT5yZW1vdmVBdHRyaWJ1dGUoKmVsZW1lbnQsIG5hbWUsIGVy
cm9yU3RyaW5nKSkKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmlu
Zyk7CisgICAgfQorCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2Vu
dDo6cmVtb3ZlQXR0cmlidXRlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IGVsZW1lbnRJ
ZCwgY29uc3QgU3RyaW5nJiBuYW1lKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5z
cGVjdG9yRE9NQWdlbnQ6OnJlbW92ZUF0dHJpYnV0ZShQcm90b2NvbDo6RE9NOjpOb2RlSWQgbm9k
ZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUpCiB7Ci0gICAgRWxlbWVudCogZWxlbWVudCA9IGFzc2Vy
dEVkaXRhYmxlRWxlbWVudChlcnJvclN0cmluZywgZWxlbWVudElkKTsKKyAgICBQcm90b2NvbDo6
RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKKyAgICBFbGVtZW50KiBlbGVtZW50ID0gYXNzZXJ0
RWRpdGFibGVFbGVtZW50KGVycm9yU3RyaW5nLCBub2RlSWQpOwogICAgIGlmICghZWxlbWVudCkK
LSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJp
bmcpOwogCi0gICAgbV9kb21FZGl0b3ItPnJlbW92ZUF0dHJpYnV0ZSgqZWxlbWVudCwgbmFtZSwg
ZXJyb3JTdHJpbmcpOworICAgIGlmICghbV9kb21FZGl0b3ItPnJlbW92ZUF0dHJpYnV0ZSgqZWxl
bWVudCwgbmFtZSwgZXJyb3JTdHJpbmcpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQo
ZXJyb3JTdHJpbmcpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01B
Z2VudDo6cmVtb3ZlTm9kZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQpCitQ
cm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JET01BZ2VudDo6cmVtb3ZlTm9k
ZShQcm90b2NvbDo6RE9NOjpOb2RlSWQgbm9kZUlkKQogeworICAgIFByb3RvY29sOjpFcnJvclN0
cmluZyBlcnJvclN0cmluZzsKKwogICAgIE5vZGUqIG5vZGUgPSBhc3NlcnRFZGl0YWJsZU5vZGUo
ZXJyb3JTdHJpbmcsIG5vZGVJZCk7CiAgICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm47Cisg
ICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAgICBDb250YWlu
ZXJOb2RlKiBwYXJlbnROb2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpOwotICAgIGlmICghcGFyZW50
Tm9kZSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJDYW5ub3QgcmVtb3ZlIGRldGFjaGVkIG5v
ZGUiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKCFwYXJlbnROb2RlKQorICAg
ICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkNhbm5vdCByZW1vdmUgZGV0YWNoZWQgbm9kZSJf
cyk7CiAKLSAgICBtX2RvbUVkaXRvci0+cmVtb3ZlQ2hpbGQoKnBhcmVudE5vZGUsICpub2RlLCBl
cnJvclN0cmluZyk7CisgICAgaWYgKCFtX2RvbUVkaXRvci0+cmVtb3ZlQ2hpbGQoKnBhcmVudE5v
ZGUsICpub2RlLCBlcnJvclN0cmluZykpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChl
cnJvclN0cmluZyk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckRPTUFn
ZW50OjpzZXROb2RlTmFtZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQsIGNv
bnN0IFN0cmluZyYgdGFnTmFtZSwgaW50KiBuZXdJZCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09y
PFByb3RvY29sOjpET006Ok5vZGVJZD4gSW5zcGVjdG9yRE9NQWdlbnQ6OnNldE5vZGVOYW1lKFBy
b3RvY29sOjpET006Ok5vZGVJZCBub2RlSWQsIGNvbnN0IFN0cmluZyYgdGFnTmFtZSkKIHsKLSAg
ICAqbmV3SWQgPSAwOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKIAot
ICAgIFJlZlB0cjxOb2RlPiBvbGROb2RlID0gbm9kZUZvcklkKG5vZGVJZCk7Ci0gICAgaWYgKCFp
czxFbGVtZW50PihvbGROb2RlKSkKLSAgICAgICAgcmV0dXJuOworICAgIGF1dG8gb2xkTm9kZSA9
IGFzc2VydEVsZW1lbnQoZXJyb3JTdHJpbmcsIG5vZGVJZCk7CisgICAgaWYgKCFvbGROb2RlKQor
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCiAgICAgYXV0byBj
cmVhdGVFbGVtZW50UmVzdWx0ID0gb2xkTm9kZS0+ZG9jdW1lbnQoKS5jcmVhdGVFbGVtZW50Rm9y
QmluZGluZ3ModGFnTmFtZSk7CiAgICAgaWYgKGNyZWF0ZUVsZW1lbnRSZXN1bHQuaGFzRXhjZXB0
aW9uKCkpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKElu
c3BlY3RvckRPTUFnZW50Ojp0b0Vycm9yU3RyaW5nKGNyZWF0ZUVsZW1lbnRSZXN1bHQucmVsZWFz
ZUV4Y2VwdGlvbigpKSk7CisKICAgICBhdXRvIG5ld0VsZW1lbnQgPSBjcmVhdGVFbGVtZW50UmVz
dWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpOwogCiAgICAgLy8gQ29weSBvdmVyIHRoZSBvcmlnaW5h
bCBub2RlJ3MgYXR0cmlidXRlcy4KLSAgICBuZXdFbGVtZW50LT5jbG9uZUF0dHJpYnV0ZXNGcm9t
RWxlbWVudChkb3duY2FzdDxFbGVtZW50Pigqb2xkTm9kZSkpOworICAgIG5ld0VsZW1lbnQtPmNs
b25lQXR0cmlidXRlc0Zyb21FbGVtZW50KCpvbGROb2RlKTsKIAogICAgIC8vIENvcHkgb3ZlciB0
aGUgb3JpZ2luYWwgbm9kZSdzIGNoaWxkcmVuLgogICAgIFJlZlB0cjxOb2RlPiBjaGlsZDsKICAg
ICB3aGlsZSAoKGNoaWxkID0gb2xkTm9kZS0+Zmlyc3RDaGlsZCgpKSkgewogICAgICAgICBpZiAo
IW1fZG9tRWRpdG9yLT5pbnNlcnRCZWZvcmUobmV3RWxlbWVudCwgKmNoaWxkLCAwLCBlcnJvclN0
cmluZykpCi0gICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoZXJyb3JTdHJpbmcpOwogICAgIH0KIAogICAgIC8vIFJlcGxhY2UgdGhlIG9sZCBub2Rl
IHdpdGggdGhlIG5ldyBub2RlCiAgICAgUmVmUHRyPENvbnRhaW5lck5vZGU+IHBhcmVudCA9IG9s
ZE5vZGUtPnBhcmVudE5vZGUoKTsKICAgICBpZiAoIW1fZG9tRWRpdG9yLT5pbnNlcnRCZWZvcmUo
KnBhcmVudCwgbmV3RWxlbWVudC5jb3B5UmVmKCksIG9sZE5vZGUtPm5leHRTaWJsaW5nKCksIGVy
cm9yU3RyaW5nKSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0
ZWQoZXJyb3JTdHJpbmcpOwogICAgIGlmICghbV9kb21FZGl0b3ItPnJlbW92ZUNoaWxkKCpwYXJl
bnQsICpvbGROb2RlLCBlcnJvclN0cmluZykpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0
dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAotICAgICpuZXdJZCA9IHB1c2hOb2Rl
UGF0aFRvRnJvbnRlbmQoZXJyb3JTdHJpbmcsIG5ld0VsZW1lbnQucHRyKCkpOworICAgIGF1dG8g
cmVzdWx0Tm9kZUlkID0gcHVzaE5vZGVQYXRoVG9Gcm9udGVuZChlcnJvclN0cmluZywgbmV3RWxl
bWVudC5wdHIoKSk7CiAgICAgaWYgKG1fY2hpbGRyZW5SZXF1ZXN0ZWQuY29udGFpbnMobm9kZUlk
KSkKLSAgICAgICAgcHVzaENoaWxkTm9kZXNUb0Zyb250ZW5kKCpuZXdJZCk7CisgICAgICAgIHB1
c2hDaGlsZE5vZGVzVG9Gcm9udGVuZChyZXN1bHROb2RlSWQpOworCisgICAgcmV0dXJuIHJlc3Vs
dE5vZGVJZDsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Z2V0T3V0ZXJIVE1MKEVycm9y
U3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJZCwgV1RGOjpTdHJpbmcqIG91dGVySFRNTCkK
K1Byb3RvY29sOjpFcnJvclN0cmluZ09yPFN0cmluZz4gSW5zcGVjdG9yRE9NQWdlbnQ6OmdldE91
dGVySFRNTChQcm90b2NvbDo6RE9NOjpOb2RlSWQgbm9kZUlkKQogeworICAgIFByb3RvY29sOjpF
cnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIE5vZGUqIG5vZGUgPSBhc3NlcnROb2RlKGVy
cm9yU3RyaW5nLCBub2RlSWQpOwogICAgIGlmICghbm9kZSkKLSAgICAgICAgcmV0dXJuOworICAg
ICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCi0gICAgKm91dGVySFRN
TCA9IHNlcmlhbGl6ZUZyYWdtZW50KCpub2RlLCBTZXJpYWxpemVkTm9kZXM6OlN1YnRyZWVJbmNs
dWRpbmdOb2RlKTsKKyAgICByZXR1cm4gc2VyaWFsaXplRnJhZ21lbnQoKm5vZGUsIFNlcmlhbGl6
ZWROb2Rlczo6U3VidHJlZUluY2x1ZGluZ05vZGUpOwogfQogCi12b2lkIEluc3BlY3RvckRPTUFn
ZW50OjpzZXRPdXRlckhUTUwoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkLCBj
b25zdCBTdHJpbmcmIG91dGVySFRNTCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IElu
c3BlY3RvckRPTUFnZW50OjpzZXRPdXRlckhUTUwoUHJvdG9jb2w6OkRPTTo6Tm9kZUlkIG5vZGVJ
ZCwgY29uc3QgU3RyaW5nJiBvdXRlckhUTUwpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5n
IGVycm9yU3RyaW5nOworCiAgICAgaWYgKCFub2RlSWQpIHsKICAgICAgICAgRE9NUGF0Y2hTdXBw
b3J0IHsgKm1fZG9tRWRpdG9yLCAqbV9kb2N1bWVudCB9LnBhdGNoRG9jdW1lbnQob3V0ZXJIVE1M
KTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAogICAgIE5v
ZGUqIG5vZGUgPSBhc3NlcnRFZGl0YWJsZU5vZGUoZXJyb3JTdHJpbmcsIG5vZGVJZCk7CiAgICAg
aWYgKCFub2RlKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3Rl
ZChlcnJvclN0cmluZyk7CiAKICAgICBEb2N1bWVudCYgZG9jdW1lbnQgPSBub2RlLT5kb2N1bWVu
dCgpOwotICAgIGlmICghZG9jdW1lbnQuaXNIVE1MRG9jdW1lbnQoKSAmJiAhZG9jdW1lbnQuaXNY
TUxEb2N1bWVudCgpKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIkRvY3VtZW50IG9mIG5vZGUg
Zm9yIGdpdmVuIG5vZGVJZCBpcyBub3QgSFRNTC9YTUwiX3M7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9CisgICAgaWYgKCFkb2N1bWVudC5pc0hUTUxEb2N1bWVudCgpICYmICFkb2N1bWVudC5pc1hN
TERvY3VtZW50KCkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiRG9jdW1lbnQgb2Yg
bm9kZSBmb3IgZ2l2ZW4gbm9kZUlkIGlzIG5vdCBIVE1ML1hNTCJfcyk7CiAKICAgICBOb2RlKiBu
ZXdOb2RlID0gbnVsbHB0cjsKICAgICBpZiAoIW1fZG9tRWRpdG9yLT5zZXRPdXRlckhUTUwoKm5v
ZGUsIG91dGVySFRNTCwgbmV3Tm9kZSwgZXJyb3JTdHJpbmcpKQotICAgICAgICByZXR1cm47Cisg
ICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAgICBpZiAoIW5l
d05vZGUpIHsKICAgICAgICAgLy8gVGhlIG9ubHkgY2hpbGQgbm9kZSBoYXMgYmVlbiBkZWxldGVk
LgotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCi0gICAgaW50
IG5ld0lkID0gcHVzaE5vZGVQYXRoVG9Gcm9udGVuZChlcnJvclN0cmluZywgbmV3Tm9kZSk7Cisg
ICAgYXV0byBuZXdJZCA9IHB1c2hOb2RlUGF0aFRvRnJvbnRlbmQoZXJyb3JTdHJpbmcsIG5ld05v
ZGUpOwogCiAgICAgYm9vbCBjaGlsZHJlblJlcXVlc3RlZCA9IG1fY2hpbGRyZW5SZXF1ZXN0ZWQu
Y29udGFpbnMobm9kZUlkKTsKICAgICBpZiAoY2hpbGRyZW5SZXF1ZXN0ZWQpCiAgICAgICAgIHB1
c2hDaGlsZE5vZGVzVG9Gcm9udGVuZChuZXdJZCk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12
b2lkIEluc3BlY3RvckRPTUFnZW50OjppbnNlcnRBZGphY2VudEhUTUwoRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBpbnQgbm9kZUlkLCBjb25zdCBTdHJpbmcmIHBvc2l0aW9uLCBjb25zdCBTdHJp
bmcmIGh0bWwpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JET01BZ2Vu
dDo6aW5zZXJ0QWRqYWNlbnRIVE1MKFByb3RvY29sOjpET006Ok5vZGVJZCBub2RlSWQsIGNvbnN0
IFN0cmluZyYgcG9zaXRpb24sIGNvbnN0IFN0cmluZyYgaHRtbCkKIHsKKyAgICBQcm90b2NvbDo6
RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBOb2RlKiBub2RlID0gYXNzZXJ0RWRpdGFi
bGVOb2RlKGVycm9yU3RyaW5nLCBub2RlSWQpOwogICAgIGlmICghbm9kZSkKLSAgICAgICAgcmV0
dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCi0gICAg
aWYgKCFpczxFbGVtZW50Pihub2RlKSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJOb2RlIGZv
ciBnaXZlbiBub2RlSWQgaXMgbm90IGFuIGVsZW1lbnQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9CisgICAgaWYgKCFpczxFbGVtZW50Pihub2RlKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4
cGVjdGVkKCJOb2RlIGZvciBnaXZlbiBub2RlSWQgaXMgbm90IGFuIGVsZW1lbnQiX3MpOwogCi0g
ICAgbV9kb21FZGl0b3ItPmluc2VydEFkamFjZW50SFRNTChkb3duY2FzdDxFbGVtZW50Pigqbm9k
ZSksIHBvc2l0aW9uLCBodG1sLCBlcnJvclN0cmluZyk7CisgICAgaWYgKCFtX2RvbUVkaXRvci0+
aW5zZXJ0QWRqYWNlbnRIVE1MKGRvd25jYXN0PEVsZW1lbnQ+KCpub2RlKSwgcG9zaXRpb24sIGh0
bWwsIGVycm9yU3RyaW5nKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3Ry
aW5nKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNl
dE5vZGVWYWx1ZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQsIGNvbnN0IFN0
cmluZyYgdmFsdWUpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JET01B
Z2VudDo6c2V0Tm9kZVZhbHVlKFByb3RvY29sOjpET006Ok5vZGVJZCBub2RlSWQsIGNvbnN0IFN0
cmluZyYgdmFsdWUpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOwor
CiAgICAgTm9kZSogbm9kZSA9IGFzc2VydEVkaXRhYmxlTm9kZShlcnJvclN0cmluZywgbm9kZUlk
KTsKICAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAotICAgIGlmICghaXM8VGV4dD4oKm5vZGUpKSB7Ci0g
ICAgICAgIGVycm9yU3RyaW5nID0gIk5vZGUgZm9yIGdpdmVuIG5vZGVJZCBpcyBub3QgdGV4dCJf
czsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoIWlzPFRleHQ+KCpub2RlKSkKKyAg
ICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJOb2RlIGZvciBnaXZlbiBub2RlSWQgaXMgbm90
IHRleHQiX3MpOwogCi0gICAgbV9kb21FZGl0b3ItPnJlcGxhY2VXaG9sZVRleHQoZG93bmNhc3Q8
VGV4dD4oKm5vZGUpLCB2YWx1ZSwgZXJyb3JTdHJpbmcpOworICAgIGlmICghbV9kb21FZGl0b3It
PnJlcGxhY2VXaG9sZVRleHQoZG93bmNhc3Q8VGV4dD4oKm5vZGUpLCB2YWx1ZSwgZXJyb3JTdHJp
bmcpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOworCisgICAg
cmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Z2V0U3VwcG9ydGVkRXZl
bnROYW1lcyhFcnJvclN0cmluZyYsIFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+JiBldmVu
dE5hbWVzKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEpTT046OkFycmF5T2Y8U3RyaW5n
Pj4+IEluc3BlY3RvckRPTUFnZW50OjpnZXRTdXBwb3J0ZWRFdmVudE5hbWVzKCkKIHsKLSAgICBl
dmVudE5hbWVzID0gSlNPTjo6QXJyYXlPZjxTdHJpbmc+OjpjcmVhdGUoKTsKKyAgICBhdXRvIGV2
ZW50TmFtZXMgPSBKU09OOjpBcnJheU9mPFN0cmluZz46OmNyZWF0ZSgpOwogCiAjZGVmaW5lIERP
TV9FVkVOVF9OQU1FU19BREQobmFtZSkgZXZlbnROYW1lcy0+YWRkSXRlbSgjbmFtZSk7CiAgICAg
RE9NX0VWRU5UX05BTUVTX0ZPUl9FQUNIKERPTV9FVkVOVF9OQU1FU19BREQpCiAjdW5kZWYgRE9N
X0VWRU5UX05BTUVTX0FERAorCisgICAgcmV0dXJuIFdURk1vdmUoZXZlbnROYW1lcyk7CiB9CiAK
ICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKLXZvaWQgSW5zcGVj
dG9yRE9NQWdlbnQ6OmdldERhdGFCaW5kaW5nc0Zvck5vZGUoRXJyb3JTdHJpbmcmIGVycm9yU3Ry
aW5nLCBpbnQgLyogbm9kZUlkICovLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpET006OkRhdGFCaW5kaW5nPj4mIC8qIGRhdGFCaW5kaW5ncyAqLykKK1Byb3RvY29s
OjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpET006OkRhdGFCaW5k
aW5nPj4+IEluc3BlY3RvckRPTUFnZW50OjpnZXREYXRhQmluZGluZ3NGb3JOb2RlKFByb3RvY29s
OjpET006Ok5vZGVJZCkKIHsKLSAgICBlcnJvclN0cmluZyA9ICJOb3Qgc3VwcG9ydGVkIl9zOwor
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTm90IHN1cHBvcnRlZCJfcyk7CiB9CiAKLXZvaWQg
SW5zcGVjdG9yRE9NQWdlbnQ6OmdldEFzc29jaWF0ZWREYXRhRm9yTm9kZShFcnJvclN0cmluZyYg
ZXJyb3JTdHJpbmcsIGludCAvKiBub2RlSWQgKi8sIE9wdGlvbmFsPFN0cmluZz4mIC8qIGFzc29j
aWF0ZWREYXRhICovKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8U3RyaW5nPiBJbnNwZWN0b3JE
T01BZ2VudDo6Z2V0QXNzb2NpYXRlZERhdGFGb3JOb2RlKFByb3RvY29sOjpET006Ok5vZGVJZCkK
IHsKLSAgICBlcnJvclN0cmluZyA9ICJOb3Qgc3VwcG9ydGVkIl9zOworICAgIHJldHVybiBtYWtl
VW5leHBlY3RlZCgiTm90IHN1cHBvcnRlZCJfcyk7CiB9CiAjZW5kaWYKIAotdm9pZCBJbnNwZWN0
b3JET01BZ2VudDo6Z2V0RXZlbnRMaXN0ZW5lcnNGb3JOb2RlKEVycm9yU3RyaW5nJiBlcnJvclN0
cmluZywgaW50IG5vZGVJZCwgUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6RE9NOjpFdmVudExpc3RlbmVyPj4mIGxpc3RlbmVyc0FycmF5KQorUHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8UmVmPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkRPTTo6RXZlbnRMaXN0ZW5lcj4+
PiBJbnNwZWN0b3JET01BZ2VudDo6Z2V0RXZlbnRMaXN0ZW5lcnNGb3JOb2RlKFByb3RvY29sOjpE
T006Ok5vZGVJZCBub2RlSWQpCiB7Ci0gICAgbGlzdGVuZXJzQXJyYXkgPSBKU09OOjpBcnJheU9m
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6RXZlbnRMaXN0ZW5lcj46OmNyZWF0ZSgpOworICAg
IFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKIAogICAgIGF1dG8qIG5vZGUgPSBh
c3NlcnROb2RlKGVycm9yU3RyaW5nLCBub2RlSWQpOwogICAgIGlmICghbm9kZSkKLSAgICAgICAg
cmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCiAg
ICAgVmVjdG9yPFJlZlB0cjxFdmVudFRhcmdldD4+IGFuY2VzdG9yczsKICAgICBhbmNlc3RvcnMu
YXBwZW5kKG5vZGUpOwpAQCAtOTI5LDggKzk1OCwxMCBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50
OjpnZXRFdmVudExpc3RlbmVyc0Zvck5vZGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQg
bgogICAgICAgICB9CiAgICAgfQogCisgICAgYXV0byBsaXN0ZW5lcnMgPSBKU09OOjpBcnJheU9m
PFByb3RvY29sOjpET006OkV2ZW50TGlzdGVuZXI+OjpjcmVhdGUoKTsKKwogICAgIGF1dG8gYWRk
TGlzdGVuZXIgPSBbJl0gKFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyJiBsaXN0ZW5lciwgY29uc3Qg
RXZlbnRMaXN0ZW5lckluZm8mIGluZm8pIHsKLSAgICAgICAgaW50IGlkZW50aWZpZXIgPSAwOwor
ICAgICAgICBQcm90b2NvbDo6RE9NOjpFdmVudExpc3RlbmVySWQgaWRlbnRpZmllciA9IDA7CiAg
ICAgICAgIGJvb2wgZGlzYWJsZWQgPSBmYWxzZTsKICAgICAgICAgUmVmUHRyPEpTQzo6QnJlYWtw
b2ludD4gYnJlYWtwb2ludDsKIApAQCAtOTUzLDcgKzk4NCw3IEBAIHZvaWQgSW5zcGVjdG9yRE9N
QWdlbnQ6OmdldEV2ZW50TGlzdGVuZXJzRm9yTm9kZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcs
IGludCBuCiAgICAgICAgICAgICBtX2V2ZW50TGlzdGVuZXJFbnRyaWVzLmFkZChpZGVudGlmaWVy
LCBpbnNwZWN0b3JFdmVudExpc3RlbmVyKTsKICAgICAgICAgfQogCi0gICAgICAgIGxpc3RlbmVy
c0FycmF5LT5hZGRJdGVtKGJ1aWxkT2JqZWN0Rm9yRXZlbnRMaXN0ZW5lcihsaXN0ZW5lciwgaWRl
bnRpZmllciwgKmluZm8uZXZlbnRUYXJnZXQsIGluZm8uZXZlbnRUeXBlLCBkaXNhYmxlZCwgYnJl
YWtwb2ludCkpOworICAgICAgICBsaXN0ZW5lcnMtPmFkZEl0ZW0oYnVpbGRPYmplY3RGb3JFdmVu
dExpc3RlbmVyKGxpc3RlbmVyLCBpZGVudGlmaWVyLCAqaW5mby5ldmVudFRhcmdldCwgaW5mby5l
dmVudFR5cGUsIGRpc2FibGVkLCBicmVha3BvaW50KSk7CiAgICAgfTsKIAogICAgIC8vIEdldCBD
YXB0dXJpbmcgTGlzdGVuZXJzIChpbiB0aGlzIG9yZGVyKQpAQCAtOTc2LDgwICsxMDA3LDgxIEBA
IHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmdldEV2ZW50TGlzdGVuZXJzRm9yTm9kZShFcnJvclN0
cmluZyYgZXJyb3JTdHJpbmcsIGludCBuCiAKICAgICBpZiAobV9pbnNwZWN0ZWROb2RlID09IG5v
ZGUpCiAgICAgICAgIG1fc3VwcHJlc3NFdmVudExpc3RlbmVyQ2hhbmdlZEV2ZW50ID0gZmFsc2U7
CisKKyAgICByZXR1cm4gV1RGTW92ZShsaXN0ZW5lcnMpOwogfQogCi12b2lkIEluc3BlY3RvckRP
TUFnZW50OjpzZXRFdmVudExpc3RlbmVyRGlzYWJsZWQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5n
LCBpbnQgZXZlbnRMaXN0ZW5lcklkLCBib29sIGRpc2FibGVkKQorUHJvdG9jb2w6OkVycm9yU3Ry
aW5nT3I8dm9pZD4gSW5zcGVjdG9yRE9NQWdlbnQ6OnNldEV2ZW50TGlzdGVuZXJEaXNhYmxlZChQ
cm90b2NvbDo6RE9NOjpFdmVudExpc3RlbmVySWQgZXZlbnRMaXN0ZW5lcklkLCBib29sIGRpc2Fi
bGVkKQogewogICAgIGF1dG8gaXQgPSBtX2V2ZW50TGlzdGVuZXJFbnRyaWVzLmZpbmQoZXZlbnRM
aXN0ZW5lcklkKTsKLSAgICBpZiAoaXQgPT0gbV9ldmVudExpc3RlbmVyRW50cmllcy5lbmQoKSkg
ewotICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIGV2ZW50IGxpc3RlbmVyIGZvciBnaXZl
biBldmVudExpc3RlbmVySWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKGl0
ID09IG1fZXZlbnRMaXN0ZW5lckVudHJpZXMuZW5kKCkpCisgICAgICAgIHJldHVybiBtYWtlVW5l
eHBlY3RlZCgiTWlzc2luZyBldmVudCBsaXN0ZW5lciBmb3IgZ2l2ZW4gZXZlbnRMaXN0ZW5lcklk
Il9zKTsKIAogICAgIGl0LT52YWx1ZS5kaXNhYmxlZCA9IGRpc2FibGVkOworCisgICAgcmV0dXJu
IHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c2V0QnJlYWtwb2ludEZvckV2ZW50
TGlzdGVuZXIoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgZXZlbnRMaXN0ZW5lcklkLCBj
b25zdCBKU09OOjpPYmplY3QqIG9wdGlvbnNQYXlsb2FkKQorUHJvdG9jb2w6OkVycm9yU3RyaW5n
T3I8dm9pZD4gSW5zcGVjdG9yRE9NQWdlbnQ6OnNldEJyZWFrcG9pbnRGb3JFdmVudExpc3RlbmVy
KFByb3RvY29sOjpET006OkV2ZW50TGlzdGVuZXJJZCBldmVudExpc3RlbmVySWQsIFJlZlB0cjxK
U09OOjpPYmplY3Q+JiYgb3B0aW9ucykKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJy
b3JTdHJpbmc7CisKICAgICBhdXRvIGl0ID0gbV9ldmVudExpc3RlbmVyRW50cmllcy5maW5kKGV2
ZW50TGlzdGVuZXJJZCk7Ci0gICAgaWYgKGl0ID09IG1fZXZlbnRMaXN0ZW5lckVudHJpZXMuZW5k
KCkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWlzc2luZyBldmVudCBsaXN0ZW5lciBmb3Ig
Z2l2ZW4gZXZlbnRMaXN0ZW5lcklkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlm
IChpdCA9PSBtX2V2ZW50TGlzdGVuZXJFbnRyaWVzLmVuZCgpKQorICAgICAgICByZXR1cm4gbWFr
ZVVuZXhwZWN0ZWQoIk1pc3NpbmcgZXZlbnQgbGlzdGVuZXIgZm9yIGdpdmVuIGV2ZW50TGlzdGVu
ZXJJZCJfcyk7CiAKLSAgICBpZiAoaXQtPnZhbHVlLmJyZWFrcG9pbnQpIHsKLSAgICAgICAgZXJy
b3JTdHJpbmcgPSAiQnJlYWtwb2ludCBmb3IgZ2l2ZW4gZXZlbnRMaXN0ZW5lcklkIGFscmVhZHkg
ZXhpc3RzIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmIChpdC0+dmFsdWUuYnJl
YWtwb2ludCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJCcmVha3BvaW50IGZvciBn
aXZlbiBldmVudExpc3RlbmVySWQgYWxyZWFkeSBleGlzdHMiX3MpOwogCi0gICAgaXQtPnZhbHVl
LmJyZWFrcG9pbnQgPSBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkZWJ1Z2dlckJyZWFrcG9pbnRG
cm9tUGF5bG9hZChlcnJvclN0cmluZywgb3B0aW9uc1BheWxvYWQpOworICAgIGl0LT52YWx1ZS5i
cmVha3BvaW50ID0gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGVidWdnZXJCcmVha3BvaW50RnJv
bVBheWxvYWQoZXJyb3JTdHJpbmcsIFdURk1vdmUob3B0aW9ucykpOworICAgIGlmICghaXQtPnZh
bHVlLmJyZWFrcG9pbnQpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmlu
Zyk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpyZW1v
dmVCcmVha3BvaW50Rm9yRXZlbnRMaXN0ZW5lcihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGlu
dCBldmVudExpc3RlbmVySWQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0
b3JET01BZ2VudDo6cmVtb3ZlQnJlYWtwb2ludEZvckV2ZW50TGlzdGVuZXIoUHJvdG9jb2w6OkRP
TTo6RXZlbnRMaXN0ZW5lcklkIGV2ZW50TGlzdGVuZXJJZCkKIHsKICAgICBhdXRvIGl0ID0gbV9l
dmVudExpc3RlbmVyRW50cmllcy5maW5kKGV2ZW50TGlzdGVuZXJJZCk7Ci0gICAgaWYgKGl0ID09
IG1fZXZlbnRMaXN0ZW5lckVudHJpZXMuZW5kKCkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAi
TWlzc2luZyBldmVudCBsaXN0ZW5lciBmb3IgZ2l2ZW4gZXZlbnRMaXN0ZW5lcklkIl9zOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmIChpdCA9PSBtX2V2ZW50TGlzdGVuZXJFbnRyaWVz
LmVuZCgpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk1pc3NpbmcgZXZlbnQgbGlz
dGVuZXIgZm9yIGdpdmVuIGV2ZW50TGlzdGVuZXJJZCJfcyk7CiAKICAgICBpZiAoIWl0LT52YWx1
ZS5icmVha3BvaW50KQotICAgICAgICBlcnJvclN0cmluZyA9ICJCcmVha3BvaW50IGZvciBnaXZl
biBldmVudExpc3RlbmVySWQgbWlzc2luZyJfczsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVj
dGVkKCJCcmVha3BvaW50IGZvciBnaXZlbiBldmVudExpc3RlbmVySWQgbWlzc2luZyJfcyk7CiAK
ICAgICBpdC0+dmFsdWUuYnJlYWtwb2ludCA9IG51bGxwdHI7CisKKyAgICByZXR1cm4geyB9Owog
fQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpnZXRBY2Nlc3NpYmlsaXR5UHJvcGVydGllc0Zv
ck5vZGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkLCBSZWZQdHI8SW5zcGVj
dG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllcz4mIGF4UHJvcGVydGll
cykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmls
aXR5UHJvcGVydGllcz4+IEluc3BlY3RvckRPTUFnZW50OjpnZXRBY2Nlc3NpYmlsaXR5UHJvcGVy
dGllc0Zvck5vZGUoUHJvdG9jb2w6OkRPTTo6Tm9kZUlkIG5vZGVJZCkKIHsKKyAgICBQcm90b2Nv
bDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBOb2RlKiBub2RlID0gYXNzZXJ0Tm9k
ZShlcnJvclN0cmluZywgbm9kZUlkKTsKICAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJldHVybjsK
KyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAotICAgIGF4UHJv
cGVydGllcyA9IGJ1aWxkT2JqZWN0Rm9yQWNjZXNzaWJpbGl0eVByb3BlcnRpZXMobm9kZSk7Cisg
ICAgcmV0dXJuIGJ1aWxkT2JqZWN0Rm9yQWNjZXNzaWJpbGl0eVByb3BlcnRpZXMoKm5vZGUpOwog
fQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpwZXJmb3JtU2VhcmNoKEVycm9yU3RyaW5nJiBl
cnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBxdWVyeSwgY29uc3QgSlNPTjo6QXJyYXkqIG5vZGVJ
ZHMsIGNvbnN0IGJvb2wqIGNhc2VTZW5zaXRpdmUsIFN0cmluZyogc2VhcmNoSWQsIGludCogcmVz
dWx0Q291bnQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxzdGQ6OnR1cGxlPFN0cmluZyAvKiBz
ZWFyY2hJZCAqLywgaW50IC8qIHJlc3VsdENvdW50ICovPj4gSW5zcGVjdG9yRE9NQWdlbnQ6OnBl
cmZvcm1TZWFyY2goY29uc3QgU3RyaW5nJiBxdWVyeSwgUmVmUHRyPEpTT046OkFycmF5PiYmIG5v
ZGVJZHMsIE9wdGlvbmFsPGJvb2w+JiYgY2FzZVNlbnNpdGl2ZSkKIHsKKyAgICBQcm90b2NvbDo6
RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICAvLyBGSVhNRTogU2VhcmNoIHdvcmtzIHdp
dGggbm9kZSBncmFudWxhcml0eSAtIG51bWJlciBvZiBtYXRjaGVzIHdpdGhpbiBub2RlIGlzIG5v
dCBjYWxjdWxhdGVkLgogICAgIEluc3BlY3Rvck5vZGVGaW5kZXIgZmluZGVyKHF1ZXJ5LCBjYXNl
U2Vuc2l0aXZlICYmICpjYXNlU2Vuc2l0aXZlKTsKIAogICAgIGlmIChub2RlSWRzKSB7CiAgICAg
ICAgIGZvciAoYXV0byYgbm9kZVZhbHVlIDogKm5vZGVJZHMpIHsKLSAgICAgICAgICAgIGlmICgh
bm9kZVZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgZXJyb3JTdHJpbmcgPSAiVW5leHBlY3RlZCBu
b24taW50ZWdlciBpdGVtIGluIGdpdmVuIG5vZGVJZHMiX3M7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaW50IG5vZGVJZCA9IDA7Ci0gICAgICAg
ICAgICBpZiAoIW5vZGVWYWx1ZS0+YXNJbnRlZ2VyKG5vZGVJZCkpIHsKLSAgICAgICAgICAgICAg
ICBlcnJvclN0cmluZyA9ICJVbmV4cGVjdGVkIG5vbi1pbnRlZ2VyIGl0ZW0gaW4gZ2l2ZW4gbm9k
ZUlkcyJfczsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBOb2RlKiBub2RlID0gYXNzZXJ0Tm9kZShlcnJvclN0cmluZywgbm9kZUlkKTsKLSAgICAg
ICAgICAgIGlmICghbm9kZSkgewotICAgICAgICAgICAgICAgIC8vIGFzc2VydE5vZGUgc2hvdWxk
IGhhdmUgZmlsbGVkIHRoZSBlcnJvclN0cmluZyBmb3IgdXMuCi0gICAgICAgICAgICAgICAgQVNT
RVJUKGVycm9yU3RyaW5nLmxlbmd0aCgpKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgICAgICB9CisgICAgICAgICAgICBhdXRvIG5vZGVJZCA9IG5vZGVWYWx1ZS0+YXNJbnRlZ2Vy
KCk7CisgICAgICAgICAgICBpZiAoIW5vZGVJZCkKKyAgICAgICAgICAgICAgICByZXR1cm4gbWFr
ZVVuZXhwZWN0ZWQoIlVuZXhwZWN0ZWQgbm9uLWludGVnZXIgaXRlbSBpbiBnaXZlbiBub2RlSWRz
Il9zKTsKKworICAgICAgICAgICAgTm9kZSogbm9kZSA9IGFzc2VydE5vZGUoZXJyb3JTdHJpbmcs
ICpub2RlSWQpOworICAgICAgICAgICAgaWYgKCFub2RlKQorICAgICAgICAgICAgICAgIHJldHVy
biBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CisKICAgICAgICAgICAgIGZpbmRlci5wZXJm
b3JtU2VhcmNoKG5vZGUpOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKQEAgLTEwNTgsMzcgKzEw
OTAsMzYgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6cGVyZm9ybVNlYXJjaChFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgcXUKICAgICAgICAgZmluZGVyLnBlcmZvcm1T
ZWFyY2gobV9kb2N1bWVudC5nZXQoKSk7CiAgICAgfQogCi0gICAgKnNlYXJjaElkID0gSWRlbnRp
ZmllcnNGYWN0b3J5OjpjcmVhdGVJZGVudGlmaWVyKCk7CisgICAgYXV0byBzZWFyY2hJZCA9IElk
ZW50aWZpZXJzRmFjdG9yeTo6Y3JlYXRlSWRlbnRpZmllcigpOwogCi0gICAgYXV0byYgcmVzdWx0
c1ZlY3RvciA9IG1fc2VhcmNoUmVzdWx0cy5hZGQoKnNlYXJjaElkLCBWZWN0b3I8UmVmUHRyPE5v
ZGU+PigpKS5pdGVyYXRvci0+dmFsdWU7CisgICAgYXV0byYgcmVzdWx0c1ZlY3RvciA9IG1fc2Vh
cmNoUmVzdWx0cy5hZGQoc2VhcmNoSWQsIFZlY3RvcjxSZWZQdHI8Tm9kZT4+KCkpLml0ZXJhdG9y
LT52YWx1ZTsKICAgICBmb3IgKGF1dG8mIHJlc3VsdCA6IGZpbmRlci5yZXN1bHRzKCkpCiAgICAg
ICAgIHJlc3VsdHNWZWN0b3IuYXBwZW5kKHJlc3VsdCk7CiAKLSAgICAqcmVzdWx0Q291bnQgPSBy
ZXN1bHRzVmVjdG9yLnNpemUoKTsKKyAgICByZXR1cm4geyB7IHNlYXJjaElkLCByZXN1bHRzVmVj
dG9yLnNpemUoKSB9IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmdldFNlYXJjaFJl
c3VsdHMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHNlYXJjaElkLCBp
bnQgZnJvbUluZGV4LCBpbnQgdG9JbmRleCwgUmVmUHRyPEpTT046OkFycmF5T2Y8aW50Pj4mIG5v
ZGVJZHMpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SlNPTjo6QXJyYXlPZjxQcm90b2Nv
bDo6RE9NOjpOb2RlSWQ+Pj4gSW5zcGVjdG9yRE9NQWdlbnQ6OmdldFNlYXJjaFJlc3VsdHMoY29u
c3QgU3RyaW5nJiBzZWFyY2hJZCwgaW50IGZyb21JbmRleCwgaW50IHRvSW5kZXgpCiB7CiAgICAg
U2VhcmNoUmVzdWx0czo6aXRlcmF0b3IgaXQgPSBtX3NlYXJjaFJlc3VsdHMuZmluZChzZWFyY2hJ
ZCk7Ci0gICAgaWYgKGl0ID09IG1fc2VhcmNoUmVzdWx0cy5lbmQoKSkgewotICAgICAgICBlcnJv
clN0cmluZyA9ICJNaXNzaW5nIHNlYXJjaCByZXN1bHQgZm9yIGdpdmVuIHNlYXJjaElkIl9zOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmIChpdCA9PSBtX3NlYXJjaFJlc3VsdHMuZW5k
KCkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTWlzc2luZyBzZWFyY2ggcmVzdWx0
IGZvciBnaXZlbiBzZWFyY2hJZCJfcyk7CiAKICAgICBpbnQgc2l6ZSA9IGl0LT52YWx1ZS5zaXpl
KCk7Ci0gICAgaWYgKGZyb21JbmRleCA8IDAgfHwgdG9JbmRleCA+IHNpemUgfHwgZnJvbUluZGV4
ID49IHRvSW5kZXgpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiSW52YWxpZCBzZWFyY2ggcmVz
dWx0IHJhbmdlIGZvciBnaXZlbiBmcm9tSW5kZXggYW5kIHRvSW5kZXgiX3M7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9CisgICAgaWYgKGZyb21JbmRleCA8IDAgfHwgdG9JbmRleCA+IHNpemUgfHwg
ZnJvbUluZGV4ID49IHRvSW5kZXgpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiSW52
YWxpZCBzZWFyY2ggcmVzdWx0IHJhbmdlIGZvciBnaXZlbiBmcm9tSW5kZXggYW5kIHRvSW5kZXgi
X3MpOwogCi0gICAgbm9kZUlkcyA9IEpTT046OkFycmF5T2Y8aW50Pjo6Y3JlYXRlKCk7CisgICAg
YXV0byBub2RlSWRzID0gSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6RE9NOjpOb2RlSWQ+OjpjcmVh
dGUoKTsKICAgICBmb3IgKGludCBpID0gZnJvbUluZGV4OyBpIDwgdG9JbmRleDsgKytpKQogICAg
ICAgICBub2RlSWRzLT5hZGRJdGVtKHB1c2hOb2RlUGF0aFRvRnJvbnRlbmQoKGl0LT52YWx1ZSlb
aV0uZ2V0KCkpKTsKKyAgICByZXR1cm4gV1RGTW92ZShub2RlSWRzKTsKIH0KIAotdm9pZCBJbnNw
ZWN0b3JET01BZ2VudDo6ZGlzY2FyZFNlYXJjaFJlc3VsdHMoRXJyb3JTdHJpbmcmLCBjb25zdCBT
dHJpbmcmIHNlYXJjaElkKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9y
RE9NQWdlbnQ6OmRpc2NhcmRTZWFyY2hSZXN1bHRzKGNvbnN0IFN0cmluZyYgc2VhcmNoSWQpCiB7
CiAgICAgbV9zZWFyY2hSZXN1bHRzLnJlbW92ZShzZWFyY2hJZCk7CisKKyAgICByZXR1cm4geyB9
OwogfQogCiBib29sIEluc3BlY3RvckRPTUFnZW50OjpoYW5kbGVNb3VzZVByZXNzKCkKQEAgLTEx
MTcsNyArMTE0OCw3IEBAIGJvb2wgSW5zcGVjdG9yRE9NQWdlbnQ6OmhhbmRsZVRvdWNoRXZlbnQo
Tm9kZSYgbm9kZSkKIAogdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6aW5zcGVjdChOb2RlKiBpbnNw
ZWN0ZWROb2RlKQogewotICAgIEVycm9yU3RyaW5nIGlnbm9yZWQ7CisgICAgUHJvdG9jb2w6OkVy
cm9yU3RyaW5nIGlnbm9yZWQ7CiAgICAgUmVmUHRyPE5vZGU+IG5vZGUgPSBpbnNwZWN0ZWROb2Rl
OwogICAgIHNldFNlYXJjaGluZ0Zvck5vZGUoaWdub3JlZCwgZmFsc2UsIG51bGxwdHIsIGZhbHNl
KTsKIApAQCAtMTE3Myw3ICsxMjA0LDcgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6aGlnaGxp
Z2h0TW91c2VkT3Zlck5vZGUoKQogICAgICAgICBtX292ZXJsYXktPmhpZ2hsaWdodE5vZGUobm9k
ZSwgKm1faW5zcGVjdE1vZGVIaWdobGlnaHRDb25maWcpOwogfQogCi12b2lkIEluc3BlY3RvckRP
TUFnZW50OjpzZXRTZWFyY2hpbmdGb3JOb2RlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgYm9v
bCBlbmFibGVkLCBjb25zdCBKU09OOjpPYmplY3QqIGhpZ2hsaWdodEluc3BlY3Rvck9iamVjdCwg
Ym9vbCBzaG93UnVsZXJzKQordm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c2V0U2VhcmNoaW5nRm9y
Tm9kZShQcm90b2NvbDo6RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBib29sIGVuYWJsZWQsIFJl
ZlB0cjxKU09OOjpPYmplY3Q+JiYgaGlnaGxpZ2h0SW5zcGVjdG9yT2JqZWN0LCBib29sIHNob3dS
dWxlcnMpCiB7CiAgICAgaWYgKG1fc2VhcmNoaW5nRm9yTm9kZSA9PSBlbmFibGVkKQogICAgICAg
ICByZXR1cm47CkBAIC0xMTgzLDEyICsxMjE0LDEyIEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6
OnNldFNlYXJjaGluZ0Zvck5vZGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBib29sIGVuYWJs
CiAgICAgbV9vdmVybGF5LT5zZXRTaG93UnVsZXJzRHVyaW5nRWxlbWVudFNlbGVjdGlvbihtX3Nl
YXJjaGluZ0Zvck5vZGUgJiYgc2hvd1J1bGVycyk7CiAKICAgICBpZiAobV9zZWFyY2hpbmdGb3JO
b2RlKSB7Ci0gICAgICAgIG1faW5zcGVjdE1vZGVIaWdobGlnaHRDb25maWcgPSBoaWdobGlnaHRD
b25maWdGcm9tSW5zcGVjdG9yT2JqZWN0KGVycm9yU3RyaW5nLCBoaWdobGlnaHRJbnNwZWN0b3JP
YmplY3QpOworICAgICAgICBtX2luc3BlY3RNb2RlSGlnaGxpZ2h0Q29uZmlnID0gaGlnaGxpZ2h0
Q29uZmlnRnJvbUluc3BlY3Rvck9iamVjdChlcnJvclN0cmluZywgV1RGTW92ZShoaWdobGlnaHRJ
bnNwZWN0b3JPYmplY3QpKTsKICAgICAgICAgaWYgKCFtX2luc3BlY3RNb2RlSGlnaGxpZ2h0Q29u
ZmlnKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBoaWdobGlnaHRNb3VzZWRPdmVyTm9k
ZSgpOwogICAgIH0gZWxzZQotICAgICAgICBoaWRlSGlnaGxpZ2h0KGVycm9yU3RyaW5nKTsKKyAg
ICAgICAgaGlkZUhpZ2hsaWdodCgpOwogCiAgICAgbV9vdmVybGF5LT5kaWRTZXRTZWFyY2hpbmdG
b3JOb2RlKG1fc2VhcmNoaW5nRm9yTm9kZSk7CiAKQEAgLTExOTYsNyArMTIyNyw3IEBAIHZvaWQg
SW5zcGVjdG9yRE9NQWdlbnQ6OnNldFNlYXJjaGluZ0Zvck5vZGUoRXJyb3JTdHJpbmcmIGVycm9y
U3RyaW5nLCBib29sIGVuYWJsCiAgICAgICAgIGNsaWVudC0+ZWxlbWVudFNlbGVjdGlvbkNoYW5n
ZWQobV9zZWFyY2hpbmdGb3JOb2RlKTsKIH0KIAotc3RkOjp1bmlxdWVfcHRyPEhpZ2hsaWdodENv
bmZpZz4gSW5zcGVjdG9yRE9NQWdlbnQ6OmhpZ2hsaWdodENvbmZpZ0Zyb21JbnNwZWN0b3JPYmpl
Y3QoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBKU09OOjpPYmplY3QqIGhpZ2hsaWdo
dEluc3BlY3Rvck9iamVjdCkKK3N0ZDo6dW5pcXVlX3B0cjxIaWdobGlnaHRDb25maWc+IEluc3Bl
Y3RvckRPTUFnZW50OjpoaWdobGlnaHRDb25maWdGcm9tSW5zcGVjdG9yT2JqZWN0KFByb3RvY29s
OjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgaGlnaGxp
Z2h0SW5zcGVjdG9yT2JqZWN0KQogewogICAgIGlmICghaGlnaGxpZ2h0SW5zcGVjdG9yT2JqZWN0
KSB7CiAgICAgICAgIGVycm9yU3RyaW5nID0gIkludGVybmFsIGVycm9yOiBoaWdobGlnaHQgY29u
ZmlndXJhdGlvbiBwYXJhbWV0ZXIgaXMgbWlzc2luZyJfczsKQEAgLTEyMDQsODEgKzEyMzUsOTMg
QEAgc3RkOjp1bmlxdWVfcHRyPEhpZ2hsaWdodENvbmZpZz4gSW5zcGVjdG9yRE9NQWdlbnQ6Omhp
Z2hsaWdodENvbmZpZ0Zyb21JbnNwZWN0b3IKICAgICB9CiAKICAgICBhdXRvIGhpZ2hsaWdodENv
bmZpZyA9IG1ha2VVbmlxdWU8SGlnaGxpZ2h0Q29uZmlnPigpOwotICAgIGJvb2wgc2hvd0luZm8g
PSBmYWxzZTsgLy8gRGVmYXVsdDogZmFsc2UgKGRvIG5vdCBzaG93IGEgdG9vbHRpcCkuCi0gICAg
aGlnaGxpZ2h0SW5zcGVjdG9yT2JqZWN0LT5nZXRCb29sZWFuKCJzaG93SW5mbyIsIHNob3dJbmZv
KTsKLSAgICBoaWdobGlnaHRDb25maWctPnNob3dJbmZvID0gc2hvd0luZm87Ci0gICAgaGlnaGxp
Z2h0Q29uZmlnLT5jb250ZW50ID0gcGFyc2VDb25maWdDb2xvcigiY29udGVudENvbG9yIiwgaGln
aGxpZ2h0SW5zcGVjdG9yT2JqZWN0KTsKLSAgICBoaWdobGlnaHRDb25maWctPmNvbnRlbnRPdXRs
aW5lID0gcGFyc2VDb25maWdDb2xvcigiY29udGVudE91dGxpbmVDb2xvciIsIGhpZ2hsaWdodElu
c3BlY3Rvck9iamVjdCk7Ci0gICAgaGlnaGxpZ2h0Q29uZmlnLT5wYWRkaW5nID0gcGFyc2VDb25m
aWdDb2xvcigicGFkZGluZ0NvbG9yIiwgaGlnaGxpZ2h0SW5zcGVjdG9yT2JqZWN0KTsKLSAgICBo
aWdobGlnaHRDb25maWctPmJvcmRlciA9IHBhcnNlQ29uZmlnQ29sb3IoImJvcmRlckNvbG9yIiwg
aGlnaGxpZ2h0SW5zcGVjdG9yT2JqZWN0KTsKLSAgICBoaWdobGlnaHRDb25maWctPm1hcmdpbiA9
IHBhcnNlQ29uZmlnQ29sb3IoIm1hcmdpbkNvbG9yIiwgaGlnaGxpZ2h0SW5zcGVjdG9yT2JqZWN0
KTsKKyAgICBoaWdobGlnaHRDb25maWctPnNob3dJbmZvID0gaGlnaGxpZ2h0SW5zcGVjdG9yT2Jq
ZWN0LT5nZXRCb29sZWFuKFByb3RvY29sOjpET006OkhpZ2hsaWdodENvbmZpZzo6c2hvd0luZm9L
ZXkpLnZhbHVlT3IoZmFsc2UpOworICAgIGhpZ2hsaWdodENvbmZpZy0+Y29udGVudCA9IHBhcnNl
Q29uZmlnQ29sb3IoUHJvdG9jb2w6OkRPTTo6SGlnaGxpZ2h0Q29uZmlnOjpjb250ZW50Q29sb3JL
ZXksICpoaWdobGlnaHRJbnNwZWN0b3JPYmplY3QpOworICAgIGhpZ2hsaWdodENvbmZpZy0+cGFk
ZGluZyA9IHBhcnNlQ29uZmlnQ29sb3IoUHJvdG9jb2w6OkRPTTo6SGlnaGxpZ2h0Q29uZmlnOjpw
YWRkaW5nQ29sb3JLZXksICpoaWdobGlnaHRJbnNwZWN0b3JPYmplY3QpOworICAgIGhpZ2hsaWdo
dENvbmZpZy0+Ym9yZGVyID0gcGFyc2VDb25maWdDb2xvcihQcm90b2NvbDo6RE9NOjpIaWdobGln
aHRDb25maWc6OmJvcmRlckNvbG9yS2V5LCAqaGlnaGxpZ2h0SW5zcGVjdG9yT2JqZWN0KTsKKyAg
ICBoaWdobGlnaHRDb25maWctPm1hcmdpbiA9IHBhcnNlQ29uZmlnQ29sb3IoUHJvdG9jb2w6OkRP
TTo6SGlnaGxpZ2h0Q29uZmlnOjptYXJnaW5Db2xvcktleSwgKmhpZ2hsaWdodEluc3BlY3Rvck9i
amVjdCk7CiAgICAgcmV0dXJuIGhpZ2hsaWdodENvbmZpZzsKIH0KIAogI2lmIFBMQVRGT1JNKElP
U19GQU1JTFkpCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpzZXRJbnNwZWN0TW9kZUVuYWJsZWQo
RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBib29sIGVuYWJsZWQsIGNvbnN0IEpTT046Ok9iamVj
dCogaGlnaGxpZ2h0Q29uZmlnKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVj
dG9yRE9NQWdlbnQ6OnNldEluc3BlY3RNb2RlRW5hYmxlZChib29sIGVuYWJsZWQsIFJlZlB0cjxK
U09OOjpPYmplY3Q+JiYgaGlnaGxpZ2h0Q29uZmlnKQogewotICAgIHNldFNlYXJjaGluZ0Zvck5v
ZGUoZXJyb3JTdHJpbmcsIGVuYWJsZWQsIGhpZ2hsaWdodENvbmZpZyA/IGhpZ2hsaWdodENvbmZp
ZyA6IG51bGxwdHIsIGZhbHNlKTsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJp
bmc7CisKKyAgICBzZXRTZWFyY2hpbmdGb3JOb2RlKGVycm9yU3RyaW5nLCBlbmFibGVkLCBXVEZN
b3ZlKGhpZ2hsaWdodENvbmZpZyksIGZhbHNlKTsKKworICAgIGlmICghIWVycm9yU3RyaW5nKQor
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOworCisgICAgcmV0dXJu
IHsgfTsKIH0KICNlbHNlCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpzZXRJbnNwZWN0TW9kZUVu
YWJsZWQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBib29sIGVuYWJsZWQsIGNvbnN0IEpTT046
Ok9iamVjdCogaGlnaGxpZ2h0Q29uZmlnLCBjb25zdCBib29sKiBzaG93UnVsZXJzKQorUHJvdG9j
b2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yRE9NQWdlbnQ6OnNldEluc3BlY3RNb2Rl
RW5hYmxlZChib29sIGVuYWJsZWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgaGlnaGxpZ2h0Q29u
ZmlnLCBPcHRpb25hbDxib29sPiYmIHNob3dSdWxlcnMpCiB7Ci0gICAgc2V0U2VhcmNoaW5nRm9y
Tm9kZShlcnJvclN0cmluZywgZW5hYmxlZCwgaGlnaGxpZ2h0Q29uZmlnID8gaGlnaGxpZ2h0Q29u
ZmlnIDogbnVsbHB0ciwgc2hvd1J1bGVycyAmJiAqc2hvd1J1bGVycyk7CisgICAgUHJvdG9jb2w6
OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCisgICAgc2V0U2VhcmNoaW5nRm9yTm9kZShlcnJv
clN0cmluZywgZW5hYmxlZCwgV1RGTW92ZShoaWdobGlnaHRDb25maWcpLCBzaG93UnVsZXJzICYm
ICpzaG93UnVsZXJzKTsKKworICAgIGlmICghIWVycm9yU3RyaW5nKQorICAgICAgICByZXR1cm4g
bWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOworCisgICAgcmV0dXJuIHsgfTsKIH0KICNlbmRp
ZgogCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpoaWdobGlnaHRSZWN0KEVycm9yU3RyaW5nJiwg
aW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGNvbnN0IEpTT046Ok9iamVjdCog
Y29sb3IsIGNvbnN0IEpTT046Ok9iamVjdCogb3V0bGluZUNvbG9yLCBjb25zdCBib29sKiB1c2VQ
YWdlQ29vcmRpbmF0ZXMpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JE
T01BZ2VudDo6aGlnaGxpZ2h0UmVjdChpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdo
dCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBjb2xvciwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBv
dXRsaW5lQ29sb3IsIE9wdGlvbmFsPGJvb2w+JiYgdXNlUGFnZUNvb3JkaW5hdGVzKQogewogICAg
IGF1dG8gcXVhZCA9IG1ha2VVbmlxdWU8RmxvYXRRdWFkPihGbG9hdFJlY3QoeCwgeSwgd2lkdGgs
IGhlaWdodCkpOwotICAgIGlubmVySGlnaGxpZ2h0UXVhZChXVEZNb3ZlKHF1YWQpLCBjb2xvciwg
b3V0bGluZUNvbG9yLCB1c2VQYWdlQ29vcmRpbmF0ZXMpOworICAgIGlubmVySGlnaGxpZ2h0UXVh
ZChXVEZNb3ZlKHF1YWQpLCBXVEZNb3ZlKGNvbG9yKSwgV1RGTW92ZShvdXRsaW5lQ29sb3IpLCBX
VEZNb3ZlKHVzZVBhZ2VDb29yZGluYXRlcykpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9p
ZCBJbnNwZWN0b3JET01BZ2VudDo6aGlnaGxpZ2h0UXVhZChFcnJvclN0cmluZyYgZXJyb3JTdHJp
bmcsIGNvbnN0IEpTT046OkFycmF5JiBxdWFkQXJyYXksIGNvbnN0IEpTT046Ok9iamVjdCogY29s
b3IsIGNvbnN0IEpTT046Ok9iamVjdCogb3V0bGluZUNvbG9yLCBjb25zdCBib29sKiB1c2VQYWdl
Q29vcmRpbmF0ZXMpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JET01B
Z2VudDo6aGlnaGxpZ2h0UXVhZChSZWY8SlNPTjo6QXJyYXk+JiYgcXVhZE9iamVjdCwgUmVmUHRy
PEpTT046Ok9iamVjdD4mJiBjb2xvciwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBvdXRsaW5lQ29s
b3IsIE9wdGlvbmFsPGJvb2w+JiYgdXNlUGFnZUNvb3JkaW5hdGVzKQogewogICAgIGF1dG8gcXVh
ZCA9IG1ha2VVbmlxdWU8RmxvYXRRdWFkPigpOwotICAgIGlmICghcGFyc2VRdWFkKHF1YWRBcnJh
eSwgcXVhZC5nZXQoKSkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiVW5leHBlY3RlZCBpbnZh
bGlkIHF1YWRBcnJheSJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpbm5lckhpZ2hs
aWdodFF1YWQoV1RGTW92ZShxdWFkKSwgY29sb3IsIG91dGxpbmVDb2xvciwgdXNlUGFnZUNvb3Jk
aW5hdGVzKTsKKyAgICBpZiAoIXBhcnNlUXVhZChXVEZNb3ZlKHF1YWRPYmplY3QpLCBxdWFkLmdl
dCgpKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJVbmV4cGVjdGVkIGludmFsaWQg
cXVhZCJfcyk7CisKKyAgICBpbm5lckhpZ2hsaWdodFF1YWQoV1RGTW92ZShxdWFkKSwgV1RGTW92
ZShjb2xvciksIFdURk1vdmUob3V0bGluZUNvbG9yKSwgV1RGTW92ZSh1c2VQYWdlQ29vcmRpbmF0
ZXMpKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6Omlu
bmVySGlnaGxpZ2h0UXVhZChzdGQ6OnVuaXF1ZV9wdHI8RmxvYXRRdWFkPiBxdWFkLCBjb25zdCBK
U09OOjpPYmplY3QqIGNvbG9yLCBjb25zdCBKU09OOjpPYmplY3QqIG91dGxpbmVDb2xvciwgY29u
c3QgYm9vbCogdXNlUGFnZUNvb3JkaW5hdGVzKQordm9pZCBJbnNwZWN0b3JET01BZ2VudDo6aW5u
ZXJIaWdobGlnaHRRdWFkKHN0ZDo6dW5pcXVlX3B0cjxGbG9hdFF1YWQ+IHF1YWQsIFJlZlB0cjxK
U09OOjpPYmplY3Q+JiYgY29sb3IsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgb3V0bGluZUNvbG9y
LCBPcHRpb25hbDxib29sPiYmIHVzZVBhZ2VDb29yZGluYXRlcykKIHsKICAgICBhdXRvIGhpZ2hs
aWdodENvbmZpZyA9IG1ha2VVbmlxdWU8SGlnaGxpZ2h0Q29uZmlnPigpOwotICAgIGhpZ2hsaWdo
dENvbmZpZy0+Y29udGVudCA9IHBhcnNlQ29sb3IoY29sb3IpOwotICAgIGhpZ2hsaWdodENvbmZp
Zy0+Y29udGVudE91dGxpbmUgPSBwYXJzZUNvbG9yKG91dGxpbmVDb2xvcik7CisgICAgaGlnaGxp
Z2h0Q29uZmlnLT5jb250ZW50ID0gcGFyc2VDb2xvcihXVEZNb3ZlKGNvbG9yKSk7CisgICAgaGln
aGxpZ2h0Q29uZmlnLT5jb250ZW50T3V0bGluZSA9IHBhcnNlQ29sb3IoV1RGTW92ZShvdXRsaW5l
Q29sb3IpKTsKICAgICBoaWdobGlnaHRDb25maWctPnVzZVBhZ2VDb29yZGluYXRlcyA9IHVzZVBh
Z2VDb29yZGluYXRlcyA/ICp1c2VQYWdlQ29vcmRpbmF0ZXMgOiBmYWxzZTsKICAgICBtX292ZXJs
YXktPmhpZ2hsaWdodFF1YWQoV1RGTW92ZShxdWFkKSwgKmhpZ2hsaWdodENvbmZpZyk7CiB9CiAK
LXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmhpZ2hsaWdodFNlbGVjdG9yKEVycm9yU3RyaW5nJiBl
cnJvclN0cmluZywgY29uc3QgSlNPTjo6T2JqZWN0JiBoaWdobGlnaHRJbnNwZWN0b3JPYmplY3Qs
IGNvbnN0IFN0cmluZyYgc2VsZWN0b3JTdHJpbmcsIGNvbnN0IFN0cmluZyogZnJhbWVJZCkKK1By
b3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRPTUFnZW50OjpoaWdobGlnaHRT
ZWxlY3RvcihSZWY8SlNPTjo6T2JqZWN0PiYmIGhpZ2hsaWdodEluc3BlY3Rvck9iamVjdCwgY29u
c3QgU3RyaW5nJiBzZWxlY3RvclN0cmluZywgY29uc3QgUHJvdG9jb2w6Ok5ldHdvcms6OkZyYW1l
SWQmIGZyYW1lSWQpCiB7Ci0gICAgYXV0byBoaWdobGlnaHRDb25maWcgPSBoaWdobGlnaHRDb25m
aWdGcm9tSW5zcGVjdG9yT2JqZWN0KGVycm9yU3RyaW5nLCAmaGlnaGxpZ2h0SW5zcGVjdG9yT2Jq
ZWN0KTsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKKyAgICBhdXRv
IGhpZ2hsaWdodENvbmZpZyA9IGhpZ2hsaWdodENvbmZpZ0Zyb21JbnNwZWN0b3JPYmplY3QoZXJy
b3JTdHJpbmcsIFdURk1vdmUoaGlnaGxpZ2h0SW5zcGVjdG9yT2JqZWN0KSk7CiAgICAgaWYgKCFo
aWdobGlnaHRDb25maWcpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4
cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgIFJlZlB0cjxEb2N1bWVudD4gZG9jdW1lbnQ7CiAK
LSAgICBpZiAoZnJhbWVJZCkgeworICAgIGlmICghIWZyYW1lSWQpIHsKICAgICAgICAgYXV0byog
cGFnZUFnZW50ID0gbV9pbnN0cnVtZW50aW5nQWdlbnRzLmVuYWJsZWRQYWdlQWdlbnQoKTsKLSAg
ICAgICAgaWYgKCFwYWdlQWdlbnQpIHsKLSAgICAgICAgICAgIGVycm9yU3RyaW5nID0gIlBhZ2Ug
ZG9tYWluIG11c3QgYmUgZW5hYmxlZCJfczsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
fQorICAgICAgICBpZiAoIXBhZ2VBZ2VudCkKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBl
Y3RlZCgiUGFnZSBkb21haW4gbXVzdCBiZSBlbmFibGVkIl9zKTsKIAotICAgICAgICBhdXRvKiBm
cmFtZSA9IHBhZ2VBZ2VudC0+YXNzZXJ0RnJhbWUoZXJyb3JTdHJpbmcsICpmcmFtZUlkKTsKKyAg
ICAgICAgYXV0byogZnJhbWUgPSBwYWdlQWdlbnQtPmFzc2VydEZyYW1lKGVycm9yU3RyaW5nLCBm
cmFtZUlkKTsKICAgICAgICAgaWYgKCFmcmFtZSkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAgICAgICAgZG9j
dW1lbnQgPSBmcmFtZS0+ZG9jdW1lbnQoKTsKICAgICB9IGVsc2UKICAgICAgICAgZG9jdW1lbnQg
PSBtX2RvY3VtZW50OwogCi0gICAgaWYgKCFkb2N1bWVudCkgewotICAgICAgICBlcnJvclN0cmlu
ZyA9ICJNaXNzaW5nIGRvY3VtZW50IG9mIGZyYW1lIGZvciBnaXZlbiBmcmFtZUlkIl9zOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghZG9jdW1lbnQpCisgICAgICAgIHJldHVybiBt
YWtlVW5leHBlY3RlZCgiTWlzc2luZyBkb2N1bWVudCBvZiBmcmFtZSBmb3IgZ2l2ZW4gZnJhbWVJ
ZCJfcyk7CiAKICAgICBDU1NQYXJzZXIgcGFyc2VyKCpkb2N1bWVudCk7CiAgICAgQ1NTU2VsZWN0
b3JMaXN0IHNlbGVjdG9yTGlzdDsKQEAgLTEzMzksMTU4ICsxMzgyLDE3MyBAQCB2b2lkIEluc3Bl
Y3RvckRPTUFnZW50OjpoaWdobGlnaHRTZWxlY3RvcihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcs
IGNvbnN0IEpTT046OgogICAgIH0KIAogICAgIG1fb3ZlcmxheS0+aGlnaGxpZ2h0Tm9kZUxpc3Qo
U3RhdGljTm9kZUxpc3Q6OmNyZWF0ZShXVEZNb3ZlKG5vZGVMaXN0KSksICpoaWdobGlnaHRDb25m
aWcpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6aGln
aGxpZ2h0Tm9kZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IEpTT046Ok9iamVjdCYg
aGlnaGxpZ2h0SW5zcGVjdG9yT2JqZWN0LCBjb25zdCBpbnQqIG5vZGVJZCwgY29uc3QgU3RyaW5n
KiBvYmplY3RJZCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRPTUFn
ZW50OjpoaWdobGlnaHROb2RlKFJlZjxKU09OOjpPYmplY3Q+JiYgaGlnaGxpZ2h0SW5zcGVjdG9y
T2JqZWN0LCBPcHRpb25hbDxQcm90b2NvbDo6RE9NOjpOb2RlSWQ+JiYgbm9kZUlkLCBjb25zdCBQ
cm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0SWQmIG9iamVjdElkKQogeworICAgIFByb3Rv
Y29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIE5vZGUqIG5vZGUgPSBudWxscHRy
OwogICAgIGlmIChub2RlSWQpCiAgICAgICAgIG5vZGUgPSBhc3NlcnROb2RlKGVycm9yU3RyaW5n
LCAqbm9kZUlkKTsKLSAgICBlbHNlIGlmIChvYmplY3RJZCkgewotICAgICAgICBub2RlID0gbm9k
ZUZvck9iamVjdElkKCpvYmplY3RJZCk7Ci0gICAgICAgIGlmICghbm9kZSkKLSAgICAgICAgICAg
IGVycm9yU3RyaW5nID0gIk1pc3Npbmcgbm9kZSBmb3IgZ2l2ZW4gb2JqZWN0SWQiX3M7CisgICAg
ZWxzZSBpZiAoISFvYmplY3RJZCkgeworICAgICAgICBub2RlID0gbm9kZUZvck9iamVjdElkKG9i
amVjdElkKTsKKyAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWlzc2luZyBub2RlIGZvciBnaXZlbiBv
YmplY3RJZCJfczsKICAgICB9IGVsc2UKICAgICAgICAgZXJyb3JTdHJpbmcgPSAiRWl0aGVyIG5v
ZGVJZCBvciBvYmplY3RJZCBtdXN0IGJlIHNwZWNpZmllZCJfczsKIAogICAgIGlmICghbm9kZSkK
LSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJp
bmcpOwogCi0gICAgc3RkOjp1bmlxdWVfcHRyPEhpZ2hsaWdodENvbmZpZz4gaGlnaGxpZ2h0Q29u
ZmlnID0gaGlnaGxpZ2h0Q29uZmlnRnJvbUluc3BlY3Rvck9iamVjdChlcnJvclN0cmluZywgJmhp
Z2hsaWdodEluc3BlY3Rvck9iamVjdCk7CisgICAgc3RkOjp1bmlxdWVfcHRyPEhpZ2hsaWdodENv
bmZpZz4gaGlnaGxpZ2h0Q29uZmlnID0gaGlnaGxpZ2h0Q29uZmlnRnJvbUluc3BlY3Rvck9iamVj
dChlcnJvclN0cmluZywgV1RGTW92ZShoaWdobGlnaHRJbnNwZWN0b3JPYmplY3QpKTsKICAgICBp
ZiAoIWhpZ2hsaWdodENvbmZpZykKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFr
ZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCiAgICAgbV9vdmVybGF5LT5oaWdobGlnaHROb2Rl
KG5vZGUsICpoaWdobGlnaHRDb25maWcpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJ
bnNwZWN0b3JET01BZ2VudDo6aGlnaGxpZ2h0Tm9kZUxpc3QoRXJyb3JTdHJpbmcmIGVycm9yU3Ry
aW5nLCBjb25zdCBKU09OOjpBcnJheSYgbm9kZUlkcywgY29uc3QgSlNPTjo6T2JqZWN0JiBoaWdo
bGlnaHRJbnNwZWN0b3JPYmplY3QpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNw
ZWN0b3JET01BZ2VudDo6aGlnaGxpZ2h0Tm9kZUxpc3QoUmVmPEpTT046OkFycmF5PiYmIG5vZGVJ
ZHMsIFJlZjxKU09OOjpPYmplY3Q+JiYgaGlnaGxpZ2h0SW5zcGVjdG9yT2JqZWN0KQogewotICAg
IFZlY3RvcjxSZWY8Tm9kZT4+IG5vZGVzOwotICAgIGZvciAoYXV0byYgbm9kZVZhbHVlIDogbm9k
ZUlkcykgewotICAgICAgICBpZiAoIW5vZGVWYWx1ZSkgewotICAgICAgICAgICAgZXJyb3JTdHJp
bmcgPSAiVW5leHBlY3RlZCBub24taW50ZWdlciBpdGVtIGluIGdpdmVuIG5vZGVJZHMiX3M7Ci0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcg
ZXJyb3JTdHJpbmc7CiAKLSAgICAgICAgaW50IG5vZGVJZCA9IDA7Ci0gICAgICAgIGlmICghbm9k
ZVZhbHVlLT5hc0ludGVnZXIobm9kZUlkKSkgewotICAgICAgICAgICAgZXJyb3JTdHJpbmcgPSAi
VW5leHBlY3RlZCBub24taW50ZWdlciBpdGVtIGluIGdpdmVuIG5vZGVJZHMiX3M7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KKyAgICBWZWN0b3I8UmVmPE5vZGU+PiBub2RlczsKKyAg
ICBmb3IgKGF1dG8mIG5vZGVJZFZhbHVlIDogbm9kZUlkcy5nZXQoKSkgeworICAgICAgICBhdXRv
IG5vZGVJZCA9IG5vZGVJZFZhbHVlLT5hc0ludGVnZXIoKTsKKyAgICAgICAgaWYgKCFub2RlSWQp
CisgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIlVuZXhwZWN0ZWQgbm9uLWludGVn
ZXIgaXRlbSBpbiBnaXZlbiBub2RlSWRzIl9zKTsKIAogICAgICAgICAvLyBJbiB0aGUgY2FzZSB0
aGF0IGEgbm9kZSBpcyByZW1vdmVkIGluIHRoZSB0aW1lIGJldHdlZW4gd2hlbiBoaWdobGlnaHRO
b2RlTGlzdCBpcyBpbnZva2VkCiAgICAgICAgIC8vIGJ5IHRoZSBmcm9udGVuZCBhbmQgaXQgaXMg
ZXhlY3V0ZWQgYnkgdGhlIGJhY2tlbmQsIHdlIHNob3VsZCBzdGlsbCBhdHRlbXB0IHRvIGhpZ2hs
aWdodAogICAgICAgICAvLyBhcyBtYW55IG5vZGVzIGFzIHBvc3NpYmxlLiBBcyBzdWNoLCB3ZSBz
aG91bGQgaWdub3JlIGFueSBlcnJvcnMgZ2VuZXJhdGVkIHdoZW4gYXR0ZW1wdGluZwogICAgICAg
ICAvLyB0byBnZXQgYSBOb2RlIGZyb20gYSBnaXZlbiBub2RlSWQuIAotICAgICAgICBFcnJvclN0
cmluZyBpZ25vcmVkOwotICAgICAgICBOb2RlKiBub2RlID0gYXNzZXJ0Tm9kZShpZ25vcmVkLCBu
b2RlSWQpOworICAgICAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgaWdub3JlZDsKKyAgICAgICAg
Tm9kZSogbm9kZSA9IGFzc2VydE5vZGUoaWdub3JlZCwgKm5vZGVJZCk7CiAgICAgICAgIGlmICgh
bm9kZSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIG5vZGVzLmFwcGVuZCgqbm9k
ZSk7CiAgICAgfQogCi0gICAgc3RkOjp1bmlxdWVfcHRyPEhpZ2hsaWdodENvbmZpZz4gaGlnaGxp
Z2h0Q29uZmlnID0gaGlnaGxpZ2h0Q29uZmlnRnJvbUluc3BlY3Rvck9iamVjdChlcnJvclN0cmlu
ZywgJmhpZ2hsaWdodEluc3BlY3Rvck9iamVjdCk7CisgICAgc3RkOjp1bmlxdWVfcHRyPEhpZ2hs
aWdodENvbmZpZz4gaGlnaGxpZ2h0Q29uZmlnID0gaGlnaGxpZ2h0Q29uZmlnRnJvbUluc3BlY3Rv
ck9iamVjdChlcnJvclN0cmluZywgV1RGTW92ZShoaWdobGlnaHRJbnNwZWN0b3JPYmplY3QpKTsK
ICAgICBpZiAoIWhpZ2hsaWdodENvbmZpZykKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1
cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCiAgICAgbV9vdmVybGF5LT5oaWdobGln
aHROb2RlTGlzdChTdGF0aWNOb2RlTGlzdDo6Y3JlYXRlKFdURk1vdmUobm9kZXMpKSwgKmhpZ2hs
aWdodENvbmZpZyk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckRPTUFn
ZW50OjpoaWdobGlnaHRGcmFtZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmlu
ZyYgZnJhbWVJZCwgY29uc3QgSlNPTjo6T2JqZWN0KiBjb2xvciwgY29uc3QgSlNPTjo6T2JqZWN0
KiBvdXRsaW5lQ29sb3IpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JE
T01BZ2VudDo6aGlnaGxpZ2h0RnJhbWUoY29uc3QgUHJvdG9jb2w6Ok5ldHdvcms6OkZyYW1lSWQm
IGZyYW1lSWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgY29sb3IsIFJlZlB0cjxKU09OOjpPYmpl
Y3Q+JiYgb3V0bGluZUNvbG9yKQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0
cmluZzsKKwogICAgIGF1dG8qIHBhZ2VBZ2VudCA9IG1faW5zdHJ1bWVudGluZ0FnZW50cy5lbmFi
bGVkUGFnZUFnZW50KCk7Ci0gICAgaWYgKCFwYWdlQWdlbnQpIHsKLSAgICAgICAgZXJyb3JTdHJp
bmcgPSAiUGFnZSBkb21haW4gbXVzdCBiZSBlbmFibGVkIl9zOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQorICAgIGlmICghcGFnZUFnZW50KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQo
IlBhZ2UgZG9tYWluIG11c3QgYmUgZW5hYmxlZCJfcyk7CiAKICAgICBhdXRvKiBmcmFtZSA9IHBh
Z2VBZ2VudC0+YXNzZXJ0RnJhbWUoZXJyb3JTdHJpbmcsIGZyYW1lSWQpOwogICAgIGlmICghZnJh
bWUpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9y
U3RyaW5nKTsKIAogICAgIGlmIChmcmFtZS0+b3duZXJFbGVtZW50KCkpIHsKICAgICAgICAgYXV0
byBoaWdobGlnaHRDb25maWcgPSBtYWtlVW5pcXVlPEhpZ2hsaWdodENvbmZpZz4oKTsKICAgICAg
ICAgaGlnaGxpZ2h0Q29uZmlnLT5zaG93SW5mbyA9IHRydWU7IC8vIEFsd2F5cyBzaG93IHRvb2x0
aXBzIGZvciBmcmFtZXMuCi0gICAgICAgIGhpZ2hsaWdodENvbmZpZy0+Y29udGVudCA9IHBhcnNl
Q29sb3IoY29sb3IpOwotICAgICAgICBoaWdobGlnaHRDb25maWctPmNvbnRlbnRPdXRsaW5lID0g
cGFyc2VDb2xvcihvdXRsaW5lQ29sb3IpOworICAgICAgICBoaWdobGlnaHRDb25maWctPmNvbnRl
bnQgPSBwYXJzZUNvbG9yKFdURk1vdmUoY29sb3IpKTsKKyAgICAgICAgaGlnaGxpZ2h0Q29uZmln
LT5jb250ZW50T3V0bGluZSA9IHBhcnNlQ29sb3IoV1RGTW92ZShvdXRsaW5lQ29sb3IpKTsKICAg
ICAgICAgbV9vdmVybGF5LT5oaWdobGlnaHROb2RlKGZyYW1lLT5vd25lckVsZW1lbnQoKSwgKmhp
Z2hsaWdodENvbmZpZyk7CiAgICAgfQorCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNw
ZWN0b3JET01BZ2VudDo6aGlkZUhpZ2hsaWdodChFcnJvclN0cmluZyYpCitQcm90b2NvbDo6RXJy
b3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JET01BZ2VudDo6aGlkZUhpZ2hsaWdodCgpCiB7CiAg
ICAgbV9vdmVybGF5LT5oaWRlSGlnaGxpZ2h0KCk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12
b2lkIEluc3BlY3RvckRPTUFnZW50Ojptb3ZlVG8oRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBp
bnQgbm9kZUlkLCBpbnQgdGFyZ2V0RWxlbWVudElkLCBjb25zdCBpbnQqIGFuY2hvck5vZGVJZCwg
aW50KiBuZXdOb2RlSWQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxQcm90b2NvbDo6RE9NOjpO
b2RlSWQ+IEluc3BlY3RvckRPTUFnZW50Ojptb3ZlVG8oUHJvdG9jb2w6OkRPTTo6Tm9kZUlkIG5v
ZGVJZCwgUHJvdG9jb2w6OkRPTTo6Tm9kZUlkIHRhcmdldE5vZGVJZCwgT3B0aW9uYWw8UHJvdG9j
b2w6OkRPTTo6Tm9kZUlkPiYmIGluc2VydEJlZm9yZU5vZGVJZCkKIHsKKyAgICBQcm90b2NvbDo6
RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBOb2RlKiBub2RlID0gYXNzZXJ0RWRpdGFi
bGVOb2RlKGVycm9yU3RyaW5nLCBub2RlSWQpOwogICAgIGlmICghbm9kZSkKLSAgICAgICAgcmV0
dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCi0gICAg
RWxlbWVudCogdGFyZ2V0RWxlbWVudCA9IGFzc2VydEVkaXRhYmxlRWxlbWVudChlcnJvclN0cmlu
ZywgdGFyZ2V0RWxlbWVudElkKTsKKyAgICBFbGVtZW50KiB0YXJnZXRFbGVtZW50ID0gYXNzZXJ0
RWRpdGFibGVFbGVtZW50KGVycm9yU3RyaW5nLCB0YXJnZXROb2RlSWQpOwogICAgIGlmICghdGFy
Z2V0RWxlbWVudCkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0
ZWQoZXJyb3JTdHJpbmcpOwogCi0gICAgTm9kZSogYW5jaG9yTm9kZSA9IDA7Ci0gICAgaWYgKGFu
Y2hvck5vZGVJZCAmJiAqYW5jaG9yTm9kZUlkKSB7Ci0gICAgICAgIGFuY2hvck5vZGUgPSBhc3Nl
cnRFZGl0YWJsZU5vZGUoZXJyb3JTdHJpbmcsICphbmNob3JOb2RlSWQpOworICAgIE5vZGUqIGFu
Y2hvck5vZGUgPSBudWxscHRyOworICAgIGlmIChpbnNlcnRCZWZvcmVOb2RlSWQgJiYgKmluc2Vy
dEJlZm9yZU5vZGVJZCkgeworICAgICAgICBhbmNob3JOb2RlID0gYXNzZXJ0RWRpdGFibGVOb2Rl
KGVycm9yU3RyaW5nLCAqaW5zZXJ0QmVmb3JlTm9kZUlkKTsKICAgICAgICAgaWYgKCFhbmNob3JO
b2RlKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAoYW5jaG9yTm9kZS0+cGFyZW50
Tm9kZSgpICE9IHRhcmdldEVsZW1lbnQpIHsKLSAgICAgICAgICAgIGVycm9yU3RyaW5nID0gIkdp
dmVuIGFuY2hvck5vZGVJZCBtdXN0IGJlIGEgY2hpbGQgb2YgZ2l2ZW4gdGFyZ2V0RWxlbWVudElk
Il9zOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4g
bWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOworICAgICAgICBpZiAoYW5jaG9yTm9kZS0+cGFy
ZW50Tm9kZSgpICE9IHRhcmdldEVsZW1lbnQpCisgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoIkdpdmVuIGluc2VydEJlZm9yZU5vZGVJZCBtdXN0IGJlIGEgY2hpbGQgb2YgZ2l2ZW4g
dGFyZ2V0Tm9kZUlkIl9zKTsKICAgICB9CiAKICAgICBpZiAoIW1fZG9tRWRpdG9yLT5pbnNlcnRC
ZWZvcmUoKnRhcmdldEVsZW1lbnQsICpub2RlLCBhbmNob3JOb2RlLCBlcnJvclN0cmluZykpCi0g
ICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5n
KTsKIAotICAgICpuZXdOb2RlSWQgPSBwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKGVycm9yU3RyaW5n
LCBub2RlKTsKKyAgICByZXR1cm4gcHVzaE5vZGVQYXRoVG9Gcm9udGVuZChlcnJvclN0cmluZywg
bm9kZSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnVuZG8oRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yRE9NQWdl
bnQ6OnVuZG8oKQogewogICAgIGF1dG8gcmVzdWx0ID0gbV9oaXN0b3J5LT51bmRvKCk7CiAgICAg
aWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkKLSAgICAgICAgZXJyb3JTdHJpbmcgPSB0b0Vycm9y
U3RyaW5nKHJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCkpOworICAgICAgICByZXR1cm4gbWFrZVVu
ZXhwZWN0ZWQoSW5zcGVjdG9yRE9NQWdlbnQ6OnRvRXJyb3JTdHJpbmcocmVzdWx0LnJlbGVhc2VF
eGNlcHRpb24oKSkpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01B
Z2VudDo6cmVkbyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCitQcm90b2NvbDo6RXJyb3JTdHJp
bmdPcjx2b2lkPiBJbnNwZWN0b3JET01BZ2VudDo6cmVkbygpCiB7CiAgICAgYXV0byByZXN1bHQg
PSBtX2hpc3RvcnktPnJlZG8oKTsKICAgICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKQotICAg
ICAgICBlcnJvclN0cmluZyA9IHRvRXJyb3JTdHJpbmcocmVzdWx0LnJlbGVhc2VFeGNlcHRpb24o
KSk7CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChJbnNwZWN0b3JET01BZ2VudDo6dG9F
cnJvclN0cmluZyhyZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpKSk7CisKKyAgICByZXR1cm4geyB9
OwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjptYXJrVW5kb2FibGVTdGF0ZShFcnJvclN0
cmluZyYpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JET01BZ2VudDo6
bWFya1VuZG9hYmxlU3RhdGUoKQogewogICAgIG1faGlzdG9yeS0+bWFya1VuZG9hYmxlU3RhdGUo
KTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmZvY3Vz
KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJZCkKK1Byb3RvY29sOjpFcnJvclN0
cmluZ09yPHZvaWQ+IEluc3BlY3RvckRPTUFnZW50Ojpmb2N1cyhQcm90b2NvbDo6RE9NOjpOb2Rl
SWQgbm9kZUlkKQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwog
ICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBhc3NlcnRFbGVtZW50KGVycm9yU3RyaW5nLCBub2RlSWQp
OwogICAgIGlmICghZWxlbWVudCkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICghZWxlbWVudC0+
aXNGb2N1c2FibGUoKSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJFbGVtZW50IGZvciBnaXZl
biBub2RlSWQgaXMgbm90IGZvY3VzYWJsZSJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAg
ICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKKyAgICBpZiAoIWVsZW1l
bnQtPmlzRm9jdXNhYmxlKCkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiRWxlbWVu
dCBmb3IgZ2l2ZW4gbm9kZUlkIGlzIG5vdCBmb2N1c2FibGUiX3MpOworCiAgICAgZWxlbWVudC0+
Zm9jdXMoKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6
OnNldEluc3BlY3RlZE5vZGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkKQor
UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yRE9NQWdlbnQ6OnNldEluc3Bl
Y3RlZE5vZGUoUHJvdG9jb2w6OkRPTTo6Tm9kZUlkIG5vZGVJZCkKIHsKKyAgICBQcm90b2NvbDo6
RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBOb2RlKiBub2RlID0gYXNzZXJ0Tm9kZShl
cnJvclN0cmluZywgbm9kZUlkKTsKICAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJldHVybjsKKyAg
ICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAotICAgIGlmIChub2Rl
LT5pc0luVXNlckFnZW50U2hhZG93VHJlZSgpICYmICFtX2FsbG93RWRpdGluZ1VzZXJBZ2VudFNo
YWRvd1RyZWVzKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIk5vZGUgZm9yIGdpdmVuIG5vZGVJ
ZCBpcyBpbiBhIHNoYWRvdyB0cmVlIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlm
IChub2RlLT5pc0luVXNlckFnZW50U2hhZG93VHJlZSgpICYmICFtX2FsbG93RWRpdGluZ1VzZXJB
Z2VudFNoYWRvd1RyZWVzKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk5vZGUgZm9y
IGdpdmVuIG5vZGVJZCBpcyBpbiBhIHNoYWRvdyB0cmVlIl9zKTsKIAogICAgIG1faW5zcGVjdGVk
Tm9kZSA9IG5vZGU7CiAKQEAgLTE0OTgsMzggKzE1NTYsNDkgQEAgdm9pZCBJbnNwZWN0b3JET01B
Z2VudDo6c2V0SW5zcGVjdGVkTm9kZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2Rl
SWQpCiAgICAgICAgIGNvbW1hbmRMaW5lQVBJSG9zdC0+YWRkSW5zcGVjdGVkT2JqZWN0KG1ha2VV
bmlxdWU8SW5zcGVjdGFibGVOb2RlPihub2RlKSk7CiAKICAgICBtX3N1cHByZXNzRXZlbnRMaXN0
ZW5lckNoYW5nZWRFdmVudCA9IGZhbHNlOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJ
bnNwZWN0b3JET01BZ2VudDo6cmVzb2x2ZU5vZGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBp
bnQgbm9kZUlkLCBjb25zdCBTdHJpbmcqIG9iamVjdEdyb3VwLCBSZWZQdHI8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0KQorUHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8UmVmPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+PiBJbnNwZWN0b3JE
T01BZ2VudDo6cmVzb2x2ZU5vZGUoUHJvdG9jb2w6OkRPTTo6Tm9kZUlkIG5vZGVJZCwgY29uc3Qg
U3RyaW5nJiBvYmplY3RHcm91cCkKIHsKLSAgICBTdHJpbmcgb2JqZWN0R3JvdXBOYW1lID0gb2Jq
ZWN0R3JvdXAgPyAqb2JqZWN0R3JvdXAgOiBlbXB0eVN0cmluZygpOworICAgIFByb3RvY29sOjpF
cnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIE5vZGUqIG5vZGUgPSBhc3NlcnROb2RlKGVy
cm9yU3RyaW5nLCBub2RlSWQpOwogICAgIGlmICghbm9kZSkKLSAgICAgICAgcmV0dXJuOwotICAg
IFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+IG9iamVj
dCA9IHJlc29sdmVOb2RlKG5vZGUsIG9iamVjdEdyb3VwTmFtZSk7Ci0gICAgaWYgKCFvYmplY3Qp
IHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWlzc2luZyBpbmplY3RlZCBzY3JpcHQgZm9yIGdp
dmVuIG5vZGVJZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICByZXN1bHQgPSBvYmpl
Y3Q7CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CisKKyAgICBS
ZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4gb2JqZWN0ID0gcmVzb2x2ZU5v
ZGUobm9kZSwgb2JqZWN0R3JvdXApOworICAgIGlmICghb2JqZWN0KQorICAgICAgICByZXR1cm4g
bWFrZVVuZXhwZWN0ZWQoIk1pc3NpbmcgaW5qZWN0ZWQgc2NyaXB0IGZvciBnaXZlbiBub2RlSWQi
X3MpOworCisgICAgcmV0dXJuIG9iamVjdC5yZWxlYXNlTm9uTnVsbCgpOwogfQogCi12b2lkIElu
c3BlY3RvckRPTUFnZW50OjpnZXRBdHRyaWJ1dGVzKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywg
aW50IG5vZGVJZCwgUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4mIHJlc3VsdCkKK1Byb3Rv
Y29sOjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPFN0cmluZz4+PiBJbnNwZWN0b3JE
T01BZ2VudDo6Z2V0QXR0cmlidXRlcyhQcm90b2NvbDo6RE9NOjpOb2RlSWQgbm9kZUlkKQogewor
ICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIEVsZW1lbnQqIGVs
ZW1lbnQgPSBhc3NlcnRFbGVtZW50KGVycm9yU3RyaW5nLCBub2RlSWQpOwogICAgIGlmICghZWxl
bWVudCkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJy
b3JTdHJpbmcpOwogCi0gICAgcmVzdWx0ID0gYnVpbGRBcnJheUZvckVsZW1lbnRBdHRyaWJ1dGVz
KGVsZW1lbnQpOworICAgIHJldHVybiBidWlsZEFycmF5Rm9yRWxlbWVudEF0dHJpYnV0ZXMoZWxl
bWVudCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnJlcXVlc3ROb2RlKEVycm9yU3Ry
aW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBvYmplY3RJZCwgaW50KiBub2RlSWQpCitQ
cm90b2NvbDo6RXJyb3JTdHJpbmdPcjxQcm90b2NvbDo6RE9NOjpOb2RlSWQ+IEluc3BlY3RvckRP
TUFnZW50OjpyZXF1ZXN0Tm9kZShjb25zdCBQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0
SWQmIG9iamVjdElkKQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsK
KwogICAgIE5vZGUqIG5vZGUgPSBub2RlRm9yT2JqZWN0SWQob2JqZWN0SWQpOwotICAgIGlmIChu
b2RlKQotICAgICAgICAqbm9kZUlkID0gcHVzaE5vZGVQYXRoVG9Gcm9udGVuZChlcnJvclN0cmlu
Zywgbm9kZSk7Ci0gICAgZWxzZQotICAgICAgICAqbm9kZUlkID0gMDsKKyAgICBpZiAoIW5vZGUp
CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTWlzc2luZyBub2RlIGZvciBnaXZlbiBv
YmplY3RJZCJfcyk7CisKKyAgICBhdXRvIG5vZGVJZCA9IHB1c2hOb2RlUGF0aFRvRnJvbnRlbmQo
ZXJyb3JTdHJpbmcsIG5vZGUpOworICAgIGlmICghbm9kZUlkKQorICAgICAgICByZXR1cm4gbWFr
ZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOworCisgICAgcmV0dXJuIG5vZGVJZDsKIH0KIAogU3Ry
aW5nIEluc3BlY3RvckRPTUFnZW50Ojpkb2N1bWVudFVSTFN0cmluZyhEb2N1bWVudCogZG9jdW1l
bnQpCkBAIC0xNTQ0LDQ0ICsxNjEzLDQ0IEBAIHN0YXRpYyBTdHJpbmcgZG9jdW1lbnRCYXNlVVJM
U3RyaW5nKERvY3VtZW50KiBkb2N1bWVudCkKICAgICByZXR1cm4gZG9jdW1lbnQtPmNvbXBsZXRl
VVJMKGVtcHR5U3RyaW5nKCkpLnN0cmluZygpOwogfQogCi1zdGF0aWMgYm9vbCBwc2V1ZG9FbGVt
ZW50VHlwZShQc2V1ZG9JZCBwc2V1ZG9JZCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpQc2V1
ZG9UeXBlKiB0eXBlKQorc3RhdGljIGJvb2wgcHNldWRvRWxlbWVudFR5cGUoUHNldWRvSWQgcHNl
dWRvSWQsIFByb3RvY29sOjpET006OlBzZXVkb1R5cGUqIHR5cGUpCiB7CiAgICAgc3dpdGNoIChw
c2V1ZG9JZCkgewogICAgIGNhc2UgUHNldWRvSWQ6OkJlZm9yZToKLSAgICAgICAgKnR5cGUgPSBJ
bnNwZWN0b3I6OlByb3RvY29sOjpET006OlBzZXVkb1R5cGU6OkJlZm9yZTsKKyAgICAgICAgKnR5
cGUgPSBQcm90b2NvbDo6RE9NOjpQc2V1ZG9UeXBlOjpCZWZvcmU7CiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIGNhc2UgUHNldWRvSWQ6OkFmdGVyOgotICAgICAgICAqdHlwZSA9IEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRPTTo6UHNldWRvVHlwZTo6QWZ0ZXI7CisgICAgICAgICp0eXBlID0gUHJv
dG9jb2w6OkRPTTo6UHNldWRvVHlwZTo6QWZ0ZXI7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiB9CiAKLXN0YXRpYyBJbnNw
ZWN0b3I6OlByb3RvY29sOjpET006OlNoYWRvd1Jvb3RUeXBlIHNoYWRvd1Jvb3RUeXBlKFNoYWRv
d1Jvb3RNb2RlIG1vZGUpCitzdGF0aWMgUHJvdG9jb2w6OkRPTTo6U2hhZG93Um9vdFR5cGUgc2hh
ZG93Um9vdFR5cGUoU2hhZG93Um9vdE1vZGUgbW9kZSkKIHsKICAgICBzd2l0Y2ggKG1vZGUpIHsK
ICAgICBjYXNlIFNoYWRvd1Jvb3RNb2RlOjpVc2VyQWdlbnQ6Ci0gICAgICAgIHJldHVybiBJbnNw
ZWN0b3I6OlByb3RvY29sOjpET006OlNoYWRvd1Jvb3RUeXBlOjpVc2VyQWdlbnQ7CisgICAgICAg
IHJldHVybiBQcm90b2NvbDo6RE9NOjpTaGFkb3dSb290VHlwZTo6VXNlckFnZW50OwogICAgIGNh
c2UgU2hhZG93Um9vdE1vZGU6OkNsb3NlZDoKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRPTTo6U2hhZG93Um9vdFR5cGU6OkNsb3NlZDsKKyAgICAgICAgcmV0dXJuIFByb3Rv
Y29sOjpET006OlNoYWRvd1Jvb3RUeXBlOjpDbG9zZWQ7CiAgICAgY2FzZSBTaGFkb3dSb290TW9k
ZTo6T3BlbjoKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6U2hhZG93
Um9vdFR5cGU6Ok9wZW47CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6RE9NOjpTaGFkb3dSb290
VHlwZTo6T3BlbjsKICAgICB9CiAKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1
cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpTaGFkb3dSb290VHlwZTo6VXNlckFnZW50Owor
ICAgIHJldHVybiBQcm90b2NvbDo6RE9NOjpTaGFkb3dSb290VHlwZTo6VXNlckFnZW50OwogfQog
Ci1zdGF0aWMgSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpDdXN0b21FbGVtZW50U3RhdGUgY3Vz
dG9tRWxlbWVudFN0YXRlKGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQpCitzdGF0aWMgUHJvdG9jb2w6
OkRPTTo6Q3VzdG9tRWxlbWVudFN0YXRlIGN1c3RvbUVsZW1lbnRTdGF0ZShjb25zdCBFbGVtZW50
JiBlbGVtZW50KQogewogICAgIGlmIChlbGVtZW50LmlzRGVmaW5lZEN1c3RvbUVsZW1lbnQoKSkK
LSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Q3VzdG9tRWxlbWVudFN0
YXRlOjpDdXN0b207CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6RE9NOjpDdXN0b21FbGVtZW50
U3RhdGU6OkN1c3RvbTsKICAgICBpZiAoZWxlbWVudC5pc0ZhaWxlZEN1c3RvbUVsZW1lbnQoKSkK
LSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Q3VzdG9tRWxlbWVudFN0
YXRlOjpGYWlsZWQ7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6RE9NOjpDdXN0b21FbGVtZW50
U3RhdGU6OkZhaWxlZDsKICAgICBpZiAoZWxlbWVudC5pc1VuZGVmaW5lZEN1c3RvbUVsZW1lbnQo
KSB8fCBlbGVtZW50LmlzQ3VzdG9tRWxlbWVudFVwZ3JhZGVDYW5kaWRhdGUoKSkKLSAgICAgICAg
cmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Q3VzdG9tRWxlbWVudFN0YXRlOjpXYWl0
aW5nOwotICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkN1c3RvbUVsZW1lbnRT
dGF0ZTo6QnVpbHRpbjsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpET006OkN1c3RvbUVsZW1l
bnRTdGF0ZTo6V2FpdGluZzsKKyAgICByZXR1cm4gUHJvdG9jb2w6OkRPTTo6Q3VzdG9tRWxlbWVu
dFN0YXRlOjpCdWlsdGluOwogfQogCiBzdGF0aWMgU3RyaW5nIGNvbXB1dGVDb250ZW50U2VjdXJp
dHlQb2xpY3lTSEEyNTZIYXNoKGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQpCkBAIC0xNTk3LDkgKzE2
NjYsOSBAQCBzdGF0aWMgU3RyaW5nIGNvbXB1dGVDb250ZW50U2VjdXJpdHlQb2xpY3lTSEEyNTZI
YXNoKGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQpCiAgICAgcmV0dXJuIG1ha2VTdHJpbmcoInNoYTI1
Ni0iLCBiYXNlNjRFbmNvZGUoZGlnZXN0LmRhdGEoKSwgZGlnZXN0LnNpemUoKSkpOwogfQogCi1S
ZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlPiBJbnNwZWN0b3JET01BZ2VudDo6YnVp
bGRPYmplY3RGb3JOb2RlKE5vZGUqIG5vZGUsIGludCBkZXB0aCwgTm9kZVRvSWRNYXAqIG5vZGVz
TWFwKQorUmVmPFByb3RvY29sOjpET006Ok5vZGU+IEluc3BlY3RvckRPTUFnZW50OjpidWlsZE9i
amVjdEZvck5vZGUoTm9kZSogbm9kZSwgaW50IGRlcHRoLCBOb2RlVG9JZE1hcCogbm9kZXNNYXAp
CiB7Ci0gICAgaW50IGlkID0gYmluZChub2RlLCBub2Rlc01hcCk7CisgICAgYXV0byBpZCA9IGJp
bmQobm9kZSwgbm9kZXNNYXApOwogICAgIFN0cmluZyBub2RlTmFtZTsKICAgICBTdHJpbmcgbG9j
YWxOYW1lOwogICAgIFN0cmluZyBub2RlVmFsdWU7CkBAIC0xNjMwLDcgKzE2OTksNyBAQCBSZWY8
SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlPiBJbnNwZWN0b3JET01BZ2VudDo6YnVpbGRP
YmplY3RGb3JOb2RlKE5vZGUqCiAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIGF1dG8gdmFs
dWUgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU6OmNyZWF0ZSgpCisgICAgYXV0byB2
YWx1ZSA9IFByb3RvY29sOjpET006Ok5vZGU6OmNyZWF0ZSgpCiAgICAgICAgIC5zZXROb2RlSWQo
aWQpCiAgICAgICAgIC5zZXROb2RlVHlwZShzdGF0aWNfY2FzdDxpbnQ+KG5vZGUtPm5vZGVUeXBl
KCkpKQogICAgICAgICAuc2V0Tm9kZU5hbWUobm9kZU5hbWUpCkBAIC0xNjQxLDcgKzE3MTAsNyBA
QCBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlPiBJbnNwZWN0b3JET01BZ2VudDo6
YnVpbGRPYmplY3RGb3JOb2RlKE5vZGUqCiAgICAgaWYgKG5vZGUtPmlzQ29udGFpbmVyTm9kZSgp
KSB7CiAgICAgICAgIGludCBub2RlQ291bnQgPSBpbm5lckNoaWxkTm9kZUNvdW50KG5vZGUpOwog
ICAgICAgICB2YWx1ZS0+c2V0Q2hpbGROb2RlQ291bnQobm9kZUNvdW50KTsKLSAgICAgICAgUmVm
PEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlPj4gY2hpbGRyZW4g
PSBidWlsZEFycmF5Rm9yQ29udGFpbmVyQ2hpbGRyZW4obm9kZSwgZGVwdGgsIG5vZGVzTWFwKTsK
KyAgICAgICAgUmVmPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkRPTTo6Tm9kZT4+IGNoaWxkcmVu
ID0gYnVpbGRBcnJheUZvckNvbnRhaW5lckNoaWxkcmVuKG5vZGUsIGRlcHRoLCBub2Rlc01hcCk7
CiAgICAgICAgIGlmIChjaGlsZHJlbi0+bGVuZ3RoKCkgPiAwKQogICAgICAgICAgICAgdmFsdWUt
PnNldENoaWxkcmVuKFdURk1vdmUoY2hpbGRyZW4pKTsKICAgICB9CkBAIC0xNjYxLDcgKzE3MzAs
NyBAQCBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlPiBJbnNwZWN0b3JET01BZ2Vu
dDo6YnVpbGRPYmplY3RGb3JOb2RlKE5vZGUqCiAgICAgICAgIH0KIAogICAgICAgICBpZiAoU2hh
ZG93Um9vdCogcm9vdCA9IGVsZW1lbnQuc2hhZG93Um9vdCgpKSB7Ci0gICAgICAgICAgICBhdXRv
IHNoYWRvd1Jvb3RzID0gSlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5v
ZGU+OjpjcmVhdGUoKTsKKyAgICAgICAgICAgIGF1dG8gc2hhZG93Um9vdHMgPSBKU09OOjpBcnJh
eU9mPFByb3RvY29sOjpET006Ok5vZGU+OjpjcmVhdGUoKTsKICAgICAgICAgICAgIHNoYWRvd1Jv
b3RzLT5hZGRJdGVtKGJ1aWxkT2JqZWN0Rm9yTm9kZShyb290LCAwLCBub2Rlc01hcCkpOwogICAg
ICAgICAgICAgdmFsdWUtPnNldFNoYWRvd1Jvb3RzKFdURk1vdmUoc2hhZG93Um9vdHMpKTsKICAg
ICAgICAgfQpAQCAtMTY3MywxNiArMTc0MiwxNiBAQCBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6
RE9NOjpOb2RlPiBJbnNwZWN0b3JET01BZ2VudDo6YnVpbGRPYmplY3RGb3JOb2RlKE5vZGUqCiAg
ICAgICAgICAgICB2YWx1ZS0+c2V0Q29udGVudFNlY3VyaXR5UG9saWN5SGFzaChjb21wdXRlQ29u
dGVudFNlY3VyaXR5UG9saWN5U0hBMjU2SGFzaChlbGVtZW50KSk7CiAKICAgICAgICAgYXV0byBz
dGF0ZSA9IGN1c3RvbUVsZW1lbnRTdGF0ZShlbGVtZW50KTsKLSAgICAgICAgaWYgKHN0YXRlICE9
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Q3VzdG9tRWxlbWVudFN0YXRlOjpCdWlsdGluKQor
ICAgICAgICBpZiAoc3RhdGUgIT0gUHJvdG9jb2w6OkRPTTo6Q3VzdG9tRWxlbWVudFN0YXRlOjpC
dWlsdGluKQogICAgICAgICAgICAgdmFsdWUtPnNldEN1c3RvbUVsZW1lbnRTdGF0ZShzdGF0ZSk7
CiAKICAgICAgICAgaWYgKGVsZW1lbnQucHNldWRvSWQoKSAhPSBQc2V1ZG9JZDo6Tm9uZSkgewot
ICAgICAgICAgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpQc2V1ZG9UeXBlIHBzZXVkb1R5
cGU7CisgICAgICAgICAgICBQcm90b2NvbDo6RE9NOjpQc2V1ZG9UeXBlIHBzZXVkb1R5cGU7CiAg
ICAgICAgICAgICBpZiAocHNldWRvRWxlbWVudFR5cGUoZWxlbWVudC5wc2V1ZG9JZCgpLCAmcHNl
dWRvVHlwZSkpCiAgICAgICAgICAgICAgICAgdmFsdWUtPnNldFBzZXVkb1R5cGUocHNldWRvVHlw
ZSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpZiAoYXV0byBwc2V1ZG9FbGVtZW50
cyA9IGJ1aWxkQXJyYXlGb3JQc2V1ZG9FbGVtZW50cyhlbGVtZW50LCBub2Rlc01hcCkpCi0gICAg
ICAgICAgICAgICAgdmFsdWUtPnNldFBzZXVkb0VsZW1lbnRzKFdURk1vdmUocHNldWRvRWxlbWVu
dHMpKTsKKyAgICAgICAgICAgICAgICB2YWx1ZS0+c2V0UHNldWRvRWxlbWVudHMocHNldWRvRWxl
bWVudHMucmVsZWFzZU5vbk51bGwoKSk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgaWYgKGlzPERv
Y3VtZW50Pigqbm9kZSkpIHsKICAgICAgICAgRG9jdW1lbnQmIGRvY3VtZW50ID0gZG93bmNhc3Q8
RG9jdW1lbnQ+KCpub2RlKTsKQEAgLTE3MjEsOSArMTc5MCw5IEBAIFJlZjxKU09OOjpBcnJheU9m
PFN0cmluZz4+IEluc3BlY3RvckRPTUFnZW50OjpidWlsZEFycmF5Rm9yRWxlbWVudEF0dHJpYnV0
ZXMoRWxlCiAgICAgcmV0dXJuIGF0dHJpYnV0ZXNWYWx1ZTsKIH0KIAotUmVmPEpTT046OkFycmF5
T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlPj4gSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1
aWxkQXJyYXlGb3JDb250YWluZXJDaGlsZHJlbihOb2RlKiBjb250YWluZXIsIGludCBkZXB0aCwg
Tm9kZVRvSWRNYXAqIG5vZGVzTWFwKQorUmVmPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkRPTTo6
Tm9kZT4+IEluc3BlY3RvckRPTUFnZW50OjpidWlsZEFycmF5Rm9yQ29udGFpbmVyQ2hpbGRyZW4o
Tm9kZSogY29udGFpbmVyLCBpbnQgZGVwdGgsIE5vZGVUb0lkTWFwKiBub2Rlc01hcCkKIHsKLSAg
ICBhdXRvIGNoaWxkcmVuID0gSlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006
Ok5vZGU+OjpjcmVhdGUoKTsKKyAgICBhdXRvIGNoaWxkcmVuID0gSlNPTjo6QXJyYXlPZjxQcm90
b2NvbDo6RE9NOjpOb2RlPjo6Y3JlYXRlKCk7CiAgICAgaWYgKGRlcHRoID09IDApIHsKICAgICAg
ICAgLy8gU3BlY2lhbC1jYXNlIHRoZSBvbmx5IHRleHQgY2hpbGQgLSBwcmV0ZW5kIHRoYXQgY29u
dGFpbmVyJ3MgY2hpbGRyZW4gaGF2ZSBiZWVuIHJlcXVlc3RlZC4KICAgICAgICAgTm9kZSogZmly
c3RDaGlsZCA9IGNvbnRhaW5lci0+Zmlyc3RDaGlsZCgpOwpAQCAtMTc0NSwxNCArMTgxNCwxNCBA
QCBSZWY8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+PiBJbnNw
ZWN0b3JET01BZ2VudDo6YnVpbGRBcnJheQogICAgIHJldHVybiBjaGlsZHJlbjsKIH0KIAotUmVm
UHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlPj4gSW5zcGVj
dG9yRE9NQWdlbnQ6OmJ1aWxkQXJyYXlGb3JQc2V1ZG9FbGVtZW50cyhjb25zdCBFbGVtZW50JiBl
bGVtZW50LCBOb2RlVG9JZE1hcCogbm9kZXNNYXApCitSZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90
b2NvbDo6RE9NOjpOb2RlPj4gSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkQXJyYXlGb3JQc2V1ZG9F
bGVtZW50cyhjb25zdCBFbGVtZW50JiBlbGVtZW50LCBOb2RlVG9JZE1hcCogbm9kZXNNYXApCiB7
CiAgICAgUHNldWRvRWxlbWVudCogYmVmb3JlRWxlbWVudCA9IGVsZW1lbnQuYmVmb3JlUHNldWRv
RWxlbWVudCgpOwogICAgIFBzZXVkb0VsZW1lbnQqIGFmdGVyRWxlbWVudCA9IGVsZW1lbnQuYWZ0
ZXJQc2V1ZG9FbGVtZW50KCk7CiAgICAgaWYgKCFiZWZvcmVFbGVtZW50ICYmICFhZnRlckVsZW1l
bnQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgYXV0byBwc2V1ZG9FbGVtZW50cyA9
IEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlPjo6Y3JlYXRlKCk7
CisgICAgYXV0byBwc2V1ZG9FbGVtZW50cyA9IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkRPTTo6
Tm9kZT46OmNyZWF0ZSgpOwogICAgIGlmIChiZWZvcmVFbGVtZW50KQogICAgICAgICBwc2V1ZG9F
bGVtZW50cy0+YWRkSXRlbShidWlsZE9iamVjdEZvck5vZGUoYmVmb3JlRWxlbWVudCwgMCwgbm9k
ZXNNYXApKTsKICAgICBpZiAoYWZ0ZXJFbGVtZW50KQpAQCAtMTc2MCw3ICsxODI5LDcgQEAgUmVm
UHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlPj4gSW5zcGVj
dG9yRE9NQWdlbnQ6OmJ1aWxkQXIKICAgICByZXR1cm4gcHNldWRvRWxlbWVudHM7CiB9CiAKLVJl
ZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkV2ZW50TGlzdGVuZXI+IEluc3BlY3RvckRPTUFn
ZW50OjpidWlsZE9iamVjdEZvckV2ZW50TGlzdGVuZXIoY29uc3QgUmVnaXN0ZXJlZEV2ZW50TGlz
dGVuZXImIHJlZ2lzdGVyZWRFdmVudExpc3RlbmVyLCBpbnQgaWRlbnRpZmllciwgRXZlbnRUYXJn
ZXQmIGV2ZW50VGFyZ2V0LCBjb25zdCBBdG9tU3RyaW5nJiBldmVudFR5cGUsIGJvb2wgZGlzYWJs
ZWQsIGNvbnN0IFJlZlB0cjxKU0M6OkJyZWFrcG9pbnQ+JiBicmVha3BvaW50KQorUmVmPFByb3Rv
Y29sOjpET006OkV2ZW50TGlzdGVuZXI+IEluc3BlY3RvckRPTUFnZW50OjpidWlsZE9iamVjdEZv
ckV2ZW50TGlzdGVuZXIoY29uc3QgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXImIHJlZ2lzdGVyZWRF
dmVudExpc3RlbmVyLCBQcm90b2NvbDo6RE9NOjpFdmVudExpc3RlbmVySWQgaWRlbnRpZmllciwg
RXZlbnRUYXJnZXQmIGV2ZW50VGFyZ2V0LCBjb25zdCBBdG9tU3RyaW5nJiBldmVudFR5cGUsIGJv
b2wgZGlzYWJsZWQsIGNvbnN0IFJlZlB0cjxKU0M6OkJyZWFrcG9pbnQ+JiBicmVha3BvaW50KQog
ewogICAgIFJlZjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyID0gcmVnaXN0ZXJlZEV2ZW50
TGlzdGVuZXIuY2FsbGJhY2soKTsKIApAQCAtMTgyMiw3ICsxODkxLDcgQEAgUmVmPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRPTTo6RXZlbnRMaXN0ZW5lcj4gSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxk
T2JqZWN0Rm9yRXYKICAgICAgICAgfQogICAgIH0KIAotICAgIGF1dG8gdmFsdWUgPSBJbnNwZWN0
b3I6OlByb3RvY29sOjpET006OkV2ZW50TGlzdGVuZXI6OmNyZWF0ZSgpCisgICAgYXV0byB2YWx1
ZSA9IFByb3RvY29sOjpET006OkV2ZW50TGlzdGVuZXI6OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRF
dmVudExpc3RlbmVySWQoaWRlbnRpZmllcikKICAgICAgICAgLnNldFR5cGUoZXZlbnRUeXBlKQog
ICAgICAgICAuc2V0VXNlQ2FwdHVyZShyZWdpc3RlcmVkRXZlbnRMaXN0ZW5lci51c2VDYXB0dXJl
KCkpCkBAIC0xODMzLDcgKzE5MDIsNyBAQCBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpF
dmVudExpc3RlbmVyPiBJbnNwZWN0b3JET01BZ2VudDo6YnVpbGRPYmplY3RGb3JFdgogICAgIGVs
c2UgaWYgKGlzPERPTVdpbmRvdz4oZXZlbnRUYXJnZXQpKQogICAgICAgICB2YWx1ZS0+c2V0T25X
aW5kb3codHJ1ZSk7CiAgICAgaWYgKCFzY3JpcHRJRC5pc051bGwoKSkgewotICAgICAgICBhdXRv
IGxvY2F0aW9uID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OkxvY2F0aW9uOjpjcmVh
dGUoKQorICAgICAgICBhdXRvIGxvY2F0aW9uID0gUHJvdG9jb2w6OkRlYnVnZ2VyOjpMb2NhdGlv
bjo6Y3JlYXRlKCkKICAgICAgICAgICAgIC5zZXRTY3JpcHRJZChzY3JpcHRJRCkKICAgICAgICAg
ICAgIC5zZXRMaW5lTnVtYmVyKGxpbmVOdW1iZXIpCiAgICAgICAgICAgICAucmVsZWFzZSgpOwpA
QCAtMTg1Myw3ICsxOTIyLDcgQEAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6RXZlbnRM
aXN0ZW5lcj4gSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yRXYKICAgICByZXR1cm4g
dmFsdWU7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnByb2Nlc3NBY2Nlc3NpYmlsaXR5
Q2hpbGRyZW4oQVhDb3JlT2JqZWN0JiBheE9iamVjdCwgSlNPTjo6QXJyYXlPZjxpbnQ+JiBjaGls
ZE5vZGVJZHMpCit2b2lkIEluc3BlY3RvckRPTUFnZW50Ojpwcm9jZXNzQWNjZXNzaWJpbGl0eUNo
aWxkcmVuKEFYQ29yZU9iamVjdCYgYXhPYmplY3QsIEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkRP
TTo6Tm9kZUlkPiYgY2hpbGROb2RlSWRzKQogewogICAgIGNvbnN0IGF1dG8mIGNoaWxkcmVuID0g
YXhPYmplY3QuY2hpbGRyZW4oKTsKICAgICBpZiAoIWNoaWxkcmVuLnNpemUoKSkKQEAgLTE4Njcs
NDMgKzE5MzYsMzkgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6cHJvY2Vzc0FjY2Vzc2liaWxp
dHlDaGlsZHJlbihBWENvcmVPYmplY3QmIGF4T2JqZWN0LCBKU08KICAgICB9CiB9CiAgICAgCi1S
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllcz4g
SW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yQWNjZXNzaWJpbGl0eVByb3BlcnRpZXMo
Tm9kZSogbm9kZSkKK1JlZjxQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllcz4g
SW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yQWNjZXNzaWJpbGl0eVByb3BlcnRpZXMo
Tm9kZSYgbm9kZSkKIHsKLSAgICBBU1NFUlQobm9kZSk7Ci0gICAgaWYgKCFub2RlKQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLQogICAgIGlmICghV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6YWNj
ZXNzaWJpbGl0eUVuYWJsZWQoKSkKICAgICAgICAgV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6ZW5h
YmxlQWNjZXNzaWJpbGl0eSgpOwogCiAgICAgTm9kZSogYWN0aXZlRGVzY2VuZGFudE5vZGUgPSBu
dWxscHRyOwogICAgIGJvb2wgYnVzeSA9IGZhbHNlOwotICAgIGF1dG8gY2hlY2tlZCA9IEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6OkNoZWNrZWQ6OkZh
bHNlOwotICAgIFJlZlB0cjxKU09OOjpBcnJheU9mPGludD4+IGNoaWxkTm9kZUlkczsKLSAgICBS
ZWZQdHI8SlNPTjo6QXJyYXlPZjxpbnQ+PiBjb250cm9sbGVkTm9kZUlkczsKLSAgICBhdXRvIGN1
cnJlbnRTdGF0ZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3Bl
cnRpZXM6OkN1cnJlbnQ6OkZhbHNlOworICAgIGF1dG8gY2hlY2tlZCA9IFByb3RvY29sOjpET006
OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpDaGVja2VkOjpGYWxzZTsKKyAgICBSZWZQdHI8SlNP
Tjo6QXJyYXlPZjxQcm90b2NvbDo6RE9NOjpOb2RlSWQ+PiBjaGlsZE5vZGVJZHM7CisgICAgUmVm
UHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkRPTTo6Tm9kZUlkPj4gY29udHJvbGxlZE5vZGVJ
ZHM7CisgICAgYXV0byBjdXJyZW50U3RhdGUgPSBQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5
UHJvcGVydGllczo6Q3VycmVudDo6RmFsc2U7CiAgICAgYm9vbCBleGlzdHMgPSBmYWxzZTsKICAg
ICBib29sIGV4cGFuZGVkID0gZmFsc2U7CiAgICAgYm9vbCBkaXNhYmxlZCA9IGZhbHNlOwotICAg
IFJlZlB0cjxKU09OOjpBcnJheU9mPGludD4+IGZsb3dlZE5vZGVJZHM7CisgICAgUmVmUHRyPEpT
T046OkFycmF5T2Y8UHJvdG9jb2w6OkRPTTo6Tm9kZUlkPj4gZmxvd2VkTm9kZUlkczsKICAgICBi
b29sIGZvY3VzZWQgPSBmYWxzZTsKICAgICBib29sIGlnbm9yZWQgPSB0cnVlOwogICAgIGJvb2wg
aWdub3JlZEJ5RGVmYXVsdCA9IGZhbHNlOwotICAgIGF1dG8gaW52YWxpZCA9IEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6OkludmFsaWQ6OkZhbHNlOwor
ICAgIGF1dG8gaW52YWxpZCA9IFByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVz
OjpJbnZhbGlkOjpGYWxzZTsKICAgICBib29sIGhpZGRlbiA9IGZhbHNlOwogICAgIFN0cmluZyBs
YWJlbDsKICAgICBib29sIGxpdmVSZWdpb25BdG9taWMgPSBmYWxzZTsKICAgICBSZWZQdHI8SlNP
Tjo6QXJyYXlPZjxTdHJpbmc+PiBsaXZlUmVnaW9uUmVsZXZhbnQ7Ci0gICAgYXV0byBsaXZlUmVn
aW9uU3RhdHVzID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVy
dGllczo6TGl2ZVJlZ2lvblN0YXR1czo6T2ZmOworICAgIGF1dG8gbGl2ZVJlZ2lvblN0YXR1cyA9
IFByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpMaXZlUmVnaW9uU3RhdHVz
OjpPZmY7CiAgICAgTm9kZSogbW91c2VFdmVudE5vZGUgPSBudWxscHRyOwotICAgIFJlZlB0cjxK
U09OOjpBcnJheU9mPGludD4+IG93bmVkTm9kZUlkczsKKyAgICBSZWZQdHI8SlNPTjo6QXJyYXlP
ZjxQcm90b2NvbDo6RE9NOjpOb2RlSWQ+PiBvd25lZE5vZGVJZHM7CiAgICAgTm9kZSogcGFyZW50
Tm9kZSA9IG51bGxwdHI7CiAgICAgYm9vbCBwcmVzc2VkID0gZmFsc2U7CiAgICAgYm9vbCByZWFk
b25seSA9IGZhbHNlOwogICAgIGJvb2wgcmVxdWlyZWQgPSBmYWxzZTsKICAgICBTdHJpbmcgcm9s
ZTsKICAgICBib29sIHNlbGVjdGVkID0gZmFsc2U7Ci0gICAgUmVmUHRyPEpTT046OkFycmF5T2Y8
aW50Pj4gc2VsZWN0ZWRDaGlsZE5vZGVJZHM7CisgICAgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJv
dG9jb2w6OkRPTTo6Tm9kZUlkPj4gc2VsZWN0ZWRDaGlsZE5vZGVJZHM7CiAgICAgYm9vbCBzdXBw
b3J0c0NoZWNrZWQgPSBmYWxzZTsKICAgICBib29sIHN1cHBvcnRzRXhwYW5kZWQgPSBmYWxzZTsK
ICAgICBib29sIHN1cHBvcnRzTGl2ZVJlZ2lvbiA9IGZhbHNlOwpAQCAtMTkxNSw4ICsxOTgwLDgg
QEAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRp
ZXM+IEluc3BlY3RvckRPTUFnZW50OjpidWkKICAgICB1bnNpZ25lZCBoaWVyYXJjaGljYWxMZXZl
bCA9IDA7CiAgICAgdW5zaWduZWQgbGV2ZWwgPSAwOwogCi0gICAgaWYgKEFYT2JqZWN0Q2FjaGUq
IGF4T2JqZWN0Q2FjaGUgPSBub2RlLT5kb2N1bWVudCgpLmF4T2JqZWN0Q2FjaGUoKSkgewotICAg
ICAgICBpZiAoQVhDb3JlT2JqZWN0KiBheE9iamVjdCA9IGF4T2JqZWN0Q2FjaGUtPmdldE9yQ3Jl
YXRlKG5vZGUpKSB7CisgICAgaWYgKEFYT2JqZWN0Q2FjaGUqIGF4T2JqZWN0Q2FjaGUgPSBub2Rl
LmRvY3VtZW50KCkuYXhPYmplY3RDYWNoZSgpKSB7CisgICAgICAgIGlmIChBWENvcmVPYmplY3Qq
IGF4T2JqZWN0ID0gYXhPYmplY3RDYWNoZS0+Z2V0T3JDcmVhdGUoJm5vZGUpKSB7CiAKICAgICAg
ICAgICAgIGlmIChBWENvcmVPYmplY3QqIGFjdGl2ZURlc2NlbmRhbnQgPSBheE9iamVjdC0+YWN0
aXZlRGVzY2VuZGFudCgpKQogICAgICAgICAgICAgICAgIGFjdGl2ZURlc2NlbmRhbnROb2RlID0g
YWN0aXZlRGVzY2VuZGFudC0+bm9kZSgpOwpAQCAtMTkzMiw0NyArMTk5Nyw0OSBAQCBSZWZQdHI8
SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllcz4gSW5zcGVj
dG9yRE9NQWdlbnQ6OmJ1aQogICAgICAgICAgICAgaWYgKHN1cHBvcnRzQ2hlY2tlZCkgewogICAg
ICAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlCdXR0b25TdGF0ZSBjaGVja1ZhbHVlID0gYXhPYmpl
Y3QtPmNoZWNrYm94T3JSYWRpb1ZhbHVlKCk7IC8vIEVsZW1lbnQgdXNpbmcgYXJpYS1jaGVja2Vk
LgogICAgICAgICAgICAgICAgIGlmIChjaGVja1ZhbHVlID09IEFjY2Vzc2liaWxpdHlCdXR0b25T
dGF0ZTo6T24pCi0gICAgICAgICAgICAgICAgICAgIGNoZWNrZWQgPSBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpDaGVja2VkOjpUcnVlOworICAgICAg
ICAgICAgICAgICAgICBjaGVja2VkID0gUHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3Bl
cnRpZXM6OkNoZWNrZWQ6OlRydWU7CiAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2tWYWx1
ZSA9PSBBY2Nlc3NpYmlsaXR5QnV0dG9uU3RhdGU6Ok1peGVkKQotICAgICAgICAgICAgICAgICAg
ICBjaGVja2VkID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVy
dGllczo6Q2hlY2tlZDo6TWl4ZWQ7CisgICAgICAgICAgICAgICAgICAgIGNoZWNrZWQgPSBQcm90
b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6Q2hlY2tlZDo6TWl4ZWQ7CiAgICAg
ICAgICAgICAgICAgZWxzZSBpZiAoYXhPYmplY3QtPmlzQ2hlY2tlZCgpKSAvLyBOYXRpdmUgY2hl
Y2tib3guCi0gICAgICAgICAgICAgICAgICAgIGNoZWNrZWQgPSBJbnNwZWN0b3I6OlByb3RvY29s
OjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpDaGVja2VkOjpUcnVlOworICAgICAgICAg
ICAgICAgICAgICBjaGVja2VkID0gUHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRp
ZXM6OkNoZWNrZWQ6OlRydWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAg
ICAgIGlmICghYXhPYmplY3QtPmNoaWxkcmVuKCkuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAg
ICAgY2hpbGROb2RlSWRzID0gSlNPTjo6QXJyYXlPZjxpbnQ+OjpjcmVhdGUoKTsKKyAgICAgICAg
ICAgICAgICBjaGlsZE5vZGVJZHMgPSBKU09OOjpBcnJheU9mPFByb3RvY29sOjpET006Ok5vZGVJ
ZD46OmNyZWF0ZSgpOwogICAgICAgICAgICAgICAgIHByb2Nlc3NBY2Nlc3NpYmlsaXR5Q2hpbGRy
ZW4oKmF4T2JqZWN0LCAqY2hpbGROb2RlSWRzKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IAogICAgICAgICAgICAgVmVjdG9yPEVsZW1lbnQqPiBjb250cm9sbGVkRWxlbWVudHM7CiAgICAg
ICAgICAgICBheE9iamVjdC0+ZWxlbWVudHNGcm9tQXR0cmlidXRlKGNvbnRyb2xsZWRFbGVtZW50
cywgYXJpYV9jb250cm9sc0F0dHIpOwogICAgICAgICAgICAgaWYgKGNvbnRyb2xsZWRFbGVtZW50
cy5zaXplKCkpIHsKLSAgICAgICAgICAgICAgICBjb250cm9sbGVkTm9kZUlkcyA9IEpTT046OkFy
cmF5T2Y8aW50Pjo6Y3JlYXRlKCk7Ci0gICAgICAgICAgICAgICAgZm9yIChFbGVtZW50KiBjb250
cm9sbGVkRWxlbWVudCA6IGNvbnRyb2xsZWRFbGVtZW50cykKLSAgICAgICAgICAgICAgICAgICAg
Y29udHJvbGxlZE5vZGVJZHMtPmFkZEl0ZW0ocHVzaE5vZGVQYXRoVG9Gcm9udGVuZChjb250cm9s
bGVkRWxlbWVudCkpOworICAgICAgICAgICAgICAgIGNvbnRyb2xsZWROb2RlSWRzID0gSlNPTjo6
QXJyYXlPZjxQcm90b2NvbDo6RE9NOjpOb2RlSWQ+OjpjcmVhdGUoKTsKKyAgICAgICAgICAgICAg
ICBmb3IgKEVsZW1lbnQqIGNvbnRyb2xsZWRFbGVtZW50IDogY29udHJvbGxlZEVsZW1lbnRzKSB7
CisgICAgICAgICAgICAgICAgICAgIGlmIChhdXRvIGNvbnRyb2xsZWRFbGVtZW50SWQgPSBwdXNo
Tm9kZVBhdGhUb0Zyb250ZW5kKGNvbnRyb2xsZWRFbGVtZW50KSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnRyb2xsZWROb2RlSWRzLT5hZGRJdGVtKGNvbnRyb2xsZWRFbGVtZW50SWQpOwor
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAg
ICAgc3dpdGNoIChheE9iamVjdC0+Y3VycmVudFN0YXRlKCkpIHsKICAgICAgICAgICAgIGNhc2Ug
QWNjZXNzaWJpbGl0eUN1cnJlbnRTdGF0ZTo6RmFsc2U6Ci0gICAgICAgICAgICAgICAgY3VycmVu
dFN0YXRlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGll
czo6Q3VycmVudDo6RmFsc2U7CisgICAgICAgICAgICAgICAgY3VycmVudFN0YXRlID0gUHJvdG9j
b2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6OkN1cnJlbnQ6OkZhbHNlOwogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBBY2Nlc3NpYmlsaXR5Q3VycmVudFN0
YXRlOjpQYWdlOgotICAgICAgICAgICAgICAgIGN1cnJlbnRTdGF0ZSA9IEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6OkN1cnJlbnQ6OlBhZ2U7CisgICAg
ICAgICAgICAgICAgY3VycmVudFN0YXRlID0gUHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVBy
b3BlcnRpZXM6OkN1cnJlbnQ6OlBhZ2U7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICBjYXNlIEFjY2Vzc2liaWxpdHlDdXJyZW50U3RhdGU6OlN0ZXA6Ci0gICAgICAgICAgICAg
ICAgY3VycmVudFN0YXRlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5
UHJvcGVydGllczo6Q3VycmVudDo6U3RlcDsKKyAgICAgICAgICAgICAgICBjdXJyZW50U3RhdGUg
PSBQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6Q3VycmVudDo6U3RlcDsK
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgQWNjZXNzaWJpbGl0eUN1
cnJlbnRTdGF0ZTo6TG9jYXRpb246Ci0gICAgICAgICAgICAgICAgY3VycmVudFN0YXRlID0gSW5z
cGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6Q3VycmVudDo6
TG9jYXRpb247CisgICAgICAgICAgICAgICAgY3VycmVudFN0YXRlID0gUHJvdG9jb2w6OkRPTTo6
QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6OkN1cnJlbnQ6OkxvY2F0aW9uOwogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBBY2Nlc3NpYmlsaXR5Q3VycmVudFN0YXRlOjpE
YXRlOgotICAgICAgICAgICAgICAgIGN1cnJlbnRTdGF0ZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6OkN1cnJlbnQ6OkRhdGU7CisgICAgICAgICAg
ICAgICAgY3VycmVudFN0YXRlID0gUHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRp
ZXM6OkN1cnJlbnQ6OkRhdGU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBj
YXNlIEFjY2Vzc2liaWxpdHlDdXJyZW50U3RhdGU6OlRpbWU6Ci0gICAgICAgICAgICAgICAgY3Vy
cmVudFN0YXRlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVy
dGllczo6Q3VycmVudDo6VGltZTsKKyAgICAgICAgICAgICAgICBjdXJyZW50U3RhdGUgPSBQcm90
b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6Q3VycmVudDo6VGltZTsKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgQWNjZXNzaWJpbGl0eUN1cnJlbnRT
dGF0ZTo6VHJ1ZToKLSAgICAgICAgICAgICAgICBjdXJyZW50U3RhdGUgPSBJbnNwZWN0b3I6OlBy
b3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpDdXJyZW50OjpUcnVlOworICAg
ICAgICAgICAgICAgIGN1cnJlbnRTdGF0ZSA9IFByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQ
cm9wZXJ0aWVzOjpDdXJyZW50OjpUcnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgfQogCkBAIC0xOTg2LDEyICsyMDUzLDE0IEBAIFJlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzPiBJbnNwZWN0b3JET01BZ2VudDo6YnVp
CiAgICAgICAgICAgICBWZWN0b3I8RWxlbWVudCo+IGZsb3dlZEVsZW1lbnRzOwogICAgICAgICAg
ICAgYXhPYmplY3QtPmVsZW1lbnRzRnJvbUF0dHJpYnV0ZShmbG93ZWRFbGVtZW50cywgYXJpYV9m
bG93dG9BdHRyKTsKICAgICAgICAgICAgIGlmIChmbG93ZWRFbGVtZW50cy5zaXplKCkpIHsKLSAg
ICAgICAgICAgICAgICBmbG93ZWROb2RlSWRzID0gSlNPTjo6QXJyYXlPZjxpbnQ+OjpjcmVhdGUo
KTsKLSAgICAgICAgICAgICAgICBmb3IgKEVsZW1lbnQqIGZsb3dlZEVsZW1lbnQgOiBmbG93ZWRF
bGVtZW50cykKLSAgICAgICAgICAgICAgICAgICAgZmxvd2VkTm9kZUlkcy0+YWRkSXRlbShwdXNo
Tm9kZVBhdGhUb0Zyb250ZW5kKGZsb3dlZEVsZW1lbnQpKTsKKyAgICAgICAgICAgICAgICBmbG93
ZWROb2RlSWRzID0gSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6RE9NOjpOb2RlSWQ+OjpjcmVhdGUo
KTsKKyAgICAgICAgICAgICAgICBmb3IgKEVsZW1lbnQqIGZsb3dlZEVsZW1lbnQgOiBmbG93ZWRF
bGVtZW50cykgeworICAgICAgICAgICAgICAgICAgICBpZiAoYXV0byBmbG93ZWRFbGVtZW50SWQg
PSBwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKGZsb3dlZEVsZW1lbnQpKQorICAgICAgICAgICAgICAg
ICAgICAgICAgZmxvd2VkTm9kZUlkcy0+YWRkSXRlbShmbG93ZWRFbGVtZW50SWQpOworICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYg
KGlzPEVsZW1lbnQ+KCpub2RlKSkgeworICAgICAgICAgICAgaWYgKGlzPEVsZW1lbnQ+KG5vZGUp
KSB7CiAgICAgICAgICAgICAgICAgc3VwcG9ydHNGb2N1c2VkID0gYXhPYmplY3QtPmNhblNldEZv
Y3VzQXR0cmlidXRlKCk7CiAgICAgICAgICAgICAgICAgaWYgKHN1cHBvcnRzRm9jdXNlZCkKICAg
ICAgICAgICAgICAgICAgICAgZm9jdXNlZCA9IGF4T2JqZWN0LT5pc0ZvY3VzZWQoKTsKQEAgLTIw
MDIsMTMgKzIwNzEsMTMgQEAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6QWNjZXNz
aWJpbGl0eVByb3BlcnRpZXM+IEluc3BlY3RvckRPTUFnZW50OjpidWkKICAgICAgICAgICAgIAog
ICAgICAgICAgICAgU3RyaW5nIGludmFsaWRWYWx1ZSA9IGF4T2JqZWN0LT5pbnZhbGlkU3RhdHVz
KCk7CiAgICAgICAgICAgICBpZiAoaW52YWxpZFZhbHVlID09ICJmYWxzZSIpCi0gICAgICAgICAg
ICAgICAgaW52YWxpZCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVBy
b3BlcnRpZXM6OkludmFsaWQ6OkZhbHNlOworICAgICAgICAgICAgICAgIGludmFsaWQgPSBQcm90
b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6SW52YWxpZDo6RmFsc2U7CiAgICAg
ICAgICAgICBlbHNlIGlmIChpbnZhbGlkVmFsdWUgPT0gImdyYW1tYXIiKQotICAgICAgICAgICAg
ICAgIGludmFsaWQgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9w
ZXJ0aWVzOjpJbnZhbGlkOjpHcmFtbWFyOworICAgICAgICAgICAgICAgIGludmFsaWQgPSBQcm90
b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6SW52YWxpZDo6R3JhbW1hcjsKICAg
ICAgICAgICAgIGVsc2UgaWYgKGludmFsaWRWYWx1ZSA9PSAic3BlbGxpbmciKQotICAgICAgICAg
ICAgICAgIGludmFsaWQgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQ
cm9wZXJ0aWVzOjpJbnZhbGlkOjpTcGVsbGluZzsKKyAgICAgICAgICAgICAgICBpbnZhbGlkID0g
UHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6OkludmFsaWQ6OlNwZWxsaW5n
OwogICAgICAgICAgICAgZWxzZSAvLyBGdXR1cmUgdmVyc2lvbnMgb2YgQVJJQSBtYXkgYWxsb3cg
YWRkaXRpb25hbCB0cnV0aHkgdmFsdWVzLiBFeC4gZm9ybWF0LCBvcmRlciwgb3Igc2l6ZS4KLSAg
ICAgICAgICAgICAgICBpbnZhbGlkID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3Np
YmlsaXR5UHJvcGVydGllczo6SW52YWxpZDo6VHJ1ZTsKKyAgICAgICAgICAgICAgICBpbnZhbGlk
ID0gUHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6OkludmFsaWQ6OlRydWU7
CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChheE9iamVjdC0+aXNBWEhpZGRlbigpIHx8
IGF4T2JqZWN0LT5pc0RPTUhpZGRlbigpKQogICAgICAgICAgICAgICAgIGhpZGRlbiA9IHRydWU7
CkBAIC0yMDIyLDkgKzIwOTEsOSBAQCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpB
Y2Nlc3NpYmlsaXR5UHJvcGVydGllcz4gSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aQogICAgICAgICAg
ICAgICAgIFN0cmluZyBhcmlhUmVsZXZhbnRBdHRyVmFsdWUgPSBheE9iamVjdC0+bGl2ZVJlZ2lv
blJlbGV2YW50KCk7CiAgICAgICAgICAgICAgICAgaWYgKCFhcmlhUmVsZXZhbnRBdHRyVmFsdWUu
aXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBQYXNzIGVudW0gdmFs
dWVzIHJhdGhlciB0aGFuIHN0cmluZ3Mgb25jZSB1bmJsb2NrZWQuIGh0dHA6Ly93ZWJraXQub3Jn
L2IvMTMzNzExCi0gICAgICAgICAgICAgICAgICAgIFN0cmluZyBhcmlhUmVsZXZhbnRBZGRpdGlv
bnMgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpJbnNwZWN0b3JIZWxwZXJzOjpnZXRFbnVtQ29uc3Rh
bnRWYWx1ZShJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkxpdmVSZWdpb25SZWxldmFudDo6QWRk
aXRpb25zKTsKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGFyaWFSZWxldmFudFJlbW92YWxz
ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6SW5zcGVjdG9ySGVscGVyczo6Z2V0RW51bUNvbnN0YW50
VmFsdWUoSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpMaXZlUmVnaW9uUmVsZXZhbnQ6OlJlbW92
YWxzKTsKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGFyaWFSZWxldmFudFRleHQgPSBJbnNw
ZWN0b3I6OlByb3RvY29sOjpJbnNwZWN0b3JIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShJ
bnNwZWN0b3I6OlByb3RvY29sOjpET006OkxpdmVSZWdpb25SZWxldmFudDo6VGV4dCk7CisgICAg
ICAgICAgICAgICAgICAgIFN0cmluZyBhcmlhUmVsZXZhbnRBZGRpdGlvbnMgPSBQcm90b2NvbDo6
SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUoUHJvdG9jb2w6OkRPTTo6TGl2ZVJlZ2lvblJl
bGV2YW50OjpBZGRpdGlvbnMpOworICAgICAgICAgICAgICAgICAgICBTdHJpbmcgYXJpYVJlbGV2
YW50UmVtb3ZhbHMgPSBQcm90b2NvbDo6SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUoUHJv
dG9jb2w6OkRPTTo6TGl2ZVJlZ2lvblJlbGV2YW50OjpSZW1vdmFscyk7CisgICAgICAgICAgICAg
ICAgICAgIFN0cmluZyBhcmlhUmVsZXZhbnRUZXh0ID0gUHJvdG9jb2w6OkhlbHBlcnM6OmdldEVu
dW1Db25zdGFudFZhbHVlKFByb3RvY29sOjpET006OkxpdmVSZWdpb25SZWxldmFudDo6VGV4dCk7
CiAgICAgICAgICAgICAgICAgICAgIGxpdmVSZWdpb25SZWxldmFudCA9IEpTT046OkFycmF5T2Y8
U3RyaW5nPjo6Y3JlYXRlKCk7CiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNwYWNlU3BsaXRT
dHJpbmcmIHZhbHVlcyA9IFNwYWNlU3BsaXRTdHJpbmcoYXJpYVJlbGV2YW50QXR0clZhbHVlLCB0
cnVlKTsKICAgICAgICAgICAgICAgICAgICAgLy8gQGFyaWEtcmVsZXZhbnQ9ImFsbCIgaXMgZXhw
b3NlZCBhcyBbImFkZGl0aW9ucyIsInJlbW92YWxzIiwidGV4dCJdLCBpbiBvcmRlci4KQEAgLTIw
NDUsOSArMjExNCw5IEBAIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2li
aWxpdHlQcm9wZXJ0aWVzPiBJbnNwZWN0b3JET01BZ2VudDo6YnVpCiAKICAgICAgICAgICAgICAg
ICBTdHJpbmcgYXJpYUxpdmUgPSBheE9iamVjdC0+bGl2ZVJlZ2lvblN0YXR1cygpOwogICAgICAg
ICAgICAgICAgIGlmIChhcmlhTGl2ZSA9PSAiYXNzZXJ0aXZlIikKLSAgICAgICAgICAgICAgICAg
ICAgbGl2ZVJlZ2lvblN0YXR1cyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJp
bGl0eVByb3BlcnRpZXM6OkxpdmVSZWdpb25TdGF0dXM6OkFzc2VydGl2ZTsKKyAgICAgICAgICAg
ICAgICAgICAgbGl2ZVJlZ2lvblN0YXR1cyA9IFByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQ
cm9wZXJ0aWVzOjpMaXZlUmVnaW9uU3RhdHVzOjpBc3NlcnRpdmU7CiAgICAgICAgICAgICAgICAg
ZWxzZSBpZiAoYXJpYUxpdmUgPT0gInBvbGl0ZSIpCi0gICAgICAgICAgICAgICAgICAgIGxpdmVS
ZWdpb25TdGF0dXMgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9w
ZXJ0aWVzOjpMaXZlUmVnaW9uU3RhdHVzOjpQb2xpdGU7CisgICAgICAgICAgICAgICAgICAgIGxp
dmVSZWdpb25TdGF0dXMgPSBQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6
TGl2ZVJlZ2lvblN0YXR1czo6UG9saXRlOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBp
ZiAoaXM8QWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q+KCpheE9iamVjdCkpCkBAIC0yMDU3LDkgKzIx
MjYsMTEgQEAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVBy
b3BlcnRpZXM+IEluc3BlY3RvckRPTUFnZW50OjpidWkKICAgICAgICAgICAgICAgICBWZWN0b3I8
RWxlbWVudCo+IG93bmVkRWxlbWVudHM7CiAgICAgICAgICAgICAgICAgYXhPYmplY3QtPmVsZW1l
bnRzRnJvbUF0dHJpYnV0ZShvd25lZEVsZW1lbnRzLCBhcmlhX293bnNBdHRyKTsKICAgICAgICAg
ICAgICAgICBpZiAob3duZWRFbGVtZW50cy5zaXplKCkpIHsKLSAgICAgICAgICAgICAgICAgICAg
b3duZWROb2RlSWRzID0gSlNPTjo6QXJyYXlPZjxpbnQ+OjpjcmVhdGUoKTsKLSAgICAgICAgICAg
ICAgICAgICAgZm9yIChFbGVtZW50KiBvd25lZEVsZW1lbnQgOiBvd25lZEVsZW1lbnRzKQotICAg
ICAgICAgICAgICAgICAgICAgICAgb3duZWROb2RlSWRzLT5hZGRJdGVtKHB1c2hOb2RlUGF0aFRv
RnJvbnRlbmQob3duZWRFbGVtZW50KSk7CisgICAgICAgICAgICAgICAgICAgIG93bmVkTm9kZUlk
cyA9IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkRPTTo6Tm9kZUlkPjo6Y3JlYXRlKCk7CisgICAg
ICAgICAgICAgICAgICAgIGZvciAoRWxlbWVudCogb3duZWRFbGVtZW50IDogb3duZWRFbGVtZW50
cykgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGF1dG8gb3duZWRFbGVtZW50SWQgPSBw
dXNoTm9kZVBhdGhUb0Zyb250ZW5kKG93bmVkRWxlbWVudCkpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgb3duZWROb2RlSWRzLT5hZGRJdGVtKG93bmVkRWxlbWVudElkKTsKKyAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIApAQCAtMjA4
MywxMCArMjE1NCwxMiBAQCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3Np
YmlsaXR5UHJvcGVydGllcz4gSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aQogICAgICAgICAgICAgQVhD
b3JlT2JqZWN0OjpBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3Igc2VsZWN0ZWRDaGlsZHJlbjsK
ICAgICAgICAgICAgIGF4T2JqZWN0LT5zZWxlY3RlZENoaWxkcmVuKHNlbGVjdGVkQ2hpbGRyZW4p
OwogICAgICAgICAgICAgaWYgKHNlbGVjdGVkQ2hpbGRyZW4uc2l6ZSgpKSB7Ci0gICAgICAgICAg
ICAgICAgc2VsZWN0ZWRDaGlsZE5vZGVJZHMgPSBKU09OOjpBcnJheU9mPGludD46OmNyZWF0ZSgp
OworICAgICAgICAgICAgICAgIHNlbGVjdGVkQ2hpbGROb2RlSWRzID0gSlNPTjo6QXJyYXlPZjxQ
cm90b2NvbDo6RE9NOjpOb2RlSWQ+OjpjcmVhdGUoKTsKICAgICAgICAgICAgICAgICBmb3IgKGF1
dG8mIHNlbGVjdGVkQ2hpbGRPYmplY3QgOiBzZWxlY3RlZENoaWxkcmVuKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmIChOb2RlKiBzZWxlY3RlZENoaWxkTm9kZSA9IHNlbGVjdGVkQ2hpbGRPYmpl
Y3QtPm5vZGUoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkQ2hpbGROb2RlSWRz
LT5hZGRJdGVtKHB1c2hOb2RlUGF0aFRvRnJvbnRlbmQoc2VsZWN0ZWRDaGlsZE5vZGUpKTsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKE5vZGUqIHNlbGVjdGVkQ2hpbGROb2RlID0gc2VsZWN0ZWRD
aGlsZE9iamVjdC0+bm9kZSgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXV0byBz
ZWxlY3RlZENoaWxkTm9kZUlkID0gcHVzaE5vZGVQYXRoVG9Gcm9udGVuZChzZWxlY3RlZENoaWxk
Tm9kZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRDaGlsZE5vZGVJZHMt
PmFkZEl0ZW0oc2VsZWN0ZWRDaGlsZE5vZGVJZCk7CisgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTIwOTgsNTQg
KzIxNzEsNjAgQEAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0
eVByb3BlcnRpZXM+IEluc3BlY3RvckRPTUFnZW50OjpidWkKICAgICAgICAgfQogICAgIH0KICAg
ICAKLSAgICBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVy
dGllcz4gdmFsdWUgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9w
ZXJ0aWVzOjpjcmVhdGUoKQorICAgIFJlZjxQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJv
cGVydGllcz4gdmFsdWUgPSBQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6
Y3JlYXRlKCkKICAgICAgICAgLnNldEV4aXN0cyhleGlzdHMpCiAgICAgICAgIC5zZXRMYWJlbChs
YWJlbCkKICAgICAgICAgLnNldFJvbGUocm9sZSkKLSAgICAgICAgLnNldE5vZGVJZChwdXNoTm9k
ZVBhdGhUb0Zyb250ZW5kKG5vZGUpKQorICAgICAgICAuc2V0Tm9kZUlkKHB1c2hOb2RlUGF0aFRv
RnJvbnRlbmQoJm5vZGUpKQogICAgICAgICAucmVsZWFzZSgpOwogCiAgICAgaWYgKGV4aXN0cykg
ewotICAgICAgICBpZiAoYWN0aXZlRGVzY2VuZGFudE5vZGUpCi0gICAgICAgICAgICB2YWx1ZS0+
c2V0QWN0aXZlRGVzY2VuZGFudE5vZGVJZChwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKGFjdGl2ZURl
c2NlbmRhbnROb2RlKSk7CisgICAgICAgIGlmIChhY3RpdmVEZXNjZW5kYW50Tm9kZSkgeworICAg
ICAgICAgICAgaWYgKGF1dG8gYWN0aXZlRGVzY2VuZGFudE5vZGVJZCA9IHB1c2hOb2RlUGF0aFRv
RnJvbnRlbmQoYWN0aXZlRGVzY2VuZGFudE5vZGUpKQorICAgICAgICAgICAgICAgIHZhbHVlLT5z
ZXRBY3RpdmVEZXNjZW5kYW50Tm9kZUlkKGFjdGl2ZURlc2NlbmRhbnROb2RlSWQpOworICAgICAg
ICB9CiAgICAgICAgIGlmIChidXN5KQogICAgICAgICAgICAgdmFsdWUtPnNldEJ1c3koYnVzeSk7
CiAgICAgICAgIGlmIChzdXBwb3J0c0NoZWNrZWQpCiAgICAgICAgICAgICB2YWx1ZS0+c2V0Q2hl
Y2tlZChjaGVja2VkKTsKICAgICAgICAgaWYgKGNoaWxkTm9kZUlkcykKLSAgICAgICAgICAgIHZh
bHVlLT5zZXRDaGlsZE5vZGVJZHMoY2hpbGROb2RlSWRzKTsKKyAgICAgICAgICAgIHZhbHVlLT5z
ZXRDaGlsZE5vZGVJZHMoY2hpbGROb2RlSWRzLnJlbGVhc2VOb25OdWxsKCkpOwogICAgICAgICBp
ZiAoY29udHJvbGxlZE5vZGVJZHMpCi0gICAgICAgICAgICB2YWx1ZS0+c2V0Q29udHJvbGxlZE5v
ZGVJZHMoY29udHJvbGxlZE5vZGVJZHMpOwotICAgICAgICBpZiAoY3VycmVudFN0YXRlICE9IElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6OkN1cnJlbnQ6
OkZhbHNlKQorICAgICAgICAgICAgdmFsdWUtPnNldENvbnRyb2xsZWROb2RlSWRzKGNvbnRyb2xs
ZWROb2RlSWRzLnJlbGVhc2VOb25OdWxsKCkpOworICAgICAgICBpZiAoY3VycmVudFN0YXRlICE9
IFByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpDdXJyZW50OjpGYWxzZSkK
ICAgICAgICAgICAgIHZhbHVlLT5zZXRDdXJyZW50KGN1cnJlbnRTdGF0ZSk7CiAgICAgICAgIGlm
IChkaXNhYmxlZCkKICAgICAgICAgICAgIHZhbHVlLT5zZXREaXNhYmxlZChkaXNhYmxlZCk7CiAg
ICAgICAgIGlmIChzdXBwb3J0c0V4cGFuZGVkKQogICAgICAgICAgICAgdmFsdWUtPnNldEV4cGFu
ZGVkKGV4cGFuZGVkKTsKICAgICAgICAgaWYgKGZsb3dlZE5vZGVJZHMpCi0gICAgICAgICAgICB2
YWx1ZS0+c2V0Rmxvd2VkTm9kZUlkcyhmbG93ZWROb2RlSWRzKTsKKyAgICAgICAgICAgIHZhbHVl
LT5zZXRGbG93ZWROb2RlSWRzKGZsb3dlZE5vZGVJZHMucmVsZWFzZU5vbk51bGwoKSk7CiAgICAg
ICAgIGlmIChzdXBwb3J0c0ZvY3VzZWQpCiAgICAgICAgICAgICB2YWx1ZS0+c2V0Rm9jdXNlZChm
b2N1c2VkKTsKICAgICAgICAgaWYgKGlnbm9yZWQpCiAgICAgICAgICAgICB2YWx1ZS0+c2V0SWdu
b3JlZChpZ25vcmVkKTsKICAgICAgICAgaWYgKGlnbm9yZWRCeURlZmF1bHQpCiAgICAgICAgICAg
ICB2YWx1ZS0+c2V0SWdub3JlZEJ5RGVmYXVsdChpZ25vcmVkQnlEZWZhdWx0KTsKLSAgICAgICAg
aWYgKGludmFsaWQgIT0gSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJv
cGVydGllczo6SW52YWxpZDo6RmFsc2UpCisgICAgICAgIGlmIChpbnZhbGlkICE9IFByb3RvY29s
OjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpJbnZhbGlkOjpGYWxzZSkKICAgICAgICAg
ICAgIHZhbHVlLT5zZXRJbnZhbGlkKGludmFsaWQpOwogICAgICAgICBpZiAoaGlkZGVuKQogICAg
ICAgICAgICAgdmFsdWUtPnNldEhpZGRlbihoaWRkZW4pOwogICAgICAgICBpZiAoc3VwcG9ydHNM
aXZlUmVnaW9uKSB7CiAgICAgICAgICAgICB2YWx1ZS0+c2V0TGl2ZVJlZ2lvbkF0b21pYyhsaXZl
UmVnaW9uQXRvbWljKTsKICAgICAgICAgICAgIGlmIChsaXZlUmVnaW9uUmVsZXZhbnQtPmxlbmd0
aCgpKQotICAgICAgICAgICAgICAgIHZhbHVlLT5zZXRMaXZlUmVnaW9uUmVsZXZhbnQobGl2ZVJl
Z2lvblJlbGV2YW50KTsKKyAgICAgICAgICAgICAgICB2YWx1ZS0+c2V0TGl2ZVJlZ2lvblJlbGV2
YW50KGxpdmVSZWdpb25SZWxldmFudC5yZWxlYXNlTm9uTnVsbCgpKTsKICAgICAgICAgICAgIHZh
bHVlLT5zZXRMaXZlUmVnaW9uU3RhdHVzKGxpdmVSZWdpb25TdGF0dXMpOwogICAgICAgICB9Ci0g
ICAgICAgIGlmIChtb3VzZUV2ZW50Tm9kZSkKLSAgICAgICAgICAgIHZhbHVlLT5zZXRNb3VzZUV2
ZW50Tm9kZUlkKHB1c2hOb2RlUGF0aFRvRnJvbnRlbmQobW91c2VFdmVudE5vZGUpKTsKKyAgICAg
ICAgaWYgKG1vdXNlRXZlbnROb2RlKSB7CisgICAgICAgICAgICBpZiAoYXV0byBtb3VzZUV2ZW50
Tm9kZUlkID0gcHVzaE5vZGVQYXRoVG9Gcm9udGVuZChtb3VzZUV2ZW50Tm9kZSkpCisgICAgICAg
ICAgICAgICAgdmFsdWUtPnNldE1vdXNlRXZlbnROb2RlSWQobW91c2VFdmVudE5vZGVJZCk7Cisg
ICAgICAgIH0KICAgICAgICAgaWYgKG93bmVkTm9kZUlkcykKLSAgICAgICAgICAgIHZhbHVlLT5z
ZXRPd25lZE5vZGVJZHMob3duZWROb2RlSWRzKTsKLSAgICAgICAgaWYgKHBhcmVudE5vZGUpCi0g
ICAgICAgICAgICB2YWx1ZS0+c2V0UGFyZW50Tm9kZUlkKHB1c2hOb2RlUGF0aFRvRnJvbnRlbmQo
cGFyZW50Tm9kZSkpOworICAgICAgICAgICAgdmFsdWUtPnNldE93bmVkTm9kZUlkcyhvd25lZE5v
ZGVJZHMucmVsZWFzZU5vbk51bGwoKSk7CisgICAgICAgIGlmIChwYXJlbnROb2RlKSB7CisgICAg
ICAgICAgICBpZiAoYXV0byBwYXJlbnROb2RlSWQgPSBwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKHBh
cmVudE5vZGUpKQorICAgICAgICAgICAgICAgIHZhbHVlLT5zZXRQYXJlbnROb2RlSWQocGFyZW50
Tm9kZUlkKTsKKyAgICAgICAgfQogICAgICAgICBpZiAoc3VwcG9ydHNQcmVzc2VkKQogICAgICAg
ICAgICAgdmFsdWUtPnNldFByZXNzZWQocHJlc3NlZCk7CiAgICAgICAgIGlmIChyZWFkb25seSkK
QEAgLTIxNTUsNyArMjIzNCw3IEBAIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkFj
Y2Vzc2liaWxpdHlQcm9wZXJ0aWVzPiBJbnNwZWN0b3JET01BZ2VudDo6YnVpCiAgICAgICAgIGlm
IChzZWxlY3RlZCkKICAgICAgICAgICAgIHZhbHVlLT5zZXRTZWxlY3RlZChzZWxlY3RlZCk7CiAg
ICAgICAgIGlmIChzZWxlY3RlZENoaWxkTm9kZUlkcykKLSAgICAgICAgICAgIHZhbHVlLT5zZXRT
ZWxlY3RlZENoaWxkTm9kZUlkcyhzZWxlY3RlZENoaWxkTm9kZUlkcyk7CisgICAgICAgICAgICB2
YWx1ZS0+c2V0U2VsZWN0ZWRDaGlsZE5vZGVJZHMoc2VsZWN0ZWRDaGlsZE5vZGVJZHMucmVsZWFz
ZU5vbk51bGwoKSk7CiAgICAgICAgIAogICAgICAgICAvLyBIMSAtLSBINiBhbHdheXMgaGF2ZSBh
IGhlYWRpbmdMZXZlbCBwcm9wZXJ0eSB0aGF0IGNhbiBiZSBjb21wbGltZW50ZWQgYnkgYSBoaWVy
YXJjaGljYWxMZXZlbAogICAgICAgICAvLyBwcm9wZXJ0eSB3aGVuIGFyaWEtbGV2ZWwgaXMgc2V0
IG9uIHRoZSBlbGVtZW50LCBpbiB3aGljaCBjYXNlIHdlIHdhbnQgdG8gcmVtYWluIGNhbGxpbmcK
QEAgLTIyMzUsMjIgKzIzMTQsMjIgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6ZGlkQ29tbWl0
TG9hZChEb2N1bWVudCogZG9jdW1lbnQpCiAgICAgaWYgKCFmcmFtZU93bmVyKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBpbnQgZnJhbWVPd25lcklkID0gbV9kb2N1bWVudE5vZGVUb0lkTWFwLmdl
dChmcmFtZU93bmVyKTsKKyAgICBhdXRvIGZyYW1lT3duZXJJZCA9IG1fZG9jdW1lbnROb2RlVG9J
ZE1hcC5nZXQoZnJhbWVPd25lcik7CiAgICAgaWYgKCFmcmFtZU93bmVySWQpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIC8vIFJlLWFkZCBmcmFtZSBvd25lciBlbGVtZW50IHRvZ2V0aGVyIHdpdGgg
aXRzIG5ldyBjaGlsZHJlbi4KLSAgICBpbnQgcGFyZW50SWQgPSBtX2RvY3VtZW50Tm9kZVRvSWRN
YXAuZ2V0KGlubmVyUGFyZW50Tm9kZShmcmFtZU93bmVyLmdldCgpKSk7CisgICAgYXV0byBwYXJl
bnRJZCA9IG1fZG9jdW1lbnROb2RlVG9JZE1hcC5nZXQoaW5uZXJQYXJlbnROb2RlKGZyYW1lT3du
ZXIuZ2V0KCkpKTsKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+Y2hpbGROb2RlUmVtb3ZlZChw
YXJlbnRJZCwgZnJhbWVPd25lcklkKTsKICAgICB1bmJpbmQoZnJhbWVPd25lci5nZXQoKSwgJm1f
ZG9jdW1lbnROb2RlVG9JZE1hcCk7CiAKLSAgICBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9N
OjpOb2RlPiB2YWx1ZSA9IGJ1aWxkT2JqZWN0Rm9yTm9kZShmcmFtZU93bmVyLmdldCgpLCAwLCAm
bV9kb2N1bWVudE5vZGVUb0lkTWFwKTsKKyAgICBSZWY8UHJvdG9jb2w6OkRPTTo6Tm9kZT4gdmFs
dWUgPSBidWlsZE9iamVjdEZvck5vZGUoZnJhbWVPd25lci5nZXQoKSwgMCwgJm1fZG9jdW1lbnRO
b2RlVG9JZE1hcCk7CiAgICAgTm9kZSogcHJldmlvdXNTaWJsaW5nID0gaW5uZXJQcmV2aW91c1Np
YmxpbmcoZnJhbWVPd25lci5nZXQoKSk7Ci0gICAgaW50IHByZXZJZCA9IHByZXZpb3VzU2libGlu
ZyA/IG1fZG9jdW1lbnROb2RlVG9JZE1hcC5nZXQocHJldmlvdXNTaWJsaW5nKSA6IDA7CisgICAg
YXV0byBwcmV2SWQgPSBwcmV2aW91c1NpYmxpbmcgPyBtX2RvY3VtZW50Tm9kZVRvSWRNYXAuZ2V0
KHByZXZpb3VzU2libGluZykgOiAwOwogICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5jaGlsZE5v
ZGVJbnNlcnRlZChwYXJlbnRJZCwgcHJldklkLCBXVEZNb3ZlKHZhbHVlKSk7CiB9CiAKLWludCBJ
bnNwZWN0b3JET01BZ2VudDo6aWRlbnRpZmllckZvck5vZGUoTm9kZSYgbm9kZSkKK1Byb3RvY29s
OjpET006Ok5vZGVJZCBJbnNwZWN0b3JET01BZ2VudDo6aWRlbnRpZmllckZvck5vZGUoTm9kZSYg
bm9kZSkKIHsKICAgICByZXR1cm4gcHVzaE5vZGVQYXRoVG9Gcm9udGVuZCgmbm9kZSk7CiB9CkBA
IC0yMzA3LDcgKzIzODYsNyBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpkaWRJbnNlcnRET01O
b2RlKE5vZGUmIG5vZGUpCiAgICAgaWYgKCFwYXJlbnQpCiAgICAgICAgIHJldHVybjsKIAotICAg
IGludCBwYXJlbnRJZCA9IG1fZG9jdW1lbnROb2RlVG9JZE1hcC5nZXQocGFyZW50KTsKKyAgICBh
dXRvIHBhcmVudElkID0gbV9kb2N1bWVudE5vZGVUb0lkTWFwLmdldChwYXJlbnQpOwogICAgIC8v
IFJldHVybiBpZiBwYXJlbnQgaXMgbm90IG1hcHBlZCB5ZXQuCiAgICAgaWYgKCFwYXJlbnRJZCkK
ICAgICAgICAgcmV0dXJuOwpAQCAtMjMxOCw4ICsyMzk3LDggQEAgdm9pZCBJbnNwZWN0b3JET01B
Z2VudDo6ZGlkSW5zZXJ0RE9NTm9kZShOb2RlJiBub2RlKQogICAgIH0gZWxzZSB7CiAgICAgICAg
IC8vIENoaWxkcmVuIGhhdmUgYmVlbiByZXF1ZXN0ZWQgLT4gcmV0dXJuIHZhbHVlIG9mIGEgbmV3
IGNoaWxkLgogICAgICAgICBOb2RlKiBwcmV2U2libGluZyA9IGlubmVyUHJldmlvdXNTaWJsaW5n
KCZub2RlKTsKLSAgICAgICAgaW50IHByZXZJZCA9IHByZXZTaWJsaW5nID8gbV9kb2N1bWVudE5v
ZGVUb0lkTWFwLmdldChwcmV2U2libGluZykgOiAwOwotICAgICAgICBSZWY8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6RE9NOjpOb2RlPiB2YWx1ZSA9IGJ1aWxkT2JqZWN0Rm9yTm9kZSgmbm9kZSwgMCwg
Jm1fZG9jdW1lbnROb2RlVG9JZE1hcCk7CisgICAgICAgIGF1dG8gcHJldklkID0gcHJldlNpYmxp
bmcgPyBtX2RvY3VtZW50Tm9kZVRvSWRNYXAuZ2V0KHByZXZTaWJsaW5nKSA6IDA7CisgICAgICAg
IFJlZjxQcm90b2NvbDo6RE9NOjpOb2RlPiB2YWx1ZSA9IGJ1aWxkT2JqZWN0Rm9yTm9kZSgmbm9k
ZSwgMCwgJm1fZG9jdW1lbnROb2RlVG9JZE1hcCk7CiAgICAgICAgIG1fZnJvbnRlbmREaXNwYXRj
aGVyLT5jaGlsZE5vZGVJbnNlcnRlZChwYXJlbnRJZCwgcHJldklkLCBXVEZNb3ZlKHZhbHVlKSk7
CiAgICAgfQogfQpAQCAtMjMzNSw3ICsyNDE0LDcgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6
ZGlkUmVtb3ZlRE9NTm9kZShOb2RlJiBub2RlKQogICAgIGlmICghbV9kb2N1bWVudE5vZGVUb0lk
TWFwLmNvbnRhaW5zKHBhcmVudCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGludCBwYXJlbnRJ
ZCA9IG1fZG9jdW1lbnROb2RlVG9JZE1hcC5nZXQocGFyZW50KTsKKyAgICBhdXRvIHBhcmVudElk
ID0gbV9kb2N1bWVudE5vZGVUb0lkTWFwLmdldChwYXJlbnQpOwogCiAgICAgaWYgKCFtX2NoaWxk
cmVuUmVxdWVzdGVkLmNvbnRhaW5zKHBhcmVudElkKSkgewogICAgICAgICAvLyBObyBjaGlsZHJl
biBhcmUgbWFwcGVkIHlldCAtPiBvbmx5IG5vdGlmeSBvbiBjaGFuZ2VzIG9mIGhhc0NoaWxkcmVu
LgpAQCAtMjM1OCw3ICsyNDM3LDcgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6ZGlkTW9kaWZ5
RE9NQXR0cihFbGVtZW50JiBlbGVtZW50LCBjb25zdCBBdG9tU3RyaW5nJiBuYW0KICAgICBpZiAo
c2hvdWxkU3VwcHJlc3NFdmVudCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaW50IGlkID0gYm91
bmROb2RlSWQoJmVsZW1lbnQpOworICAgIGF1dG8gaWQgPSBib3VuZE5vZGVJZCgmZWxlbWVudCk7
CiAgICAgaWYgKCFpZCkKICAgICAgICAgcmV0dXJuOwogCkBAIC0yMzcwLDcgKzI0NDksNyBAQCB2
b2lkIEluc3BlY3RvckRPTUFnZW50OjpkaWRNb2RpZnlET01BdHRyKEVsZW1lbnQmIGVsZW1lbnQs
IGNvbnN0IEF0b21TdHJpbmcmIG5hbQogCiB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpkaWRSZW1v
dmVET01BdHRyKEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IEF0b21TdHJpbmcmIG5hbWUpCiB7Ci0g
ICAgaW50IGlkID0gYm91bmROb2RlSWQoJmVsZW1lbnQpOworICAgIGF1dG8gaWQgPSBib3VuZE5v
ZGVJZCgmZWxlbWVudCk7CiAgICAgaWYgKCFpZCkKICAgICAgICAgcmV0dXJuOwogCkBAIC0yMzgy
LDkgKzI0NjEsOSBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpkaWRSZW1vdmVET01BdHRyKEVs
ZW1lbnQmIGVsZW1lbnQsIGNvbnN0IEF0b21TdHJpbmcmIG5hbQogCiB2b2lkIEluc3BlY3RvckRP
TUFnZW50OjpzdHlsZUF0dHJpYnV0ZUludmFsaWRhdGVkKGNvbnN0IFZlY3RvcjxFbGVtZW50Kj4m
IGVsZW1lbnRzKQogewotICAgIGF1dG8gbm9kZUlkcyA9IEpTT046OkFycmF5T2Y8aW50Pjo6Y3Jl
YXRlKCk7CisgICAgYXV0byBub2RlSWRzID0gSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6RE9NOjpO
b2RlSWQ+OjpjcmVhdGUoKTsKICAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBlbGVtZW50cykgewot
ICAgICAgICBpbnQgaWQgPSBib3VuZE5vZGVJZChlbGVtZW50KTsKKyAgICAgICAgYXV0byBpZCA9
IGJvdW5kTm9kZUlkKGVsZW1lbnQpOwogICAgICAgICBpZiAoIWlkKQogICAgICAgICAgICAgY29u
dGludWU7CiAKQEAgLTIzOTgsNyArMjQ3Nyw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnN0
eWxlQXR0cmlidXRlSW52YWxpZGF0ZWQoY29uc3QgVmVjdG9yPEVsZW1lbnQqPiYgZWxlbWVuCiAK
IHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmNoYXJhY3RlckRhdGFNb2RpZmllZChDaGFyYWN0ZXJE
YXRhJiBjaGFyYWN0ZXJEYXRhKQogewotICAgIGludCBpZCA9IG1fZG9jdW1lbnROb2RlVG9JZE1h
cC5nZXQoJmNoYXJhY3RlckRhdGEpOworICAgIGF1dG8gaWQgPSBtX2RvY3VtZW50Tm9kZVRvSWRN
YXAuZ2V0KCZjaGFyYWN0ZXJEYXRhKTsKICAgICBpZiAoIWlkKSB7CiAgICAgICAgIC8vIFB1c2gg
dGV4dCBub2RlIGlmIGl0IGlzIGJlaW5nIGNyZWF0ZWQuCiAgICAgICAgIGRpZEluc2VydERPTU5v
ZGUoY2hhcmFjdGVyRGF0YSk7CkBAIC0yNDA5LDcgKzI0ODgsNyBAQCB2b2lkIEluc3BlY3RvckRP
TUFnZW50OjpjaGFyYWN0ZXJEYXRhTW9kaWZpZWQoQ2hhcmFjdGVyRGF0YSYgY2hhcmFjdGVyRGF0
YSkKIAogdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6ZGlkSW52YWxpZGF0ZVN0eWxlQXR0cihFbGVt
ZW50JiBlbGVtZW50KQogewotICAgIGludCBpZCA9IG1fZG9jdW1lbnROb2RlVG9JZE1hcC5nZXQo
JmVsZW1lbnQpOworICAgIGF1dG8gaWQgPSBtX2RvY3VtZW50Tm9kZVRvSWRNYXAuZ2V0KCZlbGVt
ZW50KTsKICAgICBpZiAoIWlkKQogICAgICAgICByZXR1cm47CiAKQEAgLTI0MjAsMjIgKzI0OTks
MjIgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6ZGlkSW52YWxpZGF0ZVN0eWxlQXR0cihFbGVt
ZW50JiBlbGVtZW50KQogCiB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpkaWRQdXNoU2hhZG93Um9v
dChFbGVtZW50JiBob3N0LCBTaGFkb3dSb290JiByb290KQogewotICAgIGludCBob3N0SWQgPSBt
X2RvY3VtZW50Tm9kZVRvSWRNYXAuZ2V0KCZob3N0KTsKKyAgICBhdXRvIGhvc3RJZCA9IG1fZG9j
dW1lbnROb2RlVG9JZE1hcC5nZXQoJmhvc3QpOwogICAgIGlmIChob3N0SWQpCiAgICAgICAgIG1f
ZnJvbnRlbmREaXNwYXRjaGVyLT5zaGFkb3dSb290UHVzaGVkKGhvc3RJZCwgYnVpbGRPYmplY3RG
b3JOb2RlKCZyb290LCAwLCAmbV9kb2N1bWVudE5vZGVUb0lkTWFwKSk7CiB9CiAKIHZvaWQgSW5z
cGVjdG9yRE9NQWdlbnQ6OndpbGxQb3BTaGFkb3dSb290KEVsZW1lbnQmIGhvc3QsIFNoYWRvd1Jv
b3QmIHJvb3QpCiB7Ci0gICAgaW50IGhvc3RJZCA9IG1fZG9jdW1lbnROb2RlVG9JZE1hcC5nZXQo
Jmhvc3QpOwotICAgIGludCByb290SWQgPSBtX2RvY3VtZW50Tm9kZVRvSWRNYXAuZ2V0KCZyb290
KTsKKyAgICBhdXRvIGhvc3RJZCA9IG1fZG9jdW1lbnROb2RlVG9JZE1hcC5nZXQoJmhvc3QpOwor
ICAgIGF1dG8gcm9vdElkID0gbV9kb2N1bWVudE5vZGVUb0lkTWFwLmdldCgmcm9vdCk7CiAgICAg
aWYgKGhvc3RJZCAmJiByb290SWQpCiAgICAgICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5zaGFk
b3dSb290UG9wcGVkKGhvc3RJZCwgcm9vdElkKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JET01BZ2Vu
dDo6ZGlkQ2hhbmdlQ3VzdG9tRWxlbWVudFN0YXRlKEVsZW1lbnQmIGVsZW1lbnQpCiB7Ci0gICAg
aW50IGVsZW1lbnRJZCA9IG1fZG9jdW1lbnROb2RlVG9JZE1hcC5nZXQoJmVsZW1lbnQpOworICAg
IGF1dG8gZWxlbWVudElkID0gbV9kb2N1bWVudE5vZGVUb0lkTWFwLmdldCgmZWxlbWVudCk7CiAg
ICAgaWYgKCFlbGVtZW50SWQpCiAgICAgICAgIHJldHVybjsKIApAQCAtMjQ2Miw3ICsyNTQxLDcg
QEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6cHNldWRvRWxlbWVudENyZWF0ZWQoUHNldWRvRWxl
bWVudCYgcHNldWRvRWxlbWVudCkKICAgICBpZiAoIXBhcmVudCkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgaW50IHBhcmVudElkID0gbV9kb2N1bWVudE5vZGVUb0lkTWFwLmdldChwYXJlbnQpOwor
ICAgIGF1dG8gcGFyZW50SWQgPSBtX2RvY3VtZW50Tm9kZVRvSWRNYXAuZ2V0KHBhcmVudCk7CiAg
ICAgaWYgKCFwYXJlbnRJZCkKICAgICAgICAgcmV0dXJuOwogCkBAIC0yNDcyLDE0ICsyNTUxLDE0
IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnBzZXVkb0VsZW1lbnRDcmVhdGVkKFBzZXVkb0Vs
ZW1lbnQmIHBzZXVkb0VsZW1lbnQpCiAKIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnBzZXVkb0Vs
ZW1lbnREZXN0cm95ZWQoUHNldWRvRWxlbWVudCYgcHNldWRvRWxlbWVudCkKIHsKLSAgICBpbnQg
cHNldWRvRWxlbWVudElkID0gbV9kb2N1bWVudE5vZGVUb0lkTWFwLmdldCgmcHNldWRvRWxlbWVu
dCk7CisgICAgYXV0byBwc2V1ZG9FbGVtZW50SWQgPSBtX2RvY3VtZW50Tm9kZVRvSWRNYXAuZ2V0
KCZwc2V1ZG9FbGVtZW50KTsKICAgICBpZiAoIXBzZXVkb0VsZW1lbnRJZCkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgLy8gSWYgYSBQc2V1ZG9FbGVtZW50IGlzIGJvdW5kLCBpdHMgcGFyZW50IGVs
ZW1lbnQgbXVzdCBoYXZlIGJlZW4gYm91bmQuCiAgICAgRWxlbWVudCogcGFyZW50ID0gcHNldWRv
RWxlbWVudC5ob3N0RWxlbWVudCgpOwogICAgIEFTU0VSVChwYXJlbnQpOwotICAgIGludCBwYXJl
bnRJZCA9IG1fZG9jdW1lbnROb2RlVG9JZE1hcC5nZXQocGFyZW50KTsKKyAgICBhdXRvIHBhcmVu
dElkID0gbV9kb2N1bWVudE5vZGVUb0lkTWFwLmdldChwYXJlbnQpOwogICAgIEFTU0VSVChwYXJl
bnRJZCk7CiAKICAgICB1bmJpbmQoJnBzZXVkb0VsZW1lbnQsICZtX2RvY3VtZW50Tm9kZVRvSWRN
YXApOwpAQCAtMjQ5NSw3ICsyNTc0LDcgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6ZGlkQWRk
RXZlbnRMaXN0ZW5lcihFdmVudFRhcmdldCYgdGFyZ2V0KQogICAgIGlmICghbm9kZS5jb250YWlu
cyhtX2luc3BlY3RlZE5vZGUuZ2V0KCkpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpbnQgbm9k
ZUlkID0gYm91bmROb2RlSWQoJm5vZGUpOworICAgIGF1dG8gbm9kZUlkID0gYm91bmROb2RlSWQo
Jm5vZGUpOwogICAgIGlmICghbm9kZUlkKQogICAgICAgICByZXR1cm47CiAKQEAgLTI1MTYsNyAr
MjU5NSw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OndpbGxSZW1vdmVFdmVudExpc3RlbmVy
KEV2ZW50VGFyZ2V0JiB0YXJnZXQsIGNvbnN0IEF0b21TCiAgICAgaWYgKCFub2RlLmNvbnRhaW5z
KG1faW5zcGVjdGVkTm9kZS5nZXQoKSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGludCBub2Rl
SWQgPSBib3VuZE5vZGVJZCgmbm9kZSk7CisgICAgYXV0byBub2RlSWQgPSBib3VuZE5vZGVJZCgm
bm9kZSk7CiAgICAgaWYgKCFub2RlSWQpCiAgICAgICAgIHJldHVybjsKIApAQCAtMjU2Niw3ICsy
NjQ1LDcgQEAgUmVmUHRyPEpTQzo6QnJlYWtwb2ludD4gSW5zcGVjdG9yRE9NQWdlbnQ6OmJyZWFr
cG9pbnRGb3JFdmVudExpc3RlbmVyKEV2ZW50VGFyZ2UKICAgICByZXR1cm4gbnVsbHB0cjsKIH0K
IAotaW50IEluc3BlY3RvckRPTUFnZW50OjppZEZvckV2ZW50TGlzdGVuZXIoRXZlbnRUYXJnZXQm
IHRhcmdldCwgY29uc3QgQXRvbVN0cmluZyYgZXZlbnRUeXBlLCBFdmVudExpc3RlbmVyJiBsaXN0
ZW5lciwgYm9vbCBjYXB0dXJlKQorUHJvdG9jb2w6OkRPTTo6RXZlbnRMaXN0ZW5lcklkIEluc3Bl
Y3RvckRPTUFnZW50OjppZEZvckV2ZW50TGlzdGVuZXIoRXZlbnRUYXJnZXQmIHRhcmdldCwgY29u
c3QgQXRvbVN0cmluZyYgZXZlbnRUeXBlLCBFdmVudExpc3RlbmVyJiBsaXN0ZW5lciwgYm9vbCBj
YXB0dXJlKQogewogICAgIGZvciAoYXV0byYgaW5zcGVjdG9yRXZlbnRMaXN0ZW5lciA6IG1fZXZl
bnRMaXN0ZW5lckVudHJpZXMudmFsdWVzKCkpIHsKICAgICAgICAgaWYgKGluc3BlY3RvckV2ZW50
TGlzdGVuZXIubWF0Y2hlcyh0YXJnZXQsIGV2ZW50VHlwZSwgbGlzdGVuZXIsIGNhcHR1cmUpKQpA
QCAtMjYwNCw4ICsyNjgzLDcgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6bWVkaWFNZXRyaWNz
VGltZXJGaXJlZCgpCiAgICAgICAgIGlmIChpdGVyYXRvci0+dmFsdWUuaXNQb3dlckVmZmljaWVu
dCAhPSBpc1Bvd2VyRWZmaWNpZW50KSB7CiAgICAgICAgICAgICBpdGVyYXRvci0+dmFsdWUuaXNQ
b3dlckVmZmljaWVudCA9IGlzUG93ZXJFZmZpY2llbnQ7CiAKLSAgICAgICAgICAgIGludCBub2Rl
SWQgPSBwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKG1lZGlhRWxlbWVudCk7Ci0gICAgICAgICAgICBp
ZiAobm9kZUlkKSB7CisgICAgICAgICAgICBpZiAoYXV0byBub2RlSWQgPSBwdXNoTm9kZVBhdGhU
b0Zyb250ZW5kKG1lZGlhRWxlbWVudCkpIHsKICAgICAgICAgICAgICAgICBhdXRvIHRpbWVzdGFt
cCA9IG1fZW52aXJvbm1lbnQuZXhlY3V0aW9uU3RvcHdhdGNoKCkuZWxhcHNlZFRpbWUoKS5zZWNv
bmRzKCk7CiAgICAgICAgICAgICAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPnBvd2VyRWZmaWNp
ZW50UGxheWJhY2tTdGF0ZUNoYW5nZWQobm9kZUlkLCB0aW1lc3RhbXAsIGl0ZXJhdG9yLT52YWx1
ZS5pc1Bvd2VyRWZmaWNpZW50KTsKICAgICAgICAgICAgIH0KQEAgLTI2NTksNyArMjczNyw3IEBA
IE5vZGUqIEluc3BlY3RvckRPTUFnZW50Ojpub2RlRm9yUGF0aChjb25zdCBTdHJpbmcmIHBhdGgp
CiAgICAgcmV0dXJuIG5vZGU7CiB9CiAKLU5vZGUqIEluc3BlY3RvckRPTUFnZW50Ojpub2RlRm9y
T2JqZWN0SWQoY29uc3QgU3RyaW5nJiBvYmplY3RJZCkKK05vZGUqIEluc3BlY3RvckRPTUFnZW50
Ojpub2RlRm9yT2JqZWN0SWQoY29uc3QgUHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdElk
JiBvYmplY3RJZCkKIHsKICAgICBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdCA9IG1faW5q
ZWN0ZWRTY3JpcHRNYW5hZ2VyLmluamVjdGVkU2NyaXB0Rm9yT2JqZWN0SWQob2JqZWN0SWQpOwog
ICAgIGlmIChpbmplY3RlZFNjcmlwdC5oYXNOb1ZhbHVlKCkpCkBAIC0yNjY4LDE1ICsyNzQ2LDIw
IEBAIE5vZGUqIEluc3BlY3RvckRPTUFnZW50Ojpub2RlRm9yT2JqZWN0SWQoY29uc3QgU3RyaW5n
JiBvYmplY3RJZCkKICAgICByZXR1cm4gc2NyaXB0VmFsdWVBc05vZGUoaW5qZWN0ZWRTY3JpcHQu
ZmluZE9iamVjdEJ5SWQob2JqZWN0SWQpKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6
cHVzaE5vZGVCeVBhdGhUb0Zyb250ZW5kKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3Qg
U3RyaW5nJiBwYXRoLCBpbnQqIG5vZGVJZCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPFByb3Rv
Y29sOjpET006Ok5vZGVJZD4gSW5zcGVjdG9yRE9NQWdlbnQ6OnB1c2hOb2RlQnlQYXRoVG9Gcm9u
dGVuZChjb25zdCBTdHJpbmcmIHBhdGgpCiB7Ci0gICAgaWYgKE5vZGUqIG5vZGUgPSBub2RlRm9y
UGF0aChwYXRoKSkKLSAgICAgICAgKm5vZGVJZCA9IHB1c2hOb2RlUGF0aFRvRnJvbnRlbmQoZXJy
b3JTdHJpbmcsIG5vZGUpOwotICAgIGVsc2UKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWlzc2lu
ZyBub2RlIGZvciBnaXZlbiBwYXRoIl9zOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJv
clN0cmluZzsKKworICAgIGlmIChOb2RlKiBub2RlID0gbm9kZUZvclBhdGgocGF0aCkpIHsKKyAg
ICAgICAgaWYgKGF1dG8gbm9kZUlkID0gcHVzaE5vZGVQYXRoVG9Gcm9udGVuZChlcnJvclN0cmlu
Zywgbm9kZSkpCisgICAgICAgICAgICByZXR1cm4gbm9kZUlkOworICAgICAgICByZXR1cm4gbWFr
ZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOworICAgIH0KKworICAgIHJldHVybiBtYWtlVW5leHBl
Y3RlZCgiTWlzc2luZyBub2RlIGZvciBnaXZlbiBwYXRoIl9zKTsKIH0KIAotUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4gSW5zcGVjdG9yRE9NQWdlbnQ6
OnJlc29sdmVOb2RlKE5vZGUqIG5vZGUsIGNvbnN0IFN0cmluZyYgb2JqZWN0R3JvdXApCitSZWZQ
dHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4gSW5zcGVjdG9yRE9NQWdlbnQ6OnJl
c29sdmVOb2RlKE5vZGUqIG5vZGUsIGNvbnN0IFN0cmluZyYgb2JqZWN0R3JvdXApCiB7CiAgICAg
RG9jdW1lbnQqIGRvY3VtZW50ID0gJm5vZGUtPmRvY3VtZW50KCk7CiAgICAgaWYgKGF1dG8qIHRl
bXBsYXRlSG9zdCA9IGRvY3VtZW50LT50ZW1wbGF0ZURvY3VtZW50SG9zdCgpKQpAQCAtMjcwNiw5
ICsyNzg5LDExIEBAIEpTQzo6SlNWYWx1ZSBJbnNwZWN0b3JET01BZ2VudDo6bm9kZUFzU2NyaXB0
VmFsdWUoSlNDOjpKU0dsb2JhbE9iamVjdCYgc3RhdGUsIE5vCiAgICAgcmV0dXJuIHRvSlMoJnN0
YXRlLCBkZXByZWNhdGVkR2xvYmFsT2JqZWN0Rm9yUHJvdG90eXBlKCZzdGF0ZSksIEJpbmRpbmdT
ZWN1cml0eTo6Y2hlY2tTZWN1cml0eUZvck5vZGUoc3RhdGUsIG5vZGUpKTsKIH0KIAotdm9pZCBJ
bnNwZWN0b3JET01BZ2VudDo6c2V0QWxsb3dFZGl0aW5nVXNlckFnZW50U2hhZG93VHJlZXMoRXJy
b3JTdHJpbmcmLCBib29sIGFsbG93KQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5z
cGVjdG9yRE9NQWdlbnQ6OnNldEFsbG93RWRpdGluZ1VzZXJBZ2VudFNoYWRvd1RyZWVzKGJvb2wg
YWxsb3cpCiB7CiAgICAgbV9hbGxvd0VkaXRpbmdVc2VyQWdlbnRTaGFkb3dUcmVlcyA9IGFsbG93
OworCisgICAgcmV0dXJuIHsgfTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01BZ2VudC5o
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01BZ2VudC5oCmlu
ZGV4IDNlMzc3MDdhZmVjZjc4ZjQyMThhYTgzMDFlMWVhMmQ0MWM3MjUxNzIuLjdmMjg3MmRmNDll
MGQ0MGFiMDIwY2Q5ODg0ZGVkMDAzMDhmMWEyYTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmgKQEAgLTc2LDE0ICs3NiwxMiBA
QCBjbGFzcyBTaGFkb3dSb290OwogCiBzdHJ1Y3QgSGlnaGxpZ2h0Q29uZmlnOwogCi10eXBlZGVm
IFN0cmluZyBFcnJvclN0cmluZzsKLQogY2xhc3MgSW5zcGVjdG9yRE9NQWdlbnQgZmluYWwgOiBw
dWJsaWMgSW5zcGVjdG9yQWdlbnRCYXNlLCBwdWJsaWMgSW5zcGVjdG9yOjpET01CYWNrZW5kRGlz
cGF0Y2hlckhhbmRsZXIgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEluc3BlY3RvckRPTUFn
ZW50KTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBJbnNwZWN0
b3JET01BZ2VudChQYWdlQWdlbnRDb250ZXh0JiwgSW5zcGVjdG9yT3ZlcmxheSopOwotICAgIH5J
bnNwZWN0b3JET01BZ2VudCgpIG92ZXJyaWRlOworICAgIH5JbnNwZWN0b3JET01BZ2VudCgpOwog
CiAgICAgc3RhdGljIFN0cmluZyB0b0Vycm9yU3RyaW5nKEV4Y2VwdGlvbkNvZGUpOwogICAgIHN0
YXRpYyBTdHJpbmcgdG9FcnJvclN0cmluZyhFeGNlcHRpb24mJik7CkBAIC0xMDIsNjIgKzEwMCw2
MiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBub2RlQXNTY3JpcHRWYWx1ZShK
U0M6OkpTR2xvYmFsT2JqZWN0JiwgTm9kZSopOwogCiAgICAgLy8gSW5zcGVjdG9yQWdlbnRCYXNl
Ci0gICAgdm9pZCBkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9udGVu
ZFJvdXRlciosIEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXIqKSBvdmVycmlkZTsKLSAgICB2
b2lkIHdpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlzY29ubmVjdFJl
YXNvbikgb3ZlcnJpZGU7CisgICAgdm9pZCBkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5z
cGVjdG9yOjpGcm9udGVuZFJvdXRlciosIEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXIqKTsK
KyAgICB2b2lkIHdpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlzY29u
bmVjdFJlYXNvbik7CiAKICAgICAvLyBET01CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIKLSAgICB2
b2lkIHF1ZXJ5U2VsZWN0b3IoRXJyb3JTdHJpbmcmLCBpbnQgbm9kZUlkLCBjb25zdCBTdHJpbmcm
IHNlbGVjdG9ycywgaW50KiBlbGVtZW50SWQpIG92ZXJyaWRlOwotICAgIHZvaWQgcXVlcnlTZWxl
Y3RvckFsbChFcnJvclN0cmluZyYsIGludCBub2RlSWQsIGNvbnN0IFN0cmluZyYgc2VsZWN0b3Jz
LCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxpbnQ+PiYgcmVzdWx0KSBvdmVycmlkZTsKLSAgICB2b2lk
IGdldERvY3VtZW50KEVycm9yU3RyaW5nJiwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRP
TTo6Tm9kZT4mIHJvb3QpIG92ZXJyaWRlOwotICAgIHZvaWQgcmVxdWVzdENoaWxkTm9kZXMoRXJy
b3JTdHJpbmcmLCBpbnQgbm9kZUlkLCBjb25zdCBpbnQqIGRlcHRoKSBvdmVycmlkZTsKLSAgICB2
b2lkIHNldEF0dHJpYnV0ZVZhbHVlKEVycm9yU3RyaW5nJiwgaW50IGVsZW1lbnRJZCwgY29uc3Qg
U3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKSBvdmVycmlkZTsKLSAgICB2b2lkIHNl
dEF0dHJpYnV0ZXNBc1RleHQoRXJyb3JTdHJpbmcmLCBpbnQgZWxlbWVudElkLCBjb25zdCBTdHJp
bmcmIHRleHQsIGNvbnN0IFN0cmluZyogbmFtZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZW1vdmVB
dHRyaWJ1dGUoRXJyb3JTdHJpbmcmLCBpbnQgZWxlbWVudElkLCBjb25zdCBTdHJpbmcmIG5hbWUp
IG92ZXJyaWRlOwotICAgIHZvaWQgcmVtb3ZlTm9kZShFcnJvclN0cmluZyYsIGludCBub2RlSWQp
IG92ZXJyaWRlOwotICAgIHZvaWQgc2V0Tm9kZU5hbWUoRXJyb3JTdHJpbmcmLCBpbnQgbm9kZUlk
LCBjb25zdCBTdHJpbmcmIG5hbWUsIGludCogbmV3SWQpIG92ZXJyaWRlOwotICAgIHZvaWQgZ2V0
T3V0ZXJIVE1MKEVycm9yU3RyaW5nJiwgaW50IG5vZGVJZCwgV1RGOjpTdHJpbmcqIG91dGVySFRN
TCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRPdXRlckhUTUwoRXJyb3JTdHJpbmcmLCBpbnQgbm9k
ZUlkLCBjb25zdCBTdHJpbmcmIG91dGVySFRNTCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBpbnNlcnRB
ZGphY2VudEhUTUwoRXJyb3JTdHJpbmcmLCBpbnQgbm9kZUlkLCBjb25zdCBTdHJpbmcmIHBvc2l0
aW9uLCBjb25zdCBTdHJpbmcmIGh0bWwpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0Tm9kZVZhbHVl
KEVycm9yU3RyaW5nJiwgaW50IG5vZGVJZCwgY29uc3QgU3RyaW5nJiB2YWx1ZSkgb3ZlcnJpZGU7
Ci0gICAgdm9pZCBnZXRTdXBwb3J0ZWRFdmVudE5hbWVzKEVycm9yU3RyaW5nJiwgUmVmUHRyPEpT
T046OkFycmF5T2Y8U3RyaW5nPj4mIGV2ZW50TmFtZXMpIG92ZXJyaWRlOworICAgIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2Rl
SWQ+IHF1ZXJ5U2VsZWN0b3IoSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQsIGNvbnN0
IFN0cmluZyYgc2VsZWN0b3IpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5n
T3I8UmVmPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQ+Pj4g
cXVlcnlTZWxlY3RvckFsbChJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZCwgY29uc3Qg
U3RyaW5nJiBzZWxlY3Rvcik7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdP
cjxSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlPj4gZ2V0RG9jdW1lbnQoKTsKKyAg
ICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHJlcXVlc3RDaGlsZE5v
ZGVzKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkLCBPcHRpb25hbDxpbnQ+JiYgZGVw
dGgpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc2V0QXR0
cmlidXRlVmFsdWUoSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQsIGNvbnN0IFN0cmlu
ZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6
RXJyb3JTdHJpbmdPcjx2b2lkPiBzZXRBdHRyaWJ1dGVzQXNUZXh0KEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRPTTo6Tm9kZUlkLCBjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFN0cmluZyYgbmFtZSk7
CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiByZW1vdmVBdHRy
aWJ1dGUoSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQsIGNvbnN0IFN0cmluZyYgbmFt
ZSk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiByZW1vdmVO
b2RlKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkKTsKKyAgICBJbnNwZWN0b3I6OlBy
b3RvY29sOjpFcnJvclN0cmluZ09yPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkPiBz
ZXROb2RlTmFtZShJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZCwgY29uc3QgU3RyaW5n
Jik7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxTdHJpbmc+IGdldE91
dGVySFRNTChJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZCk7CisgICAgSW5zcGVjdG9y
OjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzZXRPdXRlckhUTUwoSW5zcGVjdG9yOjpQ
cm90b2NvbDo6RE9NOjpOb2RlSWQsIGNvbnN0IFN0cmluZyYpOworICAgIEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gaW5zZXJ0QWRqYWNlbnRIVE1MKEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRPTTo6Tm9kZUlkLCBjb25zdCBTdHJpbmcmIHBvc2l0aW9uLCBjb25zdCBTdHJp
bmcmIGh0bWwpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4g
c2V0Tm9kZVZhbHVlKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkLCBjb25zdCBTdHJp
bmcmKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpB
cnJheU9mPFN0cmluZz4+PiBnZXRTdXBwb3J0ZWRFdmVudE5hbWVzKCk7CiAjaWYgRU5BQkxFKElO
U1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0gICAgdm9pZCBnZXREYXRhQmluZGluZ3NG
b3JOb2RlKEVycm9yU3RyaW5nJiwgaW50IG5vZGVJZCwgUmVmUHRyPEpTT046OkFycmF5T2Y8SW5z
cGVjdG9yOjpQcm90b2NvbDo6RE9NOjpEYXRhQmluZGluZz4+JiBkYXRhQXJyYXkpIG92ZXJyaWRl
OwotICAgIHZvaWQgZ2V0QXNzb2NpYXRlZERhdGFGb3JOb2RlKEVycm9yU3RyaW5nJiwgaW50IG5v
ZGVJZCwgT3B0aW9uYWw8U3RyaW5nPiYgYXNzb2NpYXRlZERhdGEpIG92ZXJyaWRlOworICAgIElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEpTT046OkFycmF5T2Y8SW5zcGVj
dG9yOjpQcm90b2NvbDo6RE9NOjpEYXRhQmluZGluZz4+PiBnZXREYXRhQmluZGluZ3NGb3JOb2Rl
KEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkKTsKKyAgICBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpFcnJvclN0cmluZ09yPFN0cmluZz4gZ2V0QXNzb2NpYXRlZERhdGFGb3JOb2RlKEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkKTsKICNlbmRpZgotICAgIHZvaWQgZ2V0RXZlbnRM
aXN0ZW5lcnNGb3JOb2RlKEVycm9yU3RyaW5nJiwgaW50IG5vZGVJZCwgUmVmUHRyPEpTT046OkFy
cmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpFdmVudExpc3RlbmVyPj4mIGxpc3RlbmVy
c0FycmF5KSBvdmVycmlkZTsKLSAgICB2b2lkIHNldEV2ZW50TGlzdGVuZXJEaXNhYmxlZChFcnJv
clN0cmluZyYsIGludCBldmVudExpc3RlbmVySWQsIGJvb2wgZGlzYWJsZWQpIG92ZXJyaWRlOwot
ICAgIHZvaWQgc2V0QnJlYWtwb2ludEZvckV2ZW50TGlzdGVuZXIoRXJyb3JTdHJpbmcmLCBpbnQg
ZXZlbnRMaXN0ZW5lcklkLCBjb25zdCBKU09OOjpPYmplY3QqIG9wdGlvbnMpIGZpbmFsOwotICAg
IHZvaWQgcmVtb3ZlQnJlYWtwb2ludEZvckV2ZW50TGlzdGVuZXIoRXJyb3JTdHJpbmcmLCBpbnQg
ZXZlbnRMaXN0ZW5lcklkKSBvdmVycmlkZTsKLSAgICB2b2lkIGdldEFjY2Vzc2liaWxpdHlQcm9w
ZXJ0aWVzRm9yTm9kZShFcnJvclN0cmluZyYsIGludCBub2RlSWQsIFJlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzPiYgYXhQcm9wZXJ0aWVzKSBv
dmVycmlkZTsKLSAgICB2b2lkIHBlcmZvcm1TZWFyY2goRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJp
bmcmIHF1ZXJ5LCBjb25zdCBKU09OOjpBcnJheSogbm9kZUlkcywgY29uc3QgYm9vbCogY2FzZVNl
bnNpdGl2ZSwgU3RyaW5nKiBzZWFyY2hJZCwgaW50KiByZXN1bHRDb3VudCkgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCBnZXRTZWFyY2hSZXN1bHRzKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBzZWFy
Y2hJZCwgaW50IGZyb21JbmRleCwgaW50IHRvSW5kZXgsIFJlZlB0cjxKU09OOjpBcnJheU9mPGlu
dD4+Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkaXNjYXJkU2VhcmNoUmVzdWx0cyhFcnJvclN0cmlu
ZyYsIGNvbnN0IFN0cmluZyYgc2VhcmNoSWQpIG92ZXJyaWRlOwotICAgIHZvaWQgcmVzb2x2ZU5v
ZGUoRXJyb3JTdHJpbmcmLCBpbnQgbm9kZUlkLCBjb25zdCBTdHJpbmcqIG9iamVjdEdyb3VwLCBS
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0
KSBvdmVycmlkZTsKLSAgICB2b2lkIGdldEF0dHJpYnV0ZXMoRXJyb3JTdHJpbmcmLCBpbnQgbm9k
ZUlkLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiYgcmVzdWx0KSBvdmVycmlkZTsKKyAg
ICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6RXZlbnRMaXN0ZW5lcj4+PiBnZXRFdmVudExpc3RlbmVy
c0Zvck5vZGUoSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQpOworICAgIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc2V0RXZlbnRMaXN0ZW5lckRpc2FibGVk
KEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6RXZlbnRMaXN0ZW5lcklkLCBib29sKTsKKyAgICBJ
bnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHNldEJyZWFrcG9pbnRGb3JF
dmVudExpc3RlbmVyKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6RXZlbnRMaXN0ZW5lcklkLCBS
ZWZQdHI8SlNPTjo6T2JqZWN0PiYmIG9wdGlvbnMpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8dm9pZD4gcmVtb3ZlQnJlYWtwb2ludEZvckV2ZW50TGlzdGVuZXIoSW5z
cGVjdG9yOjpQcm90b2NvbDo6RE9NOjpFdmVudExpc3RlbmVySWQpOworICAgIEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6QWNj
ZXNzaWJpbGl0eVByb3BlcnRpZXM+PiBnZXRBY2Nlc3NpYmlsaXR5UHJvcGVydGllc0Zvck5vZGUo
SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQpOworICAgIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkVycm9yU3RyaW5nT3I8c3RkOjp0dXBsZTxTdHJpbmcgLyogc2VhcmNoSWQgKi8sIGludCAv
KiByZXN1bHRDb3VudCAqLz4+IHBlcmZvcm1TZWFyY2goY29uc3QgU3RyaW5nJiBxdWVyeSwgUmVm
UHRyPEpTT046OkFycmF5PiYmIG5vZGVJZHMsIE9wdGlvbmFsPGJvb2w+JiYgY2FzZVNlbnNpdGl2
ZSk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SlNPTjo6QXJy
YXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZD4+PiBnZXRTZWFyY2hSZXN1bHRz
KGNvbnN0IFN0cmluZyYgc2VhcmNoSWQsIGludCBmcm9tSW5kZXgsIGludCB0b0luZGV4KTsKKyAg
ICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGRpc2NhcmRTZWFyY2hS
ZXN1bHRzKGNvbnN0IFN0cmluZyYgc2VhcmNoSWQpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8UmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9i
amVjdD4+IHJlc29sdmVOb2RlKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkLCBjb25z
dCBTdHJpbmcmIG9iamVjdEdyb3VwKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0
cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPFN0cmluZz4+PiBnZXRBdHRyaWJ1dGVzKEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkKTsKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAg
IHZvaWQgc2V0SW5zcGVjdE1vZGVFbmFibGVkKEVycm9yU3RyaW5nJiwgYm9vbCBlbmFibGVkLCBj
b25zdCBKU09OOjpPYmplY3QqIGhpZ2hsaWdodENvbmZpZykgb3ZlcnJpZGU7CisgICAgSW5zcGVj
dG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzZXRJbnNwZWN0TW9kZUVuYWJsZWQo
Ym9vbCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBoaWdobGlnaHRDb25maWcpOwogI2Vsc2UKLSAg
ICB2b2lkIHNldEluc3BlY3RNb2RlRW5hYmxlZChFcnJvclN0cmluZyYsIGJvb2wgZW5hYmxlZCwg
Y29uc3QgSlNPTjo6T2JqZWN0KiBoaWdobGlnaHRDb25maWcsIGNvbnN0IGJvb2wqIHNob3dSdWxl
cnMpIG92ZXJyaWRlOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9p
ZD4gc2V0SW5zcGVjdE1vZGVFbmFibGVkKGJvb2wsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgaGln
aGxpZ2h0Q29uZmlnLCBPcHRpb25hbDxib29sPiYmIHNob3dSdWxlcnMpOwogI2VuZGlmCi0gICAg
dm9pZCByZXF1ZXN0Tm9kZShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgb2JqZWN0SWQsIGlu
dCogbm9kZUlkKSBvdmVycmlkZTsKLSAgICB2b2lkIHB1c2hOb2RlQnlQYXRoVG9Gcm9udGVuZChF
cnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgcGF0aCwgaW50KiBub2RlSWQpIG92ZXJyaWRlOwot
ICAgIHZvaWQgaGlkZUhpZ2hsaWdodChFcnJvclN0cmluZyYpIG92ZXJyaWRlOwotICAgIHZvaWQg
aGlnaGxpZ2h0UmVjdChFcnJvclN0cmluZyYsIGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQg
aGVpZ2h0LCBjb25zdCBKU09OOjpPYmplY3QqIGNvbG9yLCBjb25zdCBKU09OOjpPYmplY3QqIG91
dGxpbmVDb2xvciwgY29uc3QgYm9vbCogdXNlUGFnZUNvb3JkaW5hdGVzKSBvdmVycmlkZTsKLSAg
ICB2b2lkIGhpZ2hsaWdodFF1YWQoRXJyb3JTdHJpbmcmLCBjb25zdCBKU09OOjpBcnJheSYgcXVh
ZCwgY29uc3QgSlNPTjo6T2JqZWN0KiBjb2xvciwgY29uc3QgSlNPTjo6T2JqZWN0KiBvdXRsaW5l
Q29sb3IsIGNvbnN0IGJvb2wqIHVzZVBhZ2VDb29yZGluYXRlcykgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBoaWdobGlnaHRTZWxlY3RvcihFcnJvclN0cmluZyYsIGNvbnN0IEpTT046Ok9iamVjdCYgaGln
aGxpZ2h0Q29uZmlnLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yU3RyaW5nLCBjb25zdCBTdHJpbmcq
IGZyYW1lSWQpIG92ZXJyaWRlOwotICAgIHZvaWQgaGlnaGxpZ2h0Tm9kZShFcnJvclN0cmluZyYs
IGNvbnN0IEpTT046Ok9iamVjdCYgaGlnaGxpZ2h0Q29uZmlnLCBjb25zdCBpbnQqIG5vZGVJZCwg
Y29uc3QgU3RyaW5nKiBvYmplY3RJZCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBoaWdobGlnaHROb2Rl
TGlzdChFcnJvclN0cmluZyYsIGNvbnN0IEpTT046OkFycmF5JiBub2RlSWRzLCBjb25zdCBKU09O
OjpPYmplY3QmIGhpZ2hsaWdodENvbmZpZykgb3ZlcnJpZGU7Ci0gICAgdm9pZCBoaWdobGlnaHRG
cmFtZShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgZnJhbWVJZCwgY29uc3QgSlNPTjo6T2Jq
ZWN0KiBjb2xvciwgY29uc3QgSlNPTjo6T2JqZWN0KiBvdXRsaW5lQ29sb3IpIG92ZXJyaWRlOwot
ICAgIHZvaWQgbW92ZVRvKEVycm9yU3RyaW5nJiwgaW50IG5vZGVJZCwgaW50IHRhcmdldE5vZGVJ
ZCwgY29uc3QgaW50KiBhbmNob3JOb2RlSWQsIGludCogbmV3Tm9kZUlkKSBvdmVycmlkZTsKLSAg
ICB2b2lkIHVuZG8oRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2b2lkIHJlZG8oRXJyb3JT
dHJpbmcmKSBvdmVycmlkZTsKLSAgICB2b2lkIG1hcmtVbmRvYWJsZVN0YXRlKEVycm9yU3RyaW5n
Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBmb2N1cyhFcnJvclN0cmluZyYsIGludCBub2RlSWQpIG92
ZXJyaWRlOwotICAgIHZvaWQgc2V0SW5zcGVjdGVkTm9kZShFcnJvclN0cmluZyYsIGludCBub2Rl
SWQpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0QWxsb3dFZGl0aW5nVXNlckFnZW50U2hhZG93VHJl
ZXMoRXJyb3JTdHJpbmcmLCBib29sIGFsbG93KSBmaW5hbDsKKyAgICBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpFcnJvclN0cmluZ09yPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkPiByZXF1
ZXN0Tm9kZShjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3RJ
ZCYpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6RE9NOjpOb2RlSWQ+IHB1c2hOb2RlQnlQYXRoVG9Gcm9udGVuZChjb25zdCBTdHJp
bmcmIHBhdGgpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4g
aGlkZUhpZ2hsaWdodCgpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8
dm9pZD4gaGlnaGxpZ2h0UmVjdChpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCwg
UmVmUHRyPEpTT046Ok9iamVjdD4mJiBjb2xvciwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBvdXRs
aW5lQ29sb3IsIE9wdGlvbmFsPGJvb2w+JiYgdXNlUGFnZUNvb3JkaW5hdGVzKTsKKyAgICBJbnNw
ZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGhpZ2hsaWdodFF1YWQoUmVmPEpT
T046OkFycmF5PiYmIHF1YWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgY29sb3IsIFJlZlB0cjxK
U09OOjpPYmplY3Q+JiYgb3V0bGluZUNvbG9yLCBPcHRpb25hbDxib29sPiYmIHVzZVBhZ2VDb29y
ZGluYXRlcyk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBo
aWdobGlnaHRTZWxlY3RvcihSZWY8SlNPTjo6T2JqZWN0PiYmIGhpZ2hsaWdodENvbmZpZywgY29u
c3QgU3RyaW5nJiBzZWxlY3RvclN0cmluZywgY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0
d29yazo6RnJhbWVJZCYpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8
dm9pZD4gaGlnaGxpZ2h0Tm9kZShSZWY8SlNPTjo6T2JqZWN0PiYmIGhpZ2hsaWdodENvbmZpZywg
T3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQ+JiYsIGNvbnN0IEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdElkJik7CisgICAgSW5zcGVjdG9y
OjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBoaWdobGlnaHROb2RlTGlzdChSZWY8SlNP
Tjo6QXJyYXk+JiYgbm9kZUlkcywgUmVmPEpTT046Ok9iamVjdD4mJiBoaWdobGlnaHRDb25maWcp
OworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gaGlnaGxpZ2h0
RnJhbWUoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6RnJhbWVJZCYsIFJlZlB0
cjxKU09OOjpPYmplY3Q+JiYgY29sb3IsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgb3V0bGluZUNv
bG9yKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRPTTo6Tm9kZUlkPiBtb3ZlVG8oSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpO
b2RlSWQgbm9kZUlkLCBJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZCB0YXJnZXROb2Rl
SWQsIE9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkPiYmIGluc2VydEJl
Zm9yZU5vZGVJZCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lk
PiB1bmRvKCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBy
ZWRvKCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBtYXJr
VW5kb2FibGVTdGF0ZSgpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8
dm9pZD4gZm9jdXMoSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQpOworICAgIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc2V0SW5zcGVjdGVkTm9kZShJbnNw
ZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6
RXJyb3JTdHJpbmdPcjx2b2lkPiBzZXRBbGxvd0VkaXRpbmdVc2VyQWdlbnRTaGFkb3dUcmVlcyhi
b29sKTsKIAogICAgIC8vIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbgotICAgIGludCBpZGVudGlm
aWVyRm9yTm9kZShOb2RlJik7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQg
aWRlbnRpZmllckZvck5vZGUoTm9kZSYpOwogICAgIHZvaWQgYWRkRXZlbnRMaXN0ZW5lcnNUb05v
ZGUoTm9kZSYpOwogICAgIHZvaWQgZGlkSW5zZXJ0RE9NTm9kZShOb2RlJik7CiAgICAgdm9pZCBk
aWRSZW1vdmVET01Ob2RlKE5vZGUmKTsKQEAgLTE4NSwxMiArMTgzLDEyIEBAIHB1YmxpYzoKIAog
ICAgIHZvaWQgc3R5bGVBdHRyaWJ1dGVJbnZhbGlkYXRlZChjb25zdCBWZWN0b3I8RWxlbWVudCo+
JiBlbGVtZW50cyk7CiAKLSAgICBpbnQgcHVzaE5vZGVUb0Zyb250ZW5kKE5vZGUqKTsKLSAgICBp
bnQgcHVzaE5vZGVUb0Zyb250ZW5kKEVycm9yU3RyaW5nJiwgaW50IGRvY3VtZW50Tm9kZUlkLCBO
b2RlKik7Ci0gICAgaW50IHB1c2hOb2RlUGF0aFRvRnJvbnRlbmQoTm9kZSopOwotICAgIGludCBw
dXNoTm9kZVBhdGhUb0Zyb250ZW5kKEVycm9yU3RyaW5nLCBOb2RlKik7Ci0gICAgTm9kZSogbm9k
ZUZvcklkKGludCBub2RlSWQpOwotICAgIGludCBib3VuZE5vZGVJZChjb25zdCBOb2RlKik7Cisg
ICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQgcHVzaE5vZGVUb0Zyb250ZW5kKE5v
ZGUqKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZCBwdXNoTm9kZVRvRnJv
bnRlbmQoSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpET006Ok5vZGVJZCBkb2N1bWVudE5vZGVJZCwgTm9kZSopOworICAgIEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRPTTo6Tm9kZUlkIHB1c2hOb2RlUGF0aFRvRnJvbnRlbmQoTm9kZSopOworICAg
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkIHB1c2hOb2RlUGF0aFRvRnJvbnRlbmQo
SW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmcsIE5vZGUqKTsKKyAgICBOb2RlKiBub2Rl
Rm9ySWQoSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQpOworICAgIEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRPTTo6Tm9kZUlkIGJvdW5kTm9kZUlkKGNvbnN0IE5vZGUqKTsKIAogICAgIFJl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+IHJlc29sdmVO
b2RlKE5vZGUqLCBjb25zdCBTdHJpbmcmIG9iamVjdEdyb3VwKTsKICAgICBib29sIGhhbmRsZU1v
dXNlUHJlc3MoKTsKQEAgLTIwMiwxMiArMjAwLDEyIEBAIHB1YmxpYzoKICAgICBWZWN0b3I8RG9j
dW1lbnQqPiBkb2N1bWVudHMoKTsKICAgICB2b2lkIHJlc2V0KCk7CiAKLSAgICBOb2RlKiBhc3Nl
cnROb2RlKEVycm9yU3RyaW5nJiwgaW50IG5vZGVJZCk7Ci0gICAgRWxlbWVudCogYXNzZXJ0RWxl
bWVudChFcnJvclN0cmluZyYsIGludCBub2RlSWQpOwotICAgIERvY3VtZW50KiBhc3NlcnREb2N1
bWVudChFcnJvclN0cmluZyYsIGludCBub2RlSWQpOworICAgIE5vZGUqIGFzc2VydE5vZGUoSW5z
cGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBJbnNwZWN0b3I6OlByb3RvY29sOjpET006
Ok5vZGVJZCk7CisgICAgRWxlbWVudCogYXNzZXJ0RWxlbWVudChJbnNwZWN0b3I6OlByb3RvY29s
OjpFcnJvclN0cmluZyYsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkKTsKKyAgICBE
b2N1bWVudCogYXNzZXJ0RG9jdW1lbnQoSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmcm
LCBJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZCk7CiAKICAgICBSZWZQdHI8SlNDOjpC
cmVha3BvaW50PiBicmVha3BvaW50Rm9yRXZlbnRMaXN0ZW5lcihFdmVudFRhcmdldCYsIGNvbnN0
IEF0b21TdHJpbmcmIGV2ZW50VHlwZSwgRXZlbnRMaXN0ZW5lciYsIGJvb2wgY2FwdHVyZSk7Ci0g
ICAgaW50IGlkRm9yRXZlbnRMaXN0ZW5lcihFdmVudFRhcmdldCYsIGNvbnN0IEF0b21TdHJpbmcm
IGV2ZW50VHlwZSwgRXZlbnRMaXN0ZW5lciYsIGJvb2wgY2FwdHVyZSk7CisgICAgSW5zcGVjdG9y
OjpQcm90b2NvbDo6RE9NOjpFdmVudExpc3RlbmVySWQgaWRGb3JFdmVudExpc3RlbmVyKEV2ZW50
VGFyZ2V0JiwgY29uc3QgQXRvbVN0cmluZyYgZXZlbnRUeXBlLCBFdmVudExpc3RlbmVyJiwgYm9v
bCBjYXB0dXJlKTsKIAogcHJpdmF0ZToKICNpZiBFTkFCTEUoVklERU8pCkBAIC0yMTUsMzMgKzIx
MywzMyBAQCBwcml2YXRlOgogI2VuZGlmCiAKICAgICB2b2lkIGhpZ2hsaWdodE1vdXNlZE92ZXJO
b2RlKCk7Ci0gICAgdm9pZCBzZXRTZWFyY2hpbmdGb3JOb2RlKEVycm9yU3RyaW5nJiwgYm9vbCBl
bmFibGVkLCBjb25zdCBKU09OOjpPYmplY3QqIGhpZ2hsaWdodENvbmZpZywgYm9vbCBzaG93UnVs
ZXJzKTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SGlnaGxpZ2h0Q29uZmlnPiBoaWdobGlnaHRDb25m
aWdGcm9tSW5zcGVjdG9yT2JqZWN0KEVycm9yU3RyaW5nJiwgY29uc3QgSlNPTjo6T2JqZWN0KiBo
aWdobGlnaHRJbnNwZWN0b3JPYmplY3QpOworICAgIHZvaWQgc2V0U2VhcmNoaW5nRm9yTm9kZShJ
bnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZyYsIGJvb2wgZW5hYmxlZCwgUmVmUHRyPEpT
T046Ok9iamVjdD4mJiBoaWdobGlnaHRDb25maWcsIGJvb2wgc2hvd1J1bGVycyk7CisgICAgc3Rk
Ojp1bmlxdWVfcHRyPEhpZ2hsaWdodENvbmZpZz4gaGlnaGxpZ2h0Q29uZmlnRnJvbUluc3BlY3Rv
ck9iamVjdChJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZyYsIFJlZlB0cjxKU09OOjpP
YmplY3Q+JiYgaGlnaGxpZ2h0SW5zcGVjdG9yT2JqZWN0KTsKIAogICAgIC8vIE5vZGUtcmVsYXRl
ZCBtZXRob2RzLgotICAgIHR5cGVkZWYgSGFzaE1hcDxSZWZQdHI8Tm9kZT4sIGludD4gTm9kZVRv
SWRNYXA7Ci0gICAgaW50IGJpbmQoTm9kZSosIE5vZGVUb0lkTWFwKik7CisgICAgdHlwZWRlZiBI
YXNoTWFwPFJlZlB0cjxOb2RlPiwgSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQ+IE5v
ZGVUb0lkTWFwOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkIGJpbmQoTm9k
ZSosIE5vZGVUb0lkTWFwKik7CiAgICAgdm9pZCB1bmJpbmQoTm9kZSosIE5vZGVUb0lkTWFwKik7
CiAKLSAgICBOb2RlKiBhc3NlcnRFZGl0YWJsZU5vZGUoRXJyb3JTdHJpbmcmLCBpbnQgbm9kZUlk
KTsKLSAgICBFbGVtZW50KiBhc3NlcnRFZGl0YWJsZUVsZW1lbnQoRXJyb3JTdHJpbmcmLCBpbnQg
bm9kZUlkKTsKKyAgICBOb2RlKiBhc3NlcnRFZGl0YWJsZU5vZGUoSW5zcGVjdG9yOjpQcm90b2Nv
bDo6RXJyb3JTdHJpbmcmLCBJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZCk7CisgICAg
RWxlbWVudCogYXNzZXJ0RWRpdGFibGVFbGVtZW50KEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9y
U3RyaW5nJiwgSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQpOwogCi0gICAgdm9pZCBw
dXNoQ2hpbGROb2Rlc1RvRnJvbnRlbmQoaW50IG5vZGVJZCwgaW50IGRlcHRoID0gMSk7CisgICAg
dm9pZCBwdXNoQ2hpbGROb2Rlc1RvRnJvbnRlbmQoSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpO
b2RlSWQsIGludCBkZXB0aCA9IDEpOwogCiAgICAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRP
TTo6Tm9kZT4gYnVpbGRPYmplY3RGb3JOb2RlKE5vZGUqLCBpbnQgZGVwdGgsIE5vZGVUb0lkTWFw
Kik7CiAgICAgUmVmPEpTT046OkFycmF5T2Y8U3RyaW5nPj4gYnVpbGRBcnJheUZvckVsZW1lbnRB
dHRyaWJ1dGVzKEVsZW1lbnQqKTsKICAgICBSZWY8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpET006Ok5vZGU+PiBidWlsZEFycmF5Rm9yQ29udGFpbmVyQ2hpbGRyZW4oTm9kZSog
Y29udGFpbmVyLCBpbnQgZGVwdGgsIE5vZGVUb0lkTWFwKiBub2Rlc01hcCk7CiAgICAgUmVmUHRy
PEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlPj4gYnVpbGRBcnJh
eUZvclBzZXVkb0VsZW1lbnRzKGNvbnN0IEVsZW1lbnQmLCBOb2RlVG9JZE1hcCogbm9kZXNNYXAp
OwotICAgIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkV2ZW50TGlzdGVuZXI+IGJ1aWxk
T2JqZWN0Rm9yRXZlbnRMaXN0ZW5lcihjb25zdCBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lciYsIGlu
dCBpZGVudGlmaWVyLCBFdmVudFRhcmdldCYsIGNvbnN0IEF0b21TdHJpbmcmIGV2ZW50VHlwZSwg
Ym9vbCBkaXNhYmxlZCwgY29uc3QgUmVmUHRyPEpTQzo6QnJlYWtwb2ludD4mKTsKLSAgICBSZWZQ
dHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllcz4gYnVp
bGRPYmplY3RGb3JBY2Nlc3NpYmlsaXR5UHJvcGVydGllcyhOb2RlKik7Ci0gICAgdm9pZCBwcm9j
ZXNzQWNjZXNzaWJpbGl0eUNoaWxkcmVuKEFYQ29yZU9iamVjdCYsIEpTT046OkFycmF5T2Y8aW50
PiYpOworICAgIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkV2ZW50TGlzdGVuZXI+IGJ1
aWxkT2JqZWN0Rm9yRXZlbnRMaXN0ZW5lcihjb25zdCBSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lciYs
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6RXZlbnRMaXN0ZW5lcklkIGlkZW50aWZpZXIsIEV2
ZW50VGFyZ2V0JiwgY29uc3QgQXRvbVN0cmluZyYgZXZlbnRUeXBlLCBib29sIGRpc2FibGVkLCBj
b25zdCBSZWZQdHI8SlNDOjpCcmVha3BvaW50PiYpOworICAgIFJlZjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzPiBidWlsZE9iamVjdEZvckFjY2Vzc2li
aWxpdHlQcm9wZXJ0aWVzKE5vZGUmKTsKKyAgICB2b2lkIHByb2Nlc3NBY2Nlc3NpYmlsaXR5Q2hp
bGRyZW4oQVhDb3JlT2JqZWN0JiwgSlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpE
T006Ok5vZGVJZD4mKTsKICAgICAKICAgICBOb2RlKiBub2RlRm9yUGF0aChjb25zdCBTdHJpbmcm
IHBhdGgpOwotICAgIE5vZGUqIG5vZGVGb3JPYmplY3RJZChjb25zdCBTdHJpbmcmIG9iamVjdElk
KTsKKyAgICBOb2RlKiBub2RlRm9yT2JqZWN0SWQoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6
UnVudGltZTo6UmVtb3RlT2JqZWN0SWQmKTsKIAogICAgIHZvaWQgZGlzY2FyZEJpbmRpbmdzKCk7
CiAKLSAgICB2b2lkIGlubmVySGlnaGxpZ2h0UXVhZChzdGQ6OnVuaXF1ZV9wdHI8RmxvYXRRdWFk
PiwgY29uc3QgSlNPTjo6T2JqZWN0KiBjb2xvciwgY29uc3QgSlNPTjo6T2JqZWN0KiBvdXRsaW5l
Q29sb3IsIGNvbnN0IGJvb2wqIHVzZVBhZ2VDb29yZGluYXRlcyk7CisgICAgdm9pZCBpbm5lckhp
Z2hsaWdodFF1YWQoc3RkOjp1bmlxdWVfcHRyPEZsb2F0UXVhZD4sIFJlZlB0cjxKU09OOjpPYmpl
Y3Q+JiYgY29sb3IsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgb3V0bGluZUNvbG9yLCBPcHRpb25h
bDxib29sPiYmIHVzZVBhZ2VDb29yZGluYXRlcyk7CiAKICAgICBJbnNwZWN0b3I6OkluamVjdGVk
U2NyaXB0TWFuYWdlciYgbV9pbmplY3RlZFNjcmlwdE1hbmFnZXI7CiAgICAgc3RkOjp1bmlxdWVf
cHRyPEluc3BlY3Rvcjo6RE9NRnJvbnRlbmREaXNwYXRjaGVyPiBtX2Zyb250ZW5kRGlzcGF0Y2hl
cjsKQEAgLTI1MSwxMCArMjQ5LDEwIEBAIHByaXZhdGU6CiAgICAgTm9kZVRvSWRNYXAgbV9kb2N1
bWVudE5vZGVUb0lkTWFwOwogICAgIC8vIE93bnMgbm9kZSBtYXBwaW5ncyBmb3IgZGFuZ2xpbmcg
bm9kZXMuCiAgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxOb2RlVG9JZE1hcD4+IG1fZGFuZ2xp
bmdOb2RlVG9JZE1hcHM7Ci0gICAgSGFzaE1hcDxpbnQsIE5vZGUqPiBtX2lkVG9Ob2RlOwotICAg
IEhhc2hNYXA8aW50LCBOb2RlVG9JZE1hcCo+IG1faWRUb05vZGVzTWFwOwotICAgIEhhc2hTZXQ8
aW50PiBtX2NoaWxkcmVuUmVxdWVzdGVkOwotICAgIGludCBtX2xhc3ROb2RlSWQgeyAxIH07Cisg
ICAgSGFzaE1hcDxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZCwgTm9kZSo+IG1faWRU
b05vZGU7CisgICAgSGFzaE1hcDxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZCwgTm9k
ZVRvSWRNYXAqPiBtX2lkVG9Ob2Rlc01hcDsKKyAgICBIYXNoU2V0PEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRPTTo6Tm9kZUlkPiBtX2NoaWxkcmVuUmVxdWVzdGVkOworICAgIEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRPTTo6Tm9kZUlkIG1fbGFzdE5vZGVJZCB7IDEgfTsKICAgICBSZWZQdHI8RG9jdW1l
bnQ+IG1fZG9jdW1lbnQ7CiAgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgVmVjdG9yPFJlZlB0
cjxOb2RlPj4+IFNlYXJjaFJlc3VsdHM7CiAgICAgU2VhcmNoUmVzdWx0cyBtX3NlYXJjaFJlc3Vs
dHM7CkBAIC0yODUsNyArMjgzLDcgQEAgcHJpdmF0ZToKICNlbmRpZgogCiAgICAgc3RydWN0IElu
c3BlY3RvckV2ZW50TGlzdGVuZXIgewotICAgICAgICBpbnQgaWRlbnRpZmllciB7IDEgfTsKKyAg
ICAgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpFdmVudExpc3RlbmVySWQgaWRlbnRpZmll
ciB7IDEgfTsKICAgICAgICAgUmVmUHRyPEV2ZW50VGFyZ2V0PiBldmVudFRhcmdldDsKICAgICAg
ICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXI7CiAgICAgICAgIEF0b21TdHJp
bmcgZXZlbnRUeXBlOwpAQCAtMjk1LDcgKzI5Myw3IEBAIHByaXZhdGU6CiAKICAgICAgICAgSW5z
cGVjdG9yRXZlbnRMaXN0ZW5lcigpIHsgfQogCi0gICAgICAgIEluc3BlY3RvckV2ZW50TGlzdGVu
ZXIoaW50IGlkZW50aWZpZXIsIEV2ZW50VGFyZ2V0JiB0YXJnZXQsIGNvbnN0IEF0b21TdHJpbmcm
IHR5cGUsIEV2ZW50TGlzdGVuZXImIGxpc3RlbmVyLCBib29sIGNhcHR1cmUpCisgICAgICAgIElu
c3BlY3RvckV2ZW50TGlzdGVuZXIoSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpFdmVudExpc3Rl
bmVySWQgaWRlbnRpZmllciwgRXZlbnRUYXJnZXQmIHRhcmdldCwgY29uc3QgQXRvbVN0cmluZyYg
dHlwZSwgRXZlbnRMaXN0ZW5lciYgbGlzdGVuZXIsIGJvb2wgY2FwdHVyZSkKICAgICAgICAgICAg
IDogaWRlbnRpZmllcihpZGVudGlmaWVyKQogICAgICAgICAgICAgLCBldmVudFRhcmdldCgmdGFy
Z2V0KQogICAgICAgICAgICAgLCBldmVudExpc3RlbmVyKCZsaXN0ZW5lcikKQEAgLTMyMSw4ICsz
MTksOCBAQCBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBFdmVudEZpcmVkQ2FsbGJhY2s7CiAK
ICAgICBIYXNoU2V0PGNvbnN0IEV2ZW50Kj4gbV9kaXNwYXRjaGVkRXZlbnRzOwotICAgIEhhc2hN
YXA8aW50LCBJbnNwZWN0b3JFdmVudExpc3RlbmVyPiBtX2V2ZW50TGlzdGVuZXJFbnRyaWVzOwot
ICAgIGludCBtX2xhc3RFdmVudExpc3RlbmVySWQgeyAxIH07CisgICAgSGFzaE1hcDxJbnNwZWN0
b3I6OlByb3RvY29sOjpET006OkV2ZW50TGlzdGVuZXJJZCwgSW5zcGVjdG9yRXZlbnRMaXN0ZW5l
cj4gbV9ldmVudExpc3RlbmVyRW50cmllczsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpET006
OkV2ZW50TGlzdGVuZXJJZCBtX2xhc3RFdmVudExpc3RlbmVySWQgeyAxIH07CiAKICAgICBib29s
IG1fc2VhcmNoaW5nRm9yTm9kZSB7IGZhbHNlIH07CiAgICAgYm9vbCBtX3N1cHByZXNzQXR0cmli
dXRlTW9kaWZpZWRFdmVudCB7IGZhbHNlIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQuY3BwIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50LmNwcAppbmRl
eCAwNzlhMTE2ODZlNDk4Yjg0Nzk5NTU5Y2YzY2Q4YWYyZjdjMDkxODE3Li5jMzJlNWEzOTE0ZTc5
ZjMwYmMxNGU2OGRkNmNmYmQzMWIwMDU0OWRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudC5jcHAK
QEAgLTEyOCwxMDkgKzEyOCw5NCBAQCB2b2lkIEluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQ6Om1h
aW5GcmFtZU5hdmlnYXRlZCgpCiAgICAgICAgIG1fcGF1c2VPbkFsbFRpbWVvdXRzQnJlYWtwb2lu
dC0+cmVzZXRIaXRDb3VudCgpOwogfQogCi12b2lkIEluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQ6
OnNldEV2ZW50QnJlYWtwb2ludChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmlu
ZyYgYnJlYWtwb2ludFR5cGVTdHJpbmcsIGNvbnN0IFN0cmluZyogZXZlbnROYW1lLCBjb25zdCBK
U09OOjpPYmplY3QqIG9wdGlvbnNQYXlsb2FkKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9p
ZD4gSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudDo6c2V0RXZlbnRCcmVha3BvaW50KFByb3RvY29s
OjpET01EZWJ1Z2dlcjo6RXZlbnRCcmVha3BvaW50VHlwZSBicmVha3BvaW50VHlwZSwgY29uc3Qg
U3RyaW5nJiBldmVudE5hbWUsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgb3B0aW9ucykKIHsKLSAg
ICBpZiAoYnJlYWtwb2ludFR5cGVTdHJpbmcuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGVycm9yU3Ry
aW5nID0gImJyZWFrcG9pbnRUeXBlIGlzIGVtcHR5Il9zOwotICAgICAgICByZXR1cm47Ci0gICAg
fQorICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKIAotICAgIGF1dG8gYnJl
YWtwb2ludFR5cGUgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpJbnNwZWN0b3JIZWxwZXJzOjpwYXJz
ZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NRGVidWdnZXI6OkV2
ZW50QnJlYWtwb2ludFR5cGU+KGJyZWFrcG9pbnRUeXBlU3RyaW5nKTsKLSAgICBpZiAoIWJyZWFr
cG9pbnRUeXBlKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gbWFrZVN0cmluZygiVW5rbm93biBi
cmVha3BvaW50VHlwZTogIl9zLCBicmVha3BvaW50VHlwZVN0cmluZyk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBhdXRvIGJyZWFrcG9pbnQgPSBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50
OjpkZWJ1Z2dlckJyZWFrcG9pbnRGcm9tUGF5bG9hZChlcnJvclN0cmluZywgb3B0aW9uc1BheWxv
YWQpOworICAgIGF1dG8gYnJlYWtwb2ludCA9IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRlYnVn
Z2VyQnJlYWtwb2ludEZyb21QYXlsb2FkKGVycm9yU3RyaW5nLCBXVEZNb3ZlKG9wdGlvbnMpKTsK
ICAgICBpZiAoIWJyZWFrcG9pbnQpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1h
a2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAotICAgIGlmIChldmVudE5hbWUgJiYgIWV2ZW50
TmFtZS0+aXNFbXB0eSgpKSB7Ci0gICAgICAgIGlmIChicmVha3BvaW50VHlwZS52YWx1ZSgpID09
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpFdmVudEJyZWFrcG9pbnRUeXBlOjpM
aXN0ZW5lcikgewotICAgICAgICAgICAgaWYgKCFtX2xpc3RlbmVyQnJlYWtwb2ludHMuYWRkKCpl
dmVudE5hbWUsIGJyZWFrcG9pbnQucmVsZWFzZU5vbk51bGwoKSkpCi0gICAgICAgICAgICAgICAg
ZXJyb3JTdHJpbmcgPSAiQnJlYWtwb2ludCB3aXRoIGV2ZW50TmFtZSBhbHJlYWR5IGV4aXN0cyJf
czsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICBpZiAoIWV2ZW50TmFtZS5pc0VtcHR5KCkpIHsK
KyAgICAgICAgaWYgKGJyZWFrcG9pbnRUeXBlID09IFByb3RvY29sOjpET01EZWJ1Z2dlcjo6RXZl
bnRCcmVha3BvaW50VHlwZTo6TGlzdGVuZXIpIHsKKyAgICAgICAgICAgIGlmICghbV9saXN0ZW5l
ckJyZWFrcG9pbnRzLmFkZChldmVudE5hbWUsIGJyZWFrcG9pbnQucmVsZWFzZU5vbk51bGwoKSkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJCcmVha3BvaW50IHdpdGgg
ZXZlbnROYW1lIGFscmVhZHkgZXhpc3RzIl9zKTsKKyAgICAgICAgICAgIHJldHVybiB7IH07CiAg
ICAgICAgIH0KIAotICAgICAgICBlcnJvclN0cmluZyA9ICJVbmV4cGVjdGVkIGV2ZW50TmFtZSJf
czsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIlVuZXhw
ZWN0ZWQgZXZlbnROYW1lIl9zKTsKICAgICB9CiAKLSAgICBzd2l0Y2ggKGJyZWFrcG9pbnRUeXBl
LnZhbHVlKCkpIHsKLSAgICBjYXNlIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpF
dmVudEJyZWFrcG9pbnRUeXBlOjpBbmltYXRpb25GcmFtZToKLSAgICAgICAgc2V0QW5pbWF0aW9u
RnJhbWVCcmVha3BvaW50KGVycm9yU3RyaW5nLCBXVEZNb3ZlKGJyZWFrcG9pbnQpKTsKLSAgICAg
ICAgYnJlYWs7CisgICAgc3dpdGNoIChicmVha3BvaW50VHlwZSkgeworICAgIGNhc2UgUHJvdG9j
b2w6OkRPTURlYnVnZ2VyOjpFdmVudEJyZWFrcG9pbnRUeXBlOjpBbmltYXRpb25GcmFtZToKKyAg
ICAgICAgaWYgKCFzZXRBbmltYXRpb25GcmFtZUJyZWFrcG9pbnQoZXJyb3JTdHJpbmcsIFdURk1v
dmUoYnJlYWtwb2ludCkpKQorICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9y
U3RyaW5nKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90
b2NvbDo6RE9NRGVidWdnZXI6OkV2ZW50QnJlYWtwb2ludFR5cGU6OkludGVydmFsOgotICAgICAg
ICBpZiAoIW1fcGF1c2VPbkFsbEludGVydmFsc0JyZWFrcG9pbnQpCi0gICAgICAgICAgICBtX3Bh
dXNlT25BbGxJbnRlcnZhbHNCcmVha3BvaW50ID0gV1RGTW92ZShicmVha3BvaW50KTsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgZXJyb3JTdHJpbmcgPSAiQnJlYWtwb2ludCBmb3IgSW50ZXJ2
YWwgYWxyZWFkeSBleGlzdHMiX3M7Ci0gICAgICAgIGJyZWFrOworICAgIGNhc2UgUHJvdG9jb2w6
OkRPTURlYnVnZ2VyOjpFdmVudEJyZWFrcG9pbnRUeXBlOjpJbnRlcnZhbDoKKyAgICAgICAgaWYg
KG1fcGF1c2VPbkFsbEludGVydmFsc0JyZWFrcG9pbnQpCisgICAgICAgICAgICByZXR1cm4gbWFr
ZVVuZXhwZWN0ZWQoIkJyZWFrcG9pbnQgZm9yIEludGVydmFsIGFscmVhZHkgZXhpc3RzIl9zKTsK
KyAgICAgICAgbV9wYXVzZU9uQWxsSW50ZXJ2YWxzQnJlYWtwb2ludCA9IFdURk1vdmUoYnJlYWtw
b2ludCk7CisgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBjYXNlIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRPTURlYnVnZ2VyOjpFdmVudEJyZWFrcG9pbnRUeXBlOjpMaXN0ZW5lcjoKLSAgICAgICAg
aWYgKCFtX3BhdXNlT25BbGxMaXN0ZW5lcnNCcmVha3BvaW50KQotICAgICAgICAgICAgbV9wYXVz
ZU9uQWxsTGlzdGVuZXJzQnJlYWtwb2ludCA9IFdURk1vdmUoYnJlYWtwb2ludCk7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIGVycm9yU3RyaW5nID0gIkJyZWFrcG9pbnQgZm9yIExpc3RlbmVy
IGFscmVhZHkgZXhpc3RzIl9zOwotICAgICAgICBicmVhazsKKyAgICBjYXNlIFByb3RvY29sOjpE
T01EZWJ1Z2dlcjo6RXZlbnRCcmVha3BvaW50VHlwZTo6TGlzdGVuZXI6CisgICAgICAgIGlmICht
X3BhdXNlT25BbGxMaXN0ZW5lcnNCcmVha3BvaW50KQorICAgICAgICAgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKCJCcmVha3BvaW50IGZvciBMaXN0ZW5lciBhbHJlYWR5IGV4aXN0cyJfcyk7Cisg
ICAgICAgIG1fcGF1c2VPbkFsbExpc3RlbmVyc0JyZWFrcG9pbnQgPSBXVEZNb3ZlKGJyZWFrcG9p
bnQpOworICAgICAgICByZXR1cm4geyB9OwogCi0gICAgY2FzZSBJbnNwZWN0b3I6OlByb3RvY29s
OjpET01EZWJ1Z2dlcjo6RXZlbnRCcmVha3BvaW50VHlwZTo6VGltZW91dDoKLSAgICAgICAgaWYg
KCFtX3BhdXNlT25BbGxUaW1lb3V0c0JyZWFrcG9pbnQpCi0gICAgICAgICAgICBtX3BhdXNlT25B
bGxUaW1lb3V0c0JyZWFrcG9pbnQgPSBXVEZNb3ZlKGJyZWFrcG9pbnQpOwotICAgICAgICBlbHNl
Ci0gICAgICAgICAgICBlcnJvclN0cmluZyA9ICJCcmVha3BvaW50IGZvciBUaW1lb3V0IGFscmVh
ZHkgZXhpc3RzIl9zOwotICAgICAgICBicmVhazsKKyAgICBjYXNlIFByb3RvY29sOjpET01EZWJ1
Z2dlcjo6RXZlbnRCcmVha3BvaW50VHlwZTo6VGltZW91dDoKKyAgICAgICAgaWYgKG1fcGF1c2VP
bkFsbFRpbWVvdXRzQnJlYWtwb2ludCkKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3Rl
ZCgiQnJlYWtwb2ludCBmb3IgVGltZW91dCBhbHJlYWR5IGV4aXN0cyJfcyk7CisgICAgICAgIG1f
cGF1c2VPbkFsbFRpbWVvdXRzQnJlYWtwb2ludCA9IFdURk1vdmUoYnJlYWtwb2ludCk7CisgICAg
ICAgIHJldHVybiB7IH07CiAgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
cmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJOb3Qgc3VwcG9ydGVkIik7CiB9CiAKLXZvaWQgSW5zcGVj
dG9yRE9NRGVidWdnZXJBZ2VudDo6cmVtb3ZlRXZlbnRCcmVha3BvaW50KEVycm9yU3RyaW5nJiBl
cnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBicmVha3BvaW50VHlwZVN0cmluZywgY29uc3QgU3Ry
aW5nKiBldmVudE5hbWUpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JE
T01EZWJ1Z2dlckFnZW50OjpyZW1vdmVFdmVudEJyZWFrcG9pbnQoUHJvdG9jb2w6OkRPTURlYnVn
Z2VyOjpFdmVudEJyZWFrcG9pbnRUeXBlIGJyZWFrcG9pbnRUeXBlLCBjb25zdCBTdHJpbmcmIGV2
ZW50TmFtZSkKIHsKLSAgICBpZiAoYnJlYWtwb2ludFR5cGVTdHJpbmcuaXNFbXB0eSgpKSB7Ci0g
ICAgICAgIGVycm9yU3RyaW5nID0gImJyZWFrcG9pbnRUeXBlIGlzIGVtcHR5Il9zOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQorICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsK
IAotICAgIGF1dG8gYnJlYWtwb2ludFR5cGUgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpJbnNwZWN0
b3JIZWxwZXJzOjpwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6
RE9NRGVidWdnZXI6OkV2ZW50QnJlYWtwb2ludFR5cGU+KGJyZWFrcG9pbnRUeXBlU3RyaW5nKTsK
LSAgICBpZiAoIWJyZWFrcG9pbnRUeXBlKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gbWFrZVN0
cmluZygiVW5rbm93biBicmVha3BvaW50VHlwZTogIl9zLCBicmVha3BvaW50VHlwZVN0cmluZyk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoZXZlbnROYW1lICYmICFldmVudE5h
bWUtPmlzRW1wdHkoKSkgewotICAgICAgICBpZiAoYnJlYWtwb2ludFR5cGUudmFsdWUoKSA9PSBJ
bnNwZWN0b3I6OlByb3RvY29sOjpET01EZWJ1Z2dlcjo6RXZlbnRCcmVha3BvaW50VHlwZTo6TGlz
dGVuZXIpIHsKLSAgICAgICAgICAgIGlmICghbV9saXN0ZW5lckJyZWFrcG9pbnRzLnJlbW92ZSgq
ZXZlbnROYW1lKSkKLSAgICAgICAgICAgICAgICBlcnJvclN0cmluZyA9ICJCcmVha3BvaW50IGZv
ciBnaXZlbiBldmVudE5hbWUgbWlzc2luZyJfczsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICBp
ZiAoIWV2ZW50TmFtZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgaWYgKGJyZWFrcG9pbnRUeXBlID09
IFByb3RvY29sOjpET01EZWJ1Z2dlcjo6RXZlbnRCcmVha3BvaW50VHlwZTo6TGlzdGVuZXIpIHsK
KyAgICAgICAgICAgIGlmICghbV9saXN0ZW5lckJyZWFrcG9pbnRzLnJlbW92ZShldmVudE5hbWUp
KQorICAgICAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiQnJlYWtwb2ludCBmb3Ig
Z2l2ZW4gZXZlbnROYW1lIG1pc3NpbmciX3MpOworICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAg
ICAgICAgfQogCi0gICAgICAgIGVycm9yU3RyaW5nID0gIlVuZXhwZWN0ZWQgZXZlbnROYW1lIl9z
OwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiVW5leHBl
Y3RlZCBldmVudE5hbWUiX3MpOwogICAgIH0KIAotICAgIHN3aXRjaCAoYnJlYWtwb2ludFR5cGUu
dmFsdWUoKSkgewotICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NRGVidWdnZXI6OkV2
ZW50QnJlYWtwb2ludFR5cGU6OkFuaW1hdGlvbkZyYW1lOgotICAgICAgICBzZXRBbmltYXRpb25G
cmFtZUJyZWFrcG9pbnQoZXJyb3JTdHJpbmcsIG51bGxwdHIpOwotICAgICAgICBicmVhazsKKyAg
ICBzd2l0Y2ggKGJyZWFrcG9pbnRUeXBlKSB7CisgICAgY2FzZSBQcm90b2NvbDo6RE9NRGVidWdn
ZXI6OkV2ZW50QnJlYWtwb2ludFR5cGU6OkFuaW1hdGlvbkZyYW1lOgorICAgICAgICBpZiAoIXNl
dEFuaW1hdGlvbkZyYW1lQnJlYWtwb2ludChlcnJvclN0cmluZywgbnVsbHB0cikpCisgICAgICAg
ICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOworICAgICAgICByZXR1cm4g
eyB9OwogCi0gICAgY2FzZSBJbnNwZWN0b3I6OlByb3RvY29sOjpET01EZWJ1Z2dlcjo6RXZlbnRC
cmVha3BvaW50VHlwZTo6SW50ZXJ2YWw6CisgICAgY2FzZSBQcm90b2NvbDo6RE9NRGVidWdnZXI6
OkV2ZW50QnJlYWtwb2ludFR5cGU6OkludGVydmFsOgogICAgICAgICBpZiAoIW1fcGF1c2VPbkFs
bEludGVydmFsc0JyZWFrcG9pbnQpCi0gICAgICAgICAgICBlcnJvclN0cmluZyA9ICJCcmVha3Bv
aW50IGZvciBJbnRlcnZhbHMgbWlzc2luZyJfczsKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5l
eHBlY3RlZCgiQnJlYWtwb2ludCBmb3IgSW50ZXJ2YWxzIG1pc3NpbmciX3MpOwogICAgICAgICBt
X3BhdXNlT25BbGxJbnRlcnZhbHNCcmVha3BvaW50ID0gbnVsbHB0cjsKLSAgICAgICAgYnJlYWs7
CisgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBjYXNlIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRP
TURlYnVnZ2VyOjpFdmVudEJyZWFrcG9pbnRUeXBlOjpMaXN0ZW5lcjoKKyAgICBjYXNlIFByb3Rv
Y29sOjpET01EZWJ1Z2dlcjo6RXZlbnRCcmVha3BvaW50VHlwZTo6TGlzdGVuZXI6CiAgICAgICAg
IGlmICghbV9wYXVzZU9uQWxsTGlzdGVuZXJzQnJlYWtwb2ludCkKLSAgICAgICAgICAgIGVycm9y
U3RyaW5nID0gIkJyZWFrcG9pbnQgZm9yIExpc3RlbmVycyBtaXNzaW5nIl9zOworICAgICAgICAg
ICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJCcmVha3BvaW50IGZvciBMaXN0ZW5lcnMgbWlzc2lu
ZyJfcyk7CiAgICAgICAgIG1fcGF1c2VPbkFsbExpc3RlbmVyc0JyZWFrcG9pbnQgPSBudWxscHRy
OwotICAgICAgICBicmVhazsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGNhc2UgSW5zcGVj
dG9yOjpQcm90b2NvbDo6RE9NRGVidWdnZXI6OkV2ZW50QnJlYWtwb2ludFR5cGU6OlRpbWVvdXQ6
CisgICAgY2FzZSBQcm90b2NvbDo6RE9NRGVidWdnZXI6OkV2ZW50QnJlYWtwb2ludFR5cGU6OlRp
bWVvdXQ6CiAgICAgICAgIGlmICghbV9wYXVzZU9uQWxsVGltZW91dHNCcmVha3BvaW50KQotICAg
ICAgICAgICAgZXJyb3JTdHJpbmcgPSAiQnJlYWtwb2ludCBmb3IgVGltZW91dHMgbWlzc2luZyJf
czsKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiQnJlYWtwb2ludCBmb3IgVGlt
ZW91dHMgbWlzc2luZyJfcyk7CiAgICAgICAgIG1fcGF1c2VPbkFsbFRpbWVvdXRzQnJlYWtwb2lu
dCA9IG51bGxwdHI7Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4geyB9OwogICAgIH0K
KworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgi
Tm90IHN1cHBvcnRlZCIpOwogfQogCiB2b2lkIEluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQ6Ondp
bGxIYW5kbGVFdmVudChFdmVudCYgZXZlbnQsIGNvbnN0IFJlZ2lzdGVyZWRFdmVudExpc3RlbmVy
JiByZWdpc3RlcmVkRXZlbnRMaXN0ZW5lcikKQEAgLTMyOSw0NSArMzE0LDUwIEBAIHZvaWQgSW5z
cGVjdG9yRE9NRGVidWdnZXJBZ2VudDo6ZGlkRmlyZVRpbWVyKGJvb2wgb25lU2hvdCkKICAgICBt
X2RlYnVnZ2VyQWdlbnQtPmNhbmNlbFBhdXNlRm9yU3BlY2lhbEJyZWFrcG9pbnQoKmJyZWFrcG9p
bnQpOwogfQogCi12b2lkIEluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQ6OnNldFVSTEJyZWFrcG9p
bnQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgYm9v
bCogb3B0aW9uYWxJc1JlZ2V4LCBjb25zdCBKU09OOjpPYmplY3QqIG9wdGlvbnNQYXlsb2FkKQor
UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudDo6
c2V0VVJMQnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHVybCwgT3B0aW9uYWw8Ym9vbD4mJiBpc1Jl
Z2V4LCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIG9wdGlvbnMpCiB7Ci0gICAgYXV0byBicmVha3Bv
aW50ID0gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGVidWdnZXJCcmVha3BvaW50RnJvbVBheWxv
YWQoZXJyb3JTdHJpbmcsIG9wdGlvbnNQYXlsb2FkKTsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJp
bmcgZXJyb3JTdHJpbmc7CisKKyAgICBhdXRvIGJyZWFrcG9pbnQgPSBJbnNwZWN0b3JEZWJ1Z2dl
ckFnZW50OjpkZWJ1Z2dlckJyZWFrcG9pbnRGcm9tUGF5bG9hZChlcnJvclN0cmluZywgV1RGTW92
ZShvcHRpb25zKSk7CiAgICAgaWYgKCFicmVha3BvaW50KQotICAgICAgICByZXR1cm47CisgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAgICBpZiAodXJsLmlz
RW1wdHkoKSkgewotICAgICAgICBpZiAoIW1fcGF1c2VPbkFsbFVSTHNCcmVha3BvaW50KQotICAg
ICAgICAgICAgbV9wYXVzZU9uQWxsVVJMc0JyZWFrcG9pbnQgPSBXVEZNb3ZlKGJyZWFrcG9pbnQp
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBlcnJvclN0cmluZyA9ICJCcmVha3BvaW50IGZv
ciBhbGwgVVJMcyBhbHJlYWR5IGV4aXN0cyJfczsKLSAgICAgICAgcmV0dXJuOworICAgICAgICBp
ZiAobV9wYXVzZU9uQWxsVVJMc0JyZWFrcG9pbnQpCisgICAgICAgICAgICByZXR1cm4gbWFrZVVu
ZXhwZWN0ZWQoIkJyZWFrcG9pbnQgZm9yIGFsbCBVUkxzIGFscmVhZHkgZXhpc3RzIl9zKTsKKyAg
ICAgICAgbV9wYXVzZU9uQWxsVVJMc0JyZWFrcG9pbnQgPSBXVEZNb3ZlKGJyZWFrcG9pbnQpOwor
ICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAotICAgIGlmIChvcHRpb25hbElzUmVnZXggJiYg
Km9wdGlvbmFsSXNSZWdleCkgeworICAgIGlmIChpc1JlZ2V4ICYmICppc1JlZ2V4KSB7CiAgICAg
ICAgIGlmICghbV91cmxSZWdleEJyZWFrcG9pbnRzLmFkZCh1cmwsIGJyZWFrcG9pbnQucmVsZWFz
ZU5vbk51bGwoKSkpCi0gICAgICAgICAgICBlcnJvclN0cmluZyA9ICJCcmVha3BvaW50IGZvciBn
aXZlbiByZWdleCBhbHJlYWR5IGV4aXN0cyJfczsKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5l
eHBlY3RlZCgiQnJlYWtwb2ludCBmb3IgZ2l2ZW4gcmVnZXggYWxyZWFkeSBleGlzdHMiX3MpOwog
ICAgIH0gZWxzZSB7CiAgICAgICAgIGlmICghbV91cmxUZXh0QnJlYWtwb2ludHMuYWRkKHVybCwg
YnJlYWtwb2ludC5yZWxlYXNlTm9uTnVsbCgpKSkKLSAgICAgICAgICAgIGVycm9yU3RyaW5nID0g
IkJyZWFrcG9pbnQgZm9yIGdpdmVuIFVSTCBhbHJlYWR5IGV4aXN0cyJfczsKKyAgICAgICAgICAg
IHJldHVybiBtYWtlVW5leHBlY3RlZCgiQnJlYWtwb2ludCBmb3IgZ2l2ZW4gVVJMIGFscmVhZHkg
ZXhpc3RzIl9zKTsKICAgICB9CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3Rv
ckRPTURlYnVnZ2VyQWdlbnQ6OnJlbW92ZVVSTEJyZWFrcG9pbnQoRXJyb3JTdHJpbmcmIGVycm9y
U3RyaW5nLCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgYm9vbCogb3B0aW9uYWxJc1JlZ2V4KQor
UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudDo6
cmVtb3ZlVVJMQnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHVybCwgT3B0aW9uYWw8Ym9vbD4mJiBp
c1JlZ2V4KQogewogICAgIGlmICh1cmwuaXNFbXB0eSgpKSB7CiAgICAgICAgIGlmICghbV9wYXVz
ZU9uQWxsVVJMc0JyZWFrcG9pbnQpCi0gICAgICAgICAgICBlcnJvclN0cmluZyA9ICJCcmVha3Bv
aW50IGZvciBhbGwgVVJMcyBtaXNzaW5nIl9zOworICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4
cGVjdGVkKCJCcmVha3BvaW50IGZvciBhbGwgVVJMcyBtaXNzaW5nIl9zKTsKICAgICAgICAgbV9w
YXVzZU9uQWxsVVJMc0JyZWFrcG9pbnQgPSBudWxscHRyOwotICAgICAgICByZXR1cm47CisgICAg
ICAgIHJldHVybiB7IH07CiAgICAgfQogCi0gICAgaWYgKG9wdGlvbmFsSXNSZWdleCAmJiAqb3B0
aW9uYWxJc1JlZ2V4KSB7CisgICAgaWYgKGlzUmVnZXggJiYgKmlzUmVnZXgpIHsKICAgICAgICAg
aWYgKCFtX3VybFJlZ2V4QnJlYWtwb2ludHMucmVtb3ZlKHVybCkpCi0gICAgICAgICAgICBlcnJv
clN0cmluZyA9ICJNaXNzaW5nIGJyZWFrcG9pbnQgZm9yIGdpdmVuIHJlZ2V4Il9zOworICAgICAg
ICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJNaXNzaW5nIGJyZWFrcG9pbnQgZm9yIGdpdmVu
IHJlZ2V4Il9zKTsKICAgICB9IGVsc2UgewogICAgICAgICBpZiAoIW1fdXJsVGV4dEJyZWFrcG9p
bnRzLnJlbW92ZSh1cmwpKQotICAgICAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWlzc2luZyBicmVh
a3BvaW50IGZvciBnaXZlbiBVUkwiX3M7CisgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0
ZWQoIk1pc3NpbmcgYnJlYWtwb2ludCBmb3IgZ2l2ZW4gVVJMIl9zKTsKICAgICB9CisKKyAgICBy
ZXR1cm4geyB9OwogfQogCiB2b2lkIEluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQ6OmJyZWFrT25V
UkxJZk5lZWRlZChjb25zdCBTdHJpbmcmIHVybCwgVVJMQnJlYWtwb2ludFNvdXJjZSBzb3VyY2Up
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRP
TURlYnVnZ2VyQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVj
dG9yRE9NRGVidWdnZXJBZ2VudC5oCmluZGV4IDRlYzBmMDhjOWI1YTFjMjdkZDQzZWE4NTQwNGVj
ZTYyYzkzNmYxZmEuLjg5NjA5ZWNmYzBkODc5Njc0MWQ0NTVhMDNlN2RhYzA5MWU4ZGNjOGQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NRGVi
dWdnZXJBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVj
dG9yRE9NRGVidWdnZXJBZ2VudC5oCkBAIC01MCw4ICs1MCw2IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIGNsYXNzIEV2ZW50OwogY2xhc3MgUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXI7CiAKLXR5cGVk
ZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCiBjbGFzcyBJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50
IDogcHVibGljIEluc3BlY3RvckFnZW50QmFzZSwgcHVibGljIEluc3BlY3Rvcjo6RE9NRGVidWdn
ZXJCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIsIHB1YmxpYyBJbnNwZWN0b3I6Okluc3BlY3RvckRl
YnVnZ2VyQWdlbnQ6Okxpc3RlbmVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbnNwZWN0
b3JET01EZWJ1Z2dlckFnZW50KTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKQEAgLTY1
LDEwICs2MywxMCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGVuYWJsZWQoKSBjb25zdDsK
IAogICAgIC8vIERPTURlYnVnZ2VyQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyCi0gICAgdm9pZCBz
ZXRVUkxCcmVha3BvaW50KEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IGJv
b2wqIGlzUmVnZXgsIGNvbnN0IEpTT046Ok9iamVjdCogb3B0aW9ucykgZmluYWw7Ci0gICAgdm9p
ZCByZW1vdmVVUkxCcmVha3BvaW50KEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiB1cmwsIGNv
bnN0IGJvb2wqIGlzUmVnZXgpIGZpbmFsOwotICAgIHZvaWQgc2V0RXZlbnRCcmVha3BvaW50KEVy
cm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBicmVha3BvaW50VHlwZSwgY29uc3QgU3RyaW5nKiBl
dmVudE5hbWUsIGNvbnN0IEpTT046Ok9iamVjdCogb3B0aW9ucykgZmluYWw7Ci0gICAgdm9pZCBy
ZW1vdmVFdmVudEJyZWFrcG9pbnQoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGJyZWFrcG9p
bnRUeXBlLCBjb25zdCBTdHJpbmcqIGV2ZW50TmFtZSkgZmluYWw7CisgICAgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzZXRVUkxCcmVha3BvaW50KGNvbnN0IFN0cmlu
ZyYgdXJsLCBPcHRpb25hbDxib29sPiYmIGlzUmVnZXgsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYg
b3B0aW9ucykgZmluYWw7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2
b2lkPiByZW1vdmVVUkxCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgdXJsLCBPcHRpb25hbDxib29s
PiYmIGlzUmVnZXgpIGZpbmFsOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5n
T3I8dm9pZD4gc2V0RXZlbnRCcmVha3BvaW50KEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTURlYnVn
Z2VyOjpFdmVudEJyZWFrcG9pbnRUeXBlLCBjb25zdCBTdHJpbmcmIGV2ZW50TmFtZSwgUmVmUHRy
PEpTT046Ok9iamVjdD4mJiBvcHRpb25zKSBmaW5hbDsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29s
OjpFcnJvclN0cmluZ09yPHZvaWQ+IHJlbW92ZUV2ZW50QnJlYWtwb2ludChJbnNwZWN0b3I6OlBy
b3RvY29sOjpET01EZWJ1Z2dlcjo6RXZlbnRCcmVha3BvaW50VHlwZSwgY29uc3QgU3RyaW5nJiBl
dmVudE5hbWUpIGZpbmFsOwogCiAgICAgLy8gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6TGlzdGVu
ZXIKICAgICB2b2lkIGRlYnVnZ2VyV2FzRW5hYmxlZCgpIG92ZXJyaWRlOwpAQCAtODgsNyArODYs
NyBAQCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIGVuYWJsZSgpOwogICAgIHZpcnR1YWwg
dm9pZCBkaXNhYmxlKCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgc2V0QW5pbWF0aW9uRnJhbWVCcmVh
a3BvaW50KEVycm9yU3RyaW5nJiwgUmVmUHRyPEpTQzo6QnJlYWtwb2ludD4mJikgPSAwOworICAg
IHZpcnR1YWwgYm9vbCBzZXRBbmltYXRpb25GcmFtZUJyZWFrcG9pbnQoSW5zcGVjdG9yOjpQcm90
b2NvbDo6RXJyb3JTdHJpbmcmLCBSZWZQdHI8SlNDOjpCcmVha3BvaW50PiYmKSA9IDA7CiAKICAg
ICBJbnNwZWN0b3I6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQqIG1fZGVidWdnZXJBZ2VudCB7IG51
bGxwdHIgfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9J
bnNwZWN0b3JET01TdG9yYWdlQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Fn
ZW50cy9JbnNwZWN0b3JET01TdG9yYWdlQWdlbnQuY3BwCmluZGV4IGU1OTFlOTE2OWRmMzA0NTQ1
NjIwYjU0MDMyYjYyZmEyYmFkZWNiNmUuLjAzYTdmZDA4ZDIwNTdjMjJjYWNkY2Y4NTA1OGYxZTRk
ZjA0ZGQ3ZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5z
cGVjdG9yRE9NU3RvcmFnZUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
YWdlbnRzL0luc3BlY3RvckRPTVN0b3JhZ2VBZ2VudC5jcHAKQEAgLTcwLDQxICs3MCwzOSBAQCB2
b2lkIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6ZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5k
KEluc3BlY3Rvcjo6RnJvbnRlbmRSbwogCiB2b2lkIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6
d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29u
KQogewotICAgIEVycm9yU3RyaW5nIGlnbm9yZWQ7Ci0gICAgZGlzYWJsZShpZ25vcmVkKTsKKyAg
ICBkaXNhYmxlKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjplbmFibGUo
RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4g
SW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjplbmFibGUoKQogewotICAgIGlmIChtX2luc3RydW1l
bnRpbmdBZ2VudHMuZW5hYmxlZERPTVN0b3JhZ2VBZ2VudCgpID09IHRoaXMpIHsKLSAgICAgICAg
ZXJyb3JTdHJpbmcgPSAiRE9NU3RvcmFnZSBkb21haW4gYWxyZWFkeSBlbmFibGVkIl9zOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmIChtX2luc3RydW1lbnRpbmdBZ2VudHMuZW5hYmxl
ZERPTVN0b3JhZ2VBZ2VudCgpID09IHRoaXMpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3Rl
ZCgiRE9NU3RvcmFnZSBkb21haW4gYWxyZWFkeSBlbmFibGVkIl9zKTsKIAogICAgIG1faW5zdHJ1
bWVudGluZ0FnZW50cy5zZXRFbmFibGVkRE9NU3RvcmFnZUFnZW50KHRoaXMpOworCisgICAgcmV0
dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OmRpc2FibGUoRXJy
b3JTdHJpbmcmIGVycm9yU3RyaW5nKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5z
cGVjdG9yRE9NU3RvcmFnZUFnZW50OjpkaXNhYmxlKCkKIHsKLSAgICBpZiAobV9pbnN0cnVtZW50
aW5nQWdlbnRzLmVuYWJsZWRET01TdG9yYWdlQWdlbnQoKSAhPSB0aGlzKSB7Ci0gICAgICAgIGVy
cm9yU3RyaW5nID0gIkRPTVN0b3JhZ2UgZG9tYWluIGFscmVhZHkgZGlzYWJsZWQiX3M7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKG1faW5zdHJ1bWVudGluZ0FnZW50cy5lbmFibGVk
RE9NU3RvcmFnZUFnZW50KCkgIT0gdGhpcykKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVk
KCJET01TdG9yYWdlIGRvbWFpbiBhbHJlYWR5IGRpc2FibGVkIl9zKTsKIAogICAgIG1faW5zdHJ1
bWVudGluZ0FnZW50cy5zZXRFbmFibGVkRE9NU3RvcmFnZUFnZW50KG51bGxwdHIpOworCisgICAg
cmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OmdldERPTVN0
b3JhZ2VJdGVtcyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IEpTT046Ok9iamVjdCYg
c3RvcmFnZUlkLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxKU09OOjpBcnJheU9mPFN0cmluZz4+PiYg
aXRlbXMpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SlNPTjo6QXJyYXlPZjxQcm90b2Nv
bDo6RE9NU3RvcmFnZTo6SXRlbT4+PiBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OmdldERPTVN0
b3JhZ2VJdGVtcyhSZWY8SlNPTjo6T2JqZWN0PiYmIHN0b3JhZ2VJZCkKIHsKKyAgICBQcm90b2Nv
bDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBGcmFtZSogZnJhbWU7Ci0gICAgUmVm
UHRyPFN0b3JhZ2VBcmVhPiBzdG9yYWdlQXJlYSA9IGZpbmRTdG9yYWdlQXJlYShlcnJvclN0cmlu
Zywgc3RvcmFnZUlkLCBmcmFtZSk7Ci0gICAgaWYgKCFzdG9yYWdlQXJlYSkgewotICAgICAgICBl
cnJvclN0cmluZyA9ICJNaXNzaW5nIHN0b3JhZ2UgZm9yIGdpdmVuIHN0b3JhZ2VJZCJfczsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBSZWZQdHI8U3RvcmFnZUFyZWE+IHN0b3JhZ2VBcmVh
ID0gZmluZFN0b3JhZ2VBcmVhKGVycm9yU3RyaW5nLCBXVEZNb3ZlKHN0b3JhZ2VJZCksIGZyYW1l
KTsKKyAgICBpZiAoIXN0b3JhZ2VBcmVhKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQo
ZXJyb3JTdHJpbmcpOwogCiAgICAgYXV0byBzdG9yYWdlSXRlbXMgPSBKU09OOjpBcnJheU9mPEpT
T046OkFycmF5T2Y8U3RyaW5nPj46OmNyZWF0ZSgpOwotCiAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHN0b3JhZ2VBcmVhLT5sZW5ndGgoKTsgKytpKSB7CiAgICAgICAgIFN0cmluZyBrZXkg
PSBzdG9yYWdlQXJlYS0+a2V5KGkpOwogICAgICAgICBTdHJpbmcgdmFsdWUgPSBzdG9yYWdlQXJl
YS0+aXRlbShrZXkpOwpAQCAtMTE0LDQ3ICsxMTIsNTIgQEAgdm9pZCBJbnNwZWN0b3JET01TdG9y
YWdlQWdlbnQ6OmdldERPTVN0b3JhZ2VJdGVtcyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNv
bnMKICAgICAgICAgZW50cnktPmFkZEl0ZW0odmFsdWUpOwogICAgICAgICBzdG9yYWdlSXRlbXMt
PmFkZEl0ZW0oV1RGTW92ZShlbnRyeSkpOwogICAgIH0KLQotICAgIGl0ZW1zID0gV1RGTW92ZShz
dG9yYWdlSXRlbXMpOworICAgIHJldHVybiBXVEZNb3ZlKHN0b3JhZ2VJdGVtcyk7CiB9CiAKLXZv
aWQgSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjpzZXRET01TdG9yYWdlSXRlbShFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcsIGNvbnN0IEpTT046Ok9iamVjdCYgc3RvcmFnZUlkLCBjb25zdCBTdHJp
bmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZv
aWQ+IEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6c2V0RE9NU3RvcmFnZUl0ZW0oUmVmPEpTT046
Ok9iamVjdD4mJiBzdG9yYWdlSWQsIGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZh
bHVlKQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIEZy
YW1lKiBmcmFtZTsKLSAgICBSZWZQdHI8U3RvcmFnZUFyZWE+IHN0b3JhZ2VBcmVhID0gZmluZFN0
b3JhZ2VBcmVhKGVycm9yU3RyaW5nLCBzdG9yYWdlSWQsIGZyYW1lKTsKLSAgICBpZiAoIXN0b3Jh
Z2VBcmVhKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIk1pc3Npbmcgc3RvcmFnZSBmb3IgZ2l2
ZW4gc3RvcmFnZUlkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIFJlZlB0cjxTdG9y
YWdlQXJlYT4gc3RvcmFnZUFyZWEgPSBmaW5kU3RvcmFnZUFyZWEoZXJyb3JTdHJpbmcsIFdURk1v
dmUoc3RvcmFnZUlkKSwgZnJhbWUpOworICAgIGlmICghc3RvcmFnZUFyZWEpCisgICAgICAgIHJl
dHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAgICBib29sIHF1b3RhRXhjZXB0
aW9uID0gZmFsc2U7CiAgICAgc3RvcmFnZUFyZWEtPnNldEl0ZW0oZnJhbWUsIGtleSwgdmFsdWUs
IHF1b3RhRXhjZXB0aW9uKTsKICAgICBpZiAocXVvdGFFeGNlcHRpb24pCi0gICAgICAgIGVycm9y
U3RyaW5nID0gRE9NRXhjZXB0aW9uOjpuYW1lKFF1b3RhRXhjZWVkZWRFcnJvcik7CisgICAgICAg
IHJldHVybiBtYWtlVW5leHBlY3RlZChET01FeGNlcHRpb246Om5hbWUoUXVvdGFFeGNlZWRlZEVy
cm9yKSk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckRPTVN0b3JhZ2VB
Z2VudDo6cmVtb3ZlRE9NU3RvcmFnZUl0ZW0oRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25z
dCBKU09OOjpPYmplY3QmIHN0b3JhZ2VJZCwgY29uc3QgU3RyaW5nJiBrZXkpCitQcm90b2NvbDo6
RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OnJlbW92ZURPTVN0
b3JhZ2VJdGVtKFJlZjxKU09OOjpPYmplY3Q+JiYgc3RvcmFnZUlkLCBjb25zdCBTdHJpbmcmIGtl
eSkKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBGcmFt
ZSogZnJhbWU7Ci0gICAgUmVmUHRyPFN0b3JhZ2VBcmVhPiBzdG9yYWdlQXJlYSA9IGZpbmRTdG9y
YWdlQXJlYShlcnJvclN0cmluZywgc3RvcmFnZUlkLCBmcmFtZSk7Ci0gICAgaWYgKCFzdG9yYWdl
QXJlYSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIHN0b3JhZ2UgZm9yIGdpdmVu
IHN0b3JhZ2VJZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBSZWZQdHI8U3RvcmFn
ZUFyZWE+IHN0b3JhZ2VBcmVhID0gZmluZFN0b3JhZ2VBcmVhKGVycm9yU3RyaW5nLCBXVEZNb3Zl
KHN0b3JhZ2VJZCksIGZyYW1lKTsKKyAgICBpZiAoIXN0b3JhZ2VBcmVhKQorICAgICAgICByZXR1
cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCiAgICAgc3RvcmFnZUFyZWEtPnJlbW92
ZUl0ZW0oZnJhbWUsIGtleSk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3Rv
ckRPTVN0b3JhZ2VBZ2VudDo6Y2xlYXJET01TdG9yYWdlSXRlbXMoRXJyb3JTdHJpbmcmIGVycm9y
U3RyaW5nLCBjb25zdCBKU09OOjpPYmplY3QmIHN0b3JhZ2VJZCkKK1Byb3RvY29sOjpFcnJvclN0
cmluZ09yPHZvaWQ+IEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6Y2xlYXJET01TdG9yYWdlSXRl
bXMoUmVmPEpTT046Ok9iamVjdD4mJiBzdG9yYWdlSWQpCiB7CisgICAgUHJvdG9jb2w6OkVycm9y
U3RyaW5nIGVycm9yU3RyaW5nOworCiAgICAgRnJhbWUqIGZyYW1lOwotICAgIGF1dG8gc3RvcmFn
ZUFyZWEgPSBmaW5kU3RvcmFnZUFyZWEoZXJyb3JTdHJpbmcsIHN0b3JhZ2VJZCwgZnJhbWUpOwot
ICAgIGlmICghc3RvcmFnZUFyZWEpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWlzc2luZyBz
dG9yYWdlIGZvciBnaXZlbiBzdG9yYWdlSWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Cisg
ICAgYXV0byBzdG9yYWdlQXJlYSA9IGZpbmRTdG9yYWdlQXJlYShlcnJvclN0cmluZywgV1RGTW92
ZShzdG9yYWdlSWQpLCBmcmFtZSk7CisgICAgaWYgKCFzdG9yYWdlQXJlYSkKKyAgICAgICAgcmV0
dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgIHN0b3JhZ2VBcmVhLT5jbGVh
cihmcmFtZSk7CisKKyAgICByZXR1cm4geyB9OwogfQogCiBTdHJpbmcgSW5zcGVjdG9yRE9NU3Rv
cmFnZUFnZW50OjpzdG9yYWdlSWQoU3RvcmFnZSYgc3RvcmFnZSkKQEAgLTE2OCw5ICsxNzEsOSBA
QCBTdHJpbmcgSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjpzdG9yYWdlSWQoU3RvcmFnZSYgc3Rv
cmFnZSkKICAgICByZXR1cm4gSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjpzdG9yYWdlSWQoc2Vj
dXJpdHlPcmlnaW4ucHRyKCksIGlzTG9jYWxTdG9yYWdlKS0+dG9KU09OU3RyaW5nKCk7CiB9CiAK
LVJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpET01TdG9yYWdlOjpTdG9yYWdlSWQ+IEluc3Bl
Y3RvckRPTVN0b3JhZ2VBZ2VudDo6c3RvcmFnZUlkKFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9y
aWdpbiwgYm9vbCBpc0xvY2FsU3RvcmFnZSkKK1JlZjxQcm90b2NvbDo6RE9NU3RvcmFnZTo6U3Rv
cmFnZUlkPiBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OnN0b3JhZ2VJZChTZWN1cml0eU9yaWdp
biogc2VjdXJpdHlPcmlnaW4sIGJvb2wgaXNMb2NhbFN0b3JhZ2UpCiB7Ci0gICAgcmV0dXJuIElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkRPTVN0b3JhZ2U6OlN0b3JhZ2VJZDo6Y3JlYXRlKCkKKyAgICBy
ZXR1cm4gUHJvdG9jb2w6OkRPTVN0b3JhZ2U6OlN0b3JhZ2VJZDo6Y3JlYXRlKCkKICAgICAgICAg
LnNldFNlY3VyaXR5T3JpZ2luKHNlY3VyaXR5T3JpZ2luLT50b1Jhd1N0cmluZygpKQogICAgICAg
ICAuc2V0SXNMb2NhbFN0b3JhZ2UoaXNMb2NhbFN0b3JhZ2UpCiAgICAgICAgIC5yZWxlYXNlKCk7
CkBAIC0xNzgsMjggKzE4MSwyOCBAQCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NU3Rv
cmFnZTo6U3RvcmFnZUlkPiBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OnN0bwogCiB2b2lkIElu
c3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6ZGlkRGlzcGF0Y2hET01TdG9yYWdlRXZlbnQoY29uc3Qg
U3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgb2xkVmFsdWUsIGNvbnN0IFN0cmluZyYgbmV3VmFs
dWUsIFN0b3JhZ2VUeXBlIHN0b3JhZ2VUeXBlLCBTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlPcmln
aW4pCiB7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTVN0b3JhZ2U6OlN0b3Jh
Z2VJZD4gaWQgPSBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OnN0b3JhZ2VJZChzZWN1cml0eU9y
aWdpbiwgc3RvcmFnZVR5cGUgPT0gU3RvcmFnZVR5cGU6OkxvY2FsKTsKKyAgICBhdXRvIGlkID0g
SW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjpzdG9yYWdlSWQoc2VjdXJpdHlPcmlnaW4sIHN0b3Jh
Z2VUeXBlID09IFN0b3JhZ2VUeXBlOjpMb2NhbCk7CiAKICAgICBpZiAoa2V5LmlzTnVsbCgpKQot
ICAgICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+ZG9tU3RvcmFnZUl0ZW1zQ2xlYXJlZChpZCk7
CisgICAgICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5kb21TdG9yYWdlSXRlbXNDbGVhcmVkKFdU
Rk1vdmUoaWQpKTsKICAgICBlbHNlIGlmIChuZXdWYWx1ZS5pc051bGwoKSkKLSAgICAgICAgbV9m
cm9udGVuZERpc3BhdGNoZXItPmRvbVN0b3JhZ2VJdGVtUmVtb3ZlZChpZCwga2V5KTsKKyAgICAg
ICAgbV9mcm9udGVuZERpc3BhdGNoZXItPmRvbVN0b3JhZ2VJdGVtUmVtb3ZlZChXVEZNb3ZlKGlk
KSwga2V5KTsKICAgICBlbHNlIGlmIChvbGRWYWx1ZS5pc051bGwoKSkKLSAgICAgICAgbV9mcm9u
dGVuZERpc3BhdGNoZXItPmRvbVN0b3JhZ2VJdGVtQWRkZWQoaWQsIGtleSwgbmV3VmFsdWUpOwor
ICAgICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+ZG9tU3RvcmFnZUl0ZW1BZGRlZChXVEZNb3Zl
KGlkKSwga2V5LCBuZXdWYWx1ZSk7CiAgICAgZWxzZQotICAgICAgICBtX2Zyb250ZW5kRGlzcGF0
Y2hlci0+ZG9tU3RvcmFnZUl0ZW1VcGRhdGVkKGlkLCBrZXksIG9sZFZhbHVlLCBuZXdWYWx1ZSk7
CisgICAgICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5kb21TdG9yYWdlSXRlbVVwZGF0ZWQoV1RG
TW92ZShpZCksIGtleSwgb2xkVmFsdWUsIG5ld1ZhbHVlKTsKIH0KIAotUmVmUHRyPFN0b3JhZ2VB
cmVhPiBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OmZpbmRTdG9yYWdlQXJlYShFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcsIGNvbnN0IEpTT046Ok9iamVjdCYgc3RvcmFnZUlkLCBGcmFtZSomIHRh
cmdldEZyYW1lKQorUmVmUHRyPFN0b3JhZ2VBcmVhPiBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6
OmZpbmRTdG9yYWdlQXJlYShQcm90b2NvbDo6RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBSZWY8
SlNPTjo6T2JqZWN0PiYmIHN0b3JhZ2VJZCwgRnJhbWUqJiB0YXJnZXRGcmFtZSkKIHsKLSAgICBT
dHJpbmcgc2VjdXJpdHlPcmlnaW47Ci0gICAgaWYgKCFzdG9yYWdlSWQuZ2V0U3RyaW5nKCJzZWN1
cml0eU9yaWdpbiJfcywgc2VjdXJpdHlPcmlnaW4pKSB7CisgICAgYXV0byBzZWN1cml0eU9yaWdp
biA9IHN0b3JhZ2VJZC0+Z2V0U3RyaW5nKFByb3RvY29sOjpET01TdG9yYWdlOjpTdG9yYWdlSWQ6
OnNlY3VyaXR5T3JpZ2luS2V5KTsKKyAgICBpZiAoIXNlY3VyaXR5T3JpZ2luKSB7CiAgICAgICAg
IGVycm9yU3RyaW5nID0gIk1pc3Npbmcgc2VjdXJpdHlPcmlnaW4gaW4gZ2l2ZW4gc3RvcmFnZUlk
IjsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCi0gICAgYm9vbCBpc0xvY2FsU3Rv
cmFnZSA9IGZhbHNlOwotICAgIGlmICghc3RvcmFnZUlkLmdldEJvb2xlYW4oImlzTG9jYWxTdG9y
YWdlIl9zLCBpc0xvY2FsU3RvcmFnZSkpIHsKKyAgICBhdXRvIGlzTG9jYWxTdG9yYWdlID0gc3Rv
cmFnZUlkLT5nZXRCb29sZWFuKFByb3RvY29sOjpET01TdG9yYWdlOjpTdG9yYWdlSWQ6OmlzTG9j
YWxTdG9yYWdlS2V5KTsKKyAgICBpZiAoIWlzTG9jYWxTdG9yYWdlKSB7CiAgICAgICAgIGVycm9y
U3RyaW5nID0gIk1pc3NpbmcgaXNMb2NhbFN0b3JhZ2UgaW4gZ2l2ZW4gc3RvcmFnZUlkIjsKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQpAQCAtMjEwLDcgKzIxMyw3IEBAIFJlZlB0cjxT
dG9yYWdlQXJlYT4gSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjpmaW5kU3RvcmFnZUFyZWEoRXJy
b3JTdHJpbmcmIGVycm9yCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAotICAgIGlm
ICghaXNMb2NhbFN0b3JhZ2UpCisgICAgaWYgKCEqaXNMb2NhbFN0b3JhZ2UpCiAgICAgICAgIHJl
dHVybiBtX2luc3BlY3RlZFBhZ2Uuc2Vzc2lvblN0b3JhZ2UoKS0+c3RvcmFnZUFyZWEodGFyZ2V0
RnJhbWUtPmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCkuZGF0YSgpKTsKICAgICByZXR1cm4g
bV9pbnNwZWN0ZWRQYWdlLnN0b3JhZ2VOYW1lc3BhY2VQcm92aWRlcigpLmxvY2FsU3RvcmFnZUFy
ZWEoKnRhcmdldEZyYW1lLT5kb2N1bWVudCgpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50LmggYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTVN0b3JhZ2VBZ2VudC5oCmluZGV4
IGRkYmI1ZDUzNDdmM2JlYWJlM2NmYWIyMDFkNjgzOGM4OTZkMjFlMzkuLjMzODZjYjg3OWYxMTc4
YzFiOTYzNTc3NWM5YTBlODY0ZjViOTRjNTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01TdG9yYWdlQWdlbnQuaApAQCAtNDUs
MzYgKzQ1LDM0IEBAIGNsYXNzIFBhZ2U7CiBjbGFzcyBTZWN1cml0eU9yaWdpbjsKIGNsYXNzIFN0
b3JhZ2U7CiAKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCiBjbGFzcyBJbnNwZWN0b3JE
T01TdG9yYWdlQWdlbnQgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yQWdlbnRCYXNlLCBwdWJsaWMg
SW5zcGVjdG9yOjpET01TdG9yYWdlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKICAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQpOwogICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudChQ
YWdlQWdlbnRDb250ZXh0Jik7Ci0gICAgfkluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudCgpIG92ZXJy
aWRlOworICAgIH5JbnNwZWN0b3JET01TdG9yYWdlQWdlbnQoKTsKIAogICAgIC8vIEluc3BlY3Rv
ckFnZW50QmFzZQotICAgIHZvaWQgZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rv
cjo6RnJvbnRlbmRSb3V0ZXIqLCBJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyKikgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCB3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkRp
c2Nvbm5lY3RSZWFzb24pIG92ZXJyaWRlOworICAgIHZvaWQgZGlkQ3JlYXRlRnJvbnRlbmRBbmRC
YWNrZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRSb3V0ZXIqLCBJbnNwZWN0b3I6OkJhY2tlbmREaXNw
YXRjaGVyKik7CisgICAgdm9pZCB3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0
b3I6OkRpc2Nvbm5lY3RSZWFzb24pOwogCiAgICAgLy8gRE9NU3RvcmFnZUJhY2tlbmREaXNwYXRj
aGVySGFuZGxlcgotICAgIHZvaWQgZW5hYmxlKEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAg
dm9pZCBkaXNhYmxlKEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBnZXRET01TdG9y
YWdlSXRlbXMoRXJyb3JTdHJpbmcmLCBjb25zdCBKU09OOjpPYmplY3QmIHN0b3JhZ2VJZCwgUmVm
UHRyPEpTT046OkFycmF5T2Y8SlNPTjo6QXJyYXlPZjxTdHJpbmc+Pj4mIGl0ZW1zKSBvdmVycmlk
ZTsKLSAgICB2b2lkIHNldERPTVN0b3JhZ2VJdGVtKEVycm9yU3RyaW5nJiwgY29uc3QgSlNPTjo6
T2JqZWN0JiBzdG9yYWdlSWQsIGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVl
KSBvdmVycmlkZTsKLSAgICB2b2lkIHJlbW92ZURPTVN0b3JhZ2VJdGVtKEVycm9yU3RyaW5nJiwg
Y29uc3QgSlNPTjo6T2JqZWN0JiBzdG9yYWdlSWQsIGNvbnN0IFN0cmluZyYga2V5KSBvdmVycmlk
ZTsKLSAgICB2b2lkIGNsZWFyRE9NU3RvcmFnZUl0ZW1zKEVycm9yU3RyaW5nJiwgY29uc3QgSlNP
Tjo6T2JqZWN0JiBzdG9yYWdlSWQpIG92ZXJyaWRlOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8dm9pZD4gZW5hYmxlKCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6
RXJyb3JTdHJpbmdPcjx2b2lkPiBkaXNhYmxlKCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6
RXJyb3JTdHJpbmdPcjxSZWY8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET01T
dG9yYWdlOjpJdGVtPj4+IGdldERPTVN0b3JhZ2VJdGVtcyhSZWY8SlNPTjo6T2JqZWN0PiYmIHN0
b3JhZ2VJZCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBz
ZXRET01TdG9yYWdlSXRlbShSZWY8SlNPTjo6T2JqZWN0PiYmIHN0b3JhZ2VJZCwgY29uc3QgU3Ry
aW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8dm9pZD4gcmVtb3ZlRE9NU3RvcmFnZUl0ZW0oUmVmPEpTT046Ok9iamVj
dD4mJiBzdG9yYWdlSWQsIGNvbnN0IFN0cmluZyYga2V5KTsKKyAgICBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGNsZWFyRE9NU3RvcmFnZUl0ZW1zKFJlZjxKU09OOjpP
YmplY3Q+JiYgc3RvcmFnZUlkKTsKIAogICAgIC8vIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbgog
ICAgIHZvaWQgZGlkRGlzcGF0Y2hET01TdG9yYWdlRXZlbnQoY29uc3QgU3RyaW5nJiBrZXksIGNv
bnN0IFN0cmluZyYgb2xkVmFsdWUsIGNvbnN0IFN0cmluZyYgbmV3VmFsdWUsIFN0b3JhZ2VUeXBl
LCBTZWN1cml0eU9yaWdpbiopOwogCiAgICAgLy8gQ29tbWFuZExpbmVBUEkKICAgICBzdGF0aWMg
U3RyaW5nIHN0b3JhZ2VJZChTdG9yYWdlJik7Ci0gICAgc3RhdGljIFJlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpET01TdG9yYWdlOjpTdG9yYWdlSWQ+IHN0b3JhZ2VJZChTZWN1cml0eU9yaWdp
biosIGJvb2wgaXNMb2NhbFN0b3JhZ2UpOworICAgIHN0YXRpYyBSZWY8SW5zcGVjdG9yOjpQcm90
b2NvbDo6RE9NU3RvcmFnZTo6U3RvcmFnZUlkPiBzdG9yYWdlSWQoU2VjdXJpdHlPcmlnaW4qLCBi
b29sIGlzTG9jYWxTdG9yYWdlKTsKIAogcHJpdmF0ZToKLSAgICBSZWZQdHI8U3RvcmFnZUFyZWE+
IGZpbmRTdG9yYWdlQXJlYShFcnJvclN0cmluZyYsIGNvbnN0IEpTT046Ok9iamVjdCYsIEZyYW1l
KiYpOworICAgIFJlZlB0cjxTdG9yYWdlQXJlYT4gZmluZFN0b3JhZ2VBcmVhKEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkVycm9yU3RyaW5nJiwgUmVmPEpTT046Ok9iamVjdD4mJiBzdG9yYWdlSWQsIEZy
YW1lKiYpOwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPEluc3BlY3Rvcjo6RE9NU3RvcmFnZUZyb250
ZW5kRGlzcGF0Y2hlcj4gbV9mcm9udGVuZERpc3BhdGNoZXI7CiAgICAgUmVmUHRyPEluc3BlY3Rv
cjo6RE9NU3RvcmFnZUJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVyOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JEYXRhYmFz
ZUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRGF0
YWJhc2VBZ2VudC5jcHAKaW5kZXggNGI5YTU1ZGU1NTdiZTk0NjcxNmY1ZTAyMTExNDQzNzExODJk
NmQ1Mi4uMjljMTE0ZjI2NzY4M2QyNTA2NTI3YWQ3Y2Y5ZDU3ZmJiMWU5MmYzYyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JEYXRhYmFzZUFnZW50
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRhdGFi
YXNlQWdlbnQuY3BwCkBAIC01OSw3ICs1OSw3IEBAIG5hbWVzcGFjZSB7CiAKIHZvaWQgcmVwb3J0
VHJhbnNhY3Rpb25GYWlsZWQoRXhlY3V0ZVNRTENhbGxiYWNrJiByZXF1ZXN0Q2FsbGJhY2ssIFNR
TEVycm9yJiBlcnJvcikKIHsKLSAgICBhdXRvIGVycm9yT2JqZWN0ID0gSW5zcGVjdG9yOjpQcm90
b2NvbDo6RGF0YWJhc2U6OkVycm9yOjpjcmVhdGUoKQorICAgIGF1dG8gZXJyb3JPYmplY3QgPSBQ
cm90b2NvbDo6RGF0YWJhc2U6OkVycm9yOjpjcmVhdGUoKQogICAgICAgICAuc2V0TWVzc2FnZShl
cnJvci5tZXNzYWdlSXNvbGF0ZWRDb3B5KCkpCiAgICAgICAgIC5zZXRDb2RlKGVycm9yLmNvZGUo
KSkKICAgICAgICAgLnJlbGVhc2UoKTsKQEAgLTIzMCw1MSArMjMwLDQ4IEBAIHZvaWQgSW5zcGVj
dG9yRGF0YWJhc2VBZ2VudDo6ZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6
RnJvbnRlbmRSb3V0CiAKIHZvaWQgSW5zcGVjdG9yRGF0YWJhc2VBZ2VudDo6d2lsbERlc3Ryb3lG
cm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKQogewotICAgIEVy
cm9yU3RyaW5nIGlnbm9yZWQ7Ci0gICAgZGlzYWJsZShpZ25vcmVkKTsKKyAgICBkaXNhYmxlKCk7
CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGF0YWJhc2VBZ2VudDo6ZW5hYmxlKEVycm9yU3RyaW5nJiBl
cnJvclN0cmluZykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRhdGFi
YXNlQWdlbnQ6OmVuYWJsZSgpCiB7Ci0gICAgaWYgKG1faW5zdHJ1bWVudGluZ0FnZW50cy5lbmFi
bGVkRGF0YWJhc2VBZ2VudCgpID09IHRoaXMpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiRGF0
YWJhc2UgZG9tYWluIGFscmVhZHkgZW5hYmxlZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
KyAgICBpZiAobV9pbnN0cnVtZW50aW5nQWdlbnRzLmVuYWJsZWREYXRhYmFzZUFnZW50KCkgPT0g
dGhpcykKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJEYXRhYmFzZSBkb21haW4gYWxy
ZWFkeSBlbmFibGVkIl9zKTsKIAogICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy5zZXRFbmFibGVk
RGF0YWJhc2VBZ2VudCh0aGlzKTsKIAogICAgIGZvciAoYXV0byYgZGF0YWJhc2UgOiBEYXRhYmFz
ZVRyYWNrZXI6OnNpbmdsZXRvbigpLm9wZW5EYXRhYmFzZXMoKSkKICAgICAgICAgZGlkT3BlbkRh
dGFiYXNlKGRhdGFiYXNlLmdldCgpKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5z
cGVjdG9yRGF0YWJhc2VBZ2VudDo6ZGlzYWJsZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCitQ
cm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JEYXRhYmFzZUFnZW50OjpkaXNh
YmxlKCkKIHsKLSAgICBpZiAobV9pbnN0cnVtZW50aW5nQWdlbnRzLmVuYWJsZWREYXRhYmFzZUFn
ZW50KCkgIT0gdGhpcykgewotICAgICAgICBlcnJvclN0cmluZyA9ICJEYXRhYmFzZSBkb21haW4g
YWxyZWFkeSBkaXNhYmxlZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAobV9p
bnN0cnVtZW50aW5nQWdlbnRzLmVuYWJsZWREYXRhYmFzZUFnZW50KCkgIT0gdGhpcykKKyAgICAg
ICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJEYXRhYmFzZSBkb21haW4gYWxyZWFkeSBkaXNhYmxl
ZCJfcyk7CiAKICAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMuc2V0RW5hYmxlZERhdGFiYXNlQWdl
bnQobnVsbHB0cik7CiAKICAgICBtX3Jlc291cmNlcy5jbGVhcigpOworCisgICAgcmV0dXJuIHsg
fTsKIH0KIAotdm9pZCBJbnNwZWN0b3JEYXRhYmFzZUFnZW50OjpnZXREYXRhYmFzZVRhYmxlTmFt
ZXMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlSWQsIFJl
ZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+JiBuYW1lcykKK1Byb3RvY29sOjpFcnJvclN0cmlu
Z09yPFJlZjxKU09OOjpBcnJheU9mPFN0cmluZz4+PiBJbnNwZWN0b3JEYXRhYmFzZUFnZW50Ojpn
ZXREYXRhYmFzZVRhYmxlTmFtZXMoY29uc3QgUHJvdG9jb2w6OkRhdGFiYXNlOjpEYXRhYmFzZUlk
JiBkYXRhYmFzZUlkKQogewotICAgIGlmIChtX2luc3RydW1lbnRpbmdBZ2VudHMuZW5hYmxlZERh
dGFiYXNlQWdlbnQoKSAhPSB0aGlzKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIkRhdGFiYXNl
IGRvbWFpbiBtdXN0IGJlIGVuYWJsZWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBuYW1lcyA9IEpTT046OkFycmF5T2Y8U3RyaW5nPjo6Y3JlYXRlKCk7CisgICAgaWYgKG1faW5z
dHJ1bWVudGluZ0FnZW50cy5lbmFibGVkRGF0YWJhc2VBZ2VudCgpICE9IHRoaXMpCisgICAgICAg
IHJldHVybiBtYWtlVW5leHBlY3RlZCgiRGF0YWJhc2UgZG9tYWluIG11c3QgYmUgZW5hYmxlZCJf
cyk7CiAKKyAgICBhdXRvIG5hbWVzID0gSlNPTjo6QXJyYXlPZjxTdHJpbmc+OjpjcmVhdGUoKTsK
ICAgICBpZiAoYXV0byogZGF0YWJhc2UgPSBkYXRhYmFzZUZvcklkKGRhdGFiYXNlSWQpKSB7CiAg
ICAgICAgIGZvciAoYXV0byYgdGFibGVOYW1lIDogZGF0YWJhc2UtPnRhYmxlTmFtZXMoKSkKICAg
ICAgICAgICAgIG5hbWVzLT5hZGRJdGVtKHRhYmxlTmFtZSk7CiAgICAgfQorICAgIHJldHVybiBX
VEZNb3ZlKG5hbWVzKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JEYXRhYmFzZUFnZW50OjpleGVjdXRl
U1FMKGNvbnN0IFN0cmluZyYgZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBxdWVyeSwgUmVmPEV4
ZWN1dGVTUUxDYWxsYmFjaz4mJiByZXF1ZXN0Q2FsbGJhY2spCit2b2lkIEluc3BlY3RvckRhdGFi
YXNlQWdlbnQ6OmV4ZWN1dGVTUUwoY29uc3QgUHJvdG9jb2w6OkRhdGFiYXNlOjpEYXRhYmFzZUlk
JiBkYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIHF1ZXJ5LCBSZWY8RXhlY3V0ZVNRTENhbGxiYWNr
PiYmIHJlcXVlc3RDYWxsYmFjaykKIHsKICAgICBpZiAobV9pbnN0cnVtZW50aW5nQWdlbnRzLmVu
YWJsZWREYXRhYmFzZUFnZW50KCkgIT0gdGhpcykgewogICAgICAgICByZXF1ZXN0Q2FsbGJhY2st
PnNlbmRGYWlsdXJlKCJEYXRhYmFzZSBkb21haW4gbXVzdCBiZSBlbmFibGVkIl9zKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRGF0YWJhc2VB
Z2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JEYXRhYmFz
ZUFnZW50LmgKaW5kZXggNDMwNTAzMTkxY2RjYjk4NzlmZGI2NTUxMzljMTRiYjc3YTczNzQyZi4u
MDFjZWY0MzliNGFjNmRhZDJlNDEyNmI1NDM0MTZjNTM5NDMyY2JjNyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JEYXRhYmFzZUFnZW50LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JEYXRhYmFzZUFnZW50
LmgKQEAgLTQxLDI0ICs0MSwyMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBEYXRhYmFz
ZTsKIGNsYXNzIEluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2U7CiAKLXR5cGVkZWYgU3RyaW5nIEVy
cm9yU3RyaW5nOwotCiBjbGFzcyBJbnNwZWN0b3JEYXRhYmFzZUFnZW50IGZpbmFsIDogcHVibGlj
IEluc3BlY3RvckFnZW50QmFzZSwgcHVibGljIEluc3BlY3Rvcjo6RGF0YWJhc2VCYWNrZW5kRGlz
cGF0Y2hlckhhbmRsZXIgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEluc3BlY3RvckRhdGFi
YXNlQWdlbnQpOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIElu
c3BlY3RvckRhdGFiYXNlQWdlbnQoV2ViQWdlbnRDb250ZXh0Jik7Ci0gICAgfkluc3BlY3RvckRh
dGFiYXNlQWdlbnQoKSBvdmVycmlkZTsKKyAgICB+SW5zcGVjdG9yRGF0YWJhc2VBZ2VudCgpOwog
CiAgICAgLy8gSW5zcGVjdG9yQWdlbnRCYXNlCi0gICAgdm9pZCBkaWRDcmVhdGVGcm9udGVuZEFu
ZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9udGVuZFJvdXRlciosIEluc3BlY3Rvcjo6QmFja2VuZERp
c3BhdGNoZXIqKSBvdmVycmlkZTsKLSAgICB2b2lkIHdpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNr
ZW5kKEluc3BlY3Rvcjo6RGlzY29ubmVjdFJlYXNvbikgb3ZlcnJpZGU7CisgICAgdm9pZCBkaWRD
cmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9udGVuZFJvdXRlciosIEluc3Bl
Y3Rvcjo6QmFja2VuZERpc3BhdGNoZXIqKTsKKyAgICB2b2lkIHdpbGxEZXN0cm95RnJvbnRlbmRB
bmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlzY29ubmVjdFJlYXNvbik7CiAKICAgICAvLyBEYXRhYmFz
ZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcgotICAgIHZvaWQgZW5hYmxlKEVycm9yU3RyaW5nJikg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBkaXNhYmxlKEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAg
dm9pZCBnZXREYXRhYmFzZVRhYmxlTmFtZXMoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGRh
dGFiYXNlSWQsIFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+JiBuYW1lcykgb3ZlcnJpZGU7
Ci0gICAgdm9pZCBleGVjdXRlU1FMKGNvbnN0IFN0cmluZyYgZGF0YWJhc2VJZCwgY29uc3QgU3Ry
aW5nJiBxdWVyeSwgUmVmPEV4ZWN1dGVTUUxDYWxsYmFjaz4mJikgb3ZlcnJpZGU7CisgICAgSW5z
cGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBlbmFibGUoKTsKKyAgICBJbnNw
ZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGRpc2FibGUoKTsKKyAgICBJbnNw
ZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPFN0cmluZz4+
PiBnZXREYXRhYmFzZVRhYmxlTmFtZXMoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJh
c2U6OkRhdGFiYXNlSWQmKTsKKyAgICB2b2lkIGV4ZWN1dGVTUUwoY29uc3QgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6RGF0YWJhc2U6OkRhdGFiYXNlSWQmLCBjb25zdCBTdHJpbmcmIHF1ZXJ5LCBSZWY8
RXhlY3V0ZVNRTENhbGxiYWNrPiYmKTsKIAogICAgIC8vIEluc3BlY3Rvckluc3RydW1lbnRhdGlv
bgogICAgIHZvaWQgZGlkQ29tbWl0TG9hZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JJbmRleGVkREJBZ2VudC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckluZGV4ZWREQkFnZW50LmNwcAppbmRleCBm
ZjhmMzBmNDAzZjg1YzdkZGJlMzFiMTBlMDNjZWY1ZmNkZjdmMDA2Li5hMTQ1ZTA0ZWIyMThkZThh
NDJmZjg5ODI5OGI4YmVhNjgyYzRlZGUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvYWdlbnRzL0luc3BlY3RvckluZGV4ZWREQkFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckluZGV4ZWREQkFnZW50LmNwcApAQCAtNzAs
MjYgKzcwLDYgQEAKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQv
U3RyaW5nQ29uY2F0ZW5hdGVOdW1iZXJzLmg+CiAKLXVzaW5nIEpTT046OkFycmF5T2Y7Ci11c2lu
ZyBJbnNwZWN0b3I6OlByb3RvY29sOjpJbmRleGVkREI6OkRhdGFiYXNlV2l0aE9iamVjdFN0b3Jl
czsKLXVzaW5nIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkluZGV4ZWREQjo6RGF0YUVudHJ5OwotdXNp
bmcgSW5zcGVjdG9yOjpQcm90b2NvbDo6SW5kZXhlZERCOjpLZXk7Ci11c2luZyBJbnNwZWN0b3I6
OlByb3RvY29sOjpJbmRleGVkREI6OktleVBhdGg7Ci11c2luZyBJbnNwZWN0b3I6OlByb3RvY29s
OjpJbmRleGVkREI6OktleVJhbmdlOwotdXNpbmcgSW5zcGVjdG9yOjpQcm90b2NvbDo6SW5kZXhl
ZERCOjpPYmplY3RTdG9yZTsKLXVzaW5nIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkluZGV4ZWREQjo6
T2JqZWN0U3RvcmVJbmRleDsKLQotdHlwZWRlZiBJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVy
OjpDYWxsYmFja0Jhc2UgUmVxdWVzdENhbGxiYWNrOwotdHlwZWRlZiBJbnNwZWN0b3I6OkluZGV4
ZWREQkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UmVxdWVzdERhdGFiYXNlTmFtZXNDYWxsYmFj
ayBSZXF1ZXN0RGF0YWJhc2VOYW1lc0NhbGxiYWNrOwotdHlwZWRlZiBJbnNwZWN0b3I6OkluZGV4
ZWREQkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UmVxdWVzdERhdGFiYXNlQ2FsbGJhY2sgUmVx
dWVzdERhdGFiYXNlQ2FsbGJhY2s7Ci10eXBlZGVmIEluc3BlY3Rvcjo6SW5kZXhlZERCQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyOjpSZXF1ZXN0RGF0YUNhbGxiYWNrIFJlcXVlc3REYXRhQ2FsbGJh
Y2s7Ci10eXBlZGVmIEluc3BlY3Rvcjo6SW5kZXhlZERCQmFja2VuZERpc3BhdGNoZXJIYW5kbGVy
OjpDbGVhck9iamVjdFN0b3JlQ2FsbGJhY2sgQ2xlYXJPYmplY3RTdG9yZUNhbGxiYWNrOwotCi10
eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci11c2lu
ZyBFcnJvclN0cmluZ09yID0gRXhwZWN0ZWQ8VCwgRXJyb3JTdHJpbmc+OwotCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CkBAIC0xMDMsNyArODMsNyBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCB+RXhlY3V0YWJsZVdpdGhEYXRhYmFzZSgpID0gZGVmYXVs
dDsKICAgICB2b2lkIHN0YXJ0KElEQkZhY3RvcnkqLCBTZWN1cml0eU9yaWdpbiosIGNvbnN0IFN0
cmluZyYgZGF0YWJhc2VOYW1lKTsKICAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZShJREJEYXRhYmFz
ZSYpID0gMDsKLSAgICB2aXJ0dWFsIFJlcXVlc3RDYWxsYmFjayYgcmVxdWVzdENhbGxiYWNrKCkg
PSAwOworICAgIHZpcnR1YWwgQmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZSYgcmVxdWVz
dENhbGxiYWNrKCkgPSAwOwogICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQoKSBj
b25zdCB7IHJldHVybiBtX2NvbnRleHQ7IH0KIHByaXZhdGU6CiAgICAgU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogbV9jb250ZXh0OwpAQCAtMTcxLDIwICsxNTEsMjAgQEAgdm9pZCBFeGVjdXRhYmxl
V2l0aERhdGFiYXNlOjpzdGFydChJREJGYWN0b3J5KiBpZGJGYWN0b3J5LCBTZWN1cml0eU9yaWdp
biosIGNvbnMKIH0KIAogCi1zdGF0aWMgUmVmUHRyPEtleVBhdGg+IGtleVBhdGhGcm9tSURCS2V5
UGF0aChjb25zdCBPcHRpb25hbDxJREJLZXlQYXRoPiYgaWRiS2V5UGF0aCkKK3N0YXRpYyBSZWY8
UHJvdG9jb2w6OkluZGV4ZWREQjo6S2V5UGF0aD4ga2V5UGF0aEZyb21JREJLZXlQYXRoKGNvbnN0
IE9wdGlvbmFsPElEQktleVBhdGg+JiBpZGJLZXlQYXRoKQogewogICAgIGlmICghaWRiS2V5UGF0
aCkKLSAgICAgICAgcmV0dXJuIEtleVBhdGg6OmNyZWF0ZSgpLnNldFR5cGUoS2V5UGF0aDo6VHlw
ZTo6TnVsbCkucmVsZWFzZSgpOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OkluZGV4ZWREQjo6
S2V5UGF0aDo6Y3JlYXRlKCkuc2V0VHlwZShQcm90b2NvbDo6SW5kZXhlZERCOjpLZXlQYXRoOjpU
eXBlOjpOdWxsKS5yZWxlYXNlKCk7CiAKICAgICBhdXRvIHZpc2l0b3IgPSBXVEY6Om1ha2VWaXNp
dG9yKFtdKGNvbnN0IFN0cmluZyYgc3RyaW5nKSB7Ci0gICAgICAgIGF1dG8ga2V5UGF0aCA9IEtl
eVBhdGg6OmNyZWF0ZSgpLnNldFR5cGUoS2V5UGF0aDo6VHlwZTo6U3RyaW5nKS5yZWxlYXNlKCk7
CisgICAgICAgIGF1dG8ga2V5UGF0aCA9IFByb3RvY29sOjpJbmRleGVkREI6OktleVBhdGg6OmNy
ZWF0ZSgpLnNldFR5cGUoUHJvdG9jb2w6OkluZGV4ZWREQjo6S2V5UGF0aDo6VHlwZTo6U3RyaW5n
KS5yZWxlYXNlKCk7CiAgICAgICAgIGtleVBhdGgtPnNldFN0cmluZyhzdHJpbmcpOwogICAgICAg
ICByZXR1cm4ga2V5UGF0aDsKICAgICB9LCBbXShjb25zdCBWZWN0b3I8U3RyaW5nPiYgdmVjdG9y
KSB7CiAgICAgICAgIGF1dG8gYXJyYXkgPSBKU09OOjpBcnJheU9mPFN0cmluZz46OmNyZWF0ZSgp
OwogICAgICAgICBmb3IgKGF1dG8mIHN0cmluZyA6IHZlY3RvcikKICAgICAgICAgICAgIGFycmF5
LT5hZGRJdGVtKHN0cmluZyk7Ci0gICAgICAgIGF1dG8ga2V5UGF0aCA9IEtleVBhdGg6OmNyZWF0
ZSgpLnNldFR5cGUoS2V5UGF0aDo6VHlwZTo6QXJyYXkpLnJlbGVhc2UoKTsKKyAgICAgICAgYXV0
byBrZXlQYXRoID0gUHJvdG9jb2w6OkluZGV4ZWREQjo6S2V5UGF0aDo6Y3JlYXRlKCkuc2V0VHlw
ZShQcm90b2NvbDo6SW5kZXhlZERCOjpLZXlQYXRoOjpUeXBlOjpBcnJheSkucmVsZWFzZSgpOwog
ICAgICAgICBrZXlQYXRoLT5zZXRBcnJheShXVEZNb3ZlKGFycmF5KSk7CiAgICAgICAgIHJldHVy
biBrZXlQYXRoOwogICAgIH0pOwpAQCAtMjE3LDcgKzE5Nyw3IEBAIHN0YXRpYyBSZWZQdHI8SURC
SW5kZXg+IGluZGV4Rm9yT2JqZWN0U3RvcmUoSURCT2JqZWN0U3RvcmUqIGlkYk9iamVjdFN0b3Jl
LCBjb25zCiAKIGNsYXNzIERhdGFiYXNlTG9hZGVyIGZpbmFsIDogcHVibGljIEV4ZWN1dGFibGVX
aXRoRGF0YWJhc2UgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RGF0YWJhc2VMb2FkZXI+IGNy
ZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBSZWY8UmVxdWVzdERhdGFiYXNl
Q2FsbGJhY2s+JiYgcmVxdWVzdENhbGxiYWNrKQorICAgIHN0YXRpYyBSZWY8RGF0YWJhc2VMb2Fk
ZXI+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBSZWY8SW5kZXhlZERC
QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpSZXF1ZXN0RGF0YWJhc2VDYWxsYmFjaz4mJiByZXF1
ZXN0Q2FsbGJhY2spCiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEYXRhYmFz
ZUxvYWRlcihjb250ZXh0LCBXVEZNb3ZlKHJlcXVlc3RDYWxsYmFjaykpKTsKICAgICB9CkBAIC0y
MzAsMTcgKzIxMCwxNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm47CiAgICAgCiAgICAg
ICAgIGF1dG8mIGRhdGFiYXNlSW5mbyA9IGRhdGFiYXNlLmluZm8oKTsKLSAgICAgICAgYXV0byBv
YmplY3RTdG9yZXMgPSBKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkluZGV4ZWRE
Qjo6T2JqZWN0U3RvcmU+OjpjcmVhdGUoKTsKKyAgICAgICAgYXV0byBvYmplY3RTdG9yZXMgPSBK
U09OOjpBcnJheU9mPFByb3RvY29sOjpJbmRleGVkREI6Ok9iamVjdFN0b3JlPjo6Y3JlYXRlKCk7
CiAgICAgICAgIGF1dG8gb2JqZWN0U3RvcmVOYW1lcyA9IGRhdGFiYXNlSW5mby5vYmplY3RTdG9y
ZU5hbWVzKCk7CiAgICAgICAgIGZvciAoYXV0byYgbmFtZSA6IG9iamVjdFN0b3JlTmFtZXMpIHsK
ICAgICAgICAgICAgIGF1dG8qIG9iamVjdFN0b3JlSW5mbyA9IGRhdGFiYXNlSW5mby5pbmZvRm9y
RXhpc3RpbmdPYmplY3RTdG9yZShuYW1lKTsKICAgICAgICAgICAgIGlmICghb2JqZWN0U3RvcmVJ
bmZvKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAgICBhdXRvIGluZGV4
ZXMgPSBKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkluZGV4ZWREQjo6T2JqZWN0
U3RvcmVJbmRleD46OmNyZWF0ZSgpOworICAgICAgICAgICAgYXV0byBpbmRleGVzID0gSlNPTjo6
QXJyYXlPZjxQcm90b2NvbDo6SW5kZXhlZERCOjpPYmplY3RTdG9yZUluZGV4Pjo6Y3JlYXRlKCk7
CiAgICAgCiAgICAgICAgICAgICBmb3IgKGF1dG8mIGluZGV4SW5mbyA6IG9iamVjdFN0b3JlSW5m
by0+aW5kZXhNYXAoKS52YWx1ZXMoKSkgewotICAgICAgICAgICAgICAgIGF1dG8gb2JqZWN0U3Rv
cmVJbmRleCA9IE9iamVjdFN0b3JlSW5kZXg6OmNyZWF0ZSgpCisgICAgICAgICAgICAgICAgYXV0
byBvYmplY3RTdG9yZUluZGV4ID0gUHJvdG9jb2w6OkluZGV4ZWREQjo6T2JqZWN0U3RvcmVJbmRl
eDo6Y3JlYXRlKCkKICAgICAgICAgICAgICAgICAgICAgLnNldE5hbWUoaW5kZXhJbmZvLm5hbWUo
KSkKICAgICAgICAgICAgICAgICAgICAgLnNldEtleVBhdGgoa2V5UGF0aEZyb21JREJLZXlQYXRo
KGluZGV4SW5mby5rZXlQYXRoKCkpKQogICAgICAgICAgICAgICAgICAgICAuc2V0VW5pcXVlKGlu
ZGV4SW5mby51bmlxdWUoKSkKQEAgLTI0OSw3ICsyMjksNyBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICAgICAgaW5kZXhlcy0+YWRkSXRlbShXVEZNb3ZlKG9iamVjdFN0b3JlSW5kZXgpKTsKICAgICAg
ICAgICAgIH0KICAgICAKLSAgICAgICAgICAgIGF1dG8gb2JqZWN0U3RvcmUgPSBPYmplY3RTdG9y
ZTo6Y3JlYXRlKCkKKyAgICAgICAgICAgIGF1dG8gb2JqZWN0U3RvcmUgPSBQcm90b2NvbDo6SW5k
ZXhlZERCOjpPYmplY3RTdG9yZTo6Y3JlYXRlKCkKICAgICAgICAgICAgICAgICAuc2V0TmFtZShv
YmplY3RTdG9yZUluZm8tPm5hbWUoKSkKICAgICAgICAgICAgICAgICAuc2V0S2V5UGF0aChrZXlQ
YXRoRnJvbUlEQktleVBhdGgob2JqZWN0U3RvcmVJbmZvLT5rZXlQYXRoKCkpKQogICAgICAgICAg
ICAgICAgIC5zZXRBdXRvSW5jcmVtZW50KG9iamVjdFN0b3JlSW5mby0+YXV0b0luY3JlbWVudCgp
KQpAQCAtMjU4LDcgKzIzOCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIG9iamVjdFN0b3Jlcy0+
YWRkSXRlbShXVEZNb3ZlKG9iamVjdFN0b3JlKSk7CiAgICAgICAgIH0KICAgICAKLSAgICAgICAg
YXV0byByZXN1bHQgPSBEYXRhYmFzZVdpdGhPYmplY3RTdG9yZXM6OmNyZWF0ZSgpCisgICAgICAg
IGF1dG8gcmVzdWx0ID0gUHJvdG9jb2w6OkluZGV4ZWREQjo6RGF0YWJhc2VXaXRoT2JqZWN0U3Rv
cmVzOjpjcmVhdGUoKQogICAgICAgICAgICAgLnNldE5hbWUoZGF0YWJhc2VJbmZvLm5hbWUoKSkK
ICAgICAgICAgICAgIC5zZXRWZXJzaW9uKGRhdGFiYXNlSW5mby52ZXJzaW9uKCkpCiAgICAgICAg
ICAgICAuc2V0T2JqZWN0U3RvcmVzKFdURk1vdmUob2JqZWN0U3RvcmVzKSkKQEAgLTI2Niw5MiAr
MjQ2LDk2IEBAIHB1YmxpYzoKICAgICAgICAgbV9yZXF1ZXN0Q2FsbGJhY2stPnNlbmRTdWNjZXNz
KFdURk1vdmUocmVzdWx0KSk7CiAgICAgfQogCi0gICAgUmVxdWVzdENhbGxiYWNrJiByZXF1ZXN0
Q2FsbGJhY2soKSBvdmVycmlkZSB7IHJldHVybiBtX3JlcXVlc3RDYWxsYmFjay5nZXQoKTsgfQor
ICAgIEJhY2tlbmREaXNwYXRjaGVyOjpDYWxsYmFja0Jhc2UmIHJlcXVlc3RDYWxsYmFjaygpIG92
ZXJyaWRlIHsgcmV0dXJuIG1fcmVxdWVzdENhbGxiYWNrLmdldCgpOyB9CiBwcml2YXRlOgotICAg
IERhdGFiYXNlTG9hZGVyKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFJlZjxSZXF1
ZXN0RGF0YWJhc2VDYWxsYmFjaz4mJiByZXF1ZXN0Q2FsbGJhY2spCisgICAgRGF0YWJhc2VMb2Fk
ZXIoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUmVmPEluZGV4ZWREQkJhY2tlbmRE
aXNwYXRjaGVySGFuZGxlcjo6UmVxdWVzdERhdGFiYXNlQ2FsbGJhY2s+JiYgcmVxdWVzdENhbGxi
YWNrKQogICAgICAgICA6IEV4ZWN1dGFibGVXaXRoRGF0YWJhc2UoY29udGV4dCkKICAgICAgICAg
LCBtX3JlcXVlc3RDYWxsYmFjayhXVEZNb3ZlKHJlcXVlc3RDYWxsYmFjaykpIHsgfQotICAgIFJl
ZjxSZXF1ZXN0RGF0YWJhc2VDYWxsYmFjaz4gbV9yZXF1ZXN0Q2FsbGJhY2s7CisgICAgUmVmPElu
ZGV4ZWREQkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UmVxdWVzdERhdGFiYXNlQ2FsbGJhY2s+
IG1fcmVxdWVzdENhbGxiYWNrOwogfTsKIAotc3RhdGljIFJlZlB0cjxJREJLZXk+IGlkYktleUZy
b21JbnNwZWN0b3JPYmplY3QoSlNPTjo6T2JqZWN0KiBrZXkpCitzdGF0aWMgUmVmUHRyPElEQktl
eT4gaWRiS2V5RnJvbUluc3BlY3Rvck9iamVjdChSZWY8SlNPTjo6T2JqZWN0PiYmIGtleSkKIHsK
LSAgICBTdHJpbmcgdHlwZTsKLSAgICBpZiAoIWtleS0+Z2V0U3RyaW5nKCJ0eXBlIiwgdHlwZSkp
CisgICAgYXV0byB0eXBlU3RyaW5nID0ga2V5LT5nZXRTdHJpbmcoUHJvdG9jb2w6OkluZGV4ZWRE
Qjo6S2V5Ojp0eXBlS2V5KTsKKyAgICBpZiAoIXR5cGVTdHJpbmcpCiAgICAgICAgIHJldHVybiBu
dWxscHRyOwogCi0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0cmluZz4gbnVtYmVy
VHlwZShNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgibnVtYmVyIikpOwotICAgIHN0YXRpYyBOZXZl
ckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IHN0cmluZ1R5cGUoTUFLRV9TVEFUSUNfU1RSSU5HX0lN
UEwoInN0cmluZyIpKTsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiBk
YXRlVHlwZShNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgiZGF0ZSIpKTsKLSAgICBzdGF0aWMgTmV2
ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiBhcnJheVR5cGUoTUFLRV9TVEFUSUNfU1RSSU5HX0lN
UEwoImFycmF5IikpOworICAgIGF1dG8gdHlwZSA9IFByb3RvY29sOjpIZWxwZXJzOjpwYXJzZUVu
dW1WYWx1ZUZyb21TdHJpbmc8UHJvdG9jb2w6OkluZGV4ZWREQjo6S2V5OjpUeXBlPih0eXBlU3Ry
aW5nKTsKKyAgICBpZiAoIXR5cGUpCisgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgUmVm
UHRyPElEQktleT4gaWRiS2V5OwotICAgIGlmICh0eXBlID09IG51bWJlclR5cGUpIHsKLSAgICAg
ICAgZG91YmxlIG51bWJlcjsKLSAgICAgICAgaWYgKCFrZXktPmdldERvdWJsZSgibnVtYmVyIiwg
bnVtYmVyKSkKKyAgICBzd2l0Y2ggKCp0eXBlKSB7CisgICAgY2FzZSBQcm90b2NvbDo6SW5kZXhl
ZERCOjpLZXk6OlR5cGU6Ok51bWJlcjogeworICAgICAgICBhdXRvIG51bWJlciA9IGtleS0+Z2V0
RG91YmxlKFByb3RvY29sOjpJbmRleGVkREI6OktleTo6bnVtYmVyS2V5KTsKKyAgICAgICAgaWYg
KCFudW1iZXIpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgaWRiS2V5ID0g
SURCS2V5OjpjcmVhdGVOdW1iZXIobnVtYmVyKTsKLSAgICB9IGVsc2UgaWYgKHR5cGUgPT0gc3Ry
aW5nVHlwZSkgewotICAgICAgICBTdHJpbmcgc3RyaW5nOwotICAgICAgICBpZiAoIWtleS0+Z2V0
U3RyaW5nKCJzdHJpbmciLCBzdHJpbmcpKQorICAgICAgICByZXR1cm4gSURCS2V5OjpjcmVhdGVO
dW1iZXIoKm51bWJlcik7CisgICAgfQorCisgICAgY2FzZSBQcm90b2NvbDo6SW5kZXhlZERCOjpL
ZXk6OlR5cGU6OlN0cmluZzogeworICAgICAgICBhdXRvIHN0cmluZyA9IGtleS0+Z2V0U3RyaW5n
KFByb3RvY29sOjpJbmRleGVkREI6OktleTo6c3RyaW5nS2V5KTsKKyAgICAgICAgaWYgKCFzdHJp
bmcpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgaWRiS2V5ID0gSURCS2V5
OjpjcmVhdGVTdHJpbmcoc3RyaW5nKTsKLSAgICB9IGVsc2UgaWYgKHR5cGUgPT0gZGF0ZVR5cGUp
IHsKLSAgICAgICAgZG91YmxlIGRhdGU7Ci0gICAgICAgIGlmICgha2V5LT5nZXREb3VibGUoImRh
dGUiLCBkYXRlKSkKKyAgICAgICAgcmV0dXJuIElEQktleTo6Y3JlYXRlU3RyaW5nKHN0cmluZyk7
CisgICAgfQorCisgICAgY2FzZSBQcm90b2NvbDo6SW5kZXhlZERCOjpLZXk6OlR5cGU6OkRhdGU6
IHsKKyAgICAgICAgYXV0byBkYXRlID0ga2V5LT5nZXREb3VibGUoUHJvdG9jb2w6OkluZGV4ZWRE
Qjo6S2V5OjpkYXRlS2V5KTsKKyAgICAgICAgaWYgKCFkYXRlKQogICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0gICAgICAgIGlkYktleSA9IElEQktleTo6Y3JlYXRlRGF0ZShkYXRlKTsKLSAg
ICB9IGVsc2UgaWYgKHR5cGUgPT0gYXJyYXlUeXBlKSB7CisgICAgICAgIHJldHVybiBJREJLZXk6
OmNyZWF0ZURhdGUoKmRhdGUpOworICAgIH0KKworICAgIGNhc2UgUHJvdG9jb2w6OkluZGV4ZWRE
Qjo6S2V5OjpUeXBlOjpBcnJheTogeworICAgICAgICBhdXRvIGFycmF5ID0ga2V5LT5nZXRBcnJh
eShQcm90b2NvbDo6SW5kZXhlZERCOjpLZXk6OmFycmF5S2V5KTsKKyAgICAgICAgaWYgKCFhcnJh
eSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCiAgICAgICAgIFZlY3RvcjxSZWZQdHI8
SURCS2V5Pj4ga2V5QXJyYXk7Ci0gICAgICAgIFJlZlB0cjxKU09OOjpBcnJheT4gYXJyYXk7Ci0g
ICAgICAgIGlmICgha2V5LT5nZXRBcnJheSgiYXJyYXkiLCBhcnJheSkpCi0gICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhcnJheS0+bGVu
Z3RoKCk7ICsraSkgewotICAgICAgICAgICAgUmVmUHRyPEpTT046OlZhbHVlPiB2YWx1ZSA9IGFy
cmF5LT5nZXQoaSk7Ci0gICAgICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBvYmplY3Q7Ci0g
ICAgICAgICAgICBpZiAoIXZhbHVlLT5hc09iamVjdChvYmplY3QpKQorICAgICAgICAgICAgYXV0
byBvYmplY3QgPSBhcnJheS0+Z2V0KGkpLT5hc09iamVjdCgpOworICAgICAgICAgICAgaWYgKCFv
YmplY3QpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgICAgICBrZXlB
cnJheS5hcHBlbmQoaWRiS2V5RnJvbUluc3BlY3Rvck9iamVjdChvYmplY3QuZ2V0KCkpKTsKKyAg
ICAgICAgICAgIGtleUFycmF5LmFwcGVuZChpZGJLZXlGcm9tSW5zcGVjdG9yT2JqZWN0KG9iamVj
dC5yZWxlYXNlTm9uTnVsbCgpKSk7CiAgICAgICAgIH0KLSAgICAgICAgaWRiS2V5ID0gSURCS2V5
OjpjcmVhdGVBcnJheShrZXlBcnJheSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHJldHVybiBudWxs
cHRyOworICAgICAgICByZXR1cm4gSURCS2V5OjpjcmVhdGVBcnJheShrZXlBcnJheSk7CisgICAg
fQorICAgIH0KIAotICAgIHJldHVybiBpZGJLZXk7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLXN0YXRpYyBSZWZQdHI8SURCS2V5UmFuZ2U+IGlk
YktleVJhbmdlRnJvbUtleVJhbmdlKGNvbnN0IEpTT046Ok9iamVjdCoga2V5UmFuZ2UpCitzdGF0
aWMgUmVmUHRyPElEQktleVJhbmdlPiBpZGJLZXlSYW5nZUZyb21LZXlSYW5nZShKU09OOjpPYmpl
Y3QmIGtleVJhbmdlKQogewogICAgIFJlZlB0cjxJREJLZXk+IGlkYkxvd2VyOwotICAgIFJlZlB0
cjxKU09OOjpPYmplY3Q+IGxvd2VyOwotICAgIGlmIChrZXlSYW5nZS0+Z2V0T2JqZWN0KCJsb3dl
ciJfcywgbG93ZXIpKSB7Ci0gICAgICAgIGlkYkxvd2VyID0gaWRiS2V5RnJvbUluc3BlY3Rvck9i
amVjdChsb3dlci5nZXQoKSk7CisgICAgaWYgKGF1dG8gbG93ZXIgPSBrZXlSYW5nZS5nZXRPYmpl
Y3QoUHJvdG9jb2w6OkluZGV4ZWREQjo6S2V5UmFuZ2U6Omxvd2VyS2V5KSkgeworICAgICAgICBp
ZGJMb3dlciA9IGlkYktleUZyb21JbnNwZWN0b3JPYmplY3QobG93ZXIucmVsZWFzZU5vbk51bGwo
KSk7CiAgICAgICAgIGlmICghaWRiTG93ZXIpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
ICAgICB9CiAKICAgICBSZWZQdHI8SURCS2V5PiBpZGJVcHBlcjsKLSAgICBSZWZQdHI8SlNPTjo6
T2JqZWN0PiB1cHBlcjsKLSAgICBpZiAoa2V5UmFuZ2UtPmdldE9iamVjdCgidXBwZXIiX3MsIHVw
cGVyKSkgewotICAgICAgICBpZGJVcHBlciA9IGlkYktleUZyb21JbnNwZWN0b3JPYmplY3QodXBw
ZXIuZ2V0KCkpOworICAgIGlmIChhdXRvIHVwcGVyID0ga2V5UmFuZ2UuZ2V0T2JqZWN0KFByb3Rv
Y29sOjpJbmRleGVkREI6OktleVJhbmdlOjp1cHBlcktleSkpIHsKKyAgICAgICAgaWRiVXBwZXIg
PSBpZGJLZXlGcm9tSW5zcGVjdG9yT2JqZWN0KHVwcGVyLnJlbGVhc2VOb25OdWxsKCkpOwogICAg
ICAgICBpZiAoIWlkYlVwcGVyKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQog
Ci0gICAgYm9vbCBsb3dlck9wZW47Ci0gICAgaWYgKCFrZXlSYW5nZS0+Z2V0Qm9vbGVhbigibG93
ZXJPcGVuIl9zLCBsb3dlck9wZW4pKQorICAgIGF1dG8gbG93ZXJPcGVuID0ga2V5UmFuZ2UuZ2V0
Qm9vbGVhbihQcm90b2NvbDo6SW5kZXhlZERCOjpLZXlSYW5nZTo6bG93ZXJPcGVuS2V5KTsKKyAg
ICBpZiAoIWxvd2VyT3BlbikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBib29sIHVw
cGVyT3BlbjsKLSAgICBpZiAoIWtleVJhbmdlLT5nZXRCb29sZWFuKCJ1cHBlck9wZW4iX3MsIHVw
cGVyT3BlbikpCisgICAgYXV0byB1cHBlck9wZW4gPSBrZXlSYW5nZS5nZXRCb29sZWFuKFByb3Rv
Y29sOjpJbmRleGVkREI6OktleVJhbmdlOjp1cHBlck9wZW5LZXkpOworICAgIGlmICghdXBwZXJP
cGVuKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiBJREJLZXlSYW5nZTo6
Y3JlYXRlKFdURk1vdmUoaWRiTG93ZXIpLCBXVEZNb3ZlKGlkYlVwcGVyKSwgbG93ZXJPcGVuLCB1
cHBlck9wZW4pOworICAgIHJldHVybiBJREJLZXlSYW5nZTo6Y3JlYXRlKFdURk1vdmUoaWRiTG93
ZXIpLCBXVEZNb3ZlKGlkYlVwcGVyKSwgKmxvd2VyT3BlbiwgKnVwcGVyT3Blbik7CiB9CiAKIGNs
YXNzIE9wZW5DdXJzb3JDYWxsYmFjayBmaW5hbCA6IHB1YmxpYyBFdmVudExpc3RlbmVyIHsKIHB1
YmxpYzoKLSAgICBzdGF0aWMgUmVmPE9wZW5DdXJzb3JDYWxsYmFjaz4gY3JlYXRlKEluamVjdGVk
U2NyaXB0IGluamVjdGVkU2NyaXB0LCBSZWY8UmVxdWVzdERhdGFDYWxsYmFjaz4mJiByZXF1ZXN0
Q2FsbGJhY2ssIGludCBza2lwQ291bnQsIHVuc2lnbmVkIHBhZ2VTaXplKQorICAgIHN0YXRpYyBS
ZWY8T3BlbkN1cnNvckNhbGxiYWNrPiBjcmVhdGUoSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3Jp
cHQsIFJlZjxJbmRleGVkREJCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlJlcXVlc3REYXRhQ2Fs
bGJhY2s+JiYgcmVxdWVzdENhbGxiYWNrLCBpbnQgc2tpcENvdW50LCB1bnNpZ25lZCBwYWdlU2l6
ZSkKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE9wZW5DdXJzb3JDYWxsYmFj
ayhpbmplY3RlZFNjcmlwdCwgV1RGTW92ZShyZXF1ZXN0Q2FsbGJhY2spLCBza2lwQ291bnQsIHBh
Z2VTaXplKSk7CiAgICAgfQpAQCAtNDA1LDEzICszODksMjMgQEAgcHVibGljOgogICAgICAgICB9
CiAKICAgICAgICAgYXV0byogbGV4aWNhbEdsb2JhbE9iamVjdCA9IGNvbnRleHQuZXhlY1N0YXRl
KCk7Ci0gICAgICAgIGF1dG8ga2V5ID0gIHRvSlMoKmxleGljYWxHbG9iYWxPYmplY3QsICpsZXhp
Y2FsR2xvYmFsT2JqZWN0LCBjdXJzb3ItPmtleSgpKTsKLSAgICAgICAgYXV0byBwcmltYXJ5S2V5
ID0gdG9KUygqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmxleGljYWxHbG9iYWxPYmplY3QsIGN1cnNv
ci0+cHJpbWFyeUtleSgpKTsKLSAgICAgICAgYXV0byB2YWx1ZSA9IGRlc2VyaWFsaXplSURCVmFs
dWVUb0pTVmFsdWUoKmxleGljYWxHbG9iYWxPYmplY3QsIGN1cnNvci0+dmFsdWUoKSk7Ci0gICAg
ICAgIGF1dG8gZGF0YUVudHJ5ID0gRGF0YUVudHJ5OjpjcmVhdGUoKQotICAgICAgICAgICAgLnNl
dEtleShtX2luamVjdGVkU2NyaXB0LndyYXBPYmplY3Qoa2V5LCBTdHJpbmcoKSwgdHJ1ZSkpCi0g
ICAgICAgICAgICAuc2V0UHJpbWFyeUtleShtX2luamVjdGVkU2NyaXB0LndyYXBPYmplY3QocHJp
bWFyeUtleSwgU3RyaW5nKCksIHRydWUpKQotICAgICAgICAgICAgLnNldFZhbHVlKG1faW5qZWN0
ZWRTY3JpcHQud3JhcE9iamVjdCh2YWx1ZSwgU3RyaW5nKCksIHRydWUpKQorCisgICAgICAgIGF1
dG8ga2V5ID0gbV9pbmplY3RlZFNjcmlwdC53cmFwT2JqZWN0KHRvSlMoKmxleGljYWxHbG9iYWxP
YmplY3QsICpsZXhpY2FsR2xvYmFsT2JqZWN0LCBjdXJzb3ItPmtleSgpKSwgU3RyaW5nKCksIHRy
dWUpOworICAgICAgICBpZiAoIWtleSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBh
dXRvIHByaW1hcnlLZXkgPSBtX2luamVjdGVkU2NyaXB0LndyYXBPYmplY3QodG9KUygqbGV4aWNh
bEdsb2JhbE9iamVjdCwgKmxleGljYWxHbG9iYWxPYmplY3QsIGN1cnNvci0+cHJpbWFyeUtleSgp
KSwgU3RyaW5nKCksIHRydWUpOworICAgICAgICBpZiAoIXByaW1hcnlLZXkpCisgICAgICAgICAg
ICByZXR1cm47CisKKyAgICAgICAgYXV0byB2YWx1ZSA9IG1faW5qZWN0ZWRTY3JpcHQud3JhcE9i
amVjdChkZXNlcmlhbGl6ZUlEQlZhbHVlVG9KU1ZhbHVlKCpsZXhpY2FsR2xvYmFsT2JqZWN0LCBj
dXJzb3ItPnZhbHVlKCkpLCBTdHJpbmcoKSwgdHJ1ZSk7CisgICAgICAgIGlmICghdmFsdWUpCisg
ICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgYXV0byBkYXRhRW50cnkgPSBQcm90b2NvbDo6
SW5kZXhlZERCOjpEYXRhRW50cnk6OmNyZWF0ZSgpCisgICAgICAgICAgICAuc2V0S2V5KGtleS5y
ZWxlYXNlTm9uTnVsbCgpKQorICAgICAgICAgICAgLnNldFByaW1hcnlLZXkocHJpbWFyeUtleS5y
ZWxlYXNlTm9uTnVsbCgpKQorICAgICAgICAgICAgLnNldFZhbHVlKHZhbHVlLnJlbGVhc2VOb25O
dWxsKCkpCiAgICAgICAgICAgICAucmVsZWFzZSgpOwogICAgICAgICBtX3Jlc3VsdC0+YWRkSXRl
bShXVEZNb3ZlKGRhdGFFbnRyeSkpOwogICAgIH0KQEAgLTQyNCwyNSArNDE4LDI1IEBAIHB1Ymxp
YzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgT3BlbkN1cnNvckNhbGxiYWNrKEluamVjdGVkU2Ny
aXB0IGluamVjdGVkU2NyaXB0LCBSZWY8UmVxdWVzdERhdGFDYWxsYmFjaz4mJiByZXF1ZXN0Q2Fs
bGJhY2ssIGludCBza2lwQ291bnQsIHVuc2lnbmVkIHBhZ2VTaXplKQorICAgIE9wZW5DdXJzb3JD
YWxsYmFjayhJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdCwgUmVmPEluZGV4ZWREQkJhY2tl
bmREaXNwYXRjaGVySGFuZGxlcjo6UmVxdWVzdERhdGFDYWxsYmFjaz4mJiByZXF1ZXN0Q2FsbGJh
Y2ssIGludCBza2lwQ291bnQsIHVuc2lnbmVkIHBhZ2VTaXplKQogICAgICAgICA6IEV2ZW50TGlz
dGVuZXIoRXZlbnRMaXN0ZW5lcjo6Q1BQRXZlbnRMaXN0ZW5lclR5cGUpCiAgICAgICAgICwgbV9p
bmplY3RlZFNjcmlwdChpbmplY3RlZFNjcmlwdCkKICAgICAgICAgLCBtX3JlcXVlc3RDYWxsYmFj
ayhXVEZNb3ZlKHJlcXVlc3RDYWxsYmFjaykpCi0gICAgICAgICwgbV9yZXN1bHQoSlNPTjo6QXJy
YXlPZjxEYXRhRW50cnk+OjpjcmVhdGUoKSkKKyAgICAgICAgLCBtX3Jlc3VsdChKU09OOjpBcnJh
eU9mPFByb3RvY29sOjpJbmRleGVkREI6OkRhdGFFbnRyeT46OmNyZWF0ZSgpKQogICAgICAgICAs
IG1fc2tpcENvdW50KHNraXBDb3VudCkKICAgICAgICAgLCBtX3BhZ2VTaXplKHBhZ2VTaXplKQog
ICAgIHsKICAgICB9CiAgICAgSW5qZWN0ZWRTY3JpcHQgbV9pbmplY3RlZFNjcmlwdDsKLSAgICBS
ZWY8UmVxdWVzdERhdGFDYWxsYmFjaz4gbV9yZXF1ZXN0Q2FsbGJhY2s7Ci0gICAgUmVmPEpTT046
OkFycmF5T2Y8RGF0YUVudHJ5Pj4gbV9yZXN1bHQ7CisgICAgUmVmPEluZGV4ZWREQkJhY2tlbmRE
aXNwYXRjaGVySGFuZGxlcjo6UmVxdWVzdERhdGFDYWxsYmFjaz4gbV9yZXF1ZXN0Q2FsbGJhY2s7
CisgICAgUmVmPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkluZGV4ZWREQjo6RGF0YUVudHJ5Pj4g
bV9yZXN1bHQ7CiAgICAgaW50IG1fc2tpcENvdW50OwogICAgIHVuc2lnbmVkIG1fcGFnZVNpemU7
CiB9OwogCiBjbGFzcyBEYXRhTG9hZGVyIGZpbmFsIDogcHVibGljIEV4ZWN1dGFibGVXaXRoRGF0
YWJhc2UgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RGF0YUxvYWRlcj4gY3JlYXRlKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFJlZjxSZXF1ZXN0RGF0YUNhbGxiYWNrPiYmIHJl
cXVlc3RDYWxsYmFjaywgY29uc3QgSW5qZWN0ZWRTY3JpcHQmIGluamVjdGVkU2NyaXB0LCBjb25z
dCBTdHJpbmcmIG9iamVjdFN0b3JlTmFtZSwgY29uc3QgU3RyaW5nJiBpbmRleE5hbWUsIFJlZlB0
cjxJREJLZXlSYW5nZT4mJiBpZGJLZXlSYW5nZSwgaW50IHNraXBDb3VudCwgdW5zaWduZWQgcGFn
ZVNpemUpCisgICAgc3RhdGljIFJlZjxEYXRhTG9hZGVyPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogY29udGV4dCwgUmVmPEluZGV4ZWREQkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6
UmVxdWVzdERhdGFDYWxsYmFjaz4mJiByZXF1ZXN0Q2FsbGJhY2ssIGNvbnN0IEluamVjdGVkU2Ny
aXB0JiBpbmplY3RlZFNjcmlwdCwgY29uc3QgU3RyaW5nJiBvYmplY3RTdG9yZU5hbWUsIGNvbnN0
IFN0cmluZyYgaW5kZXhOYW1lLCBSZWZQdHI8SURCS2V5UmFuZ2U+JiYgaWRiS2V5UmFuZ2UsIGlu
dCBza2lwQ291bnQsIHVuc2lnbmVkIHBhZ2VTaXplKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgRGF0YUxvYWRlcihjb250ZXh0LCBXVEZNb3ZlKHJlcXVlc3RDYWxsYmFjayks
IGluamVjdGVkU2NyaXB0LCBvYmplY3RTdG9yZU5hbWUsIGluZGV4TmFtZSwgV1RGTW92ZShpZGJL
ZXlSYW5nZSksIHNraXBDb3VudCwgcGFnZVNpemUpKTsKICAgICB9CkBAIC00OTgsOCArNDkyLDgg
QEAgcHVibGljOgogICAgICAgICBpZGJSZXF1ZXN0LT5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFt
ZXMoKS5zdWNjZXNzRXZlbnQsIFdURk1vdmUob3BlbkN1cnNvckNhbGxiYWNrKSwgZmFsc2UpOwog
ICAgIH0KIAotICAgIFJlcXVlc3RDYWxsYmFjayYgcmVxdWVzdENhbGxiYWNrKCkgb3ZlcnJpZGUg
eyByZXR1cm4gbV9yZXF1ZXN0Q2FsbGJhY2suZ2V0KCk7IH0KLSAgICBEYXRhTG9hZGVyKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIFJlZjxSZXF1ZXN0RGF0
YUNhbGxiYWNrPiYmIHJlcXVlc3RDYWxsYmFjaywgY29uc3QgSW5qZWN0ZWRTY3JpcHQmIGluamVj
dGVkU2NyaXB0LCBjb25zdCBTdHJpbmcmIG9iamVjdFN0b3JlTmFtZSwgY29uc3QgU3RyaW5nJiBp
bmRleE5hbWUsIFJlZlB0cjxJREJLZXlSYW5nZT4gaWRiS2V5UmFuZ2UsIGludCBza2lwQ291bnQs
IHVuc2lnbmVkIHBhZ2VTaXplKQorICAgIEJhY2tlbmREaXNwYXRjaGVyOjpDYWxsYmFja0Jhc2Um
IHJlcXVlc3RDYWxsYmFjaygpIG92ZXJyaWRlIHsgcmV0dXJuIG1fcmVxdWVzdENhbGxiYWNrLmdl
dCgpOyB9CisgICAgRGF0YUxvYWRlcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVj
dXRpb25Db250ZXh0LCBSZWY8SW5kZXhlZERCQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpSZXF1
ZXN0RGF0YUNhbGxiYWNrPiYmIHJlcXVlc3RDYWxsYmFjaywgY29uc3QgSW5qZWN0ZWRTY3JpcHQm
IGluamVjdGVkU2NyaXB0LCBjb25zdCBTdHJpbmcmIG9iamVjdFN0b3JlTmFtZSwgY29uc3QgU3Ry
aW5nJiBpbmRleE5hbWUsIFJlZlB0cjxJREJLZXlSYW5nZT4gaWRiS2V5UmFuZ2UsIGludCBza2lw
Q291bnQsIHVuc2lnbmVkIHBhZ2VTaXplKQogICAgICAgICA6IEV4ZWN1dGFibGVXaXRoRGF0YWJh
c2Uoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkKICAgICAgICAgLCBtX3JlcXVlc3RDYWxsYmFjayhX
VEZNb3ZlKHJlcXVlc3RDYWxsYmFjaykpCiAgICAgICAgICwgbV9pbmplY3RlZFNjcmlwdChpbmpl
Y3RlZFNjcmlwdCkKQEAgLTUwOCw3ICs1MDIsNyBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9pZGJL
ZXlSYW5nZShXVEZNb3ZlKGlkYktleVJhbmdlKSkKICAgICAgICAgLCBtX3NraXBDb3VudChza2lw
Q291bnQpCiAgICAgICAgICwgbV9wYWdlU2l6ZShwYWdlU2l6ZSkgeyB9Ci0gICAgUmVmPFJlcXVl
c3REYXRhQ2FsbGJhY2s+IG1fcmVxdWVzdENhbGxiYWNrOworICAgIFJlZjxJbmRleGVkREJCYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlJlcXVlc3REYXRhQ2FsbGJhY2s+IG1fcmVxdWVzdENhbGxi
YWNrOwogICAgIEluamVjdGVkU2NyaXB0IG1faW5qZWN0ZWRTY3JpcHQ7CiAgICAgU3RyaW5nIG1f
b2JqZWN0U3RvcmVOYW1lOwogICAgIFN0cmluZyBtX2luZGV4TmFtZTsKQEAgLTUzNSwxOSArNTI5
LDIwIEBAIHZvaWQgSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQ6OmRpZENyZWF0ZUZyb250ZW5kQW5k
QmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kUm91CiAKIHZvaWQgSW5zcGVjdG9ySW5kZXhlZERC
QWdlbnQ6OndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlzY29ubmVj
dFJlYXNvbikKIHsKLSAgICBFcnJvclN0cmluZyBpZ25vcmVkOwotICAgIGRpc2FibGUoaWdub3Jl
ZCk7CisgICAgZGlzYWJsZSgpOwogfQogCi12b2lkIEluc3BlY3RvckluZGV4ZWREQkFnZW50Ojpl
bmFibGUoRXJyb3JTdHJpbmcmKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVj
dG9ySW5kZXhlZERCQWdlbnQ6OmVuYWJsZSgpCiB7CisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9p
ZCBJbnNwZWN0b3JJbmRleGVkREJBZ2VudDo6ZGlzYWJsZShFcnJvclN0cmluZyYpCitQcm90b2Nv
bDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JJbmRleGVkREJBZ2VudDo6ZGlzYWJsZSgp
CiB7CisgICAgcmV0dXJuIHsgfTsKIH0KIAotc3RhdGljIEVycm9yU3RyaW5nT3I8RG9jdW1lbnQq
PiBkb2N1bWVudEZyb21GcmFtZShGcmFtZSogZnJhbWUpCitzdGF0aWMgUHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8RG9jdW1lbnQqPiBkb2N1bWVudEZyb21GcmFtZShGcmFtZSogZnJhbWUpCiB7CiAg
ICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gZnJhbWUgPyBmcmFtZS0+ZG9jdW1lbnQoKSA6IG51bGxw
dHI7CiAgICAgaWYgKCFkb2N1bWVudCkKQEAgLTU1Niw3ICs1NTEsNyBAQCBzdGF0aWMgRXJyb3JT
dHJpbmdPcjxEb2N1bWVudCo+IGRvY3VtZW50RnJvbUZyYW1lKEZyYW1lKiBmcmFtZSkKICAgICBy
ZXR1cm4gZG9jdW1lbnQ7CiB9CiAKLXN0YXRpYyBFcnJvclN0cmluZ09yPElEQkZhY3RvcnkqPiBJ
REJGYWN0b3J5RnJvbURvY3VtZW50KERvY3VtZW50KiBkb2N1bWVudCkKK3N0YXRpYyBQcm90b2Nv
bDo6RXJyb3JTdHJpbmdPcjxJREJGYWN0b3J5Kj4gSURCRmFjdG9yeUZyb21Eb2N1bWVudChEb2N1
bWVudCogZG9jdW1lbnQpCiB7CiAgICAgRE9NV2luZG93KiBkb21XaW5kb3cgPSBkb2N1bWVudC0+
ZG9tV2luZG93KCk7CiAgICAgaWYgKCFkb21XaW5kb3cpCkBAIC01NzEsMTMgKzU2NiwxMyBAQCBz
dGF0aWMgRXJyb3JTdHJpbmdPcjxJREJGYWN0b3J5Kj4gSURCRmFjdG9yeUZyb21Eb2N1bWVudChE
b2N1bWVudCogZG9jdW1lbnQpCiAKIHN0YXRpYyBib29sIGdldERvY3VtZW50QW5kSURCRmFjdG9y
eUZyb21GcmFtZU9yU2VuZEZhaWx1cmUoRnJhbWUqIGZyYW1lLCBEb2N1bWVudComIG91dF9kb2N1
bWVudCwgSURCRmFjdG9yeSomIG91dF9pZGJGYWN0b3J5LCBCYWNrZW5kRGlzcGF0Y2hlcjo6Q2Fs
bGJhY2tCYXNlJiBjYWxsYmFjaykKIHsKLSAgICBFcnJvclN0cmluZ09yPERvY3VtZW50Kj4gZG9j
dW1lbnQgPSBkb2N1bWVudEZyb21GcmFtZShmcmFtZSk7CisgICAgUHJvdG9jb2w6OkVycm9yU3Ry
aW5nT3I8RG9jdW1lbnQqPiBkb2N1bWVudCA9IGRvY3VtZW50RnJvbUZyYW1lKGZyYW1lKTsKICAg
ICBpZiAoIWRvY3VtZW50Lmhhc192YWx1ZSgpKSB7CiAgICAgICAgIGNhbGxiYWNrLnNlbmRGYWls
dXJlKGRvY3VtZW50LmVycm9yKCkpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0g
ICAgRXJyb3JTdHJpbmdPcjxJREJGYWN0b3J5Kj4gaWRiRmFjdG9yeSA9IElEQkZhY3RvcnlGcm9t
RG9jdW1lbnQoZG9jdW1lbnQudmFsdWUoKSk7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8
SURCRmFjdG9yeSo+IGlkYkZhY3RvcnkgPSBJREJGYWN0b3J5RnJvbURvY3VtZW50KGRvY3VtZW50
LnZhbHVlKCkpOwogICAgIGlmICghaWRiRmFjdG9yeS5oYXNfdmFsdWUoKSkgewogICAgICAgICBj
YWxsYmFjay5zZW5kRmFpbHVyZShpZGJGYWN0b3J5LmVycm9yKCkpOwogICAgICAgICByZXR1cm4g
ZmFsc2U7CkBAIC02MjAsNyArNjE1LDcgQEAgdm9pZCBJbnNwZWN0b3JJbmRleGVkREJBZ2VudDo6
cmVxdWVzdERhdGFiYXNlKGNvbnN0IFN0cmluZyYgc2VjdXJpdHlPcmlnaW4sIGNvbnMKICAgICBk
YXRhYmFzZUxvYWRlci0+c3RhcnQoaWRiRmFjdG9yeSwgJmRvY3VtZW50LT5zZWN1cml0eU9yaWdp
bigpLCBkYXRhYmFzZU5hbWUpOwogfQogCi12b2lkIEluc3BlY3RvckluZGV4ZWREQkFnZW50Ojpy
ZXF1ZXN0RGF0YShjb25zdCBTdHJpbmcmIHNlY3VyaXR5T3JpZ2luLCBjb25zdCBTdHJpbmcmIGRh
dGFiYXNlTmFtZSwgY29uc3QgU3RyaW5nJiBvYmplY3RTdG9yZU5hbWUsIGNvbnN0IFN0cmluZyYg
aW5kZXhOYW1lLCBpbnQgc2tpcENvdW50LCBpbnQgcGFnZVNpemUsIGNvbnN0IEpTT046Ok9iamVj
dCoga2V5UmFuZ2UsIFJlZjxSZXF1ZXN0RGF0YUNhbGxiYWNrPiYmIGNhbGxiYWNrKQordm9pZCBJ
bnNwZWN0b3JJbmRleGVkREJBZ2VudDo6cmVxdWVzdERhdGEoY29uc3QgU3RyaW5nJiBzZWN1cml0
eU9yaWdpbiwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZU5hbWUsIGNvbnN0IFN0cmluZyYgb2JqZWN0
U3RvcmVOYW1lLCBjb25zdCBTdHJpbmcmIGluZGV4TmFtZSwgaW50IHNraXBDb3VudCwgaW50IHBh
Z2VTaXplLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIGtleVJhbmdlLCBSZWY8UmVxdWVzdERhdGFD
YWxsYmFjaz4mJiBjYWxsYmFjaykKIHsKICAgICBhdXRvKiBmcmFtZSA9IEluc3BlY3RvclBhZ2VB
Z2VudDo6ZmluZEZyYW1lV2l0aFNlY3VyaXR5T3JpZ2luKG1faW5zcGVjdGVkUGFnZSwgc2VjdXJp
dHlPcmlnaW4pOwogICAgIERvY3VtZW50KiBkb2N1bWVudDsKQEAgLTYyOSw3ICs2MjQsNyBAQCB2
b2lkIEluc3BlY3RvckluZGV4ZWREQkFnZW50OjpyZXF1ZXN0RGF0YShjb25zdCBTdHJpbmcmIHNl
Y3VyaXR5T3JpZ2luLCBjb25zdCBTdAogICAgICAgICByZXR1cm47CiAKICAgICBJbmplY3RlZFNj
cmlwdCBpbmplY3RlZFNjcmlwdCA9IG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmluamVjdGVkU2Ny
aXB0Rm9yKG1haW5Xb3JsZEV4ZWNTdGF0ZShmcmFtZSkpOwotICAgIFJlZlB0cjxJREJLZXlSYW5n
ZT4gaWRiS2V5UmFuZ2UgPSBrZXlSYW5nZSA/IGlkYktleVJhbmdlRnJvbUtleVJhbmdlKGtleVJh
bmdlKSA6IG51bGxwdHI7CisgICAgUmVmUHRyPElEQktleVJhbmdlPiBpZGJLZXlSYW5nZSA9IGtl
eVJhbmdlID8gaWRiS2V5UmFuZ2VGcm9tS2V5UmFuZ2UoKmtleVJhbmdlKSA6IG51bGxwdHI7CiAg
ICAgaWYgKGtleVJhbmdlICYmICFpZGJLZXlSYW5nZSkgewogICAgICAgICBjYWxsYmFjay0+c2Vu
ZEZhaWx1cmUoIkNvdWxkIG5vdCBwYXJzZSBrZXkgcmFuZ2UuIl9zKTsKICAgICAgICAgcmV0dXJu
OwpAQCAtNjQ0LDcgKzYzOSw3IEBAIG5hbWVzcGFjZSB7CiBjbGFzcyBDbGVhck9iamVjdFN0b3Jl
TGlzdGVuZXIgZmluYWwgOiBwdWJsaWMgRXZlbnRMaXN0ZW5lciB7CiAgICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoQ2xlYXJPYmplY3RTdG9yZUxpc3RlbmVyKTsKIHB1YmxpYzoKLSAgICBzdGF0aWMg
UmVmPENsZWFyT2JqZWN0U3RvcmVMaXN0ZW5lcj4gY3JlYXRlKFJlZjxDbGVhck9iamVjdFN0b3Jl
Q2FsbGJhY2s+IHJlcXVlc3RDYWxsYmFjaykKKyAgICBzdGF0aWMgUmVmPENsZWFyT2JqZWN0U3Rv
cmVMaXN0ZW5lcj4gY3JlYXRlKFJlZjxJbmRleGVkREJCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6
OkNsZWFyT2JqZWN0U3RvcmVDYWxsYmFjaz4gcmVxdWVzdENhbGxiYWNrKQogICAgIHsKICAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ2xlYXJPYmplY3RTdG9yZUxpc3RlbmVyKFdURk1vdmUo
cmVxdWVzdENhbGxiYWNrKSkpOwogICAgIH0KQEAgLTY2OCwyMyArNjYzLDIzIEBAIHB1YmxpYzoK
ICAgICAgICAgbV9yZXF1ZXN0Q2FsbGJhY2stPnNlbmRTdWNjZXNzKCk7CiAgICAgfQogcHJpdmF0
ZToKLSAgICBDbGVhck9iamVjdFN0b3JlTGlzdGVuZXIoUmVmPENsZWFyT2JqZWN0U3RvcmVDYWxs
YmFjaz4mJiByZXF1ZXN0Q2FsbGJhY2spCisgICAgQ2xlYXJPYmplY3RTdG9yZUxpc3RlbmVyKFJl
ZjxJbmRleGVkREJCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkNsZWFyT2JqZWN0U3RvcmVDYWxs
YmFjaz4mJiByZXF1ZXN0Q2FsbGJhY2spCiAgICAgICAgIDogRXZlbnRMaXN0ZW5lcihFdmVudExp
c3RlbmVyOjpDUFBFdmVudExpc3RlbmVyVHlwZSkKICAgICAgICAgLCBtX3JlcXVlc3RDYWxsYmFj
ayhXVEZNb3ZlKHJlcXVlc3RDYWxsYmFjaykpCiAgICAgewogICAgIH0KIAotICAgIFJlZjxDbGVh
ck9iamVjdFN0b3JlQ2FsbGJhY2s+IG1fcmVxdWVzdENhbGxiYWNrOworICAgIFJlZjxJbmRleGVk
REJCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkNsZWFyT2JqZWN0U3RvcmVDYWxsYmFjaz4gbV9y
ZXF1ZXN0Q2FsbGJhY2s7CiB9OwogCiBjbGFzcyBDbGVhck9iamVjdFN0b3JlIGZpbmFsIDogcHVi
bGljIEV4ZWN1dGFibGVXaXRoRGF0YWJhc2UgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8Q2xl
YXJPYmplY3RTdG9yZT4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNv
bnN0IFN0cmluZyYgb2JqZWN0U3RvcmVOYW1lLCBSZWY8Q2xlYXJPYmplY3RTdG9yZUNhbGxiYWNr
PiYmIHJlcXVlc3RDYWxsYmFjaykKKyAgICBzdGF0aWMgUmVmPENsZWFyT2JqZWN0U3RvcmU+IGNy
ZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIG9iamVj
dFN0b3JlTmFtZSwgUmVmPEluZGV4ZWREQkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6Q2xlYXJP
YmplY3RTdG9yZUNhbGxiYWNrPiYmIHJlcXVlc3RDYWxsYmFjaykKICAgICB7CiAgICAgICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IENsZWFyT2JqZWN0U3RvcmUoY29udGV4dCwgb2JqZWN0U3RvcmVO
YW1lLCBXVEZNb3ZlKHJlcXVlc3RDYWxsYmFjaykpKTsKICAgICB9CiAKLSAgICBDbGVhck9iamVj
dFN0b3JlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgb2Jq
ZWN0U3RvcmVOYW1lLCBSZWY8Q2xlYXJPYmplY3RTdG9yZUNhbGxiYWNrPiYmIHJlcXVlc3RDYWxs
YmFjaykKKyAgICBDbGVhck9iamVjdFN0b3JlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRl
eHQsIGNvbnN0IFN0cmluZyYgb2JqZWN0U3RvcmVOYW1lLCBSZWY8SW5kZXhlZERCQmFja2VuZERp
c3BhdGNoZXJIYW5kbGVyOjpDbGVhck9iamVjdFN0b3JlQ2FsbGJhY2s+JiYgcmVxdWVzdENhbGxi
YWNrKQogICAgICAgICA6IEV4ZWN1dGFibGVXaXRoRGF0YWJhc2UoY29udGV4dCkKICAgICAgICAg
LCBtX29iamVjdFN0b3JlTmFtZShvYmplY3RTdG9yZU5hbWUpCiAgICAgICAgICwgbV9yZXF1ZXN0
Q2FsbGJhY2soV1RGTW92ZShyZXF1ZXN0Q2FsbGJhY2spKQpAQCAtNzIzLDEwICs3MTgsMTAgQEAg
cHVibGljOgogICAgICAgICBpZGJUcmFuc2FjdGlvbi0+YWRkRXZlbnRMaXN0ZW5lcihldmVudE5h
bWVzKCkuY29tcGxldGVFdmVudCwgQ2xlYXJPYmplY3RTdG9yZUxpc3RlbmVyOjpjcmVhdGUobV9y
ZXF1ZXN0Q2FsbGJhY2suY29weVJlZigpKSwgZmFsc2UpOwogICAgIH0KIAotICAgIFJlcXVlc3RD
YWxsYmFjayYgcmVxdWVzdENhbGxiYWNrKCkgb3ZlcnJpZGUgeyByZXR1cm4gbV9yZXF1ZXN0Q2Fs
bGJhY2suZ2V0KCk7IH0KKyAgICBCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlJiByZXF1
ZXN0Q2FsbGJhY2soKSBvdmVycmlkZSB7IHJldHVybiBtX3JlcXVlc3RDYWxsYmFjay5nZXQoKTsg
fQogcHJpdmF0ZToKICAgICBjb25zdCBTdHJpbmcgbV9vYmplY3RTdG9yZU5hbWU7Ci0gICAgUmVm
PENsZWFyT2JqZWN0U3RvcmVDYWxsYmFjaz4gbV9yZXF1ZXN0Q2FsbGJhY2s7CisgICAgUmVmPElu
ZGV4ZWREQkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6Q2xlYXJPYmplY3RTdG9yZUNhbGxiYWNr
PiBtX3JlcXVlc3RDYWxsYmFjazsKIH07CiAKIH0gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JJbmRleGVk
REJBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JJbmRl
eGVkREJBZ2VudC5oCmluZGV4IGRiMjk3YmQ5Y2RhOGRhNmMwNDdhYjgyZmYzNTBhMmY0ZjU3NDhm
ZTkuLmU1NDRmOWM2ZjI1MzljNDExNzJkNWM2OTJlNGQyODBlNTQzMDIzOTEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckluZGV4ZWRE
QkFnZW50LmgKQEAgLTQ1LDI2ICs0NSwyNCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNz
IFBhZ2U7CiAKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCiBjbGFzcyBJbnNwZWN0b3JJ
bmRleGVkREJBZ2VudCBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3JBZ2VudEJhc2UsIHB1YmxpYyBJ
bnNwZWN0b3I6OkluZGV4ZWREQkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7CiAgICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQpOwogICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIEluc3BlY3RvckluZGV4ZWREQkFnZW50KFBhZ2VB
Z2VudENvbnRleHQmKTsKLSAgICB+SW5zcGVjdG9ySW5kZXhlZERCQWdlbnQoKSBvdmVycmlkZTsK
KyAgICB+SW5zcGVjdG9ySW5kZXhlZERCQWdlbnQoKTsKIAogICAgIC8vIEluc3BlY3RvckFnZW50
QmFzZQotICAgIHZvaWQgZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJv
bnRlbmRSb3V0ZXIqLCBJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyKikgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCB3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5l
Y3RSZWFzb24pIG92ZXJyaWRlOworICAgIHZvaWQgZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5k
KEluc3BlY3Rvcjo6RnJvbnRlbmRSb3V0ZXIqLCBJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVy
Kik7CisgICAgdm9pZCB3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkRp
c2Nvbm5lY3RSZWFzb24pOwogCiAgICAgLy8gSW5kZXhlZERCQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyCi0gICAgdm9pZCBlbmFibGUoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2b2lkIGRp
c2FibGUoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2b2lkIHJlcXVlc3REYXRhYmFzZU5h
bWVzKGNvbnN0IFN0cmluZyYgc2VjdXJpdHlPcmlnaW4sIFJlZjxSZXF1ZXN0RGF0YWJhc2VOYW1l
c0NhbGxiYWNrPiYmKSBvdmVycmlkZTsKLSAgICB2b2lkIHJlcXVlc3REYXRhYmFzZShjb25zdCBT
dHJpbmcmIHNlY3VyaXR5T3JpZ2luLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlTmFtZSwgUmVmPFJl
cXVlc3REYXRhYmFzZUNhbGxiYWNrPiYmKSBvdmVycmlkZTsKLSAgICB2b2lkIHJlcXVlc3REYXRh
KGNvbnN0IFN0cmluZyYgc2VjdXJpdHlPcmlnaW4sIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VOYW1l
LCBjb25zdCBTdHJpbmcmIG9iamVjdFN0b3JlTmFtZSwgY29uc3QgU3RyaW5nJiBpbmRleE5hbWUs
IGludCBza2lwQ291bnQsIGludCBwYWdlU2l6ZSwgY29uc3QgSlNPTjo6T2JqZWN0KiBrZXlSYW5n
ZSwgUmVmPFJlcXVlc3REYXRhQ2FsbGJhY2s+JiYpIG92ZXJyaWRlOwotICAgIHZvaWQgY2xlYXJP
YmplY3RTdG9yZShjb25zdCBTdHJpbmcmIHNlY3VyaXR5T3JpZ2luLCBjb25zdCBTdHJpbmcmIGRh
dGFiYXNlTmFtZSwgY29uc3QgU3RyaW5nJiBvYmplY3RTdG9yZU5hbWUsIFJlZjxDbGVhck9iamVj
dFN0b3JlQ2FsbGJhY2s+JiYpIG92ZXJyaWRlOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8dm9pZD4gZW5hYmxlKCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJy
b3JTdHJpbmdPcjx2b2lkPiBkaXNhYmxlKCk7CisgICAgdm9pZCByZXF1ZXN0RGF0YWJhc2VOYW1l
cyhjb25zdCBTdHJpbmcmIHNlY3VyaXR5T3JpZ2luLCBSZWY8UmVxdWVzdERhdGFiYXNlTmFtZXND
YWxsYmFjaz4mJik7CisgICAgdm9pZCByZXF1ZXN0RGF0YWJhc2UoY29uc3QgU3RyaW5nJiBzZWN1
cml0eU9yaWdpbiwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZU5hbWUsIFJlZjxSZXF1ZXN0RGF0YWJh
c2VDYWxsYmFjaz4mJik7CisgICAgdm9pZCByZXF1ZXN0RGF0YShjb25zdCBTdHJpbmcmIHNlY3Vy
aXR5T3JpZ2luLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlTmFtZSwgY29uc3QgU3RyaW5nJiBvYmpl
Y3RTdG9yZU5hbWUsIGNvbnN0IFN0cmluZyYgaW5kZXhOYW1lLCBpbnQgc2tpcENvdW50LCBpbnQg
cGFnZVNpemUsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYga2V5UmFuZ2UsIFJlZjxSZXF1ZXN0RGF0
YUNhbGxiYWNrPiYmKTsKKyAgICB2b2lkIGNsZWFyT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBz
ZWN1cml0eU9yaWdpbiwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZU5hbWUsIGNvbnN0IFN0cmluZyYg
b2JqZWN0U3RvcmVOYW1lLCBSZWY8Q2xlYXJPYmplY3RTdG9yZUNhbGxiYWNrPiYmKTsKIAogcHJp
dmF0ZToKICAgICBJbnNwZWN0b3I6OkluamVjdGVkU2NyaXB0TWFuYWdlciYgbV9pbmplY3RlZFNj
cmlwdE1hbmFnZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRz
L0luc3BlY3RvckxheWVyVHJlZUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9h
Z2VudHMvSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQuY3BwCmluZGV4IGJiOTk0YmY5OWZjMjUxNjY5
ZjhkNzNhNGRmMGI1NWVjMGY1NmM2MTMuLjUyZDNmZDcwZjZhMjk5ZDlhZjA0NjkyNGY0YmFlM2Rk
NWQ2MGIxMWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5z
cGVjdG9yTGF5ZXJUcmVlQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9h
Z2VudHMvSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQuY3BwCkBAIC02MSw4ICs2MSw3IEBAIHZvaWQg
SW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OmRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJbnNw
ZWN0b3I6OkZyb250ZW5kUm91CiAKIHZvaWQgSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OndpbGxE
ZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlzY29ubmVjdFJlYXNvbikKIHsK
LSAgICBFcnJvclN0cmluZyBpZ25vcmVkOwotICAgIGRpc2FibGUoaWdub3JlZCk7CisgICAgZGlz
YWJsZSgpOwogfQogCiB2b2lkIEluc3BlY3RvckxheWVyVHJlZUFnZW50OjpyZXNldCgpCkBAIC03
NCwxNiArNzMsMjAgQEAgdm9pZCBJbnNwZWN0b3JMYXllclRyZWVBZ2VudDo6cmVzZXQoKQogICAg
IG1fc3VwcHJlc3NMYXllckNoYW5nZUV2ZW50cyA9IGZhbHNlOwogfQogCi12b2lkIEluc3BlY3Rv
ckxheWVyVHJlZUFnZW50OjplbmFibGUoRXJyb3JTdHJpbmcmKQorUHJvdG9jb2w6OkVycm9yU3Ry
aW5nT3I8dm9pZD4gSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OmVuYWJsZSgpCiB7CiAgICAgbV9p
bnN0cnVtZW50aW5nQWdlbnRzLnNldEVuYWJsZWRMYXllclRyZWVBZ2VudCh0aGlzKTsKKworICAg
IHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OmRpc2FibGUo
RXJyb3JTdHJpbmcmKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yTGF5
ZXJUcmVlQWdlbnQ6OmRpc2FibGUoKQogewogICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy5zZXRF
bmFibGVkTGF5ZXJUcmVlQWdlbnQobnVsbHB0cik7CiAKICAgICByZXNldCgpOworCisgICAgcmV0
dXJuIHsgfTsKIH0KIAogdm9pZCBJbnNwZWN0b3JMYXllclRyZWVBZ2VudDo6bGF5ZXJUcmVlRGlk
Q2hhbmdlKCkKQEAgLTEwNiw1MSArMTA5LDQ5IEBAIHZvaWQgSW5zcGVjdG9yTGF5ZXJUcmVlQWdl
bnQ6OnBzZXVkb0VsZW1lbnREZXN0cm95ZWQoUHNldWRvRWxlbWVudCYgcHNldWRvRWxlbWVuCiAg
ICAgdW5iaW5kUHNldWRvRWxlbWVudCgmcHNldWRvRWxlbWVudCk7CiB9CiAKLXZvaWQgSW5zcGVj
dG9yTGF5ZXJUcmVlQWdlbnQ6OmxheWVyc0Zvck5vZGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5n
LCBpbnQgbm9kZUlkLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpM
YXllclRyZWU6OkxheWVyPj4mIGxheWVycykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxK
U09OOjpBcnJheU9mPFByb3RvY29sOjpMYXllclRyZWU6OkxheWVyPj4+IEluc3BlY3RvckxheWVy
VHJlZUFnZW50OjpsYXllcnNGb3JOb2RlKFByb3RvY29sOjpET006Ok5vZGVJZCBub2RlSWQpCiB7
Ci0gICAgbGF5ZXJzID0gSlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpMYXllclRy
ZWU6OkxheWVyPjo6Y3JlYXRlKCk7Ci0KICAgICBhdXRvKiBub2RlID0gbV9pbnN0cnVtZW50aW5n
QWdlbnRzLnBlcnNpc3RlbnRET01BZ2VudCgpLT5ub2RlRm9ySWQobm9kZUlkKTsKLSAgICBpZiAo
IW5vZGUpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWlzc2luZyBub2RlIGZvciBnaXZlbiBu
b2RlSWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKCFub2RlKQorICAgICAg
ICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk1pc3Npbmcgbm9kZSBmb3IgZ2l2ZW4gbm9kZUlkIl9z
KTsKIAogICAgIGF1dG8qIHJlbmRlcmVyID0gbm9kZS0+cmVuZGVyZXIoKTsKLSAgICBpZiAoIXJl
bmRlcmVyKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIk1pc3NpbmcgcmVuZGVyZXIgb2Ygbm9k
ZSBmb3IgZ2l2ZW4gbm9kZUlkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICgh
cmVuZGVyZXIpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTWlzc2luZyByZW5kZXJl
ciBvZiBub2RlIGZvciBnaXZlbiBub2RlSWQiX3MpOwogCiAgICAgaWYgKCFpczxSZW5kZXJFbGVt
ZW50PigqcmVuZGVyZXIpKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5l
eHBlY3RlZCgiTWlzc2luZyByZW5kZXJlciBvZiBlbGVtZW50IGZvciBnaXZlbiBub2RlSWQiX3Mp
OwogCi0gICAgZ2F0aGVyTGF5ZXJzVXNpbmdSZW5kZXJPYmplY3RIaWVyYXJjaHkoZXJyb3JTdHJp
bmcsIGRvd25jYXN0PFJlbmRlckVsZW1lbnQ+KCpyZW5kZXJlciksIGxheWVycyk7CisgICAgYXV0
byBsYXllcnMgPSBKU09OOjpBcnJheU9mPFByb3RvY29sOjpMYXllclRyZWU6OkxheWVyPjo6Y3Jl
YXRlKCk7CisKKyAgICBnYXRoZXJMYXllcnNVc2luZ1JlbmRlck9iamVjdEhpZXJhcmNoeShkb3du
Y2FzdDxSZW5kZXJFbGVtZW50PigqcmVuZGVyZXIpLCBsYXllcnMpOwogCiAgICAgbV9zdXBwcmVz
c0xheWVyQ2hhbmdlRXZlbnRzID0gZmFsc2U7CisKKyAgICByZXR1cm4gV1RGTW92ZShsYXllcnMp
OwogfQogCi12b2lkIEluc3BlY3RvckxheWVyVHJlZUFnZW50OjpnYXRoZXJMYXllcnNVc2luZ1Jl
bmRlck9iamVjdEhpZXJhcmNoeShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIFJlbmRlckVsZW1l
bnQmIHJlbmRlcmVyLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpM
YXllclRyZWU6OkxheWVyPj4mIGxheWVycykKK3ZvaWQgSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6
OmdhdGhlckxheWVyc1VzaW5nUmVuZGVyT2JqZWN0SGllcmFyY2h5KFJlbmRlckVsZW1lbnQmIHJl
bmRlcmVyLCBKU09OOjpBcnJheU9mPFByb3RvY29sOjpMYXllclRyZWU6OkxheWVyPiYgbGF5ZXJz
KQogewogICAgIGlmIChyZW5kZXJlci5oYXNMYXllcigpKSB7Ci0gICAgICAgIGdhdGhlckxheWVy
c1VzaW5nUmVuZGVyTGF5ZXJIaWVyYXJjaHkoZXJyb3JTdHJpbmcsIGRvd25jYXN0PFJlbmRlckxh
eWVyTW9kZWxPYmplY3Q+KHJlbmRlcmVyKS5sYXllcigpLCBsYXllcnMpOworICAgICAgICBnYXRo
ZXJMYXllcnNVc2luZ1JlbmRlckxheWVySGllcmFyY2h5KGRvd25jYXN0PFJlbmRlckxheWVyTW9k
ZWxPYmplY3Q+KHJlbmRlcmVyKS5sYXllcigpLCBsYXllcnMpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCiAgICAgZm9yIChhdXRvJiBjaGlsZCA6IGNoaWxkcmVuT2ZUeXBlPFJlbmRlckVsZW1l
bnQ+KHJlbmRlcmVyKSkKLSAgICAgICAgZ2F0aGVyTGF5ZXJzVXNpbmdSZW5kZXJPYmplY3RIaWVy
YXJjaHkoZXJyb3JTdHJpbmcsIGNoaWxkLCBsYXllcnMpOworICAgICAgICBnYXRoZXJMYXllcnNV
c2luZ1JlbmRlck9iamVjdEhpZXJhcmNoeShjaGlsZCwgbGF5ZXJzKTsKIH0KIAotdm9pZCBJbnNw
ZWN0b3JMYXllclRyZWVBZ2VudDo6Z2F0aGVyTGF5ZXJzVXNpbmdSZW5kZXJMYXllckhpZXJhcmNo
eShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIFJlbmRlckxheWVyKiByZW5kZXJMYXllciwgUmVm
UHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6TGF5ZXJUcmVlOjpMYXllcj4+
JiBsYXllcnMpCit2b2lkIEluc3BlY3RvckxheWVyVHJlZUFnZW50OjpnYXRoZXJMYXllcnNVc2lu
Z1JlbmRlckxheWVySGllcmFyY2h5KFJlbmRlckxheWVyKiByZW5kZXJMYXllciwgSlNPTjo6QXJy
YXlPZjxQcm90b2NvbDo6TGF5ZXJUcmVlOjpMYXllcj4mIGxheWVycykKIHsKICAgICBpZiAocmVu
ZGVyTGF5ZXItPmlzQ29tcG9zaXRlZCgpKQotICAgICAgICBsYXllcnMtPmFkZEl0ZW0oYnVpbGRP
YmplY3RGb3JMYXllcihlcnJvclN0cmluZywgcmVuZGVyTGF5ZXIpKTsKKyAgICAgICAgbGF5ZXJz
LmFkZEl0ZW0oYnVpbGRPYmplY3RGb3JMYXllcihyZW5kZXJMYXllcikpOwogCiAgICAgZm9yIChy
ZW5kZXJMYXllciA9IHJlbmRlckxheWVyLT5maXJzdENoaWxkKCk7IHJlbmRlckxheWVyOyByZW5k
ZXJMYXllciA9IHJlbmRlckxheWVyLT5uZXh0U2libGluZygpKQotICAgICAgICBnYXRoZXJMYXll
cnNVc2luZ1JlbmRlckxheWVySGllcmFyY2h5KGVycm9yU3RyaW5nLCByZW5kZXJMYXllciwgbGF5
ZXJzKTsKKyAgICAgICAgZ2F0aGVyTGF5ZXJzVXNpbmdSZW5kZXJMYXllckhpZXJhcmNoeShyZW5k
ZXJMYXllciwgbGF5ZXJzKTsKIH0KIAotUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkxheWVyVHJl
ZTo6TGF5ZXI+IEluc3BlY3RvckxheWVyVHJlZUFnZW50OjpidWlsZE9iamVjdEZvckxheWVyKEVy
cm9yU3RyaW5nJiBlcnJvclN0cmluZywgUmVuZGVyTGF5ZXIqIHJlbmRlckxheWVyKQorUmVmPFBy
b3RvY29sOjpMYXllclRyZWU6OkxheWVyPiBJbnNwZWN0b3JMYXllclRyZWVBZ2VudDo6YnVpbGRP
YmplY3RGb3JMYXllcihSZW5kZXJMYXllciogcmVuZGVyTGF5ZXIpCiB7CiAgICAgUmVuZGVyT2Jq
ZWN0KiByZW5kZXJlciA9ICZyZW5kZXJMYXllci0+cmVuZGVyZXIoKTsKICAgICBSZW5kZXJMYXll
ckJhY2tpbmcqIGJhY2tpbmcgPSByZW5kZXJMYXllci0+YmFja2luZygpOwpAQCAtMTcwLDkgKzE3
MSw5IEBAIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpMYXllclRyZWU6OkxheWVyPiBJbnNwZWN0
b3JMYXllclRyZWVBZ2VudDo6YnVpbGRPYmplY3RGCiAgICAgICAgIG5vZGUgPSByZW5kZXJlci0+
cGFyZW50KCktPmVsZW1lbnQoKTsKIAogICAgIC8vIEJhc2ljIHNldCBvZiBwcm9wZXJ0aWVzLgot
ICAgIGF1dG8gbGF5ZXJPYmplY3QgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpMYXllclRyZWU6Okxh
eWVyOjpjcmVhdGUoKQorICAgIGF1dG8gbGF5ZXJPYmplY3QgPSBQcm90b2NvbDo6TGF5ZXJUcmVl
OjpMYXllcjo6Y3JlYXRlKCkKICAgICAgICAgLnNldExheWVySWQoYmluZChyZW5kZXJMYXllcikp
Ci0gICAgICAgIC5zZXROb2RlSWQoaWRGb3JOb2RlKGVycm9yU3RyaW5nLCBub2RlKSkKKyAgICAg
ICAgLnNldE5vZGVJZChpZEZvck5vZGUobm9kZSkpCiAgICAgICAgIC5zZXRCb3VuZHMoYnVpbGRP
YmplY3RGb3JJbnRSZWN0KHJlbmRlcmVyLT5hYnNvbHV0ZUJvdW5kaW5nQm94UmVjdCgpKSkKICAg
ICAgICAgLnNldE1lbW9yeShiYWNraW5nLT5iYWNraW5nU3RvcmVNZW1vcnlFc3RpbWF0ZSgpKQog
ICAgICAgICAuc2V0Q29tcG9zaXRlZEJvdW5kcyhidWlsZE9iamVjdEZvckludFJlY3QoZW5jbG9z
aW5nSW50UmVjdChiYWNraW5nLT5jb21wb3NpdGVkQm91bmRzKCkpKSkKQEAgLTIwOSwyNSArMjEw
LDI1IEBAIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpMYXllclRyZWU6OkxheWVyPiBJbnNwZWN0
b3JMYXllclRyZWVBZ2VudDo6YnVpbGRPYmplY3RGCiAgICAgcmV0dXJuIGxheWVyT2JqZWN0Owog
fQogCi1pbnQgSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OmlkRm9yTm9kZShFcnJvclN0cmluZyYg
ZXJyb3JTdHJpbmcsIE5vZGUqIG5vZGUpCitQcm90b2NvbDo6RE9NOjpOb2RlSWQgSW5zcGVjdG9y
TGF5ZXJUcmVlQWdlbnQ6OmlkRm9yTm9kZShOb2RlKiBub2RlKQogewogICAgIGlmICghbm9kZSkK
ICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBJbnNwZWN0b3JET01BZ2VudCogZG9tQWdlbnQgPSBt
X2luc3RydW1lbnRpbmdBZ2VudHMucGVyc2lzdGVudERPTUFnZW50KCk7CiAgICAgCi0gICAgaW50
IG5vZGVJZCA9IGRvbUFnZW50LT5ib3VuZE5vZGVJZChub2RlKTsKKyAgICBhdXRvIG5vZGVJZCA9
IGRvbUFnZW50LT5ib3VuZE5vZGVJZChub2RlKTsKICAgICBpZiAoIW5vZGVJZCkgewogICAgICAg
ICAvLyBGSVhNRTogPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzIxMzQ5OT4gV2ViIEluc3BlY3Rvcjog
YWxsb3cgRE9NIG5vZGVzIHRvIGJlIGluc3RydW1lbnRlZCBhdCBhbnkgcG9pbnQsIHJlZ2FyZGxl
c3Mgb2Ygd2hldGhlciB0aGUgbWFpbiBkb2N1bWVudCBoYXMgYWxzbyBiZWVuIGluc3RydW1lbnRl
ZAotICAgICAgICBub2RlSWQgPSBkb21BZ2VudC0+cHVzaE5vZGVUb0Zyb250ZW5kKGVycm9yU3Ry
aW5nLCBkb21BZ2VudC0+Ym91bmROb2RlSWQoJm5vZGUtPmRvY3VtZW50KCkpLCBub2RlKTsKKyAg
ICAgICAgbm9kZUlkID0gZG9tQWdlbnQtPnB1c2hOb2RlVG9Gcm9udGVuZChub2RlKTsKICAgICB9
CiAKICAgICByZXR1cm4gbm9kZUlkOwogfQogCi1SZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6TGF5
ZXJUcmVlOjpJbnRSZWN0PiBJbnNwZWN0b3JMYXllclRyZWVBZ2VudDo6YnVpbGRPYmplY3RGb3JJ
bnRSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCitSZWY8UHJvdG9jb2w6OkxheWVyVHJlZTo6SW50
UmVjdD4gSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9ySW50UmVjdChjb25z
dCBJbnRSZWN0JiByZWN0KQogewotICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpMYXll
clRyZWU6OkludFJlY3Q6OmNyZWF0ZSgpCisgICAgcmV0dXJuIFByb3RvY29sOjpMYXllclRyZWU6
OkludFJlY3Q6OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRYKHJlY3QueCgpKQogICAgICAgICAuc2V0
WShyZWN0LnkoKSkKICAgICAgICAgLnNldFdpZHRoKHJlY3Qud2lkdGgoKSkKQEAgLTIzNSwxNyAr
MjM2LDE1IEBAIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpMYXllclRyZWU6OkludFJlY3Q+IElu
c3BlY3RvckxheWVyVHJlZUFnZW50OjpidWlsZE9iamVjCiAgICAgICAgIC5yZWxlYXNlKCk7CiB9
CiAKLXZvaWQgSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OnJlYXNvbnNGb3JDb21wb3NpdGluZ0xh
eWVyKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBsYXllcklkLCBSZWZQ
dHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6TGF5ZXJUcmVlOjpDb21wb3NpdGluZ1JlYXNvbnM+JiBj
b21wb3NpdGluZ1JlYXNvbnNSZXN1bHQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8UHJv
dG9jb2w6OkxheWVyVHJlZTo6Q29tcG9zaXRpbmdSZWFzb25zPj4gSW5zcGVjdG9yTGF5ZXJUcmVl
QWdlbnQ6OnJlYXNvbnNGb3JDb21wb3NpdGluZ0xheWVyKGNvbnN0IFByb3RvY29sOjpMYXllclRy
ZWU6OkxheWVySWQmIGxheWVySWQpCiB7CiAgICAgY29uc3QgUmVuZGVyTGF5ZXIqIHJlbmRlckxh
eWVyID0gbV9pZFRvTGF5ZXIuZ2V0KGxheWVySWQpOwogCi0gICAgaWYgKCFyZW5kZXJMYXllcikg
ewotICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIHJlbmRlciBsYXllciBmb3IgZ2l2ZW4g
bGF5ZXJJZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoIXJlbmRlckxheWVy
KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk1pc3NpbmcgcmVuZGVyIGxheWVyIGZv
ciBnaXZlbiBsYXllcklkIl9zKTsKIAogICAgIE9wdGlvblNldDxDb21wb3NpdGluZ1JlYXNvbj4g
cmVhc29ucyA9IHJlbmRlckxheWVyLT5jb21wb3NpdG9yKCkucmVhc29uc0ZvckNvbXBvc2l0aW5n
KCpyZW5kZXJMYXllcik7Ci0gICAgYXV0byBjb21wb3NpdGluZ1JlYXNvbnMgPSBJbnNwZWN0b3I6
OlByb3RvY29sOjpMYXllclRyZWU6OkNvbXBvc2l0aW5nUmVhc29uczo6Y3JlYXRlKCkucmVsZWFz
ZSgpOworICAgIGF1dG8gY29tcG9zaXRpbmdSZWFzb25zID0gUHJvdG9jb2w6OkxheWVyVHJlZTo6
Q29tcG9zaXRpbmdSZWFzb25zOjpjcmVhdGUoKS5yZWxlYXNlKCk7CiAKICAgICBpZiAocmVhc29u
cy5jb250YWlucyhDb21wb3NpdGluZ1JlYXNvbjo6VHJhbnNmb3JtM0QpKQogICAgICAgICBjb21w
b3NpdGluZ1JlYXNvbnMtPnNldFRyYW5zZm9ybTNEKHRydWUpOwpAQCAtMzI0LDcgKzMyMyw3IEBA
IHZvaWQgSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OnJlYXNvbnNGb3JDb21wb3NpdGluZ0xheWVy
KEVycm9yU3RyaW5nJiBlcnJvclN0cmluCiAgICAgaWYgKHJlYXNvbnMuY29udGFpbnMoQ29tcG9z
aXRpbmdSZWFzb246OlJvb3QpKQogICAgICAgICBjb21wb3NpdGluZ1JlYXNvbnMtPnNldFJvb3Qo
dHJ1ZSk7CiAKLSAgICBjb21wb3NpdGluZ1JlYXNvbnNSZXN1bHQgPSBXVEZNb3ZlKGNvbXBvc2l0
aW5nUmVhc29ucyk7CisgICAgcmV0dXJuIFdURk1vdmUoY29tcG9zaXRpbmdSZWFzb25zKTsKIH0K
IAogU3RyaW5nIEluc3BlY3RvckxheWVyVHJlZUFnZW50OjpiaW5kKGNvbnN0IFJlbmRlckxheWVy
KiBsYXllcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5z
cGVjdG9yTGF5ZXJUcmVlQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQuaAppbmRleCA4NzIzNTgwYzY1MzAxMGUxZWVhNjBkNDBl
OWNkOWQ3MzIzNThkOWZiLi41ZjExNTMxY2M2NDQ0MjlmNDhkMWQ2ZDgxNTUxZGQ4NGI5Zjk0Y2Nj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rvckxh
eWVyVHJlZUFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNw
ZWN0b3JMYXllclRyZWVBZ2VudC5oCkBAIC00MiwyNCArNDIsMjIgQEAgY2xhc3MgUHNldWRvRWxl
bWVudDsKIGNsYXNzIFJlbmRlckVsZW1lbnQ7CiBjbGFzcyBSZW5kZXJMYXllcjsKIAotdHlwZWRl
ZiBTdHJpbmcgRXJyb3JTdHJpbmc7Ci0KIGNsYXNzIEluc3BlY3RvckxheWVyVHJlZUFnZW50IGZp
bmFsIDogcHVibGljIEluc3BlY3RvckFnZW50QmFzZSwgcHVibGljIEluc3BlY3Rvcjo6TGF5ZXJU
cmVlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJ
bnNwZWN0b3JMYXllclRyZWVBZ2VudCk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBw
dWJsaWM6CiAgICAgSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQoV2ViQWdlbnRDb250ZXh0Jik7Ci0g
ICAgfkluc3BlY3RvckxheWVyVHJlZUFnZW50KCkgb3ZlcnJpZGU7CisgICAgfkluc3BlY3Rvckxh
eWVyVHJlZUFnZW50KCk7CiAKICAgICAvLyBJbnNwZWN0b3JBZ2VudEJhc2UKLSAgICB2b2lkIGRp
ZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kUm91dGVyKiwgSW5z
cGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlciopIG92ZXJyaWRlOwotICAgIHZvaWQgd2lsbERlc3Ry
b3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKSBvdmVycmlk
ZTsKKyAgICB2b2lkIGRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250
ZW5kUm91dGVyKiwgSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlciopOworICAgIHZvaWQgd2ls
bERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKTsK
IAogICAgIC8vIExheWVyVHJlZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcgotICAgIHZvaWQgZW5h
YmxlKEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkaXNhYmxlKEVycm9yU3RyaW5n
Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBsYXllcnNGb3JOb2RlKEVycm9yU3RyaW5nJiwgaW50IG5v
ZGVJZCwgUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6TGF5ZXJUcmVl
OjpMYXllcj4+Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZWFzb25zRm9yQ29tcG9zaXRpbmdMYXll
cihFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgbGF5ZXJJZCwgUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkxheWVyVHJlZTo6Q29tcG9zaXRpbmdSZWFzb25zPiYpIG92ZXJyaWRlOworICAg
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZW5hYmxlKCk7CisgICAg
SW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBkaXNhYmxlKCk7CisgICAg
SW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SlNPTjo6QXJyYXlPZjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpMYXllclRyZWU6OkxheWVyPj4+IGxheWVyc0Zvck5vZGUoSW5zcGVj
dG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8UmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkxheWVyVHJlZTo6Q29tcG9zaXRp
bmdSZWFzb25zPj4gcmVhc29uc0ZvckNvbXBvc2l0aW5nTGF5ZXIoY29uc3QgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6TGF5ZXJUcmVlOjpMYXllcklkJik7CiAKICAgICAvLyBJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb24KICAgICB2b2lkIGxheWVyVHJlZURpZENoYW5nZSgpOwpAQCAtNzIsMTMgKzcwLDEz
IEBAIHByaXZhdGU6CiAgICAgU3RyaW5nIGJpbmQoY29uc3QgUmVuZGVyTGF5ZXIqKTsKICAgICB2
b2lkIHVuYmluZChjb25zdCBSZW5kZXJMYXllciopOwogCi0gICAgdm9pZCBnYXRoZXJMYXllcnNV
c2luZ1JlbmRlck9iamVjdEhpZXJhcmNoeShFcnJvclN0cmluZyYsIFJlbmRlckVsZW1lbnQmLCBS
ZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpMYXllclRyZWU6OkxheWVy
Pj4mKTsKLSAgICB2b2lkIGdhdGhlckxheWVyc1VzaW5nUmVuZGVyTGF5ZXJIaWVyYXJjaHkoRXJy
b3JTdHJpbmcmLCBSZW5kZXJMYXllciosIFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkxheWVyVHJlZTo6TGF5ZXI+PiYpOworICAgIHZvaWQgZ2F0aGVyTGF5ZXJzVXNp
bmdSZW5kZXJPYmplY3RIaWVyYXJjaHkoUmVuZGVyRWxlbWVudCYsIEpTT046OkFycmF5T2Y8SW5z
cGVjdG9yOjpQcm90b2NvbDo6TGF5ZXJUcmVlOjpMYXllcj4mKTsKKyAgICB2b2lkIGdhdGhlckxh
eWVyc1VzaW5nUmVuZGVyTGF5ZXJIaWVyYXJjaHkoUmVuZGVyTGF5ZXIqLCBKU09OOjpBcnJheU9m
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkxheWVyVHJlZTo6TGF5ZXI+Jik7CiAKLSAgICBSZWY8SW5z
cGVjdG9yOjpQcm90b2NvbDo6TGF5ZXJUcmVlOjpMYXllcj4gYnVpbGRPYmplY3RGb3JMYXllcihF
cnJvclN0cmluZyYsIFJlbmRlckxheWVyKik7CisgICAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkxheWVyVHJlZTo6TGF5ZXI+IGJ1aWxkT2JqZWN0Rm9yTGF5ZXIoUmVuZGVyTGF5ZXIqKTsKICAg
ICBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6TGF5ZXJUcmVlOjpJbnRSZWN0PiBidWlsZE9iamVj
dEZvckludFJlY3QoY29uc3QgSW50UmVjdCYpOwogCi0gICAgaW50IGlkRm9yTm9kZShFcnJvclN0
cmluZyYsIE5vZGUqKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZCBpZEZv
ck5vZGUoTm9kZSopOwogCiAgICAgU3RyaW5nIGJpbmRQc2V1ZG9FbGVtZW50KFBzZXVkb0VsZW1l
bnQqKTsKICAgICB2b2lkIHVuYmluZFBzZXVkb0VsZW1lbnQoUHNldWRvRWxlbWVudCopOwpAQCAt
ODYsMTEgKzg0LDExIEBAIHByaXZhdGU6CiAgICAgc3RkOjp1bmlxdWVfcHRyPEluc3BlY3Rvcjo6
TGF5ZXJUcmVlRnJvbnRlbmREaXNwYXRjaGVyPiBtX2Zyb250ZW5kRGlzcGF0Y2hlcjsKICAgICBS
ZWZQdHI8SW5zcGVjdG9yOjpMYXllclRyZWVCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlz
cGF0Y2hlcjsKIAotICAgIEhhc2hNYXA8Y29uc3QgUmVuZGVyTGF5ZXIqLCBTdHJpbmc+IG1fZG9j
dW1lbnRMYXllclRvSWRNYXA7Ci0gICAgSGFzaE1hcDxTdHJpbmcsIGNvbnN0IFJlbmRlckxheWVy
Kj4gbV9pZFRvTGF5ZXI7CisgICAgSGFzaE1hcDxjb25zdCBSZW5kZXJMYXllciosIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkxheWVyVHJlZTo6TGF5ZXJJZD4gbV9kb2N1bWVudExheWVyVG9JZE1hcDsK
KyAgICBIYXNoTWFwPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkxheWVyVHJlZTo6TGF5ZXJJZCwgY29u
c3QgUmVuZGVyTGF5ZXIqPiBtX2lkVG9MYXllcjsKIAotICAgIEhhc2hNYXA8UHNldWRvRWxlbWVu
dCosIFN0cmluZz4gbV9wc2V1ZG9FbGVtZW50VG9JZE1hcDsKLSAgICBIYXNoTWFwPFN0cmluZywg
UHNldWRvRWxlbWVudCo+IG1faWRUb1BzZXVkb0VsZW1lbnQ7CisgICAgSGFzaE1hcDxQc2V1ZG9F
bGVtZW50KiwgSW5zcGVjdG9yOjpQcm90b2NvbDo6TGF5ZXJUcmVlOjpQc2V1ZG9FbGVtZW50SWQ+
IG1fcHNldWRvRWxlbWVudFRvSWRNYXA7CisgICAgSGFzaE1hcDxJbnNwZWN0b3I6OlByb3RvY29s
OjpMYXllclRyZWU6OlBzZXVkb0VsZW1lbnRJZCwgUHNldWRvRWxlbWVudCo+IG1faWRUb1BzZXVk
b0VsZW1lbnQ7CiAKICAgICBib29sIG1fc3VwcHJlc3NMYXllckNoYW5nZUV2ZW50cyB7IGZhbHNl
IH07CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNw
ZWN0b3JNZW1vcnlBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0lu
c3BlY3Rvck1lbW9yeUFnZW50LmNwcAppbmRleCBkMGU4YWE2ODgzMzY1OWU2NGFmZTU1MzQ3Y2I1
NmY3NzNlYjdkN2E1Li4xNGNlNjcwOTZhMjQyNDQ5NGM1OTI0NjYwODZhMWQxZTI4Nzc0MTA5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rvck1lbW9y
eUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rv
ck1lbW9yeUFnZW50LmNwcApAQCAtNTQsNDAgKzU0LDM5IEBAIHZvaWQgSW5zcGVjdG9yTWVtb3J5
QWdlbnQ6OmRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChGcm9udGVuZFJvdXRlciosIEJhY2tl
bmRECiAKIHZvaWQgSW5zcGVjdG9yTWVtb3J5QWdlbnQ6OndpbGxEZXN0cm95RnJvbnRlbmRBbmRC
YWNrZW5kKERpc2Nvbm5lY3RSZWFzb24pCiB7Ci0gICAgRXJyb3JTdHJpbmcgaWdub3JlZDsKLSAg
ICBkaXNhYmxlKGlnbm9yZWQpOworICAgIGRpc2FibGUoKTsKIAogICAgIG1faW5zdHJ1bWVudGlu
Z0FnZW50cy5zZXRQZXJzaXN0ZW50TWVtb3J5QWdlbnQobnVsbHB0cik7CiB9CiAKLXZvaWQgSW5z
cGVjdG9yTWVtb3J5QWdlbnQ6OmVuYWJsZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCitQcm90
b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JNZW1vcnlBZ2VudDo6ZW5hYmxlKCkK
IHsKLSAgICBpZiAobV9pbnN0cnVtZW50aW5nQWdlbnRzLmVuYWJsZWRNZW1vcnlBZ2VudCgpID09
IHRoaXMpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWVtb3J5IGRvbWFpbiBhbHJlYWR5IGVu
YWJsZWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKG1faW5zdHJ1bWVudGlu
Z0FnZW50cy5lbmFibGVkTWVtb3J5QWdlbnQoKSA9PSB0aGlzKQorICAgICAgICByZXR1cm4gbWFr
ZVVuZXhwZWN0ZWQoIk1lbW9yeSBkb21haW4gYWxyZWFkeSBlbmFibGVkIl9zKTsKIAogICAgIG1f
aW5zdHJ1bWVudGluZ0FnZW50cy5zZXRFbmFibGVkTWVtb3J5QWdlbnQodGhpcyk7CisKKyAgICBy
ZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3Rvck1lbW9yeUFnZW50OjpkaXNhYmxlKEVycm9y
U3RyaW5nJiBlcnJvclN0cmluZykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3Bl
Y3Rvck1lbW9yeUFnZW50OjpkaXNhYmxlKCkKIHsKLSAgICBpZiAobV9pbnN0cnVtZW50aW5nQWdl
bnRzLmVuYWJsZWRNZW1vcnlBZ2VudCgpICE9IHRoaXMpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcg
PSAiTWVtb3J5IGRvbWFpbiBhbHJlYWR5IGRpc2FibGVkIl9zOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQorICAgIGlmIChtX2luc3RydW1lbnRpbmdBZ2VudHMuZW5hYmxlZE1lbW9yeUFnZW50KCkg
IT0gdGhpcykKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJNZW1vcnkgZG9tYWluIGFs
cmVhZHkgZGlzYWJsZWQiX3MpOwogCiAgICAgbV9pbnN0cnVtZW50aW5nQWdlbnRzLnNldEVuYWJs
ZWRNZW1vcnlBZ2VudChudWxscHRyKTsKIAogICAgIG1fdHJhY2tpbmcgPSBmYWxzZTsKIAogICAg
IFJlc291cmNlVXNhZ2VUaHJlYWQ6OnJlbW92ZU9ic2VydmVyKHRoaXMpOworCisgICAgcmV0dXJu
IHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JNZW1vcnlBZ2VudDo6c3RhcnRUcmFja2luZyhFcnJv
clN0cmluZyYpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JNZW1vcnlB
Z2VudDo6c3RhcnRUcmFja2luZygpCiB7CiAgICAgaWYgKG1fdHJhY2tpbmcpCi0gICAgICAgIHJl
dHVybjsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIFJlc291cmNlVXNhZ2VUaHJlYWQ6OmFk
ZE9ic2VydmVyKHRoaXMsIE1lbW9yeSwgW3RoaXNdIChjb25zdCBSZXNvdXJjZVVzYWdlRGF0YSYg
ZGF0YSkgewogICAgICAgICBjb2xsZWN0U2FtcGxlKGRhdGEpOwpAQCAtOTYsMjQgKzk1LDI4IEBA
IHZvaWQgSW5zcGVjdG9yTWVtb3J5QWdlbnQ6OnN0YXJ0VHJhY2tpbmcoRXJyb3JTdHJpbmcmKQog
ICAgIG1fdHJhY2tpbmcgPSB0cnVlOwogCiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPnRyYWNr
aW5nU3RhcnQobV9lbnZpcm9ubWVudC5leGVjdXRpb25TdG9wd2F0Y2goKS5lbGFwc2VkVGltZSgp
LnNlY29uZHMoKSk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3Rvck1lbW9y
eUFnZW50OjpzdG9wVHJhY2tpbmcoRXJyb3JTdHJpbmcmKQorUHJvdG9jb2w6OkVycm9yU3RyaW5n
T3I8dm9pZD4gSW5zcGVjdG9yTWVtb3J5QWdlbnQ6OnN0b3BUcmFja2luZygpCiB7CiAgICAgaWYg
KCFtX3RyYWNraW5nKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB7IH07CiAKICAg
ICBSZXNvdXJjZVVzYWdlVGhyZWFkOjpyZW1vdmVPYnNlcnZlcih0aGlzKTsKIAogICAgIG1fdHJh
Y2tpbmcgPSBmYWxzZTsKIAogICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT50cmFja2luZ0NvbXBs
ZXRlKG1fZW52aXJvbm1lbnQuZXhlY3V0aW9uU3RvcHdhdGNoKCkuZWxhcHNlZFRpbWUoKS5zZWNv
bmRzKCkpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAogdm9pZCBJbnNwZWN0b3JNZW1vcnlBZ2Vu
dDo6ZGlkSGFuZGxlTWVtb3J5UHJlc3N1cmUoQ3JpdGljYWwgY3JpdGljYWwpCiB7CiAgICAgTWVt
b3J5RnJvbnRlbmREaXNwYXRjaGVyOjpTZXZlcml0eSBzZXZlcml0eSA9IGNyaXRpY2FsID09IENy
aXRpY2FsOjpZZXMgPyBNZW1vcnlGcm9udGVuZERpc3BhdGNoZXI6OlNldmVyaXR5OjpDcml0aWNh
bCA6IE1lbW9yeUZyb250ZW5kRGlzcGF0Y2hlcjo6U2V2ZXJpdHk6Ok5vbkNyaXRpY2FsOwotICAg
IG1fZnJvbnRlbmREaXNwYXRjaGVyLT5tZW1vcnlQcmVzc3VyZShtX2Vudmlyb25tZW50LmV4ZWN1
dGlvblN0b3B3YXRjaCgpLmVsYXBzZWRUaW1lKCkuc2Vjb25kcygpLCBzZXZlcml0eSk7CisgICAg
bV9mcm9udGVuZERpc3BhdGNoZXItPm1lbW9yeVByZXNzdXJlKG1fZW52aXJvbm1lbnQuZXhlY3V0
aW9uU3RvcHdhdGNoKCkuZWxhcHNlZFRpbWUoKS5zZWNvbmRzKCksIFByb3RvY29sOjpIZWxwZXJz
OjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShzZXZlcml0eSkpOwogfQogCiB2b2lkIEluc3BlY3Rvck1l
bW9yeUFnZW50Ojpjb2xsZWN0U2FtcGxlKGNvbnN0IFJlc291cmNlVXNhZ2VEYXRhJiBkYXRhKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JNZW1v
cnlBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JNZW1v
cnlBZ2VudC5oCmluZGV4IGM0NDc3MmRiZWFiZjkxMTRjZmE0NDdmZTk2ZTg0ZTNkMmI1MjYyOGUu
LjFhNzY0MDhlZjkzYzk2MWI1YTAwYWFjMWY5MjVhODkzNjQzMjk0NzMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yTWVtb3J5QWdlbnQuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rvck1lbW9yeUFnZW50LmgK
QEAgLTM1LDI0ICszNSwyMiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXR5cGVkZWYgU3Ry
aW5nIEVycm9yU3RyaW5nOwotCiBjbGFzcyBJbnNwZWN0b3JNZW1vcnlBZ2VudCBmaW5hbCA6IHB1
YmxpYyBJbnNwZWN0b3JBZ2VudEJhc2UsIHB1YmxpYyBJbnNwZWN0b3I6Ok1lbW9yeUJhY2tlbmRE
aXNwYXRjaGVySGFuZGxlciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW5zcGVjdG9yTWVt
b3J5QWdlbnQpOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIElu
c3BlY3Rvck1lbW9yeUFnZW50KFBhZ2VBZ2VudENvbnRleHQmKTsKLSAgICB+SW5zcGVjdG9yTWVt
b3J5QWdlbnQoKSBvdmVycmlkZTsKKyAgICB+SW5zcGVjdG9yTWVtb3J5QWdlbnQoKTsKIAogICAg
IC8vIEluc3BlY3RvckFnZW50QmFzZQotICAgIHZvaWQgZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNr
ZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRSb3V0ZXIqLCBJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRj
aGVyKikgb3ZlcnJpZGU7Ci0gICAgdm9pZCB3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJ
bnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24pIG92ZXJyaWRlOworICAgIHZvaWQgZGlkQ3JlYXRl
RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRSb3V0ZXIqLCBJbnNwZWN0b3I6
OkJhY2tlbmREaXNwYXRjaGVyKik7CisgICAgdm9pZCB3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFj
a2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24pOwogCiAgICAgLy8gTWVtb3J5QmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyCi0gICAgdm9pZCBlbmFibGUoRXJyb3JTdHJpbmcmKSBvdmVycmlk
ZTsKLSAgICB2b2lkIGRpc2FibGUoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2b2lkIHN0
YXJ0VHJhY2tpbmcoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2b2lkIHN0b3BUcmFja2lu
ZyhFcnJvclN0cmluZyYpIG92ZXJyaWRlOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8dm9pZD4gZW5hYmxlKCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JT
dHJpbmdPcjx2b2lkPiBkaXNhYmxlKCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JT
dHJpbmdPcjx2b2lkPiBzdGFydFRyYWNraW5nKCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6
RXJyb3JTdHJpbmdPcjx2b2lkPiBzdG9wVHJhY2tpbmcoKTsKIAogICAgIC8vIEluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbgogICAgIHZvaWQgZGlkSGFuZGxlTWVtb3J5UHJlc3N1cmUoQ3JpdGljYWwp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JO
ZXR3b3JrQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0
b3JOZXR3b3JrQWdlbnQuY3BwCmluZGV4IDA5ZjI3N2YxOTVkMzU2Y2Y2ZDMxNGZiZjcyY2ZjYmVh
ZDY2N2UxNWMuLjA5ZTZjNmQ0Yzk2ZDY0NDE4MjNkZDA1MTBiZjlkYzkyNjg0OTcwMzYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yTmV0d29ya0Fn
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rvck5l
dHdvcmtBZ2VudC5jcHAKQEAgLTE3Miw5ICsxNzIsOSBAQCBwcml2YXRlOgogICAgIGludCBtX3N0
YXR1c0NvZGU7CiB9OwogCi1SZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6V2ViU29j
a2V0RnJhbWU+IGJ1aWxkV2ViU29ja2V0TWVzc2FnZShjb25zdCBXZWJTb2NrZXRGcmFtZSYgZnJh
bWUpCitSZWY8UHJvdG9jb2w6Ok5ldHdvcms6OldlYlNvY2tldEZyYW1lPiBidWlsZFdlYlNvY2tl
dE1lc3NhZ2UoY29uc3QgV2ViU29ja2V0RnJhbWUmIGZyYW1lKQogewotICAgIHJldHVybiBJbnNw
ZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpXZWJTb2NrZXRGcmFtZTo6Y3JlYXRlKCkKKyAgICBy
ZXR1cm4gUHJvdG9jb2w6Ok5ldHdvcms6OldlYlNvY2tldEZyYW1lOjpjcmVhdGUoKQogICAgICAg
ICAuc2V0T3Bjb2RlKGZyYW1lLm9wQ29kZSkKICAgICAgICAgLnNldE1hc2soZnJhbWUubWFza2Vk
KQogICAgICAgICAuc2V0UGF5bG9hZERhdGEoZnJhbWUub3BDb2RlID09IDEgPyBTdHJpbmc6OmZy
b21VVEY4V2l0aExhdGluMUZhbGxiYWNrKGZyYW1lLnBheWxvYWQsIGZyYW1lLnBheWxvYWRMZW5n
dGgpIDogYmFzZTY0RW5jb2RlKGZyYW1lLnBheWxvYWQsIGZyYW1lLnBheWxvYWRMZW5ndGgpKQpA
QCAtMjAxLDIwICsyMDEsMjEgQEAgdm9pZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmRpZENyZWF0
ZUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kUm91dGUKIAogdm9pZCBJbnNw
ZWN0b3JOZXR3b3JrQWdlbnQ6OndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rv
cjo6RGlzY29ubmVjdFJlYXNvbikKIHsKLSAgICBFcnJvclN0cmluZyBpZ25vcmVkOwotICAgIGRp
c2FibGUoaWdub3JlZCk7CisgICAgZGlzYWJsZSgpOwogfQogCi1zdGF0aWMgUmVmPEpTT046Ok9i
amVjdD4gYnVpbGRPYmplY3RGb3JIZWFkZXJzKGNvbnN0IEhUVFBIZWFkZXJNYXAmIGhlYWRlcnMp
CitzdGF0aWMgUmVmPFByb3RvY29sOjpOZXR3b3JrOjpIZWFkZXJzPiBidWlsZE9iamVjdEZvckhl
YWRlcnMoY29uc3QgSFRUUEhlYWRlck1hcCYgaGVhZGVycykKIHsKLSAgICBSZWY8SlNPTjo6T2Jq
ZWN0PiBoZWFkZXJzT2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBhdXRvIGhl
YWRlcnNWYWx1ZSA9IFByb3RvY29sOjpOZXR3b3JrOjpIZWFkZXJzOjpjcmVhdGUoKS5yZWxlYXNl
KCk7CiAKKyAgICBhdXRvIGhlYWRlcnNPYmplY3QgPSBoZWFkZXJzVmFsdWUtPmFzT2JqZWN0KCk7
CiAgICAgZm9yIChjb25zdCBhdXRvJiBoZWFkZXIgOiBoZWFkZXJzKQogICAgICAgICBoZWFkZXJz
T2JqZWN0LT5zZXRTdHJpbmcoaGVhZGVyLmtleSwgaGVhZGVyLnZhbHVlKTsKLSAgICByZXR1cm4g
aGVhZGVyc09iamVjdDsKKworICAgIHJldHVybiBoZWFkZXJzVmFsdWU7CiB9CiAKLVJlZjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpSZXNvdXJjZVRpbWluZz4gSW5zcGVjdG9yTmV0d29y
a0FnZW50OjpidWlsZE9iamVjdEZvclRpbWluZyhjb25zdCBOZXR3b3JrTG9hZE1ldHJpY3MqIHRp
bWluZywgUmVzb3VyY2VMb2FkZXImIHJlc291cmNlTG9hZGVyKQorUmVmPFByb3RvY29sOjpOZXR3
b3JrOjpSZXNvdXJjZVRpbWluZz4gSW5zcGVjdG9yTmV0d29ya0FnZW50OjpidWlsZE9iamVjdEZv
clRpbWluZyhjb25zdCBOZXR3b3JrTG9hZE1ldHJpY3MqIHRpbWluZywgUmVzb3VyY2VMb2FkZXIm
IHJlc291cmNlTG9hZGVyKQogewogICAgIGF1dG8mIGxvYWRUaW1pbmcgPSByZXNvdXJjZUxvYWRl
ci5sb2FkVGltaW5nKCk7CiAKQEAgLTIyNyw3ICsyMjgsNyBAQCBSZWY8SW5zcGVjdG9yOjpQcm90
b2NvbDo6TmV0d29yazo6UmVzb3VyY2VUaW1pbmc+IEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6YnVp
bGRPYgogICAgICAgICB0aW1pbmcgPSAmZW1wdHkudmFsdWUoKTsKICAgICB9CiAKLSAgICByZXR1
cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6UmVzb3VyY2VUaW1pbmc6OmNyZWF0ZSgp
CisgICAgcmV0dXJuIFByb3RvY29sOjpOZXR3b3JrOjpSZXNvdXJjZVRpbWluZzo6Y3JlYXRlKCkK
ICAgICAgICAgLnNldFN0YXJ0VGltZShlbGFwc2VkVGltZVNpbmNlKGxvYWRUaW1pbmcuc3RhcnRU
aW1lKCkpKQogICAgICAgICAuc2V0UmVkaXJlY3RTdGFydChlbGFwc2VkVGltZVNpbmNlKGxvYWRU
aW1pbmcucmVkaXJlY3RTdGFydCgpKSkKICAgICAgICAgLnNldFJlZGlyZWN0RW5kKGVsYXBzZWRU
aW1lU2luY2UobG9hZFRpbWluZy5yZWRpcmVjdEVuZCgpKSkKQEAgLTI0MywyNiArMjQ0LDI2IEBA
IFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpSZXNvdXJjZVRpbWluZz4gSW5zcGVj
dG9yTmV0d29ya0FnZW50OjpidWlsZE9iCiAgICAgICAgIC5yZWxlYXNlKCk7CiB9CiAKLXN0YXRp
YyBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpNZXRyaWNzOjpQcmlvcml0eSB0b1Byb3Rv
Y29sKE5ldHdvcmtMb2FkUHJpb3JpdHkgcHJpb3JpdHkpCitzdGF0aWMgUHJvdG9jb2w6Ok5ldHdv
cms6Ok1ldHJpY3M6OlByaW9yaXR5IHRvUHJvdG9jb2woTmV0d29ya0xvYWRQcmlvcml0eSBwcmlv
cml0eSkKIHsKICAgICBzd2l0Y2ggKHByaW9yaXR5KSB7CiAgICAgY2FzZSBOZXR3b3JrTG9hZFBy
aW9yaXR5OjpMb3c6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3Jr
OjpNZXRyaWNzOjpQcmlvcml0eTo6TG93OworICAgICAgICByZXR1cm4gUHJvdG9jb2w6Ok5ldHdv
cms6Ok1ldHJpY3M6OlByaW9yaXR5OjpMb3c7CiAgICAgY2FzZSBOZXR3b3JrTG9hZFByaW9yaXR5
OjpNZWRpdW06Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpN
ZXRyaWNzOjpQcmlvcml0eTo6TWVkaXVtOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6Ok5ldHdv
cms6Ok1ldHJpY3M6OlByaW9yaXR5OjpNZWRpdW07CiAgICAgY2FzZSBOZXR3b3JrTG9hZFByaW9y
aXR5OjpIaWdoOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6
TWV0cmljczo6UHJpb3JpdHk6OkhpZ2g7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6TmV0d29y
azo6TWV0cmljczo6UHJpb3JpdHk6OkhpZ2g7CiAgICAgY2FzZSBOZXR3b3JrTG9hZFByaW9yaXR5
OjpVbmtub3duOgogICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6TWV0cmljczo6
UHJpb3JpdHk6Ok1lZGl1bTsKKyAgICByZXR1cm4gUHJvdG9jb2w6Ok5ldHdvcms6Ok1ldHJpY3M6
OlByaW9yaXR5OjpNZWRpdW07CiB9CiAKLVJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3Jr
OjpNZXRyaWNzPiBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yTWV0cmljcyhj
b25zdCBOZXR3b3JrTG9hZE1ldHJpY3MmIG5ldHdvcmtMb2FkTWV0cmljcykKK1JlZjxQcm90b2Nv
bDo6TmV0d29yazo6TWV0cmljcz4gSW5zcGVjdG9yTmV0d29ya0FnZW50OjpidWlsZE9iamVjdEZv
ck1ldHJpY3MoY29uc3QgTmV0d29ya0xvYWRNZXRyaWNzJiBuZXR3b3JrTG9hZE1ldHJpY3MpCiB7
Ci0gICAgYXV0byBtZXRyaWNzID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6TWV0cmlj
czo6Y3JlYXRlKCkucmVsZWFzZSgpOworICAgIGF1dG8gbWV0cmljcyA9IFByb3RvY29sOjpOZXR3
b3JrOjpNZXRyaWNzOjpjcmVhdGUoKS5yZWxlYXNlKCk7CiAKICAgICBpZiAoIW5ldHdvcmtMb2Fk
TWV0cmljcy5wcm90b2NvbC5pc051bGwoKSkKICAgICAgICAgbWV0cmljcy0+c2V0UHJvdG9jb2wo
bmV0d29ya0xvYWRNZXRyaWNzLnByb3RvY29sKTsKQEAgLTI4Niw3ICsyODcsNyBAQCBSZWY8SW5z
cGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6TWV0cmljcz4gSW5zcGVjdG9yTmV0d29ya0FnZW50
OjpidWlsZE9iamVjdEZvcgogICAgIGlmIChuZXR3b3JrTG9hZE1ldHJpY3MucmVzcG9uc2VCb2R5
RGVjb2RlZFNpemUgIT0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50NjRfdD46Om1heCgpKQogICAg
ICAgICBtZXRyaWNzLT5zZXRSZXNwb25zZUJvZHlEZWNvZGVkU2l6ZShuZXR3b3JrTG9hZE1ldHJp
Y3MucmVzcG9uc2VCb2R5RGVjb2RlZFNpemUpOwogCi0gICAgYXV0byBjb25uZWN0aW9uUGF5bG9h
ZCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlNlY3VyaXR5OjpDb25uZWN0aW9uOjpjcmVhdGUoKQor
ICAgIGF1dG8gY29ubmVjdGlvblBheWxvYWQgPSBQcm90b2NvbDo6U2VjdXJpdHk6OkNvbm5lY3Rp
b246OmNyZWF0ZSgpCiAgICAgICAgIC5yZWxlYXNlKCk7CiAKICAgICBpZiAoIW5ldHdvcmtMb2Fk
TWV0cmljcy50bHNQcm90b2NvbC5pc0VtcHR5KCkpCkBAIC0zMDAsOSArMzAxLDkgQEAgUmVmPElu
c3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6Ok1ldHJpY3M+IEluc3BlY3Rvck5ldHdvcmtBZ2Vu
dDo6YnVpbGRPYmplY3RGb3IKICAgICByZXR1cm4gbWV0cmljczsKIH0KIAotc3RhdGljIFJlZjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpSZXF1ZXN0PiBidWlsZE9iamVjdEZvclJlc291
cmNlUmVxdWVzdChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCitzdGF0aWMgUmVmPFBy
b3RvY29sOjpOZXR3b3JrOjpSZXF1ZXN0PiBidWlsZE9iamVjdEZvclJlc291cmNlUmVxdWVzdChj
b25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCiB7Ci0gICAgYXV0byByZXF1ZXN0T2JqZWN0
ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6UmVxdWVzdDo6Y3JlYXRlKCkKKyAgICBh
dXRvIHJlcXVlc3RPYmplY3QgPSBQcm90b2NvbDo6TmV0d29yazo6UmVxdWVzdDo6Y3JlYXRlKCkK
ICAgICAgICAgLnNldFVybChyZXF1ZXN0LnVybCgpLnN0cmluZygpKQogICAgICAgICAuc2V0TWV0
aG9kKHJlcXVlc3QuaHR0cE1ldGhvZCgpKQogICAgICAgICAuc2V0SGVhZGVycyhidWlsZE9iamVj
dEZvckhlYWRlcnMocmVxdWVzdC5odHRwSGVhZGVyRmllbGRzKCkpKQpAQCAtMzE0LDQ0ICszMTUs
NDIgQEAgc3RhdGljIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpSZXF1ZXN0PiBi
dWlsZE9iamVjdEZvclJlc291cmNlUmVxdWVzdCgKICAgICByZXR1cm4gcmVxdWVzdE9iamVjdDsK
IH0KIAotc3RhdGljIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OlJlc3BvbnNlOjpTb3Vy
Y2UgcmVzcG9uc2VTb3VyY2UoUmVzb3VyY2VSZXNwb25zZTo6U291cmNlIHNvdXJjZSkKK3N0YXRp
YyBQcm90b2NvbDo6TmV0d29yazo6UmVzcG9uc2U6OlNvdXJjZSByZXNwb25zZVNvdXJjZShSZXNv
dXJjZVJlc3BvbnNlOjpTb3VyY2Ugc291cmNlKQogewogICAgIHN3aXRjaCAoc291cmNlKSB7CiAg
ICAgY2FzZSBSZXNvdXJjZVJlc3BvbnNlOjpTb3VyY2U6OkRPTUNhY2hlOgogICAgIGNhc2UgUmVz
b3VyY2VSZXNwb25zZTo6U291cmNlOjpBcHBsaWNhdGlvbkNhY2hlOgogICAgICAgICAvLyBGSVhN
RTogQWRkIHN1cHBvcnQgZm9yIEFwcGxpY2F0aW9uQ2FjaGUgaW4gaW5zcGVjdG9yLgogICAgIGNh
c2UgUmVzb3VyY2VSZXNwb25zZTo6U291cmNlOjpVbmtub3duOgotICAgICAgICByZXR1cm4gSW5z
cGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6UmVzcG9uc2U6OlNvdXJjZTo6VW5rbm93bjsKKyAg
ICAgICAgcmV0dXJuIFByb3RvY29sOjpOZXR3b3JrOjpSZXNwb25zZTo6U291cmNlOjpVbmtub3du
OwogICAgIGNhc2UgUmVzb3VyY2VSZXNwb25zZTo6U291cmNlOjpOZXR3b3JrOgotICAgICAgICBy
ZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6UmVzcG9uc2U6OlNvdXJjZTo6TmV0
d29yazsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpOZXR3b3JrOjpSZXNwb25zZTo6U291cmNl
OjpOZXR3b3JrOwogICAgIGNhc2UgUmVzb3VyY2VSZXNwb25zZTo6U291cmNlOjpNZW1vcnlDYWNo
ZToKICAgICBjYXNlIFJlc291cmNlUmVzcG9uc2U6OlNvdXJjZTo6TWVtb3J5Q2FjaGVBZnRlclZh
bGlkYXRpb246Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpS
ZXNwb25zZTo6U291cmNlOjpNZW1vcnlDYWNoZTsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpO
ZXR3b3JrOjpSZXNwb25zZTo6U291cmNlOjpNZW1vcnlDYWNoZTsKICAgICBjYXNlIFJlc291cmNl
UmVzcG9uc2U6OlNvdXJjZTo6RGlza0NhY2hlOgogICAgIGNhc2UgUmVzb3VyY2VSZXNwb25zZTo6
U291cmNlOjpEaXNrQ2FjaGVBZnRlclZhbGlkYXRpb246Ci0gICAgICAgIHJldHVybiBJbnNwZWN0
b3I6OlByb3RvY29sOjpOZXR3b3JrOjpSZXNwb25zZTo6U291cmNlOjpEaXNrQ2FjaGU7CisgICAg
ICAgIHJldHVybiBQcm90b2NvbDo6TmV0d29yazo6UmVzcG9uc2U6OlNvdXJjZTo6RGlza0NhY2hl
OwogICAgIGNhc2UgUmVzb3VyY2VSZXNwb25zZTo6U291cmNlOjpTZXJ2aWNlV29ya2VyOgotICAg
ICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6UmVzcG9uc2U6OlNvdXJj
ZTo6U2VydmljZVdvcmtlcjsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpOZXR3b3JrOjpSZXNw
b25zZTo6U291cmNlOjpTZXJ2aWNlV29ya2VyOwogICAgIGNhc2UgUmVzb3VyY2VSZXNwb25zZTo6
U291cmNlOjpJbnNwZWN0b3JPdmVycmlkZToKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJv
dG9jb2w6Ok5ldHdvcms6OlJlc3BvbnNlOjpTb3VyY2U6Okluc3BlY3Rvck92ZXJyaWRlOworICAg
ICAgICByZXR1cm4gUHJvdG9jb2w6Ok5ldHdvcms6OlJlc3BvbnNlOjpTb3VyY2U6Okluc3BlY3Rv
ck92ZXJyaWRlOwogICAgIH0KIAogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVy
biBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpSZXNwb25zZTo6U291cmNlOjpVbmtub3du
OworICAgIHJldHVybiBQcm90b2NvbDo6TmV0d29yazo6UmVzcG9uc2U6OlNvdXJjZTo6VW5rbm93
bjsKIH0KIAotUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OlJlc3BvbnNlPiBJ
bnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yUmVzb3VyY2VSZXNwb25zZShjb25z
dCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgUmVzb3VyY2VMb2FkZXIqIHJlc291cmNlTG9h
ZGVyKQorUmVmUHRyPFByb3RvY29sOjpOZXR3b3JrOjpSZXNwb25zZT4gSW5zcGVjdG9yTmV0d29y
a0FnZW50OjpidWlsZE9iamVjdEZvclJlc291cmNlUmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNw
b25zZSYgcmVzcG9uc2UsIFJlc291cmNlTG9hZGVyKiByZXNvdXJjZUxvYWRlcikKIHsKICAgICBp
ZiAocmVzcG9uc2UuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgUmVm
PEpTT046Ok9iamVjdD4gaGVhZGVycyA9IGJ1aWxkT2JqZWN0Rm9ySGVhZGVycyhyZXNwb25zZS5o
dHRwSGVhZGVyRmllbGRzKCkpOwotCi0gICAgYXV0byByZXNwb25zZU9iamVjdCA9IEluc3BlY3Rv
cjo6UHJvdG9jb2w6Ok5ldHdvcms6OlJlc3BvbnNlOjpjcmVhdGUoKQorICAgIGF1dG8gcmVzcG9u
c2VPYmplY3QgPSBQcm90b2NvbDo6TmV0d29yazo6UmVzcG9uc2U6OmNyZWF0ZSgpCiAgICAgICAg
IC5zZXRVcmwocmVzcG9uc2UudXJsKCkuc3RyaW5nKCkpCiAgICAgICAgIC5zZXRTdGF0dXMocmVz
cG9uc2UuaHR0cFN0YXR1c0NvZGUoKSkKICAgICAgICAgLnNldFN0YXR1c1RleHQocmVzcG9uc2Uu
aHR0cFN0YXR1c1RleHQoKSkKLSAgICAgICAgLnNldEhlYWRlcnMoV1RGTW92ZShoZWFkZXJzKSkK
KyAgICAgICAgLnNldEhlYWRlcnMoYnVpbGRPYmplY3RGb3JIZWFkZXJzKHJlc3BvbnNlLmh0dHBI
ZWFkZXJGaWVsZHMoKSkpCiAgICAgICAgIC5zZXRNaW1lVHlwZShyZXNwb25zZS5taW1lVHlwZSgp
KQogICAgICAgICAuc2V0U291cmNlKHJlc3BvbnNlU291cmNlKHJlc3BvbnNlLnNvdXJjZSgpKSkK
ICAgICAgICAgLnJlbGVhc2UoKTsKQEAgLTM2MCwxMSArMzU5LDExIEBAIFJlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpOZXR3b3JrOjpSZXNwb25zZT4gSW5zcGVjdG9yTmV0d29ya0FnZW50Ojpi
dWlsZE9iamVjCiAgICAgICAgIHJlc3BvbnNlT2JqZWN0LT5zZXRUaW1pbmcoYnVpbGRPYmplY3RG
b3JUaW1pbmcocmVzcG9uc2UuZGVwcmVjYXRlZE5ldHdvcmtMb2FkTWV0cmljc09yTnVsbCgpLCAq
cmVzb3VyY2VMb2FkZXIpKTsKIAogICAgIGlmIChhdXRvJiBjZXJ0aWZpY2F0ZUluZm8gPSByZXNw
b25zZS5jZXJ0aWZpY2F0ZUluZm8oKSkgewotICAgICAgICBhdXRvIHNlY3VyaXR5UGF5bG9hZCA9
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlNlY3VyaXR5OjpTZWN1cml0eTo6Y3JlYXRlKCkKKyAgICAg
ICAgYXV0byBzZWN1cml0eVBheWxvYWQgPSBQcm90b2NvbDo6U2VjdXJpdHk6OlNlY3VyaXR5Ojpj
cmVhdGUoKQogICAgICAgICAgICAgLnJlbGVhc2UoKTsKIAogICAgICAgICBpZiAoYXV0byBjZXJ0
aWZpY2F0ZVN1bW1hcnlJbmZvID0gY2VydGlmaWNhdGVJbmZvLnZhbHVlKCkuc3VtbWFyeSgpKSB7
Ci0gICAgICAgICAgICBhdXRvIGNlcnRpZmljYXRlUGF5bG9hZCA9IEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlNlY3VyaXR5OjpDZXJ0aWZpY2F0ZTo6Y3JlYXRlKCkKKyAgICAgICAgICAgIGF1dG8gY2Vy
dGlmaWNhdGVQYXlsb2FkID0gUHJvdG9jb2w6OlNlY3VyaXR5OjpDZXJ0aWZpY2F0ZTo6Y3JlYXRl
KCkKICAgICAgICAgICAgICAgICAucmVsZWFzZSgpOwogCiAgICAgICAgICAgICBjZXJ0aWZpY2F0
ZVBheWxvYWQtPnNldFN1YmplY3QoY2VydGlmaWNhdGVTdW1tYXJ5SW5mby52YWx1ZSgpLnN1Ympl
Y3QpOwpAQCAtMzk2LDE2ICszOTUsMTYgQEAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5l
dHdvcms6OlJlc3BvbnNlPiBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmJ1aWxkT2JqZWMKICAgICBy
ZXR1cm4gcmVzcG9uc2VPYmplY3Q7CiB9CiAKLVJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3
b3JrOjpDYWNoZWRSZXNvdXJjZT4gSW5zcGVjdG9yTmV0d29ya0FnZW50OjpidWlsZE9iamVjdEZv
ckNhY2hlZFJlc291cmNlKENhY2hlZFJlc291cmNlKiBjYWNoZWRSZXNvdXJjZSkKK1JlZjxQcm90
b2NvbDo6TmV0d29yazo6Q2FjaGVkUmVzb3VyY2U+IEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6YnVp
bGRPYmplY3RGb3JDYWNoZWRSZXNvdXJjZShDYWNoZWRSZXNvdXJjZSogY2FjaGVkUmVzb3VyY2Up
CiB7Ci0gICAgYXV0byByZXNvdXJjZU9iamVjdCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdv
cms6OkNhY2hlZFJlc291cmNlOjpjcmVhdGUoKQorICAgIGF1dG8gcmVzb3VyY2VPYmplY3QgPSBQ
cm90b2NvbDo6TmV0d29yazo6Q2FjaGVkUmVzb3VyY2U6OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRV
cmwoY2FjaGVkUmVzb3VyY2UtPnVybCgpLnN0cmluZygpKQogICAgICAgICAuc2V0VHlwZShJbnNw
ZWN0b3JQYWdlQWdlbnQ6OmNhY2hlZFJlc291cmNlVHlwZUpTT04oKmNhY2hlZFJlc291cmNlKSkK
ICAgICAgICAgLnNldEJvZHlTaXplKGNhY2hlZFJlc291cmNlLT5lbmNvZGVkU2l6ZSgpKQogICAg
ICAgICAucmVsZWFzZSgpOwogCi0gICAgYXV0byByZXNvdXJjZVJlc3BvbnNlID0gYnVpbGRPYmpl
Y3RGb3JSZXNvdXJjZVJlc3BvbnNlKGNhY2hlZFJlc291cmNlLT5yZXNwb25zZSgpLCBjYWNoZWRS
ZXNvdXJjZS0+bG9hZGVyKCkpOwotICAgIHJlc291cmNlT2JqZWN0LT5zZXRSZXNwb25zZShXVEZN
b3ZlKHJlc291cmNlUmVzcG9uc2UpKTsKKyAgICBpZiAoYXV0byByZXNvdXJjZVJlc3BvbnNlID0g
YnVpbGRPYmplY3RGb3JSZXNvdXJjZVJlc3BvbnNlKGNhY2hlZFJlc291cmNlLT5yZXNwb25zZSgp
LCBjYWNoZWRSZXNvdXJjZS0+bG9hZGVyKCkpKQorICAgICAgICByZXNvdXJjZU9iamVjdC0+c2V0
UmVzcG9uc2UocmVzb3VyY2VSZXNwb25zZS5yZWxlYXNlTm9uTnVsbCgpKTsKIAogICAgIFN0cmlu
ZyBzb3VyY2VNYXBwaW5nVVJMID0gSW5zcGVjdG9yUGFnZUFnZW50Ojpzb3VyY2VNYXBVUkxGb3JS
ZXNvdXJjZShjYWNoZWRSZXNvdXJjZSk7CiAgICAgaWYgKCFzb3VyY2VNYXBwaW5nVVJMLmlzRW1w
dHkoKSkKQEAgLTQyOSw5ICs0MjgsOSBAQCB2b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6d2ls
bFNlbmRSZXF1ZXN0KHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgRG9jdW1lbnRMbwogICAgIGRv
dWJsZSBzZW5kVGltZXN0YW1wID0gdGltZXN0YW1wKCk7CiAgICAgV2FsbFRpbWUgd2FsbHRpbWUg
PSBXYWxsVGltZTo6bm93KCk7CiAKLSAgICBTdHJpbmcgcmVxdWVzdElkID0gSWRlbnRpZmllcnNG
YWN0b3J5OjpyZXF1ZXN0SWQoaWRlbnRpZmllcik7Ci0gICAgU3RyaW5nIGZyYW1lSWQgPSBmcmFt
ZUlkZW50aWZpZXIobG9hZGVyKTsKLSAgICBTdHJpbmcgbG9hZGVySWQgPSBsb2FkZXJJZGVudGlm
aWVyKGxvYWRlcik7CisgICAgYXV0byByZXF1ZXN0SWQgPSBJZGVudGlmaWVyc0ZhY3Rvcnk6OnJl
cXVlc3RJZChpZGVudGlmaWVyKTsKKyAgICBhdXRvIGZyYW1lSWQgPSBmcmFtZUlkZW50aWZpZXIo
bG9hZGVyKTsKKyAgICBhdXRvIGxvYWRlcklkID0gbG9hZGVySWRlbnRpZmllcihsb2FkZXIpOwog
ICAgIFN0cmluZyB0YXJnZXRJZCA9IHJlcXVlc3QuaW5pdGlhdG9ySWRlbnRpZmllcigpOwogCiAg
ICAgaWYgKHR5cGUgPT0gSW5zcGVjdG9yUGFnZUFnZW50OjpPdGhlclJlc291cmNlKSB7CkBAIC00
NjIsNyArNDYxLDEwIEBAIHZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50Ojp3aWxsU2VuZFJlcXVl
c3QodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBEb2N1bWVudExvCiAgICAgYXV0byBpbml0aWF0
b3JPYmplY3QgPSBidWlsZEluaXRpYXRvck9iamVjdChkb2N1bWVudCwgJnJlcXVlc3QpOwogCiAg
ICAgU3RyaW5nIHVybCA9IGxvYWRlciA/IGxvYWRlci0+dXJsKCkuc3RyaW5nKCkgOiByZXF1ZXN0
LnVybCgpLnN0cmluZygpOwotICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5yZXF1ZXN0V2lsbEJl
U2VudChyZXF1ZXN0SWQsIGZyYW1lSWQsIGxvYWRlcklkLCB1cmwsIGJ1aWxkT2JqZWN0Rm9yUmVz
b3VyY2VSZXF1ZXN0KHJlcXVlc3QpLCBzZW5kVGltZXN0YW1wLCB3YWxsdGltZS5zZWNvbmRzU2lu
Y2VFcG9jaCgpLnNlY29uZHMoKSwgaW5pdGlhdG9yT2JqZWN0LCBidWlsZE9iamVjdEZvclJlc291
cmNlUmVzcG9uc2UocmVkaXJlY3RSZXNwb25zZSwgbnVsbHB0ciksIHR5cGUgIT0gSW5zcGVjdG9y
UGFnZUFnZW50OjpPdGhlclJlc291cmNlID8gJnByb3RvY29sUmVzb3VyY2VUeXBlIDogbnVsbHB0
ciwgdGFyZ2V0SWQuaXNFbXB0eSgpID8gbnVsbHB0ciA6ICZ0YXJnZXRJZCk7CisgICAgT3B0aW9u
YWw8UHJvdG9jb2w6OlBhZ2U6OlJlc291cmNlVHlwZT4gdHlwZVBheWxvYWQ7CisgICAgaWYgKHR5
cGUgIT0gSW5zcGVjdG9yUGFnZUFnZW50OjpPdGhlclJlc291cmNlKQorICAgICAgICB0eXBlUGF5
bG9hZCA9IHByb3RvY29sUmVzb3VyY2VUeXBlOworICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5y
ZXF1ZXN0V2lsbEJlU2VudChyZXF1ZXN0SWQsIGZyYW1lSWQsIGxvYWRlcklkLCB1cmwsIGJ1aWxk
T2JqZWN0Rm9yUmVzb3VyY2VSZXF1ZXN0KHJlcXVlc3QpLCBzZW5kVGltZXN0YW1wLCB3YWxsdGlt
ZS5zZWNvbmRzU2luY2VFcG9jaCgpLnNlY29uZHMoKSwgV1RGTW92ZShpbml0aWF0b3JPYmplY3Qp
LCBidWlsZE9iamVjdEZvclJlc291cmNlUmVzcG9uc2UocmVkaXJlY3RSZXNwb25zZSwgbnVsbHB0
ciksIFdURk1vdmUodHlwZVBheWxvYWQpLCB0YXJnZXRJZCk7CiB9CiAKIHN0YXRpYyBJbnNwZWN0
b3JQYWdlQWdlbnQ6OlJlc291cmNlVHlwZSByZXNvdXJjZVR5cGVGb3JDYWNoZWRSZXNvdXJjZShD
YWNoZWRSZXNvdXJjZSogcmVzb3VyY2UpCkBAIC01MTQsNyArNTE2LDggQEAgdm9pZCBJbnNwZWN0
b3JOZXR3b3JrQWdlbnQ6OmRpZFJlY2VpdmVSZXNwb25zZSh1bnNpZ25lZCBsb25nIGlkZW50aWZp
ZXIsIERvY3VtZW4KICAgICAgICAgfSk7CiAgICAgfQogCi0gICAgUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6Ok5ldHdvcms6OlJlc3BvbnNlPiByZXNvdXJjZVJlc3BvbnNlID0gYnVpbGRPYmpl
Y3RGb3JSZXNvdXJjZVJlc3BvbnNlKHJlYWxSZXNwb25zZSA/ICpyZWFsUmVzcG9uc2UgOiByZXNw
b25zZSwgcmVzb3VyY2VMb2FkZXIpOworICAgIFJlZlB0cjxQcm90b2NvbDo6TmV0d29yazo6UmVz
cG9uc2U+IHJlc291cmNlUmVzcG9uc2UgPSBidWlsZE9iamVjdEZvclJlc291cmNlUmVzcG9uc2Uo
cmVhbFJlc3BvbnNlID8gKnJlYWxSZXNwb25zZSA6IHJlc3BvbnNlLCByZXNvdXJjZUxvYWRlcik7
CisgICAgQVNTRVJUKHJlc291cmNlUmVzcG9uc2UpOwogCiAgICAgYm9vbCBpc05vdE1vZGlmaWVk
ID0gcmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKSA9PSAzMDQ7CiAKQEAgLTUyNyw3ICs1MzAsNyBA
QCB2b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6ZGlkUmVjZWl2ZVJlc3BvbnNlKHVuc2lnbmVk
IGxvbmcgaWRlbnRpZmllciwgRG9jdW1lbgogICAgIGlmIChjYWNoZWRSZXNvdXJjZSkgewogICAg
ICAgICAvLyBVc2UgbWltZSB0eXBlIGZyb20gY2FjaGVkIHJlc291cmNlIGluIGNhc2UgdGhlIG9u
ZSBpbiByZXNwb25zZSBpcyBlbXB0eS4KICAgICAgICAgaWYgKHJlc291cmNlUmVzcG9uc2UgJiYg
cmVzcG9uc2UubWltZVR5cGUoKS5pc0VtcHR5KCkpCi0gICAgICAgICAgICByZXNvdXJjZVJlc3Bv
bnNlLT5zZXRTdHJpbmcoSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6UmVzcG9uc2U6Ok1p
bWVUeXBlLCBjYWNoZWRSZXNvdXJjZS0+cmVzcG9uc2UoKS5taW1lVHlwZSgpKTsKKyAgICAgICAg
ICAgIHJlc291cmNlUmVzcG9uc2UtPnNldFN0cmluZyhQcm90b2NvbDo6TmV0d29yazo6UmVzcG9u
c2U6Om1pbWVUeXBlS2V5LCBjYWNoZWRSZXNvdXJjZS0+cmVzcG9uc2UoKS5taW1lVHlwZSgpKTsK
ICAgICAgICAgbV9yZXNvdXJjZXNEYXRhLT5hZGRDYWNoZWRSZXNvdXJjZShyZXF1ZXN0SWQsIGNh
Y2hlZFJlc291cmNlKTsKICAgICB9CiAKQEAgLTU0OSwyMSArNTUyLDIxIEBAIHZvaWQgSW5zcGVj
dG9yTmV0d29ya0FnZW50OjpkaWRSZWNlaXZlUmVzcG9uc2UodW5zaWduZWQgbG9uZyBpZGVudGlm
aWVyLCBEb2N1bWVuCiAgICAgICAgICAgICAgICAgbV9yZXNvdXJjZXNEYXRhLT5tYXliZUFkZFJl
c291cmNlRGF0YShyZXF1ZXN0SWQsIHByZXZpb3VzQnVmZmVyLT5kYXRhKCksIHByZXZpb3VzQnVm
ZmVyLT5zaXplKCkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBy
ZXNvdXJjZVJlc3BvbnNlLT5zZXRTdHJpbmcoIm1pbWVUeXBlIl9zLCBwcmV2aW91c1Jlc291cmNl
RGF0YS0+bWltZVR5cGUoKSk7CisgICAgICAgICAgICByZXNvdXJjZVJlc3BvbnNlLT5zZXRTdHJp
bmcoUHJvdG9jb2w6Ok5ldHdvcms6OlJlc3BvbnNlOjptaW1lVHlwZUtleSwgcHJldmlvdXNSZXNv
dXJjZURhdGEtPm1pbWVUeXBlKCkpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICByZXNvdXJj
ZVJlc3BvbnNlLT5zZXRJbnRlZ2VyKCJzdGF0dXMiX3MsIHByZXZpb3VzUmVzb3VyY2VEYXRhLT5o
dHRwU3RhdHVzQ29kZSgpKTsKLSAgICAgICAgICAgIHJlc291cmNlUmVzcG9uc2UtPnNldFN0cmlu
Zygic3RhdHVzVGV4dCJfcywgcHJldmlvdXNSZXNvdXJjZURhdGEtPmh0dHBTdGF0dXNUZXh0KCkp
OworICAgICAgICAgICAgcmVzb3VyY2VSZXNwb25zZS0+c2V0SW50ZWdlcihQcm90b2NvbDo6TmV0
d29yazo6UmVzcG9uc2U6OnN0YXR1c0tleSwgcHJldmlvdXNSZXNvdXJjZURhdGEtPmh0dHBTdGF0
dXNDb2RlKCkpOworICAgICAgICAgICAgcmVzb3VyY2VSZXNwb25zZS0+c2V0U3RyaW5nKFByb3Rv
Y29sOjpOZXR3b3JrOjpSZXNwb25zZTo6c3RhdHVzVGV4dEtleSwgcHJldmlvdXNSZXNvdXJjZURh
dGEtPmh0dHBTdGF0dXNUZXh0KCkpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICByZXNvdXJj
ZVJlc3BvbnNlLT5zZXRTdHJpbmcoInNvdXJjZSJfcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6SW5z
cGVjdG9ySGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUoSW5zcGVjdG9yOjpQcm90b2NvbDo6
TmV0d29yazo6UmVzcG9uc2U6OlNvdXJjZTo6RGlza0NhY2hlKSk7CisgICAgICAgICAgICByZXNv
dXJjZVJlc3BvbnNlLT5zZXRTdHJpbmcoUHJvdG9jb2w6Ok5ldHdvcms6OlJlc3BvbnNlOjpzb3Vy
Y2VLZXksIFByb3RvY29sOjpIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShQcm90b2NvbDo6
TmV0d29yazo6UmVzcG9uc2U6OlNvdXJjZTo6RGlza0NhY2hlKSk7CiAgICAgICAgIH0KICAgICB9
CiAKLSAgICBTdHJpbmcgZnJhbWVJZCA9IGZyYW1lSWRlbnRpZmllcihsb2FkZXIpOwotICAgIFN0
cmluZyBsb2FkZXJJZCA9IGxvYWRlcklkZW50aWZpZXIobG9hZGVyKTsKKyAgICBQcm90b2NvbDo6
TmV0d29yazo6RnJhbWVJZCBmcmFtZUlkID0gZnJhbWVJZGVudGlmaWVyKGxvYWRlcik7CisgICAg
UHJvdG9jb2w6Ok5ldHdvcms6OkxvYWRlcklkIGxvYWRlcklkID0gbG9hZGVySWRlbnRpZmllcihs
b2FkZXIpOwogCiAgICAgbV9yZXNvdXJjZXNEYXRhLT5yZXNwb25zZVJlY2VpdmVkKHJlcXVlc3RJ
ZCwgZnJhbWVJZCwgcmVzcG9uc2UsIHR5cGUsIHNob3VsZEZvcmNlQnVmZmVyaW5nTmV0d29ya1Jl
c291cmNlRGF0YSgpKTsKIAotICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5yZXNwb25zZVJlY2Vp
dmVkKHJlcXVlc3RJZCwgZnJhbWVJZCwgbG9hZGVySWQsIHRpbWVzdGFtcCgpLCBJbnNwZWN0b3JQ
YWdlQWdlbnQ6OnJlc291cmNlVHlwZUpTT04odHlwZSksIHJlc291cmNlUmVzcG9uc2UpOworICAg
IG1fZnJvbnRlbmREaXNwYXRjaGVyLT5yZXNwb25zZVJlY2VpdmVkKHJlcXVlc3RJZCwgZnJhbWVJ
ZCwgbG9hZGVySWQsIHRpbWVzdGFtcCgpLCBJbnNwZWN0b3JQYWdlQWdlbnQ6OnJlc291cmNlVHlw
ZUpTT04odHlwZSksIHJlc291cmNlUmVzcG9uc2UucmVsZWFzZU5vbk51bGwoKSk7CiAKICAgICAv
LyBJZiB3ZSByZXZhbGlkYXRlZCB0aGUgcmVzb3VyY2UgYW5kIGdvdCBOb3QgbW9kaWZpZWQsIHNl
bmQgY29udGVudCBsZW5ndGggZm9sbG93aW5nIGRpZFJlY2VpdmVSZXNwb25zZQogICAgIC8vIGFz
IHRoZXJlIHdpbGwgYmUgbm8gY2FsbHMgdG8gZGlkUmVjZWl2ZURhdGEgZnJvbSB0aGUgbmV0d29y
ayBzdGFjay4KQEAgLTYyMSw5ICs2MjQsOSBAQCB2b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6
ZGlkRmluaXNoTG9hZGluZyh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIERvY3VtZW50TAogICAg
ICAgICAgICAgcmVhbE1ldHJpY3MgPSBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+bG9hZGVyU3RyYXRl
Z3koKS0+bmV0d29ya01ldHJpY3NGcm9tUmVzb3VyY2VMb2FkSWRlbnRpZmllcihpZGVudGlmaWVy
KS5pc29sYXRlZENvcHkoKTsKICAgICAgICAgfSk7CiAgICAgfQotICAgIFJlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpOZXR3b3JrOjpNZXRyaWNzPiBtZXRyaWNzID0gYnVpbGRPYmplY3RGb3JN
ZXRyaWNzKHJlYWxNZXRyaWNzID8gKnJlYWxNZXRyaWNzIDogbmV0d29ya0xvYWRNZXRyaWNzKTsK
KyAgICBSZWZQdHI8UHJvdG9jb2w6Ok5ldHdvcms6Ok1ldHJpY3M+IG1ldHJpY3MgPSBidWlsZE9i
amVjdEZvck1ldHJpY3MocmVhbE1ldHJpY3MgPyAqcmVhbE1ldHJpY3MgOiBuZXR3b3JrTG9hZE1l
dHJpY3MpOwogCi0gICAgbV9mcm9udGVuZERpc3BhdGNoZXItPmxvYWRpbmdGaW5pc2hlZChyZXF1
ZXN0SWQsIGVsYXBzZWRGaW5pc2hUaW1lLCAhc291cmNlTWFwcGluZ1VSTC5pc0VtcHR5KCkgPyAm
c291cmNlTWFwcGluZ1VSTCA6IG51bGxwdHIsIG1ldHJpY3MpOworICAgIG1fZnJvbnRlbmREaXNw
YXRjaGVyLT5sb2FkaW5nRmluaXNoZWQocmVxdWVzdElkLCBlbGFwc2VkRmluaXNoVGltZSwgc291
cmNlTWFwcGluZ1VSTCwgV1RGTW92ZShtZXRyaWNzKSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yTmV0
d29ya0FnZW50OjpkaWRGYWlsTG9hZGluZyh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIERvY3Vt
ZW50TG9hZGVyKiBsb2FkZXIsIGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQpAQCAtNjQyLDgg
KzY0NSw3IEBAIHZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50OjpkaWRGYWlsTG9hZGluZyh1bnNp
Z25lZCBsb25nIGlkZW50aWZpZXIsIERvY3VtZW50TG9hCiAgICAgICAgIH0KICAgICB9CiAKLSAg
ICBib29sIGNhbmNlbGVkID0gZXJyb3IuaXNDYW5jZWxsYXRpb24oKTsKLSAgICBtX2Zyb250ZW5k
RGlzcGF0Y2hlci0+bG9hZGluZ0ZhaWxlZChyZXF1ZXN0SWQsIHRpbWVzdGFtcCgpLCBlcnJvci5s
b2NhbGl6ZWREZXNjcmlwdGlvbigpLCBjYW5jZWxlZCA/ICZjYW5jZWxlZCA6IG51bGxwdHIpOwor
ICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5sb2FkaW5nRmFpbGVkKHJlcXVlc3RJZCwgdGltZXN0
YW1wKCksIGVycm9yLmxvY2FsaXplZERlc2NyaXB0aW9uKCksIGVycm9yLmlzQ2FuY2VsbGF0aW9u
KCkpOwogfQogCiB2b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6ZGlkTG9hZFJlc291cmNlRnJv
bU1lbW9yeUNhY2hlKERvY3VtZW50TG9hZGVyKiBsb2FkZXIsIENhY2hlZFJlc291cmNlJiByZXNv
dXJjZSkKQEAgLTY1NCw4ICs2NTYsOCBAQCB2b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6ZGlk
TG9hZFJlc291cmNlRnJvbU1lbW9yeUNhY2hlKERvY3VtZW50TG9hZGVyKiBsb2FkZQogCiAgICAg
dW5zaWduZWQgbG9uZyBpZGVudGlmaWVyID0gbG9hZGVyLT5mcmFtZSgpLT5wYWdlKCktPnByb2dy
ZXNzKCkuY3JlYXRlVW5pcXVlSWRlbnRpZmllcigpOwogICAgIFN0cmluZyByZXF1ZXN0SWQgPSBJ
ZGVudGlmaWVyc0ZhY3Rvcnk6OnJlcXVlc3RJZChpZGVudGlmaWVyKTsKLSAgICBTdHJpbmcgbG9h
ZGVySWQgPSBsb2FkZXJJZGVudGlmaWVyKGxvYWRlcik7Ci0gICAgU3RyaW5nIGZyYW1lSWQgPSBm
cmFtZUlkZW50aWZpZXIobG9hZGVyKTsKKyAgICBQcm90b2NvbDo6TmV0d29yazo6TG9hZGVySWQg
bG9hZGVySWQgPSBsb2FkZXJJZGVudGlmaWVyKGxvYWRlcik7CisgICAgUHJvdG9jb2w6Ok5ldHdv
cms6OkZyYW1lSWQgZnJhbWVJZCA9IGZyYW1lSWRlbnRpZmllcihsb2FkZXIpOwogCiAgICAgbV9y
ZXNvdXJjZXNEYXRhLT5yZXNvdXJjZUNyZWF0ZWQocmVxdWVzdElkLCBsb2FkZXJJZCwgcmVzb3Vy
Y2UpOwogCkBAIC02NjUsNyArNjY3LDcgQEAgdm9pZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmRp
ZExvYWRSZXNvdXJjZUZyb21NZW1vcnlDYWNoZShEb2N1bWVudExvYWRlciogbG9hZGUKICAgICAv
LyBpbnN0ZWFkIG9mIHdoYXRldmVyIFJlc291cmNlUmVzcG9uc2U6OlNvdXJjZSB0aGUgQ2FjaGVk
UmVzb3VyY2VzJ3MgcmVzcG9uc2UgaGFzLgogICAgIC8vIFRoZSBmcm9udGVuZCBhbHJlYWR5IGtu
b3dzIGZvciBjZXJ0YWluIHRoYXQgdGhpcyB3YXMgc2VydmVkIGZyb20gdGhlIG1lbW9yeSBjYWNo
ZS4KIAotICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5yZXF1ZXN0U2VydmVkRnJvbU1lbW9yeUNh
Y2hlKHJlcXVlc3RJZCwgZnJhbWVJZCwgbG9hZGVySWQsIGxvYWRlci0+dXJsKCkuc3RyaW5nKCks
IHRpbWVzdGFtcCgpLCBpbml0aWF0b3JPYmplY3QsIGJ1aWxkT2JqZWN0Rm9yQ2FjaGVkUmVzb3Vy
Y2UoJnJlc291cmNlKSk7CisgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPnJlcXVlc3RTZXJ2ZWRG
cm9tTWVtb3J5Q2FjaGUocmVxdWVzdElkLCBmcmFtZUlkLCBsb2FkZXJJZCwgbG9hZGVyLT51cmwo
KS5zdHJpbmcoKSwgdGltZXN0YW1wKCksIFdURk1vdmUoaW5pdGlhdG9yT2JqZWN0KSwgYnVpbGRP
YmplY3RGb3JDYWNoZWRSZXNvdXJjZSgmcmVzb3VyY2UpKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JO
ZXR3b3JrQWdlbnQ6OnNldEluaXRpYWxTY3JpcHRDb250ZW50KHVuc2lnbmVkIGxvbmcgaWRlbnRp
ZmllciwgY29uc3QgU3RyaW5nJiBzb3VyY2VTdHJpbmcpCkBAIC03MjksMjYgKzczMSwyNiBAQCB2
b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6ZGlkU2NoZWR1bGVTdHlsZVJlY2FsY3VsYXRpb24o
RG9jdW1lbnQmIGRvY3VtZW50KQogICAgICAgICBtX3N0eWxlUmVjYWxjdWxhdGlvbkluaXRpYXRv
ciA9IGJ1aWxkSW5pdGlhdG9yT2JqZWN0KCZkb2N1bWVudCk7CiB9CiAKLVJlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpOZXR3b3JrOjpJbml0aWF0b3I+IEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6
YnVpbGRJbml0aWF0b3JPYmplY3QoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBSZXNvdXJjZVJl
cXVlc3QqIHJlc291cmNlUmVxdWVzdCkKK1JlZjxQcm90b2NvbDo6TmV0d29yazo6SW5pdGlhdG9y
PiBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmJ1aWxkSW5pdGlhdG9yT2JqZWN0KERvY3VtZW50KiBk
b2N1bWVudCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0KiByZXNvdXJjZVJlcXVlc3QpCiB7CiAgICAg
Ly8gRklYTUU6IFdvcmtlciBzdXBwb3J0LgogICAgIGlmICghaXNNYWluVGhyZWFkKCkpIHsKLSAg
ICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OkluaXRpYXRvcjo6Y3Jl
YXRlKCkKLSAgICAgICAgICAgIC5zZXRUeXBlKEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6
OkluaXRpYXRvcjo6VHlwZTo6T3RoZXIpCisgICAgICAgIHJldHVybiBQcm90b2NvbDo6TmV0d29y
azo6SW5pdGlhdG9yOjpjcmVhdGUoKQorICAgICAgICAgICAgLnNldFR5cGUoUHJvdG9jb2w6Ok5l
dHdvcms6OkluaXRpYXRvcjo6VHlwZTo6T3RoZXIpCiAgICAgICAgICAgICAucmVsZWFzZSgpOwog
ICAgIH0KIAotICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpJbml0aWF0
b3I+IGluaXRpYXRvck9iamVjdDsKKyAgICBSZWZQdHI8UHJvdG9jb2w6Ok5ldHdvcms6OkluaXRp
YXRvcj4gaW5pdGlhdG9yT2JqZWN0OwogCiAgICAgUmVmPFNjcmlwdENhbGxTdGFjaz4gc3RhY2tU
cmFjZSA9IGNyZWF0ZVNjcmlwdENhbGxTdGFjayhKU0V4ZWNTdGF0ZTo6Y3VycmVudFN0YXRlKCkp
OwogICAgIGlmIChzdGFja1RyYWNlLT5zaXplKCkgPiAwKSB7Ci0gICAgICAgIGluaXRpYXRvck9i
amVjdCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OkluaXRpYXRvcjo6Y3JlYXRlKCkK
LSAgICAgICAgICAgIC5zZXRUeXBlKEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OkluaXRp
YXRvcjo6VHlwZTo6U2NyaXB0KQorICAgICAgICBpbml0aWF0b3JPYmplY3QgPSBQcm90b2NvbDo6
TmV0d29yazo6SW5pdGlhdG9yOjpjcmVhdGUoKQorICAgICAgICAgICAgLnNldFR5cGUoUHJvdG9j
b2w6Ok5ldHdvcms6OkluaXRpYXRvcjo6VHlwZTo6U2NyaXB0KQogICAgICAgICAgICAgLnJlbGVh
c2UoKTsKICAgICAgICAgaW5pdGlhdG9yT2JqZWN0LT5zZXRTdGFja1RyYWNlKHN0YWNrVHJhY2Ut
PmJ1aWxkSW5zcGVjdG9yQXJyYXkoKSk7CiAgICAgfSBlbHNlIGlmIChkb2N1bWVudCAmJiBkb2N1
bWVudC0+c2NyaXB0YWJsZURvY3VtZW50UGFyc2VyKCkpIHsKLSAgICAgICAgaW5pdGlhdG9yT2Jq
ZWN0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6SW5pdGlhdG9yOjpjcmVhdGUoKQot
ICAgICAgICAgICAgLnNldFR5cGUoSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6SW5pdGlh
dG9yOjpUeXBlOjpQYXJzZXIpCisgICAgICAgIGluaXRpYXRvck9iamVjdCA9IFByb3RvY29sOjpO
ZXR3b3JrOjpJbml0aWF0b3I6OmNyZWF0ZSgpCisgICAgICAgICAgICAuc2V0VHlwZShQcm90b2Nv
bDo6TmV0d29yazo6SW5pdGlhdG9yOjpUeXBlOjpQYXJzZXIpCiAgICAgICAgICAgICAucmVsZWFz
ZSgpOwogICAgICAgICBpbml0aWF0b3JPYmplY3QtPnNldFVybChkb2N1bWVudC0+dXJsKCkuc3Ry
aW5nKCkpOwogICAgICAgICBpbml0aWF0b3JPYmplY3QtPnNldExpbmVOdW1iZXIoZG9jdW1lbnQt
PnNjcmlwdGFibGVEb2N1bWVudFBhcnNlcigpLT50ZXh0UG9zaXRpb24oKS5tX2xpbmUub25lQmFz
ZWRJbnQoKSk7CkBAIC03NTgsOCArNzYwLDggQEAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
Ok5ldHdvcms6OkluaXRpYXRvcj4gSW5zcGVjdG9yTmV0d29ya0FnZW50OjpidWlsZEluaXQKICAg
ICBpZiAoZG9tQWdlbnQgJiYgcmVzb3VyY2VSZXF1ZXN0KSB7CiAgICAgICAgIGlmIChhdXRvIGlu
c3BlY3RvckluaXRpYXRvck5vZGVJZGVudGlmaWVyID0gcmVzb3VyY2VSZXF1ZXN0LT5pbnNwZWN0
b3JJbml0aWF0b3JOb2RlSWRlbnRpZmllcigpKSB7CiAgICAgICAgICAgICBpZiAoIWluaXRpYXRv
ck9iamVjdCkgewotICAgICAgICAgICAgICAgIGluaXRpYXRvck9iamVjdCA9IEluc3BlY3Rvcjo6
UHJvdG9jb2w6Ok5ldHdvcms6OkluaXRpYXRvcjo6Y3JlYXRlKCkKLSAgICAgICAgICAgICAgICAg
ICAgLnNldFR5cGUoSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6SW5pdGlhdG9yOjpUeXBl
OjpPdGhlcikKKyAgICAgICAgICAgICAgICBpbml0aWF0b3JPYmplY3QgPSBQcm90b2NvbDo6TmV0
d29yazo6SW5pdGlhdG9yOjpjcmVhdGUoKQorICAgICAgICAgICAgICAgICAgICAuc2V0VHlwZShQ
cm90b2NvbDo6TmV0d29yazo6SW5pdGlhdG9yOjpUeXBlOjpPdGhlcikKICAgICAgICAgICAgICAg
ICAgICAgLnJlbGVhc2UoKTsKICAgICAgICAgICAgIH0KIApAQCAtNzY4LDEzICs3NzAsMTMgQEAg
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OkluaXRpYXRvcj4gSW5zcGVjdG9y
TmV0d29ya0FnZW50OjpidWlsZEluaXQKICAgICB9CiAKICAgICBpZiAoaW5pdGlhdG9yT2JqZWN0
KQotICAgICAgICByZXR1cm4gaW5pdGlhdG9yT2JqZWN0OworICAgICAgICByZXR1cm4gaW5pdGlh
dG9yT2JqZWN0LnJlbGVhc2VOb25OdWxsKCk7CiAKICAgICBpZiAobV9pc1JlY2FsY3VsYXRpbmdT
dHlsZSAmJiBtX3N0eWxlUmVjYWxjdWxhdGlvbkluaXRpYXRvcikKLSAgICAgICAgcmV0dXJuIG1f
c3R5bGVSZWNhbGN1bGF0aW9uSW5pdGlhdG9yOworICAgICAgICByZXR1cm4gKm1fc3R5bGVSZWNh
bGN1bGF0aW9uSW5pdGlhdG9yOwogCi0gICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5l
dHdvcms6OkluaXRpYXRvcjo6Y3JlYXRlKCkKLSAgICAgICAgLnNldFR5cGUoSW5zcGVjdG9yOjpQ
cm90b2NvbDo6TmV0d29yazo6SW5pdGlhdG9yOjpUeXBlOjpPdGhlcikKKyAgICByZXR1cm4gUHJv
dG9jb2w6Ok5ldHdvcms6OkluaXRpYXRvcjo6Y3JlYXRlKCkKKyAgICAgICAgLnNldFR5cGUoUHJv
dG9jb2w6Ok5ldHdvcms6OkluaXRpYXRvcjo6VHlwZTo6T3RoZXIpCiAgICAgICAgIC5yZWxlYXNl
KCk7CiB9CiAKQEAgLTc4NSw3ICs3ODcsNyBAQCB2b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6
ZGlkQ3JlYXRlV2ViU29ja2V0KHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgVQogCiB2
b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6d2lsbFNlbmRXZWJTb2NrZXRIYW5kc2hha2VSZXF1
ZXN0KHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1
ZXN0KQogewotICAgIGF1dG8gcmVxdWVzdE9iamVjdCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5l
dHdvcms6OldlYlNvY2tldFJlcXVlc3Q6OmNyZWF0ZSgpCisgICAgYXV0byByZXF1ZXN0T2JqZWN0
ID0gUHJvdG9jb2w6Ok5ldHdvcms6OldlYlNvY2tldFJlcXVlc3Q6OmNyZWF0ZSgpCiAgICAgICAg
IC5zZXRIZWFkZXJzKGJ1aWxkT2JqZWN0Rm9ySGVhZGVycyhyZXF1ZXN0Lmh0dHBIZWFkZXJGaWVs
ZHMoKSkpCiAgICAgICAgIC5yZWxlYXNlKCk7CiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPndl
YlNvY2tldFdpbGxTZW5kSGFuZHNoYWtlUmVxdWVzdChJZGVudGlmaWVyc0ZhY3Rvcnk6OnJlcXVl
c3RJZChpZGVudGlmaWVyKSwgdGltZXN0YW1wKCksIFdhbGxUaW1lOjpub3coKS5zZWNvbmRzU2lu
Y2VFcG9jaCgpLnNlY29uZHMoKSwgV1RGTW92ZShyZXF1ZXN0T2JqZWN0KSk7CkBAIC03OTMsNyAr
Nzk1LDcgQEAgdm9pZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OndpbGxTZW5kV2ViU29ja2V0SGFu
ZHNoYWtlUmVxdWVzdCh1bnNpZ25lZCBsb25nIGlkZW4KIAogdm9pZCBJbnNwZWN0b3JOZXR3b3Jr
QWdlbnQ6OmRpZFJlY2VpdmVXZWJTb2NrZXRIYW5kc2hha2VSZXNwb25zZSh1bnNpZ25lZCBsb25n
IGlkZW50aWZpZXIsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQogewotICAgIGF1
dG8gcmVzcG9uc2VPYmplY3QgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpXZWJTb2Nr
ZXRSZXNwb25zZTo6Y3JlYXRlKCkKKyAgICBhdXRvIHJlc3BvbnNlT2JqZWN0ID0gUHJvdG9jb2w6
Ok5ldHdvcms6OldlYlNvY2tldFJlc3BvbnNlOjpjcmVhdGUoKQogICAgICAgICAuc2V0U3RhdHVz
KHJlc3BvbnNlLmh0dHBTdGF0dXNDb2RlKCkpCiAgICAgICAgIC5zZXRTdGF0dXNUZXh0KHJlc3Bv
bnNlLmh0dHBTdGF0dXNUZXh0KCkpCiAgICAgICAgIC5zZXRIZWFkZXJzKGJ1aWxkT2JqZWN0Rm9y
SGVhZGVycyhyZXNwb25zZS5odHRwSGVhZGVyRmllbGRzKCkpKQpAQCAtODIwLDEyICs4MjIsNyBA
QCB2b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6ZGlkUmVjZWl2ZVdlYlNvY2tldEZyYW1lRXJy
b3IodW5zaWduZWQgbG9uZyBpZGVudGlmaQogICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT53ZWJT
b2NrZXRGcmFtZUVycm9yKElkZW50aWZpZXJzRmFjdG9yeTo6cmVxdWVzdElkKGlkZW50aWZpZXIp
LCB0aW1lc3RhbXAoKSwgZXJyb3JNZXNzYWdlKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JOZXR3b3Jr
QWdlbnQ6OmVuYWJsZShFcnJvclN0cmluZyYpCi17Ci0gICAgZW5hYmxlKCk7Ci19Ci0KLXZvaWQg
SW5zcGVjdG9yTmV0d29ya0FnZW50OjplbmFibGUoKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8
dm9pZD4gSW5zcGVjdG9yTmV0d29ya0FnZW50OjplbmFibGUoKQogewogICAgIG1fZW5hYmxlZCA9
IHRydWU7CiAgICAgbV9pbnN0cnVtZW50aW5nQWdlbnRzLnNldEVuYWJsZWROZXR3b3JrQWdlbnQo
dGhpcyk7CkBAIC04NTcsOSArODU0LDExIEBAIHZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50Ojpl
bmFibGUoKQogICAgICAgICAgICAgICAgIGRpZENsb3NlV2ViU29ja2V0KGlkZW50aWZpZXIpOwog
ICAgICAgICB9CiAgICAgfQorCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JO
ZXR3b3JrQWdlbnQ6OmRpc2FibGUoRXJyb3JTdHJpbmcmKQorUHJvdG9jb2w6OkVycm9yU3RyaW5n
T3I8dm9pZD4gSW5zcGVjdG9yTmV0d29ya0FnZW50OjpkaXNhYmxlKCkKIHsKICAgICBtX2VuYWJs
ZWQgPSBmYWxzZTsKICAgICBtX2ludGVyY2VwdGlvbkVuYWJsZWQgPSBmYWxzZTsKQEAgLTg3Miw5
ICs4NzEsMTEgQEAgdm9pZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmRpc2FibGUoRXJyb3JTdHJp
bmcmKQogICAgIGNvbnRpbnVlUGVuZGluZ1Jlc3BvbnNlcygpOwogCiAgICAgc2V0UmVzb3VyY2VD
YWNoaW5nRGlzYWJsZWQoZmFsc2UpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotYm9vbCBJbnNw
ZWN0b3JOZXR3b3JrQWdlbnQ6OnNob3VsZEludGVyY2VwdChVUkwgdXJsLCBOZXR3b3JrU3RhZ2Ug
bmV0d29ya1N0YWdlKQorYm9vbCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OnNob3VsZEludGVyY2Vw
dChVUkwgdXJsLCBQcm90b2NvbDo6TmV0d29yazo6TmV0d29ya1N0YWdlIG5ldHdvcmtTdGFnZSkK
IHsKICAgICB1cmwucmVtb3ZlRnJhZ21lbnRJZGVudGlmaWVyKCk7CiAKQEAgLTkxMSw1NiArOTEy
LDU1IEBAIHZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50Ojpjb250aW51ZVBlbmRpbmdSZXNwb25z
ZXMoKQogICAgIG1fcGVuZGluZ0ludGVyY2VwdFJlc3BvbnNlcy5jbGVhcigpOwogfQogCi12b2lk
IEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6c2V0RXh0cmFIVFRQSGVhZGVycyhFcnJvclN0cmluZyYs
IGNvbnN0IEpTT046Ok9iamVjdCYgaGVhZGVycykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZv
aWQ+IEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6c2V0RXh0cmFIVFRQSGVhZGVycyhSZWY8SlNPTjo6
T2JqZWN0PiYmIGhlYWRlcnMpCiB7Ci0gICAgZm9yIChhdXRvJiBlbnRyeSA6IGhlYWRlcnMpIHsK
LSAgICAgICAgU3RyaW5nIHN0cmluZ1ZhbHVlOwotICAgICAgICBpZiAoZW50cnkudmFsdWUtPmFz
U3RyaW5nKHN0cmluZ1ZhbHVlKSkKKyAgICBmb3IgKGF1dG8mIGVudHJ5IDogaGVhZGVycy5nZXQo
KSkgeworICAgICAgICBhdXRvIHN0cmluZ1ZhbHVlID0gZW50cnkudmFsdWUtPmFzU3RyaW5nKCk7
CisgICAgICAgIGlmICghIXN0cmluZ1ZhbHVlKQogICAgICAgICAgICAgbV9leHRyYVJlcXVlc3RI
ZWFkZXJzLnNldChlbnRyeS5rZXksIHN0cmluZ1ZhbHVlKTsKICAgICB9CisKKyAgICByZXR1cm4g
eyB9OwogfQogCi12b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6Z2V0UmVzcG9uc2VCb2R5KEVy
cm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIFN0cmluZyog
Y29udGVudCwgYm9vbCogYmFzZTY0RW5jb2RlZCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHN0
ZDo6dHVwbGU8U3RyaW5nLCBib29sIC8qIGJhc2U2NEVuY29kZWQgKi8+PiBJbnNwZWN0b3JOZXR3
b3JrQWdlbnQ6OmdldFJlc3BvbnNlQm9keShjb25zdCBQcm90b2NvbDo6TmV0d29yazo6UmVxdWVz
dElkJiByZXF1ZXN0SWQpCiB7CiAgICAgTmV0d29ya1Jlc291cmNlc0RhdGE6OlJlc291cmNlRGF0
YSBjb25zdCogcmVzb3VyY2VEYXRhID0gbV9yZXNvdXJjZXNEYXRhLT5kYXRhKHJlcXVlc3RJZCk7
Ci0gICAgaWYgKCFyZXNvdXJjZURhdGEpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWlzc2lu
ZyByZXNvdXJjZSBmb3IgZ2l2ZW4gcmVxdWVzdElkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAg
fQorICAgIGlmICghcmVzb3VyY2VEYXRhKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQo
Ik1pc3NpbmcgcmVzb3VyY2UgZm9yIGdpdmVuIHJlcXVlc3RJZCJfcyk7CiAKLSAgICBpZiAocmVz
b3VyY2VEYXRhLT5oYXNDb250ZW50KCkpIHsKLSAgICAgICAgKmJhc2U2NEVuY29kZWQgPSByZXNv
dXJjZURhdGEtPmJhc2U2NEVuY29kZWQoKTsKLSAgICAgICAgKmNvbnRlbnQgPSByZXNvdXJjZURh
dGEtPmNvbnRlbnQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAocmVzb3VyY2VE
YXRhLT5oYXNDb250ZW50KCkpCisgICAgICAgIHJldHVybiB7IHsgcmVzb3VyY2VEYXRhLT5jb250
ZW50KCksIHJlc291cmNlRGF0YS0+YmFzZTY0RW5jb2RlZCgpIH0gfTsKIAotICAgIGlmIChyZXNv
dXJjZURhdGEtPmlzQ29udGVudEV2aWN0ZWQoKSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJS
ZXNvdXJjZSBjb250ZW50IHdhcyBldmljdGVkIGZyb20gaW5zcGVjdG9yIGNhY2hlIl9zOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmIChyZXNvdXJjZURhdGEtPmlzQ29udGVudEV2aWN0
ZWQoKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJSZXNvdXJjZSBjb250ZW50IHdh
cyBldmljdGVkIGZyb20gaW5zcGVjdG9yIGNhY2hlIl9zKTsKIAogICAgIGlmIChyZXNvdXJjZURh
dGEtPmJ1ZmZlcigpICYmICFyZXNvdXJjZURhdGEtPnRleHRFbmNvZGluZ05hbWUoKS5pc051bGwo
KSkgewotICAgICAgICAqYmFzZTY0RW5jb2RlZCA9IGZhbHNlOwotICAgICAgICBpZiAoSW5zcGVj
dG9yUGFnZUFnZW50OjpzaGFyZWRCdWZmZXJDb250ZW50KHJlc291cmNlRGF0YS0+YnVmZmVyKCks
IHJlc291cmNlRGF0YS0+dGV4dEVuY29kaW5nTmFtZSgpLCAqYmFzZTY0RW5jb2RlZCwgY29udGVu
dCkpCi0gICAgICAgICAgICByZXR1cm47CisgICAgICAgIFN0cmluZyBib2R5OworICAgICAgICBp
ZiAoSW5zcGVjdG9yUGFnZUFnZW50OjpzaGFyZWRCdWZmZXJDb250ZW50KHJlc291cmNlRGF0YS0+
YnVmZmVyKCksIHJlc291cmNlRGF0YS0+dGV4dEVuY29kaW5nTmFtZSgpLCBmYWxzZSwgJmJvZHkp
KQorICAgICAgICAgICAgcmV0dXJuIHsgeyBib2R5LCBmYWxzZSB9IH07CiAgICAgfQogCiAgICAg
aWYgKHJlc291cmNlRGF0YS0+Y2FjaGVkUmVzb3VyY2UoKSkgewotICAgICAgICBpZiAoSW5zcGVj
dG9yTmV0d29ya0FnZW50OjpjYWNoZWRSZXNvdXJjZUNvbnRlbnQoKnJlc291cmNlRGF0YS0+Y2Fj
aGVkUmVzb3VyY2UoKSwgY29udGVudCwgYmFzZTY0RW5jb2RlZCkpCi0gICAgICAgICAgICByZXR1
cm47CisgICAgICAgIFN0cmluZyBib2R5OworICAgICAgICBib29sIGJhc2U2NEVuY29kZWQ7Cisg
ICAgICAgIGlmIChJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmNhY2hlZFJlc291cmNlQ29udGVudCgq
cmVzb3VyY2VEYXRhLT5jYWNoZWRSZXNvdXJjZSgpLCAmYm9keSwgJmJhc2U2NEVuY29kZWQpKQor
ICAgICAgICAgICAgcmV0dXJuIHsgeyBib2R5LCBiYXNlNjRFbmNvZGVkIH0gfTsKICAgICB9CiAK
LSAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIGNvbnRlbnQgb2YgcmVzb3VyY2UgZm9yIGdpdmVu
IHJlcXVlc3RJZCJfczsKKyAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk1pc3NpbmcgY29udGVu
dCBvZiByZXNvdXJjZSBmb3IgZ2l2ZW4gcmVxdWVzdElkIl9zKTsKIH0KIAotdm9pZCBJbnNwZWN0
b3JOZXR3b3JrQWdlbnQ6OnNldFJlc291cmNlQ2FjaGluZ0Rpc2FibGVkKEVycm9yU3RyaW5nJiwg
Ym9vbCBkaXNhYmxlZCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3Rvck5l
dHdvcmtBZ2VudDo6c2V0UmVzb3VyY2VDYWNoaW5nRGlzYWJsZWQoYm9vbCBkaXNhYmxlZCkKIHsK
LSAgICBzZXRSZXNvdXJjZUNhY2hpbmdEaXNhYmxlZChkaXNhYmxlZCk7CisgICAgc2V0UmVzb3Vy
Y2VDYWNoaW5nRGlzYWJsZWRJbnRlcmFsKGRpc2FibGVkKTsKKworICAgIHJldHVybiB7IH07CiB9
CiAKLXZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50Ojpsb2FkUmVzb3VyY2UoY29uc3QgU3RyaW5n
JiBmcmFtZUlkLCBjb25zdCBTdHJpbmcmIHVybFN0cmluZywgUmVmPExvYWRSZXNvdXJjZUNhbGxi
YWNrPiYmIGNhbGxiYWNrKQordm9pZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmxvYWRSZXNvdXJj
ZShjb25zdCBQcm90b2NvbDo6TmV0d29yazo6RnJhbWVJZCYgZnJhbWVJZCwgY29uc3QgU3RyaW5n
JiB1cmxTdHJpbmcsIFJlZjxMb2FkUmVzb3VyY2VDYWxsYmFjaz4mJiBjYWxsYmFjaykKIHsKLSAg
ICBFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJy
b3JTdHJpbmc7CiAgICAgYXV0byogY29udGV4dCA9IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoZXJy
b3JTdHJpbmcsIGZyYW1lSWQpOwogICAgIGlmICghY29udGV4dCkgewogICAgICAgICBjYWxsYmFj
ay0+c2VuZEZhaWx1cmUoZXJyb3JTdHJpbmcpOwpAQCAtOTk0LDI2ICs5OTQsMjIgQEAgdm9pZCBJ
bnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmxvYWRSZXNvdXJjZShjb25zdCBTdHJpbmcmIGZyYW1lSWQs
IGNvbnN0IFN0cmluZyYgdXIKICAgICBpbnNwZWN0b3JUaHJlYWRhYmxlTG9hZGVyQ2xpZW50LT5z
ZXRMb2FkZXIoV1RGTW92ZShsb2FkZXIpKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JOZXR3b3JrQWdl
bnQ6OmdldFNlcmlhbGl6ZWRDZXJ0aWZpY2F0ZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNv
bnN0IFN0cmluZyYgcmVxdWVzdElkLCBTdHJpbmcqIHNlcmlhbGl6ZWRDZXJ0aWZpY2F0ZSkKK1By
b3RvY29sOjpFcnJvclN0cmluZ09yPFN0cmluZz4gSW5zcGVjdG9yTmV0d29ya0FnZW50OjpnZXRT
ZXJpYWxpemVkQ2VydGlmaWNhdGUoY29uc3QgUHJvdG9jb2w6Ok5ldHdvcms6OlJlcXVlc3RJZCYg
cmVxdWVzdElkKQogewogICAgIGF1dG8qIHJlc291cmNlRGF0YSA9IG1fcmVzb3VyY2VzRGF0YS0+
ZGF0YShyZXF1ZXN0SWQpOwotICAgIGlmICghcmVzb3VyY2VEYXRhKSB7Ci0gICAgICAgIGVycm9y
U3RyaW5nID0gIk1pc3NpbmcgcmVzb3VyY2UgZm9yIGdpdmVuIHJlcXVlc3RJZCJfczsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoIXJlc291cmNlRGF0YSkKKyAgICAgICAgcmV0dXJu
IG1ha2VVbmV4cGVjdGVkKCJNaXNzaW5nIHJlc291cmNlIGZvciBnaXZlbiByZXF1ZXN0SWQiX3Mp
OwogCiAgICAgYXV0byYgY2VydGlmaWNhdGUgPSByZXNvdXJjZURhdGEtPmNlcnRpZmljYXRlSW5m
bygpOwotICAgIGlmICghY2VydGlmaWNhdGUgfHwgY2VydGlmaWNhdGUudmFsdWUoKS5pc0VtcHR5
KCkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWlzc2luZyBjZXJ0aWZpY2F0ZSBvZiByZXNv
dXJjZSBmb3IgZ2l2ZW4gcmVxdWVzdElkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAg
IGlmICghY2VydGlmaWNhdGUgfHwgY2VydGlmaWNhdGUudmFsdWUoKS5pc0VtcHR5KCkpCisgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTWlzc2luZyBjZXJ0aWZpY2F0ZSBvZiByZXNvdXJj
ZSBmb3IgZ2l2ZW4gcmVxdWVzdElkIl9zKTsKIAogICAgIFdURjo6UGVyc2lzdGVuY2U6OkVuY29k
ZXIgZW5jb2RlcjsKICAgICBXVEY6OlBlcnNpc3RlbmNlOjpDb2RlcjxXZWJDb3JlOjpDZXJ0aWZp
Y2F0ZUluZm8+OjplbmNvZGUoZW5jb2RlciwgY2VydGlmaWNhdGUudmFsdWUoKSk7Ci0gICAgKnNl
cmlhbGl6ZWRDZXJ0aWZpY2F0ZSA9IGJhc2U2NEVuY29kZShlbmNvZGVyLmJ1ZmZlcigpLCBlbmNv
ZGVyLmJ1ZmZlclNpemUoKSk7CisgICAgcmV0dXJuIGJhc2U2NEVuY29kZShlbmNvZGVyLmJ1ZmZl
cigpLCBlbmNvZGVyLmJ1ZmZlclNpemUoKSk7CiB9CiAKLVdlYlNvY2tldCogSW5zcGVjdG9yTmV0
d29ya0FnZW50Ojp3ZWJTb2NrZXRGb3JSZXF1ZXN0SWQoY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQp
CitXZWJTb2NrZXQqIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6d2ViU29ja2V0Rm9yUmVxdWVzdElk
KGNvbnN0IFByb3RvY29sOjpOZXR3b3JrOjpSZXF1ZXN0SWQmIHJlcXVlc3RJZCkKIHsKICAgICBM
b2NrSG9sZGVyIGxvY2soV2ViU29ja2V0OjphbGxBY3RpdmVXZWJTb2NrZXRzTXV0ZXgoKSk7CiAK
QEAgLTEwMzEsMzkgKzEwMjcsMzYgQEAgc3RhdGljIEpTQzo6SlNWYWx1ZSB3ZWJTb2NrZXRBc1Nj
cmlwdFZhbHVlKEpTQzo6SlNHbG9iYWxPYmplY3QmIHN0YXRlLCBXZWJTb2NrZXQKICAgICByZXR1
cm4gdG9KUygmc3RhdGUsIGRlcHJlY2F0ZWRHbG9iYWxPYmplY3RGb3JQcm90b3R5cGUoJnN0YXRl
KSwgd2ViU29ja2V0KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OnJlc29sdmVX
ZWJTb2NrZXQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcXVlc3RJ
ZCwgY29uc3QgU3RyaW5nKiBvYmplY3RHcm91cCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3VsdCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09y
PFJlZjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0Pj4gSW5zcGVjdG9yTmV0d29ya0Fn
ZW50OjpyZXNvbHZlV2ViU29ja2V0KGNvbnN0IFByb3RvY29sOjpOZXR3b3JrOjpSZXF1ZXN0SWQm
IHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCkKIHsKICAgICBXZWJTb2NrZXQq
IHdlYlNvY2tldCA9IHdlYlNvY2tldEZvclJlcXVlc3RJZChyZXF1ZXN0SWQpOwotICAgIGlmICgh
d2ViU29ja2V0KSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIk1pc3Npbmcgd2ViIHNvY2tldCBm
b3IgZ2l2ZW4gcmVxdWVzdElkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICgh
d2ViU29ja2V0KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk1pc3Npbmcgd2ViIHNv
Y2tldCBmb3IgZ2l2ZW4gcmVxdWVzdElkIl9zKTsKIAogICAgIC8vIEZJWE1FOiA8aHR0cHM6Ly93
ZWJraXQub3JnL2IvMTY4NDc1PiBXZWIgSW5zcGVjdG9yOiBDb3JyZWN0bHkgZGlzcGxheSBpZnJh
bWUncyBhbmQgd29ya2VyJ3MgV2ViU29ja2V0cwogICAgIGlmICghaXM8RG9jdW1lbnQ+KHdlYlNv
Y2tldC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKSkKLSAgICAgICAgcmV0dXJuOworICAgICAg
ICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk5vdCBzdXBwb3J0ZWQiKTsKIAogICAgIGF1dG8qIGRv
Y3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KHdlYlNvY2tldC0+c2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpKTsKICAgICBhdXRvKiBmcmFtZSA9IGRvY3VtZW50LT5mcmFtZSgpOwotICAgIGlmICgh
ZnJhbWUpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWlzc2luZyBmcmFtZSBvZiB3ZWIgc29j
a2V0IGZvciBnaXZlbiByZXF1ZXN0SWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAg
aWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJNaXNzaW5nIGZyYW1l
IG9mIHdlYiBzb2NrZXQgZm9yIGdpdmVuIHJlcXVlc3RJZCJfcyk7CiAKICAgICBhdXRvJiBzdGF0
ZSA9ICptYWluV29ybGRFeGVjU3RhdGUoZnJhbWUpOwogICAgIGF1dG8gaW5qZWN0ZWRTY3JpcHQg
PSBtX2luamVjdGVkU2NyaXB0TWFuYWdlci5pbmplY3RlZFNjcmlwdEZvcigmc3RhdGUpOwogICAg
IEFTU0VSVCghaW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKTsKIAotICAgIFN0cmluZyBvYmpl
Y3RHcm91cE5hbWUgPSBvYmplY3RHcm91cCA/ICpvYmplY3RHcm91cCA6IFN0cmluZygpOwotICAg
IHJlc3VsdCA9IGluamVjdGVkU2NyaXB0LndyYXBPYmplY3Qod2ViU29ja2V0QXNTY3JpcHRWYWx1
ZShzdGF0ZSwgd2ViU29ja2V0KSwgb2JqZWN0R3JvdXBOYW1lKTsKKyAgICBhdXRvIG9iamVjdCA9
IGluamVjdGVkU2NyaXB0LndyYXBPYmplY3Qod2ViU29ja2V0QXNTY3JpcHRWYWx1ZShzdGF0ZSwg
d2ViU29ja2V0KSwgb2JqZWN0R3JvdXApOworICAgIGlmICghb2JqZWN0KQorICAgICAgICByZXR1
cm4gbWFrZVVuZXhwZWN0ZWQoIkludGVybmFsIGVycm9yOiB1bmFibGUgdG8gY2FzdCBXZWJTb2Nr
ZXQiKTsKKworICAgIHJldHVybiBvYmplY3QucmVsZWFzZU5vbk51bGwoKTsKIH0KIAotdm9pZCBJ
bnNwZWN0b3JOZXR3b3JrQWdlbnQ6OnNldEludGVyY2VwdGlvbkVuYWJsZWQoRXJyb3JTdHJpbmcm
IGVycm9yU3RyaW5nLCBib29sIGVuYWJsZWQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lk
PiBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OnNldEludGVyY2VwdGlvbkVuYWJsZWQoYm9vbCBlbmFi
bGVkKQogewotICAgIGlmIChtX2ludGVyY2VwdGlvbkVuYWJsZWQgPT0gZW5hYmxlZCkgewotICAg
ICAgICBlcnJvclN0cmluZyA9IG1faW50ZXJjZXB0aW9uRW5hYmxlZCA/ICJJbnRlcmNlcHRpb24g
YWxyZWFkeSBlbmFibGVkIl9zIDogIkludGVyY2VwdGlvbiBhbHJlYWR5IGRpc2FibGVkIl9zOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmIChtX2ludGVyY2VwdGlvbkVuYWJsZWQgPT0g
ZW5hYmxlZCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKG1faW50ZXJjZXB0aW9uRW5h
YmxlZCA/ICJJbnRlcmNlcHRpb24gYWxyZWFkeSBlbmFibGVkIl9zIDogIkludGVyY2VwdGlvbiBh
bHJlYWR5IGRpc2FibGVkIl9zKTsKIAogICAgIG1faW50ZXJjZXB0aW9uRW5hYmxlZCA9IGVuYWJs
ZWQ7CiAKQEAgLTEwNzEsNDYgKzEwNjQsNDAgQEAgdm9pZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6
OnNldEludGVyY2VwdGlvbkVuYWJsZWQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBib28KICAg
ICAgICAgY29udGludWVQZW5kaW5nUmVxdWVzdHMoKTsKICAgICAgICAgY29udGludWVQZW5kaW5n
UmVzcG9uc2VzKCk7CiAgICAgfQorCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0
b3JOZXR3b3JrQWdlbnQ6OmFkZEludGVyY2VwdGlvbihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcs
IGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIG5ldHdvcmtTdGFnZVN0cmluZywgY29u
c3QgYm9vbCogb3B0aW9uYWxDYXNlU2Vuc2l0aXZlLCBjb25zdCBib29sKiBvcHRpb25hbElzUmVn
ZXgpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6
OmFkZEludGVyY2VwdGlvbihjb25zdCBTdHJpbmcmIHVybCwgUHJvdG9jb2w6Ok5ldHdvcms6Ok5l
dHdvcmtTdGFnZSBuZXR3b3JrU3RhZ2UsIE9wdGlvbmFsPGJvb2w+JiYgY2FzZVNlbnNpdGl2ZSwg
T3B0aW9uYWw8Ym9vbD4mJiBpc1JlZ2V4KQogewotICAgIGF1dG8gbmV0d29ya1N0YWdlID0gSW5z
cGVjdG9yOjpQcm90b2NvbDo6SW5zcGVjdG9ySGVscGVyczo6cGFyc2VFbnVtVmFsdWVGcm9tU3Ry
aW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6Ok5ldHdvcmtTdGFnZT4obmV0d29ya1N0
YWdlU3RyaW5nKTsKLSAgICBpZiAoIW5ldHdvcmtTdGFnZSkgewotICAgICAgICBlcnJvclN0cmlu
ZyA9IG1ha2VTdHJpbmcoIlVua25vd24gbmV0d29ya1N0YWdlOiAiX3MsIG5ldHdvcmtTdGFnZVN0
cmluZyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBJbnRlcmNlcHQgaW50ZXJjZXB0
OwogICAgIGludGVyY2VwdC51cmwgPSB1cmw7Ci0gICAgaWYgKG9wdGlvbmFsQ2FzZVNlbnNpdGl2
ZSkKLSAgICAgICAgaW50ZXJjZXB0LmNhc2VTZW5zaXRpdmUgPSAqb3B0aW9uYWxDYXNlU2Vuc2l0
aXZlOwotICAgIGlmIChvcHRpb25hbElzUmVnZXgpCi0gICAgICAgIGludGVyY2VwdC5pc1JlZ2V4
ID0gKm9wdGlvbmFsSXNSZWdleDsKLSAgICBpbnRlcmNlcHQubmV0d29ya1N0YWdlID0gbmV0d29y
a1N0YWdlLnZhbHVlKCk7CisgICAgaWYgKGNhc2VTZW5zaXRpdmUpCisgICAgICAgIGludGVyY2Vw
dC5jYXNlU2Vuc2l0aXZlID0gKmNhc2VTZW5zaXRpdmU7CisgICAgaWYgKGlzUmVnZXgpCisgICAg
ICAgIGludGVyY2VwdC5pc1JlZ2V4ID0gKmlzUmVnZXg7CisgICAgaW50ZXJjZXB0Lm5ldHdvcmtT
dGFnZSA9IG5ldHdvcmtTdGFnZTsKIAogICAgIGlmICghbV9pbnRlcmNlcHRzLmFwcGVuZElmTm90
Q29udGFpbnMoaW50ZXJjZXB0KSkKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiSW50ZXJjZXB0IGZv
ciBnaXZlbiB1cmwsIGdpdmVuIGlzUmVnZXgsIGFuZCBnaXZlbiBzdGFnZSBhbHJlYWR5IGV4aXN0
cyJfczsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJJbnRlcmNlcHQgZm9yIGdpdmVu
IHVybCwgZ2l2ZW4gaXNSZWdleCwgYW5kIGdpdmVuIHN0YWdlIGFscmVhZHkgZXhpc3RzIl9zKTsK
KworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50OjpyZW1v
dmVJbnRlcmNlcHRpb24oRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHVy
bCwgY29uc3QgU3RyaW5nJiBuZXR3b3JrU3RhZ2VTdHJpbmcsIGNvbnN0IGJvb2wqIG9wdGlvbmFs
Q2FzZVNlbnNpdGl2ZSwgY29uc3QgYm9vbCogb3B0aW9uYWxJc1JlZ2V4KQorUHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yTmV0d29ya0FnZW50OjpyZW1vdmVJbnRlcmNlcHRp
b24oY29uc3QgU3RyaW5nJiB1cmwsIFByb3RvY29sOjpOZXR3b3JrOjpOZXR3b3JrU3RhZ2UgbmV0
d29ya1N0YWdlLCBPcHRpb25hbDxib29sPiYmIGNhc2VTZW5zaXRpdmUsIE9wdGlvbmFsPGJvb2w+
JiYgaXNSZWdleCkKIHsKLSAgICBhdXRvIG5ldHdvcmtTdGFnZSA9IEluc3BlY3Rvcjo6UHJvdG9j
b2w6Okluc3BlY3RvckhlbHBlcnM6OnBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6
OlByb3RvY29sOjpOZXR3b3JrOjpOZXR3b3JrU3RhZ2U+KG5ldHdvcmtTdGFnZVN0cmluZyk7Ci0g
ICAgaWYgKCFuZXR3b3JrU3RhZ2UpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSBtYWtlU3RyaW5n
KCJVbmtub3duIG5ldHdvcmtTdGFnZTogIl9zLCBuZXR3b3JrU3RhZ2VTdHJpbmcpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCiAgICAgSW50ZXJjZXB0IGludGVyY2VwdDsKICAgICBpbnRlcmNl
cHQudXJsID0gdXJsOwotICAgIGlmIChvcHRpb25hbENhc2VTZW5zaXRpdmUpCi0gICAgICAgIGlu
dGVyY2VwdC5jYXNlU2Vuc2l0aXZlID0gKm9wdGlvbmFsQ2FzZVNlbnNpdGl2ZTsKLSAgICBpZiAo
b3B0aW9uYWxJc1JlZ2V4KQotICAgICAgICBpbnRlcmNlcHQuaXNSZWdleCA9ICpvcHRpb25hbElz
UmVnZXg7Ci0gICAgaW50ZXJjZXB0Lm5ldHdvcmtTdGFnZSA9IG5ldHdvcmtTdGFnZS52YWx1ZSgp
OworICAgIGlmIChjYXNlU2Vuc2l0aXZlKQorICAgICAgICBpbnRlcmNlcHQuY2FzZVNlbnNpdGl2
ZSA9ICpjYXNlU2Vuc2l0aXZlOworICAgIGlmIChpc1JlZ2V4KQorICAgICAgICBpbnRlcmNlcHQu
aXNSZWdleCA9ICppc1JlZ2V4OworICAgIGludGVyY2VwdC5uZXR3b3JrU3RhZ2UgPSBuZXR3b3Jr
U3RhZ2U7CiAKICAgICBpZiAoIW1faW50ZXJjZXB0cy5yZW1vdmVBbGwoaW50ZXJjZXB0KSkKLSAg
ICAgICAgZXJyb3JTdHJpbmcgPSAiTWlzc2luZyBpbnRlcmNlcHQgZm9yIGdpdmVuIHVybCwgZ2l2
ZW4gaXNSZWdleCwgYW5kIGdpdmVuIHN0YWdlIl9zOworICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoIk1pc3NpbmcgaW50ZXJjZXB0IGZvciBnaXZlbiB1cmwsIGdpdmVuIGlzUmVnZXgsIGFu
ZCBnaXZlbiBzdGFnZSJfcyk7CisKKyAgICByZXR1cm4geyB9OwogfQogCiBib29sIEluc3BlY3Rv
ck5ldHdvcmtBZ2VudDo6d2lsbEludGVyY2VwdChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVl
c3QpCkBAIC0xMTE4LDggKzExMDUsOCBAQCBib29sIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6d2ls
bEludGVyY2VwdChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCiAgICAgaWYgKCFtX2lu
dGVyY2VwdGlvbkVuYWJsZWQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiBz
aG91bGRJbnRlcmNlcHQocmVxdWVzdC51cmwoKSwgTmV0d29ya1N0YWdlOjpSZXF1ZXN0KQotICAg
ICAgICB8fCBzaG91bGRJbnRlcmNlcHQocmVxdWVzdC51cmwoKSwgTmV0d29ya1N0YWdlOjpSZXNw
b25zZSk7CisgICAgcmV0dXJuIHNob3VsZEludGVyY2VwdChyZXF1ZXN0LnVybCgpLCBQcm90b2Nv
bDo6TmV0d29yazo6TmV0d29ya1N0YWdlOjpSZXF1ZXN0KQorICAgICAgICB8fCBzaG91bGRJbnRl
cmNlcHQocmVxdWVzdC51cmwoKSwgUHJvdG9jb2w6Ok5ldHdvcms6Ok5ldHdvcmtTdGFnZTo6UmVz
cG9uc2UpOwogfQogCiBib29sIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6c2hvdWxkSW50ZXJjZXB0
UmVxdWVzdChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCkBAIC0xMTI3LDcgKzExMTQs
NyBAQCBib29sIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6c2hvdWxkSW50ZXJjZXB0UmVxdWVzdChj
b25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlcwogICAgIGlmICghbV9pbnRlcmNlcHRpb25FbmFi
bGVkKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gc2hvdWxkSW50ZXJjZXB0
KHJlcXVlc3QudXJsKCksIE5ldHdvcmtTdGFnZTo6UmVxdWVzdCk7CisgICAgcmV0dXJuIHNob3Vs
ZEludGVyY2VwdChyZXF1ZXN0LnVybCgpLCBQcm90b2NvbDo6TmV0d29yazo6TmV0d29ya1N0YWdl
OjpSZXF1ZXN0KTsKIH0KIAogYm9vbCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OnNob3VsZEludGVy
Y2VwdFJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQpAQCAtMTEzNSw3
ICsxMTIyLDcgQEAgYm9vbCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OnNob3VsZEludGVyY2VwdFJl
c3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3AKICAgICBpZiAoIW1faW50ZXJjZXB0
aW9uRW5hYmxlZCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmV0dXJuIHNob3VsZElu
dGVyY2VwdChyZXNwb25zZS51cmwoKSwgTmV0d29ya1N0YWdlOjpSZXNwb25zZSk7CisgICAgcmV0
dXJuIHNob3VsZEludGVyY2VwdChyZXNwb25zZS51cmwoKSwgUHJvdG9jb2w6Ok5ldHdvcms6Ok5l
dHdvcmtTdGFnZTo6UmVzcG9uc2UpOwogfQogCiB2b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6
aW50ZXJjZXB0UmVxdWVzdChSZXNvdXJjZUxvYWRlciYgbG9hZGVyLCBGdW5jdGlvbjx2b2lkKGNv
bnN0IFJlc291cmNlUmVxdWVzdCYpPiYmIGhhbmRsZXIpCkBAIC0xMTY2LDkyICsxMTUzLDg5IEBA
IHZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50OjppbnRlcmNlcHRSZXNwb25zZShjb25zdCBSZXNv
dXJjZVJlc3BvbnNlJiByZXNwb25zZSwKIAogICAgIG1fcGVuZGluZ0ludGVyY2VwdFJlc3BvbnNl
cy5zZXQocmVxdWVzdElkLCBtYWtlVW5pcXVlPFBlbmRpbmdJbnRlcmNlcHRSZXNwb25zZT4ocmVz
cG9uc2UsIFdURk1vdmUoaGFuZGxlcikpKTsKIAotICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5y
ZXNwb25zZUludGVyY2VwdGVkKHJlcXVlc3RJZCwgYnVpbGRPYmplY3RGb3JSZXNvdXJjZVJlc3Bv
bnNlKHJlc3BvbnNlLCBudWxscHRyKSk7CisgICAgYXV0byByZXNvdXJjZVJlc3BvbnNlID0gYnVp
bGRPYmplY3RGb3JSZXNvdXJjZVJlc3BvbnNlKHJlc3BvbnNlLCBudWxscHRyKTsKKyAgICBpZiAo
IXJlc291cmNlUmVzcG9uc2UpCisgICAgICAgIHJldHVybjsKKworICAgIG1fZnJvbnRlbmREaXNw
YXRjaGVyLT5yZXNwb25zZUludGVyY2VwdGVkKHJlcXVlc3RJZCwgcmVzb3VyY2VSZXNwb25zZS5y
ZWxlYXNlTm9uTnVsbCgpKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmludGVy
Y2VwdENvbnRpbnVlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiByZXF1
ZXN0SWQsIGNvbnN0IFN0cmluZyYgbmV0d29ya1N0YWdlU3RyaW5nKQorUHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yTmV0d29ya0FnZW50OjppbnRlcmNlcHRDb250aW51ZShj
b25zdCBQcm90b2NvbDo6TmV0d29yazo6UmVxdWVzdElkJiByZXF1ZXN0SWQsIFByb3RvY29sOjpO
ZXR3b3JrOjpOZXR3b3JrU3RhZ2UgbmV0d29ya1N0YWdlKQogewotICAgIGF1dG8gbmV0d29ya1N0
YWdlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6SW5zcGVjdG9ySGVscGVyczo6cGFyc2VFbnVtVmFs
dWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6Ok5ldHdvcmtTdGFnZT4o
bmV0d29ya1N0YWdlU3RyaW5nKTsKLSAgICBpZiAoIW5ldHdvcmtTdGFnZSkgewotICAgICAgICBl
cnJvclN0cmluZyA9IG1ha2VTdHJpbmcoIlVua25vd24gbmV0d29ya1N0YWdlOiAiX3MsIG5ldHdv
cmtTdGFnZVN0cmluZyk7Ci0gICAgICAgIHJldHVybjsKKyAgICBzd2l0Y2ggKG5ldHdvcmtTdGFn
ZSkgeworICAgIGNhc2UgUHJvdG9jb2w6Ok5ldHdvcms6Ok5ldHdvcmtTdGFnZTo6UmVxdWVzdDoK
KyAgICAgICAgaWYgKGF1dG8gcGVuZGluZ0ludGVyY2VwdFJlcXVlc3QgPSBtX3BlbmRpbmdJbnRl
cmNlcHRSZXF1ZXN0cy50YWtlKHJlcXVlc3RJZCkpIHsKKyAgICAgICAgICAgIHBlbmRpbmdJbnRl
cmNlcHRSZXF1ZXN0LT5jb250aW51ZVdpdGhPcmlnaW5hbFJlcXVlc3QoKTsKKyAgICAgICAgICAg
IHJldHVybiB7IH07CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJN
aXNzaW5nIHBlbmRpbmcgaW50ZXJjZXB0IHJlcXVlc3QgZm9yIGdpdmVuIHJlcXVlc3RJZCJfcyk7
CisKKyAgICBjYXNlIFByb3RvY29sOjpOZXR3b3JrOjpOZXR3b3JrU3RhZ2U6OlJlc3BvbnNlOgor
ICAgICAgICBpZiAoYXV0byBwZW5kaW5nSW50ZXJjZXB0UmVzcG9uc2UgPSBtX3BlbmRpbmdJbnRl
cmNlcHRSZXNwb25zZXMudGFrZShyZXF1ZXN0SWQpKSB7CisgICAgICAgICAgICBwZW5kaW5nSW50
ZXJjZXB0UmVzcG9uc2UtPnJlc3BvbmRXaXRoT3JpZ2luYWxSZXNwb25zZSgpOworICAgICAgICAg
ICAgcmV0dXJuIHsgfTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQo
Ik1pc3NpbmcgcGVuZGluZyBpbnRlcmNlcHQgcmVzcG9uc2UgZm9yIGdpdmVuIHJlcXVlc3RJZCJf
cyk7CiAgICAgfQogCi0gICAgc3dpdGNoIChuZXR3b3JrU3RhZ2UudmFsdWUoKSkgewotICAgIGNh
c2UgTmV0d29ya1N0YWdlOjpSZXF1ZXN0OgotICAgICAgICBpZiAoYXV0byBwZW5kaW5nSW50ZXJj
ZXB0UmVxdWVzdCA9IG1fcGVuZGluZ0ludGVyY2VwdFJlcXVlc3RzLnRha2UocmVxdWVzdElkKSkK
LSAgICAgICAgICAgIHBlbmRpbmdJbnRlcmNlcHRSZXF1ZXN0LT5jb250aW51ZVdpdGhPcmlnaW5h
bFJlcXVlc3QoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWlz
c2luZyBwZW5kaW5nIGludGVyY2VwdCByZXF1ZXN0IGZvciBnaXZlbiByZXF1ZXN0SWQiX3M7Ci0g
ICAgICAgIHJldHVybjsKLSAgICBjYXNlIE5ldHdvcmtTdGFnZTo6UmVzcG9uc2U6Ci0gICAgICAg
IGlmIChhdXRvIHBlbmRpbmdJbnRlcmNlcHRSZXNwb25zZSA9IG1fcGVuZGluZ0ludGVyY2VwdFJl
c3BvbnNlcy50YWtlKHJlcXVlc3RJZCkpCi0gICAgICAgICAgICBwZW5kaW5nSW50ZXJjZXB0UmVz
cG9uc2UtPnJlc3BvbmRXaXRoT3JpZ2luYWxSZXNwb25zZSgpOwotICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIHBlbmRpbmcgaW50ZXJjZXB0IHJlc3BvbnNl
IGZvciBnaXZlbiByZXF1ZXN0SWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CiAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JO
ZXR3b3JrQWdlbnQ6OmludGVyY2VwdFdpdGhSZXF1ZXN0KEVycm9yU3RyaW5nJiBlcnJvclN0cmlu
ZywgY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyogdXJsLCBjb25zdCBTdHJp
bmcqIG1ldGhvZCwgY29uc3QgSlNPTjo6T2JqZWN0KiBoZWFkZXJzLCBjb25zdCBTdHJpbmcqIHBv
c3REYXRhKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yTmV0d29ya0Fn
ZW50OjppbnRlcmNlcHRXaXRoUmVxdWVzdChjb25zdCBQcm90b2NvbDo6TmV0d29yazo6UmVxdWVz
dElkJiByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwg
UmVmUHRyPEpTT046Ok9iamVjdD4mJiBoZWFkZXJzLCBjb25zdCBTdHJpbmcmIHBvc3REYXRhKQog
ewogICAgIGF1dG8gcGVuZGluZ1JlcXVlc3QgPSBtX3BlbmRpbmdJbnRlcmNlcHRSZXF1ZXN0cy50
YWtlKHJlcXVlc3RJZCk7Ci0gICAgaWYgKCFwZW5kaW5nUmVxdWVzdCkgewotICAgICAgICBlcnJv
clN0cmluZyA9ICJNaXNzaW5nIHBlbmRpbmcgaW50ZXJjZXB0IHJlcXVlc3QgZm9yIGdpdmVuIHJl
cXVlc3RJZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoIXBlbmRpbmdSZXF1
ZXN0KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk1pc3NpbmcgcGVuZGluZyBpbnRl
cmNlcHQgcmVxdWVzdCBmb3IgZ2l2ZW4gcmVxdWVzdElkIl9zKTsKIAogICAgIGF1dG8mIGxvYWRl
ciA9ICpwZW5kaW5nUmVxdWVzdC0+bV9sb2FkZXI7CiAgICAgUmVzb3VyY2VSZXF1ZXN0IHJlcXVl
c3QgPSBsb2FkZXIucmVxdWVzdCgpOwotICAgIGlmICh1cmwpCi0gICAgICAgIHJlcXVlc3Quc2V0
VVJMKFVSTCh7IH0sICp1cmwpKTsKLSAgICBpZiAobWV0aG9kKQotICAgICAgICByZXF1ZXN0LnNl
dEhUVFBNZXRob2QoKm1ldGhvZCk7CisgICAgaWYgKCEhdXJsKQorICAgICAgICByZXF1ZXN0LnNl
dFVSTChVUkwoeyB9LCB1cmwpKTsKKyAgICBpZiAoISFtZXRob2QpCisgICAgICAgIHJlcXVlc3Qu
c2V0SFRUUE1ldGhvZChtZXRob2QpOwogICAgIGlmIChoZWFkZXJzKSB7CiAgICAgICAgIEhUVFBI
ZWFkZXJNYXAgZXhwbGljaXRIZWFkZXJzOwogICAgICAgICBmb3IgKGF1dG8mIGhlYWRlciA6ICpo
ZWFkZXJzKSB7Ci0gICAgICAgICAgICBTdHJpbmcgaGVhZGVyVmFsdWU7Ci0gICAgICAgICAgICBp
ZiAoaGVhZGVyLnZhbHVlLT5hc1N0cmluZyhoZWFkZXJWYWx1ZSkpCisgICAgICAgICAgICBhdXRv
IGhlYWRlclZhbHVlID0gaGVhZGVyLnZhbHVlLT5hc1N0cmluZygpOworICAgICAgICAgICAgaWYg
KCEhaGVhZGVyVmFsdWUpCiAgICAgICAgICAgICAgICAgZXhwbGljaXRIZWFkZXJzLmFkZChoZWFk
ZXIua2V5LCBoZWFkZXJWYWx1ZSk7CiAgICAgICAgIH0KICAgICAgICAgcmVxdWVzdC5zZXRIVFRQ
SGVhZGVyRmllbGRzKFdURk1vdmUoZXhwbGljaXRIZWFkZXJzKSk7CiAgICAgfQotICAgIGlmIChw
b3N0RGF0YSkgeworICAgIGlmICghIXBvc3REYXRhKSB7CiAgICAgICAgIFZlY3Rvcjx1aW50OF90
PiBidWZmZXI7Ci0gICAgICAgIGlmICghYmFzZTY0RGVjb2RlKCpwb3N0RGF0YSwgYnVmZmVyKSkg
ewotICAgICAgICAgICAgZXJyb3JTdHJpbmcgPSAiVW5hYmxlIHRvIGRlY29kZSBnaXZlbiBwb3N0
RGF0YSJfczsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQorICAgICAgICBpZiAoIWJh
c2U2NERlY29kZShwb3N0RGF0YSwgYnVmZmVyKSkKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5l
eHBlY3RlZCgiVW5hYmxlIHRvIGRlY29kZSBnaXZlbiBwb3N0RGF0YSJfcyk7CiAKICAgICAgICAg
cmVxdWVzdC5zZXRIVFRQQm9keShGb3JtRGF0YTo6Y3JlYXRlKGJ1ZmZlcikpOwogICAgIH0KICAg
ICAvLyBGSVhNRTogZmlndXJlIG91dCBob3cgdG8gaWRlbnRpZnkgd2hlbiBhIHJlcXVlc3QgaGFz
IGJlZW4gb3ZlcnJpZGRlbiB3aGVuIHdlIGFkZCB0aGlzIHRvIHRoZSBmcm9udGVuZC4KICAgICBw
ZW5kaW5nUmVxdWVzdC0+Y29udGludWVXaXRoUmVxdWVzdChyZXF1ZXN0KTsKKworICAgIHJldHVy
biB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50OjppbnRlcmNlcHRXaXRoUmVz
cG9uc2UoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwg
Y29uc3QgU3RyaW5nJiBjb250ZW50LCBib29sIGJhc2U2NEVuY29kZWQsIGNvbnN0IFN0cmluZyog
bWltZVR5cGUsIGNvbnN0IGludCogc3RhdHVzLCBjb25zdCBTdHJpbmcqIHN0YXR1c1RleHQsIGNv
bnN0IEpTT046Ok9iamVjdCogaGVhZGVycykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+
IEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6aW50ZXJjZXB0V2l0aFJlc3BvbnNlKGNvbnN0IFByb3Rv
Y29sOjpOZXR3b3JrOjpSZXF1ZXN0SWQmIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBjb250ZW50
LCBib29sIGJhc2U2NEVuY29kZWQsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGlu
dD4mJiBzdGF0dXMsIGNvbnN0IFN0cmluZyYgc3RhdHVzVGV4dCwgUmVmUHRyPEpTT046Ok9iamVj
dD4mJiBoZWFkZXJzKQogewogICAgIGF1dG8gcGVuZGluZ0ludGVyY2VwdFJlc3BvbnNlID0gbV9w
ZW5kaW5nSW50ZXJjZXB0UmVzcG9uc2VzLnRha2UocmVxdWVzdElkKTsKLSAgICBpZiAoIXBlbmRp
bmdJbnRlcmNlcHRSZXNwb25zZSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIHBl
bmRpbmcgaW50ZXJjZXB0IHJlc3BvbnNlIGZvciBnaXZlbiByZXF1ZXN0SWQiX3M7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9CisgICAgaWYgKCFwZW5kaW5nSW50ZXJjZXB0UmVzcG9uc2UpCisgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTWlzc2luZyBwZW5kaW5nIGludGVyY2VwdCByZXNw
b25zZSBmb3IgZ2l2ZW4gcmVxdWVzdElkIl9zKTsKIAogICAgIFJlc291cmNlUmVzcG9uc2Ugb3Zl
cnJpZGVSZXNwb25zZShwZW5kaW5nSW50ZXJjZXB0UmVzcG9uc2UtPm9yaWdpbmFsUmVzcG9uc2Uo
KSk7CiAgICAgb3ZlcnJpZGVSZXNwb25zZS5zZXRTb3VyY2UoUmVzb3VyY2VSZXNwb25zZTo6U291
cmNlOjpJbnNwZWN0b3JPdmVycmlkZSk7CiAKICAgICBpZiAoc3RhdHVzKQogICAgICAgICBvdmVy
cmlkZVJlc3BvbnNlLnNldEhUVFBTdGF0dXNDb2RlKCpzdGF0dXMpOwotICAgIGlmIChzdGF0dXNU
ZXh0KQotICAgICAgICBvdmVycmlkZVJlc3BvbnNlLnNldEhUVFBTdGF0dXNUZXh0KCpzdGF0dXNU
ZXh0KTsKLSAgICBpZiAobWltZVR5cGUpCi0gICAgICAgIG92ZXJyaWRlUmVzcG9uc2Uuc2V0TWlt
ZVR5cGUoKm1pbWVUeXBlKTsKKyAgICBpZiAoISFzdGF0dXNUZXh0KQorICAgICAgICBvdmVycmlk
ZVJlc3BvbnNlLnNldEhUVFBTdGF0dXNUZXh0KHN0YXR1c1RleHQpOworICAgIGlmICghIW1pbWVU
eXBlKQorICAgICAgICBvdmVycmlkZVJlc3BvbnNlLnNldE1pbWVUeXBlKG1pbWVUeXBlKTsKICAg
ICBpZiAoaGVhZGVycykgewogICAgICAgICBIVFRQSGVhZGVyTWFwIGV4cGxpY2l0SGVhZGVyczsK
ICAgICAgICAgZm9yIChhdXRvJiBoZWFkZXIgOiAqaGVhZGVycykgewotICAgICAgICAgICAgU3Ry
aW5nIGhlYWRlclZhbHVlOwotICAgICAgICAgICAgaWYgKGhlYWRlci52YWx1ZS0+YXNTdHJpbmco
aGVhZGVyVmFsdWUpKQorICAgICAgICAgICAgYXV0byBoZWFkZXJWYWx1ZSA9IGhlYWRlci52YWx1
ZS0+YXNTdHJpbmcoKTsKKyAgICAgICAgICAgIGlmICghIWhlYWRlclZhbHVlKQogICAgICAgICAg
ICAgICAgIGV4cGxpY2l0SGVhZGVycy5hZGQoaGVhZGVyLmtleSwgaGVhZGVyVmFsdWUpOwogICAg
ICAgICB9CiAgICAgICAgIG92ZXJyaWRlUmVzcG9uc2Uuc2V0SFRUUEhlYWRlckZpZWxkcyhXVEZN
b3ZlKGV4cGxpY2l0SGVhZGVycykpOwpAQCAtMTI2MSw0MSArMTI0NSwzNCBAQCB2b2lkIEluc3Bl
Y3Rvck5ldHdvcmtBZ2VudDo6aW50ZXJjZXB0V2l0aFJlc3BvbnNlKEVycm9yU3RyaW5nJiBlcnJv
clN0cmluZywgY29ucwogICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IG92ZXJyaWRlRGF0YTsKICAg
ICBpZiAoYmFzZTY0RW5jb2RlZCkgewogICAgICAgICBWZWN0b3I8dWludDhfdD4gYnVmZmVyOwot
ICAgICAgICBpZiAoIWJhc2U2NERlY29kZShjb250ZW50LCBidWZmZXIpKSB7Ci0gICAgICAgICAg
ICBlcnJvclN0cmluZyA9ICJVbmFibGUgdG8gZGVjb2RlIGdpdmVuIGNvbnRlbnQiX3M7Ci0gICAg
ICAgICAgICBwZW5kaW5nSW50ZXJjZXB0UmVzcG9uc2UtPnJlc3BvbmRXaXRoT3JpZ2luYWxSZXNw
b25zZSgpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9CisgICAgICAgIGlmICghYmFz
ZTY0RGVjb2RlKGNvbnRlbnQsIGJ1ZmZlcikpCisgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoIlVuYWJsZSB0byBkZWNvZGUgZ2l2ZW4gY29udGVudCJfcyk7CiAKICAgICAgICAgb3Zl
cnJpZGVEYXRhID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUoV1RGTW92ZShidWZmZXIpKTsKICAgICB9
IGVsc2UKICAgICAgICAgb3ZlcnJpZGVEYXRhID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUoY29udGVu
dC51dGY4KCkuZGF0YSgpLCBjb250ZW50LnV0ZjgoKS5sZW5ndGgoKSk7CiAKICAgICBwZW5kaW5n
SW50ZXJjZXB0UmVzcG9uc2UtPnJlc3BvbmQob3ZlcnJpZGVSZXNwb25zZSwgb3ZlcnJpZGVEYXRh
KTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50Ojpp
bnRlcmNlcHRSZXF1ZXN0V2l0aFJlc3BvbnNlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29u
c3QgU3RyaW5nJiByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgY29udGVudCwgYm9vbCBiYXNlNjRF
bmNvZGVkLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBpbnQgc3RhdHVzLCBjb25zdCBTdHJpbmcm
IHN0YXR1c1RleHQsIGNvbnN0IEpTT046Ok9iamVjdCYgaGVhZGVycykKK1Byb3RvY29sOjpFcnJv
clN0cmluZ09yPHZvaWQ+IEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6aW50ZXJjZXB0UmVxdWVzdFdp
dGhSZXNwb25zZShjb25zdCBQcm90b2NvbDo6TmV0d29yazo6UmVxdWVzdElkJiByZXF1ZXN0SWQs
IGNvbnN0IFN0cmluZyYgY29udGVudCwgYm9vbCBiYXNlNjRFbmNvZGVkLCBjb25zdCBTdHJpbmcm
IG1pbWVUeXBlLCBpbnQgc3RhdHVzLCBjb25zdCBTdHJpbmcmIHN0YXR1c1RleHQsIFJlZjxKU09O
OjpPYmplY3Q+JiYgaGVhZGVycykKIHsKICAgICBhdXRvIHBlbmRpbmdSZXF1ZXN0ID0gbV9wZW5k
aW5nSW50ZXJjZXB0UmVxdWVzdHMudGFrZShyZXF1ZXN0SWQpOwotICAgIGlmICghcGVuZGluZ1Jl
cXVlc3QpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWlzc2luZyBwZW5kaW5nIGludGVyY2Vw
dCByZXF1ZXN0IGZvciBnaXZlbiByZXF1ZXN0SWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
CisgICAgaWYgKCFwZW5kaW5nUmVxdWVzdCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVk
KCJNaXNzaW5nIHBlbmRpbmcgaW50ZXJjZXB0IHJlcXVlc3QgZm9yIGdpdmVuIHJlcXVlc3RJZCJf
cyk7CiAKICAgICAvLyBMb2FkZXIgd2lsbCBiZSByZXRhaW5lZCBpbiB0aGUgZGlkUmVjZWl2ZVJl
c3BvbnNlIGxhbWJkYSBiZWxvdy4KICAgICBSZWZQdHI8UmVzb3VyY2VMb2FkZXI+IGxvYWRlciA9
IHBlbmRpbmdSZXF1ZXN0LT5tX2xvYWRlci5nZXQoKTsKLSAgICBpZiAobG9hZGVyLT5yZWFjaGVk
VGVybWluYWxTdGF0ZSgpKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIlVuYWJsZSB0byBmdWxm
aWxsIHJlcXVlc3QsIGl0IGhhcyBhbHJlYWR5IGJlZW4gcHJvY2Vzc2VkIl9zOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQorICAgIGlmIChsb2FkZXItPnJlYWNoZWRUZXJtaW5hbFN0YXRlKCkpCisg
ICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiVW5hYmxlIHRvIGZ1bGZpbGwgcmVxdWVzdCwg
aXQgaGFzIGFscmVhZHkgYmVlbiBwcm9jZXNzZWQiX3MpOwogCiAgICAgUmVmUHRyPFNoYXJlZEJ1
ZmZlcj4gZGF0YTsKICAgICBpZiAoYmFzZTY0RW5jb2RlZCkgewogICAgICAgICBWZWN0b3I8dWlu
dDhfdD4gYnVmZmVyOwotICAgICAgICBpZiAoIWJhc2U2NERlY29kZShjb250ZW50LCBidWZmZXIp
KSB7Ci0gICAgICAgICAgICBlcnJvclN0cmluZyA9ICJVbmFibGUgdG8gZGVjb2RlIGdpdmVuIGNv
bnRlbnQiX3M7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKCFi
YXNlNjREZWNvZGUoY29udGVudCwgYnVmZmVyKSkKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5l
eHBlY3RlZCgiVW5hYmxlIHRvIGRlY29kZSBnaXZlbiBjb250ZW50Il9zKTsKIAogICAgICAgICBk
YXRhID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUoV1RGTW92ZShidWZmZXIpKTsKICAgICB9IGVsc2UK
QEAgLTEzMDcsOSArMTI4NCw5IEBAIHZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50OjppbnRlcmNl
cHRSZXF1ZXN0V2l0aFJlc3BvbnNlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluCiAgICAgcmVzcG9u
c2Uuc2V0SFRUUFN0YXR1c0NvZGUoc3RhdHVzKTsKICAgICByZXNwb25zZS5zZXRIVFRQU3RhdHVz
VGV4dChzdGF0dXNUZXh0KTsKICAgICBIVFRQSGVhZGVyTWFwIGV4cGxpY2l0SGVhZGVyczsKLSAg
ICBmb3IgKGF1dG8mIGhlYWRlciA6IGhlYWRlcnMpIHsKLSAgICAgICAgU3RyaW5nIGhlYWRlclZh
bHVlOwotICAgICAgICBpZiAoaGVhZGVyLnZhbHVlLT5hc1N0cmluZyhoZWFkZXJWYWx1ZSkpCisg
ICAgZm9yIChhdXRvJiBoZWFkZXIgOiBoZWFkZXJzLmdldCgpKSB7CisgICAgICAgIGF1dG8gaGVh
ZGVyVmFsdWUgPSBoZWFkZXIudmFsdWUtPmFzU3RyaW5nKCk7CisgICAgICAgIGlmICghIWhlYWRl
clZhbHVlKQogICAgICAgICAgICAgZXhwbGljaXRIZWFkZXJzLmFkZChoZWFkZXIua2V5LCBoZWFk
ZXJWYWx1ZSk7CiAgICAgfQogICAgIHJlc3BvbnNlLnNldEhUVFBIZWFkZXJGaWVsZHMoV1RGTW92
ZShleHBsaWNpdEhlYWRlcnMpKTsKQEAgLTEzMTksNDQgKzEyOTYsNDAgQEAgdm9pZCBJbnNwZWN0
b3JOZXR3b3JrQWdlbnQ6OmludGVyY2VwdFJlcXVlc3RXaXRoUmVzcG9uc2UoRXJyb3JTdHJpbmcm
IGVycm9yU3RyaW4KICAgICAgICAgICAgIGxvYWRlci0+ZGlkUmVjZWl2ZUJ1ZmZlcihXVEZNb3Zl
KGJ1ZmZlciksIGJ1ZmZlci0+c2l6ZSgpLCBEYXRhUGF5bG9hZFdob2xlUmVzb3VyY2UpOwogICAg
ICAgICBsb2FkZXItPmRpZEZpbmlzaExvYWRpbmcoTmV0d29ya0xvYWRNZXRyaWNzKCkpOwogICAg
IH0pOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6
OmludGVyY2VwdFJlcXVlc3RXaXRoRXJyb3IoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25z
dCBTdHJpbmcmIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBlcnJvclR5cGVTdHJpbmcpCitQcm90
b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmludGVyY2Vw
dFJlcXVlc3RXaXRoRXJyb3IoY29uc3QgUHJvdG9jb2w6Ok5ldHdvcms6OlJlcXVlc3RJZCYgcmVx
dWVzdElkLCBQcm90b2NvbDo6TmV0d29yazo6UmVzb3VyY2VFcnJvclR5cGUgZXJyb3JUeXBlKQog
ewogICAgIGF1dG8gcGVuZGluZ1JlcXVlc3QgPSBtX3BlbmRpbmdJbnRlcmNlcHRSZXF1ZXN0cy50
YWtlKHJlcXVlc3RJZCk7Ci0gICAgaWYgKCFwZW5kaW5nUmVxdWVzdCkgewotICAgICAgICBlcnJv
clN0cmluZyA9ICJNaXNzaW5nIHBlbmRpbmcgaW50ZXJjZXB0IHJlcXVlc3QgZm9yIGdpdmVuIHJl
cXVlc3RJZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoIXBlbmRpbmdSZXF1
ZXN0KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk1pc3NpbmcgcGVuZGluZyBpbnRl
cmNlcHQgcmVxdWVzdCBmb3IgZ2l2ZW4gcmVxdWVzdElkIl9zKTsKIAogICAgIGF1dG8mIGxvYWRl
ciA9ICpwZW5kaW5nUmVxdWVzdC0+bV9sb2FkZXI7Ci0gICAgaWYgKGxvYWRlci5yZWFjaGVkVGVy
bWluYWxTdGF0ZSgpKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIlVuYWJsZSB0byBhYm9ydCBy
ZXF1ZXN0LCBpdCBoYXMgYWxyZWFkeSBiZWVuIHByb2Nlc3NlZCJfczsKLSAgICAgICAgcmV0dXJu
OworICAgIGlmIChsb2FkZXIucmVhY2hlZFRlcm1pbmFsU3RhdGUoKSkKKyAgICAgICAgcmV0dXJu
IG1ha2VVbmV4cGVjdGVkKCJVbmFibGUgdG8gYWJvcnQgcmVxdWVzdCwgaXQgaGFzIGFscmVhZHkg
YmVlbiBwcm9jZXNzZWQiX3MpOworCisgICAgc3dpdGNoIChlcnJvclR5cGUpIHsKKyAgICBjYXNl
IFByb3RvY29sOjpOZXR3b3JrOjpSZXNvdXJjZUVycm9yVHlwZTo6R2VuZXJhbDoKKyAgICAgICAg
bG9hZGVyLmRpZEZhaWwoUmVzb3VyY2VFcnJvcihlcnJvckRvbWFpbldlYktpdEludGVybmFsLCAw
LCBsb2FkZXIudXJsKCksICJSZXF1ZXN0IGludGVyY2VwdGVkIl9zLCBSZXNvdXJjZUVycm9yOjpU
eXBlOjpHZW5lcmFsKSk7CisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBjYXNlIFByb3RvY29s
OjpOZXR3b3JrOjpSZXNvdXJjZUVycm9yVHlwZTo6QWNjZXNzQ29udHJvbDoKKyAgICAgICAgbG9h
ZGVyLmRpZEZhaWwoUmVzb3VyY2VFcnJvcihlcnJvckRvbWFpbldlYktpdEludGVybmFsLCAwLCBs
b2FkZXIudXJsKCksICJBY2Nlc3MgZGVuaWVkIl9zLCBSZXNvdXJjZUVycm9yOjpUeXBlOjpBY2Nl
c3NDb250cm9sKSk7CisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBjYXNlIFByb3RvY29sOjpO
ZXR3b3JrOjpSZXNvdXJjZUVycm9yVHlwZTo6Q2FuY2VsbGF0aW9uOgorICAgICAgICBsb2FkZXIu
ZGlkRmFpbChSZXNvdXJjZUVycm9yKGVycm9yRG9tYWluV2ViS2l0SW50ZXJuYWwsIDAsIGxvYWRl
ci51cmwoKSwgIlJlcXVlc3QgY2FuY2VsZWQiX3MsIFJlc291cmNlRXJyb3I6OlR5cGU6OkNhbmNl
bGxhdGlvbikpOworICAgICAgICByZXR1cm4geyB9OworCisgICAgY2FzZSBQcm90b2NvbDo6TmV0
d29yazo6UmVzb3VyY2VFcnJvclR5cGU6OlRpbWVvdXQ6CisgICAgICAgIGxvYWRlci5kaWRGYWls
KFJlc291cmNlRXJyb3IoZXJyb3JEb21haW5XZWJLaXRJbnRlcm5hbCwgMCwgbG9hZGVyLnVybCgp
LCAiUmVxdWVzdCB0aW1lZCBvdXQiX3MsIFJlc291cmNlRXJyb3I6OlR5cGU6OlRpbWVvdXQpKTsK
KyAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKLSAgICBhdXRvIGVycm9yVHlwZSA9IEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6Okluc3BlY3RvckhlbHBlcnM6OnBhcnNlRW51bVZhbHVlRnJvbVN0cmlu
ZzxJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpSZXNvdXJjZUVycm9yVHlwZT4oZXJyb3JU
eXBlU3RyaW5nKTsKLSAgICBpZiAoIWVycm9yVHlwZSkgewotICAgICAgICBlcnJvclN0cmluZyA9
IG1ha2VTdHJpbmcoIlVua25vd24gZXJyb3JUeXBlOiAiX3MsIGVycm9yVHlwZVN0cmluZyk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBSZXNvdXJjZUVycm9yIGVycm9yOwotICAgIHN3
aXRjaCAoZXJyb3JUeXBlLnZhbHVlKCkpIHsKLSAgICBjYXNlIEluc3BlY3Rvcjo6UHJvdG9jb2w6
Ok5ldHdvcms6OlJlc291cmNlRXJyb3JUeXBlOjpHZW5lcmFsOgotICAgICAgICBlcnJvciA9IFJl
c291cmNlRXJyb3IoZXJyb3JEb21haW5XZWJLaXRJbnRlcm5hbCwgMCwgbG9hZGVyLnVybCgpLCAi
UmVxdWVzdCBpbnRlcmNlcHRlZCJfcywgUmVzb3VyY2VFcnJvcjo6VHlwZTo6R2VuZXJhbCk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6UmVz
b3VyY2VFcnJvclR5cGU6OkFjY2Vzc0NvbnRyb2w6Ci0gICAgICAgIGVycm9yID0gUmVzb3VyY2VF
cnJvcihlcnJvckRvbWFpbldlYktpdEludGVybmFsLCAwLCBsb2FkZXIudXJsKCksICJBY2Nlc3Mg
ZGVuaWVkIl9zLCBSZXNvdXJjZUVycm9yOjpUeXBlOjpBY2Nlc3NDb250cm9sKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpSZXNvdXJjZUVy
cm9yVHlwZTo6Q2FuY2VsbGF0aW9uOgotICAgICAgICBlcnJvciA9IFJlc291cmNlRXJyb3IoZXJy
b3JEb21haW5XZWJLaXRJbnRlcm5hbCwgMCwgbG9hZGVyLnVybCgpLCAiUmVxdWVzdCBjYW5jZWxl
ZCJfcywgUmVzb3VyY2VFcnJvcjo6VHlwZTo6Q2FuY2VsbGF0aW9uKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpSZXNvdXJjZUVycm9yVHlw
ZTo6VGltZW91dDoKLSAgICAgICAgZXJyb3IgPSBSZXNvdXJjZUVycm9yKGVycm9yRG9tYWluV2Vi
S2l0SW50ZXJuYWwsIDAsIGxvYWRlci51cmwoKSwgIlJlcXVlc3QgdGltZWQgb3V0Il9zLCBSZXNv
dXJjZUVycm9yOjpUeXBlOjpUaW1lb3V0KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGxv
YWRlci5kaWRGYWlsKGVycm9yKTsKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1
cm4geyB9OwogfQogCiBib29sIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6c2hvdWxkVHJlYXRBc1Rl
eHQoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKQEAgLTE0MzksOSArMTQxMiw5IEBAIGJvb2wgSW5z
cGVjdG9yTmV0d29ya0FnZW50OjpjYWNoZWRSZXNvdXJjZUNvbnRlbnQoQ2FjaGVkUmVzb3VyY2Um
IHJlc291cmNlLCBTdHJpCiAgICAgfQogfQogCi1zdGF0aWMgUmVmPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlBhZ2U6OlNlYXJjaFJlc3VsdD4gYnVpbGRPYmplY3RGb3JTZWFyY2hSZXN1bHQoY29uc3Qg
U3RyaW5nJiByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgZnJhbWVJZCwgY29uc3QgU3RyaW5nJiB1
cmwsIGludCBtYXRjaGVzQ291bnQpCitzdGF0aWMgUmVmPFByb3RvY29sOjpQYWdlOjpTZWFyY2hS
ZXN1bHQ+IGJ1aWxkT2JqZWN0Rm9yU2VhcmNoUmVzdWx0KGNvbnN0IFByb3RvY29sOjpOZXR3b3Jr
OjpSZXF1ZXN0SWQmIHJlcXVlc3RJZCwgY29uc3QgUHJvdG9jb2w6Ok5ldHdvcms6OkZyYW1lSWQm
IGZyYW1lSWQsIGNvbnN0IFN0cmluZyYgdXJsLCBpbnQgbWF0Y2hlc0NvdW50KQogewotICAgIGF1
dG8gc2VhcmNoUmVzdWx0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6U2VhcmNoUmVzdWx0
OjpjcmVhdGUoKQorICAgIGF1dG8gc2VhcmNoUmVzdWx0ID0gUHJvdG9jb2w6OlBhZ2U6OlNlYXJj
aFJlc3VsdDo6Y3JlYXRlKCkKICAgICAgICAgLnNldFVybCh1cmwpCiAgICAgICAgIC5zZXRGcmFt
ZUlkKGZyYW1lSWQpCiAgICAgICAgIC5zZXRNYXRjaGVzQ291bnQobWF0Y2hlc0NvdW50KQpAQCAt
MTQ2MSw3ICsxNDM0LDcgQEAgc3RhdGljIE9wdGlvbmFsPFN0cmluZz4gdGV4dENvbnRlbnRGb3JS
ZXNvdXJjZURhdGEoY29uc3QgTmV0d29ya1Jlc291cmNlc0RhdGE6OlIKICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwogfQogCi12b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6c2VhcmNoT3RoZXJS
ZXF1ZXN0cyhjb25zdCBKU0M6OllhcnI6OlJlZ3VsYXJFeHByZXNzaW9uJiByZWdleCwgUmVmUHRy
PEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6U2VhcmNoUmVzdWx0Pj4m
IHJlc3VsdCkKK3ZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50OjpzZWFyY2hPdGhlclJlcXVlc3Rz
KGNvbnN0IEpTQzo6WWFycjo6UmVndWxhckV4cHJlc3Npb24mIHJlZ2V4LCBSZWY8SlNPTjo6QXJy
YXlPZjxQcm90b2NvbDo6UGFnZTo6U2VhcmNoUmVzdWx0Pj4mIHJlc3VsdCkKIHsKICAgICBWZWN0
b3I8TmV0d29ya1Jlc291cmNlc0RhdGE6OlJlc291cmNlRGF0YSo+IHJlc291cmNlcyA9IG1fcmVz
b3VyY2VzRGF0YS0+cmVzb3VyY2VzKCk7CiAgICAgZm9yIChhdXRvKiByZXNvdXJjZURhdGEgOiBy
ZXNvdXJjZXMpIHsKQEAgLTE0NzMsNyArMTQ0Niw3IEBAIHZvaWQgSW5zcGVjdG9yTmV0d29ya0Fn
ZW50OjpzZWFyY2hPdGhlclJlcXVlc3RzKGNvbnN0IEpTQzo6WWFycjo6UmVndWxhckV4cHJlc3Np
CiAgICAgfQogfQogCi12b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6c2VhcmNoSW5SZXF1ZXN0
KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIGNvbnN0
IFN0cmluZyYgcXVlcnksIGJvb2wgY2FzZVNlbnNpdGl2ZSwgYm9vbCBpc1JlZ2V4LCBSZWZQdHI8
SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpHZW5lcmljVHlwZXM6OlNlYXJjaE1h
dGNoPj4mIHJlc3VsdHMpCit2b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6c2VhcmNoSW5SZXF1
ZXN0KFByb3RvY29sOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFByb3RvY29sOjpO
ZXR3b3JrOjpSZXF1ZXN0SWQmIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBxdWVyeSwgYm9vbCBj
YXNlU2Vuc2l0aXZlLCBib29sIGlzUmVnZXgsIFJlZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29s
OjpHZW5lcmljVHlwZXM6OlNlYXJjaE1hdGNoPj4mIHJlc3VsdHMpCiB7CiAgICAgTmV0d29ya1Jl
c291cmNlc0RhdGE6OlJlc291cmNlRGF0YSBjb25zdCogcmVzb3VyY2VEYXRhID0gbV9yZXNvdXJj
ZXNEYXRhLT5kYXRhKHJlcXVlc3RJZCk7CiAgICAgaWYgKCFyZXNvdXJjZURhdGEpIHsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yTmV0d29ya0Fn
ZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rvck5ldHdvcmtB
Z2VudC5oCmluZGV4IDM0NDBlNzFhNWVkNWVmMzg0NjIwYTlmNjI4MDM3NTFlOTgzZGI1YjEuLjQw
ZTIzYzQzYTcwZTc5YjBjMmMwYjFkNmExNTNlZGUzOTU4MDJhYTcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yTmV0d29ya0FnZW50LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JOZXR3b3JrQWdlbnQuaApA
QCAtNjEsOCArNjEsNiBAQCBjbGFzcyBXZWJTb2NrZXQ7CiAKIHN0cnVjdCBXZWJTb2NrZXRGcmFt
ZTsKIAotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7Ci0KIGNsYXNzIEluc3BlY3Rvck5ldHdv
cmtBZ2VudCA6IHB1YmxpYyBJbnNwZWN0b3JBZ2VudEJhc2UsIHB1YmxpYyBJbnNwZWN0b3I6Ok5l
dHdvcmtCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KEluc3BlY3Rvck5ldHdvcmtBZ2VudCk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CkBA
IC03OSwyMiArNzcsMjIgQEAgcHVibGljOgogICAgIHZvaWQgd2lsbERlc3Ryb3lGcm9udGVuZEFu
ZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKSBmaW5hbDsKIAogICAgIC8vIE5l
dHdvcmtCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIKLSAgICB2b2lkIGVuYWJsZShFcnJvclN0cmlu
ZyYpIGZpbmFsOwotICAgIHZvaWQgZGlzYWJsZShFcnJvclN0cmluZyYpIGZpbmFsOwotICAgIHZv
aWQgc2V0RXh0cmFIVFRQSGVhZGVycyhFcnJvclN0cmluZyYsIGNvbnN0IEpTT046Ok9iamVjdCYg
aGVhZGVycykgZmluYWw7Ci0gICAgdm9pZCBnZXRSZXNwb25zZUJvZHkoRXJyb3JTdHJpbmcmLCBj
b25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgU3RyaW5nKiBjb250ZW50LCBib29sKiBiYXNlNjRFbmNv
ZGVkKSBmaW5hbDsKLSAgICB2b2lkIHNldFJlc291cmNlQ2FjaGluZ0Rpc2FibGVkKEVycm9yU3Ry
aW5nJiwgYm9vbCBkaXNhYmxlZCkgZmluYWw7Ci0gICAgdm9pZCBsb2FkUmVzb3VyY2UoY29uc3Qg
U3RyaW5nJiBmcmFtZUlkLCBjb25zdCBTdHJpbmcmIHVybCwgUmVmPExvYWRSZXNvdXJjZUNhbGxi
YWNrPiYmKSBmaW5hbDsKLSAgICB2b2lkIGdldFNlcmlhbGl6ZWRDZXJ0aWZpY2F0ZShFcnJvclN0
cmluZyYsIGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBTdHJpbmcqIHNlcmlhbGl6ZWRDZXJ0aWZp
Y2F0ZSkgZmluYWw7Ci0gICAgdm9pZCByZXNvbHZlV2ViU29ja2V0KEVycm9yU3RyaW5nJiwgY29u
c3QgU3RyaW5nJiByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyogb2JqZWN0R3JvdXAsIFJlZlB0cjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JikgZmluYWw7Ci0gICAg
dm9pZCBzZXRJbnRlcmNlcHRpb25FbmFibGVkKEVycm9yU3RyaW5nJiwgYm9vbCBlbmFibGVkKSBm
aW5hbDsKLSAgICB2b2lkIGFkZEludGVyY2VwdGlvbihFcnJvclN0cmluZyYsIGNvbnN0IFN0cmlu
ZyYgdXJsLCBjb25zdCBTdHJpbmcmIG5ldHdvcmtTdGFnZVN0cmluZywgY29uc3QgYm9vbCogY2Fz
ZVNlbnNpdGl2ZSwgY29uc3QgYm9vbCogaXNSZWdleCkgZmluYWw7Ci0gICAgdm9pZCByZW1vdmVJ
bnRlcmNlcHRpb24oRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5n
JiBuZXR3b3JrU3RhZ2VTdHJpbmcsIGNvbnN0IGJvb2wqIGNhc2VTZW5zaXRpdmUsIGNvbnN0IGJv
b2wqIGlzUmVnZXgpIGZpbmFsOwotICAgIHZvaWQgaW50ZXJjZXB0Q29udGludWUoRXJyb3JTdHJp
bmcmLCBjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBuZXR3b3JrU3RhZ2VT
dHJpbmcpIGZpbmFsOwotICAgIHZvaWQgaW50ZXJjZXB0V2l0aFJlcXVlc3QoRXJyb3JTdHJpbmcm
LCBjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nKiB1cmwsIGNvbnN0IFN0cmlu
ZyogbWV0aG9kLCBjb25zdCBKU09OOjpPYmplY3QqIGhlYWRlcnMsIGNvbnN0IFN0cmluZyogcG9z
dERhdGEpIGZpbmFsOwotICAgIHZvaWQgaW50ZXJjZXB0V2l0aFJlc3BvbnNlKEVycm9yU3RyaW5n
JiwgY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgY29udGVudCwgYm9vbCBi
YXNlNjRFbmNvZGVkLCBjb25zdCBTdHJpbmcqIG1pbWVUeXBlLCBjb25zdCBpbnQqIHN0YXR1cywg
Y29uc3QgU3RyaW5nKiBzdGF0dXNUZXh0LCBjb25zdCBKU09OOjpPYmplY3QqIGhlYWRlcnMpIGZp
bmFsOwotICAgIHZvaWQgaW50ZXJjZXB0UmVxdWVzdFdpdGhSZXNwb25zZShFcnJvclN0cmluZyYs
IGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQsIGJvb2wgYmFz
ZTY0RW5jb2RlZCwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgaW50IHN0YXR1cywgY29uc3QgU3Ry
aW5nJiBzdGF0dXNUZXh0LCBjb25zdCBKU09OOjpPYmplY3QmIGhlYWRlcnMpIGZpbmFsOwotICAg
IHZvaWQgaW50ZXJjZXB0UmVxdWVzdFdpdGhFcnJvcihFcnJvclN0cmluZyYsIGNvbnN0IFN0cmlu
ZyYgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIGVycm9yVHlwZSkgZmluYWw7CisgICAgSW5zcGVj
dG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBlbmFibGUoKSBmaW5hbDsKKyAgICBJ
bnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGRpc2FibGUoKSBmaW5hbDsK
KyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHNldEV4dHJhSFRU
UEhlYWRlcnMoUmVmPEpTT046Ok9iamVjdD4mJikgZmluYWw7CisgICAgSW5zcGVjdG9yOjpQcm90
b2NvbDo6RXJyb3JTdHJpbmdPcjxzdGQ6OnR1cGxlPFN0cmluZywgYm9vbCAvKiBiYXNlNjRFbmNv
ZGVkICovPj4gZ2V0UmVzcG9uc2VCb2R5KGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdv
cms6OlJlcXVlc3RJZCYpIGZpbmFsOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3Ry
aW5nT3I8dm9pZD4gc2V0UmVzb3VyY2VDYWNoaW5nRGlzYWJsZWQoYm9vbCkgZmluYWw7CisgICAg
dm9pZCBsb2FkUmVzb3VyY2UoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6RnJh
bWVJZCYsIGNvbnN0IFN0cmluZyYgdXJsLCBSZWY8TG9hZFJlc291cmNlQ2FsbGJhY2s+JiYpIGZp
bmFsOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8U3RyaW5nPiBnZXRT
ZXJpYWxpemVkQ2VydGlmaWNhdGUoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6
UmVxdWVzdElkJikgZmluYWw7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdP
cjxSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0Pj4gcmVzb2x2
ZVdlYlNvY2tldChjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpSZXF1ZXN0SWQm
LCBjb25zdCBTdHJpbmcmIG9iamVjdEdyb3VwKSBmaW5hbDsKKyAgICBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHNldEludGVyY2VwdGlvbkVuYWJsZWQoYm9vbCkgZmlu
YWw7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBhZGRJbnRl
cmNlcHRpb24oY29uc3QgU3RyaW5nJiB1cmwsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6
Ok5ldHdvcmtTdGFnZSwgT3B0aW9uYWw8Ym9vbD4mJiBjYXNlU2Vuc2l0aXZlLCBPcHRpb25hbDxi
b29sPiYmIGlzUmVnZXgpIGZpbmFsOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3Ry
aW5nT3I8dm9pZD4gcmVtb3ZlSW50ZXJjZXB0aW9uKGNvbnN0IFN0cmluZyYgdXJsLCBJbnNwZWN0
b3I6OlByb3RvY29sOjpOZXR3b3JrOjpOZXR3b3JrU3RhZ2UsIE9wdGlvbmFsPGJvb2w+JiYgY2Fz
ZVNlbnNpdGl2ZSwgT3B0aW9uYWw8Ym9vbD4mJiBpc1JlZ2V4KSBmaW5hbDsKKyAgICBJbnNwZWN0
b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGludGVyY2VwdENvbnRpbnVlKGNvbnN0
IEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OlJlcXVlc3RJZCYsIEluc3BlY3Rvcjo6UHJv
dG9jb2w6Ok5ldHdvcms6Ok5ldHdvcmtTdGFnZSkgZmluYWw7CisgICAgSW5zcGVjdG9yOjpQcm90
b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBpbnRlcmNlcHRXaXRoUmVxdWVzdChjb25zdCBJbnNw
ZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpSZXF1ZXN0SWQmLCBjb25zdCBTdHJpbmcmIHVybCwg
Y29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgaGVhZGVycywgY29u
c3QgU3RyaW5nJiBwb3N0RGF0YSkgZmluYWw7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJy
b3JTdHJpbmdPcjx2b2lkPiBpbnRlcmNlcHRXaXRoUmVzcG9uc2UoY29uc3QgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6TmV0d29yazo6UmVxdWVzdElkJiwgY29uc3QgU3RyaW5nJiBjb250ZW50LCBib29s
IGJhc2U2NEVuY29kZWQsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFsPGludD4mJiBz
dGF0dXMsIGNvbnN0IFN0cmluZyYgc3RhdHVzVGV4dCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBo
ZWFkZXJzKSBmaW5hbDsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZv
aWQ+IGludGVyY2VwdFJlcXVlc3RXaXRoUmVzcG9uc2UoY29uc3QgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6TmV0d29yazo6UmVxdWVzdElkJiwgY29uc3QgU3RyaW5nJiBjb250ZW50LCBib29sIGJhc2U2
NEVuY29kZWQsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGludCBzdGF0dXMsIGNvbnN0IFN0cmlu
ZyYgc3RhdHVzVGV4dCwgUmVmPEpTT046Ok9iamVjdD4mJiBoZWFkZXJzKSBmaW5hbDsKKyAgICBJ
bnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGludGVyY2VwdFJlcXVlc3RX
aXRoRXJyb3IoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6UmVxdWVzdElkJiwg
SW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6UmVzb3VyY2VFcnJvclR5cGUpIGZpbmFsOwog
CiAgICAgLy8gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uCiAgICAgdm9pZCB3aWxsUmVjYWxjdWxh
dGVTdHlsZSgpOwpAQCAtMTI3LDMyICsxMjUsMjkgQEAgcHVibGljOgogICAgIHZvaWQgaW50ZXJj
ZXB0UmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYsIHVuc2lnbmVkIGxvbmcgaWRlbnRp
ZmllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiwgUmVm
UHRyPFNoYXJlZEJ1ZmZlcj4pPiYmKTsKICAgICB2b2lkIGludGVyY2VwdFJlcXVlc3QoUmVzb3Vy
Y2VMb2FkZXImLCBGdW5jdGlvbjx2b2lkKGNvbnN0IFJlc291cmNlUmVxdWVzdCYpPiYmKTsKIAot
ICAgIHZvaWQgc2VhcmNoT3RoZXJSZXF1ZXN0cyhjb25zdCBKU0M6OllhcnI6OlJlZ3VsYXJFeHBy
ZXNzaW9uJiwgUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6
U2VhcmNoUmVzdWx0Pj4mKTsKLSAgICB2b2lkIHNlYXJjaEluUmVxdWVzdChFcnJvclN0cmluZyYs
IGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIHF1ZXJ5LCBib29sIGNhc2VT
ZW5zaXRpdmUsIGJvb2wgaXNSZWdleCwgUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6R2VuZXJpY1R5cGVzOjpTZWFyY2hNYXRjaD4+Jik7CisgICAgdm9pZCBzZWFyY2hP
dGhlclJlcXVlc3RzKGNvbnN0IEpTQzo6WWFycjo6UmVndWxhckV4cHJlc3Npb24mLCBSZWY8SlNP
Tjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpTZWFyY2hSZXN1bHQ+PiYpOwor
ICAgIHZvaWQgc2VhcmNoSW5SZXF1ZXN0KEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5n
JiwgY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6UmVxdWVzdElkJiwgY29uc3Qg
U3RyaW5nJiBxdWVyeSwgYm9vbCBjYXNlU2Vuc2l0aXZlLCBib29sIGlzUmVnZXgsIFJlZlB0cjxK
U09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkdlbmVyaWNUeXBlczo6U2VhcmNoTWF0
Y2g+PiYpOwogCiBwcm90ZWN0ZWQ6CiAgICAgSW5zcGVjdG9yTmV0d29ya0FnZW50KFdlYkFnZW50
Q29udGV4dCYpOwogCi0gICAgdmlydHVhbCBTdHJpbmcgbG9hZGVySWRlbnRpZmllcihEb2N1bWVu
dExvYWRlciopID0gMDsKLSAgICB2aXJ0dWFsIFN0cmluZyBmcmFtZUlkZW50aWZpZXIoRG9jdW1l
bnRMb2FkZXIqKSA9IDA7CisgICAgdmlydHVhbCBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3Jr
OjpMb2FkZXJJZCBsb2FkZXJJZGVudGlmaWVyKERvY3VtZW50TG9hZGVyKikgPSAwOworICAgIHZp
cnR1YWwgSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6RnJhbWVJZCBmcmFtZUlkZW50aWZp
ZXIoRG9jdW1lbnRMb2FkZXIqKSA9IDA7CiAgICAgdmlydHVhbCBWZWN0b3I8V2ViU29ja2V0Kj4g
YWN0aXZlV2ViU29ja2V0cyhjb25zdCBMb2NrSG9sZGVyJikgPSAwOwotICAgIHZpcnR1YWwgdm9p
ZCBzZXRSZXNvdXJjZUNhY2hpbmdEaXNhYmxlZChib29sKSA9IDA7Ci0gICAgdmlydHVhbCBTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KEVycm9yU3RyaW5nJiwg
Y29uc3QgU3RyaW5nJiBmcmFtZUlkKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldFJlc291cmNl
Q2FjaGluZ0Rpc2FibGVkSW50ZXJhbChib29sKSA9IDA7CisgICAgdmlydHVhbCBTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkVycm9yU3RyaW5nJiwgY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6RnJhbWVJ
ZCYpID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkRm9yY2VCdWZmZXJpbmdOZXR3b3JrUmVz
b3VyY2VEYXRhKCkgY29uc3QgPSAwOwogCiBwcml2YXRlOgotICAgIHZvaWQgZW5hYmxlKCk7Ci0K
ICAgICB2b2lkIHdpbGxTZW5kUmVxdWVzdCh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIERvY3Vt
ZW50TG9hZGVyKiwgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVk
aXJlY3RSZXNwb25zZSwgSW5zcGVjdG9yUGFnZUFnZW50OjpSZXNvdXJjZVR5cGUpOwogCi0gICAg
dXNpbmcgTmV0d29ya1N0YWdlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6TmV0d29y
a1N0YWdlOwotICAgIGJvb2wgc2hvdWxkSW50ZXJjZXB0KFVSTCwgTmV0d29ya1N0YWdlKTsKKyAg
ICBib29sIHNob3VsZEludGVyY2VwdChVUkwsIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6
Ok5ldHdvcmtTdGFnZSk7CiAgICAgdm9pZCBjb250aW51ZVBlbmRpbmdSZXF1ZXN0cygpOwogICAg
IHZvaWQgY29udGludWVQZW5kaW5nUmVzcG9uc2VzKCk7CiAKLSAgICBXZWJTb2NrZXQqIHdlYlNv
Y2tldEZvclJlcXVlc3RJZChjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCk7CisgICAgV2ViU29ja2V0
KiB3ZWJTb2NrZXRGb3JSZXF1ZXN0SWQoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29y
azo6UmVxdWVzdElkJik7CiAKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29y
azo6SW5pdGlhdG9yPiBidWlsZEluaXRpYXRvck9iamVjdChEb2N1bWVudCosIGNvbnN0IFJlc291
cmNlUmVxdWVzdCogPSBudWxscHRyKTsKKyAgICBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0
d29yazo6SW5pdGlhdG9yPiBidWlsZEluaXRpYXRvck9iamVjdChEb2N1bWVudCosIGNvbnN0IFJl
c291cmNlUmVxdWVzdCogPSBudWxscHRyKTsKICAgICBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6
TmV0d29yazo6UmVzb3VyY2VUaW1pbmc+IGJ1aWxkT2JqZWN0Rm9yVGltaW5nKGNvbnN0IE5ldHdv
cmtMb2FkTWV0cmljcyosIFJlc291cmNlTG9hZGVyJik7CiAgICAgUmVmPEluc3BlY3Rvcjo6UHJv
dG9jb2w6Ok5ldHdvcms6Ok1ldHJpY3M+IGJ1aWxkT2JqZWN0Rm9yTWV0cmljcyhjb25zdCBOZXR3
b3JrTG9hZE1ldHJpY3MmKTsKICAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29y
azo6UmVzcG9uc2U+IGJ1aWxkT2JqZWN0Rm9yUmVzb3VyY2VSZXNwb25zZShjb25zdCBSZXNvdXJj
ZVJlc3BvbnNlJiwgUmVzb3VyY2VMb2FkZXIqKTsKQEAgLTIzNiw3ICsyMzEsNyBAQCBwcml2YXRl
OgogICAgICAgICBTdHJpbmcgdXJsOwogICAgICAgICBib29sIGNhc2VTZW5zaXRpdmUgeyB0cnVl
IH07CiAgICAgICAgIGJvb2wgaXNSZWdleCB7IGZhbHNlIH07Ci0gICAgICAgIE5ldHdvcmtTdGFn
ZSBuZXR3b3JrU3RhZ2UgeyBOZXR3b3JrU3RhZ2U6OlJlc3BvbnNlIH07CisgICAgICAgIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6Ok5ldHdvcmtTdGFnZSBuZXR3b3JrU3RhZ2UgeyBJbnNw
ZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpOZXR3b3JrU3RhZ2U6OlJlc3BvbnNlIH07CiAKICAg
ICAgICAgaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBJbnRlcmNlcHQmIG90aGVyKSBjb25z
dAogICAgICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRz
L0luc3BlY3RvclBhZ2VBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRz
L0luc3BlY3RvclBhZ2VBZ2VudC5jcHAKaW5kZXggNTM5ZTgxMDViNjZlN2IyYTZhMDU1NzFhMWUx
YzhjZDZiZGYyN2M5MC4uOGJmN2FlMWUwZDA1YTI2NDljMTNhYmIwZDE0ZDIwODQzNzc1ODA5OSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JQYWdl
QWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9y
UGFnZUFnZW50LmNwcApAQCAtMTUxLDcgKzE1MSw3IEBAIFZlY3RvcjxDYWNoZWRSZXNvdXJjZSo+
IEluc3BlY3RvclBhZ2VBZ2VudDo6Y2FjaGVkUmVzb3VyY2VzRm9yRnJhbWUoRnJhbWUqIGZyYW1l
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OnJlc291
cmNlQ29udGVudChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIEZyYW1lKiBmcmFtZSwgY29uc3Qg
VVJMJiB1cmwsIFN0cmluZyogcmVzdWx0LCBib29sKiBiYXNlNjRFbmNvZGVkKQordm9pZCBJbnNw
ZWN0b3JQYWdlQWdlbnQ6OnJlc291cmNlQ29udGVudChQcm90b2NvbDo6RXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBGcmFtZSogZnJhbWUsIGNvbnN0IFVSTCYgdXJsLCBTdHJpbmcqIHJlc3VsdCwg
Ym9vbCogYmFzZTY0RW5jb2RlZCkKIHsKICAgICBEb2N1bWVudExvYWRlciogbG9hZGVyID0gYXNz
ZXJ0RG9jdW1lbnRMb2FkZXIoZXJyb3JTdHJpbmcsIGZyYW1lKTsKICAgICBpZiAoIWxvYWRlcikK
QEAgLTIxMywzNyArMjEzLDM3IEBAIENhY2hlZFJlc291cmNlKiBJbnNwZWN0b3JQYWdlQWdlbnQ6
OmNhY2hlZFJlc291cmNlKEZyYW1lKiBmcmFtZSwgY29uc3QgVVJMJiB1cmwpCiAgICAgcmV0dXJu
IGNhY2hlZFJlc291cmNlOwogfQogCi1JbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpSZXNvdXJj
ZVR5cGUgSW5zcGVjdG9yUGFnZUFnZW50OjpyZXNvdXJjZVR5cGVKU09OKEluc3BlY3RvclBhZ2VB
Z2VudDo6UmVzb3VyY2VUeXBlIHJlc291cmNlVHlwZSkKK1Byb3RvY29sOjpQYWdlOjpSZXNvdXJj
ZVR5cGUgSW5zcGVjdG9yUGFnZUFnZW50OjpyZXNvdXJjZVR5cGVKU09OKEluc3BlY3RvclBhZ2VB
Z2VudDo6UmVzb3VyY2VUeXBlIHJlc291cmNlVHlwZSkKIHsKICAgICBzd2l0Y2ggKHJlc291cmNl
VHlwZSkgewogICAgIGNhc2UgRG9jdW1lbnRSZXNvdXJjZToKLSAgICAgICAgcmV0dXJuIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OlJlc291cmNlVHlwZTo6RG9jdW1lbnQ7CisgICAgICAgIHJl
dHVybiBQcm90b2NvbDo6UGFnZTo6UmVzb3VyY2VUeXBlOjpEb2N1bWVudDsKICAgICBjYXNlIElt
YWdlUmVzb3VyY2U6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpS
ZXNvdXJjZVR5cGU6OkltYWdlOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OlBhZ2U6OlJlc291
cmNlVHlwZTo6SW1hZ2U7CiAgICAgY2FzZSBGb250UmVzb3VyY2U6Ci0gICAgICAgIHJldHVybiBJ
bnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpSZXNvdXJjZVR5cGU6OkZvbnQ7CisgICAgICAgIHJl
dHVybiBQcm90b2NvbDo6UGFnZTo6UmVzb3VyY2VUeXBlOjpGb250OwogICAgIGNhc2UgU3R5bGVT
aGVldFJlc291cmNlOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6
UmVzb3VyY2VUeXBlOjpTdHlsZVNoZWV0OworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OlBhZ2U6
OlJlc291cmNlVHlwZTo6U3R5bGVTaGVldDsKICAgICBjYXNlIFNjcmlwdFJlc291cmNlOgotICAg
ICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6UmVzb3VyY2VUeXBlOjpTY3Jp
cHQ7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6UGFnZTo6UmVzb3VyY2VUeXBlOjpTY3JpcHQ7
CiAgICAgY2FzZSBYSFJSZXNvdXJjZToKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlBhZ2U6OlJlc291cmNlVHlwZTo6WEhSOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OlBh
Z2U6OlJlc291cmNlVHlwZTo6WEhSOwogICAgIGNhc2UgRmV0Y2hSZXNvdXJjZToKLSAgICAgICAg
cmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OlJlc291cmNlVHlwZTo6RmV0Y2g7Cisg
ICAgICAgIHJldHVybiBQcm90b2NvbDo6UGFnZTo6UmVzb3VyY2VUeXBlOjpGZXRjaDsKICAgICBj
YXNlIFBpbmdSZXNvdXJjZToKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBh
Z2U6OlJlc291cmNlVHlwZTo6UGluZzsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpQYWdlOjpS
ZXNvdXJjZVR5cGU6OlBpbmc7CiAgICAgY2FzZSBCZWFjb25SZXNvdXJjZToKLSAgICAgICAgcmV0
dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OlJlc291cmNlVHlwZTo6QmVhY29uOworICAg
ICAgICByZXR1cm4gUHJvdG9jb2w6OlBhZ2U6OlJlc291cmNlVHlwZTo6QmVhY29uOwogICAgIGNh
c2UgV2ViU29ja2V0UmVzb3VyY2U6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29s
OjpQYWdlOjpSZXNvdXJjZVR5cGU6OldlYlNvY2tldDsKKyAgICAgICAgcmV0dXJuIFByb3RvY29s
OjpQYWdlOjpSZXNvdXJjZVR5cGU6OldlYlNvY2tldDsKICAgICBjYXNlIE90aGVyUmVzb3VyY2U6
Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpSZXNvdXJjZVR5cGU6
Ok90aGVyOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OlBhZ2U6OlJlc291cmNlVHlwZTo6T3Ro
ZXI7CiAjaWYgRU5BQkxFKEFQUExJQ0FUSU9OX01BTklGRVNUKQogICAgIGNhc2UgQXBwbGljYXRp
b25NYW5pZmVzdFJlc291cmNlOgogICAgICAgICBicmVhazsKICNlbmRpZgogICAgIH0KLSAgICBy
ZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6UmVzb3VyY2VUeXBlOjpPdGhlcjsKKyAg
ICByZXR1cm4gUHJvdG9jb2w6OlBhZ2U6OlJlc291cmNlVHlwZTo6T3RoZXI7CiB9CiAKIEluc3Bl
Y3RvclBhZ2VBZ2VudDo6UmVzb3VyY2VUeXBlIEluc3BlY3RvclBhZ2VBZ2VudDo6aW5zcGVjdG9y
UmVzb3VyY2VUeXBlKENhY2hlZFJlc291cmNlOjpUeXBlIHR5cGUpCkBAIC0yOTcsNyArMjk3LDcg
QEAgSW5zcGVjdG9yUGFnZUFnZW50OjpSZXNvdXJjZVR5cGUgSW5zcGVjdG9yUGFnZUFnZW50Ojpp
bnNwZWN0b3JSZXNvdXJjZVR5cGUoY29uc3QKICAgICByZXR1cm4gaW5zcGVjdG9yUmVzb3VyY2VU
eXBlKGNhY2hlZFJlc291cmNlLnR5cGUoKSk7CiB9CiAKLUluc3BlY3Rvcjo6UHJvdG9jb2w6OlBh
Z2U6OlJlc291cmNlVHlwZSBJbnNwZWN0b3JQYWdlQWdlbnQ6OmNhY2hlZFJlc291cmNlVHlwZUpT
T04oY29uc3QgQ2FjaGVkUmVzb3VyY2UmIGNhY2hlZFJlc291cmNlKQorUHJvdG9jb2w6OlBhZ2U6
OlJlc291cmNlVHlwZSBJbnNwZWN0b3JQYWdlQWdlbnQ6OmNhY2hlZFJlc291cmNlVHlwZUpTT04o
Y29uc3QgQ2FjaGVkUmVzb3VyY2UmIGNhY2hlZFJlc291cmNlKQogewogICAgIHJldHVybiByZXNv
dXJjZVR5cGVKU09OKGluc3BlY3RvclJlc291cmNlVHlwZShjYWNoZWRSZXNvdXJjZSkpOwogfQpA
QCAtMzExLDcgKzMxMSw3IEBAIEZyYW1lKiBJbnNwZWN0b3JQYWdlQWdlbnQ6OmZpbmRGcmFtZVdp
dGhTZWN1cml0eU9yaWdpbihQYWdlJiBwYWdlLCBjb25zdCBTdHJpbmcmCiAgICAgcmV0dXJuIG51
bGxwdHI7CiB9CiAKLURvY3VtZW50TG9hZGVyKiBJbnNwZWN0b3JQYWdlQWdlbnQ6OmFzc2VydERv
Y3VtZW50TG9hZGVyKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgRnJhbWUqIGZyYW1lKQorRG9j
dW1lbnRMb2FkZXIqIEluc3BlY3RvclBhZ2VBZ2VudDo6YXNzZXJ0RG9jdW1lbnRMb2FkZXIoUHJv
dG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgRnJhbWUqIGZyYW1lKQogewogICAgIEZy
YW1lTG9hZGVyJiBmcmFtZUxvYWRlciA9IGZyYW1lLT5sb2FkZXIoKTsKICAgICBEb2N1bWVudExv
YWRlciogZG9jdW1lbnRMb2FkZXIgPSBmcmFtZUxvYWRlci5kb2N1bWVudExvYWRlcigpOwpAQCAt
MzM4LDE2ICszMzgsMTMgQEAgdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmRpZENyZWF0ZUZyb250
ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kUm91dGVyKiwKIAogdm9pZCBJbnNwZWN0
b3JQYWdlQWdlbnQ6OndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlz
Y29ubmVjdFJlYXNvbikKIHsKLSAgICBFcnJvclN0cmluZyB1bnVzZWQ7Ci0gICAgZGlzYWJsZSh1
bnVzZWQpOworICAgIGRpc2FibGUoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmVu
YWJsZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2
b2lkPiBJbnNwZWN0b3JQYWdlQWdlbnQ6OmVuYWJsZSgpCiB7Ci0gICAgaWYgKG1faW5zdHJ1bWVu
dGluZ0FnZW50cy5lbmFibGVkUGFnZUFnZW50KCkgPT0gdGhpcykgewotICAgICAgICBlcnJvclN0
cmluZyA9ICJQYWdlIGRvbWFpbiBhbHJlYWR5IGVuYWJsZWQiX3M7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9CisgICAgaWYgKG1faW5zdHJ1bWVudGluZ0FnZW50cy5lbmFibGVkUGFnZUFnZW50KCkg
PT0gdGhpcykKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJQYWdlIGRvbWFpbiBhbHJl
YWR5IGVuYWJsZWQiX3MpOwogCiAgICAgbV9pbnN0cnVtZW50aW5nQWdlbnRzLnNldEVuYWJsZWRQ
YWdlQWdlbnQodGhpcyk7CiAKQEAgLTM1OCwyMSArMzU1LDIyIEBAIHZvaWQgSW5zcGVjdG9yUGFn
ZUFnZW50OjplbmFibGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nKQogI2lmIEVOQUJMRShEQVJL
X01PREVfQ1NTKSB8fCBIQVZFKE9TX0RBUktfTU9ERV9TVVBQT1JUKQogICAgIGRlZmF1bHRBcHBl
YXJhbmNlRGlkQ2hhbmdlKG1faW5zcGVjdGVkUGFnZS5kZWZhdWx0VXNlRGFya0FwcGVhcmFuY2Uo
KSk7CiAjZW5kaWYKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yUGFnZUFn
ZW50OjpkaXNhYmxlKEVycm9yU3RyaW5nJikKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+
IEluc3BlY3RvclBhZ2VBZ2VudDo6ZGlzYWJsZSgpCiB7CiAgICAgbV9pbnN0cnVtZW50aW5nQWdl
bnRzLnNldEVuYWJsZWRQYWdlQWdlbnQobnVsbHB0cik7CiAKLSAgICBFcnJvclN0cmluZyB1bnVz
ZWQ7Ci0gICAgc2V0U2hvd1BhaW50UmVjdHModW51c2VkLCBmYWxzZSk7CisgICAgc2V0U2hvd1Bh
aW50UmVjdHMoZmFsc2UpOwogI2lmICFQTEFURk9STShJT1NfRkFNSUxZKQotICAgIHNldFNob3dS
dWxlcnModW51c2VkLCBmYWxzZSk7CisgICAgc2V0U2hvd1J1bGVycyhmYWxzZSk7CiAjZW5kaWYK
LSAgICBvdmVycmlkZVVzZXJBZ2VudCh1bnVzZWQsIG51bGxwdHIpOwotICAgIHNldEVtdWxhdGVk
TWVkaWEodW51c2VkLCBlbXB0eVN0cmluZygpKTsKKyAgICBvdmVycmlkZVVzZXJBZ2VudChudWxs
U3RyaW5nKCkpOworICAgIHNldEVtdWxhdGVkTWVkaWEoZW1wdHlTdHJpbmcoKSk7CiAjaWYgRU5B
QkxFKERBUktfTU9ERV9DU1MpIHx8IEhBVkUoT1NfREFSS19NT0RFX1NVUFBPUlQpCi0gICAgc2V0
Rm9yY2VkQXBwZWFyYW5jZSh1bnVzZWQsIGVtcHR5U3RyaW5nKCkpOworICAgIHNldEZvcmNlZEFw
cGVhcmFuY2UoV1RGOjpudWxsb3B0KTsKICNlbmRpZgogCiAgICAgYXV0byYgaW5zcGVjdGVkUGFn
ZVNldHRpbmdzID0gbV9pbnNwZWN0ZWRQYWdlLnNldHRpbmdzKCk7CkBAIC0zOTEsNiArMzg5LDgg
QEAgdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmRpc2FibGUoRXJyb3JTdHJpbmcmKQogICAgIG1f
Y2xpZW50LT5zZXREZXZlbG9wZXJQcmVmZXJlbmNlT3ZlcnJpZGUoSW5zcGVjdG9yQ2xpZW50OjpE
ZXZlbG9wZXJQcmVmZXJlbmNlOjpBZENsaWNrQXR0cmlidXRpb25EZWJ1Z01vZGVFbmFibGVkLCBX
VEY6Om51bGxvcHQpOwogICAgIG1fY2xpZW50LT5zZXREZXZlbG9wZXJQcmVmZXJlbmNlT3ZlcnJp
ZGUoSW5zcGVjdG9yQ2xpZW50OjpEZXZlbG9wZXJQcmVmZXJlbmNlOjpJVFBEZWJ1Z01vZGVFbmFi
bGVkLCBXVEY6Om51bGxvcHQpOwogICAgIG1fY2xpZW50LT5zZXREZXZlbG9wZXJQcmVmZXJlbmNl
T3ZlcnJpZGUoSW5zcGVjdG9yQ2xpZW50OjpEZXZlbG9wZXJQcmVmZXJlbmNlOjpNb2NrQ2FwdHVy
ZURldmljZXNFbmFibGVkLCBXVEY6Om51bGxvcHQpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAog
ZG91YmxlIEluc3BlY3RvclBhZ2VBZ2VudDo6dGltZXN0YW1wKCkKQEAgLTM5OCwyMSArMzk4LDE5
IEBAIGRvdWJsZSBJbnNwZWN0b3JQYWdlQWdlbnQ6OnRpbWVzdGFtcCgpCiAgICAgcmV0dXJuIG1f
ZW52aXJvbm1lbnQuZXhlY3V0aW9uU3RvcHdhdGNoKCkuZWxhcHNlZFRpbWUoKS5zZWNvbmRzKCk7
CiB9CiAKLXZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpyZWxvYWQoRXJyb3JTdHJpbmcmLCBjb25z
dCBib29sKiBvcHRpb25hbFJlbG9hZEZyb21PcmlnaW4sIGNvbnN0IGJvb2wqIG9wdGlvbmFsUmV2
YWxpZGF0ZUFsbFJlc291cmNlcykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3Bl
Y3RvclBhZ2VBZ2VudDo6cmVsb2FkKE9wdGlvbmFsPGJvb2w+JiYgaWdub3JlQ2FjaGUsIE9wdGlv
bmFsPGJvb2w+JiYgcmV2YWxpZGF0ZUFsbFJlc291cmNlcykKIHsKLSAgICBib29sIHJlbG9hZEZy
b21PcmlnaW4gPSBvcHRpb25hbFJlbG9hZEZyb21PcmlnaW4gJiYgKm9wdGlvbmFsUmVsb2FkRnJv
bU9yaWdpbjsKLSAgICBib29sIHJldmFsaWRhdGVBbGxSZXNvdXJjZXMgPSBvcHRpb25hbFJldmFs
aWRhdGVBbGxSZXNvdXJjZXMgJiYgKm9wdGlvbmFsUmV2YWxpZGF0ZUFsbFJlc291cmNlczsKLQog
ICAgIE9wdGlvblNldDxSZWxvYWRPcHRpb24+IHJlbG9hZE9wdGlvbnM7Ci0gICAgaWYgKHJlbG9h
ZEZyb21PcmlnaW4pCisgICAgaWYgKGlnbm9yZUNhY2hlICYmICppZ25vcmVDYWNoZSkKICAgICAg
ICAgcmVsb2FkT3B0aW9ucy5hZGQoUmVsb2FkT3B0aW9uOjpGcm9tT3JpZ2luKTsKLSAgICBpZiAo
IXJldmFsaWRhdGVBbGxSZXNvdXJjZXMpCisgICAgaWYgKCFyZXZhbGlkYXRlQWxsUmVzb3VyY2Vz
IHx8ICEqcmV2YWxpZGF0ZUFsbFJlc291cmNlcykKICAgICAgICAgcmVsb2FkT3B0aW9ucy5hZGQo
UmVsb2FkT3B0aW9uOjpFeHBpcmVkT25seSk7Ci0KICAgICBtX2luc3BlY3RlZFBhZ2UubWFpbkZy
YW1lKCkubG9hZGVyKCkucmVsb2FkKHJlbG9hZE9wdGlvbnMpOworCisgICAgcmV0dXJuIHsgfTsK
IH0KIAotdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6Om5hdmlnYXRlKEVycm9yU3RyaW5nJiwgY29u
c3QgU3RyaW5nJiB1cmwpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JQ
YWdlQWdlbnQ6Om5hdmlnYXRlKGNvbnN0IFN0cmluZyYgdXJsKQogewogICAgIFVzZXJHZXN0dXJl
SW5kaWNhdG9yIGluZGljYXRvciB7IFByb2Nlc3NpbmdVc2VyR2VzdHVyZSB9OwogICAgIEZyYW1l
JiBmcmFtZSA9IG1faW5zcGVjdGVkUGFnZS5tYWluRnJhbWUoKTsKQEAgLTQyMSwxMTEgKzQxOSw5
NyBAQCB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6bmF2aWdhdGUoRXJyb3JTdHJpbmcmLCBjb25z
dCBTdHJpbmcmIHVybCkKICAgICBGcmFtZUxvYWRSZXF1ZXN0IGZyYW1lTG9hZFJlcXVlc3QgeyAq
ZnJhbWUuZG9jdW1lbnQoKSwgZnJhbWUuZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKSwgV1RG
TW92ZShyZXNvdXJjZVJlcXVlc3QpLCAiX3NlbGYiX3MsIEluaXRpYXRlZEJ5TWFpbkZyYW1lOjpV
bmtub3duIH07CiAgICAgZnJhbWVMb2FkUmVxdWVzdC5kaXNhYmxlTmF2aWdhdGlvblRvSW52YWxp
ZFVSTCgpOwogICAgIGZyYW1lLmxvYWRlcigpLmNoYW5nZUxvY2F0aW9uKFdURk1vdmUoZnJhbWVM
b2FkUmVxdWVzdCkpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JQYWdl
QWdlbnQ6Om92ZXJyaWRlVXNlckFnZW50KEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nKiB2YWx1
ZSkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvclBhZ2VBZ2VudDo6b3Zl
cnJpZGVVc2VyQWdlbnQoY29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKLSAgICBtX3VzZXJBZ2VudE92
ZXJyaWRlID0gdmFsdWUgPyAqdmFsdWUgOiBTdHJpbmcoKTsKKyAgICBtX3VzZXJBZ2VudE92ZXJy
aWRlID0gdmFsdWU7CisKKyAgICByZXR1cm4geyB9OwogfQogCi1zdGF0aWMgaW5saW5lIE9wdGlv
bmFsPGJvb2w+IGFzT3B0aW9uYWxCb29sKGNvbnN0IGJvb2wqIHZhbHVlKQorUHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yUGFnZUFnZW50OjpvdmVycmlkZVNldHRpbmcoUHJv
dG9jb2w6OlBhZ2U6OlNldHRpbmcgc2V0dGluZywgT3B0aW9uYWw8Ym9vbD4mJiB2YWx1ZSkKIHsK
LSAgICBpZiAoIXZhbHVlKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgIHJldHVy
biAqdmFsdWU7Ci19Ci0KLXZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpvdmVycmlkZVNldHRpbmco
RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHNldHRpbmdTdHJpbmcsIGNv
bnN0IGJvb2wqIHZhbHVlKQotewotICAgIGlmIChzZXR0aW5nU3RyaW5nLmlzRW1wdHkoKSkgewot
ICAgICAgICBlcnJvclN0cmluZyA9ICJzZXR0aW5nU3RyaW5nIGlzIGVtcHR5Il9zOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgYXV0byBzZXR0aW5nID0gSW5zcGVjdG9yOjpQcm90b2Nv
bDo6SW5zcGVjdG9ySGVscGVyczo6cGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlBhZ2U6OlNldHRpbmc+KHNldHRpbmdTdHJpbmcpOwotICAgIGlmICghc2V0dGlu
ZykgewotICAgICAgICBlcnJvclN0cmluZyA9IG1ha2VTdHJpbmcoIlVua25vd24gc2V0dGluZ1N0
cmluZzogIl9zLCBzZXR0aW5nU3RyaW5nKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAg
IGF1dG8mIGluc3BlY3RlZFBhZ2VTZXR0aW5ncyA9IG1faW5zcGVjdGVkUGFnZS5zZXR0aW5ncygp
OwogCi0gICAgYXV0byBvdmVycmlkZVZhbHVlID0gYXNPcHRpb25hbEJvb2wodmFsdWUpOwotICAg
IHN3aXRjaCAoc2V0dGluZy52YWx1ZSgpKSB7Ci0gICAgY2FzZSBJbnNwZWN0b3I6OlByb3RvY29s
OjpQYWdlOjpTZXR0aW5nOjpBZENsaWNrQXR0cmlidXRpb25EZWJ1Z01vZGVFbmFibGVkOgotICAg
ICAgICBtX2NsaWVudC0+c2V0RGV2ZWxvcGVyUHJlZmVyZW5jZU92ZXJyaWRlKEluc3BlY3RvckNs
aWVudDo6RGV2ZWxvcGVyUHJlZmVyZW5jZTo6QWRDbGlja0F0dHJpYnV0aW9uRGVidWdNb2RlRW5h
YmxlZCwgb3ZlcnJpZGVWYWx1ZSk7Ci0gICAgICAgIHJldHVybjsKKyAgICBzd2l0Y2ggKHNldHRp
bmcpIHsKKyAgICBjYXNlIFByb3RvY29sOjpQYWdlOjpTZXR0aW5nOjpBZENsaWNrQXR0cmlidXRp
b25EZWJ1Z01vZGVFbmFibGVkOgorICAgICAgICBtX2NsaWVudC0+c2V0RGV2ZWxvcGVyUHJlZmVy
ZW5jZU92ZXJyaWRlKEluc3BlY3RvckNsaWVudDo6RGV2ZWxvcGVyUHJlZmVyZW5jZTo6QWRDbGlj
a0F0dHJpYnV0aW9uRGVidWdNb2RlRW5hYmxlZCwgdmFsdWUpOworICAgICAgICByZXR1cm4geyB9
OwogCi0gICAgY2FzZSBJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpTZXR0aW5nOjpBdXRob3JB
bmRVc2VyU3R5bGVzRW5hYmxlZDoKLSAgICAgICAgaW5zcGVjdGVkUGFnZVNldHRpbmdzLnNldEF1
dGhvckFuZFVzZXJTdHlsZXNFbmFibGVkSW5zcGVjdG9yT3ZlcnJpZGUob3ZlcnJpZGVWYWx1ZSk7
Ci0gICAgICAgIHJldHVybjsKKyAgICBjYXNlIFByb3RvY29sOjpQYWdlOjpTZXR0aW5nOjpBdXRo
b3JBbmRVc2VyU3R5bGVzRW5hYmxlZDoKKyAgICAgICAgaW5zcGVjdGVkUGFnZVNldHRpbmdzLnNl
dEF1dGhvckFuZFVzZXJTdHlsZXNFbmFibGVkSW5zcGVjdG9yT3ZlcnJpZGUodmFsdWUpOworICAg
ICAgICByZXR1cm4geyB9OwogCi0gICAgY2FzZSBJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpT
ZXR0aW5nOjpJQ0VDYW5kaWRhdGVGaWx0ZXJpbmdFbmFibGVkOgotICAgICAgICBpbnNwZWN0ZWRQ
YWdlU2V0dGluZ3Muc2V0SUNFQ2FuZGlkYXRlRmlsdGVyaW5nRW5hYmxlZEluc3BlY3Rvck92ZXJy
aWRlKG92ZXJyaWRlVmFsdWUpOwotICAgICAgICByZXR1cm47CisgICAgY2FzZSBQcm90b2NvbDo6
UGFnZTo6U2V0dGluZzo6SUNFQ2FuZGlkYXRlRmlsdGVyaW5nRW5hYmxlZDoKKyAgICAgICAgaW5z
cGVjdGVkUGFnZVNldHRpbmdzLnNldElDRUNhbmRpZGF0ZUZpbHRlcmluZ0VuYWJsZWRJbnNwZWN0
b3JPdmVycmlkZSh2YWx1ZSk7CisgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBjYXNlIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OlNldHRpbmc6OklUUERlYnVnTW9kZUVuYWJsZWQ6Ci0gICAg
ICAgIG1fY2xpZW50LT5zZXREZXZlbG9wZXJQcmVmZXJlbmNlT3ZlcnJpZGUoSW5zcGVjdG9yQ2xp
ZW50OjpEZXZlbG9wZXJQcmVmZXJlbmNlOjpJVFBEZWJ1Z01vZGVFbmFibGVkLCBvdmVycmlkZVZh
bHVlKTsKLSAgICAgICAgcmV0dXJuOworICAgIGNhc2UgUHJvdG9jb2w6OlBhZ2U6OlNldHRpbmc6
OklUUERlYnVnTW9kZUVuYWJsZWQ6CisgICAgICAgIG1fY2xpZW50LT5zZXREZXZlbG9wZXJQcmVm
ZXJlbmNlT3ZlcnJpZGUoSW5zcGVjdG9yQ2xpZW50OjpEZXZlbG9wZXJQcmVmZXJlbmNlOjpJVFBE
ZWJ1Z01vZGVFbmFibGVkLCB2YWx1ZSk7CisgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBjYXNl
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OlNldHRpbmc6OkltYWdlc0VuYWJsZWQ6Ci0gICAg
ICAgIGluc3BlY3RlZFBhZ2VTZXR0aW5ncy5zZXRJbWFnZXNFbmFibGVkSW5zcGVjdG9yT3ZlcnJp
ZGUob3ZlcnJpZGVWYWx1ZSk7Ci0gICAgICAgIHJldHVybjsKKyAgICBjYXNlIFByb3RvY29sOjpQ
YWdlOjpTZXR0aW5nOjpJbWFnZXNFbmFibGVkOgorICAgICAgICBpbnNwZWN0ZWRQYWdlU2V0dGlu
Z3Muc2V0SW1hZ2VzRW5hYmxlZEluc3BlY3Rvck92ZXJyaWRlKHZhbHVlKTsKKyAgICAgICAgcmV0
dXJuIHsgfTsKIAotICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6U2V0dGluZzo6
TWVkaWFDYXB0dXJlUmVxdWlyZXNTZWN1cmVDb25uZWN0aW9uOgotICAgICAgICBpbnNwZWN0ZWRQ
YWdlU2V0dGluZ3Muc2V0TWVkaWFDYXB0dXJlUmVxdWlyZXNTZWN1cmVDb25uZWN0aW9uSW5zcGVj
dG9yT3ZlcnJpZGUob3ZlcnJpZGVWYWx1ZSk7Ci0gICAgICAgIHJldHVybjsKKyAgICBjYXNlIFBy
b3RvY29sOjpQYWdlOjpTZXR0aW5nOjpNZWRpYUNhcHR1cmVSZXF1aXJlc1NlY3VyZUNvbm5lY3Rp
b246CisgICAgICAgIGluc3BlY3RlZFBhZ2VTZXR0aW5ncy5zZXRNZWRpYUNhcHR1cmVSZXF1aXJl
c1NlY3VyZUNvbm5lY3Rpb25JbnNwZWN0b3JPdmVycmlkZSh2YWx1ZSk7CisgICAgICAgIHJldHVy
biB7IH07CiAKLSAgICBjYXNlIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OlNldHRpbmc6Ok1v
Y2tDYXB0dXJlRGV2aWNlc0VuYWJsZWQ6Ci0gICAgICAgIGluc3BlY3RlZFBhZ2VTZXR0aW5ncy5z
ZXRNb2NrQ2FwdHVyZURldmljZXNFbmFibGVkSW5zcGVjdG9yT3ZlcnJpZGUob3ZlcnJpZGVWYWx1
ZSk7Ci0gICAgICAgIG1fY2xpZW50LT5zZXREZXZlbG9wZXJQcmVmZXJlbmNlT3ZlcnJpZGUoSW5z
cGVjdG9yQ2xpZW50OjpEZXZlbG9wZXJQcmVmZXJlbmNlOjpNb2NrQ2FwdHVyZURldmljZXNFbmFi
bGVkLCBvdmVycmlkZVZhbHVlKTsKLSAgICAgICAgcmV0dXJuOworICAgIGNhc2UgUHJvdG9jb2w6
OlBhZ2U6OlNldHRpbmc6Ok1vY2tDYXB0dXJlRGV2aWNlc0VuYWJsZWQ6CisgICAgICAgIGluc3Bl
Y3RlZFBhZ2VTZXR0aW5ncy5zZXRNb2NrQ2FwdHVyZURldmljZXNFbmFibGVkSW5zcGVjdG9yT3Zl
cnJpZGUodmFsdWUpOworICAgICAgICBtX2NsaWVudC0+c2V0RGV2ZWxvcGVyUHJlZmVyZW5jZU92
ZXJyaWRlKEluc3BlY3RvckNsaWVudDo6RGV2ZWxvcGVyUHJlZmVyZW5jZTo6TW9ja0NhcHR1cmVE
ZXZpY2VzRW5hYmxlZCwgdmFsdWUpOworICAgICAgICByZXR1cm4geyB9OwogCi0gICAgY2FzZSBJ
bnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpTZXR0aW5nOjpOZWVkc1NpdGVTcGVjaWZpY1F1aXJr
czoKLSAgICAgICAgaW5zcGVjdGVkUGFnZVNldHRpbmdzLnNldE5lZWRzU2l0ZVNwZWNpZmljUXVp
cmtzSW5zcGVjdG9yT3ZlcnJpZGUob3ZlcnJpZGVWYWx1ZSk7Ci0gICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIFByb3RvY29sOjpQYWdlOjpTZXR0aW5nOjpOZWVkc1NpdGVTcGVjaWZpY1F1aXJrczoK
KyAgICAgICAgaW5zcGVjdGVkUGFnZVNldHRpbmdzLnNldE5lZWRzU2l0ZVNwZWNpZmljUXVpcmtz
SW5zcGVjdG9yT3ZlcnJpZGUodmFsdWUpOworICAgICAgICByZXR1cm4geyB9OwogCi0gICAgY2Fz
ZSBJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpTZXR0aW5nOjpTY3JpcHRFbmFibGVkOgotICAg
ICAgICBpbnNwZWN0ZWRQYWdlU2V0dGluZ3Muc2V0U2NyaXB0RW5hYmxlZEluc3BlY3Rvck92ZXJy
aWRlKG92ZXJyaWRlVmFsdWUpOwotICAgICAgICByZXR1cm47CisgICAgY2FzZSBQcm90b2NvbDo6
UGFnZTo6U2V0dGluZzo6U2NyaXB0RW5hYmxlZDoKKyAgICAgICAgaW5zcGVjdGVkUGFnZVNldHRp
bmdzLnNldFNjcmlwdEVuYWJsZWRJbnNwZWN0b3JPdmVycmlkZSh2YWx1ZSk7CisgICAgICAgIHJl
dHVybiB7IH07CiAKLSAgICBjYXNlIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OlNldHRpbmc6
OlNob3dEZWJ1Z0JvcmRlcnM6Ci0gICAgICAgIGluc3BlY3RlZFBhZ2VTZXR0aW5ncy5zZXRTaG93
RGVidWdCb3JkZXJzSW5zcGVjdG9yT3ZlcnJpZGUob3ZlcnJpZGVWYWx1ZSk7Ci0gICAgICAgIHJl
dHVybjsKKyAgICBjYXNlIFByb3RvY29sOjpQYWdlOjpTZXR0aW5nOjpTaG93RGVidWdCb3JkZXJz
OgorICAgICAgICBpbnNwZWN0ZWRQYWdlU2V0dGluZ3Muc2V0U2hvd0RlYnVnQm9yZGVyc0luc3Bl
Y3Rvck92ZXJyaWRlKHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGNhc2UgSW5z
cGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6U2V0dGluZzo6U2hvd1JlcGFpbnRDb3VudGVyOgotICAg
ICAgICBpbnNwZWN0ZWRQYWdlU2V0dGluZ3Muc2V0U2hvd1JlcGFpbnRDb3VudGVySW5zcGVjdG9y
T3ZlcnJpZGUob3ZlcnJpZGVWYWx1ZSk7Ci0gICAgICAgIHJldHVybjsKKyAgICBjYXNlIFByb3Rv
Y29sOjpQYWdlOjpTZXR0aW5nOjpTaG93UmVwYWludENvdW50ZXI6CisgICAgICAgIGluc3BlY3Rl
ZFBhZ2VTZXR0aW5ncy5zZXRTaG93UmVwYWludENvdW50ZXJJbnNwZWN0b3JPdmVycmlkZSh2YWx1
ZSk7CisgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBjYXNlIEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlBhZ2U6OlNldHRpbmc6OldlYlJUQ0VuY3J5cHRpb25FbmFibGVkOgotICAgICAgICBpbnNwZWN0
ZWRQYWdlU2V0dGluZ3Muc2V0V2ViUlRDRW5jcnlwdGlvbkVuYWJsZWRJbnNwZWN0b3JPdmVycmlk
ZShvdmVycmlkZVZhbHVlKTsKLSAgICAgICAgcmV0dXJuOworICAgIGNhc2UgUHJvdG9jb2w6OlBh
Z2U6OlNldHRpbmc6OldlYlJUQ0VuY3J5cHRpb25FbmFibGVkOgorICAgICAgICBpbnNwZWN0ZWRQ
YWdlU2V0dGluZ3Muc2V0V2ViUlRDRW5jcnlwdGlvbkVuYWJsZWRJbnNwZWN0b3JPdmVycmlkZSh2
YWx1ZSk7CisgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBjYXNlIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlBhZ2U6OlNldHRpbmc6OldlYlNlY3VyaXR5RW5hYmxlZDoKLSAgICAgICAgaW5zcGVjdGVk
UGFnZVNldHRpbmdzLnNldFdlYlNlY3VyaXR5RW5hYmxlZEluc3BlY3Rvck92ZXJyaWRlKG92ZXJy
aWRlVmFsdWUpOwotICAgICAgICByZXR1cm47CisgICAgY2FzZSBQcm90b2NvbDo6UGFnZTo6U2V0
dGluZzo6V2ViU2VjdXJpdHlFbmFibGVkOgorICAgICAgICBpbnNwZWN0ZWRQYWdlU2V0dGluZ3Mu
c2V0V2ViU2VjdXJpdHlFbmFibGVkSW5zcGVjdG9yT3ZlcnJpZGUodmFsdWUpOworICAgICAgICBy
ZXR1cm4geyB9OwogICAgIH0KIAogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVy
biB7IH07CiB9CiAKLXN0YXRpYyBJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpDb29raWVTYW1l
U2l0ZVBvbGljeSBjb29raWVTYW1lU2l0ZVBvbGljeUpTT04oQ29va2llOjpTYW1lU2l0ZVBvbGlj
eSBwb2xpY3kpCitzdGF0aWMgUHJvdG9jb2w6OlBhZ2U6OkNvb2tpZVNhbWVTaXRlUG9saWN5IGNv
b2tpZVNhbWVTaXRlUG9saWN5SlNPTihDb29raWU6OlNhbWVTaXRlUG9saWN5IHBvbGljeSkKIHsK
ICAgICBzd2l0Y2ggKHBvbGljeSkgewogICAgIGNhc2UgQ29va2llOjpTYW1lU2l0ZVBvbGljeTo6
Tm9uZToKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkNvb2tpZVNh
bWVTaXRlUG9saWN5OjpOb25lOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OlBhZ2U6OkNvb2tp
ZVNhbWVTaXRlUG9saWN5OjpOb25lOwogICAgIGNhc2UgQ29va2llOjpTYW1lU2l0ZVBvbGljeTo6
TGF4OgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6Q29va2llU2Ft
ZVNpdGVQb2xpY3k6OkxheDsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpQYWdlOjpDb29raWVT
YW1lU2l0ZVBvbGljeTo6TGF4OwogICAgIGNhc2UgQ29va2llOjpTYW1lU2l0ZVBvbGljeTo6U3Ry
aWN0OgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6Q29va2llU2Ft
ZVNpdGVQb2xpY3k6OlN0cmljdDsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpQYWdlOjpDb29r
aWVTYW1lU2l0ZVBvbGljeTo6U3RyaWN0OwogICAgIH0KICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6Q29va2llU2FtZVNpdGVQ
b2xpY3k6Ok5vbmU7CisgICAgcmV0dXJuIFByb3RvY29sOjpQYWdlOjpDb29raWVTYW1lU2l0ZVBv
bGljeTo6Tm9uZTsKIH0KIAotc3RhdGljIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpD
b29raWU+IGJ1aWxkT2JqZWN0Rm9yQ29va2llKGNvbnN0IENvb2tpZSYgY29va2llKQorc3RhdGlj
IFJlZjxQcm90b2NvbDo6UGFnZTo6Q29va2llPiBidWlsZE9iamVjdEZvckNvb2tpZShjb25zdCBD
b29raWUmIGNvb2tpZSkKIHsKLSAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6
Q29va2llOjpjcmVhdGUoKQorICAgIHJldHVybiBQcm90b2NvbDo6UGFnZTo6Q29va2llOjpjcmVh
dGUoKQogICAgICAgICAuc2V0TmFtZShjb29raWUubmFtZSkKICAgICAgICAgLnNldFZhbHVlKGNv
b2tpZS52YWx1ZSkKICAgICAgICAgLnNldERvbWFpbihjb29raWUuZG9tYWluKQpAQCAtNTM4LDkg
KzUyMiw5IEBAIHN0YXRpYyBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6Q29va2llPiBi
dWlsZE9iamVjdEZvckNvb2tpZShjb25zdCBDb29raWUmCiAgICAgICAgIC5yZWxlYXNlKCk7CiB9
CiAKLXN0YXRpYyBSZWY8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpD
b29raWU+PiBidWlsZEFycmF5Rm9yQ29va2llcyhMaXN0SGFzaFNldDxDb29raWU+JiBjb29raWVz
TGlzdCkKK3N0YXRpYyBSZWY8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UGFnZTo6Q29va2llPj4g
YnVpbGRBcnJheUZvckNvb2tpZXMoTGlzdEhhc2hTZXQ8Q29va2llPiYgY29va2llc0xpc3QpCiB7
Ci0gICAgYXV0byBjb29raWVzID0gSlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpQ
YWdlOjpDb29raWU+OjpjcmVhdGUoKTsKKyAgICBhdXRvIGNvb2tpZXMgPSBKU09OOjpBcnJheU9m
PFByb3RvY29sOjpQYWdlOjpDb29raWU+OjpjcmVhdGUoKTsKIAogICAgIGZvciAoY29uc3QgYXV0
byYgY29va2llIDogY29va2llc0xpc3QpCiAgICAgICAgIGNvb2tpZXMtPmFkZEl0ZW0oYnVpbGRP
YmplY3RGb3JDb29raWUoY29va2llKSk7CkBAIC01NjAsNyArNTQ0LDcgQEAgc3RhdGljIFZlY3Rv
cjxVUkw+IGFsbFJlc291cmNlc1VSTHNGb3JGcmFtZShGcmFtZSogZnJhbWUpCiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIAotdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmdldENvb2tpZXMoRXJyb3JT
dHJpbmcmLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpD
b29raWU+PiYgY29va2llcykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJh
eU9mPFByb3RvY29sOjpQYWdlOjpDb29raWU+Pj4gSW5zcGVjdG9yUGFnZUFnZW50OjpnZXRDb29r
aWVzKCkKIHsKICAgICBMaXN0SGFzaFNldDxDb29raWU+IGFsbFJhd0Nvb2tpZXM7CiAKQEAgLTU3
OSw3MiArNTYzLDg0IEBAIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpnZXRDb29raWVzKEVycm9y
U3RyaW5nJiwgUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yCiAgICAgICAgIH0KICAgICB9
CiAKLSAgICBjb29raWVzID0gYnVpbGRBcnJheUZvckNvb2tpZXMoYWxsUmF3Q29va2llcyk7Cisg
ICAgcmV0dXJuIGJ1aWxkQXJyYXlGb3JDb29raWVzKGFsbFJhd0Nvb2tpZXMpOwogfQogCi1zdGF0
aWMgT3B0aW9uYWw8Q29va2llPiBwYXJzZUNvb2tpZU9iamVjdChFcnJvclN0cmluZyYgZXJyb3JT
dHJpbmcsIGNvbnN0IEpTT046Ok9iamVjdCYgY29va2llT2JqZWN0KQorc3RhdGljIE9wdGlvbmFs
PENvb2tpZT4gcGFyc2VDb29raWVPYmplY3QoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0
cmluZywgUmVmPEpTT046Ok9iamVjdD4mJiBjb29raWVPYmplY3QpCiB7CiAgICAgQ29va2llIGNv
b2tpZTsKIAotICAgIGlmICghY29va2llT2JqZWN0LmdldFN0cmluZygibmFtZSJfcywgY29va2ll
Lm5hbWUpKSB7CisgICAgY29va2llLm5hbWUgPSBjb29raWVPYmplY3QtPmdldFN0cmluZyhQcm90
b2NvbDo6UGFnZTo6Q29va2llOjpuYW1lS2V5KTsKKyAgICBpZiAoIWNvb2tpZS5uYW1lKSB7CiAg
ICAgICAgIGVycm9yU3RyaW5nID0gIkludmFsaWQgdmFsdWUgZm9yIGtleSBuYW1lIGluIGdpdmVu
IGNvb2tpZSI7CiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgfQogCi0gICAgaWYg
KCFjb29raWVPYmplY3QuZ2V0U3RyaW5nKCJ2YWx1ZSJfcywgY29va2llLnZhbHVlKSkgeworICAg
IGNvb2tpZS52YWx1ZSA9IGNvb2tpZU9iamVjdC0+Z2V0U3RyaW5nKFByb3RvY29sOjpQYWdlOjpD
b29raWU6OnZhbHVlS2V5KTsKKyAgICBpZiAoIWNvb2tpZS52YWx1ZSkgewogICAgICAgICBlcnJv
clN0cmluZyA9ICJJbnZhbGlkIHZhbHVlIGZvciBrZXkgdmFsdWUgaW4gZ2l2ZW4gY29va2llIjsK
ICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICB9CiAKLSAgICBpZiAoIWNvb2tpZU9i
amVjdC5nZXRTdHJpbmcoImRvbWFpbiJfcywgY29va2llLmRvbWFpbikpIHsKKyAgICBjb29raWUu
ZG9tYWluID0gY29va2llT2JqZWN0LT5nZXRTdHJpbmcoUHJvdG9jb2w6OlBhZ2U6OkNvb2tpZTo6
ZG9tYWluS2V5KTsKKyAgICBpZiAoIWNvb2tpZS5kb21haW4pIHsKICAgICAgICAgZXJyb3JTdHJp
bmcgPSAiSW52YWxpZCB2YWx1ZSBmb3Iga2V5IGRvbWFpbiBpbiBnaXZlbiBjb29raWUiOwogICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIH0KIAotICAgIGlmICghY29va2llT2JqZWN0
LmdldFN0cmluZygicGF0aCJfcywgY29va2llLnBhdGgpKSB7CisgICAgY29va2llLnBhdGggPSBj
b29raWVPYmplY3QtPmdldFN0cmluZyhQcm90b2NvbDo6UGFnZTo6Q29va2llOjpwYXRoS2V5KTsK
KyAgICBpZiAoIWNvb2tpZS5wYXRoKSB7CiAgICAgICAgIGVycm9yU3RyaW5nID0gIkludmFsaWQg
dmFsdWUgZm9yIGtleSBwYXRoIGluIGdpdmVuIGNvb2tpZSI7CiAgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CiAgICAgfQogCi0gICAgaWYgKCFjb29raWVPYmplY3QuZ2V0Qm9vbGVhbigiaHR0
cE9ubHkiX3MsIGNvb2tpZS5odHRwT25seSkpIHsKKyAgICBhdXRvIGh0dHBPbmx5ID0gY29va2ll
T2JqZWN0LT5nZXRCb29sZWFuKFByb3RvY29sOjpQYWdlOjpDb29raWU6Omh0dHBPbmx5S2V5KTsK
KyAgICBpZiAoIWh0dHBPbmx5KSB7CiAgICAgICAgIGVycm9yU3RyaW5nID0gIkludmFsaWQgdmFs
dWUgZm9yIGtleSBodHRwT25seSBpbiBnaXZlbiBjb29raWUiOwogICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwogICAgIH0KIAotICAgIGlmICghY29va2llT2JqZWN0LmdldEJvb2xlYW4oInNl
Y3VyZSJfcywgY29va2llLnNlY3VyZSkpIHsKKyAgICBjb29raWUuaHR0cE9ubHkgPSAqaHR0cE9u
bHk7CisKKyAgICBhdXRvIHNlY3VyZSA9IGNvb2tpZU9iamVjdC0+Z2V0Qm9vbGVhbihQcm90b2Nv
bDo6UGFnZTo6Q29va2llOjpzZWN1cmVLZXkpOworICAgIGlmICghc2VjdXJlKSB7CiAgICAgICAg
IGVycm9yU3RyaW5nID0gIkludmFsaWQgdmFsdWUgZm9yIGtleSBzZWN1cmUgaW4gZ2l2ZW4gY29v
a2llIjsKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICB9CiAKLSAgICBib29sIHZh
bGlkU2Vzc2lvbiA9IGNvb2tpZU9iamVjdC5nZXRCb29sZWFuKCJzZXNzaW9uIl9zLCBjb29raWUu
c2Vzc2lvbik7Ci0gICAgY29va2llLmV4cGlyZXMgPSBjb29raWVPYmplY3QuZ2V0TnVtYmVyPGRv
dWJsZT4oImV4cGlyZXMiX3MpOwotICAgIGlmICghdmFsaWRTZXNzaW9uICYmICFjb29raWUuZXhw
aXJlcykgeworICAgIGNvb2tpZS5zZWN1cmUgPSAqc2VjdXJlOworCisgICAgYXV0byBzZXNzaW9u
ID0gY29va2llT2JqZWN0LT5nZXRCb29sZWFuKFByb3RvY29sOjpQYWdlOjpDb29raWU6OnNlc3Np
b25LZXkpOworICAgIGNvb2tpZS5leHBpcmVzID0gY29va2llT2JqZWN0LT5nZXREb3VibGUoUHJv
dG9jb2w6OlBhZ2U6OkNvb2tpZTo6ZXhwaXJlc0tleSk7CisgICAgaWYgKCFzZXNzaW9uICYmICFj
b29raWUuZXhwaXJlcykgewogICAgICAgICBlcnJvclN0cmluZyA9ICJJbnZhbGlkIHZhbHVlIGZv
ciBrZXkgZXhwaXJlcyBpbiBnaXZlbiBjb29raWUiOwogICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwogICAgIH0KIAotICAgIFN0cmluZyBzYW1lU2l0ZVN0cmluZzsKLSAgICBpZiAoIWNvb2tp
ZU9iamVjdC5nZXRTdHJpbmcoInNhbWVTaXRlIl9zLCBzYW1lU2l0ZVN0cmluZykpIHsKKyAgICBj
b29raWUuc2Vzc2lvbiA9ICpzZXNzaW9uOworCisgICAgYXV0byBzYW1lU2l0ZVN0cmluZyA9IGNv
b2tpZU9iamVjdC0+Z2V0U3RyaW5nKFByb3RvY29sOjpQYWdlOjpDb29raWU6OnNhbWVTaXRlS2V5
KTsKKyAgICBpZiAoIXNhbWVTaXRlU3RyaW5nKSB7CiAgICAgICAgIGVycm9yU3RyaW5nID0gIklu
dmFsaWQgdmFsdWUgZm9yIGtleSBzYW1lU2l0ZSBpbiBnaXZlbiBjb29raWUiOwogICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIH0KIAotICAgIGF1dG8gc2FtZVNpdGUgPSBJbnNwZWN0
b3I6OlByb3RvY29sOjpJbnNwZWN0b3JIZWxwZXJzOjpwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8
SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6Q29va2llU2FtZVNpdGVQb2xpY3k+KHNhbWVTaXRl
U3RyaW5nKTsKKyAgICBhdXRvIHNhbWVTaXRlID0gUHJvdG9jb2w6OkhlbHBlcnM6OnBhcnNlRW51
bVZhbHVlRnJvbVN0cmluZzxQcm90b2NvbDo6UGFnZTo6Q29va2llU2FtZVNpdGVQb2xpY3k+KHNh
bWVTaXRlU3RyaW5nKTsKICAgICBpZiAoIXNhbWVTaXRlKSB7CiAgICAgICAgIGVycm9yU3RyaW5n
ID0gIkludmFsaWQgdmFsdWUgZm9yIGtleSBzYW1lU2l0ZSBpbiBnaXZlbiBjb29raWUiOwogICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIH0KIAogICAgIHN3aXRjaCAoc2FtZVNpdGUu
dmFsdWUoKSkgewotICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6Q29va2llU2Ft
ZVNpdGVQb2xpY3k6Ok5vbmU6CisgICAgY2FzZSBQcm90b2NvbDo6UGFnZTo6Q29va2llU2FtZVNp
dGVQb2xpY3k6Ok5vbmU6CiAgICAgICAgIGNvb2tpZS5zYW1lU2l0ZSA9IENvb2tpZTo6U2FtZVNp
dGVQb2xpY3k6Ok5vbmU7Ci0KICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJbnNwZWN0b3I6OlBy
b3RvY29sOjpQYWdlOjpDb29raWVTYW1lU2l0ZVBvbGljeTo6TGF4OgorCisgICAgY2FzZSBQcm90
b2NvbDo6UGFnZTo6Q29va2llU2FtZVNpdGVQb2xpY3k6OkxheDoKICAgICAgICAgY29va2llLnNh
bWVTaXRlID0gQ29va2llOjpTYW1lU2l0ZVBvbGljeTo6TGF4OwotCiAgICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6Q29va2llU2FtZVNpdGVQb2xpY3k6
OlN0cmljdDoKKworICAgIGNhc2UgUHJvdG9jb2w6OlBhZ2U6OkNvb2tpZVNhbWVTaXRlUG9saWN5
OjpTdHJpY3Q6CiAgICAgICAgIGNvb2tpZS5zYW1lU2l0ZSA9IENvb2tpZTo6U2FtZVNpdGVQb2xp
Y3k6OlN0cmljdDsKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtNjUyLDExICs2NDgsMTMgQEAg
c3RhdGljIE9wdGlvbmFsPENvb2tpZT4gcGFyc2VDb29raWVPYmplY3QoRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBjb25zdCBKU09OOjoKICAgICByZXR1cm4gY29va2llOwogfQogCi12b2lkIElu
c3BlY3RvclBhZ2VBZ2VudDo6c2V0Q29va2llKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29u
c3QgSlNPTjo6T2JqZWN0JiBjb29raWVPYmplY3QpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2
b2lkPiBJbnNwZWN0b3JQYWdlQWdlbnQ6OnNldENvb2tpZShSZWY8SlNPTjo6T2JqZWN0PiYmIGNv
b2tpZU9iamVjdCkKIHsKLSAgICBhdXRvIGNvb2tpZSA9IHBhcnNlQ29va2llT2JqZWN0KGVycm9y
U3RyaW5nLCBjb29raWVPYmplY3QpOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0
cmluZzsKKworICAgIGF1dG8gY29va2llID0gcGFyc2VDb29raWVPYmplY3QoZXJyb3JTdHJpbmcs
IFdURk1vdmUoY29va2llT2JqZWN0KSk7CiAgICAgaWYgKCFjb29raWUpCi0gICAgICAgIHJldHVy
bjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgIGZv
ciAoYXV0byogZnJhbWUgPSAmbV9pbnNwZWN0ZWRQYWdlLm1haW5GcmFtZSgpOyBmcmFtZTsgZnJh
bWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKSB7CiAgICAgICAgIGlmIChhdXRvKiBk
b2N1bWVudCA9IGZyYW1lLT5kb2N1bWVudCgpKSB7CkBAIC02NjQsOSArNjYyLDExIEBAIHZvaWQg
SW5zcGVjdG9yUGFnZUFnZW50OjpzZXRDb29raWUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBj
b25zdCBKU09OOjpPYmplY3QmCiAgICAgICAgICAgICAgICAgcGFnZS0+Y29va2llSmFyKCkuc2V0
UmF3Q29va2llKCpkb2N1bWVudCwgY29va2llLnZhbHVlKCkpOwogICAgICAgICB9CiAgICAgfQor
CisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmRlbGV0ZUNv
b2tpZShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgY29va2llTmFtZSwgY29uc3QgU3RyaW5n
JiB1cmwpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JQYWdlQWdlbnQ6
OmRlbGV0ZUNvb2tpZShjb25zdCBTdHJpbmcmIGNvb2tpZU5hbWUsIGNvbnN0IFN0cmluZyYgdXJs
KQogewogICAgIFVSTCBwYXJzZWRVUkwoeyB9LCB1cmwpOwogICAgIGZvciAoRnJhbWUqIGZyYW1l
ID0gJm1faW5zcGVjdGVkUGFnZS5tYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRy
ZWUoKS50cmF2ZXJzZU5leHQoKSkgewpAQCAtNjc1LDQ4ICs2NzUsNTkgQEAgdm9pZCBJbnNwZWN0
b3JQYWdlQWdlbnQ6OmRlbGV0ZUNvb2tpZShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgY29v
a2llTmFtZSwgY28KICAgICAgICAgICAgICAgICBwYWdlLT5jb29raWVKYXIoKS5kZWxldGVDb29r
aWUoKmRvY3VtZW50LCBwYXJzZWRVUkwsIGNvb2tpZU5hbWUpOwogICAgICAgICB9CiAgICAgfQor
CisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmdldFJlc291
cmNlVHJlZShFcnJvclN0cmluZyYsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpG
cmFtZVJlc291cmNlVHJlZT4mIG9iamVjdCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxQ
cm90b2NvbDo6UGFnZTo6RnJhbWVSZXNvdXJjZVRyZWU+PiBJbnNwZWN0b3JQYWdlQWdlbnQ6Omdl
dFJlc291cmNlVHJlZSgpCiB7Ci0gICAgb2JqZWN0ID0gYnVpbGRPYmplY3RGb3JGcmFtZVRyZWUo
Jm1faW5zcGVjdGVkUGFnZS5tYWluRnJhbWUoKSk7CisgICAgcmV0dXJuIGJ1aWxkT2JqZWN0Rm9y
RnJhbWVUcmVlKCZtX2luc3BlY3RlZFBhZ2UubWFpbkZyYW1lKCkpOwogfQogCi12b2lkIEluc3Bl
Y3RvclBhZ2VBZ2VudDo6Z2V0UmVzb3VyY2VDb250ZW50KEVycm9yU3RyaW5nJiBlcnJvclN0cmlu
ZywgY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBjb25zdCBTdHJpbmcmIHVybCwgU3RyaW5nKiBjb250
ZW50LCBib29sKiBiYXNlNjRFbmNvZGVkKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8c3RkOjp0
dXBsZTxTdHJpbmcsIGJvb2wgLyogYmFzZTY0RW5jb2RlZCAqLz4+IEluc3BlY3RvclBhZ2VBZ2Vu
dDo6Z2V0UmVzb3VyY2VDb250ZW50KGNvbnN0IFByb3RvY29sOjpOZXR3b3JrOjpGcmFtZUlkJiBm
cmFtZUlkLCBjb25zdCBTdHJpbmcmIHVybCkKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcg
ZXJyb3JTdHJpbmc7CisKICAgICBGcmFtZSogZnJhbWUgPSBhc3NlcnRGcmFtZShlcnJvclN0cmlu
ZywgZnJhbWVJZCk7CiAgICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICBy
ZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCi0gICAgcmVzb3VyY2VDb250ZW50
KGVycm9yU3RyaW5nLCBmcmFtZSwgVVJMKHsgfSwgdXJsKSwgY29udGVudCwgYmFzZTY0RW5jb2Rl
ZCk7CisgICAgU3RyaW5nIGNvbnRlbnQ7CisgICAgYm9vbCBiYXNlNjRFbmNvZGVkOworCisgICAg
cmVzb3VyY2VDb250ZW50KGVycm9yU3RyaW5nLCBmcmFtZSwgVVJMKHsgfSwgdXJsKSwgJmNvbnRl
bnQsICZiYXNlNjRFbmNvZGVkKTsKKworICAgIHJldHVybiB7IHsgY29udGVudCwgYmFzZTY0RW5j
b2RlZCB9IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpzZXRCb290c3RyYXBTY3Jp
cHQoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsU291cmNlKQorUHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yUGFnZUFnZW50OjpzZXRCb290c3RyYXBTY3Jp
cHQoY29uc3QgU3RyaW5nJiBzb3VyY2UpCiB7Ci0gICAgbV9ib290c3RyYXBTY3JpcHQgPSBvcHRp
b25hbFNvdXJjZSA/ICpvcHRpb25hbFNvdXJjZSA6IG51bGxTdHJpbmcoKTsKKyAgICBtX2Jvb3Rz
dHJhcFNjcmlwdCA9IHNvdXJjZTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVj
dG9yUGFnZUFnZW50OjpzZWFyY2hJblJlc291cmNlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywg
Y29uc3QgU3RyaW5nJiBmcmFtZUlkLCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBx
dWVyeSwgY29uc3QgYm9vbCogb3B0aW9uYWxDYXNlU2Vuc2l0aXZlLCBjb25zdCBib29sKiBvcHRp
b25hbElzUmVnZXgsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxSZXF1ZXN0SWQsIFJlZlB0cjxKU09O
OjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkdlbmVyaWNUeXBlczo6U2VhcmNoTWF0Y2g+
PiYgcmVzdWx0cykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPFBy
b3RvY29sOjpHZW5lcmljVHlwZXM6OlNlYXJjaE1hdGNoPj4+IEluc3BlY3RvclBhZ2VBZ2VudDo6
c2VhcmNoSW5SZXNvdXJjZShjb25zdCBQcm90b2NvbDo6TmV0d29yazo6RnJhbWVJZCYgZnJhbWVJ
ZCwgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgcXVlcnksIE9wdGlvbmFsPGJvb2w+
JiYgY2FzZVNlbnNpdGl2ZSwgT3B0aW9uYWw8Ym9vbD4mJiBpc1JlZ2V4LCBjb25zdCBQcm90b2Nv
bDo6TmV0d29yazo6UmVxdWVzdElkJiByZXF1ZXN0SWQpCiB7Ci0gICAgcmVzdWx0cyA9IEpTT046
OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6R2VuZXJpY1R5cGVzOjpTZWFyY2hNYXRjaD46
OmNyZWF0ZSgpOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKIAotICAg
IGJvb2wgaXNSZWdleCA9IG9wdGlvbmFsSXNSZWdleCA/ICpvcHRpb25hbElzUmVnZXggOiBmYWxz
ZTsKLSAgICBib29sIGNhc2VTZW5zaXRpdmUgPSBvcHRpb25hbENhc2VTZW5zaXRpdmUgPyAqb3B0
aW9uYWxDYXNlU2Vuc2l0aXZlIDogZmFsc2U7Ci0KLSAgICBpZiAob3B0aW9uYWxSZXF1ZXN0SWQp
IHsKKyAgICBpZiAoISFyZXF1ZXN0SWQpIHsKICAgICAgICAgaWYgKGF1dG8qIG5ldHdvcmtBZ2Vu
dCA9IG1faW5zdHJ1bWVudGluZ0FnZW50cy5lbmFibGVkTmV0d29ya0FnZW50KCkpIHsKLSAgICAg
ICAgICAgIG5ldHdvcmtBZ2VudC0+c2VhcmNoSW5SZXF1ZXN0KGVycm9yU3RyaW5nLCAqb3B0aW9u
YWxSZXF1ZXN0SWQsIHF1ZXJ5LCBjYXNlU2Vuc2l0aXZlLCBpc1JlZ2V4LCByZXN1bHRzKTsKLSAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIFJlZlB0cjxKU09OOjpBcnJheU9mPFByb3Rv
Y29sOjpHZW5lcmljVHlwZXM6OlNlYXJjaE1hdGNoPj4gcmVzdWx0OworICAgICAgICAgICAgbmV0
d29ya0FnZW50LT5zZWFyY2hJblJlcXVlc3QoZXJyb3JTdHJpbmcsIHJlcXVlc3RJZCwgcXVlcnks
IGNhc2VTZW5zaXRpdmUgJiYgKmNhc2VTZW5zaXRpdmUsIGlzUmVnZXggJiYgKmlzUmVnZXgsIHJl
c3VsdCk7CisgICAgICAgICAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgICAgICAgICByZXR1cm4g
bWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5y
ZWxlYXNlTm9uTnVsbCgpOwogICAgICAgICB9CiAgICAgfQogCiAgICAgRnJhbWUqIGZyYW1lID0g
YXNzZXJ0RnJhbWUoZXJyb3JTdHJpbmcsIGZyYW1lSWQpOwogICAgIGlmICghZnJhbWUpCi0gICAg
ICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsK
IAogICAgIERvY3VtZW50TG9hZGVyKiBsb2FkZXIgPSBhc3NlcnREb2N1bWVudExvYWRlcihlcnJv
clN0cmluZywgZnJhbWUpOwogICAgIGlmICghbG9hZGVyKQotICAgICAgICByZXR1cm47CisgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAgICBVUkwga3VybCh7
IH0sIHVybCk7CiAKQEAgLTczNSwyOSArNzQ2LDI2IEBAIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50
OjpzZWFyY2hJblJlc291cmNlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5n
CiAgICAgfQogCiAgICAgaWYgKCFzdWNjZXNzKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJl
dHVybiBKU09OOjpBcnJheU9mPFByb3RvY29sOjpHZW5lcmljVHlwZXM6OlNlYXJjaE1hdGNoPjo6
Y3JlYXRlKCk7CiAKLSAgICByZXN1bHRzID0gQ29udGVudFNlYXJjaFV0aWxpdGllczo6c2VhcmNo
SW5UZXh0QnlMaW5lcyhjb250ZW50LCBxdWVyeSwgY2FzZVNlbnNpdGl2ZSwgaXNSZWdleCk7Cisg
ICAgcmV0dXJuIENvbnRlbnRTZWFyY2hVdGlsaXRpZXM6OnNlYXJjaEluVGV4dEJ5TGluZXMoY29u
dGVudCwgcXVlcnksIGNhc2VTZW5zaXRpdmUgJiYgKmNhc2VTZW5zaXRpdmUsIGlzUmVnZXggJiYg
KmlzUmVnZXgpOwogfQogCi1zdGF0aWMgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OlNl
YXJjaFJlc3VsdD4gYnVpbGRPYmplY3RGb3JTZWFyY2hSZXN1bHQoY29uc3QgU3RyaW5nJiBmcmFt
ZUlkLCBjb25zdCBTdHJpbmcmIHVybCwgaW50IG1hdGNoZXNDb3VudCkKK3N0YXRpYyBSZWY8UHJv
dG9jb2w6OlBhZ2U6OlNlYXJjaFJlc3VsdD4gYnVpbGRPYmplY3RGb3JTZWFyY2hSZXN1bHQoY29u
c3QgUHJvdG9jb2w6Ok5ldHdvcms6OkZyYW1lSWQmIGZyYW1lSWQsIGNvbnN0IFN0cmluZyYgdXJs
LCBpbnQgbWF0Y2hlc0NvdW50KQogewotICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpQ
YWdlOjpTZWFyY2hSZXN1bHQ6OmNyZWF0ZSgpCisgICAgcmV0dXJuIFByb3RvY29sOjpQYWdlOjpT
ZWFyY2hSZXN1bHQ6OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRVcmwodXJsKQogICAgICAgICAuc2V0
RnJhbWVJZChmcmFtZUlkKQogICAgICAgICAuc2V0TWF0Y2hlc0NvdW50KG1hdGNoZXNDb3VudCkK
ICAgICAgICAgLnJlbGVhc2UoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OnNlYXJj
aEluUmVzb3VyY2VzKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBib29s
KiBvcHRpb25hbENhc2VTZW5zaXRpdmUsIGNvbnN0IGJvb2wqIG9wdGlvbmFsSXNSZWdleCwgUmVm
UHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6U2VhcmNoUmVzdWx0
Pj4mIHJlc3VsdCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPFBy
b3RvY29sOjpQYWdlOjpTZWFyY2hSZXN1bHQ+Pj4gSW5zcGVjdG9yUGFnZUFnZW50OjpzZWFyY2hJ
blJlc291cmNlcyhjb25zdCBTdHJpbmcmIHRleHQsIE9wdGlvbmFsPGJvb2w+JiYgY2FzZVNlbnNp
dGl2ZSwgT3B0aW9uYWw8Ym9vbD4mJiBpc1JlZ2V4KQogewotICAgIHJlc3VsdCA9IEpTT046OkFy
cmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6U2VhcmNoUmVzdWx0Pjo6Y3JlYXRlKCk7
CisgICAgYXV0byByZXN1bHQgPSBKU09OOjpBcnJheU9mPFByb3RvY29sOjpQYWdlOjpTZWFyY2hS
ZXN1bHQ+OjpjcmVhdGUoKTsKIAotICAgIGJvb2wgY2FzZVNlbnNpdGl2ZSA9IG9wdGlvbmFsQ2Fz
ZVNlbnNpdGl2ZSA/ICpvcHRpb25hbENhc2VTZW5zaXRpdmUgOiBmYWxzZTsKLSAgICBib29sIGlz
UmVnZXggPSBvcHRpb25hbElzUmVnZXggPyAqb3B0aW9uYWxJc1JlZ2V4IDogZmFsc2U7Ci0KLSAg
ICBhdXRvIHNlYXJjaFN0cmluZ1R5cGUgPSBpc1JlZ2V4ID8gQ29udGVudFNlYXJjaFV0aWxpdGll
czo6U2VhcmNoU3RyaW5nVHlwZTo6UmVnZXggOiBDb250ZW50U2VhcmNoVXRpbGl0aWVzOjpTZWFy
Y2hTdHJpbmdUeXBlOjpDb250YWluc1N0cmluZzsKLSAgICBhdXRvIHJlZ2V4ID0gQ29udGVudFNl
YXJjaFV0aWxpdGllczo6Y3JlYXRlUmVndWxhckV4cHJlc3Npb25Gb3JTZWFyY2hTdHJpbmcodGV4
dCwgY2FzZVNlbnNpdGl2ZSwgc2VhcmNoU3RyaW5nVHlwZSk7CisgICAgYXV0byBzZWFyY2hTdHJp
bmdUeXBlID0gKGlzUmVnZXggJiYgKmlzUmVnZXgpID8gQ29udGVudFNlYXJjaFV0aWxpdGllczo6
U2VhcmNoU3RyaW5nVHlwZTo6UmVnZXggOiBDb250ZW50U2VhcmNoVXRpbGl0aWVzOjpTZWFyY2hT
dHJpbmdUeXBlOjpDb250YWluc1N0cmluZzsKKyAgICBhdXRvIHJlZ2V4ID0gQ29udGVudFNlYXJj
aFV0aWxpdGllczo6Y3JlYXRlUmVndWxhckV4cHJlc3Npb25Gb3JTZWFyY2hTdHJpbmcodGV4dCwg
Y2FzZVNlbnNpdGl2ZSAmJiAqY2FzZVNlbnNpdGl2ZSwgc2VhcmNoU3RyaW5nVHlwZSk7CiAKICAg
ICBmb3IgKEZyYW1lKiBmcmFtZSA9ICZtX2luc3BlY3RlZFBhZ2UubWFpbkZyYW1lKCk7IGZyYW1l
OyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsKICAgICAgICAgZm9yIChh
dXRvKiBjYWNoZWRSZXNvdXJjZSA6IGNhY2hlZFJlc291cmNlc0ZvckZyYW1lKGZyYW1lKSkgewpA
QCAtNzcxLDI0ICs3NzksMzAgQEAgdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OnNlYXJjaEluUmVz
b3VyY2VzKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiB0ZXh0LCBjb24KIAogICAgIGlmIChh
dXRvKiBuZXR3b3JrQWdlbnQgPSBtX2luc3RydW1lbnRpbmdBZ2VudHMuZW5hYmxlZE5ldHdvcmtB
Z2VudCgpKQogICAgICAgICBuZXR3b3JrQWdlbnQtPnNlYXJjaE90aGVyUmVxdWVzdHMocmVnZXgs
IHJlc3VsdCk7CisKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAjaWYgIVBMQVRGT1JNKElPU19G
QU1JTFkpCi12b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6c2V0U2hvd1J1bGVycyhFcnJvclN0cmlu
ZyYsIGJvb2wgc2hvd1J1bGVycykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3Bl
Y3RvclBhZ2VBZ2VudDo6c2V0U2hvd1J1bGVycyhib29sIHNob3dSdWxlcnMpCiB7CiAgICAgbV9v
dmVybGF5LT5zZXRTaG93UnVsZXJzKHNob3dSdWxlcnMpOworCisgICAgcmV0dXJuIHsgfTsKIH0K
ICNlbmRpZgogCi12b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6c2V0U2hvd1BhaW50UmVjdHMoRXJy
b3JTdHJpbmcmLCBib29sIHNob3cpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNw
ZWN0b3JQYWdlQWdlbnQ6OnNldFNob3dQYWludFJlY3RzKGJvb2wgc2hvdykKIHsKICAgICBtX3No
b3dQYWludFJlY3RzID0gc2hvdzsKICAgICBtX2NsaWVudC0+c2V0U2hvd1BhaW50UmVjdHMoc2hv
dyk7CiAKICAgICBpZiAobV9jbGllbnQtPm92ZXJyaWRlc1Nob3dQYWludFJlY3RzKCkpCi0gICAg
ICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIG1fb3ZlcmxheS0+c2V0U2hv
d1BhaW50UmVjdHMoc2hvdyk7CisKKyAgICByZXR1cm4geyB9OwogfQogCiB2b2lkIEluc3BlY3Rv
clBhZ2VBZ2VudDo6ZG9tQ29udGVudEV2ZW50RmlyZWQoKQpAQCAtODE2LDcgKzgzMCw3IEBAIHZv
aWQgSW5zcGVjdG9yUGFnZUFnZW50OjpmcmFtZURldGFjaGVkKEZyYW1lJiBmcmFtZSkKICAgICBt
X2lkZW50aWZpZXJUb0ZyYW1lLnJlbW92ZShpZGVudGlmaWVyKTsKIH0KIAotRnJhbWUqIEluc3Bl
Y3RvclBhZ2VBZ2VudDo6ZnJhbWVGb3JJZChjb25zdCBTdHJpbmcmIGZyYW1lSWQpCitGcmFtZSog
SW5zcGVjdG9yUGFnZUFnZW50OjpmcmFtZUZvcklkKGNvbnN0IFByb3RvY29sOjpOZXR3b3JrOjpG
cmFtZUlkJiBmcmFtZUlkKQogewogICAgIHJldHVybiBmcmFtZUlkLmlzRW1wdHkoKSA/IG51bGxw
dHIgOiBtX2lkZW50aWZpZXJUb0ZyYW1lLmdldChmcmFtZUlkKTsKIH0KQEAgLTg0MSw3ICs4NTUs
NyBAQCBTdHJpbmcgSW5zcGVjdG9yUGFnZUFnZW50Ojpsb2FkZXJJZChEb2N1bWVudExvYWRlciog
bG9hZGVyKQogICAgIH0pLml0ZXJhdG9yLT52YWx1ZTsKIH0KIAotRnJhbWUqIEluc3BlY3RvclBh
Z2VBZ2VudDo6YXNzZXJ0RnJhbWUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJp
bmcmIGZyYW1lSWQpCitGcmFtZSogSW5zcGVjdG9yUGFnZUFnZW50Ojphc3NlcnRGcmFtZShQcm90
b2NvbDo6RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBQcm90b2NvbDo6TmV0d29yazo6
RnJhbWVJZCYgZnJhbWVJZCkKIHsKICAgICBGcmFtZSogZnJhbWUgPSBmcmFtZUZvcklkKGZyYW1l
SWQpOwogICAgIGlmICghZnJhbWUpCkBAIC04NzcsNyArODkxLDcgQEAgdm9pZCBJbnNwZWN0b3JQ
YWdlQWdlbnQ6OmZyYW1lQ2xlYXJlZFNjaGVkdWxlZE5hdmlnYXRpb24oRnJhbWUmIGZyYW1lKQog
I2lmIEVOQUJMRShEQVJLX01PREVfQ1NTKSB8fCBIQVZFKE9TX0RBUktfTU9ERV9TVVBQT1JUKQog
dm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmRlZmF1bHRBcHBlYXJhbmNlRGlkQ2hhbmdlKGJvb2wg
dXNlRGFya0FwcGVhcmFuY2UpCiB7Ci0gICAgbV9mcm9udGVuZERpc3BhdGNoZXItPmRlZmF1bHRB
cHBlYXJhbmNlRGlkQ2hhbmdlKHVzZURhcmtBcHBlYXJhbmNlID8gSW5zcGVjdG9yOjpQcm90b2Nv
bDo6UGFnZTo6QXBwZWFyYW5jZTo6RGFyayA6IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkFw
cGVhcmFuY2U6OkxpZ2h0KTsKKyAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+ZGVmYXVsdEFwcGVh
cmFuY2VEaWRDaGFuZ2UodXNlRGFya0FwcGVhcmFuY2UgPyBQcm90b2NvbDo6UGFnZTo6QXBwZWFy
YW5jZTo6RGFyayA6IFByb3RvY29sOjpQYWdlOjpBcHBlYXJhbmNlOjpMaWdodCk7CiB9CiAjZW5k
aWYKIApAQCAtOTMzLDExICs5NDcsMTEgQEAgdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmRpZFJl
Y2FsY3VsYXRlU3R5bGUoKQogICAgIG1fb3ZlcmxheS0+dXBkYXRlKCk7CiB9CiAKLVJlZjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpQYWdlOjpGcmFtZT4gSW5zcGVjdG9yUGFnZUFnZW50OjpidWlsZE9i
amVjdEZvckZyYW1lKEZyYW1lKiBmcmFtZSkKK1JlZjxQcm90b2NvbDo6UGFnZTo6RnJhbWU+IElu
c3BlY3RvclBhZ2VBZ2VudDo6YnVpbGRPYmplY3RGb3JGcmFtZShGcmFtZSogZnJhbWUpCiB7CiAg
ICAgQVNTRVJUX0FSRyhmcmFtZSwgZnJhbWUpOwogCi0gICAgYXV0byBmcmFtZU9iamVjdCA9IElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkZyYW1lOjpjcmVhdGUoKQorICAgIGF1dG8gZnJhbWVP
YmplY3QgPSBQcm90b2NvbDo6UGFnZTo6RnJhbWU6OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRJZChm
cmFtZUlkKGZyYW1lKSkKICAgICAgICAgLnNldExvYWRlcklkKGxvYWRlcklkKGZyYW1lLT5sb2Fk
ZXIoKS5kb2N1bWVudExvYWRlcigpKSkKICAgICAgICAgLnNldFVybChmcmFtZS0+ZG9jdW1lbnQo
KS0+dXJsKCkuc3RyaW5nKCkpCkBAIC05NTYsMTkgKzk3MCwxOSBAQCBSZWY8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6UGFnZTo6RnJhbWU+IEluc3BlY3RvclBhZ2VBZ2VudDo6YnVpbGRPYmplY3RGb3JG
cmFtZShGcgogICAgIHJldHVybiBmcmFtZU9iamVjdDsKIH0KIAotUmVmPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OlBhZ2U6OkZyYW1lUmVzb3VyY2VUcmVlPiBJbnNwZWN0b3JQYWdlQWdlbnQ6OmJ1aWxk
T2JqZWN0Rm9yRnJhbWVUcmVlKEZyYW1lKiBmcmFtZSkKK1JlZjxQcm90b2NvbDo6UGFnZTo6RnJh
bWVSZXNvdXJjZVRyZWU+IEluc3BlY3RvclBhZ2VBZ2VudDo6YnVpbGRPYmplY3RGb3JGcmFtZVRy
ZWUoRnJhbWUqIGZyYW1lKQogewogICAgIEFTU0VSVF9BUkcoZnJhbWUsIGZyYW1lKTsKIAotICAg
IFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpGcmFtZT4gZnJhbWVPYmplY3QgPSBidWls
ZE9iamVjdEZvckZyYW1lKGZyYW1lKTsKLSAgICBhdXRvIHN1YnJlc291cmNlcyA9IEpTT046OkFy
cmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6RnJhbWVSZXNvdXJjZT46OmNyZWF0ZSgp
OwotICAgIGF1dG8gcmVzdWx0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6RnJhbWVSZXNv
dXJjZVRyZWU6OmNyZWF0ZSgpCisgICAgUmVmPFByb3RvY29sOjpQYWdlOjpGcmFtZT4gZnJhbWVP
YmplY3QgPSBidWlsZE9iamVjdEZvckZyYW1lKGZyYW1lKTsKKyAgICBhdXRvIHN1YnJlc291cmNl
cyA9IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlBhZ2U6OkZyYW1lUmVzb3VyY2U+OjpjcmVhdGUo
KTsKKyAgICBhdXRvIHJlc3VsdCA9IFByb3RvY29sOjpQYWdlOjpGcmFtZVJlc291cmNlVHJlZTo6
Y3JlYXRlKCkKICAgICAgICAgLnNldEZyYW1lKFdURk1vdmUoZnJhbWVPYmplY3QpKQogICAgICAg
ICAuc2V0UmVzb3VyY2VzKHN1YnJlc291cmNlcy5jb3B5UmVmKCkpCiAgICAgICAgIC5yZWxlYXNl
KCk7CiAKICAgICBmb3IgKGF1dG8qIGNhY2hlZFJlc291cmNlIDogY2FjaGVkUmVzb3VyY2VzRm9y
RnJhbWUoZnJhbWUpKSB7Ci0gICAgICAgIGF1dG8gcmVzb3VyY2VPYmplY3QgPSBJbnNwZWN0b3I6
OlByb3RvY29sOjpQYWdlOjpGcmFtZVJlc291cmNlOjpjcmVhdGUoKQorICAgICAgICBhdXRvIHJl
c291cmNlT2JqZWN0ID0gUHJvdG9jb2w6OlBhZ2U6OkZyYW1lUmVzb3VyY2U6OmNyZWF0ZSgpCiAg
ICAgICAgICAgICAuc2V0VXJsKGNhY2hlZFJlc291cmNlLT51cmwoKS5zdHJpbmcoKSkKICAgICAg
ICAgICAgIC5zZXRUeXBlKGNhY2hlZFJlc291cmNlVHlwZUpTT04oKmNhY2hlZFJlc291cmNlKSkK
ICAgICAgICAgICAgIC5zZXRNaW1lVHlwZShjYWNoZWRSZXNvdXJjZS0+cmVzcG9uc2UoKS5taW1l
VHlwZSgpKQpAQCAtOTg2LDIxICsxMDAwLDIxIEBAIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpQ
YWdlOjpGcmFtZVJlc291cmNlVHJlZT4gSW5zcGVjdG9yUGFnZUFnZW50OjpidWlsZE9iamVjCiAg
ICAgICAgIHN1YnJlc291cmNlcy0+YWRkSXRlbShXVEZNb3ZlKHJlc291cmNlT2JqZWN0KSk7CiAg
ICAgfQogCi0gICAgUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFn
ZTo6RnJhbWVSZXNvdXJjZVRyZWU+PiBjaGlsZHJlbkFycmF5OworICAgIFJlZlB0cjxKU09OOjpB
cnJheU9mPFByb3RvY29sOjpQYWdlOjpGcmFtZVJlc291cmNlVHJlZT4+IGNoaWxkcmVuQXJyYXk7
CiAgICAgZm9yIChGcmFtZSogY2hpbGQgPSBmcmFtZS0+dHJlZSgpLmZpcnN0Q2hpbGQoKTsgY2hp
bGQ7IGNoaWxkID0gY2hpbGQtPnRyZWUoKS5uZXh0U2libGluZygpKSB7CiAgICAgICAgIGlmICgh
Y2hpbGRyZW5BcnJheSkgewotICAgICAgICAgICAgY2hpbGRyZW5BcnJheSA9IEpTT046OkFycmF5
T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6RnJhbWVSZXNvdXJjZVRyZWU+OjpjcmVhdGUo
KTsKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0Q2hpbGRGcmFtZXMoY2hpbGRyZW5BcnJheSk7Cisg
ICAgICAgICAgICBjaGlsZHJlbkFycmF5ID0gSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UGFnZTo6
RnJhbWVSZXNvdXJjZVRyZWU+OjpjcmVhdGUoKTsKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0Q2hp
bGRGcmFtZXMoKmNoaWxkcmVuQXJyYXkpOwogICAgICAgICB9CiAgICAgICAgIGNoaWxkcmVuQXJy
YXktPmFkZEl0ZW0oYnVpbGRPYmplY3RGb3JGcmFtZVRyZWUoY2hpbGQpKTsKICAgICB9CiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OnNldEVtdWxhdGVk
TWVkaWEoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIG1lZGlhKQorUHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yUGFnZUFnZW50OjpzZXRFbXVsYXRlZE1lZGlhKGNvbnN0
IFN0cmluZyYgbWVkaWEpCiB7CiAgICAgaWYgKG1lZGlhID09IG1fZW11bGF0ZWRNZWRpYSkKLSAg
ICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4geyB9OwogCiAgICAgbV9lbXVsYXRlZE1lZGlh
ID0gbWVkaWE7CiAKQEAgLTEwMDksMjEgKzEwMjMsMzQgQEAgdm9pZCBJbnNwZWN0b3JQYWdlQWdl
bnQ6OnNldEVtdWxhdGVkTWVkaWEoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIG1lZGlhKQog
CiAgICAgYXV0byBkb2N1bWVudCA9IG1ha2VSZWZQdHIobV9pbnNwZWN0ZWRQYWdlLm1haW5GcmFt
ZSgpLmRvY3VtZW50KCkpOwogICAgIGlmICghZG9jdW1lbnQpCi0gICAgICAgIHJldHVybjsKKyAg
ICAgICAgcmV0dXJuIHsgfTsKIAogICAgIGRvY3VtZW50LT51cGRhdGVMYXlvdXQoKTsKICAgICBk
b2N1bWVudC0+ZXZhbHVhdGVNZWRpYVF1ZXJpZXNBbmRSZXBvcnRDaGFuZ2VzKCk7CisKKyAgICBy
ZXR1cm4geyB9OwogfQogCiAjaWYgRU5BQkxFKERBUktfTU9ERV9DU1MpIHx8IEhBVkUoT1NfREFS
S19NT0RFX1NVUFBPUlQpCi12b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6c2V0Rm9yY2VkQXBwZWFy
YW5jZShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgYXBwZWFyYW5jZSkKK1Byb3RvY29sOjpF
cnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvclBhZ2VBZ2VudDo6c2V0Rm9yY2VkQXBwZWFyYW5j
ZShPcHRpb25hbDxQcm90b2NvbDo6UGFnZTo6QXBwZWFyYW5jZT4mJiBhcHBlYXJhbmNlKQogewot
ICAgIGlmIChhcHBlYXJhbmNlID09ICJMaWdodCJfcykKLSAgICAgICAgbV9pbnNwZWN0ZWRQYWdl
LnNldFVzZURhcmtBcHBlYXJhbmNlT3ZlcnJpZGUoZmFsc2UpOwotICAgIGVsc2UgaWYgKGFwcGVh
cmFuY2UgPT0gIkRhcmsiX3MpCi0gICAgICAgIG1faW5zcGVjdGVkUGFnZS5zZXRVc2VEYXJrQXBw
ZWFyYW5jZU92ZXJyaWRlKHRydWUpOwotICAgIGVsc2UKKyAgICBpZiAoIWFwcGVhcmFuY2UpIHsK
ICAgICAgICAgbV9pbnNwZWN0ZWRQYWdlLnNldFVzZURhcmtBcHBlYXJhbmNlT3ZlcnJpZGUoV1RG
OjpudWxsb3B0KTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBzd2l0Y2ggKCph
cHBlYXJhbmNlKSB7CisgICAgY2FzZSBQcm90b2NvbDo6UGFnZTo6QXBwZWFyYW5jZTo6TGlnaHQ6
CisgICAgICAgIG1faW5zcGVjdGVkUGFnZS5zZXRVc2VEYXJrQXBwZWFyYW5jZU92ZXJyaWRlKGZh
bHNlKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIGNhc2UgUHJvdG9jb2w6OlBhZ2U6OkFw
cGVhcmFuY2U6OkRhcms6CisgICAgICAgIG1faW5zcGVjdGVkUGFnZS5zZXRVc2VEYXJrQXBwZWFy
YW5jZU92ZXJyaWRlKHRydWUpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiB7IH07CiB9CiAjZW5kaWYKIApAQCAtMTAz
OSw1MSArMTA2Niw0NyBAQCB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6YXBwbHlFbXVsYXRlZE1l
ZGlhKFN0cmluZyYgbWVkaWEpCiAgICAgICAgIG1lZGlhID0gbV9lbXVsYXRlZE1lZGlhOwogfQog
Ci12b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6c25hcHNob3ROb2RlKEVycm9yU3RyaW5nJiBlcnJv
clN0cmluZywgaW50IG5vZGVJZCwgU3RyaW5nKiBvdXREYXRhVVJMKQorUHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8U3RyaW5nPiBJbnNwZWN0b3JQYWdlQWdlbnQ6OnNuYXBzaG90Tm9kZShQcm90b2Nv
bDo6RE9NOjpOb2RlSWQgbm9kZUlkKQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJv
clN0cmluZzsKKwogICAgIEluc3BlY3RvckRPTUFnZW50KiBkb21BZ2VudCA9IG1faW5zdHJ1bWVu
dGluZ0FnZW50cy5wZXJzaXN0ZW50RE9NQWdlbnQoKTsKICAgICBBU1NFUlQoZG9tQWdlbnQpOwog
ICAgIE5vZGUqIG5vZGUgPSBkb21BZ2VudC0+YXNzZXJ0Tm9kZShlcnJvclN0cmluZywgbm9kZUlk
KTsKICAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZl
cj4gc25hcHNob3QgPSBXZWJDb3JlOjpzbmFwc2hvdE5vZGUobV9pbnNwZWN0ZWRQYWdlLm1haW5G
cmFtZSgpLCAqbm9kZSk7Ci0gICAgaWYgKCFzbmFwc2hvdCkgewotICAgICAgICBlcnJvclN0cmlu
ZyA9ICJDb3VsZCBub3QgY2FwdHVyZSBzbmFwc2hvdCJfczsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KKyAgICBpZiAoIXNuYXBzaG90KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkNv
dWxkIG5vdCBjYXB0dXJlIHNuYXBzaG90Il9zKTsKIAotICAgICpvdXREYXRhVVJMID0gc25hcHNo
b3QtPnRvRGF0YVVSTCgiaW1hZ2UvcG5nIl9zLCBXVEY6Om51bGxvcHQsIFByZXNlcnZlUmVzb2x1
dGlvbjo6WWVzKTsKKyAgICByZXR1cm4gc25hcHNob3QtPnRvRGF0YVVSTCgiaW1hZ2UvcG5nIl9z
LCBXVEY6Om51bGxvcHQsIFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKTsKIH0KIAotdm9pZCBJbnNw
ZWN0b3JQYWdlQWdlbnQ6OnNuYXBzaG90UmVjdChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGlu
dCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBjb25zdCBTdHJpbmcmIGNvb3JkaW5h
dGVTeXN0ZW0sIFN0cmluZyogb3V0RGF0YVVSTCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPFN0
cmluZz4gSW5zcGVjdG9yUGFnZUFnZW50OjpzbmFwc2hvdFJlY3QoaW50IHgsIGludCB5LCBpbnQg
d2lkdGgsIGludCBoZWlnaHQsIFByb3RvY29sOjpQYWdlOjpDb29yZGluYXRlU3lzdGVtIGNvb3Jk
aW5hdGVTeXN0ZW0pCiB7CiAgICAgU25hcHNob3RPcHRpb25zIG9wdGlvbnMgPSBTbmFwc2hvdE9w
dGlvbnNOb25lOwotICAgIGlmIChjb29yZGluYXRlU3lzdGVtID09ICJWaWV3cG9ydCIpCisgICAg
aWYgKGNvb3JkaW5hdGVTeXN0ZW0gPT0gUHJvdG9jb2w6OlBhZ2U6OkNvb3JkaW5hdGVTeXN0ZW06
OlZpZXdwb3J0KQogICAgICAgICBvcHRpb25zIHw9IFNuYXBzaG90T3B0aW9uc0luVmlld0Nvb3Jk
aW5hdGVzOwogCiAgICAgSW50UmVjdCByZWN0YW5nbGUoeCwgeSwgd2lkdGgsIGhlaWdodCk7CiAg
ICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiBzbmFwc2hvdCA9IHNuYXBzaG90RnJhbWVS
ZWN0KG1faW5zcGVjdGVkUGFnZS5tYWluRnJhbWUoKSwgcmVjdGFuZ2xlLCBvcHRpb25zKTsKIAot
ICAgIGlmICghc25hcHNob3QpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiQ291bGQgbm90IGNh
cHR1cmUgc25hcHNob3QiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKCFzbmFw
c2hvdCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJDb3VsZCBub3QgY2FwdHVyZSBz
bmFwc2hvdCJfcyk7CiAKLSAgICAqb3V0RGF0YVVSTCA9IHNuYXBzaG90LT50b0RhdGFVUkwoImlt
YWdlL3BuZyJfcywgV1RGOjpudWxsb3B0LCBQcmVzZXJ2ZVJlc29sdXRpb246Olllcyk7CisgICAg
cmV0dXJuIHNuYXBzaG90LT50b0RhdGFVUkwoImltYWdlL3BuZyJfcywgV1RGOjpudWxsb3B0LCBQ
cmVzZXJ2ZVJlc29sdXRpb246Olllcyk7CiB9CiAKICNpZiBFTkFCTEUoV0VCX0FSQ0hJVkUpICYm
IFVTRShDRikKLXZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjphcmNoaXZlKEVycm9yU3RyaW5nJiBl
cnJvclN0cmluZywgU3RyaW5nKiBkYXRhKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8U3RyaW5n
PiBJbnNwZWN0b3JQYWdlQWdlbnQ6OmFyY2hpdmUoKQogewogICAgIGF1dG8gYXJjaGl2ZSA9IExl
Z2FjeVdlYkFyY2hpdmU6OmNyZWF0ZShtX2luc3BlY3RlZFBhZ2UubWFpbkZyYW1lKCkpOwotICAg
IGlmICghYXJjaGl2ZSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJDb3VsZCBub3QgY3JlYXRl
IHdlYiBhcmNoaXZlIGZvciBtYWluIGZyYW1lIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQor
ICAgIGlmICghYXJjaGl2ZSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJDb3VsZCBu
b3QgY3JlYXRlIHdlYiBhcmNoaXZlIGZvciBtYWluIGZyYW1lIl9zKTsKIAogICAgIFJldGFpblB0
cjxDRkRhdGFSZWY+IGJ1ZmZlciA9IGFyY2hpdmUtPnJhd0RhdGFSZXByZXNlbnRhdGlvbigpOwot
ICAgICpkYXRhID0gYmFzZTY0RW5jb2RlKENGRGF0YUdldEJ5dGVQdHIoYnVmZmVyLmdldCgpKSwg
Q0ZEYXRhR2V0TGVuZ3RoKGJ1ZmZlci5nZXQoKSkpOworICAgIHJldHVybiBiYXNlNjRFbmNvZGUo
Q0ZEYXRhR2V0Qnl0ZVB0cihidWZmZXIuZ2V0KCkpLCBDRkRhdGFHZXRMZW5ndGgoYnVmZmVyLmdl
dCgpKSk7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2FnZW50cy9JbnNwZWN0b3JQYWdlQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9h
Z2VudHMvSW5zcGVjdG9yUGFnZUFnZW50LmgKaW5kZXggM2JjZDA0ODdjZmM4NzY2YmFhMDFjNzgw
NDE3M2ExNTc0N2I0N2IyZC4uZDJiMDY1ZTEzNjUxZmFmZTc0NzMyNWYwMmU3NzAxZmJmMWU4ZTQ1
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JQ
YWdlQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rv
clBhZ2VBZ2VudC5oCkBAIC01MSwxNCArNTEsMTIgQEAgY2xhc3MgUGFnZTsKIGNsYXNzIFJlbmRl
ck9iamVjdDsKIGNsYXNzIFNoYXJlZEJ1ZmZlcjsKIAotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJp
bmc7Ci0KIGNsYXNzIEluc3BlY3RvclBhZ2VBZ2VudCBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3JB
Z2VudEJhc2UsIHB1YmxpYyBJbnNwZWN0b3I6OlBhZ2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIg
ewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEluc3BlY3RvclBhZ2VBZ2VudCk7CiAgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgSW5zcGVjdG9yUGFnZUFnZW50KFBh
Z2VBZ2VudENvbnRleHQmLCBJbnNwZWN0b3JDbGllbnQqLCBJbnNwZWN0b3JPdmVybGF5Kik7Ci0g
ICAgfkluc3BlY3RvclBhZ2VBZ2VudCgpIG92ZXJyaWRlOworICAgIH5JbnNwZWN0b3JQYWdlQWdl
bnQoKTsKIAogICAgIGVudW0gUmVzb3VyY2VUeXBlIHsKICAgICAgICAgRG9jdW1lbnRSZXNvdXJj
ZSwKQEAgLTc5LDcgKzc3LDcgQEAgcHVibGljOgogCiAgICAgc3RhdGljIGJvb2wgc2hhcmVkQnVm
ZmVyQ29udGVudChSZWZQdHI8U2hhcmVkQnVmZmVyPiYmLCBjb25zdCBTdHJpbmcmIHRleHRFbmNv
ZGluZ05hbWUsIGJvb2wgd2l0aEJhc2U2NEVuY29kZSwgU3RyaW5nKiByZXN1bHQpOwogICAgIHN0
YXRpYyBWZWN0b3I8Q2FjaGVkUmVzb3VyY2UqPiBjYWNoZWRSZXNvdXJjZXNGb3JGcmFtZShGcmFt
ZSopOwotICAgIHN0YXRpYyB2b2lkIHJlc291cmNlQ29udGVudChFcnJvclN0cmluZyYsIEZyYW1l
KiwgY29uc3QgVVJMJiwgU3RyaW5nKiByZXN1bHQsIGJvb2wqIGJhc2U2NEVuY29kZWQpOworICAg
IHN0YXRpYyB2b2lkIHJlc291cmNlQ29udGVudChJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0
cmluZyYsIEZyYW1lKiwgY29uc3QgVVJMJiwgU3RyaW5nKiByZXN1bHQsIGJvb2wqIGJhc2U2NEVu
Y29kZWQpOwogICAgIHN0YXRpYyBTdHJpbmcgc291cmNlTWFwVVJMRm9yUmVzb3VyY2UoQ2FjaGVk
UmVzb3VyY2UqKTsKICAgICBzdGF0aWMgQ2FjaGVkUmVzb3VyY2UqIGNhY2hlZFJlc291cmNlKEZy
YW1lKiwgY29uc3QgVVJMJik7CiAgICAgc3RhdGljIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6
OlJlc291cmNlVHlwZSByZXNvdXJjZVR5cGVKU09OKFJlc291cmNlVHlwZSk7CkBAIC04NywzOSAr
ODUsMzkgQEAgcHVibGljOgogICAgIHN0YXRpYyBSZXNvdXJjZVR5cGUgaW5zcGVjdG9yUmVzb3Vy
Y2VUeXBlKGNvbnN0IENhY2hlZFJlc291cmNlJik7CiAgICAgc3RhdGljIEluc3BlY3Rvcjo6UHJv
dG9jb2w6OlBhZ2U6OlJlc291cmNlVHlwZSBjYWNoZWRSZXNvdXJjZVR5cGVKU09OKGNvbnN0IENh
Y2hlZFJlc291cmNlJik7CiAgICAgc3RhdGljIEZyYW1lKiBmaW5kRnJhbWVXaXRoU2VjdXJpdHlP
cmlnaW4oUGFnZSYsIGNvbnN0IFN0cmluZyYgb3JpZ2luUmF3U3RyaW5nKTsKLSAgICBzdGF0aWMg
RG9jdW1lbnRMb2FkZXIqIGFzc2VydERvY3VtZW50TG9hZGVyKEVycm9yU3RyaW5nJiwgRnJhbWUq
KTsKKyAgICBzdGF0aWMgRG9jdW1lbnRMb2FkZXIqIGFzc2VydERvY3VtZW50TG9hZGVyKEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nJiwgRnJhbWUqKTsKIAogICAgIC8vIEluc3BlY3Rv
ckFnZW50QmFzZQotICAgIHZvaWQgZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rv
cjo6RnJvbnRlbmRSb3V0ZXIqLCBJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyKikgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCB3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkRp
c2Nvbm5lY3RSZWFzb24pIG92ZXJyaWRlOworICAgIHZvaWQgZGlkQ3JlYXRlRnJvbnRlbmRBbmRC
YWNrZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRSb3V0ZXIqLCBJbnNwZWN0b3I6OkJhY2tlbmREaXNw
YXRjaGVyKik7CisgICAgdm9pZCB3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0
b3I6OkRpc2Nvbm5lY3RSZWFzb24pOwogCiAgICAgLy8gUGFnZUJhY2tlbmREaXNwYXRjaGVySGFu
ZGxlcgotICAgIHZvaWQgZW5hYmxlKEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBk
aXNhYmxlKEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZWxvYWQoRXJyb3JTdHJp
bmcmLCBjb25zdCBib29sKiBvcHRpb25hbFJlbG9hZEZyb21PcmlnaW4sIGNvbnN0IGJvb2wqIG9w
dGlvbmFsUmV2YWxpZGF0ZUFsbFJlc291cmNlcykgb3ZlcnJpZGU7Ci0gICAgdm9pZCBuYXZpZ2F0
ZShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgdXJsKSBvdmVycmlkZTsKLSAgICB2b2lkIG92
ZXJyaWRlVXNlckFnZW50KEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nKiB2YWx1ZSkgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCBvdmVycmlkZVNldHRpbmcoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcm
IHNldHRpbmcsIGNvbnN0IGJvb2wqIHZhbHVlKSBvdmVycmlkZTsKLSAgICB2b2lkIGdldENvb2tp
ZXMoRXJyb3JTdHJpbmcmLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29s
OjpQYWdlOjpDb29raWU+PiYgY29va2llcykgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRDb29raWUo
RXJyb3JTdHJpbmcmLCBjb25zdCBKU09OOjpPYmplY3QmIGNvb2tpZU9iamVjdCkgb3ZlcnJpZGU7
Ci0gICAgdm9pZCBkZWxldGVDb29raWUoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGNvb2tp
ZU5hbWUsIGNvbnN0IFN0cmluZyYgdXJsKSBvdmVycmlkZTsKLSAgICB2b2lkIGdldFJlc291cmNl
VHJlZShFcnJvclN0cmluZyYsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpGcmFt
ZVJlc291cmNlVHJlZT4mKSBvdmVycmlkZTsKLSAgICB2b2lkIGdldFJlc291cmNlQ29udGVudChF
cnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgZnJhbWVJZCwgY29uc3QgU3RyaW5nJiB1cmwsIFN0
cmluZyogY29udGVudCwgYm9vbCogYmFzZTY0RW5jb2RlZCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBz
ZXRCb290c3RyYXBTY3JpcHQoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsU291
cmNlKSBmaW5hbDsKLSAgICB2b2lkIHNlYXJjaEluUmVzb3VyY2UoRXJyb3JTdHJpbmcmLCBjb25z
dCBTdHJpbmcmIGZyYW1lSWQsIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIHF1ZXJ5
LCBjb25zdCBib29sKiBvcHRpb25hbENhc2VTZW5zaXRpdmUsIGNvbnN0IGJvb2wqIG9wdGlvbmFs
SXNSZWdleCwgY29uc3QgU3RyaW5nKiBvcHRpb25hbFJlcXVlc3RJZCwgUmVmUHRyPEpTT046OkFy
cmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6R2VuZXJpY1R5cGVzOjpTZWFyY2hNYXRjaD4+Jikg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBzZWFyY2hJblJlc291cmNlcyhFcnJvclN0cmluZyYsIGNvbnN0
IFN0cmluZyYsIGNvbnN0IGJvb2wqIGNhc2VTZW5zaXRpdmUsIGNvbnN0IGJvb2wqIGlzUmVnZXgs
IFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OlNlYXJjaFJl
c3VsdD4+Jikgb3ZlcnJpZGU7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdP
cjx2b2lkPiBlbmFibGUoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09y
PHZvaWQ+IGRpc2FibGUoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09y
PHZvaWQ+IHJlbG9hZChPcHRpb25hbDxib29sPiYmIGlnbm9yZUNhY2hlLCBPcHRpb25hbDxib29s
PiYmIHJldmFsaWRhdGVBbGxSZXNvdXJjZXMpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8dm9pZD4gbmF2aWdhdGUoY29uc3QgU3RyaW5nJiB1cmwpOworICAgIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gb3ZlcnJpZGVVc2VyQWdlbnQoY29u
c3QgU3RyaW5nJik7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lk
PiBvdmVycmlkZVNldHRpbmcoSW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6U2V0dGluZywgT3B0
aW9uYWw8Ym9vbD4mJiB2YWx1ZSk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJp
bmdPcjxSZWY8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpDb29raWU+
Pj4gZ2V0Q29va2llcygpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8
dm9pZD4gc2V0Q29va2llKFJlZjxKU09OOjpPYmplY3Q+JiYpOworICAgIEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZGVsZXRlQ29va2llKGNvbnN0IFN0cmluZyYgY29v
a2llTmFtZSwgY29uc3QgU3RyaW5nJiB1cmwpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8UmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkZyYW1lUmVzb3VyY2VU
cmVlPj4gZ2V0UmVzb3VyY2VUcmVlKCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JT
dHJpbmdPcjxzdGQ6OnR1cGxlPFN0cmluZywgYm9vbCAvKiBiYXNlNjRFbmNvZGVkICovPj4gZ2V0
UmVzb3VyY2VDb250ZW50KGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OkZyYW1l
SWQmLCBjb25zdCBTdHJpbmcmIHVybCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JT
dHJpbmdPcjx2b2lkPiBzZXRCb290c3RyYXBTY3JpcHQoY29uc3QgU3RyaW5nJiBzb3VyY2UpOwor
ICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEpTT046OkFycmF5T2Y8
SW5zcGVjdG9yOjpQcm90b2NvbDo6R2VuZXJpY1R5cGVzOjpTZWFyY2hNYXRjaD4+PiBzZWFyY2hJ
blJlc291cmNlKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OkZyYW1lSWQmLCBj
b25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBxdWVyeSwgT3B0aW9uYWw8Ym9vbD4mJiBj
YXNlU2Vuc2l0aXZlLCBPcHRpb25hbDxib29sPiYmIGlzUmVnZXgsIGNvbnN0IEluc3BlY3Rvcjo6
UHJvdG9jb2w6Ok5ldHdvcms6OlJlcXVlc3RJZCYpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8UmVmPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFn
ZTo6U2VhcmNoUmVzdWx0Pj4+IHNlYXJjaEluUmVzb3VyY2VzKGNvbnN0IFN0cmluZyYsIE9wdGlv
bmFsPGJvb2w+JiYgY2FzZVNlbnNpdGl2ZSwgT3B0aW9uYWw8Ym9vbD4mJiBpc1JlZ2V4KTsKICNp
ZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICB2b2lkIHNldFNob3dSdWxlcnMoRXJyb3JTdHJp
bmcmLCBib29sKSBvdmVycmlkZTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmlu
Z09yPHZvaWQ+IHNldFNob3dSdWxlcnMoYm9vbCk7CiAjZW5kaWYKLSAgICB2b2lkIHNldFNob3dQ
YWludFJlY3RzKEVycm9yU3RyaW5nJiwgYm9vbCBzaG93KSBvdmVycmlkZTsKLSAgICB2b2lkIHNl
dEVtdWxhdGVkTWVkaWEoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmKSBvdmVycmlkZTsKKyAg
ICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHNldFNob3dQYWludFJl
Y3RzKGJvb2wpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4g
c2V0RW11bGF0ZWRNZWRpYShjb25zdCBTdHJpbmcmKTsKICNpZiBFTkFCTEUoREFSS19NT0RFX0NT
UykgfHwgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKLSAgICB2b2lkIHNldEZvcmNlZEFwcGVh
cmFuY2UoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmKSBvdmVycmlkZTsKKyAgICBJbnNwZWN0
b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHNldEZvcmNlZEFwcGVhcmFuY2UoT3B0
aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6QXBwZWFyYW5jZT4mJik7CiAjZW5kaWYK
LSAgICB2b2lkIHNuYXBzaG90Tm9kZShFcnJvclN0cmluZyYsIGludCBub2RlSWQsIFN0cmluZyog
b3V0RGF0YVVSTCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzbmFwc2hvdFJlY3QoRXJyb3JTdHJpbmcm
LCBpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCwgY29uc3QgU3RyaW5nJiBjb29y
ZGluYXRlU3lzdGVtLCBTdHJpbmcqIG91dERhdGFVUkwpIG92ZXJyaWRlOworICAgIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8U3RyaW5nPiBzbmFwc2hvdE5vZGUoSW5zcGVjdG9y
OjpQcm90b2NvbDo6RE9NOjpOb2RlSWQpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8U3RyaW5nPiBzbmFwc2hvdFJlY3QoaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGlu
dCBoZWlnaHQsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkNvb3JkaW5hdGVTeXN0ZW0pOwog
I2lmIEVOQUJMRShXRUJfQVJDSElWRSkgJiYgVVNFKENGKQotICAgIHZvaWQgYXJjaGl2ZShFcnJv
clN0cmluZyYsIFN0cmluZyogZGF0YSkgb3ZlcnJpZGU7CisgICAgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6RXJyb3JTdHJpbmdPcjxTdHJpbmc+IGFyY2hpdmUoKTsKICNlbmRpZgogCiAgICAgLy8gSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uCkBAIC0xNDMsMTAgKzE0MSwxMCBAQCBwdWJsaWM6CiAgICAg
dm9pZCBkaWRTY3JvbGwoKTsKICAgICB2b2lkIGRpZFJlY2FsY3VsYXRlU3R5bGUoKTsKIAotICAg
IEZyYW1lKiBmcmFtZUZvcklkKGNvbnN0IFN0cmluZyYgZnJhbWVJZCk7CisgICAgRnJhbWUqIGZy
YW1lRm9ySWQoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6RnJhbWVJZCYpOwog
ICAgIFdFQkNPUkVfRVhQT1JUIFN0cmluZyBmcmFtZUlkKEZyYW1lKik7CiAgICAgU3RyaW5nIGxv
YWRlcklkKERvY3VtZW50TG9hZGVyKik7Ci0gICAgRnJhbWUqIGFzc2VydEZyYW1lKEVycm9yU3Ry
aW5nJiwgY29uc3QgU3RyaW5nJiBmcmFtZUlkKTsKKyAgICBGcmFtZSogYXNzZXJ0RnJhbWUoSW5z
cGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29s
OjpOZXR3b3JrOjpGcmFtZUlkJik7CiAKIHByaXZhdGU6CiAgICAgZG91YmxlIHRpbWVzdGFtcCgp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JU
aW1lbGluZUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVj
dG9yVGltZWxpbmVBZ2VudC5jcHAKaW5kZXggMGI0NjYwNjhkOTBmZTE0OTVhODQyOWI3NjM5ZjMx
MzViZDQzM2Y0OC4uMGRmOTUwNTcwM2QwYjM4MTgxMTI1ZTUzMDFlMjA0MTEyN2ZjM2I1NSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JUaW1lbGlu
ZUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rv
clRpbWVsaW5lQWdlbnQuY3BwCkBAIC0xMDIsODAgKzEwMiw4MiBAQCB2b2lkIEluc3BlY3RvclRp
bWVsaW5lQWdlbnQ6OmRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250
ZW5kUm91dAogCiB2b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OndpbGxEZXN0cm95RnJvbnRl
bmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlzY29ubmVjdFJlYXNvbikKIHsKLSAgICBFcnJvclN0
cmluZyBpZ25vcmVkOwotICAgIGRpc2FibGUoaWdub3JlZCk7CisgICAgZGlzYWJsZSgpOwogfQog
Ci12b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OmVuYWJsZShFcnJvclN0cmluZyYgZXJyb3JT
dHJpbmcpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JUaW1lbGluZUFn
ZW50OjplbmFibGUoKQogewotICAgIGlmIChtX2luc3RydW1lbnRpbmdBZ2VudHMuZW5hYmxlZFRp
bWVsaW5lQWdlbnQoKSA9PSB0aGlzKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIlRpbWVsaW5l
IGRvbWFpbiBhbHJlYWR5IGVuYWJsZWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAg
aWYgKG1faW5zdHJ1bWVudGluZ0FnZW50cy5lbmFibGVkVGltZWxpbmVBZ2VudCgpID09IHRoaXMp
CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiVGltZWxpbmUgZG9tYWluIGFscmVhZHkg
ZW5hYmxlZCJfcyk7CiAKICAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMuc2V0RW5hYmxlZFRpbWVs
aW5lQWdlbnQodGhpcyk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvclRp
bWVsaW5lQWdlbnQ6OmRpc2FibGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nKQorUHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6ZGlzYWJsZSgpCiB7
Ci0gICAgaWYgKG1faW5zdHJ1bWVudGluZ0FnZW50cy5lbmFibGVkVGltZWxpbmVBZ2VudCgpICE9
IHRoaXMpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiVGltZWxpbmUgZG9tYWluIGFscmVhZHkg
ZGlzYWJsZWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKG1faW5zdHJ1bWVu
dGluZ0FnZW50cy5lbmFibGVkVGltZWxpbmVBZ2VudCgpICE9IHRoaXMpCisgICAgICAgIHJldHVy
biBtYWtlVW5leHBlY3RlZCgiVGltZWxpbmUgZG9tYWluIGFscmVhZHkgZGlzYWJsZWQiX3MpOwog
CiAgICAgbV9pbnN0cnVtZW50aW5nQWdlbnRzLnNldEVuYWJsZWRUaW1lbGluZUFnZW50KG51bGxw
dHIpOwogCi0gICAgRXJyb3JTdHJpbmcgaWdub3JlZDsKLSAgICBzdG9wKGlnbm9yZWQpOworICAg
IHN0b3AoKTsKIAogICAgIG1fYXV0b0NhcHR1cmVFbmFibGVkID0gZmFsc2U7CiAgICAgbV9pbnN0
cnVtZW50cy5jbGVhcigpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JU
aW1lbGluZUFnZW50OjpzdGFydChFcnJvclN0cmluZyYsIGNvbnN0IGludCogbWF4Q2FsbFN0YWNr
RGVwdGgpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JUaW1lbGluZUFn
ZW50OjpzdGFydChPcHRpb25hbDxpbnQ+JiYgbWF4Q2FsbFN0YWNrRGVwdGgpCiB7CiAgICAgbV90
cmFja2luZ0Zyb21Gcm9udGVuZCA9IHRydWU7CiAKLSAgICBpbnRlcm5hbFN0YXJ0KG1heENhbGxT
dGFja0RlcHRoKTsKKyAgICBpbnRlcm5hbFN0YXJ0KFdURk1vdmUobWF4Q2FsbFN0YWNrRGVwdGgp
KTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6
c3RvcChFcnJvclN0cmluZyYpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0
b3JUaW1lbGluZUFnZW50OjpzdG9wKCkKIHsKICAgICBpbnRlcm5hbFN0b3AoKTsKIAogICAgIG1f
dHJhY2tpbmdGcm9tRnJvbnRlbmQgPSBmYWxzZTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZv
aWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6c2V0QXV0b0NhcHR1cmVFbmFibGVkKEVycm9yU3Ry
aW5nJiwgYm9vbCBlbmFibGVkKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVj
dG9yVGltZWxpbmVBZ2VudDo6c2V0QXV0b0NhcHR1cmVFbmFibGVkKGJvb2wgZW5hYmxlZCkKIHsK
ICAgICBtX2F1dG9DYXB0dXJlRW5hYmxlZCA9IGVuYWJsZWQ7CisKKyAgICByZXR1cm4geyB9Owog
fQogCi12b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OnNldEluc3RydW1lbnRzKEVycm9yU3Ry
aW5nJiBlcnJvclN0cmluZywgY29uc3QgSlNPTjo6QXJyYXkmIGluc3RydW1lbnRzKQorUHJvdG9j
b2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6c2V0SW5zdHJ1
bWVudHMoUmVmPEpTT046OkFycmF5PiYmIGluc3RydW1lbnRzKQogewogICAgIFZlY3RvcjxQcm90
b2NvbDo6VGltZWxpbmU6Okluc3RydW1lbnQ+IG5ld0luc3RydW1lbnRzOwotICAgIG5ld0luc3Ry
dW1lbnRzLnJlc2VydmVDYXBhY2l0eShpbnN0cnVtZW50cy5sZW5ndGgoKSk7CisgICAgbmV3SW5z
dHJ1bWVudHMucmVzZXJ2ZUNhcGFjaXR5KGluc3RydW1lbnRzLT5sZW5ndGgoKSk7CiAKLSAgICBm
b3IgKGNvbnN0IGF1dG8mIGluc3RydW1lbnRWYWx1ZSA6IGluc3RydW1lbnRzKSB7Ci0gICAgICAg
IFN0cmluZyBlbnVtVmFsdWVTdHJpbmc7Ci0gICAgICAgIGlmICghaW5zdHJ1bWVudFZhbHVlLT5h
c1N0cmluZyhlbnVtVmFsdWVTdHJpbmcpKSB7Ci0gICAgICAgICAgICBlcnJvclN0cmluZyA9ICJV
bmV4cGVjdGVkIG5vbi1zdHJpbmcgdmFsdWUgaW4gZ2l2ZW4gaW5zdHJ1bWVudHMiX3M7Ci0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KKyAgICBmb3IgKGNvbnN0IGF1dG8mIGluc3RydW1l
bnRWYWx1ZSA6IGluc3RydW1lbnRzLmdldCgpKSB7CisgICAgICAgIGF1dG8gaW5zdHJ1bWVudFN0
cmluZyA9IGluc3RydW1lbnRWYWx1ZS0+YXNTdHJpbmcoKTsKKyAgICAgICAgaWYgKCFpbnN0cnVt
ZW50U3RyaW5nKQorICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJVbmV4cGVjdGVk
IG5vbi1zdHJpbmcgdmFsdWUgaW4gZ2l2ZW4gaW5zdHJ1bWVudHMiX3MpOwogCi0gICAgICAgIE9w
dGlvbmFsPFByb3RvY29sOjpUaW1lbGluZTo6SW5zdHJ1bWVudD4gaW5zdHJ1bWVudFR5cGUgPSBQ
cm90b2NvbDo6SW5zcGVjdG9ySGVscGVyczo6cGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPFByb3Rv
Y29sOjpUaW1lbGluZTo6SW5zdHJ1bWVudD4oZW51bVZhbHVlU3RyaW5nKTsKLSAgICAgICAgaWYg
KCFpbnN0cnVtZW50VHlwZSkgewotICAgICAgICAgICAgZXJyb3JTdHJpbmcgPSBtYWtlU3RyaW5n
KCJVbmtub3duIGl0ZW0gaW4gZ2l2ZW4gaW5zdHJ1bWVudHM6ICIsIGVudW1WYWx1ZVN0cmluZyk7
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KKyAgICAgICAgYXV0byBpbnN0cnVtZW50
ID0gUHJvdG9jb2w6OkhlbHBlcnM6OnBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxQcm90b2NvbDo6
VGltZWxpbmU6Okluc3RydW1lbnQ+KGluc3RydW1lbnRTdHJpbmcpOworICAgICAgICBpZiAoIWlu
c3RydW1lbnQpCisgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQobWFrZVN0cmluZygi
VW5rbm93biBpbnN0cnVtZW50OiAiLCBpbnN0cnVtZW50U3RyaW5nKSk7CiAKLSAgICAgICAgbmV3
SW5zdHJ1bWVudHMudW5jaGVja2VkQXBwZW5kKCppbnN0cnVtZW50VHlwZSk7CisgICAgICAgIG5l
d0luc3RydW1lbnRzLnVuY2hlY2tlZEFwcGVuZCgqaW5zdHJ1bWVudCk7CiAgICAgfQogCiAgICAg
bV9pbnN0cnVtZW50cy5zd2FwKG5ld0luc3RydW1lbnRzKTsKKworICAgIHJldHVybiB7IH07CiB9
CiAKLXZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6aW50ZXJuYWxTdGFydChjb25zdCBpbnQq
IG1heENhbGxTdGFja0RlcHRoKQordm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjppbnRlcm5h
bFN0YXJ0KE9wdGlvbmFsPGludD4mJiBtYXhDYWxsU3RhY2tEZXB0aCkKIHsKICAgICBpZiAobV90
cmFja2luZykKICAgICAgICAgcmV0dXJuOwpAQCAtMjkyLDggKzI5NCw3IEBAIHZvaWQgSW5zcGVj
dG9yVGltZWxpbmVBZ2VudDo6c3RhcnRGcm9tQ29uc29sZShKU0M6OkpTR2xvYmFsT2JqZWN0KiBl
eGVjLCBjb25zdCBTCiAgICAgLy8gQWxsb3cgZHVwbGljYXRlIHVubmFtZWQgcHJvZmlsZXMuIERp
c2FsbG93IGR1cGxpY2F0ZSBuYW1lZCBwcm9maWxlcy4KICAgICBpZiAoIXRpdGxlLmlzRW1wdHko
KSkgewogICAgICAgICBmb3IgKGNvbnN0IFRpbWVsaW5lUmVjb3JkRW50cnkmIHJlY29yZCA6IG1f
cGVuZGluZ0NvbnNvbGVQcm9maWxlUmVjb3JkcykgewotICAgICAgICAgICAgU3RyaW5nIHJlY29y
ZFRpdGxlOwotICAgICAgICAgICAgcmVjb3JkLmRhdGEtPmdldFN0cmluZygidGl0bGUiX3MsIHJl
Y29yZFRpdGxlKTsKKyAgICAgICAgICAgIGF1dG8gcmVjb3JkVGl0bGUgPSByZWNvcmQuZGF0YS0+
Z2V0U3RyaW5nKCJ0aXRsZSJfcyk7CiAgICAgICAgICAgICBpZiAocmVjb3JkVGl0bGUgPT0gdGl0
bGUpIHsKICAgICAgICAgICAgICAgICBpZiAoYXV0byogY29uc29sZUFnZW50ID0gbV9pbnN0cnVt
ZW50aW5nQWdlbnRzLndlYkNvbnNvbGVBZ2VudCgpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8v
IEZJWE1FOiBTZW5kIGFuIGVudW0gdG8gdGhlIGZyb250ZW5kIGZvciBsb2NhbGl6YXRpb24/CkBA
IC0zMTgsOCArMzE5LDcgQEAgdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpzdG9wRnJvbUNv
bnNvbGUoSlNDOjpKU0dsb2JhbE9iamVjdCosIGNvbnN0IFN0cmluZyYKICAgICBmb3IgKGludCBp
ID0gbV9wZW5kaW5nQ29uc29sZVByb2ZpbGVSZWNvcmRzLnNpemUoKSAtIDE7IGkgPj0gMDsgLS1p
KSB7CiAgICAgICAgIGNvbnN0IFRpbWVsaW5lUmVjb3JkRW50cnkmIHJlY29yZCA9IG1fcGVuZGlu
Z0NvbnNvbGVQcm9maWxlUmVjb3Jkc1tpXTsKIAotICAgICAgICBTdHJpbmcgcmVjb3JkVGl0bGU7
Ci0gICAgICAgIHJlY29yZC5kYXRhLT5nZXRTdHJpbmcoInRpdGxlIl9zLCByZWNvcmRUaXRsZSk7
CisgICAgICAgIGF1dG8gcmVjb3JkVGl0bGUgPSByZWNvcmQuZGF0YS0+Z2V0U3RyaW5nKCJ0aXRs
ZSJfcyk7CiAgICAgICAgIGlmICh0aXRsZS5pc0VtcHR5KCkgfHwgcmVjb3JkVGl0bGUgPT0gdGl0
bGUpIHsKICAgICAgICAgICAgIGRpZENvbXBsZXRlUmVjb3JkRW50cnkocmVjb3JkKTsKICAgICAg
ICAgICAgIG1fcGVuZGluZ0NvbnNvbGVQcm9maWxlUmVjb3Jkcy5yZW1vdmUoaSk7CkBAIC00OTYs
MTAgKzQ5Niw4IEBAIHZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6bWFpbkZyYW1lU3RhcnRl
ZExvYWRpbmcoKQogICAgIG1fYXV0b0NhcHR1cmVQaGFzZSA9IEF1dG9DYXB0dXJlUGhhc2U6OkJl
Zm9yZUxvYWQ7CiAKICAgICAvLyBQcmUtZW1wdGl2ZWx5IGRpc2FibGUgYnJlYWtwb2ludHMuIFRo
ZSBmcm9udGVuZCBtdXN0IHJlLWVuYWJsZSB0aGVtLgotICAgIGlmIChhdXRvKiB3ZWJEZWJ1Z2dl
ckFnZW50ID0gbV9pbnN0cnVtZW50aW5nQWdlbnRzLmVuYWJsZWRXZWJEZWJ1Z2dlckFnZW50KCkp
IHsKLSAgICAgICAgRXJyb3JTdHJpbmcgaWdub3JlZDsKLSAgICAgICAgd2ViRGVidWdnZXJBZ2Vu
dC0+c2V0QnJlYWtwb2ludHNBY3RpdmUoaWdub3JlZCwgZmFsc2UpOwotICAgIH0KKyAgICBpZiAo
YXV0byogd2ViRGVidWdnZXJBZ2VudCA9IG1faW5zdHJ1bWVudGluZ0FnZW50cy5lbmFibGVkV2Vi
RGVidWdnZXJBZ2VudCgpKQorICAgICAgICB3ZWJEZWJ1Z2dlckFnZW50LT5zZXRCcmVha3BvaW50
c0FjdGl2ZShmYWxzZSk7CiAKICAgICAvLyBJbmZvcm0gdGhlIGZyb250ZW5kIHdlIHN0YXJ0ZWQg
YW4gYXV0byBjYXB0dXJlLiBUaGUgZnJvbnRlbmQgbXVzdCBzdG9wIGNhcHR1cmUuCiAgICAgbV9m
cm9udGVuZERpc3BhdGNoZXItPmF1dG9DYXB0dXJlU3RhcnRlZCgpOwpAQCAtNTIzLDEwICs1MjEs
OCBAQCB2b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OnN0YXJ0UHJvZ3JhbW1hdGljQ2FwdHVy
ZSgpCiAgICAgLy8gRGlzYWJsZSBicmVha3BvaW50cyBkdXJpbmcgcHJvZ3JhbW1hdGljIGNhcHR1
cmUuCiAgICAgaWYgKGF1dG8qIHdlYkRlYnVnZ2VyQWdlbnQgPSBtX2luc3RydW1lbnRpbmdBZ2Vu
dHMuZW5hYmxlZFdlYkRlYnVnZ2VyQWdlbnQoKSkgewogICAgICAgICBtX3Byb2dyYW1tYXRpY0Nh
cHR1cmVSZXN0b3JlQnJlYWtwb2ludEFjdGl2ZVZhbHVlID0gd2ViRGVidWdnZXJBZ2VudC0+YnJl
YWtwb2ludHNBY3RpdmUoKTsKLSAgICAgICAgaWYgKG1fcHJvZ3JhbW1hdGljQ2FwdHVyZVJlc3Rv
cmVCcmVha3BvaW50QWN0aXZlVmFsdWUpIHsKLSAgICAgICAgICAgIEVycm9yU3RyaW5nIGlnbm9y
ZWQ7Ci0gICAgICAgICAgICB3ZWJEZWJ1Z2dlckFnZW50LT5zZXRCcmVha3BvaW50c0FjdGl2ZShp
Z25vcmVkLCBmYWxzZSk7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKG1fcHJvZ3JhbW1hdGljQ2Fw
dHVyZVJlc3RvcmVCcmVha3BvaW50QWN0aXZlVmFsdWUpCisgICAgICAgICAgICB3ZWJEZWJ1Z2dl
ckFnZW50LT5zZXRCcmVha3BvaW50c0FjdGl2ZShmYWxzZSk7CiAgICAgfSBlbHNlCiAgICAgICAg
IG1fcHJvZ3JhbW1hdGljQ2FwdHVyZVJlc3RvcmVCcmVha3BvaW50QWN0aXZlVmFsdWUgPSBmYWxz
ZTsKIApAQCAtNTQ2LDEwICs1NDIsOCBAQCB2b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OnN0
b3BQcm9ncmFtbWF0aWNDYXB0dXJlKCkKIAogICAgIC8vIFJlLWVuYWJsZSBicmVha3BvaW50cyBp
ZiB0aGV5IHdlcmUgZW5hYmxlZC4KICAgICBpZiAobV9wcm9ncmFtbWF0aWNDYXB0dXJlUmVzdG9y
ZUJyZWFrcG9pbnRBY3RpdmVWYWx1ZSkgewotICAgICAgICBpZiAoYXV0byogd2ViRGVidWdnZXJB
Z2VudCA9IG1faW5zdHJ1bWVudGluZ0FnZW50cy5lbmFibGVkV2ViRGVidWdnZXJBZ2VudCgpKSB7
Ci0gICAgICAgICAgICBFcnJvclN0cmluZyBpZ25vcmVkOwotICAgICAgICAgICAgd2ViRGVidWdn
ZXJBZ2VudC0+c2V0QnJlYWtwb2ludHNBY3RpdmUoaWdub3JlZCwgdHJ1ZSk7Ci0gICAgICAgIH0K
KyAgICAgICAgaWYgKGF1dG8qIHdlYkRlYnVnZ2VyQWdlbnQgPSBtX2luc3RydW1lbnRpbmdBZ2Vu
dHMuZW5hYmxlZFdlYkRlYnVnZ2VyQWdlbnQoKSkKKyAgICAgICAgICAgIHdlYkRlYnVnZ2VyQWdl
bnQtPnNldEJyZWFrcG9pbnRzQWN0aXZlKHRydWUpOwogICAgIH0KIH0KIApAQCAtNTU3LDI2ICs1
NTEsMjYgQEAgdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50Ojp0b2dnbGVJbnN0cnVtZW50cyhJ
bnN0cnVtZW50U3RhdGUgc3RhdGUpCiB7CiAgICAgZm9yIChhdXRvIGluc3RydW1lbnRUeXBlIDog
bV9pbnN0cnVtZW50cykgewogICAgICAgICBzd2l0Y2ggKGluc3RydW1lbnRUeXBlKSB7Ci0gICAg
ICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6VGltZWxpbmU6Okluc3RydW1lbnQ6OlNjcmlw
dFByb2ZpbGVyOiB7CisgICAgICAgIGNhc2UgUHJvdG9jb2w6OlRpbWVsaW5lOjpJbnN0cnVtZW50
OjpTY3JpcHRQcm9maWxlcjogewogICAgICAgICAgICAgdG9nZ2xlU2NyaXB0UHJvZmlsZXJJbnN0
cnVtZW50KHN0YXRlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGNh
c2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6VGltZWxpbmU6Okluc3RydW1lbnQ6OkhlYXA6IHsKKyAg
ICAgICAgY2FzZSBQcm90b2NvbDo6VGltZWxpbmU6Okluc3RydW1lbnQ6OkhlYXA6IHsKICAgICAg
ICAgICAgIHRvZ2dsZUhlYXBJbnN0cnVtZW50KHN0YXRlKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9Ci0gICAgICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6VGltZWxpbmU6Oklu
c3RydW1lbnQ6OkNQVTogeworICAgICAgICBjYXNlIFByb3RvY29sOjpUaW1lbGluZTo6SW5zdHJ1
bWVudDo6Q1BVOiB7CiAgICAgICAgICAgICB0b2dnbGVDUFVJbnN0cnVtZW50KHN0YXRlKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90
b2NvbDo6VGltZWxpbmU6Okluc3RydW1lbnQ6Ok1lbW9yeTogeworICAgICAgICBjYXNlIFByb3Rv
Y29sOjpUaW1lbGluZTo6SW5zdHJ1bWVudDo6TWVtb3J5OiB7CiAgICAgICAgICAgICB0b2dnbGVN
ZW1vcnlJbnN0cnVtZW50KHN0YXRlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0g
ICAgICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6VGltZWxpbmU6Okluc3RydW1lbnQ6OlRp
bWVsaW5lOgorICAgICAgICBjYXNlIFByb3RvY29sOjpUaW1lbGluZTo6SW5zdHJ1bWVudDo6VGlt
ZWxpbmU6CiAgICAgICAgICAgICB0b2dnbGVUaW1lbGluZUluc3RydW1lbnQoc3RhdGUpOwogICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6VGltZWxp
bmU6Okluc3RydW1lbnQ6OkFuaW1hdGlvbjoKKyAgICAgICAgY2FzZSBQcm90b2NvbDo6VGltZWxp
bmU6Okluc3RydW1lbnQ6OkFuaW1hdGlvbjoKICAgICAgICAgICAgIHRvZ2dsZUFuaW1hdGlvbklu
c3RydW1lbnQoc3RhdGUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTU4Niwy
NCArNTgwLDIxIEBAIHZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6dG9nZ2xlSW5zdHJ1bWVu
dHMoSW5zdHJ1bWVudFN0YXRlIHN0YXRlKQogdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50Ojp0
b2dnbGVTY3JpcHRQcm9maWxlckluc3RydW1lbnQoSW5zdHJ1bWVudFN0YXRlIHN0YXRlKQogewog
ICAgIGlmIChhdXRvKiBzY3JpcHRQcm9maWxlckFnZW50ID0gbV9pbnN0cnVtZW50aW5nQWdlbnRz
LnBlcnNpc3RlbnRTY3JpcHRQcm9maWxlckFnZW50KCkpIHsKLSAgICAgICAgRXJyb3JTdHJpbmcg
aWdub3JlZDsKLSAgICAgICAgaWYgKHN0YXRlID09IEluc3RydW1lbnRTdGF0ZTo6U3RhcnQpIHsK
LSAgICAgICAgICAgIGNvbnN0IGJvb2wgaW5jbHVkZVNhbXBsZXMgPSB0cnVlOwotICAgICAgICAg
ICAgc2NyaXB0UHJvZmlsZXJBZ2VudC0+c3RhcnRUcmFja2luZyhpZ25vcmVkLCAmaW5jbHVkZVNh
bXBsZXMpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHNjcmlwdFByb2ZpbGVyQWdlbnQt
PnN0b3BUcmFja2luZyhpZ25vcmVkKTsKKyAgICAgICAgaWYgKHN0YXRlID09IEluc3RydW1lbnRT
dGF0ZTo6U3RhcnQpCisgICAgICAgICAgICBzY3JpcHRQcm9maWxlckFnZW50LT5zdGFydFRyYWNr
aW5nKHRydWUpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzY3JpcHRQcm9maWxlckFnZW50
LT5zdG9wVHJhY2tpbmcoKTsKICAgICB9CiB9CiAKIHZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2Vu
dDo6dG9nZ2xlSGVhcEluc3RydW1lbnQoSW5zdHJ1bWVudFN0YXRlIHN0YXRlKQogewogICAgIGlm
IChhdXRvKiBoZWFwQWdlbnQgPSBtX2luc3RydW1lbnRpbmdBZ2VudHMuZW5hYmxlZFBhZ2VIZWFw
QWdlbnQoKSkgewotICAgICAgICBFcnJvclN0cmluZyBpZ25vcmVkOwogICAgICAgICBpZiAoc3Rh
dGUgPT0gSW5zdHJ1bWVudFN0YXRlOjpTdGFydCkgewogICAgICAgICAgICAgaWYgKG1fYXV0b0Nh
cHR1cmVQaGFzZSA9PSBBdXRvQ2FwdHVyZVBoYXNlOjpOb25lIHx8IG1fYXV0b0NhcHR1cmVQaGFz
ZSA9PSBBdXRvQ2FwdHVyZVBoYXNlOjpGaXJzdE5hdmlnYXRpb24pCi0gICAgICAgICAgICAgICAg
aGVhcEFnZW50LT5zdGFydFRyYWNraW5nKGlnbm9yZWQpOworICAgICAgICAgICAgICAgIGhlYXBB
Z2VudC0+c3RhcnRUcmFja2luZygpOwogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGhlYXBB
Z2VudC0+c3RvcFRyYWNraW5nKGlnbm9yZWQpOworICAgICAgICAgICAgaGVhcEFnZW50LT5zdG9w
VHJhY2tpbmcoKTsKICAgICB9CiB9CiAKQEAgLTYxMSwxMSArNjAyLDEwIEBAIHZvaWQgSW5zcGVj
dG9yVGltZWxpbmVBZ2VudDo6dG9nZ2xlQ1BVSW5zdHJ1bWVudChJbnN0cnVtZW50U3RhdGUgc3Rh
dGUpCiB7CiAjaWYgRU5BQkxFKFJFU09VUkNFX1VTQUdFKQogICAgIGlmIChhdXRvKiBjcHVQcm9m
aWxlckFnZW50ID0gbV9pbnN0cnVtZW50aW5nQWdlbnRzLnBlcnNpc3RlbnRDUFVQcm9maWxlckFn
ZW50KCkpIHsKLSAgICAgICAgRXJyb3JTdHJpbmcgaWdub3JlZDsKICAgICAgICAgaWYgKHN0YXRl
ID09IEluc3RydW1lbnRTdGF0ZTo6U3RhcnQpCi0gICAgICAgICAgICBjcHVQcm9maWxlckFnZW50
LT5zdGFydFRyYWNraW5nKGlnbm9yZWQpOworICAgICAgICAgICAgY3B1UHJvZmlsZXJBZ2VudC0+
c3RhcnRUcmFja2luZygpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBjcHVQcm9maWxlckFn
ZW50LT5zdG9wVHJhY2tpbmcoaWdub3JlZCk7CisgICAgICAgICAgICBjcHVQcm9maWxlckFnZW50
LT5zdG9wVHJhY2tpbmcoKTsKICAgICB9CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7
CkBAIC02MjYsMTEgKzYxNiwxMCBAQCB2b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OnRvZ2ds
ZU1lbW9yeUluc3RydW1lbnQoSW5zdHJ1bWVudFN0YXRlIHN0YXRlKQogewogI2lmIEVOQUJMRShS
RVNPVVJDRV9VU0FHRSkKICAgICBpZiAoYXV0byogbWVtb3J5QWdlbnQgPSBtX2luc3RydW1lbnRp
bmdBZ2VudHMucGVyc2lzdGVudE1lbW9yeUFnZW50KCkpIHsKLSAgICAgICAgRXJyb3JTdHJpbmcg
aWdub3JlZDsKICAgICAgICAgaWYgKHN0YXRlID09IEluc3RydW1lbnRTdGF0ZTo6U3RhcnQpCi0g
ICAgICAgICAgICBtZW1vcnlBZ2VudC0+c3RhcnRUcmFja2luZyhpZ25vcmVkKTsKKyAgICAgICAg
ICAgIG1lbW9yeUFnZW50LT5zdGFydFRyYWNraW5nKCk7CiAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIG1lbW9yeUFnZW50LT5zdG9wVHJhY2tpbmcoaWdub3JlZCk7CisgICAgICAgICAgICBtZW1v
cnlBZ2VudC0+c3RvcFRyYWNraW5nKCk7CiAgICAgfQogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0o
c3RhdGUpOwpAQCAtNjQwLDcgKzYyOSw3IEBAIHZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6
dG9nZ2xlTWVtb3J5SW5zdHJ1bWVudChJbnN0cnVtZW50U3RhdGUgc3RhdGUpCiB2b2lkIEluc3Bl
Y3RvclRpbWVsaW5lQWdlbnQ6OnRvZ2dsZVRpbWVsaW5lSW5zdHJ1bWVudChJbnN0cnVtZW50U3Rh
dGUgc3RhdGUpCiB7CiAgICAgaWYgKHN0YXRlID09IEluc3RydW1lbnRTdGF0ZTo6U3RhcnQpCi0g
ICAgICAgIGludGVybmFsU3RhcnQoKTsKKyAgICAgICAgaW50ZXJuYWxTdGFydChXVEY6Om51bGxv
cHQpOwogICAgIGVsc2UKICAgICAgICAgaW50ZXJuYWxTdG9wKCk7CiB9CkBAIC02NDgsMTEgKzYz
NywxMCBAQCB2b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OnRvZ2dsZVRpbWVsaW5lSW5zdHJ1
bWVudChJbnN0cnVtZW50U3RhdGUgc3RhdGUpCiB2b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6
OnRvZ2dsZUFuaW1hdGlvbkluc3RydW1lbnQoSW5zdHJ1bWVudFN0YXRlIHN0YXRlKQogewogICAg
IGlmIChhdXRvKiBhbmltYXRpb25BZ2VudCA9IG1faW5zdHJ1bWVudGluZ0FnZW50cy5wZXJzaXN0
ZW50QW5pbWF0aW9uQWdlbnQoKSkgewotICAgICAgICBFcnJvclN0cmluZyBpZ25vcmVkOwogICAg
ICAgICBpZiAoc3RhdGUgPT0gSW5zdHJ1bWVudFN0YXRlOjpTdGFydCkKLSAgICAgICAgICAgIGFu
aW1hdGlvbkFnZW50LT5zdGFydFRyYWNraW5nKGlnbm9yZWQpOworICAgICAgICAgICAgYW5pbWF0
aW9uQWdlbnQtPnN0YXJ0VHJhY2tpbmcoKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgYW5p
bWF0aW9uQWdlbnQtPnN0b3BUcmFja2luZyhpZ25vcmVkKTsKKyAgICAgICAgICAgIGFuaW1hdGlv
bkFnZW50LT5zdG9wVHJhY2tpbmcoKTsKICAgICB9CiB9CiAKQEAgLTY5MSw3MSArNjc5LDcxIEBA
IHZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6YnJlYWtwb2ludEFjdGlvblByb2JlKEpTQzo6
SlNHbG9iYWxPYmplY3QqIGxleGljYWxHCiAgICAgYXBwZW5kUmVjb3JkKFRpbWVsaW5lUmVjb3Jk
RmFjdG9yeTo6Y3JlYXRlUHJvYmVTYW1wbGVEYXRhKGFjdGlvbklELCBzYW1wbGVJZCksIFRpbWVs
aW5lUmVjb3JkVHlwZTo6UHJvYmVTYW1wbGUsIGZhbHNlLCBmcmFtZUZyb21FeGVjU3RhdGUobGV4
aWNhbEdsb2JhbE9iamVjdCkpOwogfQogCi1zdGF0aWMgSW5zcGVjdG9yOjpQcm90b2NvbDo6VGlt
ZWxpbmU6OkV2ZW50VHlwZSB0b1Byb3RvY29sKFRpbWVsaW5lUmVjb3JkVHlwZSB0eXBlKQorc3Rh
dGljIFByb3RvY29sOjpUaW1lbGluZTo6RXZlbnRUeXBlIHRvUHJvdG9jb2woVGltZWxpbmVSZWNv
cmRUeXBlIHR5cGUpCiB7CiAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgY2FzZSBUaW1lbGluZVJl
Y29yZFR5cGU6OkV2ZW50RGlzcGF0Y2g6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpUaW1lbGluZTo6RXZlbnRUeXBlOjpFdmVudERpc3BhdGNoOworICAgICAgICByZXR1cm4g
UHJvdG9jb2w6OlRpbWVsaW5lOjpFdmVudFR5cGU6OkV2ZW50RGlzcGF0Y2g7CiAgICAgY2FzZSBU
aW1lbGluZVJlY29yZFR5cGU6OlNjaGVkdWxlU3R5bGVSZWNhbGN1bGF0aW9uOgotICAgICAgICBy
ZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6VGltZWxpbmU6OkV2ZW50VHlwZTo6U2NoZWR1bGVT
dHlsZVJlY2FsY3VsYXRpb247CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6VGltZWxpbmU6OkV2
ZW50VHlwZTo6U2NoZWR1bGVTdHlsZVJlY2FsY3VsYXRpb247CiAgICAgY2FzZSBUaW1lbGluZVJl
Y29yZFR5cGU6OlJlY2FsY3VsYXRlU3R5bGVzOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQ
cm90b2NvbDo6VGltZWxpbmU6OkV2ZW50VHlwZTo6UmVjYWxjdWxhdGVTdHlsZXM7CisgICAgICAg
IHJldHVybiBQcm90b2NvbDo6VGltZWxpbmU6OkV2ZW50VHlwZTo6UmVjYWxjdWxhdGVTdHlsZXM7
CiAgICAgY2FzZSBUaW1lbGluZVJlY29yZFR5cGU6OkludmFsaWRhdGVMYXlvdXQ6Ci0gICAgICAg
IHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpUaW1lbGluZTo6RXZlbnRUeXBlOjpJbnZhbGlk
YXRlTGF5b3V0OworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OlRpbWVsaW5lOjpFdmVudFR5cGU6
OkludmFsaWRhdGVMYXlvdXQ7CiAgICAgY2FzZSBUaW1lbGluZVJlY29yZFR5cGU6OkxheW91dDoK
LSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRpbWVsaW5lOjpFdmVudFR5cGU6
OkxheW91dDsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpUaW1lbGluZTo6RXZlbnRUeXBlOjpM
YXlvdXQ7CiAgICAgY2FzZSBUaW1lbGluZVJlY29yZFR5cGU6OlBhaW50OgotICAgICAgICByZXR1
cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6VGltZWxpbmU6OkV2ZW50VHlwZTo6UGFpbnQ7CisgICAg
ICAgIHJldHVybiBQcm90b2NvbDo6VGltZWxpbmU6OkV2ZW50VHlwZTo6UGFpbnQ7CiAgICAgY2Fz
ZSBUaW1lbGluZVJlY29yZFR5cGU6OkNvbXBvc2l0ZToKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlRpbWVsaW5lOjpFdmVudFR5cGU6OkNvbXBvc2l0ZTsKKyAgICAgICAgcmV0
dXJuIFByb3RvY29sOjpUaW1lbGluZTo6RXZlbnRUeXBlOjpDb21wb3NpdGU7CiAgICAgY2FzZSBU
aW1lbGluZVJlY29yZFR5cGU6OlJlbmRlcmluZ0ZyYW1lOgotICAgICAgICByZXR1cm4gSW5zcGVj
dG9yOjpQcm90b2NvbDo6VGltZWxpbmU6OkV2ZW50VHlwZTo6UmVuZGVyaW5nRnJhbWU7CisgICAg
ICAgIHJldHVybiBQcm90b2NvbDo6VGltZWxpbmU6OkV2ZW50VHlwZTo6UmVuZGVyaW5nRnJhbWU7
CiAKICAgICBjYXNlIFRpbWVsaW5lUmVjb3JkVHlwZTo6VGltZXJJbnN0YWxsOgotICAgICAgICBy
ZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6VGltZWxpbmU6OkV2ZW50VHlwZTo6VGltZXJJbnN0
YWxsOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OlRpbWVsaW5lOjpFdmVudFR5cGU6OlRpbWVy
SW5zdGFsbDsKICAgICBjYXNlIFRpbWVsaW5lUmVjb3JkVHlwZTo6VGltZXJSZW1vdmU6Ci0gICAg
ICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpUaW1lbGluZTo6RXZlbnRUeXBlOjpUaW1l
clJlbW92ZTsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpUaW1lbGluZTo6RXZlbnRUeXBlOjpU
aW1lclJlbW92ZTsKICAgICBjYXNlIFRpbWVsaW5lUmVjb3JkVHlwZTo6VGltZXJGaXJlOgotICAg
ICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6VGltZWxpbmU6OkV2ZW50VHlwZTo6VGlt
ZXJGaXJlOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OlRpbWVsaW5lOjpFdmVudFR5cGU6OlRp
bWVyRmlyZTsKIAogICAgIGNhc2UgVGltZWxpbmVSZWNvcmRUeXBlOjpFdmFsdWF0ZVNjcmlwdDoK
LSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRpbWVsaW5lOjpFdmVudFR5cGU6
OkV2YWx1YXRlU2NyaXB0OworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OlRpbWVsaW5lOjpFdmVu
dFR5cGU6OkV2YWx1YXRlU2NyaXB0OwogCiAgICAgY2FzZSBUaW1lbGluZVJlY29yZFR5cGU6OlRp
bWVTdGFtcDoKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRpbWVsaW5lOjpF
dmVudFR5cGU6OlRpbWVTdGFtcDsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpUaW1lbGluZTo6
RXZlbnRUeXBlOjpUaW1lU3RhbXA7CiAgICAgY2FzZSBUaW1lbGluZVJlY29yZFR5cGU6OlRpbWU6
Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpUaW1lbGluZTo6RXZlbnRUeXBl
OjpUaW1lOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OlRpbWVsaW5lOjpFdmVudFR5cGU6OlRp
bWU7CiAgICAgY2FzZSBUaW1lbGluZVJlY29yZFR5cGU6OlRpbWVFbmQ6Ci0gICAgICAgIHJldHVy
biBJbnNwZWN0b3I6OlByb3RvY29sOjpUaW1lbGluZTo6RXZlbnRUeXBlOjpUaW1lRW5kOworICAg
ICAgICByZXR1cm4gUHJvdG9jb2w6OlRpbWVsaW5lOjpFdmVudFR5cGU6OlRpbWVFbmQ7CiAKICAg
ICBjYXNlIFRpbWVsaW5lUmVjb3JkVHlwZTo6RnVuY3Rpb25DYWxsOgotICAgICAgICByZXR1cm4g
SW5zcGVjdG9yOjpQcm90b2NvbDo6VGltZWxpbmU6OkV2ZW50VHlwZTo6RnVuY3Rpb25DYWxsOwor
ICAgICAgICByZXR1cm4gUHJvdG9jb2w6OlRpbWVsaW5lOjpFdmVudFR5cGU6OkZ1bmN0aW9uQ2Fs
bDsKICAgICBjYXNlIFRpbWVsaW5lUmVjb3JkVHlwZTo6UHJvYmVTYW1wbGU6Ci0gICAgICAgIHJl
dHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpUaW1lbGluZTo6RXZlbnRUeXBlOjpQcm9iZVNhbXBs
ZTsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpUaW1lbGluZTo6RXZlbnRUeXBlOjpQcm9iZVNh
bXBsZTsKICAgICBjYXNlIFRpbWVsaW5lUmVjb3JkVHlwZTo6Q29uc29sZVByb2ZpbGU6Ci0gICAg
ICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpUaW1lbGluZTo6RXZlbnRUeXBlOjpDb25z
b2xlUHJvZmlsZTsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpUaW1lbGluZTo6RXZlbnRUeXBl
OjpDb25zb2xlUHJvZmlsZTsKIAogICAgIGNhc2UgVGltZWxpbmVSZWNvcmRUeXBlOjpSZXF1ZXN0
QW5pbWF0aW9uRnJhbWU6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpUaW1l
bGluZTo6RXZlbnRUeXBlOjpSZXF1ZXN0QW5pbWF0aW9uRnJhbWU7CisgICAgICAgIHJldHVybiBQ
cm90b2NvbDo6VGltZWxpbmU6OkV2ZW50VHlwZTo6UmVxdWVzdEFuaW1hdGlvbkZyYW1lOwogICAg
IGNhc2UgVGltZWxpbmVSZWNvcmRUeXBlOjpDYW5jZWxBbmltYXRpb25GcmFtZToKLSAgICAgICAg
cmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRpbWVsaW5lOjpFdmVudFR5cGU6OkNhbmNlbEFu
aW1hdGlvbkZyYW1lOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OlRpbWVsaW5lOjpFdmVudFR5
cGU6OkNhbmNlbEFuaW1hdGlvbkZyYW1lOwogICAgIGNhc2UgVGltZWxpbmVSZWNvcmRUeXBlOjpG
aXJlQW5pbWF0aW9uRnJhbWU6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpU
aW1lbGluZTo6RXZlbnRUeXBlOjpGaXJlQW5pbWF0aW9uRnJhbWU7CisgICAgICAgIHJldHVybiBQ
cm90b2NvbDo6VGltZWxpbmU6OkV2ZW50VHlwZTo6RmlyZUFuaW1hdGlvbkZyYW1lOwogCiAgICAg
Y2FzZSBUaW1lbGluZVJlY29yZFR5cGU6Ok9ic2VydmVyQ2FsbGJhY2s6Ci0gICAgICAgIHJldHVy
biBJbnNwZWN0b3I6OlByb3RvY29sOjpUaW1lbGluZTo6RXZlbnRUeXBlOjpPYnNlcnZlckNhbGxi
YWNrOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OlRpbWVsaW5lOjpFdmVudFR5cGU6Ok9ic2Vy
dmVyQ2FsbGJhY2s7CiAgICAgfQogCi0gICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRp
bWVsaW5lOjpFdmVudFR5cGU6OlRpbWVTdGFtcDsKKyAgICByZXR1cm4gUHJvdG9jb2w6OlRpbWVs
aW5lOjpFdmVudFR5cGU6OlRpbWVTdGFtcDsKIH0KIAotdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFn
ZW50OjphZGRSZWNvcmRUb1RpbWVsaW5lKFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcmVjb3JkLCBU
aW1lbGluZVJlY29yZFR5cGUgdHlwZSkKK3ZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6YWRk
UmVjb3JkVG9UaW1lbGluZShSZWY8SlNPTjo6T2JqZWN0PiYmIHJlY29yZCwgVGltZWxpbmVSZWNv
cmRUeXBlIHR5cGUpCiB7Ci0gICAgQVNTRVJUX0FSRyhyZWNvcmQsIHJlY29yZCk7Ci0gICAgcmVj
b3JkLT5zZXRTdHJpbmcoInR5cGUiLCBJbnNwZWN0b3I6OlByb3RvY29sOjpJbnNwZWN0b3JIZWxw
ZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZSh0b1Byb3RvY29sKHR5cGUpKSk7CisgICAgcmVjb3Jk
LT5zZXRTdHJpbmcoUHJvdG9jb2w6OlRpbWVsaW5lOjpUaW1lbGluZUV2ZW50Ojp0eXBlS2V5LCBQ
cm90b2NvbDo6SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUodG9Qcm90b2NvbCh0eXBlKSkp
OwogCiAgICAgaWYgKG1fcmVjb3JkU3RhY2suaXNFbXB0eSgpKSB7Ci0gICAgICAgIGF1dG8gcmVj
b3JkT2JqZWN0ID0gQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUaW1lbGluZTo6
VGltZWxpbmVFdmVudD46OnJ1bnRpbWVDYXN0KFdURk1vdmUocmVjb3JkKSk7CisgICAgICAgIC8v
IEZJWE1FOiBydW50aW1lQ2FzdCBpcyBhIGhhY2suIFdlIGRvIGl0IGJlY2F1c2Ugd2UgY2FuJ3Qg
YnVpbGQgVGltZWxpbmVFdmVudCBkaXJlY3RseSBub3cuCisgICAgICAgIGF1dG8gcmVjb3JkT2Jq
ZWN0ID0gUHJvdG9jb2w6OkJpbmRpbmdUcmFpdHM8UHJvdG9jb2w6OlRpbWVsaW5lOjpUaW1lbGlu
ZUV2ZW50Pjo6cnVudGltZUNhc3QoV1RGTW92ZShyZWNvcmQpKTsKICAgICAgICAgc2VuZEV2ZW50
KFdURk1vdmUocmVjb3JkT2JqZWN0KSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgY29uc3QgVGlt
ZWxpbmVSZWNvcmRFbnRyeSYgcGFyZW50ID0gbV9yZWNvcmRTdGFjay5sYXN0KCk7CkBAIC03ODEs
OCArNzY5LDkgQEAgdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpzZXRGcmFtZUlkZW50aWZp
ZXIoSlNPTjo6T2JqZWN0KiByZWNvcmQsIEZyYW1lKiBmcmEKIAogdm9pZCBJbnNwZWN0b3JUaW1l
bGluZUFnZW50OjpkaWRDb21wbGV0ZVJlY29yZEVudHJ5KGNvbnN0IFRpbWVsaW5lUmVjb3JkRW50
cnkmIGVudHJ5KQogewotICAgIGVudHJ5LnJlY29yZC0+c2V0T2JqZWN0KCJkYXRhIl9zLCBlbnRy
eS5kYXRhKTsKLSAgICBlbnRyeS5yZWNvcmQtPnNldEFycmF5KCJjaGlsZHJlbiJfcywgZW50cnku
Y2hpbGRyZW4pOworICAgIGVudHJ5LnJlY29yZC0+c2V0T2JqZWN0KFByb3RvY29sOjpUaW1lbGlu
ZTo6VGltZWxpbmVFdmVudDo6ZGF0YUtleSwgZW50cnkuZGF0YS5jb3B5UmVmKCkpOworICAgIGlm
IChlbnRyeS5jaGlsZHJlbikKKyAgICAgICAgZW50cnkucmVjb3JkLT5zZXRBcnJheShQcm90b2Nv
bDo6VGltZWxpbmU6OlRpbWVsaW5lRXZlbnQ6OmNoaWxkcmVuS2V5LCAqZW50cnkuY2hpbGRyZW4p
OwogICAgIGVudHJ5LnJlY29yZC0+c2V0RG91YmxlKCJlbmRUaW1lIl9zLCB0aW1lc3RhbXAoKSk7
CiAgICAgYWRkUmVjb3JkVG9UaW1lbGluZShlbnRyeS5yZWNvcmQuY29weVJlZigpLCBlbnRyeS50
eXBlKTsKIH0KQEAgLTgwNCwyOSArNzkzLDI5IEBAIHZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2Vu
dDo6ZGlkQ29tcGxldGVDdXJyZW50UmVjb3JkKFRpbWVsaW5lUmVjb3JkVHlwZSB0eXBlKQogICAg
IH0KIH0KIAotdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjphcHBlbmRSZWNvcmQoUmVmUHRy
PEpTT046Ok9iamVjdD4mJiBkYXRhLCBUaW1lbGluZVJlY29yZFR5cGUgdHlwZSwgYm9vbCBjYXB0
dXJlQ2FsbFN0YWNrLCBGcmFtZSogZnJhbWUpCit2b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6
OmFwcGVuZFJlY29yZChSZWY8SlNPTjo6T2JqZWN0PiYmIGRhdGEsIFRpbWVsaW5lUmVjb3JkVHlw
ZSB0eXBlLCBib29sIGNhcHR1cmVDYWxsU3RhY2ssIEZyYW1lKiBmcmFtZSkKIHsKICAgICBSZWY8
SlNPTjo6T2JqZWN0PiByZWNvcmQgPSBUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZUdlbmVy
aWNSZWNvcmQodGltZXN0YW1wKCksIGNhcHR1cmVDYWxsU3RhY2sgPyBtX21heENhbGxTdGFja0Rl
cHRoIDogMCk7Ci0gICAgcmVjb3JkLT5zZXRPYmplY3QoImRhdGEiLCBXVEZNb3ZlKGRhdGEpKTsK
KyAgICByZWNvcmQtPnNldE9iamVjdChQcm90b2NvbDo6VGltZWxpbmU6OlRpbWVsaW5lRXZlbnQ6
OmRhdGFLZXksIFdURk1vdmUoZGF0YSkpOwogICAgIHNldEZyYW1lSWRlbnRpZmllcigmcmVjb3Jk
LmdldCgpLCBmcmFtZSk7CiAgICAgYWRkUmVjb3JkVG9UaW1lbGluZShXVEZNb3ZlKHJlY29yZCks
IHR5cGUpOwogfQogCi12b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OnNlbmRFdmVudChSZWZQ
dHI8SlNPTjo6T2JqZWN0PiYmIGV2ZW50KQordm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50Ojpz
ZW5kRXZlbnQoUmVmPEpTT046Ok9iamVjdD4mJiBldmVudCkKIHsKICAgICAvLyBGSVhNRTogcnVu
dGltZUNhc3QgaXMgYSBoYWNrLiBXZSBkbyBpdCBiZWNhdXNlIHdlIGNhbid0IGJ1aWxkIFRpbWVs
aW5lRXZlbnQgZGlyZWN0bHkgbm93LgotICAgIGF1dG8gcmVjb3JkQ2hlY2tlZCA9IEJpbmRpbmdU
cmFpdHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGltZWxpbmU6OlRpbWVsaW5lRXZlbnQ+OjpydW50
aW1lQ2FzdChXVEZNb3ZlKGV2ZW50KSk7CisgICAgYXV0byByZWNvcmRDaGVja2VkID0gUHJvdG9j
b2w6OkJpbmRpbmdUcmFpdHM8UHJvdG9jb2w6OlRpbWVsaW5lOjpUaW1lbGluZUV2ZW50Pjo6cnVu
dGltZUNhc3QoV1RGTW92ZShldmVudCkpOwogICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5ldmVu
dFJlY29yZGVkKFdURk1vdmUocmVjb3JkQ2hlY2tlZCkpOwogfQogCi1JbnNwZWN0b3JUaW1lbGlu
ZUFnZW50OjpUaW1lbGluZVJlY29yZEVudHJ5IEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OmNyZWF0
ZVJlY29yZEVudHJ5KFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgZGF0YSwgVGltZWxpbmVSZWNvcmRU
eXBlIHR5cGUsIGJvb2wgY2FwdHVyZUNhbGxTdGFjaywgRnJhbWUqIGZyYW1lKQorSW5zcGVjdG9y
VGltZWxpbmVBZ2VudDo6VGltZWxpbmVSZWNvcmRFbnRyeSBJbnNwZWN0b3JUaW1lbGluZUFnZW50
OjpjcmVhdGVSZWNvcmRFbnRyeShSZWY8SlNPTjo6T2JqZWN0PiYmIGRhdGEsIFRpbWVsaW5lUmVj
b3JkVHlwZSB0eXBlLCBib29sIGNhcHR1cmVDYWxsU3RhY2ssIEZyYW1lKiBmcmFtZSkKIHsKICAg
ICBSZWY8SlNPTjo6T2JqZWN0PiByZWNvcmQgPSBUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0
ZUdlbmVyaWNSZWNvcmQodGltZXN0YW1wKCksIGNhcHR1cmVDYWxsU3RhY2sgPyBtX21heENhbGxT
dGFja0RlcHRoIDogMCk7CiAgICAgc2V0RnJhbWVJZGVudGlmaWVyKCZyZWNvcmQuZ2V0KCksIGZy
YW1lKTsKICAgICByZXR1cm4gVGltZWxpbmVSZWNvcmRFbnRyeShXVEZNb3ZlKHJlY29yZCksIFdU
Rk1vdmUoZGF0YSksIEpTT046OkFycmF5OjpjcmVhdGUoKSwgdHlwZSk7CiB9CiAKLXZvaWQgSW5z
cGVjdG9yVGltZWxpbmVBZ2VudDo6cHVzaEN1cnJlbnRSZWNvcmQoUmVmUHRyPEpTT046Ok9iamVj
dD4mJiBkYXRhLCBUaW1lbGluZVJlY29yZFR5cGUgdHlwZSwgYm9vbCBjYXB0dXJlQ2FsbFN0YWNr
LCBGcmFtZSogZnJhbWUpCit2b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OnB1c2hDdXJyZW50
UmVjb3JkKFJlZjxKU09OOjpPYmplY3Q+JiYgZGF0YSwgVGltZWxpbmVSZWNvcmRUeXBlIHR5cGUs
IGJvb2wgY2FwdHVyZUNhbGxTdGFjaywgRnJhbWUqIGZyYW1lKQogewogICAgIHB1c2hDdXJyZW50
UmVjb3JkKGNyZWF0ZVJlY29yZEVudHJ5KFdURk1vdmUoZGF0YSksIHR5cGUsIGNhcHR1cmVDYWxs
U3RhY2ssIGZyYW1lKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
YWdlbnRzL0luc3BlY3RvclRpbWVsaW5lQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9hZ2VudHMvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5oCmluZGV4IGFlNzU3OWExNWYwNTcyYjUy
ZjlhYWUxYWZiZWUwOTJmYjgyNGM4MTkuLmZlNzVlNDBiNDM0Zjg1ZDk3M2FlZGJiNDI5N2E5NGJh
ZTE4ZmJiMmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5z
cGVjdG9yVGltZWxpbmVBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2Vu
dHMvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5oCkBAIC01MCw4ICs1MCw2IEBAIGNsYXNzIEZyYW1l
OwogY2xhc3MgUmVuZGVyT2JqZWN0OwogY2xhc3MgUnVuTG9vcE9ic2VydmVyOwogCi10eXBlZGVm
IFN0cmluZyBFcnJvclN0cmluZzsKLQogZW51bSBjbGFzcyBUaW1lbGluZVJlY29yZFR5cGUgewog
ICAgIEV2ZW50RGlzcGF0Y2gsCiAgICAgU2NoZWR1bGVTdHlsZVJlY2FsY3VsYXRpb24sCkBAIC04
OCwyMiArODYsMjIgQEAgY2xhc3MgSW5zcGVjdG9yVGltZWxpbmVBZ2VudCBmaW5hbCA6IHB1Ymxp
YyBJbnNwZWN0b3JBZ2VudEJhc2UgLCBwdWJsaWMgSW5zcGVjdG8KICAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBJbnNwZWN0b3JUaW1lbGluZUFnZW50KFBhZ2VBZ2Vu
dENvbnRleHQmKTsKLSAgICB+SW5zcGVjdG9yVGltZWxpbmVBZ2VudCgpIG92ZXJyaWRlOworICAg
IH5JbnNwZWN0b3JUaW1lbGluZUFnZW50KCk7CiAKICAgICAvLyBJbnNwZWN0b3JBZ2VudEJhc2UK
LSAgICB2b2lkIGRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5k
Um91dGVyKiwgSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlciopIG92ZXJyaWRlOwotICAgIHZv
aWQgd2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVh
c29uKSBvdmVycmlkZTsKKyAgICB2b2lkIGRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJbnNw
ZWN0b3I6OkZyb250ZW5kUm91dGVyKiwgSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlciopOwor
ICAgIHZvaWQgd2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25u
ZWN0UmVhc29uKTsKIAogICAgIC8vIFRpbWVsaW5lQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyCi0g
ICAgdm9pZCBlbmFibGUoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2b2lkIGRpc2FibGUo
RXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2b2lkIHN0YXJ0KEVycm9yU3RyaW5nJiwgY29u
c3QgaW50KiBtYXhDYWxsU3RhY2tEZXB0aCA9IG51bGxwdHIpIG92ZXJyaWRlOwotICAgIHZvaWQg
c3RvcChFcnJvclN0cmluZyYpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0QXV0b0NhcHR1cmVFbmFi
bGVkKEVycm9yU3RyaW5nJiwgYm9vbCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRJbnN0cnVtZW50
cyhFcnJvclN0cmluZyYsIGNvbnN0IEpTT046OkFycmF5Jikgb3ZlcnJpZGU7CisgICAgSW5zcGVj
dG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBlbmFibGUoKTsKKyAgICBJbnNwZWN0
b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGRpc2FibGUoKTsKKyAgICBJbnNwZWN0
b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHN0YXJ0KE9wdGlvbmFsPGludD4mJiBt
YXhDYWxsU3RhY2tEZXB0aCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdP
cjx2b2lkPiBzdG9wKCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2
b2lkPiBzZXRBdXRvQ2FwdHVyZUVuYWJsZWQoYm9vbCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzZXRJbnN0cnVtZW50cyhSZWY8SlNPTjo6QXJyYXk+JiYp
OwogCiAgICAgLy8gSlNDOjpEZWJ1Z2dlcjo6T2JzZXJ2ZXIKLSAgICB2b2lkIGJyZWFrcG9pbnRB
Y3Rpb25Qcm9iZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpCcmVha3BvaW50QWN0aW9uSUQs
IHVuc2lnbmVkIGJhdGNoSWQsIHVuc2lnbmVkIHNhbXBsZUlkLCBKU0M6OkpTVmFsdWUgcmVzdWx0
KSBmaW5hbDsKKyAgICB2b2lkIGJyZWFrcG9pbnRBY3Rpb25Qcm9iZShKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiwgSlNDOjpCcmVha3BvaW50QWN0aW9uSUQsIHVuc2lnbmVkIGJhdGNoSWQsIHVuc2lnbmVk
IHNhbXBsZUlkLCBKU0M6OkpTVmFsdWUgcmVzdWx0KTsKIAogICAgIC8vIEluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbgogICAgIHZvaWQgZGlkSW5zdGFsbFRpbWVyKGludCB0aW1lcklkLCBTZWNvbmRz
IHRpbWVvdXQsIGJvb2wgc2luZ2xlU2hvdCwgRnJhbWUqKTsKQEAgLTE2MCw5ICsxNTgsNyBAQCBw
cml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBUaW1lbGluZVJlY29yZFN0YWNrOwogCiAgICAgc3Ry
dWN0IFRpbWVsaW5lUmVjb3JkRW50cnkgewotICAgICAgICBUaW1lbGluZVJlY29yZEVudHJ5KCkK
LSAgICAgICAgICAgIDogdHlwZShUaW1lbGluZVJlY29yZFR5cGU6OkV2ZW50RGlzcGF0Y2gpIHsg
fQotICAgICAgICBUaW1lbGluZVJlY29yZEVudHJ5KFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcmVj
b3JkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIGRhdGEsIFJlZlB0cjxKU09OOjpBcnJheT4mJiBj
aGlsZHJlbiwgVGltZWxpbmVSZWNvcmRUeXBlIHR5cGUpCisgICAgICAgIFRpbWVsaW5lUmVjb3Jk
RW50cnkoUmVmPEpTT046Ok9iamVjdD4mJiByZWNvcmQsIFJlZjxKU09OOjpPYmplY3Q+JiYgZGF0
YSwgUmVmUHRyPEpTT046OkFycmF5PiYmIGNoaWxkcmVuLCBUaW1lbGluZVJlY29yZFR5cGUgdHlw
ZSkKICAgICAgICAgICAgIDogcmVjb3JkKFdURk1vdmUocmVjb3JkKSkKICAgICAgICAgICAgICwg
ZGF0YShXVEZNb3ZlKGRhdGEpKQogICAgICAgICAgICAgLCBjaGlsZHJlbihXVEZNb3ZlKGNoaWxk
cmVuKSkKQEAgLTE3MCwyOSArMTY2LDI5IEBAIHByaXZhdGU6CiAgICAgICAgIHsKICAgICAgICAg
fQogCi0gICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHJlY29yZDsKLSAgICAgICAgUmVmUHRy
PEpTT046Ok9iamVjdD4gZGF0YTsKKyAgICAgICAgUmVmPEpTT046Ok9iamVjdD4gcmVjb3JkOwor
ICAgICAgICBSZWY8SlNPTjo6T2JqZWN0PiBkYXRhOwogICAgICAgICBSZWZQdHI8SlNPTjo6QXJy
YXk+IGNoaWxkcmVuOwogICAgICAgICBUaW1lbGluZVJlY29yZFR5cGUgdHlwZTsKICAgICB9Owog
Ci0gICAgdm9pZCBpbnRlcm5hbFN0YXJ0KGNvbnN0IGludCogbWF4Q2FsbFN0YWNrRGVwdGggPSBu
dWxscHRyKTsKKyAgICB2b2lkIGludGVybmFsU3RhcnQoT3B0aW9uYWw8aW50PiYmIG1heENhbGxT
dGFja0RlcHRoKTsKICAgICB2b2lkIGludGVybmFsU3RvcCgpOwogICAgIGRvdWJsZSB0aW1lc3Rh
bXAoKTsKIAotICAgIHZvaWQgc2VuZEV2ZW50KFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpOwotICAg
IHZvaWQgYXBwZW5kUmVjb3JkKFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgZGF0YSwgVGltZWxpbmVS
ZWNvcmRUeXBlLCBib29sIGNhcHR1cmVDYWxsU3RhY2ssIEZyYW1lKik7Ci0gICAgdm9pZCBwdXNo
Q3VycmVudFJlY29yZChSZWZQdHI8SlNPTjo6T2JqZWN0PiYmLCBUaW1lbGluZVJlY29yZFR5cGUs
IGJvb2wgY2FwdHVyZUNhbGxTdGFjaywgRnJhbWUqKTsKKyAgICB2b2lkIHNlbmRFdmVudChSZWY8
SlNPTjo6T2JqZWN0PiYmKTsKKyAgICB2b2lkIGFwcGVuZFJlY29yZChSZWY8SlNPTjo6T2JqZWN0
PiYmIGRhdGEsIFRpbWVsaW5lUmVjb3JkVHlwZSwgYm9vbCBjYXB0dXJlQ2FsbFN0YWNrLCBGcmFt
ZSopOworICAgIHZvaWQgcHVzaEN1cnJlbnRSZWNvcmQoUmVmPEpTT046Ok9iamVjdD4mJiwgVGlt
ZWxpbmVSZWNvcmRUeXBlLCBib29sIGNhcHR1cmVDYWxsU3RhY2ssIEZyYW1lKik7CiAgICAgdm9p
ZCBwdXNoQ3VycmVudFJlY29yZChjb25zdCBUaW1lbGluZVJlY29yZEVudHJ5JiByZWNvcmQpIHsg
bV9yZWNvcmRTdGFjay5hcHBlbmQocmVjb3JkKTsgfQogCi0gICAgVGltZWxpbmVSZWNvcmRFbnRy
eSBjcmVhdGVSZWNvcmRFbnRyeShSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIGRhdGEsIFRpbWVsaW5l
UmVjb3JkVHlwZSwgYm9vbCBjYXB0dXJlQ2FsbFN0YWNrLCBGcmFtZSopOworICAgIFRpbWVsaW5l
UmVjb3JkRW50cnkgY3JlYXRlUmVjb3JkRW50cnkoUmVmPEpTT046Ok9iamVjdD4mJiBkYXRhLCBU
aW1lbGluZVJlY29yZFR5cGUsIGJvb2wgY2FwdHVyZUNhbGxTdGFjaywgRnJhbWUqKTsKIAogICAg
IHZvaWQgc2V0RnJhbWVJZGVudGlmaWVyKEpTT046Ok9iamVjdCogcmVjb3JkLCBGcmFtZSopOwog
CiAgICAgdm9pZCBkaWRDb21wbGV0ZVJlY29yZEVudHJ5KGNvbnN0IFRpbWVsaW5lUmVjb3JkRW50
cnkmKTsKICAgICB2b2lkIGRpZENvbXBsZXRlQ3VycmVudFJlY29yZChUaW1lbGluZVJlY29yZFR5
cGUpOwogCi0gICAgdm9pZCBhZGRSZWNvcmRUb1RpbWVsaW5lKFJlZlB0cjxKU09OOjpPYmplY3Q+
JiYsIFRpbWVsaW5lUmVjb3JkVHlwZSk7CisgICAgdm9pZCBhZGRSZWNvcmRUb1RpbWVsaW5lKFJl
ZjxKU09OOjpPYmplY3Q+JiYsIFRpbWVsaW5lUmVjb3JkVHlwZSk7CiAKICAgICB2b2lkIGxvY2Fs
VG9QYWdlUXVhZChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBMYXlvdXRSZWN0JiwgRmxvYXRR
dWFkKik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5z
cGVjdG9yV29ya2VyQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9J
bnNwZWN0b3JXb3JrZXJBZ2VudC5jcHAKaW5kZXggOTA5YzQ2NmY4N2U5YmZhOGM0YzE3MjhjNDZh
ZDZlN2U1OTA3YjQ2ZS4uMzNjYWEwYWEyMDc5YWQ0MDgxY2MyOTYwNWE1MzUzN2MyNGQ2NmJlZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JXb3Jr
ZXJBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0
b3JXb3JrZXJBZ2VudC5jcHAKQEAgLTUzLDU1ICs1Myw1NiBAQCB2b2lkIEluc3BlY3Rvcldvcmtl
ckFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChEaXNjb25uZWN0UmVhc29uKQog
ewogICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy5zZXRQZXJzaXN0ZW50V29ya2VyQWdlbnQobnVs
bHB0cik7CiAKLSAgICBFcnJvclN0cmluZyBpZ25vcmVkOwotICAgIGRpc2FibGUoaWdub3JlZCk7
CisgICAgZGlzYWJsZSgpOwogfQogCi12b2lkIEluc3BlY3RvcldvcmtlckFnZW50OjplbmFibGUo
RXJyb3JTdHJpbmcmKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yV29y
a2VyQWdlbnQ6OmVuYWJsZSgpCiB7CiAgICAgaWYgKG1fZW5hYmxlZCkKLSAgICAgICAgcmV0dXJu
OworICAgICAgICByZXR1cm4geyB9OwogCiAgICAgbV9lbmFibGVkID0gdHJ1ZTsKIAogICAgIGNv
bm5lY3RUb0FsbFdvcmtlckluc3BlY3RvclByb3hpZXNGb3JQYWdlKCk7CisKKyAgICByZXR1cm4g
eyB9OwogfQogCi12b2lkIEluc3BlY3RvcldvcmtlckFnZW50OjpkaXNhYmxlKEVycm9yU3RyaW5n
JikKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvcldvcmtlckFnZW50Ojpk
aXNhYmxlKCkKIHsKICAgICBpZiAoIW1fZW5hYmxlZCkKLSAgICAgICAgcmV0dXJuOworICAgICAg
ICByZXR1cm4geyB9OwogCiAgICAgbV9lbmFibGVkID0gZmFsc2U7CiAKICAgICBkaXNjb25uZWN0
RnJvbUFsbFdvcmtlckluc3BlY3RvclByb3hpZXMoKTsKKworICAgIHJldHVybiB7IH07CiB9CiAK
LXZvaWQgSW5zcGVjdG9yV29ya2VyQWdlbnQ6OmluaXRpYWxpemVkKEVycm9yU3RyaW5nJiBlcnJv
clN0cmluZywgY29uc3QgU3RyaW5nJiB3b3JrZXJJZCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09y
PHZvaWQ+IEluc3BlY3RvcldvcmtlckFnZW50Ojppbml0aWFsaXplZChjb25zdCBTdHJpbmcmIHdv
cmtlcklkKQogewogICAgIFdvcmtlckluc3BlY3RvclByb3h5KiBwcm94eSA9IG1fY29ubmVjdGVk
UHJveGllcy5nZXQod29ya2VySWQpOwotICAgIGlmICghcHJveHkpIHsKLSAgICAgICAgZXJyb3JT
dHJpbmcgPSAiTWlzc2luZyB3b3JrZXIgZm9yIGdpdmVuIHdvcmtlcklkIl9zOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQorICAgIGlmICghcHJveHkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBl
Y3RlZCgiTWlzc2luZyB3b3JrZXIgZm9yIGdpdmVuIHdvcmtlcklkIl9zKTsKIAogICAgIHByb3h5
LT5yZXN1bWVXb3JrZXJJZlBhdXNlZCgpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJ
bnNwZWN0b3JXb3JrZXJBZ2VudDo6c2VuZE1lc3NhZ2VUb1dvcmtlcihFcnJvclN0cmluZyYgZXJy
b3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgd29ya2VySWQsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkK
K1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvcldvcmtlckFnZW50OjpzZW5k
TWVzc2FnZVRvV29ya2VyKGNvbnN0IFN0cmluZyYgd29ya2VySWQsIGNvbnN0IFN0cmluZyYgbWVz
c2FnZSkKIHsKLSAgICBpZiAoIW1fZW5hYmxlZCkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJX
b3JrZXIgZG9tYWluIG11c3QgYmUgZW5hYmxlZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
KyAgICBpZiAoIW1fZW5hYmxlZCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJXb3Jr
ZXIgZG9tYWluIG11c3QgYmUgZW5hYmxlZCJfcyk7CiAKICAgICBXb3JrZXJJbnNwZWN0b3JQcm94
eSogcHJveHkgPSBtX2Nvbm5lY3RlZFByb3hpZXMuZ2V0KHdvcmtlcklkKTsKLSAgICBpZiAoIXBy
b3h5KSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIk1pc3Npbmcgd29ya2VyIGZvciBnaXZlbiB3
b3JrZXJJZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoIXByb3h5KQorICAg
ICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk1pc3Npbmcgd29ya2VyIGZvciBnaXZlbiB3b3Jr
ZXJJZCJfcyk7CiAKICAgICBwcm94eS0+c2VuZE1lc3NhZ2VUb1dvcmtlckluc3BlY3RvckNvbnRy
b2xsZXIobWVzc2FnZSk7CisKKyAgICByZXR1cm4geyB9OwogfQogCiB2b2lkIEluc3BlY3Rvcldv
cmtlckFnZW50OjpzZW5kTWVzc2FnZUZyb21Xb3JrZXJUb0Zyb250ZW5kKFdvcmtlckluc3BlY3Rv
clByb3h5JiBwcm94eSwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JXb3JrZXJBZ2VudC5oIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JXb3JrZXJBZ2VudC5oCmluZGV4IDE3
ZDFiZWFlOTAxMGYzMjAwMWFjNjRkZDlkODkyYTkzZjEwYTdkNTYuLjYzNmJjODFkZDVhNTBhZWUw
NTNjMmUwNGU2ODY5OWQzZmE2YjY0ZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9hZ2VudHMvSW5zcGVjdG9yV29ya2VyQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvcldvcmtlckFnZW50LmgKQEAgLTM1LDI3ICszNSwyNSBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFBhZ2U7CiAKLXR5cGVkZWYgU3RyaW5nIEVy
cm9yU3RyaW5nOwotCiBjbGFzcyBJbnNwZWN0b3JXb3JrZXJBZ2VudCBmaW5hbCA6IHB1YmxpYyBJ
bnNwZWN0b3JBZ2VudEJhc2UsIHB1YmxpYyBJbnNwZWN0b3I6OldvcmtlckJhY2tlbmREaXNwYXRj
aGVySGFuZGxlciwgcHVibGljIFdvcmtlckluc3BlY3RvclByb3h5OjpQYWdlQ2hhbm5lbCB7CiAg
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW5zcGVjdG9yV29ya2VyQWdlbnQpOwogICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIEluc3BlY3RvcldvcmtlckFnZW50KFBh
Z2VBZ2VudENvbnRleHQmKTsKLSAgICB+SW5zcGVjdG9yV29ya2VyQWdlbnQoKSBvdmVycmlkZTsK
KyAgICB+SW5zcGVjdG9yV29ya2VyQWdlbnQoKTsKIAogICAgIC8vIEluc3BlY3RvckFnZW50QmFz
ZQotICAgIHZvaWQgZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJvbnRl
bmRSb3V0ZXIqLCBJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyKikgb3ZlcnJpZGU7Ci0gICAg
dm9pZCB3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5lY3RS
ZWFzb24pIG92ZXJyaWRlOworICAgIHZvaWQgZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKElu
c3BlY3Rvcjo6RnJvbnRlbmRSb3V0ZXIqLCBJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyKik7
CisgICAgdm9pZCB3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkRpc2Nv
bm5lY3RSZWFzb24pOwogCiAgICAgLy8gV29ya2VyQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyCi0g
ICAgdm9pZCBlbmFibGUoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2b2lkIGRpc2FibGUo
RXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2b2lkIGluaXRpYWxpemVkKEVycm9yU3RyaW5n
JiwgY29uc3QgU3RyaW5nJiB3b3JrZXJJZCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZW5kTWVzc2Fn
ZVRvV29ya2VyKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiB3b3JrZXJJZCwgY29uc3QgU3Ry
aW5nJiBtZXNzYWdlKSBvdmVycmlkZTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0
cmluZ09yPHZvaWQ+IGVuYWJsZSgpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3Ry
aW5nT3I8dm9pZD4gZGlzYWJsZSgpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3Ry
aW5nT3I8dm9pZD4gaW5pdGlhbGl6ZWQoY29uc3QgU3RyaW5nJiB3b3JrZXJJZCk7CisgICAgSW5z
cGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzZW5kTWVzc2FnZVRvV29ya2Vy
KGNvbnN0IFN0cmluZyYgd29ya2VySWQsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7CiAKICAgICAv
LyBXb3JrZXJJbnNwZWN0b3JQcm94eTo6UGFnZUNoYW5uZWwKLSAgICB2b2lkIHNlbmRNZXNzYWdl
RnJvbVdvcmtlclRvRnJvbnRlbmQoV29ya2VySW5zcGVjdG9yUHJveHkmLCBjb25zdCBTdHJpbmcm
IG1lc3NhZ2UpIG92ZXJyaWRlOworICAgIHZvaWQgc2VuZE1lc3NhZ2VGcm9tV29ya2VyVG9Gcm9u
dGVuZChXb3JrZXJJbnNwZWN0b3JQcm94eSYsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7CiAKICAg
ICAvLyBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24KICAgICBib29sIHNob3VsZFdhaXRGb3JEZWJ1
Z2dlck9uU3RhcnQoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9hZ2VudHMvV2ViQ29uc29sZUFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdl
bnRzL1dlYkNvbnNvbGVBZ2VudC5oCmluZGV4IGY3ZDgyNzgwNzBmZTQ3MDI5OWYyZGQ2YmFiNjY0
NjJkNTg1ODg5MDUuLjBiOGYyMGVhYzM0M2I2NjgxN2FjOWYwZjBjNmM4Y2IyMGM5YmFjN2IgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvV2ViQ29uc29sZUFnZW50
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9XZWJDb25zb2xlQWdlbnQu
aApAQCAtMzMsNyArMzMsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBET01XaW5kb3c7
CiBjbGFzcyBSZXNvdXJjZUVycm9yOwogY2xhc3MgUmVzb3VyY2VSZXNwb25zZTsKLXR5cGVkZWYg
U3RyaW5nIEVycm9yU3RyaW5nOwogCiBjbGFzcyBXZWJDb25zb2xlQWdlbnQgOiBwdWJsaWMgSW5z
cGVjdG9yOjpJbnNwZWN0b3JDb25zb2xlQWdlbnQgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KFdlYkNvbnNvbGVBZ2VudCk7CkBAIC00Niw4ICs0NSw2IEBAIHB1YmxpYzoKICAgICB2b2lkIGZy
YW1lV2luZG93RGlzY2FyZGVkKERPTVdpbmRvdyopOwogICAgIHZvaWQgZGlkUmVjZWl2ZVJlc3Bv
bnNlKHVuc2lnbmVkIGxvbmcgcmVxdWVzdElkZW50aWZpZXIsIGNvbnN0IFJlc291cmNlUmVzcG9u
c2UmKTsKICAgICB2b2lkIGRpZEZhaWxMb2FkaW5nKHVuc2lnbmVkIGxvbmcgcmVxdWVzdElkZW50
aWZpZXIsIGNvbnN0IFJlc291cmNlRXJyb3ImKTsKLQotcHJvdGVjdGVkOgogfTsKIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Fn
ZW50cy9XZWJEZWJ1Z2dlckFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2Vu
dHMvV2ViRGVidWdnZXJBZ2VudC5jcHAKaW5kZXggYjkzYTgxZmJmNGY1MDY0NjZhZGIzZTEzYmJl
ODhjYzUzOTIzNWI3ZS4uMWM2MTM1N2FmZGNlMzUwYWUyM2FiYzIwN2YyMjcwNGM5NGViZjRmMyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9XZWJEZWJ1Z2dlckFn
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL1dlYkRlYnVnZ2Vy
QWdlbnQuY3BwCkBAIC00OSwxOCArNDksMTggQEAgYm9vbCBXZWJEZWJ1Z2dlckFnZW50OjplbmFi
bGVkKCkgY29uc3QKICAgICByZXR1cm4gbV9pbnN0cnVtZW50aW5nQWdlbnRzLmVuYWJsZWRXZWJE
ZWJ1Z2dlckFnZW50KCkgPT0gdGhpcyAmJiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjplbmFibGVk
KCk7CiB9CiAKLXZvaWQgV2ViRGVidWdnZXJBZ2VudDo6ZW5hYmxlKCkKK3ZvaWQgV2ViRGVidWdn
ZXJBZ2VudDo6aW50ZXJuYWxFbmFibGUoKQogewogICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy5z
ZXRFbmFibGVkV2ViRGVidWdnZXJBZ2VudCh0aGlzKTsKIAotICAgIEluc3BlY3RvckRlYnVnZ2Vy
QWdlbnQ6OmVuYWJsZSgpOworICAgIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmludGVybmFsRW5h
YmxlKCk7CiB9CiAKLXZvaWQgV2ViRGVidWdnZXJBZ2VudDo6ZGlzYWJsZShib29sIGlzQmVpbmdE
ZXN0cm95ZWQpCit2b2lkIFdlYkRlYnVnZ2VyQWdlbnQ6OmludGVybmFsRGlzYWJsZShib29sIGlz
QmVpbmdEZXN0cm95ZWQpCiB7CiAgICAgbV9pbnN0cnVtZW50aW5nQWdlbnRzLnNldEVuYWJsZWRX
ZWJEZWJ1Z2dlckFnZW50KG51bGxwdHIpOwogCi0gICAgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6
ZGlzYWJsZShpc0JlaW5nRGVzdHJveWVkKTsKKyAgICBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojpp
bnRlcm5hbERpc2FibGUoaXNCZWluZ0Rlc3Ryb3llZCk7CiB9CiAKIHZvaWQgV2ViRGVidWdnZXJB
Z2VudDo6ZGlkQWRkRXZlbnRMaXN0ZW5lcihFdmVudFRhcmdldCYgdGFyZ2V0LCBjb25zdCBBdG9t
U3RyaW5nJiBldmVudFR5cGUsIEV2ZW50TGlzdGVuZXImIGxpc3RlbmVyLCBib29sIGNhcHR1cmUp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL1dlYkRlYnVnZ2Vy
QWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvV2ViRGVidWdnZXJBZ2Vu
dC5oCmluZGV4IDEwYjk2NDg4ODFhYTAxNTY0ZmNiZTcyZTc0ZmZiYWM3OTY4NDU3NjIuLmE5MjM3
MWRhNWQyM2FhMDVlZGI2ODk4NzU5ZWE0MTFlZTc1YTY5OGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvV2ViRGVidWdnZXJBZ2VudC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvV2ViRGVidWdnZXJBZ2VudC5oCkBAIC0zNSw3ICszNSw2
IEBAIGNsYXNzIEV2ZW50VGFyZ2V0OwogY2xhc3MgSW5zdHJ1bWVudGluZ0FnZW50czsKIGNsYXNz
IFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyOwogY2xhc3MgVGltZXJCYXNlOwotdHlwZWRlZiBTdHJp
bmcgRXJyb3JTdHJpbmc7CiAKIGNsYXNzIFdlYkRlYnVnZ2VyQWdlbnQgOiBwdWJsaWMgSW5zcGVj
dG9yOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShX
ZWJEZWJ1Z2dlckFnZW50KTsKQEAgLTU2LDggKzU1LDggQEAgcHVibGljOgogCiBwcm90ZWN0ZWQ6
CiAgICAgV2ViRGVidWdnZXJBZ2VudChXZWJBZ2VudENvbnRleHQmKTsKLSAgICB2b2lkIGVuYWJs
ZSgpIG92ZXJyaWRlOwotICAgIHZvaWQgZGlzYWJsZShib29sIGlzQmVpbmdEZXN0cm95ZWQpIG92
ZXJyaWRlOworICAgIHZvaWQgaW50ZXJuYWxFbmFibGUoKSBvdmVycmlkZTsKKyAgICB2b2lkIGlu
dGVybmFsRGlzYWJsZShib29sIGlzQmVpbmdEZXN0cm95ZWQpIG92ZXJyaWRlOwogCiAgICAgdm9p
ZCBkaWRDbGVhckFzeW5jU3RhY2tUcmFjZURhdGEoKSBmaW5hbDsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9XZWJIZWFwQWdlbnQuY3BwIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2FnZW50cy9XZWJIZWFwQWdlbnQuY3BwCmluZGV4IDVhYTc0NTNkMDk1
NjA3NjI3OGViMDMwZjgwOGRkZjAxNGRhYmZiODUuLjkyNzVlOGY3OWQwMGZlMWExMTgyMWVkOGE4
NjljMGUxN2I0MDgwMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2Vu
dHMvV2ViSGVhcEFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRz
L1dlYkhlYXBBZ2VudC5jcHAKQEAgLTM1LDcgKzM1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
dXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKIAogc3RydWN0IEdhcmJhZ2VDb2xsZWN0aW9uRGF0
YSB7Ci0gICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6SGVhcDo6R2FyYmFnZUNvbGxlY3Rpb246OlR5
cGUgdHlwZTsKKyAgICBQcm90b2NvbDo6SGVhcDo6R2FyYmFnZUNvbGxlY3Rpb246OlR5cGUgdHlw
ZTsKICAgICBTZWNvbmRzIHN0YXJ0VGltZTsKICAgICBTZWNvbmRzIGVuZFRpbWU7CiB9OwpAQCAt
MTAzLDI1ICsxMDMsMjcgQEAgV2ViSGVhcEFnZW50OjpXZWJIZWFwQWdlbnQoV2ViQWdlbnRDb250
ZXh0JiBjb250ZXh0KQogCiBXZWJIZWFwQWdlbnQ6On5XZWJIZWFwQWdlbnQoKSA9IGRlZmF1bHQ7
CiAKLXZvaWQgV2ViSGVhcEFnZW50OjplbmFibGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nKQor
UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gV2ViSGVhcEFnZW50OjplbmFibGUoKQogewot
ICAgIEluc3BlY3RvckhlYXBBZ2VudDo6ZW5hYmxlKGVycm9yU3RyaW5nKTsKKyAgICBhdXRvIHJl
c3VsdCA9IEluc3BlY3RvckhlYXBBZ2VudDo6ZW5hYmxlKCk7CiAKICAgICBpZiAoYXV0byogY29u
c29sZUFnZW50ID0gbV9pbnN0cnVtZW50aW5nQWdlbnRzLndlYkNvbnNvbGVBZ2VudCgpKQogICAg
ICAgICBjb25zb2xlQWdlbnQtPnNldEhlYXBBZ2VudCh0aGlzKTsKKworICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKLXZvaWQgV2ViSGVhcEFnZW50OjpkaXNhYmxlKEVycm9yU3RyaW5nJiBlcnJvclN0
cmluZykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IFdlYkhlYXBBZ2VudDo6ZGlzYWJs
ZSgpCiB7CiAgICAgbV9zZW5kR2FyYmFnZUNvbGxlY3Rpb25FdmVudHNUYXNrLT5yZXNldCgpOwog
CiAgICAgaWYgKGF1dG8qIGNvbnNvbGVBZ2VudCA9IG1faW5zdHJ1bWVudGluZ0FnZW50cy53ZWJD
b25zb2xlQWdlbnQoKSkKICAgICAgICAgY29uc29sZUFnZW50LT5zZXRIZWFwQWdlbnQobnVsbHB0
cik7CiAKLSAgICBJbnNwZWN0b3JIZWFwQWdlbnQ6OmRpc2FibGUoZXJyb3JTdHJpbmcpOworICAg
IHJldHVybiBJbnNwZWN0b3JIZWFwQWdlbnQ6OmRpc2FibGUoKTsKIH0KIAotdm9pZCBXZWJIZWFw
QWdlbnQ6OmRpc3BhdGNoR2FyYmFnZUNvbGxlY3RlZEV2ZW50KEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkhlYXA6OkdhcmJhZ2VDb2xsZWN0aW9uOjpUeXBlIHR5cGUsIFNlY29uZHMgc3RhcnRUaW1lLCBT
ZWNvbmRzIGVuZFRpbWUpCit2b2lkIFdlYkhlYXBBZ2VudDo6ZGlzcGF0Y2hHYXJiYWdlQ29sbGVj
dGVkRXZlbnQoUHJvdG9jb2w6OkhlYXA6OkdhcmJhZ2VDb2xsZWN0aW9uOjpUeXBlIHR5cGUsIFNl
Y29uZHMgc3RhcnRUaW1lLCBTZWNvbmRzIGVuZFRpbWUpCiB7CiAgICAgLy8gRGlzcGF0Y2ggdGhl
IGV2ZW50IGFzeW5jaHJvbm91c2x5IGJlY2F1c2UgdGhpcyBtZXRob2QgbWF5IGJlCiAgICAgLy8g
Y2FsbGVkIGJldHdlZW4gY29sbGVjdGlvbiBhbmQgc3dlZXBpbmcgYW5kIHdlIGRvbid0IHdhbnQg
dG8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvV2ViSGVhcEFn
ZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL1dlYkhlYXBBZ2VudC5oCmlu
ZGV4IDBiYzhlNjRhZjVhODZhNzJkNWY4MDQ0MGZkYjExNjNmZTE3ZTE1NzMuLmEzNWU1N2NjN2E3
MWY4YWY0MTM4NjM3ODdjZWYzNmJlZTQxNmY2YmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9hZ2VudHMvV2ViSGVhcEFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2FnZW50cy9XZWJIZWFwQWdlbnQuaApAQCAtMzMsNyArMzMsNiBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIGNsYXNzIFNlbmRHYXJiYWdlQ29sbGVjdGlvbkV2ZW50c1Rhc2s7CiBzdHJ1
Y3QgR2FyYmFnZUNvbGxlY3Rpb25EYXRhOwotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiAK
IGNsYXNzIFdlYkhlYXBBZ2VudCA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3BlY3RvckhlYXBBZ2Vu
dCB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoV2ViSGVhcEFnZW50KTsKQEAgLTQ0LDggKzQz
LDggQEAgcHVibGljOgogICAgIH5XZWJIZWFwQWdlbnQoKSBvdmVycmlkZTsKIAogICAgIC8vIEhl
YXBCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIKLSAgICB2b2lkIGVuYWJsZShFcnJvclN0cmluZyYp
IG92ZXJyaWRlOwotICAgIHZvaWQgZGlzYWJsZShFcnJvclN0cmluZyYpIG92ZXJyaWRlOworICAg
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZW5hYmxlKCkgb3ZlcnJp
ZGU7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBkaXNhYmxl
KCkgb3ZlcnJpZGU7CiAKIHByb3RlY3RlZDoKICAgICB2b2lkIGRpc3BhdGNoR2FyYmFnZUNvbGxl
Y3RlZEV2ZW50KEluc3BlY3Rvcjo6UHJvdG9jb2w6OkhlYXA6OkdhcmJhZ2VDb2xsZWN0aW9uOjpU
eXBlLCBTZWNvbmRzIHN0YXJ0VGltZSwgU2Vjb25kcyBlbmRUaW1lKSBmaW5hbDsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlQXVkaXRBZ2VudC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZUF1ZGl0QWdlbnQu
Y3BwCmluZGV4IGRkZDUzYmE1ZGZiY2E1NTM3YmJiNmI3YmUwNjUwNTdkNzJmYmFiZDguLjlhY2Zl
NGRkNGIxNjBlZTliMzg5MTBjYzljNzVhMjQxMjRjZWZlZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlQXVkaXRBZ2VudC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VBdWRpdEFnZW50LmNwcApAQCAt
NTYsNyArNTYsNyBAQCBQYWdlQXVkaXRBZ2VudDo6UGFnZUF1ZGl0QWdlbnQoUGFnZUFnZW50Q29u
dGV4dCYgY29udGV4dCkKIAogUGFnZUF1ZGl0QWdlbnQ6On5QYWdlQXVkaXRBZ2VudCgpID0gZGVm
YXVsdDsKIAotSW5qZWN0ZWRTY3JpcHQgUGFnZUF1ZGl0QWdlbnQ6OmluamVjdGVkU2NyaXB0Rm9y
RXZhbChjb25zdCBpbnQqIGV4ZWN1dGlvbkNvbnRleHRJZCkKK0luamVjdGVkU2NyaXB0IFBhZ2VB
dWRpdEFnZW50OjppbmplY3RlZFNjcmlwdEZvckV2YWwoT3B0aW9uYWw8UHJvdG9jb2w6OlJ1bnRp
bWU6OkV4ZWN1dGlvbkNvbnRleHRJZD4mJiBleGVjdXRpb25Db250ZXh0SWQpCiB7CiAgICAgaWYg
KGV4ZWN1dGlvbkNvbnRleHRJZCkKICAgICAgICAgcmV0dXJuIGluamVjdGVkU2NyaXB0TWFuYWdl
cigpLmluamVjdGVkU2NyaXB0Rm9ySWQoKmV4ZWN1dGlvbkNvbnRleHRJZCk7CkBAIC02NSw5ICs2
NSw5IEBAIEluamVjdGVkU2NyaXB0IFBhZ2VBdWRpdEFnZW50OjppbmplY3RlZFNjcmlwdEZvckV2
YWwoY29uc3QgaW50KiBleGVjdXRpb25Db250ZXh0CiAgICAgcmV0dXJuIGluamVjdGVkU2NyaXB0
TWFuYWdlcigpLmluamVjdGVkU2NyaXB0Rm9yKHNjcmlwdFN0YXRlKTsKIH0KIAotSW5qZWN0ZWRT
Y3JpcHQgUGFnZUF1ZGl0QWdlbnQ6OmluamVjdGVkU2NyaXB0Rm9yRXZhbChFcnJvclN0cmluZyYg
ZXJyb3JTdHJpbmcsIGNvbnN0IGludCogZXhlY3V0aW9uQ29udGV4dElkKQorSW5qZWN0ZWRTY3Jp
cHQgUGFnZUF1ZGl0QWdlbnQ6OmluamVjdGVkU2NyaXB0Rm9yRXZhbChQcm90b2NvbDo6RXJyb3JT
dHJpbmcmIGVycm9yU3RyaW5nLCBPcHRpb25hbDxQcm90b2NvbDo6UnVudGltZTo6RXhlY3V0aW9u
Q29udGV4dElkPiYmIGV4ZWN1dGlvbkNvbnRleHRJZCkKIHsKLSAgICBJbmplY3RlZFNjcmlwdCBp
bmplY3RlZFNjcmlwdCA9IGluamVjdGVkU2NyaXB0Rm9yRXZhbChleGVjdXRpb25Db250ZXh0SWQp
OworICAgIEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0ID0gaW5qZWN0ZWRTY3JpcHRGb3JF
dmFsKFdURk1vdmUoZXhlY3V0aW9uQ29udGV4dElkKSk7CiAgICAgaWYgKGluamVjdGVkU2NyaXB0
Lmhhc05vVmFsdWUoKSkgewogICAgICAgICBpZiAoZXhlY3V0aW9uQ29udGV4dElkKQogICAgICAg
ICAgICAgZXJyb3JTdHJpbmcgPSAiTWlzc2luZyBpbmplY3RlZCBzY3JpcHQgZm9yIGdpdmVuIGV4
ZWN1dGlvbkNvbnRleHRJZCJfczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9hZ2VudHMvcGFnZS9QYWdlQXVkaXRBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2FnZW50cy9wYWdlL1BhZ2VBdWRpdEFnZW50LmgKaW5kZXggZGRlYzQ2NTE3ZTFhMDVjYmY1YmY4
ZmZkN2QxYWM4ODhhMDg5NGY3OS4uNjkzZmFjMzI3NDY5YTkwNDRkODcwMTc2ZmFhMmExZDQ5ZmJh
MWIzOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1Bh
Z2VBdWRpdEFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdl
L1BhZ2VBdWRpdEFnZW50LmgKQEAgLTM3LDE2ICszNywxNiBAQCBjbGFzcyBQYWdlQXVkaXRBZ2Vu
dCBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3BlY3RvckF1ZGl0QWdlbnQgewogICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIFBhZ2VBdWRpdEFnZW50KFBhZ2VB
Z2VudENvbnRleHQmKTsKLSAgICB+UGFnZUF1ZGl0QWdlbnQoKSBvdmVycmlkZTsKKyAgICB+UGFn
ZUF1ZGl0QWdlbnQoKTsKIAogcHJpdmF0ZToKLSAgICBJbnNwZWN0b3I6OkluamVjdGVkU2NyaXB0
IGluamVjdGVkU2NyaXB0Rm9yRXZhbChjb25zdCBpbnQqIGV4ZWN1dGlvbkNvbnRleHRJZCk7Ci0g
ICAgSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdEZvckV2YWwoSW5zcGVj
dG9yOjpFcnJvclN0cmluZyYsIGNvbnN0IGludCogZXhlY3V0aW9uQ29udGV4dElkKSBvdmVycmlk
ZTsKKyAgICBJbnNwZWN0b3I6OkluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0Rm9yRXZhbChP
cHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0SWQ+
JiYpOworICAgIEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHRGb3JFdmFs
KEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nJiwgT3B0aW9uYWw8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6UnVudGltZTo6RXhlY3V0aW9uQ29udGV4dElkPiYmKTsKIAotICAgIHZvaWQgcG9w
dWxhdGVBdWRpdE9iamVjdChKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJvbmc8SlNDOjpK
U09iamVjdD4mIGF1ZGl0T2JqZWN0KSBvdmVycmlkZTsKKyAgICB2b2lkIHBvcHVsYXRlQXVkaXRP
YmplY3QoSlNDOjpKU0dsb2JhbE9iamVjdCosIEpTQzo6U3Ryb25nPEpTQzo6SlNPYmplY3Q+JiBh
dWRpdE9iamVjdCk7CiAKLSAgICB2b2lkIG11dGVDb25zb2xlKCkgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCB1bm11dGVDb25zb2xlKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBtdXRlQ29uc29sZSgpOworICAg
IHZvaWQgdW5tdXRlQ29uc29sZSgpOwogCiAgICAgUGFnZSYgbV9pbnNwZWN0ZWRQYWdlOwogfTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlQ29u
c29sZUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdl
Q29uc29sZUFnZW50LmNwcAppbmRleCAxM2ZkMWQ3ZGFiYWE5OWQwYmIwYzQ5ZmY3YmI1ZTUyZjU0
YzY2M2QzLi4xMjEyYjg2NmQ5ZTI4OTk2NzdhOTNmZDcxNmMxZTg2OGQzYzFmZmZiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZUNvbnNvbGVBZ2Vu
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VDb25z
b2xlQWdlbnQuY3BwCkBAIC01NCw3OSArNTQsODMgQEAgUGFnZUNvbnNvbGVBZ2VudDo6UGFnZUNv
bnNvbGVBZ2VudChQYWdlQWdlbnRDb250ZXh0JiBjb250ZXh0KQogCiBQYWdlQ29uc29sZUFnZW50
Ojp+UGFnZUNvbnNvbGVBZ2VudCgpID0gZGVmYXVsdDsKIAotdm9pZCBQYWdlQ29uc29sZUFnZW50
OjpjbGVhck1lc3NhZ2VzKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZykKK1Byb3RvY29sOjpFcnJv
clN0cmluZ09yPHZvaWQ+IFBhZ2VDb25zb2xlQWdlbnQ6OmNsZWFyTWVzc2FnZXMoKQogewogICAg
IGlmIChhdXRvKiBkb21BZ2VudCA9IG1faW5zdHJ1bWVudGluZ0FnZW50cy5wZXJzaXN0ZW50RE9N
QWdlbnQoKSkKICAgICAgICAgZG9tQWdlbnQtPnJlbGVhc2VEYW5nbGluZ05vZGVzKCk7CiAKLSAg
ICBXZWJDb25zb2xlQWdlbnQ6OmNsZWFyTWVzc2FnZXMoZXJyb3JTdHJpbmcpOworICAgIHJldHVy
biBXZWJDb25zb2xlQWdlbnQ6OmNsZWFyTWVzc2FnZXMoKTsKIH0KIAotdm9pZCBQYWdlQ29uc29s
ZUFnZW50OjpnZXRMb2dnaW5nQ2hhbm5lbHMoRXJyb3JTdHJpbmcmLCBSZWZQdHI8SlNPTjo6QXJy
YXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDb25zb2xlOjpDaGFubmVsPj4mIGNoYW5uZWxzKQor
UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkNvbnNv
bGU6OkNoYW5uZWw+Pj4gUGFnZUNvbnNvbGVBZ2VudDo6Z2V0TG9nZ2luZ0NoYW5uZWxzKCkKIHsK
LSAgICBzdGF0aWMgY29uc3Qgc3RydWN0IENoYW5uZWxUYWJsZSB7Ci0gICAgICAgIE5ldmVyRGVz
dHJveWVkPFN0cmluZz4gbmFtZTsKLSAgICAgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6Q29uc29s
ZTo6Q2hhbm5lbFNvdXJjZSBzb3VyY2U7Ci0gICAgfSBjaGFubmVsVGFibGVbXSA9IHsKLSAgICAg
ICAgeyBNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgiV2ViUlRDIiksIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkNvbnNvbGU6OkNoYW5uZWxTb3VyY2U6OldlYlJUQyB9LAotICAgICAgICB7IE1BS0VfU1RB
VElDX1NUUklOR19JTVBMKCJNZWRpYSIpLCBJbnNwZWN0b3I6OlByb3RvY29sOjpDb25zb2xlOjpD
aGFubmVsU291cmNlOjpNZWRpYSB9LAotICAgICAgICB7IE1BS0VfU1RBVElDX1NUUklOR19JTVBM
KCJNZWRpYVNvdXJjZSIpLCBJbnNwZWN0b3I6OlByb3RvY29sOjpDb25zb2xlOjpDaGFubmVsU291
cmNlOjpNZWRpYVNvdXJjZSB9LAotICAgIH07CisgICAgYXV0byBjaGFubmVscyA9IEpTT046OkFy
cmF5T2Y8UHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWw+OjpjcmVhdGUoKTsKIAotICAgIGNoYW5u
ZWxzID0gSlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDb25zb2xlOjpDaGFubmVs
Pjo6Y3JlYXRlKCk7Ci0KLSAgICBzaXplX3QgbGVuZ3RoID0gV1RGX0FSUkFZX0xFTkdUSChjaGFu
bmVsVGFibGUpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAg
ICAgICAgYXV0byogbG9nQ2hhbm5lbCA9IGdldExvZ0NoYW5uZWwoY2hhbm5lbFRhYmxlW2ldLm5h
bWUpOworICAgIGF1dG8gYWRkTG9nQ2hhbm5lbCA9IFsmXSAoUHJvdG9jb2w6OkNvbnNvbGU6OkNo
YW5uZWxTb3VyY2Ugc291cmNlKSB7CisgICAgICAgIGF1dG8qIGxvZ0NoYW5uZWwgPSBnZXRMb2dD
aGFubmVsKFByb3RvY29sOjpIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShzb3VyY2UpKTsK
ICAgICAgICAgaWYgKCFsb2dDaGFubmVsKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAg
IGF1dG8gbGV2ZWwgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpDb25zb2xlOjpDaGFubmVsTGV2ZWw6
Ok9mZjsKKyAgICAgICAgYXV0byBsZXZlbCA9IFByb3RvY29sOjpDb25zb2xlOjpDaGFubmVsTGV2
ZWw6Ok9mZjsKICAgICAgICAgaWYgKGxvZ0NoYW5uZWwtPnN0YXRlICE9IFdURkxvZ0NoYW5uZWxT
dGF0ZTo6T2ZmKSB7CiAgICAgICAgICAgICBzd2l0Y2ggKGxvZ0NoYW5uZWwtPmxldmVsKSB7CiAg
ICAgICAgICAgICBjYXNlIFdURkxvZ0xldmVsOjpBbHdheXM6CiAgICAgICAgICAgICBjYXNlIFdU
RkxvZ0xldmVsOjpFcnJvcjoKICAgICAgICAgICAgIGNhc2UgV1RGTG9nTGV2ZWw6Oldhcm5pbmc6
CiAgICAgICAgICAgICBjYXNlIFdURkxvZ0xldmVsOjpJbmZvOgotICAgICAgICAgICAgICAgIGxl
dmVsID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q29uc29sZTo6Q2hhbm5lbExldmVsOjpCYXNpYzsK
KyAgICAgICAgICAgICAgICBsZXZlbCA9IFByb3RvY29sOjpDb25zb2xlOjpDaGFubmVsTGV2ZWw6
OkJhc2ljOwogICAgICAgICAgICAgICAgIGJyZWFrOworCiAgICAgICAgICAgICBjYXNlIFdURkxv
Z0xldmVsOjpEZWJ1ZzoKLSAgICAgICAgICAgICAgICBsZXZlbCA9IEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkNvbnNvbGU6OkNoYW5uZWxMZXZlbDo6VmVyYm9zZTsKKyAgICAgICAgICAgICAgICBsZXZl
bCA9IFByb3RvY29sOjpDb25zb2xlOjpDaGFubmVsTGV2ZWw6OlZlcmJvc2U7CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBhdXRvIGNo
YW5uZWwgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpDb25zb2xlOjpDaGFubmVsOjpjcmVhdGUoKQot
ICAgICAgICAgICAgLnNldFNvdXJjZShjaGFubmVsVGFibGVbaV0uc291cmNlKQorICAgICAgICBh
dXRvIGNoYW5uZWwgPSBQcm90b2NvbDo6Q29uc29sZTo6Q2hhbm5lbDo6Y3JlYXRlKCkKKyAgICAg
ICAgICAgIC5zZXRTb3VyY2Uoc291cmNlKQogICAgICAgICAgICAgLnNldExldmVsKGxldmVsKQog
ICAgICAgICAgICAgLnJlbGVhc2UoKTsKICAgICAgICAgY2hhbm5lbHMtPmFkZEl0ZW0oV1RGTW92
ZShjaGFubmVsKSk7Ci0gICAgfQorICAgIH07CisgICAgYWRkTG9nQ2hhbm5lbChQcm90b2NvbDo6
Q29uc29sZTo6Q2hhbm5lbFNvdXJjZTo6WE1MKTsKKyAgICBhZGRMb2dDaGFubmVsKFByb3RvY29s
OjpDb25zb2xlOjpDaGFubmVsU291cmNlOjpKYXZhU2NyaXB0KTsKKyAgICBhZGRMb2dDaGFubmVs
KFByb3RvY29sOjpDb25zb2xlOjpDaGFubmVsU291cmNlOjpOZXR3b3JrKTsKKyAgICBhZGRMb2dD
aGFubmVsKFByb3RvY29sOjpDb25zb2xlOjpDaGFubmVsU291cmNlOjpDb25zb2xlQVBJKTsKKyAg
ICBhZGRMb2dDaGFubmVsKFByb3RvY29sOjpDb25zb2xlOjpDaGFubmVsU291cmNlOjpTdG9yYWdl
KTsKKyAgICBhZGRMb2dDaGFubmVsKFByb3RvY29sOjpDb25zb2xlOjpDaGFubmVsU291cmNlOjpB
cHBjYWNoZSk7CisgICAgYWRkTG9nQ2hhbm5lbChQcm90b2NvbDo6Q29uc29sZTo6Q2hhbm5lbFNv
dXJjZTo6UmVuZGVyaW5nKTsKKyAgICBhZGRMb2dDaGFubmVsKFByb3RvY29sOjpDb25zb2xlOjpD
aGFubmVsU291cmNlOjpDU1MpOworICAgIGFkZExvZ0NoYW5uZWwoUHJvdG9jb2w6OkNvbnNvbGU6
OkNoYW5uZWxTb3VyY2U6OlNlY3VyaXR5KTsKKyAgICBhZGRMb2dDaGFubmVsKFByb3RvY29sOjpD
b25zb2xlOjpDaGFubmVsU291cmNlOjpDb250ZW50QmxvY2tlcik7CisgICAgYWRkTG9nQ2hhbm5l
bChQcm90b2NvbDo6Q29uc29sZTo6Q2hhbm5lbFNvdXJjZTo6TWVkaWEpOworICAgIGFkZExvZ0No
YW5uZWwoUHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWxTb3VyY2U6Ok1lZGlhU291cmNlKTsKKyAg
ICBhZGRMb2dDaGFubmVsKFByb3RvY29sOjpDb25zb2xlOjpDaGFubmVsU291cmNlOjpXZWJSVEMp
OworICAgIGFkZExvZ0NoYW5uZWwoUHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWxTb3VyY2U6OklU
UERlYnVnKTsKKyAgICBhZGRMb2dDaGFubmVsKFByb3RvY29sOjpDb25zb2xlOjpDaGFubmVsU291
cmNlOjpBZENsaWNrQXR0cmlidXRpb24pOworICAgIGFkZExvZ0NoYW5uZWwoUHJvdG9jb2w6OkNv
bnNvbGU6OkNoYW5uZWxTb3VyY2U6Ok90aGVyKTsKKworICAgIHJldHVybiBXVEZNb3ZlKGNoYW5u
ZWxzKTsKIH0KIAotc3RhdGljIE9wdGlvbmFsPHN0ZDo6cGFpcjxXVEZMb2dDaGFubmVsU3RhdGUs
IFdURkxvZ0xldmVsPj4gY2hhbm5lbENvbmZpZ3VyYXRpb25Gb3JTdHJpbmcoY29uc3QgU3RyaW5n
JiBsZXZlbFN0cmluZykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IFBhZ2VDb25zb2xl
QWdlbnQ6OnNldExvZ2dpbmdDaGFubmVsTGV2ZWwoUHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWxT
b3VyY2Ugc291cmNlLCBQcm90b2NvbDo6Q29uc29sZTo6Q2hhbm5lbExldmVsIGxldmVsKQogewot
ICAgIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGxldmVsU3RyaW5nLCAib2ZmIikpCi0gICAg
ICAgIHJldHVybiB7IHsgV1RGTG9nQ2hhbm5lbFN0YXRlOjpPZmYsIFdURkxvZ0xldmVsOjpFcnJv
ciB9IH07CisgICAgc3dpdGNoIChsZXZlbCkgeworICAgIGNhc2UgUHJvdG9jb2w6OkNvbnNvbGU6
OkNoYW5uZWxMZXZlbDo6T2ZmOgorICAgICAgICBtX2luc3BlY3RlZFBhZ2UuY29uZmlndXJlTG9n
Z2luZ0NoYW5uZWwoUHJvdG9jb2w6OkhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKHNvdXJj
ZSksIFdURkxvZ0NoYW5uZWxTdGF0ZTo6T2ZmLCBXVEZMb2dMZXZlbDo6RXJyb3IpOworICAgICAg
ICByZXR1cm4geyB9OwogCi0gICAgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UobGV2ZWxTdHJp
bmcsICJiYXNpYyIpKQotICAgICAgICByZXR1cm4geyB7IFdURkxvZ0NoYW5uZWxTdGF0ZTo6T24s
IFdURkxvZ0xldmVsOjpJbmZvIH0gfTsKKyAgICBjYXNlIFByb3RvY29sOjpDb25zb2xlOjpDaGFu
bmVsTGV2ZWw6OkJhc2ljOgorICAgICAgICBtX2luc3BlY3RlZFBhZ2UuY29uZmlndXJlTG9nZ2lu
Z0NoYW5uZWwoUHJvdG9jb2w6OkhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKHNvdXJjZSks
IFdURkxvZ0NoYW5uZWxTdGF0ZTo6T24sIFdURkxvZ0xldmVsOjpJbmZvKTsKKyAgICAgICAgcmV0
dXJuIHsgfTsKIAotICAgIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGxldmVsU3RyaW5nLCAi
dmVyYm9zZSIpKQotICAgICAgICByZXR1cm4geyB7IFdURkxvZ0NoYW5uZWxTdGF0ZTo6T24sIFdU
RkxvZ0xldmVsOjpEZWJ1ZyB9IH07Ci0KLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi12
b2lkIFBhZ2VDb25zb2xlQWdlbnQ6OnNldExvZ2dpbmdDaGFubmVsTGV2ZWwoRXJyb3JTdHJpbmcm
IGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGNoYW5uZWxOYW1lLCBjb25zdCBTdHJpbmcmIGNo
YW5uZWxMZXZlbCkKLXsKLSAgICBhdXRvIGNvbmZpZ3VyYXRpb24gPSBjaGFubmVsQ29uZmlndXJh
dGlvbkZvclN0cmluZyhjaGFubmVsTGV2ZWwpOwotICAgIGlmICghY29uZmlndXJhdGlvbikgewot
ICAgICAgICBlcnJvclN0cmluZyA9IG1ha2VTdHJpbmcoIlVua25vd24gY2hhbm5lbExldmVsOiAi
X3MsIGNoYW5uZWxMZXZlbCk7Ci0gICAgICAgIHJldHVybjsKKyAgICBjYXNlIFByb3RvY29sOjpD
b25zb2xlOjpDaGFubmVsTGV2ZWw6OlZlcmJvc2U6CisgICAgICAgIG1faW5zcGVjdGVkUGFnZS5j
b25maWd1cmVMb2dnaW5nQ2hhbm5lbChQcm90b2NvbDo6SGVscGVyczo6Z2V0RW51bUNvbnN0YW50
VmFsdWUoc291cmNlKSwgV1RGTG9nQ2hhbm5lbFN0YXRlOjpPbiwgV1RGTG9nTGV2ZWw6OkRlYnVn
KTsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKLSAgICBtX2luc3BlY3RlZFBhZ2UuY29u
ZmlndXJlTG9nZ2luZ0NoYW5uZWwoY2hhbm5lbE5hbWUsIGNvbmZpZ3VyYXRpb24udmFsdWUoKS5m
aXJzdCwgY29uZmlndXJhdGlvbi52YWx1ZSgpLnNlY29uZCk7CisgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgcmV0dXJuIHsgfTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VDb25zb2xl
QWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlQ29uc29s
ZUFnZW50LmgKaW5kZXggNGM0NWYyZGFkMGY3YzFiNDA0NTM5ZmU0ZjU3ZTVhODZkYjIwNjMxOC4u
NDFmZTc2ZDAzMjA3MGUwZDQxMDNlNDBhMmMxNDRjZTM3OTgxYzgzMyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VDb25zb2xlQWdlbnQuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZUNvbnNvbGVBZ2VudC5o
CkBAIC00MSwxMiArNDEsMTIgQEAgY2xhc3MgUGFnZUNvbnNvbGVBZ2VudCBmaW5hbCA6IHB1Ymxp
YyBXZWJDb25zb2xlQWdlbnQgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGlj
OgogICAgIFBhZ2VDb25zb2xlQWdlbnQoUGFnZUFnZW50Q29udGV4dCYpOwotICAgIH5QYWdlQ29u
c29sZUFnZW50KCkgb3ZlcnJpZGU7CisgICAgflBhZ2VDb25zb2xlQWdlbnQoKTsKIAogICAgIC8v
IENvbnNvbGVCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIKLSAgICB2b2lkIGNsZWFyTWVzc2FnZXMo
RXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2b2lkIGdldExvZ2dpbmdDaGFubmVscyhFcnJv
clN0cmluZyYsIFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNvbnNv
bGU6OkNoYW5uZWw+PiYpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0TG9nZ2luZ0NoYW5uZWxMZXZl
bChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgY2hhbm5lbCwgY29uc3QgU3RyaW5nJiBsZXZl
bCkgb3ZlcnJpZGU7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lk
PiBjbGVhck1lc3NhZ2VzKCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdP
cjxSZWY8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDb25zb2xlOjpDaGFubmVs
Pj4+IGdldExvZ2dpbmdDaGFubmVscygpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8dm9pZD4gc2V0TG9nZ2luZ0NoYW5uZWxMZXZlbChJbnNwZWN0b3I6OlByb3RvY29s
OjpDb25zb2xlOjpDaGFubmVsU291cmNlLCBJbnNwZWN0b3I6OlByb3RvY29sOjpDb25zb2xlOjpD
aGFubmVsTGV2ZWwpOwogCiBwcml2YXRlOgogICAgIEluc3RydW1lbnRpbmdBZ2VudHMmIG1faW5z
dHJ1bWVudGluZ0FnZW50czsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9h
Z2VudHMvcGFnZS9QYWdlRE9NRGVidWdnZXJBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZURPTURlYnVnZ2VyQWdlbnQuY3BwCmluZGV4IDdjNWZmYTRl
MzgzZjUyY2FiNWUyYTI3ZmQ5MTU5MDlmYmNlZjUxNGMuLmM4OGJiZGMwM2QyNTQxMGZiNjk1OGIw
ZjA5YWZjNWJmMTg4ZGIyNTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9h
Z2VudHMvcGFnZS9QYWdlRE9NRGVidWdnZXJBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VET01EZWJ1Z2dlckFnZW50LmNwcApAQCAtNjksODQg
KzY5LDc0IEBAIHZvaWQgUGFnZURPTURlYnVnZ2VyQWdlbnQ6OmRpc2FibGUoKQogICAgIEluc3Bl
Y3RvckRPTURlYnVnZ2VyQWdlbnQ6OmRpc2FibGUoKTsKIH0KIAotdm9pZCBQYWdlRE9NRGVidWdn
ZXJBZ2VudDo6c2V0RE9NQnJlYWtwb2ludChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBu
b2RlSWQsIGNvbnN0IFN0cmluZyYgdHlwZVN0cmluZywgY29uc3QgSlNPTjo6T2JqZWN0KiBvcHRp
b25zUGF5bG9hZCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IFBhZ2VET01EZWJ1Z2dl
ckFnZW50OjpzZXRET01CcmVha3BvaW50KFByb3RvY29sOjpET006Ok5vZGVJZCBub2RlSWQsIFBy
b3RvY29sOjpET01EZWJ1Z2dlcjo6RE9NQnJlYWtwb2ludFR5cGUgdHlwZSwgUmVmUHRyPEpTT046
Ok9iamVjdD4mJiBvcHRpb25zKQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0
cmluZzsKKwogICAgIGF1dG8qIGRvbUFnZW50ID0gbV9pbnN0cnVtZW50aW5nQWdlbnRzLnBlcnNp
c3RlbnRET01BZ2VudCgpOwotICAgIGlmICghZG9tQWdlbnQpIHsKLSAgICAgICAgZXJyb3JTdHJp
bmcgPSAiRE9NIGRvbWFpbiBtdXN0IGJlIGVuYWJsZWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9CisgICAgaWYgKCFkb21BZ2VudCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJE
T00gZG9tYWluIG11c3QgYmUgZW5hYmxlZCJfcyk7CiAKICAgICBOb2RlKiBub2RlID0gZG9tQWdl
bnQtPmFzc2VydE5vZGUoZXJyb3JTdHJpbmcsIG5vZGVJZCk7CiAgICAgaWYgKCFub2RlKQotICAg
ICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7
CiAKLSAgICBhdXRvIHR5cGUgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpJbnNwZWN0b3JIZWxwZXJz
OjpwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NRGVidWdn
ZXI6OkRPTUJyZWFrcG9pbnRUeXBlPih0eXBlU3RyaW5nKTsKLSAgICBpZiAoIXR5cGUpIHsKLSAg
ICAgICAgZXJyb3JTdHJpbmcgPSBtYWtlU3RyaW5nKCJVbmtub3duIHR5cGU6ICJfcywgdHlwZVN0
cmluZyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBhdXRvIGJyZWFrcG9pbnQgPSBJ
bnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkZWJ1Z2dlckJyZWFrcG9pbnRGcm9tUGF5bG9hZChlcnJv
clN0cmluZywgb3B0aW9uc1BheWxvYWQpOworICAgIGF1dG8gYnJlYWtwb2ludCA9IEluc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQ6OmRlYnVnZ2VyQnJlYWtwb2ludEZyb21QYXlsb2FkKGVycm9yU3RyaW5n
LCBXVEZNb3ZlKG9wdGlvbnMpKTsKICAgICBpZiAoIWJyZWFrcG9pbnQpCi0gICAgICAgIHJldHVy
bjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAotICAgIHN3
aXRjaCAoKnR5cGUpIHsKLSAgICBjYXNlIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTURlYnVnZ2Vy
OjpET01CcmVha3BvaW50VHlwZTo6U3VidHJlZU1vZGlmaWVkOgorICAgIHN3aXRjaCAodHlwZSkg
eworICAgIGNhc2UgUHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpET01CcmVha3BvaW50VHlwZTo6U3Vi
dHJlZU1vZGlmaWVkOgogICAgICAgICBpZiAoIW1fZG9tU3VidHJlZU1vZGlmaWVkQnJlYWtwb2lu
dHMuYWRkKG5vZGUsIGJyZWFrcG9pbnQucmVsZWFzZU5vbk51bGwoKSkpCi0gICAgICAgICAgICBl
cnJvclN0cmluZyA9ICJCcmVha3BvaW50IGZvciBnaXZlbiBub2RlIGFuZCBnaXZlbiB0eXBlIGFs
cmVhZHkgZXhpc3RzIl9zOwotICAgICAgICByZXR1cm47CisgICAgICAgICAgICByZXR1cm4gbWFr
ZVVuZXhwZWN0ZWQoIkJyZWFrcG9pbnQgZm9yIGdpdmVuIG5vZGUgYW5kIGdpdmVuIHR5cGUgYWxy
ZWFkeSBleGlzdHMiX3MpOworICAgICAgICByZXR1cm4geyB9OwogCi0gICAgY2FzZSBJbnNwZWN0
b3I6OlByb3RvY29sOjpET01EZWJ1Z2dlcjo6RE9NQnJlYWtwb2ludFR5cGU6OkF0dHJpYnV0ZU1v
ZGlmaWVkOgorICAgIGNhc2UgUHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpET01CcmVha3BvaW50VHlw
ZTo6QXR0cmlidXRlTW9kaWZpZWQ6CiAgICAgICAgIGlmICghbV9kb21BdHRyaWJ1dGVNb2RpZmll
ZEJyZWFrcG9pbnRzLmFkZChub2RlLCBicmVha3BvaW50LnJlbGVhc2VOb25OdWxsKCkpKQotICAg
ICAgICAgICAgZXJyb3JTdHJpbmcgPSAiQnJlYWtwb2ludCBmb3IgZ2l2ZW4gbm9kZSBhbmQgZ2l2
ZW4gdHlwZSBhbHJlYWR5IGV4aXN0cyJfczsKLSAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
cmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJCcmVha3BvaW50IGZvciBnaXZlbiBub2RlIGFuZCBnaXZl
biB0eXBlIGFscmVhZHkgZXhpc3RzIl9zKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGNh
c2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NRGVidWdnZXI6OkRPTUJyZWFrcG9pbnRUeXBlOjpO
b2RlUmVtb3ZlZDoKKyAgICBjYXNlIFByb3RvY29sOjpET01EZWJ1Z2dlcjo6RE9NQnJlYWtwb2lu
dFR5cGU6Ok5vZGVSZW1vdmVkOgogICAgICAgICBpZiAoIW1fZG9tTm9kZVJlbW92ZWRCcmVha3Bv
aW50cy5hZGQobm9kZSwgYnJlYWtwb2ludC5yZWxlYXNlTm9uTnVsbCgpKSkKLSAgICAgICAgICAg
IGVycm9yU3RyaW5nID0gIkJyZWFrcG9pbnQgZm9yIGdpdmVuIG5vZGUgYW5kIGdpdmVuIHR5cGUg
YWxyZWFkeSBleGlzdHMiX3M7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVybiBt
YWtlVW5leHBlY3RlZCgiQnJlYWtwb2ludCBmb3IgZ2l2ZW4gbm9kZSBhbmQgZ2l2ZW4gdHlwZSBh
bHJlYWR5IGV4aXN0cyJfcyk7CisgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCiAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJOb3Qgc3VwcG9y
dGVkIik7CiB9CiAKLXZvaWQgUGFnZURPTURlYnVnZ2VyQWdlbnQ6OnJlbW92ZURPTUJyZWFrcG9p
bnQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkLCBjb25zdCBTdHJpbmcmIHR5
cGVTdHJpbmcpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBQYWdlRE9NRGVidWdnZXJB
Z2VudDo6cmVtb3ZlRE9NQnJlYWtwb2ludChQcm90b2NvbDo6RE9NOjpOb2RlSWQgbm9kZUlkLCBQ
cm90b2NvbDo6RE9NRGVidWdnZXI6OkRPTUJyZWFrcG9pbnRUeXBlIHR5cGUpCiB7CisgICAgUHJv
dG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAgICAgYXV0byogZG9tQWdlbnQgPSBt
X2luc3RydW1lbnRpbmdBZ2VudHMucGVyc2lzdGVudERPTUFnZW50KCk7Ci0gICAgaWYgKCFkb21B
Z2VudCkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJET00gZG9tYWluIG11c3QgYmUgZW5hYmxl
ZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoIWRvbUFnZW50KQorICAgICAg
ICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkRPTSBkb21haW4gbXVzdCBiZSBlbmFibGVkIl9zKTsK
IAogICAgIE5vZGUqIG5vZGUgPSBkb21BZ2VudC0+YXNzZXJ0Tm9kZShlcnJvclN0cmluZywgbm9k
ZUlkKTsKICAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1h
a2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAotICAgIGF1dG8gdHlwZSA9IEluc3BlY3Rvcjo6
UHJvdG9jb2w6Okluc3BlY3RvckhlbHBlcnM6OnBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNw
ZWN0b3I6OlByb3RvY29sOjpET01EZWJ1Z2dlcjo6RE9NQnJlYWtwb2ludFR5cGU+KHR5cGVTdHJp
bmcpOwotICAgIGlmICghdHlwZSkgewotICAgICAgICBlcnJvclN0cmluZyA9IG1ha2VTdHJpbmco
IlVua25vd24gdHlwZTogIl9zLCB0eXBlU3RyaW5nKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIHN3aXRjaCAoKnR5cGUpIHsKLSAgICBjYXNlIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRP
TURlYnVnZ2VyOjpET01CcmVha3BvaW50VHlwZTo6U3VidHJlZU1vZGlmaWVkOgorICAgIHN3aXRj
aCAodHlwZSkgeworICAgIGNhc2UgUHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpET01CcmVha3BvaW50
VHlwZTo6U3VidHJlZU1vZGlmaWVkOgogICAgICAgICBpZiAoIW1fZG9tU3VidHJlZU1vZGlmaWVk
QnJlYWtwb2ludHMucmVtb3ZlKG5vZGUpKQotICAgICAgICAgICAgZXJyb3JTdHJpbmcgPSAiQnJl
YWtwb2ludCBmb3IgZ2l2ZW4gbm9kZSBhbmQgZ2l2ZW4gdHlwZSBtaXNzaW5nIl9zOwotICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkJyZWFrcG9pbnQg
Zm9yIGdpdmVuIG5vZGUgYW5kIGdpdmVuIHR5cGUgbWlzc2luZyJfcyk7CisgICAgICAgIHJldHVy
biB7IH07CiAKLSAgICBjYXNlIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpET01C
cmVha3BvaW50VHlwZTo6QXR0cmlidXRlTW9kaWZpZWQ6CisgICAgY2FzZSBQcm90b2NvbDo6RE9N
RGVidWdnZXI6OkRPTUJyZWFrcG9pbnRUeXBlOjpBdHRyaWJ1dGVNb2RpZmllZDoKICAgICAgICAg
aWYgKCFtX2RvbUF0dHJpYnV0ZU1vZGlmaWVkQnJlYWtwb2ludHMucmVtb3ZlKG5vZGUpKQotICAg
ICAgICAgICAgZXJyb3JTdHJpbmcgPSAiQnJlYWtwb2ludCBmb3IgZ2l2ZW4gbm9kZSBhbmQgZ2l2
ZW4gdHlwZSBtaXNzaW5nIl9zOwotICAgICAgICByZXR1cm47CisgICAgICAgICAgICByZXR1cm4g
bWFrZVVuZXhwZWN0ZWQoIkJyZWFrcG9pbnQgZm9yIGdpdmVuIG5vZGUgYW5kIGdpdmVuIHR5cGUg
bWlzc2luZyJfcyk7CisgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBjYXNlIEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpET01CcmVha3BvaW50VHlwZTo6Tm9kZVJlbW92ZWQ6Cisg
ICAgY2FzZSBQcm90b2NvbDo6RE9NRGVidWdnZXI6OkRPTUJyZWFrcG9pbnRUeXBlOjpOb2RlUmVt
b3ZlZDoKICAgICAgICAgaWYgKCFtX2RvbU5vZGVSZW1vdmVkQnJlYWtwb2ludHMucmVtb3ZlKG5v
ZGUpKQotICAgICAgICAgICAgZXJyb3JTdHJpbmcgPSAiQnJlYWtwb2ludCBmb3IgZ2l2ZW4gbm9k
ZSBhbmQgZ2l2ZW4gdHlwZSBtaXNzaW5nIl9zOwotICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkJyZWFrcG9pbnQgZm9yIGdpdmVuIG5vZGUgYW5kIGdp
dmVuIHR5cGUgbWlzc2luZyJfcyk7CisgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCiAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJOb3Qgc3Vw
cG9ydGVkIik7CiB9CiAKIHZvaWQgUGFnZURPTURlYnVnZ2VyQWdlbnQ6Om1haW5GcmFtZU5hdmln
YXRlZCgpCkBAIC0yMTMsNyArMjAzLDcgQEAgdm9pZCBQYWdlRE9NRGVidWdnZXJBZ2VudDo6d2ls
bEluc2VydERPTU5vZGUoTm9kZSYgcGFyZW50KQogCiAgICAgQVNTRVJUKGNsb3Nlc3RCcmVha3Bv
aW50T3duZXIpOwogCi0gICAgYXV0byBwYXVzZURhdGEgPSBidWlsZFBhdXNlRGF0YUZvckRPTUJy
ZWFrcG9pbnQoSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NRGVidWdnZXI6OkRPTUJyZWFrcG9pbnRU
eXBlOjpTdWJ0cmVlTW9kaWZpZWQsICpjbG9zZXN0QnJlYWtwb2ludE93bmVyKTsKKyAgICBhdXRv
IHBhdXNlRGF0YSA9IGJ1aWxkUGF1c2VEYXRhRm9yRE9NQnJlYWtwb2ludChQcm90b2NvbDo6RE9N
RGVidWdnZXI6OkRPTUJyZWFrcG9pbnRUeXBlOjpTdWJ0cmVlTW9kaWZpZWQsICpjbG9zZXN0QnJl
YWtwb2ludE93bmVyKTsKICAgICBwYXVzZURhdGEtPnNldEJvb2xlYW4oImluc2VydGlvbiIsIHRy
dWUpOwogICAgIC8vIEZJWE1FOiA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMjEzNDk5PiBXZWIgSW5z
cGVjdG9yOiBhbGxvdyBET00gbm9kZXMgdG8gYmUgaW5zdHJ1bWVudGVkIGF0IGFueSBwb2ludCwg
cmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZSBtYWluIGRvY3VtZW50IGhhcyBhbHNvIGJlZW4gaW5z
dHJ1bWVudGVkCiAgICAgLy8gSW5jbHVkZSB0aGUgbmV3IGNoaWxkIG5vZGUgSUQgc28gdGhlIGZy
b250ZW5kIGNhbiBzaG93IHRoZSBub2RlIHRoYXQncyBhYm91dCB0byBiZSBpbnNlcnRlZC4KQEAg
LTIzMCw3ICsyMjAsNyBAQCB2b2lkIFBhZ2VET01EZWJ1Z2dlckFnZW50Ojp3aWxsUmVtb3ZlRE9N
Tm9kZShOb2RlJiBub2RlKQogCiAgICAgT3B0aW9uYWw8c2l6ZV90PiBjbG9zZXN0RGlzdGFuY2U7
CiAgICAgUmVmUHRyPEpTQzo6QnJlYWtwb2ludD4gY2xvc2VzdEJyZWFrcG9pbnQ7Ci0gICAgT3B0
aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NRGVidWdnZXI6OkRPTUJyZWFrcG9pbnRUeXBl
PiBjbG9zZXN0QnJlYWtwb2ludFR5cGU7CisgICAgT3B0aW9uYWw8UHJvdG9jb2w6OkRPTURlYnVn
Z2VyOjpET01CcmVha3BvaW50VHlwZT4gY2xvc2VzdEJyZWFrcG9pbnRUeXBlOwogICAgIE5vZGUq
IGNsb3Nlc3RCcmVha3BvaW50T3duZXIgPSBudWxscHRyOwogCiAgICAgZm9yIChhdXRvIFticmVh
a3BvaW50T3duZXIsIGJyZWFrcG9pbnRdIDogbV9kb21Ob2RlUmVtb3ZlZEJyZWFrcG9pbnRzKSB7
CkBAIC0yNDEsNyArMjMxLDcgQEAgdm9pZCBQYWdlRE9NRGVidWdnZXJBZ2VudDo6d2lsbFJlbW92
ZURPTU5vZGUoTm9kZSYgbm9kZSkKICAgICAgICAgaWYgKCFjbG9zZXN0RGlzdGFuY2UgfHwgZGlz
dGFuY2UgPCBjbG9zZXN0RGlzdGFuY2UpIHsKICAgICAgICAgICAgIGNsb3Nlc3REaXN0YW5jZSA9
IGRpc3RhbmNlOwogICAgICAgICAgICAgY2xvc2VzdEJyZWFrcG9pbnQgPSBicmVha3BvaW50LmNv
cHlSZWYoKTsKLSAgICAgICAgICAgIGNsb3Nlc3RCcmVha3BvaW50VHlwZSA9IEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpET01CcmVha3BvaW50VHlwZTo6Tm9kZVJlbW92ZWQ7Cisg
ICAgICAgICAgICBjbG9zZXN0QnJlYWtwb2ludFR5cGUgPSBQcm90b2NvbDo6RE9NRGVidWdnZXI6
OkRPTUJyZWFrcG9pbnRUeXBlOjpOb2RlUmVtb3ZlZDsKICAgICAgICAgICAgIGNsb3Nlc3RCcmVh
a3BvaW50T3duZXIgPSBicmVha3BvaW50T3duZXI7CiAgICAgICAgIH0KICAgICB9CkBAIC0yNTUs
NyArMjQ1LDcgQEAgdm9pZCBQYWdlRE9NRGVidWdnZXJBZ2VudDo6d2lsbFJlbW92ZURPTU5vZGUo
Tm9kZSYgbm9kZSkKICAgICAgICAgICAgIGlmICghY2xvc2VzdERpc3RhbmNlIHx8IGRpc3RhbmNl
IDwgY2xvc2VzdERpc3RhbmNlKSB7CiAgICAgICAgICAgICAgICAgY2xvc2VzdERpc3RhbmNlID0g
ZGlzdGFuY2U7CiAgICAgICAgICAgICAgICAgY2xvc2VzdEJyZWFrcG9pbnQgPSBicmVha3BvaW50
LmNvcHlSZWYoKTsKLSAgICAgICAgICAgICAgICBjbG9zZXN0QnJlYWtwb2ludFR5cGUgPSBJbnNw
ZWN0b3I6OlByb3RvY29sOjpET01EZWJ1Z2dlcjo6RE9NQnJlYWtwb2ludFR5cGU6OlN1YnRyZWVN
b2RpZmllZDsKKyAgICAgICAgICAgICAgICBjbG9zZXN0QnJlYWtwb2ludFR5cGUgPSBQcm90b2Nv
bDo6RE9NRGVidWdnZXI6OkRPTUJyZWFrcG9pbnRUeXBlOjpTdWJ0cmVlTW9kaWZpZWQ7CiAgICAg
ICAgICAgICAgICAgY2xvc2VzdEJyZWFrcG9pbnRPd25lciA9IGJyZWFrcG9pbnRPd25lcjsKICAg
ICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMjk2LDcgKzI4Niw3IEBAIHZvaWQgUGFnZURPTURl
YnVnZ2VyQWdlbnQ6OndpbGxNb2RpZnlET01BdHRyKEVsZW1lbnQmIGVsZW1lbnQpCiAgICAgaWYg
KGl0ID09IG1fZG9tQXR0cmlidXRlTW9kaWZpZWRCcmVha3BvaW50cy5lbmQoKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgYXV0byBwYXVzZURhdGEgPSBidWlsZFBhdXNlRGF0YUZvckRPTUJyZWFr
cG9pbnQoSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NRGVidWdnZXI6OkRPTUJyZWFrcG9pbnRUeXBl
OjpBdHRyaWJ1dGVNb2RpZmllZCwgZWxlbWVudCk7CisgICAgYXV0byBwYXVzZURhdGEgPSBidWls
ZFBhdXNlRGF0YUZvckRPTUJyZWFrcG9pbnQoUHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpET01CcmVh
a3BvaW50VHlwZTo6QXR0cmlidXRlTW9kaWZpZWQsIGVsZW1lbnQpOwogICAgIG1fZGVidWdnZXJB
Z2VudC0+YnJlYWtQcm9ncmFtKEluc3BlY3Rvcjo6RGVidWdnZXJGcm9udGVuZERpc3BhdGNoZXI6
OlJlYXNvbjo6RE9NLCBXVEZNb3ZlKHBhdXNlRGF0YSksIGl0LT52YWx1ZS5jb3B5UmVmKCkpOwog
fQogCkBAIC0zMzMsMjcgKzMyMywyOCBAQCB2b2lkIFBhZ2VET01EZWJ1Z2dlckFnZW50Ojp3aWxs
SW52YWxpZGF0ZVN0eWxlQXR0cihFbGVtZW50JiBlbGVtZW50KQogICAgIGlmIChpdCA9PSBtX2Rv
bUF0dHJpYnV0ZU1vZGlmaWVkQnJlYWtwb2ludHMuZW5kKCkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIGF1dG8gcGF1c2VEYXRhID0gYnVpbGRQYXVzZURhdGFGb3JET01CcmVha3BvaW50KEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpET01CcmVha3BvaW50VHlwZTo6QXR0cmlidXRl
TW9kaWZpZWQsIGVsZW1lbnQpOworICAgIGF1dG8gcGF1c2VEYXRhID0gYnVpbGRQYXVzZURhdGFG
b3JET01CcmVha3BvaW50KFByb3RvY29sOjpET01EZWJ1Z2dlcjo6RE9NQnJlYWtwb2ludFR5cGU6
OkF0dHJpYnV0ZU1vZGlmaWVkLCBlbGVtZW50KTsKICAgICBtX2RlYnVnZ2VyQWdlbnQtPmJyZWFr
UHJvZ3JhbShJbnNwZWN0b3I6OkRlYnVnZ2VyRnJvbnRlbmREaXNwYXRjaGVyOjpSZWFzb246OkRP
TSwgV1RGTW92ZShwYXVzZURhdGEpLCBpdC0+dmFsdWUuY29weVJlZigpKTsKIH0KIAotdm9pZCBQ
YWdlRE9NRGVidWdnZXJBZ2VudDo6c2V0QW5pbWF0aW9uRnJhbWVCcmVha3BvaW50KEVycm9yU3Ry
aW5nJiBlcnJvclN0cmluZywgUmVmUHRyPEpTQzo6QnJlYWtwb2ludD4mJiBicmVha3BvaW50KQor
Ym9vbCBQYWdlRE9NRGVidWdnZXJBZ2VudDo6c2V0QW5pbWF0aW9uRnJhbWVCcmVha3BvaW50KFBy
b3RvY29sOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIFJlZlB0cjxKU0M6OkJyZWFrcG9pbnQ+
JiYgYnJlYWtwb2ludCkKIHsKICAgICBpZiAoIW1fcGF1c2VPbkFsbEFuaW1hdGlvbkZyYW1lc0Jy
ZWFrcG9pbnQgPT0gIWJyZWFrcG9pbnQpIHsKICAgICAgICAgZXJyb3JTdHJpbmcgPSBtX3BhdXNl
T25BbGxBbmltYXRpb25GcmFtZXNCcmVha3BvaW50ID8gIkJyZWFrcG9pbnQgZm9yIEFuaW1hdGlv
bkZyYW1lIGFscmVhZHkgZXhpc3RzIl9zIDogIkJyZWFrcG9pbnQgZm9yIEFuaW1hdGlvbkZyYW1l
IG1pc3NpbmciX3M7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IH0KIAogICAgIG1fcGF1c2VPbkFsbEFuaW1hdGlvbkZyYW1lc0JyZWFrcG9pbnQgPSBXVEZNb3Zl
KGJyZWFrcG9pbnQpOworICAgIHJldHVybiB0cnVlOwogfQogCi1SZWY8SlNPTjo6T2JqZWN0PiBQ
YWdlRE9NRGVidWdnZXJBZ2VudDo6YnVpbGRQYXVzZURhdGFGb3JET01CcmVha3BvaW50KEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpET01CcmVha3BvaW50VHlwZSBicmVha3BvaW50
VHlwZSwgTm9kZSYgYnJlYWtwb2ludE93bmVyKQorUmVmPEpTT046Ok9iamVjdD4gUGFnZURPTURl
YnVnZ2VyQWdlbnQ6OmJ1aWxkUGF1c2VEYXRhRm9yRE9NQnJlYWtwb2ludChQcm90b2NvbDo6RE9N
RGVidWdnZXI6OkRPTUJyZWFrcG9pbnRUeXBlIGJyZWFrcG9pbnRUeXBlLCBOb2RlJiBicmVha3Bv
aW50T3duZXIpCiB7CiAgICAgQVNTRVJUKG1fZGVidWdnZXJBZ2VudC0+YnJlYWtwb2ludHNBY3Rp
dmUoKSk7CiAgICAgQVNTRVJUKG1fZG9tU3VidHJlZU1vZGlmaWVkQnJlYWtwb2ludHMuY29udGFp
bnMoJmJyZWFrcG9pbnRPd25lcikgfHwgbV9kb21BdHRyaWJ1dGVNb2RpZmllZEJyZWFrcG9pbnRz
LmNvbnRhaW5zKCZicmVha3BvaW50T3duZXIpIHx8IG1fZG9tTm9kZVJlbW92ZWRCcmVha3BvaW50
cy5jb250YWlucygmYnJlYWtwb2ludE93bmVyKSk7CiAKICAgICBhdXRvIHBhdXNlRGF0YSA9IEpT
T046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgcGF1c2VEYXRhLT5zZXRTdHJpbmcoInR5cGUiLCBJ
bnNwZWN0b3I6OlByb3RvY29sOjpJbnNwZWN0b3JIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1
ZShicmVha3BvaW50VHlwZSkpOworICAgIHBhdXNlRGF0YS0+c2V0U3RyaW5nKCJ0eXBlIiwgUHJv
dG9jb2w6OkhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKGJyZWFrcG9pbnRUeXBlKSk7CiAg
ICAgaWYgKGF1dG8qIGRvbUFnZW50ID0gbV9pbnN0cnVtZW50aW5nQWdlbnRzLnBlcnNpc3RlbnRE
T01BZ2VudCgpKSB7CiAgICAgICAgIGlmIChhdXRvIGJyZWFrcG9pbnRPd25lck5vZGVJZCA9IGRv
bUFnZW50LT5wdXNoTm9kZVRvRnJvbnRlbmQoJmJyZWFrcG9pbnRPd25lcikpCiAgICAgICAgICAg
ICBwYXVzZURhdGEtPnNldEludGVnZXIoIm5vZGVJZCIsIGJyZWFrcG9pbnRPd25lck5vZGVJZCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZURP
TURlYnVnZ2VyQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9Q
YWdlRE9NRGVidWdnZXJBZ2VudC5oCmluZGV4IGFkMDFjNjc3ZTVkMjIyNWEwNjVjZjAxMDQ1MTU2
OWIxNzk0ZDY5YTkuLmQ4NzI4MjkyNWVjNjkzMTBlMGJjMGU3ODgzY2RjYTUwOGQxMDM1MjIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlRE9NRGVi
dWdnZXJBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9Q
YWdlRE9NRGVidWdnZXJBZ2VudC5oCkBAIC0zNiwyMSArMzYsMTkgQEAgY2xhc3MgRWxlbWVudDsK
IGNsYXNzIEZyYW1lOwogY2xhc3MgTm9kZTsKIAotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7
Ci0KIGNsYXNzIFBhZ2VET01EZWJ1Z2dlckFnZW50IGZpbmFsIDogcHVibGljIEluc3BlY3RvckRP
TURlYnVnZ2VyQWdlbnQgewogcHVibGljOgogICAgIFBhZ2VET01EZWJ1Z2dlckFnZW50KFBhZ2VB
Z2VudENvbnRleHQmLCBJbnNwZWN0b3I6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQqKTsKLSAgICB+
UGFnZURPTURlYnVnZ2VyQWdlbnQoKSBvdmVycmlkZTsKKyAgICB+UGFnZURPTURlYnVnZ2VyQWdl
bnQoKTsKIAotICAgIGJvb2wgZW5hYmxlZCgpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgZW5h
YmxlZCgpIGNvbnN0OwogCiAgICAgLy8gRE9NRGVidWdnZXJCYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXIKLSAgICB2b2lkIHNldERPTUJyZWFrcG9pbnQoRXJyb3JTdHJpbmcmLCBpbnQgbm9kZUlkLCBj
b25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IEpTT046Ok9iamVjdCogb3B0aW9ucykgb3ZlcnJpZGU7
Ci0gICAgdm9pZCByZW1vdmVET01CcmVha3BvaW50KEVycm9yU3RyaW5nJiwgaW50IG5vZGVJZCwg
Y29uc3QgU3RyaW5nJiB0eXBlKSBvdmVycmlkZTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpF
cnJvclN0cmluZ09yPHZvaWQ+IHNldERPTUJyZWFrcG9pbnQoSW5zcGVjdG9yOjpQcm90b2NvbDo6
RE9NOjpOb2RlSWQsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpET01CcmVha3Bv
aW50VHlwZSwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBvcHRpb25zKTsKKyAgICBJbnNwZWN0b3I6
OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHJlbW92ZURPTUJyZWFrcG9pbnQoSW5zcGVj
dG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTURlYnVn
Z2VyOjpET01CcmVha3BvaW50VHlwZSk7CiAKICAgICAvLyBJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b24KLSAgICB2b2lkIG1haW5GcmFtZU5hdmlnYXRlZCgpIGZpbmFsOworICAgIHZvaWQgbWFpbkZy
YW1lTmF2aWdhdGVkKCk7CiAgICAgdm9pZCBmcmFtZURvY3VtZW50VXBkYXRlZChGcmFtZSYpOwog
ICAgIHZvaWQgd2lsbEluc2VydERPTU5vZGUoTm9kZSYgcGFyZW50KTsKICAgICB2b2lkIHdpbGxS
ZW1vdmVET01Ob2RlKE5vZGUmKTsKQEAgLTYxLDEwICs1OSwxMCBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBkaWRGaXJlQW5pbWF0aW9uRnJhbWUoKTsKIAogcHJpdmF0ZToKLSAgICB2b2lkIGVuYWJsZSgp
IG92ZXJyaWRlOwotICAgIHZvaWQgZGlzYWJsZSgpIG92ZXJyaWRlOworICAgIHZvaWQgZW5hYmxl
KCk7CisgICAgdm9pZCBkaXNhYmxlKCk7CiAKLSAgICB2b2lkIHNldEFuaW1hdGlvbkZyYW1lQnJl
YWtwb2ludChFcnJvclN0cmluZyYsIFJlZlB0cjxKU0M6OkJyZWFrcG9pbnQ+JiYpIG92ZXJyaWRl
OworICAgIGJvb2wgc2V0QW5pbWF0aW9uRnJhbWVCcmVha3BvaW50KEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkVycm9yU3RyaW5nJiwgUmVmUHRyPEpTQzo6QnJlYWtwb2ludD4mJik7CiAKICAgICBSZWY8
SlNPTjo6T2JqZWN0PiBidWlsZFBhdXNlRGF0YUZvckRPTUJyZWFrcG9pbnQoSW5zcGVjdG9yOjpQ
cm90b2NvbDo6RE9NRGVidWdnZXI6OkRPTUJyZWFrcG9pbnRUeXBlLCBOb2RlJiBicmVha3BvaW50
T3duZXIpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3Bh
Z2UvUGFnZURlYnVnZ2VyQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50
cy9wYWdlL1BhZ2VEZWJ1Z2dlckFnZW50LmNwcAppbmRleCAwYzIwMzk4MjczM2I0ZWU4YmFiZDA1
NThmYTMzYjJhMWRjNGY4ZjI1Li42MTg3MjY4YmQyNzUxODFlOThmNDVlZTBmYTdlMTZhNzUwOWJj
MTYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFn
ZURlYnVnZ2VyQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMv
cGFnZS9QYWdlRGVidWdnZXJBZ2VudC5jcHAKQEAgLTY4LDI2ICs2OCwyNSBAQCBib29sIFBhZ2VE
ZWJ1Z2dlckFnZW50OjplbmFibGVkKCkgY29uc3QKICAgICByZXR1cm4gbV9pbnN0cnVtZW50aW5n
QWdlbnRzLmVuYWJsZWRQYWdlRGVidWdnZXJBZ2VudCgpID09IHRoaXMgJiYgV2ViRGVidWdnZXJB
Z2VudDo6ZW5hYmxlZCgpOwogfQogCi12b2lkIFBhZ2VEZWJ1Z2dlckFnZW50OjpldmFsdWF0ZU9u
Q2FsbEZyYW1lKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBjYWxsRnJh
bWVJZCwgY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBjb25zdCBTdHJpbmcqIG9iamVjdEdyb3Vw
LCBjb25zdCBib29sKiBpbmNsdWRlQ29tbWFuZExpbmVBUEksIGNvbnN0IGJvb2wqIGRvTm90UGF1
c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29sZSwgY29uc3QgYm9vbCogcmV0dXJuQnlWYWx1ZSwg
Y29uc3QgYm9vbCogZ2VuZXJhdGVQcmV2aWV3LCBjb25zdCBib29sKiBzYXZlUmVzdWx0LCBjb25z
dCBib29sKiBlbXVsYXRlVXNlckdlc3R1cmUsIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVt
b3RlT2JqZWN0PiYgcmVzdWx0LCBPcHRpb25hbDxib29sPiYgd2FzVGhyb3duLCBPcHRpb25hbDxp
bnQ+JiBzYXZlZFJlc3VsdEluZGV4KQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8c3RkOjp0dXBs
ZTxSZWY8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4sIE9wdGlvbmFsPGJvb2w+IC8q
IHdhc1Rocm93biAqLywgT3B0aW9uYWw8aW50PiAvKiBzYXZlZFJlc3VsdEluZGV4ICovPj4gUGFn
ZURlYnVnZ2VyQWdlbnQ6OmV2YWx1YXRlT25DYWxsRnJhbWUoY29uc3QgUHJvdG9jb2w6OkRlYnVn
Z2VyOjpDYWxsRnJhbWVJZCYgY2FsbEZyYW1lSWQsIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwg
Y29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCwgT3B0aW9uYWw8Ym9vbD4mJiBpbmNsdWRlQ29tbWFu
ZExpbmVBUEksIE9wdGlvbmFsPGJvb2w+JiYgZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVD
b25zb2xlLCBPcHRpb25hbDxib29sPiYmIHJldHVybkJ5VmFsdWUsIE9wdGlvbmFsPGJvb2w+JiYg
Z2VuZXJhdGVQcmV2aWV3LCBPcHRpb25hbDxib29sPiYmIHNhdmVSZXN1bHQsIE9wdGlvbmFsPGJv
b2w+JiYgZW11bGF0ZVVzZXJHZXN0dXJlKQogewotICAgIGF1dG8gc2hvdWxkRW11bGF0ZVVzZXJH
ZXN0dXJlID0gZW11bGF0ZVVzZXJHZXN0dXJlICYmICplbXVsYXRlVXNlckdlc3R1cmU7Ci0gICAg
VXNlckdlc3R1cmVFbXVsYXRpb25TY29wZSB1c2VyR2VzdHVyZVNjb3BlKG1faW5zcGVjdGVkUGFn
ZSwgc2hvdWxkRW11bGF0ZVVzZXJHZXN0dXJlKTsKKyAgICBVc2VyR2VzdHVyZUVtdWxhdGlvblNj
b3BlIHVzZXJHZXN0dXJlU2NvcGUobV9pbnNwZWN0ZWRQYWdlLCBlbXVsYXRlVXNlckdlc3R1cmUg
JiYgKmVtdWxhdGVVc2VyR2VzdHVyZSk7CiAKLSAgICBXZWJEZWJ1Z2dlckFnZW50OjpldmFsdWF0
ZU9uQ2FsbEZyYW1lKGVycm9yU3RyaW5nLCBjYWxsRnJhbWVJZCwgZXhwcmVzc2lvbiwgb2JqZWN0
R3JvdXAsIGluY2x1ZGVDb21tYW5kTGluZUFQSSwgZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11
dGVDb25zb2xlLCByZXR1cm5CeVZhbHVlLCBnZW5lcmF0ZVByZXZpZXcsIHNhdmVSZXN1bHQsIGVt
dWxhdGVVc2VyR2VzdHVyZSwgcmVzdWx0LCB3YXNUaHJvd24sIHNhdmVkUmVzdWx0SW5kZXgpOwor
ICAgIHJldHVybiBXZWJEZWJ1Z2dlckFnZW50OjpldmFsdWF0ZU9uQ2FsbEZyYW1lKGNhbGxGcmFt
ZUlkLCBleHByZXNzaW9uLCBvYmplY3RHcm91cCwgV1RGTW92ZShpbmNsdWRlQ29tbWFuZExpbmVB
UEkpLCBXVEZNb3ZlKGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29sZSksIFdURk1v
dmUocmV0dXJuQnlWYWx1ZSksIFdURk1vdmUoZ2VuZXJhdGVQcmV2aWV3KSwgV1RGTW92ZShzYXZl
UmVzdWx0KSwgV1RGTW92ZShlbXVsYXRlVXNlckdlc3R1cmUpKTsKIH0KIAotdm9pZCBQYWdlRGVi
dWdnZXJBZ2VudDo6ZW5hYmxlKCkKK3ZvaWQgUGFnZURlYnVnZ2VyQWdlbnQ6OmludGVybmFsRW5h
YmxlKCkKIHsKICAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMuc2V0RW5hYmxlZFBhZ2VEZWJ1Z2dl
ckFnZW50KHRoaXMpOwogCi0gICAgV2ViRGVidWdnZXJBZ2VudDo6ZW5hYmxlKCk7CisgICAgV2Vi
RGVidWdnZXJBZ2VudDo6aW50ZXJuYWxFbmFibGUoKTsKIH0KIAotdm9pZCBQYWdlRGVidWdnZXJB
Z2VudDo6ZGlzYWJsZShib29sIGlzQmVpbmdEZXN0cm95ZWQpCit2b2lkIFBhZ2VEZWJ1Z2dlckFn
ZW50OjppbnRlcm5hbERpc2FibGUoYm9vbCBpc0JlaW5nRGVzdHJveWVkKQogewogICAgIG1faW5z
dHJ1bWVudGluZ0FnZW50cy5zZXRFbmFibGVkUGFnZURlYnVnZ2VyQWdlbnQobnVsbHB0cik7CiAK
LSAgICBXZWJEZWJ1Z2dlckFnZW50OjpkaXNhYmxlKGlzQmVpbmdEZXN0cm95ZWQpOworICAgIFdl
YkRlYnVnZ2VyQWdlbnQ6OmludGVybmFsRGlzYWJsZShpc0JlaW5nRGVzdHJveWVkKTsKIH0KIAog
U3RyaW5nIFBhZ2VEZWJ1Z2dlckFnZW50Ojpzb3VyY2VNYXBVUkxGb3JTY3JpcHQoY29uc3QgSlND
OjpEZWJ1Z2dlcjo6U2NyaXB0JiBzY3JpcHQpCkBAIC0xMjYsNyArMTI1LDcgQEAgdm9pZCBQYWdl
RGVidWdnZXJBZ2VudDo6YnJlYWtwb2ludEFjdGlvbkxvZyhKU0M6OkpTR2xvYmFsT2JqZWN0KiBs
ZXhpY2FsR2xvYmFsT2IKICAgICBtX2luc3BlY3RlZFBhZ2UuY29uc29sZSgpLmFkZE1lc3NhZ2Uo
TWVzc2FnZVNvdXJjZTo6SlMsIE1lc3NhZ2VMZXZlbDo6TG9nLCBtZXNzYWdlLCBjcmVhdGVTY3Jp
cHRDYWxsU3RhY2sobGV4aWNhbEdsb2JhbE9iamVjdCkpOwogfQogCi1JbmplY3RlZFNjcmlwdCBQ
YWdlRGVidWdnZXJBZ2VudDo6aW5qZWN0ZWRTY3JpcHRGb3JFdmFsKEVycm9yU3RyaW5nJiBlcnJv
clN0cmluZywgY29uc3QgaW50KiBleGVjdXRpb25Db250ZXh0SWQpCitJbmplY3RlZFNjcmlwdCBQ
YWdlRGVidWdnZXJBZ2VudDo6aW5qZWN0ZWRTY3JpcHRGb3JFdmFsKFByb3RvY29sOjpFcnJvclN0
cmluZyYgZXJyb3JTdHJpbmcsIE9wdGlvbmFsPFByb3RvY29sOjpSdW50aW1lOjpFeGVjdXRpb25D
b250ZXh0SWQ+JiYgZXhlY3V0aW9uQ29udGV4dElkKQogewogICAgIGlmICghZXhlY3V0aW9uQ29u
dGV4dElkKSB7CiAgICAgICAgIEpTQzo6SlNHbG9iYWxPYmplY3QqIHNjcmlwdFN0YXRlID0gbWFp
bldvcmxkRXhlY1N0YXRlKCZtX2luc3BlY3RlZFBhZ2UubWFpbkZyYW1lKCkpOwpAQCAtMTUzLDgg
KzE1Miw3IEBAIHZvaWQgUGFnZURlYnVnZ2VyQWdlbnQ6Om1haW5GcmFtZVN0YXJ0ZWRMb2FkaW5n
KCkKICAgICBpZiAoaXNQYXVzZWQoKSkgewogICAgICAgICBzZXRTdXBwcmVzc0FsbFBhdXNlcyh0
cnVlKTsKIAotICAgICAgICBFcnJvclN0cmluZyBpZ25vcmVkOwotICAgICAgICByZXN1bWUoaWdu
b3JlZCk7CisgICAgICAgIHJlc3VtZSgpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VEZWJ1Z2dlckFnZW50LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZURlYnVnZ2VyQWdlbnQuaAppbmRl
eCA0YzI3ZGQxYzc0YjEyZTg1N2I2Y2Y2NTEwZjg5OTc2MDdhMTY2MjA3Li5iZmViZTkzNjJjNDkz
NWUxMDFlMWExZjEzYzdhMDJiZTE1M2M5ZWI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZURlYnVnZ2VyQWdlbnQuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZURlYnVnZ2VyQWdlbnQuaApAQCAtNDUsMTQg
KzQ1LDE0IEBAIGNsYXNzIFBhZ2VEZWJ1Z2dlckFnZW50IGZpbmFsIDogcHVibGljIFdlYkRlYnVn
Z2VyQWdlbnQgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIFBh
Z2VEZWJ1Z2dlckFnZW50KFBhZ2VBZ2VudENvbnRleHQmKTsKLSAgICB+UGFnZURlYnVnZ2VyQWdl
bnQoKSBvdmVycmlkZTsKLSAgICBib29sIGVuYWJsZWQoKSBjb25zdCBmaW5hbDsKKyAgICB+UGFn
ZURlYnVnZ2VyQWdlbnQoKTsKKyAgICBib29sIGVuYWJsZWQoKSBjb25zdDsKIAogICAgIC8vIERl
YnVnZ2VyQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyCi0gICAgdm9pZCBldmFsdWF0ZU9uQ2FsbEZy
YW1lKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBjYWxsRnJhbWVJZCwgY29uc3QgU3RyaW5n
JiBleHByZXNzaW9uLCBjb25zdCBTdHJpbmcqIG9iamVjdEdyb3VwLCBjb25zdCBib29sKiBpbmNs
dWRlQ29tbWFuZExpbmVBUEksIGNvbnN0IGJvb2wqIGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRN
dXRlQ29uc29sZSwgY29uc3QgYm9vbCogcmV0dXJuQnlWYWx1ZSwgY29uc3QgYm9vbCogZ2VuZXJh
dGVQcmV2aWV3LCBjb25zdCBib29sKiBzYXZlUmVzdWx0LCBjb25zdCBib29sKiBlbXVsYXRlVXNl
ckdlc3R1cmUsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmpl
Y3Q+JiByZXN1bHQsIE9wdGlvbmFsPGJvb2w+JiB3YXNUaHJvd24sIE9wdGlvbmFsPGludD4mIHNh
dmVkUmVzdWx0SW5kZXgpIG92ZXJyaWRlOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8c3RkOjp0dXBsZTxSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6UmVt
b3RlT2JqZWN0PiwgT3B0aW9uYWw8Ym9vbD4gLyogd2FzVGhyb3duICovLCBPcHRpb25hbDxpbnQ+
IC8qIHNhdmVkUmVzdWx0SW5kZXggKi8+PiBldmFsdWF0ZU9uQ2FsbEZyYW1lKGNvbnN0IEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpDYWxsRnJhbWVJZCYsIGNvbnN0IFN0cmluZyYgZXhw
cmVzc2lvbiwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCwgT3B0aW9uYWw8Ym9vbD4mJiBpbmNs
dWRlQ29tbWFuZExpbmVBUEksIE9wdGlvbmFsPGJvb2w+JiYgZG9Ob3RQYXVzZU9uRXhjZXB0aW9u
c0FuZE11dGVDb25zb2xlLCBPcHRpb25hbDxib29sPiYmIHJldHVybkJ5VmFsdWUsIE9wdGlvbmFs
PGJvb2w+JiYgZ2VuZXJhdGVQcmV2aWV3LCBPcHRpb25hbDxib29sPiYmIHNhdmVSZXN1bHQsIE9w
dGlvbmFsPGJvb2w+JiYgZW11bGF0ZVVzZXJHZXN0dXJlKTsKIAogICAgIC8vIEpTQzo6RGVidWdn
ZXI6Ok9ic2VydmVyCi0gICAgdm9pZCBicmVha3BvaW50QWN0aW9uTG9nKEpTQzo6SlNHbG9iYWxP
YmplY3QqLCBjb25zdCBTdHJpbmcmIGRhdGEpIGZpbmFsOworICAgIHZvaWQgYnJlYWtwb2ludEFj
dGlvbkxvZyhKU0M6OkpTR2xvYmFsT2JqZWN0KiwgY29uc3QgU3RyaW5nJiBkYXRhKTsKIAogICAg
IC8vIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbgogICAgIHZvaWQgZGlkQ2xlYXJXaW5kb3dPYmpl
Y3RJbldvcmxkKEZyYW1lJiwgRE9NV3JhcHBlcldvcmxkJik7CkBAIC02NCwxNSArNjQsMTUgQEAg
cHVibGljOgogICAgIHZvaWQgZGlkQ2FuY2VsQW5pbWF0aW9uRnJhbWUoaW50IGNhbGxiYWNrSWQp
OwogCiBwcml2YXRlOgotICAgIHZvaWQgZW5hYmxlKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkaXNh
YmxlKGJvb2wgaXNCZWluZ0Rlc3Ryb3llZCkgb3ZlcnJpZGU7CisgICAgdm9pZCBpbnRlcm5hbEVu
YWJsZSgpOworICAgIHZvaWQgaW50ZXJuYWxEaXNhYmxlKGJvb2wgaXNCZWluZ0Rlc3Ryb3llZCk7
CiAKLSAgICBTdHJpbmcgc291cmNlTWFwVVJMRm9yU2NyaXB0KGNvbnN0IEpTQzo6RGVidWdnZXI6
OlNjcmlwdCYpIG92ZXJyaWRlOworICAgIFN0cmluZyBzb3VyY2VNYXBVUkxGb3JTY3JpcHQoY29u
c3QgSlNDOjpEZWJ1Z2dlcjo6U2NyaXB0Jik7CiAKLSAgICB2b2lkIG11dGVDb25zb2xlKCkgb3Zl
cnJpZGU7Ci0gICAgdm9pZCB1bm11dGVDb25zb2xlKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBtdXRl
Q29uc29sZSgpOworICAgIHZvaWQgdW5tdXRlQ29uc29sZSgpOwogCi0gICAgSW5zcGVjdG9yOjpJ
bmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdEZvckV2YWwoRXJyb3JTdHJpbmcmLCBjb25zdCBp
bnQqIGV4ZWN1dGlvbkNvbnRleHRJZCkgb3ZlcnJpZGU7CisgICAgSW5zcGVjdG9yOjpJbmplY3Rl
ZFNjcmlwdCBpbmplY3RlZFNjcmlwdEZvckV2YWwoSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JT
dHJpbmcmLCBPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpFeGVjdXRpb25D
b250ZXh0SWQ+JiYpOwogCiAgICAgUGFnZSYgbV9pbnNwZWN0ZWRQYWdlOwogfTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlSGVhcEFnZW50LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlSGVhcEFnZW50LmNw
cAppbmRleCA0OTIxOGVmMTI4M2ViZDRkZDc1NDIxMTM2OWIzNDlhNDgyNTIyZDk4Li40MDM2YTIz
YzY4NTA3ZTU5NGFiMmU5NzRmNWI2MmRiODY3Yzc4NzYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZUhlYXBBZ2VudC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VIZWFwQWdlbnQuY3BwCkBAIC0zOSwx
NiArMzksMjAgQEAgUGFnZUhlYXBBZ2VudDo6UGFnZUhlYXBBZ2VudChQYWdlQWdlbnRDb250ZXh0
JiBjb250ZXh0KQogCiBQYWdlSGVhcEFnZW50Ojp+UGFnZUhlYXBBZ2VudCgpID0gZGVmYXVsdDsK
IAotdm9pZCBQYWdlSGVhcEFnZW50OjplbmFibGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nKQor
UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gUGFnZUhlYXBBZ2VudDo6ZW5hYmxlKCkKIHsK
LSAgICBXZWJIZWFwQWdlbnQ6OmVuYWJsZShlcnJvclN0cmluZyk7CisgICAgYXV0byByZXN1bHQg
PSBXZWJIZWFwQWdlbnQ6OmVuYWJsZSgpOworCiAgICAgbV9pbnN0cnVtZW50aW5nQWdlbnRzLnNl
dEVuYWJsZWRQYWdlSGVhcEFnZW50KHRoaXMpOworCisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAot
dm9pZCBQYWdlSGVhcEFnZW50OjpkaXNhYmxlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZykKK1By
b3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IFBhZ2VIZWFwQWdlbnQ6OmRpc2FibGUoKQogewog
ICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy5zZXRFbmFibGVkUGFnZUhlYXBBZ2VudChudWxscHRy
KTsKLSAgICBXZWJIZWFwQWdlbnQ6OmRpc2FibGUoZXJyb3JTdHJpbmcpOworCisgICAgcmV0dXJu
IFdlYkhlYXBBZ2VudDo6ZGlzYWJsZSgpOwogfQogCiB2b2lkIFBhZ2VIZWFwQWdlbnQ6Om1haW5G
cmFtZU5hdmlnYXRlZCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdl
bnRzL3BhZ2UvUGFnZUhlYXBBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50
cy9wYWdlL1BhZ2VIZWFwQWdlbnQuaAppbmRleCAxYmQ2Y2EwZmM5ZWYxNWExZDdhMjUyODQyOTVh
OGUxOWU4NWYxMGRlLi5mMjZmZjg0YjM4Yjk0Yzk3MmQ5ZjQ2Y2M5YzRhNzRlYWZmNzRjN2FiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZUhlYXBB
Z2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlSGVh
cEFnZW50LmgKQEAgLTMxLDE4ICszMSwxNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXR5
cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCiBjbGFzcyBQYWdlSGVhcEFnZW50IGZpbmFsIDog
cHVibGljIFdlYkhlYXBBZ2VudCB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUGFnZUhlYXBB
Z2VudCk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgUGFnZUhl
YXBBZ2VudChQYWdlQWdlbnRDb250ZXh0Jik7Ci0gICAgflBhZ2VIZWFwQWdlbnQoKSBvdmVycmlk
ZTsKKyAgICB+UGFnZUhlYXBBZ2VudCgpOwogCiAgICAgLy8gSGVhcEJhY2tlbmREaXNwYXRjaGVy
SGFuZGxlcgotICAgIHZvaWQgZW5hYmxlKEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBkaXNhYmxlKEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7CisgICAgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBlbmFibGUoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29s
OjpFcnJvclN0cmluZ09yPHZvaWQ+IGRpc2FibGUoKTsKIAogICAgIC8vIEluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbgogICAgIHZvaWQgbWFpbkZyYW1lTmF2aWdhdGVkKCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZU5ldHdvcmtBZ2VudC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZU5ldHdvcmtBZ2VudC5j
cHAKaW5kZXggMmM2NWI4MTA0OTRiYmViNzNkNTM0ZTY2MmFjMzExOTNmNDBjM2M2OC4uOWZlMTM5
OWMzYjcyNjIzNTUyYjQyM2IwMDMzZTMzZjk4MWMzYjNkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VOZXR3b3JrQWdlbnQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlTmV0d29ya0FnZW50LmNwcApA
QCAtNDcsNyArNDcsNyBAQCBQYWdlTmV0d29ya0FnZW50OjpQYWdlTmV0d29ya0FnZW50KFBhZ2VB
Z2VudENvbnRleHQmIGNvbnRleHQpCiAKIFBhZ2VOZXR3b3JrQWdlbnQ6On5QYWdlTmV0d29ya0Fn
ZW50KCkgPSBkZWZhdWx0OwogCi1TdHJpbmcgUGFnZU5ldHdvcmtBZ2VudDo6bG9hZGVySWRlbnRp
ZmllcihEb2N1bWVudExvYWRlciogbG9hZGVyKQorUHJvdG9jb2w6Ok5ldHdvcms6OkxvYWRlcklk
IFBhZ2VOZXR3b3JrQWdlbnQ6OmxvYWRlcklkZW50aWZpZXIoRG9jdW1lbnRMb2FkZXIqIGxvYWRl
cikKIHsKICAgICBpZiAobG9hZGVyKSB7CiAgICAgICAgIGlmIChhdXRvKiBwYWdlQWdlbnQgPSBt
X2luc3RydW1lbnRpbmdBZ2VudHMuZW5hYmxlZFBhZ2VBZ2VudCgpKQpAQCAtNTYsNyArNTYsNyBA
QCBTdHJpbmcgUGFnZU5ldHdvcmtBZ2VudDo6bG9hZGVySWRlbnRpZmllcihEb2N1bWVudExvYWRl
ciogbG9hZGVyKQogICAgIHJldHVybiB7IH07CiB9CiAKLVN0cmluZyBQYWdlTmV0d29ya0FnZW50
OjpmcmFtZUlkZW50aWZpZXIoRG9jdW1lbnRMb2FkZXIqIGxvYWRlcikKK1Byb3RvY29sOjpOZXR3
b3JrOjpGcmFtZUlkIFBhZ2VOZXR3b3JrQWdlbnQ6OmZyYW1lSWRlbnRpZmllcihEb2N1bWVudExv
YWRlciogbG9hZGVyKQogewogICAgIGlmIChsb2FkZXIpIHsKICAgICAgICAgaWYgKGF1dG8qIHBh
Z2VBZ2VudCA9IG1faW5zdHJ1bWVudGluZ0FnZW50cy5lbmFibGVkUGFnZUFnZW50KCkpCkBAIC05
MSwxMiArOTEsMTIgQEAgVmVjdG9yPFdlYlNvY2tldCo+IFBhZ2VOZXR3b3JrQWdlbnQ6OmFjdGl2
ZVdlYlNvY2tldHMoY29uc3QgTG9ja0hvbGRlciYgbG9jaykKICAgICByZXR1cm4gd2ViU29ja2V0
czsKIH0KIAotdm9pZCBQYWdlTmV0d29ya0FnZW50OjpzZXRSZXNvdXJjZUNhY2hpbmdEaXNhYmxl
ZChib29sIGRpc2FibGVkKQordm9pZCBQYWdlTmV0d29ya0FnZW50OjpzZXRSZXNvdXJjZUNhY2hp
bmdEaXNhYmxlZEludGVyYWwoYm9vbCBkaXNhYmxlZCkKIHsKICAgICBtX2luc3BlY3RlZFBhZ2Uu
c2V0UmVzb3VyY2VDYWNoaW5nRGlzYWJsZWRCeVdlYkluc3BlY3RvcihkaXNhYmxlZCk7CiB9CiAK
LVNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIFBhZ2VOZXR3b3JrQWdlbnQ6OnNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGZyYW1lSWQp
CitTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBQYWdlTmV0d29ya0FnZW50OjpzY3JpcHRFeGVjdXRp
b25Db250ZXh0KFByb3RvY29sOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFByb3Rv
Y29sOjpOZXR3b3JrOjpGcmFtZUlkJiBmcmFtZUlkKQogewogICAgIGF1dG8qIHBhZ2VBZ2VudCA9
IG1faW5zdHJ1bWVudGluZ0FnZW50cy5lbmFibGVkUGFnZUFnZW50KCk7CiAgICAgaWYgKCFwYWdl
QWdlbnQpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFn
ZS9QYWdlTmV0d29ya0FnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3Bh
Z2UvUGFnZU5ldHdvcmtBZ2VudC5oCmluZGV4IGJlZGNlM2U4ZGJiN2M5ZDIyYjJlMWI5NzJkMjJi
MmE1YmNlNDBhY2EuLjAyZDRiZWIyMWM1MmZjMWIzNDY3MmRjZWFhMzc1MDQ1MWJlNTI0MWUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlTmV0d29y
a0FnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VO
ZXR3b3JrQWdlbnQuaApAQCAtMzYsMTUgKzM2LDE1IEBAIGNsYXNzIFBhZ2VOZXR3b3JrQWdlbnQg
ZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yTmV0d29ya0FnZW50IHsKICAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBQYWdlTmV0d29ya0FnZW50KFBhZ2VBZ2VudENvbnRl
eHQmKTsKLSAgICB+UGFnZU5ldHdvcmtBZ2VudCgpIG92ZXJyaWRlOworICAgIH5QYWdlTmV0d29y
a0FnZW50KCk7CiAKIHByaXZhdGU6Ci0gICAgU3RyaW5nIGxvYWRlcklkZW50aWZpZXIoRG9jdW1l
bnRMb2FkZXIqKSBvdmVycmlkZTsKLSAgICBTdHJpbmcgZnJhbWVJZGVudGlmaWVyKERvY3VtZW50
TG9hZGVyKikgb3ZlcnJpZGU7Ci0gICAgVmVjdG9yPFdlYlNvY2tldCo+IGFjdGl2ZVdlYlNvY2tl
dHMoY29uc3QgTG9ja0hvbGRlciYpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0UmVzb3VyY2VDYWNo
aW5nRGlzYWJsZWQoYm9vbCkgb3ZlcnJpZGU7Ci0gICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
c2NyaXB0RXhlY3V0aW9uQ29udGV4dChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgZnJhbWVJ
ZCkgb3ZlcnJpZGU7Ci0gICAgYm9vbCBzaG91bGRGb3JjZUJ1ZmZlcmluZ05ldHdvcmtSZXNvdXJj
ZURhdGEoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorICAgIEluc3BlY3Rvcjo6
UHJvdG9jb2w6Ok5ldHdvcms6OkxvYWRlcklkIGxvYWRlcklkZW50aWZpZXIoRG9jdW1lbnRMb2Fk
ZXIqKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpGcmFtZUlkIGZyYW1lSWRl
bnRpZmllcihEb2N1bWVudExvYWRlciopOworICAgIFZlY3RvcjxXZWJTb2NrZXQqPiBhY3RpdmVX
ZWJTb2NrZXRzKGNvbnN0IExvY2tIb2xkZXImKTsKKyAgICB2b2lkIHNldFJlc291cmNlQ2FjaGlu
Z0Rpc2FibGVkSW50ZXJhbChib29sKTsKKyAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3Jp
cHRFeGVjdXRpb25Db250ZXh0KEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nJiwgY29u
c3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6RnJhbWVJZCYpOworICAgIGJvb2wgc2hv
dWxkRm9yY2VCdWZmZXJpbmdOZXR3b3JrUmVzb3VyY2VEYXRhKCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KIAogICAgIFBhZ2UmIG1faW5zcGVjdGVkUGFnZTsKIH07CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZVJ1bnRpbWVBZ2VudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZVJ1bnRpbWVBZ2VudC5jcHAK
aW5kZXggZThhYjVmNGM4OWFkZTRmYzg1YzA0MmI0MzQzM2I3MjY1NjNhYmRkMi4uMDBlNjlmMWFh
MmUzZjhlYTJmNDQ1ZThkZDQ0NmRkMTZlYTYzNjNkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VSdW50aW1lQWdlbnQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlUnVudGltZUFnZW50LmNwcApAQCAt
NTIsMTEgKzUyLDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSW5z
cGVjdG9yOwogCi1zdGF0aWMgYm9vbCBhc0Jvb2woY29uc3QgYm9vbCogYikKLXsKLSAgICByZXR1
cm4gYiAmJiAqYjsKLX0KLQogUGFnZVJ1bnRpbWVBZ2VudDo6UGFnZVJ1bnRpbWVBZ2VudChQYWdl
QWdlbnRDb250ZXh0JiBjb250ZXh0KQogICAgIDogSW5zcGVjdG9yUnVudGltZUFnZW50KGNvbnRl
eHQpCiAgICAgLCBtX2Zyb250ZW5kRGlzcGF0Y2hlcihtYWtlVW5pcXVlPEluc3BlY3Rvcjo6UnVu
dGltZUZyb250ZW5kRGlzcGF0Y2hlcj4oY29udGV4dC5mcm9udGVuZFJvdXRlcikpCkBAIC02OCwy
NyArNjMsMjkgQEAgUGFnZVJ1bnRpbWVBZ2VudDo6UGFnZVJ1bnRpbWVBZ2VudChQYWdlQWdlbnRD
b250ZXh0JiBjb250ZXh0KQogCiBQYWdlUnVudGltZUFnZW50Ojp+UGFnZVJ1bnRpbWVBZ2VudCgp
ID0gZGVmYXVsdDsKIAotdm9pZCBQYWdlUnVudGltZUFnZW50OjplbmFibGUoRXJyb3JTdHJpbmcm
IGVycm9yU3RyaW5nKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gUGFnZVJ1bnRpbWVB
Z2VudDo6ZW5hYmxlKCkKIHsKICAgICBpZiAobV9pbnN0cnVtZW50aW5nQWdlbnRzLmVuYWJsZWRQ
YWdlUnVudGltZUFnZW50KCkgPT0gdGhpcykKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1
cm4geyB9OwogCi0gICAgSW5zcGVjdG9yUnVudGltZUFnZW50OjplbmFibGUoZXJyb3JTdHJpbmcp
OwotICAgIGlmICghZXJyb3JTdHJpbmcuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47CisgICAg
YXV0byByZXN1bHQgPSBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmVuYWJsZSgpOworICAgIGlmICgh
cmVzdWx0KQorICAgICAgICByZXR1cm4gcmVzdWx0OwogCiAgICAgLy8gUmVwb3J0IGluaXRpYWwg
Y29udGV4dHMgYmVmb3JlIGVuYWJsaW5nIGluc3RydW1lbnRhdGlvbiBhcyB0aGUgcmVwb3J0aW5n
CiAgICAgLy8gY2FuIGZvcmNlIGNyZWF0aW9uIG9mIHNjcmlwdCBzdGF0ZSB3aGljaCBjb3VsZCBy
ZXN1bHQgaW4gZHVwbGljYXRlIG5vdGlmaWNhdGlvbnMuCiAgICAgcmVwb3J0RXhlY3V0aW9uQ29u
dGV4dENyZWF0aW9uKCk7CiAKICAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMuc2V0RW5hYmxlZFBh
Z2VSdW50aW1lQWdlbnQodGhpcyk7CisKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIFBh
Z2VSdW50aW1lQWdlbnQ6OmRpc2FibGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nKQorUHJvdG9j
b2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gUGFnZVJ1bnRpbWVBZ2VudDo6ZGlzYWJsZSgpCiB7CiAg
ICAgbV9pbnN0cnVtZW50aW5nQWdlbnRzLnNldEVuYWJsZWRQYWdlUnVudGltZUFnZW50KG51bGxw
dHIpOwogCi0gICAgSW5zcGVjdG9yUnVudGltZUFnZW50OjpkaXNhYmxlKGVycm9yU3RyaW5nKTsK
KyAgICByZXR1cm4gSW5zcGVjdG9yUnVudGltZUFnZW50OjpkaXNhYmxlKCk7CiB9CiAKIHZvaWQg
UGFnZVJ1bnRpbWVBZ2VudDo6ZnJhbWVOYXZpZ2F0ZWQoRnJhbWUmIGZyYW1lKQpAQCAtMTA2LDcg
KzEwMyw3IEBAIHZvaWQgUGFnZVJ1bnRpbWVBZ2VudDo6ZGlkQ2xlYXJXaW5kb3dPYmplY3RJbldv
cmxkKEZyYW1lJiBmcmFtZSwgRE9NV3JhcHBlcldvcmxkCiAgICAgbm90aWZ5Q29udGV4dENyZWF0
ZWQocGFnZUFnZW50LT5mcmFtZUlkKCZmcmFtZSksIGZyYW1lLnNjcmlwdCgpLmdsb2JhbE9iamVj
dCh3b3JsZCksIHdvcmxkKTsKIH0KIAotSW5qZWN0ZWRTY3JpcHQgUGFnZVJ1bnRpbWVBZ2VudDo6
aW5qZWN0ZWRTY3JpcHRGb3JFdmFsKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgaW50
KiBleGVjdXRpb25Db250ZXh0SWQpCitJbmplY3RlZFNjcmlwdCBQYWdlUnVudGltZUFnZW50Ojpp
bmplY3RlZFNjcmlwdEZvckV2YWwoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywg
T3B0aW9uYWw8UHJvdG9jb2w6OlJ1bnRpbWU6OkV4ZWN1dGlvbkNvbnRleHRJZD4mJiBleGVjdXRp
b25Db250ZXh0SWQpCiB7CiAgICAgaWYgKCFleGVjdXRpb25Db250ZXh0SWQpIHsKICAgICAgICAg
SlNDOjpKU0dsb2JhbE9iamVjdCogc2NyaXB0U3RhdGUgPSBtYWluV29ybGRFeGVjU3RhdGUoJm1f
aW5zcGVjdGVkUGFnZS5tYWluRnJhbWUoKSk7CkBAIC0xNTksMjIgKzE1NiwyMiBAQCB2b2lkIFBh
Z2VSdW50aW1lQWdlbnQ6OnJlcG9ydEV4ZWN1dGlvbkNvbnRleHRDcmVhdGlvbigpCiAgICAgfQog
fQogCi1zdGF0aWMgSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RXhlY3V0aW9uQ29udGV4
dFR5cGUgdG9Qcm90b2NvbChET01XcmFwcGVyV29ybGQ6OlR5cGUgdHlwZSkKK3N0YXRpYyBQcm90
b2NvbDo6UnVudGltZTo6RXhlY3V0aW9uQ29udGV4dFR5cGUgdG9Qcm90b2NvbChET01XcmFwcGVy
V29ybGQ6OlR5cGUgdHlwZSkKIHsKICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICBjYXNlIERPTVdy
YXBwZXJXb3JsZDo6VHlwZTo6Tm9ybWFsOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90
b2NvbDo6UnVudGltZTo6RXhlY3V0aW9uQ29udGV4dFR5cGU6Ok5vcm1hbDsKKyAgICAgICAgcmV0
dXJuIFByb3RvY29sOjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0VHlwZTo6Tm9ybWFsOwogICAg
IGNhc2UgRE9NV3JhcHBlcldvcmxkOjpUeXBlOjpVc2VyOgotICAgICAgICByZXR1cm4gSW5zcGVj
dG9yOjpQcm90b2NvbDo6UnVudGltZTo6RXhlY3V0aW9uQ29udGV4dFR5cGU6OlVzZXI7CisgICAg
ICAgIHJldHVybiBQcm90b2NvbDo6UnVudGltZTo6RXhlY3V0aW9uQ29udGV4dFR5cGU6OlVzZXI7
CiAgICAgY2FzZSBET01XcmFwcGVyV29ybGQ6OlR5cGU6OkludGVybmFsOgotICAgICAgICByZXR1
cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RXhlY3V0aW9uQ29udGV4dFR5cGU6Oklu
dGVybmFsOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OlJ1bnRpbWU6OkV4ZWN1dGlvbkNvbnRl
eHRUeXBlOjpJbnRlcm5hbDsKICAgICB9CiAKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RXhlY3V0aW9uQ29udGV4dFR5
cGU6OkludGVybmFsOworICAgIHJldHVybiBQcm90b2NvbDo6UnVudGltZTo6RXhlY3V0aW9uQ29u
dGV4dFR5cGU6OkludGVybmFsOwogfQogCi12b2lkIFBhZ2VSdW50aW1lQWdlbnQ6Om5vdGlmeUNv
bnRleHRDcmVhdGVkKGNvbnN0IFN0cmluZyYgZnJhbWVJZCwgSlNDOjpKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBjb25zdCBET01XcmFwcGVyV29ybGQmIHdvcmxkLCBTZWN1cml0eU9yaWdp
biogc2VjdXJpdHlPcmlnaW4pCit2b2lkIFBhZ2VSdW50aW1lQWdlbnQ6Om5vdGlmeUNvbnRleHRD
cmVhdGVkKGNvbnN0IFByb3RvY29sOjpOZXR3b3JrOjpGcmFtZUlkJiBmcmFtZUlkLCBKU0M6OkpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IERPTVdyYXBwZXJXb3JsZCYgd29ybGQs
IFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbikKIHsKICAgICBhdXRvIGluamVjdGVkU2Ny
aXB0ID0gaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKCkuaW5qZWN0ZWRTY3JpcHRGb3IoZ2xvYmFsT2Jq
ZWN0KTsKICAgICBpZiAoaW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKQpAQCAtMTg0LDcgKzE4
MSw3IEBAIHZvaWQgUGFnZVJ1bnRpbWVBZ2VudDo6bm90aWZ5Q29udGV4dENyZWF0ZWQoY29uc3Qg
U3RyaW5nJiBmcmFtZUlkLCBKU0M6OkpTR2xvYmFsCiAgICAgaWYgKG5hbWUuaXNFbXB0eSgpICYm
IHNlY3VyaXR5T3JpZ2luKQogICAgICAgICBuYW1lID0gc2VjdXJpdHlPcmlnaW4tPnRvUmF3U3Ry
aW5nKCk7CiAKLSAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+ZXhlY3V0aW9uQ29udGV4dENyZWF0
ZWQoSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RXhlY3V0aW9uQ29udGV4dERlc2NyaXB0
aW9uOjpjcmVhdGUoKQorICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5leGVjdXRpb25Db250ZXh0
Q3JlYXRlZChQcm90b2NvbDo6UnVudGltZTo6RXhlY3V0aW9uQ29udGV4dERlc2NyaXB0aW9uOjpj
cmVhdGUoKQogICAgICAgICAuc2V0SWQoaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKCkuaW5qZWN0ZWRT
Y3JpcHRJZEZvcihnbG9iYWxPYmplY3QpKQogICAgICAgICAuc2V0VHlwZSh0b1Byb3RvY29sKHdv
cmxkLnR5cGUoKSkpCiAgICAgICAgIC5zZXROYW1lKG5hbWUpCkBAIC0xOTIsMTYgKzE4OSwxNiBA
QCB2b2lkIFBhZ2VSdW50aW1lQWdlbnQ6Om5vdGlmeUNvbnRleHRDcmVhdGVkKGNvbnN0IFN0cmlu
ZyYgZnJhbWVJZCwgSlNDOjpKU0dsb2JhbAogICAgICAgICAucmVsZWFzZSgpKTsKIH0KIAotdm9p
ZCBQYWdlUnVudGltZUFnZW50OjpldmFsdWF0ZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNv
bnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgY29uc3QgU3RyaW5nKiBvYmplY3RHcm91cCwgY29uc3Qg
Ym9vbCogaW5jbHVkZUNvbW1hbmRMaW5lQVBJLCBjb25zdCBib29sKiBkb05vdFBhdXNlT25FeGNl
cHRpb25zQW5kTXV0ZUNvbnNvbGUsIGNvbnN0IGludCogZXhlY3V0aW9uQ29udGV4dElkLCBjb25z
dCBib29sKiByZXR1cm5CeVZhbHVlLCBjb25zdCBib29sKiBnZW5lcmF0ZVByZXZpZXcsIGNvbnN0
IGJvb2wqIHNhdmVSZXN1bHQsIGNvbnN0IGJvb2wqIGVtdWxhdGVVc2VyR2VzdHVyZSwgUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3VsdCwgT3B0
aW9uYWw8Ym9vbD4mIHdhc1Rocm93biwgT3B0aW9uYWw8aW50PiYgc2F2ZWRSZXN1bHRJbmRleCkK
K1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHN0ZDo6dHVwbGU8UmVmPFByb3RvY29sOjpSdW50aW1l
OjpSZW1vdGVPYmplY3Q+LCBPcHRpb25hbDxib29sPiAvKiB3YXNUaHJvd24gKi8sIE9wdGlvbmFs
PGludD4gLyogc2F2ZWRSZXN1bHRJbmRleCAqLz4+IFBhZ2VSdW50aW1lQWdlbnQ6OmV2YWx1YXRl
KGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCwgT3B0
aW9uYWw8Ym9vbD4mJiBpbmNsdWRlQ29tbWFuZExpbmVBUEksIE9wdGlvbmFsPGJvb2w+JiYgZG9O
b3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xlLCBPcHRpb25hbDxQcm90b2NvbDo6UnVu
dGltZTo6RXhlY3V0aW9uQ29udGV4dElkPiYmIGV4ZWN1dGlvbkNvbnRleHRJZCwgT3B0aW9uYWw8
Ym9vbD4mJiByZXR1cm5CeVZhbHVlLCBPcHRpb25hbDxib29sPiYmIGdlbmVyYXRlUHJldmlldywg
T3B0aW9uYWw8Ym9vbD4mJiBzYXZlUmVzdWx0LCBPcHRpb25hbDxib29sPiYmIGVtdWxhdGVVc2Vy
R2VzdHVyZSkKIHsKLSAgICBVc2VyR2VzdHVyZUVtdWxhdGlvblNjb3BlIHVzZXJHZXN0dXJlU2Nv
cGUobV9pbnNwZWN0ZWRQYWdlLCBhc0Jvb2woZW11bGF0ZVVzZXJHZXN0dXJlKSk7Ci0gICAgSW5z
cGVjdG9yUnVudGltZUFnZW50OjpldmFsdWF0ZShlcnJvclN0cmluZywgZXhwcmVzc2lvbiwgb2Jq
ZWN0R3JvdXAsIGluY2x1ZGVDb21tYW5kTGluZUFQSSwgZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0Fu
ZE11dGVDb25zb2xlLCBleGVjdXRpb25Db250ZXh0SWQsIHJldHVybkJ5VmFsdWUsIGdlbmVyYXRl
UHJldmlldywgc2F2ZVJlc3VsdCwgZW11bGF0ZVVzZXJHZXN0dXJlLCByZXN1bHQsIHdhc1Rocm93
biwgc2F2ZWRSZXN1bHRJbmRleCk7CisgICAgVXNlckdlc3R1cmVFbXVsYXRpb25TY29wZSB1c2Vy
R2VzdHVyZVNjb3BlKG1faW5zcGVjdGVkUGFnZSwgZW11bGF0ZVVzZXJHZXN0dXJlICYmICplbXVs
YXRlVXNlckdlc3R1cmUpOworICAgIHJldHVybiBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmV2YWx1
YXRlKGV4cHJlc3Npb24sIG9iamVjdEdyb3VwLCBXVEZNb3ZlKGluY2x1ZGVDb21tYW5kTGluZUFQ
SSksIFdURk1vdmUoZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xlKSwgV1RGTW92
ZShleGVjdXRpb25Db250ZXh0SWQpLCBXVEZNb3ZlKHJldHVybkJ5VmFsdWUpLCBXVEZNb3ZlKGdl
bmVyYXRlUHJldmlldyksIFdURk1vdmUoc2F2ZVJlc3VsdCksIFdURk1vdmUoZW11bGF0ZVVzZXJH
ZXN0dXJlKSk7CiB9CiAKLXZvaWQgUGFnZVJ1bnRpbWVBZ2VudDo6Y2FsbEZ1bmN0aW9uT24oRXJy
b3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBjb25zdCBTdHJp
bmcmIGV4cHJlc3Npb24sIGNvbnN0IEpTT046OkFycmF5KiBvcHRpb25hbEFyZ3VtZW50cywgY29u
c3QgYm9vbCogZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xlLCBjb25zdCBib29s
KiByZXR1cm5CeVZhbHVlLCBjb25zdCBib29sKiBnZW5lcmF0ZVByZXZpZXcsIGNvbnN0IGJvb2wq
IGVtdWxhdGVVc2VyR2VzdHVyZSwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6
OlJlbW90ZU9iamVjdD4mIHJlc3VsdCwgT3B0aW9uYWw8Ym9vbD4mIHdhc1Rocm93bikKK1Byb3Rv
Y29sOjpFcnJvclN0cmluZ09yPHN0ZDo6dHVwbGU8UmVmPFByb3RvY29sOjpSdW50aW1lOjpSZW1v
dGVPYmplY3Q+LCBPcHRpb25hbDxib29sPiAvKiB3YXNUaHJvd24gKi8+PiBQYWdlUnVudGltZUFn
ZW50OjpjYWxsRnVuY3Rpb25Pbihjb25zdCBQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0
SWQmIG9iamVjdElkLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIFJlZlB0cjxKU09OOjpBcnJh
eT4mJiBvcHRpb25hbEFyZ3VtZW50cywgT3B0aW9uYWw8Ym9vbD4mJiBkb05vdFBhdXNlT25FeGNl
cHRpb25zQW5kTXV0ZUNvbnNvbGUsIE9wdGlvbmFsPGJvb2w+JiYgcmV0dXJuQnlWYWx1ZSwgT3B0
aW9uYWw8Ym9vbD4mJiBnZW5lcmF0ZVByZXZpZXcsIE9wdGlvbmFsPGJvb2w+JiYgZW11bGF0ZVVz
ZXJHZXN0dXJlKQogewotICAgIFVzZXJHZXN0dXJlRW11bGF0aW9uU2NvcGUgdXNlckdlc3R1cmVT
Y29wZShtX2luc3BlY3RlZFBhZ2UsIGFzQm9vbChlbXVsYXRlVXNlckdlc3R1cmUpKTsKLSAgICBJ
bnNwZWN0b3JSdW50aW1lQWdlbnQ6OmNhbGxGdW5jdGlvbk9uKGVycm9yU3RyaW5nLCBvYmplY3RJ
ZCwgZXhwcmVzc2lvbiwgb3B0aW9uYWxBcmd1bWVudHMsIGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNB
bmRNdXRlQ29uc29sZSwgcmV0dXJuQnlWYWx1ZSwgZ2VuZXJhdGVQcmV2aWV3LCBlbXVsYXRlVXNl
ckdlc3R1cmUsIHJlc3VsdCwgd2FzVGhyb3duKTsKKyAgICBVc2VyR2VzdHVyZUVtdWxhdGlvblNj
b3BlIHVzZXJHZXN0dXJlU2NvcGUobV9pbnNwZWN0ZWRQYWdlLCBlbXVsYXRlVXNlckdlc3R1cmUg
JiYgKmVtdWxhdGVVc2VyR2VzdHVyZSk7CisgICAgcmV0dXJuIEluc3BlY3RvclJ1bnRpbWVBZ2Vu
dDo6Y2FsbEZ1bmN0aW9uT24ob2JqZWN0SWQsIGV4cHJlc3Npb24sIFdURk1vdmUob3B0aW9uYWxB
cmd1bWVudHMpLCBXVEZNb3ZlKGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29sZSks
IFdURk1vdmUocmV0dXJuQnlWYWx1ZSksIFdURk1vdmUoZ2VuZXJhdGVQcmV2aWV3KSwgV1RGTW92
ZShlbXVsYXRlVXNlckdlc3R1cmUpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VSdW50aW1l
QWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlUnVudGlt
ZUFnZW50LmgKaW5kZXggMmFmMzczOWI3ZmU3YzE2ZmFhN2Q4ZDI3OTdjZTZkMDEwMjE1Mzk4ZC4u
Mjk4NDY1YzUyYjQyNDY0YzI3MzM2NTllMDdmM2Y3NjAxNzRhOTVlYiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VSdW50aW1lQWdlbnQuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZVJ1bnRpbWVBZ2VudC5o
CkBAIC00NSwzMSArNDUsMzAgQEAgY2xhc3MgRE9NV3JhcHBlcldvcmxkOwogY2xhc3MgRnJhbWU7
CiBjbGFzcyBQYWdlOwogY2xhc3MgU2VjdXJpdHlPcmlnaW47Ci10eXBlZGVmIFN0cmluZyBFcnJv
clN0cmluZzsKIAogY2xhc3MgUGFnZVJ1bnRpbWVBZ2VudCBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0
b3I6Okluc3BlY3RvclJ1bnRpbWVBZ2VudCB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUGFn
ZVJ1bnRpbWVBZ2VudCk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAg
ICAgUGFnZVJ1bnRpbWVBZ2VudChQYWdlQWdlbnRDb250ZXh0Jik7Ci0gICAgflBhZ2VSdW50aW1l
QWdlbnQoKSBvdmVycmlkZTsKKyAgICB+UGFnZVJ1bnRpbWVBZ2VudCgpOwogCiAgICAgLy8gUnVu
dGltZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcgotICAgIHZvaWQgZW5hYmxlKEVycm9yU3RyaW5n
Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkaXNhYmxlKEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCBldmFsdWF0ZShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwg
Y29uc3QgU3RyaW5nKiBvYmplY3RHcm91cCwgY29uc3QgYm9vbCogaW5jbHVkZUNvbW1hbmRMaW5l
QVBJLCBjb25zdCBib29sKiBkb05vdFBhdXNlT25FeGNlcHRpb25zQW5kTXV0ZUNvbnNvbGUsIGNv
bnN0IGludCogZXhlY3V0aW9uQ29udGV4dElkLCBjb25zdCBib29sKiByZXR1cm5CeVZhbHVlLCBj
b25zdCBib29sKiBnZW5lcmF0ZVByZXZpZXcsIGNvbnN0IGJvb2wqIHNhdmVSZXN1bHQsIGNvbnN0
IGJvb2wqIGVtdWxhdGVVc2VyR2VzdHVyZSwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1
bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3VsdCwgT3B0aW9uYWw8Ym9vbD4mIHdhc1Rocm93biwg
T3B0aW9uYWw8aW50PiYgc2F2ZWRSZXN1bHRJbmRleCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjYWxs
RnVuY3Rpb25PbihFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgb2JqZWN0SWQsIGNvbnN0IFN0
cmluZyYgZXhwcmVzc2lvbiwgY29uc3QgSlNPTjo6QXJyYXkqIG9wdGlvbmFsQXJndW1lbnRzLCBj
b25zdCBib29sKiBkb05vdFBhdXNlT25FeGNlcHRpb25zQW5kTXV0ZUNvbnNvbGUsIGNvbnN0IGJv
b2wqIHJldHVybkJ5VmFsdWUsIGNvbnN0IGJvb2wqIGdlbmVyYXRlUHJldmlldywgY29uc3QgYm9v
bCogZW11bGF0ZVVzZXJHZXN0dXJlLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGlt
ZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0LCBPcHRpb25hbDxib29sPiYgd2FzVGhyb3duKSBvdmVy
cmlkZTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGVuYWJs
ZSgpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZGlzYWJs
ZSgpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8c3RkOjp0dXBsZTxS
ZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiwgT3B0aW9uYWw8
Ym9vbD4gLyogd2FzVGhyb3duICovLCBPcHRpb25hbDxpbnQ+IC8qIHNhdmVkUmVzdWx0SW5kZXgg
Ki8+PiBldmFsdWF0ZShjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIGNvbnN0IFN0cmluZyYgb2Jq
ZWN0R3JvdXAsIE9wdGlvbmFsPGJvb2w+JiYgaW5jbHVkZUNvbW1hbmRMaW5lQVBJLCBPcHRpb25h
bDxib29sPiYmIGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29sZSwgT3B0aW9uYWw8
SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RXhlY3V0aW9uQ29udGV4dElkPiYmLCBPcHRp
b25hbDxib29sPiYmIHJldHVybkJ5VmFsdWUsIE9wdGlvbmFsPGJvb2w+JiYgZ2VuZXJhdGVQcmV2
aWV3LCBPcHRpb25hbDxib29sPiYmIHNhdmVSZXN1bHQsIE9wdGlvbmFsPGJvb2w+JiYgZW11bGF0
ZVVzZXJHZXN0dXJlKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHN0
ZDo6dHVwbGU8UmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4s
IE9wdGlvbmFsPGJvb2w+IC8qIHdhc1Rocm93biAqLz4+IGNhbGxGdW5jdGlvbk9uKGNvbnN0IElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdElkJiwgY29uc3QgU3RyaW5n
JiBleHByZXNzaW9uLCBSZWZQdHI8SlNPTjo6QXJyYXk+JiYgYXJndW1lbnRzLCBPcHRpb25hbDxi
b29sPiYmIGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29sZSwgT3B0aW9uYWw8Ym9v
bD4mJiByZXR1cm5CeVZhbHVlLCBPcHRpb25hbDxib29sPiYmIGdlbmVyYXRlUHJldmlldywgT3B0
aW9uYWw8Ym9vbD4mJiBlbXVsYXRlVXNlckdlc3R1cmUpOwogCiAgICAgLy8gSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uCiAgICAgdm9pZCBmcmFtZU5hdmlnYXRlZChGcmFtZSYpOwogICAgIHZvaWQg
ZGlkQ2xlYXJXaW5kb3dPYmplY3RJbldvcmxkKEZyYW1lJiwgRE9NV3JhcHBlcldvcmxkJik7CiAK
IHByaXZhdGU6Ci0gICAgSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdEZv
ckV2YWwoRXJyb3JTdHJpbmcmLCBjb25zdCBpbnQqIGV4ZWN1dGlvbkNvbnRleHRJZCkgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCBtdXRlQ29uc29sZSgpIG92ZXJyaWRlOwotICAgIHZvaWQgdW5tdXRlQ29u
c29sZSgpIG92ZXJyaWRlOworICAgIEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRT
Y3JpcHRGb3JFdmFsKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nJiwgT3B0aW9uYWw8
SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RXhlY3V0aW9uQ29udGV4dElkPiYmKTsKKyAg
ICB2b2lkIG11dGVDb25zb2xlKCk7CisgICAgdm9pZCB1bm11dGVDb25zb2xlKCk7CiAgICAgdm9p
ZCByZXBvcnRFeGVjdXRpb25Db250ZXh0Q3JlYXRpb24oKTsKLSAgICB2b2lkIG5vdGlmeUNvbnRl
eHRDcmVhdGVkKGNvbnN0IFN0cmluZyYgZnJhbWVJZCwgSlNDOjpKU0dsb2JhbE9iamVjdCosIGNv
bnN0IERPTVdyYXBwZXJXb3JsZCYsIFNlY3VyaXR5T3JpZ2luKiA9IG51bGxwdHIpOworICAgIHZv
aWQgbm90aWZ5Q29udGV4dENyZWF0ZWQoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29y
azo6RnJhbWVJZCYsIEpTQzo6SlNHbG9iYWxPYmplY3QqLCBjb25zdCBET01XcmFwcGVyV29ybGQm
LCBTZWN1cml0eU9yaWdpbiogPSBudWxscHRyKTsKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxJbnNw
ZWN0b3I6OlJ1bnRpbWVGcm9udGVuZERpc3BhdGNoZXI+IG1fZnJvbnRlbmREaXNwYXRjaGVyOwog
ICAgIFJlZlB0cjxJbnNwZWN0b3I6OlJ1bnRpbWVCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5k
RGlzcGF0Y2hlcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMv
d29ya2VyL1NlcnZpY2VXb3JrZXJBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
YWdlbnRzL3dvcmtlci9TZXJ2aWNlV29ya2VyQWdlbnQuY3BwCmluZGV4IDE4YTYwYzNjMWNiMmZh
MTEzM2U4OTQxOTEyNjM5ZjkzNzJlZmYyYTYuLmJiZTJjYzAzZDY0NWZjMTI5MDg0ZGJlZTlkZDgw
NDIyYmJkNjNmZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMv
d29ya2VyL1NlcnZpY2VXb3JrZXJBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2FnZW50cy93b3JrZXIvU2VydmljZVdvcmtlckFnZW50LmNwcApAQCAtNTQsOSArNTQsOSBA
QCB2b2lkIFNlcnZpY2VXb3JrZXJBZ2VudDo6d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQo
SW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhcwogewogfQogCi12b2lkIFNlcnZpY2VXb3JrZXJBZ2Vu
dDo6Z2V0SW5pdGlhbGl6YXRpb25JbmZvKEVycm9yU3RyaW5nJiwgUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlNlcnZpY2VXb3JrZXI6OkNvbmZpZ3VyYXRpb24+JiBpbmZvKQorUHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8UmVmPFByb3RvY29sOjpTZXJ2aWNlV29ya2VyOjpDb25maWd1cmF0aW9u
Pj4gU2VydmljZVdvcmtlckFnZW50OjpnZXRJbml0aWFsaXphdGlvbkluZm8oKQogewotICAgIGlu
Zm8gPSBJbnNwZWN0b3I6OlByb3RvY29sOjpTZXJ2aWNlV29ya2VyOjpDb25maWd1cmF0aW9uOjpj
cmVhdGUoKQorICAgIHJldHVybiBQcm90b2NvbDo6U2VydmljZVdvcmtlcjo6Q29uZmlndXJhdGlv
bjo6Y3JlYXRlKCkKICAgICAgICAgLnNldFRhcmdldElkKG1fc2VydmljZVdvcmtlckdsb2JhbFNj
b3BlLmlkZW50aWZpZXIoKSkKICAgICAgICAgLnNldFNlY3VyaXR5T3JpZ2luKG1fc2VydmljZVdv
cmtlckdsb2JhbFNjb3BlLnNlY3VyaXR5T3JpZ2luKCktPnRvUmF3U3RyaW5nKCkpCiAgICAgICAg
IC5zZXRVcmwobV9zZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGUudGhyZWFkKCkuY29udGV4dERhdGEo
KS5zY3JpcHRVUkwuc3RyaW5nKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvYWdlbnRzL3dvcmtlci9TZXJ2aWNlV29ya2VyQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9hZ2VudHMvd29ya2VyL1NlcnZpY2VXb3JrZXJBZ2VudC5oCmluZGV4IDgxNDlmZjNk
YWMzNTc4ZmMwNDhiNjU4ZTYzMTdkZTMyYjE5N2Q0MDAuLjBiYTVjYzVjYzdmMzNkNjExYjQ1YTA0
OTg3NDUwNTViOGYyOWZmYzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9h
Z2VudHMvd29ya2VyL1NlcnZpY2VXb3JrZXJBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9hZ2VudHMvd29ya2VyL1NlcnZpY2VXb3JrZXJBZ2VudC5oCkBAIC0zNCwyMSArMzQs
MTkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBTZXJ2aWNlV29ya2VyR2xvYmFsU2Nv
cGU7CiAKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCiBjbGFzcyBTZXJ2aWNlV29ya2Vy
QWdlbnQgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yQWdlbnRCYXNlLCBwdWJsaWMgSW5zcGVjdG9y
OjpTZXJ2aWNlV29ya2VyQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKICAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShTZXJ2aWNlV29ya2VyQWdlbnQpOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOwogcHVibGljOgogICAgIFNlcnZpY2VXb3JrZXJBZ2VudChXb3JrZXJBZ2VudENvbnRleHQm
KTsKLSAgICB+U2VydmljZVdvcmtlckFnZW50KCkgb3ZlcnJpZGU7CisgICAgflNlcnZpY2VXb3Jr
ZXJBZ2VudCgpOwogCiAgICAgLy8gSW5zcGVjdG9yQWdlbnRCYXNlCi0gICAgdm9pZCBkaWRDcmVh
dGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9udGVuZFJvdXRlciosIEluc3BlY3Rv
cjo6QmFja2VuZERpc3BhdGNoZXIqKSBvdmVycmlkZTsKLSAgICB2b2lkIHdpbGxEZXN0cm95RnJv
bnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlzY29ubmVjdFJlYXNvbikgb3ZlcnJpZGU7Cisg
ICAgdm9pZCBkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9udGVuZFJv
dXRlciosIEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXIqKTsKKyAgICB2b2lkIHdpbGxEZXN0
cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlzY29ubmVjdFJlYXNvbik7CiAKICAg
ICAvLyBTZXJ2aWNlV29ya2VyQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyCi0gICAgdm9pZCBnZXRJ
bml0aWFsaXphdGlvbkluZm8oRXJyb3JTdHJpbmcmLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6U2VydmljZVdvcmtlcjo6Q29uZmlndXJhdGlvbj4mKSBvdmVycmlkZTsKKyAgICBJbnNwZWN0
b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpTZXJ2
aWNlV29ya2VyOjpDb25maWd1cmF0aW9uPj4gZ2V0SW5pdGlhbGl6YXRpb25JbmZvKCk7CiAKIHBy
aXZhdGU6CiAgICAgU2VydmljZVdvcmtlckdsb2JhbFNjb3BlJiBtX3NlcnZpY2VXb3JrZXJHbG9i
YWxTY29wZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29y
a2VyL1dvcmtlckF1ZGl0QWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50
cy93b3JrZXIvV29ya2VyQXVkaXRBZ2VudC5jcHAKaW5kZXggYzEyYjVhYTQxMzJmODlhYzU4MmRl
YjlmNzJmMTg1MWE5ZWVmOTUzZi4uODkyNDE5MGVlNjIwZjE1NTE0YTI1MGQ3NjJlMmJlNGExOTMz
MDYzZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93b3JrZXIv
V29ya2VyQXVkaXRBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50
cy93b3JrZXIvV29ya2VyQXVkaXRBZ2VudC5jcHAKQEAgLTQ4LDcgKzQ4LDcgQEAgV29ya2VyQXVk
aXRBZ2VudDo6V29ya2VyQXVkaXRBZ2VudChXb3JrZXJBZ2VudENvbnRleHQmIGNvbnRleHQpCiAK
IFdvcmtlckF1ZGl0QWdlbnQ6On5Xb3JrZXJBdWRpdEFnZW50KCkgPSBkZWZhdWx0OwogCi1Jbmpl
Y3RlZFNjcmlwdCBXb3JrZXJBdWRpdEFnZW50OjppbmplY3RlZFNjcmlwdEZvckV2YWwoRXJyb3JT
dHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBpbnQqIGV4ZWN1dGlvbkNvbnRleHRJZCkKK0luamVj
dGVkU2NyaXB0IFdvcmtlckF1ZGl0QWdlbnQ6OmluamVjdGVkU2NyaXB0Rm9yRXZhbChQcm90b2Nv
bDo6RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBPcHRpb25hbDxQcm90b2NvbDo6UnVudGltZTo6
RXhlY3V0aW9uQ29udGV4dElkPiYmIGV4ZWN1dGlvbkNvbnRleHRJZCkKIHsKICAgICBpZiAoZXhl
Y3V0aW9uQ29udGV4dElkKSB7CiAgICAgICAgIGVycm9yU3RyaW5nID0gImV4ZWN1dGlvbkNvbnRl
eHRJZCBpcyBub3Qgc3VwcG9ydGVkIGZvciB3b3JrZXJzIGFzIHRoZXJlIGlzIG9ubHkgb25lIGV4
ZWN1dGlvbiBjb250ZXh0Il9zOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2FnZW50cy93b3JrZXIvV29ya2VyQXVkaXRBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2FnZW50cy93b3JrZXIvV29ya2VyQXVkaXRBZ2VudC5oCmluZGV4IGQ2YWNkYzBlYTNlODlm
MGZhZDMxY2NiMmQ3NjhlMGUxNDZiZDMyMzUuLmQyNTljNmE3NmMyZWNiMGVlYjhlZGQ3MzM5ZWMw
NDU5YmQzNzJiM2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMv
d29ya2VyL1dvcmtlckF1ZGl0QWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
YWdlbnRzL3dvcmtlci9Xb3JrZXJBdWRpdEFnZW50LmgKQEAgLTM3LDEwICszNywxMCBAQCBjbGFz
cyBXb3JrZXJBdWRpdEFnZW50IGZpbmFsIDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9yQXVk
aXRBZ2VudCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgV29y
a2VyQXVkaXRBZ2VudChXb3JrZXJBZ2VudENvbnRleHQmKTsKLSAgICB+V29ya2VyQXVkaXRBZ2Vu
dCgpIG92ZXJyaWRlOworICAgIH5Xb3JrZXJBdWRpdEFnZW50KCk7CiAKIHByaXZhdGU6Ci0gICAg
SW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdEZvckV2YWwoSW5zcGVjdG9y
OjpFcnJvclN0cmluZyYsIGNvbnN0IGludCogZXhlY3V0aW9uQ29udGV4dElkKSBvdmVycmlkZTsK
KyAgICBJbnNwZWN0b3I6OkluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0Rm9yRXZhbChJbnNw
ZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZyYsIE9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlJ1bnRpbWU6OkV4ZWN1dGlvbkNvbnRleHRJZD4mJik7CiAKICAgICBXb3JrZXJHbG9iYWxT
Y29wZSYgbV93b3JrZXJHbG9iYWxTY29wZTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJDb25zb2xlQWdlbnQuaCBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlckNvbnNvbGVBZ2VudC5oCmluZGV4
IGI3YjU1ZDAwNjU5MGVmYjA4M2ZlYmI5NGU0M2I0MTJkNjNjZWFmZDAuLjU3MTU5OTEyNDdjYWZi
OWQ2N2VmMzMxNzFhZGZkMWM5NmM3ZTQ4MjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlckNvbnNvbGVBZ2VudC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlckNvbnNvbGVBZ2VudC5oCkBAIC0z
NSw3ICszNSw3IEBAIGNsYXNzIFdvcmtlckNvbnNvbGVBZ2VudCBmaW5hbCA6IHB1YmxpYyBXZWJD
b25zb2xlQWdlbnQgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAg
IFdvcmtlckNvbnNvbGVBZ2VudChXb3JrZXJBZ2VudENvbnRleHQmKTsKLSAgICB+V29ya2VyQ29u
c29sZUFnZW50KCkgb3ZlcnJpZGU7CisgICAgfldvcmtlckNvbnNvbGVBZ2VudCgpOwogfTsKIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2FnZW50cy93b3JrZXIvV29ya2VyRE9NRGVidWdnZXJBZ2VudC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJET01EZWJ1Z2dlckFnZW50LmNwcApp
bmRleCBiZDVkOGE4MzRlYWU4NjMzMGZjYjk3MmM1OTJkNWY3MGE3ZTczMDRjLi45MjI3NDM1MGM2
MzcxNDYwNTFkNzQ5OWM5YmZiNzQ2MDcwMzIyMTExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJET01EZWJ1Z2dlckFnZW50LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJET01EZWJ1Z2dl
ckFnZW50LmNwcApAQCAtMzcsMTkgKzM3LDIwIEBAIFdvcmtlckRPTURlYnVnZ2VyQWdlbnQ6Oldv
cmtlckRPTURlYnVnZ2VyQWdlbnQoV29ya2VyQWdlbnRDb250ZXh0JiBjb250ZXh0LCBJbnNwCiAK
IFdvcmtlckRPTURlYnVnZ2VyQWdlbnQ6On5Xb3JrZXJET01EZWJ1Z2dlckFnZW50KCkgPSBkZWZh
dWx0OwogCi12b2lkIFdvcmtlckRPTURlYnVnZ2VyQWdlbnQ6OnNldERPTUJyZWFrcG9pbnQoRXJy
b3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgLyogbm9kZUlkICovLCBjb25zdCBTdHJpbmcmIC8q
IHR5cGVTdHJpbmcgKi8sIGNvbnN0IEpTT046Ok9iamVjdCogLyogb3B0aW9uc1BheWxvYWQgKi8p
CitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBXb3JrZXJET01EZWJ1Z2dlckFnZW50Ojpz
ZXRET01CcmVha3BvaW50KFByb3RvY29sOjpET006Ok5vZGVJZCwgUHJvdG9jb2w6OkRPTURlYnVn
Z2VyOjpET01CcmVha3BvaW50VHlwZSwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiAvKiBvcHRpb25z
ICovKQogewotICAgIGVycm9yU3RyaW5nID0gIk5vdCBzdXBwb3J0ZWQiX3M7CisgICAgcmV0dXJu
IG1ha2VVbmV4cGVjdGVkKCJOb3Qgc3VwcG9ydGVkIl9zKTsKIH0KIAotdm9pZCBXb3JrZXJET01E
ZWJ1Z2dlckFnZW50OjpyZW1vdmVET01CcmVha3BvaW50KEVycm9yU3RyaW5nJiBlcnJvclN0cmlu
ZywgaW50IC8qIG5vZGVJZCAqLywgY29uc3QgU3RyaW5nJiAvKiB0eXBlU3RyaW5nICovKQorUHJv
dG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gV29ya2VyRE9NRGVidWdnZXJBZ2VudDo6cmVtb3Zl
RE9NQnJlYWtwb2ludChQcm90b2NvbDo6RE9NOjpOb2RlSWQsIFByb3RvY29sOjpET01EZWJ1Z2dl
cjo6RE9NQnJlYWtwb2ludFR5cGUpCiB7Ci0gICAgZXJyb3JTdHJpbmcgPSAiTm90IHN1cHBvcnRl
ZCJfczsKKyAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk5vdCBzdXBwb3J0ZWQiX3MpOwogfQog
Ci12b2lkIFdvcmtlckRPTURlYnVnZ2VyQWdlbnQ6OnNldEFuaW1hdGlvbkZyYW1lQnJlYWtwb2lu
dChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIFJlZlB0cjxKU0M6OkJyZWFrcG9pbnQ+JiYpCiti
b29sIFdvcmtlckRPTURlYnVnZ2VyQWdlbnQ6OnNldEFuaW1hdGlvbkZyYW1lQnJlYWtwb2ludChQ
cm90b2NvbDo6RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBSZWZQdHI8SlNDOjpCcmVha3BvaW50
PiYmKQogewogICAgIGVycm9yU3RyaW5nID0gIk5vdCBzdXBwb3J0ZWQiX3M7CisgICAgcmV0dXJu
IGZhbHNlOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJET01EZWJ1Z2dlckFnZW50Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJET01EZWJ1Z2dl
ckFnZW50LmgKaW5kZXggODZlYjkzZjVlMTk3NTUxYmJkMjA5Njk2NTc5YzcwODk0ZDU4YzIxYy4u
NTZmNWEwOTBhMzMwODYwMWRiZGJhOWM0ZjJiNGQzZjdjMTEzM2QxNCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2VyRE9NRGVidWdnZXJBZ2Vu
dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlckRP
TURlYnVnZ2VyQWdlbnQuaApAQCAtMzEsMTkgKzMxLDE3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7Ci0KIGNsYXNzIFdvcmtlckRPTURlYnVn
Z2VyQWdlbnQgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudCB7CiBwdWJs
aWM6CiAgICAgV29ya2VyRE9NRGVidWdnZXJBZ2VudChXb3JrZXJBZ2VudENvbnRleHQmLCBJbnNw
ZWN0b3I6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQqKTsKLSAgICB+V29ya2VyRE9NRGVidWdnZXJB
Z2VudCgpIG92ZXJyaWRlOworICAgIH5Xb3JrZXJET01EZWJ1Z2dlckFnZW50KCk7CiAKICAgICAv
LyBET01EZWJ1Z2dlckJhY2tlbmREaXNwYXRjaGVySGFuZGxlcgotICAgIHZvaWQgc2V0RE9NQnJl
YWtwb2ludChFcnJvclN0cmluZyYsIGludCBub2RlSWQsIGNvbnN0IFN0cmluZyYgdHlwZSwgY29u
c3QgSlNPTjo6T2JqZWN0KiBvcHRpb25zKSBvdmVycmlkZTsKLSAgICB2b2lkIHJlbW92ZURPTUJy
ZWFrcG9pbnQoRXJyb3JTdHJpbmcmLCBpbnQgbm9kZUlkLCBjb25zdCBTdHJpbmcmIHR5cGUpIG92
ZXJyaWRlOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc2V0
RE9NQnJlYWtwb2ludChJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZCwgSW5zcGVjdG9y
OjpQcm90b2NvbDo6RE9NRGVidWdnZXI6OkRPTUJyZWFrcG9pbnRUeXBlLCBSZWZQdHI8SlNPTjo6
T2JqZWN0PiYmIG9wdGlvbnMpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5n
T3I8dm9pZD4gcmVtb3ZlRE9NQnJlYWtwb2ludChJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5v
ZGVJZCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NRGVidWdnZXI6OkRPTUJyZWFrcG9pbnRUeXBl
KTsKIAogcHJpdmF0ZToKLSAgICB2b2lkIHNldEFuaW1hdGlvbkZyYW1lQnJlYWtwb2ludChFcnJv
clN0cmluZyYsIFJlZlB0cjxKU0M6OkJyZWFrcG9pbnQ+JiYpIG92ZXJyaWRlOworICAgIGJvb2wg
c2V0QW5pbWF0aW9uRnJhbWVCcmVha3BvaW50KEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3Ry
aW5nJiwgUmVmUHRyPEpTQzo6QnJlYWtwb2ludD4mJik7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtl
ci9Xb3JrZXJEZWJ1Z2dlckFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2Vu
dHMvd29ya2VyL1dvcmtlckRlYnVnZ2VyQWdlbnQuY3BwCmluZGV4IGNiYzYyMDUyMjE5NGYyOWE5
NDE4N2E4YTI3YWMxMmI0MTlkMzU5ZTAuLjdhYTcyYjZhNGM2NGNhOWY2NzgxNTBkMDZhMzJkMDI5
NGM1MDg4MjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29y
a2VyL1dvcmtlckRlYnVnZ2VyQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9hZ2VudHMvd29ya2VyL1dvcmtlckRlYnVnZ2VyQWdlbnQuY3BwCkBAIC01Myw3ICs1Myw3IEBA
IHZvaWQgV29ya2VyRGVidWdnZXJBZ2VudDo6YnJlYWtwb2ludEFjdGlvbkxvZyhKU0dsb2JhbE9i
amVjdCogbGV4aWNhbEdsb2JhbE9iamVjCiAgICAgbV93b3JrZXJHbG9iYWxTY29wZS5hZGRDb25z
b2xlTWVzc2FnZShtYWtlVW5pcXVlPENvbnNvbGVNZXNzYWdlPihNZXNzYWdlU291cmNlOjpKUywg
TWVzc2FnZVR5cGU6OkxvZywgTWVzc2FnZUxldmVsOjpMb2csIG1lc3NhZ2UsIGNyZWF0ZVNjcmlw
dENhbGxTdGFjayhsZXhpY2FsR2xvYmFsT2JqZWN0KSkpOwogfQogCi1JbmplY3RlZFNjcmlwdCBX
b3JrZXJEZWJ1Z2dlckFnZW50OjppbmplY3RlZFNjcmlwdEZvckV2YWwoRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBjb25zdCBpbnQqIGV4ZWN1dGlvbkNvbnRleHRJZCkKK0luamVjdGVkU2NyaXB0
IFdvcmtlckRlYnVnZ2VyQWdlbnQ6OmluamVjdGVkU2NyaXB0Rm9yRXZhbChQcm90b2NvbDo6RXJy
b3JTdHJpbmcmIGVycm9yU3RyaW5nLCBPcHRpb25hbDxQcm90b2NvbDo6UnVudGltZTo6RXhlY3V0
aW9uQ29udGV4dElkPiYmIGV4ZWN1dGlvbkNvbnRleHRJZCkKIHsKICAgICBpZiAoZXhlY3V0aW9u
Q29udGV4dElkKSB7CiAgICAgICAgIGVycm9yU3RyaW5nID0gImV4ZWN1dGlvbkNvbnRleHRJZCBp
cyBub3Qgc3VwcG9ydGVkIGZvciB3b3JrZXJzIGFzIHRoZXJlIGlzIG9ubHkgb25lIGV4ZWN1dGlv
biBjb250ZXh0Il9zOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50
cy93b3JrZXIvV29ya2VyRGVidWdnZXJBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2FnZW50cy93b3JrZXIvV29ya2VyRGVidWdnZXJBZ2VudC5oCmluZGV4IDRhYzA3ZDZjYzM3YzIy
ODAzMzM4ZWI4MGQzNDIxOTUyMWI5NmYzZGUuLjdjYTY0ZTQwMTNhNTRiNDE4ZDUzZTQ3NDgwMmU3
MzJiZjE5MDhjOTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMv
d29ya2VyL1dvcmtlckRlYnVnZ2VyQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJEZWJ1Z2dlckFnZW50LmgKQEAgLTM2LDE3ICszNiwxNyBA
QCBjbGFzcyBXb3JrZXJEZWJ1Z2dlckFnZW50IGZpbmFsIDogcHVibGljIFdlYkRlYnVnZ2VyQWdl
bnQgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIFdvcmtlckRl
YnVnZ2VyQWdlbnQoV29ya2VyQWdlbnRDb250ZXh0Jik7Ci0gICAgfldvcmtlckRlYnVnZ2VyQWdl
bnQoKSBvdmVycmlkZTsKKyAgICB+V29ya2VyRGVidWdnZXJBZ2VudCgpOwogCiAgICAgLy8gSlND
OjpEZWJ1Z2dlcjo6T2JzZXJ2ZXIKLSAgICB2b2lkIGJyZWFrcG9pbnRBY3Rpb25Mb2coSlNDOjpK
U0dsb2JhbE9iamVjdCosIGNvbnN0IFN0cmluZyYgZGF0YSkgZmluYWw7CisgICAgdm9pZCBicmVh
a3BvaW50QWN0aW9uTG9nKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBjb25zdCBTdHJpbmcmIGRhdGEp
OwogCiBwcml2YXRlOgogICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gbXV0ZSBjb25zb2xlIGZvciB3
b3JrZXJzLgotICAgIHZvaWQgbXV0ZUNvbnNvbGUoKSBvdmVycmlkZSB7IH0KLSAgICB2b2lkIHVu
bXV0ZUNvbnNvbGUoKSBvdmVycmlkZSB7IH0KKyAgICB2b2lkIG11dGVDb25zb2xlKCkgeyB9Cisg
ICAgdm9pZCB1bm11dGVDb25zb2xlKCkgeyB9CiAKLSAgICBJbnNwZWN0b3I6OkluamVjdGVkU2Ny
aXB0IGluamVjdGVkU2NyaXB0Rm9yRXZhbChFcnJvclN0cmluZyYsIGNvbnN0IGludCogZXhlY3V0
aW9uQ29udGV4dElkKSBvdmVycmlkZTsKKyAgICBJbnNwZWN0b3I6OkluamVjdGVkU2NyaXB0IGlu
amVjdGVkU2NyaXB0Rm9yRXZhbChJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZyYsIE9w
dGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkV4ZWN1dGlvbkNvbnRleHRJZD4m
Jik7CiAKICAgICBXb3JrZXJHbG9iYWxTY29wZSYgbV93b3JrZXJHbG9iYWxTY29wZTsKIH07CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJO
ZXR3b3JrQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93b3JrZXIv
V29ya2VyTmV0d29ya0FnZW50LmNwcAppbmRleCA1M2ZhODgzYWQ5NzE4ODY4NGNiOTRjMDkwZTc5
NjE2OTA4MWI2YjRkLi4yYjE2OGU2ZDNhN2ExYmUxNDY4MzY5YzMwY2MyZWI2YzliMzlkMjc3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJO
ZXR3b3JrQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29y
a2VyL1dvcmtlck5ldHdvcmtBZ2VudC5jcHAKQEAgLTQzLDEyICs0MywxMiBAQCBXb3JrZXJOZXR3
b3JrQWdlbnQ6Oldvcmtlck5ldHdvcmtBZ2VudChXb3JrZXJBZ2VudENvbnRleHQmIGNvbnRleHQp
CiAKIFdvcmtlck5ldHdvcmtBZ2VudDo6fldvcmtlck5ldHdvcmtBZ2VudCgpID0gZGVmYXVsdDsK
IAotU3RyaW5nIFdvcmtlck5ldHdvcmtBZ2VudDo6bG9hZGVySWRlbnRpZmllcihEb2N1bWVudExv
YWRlciopCitQcm90b2NvbDo6TmV0d29yazo6TG9hZGVySWQgV29ya2VyTmV0d29ya0FnZW50Ojps
b2FkZXJJZGVudGlmaWVyKERvY3VtZW50TG9hZGVyKikKIHsKICAgICByZXR1cm4geyB9OwogfQog
Ci1TdHJpbmcgV29ya2VyTmV0d29ya0FnZW50OjpmcmFtZUlkZW50aWZpZXIoRG9jdW1lbnRMb2Fk
ZXIqKQorUHJvdG9jb2w6Ok5ldHdvcms6OkZyYW1lSWQgV29ya2VyTmV0d29ya0FnZW50OjpmcmFt
ZUlkZW50aWZpZXIoRG9jdW1lbnRMb2FkZXIqKQogewogICAgIHJldHVybiB7IH07CiB9CkBAIC01
OSwxMiArNTksMTIgQEAgVmVjdG9yPFdlYlNvY2tldCo+IFdvcmtlck5ldHdvcmtBZ2VudDo6YWN0
aXZlV2ViU29ja2V0cyhjb25zdCBMb2NrSG9sZGVyJikKICAgICByZXR1cm4geyB9OwogfQogCi12
b2lkIFdvcmtlck5ldHdvcmtBZ2VudDo6c2V0UmVzb3VyY2VDYWNoaW5nRGlzYWJsZWQoYm9vbCBk
aXNhYmxlZCkKK3ZvaWQgV29ya2VyTmV0d29ya0FnZW50OjpzZXRSZXNvdXJjZUNhY2hpbmdEaXNh
YmxlZEludGVyYWwoYm9vbCBkaXNhYmxlZCkKIHsKICAgICBtX3dvcmtlckdsb2JhbFNjb3BlLnRo
cmVhZCgpLndvcmtlckRlYnVnZ2VyUHJveHkoKS5zZXRSZXNvdXJjZUNhY2hpbmdEaXNhYmxlZEJ5
V2ViSW5zcGVjdG9yKGRpc2FibGVkKTsKIH0KIAotU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogV29y
a2VyTmV0d29ya0FnZW50OjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KEVycm9yU3RyaW5nJiwgY29u
c3QgU3RyaW5nJikKK1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIFdvcmtlck5ldHdvcmtBZ2VudDo6
c2NyaXB0RXhlY3V0aW9uQ29udGV4dChQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBjb25zdCBQcm90
b2NvbDo6TmV0d29yazo6RnJhbWVJZCYpCiB7CiAgICAgcmV0dXJuICZtX3dvcmtlckdsb2JhbFNj
b3BlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93b3Jr
ZXIvV29ya2VyTmV0d29ya0FnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRz
L3dvcmtlci9Xb3JrZXJOZXR3b3JrQWdlbnQuaAppbmRleCA4OTlmMGE1NmZkMWI3ZGE5NDNhNDU1
M2I4Yzk0Y2YzYzdiZmIwYjk0Li45MWIwNWI5YzIzMGVjN2NkMzVhNDZjZTU3YzU2NjM5MjcyMjJk
ZmYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9X
b3JrZXJOZXR3b3JrQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRz
L3dvcmtlci9Xb3JrZXJOZXR3b3JrQWdlbnQuaApAQCAtMzQsMTUgKzM0LDE1IEBAIGNsYXNzIFdv
cmtlck5ldHdvcmtBZ2VudCBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3JOZXR3b3JrQWdlbnQgewog
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIFdvcmtlck5ldHdvcmtB
Z2VudChXb3JrZXJBZ2VudENvbnRleHQmKTsKLSAgICB+V29ya2VyTmV0d29ya0FnZW50KCkgb3Zl
cnJpZGU7CisgICAgfldvcmtlck5ldHdvcmtBZ2VudCgpOwogCiBwcml2YXRlOgotICAgIFN0cmlu
ZyBsb2FkZXJJZGVudGlmaWVyKERvY3VtZW50TG9hZGVyKikgb3ZlcnJpZGU7Ci0gICAgU3RyaW5n
IGZyYW1lSWRlbnRpZmllcihEb2N1bWVudExvYWRlciopIG92ZXJyaWRlOwotICAgIFZlY3RvcjxX
ZWJTb2NrZXQqPiBhY3RpdmVXZWJTb2NrZXRzKGNvbnN0IExvY2tIb2xkZXImKSBvdmVycmlkZTsK
LSAgICB2b2lkIHNldFJlc291cmNlQ2FjaGluZ0Rpc2FibGVkKGJvb2wpIG92ZXJyaWRlOwotICAg
IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoRXJyb3JTdHJp
bmcmLCBjb25zdCBTdHJpbmcmIGZyYW1lSWQpIG92ZXJyaWRlOwotICAgIGJvb2wgc2hvdWxkRm9y
Y2VCdWZmZXJpbmdOZXR3b3JrUmVzb3VyY2VEYXRhKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
dHJ1ZTsgfQorICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OkxvYWRlcklkIGxvYWRl
cklkZW50aWZpZXIoRG9jdW1lbnRMb2FkZXIqKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpO
ZXR3b3JrOjpGcmFtZUlkIGZyYW1lSWRlbnRpZmllcihEb2N1bWVudExvYWRlciopOworICAgIFZl
Y3RvcjxXZWJTb2NrZXQqPiBhY3RpdmVXZWJTb2NrZXRzKGNvbnN0IExvY2tIb2xkZXImKTsKKyAg
ICB2b2lkIHNldFJlc291cmNlQ2FjaGluZ0Rpc2FibGVkSW50ZXJhbChib29sKTsKKyAgICBTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkVycm9yU3RyaW5nJiwgY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6
RnJhbWVJZCYpOworICAgIGJvb2wgc2hvdWxkRm9yY2VCdWZmZXJpbmdOZXR3b3JrUmVzb3VyY2VE
YXRhKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgV29ya2VyR2xvYmFsU2NvcGUmIG1f
d29ya2VyR2xvYmFsU2NvcGU7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2FnZW50cy93b3JrZXIvV29ya2VyUnVudGltZUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlclJ1bnRpbWVBZ2VudC5jcHAKaW5kZXggZDky
MzA4MWM1MWUzYmQyNzUyMWFhMjQxYzdjYWM4ZmI0MGQzZTI4My4uZmZmZDNjZWEyMTUzNTlmZTZm
MGVkMWVkZDc3MmQxNmI3MDk1MWRlYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2FnZW50cy93b3JrZXIvV29ya2VyUnVudGltZUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJSdW50aW1lQWdlbnQuY3BwCkBAIC01
MSw3ICs1MSw3IEBAIFdvcmtlclJ1bnRpbWVBZ2VudDo6V29ya2VyUnVudGltZUFnZW50KFdvcmtl
ckFnZW50Q29udGV4dCYgY29udGV4dCkKIAogV29ya2VyUnVudGltZUFnZW50Ojp+V29ya2VyUnVu
dGltZUFnZW50KCkgPSBkZWZhdWx0OwogCi1JbmplY3RlZFNjcmlwdCBXb3JrZXJSdW50aW1lQWdl
bnQ6OmluamVjdGVkU2NyaXB0Rm9yRXZhbChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0
IGludCogZXhlY3V0aW9uQ29udGV4dElkKQorSW5qZWN0ZWRTY3JpcHQgV29ya2VyUnVudGltZUFn
ZW50OjppbmplY3RlZFNjcmlwdEZvckV2YWwoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0
cmluZywgT3B0aW9uYWw8UHJvdG9jb2w6OlJ1bnRpbWU6OkV4ZWN1dGlvbkNvbnRleHRJZD4mJiBl
eGVjdXRpb25Db250ZXh0SWQpCiB7CiAgICAgaWYgKGV4ZWN1dGlvbkNvbnRleHRJZCkgewogICAg
ICAgICBlcnJvclN0cmluZyA9ICJleGVjdXRpb25Db250ZXh0SWQgaXMgbm90IHN1cHBvcnRlZCBm
b3Igd29ya2VycyBhcyB0aGVyZSBpcyBvbmx5IG9uZSBleGVjdXRpb24gY29udGV4dCJfczsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlclJ1
bnRpbWVBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29y
a2VyUnVudGltZUFnZW50LmgKaW5kZXggNTMwOGViNDM4OGQ0ZDEwNTJlYzc0NTg1MDQ3YTFlODhl
N2Q0M2I0Yi4uNmI5OThmNGQxNzMxODUxZjk5YjY3ZWUxNWE1ZDIwMDE1ODdmNGQwNiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2VyUnVudGlt
ZUFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29y
a2VyUnVudGltZUFnZW50LmgKQEAgLTM3LDIxICszNywyMCBAQAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBjbGFzcyBXb3JrZXJHbG9iYWxTY29wZTsKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5n
OwogCiBjbGFzcyBXb3JrZXJSdW50aW1lQWdlbnQgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yOjpJ
bnNwZWN0b3JSdW50aW1lQWdlbnQgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFdvcmtlclJ1
bnRpbWVBZ2VudCk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAg
V29ya2VyUnVudGltZUFnZW50KFdvcmtlckFnZW50Q29udGV4dCYpOwotICAgIH5Xb3JrZXJSdW50
aW1lQWdlbnQoKSBvdmVycmlkZTsKKyAgICB+V29ya2VyUnVudGltZUFnZW50KCk7CiAKIHByaXZh
dGU6Ci0gICAgSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdEZvckV2YWwo
RXJyb3JTdHJpbmcmLCBjb25zdCBpbnQqIGV4ZWN1dGlvbkNvbnRleHRJZCkgb3ZlcnJpZGU7Cisg
ICAgSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdEZvckV2YWwoSW5zcGVj
dG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29s
OjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0SWQ+JiYpOwogCiAgICAgLy8gV2UgZG9uJ3QgbmVl
ZCB0byBtdXRlIGNvbnNvbGUgZm9yIHdvcmtlcnMuCi0gICAgdm9pZCBtdXRlQ29uc29sZSgpIG92
ZXJyaWRlIHsgfQotICAgIHZvaWQgdW5tdXRlQ29uc29sZSgpIG92ZXJyaWRlIHsgfQorICAgIHZv
aWQgbXV0ZUNvbnNvbGUoKSB7IH0KKyAgICB2b2lkIHVubXV0ZUNvbnNvbGUoKSB7IH0KIAogICAg
IFJlZlB0cjxJbnNwZWN0b3I6OlJ1bnRpbWVCYWNrZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlz
cGF0Y2hlcjsKICAgICBXb3JrZXJHbG9iYWxTY29wZSYgbV93b3JrZXJHbG9iYWxTY29wZTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NETVV0aWxp
dGllcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1VdGls
aXRpZXMuY3BwCmluZGV4IDVlODg1YWQ2ZTU4NjkwOWMwZWQyMTViZWU1YmU4ZThlZjdjMjdhZjgu
LjViZWJjYjQ5YWE4ZWI5YTJiYjA3MTFlYWUwODBmMzc3ZTIyYjk4MzQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NETVV0aWxpdGllcy5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNVXRpbGl0aWVzLmNw
cApAQCAtNDcsMTIgKzQ3LDEyIEBAIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcnNlSlNPTk9iamVj
dChjb25zdCBTaGFyZWRCdWZmZXImIGJ1ZmZlcikKIAogICAgIC8vIFBhcnNlIHRoZSBidWZmZXIg
Y29udGVudHMgYXMgSlNPTiwgcmV0dXJuaW5nIHRoZSByb290IG9iamVjdCAoaWYgYW55KS4KICAg
ICBTdHJpbmcganNvbiB7IGJ1ZmZlci5kYXRhKCksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihzaXpl
KSB9OwotICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gdmFsdWU7Ci0gICAgUmVmUHRyPEpTT046Ok9i
amVjdD4gb2JqZWN0OwotICAgIGlmICghSlNPTjo6VmFsdWU6OnBhcnNlSlNPTihqc29uLCB2YWx1
ZSkgfHwgIXZhbHVlLT5hc09iamVjdChvYmplY3QpKQorCisgICAgYXV0byB2YWx1ZSA9IEpTT046
OlZhbHVlOjpwYXJzZUpTT04oanNvbik7CisgICAgaWYgKCF2YWx1ZSkKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAKLSAgICByZXR1cm4gb2JqZWN0OworICAgIHJldHVybiB2YWx1ZS0+YXNPYmpl
Y3QoKTsKIH0KIAogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5
cHRlZG1lZGlhL2NsZWFya2V5L0NETUNsZWFyS2V5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2VuY3J5cHRlZG1lZGlhL2NsZWFya2V5L0NETUNsZWFyS2V5LmNwcAppbmRleCBlNmNjMjJk
OTBjN2FjMzliNTZmZDgyYTE2YjA3NjVlYzFlMWNmYTg3Li41YTE4MmZkZjQ1MjY0MmFhOGVmNDYw
Yjc3NGFjOWU3YjQwYzJlYzUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9l
bmNyeXB0ZWRtZWRpYS9jbGVhcmtleS9DRE1DbGVhcktleS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJLZXkuY3BwCkBAIC01
NSwyMyArNTUsMjcgQEAgc3RhdGljIE9wdGlvbmFsPFZlY3RvcjxSZWZQdHI8S2V5SGFuZGxlPj4+
IHBhcnNlTGljZW5zZUZvcm1hdChjb25zdCBKU09OOjpPYmplY3QKICAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKIAogICAgIC8vIFJldHJpZXZlIHRoZSBrZXlzIGFycmF5LgotICAgIFJlZlB0
cjxKU09OOjpBcnJheT4ga2V5c0FycmF5OwotICAgIGlmICghaXQtPnZhbHVlLT5hc0FycmF5KGtl
eXNBcnJheSkpCisgICAgYXV0byBrZXlzQXJyYXkgPSBpdC0+dmFsdWUtPmFzQXJyYXkoKTsKKyAg
ICBpZiAoIWtleXNBcnJheSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIFZl
Y3RvcjxSZWZQdHI8S2V5SGFuZGxlPj4gZGVjb2RlZEtleXM7CiAgICAgYm9vbCB2YWxpZEZvcm1h
dCA9IHN0ZDo6YWxsX29mKGtleXNBcnJheS0+YmVnaW4oKSwga2V5c0FycmF5LT5lbmQoKSwKICAg
ICAgICAgWyZkZWNvZGVkS2V5c10gKGNvbnN0IGF1dG8mIHZhbHVlKSB7Ci0gICAgICAgICAgICBS
ZWZQdHI8SlNPTjo6T2JqZWN0PiBrZXlPYmplY3Q7Ci0gICAgICAgICAgICBpZiAoIXZhbHVlLT5h
c09iamVjdChrZXlPYmplY3QpKQorICAgICAgICAgICAgYXV0byBrZXlPYmplY3QgPSB2YWx1ZS0+
YXNPYmplY3QoKTsKKyAgICAgICAgICAgIGlmICgha2V5T2JqZWN0KQogICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgICAgICAgICAgU3RyaW5nIGtleVR5cGU7Ci0gICAgICAgICAg
ICBpZiAoIWtleU9iamVjdC0+Z2V0U3RyaW5nKCJrdHkiLCBrZXlUeXBlKSB8fCAhZXF1YWxMZXR0
ZXJzSWdub3JpbmdBU0NJSUNhc2Uoa2V5VHlwZSwgIm9jdCIpKQorICAgICAgICAgICAgYXV0byBr
ZXlUeXBlID0ga2V5T2JqZWN0LT5nZXRTdHJpbmcoImt0eSIpOworICAgICAgICAgICAgaWYgKCFr
ZXlUeXBlIHx8ICFlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShrZXlUeXBlLCAib2N0Iikp
CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgICAgICBTdHJpbmcga2V5
SUQsIGtleVZhbHVlOwotICAgICAgICAgICAgaWYgKCFrZXlPYmplY3QtPmdldFN0cmluZygia2lk
Iiwga2V5SUQpIHx8ICFrZXlPYmplY3QtPmdldFN0cmluZygiayIsIGtleVZhbHVlKSkKKyAgICAg
ICAgICAgIGF1dG8ga2V5SUQgPSBrZXlPYmplY3QtPmdldFN0cmluZygia2lkIik7CisgICAgICAg
ICAgICBpZiAoIWtleUlEKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAg
ICAgICAgYXV0byBrZXlWYWx1ZSA9IGtleU9iamVjdC0+Z2V0U3RyaW5nKCJrIik7CisgICAgICAg
ICAgICBpZiAoIWtleVZhbHVlKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAg
ICAgICAgICAgS2V5SURUeXBlIGtleUlERGF0YTsKQEAgLTk2LDggKzEwMCw4IEBAIHN0YXRpYyBi
b29sIHBhcnNlTGljZW5zZVJlbGVhc2VBY2tub3dsZWRnZW1lbnRGb3JtYXQoY29uc3QgSlNPTjo6
T2JqZWN0JiByb290KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBSZXRyaWV2ZSB0
aGUga2lkcyBhcnJheS4KLSAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IGtpZHNBcnJheTsKLSAgICBp
ZiAoIWl0LT52YWx1ZS0+YXNBcnJheShraWRzQXJyYXkpKQorICAgIGF1dG8ga2lkc0FycmF5ID0g
aXQtPnZhbHVlLT5hc0FycmF5KCk7CisgICAgaWYgKCFraWRzQXJyYXkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAogICAgIC8vIEZJWE1FOiBSZXR1cm4gdGhlIGtleSBJRHMgYW5kIHZhbGlkYXRl
IHRoZW0uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZv
dW5kYXRpb24vQ0RNRmFpclBsYXlTdHJlYW1pbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0NETUZhaXJQbGF5U3RyZWFtaW5nLmNwcAppbmRleCA4
YWM0OGVjNWRjNjliMzE0OTU3YmE0MzNmOTcxMDFlYTI3NzY5NjQ0Li40ZjQyYzQ5M2NjMzU3MGRk
YzZhZjA4ZGUzOTA1ZDBjYzg0OWQ5YTcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vQ0RNRmFpclBsYXlTdHJlYW1pbmcuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9DRE1GYWlyUGxh
eVN0cmVhbWluZy5jcHAKQEAgLTkyLDI0ICs5MiwyNCBAQCBzdGF0aWMgVmVjdG9yPFJlZjxTaGFy
ZWRCdWZmZXI+PiBleHRyYWN0U2luZkRhdGEoY29uc3QgU2hhcmVkQnVmZmVyJiBidWZmZXIpCiAg
ICAgICAgIHJldHVybiB7IH07CiAgICAgU3RyaW5nIGpzb24geyBidWZmZXIuZGF0YSgpLCBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oYnVmZmVyLnNpemUoKSkgfTsKIAotICAgIFJlZlB0cjxKU09OOjpW
YWx1ZT4gdmFsdWU7Ci0gICAgaWYgKCFKU09OOjpWYWx1ZTo6cGFyc2VKU09OKGpzb24sIHZhbHVl
KSkKKyAgICBhdXRvIHZhbHVlID0gSlNPTjo6VmFsdWU6OnBhcnNlSlNPTihqc29uKTsKKyAgICBp
ZiAoIXZhbHVlKQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAgUmVmUHRyPEpTT046Ok9iamVj
dD4gb2JqZWN0OwotICAgIGlmICghdmFsdWUtPmFzT2JqZWN0KG9iamVjdCkpCisgICAgYXV0byBv
YmplY3QgPSB2YWx1ZS0+YXNPYmplY3QoKTsKKyAgICBpZiAoIW9iamVjdCkKICAgICAgICAgcmV0
dXJuIHsgfTsKIAotICAgIFJlZlB0cjxKU09OOjpBcnJheT4gc2luZkFycmF5OwotICAgIGlmICgh
b2JqZWN0LT5nZXRBcnJheShDRE1Qcml2YXRlRmFpclBsYXlTdHJlYW1pbmc6OnNpbmZOYW1lKCks
IHNpbmZBcnJheSkpCisgICAgYXV0byBzaW5mQXJyYXkgPSBvYmplY3QtPmdldEFycmF5KENETVBy
aXZhdGVGYWlyUGxheVN0cmVhbWluZzo6c2luZk5hbWUoKSk7CisgICAgaWYgKCFzaW5mQXJyYXkp
CiAgICAgICAgIHJldHVybiB7IH07CiAKICAgICBWZWN0b3I8UmVmPFNoYXJlZEJ1ZmZlcj4+IHNp
bmZzOwogICAgIHNpbmZzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoc2luZkFycmF5LT5sZW5ndGgo
KSk7CiAKICAgICBmb3IgKGF1dG8mIHZhbHVlIDogKnNpbmZBcnJheSkgewotICAgICAgICBTdHJp
bmcga2V5SUQ7Ci0gICAgICAgIGlmICghdmFsdWUtPmFzU3RyaW5nKGtleUlEKSkKKyAgICAgICAg
YXV0byBrZXlJRCA9IHZhbHVlLT5hc1N0cmluZygpOworICAgICAgICBpZiAoIWtleUlEKQogICAg
ICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgVmVjdG9yPGNoYXI+IHNpbmZEYXRhOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29i
amMvQ0RNSW5zdGFuY2VGYWlyUGxheVN0cmVhbWluZ0FWRk9iakMubW0gYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1JbnN0YW5jZUZhaXJQbGF5
U3RyZWFtaW5nQVZGT2JqQy5tbQppbmRleCBjMDUxOWE4YzIyMTkzMGY1YzYxYTBhODBlOWVjM2Ex
ZTk5YzhmMWQ0Li4xYzQ5Zjg4NzUzYTk0YzkwN2JkZjZkYjAxOWYyMTk1Yjg0N2I0ODNkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2Jq
Yy9DRE1JbnN0YW5jZUZhaXJQbGF5U3RyZWFtaW5nQVZGT2JqQy5tbQorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9DRE1JbnN0YW5jZUZhaXJQ
bGF5U3RyZWFtaW5nQVZGT2JqQy5tbQpAQCAtMzEyLDExICszMTIsOCBAQCBzdGF0aWMgUmVmUHRy
PEpTT046OlZhbHVlPiBwYXJzZUpTT05WYWx1ZShjb25zdCBTaGFyZWRCdWZmZXImIGJ1ZmZlcikK
IAogICAgIC8vIFBhcnNlIHRoZSBidWZmZXIgY29udGVudHMgYXMgSlNPTiwgcmV0dXJuaW5nIHRo
ZSByb290IG9iamVjdCAoaWYgYW55KS4KICAgICBTdHJpbmcganNvbiB7IGJ1ZmZlci5kYXRhKCks
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzaXplKSB9OwotICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4g
dmFsdWU7Ci0gICAgaWYgKCFKU09OOjpWYWx1ZTo6cGFyc2VKU09OKGpzb24sIHZhbHVlKSkKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICByZXR1cm4gdmFsdWU7CisgICAgcmV0dXJuIEpT
T046OlZhbHVlOjpwYXJzZUpTT04oanNvbik7CiB9CiAKIGJvb2wgQ0RNSW5zdGFuY2VGYWlyUGxh
eVN0cmVhbWluZ0FWRk9iakM6OnN1cHBvcnRzUGVyc2lzdGFibGVTdGF0ZSgpCkBAIC04MDQsMTkg
KzgwMSwyNCBAQCB2b2lkIENETUluc3RhbmNlU2Vzc2lvbkZhaXJQbGF5U3RyZWFtaW5nQVZGT2Jq
Qzo6dXBkYXRlTGljZW5zZShjb25zdCBTdHJpbmcmLCBMaQogICAgICAgICB9KTsKIAogICAgICAg
ICBhdXRvIHJvb3QgPSBwYXJzZUpTT05WYWx1ZShyZXNwb25zZURhdGEpOwotICAgICAgICBSZWZQ
dHI8SlNPTjo6QXJyYXk+IGFycmF5OwotICAgICAgICBpZiAoIXJvb3QgfHwgIXJvb3QtPmFzQXJy
YXkoYXJyYXkpKSB7CisgICAgICAgIGlmICghcm9vdCkgewogICAgICAgICAgICAgY2FsbGJhY2so
ZmFsc2UsIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQsIEZhaWxlZCk7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBhdXRvIHBhcnNlUmVz
cG9uc2UgPSBbJl0oUmVmUHRyPEpTT046OlZhbHVlPiYgdmFsdWUpIC0+IGJvb2wgewotICAgICAg
ICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gb2JqZWN0OwotICAgICAgICAgICAgaWYgKCF2YWx1
ZS0+YXNPYmplY3Qob2JqZWN0KSkKKyAgICAgICAgYXV0byBhcnJheSA9IHJvb3QtPmFzQXJyYXko
KTsKKyAgICAgICAgaWYgKCFhcnJheSkgeworICAgICAgICAgICAgY2FsbGJhY2soZmFsc2UsIFdU
Rjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQsIEZhaWxlZCk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBhdXRvIHBhcnNlUmVzcG9uc2UgPSBb
Jl0oUmVmPEpTT046OlZhbHVlPiYmIHZhbHVlKSAtPiBib29sIHsKKyAgICAgICAgICAgIGF1dG8g
b2JqZWN0ID0gdmFsdWUtPmFzT2JqZWN0KCk7CisgICAgICAgICAgICBpZiAoIW9iamVjdCkKICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgICAgIFN0cmluZyBrZXlJRFN0
cmluZzsKLSAgICAgICAgICAgIGlmICghb2JqZWN0LT5nZXRTdHJpbmcoImtleUlEIiwga2V5SURT
dHJpbmcpKQorICAgICAgICAgICAgYXV0byBrZXlJRFN0cmluZyA9IG9iamVjdC0+Z2V0U3RyaW5n
KCJrZXlJRCIpOworICAgICAgICAgICAgaWYgKCFrZXlJRFN0cmluZykKICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgICAgIFZlY3Rvcjx1aW50OF90PiBrZXlJRFZlY3Rv
cjsKQEAgLTg0MywxNCArODQ1LDE0IEBAIHZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9uRmFpclBsYXlT
dHJlYW1pbmdBVkZPYmpDOjp1cGRhdGVMaWNlbnNlKGNvbnN0IFN0cmluZyYsIExpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgICAgICBpZiAoaGFzRXJyb3IpIHsKLSAg
ICAgICAgICAgICAgICBOU0ludGVnZXIgZXJyb3JDb2RlOwotICAgICAgICAgICAgICAgIGlmICgh
ZXJyb3JGaW5kUmVzdWx0cy0+dmFsdWUtPmFzSW50ZWdlcihlcnJvckNvZGUpKQorICAgICAgICAg
ICAgICAgIGF1dG8gZXJyb3JDb2RlID0gZXJyb3JGaW5kUmVzdWx0cy0+dmFsdWUtPmFzSW50ZWdl
cigpOworICAgICAgICAgICAgICAgIGlmICghZXJyb3JDb2RlKQogICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgYXV0byBlcnJvciA9IGFkb3B0TlMoW1tO
U0Vycm9yIGFsbG9jXSBpbml0V2l0aERvbWFpbjpAIm9yZy53ZWJraXQuZW1lIiBjb2RlOmVycm9y
Q29kZSB1c2VySW5mbzpuaWxdKTsKKyAgICAgICAgICAgICAgICBhdXRvIGVycm9yID0gYWRvcHRO
UyhbW05TRXJyb3IgYWxsb2NdIGluaXRXaXRoRG9tYWluOkAib3JnLndlYmtpdC5lbWUiIGNvZGU6
KmVycm9yQ29kZSB1c2VySW5mbzpuaWxdKTsKICAgICAgICAgICAgICAgICBbcmVxdWVzdCBwcm9j
ZXNzQ29udGVudEtleVJlc3BvbnNlRXJyb3I6ZXJyb3IuZ2V0KCldOwogICAgICAgICAgICAgfSBl
bHNlIGlmIChoYXNQYXlsb2FkKSB7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIHBheWxvYWRTdHJp
bmc7Ci0gICAgICAgICAgICAgICAgaWYgKCFwYXlsb2FkRmluZFJlc3VsdHMtPnZhbHVlLT5hc1N0
cmluZyhwYXlsb2FkU3RyaW5nKSkKKyAgICAgICAgICAgICAgICBhdXRvIHBheWxvYWRTdHJpbmcg
PSBwYXlsb2FkRmluZFJlc3VsdHMtPnZhbHVlLT5hc1N0cmluZygpOworICAgICAgICAgICAgICAg
IGlmICghcGF5bG9hZFN0cmluZykKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICAgICAgICAgIFZlY3Rvcjx1aW50OF90PiBwYXlsb2FkVmVjdG9yOwogICAgICAgICAg
ICAgICAgIGlmICghYmFzZTY0RGVjb2RlKHBheWxvYWRTdHJpbmcsIHBheWxvYWRWZWN0b3IpKQpA
QCAtODYxLDcgKzg2Myw3IEBAIHZvaWQgQ0RNSW5zdGFuY2VTZXNzaW9uRmFpclBsYXlTdHJlYW1p
bmdBVkZPYmpDOjp1cGRhdGVMaWNlbnNlKGNvbnN0IFN0cmluZyYsIExpCiAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICAgICAgfTsKICAgICAgICAgZm9yIChhdXRvIHZhbHVlIDogKmFycmF5
KSB7Ci0gICAgICAgICAgICBpZiAoIXBhcnNlUmVzcG9uc2UodmFsdWUpKSB7CisgICAgICAgICAg
ICBpZiAoIXBhcnNlUmVzcG9uc2UoV1RGTW92ZSh2YWx1ZSkpKSB7CiAgICAgICAgICAgICAgICAg
REVCVUdfTE9HX0lGX1BPU1NJQkxFKExPR0lERU5USUZJRVIsICInY2VuYycgaW5pdERhdGEsIEZh
aWxlZCwgY291bGQgbm90IHBhcnNlIHJlc3BvbnNlIik7CiAgICAgICAgICAgICAgICAgY2FsbGJh
Y2soZmFsc2UsIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQsIEZhaWxl
ZCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkRyaXZl
ci9Db21tYW5kUmVzdWx0LmNwcCBiL1NvdXJjZS9XZWJEcml2ZXIvQ29tbWFuZFJlc3VsdC5jcHAK
aW5kZXggYTcyMDcwOTkwODkzZGIxNTZkN2ZkNmZlMzA3YTUzZjIwY2IyMzUwYS4uMDgzMWFmNzEy
MWExZjkwYjA3YzZjOGNhYzQ4MTc2ZDU5MDVhMjY0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkRy
aXZlci9Db21tYW5kUmVzdWx0LmNwcAorKysgYi9Tb3VyY2UvV2ViRHJpdmVyL0NvbW1hbmRSZXN1
bHQuY3BwCkBAIC00OSwxOCArNDksMTkgQEAgQ29tbWFuZFJlc3VsdDo6Q29tbWFuZFJlc3VsdChS
ZWZQdHI8SlNPTjo6VmFsdWU+JiYgcmVzdWx0LCBPcHRpb25hbDxFcnJvckNvZGU+IGUKICAgICBp
ZiAoIXJlc3VsdCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4g
ZXJyb3JPYmplY3Q7Ci0gICAgaWYgKCFyZXN1bHQtPmFzT2JqZWN0KGVycm9yT2JqZWN0KSkKKyAg
ICBhdXRvIGVycm9yT2JqZWN0ID0gcmVzdWx0LT5hc09iamVjdCgpOworICAgIGlmICghZXJyb3JP
YmplY3QpCiAgICAgICAgIHJldHVybjsKIAotICAgIGludCBlcnJvcjsKLSAgICBpZiAoIWVycm9y
T2JqZWN0LT5nZXRJbnRlZ2VyKCJjb2RlIiwgZXJyb3IpKQotICAgICAgICByZXR1cm47Ci0gICAg
U3RyaW5nIGVycm9yTWVzc2FnZTsKLSAgICBpZiAoIWVycm9yT2JqZWN0LT5nZXRTdHJpbmcoIm1l
c3NhZ2UiLCBlcnJvck1lc3NhZ2UpKQorICAgIGF1dG8gZXJyb3IgPSBlcnJvck9iamVjdC0+Z2V0
SW50ZWdlcigiY29kZSIpOworICAgIGlmICghZXJyb3IpCiAgICAgICAgIHJldHVybjsKIAotICAg
IHN3aXRjaCAoZXJyb3IpIHsKKyAgICBhdXRvIGVycm9yTWVzc2FnZSA9IGVycm9yT2JqZWN0LT5n
ZXRTdHJpbmcoIm1lc3NhZ2UiKTsKKyAgICBpZiAoIWVycm9yTWVzc2FnZSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgc3dpdGNoICgqZXJyb3IpIHsKICAgICBjYXNlIFByb3RvY29sRXJyb3JDb2Rl
OjpQYXJzZUVycm9yOgogICAgIGNhc2UgUHJvdG9jb2xFcnJvckNvZGU6OkludmFsaWRSZXF1ZXN0
OgogICAgIGNhc2UgUHJvdG9jb2xFcnJvckNvZGU6Ok1ldGhvZE5vdEZvdW5kOgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkRyaXZlci9TZXNzaW9uLmNwcCBiL1NvdXJjZS9XZWJEcml2ZXIvU2Vzc2lv
bi5jcHAKaW5kZXggYTU1ZmE0OTM4MGM0OTUxMzBmZTMxYTk2Yzg0ZTA4OWI3NmQxY2FjOC4uYWVh
NDA2MWUyMjVhN2NkY2JjZGVkN2U3OGJjNmQ3MGY5ZmQ4MDNkNSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkRyaXZlci9TZXNzaW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViRHJpdmVyL1Nlc3Npb24uY3Bw
CkBAIC04MywxMSArODMsMTAgQEAgYm9vbCBTZXNzaW9uOjppc0Nvbm5lY3RlZCgpIGNvbnN0CiAK
IHN0YXRpYyBPcHRpb25hbDxTdHJpbmc+IGZpcnN0V2luZG93SGFuZGxlSW5SZXN1bHQoSlNPTjo6
VmFsdWUmIHJlc3VsdCkKIHsKLSAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IGhhbmRsZXM7Ci0gICAg
aWYgKHJlc3VsdC5hc0FycmF5KGhhbmRsZXMpICYmIGhhbmRsZXMtPmxlbmd0aCgpKSB7Ci0gICAg
ICAgIGF1dG8gaGFuZGxlVmFsdWUgPSBoYW5kbGVzLT5nZXQoMCk7Ci0gICAgICAgIFN0cmluZyBo
YW5kbGU7Ci0gICAgICAgIGlmIChoYW5kbGVWYWx1ZS0+YXNTdHJpbmcoaGFuZGxlKSkKKyAgICBh
dXRvIGhhbmRsZXMgPSByZXN1bHQuYXNBcnJheSgpOworICAgIGlmIChoYW5kbGVzICYmIGhhbmRs
ZXMtPmxlbmd0aCgpKSB7CisgICAgICAgIGF1dG8gaGFuZGxlID0gaGFuZGxlcy0+Z2V0KDApLT5h
c1N0cmluZygpOworICAgICAgICBpZiAoISFoYW5kbGUpCiAgICAgICAgICAgICByZXR1cm4gaGFu
ZGxlOwogICAgIH0KICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwpAQCAtMTI2LDcgKzEyNSw3IEBA
IHZvaWQgU2Vzc2lvbjo6Y2xvc2UoRnVuY3Rpb248dm9pZCAoQ29tbWFuZFJlc3VsdCYmKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKIAogdm9pZCBTZXNzaW9uOjpnZXRUaW1lb3V0cyhGdW5jdGlvbjx2
b2lkIChDb21tYW5kUmVzdWx0JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIFJlZlB0
cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAg
IGF1dG8gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgaWYgKG1fc2Ny
aXB0VGltZW91dCA9PSBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OmluZmluaXR5KCkpCiAg
ICAgICAgIHBhcmFtZXRlcnMtPnNldFZhbHVlKCJzY3JpcHQiX3MsIEpTT046OlZhbHVlOjpudWxs
KCkpOwogICAgIGVsc2UKQEAgLTE4NywxMSArMTg2LDEzIEBAIHZvaWQgU2Vzc2lvbjo6Y3JlYXRl
VG9wTGV2ZWxCcm93c2luZ0NvbnRleHQoRnVuY3Rpb248dm9pZCAoQ29tbWFuZFJlc3VsdCYmKT4m
JiBjCiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKFdU
Rk1vdmUocmVzcG9uc2UucmVzcG9uc2VPYmplY3QpKSk7CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KLSAgICAgICAgU3RyaW5nIGhhbmRsZTsKLSAgICAgICAgaWYgKCFyZXNwb25zZS5y
ZXNwb25zZU9iamVjdC0+Z2V0U3RyaW5nKCJoYW5kbGUiX3MsIGhhbmRsZSkpIHsKKworICAgICAg
ICBhdXRvIGhhbmRsZSA9IHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRTdHJpbmcoImhhbmRs
ZSJfcyk7CisgICAgICAgIGlmICghaGFuZGxlKSB7CiAgICAgICAgICAgICBjb21wbGV0aW9uSGFu
ZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93
bkVycm9yKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KKwogICAgICAgICBzd2l0
Y2hUb1RvcExldmVsQnJvd3NpbmdDb250ZXh0KGhhbmRsZSk7CiAgICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKENvbW1hbmRSZXN1bHQ6OnN1Y2Nlc3MoKSk7CiAgICAgfSk7CkBAIC0xOTksMTUgKzIw
MCwxNiBAQCB2b2lkIFNlc3Npb246OmNyZWF0ZVRvcExldmVsQnJvd3NpbmdDb250ZXh0KEZ1bmN0
aW9uPHZvaWQgKENvbW1hbmRSZXN1bHQmJik+JiYgYwogCiB2b2lkIFNlc3Npb246OmhhbmRsZVVz
ZXJQcm9tcHRzKEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSZXN1bHQmJik+JiYgY29tcGxldGlvbkhh
bmRsZXIpCiB7Ci0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVycyA9IEpTT046Ok9i
amVjdDo6Y3JlYXRlKCk7CisgICAgYXV0byBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVh
dGUoKTsKICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoImJyb3dzaW5nQ29udGV4dEhhbmRsZSJf
cywgbV90b3BsZXZlbEJyb3dzaW5nQ29udGV4dC52YWx1ZSgpKTsKICAgICBtX2hvc3QtPnNlbmRD
b21tYW5kVG9CYWNrZW5kKCJpc1Nob3dpbmdKYXZhU2NyaXB0RGlhbG9nIl9zLCBXVEZNb3ZlKHBh
cmFtZXRlcnMpLCBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjb21wbGV0
aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXShTZXNzaW9uSG9zdDo6Q29t
bWFuZFJlc3BvbnNlJiYgcmVzcG9uc2UpIG11dGFibGUgewogICAgICAgICBpZiAocmVzcG9uc2Uu
aXNFcnJvciB8fCAhcmVzcG9uc2UucmVzcG9uc2VPYmplY3QpIHsKICAgICAgICAgICAgIGNvbXBs
ZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoV1RGTW92ZShyZXNwb25zZS5yZXNwb25z
ZU9iamVjdCkpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBib29s
IGlzU2hvd2luZ0phdmFTY3JpcHREaWFsb2c7Ci0gICAgICAgIGlmICghcmVzcG9uc2UucmVzcG9u
c2VPYmplY3QtPmdldEJvb2xlYW4oInJlc3VsdCIsIGlzU2hvd2luZ0phdmFTY3JpcHREaWFsb2cp
KSB7CisKKyAgICAgICAgYXV0byBpc1Nob3dpbmdKYXZhU2NyaXB0RGlhbG9nID0gcmVzcG9uc2Uu
cmVzcG9uc2VPYmplY3QtPmdldEJvb2xlYW4oInJlc3VsdCIpOworICAgICAgICBpZiAoIWlzU2hv
d2luZ0phdmFTY3JpcHREaWFsb2cpIHsKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENv
bW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3Ip
KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtMjczLDEzICsyNzUsMTMgQEAg
dm9pZCBTZXNzaW9uOjpyZXBvcnRVbmV4cGVjdGVkQWxlcnRPcGVuKEZ1bmN0aW9uPHZvaWQgKENv
bW1hbmRSZXN1bHQmJik+JiYgY29tcGwKICAgICBnZXRBbGVydFRleHQoW2NvbXBsZXRpb25IYW5k
bGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKENvbW1hbmRSZXN1bHQmJiByZXN1bHQp
IHsKICAgICAgICAgT3B0aW9uYWw8U3RyaW5nPiBhbGVydFRleHQ7CiAgICAgICAgIGlmICghcmVz
dWx0LmlzRXJyb3IoKSkgewotICAgICAgICAgICAgU3RyaW5nIHZhbHVlU3RyaW5nOwotICAgICAg
ICAgICAgaWYgKHJlc3VsdC5yZXN1bHQoKS0+YXNTdHJpbmcodmFsdWVTdHJpbmcpKQorICAgICAg
ICAgICAgYXV0byB2YWx1ZVN0cmluZyA9IHJlc3VsdC5yZXN1bHQoKS0+YXNTdHJpbmcoKTsKKyAg
ICAgICAgICAgIGlmICghIXZhbHVlU3RyaW5nKQogICAgICAgICAgICAgICAgIGFsZXJ0VGV4dCA9
IHZhbHVlU3RyaW5nOwogICAgICAgICB9CiAgICAgICAgIGF1dG8gZXJyb3JSZXN1bHQgPSBDb21t
YW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5leHBlY3RlZEFsZXJ0
T3Blbik7CiAgICAgICAgIGlmIChhbGVydFRleHQpIHsKLSAgICAgICAgICAgIFJlZlB0cjxKU09O
OjpPYmplY3Q+IGFkZGl0b25hbERhdGEgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgICAg
ICAgICAgYXV0byBhZGRpdG9uYWxEYXRhID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICAg
ICAgICAgIGFkZGl0b25hbERhdGEtPnNldFN0cmluZygidGV4dCJfcywgYWxlcnRUZXh0LnZhbHVl
KCkpOwogICAgICAgICAgICAgZXJyb3JSZXN1bHQuc2V0QWRkaXRpb25hbEVycm9yRGF0YShXVEZN
b3ZlKGFkZGl0b25hbERhdGEpKTsKICAgICAgICAgfQpAQCAtMzAwLDcgKzMwMiw3IEBAIHZvaWQg
U2Vzc2lvbjo6Z28oY29uc3QgU3RyaW5nJiB1cmwsIEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSZXN1
bHQmJik+JiYgY29tcGxldGlvCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAg
ICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVh
dGUoKTsKKyAgICAgICAgYXV0byBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsK
ICAgICAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJoYW5kbGUiX3MsIG1fdG9wbGV2ZWxCcm93
c2luZ0NvbnRleHQudmFsdWUoKSk7CiAgICAgICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygidXJs
Il9zLCB1cmwpOwogICAgICAgICBwYXJhbWV0ZXJzLT5zZXREb3VibGUoInBhZ2VMb2FkVGltZW91
dCJfcywgbV9wYWdlTG9hZFRpbWVvdXQpOwpAQCAtMzMwLDIzICszMzIsMjYgQEAgdm9pZCBTZXNz
aW9uOjpnZXRDdXJyZW50VVJMKEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSZXN1bHQmJik+JiYgY29t
cGxldGlvbkhhbmRsZXIKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAg
IFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgp
OworICAgICAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAg
ICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoImhhbmRsZSJfcywgbV90b3BsZXZlbEJyb3dzaW5n
Q29udGV4dC52YWx1ZSgpKTsKICAgICAgICAgbV9ob3N0LT5zZW5kQ29tbWFuZFRvQmFja2VuZCgi
Z2V0QnJvd3NpbmdDb250ZXh0Il9zLCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBbcHJvdGVjdGVkVGhp
cywgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oU2Vzc2lv
bkhvc3Q6OkNvbW1hbmRSZXNwb25zZSYmIHJlc3BvbnNlKSB7CiAgICAgICAgICAgICBpZiAocmVz
cG9uc2UuaXNFcnJvciB8fCAhcmVzcG9uc2UucmVzcG9uc2VPYmplY3QpIHsKICAgICAgICAgICAg
ICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKFdURk1vdmUocmVzcG9u
c2UucmVzcG9uc2VPYmplY3QpKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAg
ICAgfQotICAgICAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gYnJvd3NpbmdDb250ZXh0Owot
ICAgICAgICAgICAgaWYgKCFyZXNwb25zZS5yZXNwb25zZU9iamVjdC0+Z2V0T2JqZWN0KCJjb250
ZXh0IiwgYnJvd3NpbmdDb250ZXh0KSkgeworCisgICAgICAgICAgICBhdXRvIGJyb3dzaW5nQ29u
dGV4dCA9IHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRPYmplY3QoImNvbnRleHQiKTsKKyAg
ICAgICAgICAgIGlmICghYnJvd3NpbmdDb250ZXh0KSB7CiAgICAgICAgICAgICAgICAgY29tcGxl
dGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6
OlVua25vd25FcnJvcikpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIFN0cmluZyB1cmw7Ci0gICAgICAgICAgICBpZiAoIWJyb3dzaW5nQ29udGV4
dC0+Z2V0U3RyaW5nKCJ1cmwiLCB1cmwpKSB7CisKKyAgICAgICAgICAgIGF1dG8gdXJsID0gYnJv
d3NpbmdDb250ZXh0LT5nZXRTdHJpbmcoInVybCIpOworICAgICAgICAgICAgaWYgKCF1cmwpIHsK
ICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENv
bW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVycm9yKSk7CiAgICAgICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihD
b21tYW5kUmVzdWx0OjpzdWNjZXNzKEpTT046OlZhbHVlOjpjcmVhdGUodXJsKSkpOwogICAgICAg
ICB9KTsKICAgICB9KTsKQEAgLTM2NCw3ICszNjksNyBAQCB2b2lkIFNlc3Npb246OmJhY2soRnVu
Y3Rpb248dm9pZCAoQ29tbWFuZFJlc3VsdCYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKICAgICAg
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUocmVzdWx0KSk7CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVy
cyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIGF1dG8gcGFyYW1ldGVycyA9IEpT
T046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiaGFu
ZGxlIl9zLCBtX3RvcGxldmVsQnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwogICAgICAgICBwYXJh
bWV0ZXJzLT5zZXREb3VibGUoInBhZ2VMb2FkVGltZW91dCJfcywgbV9wYWdlTG9hZFRpbWVvdXQp
OwogICAgICAgICBpZiAoYXV0byBwYWdlTG9hZFN0cmF0ZWd5ID0gcGFnZUxvYWRTdHJhdGVneVN0
cmluZygpKQpAQCAtMzkyLDcgKzM5Nyw3IEBAIHZvaWQgU2Vzc2lvbjo6Zm9yd2FyZChGdW5jdGlv
bjx2b2lkIChDb21tYW5kUmVzdWx0JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogICAgICAgICAg
ICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShyZXN1bHQpKTsKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQotICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzID0g
SlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgYXV0byBwYXJhbWV0ZXJzID0gSlNPTjo6
T2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJoYW5kbGUi
X3MsIG1fdG9wbGV2ZWxCcm93c2luZ0NvbnRleHQudmFsdWUoKSk7CiAgICAgICAgIHBhcmFtZXRl
cnMtPnNldERvdWJsZSgicGFnZUxvYWRUaW1lb3V0Il9zLCBtX3BhZ2VMb2FkVGltZW91dCk7CiAg
ICAgICAgIGlmIChhdXRvIHBhZ2VMb2FkU3RyYXRlZ3kgPSBwYWdlTG9hZFN0cmF0ZWd5U3RyaW5n
KCkpCkBAIC00MjAsNyArNDI1LDcgQEAgdm9pZCBTZXNzaW9uOjpyZWZyZXNoKEZ1bmN0aW9uPHZv
aWQgKENvbW1hbmRSZXN1bHQmJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiAgICAgICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKHJlc3VsdCkpOwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9Ci0gICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnMgPSBKU09O
OjpPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU09OOjpPYmpl
Y3Q6OmNyZWF0ZSgpOwogICAgICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoImhhbmRsZSJfcywg
bV90b3BsZXZlbEJyb3dzaW5nQ29udGV4dC52YWx1ZSgpKTsKICAgICAgICAgcGFyYW1ldGVycy0+
c2V0RG91YmxlKCJwYWdlTG9hZFRpbWVvdXQiX3MsIG1fcGFnZUxvYWRUaW1lb3V0KTsKICAgICAg
ICAgaWYgKGF1dG8gcGFnZUxvYWRTdHJhdGVneSA9IHBhZ2VMb2FkU3RyYXRlZ3lTdHJpbmcoKSkK
QEAgLTQ0OCw3ICs0NTMsNyBAQCB2b2lkIFNlc3Npb246OmdldFRpdGxlKEZ1bmN0aW9uPHZvaWQg
KENvbW1hbmRSZXN1bHQmJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiAgICAgICAgICAgICBjb21w
bGV0aW9uSGFuZGxlcihXVEZNb3ZlKHJlc3VsdCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9Ci0gICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnMgPSBKU09OOjpP
YmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6
OmNyZWF0ZSgpOwogICAgICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoImJyb3dzaW5nQ29udGV4
dEhhbmRsZSJfcywgbV90b3BsZXZlbEJyb3dzaW5nQ29udGV4dC52YWx1ZSgpKTsKICAgICAgICAg
cGFyYW1ldGVycy0+c2V0U3RyaW5nKCJmdW5jdGlvbiJfcywgImZ1bmN0aW9uKCkgeyByZXR1cm4g
ZG9jdW1lbnQudGl0bGU7IH0iX3MpOwogICAgICAgICBwYXJhbWV0ZXJzLT5zZXRBcnJheSgiYXJn
dW1lbnRzIl9zLCBKU09OOjpBcnJheTo6Y3JlYXRlKCkpOwpAQCAtNDU3LDE2ICs0NjIsMTkgQEAg
dm9pZCBTZXNzaW9uOjpnZXRUaXRsZShGdW5jdGlvbjx2b2lkIChDb21tYW5kUmVzdWx0JiYpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKQogICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENv
bW1hbmRSZXN1bHQ6OmZhaWwoV1RGTW92ZShyZXNwb25zZS5yZXNwb25zZU9iamVjdCkpKTsKICAg
ICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBTdHJpbmcg
dmFsdWVTdHJpbmc7Ci0gICAgICAgICAgICBpZiAoIXJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5n
ZXRTdHJpbmcoInJlc3VsdCJfcywgdmFsdWVTdHJpbmcpKSB7CisKKyAgICAgICAgICAgIGF1dG8g
dmFsdWVTdHJpbmcgPSByZXNwb25zZS5yZXNwb25zZU9iamVjdC0+Z2V0U3RyaW5nKCJyZXN1bHQi
X3MpOworICAgICAgICAgICAgaWYgKCF2YWx1ZVN0cmluZykgewogICAgICAgICAgICAgICAgIGNv
bXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JD
b2RlOjpVbmtub3duRXJyb3IpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHJlc3VsdFZhbHVlOwotICAgICAg
ICAgICAgaWYgKCFKU09OOjpWYWx1ZTo6cGFyc2VKU09OKHZhbHVlU3RyaW5nLCByZXN1bHRWYWx1
ZSkpIHsKKworICAgICAgICAgICAgYXV0byByZXN1bHRWYWx1ZSA9IEpTT046OlZhbHVlOjpwYXJz
ZUpTT04odmFsdWVTdHJpbmcpOworICAgICAgICAgICAgaWYgKCFyZXN1bHRWYWx1ZSkgewogICAg
ICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFu
ZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKICAgICAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgICAgICB9CisKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1h
bmRSZXN1bHQ6OnN1Y2Nlc3MoV1RGTW92ZShyZXN1bHRWYWx1ZSkpKTsKICAgICAgICAgfSk7CiAg
ICAgfSk7CkBAIC00NzksMzAgKzQ4NywzMyBAQCB2b2lkIFNlc3Npb246OmdldFdpbmRvd0hhbmRs
ZShGdW5jdGlvbjx2b2lkIChDb21tYW5kUmVzdWx0JiYpPiYmIGNvbXBsZXRpb25IYW5kbAogICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVy
cyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgYXV0byBwYXJhbWV0ZXJzID0gSlNPTjo6
T2JqZWN0OjpjcmVhdGUoKTsKICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoImhhbmRsZSJfcywg
bV90b3BsZXZlbEJyb3dzaW5nQ29udGV4dC52YWx1ZSgpKTsKICAgICBtX2hvc3QtPnNlbmRDb21t
YW5kVG9CYWNrZW5kKCJnZXRCcm93c2luZ0NvbnRleHQiX3MsIFdURk1vdmUocGFyYW1ldGVycyks
IFtwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcildKFNlc3Npb25Ib3N0OjpDb21tYW5kUmVzcG9uc2UmJiBy
ZXNwb25zZSkgewogICAgICAgICBpZiAocmVzcG9uc2UuaXNFcnJvciB8fCAhcmVzcG9uc2UucmVz
cG9uc2VPYmplY3QpIHsKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1
bHQ6OmZhaWwoV1RGTW92ZShyZXNwb25zZS5yZXNwb25zZU9iamVjdCkpKTsKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfQotICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBicm93c2lu
Z0NvbnRleHQ7Ci0gICAgICAgIGlmICghcmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdldE9iamVj
dCgiY29udGV4dCJfcywgYnJvd3NpbmdDb250ZXh0KSkgeworCisgICAgICAgIGF1dG8gYnJvd3Np
bmdDb250ZXh0ID0gcmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdldE9iamVjdCgiY29udGV4dCJf
cyk7CisgICAgICAgIGlmICghYnJvd3NpbmdDb250ZXh0KSB7CiAgICAgICAgICAgICBjb21wbGV0
aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6
VW5rbm93bkVycm9yKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAg
U3RyaW5nIGhhbmRsZTsKLSAgICAgICAgaWYgKCFicm93c2luZ0NvbnRleHQtPmdldFN0cmluZygi
aGFuZGxlIl9zLCBoYW5kbGUpKSB7CisKKyAgICAgICAgYXV0byBoYW5kbGUgPSBicm93c2luZ0Nv
bnRleHQtPmdldFN0cmluZygiaGFuZGxlIl9zKTsKKyAgICAgICAgaWYgKCFoYW5kbGUpIHsKICAg
ICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJl
c3VsdDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQorCiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OnN1Y2Nl
c3MoSlNPTjo6VmFsdWU6OmNyZWF0ZShoYW5kbGUpKSk7CiAgICAgfSk7CiB9CiAKIHZvaWQgU2Vz
c2lvbjo6Y2xvc2VUb3BMZXZlbEJyb3dzaW5nQ29udGV4dChjb25zdCBTdHJpbmcmIHRvcGxldmVs
QnJvd3NpbmdDb250ZXh0LCBGdW5jdGlvbjx2b2lkIChDb21tYW5kUmVzdWx0JiYpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQogewotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnMgPSBK
U09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTT046Ok9iamVj
dDo6Y3JlYXRlKCk7CiAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJoYW5kbGUiX3MsIHRvcGxl
dmVsQnJvd3NpbmdDb250ZXh0KTsKICAgICBtX2hvc3QtPnNlbmRDb21tYW5kVG9CYWNrZW5kKCJj
bG9zZUJyb3dzaW5nQ29udGV4dCJfcywgV1RGTW92ZShwYXJhbWV0ZXJzKSwgW3RoaXMsIHByb3Rl
Y3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKV0oU2Vzc2lvbkhvc3Q6OkNvbW1hbmRSZXNwb25zZSYmIHJlc3BvbnNl
KSBtdXRhYmxlIHsKICAgICAgICAgaWYgKCFtX2hvc3QtPmlzQ29ubmVjdGVkKCkpIHsKQEAgLTU0
NSw3ICs1NTYsNyBAQCB2b2lkIFNlc3Npb246OmNsb3NlV2luZG93KEZ1bmN0aW9uPHZvaWQgKENv
bW1hbmRSZXN1bHQmJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiAKIHZvaWQgU2Vzc2lvbjo6c3dp
dGNoVG9XaW5kb3coY29uc3QgU3RyaW5nJiB3aW5kb3dIYW5kbGUsIEZ1bmN0aW9uPHZvaWQgKENv
bW1hbmRSZXN1bHQmJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgUmVmUHRyPEpTT046
Ok9iamVjdD4gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgYXV0byBw
YXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICBwYXJhbWV0ZXJzLT5zZXRT
dHJpbmcoImJyb3dzaW5nQ29udGV4dEhhbmRsZSJfcywgd2luZG93SGFuZGxlKTsKICAgICBtX2hv
c3QtPnNlbmRDb21tYW5kVG9CYWNrZW5kKCJzd2l0Y2hUb0Jyb3dzaW5nQ29udGV4dCJfcywgV1RG
TW92ZShwYXJhbWV0ZXJzKSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwg
d2luZG93SGFuZGxlLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpXShTZXNzaW9uSG9zdDo6Q29tbWFuZFJlc3BvbnNlJiYgcmVzcG9uc2UpIHsKICAgICAgICAg
aWYgKHJlc3BvbnNlLmlzRXJyb3IpIHsKQEAgLTU2NCwyMiArNTc1LDIzIEBAIHZvaWQgU2Vzc2lv
bjo6Z2V0V2luZG93SGFuZGxlcyhGdW5jdGlvbjx2b2lkIChDb21tYW5kUmVzdWx0JiYpPiYmIGNv
bXBsZXRpb25IYW5kCiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0
OjpmYWlsKFdURk1vdmUocmVzcG9uc2UucmVzcG9uc2VPYmplY3QpKSk7CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgUmVmUHRyPEpTT046OkFycmF5PiBicm93c2luZ0Nv
bnRleHRBcnJheTsKLSAgICAgICAgaWYgKCFyZXNwb25zZS5yZXNwb25zZU9iamVjdC0+Z2V0QXJy
YXkoImNvbnRleHRzIl9zLCBicm93c2luZ0NvbnRleHRBcnJheSkpIHsKKworICAgICAgICBhdXRv
IGJyb3dzaW5nQ29udGV4dEFycmF5ID0gcmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdldEFycmF5
KCJjb250ZXh0cyJfcyk7CisgICAgICAgIGlmICghYnJvd3NpbmdDb250ZXh0QXJyYXkpIHsKICAg
ICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJl
c3VsdDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQotICAgICAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IHdpbmRvd0hhbmRsZXMgPSBKU09O
OjpBcnJheTo6Y3JlYXRlKCk7CisKKyAgICAgICAgYXV0byB3aW5kb3dIYW5kbGVzID0gSlNPTjo6
QXJyYXk6OmNyZWF0ZSgpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYnJvd3Np
bmdDb250ZXh0QXJyYXktPmxlbmd0aCgpOyArK2kpIHsKLSAgICAgICAgICAgIFJlZlB0cjxKU09O
OjpWYWx1ZT4gYnJvd3NpbmdDb250ZXh0VmFsdWUgPSBicm93c2luZ0NvbnRleHRBcnJheS0+Z2V0
KGkpOwotICAgICAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gYnJvd3NpbmdDb250ZXh0Owot
ICAgICAgICAgICAgaWYgKCFicm93c2luZ0NvbnRleHRWYWx1ZS0+YXNPYmplY3QoYnJvd3NpbmdD
b250ZXh0KSkgeworICAgICAgICAgICAgYXV0byBicm93c2luZ0NvbnRleHQgPSBicm93c2luZ0Nv
bnRleHRBcnJheS0+Z2V0KGkpLT5hc09iamVjdCgpOworICAgICAgICAgICAgaWYgKCFicm93c2lu
Z0NvbnRleHQpIHsKICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVz
dWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVycm9yKSk7CiAgICAg
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBTdHJpbmcg
aGFuZGxlOwotICAgICAgICAgICAgaWYgKCFicm93c2luZ0NvbnRleHQtPmdldFN0cmluZygiaGFu
ZGxlIl9zLCBoYW5kbGUpKSB7CisgICAgICAgICAgICBhdXRvIGhhbmRsZSA9IGJyb3dzaW5nQ29u
dGV4dC0+Z2V0U3RyaW5nKCJoYW5kbGUiX3MpOworICAgICAgICAgICAgaWYgKCFoYW5kbGUpIHsK
ICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENv
bW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVycm9yKSk7CiAgICAgICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICAgICAgfQpAQCAtNjEzLDE3ICs2MjUsMjAgQEAgdm9pZCBTZXNzaW9u
OjpuZXdXaW5kb3coT3B0aW9uYWw8U3RyaW5nPiB0eXBlSGludCwgRnVuY3Rpb248dm9pZCAoQ29t
bWFuZFJlc3VsdCYKICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVz
dWx0OjpmYWlsKFdURk1vdmUocmVzcG9uc2UucmVzcG9uc2VPYmplY3QpKSk7CiAgICAgICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgU3RyaW5nIGhhbmRsZTsK
LSAgICAgICAgICAgIGlmICghcmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdldFN0cmluZygiaGFu
ZGxlIl9zLCBoYW5kbGUpKSB7CisKKyAgICAgICAgICAgIGF1dG8gaGFuZGxlID0gcmVzcG9uc2Uu
cmVzcG9uc2VPYmplY3QtPmdldFN0cmluZygiaGFuZGxlIl9zKTsKKyAgICAgICAgICAgIGlmICgh
aGFuZGxlKSB7CiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3Vs
dDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikpOwogICAgICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFN0cmluZyBwcmVz
ZW50YXRpb247Ci0gICAgICAgICAgICBpZiAoIXJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRT
dHJpbmcoInByZXNlbnRhdGlvbiJfcywgcHJlc2VudGF0aW9uKSkgeworCisgICAgICAgICAgICBh
dXRvIHByZXNlbnRhdGlvbiA9IHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRTdHJpbmcoInBy
ZXNlbnRhdGlvbiJfcyk7CisgICAgICAgICAgICBpZiAoIXByZXNlbnRhdGlvbikgewogICAgICAg
ICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJl
c3VsdDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKICAgICAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiByZXN1bHQg
PSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworCisgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IEpT
T046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgICAgICByZXN1bHQtPnNldFN0cmluZygiaGFu
ZGxlIl9zLCBoYW5kbGUpOwogICAgICAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoInR5cGUiX3Ms
IHByZXNlbnRhdGlvbiA9PSAiV2luZG93Il9zID8gIndpbmRvdyJfcyA6ICJ0YWIiX3MpOwogICAg
ICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6c3VjY2VzcyhXVEZNb3Zl
KHJlc3VsdCkpKTsKQEAgLTY0OSwxNSArNjY0LDE0IEBAIHZvaWQgU2Vzc2lvbjo6c3dpdGNoVG9G
cmFtZShSZWZQdHI8SlNPTjo6VmFsdWU+JiYgZnJhbWVJRCwgRnVuY3Rpb248dm9pZCAoQ29tbWFu
CiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKHJlc3VsdCkpOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBh
cmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBhdXRvIHBhcmFtZXRl
cnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJp
bmcoImJyb3dzaW5nQ29udGV4dEhhbmRsZSJfcywgbV90b3BsZXZlbEJyb3dzaW5nQ29udGV4dC52
YWx1ZSgpKTsKICAgICAgICAgaWYgKG1fY3VycmVudEJyb3dzaW5nQ29udGV4dCkKICAgICAgICAg
ICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiZnJhbWVIYW5kbGUiX3MsIG1fY3VycmVudEJyb3dz
aW5nQ29udGV4dC52YWx1ZSgpKTsKIAotICAgICAgICBpbnQgZnJhbWVJbmRleDsKLSAgICAgICAg
aWYgKGZyYW1lSUQtPmFzSW50ZWdlcihmcmFtZUluZGV4KSkgeworICAgICAgICBpZiAoYXV0byBm
cmFtZUluZGV4ID0gZnJhbWVJRC0+YXNJbnRlZ2VyKCkpIHsKICAgICAgICAgICAgIEFTU0VSVChm
cmFtZUluZGV4ID49IDAgJiYgZnJhbWVJbmRleCA8IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWdu
ZWQgc2hvcnQ+OjptYXgoKSk7Ci0gICAgICAgICAgICBwYXJhbWV0ZXJzLT5zZXRJbnRlZ2VyKCJv
cmRpbmFsIl9zLCBmcmFtZUluZGV4KTsKKyAgICAgICAgICAgIHBhcmFtZXRlcnMtPnNldEludGVn
ZXIoIm9yZGluYWwiX3MsICpmcmFtZUluZGV4KTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgIFN0cmluZyBmcmFtZUVsZW1lbnRJRCA9IGV4dHJhY3RFbGVtZW50SUQoKmZyYW1lSUQpOwog
ICAgICAgICAgICAgQVNTRVJUKCFmcmFtZUVsZW1lbnRJRC5pc0VtcHR5KCkpOwpAQCAtNjY5LDEx
ICs2ODMsMTMgQEAgdm9pZCBTZXNzaW9uOjpzd2l0Y2hUb0ZyYW1lKFJlZlB0cjxKU09OOjpWYWx1
ZT4mJiBmcmFtZUlELCBGdW5jdGlvbjx2b2lkIChDb21tYW4KICAgICAgICAgICAgICAgICBjb21w
bGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKFdURk1vdmUocmVzcG9uc2UucmVzcG9u
c2VPYmplY3QpKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQotICAg
ICAgICAgICAgU3RyaW5nIGZyYW1lSGFuZGxlOwotICAgICAgICAgICAgaWYgKCFyZXNwb25zZS5y
ZXNwb25zZU9iamVjdC0+Z2V0U3RyaW5nKCJyZXN1bHQiX3MsIGZyYW1lSGFuZGxlKSkgeworCisg
ICAgICAgICAgICBhdXRvIGZyYW1lSGFuZGxlID0gcmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdl
dFN0cmluZygicmVzdWx0Il9zKTsKKyAgICAgICAgICAgIGlmICghZnJhbWVIYW5kbGUpIHsKICAg
ICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1h
bmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVycm9yKSk7CiAgICAgICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBzd2l0Y2hUb0Jyb3dzaW5nQ29udGV4
dChmcmFtZUhhbmRsZSk7CiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVz
dWx0OjpzdWNjZXNzKCkpOwogICAgICAgICB9KTsKQEAgLTY5Nyw3ICs3MTMsNyBAQCB2b2lkIFNl
c3Npb246OnN3aXRjaFRvUGFyZW50RnJhbWUoRnVuY3Rpb248dm9pZCAoQ29tbWFuZFJlc3VsdCYm
KT4mJiBjb21wbGV0aW9uSAogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShy
ZXN1bHQpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBSZWZQdHI8
SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAg
ICAgYXV0byBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICAgcGFy
YW1ldGVycy0+c2V0U3RyaW5nKCJicm93c2luZ0NvbnRleHRIYW5kbGUiX3MsIG1fdG9wbGV2ZWxC
cm93c2luZ0NvbnRleHQudmFsdWUoKSk7CiAgICAgICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygi
ZnJhbWVIYW5kbGUiX3MsIG1fY3VycmVudEJyb3dzaW5nQ29udGV4dC52YWx1ZSgpKTsKICAgICAg
ICAgbV9ob3N0LT5zZW5kQ29tbWFuZFRvQmFja2VuZCgicmVzb2x2ZVBhcmVudEZyYW1lSGFuZGxl
Il9zLCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBbdGhpcywgcHJvdGVjdGVkVGhpcywgY29tcGxldGlv
bkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oU2Vzc2lvbkhvc3Q6OkNvbW1h
bmRSZXNwb25zZSYmIHJlc3BvbnNlKSB7CkBAIC03MDUsMTEgKzcyMSwxMyBAQCB2b2lkIFNlc3Np
b246OnN3aXRjaFRvUGFyZW50RnJhbWUoRnVuY3Rpb248dm9pZCAoQ29tbWFuZFJlc3VsdCYmKT4m
JiBjb21wbGV0aW9uSAogICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRS
ZXN1bHQ6OmZhaWwoV1RGTW92ZShyZXNwb25zZS5yZXNwb25zZU9iamVjdCkpKTsKICAgICAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBTdHJpbmcgZnJhbWVI
YW5kbGU7Ci0gICAgICAgICAgICBpZiAoIXJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRTdHJp
bmcoInJlc3VsdCJfcywgZnJhbWVIYW5kbGUpKSB7CisKKyAgICAgICAgICAgIGF1dG8gZnJhbWVI
YW5kbGUgPSByZXNwb25zZS5yZXNwb25zZU9iamVjdC0+Z2V0U3RyaW5nKCJyZXN1bHQiX3MpOwor
ICAgICAgICAgICAgaWYgKCFmcmFtZUhhbmRsZSkgewogICAgICAgICAgICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpV
bmtub3duRXJyb3IpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CisK
ICAgICAgICAgICAgIHN3aXRjaFRvQnJvd3NpbmdDb250ZXh0KGZyYW1lSGFuZGxlKTsKICAgICAg
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OnN1Y2Nlc3MoKSk7CiAgICAg
ICAgIH0pOwpAQCAtNzE4LDM5ICs3MzYsNjEgQEAgdm9pZCBTZXNzaW9uOjpzd2l0Y2hUb1BhcmVu
dEZyYW1lKEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSZXN1bHQmJik+JiYgY29tcGxldGlvbkgKIAog
dm9pZCBTZXNzaW9uOjpnZXRUb3BsZXZlbEJyb3dzaW5nQ29udGV4dFJlY3QoRnVuY3Rpb248dm9p
ZCAoQ29tbWFuZFJlc3VsdCYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBSZWZQdHI8
SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBh
dXRvIHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgIHBhcmFtZXRlcnMt
PnNldFN0cmluZygiaGFuZGxlIl9zLCBtX3RvcGxldmVsQnJvd3NpbmdDb250ZXh0LnZhbHVlKCkp
OwogICAgIG1faG9zdC0+c2VuZENvbW1hbmRUb0JhY2tlbmQoImdldEJyb3dzaW5nQ29udGV4dCJf
cywgV1RGTW92ZShwYXJhbWV0ZXJzKSwgW3Byb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwg
Y29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oU2Vzc2lvbkhv
c3Q6OkNvbW1hbmRSZXNwb25zZSYmIHJlc3BvbnNlKSB7CiAgICAgICAgIGlmIChyZXNwb25zZS5p
c0Vycm9yIHx8ICFyZXNwb25zZS5yZXNwb25zZU9iamVjdCkgewogICAgICAgICAgICAgY29tcGxl
dGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChXVEZNb3ZlKHJlc3BvbnNlLnJlc3BvbnNl
T2JqZWN0KSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIFJlZlB0
cjxKU09OOjpPYmplY3Q+IGJyb3dzaW5nQ29udGV4dDsKLSAgICAgICAgaWYgKCFyZXNwb25zZS5y
ZXNwb25zZU9iamVjdC0+Z2V0T2JqZWN0KCJjb250ZXh0Il9zLCBicm93c2luZ0NvbnRleHQpKSB7
CisKKyAgICAgICAgYXV0byBicm93c2luZ0NvbnRleHQgPSByZXNwb25zZS5yZXNwb25zZU9iamVj
dC0+Z2V0T2JqZWN0KCJjb250ZXh0Il9zKTsKKyAgICAgICAgaWYgKCFicm93c2luZ0NvbnRleHQp
IHsKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29t
bWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQotICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiB3aW5kb3dPcmlnaW47
Ci0gICAgICAgIGRvdWJsZSB4ID0gMCwgeSA9IDA7Ci0gICAgICAgIGlmICghYnJvd3NpbmdDb250
ZXh0LT5nZXRPYmplY3QoIndpbmRvd09yaWdpbiJfcywgd2luZG93T3JpZ2luKQotICAgICAgICAg
ICAgfHwgIXdpbmRvd09yaWdpbi0+Z2V0RG91YmxlKCJ4Il9zLCB4KQotICAgICAgICAgICAgfHwg
IXdpbmRvd09yaWdpbi0+Z2V0RG91YmxlKCJ5Il9zLCB5KSkgeworCisgICAgICAgIGF1dG8gd2lu
ZG93T3JpZ2luID0gYnJvd3NpbmdDb250ZXh0LT5nZXRPYmplY3QoIndpbmRvd09yaWdpbiJfcyk7
CisgICAgICAgIGlmICghd2luZG93T3JpZ2luKSB7CiAgICAgICAgICAgICBjb21wbGV0aW9uSGFu
ZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93
bkVycm9yKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgUmVmUHRy
PEpTT046Ok9iamVjdD4gd2luZG93U2l6ZTsKLSAgICAgICAgZG91YmxlIHdpZHRoID0gMCwgaGVp
Z2h0ID0gMDsKLSAgICAgICAgaWYgKCFicm93c2luZ0NvbnRleHQtPmdldE9iamVjdCgid2luZG93
U2l6ZSJfcywgd2luZG93U2l6ZSkKLSAgICAgICAgICAgIHx8ICF3aW5kb3dTaXplLT5nZXREb3Vi
bGUoIndpZHRoIl9zLCB3aWR0aCkKLSAgICAgICAgICAgIHx8ICF3aW5kb3dTaXplLT5nZXREb3Vi
bGUoImhlaWdodCJfcywgaGVpZ2h0KSkgeworCisgICAgICAgIGF1dG8geCA9IHdpbmRvd09yaWdp
bi0+Z2V0RG91YmxlKCJ4Il9zKTsKKyAgICAgICAgaWYgKCF4KSB7CiAgICAgICAgICAgICBjb21w
bGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29k
ZTo6VW5rbm93bkVycm9yKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KKworICAg
ICAgICBhdXRvIHkgPSB3aW5kb3dPcmlnaW4tPmdldERvdWJsZSgieSJfcyk7CisgICAgICAgIGlm
ICgheSkgeworICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFp
bChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgYXV0byB3aW5kb3dTaXplID0gYnJvd3NpbmdD
b250ZXh0LT5nZXRPYmplY3QoIndpbmRvd1NpemUiX3MpOworICAgICAgICBpZiAoIXdpbmRvd1Np
emUpIHsKKyAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwo
Q29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGF1dG8gd2lkdGggPSB3aW5kb3dTaXplLT5nZXRE
b3VibGUoIndpZHRoIl9zKTsKKyAgICAgICAgaWYgKCF3aWR0aCkgeworICAgICAgICAgICAgY29t
cGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNv
ZGU6OlVua25vd25FcnJvcikpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAg
ICAgICAgYXV0byBoZWlnaHQgPSB3aW5kb3dTaXplLT5nZXREb3VibGUoImhlaWdodCJfcyk7Cisg
ICAgICAgIGlmICghaGVpZ2h0KSB7CisgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21t
YW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVycm9yKSk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwogICAgICAgICBhdXRvIHdpbmRvd1Jl
Y3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgICAgICB3aW5kb3dSZWN0LT5zZXREb3Vi
bGUoIngiX3MsIHgpOwotICAgICAgICB3aW5kb3dSZWN0LT5zZXREb3VibGUoInkiX3MsIHkpOwot
ICAgICAgICB3aW5kb3dSZWN0LT5zZXREb3VibGUoIndpZHRoIl9zLCB3aWR0aCk7Ci0gICAgICAg
IHdpbmRvd1JlY3QtPnNldERvdWJsZSgiaGVpZ2h0Il9zLCBoZWlnaHQpOworICAgICAgICB3aW5k
b3dSZWN0LT5zZXREb3VibGUoIngiX3MsICp4KTsKKyAgICAgICAgd2luZG93UmVjdC0+c2V0RG91
YmxlKCJ5Il9zLCAqeSk7CisgICAgICAgIHdpbmRvd1JlY3QtPnNldERvdWJsZSgid2lkdGgiX3Ms
ICp3aWR0aCk7CisgICAgICAgIHdpbmRvd1JlY3QtPnNldERvdWJsZSgiaGVpZ2h0Il9zLCAqaGVp
Z2h0KTsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6c3VjY2VzcyhX
VEZNb3ZlKHdpbmRvd1JlY3QpKSk7CiAgICAgfSk7CiB9CkBAIC03ODQsMTYgKzgyNCwxNiBAQCB2
b2lkIFNlc3Npb246OnNldFdpbmRvd1JlY3QoT3B0aW9uYWw8ZG91YmxlPiB4LCBPcHRpb25hbDxk
b3VibGU+IHksIE9wdGlvbmFsPGRvdQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAK
LSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6
Y3JlYXRlKCk7CisgICAgICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRl
KCk7CiAgICAgICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiaGFuZGxlIl9zLCBtX3RvcGxldmVs
QnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwogICAgICAgICBpZiAoeCAmJiB5KSB7Ci0gICAgICAg
ICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiB3aW5kb3dPcmlnaW4gPSBKU09OOjpPYmplY3Q6OmNy
ZWF0ZSgpOworICAgICAgICAgICAgYXV0byB3aW5kb3dPcmlnaW4gPSBKU09OOjpPYmplY3Q6OmNy
ZWF0ZSgpOwogICAgICAgICAgICAgd2luZG93T3JpZ2luLT5zZXREb3VibGUoIngiLCB4LnZhbHVl
KCkpOwogICAgICAgICAgICAgd2luZG93T3JpZ2luLT5zZXREb3VibGUoInkiLCB5LnZhbHVlKCkp
OwogICAgICAgICAgICAgcGFyYW1ldGVycy0+c2V0T2JqZWN0KCJvcmlnaW4iX3MsIFdURk1vdmUo
d2luZG93T3JpZ2luKSk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKHdpZHRoICYmIGhlaWdodCkg
ewotICAgICAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gd2luZG93U2l6ZSA9IEpTT046Ok9i
amVjdDo6Y3JlYXRlKCk7CisgICAgICAgICAgICBhdXRvIHdpbmRvd1NpemUgPSBKU09OOjpPYmpl
Y3Q6OmNyZWF0ZSgpOwogICAgICAgICAgICAgd2luZG93U2l6ZS0+c2V0RG91YmxlKCJ3aWR0aCIs
IHdpZHRoLnZhbHVlKCkpOwogICAgICAgICAgICAgd2luZG93U2l6ZS0+c2V0RG91YmxlKCJoZWln
aHQiLCBoZWlnaHQudmFsdWUoKSk7CiAgICAgICAgICAgICBwYXJhbWV0ZXJzLT5zZXRPYmplY3Qo
InNpemUiX3MsIFdURk1vdmUod2luZG93U2l6ZSkpOwpAQCAtODIxLDcgKzg2MSw3IEBAIHZvaWQg
U2Vzc2lvbjo6bWF4aW1pemVXaW5kb3coRnVuY3Rpb248dm9pZCAoQ29tbWFuZFJlc3VsdCYmKT4m
JiBjb21wbGV0aW9uSGFuZGxlCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAg
ICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVh
dGUoKTsKKyAgICAgICAgYXV0byBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsK
ICAgICAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJoYW5kbGUiX3MsIG1fdG9wbGV2ZWxCcm93
c2luZ0NvbnRleHQudmFsdWUoKSk7CiAgICAgICAgIG1faG9zdC0+c2VuZENvbW1hbmRUb0JhY2tl
bmQoIm1heGltaXplV2luZG93T2ZCcm93c2luZ0NvbnRleHQiX3MsIFdURk1vdmUocGFyYW1ldGVy
cyksIFt0aGlzLCBwcm90ZWN0ZWRUaGlzLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpXSAoU2Vzc2lvbkhvc3Q6OkNvbW1hbmRSZXNwb25zZSYmIHJlc3BvbnNl
KSBtdXRhYmxlIHsKICAgICAgICAgICAgIGlmIChyZXNwb25zZS5pc0Vycm9yKSB7CkBAIC04NDYs
NyArODg2LDcgQEAgdm9pZCBTZXNzaW9uOjptaW5pbWl6ZVdpbmRvdyhGdW5jdGlvbjx2b2lkIChD
b21tYW5kUmVzdWx0JiYpPiYmIGNvbXBsZXRpb25IYW5kbGUKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQogCi0gICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnMgPSBK
U09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU09OOjpP
YmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoImhhbmRsZSJf
cywgbV90b3BsZXZlbEJyb3dzaW5nQ29udGV4dC52YWx1ZSgpKTsKICAgICAgICAgbV9ob3N0LT5z
ZW5kQ29tbWFuZFRvQmFja2VuZCgiaGlkZVdpbmRvd09mQnJvd3NpbmdDb250ZXh0Il9zLCBXVEZN
b3ZlKHBhcmFtZXRlcnMpLCBbdGhpcywgcHJvdGVjdGVkVGhpcywgY29tcGxldGlvbkhhbmRsZXIg
PSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0gKFNlc3Npb25Ib3N0OjpDb21tYW5kUmVzcG9u
c2UmJiByZXNwb25zZSkgbXV0YWJsZSB7CiAgICAgICAgICAgICBpZiAocmVzcG9uc2UuaXNFcnJv
cikgewpAQCAtODcxLDcgKzkxMSw3IEBAIHZvaWQgU2Vzc2lvbjo6ZnVsbHNjcmVlbldpbmRvdyhG
dW5jdGlvbjx2b2lkIChDb21tYW5kUmVzdWx0JiYpPiYmIGNvbXBsZXRpb25IYW5kCiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBw
YXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgYXV0byBwYXJhbWV0
ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICAgcGFyYW1ldGVycy0+c2V0U3Ry
aW5nKCJicm93c2luZ0NvbnRleHRIYW5kbGUiX3MsIG1fdG9wbGV2ZWxCcm93c2luZ0NvbnRleHQu
dmFsdWUoKSk7CiAgICAgICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiZnVuY3Rpb24iX3MsIFN0
cmluZyhFbnRlckZ1bGxzY3JlZW5KYXZhU2NyaXB0LCBzaXplb2YoRW50ZXJGdWxsc2NyZWVuSmF2
YVNjcmlwdCkpKTsKICAgICAgICAgcGFyYW1ldGVycy0+c2V0QXJyYXkoImFyZ3VtZW50cyJfcywg
SlNPTjo6QXJyYXk6OmNyZWF0ZSgpKTsKQEAgLTg4MiwxMyArOTIyLDE0IEBAIHZvaWQgU2Vzc2lv
bjo6ZnVsbHNjcmVlbldpbmRvdyhGdW5jdGlvbjx2b2lkIChDb21tYW5kUmVzdWx0JiYpPiYmIGNv
bXBsZXRpb25IYW5kCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogCi0g
ICAgICAgICAgICBTdHJpbmcgdmFsdWVTdHJpbmc7Ci0gICAgICAgICAgICBpZiAoIXJlc3BvbnNl
LnJlc3BvbnNlT2JqZWN0LT5nZXRTdHJpbmcoInJlc3VsdCJfcywgdmFsdWVTdHJpbmcpKSB7Cisg
ICAgICAgICAgICBhdXRvIHZhbHVlU3RyaW5nID0gcmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdl
dFN0cmluZygicmVzdWx0Il9zKTsKKyAgICAgICAgICAgIGlmICghdmFsdWVTdHJpbmcpIHsKICAg
ICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1h
bmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVycm9yKSk7CiAgICAgICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgUmVmUHRyPEpTT046OlZhbHVlPiByZXN1
bHRWYWx1ZTsKLSAgICAgICAgICAgIGlmICghSlNPTjo6VmFsdWU6OnBhcnNlSlNPTih2YWx1ZVN0
cmluZywgcmVzdWx0VmFsdWUpKSB7CisKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0VmFsdWUgPSBK
U09OOjpWYWx1ZTo6cGFyc2VKU09OKHZhbHVlU3RyaW5nKTsKKyAgICAgICAgICAgIGlmICghcmVz
dWx0VmFsdWUpIHsKICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVz
dWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVycm9yKSk7CiAgICAg
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQpAQCAtOTAwLDIyICs5NDEsMjUgQEAg
dm9pZCBTZXNzaW9uOjpmdWxsc2NyZWVuV2luZG93KEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSZXN1
bHQmJik+JiYgY29tcGxldGlvbkhhbmQKIAogUmVmUHRyPEpTT046Ok9iamVjdD4gU2Vzc2lvbjo6
Y3JlYXRlRWxlbWVudChSZWZQdHI8SlNPTjo6VmFsdWU+JiYgdmFsdWUpCiB7Ci0gICAgUmVmUHRy
PEpTT046Ok9iamVjdD4gdmFsdWVPYmplY3Q7Ci0gICAgaWYgKCF2YWx1ZS0+YXNPYmplY3QodmFs
dWVPYmplY3QpKQorICAgIGlmICghdmFsdWUpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0g
ICAgU3RyaW5nIGVsZW1lbnRJRDsKLSAgICBpZiAoIXZhbHVlT2JqZWN0LT5nZXRTdHJpbmcoInNl
c3Npb24tbm9kZS0iICsgaWQoKSwgZWxlbWVudElEKSkKKyAgICBhdXRvIHZhbHVlT2JqZWN0ID0g
dmFsdWUtPmFzT2JqZWN0KCk7CisgICAgaWYgKCF2YWx1ZU9iamVjdCkKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBlbGVtZW50T2JqZWN0ID0gSlNP
Tjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBhdXRvIGVsZW1lbnRJRCA9IHZhbHVlT2JqZWN0LT5n
ZXRTdHJpbmcoInNlc3Npb24tbm9kZS0iICsgaWQoKSk7CisgICAgaWYgKCFlbGVtZW50SUQpCisg
ICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byBlbGVtZW50T2JqZWN0ID0gSlNPTjo6
T2JqZWN0OjpjcmVhdGUoKTsKICAgICBlbGVtZW50T2JqZWN0LT5zZXRTdHJpbmcod2ViRWxlbWVu
dElkZW50aWZpZXIoKSwgZWxlbWVudElEKTsKICAgICByZXR1cm4gZWxlbWVudE9iamVjdDsKIH0K
IAotUmVmUHRyPEpTT046Ok9iamVjdD4gU2Vzc2lvbjo6Y3JlYXRlRWxlbWVudChjb25zdCBTdHJp
bmcmIGVsZW1lbnRJRCkKK1JlZjxKU09OOjpPYmplY3Q+IFNlc3Npb246OmNyZWF0ZUVsZW1lbnQo
Y29uc3QgU3RyaW5nJiBlbGVtZW50SUQpCiB7Ci0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gZWxl
bWVudE9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgYXV0byBlbGVtZW50T2Jq
ZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICBlbGVtZW50T2JqZWN0LT5zZXRTdHJp
bmcoInNlc3Npb24tbm9kZS0iICsgaWQoKSwgZWxlbWVudElEKTsKICAgICByZXR1cm4gZWxlbWVu
dE9iamVjdDsKIH0KQEAgLTkyMywxNyArOTY3LDE3IEBAIFJlZlB0cjxKU09OOjpPYmplY3Q+IFNl
c3Npb246OmNyZWF0ZUVsZW1lbnQoY29uc3QgU3RyaW5nJiBlbGVtZW50SUQpCiBSZWZQdHI8SlNP
Tjo6T2JqZWN0PiBTZXNzaW9uOjpleHRyYWN0RWxlbWVudChKU09OOjpWYWx1ZSYgdmFsdWUpCiB7
CiAgICAgU3RyaW5nIGVsZW1lbnRJRCA9IGV4dHJhY3RFbGVtZW50SUQodmFsdWUpOwotICAgIHJl
dHVybiAhZWxlbWVudElELmlzRW1wdHkoKSA/IGNyZWF0ZUVsZW1lbnQoZWxlbWVudElEKSA6IG51
bGxwdHI7CisgICAgcmV0dXJuICFlbGVtZW50SUQuaXNFbXB0eSgpID8gY3JlYXRlRWxlbWVudChl
bGVtZW50SUQpLnB0cigpIDogbnVsbHB0cjsKIH0KIAogU3RyaW5nIFNlc3Npb246OmV4dHJhY3RF
bGVtZW50SUQoSlNPTjo6VmFsdWUmIHZhbHVlKQogewotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+
IHZhbHVlT2JqZWN0OwotICAgIGlmICghdmFsdWUuYXNPYmplY3QodmFsdWVPYmplY3QpKQorICAg
IGF1dG8gdmFsdWVPYmplY3QgPSB2YWx1ZS5hc09iamVjdCgpOworICAgIGlmICghdmFsdWVPYmpl
Y3QpCiAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwogCi0gICAgU3RyaW5nIGVsZW1lbnRJ
RDsKLSAgICBpZiAoIXZhbHVlT2JqZWN0LT5nZXRTdHJpbmcod2ViRWxlbWVudElkZW50aWZpZXIo
KSwgZWxlbWVudElEKSkKKyAgICBhdXRvIGVsZW1lbnRJRCA9IHZhbHVlT2JqZWN0LT5nZXRTdHJp
bmcod2ViRWxlbWVudElkZW50aWZpZXIoKSk7CisgICAgaWYgKCFlbGVtZW50SUQpCiAgICAgICAg
IHJldHVybiBlbXB0eVN0cmluZygpOwogCiAgICAgcmV0dXJuIGVsZW1lbnRJRDsKQEAgLTk0Myw3
ICs5ODcsNyBAQCB2b2lkIFNlc3Npb246OmNvbXB1dGVFbGVtZW50TGF5b3V0KGNvbnN0IFN0cmlu
ZyYgZWxlbWVudElELCBPcHRpb25TZXQ8RWxlbWVudExheQogewogICAgIEFTU0VSVChtX3RvcGxl
dmVsQnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwogCi0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4g
cGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgYXV0byBwYXJhbWV0ZXJz
ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoImJy
b3dzaW5nQ29udGV4dEhhbmRsZSJfcywgbV90b3BsZXZlbEJyb3dzaW5nQ29udGV4dC52YWx1ZSgp
KTsKICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoImZyYW1lSGFuZGxlIl9zLCBtX2N1cnJlbnRC
cm93c2luZ0NvbnRleHQudmFsdWVPcihlbXB0eVN0cmluZygpKSk7CiAgICAgcGFyYW1ldGVycy0+
c2V0U3RyaW5nKCJub2RlSGFuZGxlIl9zLCBlbGVtZW50SUQpOwpAQCAtOTU0LDU5ICs5OTgsNjAg
QEAgdm9pZCBTZXNzaW9uOjpjb21wdXRlRWxlbWVudExheW91dChjb25zdCBTdHJpbmcmIGVsZW1l
bnRJRCwgT3B0aW9uU2V0PEVsZW1lbnRMYXkKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVy
KFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0LCBmYWxzZSwgV1RGTW92ZShyZXNwb25zZS5yZXNw
b25zZU9iamVjdCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIFJl
ZlB0cjxKU09OOjpPYmplY3Q+IHJlY3RPYmplY3Q7Ci0gICAgICAgIGlmICghcmVzcG9uc2UucmVz
cG9uc2VPYmplY3QtPmdldE9iamVjdCgicmVjdCJfcywgcmVjdE9iamVjdCkpIHsKKworICAgICAg
ICBhdXRvIHJlY3RPYmplY3QgPSByZXNwb25zZS5yZXNwb25zZU9iamVjdC0+Z2V0T2JqZWN0KCJy
ZWN0Il9zKTsKKyAgICAgICAgaWYgKCFyZWN0T2JqZWN0KSB7CiAgICAgICAgICAgICBjb21wbGV0
aW9uSGFuZGxlcihXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCwgZmFsc2UsIG51bGxwdHIpOwog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CisKICAgICAgICAgT3B0aW9uYWw8aW50PiBl
bGVtZW50WDsKICAgICAgICAgT3B0aW9uYWw8aW50PiBlbGVtZW50WTsKLSAgICAgICAgUmVmUHRy
PEpTT046Ok9iamVjdD4gZWxlbWVudFBvc2l0aW9uOwotICAgICAgICBpZiAocmVjdE9iamVjdC0+
Z2V0T2JqZWN0KCJvcmlnaW4iX3MsIGVsZW1lbnRQb3NpdGlvbikpIHsKLSAgICAgICAgICAgIGlu
dCB4LCB5OwotICAgICAgICAgICAgaWYgKGVsZW1lbnRQb3NpdGlvbi0+Z2V0SW50ZWdlcigieCJf
cywgeCkgJiYgZWxlbWVudFBvc2l0aW9uLT5nZXRJbnRlZ2VyKCJ5Il9zLCB5KSkgewotICAgICAg
ICAgICAgICAgIGVsZW1lbnRYID0geDsKLSAgICAgICAgICAgICAgICBlbGVtZW50WSA9IHk7Ci0g
ICAgICAgICAgICB9CisgICAgICAgIGF1dG8gZWxlbWVudFBvc2l0aW9uID0gcmVjdE9iamVjdC0+
Z2V0T2JqZWN0KCJvcmlnaW4iX3MpOworICAgICAgICBpZiAoZWxlbWVudFBvc2l0aW9uKSB7Cisg
ICAgICAgICAgICBlbGVtZW50WCA9IGVsZW1lbnRQb3NpdGlvbi0+Z2V0SW50ZWdlcigieCJfcyk7
CisgICAgICAgICAgICBlbGVtZW50WSA9IGVsZW1lbnRQb3NpdGlvbi0+Z2V0SW50ZWdlcigieSJf
cyk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKCFlbGVtZW50WCB8fCAhZWxlbWVudFkpIHsKICAg
ICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0LCBm
YWxzZSwgbnVsbHB0cik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KKwogICAgICAg
ICBPcHRpb25hbDxpbnQ+IGVsZW1lbnRXaWR0aDsKICAgICAgICAgT3B0aW9uYWw8aW50PiBlbGVt
ZW50SGVpZ2h0OwotICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBlbGVtZW50U2l6ZTsKLSAg
ICAgICAgaWYgKHJlY3RPYmplY3QtPmdldE9iamVjdCgic2l6ZSJfcywgZWxlbWVudFNpemUpKSB7
Ci0gICAgICAgICAgICBpbnQgd2lkdGgsIGhlaWdodDsKLSAgICAgICAgICAgIGlmIChlbGVtZW50
U2l6ZS0+Z2V0SW50ZWdlcigid2lkdGgiX3MsIHdpZHRoKSAmJiBlbGVtZW50U2l6ZS0+Z2V0SW50
ZWdlcigiaGVpZ2h0Il9zLCBoZWlnaHQpKSB7Ci0gICAgICAgICAgICAgICAgZWxlbWVudFdpZHRo
ID0gd2lkdGg7Ci0gICAgICAgICAgICAgICAgZWxlbWVudEhlaWdodCA9IGhlaWdodDsKLSAgICAg
ICAgICAgIH0KKyAgICAgICAgYXV0byBlbGVtZW50U2l6ZSA9IHJlY3RPYmplY3QtPmdldE9iamVj
dCgic2l6ZSJfcyk7CisgICAgICAgIGlmIChlbGVtZW50U2l6ZSkgeworICAgICAgICAgICAgZWxl
bWVudFdpZHRoID0gZWxlbWVudFNpemUtPmdldEludGVnZXIoIndpZHRoIl9zKTsKKyAgICAgICAg
ICAgIGVsZW1lbnRIZWlnaHQgPSBlbGVtZW50U2l6ZS0+Z2V0SW50ZWdlcigiaGVpZ2h0Il9zKTsK
ICAgICAgICAgfQogICAgICAgICBpZiAoIWVsZW1lbnRXaWR0aCB8fCAhZWxlbWVudEhlaWdodCkg
ewogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGOjpudWxsb3B0LCBXVEY6Om51bGxv
cHQsIGZhbHNlLCBudWxscHRyKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQorCiAg
ICAgICAgIFJlY3QgcmVjdCA9IHsgeyBlbGVtZW50WC52YWx1ZSgpLCBlbGVtZW50WS52YWx1ZSgp
IH0sIHsgZWxlbWVudFdpZHRoLnZhbHVlKCksIGVsZW1lbnRIZWlnaHQudmFsdWUoKSB9IH07CiAK
LSAgICAgICAgYm9vbCBpc09ic2N1cmVkOwotICAgICAgICBpZiAoIXJlc3BvbnNlLnJlc3BvbnNl
T2JqZWN0LT5nZXRCb29sZWFuKCJpc09ic2N1cmVkIl9zLCBpc09ic2N1cmVkKSkgeworICAgICAg
ICBhdXRvIGlzT2JzY3VyZWQgPSByZXNwb25zZS5yZXNwb25zZU9iamVjdC0+Z2V0Qm9vbGVhbigi
aXNPYnNjdXJlZCJfcyk7CisgICAgICAgIGlmICghaXNPYnNjdXJlZCkgewogICAgICAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIoV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQsIGZhbHNlLCBudWxs
cHRyKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBSZWZQdHI8SlNP
Tjo6T2JqZWN0PiBpblZpZXdDZW50ZXJQb2ludE9iamVjdDsKLSAgICAgICAgaWYgKCFyZXNwb25z
ZS5yZXNwb25zZU9iamVjdC0+Z2V0T2JqZWN0KCJpblZpZXdDZW50ZXJQb2ludCJfcywgaW5WaWV3
Q2VudGVyUG9pbnRPYmplY3QpKSB7Ci0gICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihyZWN0
LCBXVEY6Om51bGxvcHQsIGlzT2JzY3VyZWQsIG51bGxwdHIpOworCisgICAgICAgIGF1dG8gaW5W
aWV3Q2VudGVyUG9pbnRPYmplY3QgPSByZXNwb25zZS5yZXNwb25zZU9iamVjdC0+Z2V0T2JqZWN0
KCJpblZpZXdDZW50ZXJQb2ludCJfcyk7CisgICAgICAgIGlmICghaW5WaWV3Q2VudGVyUG9pbnRP
YmplY3QpIHsKKyAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHJlY3QsIFdURjo6bnVsbG9w
dCwgKmlzT2JzY3VyZWQsIG51bGxwdHIpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
Ci0gICAgICAgIGludCBpblZpZXdDZW50ZXJQb2ludFggPSAwLCBpblZpZXdDZW50ZXJQb2ludFkg
PSAwOwotICAgICAgICBpZiAoIWluVmlld0NlbnRlclBvaW50T2JqZWN0LT5nZXRJbnRlZ2VyKCJ4
Il9zLCBpblZpZXdDZW50ZXJQb2ludFgpCi0gICAgICAgICAgICB8fCAhaW5WaWV3Q2VudGVyUG9p
bnRPYmplY3QtPmdldEludGVnZXIoInkiX3MsIGluVmlld0NlbnRlclBvaW50WSkpIHsKLSAgICAg
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0LCBpc09i
c2N1cmVkLCBudWxscHRyKTsKKworICAgICAgICBhdXRvIGluVmlld0NlbnRlclBvaW50WCA9IGlu
Vmlld0NlbnRlclBvaW50T2JqZWN0LT5nZXRJbnRlZ2VyKCJ4Il9zKTsKKyAgICAgICAgYXV0byBp
blZpZXdDZW50ZXJQb2ludFkgPSBpblZpZXdDZW50ZXJQb2ludE9iamVjdC0+Z2V0SW50ZWdlcigi
eSJfcyk7CisgICAgICAgIGlmICghaW5WaWV3Q2VudGVyUG9pbnRYIHx8ICFpblZpZXdDZW50ZXJQ
b2ludFkpIHsKKyAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURjo6bnVsbG9wdCwgV1RG
OjpudWxsb3B0LCAqaXNPYnNjdXJlZCwgbnVsbHB0cik7CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KLSAgICAgICAgUG9pbnQgaW5WaWV3Q2VudGVyUG9pbnQgPSB7IGluVmlld0NlbnRl
clBvaW50WCwgaW5WaWV3Q2VudGVyUG9pbnRZIH07Ci0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVy
KHJlY3QsIGluVmlld0NlbnRlclBvaW50LCBpc09ic2N1cmVkLCBudWxscHRyKTsKKworICAgICAg
ICBQb2ludCBpblZpZXdDZW50ZXJQb2ludCA9IHsgKmluVmlld0NlbnRlclBvaW50WCwgKmluVmll
d0NlbnRlclBvaW50WSB9OworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihyZWN0LCBpblZpZXdD
ZW50ZXJQb2ludCwgKmlzT2JzY3VyZWQsIG51bGxwdHIpOwogICAgIH0pOwogfQogCkBAIC0xMDIy
LDcgKzEwNjcsNyBAQCB2b2lkIFNlc3Npb246OmZpbmRFbGVtZW50cyhjb25zdCBTdHJpbmcmIHN0
cmF0ZWd5LCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yLCBGaW5kRQogICAgICAgICAgICAgY29tcGxl
dGlvbkhhbmRsZXIoV1RGTW92ZShyZXN1bHQpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQotICAgICAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IGFyZ3VtZW50cyA9IEpTT046OkFycmF5
OjpjcmVhdGUoKTsKKyAgICAgICAgYXV0byBhcmd1bWVudHMgPSBKU09OOjpBcnJheTo6Y3JlYXRl
KCk7CiAgICAgICAgIGFyZ3VtZW50cy0+cHVzaFN0cmluZyhKU09OOjpWYWx1ZTo6Y3JlYXRlKHN0
cmF0ZWd5KS0+dG9KU09OU3RyaW5nKCkpOwogICAgICAgICBpZiAocm9vdEVsZW1lbnRJRC5pc0Vt
cHR5KCkpCiAgICAgICAgICAgICBhcmd1bWVudHMtPnB1c2hTdHJpbmcoSlNPTjo6VmFsdWU6Om51
bGwoKS0+dG9KU09OU3RyaW5nKCkpOwpAQCAtMTAzMiw3ICsxMDc3LDcgQEAgdm9pZCBTZXNzaW9u
OjpmaW5kRWxlbWVudHMoY29uc3QgU3RyaW5nJiBzdHJhdGVneSwgY29uc3QgU3RyaW5nJiBzZWxl
Y3RvciwgRmluZEUKICAgICAgICAgYXJndW1lbnRzLT5wdXNoU3RyaW5nKEpTT046OlZhbHVlOjpj
cmVhdGUobW9kZSA9PSBGaW5kRWxlbWVudHNNb2RlOjpTaW5nbGUpLT50b0pTT05TdHJpbmcoKSk7
CiAgICAgICAgIGFyZ3VtZW50cy0+cHVzaFN0cmluZyhKU09OOjpWYWx1ZTo6Y3JlYXRlKG1faW1w
bGljaXRXYWl0VGltZW91dCktPnRvSlNPTlN0cmluZygpKTsKIAotICAgICAgICBSZWZQdHI8SlNP
Tjo6T2JqZWN0PiBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAg
YXV0byBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICAgcGFyYW1l
dGVycy0+c2V0U3RyaW5nKCJicm93c2luZ0NvbnRleHRIYW5kbGUiX3MsIG1fdG9wbGV2ZWxCcm93
c2luZ0NvbnRleHQudmFsdWUoKSk7CiAgICAgICAgIGlmIChtX2N1cnJlbnRCcm93c2luZ0NvbnRl
eHQpCiAgICAgICAgICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoImZyYW1lSGFuZGxlIl9zLCBt
X2N1cnJlbnRCcm93c2luZ0NvbnRleHQudmFsdWUoKSk7CkBAIC0xMDQ4LDIwICsxMDkzLDIzIEBA
IHZvaWQgU2Vzc2lvbjo6ZmluZEVsZW1lbnRzKGNvbnN0IFN0cmluZyYgc3RyYXRlZ3ksIGNvbnN0
IFN0cmluZyYgc2VsZWN0b3IsIEZpbmRFCiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChXVEZNb3ZlKHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0KSkp
OwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFN0
cmluZyB2YWx1ZVN0cmluZzsKLSAgICAgICAgICAgIGlmICghcmVzcG9uc2UucmVzcG9uc2VPYmpl
Y3QtPmdldFN0cmluZygicmVzdWx0Il9zLCB2YWx1ZVN0cmluZykpIHsKLSAgICAgICAgICAgICAg
ICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVy
cm9yQ29kZTo6VW5rbm93bkVycm9yKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgUmVmUHRyPEpTT046OlZhbHVlPiByZXN1bHRWYWx1ZTsKLSAg
ICAgICAgICAgIGlmICghSlNPTjo6VmFsdWU6OnBhcnNlSlNPTih2YWx1ZVN0cmluZywgcmVzdWx0
VmFsdWUpKSB7CisKKyAgICAgICAgICAgIGF1dG8gdmFsdWVTdHJpbmcgPSByZXNwb25zZS5yZXNw
b25zZU9iamVjdC0+Z2V0U3RyaW5nKCJyZXN1bHQiX3MpOworICAgICAgICAgICAgaWYgKCF2YWx1
ZVN0cmluZykgewogICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1
bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKICAgICAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAKKyAgICAgICAgICAgIGF1dG8gcmVz
dWx0VmFsdWUgPSBKU09OOjpWYWx1ZTo6cGFyc2VKU09OKHZhbHVlU3RyaW5nKTsKKyAgICAgICAg
ICAgIGlmICghcmVzdWx0VmFsdWUpIHsKKyAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVy
cm9yKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisKICAgICAg
ICAgICAgIHN3aXRjaCAobW9kZSkgewogICAgICAgICAgICAgY2FzZSBGaW5kRWxlbWVudHNNb2Rl
OjpTaW5nbGU6IHsKLSAgICAgICAgICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBlbGVtZW50
T2JqZWN0ID0gY3JlYXRlRWxlbWVudChXVEZNb3ZlKHJlc3VsdFZhbHVlKSk7CisgICAgICAgICAg
ICAgICAgYXV0byBlbGVtZW50T2JqZWN0ID0gY3JlYXRlRWxlbWVudChXVEZNb3ZlKHJlc3VsdFZh
bHVlKSk7CiAgICAgICAgICAgICAgICAgaWYgKCFlbGVtZW50T2JqZWN0KSB7CiAgICAgICAgICAg
ICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJl
c3VsdDo6RXJyb3JDb2RlOjpOb1N1Y2hFbGVtZW50KSk7CiAgICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKQEAgLTEwNzAsMTYgKzExMTgsMTcgQEAgdm9pZCBTZXNzaW9uOjpmaW5kRWxlbWVudHMo
Y29uc3QgU3RyaW5nJiBzdHJhdGVneSwgY29uc3QgU3RyaW5nJiBzZWxlY3RvciwgRmluZEUKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNhc2UgRmlu
ZEVsZW1lbnRzTW9kZTo6TXVsdGlwbGU6IHsKLSAgICAgICAgICAgICAgICBSZWZQdHI8SlNPTjo6
QXJyYXk+IGVsZW1lbnRzQXJyYXk7Ci0gICAgICAgICAgICAgICAgaWYgKCFyZXN1bHRWYWx1ZS0+
YXNBcnJheShlbGVtZW50c0FycmF5KSkgeworICAgICAgICAgICAgICAgIGF1dG8gZWxlbWVudHNB
cnJheSA9IHJlc3VsdFZhbHVlLT5hc0FycmF5KCk7CisgICAgICAgICAgICAgICAgaWYgKCFlbGVt
ZW50c0FycmF5KSB7CiAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1h
bmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpOb1N1Y2hFbGVtZW50KSk7
CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgUmVmUHRyPEpTT046OkFycmF5PiBlbGVtZW50T2JqZWN0c0FycmF5ID0gSlNPTjo6
QXJyYXk6OmNyZWF0ZSgpOworCisgICAgICAgICAgICAgICAgYXV0byBlbGVtZW50T2JqZWN0c0Fy
cmF5ID0gSlNPTjo6QXJyYXk6OmNyZWF0ZSgpOwogICAgICAgICAgICAgICAgIHVuc2lnbmVkIGVs
ZW1lbnRzQXJyYXlMZW5ndGggPSBlbGVtZW50c0FycmF5LT5sZW5ndGgoKTsKICAgICAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZWxlbWVudHNBcnJheUxlbmd0aDsgKytpKSB7
CiAgICAgICAgICAgICAgICAgICAgIGlmIChhdXRvIGVsZW1lbnRPYmplY3QgPSBjcmVhdGVFbGVt
ZW50KGVsZW1lbnRzQXJyYXktPmdldChpKSkpCi0gICAgICAgICAgICAgICAgICAgICAgICBlbGVt
ZW50T2JqZWN0c0FycmF5LT5wdXNoT2JqZWN0KFdURk1vdmUoZWxlbWVudE9iamVjdCkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgZWxlbWVudE9iamVjdHNBcnJheS0+cHVzaE9iamVjdChlbGVt
ZW50T2JqZWN0LnJlbGVhc2VOb25OdWxsKCkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpzdWNjZXNzKFdURk1vdmUo
ZWxlbWVudE9iamVjdHNBcnJheSkpKTsKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTExMDEs
NyArMTE1MCw3IEBAIHZvaWQgU2Vzc2lvbjo6Z2V0QWN0aXZlRWxlbWVudChGdW5jdGlvbjx2b2lk
IChDb21tYW5kUmVzdWx0JiYpPiYmIGNvbXBsZXRpb25IYW5kCiAgICAgICAgICAgICBjb21wbGV0
aW9uSGFuZGxlcihXVEZNb3ZlKHJlc3VsdCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9Ci0gICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnMgPSBKU09OOjpPYmpl
Y3Q6OmNyZWF0ZSgpOworICAgICAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNy
ZWF0ZSgpOwogICAgICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoImJyb3dzaW5nQ29udGV4dEhh
bmRsZSJfcywgbV90b3BsZXZlbEJyb3dzaW5nQ29udGV4dC52YWx1ZSgpKTsKICAgICAgICAgcGFy
YW1ldGVycy0+c2V0U3RyaW5nKCJmdW5jdGlvbiJfcywgImZ1bmN0aW9uKCkgeyByZXR1cm4gZG9j
dW1lbnQuYWN0aXZlRWxlbWVudDsgfSJfcyk7CiAgICAgICAgIHBhcmFtZXRlcnMtPnNldEFycmF5
KCJhcmd1bWVudHMiX3MsIEpTT046OkFycmF5OjpjcmVhdGUoKSk7CkBAIC0xMTEwLDE3ICsxMTU5
LDIwIEBAIHZvaWQgU2Vzc2lvbjo6Z2V0QWN0aXZlRWxlbWVudChGdW5jdGlvbjx2b2lkIChDb21t
YW5kUmVzdWx0JiYpPiYmIGNvbXBsZXRpb25IYW5kCiAgICAgICAgICAgICAgICAgY29tcGxldGlv
bkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChXVEZNb3ZlKHJlc3BvbnNlLnJlc3BvbnNlT2Jq
ZWN0KSkpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIFN0cmluZyB2YWx1ZVN0cmluZzsKLSAgICAgICAgICAgIGlmICghcmVzcG9uc2UucmVzcG9u
c2VPYmplY3QtPmdldFN0cmluZygicmVzdWx0Il9zLCB2YWx1ZVN0cmluZykpIHsKKworICAgICAg
ICAgICAgYXV0byB2YWx1ZVN0cmluZyA9IHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRTdHJp
bmcoInJlc3VsdCJfcyk7CisgICAgICAgICAgICBpZiAoIXZhbHVlU3RyaW5nKSB7CiAgICAgICAg
ICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVz
dWx0OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikpOwogICAgICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gcmVzdWx0VmFs
dWU7Ci0gICAgICAgICAgICBpZiAoIUpTT046OlZhbHVlOjpwYXJzZUpTT04odmFsdWVTdHJpbmcs
IHJlc3VsdFZhbHVlKSkgeworCisgICAgICAgICAgICBhdXRvIHJlc3VsdFZhbHVlID0gSlNPTjo6
VmFsdWU6OnBhcnNlSlNPTih2YWx1ZVN0cmluZyk7CisgICAgICAgICAgICBpZiAoIXJlc3VsdFZh
bHVlKSB7CiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6
ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikpOwogICAgICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFJlZlB0cjxKU09OOjpP
YmplY3Q+IGVsZW1lbnRPYmplY3QgPSBjcmVhdGVFbGVtZW50KFdURk1vdmUocmVzdWx0VmFsdWUp
KTsKKworICAgICAgICAgICAgYXV0byBlbGVtZW50T2JqZWN0ID0gY3JlYXRlRWxlbWVudChXVEZN
b3ZlKHJlc3VsdFZhbHVlKSk7CiAgICAgICAgICAgICBpZiAoIWVsZW1lbnRPYmplY3QpIHsKICAg
ICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1h
bmRSZXN1bHQ6OkVycm9yQ29kZTo6Tm9TdWNoRWxlbWVudCkpOwogICAgICAgICAgICAgICAgIHJl
dHVybjsKQEAgLTExNDIsMTEgKzExOTQsMTEgQEAgdm9pZCBTZXNzaW9uOjppc0VsZW1lbnRTZWxl
Y3RlZChjb25zdCBTdHJpbmcmIGVsZW1lbnRJRCwgRnVuY3Rpb248dm9pZCAoQ29tbWFuZFIKICAg
ICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUocmVzdWx0KSk7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgUmVmUHRyPEpTT046OkFycmF5PiBhcmd1bWVu
dHMgPSBKU09OOjpBcnJheTo6Y3JlYXRlKCk7CisgICAgICAgIGF1dG8gYXJndW1lbnRzID0gSlNP
Tjo6QXJyYXk6OmNyZWF0ZSgpOwogICAgICAgICBhcmd1bWVudHMtPnB1c2hTdHJpbmcoY3JlYXRl
RWxlbWVudChlbGVtZW50SUQpLT50b0pTT05TdHJpbmcoKSk7CiAgICAgICAgIGFyZ3VtZW50cy0+
cHVzaFN0cmluZyhKU09OOjpWYWx1ZTo6Y3JlYXRlKCJzZWxlY3RlZCIpLT50b0pTT05TdHJpbmco
KSk7CiAKLSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVycyA9IEpTT046Ok9i
amVjdDo6Y3JlYXRlKCk7CisgICAgICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6
Y3JlYXRlKCk7CiAgICAgICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiYnJvd3NpbmdDb250ZXh0
SGFuZGxlIl9zLCBtX3RvcGxldmVsQnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwogICAgICAgICBp
ZiAobV9jdXJyZW50QnJvd3NpbmdDb250ZXh0KQogICAgICAgICAgICAgcGFyYW1ldGVycy0+c2V0
U3RyaW5nKCJmcmFtZUhhbmRsZSJfcywgbV9jdXJyZW50QnJvd3NpbmdDb250ZXh0LnZhbHVlKCkp
OwpAQCAtMTE1NywyNSArMTIwOSwzMCBAQCB2b2lkIFNlc3Npb246OmlzRWxlbWVudFNlbGVjdGVk
KGNvbnN0IFN0cmluZyYgZWxlbWVudElELCBGdW5jdGlvbjx2b2lkIChDb21tYW5kUgogICAgICAg
ICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoV1RGTW92ZShy
ZXNwb25zZS5yZXNwb25zZU9iamVjdCkpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBTdHJpbmcgdmFsdWVTdHJpbmc7Ci0gICAgICAgICAgICBp
ZiAoIXJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRTdHJpbmcoInJlc3VsdCJfcywgdmFsdWVT
dHJpbmcpKSB7CisKKyAgICAgICAgICAgIGF1dG8gdmFsdWVTdHJpbmcgPSByZXNwb25zZS5yZXNw
b25zZU9iamVjdC0+Z2V0U3RyaW5nKCJyZXN1bHQiX3MpOworICAgICAgICAgICAgaWYgKCF2YWx1
ZVN0cmluZykgewogICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1
bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKICAgICAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBSZWZQdHI8SlNP
Tjo6VmFsdWU+IHJlc3VsdFZhbHVlOwotICAgICAgICAgICAgaWYgKCFKU09OOjpWYWx1ZTo6cGFy
c2VKU09OKHZhbHVlU3RyaW5nLCByZXN1bHRWYWx1ZSkpIHsKKworICAgICAgICAgICAgYXV0byBy
ZXN1bHRWYWx1ZSA9IEpTT046OlZhbHVlOjpwYXJzZUpTT04odmFsdWVTdHJpbmcpOworICAgICAg
ICAgICAgaWYgKCFyZXN1bHRWYWx1ZSkgewogICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5k
bGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtub3du
RXJyb3IpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CisKICAgICAg
ICAgICAgIGlmIChyZXN1bHRWYWx1ZS0+aXNOdWxsKCkpIHsKICAgICAgICAgICAgICAgICBjb21w
bGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpzdWNjZXNzKEpTT046OlZhbHVlOjpjcmVhdGUo
ZmFsc2UpKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQotICAgICAg
ICAgICAgU3RyaW5nIGJvb2xlYW5SZXN1bHQ7Ci0gICAgICAgICAgICBpZiAoIXJlc3VsdFZhbHVl
LT5hc1N0cmluZyhib29sZWFuUmVzdWx0KSB8fCBib29sZWFuUmVzdWx0ICE9ICJ0cnVlIikgewor
CisgICAgICAgICAgICBhdXRvIGJvb2xlYW5SZXN1bHQgPSByZXN1bHRWYWx1ZS0+YXNTdHJpbmco
KTsKKyAgICAgICAgICAgIGlmICghYm9vbGVhblJlc3VsdCB8fCBib29sZWFuUmVzdWx0ICE9ICJ0
cnVlIikgewogICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6
OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKICAgICAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CisKICAgICAgICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKENvbW1hbmRSZXN1bHQ6OnN1Y2Nlc3MoSlNPTjo6VmFsdWU6OmNyZWF0ZSh0cnVlKSkp
OwogICAgICAgICB9KTsKICAgICB9KTsKQEAgLTExOTMsMTAgKzEyNTAsMTAgQEAgdm9pZCBTZXNz
aW9uOjpnZXRFbGVtZW50VGV4dChjb25zdCBTdHJpbmcmIGVsZW1lbnRJRCwgRnVuY3Rpb248dm9p
ZCAoQ29tbWFuZFJlc3UKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUocmVz
dWx0KSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgUmVmUHRyPEpT
T046OkFycmF5PiBhcmd1bWVudHMgPSBKU09OOjpBcnJheTo6Y3JlYXRlKCk7CisgICAgICAgIGF1
dG8gYXJndW1lbnRzID0gSlNPTjo6QXJyYXk6OmNyZWF0ZSgpOwogICAgICAgICBhcmd1bWVudHMt
PnB1c2hTdHJpbmcoY3JlYXRlRWxlbWVudChlbGVtZW50SUQpLT50b0pTT05TdHJpbmcoKSk7CiAK
LSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6
Y3JlYXRlKCk7CisgICAgICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRl
KCk7CiAgICAgICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiYnJvd3NpbmdDb250ZXh0SGFuZGxl
Il9zLCBtX3RvcGxldmVsQnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwogICAgICAgICBpZiAobV9j
dXJyZW50QnJvd3NpbmdDb250ZXh0KQogICAgICAgICAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5n
KCJmcmFtZUhhbmRsZSJfcywgbV9jdXJyZW50QnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwpAQCAt
MTIwOCwxNiArMTI2NSwxOSBAQCB2b2lkIFNlc3Npb246OmdldEVsZW1lbnRUZXh0KGNvbnN0IFN0
cmluZyYgZWxlbWVudElELCBGdW5jdGlvbjx2b2lkIChDb21tYW5kUmVzdQogICAgICAgICAgICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoV1RGTW92ZShyZXNwb25z
ZS5yZXNwb25zZU9iamVjdCkpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBTdHJpbmcgdmFsdWVTdHJpbmc7Ci0gICAgICAgICAgICBpZiAoIXJl
c3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRTdHJpbmcoInJlc3VsdCJfcywgdmFsdWVTdHJpbmcp
KSB7CisKKyAgICAgICAgICAgIGF1dG8gdmFsdWVTdHJpbmcgPSByZXNwb25zZS5yZXNwb25zZU9i
amVjdC0+Z2V0U3RyaW5nKCJyZXN1bHQiX3MpOworICAgICAgICAgICAgaWYgKCF2YWx1ZVN0cmlu
ZykgewogICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZh
aWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKICAgICAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBSZWZQdHI8SlNPTjo6VmFs
dWU+IHJlc3VsdFZhbHVlOwotICAgICAgICAgICAgaWYgKCFKU09OOjpWYWx1ZTo6cGFyc2VKU09O
KHZhbHVlU3RyaW5nLCByZXN1bHRWYWx1ZSkpIHsKKworICAgICAgICAgICAgYXV0byByZXN1bHRW
YWx1ZSA9IEpTT046OlZhbHVlOjpwYXJzZUpTT04odmFsdWVTdHJpbmcpOworICAgICAgICAgICAg
aWYgKCFyZXN1bHRWYWx1ZSkgewogICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENv
bW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3Ip
KTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CisKICAgICAgICAgICAg
IGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OnN1Y2Nlc3MoV1RGTW92ZShyZXN1bHRW
YWx1ZSkpKTsKICAgICAgICAgfSk7CiAgICAgfSk7CkBAIC0xMjM1LDEwICsxMjk1LDEwIEBAIHZv
aWQgU2Vzc2lvbjo6Z2V0RWxlbWVudFRhZ05hbWUoY29uc3QgU3RyaW5nJiBlbGVtZW50SUQsIEZ1
bmN0aW9uPHZvaWQgKENvbW1hbmRSCiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZN
b3ZlKHJlc3VsdCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIFJl
ZlB0cjxKU09OOjpBcnJheT4gYXJndW1lbnRzID0gSlNPTjo6QXJyYXk6OmNyZWF0ZSgpOworICAg
ICAgICBhdXRvIGFyZ3VtZW50cyA9IEpTT046OkFycmF5OjpjcmVhdGUoKTsKICAgICAgICAgYXJn
dW1lbnRzLT5wdXNoU3RyaW5nKGNyZWF0ZUVsZW1lbnQoZWxlbWVudElEKS0+dG9KU09OU3RyaW5n
KCkpOwogCi0gICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnMgPSBKU09OOjpP
YmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6
OmNyZWF0ZSgpOwogICAgICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoImJyb3dzaW5nQ29udGV4
dEhhbmRsZSJfcywgbV90b3BsZXZlbEJyb3dzaW5nQ29udGV4dC52YWx1ZSgpKTsKICAgICAgICAg
aWYgKG1fY3VycmVudEJyb3dzaW5nQ29udGV4dCkKICAgICAgICAgICAgIHBhcmFtZXRlcnMtPnNl
dFN0cmluZygiZnJhbWVIYW5kbGUiX3MsIG1fY3VycmVudEJyb3dzaW5nQ29udGV4dC52YWx1ZSgp
KTsKQEAgLTEyNDksMTYgKzEzMDksMTkgQEAgdm9pZCBTZXNzaW9uOjpnZXRFbGVtZW50VGFnTmFt
ZShjb25zdCBTdHJpbmcmIGVsZW1lbnRJRCwgRnVuY3Rpb248dm9pZCAoQ29tbWFuZFIKICAgICAg
ICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKFdURk1vdmUo
cmVzcG9uc2UucmVzcG9uc2VPYmplY3QpKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAgICAgfQotICAgICAgICAgICAgU3RyaW5nIHZhbHVlU3RyaW5nOwotICAgICAgICAgICAg
aWYgKCFyZXNwb25zZS5yZXNwb25zZU9iamVjdC0+Z2V0U3RyaW5nKCJyZXN1bHQiX3MsIHZhbHVl
U3RyaW5nKSkgeworCisgICAgICAgICAgICBhdXRvIHZhbHVlU3RyaW5nID0gcmVzcG9uc2UucmVz
cG9uc2VPYmplY3QtPmdldFN0cmluZygicmVzdWx0Il9zKTsKKyAgICAgICAgICAgIGlmICghdmFs
dWVTdHJpbmcpIHsKICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVz
dWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVycm9yKSk7CiAgICAg
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgUmVmUHRyPEpT
T046OlZhbHVlPiByZXN1bHRWYWx1ZTsKLSAgICAgICAgICAgIGlmICghSlNPTjo6VmFsdWU6OnBh
cnNlSlNPTih2YWx1ZVN0cmluZywgcmVzdWx0VmFsdWUpKSB7CisKKyAgICAgICAgICAgIGF1dG8g
cmVzdWx0VmFsdWUgPSBKU09OOjpWYWx1ZTo6cGFyc2VKU09OKHZhbHVlU3RyaW5nKTsKKyAgICAg
ICAgICAgIGlmICghcmVzdWx0VmFsdWUpIHsKICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFu
ZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93
bkVycm9yKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQorCiAgICAg
ICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpzdWNjZXNzKFdURk1vdmUo
cmVzdWx0VmFsdWUpKSk7CiAgICAgICAgIH0pOwogICAgIH0pOwpAQCAtMTI4MSw3ICsxMzQ0LDcg
QEAgdm9pZCBTZXNzaW9uOjpnZXRFbGVtZW50UmVjdChjb25zdCBTdHJpbmcmIGVsZW1lbnRJRCwg
RnVuY3Rpb248dm9pZCAoQ29tbWFuZFJlc3UKICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFu
ZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKFdURk1vdmUoZXJyb3IpKSk7CiAgICAgICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgUmVmUHRyPEpTT046Ok9iamVj
dD4gcmVjdE9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgICAgICBhdXRv
IHJlY3RPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICAgICAgcmVjdE9i
amVjdC0+c2V0SW50ZWdlcigieCJfcywgcmVjdC52YWx1ZSgpLm9yaWdpbi54KTsKICAgICAgICAg
ICAgIHJlY3RPYmplY3QtPnNldEludGVnZXIoInkiX3MsIHJlY3QudmFsdWUoKS5vcmlnaW4ueSk7
CiAgICAgICAgICAgICByZWN0T2JqZWN0LT5zZXRJbnRlZ2VyKCJ3aWR0aCJfcywgcmVjdC52YWx1
ZSgpLnNpemUud2lkdGgpOwpAQCAtMTMwMywxMCArMTM2NiwxMCBAQCB2b2lkIFNlc3Npb246Omlz
RWxlbWVudEVuYWJsZWQoY29uc3QgU3RyaW5nJiBlbGVtZW50SUQsIEZ1bmN0aW9uPHZvaWQgKENv
bW1hbmRSZQogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShyZXN1bHQpKTsK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBSZWZQdHI8SlNPTjo6QXJy
YXk+IGFyZ3VtZW50cyA9IEpTT046OkFycmF5OjpjcmVhdGUoKTsKKyAgICAgICAgYXV0byBhcmd1
bWVudHMgPSBKU09OOjpBcnJheTo6Y3JlYXRlKCk7CiAgICAgICAgIGFyZ3VtZW50cy0+cHVzaFN0
cmluZyhjcmVhdGVFbGVtZW50KGVsZW1lbnRJRCktPnRvSlNPTlN0cmluZygpKTsKIAotICAgICAg
ICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUo
KTsKKyAgICAgICAgYXV0byBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAg
ICAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJicm93c2luZ0NvbnRleHRIYW5kbGUiX3MsIG1f
dG9wbGV2ZWxCcm93c2luZ0NvbnRleHQudmFsdWUoKSk7CiAgICAgICAgIGlmIChtX2N1cnJlbnRC
cm93c2luZ0NvbnRleHQpCiAgICAgICAgICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoImZyYW1l
SGFuZGxlIl9zLCBtX2N1cnJlbnRCcm93c2luZ0NvbnRleHQudmFsdWUoKSk7CkBAIC0xMzE3LDE2
ICsxMzgwLDE5IEBAIHZvaWQgU2Vzc2lvbjo6aXNFbGVtZW50RW5hYmxlZChjb25zdCBTdHJpbmcm
IGVsZW1lbnRJRCwgRnVuY3Rpb248dm9pZCAoQ29tbWFuZFJlCiAgICAgICAgICAgICAgICAgY29t
cGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChXVEZNb3ZlKHJlc3BvbnNlLnJlc3Bv
bnNlT2JqZWN0KSkpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIFN0cmluZyB2YWx1ZVN0cmluZzsKLSAgICAgICAgICAgIGlmICghcmVzcG9uc2Uu
cmVzcG9uc2VPYmplY3QtPmdldFN0cmluZygicmVzdWx0Il9zLCB2YWx1ZVN0cmluZykpIHsKKwor
ICAgICAgICAgICAgYXV0byB2YWx1ZVN0cmluZyA9IHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5n
ZXRTdHJpbmcoInJlc3VsdCJfcyk7CisgICAgICAgICAgICBpZiAoIXZhbHVlU3RyaW5nKSB7CiAg
ICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21t
YW5kUmVzdWx0OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikpOwogICAgICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gcmVz
dWx0VmFsdWU7Ci0gICAgICAgICAgICBpZiAoIUpTT046OlZhbHVlOjpwYXJzZUpTT04odmFsdWVT
dHJpbmcsIHJlc3VsdFZhbHVlKSkgeworCisgICAgICAgICAgICBhdXRvIHJlc3VsdFZhbHVlID0g
SlNPTjo6VmFsdWU6OnBhcnNlSlNPTih2YWx1ZVN0cmluZyk7CisgICAgICAgICAgICBpZiAoIXJl
c3VsdFZhbHVlKSB7CiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJl
c3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikpOwogICAg
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgY29tcGxl
dGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6c3VjY2VzcyhXVEZNb3ZlKHJlc3VsdFZhbHVlKSkp
OwogICAgICAgICB9KTsKICAgICB9KTsKQEAgLTEzNDQsMTAgKzE0MTAsMTAgQEAgdm9pZCBTZXNz
aW9uOjppc0VsZW1lbnREaXNwbGF5ZWQoY29uc3QgU3RyaW5nJiBlbGVtZW50SUQsIEZ1bmN0aW9u
PHZvaWQgKENvbW1hbmQKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUocmVz
dWx0KSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgUmVmUHRyPEpT
T046OkFycmF5PiBhcmd1bWVudHMgPSBKU09OOjpBcnJheTo6Y3JlYXRlKCk7CisgICAgICAgIGF1
dG8gYXJndW1lbnRzID0gSlNPTjo6QXJyYXk6OmNyZWF0ZSgpOwogICAgICAgICBhcmd1bWVudHMt
PnB1c2hTdHJpbmcoY3JlYXRlRWxlbWVudChlbGVtZW50SUQpLT50b0pTT05TdHJpbmcoKSk7CiAK
LSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6
Y3JlYXRlKCk7CisgICAgICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRl
KCk7CiAgICAgICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiYnJvd3NpbmdDb250ZXh0SGFuZGxl
Il9zLCBtX3RvcGxldmVsQnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwogICAgICAgICBpZiAobV9j
dXJyZW50QnJvd3NpbmdDb250ZXh0KQogICAgICAgICAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5n
KCJmcmFtZUhhbmRsZSJfcywgbV9jdXJyZW50QnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwpAQCAt
MTM1OCwxNiArMTQyNCwxOSBAQCB2b2lkIFNlc3Npb246OmlzRWxlbWVudERpc3BsYXllZChjb25z
dCBTdHJpbmcmIGVsZW1lbnRJRCwgRnVuY3Rpb248dm9pZCAoQ29tbWFuZAogICAgICAgICAgICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoV1RGTW92ZShyZXNwb25z
ZS5yZXNwb25zZU9iamVjdCkpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBTdHJpbmcgdmFsdWVTdHJpbmc7Ci0gICAgICAgICAgICBpZiAoIXJl
c3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRTdHJpbmcoInJlc3VsdCJfcywgdmFsdWVTdHJpbmcp
KSB7CisKKyAgICAgICAgICAgIGF1dG8gdmFsdWVTdHJpbmcgPSByZXNwb25zZS5yZXNwb25zZU9i
amVjdC0+Z2V0U3RyaW5nKCJyZXN1bHQiX3MpOworICAgICAgICAgICAgaWYgKCF2YWx1ZVN0cmlu
ZykgewogICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZh
aWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKICAgICAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBSZWZQdHI8SlNPTjo6VmFs
dWU+IHJlc3VsdFZhbHVlOwotICAgICAgICAgICAgaWYgKCFKU09OOjpWYWx1ZTo6cGFyc2VKU09O
KHZhbHVlU3RyaW5nLCByZXN1bHRWYWx1ZSkpIHsKKworICAgICAgICAgICAgYXV0byByZXN1bHRW
YWx1ZSA9IEpTT046OlZhbHVlOjpwYXJzZUpTT04odmFsdWVTdHJpbmcpOworICAgICAgICAgICAg
aWYgKCFyZXN1bHRWYWx1ZSkgewogICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENv
bW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3Ip
KTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CisKICAgICAgICAgICAg
IGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OnN1Y2Nlc3MoV1RGTW92ZShyZXN1bHRW
YWx1ZSkpKTsKICAgICAgICAgfSk7CiAgICAgfSk7CkBAIC0xMzg1LDExICsxNDU0LDExIEBAIHZv
aWQgU2Vzc2lvbjo6Z2V0RWxlbWVudEF0dHJpYnV0ZShjb25zdCBTdHJpbmcmIGVsZW1lbnRJRCwg
Y29uc3QgU3RyaW5nJiBhdHRyaWJ1CiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZN
b3ZlKHJlc3VsdCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIFJl
ZlB0cjxKU09OOjpBcnJheT4gYXJndW1lbnRzID0gSlNPTjo6QXJyYXk6OmNyZWF0ZSgpOworICAg
ICAgICBhdXRvIGFyZ3VtZW50cyA9IEpTT046OkFycmF5OjpjcmVhdGUoKTsKICAgICAgICAgYXJn
dW1lbnRzLT5wdXNoU3RyaW5nKGNyZWF0ZUVsZW1lbnQoZWxlbWVudElEKS0+dG9KU09OU3RyaW5n
KCkpOwogICAgICAgICBhcmd1bWVudHMtPnB1c2hTdHJpbmcoSlNPTjo6VmFsdWU6OmNyZWF0ZShh
dHRyaWJ1dGUpLT50b0pTT05TdHJpbmcoKSk7CiAKLSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVj
dD4gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIGF1dG8gcGFy
YW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgIHBhcmFtZXRlcnMtPnNl
dFN0cmluZygiYnJvd3NpbmdDb250ZXh0SGFuZGxlIl9zLCBtX3RvcGxldmVsQnJvd3NpbmdDb250
ZXh0LnZhbHVlKCkpOwogICAgICAgICBpZiAobV9jdXJyZW50QnJvd3NpbmdDb250ZXh0KQogICAg
ICAgICAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJmcmFtZUhhbmRsZSJfcywgbV9jdXJyZW50
QnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwpAQCAtMTQwMCwxNiArMTQ2OSwxOSBAQCB2b2lkIFNl
c3Npb246OmdldEVsZW1lbnRBdHRyaWJ1dGUoY29uc3QgU3RyaW5nJiBlbGVtZW50SUQsIGNvbnN0
IFN0cmluZyYgYXR0cmlidQogICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1h
bmRSZXN1bHQ6OmZhaWwoV1RGTW92ZShyZXNwb25zZS5yZXNwb25zZU9iamVjdCkpKTsKICAgICAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBTdHJpbmcgdmFs
dWVTdHJpbmc7Ci0gICAgICAgICAgICBpZiAoIXJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRT
dHJpbmcoInJlc3VsdCJfcywgdmFsdWVTdHJpbmcpKSB7CisKKyAgICAgICAgICAgIGF1dG8gdmFs
dWVTdHJpbmcgPSByZXNwb25zZS5yZXNwb25zZU9iamVjdC0+Z2V0U3RyaW5nKCJyZXN1bHQiX3Mp
OworICAgICAgICAgICAgaWYgKCF2YWx1ZVN0cmluZykgewogICAgICAgICAgICAgICAgIGNvbXBs
ZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2Rl
OjpVbmtub3duRXJyb3IpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHJlc3VsdFZhbHVlOwotICAgICAgICAg
ICAgaWYgKCFKU09OOjpWYWx1ZTo6cGFyc2VKU09OKHZhbHVlU3RyaW5nLCByZXN1bHRWYWx1ZSkp
IHsKKworICAgICAgICAgICAgYXV0byByZXN1bHRWYWx1ZSA9IEpTT046OlZhbHVlOjpwYXJzZUpT
T04odmFsdWVTdHJpbmcpOworICAgICAgICAgICAgaWYgKCFyZXN1bHRWYWx1ZSkgewogICAgICAg
ICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJl
c3VsdDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKICAgICAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgICAgICB9CisKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRS
ZXN1bHQ6OnN1Y2Nlc3MoV1RGTW92ZShyZXN1bHRWYWx1ZSkpKTsKICAgICAgICAgfSk7CiAgICAg
fSk7CkBAIC0xNDI3LDEwICsxNDk5LDEwIEBAIHZvaWQgU2Vzc2lvbjo6Z2V0RWxlbWVudFByb3Bl
cnR5KGNvbnN0IFN0cmluZyYgZWxlbWVudElELCBjb25zdCBTdHJpbmcmIHByb3BlcnR5CiAgICAg
ICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKHJlc3VsdCkpOwogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIFJlZlB0cjxKU09OOjpBcnJheT4gYXJndW1lbnRz
ID0gSlNPTjo6QXJyYXk6OmNyZWF0ZSgpOworICAgICAgICBhdXRvIGFyZ3VtZW50cyA9IEpTT046
OkFycmF5OjpjcmVhdGUoKTsKICAgICAgICAgYXJndW1lbnRzLT5wdXNoU3RyaW5nKGNyZWF0ZUVs
ZW1lbnQoZWxlbWVudElEKS0+dG9KU09OU3RyaW5nKCkpOwogCi0gICAgICAgIFJlZlB0cjxKU09O
OjpPYmplY3Q+IHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBh
dXRvIHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICBwYXJhbWV0
ZXJzLT5zZXRTdHJpbmcoImJyb3dzaW5nQ29udGV4dEhhbmRsZSJfcywgbV90b3BsZXZlbEJyb3dz
aW5nQ29udGV4dC52YWx1ZSgpKTsKICAgICAgICAgaWYgKG1fY3VycmVudEJyb3dzaW5nQ29udGV4
dCkKICAgICAgICAgICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiZnJhbWVIYW5kbGUiX3MsIG1f
Y3VycmVudEJyb3dzaW5nQ29udGV4dC52YWx1ZSgpKTsKQEAgLTE0NDEsMTYgKzE1MTMsMTkgQEAg
dm9pZCBTZXNzaW9uOjpnZXRFbGVtZW50UHJvcGVydHkoY29uc3QgU3RyaW5nJiBlbGVtZW50SUQs
IGNvbnN0IFN0cmluZyYgcHJvcGVydHkKICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cihDb21tYW5kUmVzdWx0OjpmYWlsKFdURk1vdmUocmVzcG9uc2UucmVzcG9uc2VPYmplY3QpKSk7
CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgU3Ry
aW5nIHZhbHVlU3RyaW5nOwotICAgICAgICAgICAgaWYgKCFyZXNwb25zZS5yZXNwb25zZU9iamVj
dC0+Z2V0U3RyaW5nKCJyZXN1bHQiX3MsIHZhbHVlU3RyaW5nKSkgeworCisgICAgICAgICAgICBh
dXRvIHZhbHVlU3RyaW5nID0gcmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdldFN0cmluZygicmVz
dWx0Il9zKTsKKyAgICAgICAgICAgIGlmICghdmFsdWVTdHJpbmcpIHsKICAgICAgICAgICAgICAg
ICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVy
cm9yQ29kZTo6VW5rbm93bkVycm9yKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICAgICAgfQotICAgICAgICAgICAgUmVmUHRyPEpTT046OlZhbHVlPiByZXN1bHRWYWx1ZTsKLSAg
ICAgICAgICAgIGlmICghSlNPTjo6VmFsdWU6OnBhcnNlSlNPTih2YWx1ZVN0cmluZywgcmVzdWx0
VmFsdWUpKSB7CisKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0VmFsdWUgPSBKU09OOjpWYWx1ZTo6
cGFyc2VKU09OKHZhbHVlU3RyaW5nKTsKKyAgICAgICAgICAgIGlmICghcmVzdWx0VmFsdWUpIHsK
ICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENv
bW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVycm9yKSk7CiAgICAgICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihD
b21tYW5kUmVzdWx0OjpzdWNjZXNzKFdURk1vdmUocmVzdWx0VmFsdWUpKSk7CiAgICAgICAgIH0p
OwogICAgIH0pOwpAQCAtMTQ2OCwxMCArMTU0MywxMCBAQCB2b2lkIFNlc3Npb246OmdldEVsZW1l
bnRDU1NWYWx1ZShjb25zdCBTdHJpbmcmIGVsZW1lbnRJRCwgY29uc3QgU3RyaW5nJiBjc3NQcm9w
ZQogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShyZXN1bHQpKTsKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IGFy
Z3VtZW50cyA9IEpTT046OkFycmF5OjpjcmVhdGUoKTsKKyAgICAgICAgYXV0byBhcmd1bWVudHMg
PSBKU09OOjpBcnJheTo6Y3JlYXRlKCk7CiAgICAgICAgIGFyZ3VtZW50cy0+cHVzaFN0cmluZyhj
cmVhdGVFbGVtZW50KGVsZW1lbnRJRCktPnRvSlNPTlN0cmluZygpKTsKIAotICAgICAgICBSZWZQ
dHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAg
ICAgICAgYXV0byBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICAg
cGFyYW1ldGVycy0+c2V0U3RyaW5nKCJicm93c2luZ0NvbnRleHRIYW5kbGUiX3MsIG1fdG9wbGV2
ZWxCcm93c2luZ0NvbnRleHQudmFsdWUoKSk7CiAgICAgICAgIGlmIChtX2N1cnJlbnRCcm93c2lu
Z0NvbnRleHQpCiAgICAgICAgICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoImZyYW1lSGFuZGxl
Il9zLCBtX2N1cnJlbnRCcm93c2luZ0NvbnRleHQudmFsdWUoKSk7CkBAIC0xNDgyLDE2ICsxNTU3
LDE5IEBAIHZvaWQgU2Vzc2lvbjo6Z2V0RWxlbWVudENTU1ZhbHVlKGNvbnN0IFN0cmluZyYgZWxl
bWVudElELCBjb25zdCBTdHJpbmcmIGNzc1Byb3BlCiAgICAgICAgICAgICAgICAgY29tcGxldGlv
bkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChXVEZNb3ZlKHJlc3BvbnNlLnJlc3BvbnNlT2Jq
ZWN0KSkpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIFN0cmluZyB2YWx1ZVN0cmluZzsKLSAgICAgICAgICAgIGlmICghcmVzcG9uc2UucmVzcG9u
c2VPYmplY3QtPmdldFN0cmluZygicmVzdWx0Il9zLCB2YWx1ZVN0cmluZykpIHsKKworICAgICAg
ICAgICAgYXV0byB2YWx1ZVN0cmluZyA9IHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRTdHJp
bmcoInJlc3VsdCJfcyk7CisgICAgICAgICAgICBpZiAoIXZhbHVlU3RyaW5nKSB7CiAgICAgICAg
ICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVz
dWx0OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikpOwogICAgICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gcmVzdWx0VmFs
dWU7Ci0gICAgICAgICAgICBpZiAoIUpTT046OlZhbHVlOjpwYXJzZUpTT04odmFsdWVTdHJpbmcs
IHJlc3VsdFZhbHVlKSkgeworCisgICAgICAgICAgICBhdXRvIHJlc3VsdFZhbHVlID0gSlNPTjo6
VmFsdWU6OnBhcnNlSlNPTih2YWx1ZVN0cmluZyk7CisgICAgICAgICAgICBpZiAoIXJlc3VsdFZh
bHVlKSB7CiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6
ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikpOwogICAgICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgY29tcGxldGlvbkhh
bmRsZXIoQ29tbWFuZFJlc3VsdDo6c3VjY2VzcyhXVEZNb3ZlKHJlc3VsdFZhbHVlKSkpOwogICAg
ICAgICB9KTsKICAgICB9KTsKQEAgLTE1MDQsNyArMTU4Miw3IEBAIHZvaWQgU2Vzc2lvbjo6d2Fp
dEZvck5hdmlnYXRpb25Ub0NvbXBsZXRlKEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSZXN1bHQmJik+
JiYgY29tCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0
PiBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBhdXRvIHBhcmFtZXRl
cnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygi
YnJvd3NpbmdDb250ZXh0SGFuZGxlIl9zLCBtX3RvcGxldmVsQnJvd3NpbmdDb250ZXh0LnZhbHVl
KCkpOwogICAgIGlmIChtX2N1cnJlbnRCcm93c2luZ0NvbnRleHQpCiAgICAgICAgIHBhcmFtZXRl
cnMtPnNldFN0cmluZygiZnJhbWVIYW5kbGUiX3MsIG1fY3VycmVudEJyb3dzaW5nQ29udGV4dC52
YWx1ZSgpKTsKQEAgLTE1MzQsNyArMTYxMiw3IEBAIHZvaWQgU2Vzc2lvbjo6d2FpdEZvck5hdmln
YXRpb25Ub0NvbXBsZXRlKEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSZXN1bHQmJik+JiYgY29tCiAK
IHZvaWQgU2Vzc2lvbjo6ZWxlbWVudElzRmlsZVVwbG9hZChjb25zdCBTdHJpbmcmIGVsZW1lbnRJ
RCwgRnVuY3Rpb248dm9pZCAoQ29tbWFuZFJlc3VsdCYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
IHsKLSAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IGFyZ3VtZW50cyA9IEpTT046OkFycmF5OjpjcmVh
dGUoKTsKKyAgICBhdXRvIGFyZ3VtZW50cyA9IEpTT046OkFycmF5OjpjcmVhdGUoKTsKICAgICBh
cmd1bWVudHMtPnB1c2hTdHJpbmcoY3JlYXRlRWxlbWVudChlbGVtZW50SUQpLT50b0pTT05TdHJp
bmcoKSk7CiAKICAgICBzdGF0aWMgY29uc3QgY2hhciBpc0ZpbGVVcGxvYWRTY3JpcHRbXSA9CkBA
IC0xNTQ0LDcgKzE2MjIsNyBAQCB2b2lkIFNlc3Npb246OmVsZW1lbnRJc0ZpbGVVcGxvYWQoY29u
c3QgU3RyaW5nJiBlbGVtZW50SUQsIEZ1bmN0aW9uPHZvaWQgKENvbW1hbgogICAgICAgICAiICAg
IHJldHVybiB7ICdmaWxlVXBsb2FkJzogZmFsc2UgfTsiCiAgICAgICAgICJ9IjsKIAotICAgIFJl
ZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwor
ICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgcGFyYW1l
dGVycy0+c2V0U3RyaW5nKCJicm93c2luZ0NvbnRleHRIYW5kbGUiX3MsIG1fdG9wbGV2ZWxCcm93
c2luZ0NvbnRleHQudmFsdWUoKSk7CiAgICAgaWYgKG1fY3VycmVudEJyb3dzaW5nQ29udGV4dCkK
ICAgICAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJmcmFtZUhhbmRsZSJfcywgbV9jdXJyZW50
QnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwpAQCAtMTU1NSwzMiArMTYzMywzOCBAQCB2b2lkIFNl
c3Npb246OmVsZW1lbnRJc0ZpbGVVcGxvYWQoY29uc3QgU3RyaW5nJiBlbGVtZW50SUQsIEZ1bmN0
aW9uPHZvaWQgKENvbW1hbgogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJl
c3VsdDo6ZmFpbChXVEZNb3ZlKHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0KSkpOwogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIFN0cmluZyB2YWx1ZVN0cmluZzsKLSAgICAg
ICAgaWYgKCFyZXNwb25zZS5yZXNwb25zZU9iamVjdC0+Z2V0U3RyaW5nKCJyZXN1bHQiX3MsIHZh
bHVlU3RyaW5nKSkgeworCisgICAgICAgIGF1dG8gdmFsdWVTdHJpbmcgPSByZXNwb25zZS5yZXNw
b25zZU9iamVjdC0+Z2V0U3RyaW5nKCJyZXN1bHQiX3MpOworICAgICAgICBpZiAoIXZhbHVlU3Ry
aW5nKSB7CiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWls
KENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVycm9yKSk7CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgUmVmUHRyPEpTT046OlZhbHVlPiByZXN1bHRWYWx1
ZTsKLSAgICAgICAgaWYgKCFKU09OOjpWYWx1ZTo6cGFyc2VKU09OKHZhbHVlU3RyaW5nLCByZXN1
bHRWYWx1ZSkpIHsKKworICAgICAgICBhdXRvIHJlc3VsdFZhbHVlID0gSlNPTjo6VmFsdWU6OnBh
cnNlSlNPTih2YWx1ZVN0cmluZyk7CisgICAgICAgIGlmICghcmVzdWx0VmFsdWUpIHsKICAgICAg
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3Vs
dDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQorCiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OnN1Y2Nlc3Mo
V1RGTW92ZShyZXN1bHRWYWx1ZSkpKTsKICAgICB9KTsKIH0KIAogT3B0aW9uYWw8U2Vzc2lvbjo6
RmlsZVVwbG9hZFR5cGU+IFNlc3Npb246OnBhcnNlRWxlbWVudElzRmlsZVVwbG9hZFJlc3VsdChj
b25zdCBSZWZQdHI8SlNPTjo6VmFsdWU+JiByZXN1bHRWYWx1ZSkKIHsKLSAgICBSZWZQdHI8SlNP
Tjo6T2JqZWN0PiByZXN1bHQ7Ci0gICAgaWYgKCFyZXN1bHRWYWx1ZS0+YXNPYmplY3QocmVzdWx0
KSkKKyAgICBpZiAoIXJlc3VsdFZhbHVlKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owog
Ci0gICAgYm9vbCBpc0ZpbGVVcGxvYWQ7Ci0gICAgaWYgKCFyZXN1bHQtPmdldEJvb2xlYW4oImZp
bGVVcGxvYWQiX3MsIGlzRmlsZVVwbG9hZCkgfHwgIWlzRmlsZVVwbG9hZCkKKyAgICBhdXRvIHJl
c3VsdCA9IHJlc3VsdFZhbHVlLT5hc09iamVjdCgpOworICAgIGlmICghcmVzdWx0KQogICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgYm9vbCBtdWx0aXBsZTsKLSAgICBpZiAoIXJl
c3VsdC0+Z2V0Qm9vbGVhbigibXVsdGlwbGUiX3MsIG11bHRpcGxlKSB8fCAhbXVsdGlwbGUpCisg
ICAgYXV0byBpc0ZpbGVVcGxvYWQgPSByZXN1bHQtPmdldEJvb2xlYW4oImZpbGVVcGxvYWQiX3Mp
OworICAgIGlmICghaXNGaWxlVXBsb2FkIHx8ICEqaXNGaWxlVXBsb2FkKQorICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OworCisgICAgYXV0byBtdWx0aXBsZSA9IHJlc3VsdC0+Z2V0Qm9vbGVh
bigibXVsdGlwbGUiX3MpOworICAgIGlmICghbXVsdGlwbGUgfHwgISptdWx0aXBsZSkKICAgICAg
ICAgcmV0dXJuIEZpbGVVcGxvYWRUeXBlOjpTaW5nbGU7CiAKICAgICByZXR1cm4gRmlsZVVwbG9h
ZFR5cGU6Ok11bHRpcGxlOwpAQCAtMTU4OCw3ICsxNjcyLDcgQEAgT3B0aW9uYWw8U2Vzc2lvbjo6
RmlsZVVwbG9hZFR5cGU+IFNlc3Npb246OnBhcnNlRWxlbWVudElzRmlsZVVwbG9hZFJlc3VsdChj
b25zdAogCiB2b2lkIFNlc3Npb246OnNlbGVjdE9wdGlvbkVsZW1lbnQoY29uc3QgU3RyaW5nJiBl
bGVtZW50SUQsIEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSZXN1bHQmJik+JiYgY29tcGxldGlvbkhh
bmRsZXIpCiB7Ci0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVycyA9IEpTT046Ok9i
amVjdDo6Y3JlYXRlKCk7CisgICAgYXV0byBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVh
dGUoKTsKICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoImJyb3dzaW5nQ29udGV4dEhhbmRsZSJf
cywgbV90b3BsZXZlbEJyb3dzaW5nQ29udGV4dC52YWx1ZSgpKTsKICAgICBwYXJhbWV0ZXJzLT5z
ZXRTdHJpbmcoImZyYW1lSGFuZGxlIl9zLCBtX2N1cnJlbnRCcm93c2luZ0NvbnRleHQudmFsdWVP
cihlbXB0eVN0cmluZygpKSk7CiAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJub2RlSGFuZGxl
Il9zLCBlbGVtZW50SUQpOwpAQCAtMTY0MSw4ICsxNzI1LDggQEAgdm9pZCBTZXNzaW9uOjplbGVt
ZW50Q2xpY2soY29uc3QgU3RyaW5nJiBlbGVtZW50SUQsIEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRS
ZXN1bHQKICAgICAgICAgICAgICAgICBnZXRFbGVtZW50VGFnTmFtZShlbGVtZW50SUQsIFt0aGlz
LCBlbGVtZW50SUQsIGluVmlld0NlbnRlciA9IFdURk1vdmUoaW5WaWV3Q2VudGVyKSwgY29tcGxl
dGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oQ29tbWFuZFJlc3VsdCYm
IHJlc3VsdCkgbXV0YWJsZSB7CiAgICAgICAgICAgICAgICAgICAgIGJvb2wgaXNPcHRpb25FbGVt
ZW50ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgIGlmICghcmVzdWx0LmlzRXJyb3IoKSkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHRhZ05hbWU7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBpZiAocmVzdWx0LnJlc3VsdCgpLT5hc1N0cmluZyh0YWdOYW1lKSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGF1dG8gdGFnTmFtZSA9IHJlc3VsdC5yZXN1bHQoKS0+YXNTdHJp
bmcoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghIXRhZ05hbWUpCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaXNPcHRpb25FbGVtZW50ID0gdGFnTmFtZSA9PSAib3B0aW9uIjsK
ICAgICAgICAgICAgICAgICAgICAgfQogCkBAIC0xNjY2LDcgKzE3NTAsNyBAQCB2b2lkIFNlc3Np
b246OmVsZW1lbnRDbGljayhjb25zdCBTdHJpbmcmIGVsZW1lbnRJRCwgRnVuY3Rpb248dm9pZCAo
Q29tbWFuZFJlc3VsdAogCiB2b2lkIFNlc3Npb246OmVsZW1lbnRJc0VkaXRhYmxlKGNvbnN0IFN0
cmluZyYgZWxlbWVudElELCBGdW5jdGlvbjx2b2lkIChDb21tYW5kUmVzdWx0JiYpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQogewotICAgIFJlZlB0cjxKU09OOjpBcnJheT4gYXJndW1lbnRzID0gSlNP
Tjo6QXJyYXk6OmNyZWF0ZSgpOworICAgIGF1dG8gYXJndW1lbnRzID0gSlNPTjo6QXJyYXk6OmNy
ZWF0ZSgpOwogICAgIGFyZ3VtZW50cy0+cHVzaFN0cmluZyhjcmVhdGVFbGVtZW50KGVsZW1lbnRJ
RCktPnRvSlNPTlN0cmluZygpKTsKIAogICAgIHN0YXRpYyBjb25zdCBjaGFyIGlzRWRpdGFibGVT
Y3JpcHRbXSA9CkBAIC0xNjg2LDcgKzE3NzAsNyBAQCB2b2lkIFNlc3Npb246OmVsZW1lbnRJc0Vk
aXRhYmxlKGNvbnN0IFN0cmluZyYgZWxlbWVudElELCBGdW5jdGlvbjx2b2lkIChDb21tYW5kUgog
ICAgICAgICAiICAgIHJldHVybiBmYWxzZTsiCiAgICAgICAgICJ9IjsKIAotICAgIFJlZlB0cjxK
U09OOjpPYmplY3Q+IHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGF1
dG8gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgcGFyYW1ldGVycy0+
c2V0U3RyaW5nKCJicm93c2luZ0NvbnRleHRIYW5kbGUiX3MsIG1fdG9wbGV2ZWxCcm93c2luZ0Nv
bnRleHQudmFsdWUoKSk7CiAgICAgaWYgKG1fY3VycmVudEJyb3dzaW5nQ29udGV4dCkKICAgICAg
ICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJmcmFtZUhhbmRsZSJfcywgbV9jdXJyZW50QnJvd3Np
bmdDb250ZXh0LnZhbHVlKCkpOwpAQCAtMTY5NywxNiArMTc4MSwxOSBAQCB2b2lkIFNlc3Npb246
OmVsZW1lbnRJc0VkaXRhYmxlKGNvbnN0IFN0cmluZyYgZWxlbWVudElELCBGdW5jdGlvbjx2b2lk
IChDb21tYW5kUgogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6
ZmFpbChXVEZNb3ZlKHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0KSkpOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9Ci0gICAgICAgIFN0cmluZyB2YWx1ZVN0cmluZzsKLSAgICAgICAgaWYg
KCFyZXNwb25zZS5yZXNwb25zZU9iamVjdC0+Z2V0U3RyaW5nKCJyZXN1bHQiX3MsIHZhbHVlU3Ry
aW5nKSkgeworCisgICAgICAgIGF1dG8gdmFsdWVTdHJpbmcgPSByZXNwb25zZS5yZXNwb25zZU9i
amVjdC0+Z2V0U3RyaW5nKCJyZXN1bHQiX3MpOworICAgICAgICBpZiAoIXZhbHVlU3RyaW5nKSB7
CiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1h
bmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVycm9yKSk7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KLSAgICAgICAgUmVmUHRyPEpTT046OlZhbHVlPiByZXN1bHRWYWx1ZTsKLSAg
ICAgICAgaWYgKCFKU09OOjpWYWx1ZTo6cGFyc2VKU09OKHZhbHVlU3RyaW5nLCByZXN1bHRWYWx1
ZSkpIHsKKworICAgICAgICBhdXRvIHJlc3VsdFZhbHVlID0gSlNPTjo6VmFsdWU6OnBhcnNlSlNP
Tih2YWx1ZVN0cmluZyk7CisgICAgICAgIGlmICghcmVzdWx0VmFsdWUpIHsKICAgICAgICAgICAg
IGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJy
b3JDb2RlOjpVbmtub3duRXJyb3IpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQor
CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OnN1Y2Nlc3MoV1RGTW92
ZShyZXN1bHRWYWx1ZSkpKTsKICAgICB9KTsKIH0KQEAgLTE3MzAsOCArMTgxNyw4IEBAIHZvaWQg
U2Vzc2lvbjo6ZWxlbWVudENsZWFyKGNvbnN0IFN0cmluZyYgZWxlbWVudElELCBGdW5jdGlvbjx2
b2lkIChDb21tYW5kUmVzdWx0CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAg
fQogCi0gICAgICAgICAgICBib29sIGlzRWRpdGFibGU7Ci0gICAgICAgICAgICBpZiAoIXJlc3Vs
dC5yZXN1bHQoKS0+YXNCb29sZWFuKGlzRWRpdGFibGUpIHx8ICFpc0VkaXRhYmxlKSB7CisgICAg
ICAgICAgICBhdXRvIGlzRWRpdGFibGUgPSByZXN1bHQucmVzdWx0KCktPmFzQm9vbGVhbigpOwor
ICAgICAgICAgICAgaWYgKCFpc0VkaXRhYmxlIHx8ICEqaXNFZGl0YWJsZSkgewogICAgICAgICAg
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3Vs
dDo6RXJyb3JDb2RlOjpJbnZhbGlkRWxlbWVudFN0YXRlKSk7CiAgICAgICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICAgICAgfQpAQCAtMTc0NiwxMCArMTgzMywxMCBAQCB2b2lkIFNlc3Npb246
OmVsZW1lbnRDbGVhcihjb25zdCBTdHJpbmcmIGVsZW1lbnRJRCwgRnVuY3Rpb248dm9pZCAoQ29t
bWFuZFJlc3VsdAogICAgICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5k
UmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6RWxlbWVudE5vdEludGVyYWN0
YWJsZSkpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIFJlZlB0cjxKU09OOjpBcnJheT4gYXJndW1lbnRzID0gSlNPTjo6QXJy
YXk6OmNyZWF0ZSgpOworICAgICAgICAgICAgICAgIGF1dG8gYXJndW1lbnRzID0gSlNPTjo6QXJy
YXk6OmNyZWF0ZSgpOwogICAgICAgICAgICAgICAgIGFyZ3VtZW50cy0+cHVzaFN0cmluZyhjcmVh
dGVFbGVtZW50KGVsZW1lbnRJRCktPnRvSlNPTlN0cmluZygpKTsKIAotICAgICAgICAgICAgICAg
IFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgp
OworICAgICAgICAgICAgICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRl
KCk7CiAgICAgICAgICAgICAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJicm93c2luZ0NvbnRl
eHRIYW5kbGUiX3MsIG1fdG9wbGV2ZWxCcm93c2luZ0NvbnRleHQudmFsdWUoKSk7CiAgICAgICAg
ICAgICAgICAgaWYgKG1fY3VycmVudEJyb3dzaW5nQ29udGV4dCkKICAgICAgICAgICAgICAgICAg
ICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJmcmFtZUhhbmRsZSJfcywgbV9jdXJyZW50QnJvd3Np
bmdDb250ZXh0LnZhbHVlKCkpOwpAQCAtMTc4MCw3ICsxODY3LDcgQEAgdm9pZCBTZXNzaW9uOjpz
ZXRJbnB1dEZpbGVVcGxvYWRGaWxlcyhjb25zdCBTdHJpbmcmIGVsZW1lbnRJRCwgY29uc3QgU3Ry
aW5nJiB0ZXgKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFJlZlB0cjxKU09OOjpBcnJh
eT4gZmlsZW5hbWVzID0gSlNPTjo6QXJyYXk6OmNyZWF0ZSgpOworICAgIGF1dG8gZmlsZW5hbWVz
ID0gSlNPTjo6QXJyYXk6OmNyZWF0ZSgpOwogICAgIGZvciAoY29uc3QgYXV0byYgZmlsZSA6IGZp
bGVzKSB7CiAgICAgICAgIGlmICghRmlsZVN5c3RlbTo6ZmlsZUV4aXN0cyhmaWxlKSkgewogICAg
ICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVz
dWx0OjpFcnJvckNvZGU6OkludmFsaWRBcmd1bWVudCkpOwpAQCAtMTc4OSw3ICsxODc2LDcgQEAg
dm9pZCBTZXNzaW9uOjpzZXRJbnB1dEZpbGVVcGxvYWRGaWxlcyhjb25zdCBTdHJpbmcmIGVsZW1l
bnRJRCwgY29uc3QgU3RyaW5nJiB0ZXgKICAgICAgICAgZmlsZW5hbWVzLT5wdXNoU3RyaW5nKGZp
bGUpOwogICAgIH0KIAotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnMgPSBKU09O
OjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6
Y3JlYXRlKCk7CiAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJicm93c2luZ0NvbnRleHRIYW5k
bGUiX3MsIG1fdG9wbGV2ZWxCcm93c2luZ0NvbnRleHQudmFsdWUoKSk7CiAgICAgcGFyYW1ldGVy
cy0+c2V0U3RyaW5nKCJmcmFtZUhhbmRsZSJfcywgbV9jdXJyZW50QnJvd3NpbmdDb250ZXh0LnZh
bHVlT3IoZW1wdHlTdHJpbmcoKSkpOwogICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygibm9kZUhh
bmRsZSJfcywgZWxlbWVudElEKTsKQEAgLTE5ODAsOSArMjA2Nyw5IEBAIHZvaWQgU2Vzc2lvbjo6
ZWxlbWVudFNlbmRLZXlzKGNvbnN0IFN0cmluZyYgZWxlbWVudElELCBjb25zdCBTdHJpbmcmIHRl
eHQsIEZ1bmN0CiAgICAgICAgICAgICAgICAgICAgICIgICAgICAgIHRocm93IHtuYW1lOiAnRWxl
bWVudE5vdEludGVyYWN0YWJsZScsIG1lc3NhZ2U6ICdFbGVtZW50IGlzIG5vdCBmb2N1c2FibGUu
J307IgogICAgICAgICAgICAgICAgICAgICAifSI7CiAKLSAgICAgICAgICAgICAgICBSZWZQdHI8
SlNPTjo6QXJyYXk+IGFyZ3VtZW50cyA9IEpTT046OkFycmF5OjpjcmVhdGUoKTsKKyAgICAgICAg
ICAgICAgICBhdXRvIGFyZ3VtZW50cyA9IEpTT046OkFycmF5OjpjcmVhdGUoKTsKICAgICAgICAg
ICAgICAgICBhcmd1bWVudHMtPnB1c2hTdHJpbmcoY3JlYXRlRWxlbWVudChlbGVtZW50SUQpLT50
b0pTT05TdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFy
YW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgICAgICAgICAgYXV0byBw
YXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICAgICAgICAgICBwYXJh
bWV0ZXJzLT5zZXRTdHJpbmcoImJyb3dzaW5nQ29udGV4dEhhbmRsZSJfcywgbV90b3BsZXZlbEJy
b3dzaW5nQ29udGV4dC52YWx1ZSgpKTsKICAgICAgICAgICAgICAgICBpZiAobV9jdXJyZW50QnJv
d3NpbmdDb250ZXh0KQogICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmco
ImZyYW1lSGFuZGxlIl9zLCBtX2N1cnJlbnRCcm93c2luZ0NvbnRleHQudmFsdWUoKSk7CkBAIC0y
MDU2LDcgKzIxNDMsNyBAQCB2b2lkIFNlc3Npb246OmdldFBhZ2VTb3VyY2UoRnVuY3Rpb248dm9p
ZCAoQ29tbWFuZFJlc3VsdCYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcgogICAgICAgICAgICAgY29t
cGxldGlvbkhhbmRsZXIoV1RGTW92ZShyZXN1bHQpKTsKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQotICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzID0gSlNPTjo6
T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgYXV0byBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0
OjpjcmVhdGUoKTsKICAgICAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJicm93c2luZ0NvbnRl
eHRIYW5kbGUiX3MsIG1fdG9wbGV2ZWxCcm93c2luZ0NvbnRleHQudmFsdWUoKSk7CiAgICAgICAg
IHBhcmFtZXRlcnMtPnNldFN0cmluZygiZnVuY3Rpb24iX3MsICJmdW5jdGlvbigpIHsgcmV0dXJu
IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5vdXRlckhUTUw7IH0iX3MpOwogICAgICAgICBwYXJh
bWV0ZXJzLT5zZXRBcnJheSgiYXJndW1lbnRzIl9zLCBKU09OOjpBcnJheTo6Y3JlYXRlKCkpOwpA
QCAtMjA2NSwzOCArMjE1MiwzOSBAQCB2b2lkIFNlc3Npb246OmdldFBhZ2VTb3VyY2UoRnVuY3Rp
b248dm9pZCAoQ29tbWFuZFJlc3VsdCYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcgogICAgICAgICAg
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoV1RGTW92ZShyZXNw
b25zZS5yZXNwb25zZU9iamVjdCkpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBTdHJpbmcgdmFsdWVTdHJpbmc7Ci0gICAgICAgICAgICBpZiAo
IXJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRTdHJpbmcoInJlc3VsdCJfcywgdmFsdWVTdHJp
bmcpKSB7CisKKyAgICAgICAgICAgIGF1dG8gdmFsdWVTdHJpbmcgPSByZXNwb25zZS5yZXNwb25z
ZU9iamVjdC0+Z2V0U3RyaW5nKCJyZXN1bHQiX3MpOworICAgICAgICAgICAgaWYgKCF2YWx1ZVN0
cmluZykgewogICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6
OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKICAgICAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBSZWZQdHI8SlNPTjo6
VmFsdWU+IHJlc3VsdFZhbHVlOwotICAgICAgICAgICAgaWYgKCFKU09OOjpWYWx1ZTo6cGFyc2VK
U09OKHZhbHVlU3RyaW5nLCByZXN1bHRWYWx1ZSkpIHsKKworICAgICAgICAgICAgYXV0byByZXN1
bHRWYWx1ZSA9IEpTT046OlZhbHVlOjpwYXJzZUpTT04odmFsdWVTdHJpbmcpOworICAgICAgICAg
ICAgaWYgKCFyZXN1bHRWYWx1ZSkgewogICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVy
KENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtub3duRXJy
b3IpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CisKICAgICAgICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OnN1Y2Nlc3MoV1RGTW92ZShyZXN1
bHRWYWx1ZSkpKTsKICAgICAgICAgfSk7CiAgICAgfSk7CiB9CiAKLVJlZlB0cjxKU09OOjpWYWx1
ZT4gU2Vzc2lvbjo6aGFuZGxlU2NyaXB0UmVzdWx0KFJlZlB0cjxKU09OOjpWYWx1ZT4mJiByZXN1
bHRWYWx1ZSkKK1JlZjxKU09OOjpWYWx1ZT4gU2Vzc2lvbjo6aGFuZGxlU2NyaXB0UmVzdWx0KFJl
ZjxKU09OOjpWYWx1ZT4mJiByZXN1bHRWYWx1ZSkKIHsKLSAgICBSZWZQdHI8SlNPTjo6QXJyYXk+
IHJlc3VsdEFycmF5OwotICAgIGlmIChyZXN1bHRWYWx1ZS0+YXNBcnJheShyZXN1bHRBcnJheSkp
IHsKLSAgICAgICAgUmVmUHRyPEpTT046OkFycmF5PiByZXR1cm5WYWx1ZUFycmF5ID0gSlNPTjo6
QXJyYXk6OmNyZWF0ZSgpOworICAgIGlmIChhdXRvIHJlc3VsdEFycmF5ID0gcmVzdWx0VmFsdWUt
PmFzQXJyYXkoKSkgeworICAgICAgICBhdXRvIHJldHVyblZhbHVlQXJyYXkgPSBKU09OOjpBcnJh
eTo6Y3JlYXRlKCk7CiAgICAgICAgIHVuc2lnbmVkIHJlc3VsdEFycmF5TGVuZ3RoID0gcmVzdWx0
QXJyYXktPmxlbmd0aCgpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVzdWx0
QXJyYXlMZW5ndGg7ICsraSkKICAgICAgICAgICAgIHJldHVyblZhbHVlQXJyYXktPnB1c2hWYWx1
ZShoYW5kbGVTY3JpcHRSZXN1bHQocmVzdWx0QXJyYXktPmdldChpKSkpOwogICAgICAgICByZXR1
cm4gcmV0dXJuVmFsdWVBcnJheTsKICAgICB9CiAKLSAgICBpZiAoYXV0byBlbGVtZW50ID0gY3Jl
YXRlRWxlbWVudChSZWZQdHI8SlNPTjo6VmFsdWU+KHJlc3VsdFZhbHVlKSkpCi0gICAgICAgIHJl
dHVybiBlbGVtZW50OworICAgIGlmIChhdXRvIGVsZW1lbnQgPSBjcmVhdGVFbGVtZW50KHJlc3Vs
dFZhbHVlLmNvcHlSZWYoKSkpCisgICAgICAgIHJldHVybiBlbGVtZW50LnJlbGVhc2VOb25OdWxs
KCk7CiAKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiByZXN1bHRPYmplY3Q7Ci0gICAgaWYgKHJl
c3VsdFZhbHVlLT5hc09iamVjdChyZXN1bHRPYmplY3QpKSB7Ci0gICAgICAgIFJlZlB0cjxKU09O
OjpPYmplY3Q+IHJldHVyblZhbHVlT2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAg
ICBpZiAoYXV0byByZXN1bHRPYmplY3QgPSByZXN1bHRWYWx1ZS0+YXNPYmplY3QoKSkgeworICAg
ICAgICBhdXRvIHJldHVyblZhbHVlT2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAg
ICAgICAgYXV0byBlbmQgPSByZXN1bHRPYmplY3QtPmVuZCgpOwogICAgICAgICBmb3IgKGF1dG8g
aXQgPSByZXN1bHRPYmplY3QtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKICAgICAgICAgICAg
IHJldHVyblZhbHVlT2JqZWN0LT5zZXRWYWx1ZShpdC0+a2V5LCBoYW5kbGVTY3JpcHRSZXN1bHQo
V1RGTW92ZShpdC0+dmFsdWUpKSk7CkBAIC0yMTE4LDE4ICsyMjA2LDE3IEBAIHZvaWQgU2Vzc2lv
bjo6ZXhlY3V0ZVNjcmlwdChjb25zdCBTdHJpbmcmIHNjcmlwdCwgUmVmUHRyPEpTT046OkFycmF5
PiYmIGFyZ3VtZW50CiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKHJlc3Vs
dCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIFJlZlB0cjxKU09O
OjpBcnJheT4gYXJndW1lbnRzID0gSlNPTjo6QXJyYXk6OmNyZWF0ZSgpOworICAgICAgICBhdXRv
IGFyZ3VtZW50cyA9IEpTT046OkFycmF5OjpjcmVhdGUoKTsKICAgICAgICAgdW5zaWduZWQgYXJn
dW1lbnRzTGVuZ3RoID0gYXJndW1lbnRzQXJyYXktPmxlbmd0aCgpOwogICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgYXJndW1lbnRzTGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIGlm
IChhdXRvIGFyZ3VtZW50ID0gYXJndW1lbnRzQXJyYXktPmdldChpKSkgewotICAgICAgICAgICAg
ICAgIGlmIChhdXRvIGVsZW1lbnQgPSBleHRyYWN0RWxlbWVudCgqYXJndW1lbnQpKQotICAgICAg
ICAgICAgICAgICAgICBhcmd1bWVudHMtPnB1c2hTdHJpbmcoZWxlbWVudC0+dG9KU09OU3RyaW5n
KCkpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRz
LT5wdXNoU3RyaW5nKGFyZ3VtZW50LT50b0pTT05TdHJpbmcoKSk7Ci0gICAgICAgICAgICB9Cisg
ICAgICAgICAgICBhdXRvIGFyZ3VtZW50ID0gYXJndW1lbnRzQXJyYXktPmdldChpKTsKKyAgICAg
ICAgICAgIGlmIChhdXRvIGVsZW1lbnQgPSBleHRyYWN0RWxlbWVudChhcmd1bWVudCkpCisgICAg
ICAgICAgICAgICAgYXJndW1lbnRzLT5wdXNoU3RyaW5nKGVsZW1lbnQtPnRvSlNPTlN0cmluZygp
KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBhcmd1bWVudHMtPnB1c2hTdHJp
bmcoYXJndW1lbnQtPnRvSlNPTlN0cmluZygpKTsKICAgICAgICAgfQogCi0gICAgICAgIFJlZlB0
cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAg
ICAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICBw
YXJhbWV0ZXJzLT5zZXRTdHJpbmcoImJyb3dzaW5nQ29udGV4dEhhbmRsZSJfcywgbV90b3BsZXZl
bEJyb3dzaW5nQ29udGV4dC52YWx1ZSgpKTsKICAgICAgICAgaWYgKG1fY3VycmVudEJyb3dzaW5n
Q29udGV4dCkKICAgICAgICAgICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiZnJhbWVIYW5kbGUi
X3MsIG1fY3VycmVudEJyb3dzaW5nQ29udGV4dC52YWx1ZSgpKTsKQEAgLTIxNDgsMTcgKzIyMzUs
MjAgQEAgdm9pZCBTZXNzaW9uOjpleGVjdXRlU2NyaXB0KGNvbnN0IFN0cmluZyYgc2NyaXB0LCBS
ZWZQdHI8SlNPTjo6QXJyYXk+JiYgYXJndW1lbnQKICAgICAgICAgICAgICAgICAgICAgY29tcGxl
dGlvbkhhbmRsZXIoV1RGTW92ZShyZXN1bHQpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBTdHJpbmcgdmFsdWVTdHJpbmc7Ci0gICAgICAgICAg
ICBpZiAoIXJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRTdHJpbmcoInJlc3VsdCJfcywgdmFs
dWVTdHJpbmcpKSB7CisKKyAgICAgICAgICAgIGF1dG8gdmFsdWVTdHJpbmcgPSByZXNwb25zZS5y
ZXNwb25zZU9iamVjdC0+Z2V0U3RyaW5nKCJyZXN1bHQiX3MpOworICAgICAgICAgICAgaWYgKCF2
YWx1ZVN0cmluZykgewogICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRS
ZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKICAg
ICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBSZWZQdHI8
SlNPTjo6VmFsdWU+IHJlc3VsdFZhbHVlOwotICAgICAgICAgICAgaWYgKCFKU09OOjpWYWx1ZTo6
cGFyc2VKU09OKHZhbHVlU3RyaW5nLCByZXN1bHRWYWx1ZSkpIHsKKworICAgICAgICAgICAgYXV0
byByZXN1bHRWYWx1ZSA9IEpTT046OlZhbHVlOjpwYXJzZUpTT04odmFsdWVTdHJpbmcpOworICAg
ICAgICAgICAgaWYgKCFyZXN1bHRWYWx1ZSkgewogICAgICAgICAgICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtu
b3duRXJyb3IpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpzdWNjZXNzKGhhbmRsZVNj
cmlwdFJlc3VsdChXVEZNb3ZlKHJlc3VsdFZhbHVlKSkpKTsKKworICAgICAgICAgICAgY29tcGxl
dGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6c3VjY2VzcyhoYW5kbGVTY3JpcHRSZXN1bHQocmVz
dWx0VmFsdWUucmVsZWFzZU5vbk51bGwoKSkpKTsKICAgICAgICAgfSk7CiAgICAgfSk7CiB9CkBA
IC0yMTgxLDkgKzIyNzEsOSBAQCBzdGF0aWMgU3RyaW5nIG1vdXNlQnV0dG9uRm9yQXV0b21hdGlv
bihNb3VzZUJ1dHRvbiBidXR0b24pCiAKIHZvaWQgU2Vzc2lvbjo6cGVyZm9ybU1vdXNlSW50ZXJh
Y3Rpb24oaW50IHgsIGludCB5LCBNb3VzZUJ1dHRvbiBidXR0b24sIE1vdXNlSW50ZXJhY3Rpb24g
aW50ZXJhY3Rpb24sIEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSZXN1bHQmJik+JiYgY29tcGxldGlv
bkhhbmRsZXIpCiB7Ci0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVycyA9IEpTT046
Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgYXV0byBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0Ojpj
cmVhdGUoKTsKICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoImhhbmRsZSJfcywgbV90b3BsZXZl
bEJyb3dzaW5nQ29udGV4dC52YWx1ZSgpKTsKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwb3Np
dGlvbiA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgYXV0byBwb3NpdGlvbiA9IEpTT046
Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgcG9zaXRpb24tPnNldEludGVnZXIoIngiX3MsIHgpOwog
ICAgIHBvc2l0aW9uLT5zZXRJbnRlZ2VyKCJ5Il9zLCB5KTsKICAgICBwYXJhbWV0ZXJzLT5zZXRP
YmplY3QoInBvc2l0aW9uIl9zLCBXVEZNb3ZlKHBvc2l0aW9uKSk7CkBAIC0yMjE3LDExICsyMzA3
LDExIEBAIHZvaWQgU2Vzc2lvbjo6cGVyZm9ybU1vdXNlSW50ZXJhY3Rpb24oaW50IHgsIGludCB5
LCBNb3VzZUJ1dHRvbiBidXR0b24sIE1vdXNlSW50CiAKIHZvaWQgU2Vzc2lvbjo6cGVyZm9ybUtl
eWJvYXJkSW50ZXJhY3Rpb25zKFZlY3RvcjxLZXlib2FyZEludGVyYWN0aW9uPiYmIGludGVyYWN0
aW9ucywgRnVuY3Rpb248dm9pZCAoQ29tbWFuZFJlc3VsdCYmKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKIHsKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0
OjpjcmVhdGUoKTsKKyAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgp
OwogICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiaGFuZGxlIl9zLCBtX3RvcGxldmVsQnJvd3Np
bmdDb250ZXh0LnZhbHVlKCkpOwotICAgIFJlZlB0cjxKU09OOjpBcnJheT4gaW50ZXJhY3Rpb25z
QXJyYXkgPSBKU09OOjpBcnJheTo6Y3JlYXRlKCk7CisgICAgYXV0byBpbnRlcmFjdGlvbnNBcnJh
eSA9IEpTT046OkFycmF5OjpjcmVhdGUoKTsKICAgICBmb3IgKGNvbnN0IGF1dG8mIGludGVyYWN0
aW9uIDogaW50ZXJhY3Rpb25zKSB7Ci0gICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IGludGVy
YWN0aW9uT2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgYXV0byBpbnRl
cmFjdGlvbk9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgIHN3aXRjaCAo
aW50ZXJhY3Rpb24udHlwZSkgewogICAgICAgICBjYXNlIEtleWJvYXJkSW50ZXJhY3Rpb25UeXBl
OjpLZXlQcmVzczoKICAgICAgICAgICAgIGludGVyYWN0aW9uT2JqZWN0LT5zZXRTdHJpbmcoInR5
cGUiX3MsICJLZXlQcmVzcyJfcyk7CkBAIC0yMjUyLDM3ICsyMzQyLDQzIEBAIHZvaWQgU2Vzc2lv
bjo6cGVyZm9ybUtleWJvYXJkSW50ZXJhY3Rpb25zKFZlY3RvcjxLZXlib2FyZEludGVyYWN0aW9u
PiYmIGludGVyYWN0CiBzdGF0aWMgT3B0aW9uYWw8U2Vzc2lvbjo6Q29va2llPiBwYXJzZUF1dG9t
YXRpb25Db29raWUoY29uc3QgSlNPTjo6T2JqZWN0JiBjb29raWVPYmplY3QpCiB7CiAgICAgU2Vz
c2lvbjo6Q29va2llIGNvb2tpZTsKLSAgICBpZiAoIWNvb2tpZU9iamVjdC5nZXRTdHJpbmcoIm5h
bWUiX3MsIGNvb2tpZS5uYW1lKSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICBp
ZiAoIWNvb2tpZU9iamVjdC5nZXRTdHJpbmcoInZhbHVlIl9zLCBjb29raWUudmFsdWUpKQorCisg
ICAgY29va2llLm5hbWUgPSBjb29raWVPYmplY3QuZ2V0U3RyaW5nKCJuYW1lIl9zKTsKKyAgICBp
ZiAoIWNvb2tpZS5uYW1lKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgU3Ry
aW5nIHBhdGg7Ci0gICAgaWYgKGNvb2tpZU9iamVjdC5nZXRTdHJpbmcoInBhdGgiX3MsIHBhdGgp
KQorICAgIGNvb2tpZS52YWx1ZSA9IGNvb2tpZU9iamVjdC5nZXRTdHJpbmcoInZhbHVlIl9zKTsK
KyAgICBpZiAoIWNvb2tpZS52YWx1ZSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKwor
ICAgIGF1dG8gcGF0aCA9IGNvb2tpZU9iamVjdC5nZXRTdHJpbmcoInBhdGgiX3MpOworICAgIGlm
ICghIXBhdGgpCiAgICAgICAgIGNvb2tpZS5wYXRoID0gcGF0aDsKLSAgICBTdHJpbmcgZG9tYWlu
OwotICAgIGlmIChjb29raWVPYmplY3QuZ2V0U3RyaW5nKCJkb21haW4iX3MsIGRvbWFpbikpCisK
KyAgICBhdXRvIGRvbWFpbiA9IGNvb2tpZU9iamVjdC5nZXRTdHJpbmcoImRvbWFpbiJfcyk7Cisg
ICAgaWYgKCEhZG9tYWluKQogICAgICAgICBjb29raWUuZG9tYWluID0gZG9tYWluOwotICAgIGJv
b2wgc2VjdXJlOwotICAgIGlmIChjb29raWVPYmplY3QuZ2V0Qm9vbGVhbigic2VjdXJlIl9zLCBz
ZWN1cmUpKQotICAgICAgICBjb29raWUuc2VjdXJlID0gc2VjdXJlOwotICAgIGJvb2wgaHR0cE9u
bHk7Ci0gICAgaWYgKGNvb2tpZU9iamVjdC5nZXRCb29sZWFuKCJodHRwT25seSJfcywgaHR0cE9u
bHkpKQotICAgICAgICBjb29raWUuaHR0cE9ubHkgPSBodHRwT25seTsKLSAgICBib29sIHNlc3Np
b24gPSBmYWxzZTsKLSAgICBjb29raWVPYmplY3QuZ2V0Qm9vbGVhbigic2Vzc2lvbiJfcywgc2Vz
c2lvbik7CisKKyAgICBhdXRvIHNlY3VyZSA9IGNvb2tpZU9iamVjdC5nZXRCb29sZWFuKCJzZWN1
cmUiX3MpOworICAgIGlmIChzZWN1cmUpCisgICAgICAgIGNvb2tpZS5zZWN1cmUgPSAqc2VjdXJl
OworCisgICAgYXV0byBodHRwT25seSA9IGNvb2tpZU9iamVjdC5nZXRCb29sZWFuKCJodHRwT25s
eSJfcyk7CisgICAgaWYgKGh0dHBPbmx5KQorICAgICAgICBjb29raWUuaHR0cE9ubHkgPSAqaHR0
cE9ubHk7CisKKyAgICBhdXRvIHNlc3Npb24gPSBjb29raWVPYmplY3QuZ2V0Qm9vbGVhbigic2Vz
c2lvbiJfcyk7CiAgICAgaWYgKCFzZXNzaW9uKSB7Ci0gICAgICAgIGRvdWJsZSBleHBpcnk7Ci0g
ICAgICAgIGlmIChjb29raWVPYmplY3QuZ2V0RG91YmxlKCJleHBpcmVzIl9zLCBleHBpcnkpKQot
ICAgICAgICAgICAgY29va2llLmV4cGlyeSA9IGV4cGlyeTsKKyAgICAgICAgaWYgKGF1dG8gZXhw
aXJ5ID0gY29va2llT2JqZWN0LmdldERvdWJsZSgiZXhwaXJlcyJfcykpCisgICAgICAgICAgICBj
b29raWUuZXhwaXJ5ID0gKmV4cGlyeTsKICAgICB9CiAKICAgICByZXR1cm4gY29va2llOwogfQog
Ci1zdGF0aWMgUmVmUHRyPEpTT046Ok9iamVjdD4gYnVpbHRBdXRvbWF0aW9uQ29va2llKGNvbnN0
IFNlc3Npb246OkNvb2tpZSYgY29va2llKQorc3RhdGljIFJlZjxKU09OOjpPYmplY3Q+IGJ1aWx0
QXV0b21hdGlvbkNvb2tpZShjb25zdCBTZXNzaW9uOjpDb29raWUmIGNvb2tpZSkKIHsKLSAgICBS
ZWZQdHI8SlNPTjo6T2JqZWN0PiBjb29raWVPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgp
OworICAgIGF1dG8gY29va2llT2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICBj
b29raWVPYmplY3QtPnNldFN0cmluZygibmFtZSJfcywgY29va2llLm5hbWUpOwogICAgIGNvb2tp
ZU9iamVjdC0+c2V0U3RyaW5nKCJ2YWx1ZSJfcywgY29va2llLnZhbHVlKTsKICAgICBjb29raWVP
YmplY3QtPnNldFN0cmluZygicGF0aCJfcywgY29va2llLnBhdGgudmFsdWVPcigiLyIpKTsKQEAg
LTIyOTQsOSArMjM5MCw5IEBAIHN0YXRpYyBSZWZQdHI8SlNPTjo6T2JqZWN0PiBidWlsdEF1dG9t
YXRpb25Db29raWUoY29uc3QgU2Vzc2lvbjo6Q29va2llJiBjb29raWUpCiAgICAgcmV0dXJuIGNv
b2tpZU9iamVjdDsKIH0KIAotc3RhdGljIFJlZlB0cjxKU09OOjpPYmplY3Q+IHNlcmlhbGl6ZUNv
b2tpZShjb25zdCBTZXNzaW9uOjpDb29raWUmIGNvb2tpZSkKK3N0YXRpYyBSZWY8SlNPTjo6T2Jq
ZWN0PiBzZXJpYWxpemVDb29raWUoY29uc3QgU2Vzc2lvbjo6Q29va2llJiBjb29raWUpCiB7Ci0g
ICAgUmVmUHRyPEpTT046Ok9iamVjdD4gY29va2llT2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVh
dGUoKTsKKyAgICBhdXRvIGNvb2tpZU9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAg
ICAgY29va2llT2JqZWN0LT5zZXRTdHJpbmcoIm5hbWUiX3MsIGNvb2tpZS5uYW1lKTsKICAgICBj
b29raWVPYmplY3QtPnNldFN0cmluZygidmFsdWUiX3MsIGNvb2tpZS52YWx1ZSk7CiAgICAgaWYg
KGNvb2tpZS5wYXRoKQpAQCAtMjMyNSwyMyArMjQyMSwyNCBAQCB2b2lkIFNlc3Npb246OmdldEFs
bENvb2tpZXMoRnVuY3Rpb248dm9pZCAoQ29tbWFuZFJlc3VsdCYmKT4mJiBjb21wbGV0aW9uSGFu
ZGxlcgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgUmVmUHRyPEpT
T046Ok9iamVjdD4gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAg
IGF1dG8gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgIHBhcmFt
ZXRlcnMtPnNldFN0cmluZygiYnJvd3NpbmdDb250ZXh0SGFuZGxlIl9zLCBtX3RvcGxldmVsQnJv
d3NpbmdDb250ZXh0LnZhbHVlKCkpOwogICAgICAgICBtX2hvc3QtPnNlbmRDb21tYW5kVG9CYWNr
ZW5kKCJnZXRBbGxDb29raWVzIl9zLCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBbcHJvdGVjdGVkVGhp
cywgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oU2Vzc2lv
bkhvc3Q6OkNvbW1hbmRSZXNwb25zZSYmIHJlc3BvbnNlKSBtdXRhYmxlIHsKICAgICAgICAgICAg
IGlmIChyZXNwb25zZS5pc0Vycm9yIHx8ICFyZXNwb25zZS5yZXNwb25zZU9iamVjdCkgewogICAg
ICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoV1RGTW92
ZShyZXNwb25zZS5yZXNwb25zZU9iamVjdCkpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IGNvb2tpZXNBcnJh
eTsKLSAgICAgICAgICAgIGlmICghcmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdldEFycmF5KCJj
b29raWVzIl9zLCBjb29raWVzQXJyYXkpKSB7CisKKyAgICAgICAgICAgIGF1dG8gY29va2llc0Fy
cmF5ID0gcmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdldEFycmF5KCJjb29raWVzIl9zKTsKKyAg
ICAgICAgICAgIGlmICghY29va2llc0FycmF5KSB7CiAgICAgICAgICAgICAgICAgY29tcGxldGlv
bkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OlVu
a25vd25FcnJvcikpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIFJlZlB0cjxKU09OOjpBcnJheT4gY29va2llcyA9IEpTT046OkFycmF5OjpjcmVh
dGUoKTsKKworICAgICAgICAgICAgYXV0byBjb29raWVzID0gSlNPTjo6QXJyYXk6OmNyZWF0ZSgp
OwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvb2tpZXNBcnJheS0+bGVu
Z3RoKCk7ICsraSkgewotICAgICAgICAgICAgICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gY29va2ll
VmFsdWUgPSBjb29raWVzQXJyYXktPmdldChpKTsKLSAgICAgICAgICAgICAgICBSZWZQdHI8SlNP
Tjo6T2JqZWN0PiBjb29raWVPYmplY3Q7Ci0gICAgICAgICAgICAgICAgaWYgKCFjb29raWVWYWx1
ZS0+YXNPYmplY3QoY29va2llT2JqZWN0KSkgeworICAgICAgICAgICAgICAgIGF1dG8gY29va2ll
T2JqZWN0ID0gY29va2llc0FycmF5LT5nZXQoaSktPmFzT2JqZWN0KCk7CisgICAgICAgICAgICAg
ICAgaWYgKCFjb29raWVPYmplY3QpIHsKICAgICAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhh
bmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OlVua25v
d25FcnJvcikpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAg
fQpAQCAtMjM2NSwxNCArMjQ2MiwxMSBAQCB2b2lkIFNlc3Npb246OmdldE5hbWVkQ29va2llKGNv
bnN0IFN0cmluZyYgbmFtZSwgRnVuY3Rpb248dm9pZCAoQ29tbWFuZFJlc3VsdCYmKQogICAgICAg
ICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShyZXN1bHQpKTsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQotICAgICAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IGNvb2tpZXNBcnJh
eTsKLSAgICAgICAgcmVzdWx0LnJlc3VsdCgpLT5hc0FycmF5KGNvb2tpZXNBcnJheSk7CisKKyAg
ICAgICAgYXV0byBjb29raWVzQXJyYXkgPSByZXN1bHQucmVzdWx0KCktPmFzQXJyYXkoKTsKICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvb2tpZXNBcnJheS0+bGVuZ3RoKCk7ICsr
aSkgewotICAgICAgICAgICAgUmVmUHRyPEpTT046OlZhbHVlPiBjb29raWVWYWx1ZSA9IGNvb2tp
ZXNBcnJheS0+Z2V0KGkpOwotICAgICAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gY29va2ll
T2JqZWN0OwotICAgICAgICAgICAgY29va2llVmFsdWUtPmFzT2JqZWN0KGNvb2tpZU9iamVjdCk7
Ci0gICAgICAgICAgICBTdHJpbmcgY29va2llTmFtZTsKLSAgICAgICAgICAgIGNvb2tpZU9iamVj
dC0+Z2V0U3RyaW5nKCJuYW1lIl9zLCBjb29raWVOYW1lKTsKKyAgICAgICAgICAgIGF1dG8gY29v
a2llT2JqZWN0ID0gY29va2llc0FycmF5LT5nZXQoaSktPmFzT2JqZWN0KCk7CisgICAgICAgICAg
ICBhdXRvIGNvb2tpZU5hbWUgPSBjb29raWVPYmplY3QtPmdldFN0cmluZygibmFtZSJfcyk7CiAg
ICAgICAgICAgICBpZiAoY29va2llTmFtZSA9PSBuYW1lKSB7CiAgICAgICAgICAgICAgICAgY29t
cGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6c3VjY2VzcyhXVEZNb3ZlKGNvb2tpZU9iamVj
dCkpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CkBAIC0yMzk0LDcgKzI0ODgsNyBAQCB2b2lk
IFNlc3Npb246OmFkZENvb2tpZShjb25zdCBDb29raWUmIGNvb2tpZSwgRnVuY3Rpb248dm9pZCAo
Q29tbWFuZFJlc3VsdCYmKT4mJgogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92
ZShyZXN1bHQpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBSZWZQ
dHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAg
ICAgICAgYXV0byBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICAg
cGFyYW1ldGVycy0+c2V0U3RyaW5nKCJicm93c2luZ0NvbnRleHRIYW5kbGUiX3MsIG1fdG9wbGV2
ZWxCcm93c2luZ0NvbnRleHQudmFsdWUoKSk7CiAgICAgICAgIHBhcmFtZXRlcnMtPnNldE9iamVj
dCgiY29va2llIl9zLCBXVEZNb3ZlKGNvb2tpZSkpOwogICAgICAgICBtX2hvc3QtPnNlbmRDb21t
YW5kVG9CYWNrZW5kKCJhZGRTaW5nbGVDb29raWUiX3MsIFdURk1vdmUocGFyYW1ldGVycyksIFtw
cm90ZWN0ZWRUaGlzLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpXShTZXNzaW9uSG9zdDo6Q29tbWFuZFJlc3BvbnNlJiYgcmVzcG9uc2UpIHsKQEAgLTI0MTks
NyArMjUxMyw3IEBAIHZvaWQgU2Vzc2lvbjo6ZGVsZXRlQ29va2llKGNvbnN0IFN0cmluZyYgbmFt
ZSwgRnVuY3Rpb248dm9pZCAoQ29tbWFuZFJlc3VsdCYmKT4mCiAgICAgICAgICAgICBjb21wbGV0
aW9uSGFuZGxlcihXVEZNb3ZlKHJlc3VsdCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9Ci0gICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnMgPSBKU09OOjpPYmpl
Y3Q6OmNyZWF0ZSgpOworICAgICAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNy
ZWF0ZSgpOwogICAgICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoImJyb3dzaW5nQ29udGV4dEhh
bmRsZSJfcywgbV90b3BsZXZlbEJyb3dzaW5nQ29udGV4dC52YWx1ZSgpKTsKICAgICAgICAgcGFy
YW1ldGVycy0+c2V0U3RyaW5nKCJjb29raWVOYW1lIl9zLCBuYW1lKTsKICAgICAgICAgbV9ob3N0
LT5zZW5kQ29tbWFuZFRvQmFja2VuZCgiZGVsZXRlU2luZ2xlQ29va2llIl9zLCBXVEZNb3ZlKHBh
cmFtZXRlcnMpLCBbcHJvdGVjdGVkVGhpcywgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKV0oU2Vzc2lvbkhvc3Q6OkNvbW1hbmRSZXNwb25zZSYmIHJlc3BvbnNl
KSB7CkBAIC0yNDQ0LDcgKzI1MzgsNyBAQCB2b2lkIFNlc3Npb246OmRlbGV0ZUFsbENvb2tpZXMo
RnVuY3Rpb248dm9pZCAoQ29tbWFuZFJlc3VsdCYmKT4mJiBjb21wbGV0aW9uSGFuZAogICAgICAg
ICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShyZXN1bHQpKTsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQotICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJz
ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgYXV0byBwYXJhbWV0ZXJzID0gSlNP
Tjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJicm93
c2luZ0NvbnRleHRIYW5kbGUiX3MsIG1fdG9wbGV2ZWxCcm93c2luZ0NvbnRleHQudmFsdWUoKSk7
CiAgICAgICAgIG1faG9zdC0+c2VuZENvbW1hbmRUb0JhY2tlbmQoImRlbGV0ZUFsbENvb2tpZXMi
X3MsIFdURk1vdmUocGFyYW1ldGVycyksIFtwcm90ZWN0ZWRUaGlzLCBjb21wbGV0aW9uSGFuZGxl
ciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXShTZXNzaW9uSG9zdDo6Q29tbWFuZFJlc3Bv
bnNlJiYgcmVzcG9uc2UpIHsKICAgICAgICAgICAgIGlmIChyZXNwb25zZS5pc0Vycm9yKSB7CkBA
IC0yNTE3LDIzICsyNjExLDIzIEBAIHZvaWQgU2Vzc2lvbjo6cGVyZm9ybUFjdGlvbnMoVmVjdG9y
PFZlY3RvcjxBY3Rpb24+PiYmIGFjdGlvbnNCeVRpY2ssIEZ1bmN0aW9uPHZvCiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJh
bWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgYXV0byBwYXJhbWV0ZXJz
ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5n
KCJoYW5kbGUiX3MsIG1fdG9wbGV2ZWxCcm93c2luZ0NvbnRleHQudmFsdWUoKSk7CiAgICAgICAg
IGlmIChtX2N1cnJlbnRCcm93c2luZ0NvbnRleHQpCiAgICAgICAgICAgICBwYXJhbWV0ZXJzLT5z
ZXRTdHJpbmcoImZyYW1lSGFuZGxlIl9zLCBtX2N1cnJlbnRCcm93c2luZ0NvbnRleHQudmFsdWUo
KSk7Ci0gICAgICAgIFJlZlB0cjxKU09OOjpBcnJheT4gaW5wdXRTb3VyY2VzID0gSlNPTjo6QXJy
YXk6OmNyZWF0ZSgpOworICAgICAgICBhdXRvIGlucHV0U291cmNlcyA9IEpTT046OkFycmF5Ojpj
cmVhdGUoKTsKICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBpbnB1dFNvdXJjZSA6IG1fYWN0aXZl
SW5wdXRTb3VyY2VzKSB7Ci0gICAgICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBpbnB1dFNv
dXJjZU9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgICAgICBhdXRvIGlu
cHV0U291cmNlT2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICAgICAgIGlu
cHV0U291cmNlT2JqZWN0LT5zZXRTdHJpbmcoInNvdXJjZUlkIl9zLCBpbnB1dFNvdXJjZS5rZXkp
OwogICAgICAgICAgICAgaW5wdXRTb3VyY2VPYmplY3QtPnNldFN0cmluZygic291cmNlVHlwZSJf
cywgYXV0b21hdGlvblNvdXJjZVR5cGUoaW5wdXRTb3VyY2UudmFsdWUudHlwZSkpOwogICAgICAg
ICAgICAgaW5wdXRTb3VyY2VzLT5wdXNoT2JqZWN0KFdURk1vdmUoaW5wdXRTb3VyY2VPYmplY3Qp
KTsKICAgICAgICAgfQogICAgICAgICBwYXJhbWV0ZXJzLT5zZXRBcnJheSgiaW5wdXRTb3VyY2Vz
Il9zLCBXVEZNb3ZlKGlucHV0U291cmNlcykpOwotICAgICAgICBSZWZQdHI8SlNPTjo6QXJyYXk+
IHN0ZXBzID0gSlNPTjo6QXJyYXk6OmNyZWF0ZSgpOworICAgICAgICBhdXRvIHN0ZXBzID0gSlNP
Tjo6QXJyYXk6OmNyZWF0ZSgpOwogICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHRpY2sgOiBhY3Rp
b25zQnlUaWNrKSB7Ci0gICAgICAgICAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IHN0YXRlcyA9IEpT
T046OkFycmF5OjpjcmVhdGUoKTsKKyAgICAgICAgICAgIGF1dG8gc3RhdGVzID0gSlNPTjo6QXJy
YXk6OmNyZWF0ZSgpOwogICAgICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBhY3Rpb24gOiB0aWNr
KSB7Ci0gICAgICAgICAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gc3RhdGUgPSBKU09OOjpP
YmplY3Q6OmNyZWF0ZSgpOworICAgICAgICAgICAgICAgIGF1dG8gc3RhdGUgPSBKU09OOjpPYmpl
Y3Q6OmNyZWF0ZSgpOwogICAgICAgICAgICAgICAgIGF1dG8mIGN1cnJlbnRTdGF0ZSA9IGlucHV0
U291cmNlU3RhdGUoYWN0aW9uLmlkKTsKICAgICAgICAgICAgICAgICBzdGF0ZS0+c2V0U3RyaW5n
KCJzb3VyY2VJZCJfcywgYWN0aW9uLmlkKTsKICAgICAgICAgICAgICAgICBzd2l0Y2ggKGFjdGlv
bi50eXBlKSB7CkBAIC0yNTUxLDcgKzI2NDUsNyBAQCB2b2lkIFNlc3Npb246OnBlcmZvcm1BY3Rp
b25zKFZlY3RvcjxWZWN0b3I8QWN0aW9uPj4mJiBhY3Rpb25zQnlUaWNrLCBGdW5jdGlvbjx2bwog
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGNhc2Ug
QWN0aW9uOjpTdWJ0eXBlOjpQb2ludGVyTW92ZTogewogICAgICAgICAgICAgICAgICAgICAgICAg
c3RhdGUtPnNldFN0cmluZygib3JpZ2luIl9zLCBhdXRvbWF0aW9uT3JpZ2luVHlwZShhY3Rpb24u
b3JpZ2luLT50eXBlKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiBsb2NhdGlvbiA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBhdXRvIGxvY2F0aW9uID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGxvY2F0aW9uLT5zZXRJbnRlZ2VyKCJ4Il9zLCBhY3Rpb24ueC52YWx1
ZSgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uLT5zZXRJbnRlZ2VyKCJ5Il9z
LCBhY3Rpb24ueS52YWx1ZSgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5zZXRP
YmplY3QoImxvY2F0aW9uIl9zLCBXVEZNb3ZlKGxvY2F0aW9uKSk7CkBAIC0yNjE3LDcgKzI3MTEs
NyBAQCB2b2lkIFNlc3Npb246OnBlcmZvcm1BY3Rpb25zKFZlY3RvcjxWZWN0b3I8QWN0aW9uPj4m
JiBhY3Rpb25zQnlUaWNrLCBGdW5jdGlvbjx2bwogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICBzdGF0ZXMtPnB1c2hPYmplY3QoV1RGTW92ZShzdGF0ZSkpOwogICAgICAgICAgICAg
fQotICAgICAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gc3RlcFN0YXRlcyA9IEpTT046Ok9i
amVjdDo6Y3JlYXRlKCk7CisgICAgICAgICAgICBhdXRvIHN0ZXBTdGF0ZXMgPSBKU09OOjpPYmpl
Y3Q6OmNyZWF0ZSgpOwogICAgICAgICAgICAgc3RlcFN0YXRlcy0+c2V0QXJyYXkoInN0YXRlcyJf
cywgV1RGTW92ZShzdGF0ZXMpKTsKICAgICAgICAgICAgIHN0ZXBzLT5wdXNoT2JqZWN0KFdURk1v
dmUoc3RlcFN0YXRlcykpOwogICAgICAgICB9CkBAIC0yNjQzLDcgKzI3MzcsNyBAQCB2b2lkIFNl
c3Npb246OnJlbGVhc2VBY3Rpb25zKEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSZXN1bHQmJik+JiYg
Y29tcGxldGlvbkhhbmRsZQogICAgIG1fYWN0aXZlSW5wdXRTb3VyY2VzLmNsZWFyKCk7CiAgICAg
bV9pbnB1dFN0YXRlVGFibGUuY2xlYXIoKTsKIAotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBh
cmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGF1dG8gcGFyYW1ldGVycyA9
IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJoYW5k
bGUiX3MsIG1fdG9wbGV2ZWxCcm93c2luZ0NvbnRleHQudmFsdWUoKSk7CiAgICAgbV9ob3N0LT5z
ZW5kQ29tbWFuZFRvQmFja2VuZCgiY2FuY2VsSW50ZXJhY3Rpb25TZXF1ZW5jZSJfcywgV1RGTW92
ZShwYXJhbWV0ZXJzKSwgW3Byb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY29tcGxldGlv
bkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oU2Vzc2lvbkhvc3Q6OkNvbW1h
bmRSZXNwb25zZSYmIHJlc3BvbnNlKSB7CiAgICAgICAgIGlmIChyZXNwb25zZS5pc0Vycm9yKSB7
CkBAIC0yNjYxLDcgKzI3NTUsNyBAQCB2b2lkIFNlc3Npb246OmRpc21pc3NBbGVydChGdW5jdGlv
bjx2b2lkIChDb21tYW5kUmVzdWx0JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVycyA9IEpT
T046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgYXV0byBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0
OjpjcmVhdGUoKTsKICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoImJyb3dzaW5nQ29udGV4dEhh
bmRsZSJfcywgbV90b3BsZXZlbEJyb3dzaW5nQ29udGV4dC52YWx1ZSgpKTsKICAgICBtX2hvc3Qt
PnNlbmRDb21tYW5kVG9CYWNrZW5kKCJkaXNtaXNzQ3VycmVudEphdmFTY3JpcHREaWFsb2ciX3Ms
IFdURk1vdmUocGFyYW1ldGVycyksIFtwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNv
bXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKFNlc3Npb25Ib3N0
OjpDb21tYW5kUmVzcG9uc2UmJiByZXNwb25zZSkgewogICAgICAgICBpZiAocmVzcG9uc2UuaXNF
cnJvcikgewpAQCAtMjY3OSw3ICsyNzczLDcgQEAgdm9pZCBTZXNzaW9uOjphY2NlcHRBbGVydChG
dW5jdGlvbjx2b2lkIChDb21tYW5kUmVzdWx0JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVy
cyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgYXV0byBwYXJhbWV0ZXJzID0gSlNPTjo6
T2JqZWN0OjpjcmVhdGUoKTsKICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoImJyb3dzaW5nQ29u
dGV4dEhhbmRsZSJfcywgbV90b3BsZXZlbEJyb3dzaW5nQ29udGV4dC52YWx1ZSgpKTsKICAgICBt
X2hvc3QtPnNlbmRDb21tYW5kVG9CYWNrZW5kKCJhY2NlcHRDdXJyZW50SmF2YVNjcmlwdERpYWxv
ZyJfcywgV1RGTW92ZShwYXJhbWV0ZXJzKSwgW3Byb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlz
KSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oU2Vzc2lv
bkhvc3Q6OkNvbW1hbmRSZXNwb25zZSYmIHJlc3BvbnNlKSB7CiAgICAgICAgIGlmIChyZXNwb25z
ZS5pc0Vycm9yKSB7CkBAIC0yNjk3LDE4ICsyNzkxLDIwIEBAIHZvaWQgU2Vzc2lvbjo6Z2V0QWxl
cnRUZXh0KEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSZXN1bHQmJik+JiYgY29tcGxldGlvbkhhbmRs
ZXIpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBw
YXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBhdXRvIHBhcmFtZXRlcnMg
PSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiYnJv
d3NpbmdDb250ZXh0SGFuZGxlIl9zLCBtX3RvcGxldmVsQnJvd3NpbmdDb250ZXh0LnZhbHVlKCkp
OwogICAgIG1faG9zdC0+c2VuZENvbW1hbmRUb0JhY2tlbmQoIm1lc3NhZ2VPZkN1cnJlbnRKYXZh
U2NyaXB0RGlhbG9nIl9zLCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBbcHJvdGVjdGVkVGhpcyA9IG1h
a2VSZWYoKnRoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpXShTZXNzaW9uSG9zdDo6Q29tbWFuZFJlc3BvbnNlJiYgcmVzcG9uc2UpIHsKICAgICAgICAg
aWYgKHJlc3BvbnNlLmlzRXJyb3IgfHwgIXJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0KSB7CiAgICAg
ICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKFdURk1vdmUocmVz
cG9uc2UucmVzcG9uc2VPYmplY3QpKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
LSAgICAgICAgU3RyaW5nIHZhbHVlU3RyaW5nOwotICAgICAgICBpZiAoIXJlc3BvbnNlLnJlc3Bv
bnNlT2JqZWN0LT5nZXRTdHJpbmcoIm1lc3NhZ2UiX3MsIHZhbHVlU3RyaW5nKSkgeworCisgICAg
ICAgIGF1dG8gdmFsdWVTdHJpbmcgPSByZXNwb25zZS5yZXNwb25zZU9iamVjdC0+Z2V0U3RyaW5n
KCJtZXNzYWdlIl9zKTsKKyAgICAgICAgaWYgKCF2YWx1ZVN0cmluZykgewogICAgICAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJv
ckNvZGU6OlVua25vd25FcnJvcikpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CisK
ICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6c3VjY2VzcyhKU09OOjpW
YWx1ZTo6Y3JlYXRlKHZhbHVlU3RyaW5nKSkpOwogICAgIH0pOwogfQpAQCAtMjcyMCw3ICsyODE2
LDcgQEAgdm9pZCBTZXNzaW9uOjpzZW5kQWxlcnRUZXh0KGNvbnN0IFN0cmluZyYgdGV4dCwgRnVu
Y3Rpb248dm9pZCAoQ29tbWFuZFJlc3VsdCYmKT4KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAot
ICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0
ZSgpOworICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAg
cGFyYW1ldGVycy0+c2V0U3RyaW5nKCJicm93c2luZ0NvbnRleHRIYW5kbGUiX3MsIG1fdG9wbGV2
ZWxCcm93c2luZ0NvbnRleHQudmFsdWUoKSk7CiAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJ1
c2VySW5wdXQiX3MsIHRleHQpOwogICAgIG1faG9zdC0+c2VuZENvbW1hbmRUb0JhY2tlbmQoInNl
dFVzZXJJbnB1dEZvckN1cnJlbnRKYXZhU2NyaXB0UHJvbXB0Il9zLCBXVEZNb3ZlKHBhcmFtZXRl
cnMpLCBbcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXShTZXNzaW9uSG9zdDo6Q29tbWFuZFJlc3BvbnNl
JiYgcmVzcG9uc2UpIHsKQEAgLTI3NDQsNyArMjg0MCw3IEBAIHZvaWQgU2Vzc2lvbjo6dGFrZVNj
cmVlbnNob3QoT3B0aW9uYWw8U3RyaW5nPiBlbGVtZW50SUQsIE9wdGlvbmFsPGJvb2w+IHNjcm9s
bEluCiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKHJlc3VsdCkpOwogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+
IHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBhdXRvIHBhcmFt
ZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICBwYXJhbWV0ZXJzLT5zZXRT
dHJpbmcoImhhbmRsZSJfcywgbV90b3BsZXZlbEJyb3dzaW5nQ29udGV4dC52YWx1ZSgpKTsKICAg
ICAgICAgaWYgKG1fY3VycmVudEJyb3dzaW5nQ29udGV4dCkKICAgICAgICAgICAgIHBhcmFtZXRl
cnMtPnNldFN0cmluZygiZnJhbWVIYW5kbGUiX3MsIG1fY3VycmVudEJyb3dzaW5nQ29udGV4dC52
YWx1ZSgpKTsKQEAgLTI3NTgsMTEgKzI4NTQsMTMgQEAgdm9pZCBTZXNzaW9uOjp0YWtlU2NyZWVu
c2hvdChPcHRpb25hbDxTdHJpbmc+IGVsZW1lbnRJRCwgT3B0aW9uYWw8Ym9vbD4gc2Nyb2xsSW4K
ICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKFdU
Rk1vdmUocmVzcG9uc2UucmVzcG9uc2VPYmplY3QpKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICAgICAgfQotICAgICAgICAgICAgU3RyaW5nIGRhdGE7Ci0gICAgICAgICAgICBp
ZiAoIXJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRTdHJpbmcoImRhdGEiX3MsIGRhdGEpKSB7
CisKKyAgICAgICAgICAgIGF1dG8gZGF0YSA9IHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRT
dHJpbmcoImRhdGEiX3MpOworICAgICAgICAgICAgaWYgKCFkYXRhKSB7CiAgICAgICAgICAgICAg
ICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpF
cnJvckNvZGU6OlVua25vd25FcnJvcikpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgICAgIH0KKwogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6
c3VjY2VzcyhKU09OOjpWYWx1ZTo6Y3JlYXRlKGRhdGEpKSk7CiAgICAgICAgIH0pOwogICAgIH0p
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkRyaXZlci9TZXNzaW9uLmggYi9Tb3VyY2UvV2ViRHJp
dmVyL1Nlc3Npb24uaAppbmRleCA4NDQ5YWE4OTg4Yjc3OTM3NGY4ODJmZWQ3ZDJmY2RjZDM0NDcz
NGUyLi5hZDA1NjNiYjkxOWYxZTNlODc5ZWU3MWVmMjM5YjhhN2FmNWQ0NzE0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViRHJpdmVyL1Nlc3Npb24uaAorKysgYi9Tb3VyY2UvV2ViRHJpdmVyL1Nlc3Np
b24uaApAQCAtMTQzLDEwICsxNDMsMTAgQEAgcHJpdmF0ZToKICAgICB2b2lkIHJlcG9ydFVuZXhw
ZWN0ZWRBbGVydE9wZW4oRnVuY3Rpb248dm9pZCAoQ29tbWFuZFJlc3VsdCYmKT4mJik7CiAKICAg
ICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBjcmVhdGVFbGVtZW50KFJlZlB0cjxKU09OOjpWYWx1ZT4m
Jik7Ci0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gY3JlYXRlRWxlbWVudChjb25zdCBTdHJpbmcm
IGVsZW1lbnRJRCk7CisgICAgUmVmPEpTT046Ok9iamVjdD4gY3JlYXRlRWxlbWVudChjb25zdCBT
dHJpbmcmIGVsZW1lbnRJRCk7CiAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gZXh0cmFjdEVsZW1l
bnQoSlNPTjo6VmFsdWUmKTsKICAgICBTdHJpbmcgZXh0cmFjdEVsZW1lbnRJRChKU09OOjpWYWx1
ZSYpOwotICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gaGFuZGxlU2NyaXB0UmVzdWx0KFJlZlB0cjxK
U09OOjpWYWx1ZT4mJik7CisgICAgUmVmPEpTT046OlZhbHVlPiBoYW5kbGVTY3JpcHRSZXN1bHQo
UmVmPEpTT046OlZhbHVlPiYmKTsKICAgICB2b2lkIGVsZW1lbnRJc0VkaXRhYmxlKGNvbnN0IFN0
cmluZyYgZWxlbWVudElELCBGdW5jdGlvbjx2b2lkIChDb21tYW5kUmVzdWx0JiYpPiYmKTsKIAog
ICAgIHN0cnVjdCBQb2ludCB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViRHJpdmVyL1Nlc3Npb25I
b3N0LmNwcCBiL1NvdXJjZS9XZWJEcml2ZXIvU2Vzc2lvbkhvc3QuY3BwCmluZGV4IGQxNjliOTVj
NGI2Y2VlNDI4OWQ4Yzg4OWU1NTNkZjc2Mzk1NWFhYmMuLjQ3MmViZGZhZjRhNjJiNmIyMDBiNGQx
ZWM3YjIxYmU1OTExODVlMDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJEcml2ZXIvU2Vzc2lvbkhv
c3QuY3BwCisrKyBiL1NvdXJjZS9XZWJEcml2ZXIvU2Vzc2lvbkhvc3QuY3BwCkBAIC02MiwzMSAr
NjIsMjcgQEAgbG9uZyBTZXNzaW9uSG9zdDo6c2VuZENvbW1hbmRUb0JhY2tlbmQoY29uc3QgU3Ry
aW5nJiBjb21tYW5kLCBSZWZQdHI8SlNPTjo6T2JqZWMKIAogdm9pZCBTZXNzaW9uSG9zdDo6ZGlz
cGF0Y2hNZXNzYWdlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKIHsKLSAgICBSZWZQdHI8SlNPTjo6
VmFsdWU+IG1lc3NhZ2VWYWx1ZTsKLSAgICBpZiAoIUpTT046OlZhbHVlOjpwYXJzZUpTT04obWVz
c2FnZSwgbWVzc2FnZVZhbHVlKSkKKyAgICBhdXRvIG1lc3NhZ2VWYWx1ZSA9IEpTT046OlZhbHVl
OjpwYXJzZUpTT04obWVzc2FnZSk7CisgICAgaWYgKCFtZXNzYWdlVmFsdWUpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG1lc3NhZ2VPYmplY3Q7Ci0gICAgaWYg
KCFtZXNzYWdlVmFsdWUtPmFzT2JqZWN0KG1lc3NhZ2VPYmplY3QpKQorICAgIGF1dG8gbWVzc2Fn
ZU9iamVjdCA9IG1lc3NhZ2VWYWx1ZS0+YXNPYmplY3QoKTsKKyAgICBpZiAoIW1lc3NhZ2VPYmpl
Y3QpCiAgICAgICAgIHJldHVybjsKIAotICAgIGxvbmcgc2VxdWVuY2VJRDsKLSAgICBpZiAoIW1l
c3NhZ2VPYmplY3QtPmdldEludGVnZXIoImlkIl9zLCBzZXF1ZW5jZUlEKSkKKyAgICBhdXRvIHNl
cXVlbmNlSUQgPSBtZXNzYWdlT2JqZWN0LT5nZXRJbnRlZ2VyKCJpZCJfcyk7CisgICAgaWYgKCFz
ZXF1ZW5jZUlEKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIHJlc3BvbnNlSGFuZGxlciA9
IG1fY29tbWFuZFJlcXVlc3RzLnRha2Uoc2VxdWVuY2VJRCk7CisgICAgYXV0byByZXNwb25zZUhh
bmRsZXIgPSBtX2NvbW1hbmRSZXF1ZXN0cy50YWtlKCpzZXF1ZW5jZUlEKTsKICAgICBBU1NFUlQo
cmVzcG9uc2VIYW5kbGVyKTsKIAogICAgIENvbW1hbmRSZXNwb25zZSByZXNwb25zZTsKLSAgICBS
ZWZQdHI8SlNPTjo6T2JqZWN0PiBlcnJvck9iamVjdDsKLSAgICBpZiAobWVzc2FnZU9iamVjdC0+
Z2V0T2JqZWN0KCJlcnJvciJfcywgZXJyb3JPYmplY3QpKSB7CisgICAgaWYgKGF1dG8gZXJyb3JP
YmplY3QgPSBtZXNzYWdlT2JqZWN0LT5nZXRPYmplY3QoImVycm9yIl9zKSkgewogICAgICAgICBy
ZXNwb25zZS5yZXNwb25zZU9iamVjdCA9IFdURk1vdmUoZXJyb3JPYmplY3QpOwogICAgICAgICBy
ZXNwb25zZS5pc0Vycm9yID0gdHJ1ZTsKLSAgICB9IGVsc2UgewotICAgICAgICBSZWZQdHI8SlNP
Tjo6T2JqZWN0PiByZXN1bHRPYmplY3Q7Ci0gICAgICAgIGlmIChtZXNzYWdlT2JqZWN0LT5nZXRP
YmplY3QoInJlc3VsdCJfcywgcmVzdWx0T2JqZWN0KSAmJiByZXN1bHRPYmplY3QtPnNpemUoKSkK
LSAgICAgICAgICAgIHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0ID0gV1RGTW92ZShyZXN1bHRPYmpl
Y3QpOwotICAgIH0KKyAgICB9IGVsc2UgaWYgKGF1dG8gcmVzdWx0T2JqZWN0ID0gbWVzc2FnZU9i
amVjdC0+Z2V0T2JqZWN0KCJyZXN1bHQiX3MpKQorICAgICAgICByZXNwb25zZS5yZXNwb25zZU9i
amVjdCA9IFdURk1vdmUocmVzdWx0T2JqZWN0KTsKIAogICAgIHJlc3BvbnNlSGFuZGxlcihXVEZN
b3ZlKHJlc3BvbnNlKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViRHJpdmVyL1dlYkRyaXZl
clNlcnZpY2UuY3BwIGIvU291cmNlL1dlYkRyaXZlci9XZWJEcml2ZXJTZXJ2aWNlLmNwcAppbmRl
eCA5YmI5NzZkOWYwYzVlM2I0ODliMjA5ZjNkYjg1MGRjMzIxYjYwZjRlLi4yNDZmNzcyYWQ0YTQ4
MGYzNmEyZDE0NDE3NTQzMjA1NDVjMmRmNGYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViRHJpdmVy
L1dlYkRyaXZlclNlcnZpY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJEcml2ZXIvV2ViRHJpdmVyU2Vy
dmljZS5jcHAKQEAgLTIzOSwxMyArMjM5LDE0IEBAIHZvaWQgV2ViRHJpdmVyU2VydmljZTo6aGFu
ZGxlUmVxdWVzdChIVFRQUmVxdWVzdEhhbmRsZXI6OlJlcXVlc3QmJiByZXF1ZXN0LCBGdW5jCiAK
ICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzT2JqZWN0OwogICAgIGlmIChtZXRo
b2QudmFsdWUoKSA9PSBIVFRQTWV0aG9kOjpQb3N0KSB7Ci0gICAgICAgIFJlZlB0cjxKU09OOjpW
YWx1ZT4gbWVzc2FnZVZhbHVlOwotICAgICAgICBpZiAoIUpTT046OlZhbHVlOjpwYXJzZUpTT04o
U3RyaW5nOjpmcm9tVVRGOChyZXF1ZXN0LmRhdGEsIHJlcXVlc3QuZGF0YUxlbmd0aCksIG1lc3Nh
Z2VWYWx1ZSkpIHsKKyAgICAgICAgYXV0byBtZXNzYWdlVmFsdWUgPSBKU09OOjpWYWx1ZTo6cGFy
c2VKU09OKFN0cmluZzo6ZnJvbVVURjgocmVxdWVzdC5kYXRhLCByZXF1ZXN0LmRhdGFMZW5ndGgp
KTsKKyAgICAgICAgaWYgKCFtZXNzYWdlVmFsdWUpIHsKICAgICAgICAgICAgIHNlbmRSZXNwb25z
ZShXVEZNb3ZlKHJlcGx5SGFuZGxlciksIENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3Vs
dDo6RXJyb3JDb2RlOjpJbnZhbGlkQXJndW1lbnQpKTsKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQogCi0gICAgICAgIGlmICghbWVzc2FnZVZhbHVlLT5hc09iamVjdChwYXJhbWV0ZXJz
T2JqZWN0KSkgeworICAgICAgICBwYXJhbWV0ZXJzT2JqZWN0ID0gbWVzc2FnZVZhbHVlLT5hc09i
amVjdCgpOworICAgICAgICBpZiAoIXBhcmFtZXRlcnNPYmplY3QpIHsKICAgICAgICAgICAgIHNl
bmRSZXNwb25zZShXVEZNb3ZlKHJlcGx5SGFuZGxlciksIENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29t
bWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpJbnZhbGlkQXJndW1lbnQpKTsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQpAQCAtMjc0LDcgKzI3NSw3IEBAIHZvaWQgV2ViRHJpdmVyU2Vydmlj
ZTo6c2VuZFJlc3BvbnNlKEZ1bmN0aW9uPHZvaWQgKEhUVFBSZXF1ZXN0SGFuZGxlcjo6UmVzcG9u
c2UmCiAgICAgICAgIGVycm9yT2JqZWN0LT5zZXRTdHJpbmcoInN0YWNrdHJhY2UiX3MsIGVtcHR5
U3RyaW5nKCkpOwogICAgICAgICAvLyBJZiB0aGUgZXJyb3IgZGF0YSBkaWN0aW9uYXJ5IGNvbnRh
aW5zIGFueSBlbnRyaWVzLCBzZXQgdGhlICJkYXRhIiBmaWVsZCBvbiBib2R5IHRvIGEgbmV3IEpT
T04gT2JqZWN0IHBvcHVsYXRlZCB3aXRoIHRoZSBkaWN0aW9uYXJ5LgogICAgICAgICBpZiAoYXV0
byYgYWRkaXRpb25hbERhdGEgPSByZXN1bHQuYWRkaXRpb25hbEVycm9yRGF0YSgpKQotICAgICAg
ICAgICAgZXJyb3JPYmplY3QtPnNldE9iamVjdCgiZGF0YSJfcywgUmVmUHRyPEpTT046Ok9iamVj
dD4geyBhZGRpdGlvbmFsRGF0YSB9KTsKKyAgICAgICAgICAgIGVycm9yT2JqZWN0LT5zZXRPYmpl
Y3QoImRhdGEiX3MsICphZGRpdGlvbmFsRGF0YSk7CiAgICAgICAgIC8vIFNlbmQgYSByZXNwb25z
ZSB3aXRoIHN0YXR1cyBhbmQgYm9keSBhcyBhcmd1bWVudHMuCiAgICAgICAgIHJlc3VsdFZhbHVl
ID0gV1RGTW92ZShlcnJvck9iamVjdCk7CiAgICAgfSBlbHNlIGlmIChhdXRvIHZhbHVlID0gcmVz
dWx0LnJlc3VsdCgpKQpAQCAtMjg0LDI0ICsyODUsMjQgQEAgdm9pZCBXZWJEcml2ZXJTZXJ2aWNl
OjpzZW5kUmVzcG9uc2UoRnVuY3Rpb248dm9pZCAoSFRUUFJlcXVlc3RIYW5kbGVyOjpSZXNwb25z
ZSYKIAogICAgIC8vIFdoZW4gcmVxdWlyZWQgdG8gc2VuZCBhIHJlc3BvbnNlLgogICAgIC8vIGh0
dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJkcml2ZXIvd2ViZHJpdmVyLXNwZWMuaHRtbCNkZm4tc2Vu
ZC1hLXJlc3BvbnNlCi0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcmVzcG9uc2VPYmplY3QgPSBK
U09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIHJlc3BvbnNlT2JqZWN0LT5zZXRWYWx1ZSgidmFs
dWUiX3MsIFdURk1vdmUocmVzdWx0VmFsdWUpKTsKKyAgICBhdXRvIHJlc3BvbnNlT2JqZWN0ID0g
SlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICByZXNwb25zZU9iamVjdC0+c2V0VmFsdWUoInZh
bHVlIl9zLCByZXN1bHRWYWx1ZS5yZWxlYXNlTm9uTnVsbCgpKTsKICAgICByZXBseUhhbmRsZXIo
eyByZXN1bHQuaHR0cFN0YXR1c0NvZGUoKSwgcmVzcG9uc2VPYmplY3QtPnRvSlNPTlN0cmluZygp
LnV0ZjgoKSwgImFwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9dXRmLTgiX3MgfSk7CiB9CiAKIHN0
YXRpYyBPcHRpb25hbDxkb3VibGU+IHZhbHVlQXNOdW1iZXJJblJhbmdlKGNvbnN0IEpTT046OlZh
bHVlJiB2YWx1ZSwgZG91YmxlIG1pbkFsbG93ZWQgPSAwLCBkb3VibGUgbWF4QWxsb3dlZCA9IHN0
ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpCiB7Ci0gICAgZG91YmxlIG51bWJlcjsKLSAg
ICBpZiAoIXZhbHVlLmFzRG91YmxlKG51bWJlcikpCisgICAgYXV0byBudW1iZXIgPSB2YWx1ZS5h
c0RvdWJsZSgpOworICAgIGlmICghbnVtYmVyKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OwogCi0gICAgaWYgKHN0ZDo6aXNuYW4obnVtYmVyKSB8fCBzdGQ6OmlzaW5mKG51bWJlcikpCisg
ICAgaWYgKHN0ZDo6aXNuYW4oKm51bWJlcikgfHwgc3RkOjppc2luZigqbnVtYmVyKSkKICAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIGlmIChudW1iZXIgPCBtaW5BbGxvd2VkIHx8
IG51bWJlciA+IG1heEFsbG93ZWQpCisgICAgaWYgKCpudW1iZXIgPCBtaW5BbGxvd2VkIHx8ICpu
dW1iZXIgPiBtYXhBbGxvd2VkKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAg
cmV0dXJuIG51bWJlcjsKKyAgICByZXR1cm4gKm51bWJlcjsKIH0KIAogc3RhdGljIE9wdGlvbmFs
PHVpbnQ2NF90PiB1bnNpZ25lZFZhbHVlKEpTT046OlZhbHVlJiB2YWx1ZSkKQEAgLTMzOCw3ICsz
MzksNyBAQCBzdGF0aWMgT3B0aW9uYWw8VGltZW91dHM+IGRlc2VyaWFsaXplVGltZW91dHMoSlNP
Tjo6T2JqZWN0JiB0aW1lb3V0c09iamVjdCwgSWdubwogICAgICAgICB9CiAKICAgICAgICAgLy8g
SWYgdmFsdWUgaXMgbm90IGFuIGludGVnZXIsIG9yIGl0IGlzIGxlc3MgdGhhbiAwIG9yIGdyZWF0
ZXIgdGhhbiB0aGUgbWF4aW11bSBzYWZlIGludGVnZXIsIHJldHVybiBlcnJvciB3aXRoIGVycm9y
IGNvZGUgaW52YWxpZCBhcmd1bWVudC4KLSAgICAgICAgYXV0byB0aW1lb3V0TVMgPSB1bnNpZ25l
ZFZhbHVlKCppdC0+dmFsdWUpOworICAgICAgICBhdXRvIHRpbWVvdXRNUyA9IHVuc2lnbmVkVmFs
dWUoaXQtPnZhbHVlKTsKICAgICAgICAgaWYgKCF0aW1lb3V0TVMpCiAgICAgICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwogCkBAIC0zNTksNjEgKzM2MCw2MSBAQCBzdGF0aWMgT3B0aW9uYWw8
UHJveHk+IGRlc2VyaWFsaXplUHJveHkoSlNPTjo6T2JqZWN0JiBwcm94eU9iamVjdCkKICAgICAv
LyDCpzcuMSBQcm94eS4KICAgICAvLyBodHRwczovL3czYy5naXRodWIuaW8vd2ViZHJpdmVyLyNw
cm94eQogICAgIFByb3h5IHByb3h5OwotICAgIGlmICghcHJveHlPYmplY3QuZ2V0U3RyaW5nKCJw
cm94eVR5cGUiX3MsIHByb3h5LnR5cGUpKQorCisgICAgcHJveHkudHlwZSA9IHByb3h5T2JqZWN0
LmdldFN0cmluZygicHJveHlUeXBlIl9zKTsKKyAgICBpZiAoIXByb3h5LnR5cGUpCiAgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICBpZiAocHJveHkudHlwZSA9PSAiZGlyZWN0IiB8
fCBwcm94eS50eXBlID09ICJhdXRvZGV0ZWN0IiB8fCBwcm94eS50eXBlID09ICJzeXN0ZW0iKQog
ICAgICAgICByZXR1cm4gcHJveHk7CiAKICAgICBpZiAocHJveHkudHlwZSA9PSAicGFjIikgewot
ICAgICAgICBTdHJpbmcgYXV0b2NvbmZpZ1VSTDsKLSAgICAgICAgaWYgKCFwcm94eU9iamVjdC5n
ZXRTdHJpbmcoInByb3h5QXV0b2NvbmZpZ1VybCJfcywgYXV0b2NvbmZpZ1VSTCkpCisgICAgICAg
IHByb3h5LmF1dG9jb25maWdVUkwgPSBwcm94eU9iamVjdC5nZXRTdHJpbmcoInByb3h5QXV0b2Nv
bmZpZ1VybCJfcyk7CisgICAgICAgIGlmICghcHJveHkuYXV0b2NvbmZpZ1VSTCkKICAgICAgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICAgICAgcHJveHkuYXV0b2NvbmZpZ1VSTCA9
IGF1dG9jb25maWdVUkw7CiAgICAgICAgIHJldHVybiBwcm94eTsKICAgICB9CiAKICAgICBpZiAo
cHJveHkudHlwZSA9PSAibWFudWFsIikgewotICAgICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHZh
bHVlOwotICAgICAgICBpZiAocHJveHlPYmplY3QuZ2V0VmFsdWUoImZ0cFByb3h5Il9zLCB2YWx1
ZSkpIHsKLSAgICAgICAgICAgIFN0cmluZyBmdHBQcm94eTsKLSAgICAgICAgICAgIGlmICghdmFs
dWUtPmFzU3RyaW5nKGZ0cFByb3h5KSkKKyAgICAgICAgaWYgKGF1dG8gdmFsdWUgPSBwcm94eU9i
amVjdC5nZXRWYWx1ZSgiZnRwUHJveHkiX3MpKSB7CisgICAgICAgICAgICBhdXRvIGZ0cFByb3h5
ID0gdmFsdWUtPmFzU3RyaW5nKCk7CisgICAgICAgICAgICBpZiAoIWZ0cFByb3h5KQogICAgICAg
ICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICAgICAgICAgIHByb3h5LmZ0cFVS
TCA9IFVSTCh7IH0sIG1ha2VTdHJpbmcoImZ0cDovLyIsIGZ0cFByb3h5KSk7CiAgICAgICAgICAg
ICBpZiAoIXByb3h5LmZ0cFVSTC0+aXNWYWxpZCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHByb3h5T2JqZWN0LmdldFZhbHVl
KCJodHRwUHJveHkiX3MsIHZhbHVlKSkgewotICAgICAgICAgICAgU3RyaW5nIGh0dHBQcm94eTsK
LSAgICAgICAgICAgIGlmICghdmFsdWUtPmFzU3RyaW5nKGh0dHBQcm94eSkpCisgICAgICAgIGlm
IChhdXRvIHZhbHVlID0gcHJveHlPYmplY3QuZ2V0VmFsdWUoImh0dHBQcm94eSJfcykpIHsKKyAg
ICAgICAgICAgIGF1dG8gaHR0cFByb3h5ID0gdmFsdWUtPmFzU3RyaW5nKCk7CisgICAgICAgICAg
ICBpZiAoIWh0dHBQcm94eSkKICAgICAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owog
CiAgICAgICAgICAgICBwcm94eS5odHRwVVJMID0gVVJMKHsgfSwgbWFrZVN0cmluZygiaHR0cDov
LyIsIGh0dHBQcm94eSkpOwogICAgICAgICAgICAgaWYgKCFwcm94eS5odHRwVVJMLT5pc1ZhbGlk
KCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAgICAgfQotICAg
ICAgICBpZiAocHJveHlPYmplY3QuZ2V0VmFsdWUoInNzbFByb3h5Il9zLCB2YWx1ZSkpIHsKLSAg
ICAgICAgICAgIFN0cmluZyBzc2xQcm94eTsKLSAgICAgICAgICAgIGlmICghdmFsdWUtPmFzU3Ry
aW5nKHNzbFByb3h5KSkKKyAgICAgICAgaWYgKGF1dG8gdmFsdWUgPSBwcm94eU9iamVjdC5nZXRW
YWx1ZSgic3NsUHJveHkiX3MpKSB7CisgICAgICAgICAgICBhdXRvIHNzbFByb3h5ID0gdmFsdWUt
PmFzU3RyaW5nKCk7CisgICAgICAgICAgICBpZiAoIXNzbFByb3h5KQogICAgICAgICAgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICAgICAgICAgIHByb3h5Lmh0dHBzVVJMID0gVVJM
KHsgfSwgbWFrZVN0cmluZygiaHR0cHM6Ly8iLCBzc2xQcm94eSkpOwogICAgICAgICAgICAgaWYg
KCFwcm94eS5odHRwc1VSTC0+aXNWYWxpZCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHByb3h5T2JqZWN0LmdldFZhbHVlKCJz
b2Nrc1Byb3h5IiwgdmFsdWUpKSB7Ci0gICAgICAgICAgICBTdHJpbmcgc29ja3NQcm94eTsKLSAg
ICAgICAgICAgIGlmICghdmFsdWUtPmFzU3RyaW5nKHNvY2tzUHJveHkpKQorICAgICAgICBpZiAo
YXV0byB2YWx1ZSA9IHByb3h5T2JqZWN0LmdldFZhbHVlKCJzb2Nrc1Byb3h5IikpIHsKKyAgICAg
ICAgICAgIGF1dG8gc29ja3NQcm94eSA9IHZhbHVlLT5hc1N0cmluZygpOworICAgICAgICAgICAg
aWYgKCFzb2Nrc1Byb3h5KQogICAgICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAK
ICAgICAgICAgICAgIHByb3h5LnNvY2tzVVJMID0gVVJMKHsgfSwgbWFrZVN0cmluZygic29ja3M6
Ly8iLCBzb2Nrc1Byb3h5KSk7CiAgICAgICAgICAgICBpZiAoIXByb3h5LnNvY2tzVVJMLT5pc1Zh
bGlkKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgICAgICAg
ICAgUmVmUHRyPEpTT046OlZhbHVlPiBzb2Nrc1ZlcnNpb25WYWx1ZTsKLSAgICAgICAgICAgIGlm
ICghcHJveHlPYmplY3QuZ2V0VmFsdWUoInNvY2tzVmVyc2lvbiIsIHNvY2tzVmVyc2lvblZhbHVl
KSkKKyAgICAgICAgICAgIGF1dG8gc29ja3NWZXJzaW9uVmFsdWUgPSBwcm94eU9iamVjdC5nZXRW
YWx1ZSgic29ja3NWZXJzaW9uIik7CisgICAgICAgICAgICBpZiAoIXNvY2tzVmVyc2lvblZhbHVl
KQogICAgICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICAgICAgICAgIGF1
dG8gc29ja3NWZXJzaW9uID0gdW5zaWduZWRWYWx1ZSgqc29ja3NWZXJzaW9uVmFsdWUpOwpAQCAt
NDIxLDE4ICs0MjIsMTcgQEAgc3RhdGljIE9wdGlvbmFsPFByb3h5PiBkZXNlcmlhbGl6ZVByb3h5
KEpTT046Ok9iamVjdCYgcHJveHlPYmplY3QpCiAgICAgICAgICAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKICAgICAgICAgICAgIHByb3h5LnNvY2tzVmVyc2lvbiA9IHNvY2tzVmVyc2lvbi52
YWx1ZSgpOwogICAgICAgICB9Ci0gICAgICAgIGlmIChwcm94eU9iamVjdC5nZXRWYWx1ZSgibm9Q
cm94eSJfcywgdmFsdWUpKSB7Ci0gICAgICAgICAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IG5vUHJv
eHk7Ci0gICAgICAgICAgICBpZiAoIXZhbHVlLT5hc0FycmF5KG5vUHJveHkpKQorICAgICAgICBp
ZiAoYXV0byB2YWx1ZSA9IHByb3h5T2JqZWN0LmdldFZhbHVlKCJub1Byb3h5Il9zKSkgeworICAg
ICAgICAgICAgYXV0byBub1Byb3h5ID0gdmFsdWUtPmFzQXJyYXkoKTsKKyAgICAgICAgICAgIGlm
ICghbm9Qcm94eSkKICAgICAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAg
ICAgICAgICBhdXRvIG5vUHJveHlMZW5ndGggPSBub1Byb3h5LT5sZW5ndGgoKTsKICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBub1Byb3h5TGVuZ3RoOyArK2kpIHsKLSAgICAg
ICAgICAgICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IGFkZHJlc3NWYWx1ZSA9IG5vUHJveHktPmdl
dChpKTsKLSAgICAgICAgICAgICAgICBTdHJpbmcgYWRkcmVzczsKLSAgICAgICAgICAgICAgICBp
ZiAoIWFkZHJlc3NWYWx1ZS0+YXNTdHJpbmcoYWRkcmVzcykpCisgICAgICAgICAgICAgICAgYXV0
byBhZGRyZXNzID0gbm9Qcm94eS0+Z2V0KGkpLT5hc1N0cmluZygpOworICAgICAgICAgICAgICAg
IGlmICghYWRkcmVzcykKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
LSAgICAgICAgICAgICAgICBwcm94eS5pZ25vcmVBZGRyZXNzTGlzdC5hcHBlbmQoV1RGTW92ZShh
ZGRyZXNzKSk7CisgICAgICAgICAgICAgICAgcHJveHkuaWdub3JlQWRkcmVzc0xpc3QuYXBwZW5k
KGFkZHJlc3MpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKQEAgLTQ3MSw0MyArNDcxLDUz
IEBAIHN0YXRpYyBPcHRpb25hbDxVbmhhbmRsZWRQcm9tcHRCZWhhdmlvcj4gZGVzZXJpYWxpemVV
bmhhbmRsZWRQcm9tcHRCZWhhdmlvcihjb25zCiB2b2lkIFdlYkRyaXZlclNlcnZpY2U6OnBhcnNl
Q2FwYWJpbGl0aWVzKGNvbnN0IEpTT046Ok9iamVjdCYgbWF0Y2hlZENhcGFiaWxpdGllcywgQ2Fw
YWJpbGl0aWVzJiBjYXBhYmlsaXRpZXMpIGNvbnN0CiB7CiAgICAgLy8gTWF0Y2hlZCBjYXBhYmls
aXRpZXMgaGF2ZSBhbHJlYWR5IGJlZW4gdmFsaWRhdGVkLgotICAgIGJvb2wgYWNjZXB0SW5zZWN1
cmVDZXJ0czsKLSAgICBpZiAobWF0Y2hlZENhcGFiaWxpdGllcy5nZXRCb29sZWFuKCJhY2NlcHRJ
bnNlY3VyZUNlcnRzIl9zLCBhY2NlcHRJbnNlY3VyZUNlcnRzKSkKLSAgICAgICAgY2FwYWJpbGl0
aWVzLmFjY2VwdEluc2VjdXJlQ2VydHMgPSBhY2NlcHRJbnNlY3VyZUNlcnRzOwotICAgIGJvb2wg
c2V0V2luZG93UmVjdDsKLSAgICBpZiAobWF0Y2hlZENhcGFiaWxpdGllcy5nZXRCb29sZWFuKCJz
ZXRXaW5kb3dSZWN0Il9zLCBzZXRXaW5kb3dSZWN0KSkKLSAgICAgICAgY2FwYWJpbGl0aWVzLnNl
dFdpbmRvd1JlY3QgPSBzZXRXaW5kb3dSZWN0OwotICAgIFN0cmluZyBicm93c2VyTmFtZTsKLSAg
ICBpZiAobWF0Y2hlZENhcGFiaWxpdGllcy5nZXRTdHJpbmcoImJyb3dzZXJOYW1lIl9zLCBicm93
c2VyTmFtZSkpCisgICAgYXV0byBhY2NlcHRJbnNlY3VyZUNlcnRzID0gbWF0Y2hlZENhcGFiaWxp
dGllcy5nZXRCb29sZWFuKCJhY2NlcHRJbnNlY3VyZUNlcnRzIl9zKTsKKyAgICBpZiAoYWNjZXB0
SW5zZWN1cmVDZXJ0cykKKyAgICAgICAgY2FwYWJpbGl0aWVzLmFjY2VwdEluc2VjdXJlQ2VydHMg
PSAqYWNjZXB0SW5zZWN1cmVDZXJ0czsKKworICAgIGF1dG8gc2V0V2luZG93UmVjdCA9IG1hdGNo
ZWRDYXBhYmlsaXRpZXMuZ2V0Qm9vbGVhbigic2V0V2luZG93UmVjdCJfcyk7CisgICAgaWYgKHNl
dFdpbmRvd1JlY3QpCisgICAgICAgIGNhcGFiaWxpdGllcy5zZXRXaW5kb3dSZWN0ID0gKnNldFdp
bmRvd1JlY3Q7CisKKyAgICBhdXRvIGJyb3dzZXJOYW1lID0gbWF0Y2hlZENhcGFiaWxpdGllcy5n
ZXRTdHJpbmcoImJyb3dzZXJOYW1lIl9zKTsKKyAgICBpZiAoISFicm93c2VyTmFtZSkKICAgICAg
ICAgY2FwYWJpbGl0aWVzLmJyb3dzZXJOYW1lID0gYnJvd3Nlck5hbWU7Ci0gICAgU3RyaW5nIGJy
b3dzZXJWZXJzaW9uOwotICAgIGlmIChtYXRjaGVkQ2FwYWJpbGl0aWVzLmdldFN0cmluZygiYnJv
d3NlclZlcnNpb24iX3MsIGJyb3dzZXJWZXJzaW9uKSkKKworICAgIGF1dG8gYnJvd3NlclZlcnNp
b24gPSBtYXRjaGVkQ2FwYWJpbGl0aWVzLmdldFN0cmluZygiYnJvd3NlclZlcnNpb24iX3MpOwor
ICAgIGlmICghIWJyb3dzZXJWZXJzaW9uKQogICAgICAgICBjYXBhYmlsaXRpZXMuYnJvd3NlclZl
cnNpb24gPSBicm93c2VyVmVyc2lvbjsKLSAgICBTdHJpbmcgcGxhdGZvcm1OYW1lOwotICAgIGlm
IChtYXRjaGVkQ2FwYWJpbGl0aWVzLmdldFN0cmluZygicGxhdGZvcm1OYW1lIl9zLCBwbGF0Zm9y
bU5hbWUpKQorCisgICAgYXV0byBwbGF0Zm9ybU5hbWUgPSBtYXRjaGVkQ2FwYWJpbGl0aWVzLmdl
dFN0cmluZygicGxhdGZvcm1OYW1lIl9zKTsKKyAgICBpZiAoISFwbGF0Zm9ybU5hbWUpCiAgICAg
ICAgIGNhcGFiaWxpdGllcy5wbGF0Zm9ybU5hbWUgPSBwbGF0Zm9ybU5hbWU7Ci0gICAgUmVmUHRy
PEpTT046Ok9iamVjdD4gcHJveHk7Ci0gICAgaWYgKG1hdGNoZWRDYXBhYmlsaXRpZXMuZ2V0T2Jq
ZWN0KCJwcm94eSJfcywgcHJveHkpKQorCisgICAgYXV0byBwcm94eSA9IG1hdGNoZWRDYXBhYmls
aXRpZXMuZ2V0T2JqZWN0KCJwcm94eSJfcyk7CisgICAgaWYgKHByb3h5KQogICAgICAgICBjYXBh
YmlsaXRpZXMucHJveHkgPSBkZXNlcmlhbGl6ZVByb3h5KCpwcm94eSk7Ci0gICAgYm9vbCBzdHJp
Y3RGaWxlSW50ZXJhY3RhYmlsaXR5OwotICAgIGlmIChtYXRjaGVkQ2FwYWJpbGl0aWVzLmdldEJv
b2xlYW4oInN0cmljdEZpbGVJbnRlcmFjdGFiaWxpdHkiX3MsIHN0cmljdEZpbGVJbnRlcmFjdGFi
aWxpdHkpKQotICAgICAgICBjYXBhYmlsaXRpZXMuc3RyaWN0RmlsZUludGVyYWN0YWJpbGl0eSA9
IHN0cmljdEZpbGVJbnRlcmFjdGFiaWxpdHk7Ci0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gdGlt
ZW91dHM7Ci0gICAgaWYgKG1hdGNoZWRDYXBhYmlsaXRpZXMuZ2V0T2JqZWN0KCJ0aW1lb3V0cyJf
cywgdGltZW91dHMpKQorCisgICAgYXV0byBzdHJpY3RGaWxlSW50ZXJhY3RhYmlsaXR5ID0gbWF0
Y2hlZENhcGFiaWxpdGllcy5nZXRCb29sZWFuKCJzdHJpY3RGaWxlSW50ZXJhY3RhYmlsaXR5Il9z
KTsKKyAgICBpZiAoc3RyaWN0RmlsZUludGVyYWN0YWJpbGl0eSkKKyAgICAgICAgY2FwYWJpbGl0
aWVzLnN0cmljdEZpbGVJbnRlcmFjdGFiaWxpdHkgPSAqc3RyaWN0RmlsZUludGVyYWN0YWJpbGl0
eTsKKworICAgIGF1dG8gdGltZW91dHMgPSBtYXRjaGVkQ2FwYWJpbGl0aWVzLmdldE9iamVjdCgi
dGltZW91dHMiX3MpOworICAgIGlmICh0aW1lb3V0cykKICAgICAgICAgY2FwYWJpbGl0aWVzLnRp
bWVvdXRzID0gZGVzZXJpYWxpemVUaW1lb3V0cygqdGltZW91dHMsIElnbm9yZVVua25vd25UaW1l
b3V0OjpObyk7Ci0gICAgU3RyaW5nIHBhZ2VMb2FkU3RyYXRlZ3k7Ci0gICAgaWYgKG1hdGNoZWRD
YXBhYmlsaXRpZXMuZ2V0U3RyaW5nKCJwYWdlTG9hZFN0cmF0ZWd5Il9zLCBwYWdlTG9hZFN0cmF0
ZWd5KSkKKworICAgIGF1dG8gcGFnZUxvYWRTdHJhdGVneSA9IG1hdGNoZWRDYXBhYmlsaXRpZXMu
Z2V0U3RyaW5nKCJwYWdlTG9hZFN0cmF0ZWd5Il9zKTsKKyAgICBpZiAoISFwYWdlTG9hZFN0cmF0
ZWd5KQogICAgICAgICBjYXBhYmlsaXRpZXMucGFnZUxvYWRTdHJhdGVneSA9IGRlc2VyaWFsaXpl
UGFnZUxvYWRTdHJhdGVneShwYWdlTG9hZFN0cmF0ZWd5KTsKLSAgICBTdHJpbmcgdW5oYW5kbGVk
UHJvbXB0QmVoYXZpb3I7Ci0gICAgaWYgKG1hdGNoZWRDYXBhYmlsaXRpZXMuZ2V0U3RyaW5nKCJ1
bmhhbmRsZWRQcm9tcHRCZWhhdmlvciJfcywgdW5oYW5kbGVkUHJvbXB0QmVoYXZpb3IpKQorCisg
ICAgYXV0byB1bmhhbmRsZWRQcm9tcHRCZWhhdmlvciA9IG1hdGNoZWRDYXBhYmlsaXRpZXMuZ2V0
U3RyaW5nKCJ1bmhhbmRsZWRQcm9tcHRCZWhhdmlvciJfcyk7CisgICAgaWYgKCEhdW5oYW5kbGVk
UHJvbXB0QmVoYXZpb3IpCiAgICAgICAgIGNhcGFiaWxpdGllcy51bmhhbmRsZWRQcm9tcHRCZWhh
dmlvciA9IGRlc2VyaWFsaXplVW5oYW5kbGVkUHJvbXB0QmVoYXZpb3IodW5oYW5kbGVkUHJvbXB0
QmVoYXZpb3IpOworCiAgICAgcGxhdGZvcm1QYXJzZUNhcGFiaWxpdGllcyhtYXRjaGVkQ2FwYWJp
bGl0aWVzLCBjYXBhYmlsaXRpZXMpOwogfQogCiBib29sIFdlYkRyaXZlclNlcnZpY2U6OmZpbmRT
ZXNzaW9uT3JDb21wbGV0ZVdpdGhFcnJvcihKU09OOjpPYmplY3QmIHBhcmFtZXRlcnMsIEZ1bmN0
aW9uPHZvaWQgKENvbW1hbmRSZXN1bHQmJik+JiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBT
dHJpbmcgc2Vzc2lvbklEOwotICAgIGlmICghcGFyYW1ldGVycy5nZXRTdHJpbmcoInNlc3Npb25J
ZCJfcywgc2Vzc2lvbklEKSkgeworICAgIGF1dG8gc2Vzc2lvbklEID0gcGFyYW1ldGVycy5nZXRT
dHJpbmcoInNlc3Npb25JZCJfcyk7CisgICAgaWYgKCFzZXNzaW9uSUQpIHsKICAgICAgICAgY29t
cGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNv
ZGU6OkludmFsaWRBcmd1bWVudCkpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQpAQCAt
NTMwLDUwICs1NDAsNTAgQEAgUmVmUHRyPEpTT046Ok9iamVjdD4gV2ViRHJpdmVyU2VydmljZTo6
dmFsaWRhdGVkQ2FwYWJpbGl0aWVzKGNvbnN0IEpTT046Ok9iamVjdCYKIHsKICAgICAvLyDCpzcu
MiBQcm9jZXNzaW5nIENhcGFiaWxpdGllcy4KICAgICAvLyBodHRwczovL3czYy5naXRodWIuaW8v
d2ViZHJpdmVyL3dlYmRyaXZlci1zcGVjLmh0bWwjZGZuLXZhbGlkYXRlLWNhcGFiaWxpdGllcwot
ICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7
CisgICAgYXV0byByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgIGF1dG8gZW5k
ID0gY2FwYWJpbGl0aWVzLmVuZCgpOwogICAgIGZvciAoYXV0byBpdCA9IGNhcGFiaWxpdGllcy5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgaWYgKGl0LT52YWx1ZS0+aXNOdWxs
KCkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgaWYgKGl0LT5rZXkgPT0gImFjY2Vw
dEluc2VjdXJlQ2VydHMiKSB7Ci0gICAgICAgICAgICBib29sIGFjY2VwdEluc2VjdXJlQ2VydHM7
Ci0gICAgICAgICAgICBpZiAoIWl0LT52YWx1ZS0+YXNCb29sZWFuKGFjY2VwdEluc2VjdXJlQ2Vy
dHMpKQorICAgICAgICAgICAgYXV0byBhY2NlcHRJbnNlY3VyZUNlcnRzID0gaXQtPnZhbHVlLT5h
c0Jvb2xlYW4oKTsKKyAgICAgICAgICAgIGlmICghYWNjZXB0SW5zZWN1cmVDZXJ0cykKICAgICAg
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0Qm9vbGVh
bihpdC0+a2V5LCBhY2NlcHRJbnNlY3VyZUNlcnRzKTsKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0
Qm9vbGVhbihpdC0+a2V5LCAqYWNjZXB0SW5zZWN1cmVDZXJ0cyk7CiAgICAgICAgIH0gZWxzZSBp
ZiAoaXQtPmtleSA9PSAiYnJvd3Nlck5hbWUiIHx8IGl0LT5rZXkgPT0gImJyb3dzZXJWZXJzaW9u
IiB8fCBpdC0+a2V5ID09ICJwbGF0Zm9ybU5hbWUiKSB7Ci0gICAgICAgICAgICBTdHJpbmcgc3Ry
aW5nVmFsdWU7Ci0gICAgICAgICAgICBpZiAoIWl0LT52YWx1ZS0+YXNTdHJpbmcoc3RyaW5nVmFs
dWUpKQorICAgICAgICAgICAgYXV0byBzdHJpbmdWYWx1ZSA9IGl0LT52YWx1ZS0+YXNTdHJpbmco
KTsKKyAgICAgICAgICAgIGlmICghc3RyaW5nVmFsdWUpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgICAgICAgICByZXN1bHQtPnNldFN0cmluZyhpdC0+a2V5LCBzdHJpbmdW
YWx1ZSk7CiAgICAgICAgIH0gZWxzZSBpZiAoaXQtPmtleSA9PSAicGFnZUxvYWRTdHJhdGVneSIp
IHsKLSAgICAgICAgICAgIFN0cmluZyBwYWdlTG9hZFN0cmF0ZWd5OwotICAgICAgICAgICAgaWYg
KCFpdC0+dmFsdWUtPmFzU3RyaW5nKHBhZ2VMb2FkU3RyYXRlZ3kpIHx8ICFkZXNlcmlhbGl6ZVBh
Z2VMb2FkU3RyYXRlZ3kocGFnZUxvYWRTdHJhdGVneSkpCisgICAgICAgICAgICBhdXRvIHBhZ2VM
b2FkU3RyYXRlZ3kgPSBpdC0+dmFsdWUtPmFzU3RyaW5nKCk7CisgICAgICAgICAgICBpZiAoIXBh
Z2VMb2FkU3RyYXRlZ3kgfHwgIWRlc2VyaWFsaXplUGFnZUxvYWRTdHJhdGVneShwYWdlTG9hZFN0
cmF0ZWd5KSkKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgICAgIHJl
c3VsdC0+c2V0U3RyaW5nKGl0LT5rZXksIHBhZ2VMb2FkU3RyYXRlZ3kpOwogICAgICAgICB9IGVs
c2UgaWYgKGl0LT5rZXkgPT0gInByb3h5IikgewotICAgICAgICAgICAgUmVmUHRyPEpTT046Ok9i
amVjdD4gcHJveHk7Ci0gICAgICAgICAgICBpZiAoIWl0LT52YWx1ZS0+YXNPYmplY3QocHJveHkp
IHx8ICFkZXNlcmlhbGl6ZVByb3h5KCpwcm94eSkpCisgICAgICAgICAgICBhdXRvIHByb3h5ID0g
aXQtPnZhbHVlLT5hc09iamVjdCgpOworICAgICAgICAgICAgaWYgKCFwcm94eSB8fCAhZGVzZXJp
YWxpemVQcm94eSgqcHJveHkpKQogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAg
ICAgICAgICAgcmVzdWx0LT5zZXRWYWx1ZShpdC0+a2V5LCBSZWZQdHI8SlNPTjo6VmFsdWU+KGl0
LT52YWx1ZSkpOworICAgICAgICAgICAgcmVzdWx0LT5zZXRWYWx1ZShpdC0+a2V5LCAqcHJveHkp
OwogICAgICAgICB9IGVsc2UgaWYgKGl0LT5rZXkgPT0gInN0cmljdEZpbGVJbnRlcmFjdGFiaWxp
dHkiKSB7Ci0gICAgICAgICAgICBib29sIHN0cmljdEZpbGVJbnRlcmFjdGFiaWxpdHk7Ci0gICAg
ICAgICAgICBpZiAoIWl0LT52YWx1ZS0+YXNCb29sZWFuKHN0cmljdEZpbGVJbnRlcmFjdGFiaWxp
dHkpKQorICAgICAgICAgICAgYXV0byBzdHJpY3RGaWxlSW50ZXJhY3RhYmlsaXR5ID0gaXQtPnZh
bHVlLT5hc0Jvb2xlYW4oKTsKKyAgICAgICAgICAgIGlmICghc3RyaWN0RmlsZUludGVyYWN0YWJp
bGl0eSkKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgICAgIHJlc3Vs
dC0+c2V0Qm9vbGVhbihpdC0+a2V5LCBzdHJpY3RGaWxlSW50ZXJhY3RhYmlsaXR5KTsKKyAgICAg
ICAgICAgIHJlc3VsdC0+c2V0Qm9vbGVhbihpdC0+a2V5LCAqc3RyaWN0RmlsZUludGVyYWN0YWJp
bGl0eSk7CiAgICAgICAgIH0gZWxzZSBpZiAoaXQtPmtleSA9PSAidGltZW91dHMiKSB7Ci0gICAg
ICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiB0aW1lb3V0czsKLSAgICAgICAgICAgIGlmICgh
aXQtPnZhbHVlLT5hc09iamVjdCh0aW1lb3V0cykgfHwgIWRlc2VyaWFsaXplVGltZW91dHMoKnRp
bWVvdXRzLCBJZ25vcmVVbmtub3duVGltZW91dDo6Tm8pKQorICAgICAgICAgICAgYXV0byB0aW1l
b3V0cyA9IGl0LT52YWx1ZS0+YXNPYmplY3QoKTsKKyAgICAgICAgICAgIGlmICghdGltZW91dHMg
fHwgIWRlc2VyaWFsaXplVGltZW91dHMoKnRpbWVvdXRzLCBJZ25vcmVVbmtub3duVGltZW91dDo6
Tm8pKQogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICAgICAgcmVzdWx0
LT5zZXRWYWx1ZShpdC0+a2V5LCBSZWZQdHI8SlNPTjo6VmFsdWU+KGl0LT52YWx1ZSkpOworICAg
ICAgICAgICAgcmVzdWx0LT5zZXRWYWx1ZShpdC0+a2V5LCAqdGltZW91dHMpOwogICAgICAgICB9
IGVsc2UgaWYgKGl0LT5rZXkgPT0gInVuaGFuZGxlZFByb21wdEJlaGF2aW9yIikgewotICAgICAg
ICAgICAgU3RyaW5nIHVuaGFuZGxlZFByb21wdEJlaGF2aW9yOwotICAgICAgICAgICAgaWYgKCFp
dC0+dmFsdWUtPmFzU3RyaW5nKHVuaGFuZGxlZFByb21wdEJlaGF2aW9yKSB8fCAhZGVzZXJpYWxp
emVVbmhhbmRsZWRQcm9tcHRCZWhhdmlvcih1bmhhbmRsZWRQcm9tcHRCZWhhdmlvcikpCisgICAg
ICAgICAgICBhdXRvIHVuaGFuZGxlZFByb21wdEJlaGF2aW9yID0gaXQtPnZhbHVlLT5hc1N0cmlu
ZygpOworICAgICAgICAgICAgaWYgKCF1bmhhbmRsZWRQcm9tcHRCZWhhdmlvciB8fCAhZGVzZXJp
YWxpemVVbmhhbmRsZWRQcm9tcHRCZWhhdmlvcih1bmhhbmRsZWRQcm9tcHRCZWhhdmlvcikpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgICAgICByZXN1bHQtPnNldFN0
cmluZyhpdC0+a2V5LCB1bmhhbmRsZWRQcm9tcHRCZWhhdmlvcik7CiAgICAgICAgIH0gZWxzZSBp
ZiAoaXQtPmtleS5maW5kKCI6IikgIT0gbm90Rm91bmQpIHsKICAgICAgICAgICAgIGlmICghcGxh
dGZvcm1WYWxpZGF0ZUNhcGFiaWxpdHkoaXQtPmtleSwgaXQtPnZhbHVlKSkKICAgICAgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0VmFsdWUoaXQtPmtl
eSwgUmVmUHRyPEpTT046OlZhbHVlPihpdC0+dmFsdWUpKTsKKyAgICAgICAgICAgIHJlc3VsdC0+
c2V0VmFsdWUoaXQtPmtleSwgaXQtPnZhbHVlLmNvcHlSZWYoKSk7CiAgICAgICAgIH0gZWxzZQog
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQpAQCAtNTg0LDE0ICs1OTQsMTQgQEAg
UmVmUHRyPEpTT046Ok9iamVjdD4gV2ViRHJpdmVyU2VydmljZTo6bWVyZ2VDYXBhYmlsaXRpZXMo
Y29uc3QgSlNPTjo6T2JqZWN0JiByZXEKIHsKICAgICAvLyDCpzcuMiBQcm9jZXNzaW5nIENhcGFi
aWxpdGllcy4KICAgICAvLyBodHRwczovL3czYy5naXRodWIuaW8vd2ViZHJpdmVyL3dlYmRyaXZl
ci1zcGVjLmh0bWwjZGZuLW1lcmdpbmctY2FwYWJpbGl0aWVzCi0gICAgUmVmUHRyPEpTT046Ok9i
amVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBhdXRvIHJlc3VsdCA9
IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgYXV0byByZXF1aXJlZEVuZCA9IHJlcXVpcmVk
Q2FwYWJpbGl0aWVzLmVuZCgpOwogICAgIGZvciAoYXV0byBpdCA9IHJlcXVpcmVkQ2FwYWJpbGl0
aWVzLmJlZ2luKCk7IGl0ICE9IHJlcXVpcmVkRW5kOyArK2l0KQotICAgICAgICByZXN1bHQtPnNl
dFZhbHVlKGl0LT5rZXksIFJlZlB0cjxKU09OOjpWYWx1ZT4oaXQtPnZhbHVlKSk7CisgICAgICAg
IHJlc3VsdC0+c2V0VmFsdWUoaXQtPmtleSwgaXQtPnZhbHVlLmNvcHlSZWYoKSk7CiAKICAgICBh
dXRvIGZpcnN0TWF0Y2hFbmQgPSBmaXJzdE1hdGNoQ2FwYWJpbGl0aWVzLmVuZCgpOwogICAgIGZv
ciAoYXV0byBpdCA9IGZpcnN0TWF0Y2hDYXBhYmlsaXRpZXMuYmVnaW4oKTsgaXQgIT0gZmlyc3RN
YXRjaEVuZDsgKytpdCkKLSAgICAgICAgcmVzdWx0LT5zZXRWYWx1ZShpdC0+a2V5LCBSZWZQdHI8
SlNPTjo6VmFsdWU+KGl0LT52YWx1ZSkpOworICAgICAgICByZXN1bHQtPnNldFZhbHVlKGl0LT5r
ZXksIGl0LT52YWx1ZS5jb3B5UmVmKCkpOwogCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTYw
NCw3ICs2MTQsNyBAQCBSZWZQdHI8SlNPTjo6T2JqZWN0PiBXZWJEcml2ZXJTZXJ2aWNlOjptYXRj
aENhcGFiaWxpdGllcyhjb25zdCBKU09OOjpPYmplY3QmIG1lcgogCiAgICAgLy8gU29tZSBjYXBh
YmlsaXRpZXMgbGlrZSBicm93c2VyIG5hbWUgYW5kIHZlcnNpb24gbWlnaHQgbmVlZCB0byBsYXVu
Y2ggdGhlIGJyb3dzZXIsCiAgICAgLy8gc28gd2Ugb25seSByZWplY3QgdGhlIGtub3duIGNhcGFi
aWxpdGllcyB0aGF0IGRvbid0IG1hdGNoLgotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG1hdGNo
ZWRDYXBhYmlsaXRpZXMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGF1dG8gbWF0Y2hl
ZENhcGFiaWxpdGllcyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgaWYgKHBsYXRmb3Jt
Q2FwYWJpbGl0aWVzLmJyb3dzZXJOYW1lKQogICAgICAgICBtYXRjaGVkQ2FwYWJpbGl0aWVzLT5z
ZXRTdHJpbmcoImJyb3dzZXJOYW1lIl9zLCBwbGF0Zm9ybUNhcGFiaWxpdGllcy5icm93c2VyTmFt
ZS52YWx1ZSgpKTsKICAgICBpZiAocGxhdGZvcm1DYXBhYmlsaXRpZXMuYnJvd3NlclZlcnNpb24p
CkBAIC02MjEsMzUgKzYzMSwyOCBAQCBSZWZQdHI8SlNPTjo6T2JqZWN0PiBXZWJEcml2ZXJTZXJ2
aWNlOjptYXRjaENhcGFiaWxpdGllcyhjb25zdCBKU09OOjpPYmplY3QmIG1lcgogICAgIGF1dG8g
ZW5kID0gbWVyZ2VkQ2FwYWJpbGl0aWVzLmVuZCgpOwogICAgIGZvciAoYXV0byBpdCA9IG1lcmdl
ZENhcGFiaWxpdGllcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgaWYgKGl0
LT5rZXkgPT0gImJyb3dzZXJOYW1lIiAmJiBwbGF0Zm9ybUNhcGFiaWxpdGllcy5icm93c2VyTmFt
ZSkgewotICAgICAgICAgICAgU3RyaW5nIGJyb3dzZXJOYW1lOwotICAgICAgICAgICAgaXQtPnZh
bHVlLT5hc1N0cmluZyhicm93c2VyTmFtZSk7CisgICAgICAgICAgICBhdXRvIGJyb3dzZXJOYW1l
ID0gaXQtPnZhbHVlLT5hc1N0cmluZygpOwogICAgICAgICAgICAgaWYgKCFlcXVhbElnbm9yaW5n
QVNDSUlDYXNlKHBsYXRmb3JtQ2FwYWJpbGl0aWVzLmJyb3dzZXJOYW1lLnZhbHVlKCksIGJyb3dz
ZXJOYW1lKSkKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgfSBlbHNl
IGlmIChpdC0+a2V5ID09ICJicm93c2VyVmVyc2lvbiIgJiYgcGxhdGZvcm1DYXBhYmlsaXRpZXMu
YnJvd3NlclZlcnNpb24pIHsKLSAgICAgICAgICAgIFN0cmluZyBicm93c2VyVmVyc2lvbjsKLSAg
ICAgICAgICAgIGl0LT52YWx1ZS0+YXNTdHJpbmcoYnJvd3NlclZlcnNpb24pOworICAgICAgICAg
ICAgYXV0byBicm93c2VyVmVyc2lvbiA9IGl0LT52YWx1ZS0+YXNTdHJpbmcoKTsKICAgICAgICAg
ICAgIGlmICghcGxhdGZvcm1Db21wYXJlQnJvd3NlclZlcnNpb25zKGJyb3dzZXJWZXJzaW9uLCBw
bGF0Zm9ybUNhcGFiaWxpdGllcy5icm93c2VyVmVyc2lvbi52YWx1ZSgpKSkKICAgICAgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgfSBlbHNlIGlmIChpdC0+a2V5ID09ICJwbGF0
Zm9ybU5hbWUiICYmIHBsYXRmb3JtQ2FwYWJpbGl0aWVzLnBsYXRmb3JtTmFtZSkgewotICAgICAg
ICAgICAgU3RyaW5nIHBsYXRmb3JtTmFtZTsKLSAgICAgICAgICAgIGl0LT52YWx1ZS0+YXNTdHJp
bmcocGxhdGZvcm1OYW1lKTsKKyAgICAgICAgICAgIGF1dG8gcGxhdGZvcm1OYW1lID0gaXQtPnZh
bHVlLT5hc1N0cmluZygpOwogICAgICAgICAgICAgaWYgKCFlcXVhbExldHRlcnNJZ25vcmluZ0FT
Q0lJQ2FzZShwbGF0Zm9ybU5hbWUsICJhbnkiKSAmJiBwbGF0Zm9ybUNhcGFiaWxpdGllcy5wbGF0
Zm9ybU5hbWUudmFsdWUoKSAhPSBwbGF0Zm9ybU5hbWUpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgICAgIH0gZWxzZSBpZiAoaXQtPmtleSA9PSAiYWNjZXB0SW5zZWN1cmVD
ZXJ0cyIgJiYgcGxhdGZvcm1DYXBhYmlsaXRpZXMuYWNjZXB0SW5zZWN1cmVDZXJ0cykgewotICAg
ICAgICAgICAgYm9vbCBhY2NlcHRJbnNlY3VyZUNlcnRzOwotICAgICAgICAgICAgaXQtPnZhbHVl
LT5hc0Jvb2xlYW4oYWNjZXB0SW5zZWN1cmVDZXJ0cyk7CisgICAgICAgICAgICBhdXRvIGFjY2Vw
dEluc2VjdXJlQ2VydHMgPSBpdC0+dmFsdWUtPmFzQm9vbGVhbigpOwogICAgICAgICAgICAgaWYg
KGFjY2VwdEluc2VjdXJlQ2VydHMgJiYgIXBsYXRmb3JtQ2FwYWJpbGl0aWVzLmFjY2VwdEluc2Vj
dXJlQ2VydHMudmFsdWUoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAg
ICAgfSBlbHNlIGlmIChpdC0+a2V5ID09ICJwcm94eSIpIHsKLSAgICAgICAgICAgIFJlZlB0cjxK
U09OOjpPYmplY3Q+IHByb3h5OwotICAgICAgICAgICAgaXQtPnZhbHVlLT5hc09iamVjdChwcm94
eSk7Ci0gICAgICAgICAgICBTdHJpbmcgcHJveHlUeXBlOwotICAgICAgICAgICAgcHJveHktPmdl
dFN0cmluZygicHJveHlUeXBlIl9zLCBwcm94eVR5cGUpOworICAgICAgICAgICAgYXV0byBwcm94
eVR5cGUgPSBpdC0+dmFsdWUtPmFzT2JqZWN0KCktPmdldFN0cmluZygicHJveHlUeXBlIl9zKTsK
ICAgICAgICAgICAgIGlmICghcGxhdGZvcm1TdXBwb3J0UHJveHlUeXBlKHByb3h5VHlwZSkpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIH0gZWxzZSBpZiAoIXBsYXRm
b3JtTWF0Y2hDYXBhYmlsaXR5KGl0LT5rZXksIGl0LT52YWx1ZSkpCiAgICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLSAgICAgICAgbWF0Y2hlZENhcGFiaWxpdGllcy0+c2V0VmFsdWUoaXQtPmtl
eSwgUmVmUHRyPEpTT046OlZhbHVlPihpdC0+dmFsdWUpKTsKKyAgICAgICAgbWF0Y2hlZENhcGFi
aWxpdGllcy0+c2V0VmFsdWUoaXQtPmtleSwgaXQtPnZhbHVlLmNvcHlSZWYoKSk7CiAgICAgfQog
CiAgICAgcmV0dXJuIG1hdGNoZWRDYXBhYmlsaXRpZXM7CkBAIC02NjEsMTkgKzY2NCwxOSBAQCBW
ZWN0b3I8Q2FwYWJpbGl0aWVzPiBXZWJEcml2ZXJTZXJ2aWNlOjpwcm9jZXNzQ2FwYWJpbGl0aWVz
KGNvbnN0IEpTT046Ok9iamVjdCYgcAogICAgIC8vIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJk
cml2ZXIvd2ViZHJpdmVyLXNwZWMuaHRtbCNwcm9jZXNzaW5nLWNhcGFiaWxpdGllcwogCiAgICAg
Ly8gMS4gTGV0IGNhcGFiaWxpdGllcyByZXF1ZXN0IGJlIHRoZSByZXN1bHQgb2YgZ2V0dGluZyB0
aGUgcHJvcGVydHkgImNhcGFiaWxpdGllcyIgZnJvbSBwYXJhbWV0ZXJzLgotICAgIFJlZlB0cjxK
U09OOjpPYmplY3Q+IGNhcGFiaWxpdGllc09iamVjdDsKLSAgICBpZiAoIXBhcmFtZXRlcnMuZ2V0
T2JqZWN0KCJjYXBhYmlsaXRpZXMiX3MsIGNhcGFiaWxpdGllc09iamVjdCkpIHsKKyAgICBhdXRv
IGNhcGFiaWxpdGllc09iamVjdCA9IHBhcmFtZXRlcnMuZ2V0T2JqZWN0KCJjYXBhYmlsaXRpZXMi
X3MpOworICAgIGlmICghY2FwYWJpbGl0aWVzT2JqZWN0KSB7CiAgICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpJbnZh
bGlkQXJndW1lbnQpKTsKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKICAgICAvLyAyLiBM
ZXQgcmVxdWlyZWQgY2FwYWJpbGl0aWVzIGJlIHRoZSByZXN1bHQgb2YgZ2V0dGluZyB0aGUgcHJv
cGVydHkgImFsd2F5c01hdGNoIiBmcm9tIGNhcGFiaWxpdGllcyByZXF1ZXN0LgotICAgIFJlZlB0
cjxKU09OOjpWYWx1ZT4gcmVxdWlyZWRDYXBhYmlsaXRpZXNWYWx1ZTsKICAgICBSZWZQdHI8SlNP
Tjo6T2JqZWN0PiByZXF1aXJlZENhcGFiaWxpdGllczsKLSAgICBpZiAoIWNhcGFiaWxpdGllc09i
amVjdC0+Z2V0VmFsdWUoImFsd2F5c01hdGNoIl9zLCByZXF1aXJlZENhcGFiaWxpdGllc1ZhbHVl
KSkKKyAgICBhdXRvIHJlcXVpcmVkQ2FwYWJpbGl0aWVzVmFsdWUgPSBjYXBhYmlsaXRpZXNPYmpl
Y3QtPmdldFZhbHVlKCJhbHdheXNNYXRjaCJfcyk7CisgICAgaWYgKCFyZXF1aXJlZENhcGFiaWxp
dGllc1ZhbHVlKSB7CiAgICAgICAgIC8vIDIuMS4gSWYgcmVxdWlyZWQgY2FwYWJpbGl0aWVzIGlz
IHVuZGVmaW5lZCwgc2V0IHRoZSB2YWx1ZSB0byBhbiBlbXB0eSBKU09OIE9iamVjdC4KICAgICAg
ICAgcmVxdWlyZWRDYXBhYmlsaXRpZXMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIGVs
c2UgaWYgKCFyZXF1aXJlZENhcGFiaWxpdGllc1ZhbHVlLT5hc09iamVjdChyZXF1aXJlZENhcGFi
aWxpdGllcykpIHsKKyAgICB9IGVsc2UgaWYgKCEocmVxdWlyZWRDYXBhYmlsaXRpZXMgPSByZXF1
aXJlZENhcGFiaWxpdGllc1ZhbHVlLT5hc09iamVjdCgpKSkgewogICAgICAgICBjb21wbGV0aW9u
SGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6SW52
YWxpZEFyZ3VtZW50LCBTdHJpbmcoImFsd2F5c01hdGNoIGlzIGludmFsaWQgaW4gY2FwYWJpbGl0
aWVzIikpKTsKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CkBAIC02ODYsMTMgKzY4OSwxMyBA
QCBWZWN0b3I8Q2FwYWJpbGl0aWVzPiBXZWJEcml2ZXJTZXJ2aWNlOjpwcm9jZXNzQ2FwYWJpbGl0
aWVzKGNvbnN0IEpTT046Ok9iamVjdCYgcAogICAgIH0KIAogICAgIC8vIDMuIExldCBhbGwgZmly
c3QgbWF0Y2ggY2FwYWJpbGl0aWVzIGJlIHRoZSByZXN1bHQgb2YgZ2V0dGluZyB0aGUgcHJvcGVy
dHkgImZpcnN0TWF0Y2giIGZyb20gY2FwYWJpbGl0aWVzIHJlcXVlc3QuCi0gICAgUmVmUHRyPEpT
T046OlZhbHVlPiBmaXJzdE1hdGNoQ2FwYWJpbGl0aWVzVmFsdWU7CiAgICAgUmVmUHRyPEpTT046
OkFycmF5PiBmaXJzdE1hdGNoQ2FwYWJpbGl0aWVzTGlzdDsKLSAgICBpZiAoIWNhcGFiaWxpdGll
c09iamVjdC0+Z2V0VmFsdWUoImZpcnN0TWF0Y2giX3MsIGZpcnN0TWF0Y2hDYXBhYmlsaXRpZXNW
YWx1ZSkpIHsKKyAgICBhdXRvIGZpcnN0TWF0Y2hDYXBhYmlsaXRpZXNWYWx1ZSA9IGNhcGFiaWxp
dGllc09iamVjdC0+Z2V0VmFsdWUoImZpcnN0TWF0Y2giX3MpOworICAgIGlmICghZmlyc3RNYXRj
aENhcGFiaWxpdGllc1ZhbHVlKSB7CiAgICAgICAgIC8vIDMuMS4gSWYgYWxsIGZpcnN0IG1hdGNo
IGNhcGFiaWxpdGllcyBpcyB1bmRlZmluZWQsIHNldCB0aGUgdmFsdWUgdG8gYSBKU09OIExpc3Qg
d2l0aCBhIHNpbmdsZSBlbnRyeSBvZiBhbiBlbXB0eSBKU09OIE9iamVjdC4KICAgICAgICAgZmly
c3RNYXRjaENhcGFiaWxpdGllc0xpc3QgPSBKU09OOjpBcnJheTo6Y3JlYXRlKCk7CiAgICAgICAg
IGZpcnN0TWF0Y2hDYXBhYmlsaXRpZXNMaXN0LT5wdXNoT2JqZWN0KEpTT046Ok9iamVjdDo6Y3Jl
YXRlKCkpOwotICAgIH0gZWxzZSBpZiAoIWZpcnN0TWF0Y2hDYXBhYmlsaXRpZXNWYWx1ZS0+YXNB
cnJheShmaXJzdE1hdGNoQ2FwYWJpbGl0aWVzTGlzdCkpIHsKKyAgICB9IGVsc2UgaWYgKCEoZmly
c3RNYXRjaENhcGFiaWxpdGllc0xpc3QgPSBmaXJzdE1hdGNoQ2FwYWJpbGl0aWVzVmFsdWUtPmFz
QXJyYXkoKSkpIHsKICAgICAgICAgLy8gMy4yLiBJZiBhbGwgZmlyc3QgbWF0Y2ggY2FwYWJpbGl0
aWVzIGlzIG5vdCBhIEpTT04gTGlzdCwgcmV0dXJuIGVycm9yIHdpdGggZXJyb3IgY29kZSBpbnZh
bGlkIGFyZ3VtZW50LgogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0Ojpm
YWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6SW52YWxpZEFyZ3VtZW50LCBTdHJpbmcoImZp
cnN0TWF0Y2ggaXMgaW52YWxpZCBpbiBjYXBhYmlsaXRpZXMiKSkpOwogICAgICAgICByZXR1cm4g
eyB9OwpAQCAtNzA0LDkgKzcwNyw4IEBAIFZlY3RvcjxDYXBhYmlsaXRpZXM+IFdlYkRyaXZlclNl
cnZpY2U6OnByb2Nlc3NDYXBhYmlsaXRpZXMoY29uc3QgSlNPTjo6T2JqZWN0JiBwCiAgICAgdmFs
aWRhdGVkRmlyc3RNYXRjaENhcGFiaWxpdGllc0xpc3QucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShm
aXJzdE1hdGNoQ2FwYWJpbGl0aWVzTGlzdExlbmd0aCk7CiAgICAgLy8gNS4gRm9yIGVhY2ggZmly
c3QgbWF0Y2ggY2FwYWJpbGl0aWVzIGNvcnJlc3BvbmRpbmcgdG8gYW4gaW5kZXhlZCBwcm9wZXJ0
eSBpbiBhbGwgZmlyc3QgbWF0Y2ggY2FwYWJpbGl0aWVzLgogICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBmaXJzdE1hdGNoQ2FwYWJpbGl0aWVzTGlzdExlbmd0aDsgKytpKSB7Ci0gICAgICAg
IFJlZlB0cjxKU09OOjpWYWx1ZT4gZmlyc3RNYXRjaENhcGFiaWxpdGllc1ZhbHVlID0gZmlyc3RN
YXRjaENhcGFiaWxpdGllc0xpc3QtPmdldChpKTsKLSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVj
dD4gZmlyc3RNYXRjaENhcGFiaWxpdGllczsKLSAgICAgICAgaWYgKCFmaXJzdE1hdGNoQ2FwYWJp
bGl0aWVzVmFsdWUtPmFzT2JqZWN0KGZpcnN0TWF0Y2hDYXBhYmlsaXRpZXMpKSB7CisgICAgICAg
IGF1dG8gZmlyc3RNYXRjaENhcGFiaWxpdGllcyA9IGZpcnN0TWF0Y2hDYXBhYmlsaXRpZXNMaXN0
LT5nZXQoaSktPmFzT2JqZWN0KCk7CisgICAgICAgIGlmICghZmlyc3RNYXRjaENhcGFiaWxpdGll
cykgewogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChD
b21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OkludmFsaWRBcmd1bWVudCwgU3RyaW5nKCJJbnZhbGlk
IGNhcGFiaWxpdGllcyBmb3VuZCBpbiBmaXJzdE1hdGNoIikpKTsKICAgICAgICAgICAgIHJldHVy
biB7IH07CiAgICAgICAgIH0KQEAgLTgxNSw5ICs4MTcsOSBAQCB2b2lkIFdlYkRyaXZlclNlcnZp
Y2U6OmNyZWF0ZVNlc3Npb24oVmVjdG9yPENhcGFiaWxpdGllcz4mJiBjYXBhYmlsaXRpZXNMaXN0
LCBzdAogCiAgICAgICAgICAgICBtX3Nlc3Npb24gPSBXVEZNb3ZlKHNlc3Npb24pOwogCi0gICAg
ICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiByZXN1bHRPYmplY3QgPSBKU09OOjpPYmplY3Q6
OmNyZWF0ZSgpOworICAgICAgICAgICAgYXV0byByZXN1bHRPYmplY3QgPSBKU09OOjpPYmplY3Q6
OmNyZWF0ZSgpOwogICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoInNlc3Npb25J
ZCJfcywgbV9zZXNzaW9uLT5pZCgpKTsKLSAgICAgICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+
IGNhcGFiaWxpdGllc09iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgICAg
ICBhdXRvIGNhcGFiaWxpdGllc09iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAg
ICAgICAgICBjb25zdCBhdXRvJiBjYXBhYmlsaXRpZXMgPSBtX3Nlc3Npb24tPmNhcGFiaWxpdGll
cygpOwogICAgICAgICAgICAgY2FwYWJpbGl0aWVzT2JqZWN0LT5zZXRTdHJpbmcoImJyb3dzZXJO
YW1lIl9zLCBjYXBhYmlsaXRpZXMuYnJvd3Nlck5hbWUudmFsdWVPcihlbXB0eVN0cmluZygpKSk7
CiAgICAgICAgICAgICBjYXBhYmlsaXRpZXNPYmplY3QtPnNldFN0cmluZygiYnJvd3NlclZlcnNp
b24iX3MsIGNhcGFiaWxpdGllcy5icm93c2VyVmVyc2lvbi52YWx1ZU9yKGVtcHR5U3RyaW5nKCkp
KTsKQEAgLTg1NSw3ICs4NTcsNyBAQCB2b2lkIFdlYkRyaXZlclNlcnZpY2U6OmNyZWF0ZVNlc3Np
b24oVmVjdG9yPENhcGFiaWxpdGllcz4mJiBjYXBhYmlsaXRpZXNMaXN0LCBzdAogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgaWYgKCFjYXBhYmlsaXRpZXMucHJveHkpCiAgICAgICAgICAgICAg
ICAgY2FwYWJpbGl0aWVzT2JqZWN0LT5zZXRPYmplY3QoInByb3h5Il9zLCBKU09OOjpPYmplY3Q6
OmNyZWF0ZSgpKTsKLSAgICAgICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHRpbWVvdXRzT2Jq
ZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgICAgIGF1dG8gdGltZW91dHNP
YmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICAgICAgaWYgKG1fc2Vzc2lv
bi0+c2NyaXB0VGltZW91dCgpID09IHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6aW5maW5p
dHkoKSkKICAgICAgICAgICAgICAgICB0aW1lb3V0c09iamVjdC0+c2V0VmFsdWUoInNjcmlwdCJf
cywgSlNPTjo6VmFsdWU6Om51bGwoKSk7CiAgICAgICAgICAgICBlbHNlCkBAIC04NzQsOCArODc2
LDggQEAgdm9pZCBXZWJEcml2ZXJTZXJ2aWNlOjpkZWxldGVTZXNzaW9uKFJlZlB0cjxKU09OOjpP
YmplY3Q+JiYgcGFyYW1ldGVycywgRnVuY3Rpb24KIHsKICAgICAvLyDCpzguMiBEZWxldGUgU2Vz
c2lvbi4KICAgICAvLyBodHRwczovL3d3dy53My5vcmcvVFIvd2ViZHJpdmVyLyNkZWxldGUtc2Vz
c2lvbgotICAgIFN0cmluZyBzZXNzaW9uSUQ7Ci0gICAgaWYgKCFwYXJhbWV0ZXJzLT5nZXRTdHJp
bmcoInNlc3Npb25JZCJfcywgc2Vzc2lvbklEKSkgeworICAgIGF1dG8gc2Vzc2lvbklEID0gcGFy
YW1ldGVycy0+Z2V0U3RyaW5nKCJzZXNzaW9uSWQiX3MpOworICAgIGlmICghc2Vzc2lvbklEKSB7
CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJl
c3VsdDo6RXJyb3JDb2RlOjpJbnZhbGlkQXJndW1lbnQpKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KQEAgLTkzOCw4ICs5NDAsOCBAQCB2b2lkIFdlYkRyaXZlclNlcnZpY2U6OmdvKFJlZlB0cjxK
U09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycywgRnVuY3Rpb248dm9pZCAoQ29tbQogICAgIGlmICgh
ZmluZFNlc3Npb25PckNvbXBsZXRlV2l0aEVycm9yKCpwYXJhbWV0ZXJzLCBjb21wbGV0aW9uSGFu
ZGxlcikpCiAgICAgICAgIHJldHVybjsKIAotICAgIFN0cmluZyB1cmw7Ci0gICAgaWYgKCFwYXJh
bWV0ZXJzLT5nZXRTdHJpbmcoInVybCJfcywgdXJsKSkgeworICAgIGF1dG8gdXJsID0gcGFyYW1l
dGVycy0+Z2V0U3RyaW5nKCJ1cmwiX3MpOworICAgIGlmICghdXJsKSB7CiAgICAgICAgIGNvbXBs
ZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2Rl
OjpJbnZhbGlkQXJndW1lbnQpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTEwNTMsOSAr
MTA1NSw4IEBAIHZvaWQgV2ViRHJpdmVyU2VydmljZTo6c2V0V2luZG93UmVjdChSZWZQdHI8SlNP
Tjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMsIEZ1bmN0aW9uCiB7CiAgICAgLy8gwqcxMC43LjIgU2V0
IFdpbmRvdyBSZWN0LgogICAgIC8vIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJkcml2ZXIvd2Vi
ZHJpdmVyLXNwZWMuaHRtbCNzZXQtd2luZG93LXJlY3QKLSAgICBSZWZQdHI8SlNPTjo6VmFsdWU+
IHZhbHVlOwogICAgIE9wdGlvbmFsPGRvdWJsZT4gd2lkdGg7Ci0gICAgaWYgKHBhcmFtZXRlcnMt
PmdldFZhbHVlKCJ3aWR0aCJfcywgdmFsdWUpKSB7CisgICAgaWYgKGF1dG8gdmFsdWUgPSBwYXJh
bWV0ZXJzLT5nZXRWYWx1ZSgid2lkdGgiX3MpKSB7CiAgICAgICAgIGlmIChhdXRvIG51bWJlciA9
IHZhbHVlQXNOdW1iZXJJblJhbmdlKCp2YWx1ZSkpCiAgICAgICAgICAgICB3aWR0aCA9IG51bWJl
cjsKICAgICAgICAgZWxzZSBpZiAoIXZhbHVlLT5pc051bGwoKSkgewpAQCAtMTA2NCw3ICsxMDY1
LDcgQEAgdm9pZCBXZWJEcml2ZXJTZXJ2aWNlOjpzZXRXaW5kb3dSZWN0KFJlZlB0cjxKU09OOjpP
YmplY3Q+JiYgcGFyYW1ldGVycywgRnVuY3Rpb24KICAgICAgICAgfQogICAgIH0KICAgICBPcHRp
b25hbDxkb3VibGU+IGhlaWdodDsKLSAgICBpZiAocGFyYW1ldGVycy0+Z2V0VmFsdWUoImhlaWdo
dCJfcywgdmFsdWUpKSB7CisgICAgaWYgKGF1dG8gdmFsdWUgPSBwYXJhbWV0ZXJzLT5nZXRWYWx1
ZSgiaGVpZ2h0Il9zKSkgewogICAgICAgICBpZiAoYXV0byBudW1iZXIgPSB2YWx1ZUFzTnVtYmVy
SW5SYW5nZSgqdmFsdWUpKQogICAgICAgICAgICAgaGVpZ2h0ID0gbnVtYmVyOwogICAgICAgICBl
bHNlIGlmICghdmFsdWUtPmlzTnVsbCgpKSB7CkBAIC0xMDczLDcgKzEwNzQsNyBAQCB2b2lkIFdl
YkRyaXZlclNlcnZpY2U6OnNldFdpbmRvd1JlY3QoUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJh
bWV0ZXJzLCBGdW5jdGlvbgogICAgICAgICB9CiAgICAgfQogICAgIE9wdGlvbmFsPGRvdWJsZT4g
eDsKLSAgICBpZiAocGFyYW1ldGVycy0+Z2V0VmFsdWUoIngiX3MsIHZhbHVlKSkgeworICAgIGlm
IChhdXRvIHZhbHVlID0gcGFyYW1ldGVycy0+Z2V0VmFsdWUoIngiX3MpKSB7CiAgICAgICAgIGlm
IChhdXRvIG51bWJlciA9IHZhbHVlQXNOdW1iZXJJblJhbmdlKCp2YWx1ZSwgSU5UX01JTikpCiAg
ICAgICAgICAgICB4ID0gbnVtYmVyOwogICAgICAgICBlbHNlIGlmICghdmFsdWUtPmlzTnVsbCgp
KSB7CkBAIC0xMDgyLDcgKzEwODMsNyBAQCB2b2lkIFdlYkRyaXZlclNlcnZpY2U6OnNldFdpbmRv
d1JlY3QoUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzLCBGdW5jdGlvbgogICAgICAg
ICB9CiAgICAgfQogICAgIE9wdGlvbmFsPGRvdWJsZT4geTsKLSAgICBpZiAocGFyYW1ldGVycy0+
Z2V0VmFsdWUoInkiX3MsIHZhbHVlKSkgeworICAgIGlmIChhdXRvIHZhbHVlID0gcGFyYW1ldGVy
cy0+Z2V0VmFsdWUoInkiX3MpKSB7CiAgICAgICAgIGlmIChhdXRvIG51bWJlciA9IHZhbHVlQXNO
dW1iZXJJblJhbmdlKCp2YWx1ZSwgSU5UX01JTikpCiAgICAgICAgICAgICB5ID0gbnVtYmVyOwog
ICAgICAgICBlbHNlIGlmICghdmFsdWUtPmlzTnVsbCgpKSB7CkBAIC0xMTM1LDggKzExMzYsOCBA
QCB2b2lkIFdlYkRyaXZlclNlcnZpY2U6OmNsb3NlV2luZG93KFJlZlB0cjxKU09OOjpPYmplY3Q+
JiYgcGFyYW1ldGVycywgRnVuY3Rpb248dgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CiAKLSAgICAgICAgUmVmUHRyPEpTT046OkFycmF5PiBoYW5kbGVzOwotICAgICAgICBpZiAocmVz
dWx0LnJlc3VsdCgpLT5hc0FycmF5KGhhbmRsZXMpICYmICFoYW5kbGVzLT5sZW5ndGgoKSkKKyAg
ICAgICAgYXV0byBoYW5kbGVzID0gcmVzdWx0LnJlc3VsdCgpLT5hc0FycmF5KCk7CisgICAgICAg
IGlmIChoYW5kbGVzICYmICFoYW5kbGVzLT5sZW5ndGgoKSkKICAgICAgICAgICAgIG1fc2Vzc2lv
biA9IG51bGxwdHI7CiAKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShyZXN1bHQp
KTsKQEAgLTExNTAsOCArMTE1MSw4IEBAIHZvaWQgV2ViRHJpdmVyU2VydmljZTo6c3dpdGNoVG9X
aW5kb3coUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzLCBGdW5jdGlvCiAgICAgaWYg
KCFmaW5kU2Vzc2lvbk9yQ29tcGxldGVXaXRoRXJyb3IoKnBhcmFtZXRlcnMsIGNvbXBsZXRpb25I
YW5kbGVyKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgU3RyaW5nIGhhbmRsZTsKLSAgICBpZiAo
IXBhcmFtZXRlcnMtPmdldFN0cmluZygiaGFuZGxlIl9zLCBoYW5kbGUpKSB7CisgICAgYXV0byBo
YW5kbGUgPSBwYXJhbWV0ZXJzLT5nZXRTdHJpbmcoImhhbmRsZSJfcyk7CisgICAgaWYgKCFoYW5k
bGUpIHsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21t
YW5kUmVzdWx0OjpFcnJvckNvZGU6OkludmFsaWRBcmd1bWVudCkpOwogICAgICAgICByZXR1cm47
CiAgICAgfQpAQCAtMTE3NSwxMyArMTE3NiwxMSBAQCB2b2lkIFdlYkRyaXZlclNlcnZpY2U6Om5l
d1dpbmRvdyhSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMsIEZ1bmN0aW9uPHZvaQog
ICAgICAgICByZXR1cm47CiAKICAgICBPcHRpb25hbDxTdHJpbmc+IHR5cGVIaW50OwotICAgIFJl
ZlB0cjxKU09OOjpWYWx1ZT4gdmFsdWU7Ci0gICAgaWYgKHBhcmFtZXRlcnMtPmdldFZhbHVlKCJ0
eXBlIl9zLCB2YWx1ZSkpIHsKLSAgICAgICAgU3RyaW5nIHZhbHVlU3RyaW5nOwotICAgICAgICBp
ZiAodmFsdWUtPmFzU3RyaW5nKHZhbHVlU3RyaW5nKSkgewotICAgICAgICAgICAgaWYgKHZhbHVl
U3RyaW5nID09ICJ3aW5kb3ciIHx8IHZhbHVlU3RyaW5nID09ICJ0YWIiKQotICAgICAgICAgICAg
ICAgIHR5cGVIaW50ID0gdmFsdWVTdHJpbmc7Ci0gICAgICAgIH0gZWxzZSBpZiAoIXZhbHVlLT5p
c051bGwoKSkgeworICAgIGlmIChhdXRvIHZhbHVlID0gcGFyYW1ldGVycy0+Z2V0VmFsdWUoInR5
cGUiX3MpKSB7CisgICAgICAgIGF1dG8gdmFsdWVTdHJpbmcgPSB2YWx1ZS0+YXNTdHJpbmcoKTsK
KyAgICAgICAgaWYgKHZhbHVlU3RyaW5nID09ICJ3aW5kb3ciIHx8IHZhbHVlU3RyaW5nID09ICJ0
YWIiKQorICAgICAgICAgICAgdHlwZUhpbnQgPSB2YWx1ZVN0cmluZzsKKyAgICAgICAgZWxzZSBp
ZiAoIXZhbHVlLT5pc051bGwoKSkgewogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29t
bWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OkludmFsaWRBcmd1bWVu
dCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC0xMTk3LDggKzExOTYsOCBA
QCB2b2lkIFdlYkRyaXZlclNlcnZpY2U6OnN3aXRjaFRvRnJhbWUoUmVmUHRyPEpTT046Ok9iamVj
dD4mJiBwYXJhbWV0ZXJzLCBGdW5jdGlvbgogICAgIGlmICghZmluZFNlc3Npb25PckNvbXBsZXRl
V2l0aEVycm9yKCpwYXJhbWV0ZXJzLCBjb21wbGV0aW9uSGFuZGxlcikpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gZnJhbWVJRDsKLSAgICBpZiAoIXBhcmFtZXRl
cnMtPmdldFZhbHVlKCJpZCJfcywgZnJhbWVJRCkpIHsKKyAgICBhdXRvIGZyYW1lSUQgPSBwYXJh
bWV0ZXJzLT5nZXRWYWx1ZSgiaWQiX3MpOworICAgIGlmICghZnJhbWVJRCkgewogICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9y
Q29kZTo6SW52YWxpZEFyZ3VtZW50KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xMjE0
LDggKzEyMTMsNyBAQCB2b2lkIFdlYkRyaXZlclNlcnZpY2U6OnN3aXRjaFRvRnJhbWUoUmVmUHRy
PEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzLCBGdW5jdGlvbgogICAgICAgICB9CiAgICAgICAg
IGJyZWFrOwogICAgIGNhc2UgSlNPTjo6VmFsdWU6OlR5cGU6Ok9iamVjdDogewotICAgICAgICBS
ZWZQdHI8SlNPTjo6T2JqZWN0PiBmcmFtZUlET2JqZWN0OwotICAgICAgICBmcmFtZUlELT5hc09i
amVjdChmcmFtZUlET2JqZWN0KTsKKyAgICAgICAgYXV0byBmcmFtZUlET2JqZWN0ID0gZnJhbWVJ
RC0+YXNPYmplY3QoKTsKICAgICAgICAgaWYgKGZyYW1lSURPYmplY3QtPmZpbmQoU2Vzc2lvbjo6
d2ViRWxlbWVudElkZW50aWZpZXIoKSkgPT0gZnJhbWVJRE9iamVjdC0+ZW5kKCkpIHsKICAgICAg
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3Vs
dDo6RXJyb3JDb2RlOjpJbnZhbGlkQXJndW1lbnQpKTsKICAgICAgICAgICAgIHJldHVybjsKQEAg
LTEyNTYsOCArMTI1NCw4IEBAIHZvaWQgV2ViRHJpdmVyU2VydmljZTo6c3dpdGNoVG9QYXJlbnRG
cmFtZShSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMsIEZ1CiAKIHN0YXRpYyBPcHRp
b25hbDxTdHJpbmc+IGZpbmRFbGVtZW50T3JDb21wbGV0ZVdpdGhFcnJvcihKU09OOjpPYmplY3Qm
IHBhcmFtZXRlcnMsIEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSZXN1bHQmJik+JiBjb21wbGV0aW9u
SGFuZGxlcikKIHsKLSAgICBTdHJpbmcgZWxlbWVudElEOwotICAgIGlmICghcGFyYW1ldGVycy5n
ZXRTdHJpbmcoImVsZW1lbnRJZCJfcywgZWxlbWVudElEKSB8fCBlbGVtZW50SUQuaXNFbXB0eSgp
KSB7CisgICAgYXV0byBlbGVtZW50SUQgPSBwYXJhbWV0ZXJzLmdldFN0cmluZygiZWxlbWVudElk
Il9zKTsKKyAgICBpZiAoZWxlbWVudElELmlzRW1wdHkoKSkgewogICAgICAgICBjb21wbGV0aW9u
SGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6SW52
YWxpZEFyZ3VtZW50KSk7CiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgfQpAQCAt
MTI3NywxMSArMTI3NSwxMyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNWYWxpZFN0cmF0ZWd5KGNv
bnN0IFN0cmluZyYgc3RyYXRlZ3kpCiAKIHN0YXRpYyBib29sIGZpbmRTdHJhdGVneUFuZFNlbGVj
dG9yT3JDb21wbGV0ZVdpdGhFcnJvcihKU09OOjpPYmplY3QmIHBhcmFtZXRlcnMsIEZ1bmN0aW9u
PHZvaWQgKENvbW1hbmRSZXN1bHQmJik+JiBjb21wbGV0aW9uSGFuZGxlciwgU3RyaW5nJiBzdHJh
dGVneSwgU3RyaW5nJiBzZWxlY3RvcikKIHsKLSAgICBpZiAoIXBhcmFtZXRlcnMuZ2V0U3RyaW5n
KCJ1c2luZyJfcywgc3RyYXRlZ3kpIHx8ICFpc1ZhbGlkU3RyYXRlZ3koc3RyYXRlZ3kpKSB7Cisg
ICAgc3RyYXRlZ3kgPSBwYXJhbWV0ZXJzLmdldFN0cmluZygidXNpbmciX3MpOworICAgIGlmICgh
aXNWYWxpZFN0cmF0ZWd5KHN0cmF0ZWd5KSkgewogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihD
b21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6SW52YWxpZEFyZ3Vt
ZW50KSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgaWYgKCFwYXJhbWV0ZXJz
LmdldFN0cmluZygidmFsdWUiX3MsIHNlbGVjdG9yKSkgeworICAgIHNlbGVjdG9yID0gcGFyYW1l
dGVycy5nZXRTdHJpbmcoInZhbHVlIl9zKTsKKyAgICBpZiAoIXNlbGVjdG9yKSB7CiAgICAgICAg
IGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJy
b3JDb2RlOjpJbnZhbGlkQXJndW1lbnQpKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0K
QEAgLTE0MDUsOCArMTQwNSw4IEBAIHZvaWQgV2ViRHJpdmVyU2VydmljZTo6Z2V0RWxlbWVudEF0
dHJpYnV0ZShSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMsIEZ1CiAgICAgaWYgKCFl
bGVtZW50SUQpCiAgICAgICAgIHJldHVybjsKIAotICAgIFN0cmluZyBhdHRyaWJ1dGU7Ci0gICAg
aWYgKCFwYXJhbWV0ZXJzLT5nZXRTdHJpbmcoIm5hbWUiX3MsIGF0dHJpYnV0ZSkpIHsKKyAgICBh
dXRvIGF0dHJpYnV0ZSA9IHBhcmFtZXRlcnMtPmdldFN0cmluZygibmFtZSJfcyk7CisgICAgaWYg
KCFhdHRyaWJ1dGUpIHsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6
ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OkludmFsaWRBcmd1bWVudCkpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQpAQCAtMTQyNSw4ICsxNDI1LDggQEAgdm9pZCBXZWJEcml2ZXJTZXJ2
aWNlOjpnZXRFbGVtZW50UHJvcGVydHkoUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJz
LCBGdW4KICAgICBpZiAoIWVsZW1lbnRJRCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgU3RyaW5n
IGF0dHJpYnV0ZTsKLSAgICBpZiAoIXBhcmFtZXRlcnMtPmdldFN0cmluZygibmFtZSJfcywgYXR0
cmlidXRlKSkgeworICAgIGF1dG8gYXR0cmlidXRlID0gcGFyYW1ldGVycy0+Z2V0U3RyaW5nKCJu
YW1lIl9zKTsKKyAgICBpZiAoIWF0dHJpYnV0ZSkgewogICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6SW52YWxpZEFy
Z3VtZW50KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xNDQ1LDggKzE0NDUsOCBAQCB2
b2lkIFdlYkRyaXZlclNlcnZpY2U6OmdldEVsZW1lbnRDU1NWYWx1ZShSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiYmIHBhcmFtZXRlcnMsIEZ1bgogICAgIGlmICghZWxlbWVudElEKQogICAgICAgICByZXR1
cm47CiAKLSAgICBTdHJpbmcgY3NzUHJvcGVydHk7Ci0gICAgaWYgKCFwYXJhbWV0ZXJzLT5nZXRT
dHJpbmcoIm5hbWUiX3MsIGNzc1Byb3BlcnR5KSkgeworICAgIGF1dG8gY3NzUHJvcGVydHkgPSBw
YXJhbWV0ZXJzLT5nZXRTdHJpbmcoIm5hbWUiX3MpOworICAgIGlmICghY3NzUHJvcGVydHkpIHsK
ICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVz
dWx0OjpFcnJvckNvZGU6OkludmFsaWRBcmd1bWVudCkpOwogICAgICAgICByZXR1cm47CiAgICAg
fQpAQCAtMTU2Myw4ICsxNTYzLDggQEAgdm9pZCBXZWJEcml2ZXJTZXJ2aWNlOjplbGVtZW50U2Vu
ZEtleXMoUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzLCBGdW5jdGkKICAgICBpZiAo
IWVsZW1lbnRJRCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgU3RyaW5nIHRleHQ7Ci0gICAgaWYg
KCFwYXJhbWV0ZXJzLT5nZXRTdHJpbmcoInRleHQiX3MsIHRleHQpIHx8IHRleHQuaXNFbXB0eSgp
KSB7CisgICAgYXV0byB0ZXh0ID0gcGFyYW1ldGVycy0+Z2V0U3RyaW5nKCJ0ZXh0Il9zKTsKKyAg
ICBpZiAodGV4dC5pc0VtcHR5KCkpIHsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFu
ZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OkludmFsaWRBcmd1bWVudCkp
OwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTU4NCwxMSArMTU4NCwxMyBAQCB2b2lkIFdl
YkRyaXZlclNlcnZpY2U6OmdldFBhZ2VTb3VyY2UoUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJh
bWV0ZXJzLCBGdW5jdGlvbgogCiBzdGF0aWMgYm9vbCBmaW5kU2NyaXB0QW5kQXJndW1lbnRzT3JD
b21wbGV0ZVdpdGhFcnJvcihKU09OOjpPYmplY3QmIHBhcmFtZXRlcnMsIEZ1bmN0aW9uPHZvaWQg
KENvbW1hbmRSZXN1bHQmJik+JiBjb21wbGV0aW9uSGFuZGxlciwgU3RyaW5nJiBzY3JpcHQsIFJl
ZlB0cjxKU09OOjpBcnJheT4mIGFyZ3VtZW50cykKIHsKLSAgICBpZiAoIXBhcmFtZXRlcnMuZ2V0
U3RyaW5nKCJzY3JpcHQiX3MsIHNjcmlwdCkpIHsKKyAgICBzY3JpcHQgPSBwYXJhbWV0ZXJzLmdl
dFN0cmluZygic2NyaXB0Il9zKTsKKyAgICBpZiAoIXNjcmlwdCkgewogICAgICAgICBjb21wbGV0
aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6
SW52YWxpZEFyZ3VtZW50KSk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgaWYg
KCFwYXJhbWV0ZXJzLmdldEFycmF5KCJhcmdzIl9zLCBhcmd1bWVudHMpKSB7CisgICAgYXJndW1l
bnRzID0gcGFyYW1ldGVycy5nZXRBcnJheSgiYXJncyJfcyk7CisgICAgaWYgKCFhcmd1bWVudHMp
IHsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5k
UmVzdWx0OjpFcnJvckNvZGU6OkludmFsaWRBcmd1bWVudCkpOwogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQpAQCAtMTY2MCw4ICsxNjYyLDggQEAgdm9pZCBXZWJEcml2ZXJTZXJ2aWNlOjpn
ZXROYW1lZENvb2tpZShSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMsIEZ1bmN0aW8K
ICAgICBpZiAoIWZpbmRTZXNzaW9uT3JDb21wbGV0ZVdpdGhFcnJvcigqcGFyYW1ldGVycywgY29t
cGxldGlvbkhhbmRsZXIpKQogICAgICAgICByZXR1cm47CiAKLSAgICBTdHJpbmcgbmFtZTsKLSAg
ICBpZiAoIXBhcmFtZXRlcnMtPmdldFN0cmluZygibmFtZSJfcywgbmFtZSkpIHsKKyAgICBhdXRv
IG5hbWUgPSBwYXJhbWV0ZXJzLT5nZXRTdHJpbmcoIm5hbWUiX3MpOworICAgIGlmICghbmFtZSkg
ewogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRS
ZXN1bHQ6OkVycm9yQ29kZTo6SW52YWxpZEFyZ3VtZW50KSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CkBAIC0xNjc4LDM3ICsxNjgwLDQwIEBAIHZvaWQgV2ViRHJpdmVyU2VydmljZTo6Z2V0TmFt
ZWRDb29raWUoUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzLCBGdW5jdGlvCiBzdGF0
aWMgT3B0aW9uYWw8U2Vzc2lvbjo6Q29va2llPiBkZXNlcmlhbGl6ZUNvb2tpZShKU09OOjpPYmpl
Y3QmIGNvb2tpZU9iamVjdCkKIHsKICAgICBTZXNzaW9uOjpDb29raWUgY29va2llOwotICAgIGlm
ICghY29va2llT2JqZWN0LmdldFN0cmluZygibmFtZSJfcywgY29va2llLm5hbWUpIHx8IGNvb2tp
ZS5uYW1lLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICBpZiAo
IWNvb2tpZU9iamVjdC5nZXRTdHJpbmcoInZhbHVlIl9zLCBjb29raWUudmFsdWUpIHx8IGNvb2tp
ZS52YWx1ZS5pc0VtcHR5KCkpCisKKyAgICBjb29raWUubmFtZSA9IGNvb2tpZU9iamVjdC5nZXRT
dHJpbmcoIm5hbWUiX3MpOworICAgIGlmIChjb29raWUubmFtZS5pc0VtcHR5KCkpCiAgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHZhbHVlOwot
ICAgIGlmIChjb29raWVPYmplY3QuZ2V0VmFsdWUoInBhdGgiX3MsIHZhbHVlKSkgewotICAgICAg
ICBTdHJpbmcgcGF0aDsKLSAgICAgICAgaWYgKCF2YWx1ZS0+YXNTdHJpbmcocGF0aCkpCisgICAg
Y29va2llLnZhbHVlID0gY29va2llT2JqZWN0LmdldFN0cmluZygidmFsdWUiX3MpOworICAgIGlm
IChjb29raWUudmFsdWUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owor
CisgICAgaWYgKGF1dG8gdmFsdWUgPSBjb29raWVPYmplY3QuZ2V0VmFsdWUoInBhdGgiX3MpKSB7
CisgICAgICAgIGF1dG8gcGF0aCA9IHZhbHVlLT5hc1N0cmluZygpOworICAgICAgICBpZiAoIXBh
dGgpCiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAgICBjb29raWUucGF0
aCA9IHBhdGg7CiAgICAgfQotICAgIGlmIChjb29raWVPYmplY3QuZ2V0VmFsdWUoImRvbWFpbiJf
cywgdmFsdWUpKSB7Ci0gICAgICAgIFN0cmluZyBkb21haW47Ci0gICAgICAgIGlmICghdmFsdWUt
PmFzU3RyaW5nKGRvbWFpbikpCisgICAgaWYgKGF1dG8gdmFsdWUgPSBjb29raWVPYmplY3QuZ2V0
VmFsdWUoImRvbWFpbiJfcykpIHsKKyAgICAgICAgYXV0byBkb21haW4gPSB2YWx1ZS0+YXNTdHJp
bmcoKTsKKyAgICAgICAgaWYgKCFkb21haW4pCiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwogICAgICAgICBjb29raWUuZG9tYWluID0gZG9tYWluOwogICAgIH0KLSAgICBpZiAoY29v
a2llT2JqZWN0LmdldFZhbHVlKCJzZWN1cmUiX3MsIHZhbHVlKSkgewotICAgICAgICBib29sIHNl
Y3VyZTsKLSAgICAgICAgaWYgKCF2YWx1ZS0+YXNCb29sZWFuKHNlY3VyZSkpCisgICAgaWYgKGF1
dG8gdmFsdWUgPSBjb29raWVPYmplY3QuZ2V0VmFsdWUoInNlY3VyZSJfcykpIHsKKyAgICAgICAg
YXV0byBzZWN1cmUgPSB2YWx1ZS0+YXNCb29sZWFuKCk7CisgICAgICAgIGlmICghc2VjdXJlKQog
ICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAgICAgY29va2llLnNlY3VyZSA9
IHNlY3VyZTsKICAgICB9Ci0gICAgaWYgKGNvb2tpZU9iamVjdC5nZXRWYWx1ZSgiaHR0cE9ubHki
X3MsIHZhbHVlKSkgewotICAgICAgICBib29sIGh0dHBPbmx5OwotICAgICAgICBpZiAoIXZhbHVl
LT5hc0Jvb2xlYW4oaHR0cE9ubHkpKQorICAgIGlmIChhdXRvIHZhbHVlID0gY29va2llT2JqZWN0
LmdldFZhbHVlKCJodHRwT25seSJfcykpIHsKKyAgICAgICAgYXV0byBodHRwT25seSA9IHZhbHVl
LT5hc0Jvb2xlYW4oKTsKKyAgICAgICAgaWYgKCFodHRwT25seSkKICAgICAgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CiAgICAgICAgIGNvb2tpZS5odHRwT25seSA9IGh0dHBPbmx5OwogICAg
IH0KLSAgICBpZiAoY29va2llT2JqZWN0LmdldFZhbHVlKCJleHBpcnkiX3MsIHZhbHVlKSkgewor
ICAgIGlmIChhdXRvIHZhbHVlID0gY29va2llT2JqZWN0LmdldFZhbHVlKCJleHBpcnkiX3MpKSB7
CiAgICAgICAgIGF1dG8gZXhwaXJ5ID0gdW5zaWduZWRWYWx1ZSgqdmFsdWUpOwogICAgICAgICBp
ZiAoIWV4cGlyeSkKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CkBAIC0xNzI1LDgg
KzE3MzAsOCBAQCB2b2lkIFdlYkRyaXZlclNlcnZpY2U6OmFkZENvb2tpZShSZWZQdHI8SlNPTjo6
T2JqZWN0PiYmIHBhcmFtZXRlcnMsIEZ1bmN0aW9uPHZvaQogICAgIGlmICghZmluZFNlc3Npb25P
ckNvbXBsZXRlV2l0aEVycm9yKCpwYXJhbWV0ZXJzLCBjb21wbGV0aW9uSGFuZGxlcikpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IGNvb2tpZU9iamVjdDsKLSAg
ICBpZiAoIXBhcmFtZXRlcnMtPmdldE9iamVjdCgiY29va2llIl9zLCBjb29raWVPYmplY3QpKSB7
CisgICAgYXV0byBjb29raWVPYmplY3QgPSBwYXJhbWV0ZXJzLT5nZXRPYmplY3QoImNvb2tpZSJf
cyk7CisgICAgaWYgKCFjb29raWVPYmplY3QpIHsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIo
Q29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OkludmFsaWRBcmd1
bWVudCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTc1Myw4ICsxNzU4LDggQEAgdm9p
ZCBXZWJEcml2ZXJTZXJ2aWNlOjpkZWxldGVDb29raWUoUmVmUHRyPEpTT046Ok9iamVjdD4mJiBw
YXJhbWV0ZXJzLCBGdW5jdGlvbjwKICAgICBpZiAoIWZpbmRTZXNzaW9uT3JDb21wbGV0ZVdpdGhF
cnJvcigqcGFyYW1ldGVycywgY29tcGxldGlvbkhhbmRsZXIpKQogICAgICAgICByZXR1cm47CiAK
LSAgICBTdHJpbmcgbmFtZTsKLSAgICBpZiAoIXBhcmFtZXRlcnMtPmdldFN0cmluZygibmFtZSJf
cywgbmFtZSkpIHsKK2F1dG8gbmFtZSA9IHBhcmFtZXRlcnMtPmdldFN0cmluZygibmFtZSJfcyk7
CisgICAgaWYgKCFuYW1lKSB7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1
bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpJbnZhbGlkQXJndW1lbnQpKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTE3ODYsOCArMTc5MSw4IEBAIHZvaWQgV2ViRHJpdmVy
U2VydmljZTo6ZGVsZXRlQWxsQ29va2llcyhSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRl
cnMsIEZ1bmN0CiAKIHN0YXRpYyBib29sIHByb2Nlc3NQYXVzZUFjdGlvbihKU09OOjpPYmplY3Qm
IGFjdGlvbkl0ZW0sIEFjdGlvbiYgYWN0aW9uLCBPcHRpb25hbDxTdHJpbmc+JiBlcnJvck1lc3Nh
Z2UpCiB7Ci0gICAgUmVmUHRyPEpTT046OlZhbHVlPiBkdXJhdGlvblZhbHVlOwotICAgIGlmICgh
YWN0aW9uSXRlbS5nZXRWYWx1ZSgiZHVyYXRpb24iX3MsIGR1cmF0aW9uVmFsdWUpKQorICAgIGF1
dG8gZHVyYXRpb25WYWx1ZSA9IGFjdGlvbkl0ZW0uZ2V0VmFsdWUoImR1cmF0aW9uIl9zKTsKKyAg
ICBpZiAoIWR1cmF0aW9uVmFsdWUpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgYXV0byBk
dXJhdGlvbiA9IHVuc2lnbmVkVmFsdWUoKmR1cmF0aW9uVmFsdWUpOwpAQCAtMTgwMiw4ICsxODA3
LDcgQEAgc3RhdGljIGJvb2wgcHJvY2Vzc1BhdXNlQWN0aW9uKEpTT046Ok9iamVjdCYgYWN0aW9u
SXRlbSwgQWN0aW9uJiBhY3Rpb24sIE9wdGlvbmEKIAogc3RhdGljIE9wdGlvbmFsPEFjdGlvbj4g
cHJvY2Vzc051bGxBY3Rpb24oY29uc3QgU3RyaW5nJiBpZCwgSlNPTjo6T2JqZWN0JiBhY3Rpb25J
dGVtLCBPcHRpb25hbDxTdHJpbmc+JiBlcnJvck1lc3NhZ2UpCiB7Ci0gICAgU3RyaW5nIHN1YnR5
cGU7Ci0gICAgYWN0aW9uSXRlbS5nZXRTdHJpbmcoInR5cGUiX3MsIHN1YnR5cGUpOworICAgIGF1
dG8gc3VidHlwZSA9IGFjdGlvbkl0ZW0uZ2V0U3RyaW5nKCJ0eXBlIl9zKTsKICAgICBpZiAoc3Vi
dHlwZSAhPSAicGF1c2UiKSB7CiAgICAgICAgIGVycm9yTWVzc2FnZSA9IFN0cmluZygiVGhlIHBh
cmFtZXRlciAndHlwZScgaW4gbnVsbCBhY3Rpb24gaXMgaW52YWxpZCBvciBtaXNzaW5nIik7CiAg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CkBAIC0xODE5LDggKzE4MjMsNyBAQCBzdGF0aWMg
T3B0aW9uYWw8QWN0aW9uPiBwcm9jZXNzTnVsbEFjdGlvbihjb25zdCBTdHJpbmcmIGlkLCBKU09O
OjpPYmplY3QmIGFjdGlvbgogc3RhdGljIE9wdGlvbmFsPEFjdGlvbj4gcHJvY2Vzc0tleUFjdGlv
bihjb25zdCBTdHJpbmcmIGlkLCBKU09OOjpPYmplY3QmIGFjdGlvbkl0ZW0sIE9wdGlvbmFsPFN0
cmluZz4mIGVycm9yTWVzc2FnZSkKIHsKICAgICBBY3Rpb246OlN1YnR5cGUgYWN0aW9uU3VidHlw
ZTsKLSAgICBTdHJpbmcgc3VidHlwZTsKLSAgICBhY3Rpb25JdGVtLmdldFN0cmluZygidHlwZSJf
cywgc3VidHlwZSk7CisgICAgYXV0byBzdWJ0eXBlID0gYWN0aW9uSXRlbS5nZXRTdHJpbmcoInR5
cGUiX3MpOwogICAgIGlmIChzdWJ0eXBlID09ICJwYXVzZSIpCiAgICAgICAgIGFjdGlvblN1YnR5
cGUgPSBBY3Rpb246OlN1YnR5cGU6OlBhdXNlOwogICAgIGVsc2UgaWYgKHN1YnR5cGUgPT0gImtl
eVVwIikKQEAgLTE4NDEsMTMgKzE4NDQsMTMgQEAgc3RhdGljIE9wdGlvbmFsPEFjdGlvbj4gcHJv
Y2Vzc0tleUFjdGlvbihjb25zdCBTdHJpbmcmIGlkLCBKU09OOjpPYmplY3QmIGFjdGlvbkkKICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBBY3Rpb246OlN1YnR5cGU6OktleVVwOgogICAgIGNhc2Ug
QWN0aW9uOjpTdWJ0eXBlOjpLZXlEb3duOiB7Ci0gICAgICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4g
a2V5VmFsdWU7Ci0gICAgICAgIGlmICghYWN0aW9uSXRlbS5nZXRWYWx1ZSgidmFsdWUiX3MsIGtl
eVZhbHVlKSkgeworICAgICAgICBhdXRvIGtleVZhbHVlID0gYWN0aW9uSXRlbS5nZXRWYWx1ZSgi
dmFsdWUiX3MpOworICAgICAgICBpZiAoIWtleVZhbHVlKSB7CiAgICAgICAgICAgICBlcnJvck1l
c3NhZ2UgPSBTdHJpbmcoIlRoZSBwYXJhbWF0ZXIgJ3ZhbHVlJyBpcyBtaXNzaW5nIGZvciBrZXkg
dXAvZG93biBhY3Rpb24iKTsKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAg
ICAgIH0KLSAgICAgICAgU3RyaW5nIGtleTsKLSAgICAgICAgaWYgKCFrZXlWYWx1ZS0+YXNTdHJp
bmcoa2V5KSB8fCBrZXkuaXNFbXB0eSgpKSB7CisgICAgICAgIGF1dG8ga2V5ID0ga2V5VmFsdWUt
PmFzU3RyaW5nKCk7CisgICAgICAgIGlmICgha2V5LmlzRW1wdHkoKSkgewogICAgICAgICAgICAg
ZXJyb3JNZXNzYWdlID0gU3RyaW5nKCJUaGUgcGFyYW1hdGVyICd2YWx1ZScgaXMgaW52YWxpZCBm
b3Iga2V5IHVwL2Rvd24gYWN0aW9uIik7CiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OwogICAgICAgICB9CkBAIC0xODg0LDggKzE4ODcsNyBAQCBzdGF0aWMgTW91c2VCdXR0b24gYWN0
aW9uTW91c2VCdXR0b24odW5zaWduZWQgYnV0dG9uKQogc3RhdGljIE9wdGlvbmFsPEFjdGlvbj4g
cHJvY2Vzc1BvaW50ZXJBY3Rpb24oY29uc3QgU3RyaW5nJiBpZCwgUG9pbnRlclBhcmFtZXRlcnMm
IHBhcmFtZXRlcnMsIEpTT046Ok9iamVjdCYgYWN0aW9uSXRlbSwgT3B0aW9uYWw8U3RyaW5nPiYg
ZXJyb3JNZXNzYWdlKQogewogICAgIEFjdGlvbjo6U3VidHlwZSBhY3Rpb25TdWJ0eXBlOwotICAg
IFN0cmluZyBzdWJ0eXBlOwotICAgIGFjdGlvbkl0ZW0uZ2V0U3RyaW5nKCJ0eXBlIl9zLCBzdWJ0
eXBlKTsKKyAgICBhdXRvIHN1YnR5cGUgPSBhY3Rpb25JdGVtLmdldFN0cmluZygidHlwZSJfcyk7
CiAgICAgaWYgKHN1YnR5cGUgPT0gInBhdXNlIikKICAgICAgICAgYWN0aW9uU3VidHlwZSA9IEFj
dGlvbjo6U3VidHlwZTo6UGF1c2U7CiAgICAgZWxzZSBpZiAoc3VidHlwZSA9PSAicG9pbnRlclVw
IikKQEAgLTE5MTEsOCArMTkxMyw4IEBAIHN0YXRpYyBPcHRpb25hbDxBY3Rpb24+IHByb2Nlc3NQ
b2ludGVyQWN0aW9uKGNvbnN0IFN0cmluZyYgaWQsIFBvaW50ZXJQYXJhbWV0ZXJzCiAgICAgICAg
IGJyZWFrOwogICAgIGNhc2UgQWN0aW9uOjpTdWJ0eXBlOjpQb2ludGVyVXA6CiAgICAgY2FzZSBB
Y3Rpb246OlN1YnR5cGU6OlBvaW50ZXJEb3duOiB7Ci0gICAgICAgIFJlZlB0cjxKU09OOjpWYWx1
ZT4gYnV0dG9uVmFsdWU7Ci0gICAgICAgIGlmICghYWN0aW9uSXRlbS5nZXRWYWx1ZSgiYnV0dG9u
Il9zLCBidXR0b25WYWx1ZSkpIHsKKyAgICAgICAgYXV0byBidXR0b25WYWx1ZSA9IGFjdGlvbkl0
ZW0uZ2V0VmFsdWUoImJ1dHRvbiJfcyk7CisgICAgICAgIGlmICghYnV0dG9uVmFsdWUpIHsKICAg
ICAgICAgICAgIGVycm9yTWVzc2FnZSA9IFN0cmluZygiVGhlIHBhcmFtYXRlciAnYnV0dG9uJyBp
cyBtaXNzaW5nIGZvciBwb2ludGVyIHVwL2Rvd24gYWN0aW9uIik7CiAgICAgICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwogICAgICAgICB9CkBAIC0xOTI1LDggKzE5MjcsNyBAQCBzdGF0aWMg
T3B0aW9uYWw8QWN0aW9uPiBwcm9jZXNzUG9pbnRlckFjdGlvbihjb25zdCBTdHJpbmcmIGlkLCBQ
b2ludGVyUGFyYW1ldGVycwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBBY3Rpb246
OlN1YnR5cGU6OlBvaW50ZXJNb3ZlOiB7Ci0gICAgICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gZHVy
YXRpb25WYWx1ZTsKLSAgICAgICAgaWYgKGFjdGlvbkl0ZW0uZ2V0VmFsdWUoImR1cmF0aW9uIl9z
LCBkdXJhdGlvblZhbHVlKSkgeworICAgICAgICBpZiAoYXV0byBkdXJhdGlvblZhbHVlID0gYWN0
aW9uSXRlbS5nZXRWYWx1ZSgiZHVyYXRpb24iX3MpKSB7CiAgICAgICAgICAgICBhdXRvIGR1cmF0
aW9uID0gdW5zaWduZWRWYWx1ZSgqZHVyYXRpb25WYWx1ZSk7CiAgICAgICAgICAgICBpZiAoIWR1
cmF0aW9uKSB7CiAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gU3RyaW5nKCJUaGUgcGFy
YW1ldGVyICdkdXJhdGlvbicgaXMgaW52YWxpZCBpbiBwb2ludGVyIG1vdmUgYWN0aW9uIik7CkBA
IC0xOTM1LDIwICsxOTM2LDE2IEBAIHN0YXRpYyBPcHRpb25hbDxBY3Rpb24+IHByb2Nlc3NQb2lu
dGVyQWN0aW9uKGNvbnN0IFN0cmluZyYgaWQsIFBvaW50ZXJQYXJhbWV0ZXJzCiAgICAgICAgICAg
ICBhY3Rpb24uZHVyYXRpb24gPSBkdXJhdGlvbi52YWx1ZSgpOwogICAgICAgICB9CiAKLSAgICAg
ICAgUmVmUHRyPEpTT046OlZhbHVlPiBvcmlnaW5WYWx1ZTsKLSAgICAgICAgaWYgKGFjdGlvbkl0
ZW0uZ2V0VmFsdWUoIm9yaWdpbiJfcywgb3JpZ2luVmFsdWUpKSB7Ci0gICAgICAgICAgICBpZiAo
b3JpZ2luVmFsdWUtPnR5cGUoKSA9PSBKU09OOjpWYWx1ZTo6VHlwZTo6T2JqZWN0KSB7Ci0gICAg
ICAgICAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gb3JpZ2luT2JqZWN0OwotICAgICAgICAg
ICAgICAgIG9yaWdpblZhbHVlLT5hc09iamVjdChvcmlnaW5PYmplY3QpOwotICAgICAgICAgICAg
ICAgIFN0cmluZyBlbGVtZW50SUQ7Ci0gICAgICAgICAgICAgICAgaWYgKCFvcmlnaW5PYmplY3Qt
PmdldFN0cmluZyhTZXNzaW9uOjp3ZWJFbGVtZW50SWRlbnRpZmllcigpLCBlbGVtZW50SUQpKSB7
CisgICAgICAgIGlmIChhdXRvIG9yaWdpblZhbHVlID0gYWN0aW9uSXRlbS5nZXRWYWx1ZSgib3Jp
Z2luIl9zKSkgeworICAgICAgICAgICAgaWYgKGF1dG8gb3JpZ2luT2JqZWN0ID0gb3JpZ2luVmFs
dWUtPmFzT2JqZWN0KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvIGVsZW1lbnRJRCA9IG9yaWdp
bk9iamVjdC0+Z2V0U3RyaW5nKFNlc3Npb246OndlYkVsZW1lbnRJZGVudGlmaWVyKCkpOworICAg
ICAgICAgICAgICAgIGlmICghZWxlbWVudElEKSB7CiAgICAgICAgICAgICAgICAgICAgIGVycm9y
TWVzc2FnZSA9IFN0cmluZygiVGhlIHBhcmFtZXRlciAnb3JpZ2luJyBpcyBub3QgYSB2YWxpZCB3
ZWIgZWxlbWVudCBvYmplY3QgaW4gcG9pbnRlciBtb3ZlIGFjdGlvbiIpOwogICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICBhY3Rpb24ub3JpZ2luID0gUG9pbnRlck9yaWdpbiB7IFBvaW50ZXJPcmlnaW46OlR5
cGU6OkVsZW1lbnQsIGVsZW1lbnRJRCB9OwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICBTdHJpbmcgb3JpZ2luOwotICAgICAgICAgICAgICAgIG9yaWdpblZhbHVlLT5hc1N0
cmluZyhvcmlnaW4pOworICAgICAgICAgICAgICAgIGF1dG8gb3JpZ2luID0gb3JpZ2luVmFsdWUt
PmFzU3RyaW5nKCk7CiAgICAgICAgICAgICAgICAgaWYgKG9yaWdpbiA9PSAidmlld3BvcnQiKQog
ICAgICAgICAgICAgICAgICAgICBhY3Rpb24ub3JpZ2luID0gUG9pbnRlck9yaWdpbiB7IFBvaW50
ZXJPcmlnaW46OlR5cGU6OlZpZXdwb3J0LCBXVEY6Om51bGxvcHQgfTsKICAgICAgICAgICAgICAg
ICBlbHNlIGlmIChvcmlnaW4gPT0gInBvaW50ZXIiKQpAQCAtMTk2MSw4ICsxOTU4LDcgQEAgc3Rh
dGljIE9wdGlvbmFsPEFjdGlvbj4gcHJvY2Vzc1BvaW50ZXJBY3Rpb24oY29uc3QgU3RyaW5nJiBp
ZCwgUG9pbnRlclBhcmFtZXRlcnMKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBhY3Rpb24u
b3JpZ2luID0gUG9pbnRlck9yaWdpbiB7IFBvaW50ZXJPcmlnaW46OlR5cGU6OlZpZXdwb3J0LCBX
VEY6Om51bGxvcHQgfTsKIAotICAgICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHhWYWx1ZTsKLSAg
ICAgICAgaWYgKGFjdGlvbkl0ZW0uZ2V0VmFsdWUoIngiX3MsIHhWYWx1ZSkpIHsKKyAgICAgICAg
aWYgKGF1dG8geFZhbHVlID0gYWN0aW9uSXRlbS5nZXRWYWx1ZSgieCJfcykpIHsKICAgICAgICAg
ICAgIGF1dG8geCA9IHZhbHVlQXNOdW1iZXJJblJhbmdlKCp4VmFsdWUsIElOVF9NSU4pOwogICAg
ICAgICAgICAgaWYgKCF4KSB7CiAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gU3RyaW5n
KCJUaGUgcGFyYW1hdGVyICd4JyBpcyBpbnZhbGlkIGZvciBwb2ludGVyIG1vdmUgYWN0aW9uIik7
CkBAIC0xOTcxLDggKzE5NjcsNyBAQCBzdGF0aWMgT3B0aW9uYWw8QWN0aW9uPiBwcm9jZXNzUG9p
bnRlckFjdGlvbihjb25zdCBTdHJpbmcmIGlkLCBQb2ludGVyUGFyYW1ldGVycwogICAgICAgICAg
ICAgYWN0aW9uLnggPSB4LnZhbHVlKCk7CiAgICAgICAgIH0KIAotICAgICAgICBSZWZQdHI8SlNP
Tjo6VmFsdWU+IHlWYWx1ZTsKLSAgICAgICAgaWYgKGFjdGlvbkl0ZW0uZ2V0VmFsdWUoInkiX3Ms
IHlWYWx1ZSkpIHsKKyAgICAgICAgaWYgKGF1dG8geVZhbHVlID0gYWN0aW9uSXRlbS5nZXRWYWx1
ZSgieSJfcykpIHsKICAgICAgICAgICAgIGF1dG8geSA9IHZhbHVlQXNOdW1iZXJJblJhbmdlKCp5
VmFsdWUsIElOVF9NSU4pOwogICAgICAgICAgICAgaWYgKCF5KSB7CiAgICAgICAgICAgICAgICAg
ZXJyb3JNZXNzYWdlID0gU3RyaW5nKCJUaGUgcGFyYW1hdGVyICd5JyBpcyBpbnZhbGlkIGZvciBw
b2ludGVyIG1vdmUgYWN0aW9uIik7CkBAIC0xOTk1LDE4ICsxOTkwLDE5IEBAIHN0YXRpYyBPcHRp
b25hbDxBY3Rpb24+IHByb2Nlc3NQb2ludGVyQWN0aW9uKGNvbnN0IFN0cmluZyYgaWQsIFBvaW50
ZXJQYXJhbWV0ZXJzCiBzdGF0aWMgT3B0aW9uYWw8UG9pbnRlclBhcmFtZXRlcnM+IHByb2Nlc3NQ
b2ludGVyUGFyYW1ldGVycyhKU09OOjpPYmplY3QmIGFjdGlvblNlcXVlbmNlLCBPcHRpb25hbDxT
dHJpbmc+JiBlcnJvck1lc3NhZ2UpCiB7CiAgICAgUG9pbnRlclBhcmFtZXRlcnMgcGFyYW1ldGVy
czsKLSAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHBhcmFtZXRlcnNEYXRhVmFsdWU7Ci0gICAgaWYg
KCFhY3Rpb25TZXF1ZW5jZS5nZXRWYWx1ZSgicGFyYW1ldGVycyJfcywgcGFyYW1ldGVyc0RhdGFW
YWx1ZSkpCisKKyAgICBhdXRvIHBhcmFtZXRlcnNEYXRhVmFsdWUgPSBhY3Rpb25TZXF1ZW5jZS5n
ZXRWYWx1ZSgicGFyYW1ldGVycyJfcyk7CisgICAgaWYgKCFwYXJhbWV0ZXJzRGF0YVZhbHVlKQog
ICAgICAgICByZXR1cm4gcGFyYW1ldGVyczsKIAotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBh
cmFtZXRlcnNEYXRhOwotICAgIGlmICghcGFyYW1ldGVyc0RhdGFWYWx1ZS0+YXNPYmplY3QocGFy
YW1ldGVyc0RhdGEpKSB7CisgICAgYXV0byBwYXJhbWV0ZXJzRGF0YSA9IHBhcmFtZXRlcnNEYXRh
VmFsdWUtPmFzT2JqZWN0KCk7CisgICAgaWYgKCFwYXJhbWV0ZXJzRGF0YSkgewogICAgICAgICBl
cnJvck1lc3NhZ2UgPSBTdHJpbmcoIkFjdGlvbiBzZXF1ZW5jZSBwb2ludGVyIHBhcmFtZXRlcnMg
aXMgbm90IGFuIG9iamVjdCIpOwogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIH0K
IAotICAgIFN0cmluZyBwb2ludGVyVHlwZTsKLSAgICBpZiAoIXBhcmFtZXRlcnNEYXRhLT5nZXRT
dHJpbmcoInBvaW50ZXJUeXBlIl9zLCBwb2ludGVyVHlwZSkpCisgICAgYXV0byBwb2ludGVyVHlw
ZSA9IHBhcmFtZXRlcnNEYXRhLT5nZXRTdHJpbmcoInBvaW50ZXJUeXBlIl9zKTsKKyAgICBpZiAo
IXBvaW50ZXJUeXBlKQogICAgICAgICByZXR1cm4gcGFyYW1ldGVyczsKIAogICAgIGlmIChwb2lu
dGVyVHlwZSA9PSAibW91c2UiKQpAQCAtMjAyNSwxNCArMjAyMSwxMyBAQCBzdGF0aWMgT3B0aW9u
YWw8UG9pbnRlclBhcmFtZXRlcnM+IHByb2Nlc3NQb2ludGVyUGFyYW1ldGVycyhKU09OOjpPYmpl
Y3QmIGFjdGlvbgogCiBzdGF0aWMgT3B0aW9uYWw8VmVjdG9yPEFjdGlvbj4+IHByb2Nlc3NJbnB1
dEFjdGlvblNlcXVlbmNlKFNlc3Npb24mIHNlc3Npb24sIEpTT046OlZhbHVlJiBhY3Rpb25TZXF1
ZW5jZVZhbHVlLCBPcHRpb25hbDxTdHJpbmc+JiBlcnJvck1lc3NhZ2UpCiB7Ci0gICAgUmVmUHRy
PEpTT046Ok9iamVjdD4gYWN0aW9uU2VxdWVuY2U7Ci0gICAgaWYgKCFhY3Rpb25TZXF1ZW5jZVZh
bHVlLmFzT2JqZWN0KGFjdGlvblNlcXVlbmNlKSkgeworICAgIGF1dG8gYWN0aW9uU2VxdWVuY2Ug
PSBhY3Rpb25TZXF1ZW5jZVZhbHVlLmFzT2JqZWN0KCk7CisgICAgaWYgKCFhY3Rpb25TZXF1ZW5j
ZSkgewogICAgICAgICBlcnJvck1lc3NhZ2UgPSBTdHJpbmcoIlRoZSBhY3Rpb24gc2VxdWVuY2Ug
aXMgbm90IGFuIG9iamVjdCIpOwogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIH0K
IAotICAgIFN0cmluZyB0eXBlOwotICAgIGFjdGlvblNlcXVlbmNlLT5nZXRTdHJpbmcoInR5cGUi
X3MsIHR5cGUpOworICAgIGF1dG8gdHlwZSA9IGFjdGlvblNlcXVlbmNlLT5nZXRTdHJpbmcoInR5
cGUiX3MpOwogICAgIElucHV0U291cmNlOjpUeXBlIGlucHV0U291cmNlVHlwZTsKICAgICBpZiAo
dHlwZSA9PSAia2V5IikKICAgICAgICAgaW5wdXRTb3VyY2VUeXBlID0gSW5wdXRTb3VyY2U6OlR5
cGU6OktleTsKQEAgLTIwNDUsOCArMjA0MCw4IEBAIHN0YXRpYyBPcHRpb25hbDxWZWN0b3I8QWN0
aW9uPj4gcHJvY2Vzc0lucHV0QWN0aW9uU2VxdWVuY2UoU2Vzc2lvbiYgc2Vzc2lvbiwgSlNPCiAg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgfQogCi0gICAgU3RyaW5nIGlkOwotICAg
IGlmICghYWN0aW9uU2VxdWVuY2UtPmdldFN0cmluZygiaWQiX3MsIGlkKSkgeworICAgIGF1dG8g
aWQgPSBhY3Rpb25TZXF1ZW5jZS0+Z2V0U3RyaW5nKCJpZCJfcyk7CisgICAgaWYgKCFpZCkgewog
ICAgICAgICBlcnJvck1lc3NhZ2UgPSBTdHJpbmcoIlRoZSBwYXJhbWV0ZXIgJ2lkJyBpcyBpbnZh
bGlkIG9yIG1pc3NpbmcgaW4gYWN0aW9uIHNlcXVlbmNlIik7CiAgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CiAgICAgfQpAQCAtMjA3Miw4ICsyMDY3LDggQEAgc3RhdGljIE9wdGlvbmFsPFZl
Y3RvcjxBY3Rpb24+PiBwcm9jZXNzSW5wdXRBY3Rpb25TZXF1ZW5jZShTZXNzaW9uJiBzZXNzaW9u
LCBKU08KICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICB9CiAKLSAgICBSZWZQdHI8
SlNPTjo6QXJyYXk+IGFjdGlvbkl0ZW1zOwotICAgIGlmICghYWN0aW9uU2VxdWVuY2UtPmdldEFy
cmF5KCJhY3Rpb25zIl9zLCBhY3Rpb25JdGVtcykpIHsKKyAgICBhdXRvIGFjdGlvbkl0ZW1zID0g
YWN0aW9uU2VxdWVuY2UtPmdldEFycmF5KCJhY3Rpb25zIl9zKTsKKyAgICBpZiAoIWFjdGlvbkl0
ZW1zKSB7CiAgICAgICAgIGVycm9yTWVzc2FnZSA9IFN0cmluZygiVGhlIHBhcmFtZXRlciAnYWN0
aW9ucycgaXMgaW52YWxpZCBvciBub3QgcHJlc2VudCBpbiBhY3Rpb24gc2VxdWVuY2UiKTsKICAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICB9CkBAIC0yMDgxLDkgKzIwNzYsOCBAQCBz
dGF0aWMgT3B0aW9uYWw8VmVjdG9yPEFjdGlvbj4+IHByb2Nlc3NJbnB1dEFjdGlvblNlcXVlbmNl
KFNlc3Npb24mIHNlc3Npb24sIEpTTwogICAgIFZlY3RvcjxBY3Rpb24+IGFjdGlvbnM7CiAgICAg
dW5zaWduZWQgYWN0aW9uSXRlbXNMZW5ndGggPSBhY3Rpb25JdGVtcy0+bGVuZ3RoKCk7CiAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFjdGlvbkl0ZW1zTGVuZ3RoOyArK2kpIHsKLSAgICAg
ICAgYXV0byBhY3Rpb25JdGVtVmFsdWUgPSBhY3Rpb25JdGVtcy0+Z2V0KGkpOwotICAgICAgICBS
ZWZQdHI8SlNPTjo6T2JqZWN0PiBhY3Rpb25JdGVtOwotICAgICAgICBpZiAoIWFjdGlvbkl0ZW1W
YWx1ZS0+YXNPYmplY3QoYWN0aW9uSXRlbSkpIHsKKyAgICAgICAgYXV0byBhY3Rpb25JdGVtID0g
YWN0aW9uSXRlbXMtPmdldChpKS0+YXNPYmplY3QoKTsKKyAgICAgICAgaWYgKCFhY3Rpb25JdGVt
KSB7CiAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBTdHJpbmcoIkFuIGFjdGlvbiBpbiBhY3Rp
b24gc2VxdWVuY2UgaXMgbm90IGFuIG9iamVjdCIpOwogICAgICAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKICAgICAgICAgfQpAQCAtMjExMSw4ICsyMTA1LDggQEAgdm9pZCBXZWJEcml2ZXJT
ZXJ2aWNlOjpwZXJmb3JtQWN0aW9ucyhSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMs
IEZ1bmN0aW8KICAgICBpZiAoIWZpbmRTZXNzaW9uT3JDb21wbGV0ZVdpdGhFcnJvcigqcGFyYW1l
dGVycywgY29tcGxldGlvbkhhbmRsZXIpKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZWZQdHI8
SlNPTjo6QXJyYXk+IGFjdGlvbnNBcnJheTsKLSAgICBpZiAoIXBhcmFtZXRlcnMtPmdldEFycmF5
KCJhY3Rpb25zIl9zLCBhY3Rpb25zQXJyYXkpKSB7CisgICAgYXV0byBhY3Rpb25zQXJyYXkgPSBw
YXJhbWV0ZXJzLT5nZXRBcnJheSgiYWN0aW9ucyJfcyk7CisgICAgaWYgKCFhY3Rpb25zQXJyYXkp
IHsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5k
UmVzdWx0OjpFcnJvckNvZGU6OkludmFsaWRBcmd1bWVudCwgU3RyaW5nKCJUaGUgcGFyYW1hdGVy
ICdhY3Rpb25zJyBpcyBpbnZhbGlkIG9yIG5vdCBwcmVzZW50IikpKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KQEAgLTIxMjIsNyArMjExNiw3IEBAIHZvaWQgV2ViRHJpdmVyU2VydmljZTo6cGVy
Zm9ybUFjdGlvbnMoUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzLCBGdW5jdGlvCiAg
ICAgdW5zaWduZWQgYWN0aW9uc0FycmF5TGVuZ3RoID0gYWN0aW9uc0FycmF5LT5sZW5ndGgoKTsK
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYWN0aW9uc0FycmF5TGVuZ3RoOyArK2kpIHsK
ICAgICAgICAgYXV0byBhY3Rpb25TZXF1ZW5jZSA9IGFjdGlvbnNBcnJheS0+Z2V0KGkpOwotICAg
ICAgICBhdXRvIGlucHV0U291cmNlQWN0aW9ucyA9IHByb2Nlc3NJbnB1dEFjdGlvblNlcXVlbmNl
KCptX3Nlc3Npb24sICphY3Rpb25TZXF1ZW5jZSwgZXJyb3JNZXNzYWdlKTsKKyAgICAgICAgYXV0
byBpbnB1dFNvdXJjZUFjdGlvbnMgPSBwcm9jZXNzSW5wdXRBY3Rpb25TZXF1ZW5jZSgqbV9zZXNz
aW9uLCBhY3Rpb25TZXF1ZW5jZSwgZXJyb3JNZXNzYWdlKTsKICAgICAgICAgaWYgKCFpbnB1dFNv
dXJjZUFjdGlvbnMpIHsKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1
bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpJbnZhbGlkQXJndW1lbnQsIGVycm9y
TWVzc2FnZS52YWx1ZSgpKSk7CiAgICAgICAgICAgICByZXR1cm47CkBAIC0yMjAyLDggKzIxOTYs
OCBAQCB2b2lkIFdlYkRyaXZlclNlcnZpY2U6OnNlbmRBbGVydFRleHQoUmVmUHRyPEpTT046Ok9i
amVjdD4mJiBwYXJhbWV0ZXJzLCBGdW5jdGlvbgogICAgIGlmICghZmluZFNlc3Npb25PckNvbXBs
ZXRlV2l0aEVycm9yKCpwYXJhbWV0ZXJzLCBjb21wbGV0aW9uSGFuZGxlcikpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIFN0cmluZyB0ZXh0OwotICAgIGlmICghcGFyYW1ldGVycy0+Z2V0U3RyaW5n
KCJ0ZXh0Il9zLCB0ZXh0KSkgeworICAgIGF1dG8gdGV4dCA9IHBhcmFtZXRlcnMtPmdldFN0cmlu
ZygidGV4dCJfcyk7CisgICAgaWYgKCF0ZXh0KSB7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVy
KENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpJbnZhbGlkQXJn
dW1lbnQpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJE
cml2ZXIvV2ViRHJpdmVyU2VydmljZS5oIGIvU291cmNlL1dlYkRyaXZlci9XZWJEcml2ZXJTZXJ2
aWNlLmgKaW5kZXggYTM0YmViOGYwZGQzZDY0MDRjYzk2NzZkZjIwYjQwYjgyMDE5NTgwYi4uZWQ5
ZGIwODg1N2I5NDc0OWY0ZTdhNDhlOGYwYTk2ZjRiNDQzMmIzNSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkRyaXZlci9XZWJEcml2ZXJTZXJ2aWNlLmgKKysrIGIvU291cmNlL1dlYkRyaXZlci9XZWJE
cml2ZXJTZXJ2aWNlLmgKQEAgLTEyMiw4ICsxMjIsOCBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxK
U09OOjpPYmplY3Q+IHZhbGlkYXRlZENhcGFiaWxpdGllcyhjb25zdCBKU09OOjpPYmplY3QmKSBj
b25zdDsKICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBtZXJnZUNhcGFiaWxpdGllcyhjb25zdCBK
U09OOjpPYmplY3QmLCBjb25zdCBKU09OOjpPYmplY3QmKSBjb25zdDsKICAgICBSZWZQdHI8SlNP
Tjo6T2JqZWN0PiBtYXRjaENhcGFiaWxpdGllcyhjb25zdCBKU09OOjpPYmplY3QmKSBjb25zdDsK
LSAgICBib29sIHBsYXRmb3JtVmFsaWRhdGVDYXBhYmlsaXR5KGNvbnN0IFN0cmluZyYsIGNvbnN0
IFJlZlB0cjxKU09OOjpWYWx1ZT4mKSBjb25zdDsKLSAgICBib29sIHBsYXRmb3JtTWF0Y2hDYXBh
YmlsaXR5KGNvbnN0IFN0cmluZyYsIGNvbnN0IFJlZlB0cjxKU09OOjpWYWx1ZT4mKSBjb25zdDsK
KyAgICBib29sIHBsYXRmb3JtVmFsaWRhdGVDYXBhYmlsaXR5KGNvbnN0IFN0cmluZyYsIGNvbnN0
IFJlZjxKU09OOjpWYWx1ZT4mKSBjb25zdDsKKyAgICBib29sIHBsYXRmb3JtTWF0Y2hDYXBhYmls
aXR5KGNvbnN0IFN0cmluZyYsIGNvbnN0IFJlZjxKU09OOjpWYWx1ZT4mKSBjb25zdDsKICAgICBi
b29sIHBsYXRmb3JtU3VwcG9ydFByb3h5VHlwZShjb25zdCBTdHJpbmcmKSBjb25zdDsKICAgICB2
b2lkIHBhcnNlQ2FwYWJpbGl0aWVzKGNvbnN0IEpTT046Ok9iamVjdCYgZGVzaXJlZENhcGFiaWxp
dGllcywgQ2FwYWJpbGl0aWVzJikgY29uc3Q7CiAgICAgdm9pZCBwbGF0Zm9ybVBhcnNlQ2FwYWJp
bGl0aWVzKGNvbnN0IEpTT046Ok9iamVjdCYgZGVzaXJlZENhcGFiaWxpdGllcywgQ2FwYWJpbGl0
aWVzJikgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViRHJpdmVyL2d0ay9XZWJEcml2ZXJT
ZXJ2aWNlR3RrLmNwcCBiL1NvdXJjZS9XZWJEcml2ZXIvZ3RrL1dlYkRyaXZlclNlcnZpY2VHdGsu
Y3BwCmluZGV4IDI0ZDFiZGQwMTRhMDcwYjU5NzY0NGI1NTM2N2Q0Mzc0MDdlMmMxOTQuLjQ0Yzkx
YWE1ZjY3Mzc1ZTE1OTk0MGI0YjBhMGRkOTQ0YmZkMGYyZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJEcml2ZXIvZ3RrL1dlYkRyaXZlclNlcnZpY2VHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJEcml2
ZXIvZ3RrL1dlYkRyaXZlclNlcnZpY2VHdGsuY3BwCkBAIC00MCw2NCArNDAsNDggQEAgQ2FwYWJp
bGl0aWVzIFdlYkRyaXZlclNlcnZpY2U6OnBsYXRmb3JtQ2FwYWJpbGl0aWVzKCkKICAgICByZXR1
cm4gY2FwYWJpbGl0aWVzOwogfQogCi1ib29sIFdlYkRyaXZlclNlcnZpY2U6OnBsYXRmb3JtVmFs
aWRhdGVDYXBhYmlsaXR5KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgUmVmUHRyPEpTT046OlZh
bHVlPiYgdmFsdWUpIGNvbnN0Citib29sIFdlYkRyaXZlclNlcnZpY2U6OnBsYXRmb3JtVmFsaWRh
dGVDYXBhYmlsaXR5KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgUmVmPEpTT046OlZhbHVlPiYg
dmFsdWUpIGNvbnN0CiB7CiAgICAgaWYgKG5hbWUgIT0gIndlYmtpdGd0azpicm93c2VyT3B0aW9u
cyIpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gYnJv
d3Nlck9wdGlvbnM7Ci0gICAgaWYgKCF2YWx1ZS0+YXNPYmplY3QoYnJvd3Nlck9wdGlvbnMpKQor
ICAgIGF1dG8gYnJvd3Nlck9wdGlvbnMgPSB2YWx1ZS0+YXNPYmplY3QoKTsKKyAgICBpZiAoIWJy
b3dzZXJPcHRpb25zKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoYnJvd3Nlck9w
dGlvbnMtPmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIFJlZlB0cjxKU09O
OjpWYWx1ZT4gYmluYXJ5VmFsdWU7Ci0gICAgU3RyaW5nIGJpbmFyeTsKLSAgICBpZiAoYnJvd3Nl
ck9wdGlvbnMtPmdldFZhbHVlKCJiaW5hcnkiX3MsIGJpbmFyeVZhbHVlKSAmJiAhYmluYXJ5VmFs
dWUtPmFzU3RyaW5nKGJpbmFyeSkpCisgICAgYXV0byBiaW5hcnkgPSBicm93c2VyT3B0aW9ucy0+
Z2V0U3RyaW5nKCJiaW5hcnkiX3MpOworICAgIGlmICghYmluYXJ5KQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHVzZU92ZXJsYXlTY3JvbGxiYXJzVmFs
dWU7Ci0gICAgYm9vbCB1c2VPdmVybGF5U2Nyb2xsYmFyczsKLSAgICBpZiAoYnJvd3Nlck9wdGlv
bnMtPmdldFZhbHVlKCJ1c2VPdmVybGF5U2Nyb2xsYmFycyJfcywgdXNlT3ZlcmxheVNjcm9sbGJh
cnNWYWx1ZSkgJiYgIXVzZU92ZXJsYXlTY3JvbGxiYXJzVmFsdWUtPmFzQm9vbGVhbih1c2VPdmVy
bGF5U2Nyb2xsYmFycykpCisgICAgYXV0byB1c2VPdmVybGF5U2Nyb2xsYmFycyA9IGJyb3dzZXJP
cHRpb25zLT5nZXRCb29sZWFuKCJ1c2VPdmVybGF5U2Nyb2xsYmFycyJfcyk7CisgICAgaWYgKCF1
c2VPdmVybGF5U2Nyb2xsYmFycykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgUmVmUHRy
PEpTT046OlZhbHVlPiBicm93c2VyQXJndW1lbnRzVmFsdWU7Ci0gICAgUmVmUHRyPEpTT046OkFy
cmF5PiBicm93c2VyQXJndW1lbnRzOwotICAgIGlmIChicm93c2VyT3B0aW9ucy0+Z2V0VmFsdWUo
ImFyZ3MiX3MsIGJyb3dzZXJBcmd1bWVudHNWYWx1ZSkpIHsKLSAgICAgICAgaWYgKCFicm93c2Vy
QXJndW1lbnRzVmFsdWUtPmFzQXJyYXkoYnJvd3NlckFyZ3VtZW50cykpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KKyAgICBpZiAoYXV0byBicm93c2VyQXJndW1lbnRzID0gYnJvd3Nlck9w
dGlvbnMtPmdldEFycmF5KCJhcmdzIl9zKSkgewogICAgICAgICB1bnNpZ25lZCBicm93c2VyQXJn
dW1lbnRzTGVuZ3RoID0gYnJvd3NlckFyZ3VtZW50cy0+bGVuZ3RoKCk7CiAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBicm93c2VyQXJndW1lbnRzTGVuZ3RoOyArK2kpIHsKLSAgICAg
ICAgICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gdmFsdWUgPSBicm93c2VyQXJndW1lbnRzLT5nZXQo
aSk7Ci0gICAgICAgICAgICBTdHJpbmcgYXJndW1lbnQ7Ci0gICAgICAgICAgICBpZiAoIXZhbHVl
LT5hc1N0cmluZyhhcmd1bWVudCkpCisgICAgICAgICAgICBhdXRvIGFyZ3VtZW50ID0gYnJvd3Nl
ckFyZ3VtZW50cy0+Z2V0KGkpLT5hc1N0cmluZygpOworICAgICAgICAgICAgaWYgKCFhcmd1bWVu
dCkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICB9CiAKLSAg
ICBSZWZQdHI8SlNPTjo6VmFsdWU+IGNlcnRpZmljYXRlc1ZhbHVlOwotICAgIGlmIChicm93c2Vy
T3B0aW9ucy0+Z2V0VmFsdWUoImNlcnRpZmljYXRlcyJfcywgY2VydGlmaWNhdGVzVmFsdWUpKSB7
Ci0gICAgICAgIFJlZlB0cjxKU09OOjpBcnJheT4gY2VydGlmaWNhdGVzOwotICAgICAgICBpZiAo
IWNlcnRpZmljYXRlc1ZhbHVlLT5hc0FycmF5KGNlcnRpZmljYXRlcykpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KKyAgICBpZiAoYXV0byBjZXJ0aWZpY2F0ZXMgPSBicm93c2VyT3B0aW9u
cy0+Z2V0QXJyYXkoImNlcnRpZmljYXRlcyJfcykpIHsKICAgICAgICAgdW5zaWduZWQgY2VydGlm
aWNhdGVzTGVuZ3RoID0gY2VydGlmaWNhdGVzLT5sZW5ndGgoKTsKICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGNlcnRpZmljYXRlc0xlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICBS
ZWZQdHI8SlNPTjo6VmFsdWU+IGNlcnRpZmljYXRlVmFsdWUgPSBjZXJ0aWZpY2F0ZXMtPmdldChp
KTsKLSAgICAgICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IGNlcnRpZmljYXRlOwotICAgICAg
ICAgICAgaWYgKCFjZXJ0aWZpY2F0ZVZhbHVlLT5hc09iamVjdChjZXJ0aWZpY2F0ZSkpCisgICAg
ICAgICAgICBhdXRvIGNlcnRpZmljYXRlID0gY2VydGlmaWNhdGVzLT5nZXQoaSktPmFzT2JqZWN0
KCk7CisgICAgICAgICAgICBpZiAoIWNlcnRpZmljYXRlKQogICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgICAgICAgICAgUmVmUHRyPEpTT046OlZhbHVlPiBob3N0VmFsdWU7Ci0g
ICAgICAgICAgICBTdHJpbmcgaG9zdDsKLSAgICAgICAgICAgIGlmICghY2VydGlmaWNhdGUtPmdl
dFZhbHVlKCJob3N0Il9zLCBob3N0VmFsdWUpIHx8ICFob3N0VmFsdWUtPmFzU3RyaW5nKGhvc3Qp
KQorICAgICAgICAgICAgYXV0byBob3N0ID0gY2VydGlmaWNhdGUtPmdldFN0cmluZygiaG9zdCJf
cyk7CisgICAgICAgICAgICBpZiAoIWhvc3QpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgICAgICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IGNlcnRpZmljYXRlRmlsZVZhbHVl
OwotICAgICAgICAgICAgU3RyaW5nIGNlcnRpZmljYXRlRmlsZTsKLSAgICAgICAgICAgIGlmICgh
Y2VydGlmaWNhdGUtPmdldFZhbHVlKCJjZXJ0aWZpY2F0ZUZpbGUiX3MsIGNlcnRpZmljYXRlRmls
ZVZhbHVlKSB8fCAhY2VydGlmaWNhdGVGaWxlVmFsdWUtPmFzU3RyaW5nKGNlcnRpZmljYXRlRmls
ZSkpCisgICAgICAgICAgICBhdXRvIGNlcnRpZmljYXRlRmlsZSA9IGNlcnRpZmljYXRlLT5nZXRT
dHJpbmcoImNlcnRpZmljYXRlRmlsZSJfcyk7CisgICAgICAgICAgICBpZiAoIWNlcnRpZmljYXRl
RmlsZSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICB9CkBA
IC0xMDUsNyArODksNyBAQCBib29sIFdlYkRyaXZlclNlcnZpY2U6OnBsYXRmb3JtVmFsaWRhdGVD
YXBhYmlsaXR5KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgUmVmUAogICAgIHJldHVybiB0cnVl
OwogfQogCi1ib29sIFdlYkRyaXZlclNlcnZpY2U6OnBsYXRmb3JtTWF0Y2hDYXBhYmlsaXR5KGNv
bnN0IFN0cmluZyYsIGNvbnN0IFJlZlB0cjxKU09OOjpWYWx1ZT4mKSBjb25zdAorYm9vbCBXZWJE
cml2ZXJTZXJ2aWNlOjpwbGF0Zm9ybU1hdGNoQ2FwYWJpbGl0eShjb25zdCBTdHJpbmcmLCBjb25z
dCBSZWY8SlNPTjo6VmFsdWU+JikgY29uc3QKIHsKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTEx
Niw1MyArMTAwLDQ2IEBAIHZvaWQgV2ViRHJpdmVyU2VydmljZTo6cGxhdGZvcm1QYXJzZUNhcGFi
aWxpdGllcyhjb25zdCBKU09OOjpPYmplY3QmIG1hdGNoZWRDYXBhCiAgICAgY2FwYWJpbGl0aWVz
LmJyb3dzZXJBcmd1bWVudHMgPSBWZWN0b3I8U3RyaW5nPiB7ICItLWF1dG9tYXRpb24iX3MgfTsK
ICAgICBjYXBhYmlsaXRpZXMudXNlT3ZlcmxheVNjcm9sbGJhcnMgPSB0cnVlOwogCi0gICAgUmVm
UHRyPEpTT046Ok9iamVjdD4gYnJvd3Nlck9wdGlvbnM7Ci0gICAgaWYgKCFtYXRjaGVkQ2FwYWJp
bGl0aWVzLmdldE9iamVjdCgid2Via2l0Z3RrOmJyb3dzZXJPcHRpb25zIl9zLCBicm93c2VyT3B0
aW9ucykpCisgICAgYXV0byBicm93c2VyT3B0aW9ucyA9IG1hdGNoZWRDYXBhYmlsaXRpZXMuZ2V0
T2JqZWN0KCJ3ZWJraXRndGs6YnJvd3Nlck9wdGlvbnMiX3MpOworICAgIGlmICghYnJvd3Nlck9w
dGlvbnMpCiAgICAgICAgIHJldHVybjsKIAotICAgIFN0cmluZyBicm93c2VyQmluYXJ5OwotICAg
IGlmIChicm93c2VyT3B0aW9ucy0+Z2V0U3RyaW5nKCJiaW5hcnkiX3MsIGJyb3dzZXJCaW5hcnkp
KSB7CisgICAgYXV0byBicm93c2VyQmluYXJ5ID0gYnJvd3Nlck9wdGlvbnMtPmdldFN0cmluZygi
YmluYXJ5Il9zKTsKKyAgICBpZiAoISFicm93c2VyQmluYXJ5KSB7CiAgICAgICAgIGNhcGFiaWxp
dGllcy5icm93c2VyQmluYXJ5ID0gYnJvd3NlckJpbmFyeTsKICAgICAgICAgY2FwYWJpbGl0aWVz
LmJyb3dzZXJBcmd1bWVudHMgPSBXVEY6Om51bGxvcHQ7CiAgICAgfQogCi0gICAgUmVmUHRyPEpT
T046OkFycmF5PiBicm93c2VyQXJndW1lbnRzOwotICAgIGlmIChicm93c2VyT3B0aW9ucy0+Z2V0
QXJyYXkoImFyZ3MiX3MsIGJyb3dzZXJBcmd1bWVudHMpICYmIGJyb3dzZXJBcmd1bWVudHMtPmxl
bmd0aCgpKSB7CisgICAgYXV0byBicm93c2VyQXJndW1lbnRzID0gYnJvd3Nlck9wdGlvbnMtPmdl
dEFycmF5KCJhcmdzIl9zKTsKKyAgICBpZiAoYnJvd3NlckFyZ3VtZW50cyAmJiBicm93c2VyQXJn
dW1lbnRzLT5sZW5ndGgoKSkgewogICAgICAgICB1bnNpZ25lZCBicm93c2VyQXJndW1lbnRzTGVu
Z3RoID0gYnJvd3NlckFyZ3VtZW50cy0+bGVuZ3RoKCk7CiAgICAgICAgIGNhcGFiaWxpdGllcy5i
cm93c2VyQXJndW1lbnRzID0gVmVjdG9yPFN0cmluZz4oKTsKICAgICAgICAgY2FwYWJpbGl0aWVz
LmJyb3dzZXJBcmd1bWVudHMtPnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoYnJvd3NlckFyZ3VtZW50
c0xlbmd0aCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBicm93c2VyQXJndW1l
bnRzTGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gdmFsdWUg
PSBicm93c2VyQXJndW1lbnRzLT5nZXQoaSk7Ci0gICAgICAgICAgICBTdHJpbmcgYXJndW1lbnQ7
Ci0gICAgICAgICAgICB2YWx1ZS0+YXNTdHJpbmcoYXJndW1lbnQpOworICAgICAgICAgICAgYXV0
byBhcmd1bWVudCA9IGJyb3dzZXJBcmd1bWVudHMtPmdldChpKS0+YXNTdHJpbmcoKTsKICAgICAg
ICAgICAgIEFTU0VSVCghYXJndW1lbnQuaXNOdWxsKCkpOwogICAgICAgICAgICAgY2FwYWJpbGl0
aWVzLmJyb3dzZXJBcmd1bWVudHMtPnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKGFyZ3VtZW50KSk7
CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBib29sIHVzZU92ZXJsYXlTY3JvbGxiYXJzOwotICAg
IGlmIChicm93c2VyT3B0aW9ucy0+Z2V0Qm9vbGVhbigidXNlT3ZlcmxheVNjcm9sbGJhcnMiX3Ms
IHVzZU92ZXJsYXlTY3JvbGxiYXJzKSkKKyAgICBpZiAoYXV0byB1c2VPdmVybGF5U2Nyb2xsYmFy
cyA9IGJyb3dzZXJPcHRpb25zLT5nZXRCb29sZWFuKCJ1c2VPdmVybGF5U2Nyb2xsYmFycyJfcykp
CiAgICAgICAgIGNhcGFiaWxpdGllcy51c2VPdmVybGF5U2Nyb2xsYmFycyA9IHVzZU92ZXJsYXlT
Y3JvbGxiYXJzOwogICAgIGVsc2UKICAgICAgICAgY2FwYWJpbGl0aWVzLnVzZU92ZXJsYXlTY3Jv
bGxiYXJzID0gdHJ1ZTsKIAotICAgIFJlZlB0cjxKU09OOjpBcnJheT4gY2VydGlmaWNhdGVzOwot
ICAgIGlmIChicm93c2VyT3B0aW9ucy0+Z2V0QXJyYXkoImNlcnRpZmljYXRlcyJfcywgY2VydGlm
aWNhdGVzKSAmJiBjZXJ0aWZpY2F0ZXMtPmxlbmd0aCgpKSB7CisgICAgYXV0byBjZXJ0aWZpY2F0
ZXMgPSBicm93c2VyT3B0aW9ucy0+Z2V0QXJyYXkoImNlcnRpZmljYXRlcyJfcyk7CisgICAgaWYg
KGNlcnRpZmljYXRlcyAmJiBjZXJ0aWZpY2F0ZXMtPmxlbmd0aCgpKSB7CiAgICAgICAgIHVuc2ln
bmVkIGNlcnRpZmljYXRlc0xlbmd0aCA9IGNlcnRpZmljYXRlcy0+bGVuZ3RoKCk7CiAgICAgICAg
IGNhcGFiaWxpdGllcy5jZXJ0aWZpY2F0ZXMgPSBWZWN0b3I8c3RkOjpwYWlyPFN0cmluZywgU3Ry
aW5nPj4oKTsKICAgICAgICAgY2FwYWJpbGl0aWVzLmNlcnRpZmljYXRlcy0+cmVzZXJ2ZUluaXRp
YWxDYXBhY2l0eShjZXJ0aWZpY2F0ZXNMZW5ndGgpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgY2VydGlmaWNhdGVzTGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIFJlZlB0cjxK
U09OOjpWYWx1ZT4gdmFsdWUgPSBjZXJ0aWZpY2F0ZXMtPmdldChpKTsKLSAgICAgICAgICAgIFJl
ZlB0cjxKU09OOjpPYmplY3Q+IGNlcnRpZmljYXRlOwotICAgICAgICAgICAgdmFsdWUtPmFzT2Jq
ZWN0KGNlcnRpZmljYXRlKTsKKyAgICAgICAgICAgIGF1dG8gY2VydGlmaWNhdGUgPSBjZXJ0aWZp
Y2F0ZXMtPmdldChpKS0+YXNPYmplY3QoKTsKICAgICAgICAgICAgIEFTU0VSVChjZXJ0aWZpY2F0
ZSk7CiAKLSAgICAgICAgICAgIFN0cmluZyBob3N0OwotICAgICAgICAgICAgY2VydGlmaWNhdGUt
PmdldFN0cmluZygiaG9zdCJfcywgaG9zdCk7CisgICAgICAgICAgICBhdXRvIGhvc3QgPSBjZXJ0
aWZpY2F0ZS0+Z2V0U3RyaW5nKCJob3N0Il9zKTsKICAgICAgICAgICAgIEFTU0VSVCghaG9zdC5p
c051bGwoKSk7CiAKLSAgICAgICAgICAgIFN0cmluZyBjZXJ0aWZpY2F0ZUZpbGU7Ci0gICAgICAg
ICAgICBjZXJ0aWZpY2F0ZS0+Z2V0U3RyaW5nKCJjZXJ0aWZpY2F0ZUZpbGUiX3MsIGNlcnRpZmlj
YXRlRmlsZSk7CisgICAgICAgICAgICBhdXRvIGNlcnRpZmljYXRlRmlsZSA9IGNlcnRpZmljYXRl
LT5nZXRTdHJpbmcoImNlcnRpZmljYXRlRmlsZSJfcyk7CiAgICAgICAgICAgICBBU1NFUlQoIWNl
cnRpZmljYXRlRmlsZS5pc051bGwoKSk7CiAKICAgICAgICAgICAgIGNhcGFiaWxpdGllcy5jZXJ0
aWZpY2F0ZXMtPnVuY2hlY2tlZEFwcGVuZCh7IFdURk1vdmUoaG9zdCksIFdURk1vdmUoY2VydGlm
aWNhdGVGaWxlKSB9KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJEcml2ZXIvd2luL1dlYkRyaXZl
clNlcnZpY2VXaW4uY3BwIGIvU291cmNlL1dlYkRyaXZlci93aW4vV2ViRHJpdmVyU2VydmljZVdp
bi5jcHAKaW5kZXggZWNmZTRjZDEwNTI2ZWFhMWVjY2FjYTA0Mzk4OGNkNjMzMDRkMzg0ZC4uOWE5
NjBmMGJiZjJkYTM4OGE5NmY2OWY0YWY3NDE3ZWU2MGVkMzczNSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkRyaXZlci93aW4vV2ViRHJpdmVyU2VydmljZVdpbi5jcHAKKysrIGIvU291cmNlL1dlYkRy
aXZlci93aW4vV2ViRHJpdmVyU2VydmljZVdpbi5jcHAKQEAgLTQ0LDEyICs0NCwxMiBAQCBib29s
IFdlYkRyaXZlclNlcnZpY2U6OnBsYXRmb3JtQ29tcGFyZUJyb3dzZXJWZXJzaW9ucyhjb25zdCBT
dHJpbmcmIHJlcXVpcmVkVmVycwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFdlYkRyaXZl
clNlcnZpY2U6OnBsYXRmb3JtVmFsaWRhdGVDYXBhYmlsaXR5KGNvbnN0IFN0cmluZyYgbmFtZSwg
Y29uc3QgUmVmUHRyPEpTT046OlZhbHVlPiYgdmFsdWUpIGNvbnN0Citib29sIFdlYkRyaXZlclNl
cnZpY2U6OnBsYXRmb3JtVmFsaWRhdGVDYXBhYmlsaXR5KGNvbnN0IFN0cmluZyYgbmFtZSwgY29u
c3QgUmVmPEpTT046OlZhbHVlPiYgdmFsdWUpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKLWJvb2wgV2ViRHJpdmVyU2VydmljZTo6cGxhdGZvcm1NYXRjaENhcGFiaWxpdHkoY29uc3Qg
U3RyaW5nJiwgY29uc3QgUmVmUHRyPEpTT046OlZhbHVlPiYpIGNvbnN0Citib29sIFdlYkRyaXZl
clNlcnZpY2U6OnBsYXRmb3JtTWF0Y2hDYXBhYmlsaXR5KGNvbnN0IFN0cmluZyYsIGNvbnN0IFJl
ZjxKU09OOjpWYWx1ZT4mKSBjb25zdAogewogICAgIHJldHVybiB0cnVlOwogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkRyaXZlci93cGUvV2ViRHJpdmVyU2VydmljZVdQRS5jcHAgYi9Tb3VyY2Uv
V2ViRHJpdmVyL3dwZS9XZWJEcml2ZXJTZXJ2aWNlV1BFLmNwcAppbmRleCAwNmQzYTVjMmE4MjUy
OTE4ZTc0ZjEwM2ViYzg5Y2I1MjM3OWU5MDM3Li4yYjdiMTcxZjIyZGE1M2ZlZjk1ODFiZGY2ZGI3
NjYzY2IxZGNhMzEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViRHJpdmVyL3dwZS9XZWJEcml2ZXJT
ZXJ2aWNlV1BFLmNwcAorKysgYi9Tb3VyY2UvV2ViRHJpdmVyL3dwZS9XZWJEcml2ZXJTZXJ2aWNl
V1BFLmNwcApAQCAtNDAsNTcgKzQwLDQ3IEBAIENhcGFiaWxpdGllcyBXZWJEcml2ZXJTZXJ2aWNl
OjpwbGF0Zm9ybUNhcGFiaWxpdGllcygpCiAgICAgcmV0dXJuIGNhcGFiaWxpdGllczsKIH0KIAot
Ym9vbCBXZWJEcml2ZXJTZXJ2aWNlOjpwbGF0Zm9ybVZhbGlkYXRlQ2FwYWJpbGl0eShjb25zdCBT
dHJpbmcmIG5hbWUsIGNvbnN0IFJlZlB0cjxKU09OOjpWYWx1ZT4mIHZhbHVlKSBjb25zdAorYm9v
bCBXZWJEcml2ZXJTZXJ2aWNlOjpwbGF0Zm9ybVZhbGlkYXRlQ2FwYWJpbGl0eShjb25zdCBTdHJp
bmcmIG5hbWUsIGNvbnN0IFJlZjxKU09OOjpWYWx1ZT4mIHZhbHVlKSBjb25zdAogewogICAgIGlm
IChuYW1lICE9ICJ3cGU6YnJvd3Nlck9wdGlvbnMiKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAot
ICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IGJyb3dzZXJPcHRpb25zOwotICAgIGlmICghdmFsdWUt
PmFzT2JqZWN0KGJyb3dzZXJPcHRpb25zKSkKKyAgICBhdXRvIGJyb3dzZXJPcHRpb25zID0gdmFs
dWUtPmFzT2JqZWN0KCk7CisgICAgaWYgKCFicm93c2VyT3B0aW9ucykKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCiAgICAgaWYgKGJyb3dzZXJPcHRpb25zLT5pc051bGwoKSkKICAgICAgICAgcmV0
dXJuIHRydWU7CiAKICAgICAvLyBJZiBicm93c2VyIG9wdGlvbnMgYXJlIHByb3ZpZGVkLCBiaW5h
cnkgaXMgcmVxdWlyZWQuCi0gICAgU3RyaW5nIGJpbmFyeTsKLSAgICBpZiAoIWJyb3dzZXJPcHRp
b25zLT5nZXRTdHJpbmcoImJpbmFyeSJfcywgYmluYXJ5KSkKKyAgICBhdXRvIGJpbmFyeSA9IGJy
b3dzZXJPcHRpb25zLT5nZXRTdHJpbmcoImJpbmFyeSJfcyk7CisgICAgaWYgKCFiaW5hcnkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gYnJvd3NlckFy
Z3VtZW50c1ZhbHVlOwotICAgIFJlZlB0cjxKU09OOjpBcnJheT4gYnJvd3NlckFyZ3VtZW50czsK
LSAgICBpZiAoYnJvd3Nlck9wdGlvbnMtPmdldFZhbHVlKCJhcmdzIl9zLCBicm93c2VyQXJndW1l
bnRzVmFsdWUpICYmICFicm93c2VyQXJndW1lbnRzVmFsdWUtPmFzQXJyYXkoYnJvd3NlckFyZ3Vt
ZW50cykpCisgICAgYXV0byBicm93c2VyQXJndW1lbnRzID0gYnJvd3Nlck9wdGlvbnMtPmdldEFy
cmF5KCJhcmdzIl9zKTsKKyAgICBpZiAoIWJyb3dzZXJBcmd1bWVudHMpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAogICAgIHVuc2lnbmVkIGJyb3dzZXJBcmd1bWVudHNMZW5ndGggPSBicm93c2Vy
QXJndW1lbnRzLT5sZW5ndGgoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYnJvd3Nl
ckFyZ3VtZW50c0xlbmd0aDsgKytpKSB7Ci0gICAgICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gdmFs
dWUgPSBicm93c2VyQXJndW1lbnRzLT5nZXQoaSk7Ci0gICAgICAgIFN0cmluZyBhcmd1bWVudDsK
LSAgICAgICAgaWYgKCF2YWx1ZS0+YXNTdHJpbmcoYXJndW1lbnQpKQorICAgICAgICBhdXRvIGFy
Z3VtZW50ID0gYnJvd3NlckFyZ3VtZW50cy0+Z2V0KGkpLT5hc1N0cmluZygpOworICAgICAgICBp
ZiAoIWFyZ3VtZW50KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIFJl
ZlB0cjxKU09OOjpWYWx1ZT4gY2VydGlmaWNhdGVzVmFsdWU7Ci0gICAgaWYgKGJyb3dzZXJPcHRp
b25zLT5nZXRWYWx1ZSgiY2VydGlmaWNhdGVzIl9zLCBjZXJ0aWZpY2F0ZXNWYWx1ZSkpIHsKLSAg
ICAgICAgUmVmUHRyPEpTT046OkFycmF5PiBjZXJ0aWZpY2F0ZXM7Ci0gICAgICAgIGlmICghY2Vy
dGlmaWNhdGVzVmFsdWUtPmFzQXJyYXkoY2VydGlmaWNhdGVzKSkKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLQorICAgIGlmIChhdXRvIGNlcnRpZmljYXRlcyA9IGJyb3dzZXJPcHRpb25zLT5n
ZXRBcnJheSgiY2VydGlmaWNhdGVzIl9zKSkgewogICAgICAgICB1bnNpZ25lZCBjZXJ0aWZpY2F0
ZXNMZW5ndGggPSBjZXJ0aWZpY2F0ZXMtPmxlbmd0aCgpOwogICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgY2VydGlmaWNhdGVzTGVuZ3RoOyArK2kpIHsKLSAgICAgICAgICAgIFJlZlB0
cjxKU09OOjpWYWx1ZT4gY2VydGlmaWNhdGVWYWx1ZSA9IGNlcnRpZmljYXRlcy0+Z2V0KGkpOwot
ICAgICAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gY2VydGlmaWNhdGU7Ci0gICAgICAgICAg
ICBpZiAoIWNlcnRpZmljYXRlVmFsdWUtPmFzT2JqZWN0KGNlcnRpZmljYXRlKSkKKyAgICAgICAg
ICAgIGF1dG8gY2VydGlmaWNhdGUgPSBjZXJ0aWZpY2F0ZXMtPmdldChpKS0+YXNPYmplY3QoKTsK
KyAgICAgICAgICAgIGlmICghY2VydGlmaWNhdGUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgICAgICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IGhvc3RWYWx1ZTsKLSAgICAg
ICAgICAgIFN0cmluZyBob3N0OwotICAgICAgICAgICAgaWYgKCFjZXJ0aWZpY2F0ZS0+Z2V0VmFs
dWUoImhvc3QiX3MsIGhvc3RWYWx1ZSkgfHwgIWhvc3RWYWx1ZS0+YXNTdHJpbmcoaG9zdCkpCisg
ICAgICAgICAgICBhdXRvIGhvc3QgPSBjZXJ0aWZpY2F0ZS0+Z2V0U3RyaW5nKCJob3N0Il9zKTsK
KyAgICAgICAgICAgIGlmICghaG9zdCkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LSAgICAgICAgICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gY2VydGlmaWNhdGVGaWxlVmFsdWU7Ci0g
ICAgICAgICAgICBTdHJpbmcgY2VydGlmaWNhdGVGaWxlOwotICAgICAgICAgICAgaWYgKCFjZXJ0
aWZpY2F0ZS0+Z2V0VmFsdWUoImNlcnRpZmljYXRlRmlsZSJfcywgY2VydGlmaWNhdGVGaWxlVmFs
dWUpIHx8ICFjZXJ0aWZpY2F0ZUZpbGVWYWx1ZS0+YXNTdHJpbmcoY2VydGlmaWNhdGVGaWxlKSkK
KyAgICAgICAgICAgIGF1dG8gY2VydGlmaWNhdGVGaWxlID0gY2VydGlmaWNhdGUtPmdldFN0cmlu
ZygiY2VydGlmaWNhdGVGaWxlIl9zKTsKKyAgICAgICAgICAgIGlmICghY2VydGlmaWNhdGVGaWxl
KQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgIH0KQEAgLTk4
LDcgKzg4LDcgQEAgYm9vbCBXZWJEcml2ZXJTZXJ2aWNlOjpwbGF0Zm9ybVZhbGlkYXRlQ2FwYWJp
bGl0eShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFJlZlAKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotYm9vbCBXZWJEcml2ZXJTZXJ2aWNlOjpwbGF0Zm9ybU1hdGNoQ2FwYWJpbGl0eShjb25zdCBT
dHJpbmcmLCBjb25zdCBSZWZQdHI8SlNPTjo6VmFsdWU+JikgY29uc3QKK2Jvb2wgV2ViRHJpdmVy
U2VydmljZTo6cGxhdGZvcm1NYXRjaENhcGFiaWxpdHkoY29uc3QgU3RyaW5nJiwgY29uc3QgUmVm
PEpTT046OlZhbHVlPiYpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHRydWU7CiB9CkBAIC0xMDgsNDcg
Kzk4LDQxIEBAIHZvaWQgV2ViRHJpdmVyU2VydmljZTo6cGxhdGZvcm1QYXJzZUNhcGFiaWxpdGll
cyhjb25zdCBKU09OOjpPYmplY3QmIG1hdGNoZWRDYXBhCiAgICAgY2FwYWJpbGl0aWVzLmJyb3dz
ZXJCaW5hcnkgPSBTdHJpbmcoIk1pbmlCcm93c2VyIik7CiAgICAgY2FwYWJpbGl0aWVzLmJyb3dz
ZXJBcmd1bWVudHMgPSBWZWN0b3I8U3RyaW5nPiB7ICItLWF1dG9tYXRpb24iX3MgfTsKIAotICAg
IFJlZlB0cjxKU09OOjpPYmplY3Q+IGJyb3dzZXJPcHRpb25zOwotICAgIGlmICghbWF0Y2hlZENh
cGFiaWxpdGllcy5nZXRPYmplY3QoIndwZTpicm93c2VyT3B0aW9ucyJfcywgYnJvd3Nlck9wdGlv
bnMpKQorICAgIGF1dG8gYnJvd3Nlck9wdGlvbnMgPSBtYXRjaGVkQ2FwYWJpbGl0aWVzLmdldE9i
amVjdCgid3BlOmJyb3dzZXJPcHRpb25zIl9zKTsKKyAgICBpZiAoIWJyb3dzZXJPcHRpb25zKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBTdHJpbmcgYnJvd3NlckJpbmFyeTsKLSAgICBpZiAoYnJv
d3Nlck9wdGlvbnMtPmdldFN0cmluZygiYmluYXJ5Il9zLCBicm93c2VyQmluYXJ5KSkgeworICAg
IGF1dG8gYnJvd3NlckJpbmFyeSA9IGJyb3dzZXJPcHRpb25zLT5nZXRTdHJpbmcoImJpbmFyeSJf
cyk7CisgICAgaWYgKCEhYnJvd3NlckJpbmFyeSkgewogICAgICAgICBjYXBhYmlsaXRpZXMuYnJv
d3NlckJpbmFyeSA9IGJyb3dzZXJCaW5hcnk7CiAgICAgICAgIGNhcGFiaWxpdGllcy5icm93c2Vy
QXJndW1lbnRzID0gV1RGOjpudWxsb3B0OwogICAgIH0KIAotICAgIFJlZlB0cjxKU09OOjpBcnJh
eT4gYnJvd3NlckFyZ3VtZW50czsKLSAgICBpZiAoYnJvd3Nlck9wdGlvbnMtPmdldEFycmF5KCJh
cmdzIl9zLCBicm93c2VyQXJndW1lbnRzKSAmJiBicm93c2VyQXJndW1lbnRzLT5sZW5ndGgoKSkg
eworICAgIGF1dG8gYnJvd3NlckFyZ3VtZW50cyA9IGJyb3dzZXJPcHRpb25zLT5nZXRBcnJheSgi
YXJncyJfcyk7CisgICAgaWYgKGJyb3dzZXJBcmd1bWVudHMgJiYgYnJvd3NlckFyZ3VtZW50cy0+
bGVuZ3RoKCkpIHsKICAgICAgICAgdW5zaWduZWQgYnJvd3NlckFyZ3VtZW50c0xlbmd0aCA9IGJy
b3dzZXJBcmd1bWVudHMtPmxlbmd0aCgpOwogICAgICAgICBjYXBhYmlsaXRpZXMuYnJvd3NlckFy
Z3VtZW50cyA9IFZlY3RvcjxTdHJpbmc+KCk7CiAgICAgICAgIGNhcGFiaWxpdGllcy5icm93c2Vy
QXJndW1lbnRzLT5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGJyb3dzZXJBcmd1bWVudHNMZW5ndGgp
OwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYnJvd3NlckFyZ3VtZW50c0xlbmd0
aDsgKytpKSB7Ci0gICAgICAgICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHZhbHVlID0gYnJvd3Nl
ckFyZ3VtZW50cy0+Z2V0KGkpOwotICAgICAgICAgICAgU3RyaW5nIGFyZ3VtZW50OwotICAgICAg
ICAgICAgdmFsdWUtPmFzU3RyaW5nKGFyZ3VtZW50KTsKKyAgICAgICAgICAgIGF1dG8gYXJndW1l
bnQgPSBicm93c2VyQXJndW1lbnRzLT5nZXQoaSktPmFzU3RyaW5nKCk7CiAgICAgICAgICAgICBB
U1NFUlQoIWFyZ3VtZW50LmlzTnVsbCgpKTsKICAgICAgICAgICAgIGNhcGFiaWxpdGllcy5icm93
c2VyQXJndW1lbnRzLT51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShhcmd1bWVudCkpOwogICAgICAg
ICB9CiAgICAgfQogCi0gICAgUmVmUHRyPEpTT046OkFycmF5PiBjZXJ0aWZpY2F0ZXM7Ci0gICAg
aWYgKGJyb3dzZXJPcHRpb25zLT5nZXRBcnJheSgiY2VydGlmaWNhdGVzIl9zLCBjZXJ0aWZpY2F0
ZXMpICYmIGNlcnRpZmljYXRlcy0+bGVuZ3RoKCkpIHsKKyAgICBhdXRvIGNlcnRpZmljYXRlcyA9
IGJyb3dzZXJPcHRpb25zLT5nZXRBcnJheSgiY2VydGlmaWNhdGVzIl9zKTsKKyAgICBpZiAoY2Vy
dGlmaWNhdGVzICYmIGNlcnRpZmljYXRlcy0+bGVuZ3RoKCkpIHsKICAgICAgICAgdW5zaWduZWQg
Y2VydGlmaWNhdGVzTGVuZ3RoID0gY2VydGlmaWNhdGVzLT5sZW5ndGgoKTsKICAgICAgICAgY2Fw
YWJpbGl0aWVzLmNlcnRpZmljYXRlcyA9IFZlY3RvcjxzdGQ6OnBhaXI8U3RyaW5nLCBTdHJpbmc+
PigpOwogICAgICAgICBjYXBhYmlsaXRpZXMuY2VydGlmaWNhdGVzLT5yZXNlcnZlSW5pdGlhbENh
cGFjaXR5KGNlcnRpZmljYXRlc0xlbmd0aCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBjZXJ0aWZpY2F0ZXNMZW5ndGg7ICsraSkgewotICAgICAgICAgICAgUmVmUHRyPEpTT046
OlZhbHVlPiB2YWx1ZSA9IGNlcnRpZmljYXRlcy0+Z2V0KGkpOwotICAgICAgICAgICAgUmVmUHRy
PEpTT046Ok9iamVjdD4gY2VydGlmaWNhdGU7Ci0gICAgICAgICAgICB2YWx1ZS0+YXNPYmplY3Qo
Y2VydGlmaWNhdGUpOworICAgICAgICAgICAgYXV0byBjZXJ0aWZpY2F0ZSA9IGNlcnRpZmljYXRl
cy0+Z2V0KGkpLT5hc09iamVjdCgpOwogICAgICAgICAgICAgQVNTRVJUKGNlcnRpZmljYXRlKTsK
IAotICAgICAgICAgICAgU3RyaW5nIGhvc3Q7Ci0gICAgICAgICAgICBjZXJ0aWZpY2F0ZS0+Z2V0
U3RyaW5nKCJob3N0Il9zLCBob3N0KTsKKyAgICAgICAgICAgIGF1dG8gaG9zdCA9IGNlcnRpZmlj
YXRlLT5nZXRTdHJpbmcoImhvc3QiX3MpOwogICAgICAgICAgICAgQVNTRVJUKCFob3N0LmlzTnVs
bCgpKTsKIAotICAgICAgICAgICAgU3RyaW5nIGNlcnRpZmljYXRlRmlsZTsKLSAgICAgICAgICAg
IGNlcnRpZmljYXRlLT5nZXRTdHJpbmcoImNlcnRpZmljYXRlRmlsZSJfcywgY2VydGlmaWNhdGVG
aWxlKTsKKyAgICAgICAgICAgIGF1dG8gY2VydGlmaWNhdGVGaWxlID0gY2VydGlmaWNhdGUtPmdl
dFN0cmluZygiY2VydGlmaWNhdGVGaWxlIl9zKTsKICAgICAgICAgICAgIEFTU0VSVCghY2VydGlm
aWNhdGVGaWxlLmlzTnVsbCgpKTsKIAogICAgICAgICAgICAgY2FwYWJpbGl0aWVzLmNlcnRpZmlj
YXRlcy0+dW5jaGVja2VkQXBwZW5kKHsgV1RGTW92ZShob3N0KSwgV1RGTW92ZShjZXJ0aWZpY2F0
ZUZpbGUpIH0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZh
Y2UvQ29udHJvbGxlcnMvQ1NTTWFuYWdlci5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2Vy
SW50ZXJmYWNlL0NvbnRyb2xsZXJzL0NTU01hbmFnZXIuanMKaW5kZXggNjhhZWFhOTc4NzAyOGVl
OGQxODU4YTFkMjcwNzUwMzM2MGJkNGU5Mi4uMTViNjIzMWFmMzNiNGNmN2VlYjhkMjkwOTg3M2I0
ZGE0YTViYTdhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZh
Y2UvQ29udHJvbGxlcnMvQ1NTTWFuYWdlci5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkv
VXNlckludGVyZmFjZS9Db250cm9sbGVycy9DU1NNYW5hZ2VyLmpzCkBAIC0yMDMsMzIgKzIwMywz
NCBAQCBXSS5DU1NNYW5hZ2VyID0gY2xhc3MgQ1NTTWFuYWdlciBleHRlbmRzIFdJLk9iamVjdAog
ICAgICAgICBpZiAoIXRoaXMuY2FuRm9yY2VBcHBlYXJhbmNlKCkpCiAgICAgICAgICAgICByZXR1
cm47CiAKLSAgICAgICAgbGV0IHByb3RvY29sTmFtZSA9ICIiOworICAgICAgICBsZXQgY29tbWFu
ZEFyZ3VtZW50cyA9IHt9OwogCiAgICAgICAgIHN3aXRjaCAobmFtZSkgewogICAgICAgICBjYXNl
IFdJLkNTU01hbmFnZXIuQXBwZWFyYW5jZS5MaWdodDoKLSAgICAgICAgICAgIHByb3RvY29sTmFt
ZSA9IEluc3BlY3RvckJhY2tlbmQuRW51bS5QYWdlLkFwcGVhcmFuY2UuTGlnaHQ7CisgICAgICAg
ICAgICBjb21tYW5kQXJndW1lbnRzLmFwcGVhcmFuY2UgPSBJbnNwZWN0b3JCYWNrZW5kLkVudW0u
UGFnZS5BcHBlYXJhbmNlLkxpZ2h0OwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2Fz
ZSBXSS5DU1NNYW5hZ2VyLkFwcGVhcmFuY2UuRGFyazoKLSAgICAgICAgICAgIHByb3RvY29sTmFt
ZSA9IEluc3BlY3RvckJhY2tlbmQuRW51bS5QYWdlLkFwcGVhcmFuY2UuRGFyazsKKyAgICAgICAg
ICAgIGNvbW1hbmRBcmd1bWVudHMuYXBwZWFyYW5jZSA9IEluc3BlY3RvckJhY2tlbmQuRW51bS5Q
YWdlLkFwcGVhcmFuY2UuRGFyazsKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2Ug
bnVsbDoKLSAgICAgICAgY2FzZSB1bmRlZmluZWQ6Ci0gICAgICAgIGNhc2UgIiI6Ci0gICAgICAg
ICAgICBwcm90b2NvbE5hbWUgPSAiIjsKKyAgICAgICAgICAgIC8vIENPTVBBVElCSUxJVFkgKGlP
UyAxNCk6IHRoZSBgYXBwZWFyYW5jZWBgIHBhcmFtZXRlciBvZiBgUGFnZS5zZXRGb3JjZWRBcHBl
YXJhbmNlYCB3YXMgbm90IG9wdGlvbmFsLgorICAgICAgICAgICAgLy8gU2luY2Ugc3VwcG9ydCBj
YW4ndCBiZSB0ZXN0ZWQgZGlyZWN0bHksIGNoZWNrIGZvciB0aGUgYG9wdGlvbnNgYCBwYXJhbWV0
ZXIgb2YgYERPTURlYnVnZ2VyLnNldERPTUJyZWFrcG9pbnRgIChpT1MgMTQuMCspLgorICAgICAg
ICAgICAgLy8gRklYTUU6IFVzZSBleHBsaWNpdCB2ZXJzaW9uIGNoZWNraW5nIG9uY2UgaHR0cHM6
Ly93ZWJraXQub3JnL2IvMTQ4NjgwIGlzIGZpeGVkLgorICAgICAgICAgICAgaWYgKCFJbnNwZWN0
b3JCYWNrZW5kLmhhc0NvbW1hbmQoIkRPTURlYnVnZ2VyLnNldERPTUJyZWFrcG9pbnQiLCAib3B0
aW9ucyIpKQorICAgICAgICAgICAgICAgIGNvbW1hbmRBcmd1bWVudHMuYXBwZWFyYW5jZSA9ICIi
OwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIC8v
IEFib3J0IGZvciB1bmtub3duIHZhbHVlcy4KKyAgICAgICAgICAgIGNvbnNvbGUuYXNzZXJ0KGZh
bHNlLCAiVW5rbm93biBhcHBlYXJhbmNlIiwgbmFtZSk7CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KIAogICAgICAgICB0aGlzLl9mb3JjZWRBcHBlYXJhbmNlID0gbmFtZSB8fCBudWxs
OwogCiAgICAgICAgIGxldCB0YXJnZXQgPSBXSS5hc3N1bWluZ01haW5UYXJnZXQoKTsKLSAgICAg
ICAgdGFyZ2V0LlBhZ2VBZ2VudC5zZXRGb3JjZWRBcHBlYXJhbmNlKHByb3RvY29sTmFtZSkudGhl
bigoKSA9PiB7CisgICAgICAgIHRhcmdldC5QYWdlQWdlbnQuc2V0Rm9yY2VkQXBwZWFyYW5jZS5p
bnZva2UoY29tbWFuZEFyZ3VtZW50cykudGhlbigoKSA9PiB7CiAgICAgICAgICAgICB0aGlzLm1l
ZGlhUXVlcnlSZXN1bHRDaGFuZ2VkKCk7CiAgICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRU
b0xpc3RlbmVycyhXSS5DU1NNYW5hZ2VyLkV2ZW50LkZvcmNlZEFwcGVhcmFuY2VEaWRDaGFuZ2Us
IHthcHBlYXJhbmNlOiB0aGlzLl9mb3JjZWRBcHBlYXJhbmNlfSk7CiAgICAgICAgIH0pOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvU2V0dGlu
Z3NUYWJDb250ZW50Vmlldy5qcyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNl
L1ZpZXdzL1NldHRpbmdzVGFiQ29udGVudFZpZXcuanMKaW5kZXggNDgyZTE0MmFlMTFkNjNjMDAx
NWY5NmM3NGJjYjJkZWEyZmU1MDY5ZC4uOTE4MzZlY2M3Njk3NzU2YTk2NmVmZWE3MTAzYzkyZDM0
MDhlNDQ2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2Uv
Vmlld3MvU2V0dGluZ3NUYWJDb250ZW50Vmlldy5qcworKysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvVXNlckludGVyZmFjZS9WaWV3cy9TZXR0aW5nc1RhYkNvbnRlbnRWaWV3LmpzCkBAIC0zNDYs
MTQgKzM0NiwxOCBAQCBXSS5TZXR0aW5nc1RhYkNvbnRlbnRWaWV3ID0gY2xhc3MgU2V0dGluZ3NU
YWJDb250ZW50VmlldyBleHRlbmRzIFdJLlRhYkNvbnRlbnRWaQogICAgICAgICAgICAgICAgIFtX
SS5Mb2dnaW5nQ2hhbm5lbC5MZXZlbC5WZXJib3NlLCBXSS5VSVN0cmluZygiVmVyYm9zZSIpXSwK
ICAgICAgICAgICAgIF07CiAgICAgICAgICAgICBjb25zdCBlZGl0b3JMYWJlbHMgPSB7Ci0gICAg
ICAgICAgICAgICAgbWVkaWE6IFdJLlVJU3RyaW5nKCJNZWRpYSBMb2dnaW5nOiIpLAotICAgICAg
ICAgICAgICAgIG1lZGlhc291cmNlOiBXSS5VSVN0cmluZygiTVNFIExvZ2dpbmc6IiksCi0gICAg
ICAgICAgICAgICAgd2VicnRjOiBXSS5VSVN0cmluZygiV2ViUlRDIExvZ2dpbmc6IiksCisgICAg
ICAgICAgICAgICAgW1dJLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VTb3VyY2UuTWVkaWFdOiBXSS5V
SVN0cmluZygiTWVkaWEgTG9nZ2luZzoiKSwKKyAgICAgICAgICAgICAgICBbV0kuQ29uc29sZU1l
c3NhZ2UuTWVzc2FnZVNvdXJjZS5NZWRpYVNvdXJjZV06IFdJLlVJU3RyaW5nKCJNU0UgTG9nZ2lu
ZzoiKSwKKyAgICAgICAgICAgICAgICBbV0kuQ29uc29sZU1lc3NhZ2UuTWVzc2FnZVNvdXJjZS5X
ZWJSVENdOiBXSS5VSVN0cmluZygiV2ViUlRDIExvZ2dpbmc6IiksCiAgICAgICAgICAgICB9Owog
CiAgICAgICAgICAgICBsZXQgY2hhbm5lbHMgPSBXSS5jb25zb2xlTWFuYWdlci5jdXN0b21Mb2dn
aW5nQ2hhbm5lbHM7CiAgICAgICAgICAgICBmb3IgKGxldCBjaGFubmVsIG9mIGNoYW5uZWxzKSB7
Ci0gICAgICAgICAgICAgICAgbGV0IGxvZ0VkaXRvciA9IGNvbnNvbGVTZXR0aW5nc1ZpZXcuYWRk
R3JvdXBXaXRoQ3VzdG9tU2V0dGluZyhlZGl0b3JMYWJlbHNbY2hhbm5lbC5zb3VyY2VdLCBXSS5T
ZXR0aW5nRWRpdG9yLlR5cGUuU2VsZWN0LCB7dmFsdWVzOiBsb2dMZXZlbHN9KTsKKyAgICAgICAg
ICAgICAgICBsZXQgbGFiZWwgPSBlZGl0b3JMYWJlbHNbY2hhbm5lbC5zb3VyY2VdOworICAgICAg
ICAgICAgICAgIGlmICghbGFiZWwpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisg
ICAgICAgICAgICAgICAgbGV0IGxvZ0VkaXRvciA9IGNvbnNvbGVTZXR0aW5nc1ZpZXcuYWRkR3Jv
dXBXaXRoQ3VzdG9tU2V0dGluZyhsYWJlbCwgV0kuU2V0dGluZ0VkaXRvci5UeXBlLlNlbGVjdCwg
e3ZhbHVlczogbG9nTGV2ZWxzfSk7CiAgICAgICAgICAgICAgICAgbG9nRWRpdG9yLnZhbHVlID0g
Y2hhbm5lbC5sZXZlbDsKICAgICAgICAgICAgICAgICBsb2dFZGl0b3IuYWRkRXZlbnRMaXN0ZW5l
cihXSS5TZXR0aW5nRWRpdG9yLkV2ZW50LlZhbHVlRGlkQ2hhbmdlLCAoKSA9PiB7CiAgICAgICAg
ICAgICAgICAgICAgIGZvciAobGV0IHRhcmdldCBvZiBXSS50YXJnZXRzKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9BdXRvbWF0aW9uLmpzb24gYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL0F1dG9tYXRpb24uanNvbgppbmRleCAzZGNi
MjE0MWViMGQyNzk0NzA3ZGUyODRjODcwNzEwZTg3NzIxYzM5Li5lYjNjZGI1Zjg2NmM1ZjkzYTg4
MjI5ODNhNDlkOTE2ZjNlNmVhZmU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BdXRvbWF0aW9uL0F1dG9tYXRpb24uanNvbgorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BdXRvbWF0aW9uL0F1dG9tYXRpb24uanNvbgpAQCAtMzIsNyArMzIsOCBAQAogICAgICAgICAg
ICAgImRlc2NyaXB0aW9uIjogIlRoZSBjb29yZGluYXRlIHN5c3RlbSBpbiB3aGljaCByZWN0cywg
cG9pbnRzLCBhbmQgc2l6ZXMgYXJlIHRvIGJlIGludGVycHJldGVkLiIsCiAgICAgICAgICAgICAi
ZW51bSI6IFsKICAgICAgICAgICAgICAgICAiUGFnZSIsCi0gICAgICAgICAgICAgICAgIlZpZXdw
b3J0IgorICAgICAgICAgICAgICAgICJWaWV3cG9ydCIsCisgICAgICAgICAgICAgICAgIkxheW91
dFZpZXdwb3J0IgogICAgICAgICAgICAgXQogICAgICAgICB9LAogICAgICAgICB7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNz
aW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlv
blNlc3Npb24uY3BwCmluZGV4IGQ4N2E0ZGZlYzc5NGYzMWRjYjY0ZTVlOWVmNGJjZTRiMThjMTky
YTIuLjNmN2U0MGU1OGQ0YWQ4MWFmNzQyMDhiY2E2MTBiYTlmOGY1MTc3ODQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24u
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlv
blNlc3Npb24uY3BwCkBAIC0zMDUsNyArMzA1LDcgQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lv
bjo6Z2V0QnJvd3NpbmdDb250ZXh0cyhSZWY8R2V0QnJvd3NpbmdDb250ZXh0c0NhbGxiYWNrPiYK
ICAgICBnZXROZXh0Q29udGV4dChtYWtlUmVmKCp0aGlzKSwgV1RGTW92ZShwYWdlcyksIEpTT046
OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0
Pjo6Y3JlYXRlKCksIFdURk1vdmUoY2FsbGJhY2spKTsKIH0KIAotdm9pZCBXZWJBdXRvbWF0aW9u
U2Vzc2lvbjo6Z2V0QnJvd3NpbmdDb250ZXh0KGNvbnN0IFN0cmluZyYgaGFuZGxlLCBSZWY8R2V0
QnJvd3NpbmdDb250ZXh0Q2FsbGJhY2s+JiYgY2FsbGJhY2spCit2b2lkIFdlYkF1dG9tYXRpb25T
ZXNzaW9uOjpnZXRCcm93c2luZ0NvbnRleHQoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0
b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJiBoYW5kbGUsIFJlZjxHZXRCcm93c2luZ0Nv
bnRleHRDYWxsYmFjaz4mJiBjYWxsYmFjaykKIHsKICAgICBXZWJQYWdlUHJveHkqIHBhZ2UgPSB3
ZWJQYWdlUHJveHlGb3JIYW5kbGUoaGFuZGxlKTsKICAgICBpZiAoIXBhZ2UpCkBAIC0zMjgsNyAr
MzI4LDcgQEAgc3RhdGljIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5n
Q29udGV4dFByZXNlbnRhdGlvbiB0b1Byb3RvY29sKEEKICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogfQogCi12b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpjcmVhdGVCcm93c2lu
Z0NvbnRleHQoY29uc3QgU3RyaW5nKiBvcHRpb25hbFByZXNlbnRhdGlvbkhpbnQsIFJlZjxDcmVh
dGVCcm93c2luZ0NvbnRleHRDYWxsYmFjaz4mJiBjYWxsYmFjaykKK3ZvaWQgV2ViQXV0b21hdGlv
blNlc3Npb246OmNyZWF0ZUJyb3dzaW5nQ29udGV4dChPcHRpb25hbDxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRQcmVzZW50YXRpb24+JiYgcHJlc2VudGF0
aW9uSGludCwgUmVmPENyZWF0ZUJyb3dzaW5nQ29udGV4dENhbGxiYWNrPiYmIGNhbGxiYWNrKQog
ewogICAgIEFTU0VSVChtX2NsaWVudCk7CiAgICAgaWYgKCFtX2NsaWVudCkKQEAgLTMzNiwxMSAr
MzM2LDggQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6Y3JlYXRlQnJvd3NpbmdDb250ZXh0
KGNvbnN0IFN0cmluZyogb3B0aW9uYWxQcmVzZW50YXQKIAogICAgIHVpbnQxNl90IG9wdGlvbnMg
PSAwOwogCi0gICAgaWYgKG9wdGlvbmFsUHJlc2VudGF0aW9uSGludCkgewotICAgICAgICBhdXRv
IHBhcnNlZFByZXNlbnRhdGlvbkhpbnQgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9u
SGVscGVyczo6cGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1
dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dFByZXNlbnRhdGlvbj4oKm9wdGlvbmFsUHJlc2VudGF0
aW9uSGludCk7Ci0gICAgICAgIGlmIChwYXJzZWRQcmVzZW50YXRpb25IaW50Lmhhc1ZhbHVlKCkg
JiYgcGFyc2VkUHJlc2VudGF0aW9uSGludC52YWx1ZSgpID09IEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dFByZXNlbnRhdGlvbjo6VGFiKQotICAgICAgICAg
ICAgb3B0aW9ucyB8PSBBUEk6OkF1dG9tYXRpb25TZXNzaW9uQnJvd3NpbmdDb250ZXh0T3B0aW9u
c1ByZWZlck5ld1RhYjsKLSAgICB9CisgICAgaWYgKHByZXNlbnRhdGlvbkhpbnQgPT0gSW5zcGVj
dG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0UHJlc2VudGF0aW9uOjpU
YWIpCisgICAgICAgIG9wdGlvbnMgfD0gQVBJOjpBdXRvbWF0aW9uU2Vzc2lvbkJyb3dzaW5nQ29u
dGV4dE9wdGlvbnNQcmVmZXJOZXdUYWI7CiAKICAgICBtX2NsaWVudC0+cmVxdWVzdE5ld1BhZ2VX
aXRoT3B0aW9ucygqdGhpcywgc3RhdGljX2Nhc3Q8QVBJOjpBdXRvbWF0aW9uU2Vzc2lvbkJyb3dz
aW5nQ29udGV4dE9wdGlvbnM+KG9wdGlvbnMpLCBbcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRo
aXMpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spXShXZWJQYWdlUHJveHkqIHBhZ2UpIHsK
ICAgICAgICAgaWYgKCFwYWdlKQpAQCAtMzUyLDIzICszNDksMjUgQEAgdm9pZCBXZWJBdXRvbWF0
aW9uU2Vzc2lvbjo6Y3JlYXRlQnJvd3NpbmdDb250ZXh0KGNvbnN0IFN0cmluZyogb3B0aW9uYWxQ
cmVzZW50YXQKICAgICB9KTsKIH0KIAotdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6Y2xvc2VC
cm93c2luZ0NvbnRleHQoSW5zcGVjdG9yOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0
IFN0cmluZyYgaGFuZGxlKQorSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lk
PiBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6Y2xvc2VCcm93c2luZ0NvbnRleHQoY29uc3QgSW5zcGVj
dG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJiBoYW5kbGUp
CiB7CiAgICAgV2ViUGFnZVByb3h5KiBwYWdlID0gd2ViUGFnZVByb3h5Rm9ySGFuZGxlKGhhbmRs
ZSk7CiAgICAgaWYgKCFwYWdlKQogICAgICAgICBTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VS
Uk9SKFdpbmRvd05vdEZvdW5kKTsKIAogICAgIHBhZ2UtPmNsb3NlUGFnZSgpOworCisgICAgcmV0
dXJuIHsgfTsKIH0KIAotdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6c3dpdGNoVG9Ccm93c2lu
Z0NvbnRleHQoY29uc3QgU3RyaW5nJiBicm93c2luZ0NvbnRleHRIYW5kbGUsIGNvbnN0IFN0cmlu
Zyogb3B0aW9uYWxGcmFtZUhhbmRsZSwgUmVmPFN3aXRjaFRvQnJvd3NpbmdDb250ZXh0Q2FsbGJh
Y2s+JiYgY2FsbGJhY2spCit2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpzd2l0Y2hUb0Jyb3dz
aW5nQ29udGV4dChjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2lu
Z0NvbnRleHRIYW5kbGUmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSwgY29uc3QgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6QXV0b21hdGlvbjo6RnJhbWVIYW5kbGUmIGZyYW1lSGFuZGxlLCBSZWY8U3dpdGNo
VG9Ccm93c2luZ0NvbnRleHRDYWxsYmFjaz4mJiBjYWxsYmFjaykKIHsKICAgICBXZWJQYWdlUHJv
eHkqIHBhZ2UgPSB3ZWJQYWdlUHJveHlGb3JIYW5kbGUoYnJvd3NpbmdDb250ZXh0SGFuZGxlKTsK
ICAgICBpZiAoIXBhZ2UpCiAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9S
KFdpbmRvd05vdEZvdW5kKTsKIAogICAgIGJvb2wgZnJhbWVOb3RGb3VuZCA9IGZhbHNlOwotICAg
IGF1dG8gZnJhbWVJRCA9IHdlYkZyYW1lSURGb3JIYW5kbGUob3B0aW9uYWxGcmFtZUhhbmRsZSA/
ICpvcHRpb25hbEZyYW1lSGFuZGxlIDogZW1wdHlTdHJpbmcoKSwgZnJhbWVOb3RGb3VuZCk7Cisg
ICAgYXV0byBmcmFtZUlEID0gd2ViRnJhbWVJREZvckhhbmRsZShmcmFtZUhhbmRsZSwgZnJhbWVO
b3RGb3VuZCk7CiAgICAgaWYgKGZyYW1lTm90Rm91bmQpCiAgICAgICAgIEFTWU5DX0ZBSUxfV0lU
SF9QUkVERUZJTkVEX0VSUk9SKEZyYW1lTm90Rm91bmQpOwogCkBAIC0zODEsMjUgKzM4MCwyNSBA
QCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpzd2l0Y2hUb0Jyb3dzaW5nQ29udGV4dChjb25z
dCBTdHJpbmcmIGJyb3dzaW5nQ29udGV4dAogICAgIH0pOwogfQogCi12b2lkIFdlYkF1dG9tYXRp
b25TZXNzaW9uOjpzZXRXaW5kb3dGcmFtZU9mQnJvd3NpbmdDb250ZXh0KGNvbnN0IFN0cmluZyYg
aGFuZGxlLCBjb25zdCBKU09OOjpPYmplY3QqIG9wdGlvbmFsT3JpZ2luT2JqZWN0LCBjb25zdCBK
U09OOjpPYmplY3QqIG9wdGlvbmFsU2l6ZU9iamVjdCwgUmVmPFNldFdpbmRvd0ZyYW1lT2ZCcm93
c2luZ0NvbnRleHRDYWxsYmFjaz4mJiBjYWxsYmFjaykKK3ZvaWQgV2ViQXV0b21hdGlvblNlc3Np
b246OnNldFdpbmRvd0ZyYW1lT2ZCcm93c2luZ0NvbnRleHQoY29uc3QgSW5zcGVjdG9yOjpQcm90
b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJiBoYW5kbGUsIFJlZlB0cjxK
U09OOjpPYmplY3Q+JiYgb3JpZ2luLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHNpemUsIFJlZjxT
ZXRXaW5kb3dGcmFtZU9mQnJvd3NpbmdDb250ZXh0Q2FsbGJhY2s+JiYgY2FsbGJhY2spCiB7Ci0g
ICAgT3B0aW9uYWw8ZmxvYXQ+IHg7Ci0gICAgT3B0aW9uYWw8ZmxvYXQ+IHk7Ci0gICAgaWYgKG9w
dGlvbmFsT3JpZ2luT2JqZWN0KSB7Ci0gICAgICAgIGlmICghKHggPSBvcHRpb25hbE9yaWdpbk9i
amVjdC0+Z2V0TnVtYmVyPGZsb2F0PigieCJfcykpKQorICAgIE9wdGlvbmFsPGRvdWJsZT4geDsK
KyAgICBPcHRpb25hbDxkb3VibGU+IHk7CisgICAgaWYgKG9yaWdpbikgeworICAgICAgICBpZiAo
ISh4ID0gb3JpZ2luLT5nZXREb3VibGUoIngiX3MpKSkKICAgICAgICAgICAgIEFTWU5DX0ZBSUxf
V0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxTKE1pc3NpbmdQYXJhbWV0ZXIsICJUaGUg
J3gnIHBhcmFtZXRlciB3YXMgbm90IGZvdW5kIG9yIGludmFsaWQuIik7CiAKLSAgICAgICAgaWYg
KCEoeSA9IG9wdGlvbmFsT3JpZ2luT2JqZWN0LT5nZXROdW1iZXI8ZmxvYXQ+KCJ5Il9zKSkpCisg
ICAgICAgIGlmICghKHkgPSBvcmlnaW4tPmdldERvdWJsZSgieSJfcykpKQogICAgICAgICAgICAg
QVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoTWlzc2luZ1BhcmFt
ZXRlciwgIlRoZSAneScgcGFyYW1ldGVyIHdhcyBub3QgZm91bmQgb3IgaW52YWxpZC4iKTsKICAg
ICB9CiAKLSAgICBPcHRpb25hbDxmbG9hdD4gd2lkdGg7Ci0gICAgT3B0aW9uYWw8ZmxvYXQ+IGhl
aWdodDsKLSAgICBpZiAob3B0aW9uYWxTaXplT2JqZWN0KSB7Ci0gICAgICAgIGlmICghKHdpZHRo
ID0gb3B0aW9uYWxTaXplT2JqZWN0LT5nZXROdW1iZXI8ZmxvYXQ+KCJ3aWR0aCJfcykpKQorICAg
IE9wdGlvbmFsPGRvdWJsZT4gd2lkdGg7CisgICAgT3B0aW9uYWw8ZG91YmxlPiBoZWlnaHQ7Cisg
ICAgaWYgKHNpemUpIHsKKyAgICAgICAgaWYgKCEod2lkdGggPSBzaXplLT5nZXREb3VibGUoIndp
ZHRoIl9zKSkpCiAgICAgICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUl9B
TkRfREVUQUlMUyhNaXNzaW5nUGFyYW1ldGVyLCAiVGhlICd3aWR0aCcgcGFyYW1ldGVyIHdhcyBu
b3QgZm91bmQgb3IgaW52YWxpZC4iKTsKIAotICAgICAgICBpZiAoIShoZWlnaHQgPSBvcHRpb25h
bFNpemVPYmplY3QtPmdldE51bWJlcjxmbG9hdD4oImhlaWdodCJfcykpKQorICAgICAgICBpZiAo
IShoZWlnaHQgPSBzaXplLT5nZXREb3VibGUoImhlaWdodCJfcykpKQogICAgICAgICAgICAgQVNZ
TkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoTWlzc2luZ1BhcmFtZXRl
ciwgIlRoZSAnaGVpZ2h0JyBwYXJhbWV0ZXIgd2FzIG5vdCBmb3VuZCBvciBpbnZhbGlkLiIpOwog
CiAgICAgICAgIGlmICh3aWR0aC52YWx1ZSgpIDwgMCkKQEAgLTQyOCwyNiArNDI3LDE4IEBAIHZv
aWQgV2ViQXV0b21hdGlvblNlc3Npb246OnNldFdpbmRvd0ZyYW1lT2ZCcm93c2luZ0NvbnRleHQo
Y29uc3QgU3RyaW5nJiBoYW5kbGUsCiAgICAgfSk7CiB9CiAKLXN0YXRpYyBPcHRpb25hbDxJbnNw
ZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpQYWdlTG9hZFN0cmF0ZWd5PiBwYWdlTG9hZFN0
cmF0ZWd5RnJvbVN0cmluZ1BhcmFtZXRlcihjb25zdCBTdHJpbmcqIG9wdGlvbmFsUGFnZUxvYWRT
dHJhdGVneVN0cmluZykKK3N0YXRpYyBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpQ
YWdlTG9hZFN0cmF0ZWd5IHBhZ2VMb2FkU3RyYXRlZ3lGcm9tUGFyYW1ldGVyKE9wdGlvbmFsPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OlBhZ2VMb2FkU3RyYXRlZ3k+JiYgb3B0aW9u
YWxQYWdlTG9hZFN0cmF0ZWd5KQogewotICAgIGlmICghb3B0aW9uYWxQYWdlTG9hZFN0cmF0ZWd5
U3RyaW5nKQotICAgICAgICByZXR1cm4gZGVmYXVsdFBhZ2VMb2FkU3RyYXRlZ3k7Ci0KLSAgICBh
dXRvIHBhcnNlZFBhZ2VMb2FkU3RyYXRlZ3kgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0
aW9uSGVscGVyczo6cGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkF1dG9tYXRpb246OlBhZ2VMb2FkU3RyYXRlZ3k+KCpvcHRpb25hbFBhZ2VMb2FkU3RyYXRlZ3lT
dHJpbmcpOwotICAgIGlmICghcGFyc2VkUGFnZUxvYWRTdHJhdGVneSkKLSAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKLSAgICByZXR1cm4gcGFyc2VkUGFnZUxvYWRTdHJhdGVneTsKKyAgICBy
ZXR1cm4gb3B0aW9uYWxQYWdlTG9hZFN0cmF0ZWd5LnZhbHVlT3IoZGVmYXVsdFBhZ2VMb2FkU3Ry
YXRlZ3kpOwogfQogCi12b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjp3YWl0Rm9yTmF2aWdhdGlv
blRvQ29tcGxldGUoY29uc3QgU3RyaW5nJiBicm93c2luZ0NvbnRleHRIYW5kbGUsIGNvbnN0IFN0
cmluZyogb3B0aW9uYWxGcmFtZUhhbmRsZSwgY29uc3QgU3RyaW5nKiBvcHRpb25hbFBhZ2VMb2Fk
U3RyYXRlZ3lTdHJpbmcsIGNvbnN0IGRvdWJsZSogb3B0aW9uYWxQYWdlTG9hZFRpbWVvdXQsIFJl
ZjxXYWl0Rm9yTmF2aWdhdGlvblRvQ29tcGxldGVDYWxsYmFjaz4mJiBjYWxsYmFjaykKK3ZvaWQg
V2ViQXV0b21hdGlvblNlc3Npb246OndhaXRGb3JOYXZpZ2F0aW9uVG9Db21wbGV0ZShjb25zdCBJ
bnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRIYW5kbGUmIGJy
b3dzaW5nQ29udGV4dEhhbmRsZSwgY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlv
bjo6RnJhbWVIYW5kbGUmIG9wdGlvbmFsRnJhbWVIYW5kbGUsIE9wdGlvbmFsPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkF1dG9tYXRpb246OlBhZ2VMb2FkU3RyYXRlZ3k+JiYgb3B0aW9uYWxQYWdlTG9h
ZFN0cmF0ZWd5LCBPcHRpb25hbDxkb3VibGU+JiYgb3B0aW9uYWxQYWdlTG9hZFRpbWVvdXQsIFJl
ZjxXYWl0Rm9yTmF2aWdhdGlvblRvQ29tcGxldGVDYWxsYmFjaz4mJiBjYWxsYmFjaykKIHsKICAg
ICBXZWJQYWdlUHJveHkqIHBhZ2UgPSB3ZWJQYWdlUHJveHlGb3JIYW5kbGUoYnJvd3NpbmdDb250
ZXh0SGFuZGxlKTsKICAgICBpZiAoIXBhZ2UpCiAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVE
RUZJTkVEX0VSUk9SKFdpbmRvd05vdEZvdW5kKTsKIAotICAgIGF1dG8gcGFnZUxvYWRTdHJhdGVn
eSA9IHBhZ2VMb2FkU3RyYXRlZ3lGcm9tU3RyaW5nUGFyYW1ldGVyKG9wdGlvbmFsUGFnZUxvYWRT
dHJhdGVneVN0cmluZyk7Ci0gICAgaWYgKCFwYWdlTG9hZFN0cmF0ZWd5KQotICAgICAgICBBU1lO
Q19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhJbnZhbGlkUGFyYW1ldGVy
LCAiVGhlIHBhcmFtZXRlciAncGFnZUxvYWRTdHJhdGVneScgaXMgaW52YWxpZC4iKTsKKyAgICBh
dXRvIHBhZ2VMb2FkU3RyYXRlZ3kgPSBwYWdlTG9hZFN0cmF0ZWd5RnJvbVBhcmFtZXRlcihXVEZN
b3ZlKG9wdGlvbmFsUGFnZUxvYWRTdHJhdGVneSkpOwogICAgIGF1dG8gcGFnZUxvYWRUaW1lb3V0
ID0gb3B0aW9uYWxQYWdlTG9hZFRpbWVvdXQgPyBTZWNvbmRzOjpmcm9tTWlsbGlzZWNvbmRzKCpv
cHRpb25hbFBhZ2VMb2FkVGltZW91dCkgOiBkZWZhdWx0UGFnZUxvYWRUaW1lb3V0OwogCiAgICAg
Ly8gSWYgcGFnZSBpcyBsb2FkaW5nIGFuZCB0aGVyZSdzIGFuIGFjdGl2ZSBKYXZhU2NyaXB0IGRp
YWxvZyBpcyBwcm9iYWJseSBiZWNhdXNlIHRoZQpAQCAtNDU1LDIyICs0NDYsMjIgQEAgdm9pZCBX
ZWJBdXRvbWF0aW9uU2Vzc2lvbjo6d2FpdEZvck5hdmlnYXRpb25Ub0NvbXBsZXRlKGNvbnN0IFN0
cmluZyYgYnJvd3NpbmdDb24KICAgICAvLyBsb2FkIHdpbGwgbm90IGZpbmlzaCB1bnRpbCB0aGUg
ZGlhbG9nIGlzIGRpc21pc3NlZC4gSW5zdGVhZCBvZiB3YWl0aW5nIGZvciB0aGUgdGltZW91dCwK
ICAgICAvLyB3ZSByZXR1cm4gd2l0aG91dCB3YWl0aW5nIHNpbmNlIHdlIGtub3cgaXQgd2lsbCB0
aW1lb3V0IGZvciBzdXJlLiBXZSB3YW50IHRvIGNoZWNrCiAgICAgLy8gYXJndW1lbnRzIGZpcnN0
LCB0aG91Z2guCi0gICAgYm9vbCBzaG91bGRUaW1lb3V0RHVlVG9VbmV4cGVjdGVkQWxlcnQgPSBw
YWdlTG9hZFN0cmF0ZWd5LnZhbHVlKCkgPT0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlv
bjo6UGFnZUxvYWRTdHJhdGVneTo6Tm9ybWFsCisgICAgYm9vbCBzaG91bGRUaW1lb3V0RHVlVG9V
bmV4cGVjdGVkQWxlcnQgPSBwYWdlTG9hZFN0cmF0ZWd5ID09IEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkF1dG9tYXRpb246OlBhZ2VMb2FkU3RyYXRlZ3k6Ok5vcm1hbAogICAgICAgICAmJiBwYWdlLT5w
YWdlTG9hZFN0YXRlKCkuaXNMb2FkaW5nKCkgJiYgbV9jbGllbnQtPmlzU2hvd2luZ0phdmFTY3Jp
cHREaWFsb2dPblBhZ2UoKnRoaXMsICpwYWdlKTsKIAotICAgIGlmIChvcHRpb25hbEZyYW1lSGFu
ZGxlICYmICFvcHRpb25hbEZyYW1lSGFuZGxlLT5pc0VtcHR5KCkpIHsKKyAgICBpZiAoIW9wdGlv
bmFsRnJhbWVIYW5kbGUuaXNFbXB0eSgpKSB7CiAgICAgICAgIGJvb2wgZnJhbWVOb3RGb3VuZCA9
IGZhbHNlOwotICAgICAgICBhdXRvIGZyYW1lSUQgPSB3ZWJGcmFtZUlERm9ySGFuZGxlKCpvcHRp
b25hbEZyYW1lSGFuZGxlLCBmcmFtZU5vdEZvdW5kKTsKKyAgICAgICAgYXV0byBmcmFtZUlEID0g
d2ViRnJhbWVJREZvckhhbmRsZShvcHRpb25hbEZyYW1lSGFuZGxlLCBmcmFtZU5vdEZvdW5kKTsK
ICAgICAgICAgaWYgKGZyYW1lTm90Rm91bmQpCiAgICAgICAgICAgICBBU1lOQ19GQUlMX1dJVEhf
UFJFREVGSU5FRF9FUlJPUihGcmFtZU5vdEZvdW5kKTsKICAgICAgICAgV2ViRnJhbWVQcm94eSog
ZnJhbWUgPSBwYWdlLT5wcm9jZXNzKCkud2ViRnJhbWUoZnJhbWVJRC52YWx1ZSgpKTsKICAgICAg
ICAgaWYgKCFmcmFtZSkKICAgICAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VS
Uk9SKEZyYW1lTm90Rm91bmQpOwogICAgICAgICBpZiAoIXNob3VsZFRpbWVvdXREdWVUb1VuZXhw
ZWN0ZWRBbGVydCkKLSAgICAgICAgICAgIHdhaXRGb3JOYXZpZ2F0aW9uVG9Db21wbGV0ZU9uRnJh
bWUoKmZyYW1lLCBwYWdlTG9hZFN0cmF0ZWd5LnZhbHVlKCksIHBhZ2VMb2FkVGltZW91dCwgV1RG
TW92ZShjYWxsYmFjaykpOworICAgICAgICAgICAgd2FpdEZvck5hdmlnYXRpb25Ub0NvbXBsZXRl
T25GcmFtZSgqZnJhbWUsIHBhZ2VMb2FkU3RyYXRlZ3ksIHBhZ2VMb2FkVGltZW91dCwgV1RGTW92
ZShjYWxsYmFjaykpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmICghc2hvdWxkVGltZW91dER1
ZVRvVW5leHBlY3RlZEFsZXJ0KQotICAgICAgICAgICAgd2FpdEZvck5hdmlnYXRpb25Ub0NvbXBs
ZXRlT25QYWdlKCpwYWdlLCBwYWdlTG9hZFN0cmF0ZWd5LnZhbHVlKCksIHBhZ2VMb2FkVGltZW91
dCwgV1RGTW92ZShjYWxsYmFjaykpOworICAgICAgICAgICAgd2FpdEZvck5hdmlnYXRpb25Ub0Nv
bXBsZXRlT25QYWdlKCpwYWdlLCBwYWdlTG9hZFN0cmF0ZWd5LCBwYWdlTG9hZFRpbWVvdXQsIFdU
Rk1vdmUoY2FsbGJhY2spKTsKICAgICB9CiAKICAgICBpZiAoc2hvdWxkVGltZW91dER1ZVRvVW5l
eHBlY3RlZEFsZXJ0KSB7CkBAIC01MjcsNyArNTE4LDcgQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vz
c2lvbjo6d2FpdEZvck5hdmlnYXRpb25Ub0NvbXBsZXRlT25GcmFtZShXZWJGcmFtZVByb3h5JiBm
cmEKIAogdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6cmVzcG9uZFRvUGVuZGluZ1BhZ2VOYXZp
Z2F0aW9uQ2FsbGJhY2tzV2l0aFRpbWVvdXQoSGFzaE1hcDxXZWJQYWdlUHJveHlJZGVudGlmaWVy
LCBSZWZQdHI8SW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlPj4mIG1h
cCkKIHsKLSAgICBJbnNwZWN0b3I6OkVycm9yU3RyaW5nIHRpbWVvdXRFcnJvciA9IFNUUklOR19G
T1JfUFJFREVGSU5FRF9FUlJPUl9OQU1FKFRpbWVvdXQpOworICAgIGF1dG8gdGltZW91dEVycm9y
ID0gU1RSSU5HX0ZPUl9QUkVERUZJTkVEX0VSUk9SX05BTUUoVGltZW91dCk7CiAgICAgZm9yIChh
dXRvIGlkIDogY29weVRvVmVjdG9yKG1hcC5rZXlzKCkpKSB7CiAgICAgICAgIGF1dG8gcGFnZSA9
IFdlYlByb2Nlc3NQcm94eTo6d2ViUGFnZShpZCk7CiAgICAgICAgIGF1dG8gY2FsbGJhY2sgPSBt
YXAudGFrZShpZCk7CkBAIC01NDksNyArNTQwLDcgQEAgc3RhdGljIFdlYlBhZ2VQcm94eSogZmlu
ZFBhZ2VGb3JGcmFtZUlEKGNvbnN0IFdlYlByb2Nlc3NQb29sJiBwcm9jZXNzUG9vbCwgRnJhbWUK
IAogdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6cmVzcG9uZFRvUGVuZGluZ0ZyYW1lTmF2aWdh
dGlvbkNhbGxiYWNrc1dpdGhUaW1lb3V0KEhhc2hNYXA8RnJhbWVJZGVudGlmaWVyLCBSZWZQdHI8
SW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlPj4mIG1hcCkKIHsKLSAg
ICBJbnNwZWN0b3I6OkVycm9yU3RyaW5nIHRpbWVvdXRFcnJvciA9IFNUUklOR19GT1JfUFJFREVG
SU5FRF9FUlJPUl9OQU1FKFRpbWVvdXQpOworICAgIGF1dG8gdGltZW91dEVycm9yID0gU1RSSU5H
X0ZPUl9QUkVERUZJTkVEX0VSUk9SX05BTUUoVGltZW91dCk7CiAgICAgZm9yIChhdXRvIGlkIDog
Y29weVRvVmVjdG9yKG1hcC5rZXlzKCkpKSB7CiAgICAgICAgIGF1dG8qIHBhZ2UgPSBmaW5kUGFn
ZUZvckZyYW1lSUQoKm1fcHJvY2Vzc1Bvb2wsIGlkKTsKICAgICAgICAgYXV0byBjYWxsYmFjayA9
IG1hcC50YWtlKGlkKTsKQEAgLTU2OCw3ICs1NTksNyBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNz
aW9uOjpsb2FkVGltZXJGaXJlZCgpCiAgICAgcmVzcG9uZFRvUGVuZGluZ1BhZ2VOYXZpZ2F0aW9u
Q2FsbGJhY2tzV2l0aFRpbWVvdXQobV9wZW5kaW5nRWFnZXJOYXZpZ2F0aW9uSW5Ccm93c2luZ0Nv
bnRleHRDYWxsYmFja3NQZXJQYWdlKTsKIH0KIAotdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6
bWF4aW1pemVXaW5kb3dPZkJyb3dzaW5nQ29udGV4dChjb25zdCBTdHJpbmcmIGJyb3dzaW5nQ29u
dGV4dEhhbmRsZSwgUmVmPE1heGltaXplV2luZG93T2ZCcm93c2luZ0NvbnRleHRDYWxsYmFjaz4m
JiBjYWxsYmFjaykKK3ZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246Om1heGltaXplV2luZG93T2ZC
cm93c2luZ0NvbnRleHQoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJv
d3NpbmdDb250ZXh0SGFuZGxlJiBicm93c2luZ0NvbnRleHRIYW5kbGUsIFJlZjxNYXhpbWl6ZVdp
bmRvd09mQnJvd3NpbmdDb250ZXh0Q2FsbGJhY2s+JiYgY2FsbGJhY2spCiB7CiAgICAgYXV0byog
cGFnZSA9IHdlYlBhZ2VQcm94eUZvckhhbmRsZShicm93c2luZ0NvbnRleHRIYW5kbGUpOwogICAg
IGlmICghcGFnZSkKQEAgLTU4NCw3ICs1NzUsNyBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9u
OjptYXhpbWl6ZVdpbmRvd09mQnJvd3NpbmdDb250ZXh0KGNvbnN0IFN0cmluZyYgYnJvd3Npbgog
ICAgIH0pOwogfQogCi12b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpoaWRlV2luZG93T2ZCcm93
c2luZ0NvbnRleHQoY29uc3QgU3RyaW5nJiBicm93c2luZ0NvbnRleHRIYW5kbGUsIFJlZjxIaWRl
V2luZG93T2ZCcm93c2luZ0NvbnRleHRDYWxsYmFjaz4mJiBjYWxsYmFjaykKK3ZvaWQgV2ViQXV0
b21hdGlvblNlc3Npb246OmhpZGVXaW5kb3dPZkJyb3dzaW5nQ29udGV4dChjb25zdCBJbnNwZWN0
b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRIYW5kbGUmIGJyb3dzaW5n
Q29udGV4dEhhbmRsZSwgUmVmPEhpZGVXaW5kb3dPZkJyb3dzaW5nQ29udGV4dENhbGxiYWNrPiYm
IGNhbGxiYWNrKQogewogICAgIFdlYlBhZ2VQcm94eSogcGFnZSA9IHdlYlBhZ2VQcm94eUZvckhh
bmRsZShicm93c2luZ0NvbnRleHRIYW5kbGUpOwogICAgIGlmICghcGFnZSkKQEAgLTY5Myw2NCAr
Njg0LDU2IEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OmRpZEV4aXRGdWxsU2NyZWVuRm9y
UGFnZShjb25zdCBXZWJQYWdlUHJveHkmKQogICAgICAgICBtX3dpbmRvd1N0YXRlVHJhbnNpdGlv
bkNhbGxiYWNrKFdpbmRvd1RyYW5zaXRpb25lZFRvU3RhdGU6OlVuZnVsbHNjcmVlbik7CiB9CiAK
LXZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246Om5hdmlnYXRlQnJvd3NpbmdDb250ZXh0KGNvbnN0
IFN0cmluZyYgaGFuZGxlLCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nKiBvcHRpb25h
bFBhZ2VMb2FkU3RyYXRlZ3lTdHJpbmcsIGNvbnN0IGRvdWJsZSogb3B0aW9uYWxQYWdlTG9hZFRp
bWVvdXQsIFJlZjxOYXZpZ2F0ZUJyb3dzaW5nQ29udGV4dENhbGxiYWNrPiYmIGNhbGxiYWNrKQor
dm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6bmF2aWdhdGVCcm93c2luZ0NvbnRleHQoY29uc3Qg
SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJiBo
YW5kbGUsIGNvbnN0IFN0cmluZyYgdXJsLCBPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpB
dXRvbWF0aW9uOjpQYWdlTG9hZFN0cmF0ZWd5PiYmIG9wdGlvbmFsUGFnZUxvYWRTdHJhdGVneSwg
T3B0aW9uYWw8ZG91YmxlPiYmIG9wdGlvbmFsUGFnZUxvYWRUaW1lb3V0LCBSZWY8TmF2aWdhdGVC
cm93c2luZ0NvbnRleHRDYWxsYmFjaz4mJiBjYWxsYmFjaykKIHsKICAgICBXZWJQYWdlUHJveHkq
IHBhZ2UgPSB3ZWJQYWdlUHJveHlGb3JIYW5kbGUoaGFuZGxlKTsKICAgICBpZiAoIXBhZ2UpCiAg
ICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SKFdpbmRvd05vdEZvdW5kKTsK
IAotICAgIGF1dG8gcGFnZUxvYWRTdHJhdGVneSA9IHBhZ2VMb2FkU3RyYXRlZ3lGcm9tU3RyaW5n
UGFyYW1ldGVyKG9wdGlvbmFsUGFnZUxvYWRTdHJhdGVneVN0cmluZyk7Ci0gICAgaWYgKCFwYWdl
TG9hZFN0cmF0ZWd5KQotICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUl9B
TkRfREVUQUlMUyhJbnZhbGlkUGFyYW1ldGVyLCAiVGhlIHBhcmFtZXRlciAncGFnZUxvYWRTdHJh
dGVneScgaXMgaW52YWxpZC4iKTsKKyAgICBhdXRvIHBhZ2VMb2FkU3RyYXRlZ3kgPSBwYWdlTG9h
ZFN0cmF0ZWd5RnJvbVBhcmFtZXRlcihXVEZNb3ZlKG9wdGlvbmFsUGFnZUxvYWRTdHJhdGVneSkp
OwogICAgIGF1dG8gcGFnZUxvYWRUaW1lb3V0ID0gb3B0aW9uYWxQYWdlTG9hZFRpbWVvdXQgPyBT
ZWNvbmRzOjpmcm9tTWlsbGlzZWNvbmRzKCpvcHRpb25hbFBhZ2VMb2FkVGltZW91dCkgOiBkZWZh
dWx0UGFnZUxvYWRUaW1lb3V0OwogCiAgICAgcGFnZS0+bG9hZFJlcXVlc3QoVVJMKFVSTCgpLCB1
cmwpKTsKLSAgICB3YWl0Rm9yTmF2aWdhdGlvblRvQ29tcGxldGVPblBhZ2UoKnBhZ2UsIHBhZ2VM
b2FkU3RyYXRlZ3kudmFsdWUoKSwgcGFnZUxvYWRUaW1lb3V0LCBXVEZNb3ZlKGNhbGxiYWNrKSk7
CisgICAgd2FpdEZvck5hdmlnYXRpb25Ub0NvbXBsZXRlT25QYWdlKCpwYWdlLCBwYWdlTG9hZFN0
cmF0ZWd5LCBwYWdlTG9hZFRpbWVvdXQsIFdURk1vdmUoY2FsbGJhY2spKTsKIH0KIAotdm9pZCBX
ZWJBdXRvbWF0aW9uU2Vzc2lvbjo6Z29CYWNrSW5Ccm93c2luZ0NvbnRleHQoY29uc3QgU3RyaW5n
JiBoYW5kbGUsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxQYWdlTG9hZFN0cmF0ZWd5U3RyaW5nLCBj
b25zdCBkb3VibGUqIG9wdGlvbmFsUGFnZUxvYWRUaW1lb3V0LCBSZWY8R29CYWNrSW5Ccm93c2lu
Z0NvbnRleHRDYWxsYmFjaz4mJiBjYWxsYmFjaykKK3ZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246
OmdvQmFja0luQnJvd3NpbmdDb250ZXh0KGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9t
YXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYgaGFuZGxlLCBPcHRpb25hbDxJbnNwZWN0b3I6
OlByb3RvY29sOjpBdXRvbWF0aW9uOjpQYWdlTG9hZFN0cmF0ZWd5PiYmIG9wdGlvbmFsUGFnZUxv
YWRTdHJhdGVneSwgT3B0aW9uYWw8ZG91YmxlPiYmIG9wdGlvbmFsUGFnZUxvYWRUaW1lb3V0LCBS
ZWY8R29CYWNrSW5Ccm93c2luZ0NvbnRleHRDYWxsYmFjaz4mJiBjYWxsYmFjaykKIHsKICAgICBX
ZWJQYWdlUHJveHkqIHBhZ2UgPSB3ZWJQYWdlUHJveHlGb3JIYW5kbGUoaGFuZGxlKTsKICAgICBp
ZiAoIXBhZ2UpCiAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SKFdpbmRv
d05vdEZvdW5kKTsKIAotICAgIGF1dG8gcGFnZUxvYWRTdHJhdGVneSA9IHBhZ2VMb2FkU3RyYXRl
Z3lGcm9tU3RyaW5nUGFyYW1ldGVyKG9wdGlvbmFsUGFnZUxvYWRTdHJhdGVneVN0cmluZyk7Ci0g
ICAgaWYgKCFwYWdlTG9hZFN0cmF0ZWd5KQotICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVG
SU5FRF9FUlJPUl9BTkRfREVUQUlMUyhJbnZhbGlkUGFyYW1ldGVyLCAiVGhlIHBhcmFtZXRlciAn
cGFnZUxvYWRTdHJhdGVneScgaXMgaW52YWxpZC4iKTsKKyAgICBhdXRvIHBhZ2VMb2FkU3RyYXRl
Z3kgPSBwYWdlTG9hZFN0cmF0ZWd5RnJvbVBhcmFtZXRlcihXVEZNb3ZlKG9wdGlvbmFsUGFnZUxv
YWRTdHJhdGVneSkpOwogICAgIGF1dG8gcGFnZUxvYWRUaW1lb3V0ID0gb3B0aW9uYWxQYWdlTG9h
ZFRpbWVvdXQgPyBTZWNvbmRzOjpmcm9tTWlsbGlzZWNvbmRzKCpvcHRpb25hbFBhZ2VMb2FkVGlt
ZW91dCkgOiBkZWZhdWx0UGFnZUxvYWRUaW1lb3V0OwogCiAgICAgcGFnZS0+Z29CYWNrKCk7Ci0g
ICAgd2FpdEZvck5hdmlnYXRpb25Ub0NvbXBsZXRlT25QYWdlKCpwYWdlLCBwYWdlTG9hZFN0cmF0
ZWd5LnZhbHVlKCksIHBhZ2VMb2FkVGltZW91dCwgV1RGTW92ZShjYWxsYmFjaykpOworICAgIHdh
aXRGb3JOYXZpZ2F0aW9uVG9Db21wbGV0ZU9uUGFnZSgqcGFnZSwgcGFnZUxvYWRTdHJhdGVneSwg
cGFnZUxvYWRUaW1lb3V0LCBXVEZNb3ZlKGNhbGxiYWNrKSk7CiB9CiAKLXZvaWQgV2ViQXV0b21h
dGlvblNlc3Npb246OmdvRm9yd2FyZEluQnJvd3NpbmdDb250ZXh0KGNvbnN0IFN0cmluZyYgaGFu
ZGxlLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsUGFnZUxvYWRTdHJhdGVneVN0cmluZywgY29uc3Qg
ZG91YmxlKiBvcHRpb25hbFBhZ2VMb2FkVGltZW91dCwgUmVmPEdvRm9yd2FyZEluQnJvd3NpbmdD
b250ZXh0Q2FsbGJhY2s+JiYgY2FsbGJhY2spCit2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpn
b0ZvcndhcmRJbkJyb3dzaW5nQ29udGV4dChjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRv
bWF0aW9uOjpCcm93c2luZ0NvbnRleHRIYW5kbGUmIGhhbmRsZSwgT3B0aW9uYWw8SW5zcGVjdG9y
OjpQcm90b2NvbDo6QXV0b21hdGlvbjo6UGFnZUxvYWRTdHJhdGVneT4mJiBvcHRpb25hbFBhZ2VM
b2FkU3RyYXRlZ3ksIE9wdGlvbmFsPGRvdWJsZT4mJiBvcHRpb25hbFBhZ2VMb2FkVGltZW91dCwg
UmVmPEdvRm9yd2FyZEluQnJvd3NpbmdDb250ZXh0Q2FsbGJhY2s+JiYgY2FsbGJhY2spCiB7CiAg
ICAgV2ViUGFnZVByb3h5KiBwYWdlID0gd2ViUGFnZVByb3h5Rm9ySGFuZGxlKGhhbmRsZSk7CiAg
ICAgaWYgKCFwYWdlKQogICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUihX
aW5kb3dOb3RGb3VuZCk7CiAKLSAgICBhdXRvIHBhZ2VMb2FkU3RyYXRlZ3kgPSBwYWdlTG9hZFN0
cmF0ZWd5RnJvbVN0cmluZ1BhcmFtZXRlcihvcHRpb25hbFBhZ2VMb2FkU3RyYXRlZ3lTdHJpbmcp
OwotICAgIGlmICghcGFnZUxvYWRTdHJhdGVneSkKLSAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BS
RURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoSW52YWxpZFBhcmFtZXRlciwgIlRoZSBwYXJhbWV0
ZXIgJ3BhZ2VMb2FkU3RyYXRlZ3knIGlzIGludmFsaWQuIik7CisgICAgYXV0byBwYWdlTG9hZFN0
cmF0ZWd5ID0gcGFnZUxvYWRTdHJhdGVneUZyb21QYXJhbWV0ZXIoV1RGTW92ZShvcHRpb25hbFBh
Z2VMb2FkU3RyYXRlZ3kpKTsKICAgICBhdXRvIHBhZ2VMb2FkVGltZW91dCA9IG9wdGlvbmFsUGFn
ZUxvYWRUaW1lb3V0ID8gU2Vjb25kczo6ZnJvbU1pbGxpc2Vjb25kcygqb3B0aW9uYWxQYWdlTG9h
ZFRpbWVvdXQpIDogZGVmYXVsdFBhZ2VMb2FkVGltZW91dDsKIAogICAgIHBhZ2UtPmdvRm9yd2Fy
ZCgpOwotICAgIHdhaXRGb3JOYXZpZ2F0aW9uVG9Db21wbGV0ZU9uUGFnZSgqcGFnZSwgcGFnZUxv
YWRTdHJhdGVneS52YWx1ZSgpLCBwYWdlTG9hZFRpbWVvdXQsIFdURk1vdmUoY2FsbGJhY2spKTsK
KyAgICB3YWl0Rm9yTmF2aWdhdGlvblRvQ29tcGxldGVPblBhZ2UoKnBhZ2UsIHBhZ2VMb2FkU3Ry
YXRlZ3ksIHBhZ2VMb2FkVGltZW91dCwgV1RGTW92ZShjYWxsYmFjaykpOwogfQogCi12b2lkIFdl
YkF1dG9tYXRpb25TZXNzaW9uOjpyZWxvYWRCcm93c2luZ0NvbnRleHQoY29uc3QgU3RyaW5nJiBo
YW5kbGUsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxQYWdlTG9hZFN0cmF0ZWd5U3RyaW5nLCBjb25z
dCBkb3VibGUqIG9wdGlvbmFsUGFnZUxvYWRUaW1lb3V0LCBSZWY8UmVsb2FkQnJvd3NpbmdDb250
ZXh0Q2FsbGJhY2s+JiYgY2FsbGJhY2spCit2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpyZWxv
YWRCcm93c2luZ0NvbnRleHQoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6
QnJvd3NpbmdDb250ZXh0SGFuZGxlJiBoYW5kbGUsIE9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkF1dG9tYXRpb246OlBhZ2VMb2FkU3RyYXRlZ3k+JiYgb3B0aW9uYWxQYWdlTG9hZFN0cmF0
ZWd5LCBPcHRpb25hbDxkb3VibGU+JiYgb3B0aW9uYWxQYWdlTG9hZFRpbWVvdXQsIFJlZjxSZWxv
YWRCcm93c2luZ0NvbnRleHRDYWxsYmFjaz4mJiBjYWxsYmFjaykKIHsKICAgICBXZWJQYWdlUHJv
eHkqIHBhZ2UgPSB3ZWJQYWdlUHJveHlGb3JIYW5kbGUoaGFuZGxlKTsKICAgICBpZiAoIXBhZ2Up
CiAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SKFdpbmRvd05vdEZvdW5k
KTsKIAotICAgIGF1dG8gcGFnZUxvYWRTdHJhdGVneSA9IHBhZ2VMb2FkU3RyYXRlZ3lGcm9tU3Ry
aW5nUGFyYW1ldGVyKG9wdGlvbmFsUGFnZUxvYWRTdHJhdGVneVN0cmluZyk7Ci0gICAgaWYgKCFw
YWdlTG9hZFN0cmF0ZWd5KQotICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJP
Ul9BTkRfREVUQUlMUyhJbnZhbGlkUGFyYW1ldGVyLCAiVGhlIHBhcmFtZXRlciAncGFnZUxvYWRT
dHJhdGVneScgaXMgaW52YWxpZC4iKTsKKyAgICBhdXRvIHBhZ2VMb2FkU3RyYXRlZ3kgPSBwYWdl
TG9hZFN0cmF0ZWd5RnJvbVBhcmFtZXRlcihXVEZNb3ZlKG9wdGlvbmFsUGFnZUxvYWRTdHJhdGVn
eSkpOwogICAgIGF1dG8gcGFnZUxvYWRUaW1lb3V0ID0gb3B0aW9uYWxQYWdlTG9hZFRpbWVvdXQg
PyBTZWNvbmRzOjpmcm9tTWlsbGlzZWNvbmRzKCpvcHRpb25hbFBhZ2VMb2FkVGltZW91dCkgOiBk
ZWZhdWx0UGFnZUxvYWRUaW1lb3V0OwogCiAgICAgcGFnZS0+cmVsb2FkKHsgfSk7Ci0gICAgd2Fp
dEZvck5hdmlnYXRpb25Ub0NvbXBsZXRlT25QYWdlKCpwYWdlLCBwYWdlTG9hZFN0cmF0ZWd5LnZh
bHVlKCksIHBhZ2VMb2FkVGltZW91dCwgV1RGTW92ZShjYWxsYmFjaykpOworICAgIHdhaXRGb3JO
YXZpZ2F0aW9uVG9Db21wbGV0ZU9uUGFnZSgqcGFnZSwgcGFnZUxvYWRTdHJhdGVneSwgcGFnZUxv
YWRUaW1lb3V0LCBXVEZNb3ZlKGNhbGxiYWNrKSk7CiB9CiAKIHZvaWQgV2ViQXV0b21hdGlvblNl
c3Npb246Om5hdmlnYXRpb25PY2N1cnJlZEZvckZyYW1lKGNvbnN0IFdlYkZyYW1lUHJveHkmIGZy
YW1lKQpAQCAtOTIyLDM1ICs5MDUsMjcgQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6aGFu
ZGxlUnVuT3BlblBhbmVsKGNvbnN0IFdlYlBhZ2VQcm94eSYgcGFnZSwgY29uc3QgV2UKICAgICBt
X2RvbWFpbk5vdGlmaWVyLT5maWxlQ2hvb3NlckRpc21pc3NlZChicm93c2luZ0NvbnRleHRIYW5k
bGUsIGZhbHNlKTsKIH0KIAotdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6ZXZhbHVhdGVKYXZh
U2NyaXB0RnVuY3Rpb24oY29uc3QgU3RyaW5nJiBicm93c2luZ0NvbnRleHRIYW5kbGUsIGNvbnN0
IFN0cmluZyogb3B0aW9uYWxGcmFtZUhhbmRsZSwgY29uc3QgU3RyaW5nJiBmdW5jdGlvbiwgY29u
c3QgSlNPTjo6QXJyYXkmIGFyZ3VtZW50cywgY29uc3QgYm9vbCogb3B0aW9uYWxFeHBlY3RzSW1w
bGljaXRDYWxsYmFja0FyZ3VtZW50LCBjb25zdCBkb3VibGUqIG9wdGlvbmFsQ2FsbGJhY2tUaW1l
b3V0LCBSZWY8RXZhbHVhdGVKYXZhU2NyaXB0RnVuY3Rpb25DYWxsYmFjaz4mJiBjYWxsYmFjaykK
K3ZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OmV2YWx1YXRlSmF2YVNjcmlwdEZ1bmN0aW9uKGNv
bnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRs
ZSYgYnJvd3NpbmdDb250ZXh0SGFuZGxlLCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRv
bWF0aW9uOjpGcmFtZUhhbmRsZSYgZnJhbWVIYW5kbGUsIGNvbnN0IFN0cmluZyYgZnVuY3Rpb24s
IFJlZjxKU09OOjpBcnJheT4mJiBhcmd1bWVudHMsIE9wdGlvbmFsPGJvb2w+JiYgZXhwZWN0c0lt
cGxpY2l0Q2FsbGJhY2tBcmd1bWVudCwgT3B0aW9uYWw8ZG91YmxlPiYmIGNhbGxiYWNrVGltZW91
dCwgUmVmPEV2YWx1YXRlSmF2YVNjcmlwdEZ1bmN0aW9uQ2FsbGJhY2s+JiYgY2FsbGJhY2spCiB7
CiAgICAgV2ViUGFnZVByb3h5KiBwYWdlID0gd2ViUGFnZVByb3h5Rm9ySGFuZGxlKGJyb3dzaW5n
Q29udGV4dEhhbmRsZSk7CiAgICAgaWYgKCFwYWdlKQogICAgICAgICBBU1lOQ19GQUlMX1dJVEhf
UFJFREVGSU5FRF9FUlJPUihXaW5kb3dOb3RGb3VuZCk7CiAKICAgICBib29sIGZyYW1lTm90Rm91
bmQgPSBmYWxzZTsKLSAgICBhdXRvIGZyYW1lSUQgPSB3ZWJGcmFtZUlERm9ySGFuZGxlKG9wdGlv
bmFsRnJhbWVIYW5kbGUgPyAqb3B0aW9uYWxGcmFtZUhhbmRsZSA6IGVtcHR5U3RyaW5nKCksIGZy
YW1lTm90Rm91bmQpOworICAgIGF1dG8gZnJhbWVJRCA9IHdlYkZyYW1lSURGb3JIYW5kbGUoZnJh
bWVIYW5kbGUsIGZyYW1lTm90Rm91bmQpOwogICAgIGlmIChmcmFtZU5vdEZvdW5kKQogICAgICAg
ICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUihGcmFtZU5vdEZvdW5kKTsKIAogICAg
IFZlY3RvcjxTdHJpbmc+IGFyZ3VtZW50c1ZlY3RvcjsKLSAgICBhcmd1bWVudHNWZWN0b3IucmVz
ZXJ2ZUNhcGFjaXR5KGFyZ3VtZW50cy5sZW5ndGgoKSk7CisgICAgYXJndW1lbnRzVmVjdG9yLnJl
c2VydmVDYXBhY2l0eShhcmd1bWVudHMtPmxlbmd0aCgpKTsKIAotICAgIGZvciAoYXV0byYgYXJn
dW1lbnQgOiBhcmd1bWVudHMpIHsKLSAgICAgICAgU3RyaW5nIGFyZ3VtZW50U3RyaW5nOwotICAg
ICAgICBhcmd1bWVudC0+YXNTdHJpbmcoYXJndW1lbnRTdHJpbmcpOwotICAgICAgICBhcmd1bWVu
dHNWZWN0b3IudW5jaGVja2VkQXBwZW5kKGFyZ3VtZW50U3RyaW5nKTsKLSAgICB9Ci0KLSAgICBi
b29sIGV4cGVjdHNJbXBsaWNpdENhbGxiYWNrQXJndW1lbnQgPSBvcHRpb25hbEV4cGVjdHNJbXBs
aWNpdENhbGxiYWNrQXJndW1lbnQgPyAqb3B0aW9uYWxFeHBlY3RzSW1wbGljaXRDYWxsYmFja0Fy
Z3VtZW50IDogZmFsc2U7Ci0gICAgT3B0aW9uYWw8ZG91YmxlPiBjYWxsYmFja1RpbWVvdXQ7Ci0g
ICAgaWYgKG9wdGlvbmFsQ2FsbGJhY2tUaW1lb3V0KQotICAgICAgICBjYWxsYmFja1RpbWVvdXQg
PSAqb3B0aW9uYWxDYWxsYmFja1RpbWVvdXQ7CisgICAgZm9yIChjb25zdCBhdXRvJiBhcmd1bWVu
dCA6IGFyZ3VtZW50cy5nZXQoKSkKKyAgICAgICAgYXJndW1lbnRzVmVjdG9yLnVuY2hlY2tlZEFw
cGVuZChhcmd1bWVudC0+YXNTdHJpbmcoKSk7CiAKICAgICB1aW50NjRfdCBjYWxsYmFja0lEID0g
bV9uZXh0RXZhbHVhdGVKYXZhU2NyaXB0Q2FsbGJhY2tJRCsrOwogICAgIG1fZXZhbHVhdGVKYXZh
U2NyaXB0RnVuY3Rpb25DYWxsYmFja3Muc2V0KGNhbGxiYWNrSUQsIFdURk1vdmUoY2FsbGJhY2sp
KTsKIAotICAgIHBhZ2UtPnByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpXZWJBdXRvbWF0aW9uU2Vz
c2lvblByb3h5OjpFdmFsdWF0ZUphdmFTY3JpcHRGdW5jdGlvbihwYWdlLT53ZWJQYWdlSUQoKSwg
ZnJhbWVJRCwgZnVuY3Rpb24sIGFyZ3VtZW50c1ZlY3RvciwgZXhwZWN0c0ltcGxpY2l0Q2FsbGJh
Y2tBcmd1bWVudCwgY2FsbGJhY2tUaW1lb3V0LCBjYWxsYmFja0lEKSwgMCk7CisgICAgcGFnZS0+
cHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6OldlYkF1dG9tYXRpb25TZXNzaW9uUHJveHk6OkV2YWx1
YXRlSmF2YVNjcmlwdEZ1bmN0aW9uKHBhZ2UtPndlYlBhZ2VJRCgpLCBmcmFtZUlELCBmdW5jdGlv
biwgYXJndW1lbnRzVmVjdG9yLCBleHBlY3RzSW1wbGljaXRDYWxsYmFja0FyZ3VtZW50LnZhbHVl
T3IoZmFsc2UpLCBXVEZNb3ZlKGNhbGxiYWNrVGltZW91dCksIGNhbGxiYWNrSUQpLCAwKTsKIH0K
IAogdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6ZGlkRXZhbHVhdGVKYXZhU2NyaXB0RnVuY3Rp
b24odWludDY0X3QgY2FsbGJhY2tJRCwgY29uc3QgU3RyaW5nJiByZXN1bHQsIGNvbnN0IFN0cmlu
ZyYgZXJyb3JUeXBlKQpAQCAtOTY1LDcgKzk0MCw3IEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Np
b246OmRpZEV2YWx1YXRlSmF2YVNjcmlwdEZ1bmN0aW9uKHVpbnQ2NF90IGNhbGxiYWNrSUQsIGNv
CiAgICAgICAgIGNhbGxiYWNrLT5zZW5kU3VjY2VzcyhyZXN1bHQpOwogfQogCi12b2lkIFdlYkF1
dG9tYXRpb25TZXNzaW9uOjpyZXNvbHZlQ2hpbGRGcmFtZUhhbmRsZShjb25zdCBTdHJpbmcmIGJy
b3dzaW5nQ29udGV4dEhhbmRsZSwgY29uc3QgU3RyaW5nKiBvcHRpb25hbEZyYW1lSGFuZGxlLCBj
b25zdCBpbnQqIG9wdGlvbmFsT3JkaW5hbCwgY29uc3QgU3RyaW5nKiBvcHRpb25hbE5hbWUsIGNv
bnN0IFN0cmluZyogb3B0aW9uYWxOb2RlSGFuZGxlLCBSZWY8UmVzb2x2ZUNoaWxkRnJhbWVIYW5k
bGVDYWxsYmFjaz4mJiBjYWxsYmFjaykKK3ZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OnJlc29s
dmVDaGlsZEZyYW1lSGFuZGxlKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246
OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYgYnJvd3NpbmdDb250ZXh0SGFuZGxlLCBjb25zdCBJbnNw
ZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpGcmFtZUhhbmRsZSYgZnJhbWVIYW5kbGUsIE9w
dGlvbmFsPGludD4mJiBvcHRpb25hbE9yZGluYWwsIGNvbnN0IFN0cmluZyYgb3B0aW9uYWxOYW1l
LCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpOb2RlSGFuZGxlJiBvcHRp
b25hbE5vZGVIYW5kbGUsIFJlZjxSZXNvbHZlQ2hpbGRGcmFtZUhhbmRsZUNhbGxiYWNrPiYmIGNh
bGxiYWNrKQogewogICAgIGlmICghb3B0aW9uYWxPcmRpbmFsICYmICFvcHRpb25hbE5hbWUgJiYg
IW9wdGlvbmFsTm9kZUhhbmRsZSkKICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURf
RVJST1JfQU5EX0RFVEFJTFMoTWlzc2luZ1BhcmFtZXRlciwgIkNvbW1hbmQgbXVzdCBzcGVjaWZ5
IGEgY2hpbGQgZnJhbWUgYnkgb3JkaW5hbCwgbmFtZSwgb3IgZWxlbWVudCBoYW5kbGUuIik7CkBA
IC05NzUsNyArOTUwLDcgQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6cmVzb2x2ZUNoaWxk
RnJhbWVIYW5kbGUoY29uc3QgU3RyaW5nJiBicm93c2luZ0NvbnRleHQKICAgICAgICAgQVNZTkNf
RkFJTF9XSVRIX1BSRURFRklORURfRVJST1IoV2luZG93Tm90Rm91bmQpOwogCiAgICAgYm9vbCBm
cmFtZU5vdEZvdW5kID0gZmFsc2U7Ci0gICAgYXV0byBmcmFtZUlEID0gd2ViRnJhbWVJREZvckhh
bmRsZShvcHRpb25hbEZyYW1lSGFuZGxlID8gKm9wdGlvbmFsRnJhbWVIYW5kbGUgOiBlbXB0eVN0
cmluZygpLCBmcmFtZU5vdEZvdW5kKTsKKyAgICBhdXRvIGZyYW1lSUQgPSB3ZWJGcmFtZUlERm9y
SGFuZGxlKGZyYW1lSGFuZGxlLCBmcmFtZU5vdEZvdW5kKTsKICAgICBpZiAoZnJhbWVOb3RGb3Vu
ZCkKICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1IoRnJhbWVOb3RGb3Vu
ZCk7CiAKQEAgLTk4OCwxMyArOTYzLDEzIEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OnJl
c29sdmVDaGlsZEZyYW1lSGFuZGxlKGNvbnN0IFN0cmluZyYgYnJvd3NpbmdDb250ZXh0CiAgICAg
ICAgIGNhbGxiYWNrLT5zZW5kU3VjY2VzcyhoYW5kbGVGb3JXZWJGcmFtZUlEKGZyYW1lSUQpKTsK
ICAgICB9OwogCi0gICAgaWYgKG9wdGlvbmFsTm9kZUhhbmRsZSkgewotICAgICAgICBwYWdlLT5w
cm9jZXNzKCkuc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJBdXRvbWF0aW9uU2Vzc2lv
blByb3h5OjpSZXNvbHZlQ2hpbGRGcmFtZVdpdGhOb2RlSGFuZGxlKHBhZ2UtPndlYlBhZ2VJRCgp
LCBmcmFtZUlELCAqb3B0aW9uYWxOb2RlSGFuZGxlKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
cikpOworICAgIGlmICghIW9wdGlvbmFsTm9kZUhhbmRsZSkgeworICAgICAgICBwYWdlLT5wcm9j
ZXNzKCkuc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJBdXRvbWF0aW9uU2Vzc2lvblBy
b3h5OjpSZXNvbHZlQ2hpbGRGcmFtZVdpdGhOb2RlSGFuZGxlKHBhZ2UtPndlYlBhZ2VJRCgpLCBm
cmFtZUlELCBvcHRpb25hbE5vZGVIYW5kbGUpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAob3B0aW9uYWxOYW1lKSB7Ci0gICAg
ICAgIHBhZ2UtPnByb2Nlc3MoKS5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkF1dG9t
YXRpb25TZXNzaW9uUHJveHk6OlJlc29sdmVDaGlsZEZyYW1lV2l0aE5hbWUocGFnZS0+d2ViUGFn
ZUlEKCksIGZyYW1lSUQsICpvcHRpb25hbE5hbWUpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVy
KSk7CisgICAgaWYgKCEhb3B0aW9uYWxOYW1lKSB7CisgICAgICAgIHBhZ2UtPnByb2Nlc3MoKS5z
ZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkF1dG9tYXRpb25TZXNzaW9uUHJveHk6OlJl
c29sdmVDaGlsZEZyYW1lV2l0aE5hbWUocGFnZS0+d2ViUGFnZUlEKCksIGZyYW1lSUQsIG9wdGlv
bmFsTmFtZSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIApAQCAtMTAwNiw3ICs5ODEsNyBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpy
ZXNvbHZlQ2hpbGRGcmFtZUhhbmRsZShjb25zdCBTdHJpbmcmIGJyb3dzaW5nQ29udGV4dAogICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi12b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpy
ZXNvbHZlUGFyZW50RnJhbWVIYW5kbGUoY29uc3QgU3RyaW5nJiBicm93c2luZ0NvbnRleHRIYW5k
bGUsIGNvbnN0IFN0cmluZyYgZnJhbWVIYW5kbGUsIFJlZjxSZXNvbHZlUGFyZW50RnJhbWVIYW5k
bGVDYWxsYmFjaz4mJiBjYWxsYmFjaykKK3ZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OnJlc29s
dmVQYXJlbnRGcmFtZUhhbmRsZShjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9u
OjpCcm93c2luZ0NvbnRleHRIYW5kbGUmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSwgY29uc3QgSW5z
cGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6RnJhbWVIYW5kbGUmIGZyYW1lSGFuZGxlLCBS
ZWY8UmVzb2x2ZVBhcmVudEZyYW1lSGFuZGxlQ2FsbGJhY2s+JiYgY2FsbGJhY2spCiB7CiAgICAg
V2ViUGFnZVByb3h5KiBwYWdlID0gd2ViUGFnZVByb3h5Rm9ySGFuZGxlKGJyb3dzaW5nQ29udGV4
dEhhbmRsZSk7CiAgICAgaWYgKCFwYWdlKQpAQCAtMTAyOSwxNiArMTAwNCwyMiBAQCB2b2lkIFdl
YkF1dG9tYXRpb25TZXNzaW9uOjpyZXNvbHZlUGFyZW50RnJhbWVIYW5kbGUoY29uc3QgU3RyaW5n
JiBicm93c2luZ0NvbnRleAogICAgIHBhZ2UtPnByb2Nlc3MoKS5zZW5kV2l0aEFzeW5jUmVwbHko
TWVzc2FnZXM6OldlYkF1dG9tYXRpb25TZXNzaW9uUHJveHk6OlJlc29sdmVQYXJlbnRGcmFtZShw
YWdlLT53ZWJQYWdlSUQoKSwgZnJhbWVJRCksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
IH0KIAotc3RhdGljIE9wdGlvbmFsPENvb3JkaW5hdGVTeXN0ZW0+IHByb3RvY29sU3RyaW5nVG9D
b29yZGluYXRlU3lzdGVtKGNvbnN0IFN0cmluZyYgY29vcmRpbmF0ZVN5c3RlbVN0cmluZykKK3N0
YXRpYyBPcHRpb25hbDxDb29yZGluYXRlU3lzdGVtPiBwcm90b2NvbFN0cmluZ1RvQ29vcmRpbmF0
ZVN5c3RlbShJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpDb29yZGluYXRlU3lzdGVt
IGNvb3JkaW5hdGVTeXN0ZW0pCiB7Ci0gICAgaWYgKGNvb3JkaW5hdGVTeXN0ZW1TdHJpbmcgPT0g
IlBhZ2UiKQorICAgIHN3aXRjaCAoY29vcmRpbmF0ZVN5c3RlbSkgeworICAgIGNhc2UgSW5zcGVj
dG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6Q29vcmRpbmF0ZVN5c3RlbTo6UGFnZToKICAgICAg
ICAgcmV0dXJuIENvb3JkaW5hdGVTeXN0ZW06OlBhZ2U7Ci0gICAgaWYgKGNvb3JkaW5hdGVTeXN0
ZW1TdHJpbmcgPT0gIkxheW91dFZpZXdwb3J0IikKKworICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90
b2NvbDo6QXV0b21hdGlvbjo6Q29vcmRpbmF0ZVN5c3RlbTo6Vmlld3BvcnQ6CisgICAgY2FzZSBJ
bnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpDb29yZGluYXRlU3lzdGVtOjpMYXlvdXRW
aWV3cG9ydDoKICAgICAgICAgcmV0dXJuIENvb3JkaW5hdGVTeXN0ZW06OkxheW91dFZpZXdwb3J0
OworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CiB9CiAKLXZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OmNvbXB1dGVFbGVtZW50TGF5
b3V0KGNvbnN0IFN0cmluZyYgYnJvd3NpbmdDb250ZXh0SGFuZGxlLCBjb25zdCBTdHJpbmcmIGZy
YW1lSGFuZGxlLCBjb25zdCBTdHJpbmcmIG5vZGVIYW5kbGUsIGNvbnN0IGJvb2wqIG9wdGlvbmFs
U2Nyb2xsSW50b1ZpZXdJZk5lZWRlZCwgY29uc3QgU3RyaW5nJiBjb29yZGluYXRlU3lzdGVtU3Ry
aW5nLCBSZWY8Q29tcHV0ZUVsZW1lbnRMYXlvdXRDYWxsYmFjaz4mJiBjYWxsYmFjaykKK3ZvaWQg
V2ViQXV0b21hdGlvblNlc3Npb246OmNvbXB1dGVFbGVtZW50TGF5b3V0KGNvbnN0IEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYgYnJvd3NpbmdD
b250ZXh0SGFuZGxlLCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpGcmFt
ZUhhbmRsZSYgZnJhbWVIYW5kbGUsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRp
b246Ok5vZGVIYW5kbGUmIG5vZGVIYW5kbGUsIE9wdGlvbmFsPGJvb2w+JiYgb3B0aW9uYWxTY3Jv
bGxJbnRvVmlld0lmTmVlZGVkLCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpDb29y
ZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW1WYWx1ZSwgUmVmPENvbXB1dGVFbGVtZW50TGF5
b3V0Q2FsbGJhY2s+JiYgY2FsbGJhY2spCiB7CiAgICAgV2ViUGFnZVByb3h5KiBwYWdlID0gd2Vi
UGFnZVByb3h5Rm9ySGFuZGxlKGJyb3dzaW5nQ29udGV4dEhhbmRsZSk7CiAgICAgaWYgKCFwYWdl
KQpAQCAtMTA0OSw3ICsxMDMwLDcgQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6Y29tcHV0
ZUVsZW1lbnRMYXlvdXQoY29uc3QgU3RyaW5nJiBicm93c2luZ0NvbnRleHRIYW4KICAgICBpZiAo
ZnJhbWVOb3RGb3VuZCkKICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1Io
RnJhbWVOb3RGb3VuZCk7CiAKLSAgICBPcHRpb25hbDxDb29yZGluYXRlU3lzdGVtPiBjb29yZGlu
YXRlU3lzdGVtID0gcHJvdG9jb2xTdHJpbmdUb0Nvb3JkaW5hdGVTeXN0ZW0oY29vcmRpbmF0ZVN5
c3RlbVN0cmluZyk7CisgICAgT3B0aW9uYWw8Q29vcmRpbmF0ZVN5c3RlbT4gY29vcmRpbmF0ZVN5
c3RlbSA9IHByb3RvY29sU3RyaW5nVG9Db29yZGluYXRlU3lzdGVtKGNvb3JkaW5hdGVTeXN0ZW1W
YWx1ZSk7CiAgICAgaWYgKCFjb29yZGluYXRlU3lzdGVtKQogICAgICAgICBBU1lOQ19GQUlMX1dJ
VEhfUFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhJbnZhbGlkUGFyYW1ldGVyLCAiVGhlIHBh
cmFtZXRlciAnY29vcmRpbmF0ZVN5c3RlbScgaXMgaW52YWxpZC4iKTsKIApAQCAtMTA5MSw3ICsx
MDcyLDcgQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6Y29tcHV0ZUVsZW1lbnRMYXlvdXQo
Y29uc3QgU3RyaW5nJiBicm93c2luZ0NvbnRleHRIYW4KICAgICBwYWdlLT5wcm9jZXNzKCkuc2Vu
ZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJBdXRvbWF0aW9uU2Vzc2lvblByb3h5OjpDb21w
dXRlRWxlbWVudExheW91dChwYWdlLT53ZWJQYWdlSUQoKSwgZnJhbWVJRCwgbm9kZUhhbmRsZSwg
c2Nyb2xsSW50b1ZpZXdJZk5lZWRlZCwgY29vcmRpbmF0ZVN5c3RlbS52YWx1ZSgpKSwgV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCi12b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpz
ZWxlY3RPcHRpb25FbGVtZW50KGNvbnN0IFN0cmluZyYgYnJvd3NpbmdDb250ZXh0SGFuZGxlLCBj
b25zdCBTdHJpbmcmIGZyYW1lSGFuZGxlLCBjb25zdCBTdHJpbmcmIG5vZGVIYW5kbGUsIFJlZjxT
ZWxlY3RPcHRpb25FbGVtZW50Q2FsbGJhY2s+JiYgY2FsbGJhY2spCit2b2lkIFdlYkF1dG9tYXRp
b25TZXNzaW9uOjpzZWxlY3RPcHRpb25FbGVtZW50KGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYgYnJvd3NpbmdDb250ZXh0SGFuZGxl
LCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpGcmFtZUhhbmRsZSYgZnJh
bWVIYW5kbGUsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246Ok5vZGVIYW5k
bGUmIG5vZGVIYW5kbGUsIFJlZjxTZWxlY3RPcHRpb25FbGVtZW50Q2FsbGJhY2s+JiYgY2FsbGJh
Y2spCiB7CiAgICAgV2ViUGFnZVByb3h5KiBwYWdlID0gd2ViUGFnZVByb3h5Rm9ySGFuZGxlKGJy
b3dzaW5nQ29udGV4dEhhbmRsZSk7CiAgICAgaWYgKCFwYWdlKQpAQCAtMTExNCw3ICsxMDk1LDcg
QEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6c2VsZWN0T3B0aW9uRWxlbWVudChjb25zdCBT
dHJpbmcmIGJyb3dzaW5nQ29udGV4dEhhbmQKICAgICBwYWdlLT5wcm9jZXNzKCkuc2VuZFdpdGhB
c3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJBdXRvbWF0aW9uU2Vzc2lvblByb3h5OjpTZWxlY3RPcHRp
b25FbGVtZW50KHBhZ2UtPndlYlBhZ2VJRCgpLCBmcmFtZUlELCBub2RlSGFuZGxlKSwgV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCi12b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpp
c1Nob3dpbmdKYXZhU2NyaXB0RGlhbG9nKEluc3BlY3Rvcjo6RXJyb3JTdHJpbmcmIGVycm9yU3Ry
aW5nLCBjb25zdCBTdHJpbmcmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSwgYm9vbCogcmVzdWx0KQor
SW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxib29sPiBXZWJBdXRvbWF0aW9uU2Vz
c2lvbjo6aXNTaG93aW5nSmF2YVNjcmlwdERpYWxvZyhjb25zdCBJbnNwZWN0b3I6OlByb3RvY29s
OjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRIYW5kbGUmIGJyb3dzaW5nQ29udGV4dEhhbmRs
ZSkKIHsKICAgICBBU1NFUlQobV9jbGllbnQpOwogICAgIGlmICghbV9jbGllbnQpCkBAIC0xMTI0
LDEwICsxMTA1LDEwIEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OmlzU2hvd2luZ0phdmFT
Y3JpcHREaWFsb2coSW5zcGVjdG9yOjpFcnJvclN0cmluZyYgZXJyCiAgICAgaWYgKCFwYWdlKQog
ICAgICAgICBTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SKFdpbmRvd05vdEZvdW5kKTsK
IAotICAgICpyZXN1bHQgPSBtX2NsaWVudC0+aXNTaG93aW5nSmF2YVNjcmlwdERpYWxvZ09uUGFn
ZSgqdGhpcywgKnBhZ2UpOworICAgIHJldHVybiBtX2NsaWVudC0+aXNTaG93aW5nSmF2YVNjcmlw
dERpYWxvZ09uUGFnZSgqdGhpcywgKnBhZ2UpOwogfQogCi12b2lkIFdlYkF1dG9tYXRpb25TZXNz
aW9uOjpkaXNtaXNzQ3VycmVudEphdmFTY3JpcHREaWFsb2coSW5zcGVjdG9yOjpFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgYnJvd3NpbmdDb250ZXh0SGFuZGxlKQorSW5z
cGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBXZWJBdXRvbWF0aW9uU2Vzc2lv
bjo6ZGlzbWlzc0N1cnJlbnRKYXZhU2NyaXB0RGlhbG9nKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYgYnJvd3NpbmdDb250ZXh0SGFu
ZGxlKQogewogICAgIEFTU0VSVChtX2NsaWVudCk7CiAgICAgaWYgKCFtX2NsaWVudCkKQEAgLTEx
NDEsOSArMTEyMiwxMSBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpkaXNtaXNzQ3VycmVu
dEphdmFTY3JpcHREaWFsb2coSW5zcGVjdG9yOjpFcnJvclN0cmluZwogICAgICAgICBTWU5DX0ZB
SUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SKE5vSmF2YVNjcmlwdERpYWxvZyk7CiAKICAgICBtX2Ns
aWVudC0+ZGlzbWlzc0N1cnJlbnRKYXZhU2NyaXB0RGlhbG9nT25QYWdlKCp0aGlzLCAqcGFnZSk7
CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjphY2Nl
cHRDdXJyZW50SmF2YVNjcmlwdERpYWxvZyhJbnNwZWN0b3I6OkVycm9yU3RyaW5nJiBlcnJvclN0
cmluZywgY29uc3QgU3RyaW5nJiBicm93c2luZ0NvbnRleHRIYW5kbGUpCitJbnNwZWN0b3I6OlBy
b3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IFdlYkF1dG9tYXRpb25TZXNzaW9uOjphY2NlcHRD
dXJyZW50SmF2YVNjcmlwdERpYWxvZyhjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0
aW9uOjpCcm93c2luZ0NvbnRleHRIYW5kbGUmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSkKIHsKICAg
ICBBU1NFUlQobV9jbGllbnQpOwogICAgIGlmICghbV9jbGllbnQpCkBAIC0xMTU3LDkgKzExNDAs
MTEgQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6YWNjZXB0Q3VycmVudEphdmFTY3JpcHRE
aWFsb2coSW5zcGVjdG9yOjpFcnJvclN0cmluZyYKICAgICAgICAgU1lOQ19GQUlMX1dJVEhfUFJF
REVGSU5FRF9FUlJPUihOb0phdmFTY3JpcHREaWFsb2cpOwogCiAgICAgbV9jbGllbnQtPmFjY2Vw
dEN1cnJlbnRKYXZhU2NyaXB0RGlhbG9nT25QYWdlKCp0aGlzLCAqcGFnZSk7CisKKyAgICByZXR1
cm4geyB9OwogfQogCi12b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjptZXNzYWdlT2ZDdXJyZW50
SmF2YVNjcmlwdERpYWxvZyhJbnNwZWN0b3I6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29u
c3QgU3RyaW5nJiBicm93c2luZ0NvbnRleHRIYW5kbGUsIFN0cmluZyogdGV4dCkKK0luc3BlY3Rv
cjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8U3RyaW5nPiBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6
bWVzc2FnZU9mQ3VycmVudEphdmFTY3JpcHREaWFsb2coY29uc3QgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJiBicm93c2luZ0NvbnRleHRIYW5k
bGUpCiB7CiAgICAgQVNTRVJUKG1fY2xpZW50KTsKICAgICBpZiAoIW1fY2xpZW50KQpAQCAtMTE3
MiwxMCArMTE1NywxMCBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjptZXNzYWdlT2ZDdXJy
ZW50SmF2YVNjcmlwdERpYWxvZyhJbnNwZWN0b3I6OkVycm9yU3RyaQogICAgIGlmICghbV9jbGll
bnQtPmlzU2hvd2luZ0phdmFTY3JpcHREaWFsb2dPblBhZ2UoKnRoaXMsICpwYWdlKSkKICAgICAg
ICAgU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUihOb0phdmFTY3JpcHREaWFsb2cpOwog
Ci0gICAgKnRleHQgPSBtX2NsaWVudC0+bWVzc2FnZU9mQ3VycmVudEphdmFTY3JpcHREaWFsb2dP
blBhZ2UoKnRoaXMsICpwYWdlKTsKKyAgICByZXR1cm4gbV9jbGllbnQtPm1lc3NhZ2VPZkN1cnJl
bnRKYXZhU2NyaXB0RGlhbG9nT25QYWdlKCp0aGlzLCAqcGFnZSk7CiB9CiAKLXZvaWQgV2ViQXV0
b21hdGlvblNlc3Npb246OnNldFVzZXJJbnB1dEZvckN1cnJlbnRKYXZhU2NyaXB0UHJvbXB0KElu
c3BlY3Rvcjo6RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGJyb3dzaW5n
Q29udGV4dEhhbmRsZSwgY29uc3QgU3RyaW5nJiBwcm9tcHRWYWx1ZSkKK0luc3BlY3Rvcjo6UHJv
dG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gV2ViQXV0b21hdGlvblNlc3Npb246OnNldFVzZXJJ
bnB1dEZvckN1cnJlbnRKYXZhU2NyaXB0UHJvbXB0KGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYgYnJvd3NpbmdDb250ZXh0SGFuZGxl
LCBjb25zdCBTdHJpbmcmIHByb21wdFZhbHVlKQogewogICAgIEFTU0VSVChtX2NsaWVudCk7CiAg
ICAgaWYgKCFtX2NsaWVudCkKQEAgLTEyMDcsMTkgKzExOTIsMjEgQEAgdm9pZCBXZWJBdXRvbWF0
aW9uU2Vzc2lvbjo6c2V0VXNlcklucHV0Rm9yQ3VycmVudEphdmFTY3JpcHRQcm9tcHQoSW5zcGVj
dG9yOjpFcnIKICAgICB9CiAKICAgICBtX2NsaWVudC0+c2V0VXNlcklucHV0Rm9yQ3VycmVudEph
dmFTY3JpcHRQcm9tcHRPblBhZ2UoKnRoaXMsICpwYWdlLCBwcm9tcHRWYWx1ZSk7CisKKyAgICBy
ZXR1cm4geyB9OwogfQogCi12b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpzZXRGaWxlc1RvU2Vs
ZWN0Rm9yRmlsZVVwbG9hZChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYg
YnJvd3NpbmdDb250ZXh0SGFuZGxlLCBjb25zdCBKU09OOjpBcnJheSYgZmlsZW5hbWVzLCBjb25z
dCBKU09OOjpBcnJheSogZmlsZUNvbnRlbnRzKQorSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JT
dHJpbmdPcjx2b2lkPiBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6c2V0RmlsZXNUb1NlbGVjdEZvckZp
bGVVcGxvYWQoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdD
b250ZXh0SGFuZGxlJiBicm93c2luZ0NvbnRleHRIYW5kbGUsIFJlZjxKU09OOjpBcnJheT4mJiBm
aWxlbmFtZXMsIFJlZlB0cjxKU09OOjpBcnJheT4mJiBmaWxlQ29udGVudHMpCiB7CiAgICAgVmVj
dG9yPFN0cmluZz4gbmV3RmlsZUxpc3Q7Ci0gICAgbmV3RmlsZUxpc3QucmVzZXJ2ZUluaXRpYWxD
YXBhY2l0eShmaWxlbmFtZXMubGVuZ3RoKCkpOworICAgIG5ld0ZpbGVMaXN0LnJlc2VydmVJbml0
aWFsQ2FwYWNpdHkoZmlsZW5hbWVzLT5sZW5ndGgoKSk7CiAKLSAgICBpZiAoZmlsZUNvbnRlbnRz
ICYmIGZpbGVDb250ZW50cy0+bGVuZ3RoKCkgIT0gZmlsZW5hbWVzLmxlbmd0aCgpKQorICAgIGlm
IChmaWxlQ29udGVudHMgJiYgZmlsZUNvbnRlbnRzLT5sZW5ndGgoKSAhPSBmaWxlbmFtZXMtPmxl
bmd0aCgpKQogICAgICAgICBTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRB
SUxTKEludGVybmFsRXJyb3IsICJUaGUgcGFyYW1ldGVycyAnZmlsZW5hbWVzJyBhbmQgJ2ZpbGVD
b250ZW50cycgbXVzdCBoYXZlIGVxdWFsIGxlbmd0aC4iKTsKIAotICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgZmlsZW5hbWVzLmxlbmd0aCgpOyArK2kpIHsKLSAgICAgICAgU3RyaW5nIGZpbGVu
YW1lOwotICAgICAgICBpZiAoIWZpbGVuYW1lcy5nZXQoaSktPmFzU3RyaW5nKGZpbGVuYW1lKSkK
KyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZpbGVuYW1lcy0+bGVuZ3RoKCk7ICsraSkgewor
ICAgICAgICBhdXRvIGZpbGVuYW1lID0gZmlsZW5hbWVzLT5nZXQoaSktPmFzU3RyaW5nKCk7Cisg
ICAgICAgIGlmICghZmlsZW5hbWUpCiAgICAgICAgICAgICBTWU5DX0ZBSUxfV0lUSF9QUkVERUZJ
TkVEX0VSUk9SX0FORF9ERVRBSUxTKEludGVybmFsRXJyb3IsICJUaGUgcGFyYW1ldGVyICdmaWxl
bmFtZXMnIGNvbnRhaW5zIGEgbm9uLXN0cmluZyB2YWx1ZS4iKTsKIAogICAgICAgICBpZiAoIWZp
bGVDb250ZW50cykgewpAQCAtMTIyNyw4ICsxMjE0LDggQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vz
c2lvbjo6c2V0RmlsZXNUb1NlbGVjdEZvckZpbGVVcGxvYWQoRXJyb3JTdHJpbmcmIGVycm9yU3Ry
aW4KICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKLSAgICAgICAgU3RyaW5nIGZp
bGVEYXRhOwotICAgICAgICBpZiAoIWZpbGVDb250ZW50cy0+Z2V0KGkpLT5hc1N0cmluZyhmaWxl
RGF0YSkpCisgICAgICAgIGF1dG8gZmlsZURhdGEgPSBmaWxlQ29udGVudHMtPmdldChpKS0+YXNT
dHJpbmcoKTsKKyAgICAgICAgaWYgKCFmaWxlRGF0YSkKICAgICAgICAgICAgIFNZTkNfRkFJTF9X
SVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoSW50ZXJuYWxFcnJvciwgIlRoZSBwYXJh
bWV0ZXIgJ2ZpbGVDb250ZW50cycgY29udGFpbnMgYSBub24tc3RyaW5nIHZhbHVlLiIpOwogCiAg
ICAgICAgIE9wdGlvbmFsPFN0cmluZz4gbG9jYWxGaWxlUGF0aCA9IHBsYXRmb3JtR2VuZXJhdGVM
b2NhbEZpbGVQYXRoRm9yUmVtb3RlRmlsZShmaWxlbmFtZSwgZmlsZURhdGEpOwpAQCAtMTIzOSw5
ICsxMjI2LDExIEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OnNldEZpbGVzVG9TZWxlY3RG
b3JGaWxlVXBsb2FkKEVycm9yU3RyaW5nJiBlcnJvclN0cmluCiAgICAgfQogCiAgICAgbV9maWxl
c1RvU2VsZWN0Rm9yRmlsZVVwbG9hZC5zd2FwKG5ld0ZpbGVMaXN0KTsKKworICAgIHJldHVybiB7
IH07CiB9CiAKLXZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OnNldEZpbGVzRm9ySW5wdXRGaWxl
VXBsb2FkKGNvbnN0IFN0cmluZyYgYnJvd3NpbmdDb250ZXh0SGFuZGxlLCBjb25zdCBTdHJpbmcm
IGZyYW1lSGFuZGxlLCBjb25zdCBTdHJpbmcmIG5vZGVIYW5kbGUsIGNvbnN0IEpTT046OkFycmF5
JiBmaWxlbmFtZXMsIFJlZjxTZXRGaWxlc0ZvcklucHV0RmlsZVVwbG9hZENhbGxiYWNrPiYmIGNh
bGxiYWNrKQordm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6c2V0RmlsZXNGb3JJbnB1dEZpbGVV
cGxvYWQoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250
ZXh0SGFuZGxlJiBicm93c2luZ0NvbnRleHRIYW5kbGUsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkF1dG9tYXRpb246OkZyYW1lSGFuZGxlJiBmcmFtZUhhbmRsZSwgY29uc3QgSW5zcGVjdG9y
OjpQcm90b2NvbDo6QXV0b21hdGlvbjo6Tm9kZUhhbmRsZSYgbm9kZUhhbmRsZSwgUmVmPEpTT046
OkFycmF5PiYmIGZpbGVuYW1lcywgUmVmPFNldEZpbGVzRm9ySW5wdXRGaWxlVXBsb2FkQ2FsbGJh
Y2s+JiYgY2FsbGJhY2spCiB7CiAgICAgV2ViUGFnZVByb3h5KiBwYWdlID0gd2ViUGFnZVByb3h5
Rm9ySGFuZGxlKGJyb3dzaW5nQ29udGV4dEhhbmRsZSk7CiAgICAgaWYgKCFwYWdlKQpAQCAtMTI1
MywxMCArMTI0MiwxMCBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpzZXRGaWxlc0Zvcklu
cHV0RmlsZVVwbG9hZChjb25zdCBTdHJpbmcmIGJyb3dzaW5nQ29udAogICAgICAgICBBU1lOQ19G
QUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUihGcmFtZU5vdEZvdW5kKTsKIAogICAgIFZlY3RvcjxT
dHJpbmc+IG5ld0ZpbGVMaXN0OwotICAgIG5ld0ZpbGVMaXN0LnJlc2VydmVJbml0aWFsQ2FwYWNp
dHkoZmlsZW5hbWVzLmxlbmd0aCgpKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZpbGVu
YW1lcy5sZW5ndGgoKTsgKytpKSB7Ci0gICAgICAgIFN0cmluZyBmaWxlbmFtZTsKLSAgICAgICAg
aWYgKCFmaWxlbmFtZXMuZ2V0KGkpLT5hc1N0cmluZyhmaWxlbmFtZSkpCisgICAgbmV3RmlsZUxp
c3QucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShmaWxlbmFtZXMtPmxlbmd0aCgpKTsKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGZpbGVuYW1lcy0+bGVuZ3RoKCk7ICsraSkgeworICAgICAgICBh
dXRvIGZpbGVuYW1lID0gZmlsZW5hbWVzLT5nZXQoaSktPmFzU3RyaW5nKCk7CisgICAgICAgIGlm
ICghZmlsZW5hbWUpCiAgICAgICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJP
Ul9BTkRfREVUQUlMUyhJbnRlcm5hbEVycm9yLCAiVGhlIHBhcmFtZXRlciAnZmlsZW5hbWVzJyBj
b250YWlucyBhIG5vbi1zdHJpbmcgdmFsdWUuIik7CiAKICAgICAgICAgbmV3RmlsZUxpc3QuYXBw
ZW5kKGZpbGVuYW1lKTsKQEAgLTEyOTksNyArMTI4OCw3IEBAIHN0YXRpYyBSZWY8SlNPTjo6QXJy
YXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpDb29raWU+PiBidWlsZEFycmF5
Rm9yCiAgICAgcmV0dXJuIGNvb2tpZXM7CiB9CiAKLXZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246
OmdldEFsbENvb2tpZXMoY29uc3QgU3RyaW5nJiBicm93c2luZ0NvbnRleHRIYW5kbGUsIFJlZjxH
ZXRBbGxDb29raWVzQ2FsbGJhY2s+JiYgY2FsbGJhY2spCit2b2lkIFdlYkF1dG9tYXRpb25TZXNz
aW9uOjpnZXRBbGxDb29raWVzKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246
OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYgYnJvd3NpbmdDb250ZXh0SGFuZGxlLCBSZWY8R2V0QWxs
Q29va2llc0NhbGxiYWNrPiYmIGNhbGxiYWNrKQogewogICAgIFdlYlBhZ2VQcm94eSogcGFnZSA9
IHdlYlBhZ2VQcm94eUZvckhhbmRsZShicm93c2luZ0NvbnRleHRIYW5kbGUpOwogICAgIGlmICgh
cGFnZSkKQEAgLTEzMTcsNyArMTMwNiw3IEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246Omdl
dEFsbENvb2tpZXMoY29uc3QgU3RyaW5nJiBicm93c2luZ0NvbnRleHRIYW5kbGUsIFJlCiAgICAg
cGFnZS0+cHJvY2VzcygpLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQXV0b21hdGlv
blNlc3Npb25Qcm94eTo6R2V0Q29va2llc0ZvckZyYW1lKHBhZ2UtPndlYlBhZ2VJRCgpLCBXVEY6
Om51bGxvcHQpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKLXZvaWQgV2ViQXV0
b21hdGlvblNlc3Npb246OmRlbGV0ZVNpbmdsZUNvb2tpZShjb25zdCBTdHJpbmcmIGJyb3dzaW5n
Q29udGV4dEhhbmRsZSwgY29uc3QgU3RyaW5nJiBjb29raWVOYW1lLCBSZWY8RGVsZXRlU2luZ2xl
Q29va2llQ2FsbGJhY2s+JiYgY2FsbGJhY2spCit2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpk
ZWxldGVTaW5nbGVDb29raWUoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6
QnJvd3NpbmdDb250ZXh0SGFuZGxlJiBicm93c2luZ0NvbnRleHRIYW5kbGUsIGNvbnN0IFN0cmlu
ZyYgY29va2llTmFtZSwgUmVmPERlbGV0ZVNpbmdsZUNvb2tpZUNhbGxiYWNrPiYmIGNhbGxiYWNr
KQogewogICAgIFdlYlBhZ2VQcm94eSogcGFnZSA9IHdlYlBhZ2VQcm94eUZvckhhbmRsZShicm93
c2luZ0NvbnRleHRIYW5kbGUpOwogICAgIGlmICghcGFnZSkKQEAgLTEzNDcsNyArMTMzNiw3IEBA
IHN0YXRpYyBTdHJpbmcgZG9tYWluQnlBZGRpbmdEb3RQcmVmaXhJZk5lZWRlZChTdHJpbmcgZG9t
YWluKQogICAgIHJldHVybiBkb21haW47CiB9CiAgICAgCi12b2lkIFdlYkF1dG9tYXRpb25TZXNz
aW9uOjphZGRTaW5nbGVDb29raWUoY29uc3QgU3RyaW5nJiBicm93c2luZ0NvbnRleHRIYW5kbGUs
IGNvbnN0IEpTT046Ok9iamVjdCYgY29va2llT2JqZWN0LCBSZWY8QWRkU2luZ2xlQ29va2llQ2Fs
bGJhY2s+JiYgY2FsbGJhY2spCit2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjphZGRTaW5nbGVD
b29raWUoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250
ZXh0SGFuZGxlJiBicm93c2luZ0NvbnRleHRIYW5kbGUsIFJlZjxKU09OOjpPYmplY3Q+JiYgY29v
a2llT2JqZWN0LCBSZWY8QWRkU2luZ2xlQ29va2llQ2FsbGJhY2s+JiYgY2FsbGJhY2spCiB7CiAg
ICAgV2ViUGFnZVByb3h5KiBwYWdlID0gd2ViUGFnZVByb3h5Rm9ySGFuZGxlKGJyb3dzaW5nQ29u
dGV4dEhhbmRsZSk7CiAgICAgaWYgKCFwYWdlKQpAQCAtMTM1OCwxNCArMTM0NywxNiBAQCB2b2lk
IFdlYkF1dG9tYXRpb25TZXNzaW9uOjphZGRTaW5nbGVDb29raWUoY29uc3QgU3RyaW5nJiBicm93
c2luZ0NvbnRleHRIYW5kbGUsCiAKICAgICBXZWJDb3JlOjpDb29raWUgY29va2llOwogCi0gICAg
aWYgKCFjb29raWVPYmplY3QuZ2V0U3RyaW5nKCJuYW1lIl9zLCBjb29raWUubmFtZSkpCisgICAg
Y29va2llLm5hbWUgPSBjb29raWVPYmplY3QtPmdldFN0cmluZygibmFtZSJfcyk7CisgICAgaWYg
KCFjb29raWUubmFtZSkKICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1Jf
QU5EX0RFVEFJTFMoTWlzc2luZ1BhcmFtZXRlciwgIlRoZSBwYXJhbWV0ZXIgJ25hbWUnIHdhcyBu
b3QgZm91bmQuIik7CiAKLSAgICBpZiAoIWNvb2tpZU9iamVjdC5nZXRTdHJpbmcoInZhbHVlIl9z
LCBjb29raWUudmFsdWUpKQorICAgIGNvb2tpZS52YWx1ZSA9IGNvb2tpZU9iamVjdC0+Z2V0U3Ry
aW5nKCJ2YWx1ZSJfcyk7CisgICAgaWYgKCFjb29raWUudmFsdWUpCiAgICAgICAgIEFTWU5DX0ZB
SUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxTKE1pc3NpbmdQYXJhbWV0ZXIsICJU
aGUgcGFyYW1ldGVyICd2YWx1ZScgd2FzIG5vdCBmb3VuZC4iKTsKIAotICAgIFN0cmluZyBkb21h
aW47Ci0gICAgaWYgKCFjb29raWVPYmplY3QuZ2V0U3RyaW5nKCJkb21haW4iX3MsIGRvbWFpbikp
CisgICAgYXV0byBkb21haW4gPSBjb29raWVPYmplY3QtPmdldFN0cmluZygiZG9tYWluIl9zKTsK
KyAgICBpZiAoIWRvbWFpbikKICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJS
T1JfQU5EX0RFVEFJTFMoTWlzc2luZ1BhcmFtZXRlciwgIlRoZSBwYXJhbWV0ZXIgJ2RvbWFpbicg
d2FzIG5vdCBmb3VuZC4iKTsKIAogICAgIC8vIEluaGVyaXQgdGhlIGRvbWFpbi9ob3N0IGZyb20g
dGhlIG1haW4gZnJhbWUncyBVUkwgaWYgaXQgaXMgbm90IGV4cGxpY2l0bHkgc2V0LgpAQCAtMTM3
NCwzMSArMTM2NSw0MSBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjphZGRTaW5nbGVDb29r
aWUoY29uc3QgU3RyaW5nJiBicm93c2luZ0NvbnRleHRIYW5kbGUsCiAgICAgZWxzZQogICAgICAg
ICBjb29raWUuZG9tYWluID0gZG9tYWluQnlBZGRpbmdEb3RQcmVmaXhJZk5lZWRlZChkb21haW4p
OwogCi0gICAgaWYgKCFjb29raWVPYmplY3QuZ2V0U3RyaW5nKCJwYXRoIl9zLCBjb29raWUucGF0
aCkpCisgICAgY29va2llLnBhdGggPSBjb29raWVPYmplY3QtPmdldFN0cmluZygicGF0aCJfcyk7
CisgICAgaWYgKCFjb29raWUucGF0aCkKICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklO
RURfRVJST1JfQU5EX0RFVEFJTFMoTWlzc2luZ1BhcmFtZXRlciwgIlRoZSBwYXJhbWV0ZXIgJ3Bh
dGgnIHdhcyBub3QgZm91bmQuIik7CiAKLSAgICBkb3VibGUgZXhwaXJlczsKLSAgICBpZiAoIWNv
b2tpZU9iamVjdC5nZXREb3VibGUoImV4cGlyZXMiX3MsIGV4cGlyZXMpKQorICAgIGF1dG8gZXhw
aXJlcyA9IGNvb2tpZU9iamVjdC0+Z2V0RG91YmxlKCJleHBpcmVzIl9zKTsKKyAgICBpZiAoIWV4
cGlyZXMpCiAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRB
SUxTKE1pc3NpbmdQYXJhbWV0ZXIsICJUaGUgcGFyYW1ldGVyICdleHBpcmVzJyB3YXMgbm90IGZv
dW5kLiIpOwogCi0gICAgY29va2llLmV4cGlyZXMgPSBleHBpcmVzICogMTAwMC4wOworICAgIGNv
b2tpZS5leHBpcmVzID0gKmV4cGlyZXMgKiAxMDAwLjA7CiAKLSAgICBpZiAoIWNvb2tpZU9iamVj
dC5nZXRCb29sZWFuKCJzZWN1cmUiX3MsIGNvb2tpZS5zZWN1cmUpKQorICAgIGF1dG8gc2VjdXJl
ID0gY29va2llT2JqZWN0LT5nZXRCb29sZWFuKCJzZWN1cmUiX3MpOworICAgIGlmICghc2VjdXJl
KQogICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhN
aXNzaW5nUGFyYW1ldGVyLCAiVGhlIHBhcmFtZXRlciAnc2VjdXJlJyB3YXMgbm90IGZvdW5kLiIp
OwogCi0gICAgaWYgKCFjb29raWVPYmplY3QuZ2V0Qm9vbGVhbigic2Vzc2lvbiJfcywgY29va2ll
LnNlc3Npb24pKQorICAgIGNvb2tpZS5zZWN1cmUgPSAqc2VjdXJlOworCisgICAgYXV0byBzZXNz
aW9uID0gY29va2llT2JqZWN0LT5nZXRCb29sZWFuKCJzZXNzaW9uIl9zKTsKKyAgICBpZiAoIXNl
c3Npb24pCiAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRB
SUxTKE1pc3NpbmdQYXJhbWV0ZXIsICJUaGUgcGFyYW1ldGVyICdzZXNzaW9uJyB3YXMgbm90IGZv
dW5kLiIpOwogCi0gICAgaWYgKCFjb29raWVPYmplY3QuZ2V0Qm9vbGVhbigiaHR0cE9ubHkiX3Ms
IGNvb2tpZS5odHRwT25seSkpCisgICAgY29va2llLnNlc3Npb24gPSAqc2Vzc2lvbjsKKworICAg
IGF1dG8gaHR0cE9ubHkgPSBjb29raWVPYmplY3QtPmdldEJvb2xlYW4oImh0dHBPbmx5Il9zKTsK
KyAgICBpZiAoIWh0dHBPbmx5KQogICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9F
UlJPUl9BTkRfREVUQUlMUyhNaXNzaW5nUGFyYW1ldGVyLCAiVGhlIHBhcmFtZXRlciAnaHR0cE9u
bHknIHdhcyBub3QgZm91bmQuIik7CiAKKyAgICBjb29raWUuaHR0cE9ubHkgPSAqaHR0cE9ubHk7
CisKICAgICBXZWJDb29raWVNYW5hZ2VyUHJveHkqIGNvb2tpZU1hbmFnZXIgPSBtX3Byb2Nlc3NQ
b29sLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKICAgICBjb29raWVNYW5h
Z2VyLT5zZXRDb29raWVzKHBhZ2UtPndlYnNpdGVEYXRhU3RvcmUoKS5zZXNzaW9uSUQoKSwgeyBj
b29raWUgfSwgW2NhbGxiYWNrXSgpIHsKICAgICAgICAgY2FsbGJhY2stPnNlbmRTdWNjZXNzKCk7
CiAgICAgfSk7CiB9CiAKLXZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OmRlbGV0ZUFsbENvb2tp
ZXMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGJyb3dzaW5nQ29udGV4
dEhhbmRsZSkKK0luc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gV2ViQXV0
b21hdGlvblNlc3Npb246OmRlbGV0ZUFsbENvb2tpZXMoY29uc3QgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJiBicm93c2luZ0NvbnRleHRIYW5k
bGUpCiB7CiAgICAgV2ViUGFnZVByb3h5KiBwYWdlID0gd2ViUGFnZVByb3h5Rm9ySGFuZGxlKGJy
b3dzaW5nQ29udGV4dEhhbmRsZSk7CiAgICAgaWYgKCFwYWdlKQpAQCAtMTQxMSw5ICsxNDEyLDEx
IEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OmRlbGV0ZUFsbENvb2tpZXMoRXJyb3JTdHJp
bmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpCiAKICAgICBXZWJDb29raWVNYW5hZ2VyUHJveHkq
IGNvb2tpZU1hbmFnZXIgPSBtX3Byb2Nlc3NQb29sLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFn
ZXJQcm94eT4oKTsKICAgICBjb29raWVNYW5hZ2VyLT5kZWxldGVDb29raWVzRm9ySG9zdG5hbWVz
KHBhZ2UtPndlYnNpdGVEYXRhU3RvcmUoKS5zZXNzaW9uSUQoKSwgeyBob3N0LCBkb21haW5CeUFk
ZGluZ0RvdFByZWZpeElmTmVlZGVkKGhvc3QpIH0pOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAot
dm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6Z2V0U2Vzc2lvblBlcm1pc3Npb25zKEVycm9yU3Ry
aW5nJiwgUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlv
bjo6U2Vzc2lvblBlcm1pc3Npb25EYXRhPj4mIG91dF9wZXJtaXNzaW9ucykKK0luc3BlY3Rvcjo6
UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90
b2NvbDo6QXV0b21hdGlvbjo6U2Vzc2lvblBlcm1pc3Npb25EYXRhPj4+IFdlYkF1dG9tYXRpb25T
ZXNzaW9uOjpnZXRTZXNzaW9uUGVybWlzc2lvbnMoKQogewogICAgIGF1dG8gcGVybWlzc2lvbnNP
YmplY3RBcnJheSA9IEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlv
bjo6U2Vzc2lvblBlcm1pc3Npb25EYXRhPjo6Y3JlYXRlKCk7CiAgICAgYXV0byBnZXRVc2VyTWVk
aWFQZXJtaXNzaW9uT2JqZWN0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6U2Vz
c2lvblBlcm1pc3Npb25EYXRhOjpjcmVhdGUoKQpAQCAtMTQyMiwzNCArMTQyNSwzNiBAQCB2b2lk
IFdlYkF1dG9tYXRpb25TZXNzaW9uOjpnZXRTZXNzaW9uUGVybWlzc2lvbnMoRXJyb3JTdHJpbmcm
LCBSZWZQdHI8SlNPTjo6QXJyYQogICAgICAgICAucmVsZWFzZSgpOwogCiAgICAgcGVybWlzc2lv
bnNPYmplY3RBcnJheS0+YWRkSXRlbShXVEZNb3ZlKGdldFVzZXJNZWRpYVBlcm1pc3Npb25PYmpl
Y3QpKTsKLSAgICBvdXRfcGVybWlzc2lvbnMgPSBXVEZNb3ZlKHBlcm1pc3Npb25zT2JqZWN0QXJy
YXkpOworICAgIHJldHVybiBXVEZNb3ZlKHBlcm1pc3Npb25zT2JqZWN0QXJyYXkpOwogfQogCi12
b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpzZXRTZXNzaW9uUGVybWlzc2lvbnMoRXJyb3JTdHJp
bmcmIGVycm9yU3RyaW5nLCBjb25zdCBKU09OOjpBcnJheSYgcGVybWlzc2lvbnMpCitJbnNwZWN0
b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IFdlYkF1dG9tYXRpb25TZXNzaW9uOjpz
ZXRTZXNzaW9uUGVybWlzc2lvbnMoUmVmPEpTT046OkFycmF5PiYmIHBlcm1pc3Npb25zKQogewot
ICAgIGZvciAoYXV0byBpdCA9IHBlcm1pc3Npb25zLmJlZ2luKCk7IGl0ICE9IHBlcm1pc3Npb25z
LmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBlcm1pc3Npb247
Ci0gICAgICAgIGlmICghaXQtPmdldCgpLT5hc09iamVjdChwZXJtaXNzaW9uKSkKKyAgICBmb3Ig
KGF1dG8gaXQgPSBwZXJtaXNzaW9ucy0+YmVnaW4oKTsgaXQgIT0gcGVybWlzc2lvbnMtPmVuZCgp
OyArK2l0KSB7CisgICAgICAgIGF1dG8gcGVybWlzc2lvbiA9IGl0LT5nZXQoKS5hc09iamVjdCgp
OworICAgICAgICBpZiAoIXBlcm1pc3Npb24pCiAgICAgICAgICAgICBTWU5DX0ZBSUxfV0lUSF9Q
UkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxTKEludmFsaWRQYXJhbWV0ZXIsICJUaGUgcGFyYW1l
dGVyICdwZXJtaXNzaW9ucycgaXMgaW52YWxpZC4iKTsKIAotICAgICAgICBTdHJpbmcgcGVybWlz
c2lvbk5hbWU7Ci0gICAgICAgIGlmICghcGVybWlzc2lvbi0+Z2V0U3RyaW5nKCJwZXJtaXNzaW9u
Il9zLCBwZXJtaXNzaW9uTmFtZSkpCisgICAgICAgIGF1dG8gcGVybWlzc2lvbk5hbWUgPSBwZXJt
aXNzaW9uLT5nZXRTdHJpbmcoInBlcm1pc3Npb24iX3MpOworICAgICAgICBpZiAoIXBlcm1pc3Np
b25OYW1lKQogICAgICAgICAgICAgU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUl9BTkRf
REVUQUlMUyhJbnZhbGlkUGFyYW1ldGVyLCAiVGhlIHBhcmFtZXRlciAncGVybWlzc2lvbicgaXMg
bWlzc2luZyBvciBpbnZhbGlkLiIpOwogCiAgICAgICAgIGF1dG8gcGFyc2VkUGVybWlzc2lvbk5h
bWUgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uSGVscGVyczo6cGFyc2VFbnVtVmFs
dWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OlNlc3Npb25QZXJt
aXNzaW9uPihwZXJtaXNzaW9uTmFtZSk7CiAgICAgICAgIGlmICghcGFyc2VkUGVybWlzc2lvbk5h
bWUpCiAgICAgICAgICAgICBTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRB
SUxTKEludmFsaWRQYXJhbWV0ZXIsICJUaGUgcGFyYW1ldGVyICdwZXJtaXNzaW9uJyBoYXMgYW4g
dW5rbm93biB2YWx1ZS4iKTsKIAotICAgICAgICBib29sIHBlcm1pc3Npb25WYWx1ZTsKLSAgICAg
ICAgaWYgKCFwZXJtaXNzaW9uLT5nZXRCb29sZWFuKCJ2YWx1ZSJfcywgcGVybWlzc2lvblZhbHVl
KSkKKyAgICAgICAgYXV0byBwZXJtaXNzaW9uVmFsdWUgPSBwZXJtaXNzaW9uLT5nZXRCb29sZWFu
KCJ2YWx1ZSJfcyk7CisgICAgICAgIGlmICghcGVybWlzc2lvblZhbHVlKQogICAgICAgICAgICAg
U1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhJbnZhbGlkUGFyYW1l
dGVyLCAiVGhlIHBhcmFtZXRlciAndmFsdWUnIGlzIG1pc3Npbmcgb3IgaW52YWxpZC4iKTsKIAog
ICAgICAgICBzd2l0Y2ggKHBhcnNlZFBlcm1pc3Npb25OYW1lLnZhbHVlKCkpIHsKICAgICAgICAg
Y2FzZSBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpTZXNzaW9uUGVybWlzc2lvbjo6
R2V0VXNlck1lZGlhOgotICAgICAgICAgICAgbV9wZXJtaXNzaW9uRm9yR2V0VXNlck1lZGlhID0g
cGVybWlzc2lvblZhbHVlOworICAgICAgICAgICAgbV9wZXJtaXNzaW9uRm9yR2V0VXNlck1lZGlh
ID0gKnBlcm1pc3Npb25WYWx1ZTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
fQorCisgICAgcmV0dXJuIHsgfTsKIH0KIAogYm9vbCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6c2hv
dWxkQWxsb3dHZXRVc2VyTWVkaWFGb3JQYWdlKGNvbnN0IFdlYlBhZ2VQcm94eSYpIGNvbnN0CkBA
IC0xNDk0LDcgKzE0OTksNyBAQCBTaW11bGF0ZWRJbnB1dFNvdXJjZSogV2ViQXV0b21hdGlvblNl
c3Npb246OmlucHV0U291cmNlRm9yVHlwZShTaW11bGF0ZWRJbnB1dFNvdQogfQogCiAvLyBNQVJL
OiBTaW11bGF0ZWRJbnB1dERpc3BhdGNoZXI6OkNsaWVudCBBUEkKLXZvaWQgV2ViQXV0b21hdGlv
blNlc3Npb246OnZpZXdwb3J0SW5WaWV3Q2VudGVyUG9pbnRPZkVsZW1lbnQoV2ViUGFnZVByb3h5
JiBwYWdlLCBPcHRpb25hbDxGcmFtZUlkZW50aWZpZXI+IGZyYW1lSUQsIGNvbnN0IFN0cmluZyYg
bm9kZUhhbmRsZSwgRnVuY3Rpb248dm9pZCAoT3B0aW9uYWw8V2ViQ29yZTo6SW50UG9pbnQ+LCBP
cHRpb25hbDxBdXRvbWF0aW9uQ29tbWFuZEVycm9yPik+JiYgY29tcGxldGlvbkhhbmRsZXIpCit2
b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjp2aWV3cG9ydEluVmlld0NlbnRlclBvaW50T2ZFbGVt
ZW50KFdlYlBhZ2VQcm94eSYgcGFnZSwgT3B0aW9uYWw8RnJhbWVJZGVudGlmaWVyPiBmcmFtZUlE
LCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpOb2RlSGFuZGxlJiBub2Rl
SGFuZGxlLCBGdW5jdGlvbjx2b2lkKE9wdGlvbmFsPFdlYkNvcmU6OkludFBvaW50PiwgT3B0aW9u
YWw8QXV0b21hdGlvbkNvbW1hbmRFcnJvcj4pPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewogICAg
IFdURjo6Q29tcGxldGlvbkhhbmRsZXI8dm9pZChPcHRpb25hbDxTdHJpbmc+LCBXZWJDb3JlOjpJ
bnRSZWN0LCBPcHRpb25hbDxXZWJDb3JlOjpJbnRQb2ludD4sIGJvb2wpPiBkaWRDb21wdXRlRWxl
bWVudExheW91dEhhbmRsZXIgPSBbY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKV0oT3B0aW9uYWw8U3RyaW5nPiBlcnJvclR5cGUsIFdlYkNvcmU6OkludFJlY3Qs
IE9wdGlvbmFsPFdlYkNvcmU6OkludFBvaW50PiBpblZpZXdDZW50ZXJQb2ludCwgYm9vbCkgbXV0
YWJsZSB7CiAgICAgICAgIGlmIChlcnJvclR5cGUpIHsKQEAgLTE2MzUsNyArMTY0MCw3IEBAIHN0
YXRpYyBXZWJFdmVudDo6TW9kaWZpZXIgcHJvdG9jb2xNb2RpZmllclRvV2ViRXZlbnRNb2RpZmll
cihJbnNwZWN0b3I6OlByb3RvY29sCiB9CiAjZW5kaWYgLy8gRU5BQkxFKFdFQkRSSVZFUl9NT1VT
RV9JTlRFUkFDVElPTlMpCiAKLXZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OnBlcmZvcm1Nb3Vz
ZUludGVyYWN0aW9uKGNvbnN0IFN0cmluZyYgaGFuZGxlLCBjb25zdCBKU09OOjpPYmplY3QmIHJl
cXVlc3RlZFBvc2l0aW9uT2JqZWN0LCBjb25zdCBTdHJpbmcmIG1vdXNlQnV0dG9uU3RyaW5nLCBj
b25zdCBTdHJpbmcmIG1vdXNlSW50ZXJhY3Rpb25TdHJpbmcsIGNvbnN0IEpTT046OkFycmF5JiBr
ZXlNb2RpZmllclN0cmluZ3MsIFJlZjxQZXJmb3JtTW91c2VJbnRlcmFjdGlvbkNhbGxiYWNrPiYm
IGNhbGxiYWNrKQordm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6cGVyZm9ybU1vdXNlSW50ZXJh
Y3Rpb24oY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250
ZXh0SGFuZGxlJiBoYW5kbGUsIFJlZjxKU09OOjpPYmplY3Q+JiYgcmVxdWVzdGVkUG9zaXRpb24s
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246Ok1vdXNlQnV0dG9uIG1vdXNlQnV0dG9u
LCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpNb3VzZUludGVyYWN0aW9uIG1vdXNl
SW50ZXJhY3Rpb24sIFJlZjxKU09OOjpBcnJheT4mJiBrZXlNb2RpZmllclN0cmluZ3MsIFJlZjxQ
ZXJmb3JtTW91c2VJbnRlcmFjdGlvbkNhbGxiYWNrPiYmIGNhbGxiYWNrKQogewogI2lmICFFTkFC
TEUoV0VCRFJJVkVSX01PVVNFX0lOVEVSQUNUSU9OUykKICAgICBBU1lOQ19GQUlMX1dJVEhfUFJF
REVGSU5FRF9FUlJPUihOb3RJbXBsZW1lbnRlZCk7CkBAIC0xNjQ0LDQ4ICsxNjQ5LDQ0IEBAIHZv
aWQgV2ViQXV0b21hdGlvblNlc3Npb246OnBlcmZvcm1Nb3VzZUludGVyYWN0aW9uKGNvbnN0IFN0
cmluZyYgaGFuZGxlLCBjb25zdCBKCiAgICAgaWYgKCFwYWdlKQogICAgICAgICBBU1lOQ19GQUlM
X1dJVEhfUFJFREVGSU5FRF9FUlJPUihXaW5kb3dOb3RGb3VuZCk7CiAKLSAgICBmbG9hdCB4Owot
ICAgIGlmICghcmVxdWVzdGVkUG9zaXRpb25PYmplY3QuZ2V0RG91YmxlKCJ4Il9zLCB4KSkKKyAg
ICBhdXRvIHggPSByZXF1ZXN0ZWRQb3NpdGlvbi0+Z2V0RG91YmxlKCJ4Il9zKTsKKyAgICBpZiAo
IXgpCiAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxT
KE1pc3NpbmdQYXJhbWV0ZXIsICJUaGUgcGFyYW1ldGVyICd4JyB3YXMgbm90IGZvdW5kLiIpOwog
Ci0gICAgZmxvYXQgeTsKLSAgICBpZiAoIXJlcXVlc3RlZFBvc2l0aW9uT2JqZWN0LmdldERvdWJs
ZSgieSJfcywgeSkpCisgICAgYXV0byBmbG9hdFggPSBzdGF0aWNfY2FzdDxmbG9hdD4oKngpOwor
CisgICAgYXV0byB5ID0gcmVxdWVzdGVkUG9zaXRpb24tPmdldERvdWJsZSgieSJfcyk7CisgICAg
aWYgKCF5KQogICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUl9BTkRfREVU
QUlMUyhNaXNzaW5nUGFyYW1ldGVyLCAiVGhlIHBhcmFtZXRlciAneScgd2FzIG5vdCBmb3VuZC4i
KTsKIAorICAgIGF1dG8gZmxvYXRZID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KCp5KTsKKwogICAgIE9w
dGlvblNldDxXZWJFdmVudDo6TW9kaWZpZXI+IGtleU1vZGlmaWVyczsKLSAgICBmb3IgKGF1dG8g
aXQgPSBrZXlNb2RpZmllclN0cmluZ3MuYmVnaW4oKTsgaXQgIT0ga2V5TW9kaWZpZXJTdHJpbmdz
LmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIFN0cmluZyBtb2RpZmllclN0cmluZzsKLSAgICAgICAg
aWYgKCFpdC0+Z2V0KCktPmFzU3RyaW5nKG1vZGlmaWVyU3RyaW5nKSkKKyAgICBmb3IgKGF1dG8g
aXQgPSBrZXlNb2RpZmllclN0cmluZ3MtPmJlZ2luKCk7IGl0ICE9IGtleU1vZGlmaWVyU3RyaW5n
cy0+ZW5kKCk7ICsraXQpIHsKKyAgICAgICAgYXV0byBtb2RpZmllclN0cmluZyA9IGl0LT5nZXQo
KS5hc1N0cmluZygpOworICAgICAgICBpZiAoIW1vZGlmaWVyU3RyaW5nKQogICAgICAgICAgICAg
QVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoSW52YWxpZFBhcmFt
ZXRlciwgIlRoZSBwYXJhbWV0ZXIgJ21vZGlmaWVycycgaXMgaW52YWxpZC4iKTsKIAogICAgICAg
ICBhdXRvIHBhcnNlZE1vZGlmaWVyID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbkhl
bHBlcnM6OnBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRv
bWF0aW9uOjpLZXlNb2RpZmllcj4obW9kaWZpZXJTdHJpbmcpOwogICAgICAgICBpZiAoIXBhcnNl
ZE1vZGlmaWVyKQogICAgICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1Jf
QU5EX0RFVEFJTFMoSW52YWxpZFBhcmFtZXRlciwgIkEgbW9kaWZpZXIgaW4gdGhlICdtb2RpZmll
cnMnIGFycmF5IGlzIGludmFsaWQuIik7CisKICAgICAgICAga2V5TW9kaWZpZXJzLmFkZChwcm90
b2NvbE1vZGlmaWVyVG9XZWJFdmVudE1vZGlmaWVyKHBhcnNlZE1vZGlmaWVyLnZhbHVlKCkpKTsK
ICAgICB9CiAKLSAgICBwYWdlLT5nZXRXaW5kb3dGcmFtZVdpdGhDYWxsYmFjayhbdGhpcywgcHJv
dGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2sp
LCBwYWdlID0gbWFrZVJlZigqcGFnZSksIHgsIHksIG1vdXNlSW50ZXJhY3Rpb25TdHJpbmcsIG1v
dXNlQnV0dG9uU3RyaW5nLCBrZXlNb2RpZmllcnNdKFdlYkNvcmU6OkZsb2F0UmVjdCB3aW5kb3dG
cmFtZSkgbXV0YWJsZSB7CisgICAgcGFnZS0+Z2V0V2luZG93RnJhbWVXaXRoQ2FsbGJhY2soW3Ro
aXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNh
bGxiYWNrKSwgcGFnZSA9IG1ha2VSZWYoKnBhZ2UpLCBmbG9hdFgsIGZsb2F0WSwgbW91c2VJbnRl
cmFjdGlvbiwgbW91c2VCdXR0b24sIGtleU1vZGlmaWVyc10oV2ViQ29yZTo6RmxvYXRSZWN0IHdp
bmRvd0ZyYW1lKSBtdXRhYmxlIHsKKyAgICAgICAgZmxvYXRYID0gc3RkOjptaW4oc3RkOjptYXgo
MC4wZiwgZmxvYXRYKSwgd2luZG93RnJhbWUuc2l6ZSgpLndpZHRoKCkpOworICAgICAgICBmbG9h
dFkgPSBzdGQ6Om1pbihzdGQ6Om1heCgwLjBmLCBmbG9hdFkpLCB3aW5kb3dGcmFtZS5zaXplKCku
aGVpZ2h0KCkpOwogCi0gICAgICAgIHggPSBzdGQ6Om1pbihzdGQ6Om1heCgwLjBmLCB4KSwgd2lu
ZG93RnJhbWUuc2l6ZSgpLndpZHRoKCkpOwotICAgICAgICB5ID0gc3RkOjptaW4oc3RkOjptYXgo
MC4wZiwgeSksIHdpbmRvd0ZyYW1lLnNpemUoKS5oZWlnaHQoKSk7CisgICAgICAgIFdlYkNvcmU6
OkludFBvaW50IGxvY2F0aW9uSW5WaWV3cG9ydCA9IFdlYkNvcmU6OkludFBvaW50KHN0YXRpY19j
YXN0PGludD4oZmxvYXRYKSwgc3RhdGljX2Nhc3Q8aW50PihmbG9hdFkpKTsKIAotICAgICAgICBX
ZWJDb3JlOjpJbnRQb2ludCBsb2NhdGlvbkluVmlld3BvcnQgPSBXZWJDb3JlOjpJbnRQb2ludChz
dGF0aWNfY2FzdDxpbnQ+KHgpLCBzdGF0aWNfY2FzdDxpbnQ+KHkpKTsKLQotICAgICAgICBhdXRv
IHBhcnNlZEludGVyYWN0aW9uID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbkhlbHBl
cnM6OnBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0
aW9uOjpNb3VzZUludGVyYWN0aW9uPihtb3VzZUludGVyYWN0aW9uU3RyaW5nKTsKLSAgICAgICAg
aWYgKCFwYXJzZWRJbnRlcmFjdGlvbikKLSAgICAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVE
RUZJTkVEX0VSUk9SX0FORF9ERVRBSUxTKEludmFsaWRQYXJhbWV0ZXIsICJUaGUgcGFyYW1ldGVy
ICdpbnRlcmFjdGlvbicgaXMgaW52YWxpZC4iKTsKLQotICAgICAgICBhdXRvIHBhcnNlZEJ1dHRv
biA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb25IZWxwZXJzOjpwYXJzZUVudW1WYWx1
ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6TW91c2VCdXR0b24+
KG1vdXNlQnV0dG9uU3RyaW5nKTsKLSAgICAgICAgaWYgKCFwYXJzZWRCdXR0b24pCi0gICAgICAg
ICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhJbnZhbGlk
UGFyYW1ldGVyLCAiVGhlIHBhcmFtZXRlciAnYnV0dG9uJyBpcyBpbnZhbGlkLiIpOwotCi0gICAg
ICAgIGF1dG8gbW91c2VFdmVudHNGbHVzaGVkQ2FsbGJhY2sgPSBbcHJvdGVjdGVkVGhpcyA9IFdU
Rk1vdmUocHJvdGVjdGVkVGhpcyksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIHBhZ2Us
IHgsIHldKE9wdGlvbmFsPEF1dG9tYXRpb25Db21tYW5kRXJyb3I+IGVycm9yKSB7CisgICAgICAg
IGF1dG8gbW91c2VFdmVudHNGbHVzaGVkQ2FsbGJhY2sgPSBbcHJvdGVjdGVkVGhpcyA9IFdURk1v
dmUocHJvdGVjdGVkVGhpcyksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIHBhZ2UsIGZs
b2F0WCwgZmxvYXRZXShPcHRpb25hbDxBdXRvbWF0aW9uQ29tbWFuZEVycm9yPiBlcnJvcikgewog
ICAgICAgICAgICAgaWYgKGVycm9yKQogICAgICAgICAgICAgICAgIGNhbGxiYWNrLT5zZW5kRmFp
bHVyZShlcnJvci52YWx1ZSgpLnRvUHJvdG9jb2xTdHJpbmcoKSk7CiAgICAgICAgICAgICBlbHNl
IHsKICAgICAgICAgICAgICAgICBjYWxsYmFjay0+c2VuZFN1Y2Nlc3MoSW5zcGVjdG9yOjpQcm90
b2NvbDo6QXV0b21hdGlvbjo6UG9pbnQ6OmNyZWF0ZSgpCi0gICAgICAgICAgICAgICAgICAgIC5z
ZXRYKHgpCi0gICAgICAgICAgICAgICAgICAgIC5zZXRZKHkgLSBwYWdlLT50b3BDb250ZW50SW5z
ZXQoKSkKKyAgICAgICAgICAgICAgICAgICAgLnNldFgoZmxvYXRYKQorICAgICAgICAgICAgICAg
ICAgICAuc2V0WShmbG9hdFkgLSBwYWdlLT50b3BDb250ZW50SW5zZXQoKSkKICAgICAgICAgICAg
ICAgICAgICAgLnJlbGVhc2UoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH07CkBAIC0xNjk1
LDcgKzE2OTYsNyBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpwZXJmb3JtTW91c2VJbnRl
cmFjdGlvbihjb25zdCBTdHJpbmcmIGhhbmRsZSwgY29uc3QgSgogICAgICAgICAgICAgY2FsbGJh
Y2tJbk1hcChBVVRPTUFUSU9OX0NPTU1BTkRfRVJST1JfV0lUSF9OQU1FKFRpbWVvdXQpKTsKICAg
ICAgICAgY2FsbGJhY2tJbk1hcCA9IFdURk1vdmUobW91c2VFdmVudHNGbHVzaGVkQ2FsbGJhY2sp
OwogCi0gICAgICAgIHBsYXRmb3JtU2ltdWxhdGVNb3VzZUludGVyYWN0aW9uKHBhZ2UsIHBhcnNl
ZEludGVyYWN0aW9uLnZhbHVlKCksIHBhcnNlZEJ1dHRvbi52YWx1ZSgpLCBsb2NhdGlvbkluVmll
d3BvcnQsIGtleU1vZGlmaWVycyk7CisgICAgICAgIHBsYXRmb3JtU2ltdWxhdGVNb3VzZUludGVy
YWN0aW9uKHBhZ2UsIG1vdXNlSW50ZXJhY3Rpb24sIG1vdXNlQnV0dG9uLCBsb2NhdGlvbkluVmll
d3BvcnQsIGtleU1vZGlmaWVycyk7CiAKICAgICAgICAgLy8gSWYgdGhlIGV2ZW50IGxvY2F0aW9u
IHdhcyBwcmV2aW91c2x5IGNsaXBwZWQgYW5kIGRvZXMgbm90IGhpdCB0ZXN0IGFueXRoaW5nIGlu
IHRoZSB3aW5kb3csIHRoZW4gaXQgd2lsbCBub3QgYmUgcHJvY2Vzc2VkLgogICAgICAgICAvLyBG
b3IgY29tcGF0aWJpbGl0eSB3aXRoIHByZS1XM0MgZHJpdmVyIGltcGxlbWVudGF0aW9ucywgZG9u
J3QgbWFrZSB0aGlzIGEgaGFyZCBlcnJvcjsganVzdCBkbyBub3RoaW5nIHNpbGVudGx5LgpAQCAt
MTcwOCw3ICsxNzA5LDcgQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6cGVyZm9ybU1vdXNl
SW50ZXJhY3Rpb24oY29uc3QgU3RyaW5nJiBoYW5kbGUsIGNvbnN0IEoKICNlbmRpZiAvLyBFTkFC
TEUoV0VCRFJJVkVSX01PVVNFX0lOVEVSQUNUSU9OUykKIH0KIAotdm9pZCBXZWJBdXRvbWF0aW9u
U2Vzc2lvbjo6cGVyZm9ybUtleWJvYXJkSW50ZXJhY3Rpb25zKGNvbnN0IFN0cmluZyYgaGFuZGxl
LCBjb25zdCBKU09OOjpBcnJheSYgaW50ZXJhY3Rpb25zLCBSZWY8UGVyZm9ybUtleWJvYXJkSW50
ZXJhY3Rpb25zQ2FsbGJhY2s+JiYgY2FsbGJhY2spCit2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9u
OjpwZXJmb3JtS2V5Ym9hcmRJbnRlcmFjdGlvbnMoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6
QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJiBoYW5kbGUsIFJlZjxKU09OOjpBcnJh
eT4mJiBpbnRlcmFjdGlvbnMsIFJlZjxQZXJmb3JtS2V5Ym9hcmRJbnRlcmFjdGlvbnNDYWxsYmFj
az4mJiBjYWxsYmFjaykKIHsKICNpZiAhRU5BQkxFKFdFQkRSSVZFUl9LRVlCT0FSRF9JTlRFUkFD
VElPTlMpCiAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1IoTm90SW1wbGVtZW50
ZWQpOwpAQCAtMTcxNywyOCArMTcxOCwyNyBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpw
ZXJmb3JtS2V5Ym9hcmRJbnRlcmFjdGlvbnMoY29uc3QgU3RyaW5nJiBoYW5kbGUsIGNvbgogICAg
IGlmICghcGFnZSkKICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1IoV2lu
ZG93Tm90Rm91bmQpOwogCi0gICAgaWYgKCFpbnRlcmFjdGlvbnMubGVuZ3RoKCkpCisgICAgaWYg
KCFpbnRlcmFjdGlvbnMtPmxlbmd0aCgpKQogICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVG
SU5FRF9FUlJPUl9BTkRfREVUQUlMUyhJbnZhbGlkUGFyYW1ldGVyLCAiVGhlIHBhcmFtZXRlciAn
aW50ZXJhY3Rpb25zJyB3YXMgbm90IGZvdW5kIG9yIGVtcHR5LiIpOwogCiAgICAgLy8gVmFsaWRh
dGUgYWxsIG9mIHRoZSBwYXJhbWV0ZXJzIGJlZm9yZSBwZXJmb3JtaW5nIGFueSBpbnRlcmFjdGlv
bnMgd2l0aCB0aGUgYnJvd3NpbmcgY29udGV4dCB1bmRlciB0ZXN0LgogICAgIFZlY3RvcjxXVEY6
OkZ1bmN0aW9uPHZvaWQoKT4+IGFjdGlvbnNUb1BlcmZvcm07Ci0gICAgYWN0aW9uc1RvUGVyZm9y
bS5yZXNlcnZlQ2FwYWNpdHkoaW50ZXJhY3Rpb25zLmxlbmd0aCgpKTsKKyAgICBhY3Rpb25zVG9Q
ZXJmb3JtLnJlc2VydmVDYXBhY2l0eShpbnRlcmFjdGlvbnMtPmxlbmd0aCgpKTsKIAotICAgIGZv
ciAoY29uc3QgYXV0byYgaW50ZXJhY3Rpb24gOiBpbnRlcmFjdGlvbnMpIHsKLSAgICAgICAgUmVm
UHRyPEpTT046Ok9iamVjdD4gaW50ZXJhY3Rpb25PYmplY3Q7Ci0gICAgICAgIGlmICghaW50ZXJh
Y3Rpb24tPmFzT2JqZWN0KGludGVyYWN0aW9uT2JqZWN0KSkKKyAgICBmb3IgKGNvbnN0IGF1dG8m
IGludGVyYWN0aW9uVmFsdWUgOiBpbnRlcmFjdGlvbnMuZ2V0KCkpIHsKKyAgICAgICAgYXV0byBp
bnRlcmFjdGlvbk9iamVjdCA9IGludGVyYWN0aW9uVmFsdWUtPmFzT2JqZWN0KCk7CisgICAgICAg
IGlmICghaW50ZXJhY3Rpb25PYmplY3QpCiAgICAgICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJF
REVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhJbnZhbGlkUGFyYW1ldGVyLCAiQW4gaW50ZXJhY3Rp
b24gaW4gdGhlICdpbnRlcmFjdGlvbnMnIHBhcmFtZXRlciB3YXMgaW52YWxpZC4iKTsKIAotICAg
ICAgICBTdHJpbmcgaW50ZXJhY3Rpb25UeXBlU3RyaW5nOwotICAgICAgICBpZiAoIWludGVyYWN0
aW9uT2JqZWN0LT5nZXRTdHJpbmcoInR5cGUiX3MsIGludGVyYWN0aW9uVHlwZVN0cmluZykpCisg
ICAgICAgIGF1dG8gaW50ZXJhY3Rpb25UeXBlU3RyaW5nID0gaW50ZXJhY3Rpb25PYmplY3QtPmdl
dFN0cmluZygidHlwZSJfcyk7CisgICAgICAgIGlmICghaW50ZXJhY3Rpb25UeXBlU3RyaW5nKQog
ICAgICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMo
SW52YWxpZFBhcmFtZXRlciwgIkFuIGludGVyYWN0aW9uIGluIHRoZSAnaW50ZXJhY3Rpb25zJyBw
YXJhbWV0ZXIgaXMgbWlzc2luZyB0aGUgJ3R5cGUnIGtleS4iKTsKICAgICAgICAgYXV0byBpbnRl
cmFjdGlvblR5cGUgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uSGVscGVyczo6cGFy
c2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246Oktl
eWJvYXJkSW50ZXJhY3Rpb25UeXBlPihpbnRlcmFjdGlvblR5cGVTdHJpbmcpOwogICAgICAgICBp
ZiAoIWludGVyYWN0aW9uVHlwZSkKICAgICAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJ
TkVEX0VSUk9SX0FORF9ERVRBSUxTKEludmFsaWRQYXJhbWV0ZXIsICJBbiBpbnRlcmFjdGlvbiBp
biB0aGUgJ2ludGVyYWN0aW9ucycgcGFyYW1ldGVyIGhhcyBhbiBpbnZhbGlkICd0eXBlJyBrZXku
Iik7CiAKLSAgICAgICAgU3RyaW5nIHZpcnR1YWxLZXlTdHJpbmc7Ci0gICAgICAgIGJvb2wgZm91
bmRWaXJ0dWFsS2V5ID0gaW50ZXJhY3Rpb25PYmplY3QtPmdldFN0cmluZygia2V5Il9zLCB2aXJ0
dWFsS2V5U3RyaW5nKTsKLSAgICAgICAgaWYgKGZvdW5kVmlydHVhbEtleSkgeworICAgICAgICBh
dXRvIHZpcnR1YWxLZXlTdHJpbmcgPSBpbnRlcmFjdGlvbk9iamVjdC0+Z2V0U3RyaW5nKCJrZXki
X3MpOworICAgICAgICBpZiAoISF2aXJ0dWFsS2V5U3RyaW5nKSB7CiAgICAgICAgICAgICBPcHRp
b25hbDxWaXJ0dWFsS2V5PiB2aXJ0dWFsS2V5ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21h
dGlvbkhlbHBlcnM6OnBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29s
OjpBdXRvbWF0aW9uOjpWaXJ0dWFsS2V5Pih2aXJ0dWFsS2V5U3RyaW5nKTsKICAgICAgICAgICAg
IGlmICghdmlydHVhbEtleSkKICAgICAgICAgICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVG
SU5FRF9FUlJPUl9BTkRfREVUQUlMUyhJbnZhbGlkUGFyYW1ldGVyLCAiQW4gaW50ZXJhY3Rpb24g
aW4gdGhlICdpbnRlcmFjdGlvbnMnIHBhcmFtZXRlciBoYXMgYW4gaW52YWxpZCAna2V5JyB2YWx1
ZS4iKTsKQEAgLTE3NDgsOSArMTc0OCw4IEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OnBl
cmZvcm1LZXlib2FyZEludGVyYWN0aW9ucyhjb25zdCBTdHJpbmcmIGhhbmRsZSwgY29uCiAgICAg
ICAgICAgICB9KTsKICAgICAgICAgfQogCi0gICAgICAgIFN0cmluZyBrZXlTZXF1ZW5jZTsKLSAg
ICAgICAgYm9vbCBmb3VuZEtleVNlcXVlbmNlID0gaW50ZXJhY3Rpb25PYmplY3QtPmdldFN0cmlu
ZygidGV4dCJfcywga2V5U2VxdWVuY2UpOwotICAgICAgICBpZiAoZm91bmRLZXlTZXF1ZW5jZSkg
eworICAgICAgICBhdXRvIGtleVNlcXVlbmNlID0gaW50ZXJhY3Rpb25PYmplY3QtPmdldFN0cmlu
ZygidGV4dCJfcyk7CisgICAgICAgIGlmICghIWtleVNlcXVlbmNlKSB7CiAgICAgICAgICAgICBz
d2l0Y2ggKGludGVyYWN0aW9uVHlwZS52YWx1ZSgpKSB7CiAgICAgICAgICAgICBjYXNlIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OktleWJvYXJkSW50ZXJhY3Rpb25UeXBlOjpLZXlQ
cmVzczoKICAgICAgICAgICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6
S2V5Ym9hcmRJbnRlcmFjdGlvblR5cGU6OktleVJlbGVhc2U6CkBAIC0xNzY1LDcgKzE3NjQsNyBA
QCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpwZXJmb3JtS2V5Ym9hcmRJbnRlcmFjdGlvbnMo
Y29uc3QgU3RyaW5nJiBoYW5kbGUsIGNvbgogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAg
ICAgICAgaWYgKCFmb3VuZFZpcnR1YWxLZXkgJiYgIWZvdW5kS2V5U2VxdWVuY2UpCisgICAgICAg
IGlmICghdmlydHVhbEtleVN0cmluZyAmJiAha2V5U2VxdWVuY2UpCiAgICAgICAgICAgICBBU1lO
Q19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhNaXNzaW5nUGFyYW1ldGVy
LCAiQW4gaW50ZXJhY3Rpb24gaW4gdGhlICdpbnRlcmFjdGlvbnMnIHBhcmFtZXRlciBpcyBtaXNz
aW5nIGJvdGggJ2tleScgYW5kICd0ZXh0Jy4gT25lIG11c3QgYmUgcHJvdmlkZWQuIik7CiAgICAg
fQogCkBAIC0xODA4LDcgKzE4MDcsNyBAQCBzdGF0aWMgU2ltdWxhdGVkSW5wdXRTb3VyY2VUeXBl
IHNpbXVsYXRlZElucHV0U291cmNlVHlwZUZyb21Qcm90b2NvbFNvdXJjZVR5cGUoSQogfQogI2Vu
ZGlmIC8vIEVOQUJMRShXRUJEUklWRVJfQUNUSU9OU19BUEkpCiAKLXZvaWQgV2ViQXV0b21hdGlv
blNlc3Npb246OnBlcmZvcm1JbnRlcmFjdGlvblNlcXVlbmNlKGNvbnN0IFN0cmluZyYgaGFuZGxl
LCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsRnJhbWVIYW5kbGUsIGNvbnN0IEpTT046OkFycmF5JiBp
bnB1dFNvdXJjZXMsIGNvbnN0IEpTT046OkFycmF5JiBzdGVwcywgUmVmPFdlYkF1dG9tYXRpb25T
ZXNzaW9uOjpQZXJmb3JtSW50ZXJhY3Rpb25TZXF1ZW5jZUNhbGxiYWNrPiYmIGNhbGxiYWNrKQor
dm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6cGVyZm9ybUludGVyYWN0aW9uU2VxdWVuY2UoY29u
c3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxl
JiBoYW5kbGUsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkZyYW1lSGFu
ZGxlJiBmcmFtZUhhbmRsZSwgUmVmPEpTT046OkFycmF5PiYmIGlucHV0U291cmNlcywgUmVmPEpT
T046OkFycmF5PiYmIHN0ZXBzLCBSZWY8V2ViQXV0b21hdGlvblNlc3Npb246OlBlcmZvcm1JbnRl
cmFjdGlvblNlcXVlbmNlQ2FsbGJhY2s+JiYgY2FsbGJhY2spCiB7CiAgICAgLy8gVGhpcyBjb21t
YW5kIGltcGxlbWVudHMgV2ViS2l0IHN1cHBvcnQgZm9yIMKnMTcuNSBQZXJmb3JtIEFjdGlvbnMu
CiAKQEAgLTE4MjAsNyArMTgxOSw3IEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OnBlcmZv
cm1JbnRlcmFjdGlvblNlcXVlbmNlKGNvbnN0IFN0cmluZyYgaGFuZGxlLCBjb25zCiAgICAgICAg
IEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SKFdpbmRvd05vdEZvdW5kKTsKIAogICAg
IGJvb2wgZnJhbWVOb3RGb3VuZCA9IGZhbHNlOwotICAgIGF1dG8gZnJhbWVJRCA9IHdlYkZyYW1l
SURGb3JIYW5kbGUob3B0aW9uYWxGcmFtZUhhbmRsZSA/ICpvcHRpb25hbEZyYW1lSGFuZGxlIDog
ZW1wdHlTdHJpbmcoKSwgZnJhbWVOb3RGb3VuZCk7CisgICAgYXV0byBmcmFtZUlEID0gd2ViRnJh
bWVJREZvckhhbmRsZShmcmFtZUhhbmRsZSwgZnJhbWVOb3RGb3VuZCk7CiAgICAgaWYgKGZyYW1l
Tm90Rm91bmQpCiAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SKEZyYW1l
Tm90Rm91bmQpOwogCkBAIC0xODI5LDIwICsxODI4LDIwIEBAIHZvaWQgV2ViQXV0b21hdGlvblNl
c3Npb246OnBlcmZvcm1JbnRlcmFjdGlvblNlcXVlbmNlKGNvbnN0IFN0cmluZyYgaGFuZGxlLCBj
b25zCiAKICAgICAvLyBQYXJzZSBhbmQgdmFsaWRhdGUgQXV0b21hdGlvbiBwcm90b2NvbCBhcmd1
bWVudHMuIEJ5IHRoaXMgcG9pbnQsIHRoZSBkcml2ZXIgaGFzCiAgICAgLy8gYWxyZWFkeSBwZXJm
b3JtZWQgdGhlIHN0ZXBzIGluIMKnMTcuMyBQcm9jZXNzaW5nIEFjdGlvbnMgUmVxdWVzdHMuCi0g
ICAgaWYgKCFpbnB1dFNvdXJjZXMubGVuZ3RoKCkpCisgICAgaWYgKCFpbnB1dFNvdXJjZXMtPmxl
bmd0aCgpKQogICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUl9BTkRfREVU
QUlMUyhJbnZhbGlkUGFyYW1ldGVyLCAiVGhlIHBhcmFtZXRlciAnaW5wdXRTb3VyY2VzJyB3YXMg
bm90IGZvdW5kIG9yIGVtcHR5LiIpOwogCi0gICAgZm9yIChjb25zdCBhdXRvJiBpbnB1dFNvdXJj
ZSA6IGlucHV0U291cmNlcykgewotICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBpbnB1dFNv
dXJjZU9iamVjdDsKLSAgICAgICAgaWYgKCFpbnB1dFNvdXJjZS0+YXNPYmplY3QoaW5wdXRTb3Vy
Y2VPYmplY3QpKQorICAgIGZvciAoY29uc3QgYXV0byYgaW5wdXRTb3VyY2VWYWx1ZSA6IGlucHV0
U291cmNlcy5nZXQoKSkgeworICAgICAgICBhdXRvIGlucHV0U291cmNlT2JqZWN0ID0gaW5wdXRT
b3VyY2VWYWx1ZS0+YXNPYmplY3QoKTsKKyAgICAgICAgaWYgKCFpbnB1dFNvdXJjZU9iamVjdCkK
ICAgICAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxT
KEludmFsaWRQYXJhbWV0ZXIsICJBbiBpbnB1dCBzb3VyY2UgaW4gdGhlICdpbnB1dFNvdXJjZXMn
IHBhcmFtZXRlciB3YXMgaW52YWxpZC4iKTsKLSAgICAgICAgCi0gICAgICAgIFN0cmluZyBzb3Vy
Y2VJZDsKLSAgICAgICAgaWYgKCFpbnB1dFNvdXJjZU9iamVjdC0+Z2V0U3RyaW5nKCJzb3VyY2VJ
ZCJfcywgc291cmNlSWQpKQorCisgICAgICAgIGF1dG8gc291cmNlSWQgPSBpbnB1dFNvdXJjZU9i
amVjdC0+Z2V0U3RyaW5nKCJzb3VyY2VJZCJfcyk7CisgICAgICAgIGlmICghc291cmNlSWQpCiAg
ICAgICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhJ
bnZhbGlkUGFyYW1ldGVyLCAiQW4gaW5wdXQgc291cmNlIGluIHRoZSAnaW5wdXRTb3VyY2VzJyBw
YXJhbWV0ZXIgaXMgbWlzc2luZyBhICdzb3VyY2VJZCcuIik7CiAKLSAgICAgICAgU3RyaW5nIHNv
dXJjZVR5cGU7Ci0gICAgICAgIGlmICghaW5wdXRTb3VyY2VPYmplY3QtPmdldFN0cmluZygic291
cmNlVHlwZSJfcywgc291cmNlVHlwZSkpCisgICAgICAgIGF1dG8gc291cmNlVHlwZSA9IGlucHV0
U291cmNlT2JqZWN0LT5nZXRTdHJpbmcoInNvdXJjZVR5cGUiX3MpOworICAgICAgICBpZiAoIXNv
dXJjZVR5cGUpCiAgICAgICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUl9B
TkRfREVUQUlMUyhJbnZhbGlkUGFyYW1ldGVyLCAiQW4gaW5wdXQgc291cmNlIGluIHRoZSAnaW5w
dXRTb3VyY2VzJyBwYXJhbWV0ZXIgaXMgbWlzc2luZyBhICdzb3VyY2VUeXBlJy4iKTsKIAogICAg
ICAgICBhdXRvIHBhcnNlZElucHV0U291cmNlVHlwZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1
dG9tYXRpb25IZWxwZXJzOjpwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90
b2NvbDo6QXV0b21hdGlvbjo6SW5wdXRTb3VyY2VUeXBlPihzb3VyY2VUeXBlKTsKQEAgLTE4ODEs
MjggKzE4ODAsMjggQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6cGVyZm9ybUludGVyYWN0
aW9uU2VxdWVuY2UoY29uc3QgU3RyaW5nJiBoYW5kbGUsIGNvbnMKIAogICAgIFZlY3RvcjxTaW11
bGF0ZWRJbnB1dEtleUZyYW1lPiBrZXlGcmFtZXM7CiAKLSAgICBpZiAoIXN0ZXBzLmxlbmd0aCgp
KQorICAgIGlmICghc3RlcHMtPmxlbmd0aCgpKQogICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJF
REVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhJbnZhbGlkUGFyYW1ldGVyLCAiVGhlIHBhcmFtZXRl
ciAnc3RlcHMnIHdhcyBub3QgZm91bmQgb3IgZW1wdHkuIik7CiAKLSAgICBmb3IgKGNvbnN0IGF1
dG8mIHN0ZXAgOiBzdGVwcykgewotICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBzdGVwT2Jq
ZWN0OwotICAgICAgICBpZiAoIXN0ZXAtPmFzT2JqZWN0KHN0ZXBPYmplY3QpKQorICAgIGZvciAo
Y29uc3QgYXV0byYgc3RlcFZhbHVlIDogc3RlcHMuZ2V0KCkpIHsKKyAgICAgICAgYXV0byBzdGVw
T2JqZWN0ID0gc3RlcFZhbHVlLT5hc09iamVjdCgpOworICAgICAgICBpZiAoIXN0ZXBPYmplY3Qp
CiAgICAgICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlM
UyhJbnZhbGlkUGFyYW1ldGVyLCAiQSBzdGVwIGluIHRoZSAnc3RlcHMnIHBhcmFtZXRlciB3YXMg
bm90IGFuIG9iamVjdC4iKTsKIAotICAgICAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IHN0ZXBTdGF0
ZXM7Ci0gICAgICAgIGlmICghc3RlcE9iamVjdC0+Z2V0QXJyYXkoInN0YXRlcyJfcywgc3RlcFN0
YXRlcykpCisgICAgICAgIGF1dG8gc3RlcFN0YXRlcyA9IHN0ZXBPYmplY3QtPmdldEFycmF5KCJz
dGF0ZXMiX3MpOworICAgICAgICBpZiAoIXN0ZXBTdGF0ZXMpCiAgICAgICAgICAgICBBU1lOQ19G
QUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhJbnZhbGlkUGFyYW1ldGVyLCAi
QSBzdGVwIGlzIG1pc3NpbmcgdGhlICdzdGF0ZXMnIHByb3BlcnR5LiIpOwogCiAgICAgICAgIFZl
Y3RvcjxTaW11bGF0ZWRJbnB1dEtleUZyYW1lOjpTdGF0ZUVudHJ5PiBlbnRyaWVzOwogICAgICAg
ICBlbnRyaWVzLnJlc2VydmVDYXBhY2l0eShzdGVwU3RhdGVzLT5sZW5ndGgoKSk7CiAKLSAgICAg
ICAgZm9yIChjb25zdCBhdXRvJiBzdGF0ZSA6ICpzdGVwU3RhdGVzKSB7Ci0gICAgICAgICAgICBS
ZWZQdHI8SlNPTjo6T2JqZWN0PiBzdGF0ZU9iamVjdDsKLSAgICAgICAgICAgIGlmICghc3RhdGUt
PmFzT2JqZWN0KHN0YXRlT2JqZWN0KSkKKyAgICAgICAgZm9yIChjb25zdCBhdXRvJiBzdGF0ZVZh
bHVlIDogKnN0ZXBTdGF0ZXMpIHsKKyAgICAgICAgICAgIGF1dG8gc3RhdGVPYmplY3QgPSBzdGF0
ZVZhbHVlLT5hc09iamVjdCgpOworICAgICAgICAgICAgaWYgKCFzdGF0ZU9iamVjdCkKICAgICAg
ICAgICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhJ
bnZhbGlkUGFyYW1ldGVyLCAiRW5jb3VudGVyZWQgYSBub24tb2JqZWN0IHN0ZXAgc3RhdGUuIik7
CiAKLSAgICAgICAgICAgIFN0cmluZyBzb3VyY2VJZDsKLSAgICAgICAgICAgIGlmICghc3RhdGVP
YmplY3QtPmdldFN0cmluZygic291cmNlSWQiX3MsIHNvdXJjZUlkKSkKKyAgICAgICAgICAgIGF1
dG8gc291cmNlSWQgPSBzdGF0ZU9iamVjdC0+Z2V0U3RyaW5nKCJzb3VyY2VJZCJfcyk7CisgICAg
ICAgICAgICBpZiAoIXNvdXJjZUlkKQogICAgICAgICAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9Q
UkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxTKEludmFsaWRQYXJhbWV0ZXIsICJTdGVwIHN0YXRl
IGxhY2tzIHJlcXVpcmVkICdzb3VyY2VJZCcgcHJvcGVydHkuIik7CiAKICAgICAgICAgICAgIGlm
ICghc291cmNlSWRUb0lucHV0U291cmNlTWFwLmNvbnRhaW5zKHNvdXJjZUlkKSkKQEAgLTE5MTEs
MTcgKzE5MTAsMTYgQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6cGVyZm9ybUludGVyYWN0
aW9uU2VxdWVuY2UoY29uc3QgU3RyaW5nJiBoYW5kbGUsIGNvbnMKICAgICAgICAgICAgIFNpbXVs
YXRlZElucHV0U291cmNlJiBpbnB1dFNvdXJjZSA9ICpzb3VyY2VJZFRvSW5wdXRTb3VyY2VNYXAu
Z2V0KHNvdXJjZUlkKTsKICAgICAgICAgICAgIFNpbXVsYXRlZElucHV0U291cmNlU3RhdGUgc291
cmNlU3RhdGUgeyB9OwogCi0gICAgICAgICAgICBTdHJpbmcgcHJlc3NlZENoYXJLZXlTdHJpbmc7
Ci0gICAgICAgICAgICBpZiAoc3RhdGVPYmplY3QtPmdldFN0cmluZygicHJlc3NlZENoYXJLZXki
X3MsIHByZXNzZWRDaGFyS2V5U3RyaW5nKSkKKyAgICAgICAgICAgIGF1dG8gcHJlc3NlZENoYXJL
ZXlTdHJpbmcgPSBzdGF0ZU9iamVjdC0+Z2V0U3RyaW5nKCJwcmVzc2VkQ2hhcktleSJfcyk7Cisg
ICAgICAgICAgICBpZiAoISFwcmVzc2VkQ2hhcktleVN0cmluZykKICAgICAgICAgICAgICAgICBz
b3VyY2VTdGF0ZS5wcmVzc2VkQ2hhcktleSA9IHByZXNzZWRDaGFyS2V5U3RyaW5nLmNoYXJhY3Rl
ckF0KDApOwogCi0gICAgICAgICAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IHByZXNzZWRWaXJ0dWFs
S2V5c0FycmF5OwotICAgICAgICAgICAgaWYgKHN0YXRlT2JqZWN0LT5nZXRBcnJheSgicHJlc3Nl
ZFZpcnR1YWxLZXlzIl9zLCBwcmVzc2VkVmlydHVhbEtleXNBcnJheSkpIHsKKyAgICAgICAgICAg
IGlmIChhdXRvIHByZXNzZWRWaXJ0dWFsS2V5c0FycmF5ID0gc3RhdGVPYmplY3QtPmdldEFycmF5
KCJwcmVzc2VkVmlydHVhbEtleXMiX3MpKSB7CiAgICAgICAgICAgICAgICAgVmlydHVhbEtleVNl
dCBwcmVzc2VkVmlydHVhbEtleXMgeyB9OwogCiAgICAgICAgICAgICAgICAgZm9yIChhdXRvIGl0
ID0gcHJlc3NlZFZpcnR1YWxLZXlzQXJyYXktPmJlZ2luKCk7IGl0ICE9IHByZXNzZWRWaXJ0dWFs
S2V5c0FycmF5LT5lbmQoKTsgKytpdCkgewotICAgICAgICAgICAgICAgICAgICBTdHJpbmcgcHJl
c3NlZFZpcnR1YWxLZXlTdHJpbmc7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghKCppdCktPmFz
U3RyaW5nKHByZXNzZWRWaXJ0dWFsS2V5U3RyaW5nKSkKKyAgICAgICAgICAgICAgICAgICAgYXV0
byBwcmVzc2VkVmlydHVhbEtleVN0cmluZyA9ICgqaXQpLT5hc1N0cmluZygpOworICAgICAgICAg
ICAgICAgICAgICBpZiAoIXByZXNzZWRWaXJ0dWFsS2V5U3RyaW5nKQogICAgICAgICAgICAgICAg
ICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoSW52
YWxpZFBhcmFtZXRlciwgIkVuY291bnRlcmVkIGEgbm9uLXN0cmluZyB2aXJ0dWFsIGtleSB2YWx1
ZS4iKTsKIAogICAgICAgICAgICAgICAgICAgICBPcHRpb25hbDxWaXJ0dWFsS2V5PiBwYXJzZWRW
aXJ0dWFsS2V5ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbkhlbHBlcnM6OnBhcnNl
RW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpWaXJ0
dWFsS2V5PihwcmVzc2VkVmlydHVhbEtleVN0cmluZyk7CkBAIC0xOTM0LDMzICsxOTMyLDMyIEBA
IHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OnBlcmZvcm1JbnRlcmFjdGlvblNlcXVlbmNlKGNv
bnN0IFN0cmluZyYgaGFuZGxlLCBjb25zCiAgICAgICAgICAgICAgICAgc291cmNlU3RhdGUucHJl
c3NlZFZpcnR1YWxLZXlzID0gcHJlc3NlZFZpcnR1YWxLZXlzOwogICAgICAgICAgICAgfQogCi0g
ICAgICAgICAgICBTdHJpbmcgcHJlc3NlZEJ1dHRvblN0cmluZzsKLSAgICAgICAgICAgIGlmIChz
dGF0ZU9iamVjdC0+Z2V0U3RyaW5nKCJwcmVzc2VkQnV0dG9uIl9zLCBwcmVzc2VkQnV0dG9uU3Ry
aW5nKSkgeworICAgICAgICAgICAgYXV0byBwcmVzc2VkQnV0dG9uU3RyaW5nID0gc3RhdGVPYmpl
Y3QtPmdldFN0cmluZygicHJlc3NlZEJ1dHRvbiJfcyk7CisgICAgICAgICAgICBpZiAoISFwcmVz
c2VkQnV0dG9uU3RyaW5nKSB7CiAgICAgICAgICAgICAgICAgYXV0byBwcm90b2NvbEJ1dHRvbiA9
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb25IZWxwZXJzOjpwYXJzZUVudW1WYWx1ZUZy
b21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6TW91c2VCdXR0b24+KHBy
ZXNzZWRCdXR0b25TdHJpbmcpOwogICAgICAgICAgICAgICAgIHNvdXJjZVN0YXRlLnByZXNzZWRN
b3VzZUJ1dHRvbiA9IHByb3RvY29sQnV0dG9uLnZhbHVlT3IoTW91c2VCdXR0b246Ok5vbmUpOwog
ICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBTdHJpbmcgb3JpZ2luU3RyaW5nOwotICAgICAg
ICAgICAgaWYgKHN0YXRlT2JqZWN0LT5nZXRTdHJpbmcoIm9yaWdpbiJfcywgb3JpZ2luU3RyaW5n
KSkKKyAgICAgICAgICAgIGF1dG8gb3JpZ2luU3RyaW5nID0gc3RhdGVPYmplY3QtPmdldFN0cmlu
Zygib3JpZ2luIl9zKTsKKyAgICAgICAgICAgIGlmICghIW9yaWdpblN0cmluZykKICAgICAgICAg
ICAgICAgICBzb3VyY2VTdGF0ZS5vcmlnaW4gPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0
aW9uSGVscGVyczo6cGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkF1dG9tYXRpb246Ok1vdXNlTW92ZU9yaWdpbj4ob3JpZ2luU3RyaW5nKTsKIAogICAgICAgICAg
ICAgaWYgKHNvdXJjZVN0YXRlLm9yaWdpbiAmJiBzb3VyY2VTdGF0ZS5vcmlnaW4udmFsdWUoKSA9
PSBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpNb3VzZU1vdmVPcmlnaW46OkVsZW1l
bnQpIHsKLSAgICAgICAgICAgICAgICBTdHJpbmcgbm9kZUhhbmRsZVN0cmluZzsKLSAgICAgICAg
ICAgICAgICBpZiAoIXN0YXRlT2JqZWN0LT5nZXRTdHJpbmcoIm5vZGVIYW5kbGUiX3MsIG5vZGVI
YW5kbGVTdHJpbmcpKQorICAgICAgICAgICAgICAgIGF1dG8gbm9kZUhhbmRsZVN0cmluZyA9IHN0
YXRlT2JqZWN0LT5nZXRTdHJpbmcoIm5vZGVIYW5kbGUiX3MpOworICAgICAgICAgICAgICAgIGlm
ICghbm9kZUhhbmRsZVN0cmluZykKICAgICAgICAgICAgICAgICAgICAgQVNZTkNfRkFJTF9XSVRI
X1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoSW52YWxpZFBhcmFtZXRlciwgIk5vZGUgaGFu
ZGxlIG5vdCBwcm92aWRlZCBmb3IgJ0VsZW1lbnQnIG9yaWdpbiIpOwogICAgICAgICAgICAgICAg
IHNvdXJjZVN0YXRlLm5vZGVIYW5kbGUgPSBub2RlSGFuZGxlU3RyaW5nOwogICAgICAgICAgICAg
fQogCi0gICAgICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBsb2NhdGlvbk9iamVjdDsKLSAg
ICAgICAgICAgIGlmIChzdGF0ZU9iamVjdC0+Z2V0T2JqZWN0KCJsb2NhdGlvbiJfcywgbG9jYXRp
b25PYmplY3QpKSB7Ci0gICAgICAgICAgICAgICAgaW50IHggPSAwLCB5ID0gMDsKLSAgICAgICAg
ICAgICAgICBpZiAobG9jYXRpb25PYmplY3QtPmdldEludGVnZXIoIngiX3MsIHgpICYmIGxvY2F0
aW9uT2JqZWN0LT5nZXRJbnRlZ2VyKCJ5Il9zLCB5KSkKLSAgICAgICAgICAgICAgICAgICAgc291
cmNlU3RhdGUubG9jYXRpb24gPSBXZWJDb3JlOjpJbnRQb2ludCh4LCB5KTsKKyAgICAgICAgICAg
IGlmIChhdXRvIGxvY2F0aW9uT2JqZWN0ID0gc3RhdGVPYmplY3QtPmdldE9iamVjdCgibG9jYXRp
b24iX3MpKSB7CisgICAgICAgICAgICAgICAgYXV0byB4ID0gbG9jYXRpb25PYmplY3QtPmdldElu
dGVnZXIoIngiX3MpOworICAgICAgICAgICAgICAgIGF1dG8geSA9IGxvY2F0aW9uT2JqZWN0LT5n
ZXRJbnRlZ2VyKCJ5Il9zKTsKKyAgICAgICAgICAgICAgICBpZiAoeCAmJiB5KQorICAgICAgICAg
ICAgICAgICAgICBzb3VyY2VTdGF0ZS5sb2NhdGlvbiA9IFdlYkNvcmU6OkludFBvaW50KCp4LCAq
eSk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGludCBwYXJzZWREdXJhdGlvbjsKLSAg
ICAgICAgICAgIGlmIChzdGF0ZU9iamVjdC0+Z2V0SW50ZWdlcigiZHVyYXRpb24iX3MsIHBhcnNl
ZER1cmF0aW9uKSkKLSAgICAgICAgICAgICAgICBzb3VyY2VTdGF0ZS5kdXJhdGlvbiA9IFNlY29u
ZHM6OmZyb21NaWxsaXNlY29uZHMocGFyc2VkRHVyYXRpb24pOworICAgICAgICAgICAgaWYgKGF1
dG8gZHVyYXRpb24gPSBzdGF0ZU9iamVjdC0+Z2V0SW50ZWdlcigiZHVyYXRpb24iX3MpKQorICAg
ICAgICAgICAgICAgIHNvdXJjZVN0YXRlLmR1cmF0aW9uID0gU2Vjb25kczo6ZnJvbU1pbGxpc2Vj
b25kcygqZHVyYXRpb24pOwogCiAgICAgICAgICAgICBlbnRyaWVzLnVuY2hlY2tlZEFwcGVuZChz
dGQ6OnBhaXI8U2ltdWxhdGVkSW5wdXRTb3VyY2UmLCBTaW11bGF0ZWRJbnB1dFNvdXJjZVN0YXRl
PiB7IGlucHV0U291cmNlLCBzb3VyY2VTdGF0ZSB9KTsKICAgICAgICAgfQpAQCAtMTk4NCw3ICsx
OTgxLDcgQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6cGVyZm9ybUludGVyYWN0aW9uU2Vx
dWVuY2UoY29uc3QgU3RyaW5nJiBoYW5kbGUsIGNvbnMKICNlbmRpZiAvLyBFTkFCTEUoV0VCRFJJ
VkVSX0FDVElPTlNfQVBJKQogfQogCi12b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpjYW5jZWxJ
bnRlcmFjdGlvblNlcXVlbmNlKGNvbnN0IFN0cmluZyYgaGFuZGxlLCBjb25zdCBTdHJpbmcqIG9w
dGlvbmFsRnJhbWVIYW5kbGUsIFJlZjxDYW5jZWxJbnRlcmFjdGlvblNlcXVlbmNlQ2FsbGJhY2s+
JiYgY2FsbGJhY2spCit2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpjYW5jZWxJbnRlcmFjdGlv
blNlcXVlbmNlKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5n
Q29udGV4dEhhbmRsZSYgaGFuZGxlLCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0
aW9uOjpGcmFtZUhhbmRsZSYgZnJhbWVIYW5kbGUsIFJlZjxDYW5jZWxJbnRlcmFjdGlvblNlcXVl
bmNlQ2FsbGJhY2s+JiYgY2FsbGJhY2spCiB7CiAgICAgLy8gVGhpcyBjb21tYW5kIGltcGxlbWVu
dHMgV2ViS2l0IHN1cHBvcnQgZm9yIMKnMTcuNiBSZWxlYXNlIEFjdGlvbnMuCiAKQEAgLTE5OTYs
NyArMTk5Myw3IEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OmNhbmNlbEludGVyYWN0aW9u
U2VxdWVuY2UoY29uc3QgU3RyaW5nJiBoYW5kbGUsIGNvbnN0CiAgICAgICAgIEFTWU5DX0ZBSUxf
V0lUSF9QUkVERUZJTkVEX0VSUk9SKFdpbmRvd05vdEZvdW5kKTsKIAogICAgIGJvb2wgZnJhbWVO
b3RGb3VuZCA9IGZhbHNlOwotICAgIGF1dG8gZnJhbWVJRCA9IHdlYkZyYW1lSURGb3JIYW5kbGUo
b3B0aW9uYWxGcmFtZUhhbmRsZSA/ICpvcHRpb25hbEZyYW1lSGFuZGxlIDogZW1wdHlTdHJpbmco
KSwgZnJhbWVOb3RGb3VuZCk7CisgICAgYXV0byBmcmFtZUlEID0gd2ViRnJhbWVJREZvckhhbmRs
ZShmcmFtZUhhbmRsZSwgZnJhbWVOb3RGb3VuZCk7CiAgICAgaWYgKGZyYW1lTm90Rm91bmQpCiAg
ICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SKEZyYW1lTm90Rm91bmQpOwog
CkBAIC0yMDEzLDE5ICsyMDEwLDE4IEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OmNhbmNl
bEludGVyYWN0aW9uU2VxdWVuY2UoY29uc3QgU3RyaW5nJiBoYW5kbGUsIGNvbnN0CiAjZW5kaWYg
Ly8gRU5BQkxFKFdFQkRSSVZFUl9BQ1RJT05TX0FQSSkKIH0KIAotdm9pZCBXZWJBdXRvbWF0aW9u
U2Vzc2lvbjo6dGFrZVNjcmVlbnNob3QoY29uc3QgU3RyaW5nJiBoYW5kbGUsIGNvbnN0IFN0cmlu
Zyogb3B0aW9uYWxGcmFtZUhhbmRsZSwgY29uc3QgU3RyaW5nKiBvcHRpb25hbE5vZGVIYW5kbGUs
IGNvbnN0IGJvb2wqIG9wdGlvbmFsU2Nyb2xsSW50b1ZpZXdJZk5lZWRlZCwgY29uc3QgYm9vbCog
b3B0aW9uYWxDbGlwVG9WaWV3cG9ydCwgUmVmPFRha2VTY3JlZW5zaG90Q2FsbGJhY2s+JiYgY2Fs
bGJhY2spCit2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjp0YWtlU2NyZWVuc2hvdChjb25zdCBJ
bnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRIYW5kbGUmIGhh
bmRsZSwgY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6RnJhbWVIYW5kbGUm
IGZyYW1lSGFuZGxlLCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpOb2Rl
SGFuZGxlJiBub2RlSGFuZGxlLCBPcHRpb25hbDxib29sPiYmIG9wdGlvbmFsU2Nyb2xsSW50b1Zp
ZXdJZk5lZWRlZCwgT3B0aW9uYWw8Ym9vbD4mJiBvcHRpb25hbENsaXBUb1ZpZXdwb3J0LCBSZWY8
VGFrZVNjcmVlbnNob3RDYWxsYmFjaz4mJiBjYWxsYmFjaykKIHsKICAgICBXZWJQYWdlUHJveHkq
IHBhZ2UgPSB3ZWJQYWdlUHJveHlGb3JIYW5kbGUoaGFuZGxlKTsKICAgICBpZiAoIXBhZ2UpCiAg
ICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SKFdpbmRvd05vdEZvdW5kKTsK
IAogICAgIGJvb2wgZnJhbWVOb3RGb3VuZCA9IGZhbHNlOwotICAgIGF1dG8gZnJhbWVJRCA9IHdl
YkZyYW1lSURGb3JIYW5kbGUob3B0aW9uYWxGcmFtZUhhbmRsZSA/ICpvcHRpb25hbEZyYW1lSGFu
ZGxlIDogZW1wdHlTdHJpbmcoKSwgZnJhbWVOb3RGb3VuZCk7CisgICAgYXV0byBmcmFtZUlEID0g
d2ViRnJhbWVJREZvckhhbmRsZShmcmFtZUhhbmRsZSwgZnJhbWVOb3RGb3VuZCk7CiAgICAgaWYg
KGZyYW1lTm90Rm91bmQpCiAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9S
KEZyYW1lTm90Rm91bmQpOwogCiAgICAgYm9vbCBzY3JvbGxJbnRvVmlld0lmTmVlZGVkID0gb3B0
aW9uYWxTY3JvbGxJbnRvVmlld0lmTmVlZGVkID8gKm9wdGlvbmFsU2Nyb2xsSW50b1ZpZXdJZk5l
ZWRlZCA6IGZhbHNlOwotICAgIFN0cmluZyBub2RlSGFuZGxlID0gb3B0aW9uYWxOb2RlSGFuZGxl
ID8gKm9wdGlvbmFsTm9kZUhhbmRsZSA6IGVtcHR5U3RyaW5nKCk7CiAgICAgYm9vbCBjbGlwVG9W
aWV3cG9ydCA9IG9wdGlvbmFsQ2xpcFRvVmlld3BvcnQgPyAqb3B0aW9uYWxDbGlwVG9WaWV3cG9y
dCA6IGZhbHNlOwogCiAjaWYgUExBVEZPUk0oR1RLKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbi5oIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbi5oCmluZGV4IDM2
Mjc2NjAzOTVjYjVmNDRlNzdhOWY4NjFkNDJlOTcxZGJhMWJiZmMuLjhkOTA4OTJhNGIxMzQyNjRh
NGU4NWJlNGY2NWRmYTIwZmMwMTNhMmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uaAorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmgKQEAgLTEzNSwxMCAr
MTM1LDEwIEBAIHB1YmxpYzoKIAogI2lmIEVOQUJMRShSRU1PVEVfSU5TUEVDVE9SKQogICAgIC8v
IEluc3BlY3Rvcjo6UmVtb3RlQXV0b21hdGlvblRhcmdldCBBUEkKLSAgICBTdHJpbmcgbmFtZSgp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fc2Vzc2lvbklkZW50aWZpZXI7IH0KLSAgICB2b2lk
IGRpc3BhdGNoTWVzc2FnZUZyb21SZW1vdGUoY29uc3QgU3RyaW5nJiBtZXNzYWdlKSBvdmVycmlk
ZTsKLSAgICB2b2lkIGNvbm5lY3QoSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWwmLCBib29sIGlz
QXV0b21hdGljQ29ubmVjdGlvbiA9IGZhbHNlLCBib29sIGltbWVkaWF0ZWx5UGF1c2UgPSBmYWxz
ZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkaXNjb25uZWN0KEluc3BlY3Rvcjo6RnJvbnRlbmRDaGFu
bmVsJikgb3ZlcnJpZGU7CisgICAgU3RyaW5nIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX3Nlc3Np
b25JZGVudGlmaWVyOyB9CisgICAgdm9pZCBkaXNwYXRjaE1lc3NhZ2VGcm9tUmVtb3RlKGNvbnN0
IFN0cmluZyYgbWVzc2FnZSk7CisgICAgdm9pZCBjb25uZWN0KEluc3BlY3Rvcjo6RnJvbnRlbmRD
aGFubmVsJiwgYm9vbCBpc0F1dG9tYXRpY0Nvbm5lY3Rpb24gPSBmYWxzZSwgYm9vbCBpbW1lZGlh
dGVseVBhdXNlID0gZmFsc2UpOworICAgIHZvaWQgZGlzY29ubmVjdChJbnNwZWN0b3I6OkZyb250
ZW5kQ2hhbm5lbCYpOwogI2VuZGlmCiAgICAgdm9pZCB0ZXJtaW5hdGUoKTsKIApAQCAtMTQ2LDE1
ICsxNDYsMTUgQEAgcHVibGljOgogCiAgICAgLy8gU2ltdWxhdGVkSW5wdXREaXNwYXRjaGVyOjpD
bGllbnQgQVBJCiAjaWYgRU5BQkxFKFdFQkRSSVZFUl9NT1VTRV9JTlRFUkFDVElPTlMpCi0gICAg
dm9pZCBzaW11bGF0ZU1vdXNlSW50ZXJhY3Rpb24oV2ViUGFnZVByb3h5JiwgTW91c2VJbnRlcmFj
dGlvbiwgTW91c2VCdXR0b24sIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBsb2NhdGlvbkluVmll
dywgQXV0b21hdGlvbkNvbXBsZXRpb25IYW5kbGVyJiYpIGZpbmFsOworICAgIHZvaWQgc2ltdWxh
dGVNb3VzZUludGVyYWN0aW9uKFdlYlBhZ2VQcm94eSYsIE1vdXNlSW50ZXJhY3Rpb24sIE1vdXNl
QnV0dG9uLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgbG9jYXRpb25JblZpZXcsIEF1dG9tYXRp
b25Db21wbGV0aW9uSGFuZGxlciYmKTsKICNlbmRpZgogI2lmIEVOQUJMRShXRUJEUklWRVJfVE9V
Q0hfSU5URVJBQ1RJT05TKQotICAgIHZvaWQgc2ltdWxhdGVUb3VjaEludGVyYWN0aW9uKFdlYlBh
Z2VQcm94eSYsIFRvdWNoSW50ZXJhY3Rpb24sIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBsb2Nh
dGlvbkluVmlldywgT3B0aW9uYWw8U2Vjb25kcz4gZHVyYXRpb24sIEF1dG9tYXRpb25Db21wbGV0
aW9uSGFuZGxlciYmKSBmaW5hbDsKKyAgICB2b2lkIHNpbXVsYXRlVG91Y2hJbnRlcmFjdGlvbihX
ZWJQYWdlUHJveHkmLCBUb3VjaEludGVyYWN0aW9uLCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYg
bG9jYXRpb25JblZpZXcsIE9wdGlvbmFsPFNlY29uZHM+IGR1cmF0aW9uLCBBdXRvbWF0aW9uQ29t
cGxldGlvbkhhbmRsZXImJik7CiAjZW5kaWYKICNpZiBFTkFCTEUoV0VCRFJJVkVSX0tFWUJPQVJE
X0lOVEVSQUNUSU9OUykKLSAgICB2b2lkIHNpbXVsYXRlS2V5Ym9hcmRJbnRlcmFjdGlvbihXZWJQ
YWdlUHJveHkmLCBLZXlib2FyZEludGVyYWN0aW9uLCBXVEY6OlZhcmlhbnQ8VmlydHVhbEtleSwg
Q2hhcktleT4mJiwgQXV0b21hdGlvbkNvbXBsZXRpb25IYW5kbGVyJiYpIGZpbmFsOworICAgIHZv
aWQgc2ltdWxhdGVLZXlib2FyZEludGVyYWN0aW9uKFdlYlBhZ2VQcm94eSYsIEtleWJvYXJkSW50
ZXJhY3Rpb24sIFdURjo6VmFyaWFudDxWaXJ0dWFsS2V5LCBDaGFyS2V5PiYmLCBBdXRvbWF0aW9u
Q29tcGxldGlvbkhhbmRsZXImJik7CiAjZW5kaWYKLSAgICB2b2lkIHZpZXdwb3J0SW5WaWV3Q2Vu
dGVyUG9pbnRPZkVsZW1lbnQoV2ViUGFnZVByb3h5JiwgT3B0aW9uYWw8V2ViQ29yZTo6RnJhbWVJ
ZGVudGlmaWVyPiwgY29uc3QgU3RyaW5nJiBub2RlSGFuZGxlLCBGdW5jdGlvbjx2b2lkIChPcHRp
b25hbDxXZWJDb3JlOjpJbnRQb2ludD4sIE9wdGlvbmFsPEF1dG9tYXRpb25Db21tYW5kRXJyb3I+
KT4mJikgZmluYWw7CisgICAgdm9pZCB2aWV3cG9ydEluVmlld0NlbnRlclBvaW50T2ZFbGVtZW50
KFdlYlBhZ2VQcm94eSYsIE9wdGlvbmFsPFdlYkNvcmU6OkZyYW1lSWRlbnRpZmllcj4sIGNvbnN0
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246Ok5vZGVIYW5kbGUmLCBGdW5jdGlvbjx2
b2lkKE9wdGlvbmFsPFdlYkNvcmU6OkludFBvaW50PiwgT3B0aW9uYWw8QXV0b21hdGlvbkNvbW1h
bmRFcnJvcj4pPiYmKTsKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJEUklWRVJfQUNUSU9OU19BUEkp
CiAKQEAgLTE2Myw0NSArMTYzLDQ1IEBAIHB1YmxpYzoKICAgICAvLyBhbmQgdGhlIC0tcGxhdGZv
cm0gYXJndW1lbnQgcGFzc2VkIHRvIHRoZSBwcm90b2NvbCBiaW5kaW5ncyBnZW5lcmF0b3IuCiAK
ICAgICAvLyBQbGF0Zm9ybTogR2VuZXJpYwotICAgIHZvaWQgZ2V0QnJvd3NpbmdDb250ZXh0cyhS
ZWY8R2V0QnJvd3NpbmdDb250ZXh0c0NhbGxiYWNrPiYmKSBmaW5hbDsKLSAgICB2b2lkIGdldEJy
b3dzaW5nQ29udGV4dChjb25zdCBTdHJpbmcmLCBSZWY8R2V0QnJvd3NpbmdDb250ZXh0Q2FsbGJh
Y2s+JiYpIGZpbmFsOwotICAgIHZvaWQgY3JlYXRlQnJvd3NpbmdDb250ZXh0KGNvbnN0IFN0cmlu
Zyogb3B0aW9uYWxQcmVzZW50YXRpb25IaW50LCBSZWY8Q3JlYXRlQnJvd3NpbmdDb250ZXh0Q2Fs
bGJhY2s+JiYpIGZpbmFsOwotICAgIHZvaWQgY2xvc2VCcm93c2luZ0NvbnRleHQoSW5zcGVjdG9y
OjpFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYpIGZpbmFsOwotICAgIHZvaWQgc3dpdGNoVG9C
cm93c2luZ0NvbnRleHQoY29uc3QgU3RyaW5nJiBicm93c2luZ0NvbnRleHRIYW5kbGUsIGNvbnN0
IFN0cmluZyogb3B0aW9uYWxGcmFtZUhhbmRsZSwgUmVmPFN3aXRjaFRvQnJvd3NpbmdDb250ZXh0
Q2FsbGJhY2s+JiYpIGZpbmFsOwotICAgIHZvaWQgc2V0V2luZG93RnJhbWVPZkJyb3dzaW5nQ29u
dGV4dChjb25zdCBTdHJpbmcmIGhhbmRsZSwgY29uc3QgSlNPTjo6T2JqZWN0KiBvcmlnaW4sIGNv
bnN0IEpTT046Ok9iamVjdCogc2l6ZSwgUmVmPFNldFdpbmRvd0ZyYW1lT2ZCcm93c2luZ0NvbnRl
eHRDYWxsYmFjaz4mJikgZmluYWw7Ci0gICAgdm9pZCBtYXhpbWl6ZVdpbmRvd09mQnJvd3NpbmdD
b250ZXh0KGNvbnN0IFN0cmluZyYgaGFuZGxlLCBSZWY8TWF4aW1pemVXaW5kb3dPZkJyb3dzaW5n
Q29udGV4dENhbGxiYWNrPiYmKSBmaW5hbDsKLSAgICB2b2lkIGhpZGVXaW5kb3dPZkJyb3dzaW5n
Q29udGV4dChjb25zdCBTdHJpbmcmIGhhbmRsZSwgUmVmPEhpZGVXaW5kb3dPZkJyb3dzaW5nQ29u
dGV4dENhbGxiYWNrPiYmKSBmaW5hbDsKLSAgICB2b2lkIG5hdmlnYXRlQnJvd3NpbmdDb250ZXh0
KGNvbnN0IFN0cmluZyYgaGFuZGxlLCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nKiBv
cHRpb25hbFBhZ2VMb2FkU3RyYXRlZ3lTdHJpbmcsIGNvbnN0IGRvdWJsZSogb3B0aW9uYWxQYWdl
TG9hZFRpbWVvdXQsIFJlZjxOYXZpZ2F0ZUJyb3dzaW5nQ29udGV4dENhbGxiYWNrPiYmKSBvdmVy
cmlkZTsKLSAgICB2b2lkIGdvQmFja0luQnJvd3NpbmdDb250ZXh0KGNvbnN0IFN0cmluZyYsIGNv
bnN0IFN0cmluZyogb3B0aW9uYWxQYWdlTG9hZFN0cmF0ZWd5U3RyaW5nLCBjb25zdCBkb3VibGUq
IG9wdGlvbmFsUGFnZUxvYWRUaW1lb3V0LCBSZWY8R29CYWNrSW5Ccm93c2luZ0NvbnRleHRDYWxs
YmFjaz4mJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBnb0ZvcndhcmRJbkJyb3dzaW5nQ29udGV4dChj
b25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsUGFnZUxvYWRTdHJhdGVneVN0cmlu
ZywgY29uc3QgZG91YmxlKiBvcHRpb25hbFBhZ2VMb2FkVGltZW91dCwgUmVmPEdvRm9yd2FyZElu
QnJvd3NpbmdDb250ZXh0Q2FsbGJhY2s+JiYpIG92ZXJyaWRlOwotICAgIHZvaWQgcmVsb2FkQnJv
d3NpbmdDb250ZXh0KGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxQYWdlTG9h
ZFN0cmF0ZWd5U3RyaW5nLCBjb25zdCBkb3VibGUqIG9wdGlvbmFsUGFnZUxvYWRUaW1lb3V0LCBS
ZWY8UmVsb2FkQnJvd3NpbmdDb250ZXh0Q2FsbGJhY2s+JiYpIG92ZXJyaWRlOwotICAgIHZvaWQg
d2FpdEZvck5hdmlnYXRpb25Ub0NvbXBsZXRlKGNvbnN0IFN0cmluZyYgYnJvd3NpbmdDb250ZXh0
SGFuZGxlLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsRnJhbWVIYW5kbGUsIGNvbnN0IFN0cmluZyog
b3B0aW9uYWxQYWdlTG9hZFN0cmF0ZWd5U3RyaW5nLCBjb25zdCBkb3VibGUqIG9wdGlvbmFsUGFn
ZUxvYWRUaW1lb3V0LCBSZWY8V2FpdEZvck5hdmlnYXRpb25Ub0NvbXBsZXRlQ2FsbGJhY2s+JiYp
IG92ZXJyaWRlOwotICAgIHZvaWQgZXZhbHVhdGVKYXZhU2NyaXB0RnVuY3Rpb24oY29uc3QgU3Ry
aW5nJiBicm93c2luZ0NvbnRleHRIYW5kbGUsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxGcmFtZUhh
bmRsZSwgY29uc3QgU3RyaW5nJiBmdW5jdGlvbiwgY29uc3QgSlNPTjo6QXJyYXkmIGFyZ3VtZW50
cywgY29uc3QgYm9vbCogb3B0aW9uYWxFeHBlY3RzSW1wbGljaXRDYWxsYmFja0FyZ3VtZW50LCBj
b25zdCBkb3VibGUqIG9wdGlvbmFsQ2FsbGJhY2tUaW1lb3V0LCBSZWY8SW5zcGVjdG9yOjpBdXRv
bWF0aW9uQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFdmFsdWF0ZUphdmFTY3JpcHRGdW5jdGlv
bkNhbGxiYWNrPiYmKSBvdmVycmlkZTsKLSAgICB2b2lkIHBlcmZvcm1Nb3VzZUludGVyYWN0aW9u
KGNvbnN0IFN0cmluZyYgaGFuZGxlLCBjb25zdCBKU09OOjpPYmplY3QmIHJlcXVlc3RlZFBvc2l0
aW9uLCBjb25zdCBTdHJpbmcmIG1vdXNlQnV0dG9uLCBjb25zdCBTdHJpbmcmIG1vdXNlSW50ZXJh
Y3Rpb24sIGNvbnN0IEpTT046OkFycmF5JiBrZXlNb2RpZmllcnMsIFJlZjxQZXJmb3JtTW91c2VJ
bnRlcmFjdGlvbkNhbGxiYWNrPiYmKSBmaW5hbDsKLSAgICB2b2lkIHBlcmZvcm1LZXlib2FyZElu
dGVyYWN0aW9ucyhjb25zdCBTdHJpbmcmIGhhbmRsZSwgY29uc3QgSlNPTjo6QXJyYXkmIGludGVy
YWN0aW9ucywgUmVmPFBlcmZvcm1LZXlib2FyZEludGVyYWN0aW9uc0NhbGxiYWNrPiYmKSBvdmVy
cmlkZTsKLSAgICB2b2lkIHBlcmZvcm1JbnRlcmFjdGlvblNlcXVlbmNlKGNvbnN0IFN0cmluZyYg
aGFuZGxlLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsRnJhbWVIYW5kbGUsIGNvbnN0IEpTT046OkFy
cmF5JiBzb3VyY2VzLCBjb25zdCBKU09OOjpBcnJheSYgc3RlcHMsIFJlZjxQZXJmb3JtSW50ZXJh
Y3Rpb25TZXF1ZW5jZUNhbGxiYWNrPiYmKSBvdmVycmlkZTsKLSAgICB2b2lkIGNhbmNlbEludGVy
YWN0aW9uU2VxdWVuY2UoY29uc3QgU3RyaW5nJiBoYW5kbGUsIGNvbnN0IFN0cmluZyogb3B0aW9u
YWxGcmFtZUhhbmRsZSwgUmVmPENhbmNlbEludGVyYWN0aW9uU2VxdWVuY2VDYWxsYmFjaz4mJikg
b3ZlcnJpZGU7Ci0gICAgdm9pZCB0YWtlU2NyZWVuc2hvdChjb25zdCBTdHJpbmcmIGhhbmRsZSwg
Y29uc3QgU3RyaW5nKiBvcHRpb25hbEZyYW1lSGFuZGxlLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFs
Tm9kZUhhbmRsZSwgY29uc3QgYm9vbCogb3B0aW9uYWxTY3JvbGxJbnRvVmlld0lmTmVlZGVkLCBj
b25zdCBib29sKiBvcHRpb25hbENsaXBUb1ZpZXdwb3J0LCBSZWY8VGFrZVNjcmVlbnNob3RDYWxs
YmFjaz4mJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZXNvbHZlQ2hpbGRGcmFtZUhhbmRsZShjb25z
dCBTdHJpbmcmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSwgY29uc3QgU3RyaW5nKiBvcHRpb25hbEZy
YW1lSGFuZGxlLCBjb25zdCBpbnQqIG9wdGlvbmFsT3JkaW5hbCwgY29uc3QgU3RyaW5nKiBvcHRp
b25hbE5hbWUsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxOb2RlSGFuZGxlLCBSZWY8UmVzb2x2ZUNo
aWxkRnJhbWVIYW5kbGVDYWxsYmFjaz4mJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZXNvbHZlUGFy
ZW50RnJhbWVIYW5kbGUoY29uc3QgU3RyaW5nJiBicm93c2luZ0NvbnRleHRIYW5kbGUsIGNvbnN0
IFN0cmluZyYgZnJhbWVIYW5kbGUsIFJlZjxSZXNvbHZlUGFyZW50RnJhbWVIYW5kbGVDYWxsYmFj
az4mJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjb21wdXRlRWxlbWVudExheW91dChjb25zdCBTdHJp
bmcmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSwgY29uc3QgU3RyaW5nJiBmcmFtZUhhbmRsZSwgY29u
c3QgU3RyaW5nJiBub2RlSGFuZGxlLCBjb25zdCBib29sKiBvcHRpb25hbFNjcm9sbEludG9WaWV3
SWZOZWVkZWQsIGNvbnN0IFN0cmluZyYgY29vcmRpbmF0ZVN5c3RlbSwgUmVmPEluc3BlY3Rvcjo6
QXV0b21hdGlvbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6Q29tcHV0ZUVsZW1lbnRMYXlvdXRD
YWxsYmFjaz4mJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZWxlY3RPcHRpb25FbGVtZW50KGNvbnN0
IFN0cmluZyYgYnJvd3NpbmdDb250ZXh0SGFuZGxlLCBjb25zdCBTdHJpbmcmIGZyYW1lSGFuZGxl
LCBjb25zdCBTdHJpbmcmIG5vZGVIYW5kbGUsIFJlZjxJbnNwZWN0b3I6OkF1dG9tYXRpb25CYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlNlbGVjdE9wdGlvbkVsZW1lbnRDYWxsYmFjaz4mJikgb3Zl
cnJpZGU7Ci0gICAgdm9pZCBpc1Nob3dpbmdKYXZhU2NyaXB0RGlhbG9nKEluc3BlY3Rvcjo6RXJy
b3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSwgYm9vbCogcmVz
dWx0KSBvdmVycmlkZTsKLSAgICB2b2lkIGRpc21pc3NDdXJyZW50SmF2YVNjcmlwdERpYWxvZyhJ
bnNwZWN0b3I6OkVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBicm93c2luZ0NvbnRleHRIYW5k
bGUpIG92ZXJyaWRlOwotICAgIHZvaWQgYWNjZXB0Q3VycmVudEphdmFTY3JpcHREaWFsb2coSW5z
cGVjdG9yOjpFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgYnJvd3NpbmdDb250ZXh0SGFuZGxl
KSBvdmVycmlkZTsKLSAgICB2b2lkIG1lc3NhZ2VPZkN1cnJlbnRKYXZhU2NyaXB0RGlhbG9nKElu
c3BlY3Rvcjo6RXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGJyb3dzaW5nQ29udGV4dEhhbmRs
ZSwgU3RyaW5nKiB0ZXh0KSBvdmVycmlkZTsKLSAgICB2b2lkIHNldFVzZXJJbnB1dEZvckN1cnJl
bnRKYXZhU2NyaXB0UHJvbXB0KEluc3BlY3Rvcjo6RXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcm
IGJyb3dzaW5nQ29udGV4dEhhbmRsZSwgY29uc3QgU3RyaW5nJiB0ZXh0KSBvdmVycmlkZTsKLSAg
ICB2b2lkIHNldEZpbGVzVG9TZWxlY3RGb3JGaWxlVXBsb2FkKEluc3BlY3Rvcjo6RXJyb3JTdHJp
bmcmLCBjb25zdCBTdHJpbmcmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSwgY29uc3QgSlNPTjo6QXJy
YXkmIGZpbGVuYW1lcywgY29uc3QgSlNPTjo6QXJyYXkqIG9wdGlvbmFsRmlsZUNvbnRlbnRzKSBv
dmVycmlkZTsKLSAgICB2b2lkIHNldEZpbGVzRm9ySW5wdXRGaWxlVXBsb2FkKGNvbnN0IFN0cmlu
ZyYgYnJvd3NpbmdDb250ZXh0SGFuZGxlLCBjb25zdCBTdHJpbmcmIGZyYW1lSGFuZGxlLCBjb25z
dCBTdHJpbmcmIG5vZGVIYW5kbGUsIGNvbnN0IEpTT046OkFycmF5JiBmaWxlbmFtZXMsIFJlZjxT
ZXRGaWxlc0ZvcklucHV0RmlsZVVwbG9hZENhbGxiYWNrPiYmKSBvdmVycmlkZTsKLSAgICB2b2lk
IGdldEFsbENvb2tpZXMoY29uc3QgU3RyaW5nJiBicm93c2luZ0NvbnRleHRIYW5kbGUsIFJlZjxH
ZXRBbGxDb29raWVzQ2FsbGJhY2s+JiYpIG92ZXJyaWRlOwotICAgIHZvaWQgZGVsZXRlU2luZ2xl
Q29va2llKGNvbnN0IFN0cmluZyYgYnJvd3NpbmdDb250ZXh0SGFuZGxlLCBjb25zdCBTdHJpbmcm
IGNvb2tpZU5hbWUsIFJlZjxEZWxldGVTaW5nbGVDb29raWVDYWxsYmFjaz4mJikgb3ZlcnJpZGU7
Ci0gICAgdm9pZCBhZGRTaW5nbGVDb29raWUoY29uc3QgU3RyaW5nJiBicm93c2luZ0NvbnRleHRI
YW5kbGUsIGNvbnN0IEpTT046Ok9iamVjdCYgY29va2llLCBSZWY8QWRkU2luZ2xlQ29va2llQ2Fs
bGJhY2s+JiYpIG92ZXJyaWRlOwotICAgIHZvaWQgZGVsZXRlQWxsQ29va2llcyhJbnNwZWN0b3I6
OkVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBicm93c2luZ0NvbnRleHRIYW5kbGUpIG92ZXJy
aWRlOwotICAgIHZvaWQgZ2V0U2Vzc2lvblBlcm1pc3Npb25zKEluc3BlY3Rvcjo6RXJyb3JTdHJp
bmcmLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9u
OjpTZXNzaW9uUGVybWlzc2lvbkRhdGE+PiYgb3V0X3Blcm1pc3Npb25zKSBvdmVycmlkZTsKLSAg
ICB2b2lkIHNldFNlc3Npb25QZXJtaXNzaW9ucyhJbnNwZWN0b3I6OkVycm9yU3RyaW5nJiwgY29u
c3QgSlNPTjo6QXJyYXkmIGluX3Blcm1pc3Npb25zKSBvdmVycmlkZTsKKyAgICB2b2lkIGdldEJy
b3dzaW5nQ29udGV4dHMoUmVmPEdldEJyb3dzaW5nQ29udGV4dHNDYWxsYmFjaz4mJik7CisgICAg
dm9pZCBnZXRCcm93c2luZ0NvbnRleHQoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21h
dGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJiwgUmVmPEdldEJyb3dzaW5nQ29udGV4dENhbGxi
YWNrPiYmKTsKKyAgICB2b2lkIGNyZWF0ZUJyb3dzaW5nQ29udGV4dChPcHRpb25hbDxJbnNwZWN0
b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRQcmVzZW50YXRpb24+JiYs
IFJlZjxDcmVhdGVCcm93c2luZ0NvbnRleHRDYWxsYmFjaz4mJik7CisgICAgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBjbG9zZUJyb3dzaW5nQ29udGV4dChjb25zdCBJ
bnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRIYW5kbGUmKTsK
KyAgICB2b2lkIHN3aXRjaFRvQnJvd3NpbmdDb250ZXh0KGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYsIGNvbnN0IEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkF1dG9tYXRpb246OkZyYW1lSGFuZGxlJiwgUmVmPFN3aXRjaFRvQnJvd3NpbmdD
b250ZXh0Q2FsbGJhY2s+JiYpOworICAgIHZvaWQgc2V0V2luZG93RnJhbWVPZkJyb3dzaW5nQ29u
dGV4dChjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRl
eHRIYW5kbGUmLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIG9yaWdpbiwgUmVmUHRyPEpTT046Ok9i
amVjdD4mJiBzaXplLCBSZWY8U2V0V2luZG93RnJhbWVPZkJyb3dzaW5nQ29udGV4dENhbGxiYWNr
PiYmKTsKKyAgICB2b2lkIG1heGltaXplV2luZG93T2ZCcm93c2luZ0NvbnRleHQoY29uc3QgSW5z
cGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJiwgUmVm
PE1heGltaXplV2luZG93T2ZCcm93c2luZ0NvbnRleHRDYWxsYmFjaz4mJik7CisgICAgdm9pZCBo
aWRlV2luZG93T2ZCcm93c2luZ0NvbnRleHQoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0
b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJiwgUmVmPEhpZGVXaW5kb3dPZkJyb3dzaW5n
Q29udGV4dENhbGxiYWNrPiYmKTsKKyAgICB2b2lkIG5hdmlnYXRlQnJvd3NpbmdDb250ZXh0KGNv
bnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRs
ZSYsIGNvbnN0IFN0cmluZyYgdXJsLCBPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRv
bWF0aW9uOjpQYWdlTG9hZFN0cmF0ZWd5PiYmLCBPcHRpb25hbDxkb3VibGU+JiYgcGFnZUxvYWRU
aW1lb3V0LCBSZWY8TmF2aWdhdGVCcm93c2luZ0NvbnRleHRDYWxsYmFjaz4mJik7CisgICAgdm9p
ZCBnb0JhY2tJbkJyb3dzaW5nQ29udGV4dChjb25zdCBTdHJpbmcmLCBPcHRpb25hbDxJbnNwZWN0
b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpQYWdlTG9hZFN0cmF0ZWd5PiYmLCBPcHRpb25hbDxk
b3VibGU+JiYgcGFnZUxvYWRUaW1lb3V0LCBSZWY8R29CYWNrSW5Ccm93c2luZ0NvbnRleHRDYWxs
YmFjaz4mJik7CisgICAgdm9pZCBnb0ZvcndhcmRJbkJyb3dzaW5nQ29udGV4dChjb25zdCBTdHJp
bmcmLCBPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpQYWdlTG9hZFN0
cmF0ZWd5PiYmLCBPcHRpb25hbDxkb3VibGU+JiYgcGFnZUxvYWRUaW1lb3V0LCBSZWY8R29Gb3J3
YXJkSW5Ccm93c2luZ0NvbnRleHRDYWxsYmFjaz4mJik7CisgICAgdm9pZCByZWxvYWRCcm93c2lu
Z0NvbnRleHQoY29uc3QgU3RyaW5nJiwgT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0
b21hdGlvbjo6UGFnZUxvYWRTdHJhdGVneT4mJiwgT3B0aW9uYWw8ZG91YmxlPiYmIHBhZ2VMb2Fk
VGltZW91dCwgUmVmPFJlbG9hZEJyb3dzaW5nQ29udGV4dENhbGxiYWNrPiYmKTsKKyAgICB2b2lk
IHdhaXRGb3JOYXZpZ2F0aW9uVG9Db21wbGV0ZShjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpB
dXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRIYW5kbGUmLCBjb25zdCBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpBdXRvbWF0aW9uOjpGcmFtZUhhbmRsZSYsIE9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkF1dG9tYXRpb246OlBhZ2VMb2FkU3RyYXRlZ3k+JiYsIE9wdGlvbmFsPGRvdWJsZT4mJiBw
YWdlTG9hZFRpbWVvdXQsIFJlZjxXYWl0Rm9yTmF2aWdhdGlvblRvQ29tcGxldGVDYWxsYmFjaz4m
Jik7CisgICAgdm9pZCBldmFsdWF0ZUphdmFTY3JpcHRGdW5jdGlvbihjb25zdCBJbnNwZWN0b3I6
OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRIYW5kbGUmLCBjb25zdCBJbnNw
ZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpGcmFtZUhhbmRsZSYsIGNvbnN0IFN0cmluZyYg
ZnVuY3Rpb24sIFJlZjxKU09OOjpBcnJheT4mJiBhcmd1bWVudHMsIE9wdGlvbmFsPGJvb2w+JiYg
ZXhwZWN0c0ltcGxpY2l0Q2FsbGJhY2tBcmd1bWVudCwgT3B0aW9uYWw8ZG91YmxlPiYmIGNhbGxi
YWNrVGltZW91dCwgUmVmPEV2YWx1YXRlSmF2YVNjcmlwdEZ1bmN0aW9uQ2FsbGJhY2s+JiYpOwor
ICAgIHZvaWQgcGVyZm9ybU1vdXNlSW50ZXJhY3Rpb24oY29uc3QgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJiwgUmVmPEpTT046Ok9iamVjdD4m
JiByZXF1ZXN0ZWRQb3NpdGlvbiwgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6TW91
c2VCdXR0b24sIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246Ok1vdXNlSW50ZXJhY3Rp
b24sIFJlZjxKU09OOjpBcnJheT4mJiBrZXlNb2RpZmllcnMsIFJlZjxQZXJmb3JtTW91c2VJbnRl
cmFjdGlvbkNhbGxiYWNrPiYmKTsKKyAgICB2b2lkIHBlcmZvcm1LZXlib2FyZEludGVyYWN0aW9u
cyhjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRI
YW5kbGUmLCBSZWY8SlNPTjo6QXJyYXk+JiYgaW50ZXJhY3Rpb25zLCBSZWY8UGVyZm9ybUtleWJv
YXJkSW50ZXJhY3Rpb25zQ2FsbGJhY2s+JiYpOworICAgIHZvaWQgcGVyZm9ybUludGVyYWN0aW9u
U2VxdWVuY2UoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdD
b250ZXh0SGFuZGxlJiwgY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6RnJh
bWVIYW5kbGUmLCBSZWY8SlNPTjo6QXJyYXk+JiYgc291cmNlcywgUmVmPEpTT046OkFycmF5PiYm
IHN0ZXBzLCBSZWY8UGVyZm9ybUludGVyYWN0aW9uU2VxdWVuY2VDYWxsYmFjaz4mJik7CisgICAg
dm9pZCBjYW5jZWxJbnRlcmFjdGlvblNlcXVlbmNlKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYsIGNvbnN0IEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkF1dG9tYXRpb246OkZyYW1lSGFuZGxlJiwgUmVmPENhbmNlbEludGVyYWN0aW9uU2Vx
dWVuY2VDYWxsYmFjaz4mJik7CisgICAgdm9pZCB0YWtlU2NyZWVuc2hvdChjb25zdCBJbnNwZWN0
b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRIYW5kbGUmLCBjb25zdCBJ
bnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpGcmFtZUhhbmRsZSYsIGNvbnN0IEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246Ok5vZGVIYW5kbGUmLCBPcHRpb25hbDxib29sPiYm
IHNjcm9sbEludG9WaWV3SWZOZWVkZWQsIE9wdGlvbmFsPGJvb2w+JiYgY2xpcFRvVmlld3BvcnQs
IFJlZjxUYWtlU2NyZWVuc2hvdENhbGxiYWNrPiYmKTsKKyAgICB2b2lkIHJlc29sdmVDaGlsZEZy
YW1lSGFuZGxlKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5n
Q29udGV4dEhhbmRsZSYsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkZy
YW1lSGFuZGxlJiwgT3B0aW9uYWw8aW50PiYmIG9yZGluYWwsIGNvbnN0IFN0cmluZyYgbmFtZSwg
Y29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6Tm9kZUhhbmRsZSYsIFJlZjxS
ZXNvbHZlQ2hpbGRGcmFtZUhhbmRsZUNhbGxiYWNrPiYmKTsKKyAgICB2b2lkIHJlc29sdmVQYXJl
bnRGcmFtZUhhbmRsZShjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93
c2luZ0NvbnRleHRIYW5kbGUmLCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9u
OjpGcmFtZUhhbmRsZSYsIFJlZjxSZXNvbHZlUGFyZW50RnJhbWVIYW5kbGVDYWxsYmFjaz4mJik7
CisgICAgdm9pZCBjb21wdXRlRWxlbWVudExheW91dChjb25zdCBJbnNwZWN0b3I6OlByb3RvY29s
OjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRIYW5kbGUmLCBjb25zdCBJbnNwZWN0b3I6OlBy
b3RvY29sOjpBdXRvbWF0aW9uOjpGcmFtZUhhbmRsZSYsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkF1dG9tYXRpb246Ok5vZGVIYW5kbGUmLCBPcHRpb25hbDxib29sPiYmIHNjcm9sbEludG9W
aWV3SWZOZWVkZWQsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkNvb3JkaW5hdGVT
eXN0ZW0sIFJlZjxDb21wdXRlRWxlbWVudExheW91dENhbGxiYWNrPiYmKTsKKyAgICB2b2lkIHNl
bGVjdE9wdGlvbkVsZW1lbnQoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6
QnJvd3NpbmdDb250ZXh0SGFuZGxlJiwgY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21h
dGlvbjo6RnJhbWVIYW5kbGUmLCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9u
OjpOb2RlSGFuZGxlJiwgUmVmPFNlbGVjdE9wdGlvbkVsZW1lbnRDYWxsYmFjaz4mJik7CisgICAg
SW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxib29sPiBpc1Nob3dpbmdKYXZhU2Ny
aXB0RGlhbG9nKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5n
Q29udGV4dEhhbmRsZSYpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8
dm9pZD4gZGlzbWlzc0N1cnJlbnRKYXZhU2NyaXB0RGlhbG9nKGNvbnN0IEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYpOworICAgIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gYWNjZXB0Q3VycmVudEphdmFTY3JpcHRE
aWFsb2coY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250
ZXh0SGFuZGxlJik7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxTdHJp
bmc+IG1lc3NhZ2VPZkN1cnJlbnRKYXZhU2NyaXB0RGlhbG9nKGNvbnN0IEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYpOworICAgIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc2V0VXNlcklucHV0Rm9yQ3VycmVudEph
dmFTY3JpcHRQcm9tcHQoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJv
d3NpbmdDb250ZXh0SGFuZGxlJiwgY29uc3QgU3RyaW5nJiB0ZXh0KTsKKyAgICBJbnNwZWN0b3I6
OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHNldEZpbGVzVG9TZWxlY3RGb3JGaWxlVXBs
b2FkKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4
dEhhbmRsZSYsIFJlZjxKU09OOjpBcnJheT4mJiBmaWxlbmFtZXMsIFJlZlB0cjxKU09OOjpBcnJh
eT4mJiBmaWxlQ29udGVudHMpOworICAgIHZvaWQgc2V0RmlsZXNGb3JJbnB1dEZpbGVVcGxvYWQo
Y29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFu
ZGxlJiwgY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6RnJhbWVIYW5kbGUm
LCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpOb2RlSGFuZGxlJiwgUmVm
PEpTT046OkFycmF5PiYmIGZpbGVuYW1lcywgUmVmPFNldEZpbGVzRm9ySW5wdXRGaWxlVXBsb2Fk
Q2FsbGJhY2s+JiYpOworICAgIHZvaWQgZ2V0QWxsQ29va2llcyhjb25zdCBJbnNwZWN0b3I6OlBy
b3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRIYW5kbGUmLCBSZWY8R2V0QWxsQ29v
a2llc0NhbGxiYWNrPiYmKTsKKyAgICB2b2lkIGRlbGV0ZVNpbmdsZUNvb2tpZShjb25zdCBJbnNw
ZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRIYW5kbGUmLCBjb25z
dCBTdHJpbmcmIGNvb2tpZU5hbWUsIFJlZjxEZWxldGVTaW5nbGVDb29raWVDYWxsYmFjaz4mJik7
CisgICAgdm9pZCBhZGRTaW5nbGVDb29raWUoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0
b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJiwgUmVmPEpTT046Ok9iamVjdD4mJiBjb29r
aWUsIFJlZjxBZGRTaW5nbGVDb29raWVDYWxsYmFjaz4mJik7CisgICAgSW5zcGVjdG9yOjpQcm90
b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBkZWxldGVBbGxDb29raWVzKGNvbnN0IEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYpOworICAgIElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEpTT046OkFycmF5T2Y8SW5zcGVj
dG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6U2Vzc2lvblBlcm1pc3Npb25EYXRhPj4+IGdldFNl
c3Npb25QZXJtaXNzaW9ucygpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5n
T3I8dm9pZD4gc2V0U2Vzc2lvblBlcm1pc3Npb25zKFJlZjxKU09OOjpBcnJheT4mJik7CiAKICNp
ZiBQTEFURk9STShNQUMpCi0gICAgdm9pZCBpbnNwZWN0QnJvd3NpbmdDb250ZXh0KGNvbnN0IFN0
cmluZyYsIGNvbnN0IGJvb2wqIG9wdGlvbmFsRW5hYmxlQXV0b0NhcHR1cmluZywgUmVmPEluc3Bl
Y3RCcm93c2luZ0NvbnRleHRDYWxsYmFjaz4mJikgb3ZlcnJpZGU7CisgICAgdm9pZCBpbnNwZWN0
QnJvd3NpbmdDb250ZXh0KGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJy
b3dzaW5nQ29udGV4dEhhbmRsZSYsIE9wdGlvbmFsPGJvb2w+JiYgZW5hYmxlQXV0b0NhcHR1cmlu
ZywgUmVmPEluc3BlY3RCcm93c2luZ0NvbnRleHRDYWxsYmFjaz4mJik7CiAjZW5kaWYKIAogICAg
IC8vIEV2ZW50IFNpbXVsYXRpb24gU3VwcG9ydC4KQEAgLTIzOCw3ICsyMzgsNyBAQCBwcml2YXRl
OgogICAgIHZvaWQgaGlkZVdpbmRvd0ZvclBhZ2UoV2ViUGFnZVByb3h5JiwgV1RGOjpDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKCk+JiYpOwogCiAgICAgLy8gSVBDOjpNZXNzYWdlUmVjZWl2ZXIgKElt
cGxlbWVudGVkIGJ5IGdlbmVyYXRlZCBjb2RlIGluIFdlYkF1dG9tYXRpb25TZXNzaW9uTWVzc2Fn
ZVJlY2VpdmVyLmNwcCkuCi0gICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShJUEM6OkNvbm5lY3Rp
b24mLCBJUEM6OkRlY29kZXImKSBvdmVycmlkZTsKKyAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdl
KElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpOwogCiAgICAgLy8gQ2FsbGVkIGJ5IFdl
YkF1dG9tYXRpb25TZXNzaW9uIG1lc3NhZ2VzLgogICAgIHZvaWQgZGlkRXZhbHVhdGVKYXZhU2Ny
aXB0RnVuY3Rpb24odWludDY0X3QgY2FsbGJhY2tJRCwgY29uc3QgU3RyaW5nJiByZXN1bHQsIGNv
bnN0IFN0cmluZyYgZXJyb3JUeXBlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb25NYWNyb3MuaCBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb25NYWNyb3MuaAppbmRl
eCA5M2FmNWFiYzcwOGJkNTk4ZjBmNDBiY2MyOTQ4NTJhMzcwNTI5N2FlLi40ZDM2ZDY0ZmQ0MGY0
M2YzZTc4MWQ1ZTU5NWEzYmU4NGNjZWVkNjUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uTWFjcm9zLmgKKysrIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbk1hY3Jv
cy5oCkBAIC00NCwxNCArNDQsMTIgQEAKIC8vIENvbnZlbmllbmNlIG1hY3JvcyBmb3IgZmlsbGlu
ZyBpbiB0aGUgZXJyb3Igc3RyaW5nIG9mIHN5bmNocm9ub3VzIGNvbW1hbmRzIGluIGJhaWxvdXQg
YnJhbmNoZXMuCiAjZGVmaW5lIFNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1IoZXJyb3JO
YW1lKSBcCiBkbyB7IFwKLSAgICBlcnJvclN0cmluZyA9IFNUUklOR19GT1JfUFJFREVGSU5FRF9F
UlJPUl9OQU1FKGVycm9yTmFtZSk7IFwKLSAgICByZXR1cm47IFwKKyAgICByZXR1cm4gbWFrZVVu
ZXhwZWN0ZWQoU1RSSU5HX0ZPUl9QUkVERUZJTkVEX0VSUk9SX05BTUUoZXJyb3JOYW1lKSk7IFwK
IH0gd2hpbGUgKGZhbHNlKQogCiAjZGVmaW5lIFNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJS
T1JfQU5EX0RFVEFJTFMoZXJyb3JOYW1lLCBkZXRhaWxzU3RyaW5nKSBcCiBkbyB7IFwKLSAgICBl
cnJvclN0cmluZyA9IFNUUklOR19GT1JfUFJFREVGSU5FRF9FUlJPUl9OQU1FX0FORF9ERVRBSUxT
KGVycm9yTmFtZSwgZGV0YWlsc1N0cmluZyk7IFwKLSAgICByZXR1cm47IFwKKyAgICByZXR1cm4g
bWFrZVVuZXhwZWN0ZWQoU1RSSU5HX0ZPUl9QUkVERUZJTkVEX0VSUk9SX05BTUVfQU5EX0RFVEFJ
TFMoZXJyb3JOYW1lLCBkZXRhaWxzU3RyaW5nKSk7IFwKIH0gd2hpbGUgKGZhbHNlKQogCiAjZGVm
aW5lIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SKGVycm9yTmFtZSkgXApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9tYWMvV2ViQXV0b21hdGlv
blNlc3Npb25NYWMubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL21hYy9X
ZWJBdXRvbWF0aW9uU2Vzc2lvbk1hYy5tbQppbmRleCAzY2FlY2MzMzdkMDk5Nzk1MzRlN2ZjYmY1
ZTFlMTBiZDgzNWY3NmNkLi45ZGJmMmUwNzg3YWE5OTcwNmM2ZjI5MDc1NGE5MTM5MGFiZjFmNzBk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL21hYy9XZWJB
dXRvbWF0aW9uU2Vzc2lvbk1hYy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRv
bWF0aW9uL21hYy9XZWJBdXRvbWF0aW9uU2Vzc2lvbk1hYy5tbQpAQCAtNDQsNyArNDQsNyBAQCB1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogI3ByYWdtYSBtYXJrIENvbW1hbmRzIGZvciAnUExB
VEZPUk0oTUFDKScKIAotdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6aW5zcGVjdEJyb3dzaW5n
Q29udGV4dChjb25zdCBTdHJpbmcmIGhhbmRsZSwgY29uc3QgYm9vbCogb3B0aW9uYWxFbmFibGVB
dXRvQ2FwdHVyaW5nLCBSZWY8SW5zcGVjdEJyb3dzaW5nQ29udGV4dENhbGxiYWNrPiYmIGNhbGxi
YWNrKQordm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6aW5zcGVjdEJyb3dzaW5nQ29udGV4dChj
b25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRIYW5k
bGUmIGhhbmRsZSwgT3B0aW9uYWw8Ym9vbD4mJiBlbmFibGVBdXRvQ2FwdHVyaW5nLCBSZWY8SW5z
cGVjdEJyb3dzaW5nQ29udGV4dENhbGxiYWNrPiYmIGNhbGxiYWNrKQogewogICAgIFdlYlBhZ2VQ
cm94eSogcGFnZSA9IHdlYlBhZ2VQcm94eUZvckhhbmRsZShoYW5kbGUpOwogICAgIGlmICghcGFn
ZSkKQEAgLTYwLDcgKzYwLDcgQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6aW5zcGVjdEJy
b3dzaW5nQ29udGV4dChjb25zdCBTdHJpbmcmIGhhbmRsZSwgY29uc3QgYm8KICAgICAgICAgcGFn
ZS0+aW5zcGVjdG9yKCktPnNob3coKTsKIAogICAgICAgICAvLyBTdGFydCBjb2xsZWN0aW5nIHBy
b2ZpbGUgaW5mb3JtYXRpb24gaW1tZWRpYXRlbHkgc28gdGhlIGVudGlyZSBzZXNzaW9uIGlzIGNh
cHR1cmVkLgotICAgICAgICBpZiAob3B0aW9uYWxFbmFibGVBdXRvQ2FwdHVyaW5nICYmICpvcHRp
b25hbEVuYWJsZUF1dG9DYXB0dXJpbmcpCisgICAgICAgIGlmIChlbmFibGVBdXRvQ2FwdHVyaW5n
ICYmICplbmFibGVBdXRvQ2FwdHVyaW5nKQogICAgICAgICAgICAgcGFnZS0+aW5zcGVjdG9yKCkt
PnRvZ2dsZVBhZ2VQcm9maWxpbmcoKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvQWdlbnRzL0luc3BlY3RvckJyb3dzZXJBZ2VudC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvQWdlbnRzL0luc3BlY3RvckJyb3dz
ZXJBZ2VudC5jcHAKaW5kZXggYzFmZmE2Y2Y2MTQ2NjZlNGM4YjVlYzViNDNjYzY0ZjgwNzBlNjU5
OS4uZGY0YTEwYTQwZjhiMDJmYzVkNzUwOWU5NmM1OTRlYmJjNWFjOWYxNCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL0FnZW50cy9JbnNwZWN0b3JCcm93c2Vy
QWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9BZ2VudHMv
SW5zcGVjdG9yQnJvd3NlckFnZW50LmNwcApAQCAtNjAsMzUgKzYwLDM0IEBAIHZvaWQgSW5zcGVj
dG9yQnJvd3NlckFnZW50OjpkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpG
cm9udGVuZFJvdXRlCiAKIHZvaWQgSW5zcGVjdG9yQnJvd3NlckFnZW50Ojp3aWxsRGVzdHJveUZy
b250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24pCiB7Ci0gICAgRXJy
b3JTdHJpbmcgaWdub3JlZDsKLSAgICBkaXNhYmxlKGlnbm9yZWQpOworICAgIGRpc2FibGUoKTsK
IH0KIAotdm9pZCBJbnNwZWN0b3JCcm93c2VyQWdlbnQ6OmVuYWJsZShFcnJvclN0cmluZyYgZXJy
b3JTdHJpbmcpCitJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3Bl
Y3RvckJyb3dzZXJBZ2VudDo6ZW5hYmxlKCkKIHsKLSAgICBpZiAoZW5hYmxlZCgpKSB7Ci0gICAg
ICAgIGVycm9yU3RyaW5nID0gIkJyb3dzZXIgZG9tYWluIGFscmVhZHkgZW5hYmxlZCJfczsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoZW5hYmxlZCgpKQorICAgICAgICByZXR1cm4g
bWFrZVVuZXhwZWN0ZWQoIkJyb3dzZXIgZG9tYWluIGFscmVhZHkgZW5hYmxlZCJfcyk7CiAKICAg
ICBtX2luc3BlY3RlZFBhZ2UuaW5zcGVjdG9yQ29udHJvbGxlcigpLnNldEVuYWJsZWRCcm93c2Vy
QWdlbnQodGhpcyk7CiAKICAgICBhdXRvKiBpbnNwZWN0b3IgPSBtX2luc3BlY3RlZFBhZ2UuaW5z
cGVjdG9yKCk7CiAgICAgQVNTRVJUKGluc3BlY3Rvcik7CiAgICAgbV9pbnNwZWN0ZWRQYWdlLmlu
c3BlY3RvckNsaWVudCgpLmJyb3dzZXJEb21haW5FbmFibGVkKG1faW5zcGVjdGVkUGFnZSwgKmlu
c3BlY3Rvcik7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckJyb3dzZXJB
Z2VudDo6ZGlzYWJsZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCitJbnNwZWN0b3I6OlByb3Rv
Y29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckJyb3dzZXJBZ2VudDo6ZGlzYWJsZSgp
CiB7Ci0gICAgaWYgKCFlbmFibGVkKCkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiQnJvd3Nl
ciBkb21haW4gYWxyZWFkeSBkaXNhYmxlZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAg
ICBpZiAoIWVuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJCcm93c2Vy
IGRvbWFpbiBhbHJlYWR5IGRpc2FibGVkIl9zKTsKIAogICAgIG1faW5zcGVjdGVkUGFnZS5pbnNw
ZWN0b3JDb250cm9sbGVyKCkuc2V0RW5hYmxlZEJyb3dzZXJBZ2VudChudWxscHRyKTsKIAogICAg
IGlmIChhdXRvKiBpbnNwZWN0b3IgPSBtX2luc3BlY3RlZFBhZ2UuaW5zcGVjdG9yKCkpCiAgICAg
ICAgIG1faW5zcGVjdGVkUGFnZS5pbnNwZWN0b3JDbGllbnQoKS5icm93c2VyRG9tYWluRGlzYWJs
ZWQobV9pbnNwZWN0ZWRQYWdlLCAqaW5zcGVjdG9yKTsKKworICAgIHJldHVybiB7IH07CiB9CiAK
IHZvaWQgSW5zcGVjdG9yQnJvd3NlckFnZW50OjpleHRlbnNpb25zRW5hYmxlZChIYXNoTWFwPFN0
cmluZywgU3RyaW5nPiYmIGV4dGVuc2lvbklEVG9OYW1lKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL0FnZW50cy9JbnNwZWN0b3JCcm93c2VyQWdlbnQuaCBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9BZ2VudHMvSW5zcGVjdG9yQnJvd3Nl
ckFnZW50LmgKaW5kZXggYTEzOTU4M2NkOGQ4NDIzMjlmNGIzZjM1MjFiMzYyNDBlYWI1MzkxMS4u
MzMxYmZhYmI1NTc0NGVlOThhN2ZmMGY3ZGE3Njk1MzFhYzRjNzI3NyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL0FnZW50cy9JbnNwZWN0b3JCcm93c2VyQWdl
bnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvQWdlbnRzL0luc3Bl
Y3RvckJyb3dzZXJBZ2VudC5oCkBAIC0zMywyMyArMzMsMjIgQEAKIG5hbWVzcGFjZSBXZWJLaXQg
ewogCiBjbGFzcyBXZWJQYWdlUHJveHk7Ci10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKIAog
Y2xhc3MgSW5zcGVjdG9yQnJvd3NlckFnZW50IGZpbmFsIDogcHVibGljIEluc3BlY3RvckFnZW50
QmFzZSwgcHVibGljIEluc3BlY3Rvcjo6QnJvd3NlckJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7
CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW5zcGVjdG9yQnJvd3NlckFnZW50KTsKICAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBJbnNwZWN0b3JCcm93c2VyQWdl
bnQoV2ViUGFnZUFnZW50Q29udGV4dCYpOwotICAgIH5JbnNwZWN0b3JCcm93c2VyQWdlbnQoKSBv
dmVycmlkZTsKKyAgICB+SW5zcGVjdG9yQnJvd3NlckFnZW50KCk7CiAgICAgYm9vbCBlbmFibGVk
KCkgY29uc3Q7CiAKICAgICAvLyBJbnNwZWN0b3JBZ2VudEJhc2UKLSAgICB2b2lkIGRpZENyZWF0
ZUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kUm91dGVyKiwgSW5zcGVjdG9y
OjpCYWNrZW5kRGlzcGF0Y2hlciopIG92ZXJyaWRlOwotICAgIHZvaWQgd2lsbERlc3Ryb3lGcm9u
dGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKSBvdmVycmlkZTsKKyAg
ICB2b2lkIGRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kUm91
dGVyKiwgSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlciopOworICAgIHZvaWQgd2lsbERlc3Ry
b3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKTsKIAogICAg
IC8vIEJyb3dzZXJCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIKLSAgICB2b2lkIGVuYWJsZShFcnJv
clN0cmluZyYpIG92ZXJyaWRlOwotICAgIHZvaWQgZGlzYWJsZShFcnJvclN0cmluZyYpIG92ZXJy
aWRlOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZW5hYmxl
KCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBkaXNhYmxl
KCk7CiAKICAgICB2b2lkIGV4dGVuc2lvbnNFbmFibGVkKEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+
JiYpOwogICAgIHZvaWQgZXh0ZW5zaW9uc0Rpc2FibGVkKEhhc2hTZXQ8U3RyaW5nPiYmKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9zb2NrZXQvUmVtb3Rl
SW5zcGVjdG9yQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9z
b2NrZXQvUmVtb3RlSW5zcGVjdG9yQ2xpZW50LmNwcAppbmRleCBmYmVlNWNkZmYzOGIzYzc3OWEy
NjI3MzhjNDE5NTE1YjQ0NThiOWRkLi41ZjUxN2YxMGE0ODc3MGQ5Y2I4OWNmODhmOWQ2MDM3OGJi
ZDUyYWQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3Ivc29j
a2V0L1JlbW90ZUluc3BlY3RvckNsaWVudC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvSW5zcGVjdG9yL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JDbGllbnQuY3BwCkBAIC0yMDYsMjUg
KzIwNiwzOCBAQCB2b2lkIFJlbW90ZUluc3BlY3RvckNsaWVudDo6c2V0VGFyZ2V0TGlzdChjb25z
dCBFdmVudCYgZXZlbnQpCiAgICAgaWYgKCFldmVudC5jb25uZWN0aW9uSUQgfHwgIWV2ZW50Lm1l
c3NhZ2UpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gbWVzc2Fn
ZVZhbHVlOwotICAgIGlmICghSlNPTjo6VmFsdWU6OnBhcnNlSlNPTihldmVudC5tZXNzYWdlLnZh
bHVlKCksIG1lc3NhZ2VWYWx1ZSkpCisgICAgYXV0byBtZXNzYWdlVmFsdWUgPSBKU09OOjpWYWx1
ZTo6cGFyc2VKU09OKGV2ZW50Lm1lc3NhZ2UudmFsdWUoKSk7CisgICAgaWYgKCFtZXNzYWdlVmFs
dWUpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlZlB0cjxKU09OOjpBcnJheT4gbWVzc2FnZUFy
cmF5OwotICAgIGlmICghbWVzc2FnZVZhbHVlLT5hc0FycmF5KG1lc3NhZ2VBcnJheSkpCisgICAg
YXV0byBtZXNzYWdlQXJyYXkgPSBtZXNzYWdlVmFsdWUtPmFzQXJyYXkoKTsKKyAgICBpZiAoIW1l
c3NhZ2VBcnJheSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgVmVjdG9yPFRhcmdldD4gdGFyZ2V0
TGlzdDsKICAgICBmb3IgKGF1dG8mIGl0ZW1WYWx1ZSA6ICptZXNzYWdlQXJyYXkpIHsKLSAgICAg
ICAgUmVmUHRyPEpTT046Ok9iamVjdD4gaXRlbU9iamVjdDsKLSAgICAgICAgaWYgKCFpdGVtVmFs
dWUtPmFzT2JqZWN0KGl0ZW1PYmplY3QpKQorICAgICAgICBhdXRvIGl0ZW1PYmplY3QgPSBpdGVt
VmFsdWUtPmFzT2JqZWN0KCk7CisgICAgICAgIGlmICghaXRlbU9iamVjdCkKICAgICAgICAgICAg
IGNvbnRpbnVlOwogCiAgICAgICAgIFRhcmdldCB0YXJnZXQ7Ci0gICAgICAgIGlmICghaXRlbU9i
amVjdC0+Z2V0SW50ZWdlcigidGFyZ2V0SUQiX3MsIHRhcmdldC5pZCkKLSAgICAgICAgICAgIHx8
ICFpdGVtT2JqZWN0LT5nZXRTdHJpbmcoIm5hbWUiX3MsIHRhcmdldC5uYW1lKQotICAgICAgICAg
ICAgfHwgIWl0ZW1PYmplY3QtPmdldFN0cmluZygidXJsIl9zLCB0YXJnZXQudXJsKQotICAgICAg
ICAgICAgfHwgIWl0ZW1PYmplY3QtPmdldFN0cmluZygidHlwZSJfcywgdGFyZ2V0LnR5cGUpKQor
CisgICAgICAgIGF1dG8gdGFyZ2V0SUQgPSBpdGVtT2JqZWN0LT5nZXRJbnRlZ2VyKCJ0YXJnZXRJ
RCJfcyk7CisgICAgICAgIGlmICghdGFyZ2V0SUQpCisgICAgICAgICAgICBjb250aW51ZTsKKwor
ICAgICAgICB0YXJnZXQudGFyZ2V0SUQgPSAqdGFyZ2V0SUQ7CisKKyAgICAgICAgdGFyZ2V0Lm5h
bWUgPSBpdGVtT2JqZWN0LT5nZXRTdHJpbmcoIm5hbWUiX3MpOworICAgICAgICBpZiAoIXRhcmdl
dC5uYW1lKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgdGFyZ2V0LnVybCA9IGl0
ZW1PYmplY3QtPmdldFN0cmluZygidXJsIl9zKTsKKyAgICAgICAgaWYgKCF0YXJnZXQudXJsKQor
ICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgdGFyZ2V0LnR5cGUgPSBpdGVtT2JqZWN0
LT5nZXRTdHJpbmcoInR5cGUiX3MpOworICAgICAgICBpZiAoIXRhcmdldC50eXBlKQogICAgICAg
ICAgICAgY29udGludWU7CiAKICAgICAgICAgdGFyZ2V0TGlzdC5hcHBlbmQoV1RGTW92ZSh0YXJn
ZXQpKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRl
eCBlODhiOTgxYzg3YzliYTJhMWI4ODQyZDg2OTMyYTdiNmUzZWE1MmUyLi42ZTc4OTEzNzg3ZGU5
NGVmY2VkNjE1ZTUxNGM3MDllNzU3YjQ5MTY4IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cK
KysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMjAtMDktMDggIERldmlu
IFJvdXNzbyAgPGRyb3Vzc29AYXBwbGUuY29tPgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IG1v
ZGVybml6ZSBnZW5lcmF0ZWQgYmFja2VuZCBwcm90b2NvbCBjb2RlCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTYzMDIKKyAgICAgICAgPHJkYXI6Ly9w
cm9ibGVtLzY4NTQ3NjQ5PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvSlNPTlZhbHVlLmNwcDoKKwogMjAy
MC0wOS0wNCAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgogCiAg
ICAgICAgIE1vdmUgUERGIGhlYWRzLXVwIGRpc3BsYXkgdG8gVUkgcHJvY2VzcyBvbiBtYWNPUwpk
aWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvSlNPTlZhbHVlLmNwcCBi
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0pTT05WYWx1ZS5jcHAKaW5kZXggOTFlYzQx
YzNiN2Q0MTYyZDIzZWM0NWU0ZGIzNjM3YTkzY2RjYmI0NS4uYzM4MDYyNzY0NGRmNjkxNjY0MDE2
ZmRjNmMxMTQ5MDhmYThmODIxNSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XVEYvSlNPTlZhbHVlLmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9K
U09OVmFsdWUuY3BwCkBAIC00Miw4MiArNDIsNjggQEAgVEVTVChKU09OVmFsdWUsIENvbnN0cnVj
dCkKICAgICB7CiAgICAgICAgIFJlZjxKU09OOjpWYWx1ZT4gdmFsdWUgPSBKU09OOjpWYWx1ZTo6
Y3JlYXRlKHRydWUpOwogICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+dHlwZSgpID09IEpTT046
OlZhbHVlOjpUeXBlOjpCb29sZWFuKTsKLSAgICAgICAgYm9vbCBib29sZWFuVmFsdWU7Ci0gICAg
ICAgIEVYUEVDVF9UUlVFKHZhbHVlLT5hc0Jvb2xlYW4oYm9vbGVhblZhbHVlKSk7Ci0gICAgICAg
IEVYUEVDVF9FUShib29sZWFuVmFsdWUsIHRydWUpOworICAgICAgICBhdXRvIGJvb2xlYW5WYWx1
ZSA9IHZhbHVlLT5hc0Jvb2xlYW4oKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoYm9vbGVhblZhbHVl
KTsKKyAgICAgICAgRVhQRUNUX0VRKCpib29sZWFuVmFsdWUsIHRydWUpOwogCiAgICAgICAgIHZh
bHVlID0gSlNPTjo6VmFsdWU6OmNyZWF0ZShmYWxzZSk7CiAgICAgICAgIEVYUEVDVF9UUlVFKHZh
bHVlLT50eXBlKCkgPT0gSlNPTjo6VmFsdWU6OlR5cGU6OkJvb2xlYW4pOwotICAgICAgICBFWFBF
Q1RfVFJVRSh2YWx1ZS0+YXNCb29sZWFuKGJvb2xlYW5WYWx1ZSkpOwotICAgICAgICBFWFBFQ1Rf
RVEoYm9vbGVhblZhbHVlLCBmYWxzZSk7CisgICAgICAgIGJvb2xlYW5WYWx1ZSA9IHZhbHVlLT5h
c0Jvb2xlYW4oKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoYm9vbGVhblZhbHVlKTsKKyAgICAgICAg
RVhQRUNUX0VRKCpib29sZWFuVmFsdWUsIGZhbHNlKTsKICAgICB9CiAKICAgICB7CiAgICAgICAg
IFJlZjxKU09OOjpWYWx1ZT4gdmFsdWUgPSBKU09OOjpWYWx1ZTo6Y3JlYXRlKDEpOwogICAgICAg
ICBFWFBFQ1RfVFJVRSh2YWx1ZS0+dHlwZSgpID09IEpTT046OlZhbHVlOjpUeXBlOjpJbnRlZ2Vy
KTsKLSAgICAgICAgaW50IGludGVnZXJWYWx1ZTsKLSAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUt
PmFzSW50ZWdlcihpbnRlZ2VyVmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX0VRKGludGVnZXJWYWx1
ZSwgMSk7CisgICAgICAgIGF1dG8gaW50ZWdlclZhbHVlID0gdmFsdWUtPmFzSW50ZWdlcigpOwor
ICAgICAgICBFWFBFQ1RfVFJVRShpbnRlZ2VyVmFsdWUpOworICAgICAgICBFWFBFQ1RfRVEoKmlu
dGVnZXJWYWx1ZSwgMSk7CiAKLSAgICAgICAgLy8gRG91YmxlcyBjYW4gYmUgZ2V0IGFzIGludGVn
ZXJzLCBidXQgbm90IHRoZSBvdGhlciB3YXkgYXJvdW5kLgotICAgICAgICBmbG9hdCBmbG9hdFZh
bHVlOwotICAgICAgICBFWFBFQ1RfRkFMU0UodmFsdWUtPmFzRG91YmxlKGZsb2F0VmFsdWUpKTsK
KyAgICAgICAgLy8gSW50ZWdlcnMgY2FuIGJlIGdldCBhcyBkb3VibGVzLgorICAgICAgICBhdXRv
IGRvdWJsZVZhbHVlID0gdmFsdWUtPmFzRG91YmxlKCk7CisgICAgICAgIEVYUEVDVF9UUlVFKGRv
dWJsZVZhbHVlKTsKKyAgICAgICAgRVhQRUNUX0VRKCpkb3VibGVWYWx1ZSwgMSk7CiAKICAgICAg
ICAgdmFsdWUgPSBKU09OOjpWYWx1ZTo6Y3JlYXRlKHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6
bWF4KCkpOwotICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+YXNJbnRlZ2VyKGludGVnZXJWYWx1
ZSkpOwotICAgICAgICBFWFBFQ1RfRVEoaW50ZWdlclZhbHVlLCBzdGQ6Om51bWVyaWNfbGltaXRz
PGludD46Om1heCgpKTsKLSAgICAgICAgdW5zaWduZWQgdW5zaWduZWRWYWx1ZTsKLSAgICAgICAg
RVhQRUNUX1RSVUUodmFsdWUtPmFzSW50ZWdlcih1bnNpZ25lZFZhbHVlKSk7Ci0gICAgICAgIGxv
bmcgbG9uZ1ZhbHVlOwotICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+YXNJbnRlZ2VyKGxvbmdW
YWx1ZSkpOwotICAgICAgICBsb25nIGxvbmcgbG9uZ0xvbmdWYWx1ZTsKLSAgICAgICAgRVhQRUNU
X1RSVUUodmFsdWUtPmFzSW50ZWdlcihsb25nTG9uZ1ZhbHVlKSk7Ci0gICAgICAgIHVuc2lnbmVk
IGxvbmcgdW5zaWduZWRMb25nVmFsdWU7Ci0gICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlLT5hc0lu
dGVnZXIodW5zaWduZWRMb25nVmFsdWUpKTsKLSAgICAgICAgdW5zaWduZWQgbG9uZyBsb25nIHVu
c2lnbmVkTG9uZ0xvbmdWYWx1ZTsKLSAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUtPmFzSW50ZWdl
cih1bnNpZ25lZExvbmdMb25nVmFsdWUpKTsKKyAgICAgICAgaW50ZWdlclZhbHVlID0gdmFsdWUt
PmFzSW50ZWdlcigpOworICAgICAgICBFWFBFQ1RfVFJVRShpbnRlZ2VyVmFsdWUpOworICAgICAg
ICBFWFBFQ1RfRVEoKmludGVnZXJWYWx1ZSwgc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgo
KSk7CiAgICAgfQogCiAgICAgewogICAgICAgICBSZWY8SlNPTjo6VmFsdWU+IHZhbHVlID0gSlNP
Tjo6VmFsdWU6OmNyZWF0ZSgxLjUpOwogICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+dHlwZSgp
ID09IEpTT046OlZhbHVlOjpUeXBlOjpEb3VibGUpOwotICAgICAgICBkb3VibGUgZG91YmxlVmFs
dWU7Ci0gICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlLT5hc0RvdWJsZShkb3VibGVWYWx1ZSkpOwot
ICAgICAgICBFWFBFQ1RfRVEoZG91YmxlVmFsdWUsIDEuNSk7CiAKLSAgICAgICAgZmxvYXQgZmxv
YXRWYWx1ZTsKLSAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUtPmFzRG91YmxlKGZsb2F0VmFsdWUp
KTsKKyAgICAgICAgYXV0byBkb3VibGVWYWx1ZSA9IHZhbHVlLT5hc0RvdWJsZSgpOworICAgICAg
ICBFWFBFQ1RfVFJVRShkb3VibGVWYWx1ZSk7CisgICAgICAgIEVYUEVDVF9FUSgqZG91YmxlVmFs
dWUsIDEuNSk7CiAKLSAgICAgICAgaW50IGludGVnZXJWYWx1ZTsKLSAgICAgICAgRVhQRUNUX1RS
VUUodmFsdWUtPmFzSW50ZWdlcihpbnRlZ2VyVmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX0VRKGlu
dGVnZXJWYWx1ZSwgc3RhdGljX2Nhc3Q8aW50PigxLjUpKTsKLQotICAgICAgICB1bnNpZ25lZCB1
bnNpZ25lZFZhbHVlOwotICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+YXNJbnRlZ2VyKHVuc2ln
bmVkVmFsdWUpKTsKLSAgICAgICAgbG9uZyBsb25nVmFsdWU7Ci0gICAgICAgIEVYUEVDVF9UUlVF
KHZhbHVlLT5hc0ludGVnZXIobG9uZ1ZhbHVlKSk7Ci0gICAgICAgIGxvbmcgbG9uZyBsb25nTG9u
Z1ZhbHVlOwotICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+YXNJbnRlZ2VyKGxvbmdMb25nVmFs
dWUpKTsKLSAgICAgICAgdW5zaWduZWQgbG9uZyB1bnNpZ25lZExvbmdWYWx1ZTsKLSAgICAgICAg
RVhQRUNUX1RSVUUodmFsdWUtPmFzSW50ZWdlcih1bnNpZ25lZExvbmdWYWx1ZSkpOwotICAgICAg
ICB1bnNpZ25lZCBsb25nIGxvbmcgdW5zaWduZWRMb25nTG9uZ1ZhbHVlOwotICAgICAgICBFWFBF
Q1RfVFJVRSh2YWx1ZS0+YXNJbnRlZ2VyKHVuc2lnbmVkTG9uZ0xvbmdWYWx1ZSkpOworICAgICAg
ICAvLyBEb3VibGVzIGNhbiBiZSBnZXQgYXMgaW50ZWdlcnMuCisgICAgICAgIGF1dG8gaW50ZWdl
clZhbHVlID0gdmFsdWUtPmFzSW50ZWdlcigpOworICAgICAgICBFWFBFQ1RfVFJVRShpbnRlZ2Vy
VmFsdWUpOworICAgICAgICBFWFBFQ1RfRVEoKmludGVnZXJWYWx1ZSwgc3RhdGljX2Nhc3Q8aW50
PigxLjUpKTsKICAgICB9CiAKICAgICB7CiAgICAgICAgIFJlZjxKU09OOjpWYWx1ZT4gdmFsdWUg
PSBKU09OOjpWYWx1ZTo6Y3JlYXRlKCJ3ZWJraXQiKTsKICAgICAgICAgRVhQRUNUX1RSVUUodmFs
dWUtPnR5cGUoKSA9PSBKU09OOjpWYWx1ZTo6VHlwZTo6U3RyaW5nKTsKLSAgICAgICAgU3RyaW5n
IHN0cmluZ1ZhbHVlOwotICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+YXNTdHJpbmcoc3RyaW5n
VmFsdWUpKTsKKyAgICAgICAgYXV0byBzdHJpbmdWYWx1ZSA9IHZhbHVlLT5hc1N0cmluZygpOwor
ICAgICAgICBFWFBFQ1RfVFJVRSghIXN0cmluZ1ZhbHVlKTsKICAgICAgICAgRVhQRUNUX0VRKHN0
cmluZ1ZhbHVlLCAid2Via2l0Iik7CiAKICAgICAgICAgU3RyaW5nIG51bGxTdHJpbmc7CiAgICAg
ICAgIHZhbHVlID0gSlNPTjo6VmFsdWU6OmNyZWF0ZShudWxsU3RyaW5nKTsKLSAgICAgICAgRVhQ
RUNUX1RSVUUodmFsdWUtPmFzU3RyaW5nKHN0cmluZ1ZhbHVlKSk7CisgICAgICAgIEVYUEVDVF9U
UlVFKHZhbHVlLT50eXBlKCkgPT0gSlNPTjo6VmFsdWU6OlR5cGU6OlN0cmluZyk7CisgICAgICAg
IHN0cmluZ1ZhbHVlID0gdmFsdWUtPmFzU3RyaW5nKCk7CisgICAgICAgIEVYUEVDVF9GQUxTRSgh
IXN0cmluZ1ZhbHVlKTsKICAgICAgICAgRVhQRUNUX1RSVUUoc3RyaW5nVmFsdWUuaXNOdWxsKCkp
OworICAgICAgICBFWFBFQ1RfVFJVRShzdHJpbmdWYWx1ZS5pc0VtcHR5KCkpOwogCiAgICAgICAg
IHZhbHVlID0gSlNPTjo6VmFsdWU6OmNyZWF0ZShlbXB0eVN0cmluZygpKTsKLSAgICAgICAgRVhQ
RUNUX1RSVUUodmFsdWUtPmFzU3RyaW5nKHN0cmluZ1ZhbHVlKSk7CisgICAgICAgIEVYUEVDVF9U
UlVFKHZhbHVlLT50eXBlKCkgPT0gSlNPTjo6VmFsdWU6OlR5cGU6OlN0cmluZyk7CisgICAgICAg
IHN0cmluZ1ZhbHVlID0gdmFsdWUtPmFzU3RyaW5nKCk7CisgICAgICAgIEVYUEVDVF9UUlVFKCEh
c3RyaW5nVmFsdWUpOwogICAgICAgICBFWFBFQ1RfRkFMU0Uoc3RyaW5nVmFsdWUuaXNOdWxsKCkp
OwogICAgICAgICBFWFBFQ1RfVFJVRShzdHJpbmdWYWx1ZS5pc0VtcHR5KCkpOwogICAgIH0KQEAg
LTEzMSw3ICsxMTcsNyBAQCBURVNUKEpTT05WYWx1ZSwgQ29uc3RydWN0KQogICAgIHsKICAgICAg
ICAgUmVmPEpTT046Ok9iamVjdD4gb2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAg
ICAgICAgRVhQRUNUX1RSVUUob2JqZWN0LT50eXBlKCkgPT0gSlNPTjo6VmFsdWU6OlR5cGU6Ok9i
amVjdCk7Ci0gICAgICAgIEVYUEVDVF9FUShvYmplY3QtPnNpemUoKSwgMCk7CisgICAgICAgIEVY
UEVDVF9FUShvYmplY3QtPnNpemUoKSwgMFUpOwogICAgIH0KIAogICAgIHsKQEAgLTE1NCw0OCAr
MTQwLDQ4IEBAIFRFU1QoSlNPTkFycmF5LCBCYXNpYykKICAgICBFWFBFQ1RfRVEoYXJyYXktPmxl
bmd0aCgpLCAyVSk7CiAgICAgdmFsdWUgPSBhcnJheS0+Z2V0KDEpOwogICAgIEVYUEVDVF9UUlVF
KHZhbHVlLT50eXBlKCkgPT0gSlNPTjo6VmFsdWU6OlR5cGU6OkJvb2xlYW4pOwotICAgIGJvb2wg
Ym9vbGVhblZhbHVlOwotICAgIEVYUEVDVF9UUlVFKHZhbHVlLT5hc0Jvb2xlYW4oYm9vbGVhblZh
bHVlKSk7Ci0gICAgRVhQRUNUX0VRKGJvb2xlYW5WYWx1ZSwgdHJ1ZSk7CisgICAgYXV0byBib29s
ZWFuVmFsdWUgPSB2YWx1ZS0+YXNCb29sZWFuKCk7CisgICAgRVhQRUNUX1RSVUUoYm9vbGVhblZh
bHVlKTsKKyAgICBFWFBFQ1RfRVEoKmJvb2xlYW5WYWx1ZSwgdHJ1ZSk7CiAKICAgICBhcnJheS0+
cHVzaEludGVnZXIoMSk7CiAgICAgRVhQRUNUX0VRKGFycmF5LT5sZW5ndGgoKSwgM1UpOwogICAg
IHZhbHVlID0gYXJyYXktPmdldCgyKTsKICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+dHlwZSgpID09
IEpTT046OlZhbHVlOjpUeXBlOjpJbnRlZ2VyKTsKLSAgICBpbnQgaW50ZWdlclZhbHVlOwotICAg
IEVYUEVDVF9UUlVFKHZhbHVlLT5hc0ludGVnZXIoaW50ZWdlclZhbHVlKSk7Ci0gICAgRVhQRUNU
X0VRKGludGVnZXJWYWx1ZSwgMSk7CisgICAgYXV0byBpbnRlZ2VyVmFsdWUgPSB2YWx1ZS0+YXNJ
bnRlZ2VyKCk7CisgICAgRVhQRUNUX1RSVUUoaW50ZWdlclZhbHVlKTsKKyAgICBFWFBFQ1RfRVEo
KmludGVnZXJWYWx1ZSwgMSk7CiAKICAgICBhcnJheS0+cHVzaERvdWJsZSgxLjUpOwogICAgIEVY
UEVDVF9FUShhcnJheS0+bGVuZ3RoKCksIDRVKTsKICAgICB2YWx1ZSA9IGFycmF5LT5nZXQoMyk7
CiAgICAgRVhQRUNUX1RSVUUodmFsdWUtPnR5cGUoKSA9PSBKU09OOjpWYWx1ZTo6VHlwZTo6RG91
YmxlKTsKLSAgICBkb3VibGUgZG91YmxlVmFsdWU7Ci0gICAgRVhQRUNUX1RSVUUodmFsdWUtPmFz
RG91YmxlKGRvdWJsZVZhbHVlKSk7Ci0gICAgRVhQRUNUX0VRKGRvdWJsZVZhbHVlLCAxLjUpOwor
ICAgIGF1dG8gZG91YmxlVmFsdWUgPSB2YWx1ZS0+YXNEb3VibGUoKTsKKyAgICBFWFBFQ1RfVFJV
RShkb3VibGVWYWx1ZSk7CisgICAgRVhQRUNUX0VRKCpkb3VibGVWYWx1ZSwgMS41KTsKIAogICAg
IGFycmF5LT5wdXNoU3RyaW5nKCJ3ZWJraXQiKTsKICAgICBFWFBFQ1RfRVEoYXJyYXktPmxlbmd0
aCgpLCA1VSk7CiAgICAgdmFsdWUgPSBhcnJheS0+Z2V0KDQpOwogICAgIEVYUEVDVF9UUlVFKHZh
bHVlLT50eXBlKCkgPT0gSlNPTjo6VmFsdWU6OlR5cGU6OlN0cmluZyk7Ci0gICAgU3RyaW5nIHN0
cmluZ1ZhbHVlOwotICAgIEVYUEVDVF9UUlVFKHZhbHVlLT5hc1N0cmluZyhzdHJpbmdWYWx1ZSkp
OworICAgIGF1dG8gc3RyaW5nVmFsdWUgPSB2YWx1ZS0+YXNTdHJpbmcoKTsKKyAgICBFWFBFQ1Rf
VFJVRSghIXN0cmluZ1ZhbHVlKTsKICAgICBFWFBFQ1RfRVEoc3RyaW5nVmFsdWUsICJ3ZWJraXQi
KTsKIAogICAgIGFycmF5LT5wdXNoT2JqZWN0KEpTT046Ok9iamVjdDo6Y3JlYXRlKCkpOwogICAg
IEVYUEVDVF9FUShhcnJheS0+bGVuZ3RoKCksIDZVKTsKICAgICB2YWx1ZSA9IGFycmF5LT5nZXQo
NSk7CiAgICAgRVhQRUNUX1RSVUUodmFsdWUtPnR5cGUoKSA9PSBKU09OOjpWYWx1ZTo6VHlwZTo6
T2JqZWN0KTsKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBvYmplY3RWYWx1ZTsKLSAgICBFWFBF
Q1RfVFJVRSh2YWx1ZS0+YXNPYmplY3Qob2JqZWN0VmFsdWUpKTsKLSAgICBFWFBFQ1RfRVEob2Jq
ZWN0VmFsdWUtPnNpemUoKSwgMCk7CisgICAgYXV0byBvYmplY3RWYWx1ZSA9IHZhbHVlLT5hc09i
amVjdCgpOworICAgIEVYUEVDVF9UUlVFKG9iamVjdFZhbHVlKTsKKyAgICBFWFBFQ1RfRVEob2Jq
ZWN0VmFsdWUtPnNpemUoKSwgMFUpOwogCiAgICAgYXJyYXktPnB1c2hBcnJheShKU09OOjpBcnJh
eTo6Y3JlYXRlKCkpOwogICAgIEVYUEVDVF9FUShhcnJheS0+bGVuZ3RoKCksIDdVKTsKICAgICB2
YWx1ZSA9IGFycmF5LT5nZXQoNik7CiAgICAgRVhQRUNUX1RSVUUodmFsdWUtPnR5cGUoKSA9PSBK
U09OOjpWYWx1ZTo6VHlwZTo6QXJyYXkpOwotICAgIFJlZlB0cjxKU09OOjpBcnJheT4gYXJyYXlW
YWx1ZTsKLSAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+YXNBcnJheShhcnJheVZhbHVlKSk7CisgICAg
YXV0byBhcnJheVZhbHVlID0gdmFsdWUtPmFzQXJyYXkoKTsKKyAgICBFWFBFQ1RfVFJVRShhcnJh
eVZhbHVlKTsKICAgICBFWFBFQ1RfRVEoYXJyYXlWYWx1ZS0+bGVuZ3RoKCksIDBVKTsKIAogICAg
IGF1dG8gaXQgPSBhcnJheS0+YmVnaW4oKTsKQEAgLTI1MSw0MCArMjM3LDQwIEBAIFRFU1QoSlNP
TkFycmF5T2YsIEJhc2ljKQogICAgIEVYUEVDVF9FUShhcnJheS0+bGVuZ3RoKCksIDJVKTsKICAg
ICB2YWx1ZSA9IGFycmF5LT5nZXQoMSk7CiAgICAgRVhQRUNUX1RSVUUodmFsdWUtPnR5cGUoKSA9
PSBKU09OOjpWYWx1ZTo6VHlwZTo6SW50ZWdlcik7Ci0gICAgaW50IGludGVnZXJWYWx1ZTsKLSAg
ICBFWFBFQ1RfVFJVRSh2YWx1ZS0+YXNJbnRlZ2VyKGludGVnZXJWYWx1ZSkpOwotICAgIEVYUEVD
VF9FUShpbnRlZ2VyVmFsdWUsIDEpOworICAgIGF1dG8gaW50ZWdlclZhbHVlID0gdmFsdWUtPmFz
SW50ZWdlcigpOworICAgIEVYUEVDVF9UUlVFKGludGVnZXJWYWx1ZSk7CisgICAgRVhQRUNUX0VR
KCppbnRlZ2VyVmFsdWUsIDEpOwogCiAgICAgYXJyYXktPmFkZEl0ZW0oMS41KTsKICAgICBFWFBF
Q1RfRVEoYXJyYXktPmxlbmd0aCgpLCAzVSk7CiAgICAgdmFsdWUgPSBhcnJheS0+Z2V0KDIpOwog
ICAgIEVYUEVDVF9UUlVFKHZhbHVlLT50eXBlKCkgPT0gSlNPTjo6VmFsdWU6OlR5cGU6OkRvdWJs
ZSk7Ci0gICAgZG91YmxlIGRvdWJsZVZhbHVlOwotICAgIEVYUEVDVF9UUlVFKHZhbHVlLT5hc0Rv
dWJsZShkb3VibGVWYWx1ZSkpOwotICAgIEVYUEVDVF9FUShkb3VibGVWYWx1ZSwgMS41KTsKKyAg
ICBhdXRvIGRvdWJsZVZhbHVlID0gdmFsdWUtPmFzRG91YmxlKCk7CisgICAgRVhQRUNUX1RSVUUo
ZG91YmxlVmFsdWUpOworICAgIEVYUEVDVF9FUSgqZG91YmxlVmFsdWUsIDEuNSk7CiAKICAgICBh
cnJheS0+YWRkSXRlbSgid2Via2l0Iik7CiAgICAgRVhQRUNUX0VRKGFycmF5LT5sZW5ndGgoKSwg
NFUpOwogICAgIHZhbHVlID0gYXJyYXktPmdldCgzKTsKICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+
dHlwZSgpID09IEpTT046OlZhbHVlOjpUeXBlOjpTdHJpbmcpOwotICAgIFN0cmluZyBzdHJpbmdW
YWx1ZTsKLSAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+YXNTdHJpbmcoc3RyaW5nVmFsdWUpKTsKKyAg
ICBhdXRvIHN0cmluZ1ZhbHVlID0gdmFsdWUtPmFzU3RyaW5nKCk7CisgICAgRVhQRUNUX1RSVUUo
ISFzdHJpbmdWYWx1ZSk7CiAgICAgRVhQRUNUX0VRKHN0cmluZ1ZhbHVlLCAid2Via2l0Iik7CiAK
ICAgICBhcnJheS0+YWRkSXRlbShKU09OOjpPYmplY3Q6OmNyZWF0ZSgpKTsKICAgICBFWFBFQ1Rf
RVEoYXJyYXktPmxlbmd0aCgpLCA1VSk7CiAgICAgdmFsdWUgPSBhcnJheS0+Z2V0KDQpOwogICAg
IEVYUEVDVF9UUlVFKHZhbHVlLT50eXBlKCkgPT0gSlNPTjo6VmFsdWU6OlR5cGU6Ok9iamVjdCk7
Ci0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gb2JqZWN0VmFsdWU7Ci0gICAgRVhQRUNUX1RSVUUo
dmFsdWUtPmFzT2JqZWN0KG9iamVjdFZhbHVlKSk7Ci0gICAgRVhQRUNUX0VRKG9iamVjdFZhbHVl
LT5zaXplKCksIDApOworICAgIGF1dG8gb2JqZWN0VmFsdWUgPSB2YWx1ZS0+YXNPYmplY3QoKTsK
KyAgICBFWFBFQ1RfVFJVRShvYmplY3RWYWx1ZSk7CisgICAgRVhQRUNUX0VRKG9iamVjdFZhbHVl
LT5zaXplKCksIDBVKTsKIAogICAgIGFycmF5LT5hZGRJdGVtKEpTT046OkFycmF5OjpjcmVhdGUo
KSk7CiAgICAgRVhQRUNUX0VRKGFycmF5LT5sZW5ndGgoKSwgNlUpOwogICAgIHZhbHVlID0gYXJy
YXktPmdldCg1KTsKICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+dHlwZSgpID09IEpTT046OlZhbHVl
OjpUeXBlOjpBcnJheSk7Ci0gICAgUmVmUHRyPEpTT046OkFycmF5PiBhcnJheVZhbHVlOwotICAg
IEVYUEVDVF9UUlVFKHZhbHVlLT5hc0FycmF5KGFycmF5VmFsdWUpKTsKKyAgICBhdXRvIGFycmF5
VmFsdWUgPSB2YWx1ZS0+YXNBcnJheSgpOworICAgIEVYUEVDVF9UUlVFKGFycmF5VmFsdWUpOwog
ICAgIEVYUEVDVF9FUShhcnJheVZhbHVlLT5sZW5ndGgoKSwgMFUpOwogCiAgICAgYXV0byBpdCA9
IGFycmF5LT5iZWdpbigpOwpAQCAtMzI0LDQ1ICszMTAsNDUgQEAgVEVTVChKU09OT2JqZWN0LCBC
YXNpYykKICAgICBSZWY8SlNPTjo6T2JqZWN0PiBvYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0
ZSgpOwogCiAgICAgb2JqZWN0LT5zZXRWYWx1ZSgibnVsbCIsIEpTT046OlZhbHVlOjpudWxsKCkp
OwotICAgIEVYUEVDVF9FUShvYmplY3QtPnNpemUoKSwgMSk7Ci0gICAgUmVmUHRyPEpTT046OlZh
bHVlPiB2YWx1ZTsKLSAgICBFWFBFQ1RfVFJVRShvYmplY3QtPmdldFZhbHVlKCJudWxsIiwgdmFs
dWUpKTsKKyAgICBFWFBFQ1RfRVEob2JqZWN0LT5zaXplKCksIDFVKTsKKyAgICBhdXRvIHZhbHVl
ID0gb2JqZWN0LT5nZXRWYWx1ZSgibnVsbCIpOworICAgIEVYUEVDVF9UUlVFKHZhbHVlKTsKICAg
ICBFWFBFQ1RfVFJVRSh2YWx1ZS0+aXNOdWxsKCkpOwogCiAgICAgb2JqZWN0LT5zZXRCb29sZWFu
KCJib29sZWFuIiwgdHJ1ZSk7Ci0gICAgRVhQRUNUX0VRKG9iamVjdC0+c2l6ZSgpLCAyKTsKLSAg
ICBib29sIGJvb2xlYW5WYWx1ZTsKLSAgICBFWFBFQ1RfVFJVRShvYmplY3QtPmdldEJvb2xlYW4o
ImJvb2xlYW4iLCBib29sZWFuVmFsdWUpKTsKLSAgICBFWFBFQ1RfRVEoYm9vbGVhblZhbHVlLCB0
cnVlKTsKKyAgICBFWFBFQ1RfRVEob2JqZWN0LT5zaXplKCksIDJVKTsKKyAgICBhdXRvIGJvb2xl
YW5WYWx1ZSA9IG9iamVjdC0+Z2V0Qm9vbGVhbigiYm9vbGVhbiIpOworICAgIEVYUEVDVF9UUlVF
KGJvb2xlYW5WYWx1ZSk7CisgICAgRVhQRUNUX0VRKCpib29sZWFuVmFsdWUsIHRydWUpOwogCiAg
ICAgb2JqZWN0LT5zZXRJbnRlZ2VyKCJpbnRlZ2VyIiwgMSk7Ci0gICAgRVhQRUNUX0VRKG9iamVj
dC0+c2l6ZSgpLCAzKTsKLSAgICBpbnQgaW50ZWdlclZhbHVlOwotICAgIEVYUEVDVF9UUlVFKG9i
amVjdC0+Z2V0SW50ZWdlcigiaW50ZWdlciIsIGludGVnZXJWYWx1ZSkpOwotICAgIEVYUEVDVF9F
UShpbnRlZ2VyVmFsdWUsIDEpOworICAgIEVYUEVDVF9FUShvYmplY3QtPnNpemUoKSwgM1UpOwor
ICAgIGF1dG8gaW50ZWdlclZhbHVlID0gb2JqZWN0LT5nZXRJbnRlZ2VyKCJpbnRlZ2VyIik7Cisg
ICAgRVhQRUNUX1RSVUUoaW50ZWdlclZhbHVlKTsKKyAgICBFWFBFQ1RfRVEoKmludGVnZXJWYWx1
ZSwgMSk7CiAKICAgICBvYmplY3QtPnNldERvdWJsZSgiZG91YmxlIiwgMS41KTsKLSAgICBFWFBF
Q1RfRVEob2JqZWN0LT5zaXplKCksIDQpOwotICAgIGRvdWJsZSBkb3VibGVWYWx1ZTsKLSAgICBF
WFBFQ1RfVFJVRShvYmplY3QtPmdldERvdWJsZSgiZG91YmxlIiwgZG91YmxlVmFsdWUpKTsKLSAg
ICBFWFBFQ1RfRVEoZG91YmxlVmFsdWUsIDEuNSk7CisgICAgRVhQRUNUX0VRKG9iamVjdC0+c2l6
ZSgpLCA0VSk7CisgICAgYXV0byBkb3VibGVWYWx1ZSA9IG9iamVjdC0+Z2V0RG91YmxlKCJkb3Vi
bGUiKTsKKyAgICBFWFBFQ1RfVFJVRShkb3VibGVWYWx1ZSk7CisgICAgRVhQRUNUX0VRKCpkb3Vi
bGVWYWx1ZSwgMS41KTsKIAogICAgIG9iamVjdC0+c2V0U3RyaW5nKCJzdHJpbmciLCAid2Via2l0
Iik7Ci0gICAgRVhQRUNUX0VRKG9iamVjdC0+c2l6ZSgpLCA1KTsKLSAgICBTdHJpbmcgc3RyaW5n
VmFsdWU7Ci0gICAgRVhQRUNUX1RSVUUob2JqZWN0LT5nZXRTdHJpbmcoInN0cmluZyIsIHN0cmlu
Z1ZhbHVlKSk7CisgICAgRVhQRUNUX0VRKG9iamVjdC0+c2l6ZSgpLCA1VSk7CisgICAgYXV0byBz
dHJpbmdWYWx1ZSA9IG9iamVjdC0+Z2V0U3RyaW5nKCJzdHJpbmciKTsKKyAgICBFWFBFQ1RfVFJV
RSghIXN0cmluZ1ZhbHVlKTsKICAgICBFWFBFQ1RfRVEoc3RyaW5nVmFsdWUsICJ3ZWJraXQiKTsK
IAogICAgIG9iamVjdC0+c2V0T2JqZWN0KCJvYmplY3QiLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgp
KTsKLSAgICBFWFBFQ1RfRVEob2JqZWN0LT5zaXplKCksIDYpOwotICAgIFJlZlB0cjxKU09OOjpP
YmplY3Q+IG9iamVjdFZhbHVlOwotICAgIEVYUEVDVF9UUlVFKG9iamVjdC0+Z2V0T2JqZWN0KCJv
YmplY3QiLCBvYmplY3RWYWx1ZSkpOwotICAgIEVYUEVDVF9FUShvYmplY3RWYWx1ZS0+c2l6ZSgp
LCAwKTsKKyAgICBFWFBFQ1RfRVEob2JqZWN0LT5zaXplKCksIDZVKTsKKyAgICBhdXRvIG9iamVj
dFZhbHVlID0gb2JqZWN0LT5nZXRPYmplY3QoIm9iamVjdCIpOworICAgIEVYUEVDVF9UUlVFKG9i
amVjdFZhbHVlKTsKKyAgICBFWFBFQ1RfRVEob2JqZWN0VmFsdWUtPnNpemUoKSwgMFUpOwogCiAg
ICAgb2JqZWN0LT5zZXRBcnJheSgiYXJyYXkiLCBKU09OOjpBcnJheTo6Y3JlYXRlKCkpOwotICAg
IEVYUEVDVF9FUShvYmplY3QtPnNpemUoKSwgNyk7Ci0gICAgUmVmUHRyPEpTT046OkFycmF5PiBh
cnJheVZhbHVlOwotICAgIEVYUEVDVF9UUlVFKG9iamVjdC0+Z2V0QXJyYXkoImFycmF5IiwgYXJy
YXlWYWx1ZSkpOworICAgIEVYUEVDVF9FUShvYmplY3QtPnNpemUoKSwgN1UpOworICAgIGF1dG8g
YXJyYXlWYWx1ZSA9IG9iamVjdC0+Z2V0QXJyYXkoImFycmF5Iik7CisgICAgRVhQRUNUX1RSVUUo
YXJyYXlWYWx1ZSk7CiAgICAgRVhQRUNUX0VRKGFycmF5VmFsdWUtPmxlbmd0aCgpLCAwVSk7CiAK
ICAgICBWZWN0b3I8Y29uc3QgY2hhcio+IGtleXMgPSB7ICJudWxsIiwgImJvb2xlYW4iLCAiaW50
ZWdlciIsICJkb3VibGUiLCAic3RyaW5nIiwgIm9iamVjdCIsICJhcnJheSIgfTsKQEAgLTM3Niwz
MSArMzYyLDMxIEBAIFRFU1QoSlNPTk9iamVjdCwgQmFzaWMpCiAgICAgRVhQRUNUX1RSVUUoa2V5
cy5pc0VtcHR5KCkpOwogCiAgICAgb2JqZWN0LT5yZW1vdmUoIm51bGwiKTsKLSAgICBFWFBFQ1Rf
RVEob2JqZWN0LT5zaXplKCksIDYpOworICAgIEVYUEVDVF9FUShvYmplY3QtPnNpemUoKSwgNlUp
OwogICAgIEVYUEVDVF9UUlVFKG9iamVjdC0+ZmluZCgibnVsbCIpID09IG9iamVjdC0+ZW5kKCkp
OwogCiAgICAgb2JqZWN0LT5yZW1vdmUoImJvb2xlYW4iKTsKLSAgICBFWFBFQ1RfRVEob2JqZWN0
LT5zaXplKCksIDUpOworICAgIEVYUEVDVF9FUShvYmplY3QtPnNpemUoKSwgNVUpOwogICAgIEVY
UEVDVF9UUlVFKG9iamVjdC0+ZmluZCgiYm9vbGVhbiIpID09IG9iamVjdC0+ZW5kKCkpOwogCiAg
ICAgb2JqZWN0LT5yZW1vdmUoImludGVnZXIiKTsKLSAgICBFWFBFQ1RfRVEob2JqZWN0LT5zaXpl
KCksIDQpOworICAgIEVYUEVDVF9FUShvYmplY3QtPnNpemUoKSwgNFUpOwogICAgIEVYUEVDVF9U
UlVFKG9iamVjdC0+ZmluZCgiaW50ZWdlciIpID09IG9iamVjdC0+ZW5kKCkpOwogCiAgICAgb2Jq
ZWN0LT5yZW1vdmUoImRvdWJsZSIpOwotICAgIEVYUEVDVF9FUShvYmplY3QtPnNpemUoKSwgMyk7
CisgICAgRVhQRUNUX0VRKG9iamVjdC0+c2l6ZSgpLCAzVSk7CiAgICAgRVhQRUNUX1RSVUUob2Jq
ZWN0LT5maW5kKCJkb3VibGUiKSA9PSBvYmplY3QtPmVuZCgpKTsKIAogICAgIG9iamVjdC0+cmVt
b3ZlKCJzdHJpbmciKTsKLSAgICBFWFBFQ1RfRVEob2JqZWN0LT5zaXplKCksIDIpOworICAgIEVY
UEVDVF9FUShvYmplY3QtPnNpemUoKSwgMlUpOwogICAgIEVYUEVDVF9UUlVFKG9iamVjdC0+Zmlu
ZCgic3RyaW5nIikgPT0gb2JqZWN0LT5lbmQoKSk7CiAKICAgICBvYmplY3QtPnJlbW92ZSgib2Jq
ZWN0Iik7Ci0gICAgRVhQRUNUX0VRKG9iamVjdC0+c2l6ZSgpLCAxKTsKKyAgICBFWFBFQ1RfRVEo
b2JqZWN0LT5zaXplKCksIDFVKTsKICAgICBFWFBFQ1RfVFJVRShvYmplY3QtPmZpbmQoIm9iamVj
dCIpID09IG9iamVjdC0+ZW5kKCkpOwogCiAgICAgb2JqZWN0LT5yZW1vdmUoImFycmF5Iik7Ci0g
ICAgRVhQRUNUX0VRKG9iamVjdC0+c2l6ZSgpLCAwKTsKKyAgICBFWFBFQ1RfRVEob2JqZWN0LT5z
aXplKCksIDBVKTsKICAgICBFWFBFQ1RfVFJVRShvYmplY3QtPmZpbmQoImFycmF5IikgPT0gb2Jq
ZWN0LT5lbmQoKSk7CiB9CiAKQEAgLTQ3OSwyMDEgKzQ2NSwyMDQgQEAgVEVTVChKU09OVmFsdWUs
IFRvSlNPTlN0cmluZykKIFRFU1QoSlNPTlZhbHVlLCBQYXJzZUpTT04pCiB7CiAgICAgewotICAg
ICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHZhbHVlOwotICAgICAgICBFWFBFQ1RfVFJVRShKU09O
OjpWYWx1ZTo6cGFyc2VKU09OKCJudWxsIiwgdmFsdWUpKTsKKyAgICAgICAgYXV0byB2YWx1ZSA9
IEpTT046OlZhbHVlOjpwYXJzZUpTT04oIm51bGwiKTsKKyAgICAgICAgRVhQRUNUX1RSVUUodmFs
dWUpOwogICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+aXNOdWxsKCkpOwogICAgIH0KIAogICAg
IHsKLSAgICAgICAgUmVmUHRyPEpTT046OlZhbHVlPiB2YWx1ZTsKLSAgICAgICAgRVhQRUNUX1RS
VUUoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigidHJ1ZSIsIHZhbHVlKSk7CisgICAgICAgIGF1dG8g
dmFsdWUgPSBKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJ0cnVlIik7CisgICAgICAgIEVYUEVDVF9U
UlVFKHZhbHVlKTsKICAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUtPnR5cGUoKSA9PSBKU09OOjpW
YWx1ZTo6VHlwZTo6Qm9vbGVhbik7Ci0gICAgICAgIGJvb2wgYm9vbGVhblZhbHVlOwotICAgICAg
ICBFWFBFQ1RfVFJVRSh2YWx1ZS0+YXNCb29sZWFuKGJvb2xlYW5WYWx1ZSkpOwotICAgICAgICBF
WFBFQ1RfRVEoYm9vbGVhblZhbHVlLCB0cnVlKTsKKyAgICAgICAgYXV0byBib29sZWFuVmFsdWUg
PSB2YWx1ZS0+YXNCb29sZWFuKCk7CisgICAgICAgIEVYUEVDVF9UUlVFKGJvb2xlYW5WYWx1ZSk7
CisgICAgICAgIEVYUEVDVF9FUSgqYm9vbGVhblZhbHVlLCB0cnVlKTsKIAotICAgICAgICBFWFBF
Q1RfVFJVRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJmYWxzZSIsIHZhbHVlKSk7CisgICAgICAg
IHZhbHVlID0gSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiZmFsc2UiKTsKKyAgICAgICAgRVhQRUNU
X1RSVUUodmFsdWUpOwogICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+dHlwZSgpID09IEpTT046
OlZhbHVlOjpUeXBlOjpCb29sZWFuKTsKLSAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUtPmFzQm9v
bGVhbihib29sZWFuVmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX0VRKGJvb2xlYW5WYWx1ZSwgZmFs
c2UpOworICAgICAgICBib29sZWFuVmFsdWUgPSB2YWx1ZS0+YXNCb29sZWFuKCk7CisgICAgICAg
IEVYUEVDVF9UUlVFKGJvb2xlYW5WYWx1ZSk7CisgICAgICAgIEVYUEVDVF9FUSgqYm9vbGVhblZh
bHVlLCBmYWxzZSk7CiAgICAgfQogCiAgICAgewotICAgICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+
IHZhbHVlOwotICAgICAgICBFWFBFQ1RfVFJVRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCIxIiwg
dmFsdWUpKTsKKyAgICAgICAgYXV0byB2YWx1ZSA9IEpTT046OlZhbHVlOjpwYXJzZUpTT04oIjEi
KTsKKyAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUpOwogICAgICAgICAvLyBOdW1iZXJzIGFyZSBh
bHdheXMgcGFyc2VkIGFzIGRvdWJsZS4KICAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUtPnR5cGUo
KSA9PSBKU09OOjpWYWx1ZTo6VHlwZTo6RG91YmxlKTsKLSAgICAgICAgZG91YmxlIGRvdWJsZVZh
bHVlOwotICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+YXNEb3VibGUoZG91YmxlVmFsdWUpKTsK
LSAgICAgICAgRVhQRUNUX0VRKGRvdWJsZVZhbHVlLCAxLjApOworICAgICAgICBhdXRvIGRvdWJs
ZVZhbHVlID0gdmFsdWUtPmFzRG91YmxlKCk7CisgICAgICAgIEVYUEVDVF9UUlVFKGRvdWJsZVZh
bHVlKTsKKyAgICAgICAgRVhQRUNUX0VRKCpkb3VibGVWYWx1ZSwgMS4wKTsKIAotICAgICAgICBF
WFBFQ1RfVFJVRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCIxLjUiLCB2YWx1ZSkpOworICAgICAg
ICB2YWx1ZSA9IEpTT046OlZhbHVlOjpwYXJzZUpTT04oIjEuNSIpOworICAgICAgICBFWFBFQ1Rf
VFJVRSh2YWx1ZSk7CiAgICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlLT50eXBlKCkgPT0gSlNPTjo6
VmFsdWU6OlR5cGU6OkRvdWJsZSk7Ci0gICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlLT5hc0RvdWJs
ZShkb3VibGVWYWx1ZSkpOwotICAgICAgICBFWFBFQ1RfRVEoZG91YmxlVmFsdWUsIDEuNSk7Cisg
ICAgICAgIGRvdWJsZVZhbHVlID0gdmFsdWUtPmFzRG91YmxlKCk7CisgICAgICAgIEVYUEVDVF9U
UlVFKGRvdWJsZVZhbHVlKTsKKyAgICAgICAgRVhQRUNUX0VRKCpkb3VibGVWYWx1ZSwgMS41KTsK
ICAgICB9CiAKICAgICB7Ci0gICAgICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gdmFsdWU7Ci0gICAg
ICAgIEVYUEVDVF9UUlVFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIlwic3RyaW5nXCIiLCB2YWx1
ZSkpOworICAgICAgICBhdXRvIHZhbHVlID0gSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiXCJzdHJp
bmdcIiIpOworICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1ZSk7CiAgICAgICAgIEVYUEVDVF9UUlVF
KHZhbHVlLT50eXBlKCkgPT0gSlNPTjo6VmFsdWU6OlR5cGU6OlN0cmluZyk7Ci0gICAgICAgIFN0
cmluZyBzdHJpbmdWYWx1ZTsKLSAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUtPmFzU3RyaW5nKHN0
cmluZ1ZhbHVlKSk7CisgICAgICAgIGF1dG8gc3RyaW5nVmFsdWUgPSB2YWx1ZS0+YXNTdHJpbmco
KTsKKyAgICAgICAgRVhQRUNUX1RSVUUoISFzdHJpbmdWYWx1ZSk7CiAgICAgICAgIEVYUEVDVF9F
UShzdHJpbmdWYWx1ZSwgInN0cmluZyIpOwogICAgIH0KIAogICAgIHsKLSAgICAgICAgUmVmUHRy
PEpTT046OlZhbHVlPiB2YWx1ZTsKLSAgICAgICAgRVhQRUNUX1RSVUUoSlNPTjo6VmFsdWU6OnBh
cnNlSlNPTigiW10iLCB2YWx1ZSkpOworICAgICAgICBhdXRvIHZhbHVlID0gSlNPTjo6VmFsdWU6
OnBhcnNlSlNPTigiW10iKTsKKyAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUpOwogICAgICAgICBF
WFBFQ1RfVFJVRSh2YWx1ZS0+dHlwZSgpID09IEpTT046OlZhbHVlOjpUeXBlOjpBcnJheSk7Ci0g
ICAgICAgIFJlZlB0cjxKU09OOjpBcnJheT4gYXJyYXlWYWx1ZTsKLSAgICAgICAgRVhQRUNUX1RS
VUUodmFsdWUtPmFzQXJyYXkoYXJyYXlWYWx1ZSkpOworICAgICAgICBhdXRvIGFycmF5VmFsdWUg
PSB2YWx1ZS0+YXNBcnJheSgpOworICAgICAgICBFWFBFQ1RfVFJVRShhcnJheVZhbHVlKTsKICAg
ICAgICAgRVhQRUNUX0VRKGFycmF5VmFsdWUtPmxlbmd0aCgpLCAwVSk7CiAKLSAgICAgICAgRVhQ
RUNUX1RSVUUoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiW251bGwsIDEgLDIuNSxbe1wiZm9vXCI6
XCJiYXJcIn0se1wiYmF6XCI6ZmFsc2V9XSxcIndlYmtpdFwiXSIsIHZhbHVlKSk7CisgICAgICAg
IHZhbHVlID0gSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiW251bGwsIDEgLDIuNSxbe1wiZm9vXCI6
XCJiYXJcIn0se1wiYmF6XCI6ZmFsc2V9XSxcIndlYmtpdFwiXSIpOworICAgICAgICBFWFBFQ1Rf
VFJVRSh2YWx1ZSk7CiAgICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlLT50eXBlKCkgPT0gSlNPTjo6
VmFsdWU6OlR5cGU6OkFycmF5KTsKLSAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUtPmFzQXJyYXko
YXJyYXlWYWx1ZSkpOworICAgICAgICBhcnJheVZhbHVlID0gdmFsdWUtPmFzQXJyYXkoKTsKKyAg
ICAgICAgRVhQRUNUX1RSVUUoYXJyYXlWYWx1ZSk7CiAgICAgICAgIEVYUEVDVF9FUShhcnJheVZh
bHVlLT5sZW5ndGgoKSwgNVUpOwogICAgICAgICBhdXRvIGl0ID0gYXJyYXlWYWx1ZS0+YmVnaW4o
KTsKLSAgICAgICAgUmVmUHRyPEpTT046OlZhbHVlPiBpdGVtVmFsdWUgPSBpdC0+Z2V0KCk7Ci0g
ICAgICAgIEVYUEVDVF9UUlVFKGl0ZW1WYWx1ZS0+dHlwZSgpID09IEpTT046OlZhbHVlOjpUeXBl
OjpOdWxsKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoKCppdCktPnR5cGUoKSA9PSBKU09OOjpWYWx1
ZTo6VHlwZTo6TnVsbCk7CiAgICAgICAgICsraXQ7CiAgICAgICAgIEVYUEVDVF9GQUxTRShpdCA9
PSBhcnJheVZhbHVlLT5lbmQoKSk7CiAKLSAgICAgICAgaXRlbVZhbHVlID0gaXQtPmdldCgpOwot
ICAgICAgICBFWFBFQ1RfVFJVRShpdGVtVmFsdWUtPnR5cGUoKSA9PSBKU09OOjpWYWx1ZTo6VHlw
ZTo6RG91YmxlKTsKLSAgICAgICAgaW50IGludGVnZXJWYWx1ZTsKLSAgICAgICAgRVhQRUNUX1RS
VUUoaXRlbVZhbHVlLT5hc0ludGVnZXIoaW50ZWdlclZhbHVlKSk7Ci0gICAgICAgIEVYUEVDVF9F
UShpbnRlZ2VyVmFsdWUsIDEpOworICAgICAgICBFWFBFQ1RfVFJVRSgoKml0KS0+dHlwZSgpID09
IEpTT046OlZhbHVlOjpUeXBlOjpEb3VibGUpOworICAgICAgICBhdXRvIGludGVnZXJWYWx1ZSA9
ICgqaXQpLT5hc0ludGVnZXIoKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoaW50ZWdlclZhbHVlKTsK
KyAgICAgICAgRVhQRUNUX0VRKCppbnRlZ2VyVmFsdWUsIDEpOwogICAgICAgICArK2l0OwogICAg
ICAgICBFWFBFQ1RfRkFMU0UoaXQgPT0gYXJyYXlWYWx1ZS0+ZW5kKCkpOwogCi0gICAgICAgIGl0
ZW1WYWx1ZSA9IGl0LT5nZXQoKTsKLSAgICAgICAgRVhQRUNUX1RSVUUoaXRlbVZhbHVlLT50eXBl
KCkgPT0gSlNPTjo6VmFsdWU6OlR5cGU6OkRvdWJsZSk7Ci0gICAgICAgIGRvdWJsZSBkb3VibGVW
YWx1ZTsKLSAgICAgICAgRVhQRUNUX1RSVUUoaXRlbVZhbHVlLT5hc0RvdWJsZShkb3VibGVWYWx1
ZSkpOwotICAgICAgICBFWFBFQ1RfRVEoZG91YmxlVmFsdWUsIDIuNSk7CisgICAgICAgIEVYUEVD
VF9UUlVFKCgqaXQpLT50eXBlKCkgPT0gSlNPTjo6VmFsdWU6OlR5cGU6OkRvdWJsZSk7CisgICAg
ICAgIGF1dG8gZG91YmxlVmFsdWUgPSAoKml0KS0+YXNEb3VibGUoKTsKKyAgICAgICAgRVhQRUNU
X1RSVUUoZG91YmxlVmFsdWUpOworICAgICAgICBFWFBFQ1RfRVEoKmRvdWJsZVZhbHVlLCAyLjUp
OwogICAgICAgICArK2l0OwogICAgICAgICBFWFBFQ1RfRkFMU0UoaXQgPT0gYXJyYXlWYWx1ZS0+
ZW5kKCkpOwogCi0gICAgICAgIGl0ZW1WYWx1ZSA9IGl0LT5nZXQoKTsKLSAgICAgICAgRVhQRUNU
X1RSVUUoaXRlbVZhbHVlLT50eXBlKCkgPT0gSlNPTjo6VmFsdWU6OlR5cGU6OkFycmF5KTsKLSAg
ICAgICAgUmVmUHRyPEpTT046OkFycmF5PiBzdWJBcnJheVZhbHVlOwotICAgICAgICBFWFBFQ1Rf
VFJVRShpdGVtVmFsdWUtPmFzQXJyYXkoc3ViQXJyYXlWYWx1ZSkpOworICAgICAgICBFWFBFQ1Rf
VFJVRSgoKml0KS0+dHlwZSgpID09IEpTT046OlZhbHVlOjpUeXBlOjpBcnJheSk7CisgICAgICAg
IGF1dG8gc3ViQXJyYXlWYWx1ZSA9ICgqaXQpLT5hc0FycmF5KCk7CisgICAgICAgIEVYUEVDVF9U
UlVFKHN1YkFycmF5VmFsdWUpOwogICAgICAgICBFWFBFQ1RfRVEoc3ViQXJyYXlWYWx1ZS0+bGVu
Z3RoKCksIDJVKTsKLSAgICAgICAgUmVmUHRyPEpTT046OlZhbHVlPiBvYmplY3RWYWx1ZSA9IHN1
YkFycmF5VmFsdWUtPmdldCgwKTsKKyAgICAgICAgYXV0byBvYmplY3RWYWx1ZSA9IHN1YkFycmF5
VmFsdWUtPmdldCgwKTsKICAgICAgICAgRVhQRUNUX1RSVUUob2JqZWN0VmFsdWUtPnR5cGUoKSA9
PSBKU09OOjpWYWx1ZTo6VHlwZTo6T2JqZWN0KTsKLSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVj
dD4gb2JqZWN0OwotICAgICAgICBFWFBFQ1RfVFJVRShvYmplY3RWYWx1ZS0+YXNPYmplY3Qob2Jq
ZWN0KSk7Ci0gICAgICAgIEVYUEVDVF9FUShvYmplY3QtPnNpemUoKSwgMSk7Ci0gICAgICAgIFN0
cmluZyBzdHJpbmdWYWx1ZTsKLSAgICAgICAgRVhQRUNUX1RSVUUob2JqZWN0LT5nZXRTdHJpbmco
ImZvbyIsIHN0cmluZ1ZhbHVlKSk7CisgICAgICAgIGF1dG8gb2JqZWN0ID0gb2JqZWN0VmFsdWUt
PmFzT2JqZWN0KCk7CisgICAgICAgIEVYUEVDVF9UUlVFKG9iamVjdCk7CisgICAgICAgIEVYUEVD
VF9FUShvYmplY3QtPnNpemUoKSwgMVUpOworICAgICAgICBhdXRvIHN0cmluZ1ZhbHVlID0gb2Jq
ZWN0LT5nZXRTdHJpbmcoImZvbyIpOworICAgICAgICBFWFBFQ1RfVFJVRSghIXN0cmluZ1ZhbHVl
KTsKICAgICAgICAgRVhQRUNUX0VRKHN0cmluZ1ZhbHVlLCAiYmFyIik7CiAgICAgICAgIG9iamVj
dFZhbHVlID0gc3ViQXJyYXlWYWx1ZS0+Z2V0KDEpOwogICAgICAgICBFWFBFQ1RfVFJVRShvYmpl
Y3RWYWx1ZS0+dHlwZSgpID09IEpTT046OlZhbHVlOjpUeXBlOjpPYmplY3QpOwotICAgICAgICBF
WFBFQ1RfVFJVRShvYmplY3RWYWx1ZS0+YXNPYmplY3Qob2JqZWN0KSk7Ci0gICAgICAgIEVYUEVD
VF9FUShvYmplY3QtPnNpemUoKSwgMSk7Ci0gICAgICAgIGJvb2wgYm9vbGVhblZhbHVlOwotICAg
ICAgICBFWFBFQ1RfVFJVRShvYmplY3QtPmdldEJvb2xlYW4oImJheiIsIGJvb2xlYW5WYWx1ZSkp
OwotICAgICAgICBFWFBFQ1RfRVEoYm9vbGVhblZhbHVlLCBmYWxzZSk7CisgICAgICAgIG9iamVj
dCA9b2JqZWN0VmFsdWUtPmFzT2JqZWN0KCk7CisgICAgICAgIEVYUEVDVF9UUlVFKG9iamVjdCk7
CisgICAgICAgIEVYUEVDVF9FUShvYmplY3QtPnNpemUoKSwgMVUpOworICAgICAgICBhdXRvIGJv
b2xlYW5WYWx1ZSA9IG9iamVjdC0+Z2V0Qm9vbGVhbigiYmF6Iik7CisgICAgICAgIEVYUEVDVF9U
UlVFKGJvb2xlYW5WYWx1ZSk7CisgICAgICAgIEVYUEVDVF9FUSgqYm9vbGVhblZhbHVlLCBmYWxz
ZSk7CiAgICAgICAgICsraXQ7CiAgICAgICAgIEVYUEVDVF9GQUxTRShpdCA9PSBhcnJheVZhbHVl
LT5lbmQoKSk7CiAKLSAgICAgICAgaXRlbVZhbHVlID0gaXQtPmdldCgpOwotICAgICAgICBFWFBF
Q1RfVFJVRShpdGVtVmFsdWUtPnR5cGUoKSA9PSBKU09OOjpWYWx1ZTo6VHlwZTo6U3RyaW5nKTsK
LSAgICAgICAgRVhQRUNUX1RSVUUoaXRlbVZhbHVlLT5hc1N0cmluZyhzdHJpbmdWYWx1ZSkpOwor
ICAgICAgICBFWFBFQ1RfVFJVRSgoKml0KS0+dHlwZSgpID09IEpTT046OlZhbHVlOjpUeXBlOjpT
dHJpbmcpOworICAgICAgICBzdHJpbmdWYWx1ZSA9ICgqaXQpLT5hc1N0cmluZygpOworICAgICAg
ICBFWFBFQ1RfVFJVRSghIXN0cmluZ1ZhbHVlKTsKICAgICAgICAgRVhQRUNUX0VRKHN0cmluZ1Zh
bHVlLCAid2Via2l0Iik7CiAgICAgICAgICsraXQ7CiAgICAgICAgIEVYUEVDVF9UUlVFKGl0ID09
IGFycmF5VmFsdWUtPmVuZCgpKTsKICAgICB9CiAKICAgICB7Ci0gICAgICAgIFJlZlB0cjxKU09O
OjpWYWx1ZT4gdmFsdWU7Ci0gICAgICAgIEVYUEVDVF9UUlVFKEpTT046OlZhbHVlOjpwYXJzZUpT
T04oInt9IiwgdmFsdWUpKTsKKyAgICAgICAgYXV0byB2YWx1ZSA9IEpTT046OlZhbHVlOjpwYXJz
ZUpTT04oInt9Iik7CisgICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlKTsKICAgICAgICAgRVhQRUNU
X1RSVUUodmFsdWUtPnR5cGUoKSA9PSBKU09OOjpWYWx1ZTo6VHlwZTo6T2JqZWN0KTsKLSAgICAg
ICAgUmVmUHRyPEpTT046Ok9iamVjdD4gb2JqZWN0VmFsdWU7Ci0gICAgICAgIEVYUEVDVF9UUlVF
KHZhbHVlLT5hc09iamVjdChvYmplY3RWYWx1ZSkpOwotICAgICAgICBFWFBFQ1RfRVEob2JqZWN0
VmFsdWUtPnNpemUoKSwgMCk7CisgICAgICAgIGF1dG8gb2JqZWN0VmFsdWUgPSB2YWx1ZS0+YXNP
YmplY3QoKTsKKyAgICAgICAgRVhQRUNUX1RSVUUob2JqZWN0VmFsdWUpOworICAgICAgICBFWFBF
Q1RfRVEob2JqZWN0VmFsdWUtPnNpemUoKSwgMFUpOwogCi0gICAgICAgIEVYUEVDVF9UUlVFKEpT
T046OlZhbHVlOjpwYXJzZUpTT04oIntcImZvb1wiOiBcImJhclwiLCBcImJhelwiOiB7XCJzdWJc
IjpbbnVsbCxmYWxzZV19fSIsIHZhbHVlKSk7CisgICAgICAgIHZhbHVlID0gSlNPTjo6VmFsdWU6
OnBhcnNlSlNPTigie1wiZm9vXCI6IFwiYmFyXCIsIFwiYmF6XCI6IHtcInN1YlwiOltudWxsLGZh
bHNlXX19Iik7CisgICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlKTsKICAgICAgICAgRVhQRUNUX1RS
VUUodmFsdWUtPnR5cGUoKSA9PSBKU09OOjpWYWx1ZTo6VHlwZTo6T2JqZWN0KTsKLSAgICAgICAg
RVhQRUNUX1RSVUUodmFsdWUtPmFzT2JqZWN0KG9iamVjdFZhbHVlKSk7Ci0gICAgICAgIEVYUEVD
VF9FUShvYmplY3RWYWx1ZS0+c2l6ZSgpLCAyKTsKKyAgICAgICAgb2JqZWN0VmFsdWUgPSB2YWx1
ZS0+YXNPYmplY3QoKTsKKyAgICAgICAgRVhQRUNUX1RSVUUob2JqZWN0VmFsdWUpOworICAgICAg
ICBFWFBFQ1RfRVEob2JqZWN0VmFsdWUtPnNpemUoKSwgMlUpOwogCi0gICAgICAgIFN0cmluZyBz
dHJpbmdWYWx1ZTsKLSAgICAgICAgRVhQRUNUX1RSVUUob2JqZWN0VmFsdWUtPmdldFN0cmluZygi
Zm9vIiwgc3RyaW5nVmFsdWUpKTsKKyAgICAgICAgYXV0byBzdHJpbmdWYWx1ZSA9IG9iamVjdFZh
bHVlLT5nZXRTdHJpbmcoImZvbyIpOworICAgICAgICBFWFBFQ1RfVFJVRSghIXN0cmluZ1ZhbHVl
KTsKICAgICAgICAgRVhQRUNUX0VRKHN0cmluZ1ZhbHVlLCAiYmFyIik7CiAKLSAgICAgICAgUmVm
UHRyPEpTT046Ok9iamVjdD4gb2JqZWN0OwotICAgICAgICBFWFBFQ1RfVFJVRShvYmplY3RWYWx1
ZS0+Z2V0T2JqZWN0KCJiYXoiLCBvYmplY3QpKTsKLSAgICAgICAgRVhQRUNUX0VRKG9iamVjdC0+
c2l6ZSgpLCAxKTsKLSAgICAgICAgUmVmUHRyPEpTT046OkFycmF5PiBhcnJheTsKLSAgICAgICAg
RVhQRUNUX1RSVUUob2JqZWN0LT5nZXRBcnJheSgic3ViIiwgYXJyYXkpKTsKKyAgICAgICAgYXV0
byBvYmplY3QgPSBvYmplY3RWYWx1ZS0+Z2V0T2JqZWN0KCJiYXoiKTsKKyAgICAgICAgRVhQRUNU
X1RSVUUob2JqZWN0KTsKKyAgICAgICAgRVhQRUNUX0VRKG9iamVjdC0+c2l6ZSgpLCAxVSk7Cisg
ICAgICAgIGF1dG8gYXJyYXkgPSBvYmplY3QtPmdldEFycmF5KCJzdWIiKTsKKyAgICAgICAgRVhQ
RUNUX1RSVUUoYXJyYXkpOwogICAgICAgICBFWFBFQ1RfRVEoYXJyYXktPmxlbmd0aCgpLCAyVSk7
CiAgICAgfQogCiAgICAgewotICAgICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHZhbHVlOwotICAg
ICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiLCIsIHZhbHVlKSk7Ci0g
ICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJcImZvbyIsIHZhbHVl
KSk7Ci0gICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJmb29cIiIs
IHZhbHVlKSk7Ci0gICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJU
clVlIiwgdmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpT
T04oIkZhbHNlIiwgdmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpw
YXJzZUpTT04oIjEuZCIsIHZhbHVlKSk7Ci0gICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1
ZTo6cGFyc2VKU09OKCJbMSxdIiwgdmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046
OlZhbHVlOjpwYXJzZUpTT04oIjEsMl0iLCB2YWx1ZSkpOwotICAgICAgICBFWFBFQ1RfRkFMU0Uo
SlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiWzEsMiIsIHZhbHVlKSk7Ci0gICAgICAgIEVYUEVDVF9G
QUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJbMSAyXSIsIHZhbHVlKSk7Ci0gICAgICAgIEVY
UEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJbMSwyXV0iLCB2YWx1ZSkpOwotICAg
ICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiWzEsMl0sIiwgdmFsdWUp
KTsKLSAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIntmb286XCJi
YXJcIn0iLCB2YWx1ZSkpOwotICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNl
SlNPTigie1wiZm9vXCI6YmFyfSIsIHZhbHVlKSk7Ci0gICAgICAgIEVYUEVDVF9GQUxTRShKU09O
OjpWYWx1ZTo6cGFyc2VKU09OKCJ7XCJmb286XCJiYXJcIn0iLCB2YWx1ZSkpOwotICAgICAgICBF
WFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigie2Zvb1wiOlwiYmFyXCJ9IiwgdmFs
dWUpKTsKLSAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oInt7XCJm
b29cIjpcImJhclwifX0iLCB2YWx1ZSkpOwotICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFs
dWU6OnBhcnNlSlNPTigie1wiZm9vXCI6XCJiYXJcIn0sIiwgdmFsdWUpKTsKLSAgICAgICAgRVhQ
RUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIlt7XCJmb29cIjpcImJhclwifSx7XCJi
YXpcIjpmYWxzZX0sXSIsIHZhbHVlKSk7Ci0gICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1
ZTo6cGFyc2VKU09OKCJbe1wiZm9vXCI6e1wiYmF6XCI6ZmFsc2V9XSIsIHZhbHVlKSk7CisgICAg
ICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCIsIikpOworICAgICAgICBF
WFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiXCJmb28iKSk7CisgICAgICAgIEVY
UEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJmb29cIiIpKTsKKyAgICAgICAgRVhQ
RUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIlRyVWUiKSk7CisgICAgICAgIEVYUEVD
VF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJGYWxzZSIpKTsKKyAgICAgICAgRVhQRUNU
X0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIjEuZCIpKTsKKyAgICAgICAgRVhQRUNUX0ZB
TFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIlsxLF0iKSk7CisgICAgICAgIEVYUEVDVF9GQUxT
RShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCIxLDJdIikpOworICAgICAgICBFWFBFQ1RfRkFMU0Uo
SlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiWzEsMiIpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKEpT
T046OlZhbHVlOjpwYXJzZUpTT04oIlsxIDJdIikpOworICAgICAgICBFWFBFQ1RfRkFMU0UoSlNP
Tjo6VmFsdWU6OnBhcnNlSlNPTigiWzEsMl1dIikpOworICAgICAgICBFWFBFQ1RfRkFMU0UoSlNP
Tjo6VmFsdWU6OnBhcnNlSlNPTigiWzEsMl0sIikpOworICAgICAgICBFWFBFQ1RfRkFMU0UoSlNP
Tjo6VmFsdWU6OnBhcnNlSlNPTigie2ZvbzpcImJhclwifSIpKTsKKyAgICAgICAgRVhQRUNUX0ZB
TFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIntcImZvb1wiOmJhcn0iKSk7CisgICAgICAgIEVY
UEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJ7XCJmb286XCJiYXJcIn0iKSk7Cisg
ICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJ7Zm9vXCI6XCJiYXJc
In0iKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJ7e1wi
Zm9vXCI6XCJiYXJcIn19IikpOworICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBh
cnNlSlNPTigie1wiZm9vXCI6XCJiYXJcIn0sIikpOworICAgICAgICBFWFBFQ1RfRkFMU0UoSlNP
Tjo6VmFsdWU6OnBhcnNlSlNPTigiW3tcImZvb1wiOlwiYmFyXCJ9LHtcImJhelwiOmZhbHNlfSxd
IikpOworICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiW3tcImZv
b1wiOntcImJhelwiOmZhbHNlfV0iKSk7CiAgICAgfQogCiAgICAgewotICAgICAgICBSZWZQdHI8
SlNPTjo6VmFsdWU+IHZhbHVlOwotICAgICAgICBFWFBFQ1RfVFJVRShKU09OOjpWYWx1ZTo6cGFy
c2VKU09OKCIgXCJmb29cIiBcbiIsIHZhbHVlKSk7Ci0gICAgICAgIFN0cmluZyBzdHJpbmdWYWx1
ZTsKLSAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUtPmFzU3RyaW5nKHN0cmluZ1ZhbHVlKSk7Cisg
ICAgICAgIGF1dG8gdmFsdWUgPSBKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCIgXCJmb29cIiBcbiIp
OworICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1ZSk7CisgICAgICAgIGF1dG8gc3RyaW5nVmFsdWUg
PSB2YWx1ZS0+YXNTdHJpbmcoKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoISFzdHJpbmdWYWx1ZSk7
CiAgICAgICAgIEVYUEVDVF9FUSgiZm9vIiwgc3RyaW5nVmFsdWUpOwogICAgIH0KIAogICAgIHsK
LSAgICAgICAgUmVmUHRyPEpTT046OlZhbHVlPiB2YWx1ZTsKLSAgICAgICAgRVhQRUNUX1RSVUUo
SlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiIDEiLCB2YWx1ZSkpOwotICAgICAgICBFWFBFQ1RfVFJV
RShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJcdDEiLCB2YWx1ZSkpOwotICAgICAgICBFWFBFQ1Rf
VFJVRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJcbjEiLCB2YWx1ZSkpOwotICAgICAgICBFWFBF
Q1RfVFJVRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCIxICIsIHZhbHVlKSk7Ci0gICAgICAgIEVY
UEVDVF9UUlVFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIjFcdCIsIHZhbHVlKSk7Ci0gICAgICAg
IEVYUEVDVF9UUlVFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIjFcbiIsIHZhbHVlKSk7Ci0gICAg
ICAgIEVYUEVDVF9UUlVFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIiAxICIsIHZhbHVlKSk7Ci0g
ICAgICAgIEVYUEVDVF9UUlVFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIiB7fSAiLCB2YWx1ZSkp
OwotICAgICAgICBFWFBFQ1RfVFJVRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCIgW10gIiwgdmFs
dWUpKTsKLSAgICAgICAgRVhQRUNUX1RSVUUoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiXCJcXHhG
RlwiIiwgdmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX1RSVUUoSlNPTjo6VmFsdWU6OnBhcnNlSlNP
TigiXCJcXHUxMjM0XCIiLCB2YWx1ZSkpOworICAgICAgICBFWFBFQ1RfVFJVRShKU09OOjpWYWx1
ZTo6cGFyc2VKU09OKCIgMSIpKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoSlNPTjo6VmFsdWU6OnBh
cnNlSlNPTigiXHQxIikpOworICAgICAgICBFWFBFQ1RfVFJVRShKU09OOjpWYWx1ZTo6cGFyc2VK
U09OKCJcbjEiKSk7CisgICAgICAgIEVYUEVDVF9UUlVFKEpTT046OlZhbHVlOjpwYXJzZUpTT04o
IjEgIikpOworICAgICAgICBFWFBFQ1RfVFJVRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCIxXHQi
KSk7CisgICAgICAgIEVYUEVDVF9UUlVFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIjFcbiIpKTsK
KyAgICAgICAgRVhQRUNUX1RSVUUoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiIDEgIikpOworICAg
ICAgICBFWFBFQ1RfVFJVRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCIge30gIikpOworICAgICAg
ICBFWFBFQ1RfVFJVRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCIgW10gIikpOworICAgICAgICBF
WFBFQ1RfVFJVRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJcIlxceEZGXCIiKSk7CisgICAgICAg
IEVYUEVDVF9UUlVFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIlwiXFx1MTIzNFwiIikpOwogCi0g
ICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCIxIDEiLCB2YWx1ZSkp
OwotICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigie30ge30iLCB2
YWx1ZSkpOwotICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiW10g
W10iLCB2YWx1ZSkpOwotICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNP
TigiXCJcXCIsIHZhbHVlKSk7Ci0gICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFy
c2VKU09OKCJcIlxceEYiLCB2YWx1ZSkpOwotICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFs
dWU6OnBhcnNlSlNPTigiXCJcXHhGXCIiLCB2YWx1ZSkpOwotICAgICAgICBFWFBFQ1RfRkFMU0Uo
SlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiXCJcXHhGIFwiIiwgdmFsdWUpKTsKLSAgICAgICAgRVhQ
RUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIlwiXFx1MSIsIHZhbHVlKSk7Ci0gICAg
ICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJcIlxcdTFcIiIsIHZhbHVl
KSk7Ci0gICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJcIlxcdTEg
ICBcIiIsIHZhbHVlKSk7Ci0gICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VK
U09OKCJcIlxcdTEyIiwgdmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVl
OjpwYXJzZUpTT04oIlwiXFx1MTJcIiIsIHZhbHVlKSk7Ci0gICAgICAgIEVYUEVDVF9GQUxTRShK
U09OOjpWYWx1ZTo6cGFyc2VKU09OKCJcIlxcdTEyICBcIiIsIHZhbHVlKSk7Ci0gICAgICAgIEVY
UEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJcIlxcdTEyMyIsIHZhbHVlKSk7Ci0g
ICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJcIlxcdTEyM1wiIiwg
dmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIlwi
XFx1MTIzIFwiIiwgdmFsdWUpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpw
YXJzZUpTT04oIjEgMSIpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJz
ZUpTT04oInt9IHt9IikpOworICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNl
SlNPTigiW10gW10iKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VK
U09OKCJcIlxcIikpOworICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNP
TigiXCJcXHhGIikpOworICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNP
TigiXCJcXHhGXCIiKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VK
U09OKCJcIlxceEYgXCIiKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFy
c2VKU09OKCJcIlxcdTEiKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFy
c2VKU09OKCJcIlxcdTFcIiIpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpw
YXJzZUpTT04oIlwiXFx1MSAgIFwiIikpOworICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFs
dWU6OnBhcnNlSlNPTigiXCJcXHUxMiIpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZh
bHVlOjpwYXJzZUpTT04oIlwiXFx1MTJcIiIpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046
OlZhbHVlOjpwYXJzZUpTT04oIlwiXFx1MTIgIFwiIikpOworICAgICAgICBFWFBFQ1RfRkFMU0Uo
SlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiXCJcXHUxMjMiKSk7CisgICAgICAgIEVYUEVDVF9GQUxT
RShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJcIlxcdTEyM1wiIikpOworICAgICAgICBFWFBFQ1Rf
RkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiXCJcXHUxMjMgXCIiKSk7CiAgICAgfQogfQog
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKaW5kZXggN2JlYThhZDBkMzE2M2RjYjM1OWVjYmJlYmE3NWQxNjliYjQzNzQ3Ni4uNDQyMjM0
ZjM3ODA3YWIzYjJhMjgzZjM4NDEzNThlYmZkM2RmZGM3YyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBA
CisyMDIwLTA5LTA4ICBEZXZpbiBSb3Vzc28gIDxkcm91c3NvQGFwcGxlLmNvbT4KKworICAgICAg
ICBXZWIgSW5zcGVjdG9yOiBtb2Rlcm5pemUgZ2VuZXJhdGVkIGJhY2tlbmQgcHJvdG9jb2wgY29k
ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE2MzAy
CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS82ODU0NzY0OT4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGluc3BlY3Rvci9jYW52YXMvcmVxdWVzdFNo
YWRlclNvdXJjZS1leHBlY3RlZC50eHQ6CisgICAgICAgICogaW5zcGVjdG9yL2NhbnZhcy91cGRh
dGVTaGFkZXItZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGluc3BlY3Rvci9jb25zb2xlL3dlYmNv
cmUtbG9nZ2luZy1leHBlY3RlZC50eHQ6CisgICAgICAgICogaW5zcGVjdG9yL2RvbS9oaWdobGln
aHRRdWFkLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivd29ya2VyL2RvbS1kZWJ1
Z2dlci1kb20tYnJlYWtwb2ludHMtZXhwZWN0ZWQudHh0OgorCiAyMDIwLTA5LTA1ICBEZXZpbiBS
b3Vzc28gIDxkcm91c3NvQGFwcGxlLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBhbGxv
dyBET00gYnJlYWtwb2ludHMgdG8gYmUgY29uZmlndXJlZApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvaW5zcGVjdG9yL2NhbnZhcy9yZXF1ZXN0U2hhZGVyU291cmNlLWV4cGVjdGVkLnR4dCBiL0xh
eW91dFRlc3RzL2luc3BlY3Rvci9jYW52YXMvcmVxdWVzdFNoYWRlclNvdXJjZS1leHBlY3RlZC50
eHQKaW5kZXggZjkyZjQ5NWQzOGNlNjg1M2EzYTUzNTRhYTU4MTNlMGJjNGNlMTU1ZS4uMmM1ZGNl
ODMyMDQxMjVkMGFlMGQwYmZhMGMyMzM5OGU2NTNkNGQzMSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvaW5zcGVjdG9yL2NhbnZhcy9yZXF1ZXN0U2hhZGVyU291cmNlLWV4cGVjdGVkLnR4dAorKysg
Yi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvY2FudmFzL3JlcXVlc3RTaGFkZXJTb3VyY2UtZXhwZWN0
ZWQudHh0CkBAIC00LDUgKzQsNSBAQCBDb21tb24gdGVzdHMgZm9yIENhbnZhcy5yZXF1ZXN0U2hh
ZGVyU291cmNlIGNvbW1hbmQuCiA9PSBSdW5uaW5nIHRlc3Qgc3VpdGU6IENhbnZhcy5yZXF1ZXN0
U2hhZGVyU291cmNlCiAtLSBSdW5uaW5nIHRlc3QgY2FzZTogQ2FudmFzLnJlcXVlc3RTaGFkZXJT
b3VyY2UuUHJvZ3JhbUlkLkludmFsaWQKIFBBU1M6IFNob3VsZCBwcm9kdWNlIGFuIGVycm9yLgot
RXJyb3I6IE1pc3NpbmcgcHJvZ3JhbSBmb3IgZ2l2ZW4gcHJvZ3JhbUlkCitFcnJvcjogVW5rbm93
biBzaGFkZXJUeXBlOiBJTlZBTElEX1NIQURFUl9UWVBFCiAKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL2luc3BlY3Rvci9jYW52YXMvdXBkYXRlU2hhZGVyLWV4cGVjdGVkLnR4dCBiL0xheW91dFRl
c3RzL2luc3BlY3Rvci9jYW52YXMvdXBkYXRlU2hhZGVyLWV4cGVjdGVkLnR4dAppbmRleCBjZTM3
ZThlNmE5YzgwMGVmYzhmN2YwNmVjYzQ1MmNhNDMxY2IxMDE3Li4zNGYxYmQyZjkyMTI2OWQ3MGY2
MmJiN2ZhZmI4ZDAyNjQzNDJhODBiIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3Iv
Y2FudmFzL3VwZGF0ZVNoYWRlci1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvaW5zcGVj
dG9yL2NhbnZhcy91cGRhdGVTaGFkZXItZXhwZWN0ZWQudHh0CkBAIC00LDUgKzQsNSBAQCBDb21t
b24gdGVzdHMgZm9yIENhbnZhcy51cGRhdGVTaGFkZXIgY29tbWFuZC4KID09IFJ1bm5pbmcgdGVz
dCBzdWl0ZTogQ2FudmFzLnVwZGF0ZVNoYWRlcgogLS0gUnVubmluZyB0ZXN0IGNhc2U6IENhbnZh
cy51cGRhdGVTaGFkZXIuUHJvZ3JhbUlkLkludmFsaWQKIFBBU1M6IFNob3VsZCBwcm9kdWNlIGFu
IGVycm9yLgotRXJyb3I6IE1pc3NpbmcgcHJvZ3JhbSBmb3IgZ2l2ZW4gcHJvZ3JhbUlkCitFcnJv
cjogVW5rbm93biBzaGFkZXJUeXBlOiBJTlZBTElEX1NIQURFUl9UWVBFCiAKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2luc3BlY3Rvci9jb25zb2xlL3dlYmNvcmUtbG9nZ2luZy1leHBlY3RlZC50
eHQgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvY29uc29sZS93ZWJjb3JlLWxvZ2dpbmctZXhwZWN0
ZWQudHh0CmluZGV4IDViNTJlMmE3MmNhODFjNzAyY2JiZjVmZTU5YzNjNmIwZmEyNzU3YTMuLjUy
ODRjOTIwNmJmZTg5M2EyNDAwMGU3ZDcxYmM4MGM1YTUzOGRhNDAgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL2luc3BlY3Rvci9jb25zb2xlL3dlYmNvcmUtbG9nZ2luZy1leHBlY3RlZC50eHQKKysr
IGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2NvbnNvbGUvd2ViY29yZS1sb2dnaW5nLWV4cGVjdGVk
LnR4dApAQCAtMTUsOSArMTUsMTMgQEAgUEFTUzogTG9nIGNoYW5uZWwgaGFzIGtub3duIHNvdXJj
ZS4KIFBBU1M6IExvZyBjaGFubmVsIGRpc2FibGVkIGJ5IGRlZmF1bHQuCiBQQVNTOiBMb2cgY2hh
bm5lbCBoYXMga25vd24gc291cmNlLgogUEFTUzogTG9nIGNoYW5uZWwgZGlzYWJsZWQgYnkgZGVm
YXVsdC4KK1BBU1M6IExvZyBjaGFubmVsIGhhcyBrbm93biBzb3VyY2UuCitQQVNTOiBMb2cgY2hh
bm5lbCBkaXNhYmxlZCBieSBkZWZhdWx0LgorUEFTUzogTG9nIGNoYW5uZWwgaGFzIGtub3duIHNv
dXJjZS4KK1BBU1M6IExvZyBjaGFubmVsIGRpc2FibGVkIGJ5IGRlZmF1bHQuCiAKIC0tIFJ1bm5p
bmcgdGVzdCBjYXNlOiBDb25zb2xlLkxvZ2dpbmcuSW52YWxpZExldmVsCi1QQVNTOiBVbmtub3du
IGNoYW5uZWxMZXZlbDogRE9FU19OT1RfRVhJU1QKK1BBU1M6IFVua25vd24gbGV2ZWw6IERPRVNf
Tk9UX0VYSVNUCiAKIC0tIFJ1bm5pbmcgdGVzdCBjYXNlOiBDb25zb2xlLkxvZ2dpbmcuTm9Mb2dn
aW5nCiBQQVNTOiBNZWRpYSBsb2dnaW5nIGRpc2FibGVkLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvaW5zcGVjdG9yL2RvbS9oaWdobGlnaHRRdWFkLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3Rz
L2luc3BlY3Rvci9kb20vaGlnaGxpZ2h0UXVhZC1leHBlY3RlZC50eHQKaW5kZXggZTc4MTE3YTNh
NTBmYWM5NzU5YjRmMzRlMWU4MjVjZTA3ZWQxMWE4NS4uYTFmM2IyZmU3NjU4MjdiZmIxNGFhMmJi
MDZkMGFkODY0Njc0NjY1NSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RvbS9o
aWdobGlnaHRRdWFkLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZG9t
L2hpZ2hsaWdodFF1YWQtZXhwZWN0ZWQudHh0CkBAIC0zMSw1ICszMSw1IEBAIEhpZ2hsaWdodCBS
ZWN0OiB7IngiOi0xMCwieSI6LTEwLCJ3aWR0aCI6MTAwMCwiaGVpZ2h0IjoyMDAwLCJ0b3AiOi0x
MCwicmlnaHQiOjk5CiAKIC0tIFJ1bm5pbmcgdGVzdCBjYXNlOiBCYWRRdWFkU2hvdWxkRXJyb3IK
IFBBU1M6IFNob3VsZCBwcm9kdWNlIGFuIGVycm9yLgotRXJyb3I6IFVuZXhwZWN0ZWQgaW52YWxp
ZCBxdWFkQXJyYXkKK0Vycm9yOiBVbmV4cGVjdGVkIGludmFsaWQgcXVhZAogCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9pbnNwZWN0b3Ivd29ya2VyL2RvbS1kZWJ1Z2dlci1kb20tYnJlYWtwb2lu
dHMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3dvcmtlci9kb20tZGVidWdn
ZXItZG9tLWJyZWFrcG9pbnRzLWV4cGVjdGVkLnR4dAppbmRleCBmYThlNzYyYWEzMmNlNWFlMWNm
ZTg1MWY5NzQ4YjM1MzlmNTFlMjRmLi4zZGYyMjg4NmUzMTJiZWY1NjliMTM5NGM0YTQ0YzgzM2Vj
M2I1NjQzIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3Ivd29ya2VyL2RvbS1kZWJ1
Z2dlci1kb20tYnJlYWtwb2ludHMtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2luc3Bl
Y3Rvci93b3JrZXIvZG9tLWRlYnVnZ2VyLWRvbS1icmVha3BvaW50cy1leHBlY3RlZC50eHQKQEAg
LTQsOSArNCw5IEBAIFRlc3RzIGZvciBET00gYnJlYWtwb2ludCBmdW5jdGlvbmFsaXR5IChET01E
ZWJ1Z2dlcikgaW4gYSBXb3JrZXIuCiA9PSBSdW5uaW5nIHRlc3Qgc3VpdGU6IFdvcmtlci5ET01E
ZWJ1Z2dlci5ET01CcmVha3BvaW50CiAtLSBSdW5uaW5nIHRlc3QgY2FzZTogV29ya2VyLkRPTURl
YnVnZ2VyLkRPTUJyZWFrcG9pbnQuc2V0RE9NQnJlYWtwb2ludAogUEFTUzogU2hvdWxkIHByb2R1
Y2UgYW4gZXhjZXB0aW9uLgotRXJyb3I6IE5vdCBzdXBwb3J0ZWQKK0Vycm9yOiBVbmtub3duIHR5
cGU6IElOVkFMSUQKIAogLS0gUnVubmluZyB0ZXN0IGNhc2U6IFdvcmtlci5ET01EZWJ1Z2dlci5E
T01CcmVha3BvaW50LnJlbW92ZURPTUJyZWFrcG9pbnQKIFBBU1M6IFNob3VsZCBwcm9kdWNlIGFu
IGV4Y2VwdGlvbi4KLUVycm9yOiBOb3Qgc3VwcG9ydGVkCitFcnJvcjogVW5rbm93biB0eXBlOiBJ
TlZBTElECiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>408416</attachid>
            <date>2020-09-09 23:52:31 -0700</date>
            <delta_ts>2020-09-10 12:23:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216302-20200909235230.patch</filename>
            <type>text/plain</type>
            <size>1528381</size>
            <attacher name="Devin Rousso">hi</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDFkNjBmNWEyNjdiYjZmZTg1ODgxNTI4MTlmZTE5
ZmU0OWY3YWYxNGMuLjkxMmNlZTZhYTYzMDVmYzgwYTM5N2QyYzE5Y2Y0Zjk2M2I2MmY4NDAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzMCBAQAorMjAyMC0wOS0wOSAgRGV2
aW4gUm91c3NvICA8ZHJvdXNzb0BhcHBsZS5jb20+CisKKyAgICAgICAgV2ViIEluc3BlY3Rvcjog
bW9kZXJuaXplIGdlbmVyYXRlZCBiYWNrZW5kIHByb3RvY29sIGNvZGUKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNjMwMgorICAgICAgICA8cmRhcjov
L3Byb2JsZW0vNjg1NDc2NDk+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQnJpYW4gQnVyZy4KKwor
ICAgICAgICBQcmV2aW91c2x5LCB0aGUgaW5zcGVjdG9yIHByb3RvY29sIHdhcyBleHByZXNzZWQg
aW4gY29kZSBpbiBhIHNvbWV3aGF0IGNvbmZ1c2luZyB3YXk6CisgICAgICAgICAtIHRoZSBlcnJv
ciBzdHJpbmcgd2FzIHRoZSBmaXJzdCBhcmd1bWVudAorICAgICAgICAgLSByZXF1aXJlZCBwYXJh
bWV0ZXJzIHdlcmUgYFRgIG9yIGBjb25zdCBUJmAKKyAgICAgICAgIC0gb3B0aW9uYWwgcGFyYW1l
dGVycyB3ZXJlIGBjb25zdCBUKmAKKyAgICAgICAgIC0gZW51bSBwYXJhbWV0ZXJzIHdlcmUgdGhl
IHVuZGVybHlpbmcgdHlwZSByZXF1aXJpbmcgdGhlIGJhY2tlbmQgZGlzcGF0Y2hlciBoYW5kbGVy
IHRvCisgICAgICAgICAgIHByb2Nlc3MgaXQgaW5zdGVhZCBvZiBpdCBiZWluZyBwcmVwcm9jZXNz
ZWQKKyAgICAgICAgIC0gcmVxdWlyZWQgcmV0dXJucyB3ZXJlIGBUJmAKKyAgICAgICAgIC0gb3B0
aW9uYWwgcmV0dXJucyB3ZXJlIGBUKmAKKyAgICAgICAgVGhpcyBkb2Vzbid0IHJlYWxseSBtYWtl
IGZvciBlYXN5L29idmlvdXMgcmVhZGluZyBvZiBjb2RlIHNpbmNlIHRoZSBvcmRlciBvZiBhcmd1
bWVudHMgaXMKKyAgICAgICAgbm90IHdlaXJkIChlLmcuIGVycm9yIHN0cmluZyBmaXJzdCksIGFu
ZCB0aGF0IHRoZXJlIGFyZSByZWZlcmVuY2VzL3BvaW50ZXJzIHRvIHByaW1pdGl2ZQorICAgICAg
ICB0eXBlcy4KKworICAgICAgICBUaGlzIHBhdGNoIGNsZWFucyB1cCB0aGUgZ2VuZXJhdGVkIGlu
c3BlY3RvciBwcm90b2NvbCBjb2RlIHRvIGJlOgorICAgICAgICAgLSByZXF1aXJlZCBwYXJhbWV0
ZXJzIGFyZSBgVGAgb3IgYFJlZjxUPiYmYAorICAgICAgICAgLSBvcHRpb25hbCBwYXJhbWV0ZXJz
IGFyZSBgT3B0aW9uYWw8VD4mJmAgb3IgYFJlZlB0cjxUPiYmYAorICAgICAgICAgLSBlbnVtIHBh
cmFtZXRlcnMgYXJlIHByZXByb2Nlc3NlZCBhbmQgcGFzc2VkIHRvIHRoZSBiYWNrZW5kIGRpc3Bh
dGNoZXIgaGFuZGxlciBpZiB2YWxpZAorICAgICAgICAgLSBzeW5jaHJvbm91cyBjb21tYW5kcyBy
ZXR1cm4gYEV4cGVjdGVkPFgsIEVycm9yU3RyaW5nPmAgdXNpbmcgdGhlIHNhbWUgdHlwZXMvcnVs
ZXMgYWJvdmUKKyAgICAgICAgICAgd2hlcmUgYFhgIGlzIGVpdGhlciBhIHNpbmdsZSByZXR1cm4g
b3IgYSBgc3RkOjp0dXBsZWAgb2YgbXVsdGlwbGUgcmV0dXJucworCisgICAgICAgIFRoZSBvbmUg
ZXhjZXB0aW9uIHRvIHRoZSBhYm92ZSBpcyBgU3RyaW5nYCwgd2hpY2ggaXMgYWxyZWFkeSBhIHRy
aS1zdGF0ZSBvZiBgbnVsbFN0cmluZygpYCwKKyAgICAgICAgYGVtcHR5U3RyaW5nKClgLCBhbmQg
c29tZXRoaW5nIHNldCwgc28gdGhlcmUncyBubyBuZWVkIHRvIHVzZSBgT3B0aW9uYWw8U3RyaW5n
PmAuCisKKyAgICAgICAgQWxzbyB1c2UgYFByb3RvY29sYCBvYmplY3RzL2B0eXBlZGVmc2Agd2hl
cmV2ZXIgcG9zc2libGUgdG8gZnVydGhlciByZWxhdGUgdGhlIHByb3RvY29sCisgICAgICAgIEpT
T04gYW5kIHRoZSBhY3R1YWwgYmFja2VuZCBkaXNwYXRjaGVyIGhhbmRsZXIgaW1wbGVtZW50YXRp
b24uCisKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRvci5weToK
KyAgICAgICAgKEdlbmVyYXRvci5nZW5lcmF0ZV9pbmNsdWRlc19mcm9tX2VudHJpZXMpOgorICAg
ICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vY3BwX2dlbmVyYXRvcl90ZW1wbGF0ZXMu
cHk6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9jcHBfZ2VuZXJhdG9yLnB5
OgorICAgICAgICAoQ3BwR2VuZXJhdG9yLmhlbHBlcnNfbmFtZXNwYWNlKToKKyAgICAgICAgKENw
cEdlbmVyYXRvci5jcHBfZ2V0dGVyX21ldGhvZF9mb3JfdHlwZSk6CisgICAgICAgIChDcHBHZW5l
cmF0b3IuY3BwX3NldHRlcl9tZXRob2RfZm9yX3R5cGUpOgorICAgICAgICAoQ3BwR2VuZXJhdG9y
LmNwcF9wcm90b2NvbF90eXBlX2Zvcl90eXBlKToKKyAgICAgICAgKENwcEdlbmVyYXRvci5jcHBf
dHlwZV9mb3JfdHlwZV9tZW1iZXJfYXJndW1lbnQpOiBBZGRlZC4KKyAgICAgICAgKENwcEdlbmVy
YXRvci5jcHBfdHlwZV9mb3JfY29tbWFuZF9wYXJhbWV0ZXIpOiBBZGRlZC4KKyAgICAgICAgKENw
cEdlbmVyYXRvci5jcHBfdHlwZV9mb3JfY29tbWFuZF9yZXR1cm5fZGVjbGFyYXRpb24pOiBBZGRl
ZC4KKyAgICAgICAgKENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3JfY29tbWFuZF9yZXR1cm5fYXJn
dW1lbnQpOiBBZGRlZC4KKyAgICAgICAgKENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3JfZXZlbnRf
cGFyYW1ldGVyKTogQWRkZWQuCisgICAgICAgIChDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX2Vu
dW0pOiBBZGRlZC4KKyAgICAgICAgKENwcEdlbmVyYXRvci5zaG91bGRfbW92ZV9hcmd1bWVudCk6
IEFkZGVkLgorICAgICAgICAoQ3BwR2VuZXJhdG9yLnNob3VsZF9yZWxlYXNlX2FyZ3VtZW50KTog
QWRkZWQuCisgICAgICAgIChDcHBHZW5lcmF0b3Iuc2hvdWxkX2RlcmVmZXJlbmNlX2FyZ3VtZW50
KTogQWRkZWQuCisgICAgICAgIChDcHBHZW5lcmF0b3IuY3BwX3Byb3RvY29sX3R5cGVfZm9yX3R5
cGVfbWVtYmVyKTogRGVsZXRlZC4KKyAgICAgICAgKENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3Jf
dW5jaGVja2VkX2Zvcm1hbF9pbl9wYXJhbWV0ZXIpOiBEZWxldGVkLgorICAgICAgICAoQ3BwR2Vu
ZXJhdG9yLmNwcF90eXBlX2Zvcl9jaGVja2VkX2Zvcm1hbF9ldmVudF9wYXJhbWV0ZXIpOiBEZWxl
dGVkLgorICAgICAgICAoQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl90eXBlX21lbWJlcik6IERl
bGV0ZWQuCisgICAgICAgIChDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX3R5cGVfd2l0aF9uYW1l
KTogRGVsZXRlZC4KKyAgICAgICAgKENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3JfZm9ybWFsX291
dF9wYXJhbWV0ZXIpOiBEZWxldGVkLgorICAgICAgICAoQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zv
cl9mb3JtYWxfYXN5bmNfcGFyYW1ldGVyKTogRGVsZXRlZC4KKyAgICAgICAgKENwcEdlbmVyYXRv
ci5jcHBfdHlwZV9mb3Jfc3RhY2tfaW5fcGFyYW1ldGVyKTogRGVsZXRlZC4KKyAgICAgICAgKENw
cEdlbmVyYXRvci5jcHBfdHlwZV9mb3Jfc3RhY2tfb3V0X3BhcmFtZXRlcik6IERlbGV0ZWQuCisg
ICAgICAgIChDcHBHZW5lcmF0b3IuY3BwX2Fzc2VydGlvbl9tZXRob2RfZm9yX3R5cGVfbWVtYmVy
KTogRGVsZXRlZC4KKyAgICAgICAgKENwcEdlbmVyYXRvci5jcHBfYXNzZXJ0aW9uX21ldGhvZF9m
b3JfdHlwZV9tZW1iZXIuYXNzZXJ0aW9uX21ldGhvZF9mb3JfdHlwZSk6IERlbGV0ZWQuCisgICAg
ICAgIChDcHBHZW5lcmF0b3Iuc2hvdWxkX3VzZV93cmFwcGVyX2Zvcl9yZXR1cm5fdHlwZSk6IERl
bGV0ZWQuCisgICAgICAgIChDcHBHZW5lcmF0b3Iuc2hvdWxkX3VzZV9yZWZlcmVuY2VzX2Zvcl90
eXBlKTogRGVsZXRlZC4KKyAgICAgICAgKENwcEdlbmVyYXRvci5zaG91bGRfcGFzc19ieV9jb3B5
X2Zvcl9yZXR1cm5fdHlwZSk6IERlbGV0ZWQuCisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMv
Y29kZWdlbi9nZW5lcmF0ZV9jcHBfYWx0ZXJuYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIu
cHk6CisgICAgICAgIChDcHBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRv
ci5fZ2VuZXJhdGVfc2Vjb25kYXJ5X2hlYWRlcl9pbmNsdWRlcyk6CisgICAgICAgIChDcHBBbHRl
cm5hdGVCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvci5fZ2VuZXJhdGVfaGFuZGxlcl9k
ZWNsYXJhdGlvbl9mb3JfY29tbWFuZCk6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29k
ZWdlbi9nZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weToKKyAgICAgICAg
KENwcEJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yLmdlbmVyYXRlX291dHB1dCk6Cisg
ICAgICAgIChDcHBCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvci5fZ2VuZXJhdGVfc2Vj
b25kYXJ5X2hlYWRlcl9pbmNsdWRlcyk6CisgICAgICAgIChDcHBCYWNrZW5kRGlzcGF0Y2hlckhl
YWRlckdlbmVyYXRvci5fZ2VuZXJhdGVfaGFuZGxlcl9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbik6
CisgICAgICAgIChDcHBCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvci5fZ2VuZXJhdGVf
aGFuZGxlcl9kZWNsYXJhdGlvbl9mb3JfY29tbWFuZCk6CisgICAgICAgIChDcHBCYWNrZW5kRGlz
cGF0Y2hlckhlYWRlckdlbmVyYXRvci5fZ2VuZXJhdGVfYXN5bmNfaGFuZGxlcl9kZWNsYXJhdGlv
bl9mb3JfY29tbWFuZCk6CisgICAgICAgIChDcHBCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVy
YXRvci5fZ2VuZXJhdGVfZGlzcGF0Y2hlcl9kZWNsYXJhdGlvbl9mb3JfY29tbWFuZCk6CisgICAg
ICAgIChDcHBCYWNrZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvci5fZ2VuZXJhdGVfYW5vbnlt
b3VzX2VudW1fZm9yX3BhcmFtZXRlcik6IERlbGV0ZWQuCisgICAgICAgICogaW5zcGVjdG9yL3Nj
cmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0
aW9uLnB5OgorICAgICAgICAoQ3BwQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVy
YXRvci5fZ2VuZXJhdGVfc2Vjb25kYXJ5X2hlYWRlcl9pbmNsdWRlcyk6CisgICAgICAgIChDcHBC
YWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9zbWFsbF9k
aXNwYXRjaGVyX3N3aXRjaF9pbXBsZW1lbnRhdGlvbl9mb3JfZG9tYWluKToKKyAgICAgICAgKENw
cEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX2FzeW5j
X2Rpc3BhdGNoZXJfY2xhc3NfZm9yX2RvbWFpbik6CisgICAgICAgIChDcHBCYWNrZW5kRGlzcGF0
Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9kaXNwYXRjaGVyX2ltcGxlbWVu
dGF0aW9uX2Zvcl9jb21tYW5kKToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2Vu
L2dlbmVyYXRlX2NwcF9mcm9udGVuZF9kaXNwYXRjaGVyX2hlYWRlci5weToKKyAgICAgICAgKENw
cEZyb250ZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvci5fZ2VuZXJhdGVfc2Vjb25kYXJ5X2hl
YWRlcl9pbmNsdWRlcyk6CisgICAgICAgIChDcHBGcm9udGVuZERpc3BhdGNoZXJIZWFkZXJHZW5l
cmF0b3IuX2dlbmVyYXRlX2Rpc3BhdGNoZXJfZGVjbGFyYXRpb25fZm9yX2V2ZW50KToKKyAgICAg
ICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9mcm9udGVuZF9kaXNw
YXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5OgorICAgICAgICAoQ3BwRnJvbnRlbmREaXNwYXRjaGVy
SW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX3NlY29uZGFyeV9oZWFkZXJfaW5jbHVk
ZXMpOgorICAgICAgICAoQ3BwRnJvbnRlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0
b3IuX2dlbmVyYXRlX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb25fZm9yX2V2ZW50KToKKyAgICAg
ICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9wcm90b2NvbF90eXBl
c19oZWFkZXIucHk6CisgICAgICAgIChDcHBQcm90b2NvbFR5cGVzSGVhZGVyR2VuZXJhdG9yLl9n
ZW5lcmF0ZV9zZWNvbmRhcnlfaGVhZGVyX2luY2x1ZGVzKToKKyAgICAgICAgKiBpbnNwZWN0b3Iv
c2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9wcm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlv
bi5weToKKyAgICAgICAgKENwcFByb3RvY29sVHlwZXNJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5f
Z2VuZXJhdGVfc2Vjb25kYXJ5X2hlYWRlcl9pbmNsdWRlcyk6CisgICAgICAgIChDcHBQcm90b2Nv
bFR5cGVzSW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX2VudW1fY29udmVyc2lvbl9t
ZXRob2RzX2Zvcl9kb21haW4pOgorICAgICAgICAoQ3BwUHJvdG9jb2xUeXBlc0ltcGxlbWVudGF0
aW9uR2VuZXJhdG9yLl9nZW5lcmF0ZV9vcGVuX2ZpZWxkX25hbWVzKToKKyAgICAgICAgKENwcFBy
b3RvY29sVHlwZXNJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfYXNzZXJ0aW9uX2Zv
cl9lbnVtKToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29i
amNfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weToKKyAgICAgICAgKE9iakNCYWNrZW5kRGlz
cGF0Y2hlckhlYWRlckdlbmVyYXRvci5fZ2VuZXJhdGVfb2JqY19oYW5kbGVyX2RlY2xhcmF0aW9u
X2Zvcl9jb21tYW5kKToKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVy
YXRlX29iamNfYmFja2VuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5OgorICAgICAgICAo
T2JqQ0JhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX2hh
bmRsZXJfaW1wbGVtZW50YXRpb25fZm9yX2NvbW1hbmQpOgorICAgICAgICAoT2JqQ0JhY2tlbmRE
aXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX3N1Y2Nlc3NfYmxvY2tf
Zm9yX2NvbW1hbmQpOgorICAgICAgICAoT2JqQ0JhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRp
b25HZW5lcmF0b3IuX2dlbmVyYXRlX3N1Y2Nlc3NfYmxvY2tfZm9yX2NvbW1hbmQuYW5kKToKKyAg
ICAgICAgKE9iakNCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5l
cmF0ZV9jb252ZXJzaW9uc19mb3JfY29tbWFuZC5pbl9wYXJhbV9leHByZXNzaW9uKToKKyAgICAg
ICAgKE9iakNCYWNrZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yLl9nZW5lcmF0
ZV9jb252ZXJzaW9uc19mb3JfY29tbWFuZCk6CisgICAgICAgIChPYmpDQmFja2VuZERpc3BhdGNo
ZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2VuZXJhdGVfaW52b2NhdGlvbl9mb3JfY29tbWFu
ZCk6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2Zy
b250ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHk6CisgICAgICAgIChPYmpDRnJvbnRl
bmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IuX2dlbmVyYXRlX2V2ZW50KToKKyAg
ICAgICAgKE9iakNGcm9udGVuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvci5fZ2Vu
ZXJhdGVfZXZlbnRfb3V0X3BhcmFtZXRlcnMpOgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRz
L2NvZGVnZW4vb2JqY19nZW5lcmF0b3JfdGVtcGxhdGVzLnB5OgorICAgICAgICAqIGluc3BlY3Rv
ci9zY3JpcHRzL2NvZGVnZW4vb2JqY19nZW5lcmF0b3IucHk6CisgICAgICAgIChPYmpDR2VuZXJh
dG9yLnByb3RvY29sX3R5cGVfZm9yX3R5cGUpOgorICAgICAgICAoT2JqQ0dlbmVyYXRvci5vYmpj
X3R5cGVfZm9yX3BhcmFtX2ludGVybmFsKToKKyAgICAgICAgKE9iakNHZW5lcmF0b3Iub2JqY19w
cm90b2NvbF9pbXBvcnRfZXhwcmVzc2lvbl9mb3JfcGFyYW1ldGVyKToKKworICAgICAgICAqIGlu
c3BlY3Rvci9wcm90b2NvbC9QYWdlLmpzb246CisgICAgICAgIE5vdyB0aGF0IGVudW1zIGFyZSBw
cm9jZXNzZWQgYmVmb3JlIGJlaW5nIHBhc3NlZCB0byBiYWNrZW5kIGRpc3BhY2hlciBoYW5kbGVy
cywgdGhlCisgICAgICAgIGBhcHBlYXJhbmNlYCBwYXJhbWV0ZXIgb2YgYFBhZ2Uuc2V0Rm9yY2Vk
QXBwZWFyYW5jZWAgbXVzdCBiZSBtYXJrZWQgYG9wdGlvbmFsYCBhcworICAgICAgICB0aGVyZSdz
IG5vIHdheSBmb3IgaXQgdG8gYWNjZXB0IGFuIGVtcHR5IHN0cmluZywgYXMgdGhhdCdzIG5vdCBw
b3NzaWJsZSBmb3IgYW4gZW51bS4KKworICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVj
dG9yQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckFnZW50LmNw
cDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckF1ZGl0QWdlbnQuaDoKKyAg
ICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckF1ZGl0QWdlbnQuY3BwOgorICAgICAg
ICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ29uc29sZUFnZW50Lmg6CisgICAgICAgICog
aW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDb25zb2xlQWdlbnQuY3BwOgorICAgICAgICAqIGlu
c3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5oOgorICAgICAgICAqIGluc3Bl
Y3Rvci9hZ2VudHMvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHA6CisgICAgICAgICogaW5zcGVj
dG9yL2FnZW50cy9JbnNwZWN0b3JIZWFwQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdl
bnRzL0luc3BlY3RvckhlYXBBZ2VudC5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9J
bnNwZWN0b3JSdW50aW1lQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3Bl
Y3RvclJ1bnRpbWVBZ2VudC5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0
b3JTY3JpcHRQcm9maWxlckFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNw
ZWN0b3JTY3JpcHRQcm9maWxlckFnZW50LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRz
L0luc3BlY3RvclRhcmdldEFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNw
ZWN0b3JUYXJnZXRBZ2VudC5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9KU0dsb2Jh
bE9iamVjdEF1ZGl0QWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0pTR2xvYmFs
T2JqZWN0QXVkaXRBZ2VudC5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9KU0dsb2Jh
bE9iamVjdERlYnVnZ2VyQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0pTR2xv
YmFsT2JqZWN0RGVidWdnZXJBZ2VudC5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9K
U0dsb2JhbE9iamVjdFJ1bnRpbWVBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMv
SlNHbG9iYWxPYmplY3RSdW50aW1lQWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9KU0ds
b2JhbE9iamVjdENvbnNvbGVDbGllbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9KU0dsb2Jh
bE9iamVjdEluc3BlY3RvckNvbnRyb2xsZXIuY3BwOgorICAgICAgICBFbGlkZWQgYmFja2VuZCBk
aXNwYXRjaGVyIGhhbmRsZXIgY2hhbmdlcyBkZXNjcmliZSBhYm92ZS4KKworICAgICAgICAqIGJp
bmRpbmdzL1NjcmlwdFZhbHVlLmNwcDoKKyAgICAgICAgKEluc3BlY3Rvcjo6anNUb0luc3BlY3Rv
clZhbHVlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvQXN5bmNTdGFja1RyYWNlLmg6CisgICAgICAg
ICogaW5zcGVjdG9yL0FzeW5jU3RhY2tUcmFjZS5jcHA6CisgICAgICAgIChJbnNwZWN0b3I6OkFz
eW5jU3RhY2tUcmFjZTo6YnVpbGRJbnNwZWN0b3JPYmplY3QgY29uc3QpOgorICAgICAgICAqIGlu
c3BlY3Rvci9Db25zb2xlTWVzc2FnZS5jcHA6CisgICAgICAgIChJbnNwZWN0b3I6OkNvbnNvbGVN
ZXNzYWdlOjphZGRUb0Zyb250ZW5kKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5qZWN0ZWRTY3Jp
cHRCYXNlLmg6CisgICAgICAgICogaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0QmFzZS5jcHA6Cisg
ICAgICAgIChJbnNwZWN0b3I6OkluamVjdGVkU2NyaXB0QmFzZTo6bWFrZUV2YWxDYWxsKToKKyAg
ICAgICAgKEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHRCYXNlOjpjaGVja0NhbGxSZXN1bHQpOgor
ICAgICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdEJhc2U6OmNoZWNrQXN5bmNDYWxsUmVz
dWx0KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHQuaDoKKyAgICAgICAgKiBp
bnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHQuY3BwOgorICAgICAgICAoSW5zcGVjdG9yOjpJbmplY3Rl
ZFNjcmlwdDo6ZXhlY3V0ZSk6CisgICAgICAgIChJbnNwZWN0b3I6OkluamVjdGVkU2NyaXB0Ojpl
dmFsdWF0ZSk6CisgICAgICAgIChJbnNwZWN0b3I6OkluamVjdGVkU2NyaXB0OjpjYWxsRnVuY3Rp
b25Pbik6CisgICAgICAgIChJbnNwZWN0b3I6OkluamVjdGVkU2NyaXB0OjpldmFsdWF0ZU9uQ2Fs
bEZyYW1lKToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHQ6OmdldEZ1bmN0aW9u
RGV0YWlscyk6CisgICAgICAgIChJbnNwZWN0b3I6OkluamVjdGVkU2NyaXB0OjpmdW5jdGlvbkRl
dGFpbHMpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdDo6Z2V0UHJldmlldyk6
CisgICAgICAgIChJbnNwZWN0b3I6OkluamVjdGVkU2NyaXB0OjpnZXRQcm9wZXJ0aWVzKToKKyAg
ICAgICAgKEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHQ6OmdldERpc3BsYXlhYmxlUHJvcGVydGll
cyk6CisgICAgICAgIChJbnNwZWN0b3I6OkluamVjdGVkU2NyaXB0OjpnZXRJbnRlcm5hbFByb3Bl
cnRpZXMpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdDo6Z2V0Q29sbGVjdGlv
bkVudHJpZXMpOgorICAgICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdDo6c2F2ZVJlc3Vs
dCk6CisgICAgICAgIChJbnNwZWN0b3I6OkluamVjdGVkU2NyaXB0Ojp3cmFwQ2FsbEZyYW1lcyBj
b25zdCk6CisgICAgICAgIChJbnNwZWN0b3I6OkluamVjdGVkU2NyaXB0Ojp3cmFwT2JqZWN0IGNv
bnN0KToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHQ6OndyYXBKU09OU3RyaW5n
IGNvbnN0KToKKyAgICAgICAgKEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHQ6OndyYXBUYWJsZSBj
b25zdCk6CisgICAgICAgIChJbnNwZWN0b3I6OkluamVjdGVkU2NyaXB0OjpwcmV2aWV3VmFsdWUg
Y29uc3QpOgorICAgICAgICAqIGluc3BlY3Rvci9JbmplY3RlZFNjcmlwdE1hbmFnZXIuY3BwOgor
ICAgICAgICAoSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdE1hbmFnZXI6OmluamVjdGVkU2NyaXB0
Rm9yT2JqZWN0SWQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0
Y2hlci5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5j
cHA6CisgICAgICAgIChJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyOjpDYWxsYmFja0Jhc2U6
OnNlbmRTdWNjZXNzKToKKyAgICAgICAgKEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXI6OmRp
c3BhdGNoKToKKyAgICAgICAgKEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXI6OnNlbmRSZXNw
b25zZSk6CisgICAgICAgIChJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyOjpnZXRQcm9wZXJ0
eVZhbHVlKToKKyAgICAgICAgKEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXI6OmdldEJvb2xl
YW4pOgorICAgICAgICAoSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0SW50ZWdlcik6
CisgICAgICAgIChJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyOjpnZXREb3VibGUpOgorICAg
ICAgICAoSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0U3RyaW5nKToKKyAgICAgICAg
KEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXI6OmdldFZhbHVlKToKKyAgICAgICAgKEluc3Bl
Y3Rvcjo6QmFja2VuZERpc3BhdGNoZXI6OmdldE9iamVjdCk6CisgICAgICAgIChJbnNwZWN0b3I6
OkJhY2tlbmREaXNwYXRjaGVyOjpnZXRBcnJheSk6CisgICAgICAgIChJbnNwZWN0b3I6OmNhc3RU
b0ludGVnZXIpOiBEZWxldGVkLgorICAgICAgICAoSW5zcGVjdG9yOjpjYXN0VG9OdW1iZXIpOiBE
ZWxldGVkLgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg6Cisg
ICAgICAgIChJbnNwZWN0b3I6OlByb3RvY29sOjpCaW5kaW5nVHJhaXRzPEpTT046OkFycmF5T2Y8
VD4+OjpydW50aW1lQ2FzdCk6CisgICAgICAgIChJbnNwZWN0b3I6OlByb3RvY29sOjpCaW5kaW5n
VHJhaXRzPEpTT046OkFycmF5T2Y8VD4+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZSk6Cisg
ICAgICAgICogaW5zcGVjdG9yL3JlbW90ZS9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yQ29ubmVjdGlv
bkNsaWVudC5jcHA6CisgICAgICAgIChJbnNwZWN0b3I6OlJlbW90ZUluc3BlY3RvckNvbm5lY3Rp
b25DbGllbnQ6OmV4dHJhY3RFdmVudCk6CisgICAgICAgICogaW5zcGVjdG9yL3JlbW90ZS9zb2Nr
ZXQvUmVtb3RlSW5zcGVjdG9yU29ja2V0LmNwcDoKKyAgICAgICAgKEluc3BlY3Rvcjo6UmVtb3Rl
SW5zcGVjdG9yOjpwdXNoTGlzdGluZ3NOb3cpOgorICAgICAgICAqIHJ1bnRpbWUvVHlwZVNldC5j
cHA6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVNoYXBlOjppbnNwZWN0b3JSZXByZXNlbnRhdGlv
bik6CisgICAgICAgIGBKU09OYCBjbGFzc2VzIG5vdyB1c2UgYFJlZiYmYCB3aGVyZXZlciBwb3Nz
aWJsZSBhbmQgYE9wdGlvbmFsYCBpbnN0ZWFkIG9mIGFuIG91dCBwYXJhbWV0ZXIKKyAgICAgICAg
Zm9yIGBnZXQqYC9gYXMqYCBzbyB0aGF0IHZhbHVlcyBjYW4gYmUgbW9yZSBlYXNpbHkgbWFuaXB1
bGF0ZWQgYW5kIGNhbiBiZSBjb25maWRlbnRseSBrbm93bgorICAgICAgICB0byBleGlzdC4KKwor
ICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2VudW0tdmFsdWVzLmpzb246CisgICAg
ICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvY29tbWFuZC10YXJnZXRUeXBl
LW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uLXJlc3VsdDoKKyAgICAgICAgKiBp
bnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9jb21tYW5kcy13aXRoLWFzeW5jLWF0dHJp
YnV0ZS5qc29uLXJlc3VsdDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBl
Y3RlZC9jb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMuanNvbi1y
ZXN1bHQ6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZGVmaW5p
dGlvbnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbi1yZXN1bHQ6CisgICAgICAgICogaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5qc29uLXJlc3Vs
dDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9kb21haW4tdGFy
Z2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbi1yZXN1bHQ6CisgICAg
ICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZG9tYWluLXRhcmdldFR5cGVz
Lmpzb24tcmVzdWx0OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVk
L2RvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNvbi1yZXN1bHQ6CisgICAgICAg
ICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZW51bS12YWx1ZXMuanNvbi1yZXN1
bHQ6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZXZlbnQtdGFy
Z2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbi1yZXN1bHQ6CisgICAg
ICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZXZlbnRzLXdpdGgtb3B0aW9u
YWwtcGFyYW1ldGVycy5qc29uLXJlc3VsdDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9leHBlY3RlZC9nZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbi1y
ZXN1bHQ6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvc2FtZS10
eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbi1yZXN1bHQ6CisgICAgICAgICogaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0ZXJzLmpz
b24tcmVzdWx0OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3No
b3VsZC1zdHJpcC1jb21tZW50cy5qc29uLXJlc3VsdDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5
cGUuanNvbi1yZXN1bHQ6CisgICAgICAgICogaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0
ZWQvdHlwZS1kZWNsYXJhdGlvbi1hcnJheS10eXBlLmpzb24tcmVzdWx0OgorICAgICAgICAqIGlu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tZW51bS10eXBl
Lmpzb24tcmVzdWx0OgorICAgICAgICAqIGluc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVk
L3R5cGUtZGVjbGFyYXRpb24tb2JqZWN0LXR5cGUuanNvbi1yZXN1bHQ6CisgICAgICAgICogaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1yZXF1aXJpbmctcnVudGltZS1jYXN0
cy5qc29uLXJlc3VsdDoKKyAgICAgICAgKiBpbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3Rl
ZC90eXBlLXdpdGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0OgorICAgICAgICAqIGluc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3ZlcnNpb24uanNvbi1yZXN1bHQ6CisKIDIwMjAt
MDktMDkgIEFsZXhleSBTaHZheWthICA8c2h2YWlrYWxlc2hAZ21haWwuY29tPgogCiAgICAgICAg
IERvbid0IGVtaXREaXJlY3RCaW5kaW5nKCkgaWYgdGhlcmUgaXMgYSBbLi4ucmVzdF0gZWxlbWVu
dCBiaW5kaW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZyBiL1NvdXJjZS9XVEYv
Q2hhbmdlTG9nCmluZGV4IDdjODgxNjIzNzg4NTE0MmViNTIxMmIyMTMwNzRjNmQ4NDc1YTVmYmUu
LmU0ZTEyZjZlMWZkN2UzOGI1OTczNGM3Yzk5MGQ2YjZkNjBhOTk1MWUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
NTIgQEAKKzIwMjAtMDktMDkgIERldmluIFJvdXNzbyAgPGRyb3Vzc29AYXBwbGUuY29tPgorCisg
ICAgICAgIFdlYiBJbnNwZWN0b3I6IG1vZGVybml6ZSBnZW5lcmF0ZWQgYmFja2VuZCBwcm90b2Nv
bCBjb2RlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MTYzMDIKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzY4NTQ3NjQ5PgorCisgICAgICAgIFJldmll
d2VkIGJ5IEJyaWFuIEJ1cmcuCisKKyAgICAgICAgKiB3dGYvSlNPTlZhbHVlcy5oOgorICAgICAg
ICAoV1RGOjpKU09OSW1wbDo6T2JqZWN0QmFzZTo6c2V0VmFsdWUpOgorICAgICAgICAoV1RGOjpK
U09OSW1wbDo6T2JqZWN0QmFzZTo6c2V0T2JqZWN0KToKKyAgICAgICAgKFdURjo6SlNPTkltcGw6
Ok9iamVjdEJhc2U6OnNldEFycmF5KToKKyAgICAgICAgKFdURjo6SlNPTkltcGw6OkFycmF5QmFz
ZTo6cHVzaFZhbHVlKToKKyAgICAgICAgKFdURjo6SlNPTkltcGw6OkFycmF5QmFzZTo6cHVzaE9i
amVjdCk6CisgICAgICAgIChXVEY6OkpTT05JbXBsOjpBcnJheUJhc2U6OnB1c2hBcnJheSk6Cisg
ICAgICAgIChXVEY6OkpTT05JbXBsOjpBcnJheU9mOjpBcnJheU9mKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdURjo6SlNPTkltcGw6OkFycmF5T2Y6OmNhc3RlZEFycmF5KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdURjo6SlNPTkltcGw6OkFycmF5T2Y6OmFkZEl0ZW0pOiBEZWxldGVkLgorICAgICAgICAo
V1RGOjpKU09OSW1wbDo6QXJyYXlPZjo6Y3JlYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKiB3dGYv
SlNPTlZhbHVlcy5jcHA6CisgICAgICAgIChXVEY6OkpTT05JbXBsOjpWYWx1ZTo6YXNWYWx1ZSk6
CisgICAgICAgIChXVEY6OkpTT05JbXBsOjpWYWx1ZTo6YXNPYmplY3QpOgorICAgICAgICAoV1RG
OjpKU09OSW1wbDo6VmFsdWU6OmFzQXJyYXkpOgorICAgICAgICAoV1RGOjpKU09OSW1wbDo6VmFs
dWU6OnBhcnNlSlNPTik6CisgICAgICAgIChXVEY6OkpTT05JbXBsOjpWYWx1ZTo6YXNCb29sZWFu
IGNvbnN0KToKKyAgICAgICAgKFdURjo6SlNPTkltcGw6OlZhbHVlOjphc0RvdWJsZSBjb25zdCk6
CisgICAgICAgIChXVEY6OkpTT05JbXBsOjpWYWx1ZTo6YXNJbnRlZ2VyIGNvbnN0KToKKyAgICAg
ICAgKFdURjo6SlNPTkltcGw6OlZhbHVlOjphc1N0cmluZyBjb25zdCk6CisgICAgICAgIChXVEY6
OkpTT05JbXBsOjpPYmplY3RCYXNlOjphc09iamVjdCk6CisgICAgICAgIChXVEY6OkpTT05JbXBs
OjpPYmplY3RCYXNlOjptZW1vcnlDb3N0IGNvbnN0KToKKyAgICAgICAgKFdURjo6SlNPTkltcGw6
Ok9iamVjdEJhc2U6OmdldEJvb2xlYW4gY29uc3QpOgorICAgICAgICAoV1RGOjpKU09OSW1wbDo6
T2JqZWN0QmFzZTo6Z2V0RG91YmxlIGNvbnN0KToKKyAgICAgICAgKFdURjo6SlNPTkltcGw6Ok9i
amVjdEJhc2U6OmdldEludGVnZXIgY29uc3QpOgorICAgICAgICAoV1RGOjpKU09OSW1wbDo6T2Jq
ZWN0QmFzZTo6Z2V0U3RyaW5nIGNvbnN0KToKKyAgICAgICAgKFdURjo6SlNPTkltcGw6Ok9iamVj
dEJhc2U6OmdldE9iamVjdCBjb25zdCk6CisgICAgICAgIChXVEY6OkpTT05JbXBsOjpPYmplY3RC
YXNlOjpnZXRBcnJheSBjb25zdCk6CisgICAgICAgIChXVEY6OkpTT05JbXBsOjpPYmplY3RCYXNl
OjpnZXRWYWx1ZSBjb25zdCk6CisgICAgICAgIChXVEY6OkpTT05JbXBsOjpPYmplY3RCYXNlOjpP
YmplY3RCYXNlKToKKyAgICAgICAgKFdURjo6SlNPTkltcGw6OkFycmF5QmFzZTo6YXNBcnJheSk6
CisgICAgICAgIChXVEY6OkpTT05JbXBsOjpBcnJheUJhc2U6OndyaXRlSlNPTiBjb25zdCk6Cisg
ICAgICAgIChXVEY6OkpTT05JbXBsOjpBcnJheUJhc2U6OkFycmF5QmFzZSk6CisgICAgICAgIChX
VEY6OkpTT05JbXBsOjpBcnJheUJhc2U6OmdldCBjb25zdCk6CisgICAgICAgIChXVEY6OkpTT05J
bXBsOjpBcnJheUJhc2U6Om1lbW9yeUNvc3QgY29uc3QpOgorICAgICAgICAoV1RGOjpKU09OSW1w
bDo6T2JqZWN0QmFzZTo6b3BlbkFjY2Vzc29ycyk6IERlbGV0ZWQuCisgICAgICAgIFVzZSBgUmVm
JiZgIHdoZXJldmVyIHBvc3NpYmxlIGFuZCBgT3B0aW9uYWxgIGluc3RlYWQgb2YgYW4gb3V0IHBh
cmFtZXRlciBmb3IgYGdldCpgL2BhcypgCisgICAgICAgIHNvIHRoYXQgdmFsdWVzIGNhbiBiZSBt
b3JlIGVhc2lseSBtYW5pcHVsYXRlZCBhbmQgY2FuIGJlIGNvbmZpZGVudGx5IGFzc3VtZWQgdG8g
ZXhpc3QuCisgICAgICAgIFJlbW92ZSB1bnVzZWQgb3ZlcmxvYWRzIGFuZCBhbGxvdyBzdWJjbGFz
c2VzIHRvIGNhbGwgYGFzKmAgaW5zdGVhZCBvZiBgb3BlbkFjY2Vzc29yc2AgYXMKKyAgICAgICAg
dGhleSdyZSBlZmZlY3RpdmVseSB0aGUgc2FtZSB0aGluZy4KKwogMjAyMC0wOS0wOCAgUnlvc3Vr
ZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBOb2RlIGZsYWdzIHNob3VsZCBi
ZSBhbiBPcHRpb25TZXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAxNmVhYTRmYTU5YmUyYzIwZGY5MmNiZDEzZTI2
OGQ3ZGY1MGY2NTRiLi44YzRmZGY0ZmIyNmRiMGQyODdmOTMxYjc5YmNhMmExOTQ2ZmM4NWQ1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTM5IEBACisyMDIwLTA5LTA5ICBEZXZpbiBSb3Vzc28gIDxk
cm91c3NvQGFwcGxlLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBtb2Rlcm5pemUgZ2Vu
ZXJhdGVkIGJhY2tlbmQgcHJvdG9jb2wgY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE2MzAyCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS82ODU0
NzY0OT4KKworICAgICAgICBSZXZpZXdlZCBieSBCcmlhbiBCdXJnLgorCisgICAgICAgIFByZXZp
b3VzbHksIHRoZSBpbnNwZWN0b3IgcHJvdG9jb2wgd2FzIGV4cHJlc3NlZCBpbiBjb2RlIGluIGEg
c29tZXdoYXQgY29uZnVzaW5nIHdheToKKyAgICAgICAgIC0gdGhlIGVycm9yIHN0cmluZyB3YXMg
dGhlIGZpcnN0IGFyZ3VtZW50CisgICAgICAgICAtIHJlcXVpcmVkIHBhcmFtZXRlcnMgd2VyZSBg
VGAgb3IgYGNvbnN0IFQmYAorICAgICAgICAgLSBvcHRpb25hbCBwYXJhbWV0ZXJzIHdlcmUgYGNv
bnN0IFQqYAorICAgICAgICAgLSBlbnVtIHBhcmFtZXRlcnMgd2VyZSB0aGUgdW5kZXJseWluZyB0
eXBlIHJlcXVpcmluZyB0aGUgYmFja2VuZCBkaXNwYXRjaGVyIGhhbmRsZXIgdG8KKyAgICAgICAg
ICAgcHJvY2VzcyBpdCBpbnN0ZWFkIG9mIGl0IGJlaW5nIHByZXByb2Nlc3NlZAorICAgICAgICAg
LSByZXF1aXJlZCByZXR1cm5zIHdlcmUgYFQmYAorICAgICAgICAgLSBvcHRpb25hbCByZXR1cm5z
IHdlcmUgYFQqYAorICAgICAgICBUaGlzIGRvZXNuJ3QgcmVhbGx5IG1ha2UgZm9yIGVhc3kvb2J2
aW91cyByZWFkaW5nIG9mIGNvZGUgc2luY2UgdGhlIG9yZGVyIG9mIGFyZ3VtZW50cyBpcworICAg
ICAgICBub3Qgd2VpcmQgKGUuZy4gZXJyb3Igc3RyaW5nIGZpcnN0KSwgYW5kIHRoYXQgdGhlcmUg
YXJlIHJlZmVyZW5jZXMvcG9pbnRlcnMgdG8gcHJpbWl0aXZlCisgICAgICAgIHR5cGVzLgorCisg
ICAgICAgIFRoaXMgcGF0Y2ggY2xlYW5zIHVwIHRoZSBnZW5lcmF0ZWQgaW5zcGVjdG9yIHByb3Rv
Y29sIGNvZGUgdG8gYmU6CisgICAgICAgICAtIHJlcXVpcmVkIHBhcmFtZXRlcnMgYXJlIGBUYCBv
ciBgUmVmPFQ+JiZgCisgICAgICAgICAtIG9wdGlvbmFsIHBhcmFtZXRlcnMgYXJlIGBPcHRpb25h
bDxUPiYmYCBvciBgUmVmUHRyPFQ+JiZgCisgICAgICAgICAtIGVudW0gcGFyYW1ldGVycyBhcmUg
cHJlcHJvY2Vzc2VkIGFuZCBwYXNzZWQgdG8gdGhlIGJhY2tlbmQgZGlzcGF0Y2hlciBoYW5kbGVy
IGlmIHZhbGlkCisgICAgICAgICAtIHN5bmNocm9ub3VzIGNvbW1hbmRzIHJldHVybiBgRXhwZWN0
ZWQ8WCwgRXJyb3JTdHJpbmc+YCB1c2luZyB0aGUgc2FtZSB0eXBlcy9ydWxlcyBhYm92ZQorICAg
ICAgICAgICB3aGVyZSBgWGAgaXMgZWl0aGVyIGEgc2luZ2xlIHJldHVybiBvciBhIGBzdGQ6OnR1
cGxlYCBvZiBtdWx0aXBsZSByZXR1cm5zCisKKyAgICAgICAgVGhlIG9uZSBleGNlcHRpb24gdG8g
dGhlIGFib3ZlIGlzIGBTdHJpbmdgLCB3aGljaCBpcyBhbHJlYWR5IGEgdHJpLXN0YXRlIG9mIGBu
dWxsU3RyaW5nKClgLAorICAgICAgICBgZW1wdHlTdHJpbmcoKWAsIGFuZCBzb21ldGhpbmcgc2V0
LCBzbyB0aGVyZSdzIG5vIG5lZWQgdG8gdXNlIGBPcHRpb25hbDxTdHJpbmc+YC4KKworICAgICAg
ICBBbHNvIHVzZSBgUHJvdG9jb2xgIG9iamVjdHMvYHR5cGVkZWZzYCB3aGVyZXZlciBwb3NzaWJs
ZSB0byBmdXJ0aGVyIHJlbGF0ZSB0aGUgcHJvdG9jb2wKKyAgICAgICAgSlNPTiBhbmQgdGhlIGFj
dHVhbCBiYWNrZW5kIGRpc3BhdGNoZXIgaGFuZGxlciBpbXBsZW1lbnRhdGlvbi4KKworICAgICAg
ICAqIGluc3BlY3Rvci9JbnNwZWN0b3JBdWRpdFJlc291cmNlc09iamVjdC5jcHA6CisgICAgICAg
ICogaW5zcGVjdG9yL0luc3BlY3RvckNhbnZhcy5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNw
ZWN0b3JDYW52YXMuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVy
LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5oOgorICAgICAg
ICAqIGluc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0
b3IvYWdlbnRzL0luc3BlY3RvckFuaW1hdGlvbkFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9y
L2FnZW50cy9JbnNwZWN0b3JBbmltYXRpb25BZ2VudC5jcHA6CisgICAgICAgICogaW5zcGVjdG9y
L2FnZW50cy9JbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuaDoKKyAgICAgICAgKiBpbnNw
ZWN0b3IvYWdlbnRzL0luc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5jcHA6CisgICAgICAg
ICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDUFVQcm9maWxlckFnZW50Lmg6CisgICAgICAg
ICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDUFVQcm9maWxlckFnZW50LmNwcDoKKyAgICAg
ICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNTU0FnZW50Lmg6CisgICAgICAgICogaW5z
cGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDU1NBZ2VudC5jcHA6CisgICAgICAgICogaW5zcGVjdG9y
L2FnZW50cy9JbnNwZWN0b3JDYW52YXNBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2Vu
dHMvSW5zcGVjdG9yQ2FudmFzQWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9yRE9NQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rv
ckRPTUFnZW50LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTURl
YnVnZ2VyQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTURl
YnVnZ2VyQWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9N
U3RvcmFnZUFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01T
dG9yYWdlQWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRGF0
YWJhc2VBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRGF0YWJh
c2VBZ2VudC5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JJbmRleGVk
REJBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9ySW5kZXhlZERC
QWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yTGF5ZXJUcmVl
QWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckxheWVyVHJlZUFn
ZW50LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rvck1lbW9yeUFnZW50
Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JNZW1vcnlBZ2VudC5jcHA6
CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JOZXR3b3JrQWdlbnQuaDoKKyAg
ICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rvck5ldHdvcmtBZ2VudC5jcHA6CisgICAg
ICAgICogaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JQYWdlQWdlbnQuaDoKKyAgICAgICAgKiBp
bnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclBhZ2VBZ2VudC5jcHA6CisgICAgICAgICogaW5zcGVj
dG9yL2FnZW50cy9JbnNwZWN0b3JUaW1lbGluZUFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9y
L2FnZW50cy9JbnNwZWN0b3JUaW1lbGluZUFnZW50LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3Iv
YWdlbnRzL0luc3BlY3RvcldvcmtlckFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50
cy9JbnNwZWN0b3JXb3JrZXJBZ2VudC5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9X
ZWJDb25zb2xlQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL1dlYkRlYnVnZ2Vy
QWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL1dlYkRlYnVnZ2VyQWdlbnQuY3Bw
OgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvV2ViSGVhcEFnZW50Lmg6CisgICAgICAgICog
aW5zcGVjdG9yL2FnZW50cy9XZWJIZWFwQWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9h
Z2VudHMvcGFnZS9QYWdlQXVkaXRBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMv
cGFnZS9QYWdlQXVkaXRBZ2VudC5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9wYWdl
L1BhZ2VDb25zb2xlQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFn
ZUNvbnNvbGVBZ2VudC5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VE
T01EZWJ1Z2dlckFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VE
T01EZWJ1Z2dlckFnZW50LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFn
ZURlYnVnZ2VyQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZURl
YnVnZ2VyQWdlbnQuY3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlSGVh
cEFnZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VIZWFwQWdlbnQu
Y3BwOgorICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlTmV0d29ya0FnZW50Lmg6
CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VOZXR3b3JrQWdlbnQuY3BwOgor
ICAgICAgICAqIGluc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlUnVudGltZUFnZW50Lmg6CisgICAg
ICAgICogaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VSdW50aW1lQWdlbnQuY3BwOgorICAgICAg
ICAqIGluc3BlY3Rvci9hZ2VudHMvd29ya2VyL1NlcnZpY2VXb3JrZXJBZ2VudC5oOgorICAgICAg
ICAqIGluc3BlY3Rvci9hZ2VudHMvd29ya2VyL1NlcnZpY2VXb3JrZXJBZ2VudC5jcHA6CisgICAg
ICAgICogaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2VyQXVkaXRBZ2VudC5oOgorICAgICAg
ICAqIGluc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlckNvbnNvbGVBZ2VudC5oOgorICAgICAg
ICAqIGluc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlckF1ZGl0QWdlbnQuY3BwOgorICAgICAg
ICAqIGluc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlckRPTURlYnVnZ2VyQWdlbnQuaDoKKyAg
ICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJET01EZWJ1Z2dlckFnZW50LmNw
cDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJEZWJ1Z2dlckFnZW50
Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2VyRGVidWdnZXJBZ2Vu
dC5jcHA6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2VyTmV0d29ya0Fn
ZW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2VyTmV0d29ya0Fn
ZW50LmNwcDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJSdW50aW1l
QWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJSdW50aW1l
QWdlbnQuY3BwOgorICAgICAgICBFbGlkZWQgYmFja2VuZCBkaXNwYXRjaGVyIGhhbmRsZXIgY2hh
bmdlcyBkZXNjcmliZSBhYm92ZS4KKworICAgICAgICAqIGluc3BlY3Rvci9Db21tYW5kTGluZUFQ
SUhvc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29tbWFuZExpbmVBUElIb3N0OjppbnNwZWN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbW1hbmRMaW5lQVBJSG9zdDo6Y2xlYXJDb25zb2xlTWVz
c2FnZXMpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JGcm9udGVuZEhvc3QuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6dmFsdWVQYXlsb2FkRnJvbUpTT05WYWx1ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JGcm9udGVuZEhvc3Q6OmxvZ0RpYWdub3N0aWNFdmVudCk6CisgICAg
ICAgICogaW5zcGVjdG9yL1RpbWVsaW5lUmVjb3JkRmFjdG9yeS5oOgorICAgICAgICAqIGluc3Bl
Y3Rvci9UaW1lbGluZVJlY29yZEZhY3RvcnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGltZWxp
bmVSZWNvcmRGYWN0b3J5OjphcHBlbmRMYXlvdXRSb290KToKKyAgICAgICAgKiBNb2R1bGVzL2Fw
cGxpY2F0aW9ubWFuaWZlc3QvQXBwbGljYXRpb25NYW5pZmVzdFBhcnNlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpBcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyOjpwYXJzZU1hbmlmZXN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXI6OnBhcnNlU3RhcnRVUkwp
OgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25NYW5pZmVzdFBhcnNlcjo6cGFyc2VEaXNw
bGF5KToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXI6OnBhcnNl
U2NvcGUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbGljYXRpb25NYW5pZmVzdFBhcnNlcjo6cGFy
c2VHZW5lcmljU3RyaW5nKToKKyAgICAgICAgKiBNb2R1bGVzL2VuY3J5cHRlZG1lZGlhL0luaXRE
YXRhUmVnaXN0cnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZXh0cmFjdEtleUlEc0tleWlkcyk6
CisgICAgICAgICogcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNVXRpbGl0aWVzLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNETVV0aWxpdGllczo6cGFyc2VKU09OT2JqZWN0KToKKyAgICAgICAg
KiBwbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9jbGVhcmtleS9DRE1DbGVhcktleS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpwYXJzZUxpY2Vuc2VGb3JtYXQpOgorICAgICAgICAoV2ViQ29yZTo6cGFy
c2VMaWNlbnNlUmVsZWFzZUFja25vd2xlZGdlbWVudEZvcm1hdCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL0NETUZhaXJQbGF5U3RyZWFtaW5nLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OmV4dHJhY3RTaW5mRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvYXZmb3VuZGF0aW9uL29iamMvQ0RNSW5zdGFuY2VGYWlyUGxheVN0cmVhbWluZ0FWRk9iakMu
bW06CisgICAgICAgIChXZWJDb3JlOjpwYXJzZUpTT05WYWx1ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDRE1JbnN0YW5jZVNlc3Npb25GYWlyUGxheVN0cmVhbWluZ0FWRk9iakM6OnVwZGF0ZUxpY2Vu
c2UpOgorICAgICAgICBgSlNPTmAgY2xhc3NlcyBub3cgdXNlIGBSZWYmJmAgd2hlcmV2ZXIgcG9z
c2libGUgYW5kIGBPcHRpb25hbGAgaW5zdGVhZCBvZiBhbiBvdXQgcGFyYW1ldGVyCisgICAgICAg
IGZvciBgZ2V0KmAvYGFzKmAgc28gdGhhdCB2YWx1ZXMgY2FuIGJlIG1vcmUgZWFzaWx5IG1hbmlw
dWxhdGVkIGFuZCBjYW4gYmUgY29uZmlkZW50bHkga25vd24KKyAgICAgICAgdG8gZXhpc3QuCisK
IDIwMjAtMDktMDkgIEFudG9pbmUgUXVpbnQgIDxncmFvdXRzQHdlYmtpdC5vcmc+CiAKICAgICAg
ICAgUkVHUkVTU0lPTiAocjI2NDg1Nik6IHVwZGF0aW5nIGVhc2luZyBvbiBhY2NlbGVyYXRlZCBh
bmltYXRpb24gcmVzdWx0cyBpbiBpbmNvcnJlY3QgcGxheWJhY2sKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJEcml2ZXIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkRyaXZlci9DaGFuZ2VMb2cKaW5kZXgg
ZGEzYjY0Y2FkNWVlMTQ5NTY2NGM3ZjhjYjBmNzg0ODk5ZjU3ODg5NC4uNTllOGU2NWY5YWQzOTcz
YTgyMmY1OWU0MWYxOTllMjdjZThmNjFkYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkRyaXZlci9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkRyaXZlci9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMzcg
QEAKKzIwMjAtMDktMDkgIERldmluIFJvdXNzbyAgPGRyb3Vzc29AYXBwbGUuY29tPgorCisgICAg
ICAgIFdlYiBJbnNwZWN0b3I6IG1vZGVybml6ZSBnZW5lcmF0ZWQgYmFja2VuZCBwcm90b2NvbCBj
b2RlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTYz
MDIKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzY4NTQ3NjQ5PgorCisgICAgICAgIFJldmlld2Vk
IGJ5IEJyaWFuIEJ1cmcuCisKKyAgICAgICAgKiBDb21tYW5kUmVzdWx0LmNwcDoKKyAgICAgICAg
KFdlYkRyaXZlcjo6Q29tbWFuZFJlc3VsdDo6Q29tbWFuZFJlc3VsdCk6CisgICAgICAgICogU2Vz
c2lvbi5jcHA6CisgICAgICAgIChXZWJEcml2ZXI6OmZpcnN0V2luZG93SGFuZGxlSW5SZXN1bHQp
OgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjpnZXRUaW1lb3V0cyk6CisgICAgICAgIChX
ZWJEcml2ZXI6OlNlc3Npb246OmNyZWF0ZVRvcExldmVsQnJvd3NpbmdDb250ZXh0KToKKyAgICAg
ICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6aGFuZGxlVXNlclByb21wdHMpOgorICAgICAgICAoV2Vi
RHJpdmVyOjpTZXNzaW9uOjpyZXBvcnRVbmV4cGVjdGVkQWxlcnRPcGVuKToKKyAgICAgICAgKFdl
YkRyaXZlcjo6U2Vzc2lvbjo6Z28pOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjpnZXRD
dXJyZW50VVJMKToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6YmFjayk6CisgICAgICAg
IChXZWJEcml2ZXI6OlNlc3Npb246OmZvcndhcmQpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNz
aW9uOjpyZWZyZXNoKToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6Z2V0VGl0bGUpOgor
ICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjpnZXRXaW5kb3dIYW5kbGUpOgorICAgICAgICAo
V2ViRHJpdmVyOjpTZXNzaW9uOjpjbG9zZVRvcExldmVsQnJvd3NpbmdDb250ZXh0KToKKyAgICAg
ICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6c3dpdGNoVG9XaW5kb3cpOgorICAgICAgICAoV2ViRHJp
dmVyOjpTZXNzaW9uOjpnZXRXaW5kb3dIYW5kbGVzKToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vz
c2lvbjo6bmV3V2luZG93KToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6c3dpdGNoVG9G
cmFtZSk6CisgICAgICAgIChXZWJEcml2ZXI6OlNlc3Npb246OnN3aXRjaFRvUGFyZW50RnJhbWUp
OgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjpnZXRUb3BsZXZlbEJyb3dzaW5nQ29udGV4
dFJlY3QpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjpzZXRXaW5kb3dSZWN0KToKKyAg
ICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6bWF4aW1pemVXaW5kb3cpOgorICAgICAgICAoV2Vi
RHJpdmVyOjpTZXNzaW9uOjptaW5pbWl6ZVdpbmRvdyk6CisgICAgICAgIChXZWJEcml2ZXI6OlNl
c3Npb246OmZ1bGxzY3JlZW5XaW5kb3cpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjpj
cmVhdGVFbGVtZW50KToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6ZXh0cmFjdEVsZW1l
bnRJRCk6CisgICAgICAgIChXZWJEcml2ZXI6OlNlc3Npb246OmNvbXB1dGVFbGVtZW50TGF5b3V0
KToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6ZmluZEVsZW1lbnRzKToKKyAgICAgICAg
KFdlYkRyaXZlcjo6U2Vzc2lvbjo6Z2V0QWN0aXZlRWxlbWVudCk6CisgICAgICAgIChXZWJEcml2
ZXI6OlNlc3Npb246OmlzRWxlbWVudFNlbGVjdGVkKToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vz
c2lvbjo6Z2V0RWxlbWVudFRleHQpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjpnZXRF
bGVtZW50VGFnTmFtZSk6CisgICAgICAgIChXZWJEcml2ZXI6OlNlc3Npb246OmdldEVsZW1lbnRS
ZWN0KToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6aXNFbGVtZW50RW5hYmxlZCk6Cisg
ICAgICAgIChXZWJEcml2ZXI6OlNlc3Npb246OmlzRWxlbWVudERpc3BsYXllZCk6CisgICAgICAg
IChXZWJEcml2ZXI6OlNlc3Npb246OmdldEVsZW1lbnRBdHRyaWJ1dGUpOgorICAgICAgICAoV2Vi
RHJpdmVyOjpTZXNzaW9uOjpnZXRFbGVtZW50UHJvcGVydHkpOgorICAgICAgICAoV2ViRHJpdmVy
OjpTZXNzaW9uOjpnZXRFbGVtZW50Q1NTVmFsdWUpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNz
aW9uOjp3YWl0Rm9yTmF2aWdhdGlvblRvQ29tcGxldGUpOgorICAgICAgICAoV2ViRHJpdmVyOjpT
ZXNzaW9uOjplbGVtZW50SXNGaWxlVXBsb2FkKToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lv
bjo6cGFyc2VFbGVtZW50SXNGaWxlVXBsb2FkUmVzdWx0KToKKyAgICAgICAgKFdlYkRyaXZlcjo6
U2Vzc2lvbjo6c2VsZWN0T3B0aW9uRWxlbWVudCk6CisgICAgICAgIChXZWJEcml2ZXI6OlNlc3Np
b246OmVsZW1lbnRDbGljayk6CisgICAgICAgIChXZWJEcml2ZXI6OlNlc3Npb246OmVsZW1lbnRJ
c0VkaXRhYmxlKToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6ZWxlbWVudENsZWFyKToK
KyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6c2V0SW5wdXRGaWxlVXBsb2FkRmlsZXMpOgor
ICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjplbGVtZW50U2VuZEtleXMpOgorICAgICAgICAo
V2ViRHJpdmVyOjpTZXNzaW9uOjpnZXRQYWdlU291cmNlKToKKyAgICAgICAgKFdlYkRyaXZlcjo6
U2Vzc2lvbjo6aGFuZGxlU2NyaXB0UmVzdWx0KToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lv
bjo6ZXhlY3V0ZVNjcmlwdCk6CisgICAgICAgIChXZWJEcml2ZXI6OlNlc3Npb246OnBlcmZvcm1N
b3VzZUludGVyYWN0aW9uKToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6cGVyZm9ybUtl
eWJvYXJkSW50ZXJhY3Rpb25zKToKKyAgICAgICAgKFdlYkRyaXZlcjo6YnVpbHRBdXRvbWF0aW9u
Q29va2llKToKKyAgICAgICAgKFdlYkRyaXZlcjo6c2VyaWFsaXplQ29va2llKToKKyAgICAgICAg
KFdlYkRyaXZlcjo6U2Vzc2lvbjo6Z2V0QWxsQ29va2llcyk6CisgICAgICAgIChXZWJEcml2ZXI6
OlNlc3Npb246OmdldE5hbWVkQ29va2llKToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6
YWRkQ29va2llKToKKyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6ZGVsZXRlQ29va2llKToK
KyAgICAgICAgKFdlYkRyaXZlcjo6U2Vzc2lvbjo6ZGVsZXRlQWxsQ29va2llcyk6CisgICAgICAg
IChXZWJEcml2ZXI6OlNlc3Npb246OnBlcmZvcm1BY3Rpb25zKToKKyAgICAgICAgKFdlYkRyaXZl
cjo6U2Vzc2lvbjo6cmVsZWFzZUFjdGlvbnMpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9u
OjpkaXNtaXNzQWxlcnQpOgorICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uOjphY2NlcHRBbGVy
dCk6CisgICAgICAgIChXZWJEcml2ZXI6OlNlc3Npb246OmdldEFsZXJ0VGV4dCk6CisgICAgICAg
IChXZWJEcml2ZXI6OlNlc3Npb246OnNlbmRBbGVydFRleHQpOgorICAgICAgICAoV2ViRHJpdmVy
OjpTZXNzaW9uOjp0YWtlU2NyZWVuc2hvdCk6CisgICAgICAgICogU2Vzc2lvbkhvc3QuY3BwOgor
ICAgICAgICAoV2ViRHJpdmVyOjpTZXNzaW9uSG9zdDo6ZGlzcGF0Y2hNZXNzYWdlKToKKyAgICAg
ICAgKiBXZWJEcml2ZXJTZXJ2aWNlLmg6CisgICAgICAgICogV2ViRHJpdmVyU2VydmljZS5jcHA6
CisgICAgICAgIChXZWJEcml2ZXI6OldlYkRyaXZlclNlcnZpY2U6OmhhbmRsZVJlcXVlc3QpOgor
ICAgICAgICAoV2ViRHJpdmVyOjpXZWJEcml2ZXJTZXJ2aWNlOjpzZW5kUmVzcG9uc2UgY29uc3Qp
OgorICAgICAgICAoV2ViRHJpdmVyOjp2YWx1ZUFzTnVtYmVySW5SYW5nZSk6CisgICAgICAgIChX
ZWJEcml2ZXI6OmRlc2VyaWFsaXplVGltZW91dHMpOgorICAgICAgICAoV2ViRHJpdmVyOjpkZXNl
cmlhbGl6ZVByb3h5KToKKyAgICAgICAgKFdlYkRyaXZlcjo6V2ViRHJpdmVyU2VydmljZTo6cGFy
c2VDYXBhYmlsaXRpZXMgY29uc3QpOgorICAgICAgICAoV2ViRHJpdmVyOjpXZWJEcml2ZXJTZXJ2
aWNlOjpmaW5kU2Vzc2lvbk9yQ29tcGxldGVXaXRoRXJyb3IpOgorICAgICAgICAoV2ViRHJpdmVy
OjpXZWJEcml2ZXJTZXJ2aWNlOjp2YWxpZGF0ZWRDYXBhYmlsaXRpZXMgY29uc3QpOgorICAgICAg
ICAoV2ViRHJpdmVyOjpXZWJEcml2ZXJTZXJ2aWNlOjptZXJnZUNhcGFiaWxpdGllcyBjb25zdCk6
CisgICAgICAgIChXZWJEcml2ZXI6OldlYkRyaXZlclNlcnZpY2U6Om1hdGNoQ2FwYWJpbGl0aWVz
IGNvbnN0KToKKyAgICAgICAgKFdlYkRyaXZlcjo6V2ViRHJpdmVyU2VydmljZTo6cHJvY2Vzc0Nh
cGFiaWxpdGllcyBjb25zdCk6CisgICAgICAgIChXZWJEcml2ZXI6OldlYkRyaXZlclNlcnZpY2U6
OmNyZWF0ZVNlc3Npb24pOgorICAgICAgICAoV2ViRHJpdmVyOjpXZWJEcml2ZXJTZXJ2aWNlOjpk
ZWxldGVTZXNzaW9uKToKKyAgICAgICAgKFdlYkRyaXZlcjo6V2ViRHJpdmVyU2VydmljZTo6Z28p
OgorICAgICAgICAoV2ViRHJpdmVyOjpXZWJEcml2ZXJTZXJ2aWNlOjpzZXRXaW5kb3dSZWN0KToK
KyAgICAgICAgKFdlYkRyaXZlcjo6V2ViRHJpdmVyU2VydmljZTo6Y2xvc2VXaW5kb3cpOgorICAg
ICAgICAoV2ViRHJpdmVyOjpXZWJEcml2ZXJTZXJ2aWNlOjpzd2l0Y2hUb1dpbmRvdyk6CisgICAg
ICAgIChXZWJEcml2ZXI6OldlYkRyaXZlclNlcnZpY2U6Om5ld1dpbmRvdyk6CisgICAgICAgIChX
ZWJEcml2ZXI6OldlYkRyaXZlclNlcnZpY2U6OnN3aXRjaFRvRnJhbWUpOgorICAgICAgICAoV2Vi
RHJpdmVyOjpmaW5kRWxlbWVudE9yQ29tcGxldGVXaXRoRXJyb3IpOgorICAgICAgICAoV2ViRHJp
dmVyOjpmaW5kU3RyYXRlZ3lBbmRTZWxlY3Rvck9yQ29tcGxldGVXaXRoRXJyb3IpOgorICAgICAg
ICAoV2ViRHJpdmVyOjpXZWJEcml2ZXJTZXJ2aWNlOjpnZXRFbGVtZW50QXR0cmlidXRlKToKKyAg
ICAgICAgKFdlYkRyaXZlcjo6V2ViRHJpdmVyU2VydmljZTo6Z2V0RWxlbWVudFByb3BlcnR5KToK
KyAgICAgICAgKFdlYkRyaXZlcjo6V2ViRHJpdmVyU2VydmljZTo6Z2V0RWxlbWVudENTU1ZhbHVl
KToKKyAgICAgICAgKFdlYkRyaXZlcjo6V2ViRHJpdmVyU2VydmljZTo6ZWxlbWVudFNlbmRLZXlz
KToKKyAgICAgICAgKFdlYkRyaXZlcjo6ZmluZFNjcmlwdEFuZEFyZ3VtZW50c09yQ29tcGxldGVX
aXRoRXJyb3IpOgorICAgICAgICAoV2ViRHJpdmVyOjpXZWJEcml2ZXJTZXJ2aWNlOjpnZXROYW1l
ZENvb2tpZSk6CisgICAgICAgIChXZWJEcml2ZXI6OmRlc2VyaWFsaXplQ29va2llKToKKyAgICAg
ICAgKFdlYkRyaXZlcjo6V2ViRHJpdmVyU2VydmljZTo6YWRkQ29va2llKToKKyAgICAgICAgKFdl
YkRyaXZlcjo6V2ViRHJpdmVyU2VydmljZTo6ZGVsZXRlQ29va2llKToKKyAgICAgICAgKFdlYkRy
aXZlcjo6cHJvY2Vzc1BhdXNlQWN0aW9uKToKKyAgICAgICAgKFdlYkRyaXZlcjo6cHJvY2Vzc051
bGxBY3Rpb24pOgorICAgICAgICAoV2ViRHJpdmVyOjpwcm9jZXNzS2V5QWN0aW9uKToKKyAgICAg
ICAgKFdlYkRyaXZlcjo6cHJvY2Vzc1BvaW50ZXJBY3Rpb24pOgorICAgICAgICAoV2ViRHJpdmVy
Ojpwcm9jZXNzUG9pbnRlclBhcmFtZXRlcnMpOgorICAgICAgICAoV2ViRHJpdmVyOjpwcm9jZXNz
SW5wdXRBY3Rpb25TZXF1ZW5jZSk6CisgICAgICAgIChXZWJEcml2ZXI6OldlYkRyaXZlclNlcnZp
Y2U6OnBlcmZvcm1BY3Rpb25zKToKKyAgICAgICAgKFdlYkRyaXZlcjo6V2ViRHJpdmVyU2Vydmlj
ZTo6c2VuZEFsZXJ0VGV4dCk6CisgICAgICAgICogV2ViRHJpdmVyL2d0ay9XZWJEcml2ZXJTZXJ2
aWNlR3RrLmNwcDoKKyAgICAgICAgKFdlYkRyaXZlcjo6V2ViRHJpdmVyU2VydmljZTo6cGxhdGZv
cm1NYXRjaENhcGFiaWxpdHkpOgorICAgICAgICAoV2ViRHJpdmVyOjpXZWJEcml2ZXJTZXJ2aWNl
OjpwbGF0Zm9ybVZhbGlkYXRlQ2FwYWJpbGl0eSk6CisgICAgICAgIChXZWJEcml2ZXI6OldlYkRy
aXZlclNlcnZpY2U6OnBsYXRmb3JtUGFyc2VDYXBhYmlsaXRpZXMpOgorICAgICAgICAqIFdlYkRy
aXZlci93aW4vV2ViRHJpdmVyU2VydmljZVdpbi5jcHA6CisgICAgICAgIChXZWJEcml2ZXI6Oldl
YkRyaXZlclNlcnZpY2U6OnBsYXRmb3JtTWF0Y2hDYXBhYmlsaXR5KToKKyAgICAgICAgKFdlYkRy
aXZlcjo6V2ViRHJpdmVyU2VydmljZTo6cGxhdGZvcm1WYWxpZGF0ZUNhcGFiaWxpdHkpOgorICAg
ICAgICAoV2ViRHJpdmVyOjpXZWJEcml2ZXJTZXJ2aWNlOjpwbGF0Zm9ybVBhcnNlQ2FwYWJpbGl0
aWVzKToKKyAgICAgICAgKiBXZWJEcml2ZXIvd3BlL1dlYkRyaXZlclNlcnZpY2VXUEUuY3BwOgor
ICAgICAgICAoV2ViRHJpdmVyOjpXZWJEcml2ZXJTZXJ2aWNlOjpwbGF0Zm9ybU1hdGNoQ2FwYWJp
bGl0eSk6CisgICAgICAgIChXZWJEcml2ZXI6OldlYkRyaXZlclNlcnZpY2U6OnBsYXRmb3JtVmFs
aWRhdGVDYXBhYmlsaXR5KToKKyAgICAgICAgKFdlYkRyaXZlcjo6V2ViRHJpdmVyU2VydmljZTo6
cGxhdGZvcm1QYXJzZUNhcGFiaWxpdGllcyk6CisgICAgICAgIGBKU09OYCBjbGFzc2VzIG5vdyB1
c2UgYFJlZiYmYCB3aGVyZXZlciBwb3NzaWJsZSBhbmQgYE9wdGlvbmFsYCBpbnN0ZWFkIG9mIGFu
IG91dCBwYXJhbWV0ZXIKKyAgICAgICAgZm9yIGBnZXQqYC9gYXMqYCBzbyB0aGF0IHZhbHVlcyBj
YW4gYmUgbW9yZSBlYXNpbHkgbWFuaXB1bGF0ZWQgYW5kIGNhbiBiZSBjb25maWRlbnRseSBrbm93
bgorICAgICAgICB0byBleGlzdC4KKwogMjAyMC0wNy0xNSAgRnVqaWkgSGlyb25vcmkgIDxIaXJv
bm9yaS5GdWppaUBzb255LmNvbT4KIAogICAgICAgICBbQ01ha2VdW1dlYkRyaXZlcl0gR2VuZXJh
dGluZyBXZWJEcml2ZXJBdG9tcy5jcHAgaXMgcmFyZWx5IGZhaWxpbmcgYXMgIkltcG9ydEVycm9y
OiBObyBtb2R1bGUgbmFtZWQganNtaW4iCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZwppbmRleCBiNGU4
OWFmZTZkOWRlYjU5MTIyZDA4NjRlZTZlNjUyOWRlNTIzMDRmLi40NjJlNDZjN2ZlN2FjZGNlZWI3
MDc3ZmYyZDFiYjNmYjgyNTY3NmY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkv
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwyNCBAQAorMjAyMC0wOS0wOSAgRGV2aW4gUm91c3NvICA8ZHJvdXNzb0BhcHBsZS5jb20+CisK
KyAgICAgICAgV2ViIEluc3BlY3RvcjogbW9kZXJuaXplIGdlbmVyYXRlZCBiYWNrZW5kIHByb3Rv
Y29sIGNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIxNjMwMgorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNjg1NDc2NDk+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgQnJpYW4gQnVyZy4KKworICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQ29udHJvbGxl
cnMvQ1NTTWFuYWdlci5qczoKKyAgICAgICAgKFdJLkNTU01hbmFnZXIucHJvdG90eXBlLnNldCBm
b3JjZWRBcHBlYXJhbmNlKToKKyAgICAgICAgTm93IHRoYXQgZW51bXMgYXJlIHByb2Nlc3NlZCBi
ZWZvcmUgYmVpbmcgcGFzc2VkIHRvIGJhY2tlbmQgZGlzcGFjaGVyIGhhbmRsZXJzLCB0aGUKKyAg
ICAgICAgYGFwcGVhcmFuY2VgIHBhcmFtZXRlciBvZiBgUGFnZS5zZXRGb3JjZWRBcHBlYXJhbmNl
YCBtdXN0IGJlIG1hcmtlZCBgb3B0aW9uYWxgIGFzCisgICAgICAgIHRoZXJlJ3Mgbm8gd2F5IGZv
ciBpdCB0byBhY2NlcHQgYW4gZW1wdHkgc3RyaW5nLCBhcyB0aGF0J3Mgbm90IHBvc3NpYmxlIGZv
ciBhbiBlbnVtLgorICAgICAgICBBcyBzdWNoLCByZXdvcmsgdGhlIGZyb250ZW5kIGxvZ2ljIGZv
ciBpbnZva2luZyBgUGFnZS5zZXRGb3JjZWRBcHBlYXJhbmNlYCB0byBpbnN0ZWFkCisgICAgICAg
IG5vdCBwcm92aWRlIGFuIGBhcHBlYXJhbmNlYCBwYXJhbWV0ZXIgYXQgYWxsIHdoZW4gd2FudGlu
ZyB0byAidW5zZXQiIGl0LgorCisgICAgICAgICogVXNlckludGVyZmFjZS9WaWV3cy9TZXR0aW5n
c1RhYkNvbnRlbnRWaWV3LmpzOgorICAgICAgICAoV0kuU2V0dGluZ3NUYWJDb250ZW50Vmlldy5w
cm90b3R5cGUuX2NyZWF0ZUNvbnNvbGVTZXR0aW5nc1ZpZXcpOgorICAgICAgICBOb3cgdGhhdCBh
bGwgbG9nZ2luZyBjaGFubmVscyBtYXRjaGluZyBhIGBDb25zb2xlLkNoYW5uZWxTb3VyY2VgIGFy
ZSByZXR1cm5lZCBpbnN0ZWFkIG9mCisgICAgICAgIGp1c3QgdGhlIGhhcmRjb2RlZCBsaXN0LCBj
aGVjayBmb3IgYSBtYXRjaGluZyBgV0kuVUlTdHJpbmdgIGJlZm9yZSBzaG93aW5nIGEgYDxzZWxl
Y3Q+YC4KKwogMjAyMC0wOS0wOCAgUGF0cmljayBBbmdsZSAgPHBhbmdsZUBhcHBsZS5jb20+CiAK
ICAgICAgICAgV2ViIEluc3BlY3RvcjogSW5jb3JyZWN0IGRlY2ltYWwgc2VwYXJhdG9yIGluIE5l
dHdvcmsgd2ViIGluc3BlY3RvcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cg
Yi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCA2Y2JiZDE1MjE2MTk1MDEyZjdhNTM5Zjhh
MWNmZjdmMWI3MmI4ZTE0Li5kNWUzMzc5ZGY2NTc0MWViZmViYTBhMjYyMDQzZjRmNGU5ZGYyZDQx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDU1IEBACisyMDIwLTA5LTA5ICBEZXZpbiBSb3Vzc28gIDxk
cm91c3NvQGFwcGxlLmNvbT4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBtb2Rlcm5pemUgZ2Vu
ZXJhdGVkIGJhY2tlbmQgcHJvdG9jb2wgY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE2MzAyCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS82ODU0
NzY0OT4KKworICAgICAgICBSZXZpZXdlZCBieSBCcmlhbiBCdXJnLgorCisgICAgICAgIFByZXZp
b3VzbHksIHRoZSBpbnNwZWN0b3IgcHJvdG9jb2wgd2FzIGV4cHJlc3NlZCBpbiBjb2RlIGluIGEg
c29tZXdoYXQgY29uZnVzaW5nIHdheToKKyAgICAgICAgIC0gdGhlIGVycm9yIHN0cmluZyB3YXMg
dGhlIGZpcnN0IGFyZ3VtZW50CisgICAgICAgICAtIHJlcXVpcmVkIHBhcmFtZXRlcnMgd2VyZSBg
VGAgb3IgYGNvbnN0IFQmYAorICAgICAgICAgLSBvcHRpb25hbCBwYXJhbWV0ZXJzIHdlcmUgYGNv
bnN0IFQqYAorICAgICAgICAgLSBlbnVtIHBhcmFtZXRlcnMgd2VyZSB0aGUgdW5kZXJseWluZyB0
eXBlIHJlcXVpcmluZyB0aGUgYmFja2VuZCBkaXNwYXRjaGVyIGhhbmRsZXIgdG8KKyAgICAgICAg
ICAgcHJvY2VzcyBpdCBpbnN0ZWFkIG9mIGl0IGJlaW5nIHByZXByb2Nlc3NlZAorICAgICAgICAg
LSByZXF1aXJlZCByZXR1cm5zIHdlcmUgYFQmYAorICAgICAgICAgLSBvcHRpb25hbCByZXR1cm5z
IHdlcmUgYFQqYAorICAgICAgICBUaGlzIGRvZXNuJ3QgcmVhbGx5IG1ha2UgZm9yIGVhc3kvb2J2
aW91cyByZWFkaW5nIG9mIGNvZGUgc2luY2UgdGhlIG9yZGVyIG9mIGFyZ3VtZW50cyBpcworICAg
ICAgICBub3Qgd2VpcmQgKGUuZy4gZXJyb3Igc3RyaW5nIGZpcnN0KSwgYW5kIHRoYXQgdGhlcmUg
YXJlIHJlZmVyZW5jZXMvcG9pbnRlcnMgdG8gcHJpbWl0aXZlCisgICAgICAgIHR5cGVzLgorCisg
ICAgICAgIFRoaXMgcGF0Y2ggY2xlYW5zIHVwIHRoZSBnZW5lcmF0ZWQgaW5zcGVjdG9yIHByb3Rv
Y29sIGNvZGUgdG8gYmU6CisgICAgICAgICAtIHJlcXVpcmVkIHBhcmFtZXRlcnMgYXJlIGBUYCBv
ciBgUmVmPFQ+JiZgCisgICAgICAgICAtIG9wdGlvbmFsIHBhcmFtZXRlcnMgYXJlIGBPcHRpb25h
bDxUPiYmYCBvciBgUmVmUHRyPFQ+JiZgCisgICAgICAgICAtIGVudW0gcGFyYW1ldGVycyBhcmUg
cHJlcHJvY2Vzc2VkIGFuZCBwYXNzZWQgdG8gdGhlIGJhY2tlbmQgZGlzcGF0Y2hlciBoYW5kbGVy
IGlmIHZhbGlkCisgICAgICAgICAtIHN5bmNocm9ub3VzIGNvbW1hbmRzIHJldHVybiBgRXhwZWN0
ZWQ8WCwgRXJyb3JTdHJpbmc+YCB1c2luZyB0aGUgc2FtZSB0eXBlcy9ydWxlcyBhYm92ZQorICAg
ICAgICAgICB3aGVyZSBgWGAgaXMgZWl0aGVyIGEgc2luZ2xlIHJldHVybiBvciBhIGBzdGQ6OnR1
cGxlYCBvZiBtdWx0aXBsZSByZXR1cm5zCisKKyAgICAgICAgVGhlIG9uZSBleGNlcHRpb24gdG8g
dGhlIGFib3ZlIGlzIGBTdHJpbmdgLCB3aGljaCBpcyBhbHJlYWR5IGEgdHJpLXN0YXRlIG9mIGBu
dWxsU3RyaW5nKClgLAorICAgICAgICBgZW1wdHlTdHJpbmcoKWAsIGFuZCBzb21ldGhpbmcgc2V0
LCBzbyB0aGVyZSdzIG5vIG5lZWQgdG8gdXNlIGBPcHRpb25hbDxTdHJpbmc+YC4KKworICAgICAg
ICBBbHNvIHVzZSBgUHJvdG9jb2xgIG9iamVjdHMvYHR5cGVkZWZzYCB3aGVyZXZlciBwb3NzaWJs
ZSB0byBmdXJ0aGVyIHJlbGF0ZSB0aGUgcHJvdG9jb2wKKyAgICAgICAgSlNPTiBhbmQgdGhlIGFj
dHVhbCBiYWNrZW5kIGRpc3BhdGNoZXIgaGFuZGxlciBpbXBsZW1lbnRhdGlvbi4KKworICAgICAg
ICAqIFVJUHJvY2Vzcy9BdXRvbWF0aW9uL0F1dG9tYXRpb24uanNvbjoKKyAgICAgICAgYENvb3Jk
aW5hdGVTeXN0ZW1gIGhhcyBgUGFnZWAgYW5kIGBWaWV3cG9ydGAgZW51bSB2YWx1ZXMsIGJ1dCBg
V2ViQXV0b21hdGlvblNlc3Npb25gIGNoZWNrcworICAgICAgICBmb3IgYCJQYWdlImAgYW5kIGAi
TGF5b3V0Vmlld3BvcnQiYC4gQWRkIGEgYExheW91dFZpZXdwb3J0YCBlbnVtIHZhbHVlIG5vdyB0
aGF0IGVudW1zIGFyZQorICAgICAgICBwcm9jZXNzZWQgYmVmb3JlIGJlaW5nIHBhc3NlZCB0byBi
YWNrZW5kIGRpc3BhY2hlciBoYW5kbGVycyB0byBwcmVzZXJ2ZSBmdW5jdGlvbmFsaXR5LgorCisg
ICAgICAgICogVUlQcm9jZXNzL0luc3BlY3Rvci9BZ2VudHMvSW5zcGVjdG9yQnJvd3NlckFnZW50
Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0luc3BlY3Rvci9BZ2VudHMvSW5zcGVjdG9yQnJvd3Nl
ckFnZW50LmNwcDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9u
U2Vzc2lvbk1hY3Jvcy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9t
YXRpb25TZXNzaW9uLmg6CisgICAgICAgICogVUlQcm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21h
dGlvblNlc3Npb24uY3BwOgorICAgICAgICAqIFVJUHJvY2Vzcy9BdXRvbWF0aW9uL21hYy9XZWJB
dXRvbWF0aW9uU2Vzc2lvbk1hYy5tbToKKyAgICAgICAgRWxpZGVkIGJhY2tlbmQgZGlzcGF0Y2hl
ciBoYW5kbGVyIGNoYW5nZXMgZGVzY3JpYmUgYWJvdmUuCisKKyAgICAgICAgKiBVSVByb2Nlc3Mv
SW5zcGVjdG9yL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JDbGllbnQuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpSZW1vdGVJbnNwZWN0b3JDbGllbnQ6OnNldFRhcmdldExpc3QpOgorICAgICAgICBgSlNP
TmAgY2xhc3NlcyBub3cgdXNlIGBSZWYmJmAgd2hlcmV2ZXIgcG9zc2libGUgYW5kIGBPcHRpb25h
bGAgaW5zdGVhZCBvZiBhbiBvdXQgcGFyYW1ldGVyCisgICAgICAgIGZvciBgZ2V0KmAvYGFzKmAg
c28gdGhhdCB2YWx1ZXMgY2FuIGJlIG1vcmUgZWFzaWx5IG1hbmlwdWxhdGVkIGFuZCBjYW4gYmUg
Y29uZmlkZW50bHkga25vd24KKyAgICAgICAgdG8gZXhpc3QuCisKIDIwMjAtMDktMDggIENocmlz
IER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBSZWdyZXNzaW9uKHIyNjA2MTQp
IFBvd2VyIHVzYWdlIGhhcyBpbmNyZWFzZWQgZHVlIHRvIGV4dHJhIHRocmVhZCBob3BwaW5nCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYmluZGluZ3MvU2NyaXB0VmFsdWUuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2JpbmRpbmdzL1NjcmlwdFZhbHVlLmNwcAppbmRleCA2
Yjg1M2M5MzFmMWRjZTkyNTNiYmFjMDZhOTVlNmFhYzUyN2NmMjVhLi43OTY4YjkwYTczYjI4MmRm
NTk4MjI1NmE2ZWRjYjJkNmU1NzQzOTZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYmluZGluZ3MvU2NyaXB0VmFsdWUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
aW5kaW5ncy9TY3JpcHRWYWx1ZS5jcHAKQEAgLTY5LDcgKzY5LDcgQEAgc3RhdGljIFJlZlB0cjxK
U09OOjpWYWx1ZT4ganNUb0luc3BlY3RvclZhbHVlKEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTVmEKICAgICAgICAgICAgICAgICBhdXRvIGVsZW1lbnRWYWx1ZSA9IGpzVG9JbnNwZWN0
b3JWYWx1ZShnbG9iYWxPYmplY3QsIGFycmF5LmdldEluZGV4KGdsb2JhbE9iamVjdCwgaSksIG1h
eERlcHRoKTsKICAgICAgICAgICAgICAgICBpZiAoIWVsZW1lbnRWYWx1ZSkKICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgICAgICAgICAgaW5zcGVjdG9yQXJyYXkt
PnB1c2hWYWx1ZShXVEZNb3ZlKGVsZW1lbnRWYWx1ZSkpOworICAgICAgICAgICAgICAgIGluc3Bl
Y3RvckFycmF5LT5wdXNoVmFsdWUoZWxlbWVudFZhbHVlLnJlbGVhc2VOb25OdWxsKCkpOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIGluc3BlY3RvckFycmF5OwogICAgICAgICB9
CkBAIC04Miw3ICs4Miw3IEBAIHN0YXRpYyBSZWZQdHI8SlNPTjo6VmFsdWU+IGpzVG9JbnNwZWN0
b3JWYWx1ZShKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhCiAgICAgICAgICAgICBh
dXRvIGluc3BlY3RvclZhbHVlID0ganNUb0luc3BlY3RvclZhbHVlKGdsb2JhbE9iamVjdCwgb2Jq
ZWN0LmdldChnbG9iYWxPYmplY3QsIG5hbWUpLCBtYXhEZXB0aCk7CiAgICAgICAgICAgICBpZiAo
IWluc3BlY3RvclZhbHVlKQogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAg
ICAgICAgaW5zcGVjdG9yT2JqZWN0LT5zZXRWYWx1ZShuYW1lLnN0cmluZygpLCBXVEZNb3ZlKGlu
c3BlY3RvclZhbHVlKSk7CisgICAgICAgICAgICBpbnNwZWN0b3JPYmplY3QtPnNldFZhbHVlKG5h
bWUuc3RyaW5nKCksIGluc3BlY3RvclZhbHVlLnJlbGVhc2VOb25OdWxsKCkpOwogICAgICAgICB9
CiAgICAgICAgIHJldHVybiBpbnNwZWN0b3JPYmplY3Q7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9Bc3luY1N0YWNrVHJhY2UuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9Bc3luY1N0YWNrVHJhY2UuY3BwCmluZGV4IDU0NTBl
MmYzYzAwOWM2MDE4Y2Y5YzUzMGEwMzZjM2RiN2E2MzQ1MGUuLmE1OTYzOTVjYmVhNzkxZTcwYmUz
ZTIzNjJmZTU3ZjQzODM0YTU5NGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3IvQXN5bmNTdGFja1RyYWNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL0FzeW5jU3RhY2tUcmFjZS5jcHAKQEAgLTk3LDcgKzk3LDcgQEAgdm9pZCBBc3lu
Y1N0YWNrVHJhY2U6OmRpZENhbmNlbEFzeW5jQ2FsbCgpCiAgICAgbV9zdGF0ZSA9IFN0YXRlOjpD
YW5jZWxlZDsKIH0KIAotUmVmUHRyPFByb3RvY29sOjpDb25zb2xlOjpTdGFja1RyYWNlPiBBc3lu
Y1N0YWNrVHJhY2U6OmJ1aWxkSW5zcGVjdG9yT2JqZWN0KCkgY29uc3QKK1JlZjxQcm90b2NvbDo6
Q29uc29sZTo6U3RhY2tUcmFjZT4gQXN5bmNTdGFja1RyYWNlOjpidWlsZEluc3BlY3Rvck9iamVj
dCgpIGNvbnN0CiB7CiAgICAgUmVmUHRyPFByb3RvY29sOjpDb25zb2xlOjpTdGFja1RyYWNlPiB0
b3BTdGFja1RyYWNlOwogICAgIFJlZlB0cjxQcm90b2NvbDo6Q29uc29sZTo6U3RhY2tUcmFjZT4g
cHJldmlvdXNTdGFja1RyYWNlOwpAQCAtMTIwLDEzICsxMjAsMTMgQEAgUmVmUHRyPFByb3RvY29s
OjpDb25zb2xlOjpTdGFja1RyYWNlPiBBc3luY1N0YWNrVHJhY2U6OmJ1aWxkSW5zcGVjdG9yT2Jq
ZWN0KCkgY28KICAgICAgICAgICAgIHRvcFN0YWNrVHJhY2UgPSBwcm90b2NvbE9iamVjdC5wdHIo
KTsKIAogICAgICAgICBpZiAocHJldmlvdXNTdGFja1RyYWNlKQotICAgICAgICAgICAgcHJldmlv
dXNTdGFja1RyYWNlLT5zZXRQYXJlbnRTdGFja1RyYWNlKHByb3RvY29sT2JqZWN0LnB0cigpKTsK
KyAgICAgICAgICAgIHByZXZpb3VzU3RhY2tUcmFjZS0+c2V0UGFyZW50U3RhY2tUcmFjZShwcm90
b2NvbE9iamVjdC5jb3B5UmVmKCkpOwogCiAgICAgICAgIHByZXZpb3VzU3RhY2tUcmFjZSA9IFdU
Rk1vdmUocHJvdG9jb2xPYmplY3QpOwogICAgICAgICBzdGFja1RyYWNlID0gc3RhY2tUcmFjZS0+
bV9wYXJlbnQuZ2V0KCk7CiAgICAgfQogCi0gICAgcmV0dXJuIHRvcFN0YWNrVHJhY2U7CisgICAg
cmV0dXJuIHRvcFN0YWNrVHJhY2UucmVsZWFzZU5vbk51bGwoKTsKIH0KIAogdm9pZCBBc3luY1N0
YWNrVHJhY2U6OnRydW5jYXRlKHNpemVfdCBtYXhEZXB0aCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvQXN5bmNTdGFja1RyYWNlLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL0FzeW5jU3RhY2tUcmFjZS5oCmluZGV4IDZlZGU2YzQyNWFiY2Fh
MmQ2MWU1YmI3YjFiYTE5ZTMyZTU3MjNiNmMuLjQ5OWExZTA1ZmQ1OTQzZjlmYWVkYzMwZTBiZDNk
MjBlMGM1ZGRiZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
QXN5bmNTdGFja1RyYWNlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9B
c3luY1N0YWNrVHJhY2UuaApAQCAtNTEsNyArNTEsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBkaWRE
aXNwYXRjaEFzeW5jQ2FsbCgpOwogICAgIHZvaWQgZGlkQ2FuY2VsQXN5bmNDYWxsKCk7CiAKLSAg
ICBSZWZQdHI8UHJvdG9jb2w6OkNvbnNvbGU6OlN0YWNrVHJhY2U+IGJ1aWxkSW5zcGVjdG9yT2Jq
ZWN0KCkgY29uc3Q7CisgICAgUmVmPFByb3RvY29sOjpDb25zb2xlOjpTdGFja1RyYWNlPiBidWls
ZEluc3BlY3Rvck9iamVjdCgpIGNvbnN0OwogCiAgICAgfkFzeW5jU3RhY2tUcmFjZSgpOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0NvbnNvbGVNZXNzYWdl
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvQ29uc29sZU1lc3NhZ2UuY3Bw
CmluZGV4IDU0MmM3YzdiMzdlZmIyZTRhNzZhMzJhMDA4ZDA2M2RiYzgwNWNkZDAuLjkwYTFkZDk2
MDQ3MGE1NGVkM2IxNDY2Y2VjZmRlZmE4MzQ5NDU4MGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3IvQ29uc29sZU1lc3NhZ2UuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3IvQ29uc29sZU1lc3NhZ2UuY3BwCkBAIC0yNjEsOSArMjYxLDEx
IEBAIHZvaWQgQ29uc29sZU1lc3NhZ2U6OmFkZFRvRnJvbnRlbmQoQ29uc29sZUZyb250ZW5kRGlz
cGF0Y2hlciYgY29uc29sZUZyb250ZW5kRGlzCiAgICAgICAgICAgICAgICAgICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBhcmd1bWVudHNPYmplY3QtPmFk
ZEl0ZW0oV1RGTW92ZShpbnNwZWN0b3JWYWx1ZSkpOwotICAgICAgICAgICAgICAgICAgICBpZiAo
bV9hcmd1bWVudHMtPmFyZ3VtZW50Q291bnQoKSA+IDEpCi0gICAgICAgICAgICAgICAgICAgICAg
ICBhcmd1bWVudHNPYmplY3QtPmFkZEl0ZW0oaW5qZWN0ZWRTY3JpcHQud3JhcE9iamVjdChjb2x1
bW5zLCAiY29uc29sZSJfcywgdHJ1ZSkpOworICAgICAgICAgICAgICAgICAgICBhcmd1bWVudHNP
YmplY3QtPmFkZEl0ZW0oaW5zcGVjdG9yVmFsdWUucmVsZWFzZU5vbk51bGwoKSk7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChtX2FyZ3VtZW50cy0+YXJndW1lbnRDb3VudCgpID4gMSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKGF1dG8gaW5zcGVjdG9yT2JqZWN0ID0gaW5qZWN0ZWRT
Y3JpcHQud3JhcE9iamVjdChjb2x1bW5zLCAiY29uc29sZSJfcywgdHJ1ZSkpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYXJndW1lbnRzT2JqZWN0LT5hZGRJdGVtKGluc3BlY3Rvck9iamVj
dC5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBtX2FyZ3VtZW50cy0+YXJndW1lbnRDb3VudCgpOyArK2kpIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgIGF1dG8gaW5zcGVjdG9yVmFsdWUgPSBpbmplY3RlZFNjcmlwdC53cmFwT2JqZWN0KG1f
YXJndW1lbnRzLT5hcmd1bWVudEF0KGkpLCAiY29uc29sZSJfcywgZ2VuZXJhdGVQcmV2aWV3KTsK
QEAgLTI3MSw3ICsyNzMsNyBAQCB2b2lkIENvbnNvbGVNZXNzYWdlOjphZGRUb0Zyb250ZW5kKENv
bnNvbGVGcm9udGVuZERpc3BhdGNoZXImIGNvbnNvbGVGcm9udGVuZERpcwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgICAgIGFyZ3VtZW50c09iamVjdC0+YWRkSXRlbShXVEZNb3ZlKGluc3BlY3RvclZh
bHVlKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBhcmd1bWVudHNPYmplY3QtPmFkZEl0ZW0o
aW5zcGVjdG9yVmFsdWUucmVsZWFzZU5vbk51bGwoKSk7CiAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC0yODQsNyArMjg2LDcgQEAgdm9p
ZCBDb25zb2xlTWVzc2FnZTo6YWRkVG9Gcm9udGVuZChDb25zb2xlRnJvbnRlbmREaXNwYXRjaGVy
JiBjb25zb2xlRnJvbnRlbmREaXMKICAgICAgICAgICAgICAgICAgICAgaWYgKCFpbnNwZWN0b3JW
YWx1ZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAgICAg
ICAgICAgIGFyZ3VtZW50c09iamVjdC0+YWRkSXRlbShXVEZNb3ZlKGluc3BlY3RvclZhbHVlKSk7
CisgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50c09iamVjdC0+YWRkSXRlbShpbnNwZWN0b3JW
YWx1ZS5yZWxlYXNlTm9uTnVsbCgpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRT
Y3JpcHQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlw
dC5jcHAKaW5kZXggY2M4NDlmMDUxZmE0MDUxOGE5ZDFhMDM0MjliYzJiNGRiY2ZiMzEwMi4uNjkw
OWEzMzllYTJlM2RlNjAwZjU1ZmQ2ZmU0NjgzNjQ2MTcxZTBhNyAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdC5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdC5jcHAKQEAgLTU2LDcgKzU2
LDcgQEAgSW5qZWN0ZWRTY3JpcHQ6On5JbmplY3RlZFNjcmlwdCgpCiB7CiB9CiAKLXZvaWQgSW5q
ZWN0ZWRTY3JpcHQ6OmV4ZWN1dGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJp
bmcmIGZ1bmN0aW9uU3RyaW5nLCBFeGVjdXRlT3B0aW9ucyYmIG9wdGlvbnMsIFJlZlB0cjxQcm90
b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0LCBPcHRpb25hbDxib29sPiYgd2Fz
VGhyb3duLCBPcHRpb25hbDxpbnQ+JiBzYXZlZFJlc3VsdEluZGV4KQordm9pZCBJbmplY3RlZFNj
cmlwdDo6ZXhlY3V0ZShQcm90b2NvbDo6RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBT
dHJpbmcmIGZ1bmN0aW9uU3RyaW5nLCBFeGVjdXRlT3B0aW9ucyYmIG9wdGlvbnMsIFJlZlB0cjxQ
cm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0LCBPcHRpb25hbDxib29sPiYg
d2FzVGhyb3duLCBPcHRpb25hbDxpbnQ+JiBzYXZlZFJlc3VsdEluZGV4KQogewogICAgIERlcHJl
Y2F0ZWQ6OlNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihpbmplY3RlZFNjcmlwdE9iamVjdCgp
LCAiZXhlY3V0ZSJfcywgaW5zcGVjdG9yRW52aXJvbm1lbnQoKS0+ZnVuY3Rpb25DYWxsSGFuZGxl
cigpKTsKICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChmdW5jdGlvblN0cmluZyk7CkBAIC02
OSw3ICs2OSw3IEBAIHZvaWQgSW5qZWN0ZWRTY3JpcHQ6OmV4ZWN1dGUoRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGZ1bmN0aW9uU3RyCiAgICAgbWFrZUV2YWxDYWxsKGVy
cm9yU3RyaW5nLCBmdW5jdGlvbiwgcmVzdWx0LCB3YXNUaHJvd24sIHNhdmVkUmVzdWx0SW5kZXgp
OwogfQogCi12b2lkIEluamVjdGVkU2NyaXB0OjpldmFsdWF0ZShFcnJvclN0cmluZyYgZXJyb3JT
dHJpbmcsIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91
cCwgYm9vbCBpbmNsdWRlQ29tbWFuZExpbmVBUEksIGJvb2wgcmV0dXJuQnlWYWx1ZSwgYm9vbCBn
ZW5lcmF0ZVByZXZpZXcsIGJvb2wgc2F2ZVJlc3VsdCwgUmVmUHRyPFByb3RvY29sOjpSdW50aW1l
OjpSZW1vdGVPYmplY3Q+JiByZXN1bHQsIE9wdGlvbmFsPGJvb2w+JiB3YXNUaHJvd24sIE9wdGlv
bmFsPGludD4mIHNhdmVkUmVzdWx0SW5kZXgpCit2b2lkIEluamVjdGVkU2NyaXB0OjpldmFsdWF0
ZShQcm90b2NvbDo6RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGV4cHJl
c3Npb24sIGNvbnN0IFN0cmluZyYgb2JqZWN0R3JvdXAsIGJvb2wgaW5jbHVkZUNvbW1hbmRMaW5l
QVBJLCBib29sIHJldHVybkJ5VmFsdWUsIGJvb2wgZ2VuZXJhdGVQcmV2aWV3LCBib29sIHNhdmVS
ZXN1bHQsIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0LCBP
cHRpb25hbDxib29sPiYgd2FzVGhyb3duLCBPcHRpb25hbDxpbnQ+JiBzYXZlZFJlc3VsdEluZGV4
KQogewogICAgIERlcHJlY2F0ZWQ6OlNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihpbmplY3Rl
ZFNjcmlwdE9iamVjdCgpLCAiZXZhbHVhdGUiX3MsIGluc3BlY3RvckVudmlyb25tZW50KCktPmZ1
bmN0aW9uQ2FsbEhhbmRsZXIoKSk7CiAgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQoZXhwcmVz
c2lvbik7CkBAIC05MSw3ICs5MSw3IEBAIHZvaWQgSW5qZWN0ZWRTY3JpcHQ6OmF3YWl0UHJvbWlz
ZShjb25zdCBTdHJpbmcmIHByb21pc2VPYmplY3RJZCwgYm9vbCByZXR1cm5CeVZhCiAgICAgbWFr
ZUFzeW5jQ2FsbChmdW5jdGlvbiwgV1RGTW92ZShjYWxsYmFjaykpOwogfQogCi12b2lkIEluamVj
dGVkU2NyaXB0OjpjYWxsRnVuY3Rpb25PbihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0
IFN0cmluZyYgb2JqZWN0SWQsIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgY29uc3QgU3RyaW5n
JiBhcmd1bWVudHMsIGJvb2wgcmV0dXJuQnlWYWx1ZSwgYm9vbCBnZW5lcmF0ZVByZXZpZXcsIFJl
ZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0LCBPcHRpb25hbDxi
b29sPiYgd2FzVGhyb3duKQordm9pZCBJbmplY3RlZFNjcmlwdDo6Y2FsbEZ1bmN0aW9uT24oUHJv
dG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBvYmplY3RJZCwg
Y29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBjb25zdCBTdHJpbmcmIGFyZ3VtZW50cywgYm9vbCBy
ZXR1cm5CeVZhbHVlLCBib29sIGdlbmVyYXRlUHJldmlldywgUmVmUHRyPFByb3RvY29sOjpSdW50
aW1lOjpSZW1vdGVPYmplY3Q+JiByZXN1bHQsIE9wdGlvbmFsPGJvb2w+JiB3YXNUaHJvd24pCiB7
CiAgICAgRGVwcmVjYXRlZDo6U2NyaXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKGluamVjdGVkU2Ny
aXB0T2JqZWN0KCksICJjYWxsRnVuY3Rpb25PbiJfcywgaW5zcGVjdG9yRW52aXJvbm1lbnQoKS0+
ZnVuY3Rpb25DYWxsSGFuZGxlcigpKTsKICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChvYmpl
Y3RJZCk7CkBAIC0xMDUsNyArMTA1LDcgQEAgdm9pZCBJbmplY3RlZFNjcmlwdDo6Y2FsbEZ1bmN0
aW9uT24oRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIG9iamUKICAgICBB
U1NFUlQoIXNhdmVkUmVzdWx0SW5kZXgpOwogfQogCi12b2lkIEluamVjdGVkU2NyaXB0OjpldmFs
dWF0ZU9uQ2FsbEZyYW1lKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgSlNDOjpKU1ZhbHVlIGNh
bGxGcmFtZXMsIGNvbnN0IFN0cmluZyYgY2FsbEZyYW1lSWQsIGNvbnN0IFN0cmluZyYgZXhwcmVz
c2lvbiwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCwgYm9vbCBpbmNsdWRlQ29tbWFuZExpbmVB
UEksIGJvb2wgcmV0dXJuQnlWYWx1ZSwgYm9vbCBnZW5lcmF0ZVByZXZpZXcsIGJvb2wgc2F2ZVJl
c3VsdCwgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiByZXN1bHQsIE9w
dGlvbmFsPGJvb2w+JiB3YXNUaHJvd24sIE9wdGlvbmFsPGludD4mIHNhdmVkUmVzdWx0SW5kZXgp
Cit2b2lkIEluamVjdGVkU2NyaXB0OjpldmFsdWF0ZU9uQ2FsbEZyYW1lKFByb3RvY29sOjpFcnJv
clN0cmluZyYgZXJyb3JTdHJpbmcsIEpTQzo6SlNWYWx1ZSBjYWxsRnJhbWVzLCBjb25zdCBTdHJp
bmcmIGNhbGxGcmFtZUlkLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIGNvbnN0IFN0cmluZyYg
b2JqZWN0R3JvdXAsIGJvb2wgaW5jbHVkZUNvbW1hbmRMaW5lQVBJLCBib29sIHJldHVybkJ5VmFs
dWUsIGJvb2wgZ2VuZXJhdGVQcmV2aWV3LCBib29sIHNhdmVSZXN1bHQsIFJlZlB0cjxQcm90b2Nv
bDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0LCBPcHRpb25hbDxib29sPiYgd2FzVGhy
b3duLCBPcHRpb25hbDxpbnQ+JiBzYXZlZFJlc3VsdEluZGV4KQogewogICAgIERlcHJlY2F0ZWQ6
OlNjcmlwdEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihpbmplY3RlZFNjcmlwdE9iamVjdCgpLCAiZXZh
bHVhdGVPbkNhbGxGcmFtZSJfcywgaW5zcGVjdG9yRW52aXJvbm1lbnQoKS0+ZnVuY3Rpb25DYWxs
SGFuZGxlcigpKTsKICAgICBmdW5jdGlvbi5hcHBlbmRBcmd1bWVudChjYWxsRnJhbWVzKTsKQEAg
LTExOSw1MiArMTE5LDU1IEBAIHZvaWQgSW5qZWN0ZWRTY3JpcHQ6OmV2YWx1YXRlT25DYWxsRnJh
bWUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBKU0M6OkpTVmFsdWUKICAgICBtYWtlRXZhbENh
bGwoZXJyb3JTdHJpbmcsIGZ1bmN0aW9uLCByZXN1bHQsIHdhc1Rocm93biwgc2F2ZWRSZXN1bHRJ
bmRleCk7CiB9CiAKLXZvaWQgSW5qZWN0ZWRTY3JpcHQ6OmdldEZ1bmN0aW9uRGV0YWlscyhFcnJv
clN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgZnVuY3Rpb25JZCwgUmVmUHRyPFBy
b3RvY29sOjpEZWJ1Z2dlcjo6RnVuY3Rpb25EZXRhaWxzPiYgcmVzdWx0KQordm9pZCBJbmplY3Rl
ZFNjcmlwdDo6Z2V0RnVuY3Rpb25EZXRhaWxzKFByb3RvY29sOjpFcnJvclN0cmluZyYgZXJyb3JT
dHJpbmcsIGNvbnN0IFN0cmluZyYgZnVuY3Rpb25JZCwgUmVmUHRyPFByb3RvY29sOjpEZWJ1Z2dl
cjo6RnVuY3Rpb25EZXRhaWxzPiYgcmVzdWx0KQogewogICAgIERlcHJlY2F0ZWQ6OlNjcmlwdEZ1
bmN0aW9uQ2FsbCBmdW5jdGlvbihpbmplY3RlZFNjcmlwdE9iamVjdCgpLCAiZ2V0RnVuY3Rpb25E
ZXRhaWxzIl9zLCBpbnNwZWN0b3JFbnZpcm9ubWVudCgpLT5mdW5jdGlvbkNhbGxIYW5kbGVyKCkp
OwogICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KGZ1bmN0aW9uSWQpOwogCiAgICAgUmVmUHRy
PEpTT046OlZhbHVlPiByZXN1bHRWYWx1ZSA9IG1ha2VDYWxsKGZ1bmN0aW9uKTsKICAgICBpZiAo
IXJlc3VsdFZhbHVlIHx8IHJlc3VsdFZhbHVlLT50eXBlKCkgIT0gSlNPTjo6VmFsdWU6OlR5cGU6
Ok9iamVjdCkgewotICAgICAgICBpZiAoIXJlc3VsdFZhbHVlLT5hc1N0cmluZyhlcnJvclN0cmlu
ZykpCisgICAgICAgIGVycm9yU3RyaW5nID0gcmVzdWx0VmFsdWUtPmFzU3RyaW5nKCk7CisgICAg
ICAgIGlmICghZXJyb3JTdHJpbmcpCiAgICAgICAgICAgICBlcnJvclN0cmluZyA9ICJJbnRlcm5h
bCBlcnJvciJfczsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHJlc3VsdCA9IEJpbmRp
bmdUcmFpdHM8UHJvdG9jb2w6OkRlYnVnZ2VyOjpGdW5jdGlvbkRldGFpbHM+OjpydW50aW1lQ2Fz
dChXVEZNb3ZlKHJlc3VsdFZhbHVlKSk7CisgICAgcmVzdWx0ID0gUHJvdG9jb2w6OkJpbmRpbmdU
cmFpdHM8UHJvdG9jb2w6OkRlYnVnZ2VyOjpGdW5jdGlvbkRldGFpbHM+OjpydW50aW1lQ2FzdChy
ZXN1bHRWYWx1ZS5yZWxlYXNlTm9uTnVsbCgpKTsKIH0KIAotdm9pZCBJbmplY3RlZFNjcmlwdDo6
ZnVuY3Rpb25EZXRhaWxzKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgSlNDOjpKU1ZhbHVlIHZh
bHVlLCBSZWZQdHI8UHJvdG9jb2w6OkRlYnVnZ2VyOjpGdW5jdGlvbkRldGFpbHM+JiByZXN1bHQp
Cit2b2lkIEluamVjdGVkU2NyaXB0OjpmdW5jdGlvbkRldGFpbHMoUHJvdG9jb2w6OkVycm9yU3Ry
aW5nJiBlcnJvclN0cmluZywgSlNDOjpKU1ZhbHVlIHZhbHVlLCBSZWZQdHI8UHJvdG9jb2w6OkRl
YnVnZ2VyOjpGdW5jdGlvbkRldGFpbHM+JiByZXN1bHQpCiB7CiAgICAgRGVwcmVjYXRlZDo6U2Ny
aXB0RnVuY3Rpb25DYWxsIGZ1bmN0aW9uKGluamVjdGVkU2NyaXB0T2JqZWN0KCksICJmdW5jdGlv
bkRldGFpbHMiX3MsIGluc3BlY3RvckVudmlyb25tZW50KCktPmZ1bmN0aW9uQ2FsbEhhbmRsZXIo
KSk7CiAgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQodmFsdWUpOwogCiAgICAgUmVmUHRyPEpT
T046OlZhbHVlPiByZXN1bHRWYWx1ZSA9IG1ha2VDYWxsKGZ1bmN0aW9uKTsKICAgICBpZiAoIXJl
c3VsdFZhbHVlIHx8IHJlc3VsdFZhbHVlLT50eXBlKCkgIT0gSlNPTjo6VmFsdWU6OlR5cGU6Ok9i
amVjdCkgewotICAgICAgICBpZiAoIXJlc3VsdFZhbHVlLT5hc1N0cmluZyhlcnJvclN0cmluZykp
CisgICAgICAgIGVycm9yU3RyaW5nID0gcmVzdWx0VmFsdWUtPmFzU3RyaW5nKCk7CisgICAgICAg
IGlmICghZXJyb3JTdHJpbmcpCiAgICAgICAgICAgICBlcnJvclN0cmluZyA9ICJJbnRlcm5hbCBl
cnJvciJfczsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHJlc3VsdCA9IEJpbmRpbmdU
cmFpdHM8UHJvdG9jb2w6OkRlYnVnZ2VyOjpGdW5jdGlvbkRldGFpbHM+OjpydW50aW1lQ2FzdChX
VEZNb3ZlKHJlc3VsdFZhbHVlKSk7CisgICAgcmVzdWx0ID0gUHJvdG9jb2w6OkJpbmRpbmdUcmFp
dHM8UHJvdG9jb2w6OkRlYnVnZ2VyOjpGdW5jdGlvbkRldGFpbHM+OjpydW50aW1lQ2FzdChyZXN1
bHRWYWx1ZS5yZWxlYXNlTm9uTnVsbCgpKTsKIH0KIAotdm9pZCBJbmplY3RlZFNjcmlwdDo6Z2V0
UHJldmlldyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgb2JqZWN0SWQs
IFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6T2JqZWN0UHJldmlldz4mIHJlc3VsdCkKK3ZvaWQg
SW5qZWN0ZWRTY3JpcHQ6OmdldFByZXZpZXcoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0
cmluZywgY29uc3QgU3RyaW5nJiBvYmplY3RJZCwgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpP
YmplY3RQcmV2aWV3PiYgcmVzdWx0KQogewogICAgIERlcHJlY2F0ZWQ6OlNjcmlwdEZ1bmN0aW9u
Q2FsbCBmdW5jdGlvbihpbmplY3RlZFNjcmlwdE9iamVjdCgpLCAiZ2V0UHJldmlldyJfcywgaW5z
cGVjdG9yRW52aXJvbm1lbnQoKS0+ZnVuY3Rpb25DYWxsSGFuZGxlcigpKTsKICAgICBmdW5jdGlv
bi5hcHBlbmRBcmd1bWVudChvYmplY3RJZCk7CiAKICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHJl
c3VsdFZhbHVlID0gbWFrZUNhbGwoZnVuY3Rpb24pOwogICAgIGlmICghcmVzdWx0VmFsdWUgfHwg
cmVzdWx0VmFsdWUtPnR5cGUoKSAhPSBKU09OOjpWYWx1ZTo6VHlwZTo6T2JqZWN0KSB7Ci0gICAg
ICAgIGlmICghcmVzdWx0VmFsdWUtPmFzU3RyaW5nKGVycm9yU3RyaW5nKSkKKyAgICAgICAgZXJy
b3JTdHJpbmcgPSByZXN1bHRWYWx1ZS0+YXNTdHJpbmcoKTsKKyAgICAgICAgaWYgKCFlcnJvclN0
cmluZykKICAgICAgICAgICAgIGVycm9yU3RyaW5nID0gIkludGVybmFsIGVycm9yIl9zOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgcmVzdWx0ID0gQmluZGluZ1RyYWl0czxQcm90b2Nv
bDo6UnVudGltZTo6T2JqZWN0UHJldmlldz46OnJ1bnRpbWVDYXN0KFdURk1vdmUocmVzdWx0VmFs
dWUpKTsKKyAgICByZXN1bHQgPSBQcm90b2NvbDo6QmluZGluZ1RyYWl0czxQcm90b2NvbDo6UnVu
dGltZTo6T2JqZWN0UHJldmlldz46OnJ1bnRpbWVDYXN0KHJlc3VsdFZhbHVlLnJlbGVhc2VOb25O
dWxsKCkpOwogfQogCi12b2lkIEluamVjdGVkU2NyaXB0OjpnZXRQcm9wZXJ0aWVzKEVycm9yU3Ry
aW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBvYmplY3RJZCwgYm9vbCBvd25Qcm9wZXJ0
aWVzLCBpbnQgZmV0Y2hTdGFydCwgaW50IGZldGNoQ291bnQsIGJvb2wgZ2VuZXJhdGVQcmV2aWV3
LCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UnVudGltZTo6UHJvcGVydHlEZXNjcmlw
dG9yPj4mIHByb3BlcnRpZXMpCit2b2lkIEluamVjdGVkU2NyaXB0OjpnZXRQcm9wZXJ0aWVzKFBy
b3RvY29sOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgb2JqZWN0SWQs
IGJvb2wgb3duUHJvcGVydGllcywgaW50IGZldGNoU3RhcnQsIGludCBmZXRjaENvdW50LCBib29s
IGdlbmVyYXRlUHJldmlldywgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6
OlByb3BlcnR5RGVzY3JpcHRvcj4+JiBwcm9wZXJ0aWVzKQogewogICAgIEFTU0VSVChmZXRjaFN0
YXJ0ID49IDApOwogICAgIEFTU0VSVChmZXRjaENvdW50ID49IDApOwpAQCAtMTgyLDEwICsxODUs
MTAgQEAgdm9pZCBJbmplY3RlZFNjcmlwdDo6Z2V0UHJvcGVydGllcyhFcnJvclN0cmluZyYgZXJy
b3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgb2JqZWMKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAot
ICAgIHByb3BlcnRpZXMgPSBCaW5kaW5nVHJhaXRzPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1
bnRpbWU6OlByb3BlcnR5RGVzY3JpcHRvcj4+OjpydW50aW1lQ2FzdChXVEZNb3ZlKHJlc3VsdCkp
OworICAgIHByb3BlcnRpZXMgPSBQcm90b2NvbDo6QmluZGluZ1RyYWl0czxKU09OOjpBcnJheU9m
PFByb3RvY29sOjpSdW50aW1lOjpQcm9wZXJ0eURlc2NyaXB0b3I+Pjo6cnVudGltZUNhc3QocmVz
dWx0LnJlbGVhc2VOb25OdWxsKCkpOwogfQogCi12b2lkIEluamVjdGVkU2NyaXB0OjpnZXREaXNw
bGF5YWJsZVByb3BlcnRpZXMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcm
IG9iamVjdElkLCBpbnQgZmV0Y2hTdGFydCwgaW50IGZldGNoQ291bnQsIGJvb2wgZ2VuZXJhdGVQ
cmV2aWV3LCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UnVudGltZTo6UHJvcGVydHlE
ZXNjcmlwdG9yPj4mIHByb3BlcnRpZXMpCit2b2lkIEluamVjdGVkU2NyaXB0OjpnZXREaXNwbGF5
YWJsZVByb3BlcnRpZXMoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3Qg
U3RyaW5nJiBvYmplY3RJZCwgaW50IGZldGNoU3RhcnQsIGludCBmZXRjaENvdW50LCBib29sIGdl
bmVyYXRlUHJldmlldywgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OlBy
b3BlcnR5RGVzY3JpcHRvcj4+JiBwcm9wZXJ0aWVzKQogewogICAgIEFTU0VSVChmZXRjaFN0YXJ0
ID49IDApOwogICAgIEFTU0VSVChmZXRjaENvdW50ID49IDApOwpAQCAtMjAyLDEwICsyMDUsMTAg
QEAgdm9pZCBJbmplY3RlZFNjcmlwdDo6Z2V0RGlzcGxheWFibGVQcm9wZXJ0aWVzKEVycm9yU3Ry
aW5nJiBlcnJvclN0cmluZywgY29uc3QgU3QKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IHByb3BlcnRpZXMgPSBCaW5kaW5nVHJhaXRzPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRp
bWU6OlByb3BlcnR5RGVzY3JpcHRvcj4+OjpydW50aW1lQ2FzdChXVEZNb3ZlKHJlc3VsdCkpOwor
ICAgIHByb3BlcnRpZXMgPSBQcm90b2NvbDo6QmluZGluZ1RyYWl0czxKU09OOjpBcnJheU9mPFBy
b3RvY29sOjpSdW50aW1lOjpQcm9wZXJ0eURlc2NyaXB0b3I+Pjo6cnVudGltZUNhc3QocmVzdWx0
LnJlbGVhc2VOb25OdWxsKCkpOwogfQogCi12b2lkIEluamVjdGVkU2NyaXB0OjpnZXRJbnRlcm5h
bFByb3BlcnRpZXMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIG9iamVj
dElkLCBib29sIGdlbmVyYXRlUHJldmlldywgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6
OlJ1bnRpbWU6OkludGVybmFsUHJvcGVydHlEZXNjcmlwdG9yPj4mIHByb3BlcnRpZXMpCit2b2lk
IEluamVjdGVkU2NyaXB0OjpnZXRJbnRlcm5hbFByb3BlcnRpZXMoUHJvdG9jb2w6OkVycm9yU3Ry
aW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBvYmplY3RJZCwgYm9vbCBnZW5lcmF0ZVBy
ZXZpZXcsIFJlZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpJbnRlcm5hbFBy
b3BlcnR5RGVzY3JpcHRvcj4+JiBwcm9wZXJ0aWVzKQogewogICAgIERlcHJlY2F0ZWQ6OlNjcmlw
dEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbihpbmplY3RlZFNjcmlwdE9iamVjdCgpLCAiZ2V0SW50ZXJu
YWxQcm9wZXJ0aWVzIl9zLCBpbnNwZWN0b3JFbnZpcm9ubWVudCgpLT5mdW5jdGlvbkNhbGxIYW5k
bGVyKCkpOwogICAgIGZ1bmN0aW9uLmFwcGVuZEFyZ3VtZW50KG9iamVjdElkKTsKQEAgLTIxNywx
MSArMjIwLDEyIEBAIHZvaWQgSW5qZWN0ZWRTY3JpcHQ6OmdldEludGVybmFsUHJvcGVydGllcyhF
cnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluCiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBhdXRvIGFycmF5ID0gQmluZGluZ1RyYWl0czxKU09OOjpBcnJheU9mPFByb3Rv
Y29sOjpSdW50aW1lOjpJbnRlcm5hbFByb3BlcnR5RGVzY3JpcHRvcj4+OjpydW50aW1lQ2FzdChX
VEZNb3ZlKHJlc3VsdCkpOwotICAgIHByb3BlcnRpZXMgPSBhcnJheS0+bGVuZ3RoKCkgPiAwID8g
YXJyYXkgOiBudWxscHRyOworICAgIGF1dG8gYXJyYXkgPSBQcm90b2NvbDo6QmluZGluZ1RyYWl0
czxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpJbnRlcm5hbFByb3BlcnR5RGVzY3Jp
cHRvcj4+OjpydW50aW1lQ2FzdChyZXN1bHQucmVsZWFzZU5vbk51bGwoKSk7CisgICAgaWYgKGFy
cmF5LT5sZW5ndGgoKSkKKyAgICAgICAgcHJvcGVydGllcyA9IFdURk1vdmUoYXJyYXkpOwogfQog
Ci12b2lkIEluamVjdGVkU2NyaXB0OjpnZXRDb2xsZWN0aW9uRW50cmllcyhFcnJvclN0cmluZyYg
ZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgb2JqZWN0SWQsIGNvbnN0IFN0cmluZyYgb2JqZWN0
R3JvdXAsIGludCBmZXRjaFN0YXJ0LCBpbnQgZmV0Y2hDb3VudCwgUmVmUHRyPEpTT046OkFycmF5
T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OkNvbGxlY3Rpb25FbnRyeT4+JiBlbnRyaWVzKQordm9pZCBJ
bmplY3RlZFNjcmlwdDo6Z2V0Q29sbGVjdGlvbkVudHJpZXMoUHJvdG9jb2w6OkVycm9yU3RyaW5n
JiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBvYmplY3RJZCwgY29uc3QgU3RyaW5nJiBvYmpl
Y3RHcm91cCwgaW50IGZldGNoU3RhcnQsIGludCBmZXRjaENvdW50LCBSZWZQdHI8SlNPTjo6QXJy
YXlPZjxQcm90b2NvbDo6UnVudGltZTo6Q29sbGVjdGlvbkVudHJ5Pj4mIGVudHJpZXMpCiB7CiAg
ICAgQVNTRVJUKGZldGNoU3RhcnQgPj0gMCk7CiAgICAgQVNTRVJUKGZldGNoQ291bnQgPj0gMCk7
CkBAIC0yMzgsMTAgKzI0MiwxMCBAQCB2b2lkIEluamVjdGVkU2NyaXB0OjpnZXRDb2xsZWN0aW9u
RW50cmllcyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgZW50cmllcyA9IEJpbmRpbmdUcmFpdHM8SlNPTjo6QXJyYXlP
ZjxQcm90b2NvbDo6UnVudGltZTo6Q29sbGVjdGlvbkVudHJ5Pj46OnJ1bnRpbWVDYXN0KFdURk1v
dmUocmVzdWx0KSk7CisgICAgZW50cmllcyA9IFByb3RvY29sOjpCaW5kaW5nVHJhaXRzPEpTT046
OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OkNvbGxlY3Rpb25FbnRyeT4+OjpydW50aW1lQ2Fz
dChyZXN1bHQucmVsZWFzZU5vbk51bGwoKSk7CiB9CiAKLXZvaWQgSW5qZWN0ZWRTY3JpcHQ6OnNh
dmVSZXN1bHQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGNhbGxBcmd1
bWVudEpTT04sIE9wdGlvbmFsPGludD4mIHNhdmVkUmVzdWx0SW5kZXgpCit2b2lkIEluamVjdGVk
U2NyaXB0OjpzYXZlUmVzdWx0KFByb3RvY29sOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNv
bnN0IFN0cmluZyYgY2FsbEFyZ3VtZW50SlNPTiwgT3B0aW9uYWw8aW50PiYgc2F2ZWRSZXN1bHRJ
bmRleCkKIHsKICAgICBEZXByZWNhdGVkOjpTY3JpcHRGdW5jdGlvbkNhbGwgZnVuY3Rpb24oaW5q
ZWN0ZWRTY3JpcHRPYmplY3QoKSwgInNhdmVSZXN1bHQiX3MsIGluc3BlY3RvckVudmlyb25tZW50
KCktPmZ1bmN0aW9uQ2FsbEhhbmRsZXIoKSk7CiAgICAgZnVuY3Rpb24uYXBwZW5kQXJndW1lbnQo
Y2FsbEFyZ3VtZW50SlNPTik7CkBAIC0yNTIsOSArMjU2LDcgQEAgdm9pZCBJbmplY3RlZFNjcmlw
dDo6c2F2ZVJlc3VsdChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgY2Fs
bEFyZ3UKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGludCByZXN1bHRJbmRleCA9IDA7
Ci0gICAgaWYgKHJlc3VsdC0+YXNJbnRlZ2VyKHJlc3VsdEluZGV4KSAmJiByZXN1bHRJbmRleCA+
IDApCi0gICAgICAgIHNhdmVkUmVzdWx0SW5kZXggPSByZXN1bHRJbmRleDsKKyAgICBzYXZlZFJl
c3VsdEluZGV4ID0gcmVzdWx0LT5hc0ludGVnZXIoKTsKIH0KIAogUmVmPEpTT046OkFycmF5T2Y8
UHJvdG9jb2w6OkRlYnVnZ2VyOjpDYWxsRnJhbWU+PiBJbmplY3RlZFNjcmlwdDo6d3JhcENhbGxG
cmFtZXMoSlNDOjpKU1ZhbHVlIGNhbGxGcmFtZXMpIGNvbnN0CkBAIC0yNjksOCArMjcxLDggQEAg
UmVmPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkRlYnVnZ2VyOjpDYWxsRnJhbWU+PiBJbmplY3Rl
ZFNjcmlwdDo6d3JhcENhbGxGcmFtZXMKICAgICAgICAgcmV0dXJuIEpTT046OkFycmF5T2Y8UHJv
dG9jb2w6OkRlYnVnZ2VyOjpDYWxsRnJhbWU+OjpjcmVhdGUoKTsKIAogICAgIFJlZlB0cjxKU09O
OjpWYWx1ZT4gcmVzdWx0ID0gdG9JbnNwZWN0b3JWYWx1ZShnbG9iYWxPYmplY3QoKSwgY2FsbFJl
c3VsdC52YWx1ZSgpKTsKLSAgICBpZiAocmVzdWx0LT50eXBlKCkgPT0gSlNPTjo6VmFsdWU6OlR5
cGU6OkFycmF5KQotICAgICAgICByZXR1cm4gQmluZGluZ1RyYWl0czxKU09OOjpBcnJheU9mPFBy
b3RvY29sOjpEZWJ1Z2dlcjo6Q2FsbEZyYW1lPj46OnJ1bnRpbWVDYXN0KFdURk1vdmUocmVzdWx0
KSkucmVsZWFzZU5vbk51bGwoKTsKKyAgICBpZiAocmVzdWx0ICYmIHJlc3VsdC0+dHlwZSgpID09
IEpTT046OlZhbHVlOjpUeXBlOjpBcnJheSkKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpCaW5k
aW5nVHJhaXRzPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkRlYnVnZ2VyOjpDYWxsRnJhbWU+Pjo6
cnVudGltZUNhc3QocmVzdWx0LnJlbGVhc2VOb25OdWxsKCkpOwogCiAgICAgcmV0dXJuIEpTT046
OkFycmF5T2Y8UHJvdG9jb2w6OkRlYnVnZ2VyOjpDYWxsRnJhbWU+OjpjcmVhdGUoKTsKIH0KQEAg
LTI4OCwxMSArMjkwLDE1IEBAIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0
PiBJbmplY3RlZFNjcmlwdDo6d3JhcE9iamVjdChKU0M6OkpTVmFsdWUKICAgICBpZiAoIWNhbGxS
ZXN1bHQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgUmVmUHRyPEpTT046Ok9iamVj
dD4gcmVzdWx0T2JqZWN0OwotICAgIGJvb2wgY2FzdFN1Y2NlZWRlZCA9IHRvSW5zcGVjdG9yVmFs
dWUoZ2xvYmFsT2JqZWN0KCksIGNhbGxSZXN1bHQudmFsdWUoKSktPmFzT2JqZWN0KHJlc3VsdE9i
amVjdCk7Ci0gICAgQVNTRVJUX1VOVVNFRChjYXN0U3VjY2VlZGVkLCBjYXN0U3VjY2VlZGVkKTsK
KyAgICBhdXRvIHJlc3VsdFZhbHVlID0gdG9JbnNwZWN0b3JWYWx1ZShnbG9iYWxPYmplY3QoKSwg
Y2FsbFJlc3VsdC52YWx1ZSgpKTsKKyAgICBpZiAoIXJlc3VsdFZhbHVlKQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiBCaW5kaW5nVHJhaXRzPFByb3RvY29sOjpSdW50aW1l
OjpSZW1vdGVPYmplY3Q+OjpydW50aW1lQ2FzdChyZXN1bHRPYmplY3QpOworICAgIGF1dG8gcmVz
dWx0T2JqZWN0ID0gcmVzdWx0VmFsdWUtPmFzT2JqZWN0KCk7CisgICAgaWYgKCFyZXN1bHRPYmpl
Y3QpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuIFByb3RvY29sOjpCaW5k
aW5nVHJhaXRzPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+OjpydW50aW1lQ2FzdChy
ZXN1bHRPYmplY3QucmVsZWFzZU5vbk51bGwoKSk7CiB9CiAKIFJlZlB0cjxQcm90b2NvbDo6UnVu
dGltZTo6UmVtb3RlT2JqZWN0PiBJbmplY3RlZFNjcmlwdDo6d3JhcEpTT05TdHJpbmcoY29uc3Qg
U3RyaW5nJiBqc29uLCBjb25zdCBTdHJpbmcmIGdyb3VwTmFtZSwgYm9vbCBnZW5lcmF0ZVByZXZp
ZXcpIGNvbnN0CkBAIC0zMTAsMTEgKzMxNiwxNSBAQCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6
OlJlbW90ZU9iamVjdD4gSW5qZWN0ZWRTY3JpcHQ6OndyYXBKU09OU3RyaW5nKGNvbnN0IFN0cgog
ICAgIGlmIChjYWxsUmVzdWx0LnZhbHVlKCkuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogCi0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcmVzdWx0T2JqZWN0OwotICAgIGJvb2wg
Y2FzdFN1Y2NlZWRlZCA9IHRvSW5zcGVjdG9yVmFsdWUoZ2xvYmFsT2JqZWN0KCksIGNhbGxSZXN1
bHQudmFsdWUoKSktPmFzT2JqZWN0KHJlc3VsdE9iamVjdCk7Ci0gICAgQVNTRVJUX1VOVVNFRChj
YXN0U3VjY2VlZGVkLCBjYXN0U3VjY2VlZGVkKTsKKyAgICBhdXRvIHJlc3VsdFZhbHVlID0gdG9J
bnNwZWN0b3JWYWx1ZShnbG9iYWxPYmplY3QoKSwgY2FsbFJlc3VsdC52YWx1ZSgpKTsKKyAgICBp
ZiAoIXJlc3VsdFZhbHVlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiBC
aW5kaW5nVHJhaXRzPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+OjpydW50aW1lQ2Fz
dChyZXN1bHRPYmplY3QpOworICAgIGF1dG8gcmVzdWx0T2JqZWN0ID0gcmVzdWx0VmFsdWUtPmFz
T2JqZWN0KCk7CisgICAgaWYgKCFyZXN1bHRPYmplY3QpCisgICAgICAgIHJldHVybiBudWxscHRy
OworCisgICAgcmV0dXJuIFByb3RvY29sOjpCaW5kaW5nVHJhaXRzPFByb3RvY29sOjpSdW50aW1l
OjpSZW1vdGVPYmplY3Q+OjpydW50aW1lQ2FzdChyZXN1bHRPYmplY3QucmVsZWFzZU5vbk51bGwo
KSk7CiB9CiAKIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiBJbmplY3Rl
ZFNjcmlwdDo6d3JhcFRhYmxlKEpTQzo6SlNWYWx1ZSB0YWJsZSwgSlNDOjpKU1ZhbHVlIGNvbHVt
bnMpIGNvbnN0CkBAIC0zMzIsMTEgKzM0MiwxNSBAQCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6
OlJlbW90ZU9iamVjdD4gSW5qZWN0ZWRTY3JpcHQ6OndyYXBUYWJsZShKU0M6OkpTVmFsdWUgdAog
ICAgIGlmICghY2FsbFJlc3VsdCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBSZWZQ
dHI8SlNPTjo6T2JqZWN0PiByZXN1bHRPYmplY3Q7Ci0gICAgYm9vbCBjYXN0U3VjY2VlZGVkID0g
dG9JbnNwZWN0b3JWYWx1ZShnbG9iYWxPYmplY3QoKSwgY2FsbFJlc3VsdC52YWx1ZSgpKS0+YXNP
YmplY3QocmVzdWx0T2JqZWN0KTsKLSAgICBBU1NFUlRfVU5VU0VEKGNhc3RTdWNjZWVkZWQsIGNh
c3RTdWNjZWVkZWQpOworICAgIGF1dG8gcmVzdWx0VmFsdWUgPSB0b0luc3BlY3RvclZhbHVlKGds
b2JhbE9iamVjdCgpLCBjYWxsUmVzdWx0LnZhbHVlKCkpOworICAgIGlmICghcmVzdWx0VmFsdWUp
CisgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJuIEJpbmRpbmdUcmFpdHM8UHJv
dG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD46OnJ1bnRpbWVDYXN0KHJlc3VsdE9iamVjdCk7
CisgICAgYXV0byByZXN1bHRPYmplY3QgPSByZXN1bHRWYWx1ZS0+YXNPYmplY3QoKTsKKyAgICBp
ZiAoIXJlc3VsdE9iamVjdCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4g
UHJvdG9jb2w6OkJpbmRpbmdUcmFpdHM8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD46
OnJ1bnRpbWVDYXN0KHJlc3VsdE9iamVjdC5yZWxlYXNlTm9uTnVsbCgpKTsKIH0KIAogUmVmUHRy
PFByb3RvY29sOjpSdW50aW1lOjpPYmplY3RQcmV2aWV3PiBJbmplY3RlZFNjcmlwdDo6cHJldmll
d1ZhbHVlKEpTQzo6SlNWYWx1ZSB2YWx1ZSkgY29uc3QKQEAgLTM0OSwxMSArMzYzLDE1IEBAIFJl
ZlB0cjxQcm90b2NvbDo6UnVudGltZTo6T2JqZWN0UHJldmlldz4gSW5qZWN0ZWRTY3JpcHQ6OnBy
ZXZpZXdWYWx1ZShKU0M6OkpTVmFsCiAgICAgaWYgKCFjYWxsUmVzdWx0KQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKIAotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHJlc3VsdE9iamVjdDsKLSAg
ICBib29sIGNhc3RTdWNjZWVkZWQgPSB0b0luc3BlY3RvclZhbHVlKGdsb2JhbE9iamVjdCgpLCBj
YWxsUmVzdWx0LnZhbHVlKCkpLT5hc09iamVjdChyZXN1bHRPYmplY3QpOwotICAgIEFTU0VSVF9V
TlVTRUQoY2FzdFN1Y2NlZWRlZCwgY2FzdFN1Y2NlZWRlZCk7CisgICAgYXV0byByZXN1bHRWYWx1
ZSA9IHRvSW5zcGVjdG9yVmFsdWUoZ2xvYmFsT2JqZWN0KCksIGNhbGxSZXN1bHQudmFsdWUoKSk7
CisgICAgaWYgKCFyZXN1bHRWYWx1ZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBy
ZXR1cm4gQmluZGluZ1RyYWl0czxQcm90b2NvbDo6UnVudGltZTo6T2JqZWN0UHJldmlldz46OnJ1
bnRpbWVDYXN0KHJlc3VsdE9iamVjdCk7CisgICAgYXV0byByZXN1bHRPYmplY3QgPSByZXN1bHRW
YWx1ZS0+YXNPYmplY3QoKTsKKyAgICBpZiAoIXJlc3VsdE9iamVjdCkKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisKKyAgICByZXR1cm4gUHJvdG9jb2w6OkJpbmRpbmdUcmFpdHM8UHJvdG9jb2w6
OlJ1bnRpbWU6Ok9iamVjdFByZXZpZXc+OjpydW50aW1lQ2FzdChyZXN1bHRPYmplY3QucmVsZWFz
ZU5vbk51bGwoKSk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRTY3JpcHQ6OnNldEV2ZW50VmFsdWUoSlND
OjpKU1ZhbHVlIHZhbHVlKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9JbmplY3RlZFNjcmlwdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9J
bmplY3RlZFNjcmlwdC5oCmluZGV4IGNkZWU0NWYyZDZiMzM3N2YxZTA1MjNjZmU0MDFhZTI4YmNm
MmRmNmYuLmQ2M2FlZjAyNTk5NjQ4ODQ2YzY4MzYxNWNiNTZjNjQzYzM4OWIxYTUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHQuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0LmgKQEAgLTU5
LDIwICs1OSwyMCBAQCBwdWJsaWM6CiAgICAgICAgIGJvb2wgc2F2ZVJlc3VsdCB7IGZhbHNlIH07
CiAgICAgICAgIFZlY3RvcjxKU0M6OkpTVmFsdWU+IGFyZ3M7CiAgICAgfTsKLSAgICB2b2lkIGV4
ZWN1dGUoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGZ1bmN0aW9uU3RyaW5nLCBFeGVjdXRl
T3B0aW9ucyYmLCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3Vs
dCwgT3B0aW9uYWw8Ym9vbD4mIHdhc1Rocm93biwgT3B0aW9uYWw8aW50PiYgc2F2ZWRSZXN1bHRJ
bmRleCk7CisgICAgdm9pZCBleGVjdXRlKFByb3RvY29sOjpFcnJvclN0cmluZyYsIGNvbnN0IFN0
cmluZyYgZnVuY3Rpb25TdHJpbmcsIEV4ZWN1dGVPcHRpb25zJiYsIFJlZlB0cjxQcm90b2NvbDo6
UnVudGltZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0LCBPcHRpb25hbDxib29sPiYgd2FzVGhyb3du
LCBPcHRpb25hbDxpbnQ+JiBzYXZlZFJlc3VsdEluZGV4KTsKIAotICAgIHZvaWQgZXZhbHVhdGUo
RXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIGNvbnN0IFN0cmluZyYgb2Jq
ZWN0R3JvdXAsIGJvb2wgaW5jbHVkZUNvbW1hbmRMaW5lQVBJLCBib29sIHJldHVybkJ5VmFsdWUs
IGJvb2wgZ2VuZXJhdGVQcmV2aWV3LCBib29sIHNhdmVSZXN1bHQsIFJlZlB0cjxQcm90b2NvbDo6
UnVudGltZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0LCBPcHRpb25hbDxib29sPiYgd2FzVGhyb3du
LCBPcHRpb25hbDxpbnQ+JiBzYXZlZFJlc3VsdEluZGV4KTsKKyAgICB2b2lkIGV2YWx1YXRlKFBy
b3RvY29sOjpFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgY29uc3QgU3Ry
aW5nJiBvYmplY3RHcm91cCwgYm9vbCBpbmNsdWRlQ29tbWFuZExpbmVBUEksIGJvb2wgcmV0dXJu
QnlWYWx1ZSwgYm9vbCBnZW5lcmF0ZVByZXZpZXcsIGJvb2wgc2F2ZVJlc3VsdCwgUmVmUHRyPFBy
b3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiByZXN1bHQsIE9wdGlvbmFsPGJvb2w+JiB3
YXNUaHJvd24sIE9wdGlvbmFsPGludD4mIHNhdmVkUmVzdWx0SW5kZXgpOwogICAgIHZvaWQgYXdh
aXRQcm9taXNlKGNvbnN0IFN0cmluZyYgcHJvbWlzZU9iamVjdElkLCBib29sIHJldHVybkJ5VmFs
dWUsIGJvb2wgZ2VuZXJhdGVQcmV2aWV3LCBib29sIHNhdmVSZXN1bHQsIEFzeW5jQ2FsbENhbGxi
YWNrJiYpOwotICAgIHZvaWQgZXZhbHVhdGVPbkNhbGxGcmFtZShFcnJvclN0cmluZyYsIEpTQzo6
SlNWYWx1ZSBjYWxsRnJhbWVzLCBjb25zdCBTdHJpbmcmIGNhbGxGcmFtZUlkLCBjb25zdCBTdHJp
bmcmIGV4cHJlc3Npb24sIGNvbnN0IFN0cmluZyYgb2JqZWN0R3JvdXAsIGJvb2wgaW5jbHVkZUNv
bW1hbmRMaW5lQVBJLCBib29sIHJldHVybkJ5VmFsdWUsIGJvb2wgZ2VuZXJhdGVQcmV2aWV3LCBi
b29sIHNhdmVSZXN1bHQsIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYg
cmVzdWx0LCBPcHRpb25hbDxib29sPiYgd2FzVGhyb3duLCBPcHRpb25hbDxpbnQ+JiBzYXZlZFJl
c3VsdEluZGV4KTsKLSAgICB2b2lkIGNhbGxGdW5jdGlvbk9uKEVycm9yU3RyaW5nJiwgY29uc3Qg
U3RyaW5nJiBvYmplY3RJZCwgY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBjb25zdCBTdHJpbmcm
IGFyZ3VtZW50cywgYm9vbCByZXR1cm5CeVZhbHVlLCBib29sIGdlbmVyYXRlUHJldmlldywgUmVm
UHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiByZXN1bHQsIE9wdGlvbmFsPGJv
b2w+JiB3YXNUaHJvd24pOwotICAgIHZvaWQgZ2V0RnVuY3Rpb25EZXRhaWxzKEVycm9yU3RyaW5n
JiwgY29uc3QgU3RyaW5nJiBmdW5jdGlvbklkLCBSZWZQdHI8UHJvdG9jb2w6OkRlYnVnZ2VyOjpG
dW5jdGlvbkRldGFpbHM+JiByZXN1bHQpOwotICAgIHZvaWQgZnVuY3Rpb25EZXRhaWxzKEVycm9y
U3RyaW5nJiwgSlNDOjpKU1ZhbHVlLCBSZWZQdHI8UHJvdG9jb2w6OkRlYnVnZ2VyOjpGdW5jdGlv
bkRldGFpbHM+JiByZXN1bHQpOwotICAgIHZvaWQgZ2V0UHJldmlldyhFcnJvclN0cmluZyYsIGNv
bnN0IFN0cmluZyYgb2JqZWN0SWQsIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6T2JqZWN0UHJl
dmlldz4mIHJlc3VsdCk7Ci0gICAgdm9pZCBnZXRQcm9wZXJ0aWVzKEVycm9yU3RyaW5nJiwgY29u
c3QgU3RyaW5nJiBvYmplY3RJZCwgYm9vbCBvd25Qcm9wZXJ0aWVzLCBpbnQgZmV0Y2hTdGFydCwg
aW50IGZldGNoQ291bnQsIGJvb2wgZ2VuZXJhdGVQcmV2aWV3LCBSZWZQdHI8SlNPTjo6QXJyYXlP
ZjxQcm90b2NvbDo6UnVudGltZTo6UHJvcGVydHlEZXNjcmlwdG9yPj4mIHJlc3VsdCk7Ci0gICAg
dm9pZCBnZXREaXNwbGF5YWJsZVByb3BlcnRpZXMoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcm
IG9iamVjdElkLCBpbnQgZmV0Y2hTdGFydCwgaW50IGZldGNoQ291bnQsIGJvb2wgZ2VuZXJhdGVQ
cmV2aWV3LCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UnVudGltZTo6UHJvcGVydHlE
ZXNjcmlwdG9yPj4mIHJlc3VsdCk7Ci0gICAgdm9pZCBnZXRJbnRlcm5hbFByb3BlcnRpZXMoRXJy
b3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBib29sIGdlbmVyYXRlUHJldmlldywg
UmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OkludGVybmFsUHJvcGVydHlE
ZXNjcmlwdG9yPj4mIHJlc3VsdCk7Ci0gICAgdm9pZCBnZXRDb2xsZWN0aW9uRW50cmllcyhFcnJv
clN0cmluZyYsIGNvbnN0IFN0cmluZyYgb2JqZWN0SWQsIGNvbnN0IFN0cmluZyYgb2JqZWN0R3Jv
dXAsIGludCBmZXRjaFN0YXJ0LCBpbnQgZmV0Y2hDb3VudCwgUmVmUHRyPEpTT046OkFycmF5T2Y8
UHJvdG9jb2w6OlJ1bnRpbWU6OkNvbGxlY3Rpb25FbnRyeT4+JiBlbnRyaWVzKTsKLSAgICB2b2lk
IHNhdmVSZXN1bHQoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGNhbGxBcmd1bWVudEpTT04s
IE9wdGlvbmFsPGludD4mIHNhdmVkUmVzdWx0SW5kZXgpOworICAgIHZvaWQgZXZhbHVhdGVPbkNh
bGxGcmFtZShQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBKU0M6OkpTVmFsdWUgY2FsbEZyYW1lcywg
Y29uc3QgU3RyaW5nJiBjYWxsRnJhbWVJZCwgY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBjb25z
dCBTdHJpbmcmIG9iamVjdEdyb3VwLCBib29sIGluY2x1ZGVDb21tYW5kTGluZUFQSSwgYm9vbCBy
ZXR1cm5CeVZhbHVlLCBib29sIGdlbmVyYXRlUHJldmlldywgYm9vbCBzYXZlUmVzdWx0LCBSZWZQ
dHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3VsdCwgT3B0aW9uYWw8Ym9v
bD4mIHdhc1Rocm93biwgT3B0aW9uYWw8aW50PiYgc2F2ZWRSZXN1bHRJbmRleCk7CisgICAgdm9p
ZCBjYWxsRnVuY3Rpb25PbihQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIG9i
amVjdElkLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24sIGNvbnN0IFN0cmluZyYgYXJndW1lbnRz
LCBib29sIHJldHVybkJ5VmFsdWUsIGJvb2wgZ2VuZXJhdGVQcmV2aWV3LCBSZWZQdHI8UHJvdG9j
b2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3VsdCwgT3B0aW9uYWw8Ym9vbD4mIHdhc1Ro
cm93bik7CisgICAgdm9pZCBnZXRGdW5jdGlvbkRldGFpbHMoUHJvdG9jb2w6OkVycm9yU3RyaW5n
JiwgY29uc3QgU3RyaW5nJiBmdW5jdGlvbklkLCBSZWZQdHI8UHJvdG9jb2w6OkRlYnVnZ2VyOjpG
dW5jdGlvbkRldGFpbHM+JiByZXN1bHQpOworICAgIHZvaWQgZnVuY3Rpb25EZXRhaWxzKFByb3Rv
Y29sOjpFcnJvclN0cmluZyYsIEpTQzo6SlNWYWx1ZSwgUmVmUHRyPFByb3RvY29sOjpEZWJ1Z2dl
cjo6RnVuY3Rpb25EZXRhaWxzPiYgcmVzdWx0KTsKKyAgICB2b2lkIGdldFByZXZpZXcoUHJvdG9j
b2w6OkVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBvYmplY3RJZCwgUmVmUHRyPFByb3RvY29s
OjpSdW50aW1lOjpPYmplY3RQcmV2aWV3PiYgcmVzdWx0KTsKKyAgICB2b2lkIGdldFByb3BlcnRp
ZXMoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBvYmplY3RJZCwgYm9vbCBv
d25Qcm9wZXJ0aWVzLCBpbnQgZmV0Y2hTdGFydCwgaW50IGZldGNoQ291bnQsIGJvb2wgZ2VuZXJh
dGVQcmV2aWV3LCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UnVudGltZTo6UHJvcGVy
dHlEZXNjcmlwdG9yPj4mIHJlc3VsdCk7CisgICAgdm9pZCBnZXREaXNwbGF5YWJsZVByb3BlcnRp
ZXMoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBvYmplY3RJZCwgaW50IGZl
dGNoU3RhcnQsIGludCBmZXRjaENvdW50LCBib29sIGdlbmVyYXRlUHJldmlldywgUmVmUHRyPEpT
T046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OlByb3BlcnR5RGVzY3JpcHRvcj4+JiByZXN1
bHQpOworICAgIHZvaWQgZ2V0SW50ZXJuYWxQcm9wZXJ0aWVzKFByb3RvY29sOjpFcnJvclN0cmlu
ZyYsIGNvbnN0IFN0cmluZyYgb2JqZWN0SWQsIGJvb2wgZ2VuZXJhdGVQcmV2aWV3LCBSZWZQdHI8
SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UnVudGltZTo6SW50ZXJuYWxQcm9wZXJ0eURlc2NyaXB0
b3I+PiYgcmVzdWx0KTsKKyAgICB2b2lkIGdldENvbGxlY3Rpb25FbnRyaWVzKFByb3RvY29sOjpF
cnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgb2JqZWN0SWQsIGNvbnN0IFN0cmluZyYgb2JqZWN0
R3JvdXAsIGludCBmZXRjaFN0YXJ0LCBpbnQgZmV0Y2hDb3VudCwgUmVmUHRyPEpTT046OkFycmF5
T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OkNvbGxlY3Rpb25FbnRyeT4+JiBlbnRyaWVzKTsKKyAgICB2
b2lkIHNhdmVSZXN1bHQoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBjYWxs
QXJndW1lbnRKU09OLCBPcHRpb25hbDxpbnQ+JiBzYXZlZFJlc3VsdEluZGV4KTsKIAogICAgIFJl
ZjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpEZWJ1Z2dlcjo6Q2FsbEZyYW1lPj4gd3JhcENhbGxG
cmFtZXMoSlNDOjpKU1ZhbHVlKSBjb25zdDsKICAgICBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6
OlJlbW90ZU9iamVjdD4gd3JhcE9iamVjdChKU0M6OkpTVmFsdWUsIGNvbnN0IFN0cmluZyYgZ3Jv
dXBOYW1lLCBib29sIGdlbmVyYXRlUHJldmlldyA9IGZhbHNlKSBjb25zdDsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRCYXNlLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRCYXNlLmNwcApp
bmRleCA3NTY5ZjViNWQ5NzU4MDg4MjRmNjRlYjJlZjBhNDA2YjY0YTRkOTM5Li4wOTAxNjZhOTFm
YzY2YWQxY2RlNzE4MTk1M2NmNDc3M2ZmNjZmMDhmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0QmFzZS5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdEJhc2UuY3BwCkBAIC0xMDAsNyAr
MTAwLDcgQEAgUmVmPEpTT046OlZhbHVlPiBJbmplY3RlZFNjcmlwdEJhc2U6Om1ha2VDYWxsKERl
cHJlY2F0ZWQ6OlNjcmlwdEZ1bmN0aW9uQ2FsbCYgZnUKICAgICByZXR1cm4gcmVzdWx0SlNPTlZh
bHVlLnJlbGVhc2VOb25OdWxsKCk7CiB9CiAKLXZvaWQgSW5qZWN0ZWRTY3JpcHRCYXNlOjptYWtl
RXZhbENhbGwoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBEZXByZWNhdGVkOjpTY3JpcHRGdW5j
dGlvbkNhbGwmIGZ1bmN0aW9uLCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVj
dD4mIG91dF9yZXN1bHRPYmplY3QsIE9wdGlvbmFsPGJvb2w+JiBvdXRfd2FzVGhyb3duLCBPcHRp
b25hbDxpbnQ+JiBvdXRfc2F2ZWRSZXN1bHRJbmRleCkKK3ZvaWQgSW5qZWN0ZWRTY3JpcHRCYXNl
OjptYWtlRXZhbENhbGwoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgRGVwcmVj
YXRlZDo6U2NyaXB0RnVuY3Rpb25DYWxsJiBmdW5jdGlvbiwgUmVmUHRyPFByb3RvY29sOjpSdW50
aW1lOjpSZW1vdGVPYmplY3Q+JiBvdXRfcmVzdWx0T2JqZWN0LCBPcHRpb25hbDxib29sPiYgb3V0
X3dhc1Rocm93biwgT3B0aW9uYWw8aW50PiYgb3V0X3NhdmVkUmVzdWx0SW5kZXgpCiB7CiAgICAg
Y2hlY2tDYWxsUmVzdWx0KGVycm9yU3RyaW5nLCBtYWtlQ2FsbChmdW5jdGlvbiksIG91dF9yZXN1
bHRPYmplY3QsIG91dF93YXNUaHJvd24sIG91dF9zYXZlZFJlc3VsdEluZGV4KTsKIH0KQEAgLTE0
Myw3ICsxNDMsNyBAQCB2b2lkIEluamVjdGVkU2NyaXB0QmFzZTo6bWFrZUFzeW5jQ2FsbChEZXBy
ZWNhdGVkOjpTY3JpcHRGdW5jdGlvbkNhbGwmIGZ1bmN0aW9uLAogICAgIH0KIH0KIAotdm9pZCBJ
bmplY3RlZFNjcmlwdEJhc2U6OmNoZWNrQ2FsbFJlc3VsdChFcnJvclN0cmluZyYgZXJyb3JTdHJp
bmcsIFJlZlB0cjxKU09OOjpWYWx1ZT4gcmVzdWx0LCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6
OlJlbW90ZU9iamVjdD4mIG91dF9yZXN1bHRPYmplY3QsIE9wdGlvbmFsPGJvb2w+JiBvdXRfd2Fz
VGhyb3duLCBPcHRpb25hbDxpbnQ+JiBvdXRfc2F2ZWRSZXN1bHRJbmRleCkKK3ZvaWQgSW5qZWN0
ZWRTY3JpcHRCYXNlOjpjaGVja0NhbGxSZXN1bHQoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJv
clN0cmluZywgUmVmUHRyPEpTT046OlZhbHVlPiByZXN1bHQsIFJlZlB0cjxQcm90b2NvbDo6UnVu
dGltZTo6UmVtb3RlT2JqZWN0PiYgb3V0X3Jlc3VsdE9iamVjdCwgT3B0aW9uYWw8Ym9vbD4mIG91
dF93YXNUaHJvd24sIE9wdGlvbmFsPGludD4mIG91dF9zYXZlZFJlc3VsdEluZGV4KQogewogICAg
IGlmICghcmVzdWx0KSB7CiAgICAgICAgIGVycm9yU3RyaW5nID0gIkludGVybmFsIGVycm9yOiBy
ZXN1bHQgdmFsdWUgaXMgZW1wdHkiX3M7CkBAIC0xNTEsNDkgKzE1MSw0MiBAQCB2b2lkIEluamVj
dGVkU2NyaXB0QmFzZTo6Y2hlY2tDYWxsUmVzdWx0KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywg
UmVmUHRyPEpTT046OgogICAgIH0KIAogICAgIGlmIChyZXN1bHQtPnR5cGUoKSA9PSBKU09OOjpW
YWx1ZTo6VHlwZTo6U3RyaW5nKSB7Ci0gICAgICAgIHJlc3VsdC0+YXNTdHJpbmcoZXJyb3JTdHJp
bmcpOwotICAgICAgICBBU1NFUlQoZXJyb3JTdHJpbmcubGVuZ3RoKCkpOworICAgICAgICBlcnJv
clN0cmluZyA9IHJlc3VsdC0+YXNTdHJpbmcoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAot
ICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHJlc3VsdFR1cGxlOwotICAgIGlmICghcmVzdWx0LT5h
c09iamVjdChyZXN1bHRUdXBsZSkpIHsKKyAgICBhdXRvIHJlc3VsdFR1cGxlID0gcmVzdWx0LT5h
c09iamVjdCgpOworICAgIGlmICghcmVzdWx0VHVwbGUpIHsKICAgICAgICAgZXJyb3JTdHJpbmcg
PSAiSW50ZXJuYWwgZXJyb3I6IHJlc3VsdCBpcyBub3QgYW4gT2JqZWN0Il9zOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcmVzdWx0T2JqZWN0Owot
ICAgIGlmICghcmVzdWx0VHVwbGUtPmdldE9iamVjdCgicmVzdWx0Il9zLCByZXN1bHRPYmplY3Qp
KSB7CisgICAgYXV0byByZXN1bHRPYmplY3QgPSByZXN1bHRUdXBsZS0+Z2V0T2JqZWN0KCJyZXN1
bHQiX3MpOworICAgIGlmICghcmVzdWx0T2JqZWN0KSB7CiAgICAgICAgIGVycm9yU3RyaW5nID0g
IkludGVybmFsIGVycm9yOiByZXN1bHQgaXMgbm90IGEgcGFpciBvZiB2YWx1ZSBhbmQgd2FzVGhy
b3duIGZsYWciX3M7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBib29sIHdhc1Rocm93
biA9IGZhbHNlOwotICAgIGlmICghcmVzdWx0VHVwbGUtPmdldEJvb2xlYW4oIndhc1Rocm93biJf
cywgd2FzVGhyb3duKSkgeworICAgIG91dF93YXNUaHJvd24gPSByZXN1bHRUdXBsZS0+Z2V0Qm9v
bGVhbigid2FzVGhyb3duIl9zKTsKKyAgICBpZiAoIW91dF93YXNUaHJvd24pIHsKICAgICAgICAg
ZXJyb3JTdHJpbmcgPSAiSW50ZXJuYWwgZXJyb3I6IHJlc3VsdCBpcyBub3QgYSBwYWlyIG9mIHZh
bHVlIGFuZCB3YXNUaHJvd24gZmxhZyJfczsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IG91dF9yZXN1bHRPYmplY3QgPSBCaW5kaW5nVHJhaXRzPFByb3RvY29sOjpSdW50aW1lOjpSZW1v
dGVPYmplY3Q+OjpydW50aW1lQ2FzdChyZXN1bHRPYmplY3QpOwotCi0gICAgaWYgKHdhc1Rocm93
bikKLSAgICAgICAgb3V0X3dhc1Rocm93biA9IHdhc1Rocm93bjsKLQotICAgIGludCBzYXZlZFJl
c3VsdEluZGV4OwotICAgIGlmIChyZXN1bHRUdXBsZS0+Z2V0SW50ZWdlcigic2F2ZWRSZXN1bHRJ
bmRleCJfcywgc2F2ZWRSZXN1bHRJbmRleCkpCi0gICAgICAgIG91dF9zYXZlZFJlc3VsdEluZGV4
ID0gc2F2ZWRSZXN1bHRJbmRleDsKKyAgICBvdXRfcmVzdWx0T2JqZWN0ID0gUHJvdG9jb2w6OkJp
bmRpbmdUcmFpdHM8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD46OnJ1bnRpbWVDYXN0
KHJlc3VsdE9iamVjdC5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICBvdXRfc2F2ZWRSZXN1bHRJbmRl
eCA9IHJlc3VsdFR1cGxlLT5nZXRJbnRlZ2VyKCJzYXZlZFJlc3VsdEluZGV4Il9zKTsKIH0KIAog
dm9pZCBJbmplY3RlZFNjcmlwdEJhc2U6OmNoZWNrQXN5bmNDYWxsUmVzdWx0KFJlZlB0cjxKU09O
OjpWYWx1ZT4gcmVzdWx0LCBjb25zdCBBc3luY0NhbGxDYWxsYmFjayYgY2FsbGJhY2spCiB7Ci0g
ICAgRXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVy
cm9yU3RyaW5nOwogICAgIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiBy
ZXN1bHRPYmplY3Q7CiAgICAgT3B0aW9uYWw8Ym9vbD4gd2FzVGhyb3duOwogICAgIE9wdGlvbmFs
PGludD4gc2F2ZWRSZXN1bHRJbmRleDsKIAogICAgIGNoZWNrQ2FsbFJlc3VsdChlcnJvclN0cmlu
ZywgcmVzdWx0LCByZXN1bHRPYmplY3QsIHdhc1Rocm93biwgc2F2ZWRSZXN1bHRJbmRleCk7CiAK
LSAgICBjYWxsYmFjayhlcnJvclN0cmluZywgV1RGTW92ZShyZXN1bHRPYmplY3QpLCB3YXNUaHJv
d24sIHNhdmVkUmVzdWx0SW5kZXgpOworICAgIGNhbGxiYWNrKGVycm9yU3RyaW5nLCBXVEZNb3Zl
KHJlc3VsdE9iamVjdCksIFdURk1vdmUod2FzVGhyb3duKSwgV1RGTW92ZShzYXZlZFJlc3VsdElu
ZGV4KSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNjcmlwdEJhc2UuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRCYXNlLmgKaW5kZXggODEyM2Yx
ZDY2ZTliMTNhZDRhZDBlY2IxYTNjYWQzM2Y1OTc2ZDVkNy4uZjRlNmEwZmVlYTQxMWNkMDU4NTk4
NGJkNzRhY2M0YjI0YWE4ZWQwZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9JbmplY3RlZFNjcmlwdEJhc2UuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL0luamVjdGVkU2NyaXB0QmFzZS5oCkBAIC00Nyw4ICs0Nyw3IEBAIGNsYXNzIFNj
cmlwdEZ1bmN0aW9uQ2FsbDsKIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKLXR5cGVkZWYgU3Ry
aW5nIEVycm9yU3RyaW5nOwotdHlwZWRlZiBXVEY6OkZ1bmN0aW9uPHZvaWQoRXJyb3JTdHJpbmcm
LCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mJiwgT3B0aW9uYWw8Ym9v
bD4mLCBPcHRpb25hbDxpbnQ+Jik+IEFzeW5jQ2FsbENhbGxiYWNrOwordXNpbmcgQXN5bmNDYWxs
Q2FsbGJhY2sgPSBXVEY6OkZ1bmN0aW9uPHZvaWQoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiwgUmVm
UHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiYsIE9wdGlvbmFsPGJvb2w+JiYs
IE9wdGlvbmFsPGludD4mJik+OwogCiBjbGFzcyBKU19FWFBPUlRfUFJJVkFURSBJbmplY3RlZFNj
cmlwdEJhc2UgewogcHVibGljOgpAQCAtNjksMTEgKzY4LDExIEBAIHByb3RlY3RlZDoKICAgICBj
b25zdCBEZXByZWNhdGVkOjpTY3JpcHRPYmplY3QmIGluamVjdGVkU2NyaXB0T2JqZWN0KCkgY29u
c3Q7CiAgICAgRXhwZWN0ZWQ8SlNDOjpKU1ZhbHVlLCBOYWtlZFB0cjxKU0M6OkV4Y2VwdGlvbj4+
IGNhbGxGdW5jdGlvbldpdGhFdmFsRW5hYmxlZChEZXByZWNhdGVkOjpTY3JpcHRGdW5jdGlvbkNh
bGwmKSBjb25zdDsKICAgICBSZWY8SlNPTjo6VmFsdWU+IG1ha2VDYWxsKERlcHJlY2F0ZWQ6OlNj
cmlwdEZ1bmN0aW9uQ2FsbCYpOwotICAgIHZvaWQgbWFrZUV2YWxDYWxsKEVycm9yU3RyaW5nJiwg
RGVwcmVjYXRlZDo6U2NyaXB0RnVuY3Rpb25DYWxsJiwgUmVmUHRyPFByb3RvY29sOjpSdW50aW1l
OjpSZW1vdGVPYmplY3Q+JiByZXN1bHRPYmplY3QsIE9wdGlvbmFsPGJvb2w+JiB3YXNUaHJvd24s
IE9wdGlvbmFsPGludD4mIHNhdmVkUmVzdWx0SW5kZXgpOworICAgIHZvaWQgbWFrZUV2YWxDYWxs
KFByb3RvY29sOjpFcnJvclN0cmluZyYsIERlcHJlY2F0ZWQ6OlNjcmlwdEZ1bmN0aW9uQ2FsbCYs
IFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0T2JqZWN0LCBP
cHRpb25hbDxib29sPiYgd2FzVGhyb3duLCBPcHRpb25hbDxpbnQ+JiBzYXZlZFJlc3VsdEluZGV4
KTsKICAgICB2b2lkIG1ha2VBc3luY0NhbGwoRGVwcmVjYXRlZDo6U2NyaXB0RnVuY3Rpb25DYWxs
JiwgQXN5bmNDYWxsQ2FsbGJhY2smJik7CiAKIHByaXZhdGU6Ci0gICAgdm9pZCBjaGVja0NhbGxS
ZXN1bHQoRXJyb3JTdHJpbmcmLCBSZWZQdHI8SlNPTjo6VmFsdWU+IHJlc3VsdCwgUmVmUHRyPFBy
b3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiByZXN1bHRPYmplY3QsIE9wdGlvbmFsPGJv
b2w+JiB3YXNUaHJvd24sIE9wdGlvbmFsPGludD4mIHNhdmVkUmVzdWx0SW5kZXgpOworICAgIHZv
aWQgY2hlY2tDYWxsUmVzdWx0KFByb3RvY29sOjpFcnJvclN0cmluZyYsIFJlZlB0cjxKU09OOjpW
YWx1ZT4gcmVzdWx0LCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJl
c3VsdE9iamVjdCwgT3B0aW9uYWw8Ym9vbD4mIHdhc1Rocm93biwgT3B0aW9uYWw8aW50PiYgc2F2
ZWRSZXN1bHRJbmRleCk7CiAgICAgdm9pZCBjaGVja0FzeW5jQ2FsbFJlc3VsdChSZWZQdHI8SlNP
Tjo6VmFsdWU+IHJlc3VsdCwgY29uc3QgQXN5bmNDYWxsQ2FsbGJhY2smKTsKIAogICAgIFN0cmlu
ZyBtX25hbWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0lu
amVjdGVkU2NyaXB0TWFuYWdlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L0luamVjdGVkU2NyaXB0TWFuYWdlci5jcHAKaW5kZXggOTBhZjdhOGYzYTMzMDU2MTZiNDk1ZTVi
M2NhZGYwNTMzMTFlMjM1MC4uZmNjYzhlZjE5ODZkODg2ZDc1NjAwZjczNjEwMGE3ZWIzOTZiNTAw
NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbmplY3RlZFNj
cmlwdE1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5q
ZWN0ZWRTY3JpcHRNYW5hZ2VyLmNwcApAQCAtMTAyLDE5ICsxMDIsMTkgQEAgaW50IEluamVjdGVk
U2NyaXB0TWFuYWdlcjo6aW5qZWN0ZWRTY3JpcHRJZEZvcihKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0KQogCiBJbmplY3RlZFNjcmlwdCBJbmplY3RlZFNjcmlwdE1hbmFnZXI6OmluamVjdGVk
U2NyaXB0Rm9yT2JqZWN0SWQoY29uc3QgU3RyaW5nJiBvYmplY3RJZCkKIHsKLSAgICBSZWZQdHI8
SlNPTjo6VmFsdWU+IHBhcnNlZE9iamVjdElkOwotICAgIGlmICghSlNPTjo6VmFsdWU6OnBhcnNl
SlNPTihvYmplY3RJZCwgcGFyc2VkT2JqZWN0SWQpKQorICAgIGF1dG8gcGFyc2VkT2JqZWN0SWQg
PSBKU09OOjpWYWx1ZTo6cGFyc2VKU09OKG9iamVjdElkKTsKKyAgICBpZiAoIXBhcnNlZE9iamVj
dElkKQogICAgICAgICByZXR1cm4gSW5qZWN0ZWRTY3JpcHQoKTsKIAotICAgIFJlZlB0cjxKU09O
OjpPYmplY3Q+IHJlc3VsdE9iamVjdDsKLSAgICBpZiAoIXBhcnNlZE9iamVjdElkLT5hc09iamVj
dChyZXN1bHRPYmplY3QpKQorICAgIGF1dG8gcmVzdWx0T2JqZWN0ID0gcGFyc2VkT2JqZWN0SWQt
PmFzT2JqZWN0KCk7CisgICAgaWYgKCFyZXN1bHRPYmplY3QpCiAgICAgICAgIHJldHVybiBJbmpl
Y3RlZFNjcmlwdCgpOwogCi0gICAgbG9uZyBpbmplY3RlZFNjcmlwdElkID0gMDsKLSAgICBpZiAo
IXJlc3VsdE9iamVjdC0+Z2V0SW50ZWdlcigiaW5qZWN0ZWRTY3JpcHRJZCJfcywgaW5qZWN0ZWRT
Y3JpcHRJZCkpCisgICAgYXV0byBpbmplY3RlZFNjcmlwdElkID0gcmVzdWx0T2JqZWN0LT5nZXRJ
bnRlZ2VyKCJpbmplY3RlZFNjcmlwdElkIl9zKTsKKyAgICBpZiAoIWluamVjdGVkU2NyaXB0SWQp
CiAgICAgICAgIHJldHVybiBJbmplY3RlZFNjcmlwdCgpOwogCi0gICAgcmV0dXJuIG1faWRUb0lu
amVjdGVkU2NyaXB0LmdldChpbmplY3RlZFNjcmlwdElkKTsKKyAgICByZXR1cm4gbV9pZFRvSW5q
ZWN0ZWRTY3JpcHQuZ2V0KCppbmplY3RlZFNjcmlwdElkKTsKIH0KIAogdm9pZCBJbmplY3RlZFNj
cmlwdE1hbmFnZXI6OnJlbGVhc2VPYmplY3RHcm91cChjb25zdCBTdHJpbmcmIG9iamVjdEdyb3Vw
KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmNwcAppbmRleCA2OTNlOGIyNWM3Mzc3ODM0MGU4Mzk0
MDQ2Nzg2ZDkzMThhOGEwOTI0Li5mNzgzZGNjNGI0MDIwM2U1MjVhMzM3MTYzZjBiZTNkYzJlNTBj
YTY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmNwcApAQCAtNjgsNyArNjgsNyBAQCB2b2lk
IEJhY2tlbmREaXNwYXRjaGVyOjpDYWxsYmFja0Jhc2U6OnNlbmRGYWlsdXJlKGNvbnN0IEVycm9y
U3RyaW5nJiBlcnJvcikKICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUGVuZGluZ0Vycm9y
cygpOwogfQogCi12b2lkIEJhY2tlbmREaXNwYXRjaGVyOjpDYWxsYmFja0Jhc2U6OnNlbmRTdWNj
ZXNzKFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFydGlhbE1lc3NhZ2UpCit2b2lkIEJhY2tlbmRE
aXNwYXRjaGVyOjpDYWxsYmFja0Jhc2U6OnNlbmRTdWNjZXNzKFJlZjxKU09OOjpPYmplY3Q+JiYg
cGFydGlhbE1lc3NhZ2UpCiB7CiAgICAgaWYgKG1fYWxyZWFkeVNlbnQpCiAgICAgICAgIHJldHVy
bjsKQEAgLTEwNyw3ICsxMDcsNyBAQCB2b2lkIEJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChj
b25zdCBTdHJpbmcmIG1lc3NhZ2UpCiAKICAgICBBU1NFUlQoIW1fcHJvdG9jb2xFcnJvcnMuc2l6
ZSgpKTsKIAotICAgIGxvbmcgcmVxdWVzdElkID0gMDsKKyAgICBpbnQgcmVxdWVzdElkID0gMDsK
ICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBtZXNzYWdlT2JqZWN0OwogCiAgICAgewpAQCAtMTE1
LDQ2ICsxMTUsNTAgQEAgdm9pZCBCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2goY29uc3QgU3Ry
aW5nJiBtZXNzYWdlKQogICAgICAgICAvLyB0aGUgb3V0ZXIgcmVxdWVzdCdzIGlkIGp1c3QgYmVj
YXVzZSB0aGUgaW5uZXIgcmVxdWVzdCBpcyBib2d1cy4KICAgICAgICAgU2V0Rm9yU2NvcGU8T3B0
aW9uYWw8bG9uZz4+IHNjb3BlZFJlcXVlc3RJZChtX2N1cnJlbnRSZXF1ZXN0SWQsIFdURjo6bnVs
bG9wdCk7CiAKLSAgICAgICAgUmVmUHRyPEpTT046OlZhbHVlPiBwYXJzZWRNZXNzYWdlOwotICAg
ICAgICBpZiAoIUpTT046OlZhbHVlOjpwYXJzZUpTT04obWVzc2FnZSwgcGFyc2VkTWVzc2FnZSkp
IHsKKyAgICAgICAgYXV0byBwYXJzZWRNZXNzYWdlID0gSlNPTjo6VmFsdWU6OnBhcnNlSlNPTiht
ZXNzYWdlKTsKKyAgICAgICAgaWYgKCFwYXJzZWRNZXNzYWdlKSB7CiAgICAgICAgICAgICByZXBv
cnRQcm90b2NvbEVycm9yKFBhcnNlRXJyb3IsICJNZXNzYWdlIG11c3QgYmUgaW4gSlNPTiBmb3Jt
YXQiX3MpOwogICAgICAgICAgICAgc2VuZFBlbmRpbmdFcnJvcnMoKTsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQogCi0gICAgICAgIGlmICghcGFyc2VkTWVzc2FnZS0+YXNPYmplY3Qo
bWVzc2FnZU9iamVjdCkpIHsKKyAgICAgICAgbWVzc2FnZU9iamVjdCA9IHBhcnNlZE1lc3NhZ2Ut
PmFzT2JqZWN0KCk7CisgICAgICAgIGlmICghbWVzc2FnZU9iamVjdCkgewogICAgICAgICAgICAg
cmVwb3J0UHJvdG9jb2xFcnJvcihJbnZhbGlkUmVxdWVzdCwgIk1lc3NhZ2UgbXVzdCBiZSBhIEpT
T05pZmllZCBvYmplY3QiX3MpOwogICAgICAgICAgICAgc2VuZFBlbmRpbmdFcnJvcnMoKTsKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIFJlZlB0cjxKU09OOjpWYWx1
ZT4gcmVxdWVzdElkVmFsdWU7Ci0gICAgICAgIGlmICghbWVzc2FnZU9iamVjdC0+Z2V0VmFsdWUo
ImlkIl9zLCByZXF1ZXN0SWRWYWx1ZSkpIHsKKyAgICAgICAgYXV0byByZXF1ZXN0SWRWYWx1ZSA9
IG1lc3NhZ2VPYmplY3QtPmdldFZhbHVlKCJpZCJfcyk7CisgICAgICAgIGlmICghcmVxdWVzdElk
VmFsdWUpIHsKICAgICAgICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoSW52YWxpZFJlcXVlc3Qs
ICInaWQnIHByb3BlcnR5IHdhcyBub3QgZm91bmQiX3MpOwogICAgICAgICAgICAgc2VuZFBlbmRp
bmdFcnJvcnMoKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIGlm
ICghcmVxdWVzdElkVmFsdWUtPmFzSW50ZWdlcihyZXF1ZXN0SWQpKSB7CisgICAgICAgIGF1dG8g
cmVxdWVzdElkSW50ID0gcmVxdWVzdElkVmFsdWUtPmFzSW50ZWdlcigpOworICAgICAgICBpZiAo
IXJlcXVlc3RJZEludCkgewogICAgICAgICAgICAgcmVwb3J0UHJvdG9jb2xFcnJvcihJbnZhbGlk
UmVxdWVzdCwgIlRoZSB0eXBlIG9mICdpZCcgcHJvcGVydHkgbXVzdCBiZSBpbnRlZ2VyIl9zKTsK
ICAgICAgICAgICAgIHNlbmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KKworICAgICAgICByZXF1ZXN0SWQgPSAqcmVxdWVzdElkSW50OwogICAgIH0KIAog
ICAgIHsKICAgICAgICAgLy8gV2UgY291bGQgYmUgY2FsbGVkIHJlLWVudHJhbnRseSBmcm9tIGEg
bmVzdGVkIHJ1biBsb29wLCBzbyByZXN0b3JlIHRoZSBwcmV2aW91cyBpZC4KICAgICAgICAgU2V0
Rm9yU2NvcGU8T3B0aW9uYWw8bG9uZz4+IHNjb3BlZFJlcXVlc3RJZChtX2N1cnJlbnRSZXF1ZXN0
SWQsIHJlcXVlc3RJZCk7CiAKLSAgICAgICAgUmVmUHRyPEpTT046OlZhbHVlPiBtZXRob2RWYWx1
ZTsKLSAgICAgICAgaWYgKCFtZXNzYWdlT2JqZWN0LT5nZXRWYWx1ZSgibWV0aG9kIl9zLCBtZXRo
b2RWYWx1ZSkpIHsKKyAgICAgICAgYXV0byBtZXRob2RWYWx1ZSA9IG1lc3NhZ2VPYmplY3QtPmdl
dFZhbHVlKCJtZXRob2QiX3MpOworICAgICAgICBpZiAoIW1ldGhvZFZhbHVlKSB7CiAgICAgICAg
ICAgICByZXBvcnRQcm90b2NvbEVycm9yKEludmFsaWRSZXF1ZXN0LCAiJ21ldGhvZCcgcHJvcGVy
dHkgd2Fzbid0IGZvdW5kIl9zKTsKICAgICAgICAgICAgIHNlbmRQZW5kaW5nRXJyb3JzKCk7CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBTdHJpbmcgbWV0aG9kU3Ry
aW5nOwotICAgICAgICBpZiAoIW1ldGhvZFZhbHVlLT5hc1N0cmluZyhtZXRob2RTdHJpbmcpKSB7
CisgICAgICAgIGF1dG8gbWV0aG9kU3RyaW5nID0gbWV0aG9kVmFsdWUtPmFzU3RyaW5nKCk7Cisg
ICAgICAgIGlmICghbWV0aG9kU3RyaW5nKSB7CiAgICAgICAgICAgICByZXBvcnRQcm90b2NvbEVy
cm9yKEludmFsaWRSZXF1ZXN0LCAiVGhlIHR5cGUgb2YgJ21ldGhvZCcgcHJvcGVydHkgbXVzdCBi
ZSBzdHJpbmciX3MpOwogICAgICAgICAgICAgc2VuZFBlbmRpbmdFcnJvcnMoKTsKICAgICAgICAg
ICAgIHJldHVybjsKQEAgLTE4NCwxMiArMTg4LDEyIEBAIHZvaWQgQmFja2VuZERpc3BhdGNoZXI6
OmRpc3BhdGNoKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKIH0KIAogLy8gRklYTUU6IHJlbW92ZSB0
aGlzIGZ1bmN0aW9uIHdoZW4gbGVnYWN5IEluc3BlY3Rvck9iamVjdCBzeW1ib2xzIGFyZSBubyBs
b25nZXIgbmVlZGVkIDxodHRwOi8vd2Via2l0Lm9yZy9iLzE3OTg0Nz4uCi12b2lkIEJhY2tlbmRE
aXNwYXRjaGVyOjpzZW5kUmVzcG9uc2UobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmpl
Y3Q+JiYgcmVzdWx0KQordm9pZCBCYWNrZW5kRGlzcGF0Y2hlcjo6c2VuZFJlc3BvbnNlKGxvbmcg
cmVxdWVzdElkLCBSZWY8SlNPTjo6T2JqZWN0PiYmIHJlc3VsdCkKIHsKICAgICBzZW5kUmVzcG9u
c2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKIH0KIAotdm9pZCBCYWNrZW5k
RGlzcGF0Y2hlcjo6c2VuZFJlc3BvbnNlKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiYmIHJlc3VsdCwgYm9vbCkKK3ZvaWQgQmFja2VuZERpc3BhdGNoZXI6OnNlbmRSZXNwb25z
ZShsb25nIHJlcXVlc3RJZCwgUmVmPEpTT046Ok9iamVjdD4mJiByZXN1bHQsIGJvb2wpCiB7CiAg
ICAgQVNTRVJUKCFtX3Byb3RvY29sRXJyb3JzLnNpemUoKSk7CiAKQEAgLTI3MCw3NCArMjc0LDY0
IEBAIHZvaWQgQmFja2VuZERpc3BhdGNoZXI6OnJlcG9ydFByb3RvY29sRXJyb3IoT3B0aW9uYWw8
bG9uZz4gcmVsYXRlZFJlcXVlc3RJZCwgQ29tCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1U
IEJhY2tlbmREaXNwYXRjaGVyOjpnZXRQcm9wZXJ0eVZhbHVlKEpTT046Ok9iamVjdCogb2JqZWN0
LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIG91dF9vcHRpb25hbFZhbHVlRm91bmQsIFQgZGVm
YXVsdFZhbHVlLCBzdGQ6OmZ1bmN0aW9uPGJvb2woSlNPTjo6VmFsdWUmLCBUJik+IGFzTWV0aG9k
LCBjb25zdCBjaGFyKiB0eXBlTmFtZSkKK1QgQmFja2VuZERpc3BhdGNoZXI6OmdldFByb3BlcnR5
VmFsdWUoSlNPTjo6T2JqZWN0KiBwYXJhbXMsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCByZXF1
aXJlZCwgc3RkOjpmdW5jdGlvbjxUKEpTT046OlZhbHVlJik+IGNvbnZlcnRlciwgY29uc3QgY2hh
ciogdHlwZU5hbWUpCiB7Ci0gICAgVCByZXN1bHQoZGVmYXVsdFZhbHVlKTsKLSAgICAvLyBvdXRf
b3B0aW9uYWxWYWx1ZUZvdW5kIHNpZ25hbHMgdG8gdGhlIGNhbGxlciB3aGV0aGVyIGFuIG9wdGlv
bmFsIHByb3BlcnR5IHdhcyBmb3VuZC4KLSAgICAvLyBpZiBvdXRfb3B0aW9uYWxWYWx1ZUZvdW5k
ID09IG51bGxwdHIsIHRoZW4gdGhpcyBpcyBhIHJlcXVpcmVkIHByb3BlcnR5LgotICAgIGlmIChv
dXRfb3B0aW9uYWxWYWx1ZUZvdW5kKQotICAgICAgICAqb3V0X29wdGlvbmFsVmFsdWVGb3VuZCA9
IGZhbHNlOworICAgIFQgcmVzdWx0OwogCi0gICAgaWYgKCFvYmplY3QpIHsKLSAgICAgICAgaWYg
KCFvdXRfb3B0aW9uYWxWYWx1ZUZvdW5kKQorICAgIGlmICghcGFyYW1zKSB7CisgICAgICAgIGlm
IChyZXF1aXJlZCkKICAgICAgICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3Bh
dGNoZXI6OkludmFsaWRQYXJhbXMsIG1ha2VTdHJpbmcoIidwYXJhbXMnIG9iamVjdCBtdXN0IGNv
bnRhaW4gcmVxdWlyZWQgcGFyYW1ldGVyICciLCBuYW1lLCAiJyB3aXRoIHR5cGUgJyIsIHR5cGVO
YW1lLCAiJy4iKSk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCi0gICAgYXV0byBm
aW5kUmVzdWx0ID0gb2JqZWN0LT5maW5kKG5hbWUpOwotICAgIGlmIChmaW5kUmVzdWx0ID09IG9i
amVjdC0+ZW5kKCkpIHsKLSAgICAgICAgaWYgKCFvdXRfb3B0aW9uYWxWYWx1ZUZvdW5kKQorICAg
IGF1dG8gZmluZFJlc3VsdCA9IHBhcmFtcy0+ZmluZChuYW1lKTsKKyAgICBpZiAoZmluZFJlc3Vs
dCA9PSBwYXJhbXMtPmVuZCgpKSB7CisgICAgICAgIGlmIChyZXF1aXJlZCkKICAgICAgICAgICAg
IHJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OkludmFsaWRQYXJhbXMsIG1h
a2VTdHJpbmcoIlBhcmFtZXRlciAnIiwgbmFtZSwgIicgd2l0aCB0eXBlICciLCB0eXBlTmFtZSwg
Iicgd2FzIG5vdCBmb3VuZC4iKSk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCi0g
ICAgaWYgKCFhc01ldGhvZCgqZmluZFJlc3VsdC0+dmFsdWUsIHJlc3VsdCkpIHsKLSAgICAgICAg
cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFtcywgbWFr
ZVN0cmluZygiUGFyYW1ldGVyICciLCBuYW1lLCAiJyBoYXMgd3JvbmcgdHlwZS4gSXQgbXVzdCBi
ZSAnIiwgdHlwZU5hbWUsICInLiIpKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Cisg
ICAgcmVzdWx0ID0gY29udmVydGVyKGZpbmRSZXN1bHQtPnZhbHVlKTsKIAotICAgIGlmIChvdXRf
b3B0aW9uYWxWYWx1ZUZvdW5kKQotICAgICAgICAqb3V0X29wdGlvbmFsVmFsdWVGb3VuZCA9IHRy
dWU7CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJlcG9ydFByb3RvY29sRXJyb3IoQmFja2Vu
ZERpc3BhdGNoZXI6OkludmFsaWRQYXJhbXMsIG1ha2VTdHJpbmcoIlBhcmFtZXRlciAnIiwgbmFt
ZSwgIicgaGFzIHdyb25nIHR5cGUuIEl0IG11c3QgYmUgJyIsIHR5cGVOYW1lLCAiJy4iKSk7CiAK
ICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgYm9vbCBjYXN0VG9JbnRlZ2VyKEpTT046
OlZhbHVlJiB2YWx1ZSwgaW50JiByZXN1bHQpIHsgcmV0dXJuIHZhbHVlLmFzSW50ZWdlcihyZXN1
bHQpOyB9Ci1zdGF0aWMgYm9vbCBjYXN0VG9OdW1iZXIoSlNPTjo6VmFsdWUmIHZhbHVlLCBkb3Vi
bGUmIHJlc3VsdCkgeyByZXR1cm4gdmFsdWUuYXNEb3VibGUocmVzdWx0KTsgfQotCi1pbnQgQmFj
a2VuZERpc3BhdGNoZXI6OmdldEludGVnZXIoSlNPTjo6T2JqZWN0KiBvYmplY3QsIGNvbnN0IFN0
cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCkKK09wdGlvbmFsPGJvb2w+IEJhY2tlbmREaXNw
YXRjaGVyOjpnZXRCb29sZWFuKEpTT046Ok9iamVjdCogcGFyYW1zLCBjb25zdCBTdHJpbmcmIG5h
bWUsIGJvb2wgcmVxdWlyZWQpCiB7Ci0gICAgcmV0dXJuIGdldFByb3BlcnR5VmFsdWU8aW50Pihv
YmplY3QsIG5hbWUsIHZhbHVlRm91bmQsIDAsICZjYXN0VG9JbnRlZ2VyLCAiSW50ZWdlciIpOwor
ICAgIHJldHVybiBnZXRQcm9wZXJ0eVZhbHVlPE9wdGlvbmFsPGJvb2w+PihwYXJhbXMsIG5hbWUs
IHJlcXVpcmVkLCAmSlNPTjo6VmFsdWU6OmFzQm9vbGVhbiwgIkJvb2xlYW4iKTsKIH0KIAotZG91
YmxlIEJhY2tlbmREaXNwYXRjaGVyOjpnZXREb3VibGUoSlNPTjo6T2JqZWN0KiBvYmplY3QsIGNv
bnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCkKK09wdGlvbmFsPGludD4gQmFja2Vu
ZERpc3BhdGNoZXI6OmdldEludGVnZXIoSlNPTjo6T2JqZWN0KiBwYXJhbXMsIGNvbnN0IFN0cmlu
ZyYgbmFtZSwgYm9vbCByZXF1aXJlZCkKIHsKLSAgICByZXR1cm4gZ2V0UHJvcGVydHlWYWx1ZTxk
b3VibGU+KG9iamVjdCwgbmFtZSwgdmFsdWVGb3VuZCwgMCwgJmNhc3RUb051bWJlciwgIk51bWJl
ciIpOworICAgIHJldHVybiBnZXRQcm9wZXJ0eVZhbHVlPE9wdGlvbmFsPGludD4+KHBhcmFtcywg
bmFtZSwgcmVxdWlyZWQsICZKU09OOjpWYWx1ZTo6YXNJbnRlZ2VyLCAiSW50ZWdlciIpOwogfQog
Ci1TdHJpbmcgQmFja2VuZERpc3BhdGNoZXI6OmdldFN0cmluZyhKU09OOjpPYmplY3QqIG9iamVj
dCwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kKQorT3B0aW9uYWw8ZG91Ymxl
PiBCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0RG91YmxlKEpTT046Ok9iamVjdCogcGFyYW1zLCBjb25z
dCBTdHJpbmcmIG5hbWUsIGJvb2wgcmVxdWlyZWQpCiB7Ci0gICAgcmV0dXJuIGdldFByb3BlcnR5
VmFsdWU8U3RyaW5nPihvYmplY3QsIG5hbWUsIHZhbHVlRm91bmQsICIiLCAmSlNPTjo6VmFsdWU6
OmFzU3RyaW5nLCAiU3RyaW5nIik7CisgICAgcmV0dXJuIGdldFByb3BlcnR5VmFsdWU8T3B0aW9u
YWw8ZG91YmxlPj4ocGFyYW1zLCBuYW1lLCByZXF1aXJlZCwgJkpTT046OlZhbHVlOjphc0RvdWJs
ZSwgIk51bWJlciIpOwogfQogCi1ib29sIEJhY2tlbmREaXNwYXRjaGVyOjpnZXRCb29sZWFuKEpT
T046Ok9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQp
CitTdHJpbmcgQmFja2VuZERpc3BhdGNoZXI6OmdldFN0cmluZyhKU09OOjpPYmplY3QqIHBhcmFt
cywgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sIHJlcXVpcmVkKQogewotICAgIHJldHVybiBnZXRQ
cm9wZXJ0eVZhbHVlPGJvb2w+KG9iamVjdCwgbmFtZSwgdmFsdWVGb3VuZCwgZmFsc2UsICZKU09O
OjpWYWx1ZTo6YXNCb29sZWFuLCAiQm9vbGVhbiIpOworICAgIHJldHVybiBnZXRQcm9wZXJ0eVZh
bHVlPFN0cmluZz4ocGFyYW1zLCBuYW1lLCByZXF1aXJlZCwgJkpTT046OlZhbHVlOjphc1N0cmlu
ZywgIlN0cmluZyIpOwogfQogCi1SZWZQdHI8SlNPTjo6T2JqZWN0PiBCYWNrZW5kRGlzcGF0Y2hl
cjo6Z2V0T2JqZWN0KEpTT046Ok9iamVjdCogb2JqZWN0LCBjb25zdCBTdHJpbmcmIG5hbWUsIGJv
b2wqIHZhbHVlRm91bmQpCitSZWZQdHI8SlNPTjo6VmFsdWU+IEJhY2tlbmREaXNwYXRjaGVyOjpn
ZXRWYWx1ZShKU09OOjpPYmplY3QqIHBhcmFtcywgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sIHJl
cXVpcmVkKQogewotICAgIHJldHVybiBnZXRQcm9wZXJ0eVZhbHVlPFJlZlB0cjxKU09OOjpPYmpl
Y3Q+PihvYmplY3QsIG5hbWUsIHZhbHVlRm91bmQsIG51bGxwdHIsICZKU09OOjpWYWx1ZTo6YXNP
YmplY3QsICJPYmplY3QiKTsKKyAgICByZXR1cm4gZ2V0UHJvcGVydHlWYWx1ZTxSZWZQdHI8SlNP
Tjo6VmFsdWU+PihwYXJhbXMsIG5hbWUsIHJlcXVpcmVkLCAmSlNPTjo6VmFsdWU6OmFzVmFsdWUs
ICJWYWx1ZSIpOwogfQogCi1SZWZQdHI8SlNPTjo6QXJyYXk+IEJhY2tlbmREaXNwYXRjaGVyOjpn
ZXRBcnJheShKU09OOjpPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2
YWx1ZUZvdW5kKQorUmVmUHRyPEpTT046Ok9iamVjdD4gQmFja2VuZERpc3BhdGNoZXI6OmdldE9i
amVjdChKU09OOjpPYmplY3QqIHBhcmFtcywgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sIHJlcXVp
cmVkKQogewotICAgIHJldHVybiBnZXRQcm9wZXJ0eVZhbHVlPFJlZlB0cjxKU09OOjpBcnJheT4+
KG9iamVjdCwgbmFtZSwgdmFsdWVGb3VuZCwgbnVsbHB0ciwgJkpTT046OlZhbHVlOjphc0FycmF5
LCAiQXJyYXkiKTsKKyAgICByZXR1cm4gZ2V0UHJvcGVydHlWYWx1ZTxSZWZQdHI8SlNPTjo6T2Jq
ZWN0Pj4ocGFyYW1zLCBuYW1lLCByZXF1aXJlZCwgJkpTT046OlZhbHVlOjphc09iamVjdCwgIk9i
amVjdCIpOwogfQogCi1SZWZQdHI8SlNPTjo6VmFsdWU+IEJhY2tlbmREaXNwYXRjaGVyOjpnZXRW
YWx1ZShKU09OOjpPYmplY3QqIG9iamVjdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1
ZUZvdW5kKQorUmVmUHRyPEpTT046OkFycmF5PiBCYWNrZW5kRGlzcGF0Y2hlcjo6Z2V0QXJyYXko
SlNPTjo6T2JqZWN0KiBwYXJhbXMsIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCByZXF1aXJlZCkK
IHsKLSAgICByZXR1cm4gZ2V0UHJvcGVydHlWYWx1ZTxSZWZQdHI8SlNPTjo6VmFsdWU+PihvYmpl
Y3QsIG5hbWUsIHZhbHVlRm91bmQsIG51bGxwdHIsICZKU09OOjpWYWx1ZTo6YXNWYWx1ZSwgIlZh
bHVlIik7CisgICAgcmV0dXJuIGdldFByb3BlcnR5VmFsdWU8UmVmUHRyPEpTT046OkFycmF5Pj4o
cGFyYW1zLCBuYW1lLCByZXF1aXJlZCwgJkpTT046OlZhbHVlOjphc0FycmF5LCAiQXJyYXkiKTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmgKaW5k
ZXggOTVkOWQ4MTE4OGU3MzVlOGYxYjcwY2MwZGVlZTI2ODJjYjY3MTRmMC4uMDJjOTZkNzI2Mzhj
MjIyZjAzMGQxNDkxY2M5YjkyNjJiMDhiZWNiYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaApA
QCAtMjksOCArMjksMTAgQEAKICNpbmNsdWRlICJJbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oIgog
I2luY2x1ZGUgIkluc3BlY3RvclByb3RvY29sVHlwZXMuaCIKICNpbmNsdWRlIDxmdW5jdGlvbmFs
PgorI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbi5oPgogI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgog
I2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKQEAg
LTU5LDcgKzYxLDcgQEAgcHVibGljOgogICAgICAgICBib29sIGlzQWN0aXZlKCkgY29uc3Q7CiAg
ICAgICAgIHZvaWQgZGlzYWJsZSgpIHsgbV9hbHJlYWR5U2VudCA9IHRydWU7IH0KIAotICAgICAg
ICB2b2lkIHNlbmRTdWNjZXNzKFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpOworICAgICAgICB2b2lk
IHNlbmRTdWNjZXNzKFJlZjxKU09OOjpPYmplY3Q+JiYpOwogICAgICAgICB2b2lkIHNlbmRGYWls
dXJlKGNvbnN0IEVycm9yU3RyaW5nJik7CiAKICAgICBwcml2YXRlOgpAQCAtODcsMjggKzg5LDI3
IEBAIHB1YmxpYzoKICAgICAvLyBOb3RlIHRoYXQgJ3VudXNlZCcgaXMgYSB3b3JrYXJvdW5kIHNv
IHRoZSBjb21waWxlciBjYW4gcGljayB0aGUgcmlnaHQgc2VuZFJlc3BvbnNlIGJhc2VkIG9uIGFy
aXR5LgogICAgIC8vIFdoZW4gPGh0dHA6Ly93ZWJraXQub3JnL2IvMTc5ODQ3PiBpcyBmaXhlZCBv
ciB0aGlzIGNsYXNzIGlzIHJlbmFtZWQgZm9yIHRoZSBKU09OOjpPYmplY3QgY2FzZSwKICAgICAv
LyB0aGVuIHRoaXMgYWx0ZXJuYXRlIG1ldGhvZCB3aXRoIGEgZHVtbXkgcGFyYW1ldGVyIGNhbiBi
ZSByZW1vdmVkIGluIGZhdm9yIG9mIHRoZSBvbmUgd2l0aG91dCBpdC4KLSAgICB2b2lkIHNlbmRS
ZXNwb25zZShsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiByZXN1bHQsIGJv
b2wgdW51c2VkKTsKLSAgICB2b2lkIHNlbmRSZXNwb25zZShsb25nIHJlcXVlc3RJZCwgUmVmUHRy
PEpTT046Ok9iamVjdD4mJiByZXN1bHQpOworICAgIHZvaWQgc2VuZFJlc3BvbnNlKGxvbmcgcmVx
dWVzdElkLCBSZWY8SlNPTjo6T2JqZWN0PiYmIHJlc3VsdCwgYm9vbCB1bnVzZWQpOworICAgIHZv
aWQgc2VuZFJlc3BvbnNlKGxvbmcgcmVxdWVzdElkLCBSZWY8SlNPTjo6T2JqZWN0PiYmIHJlc3Vs
dCk7CiAgICAgdm9pZCBzZW5kUGVuZGluZ0Vycm9ycygpOwogCiAgICAgdm9pZCByZXBvcnRQcm90
b2NvbEVycm9yKENvbW1vbkVycm9yQ29kZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UpOwog
ICAgIHZvaWQgcmVwb3J0UHJvdG9jb2xFcnJvcihPcHRpb25hbDxsb25nPiByZWxhdGVkUmVxdWVz
dElkLCBDb21tb25FcnJvckNvZGUsIGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlKTsKIAotICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgV1RGX0lOVEVSTkFMCi0gICAgVCBnZXRQcm9wZXJ0
eVZhbHVlKEpTT046Ok9iamVjdCosIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogb3V0X29wdGlv
bmFsVmFsdWVGb3VuZCwgVCBkZWZhdWx0VmFsdWUsIHN0ZDo6ZnVuY3Rpb248Ym9vbChKU09OOjpW
YWx1ZSYsIFQmKT4sIGNvbnN0IGNoYXIqIHR5cGVOYW1lKTsKLQotICAgIGludCBnZXRJbnRlZ2Vy
KEpTT046Ok9iamVjdCosIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCk7Ci0g
ICAgZG91YmxlIGdldERvdWJsZShKU09OOjpPYmplY3QqLCBjb25zdCBTdHJpbmcmIG5hbWUsIGJv
b2wqIHZhbHVlRm91bmQpOwotICAgIFN0cmluZyBnZXRTdHJpbmcoSlNPTjo6T2JqZWN0KiwgY29u
c3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kKTsKLSAgICBib29sIGdldEJvb2xlYW4o
SlNPTjo6T2JqZWN0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiB2YWx1ZUZvdW5kKTsKLSAg
ICBSZWZQdHI8SlNPTjo6VmFsdWU+IGdldFZhbHVlKEpTT046Ok9iamVjdCosIGNvbnN0IFN0cmlu
ZyYgbmFtZSwgYm9vbCogdmFsdWVGb3VuZCk7Ci0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gZ2V0
T2JqZWN0KEpTT046Ok9iamVjdCosIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCogdmFsdWVGb3Vu
ZCk7Ci0gICAgUmVmUHRyPEpTT046OkFycmF5PiBnZXRBcnJheShKU09OOjpPYmplY3QqLCBjb25z
dCBTdHJpbmcmIG5hbWUsIGJvb2wqIHZhbHVlRm91bmQpOworICAgIE9wdGlvbmFsPGJvb2w+IGdl
dEJvb2xlYW4oSlNPTjo6T2JqZWN0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29sIHJlcXVpcmVk
KTsKKyAgICBPcHRpb25hbDxpbnQ+IGdldEludGVnZXIoSlNPTjo6T2JqZWN0KiwgY29uc3QgU3Ry
aW5nJiBuYW1lLCBib29sIHJlcXVpcmVkKTsKKyAgICBPcHRpb25hbDxkb3VibGU+IGdldERvdWJs
ZShKU09OOjpPYmplY3QqLCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wgcmVxdWlyZWQpOworICAg
IFN0cmluZyBnZXRTdHJpbmcoSlNPTjo6T2JqZWN0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBib29s
IHJlcXVpcmVkKTsKKyAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IGdldFZhbHVlKEpTT046Ok9iamVj
dCosIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCByZXF1aXJlZCk7CisgICAgUmVmUHRyPEpTT046
Ok9iamVjdD4gZ2V0T2JqZWN0KEpTT046Ok9iamVjdCosIGNvbnN0IFN0cmluZyYgbmFtZSwgYm9v
bCByZXF1aXJlZCk7CisgICAgUmVmUHRyPEpTT046OkFycmF5PiBnZXRBcnJheShKU09OOjpPYmpl
Y3QqLCBjb25zdCBTdHJpbmcmIG5hbWUsIGJvb2wgcmVxdWlyZWQpOwogCiBwcml2YXRlOgogICAg
IEJhY2tlbmREaXNwYXRjaGVyKFJlZjxGcm9udGVuZFJvdXRlcj4mJik7CiAKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgorICAgIFQgZ2V0UHJvcGVydHlWYWx1ZShKU09OOjpPYmplY3QqLCBjb25z
dCBTdHJpbmcmIG5hbWUsIGJvb2wgcmVxdWlyZWQsIHN0ZDo6ZnVuY3Rpb248VChKU09OOjpWYWx1
ZSYpPiBjb252ZXJ0ZXIsIGNvbnN0IGNoYXIqIHR5cGVOYW1lKTsKKwogICAgIFJlZjxGcm9udGVu
ZFJvdXRlcj4gbV9mcm9udGVuZFJvdXRlcjsKICAgICBIYXNoTWFwPFN0cmluZywgU3VwcGxlbWVu
dGFsQmFja2VuZERpc3BhdGNoZXIqPiBtX2Rpc3BhdGNoZXJzOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0luc3BlY3RvclByb3RvY29sVHlwZXMuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oCmlu
ZGV4IGQ3MDEwYTVjNjJlODYzM2E0ZGQwMWIyYzAwNjA1YmFhY2M5YzhjNzkuLjU4NzdlMGQ3NDEw
ODJmNzExYTVmZmVkNDM1Y2VmYzBmMjEzMTMzNWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oCkBAIC0yNywx
MiArMjcsMTkgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4K
KyNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4KICNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsK
IAogbmFtZXNwYWNlIFByb3RvY29sIHsKIAordXNpbmcgRXJyb3JTdHJpbmcgPSBTdHJpbmc7CisK
K3RlbXBsYXRlIDx0eXBlbmFtZSBUPgordXNpbmcgRXJyb3JTdHJpbmdPciA9IEV4cGVjdGVkPFQs
IEVycm9yU3RyaW5nPjsKKwogdGVtcGxhdGU8dHlwZW5hbWU+IHN0cnVjdCBCaW5kaW5nVHJhaXRz
OwogCiB0ZW1wbGF0ZTxKU09OOjpWYWx1ZTo6VHlwZSB0eXBlPiBzdHJ1Y3QgUHJpbWl0aXZlQmlu
ZGluZ1RyYWl0cyB7CkBAIC00NCwyOSArNTEsMjMgQEAgdGVtcGxhdGU8SlNPTjo6VmFsdWU6OlR5
cGUgdHlwZT4gc3RydWN0IFByaW1pdGl2ZUJpbmRpbmdUcmFpdHMgewogfTsKIAogdGVtcGxhdGU8
dHlwZW5hbWUgVD4gc3RydWN0IEJpbmRpbmdUcmFpdHM8SlNPTjo6QXJyYXlPZjxUPj4gewotICAg
IHN0YXRpYyBSZWZQdHI8SlNPTjo6QXJyYXlPZjxUPj4gcnVudGltZUNhc3QoUmVmUHRyPEpTT046
OlZhbHVlPiYmIHZhbHVlKQorICAgIHN0YXRpYyBSZWY8SlNPTjo6QXJyYXlPZjxUPj4gcnVudGlt
ZUNhc3QoUmVmPEpTT046OlZhbHVlPiYmIHZhbHVlKQogICAgIHsKLSAgICAgICAgQVNTRVJUX0FS
Ryh2YWx1ZSwgdmFsdWUpOwotICAgICAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IGFycmF5OwotICAg
ICAgICBib29sIGNhc3RTdWNjZWVkZWQgPSB2YWx1ZS0+YXNBcnJheShhcnJheSk7Ci0gICAgICAg
IEFTU0VSVF9VTlVTRUQoY2FzdFN1Y2NlZWRlZCwgY2FzdFN1Y2NlZWRlZCk7Ci0gICAgICAgIGFz
c2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKGFycmF5LmdldCgpKTsKKyAgICAgICAgYXV0byBhcnJh
eSA9IHZhbHVlLT5hc0FycmF5KCk7CisgICAgICAgIEJpbmRpbmdUcmFpdHM8SlNPTjo6QXJyYXlP
ZjxUPj46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKGFycmF5LmdldCgpKTsKICAgICAgICAg
Q09NUElMRV9BU1NFUlQoc2l6ZW9mKEpTT046OkFycmF5T2Y8VD4pID09IHNpemVvZihKU09OOjpB
cnJheSksIHR5cGVfY2FzdF9wcm9ibGVtKTsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEpT
T046OkFycmF5T2Y8VD4qPihzdGF0aWNfY2FzdDxKU09OOjpBcnJheUJhc2UqPihhcnJheS5nZXQo
KSkpOworICAgICAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5jZV9jYXN0PEpTT046OkFycmF5T2Y8
VD4+KHN0YXRpY19yZWZlcmVuY2VfY2FzdDxKU09OOjpBcnJheUJhc2U+KGFycmF5LnJlbGVhc2VO
b25OdWxsKCkpKTsKICAgICB9CiAKICAgICBzdGF0aWMgdm9pZCBhc3NlcnRWYWx1ZUhhc0V4cGVj
dGVkVHlwZShKU09OOjpWYWx1ZSogdmFsdWUpCiAgICAgeworICAgICAgICBBU1NFUlRfVU5VU0VE
KHZhbHVlLCB2YWx1ZSk7CiAjaWYgQVNTRVJUX0VOQUJMRUQKLSAgICAgICAgQVNTRVJUX0FSRyh2
YWx1ZSwgdmFsdWUpOwotICAgICAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IGFycmF5OwotICAgICAg
ICBib29sIGNhc3RTdWNjZWVkZWQgPSB2YWx1ZS0+YXNBcnJheShhcnJheSk7Ci0gICAgICAgIEFT
U0VSVF9VTlVTRUQoY2FzdFN1Y2NlZWRlZCwgY2FzdFN1Y2NlZWRlZCk7CisgICAgICAgIGF1dG8g
YXJyYXkgPSB2YWx1ZS0+YXNBcnJheSgpOworICAgICAgICBBU1NFUlQoYXJyYXkpOwogICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXJyYXktPmxlbmd0aCgpOyBpKyspCi0gICAgICAg
ICAgICBCaW5kaW5nVHJhaXRzPFQ+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShhcnJheS0+
Z2V0KGkpLmdldCgpKTsKLSNlbHNlCi0gICAgICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7Ci0jZW5k
aWYgLy8gQVNTRVJUX0VOQUJMRUQKKyAgICAgICAgICAgIEJpbmRpbmdUcmFpdHM8VD46OmFzc2Vy
dFZhbHVlSGFzRXhwZWN0ZWRUeXBlKGFycmF5LT5nZXQoaSkucHRyKCkpOworI2VuZGlmCiAgICAg
fQogfTsKIApAQCAtODUsNiArODYsNCBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBCaW5kaW5nVHJhaXRz
PGludD4gOiBQcmltaXRpdmVCaW5kaW5nVHJhaXRzPEpTT046OlZhbHVlOjpUeXBlOgogCiB9CiAK
LXVzaW5nIFByb3RvY29sOjpCaW5kaW5nVHJhaXRzOwotCiB9IC8vIG5hbWVzcGFjZSBJbnNwZWN0
b3IKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvSlNHbG9iYWxP
YmplY3RDb25zb2xlQ2xpZW50LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
SlNHbG9iYWxPYmplY3RDb25zb2xlQ2xpZW50LmNwcAppbmRleCA0NmQwYjY5NDMyOGVlMDQxNzY2
NTAzZmU1NmY5ZDZjMjI5OTc1N2M2Li5iYzYzNjlhMGMzOWQ5YmI2NDA5NWY1ZDg3MDQ0ZDYwNzUz
Y2Q0ODdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTR2xv
YmFsT2JqZWN0Q29uc29sZUNsaWVudC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9KU0dsb2JhbE9iamVjdENvbnNvbGVDbGllbnQuY3BwCkBAIC0xMzYsMjggKzEzNiwy
MiBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0Q29uc29sZUNsaWVudDo6cHJvZmlsZUVuZChKU0M6OkpT
R2xvYmFsT2JqZWN0KiwgY29uc3QgU3RyaW5nJgogCiB2b2lkIEpTR2xvYmFsT2JqZWN0Q29uc29s
ZUNsaWVudDo6c3RhcnRDb25zb2xlUHJvZmlsZSgpCiB7Ci0gICAgRXJyb3JTdHJpbmcgaWdub3Jl
ZDsKLQogICAgIGlmIChtX2RlYnVnZ2VyQWdlbnQpIHsKICAgICAgICAgbV9wcm9maWxlUmVzdG9y
ZUJyZWFrcG9pbnRBY3RpdmVWYWx1ZSA9IG1fZGVidWdnZXJBZ2VudC0+YnJlYWtwb2ludHNBY3Rp
dmUoKTsKLSAgICAgICAgbV9kZWJ1Z2dlckFnZW50LT5zZXRCcmVha3BvaW50c0FjdGl2ZShpZ25v
cmVkLCBmYWxzZSk7CisgICAgICAgIG1fZGVidWdnZXJBZ2VudC0+c2V0QnJlYWtwb2ludHNBY3Rp
dmUoZmFsc2UpOwogICAgIH0KIAotICAgIGlmIChtX3NjcmlwdFByb2ZpbGVyQWdlbnQpIHsKLSAg
ICAgICAgY29uc3QgYm9vbCBpbmNsdWRlU2FtcGxlcyA9IHRydWU7Ci0gICAgICAgIG1fc2NyaXB0
UHJvZmlsZXJBZ2VudC0+c3RhcnRUcmFja2luZyhpZ25vcmVkLCAmaW5jbHVkZVNhbXBsZXMpOwot
ICAgIH0KKyAgICBpZiAobV9zY3JpcHRQcm9maWxlckFnZW50KQorICAgICAgICBtX3NjcmlwdFBy
b2ZpbGVyQWdlbnQtPnN0YXJ0VHJhY2tpbmcodHJ1ZSk7CiB9CiAKIHZvaWQgSlNHbG9iYWxPYmpl
Y3RDb25zb2xlQ2xpZW50OjpzdG9wQ29uc29sZVByb2ZpbGUoKQogewotICAgIEVycm9yU3RyaW5n
IGlnbm9yZWQ7Ci0KICAgICBpZiAobV9zY3JpcHRQcm9maWxlckFnZW50KQotICAgICAgICBtX3Nj
cmlwdFByb2ZpbGVyQWdlbnQtPnN0b3BUcmFja2luZyhpZ25vcmVkKTsKKyAgICAgICAgbV9zY3Jp
cHRQcm9maWxlckFnZW50LT5zdG9wVHJhY2tpbmcoKTsKIAogICAgIGlmIChtX2RlYnVnZ2VyQWdl
bnQpCi0gICAgICAgIG1fZGVidWdnZXJBZ2VudC0+c2V0QnJlYWtwb2ludHNBY3RpdmUoaWdub3Jl
ZCwgbV9wcm9maWxlUmVzdG9yZUJyZWFrcG9pbnRBY3RpdmVWYWx1ZSk7CisgICAgICAgIG1fZGVi
dWdnZXJBZ2VudC0+c2V0QnJlYWtwb2ludHNBY3RpdmUobV9wcm9maWxlUmVzdG9yZUJyZWFrcG9p
bnRBY3RpdmVWYWx1ZSk7CiB9CiAKIHZvaWQgSlNHbG9iYWxPYmplY3RDb25zb2xlQ2xpZW50Ojp0
YWtlSGVhcFNuYXBzaG90KEpTQzo6SlNHbG9iYWxPYmplY3QqLCBjb25zdCBTdHJpbmcmIHRpdGxl
KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9KU0dsb2JhbE9i
amVjdEluc3BlY3RvckNvbnRyb2xsZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9KU0dsb2JhbE9iamVjdEluc3BlY3RvckNvbnRyb2xsZXIuY3BwCmluZGV4IGQ0ZGI1NjNl
YmQ3NjUzMjY2MDRmNTEyYzMxZTlkYjI4NmQxMDgzZjQuLmE2MGYyNWQ0MzdmYmU5ZmRmY2U2YmE1
OGQzZTgyYzI2ZGQ1NmQ2M2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3IvSlNHbG9iYWxPYmplY3RJbnNwZWN0b3JDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL0pTR2xvYmFsT2JqZWN0SW5zcGVjdG9yQ29udHJvbGxl
ci5jcHAKQEAgLTIzMSw5ICsyMzEsOCBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0SW5zcGVjdG9yQ29u
dHJvbGxlcjo6ZnJvbnRlbmRJbml0aWFsaXplZCgpCiAgICAgaWYgKG1fcGF1c2VBZnRlckluaXRp
YWxpemF0aW9uKSB7CiAgICAgICAgIG1fcGF1c2VBZnRlckluaXRpYWxpemF0aW9uID0gZmFsc2U7
CiAKLSAgICAgICAgRXJyb3JTdHJpbmcgaWdub3JlZDsKLSAgICAgICAgZW5zdXJlRGVidWdnZXJB
Z2VudCgpLmVuYWJsZShpZ25vcmVkKTsKLSAgICAgICAgZW5zdXJlRGVidWdnZXJBZ2VudCgpLnBh
dXNlKGlnbm9yZWQpOworICAgICAgICBlbnN1cmVEZWJ1Z2dlckFnZW50KCkuZW5hYmxlKCk7Cisg
ICAgICAgIGVuc3VyZURlYnVnZ2VyQWdlbnQoKS5wYXVzZSgpOwogICAgIH0KIAogI2lmIEVOQUJM
RShSRU1PVEVfSU5TUEVDVE9SKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQWdlbnQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQWdlbnQuY3BwCmluZGV4IDViOWE3MTU0MDg1MDg2
NDFjYTA2MWFlY2Y4ZjAxMTg0NmY3MTA0NDguLjg2ODZkNjk0MWI3ODQ3OTk1YjJkZmZkZDY3OGI2
NmQzYjQ4MWRkYjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
YWdlbnRzL0luc3BlY3RvckFnZW50LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBZ2VudC5jcHAKQEAgLTU0LDQ0ICs1NCw0OSBAQCB2b2lk
IEluc3BlY3RvckFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChEaXNjb25uZWN0
UmVhc29uKQogewogICAgIG1fcGVuZGluZ0V2YWx1YXRlVGVzdENvbW1hbmRzLmNsZWFyKCk7CiAK
LSAgICBFcnJvclN0cmluZyBpZ25vcmVkOwotICAgIGRpc2FibGUoaWdub3JlZCk7CisgICAgZGlz
YWJsZSgpOwogfQogCi12b2lkIEluc3BlY3RvckFnZW50OjplbmFibGUoRXJyb3JTdHJpbmcmKQor
UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yQWdlbnQ6OmVuYWJsZSgpCiB7
CiAgICAgbV9lbmFibGVkID0gdHJ1ZTsKIAogICAgIGlmIChtX3BlbmRpbmdJbnNwZWN0RGF0YS5m
aXJzdCkKLSAgICAgICAgaW5zcGVjdChtX3BlbmRpbmdJbnNwZWN0RGF0YS5maXJzdC5jb3B5UmVm
KCksIG1fcGVuZGluZ0luc3BlY3REYXRhLnNlY29uZC5jb3B5UmVmKCkpOworICAgICAgICBpbnNw
ZWN0KG1fcGVuZGluZ0luc3BlY3REYXRhLmZpcnN0LnJlbGVhc2VOb25OdWxsKCksIG1fcGVuZGlu
Z0luc3BlY3REYXRhLnNlY29uZC5yZWxlYXNlTm9uTnVsbCgpKTsKIAogICAgIGZvciAoYXV0byYg
dGVzdENvbW1hbmQgOiBtX3BlbmRpbmdFdmFsdWF0ZVRlc3RDb21tYW5kcykKICAgICAgICAgbV9m
cm9udGVuZERpc3BhdGNoZXItPmV2YWx1YXRlRm9yVGVzdEluRnJvbnRlbmQodGVzdENvbW1hbmQp
OwogCiAgICAgbV9wZW5kaW5nRXZhbHVhdGVUZXN0Q29tbWFuZHMuY2xlYXIoKTsKKworICAgIHJl
dHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yQWdlbnQ6OmRpc2FibGUoRXJyb3JTdHJpbmcm
KQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yQWdlbnQ6OmRpc2FibGUo
KQogewogICAgIG1fZW5hYmxlZCA9IGZhbHNlOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9p
ZCBJbnNwZWN0b3JBZ2VudDo6aW5pdGlhbGl6ZWQoRXJyb3JTdHJpbmcmKQorUHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yQWdlbnQ6OmluaXRpYWxpemVkKCkKIHsKICAgICBt
X2Vudmlyb25tZW50LmZyb250ZW5kSW5pdGlhbGl6ZWQoKTsKKworICAgIHJldHVybiB7IH07CiB9
CiAKLXZvaWQgSW5zcGVjdG9yQWdlbnQ6Omluc3BlY3QoUmVmUHRyPFByb3RvY29sOjpSdW50aW1l
OjpSZW1vdGVPYmplY3Q+JiYgb2JqZWN0VG9JbnNwZWN0LCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYm
IGhpbnRzKQordm9pZCBJbnNwZWN0b3JBZ2VudDo6aW5zcGVjdChSZWY8UHJvdG9jb2w6OlJ1bnRp
bWU6OlJlbW90ZU9iamVjdD4mJiBvYmplY3QsIFJlZjxKU09OOjpPYmplY3Q+JiYgaGludHMpCiB7
CiAgICAgaWYgKG1fZW5hYmxlZCkgewotICAgICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+aW5z
cGVjdChvYmplY3RUb0luc3BlY3QsIGhpbnRzKTsKKyAgICAgICAgbV9mcm9udGVuZERpc3BhdGNo
ZXItPmluc3BlY3QoV1RGTW92ZShvYmplY3QpLCBXVEZNb3ZlKGhpbnRzKSk7CiAgICAgICAgIG1f
cGVuZGluZ0luc3BlY3REYXRhLmZpcnN0ID0gbnVsbHB0cjsKICAgICAgICAgbV9wZW5kaW5nSW5z
cGVjdERhdGEuc2Vjb25kID0gbnVsbHB0cjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IG1fcGVuZGluZ0luc3BlY3REYXRhLmZpcnN0ID0gb2JqZWN0VG9JbnNwZWN0OwotICAgIG1fcGVu
ZGluZ0luc3BlY3REYXRhLnNlY29uZCA9IGhpbnRzOworICAgIG1fcGVuZGluZ0luc3BlY3REYXRh
LmZpcnN0ID0gV1RGTW92ZShvYmplY3QpOworICAgIG1fcGVuZGluZ0luc3BlY3REYXRhLnNlY29u
ZCA9IFdURk1vdmUoaGludHMpOwogfQogCiB2b2lkIEluc3BlY3RvckFnZW50OjpldmFsdWF0ZUZv
clRlc3RJbkZyb250ZW5kKGNvbnN0IFN0cmluZyYgc2NyaXB0KQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQWdlbnQuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckFnZW50LmgKaW5kZXgg
ODU4YzY5YWMyZWI4NmRjMTgyOGEyZjNlMTI2NzE1ODA5ZTg5ZjM1YS4uNTk0Y2VlNzE3NDA2MDU5
OWM4OTkzNmQwYzI3MzZhMTUzYWEyNzNkNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQWdlbnQuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBZ2VudC5oCkBAIC00MCwyNiArNDAs
MjQgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiBjbGFzcyBCYWNrZW5kRGlzcGF0Y2hlcjsKIGNs
YXNzIEluc3BlY3RvckVudmlyb25tZW50OwogCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsK
LQogY2xhc3MgSlNfRVhQT1JUX1BSSVZBVEUgSW5zcGVjdG9yQWdlbnQgZmluYWwgOiBwdWJsaWMg
SW5zcGVjdG9yQWdlbnRCYXNlLCBwdWJsaWMgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbnNwZWN0b3JBZ2VudCk7CiAgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgSW5zcGVjdG9yQWdlbnQoQWdlbnRD
b250ZXh0Jik7Ci0gICAgfkluc3BlY3RvckFnZW50KCkgZmluYWw7CisgICAgfkluc3BlY3RvckFn
ZW50KCk7CiAKICAgICAvLyBJbnNwZWN0b3JBZ2VudEJhc2UKLSAgICB2b2lkIGRpZENyZWF0ZUZy
b250ZW5kQW5kQmFja2VuZChGcm9udGVuZFJvdXRlciosIEJhY2tlbmREaXNwYXRjaGVyKikgZmlu
YWw7Ci0gICAgdm9pZCB3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChEaXNjb25uZWN0UmVh
c29uKSBmaW5hbDsKKyAgICB2b2lkIGRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChGcm9udGVu
ZFJvdXRlciosIEJhY2tlbmREaXNwYXRjaGVyKik7CisgICAgdm9pZCB3aWxsRGVzdHJveUZyb250
ZW5kQW5kQmFja2VuZChEaXNjb25uZWN0UmVhc29uKTsKIAogICAgIC8vIEluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVySGFuZGxlcgotICAgIHZvaWQgZW5hYmxlKEVycm9yU3RyaW5nJikgZmluYWw7
Ci0gICAgdm9pZCBkaXNhYmxlKEVycm9yU3RyaW5nJikgZmluYWw7Ci0gICAgdm9pZCBpbml0aWFs
aXplZChFcnJvclN0cmluZyYpIGZpbmFsOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZv
aWQ+IGVuYWJsZSgpOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGRpc2FibGUo
KTsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBpbml0aWFsaXplZCgpOwogCiAg
ICAgLy8gQ29tbWFuZExpbmVBUEkKLSAgICB2b2lkIGluc3BlY3QoUmVmUHRyPFByb3RvY29sOjpS
dW50aW1lOjpSZW1vdGVPYmplY3Q+JiYgb2JqZWN0VG9JbnNwZWN0LCBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiYmIGhpbnRzKTsKKyAgICB2b2lkIGluc3BlY3QoUmVmPFByb3RvY29sOjpSdW50aW1lOjpS
ZW1vdGVPYmplY3Q+JiYsIFJlZjxKU09OOjpPYmplY3Q+JiYgaGludHMpOwogCiAgICAgdm9pZCBl
dmFsdWF0ZUZvclRlc3RJbkZyb250ZW5kKGNvbnN0IFN0cmluZyYgc2NyaXB0KTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQXVk
aXRBZ2VudC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNw
ZWN0b3JBdWRpdEFnZW50LmNwcAppbmRleCAwMGIxZWNjMWFmNDgwNzBlZmVkYzc2NmEzYmE2ZmY1
YjZmNGJhNzAwLi4yZjlmOGYwNTljYjEzOTEzYWZhMzBmNjQ5NzdlMDMzYjUzNGM5NDkzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JB
dWRpdEFnZW50LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50
cy9JbnNwZWN0b3JBdWRpdEFnZW50LmNwcApAQCAtNTcsNDEgKzU3LDQxIEBAIHZvaWQgSW5zcGVj
dG9yQXVkaXRBZ2VudDo6d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoRGlzY29ubmVjdFJl
YXNvbikKIHsKIH0KIAotdm9pZCBJbnNwZWN0b3JBdWRpdEFnZW50OjpzZXR1cChFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcsIGNvbnN0IGludCogZXhlY3V0aW9uQ29udGV4dElkKQorUHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yQXVkaXRBZ2VudDo6c2V0dXAoT3B0aW9uYWw8
UHJvdG9jb2w6OlJ1bnRpbWU6OkV4ZWN1dGlvbkNvbnRleHRJZD4mJiBleGVjdXRpb25Db250ZXh0
SWQpCiB7Ci0gICAgaWYgKGhhc0FjdGl2ZUF1ZGl0KCkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcg
PSAiTXVzdCBjYWxsIHRlYXJkb3duIGJlZm9yZSBjYWxsaW5nIHNldHVwIGFnYWluIl9zOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQorICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmlu
ZzsKIAotICAgIEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0ID0gaW5qZWN0ZWRTY3JpcHRG
b3JFdmFsKGVycm9yU3RyaW5nLCBleGVjdXRpb25Db250ZXh0SWQpOworICAgIGlmIChoYXNBY3Rp
dmVBdWRpdCgpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk11c3QgY2FsbCB0ZWFy
ZG93biBiZWZvcmUgY2FsbGluZyBzZXR1cCBhZ2FpbiJfcyk7CisKKyAgICBJbmplY3RlZFNjcmlw
dCBpbmplY3RlZFNjcmlwdCA9IGluamVjdGVkU2NyaXB0Rm9yRXZhbChlcnJvclN0cmluZywgV1RG
TW92ZShleGVjdXRpb25Db250ZXh0SWQpKTsKICAgICBpZiAoaW5qZWN0ZWRTY3JpcHQuaGFzTm9W
YWx1ZSgpKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChl
cnJvclN0cmluZyk7CiAKICAgICBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBp
bmplY3RlZFNjcmlwdC5nbG9iYWxPYmplY3QoKTsKLSAgICBpZiAoIWdsb2JhbE9iamVjdCkgewot
ICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIGV4ZWN1dGlvbiBzdGF0ZSBvZiBpbmplY3Rl
ZCBzY3JpcHQgZm9yIGdpdmVuIGV4ZWN1dGlvbkNvbnRleHRJZCJfczsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KKyAgICBpZiAoIWdsb2JhbE9iamVjdCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4
cGVjdGVkKCJNaXNzaW5nIGV4ZWN1dGlvbiBzdGF0ZSBvZiBpbmplY3RlZCBzY3JpcHQgZm9yIGdp
dmVuIGV4ZWN1dGlvbkNvbnRleHRJZCJfcyk7CiAKICAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3Qt
PnZtKCk7CiAKICAgICBKU0M6OkpTTG9ja0hvbGRlciBsb2NrKGdsb2JhbE9iamVjdCk7CiAKICAg
ICBtX2luamVjdGVkV2ViSW5zcGVjdG9yQXVkaXRWYWx1ZS5zZXQodm0sIGNvbnN0cnVjdEVtcHR5
T2JqZWN0KGdsb2JhbE9iamVjdCkpOwotICAgIGlmICghbV9pbmplY3RlZFdlYkluc3BlY3RvckF1
ZGl0VmFsdWUpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiVW5hYmxlIHRvIGNvbnN0cnVjdCBp
bmplY3RlZCBXZWJJbnNwZWN0b3JBdWRpdCBvYmplY3QuIl9zOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQorICAgIGlmICghbV9pbmplY3RlZFdlYkluc3BlY3RvckF1ZGl0VmFsdWUpCisgICAgICAg
IHJldHVybiBtYWtlVW5leHBlY3RlZCgiVW5hYmxlIHRvIGNvbnN0cnVjdCBpbmplY3RlZCBXZWJJ
bnNwZWN0b3JBdWRpdCBvYmplY3QuIl9zKTsKIAogICAgIHBvcHVsYXRlQXVkaXRPYmplY3QoZ2xv
YmFsT2JqZWN0LCBtX2luamVjdGVkV2ViSW5zcGVjdG9yQXVkaXRWYWx1ZSk7CisKKyAgICByZXR1
cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckF1ZGl0QWdlbnQ6OnJ1bihFcnJvclN0cmluZyYg
ZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgdGVzdCwgY29uc3QgaW50KiBleGVjdXRpb25Db250
ZXh0SWQsIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0LCBP
cHRpb25hbDxib29sPiYgd2FzVGhyb3duKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8c3RkOjp0
dXBsZTxSZWY8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4sIE9wdGlvbmFsPGJvb2w+
IC8qIHdhc1Rocm93biAqLz4+IEluc3BlY3RvckF1ZGl0QWdlbnQ6OnJ1bihjb25zdCBTdHJpbmcm
IHRlc3QsIE9wdGlvbmFsPFByb3RvY29sOjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0SWQ+JiYg
ZXhlY3V0aW9uQ29udGV4dElkKQogewotICAgIEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0
ID0gaW5qZWN0ZWRTY3JpcHRGb3JFdmFsKGVycm9yU3RyaW5nLCBleGVjdXRpb25Db250ZXh0SWQp
OworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKworICAgIEluamVjdGVk
U2NyaXB0IGluamVjdGVkU2NyaXB0ID0gaW5qZWN0ZWRTY3JpcHRGb3JFdmFsKGVycm9yU3RyaW5n
LCBXVEZNb3ZlKGV4ZWN1dGlvbkNvbnRleHRJZCkpOwogICAgIGlmIChpbmplY3RlZFNjcmlwdC5o
YXNOb1ZhbHVlKCkpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVj
dGVkKGVycm9yU3RyaW5nKTsKIAogICAgIFN0cmluZ0J1aWxkZXIgZnVuY3Rpb25TdHJpbmc7CiAg
ICAgZnVuY3Rpb25TdHJpbmcuYXBwZW5kTGl0ZXJhbCgiKGZ1bmN0aW9uKFdlYkluc3BlY3RvckF1
ZGl0KSB7IFwidXNlIHN0cmljdFwiOyByZXR1cm4gZXZhbChgKCIpOwpAQCAtMTAzLDYgKzEwMyw4
IEBAIHZvaWQgSW5zcGVjdG9yQXVkaXRBZ2VudDo6cnVuKEVycm9yU3RyaW5nJiBlcnJvclN0cmlu
ZywgY29uc3QgU3RyaW5nJiB0ZXN0LCBjb25zCiAgICAgaWYgKG1faW5qZWN0ZWRXZWJJbnNwZWN0
b3JBdWRpdFZhbHVlKQogICAgICAgICBvcHRpb25zLmFyZ3MgPSB7IG1faW5qZWN0ZWRXZWJJbnNw
ZWN0b3JBdWRpdFZhbHVlLmdldCgpIH07CiAKKyAgICBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6
OlJlbW90ZU9iamVjdD4gcmVzdWx0OworICAgIE9wdGlvbmFsPGJvb2w+IHdhc1Rocm93bjsKICAg
ICBPcHRpb25hbDxpbnQ+IHNhdmVkUmVzdWx0SW5kZXg7CiAKICAgICBKU0M6OkRlYnVnZ2VyOjpU
ZW1wb3JhcmlseURpc2FibGVFeGNlcHRpb25CcmVha3BvaW50cyB0ZW1wb3JhcmlseURpc2FibGVF
eGNlcHRpb25CcmVha3BvaW50cyhtX2RlYnVnZ2VyKTsKQEAgLTExMywxNiArMTE1LDIxIEBAIHZv
aWQgSW5zcGVjdG9yQXVkaXRBZ2VudDo6cnVuKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29u
c3QgU3RyaW5nJiB0ZXN0LCBjb25zCiAgICAgaW5qZWN0ZWRTY3JpcHQuZXhlY3V0ZShlcnJvclN0
cmluZywgZnVuY3Rpb25TdHJpbmcudG9TdHJpbmcoKSwgV1RGTW92ZShvcHRpb25zKSwgcmVzdWx0
LCB3YXNUaHJvd24sIHNhdmVkUmVzdWx0SW5kZXgpOwogCiAgICAgdW5tdXRlQ29uc29sZSgpOwor
CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0
cmluZyk7CisKKyAgICByZXR1cm4geyB7IHJlc3VsdC5yZWxlYXNlTm9uTnVsbCgpLCBXVEZNb3Zl
KHdhc1Rocm93bikgfSB9OwogfQogCi12b2lkIEluc3BlY3RvckF1ZGl0QWdlbnQ6OnRlYXJkb3du
KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+
IEluc3BlY3RvckF1ZGl0QWdlbnQ6OnRlYXJkb3duKCkKIHsKLSAgICBpZiAoIWhhc0FjdGl2ZUF1
ZGl0KCkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiTXVzdCBjYWxsIHNldHVwIGJlZm9yZSBj
YWxsaW5nIHRlYXJkb3duIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghaGFz
QWN0aXZlQXVkaXQoKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJNdXN0IGNhbGwg
c2V0dXAgYmVmb3JlIGNhbGxpbmcgdGVhcmRvd24iX3MpOwogCiAgICAgbV9pbmplY3RlZFdlYklu
c3BlY3RvckF1ZGl0VmFsdWUuY2xlYXIoKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKIGJvb2wg
SW5zcGVjdG9yQXVkaXRBZ2VudDo6aGFzQWN0aXZlQXVkaXQoKSBjb25zdApAQCAtMTM5LDcgKzE0
Niw3IEBAIHZvaWQgSW5zcGVjdG9yQXVkaXRBZ2VudDo6cG9wdWxhdGVBdWRpdE9iamVjdChKU0M6
OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsCiAgICAgSlNDOjpWTSYgdm0gPSBnbG9iYWxP
YmplY3QtPnZtKCk7CiAgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9jayh2bSk7CiAKLSAgICBhdWRp
dE9iamVjdC0+cHV0RGlyZWN0KHZtLCBKU0M6OklkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sICJW
ZXJzaW9uIiksIEpTQzo6SlNWYWx1ZShJbnNwZWN0b3I6OlByb3RvY29sOjpBdWRpdDo6VkVSU0lP
TikpOworICAgIGF1ZGl0T2JqZWN0LT5wdXREaXJlY3Qodm0sIEpTQzo6SWRlbnRpZmllcjo6ZnJv
bVN0cmluZyh2bSwgIlZlcnNpb24iKSwgSlNDOjpKU1ZhbHVlKFByb3RvY29sOjpBdWRpdDo6VkVS
U0lPTikpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckF1ZGl0QWdlbnQuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckF1ZGl0QWdl
bnQuaAppbmRleCA1YjZkOGFhYjcyMjYzZjE4YWE2NDEwNzg1YzAxYzliYThjNGQzMGY4Li5iZjUw
NmMzNmQyZGZmM2Y2ZmNhNTk5ZjY3ZTU4NTRhMjY4YTdiMWQ1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBdWRpdEFnZW50LmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQXVkaXRB
Z2VudC5oCkBAIC00MCw3ICs0MCw2IEBAIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCiBjbGFzcyBJ
bmplY3RlZFNjcmlwdDsKIGNsYXNzIEluamVjdGVkU2NyaXB0TWFuYWdlcjsKLXR5cGVkZWYgU3Ry
aW5nIEVycm9yU3RyaW5nOwogCiBjbGFzcyBKU19FWFBPUlRfUFJJVkFURSBJbnNwZWN0b3JBdWRp
dEFnZW50IDogcHVibGljIEluc3BlY3RvckFnZW50QmFzZSwgcHVibGljIEF1ZGl0QmFja2VuZERp
c3BhdGNoZXJIYW5kbGVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbnNwZWN0b3JBdWRp
dEFnZW50KTsKQEAgLTUzLDkgKzUyLDkgQEAgcHVibGljOgogICAgIHZvaWQgd2lsbERlc3Ryb3lG
cm9udGVuZEFuZEJhY2tlbmQoRGlzY29ubmVjdFJlYXNvbikgZmluYWw7CiAKICAgICAvLyBBdWRp
dEJhY2tlbmREaXNwYXRjaGVySGFuZGxlcgotICAgIHZvaWQgc2V0dXAoRXJyb3JTdHJpbmcmLCBj
b25zdCBpbnQqIGV4ZWN1dGlvbkNvbnRleHRJZCkgZmluYWw7Ci0gICAgdm9pZCBydW4oRXJyb3JT
dHJpbmcmLCBjb25zdCBTdHJpbmcmIHRlc3QsIGNvbnN0IGludCogZXhlY3V0aW9uQ29udGV4dElk
LCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3VsdCwgT3B0aW9u
YWw8Ym9vbD4mIHdhc1Rocm93bikgZmluYWw7Ci0gICAgdm9pZCB0ZWFyZG93bihFcnJvclN0cmlu
ZyYpIGZpbmFsOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHNldHVwKE9wdGlv
bmFsPFByb3RvY29sOjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0SWQ+JiYpIGZpbmFsOworICAg
IFByb3RvY29sOjpFcnJvclN0cmluZ09yPHN0ZDo6dHVwbGU8UmVmPFByb3RvY29sOjpSdW50aW1l
OjpSZW1vdGVPYmplY3Q+LCBPcHRpb25hbDxib29sPiAvKiB3YXNUaHJvd24gKi8+PiBydW4oY29u
c3QgU3RyaW5nJiB0ZXN0LCBPcHRpb25hbDxQcm90b2NvbDo6UnVudGltZTo6RXhlY3V0aW9uQ29u
dGV4dElkPiYmKSBmaW5hbDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiB0ZWFy
ZG93bigpIGZpbmFsOwogCiAgICAgYm9vbCBoYXNBY3RpdmVBdWRpdCgpIGNvbnN0OwogCkBAIC02
NCw3ICs2Myw3IEBAIHByb3RlY3RlZDoKIAogICAgIEluamVjdGVkU2NyaXB0TWFuYWdlciYgaW5q
ZWN0ZWRTY3JpcHRNYW5hZ2VyKCkgeyByZXR1cm4gbV9pbmplY3RlZFNjcmlwdE1hbmFnZXI7IH0K
IAotICAgIHZpcnR1YWwgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHRGb3JFdmFsKEVycm9y
U3RyaW5nJiwgY29uc3QgaW50KiBleGVjdXRpb25Db250ZXh0SWQpID0gMDsKKyAgICB2aXJ0dWFs
IEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0Rm9yRXZhbChQcm90b2NvbDo6RXJyb3JTdHJp
bmcmLCBPcHRpb25hbDxQcm90b2NvbDo6UnVudGltZTo6RXhlY3V0aW9uQ29udGV4dElkPiYmKSA9
IDA7CiAKICAgICB2aXJ0dWFsIHZvaWQgcG9wdWxhdGVBdWRpdE9iamVjdChKU0M6OkpTR2xvYmFs
T2JqZWN0KiwgSlNDOjpTdHJvbmc8SlNDOjpKU09iamVjdD4mIGF1ZGl0T2JqZWN0KTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9y
Q29uc29sZUFnZW50LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRz
L0luc3BlY3RvckNvbnNvbGVBZ2VudC5jcHAKaW5kZXggMTA1ZmU2ZmM2YzIyMDhlZjc2MzcxZWFl
ZGRiZmE0NzMxZmJmYjY1NC4uMTNiNjIzNGQxZjUzMjg1MGUzMDA1Mjc5NzNjMjE1YjcyZTM2YWUx
NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5z
cGVjdG9yQ29uc29sZUFnZW50LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL2FnZW50cy9JbnNwZWN0b3JDb25zb2xlQWdlbnQuY3BwCkBAIC01Myw4ICs1Myw3IEBAIHZv
aWQgSW5zcGVjdG9yQ29uc29sZUFnZW50OjpkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoRnJv
bnRlbmRSb3V0ZXIqLCBCYWNrZW5kCiAKIHZvaWQgSW5zcGVjdG9yQ29uc29sZUFnZW50Ojp3aWxs
RGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChEaXNjb25uZWN0UmVhc29uKQogewotICAgIFN0cmlu
ZyBlcnJvclN0cmluZzsKLSAgICBkaXNhYmxlKGVycm9yU3RyaW5nKTsKKyAgICBkaXNhYmxlKCk7
CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ29uc29sZUFnZW50OjpkaXNjYXJkVmFsdWVzKCkKQEAgLTYz
LDEwICs2MiwxMCBAQCB2b2lkIEluc3BlY3RvckNvbnNvbGVBZ2VudDo6ZGlzY2FyZFZhbHVlcygp
CiAgICAgbV9leHBpcmVkQ29uc29sZU1lc3NhZ2VDb3VudCA9IDA7CiB9CiAKLXZvaWQgSW5zcGVj
dG9yQ29uc29sZUFnZW50OjplbmFibGUoRXJyb3JTdHJpbmcmKQorUHJvdG9jb2w6OkVycm9yU3Ry
aW5nT3I8dm9pZD4gSW5zcGVjdG9yQ29uc29sZUFnZW50OjplbmFibGUoKQogewogICAgIGlmICht
X2VuYWJsZWQpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIG1f
ZW5hYmxlZCA9IHRydWU7CiAKQEAgLTgwLDE3ICs3OSwyMSBAQCB2b2lkIEluc3BlY3RvckNvbnNv
bGVBZ2VudDo6ZW5hYmxlKEVycm9yU3RyaW5nJikKIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbWVzc2FnZXMuc2l6ZSgpOyArK2kpCiAgICAgICAgIG1lc3NhZ2VzW2ldLT5hZGRUb0Zyb250
ZW5kKCptX2Zyb250ZW5kRGlzcGF0Y2hlciwgbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIsIGZhbHNl
KTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ29uc29sZUFnZW50Ojpk
aXNhYmxlKEVycm9yU3RyaW5nJikKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3Bl
Y3RvckNvbnNvbGVBZ2VudDo6ZGlzYWJsZSgpCiB7CiAgICAgaWYgKCFtX2VuYWJsZWQpCi0gICAg
ICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIG1fZW5hYmxlZCA9IGZhbHNl
OworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OmNs
ZWFyTWVzc2FnZXMoRXJyb3JTdHJpbmcmKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4g
SW5zcGVjdG9yQ29uc29sZUFnZW50OjpjbGVhck1lc3NhZ2VzKCkKIHsKICAgICBtX2NvbnNvbGVN
ZXNzYWdlcy5jbGVhcigpOwogICAgIG1fZXhwaXJlZENvbnNvbGVNZXNzYWdlQ291bnQgPSAwOwpA
QCAtOTksNiArMTAyLDggQEAgdm9pZCBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OmNsZWFyTWVzc2Fn
ZXMoRXJyb3JTdHJpbmcmKQogCiAgICAgaWYgKG1fZW5hYmxlZCkKICAgICAgICAgbV9mcm9udGVu
ZERpc3BhdGNoZXItPm1lc3NhZ2VzQ2xlYXJlZCgpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAog
Ym9vbCBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OmRldmVsb3BlckV4dHJhc0VuYWJsZWQoKSBjb25z
dApAQCAtMTA4LDggKzExMyw3IEBAIGJvb2wgSW5zcGVjdG9yQ29uc29sZUFnZW50OjpkZXZlbG9w
ZXJFeHRyYXNFbmFibGVkKCkgY29uc3QKIAogdm9pZCBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OnJl
c2V0KCkKIHsKLSAgICBFcnJvclN0cmluZyBpZ25vcmVkOwotICAgIGNsZWFyTWVzc2FnZXMoaWdu
b3JlZCk7CisgICAgY2xlYXJNZXNzYWdlcygpOwogCiAgICAgbV90aW1lcy5jbGVhcigpOwogICAg
IG1fY291bnRzLmNsZWFyKCk7CkBAIC0xMTcsMTAgKzEyMSw4IEBAIHZvaWQgSW5zcGVjdG9yQ29u
c29sZUFnZW50OjpyZXNldCgpCiAKIHZvaWQgSW5zcGVjdG9yQ29uc29sZUFnZW50OjphZGRNZXNz
YWdlVG9Db25zb2xlKHN0ZDo6dW5pcXVlX3B0cjxDb25zb2xlTWVzc2FnZT4gbWVzc2FnZSkKIHsK
LSAgICBpZiAobWVzc2FnZS0+dHlwZSgpID09IE1lc3NhZ2VUeXBlOjpDbGVhcikgewotICAgICAg
ICBFcnJvclN0cmluZyBpZ25vcmVkOwotICAgICAgICBjbGVhck1lc3NhZ2VzKGlnbm9yZWQpOwot
ICAgIH0KKyAgICBpZiAobWVzc2FnZS0+dHlwZSgpID09IE1lc3NhZ2VUeXBlOjpDbGVhcikKKyAg
ICAgICAgY2xlYXJNZXNzYWdlcygpOwogCiAgICAgYWRkQ29uc29sZU1lc3NhZ2UoV1RGTW92ZSht
ZXNzYWdlKSk7CiB9CkBAIC0xOTEsMTIgKzE5MywxMiBAQCB2b2lkIEluc3BlY3RvckNvbnNvbGVB
Z2VudDo6dGFrZUhlYXBTbmFwc2hvdChjb25zdCBTdHJpbmcmIHRpdGxlKQogICAgIGlmICghbV9o
ZWFwQWdlbnQpCiAgICAgICAgIHJldHVybjsKIAotICAgIEVycm9yU3RyaW5nIGlnbm9yZWQ7Ci0g
ICAgZG91YmxlIHRpbWVzdGFtcDsKLSAgICBTdHJpbmcgc25hcHNob3REYXRhOwotICAgIG1faGVh
cEFnZW50LT5zbmFwc2hvdChpZ25vcmVkLCAmdGltZXN0YW1wLCAmc25hcHNob3REYXRhKTsKKyAg
ICBhdXRvIHJlc3VsdCA9IG1faGVhcEFnZW50LT5zbmFwc2hvdCgpOworICAgIGlmICghcmVzdWx0
KQorICAgICAgICByZXR1cm47CiAKLSAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+aGVhcFNuYXBz
aG90KHRpbWVzdGFtcCwgc25hcHNob3REYXRhLCB0aXRsZS5pc0VtcHR5KCkgPyBudWxscHRyIDog
JnRpdGxlKTsKKyAgICBhdXRvIFt0aW1lc3RhbXAsIHNuYXBzaG90RGF0YV0gPSBXVEZNb3ZlKHJl
c3VsdC52YWx1ZSgpKTsKKyAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+aGVhcFNuYXBzaG90KHRp
bWVzdGFtcCwgc25hcHNob3REYXRhLCB0aXRsZSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ29uc29s
ZUFnZW50Ojpjb3VudChKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFN0
cmluZyYgbGFiZWwpCkBAIC0yNTYsMTUgKzI1OCwxNSBAQCB2b2lkIEluc3BlY3RvckNvbnNvbGVB
Z2VudDo6YWRkQ29uc29sZU1lc3NhZ2Uoc3RkOjp1bmlxdWVfcHRyPENvbnNvbGVNZXNzYWdlPiBj
bwogICAgIH0KIH0KIAotdm9pZCBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OmdldExvZ2dpbmdDaGFu
bmVscyhFcnJvclN0cmluZyYsIFJlZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpDb25zb2xl
OjpDaGFubmVsPj4mIGNoYW5uZWxzKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEpTT046
OkFycmF5T2Y8UHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWw+Pj4gSW5zcGVjdG9yQ29uc29sZUFn
ZW50OjpnZXRMb2dnaW5nQ2hhbm5lbHMoKQogewogICAgIC8vIERlZmF1bHQgaW1wbGVtZW50YXRp
b24gaGFzIG5vIGxvZ2dpbmcgY2hhbm5lbHMuCi0gICAgY2hhbm5lbHMgPSBKU09OOjpBcnJheU9m
PFByb3RvY29sOjpDb25zb2xlOjpDaGFubmVsPjo6Y3JlYXRlKCk7CisgICAgcmV0dXJuIEpTT046
OkFycmF5T2Y8UHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWw+OjpjcmVhdGUoKTsKIH0KIAotdm9p
ZCBJbnNwZWN0b3JDb25zb2xlQWdlbnQ6OnNldExvZ2dpbmdDaGFubmVsTGV2ZWwoRXJyb3JTdHJp
bmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKQorUHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yQ29uc29sZUFnZW50OjpzZXRMb2dnaW5nQ2hh
bm5lbExldmVsKFByb3RvY29sOjpDb25zb2xlOjpDaGFubmVsU291cmNlLCBQcm90b2NvbDo6Q29u
c29sZTo6Q2hhbm5lbExldmVsKQogewotICAgIGVycm9yU3RyaW5nID0gIk5vdCBzdXBwb3J0ZWQi
X3M7CisgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJOb3Qgc3VwcG9ydGVkIl9zKTsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDb25zb2xlQWdlbnQuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNvbnNvbGVBZ2VudC5oCmluZGV4
IDc4Y2FmMWFkMDhhZTU3YjFlMDc4NWM5YWRkNTE2NzUzNmFmYmYyOTYuLmVkOGUxZjY5OWE1ZDBj
OTFjZDA1NjY5MWE3ZGIyMTk4MGYyMzVkMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNvbnNvbGVBZ2VudC5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNvbnNvbGVBZ2VudC5o
CkBAIC00Niw3ICs0Niw2IEBAIGNsYXNzIEluamVjdGVkU2NyaXB0TWFuYWdlcjsKIGNsYXNzIElu
c3BlY3RvckhlYXBBZ2VudDsKIGNsYXNzIFNjcmlwdEFyZ3VtZW50czsKIGNsYXNzIFNjcmlwdENh
bGxTdGFjazsKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwogCiBjbGFzcyBKU19FWFBPUlRf
UFJJVkFURSBJbnNwZWN0b3JDb25zb2xlQWdlbnQgOiBwdWJsaWMgSW5zcGVjdG9yQWdlbnRCYXNl
LCBwdWJsaWMgQ29uc29sZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7CiAgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoSW5zcGVjdG9yQ29uc29sZUFnZW50KTsKQEAgLTYxLDExICs2MCwxMSBAQCBw
dWJsaWM6CiAgICAgdm9pZCBkaXNjYXJkVmFsdWVzKCkgZmluYWw7CiAKICAgICAvLyBDb25zb2xl
QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyCi0gICAgdm9pZCBlbmFibGUoRXJyb3JTdHJpbmcmKSBm
aW5hbDsKLSAgICB2b2lkIGRpc2FibGUoRXJyb3JTdHJpbmcmKSBmaW5hbDsKLSAgICB2b2lkIGNs
ZWFyTWVzc2FnZXMoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2b2lkIGdldExvZ2dpbmdD
aGFubmVscyhFcnJvclN0cmluZyYsIFJlZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpDb25z
b2xlOjpDaGFubmVsPj4mKSBvdmVycmlkZTsKLSAgICB2b2lkIHNldExvZ2dpbmdDaGFubmVsTGV2
ZWwoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGNoYW5uZWwsIGNvbnN0IFN0cmluZyYgbGV2
ZWwpIG92ZXJyaWRlOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGVuYWJsZSgp
IGZpbmFsOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGRpc2FibGUoKSBmaW5h
bDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBjbGVhck1lc3NhZ2VzKCkgb3Zl
cnJpZGU7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEpTT046OkFycmF5T2Y8UHJv
dG9jb2w6OkNvbnNvbGU6OkNoYW5uZWw+Pj4gZ2V0TG9nZ2luZ0NoYW5uZWxzKCkgb3ZlcnJpZGU7
CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc2V0TG9nZ2luZ0NoYW5uZWxMZXZl
bChQcm90b2NvbDo6Q29uc29sZTo6Q2hhbm5lbFNvdXJjZSwgUHJvdG9jb2w6OkNvbnNvbGU6OkNo
YW5uZWxMZXZlbCkgb3ZlcnJpZGU7CiAKICAgICB2b2lkIHNldEhlYXBBZ2VudChJbnNwZWN0b3JI
ZWFwQWdlbnQqIGFnZW50KSB7IG1faGVhcEFnZW50ID0gYWdlbnQ7IH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRGVidWdnZXJB
Z2VudC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0
b3JEZWJ1Z2dlckFnZW50LmNwcAppbmRleCAxM2ZjMmM1M2I1YWM0NjVlNmUzZDY2YWJlMDU1YzBl
ZTZkNGRjMDcwLi40MWY0YmE0MjdlYTRmNzlkYzE0NDdmZWE1OTY0YWQ4MDYzY2JkZjcyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JE
ZWJ1Z2dlckFnZW50LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2Fn
ZW50cy9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcApAQCAtNjQsMjUgKzY0LDI1IEBAIHN0YXRp
YyBib29sIGlzV2ViS2l0SW5qZWN0ZWRTY3JpcHQoY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwpCiAg
ICAgcmV0dXJuIHNvdXJjZVVSTC5zdGFydHNXaXRoKCJfX0luamVjdGVkU2NyaXB0XyIpICYmIHNv
dXJjZVVSTC5lbmRzV2l0aCgiLmpzIik7CiB9CiAKLXN0YXRpYyBPcHRpb25hbDxKU0M6OkJyZWFr
cG9pbnQ6OkFjdGlvbjo6VHlwZT4gYnJlYWtwb2ludEFjdGlvblR5cGVGb3JTdHJpbmcoRXJyb3JT
dHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHR5cGVTdHJpbmcpCitzdGF0aWMgT3B0
aW9uYWw8SlNDOjpCcmVha3BvaW50OjpBY3Rpb246OlR5cGU+IGJyZWFrcG9pbnRBY3Rpb25UeXBl
Rm9yU3RyaW5nKFByb3RvY29sOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmlu
ZyYgdHlwZVN0cmluZykKIHsKLSAgICBhdXRvIHR5cGUgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpJ
bnNwZWN0b3JIZWxwZXJzOjpwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90
b2NvbDo6RGVidWdnZXI6OkJyZWFrcG9pbnRBY3Rpb246OlR5cGU+KHR5cGVTdHJpbmcpOworICAg
IGF1dG8gdHlwZSA9IFByb3RvY29sOjpIZWxwZXJzOjpwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8
UHJvdG9jb2w6OkRlYnVnZ2VyOjpCcmVha3BvaW50QWN0aW9uOjpUeXBlPih0eXBlU3RyaW5nKTsK
ICAgICBpZiAoIXR5cGUpIHsKICAgICAgICAgZXJyb3JTdHJpbmcgPSBtYWtlU3RyaW5nKCJVbmtu
b3duIGJyZWFrcG9pbnQgYWN0aW9uIHR5cGU6ICJfcywgdHlwZVN0cmluZyk7CiAgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CiAgICAgfQogCiAgICAgc3dpdGNoICgqdHlwZSkgewotICAgIGNh
c2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OkJyZWFrcG9pbnRBY3Rpb246OlR5cGU6
OkxvZzoKKyAgICBjYXNlIFByb3RvY29sOjpEZWJ1Z2dlcjo6QnJlYWtwb2ludEFjdGlvbjo6VHlw
ZTo6TG9nOgogICAgICAgICByZXR1cm4gSlNDOjpCcmVha3BvaW50OjpBY3Rpb246OlR5cGU6Okxv
ZzsKIAotICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OkJyZWFrcG9pbnRB
Y3Rpb246OlR5cGU6OkV2YWx1YXRlOgorICAgIGNhc2UgUHJvdG9jb2w6OkRlYnVnZ2VyOjpCcmVh
a3BvaW50QWN0aW9uOjpUeXBlOjpFdmFsdWF0ZToKICAgICAgICAgcmV0dXJuIEpTQzo6QnJlYWtw
b2ludDo6QWN0aW9uOjpUeXBlOjpFdmFsdWF0ZTsKIAotICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90
b2NvbDo6RGVidWdnZXI6OkJyZWFrcG9pbnRBY3Rpb246OlR5cGU6OlNvdW5kOgorICAgIGNhc2Ug
UHJvdG9jb2w6OkRlYnVnZ2VyOjpCcmVha3BvaW50QWN0aW9uOjpUeXBlOjpTb3VuZDoKICAgICAg
ICAgcmV0dXJuIEpTQzo6QnJlYWtwb2ludDo6QWN0aW9uOjpUeXBlOjpTb3VuZDsKIAotICAgIGNh
c2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OkJyZWFrcG9pbnRBY3Rpb246OlR5cGU6
OlByb2JlOgorICAgIGNhc2UgUHJvdG9jb2w6OkRlYnVnZ2VyOjpCcmVha3BvaW50QWN0aW9uOjpU
eXBlOjpQcm9iZToKICAgICAgICAgcmV0dXJuIEpTQzo6QnJlYWtwb2ludDo6QWN0aW9uOjpUeXBl
OjpQcm9iZTsKICAgICB9CiAKQEAgLTkxLDMwICs5MSwyOSBAQCBzdGF0aWMgT3B0aW9uYWw8SlND
OjpCcmVha3BvaW50OjpBY3Rpb246OlR5cGU+IGJyZWFrcG9pbnRBY3Rpb25UeXBlRm9yU3RyaW5n
KEVycgogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLXN0YXRpYyBUIHBhcnNlQnJlYWtwb2lu
dE9wdGlvbnMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBKU09OOjpPYmplY3QqIG9w
dGlvbnNQYXlsb2FkLCBGdW5jdGlvbjxUKGNvbnN0IFN0cmluZyYsIEpTQzo6QnJlYWtwb2ludDo6
QWN0aW9uc1ZlY3RvciYmLCBib29sLCBzaXplX3QpPiBjYWxsYmFjaykKK3N0YXRpYyBUIHBhcnNl
QnJlYWtwb2ludE9wdGlvbnMoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgUmVm
UHRyPEpTT046Ok9iamVjdD4mJiBvcHRpb25zLCBGdW5jdGlvbjxUKGNvbnN0IFN0cmluZyYsIEpT
Qzo6QnJlYWtwb2ludDo6QWN0aW9uc1ZlY3RvciYmLCBib29sLCBzaXplX3QpPiBjYWxsYmFjaykK
IHsKICAgICBTdHJpbmcgY29uZGl0aW9uOwogICAgIEpTQzo6QnJlYWtwb2ludDo6QWN0aW9uc1Zl
Y3RvciBhY3Rpb25zOwogICAgIGJvb2wgYXV0b0NvbnRpbnVlID0gZmFsc2U7CiAgICAgc2l6ZV90
IGlnbm9yZUNvdW50ID0gMDsKIAotICAgIGlmIChvcHRpb25zUGF5bG9hZCkgewotICAgICAgICBv
cHRpb25zUGF5bG9hZC0+Z2V0U3RyaW5nKCJjb25kaXRpb24iX3MsIGNvbmRpdGlvbik7CisgICAg
aWYgKG9wdGlvbnMpIHsKKyAgICAgICAgY29uZGl0aW9uID0gb3B0aW9ucy0+Z2V0U3RyaW5nKFBy
b3RvY29sOjpEZWJ1Z2dlcjo6QnJlYWtwb2ludE9wdGlvbnM6OmNvbmRpdGlvbktleSk7CiAKLSAg
ICAgICAgUmVmUHRyPEpTT046OkFycmF5PiBhY3Rpb25zUGF5bG9hZDsKLSAgICAgICAgb3B0aW9u
c1BheWxvYWQtPmdldEFycmF5KCJhY3Rpb25zIl9zLCBhY3Rpb25zUGF5bG9hZCk7CisgICAgICAg
IGF1dG8gYWN0aW9uc1BheWxvYWQgPSBvcHRpb25zLT5nZXRBcnJheShQcm90b2NvbDo6RGVidWdn
ZXI6OkJyZWFrcG9pbnRPcHRpb25zOjphY3Rpb25zS2V5KTsKICAgICAgICAgaWYgKGF1dG8gY291
bnQgPSBhY3Rpb25zUGF5bG9hZCA/IGFjdGlvbnNQYXlsb2FkLT5sZW5ndGgoKSA6IDApIHsKICAg
ICAgICAgICAgIGFjdGlvbnMucmVzZXJ2ZUNhcGFjaXR5KGNvdW50KTsKIAogICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgICAgICAgICBS
ZWZQdHI8SlNPTjo6T2JqZWN0PiBhY3Rpb25PYmplY3Q7Ci0gICAgICAgICAgICAgICAgaWYgKCFh
Y3Rpb25zUGF5bG9hZC0+Z2V0KGkpLT5hc09iamVjdChhY3Rpb25PYmplY3QpKSB7CisgICAgICAg
ICAgICAgICAgYXV0byBhY3Rpb25PYmplY3QgPSBhY3Rpb25zUGF5bG9hZC0+Z2V0KGkpLT5hc09i
amVjdCgpOworICAgICAgICAgICAgICAgIGlmICghYWN0aW9uT2JqZWN0KSB7CiAgICAgICAgICAg
ICAgICAgICAgIGVycm9yU3RyaW5nID0gIlVuZXhwZWN0ZWQgbm9uLW9iamVjdCBpdGVtIGluIGdp
dmVuIGFjdGlvbnMiX3M7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IH07CiAgICAgICAg
ICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgU3RyaW5nIGFjdGlvblR5cGVTdHJpbmc7Ci0g
ICAgICAgICAgICAgICAgaWYgKCFhY3Rpb25PYmplY3QtPmdldFN0cmluZygidHlwZSJfcywgYWN0
aW9uVHlwZVN0cmluZykpIHsKKyAgICAgICAgICAgICAgICBhdXRvIGFjdGlvblR5cGVTdHJpbmcg
PSBhY3Rpb25PYmplY3QtPmdldFN0cmluZyhQcm90b2NvbDo6RGVidWdnZXI6OkJyZWFrcG9pbnRB
Y3Rpb246OnR5cGVLZXkpOworICAgICAgICAgICAgICAgIGlmICghYWN0aW9uVHlwZVN0cmluZykg
ewogICAgICAgICAgICAgICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIHR5cGUgZm9yIGl0
ZW0gaW4gZ2l2ZW4gYWN0aW9ucyJfczsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsK
ICAgICAgICAgICAgICAgICB9CkBAIC0xMjUsMzMgKzEyNCwzMyBAQCBzdGF0aWMgVCBwYXJzZUJy
ZWFrcG9pbnRPcHRpb25zKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgSlNPTjo6T2Jq
ZWN0KiBvcAogCiAgICAgICAgICAgICAgICAgSlNDOjpCcmVha3BvaW50OjpBY3Rpb24gYWN0aW9u
KCphY3Rpb25UeXBlKTsKIAotICAgICAgICAgICAgICAgIGFjdGlvbk9iamVjdC0+Z2V0U3RyaW5n
KCJkYXRhIl9zLCBhY3Rpb24uZGF0YSk7CisgICAgICAgICAgICAgICAgYWN0aW9uLmRhdGEgPSBh
Y3Rpb25PYmplY3QtPmdldFN0cmluZyhQcm90b2NvbDo6RGVidWdnZXI6OkJyZWFrcG9pbnRBY3Rp
b246OmRhdGFLZXkpOwogCiAgICAgICAgICAgICAgICAgLy8gU3BlY2lmeWluZyBhbiBpZGVudGlm
aWVyIGlzIG9wdGlvbmFsLiBUaGV5IGFyZSB1c2VkIHRvIGNvcnJlbGF0ZSBwcm9iZSBzYW1wbGVz
CiAgICAgICAgICAgICAgICAgLy8gaW4gdGhlIGZyb250ZW5kIGFjcm9zcyBtdWx0aXBsZSBiYWNr
ZW5kIHByb2JlIGFjdGlvbnMgYW5kIHNlZ3JlZ2F0ZSBvYmplY3QgZ3JvdXBzLgotICAgICAgICAg
ICAgICAgIGFjdGlvbk9iamVjdC0+Z2V0SW50ZWdlcigiaWQiX3MsIGFjdGlvbi5pZCk7CisgICAg
ICAgICAgICAgICAgYWN0aW9uLmlkID0gYWN0aW9uT2JqZWN0LT5nZXRJbnRlZ2VyKFByb3RvY29s
OjpEZWJ1Z2dlcjo6QnJlYWtwb2ludEFjdGlvbjo6aWRLZXkpLnZhbHVlT3IoSlNDOjpub0JyZWFr
cG9pbnRBY3Rpb25JRCk7CiAKICAgICAgICAgICAgICAgICBhY3Rpb25zLmFwcGVuZChXVEZNb3Zl
KGFjdGlvbikpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgb3B0aW9uc1Bh
eWxvYWQtPmdldEJvb2xlYW4oImF1dG9Db250aW51ZSJfcywgYXV0b0NvbnRpbnVlKTsKLSAgICAg
ICAgb3B0aW9uc1BheWxvYWQtPmdldEludGVnZXIoImlnbm9yZUNvdW50Il9zLCBpZ25vcmVDb3Vu
dCk7CisgICAgICAgIGF1dG9Db250aW51ZSA9IG9wdGlvbnMtPmdldEJvb2xlYW4oUHJvdG9jb2w6
OkRlYnVnZ2VyOjpCcmVha3BvaW50T3B0aW9uczo6YXV0b0NvbnRpbnVlS2V5KS52YWx1ZU9yKGZh
bHNlKTsKKyAgICAgICAgaWdub3JlQ291bnQgPSBvcHRpb25zLT5nZXRJbnRlZ2VyKFByb3RvY29s
OjpEZWJ1Z2dlcjo6QnJlYWtwb2ludE9wdGlvbnM6Omlnbm9yZUNvdW50S2V5KS52YWx1ZU9yKDAp
OwogICAgIH0KIAogICAgIHJldHVybiBjYWxsYmFjayhjb25kaXRpb24sIFdURk1vdmUoYWN0aW9u
cyksIGF1dG9Db250aW51ZSwgaWdub3JlQ291bnQpOwogfQogCi1PcHRpb25hbDxJbnNwZWN0b3JE
ZWJ1Z2dlckFnZW50OjpQcm90b2NvbEJyZWFrcG9pbnQ+IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6
OlByb3RvY29sQnJlYWtwb2ludDo6ZnJvbVBheWxvYWQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5n
LCBKU0M6OlNvdXJjZUlEIHNvdXJjZUlELCB1bnNpZ25lZCBsaW5lTnVtYmVyLCB1bnNpZ25lZCBj
b2x1bW5OdW1iZXIsIGNvbnN0IEpTT046Ok9iamVjdCogb3B0aW9uc1BheWxvYWQpCitPcHRpb25h
bDxJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpQcm90b2NvbEJyZWFrcG9pbnQ+IEluc3BlY3RvckRl
YnVnZ2VyQWdlbnQ6OlByb3RvY29sQnJlYWtwb2ludDo6ZnJvbVBheWxvYWQoUHJvdG9jb2w6OkVy
cm9yU3RyaW5nJiBlcnJvclN0cmluZywgSlNDOjpTb3VyY2VJRCBzb3VyY2VJRCwgdW5zaWduZWQg
bGluZU51bWJlciwgdW5zaWduZWQgY29sdW1uTnVtYmVyLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYm
IG9wdGlvbnMpCiB7Ci0gICAgcmV0dXJuIHBhcnNlQnJlYWtwb2ludE9wdGlvbnM8T3B0aW9uYWw8
UHJvdG9jb2xCcmVha3BvaW50Pj4oZXJyb3JTdHJpbmcsIG9wdGlvbnNQYXlsb2FkLCBbJl0gKGNv
bnN0IFN0cmluZyYgY29uZGl0aW9uLCBKU0M6OkJyZWFrcG9pbnQ6OkFjdGlvbnNWZWN0b3ImJiBh
Y3Rpb25zLCBib29sIGF1dG9Db250aW51ZSwgc2l6ZV90IGlnbm9yZUNvdW50KSAtPiBPcHRpb25h
bDxQcm90b2NvbEJyZWFrcG9pbnQ+IHsKKyAgICByZXR1cm4gcGFyc2VCcmVha3BvaW50T3B0aW9u
czxPcHRpb25hbDxQcm90b2NvbEJyZWFrcG9pbnQ+PihlcnJvclN0cmluZywgV1RGTW92ZShvcHRp
b25zKSwgWyZdIChjb25zdCBTdHJpbmcmIGNvbmRpdGlvbiwgSlNDOjpCcmVha3BvaW50OjpBY3Rp
b25zVmVjdG9yJiYgYWN0aW9ucywgYm9vbCBhdXRvQ29udGludWUsIHNpemVfdCBpZ25vcmVDb3Vu
dCkgLT4gT3B0aW9uYWw8UHJvdG9jb2xCcmVha3BvaW50PiB7CiAgICAgICAgIHJldHVybiBQcm90
b2NvbEJyZWFrcG9pbnQoc291cmNlSUQsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlciwgY29uZGl0
aW9uLCBXVEZNb3ZlKGFjdGlvbnMpLCBhdXRvQ29udGludWUsIGlnbm9yZUNvdW50KTsKICAgICB9
KTsKIH0KIAotT3B0aW9uYWw8SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6UHJvdG9jb2xCcmVha3Bv
aW50PiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpQcm90b2NvbEJyZWFrcG9pbnQ6OmZyb21QYXls
b2FkKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiB1cmwsIGJvb2wgaXNS
ZWdleCwgdW5zaWduZWQgbGluZU51bWJlciwgdW5zaWduZWQgY29sdW1uTnVtYmVyLCBjb25zdCBK
U09OOjpPYmplY3QqIG9wdGlvbnNQYXlsb2FkKQorT3B0aW9uYWw8SW5zcGVjdG9yRGVidWdnZXJB
Z2VudDo6UHJvdG9jb2xCcmVha3BvaW50PiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpQcm90b2Nv
bEJyZWFrcG9pbnQ6OmZyb21QYXlsb2FkKFByb3RvY29sOjpFcnJvclN0cmluZyYgZXJyb3JTdHJp
bmcsIGNvbnN0IFN0cmluZyYgdXJsLCBib29sIGlzUmVnZXgsIHVuc2lnbmVkIGxpbmVOdW1iZXIs
IHVuc2lnbmVkIGNvbHVtbk51bWJlciwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBvcHRpb25zKQog
ewotICAgIHJldHVybiBwYXJzZUJyZWFrcG9pbnRPcHRpb25zPE9wdGlvbmFsPFByb3RvY29sQnJl
YWtwb2ludD4+KGVycm9yU3RyaW5nLCBvcHRpb25zUGF5bG9hZCwgWyZdIChjb25zdCBTdHJpbmcm
IGNvbmRpdGlvbiwgSlNDOjpCcmVha3BvaW50OjpBY3Rpb25zVmVjdG9yJiYgYWN0aW9ucywgYm9v
bCBhdXRvQ29udGludWUsIHNpemVfdCBpZ25vcmVDb3VudCkgLT4gT3B0aW9uYWw8UHJvdG9jb2xC
cmVha3BvaW50PiB7CisgICAgcmV0dXJuIHBhcnNlQnJlYWtwb2ludE9wdGlvbnM8T3B0aW9uYWw8
UHJvdG9jb2xCcmVha3BvaW50Pj4oZXJyb3JTdHJpbmcsIFdURk1vdmUob3B0aW9ucyksIFsmXSAo
Y29uc3QgU3RyaW5nJiBjb25kaXRpb24sIEpTQzo6QnJlYWtwb2ludDo6QWN0aW9uc1ZlY3RvciYm
IGFjdGlvbnMsIGJvb2wgYXV0b0NvbnRpbnVlLCBzaXplX3QgaWdub3JlQ291bnQpIC0+IE9wdGlv
bmFsPFByb3RvY29sQnJlYWtwb2ludD4gewogICAgICAgICByZXR1cm4gUHJvdG9jb2xCcmVha3Bv
aW50KHVybCwgaXNSZWdleCwgbGluZU51bWJlciwgY29sdW1uTnVtYmVyLCBjb25kaXRpb24sIFdU
Rk1vdmUoYWN0aW9ucyksIGF1dG9Db250aW51ZSwgaWdub3JlQ291bnQpOwogICAgIH0pOwogfQpA
QCAtMjA3LDkgKzIwNiw5IEBAIGJvb2wgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6UHJvdG9jb2xC
cmVha3BvaW50OjptYXRjaGVzU2NyaXB0VVJMKGNvbnN0IFN0cmluZyYKICAgICByZXR1cm4gbV91
cmwgPT0gc2NyaXB0VVJMOwogfQogCi1SZWZQdHI8SlNDOjpCcmVha3BvaW50PiBJbnNwZWN0b3JE
ZWJ1Z2dlckFnZW50OjpkZWJ1Z2dlckJyZWFrcG9pbnRGcm9tUGF5bG9hZChFcnJvclN0cmluZyYg
ZXJyb3JTdHJpbmcsIGNvbnN0IEpTT046Ok9iamVjdCogb3B0aW9uc1BheWxvYWQpCitSZWZQdHI8
SlNDOjpCcmVha3BvaW50PiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkZWJ1Z2dlckJyZWFrcG9p
bnRGcm9tUGF5bG9hZChQcm90b2NvbDo6RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBSZWZQdHI8
SlNPTjo6T2JqZWN0PiYmIG9wdGlvbnMpCiB7Ci0gICAgcmV0dXJuIHBhcnNlQnJlYWtwb2ludE9w
dGlvbnM8UmVmUHRyPEpTQzo6QnJlYWtwb2ludD4+KGVycm9yU3RyaW5nLCBvcHRpb25zUGF5bG9h
ZCwgW10gKGNvbnN0IFN0cmluZyYgY29uZGl0aW9uLCBKU0M6OkJyZWFrcG9pbnQ6OkFjdGlvbnNW
ZWN0b3ImJiBhY3Rpb25zLCBib29sIGF1dG9Db250aW51ZSwgc2l6ZV90IGlnbm9yZUNvdW50KSB7
CisgICAgcmV0dXJuIHBhcnNlQnJlYWtwb2ludE9wdGlvbnM8UmVmUHRyPEpTQzo6QnJlYWtwb2lu
dD4+KGVycm9yU3RyaW5nLCBXVEZNb3ZlKG9wdGlvbnMpLCBbXSAoY29uc3QgU3RyaW5nJiBjb25k
aXRpb24sIEpTQzo6QnJlYWtwb2ludDo6QWN0aW9uc1ZlY3RvciYmIGFjdGlvbnMsIGJvb2wgYXV0
b0NvbnRpbnVlLCBzaXplX3QgaWdub3JlQ291bnQpIHsKICAgICAgICAgcmV0dXJuIEpTQzo6QnJl
YWtwb2ludDo6Y3JlYXRlKEpTQzo6bm9CcmVha3BvaW50SUQsIGNvbmRpdGlvbiwgV1RGTW92ZShh
Y3Rpb25zKSwgYXV0b0NvbnRpbnVlLCBpZ25vcmVDb3VudCk7CiAgICAgfSk7CiB9CkBAIC0yMzQs
MTAgKzIzMywxMCBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpZENyZWF0ZUZyb250
ZW5kQW5kQmFja2VuZChGcm9udGVuZFJvdXRlciosIEJhY2tlbgogdm9pZCBJbnNwZWN0b3JEZWJ1
Z2dlckFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChEaXNjb25uZWN0UmVhc29u
IHJlYXNvbikKIHsKICAgICBpZiAoZW5hYmxlZCgpKQotICAgICAgICBkaXNhYmxlKHJlYXNvbiA9
PSBEaXNjb25uZWN0UmVhc29uOjpJbnNwZWN0ZWRUYXJnZXREZXN0cm95ZWQpOworICAgICAgICBp
bnRlcm5hbERpc2FibGUocmVhc29uID09IERpc2Nvbm5lY3RSZWFzb246Okluc3BlY3RlZFRhcmdl
dERlc3Ryb3llZCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZW5hYmxlKCkK
K3ZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6aW50ZXJuYWxFbmFibGUoKQogewogICAgIG1f
ZW5hYmxlZCA9IHRydWU7CiAKQEAgLTI1Nyw3ICsyNTYsNyBAQCB2b2lkIEluc3BlY3RvckRlYnVn
Z2VyQWdlbnQ6OmVuYWJsZSgpCiAgICAgfQogfQogCi12b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdl
bnQ6OmRpc2FibGUoYm9vbCBpc0JlaW5nRGVzdHJveWVkKQordm9pZCBJbnNwZWN0b3JEZWJ1Z2dl
ckFnZW50OjppbnRlcm5hbERpc2FibGUoYm9vbCBpc0JlaW5nRGVzdHJveWVkKQogewogICAgIGZv
ciAoYXV0byogbGlzdGVuZXIgOiBjb3B5VG9WZWN0b3IobV9saXN0ZW5lcnMpKQogICAgICAgICBs
aXN0ZW5lci0+ZGVidWdnZXJXYXNEaXNhYmxlZCgpOwpAQCAtMjc3LDE5ICsyNzYsMjEgQEAgdm9p
ZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkaXNhYmxlKGJvb2wgaXNCZWluZ0Rlc3Ryb3llZCkK
ICAgICBtX2VuYWJsZWQgPSBmYWxzZTsKIH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50
OjplbmFibGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nKQorUHJvdG9jb2w6OkVycm9yU3RyaW5n
T3I8dm9pZD4gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZW5hYmxlKCkKIHsKLSAgICBpZiAoZW5h
YmxlZCgpKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIkRlYnVnZ2VyIGRvbWFpbiBhbHJlYWR5
IGVuYWJsZWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKGVuYWJsZWQoKSkK
KyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJEZWJ1Z2dlciBkb21haW4gYWxyZWFkeSBl
bmFibGVkIl9zKTsKIAotICAgIGVuYWJsZSgpOworICAgIGludGVybmFsRW5hYmxlKCk7CisKKyAg
ICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpc2FibGUo
RXJyb3JTdHJpbmcmKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yRGVi
dWdnZXJBZ2VudDo6ZGlzYWJsZSgpCiB7Ci0gICAgZGlzYWJsZShmYWxzZSk7CisgICAgaW50ZXJu
YWxEaXNhYmxlKGZhbHNlKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKIGJvb2wgSW5zcGVjdG9y
RGVidWdnZXJBZ2VudDo6YnJlYWtwb2ludHNBY3RpdmUoKSBjb25zdApAQCAtMjk3LDI4ICsyOTgs
MzAgQEAgYm9vbCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpicmVha3BvaW50c0FjdGl2ZSgpIGNv
bnN0CiAgICAgcmV0dXJuIG1fZGVidWdnZXIuYnJlYWtwb2ludHNBY3RpdmUoKTsKIH0KIAotdm9p
ZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZXRBc3luY1N0YWNrVHJhY2VEZXB0aChFcnJvclN0
cmluZyYgZXJyb3JTdHJpbmcsIGludCBkZXB0aCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZv
aWQ+IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldEFzeW5jU3RhY2tUcmFjZURlcHRoKGludCBk
ZXB0aCkKIHsKICAgICBpZiAobV9hc3luY1N0YWNrVHJhY2VEZXB0aCA9PSBkZXB0aCkKLSAgICAg
ICAgcmV0dXJuOworICAgICAgICByZXR1cm4geyB9OwogCi0gICAgaWYgKGRlcHRoIDwgMCkgewot
ICAgICAgICBlcnJvclN0cmluZyA9ICJVbmV4cGVjdGVkIG5lZ2F0aXZlIGRlcHRoIl9zOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmIChkZXB0aCA8IDApCisgICAgICAgIHJldHVybiBt
YWtlVW5leHBlY3RlZCgiVW5leHBlY3RlZCBuZWdhdGl2ZSBkZXB0aCJfcyk7CiAKICAgICBtX2Fz
eW5jU3RhY2tUcmFjZURlcHRoID0gZGVwdGg7CiAKICAgICBpZiAoIW1fYXN5bmNTdGFja1RyYWNl
RGVwdGgpCiAgICAgICAgIGNsZWFyQXN5bmNTdGFja1RyYWNlRGF0YSgpOworCisgICAgcmV0dXJu
IHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZXRCcmVha3BvaW50c0Fj
dGl2ZShFcnJvclN0cmluZyYsIGJvb2wgYWN0aXZlKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8
dm9pZD4gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0QnJlYWtwb2ludHNBY3RpdmUoYm9vbCBh
Y3RpdmUpCiB7CiAgICAgaWYgKGFjdGl2ZSkKICAgICAgICAgbV9kZWJ1Z2dlci5hY3RpdmF0ZUJy
ZWFrcG9pbnRzKCk7CiAgICAgZWxzZQogICAgICAgICBtX2RlYnVnZ2VyLmRlYWN0aXZhdGVCcmVh
a3BvaW50cygpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAogYm9vbCBJbnNwZWN0b3JEZWJ1Z2dl
ckFnZW50Ojppc1BhdXNlZCgpIGNvbnN0CkBAIC0zNDIsMjAgKzM0NSwyMCBAQCB2b2lkIEluc3Bl
Y3RvckRlYnVnZ2VyQWdlbnQ6OnVwZGF0ZVBhdXNlUmVhc29uQW5kRGF0YShEZWJ1Z2dlckZyb250
ZW5kRGlzcGF0Y2hlcgogICAgIG1fcGF1c2VEYXRhID0gV1RGTW92ZShkYXRhKTsKIH0KIAotc3Rh
dGljIFJlZlB0cjxKU09OOjpPYmplY3Q+IGJ1aWxkQXNzZXJ0UGF1c2VSZWFzb24oY29uc3QgU3Ry
aW5nJiBtZXNzYWdlKQorc3RhdGljIFJlZjxKU09OOjpPYmplY3Q+IGJ1aWxkQXNzZXJ0UGF1c2VS
ZWFzb24oY29uc3QgU3RyaW5nJiBtZXNzYWdlKQogewogICAgIGF1dG8gcmVhc29uID0gUHJvdG9j
b2w6OkRlYnVnZ2VyOjpBc3NlcnRQYXVzZVJlYXNvbjo6Y3JlYXRlKCkucmVsZWFzZSgpOwogICAg
IGlmICghbWVzc2FnZS5pc051bGwoKSkKICAgICAgICAgcmVhc29uLT5zZXRNZXNzYWdlKG1lc3Nh
Z2UpOwotICAgIHJldHVybiByZWFzb24tPm9wZW5BY2Nlc3NvcnMoKTsKKyAgICByZXR1cm4gKnJl
YXNvbi0+YXNPYmplY3QoKTsKIH0KIAotc3RhdGljIFJlZlB0cjxKU09OOjpPYmplY3Q+IGJ1aWxk
Q1NQVmlvbGF0aW9uUGF1c2VSZWFzb24oY29uc3QgU3RyaW5nJiBkaXJlY3RpdmVUZXh0KQorc3Rh
dGljIFJlZjxKU09OOjpPYmplY3Q+IGJ1aWxkQ1NQVmlvbGF0aW9uUGF1c2VSZWFzb24oY29uc3Qg
U3RyaW5nJiBkaXJlY3RpdmVUZXh0KQogewogICAgIGF1dG8gcmVhc29uID0gUHJvdG9jb2w6OkRl
YnVnZ2VyOjpDU1BWaW9sYXRpb25QYXVzZVJlYXNvbjo6Y3JlYXRlKCkKICAgICAgICAgLnNldERp
cmVjdGl2ZShkaXJlY3RpdmVUZXh0KQogICAgICAgICAucmVsZWFzZSgpOwotICAgIHJldHVybiBy
ZWFzb24tPm9wZW5BY2Nlc3NvcnMoKTsKKyAgICByZXR1cm4gKnJlYXNvbi0+YXNPYmplY3QoKTsK
IH0KIAogUmVmUHRyPEpTT046Ok9iamVjdD4gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6YnVpbGRC
cmVha3BvaW50UGF1c2VSZWFzb24oSlNDOjpCcmVha3BvaW50SUQgZGVidWdnZXJCcmVha3BvaW50
SUQpCkBAIC0zNjgsNyArMzcxLDcgQEAgUmVmUHRyPEpTT046Ok9iamVjdD4gSW5zcGVjdG9yRGVi
dWdnZXJBZ2VudDo6YnVpbGRCcmVha3BvaW50UGF1c2VSZWFzb24oSlNDOjpCcmUKICAgICAgICAg
ICAgICAgICBhdXRvIHJlYXNvbiA9IFByb3RvY29sOjpEZWJ1Z2dlcjo6QnJlYWtwb2ludFBhdXNl
UmVhc29uOjpjcmVhdGUoKQogICAgICAgICAgICAgICAgICAgICAuc2V0QnJlYWtwb2ludElkKHBy
b3RvY29sQnJlYWtwb2ludElEKQogICAgICAgICAgICAgICAgICAgICAucmVsZWFzZSgpOwotICAg
ICAgICAgICAgICAgIHJldHVybiByZWFzb24tPm9wZW5BY2Nlc3NvcnMoKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gcmVhc29uLT5hc09iamVjdCgpOwogICAgICAgICAgICAgfQogICAgICAgICB9
CiAgICAgfQpAQCAtMzg2LDcgKzM4OSwxMSBAQCBSZWZQdHI8SlNPTjo6T2JqZWN0PiBJbnNwZWN0
b3JEZWJ1Z2dlckFnZW50OjpidWlsZEV4Y2VwdGlvblBhdXNlUmVhc29uKEpTQzo6SlNWYQogICAg
IGlmIChpbmplY3RlZFNjcmlwdC5oYXNOb1ZhbHVlKCkpCiAgICAgICAgIHJldHVybiBudWxscHRy
OwogCi0gICAgcmV0dXJuIGluamVjdGVkU2NyaXB0LndyYXBPYmplY3QoZXhjZXB0aW9uLCBJbnNw
ZWN0b3JEZWJ1Z2dlckFnZW50OjpiYWNrdHJhY2VPYmplY3RHcm91cCktPm9wZW5BY2Nlc3NvcnMo
KTsKKyAgICBhdXRvIGV4Y2VwdGlvblZhbHVlID0gaW5qZWN0ZWRTY3JpcHQud3JhcE9iamVjdChl
eGNlcHRpb24sIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmJhY2t0cmFjZU9iamVjdEdyb3VwKTsK
KyAgICBpZiAoIWV4Y2VwdGlvblZhbHVlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAg
IHJldHVybiBleGNlcHRpb25WYWx1ZS0+YXNPYmplY3QoKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JE
ZWJ1Z2dlckFnZW50OjpoYW5kbGVDb25zb2xlQXNzZXJ0KGNvbnN0IFN0cmluZyYgbWVzc2FnZSkK
QEAgLTQ5Miw3ICs0OTksNyBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpZERpc3Bh
dGNoQXN5bmNDYWxsKCkKICAgICAgICAgbV9wZW5kaW5nQXN5bmNDYWxscy5yZW1vdmUoaWRlbnRp
Zmllcik7CiB9CiAKLXN0YXRpYyBSZWZQdHI8UHJvdG9jb2w6OkRlYnVnZ2VyOjpMb2NhdGlvbj4g
YnVpbGREZWJ1Z2dlckxvY2F0aW9uKGNvbnN0IEpTQzo6QnJlYWtwb2ludCYgZGVidWdnZXJCcmVh
a3BvaW50KQorc3RhdGljIFJlZjxQcm90b2NvbDo6RGVidWdnZXI6OkxvY2F0aW9uPiBidWlsZERl
YnVnZ2VyTG9jYXRpb24oY29uc3QgSlNDOjpCcmVha3BvaW50JiBkZWJ1Z2dlckJyZWFrcG9pbnQp
CiB7CiAgICAgQVNTRVJUKGRlYnVnZ2VyQnJlYWtwb2ludC5pc1Jlc29sdmVkKCkpOwogCkBAIC01
MDEsNTAgKzUwOCw0OSBAQCBzdGF0aWMgUmVmUHRyPFByb3RvY29sOjpEZWJ1Z2dlcjo6TG9jYXRp
b24+IGJ1aWxkRGVidWdnZXJMb2NhdGlvbihjb25zdCBKU0M6OkJyZQogICAgICAgICAuc2V0TGlu
ZU51bWJlcihkZWJ1Z2dlckJyZWFrcG9pbnQubGluZU51bWJlcigpKQogICAgICAgICAucmVsZWFz
ZSgpOwogICAgIGxvY2F0aW9uLT5zZXRDb2x1bW5OdW1iZXIoZGVidWdnZXJCcmVha3BvaW50LmNv
bHVtbk51bWJlcigpKTsKLQogICAgIHJldHVybiBsb2NhdGlvbjsKIH0KIAotc3RhdGljIGJvb2wg
cGFyc2VMb2NhdGlvbihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IEpTT046Ok9iamVj
dCYgbG9jYXRpb24sIEpTQzo6U291cmNlSUQmIHNvdXJjZUlELCB1bnNpZ25lZCYgbGluZU51bWJl
ciwgdW5zaWduZWQmIGNvbHVtbk51bWJlcikKK3N0YXRpYyBib29sIHBhcnNlTG9jYXRpb24oUHJv
dG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgSlNPTjo6T2JqZWN0JiBsb2Nh
dGlvbiwgSlNDOjpTb3VyY2VJRCYgc291cmNlSUQsIHVuc2lnbmVkJiBsaW5lTnVtYmVyLCB1bnNp
Z25lZCYgY29sdW1uTnVtYmVyKQogewotICAgIGlmICghbG9jYXRpb24uZ2V0SW50ZWdlcigibGlu
ZU51bWJlciJfcywgbGluZU51bWJlcikpIHsKKyAgICBhdXRvIGxpbmVOdW1iZXJWYWx1ZSA9IGxv
Y2F0aW9uLmdldEludGVnZXIoUHJvdG9jb2w6OkRlYnVnZ2VyOjpMb2NhdGlvbjo6bGluZU51bWJl
cktleSk7CisgICAgaWYgKCFsaW5lTnVtYmVyVmFsdWUpIHsKICAgICAgICAgZXJyb3JTdHJpbmcg
PSAiVW5leHBlY3RlZCBub24taW50ZWdlciBsaW5lTnVtYmVyIGluIGdpdmVuIGxvY2F0aW9uIl9z
OwogICAgICAgICBzb3VyY2VJRCA9IEpTQzo6bm9Tb3VyY2VJRDsKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIH0KIAotICAgIFN0cmluZyBzY3JpcHRJRFN0cjsKLSAgICBpZiAoIWxvY2F0aW9u
LmdldFN0cmluZygic2NyaXB0SWQiX3MsIHNjcmlwdElEU3RyKSkgeworICAgIGxpbmVOdW1iZXIg
PSAqbGluZU51bWJlclZhbHVlOworCisgICAgYXV0byBzY3JpcHRJRFN0ciA9IGxvY2F0aW9uLmdl
dFN0cmluZyhQcm90b2NvbDo6RGVidWdnZXI6OkxvY2F0aW9uOjpzY3JpcHRJZEtleSk7CisgICAg
aWYgKCFzY3JpcHRJRFN0cikgewogICAgICAgICBzb3VyY2VJRCA9IEpTQzo6bm9Tb3VyY2VJRDsK
ICAgICAgICAgZXJyb3JTdHJpbmcgPSAiVW5leGVwY3RlZCBub24tc3RyaW5nIHNjcmlwdElkIGlu
IGdpdmVuIGxvY2F0aW9uIl9zOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAg
c291cmNlSUQgPSBzY3JpcHRJRFN0ci50b0ludFB0cigpOwotICAgIGNvbHVtbk51bWJlciA9IDA7
Ci0gICAgbG9jYXRpb24uZ2V0SW50ZWdlcigiY29sdW1uTnVtYmVyIl9zLCBjb2x1bW5OdW1iZXIp
OworICAgIGNvbHVtbk51bWJlciA9IGxvY2F0aW9uLmdldEludGVnZXIoUHJvdG9jb2w6OkRlYnVn
Z2VyOjpMb2NhdGlvbjo6Y29sdW1uTnVtYmVyS2V5KS52YWx1ZU9yKDApOwogICAgIHJldHVybiB0
cnVlOwogfQogCi12b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldEJyZWFrcG9pbnRCeVVy
bChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcq
IG9wdGlvbmFsVVJMLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsVVJMUmVnZXgsIGNvbnN0IGludCog
b3B0aW9uYWxDb2x1bW5OdW1iZXIsIGNvbnN0IEpTT046Ok9iamVjdCogb3B0aW9uc1BheWxvYWQs
IFByb3RvY29sOjpEZWJ1Z2dlcjo6QnJlYWtwb2ludElkKiBvdXRCcmVha3BvaW50SWQsIFJlZlB0
cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpEZWJ1Z2dlcjo6TG9jYXRpb24+PiYgb3V0TG9jYXRp
b25zKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8c3RkOjp0dXBsZTxQcm90b2NvbDo6RGVidWdn
ZXI6OkJyZWFrcG9pbnRJZCwgUmVmPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkRlYnVnZ2VyOjpM
b2NhdGlvbj4+Pj4gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0QnJlYWtwb2ludEJ5VXJsKGlu
dCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiB1cmxSZWdleCwg
T3B0aW9uYWw8aW50PiYmIGNvbHVtbk51bWJlciwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBvcHRp
b25zKQogewotICAgIGlmICghb3B0aW9uYWxVUkwgPT0gIW9wdGlvbmFsVVJMUmVnZXgpIHsKLSAg
ICAgICAgZXJyb3JTdHJpbmcgPSAiRWl0aGVyIHVybCBvciB1cmxSZWdleCBtdXN0IGJlIHNwZWNp
ZmllZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoIXVybCA9PSAhdXJsUmVn
ZXgpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiRWl0aGVyIHVybCBvciB1cmxSZWdl
eCBtdXN0IGJlIHNwZWNpZmllZCJfcyk7CiAKLSAgICBhdXRvIHByb3RvY29sQnJlYWtwb2ludCA9
IFByb3RvY29sQnJlYWtwb2ludDo6ZnJvbVBheWxvYWQoZXJyb3JTdHJpbmcsIG9wdGlvbmFsVVJM
ID8gKm9wdGlvbmFsVVJMIDogKm9wdGlvbmFsVVJMUmVnZXgsICEhb3B0aW9uYWxVUkxSZWdleCwg
bGluZU51bWJlciwgb3B0aW9uYWxDb2x1bW5OdW1iZXIgPyAqb3B0aW9uYWxDb2x1bW5OdW1iZXIg
OiAwLCBvcHRpb25zUGF5bG9hZCk7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3Ry
aW5nOworCisgICAgYXV0byBwcm90b2NvbEJyZWFrcG9pbnQgPSBQcm90b2NvbEJyZWFrcG9pbnQ6
OmZyb21QYXlsb2FkKGVycm9yU3RyaW5nLCAhIXVybCA/IHVybCA6IHVybFJlZ2V4LCAhIXVybFJl
Z2V4LCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIudmFsdWVPcigwKSwgV1RGTW92ZShvcHRpb25z
KSk7CiAgICAgaWYgKCFwcm90b2NvbEJyZWFrcG9pbnQpCi0gICAgICAgIHJldHVybjsKKyAgICAg
ICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAotICAgIGlmIChtX3Byb3Rv
Y29sQnJlYWtwb2ludEZvclByb3RvY29sQnJlYWtwb2ludElELmNvbnRhaW5zKHByb3RvY29sQnJl
YWtwb2ludC0+aWQoKSkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiQnJlYWtwb2ludCBmb3Ig
Z2l2ZW4gbG9jYXRpb24gYWxyZWFkeSBleGlzdHMuIl9zOwotICAgICAgICByZXR1cm47Ci0gICAg
fQorICAgIGlmIChtX3Byb3RvY29sQnJlYWtwb2ludEZvclByb3RvY29sQnJlYWtwb2ludElELmNv
bnRhaW5zKHByb3RvY29sQnJlYWtwb2ludC0+aWQoKSkpCisgICAgICAgIHJldHVybiBtYWtlVW5l
eHBlY3RlZCgiQnJlYWtwb2ludCBmb3IgZ2l2ZW4gbG9jYXRpb24gYWxyZWFkeSBleGlzdHMuIl9z
KTsKIAogICAgIG1fcHJvdG9jb2xCcmVha3BvaW50Rm9yUHJvdG9jb2xCcmVha3BvaW50SUQuc2V0
KHByb3RvY29sQnJlYWtwb2ludC0+aWQoKSwgKnByb3RvY29sQnJlYWtwb2ludCk7CiAKLSAgICBv
dXRMb2NhdGlvbnMgPSBKU09OOjpBcnJheU9mPFByb3RvY29sOjpEZWJ1Z2dlcjo6TG9jYXRpb24+
OjpjcmVhdGUoKTsKKyAgICBhdXRvIGxvY2F0aW9ucyA9IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6
OkRlYnVnZ2VyOjpMb2NhdGlvbj46OmNyZWF0ZSgpOwogCiAgICAgZm9yIChhdXRvJiBbc291cmNl
SUQsIHNjcmlwdF0gOiBtX3NjcmlwdHMpIHsKICAgICAgICAgU3RyaW5nIHNjcmlwdFVSTEZvckJy
ZWFrcG9pbnRzID0gIXNjcmlwdC5zb3VyY2VVUkwuaXNFbXB0eSgpID8gc2NyaXB0LnNvdXJjZVVS
TCA6IHNjcmlwdC51cmw7CkBAIC01NjEsMjkgKzU2NywyOSBAQCB2b2lkIEluc3BlY3RvckRlYnVn
Z2VyQWdlbnQ6OnNldEJyZWFrcG9pbnRCeVVybChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGlu
dCBsaQogCiAgICAgICAgIGRpZFNldEJyZWFrcG9pbnQoKnByb3RvY29sQnJlYWtwb2ludCwgZGVi
dWdnZXJCcmVha3BvaW50KTsKIAotICAgICAgICBvdXRMb2NhdGlvbnMtPmFkZEl0ZW0oYnVpbGRE
ZWJ1Z2dlckxvY2F0aW9uKGRlYnVnZ2VyQnJlYWtwb2ludCkpOworICAgICAgICBsb2NhdGlvbnMt
PmFkZEl0ZW0oYnVpbGREZWJ1Z2dlckxvY2F0aW9uKGRlYnVnZ2VyQnJlYWtwb2ludCkpOwogICAg
IH0KIAotICAgICpvdXRCcmVha3BvaW50SWQgPSBwcm90b2NvbEJyZWFrcG9pbnQtPmlkKCk7Cisg
ICAgcmV0dXJuIHsgeyBwcm90b2NvbEJyZWFrcG9pbnQtPmlkKCksIFdURk1vdmUobG9jYXRpb25z
KSB9IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0QnJlYWtwb2ludChF
cnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IEpTT046Ok9iamVjdCYgbG9jYXRpb24sIGNv
bnN0IEpTT046Ok9iamVjdCogb3B0aW9uc1BheWxvYWQsIFByb3RvY29sOjpEZWJ1Z2dlcjo6QnJl
YWtwb2ludElkKiBvdXRCcmVha3BvaW50SWQsIFJlZlB0cjxQcm90b2NvbDo6RGVidWdnZXI6Okxv
Y2F0aW9uPiYgb3V0QWN0dWFsTG9jYXRpb24pCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxzdGQ6
OnR1cGxlPFByb3RvY29sOjpEZWJ1Z2dlcjo6QnJlYWtwb2ludElkLCBSZWY8UHJvdG9jb2w6OkRl
YnVnZ2VyOjpMb2NhdGlvbj4+PiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZXRCcmVha3BvaW50
KFJlZjxKU09OOjpPYmplY3Q+JiYgbG9jYXRpb24sIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgb3B0
aW9ucykKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBK
U0M6OlNvdXJjZUlEIHNvdXJjZUlEOwogICAgIHVuc2lnbmVkIGxpbmVOdW1iZXI7CiAgICAgdW5z
aWduZWQgY29sdW1uTnVtYmVyOwogICAgIGlmICghcGFyc2VMb2NhdGlvbihlcnJvclN0cmluZywg
bG9jYXRpb24sIHNvdXJjZUlELCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIpKQotICAgICAgICBy
ZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAg
ICBhdXRvIHNjcmlwdEl0ZXJhdG9yID0gbV9zY3JpcHRzLmZpbmQoc291cmNlSUQpOwotICAgIGlm
IChzY3JpcHRJdGVyYXRvciA9PSBtX3NjcmlwdHMuZW5kKCkpIHsKLSAgICAgICAgZXJyb3JTdHJp
bmcgPSAiTWlzc2luZyBzY3JpcHQgZm9yIHNjcmlwdElkIGluIGdpdmVuIGxvY2F0aW9uIl9zOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmIChzY3JpcHRJdGVyYXRvciA9PSBtX3Njcmlw
dHMuZW5kKCkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTWlzc2luZyBzY3JpcHQg
Zm9yIHNjcmlwdElkIGluIGdpdmVuIGxvY2F0aW9uIl9zKTsKIAotICAgIGF1dG8gcHJvdG9jb2xC
cmVha3BvaW50ID0gUHJvdG9jb2xCcmVha3BvaW50Ojpmcm9tUGF5bG9hZChlcnJvclN0cmluZywg
c291cmNlSUQsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlciwgb3B0aW9uc1BheWxvYWQpOworICAg
IGF1dG8gcHJvdG9jb2xCcmVha3BvaW50ID0gUHJvdG9jb2xCcmVha3BvaW50Ojpmcm9tUGF5bG9h
ZChlcnJvclN0cmluZywgc291cmNlSUQsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlciwgV1RGTW92
ZShvcHRpb25zKSk7CiAgICAgaWYgKCFwcm90b2NvbEJyZWFrcG9pbnQpCi0gICAgICAgIHJldHVy
bjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgIC8v
IERvbid0IHNhdmUgYHByb3RvY29sQnJlYWtwb2ludGAgaW4gYG1fcHJvdG9jb2xCcmVha3BvaW50
Rm9yUHJvdG9jb2xCcmVha3BvaW50SURgIGJlY2F1c2UgaXQKICAgICAvLyB3YXMgc2V0IHNwZWNp
ZmljYWxseSBmb3IgdGhlIGdpdmVuIGBzb3VyY2VJRGAsIHdoaWNoIGlzIHVuaXF1ZSwgbWVhbmlu
ZyB0aGF0IGl0IHdpbGwgbmV2ZXIKQEAgLTU5MSwyMCArNTk3LDE1IEBAIHZvaWQgSW5zcGVjdG9y
RGVidWdnZXJBZ2VudDo6c2V0QnJlYWtwb2ludChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNv
bnN0IEpTT046CiAKICAgICBhdXRvIGRlYnVnZ2VyQnJlYWtwb2ludCA9IHByb3RvY29sQnJlYWtw
b2ludC0+Y3JlYXRlRGVidWdnZXJCcmVha3BvaW50KG1fbmV4dERlYnVnZ2VyQnJlYWtwb2ludElE
KyssIHNvdXJjZUlEKTsKIAotICAgIGlmICghcmVzb2x2ZUJyZWFrcG9pbnQoc2NyaXB0SXRlcmF0
b3ItPnZhbHVlLCBkZWJ1Z2dlckJyZWFrcG9pbnQpKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0g
IkNvdWxkIG5vdCByZXNvbHZlIGJyZWFrcG9pbnQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
CisgICAgaWYgKCFyZXNvbHZlQnJlYWtwb2ludChzY3JpcHRJdGVyYXRvci0+dmFsdWUsIGRlYnVn
Z2VyQnJlYWtwb2ludCkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiQ291bGQgbm90
IHJlc29sdmUgYnJlYWtwb2ludCJfcyk7CiAKLSAgICBpZiAoIXNldEJyZWFrcG9pbnQoZGVidWdn
ZXJCcmVha3BvaW50KSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJCcmVha3BvaW50IGZvciBn
aXZlbiBsb2NhdGlvbiBhbHJlYWR5IGV4aXN0cyJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
KyAgICBpZiAoIXNldEJyZWFrcG9pbnQoZGVidWdnZXJCcmVha3BvaW50KSkKKyAgICAgICAgcmV0
dXJuIG1ha2VVbmV4cGVjdGVkKCJCcmVha3BvaW50IGZvciBnaXZlbiBsb2NhdGlvbiBhbHJlYWR5
IGV4aXN0cyJfcyk7CiAKICAgICBkaWRTZXRCcmVha3BvaW50KCpwcm90b2NvbEJyZWFrcG9pbnQs
IGRlYnVnZ2VyQnJlYWtwb2ludCk7CiAKLSAgICBvdXRBY3R1YWxMb2NhdGlvbiA9IGJ1aWxkRGVi
dWdnZXJMb2NhdGlvbihkZWJ1Z2dlckJyZWFrcG9pbnQpOwotICAgICpvdXRCcmVha3BvaW50SWQg
PSBwcm90b2NvbEJyZWFrcG9pbnQtPmlkKCk7CisgICAgcmV0dXJuIHsgeyBwcm90b2NvbEJyZWFr
cG9pbnQtPmlkKCksIGJ1aWxkRGVidWdnZXJMb2NhdGlvbihkZWJ1Z2dlckJyZWFrcG9pbnQpIH0g
fTsKIH0KIAogdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkaWRTZXRCcmVha3BvaW50KFBy
b3RvY29sQnJlYWtwb2ludCYgcHJvdG9jb2xCcmVha3BvaW50LCBKU0M6OkJyZWFrcG9pbnQmIGRl
YnVnZ2VyQnJlYWtwb2ludCkKQEAgLTYzMCw3ICs2MzEsNyBAQCBib29sIEluc3BlY3RvckRlYnVn
Z2VyQWdlbnQ6OnNldEJyZWFrcG9pbnQoSlNDOjpCcmVha3BvaW50JiBkZWJ1Z2dlckJyZWFrcG9p
bnQpCiAgICAgcmV0dXJuIG1fZGVidWdnZXIuc2V0QnJlYWtwb2ludChkZWJ1Z2dlckJyZWFrcG9p
bnQpOwogfQogCi12b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnJlbW92ZUJyZWFrcG9pbnQo
RXJyb3JTdHJpbmcmLCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6QnJlYWtw
b2ludElkJiBwcm90b2NvbEJyZWFrcG9pbnRJRCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZv
aWQ+IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnJlbW92ZUJyZWFrcG9pbnQoY29uc3QgUHJvdG9j
b2w6OkRlYnVnZ2VyOjpCcmVha3BvaW50SWQmIHByb3RvY29sQnJlYWtwb2ludElEKQogewogICAg
IG1fcHJvdG9jb2xCcmVha3BvaW50Rm9yUHJvdG9jb2xCcmVha3BvaW50SUQucmVtb3ZlKHByb3Rv
Y29sQnJlYWtwb2ludElEKTsKIApAQCAtNjQxLDI0ICs2NDIsMzQgQEAgdm9pZCBJbnNwZWN0b3JE
ZWJ1Z2dlckFnZW50OjpyZW1vdmVCcmVha3BvaW50KEVycm9yU3RyaW5nJiwgY29uc3QgSW5zcGVj
dG9yOjpQcm8KICAgICAgICAgSlNDOjpKU0xvY2tIb2xkZXIgbG9ja2VyKG1fZGVidWdnZXIudm0o
KSk7CiAgICAgICAgIG1fZGVidWdnZXIucmVtb3ZlQnJlYWtwb2ludChkZWJ1Z2dlckJyZWFrcG9p
bnQpOwogICAgIH0KKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdn
ZXJBZ2VudDo6Y29udGludWVVbnRpbE5leHRSdW5Mb29wKEVycm9yU3RyaW5nJiBlcnJvclN0cmlu
ZykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6
OmNvbnRpbnVlVW50aWxOZXh0UnVuTG9vcCgpCiB7Ci0gICAgaWYgKCFhc3NlcnRQYXVzZWQoZXJy
b3JTdHJpbmcpKQotICAgICAgICByZXR1cm47CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVy
cm9yU3RyaW5nOwogCi0gICAgcmVzdW1lKGVycm9yU3RyaW5nKTsKKyAgICBpZiAoIWFzc2VydFBh
dXNlZChlcnJvclN0cmluZykpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0
cmluZyk7CisKKyAgICBhdXRvIHJlc3VtZVJlc3VsdCA9IHJlc3VtZSgpOworICAgIGlmICghcmVz
dW1lUmVzdWx0KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQocmVzdW1lUmVzdWx0LmVy
cm9yKCkpOwogCiAgICAgbV9lbmFibGVQYXVzZVdoZW5JZGxlID0gdHJ1ZTsKIAogICAgIHJlZ2lz
dGVySWRsZUhhbmRsZXIoKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9y
RGVidWdnZXJBZ2VudDo6Y29udGludWVUb0xvY2F0aW9uKEVycm9yU3RyaW5nJiBlcnJvclN0cmlu
ZywgY29uc3QgSlNPTjo6T2JqZWN0JiBsb2NhdGlvbikKK1Byb3RvY29sOjpFcnJvclN0cmluZ09y
PHZvaWQ+IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmNvbnRpbnVlVG9Mb2NhdGlvbihSZWY8SlNP
Tjo6T2JqZWN0PiYmIGxvY2F0aW9uKQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJv
clN0cmluZzsKKwogICAgIGlmICghYXNzZXJ0UGF1c2VkKGVycm9yU3RyaW5nKSkKLSAgICAgICAg
cmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCiAg
ICAgaWYgKG1fY29udGludWVUb0xvY2F0aW9uRGVidWdnZXJCcmVha3BvaW50KSB7CiAgICAgICAg
IG1fZGVidWdnZXIucmVtb3ZlQnJlYWtwb2ludCgqbV9jb250aW51ZVRvTG9jYXRpb25EZWJ1Z2dl
ckJyZWFrcG9pbnQpOwpAQCAtNjY5LDE5ICs2ODAsMTggQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dl
ckFnZW50Ojpjb250aW51ZVRvTG9jYXRpb24oRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25z
dAogICAgIHVuc2lnbmVkIGxpbmVOdW1iZXI7CiAgICAgdW5zaWduZWQgY29sdW1uTnVtYmVyOwog
ICAgIGlmICghcGFyc2VMb2NhdGlvbihlcnJvclN0cmluZywgbG9jYXRpb24sIHNvdXJjZUlELCBs
aW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIpKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVy
biBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAgICBhdXRvIHNjcmlwdEl0ZXJhdG9y
ID0gbV9zY3JpcHRzLmZpbmQoc291cmNlSUQpOwogICAgIGlmIChzY3JpcHRJdGVyYXRvciA9PSBt
X3NjcmlwdHMuZW5kKCkpIHsKICAgICAgICAgbV9kZWJ1Z2dlci5jb250aW51ZVByb2dyYW0oKTsK
ICAgICAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPnJlc3VtZWQoKTsKLSAgICAgICAgZXJyb3JT
dHJpbmcgPSAiTWlzc2luZyBzY3JpcHQgZm9yIHNjcmlwdElkIGluIGdpdmVuIGxvY2F0aW9uIl9z
OwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTWlzc2lu
ZyBzY3JpcHQgZm9yIHNjcmlwdElkIGluIGdpdmVuIGxvY2F0aW9uIl9zKTsKICAgICB9CiAKICAg
ICBhdXRvIHByb3RvY29sQnJlYWtwb2ludCA9IFByb3RvY29sQnJlYWtwb2ludDo6ZnJvbVBheWxv
YWQoZXJyb3JTdHJpbmcsIHNvdXJjZUlELCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIpOwogICAg
IGlmICghcHJvdG9jb2xCcmVha3BvaW50KQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVy
biBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAgICAvLyBEb24ndCBzYXZlIGBwcm90
b2NvbEJyZWFrcG9pbnRgIGluIGBtX3Byb3RvY29sQnJlYWtwb2ludEZvclByb3RvY29sQnJlYWtw
b2ludElEYCBiZWNhdXNlIGl0CiAgICAgLy8gaXMgYSB0ZW1wb3JhcnkgYnJlYWtwb2ludCB0aGF0
IHdpbGwgYmUgcmVtb3ZlZCBhcyBzb29uIGFzIGBsb2NhdGlvbmAgaXMgcmVhY2hlZC4KQEAgLTY5
MSw4ICs3MDEsNyBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmNvbnRpbnVlVG9Mb2Nh
dGlvbihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0CiAgICAgaWYgKCFyZXNvbHZlQnJl
YWtwb2ludChzY3JpcHRJdGVyYXRvci0+dmFsdWUsIGRlYnVnZ2VyQnJlYWtwb2ludCkpIHsKICAg
ICAgICAgbV9kZWJ1Z2dlci5jb250aW51ZVByb2dyYW0oKTsKICAgICAgICAgbV9mcm9udGVuZERp
c3BhdGNoZXItPnJlc3VtZWQoKTsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiQ291bGQgbm90IHJl
c29sdmUgYnJlYWtwb2ludCJfczsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFr
ZVVuZXhwZWN0ZWQoIkNvdWxkIG5vdCByZXNvbHZlIGJyZWFrcG9pbnQiX3MpOwogICAgIH0KIAog
ICAgIGlmICghc2V0QnJlYWtwb2ludChkZWJ1Z2dlckJyZWFrcG9pbnQpKSB7CkBAIC03MDEsNyAr
NzEwLDcgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojpjb250aW51ZVRvTG9jYXRpb24o
RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdAogICAgICAgICAvLyBoaXQgdGhpcyBuZXcg
YnJlYWtwb2ludCBvciBub3QuCiAgICAgICAgIG1fZGVidWdnZXIuY29udGludWVQcm9ncmFtKCk7
CiAgICAgICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5yZXN1bWVkKCk7Ci0gICAgICAgIHJldHVy
bjsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKICAgICBtX2NvbnRpbnVlVG9Mb2NhdGlv
bkRlYnVnZ2VyQnJlYWtwb2ludCA9IFdURk1vdmUoZGVidWdnZXJCcmVha3BvaW50KTsKQEAgLTcx
MCw0MSArNzE5LDQyIEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6Y29udGludWVUb0xv
Y2F0aW9uKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QKICAgICAvLyBTbyBkb24ndCBp
c3N1ZSBhIHJlc3VtZWQgZXZlbnQgdW5sZXNzIHdlIGV4aXQgdGhlIFZNIHdpdGhvdXQgcGF1c2lu
Zy4KICAgICB3aWxsU3RlcEFuZE1heUJlY29tZUlkbGUoKTsKICAgICBtX2RlYnVnZ2VyLmNvbnRp
bnVlUHJvZ3JhbSgpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1
Z2dlckFnZW50OjpzZWFyY2hJbkNvbnRlbnQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25z
dCBTdHJpbmcmIHNjcmlwdElEU3RyLCBjb25zdCBTdHJpbmcmIHF1ZXJ5LCBjb25zdCBib29sKiBv
cHRpb25hbENhc2VTZW5zaXRpdmUsIGNvbnN0IGJvb2wqIG9wdGlvbmFsSXNSZWdleCwgUmVmUHRy
PEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkdlbmVyaWNUeXBlczo6U2VhcmNoTWF0Y2g+PiYgcmVz
dWx0cykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPFByb3RvY29s
OjpHZW5lcmljVHlwZXM6OlNlYXJjaE1hdGNoPj4+IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNl
YXJjaEluQ29udGVudChjb25zdCBQcm90b2NvbDo6RGVidWdnZXI6OlNjcmlwdElkJiBzY3JpcHRJ
ZCwgY29uc3QgU3RyaW5nJiBxdWVyeSwgT3B0aW9uYWw8Ym9vbD4mJiBjYXNlU2Vuc2l0aXZlLCBP
cHRpb25hbDxib29sPiYmIGlzUmVnZXgpCiB7Ci0gICAgSlNDOjpTb3VyY2VJRCBzb3VyY2VJRCA9
IHNjcmlwdElEU3RyLnRvSW50UHRyKCk7Ci0gICAgYXV0byBpdCA9IG1fc2NyaXB0cy5maW5kKHNv
dXJjZUlEKTsKLSAgICBpZiAoaXQgPT0gbV9zY3JpcHRzLmVuZCgpKSB7Ci0gICAgICAgIGVycm9y
U3RyaW5nID0gIk1pc3Npbmcgc2NyaXB0IGZvciBnaXZlbiBzY3JpcHRJZCI7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9CisgICAgYXV0byBpdCA9IG1fc2NyaXB0cy5maW5kKHNjcmlwdElkLnRvSW50
UHRyKCkpOworICAgIGlmIChpdCA9PSBtX3NjcmlwdHMuZW5kKCkpCisgICAgICAgIHJldHVybiBt
YWtlVW5leHBlY3RlZCgiTWlzc2luZyBzY3JpcHQgZm9yIGdpdmVuIHNjcmlwdElkIl9zKTsKIAot
ICAgIGJvb2wgaXNSZWdleCA9IG9wdGlvbmFsSXNSZWdleCA/ICpvcHRpb25hbElzUmVnZXggOiBm
YWxzZTsKLSAgICBib29sIGNhc2VTZW5zaXRpdmUgPSBvcHRpb25hbENhc2VTZW5zaXRpdmUgPyAq
b3B0aW9uYWxDYXNlU2Vuc2l0aXZlIDogZmFsc2U7Ci0gICAgcmVzdWx0cyA9IENvbnRlbnRTZWFy
Y2hVdGlsaXRpZXM6OnNlYXJjaEluVGV4dEJ5TGluZXMoaXQtPnZhbHVlLnNvdXJjZSwgcXVlcnks
IGNhc2VTZW5zaXRpdmUsIGlzUmVnZXgpOworICAgIHJldHVybiBDb250ZW50U2VhcmNoVXRpbGl0
aWVzOjpzZWFyY2hJblRleHRCeUxpbmVzKGl0LT52YWx1ZS5zb3VyY2UsIHF1ZXJ5LCBjYXNlU2Vu
c2l0aXZlLnZhbHVlT3IoZmFsc2UpLCBpc1JlZ2V4LnZhbHVlT3IoZmFsc2UpKTsKIH0KIAotdm9p
ZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpnZXRTY3JpcHRTb3VyY2UoRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHNjcmlwdElEU3RyLCBTdHJpbmcqIHNjcmlwdFNvdXJj
ZSkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPFN0cmluZz4gSW5zcGVjdG9yRGVidWdnZXJBZ2Vu
dDo6Z2V0U2NyaXB0U291cmNlKGNvbnN0IFByb3RvY29sOjpEZWJ1Z2dlcjo6U2NyaXB0SWQmIHNj
cmlwdElkKQogewotICAgIEpTQzo6U291cmNlSUQgc291cmNlSUQgPSBzY3JpcHRJRFN0ci50b0lu
dFB0cigpOwotICAgIGF1dG8gaXQgPSBtX3NjcmlwdHMuZmluZChzb3VyY2VJRCk7Ci0gICAgaWYg
KGl0ICE9IG1fc2NyaXB0cy5lbmQoKSkKLSAgICAgICAgKnNjcmlwdFNvdXJjZSA9IGl0LT52YWx1
ZS5zb3VyY2U7Ci0gICAgZWxzZQotICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIHNjcmlw
dCBmb3IgZ2l2ZW4gc2NyaXB0SWQiOworICAgIGF1dG8gaXQgPSBtX3NjcmlwdHMuZmluZChzY3Jp
cHRJZC50b0ludFB0cigpKTsKKyAgICBpZiAoaXQgPT0gbV9zY3JpcHRzLmVuZCgpKQorICAgICAg
ICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk1pc3Npbmcgc2NyaXB0IGZvciBnaXZlbiBzY3JpcHRJ
ZCIpOworCisgICAgcmV0dXJuIGl0LT52YWx1ZS5zb3VyY2U7CiB9CiAKLXZvaWQgSW5zcGVjdG9y
RGVidWdnZXJBZ2VudDo6Z2V0RnVuY3Rpb25EZXRhaWxzKEVycm9yU3RyaW5nJiBlcnJvclN0cmlu
ZywgY29uc3QgU3RyaW5nJiBmdW5jdGlvbklkLCBSZWZQdHI8UHJvdG9jb2w6OkRlYnVnZ2VyOjpG
dW5jdGlvbkRldGFpbHM+JiBkZXRhaWxzKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPFBy
b3RvY29sOjpEZWJ1Z2dlcjo6RnVuY3Rpb25EZXRhaWxzPj4gSW5zcGVjdG9yRGVidWdnZXJBZ2Vu
dDo6Z2V0RnVuY3Rpb25EZXRhaWxzKGNvbnN0IFN0cmluZyYgZnVuY3Rpb25JZCkKIHsKKyAgICBQ
cm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBJbmplY3RlZFNjcmlwdCBp
bmplY3RlZFNjcmlwdCA9IG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmluamVjdGVkU2NyaXB0Rm9y
T2JqZWN0SWQoZnVuY3Rpb25JZCk7Ci0gICAgaWYgKGluamVjdGVkU2NyaXB0Lmhhc05vVmFsdWUo
KSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIGluamVjdGVkIHNjcmlwdCBmb3Ig
Z2l2ZW4gZnVuY3Rpb25JZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoaW5q
ZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQo
Ik1pc3NpbmcgaW5qZWN0ZWQgc2NyaXB0IGZvciBnaXZlbiBmdW5jdGlvbklkIl9zKTsKIAorICAg
IFJlZlB0cjxQcm90b2NvbDo6RGVidWdnZXI6OkZ1bmN0aW9uRGV0YWlscz4gZGV0YWlsczsKICAg
ICBpbmplY3RlZFNjcmlwdC5nZXRGdW5jdGlvbkRldGFpbHMoZXJyb3JTdHJpbmcsIGZ1bmN0aW9u
SWQsIGRldGFpbHMpOworICAgIGlmICghZGV0YWlscykKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4
cGVjdGVkKGVycm9yU3RyaW5nKTsKKworICAgIHJldHVybiBkZXRhaWxzLnJlbGVhc2VOb25OdWxs
KCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2NoZWR1bGVQYXVzZUF0TmV4
dE9wcG9ydHVuaXR5KERlYnVnZ2VyRnJvbnRlbmREaXNwYXRjaGVyOjpSZWFzb24gcmVhc29uLCBS
ZWZQdHI8SlNPTjo6T2JqZWN0PiYmIGRhdGEpCkBAIC03OTIsNTcgKzgwMiw3NSBAQCBib29sIElu
c3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmNhbmNlbFBhdXNlRm9yU3BlY2lhbEJyZWFrcG9pbnQoSlND
OjpCcmVha3BvaW50JiBicgogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEluc3BlY3RvckRl
YnVnZ2VyQWdlbnQ6OnBhdXNlKEVycm9yU3RyaW5nJikKK1Byb3RvY29sOjpFcnJvclN0cmluZ09y
PHZvaWQ+IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnBhdXNlKCkKIHsKICAgICBzY2hlZHVsZVBh
dXNlQXROZXh0T3Bwb3J0dW5pdHkoRGVidWdnZXJGcm9udGVuZERpc3BhdGNoZXI6OlJlYXNvbjo6
UGF1c2VPbk5leHRTdGF0ZW1lbnQpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNw
ZWN0b3JEZWJ1Z2dlckFnZW50OjpyZXN1bWUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nKQorUHJv
dG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6cmVzdW1l
KCkKIHsKLSAgICBpZiAoIW1fcGF1c2VkR2xvYmFsT2JqZWN0ICYmICFtX2phdmFTY3JpcHRQYXVz
ZVNjaGVkdWxlZCkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJNdXN0IGJlIHBhdXNlZCBvciB3
YWl0aW5nIHRvIHBhdXNlIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghbV9w
YXVzZWRHbG9iYWxPYmplY3QgJiYgIW1famF2YVNjcmlwdFBhdXNlU2NoZWR1bGVkKQorICAgICAg
ICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk11c3QgYmUgcGF1c2VkIG9yIHdhaXRpbmcgdG8gcGF1
c2UiX3MpOwogCiAgICAgY2FuY2VsUGF1c2VBdE5leHRPcHBvcnR1bml0eSgpOwogICAgIG1fZGVi
dWdnZXIuY29udGludWVQcm9ncmFtKCk7CiAgICAgbV9jb25kaXRpb25Ub0Rpc3BhdGNoUmVzdW1l
ZCA9IFNob3VsZERpc3BhdGNoUmVzdW1lZDo6V2hlbkNvbnRpbnVlZDsKKworICAgIHJldHVybiB7
IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c3RlcE5leHQoRXJyb3JTdHJp
bmcmIGVycm9yU3RyaW5nKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9y
RGVidWdnZXJBZ2VudDo6c3RlcE5leHQoKQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBl
cnJvclN0cmluZzsKKwogICAgIGlmICghYXNzZXJ0UGF1c2VkKGVycm9yU3RyaW5nKSkKLSAgICAg
ICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwog
CiAgICAgd2lsbFN0ZXBBbmRNYXlCZWNvbWVJZGxlKCk7CiAgICAgbV9kZWJ1Z2dlci5zdGVwTmV4
dEV4cHJlc3Npb24oKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVi
dWdnZXJBZ2VudDo6c3RlcE92ZXIoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nKQorUHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c3RlcE92ZXIoKQog
eworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIGlmICghYXNz
ZXJ0UGF1c2VkKGVycm9yU3RyaW5nKSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4g
bWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCiAgICAgd2lsbFN0ZXBBbmRNYXlCZWNvbWVJ
ZGxlKCk7CiAgICAgbV9kZWJ1Z2dlci5zdGVwT3ZlclN0YXRlbWVudCgpOworCisgICAgcmV0dXJu
IHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzdGVwSW50byhFcnJvclN0
cmluZyYgZXJyb3JTdHJpbmcpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0
b3JEZWJ1Z2dlckFnZW50OjpzdGVwSW50bygpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5n
IGVycm9yU3RyaW5nOworCiAgICAgaWYgKCFhc3NlcnRQYXVzZWQoZXJyb3JTdHJpbmcpKQotICAg
ICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7
CiAKICAgICB3aWxsU3RlcEFuZE1heUJlY29tZUlkbGUoKTsKICAgICBtX2RlYnVnZ2VyLnN0ZXBJ
bnRvU3RhdGVtZW50KCk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckRl
YnVnZ2VyQWdlbnQ6OnN0ZXBPdXQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nKQorUHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c3RlcE91dCgpCiB7
CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAgICAgaWYgKCFhc3Nl
cnRQYXVzZWQoZXJyb3JTdHJpbmcpKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBt
YWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAgICB3aWxsU3RlcEFuZE1heUJlY29tZUlk
bGUoKTsKICAgICBtX2RlYnVnZ2VyLnN0ZXBPdXRPZkZ1bmN0aW9uKCk7CisKKyAgICByZXR1cm4g
eyB9OwogfQogCiB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnJlZ2lzdGVySWRsZUhhbmRs
ZXIoKQpAQCAtODc3LDg2ICs5MDUsOTggQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojpk
aWRCZWNvbWVJZGxlKCkKIAogICAgIG1fY29uZGl0aW9uVG9EaXNwYXRjaFJlc3VtZWQgPSBTaG91
bGREaXNwYXRjaFJlc3VtZWQ6Ok5vOwogCi0gICAgaWYgKG1fZW5hYmxlUGF1c2VXaGVuSWRsZSkg
ewotICAgICAgICBFcnJvclN0cmluZyBpZ25vcmVkOwotICAgICAgICBwYXVzZShpZ25vcmVkKTsK
LSAgICB9CisgICAgaWYgKG1fZW5hYmxlUGF1c2VXaGVuSWRsZSkKKyAgICAgICAgcGF1c2UoKTsK
IH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZXRQYXVzZU9uRGVidWdnZXJTdGF0
ZW1lbnRzKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgYm9vbCBlbmFibGVkLCBjb25zdCBKU09O
OjpPYmplY3QqIG9wdGlvbnNQYXlsb2FkKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4g
SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0UGF1c2VPbkRlYnVnZ2VyU3RhdGVtZW50cyhib29s
IGVuYWJsZWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgb3B0aW9ucykKIHsKKyAgICBQcm90b2Nv
bDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBpZiAoIWVuYWJsZWQpIHsKICAgICAg
ICAgbV9kZWJ1Z2dlci5zZXRQYXVzZU9uRGVidWdnZXJTdGF0ZW1lbnRzQnJlYWtwb2ludChudWxs
cHRyKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAotICAg
IGF1dG8gYnJlYWtwb2ludCA9IGRlYnVnZ2VyQnJlYWtwb2ludEZyb21QYXlsb2FkKGVycm9yU3Ry
aW5nLCBvcHRpb25zUGF5bG9hZCk7CisgICAgYXV0byBicmVha3BvaW50ID0gZGVidWdnZXJCcmVh
a3BvaW50RnJvbVBheWxvYWQoZXJyb3JTdHJpbmcsIFdURk1vdmUob3B0aW9ucykpOwogICAgIGlm
ICghYnJlYWtwb2ludCkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoZXJyb3JTdHJpbmcpOwogCiAgICAgbV9kZWJ1Z2dlci5zZXRQYXVzZU9uRGVidWdnZXJT
dGF0ZW1lbnRzQnJlYWtwb2ludChXVEZNb3ZlKGJyZWFrcG9pbnQpKTsKKworICAgIHJldHVybiB7
IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0UGF1c2VPbkV4Y2VwdGlv
bnMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHN0YXRlU3RyaW5nLCBj
b25zdCBKU09OOjpPYmplY3QqIG9wdGlvbnNQYXlsb2FkKQorUHJvdG9jb2w6OkVycm9yU3RyaW5n
T3I8dm9pZD4gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0UGF1c2VPbkV4Y2VwdGlvbnMoY29u
c3QgU3RyaW5nJiBzdGF0ZVN0cmluZywgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBvcHRpb25zKQog
eworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIFJlZlB0cjxK
U0M6OkJyZWFrcG9pbnQ+IGFsbEV4Y2VwdGlvbnNCcmVha3BvaW50OwogICAgIFJlZlB0cjxKU0M6
OkJyZWFrcG9pbnQ+IHVuY2F1Z2h0RXhjZXB0aW9uc0JyZWFrcG9pbnQ7CiAKICAgICBpZiAoc3Rh
dGVTdHJpbmcgPT0gImFsbCIpIHsKLSAgICAgICAgYWxsRXhjZXB0aW9uc0JyZWFrcG9pbnQgPSBk
ZWJ1Z2dlckJyZWFrcG9pbnRGcm9tUGF5bG9hZChlcnJvclN0cmluZywgb3B0aW9uc1BheWxvYWQp
OworICAgICAgICBhbGxFeGNlcHRpb25zQnJlYWtwb2ludCA9IGRlYnVnZ2VyQnJlYWtwb2ludEZy
b21QYXlsb2FkKGVycm9yU3RyaW5nLCBXVEZNb3ZlKG9wdGlvbnMpKTsKICAgICAgICAgaWYgKCFh
bGxFeGNlcHRpb25zQnJlYWtwb2ludCkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAgICAgfSBlbHNlIGlmIChzdGF0
ZVN0cmluZyA9PSAidW5jYXVnaHQiKSB7Ci0gICAgICAgIHVuY2F1Z2h0RXhjZXB0aW9uc0JyZWFr
cG9pbnQgPSBkZWJ1Z2dlckJyZWFrcG9pbnRGcm9tUGF5bG9hZChlcnJvclN0cmluZywgb3B0aW9u
c1BheWxvYWQpOworICAgICAgICB1bmNhdWdodEV4Y2VwdGlvbnNCcmVha3BvaW50ID0gZGVidWdn
ZXJCcmVha3BvaW50RnJvbVBheWxvYWQoZXJyb3JTdHJpbmcsIFdURk1vdmUob3B0aW9ucykpOwog
ICAgICAgICBpZiAoIXVuY2F1Z2h0RXhjZXB0aW9uc0JyZWFrcG9pbnQpCi0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgfSBlbHNlIGlmIChzdGF0ZVN0cmluZyAhPSAibm9uZSIpIHsKLSAgICAgICAg
ZXJyb3JTdHJpbmcgPSBtYWtlU3RyaW5nKCJVbmtub3duIHN0YXRlOiAiX3MsIHN0YXRlU3RyaW5n
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBl
Y3RlZChlcnJvclN0cmluZyk7CisgICAgfSBlbHNlIGlmIChzdGF0ZVN0cmluZyAhPSAibm9uZSIp
CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChtYWtlU3RyaW5nKCJVbmtub3duIHN0YXRl
OiAiX3MsIHN0YXRlU3RyaW5nKSk7CiAKICAgICBtX2RlYnVnZ2VyLnNldFBhdXNlT25BbGxFeGNl
cHRpb25zQnJlYWtwb2ludChXVEZNb3ZlKGFsbEV4Y2VwdGlvbnNCcmVha3BvaW50KSk7CiAgICAg
bV9kZWJ1Z2dlci5zZXRQYXVzZU9uVW5jYXVnaHRFeGNlcHRpb25zQnJlYWtwb2ludChXVEZNb3Zl
KHVuY2F1Z2h0RXhjZXB0aW9uc0JyZWFrcG9pbnQpKTsKKworICAgIHJldHVybiB7IH07CiB9CiAK
LXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0UGF1c2VPbkFzc2VydGlvbnMoRXJyb3JT
dHJpbmcmIGVycm9yU3RyaW5nLCBib29sIGVuYWJsZWQsIGNvbnN0IEpTT046Ok9iamVjdCogb3B0
aW9uc1BheWxvYWQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JEZWJ1
Z2dlckFnZW50OjpzZXRQYXVzZU9uQXNzZXJ0aW9ucyhib29sIGVuYWJsZWQsIFJlZlB0cjxKU09O
OjpPYmplY3Q+JiYgb3B0aW9ucykKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JT
dHJpbmc7CisKICAgICBpZiAoIWVuYWJsZWQpIHsKICAgICAgICAgbV9wYXVzZU9uQXNzZXJ0aW9u
c0JyZWFrcG9pbnQgPSBudWxscHRyOwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB7
IH07CiAgICAgfQogCi0gICAgYXV0byBicmVha3BvaW50ID0gZGVidWdnZXJCcmVha3BvaW50RnJv
bVBheWxvYWQoZXJyb3JTdHJpbmcsIG9wdGlvbnNQYXlsb2FkKTsKKyAgICBhdXRvIGJyZWFrcG9p
bnQgPSBkZWJ1Z2dlckJyZWFrcG9pbnRGcm9tUGF5bG9hZChlcnJvclN0cmluZywgV1RGTW92ZShv
cHRpb25zKSk7CiAgICAgaWYgKCFicmVha3BvaW50KQotICAgICAgICByZXR1cm47CisgICAgICAg
IHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAgICBtX3BhdXNlT25Bc3Nl
cnRpb25zQnJlYWtwb2ludCA9IFdURk1vdmUoYnJlYWtwb2ludCk7CisKKyAgICByZXR1cm4geyB9
OwogfQogCi12b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldFBhdXNlT25NaWNyb3Rhc2tz
KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgYm9vbCBlbmFibGVkLCBjb25zdCBKU09OOjpPYmpl
Y3QqIG9wdGlvbnNQYXlsb2FkKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVj
dG9yRGVidWdnZXJBZ2VudDo6c2V0UGF1c2VPbk1pY3JvdGFza3MoYm9vbCBlbmFibGVkLCBSZWZQ
dHI8SlNPTjo6T2JqZWN0PiYmIG9wdGlvbnMpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5n
IGVycm9yU3RyaW5nOworCiAgICAgaWYgKCFlbmFibGVkKSB7CiAgICAgICAgIG1fcGF1c2VPbk1p
Y3JvdGFza3NCcmVha3BvaW50ID0gbnVsbHB0cjsKLSAgICAgICAgcmV0dXJuOworICAgICAgICBy
ZXR1cm4geyB9OwogICAgIH0KIAotICAgIGF1dG8gYnJlYWtwb2ludCA9IGRlYnVnZ2VyQnJlYWtw
b2ludEZyb21QYXlsb2FkKGVycm9yU3RyaW5nLCBvcHRpb25zUGF5bG9hZCk7CisgICAgYXV0byBi
cmVha3BvaW50ID0gZGVidWdnZXJCcmVha3BvaW50RnJvbVBheWxvYWQoZXJyb3JTdHJpbmcsIFdU
Rk1vdmUob3B0aW9ucykpOwogICAgIGlmICghYnJlYWtwb2ludCkKLSAgICAgICAgcmV0dXJuOwor
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCiAgICAgbV9wYXVz
ZU9uTWljcm90YXNrc0JyZWFrcG9pbnQgPSBXVEZNb3ZlKGJyZWFrcG9pbnQpOworCisgICAgcmV0
dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpldmFsdWF0ZU9uQ2Fs
bEZyYW1lKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBjYWxsRnJhbWVJ
ZCwgY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBjb25zdCBTdHJpbmcqIG9iamVjdEdyb3VwLCBj
b25zdCBib29sKiBpbmNsdWRlQ29tbWFuZExpbmVBUEksIGNvbnN0IGJvb2wqIGRvTm90UGF1c2VP
bkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29sZSwgY29uc3QgYm9vbCogcmV0dXJuQnlWYWx1ZSwgY29u
c3QgYm9vbCogZ2VuZXJhdGVQcmV2aWV3LCBjb25zdCBib29sKiBzYXZlUmVzdWx0LCBjb25zdCBi
b29sKiAvKiBlbXVsYXRlVXNlckdlc3R1cmUgKi8sIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6
UmVtb3RlT2JqZWN0PiYgcmVzdWx0LCBPcHRpb25hbDxib29sPiYgd2FzVGhyb3duLCBPcHRpb25h
bDxpbnQ+JiBzYXZlZFJlc3VsdEluZGV4KQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8c3RkOjp0
dXBsZTxSZWY8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4sIE9wdGlvbmFsPGJvb2w+
IC8qIHdhc1Rocm93biAqLywgT3B0aW9uYWw8aW50PiAvKiBzYXZlZFJlc3VsdEluZGV4ICovPj4g
SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZXZhbHVhdGVPbkNhbGxGcmFtZShjb25zdCBQcm90b2Nv
bDo6RGVidWdnZXI6OkNhbGxGcmFtZUlkJiBjYWxsRnJhbWVJZCwgY29uc3QgU3RyaW5nJiBleHBy
ZXNzaW9uLCBjb25zdCBTdHJpbmcmIG9iamVjdEdyb3VwLCBPcHRpb25hbDxib29sPiYmIGluY2x1
ZGVDb21tYW5kTGluZUFQSSwgT3B0aW9uYWw8Ym9vbD4mJiBkb05vdFBhdXNlT25FeGNlcHRpb25z
QW5kTXV0ZUNvbnNvbGUsIE9wdGlvbmFsPGJvb2w+JiYgcmV0dXJuQnlWYWx1ZSwgT3B0aW9uYWw8
Ym9vbD4mJiBnZW5lcmF0ZVByZXZpZXcsIE9wdGlvbmFsPGJvb2w+JiYgc2F2ZVJlc3VsdCwgT3B0
aW9uYWw8Ym9vbD4mJiAgLyogZW11bGF0ZVVzZXJHZXN0dXJlICovKQogeworICAgIFByb3RvY29s
OjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIGlmICghYXNzZXJ0UGF1c2VkKGVycm9y
U3RyaW5nKSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQo
ZXJyb3JTdHJpbmcpOwogCiAgICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHQgPSBtX2lu
amVjdGVkU2NyaXB0TWFuYWdlci5pbmplY3RlZFNjcmlwdEZvck9iamVjdElkKGNhbGxGcmFtZUlk
KTsKLSAgICBpZiAoaW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKSB7Ci0gICAgICAgIGVycm9y
U3RyaW5nID0gIk1pc3NpbmcgaW5qZWN0ZWQgc2NyaXB0IGZvciBnaXZlbiBjYWxsRnJhbWVJZCJf
czsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoaW5qZWN0ZWRTY3JpcHQuaGFzTm9W
YWx1ZSgpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk1pc3NpbmcgaW5qZWN0ZWQg
c2NyaXB0IGZvciBnaXZlbiBjYWxsRnJhbWVJZCJfcyk7CiAKICAgICBKU0M6OkRlYnVnZ2VyOjpU
ZW1wb3JhcmlseURpc2FibGVFeGNlcHRpb25CcmVha3BvaW50cyB0ZW1wb3JhcmlseURpc2FibGVF
eGNlcHRpb25CcmVha3BvaW50cyhtX2RlYnVnZ2VyKTsKIApAQCAtOTY2LDI4ICsxMDA2LDMxIEBA
IHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZXZhbHVhdGVPbkNhbGxGcmFtZShFcnJvclN0
cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0CiAgICAgICAgIG11dGVDb25zb2xlKCk7CiAgICAgfQog
Ci0gICAgaW5qZWN0ZWRTY3JpcHQuZXZhbHVhdGVPbkNhbGxGcmFtZShlcnJvclN0cmluZywgbV9j
dXJyZW50Q2FsbFN0YWNrLmdldCgpLCBjYWxsRnJhbWVJZCwgZXhwcmVzc2lvbiwKLSAgICAgICAg
b2JqZWN0R3JvdXAgPyAqb2JqZWN0R3JvdXAgOiBlbXB0eVN0cmluZygpLCBpbmNsdWRlQ29tbWFu
ZExpbmVBUEkgJiYgKmluY2x1ZGVDb21tYW5kTGluZUFQSSwgcmV0dXJuQnlWYWx1ZSAmJiAqcmV0
dXJuQnlWYWx1ZSwgZ2VuZXJhdGVQcmV2aWV3ICYmICpnZW5lcmF0ZVByZXZpZXcsIHNhdmVSZXN1
bHQgJiYgKnNhdmVSZXN1bHQsCi0gICAgICAgIHJlc3VsdCwgd2FzVGhyb3duLCBzYXZlZFJlc3Vs
dEluZGV4KTsKKyAgICBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4gcmVz
dWx0OworICAgIE9wdGlvbmFsPGJvb2w+IHdhc1Rocm93bjsKKyAgICBPcHRpb25hbDxpbnQ+IHNh
dmVkUmVzdWx0SW5kZXg7CisKKyAgICBpbmplY3RlZFNjcmlwdC5ldmFsdWF0ZU9uQ2FsbEZyYW1l
KGVycm9yU3RyaW5nLCBtX2N1cnJlbnRDYWxsU3RhY2suZ2V0KCksIGNhbGxGcmFtZUlkLCBleHBy
ZXNzaW9uLCBvYmplY3RHcm91cCwgaW5jbHVkZUNvbW1hbmRMaW5lQVBJLnZhbHVlT3IoZmFsc2Up
LCByZXR1cm5CeVZhbHVlLnZhbHVlT3IoZmFsc2UpLCBnZW5lcmF0ZVByZXZpZXcudmFsdWVPcihm
YWxzZSksIHNhdmVSZXN1bHQudmFsdWVPcihmYWxzZSksIHJlc3VsdCwgd2FzVGhyb3duLCBzYXZl
ZFJlc3VsdEluZGV4KTsKIAogICAgIGlmIChwYXVzZUFuZE11dGUpCiAgICAgICAgIHVubXV0ZUNv
bnNvbGUoKTsKKworICAgIGlmICghcmVzdWx0KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0
ZWQoZXJyb3JTdHJpbmcpOworCisgICAgcmV0dXJuIHsgeyByZXN1bHQucmVsZWFzZU5vbk51bGwo
KSwgV1RGTW92ZSh3YXNUaHJvd24pLCBXVEZNb3ZlKHNhdmVkUmVzdWx0SW5kZXgpIH0gfTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZXRTaG91bGRCbGFja2JveFVSTChFcnJv
clN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgdXJsLCBib29sIHNob3VsZEJsYWNr
Ym94LCBjb25zdCBib29sKiBvcHRpb25hbENhc2VTZW5zaXRpdmUsIGNvbnN0IGJvb2wqIG9wdGlv
bmFsSXNSZWdleCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRlYnVn
Z2VyQWdlbnQ6OnNldFNob3VsZEJsYWNrYm94VVJMKGNvbnN0IFN0cmluZyYgdXJsLCBib29sIHNo
b3VsZEJsYWNrYm94LCBPcHRpb25hbDxib29sPiYmIG9wdGlvbmFsQ2FzZVNlbnNpdGl2ZSwgT3B0
aW9uYWw8Ym9vbD4mJiBvcHRpb25hbElzUmVnZXgpCiB7Ci0gICAgaWYgKHVybC5pc0VtcHR5KCkp
IHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiVVJMIG11c3Qgbm90IGJlIGVtcHR5Il9zOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICh1cmwuaXNFbXB0eSgpKQorICAgICAgICByZXR1
cm4gbWFrZVVuZXhwZWN0ZWQoIlVSTCBtdXN0IG5vdCBiZSBlbXB0eSJfcyk7CiAKLSAgICBib29s
IGNhc2VTZW5zaXRpdmUgPSBvcHRpb25hbENhc2VTZW5zaXRpdmUgJiYgKm9wdGlvbmFsQ2FzZVNl
bnNpdGl2ZTsKLSAgICBib29sIGlzUmVnZXggPSBvcHRpb25hbElzUmVnZXggJiYgKm9wdGlvbmFs
SXNSZWdleDsKKyAgICBib29sIGNhc2VTZW5zaXRpdmUgPSBvcHRpb25hbENhc2VTZW5zaXRpdmUu
dmFsdWVPcihmYWxzZSk7CisgICAgYm9vbCBpc1JlZ2V4ID0gb3B0aW9uYWxJc1JlZ2V4LnZhbHVl
T3IoZmFsc2UpOwogCi0gICAgaWYgKCFjYXNlU2Vuc2l0aXZlICYmICFpc1JlZ2V4ICYmIGlzV2Vi
S2l0SW5qZWN0ZWRTY3JpcHQodXJsKSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJCbGFja2Jv
eGluZyBvZiBpbnRlcm5hbCBzY3JpcHRzIGlzIGNvbnRyb2xsZWQgYnkgJ0RlYnVnZ2VyLnNldFBh
dXNlRm9ySW50ZXJuYWxTY3JpcHRzJyJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBp
ZiAoIWNhc2VTZW5zaXRpdmUgJiYgIWlzUmVnZXggJiYgaXNXZWJLaXRJbmplY3RlZFNjcmlwdCh1
cmwpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkJsYWNrYm94aW5nIG9mIGludGVy
bmFsIHNjcmlwdHMgaXMgY29udHJvbGxlZCBieSAnRGVidWdnZXIuc2V0UGF1c2VGb3JJbnRlcm5h
bFNjcmlwdHMnIl9zKTsKIAogICAgIEJsYWNrYm94Q29uZmlnIGNvbmZpZyB7IHVybCwgY2FzZVNl
bnNpdGl2ZSwgaXNSZWdleCB9OwogICAgIGlmIChzaG91bGRCbGFja2JveCkKQEAgLTEwMDQsNiAr
MTA0Nyw4IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0U2hvdWxkQmxhY2tib3hV
UkwoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zCiAgICAgICAgICAgICBibGFja2JveFR5
cGUgPSBKU0M6OkRlYnVnZ2VyOjpCbGFja2JveFR5cGU6OkRlZmVycmVkOwogICAgICAgICBtX2Rl
YnVnZ2VyLnNldEJsYWNrYm94VHlwZShzb3VyY2VJRCwgYmxhY2tib3hUeXBlKTsKICAgICB9CisK
KyAgICByZXR1cm4geyB9OwogfQogCiBib29sIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNob3Vs
ZEJsYWNrYm94VVJMKGNvbnN0IFN0cmluZyYgdXJsKSBjb25zdApAQCAtMTAzOSwxMCArMTA4NCwx
MCBAQCBTdHJpbmcgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c291cmNlTWFwVVJMRm9yU2NyaXB0
KGNvbnN0IEpTQzo6RGVidWdnZXI6OlNjcmlwdAogICAgIHJldHVybiBzY3JpcHQuc291cmNlTWFw
cGluZ1VSTDsKIH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZXRQYXVzZUZvcklu
dGVybmFsU2NyaXB0cyhFcnJvclN0cmluZyYsIGJvb2wgc2hvdWxkUGF1c2UpCitQcm90b2NvbDo6
RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZXRQYXVzZUZvcklu
dGVybmFsU2NyaXB0cyhib29sIHNob3VsZFBhdXNlKQogewogICAgIGlmIChzaG91bGRQYXVzZSA9
PSBtX3BhdXNlRm9ySW50ZXJuYWxTY3JpcHRzKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJl
dHVybiB7IH07CiAKICAgICBtX3BhdXNlRm9ySW50ZXJuYWxTY3JpcHRzID0gc2hvdWxkUGF1c2U7
CiAKQEAgLTEwNTIsNiArMTA5Nyw4IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0
UGF1c2VGb3JJbnRlcm5hbFNjcmlwdHMoRXJyb3JTdHJpbmcmLCBib29sIHNob3VsCiAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgbV9kZWJ1Z2dlci5zZXRCbGFja2JveFR5cGUoc291cmNl
SUQsIGJsYWNrYm94VHlwZSk7CiAgICAgfQorCisgICAgcmV0dXJuIHsgfTsKIH0KIAogdm9pZCBJ
bnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkaWRQYXJzZVNvdXJjZShKU0M6OlNvdXJjZUlEIHNvdXJj
ZUlELCBjb25zdCBKU0M6OkRlYnVnZ2VyOjpTY3JpcHQmIHNjcmlwdCkKQEAgLTEwNjEsMTIgKzEx
MDgsNyBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpZFBhcnNlU291cmNlKEpTQzo6
U291cmNlSUQgc291cmNlSUQsIGNvbnN0IEpTQzo6RAogICAgIFN0cmluZyBzb3VyY2VVUkwgPSBz
Y3JpcHQuc291cmNlVVJMOwogICAgIFN0cmluZyBzb3VyY2VNYXBwaW5nVVJMID0gc291cmNlTWFw
VVJMRm9yU2NyaXB0KHNjcmlwdCk7CiAKLSAgICBjb25zdCBib29sIGlzTW9kdWxlID0gc2NyaXB0
LnNvdXJjZVByb3ZpZGVyLT5zb3VyY2VUeXBlKCkgPT0gSlNDOjpTb3VyY2VQcm92aWRlclNvdXJj
ZVR5cGU6Ok1vZHVsZTsKLSAgICBjb25zdCBib29sKiBpc0NvbnRlbnRTY3JpcHQgPSBzY3JpcHQu
aXNDb250ZW50U2NyaXB0ID8gJnNjcmlwdC5pc0NvbnRlbnRTY3JpcHQgOiBudWxscHRyOwotICAg
IFN0cmluZyogc291cmNlVVJMUGFyYW0gPSBoYXNTb3VyY2VVUkwgPyAmc291cmNlVVJMIDogbnVs
bHB0cjsKLSAgICBTdHJpbmcqIHNvdXJjZU1hcFVSTFBhcmFtID0gc291cmNlTWFwcGluZ1VSTC5p
c0VtcHR5KCkgPyBudWxscHRyIDogJnNvdXJjZU1hcHBpbmdVUkw7Ci0KLSAgICBtX2Zyb250ZW5k
RGlzcGF0Y2hlci0+c2NyaXB0UGFyc2VkKHNjcmlwdElEU3RyLCBzY3JpcHQudXJsLCBzY3JpcHQu
c3RhcnRMaW5lLCBzY3JpcHQuc3RhcnRDb2x1bW4sIHNjcmlwdC5lbmRMaW5lLCBzY3JpcHQuZW5k
Q29sdW1uLCBpc0NvbnRlbnRTY3JpcHQsIHNvdXJjZVVSTFBhcmFtLCBzb3VyY2VNYXBVUkxQYXJh
bSwgaXNNb2R1bGUgPyAmaXNNb2R1bGUgOiBudWxscHRyKTsKKyAgICBtX2Zyb250ZW5kRGlzcGF0
Y2hlci0+c2NyaXB0UGFyc2VkKHNjcmlwdElEU3RyLCBzY3JpcHQudXJsLCBzY3JpcHQuc3RhcnRM
aW5lLCBzY3JpcHQuc3RhcnRDb2x1bW4sIHNjcmlwdC5lbmRMaW5lLCBzY3JpcHQuZW5kQ29sdW1u
LCBzY3JpcHQuaXNDb250ZW50U2NyaXB0LCBzb3VyY2VVUkwsIHNvdXJjZU1hcHBpbmdVUkwsIHNj
cmlwdC5zb3VyY2VQcm92aWRlci0+c291cmNlVHlwZSgpID09IEpTQzo6U291cmNlUHJvdmlkZXJT
b3VyY2VUeXBlOjpNb2R1bGUpOwogCiAgICAgbV9zY3JpcHRzLnNldChzb3VyY2VJRCwgc2NyaXB0
KTsKIApAQCAtMTE4MCwxMiArMTIyMiwxMyBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6
OmRpZFBhdXNlKEpTQzo6SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNDOjpEZQogICAg
ICAgICBpZiAoYXV0byBkZWJ1Z2dlckJyZWFrcG9pbnRJZCA9IG1fZGVidWdnZXIucGF1c2luZ0Jy
ZWFrcG9pbnRJRCgpKSB7CiAgICAgICAgICAgICBBU1NFUlQoIW1fY29udGludWVUb0xvY2F0aW9u
RGVidWdnZXJCcmVha3BvaW50IHx8IGRlYnVnZ2VyQnJlYWtwb2ludElkICE9IG1fY29udGludWVU
b0xvY2F0aW9uRGVidWdnZXJCcmVha3BvaW50LT5pZCgpKTsKICAgICAgICAgICAgIGRhdGEgPSBK
U09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgICAgICAgICAgZGF0YS0+c2V0U3RyaW5nKCJvcmln
aW5hbFJlYXNvbiJfcywgUHJvdG9jb2w6Okluc3BlY3RvckhlbHBlcnM6OmdldEVudW1Db25zdGFu
dFZhbHVlKERlYnVnZ2VyRnJvbnRlbmREaXNwYXRjaGVyOjpSZWFzb246OkJyZWFrcG9pbnQpKTsK
LSAgICAgICAgICAgIGRhdGEtPnNldFZhbHVlKCJvcmlnaW5hbERhdGEiX3MsIGJ1aWxkQnJlYWtw
b2ludFBhdXNlUmVhc29uKGRlYnVnZ2VyQnJlYWtwb2ludElkKSk7CisgICAgICAgICAgICBkYXRh
LT5zZXRTdHJpbmcoIm9yaWdpbmFsUmVhc29uIl9zLCBQcm90b2NvbDo6SGVscGVyczo6Z2V0RW51
bUNvbnN0YW50VmFsdWUoRGVidWdnZXJGcm9udGVuZERpc3BhdGNoZXI6OlJlYXNvbjo6QnJlYWtw
b2ludCkpOworICAgICAgICAgICAgaWYgKGF1dG8gcGF1c2VSZWFzb24gPSBidWlsZEJyZWFrcG9p
bnRQYXVzZVJlYXNvbihkZWJ1Z2dlckJyZWFrcG9pbnRJZCkpCisgICAgICAgICAgICAgICAgZGF0
YS0+c2V0VmFsdWUoIm9yaWdpbmFsRGF0YSJfcywgcGF1c2VSZWFzb24ucmVsZWFzZU5vbk51bGwo
KSk7CiAgICAgICAgIH0gZWxzZSBpZiAobV9wcmVCbGFja2JveFBhdXNlRGF0YSkgewogICAgICAg
ICAgICAgZGF0YSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgICAgICAgICBkYXRhLT5z
ZXRTdHJpbmcoIm9yaWdpbmFsUmVhc29uIl9zLCBQcm90b2NvbDo6SW5zcGVjdG9ySGVscGVyczo6
Z2V0RW51bUNvbnN0YW50VmFsdWUobV9wcmVCbGFja2JveFBhdXNlUmVhc29uKSk7Ci0gICAgICAg
ICAgICBkYXRhLT5zZXRWYWx1ZSgib3JpZ2luYWxEYXRhIl9zLCBtX3ByZUJsYWNrYm94UGF1c2VE
YXRhKTsKKyAgICAgICAgICAgIGRhdGEtPnNldFN0cmluZygib3JpZ2luYWxSZWFzb24iX3MsIFBy
b3RvY29sOjpIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShtX3ByZUJsYWNrYm94UGF1c2VS
ZWFzb24pKTsKKyAgICAgICAgICAgIGRhdGEtPnNldFZhbHVlKCJvcmlnaW5hbERhdGEiX3MsIG1f
cHJlQmxhY2tib3hQYXVzZURhdGEucmVsZWFzZU5vbk51bGwoKSk7CiAgICAgICAgIH0KICAgICAg
ICAgdXBkYXRlUGF1c2VSZWFzb25BbmREYXRhKERlYnVnZ2VyRnJvbnRlbmREaXNwYXRjaGVyOjpS
ZWFzb246OkJsYWNrYm94ZWRTY3JpcHQsIFdURk1vdmUoZGF0YSkpOwogICAgIH0KQEAgLTEyMDYs
NyArMTI0OSw3IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlkUGF1c2UoSlNDOjpK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0M6OkRlCiAgICAgICAgICAgICBhc3luY1N0
YWNrVHJhY2UgPSBpdC0+dmFsdWUtPmJ1aWxkSW5zcGVjdG9yT2JqZWN0KCk7CiAgICAgfQogCi0g
ICAgbV9mcm9udGVuZERpc3BhdGNoZXItPnBhdXNlZChjdXJyZW50Q2FsbEZyYW1lcyhpbmplY3Rl
ZFNjcmlwdCksIG1fcGF1c2VSZWFzb24sIG1fcGF1c2VEYXRhLCBhc3luY1N0YWNrVHJhY2UpOwor
ICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5wYXVzZWQoY3VycmVudENhbGxGcmFtZXMoaW5qZWN0
ZWRTY3JpcHQpLCBQcm90b2NvbDo6SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUobV9wYXVz
ZVJlYXNvbiksIG1fcGF1c2VEYXRhLmNvcHlSZWYoKSwgV1RGTW92ZShhc3luY1N0YWNrVHJhY2Up
KTsKIAogICAgIG1famF2YVNjcmlwdFBhdXNlU2NoZWR1bGVkID0gZmFsc2U7CiAKQEAgLTEyMzEs
MTIgKzEyNzQsMTUgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpicmVha3BvaW50QWN0
aW9uUHJvYmUoSlNDOjpKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2IKIHsKICAgICBJbmplY3RlZFNj
cmlwdCBpbmplY3RlZFNjcmlwdCA9IG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmluamVjdGVkU2Ny
aXB0Rm9yKGdsb2JhbE9iamVjdCk7CiAgICAgYXV0byBwYXlsb2FkID0gaW5qZWN0ZWRTY3JpcHQu
d3JhcE9iamVjdChzYW1wbGUsIG9iamVjdEdyb3VwRm9yQnJlYWtwb2ludEFjdGlvbihhY3Rpb25J
RCksIHRydWUpOworICAgIGlmICghcGF5bG9hZCkKKyAgICAgICAgcmV0dXJuOworCiAgICAgYXV0
byByZXN1bHQgPSBQcm90b2NvbDo6RGVidWdnZXI6OlByb2JlU2FtcGxlOjpjcmVhdGUoKQogICAg
ICAgICAuc2V0UHJvYmVJZChhY3Rpb25JRCkKICAgICAgICAgLnNldEJhdGNoSWQoYmF0Y2hJZCkK
ICAgICAgICAgLnNldFNhbXBsZUlkKHNhbXBsZUlkKQogICAgICAgICAuc2V0VGltZXN0YW1wKG1f
aW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmluc3BlY3RvckVudmlyb25tZW50KCkuZXhlY3V0aW9uU3Rv
cHdhdGNoKCkuZWxhcHNlZFRpbWUoKS5zZWNvbmRzKCkpCi0gICAgICAgIC5zZXRQYXlsb2FkKFdU
Rk1vdmUocGF5bG9hZCkpCisgICAgICAgIC5zZXRQYXlsb2FkKHBheWxvYWQucmVsZWFzZU5vbk51
bGwoKSkKICAgICAgICAgLnJlbGVhc2UoKTsKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+ZGlk
U2FtcGxlUHJvYmUoV1RGTW92ZShyZXN1bHQpKTsKIH0KQEAgLTEyNjcsOSArMTMxMyw4IEBAIHZv
aWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6YnJlYWtQcm9ncmFtKERlYnVnZ2VyRnJvbnRlbmRE
aXNwYXRjaGVyOjpSZWFzb24gcmVhCiAKIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6Y2xl
YXJJbnNwZWN0b3JCcmVha3BvaW50U3RhdGUoKQogewotICAgIEVycm9yU3RyaW5nIGlnbm9yZWQ7
CiAgICAgZm9yIChhdXRvJiBwcm90b2NvbEJyZWFrcG9pbnRJRCA6IGNvcHlUb1ZlY3RvcihtX2Rl
YnVnZ2VyQnJlYWtwb2ludHNGb3JQcm90b2NvbEJyZWFrcG9pbnRJRC5rZXlzKCkpKQotICAgICAg
ICByZW1vdmVCcmVha3BvaW50KGlnbm9yZWQsIHByb3RvY29sQnJlYWtwb2ludElEKTsKKyAgICAg
ICAgcmVtb3ZlQnJlYWtwb2ludChwcm90b2NvbEJyZWFrcG9pbnRJRCk7CiAKICAgICBtX3Byb3Rv
Y29sQnJlYWtwb2ludEZvclByb3RvY29sQnJlYWtwb2ludElELmNsZWFyKCk7CiAKQEAgLTEzMTcs
NyArMTM2Miw3IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlkQ2xlYXJHbG9iYWxP
YmplY3QoKQogICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5nbG9iYWxPYmplY3RDbGVhcmVkKCk7
CiB9CiAKLWJvb2wgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6YXNzZXJ0UGF1c2VkKEVycm9yU3Ry
aW5nJiBlcnJvclN0cmluZykKK2Jvb2wgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6YXNzZXJ0UGF1
c2VkKFByb3RvY29sOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCiB7CiAgICAgaWYgKCFtX3Bh
dXNlZEdsb2JhbE9iamVjdCkgewogICAgICAgICBlcnJvclN0cmluZyA9ICJNdXN0IGJlIHBhdXNl
ZCJfczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRz
L0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3IvYWdlbnRzL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuaAppbmRleCAzMGZmOWYzYzI2ZDFhZTA0
NjZhNzFhNWJmNjM2NjE4Mjk1NGZhMmQ4Li40ZmMzZjg0YTZlMjEyYjg4NWI2YTJmMzI4ZjgxZWRm
NzVmOTBhNDZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2Fn
ZW50cy9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5oCkBAIC00OCw3ICs0OCw2
IEBAIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogY2xhc3MgQXN5bmNTdGFja1RyYWNlOwogY2xhc3Mg
SW5qZWN0ZWRTY3JpcHQ7CiBjbGFzcyBJbmplY3RlZFNjcmlwdE1hbmFnZXI7Ci10eXBlZGVmIFN0
cmluZyBFcnJvclN0cmluZzsKIAogY2xhc3MgSlNfRVhQT1JUX1BSSVZBVEUgSW5zcGVjdG9yRGVi
dWdnZXJBZ2VudCA6IHB1YmxpYyBJbnNwZWN0b3JBZ2VudEJhc2UsIHB1YmxpYyBEZWJ1Z2dlckJh
Y2tlbmREaXNwYXRjaGVySGFuZGxlciwgcHVibGljIEpTQzo6RGVidWdnZXI6Ok9ic2VydmVyIHsK
ICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbnNwZWN0b3JEZWJ1Z2dlckFnZW50KTsKQEAgLTU2
LDcgKzU1LDcgQEAgY2xhc3MgSlNfRVhQT1JUX1BSSVZBVEUgSW5zcGVjdG9yRGVidWdnZXJBZ2Vu
dCA6IHB1YmxpYyBJbnNwZWN0b3JBZ2VudEJhc2UsIHB1YmwKIHB1YmxpYzoKICAgICB+SW5zcGVj
dG9yRGVidWdnZXJBZ2VudCgpIG92ZXJyaWRlOwogCi0gICAgc3RhdGljIFJlZlB0cjxKU0M6OkJy
ZWFrcG9pbnQ+IGRlYnVnZ2VyQnJlYWtwb2ludEZyb21QYXlsb2FkKEVycm9yU3RyaW5nJiwgY29u
c3QgSlNPTjo6T2JqZWN0KiBvcHRpb25zUGF5bG9hZCk7CisgICAgc3RhdGljIFJlZlB0cjxKU0M6
OkJyZWFrcG9pbnQ+IGRlYnVnZ2VyQnJlYWtwb2ludEZyb21QYXlsb2FkKFByb3RvY29sOjpFcnJv
clN0cmluZyYsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgb3B0aW9ucyk7CiAKICAgICBzdGF0aWMg
Y29uc3QgY2hhciogY29uc3QgYmFja3RyYWNlT2JqZWN0R3JvdXA7CiAKQEAgLTY2LDMxICs2NSwz
MSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGVuYWJsZWQoKSBjb25zdCB7IHJldHVybiBt
X2VuYWJsZWQ7IH0KIAogICAgIC8vIERlYnVnZ2VyQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyCi0g
ICAgdm9pZCBlbmFibGUoRXJyb3JTdHJpbmcmKSBmaW5hbDsKLSAgICB2b2lkIGRpc2FibGUoRXJy
b3JTdHJpbmcmKSBmaW5hbDsKLSAgICB2b2lkIHNldEFzeW5jU3RhY2tUcmFjZURlcHRoKEVycm9y
U3RyaW5nJiwgaW50IGRlcHRoKSBmaW5hbDsKLSAgICB2b2lkIHNldEJyZWFrcG9pbnRzQWN0aXZl
KEVycm9yU3RyaW5nJiwgYm9vbCBhY3RpdmUpIGZpbmFsOwotICAgIHZvaWQgc2V0QnJlYWtwb2lu
dEJ5VXJsKEVycm9yU3RyaW5nJiwgaW50IGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyogb3B0aW9u
YWxVUkwsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxVUkxSZWdleCwgY29uc3QgaW50KiBvcHRpb25h
bENvbHVtbk51bWJlciwgY29uc3QgSlNPTjo6T2JqZWN0KiBvcHRpb25zLCBQcm90b2NvbDo6RGVi
dWdnZXI6OkJyZWFrcG9pbnRJZCosIFJlZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpEZWJ1
Z2dlcjo6TG9jYXRpb24+PiYgbG9jYXRpb25zKSBmaW5hbDsKLSAgICB2b2lkIHNldEJyZWFrcG9p
bnQoRXJyb3JTdHJpbmcmLCBjb25zdCBKU09OOjpPYmplY3QmIGxvY2F0aW9uLCBjb25zdCBKU09O
OjpPYmplY3QqIG9wdGlvbnMsIFByb3RvY29sOjpEZWJ1Z2dlcjo6QnJlYWtwb2ludElkKiBvdXRC
cmVha3BvaW50SWQsIFJlZlB0cjxQcm90b2NvbDo6RGVidWdnZXI6OkxvY2F0aW9uPiYgb3V0QWN0
dWFsTG9jYXRpb24pIGZpbmFsOwotICAgIHZvaWQgcmVtb3ZlQnJlYWtwb2ludChFcnJvclN0cmlu
ZyYsIGNvbnN0IFN0cmluZyYgYnJlYWtwb2ludElkZW50aWZpZXIpIGZpbmFsOwotICAgIHZvaWQg
Y29udGludWVVbnRpbE5leHRSdW5Mb29wKEVycm9yU3RyaW5nJikgZmluYWw7Ci0gICAgdm9pZCBj
b250aW51ZVRvTG9jYXRpb24oRXJyb3JTdHJpbmcmLCBjb25zdCBKU09OOjpPYmplY3QmIGxvY2F0
aW9uKSBmaW5hbDsKLSAgICB2b2lkIHN0ZXBOZXh0KEVycm9yU3RyaW5nJikgZmluYWw7Ci0gICAg
dm9pZCBzdGVwT3ZlcihFcnJvclN0cmluZyYpIGZpbmFsOwotICAgIHZvaWQgc3RlcEludG8oRXJy
b3JTdHJpbmcmKSBmaW5hbDsKLSAgICB2b2lkIHN0ZXBPdXQoRXJyb3JTdHJpbmcmKSBmaW5hbDsK
LSAgICB2b2lkIHBhdXNlKEVycm9yU3RyaW5nJikgZmluYWw7Ci0gICAgdm9pZCByZXN1bWUoRXJy
b3JTdHJpbmcmKSBmaW5hbDsKLSAgICB2b2lkIHNlYXJjaEluQ29udGVudChFcnJvclN0cmluZyYs
IGNvbnN0IFN0cmluZyYgc2NyaXB0SUQsIGNvbnN0IFN0cmluZyYgcXVlcnksIGNvbnN0IGJvb2wq
IG9wdGlvbmFsQ2FzZVNlbnNpdGl2ZSwgY29uc3QgYm9vbCogb3B0aW9uYWxJc1JlZ2V4LCBSZWZQ
dHI8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6R2VuZXJpY1R5cGVzOjpTZWFyY2hNYXRjaD4+Jikg
ZmluYWw7Ci0gICAgdm9pZCBnZXRTY3JpcHRTb3VyY2UoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJp
bmcmIHNjcmlwdElELCBTdHJpbmcqIHNjcmlwdFNvdXJjZSkgZmluYWw7Ci0gICAgdm9pZCBnZXRG
dW5jdGlvbkRldGFpbHMoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGZ1bmN0aW9uSWQsIFJl
ZlB0cjxQcm90b2NvbDo6RGVidWdnZXI6OkZ1bmN0aW9uRGV0YWlscz4mKSBmaW5hbDsKLSAgICB2
b2lkIHNldFBhdXNlT25EZWJ1Z2dlclN0YXRlbWVudHMoRXJyb3JTdHJpbmcmLCBib29sIGVuYWJs
ZWQsIGNvbnN0IEpTT046Ok9iamVjdCogb3B0aW9ucykgZmluYWw7Ci0gICAgdm9pZCBzZXRQYXVz
ZU9uRXhjZXB0aW9ucyhFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgcGF1c2VTdGF0ZSwgY29u
c3QgSlNPTjo6T2JqZWN0KiBvcHRpb25zKSBmaW5hbDsKLSAgICB2b2lkIHNldFBhdXNlT25Bc3Nl
cnRpb25zKEVycm9yU3RyaW5nJiwgYm9vbCBlbmFibGVkLCBjb25zdCBKU09OOjpPYmplY3QqIG9w
dGlvbnMpIGZpbmFsOwotICAgIHZvaWQgc2V0UGF1c2VPbk1pY3JvdGFza3MoRXJyb3JTdHJpbmcm
LCBib29sIGVuYWJsZWQsIGNvbnN0IEpTT046Ok9iamVjdCogb3B0aW9ucykgZmluYWw7Ci0gICAg
dm9pZCBzZXRQYXVzZUZvckludGVybmFsU2NyaXB0cyhFcnJvclN0cmluZyYsIGJvb2wgc2hvdWxk
UGF1c2UpIGZpbmFsOwotICAgIHZvaWQgZXZhbHVhdGVPbkNhbGxGcmFtZShFcnJvclN0cmluZyYs
IGNvbnN0IFN0cmluZyYgY2FsbEZyYW1lSWQsIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgY29u
c3QgU3RyaW5nKiBvYmplY3RHcm91cCwgY29uc3QgYm9vbCogaW5jbHVkZUNvbW1hbmRMaW5lQVBJ
LCBjb25zdCBib29sKiBkb05vdFBhdXNlT25FeGNlcHRpb25zQW5kTXV0ZUNvbnNvbGUsIGNvbnN0
IGJvb2wqIHJldHVybkJ5VmFsdWUsIGNvbnN0IGJvb2wqIGdlbmVyYXRlUHJldmlldywgY29uc3Qg
Ym9vbCogc2F2ZVJlc3VsdCwgY29uc3QgYm9vbCogZW11bGF0ZVVzZXJHZXN0dXJlLCBSZWZQdHI8
UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3VsdCwgT3B0aW9uYWw8Ym9vbD4m
IHdhc1Rocm93biwgT3B0aW9uYWw8aW50PiYgc2F2ZWRSZXN1bHRJbmRleCkgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCBzZXRTaG91bGRCbGFja2JveFVSTChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYg
dXJsLCBib29sIHNob3VsZEJsYWNrYm94LCBjb25zdCBib29sKiBjYXNlU2Vuc2l0aXZlLCBjb25z
dCBib29sKiBpc1JlZ2V4KSBmaW5hbDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lk
PiBlbmFibGUoKSBmaW5hbDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBkaXNh
YmxlKCkgZmluYWw7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc2V0QXN5bmNT
dGFja1RyYWNlRGVwdGgoaW50KSBmaW5hbDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2
b2lkPiBzZXRCcmVha3BvaW50c0FjdGl2ZShib29sKSBmaW5hbDsKKyAgICBQcm90b2NvbDo6RXJy
b3JTdHJpbmdPcjxzdGQ6OnR1cGxlPFByb3RvY29sOjpEZWJ1Z2dlcjo6QnJlYWtwb2ludElkLCBS
ZWY8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6RGVidWdnZXI6OkxvY2F0aW9uPj4+PiBzZXRCcmVh
a3BvaW50QnlVcmwoaW50IGxpbmVOdW1iZXIsIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJp
bmcmIHVybFJlZ2V4LCBPcHRpb25hbDxpbnQ+JiYgY29sdW1uTnVtYmVyLCBSZWZQdHI8SlNPTjo6
T2JqZWN0PiYmIG9wdGlvbnMpIGZpbmFsOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHN0
ZDo6dHVwbGU8UHJvdG9jb2w6OkRlYnVnZ2VyOjpCcmVha3BvaW50SWQsIFJlZjxQcm90b2NvbDo6
RGVidWdnZXI6OkxvY2F0aW9uPj4+IHNldEJyZWFrcG9pbnQoUmVmPEpTT046Ok9iamVjdD4mJiBs
b2NhdGlvbiwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBvcHRpb25zKSBmaW5hbDsKKyAgICBQcm90
b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiByZW1vdmVCcmVha3BvaW50KGNvbnN0IFByb3RvY29s
OjpEZWJ1Z2dlcjo6QnJlYWtwb2ludElkJikgZmluYWw7CisgICAgUHJvdG9jb2w6OkVycm9yU3Ry
aW5nT3I8dm9pZD4gY29udGludWVVbnRpbE5leHRSdW5Mb29wKCkgZmluYWw7CisgICAgUHJvdG9j
b2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gY29udGludWVUb0xvY2F0aW9uKFJlZjxKU09OOjpPYmpl
Y3Q+JiYgbG9jYXRpb24pIGZpbmFsOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+
IHN0ZXBOZXh0KCkgZmluYWw7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc3Rl
cE92ZXIoKSBmaW5hbDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzdGVwSW50
bygpIGZpbmFsOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHN0ZXBPdXQoKSBm
aW5hbDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBwYXVzZSgpIGZpbmFsOwor
ICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHJlc3VtZSgpIGZpbmFsOworICAgIFBy
b3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpHZW5lcmlj
VHlwZXM6OlNlYXJjaE1hdGNoPj4+IHNlYXJjaEluQ29udGVudChjb25zdCBQcm90b2NvbDo6RGVi
dWdnZXI6OlNjcmlwdElkJiwgY29uc3QgU3RyaW5nJiBxdWVyeSwgT3B0aW9uYWw8Ym9vbD4mJiBj
YXNlU2Vuc2l0aXZlLCBPcHRpb25hbDxib29sPiYmIGlzUmVnZXgpIGZpbmFsOworICAgIFByb3Rv
Y29sOjpFcnJvclN0cmluZ09yPFN0cmluZz4gZ2V0U2NyaXB0U291cmNlKGNvbnN0IFByb3RvY29s
OjpEZWJ1Z2dlcjo6U2NyaXB0SWQmKSBmaW5hbDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdP
cjxSZWY8UHJvdG9jb2w6OkRlYnVnZ2VyOjpGdW5jdGlvbkRldGFpbHM+PiBnZXRGdW5jdGlvbkRl
dGFpbHMoY29uc3QgU3RyaW5nJiBmdW5jdGlvbklkKSBmaW5hbDsKKyAgICBQcm90b2NvbDo6RXJy
b3JTdHJpbmdPcjx2b2lkPiBzZXRQYXVzZU9uRGVidWdnZXJTdGF0ZW1lbnRzKGJvb2wgZW5hYmxl
ZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBvcHRpb25zKSBmaW5hbDsKKyAgICBQcm90b2NvbDo6
RXJyb3JTdHJpbmdPcjx2b2lkPiBzZXRQYXVzZU9uRXhjZXB0aW9ucyhjb25zdCBTdHJpbmcmIHN0
YXRlLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIG9wdGlvbnMpIGZpbmFsOworICAgIFByb3RvY29s
OjpFcnJvclN0cmluZ09yPHZvaWQ+IHNldFBhdXNlT25Bc3NlcnRpb25zKGJvb2wgZW5hYmxlZCwg
UmVmUHRyPEpTT046Ok9iamVjdD4mJiBvcHRpb25zKSBmaW5hbDsKKyAgICBQcm90b2NvbDo6RXJy
b3JTdHJpbmdPcjx2b2lkPiBzZXRQYXVzZU9uTWljcm90YXNrcyhib29sIGVuYWJsZWQsIFJlZlB0
cjxKU09OOjpPYmplY3Q+JiYgb3B0aW9ucykgZmluYWw7CisgICAgUHJvdG9jb2w6OkVycm9yU3Ry
aW5nT3I8dm9pZD4gc2V0UGF1c2VGb3JJbnRlcm5hbFNjcmlwdHMoYm9vbCBzaG91bGRQYXVzZSkg
ZmluYWw7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8c3RkOjp0dXBsZTxSZWY8UHJvdG9j
b2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4sIE9wdGlvbmFsPGJvb2w+IC8qIHdhc1Rocm93biAq
LywgT3B0aW9uYWw8aW50PiAvKiBzYXZlZFJlc3VsdEluZGV4ICovPj4gZXZhbHVhdGVPbkNhbGxG
cmFtZShjb25zdCBQcm90b2NvbDo6RGVidWdnZXI6OkNhbGxGcmFtZUlkJiwgY29uc3QgU3RyaW5n
JiBleHByZXNzaW9uLCBjb25zdCBTdHJpbmcmIG9iamVjdEdyb3VwLCBPcHRpb25hbDxib29sPiYm
IGluY2x1ZGVDb21tYW5kTGluZUFQSSwgT3B0aW9uYWw8Ym9vbD4mJiBkb05vdFBhdXNlT25FeGNl
cHRpb25zQW5kTXV0ZUNvbnNvbGUsIE9wdGlvbmFsPGJvb2w+JiYgcmV0dXJuQnlWYWx1ZSwgT3B0
aW9uYWw8Ym9vbD4mJiBnZW5lcmF0ZVByZXZpZXcsIE9wdGlvbmFsPGJvb2w+JiYgc2F2ZVJlc3Vs
dCwgT3B0aW9uYWw8Ym9vbD4mJiBlbXVsYXRlVXNlckdlc3R1cmUpIG92ZXJyaWRlOworICAgIFBy
b3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHNldFNob3VsZEJsYWNrYm94VVJMKGNvbnN0IFN0
cmluZyYgdXJsLCBib29sIHNob3VsZEJsYWNrYm94LCBPcHRpb25hbDxib29sPiYmIGNhc2VTZW5z
aXRpdmUsIE9wdGlvbmFsPGJvb2w+JiYgaXNSZWdleCkgZmluYWw7CiAKICAgICAvLyBKU0M6OkRl
YnVnZ2VyOjpPYnNlcnZlcgogICAgIHZvaWQgZGlkUGFyc2VTb3VyY2UoSlNDOjpTb3VyY2VJRCwg
Y29uc3QgSlNDOjpEZWJ1Z2dlcjo6U2NyaXB0JikgZmluYWw7CkBAIC0xNDIsMTEgKzE0MSwxMSBA
QCBwdWJsaWM6CiAKIHByb3RlY3RlZDoKICAgICBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50KEFnZW50
Q29udGV4dCYpOwotICAgIHZpcnR1YWwgdm9pZCBlbmFibGUoKTsKLSAgICB2aXJ0dWFsIHZvaWQg
ZGlzYWJsZShib29sIGlzQmVpbmdEZXN0cm95ZWQpOworICAgIHZpcnR1YWwgdm9pZCBpbnRlcm5h
bEVuYWJsZSgpOworICAgIHZpcnR1YWwgdm9pZCBpbnRlcm5hbERpc2FibGUoYm9vbCBpc0JlaW5n
RGVzdHJveWVkKTsKIAogICAgIEluamVjdGVkU2NyaXB0TWFuYWdlciYgaW5qZWN0ZWRTY3JpcHRN
YW5hZ2VyKCkgY29uc3QgeyByZXR1cm4gbV9pbmplY3RlZFNjcmlwdE1hbmFnZXI7IH0KLSAgICB2
aXJ0dWFsIEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0Rm9yRXZhbChFcnJvclN0cmluZyYs
IGNvbnN0IGludCogZXhlY3V0aW9uQ29udGV4dElkKSA9IDA7CisgICAgdmlydHVhbCBJbmplY3Rl
ZFNjcmlwdCBpbmplY3RlZFNjcmlwdEZvckV2YWwoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiwgT3B0
aW9uYWw8UHJvdG9jb2w6OlJ1bnRpbWU6OkV4ZWN1dGlvbkNvbnRleHRJZD4mJikgPSAwOwogCiAg
ICAgSlNDOjpEZWJ1Z2dlciYgZGVidWdnZXIoKSB7IHJldHVybiBtX2RlYnVnZ2VyOyB9CiAKQEAg
LTE2Niw4ICsxNjUsOCBAQCBwcml2YXRlOgogICAgIGNsYXNzIFByb3RvY29sQnJlYWtwb2ludCB7
CiAgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogICAgIHB1YmxpYzoKLSAgICAgICAg
c3RhdGljIE9wdGlvbmFsPFByb3RvY29sQnJlYWtwb2ludD4gZnJvbVBheWxvYWQoRXJyb3JTdHJp
bmcmLCBKU0M6OlNvdXJjZUlELCB1bnNpZ25lZCBsaW5lTnVtYmVyLCB1bnNpZ25lZCBjb2x1bW5O
dW1iZXIsIGNvbnN0IEpTT046Ok9iamVjdCogb3B0aW9uc1BheWxvYWQgPSBudWxscHRyKTsKLSAg
ICAgICAgc3RhdGljIE9wdGlvbmFsPFByb3RvY29sQnJlYWtwb2ludD4gZnJvbVBheWxvYWQoRXJy
b3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHVybCwgYm9vbCBpc1JlZ2V4LCB1bnNpZ25lZCBsaW5l
TnVtYmVyLCB1bnNpZ25lZCBjb2x1bW5OdW1iZXIsIGNvbnN0IEpTT046Ok9iamVjdCogb3B0aW9u
c1BheWxvYWQgPSBudWxscHRyKTsKKyAgICAgICAgc3RhdGljIE9wdGlvbmFsPFByb3RvY29sQnJl
YWtwb2ludD4gZnJvbVBheWxvYWQoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiwgSlNDOjpTb3VyY2VJ
RCwgdW5zaWduZWQgbGluZU51bWJlciwgdW5zaWduZWQgY29sdW1uTnVtYmVyLCBSZWZQdHI8SlNP
Tjo6T2JqZWN0PiYmIG9wdGlvbnMgPSBudWxscHRyKTsKKyAgICAgICAgc3RhdGljIE9wdGlvbmFs
PFByb3RvY29sQnJlYWtwb2ludD4gZnJvbVBheWxvYWQoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiwg
Y29uc3QgU3RyaW5nJiB1cmwsIGJvb2wgaXNSZWdleCwgdW5zaWduZWQgbGluZU51bWJlciwgdW5z
aWduZWQgY29sdW1uTnVtYmVyLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIG9wdGlvbnMgPSBudWxs
cHRyKTsKIAogICAgICAgICBQcm90b2NvbEJyZWFrcG9pbnQoKTsKICAgICAgICAgUHJvdG9jb2xC
cmVha3BvaW50KEpTQzo6U291cmNlSUQsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIHVuc2lnbmVkIGNv
bHVtbk51bWJlciwgY29uc3QgU3RyaW5nJiBjb25kaXRpb24gPSBudWxsU3RyaW5nKCksIEpTQzo6
QnJlYWtwb2ludDo6QWN0aW9uc1ZlY3RvciYmIGFjdGlvbnMgPSB7IH0sIGJvb2wgYXV0b0NvbnRp
bnVlID0gZmFsc2UsIHNpemVfdCBpZ25vcmVDb3VudCA9IDApOwpAQCAtMTc1LDEyICsxNzQsMTIg
QEAgcHJpdmF0ZToKIAogICAgICAgICBSZWY8SlNDOjpCcmVha3BvaW50PiBjcmVhdGVEZWJ1Z2dl
ckJyZWFrcG9pbnQoSlNDOjpCcmVha3BvaW50SUQsIEpTQzo6U291cmNlSUQpIGNvbnN0OwogCi0g
ICAgICAgIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpCcmVha3BvaW50SWQm
IGlkKCkgY29uc3QgeyByZXR1cm4gbV9pZDsgfQorICAgICAgICBjb25zdCBQcm90b2NvbDo6RGVi
dWdnZXI6OkJyZWFrcG9pbnRJZCYgaWQoKSBjb25zdCB7IHJldHVybiBtX2lkOyB9CiAKICAgICAg
ICAgYm9vbCBtYXRjaGVzU2NyaXB0VVJMKGNvbnN0IFN0cmluZyYpIGNvbnN0OwogCiAgICAgcHJp
dmF0ZToKLSAgICAgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6OkJyZWFrcG9pbnRJ
ZCBtX2lkOworICAgICAgICBQcm90b2NvbDo6RGVidWdnZXI6OkJyZWFrcG9pbnRJZCBtX2lkOwog
CiAjaWYgQVNTRVJUX0VOQUJMRUQKICAgICAgICAgSlNDOjpTb3VyY2VJRCBtX3NvdXJjZUlEIHsg
SlNDOjpub1NvdXJjZUlEIH07CkBAIC0yMDIsNyArMjAxLDcgQEAgcHJpdmF0ZToKICAgICBib29s
IHNldEJyZWFrcG9pbnQoSlNDOjpCcmVha3BvaW50Jik7CiAgICAgdm9pZCBkaWRTZXRCcmVha3Bv
aW50KFByb3RvY29sQnJlYWtwb2ludCYsIEpTQzo6QnJlYWtwb2ludCYpOwogCi0gICAgYm9vbCBh
c3NlcnRQYXVzZWQoRXJyb3JTdHJpbmcmKTsKKyAgICBib29sIGFzc2VydFBhdXNlZChQcm90b2Nv
bDo6RXJyb3JTdHJpbmcmKTsKICAgICB2b2lkIGNsZWFyRGVidWdnZXJCcmVha3BvaW50U3RhdGUo
KTsKICAgICB2b2lkIGNsZWFySW5zcGVjdG9yQnJlYWtwb2ludFN0YXRlKCk7CiAgICAgdm9pZCBj
bGVhclBhdXNlRGV0YWlscygpOwpAQCAtMjQ4LDggKzI0Nyw4IEBAIHByaXZhdGU6CiAgICAgSlND
OjpKU0dsb2JhbE9iamVjdCogbV9wYXVzZWRHbG9iYWxPYmplY3QgeyBudWxscHRyIH07CiAgICAg
SlNDOjpTdHJvbmc8SlNDOjpVbmtub3duPiBtX2N1cnJlbnRDYWxsU3RhY2s7CiAKLSAgICBIYXNo
TWFwPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpCcmVha3BvaW50SWQsIFByb3RvY29s
QnJlYWtwb2ludD4gbV9wcm90b2NvbEJyZWFrcG9pbnRGb3JQcm90b2NvbEJyZWFrcG9pbnRJRDsK
LSAgICBIYXNoTWFwPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpCcmVha3BvaW50SWQs
IEpTQzo6QnJlYWtwb2ludHNWZWN0b3I+IG1fZGVidWdnZXJCcmVha3BvaW50c0ZvclByb3RvY29s
QnJlYWtwb2ludElEOworICAgIEhhc2hNYXA8UHJvdG9jb2w6OkRlYnVnZ2VyOjpCcmVha3BvaW50
SWQsIFByb3RvY29sQnJlYWtwb2ludD4gbV9wcm90b2NvbEJyZWFrcG9pbnRGb3JQcm90b2NvbEJy
ZWFrcG9pbnRJRDsKKyAgICBIYXNoTWFwPFByb3RvY29sOjpEZWJ1Z2dlcjo6QnJlYWtwb2ludElk
LCBKU0M6OkJyZWFrcG9pbnRzVmVjdG9yPiBtX2RlYnVnZ2VyQnJlYWtwb2ludHNGb3JQcm90b2Nv
bEJyZWFrcG9pbnRJRDsKICAgICBKU0M6OkJyZWFrcG9pbnRJRCBtX25leHREZWJ1Z2dlckJyZWFr
cG9pbnRJRCB7IEpTQzo6bm9CcmVha3BvaW50SUQgKyAxIH07CiAKICAgICBSZWZQdHI8SlNDOjpC
cmVha3BvaW50PiBtX2NvbnRpbnVlVG9Mb2NhdGlvbkRlYnVnZ2VyQnJlYWtwb2ludDsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rvckhl
YXBBZ2VudC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNw
ZWN0b3JIZWFwQWdlbnQuY3BwCmluZGV4IDhjNjIxYWQ0MWM0ZGE1MDA0M2QzMDIyMDBhNDZmYWU5
ZWZjOTcxOGMuLjg1Y2VkOWYzZGY2MjIzMDFiOTVlMzNlNDkzNWNiYmYxNjJiN2UzMzAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rvckhl
YXBBZ2VudC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9ySGVhcEFnZW50LmNwcApAQCAtNTYsMjggKzU2LDI1IEBAIHZvaWQgSW5zcGVjdG9y
SGVhcEFnZW50OjpkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoRnJvbnRlbmRSb3V0ZXIqLCBC
YWNrZW5kRGlzCiAKIHZvaWQgSW5zcGVjdG9ySGVhcEFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5k
QW5kQmFja2VuZChEaXNjb25uZWN0UmVhc29uKQogewotICAgIEVycm9yU3RyaW5nIGlnbm9yZWQ7
Ci0gICAgZGlzYWJsZShpZ25vcmVkKTsKKyAgICBkaXNhYmxlKCk7CiB9CiAKLXZvaWQgSW5zcGVj
dG9ySGVhcEFnZW50OjplbmFibGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nKQorUHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9ySGVhcEFnZW50OjplbmFibGUoKQogewotICAg
IGlmIChtX2VuYWJsZWQpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiSGVhcCBkb21haW4gYWxy
ZWFkeSBlbmFibGVkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmIChtX2VuYWJs
ZWQpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiSGVhcCBkb21haW4gYWxyZWFkeSBl
bmFibGVkIl9zKTsKIAogICAgIG1fZW5hYmxlZCA9IHRydWU7CiAKICAgICBtX2Vudmlyb25tZW50
LnZtKCkuaGVhcC5hZGRPYnNlcnZlcih0aGlzKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZv
aWQgSW5zcGVjdG9ySGVhcEFnZW50OjpkaXNhYmxlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZykK
K1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckhlYXBBZ2VudDo6ZGlzYWJs
ZSgpCiB7Ci0gICAgaWYgKCFtX2VuYWJsZWQpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiSGVh
cCBkb21haW4gYWxyZWFkeSBkaXNhYmxlZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAg
ICBpZiAoIW1fZW5hYmxlZCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJIZWFwIGRv
bWFpbiBhbHJlYWR5IGRpc2FibGVkIl9zKTsKIAogICAgIG1fZW5hYmxlZCA9IGZhbHNlOwogICAg
IG1fdHJhY2tpbmcgPSBmYWxzZTsKQEAgLTg1LDE3ICs4MiwyMSBAQCB2b2lkIEluc3BlY3Rvckhl
YXBBZ2VudDo6ZGlzYWJsZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCiAgICAgbV9lbnZpcm9u
bWVudC52bSgpLmhlYXAucmVtb3ZlT2JzZXJ2ZXIodGhpcyk7CiAKICAgICBjbGVhckhlYXBTbmFw
c2hvdHMoKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9ySGVhcEFnZW50
OjpnYyhFcnJvclN0cmluZyYpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0
b3JIZWFwQWdlbnQ6OmdjKCkKIHsKICAgICBWTSYgdm0gPSBtX2Vudmlyb25tZW50LnZtKCk7CiAg
ICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOwogICAgIHNhbml0aXplU3RhY2tGb3JWTSh2bSk7CiAg
ICAgdm0uaGVhcC5jb2xsZWN0Tm93KFN5bmMsIENvbGxlY3Rpb25TY29wZTo6RnVsbCk7CisKKyAg
ICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckhlYXBBZ2VudDo6c25hcHNob3QoRXJy
b3JTdHJpbmcmLCBkb3VibGUqIHRpbWVzdGFtcCwgU3RyaW5nKiBzbmFwc2hvdERhdGEpCitQcm90
b2NvbDo6RXJyb3JTdHJpbmdPcjxzdGQ6OnR1cGxlPGRvdWJsZSwgUHJvdG9jb2w6OkhlYXA6Okhl
YXBTbmFwc2hvdERhdGE+PiBJbnNwZWN0b3JIZWFwQWdlbnQ6OnNuYXBzaG90KCkKIHsKICAgICBW
TSYgdm0gPSBtX2Vudmlyb25tZW50LnZtKCk7CiAgICAgSlNMb2NrSG9sZGVyIGxvY2sodm0pOwpA
QCAtMTAzLDggKzEwNCw4IEBAIHZvaWQgSW5zcGVjdG9ySGVhcEFnZW50OjpzbmFwc2hvdChFcnJv
clN0cmluZyYsIGRvdWJsZSogdGltZXN0YW1wLCBTdHJpbmcqIHNuYXBzCiAgICAgSGVhcFNuYXBz
aG90QnVpbGRlciBzbmFwc2hvdEJ1aWxkZXIodm0uZW5zdXJlSGVhcFByb2ZpbGVyKCkpOwogICAg
IHNuYXBzaG90QnVpbGRlci5idWlsZFNuYXBzaG90KCk7CiAKLSAgICAqdGltZXN0YW1wID0gbV9l
bnZpcm9ubWVudC5leGVjdXRpb25TdG9wd2F0Y2goKS5lbGFwc2VkVGltZSgpLnNlY29uZHMoKTsK
LSAgICAqc25hcHNob3REYXRhID0gc25hcHNob3RCdWlsZGVyLmpzb24oWyZdIChjb25zdCBIZWFw
U25hcHNob3ROb2RlJiBub2RlKSB7CisgICAgYXV0byB0aW1lc3RhbXAgPSBtX2Vudmlyb25tZW50
LmV4ZWN1dGlvblN0b3B3YXRjaCgpLmVsYXBzZWRUaW1lKCkuc2Vjb25kcygpOworICAgIGF1dG8g
c25hcHNob3REYXRhID0gc25hcHNob3RCdWlsZGVyLmpzb24oWyZdIChjb25zdCBIZWFwU25hcHNo
b3ROb2RlJiBub2RlKSB7CiAgICAgICAgIGlmIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG5vZGUu
Y2VsbC0+c3RydWN0dXJlKHZtKSkgewogICAgICAgICAgICAgaWYgKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QgPSBzdHJ1Y3R1cmUtPmdsb2JhbE9iamVjdCgpKSB7CiAgICAgICAgICAgICAg
ICAgaWYgKCFtX2Vudmlyb25tZW50LmNhbkFjY2Vzc0luc3BlY3RlZFNjcmlwdFN0YXRlKGdsb2Jh
bE9iamVjdCkpCkBAIC0xMTMsMzcgKzExNCw0NSBAQCB2b2lkIEluc3BlY3RvckhlYXBBZ2VudDo6
c25hcHNob3QoRXJyb3JTdHJpbmcmLCBkb3VibGUqIHRpbWVzdGFtcCwgU3RyaW5nKiBzbmFwcwog
ICAgICAgICB9CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0pOworCisgICAgcmV0dXJuIHsg
eyB0aW1lc3RhbXAsIHNuYXBzaG90RGF0YSB9IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9ySGVhcEFn
ZW50OjpzdGFydFRyYWNraW5nKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZykKK1Byb3RvY29sOjpF
cnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckhlYXBBZ2VudDo6c3RhcnRUcmFja2luZygpCiB7
CiAgICAgaWYgKG1fdHJhY2tpbmcpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHsg
fTsKIAogICAgIG1fdHJhY2tpbmcgPSB0cnVlOwogCi0gICAgZG91YmxlIHRpbWVzdGFtcDsKLSAg
ICBTdHJpbmcgc25hcHNob3REYXRhOwotICAgIHNuYXBzaG90KGVycm9yU3RyaW5nLCAmdGltZXN0
YW1wLCAmc25hcHNob3REYXRhKTsKKyAgICBhdXRvIHJlc3VsdCA9IHNuYXBzaG90KCk7CisgICAg
aWYgKCFyZXN1bHQpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChXVEZNb3ZlKHJlc3Vs
dC5lcnJvcigpKSk7CiAKKyAgICBhdXRvIFt0aW1lc3RhbXAsIHNuYXBzaG90RGF0YV0gPSBXVEZN
b3ZlKHJlc3VsdC52YWx1ZSgpKTsKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+dHJhY2tpbmdT
dGFydCh0aW1lc3RhbXAsIHNuYXBzaG90RGF0YSk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12
b2lkIEluc3BlY3RvckhlYXBBZ2VudDo6c3RvcFRyYWNraW5nKEVycm9yU3RyaW5nJiBlcnJvclN0
cmluZykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckhlYXBBZ2VudDo6
c3RvcFRyYWNraW5nKCkKIHsKICAgICBpZiAoIW1fdHJhY2tpbmcpCi0gICAgICAgIHJldHVybjsK
KyAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIG1fdHJhY2tpbmcgPSBmYWxzZTsKIAotICAgIGRv
dWJsZSB0aW1lc3RhbXA7Ci0gICAgU3RyaW5nIHNuYXBzaG90RGF0YTsKLSAgICBzbmFwc2hvdChl
cnJvclN0cmluZywgJnRpbWVzdGFtcCwgJnNuYXBzaG90RGF0YSk7CisgICAgYXV0byByZXN1bHQg
PSBzbmFwc2hvdCgpOworICAgIGlmICghcmVzdWx0KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoV1RGTW92ZShyZXN1bHQuZXJyb3IoKSkpOwogCisgICAgYXV0byBbdGltZXN0YW1wLCBz
bmFwc2hvdERhdGFdID0gV1RGTW92ZShyZXN1bHQudmFsdWUoKSk7CiAgICAgbV9mcm9udGVuZERp
c3BhdGNoZXItPnRyYWNraW5nQ29tcGxldGUodGltZXN0YW1wLCBzbmFwc2hvdERhdGEpOworCisg
ICAgcmV0dXJuIHsgfTsKIH0KIAotT3B0aW9uYWw8SGVhcFNuYXBzaG90Tm9kZT4gSW5zcGVjdG9y
SGVhcEFnZW50Ojpub2RlRm9ySGVhcE9iamVjdElkZW50aWZpZXIoRXJyb3JTdHJpbmcmIGVycm9y
U3RyaW5nLCB1bnNpZ25lZCBoZWFwT2JqZWN0SWRlbnRpZmllcikKK09wdGlvbmFsPEhlYXBTbmFw
c2hvdE5vZGU+IEluc3BlY3RvckhlYXBBZ2VudDo6bm9kZUZvckhlYXBPYmplY3RJZGVudGlmaWVy
KFByb3RvY29sOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIHVuc2lnbmVkIGhlYXBPYmplY3RJ
ZGVudGlmaWVyKQogewogICAgIEhlYXBQcm9maWxlciogaGVhcFByb2ZpbGVyID0gbV9lbnZpcm9u
bWVudC52bSgpLmhlYXBQcm9maWxlcigpOwogICAgIGlmICghaGVhcFByb2ZpbGVyKSB7CkBAIC0x
NjYsOCArMTc1LDEwIEBAIE9wdGlvbmFsPEhlYXBTbmFwc2hvdE5vZGU+IEluc3BlY3RvckhlYXBB
Z2VudDo6bm9kZUZvckhlYXBPYmplY3RJZGVudGlmaWVyKEVycm9yCiAgICAgcmV0dXJuIG9wdGlv
bmFsTm9kZTsKIH0KIAotdm9pZCBJbnNwZWN0b3JIZWFwQWdlbnQ6OmdldFByZXZpZXcoRXJyb3JT
dHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgaGVhcE9iamVjdElkLCBPcHRpb25hbDxTdHJpbmc+JiBy
ZXN1bHRTdHJpbmcsIFJlZlB0cjxQcm90b2NvbDo6RGVidWdnZXI6OkZ1bmN0aW9uRGV0YWlscz4m
IGZ1bmN0aW9uRGV0YWlscywgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpPYmplY3RQcmV2aWV3
PiYgb2JqZWN0UHJldmlldykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHN0ZDo6dHVwbGU8U3Ry
aW5nLCBSZWZQdHI8UHJvdG9jb2w6OkRlYnVnZ2VyOjpGdW5jdGlvbkRldGFpbHM+LCBSZWZQdHI8
UHJvdG9jb2w6OlJ1bnRpbWU6Ok9iamVjdFByZXZpZXc+Pj4gSW5zcGVjdG9ySGVhcEFnZW50Ojpn
ZXRQcmV2aWV3KGludCBoZWFwT2JqZWN0SWQpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5n
IGVycm9yU3RyaW5nOworCiAgICAgLy8gUHJldmVudCB0aGUgY2VsbCBmcm9tIGdldHRpbmcgY29s
bGVjdGVkIGFzIHdlIGxvb2sgaXQgdXAuCiAgICAgVk0mIHZtID0gbV9lbnZpcm9ubWVudC52bSgp
OwogICAgIEpTTG9ja0hvbGRlciBsb2NrKHZtKTsKQEAgLTE3Niw1MyArMTg3LDQ4IEBAIHZvaWQg
SW5zcGVjdG9ySGVhcEFnZW50OjpnZXRQcmV2aWV3KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywg
aW50IGhlYXBPYmplY3RJZCwKICAgICB1bnNpZ25lZCBoZWFwT2JqZWN0SWRlbnRpZmllciA9IHN0
YXRpY19jYXN0PHVuc2lnbmVkPihoZWFwT2JqZWN0SWQpOwogICAgIGNvbnN0IE9wdGlvbmFsPEhl
YXBTbmFwc2hvdE5vZGU+IG9wdGlvbmFsTm9kZSA9IG5vZGVGb3JIZWFwT2JqZWN0SWRlbnRpZmll
cihlcnJvclN0cmluZywgaGVhcE9iamVjdElkZW50aWZpZXIpOwogICAgIGlmICghb3B0aW9uYWxO
b2RlKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJv
clN0cmluZyk7CiAKICAgICAvLyBTdHJpbmcgcHJldmlldy4KICAgICBKU0NlbGwqIGNlbGwgPSBv
cHRpb25hbE5vZGUtPmNlbGw7Ci0gICAgaWYgKGNlbGwtPmlzU3RyaW5nKCkpIHsKLSAgICAgICAg
cmVzdWx0U3RyaW5nID0gYXNTdHJpbmcoY2VsbCktPnRyeUdldFZhbHVlKCk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9CisgICAgaWYgKGNlbGwtPmlzU3RyaW5nKCkpCisgICAgICAgIHJldHVybiB7
IHsgYXNTdHJpbmcoY2VsbCktPnRyeUdldFZhbHVlKCksIG51bGxwdHIsIG51bGxwdHIgfSB9Owog
CiAgICAgLy8gQmlnSW50IHByZXZpZXcuCi0gICAgaWYgKGNlbGwtPmlzSGVhcEJpZ0ludCgpKSB7
Ci0gICAgICAgIHJlc3VsdFN0cmluZyA9IEpTQmlnSW50Ojp0cnlHZXRTdHJpbmcodm0sIGFzSGVh
cEJpZ0ludChjZWxsKSwgMTApOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmIChjZWxs
LT5pc0hlYXBCaWdJbnQoKSkKKyAgICAgICAgcmV0dXJuIHsgeyBKU0JpZ0ludDo6dHJ5R2V0U3Ry
aW5nKHZtLCBhc0hlYXBCaWdJbnQoY2VsbCksIDEwKSwgbnVsbHB0ciwgbnVsbHB0ciB9IH07CiAK
ICAgICAvLyBGSVhNRTogUHJvdmlkZSBwcmV2aWV3IGluZm9ybWF0aW9uIGZvciBJbnRlcm5hbCBP
YmplY3RzPyBDb2RlQmxvY2ssIEV4ZWN1dGFibGUsIGV0Yy4KIAogICAgIFN0cnVjdHVyZSogc3Ry
dWN0dXJlID0gY2VsbC0+c3RydWN0dXJlKHZtKTsKLSAgICBpZiAoIXN0cnVjdHVyZSkgewotICAg
ICAgICBlcnJvclN0cmluZyA9ICJVbmFibGUgdG8gZ2V0IG9iamVjdCBkZXRhaWxzIC0gU3RydWN0
dXJlIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghc3RydWN0dXJlKQorICAg
ICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIlVuYWJsZSB0byBnZXQgb2JqZWN0IGRldGFpbHMg
LSBTdHJ1Y3R1cmUiX3MpOwogCiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IHN0
cnVjdHVyZS0+Z2xvYmFsT2JqZWN0KCk7Ci0gICAgaWYgKCFnbG9iYWxPYmplY3QpIHsKLSAgICAg
ICAgZXJyb3JTdHJpbmcgPSAiVW5hYmxlIHRvIGdldCBvYmplY3QgZGV0YWlscyAtIEdsb2JhbE9i
amVjdCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoIWdsb2JhbE9iamVjdCkK
KyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJVbmFibGUgdG8gZ2V0IG9iamVjdCBkZXRh
aWxzIC0gR2xvYmFsT2JqZWN0Il9zKTsKIAogICAgIEluamVjdGVkU2NyaXB0IGluamVjdGVkU2Ny
aXB0ID0gbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIuaW5qZWN0ZWRTY3JpcHRGb3IoZ2xvYmFsT2Jq
ZWN0KTsKLSAgICBpZiAoaW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKSB7Ci0gICAgICAgIGVy
cm9yU3RyaW5nID0gIlVuYWJsZSB0byBnZXQgb2JqZWN0IGRldGFpbHMgLSBJbmplY3RlZFNjcmlw
dCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoaW5qZWN0ZWRTY3JpcHQuaGFz
Tm9WYWx1ZSgpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIlVuYWJsZSB0byBnZXQg
b2JqZWN0IGRldGFpbHMgLSBJbmplY3RlZFNjcmlwdCJfcyk7CiAKICAgICAvLyBGdW5jdGlvbiBw
cmV2aWV3LgogICAgIGlmIChjZWxsLT5pbmhlcml0czxKU0Z1bmN0aW9uPih2bSkpIHsKKyAgICAg
ICAgUmVmUHRyPFByb3RvY29sOjpEZWJ1Z2dlcjo6RnVuY3Rpb25EZXRhaWxzPiBmdW5jdGlvbkRl
dGFpbHM7CiAgICAgICAgIGluamVjdGVkU2NyaXB0LmZ1bmN0aW9uRGV0YWlscyhlcnJvclN0cmlu
ZywgY2VsbCwgZnVuY3Rpb25EZXRhaWxzKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAo
IWZ1bmN0aW9uRGV0YWlscykKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJv
clN0cmluZyk7CisgICAgICAgIHJldHVybiB7IHsgbnVsbFN0cmluZygpLCBmdW5jdGlvbkRldGFp
bHMsIG51bGxwdHIgfSB9OwogICAgIH0KIAogICAgIC8vIE9iamVjdCBwcmV2aWV3LgotICAgIG9i
amVjdFByZXZpZXcgPSBpbmplY3RlZFNjcmlwdC5wcmV2aWV3VmFsdWUoY2VsbCk7CisgICAgcmV0
dXJuIHsgeyBudWxsU3RyaW5nKCksIG51bGxwdHIsIGluamVjdGVkU2NyaXB0LnByZXZpZXdWYWx1
ZShjZWxsKSB9IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9ySGVhcEFnZW50OjpnZXRSZW1vdGVPYmpl
Y3QoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgaGVhcE9iamVjdElkLCBjb25zdCBTdHJp
bmcqIG9wdGlvbmFsT2JqZWN0R3JvdXAsIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3Rl
T2JqZWN0PiYgcmVzdWx0KQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPFByb3RvY29sOjpS
dW50aW1lOjpSZW1vdGVPYmplY3Q+PiBJbnNwZWN0b3JIZWFwQWdlbnQ6OmdldFJlbW90ZU9iamVj
dChpbnQgaGVhcE9iamVjdElkLCBjb25zdCBTdHJpbmcmIG9iamVjdEdyb3VwKQogeworICAgIFBy
b3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIC8vIFByZXZlbnQgdGhlIGNl
bGwgZnJvbSBnZXR0aW5nIGNvbGxlY3RlZCBhcyB3ZSBsb29rIGl0IHVwLgogICAgIFZNJiB2bSA9
IG1fZW52aXJvbm1lbnQudm0oKTsKICAgICBKU0xvY2tIb2xkZXIgbG9jayh2bSk7CkBAIC0yMzEs
MjkgKzIzNywyNiBAQCB2b2lkIEluc3BlY3RvckhlYXBBZ2VudDo6Z2V0UmVtb3RlT2JqZWN0KEVy
cm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IGhlYXBPYmplYwogICAgIHVuc2lnbmVkIGhlYXBP
YmplY3RJZGVudGlmaWVyID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGhlYXBPYmplY3RJZCk7CiAg
ICAgY29uc3QgT3B0aW9uYWw8SGVhcFNuYXBzaG90Tm9kZT4gb3B0aW9uYWxOb2RlID0gbm9kZUZv
ckhlYXBPYmplY3RJZGVudGlmaWVyKGVycm9yU3RyaW5nLCBoZWFwT2JqZWN0SWRlbnRpZmllcik7
CiAgICAgaWYgKCFvcHRpb25hbE5vZGUpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJu
IG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgIEpTQ2VsbCogY2VsbCA9IG9wdGlv
bmFsTm9kZS0+Y2VsbDsKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGNlbGwtPnN0cnVjdHVy
ZSh2bSk7Ci0gICAgaWYgKCFzdHJ1Y3R1cmUpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiVW5h
YmxlIHRvIGdldCBvYmplY3QgZGV0YWlscyAtIFN0cnVjdHVyZSJfczsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KKyAgICBpZiAoIXN0cnVjdHVyZSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVj
dGVkKCJVbmFibGUgdG8gZ2V0IG9iamVjdCBkZXRhaWxzIC0gU3RydWN0dXJlIl9zKTsKIAogICAg
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBzdHJ1Y3R1cmUtPmdsb2JhbE9iamVjdCgp
OwotICAgIGlmICghZ2xvYmFsT2JqZWN0KSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIlVuYWJs
ZSB0byBnZXQgb2JqZWN0IGRldGFpbHMgLSBHbG9iYWxPYmplY3QiX3M7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9CisgICAgaWYgKCFnbG9iYWxPYmplY3QpCisgICAgICAgIHJldHVybiBtYWtlVW5l
eHBlY3RlZCgiVW5hYmxlIHRvIGdldCBvYmplY3QgZGV0YWlscyAtIEdsb2JhbE9iamVjdCJfcyk7
CiAKICAgICBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdCA9IG1faW5qZWN0ZWRTY3JpcHRN
YW5hZ2VyLmluamVjdGVkU2NyaXB0Rm9yKGdsb2JhbE9iamVjdCk7Ci0gICAgaWYgKGluamVjdGVk
U2NyaXB0Lmhhc05vVmFsdWUoKSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJVbmFibGUgdG8g
Z2V0IG9iamVjdCBkZXRhaWxzIC0gSW5qZWN0ZWRTY3JpcHQiX3M7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9CisgICAgaWYgKGluamVjdGVkU2NyaXB0Lmhhc05vVmFsdWUoKSkKKyAgICAgICAgcmV0
dXJuIG1ha2VVbmV4cGVjdGVkKCJVbmFibGUgdG8gZ2V0IG9iamVjdCBkZXRhaWxzIC0gSW5qZWN0
ZWRTY3JpcHQiX3MpOwogCi0gICAgU3RyaW5nIG9iamVjdEdyb3VwID0gb3B0aW9uYWxPYmplY3RH
cm91cCA/ICpvcHRpb25hbE9iamVjdEdyb3VwIDogU3RyaW5nKCk7Ci0gICAgcmVzdWx0ID0gaW5q
ZWN0ZWRTY3JpcHQud3JhcE9iamVjdChjZWxsLCBvYmplY3RHcm91cCwgdHJ1ZSk7CisgICAgYXV0
byBvYmplY3QgPSBpbmplY3RlZFNjcmlwdC53cmFwT2JqZWN0KGNlbGwsIG9iamVjdEdyb3VwLCB0
cnVlKTsKKyAgICBpZiAoIW9iamVjdCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJJ
bnRlcm5hbCBlcnJvcjogdW5hYmxlIHRvIGNhc3QgT2JqZWN0Iik7CisKKyAgICByZXR1cm4gb2Jq
ZWN0LnJlbGVhc2VOb25OdWxsKCk7CiB9CiAKIHN0YXRpYyBQcm90b2NvbDo6SGVhcDo6R2FyYmFn
ZUNvbGxlY3Rpb246OlR5cGUgcHJvdG9jb2xUeXBlRm9ySGVhcE9wZXJhdGlvbihDb2xsZWN0aW9u
U2NvcGUgc2NvcGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L2FnZW50cy9JbnNwZWN0b3JIZWFwQWdlbnQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3IvYWdlbnRzL0luc3BlY3RvckhlYXBBZ2VudC5oCmluZGV4IGRlZjZhY2RlOTQ2MGU3MTI4
MDA0MWRhYTY1ZmNjZDY4NWUwZjdjMGYuLmNhYTUxMmQwYWIyZTEwYTg4ZTBlZTYwYzJlMzJkNzQz
OTQyMjI3YWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdl
bnRzL0luc3BlY3RvckhlYXBBZ2VudC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3IvYWdlbnRzL0luc3BlY3RvckhlYXBBZ2VudC5oCkBAIC00MCw3ICs0MCw2IEBAIHN0cnVj
dCBIZWFwU25hcHNob3ROb2RlOwogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKIGNsYXNzIEluamVj
dGVkU2NyaXB0TWFuYWdlcjsKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwogCiBjbGFzcyBK
U19FWFBPUlRfUFJJVkFURSBJbnNwZWN0b3JIZWFwQWdlbnQgOiBwdWJsaWMgSW5zcGVjdG9yQWdl
bnRCYXNlLCBwdWJsaWMgSGVhcEJhY2tlbmREaXNwYXRjaGVySGFuZGxlciwgcHVibGljIEpTQzo6
SGVhcE9ic2VydmVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbnNwZWN0b3JIZWFwQWdl
bnQpOwpAQCAtNTQsMTQgKzUzLDE0IEBAIHB1YmxpYzoKICAgICB2b2lkIHdpbGxEZXN0cm95RnJv
bnRlbmRBbmRCYWNrZW5kKERpc2Nvbm5lY3RSZWFzb24pIGZpbmFsOwogCiAgICAgLy8gSGVhcEJh
Y2tlbmREaXNwYXRjaGVySGFuZGxlcgotICAgIHZvaWQgZW5hYmxlKEVycm9yU3RyaW5nJikgb3Zl
cnJpZGU7Ci0gICAgdm9pZCBkaXNhYmxlKEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBnYyhFcnJvclN0cmluZyYpIGZpbmFsOwotICAgIHZvaWQgc25hcHNob3QoRXJyb3JTdHJpbmcm
LCBkb3VibGUqIHRpbWVzdGFtcCwgU3RyaW5nKiBzbmFwc2hvdERhdGEpIGZpbmFsOwotICAgIHZv
aWQgc3RhcnRUcmFja2luZyhFcnJvclN0cmluZyYpIGZpbmFsOwotICAgIHZvaWQgc3RvcFRyYWNr
aW5nKEVycm9yU3RyaW5nJikgZmluYWw7Ci0gICAgdm9pZCBnZXRQcmV2aWV3KEVycm9yU3RyaW5n
JiwgaW50IGhlYXBPYmplY3RJZCwgT3B0aW9uYWw8U3RyaW5nPiYgcmVzdWx0U3RyaW5nLCBSZWZQ
dHI8UHJvdG9jb2w6OkRlYnVnZ2VyOjpGdW5jdGlvbkRldGFpbHM+JiwgUmVmUHRyPFByb3RvY29s
OjpSdW50aW1lOjpPYmplY3RQcmV2aWV3PiYpIGZpbmFsOwotICAgIHZvaWQgZ2V0UmVtb3RlT2Jq
ZWN0KEVycm9yU3RyaW5nJiwgaW50IGhlYXBPYmplY3RJZCwgY29uc3QgU3RyaW5nKiBvcHRpb25h
bE9iamVjdEdyb3VwLCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJl
c3VsdCkgZmluYWw7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZW5hYmxlKCkg
b3ZlcnJpZGU7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZGlzYWJsZSgpIG92
ZXJyaWRlOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGdjKCkgZmluYWw7Cisg
ICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8c3RkOjp0dXBsZTxkb3VibGUsIFByb3RvY29sOjpI
ZWFwOjpIZWFwU25hcHNob3REYXRhPj4gc25hcHNob3QoKSBmaW5hbDsKKyAgICBQcm90b2NvbDo6
RXJyb3JTdHJpbmdPcjx2b2lkPiBzdGFydFRyYWNraW5nKCkgZmluYWw7CisgICAgUHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8dm9pZD4gc3RvcFRyYWNraW5nKCkgZmluYWw7CisgICAgUHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8c3RkOjp0dXBsZTxTdHJpbmcsIFJlZlB0cjxQcm90b2NvbDo6RGVidWdn
ZXI6OkZ1bmN0aW9uRGV0YWlscz4sIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6T2JqZWN0UHJl
dmlldz4+PiBnZXRQcmV2aWV3KGludCBoZWFwT2JqZWN0SWQpIGZpbmFsOworICAgIFByb3RvY29s
OjpFcnJvclN0cmluZ09yPFJlZjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0Pj4gZ2V0
UmVtb3RlT2JqZWN0KGludCBoZWFwT2JqZWN0SWQsIGNvbnN0IFN0cmluZyYgb2JqZWN0R3JvdXAp
IGZpbmFsOwogCiAgICAgLy8gSlNDOjpIZWFwT2JzZXJ2ZXIKICAgICB2b2lkIHdpbGxHYXJiYWdl
Q29sbGVjdCgpIGZpbmFsOwpAQCAtNzMsNyArNzIsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVh
bCB2b2lkIGRpc3BhdGNoR2FyYmFnZUNvbGxlY3RlZEV2ZW50KFByb3RvY29sOjpIZWFwOjpHYXJi
YWdlQ29sbGVjdGlvbjo6VHlwZSwgU2Vjb25kcyBzdGFydFRpbWUsIFNlY29uZHMgZW5kVGltZSk7
CiAKIHByaXZhdGU6Ci0gICAgT3B0aW9uYWw8SlNDOjpIZWFwU25hcHNob3ROb2RlPiBub2RlRm9y
SGVhcE9iamVjdElkZW50aWZpZXIoRXJyb3JTdHJpbmcmLCB1bnNpZ25lZCBoZWFwT2JqZWN0SWRl
bnRpZmllcik7CisgICAgT3B0aW9uYWw8SlNDOjpIZWFwU25hcHNob3ROb2RlPiBub2RlRm9ySGVh
cE9iamVjdElkZW50aWZpZXIoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiwgdW5zaWduZWQgaGVhcE9i
amVjdElkZW50aWZpZXIpOwogCiAgICAgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyJiBtX2luamVjdGVk
U2NyaXB0TWFuYWdlcjsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SGVhcEZyb250ZW5kRGlzcGF0Y2hl
cj4gbV9mcm9udGVuZERpc3BhdGNoZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JSdW50aW1lQWdlbnQuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yUnVudGltZUFnZW50LmNwcApp
bmRleCA5YWIxYWY3NGQ0MzM2MzcxZjY0OTI5YmY2MDY1YTQyY2UxYjk5Zjg0Li4wNTFjOWYzMzY4
MjhiZGUyOTk0MDJkM2NhNjkyMWU2ZTkyMjkzODBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JSdW50aW1lQWdlbnQuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclJ1bnRpbWVB
Z2VudC5jcHAKQEAgLTQ5LDE4ICs0OSw2IEBAIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCiB1c2lu
ZyBuYW1lc3BhY2UgSlNDOwogCi1zdGF0aWMgYm9vbCBhc0Jvb2woY29uc3QgYm9vbCogYikKLXsK
LSAgICByZXR1cm4gYiAmJiAqYjsKLX0KLQotc3RhdGljIGludCBhc0ludChjb25zdCBpbnQqIGkp
Ci17Ci0gICAgaWYgKGkpCi0gICAgICAgIHJldHVybiAqaTsKLSAgICByZXR1cm4gMDsKLX0KLQog
SW5zcGVjdG9yUnVudGltZUFnZW50OjpJbnNwZWN0b3JSdW50aW1lQWdlbnQoQWdlbnRDb250ZXh0
JiBjb250ZXh0KQogICAgIDogSW5zcGVjdG9yQWdlbnRCYXNlKCJSdW50aW1lIl9zKQogICAgICwg
bV9pbmplY3RlZFNjcmlwdE1hbmFnZXIoY29udGV4dC5pbmplY3RlZFNjcmlwdE1hbmFnZXIpCkBA
IC04MSwyNSArNjksNDYgQEAgc3RhdGljIFJlZjxQcm90b2NvbDo6UnVudGltZTo6RXJyb3JSYW5n
ZT4gYnVpbGRFcnJvclJhbmdlT2JqZWN0KGNvbnN0IEpTVG9rZW5Mb2MKICAgICAgICAgLnJlbGVh
c2UoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OnBhcnNlKEVycm9yU3RyaW5n
JiwgY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBQcm90b2NvbDo6UnVudGltZTo6U3ludGF4RXJy
b3JUeXBlKiByZXN1bHQsIE9wdGlvbmFsPFN0cmluZz4mIG1lc3NhZ2UsIFJlZlB0cjxQcm90b2Nv
bDo6UnVudGltZTo6RXJyb3JSYW5nZT4mIHJhbmdlKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8
dm9pZD4gSW5zcGVjdG9yUnVudGltZUFnZW50OjplbmFibGUoKQoreworICAgIG1fZW5hYmxlZCA9
IHRydWU7CisKKyAgICByZXR1cm4geyB9OworfQorCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2
b2lkPiBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmRpc2FibGUoKQoreworICAgIG1fZW5hYmxlZCA9
IGZhbHNlOworCisgICAgcmV0dXJuIHsgfTsKK30KKworUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8
c3RkOjp0dXBsZTxQcm90b2NvbDo6UnVudGltZTo6U3ludGF4RXJyb3JUeXBlLCBTdHJpbmcgLyog
bWVzc2FnZSAqLywgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpFcnJvclJhbmdlPj4+IEluc3Bl
Y3RvclJ1bnRpbWVBZ2VudDo6cGFyc2UoY29uc3QgU3RyaW5nJiBleHByZXNzaW9uKQogewogICAg
IEpTTG9ja0hvbGRlciBsb2NrKG1fdm0pOwogCiAgICAgUGFyc2VyRXJyb3IgZXJyb3I7CiAgICAg
Y2hlY2tTeW50YXgobV92bSwgSlNDOjptYWtlU291cmNlKGV4cHJlc3Npb24sIHsgfSksIGVycm9y
KTsKIAorICAgIE9wdGlvbmFsPFByb3RvY29sOjpSdW50aW1lOjpTeW50YXhFcnJvclR5cGU+IHJl
c3VsdDsKKyAgICBTdHJpbmcgbWVzc2FnZTsKKyAgICBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6
OkVycm9yUmFuZ2U+IHJhbmdlOworCiAgICAgc3dpdGNoIChlcnJvci5zeW50YXhFcnJvclR5cGUo
KSkgewogICAgIGNhc2UgUGFyc2VyRXJyb3I6OlN5bnRheEVycm9yTm9uZToKLSAgICAgICAgKnJl
c3VsdCA9IFByb3RvY29sOjpSdW50aW1lOjpTeW50YXhFcnJvclR5cGU6Ok5vbmU7CisgICAgICAg
IHJlc3VsdCA9IFByb3RvY29sOjpSdW50aW1lOjpTeW50YXhFcnJvclR5cGU6Ok5vbmU7CiAgICAg
ICAgIGJyZWFrOworCiAgICAgY2FzZSBQYXJzZXJFcnJvcjo6U3ludGF4RXJyb3JJcnJlY292ZXJh
YmxlOgotICAgICAgICAqcmVzdWx0ID0gUHJvdG9jb2w6OlJ1bnRpbWU6OlN5bnRheEVycm9yVHlw
ZTo6SXJyZWNvdmVyYWJsZTsKKyAgICAgICAgcmVzdWx0ID0gUHJvdG9jb2w6OlJ1bnRpbWU6OlN5
bnRheEVycm9yVHlwZTo6SXJyZWNvdmVyYWJsZTsKICAgICAgICAgYnJlYWs7CisKICAgICBjYXNl
IFBhcnNlckVycm9yOjpTeW50YXhFcnJvclVudGVybWluYXRlZExpdGVyYWw6Ci0gICAgICAgICpy
ZXN1bHQgPSBQcm90b2NvbDo6UnVudGltZTo6U3ludGF4RXJyb3JUeXBlOjpVbnRlcm1pbmF0ZWRM
aXRlcmFsOworICAgICAgICByZXN1bHQgPSBQcm90b2NvbDo6UnVudGltZTo6U3ludGF4RXJyb3JU
eXBlOjpVbnRlcm1pbmF0ZWRMaXRlcmFsOwogICAgICAgICBicmVhazsKKwogICAgIGNhc2UgUGFy
c2VyRXJyb3I6OlN5bnRheEVycm9yUmVjb3ZlcmFibGU6Ci0gICAgICAgICpyZXN1bHQgPSBQcm90
b2NvbDo6UnVudGltZTo6U3ludGF4RXJyb3JUeXBlOjpSZWNvdmVyYWJsZTsKKyAgICAgICAgcmVz
dWx0ID0gUHJvdG9jb2w6OlJ1bnRpbWU6OlN5bnRheEVycm9yVHlwZTo6UmVjb3ZlcmFibGU7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtMTA3LDI5ICsxMTYsNDIgQEAgdm9pZCBJbnNwZWN0
b3JSdW50aW1lQWdlbnQ6OnBhcnNlKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBleHByZXNz
aW9uLCBQcm90b2MKICAgICAgICAgbWVzc2FnZSA9IGVycm9yLm1lc3NhZ2UoKTsKICAgICAgICAg
cmFuZ2UgPSBidWlsZEVycm9yUmFuZ2VPYmplY3QoZXJyb3IudG9rZW4oKS5tX2xvY2F0aW9uKTsK
ICAgICB9CisKKyAgICByZXR1cm4geyB7ICpyZXN1bHQsIG1lc3NhZ2UsIFdURk1vdmUocmFuZ2Up
IH0gfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmV2YWx1YXRlKEVycm9yU3Ry
aW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBjb25zdCBTdHJpbmcq
IG9iamVjdEdyb3VwLCBjb25zdCBib29sKiBpbmNsdWRlQ29tbWFuZExpbmVBUEksIGNvbnN0IGJv
b2wqIGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29sZSwgY29uc3QgaW50KiBleGVj
dXRpb25Db250ZXh0SWQsIGNvbnN0IGJvb2wqIHJldHVybkJ5VmFsdWUsIGNvbnN0IGJvb2wqIGdl
bmVyYXRlUHJldmlldywgY29uc3QgYm9vbCogc2F2ZVJlc3VsdCwgY29uc3QgYm9vbCogLyogZW11
bGF0ZVVzZXJHZXN0dXJlICovLCBSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVj
dD4mIHJlc3VsdCwgT3B0aW9uYWw8Ym9vbD4mIHdhc1Rocm93biwgT3B0aW9uYWw8aW50PiYgc2F2
ZWRSZXN1bHRJbmRleCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHN0ZDo6dHVwbGU8UmVmPFBy
b3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+LCBPcHRpb25hbDxib29sPiAvKiB3YXNUaHJv
d24gKi8sIE9wdGlvbmFsPGludD4gLyogc2F2ZWRSZXN1bHRJbmRleCAqLz4+IEluc3BlY3RvclJ1
bnRpbWVBZ2VudDo6ZXZhbHVhdGUoY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBjb25zdCBTdHJp
bmcmIG9iamVjdEdyb3VwLCBPcHRpb25hbDxib29sPiYmIGluY2x1ZGVDb21tYW5kTGluZUFQSSwg
T3B0aW9uYWw8Ym9vbD4mJiBkb05vdFBhdXNlT25FeGNlcHRpb25zQW5kTXV0ZUNvbnNvbGUsIE9w
dGlvbmFsPFByb3RvY29sOjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0SWQ+JiYgZXhlY3V0aW9u
Q29udGV4dElkLCBPcHRpb25hbDxib29sPiYmIHJldHVybkJ5VmFsdWUsIE9wdGlvbmFsPGJvb2w+
JiYgZ2VuZXJhdGVQcmV2aWV3LCBPcHRpb25hbDxib29sPiYmIHNhdmVSZXN1bHQsIE9wdGlvbmFs
PGJvb2w+JiYgLyogZW11bGF0ZVVzZXJHZXN0dXJlICovKQogewotICAgIEluamVjdGVkU2NyaXB0
IGluamVjdGVkU2NyaXB0ID0gaW5qZWN0ZWRTY3JpcHRGb3JFdmFsKGVycm9yU3RyaW5nLCBleGVj
dXRpb25Db250ZXh0SWQpOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsK
KworICAgIEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0ID0gaW5qZWN0ZWRTY3JpcHRGb3JF
dmFsKGVycm9yU3RyaW5nLCBXVEZNb3ZlKGV4ZWN1dGlvbkNvbnRleHRJZCkpOwogICAgIGlmIChp
bmplY3RlZFNjcmlwdC5oYXNOb1ZhbHVlKCkpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0
dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKKworICAgIFJlZlB0cjxQcm90b2NvbDo6
UnVudGltZTo6UmVtb3RlT2JqZWN0PiByZXN1bHQ7CisgICAgT3B0aW9uYWw8Ym9vbD4gd2FzVGhy
b3duOworICAgIE9wdGlvbmFsPGludD4gc2F2ZWRSZXN1bHRJbmRleDsKIAogICAgIEpTQzo6RGVi
dWdnZXI6OlRlbXBvcmFyaWx5RGlzYWJsZUV4Y2VwdGlvbkJyZWFrcG9pbnRzIHRlbXBvcmFyaWx5
RGlzYWJsZUV4Y2VwdGlvbkJyZWFrcG9pbnRzKG1fZGVidWdnZXIpOwogCi0gICAgYm9vbCBwYXVz
ZUFuZE11dGUgPSBhc0Jvb2woZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xlKTsK
KyAgICBib29sIHBhdXNlQW5kTXV0ZSA9IGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29u
c29sZS52YWx1ZU9yKGZhbHNlKTsKICAgICBpZiAocGF1c2VBbmRNdXRlKSB7CiAgICAgICAgIHRl
bXBvcmFyaWx5RGlzYWJsZUV4Y2VwdGlvbkJyZWFrcG9pbnRzLnJlcGxhY2UoKTsKICAgICAgICAg
bXV0ZUNvbnNvbGUoKTsKICAgICB9CiAKLSAgICBpbmplY3RlZFNjcmlwdC5ldmFsdWF0ZShlcnJv
clN0cmluZywgZXhwcmVzc2lvbiwgb2JqZWN0R3JvdXAgPyAqb2JqZWN0R3JvdXAgOiBTdHJpbmco
KSwgYXNCb29sKGluY2x1ZGVDb21tYW5kTGluZUFQSSksIGFzQm9vbChyZXR1cm5CeVZhbHVlKSwg
YXNCb29sKGdlbmVyYXRlUHJldmlldyksIGFzQm9vbChzYXZlUmVzdWx0KSwgcmVzdWx0LCB3YXNU
aHJvd24sIHNhdmVkUmVzdWx0SW5kZXgpOworICAgIGluamVjdGVkU2NyaXB0LmV2YWx1YXRlKGVy
cm9yU3RyaW5nLCBleHByZXNzaW9uLCBvYmplY3RHcm91cCwgaW5jbHVkZUNvbW1hbmRMaW5lQVBJ
LnZhbHVlT3IoZmFsc2UpLCByZXR1cm5CeVZhbHVlLnZhbHVlT3IoZmFsc2UpLCBnZW5lcmF0ZVBy
ZXZpZXcudmFsdWVPcihmYWxzZSksIHNhdmVSZXN1bHQudmFsdWVPcihmYWxzZSksIHJlc3VsdCwg
d2FzVGhyb3duLCBzYXZlZFJlc3VsdEluZGV4KTsKIAogICAgIGlmIChwYXVzZUFuZE11dGUpCiAg
ICAgICAgIHVubXV0ZUNvbnNvbGUoKTsKKworICAgIGlmICghcmVzdWx0KQorICAgICAgICByZXR1
cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOworCisgICAgcmV0dXJuIHsge3Jlc3VsdC5y
ZWxlYXNlTm9uTnVsbCgpLCBXVEZNb3ZlKHdhc1Rocm93biksIFdURk1vdmUoc2F2ZWRSZXN1bHRJ
bmRleCkgfSB9OwogfQogCi12b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6YXdhaXRQcm9taXNl
KGNvbnN0IFN0cmluZyYgcHJvbWlzZU9iamVjdElkLCBjb25zdCBib29sKiByZXR1cm5CeVZhbHVl
LCBjb25zdCBib29sKiBnZW5lcmF0ZVByZXZpZXcsIGNvbnN0IGJvb2wqIHNhdmVSZXN1bHQsIFJl
ZjxBd2FpdFByb21pc2VDYWxsYmFjaz4mJiBjYWxsYmFjaykKK3ZvaWQgSW5zcGVjdG9yUnVudGlt
ZUFnZW50Ojphd2FpdFByb21pc2UoY29uc3QgUHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVj
dElkJiBwcm9taXNlT2JqZWN0SWQsIE9wdGlvbmFsPGJvb2w+JiYgcmV0dXJuQnlWYWx1ZSwgT3B0
aW9uYWw8Ym9vbD4mJiBnZW5lcmF0ZVByZXZpZXcsIE9wdGlvbmFsPGJvb2w+JiYgc2F2ZVJlc3Vs
dCwgUmVmPEF3YWl0UHJvbWlzZUNhbGxiYWNrPiYmIGNhbGxiYWNrKQogewogICAgIEluamVjdGVk
U2NyaXB0IGluamVjdGVkU2NyaXB0ID0gbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIuaW5qZWN0ZWRT
Y3JpcHRGb3JPYmplY3RJZChwcm9taXNlT2JqZWN0SWQpOwogICAgIGlmIChpbmplY3RlZFNjcmlw
dC5oYXNOb1ZhbHVlKCkpIHsKQEAgLTEzNywyMTkgKzE1OSwyNDQgQEAgdm9pZCBJbnNwZWN0b3JS
dW50aW1lQWdlbnQ6OmF3YWl0UHJvbWlzZShjb25zdCBTdHJpbmcmIHByb21pc2VPYmplY3RJZCwg
Y29uc3QgYm8KICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGluamVjdGVkU2NyaXB0LmF3
YWl0UHJvbWlzZShwcm9taXNlT2JqZWN0SWQsIGFzQm9vbChyZXR1cm5CeVZhbHVlKSwgYXNCb29s
KGdlbmVyYXRlUHJldmlldyksIGFzQm9vbChzYXZlUmVzdWx0KSwgW2NhbGxiYWNrID0gV1RGTW92
ZShjYWxsYmFjayldIChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIFJlZlB0cjxQcm90b2NvbDo6
UnVudGltZTo6UmVtb3RlT2JqZWN0PiYmIHJlc3VsdCwgT3B0aW9uYWw8Ym9vbD4mIHdhc1Rocm93
biwgT3B0aW9uYWw8aW50PiYgc2F2ZWRSZXN1bHRJbmRleCkgewotICAgICAgICBpZiAoIWVycm9y
U3RyaW5nLmlzRW1wdHkoKSkKKyAgICBpbmplY3RlZFNjcmlwdC5hd2FpdFByb21pc2UocHJvbWlz
ZU9iamVjdElkLCByZXR1cm5CeVZhbHVlLnZhbHVlT3IoZmFsc2UpLCBnZW5lcmF0ZVByZXZpZXcu
dmFsdWVPcihmYWxzZSksIHNhdmVSZXN1bHQudmFsdWVPcihmYWxzZSksIFtjYWxsYmFjayA9IFdU
Rk1vdmUoY2FsbGJhY2spXSAoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgUmVm
UHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiYgcmVzdWx0LCBPcHRpb25hbDxi
b29sPiYmIHdhc1Rocm93biwgT3B0aW9uYWw8aW50PiYmIHNhdmVkUmVzdWx0SW5kZXgpIHsKKyAg
ICAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgICAgICBjYWxsYmFjay0+c2VuZEZhaWx1cmUoZXJy
b3JTdHJpbmcpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBjYWxsYmFjay0+c2VuZFN1Y2Nl
c3MoV1RGTW92ZShyZXN1bHQpLCB3YXNUaHJvd24sIHNhdmVkUmVzdWx0SW5kZXgpOworICAgICAg
ICAgICAgY2FsbGJhY2stPnNlbmRTdWNjZXNzKHJlc3VsdC5yZWxlYXNlTm9uTnVsbCgpLCBXVEZN
b3ZlKHdhc1Rocm93biksIFdURk1vdmUoc2F2ZWRSZXN1bHRJbmRleCkpOwogICAgIH0pOwogfQog
Ci12b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6Y2FsbEZ1bmN0aW9uT24oRXJyb3JTdHJpbmcm
IGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIG9iamVjdElkLCBjb25zdCBTdHJpbmcmIGV4cHJl
c3Npb24sIGNvbnN0IEpTT046OkFycmF5KiBvcHRpb25hbEFyZ3VtZW50cywgY29uc3QgYm9vbCog
ZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xlLCBjb25zdCBib29sKiByZXR1cm5C
eVZhbHVlLCBjb25zdCBib29sKiBnZW5lcmF0ZVByZXZpZXcsIGNvbnN0IGJvb2wqIC8qIGVtdWxh
dGVVc2VyR2VzdHVyZSAqLywgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+
JiByZXN1bHQsIE9wdGlvbmFsPGJvb2w+JiB3YXNUaHJvd24pCitQcm90b2NvbDo6RXJyb3JTdHJp
bmdPcjxzdGQ6OnR1cGxlPFJlZjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiwgT3B0
aW9uYWw8Ym9vbD4gLyogd2FzVGhyb3duICovPj4gSW5zcGVjdG9yUnVudGltZUFnZW50OjpjYWxs
RnVuY3Rpb25Pbihjb25zdCBQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0SWQmIG9iamVj
dElkLCBjb25zdCBTdHJpbmcmIGZ1bmN0aW9uRGVjbGFyYXRpb24sIFJlZlB0cjxKU09OOjpBcnJh
eT4mJiBhcmd1bWVudHMsIE9wdGlvbmFsPGJvb2w+JiYgZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0Fu
ZE11dGVDb25zb2xlLCBPcHRpb25hbDxib29sPiYmIHJldHVybkJ5VmFsdWUsIE9wdGlvbmFsPGJv
b2w+JiYgZ2VuZXJhdGVQcmV2aWV3LCBPcHRpb25hbDxib29sPiYmIC8qIGVtdWxhdGVVc2VyR2Vz
dHVyZSAqLykKIHsKLSAgICBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdCA9IG1faW5qZWN0
ZWRTY3JpcHRNYW5hZ2VyLmluamVjdGVkU2NyaXB0Rm9yT2JqZWN0SWQob2JqZWN0SWQpOwotICAg
IGlmIChpbmplY3RlZFNjcmlwdC5oYXNOb1ZhbHVlKCkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcg
PSAiTWlzc2luZyBpbmplY3RlZCBzY3JpcHQgZm9yIGdpdmVuIG9iamVjdElkIl9zOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQorICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsK
IAotICAgIFN0cmluZyBhcmd1bWVudHM7Ci0gICAgaWYgKG9wdGlvbmFsQXJndW1lbnRzKQotICAg
ICAgICBhcmd1bWVudHMgPSBvcHRpb25hbEFyZ3VtZW50cy0+dG9KU09OU3RyaW5nKCk7CisgICAg
SW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHQgPSBtX2luamVjdGVkU2NyaXB0TWFuYWdlci5p
bmplY3RlZFNjcmlwdEZvck9iamVjdElkKG9iamVjdElkKTsKKyAgICBpZiAoaW5qZWN0ZWRTY3Jp
cHQuaGFzTm9WYWx1ZSgpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk1pc3Npbmcg
aW5qZWN0ZWQgc2NyaXB0IGZvciBnaXZlbiBvYmplY3RJZCJfcyk7CisKKyAgICBSZWZQdHI8UHJv
dG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4gcmVzdWx0OworICAgIE9wdGlvbmFsPGJvb2w+
IHdhc1Rocm93bjsKIAogICAgIEpTQzo6RGVidWdnZXI6OlRlbXBvcmFyaWx5RGlzYWJsZUV4Y2Vw
dGlvbkJyZWFrcG9pbnRzIHRlbXBvcmFyaWx5RGlzYWJsZUV4Y2VwdGlvbkJyZWFrcG9pbnRzKG1f
ZGVidWdnZXIpOwogCi0gICAgYm9vbCBwYXVzZUFuZE11dGUgPSBhc0Jvb2woZG9Ob3RQYXVzZU9u
RXhjZXB0aW9uc0FuZE11dGVDb25zb2xlKTsKKyAgICBib29sIHBhdXNlQW5kTXV0ZSA9IGRvTm90
UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29sZS52YWx1ZU9yKGZhbHNlKTsKICAgICBpZiAo
cGF1c2VBbmRNdXRlKSB7CiAgICAgICAgIHRlbXBvcmFyaWx5RGlzYWJsZUV4Y2VwdGlvbkJyZWFr
cG9pbnRzLnJlcGxhY2UoKTsKICAgICAgICAgbXV0ZUNvbnNvbGUoKTsKICAgICB9CiAKLSAgICBp
bmplY3RlZFNjcmlwdC5jYWxsRnVuY3Rpb25PbihlcnJvclN0cmluZywgb2JqZWN0SWQsIGV4cHJl
c3Npb24sIGFyZ3VtZW50cywgYXNCb29sKHJldHVybkJ5VmFsdWUpLCBhc0Jvb2woZ2VuZXJhdGVQ
cmV2aWV3KSwgcmVzdWx0LCB3YXNUaHJvd24pOworICAgIGluamVjdGVkU2NyaXB0LmNhbGxGdW5j
dGlvbk9uKGVycm9yU3RyaW5nLCBvYmplY3RJZCwgZnVuY3Rpb25EZWNsYXJhdGlvbiwgYXJndW1l
bnRzID8gYXJndW1lbnRzLT50b0pTT05TdHJpbmcoKSA6IG51bGxTdHJpbmcoKSwgcmV0dXJuQnlW
YWx1ZS52YWx1ZU9yKGZhbHNlKSwgZ2VuZXJhdGVQcmV2aWV3LnZhbHVlT3IoZmFsc2UpLCByZXN1
bHQsIHdhc1Rocm93bik7CiAKICAgICBpZiAocGF1c2VBbmRNdXRlKQogICAgICAgICB1bm11dGVD
b25zb2xlKCk7CisKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVj
dGVkKGVycm9yU3RyaW5nKTsKKworICAgIHJldHVybiB7IHsgcmVzdWx0LnJlbGVhc2VOb25OdWxs
KCksIFdURk1vdmUod2FzVGhyb3duKSB9IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yUnVudGltZUFn
ZW50OjpnZXRQcmV2aWV3KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBv
YmplY3RJZCwgUmVmUHRyPFByb3RvY29sOjpSdW50aW1lOjpPYmplY3RQcmV2aWV3PiYgcHJldmll
dykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxQcm90b2NvbDo6UnVudGltZTo6T2JqZWN0
UHJldmlldz4+IEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6Z2V0UHJldmlldyhjb25zdCBQcm90b2Nv
bDo6UnVudGltZTo6UmVtb3RlT2JqZWN0SWQmIG9iamVjdElkKQogeworICAgIFByb3RvY29sOjpF
cnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIEluamVjdGVkU2NyaXB0IGluamVjdGVkU2Ny
aXB0ID0gbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIuaW5qZWN0ZWRTY3JpcHRGb3JPYmplY3RJZChv
YmplY3RJZCk7Ci0gICAgaWYgKGluamVjdGVkU2NyaXB0Lmhhc05vVmFsdWUoKSkgewotICAgICAg
ICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIGluamVjdGVkIHNjcmlwdCBmb3IgZ2l2ZW4gb2JqZWN0
SWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKGluamVjdGVkU2NyaXB0Lmhh
c05vVmFsdWUoKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJNaXNzaW5nIGluamVj
dGVkIHNjcmlwdCBmb3IgZ2l2ZW4gb2JqZWN0SWQiX3MpOwogCiAgICAgSlNDOjpEZWJ1Z2dlcjo6
VGVtcG9yYXJpbHlEaXNhYmxlRXhjZXB0aW9uQnJlYWtwb2ludHMgdGVtcG9yYXJpbHlEaXNhYmxl
RXhjZXB0aW9uQnJlYWtwb2ludHMobV9kZWJ1Z2dlcik7CiAgICAgdGVtcG9yYXJpbHlEaXNhYmxl
RXhjZXB0aW9uQnJlYWtwb2ludHMucmVwbGFjZSgpOwogCisgICAgUmVmUHRyPFByb3RvY29sOjpS
dW50aW1lOjpPYmplY3RQcmV2aWV3PiBwcmV2aWV3OworCiAgICAgbXV0ZUNvbnNvbGUoKTsKIAog
ICAgIGluamVjdGVkU2NyaXB0LmdldFByZXZpZXcoZXJyb3JTdHJpbmcsIG9iamVjdElkLCBwcmV2
aWV3KTsKIAogICAgIHVubXV0ZUNvbnNvbGUoKTsKKworICAgIGlmICghcHJldmlldykKKyAgICAg
ICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKKworICAgIHJldHVybiBwcmV2
aWV3LnJlbGVhc2VOb25OdWxsKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50Ojpn
ZXRQcm9wZXJ0aWVzKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBvYmpl
Y3RJZCwgY29uc3QgYm9vbCogb3duUHJvcGVydGllcywgY29uc3QgaW50KiBmZXRjaFN0YXJ0LCBj
b25zdCBpbnQqIGZldGNoQ291bnQsIGNvbnN0IGJvb2wqIGdlbmVyYXRlUHJldmlldywgUmVmUHRy
PEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OlByb3BlcnR5RGVzY3JpcHRvcj4+JiBw
cm9wZXJ0aWVzLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UnVudGltZTo6SW50ZXJu
YWxQcm9wZXJ0eURlc2NyaXB0b3I+PiYgaW50ZXJuYWxQcm9wZXJ0aWVzKQorUHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8c3RkOjp0dXBsZTxSZWY8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UnVudGlt
ZTo6UHJvcGVydHlEZXNjcmlwdG9yPj4sIFJlZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpS
dW50aW1lOjpJbnRlcm5hbFByb3BlcnR5RGVzY3JpcHRvcj4+Pj4gSW5zcGVjdG9yUnVudGltZUFn
ZW50OjpnZXRQcm9wZXJ0aWVzKGNvbnN0IFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3RJ
ZCYgb2JqZWN0SWQsIE9wdGlvbmFsPGJvb2w+JiYgb3duUHJvcGVydGllcywgT3B0aW9uYWw8aW50
PiYmIGZldGNoU3RhcnQsIE9wdGlvbmFsPGludD4mJiBmZXRjaENvdW50LCBPcHRpb25hbDxib29s
PiYmIGdlbmVyYXRlUHJldmlldykKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JT
dHJpbmc7CisKICAgICBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdCA9IG1faW5qZWN0ZWRT
Y3JpcHRNYW5hZ2VyLmluamVjdGVkU2NyaXB0Rm9yT2JqZWN0SWQob2JqZWN0SWQpOwotICAgIGlm
IChpbmplY3RlZFNjcmlwdC5oYXNOb1ZhbHVlKCkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAi
TWlzc2luZyBpbmplY3RlZCBzY3JpcHQgZm9yIGdpdmVuIG9iamVjdElkIl9zOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQorICAgIGlmIChpbmplY3RlZFNjcmlwdC5oYXNOb1ZhbHVlKCkpCisgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTWlzc2luZyBpbmplY3RlZCBzY3JpcHQgZm9yIGdp
dmVuIG9iamVjdElkIl9zKTsKIAotICAgIGludCBzdGFydCA9IGFzSW50KGZldGNoU3RhcnQpOwot
ICAgIGlmIChzdGFydCA8IDApIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiZmV0Y2hTdGFydCBj
YW5ub3QgYmUgbmVnYXRpdmUiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaW50IHN0
YXJ0ID0gZmV0Y2hTdGFydC52YWx1ZU9yKDApOworICAgIGlmIChzdGFydCA8IDApCisgICAgICAg
IHJldHVybiBtYWtlVW5leHBlY3RlZCgiZmV0Y2hTdGFydCBjYW5ub3QgYmUgbmVnYXRpdmUiX3Mp
OwogCi0gICAgaW50IGNvdW50ID0gYXNJbnQoZmV0Y2hDb3VudCk7Ci0gICAgaWYgKGNvdW50IDwg
MCkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJmZXRjaENvdW50IGNhbm5vdCBiZSBuZWdhdGl2
ZSJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpbnQgY291bnQgPSBmZXRjaENvdW50
LnZhbHVlT3IoMCk7CisgICAgaWYgKGNvdW50IDwgMCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4
cGVjdGVkKCJmZXRjaENvdW50IGNhbm5vdCBiZSBuZWdhdGl2ZSJfcyk7CisKKyAgICBSZWZQdHI8
SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UnVudGltZTo6UHJvcGVydHlEZXNjcmlwdG9yPj4gcHJv
cGVydGllczsKKyAgICBSZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UnVudGltZTo6SW50
ZXJuYWxQcm9wZXJ0eURlc2NyaXB0b3I+PiBpbnRlcm5hbFByb3BlcnRpZXM7CiAKICAgICBKU0M6
OkRlYnVnZ2VyOjpUZW1wb3JhcmlseURpc2FibGVFeGNlcHRpb25CcmVha3BvaW50cyB0ZW1wb3Jh
cmlseURpc2FibGVFeGNlcHRpb25CcmVha3BvaW50cyhtX2RlYnVnZ2VyKTsKICAgICB0ZW1wb3Jh
cmlseURpc2FibGVFeGNlcHRpb25CcmVha3BvaW50cy5yZXBsYWNlKCk7CiAKICAgICBtdXRlQ29u
c29sZSgpOwogCi0gICAgaW5qZWN0ZWRTY3JpcHQuZ2V0UHJvcGVydGllcyhlcnJvclN0cmluZywg
b2JqZWN0SWQsIGFzQm9vbChvd25Qcm9wZXJ0aWVzKSwgc3RhcnQsIGNvdW50LCBhc0Jvb2woZ2Vu
ZXJhdGVQcmV2aWV3KSwgcHJvcGVydGllcyk7CisgICAgaW5qZWN0ZWRTY3JpcHQuZ2V0UHJvcGVy
dGllcyhlcnJvclN0cmluZywgb2JqZWN0SWQsIG93blByb3BlcnRpZXMudmFsdWVPcihmYWxzZSks
IHN0YXJ0LCBjb3VudCwgZ2VuZXJhdGVQcmV2aWV3LnZhbHVlT3IoZmFsc2UpLCBwcm9wZXJ0aWVz
KTsKIAogICAgIC8vIE9ubHkgaW5jbHVkZSBpbnRlcm5hbCBwcm9wZXJ0aWVzIGZvciB0aGUgZmly
c3QgZmV0Y2guCiAgICAgaWYgKCFzdGFydCkKLSAgICAgICAgaW5qZWN0ZWRTY3JpcHQuZ2V0SW50
ZXJuYWxQcm9wZXJ0aWVzKGVycm9yU3RyaW5nLCBvYmplY3RJZCwgYXNCb29sKGdlbmVyYXRlUHJl
dmlldyksIGludGVybmFsUHJvcGVydGllcyk7CisgICAgICAgIGluamVjdGVkU2NyaXB0LmdldElu
dGVybmFsUHJvcGVydGllcyhlcnJvclN0cmluZywgb2JqZWN0SWQsIGdlbmVyYXRlUHJldmlldy52
YWx1ZU9yKGZhbHNlKSwgaW50ZXJuYWxQcm9wZXJ0aWVzKTsKIAogICAgIHVubXV0ZUNvbnNvbGUo
KTsKKworICAgIGlmICghcHJvcGVydGllcykKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVk
KGVycm9yU3RyaW5nKTsKKworICAgIHJldHVybiB7IHsgcHJvcGVydGllcy5yZWxlYXNlTm9uTnVs
bCgpLCBXVEZNb3ZlKGludGVybmFsUHJvcGVydGllcykgfSB9OwogfQogCi12b2lkIEluc3BlY3Rv
clJ1bnRpbWVBZ2VudDo6Z2V0RGlzcGxheWFibGVQcm9wZXJ0aWVzKEVycm9yU3RyaW5nJiBlcnJv
clN0cmluZywgY29uc3QgU3RyaW5nJiBvYmplY3RJZCwgY29uc3QgaW50KiBmZXRjaFN0YXJ0LCBj
b25zdCBpbnQqIGZldGNoQ291bnQsIGNvbnN0IGJvb2wqIGdlbmVyYXRlUHJldmlldywgUmVmUHRy
PEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OlByb3BlcnR5RGVzY3JpcHRvcj4+JiBw
cm9wZXJ0aWVzLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UnVudGltZTo6SW50ZXJu
YWxQcm9wZXJ0eURlc2NyaXB0b3I+PiYgaW50ZXJuYWxQcm9wZXJ0aWVzKQorUHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8c3RkOjp0dXBsZTxSZWY8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UnVudGlt
ZTo6UHJvcGVydHlEZXNjcmlwdG9yPj4sIFJlZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpS
dW50aW1lOjpJbnRlcm5hbFByb3BlcnR5RGVzY3JpcHRvcj4+Pj4gSW5zcGVjdG9yUnVudGltZUFn
ZW50OjpnZXREaXNwbGF5YWJsZVByb3BlcnRpZXMoY29uc3QgUHJvdG9jb2w6OlJ1bnRpbWU6OlJl
bW90ZU9iamVjdElkJiBvYmplY3RJZCwgT3B0aW9uYWw8aW50PiYmIGZldGNoU3RhcnQsIE9wdGlv
bmFsPGludD4mJiBmZXRjaENvdW50LCBPcHRpb25hbDxib29sPiYmIGdlbmVyYXRlUHJldmlldykK
IHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBJbmplY3Rl
ZFNjcmlwdCBpbmplY3RlZFNjcmlwdCA9IG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmluamVjdGVk
U2NyaXB0Rm9yT2JqZWN0SWQob2JqZWN0SWQpOwotICAgIGlmIChpbmplY3RlZFNjcmlwdC5oYXNO
b1ZhbHVlKCkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWlzc2luZyBpbmplY3RlZCBzY3Jp
cHQgZm9yIGdpdmVuIG9iamVjdElkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlm
IChpbmplY3RlZFNjcmlwdC5oYXNOb1ZhbHVlKCkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBl
Y3RlZCgiTWlzc2luZyBpbmplY3RlZCBzY3JpcHQgZm9yIGdpdmVuIG9iamVjdElkIl9zKTsKIAot
ICAgIGludCBzdGFydCA9IGFzSW50KGZldGNoU3RhcnQpOwotICAgIGlmIChzdGFydCA8IDApIHsK
LSAgICAgICAgZXJyb3JTdHJpbmcgPSAiZmV0Y2hTdGFydCBjYW5ub3QgYmUgbmVnYXRpdmUiX3M7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaW50IHN0YXJ0ID0gZmV0Y2hTdGFydC52YWx1
ZU9yKDApOworICAgIGlmIChzdGFydCA8IDApCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3Rl
ZCgiZmV0Y2hTdGFydCBjYW5ub3QgYmUgbmVnYXRpdmUiX3MpOwogCi0gICAgaW50IGNvdW50ID0g
YXNJbnQoZmV0Y2hDb3VudCk7Ci0gICAgaWYgKGNvdW50IDwgMCkgewotICAgICAgICBlcnJvclN0
cmluZyA9ICJmZXRjaENvdW50IGNhbm5vdCBiZSBuZWdhdGl2ZSJfczsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KKyAgICBpbnQgY291bnQgPSBmZXRjaENvdW50LnZhbHVlT3IoMCk7CisgICAgaWYg
KGNvdW50IDwgMCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJmZXRjaENvdW50IGNh
bm5vdCBiZSBuZWdhdGl2ZSJfcyk7CisKKyAgICBSZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90b2Nv
bDo6UnVudGltZTo6UHJvcGVydHlEZXNjcmlwdG9yPj4gcHJvcGVydGllczsKKyAgICBSZWZQdHI8
SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UnVudGltZTo6SW50ZXJuYWxQcm9wZXJ0eURlc2NyaXB0
b3I+PiBpbnRlcm5hbFByb3BlcnRpZXM7CiAKICAgICBKU0M6OkRlYnVnZ2VyOjpUZW1wb3Jhcmls
eURpc2FibGVFeGNlcHRpb25CcmVha3BvaW50cyB0ZW1wb3JhcmlseURpc2FibGVFeGNlcHRpb25C
cmVha3BvaW50cyhtX2RlYnVnZ2VyKTsKICAgICB0ZW1wb3JhcmlseURpc2FibGVFeGNlcHRpb25C
cmVha3BvaW50cy5yZXBsYWNlKCk7CiAKICAgICBtdXRlQ29uc29sZSgpOwogCi0gICAgaW5qZWN0
ZWRTY3JpcHQuZ2V0RGlzcGxheWFibGVQcm9wZXJ0aWVzKGVycm9yU3RyaW5nLCBvYmplY3RJZCwg
c3RhcnQsIGNvdW50LCBhc0Jvb2woZ2VuZXJhdGVQcmV2aWV3KSwgcHJvcGVydGllcyk7CisgICAg
aW5qZWN0ZWRTY3JpcHQuZ2V0RGlzcGxheWFibGVQcm9wZXJ0aWVzKGVycm9yU3RyaW5nLCBvYmpl
Y3RJZCwgc3RhcnQsIGNvdW50LCBnZW5lcmF0ZVByZXZpZXcudmFsdWVPcihmYWxzZSksIHByb3Bl
cnRpZXMpOwogCiAgICAgLy8gT25seSBpbmNsdWRlIGludGVybmFsIHByb3BlcnRpZXMgZm9yIHRo
ZSBmaXJzdCBmZXRjaC4KICAgICBpZiAoIXN0YXJ0KQotICAgICAgICBpbmplY3RlZFNjcmlwdC5n
ZXRJbnRlcm5hbFByb3BlcnRpZXMoZXJyb3JTdHJpbmcsIG9iamVjdElkLCBhc0Jvb2woZ2VuZXJh
dGVQcmV2aWV3KSwgaW50ZXJuYWxQcm9wZXJ0aWVzKTsKKyAgICAgICAgaW5qZWN0ZWRTY3JpcHQu
Z2V0SW50ZXJuYWxQcm9wZXJ0aWVzKGVycm9yU3RyaW5nLCBvYmplY3RJZCwgZ2VuZXJhdGVQcmV2
aWV3LnZhbHVlT3IoZmFsc2UpLCBpbnRlcm5hbFByb3BlcnRpZXMpOwogCiAgICAgdW5tdXRlQ29u
c29sZSgpOworCisgICAgaWYgKCFwcm9wZXJ0aWVzKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoZXJyb3JTdHJpbmcpOworCisgICAgcmV0dXJuIHsgeyBwcm9wZXJ0aWVzLnJlbGVhc2VO
b25OdWxsKCksIFdURk1vdmUoaW50ZXJuYWxQcm9wZXJ0aWVzKSB9IH07CiB9CiAKLXZvaWQgSW5z
cGVjdG9yUnVudGltZUFnZW50OjpnZXRDb2xsZWN0aW9uRW50cmllcyhFcnJvclN0cmluZyYgZXJy
b3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgb2JqZWN0SWQsIGNvbnN0IFN0cmluZyogb2JqZWN0R3Jv
dXAsIGNvbnN0IGludCogZmV0Y2hTdGFydCwgY29uc3QgaW50KiBmZXRjaENvdW50LCBSZWZQdHI8
SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UnVudGltZTo6Q29sbGVjdGlvbkVudHJ5Pj4mIGVudHJp
ZXMpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6
UnVudGltZTo6Q29sbGVjdGlvbkVudHJ5Pj4+IEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6Z2V0Q29s
bGVjdGlvbkVudHJpZXMoY29uc3QgUHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdElkJiBv
YmplY3RJZCwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCwgT3B0aW9uYWw8aW50PiYmIGZldGNo
U3RhcnQsIE9wdGlvbmFsPGludD4mJiBmZXRjaENvdW50KQogeworICAgIFByb3RvY29sOjpFcnJv
clN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0
ID0gbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIuaW5qZWN0ZWRTY3JpcHRGb3JPYmplY3RJZChvYmpl
Y3RJZCk7Ci0gICAgaWYgKGluamVjdGVkU2NyaXB0Lmhhc05vVmFsdWUoKSkgewotICAgICAgICBl
cnJvclN0cmluZyA9ICJNaXNzaW5nIGluamVjdGVkIHNjcmlwdCBmb3IgZ2l2ZW4gb2JqZWN0SWQi
X3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKGluamVjdGVkU2NyaXB0Lmhhc05v
VmFsdWUoKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJNaXNzaW5nIGluamVjdGVk
IHNjcmlwdCBmb3IgZ2l2ZW4gb2JqZWN0SWQiX3MpOwogCi0gICAgaW50IHN0YXJ0ID0gYXNJbnQo
ZmV0Y2hTdGFydCk7Ci0gICAgaWYgKHN0YXJ0IDwgMCkgewotICAgICAgICBlcnJvclN0cmluZyA9
ICJmZXRjaFN0YXJ0IGNhbm5vdCBiZSBuZWdhdGl2ZSJfczsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KKyAgICBpbnQgc3RhcnQgPSBmZXRjaFN0YXJ0LnZhbHVlT3IoMCk7CisgICAgaWYgKHN0YXJ0
IDwgMCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJmZXRjaFN0YXJ0IGNhbm5vdCBi
ZSBuZWdhdGl2ZSJfcyk7CiAKLSAgICBpbnQgY291bnQgPSBhc0ludChmZXRjaENvdW50KTsKLSAg
ICBpZiAoY291bnQgPCAwKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gImZldGNoQ291bnQgY2Fu
bm90IGJlIG5lZ2F0aXZlIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGludCBjb3Vu
dCA9IGZldGNoQ291bnQudmFsdWVPcigwKTsKKyAgICBpZiAoY291bnQgPCAwKQorICAgICAgICBy
ZXR1cm4gbWFrZVVuZXhwZWN0ZWQoImZldGNoQ291bnQgY2Fubm90IGJlIG5lZ2F0aXZlIl9zKTsK
IAotICAgIGluamVjdGVkU2NyaXB0LmdldENvbGxlY3Rpb25FbnRyaWVzKGVycm9yU3RyaW5nLCBv
YmplY3RJZCwgb2JqZWN0R3JvdXAgPyAqb2JqZWN0R3JvdXAgOiBTdHJpbmcoKSwgc3RhcnQsIGNv
dW50LCBlbnRyaWVzKTsKKyAgICBSZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UnVudGlt
ZTo6Q29sbGVjdGlvbkVudHJ5Pj4gZW50cmllczsKKworICAgIGluamVjdGVkU2NyaXB0LmdldENv
bGxlY3Rpb25FbnRyaWVzKGVycm9yU3RyaW5nLCBvYmplY3RJZCwgb2JqZWN0R3JvdXAsIHN0YXJ0
LCBjb3VudCwgZW50cmllcyk7CisKKyAgICBpZiAoIWVudHJpZXMpCisgICAgICAgIHJldHVybiBt
YWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CisKKyAgICByZXR1cm4gZW50cmllcy5yZWxlYXNl
Tm9uTnVsbCgpOwogfQogCi12b2lkIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6c2F2ZVJlc3VsdChF
cnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IEpTT046Ok9iamVjdCYgY2FsbEFyZ3VtZW50
LCBjb25zdCBpbnQqIGV4ZWN1dGlvbkNvbnRleHRJZCwgT3B0aW9uYWw8aW50PiYgc2F2ZWRSZXN1
bHRJbmRleCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPE9wdGlvbmFsPGludD4gLyogc2F2ZVJl
c3VsdEluZGV4ICovPiBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OnNhdmVSZXN1bHQoUmVmPEpTT046
Ok9iamVjdD4mJiBjYWxsQXJndW1lbnQsIE9wdGlvbmFsPFByb3RvY29sOjpSdW50aW1lOjpFeGVj
dXRpb25Db250ZXh0SWQ+JiYgZXhlY3V0aW9uQ29udGV4dElkKQogeworICAgIFByb3RvY29sOjpF
cnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIEluamVjdGVkU2NyaXB0IGluamVjdGVkU2Ny
aXB0OwogCi0gICAgU3RyaW5nIG9iamVjdElkOwotICAgIGlmIChjYWxsQXJndW1lbnQuZ2V0U3Ry
aW5nKCJvYmplY3RJZCJfcywgb2JqZWN0SWQpKSB7Ci0gICAgICAgIGluamVjdGVkU2NyaXB0ID0g
bV9pbmplY3RlZFNjcmlwdE1hbmFnZXIuaW5qZWN0ZWRTY3JpcHRGb3JPYmplY3RJZChvYmplY3RJ
ZCk7Ci0gICAgICAgIGlmIChpbmplY3RlZFNjcmlwdC5oYXNOb1ZhbHVlKCkpIHsKLSAgICAgICAg
ICAgIGVycm9yU3RyaW5nID0gIk1pc3NpbmcgaW5qZWN0ZWQgc2NyaXB0IGZvciBnaXZlbiBvYmpl
Y3RJZCJfczsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0g
ICAgICAgIGluamVjdGVkU2NyaXB0ID0gaW5qZWN0ZWRTY3JpcHRGb3JFdmFsKGVycm9yU3RyaW5n
LCBleGVjdXRpb25Db250ZXh0SWQpOworICAgIGF1dG8gb2JqZWN0SWQgPSBjYWxsQXJndW1lbnQt
PmdldFN0cmluZyhQcm90b2NvbDo6UnVudGltZTo6Q2FsbEFyZ3VtZW50OjpvYmplY3RJZEtleSk7
CisgICAgaWYgKCFvYmplY3RJZCkgeworICAgICAgICBpbmplY3RlZFNjcmlwdCA9IGluamVjdGVk
U2NyaXB0Rm9yRXZhbChlcnJvclN0cmluZywgV1RGTW92ZShleGVjdXRpb25Db250ZXh0SWQpKTsK
ICAgICAgICAgaWYgKGluamVjdGVkU2NyaXB0Lmhhc05vVmFsdWUoKSkKLSAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgaW5qZWN0ZWRTY3JpcHQgPSBtX2luamVjdGVkU2NyaXB0TWFu
YWdlci5pbmplY3RlZFNjcmlwdEZvck9iamVjdElkKG9iamVjdElkKTsKKyAgICAgICAgaWYgKGlu
amVjdGVkU2NyaXB0Lmhhc05vVmFsdWUoKSkKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBl
Y3RlZCgiTWlzc2luZyBpbmplY3RlZCBzY3JpcHQgZm9yIGdpdmVuIG9iamVjdElkIl9zKTsKICAg
ICB9Ci0gICAgCi0gICAgaW5qZWN0ZWRTY3JpcHQuc2F2ZVJlc3VsdChlcnJvclN0cmluZywgY2Fs
bEFyZ3VtZW50LnRvSlNPTlN0cmluZygpLCBzYXZlZFJlc3VsdEluZGV4KTsKKworICAgIE9wdGlv
bmFsPGludD4gc2F2ZWRSZXN1bHRJbmRleDsKKworICAgIGluamVjdGVkU2NyaXB0LnNhdmVSZXN1
bHQoZXJyb3JTdHJpbmcsIGNhbGxBcmd1bWVudC0+dG9KU09OU3RyaW5nKCksIHNhdmVkUmVzdWx0
SW5kZXgpOworCisgICAgaWYgKCFzYXZlZFJlc3VsdEluZGV4KQorICAgICAgICByZXR1cm4gbWFr
ZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOworCisgICAgcmV0dXJuIFdURk1vdmUoc2F2ZWRSZXN1
bHRJbmRleCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50OjpzZXRTYXZlZFJlc3Vs
dEFsaWFzKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nKiBhbGlhcykKK1Byb3RvY29sOjpFcnJv
clN0cmluZ09yPHZvaWQ+IEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6c2V0U2F2ZWRSZXN1bHRBbGlh
cyhjb25zdCBTdHJpbmcmIHNhdmVkUmVzdWx0QWxpYXMpCiB7Ci0gICAgT3B0aW9uYWw8U3RyaW5n
PiBzYXZlZFJlc3VsdEFsaWFzOwotICAgIGlmIChhbGlhcyAmJiAhYWxpYXMtPmlzRW1wdHkoKSkK
LSAgICAgICAgc2F2ZWRSZXN1bHRBbGlhcyA9ICphbGlhczsKICAgICBtX2luamVjdGVkU2NyaXB0
TWFuYWdlci5pbmplY3RlZFNjcmlwdEhvc3QoKS5zZXRTYXZlZFJlc3VsdEFsaWFzKHNhdmVkUmVz
dWx0QWxpYXMpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSdW50aW1l
QWdlbnQ6OnJlbGVhc2VPYmplY3QoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIG9iamVjdElk
KQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yUnVudGltZUFnZW50Ojpy
ZWxlYXNlT2JqZWN0KGNvbnN0IFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3RJZCYgb2Jq
ZWN0SWQpCiB7CiAgICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHQgPSBtX2luamVjdGVk
U2NyaXB0TWFuYWdlci5pbmplY3RlZFNjcmlwdEZvck9iamVjdElkKG9iamVjdElkKTsKICAgICBp
ZiAoIWluamVjdGVkU2NyaXB0Lmhhc05vVmFsdWUoKSkKICAgICAgICAgaW5qZWN0ZWRTY3JpcHQu
cmVsZWFzZU9iamVjdChvYmplY3RJZCk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIElu
c3BlY3RvclJ1bnRpbWVBZ2VudDo6cmVsZWFzZU9iamVjdEdyb3VwKEVycm9yU3RyaW5nJiwgY29u
c3QgU3RyaW5nJiBvYmplY3RHcm91cCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IElu
c3BlY3RvclJ1bnRpbWVBZ2VudDo6cmVsZWFzZU9iamVjdEdyb3VwKGNvbnN0IFN0cmluZyYgb2Jq
ZWN0R3JvdXApCiB7CiAgICAgbV9pbmplY3RlZFNjcmlwdE1hbmFnZXIucmVsZWFzZU9iamVjdEdy
b3VwKG9iamVjdEdyb3VwKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9y
UnVudGltZUFnZW50OjpnZXRSdW50aW1lVHlwZXNGb3JWYXJpYWJsZXNBdE9mZnNldHMoRXJyb3JT
dHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBKU09OOjpBcnJheSYgbG9jYXRpb25zLCBSZWZQdHI8
SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UnVudGltZTo6VHlwZURlc2NyaXB0aW9uPj4mIHR5cGVE
ZXNjcmlwdGlvbnMpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SlNPTjo6QXJyYXlPZjxQ
cm90b2NvbDo6UnVudGltZTo6VHlwZURlc2NyaXB0aW9uPj4+IEluc3BlY3RvclJ1bnRpbWVBZ2Vu
dDo6Z2V0UnVudGltZVR5cGVzRm9yVmFyaWFibGVzQXRPZmZzZXRzKFJlZjxKU09OOjpBcnJheT4m
JiBsb2NhdGlvbnMpCiB7CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZlcmJvc2UgPSBmYWxz
ZTsKIAotICAgIHR5cGVEZXNjcmlwdGlvbnMgPSBKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50
aW1lOjpUeXBlRGVzY3JpcHRpb24+OjpjcmVhdGUoKTsKLSAgICBpZiAoIW1fdm0udHlwZVByb2Zp
bGVyKCkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiVk0gaGFzIG5vIHR5cGUgaW5mb3JtYXRp
b24iX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKCFtX3ZtLnR5cGVQcm9maWxl
cigpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIlZNIGhhcyBubyB0eXBlIGluZm9y
bWF0aW9uIl9zKTsKKworICAgIGF1dG8gdHlwZXMgPSBKU09OOjpBcnJheU9mPFByb3RvY29sOjpS
dW50aW1lOjpUeXBlRGVzY3JpcHRpb24+OjpjcmVhdGUoKTsKIAogICAgIE1vbm90b25pY1RpbWUg
c3RhcnQgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKICAgICBtX3ZtLnR5cGVQcm9maWxlckxvZygp
LT5wcm9jZXNzTG9nRW50cmllcyhtX3ZtLCAiVXNlciBRdWVyeSJfcyk7CiAKLSAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGxvY2F0aW9ucy5sZW5ndGgoKTsgaSsrKSB7Ci0gICAgICAgIFJlZlB0
cjxKU09OOjpWYWx1ZT4gdmFsdWUgPSBsb2NhdGlvbnMuZ2V0KGkpOwotICAgICAgICBSZWZQdHI8
SlNPTjo6T2JqZWN0PiBsb2NhdGlvbjsKLSAgICAgICAgaWYgKCF2YWx1ZS0+YXNPYmplY3QobG9j
YXRpb24pKSB7Ci0gICAgICAgICAgICBlcnJvclN0cmluZyA9ICJVbmV4cGVjdGVkIG5vbi1vYmpl
Y3QgaXRlbSBpbiBsb2NhdGlvbnMiX3M7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0K
KyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxvY2F0aW9ucy0+bGVuZ3RoKCk7IGkrKykgewor
ICAgICAgICBhdXRvIGxvY2F0aW9uID0gbG9jYXRpb25zLT5nZXQoaSktPmFzT2JqZWN0KCk7Cisg
ICAgICAgIGlmICghbG9jYXRpb24pCisgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQo
IlVuZXhwZWN0ZWQgbm9uLW9iamVjdCBpdGVtIGluIGxvY2F0aW9ucyJfcyk7CiAKLSAgICAgICAg
aW50IGRlc2NyaXB0b3I7Ci0gICAgICAgIFN0cmluZyBzb3VyY2VJREFzU3RyaW5nOwotICAgICAg
ICBpbnQgZGl2b3Q7Ci0gICAgICAgIGxvY2F0aW9uLT5nZXRJbnRlZ2VyKCJ0eXBlSW5mb3JtYXRp
b25EZXNjcmlwdG9yIl9zLCBkZXNjcmlwdG9yKTsKLSAgICAgICAgbG9jYXRpb24tPmdldFN0cmlu
Zygic291cmNlSUQiX3MsIHNvdXJjZUlEQXNTdHJpbmcpOwotICAgICAgICBsb2NhdGlvbi0+Z2V0
SW50ZWdlcigiZGl2b3QiX3MsIGRpdm90KTsKKyAgICAgICAgYXV0byBkZXNjcmlwdG9yID0gbG9j
YXRpb24tPmdldEludGVnZXIoUHJvdG9jb2w6OlJ1bnRpbWU6OlR5cGVMb2NhdGlvbjo6dHlwZUlu
Zm9ybWF0aW9uRGVzY3JpcHRvcktleSkudmFsdWVPcihUeXBlUHJvZmlsZXJTZWFyY2hEZXNjcmlw
dG9yTm9ybWFsKTsKKyAgICAgICAgYXV0byBzb3VyY2VJRFN0cmluZyA9IGxvY2F0aW9uLT5nZXRT
dHJpbmcoUHJvdG9jb2w6OlJ1bnRpbWU6OlR5cGVMb2NhdGlvbjo6c291cmNlSURLZXkpOworICAg
ICAgICBhdXRvIGRpdm90ID0gbG9jYXRpb24tPmdldEludGVnZXIoUHJvdG9jb2w6OlJ1bnRpbWU6
OlR5cGVMb2NhdGlvbjo6ZGl2b3RLZXkpLnZhbHVlT3IoMCk7CiAKICAgICAgICAgYm9vbCBva2F5
OwotICAgICAgICBUeXBlTG9jYXRpb24qIHR5cGVMb2NhdGlvbiA9IG1fdm0udHlwZVByb2ZpbGVy
KCktPmZpbmRMb2NhdGlvbihkaXZvdCwgc291cmNlSURBc1N0cmluZy50b0ludFB0clN0cmljdCgm
b2theSksIHN0YXRpY19jYXN0PFR5cGVQcm9maWxlclNlYXJjaERlc2NyaXB0b3I+KGRlc2NyaXB0
b3IpLCBtX3ZtKTsKKyAgICAgICAgVHlwZUxvY2F0aW9uKiB0eXBlTG9jYXRpb24gPSBtX3ZtLnR5
cGVQcm9maWxlcigpLT5maW5kTG9jYXRpb24oZGl2b3QsIHNvdXJjZUlEU3RyaW5nLnRvSW50UHRy
U3RyaWN0KCZva2F5KSwgc3RhdGljX2Nhc3Q8VHlwZVByb2ZpbGVyU2VhcmNoRGVzY3JpcHRvcj4o
ZGVzY3JpcHRvciksIG1fdm0pOwogICAgICAgICBBU1NFUlQob2theSk7CiAKICAgICAgICAgUmVm
UHRyPFR5cGVTZXQ+IHR5cGVTZXQ7CkBAIC0zNzIsMTIgKzQxOSwxNCBAQCB2b2lkIEluc3BlY3Rv
clJ1bnRpbWVBZ2VudDo6Z2V0UnVudGltZVR5cGVzRm9yVmFyaWFibGVzQXRPZmZzZXRzKEVycm9y
U3RyaW5nJiBlcgogICAgICAgICAgICAgZGVzY3JpcHRpb24tPnNldElzVHJ1bmNhdGVkKHR5cGVT
ZXQtPmlzT3ZlcmZsb3duKCkpOwogICAgICAgICB9CiAKLSAgICAgICAgdHlwZURlc2NyaXB0aW9u
cy0+YWRkSXRlbShXVEZNb3ZlKGRlc2NyaXB0aW9uKSk7CisgICAgICAgIHR5cGVzLT5hZGRJdGVt
KFdURk1vdmUoZGVzY3JpcHRpb24pKTsKICAgICB9CiAKICAgICBNb25vdG9uaWNUaW1lIGVuZCA9
IE1vbm90b25pY1RpbWU6Om5vdygpOwogICAgIGlmICh2ZXJib3NlKQogICAgICAgICBkYXRhTG9n
RigiSW5zcGVjdG9yOjpnZXRSdW50aW1lVHlwZXNGb3JWYXJpYWJsZXNBdE9mZnNldHMgdG9vayAl
bGZtc1xuIiwgKGVuZCAtIHN0YXJ0KS5taWxsaXNlY29uZHMoKSk7CisKKyAgICByZXR1cm4gV1RG
TW92ZSh0eXBlcyk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50OjpkaWRDcmVhdGVG
cm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9udGVuZFJvdXRlciosIEluc3BlY3Rvcjo6
QmFja2VuZERpc3BhdGNoZXIqKQpAQCAtMzg5LDI4ICs0MzgsMzUgQEAgdm9pZCBJbnNwZWN0b3JS
dW50aW1lQWdlbnQ6OndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKERpc2Nvbm5lY3RSZWFz
b24gcmVhc28KICAgICBpZiAocmVhc29uICE9IERpc2Nvbm5lY3RSZWFzb246Okluc3BlY3RlZFRh
cmdldERlc3Ryb3llZCAmJiBtX2lzVHlwZVByb2ZpbGluZ0VuYWJsZWQpCiAgICAgICAgIHNldFR5
cGVQcm9maWxlckVuYWJsZWRTdGF0ZShmYWxzZSk7CiAKLSAgICBTdHJpbmcgdW51c2VkOwotICAg
IGRpc2FibGUodW51c2VkKTsKKyAgICBkaXNhYmxlKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yUnVu
dGltZUFnZW50OjplbmFibGVUeXBlUHJvZmlsZXIoRXJyb3JTdHJpbmcmKQorUHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yUnVudGltZUFnZW50OjplbmFibGVUeXBlUHJvZmls
ZXIoKQogewogICAgIHNldFR5cGVQcm9maWxlckVuYWJsZWRTdGF0ZSh0cnVlKTsKKworICAgIHJl
dHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yUnVudGltZUFnZW50OjpkaXNhYmxlVHlwZVBy
b2ZpbGVyKEVycm9yU3RyaW5nJikKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3Bl
Y3RvclJ1bnRpbWVBZ2VudDo6ZGlzYWJsZVR5cGVQcm9maWxlcigpCiB7CiAgICAgc2V0VHlwZVBy
b2ZpbGVyRW5hYmxlZFN0YXRlKGZhbHNlKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQg
SW5zcGVjdG9yUnVudGltZUFnZW50OjplbmFibGVDb250cm9sRmxvd1Byb2ZpbGVyKEVycm9yU3Ry
aW5nJikKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvclJ1bnRpbWVBZ2Vu
dDo6ZW5hYmxlQ29udHJvbEZsb3dQcm9maWxlcigpCiB7CiAgICAgc2V0Q29udHJvbEZsb3dQcm9m
aWxlckVuYWJsZWRTdGF0ZSh0cnVlKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5z
cGVjdG9yUnVudGltZUFnZW50OjpkaXNhYmxlQ29udHJvbEZsb3dQcm9maWxlcihFcnJvclN0cmlu
ZyYpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6
OmRpc2FibGVDb250cm9sRmxvd1Byb2ZpbGVyKCkKIHsKICAgICBzZXRDb250cm9sRmxvd1Byb2Zp
bGVyRW5hYmxlZFN0YXRlKGZhbHNlKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKIHZvaWQgSW5z
cGVjdG9yUnVudGltZUFnZW50OjpzZXRUeXBlUHJvZmlsZXJFbmFibGVkU3RhdGUoYm9vbCBpc1R5
cGVQcm9maWxpbmdFbmFibGVkKQpAQCAtNDQyLDE5ICs0OTgsMTMgQEAgdm9pZCBJbnNwZWN0b3JS
dW50aW1lQWdlbnQ6OnNldENvbnRyb2xGbG93UHJvZmlsZXJFbmFibGVkU3RhdGUoYm9vbCBpc0Nv
bnRyb2xGbG8KICAgICB9KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmdldEJh
c2ljQmxvY2tzKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBzb3VyY2VJ
REFzU3RyaW5nLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UnVudGltZTo6QmFzaWNC
bG9jaz4+JiBiYXNpY0Jsb2NrcykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpB
cnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpCYXNpY0Jsb2NrPj4+IEluc3BlY3RvclJ1bnRpbWVB
Z2VudDo6Z2V0QmFzaWNCbG9ja3MoY29uc3QgU3RyaW5nJiBzb3VyY2VJRCkKIHsKLSAgICBpZiAo
IW1fdm0uY29udHJvbEZsb3dQcm9maWxlcigpKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIlZN
IGhhcyBubyBjb250cm9sIGZsb3cgaW5mb3JtYXRpb24iX3M7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9CisgICAgaWYgKCFtX3ZtLmNvbnRyb2xGbG93UHJvZmlsZXIoKSkKKyAgICAgICAgcmV0dXJu
IG1ha2VVbmV4cGVjdGVkKCJWTSBoYXMgbm8gY29udHJvbCBmbG93IGluZm9ybWF0aW9uIl9zKTsK
IAotICAgIGJvb2wgb2theTsKLSAgICBpbnRwdHJfdCBzb3VyY2VJRCA9IHNvdXJjZUlEQXNTdHJp
bmcudG9JbnRQdHJTdHJpY3QoJm9rYXkpOwotICAgIEFTU0VSVChva2F5KTsKLSAgICBjb25zdCBW
ZWN0b3I8QmFzaWNCbG9ja1JhbmdlPiYgYmFzaWNCbG9ja1JhbmdlcyA9IG1fdm0uY29udHJvbEZs
b3dQcm9maWxlcigpLT5nZXRCYXNpY0Jsb2Nrc0ZvclNvdXJjZUlEKHNvdXJjZUlELCBtX3ZtKTsK
LSAgICBiYXNpY0Jsb2NrcyA9IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OkJhc2lj
QmxvY2s+OjpjcmVhdGUoKTsKLSAgICBmb3IgKGNvbnN0IEJhc2ljQmxvY2tSYW5nZSYgYmxvY2sg
OiBiYXNpY0Jsb2NrUmFuZ2VzKSB7CisgICAgYXV0byBiYXNpY0Jsb2NrcyA9IEpTT046OkFycmF5
T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OkJhc2ljQmxvY2s+OjpjcmVhdGUoKTsKKyAgICBmb3IgKGNv
bnN0IGF1dG8mIGJsb2NrIDogbV92bS5jb250cm9sRmxvd1Byb2ZpbGVyKCktPmdldEJhc2ljQmxv
Y2tzRm9yU291cmNlSUQoc291cmNlSUQudG9JbnRQdHIoKSwgbV92bSkpIHsKICAgICAgICAgYXV0
byBsb2NhdGlvbiA9IFByb3RvY29sOjpSdW50aW1lOjpCYXNpY0Jsb2NrOjpjcmVhdGUoKQogICAg
ICAgICAgICAgLnNldFN0YXJ0T2Zmc2V0KGJsb2NrLm1fc3RhcnRPZmZzZXQpCiAgICAgICAgICAg
ICAuc2V0RW5kT2Zmc2V0KGJsb2NrLm1fZW5kT2Zmc2V0KQpAQCAtNDYzLDYgKzUxMyw3IEBAIHZv
aWQgSW5zcGVjdG9yUnVudGltZUFnZW50OjpnZXRCYXNpY0Jsb2NrcyhFcnJvclN0cmluZyYgZXJy
b3JTdHJpbmcsIGNvbnN0IFN0cmluCiAgICAgICAgICAgICAucmVsZWFzZSgpOwogICAgICAgICBi
YXNpY0Jsb2Nrcy0+YWRkSXRlbShXVEZNb3ZlKGxvY2F0aW9uKSk7CiAgICAgfQorICAgIHJldHVy
biBXVEZNb3ZlKGJhc2ljQmxvY2tzKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0
b3JSdW50aW1lQWdlbnQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRz
L0luc3BlY3RvclJ1bnRpbWVBZ2VudC5oCmluZGV4IDE3NTYxNTExYWY5NzliM2IyYjc5MWM3NGRk
NzI3ZDRhZTMxMjRlY2UuLmY0MDI5NDZmZjZkYWE4OGM0ODVkMDk3YWFjNjFjMWQ5ZWJmYzA5YWEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3Bl
Y3RvclJ1bnRpbWVBZ2VudC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
YWdlbnRzL0luc3BlY3RvclJ1bnRpbWVBZ2VudC5oCkBAIC00NSw3ICs0NSw2IEBAIG5hbWVzcGFj
ZSBJbnNwZWN0b3IgewogCiBjbGFzcyBJbmplY3RlZFNjcmlwdDsKIGNsYXNzIEluamVjdGVkU2Ny
aXB0TWFuYWdlcjsKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwogCiBjbGFzcyBKU19FWFBP
UlRfUFJJVkFURSBJbnNwZWN0b3JSdW50aW1lQWdlbnQgOiBwdWJsaWMgSW5zcGVjdG9yQWdlbnRC
YXNlLCBwdWJsaWMgUnVudGltZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7CiAgICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoSW5zcGVjdG9yUnVudGltZUFnZW50KTsKQEAgLTU4LDMzICs1NywzMyBA
QCBwdWJsaWM6CiAgICAgdm9pZCB3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChEaXNjb25u
ZWN0UmVhc29uKSBmaW5hbDsKIAogICAgIC8vIFJ1bnRpbWVCYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXIKLSAgICB2b2lkIGVuYWJsZShFcnJvclN0cmluZyYpIG92ZXJyaWRlIHsgbV9lbmFibGVkID0g
dHJ1ZTsgfQotICAgIHZvaWQgZGlzYWJsZShFcnJvclN0cmluZyYpIG92ZXJyaWRlIHsgbV9lbmFi
bGVkID0gZmFsc2U7IH0KLSAgICB2b2lkIHBhcnNlKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5n
JiBleHByZXNzaW9uLCBQcm90b2NvbDo6UnVudGltZTo6U3ludGF4RXJyb3JUeXBlKiByZXN1bHQs
IE9wdGlvbmFsPFN0cmluZz4mIG1lc3NhZ2UsIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6RXJy
b3JSYW5nZT4mKSBmaW5hbDsKLSAgICB2b2lkIGV2YWx1YXRlKEVycm9yU3RyaW5nJiwgY29uc3Qg
U3RyaW5nJiBleHByZXNzaW9uLCBjb25zdCBTdHJpbmcqIG9iamVjdEdyb3VwLCBjb25zdCBib29s
KiBpbmNsdWRlQ29tbWFuZExpbmVBUEksIGNvbnN0IGJvb2wqIGRvTm90UGF1c2VPbkV4Y2VwdGlv
bnNBbmRNdXRlQ29uc29sZSwgY29uc3QgaW50KiBleGVjdXRpb25Db250ZXh0SWQsIGNvbnN0IGJv
b2wqIHJldHVybkJ5VmFsdWUsIGNvbnN0IGJvb2wqIGdlbmVyYXRlUHJldmlldywgY29uc3QgYm9v
bCogc2F2ZVJlc3VsdCwgY29uc3QgYm9vbCogZW11bGF0ZVVzZXJHZXN0dXJlLCBSZWZQdHI8UHJv
dG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3VsdCwgT3B0aW9uYWw8Ym9vbD4mIHdh
c1Rocm93biwgT3B0aW9uYWw8aW50PiYgc2F2ZWRSZXN1bHRJbmRleCkgb3ZlcnJpZGU7Ci0gICAg
dm9pZCBhd2FpdFByb21pc2UoY29uc3QgU3RyaW5nJiBwcm9taXNlT2JqZWN0SWQsIGNvbnN0IGJv
b2wqIHJldHVybkJ5VmFsdWUsIGNvbnN0IGJvb2wqIGdlbmVyYXRlUHJldmlldywgY29uc3QgYm9v
bCogc2F2ZVJlc3VsdCwgUmVmPEF3YWl0UHJvbWlzZUNhbGxiYWNrPiYmKSBmaW5hbDsKLSAgICB2
b2lkIGNhbGxGdW5jdGlvbk9uKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBvYmplY3RJZCwg
Y29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBjb25zdCBKU09OOjpBcnJheSogb3B0aW9uYWxBcmd1
bWVudHMsIGNvbnN0IGJvb2wqIGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29sZSwg
Y29uc3QgYm9vbCogcmV0dXJuQnlWYWx1ZSwgY29uc3QgYm9vbCogZ2VuZXJhdGVQcmV2aWV3LCBj
b25zdCBib29sKiBlbXVsYXRlVXNlckdlc3R1cmUsIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6
UmVtb3RlT2JqZWN0PiYgcmVzdWx0LCBPcHRpb25hbDxib29sPiYgd2FzVGhyb3duKSBvdmVycmlk
ZTsKLSAgICB2b2lkIHJlbGVhc2VPYmplY3QoRXJyb3JTdHJpbmcmLCBjb25zdCBFcnJvclN0cmlu
ZyYgb2JqZWN0SWQpIGZpbmFsOwotICAgIHZvaWQgZ2V0UHJldmlldyhFcnJvclN0cmluZyYsIGNv
bnN0IFN0cmluZyYgb2JqZWN0SWQsIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6T2JqZWN0UHJl
dmlldz4mKSBmaW5hbDsKLSAgICB2b2lkIGdldFByb3BlcnRpZXMoRXJyb3JTdHJpbmcmLCBjb25z
dCBTdHJpbmcmIG9iamVjdElkLCBjb25zdCBib29sKiBvd25Qcm9wZXJ0aWVzLCBjb25zdCBpbnQq
IGZldGNoU3RhcnQsIGNvbnN0IGludCogZmV0Y2hDb3VudCwgY29uc3QgYm9vbCogZ2VuZXJhdGVQ
cmV2aWV3LCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UnVudGltZTo6UHJvcGVydHlE
ZXNjcmlwdG9yPj4mIHByb3BlcnRpZXMsIFJlZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpS
dW50aW1lOjpJbnRlcm5hbFByb3BlcnR5RGVzY3JpcHRvcj4+JiBpbnRlcm5hbFByb3BlcnRpZXMp
IGZpbmFsOwotICAgIHZvaWQgZ2V0RGlzcGxheWFibGVQcm9wZXJ0aWVzKEVycm9yU3RyaW5nJiwg
Y29uc3QgU3RyaW5nJiBvYmplY3RJZCwgY29uc3QgaW50KiBmZXRjaFN0YXJ0LCBjb25zdCBpbnQq
IGZldGNoQ291bnQsIGNvbnN0IGJvb2wqIGdlbmVyYXRlUHJldmlldywgUmVmUHRyPEpTT046OkFy
cmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OlByb3BlcnR5RGVzY3JpcHRvcj4+JiBwcm9wZXJ0aWVz
LCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UnVudGltZTo6SW50ZXJuYWxQcm9wZXJ0
eURlc2NyaXB0b3I+PiYgaW50ZXJuYWxQcm9wZXJ0aWVzKSBmaW5hbDsKLSAgICB2b2lkIGdldENv
bGxlY3Rpb25FbnRyaWVzKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBvYmplY3RJZCwgY29u
c3QgU3RyaW5nKiBvYmplY3RHcm91cCwgY29uc3QgaW50KiBmZXRjaFN0YXJ0LCBjb25zdCBpbnQq
IGZldGNoQ291bnQsIFJlZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1lOjpDb2xs
ZWN0aW9uRW50cnk+PiYgZW50cmllcykgZmluYWw7Ci0gICAgdm9pZCBzYXZlUmVzdWx0KEVycm9y
U3RyaW5nJiwgY29uc3QgSlNPTjo6T2JqZWN0JiBjYWxsQXJndW1lbnQsIGNvbnN0IGludCogZXhl
Y3V0aW9uQ29udGV4dElkLCBPcHRpb25hbDxpbnQ+JiBzYXZlZFJlc3VsdEluZGV4KSBmaW5hbDsK
LSAgICB2b2lkIHNldFNhdmVkUmVzdWx0QWxpYXMoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcq
IGFsaWFzKSBmaW5hbDsKLSAgICB2b2lkIHJlbGVhc2VPYmplY3RHcm91cChFcnJvclN0cmluZyYs
IGNvbnN0IFN0cmluZyYgb2JqZWN0R3JvdXApIGZpbmFsOwotICAgIHZvaWQgZ2V0UnVudGltZVR5
cGVzRm9yVmFyaWFibGVzQXRPZmZzZXRzKEVycm9yU3RyaW5nJiwgY29uc3QgSlNPTjo6QXJyYXkm
IGxvY2F0aW9ucywgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OlR5cGVE
ZXNjcmlwdGlvbj4+JikgZmluYWw7Ci0gICAgdm9pZCBlbmFibGVUeXBlUHJvZmlsZXIoRXJyb3JT
dHJpbmcmKSBmaW5hbDsKLSAgICB2b2lkIGRpc2FibGVUeXBlUHJvZmlsZXIoRXJyb3JTdHJpbmcm
KSBmaW5hbDsKLSAgICB2b2lkIGVuYWJsZUNvbnRyb2xGbG93UHJvZmlsZXIoRXJyb3JTdHJpbmcm
KSBmaW5hbDsKLSAgICB2b2lkIGRpc2FibGVDb250cm9sRmxvd1Byb2ZpbGVyKEVycm9yU3RyaW5n
JikgZmluYWw7Ci0gICAgdm9pZCBnZXRCYXNpY0Jsb2NrcyhFcnJvclN0cmluZyYsIGNvbnN0IFN0
cmluZyYgaW5fc291cmNlSUQsIFJlZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1l
OjpCYXNpY0Jsb2NrPj4mIG91dF9iYXNpY0Jsb2NrcykgZmluYWw7CisgICAgUHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8dm9pZD4gZW5hYmxlKCkgb3ZlcnJpZGU7CisgICAgUHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8dm9pZD4gZGlzYWJsZSgpIG92ZXJyaWRlOworICAgIFByb3RvY29sOjpFcnJvclN0
cmluZ09yPHN0ZDo6dHVwbGU8UHJvdG9jb2w6OlJ1bnRpbWU6OlN5bnRheEVycm9yVHlwZSwgU3Ry
aW5nIC8qIG1lc3NhZ2UgKi8sIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6RXJyb3JSYW5nZT4+
PiBwYXJzZShjb25zdCBTdHJpbmcmIGV4cHJlc3Npb24pIGZpbmFsOworICAgIFByb3RvY29sOjpF
cnJvclN0cmluZ09yPHN0ZDo6dHVwbGU8UmVmPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmpl
Y3Q+LCBPcHRpb25hbDxib29sPiAvKiB3YXNUaHJvd24gKi8sIE9wdGlvbmFsPGludD4gLyogc2F2
ZWRSZXN1bHRJbmRleCAqLz4+IGV2YWx1YXRlKGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgY29u
c3QgU3RyaW5nJiBvYmplY3RHcm91cCwgT3B0aW9uYWw8Ym9vbD4mJiBpbmNsdWRlQ29tbWFuZExp
bmVBUEksIE9wdGlvbmFsPGJvb2w+JiYgZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25z
b2xlLCBPcHRpb25hbDxQcm90b2NvbDo6UnVudGltZTo6RXhlY3V0aW9uQ29udGV4dElkPiYmLCBP
cHRpb25hbDxib29sPiYmIHJldHVybkJ5VmFsdWUsIE9wdGlvbmFsPGJvb2w+JiYgZ2VuZXJhdGVQ
cmV2aWV3LCBPcHRpb25hbDxib29sPiYmIHNhdmVSZXN1bHQsIE9wdGlvbmFsPGJvb2w+JiYgZW11
bGF0ZVVzZXJHZXN0dXJlKSBvdmVycmlkZTsKKyAgICB2b2lkIGF3YWl0UHJvbWlzZShjb25zdCBQ
cm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0SWQmLCBPcHRpb25hbDxib29sPiYmIHJldHVy
bkJ5VmFsdWUsIE9wdGlvbmFsPGJvb2w+JiYgZ2VuZXJhdGVQcmV2aWV3LCBPcHRpb25hbDxib29s
PiYmIHNhdmVSZXN1bHQsIFJlZjxBd2FpdFByb21pc2VDYWxsYmFjaz4mJikgZmluYWw7CisgICAg
UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8c3RkOjp0dXBsZTxSZWY8UHJvdG9jb2w6OlJ1bnRpbWU6
OlJlbW90ZU9iamVjdD4sIE9wdGlvbmFsPGJvb2w+IC8qIHdhc1Rocm93biAqLz4+IGNhbGxGdW5j
dGlvbk9uKGNvbnN0IFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3RJZCYsIGNvbnN0IFN0
cmluZyYgZnVuY3Rpb25EZWNsYXJhdGlvbiwgUmVmUHRyPEpTT046OkFycmF5PiYmIGFyZ3VtZW50
cywgT3B0aW9uYWw8Ym9vbD4mJiBkb05vdFBhdXNlT25FeGNlcHRpb25zQW5kTXV0ZUNvbnNvbGUs
IE9wdGlvbmFsPGJvb2w+JiYgcmV0dXJuQnlWYWx1ZSwgT3B0aW9uYWw8Ym9vbD4mJiBnZW5lcmF0
ZVByZXZpZXcsIE9wdGlvbmFsPGJvb2w+JiYgZW11bGF0ZVVzZXJHZXN0dXJlKSBvdmVycmlkZTsK
KyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiByZWxlYXNlT2JqZWN0KGNvbnN0IFBy
b3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3RJZCYpIGZpbmFsOworICAgIFByb3RvY29sOjpF
cnJvclN0cmluZ09yPFJlZjxQcm90b2NvbDo6UnVudGltZTo6T2JqZWN0UHJldmlldz4+IGdldFBy
ZXZpZXcoY29uc3QgUHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdElkJikgZmluYWw7Cisg
ICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8c3RkOjp0dXBsZTxSZWY8SlNPTjo6QXJyYXlPZjxQ
cm90b2NvbDo6UnVudGltZTo6UHJvcGVydHlEZXNjcmlwdG9yPj4sIFJlZlB0cjxKU09OOjpBcnJh
eU9mPFByb3RvY29sOjpSdW50aW1lOjpJbnRlcm5hbFByb3BlcnR5RGVzY3JpcHRvcj4+Pj4gZ2V0
UHJvcGVydGllcyhjb25zdCBQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0SWQmLCBPcHRp
b25hbDxib29sPiYmIG93blByb3BlcnRpZXMsIE9wdGlvbmFsPGludD4mJiBmZXRjaFN0YXJ0LCBP
cHRpb25hbDxpbnQ+JiYgZmV0Y2hDb3VudCwgT3B0aW9uYWw8Ym9vbD4mJiBnZW5lcmF0ZVByZXZp
ZXcpIGZpbmFsOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHN0ZDo6dHVwbGU8UmVmPEpT
T046OkFycmF5T2Y8UHJvdG9jb2w6OlJ1bnRpbWU6OlByb3BlcnR5RGVzY3JpcHRvcj4+LCBSZWZQ
dHI8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UnVudGltZTo6SW50ZXJuYWxQcm9wZXJ0eURlc2Ny
aXB0b3I+Pj4+IGdldERpc3BsYXlhYmxlUHJvcGVydGllcyhjb25zdCBQcm90b2NvbDo6UnVudGlt
ZTo6UmVtb3RlT2JqZWN0SWQmLCBPcHRpb25hbDxpbnQ+JiYgZmV0Y2hTdGFydCwgT3B0aW9uYWw8
aW50PiYmIGZldGNoQ291bnQsIE9wdGlvbmFsPGJvb2w+JiYgZ2VuZXJhdGVQcmV2aWV3KSBmaW5h
bDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SlNPTjo6QXJyYXlPZjxQcm90b2Nv
bDo6UnVudGltZTo6Q29sbGVjdGlvbkVudHJ5Pj4+IGdldENvbGxlY3Rpb25FbnRyaWVzKGNvbnN0
IFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3RJZCYsIGNvbnN0IFN0cmluZyYgb2JqZWN0
R3JvdXAsIE9wdGlvbmFsPGludD4mJiBmZXRjaFN0YXJ0LCBPcHRpb25hbDxpbnQ+JiYgZmV0Y2hD
b3VudCkgZmluYWw7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8T3B0aW9uYWw8aW50PiAv
KiBzYXZlUmVzdWx0SW5kZXggKi8+IHNhdmVSZXN1bHQoUmVmPEpTT046Ok9iamVjdD4mJiBjYWxs
QXJndW1lbnQsIE9wdGlvbmFsPFByb3RvY29sOjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0SWQ+
JiYpIGZpbmFsOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHNldFNhdmVkUmVz
dWx0QWxpYXMoY29uc3QgU3RyaW5nJikgZmluYWw7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5n
T3I8dm9pZD4gcmVsZWFzZU9iamVjdEdyb3VwKGNvbnN0IFN0cmluZyYpIGZpbmFsOworICAgIFBy
b3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpSdW50aW1l
OjpUeXBlRGVzY3JpcHRpb24+Pj4gZ2V0UnVudGltZVR5cGVzRm9yVmFyaWFibGVzQXRPZmZzZXRz
KFJlZjxKU09OOjpBcnJheT4mJiBsb2NhdGlvbnMpIGZpbmFsOworICAgIFByb3RvY29sOjpFcnJv
clN0cmluZ09yPHZvaWQ+IGVuYWJsZVR5cGVQcm9maWxlcigpIGZpbmFsOworICAgIFByb3RvY29s
OjpFcnJvclN0cmluZ09yPHZvaWQ+IGRpc2FibGVUeXBlUHJvZmlsZXIoKSBmaW5hbDsKKyAgICBQ
cm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBlbmFibGVDb250cm9sRmxvd1Byb2ZpbGVyKCkg
ZmluYWw7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZGlzYWJsZUNvbnRyb2xG
bG93UHJvZmlsZXIoKSBmaW5hbDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SlNP
Tjo6QXJyYXlPZjxQcm90b2NvbDo6UnVudGltZTo6QmFzaWNCbG9jaz4+PiBnZXRCYXNpY0Jsb2Nr
cyhjb25zdCBTdHJpbmcmIHNvdXJjZUlEKSBmaW5hbDsKIAogcHJvdGVjdGVkOgogICAgIEluc3Bl
Y3RvclJ1bnRpbWVBZ2VudChBZ2VudENvbnRleHQmKTsKIAogICAgIEluamVjdGVkU2NyaXB0TWFu
YWdlciYgaW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKCkgeyByZXR1cm4gbV9pbmplY3RlZFNjcmlwdE1h
bmFnZXI7IH0KIAotICAgIHZpcnR1YWwgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHRGb3JF
dmFsKEVycm9yU3RyaW5nJiwgY29uc3QgaW50KiBleGVjdXRpb25Db250ZXh0SWQpID0gMDsKKyAg
ICB2aXJ0dWFsIEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0Rm9yRXZhbChQcm90b2NvbDo6
RXJyb3JTdHJpbmcmLCBPcHRpb25hbDxQcm90b2NvbDo6UnVudGltZTo6RXhlY3V0aW9uQ29udGV4
dElkPiYmKSA9IDA7CiAKICAgICB2aXJ0dWFsIHZvaWQgbXV0ZUNvbnNvbGUoKSA9IDA7CiAgICAg
dmlydHVhbCB2b2lkIHVubXV0ZUNvbnNvbGUoKSA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JTY3JpcHRQcm9maWxlckFnZW50
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclNj
cmlwdFByb2ZpbGVyQWdlbnQuY3BwCmluZGV4IDY4MTNlMDc1YTk0YjM2MzFmYjUyZWFkZDljZTc5
OWI5YzdkY2Q4ZGUuLjdlYjUxYWYzMGZkYTgwMmNhODFhOGIxMGVjZDdlNmViZWUyMjExN2MgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rv
clNjcmlwdFByb2ZpbGVyQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3IvYWdlbnRzL0luc3BlY3RvclNjcmlwdFByb2ZpbGVyQWdlbnQuY3BwCkBAIC02NCwxMCAr
NjQsMTAgQEAgdm9pZCBJbnNwZWN0b3JTY3JpcHRQcm9maWxlckFnZW50Ojp3aWxsRGVzdHJveUZy
b250ZW5kQW5kQmFja2VuZChEaXNjb25uZWN0UmVhc28KICAgICB9CiB9CiAKLXZvaWQgSW5zcGVj
dG9yU2NyaXB0UHJvZmlsZXJBZ2VudDo6c3RhcnRUcmFja2luZyhFcnJvclN0cmluZyYsIGNvbnN0
IGJvb2wqIGluY2x1ZGVTYW1wbGVzKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5z
cGVjdG9yU2NyaXB0UHJvZmlsZXJBZ2VudDo6c3RhcnRUcmFja2luZyhPcHRpb25hbDxib29sPiYm
IGluY2x1ZGVTYW1wbGVzKQogewogICAgIGlmIChtX3RyYWNraW5nKQotICAgICAgICByZXR1cm47
CisgICAgICAgIHJldHVybiB7IH07CiAKICAgICBtX3RyYWNraW5nID0gdHJ1ZTsKIApAQCAtOTEs
MTIgKzkxLDE0IEBAIHZvaWQgSW5zcGVjdG9yU2NyaXB0UHJvZmlsZXJBZ2VudDo6c3RhcnRUcmFj
a2luZyhFcnJvclN0cmluZyYsIGNvbnN0IGJvb2wqIGluY2x1CiAgICAgbV9lbnZpcm9ubWVudC5k
ZWJ1Z2dlcigpLnNldFByb2ZpbGluZ0NsaWVudCh0aGlzKTsKIAogICAgIG1fZnJvbnRlbmREaXNw
YXRjaGVyLT50cmFja2luZ1N0YXJ0KHN0b3B3YXRjaC5lbGFwc2VkVGltZSgpLnNlY29uZHMoKSk7
CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvclNjcmlwdFByb2ZpbGVyQWdl
bnQ6OnN0b3BUcmFja2luZyhFcnJvclN0cmluZyYpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2
b2lkPiBJbnNwZWN0b3JTY3JpcHRQcm9maWxlckFnZW50OjpzdG9wVHJhY2tpbmcoKQogewogICAg
IGlmICghbV90cmFja2luZykKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4geyB9Owog
CiAgICAgbV90cmFja2luZyA9IGZhbHNlOwogICAgIG1fYWN0aXZlRXZhbHVhdGVTY3JpcHQgPSBm
YWxzZTsKQEAgLTEwNCw2ICsxMDYsOCBAQCB2b2lkIEluc3BlY3RvclNjcmlwdFByb2ZpbGVyQWdl
bnQ6OnN0b3BUcmFja2luZyhFcnJvclN0cmluZyYpCiAgICAgbV9lbnZpcm9ubWVudC5kZWJ1Z2dl
cigpLnNldFByb2ZpbGluZ0NsaWVudChudWxscHRyKTsKIAogICAgIHRyYWNraW5nQ29tcGxldGUo
KTsKKworICAgIHJldHVybiB7IH07CiB9CiAKIGJvb2wgSW5zcGVjdG9yU2NyaXB0UHJvZmlsZXJB
Z2VudDo6aXNBbHJlYWR5UHJvZmlsaW5nKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclNjcmlwdFByb2ZpbGVyQWdlbnQu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclNjcmlw
dFByb2ZpbGVyQWdlbnQuaAppbmRleCA3ZTdjZGM5Zjk3NTA2Nzc2NjI5NzQwYWFkY2I1NGZiNGRh
MDBkMDhmLi4yOGY1NDg4ZDBhZmMwNjNiMjlkZDBmZjdjZGQ1MGU1ZDUwYTY0Nzg3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JTY3Jp
cHRQcm9maWxlckFnZW50LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9h
Z2VudHMvSW5zcGVjdG9yU2NyaXB0UHJvZmlsZXJBZ2VudC5oCkBAIC0zNywyNyArMzcsMjUgQEAg
Y2xhc3MgUHJvZmlsZTsKIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKLXR5cGVkZWYgU3RyaW5n
IEVycm9yU3RyaW5nOwotCiBjbGFzcyBKU19FWFBPUlRfUFJJVkFURSBJbnNwZWN0b3JTY3JpcHRQ
cm9maWxlckFnZW50IGZpbmFsIDogcHVibGljIEluc3BlY3RvckFnZW50QmFzZSwgcHVibGljIFNj
cmlwdFByb2ZpbGVyQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyLCBwdWJsaWMgSlNDOjpEZWJ1Z2dl
cjo6UHJvZmlsaW5nQ2xpZW50IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbnNwZWN0b3JT
Y3JpcHRQcm9maWxlckFnZW50KTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1Ymxp
YzoKICAgICBJbnNwZWN0b3JTY3JpcHRQcm9maWxlckFnZW50KEFnZW50Q29udGV4dCYpOwotICAg
IH5JbnNwZWN0b3JTY3JpcHRQcm9maWxlckFnZW50KCkgZmluYWw7CisgICAgfkluc3BlY3RvclNj
cmlwdFByb2ZpbGVyQWdlbnQoKTsKIAogICAgIC8vIEluc3BlY3RvckFnZW50QmFzZQotICAgIHZv
aWQgZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEZyb250ZW5kUm91dGVyKiwgQmFja2VuZERp
c3BhdGNoZXIqKSBmaW5hbDsKLSAgICB2b2lkIHdpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5k
KERpc2Nvbm5lY3RSZWFzb24pIGZpbmFsOworICAgIHZvaWQgZGlkQ3JlYXRlRnJvbnRlbmRBbmRC
YWNrZW5kKEZyb250ZW5kUm91dGVyKiwgQmFja2VuZERpc3BhdGNoZXIqKTsKKyAgICB2b2lkIHdp
bGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKERpc2Nvbm5lY3RSZWFzb24pOwogCiAgICAgLy8g
U2NyaXB0UHJvZmlsZXJCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIKLSAgICB2b2lkIHN0YXJ0VHJh
Y2tpbmcoRXJyb3JTdHJpbmcmLCBjb25zdCBib29sKiBpbmNsdWRlU2FtcGxlcykgZmluYWw7Ci0g
ICAgdm9pZCBzdG9wVHJhY2tpbmcoRXJyb3JTdHJpbmcmKSBmaW5hbDsKKyAgICBQcm90b2NvbDo6
RXJyb3JTdHJpbmdPcjx2b2lkPiBzdGFydFRyYWNraW5nKE9wdGlvbmFsPGJvb2w+JiYgaW5jbHVk
ZVNhbXBsZXMpOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHN0b3BUcmFja2lu
ZygpOwogCiAgICAgLy8gSlNDOjpEZWJ1Z2dlcjo6UHJvZmlsaW5nQ2xpZW50Ci0gICAgYm9vbCBp
c0FscmVhZHlQcm9maWxpbmcoKSBjb25zdCBmaW5hbDsKLSAgICBTZWNvbmRzIHdpbGxFdmFsdWF0
ZVNjcmlwdCgpIGZpbmFsOwotICAgIHZvaWQgZGlkRXZhbHVhdGVTY3JpcHQoU2Vjb25kcywgSlND
OjpQcm9maWxpbmdSZWFzb24pIGZpbmFsOworICAgIGJvb2wgaXNBbHJlYWR5UHJvZmlsaW5nKCkg
Y29uc3Q7CisgICAgU2Vjb25kcyB3aWxsRXZhbHVhdGVTY3JpcHQoKTsKKyAgICB2b2lkIGRpZEV2
YWx1YXRlU2NyaXB0KFNlY29uZHMsIEpTQzo6UHJvZmlsaW5nUmVhc29uKTsKIAogcHJpdmF0ZToK
ICAgICB2b2lkIGFkZEV2ZW50KFNlY29uZHMgc3RhcnRUaW1lLCBTZWNvbmRzIGVuZFRpbWUsIEpT
Qzo6UHJvZmlsaW5nUmVhc29uKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclRhcmdldEFnZW50LmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclRhcmdldEFnZW50LmNwcAppbmRleCA4
ZmNiNWExZTU1NzUwZDMyNWE4NDgyNGQ4NmM0OWNmZTZmYjA0MjY4Li41MDhlYjAyZWM5NWM1MjQw
ODM4NGExZTJiNzc2NDhhZmQ0MjZkZDlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JUYXJnZXRBZ2VudC5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yVGFyZ2V0QWdlbnQuY3Bw
CkBAIC01NSwzNiArNTUsMzYgQEAgdm9pZCBJbnNwZWN0b3JUYXJnZXRBZ2VudDo6d2lsbERlc3Ry
b3lGcm9udGVuZEFuZEJhY2tlbmQoRGlzY29ubmVjdFJlYXNvbikKICAgICBtX3Nob3VsZFBhdXNl
T25TdGFydCA9IGZhbHNlOwogfQogCi12b2lkIEluc3BlY3RvclRhcmdldEFnZW50OjpzZXRQYXVz
ZU9uU3RhcnQoRXJyb3JTdHJpbmcmLCBib29sIHBhdXNlT25TdGFydCkKK1Byb3RvY29sOjpFcnJv
clN0cmluZ09yPHZvaWQ+IEluc3BlY3RvclRhcmdldEFnZW50OjpzZXRQYXVzZU9uU3RhcnQoYm9v
bCBwYXVzZU9uU3RhcnQpCiB7CiAgICAgbV9zaG91bGRQYXVzZU9uU3RhcnQgPSBwYXVzZU9uU3Rh
cnQ7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvclRhcmdldEFnZW50Ojpy
ZXN1bWUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHRhcmdldElkKQor
UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yVGFyZ2V0QWdlbnQ6OnJlc3Vt
ZShjb25zdCBTdHJpbmcmIHRhcmdldElkKQogewogICAgIGF1dG8qIHRhcmdldCA9IG1fdGFyZ2V0
cy5nZXQodGFyZ2V0SWQpOwotICAgIGlmICghdGFyZ2V0KSB7Ci0gICAgICAgIGVycm9yU3RyaW5n
ID0gIk1pc3NpbmcgdGFyZ2V0IGZvciBnaXZlbiB0YXJnZXRJZCJfczsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KKyAgICBpZiAoIXRhcmdldCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVk
KCJNaXNzaW5nIHRhcmdldCBmb3IgZ2l2ZW4gdGFyZ2V0SWQiX3MpOwogCi0gICAgaWYgKCF0YXJn
ZXQtPmlzUGF1c2VkKCkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiVGFyZ2V0IGZvciBnaXZl
biB0YXJnZXRJZCBpcyBub3QgcGF1c2VkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAg
IGlmICghdGFyZ2V0LT5pc1BhdXNlZCgpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQo
IlRhcmdldCBmb3IgZ2l2ZW4gdGFyZ2V0SWQgaXMgbm90IHBhdXNlZCJfcyk7CiAKICAgICB0YXJn
ZXQtPnJlc3VtZSgpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JUYXJn
ZXRBZ2VudDo6c2VuZE1lc3NhZ2VUb1RhcmdldChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNv
bnN0IFN0cmluZyYgdGFyZ2V0SWQsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK1Byb3RvY29sOjpF
cnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvclRhcmdldEFnZW50OjpzZW5kTWVzc2FnZVRvVGFy
Z2V0KGNvbnN0IFN0cmluZyYgdGFyZ2V0SWQsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKIHsKICAg
ICBJbnNwZWN0b3JUYXJnZXQqIHRhcmdldCA9IG1fdGFyZ2V0cy5nZXQodGFyZ2V0SWQpOwotICAg
IGlmICghdGFyZ2V0KSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIk1pc3NpbmcgdGFyZ2V0IGZv
ciBnaXZlbiB0YXJnZXRJZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoIXRh
cmdldCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJNaXNzaW5nIHRhcmdldCBmb3Ig
Z2l2ZW4gdGFyZ2V0SWQiX3MpOwogCiAgICAgdGFyZ2V0LT5zZW5kTWVzc2FnZVRvVGFyZ2V0QmFj
a2VuZChtZXNzYWdlKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKIHZvaWQgSW5zcGVjdG9yVGFy
Z2V0QWdlbnQ6OnNlbmRNZXNzYWdlRnJvbVRhcmdldFRvRnJvbnRlbmQoY29uc3QgU3RyaW5nJiB0
YXJnZXRJZCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yVGFyZ2V0QWdlbnQuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclRhcmdldEFnZW50LmgK
aW5kZXggYjkyOWRkZmZlMjljM2ZiMDg4YWI2NzE0MDg3Yzk5MzAyYzI3NTIxNC4uZWRjZDQ4OWI3
NmUwODA4MjdlMDc0MWYxNGJhYjA5ZjllYTkzMDNkNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yVGFyZ2V0QWdlbnQuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JUYXJnZXRBZ2Vu
dC5oCkBAIC0zNSwyMyArMzUsMjEgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKIGNsYXNzIElu
c3BlY3RvclRhcmdldDsKIAotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7Ci0KIGNsYXNzIEpT
X0VYUE9SVF9QUklWQVRFIEluc3BlY3RvclRhcmdldEFnZW50IGZpbmFsIDogcHVibGljIEluc3Bl
Y3RvckFnZW50QmFzZSwgcHVibGljIFRhcmdldEJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7CiAg
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW5zcGVjdG9yVGFyZ2V0QWdlbnQpOwogICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIEluc3BlY3RvclRhcmdldEFnZW50KEZy
b250ZW5kUm91dGVyJiwgQmFja2VuZERpc3BhdGNoZXImKTsKLSAgICB+SW5zcGVjdG9yVGFyZ2V0
QWdlbnQoKSBmaW5hbDsKKyAgICB+SW5zcGVjdG9yVGFyZ2V0QWdlbnQoKTsKIAogICAgIC8vIElu
c3BlY3RvckFnZW50QmFzZQotICAgIHZvaWQgZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEZy
b250ZW5kUm91dGVyKiwgQmFja2VuZERpc3BhdGNoZXIqKSBmaW5hbDsKLSAgICB2b2lkIHdpbGxE
ZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKERpc2Nvbm5lY3RSZWFzb24pIGZpbmFsOworICAgIHZv
aWQgZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEZyb250ZW5kUm91dGVyKiwgQmFja2VuZERp
c3BhdGNoZXIqKTsKKyAgICB2b2lkIHdpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKERpc2Nv
bm5lY3RSZWFzb24pOwogCiAgICAgLy8gVGFyZ2V0QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyCi0g
ICAgdm9pZCBzZXRQYXVzZU9uU3RhcnQoRXJyb3JTdHJpbmcmLCBib29sIHBhdXNlT25TdGFydCkg
ZmluYWw7Ci0gICAgdm9pZCByZXN1bWUoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHRhcmdl
dElkKSBmaW5hbDsKLSAgICB2b2lkIHNlbmRNZXNzYWdlVG9UYXJnZXQoRXJyb3JTdHJpbmcmLCBj
b25zdCBTdHJpbmcmIHRhcmdldElkLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpIGZpbmFsOworICAg
IFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHNldFBhdXNlT25TdGFydChib29sKTsKKyAg
ICBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiByZXN1bWUoY29uc3QgU3RyaW5nJiB0YXJn
ZXRJZCk7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc2VuZE1lc3NhZ2VUb1Rh
cmdldChjb25zdCBTdHJpbmcmIHRhcmdldElkLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOwogCiAg
ICAgLy8gVGFyZ2V0IGxpZmVjeWNsZS4KICAgICB2b2lkIHRhcmdldENyZWF0ZWQoSW5zcGVjdG9y
VGFyZ2V0Jik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2Fn
ZW50cy9KU0dsb2JhbE9iamVjdEF1ZGl0QWdlbnQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9hZ2VudHMvSlNHbG9iYWxPYmplY3RBdWRpdEFnZW50LmNwcAppbmRleCA0YmZh
OWY1YWE3ZmRlMTU0YjUzM2M4ZjIzY2Q3YmFlNjc3NThhYjAwLi4yOWZjZWM5N2JiOGU3ZjQ3NzJk
NGQ3Y2M4ZmFkNmM5MjMxNzFmODk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL2FnZW50cy9KU0dsb2JhbE9iamVjdEF1ZGl0QWdlbnQuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0pTR2xvYmFsT2JqZWN0QXVkaXRBZ2Vu
dC5jcHAKQEAgLTQxLDcgKzQxLDcgQEAgSlNHbG9iYWxPYmplY3RBdWRpdEFnZW50OjpKU0dsb2Jh
bE9iamVjdEF1ZGl0QWdlbnQoSlNBZ2VudENvbnRleHQmIGNvbnRleHQpCiAKIEpTR2xvYmFsT2Jq
ZWN0QXVkaXRBZ2VudDo6fkpTR2xvYmFsT2JqZWN0QXVkaXRBZ2VudCgpID0gZGVmYXVsdDsKIAot
SW5qZWN0ZWRTY3JpcHQgSlNHbG9iYWxPYmplY3RBdWRpdEFnZW50OjppbmplY3RlZFNjcmlwdEZv
ckV2YWwoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBpbnQqIGV4ZWN1dGlvbkNvbnRl
eHRJZCkKK0luamVjdGVkU2NyaXB0IEpTR2xvYmFsT2JqZWN0QXVkaXRBZ2VudDo6aW5qZWN0ZWRT
Y3JpcHRGb3JFdmFsKFByb3RvY29sOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIE9wdGlvbmFs
PFByb3RvY29sOjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0SWQ+JiYgZXhlY3V0aW9uQ29udGV4
dElkKQogewogICAgIGlmIChleGVjdXRpb25Db250ZXh0SWQpIHsKICAgICAgICAgZXJyb3JTdHJp
bmcgPSAiZXhlY3V0aW9uQ29udGV4dElkIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIEpTQ29udGV4dHMg
YXMgdGhlcmUgaXMgb25seSBvbmUgZXhlY3V0aW9uIGNvbnRleHQiX3M7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9KU0dsb2JhbE9iamVjdEF1ZGl0
QWdlbnQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0pTR2xvYmFs
T2JqZWN0QXVkaXRBZ2VudC5oCmluZGV4IDdkNDY3MGQwNGRjN2ZkMzMwODNhMTUwNjFkMzc3NjVi
MWE2YzNlZTYuLjU4NGQwNTAyNjQ1ODliNDgwNWM2MWI0YzRkYmEzODE5OWE2ZmVkZTAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0pTR2xvYmFsT2Jq
ZWN0QXVkaXRBZ2VudC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdl
bnRzL0pTR2xvYmFsT2JqZWN0QXVkaXRBZ2VudC5oCkBAIC0zOCwxMCArMzgsMTAgQEAgY2xhc3Mg
SlNHbG9iYWxPYmplY3RBdWRpdEFnZW50IGZpbmFsIDogcHVibGljIEluc3BlY3RvckF1ZGl0QWdl
bnQgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIEpTR2xvYmFs
T2JqZWN0QXVkaXRBZ2VudChKU0FnZW50Q29udGV4dCYpOwotICAgIH5KU0dsb2JhbE9iamVjdEF1
ZGl0QWdlbnQoKSBmaW5hbDsKKyAgICB+SlNHbG9iYWxPYmplY3RBdWRpdEFnZW50KCk7CiAKIHBy
aXZhdGU6Ci0gICAgSW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHRGb3JFdmFsKEVycm9yU3Ry
aW5nJiwgY29uc3QgaW50KiBleGVjdXRpb25Db250ZXh0SWQpIGZpbmFsOworICAgIEluamVjdGVk
U2NyaXB0IGluamVjdGVkU2NyaXB0Rm9yRXZhbChQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBPcHRp
b25hbDxQcm90b2NvbDo6UnVudGltZTo6RXhlY3V0aW9uQ29udGV4dElkPiYmKTsKIAogICAgIEpT
Qzo6SlNHbG9iYWxPYmplY3QmIG1fZ2xvYmFsT2JqZWN0OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0pTR2xvYmFsT2JqZWN0RGVidWdnZXJB
Z2VudC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9KU0dsb2Jh
bE9iamVjdERlYnVnZ2VyQWdlbnQuY3BwCmluZGV4IDI1NTFlN2E0MjM5Mzk5NWQ2YTNlZWE5Y2U0
OTE3NDlhMzg3ODkxODkuLjNiNzAyODc4YTFjYTUxNjI0NDA5OTlmNGU2NGI1M2ZjMzRmOTUzMmYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0pTR2xv
YmFsT2JqZWN0RGVidWdnZXJBZ2VudC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9hZ2VudHMvSlNHbG9iYWxPYmplY3REZWJ1Z2dlckFnZW50LmNwcApAQCAtNDQsNyAr
NDQsNyBAQCBKU0dsb2JhbE9iamVjdERlYnVnZ2VyQWdlbnQ6OkpTR2xvYmFsT2JqZWN0RGVidWdn
ZXJBZ2VudChKU0FnZW50Q29udGV4dCYgY29udGV4dAogCiBKU0dsb2JhbE9iamVjdERlYnVnZ2Vy
QWdlbnQ6On5KU0dsb2JhbE9iamVjdERlYnVnZ2VyQWdlbnQoKSA9IGRlZmF1bHQ7CiAKLUluamVj
dGVkU2NyaXB0IEpTR2xvYmFsT2JqZWN0RGVidWdnZXJBZ2VudDo6aW5qZWN0ZWRTY3JpcHRGb3JF
dmFsKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgaW50KiBleGVjdXRpb25Db250ZXh0
SWQpCitJbmplY3RlZFNjcmlwdCBKU0dsb2JhbE9iamVjdERlYnVnZ2VyQWdlbnQ6OmluamVjdGVk
U2NyaXB0Rm9yRXZhbChQcm90b2NvbDo6RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBPcHRpb25h
bDxQcm90b2NvbDo6UnVudGltZTo6RXhlY3V0aW9uQ29udGV4dElkPiYmIGV4ZWN1dGlvbkNvbnRl
eHRJZCkKIHsKICAgICBpZiAoZXhlY3V0aW9uQ29udGV4dElkKSB7CiAgICAgICAgIGVycm9yU3Ry
aW5nID0gImV4ZWN1dGlvbkNvbnRleHRJZCBpcyBub3Qgc3VwcG9ydGVkIGZvciBKU0NvbnRleHRz
IGFzIHRoZXJlIGlzIG9ubHkgb25lIGV4ZWN1dGlvbiBjb250ZXh0Il9zOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSlNHbG9iYWxPYmplY3REZWJ1
Z2dlckFnZW50LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9KU0ds
b2JhbE9iamVjdERlYnVnZ2VyQWdlbnQuaAppbmRleCA2Zjc5Mjc4ZDUzMzE3MWUxZmRkMGFlZmU5
ZGQyOWIzM2JmZDFmZTk1Li4xMDBmYjIzZTMxNWRmMDQ3ZjlmODU2Y2NjOWE1YTZmODBlODNkNzc2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9KU0ds
b2JhbE9iamVjdERlYnVnZ2VyQWdlbnQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL2FnZW50cy9KU0dsb2JhbE9iamVjdERlYnVnZ2VyQWdlbnQuaApAQCAtMzYsMTggKzM2
LDE4IEBAIGNsYXNzIEpTR2xvYmFsT2JqZWN0RGVidWdnZXJBZ2VudCBmaW5hbCA6IHB1YmxpYyBJ
bnNwZWN0b3JEZWJ1Z2dlckFnZW50IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1
YmxpYzoKICAgICBKU0dsb2JhbE9iamVjdERlYnVnZ2VyQWdlbnQoSlNBZ2VudENvbnRleHQmLCBJ
bnNwZWN0b3JDb25zb2xlQWdlbnQqKTsKLSAgICB+SlNHbG9iYWxPYmplY3REZWJ1Z2dlckFnZW50
KCkgZmluYWw7CisgICAgfkpTR2xvYmFsT2JqZWN0RGVidWdnZXJBZ2VudCgpOwogCiAgICAgLy8g
SlNDOjpEZWJ1Z2dlcjo6T2JzZXJ2ZXIKLSAgICB2b2lkIGJyZWFrcG9pbnRBY3Rpb25Mb2coSlND
OjpKU0dsb2JhbE9iamVjdCosIGNvbnN0IFN0cmluZyYgZGF0YSkgZmluYWw7CisgICAgdm9pZCBi
cmVha3BvaW50QWN0aW9uTG9nKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBjb25zdCBTdHJpbmcmIGRh
dGEpOwogCiBwcml2YXRlOgotICAgIEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0Rm9yRXZh
bChFcnJvclN0cmluZyYsIGNvbnN0IGludCogZXhlY3V0aW9uQ29udGV4dElkKSBmaW5hbDsKKyAg
ICBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdEZvckV2YWwoUHJvdG9jb2w6OkVycm9yU3Ry
aW5nJiwgT3B0aW9uYWw8UHJvdG9jb2w6OlJ1bnRpbWU6OkV4ZWN1dGlvbkNvbnRleHRJZD4mJik7
CiAKICAgICAvLyBOT1RFOiBKYXZhU2NyaXB0IGluc3BlY3RvciBkb2VzIG5vdCB5ZXQgbmVlZCB0
byBtdXRlIGEgY29uc29sZSBiZWNhdXNlIG5vIG1lc3NhZ2VzCiAgICAgLy8gYXJlIHNlbnQgdG8g
dGhlIGNvbnNvbGUgb3V0c2lkZSBvZiB0aGUgQVBJIGJvdW5kYXJ5IG9yIGNvbnNvbGUgb2JqZWN0
LgotICAgIHZvaWQgbXV0ZUNvbnNvbGUoKSBmaW5hbCB7IH0KLSAgICB2b2lkIHVubXV0ZUNvbnNv
bGUoKSBmaW5hbCB7IH0KKyAgICB2b2lkIG11dGVDb25zb2xlKCkgeyB9CisgICAgdm9pZCB1bm11
dGVDb25zb2xlKCkgeyB9CiAKICAgICBJbnNwZWN0b3JDb25zb2xlQWdlbnQqIG1fY29uc29sZUFn
ZW50IHsgbnVsbHB0ciB9OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3IvYWdlbnRzL0pTR2xvYmFsT2JqZWN0UnVudGltZUFnZW50LmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0pTR2xvYmFsT2JqZWN0UnVudGltZUFnZW50
LmNwcAppbmRleCBjODY2OWVlMGFhNWI4Y2E4NGU1ZDI5NDM3ZjM0NDQ3MWMxZjlhMDYwLi5lMjU0
NDg3NDhmMTRlNTBhMmZjNWNkZTc2YjA2ODkwMmIwMzgzYjFlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9KU0dsb2JhbE9iamVjdFJ1bnRpbWVBZ2Vu
dC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSlNHbG9i
YWxPYmplY3RSdW50aW1lQWdlbnQuY3BwCkBAIC00Myw5ICs0MywxMiBAQCBKU0dsb2JhbE9iamVj
dFJ1bnRpbWVBZ2VudDo6SlNHbG9iYWxPYmplY3RSdW50aW1lQWdlbnQoSlNBZ2VudENvbnRleHQm
IGNvbnRleHQpCiAKIEpTR2xvYmFsT2JqZWN0UnVudGltZUFnZW50Ojp+SlNHbG9iYWxPYmplY3RS
dW50aW1lQWdlbnQoKSA9IGRlZmF1bHQ7CiAKLUluamVjdGVkU2NyaXB0IEpTR2xvYmFsT2JqZWN0
UnVudGltZUFnZW50OjppbmplY3RlZFNjcmlwdEZvckV2YWwoRXJyb3JTdHJpbmcmIGVycm9yU3Ry
aW5nLCBjb25zdCBpbnQqIGV4ZWN1dGlvbkNvbnRleHRJZCkKK0luamVjdGVkU2NyaXB0IEpTR2xv
YmFsT2JqZWN0UnVudGltZUFnZW50OjppbmplY3RlZFNjcmlwdEZvckV2YWwoUHJvdG9jb2w6OkVy
cm9yU3RyaW5nJiBlcnJvclN0cmluZywgT3B0aW9uYWw8UHJvdG9jb2w6OlJ1bnRpbWU6OkV4ZWN1
dGlvbkNvbnRleHRJZD4mJiBleGVjdXRpb25Db250ZXh0SWQpCiB7Ci0gICAgQVNTRVJUX1VOVVNF
RChleGVjdXRpb25Db250ZXh0SWQsICFleGVjdXRpb25Db250ZXh0SWQpOworICAgIGlmIChleGVj
dXRpb25Db250ZXh0SWQpIHsKKyAgICAgICAgZXJyb3JTdHJpbmcgPSAiZXhlY3V0aW9uQ29udGV4
dElkIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIEpTQ29udGV4dHMgYXMgdGhlcmUgaXMgb25seSBvbmUg
ZXhlY3V0aW9uIGNvbnRleHQiX3M7CisgICAgICAgIHJldHVybiBJbmplY3RlZFNjcmlwdCgpOwor
ICAgIH0KIAogICAgIEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0ID0gaW5qZWN0ZWRTY3Jp
cHRNYW5hZ2VyKCkuaW5qZWN0ZWRTY3JpcHRGb3IoJm1fZ2xvYmFsT2JqZWN0KTsKICAgICBpZiAo
aW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSlNHbG9iYWxPYmplY3RSdW50aW1lQWdlbnQuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0pTR2xvYmFsT2JqZWN0UnVudGlt
ZUFnZW50LmgKaW5kZXggNmYwY2U5MDU5ZDcyMzM4Mzc4YjFkNDdhNzFhNzI1YzM5MmNkMjc3YS4u
YmZlYmRhOTJhMDhhOTFkMzhjZTJjNTE3NTY3OTY3MzFkNTlhMmM5YyAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9hZ2VudHMvSlNHbG9iYWxPYmplY3RSdW50aW1l
QWdlbnQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL2FnZW50cy9KU0ds
b2JhbE9iamVjdFJ1bnRpbWVBZ2VudC5oCkBAIC0zOSwxNSArMzksMTUgQEAgY2xhc3MgSlNHbG9i
YWxPYmplY3RSdW50aW1lQWdlbnQgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yUnVudGltZUFnZW50
IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBKU0dsb2JhbE9i
amVjdFJ1bnRpbWVBZ2VudChKU0FnZW50Q29udGV4dCYpOwotICAgIH5KU0dsb2JhbE9iamVjdFJ1
bnRpbWVBZ2VudCgpIGZpbmFsOworICAgIH5KU0dsb2JhbE9iamVjdFJ1bnRpbWVBZ2VudCgpOwog
CiBwcml2YXRlOgotICAgIEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0Rm9yRXZhbChFcnJv
clN0cmluZyYsIGNvbnN0IGludCogZXhlY3V0aW9uQ29udGV4dElkKSBmaW5hbDsKKyAgICBJbmpl
Y3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdEZvckV2YWwoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiwg
T3B0aW9uYWw8UHJvdG9jb2w6OlJ1bnRpbWU6OkV4ZWN1dGlvbkNvbnRleHRJZD4mJik7CiAKICAg
ICAvLyBOT1RFOiBKYXZhU2NyaXB0IGluc3BlY3RvciBkb2VzIG5vdCB5ZXQgbmVlZCB0byBtdXRl
IGEgY29uc29sZSBiZWNhdXNlIG5vIG1lc3NhZ2VzCiAgICAgLy8gYXJlIHNlbnQgdG8gdGhlIGNv
bnNvbGUgb3V0c2lkZSBvZiB0aGUgQVBJIGJvdW5kYXJ5IG9yIGNvbnNvbGUgb2JqZWN0LgotICAg
IHZvaWQgbXV0ZUNvbnNvbGUoKSBmaW5hbCB7IH0KLSAgICB2b2lkIHVubXV0ZUNvbnNvbGUoKSBm
aW5hbCB7IH0KKyAgICB2b2lkIG11dGVDb25zb2xlKCkgeyB9CisgICAgdm9pZCB1bm11dGVDb25z
b2xlKCkgeyB9CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UnVudGltZUZyb250ZW5kRGlzcGF0Y2hl
cj4gbV9mcm9udGVuZERpc3BhdGNoZXI7CiAgICAgUmVmUHRyPFJ1bnRpbWVCYWNrZW5kRGlzcGF0
Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3IvcHJvdG9jb2wvUGFnZS5qc29uIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9wcm90b2NvbC9QYWdlLmpzb24KaW5kZXggM2I4ZmExOGJkN2U4ZDk1ZDdlOGY5
NWI0NDJhZmM2M2U1NTBjZTYzYS4uZmRlNGY2OTY0ZDQwZThhNTY1MTE2YmUyYmM2OTJhNDUxYzJk
YTEwNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9wcm90b2Nv
bC9QYWdlLmpzb24KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9wcm90b2Nv
bC9QYWdlLmpzb24KQEAgLTI2Nyw3ICsyNjcsNyBAQAogICAgICAgICAgICAgImNvbmRpdGlvbiI6
ICIoZGVmaW5lZChFTkFCTEVfREFSS19NT0RFX0NTUykgJiYgRU5BQkxFX0RBUktfTU9ERV9DU1Mp
IHx8IChkZWZpbmVkKEhBVkVfT1NfREFSS19NT0RFX1NVUFBPUlQpICYmIEhBVkVfT1NfREFSS19N
T0RFX1NVUFBPUlQpIiwKICAgICAgICAgICAgICJ0YXJnZXRUeXBlcyI6IFsicGFnZSJdLAogICAg
ICAgICAgICAgInBhcmFtZXRlcnMiOiBbCi0gICAgICAgICAgICAgICAgeyAibmFtZSI6ICJhcHBl
YXJhbmNlIiwgIiRyZWYiOiAiQXBwZWFyYW5jZSIsICJkZXNjcmlwdGlvbiI6ICJBcHBlYXJhbmNl
IG5hbWUgdG8gZm9yY2UuIEVtcHR5IHN0cmluZyBkaXNhYmxlcyB0aGUgb3ZlcnJpZGUuIiB9Cisg
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJhcHBlYXJhbmNlIiwgIiRyZWYiOiAiQXBwZWFyYW5j
ZSIsICJvcHRpb25hbCI6IHRydWUgfQogICAgICAgICAgICAgXQogICAgICAgICB9LAogICAgICAg
ICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3JlbW90ZS9z
b2NrZXQvUmVtb3RlSW5zcGVjdG9yQ29ubmVjdGlvbkNsaWVudC5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3JlbW90ZS9zb2NrZXQvUmVtb3RlSW5zcGVjdG9yQ29ubmVjdGlv
bkNsaWVudC5jcHAKaW5kZXggMDY1MmUxMjcwOGJmODYyMzBiZTQ2MjlmZTY1NzI1YmJiYzM1YjY3
MC4uODk2NWRhMjFkYTgxMDE0Mzg5MWEyMzlhM2UxY2FmYjMxZmY0ZmJmMiAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9yZW1vdGUvc29ja2V0L1JlbW90ZUluc3Bl
Y3RvckNvbm5lY3Rpb25DbGllbnQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3IvcmVtb3RlL3NvY2tldC9SZW1vdGVJbnNwZWN0b3JDb25uZWN0aW9uQ2xpZW50LmNwcApA
QCAtOTIsMzEgKzkyLDI5IEBAIE9wdGlvbmFsPFJlbW90ZUluc3BlY3RvckNvbm5lY3Rpb25DbGll
bnQ6OkV2ZW50PiBSZW1vdGVJbnNwZWN0b3JDb25uZWN0aW9uQ2xpZW50CiAKICAgICBTdHJpbmcg
anNvbkRhdGEgPSBTdHJpbmc6OmZyb21VVEY4KGRhdGEpOwogCi0gICAgUmVmUHRyPEpTT046OlZh
bHVlPiBtZXNzYWdlVmFsdWU7Ci0gICAgaWYgKCFKU09OOjpWYWx1ZTo6cGFyc2VKU09OKGpzb25E
YXRhLCBtZXNzYWdlVmFsdWUpKQorICAgIGF1dG8gbWVzc2FnZVZhbHVlID0gSlNPTjo6VmFsdWU6
OnBhcnNlSlNPTihqc29uRGF0YSk7CisgICAgaWYgKCFtZXNzYWdlVmFsdWUpCiAgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBtZXNzYWdlT2Jq
ZWN0OwotICAgIGlmICghbWVzc2FnZVZhbHVlLT5hc09iamVjdChtZXNzYWdlT2JqZWN0KSkKKyAg
ICBhdXRvIG1lc3NhZ2VPYmplY3QgPSBtZXNzYWdlVmFsdWUtPmFzT2JqZWN0KCk7CisgICAgaWYg
KCFtZXNzYWdlT2JqZWN0KQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgRXZl
bnQgZXZlbnQ7Ci0gICAgaWYgKCFtZXNzYWdlT2JqZWN0LT5nZXRTdHJpbmcoImV2ZW50Il9zLCBl
dmVudC5tZXRob2ROYW1lKSkKKworICAgIGV2ZW50Lm1ldGhvZE5hbWUgPSBtZXNzYWdlT2JqZWN0
LT5nZXRTdHJpbmcoImV2ZW50Il9zKTsKKyAgICBpZiAoIWV2ZW50Lm1ldGhvZE5hbWUpCiAgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICBldmVudC5jbGllbnRJRCA9IGNsaWVudElE
OwogCi0gICAgQ29ubmVjdGlvbklEIGNvbm5lY3Rpb25JRDsKLSAgICBpZiAobWVzc2FnZU9iamVj
dC0+Z2V0SW50ZWdlcigiY29ubmVjdGlvbklEIl9zLCBjb25uZWN0aW9uSUQpKQotICAgICAgICBl
dmVudC5jb25uZWN0aW9uSUQgPSBjb25uZWN0aW9uSUQ7CisgICAgaWYgKGF1dG8gY29ubmVjdGlv
bklEID0gbWVzc2FnZU9iamVjdC0+Z2V0SW50ZWdlcigiY29ubmVjdGlvbklEIl9zKSkKKyAgICAg
ICAgZXZlbnQuY29ubmVjdGlvbklEID0gKmNvbm5lY3Rpb25JRDsKIAotICAgIFRhcmdldElEIHRh
cmdldElEOwotICAgIGlmIChtZXNzYWdlT2JqZWN0LT5nZXRJbnRlZ2VyKCJ0YXJnZXRJRCJfcywg
dGFyZ2V0SUQpKQotICAgICAgICBldmVudC50YXJnZXRJRCA9IHRhcmdldElEOworICAgIGlmIChh
dXRvIHRhcmdldElEID0gbWVzc2FnZU9iamVjdC0+Z2V0SW50ZWdlcigidGFyZ2V0SUQiX3MpKQor
ICAgICAgICBldmVudC50YXJnZXRJRCA9ICp0YXJnZXRJRDsKIAotICAgIFN0cmluZyBtZXNzYWdl
OwotICAgIGlmIChtZXNzYWdlT2JqZWN0LT5nZXRTdHJpbmcoIm1lc3NhZ2UiX3MsIG1lc3NhZ2Up
KQotICAgICAgICBldmVudC5tZXNzYWdlID0gbWVzc2FnZTsKKyAgICBldmVudC5tZXNzYWdlID0g
bWVzc2FnZU9iamVjdC0+Z2V0U3RyaW5nKCJtZXNzYWdlIl9zKTsKIAogICAgIHJldHVybiBldmVu
dDsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvcmVtb3Rl
L3NvY2tldC9SZW1vdGVJbnNwZWN0b3JTb2NrZXQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9yZW1vdGUvc29ja2V0L1JlbW90ZUluc3BlY3RvclNvY2tldC5jcHAKaW5kZXgg
ZTNlMDQ1MDZlOTc4YjUwMTlkOGUwMDU4ZTg3NzlhNDZjYjFmMjAxNC4uYTliOGYxNmM1MDhhODIy
NDMwNzJiNDY1MDdjOTBiNjI0MmQ5NGRjYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9yZW1vdGUvc29ja2V0L1JlbW90ZUluc3BlY3RvclNvY2tldC5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9yZW1vdGUvc29ja2V0L1JlbW90ZUlu
c3BlY3RvclNvY2tldC5jcHAKQEAgLTE1OCw3ICsxNTgsNyBAQCB2b2lkIFJlbW90ZUluc3BlY3Rv
cjo6cHVzaExpc3RpbmdzTm93KCkKIAogICAgIGF1dG8gdGFyZ2V0TGlzdEpTT04gPSBKU09OOjpB
cnJheTo6Y3JlYXRlKCk7CiAgICAgZm9yIChhdXRvIGxpc3RpbmcgOiBtX3RhcmdldExpc3RpbmdN
YXAudmFsdWVzKCkpCi0gICAgICAgIHRhcmdldExpc3RKU09OLT5wdXNoT2JqZWN0KGxpc3Rpbmcp
OworICAgICAgICB0YXJnZXRMaXN0SlNPTi0+cHVzaE9iamVjdCgqbGlzdGluZyk7CiAKICAgICBh
dXRvIGpzb25FdmVudCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAganNvbkV2ZW50LT5z
ZXRTdHJpbmcoImV2ZW50Il9zLCAiU2V0VGFyZ2V0TGlzdCJfcyk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9jcHBfZ2VuZXJhdG9y
LnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vY3Bw
X2dlbmVyYXRvci5weQppbmRleCBmNzMzOGY2ZGQzZjE4MWU4OTVlMTllZWM2NmNhMjFkNTljYmJk
YWZhLi4zNTk4OGRiZDg5MTlmZDgwODcwMzcxMWViZDZmN2RkZjcyNGFkY2Q1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9jcHBfZ2Vu
ZXJhdG9yLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9j
b2RlZ2VuL2NwcF9nZW5lcmF0b3IucHkKQEAgLTU1LDI3OSArNTUsMzI5IEBAIGNsYXNzIENwcEdl
bmVyYXRvcihHZW5lcmF0b3IpOgogICAgICAgICByZXR1cm4gc2VsZi5tb2RlbCgpLmZyYW1ld29y
ay5zZXR0aW5nKCdjcHBfcHJvdG9jb2xfZ3JvdXAnLCAnJykKIAogICAgIGRlZiBoZWxwZXJzX25h
bWVzcGFjZShzZWxmKToKLSAgICAgICAgcmV0dXJuICclc0hlbHBlcnMnICUgc2VsZi5wcm90b2Nv
bF9uYW1lKCkKKyAgICAgICAgbmFtZXNwYWNlID0gJ0hlbHBlcnMnCisgICAgICAgIGlmIHNlbGYu
cHJvdG9jb2xfbmFtZSgpICE9ICdJbnNwZWN0b3InOgorICAgICAgICAgICAgbmFtZXNwYWNlID0g
c2VsZi5wcm90b2NvbF9uYW1lKCkgKyBuYW1lc3BhY2UKKyAgICAgICAgcmV0dXJuIG5hbWVzcGFj
ZQogCiAgICAgIyBNaXNjZWxsYW5lb3VzIHRleHQgbWFuaXB1bGF0aW9uIHJvdXRpbmVzLgogICAg
IEBzdGF0aWNtZXRob2QKICAgICBkZWYgY3BwX2dldHRlcl9tZXRob2RfZm9yX3R5cGUoX3R5cGUp
OgotICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBPYmplY3RUeXBlKToKLSAgICAgICAgICAg
IHJldHVybiAnZ2V0T2JqZWN0JwotICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBBcnJheVR5
cGUpOgotICAgICAgICAgICAgcmV0dXJuICdnZXRBcnJheScKLSAgICAgICAgaWYgaXNpbnN0YW5j
ZShfdHlwZSwgUHJpbWl0aXZlVHlwZSk6Ci0gICAgICAgICAgICBpZiBfdHlwZS5yYXdfbmFtZSgp
ID09ICdpbnRlZ2VyJzoKLSAgICAgICAgICAgICAgICByZXR1cm4gJ2dldEludGVnZXInCi0gICAg
ICAgICAgICBlbGlmIF90eXBlLnJhd19uYW1lKCkgPT0gJ251bWJlcic6Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuICdnZXREb3VibGUnCi0gICAgICAgICAgICBlbGlmIF90eXBlLnJhd19uYW1lKCkg
PT0gJ2FueSc6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICdnZXRWYWx1ZScKLSAgICAgICAgICAg
IGVsc2U6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICdnZXQnICsgdWNmaXJzdChfdHlwZS5yYXdf
bmFtZSgpKQogICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBBbGlhc2VkVHlwZSk6Ci0gICAg
ICAgICAgICByZXR1cm4gQ3BwR2VuZXJhdG9yLmNwcF9nZXR0ZXJfbWV0aG9kX2Zvcl90eXBlKF90
eXBlLmFsaWFzZWRfdHlwZSkKKyAgICAgICAgICAgIF90eXBlID0gX3R5cGUuYWxpYXNlZF90eXBl
CisgICAgICAgICAgICAjIEZhbGx0aHJvdWdoLgorCiAgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5
cGUsIEVudW1UeXBlKToKLSAgICAgICAgICAgIHJldHVybiBDcHBHZW5lcmF0b3IuY3BwX2dldHRl
cl9tZXRob2RfZm9yX3R5cGUoX3R5cGUucHJpbWl0aXZlX3R5cGUpCisgICAgICAgICAgICBfdHlw
ZSA9IF90eXBlLnByaW1pdGl2ZV90eXBlCisgICAgICAgICAgICAjIEZhbGx0aHJvdWdoLgorCisg
ICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIE9iamVjdFR5cGUpIG9yIF90eXBlLnF1YWxpZmll
ZF9uYW1lKCkgaW4gWydvYmplY3QnXToKKyAgICAgICAgICAgIHJldHVybiAnZ2V0T2JqZWN0Jwor
CisgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEFycmF5VHlwZSkgb3IgX3R5cGUucXVhbGlm
aWVkX25hbWUoKSBpbiBbJ2FycmF5J106CisgICAgICAgICAgICByZXR1cm4gJ2dldEFycmF5Jwor
CisgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIFByaW1pdGl2ZVR5cGUpOgorICAgICAgICAg
ICAgaWYgX3R5cGUucmF3X25hbWUoKSA9PSAnbnVtYmVyJzoKKyAgICAgICAgICAgICAgICByZXR1
cm4gJ2dldERvdWJsZScKKyAgICAgICAgICAgIGlmIF90eXBlLnJhd19uYW1lKCkgPT0gJ2FueSc6
CisgICAgICAgICAgICAgICAgcmV0dXJuICdnZXRWYWx1ZScKKyAgICAgICAgICAgIHJldHVybiAn
Z2V0JyArIHVjZmlyc3QoX3R5cGUucmF3X25hbWUoKSkKKworICAgICAgICByYWlzZSBWYWx1ZUVy
cm9yKCJ1bmtub3duIHR5cGUiKQogCiAgICAgQHN0YXRpY21ldGhvZAogICAgIGRlZiBjcHBfc2V0
dGVyX21ldGhvZF9mb3JfdHlwZShfdHlwZSk6Ci0gICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUs
IE9iamVjdFR5cGUpOgotICAgICAgICAgICAgcmV0dXJuICdzZXRPYmplY3QnCi0gICAgICAgIGlm
IGlzaW5zdGFuY2UoX3R5cGUsIEFycmF5VHlwZSk6Ci0gICAgICAgICAgICByZXR1cm4gJ3NldEFy
cmF5JwotICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBQcmltaXRpdmVUeXBlKToKLSAgICAg
ICAgICAgIGlmIF90eXBlLnJhd19uYW1lKCkgPT0gJ2ludGVnZXInOgotICAgICAgICAgICAgICAg
IHJldHVybiAnc2V0SW50ZWdlcicKLSAgICAgICAgICAgIGVsaWYgX3R5cGUucmF3X25hbWUoKSA9
PSAnbnVtYmVyJzoKLSAgICAgICAgICAgICAgICByZXR1cm4gJ3NldERvdWJsZScKLSAgICAgICAg
ICAgIGVsaWYgX3R5cGUucmF3X25hbWUoKSA9PSAnYW55JzoKLSAgICAgICAgICAgICAgICByZXR1
cm4gJ3NldFZhbHVlJwotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByZXR1cm4g
J3NldCcgKyB1Y2ZpcnN0KF90eXBlLnJhd19uYW1lKCkpCiAgICAgICAgIGlmIGlzaW5zdGFuY2Uo
X3R5cGUsIEFsaWFzZWRUeXBlKToKLSAgICAgICAgICAgIHJldHVybiBDcHBHZW5lcmF0b3IuY3Bw
X3NldHRlcl9tZXRob2RfZm9yX3R5cGUoX3R5cGUuYWxpYXNlZF90eXBlKQorICAgICAgICAgICAg
X3R5cGUgPSBfdHlwZS5hbGlhc2VkX3R5cGUKKyAgICAgICAgICAgICMgRmFsbHRocm91Z2guCisK
ICAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgRW51bVR5cGUpOgotICAgICAgICAgICAgcmV0
dXJuIENwcEdlbmVyYXRvci5jcHBfc2V0dGVyX21ldGhvZF9mb3JfdHlwZShfdHlwZS5wcmltaXRp
dmVfdHlwZSkKKyAgICAgICAgICAgIF90eXBlID0gX3R5cGUucHJpbWl0aXZlX3R5cGUKKyAgICAg
ICAgICAgICMgRmFsbHRocm91Z2guCisKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgT2Jq
ZWN0VHlwZSkgb3IgX3R5cGUucXVhbGlmaWVkX25hbWUoKSBpbiBbJ29iamVjdCddOgorICAgICAg
ICAgICAgcmV0dXJuICdzZXRPYmplY3QnCisKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwg
QXJyYXlUeXBlKSBvciBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpIGluIFsnYXJyYXknXToKKyAgICAg
ICAgICAgIHJldHVybiAnc2V0QXJyYXknCisKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwg
UHJpbWl0aXZlVHlwZSk6CisgICAgICAgICAgICBpZiBfdHlwZS5yYXdfbmFtZSgpID09ICdudW1i
ZXInOgorICAgICAgICAgICAgICAgIHJldHVybiAnc2V0RG91YmxlJworICAgICAgICAgICAgaWYg
X3R5cGUucmF3X25hbWUoKSA9PSAnYW55JzoKKyAgICAgICAgICAgICAgICByZXR1cm4gJ3NldFZh
bHVlJworICAgICAgICAgICAgcmV0dXJuICdzZXQnICsgdWNmaXJzdChfdHlwZS5yYXdfbmFtZSgp
KQorCisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInVua25vd24gdHlwZSIpCiAKICAgICAjIEdl
bmVyYXRlIHR5cGUgcmVwcmVzZW50YXRpb25zIGZvciB2YXJpb3VzIHNpdHVhdGlvbnMuCiAgICAg
QHN0YXRpY21ldGhvZAogICAgIGRlZiBjcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZShfdHlwZSk6
CiAgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEFsaWFzZWRUeXBlKToKLSAgICAgICAgICAg
IF90eXBlID0gX3R5cGUuYWxpYXNlZF90eXBlICAjIEZhbGwgdGhyb3VnaCB0byBlbnVtIG9yIHBy
aW1pdGl2ZS4KKyAgICAgICAgICAgIF90eXBlID0gX3R5cGUuYWxpYXNlZF90eXBlCisgICAgICAg
ICAgICAjIEZhbGx0aHJvdWdoLgogCi0gICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIE9iamVj
dFR5cGUpIGFuZCBsZW4oX3R5cGUubWVtYmVycykgPT0gMDoKLSAgICAgICAgICAgIHJldHVybiAn
SlNPTjo6T2JqZWN0JwogICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBBcnJheVR5cGUpOgot
ICAgICAgICAgICAgaWYgX3R5cGUucmF3X25hbWUoKSBpcyBOb25lOiAgIyBPdGhlcndpc2UsIGZh
bGwgdGhyb3VnaCBhbmQgdXNlIHR5cGVkZWYnZCBuYW1lLgorICAgICAgICAgICAgaWYgX3R5cGUu
cmF3X25hbWUoKSBpcyBOb25lOgogICAgICAgICAgICAgICAgIHJldHVybiAnSlNPTjo6QXJyYXlP
Zjwlcz4nICUgQ3BwR2VuZXJhdG9yLmNwcF9wcm90b2NvbF90eXBlX2Zvcl90eXBlKF90eXBlLmVs
ZW1lbnRfdHlwZSkKKyAgICAgICAgICAgICMgRmFsbHRocm91Z2guCisKICAgICAgICAgaWYgaXNp
bnN0YW5jZShfdHlwZSwgKE9iamVjdFR5cGUsIEVudW1UeXBlLCBBcnJheVR5cGUpKToKLSAgICAg
ICAgICAgIHJldHVybiAnSW5zcGVjdG9yOjpQcm90b2NvbDo6JXM6OiVzJyAlIChfdHlwZS50eXBl
X2RvbWFpbigpLmRvbWFpbl9uYW1lLCBfdHlwZS5yYXdfbmFtZSgpKQorICAgICAgICAgICAgcmV0
dXJuICdQcm90b2NvbDo6JXM6OiVzJyAlIChfdHlwZS50eXBlX2RvbWFpbigpLmRvbWFpbl9uYW1l
LCBfdHlwZS5yYXdfbmFtZSgpKQorCiAgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIFByaW1p
dGl2ZVR5cGUpOgogICAgICAgICAgICAgcmV0dXJuIENwcEdlbmVyYXRvci5jcHBfbmFtZV9mb3Jf
cHJpbWl0aXZlX3R5cGUoX3R5cGUpCiAKLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIGNwcF9w
cm90b2NvbF90eXBlX2Zvcl90eXBlX21lbWJlcih0eXBlX21lbWJlciwgb2JqZWN0X2RlY2xhcmF0
aW9uKToKLSAgICAgICAgaWYgaXNpbnN0YW5jZSh0eXBlX21lbWJlci50eXBlLCBFbnVtVHlwZSkg
YW5kIHR5cGVfbWVtYmVyLnR5cGUuaXNfYW5vbnltb3VzOgotICAgICAgICAgICAgcmV0dXJuICc6
Oicuam9pbihbQ3BwR2VuZXJhdG9yLmNwcF9wcm90b2NvbF90eXBlX2Zvcl90eXBlKG9iamVjdF9k
ZWNsYXJhdGlvbi50eXBlKSwgdWNmaXJzdCh0eXBlX21lbWJlci5tZW1iZXJfbmFtZSldKQotICAg
ICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuIENwcEdlbmVyYXRvci5jcHBfcHJvdG9jb2xf
dHlwZV9mb3JfdHlwZSh0eXBlX21lbWJlci50eXBlKQorICAgICAgICByYWlzZSBWYWx1ZUVycm9y
KCJ1bmtub3duIHR5cGUiKQogCiAgICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBjcHBfdHlwZV9m
b3JfdW5jaGVja2VkX2Zvcm1hbF9pbl9wYXJhbWV0ZXIocGFyYW1ldGVyKToKLSAgICAgICAgX3R5
cGUgPSBwYXJhbWV0ZXIudHlwZQorICAgIGRlZiBjcHBfdHlwZV9mb3JfdHlwZV9tZW1iZXJfYXJn
dW1lbnQoX3R5cGUsIG5hbWUpOgogICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBBbGlhc2Vk
VHlwZSk6Ci0gICAgICAgICAgICBfdHlwZSA9IF90eXBlLmFsaWFzZWRfdHlwZSAgIyBGYWxsIHRo
cm91Z2ggdG8gZW51bSBvciBwcmltaXRpdmUuCisgICAgICAgICAgICBfdHlwZSA9IF90eXBlLmFs
aWFzZWRfdHlwZQorICAgICAgICAgICAgIyBGYWxsdGhyb3VnaC4KIAotICAgICAgICBpZiBpc2lu
c3RhbmNlKF90eXBlLCBFbnVtVHlwZSk6Ci0gICAgICAgICAgICBfdHlwZSA9IF90eXBlLnByaW1p
dGl2ZV90eXBlICAjIEZhbGwgdGhyb3VnaCB0byBwcmltaXRpdmUuCi0KLSAgICAgICAgIyBUaGlz
IGhhbmRsZXMgdGhlICdhbnknIHR5cGUgYW5kIG9iamVjdHMgd2l0aCBkZWZpbmVkIHByb3BlcnRp
ZXMuCi0gICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIE9iamVjdFR5cGUpIG9yIF90eXBlLnF1
YWxpZmllZF9uYW1lKCkgPT0gJ29iamVjdCc6Ci0gICAgICAgICAgICBjcHBfbmFtZSA9ICdKU09O
OjpPYmplY3QnCi0gICAgICAgICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuICdjb25zdCAlcyonICUgY3BwX25hbWUKLSAgICAgICAgICAgIGVsc2U6
Ci0gICAgICAgICAgICAgICAgcmV0dXJuICdjb25zdCAlcyYnICUgY3BwX25hbWUKLSAgICAgICAg
aWYgaXNpbnN0YW5jZShfdHlwZSwgQXJyYXlUeXBlKToKLSAgICAgICAgICAgIGNwcF9uYW1lID0g
J0pTT046OkFycmF5JwotICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgotICAg
ICAgICAgICAgICAgIHJldHVybiAnY29uc3QgJXMqJyAlIGNwcF9uYW1lCi0gICAgICAgICAgICBl
bHNlOgotICAgICAgICAgICAgICAgIHJldHVybiAnY29uc3QgJXMmJyAlIGNwcF9uYW1lCi0gICAg
ICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIFByaW1pdGl2ZVR5cGUpOgotICAgICAgICAgICAgY3Bw
X25hbWUgPSBDcHBHZW5lcmF0b3IuY3BwX25hbWVfZm9yX3ByaW1pdGl2ZV90eXBlKF90eXBlKQot
ICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgotICAgICAgICAgICAgICAgIHJl
dHVybiAnY29uc3QgJXMqJyAlIGNwcF9uYW1lCi0gICAgICAgICAgICBlbGlmIF90eXBlLnJhd19u
YW1lKCkgaW4gWydzdHJpbmcnXToKLSAgICAgICAgICAgICAgICByZXR1cm4gJ2NvbnN0ICVzJicg
JSBjcHBfbmFtZQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByZXR1cm4gY3Bw
X25hbWUKLQotICAgICAgICByZXR1cm4gInVua25vd25fdW5jaGVja2VkX2Zvcm1hbF9pbl9wYXJh
bWV0ZXJfdHlwZSIKLQotICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgY3BwX3R5cGVfZm9yX2No
ZWNrZWRfZm9ybWFsX2V2ZW50X3BhcmFtZXRlcihwYXJhbWV0ZXIpOgotICAgICAgICByZXR1cm4g
Q3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl90eXBlX3dpdGhfbmFtZShwYXJhbWV0ZXIudHlwZSwg
cGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lLCBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwpCi0KLSAgICBA
c3RhdGljbWV0aG9kCi0gICAgZGVmIGNwcF90eXBlX2Zvcl90eXBlX21lbWJlcihtZW1iZXIpOgot
ICAgICAgICByZXR1cm4gQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl90eXBlX3dpdGhfbmFtZSht
ZW1iZXIudHlwZSwgbWVtYmVyLm1lbWJlcl9uYW1lLCBGYWxzZSkKLQotICAgIEBzdGF0aWNtZXRo
b2QKLSAgICBkZWYgY3BwX3R5cGVfZm9yX3R5cGVfd2l0aF9uYW1lKF90eXBlLCB0eXBlX25hbWUs
IGlzX29wdGlvbmFsKToKICAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgKEFycmF5VHlwZSwg
T2JqZWN0VHlwZSkpOgotICAgICAgICAgICAgcmV0dXJuICdSZWZQdHI8JXM+JyAlIENwcEdlbmVy
YXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZShfdHlwZSkKLSAgICAgICAgaWYgaXNpbnN0
YW5jZShfdHlwZSwgQWxpYXNlZFR5cGUpOgotICAgICAgICAgICAgYnVpbGRlcl90eXBlID0gQ3Bw
R2VuZXJhdG9yLmNwcF9wcm90b2NvbF90eXBlX2Zvcl90eXBlKF90eXBlKQotICAgICAgICAgICAg
aWYgaXNfb3B0aW9uYWw6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICdjb25zdCAlcyonICUgYnVp
bGRlcl90eXBlCi0gICAgICAgICAgICBlbGlmIF90eXBlLmFsaWFzZWRfdHlwZS5xdWFsaWZpZWRf
bmFtZSgpIGluIFsnaW50ZWdlcicsICdudW1iZXInXToKLSAgICAgICAgICAgICAgICByZXR1cm4g
Q3BwR2VuZXJhdG9yLmNwcF9uYW1lX2Zvcl9wcmltaXRpdmVfdHlwZShfdHlwZS5hbGlhc2VkX3R5
cGUpCi0gICAgICAgICAgICBlbGlmIF90eXBlLmFsaWFzZWRfdHlwZS5xdWFsaWZpZWRfbmFtZSgp
IGluIFsnc3RyaW5nJ106Ci0gICAgICAgICAgICAgICAgcmV0dXJuICdjb25zdCAlcyYnICUgYnVp
bGRlcl90eXBlCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJldHVybiBidWls
ZGVyX3R5cGUKLSAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgUHJpbWl0aXZlVHlwZSk6Ci0g
ICAgICAgICAgICBjcHBfbmFtZSA9IENwcEdlbmVyYXRvci5jcHBfbmFtZV9mb3JfcHJpbWl0aXZl
X3R5cGUoX3R5cGUpCi0gICAgICAgICAgICBpZiBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpIGluIFsn
b2JqZWN0J106Ci0gICAgICAgICAgICAgICAgcmV0dXJuICdSZWZQdHI8SlNPTjo6T2JqZWN0PicK
LSAgICAgICAgICAgIGVsaWYgX3R5cGUucXVhbGlmaWVkX25hbWUoKSBpbiBbJ2FueSddOgotICAg
ICAgICAgICAgICAgIHJldHVybiAnUmVmUHRyPEpTT046OlZhbHVlPicKLSAgICAgICAgICAgIGVs
aWYgaXNfb3B0aW9uYWw6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICdjb25zdCAlcyonICUgY3Bw
X25hbWUKLSAgICAgICAgICAgIGVsaWYgX3R5cGUucXVhbGlmaWVkX25hbWUoKSBpbiBbJ3N0cmlu
ZyddOgotICAgICAgICAgICAgICAgIHJldHVybiAnY29uc3QgJXMmJyAlIGNwcF9uYW1lCi0gICAg
ICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJldHVybiBjcHBfbmFtZQorICAgICAgICAg
ICAgcmV0dXJuICdSZWY8JXM+JiYnICUgQ3BwR2VuZXJhdG9yLmNwcF9wcm90b2NvbF90eXBlX2Zv
cl90eXBlKF90eXBlKQorCisgICAgICAgIGlmIF90eXBlLnF1YWxpZmllZF9uYW1lKCkgPT0gJ29i
amVjdCc6CisgICAgICAgICAgICByZXR1cm4gJ1JlZjxKU09OOjpPYmplY3Q+JiYnCisKKyAgICAg
ICAgaWYgX3R5cGUucXVhbGlmaWVkX25hbWUoKSA9PSAnYXJyYXknOgorICAgICAgICAgICAgcmV0
dXJuICdSZWY8SlNPTjo6QXJyYXk+JiYnCisKKyAgICAgICAgaWYgX3R5cGUucXVhbGlmaWVkX25h
bWUoKSA9PSAnYW55JzoKKyAgICAgICAgICAgIHJldHVybiAnUmVmPEpTT046OlZhbHVlPiYmJwor
CisgICAgICAgIGlmIF90eXBlLnF1YWxpZmllZF9uYW1lKCkgPT0gJ3N0cmluZyc6CisgICAgICAg
ICAgICByZXR1cm4gJ2NvbnN0ICVzJicgJSBDcHBHZW5lcmF0b3IuY3BwX25hbWVfZm9yX3ByaW1p
dGl2ZV90eXBlKF90eXBlKQorCiAgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEVudW1UeXBl
KToKICAgICAgICAgICAgIGlmIF90eXBlLmlzX2Fub255bW91czoKLSAgICAgICAgICAgICAgICBl
bnVtX3R5cGVfbmFtZSA9IHVjZmlyc3QodHlwZV9uYW1lKQotICAgICAgICAgICAgZWxzZToKLSAg
ICAgICAgICAgICAgICBlbnVtX3R5cGVfbmFtZSA9ICdJbnNwZWN0b3I6OlByb3RvY29sOjolczo6
JXMnICUgKF90eXBlLnR5cGVfZG9tYWluKCkuZG9tYWluX25hbWUsIF90eXBlLnJhd19uYW1lKCkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIHVjZmlyc3QobmFtZSkKKyAgICAgICAgICAgIHJldHVy
biAnUHJvdG9jb2w6OiVzOjolcycgJSAoX3R5cGUudHlwZV9kb21haW4oKS5kb21haW5fbmFtZSwg
X3R5cGUucmF3X25hbWUoKSkKIAotICAgICAgICAgICAgaWYgaXNfb3B0aW9uYWw6Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuICclcyonICUgZW51bV90eXBlX25hbWUKLSAgICAgICAgICAgIGVsc2U6
Ci0gICAgICAgICAgICAgICAgcmV0dXJuICclcycgJSBlbnVtX3R5cGVfbmFtZQotCi0gICAgQHN0
YXRpY21ldGhvZAotICAgIGRlZiBjcHBfdHlwZV9mb3JfZm9ybWFsX291dF9wYXJhbWV0ZXIocGFy
YW1ldGVyKToKLSAgICAgICAgX3R5cGUgPSBwYXJhbWV0ZXIudHlwZQotCi0gICAgICAgIGlmIGlz
aW5zdGFuY2UoX3R5cGUsIEFsaWFzZWRUeXBlKToKLSAgICAgICAgICAgIF90eXBlID0gX3R5cGUu
YWxpYXNlZF90eXBlICAjIEZhbGwgdGhyb3VnaC4KLQotICAgICAgICBpZiBpc2luc3RhbmNlKF90
eXBlLCAoT2JqZWN0VHlwZSwgQXJyYXlUeXBlKSk6Ci0gICAgICAgICAgICByZXR1cm4gJ1JlZlB0
cjwlcz4mJyAlIENwcEdlbmVyYXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZShfdHlwZSkK
ICAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgUHJpbWl0aXZlVHlwZSk6Ci0gICAgICAgICAg
ICBjcHBfbmFtZSA9IENwcEdlbmVyYXRvci5jcHBfbmFtZV9mb3JfcHJpbWl0aXZlX3R5cGUoX3R5
cGUpCi0gICAgICAgICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuICJPcHRpb25hbDwlcz4mIiAlIGNwcF9uYW1lCi0gICAgICAgICAgICBlbHNlOgot
ICAgICAgICAgICAgICAgIHJldHVybiAnJXMqJyAlIGNwcF9uYW1lCi0gICAgICAgIGlmIGlzaW5z
dGFuY2UoX3R5cGUsIEVudW1UeXBlKToKLSAgICAgICAgICAgIGlmIF90eXBlLmlzX2Fub255bW91
czoKLSAgICAgICAgICAgICAgICByZXR1cm4gJyVzQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjol
cyonICUgKF90eXBlLnR5cGVfZG9tYWluKCkuZG9tYWluX25hbWUsIHVjZmlyc3QocGFyYW1ldGVy
LnBhcmFtZXRlcl9uYW1lKSkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmV0
dXJuICdJbnNwZWN0b3I6OlByb3RvY29sOjolczo6JXMqJyAlIChfdHlwZS50eXBlX2RvbWFpbigp
LmRvbWFpbl9uYW1lLCBfdHlwZS5yYXdfbmFtZSgpKQorICAgICAgICAgICAgcmV0dXJuIENwcEdl
bmVyYXRvci5jcHBfbmFtZV9mb3JfcHJpbWl0aXZlX3R5cGUoX3R5cGUpCiAKLSAgICAgICAgcmFp
c2UgVmFsdWVFcnJvcigidW5rbm93biBmb3JtYWwgb3V0IHBhcmFtZXRlciB0eXBlLiIpCi0KLSAg
ICAjIEZJWE1FOiB0aGlzIGlzIG9ubHkgc2xpZ2h0bHkgZGlmZmVyZW50IGZyb20gb3V0IHBhcmFt
ZXRlcnM7IHRoZXkgY291bGQgYmUgdW5pZmllZC4KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVm
IGNwcF90eXBlX2Zvcl9mb3JtYWxfYXN5bmNfcGFyYW1ldGVyKHBhcmFtZXRlcik6Ci0gICAgICAg
IF90eXBlID0gcGFyYW1ldGVyLnR5cGUKLSAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgQWxp
YXNlZFR5cGUpOgotICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5hbGlhc2VkX3R5cGUgICMgRmFs
bCB0aHJvdWdoLgotCi0gICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIChPYmplY3RUeXBlLCBB
cnJheVR5cGUpKToKLSAgICAgICAgICAgIHJldHVybiAnUmVmUHRyPCVzPiYmJyAlIENwcEdlbmVy
YXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZShfdHlwZSkKLSAgICAgICAgaWYgaXNpbnN0
YW5jZShfdHlwZSwgUHJpbWl0aXZlVHlwZSk6Ci0gICAgICAgICAgICBjcHBfbmFtZSA9IENwcEdl
bmVyYXRvci5jcHBfbmFtZV9mb3JfcHJpbWl0aXZlX3R5cGUoX3R5cGUpCi0gICAgICAgICAgICBp
ZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICJPcHRpb25h
bDwlcz4mIiAlIGNwcF9uYW1lCi0gICAgICAgICAgICBlbGlmIF90eXBlLnF1YWxpZmllZF9uYW1l
KCkgaW4gWydpbnRlZ2VyJywgJ251bWJlciddOgotICAgICAgICAgICAgICAgIHJldHVybiBDcHBH
ZW5lcmF0b3IuY3BwX25hbWVfZm9yX3ByaW1pdGl2ZV90eXBlKF90eXBlKQotICAgICAgICAgICAg
ZWxpZiBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpIGluIFsnc3RyaW5nJ106Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuICdjb25zdCAlcyYnICUgY3BwX25hbWUKLSAgICAgICAgICAgIGVsc2U6Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIGNwcF9uYW1lCi0gICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUs
IEVudW1UeXBlKToKLSAgICAgICAgICAgIGlmIF90eXBlLmlzX2Fub255bW91czoKLSAgICAgICAg
ICAgICAgICBjcHBfbmFtZSA9ICclc0JhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6JXMnICUgKF90
eXBlLnR5cGVfZG9tYWluKCkuZG9tYWluX25hbWUsIHVjZmlyc3QocGFyYW1ldGVyLnBhcmFtZXRl
cl9uYW1lKSkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgY3BwX25hbWUgPSAn
SW5zcGVjdG9yOjpQcm90b2NvbDo6JXM6OiVzJyAlIChfdHlwZS50eXBlX2RvbWFpbigpLmRvbWFp
bl9uYW1lLCBfdHlwZS5yYXdfbmFtZSgpKQotCi0gICAgICAgICAgICBpZiBwYXJhbWV0ZXIuaXNf
b3B0aW9uYWw6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICJPcHRpb25hbDwlcz4iICUgY3BwX25h
bWUKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGNwcF9uYW1lCi0K
LSAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiVW5rbm93biBmb3JtYWwgYXN5bmMgcGFyYW1ldGVy
IHR5cGUuIikKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigidW5rbm93biB0eXBlIikKIAogICAg
ICMgSW4tcGFyYW1ldGVycyBkb24ndCB1c2UgYnVpbGRlciB0eXBlcywgYmVjYXVzZSB0aGV5IGNv
dWxkIGJlIHBhc3NlZAogICAgICMgIm9wZW4gdHlwZXMiIHRoYXQgYXJlIG1hbnVhbGx5IGNvbnN0
cnVjdGVkIG91dCBvZiBJbnNwZWN0b3JPYmplY3RzLgotCi0gICAgIyBGSVhNRTogT25seSBwYXJh
bWV0ZXJzIHRoYXQgYXJlIGFjdHVhbGx5IG9wZW4gdHlwZXMgc2hvdWxkIG5lZWQgbm9uLWJ1aWxk
ZXIgcGFyYW1ldGVyIHR5cGVzLgogICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgY3BwX3R5cGVf
Zm9yX3N0YWNrX2luX3BhcmFtZXRlcihwYXJhbWV0ZXIpOgotICAgICAgICBfdHlwZSA9IHBhcmFt
ZXRlci50eXBlCisgICAgZGVmIGNwcF90eXBlX2Zvcl9jb21tYW5kX3BhcmFtZXRlcihfdHlwZSwg
aXNfb3B0aW9uYWwpOgogICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBBbGlhc2VkVHlwZSk6
Ci0gICAgICAgICAgICBfdHlwZSA9IF90eXBlLmFsaWFzZWRfdHlwZSAgIyBGYWxsIHRocm91Z2gu
CisgICAgICAgICAgICBfdHlwZSA9IF90eXBlLmFsaWFzZWRfdHlwZQorICAgICAgICAgICAgIyBG
YWxsdGhyb3VnaC4KKworICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBFbnVtVHlwZSkgYW5k
IF90eXBlLmlzX2Fub255bW91czoKKyAgICAgICAgICAgIF90eXBlID0gX3R5cGUucHJpbWl0aXZl
X3R5cGUKKyAgICAgICAgICAgICMgRmFsbHRocm91Z2guCisKKyAgICAgICAgaWYgaXNpbnN0YW5j
ZShfdHlwZSwgT2JqZWN0VHlwZSkgb3IgX3R5cGUucXVhbGlmaWVkX25hbWUoKSA9PSAnb2JqZWN0
JzoKKyAgICAgICAgICAgIGlmIGlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAgIHJldHVybiAn
UmVmUHRyPEpTT046Ok9iamVjdD4mJicKKyAgICAgICAgICAgIHJldHVybiAnUmVmPEpTT046Ok9i
amVjdD4mJicKKworICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBBcnJheVR5cGUpIG9yIF90
eXBlLnF1YWxpZmllZF9uYW1lKCkgPT0gJ2FycmF5JzoKKyAgICAgICAgICAgIGlmIGlzX29wdGlv
bmFsOgorICAgICAgICAgICAgICAgIHJldHVybiAnUmVmUHRyPEpTT046OkFycmF5PiYmJworICAg
ICAgICAgICAgcmV0dXJuICdSZWY8SlNPTjo6QXJyYXk+JiYnCisKKyAgICAgICAgaWYgX3R5cGUu
cXVhbGlmaWVkX25hbWUoKSA9PSAnYW55JzoKKyAgICAgICAgICAgIGlmIGlzX29wdGlvbmFsOgor
ICAgICAgICAgICAgICAgIHJldHVybiAnUmVmUHRyPEpTT046OlZhbHVlPiYmJworICAgICAgICAg
ICAgcmV0dXJuICdSZWY8SlNPTjo6VmFsdWU+JiYnCisKKyAgICAgICAgaWYgX3R5cGUucXVhbGlm
aWVkX25hbWUoKSA9PSAnc3RyaW5nJzoKKyAgICAgICAgICAgIHJldHVybiAnY29uc3QgJXMmJyAl
IENwcEdlbmVyYXRvci5jcHBfbmFtZV9mb3JfcHJpbWl0aXZlX3R5cGUoX3R5cGUpCiAKICAgICAg
ICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgRW51bVR5cGUpOgotICAgICAgICAgICAgX3R5cGUgPSBf
dHlwZS5wcmltaXRpdmVfdHlwZSAgIyBGYWxsIHRocm91Z2guCi0KLSAgICAgICAgaWYgaXNpbnN0
YW5jZShfdHlwZSwgT2JqZWN0VHlwZSk6Ci0gICAgICAgICAgICByZXR1cm4gIlJlZlB0cjxKU09O
OjpPYmplY3Q+IgotICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBBcnJheVR5cGUpOgotICAg
ICAgICAgICAgcmV0dXJuICJSZWZQdHI8SlNPTjo6QXJyYXk+IgotICAgICAgICBpZiBpc2luc3Rh
bmNlKF90eXBlLCBQcmltaXRpdmVUeXBlKToKKyAgICAgICAgICAgIGNwcF9uYW1lID0gJ1Byb3Rv
Y29sOjolczo6JXMnICUgKF90eXBlLnR5cGVfZG9tYWluKCkuZG9tYWluX25hbWUsIF90eXBlLnJh
d19uYW1lKCkpCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShfdHlwZSwgUHJpbWl0aXZlVHlwZSk6
CiAgICAgICAgICAgICBjcHBfbmFtZSA9IENwcEdlbmVyYXRvci5jcHBfbmFtZV9mb3JfcHJpbWl0
aXZlX3R5cGUoX3R5cGUpCi0gICAgICAgICAgICBpZiBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpIGlu
IFsnYW55JywgJ29iamVjdCddOgotICAgICAgICAgICAgICAgIHJldHVybiAiUmVmUHRyPCVzPiIg
JSBDcHBHZW5lcmF0b3IuY3BwX25hbWVfZm9yX3ByaW1pdGl2ZV90eXBlKF90eXBlKQotICAgICAg
ICAgICAgZWxpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwgYW5kIF90eXBlLnF1YWxpZmllZF9uYW1l
KCkgbm90IGluIFsnYm9vbGVhbicsICdzdHJpbmcnLCAnaW50ZWdlcicsICdudW1iZXInXToKLSAg
ICAgICAgICAgICAgICByZXR1cm4gIk9wdGlvbmFsPCVzPiIgJSBjcHBfbmFtZQotICAgICAgICAg
ICAgZWxzZToKLSAgICAgICAgICAgICAgICByZXR1cm4gY3BwX25hbWUKKyAgICAgICAgZWxzZToK
KyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInVua25vd24gdHlwZSIpCisKKyAgICAgICAg
aWYgaXNfb3B0aW9uYWw6CisgICAgICAgICAgICBjcHBfbmFtZSA9ICdPcHRpb25hbDwlcz4mJicg
JSBjcHBfbmFtZQorICAgICAgICByZXR1cm4gY3BwX25hbWUKIAogICAgIEBzdGF0aWNtZXRob2QK
LSAgICBkZWYgY3BwX3R5cGVfZm9yX3N0YWNrX291dF9wYXJhbWV0ZXIocGFyYW1ldGVyKToKLSAg
ICAgICAgX3R5cGUgPSBwYXJhbWV0ZXIudHlwZQorICAgIGRlZiBjcHBfdHlwZV9mb3JfY29tbWFu
ZF9yZXR1cm5fZGVjbGFyYXRpb24oX3R5cGUsIGlzX29wdGlvbmFsKToKKyAgICAgICAgaWYgaXNp
bnN0YW5jZShfdHlwZSwgQWxpYXNlZFR5cGUpOgorICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5h
bGlhc2VkX3R5cGUKKyAgICAgICAgICAgICMgRmFsbHRocm91Z2guCisKKyAgICAgICAgaWYgaXNp
bnN0YW5jZShfdHlwZSwgRW51bVR5cGUpIGFuZCBfdHlwZS5pc19hbm9ueW1vdXM6CisgICAgICAg
ICAgICBfdHlwZSA9IF90eXBlLnByaW1pdGl2ZV90eXBlCisgICAgICAgICAgICAjIEZhbGx0aHJv
dWdoLgorCiAgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIChBcnJheVR5cGUsIE9iamVjdFR5
cGUpKToKLSAgICAgICAgICAgIHJldHVybiAnUmVmUHRyPCVzPicgJSBDcHBHZW5lcmF0b3IuY3Bw
X3Byb3RvY29sX3R5cGVfZm9yX3R5cGUoX3R5cGUpCi0gICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5
cGUsIEFsaWFzZWRUeXBlKToKLSAgICAgICAgICAgIGJ1aWxkZXJfdHlwZSA9IENwcEdlbmVyYXRv
ci5jcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZShfdHlwZSkKLSAgICAgICAgICAgIGlmIHBhcmFt
ZXRlci5pc19vcHRpb25hbDoKLSAgICAgICAgICAgICAgICByZXR1cm4gIk9wdGlvbmFsPCVzPiIg
JSBidWlsZGVyX3R5cGUKLSAgICAgICAgICAgIHJldHVybiAnJXMnICUgYnVpbGRlcl90eXBlCi0g
ICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIFByaW1pdGl2ZVR5cGUpOgotICAgICAgICAgICAg
Y3BwX25hbWUgPSBDcHBHZW5lcmF0b3IuY3BwX25hbWVfZm9yX3ByaW1pdGl2ZV90eXBlKF90eXBl
KQotICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgotICAgICAgICAgICAgICAg
IHJldHVybiAiT3B0aW9uYWw8JXM+IiAlIGNwcF9uYW1lCi0gICAgICAgICAgICBlbHNlOgotICAg
ICAgICAgICAgICAgIHJldHVybiBjcHBfbmFtZQorICAgICAgICAgICAgaWYgaXNfb3B0aW9uYWw6
CisgICAgICAgICAgICAgICAgcmV0dXJuICdSZWZQdHI8JXM+JyAlIENwcEdlbmVyYXRvci5jcHBf
cHJvdG9jb2xfdHlwZV9mb3JfdHlwZShfdHlwZSkKKyAgICAgICAgICAgIHJldHVybiAnUmVmPCVz
PicgJSBDcHBHZW5lcmF0b3IuY3BwX3Byb3RvY29sX3R5cGVfZm9yX3R5cGUoX3R5cGUpCisKKyAg
ICAgICAgaWYgX3R5cGUucXVhbGlmaWVkX25hbWUoKSA9PSAnb2JqZWN0JzoKKyAgICAgICAgICAg
IGlmIGlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAgIHJldHVybiAnUmVmUHRyPEpTT046Ok9i
amVjdD4nCisgICAgICAgICAgICByZXR1cm4gJ1JlZjxKU09OOjpPYmplY3Q+JworCisgICAgICAg
IGlmIF90eXBlLnF1YWxpZmllZF9uYW1lKCkgPT0gJ2FycmF5JzoKKyAgICAgICAgICAgIGlmIGlz
X29wdGlvbmFsOgorICAgICAgICAgICAgICAgIHJldHVybiAnUmVmUHRyPEpTT046OkFycmF5PicK
KyAgICAgICAgICAgIHJldHVybiAnUmVmPEpTT046OkFycmF5PicKKworICAgICAgICBpZiBfdHlw
ZS5xdWFsaWZpZWRfbmFtZSgpID09ICdhbnknOgorICAgICAgICAgICAgaWYgaXNfb3B0aW9uYWw6
CisgICAgICAgICAgICAgICAgcmV0dXJuICdSZWZQdHI8SlNPTjo6VmFsdWU+JworICAgICAgICAg
ICAgcmV0dXJuICdSZWY8SlNPTjo6VmFsdWU+JworCisgICAgICAgIGlmIF90eXBlLnF1YWxpZmll
ZF9uYW1lKCkgPT0gJ3N0cmluZyc6CisgICAgICAgICAgICByZXR1cm4gQ3BwR2VuZXJhdG9yLmNw
cF9uYW1lX2Zvcl9wcmltaXRpdmVfdHlwZShfdHlwZSkKKwogICAgICAgICBpZiBpc2luc3RhbmNl
KF90eXBlLCBFbnVtVHlwZSk6Ci0gICAgICAgICAgICBpZiBfdHlwZS5pc19hbm9ueW1vdXM6Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuICclc0JhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6JXMnICUg
KF90eXBlLnR5cGVfZG9tYWluKCkuZG9tYWluX25hbWUsIHVjZmlyc3QocGFyYW1ldGVyLnBhcmFt
ZXRlcl9uYW1lKSkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICdJ
bnNwZWN0b3I6OlByb3RvY29sOjolczo6JXMnICUgKF90eXBlLnR5cGVfZG9tYWluKCkuZG9tYWlu
X25hbWUsIF90eXBlLnJhd19uYW1lKCkpCisgICAgICAgICAgICBjcHBfbmFtZSA9ICdQcm90b2Nv
bDo6JXM6OiVzJyAlIChfdHlwZS50eXBlX2RvbWFpbigpLmRvbWFpbl9uYW1lLCBfdHlwZS5yYXdf
bmFtZSgpKQorICAgICAgICBlbGlmIGlzaW5zdGFuY2UoX3R5cGUsIFByaW1pdGl2ZVR5cGUpOgor
ICAgICAgICAgICAgY3BwX25hbWUgPSBDcHBHZW5lcmF0b3IuY3BwX25hbWVfZm9yX3ByaW1pdGl2
ZV90eXBlKF90eXBlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJv
cigidW5rbm93biB0eXBlIikKKworICAgICAgICBpZiBpc19vcHRpb25hbDoKKyAgICAgICAgICAg
IGNwcF9uYW1lID0gJ09wdGlvbmFsPCVzPicgJSBjcHBfbmFtZQorICAgICAgICByZXR1cm4gY3Bw
X25hbWUKIAogICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgY3BwX2Fzc2VydGlvbl9tZXRob2Rf
Zm9yX3R5cGVfbWVtYmVyKHR5cGVfbWVtYmVyLCBvYmplY3RfZGVjbGFyYXRpb24pOgorICAgIGRl
ZiBjcHBfdHlwZV9mb3JfY29tbWFuZF9yZXR1cm5fYXJndW1lbnQoX3R5cGUsIGlzX29wdGlvbmFs
KToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgQWxpYXNlZFR5cGUpOgorICAgICAgICAg
ICAgX3R5cGUgPSBfdHlwZS5hbGlhc2VkX3R5cGUKKyAgICAgICAgICAgICMgRmFsbHRocm91Z2gu
CiAKLSAgICAgICAgZGVmIGFzc2VydGlvbl9tZXRob2RfZm9yX3R5cGUoX3R5cGUpOgotICAgICAg
ICAgICAgcmV0dXJuICdCaW5kaW5nVHJhaXRzPCVzPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5
cGUnICUgQ3BwR2VuZXJhdG9yLmNwcF9wcm90b2NvbF90eXBlX2Zvcl90eXBlKF90eXBlKQorICAg
ICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBFbnVtVHlwZSkgYW5kIF90eXBlLmlzX2Fub255bW91
czoKKyAgICAgICAgICAgIF90eXBlID0gX3R5cGUucHJpbWl0aXZlX3R5cGUKKyAgICAgICAgICAg
ICMgRmFsbHRocm91Z2guCiAKLSAgICAgICAgaWYgaXNpbnN0YW5jZSh0eXBlX21lbWJlci50eXBl
LCBBbGlhc2VkVHlwZSk6Ci0gICAgICAgICAgICByZXR1cm4gYXNzZXJ0aW9uX21ldGhvZF9mb3Jf
dHlwZSh0eXBlX21lbWJlci50eXBlLmFsaWFzZWRfdHlwZSkKLSAgICAgICAgaWYgaXNpbnN0YW5j
ZSh0eXBlX21lbWJlci50eXBlLCBFbnVtVHlwZSkgYW5kIHR5cGVfbWVtYmVyLnR5cGUuaXNfYW5v
bnltb3VzOgotICAgICAgICAgICAgcmV0dXJuICdCaW5kaW5nVHJhaXRzPCVzPjo6YXNzZXJ0VmFs
dWVIYXNFeHBlY3RlZFR5cGUnICUgQ3BwR2VuZXJhdG9yLmNwcF9wcm90b2NvbF90eXBlX2Zvcl90
eXBlX21lbWJlcih0eXBlX21lbWJlciwgb2JqZWN0X2RlY2xhcmF0aW9uKQorICAgICAgICBpZiBp
c2luc3RhbmNlKF90eXBlLCAoQXJyYXlUeXBlLCBPYmplY3RUeXBlKSk6CisgICAgICAgICAgICBp
ZiBpc19vcHRpb25hbDoKKyAgICAgICAgICAgICAgICByZXR1cm4gJ1JlZlB0cjwlcz4mJicgJSBD
cHBHZW5lcmF0b3IuY3BwX3Byb3RvY29sX3R5cGVfZm9yX3R5cGUoX3R5cGUpCisgICAgICAgICAg
ICByZXR1cm4gJ1JlZjwlcz4mJicgJSBDcHBHZW5lcmF0b3IuY3BwX3Byb3RvY29sX3R5cGVfZm9y
X3R5cGUoX3R5cGUpCiAKLSAgICAgICAgcmV0dXJuIGFzc2VydGlvbl9tZXRob2RfZm9yX3R5cGUo
dHlwZV9tZW1iZXIudHlwZSkKKyAgICAgICAgaWYgX3R5cGUucXVhbGlmaWVkX25hbWUoKSA9PSAn
b2JqZWN0JzoKKyAgICAgICAgICAgIGlmIGlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAgIHJl
dHVybiAnUmVmUHRyPEpTT046Ok9iamVjdD4mJicKKyAgICAgICAgICAgIHJldHVybiAnUmVmPEpT
T046Ok9iamVjdD4mJicKKworICAgICAgICBpZiBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpID09ICdh
cnJheSc6CisgICAgICAgICAgICBpZiBpc19vcHRpb25hbDoKKyAgICAgICAgICAgICAgICByZXR1
cm4gJ1JlZlB0cjxKU09OOjpBcnJheT4mJicKKyAgICAgICAgICAgIHJldHVybiAnUmVmPEpTT046
OkFycmF5PiYmJworCisgICAgICAgIGlmIF90eXBlLnF1YWxpZmllZF9uYW1lKCkgPT0gJ2FueSc6
CisgICAgICAgICAgICBpZiBpc19vcHRpb25hbDoKKyAgICAgICAgICAgICAgICByZXR1cm4gJ1Jl
ZlB0cjxKU09OOjpWYWx1ZT4mJicKKyAgICAgICAgICAgIHJldHVybiAnUmVmPEpTT046OlZhbHVl
PiYmJworCisgICAgICAgIGlmIF90eXBlLnF1YWxpZmllZF9uYW1lKCkgPT0gJ3N0cmluZyc6Cisg
ICAgICAgICAgICByZXR1cm4gJ2NvbnN0ICVzJicgJSBDcHBHZW5lcmF0b3IuY3BwX25hbWVfZm9y
X3ByaW1pdGl2ZV90eXBlKF90eXBlKQorCisgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEVu
dW1UeXBlKToKKyAgICAgICAgICAgIGNwcF9uYW1lID0gJ1Byb3RvY29sOjolczo6JXMnICUgKF90
eXBlLnR5cGVfZG9tYWluKCkuZG9tYWluX25hbWUsIF90eXBlLnJhd19uYW1lKCkpCisgICAgICAg
IGVsaWYgaXNpbnN0YW5jZShfdHlwZSwgUHJpbWl0aXZlVHlwZSk6CisgICAgICAgICAgICBjcHBf
bmFtZSA9IENwcEdlbmVyYXRvci5jcHBfbmFtZV9mb3JfcHJpbWl0aXZlX3R5cGUoX3R5cGUpCisg
ICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJ1bmtub3duIHR5cGUi
KQorCisgICAgICAgIGlmIGlzX29wdGlvbmFsOgorICAgICAgICAgICAgY3BwX25hbWUgPSAnT3B0
aW9uYWw8JXM+JiYnICUgY3BwX25hbWUKKyAgICAgICAgcmV0dXJuIGNwcF9uYW1lCisKKyAgICBA
c3RhdGljbWV0aG9kCisgICAgZGVmIGNwcF90eXBlX2Zvcl9ldmVudF9wYXJhbWV0ZXIoX3R5cGUs
IGlzX29wdGlvbmFsKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgQWxpYXNlZFR5cGUp
OgorICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5hbGlhc2VkX3R5cGUKKyAgICAgICAgICAgICMg
RmFsbHRocm91Z2guCisKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgRW51bVR5cGUpIGFu
ZCBfdHlwZS5pc19hbm9ueW1vdXM6CisgICAgICAgICAgICBfdHlwZSA9IF90eXBlLnByaW1pdGl2
ZV90eXBlCisgICAgICAgICAgICAjIEZhbGx0aHJvdWdoLgorCisgICAgICAgIGlmIGlzaW5zdGFu
Y2UoX3R5cGUsIChBcnJheVR5cGUsIE9iamVjdFR5cGUpKToKKyAgICAgICAgICAgIGlmIGlzX29w
dGlvbmFsOgorICAgICAgICAgICAgICAgIHJldHVybiAnUmVmUHRyPCVzPiYmJyAlIENwcEdlbmVy
YXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZShfdHlwZSkKKyAgICAgICAgICAgIHJldHVy
biAnUmVmPCVzPiYmJyAlIENwcEdlbmVyYXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZShf
dHlwZSkKKworICAgICAgICBpZiBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpID09ICdvYmplY3QnOgor
ICAgICAgICAgICAgaWYgaXNfb3B0aW9uYWw6CisgICAgICAgICAgICAgICAgcmV0dXJuICdSZWZQ
dHI8SlNPTjo6T2JqZWN0PiYmJworICAgICAgICAgICAgcmV0dXJuICdSZWY8SlNPTjo6T2JqZWN0
PiYmJworCisgICAgICAgIGlmIF90eXBlLnF1YWxpZmllZF9uYW1lKCkgPT0gJ2FycmF5JzoKKyAg
ICAgICAgICAgIGlmIGlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAgIHJldHVybiAnUmVmUHRy
PEpTT046OkFycmF5PiYmJworICAgICAgICAgICAgcmV0dXJuICdSZWY8SlNPTjo6QXJyYXk+JiYn
CisKKyAgICAgICAgaWYgX3R5cGUucXVhbGlmaWVkX25hbWUoKSA9PSAnYW55JzoKKyAgICAgICAg
ICAgIGlmIGlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAgIHJldHVybiAnUmVmUHRyPEpTT046
OlZhbHVlPiYmJworICAgICAgICAgICAgcmV0dXJuICdSZWY8SlNPTjo6VmFsdWU+JiYnCisKKyAg
ICAgICAgaWYgX3R5cGUucXVhbGlmaWVkX25hbWUoKSA9PSAnc3RyaW5nJzoKKyAgICAgICAgICAg
IHJldHVybiAnY29uc3QgJXMmJyAlIENwcEdlbmVyYXRvci5jcHBfbmFtZV9mb3JfcHJpbWl0aXZl
X3R5cGUoX3R5cGUpCisKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgRW51bVR5cGUpOgor
ICAgICAgICAgICAgY3BwX25hbWUgPSAnUHJvdG9jb2w6OiVzOjolcycgJSAoX3R5cGUudHlwZV9k
b21haW4oKS5kb21haW5fbmFtZSwgX3R5cGUucmF3X25hbWUoKSkKKyAgICAgICAgZWxpZiBpc2lu
c3RhbmNlKF90eXBlLCBQcmltaXRpdmVUeXBlKToKKyAgICAgICAgICAgIGNwcF9uYW1lID0gQ3Bw
R2VuZXJhdG9yLmNwcF9uYW1lX2Zvcl9wcmltaXRpdmVfdHlwZShfdHlwZSkKKyAgICAgICAgZWxz
ZToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInVua25vd24gdHlwZSIpCisKKyAgICAg
ICAgaWYgaXNfb3B0aW9uYWw6CisgICAgICAgICAgICBjcHBfbmFtZSA9ICdPcHRpb25hbDwlcz4m
JicgJSBjcHBfbmFtZQorICAgICAgICByZXR1cm4gY3BwX25hbWUKKworICAgIEBzdGF0aWNtZXRo
b2QKKyAgICBkZWYgY3BwX3R5cGVfZm9yX2VudW0oZW51bV90eXBlLCBuYW1lKToKKyAgICAgICAg
aWYgZW51bV90eXBlLmlzX2Fub255bW91czoKKyAgICAgICAgICAgIHJldHVybiAnUHJvdG9jb2w6
OiVzOjolcycgJSAoZW51bV90eXBlLnR5cGVfZG9tYWluKCkuZG9tYWluX25hbWUsIHVjZmlyc3Qo
bmFtZSkpCisgICAgICAgIHJldHVybiAnUHJvdG9jb2w6OiVzOjolcycgJSAoZW51bV90eXBlLnR5
cGVfZG9tYWluKCkuZG9tYWluX25hbWUsIGVudW1fdHlwZS5yYXdfbmFtZSgpKQogCiAgICAgQHN0
YXRpY21ldGhvZAogICAgIGRlZiBjcHBfbmFtZV9mb3JfcHJpbWl0aXZlX3R5cGUoX3R5cGUpOgog
ICAgICAgICByZXR1cm4gX1BSSU1JVElWRV9UT19DUFBfTkFNRV9NQVAuZ2V0KF90eXBlLnJhd19u
YW1lKCkpCiAKLSAgICAjIERlY2lkZSB3aGV0aGVyIGNlcnRhaW4gaGVscGVycyBhcmUgbmVjZXNz
YXJ5IGluIGEgc2l0dWF0aW9uLgogICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgc2hvdWxkX3Vz
ZV93cmFwcGVyX2Zvcl9yZXR1cm5fdHlwZShfdHlwZSk6Ci0gICAgICAgIHJldHVybiBub3QgaXNp
bnN0YW5jZShfdHlwZSwgKEFycmF5VHlwZSwgT2JqZWN0VHlwZSkpCisgICAgZGVmIHNob3VsZF9t
b3ZlX2FyZ3VtZW50KF90eXBlLCBpc19vcHRpb25hbCk6CisgICAgICAgIGlmIGlzaW5zdGFuY2Uo
X3R5cGUsIEFsaWFzZWRUeXBlKToKKyAgICAgICAgICAgIF90eXBlID0gX3R5cGUuYWxpYXNlZF90
eXBlCisgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKToKKyAgICAgICAgICAg
IF90eXBlID0gX3R5cGUucHJpbWl0aXZlX3R5cGUKKworICAgICAgICBpZiBfdHlwZS5yYXdfbmFt
ZSgpID09ICdzdHJpbmcnOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHJldHVy
biBpc19vcHRpb25hbCA9PSAoX3R5cGUucmF3X25hbWUoKSBpbiBbJ2Jvb2xlYW4nLCAnaW50ZWdl
cicsICdudW1iZXInXSkKIAogICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgc2hvdWxkX3VzZV9y
ZWZlcmVuY2VzX2Zvcl90eXBlKF90eXBlKToKLSAgICAgICAgcmV0dXJuIGlzaW5zdGFuY2UoX3R5
cGUsIChBcnJheVR5cGUsIE9iamVjdFR5cGUpKSBvciAoaXNpbnN0YW5jZShfdHlwZSwgKFByaW1p
dGl2ZVR5cGUpKSBhbmQgX3R5cGUucXVhbGlmaWVkX25hbWUoKSBpbiBbImFueSIsICJvYmplY3Qi
XSkKKyAgICBkZWYgc2hvdWxkX3JlbGVhc2VfYXJndW1lbnQoX3R5cGUsIGlzX29wdGlvbmFsKToK
KyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgQWxpYXNlZFR5cGUpOgorICAgICAgICAgICAg
X3R5cGUgPSBfdHlwZS5hbGlhc2VkX3R5cGUKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwg
RW51bVR5cGUpOgorICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5wcmltaXRpdmVfdHlwZQorCisg
ICAgICAgIGlmIF90eXBlLnJhd19uYW1lKCkgPT0gJ3N0cmluZyc6CisgICAgICAgICAgICByZXR1
cm4gRmFsc2UKKyAgICAgICAgaWYgX3R5cGUucmF3X25hbWUoKSBpbiBbJ2Jvb2xlYW4nLCAnaW50
ZWdlcicsICdudW1iZXInXToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICByZXR1
cm4gaXNfb3B0aW9uYWwKIAogICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgc2hvdWxkX3Bhc3Nf
YnlfY29weV9mb3JfcmV0dXJuX3R5cGUoX3R5cGUpOgotICAgICAgICByZXR1cm4gaXNpbnN0YW5j
ZShfdHlwZSwgKEFycmF5VHlwZSwgT2JqZWN0VHlwZSkpIG9yIChpc2luc3RhbmNlKF90eXBlLCAo
UHJpbWl0aXZlVHlwZSkpIGFuZCBfdHlwZS5xdWFsaWZpZWRfbmFtZSgpID09ICJvYmplY3QiKQor
ICAgIGRlZiBzaG91bGRfZGVyZWZlcmVuY2VfYXJndW1lbnQoX3R5cGUsIGlzX29wdGlvbmFsKToK
KyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgQWxpYXNlZFR5cGUpOgorICAgICAgICAgICAg
X3R5cGUgPSBfdHlwZS5hbGlhc2VkX3R5cGUKKyAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwg
RW51bVR5cGUpOgorICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5wcmltaXRpdmVfdHlwZQorCisg
ICAgICAgIGlmIF90eXBlLnJhd19uYW1lKCkgPT0gJ3N0cmluZyc6CisgICAgICAgICAgICByZXR1
cm4gRmFsc2UKKyAgICAgICAgaWYgX3R5cGUucmF3X25hbWUoKSBub3QgaW4gWydib29sZWFuJywg
J2ludGVnZXInLCAnbnVtYmVyJ106CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAg
cmV0dXJuIGlzX29wdGlvbmFsCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvY29kZWdlbi9jcHBfZ2VuZXJhdG9yX3RlbXBsYXRlcy5weSBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2NwcF9nZW5lcmF0b3Jf
dGVtcGxhdGVzLnB5CmluZGV4IDA4MmJlMzNmMTVkZTI1YmU4ODk1N2NiMTQyMjkzNTIwMzZlZTIy
Y2YuLjFiZTliOGEzMjY4ZTgxYzk0ZTliM2U1MDNiNmEyNmIwOGU2MDEyYjcgMTAwNzU1Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2NwcF9nZW5l
cmF0b3JfdGVtcGxhdGVzLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy9jb2RlZ2VuL2NwcF9nZW5lcmF0b3JfdGVtcGxhdGVzLnB5CkBAIC05NSw3ICs5NSw3
IEBAIHByb3RlY3RlZDoKICAgICAiIiIke2NsYXNzQW5kRXhwb3J0TWFjcm99ICR7ZG9tYWluTmFt
ZX1CYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5kRGlz
cGF0Y2hlciB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjwke2RvbWFpbk5hbWV9QmFja2VuZERp
c3BhdGNoZXI+IGNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYsICR7ZG9tYWluTmFtZX1CYWNrZW5k
RGlzcGF0Y2hlckhhbmRsZXIqKTsKLSAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBj
b25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKSBmaW5hbDsK
KyAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcHJvdG9jb2xfcmVxdWVzdElkLCBjb25zdCBTdHJpbmcm
IHByb3RvY29sX21ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9tZXNzYWdlKSBm
aW5hbDsKICR7Y29tbWFuZERlY2xhcmF0aW9uc30KIHByaXZhdGU6CiAgICAgJHtkb21haW5OYW1l
fUJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiwgJHtkb21haW5OYW1lfUJhY2tl
bmREaXNwYXRjaGVySGFuZGxlciopOwpAQCAtMTE0LDMyICsxMTQsMzAgQEAgcHJpdmF0ZToKICAg
ICAiIiIgICAgJHtjbGFzc0FuZEV4cG9ydE1hY3JvfSAke2NhbGxiYWNrTmFtZX0gOiBwdWJsaWMg
QmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZSB7CiAgICAgcHVibGljOgogICAgICAgICAk
e2NhbGxiYWNrTmFtZX0oUmVmPEJhY2tlbmREaXNwYXRjaGVyPiYmLCBpbnQgaWQpOwotICAgICAg
ICB2b2lkIHNlbmRTdWNjZXNzKCR7b3V0UGFyYW1ldGVyc30pOworICAgICAgICB2b2lkIHNlbmRT
dWNjZXNzKCR7cmV0dXJuc30pOwogICAgIH07Ci0gICAgdmlydHVhbCB2b2lkICR7Y29tbWFuZE5h
bWV9KCR7aW5QYXJhbWV0ZXJzfSkgPSAwOyIiIikKKyAgICB2aXJ0dWFsIHZvaWQgJHtjb21tYW5k
TmFtZX0oJHtwYXJhbWV0ZXJzfSkgPSAwOyIiIikKIAogICAgIEJhY2tlbmREaXNwYXRjaGVySW1w
bGVtZW50YXRpb25TbWFsbFN3aXRjaCA9ICgKLSAgICAiIiJ2b2lkICR7ZG9tYWluTmFtZX1CYWNr
ZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0
aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpCisgICAgIiIidm9pZCAke2RvbWFpbk5h
bWV9QmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcHJvdG9jb2xfcmVxdWVzdElkLCBj
b25zdCBTdHJpbmcmIHByb3RvY29sX21ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBwcm90b2Nv
bF9tZXNzYWdlKQogewogICAgIFJlZjwke2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXI+IHBy
b3RlY3QoKnRoaXMpOwogCi0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVyczsKLSAg
ICBtZXNzYWdlLT5nZXRPYmplY3QoInBhcmFtcyJfcywgcGFyYW1ldGVycyk7CisgICAgYXV0byBw
cm90b2NvbF9wYXJhbWV0ZXJzID0gcHJvdG9jb2xfbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJhbXMi
X3MpOwogCiAke2Rpc3BhdGNoQ2FzZXN9CiAKLSAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBv
cnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIicke2Rv
bWFpbk5hbWV9LiIgKyBtZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7CisgICAgbV9iYWNrZW5k
RGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9k
Tm90Rm91bmQsICInJHtkb21haW5OYW1lfS4iICsgcHJvdG9jb2xfbWV0aG9kICsgIicgd2FzIG5v
dCBmb3VuZCIpOwogfSIiIikKIAogICAgIEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25M
YXJnZVN3aXRjaCA9ICgKLSIiInZvaWQgJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyOjpk
aXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpP
YmplY3Q+JiYgbWVzc2FnZSkKKyIiInZvaWQgJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVy
OjpkaXNwYXRjaChsb25nIHByb3RvY29sX3JlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBwcm90b2Nv
bF9tZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfbWVzc2FnZSkKIHsKICAgICBS
ZWY8JHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKIAotICAg
IFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnM7Ci0gICAgbWVzc2FnZS0+Z2V0T2JqZWN0
KCJwYXJhbXMiX3MsIHBhcmFtZXRlcnMpOworICAgIGF1dG8gcHJvdG9jb2xfcGFyYW1ldGVycyA9
IHByb3RvY29sX21lc3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9zKTsKIAotICAgIHVzaW5nIENh
bGxIYW5kbGVyID0gdm9pZCAoJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyOjoqKShsb25n
IHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKTsKKyAgICB1c2luZyBD
YWxsSGFuZGxlciA9IHZvaWQgKCR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcjo6KikobG9u
ZyBwcm90b2NvbF9yZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfbWVz
c2FnZSk7CiAgICAgdXNpbmcgRGlzcGF0Y2hNYXAgPSBIYXNoTWFwPFN0cmluZywgQ2FsbEhhbmRs
ZXI+OwogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxEaXNwYXRjaE1hcD4gZGlzcGF0Y2hNYXA7
CiAgICAgaWYgKGRpc3BhdGNoTWFwLmdldCgpLmlzRW1wdHkoKSkgewpAQCAtMTU0LDEzICsxNTIs
MTMgQEAgJHtkaXNwYXRjaENhc2VzfQogICAgICAgICAgICAgZGlzcGF0Y2hNYXAuZ2V0KCkuYWRk
KGNvbW1hbmRzW2ldLm5hbWUsIGNvbW1hbmRzW2ldLmhhbmRsZXIpOwogICAgIH0KIAotICAgIGF1
dG8gZmluZFJlc3VsdCA9IGRpc3BhdGNoTWFwLmdldCgpLmZpbmQobWV0aG9kKTsKKyAgICBhdXRv
IGZpbmRSZXN1bHQgPSBkaXNwYXRjaE1hcC5nZXQoKS5maW5kKHByb3RvY29sX21ldGhvZCk7CiAg
ICAgaWYgKGZpbmRSZXN1bHQgPT0gZGlzcGF0Y2hNYXAuZ2V0KCkuZW5kKCkpIHsKLSAgICAgICAg
bV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hl
cjo6TWV0aG9kTm90Rm91bmQsICInJHtkb21haW5OYW1lfS4iICsgbWV0aG9kICsgIicgd2FzIG5v
dCBmb3VuZCIpOworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVy
cm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIicke2RvbWFpbk5hbWV9LiIg
KyBwcm90b2NvbF9tZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICAoKCp0aGlzKS4qZmluZFJlc3VsdC0+dmFsdWUpKHJlcXVlc3RJZCwgV1RG
TW92ZShwYXJhbWV0ZXJzKSk7CisgICAgKCgqdGhpcykuKmZpbmRSZXN1bHQtPnZhbHVlKShwcm90
b2NvbF9yZXF1ZXN0SWQsIFdURk1vdmUocHJvdG9jb2xfcGFyYW1ldGVycykpOwogfSIiIikKIAog
ICAgIEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25Eb21haW5Db25zdHJ1Y3RvciA9ICgK
QEAgLTE3Nyw3ICsxNzUsNyBAQCAke2RvbWFpbk5hbWV9QmFja2VuZERpc3BhdGNoZXI6OiR7ZG9t
YWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlcgogfSIiIikKIAogICAg
IEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25QcmVwYXJlQ29tbWFuZEFyZ3VtZW50cyA9
ICgKLSIiIiR7aW5QYXJhbWV0ZXJEZWNsYXJhdGlvbnN9CisiIiIke3BhcmFtZXRlckRlY2xhcmF0
aW9uc30KICAgICBpZiAobV9iYWNrZW5kRGlzcGF0Y2hlci0+aGFzUHJvdG9jb2xFcnJvcnMoKSkg
ewogICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tl
bmREaXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCAiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kIFwn
JHtkb21haW5OYW1lfS4ke2NvbW1hbmROYW1lfVwnIGNhbid0IGJlIHByb2Nlc3NlZCJfcyk7CiAg
ICAgICAgIHJldHVybjsKQEAgLTE4NywxMSArMTg1LDExIEBAICR7ZG9tYWluTmFtZX1CYWNrZW5k
RGlzcGF0Y2hlcjo6JHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRj
aGVyCiAgICAgQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkFzeW5jQ29tbWFuZCA9ICgK
ICIiIiR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OiR7Y2FsbGJhY2tOYW1l
fTo6JHtjYWxsYmFja05hbWV9KFJlZjxCYWNrZW5kRGlzcGF0Y2hlcj4mJiBiYWNrZW5kRGlzcGF0
Y2hlciwgaW50IGlkKSA6IEJhY2tlbmREaXNwYXRjaGVyOjpDYWxsYmFja0Jhc2UoV1RGTW92ZShi
YWNrZW5kRGlzcGF0Y2hlciksIGlkKSB7IH0KIAotdm9pZCAke2RvbWFpbk5hbWV9QmFja2VuZERp
c3BhdGNoZXJIYW5kbGVyOjoke2NhbGxiYWNrTmFtZX06OnNlbmRTdWNjZXNzKCR7Zm9ybWFsUGFy
YW1ldGVyc30pCit2b2lkICR7ZG9tYWluTmFtZX1CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OiR7
Y2FsbGJhY2tOYW1lfTo6c2VuZFN1Y2Nlc3MoJHtjYWxsYmFja1BhcmFtZXRlcnN9KQogewotICAg
IFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsK
LSR7b3V0UGFyYW1ldGVyQXNzaWdubWVudHN9Ci0gICAgQ2FsbGJhY2tCYXNlOjpzZW5kU3VjY2Vz
cyhXVEZNb3ZlKGpzb25NZXNzYWdlKSk7CisgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9
IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ciske3JldHVybkFzc2lnbm1lbnRzfQorICAgIENhbGxi
YWNrQmFzZTo6c2VuZFN1Y2Nlc3MoV1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSkpOwogfSIi
IikKIAogICAgIEZyb250ZW5kRGlzcGF0Y2hlckRvbWFpbkRpc3BhdGNoZXJEZWNsYXJhdGlvbiA9
ICgKQEAgLTI0NiwxMyArMjQ0LDExIEBAICR7Y29uc3RydWN0b3JFeGFtcGxlfQogICAgIH0iIiIp
CiAKICAgICBQcm90b2NvbE9iamVjdFJ1bnRpbWVDYXN0ID0gKAotIiIiUmVmUHRyPCR7b2JqZWN0
VHlwZX0+IEJpbmRpbmdUcmFpdHM8JHtvYmplY3RUeXBlfT46OnJ1bnRpbWVDYXN0KFJlZlB0cjxK
U09OOjpWYWx1ZT4mJiB2YWx1ZSkKKyIiIlJlZjwke29iamVjdFR5cGV9PiBCaW5kaW5nVHJhaXRz
PCR7b2JqZWN0VHlwZX0+OjpydW50aW1lQ2FzdChSZWY8SlNPTjo6VmFsdWU+JiYgdmFsdWUpCiB7
Ci0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcmVzdWx0OwotICAgIGJvb2wgY2FzdFN1Y2NlZWRl
ZCA9IHZhbHVlLT5hc09iamVjdChyZXN1bHQpOwotICAgIEFTU0VSVF9VTlVTRUQoY2FzdFN1Y2Nl
ZWRlZCwgY2FzdFN1Y2NlZWRlZCk7CisgICAgYXV0byByZXN1bHQgPSB2YWx1ZS0+YXNPYmplY3Qo
KTsKICAgICBCaW5kaW5nVHJhaXRzPCR7b2JqZWN0VHlwZX0+Ojphc3NlcnRWYWx1ZUhhc0V4cGVj
dGVkVHlwZShyZXN1bHQuZ2V0KCkpOwogICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZigke29iamVj
dFR5cGV9KSA9PSBzaXplb2YoSlNPTjo6T2JqZWN0QmFzZSksIHR5cGVfY2FzdF9wcm9ibGVtKTsK
LSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8JHtvYmplY3RUeXBlfSo+KHN0YXRpY19jYXN0PEpTT046
Ok9iamVjdEJhc2UqPihyZXN1bHQuZ2V0KCkpKTsKKyAgICByZXR1cm4gc3RhdGljX3JlZmVyZW5j
ZV9jYXN0PCR7b2JqZWN0VHlwZX0+KHN0YXRpY19yZWZlcmVuY2VfY2FzdDxKU09OOjpPYmplY3RC
YXNlPihyZXN1bHQucmVsZWFzZU5vbk51bGwoKSkpOwogfQogIiIiKQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3Bw
X2FsdGVybmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5IGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2FsdGVybmF0ZV9i
YWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5CmluZGV4IGUxYTY2MWJhMzc5Y2RlYTQwNjRjNmY3
N2M0ZWZjYjExNjJhY2VmYzAuLjFlYjFjNGZkMDQyMTk5ZDNhMmE2MDFhYTBkZGMzMTFhYTMxMTEy
NGQgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9j
b2RlZ2VuL2dlbmVyYXRlX2NwcF9hbHRlcm5hdGVfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5w
eQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9n
ZW5lcmF0ZV9jcHBfYWx0ZXJuYXRlX2JhY2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkKQEAgLTMz
LDkgKzMzLDExIEBAIGZyb20gc3RyaW5nIGltcG9ydCBUZW1wbGF0ZQogdHJ5OgogICAgIGZyb20g
LmNwcF9nZW5lcmF0b3IgaW1wb3J0IENwcEdlbmVyYXRvcgogICAgIGZyb20gLmNwcF9nZW5lcmF0
b3JfdGVtcGxhdGVzIGltcG9ydCBDcHBHZW5lcmF0b3JUZW1wbGF0ZXMgYXMgQ3BwVGVtcGxhdGVz
CisgICAgZnJvbSAubW9kZWxzIGltcG9ydCBFbnVtVHlwZSwgQWxpYXNlZFR5cGUKIGV4Y2VwdCBW
YWx1ZUVycm9yOgogICAgIGZyb20gY3BwX2dlbmVyYXRvciBpbXBvcnQgQ3BwR2VuZXJhdG9yCiAg
ICAgZnJvbSBjcHBfZ2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgQ3BwR2VuZXJhdG9yVGVtcGxh
dGVzIGFzIENwcFRlbXBsYXRlcworICAgIGZyb20gbW9kZWxzIGltcG9ydCBFbnVtVHlwZSwgQWxp
YXNlZFR5cGUKIAogbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2dsb2JhbCcpCiAKQEAgLTY1LDcg
KzY3LDcgQEAgY2xhc3MgQ3BwQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0
b3IoQ3BwR2VuZXJhdG9yKToKICAgICBkZWYgX2dlbmVyYXRlX3NlY29uZGFyeV9oZWFkZXJfaW5j
bHVkZXMoc2VsZik6CiAgICAgICAgIHRhcmdldF9mcmFtZXdvcmtfbmFtZSA9IHNlbGYubW9kZWwo
KS5mcmFtZXdvcmsubmFtZQogICAgICAgICBoZWFkZXJfaW5jbHVkZXMgPSBbCi0gICAgICAgICAg
ICAoW3RhcmdldF9mcmFtZXdvcmtfbmFtZV0sICh0YXJnZXRfZnJhbWV3b3JrX25hbWUsICIlc1By
b3RvY29sVHlwZXMuaCIgJSBzZWxmLnByb3RvY29sX25hbWUoKSkpLAorICAgICAgICAgICAgKFt0
YXJnZXRfZnJhbWV3b3JrX25hbWVdLCAodGFyZ2V0X2ZyYW1ld29ya19uYW1lLCAiJXNQcm90b2Nv
bE9iamVjdHMuaCIgJSBzZWxmLnByb3RvY29sX25hbWUoKSkpLAogICAgICAgICAgICAgKFsiSmF2
YVNjcmlwdENvcmUiXSwgKCJKYXZhU2NyaXB0Q29yZSIsICJpbnNwZWN0b3IvSW5zcGVjdG9yRnJv
bnRlbmRSb3V0ZXIuaCIpKSwKICAgICAgICAgICAgIChbIkphdmFTY3JpcHRDb3JlIl0sICgiSmF2
YVNjcmlwdENvcmUiLCAiaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmgiKSks
CiAgICAgICAgIF0KQEAgLTkxLDkgKzkzLDE5IEBAIGNsYXNzIENwcEFsdGVybmF0ZUJhY2tlbmRE
aXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAKICAgICBkZWYgX2dlbmVy
YXRlX2hhbmRsZXJfZGVjbGFyYXRpb25fZm9yX2NvbW1hbmQoc2VsZiwgY29tbWFuZCk6CiAgICAg
ICAgIGxpbmVzID0gW10KLSAgICAgICAgcGFyYW1ldGVycyA9IFsnbG9uZyBjYWxsSWQnXQotICAg
ICAgICBmb3IgX3BhcmFtZXRlciBpbiBjb21tYW5kLmNhbGxfcGFyYW1ldGVyczoKLSAgICAgICAg
ICAgIHBhcmFtZXRlcnMuYXBwZW5kKCclcyBpbl8lcycgJSAoQ3BwR2VuZXJhdG9yLmNwcF90eXBl
X2Zvcl91bmNoZWNrZWRfZm9ybWFsX2luX3BhcmFtZXRlcihfcGFyYW1ldGVyKSwgX3BhcmFtZXRl
ci5wYXJhbWV0ZXJfbmFtZSkpCisgICAgICAgIHBhcmFtZXRlcnMgPSBbJ2xvbmcgcHJvdG9jb2xf
cmVxdWVzdElkJ10KKyAgICAgICAgZm9yIHBhcmFtZXRlciBpbiBjb21tYW5kLmNhbGxfcGFyYW1l
dGVyczoKKyAgICAgICAgICAgIHBhcmFtZXRlcl90eXBlID0gcGFyYW1ldGVyLnR5cGUKKyAgICAg
ICAgICAgIGlmIGlzaW5zdGFuY2UocGFyYW1ldGVyX3R5cGUsIEFsaWFzZWRUeXBlKToKKyAgICAg
ICAgICAgICAgICBwYXJhbWV0ZXJfdHlwZSA9IHBhcmFtZXRlcl90eXBlLmFsaWFzZWRfdHlwZQor
ICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShwYXJhbWV0ZXJfdHlwZSwgRW51bVR5cGUpOgorICAg
ICAgICAgICAgICAgIHBhcmFtZXRlcl90eXBlID0gcGFyYW1ldGVyX3R5cGUucHJpbWl0aXZlX3R5
cGUKKworICAgICAgICAgICAgcGFyYW1ldGVyX25hbWUgPSBwYXJhbWV0ZXIucGFyYW1ldGVyX25h
bWUKKyAgICAgICAgICAgIGlmIHBhcmFtZXRlci5pc19vcHRpb25hbDoKKyAgICAgICAgICAgICAg
ICBwYXJhbWV0ZXJfbmFtZSA9ICdvcHRfJyArIHBhcmFtZXRlcl9uYW1lCisKKyAgICAgICAgICAg
IHBhcmFtZXRlcnMuYXBwZW5kKCclcyAlcycgJSAoQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl9j
b21tYW5kX3BhcmFtZXRlcihwYXJhbWV0ZXJfdHlwZSwgcGFyYW1ldGVyLmlzX29wdGlvbmFsKSwg
cGFyYW1ldGVyX25hbWUpKQogCiAgICAgICAgIGNvbW1hbmRfYXJncyA9IHsKICAgICAgICAgICAg
ICdjb21tYW5kTmFtZSc6IGNvbW1hbmQuY29tbWFuZF9uYW1lLApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2Jh
Y2tlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRl
ci5weQppbmRleCAxMGQ4ZjE0YmQ1ZmViZWI4YTFiMDZiMDE3Njc1YTE0M2E4ZDRmNzM4Li4wNmQ3
YTUzZGQwMmRhNDllYWEzNjUzMzI0MTVjMGUxOTMxZTRmODc3IDEwMDc1NQotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfYmFj
a2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRjaGVyX2hl
YWRlci5weQpAQCAtNTUsMTAgKzU1LDkgQEAgY2xhc3MgQ3BwQmFja2VuZERpc3BhdGNoZXJIZWFk
ZXJHZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAgICAgcmV0dXJuIFtkb21haW4gZm9yIGRv
bWFpbiBpbiBHZW5lcmF0b3IuZG9tYWluc190b19nZW5lcmF0ZShzZWxmKSBpZiBsZW4oc2VsZi5j
b21tYW5kc19mb3JfZG9tYWluKGRvbWFpbikpID4gMF0KIAogICAgIGRlZiBnZW5lcmF0ZV9vdXRw
dXQoc2VsZik6Ci0gICAgICAgIHR5cGVkZWZzID0gWygnU3RyaW5nJywgJ0Vycm9yU3RyaW5nJyld
CiAgICAgICAgIGhlYWRlcl9hcmdzID0gewogICAgICAgICAgICAgJ2luY2x1ZGVzJzogc2VsZi5f
Z2VuZXJhdGVfc2Vjb25kYXJ5X2hlYWRlcl9pbmNsdWRlcygpLAotICAgICAgICAgICAgJ3R5cGVk
ZWZzJzogJ1xuJy5qb2luKFsndHlwZWRlZiAlcyAlczsnICUgdHlwZWRlZiBmb3IgdHlwZWRlZiBp
biB0eXBlZGVmc10pLAorICAgICAgICAgICAgJ3R5cGVkZWZzJzogJycsCiAgICAgICAgIH0KIAog
ICAgICAgICBkb21haW5zID0gc2VsZi5kb21haW5zX3RvX2dlbmVyYXRlKCkKQEAgLTc5LDkgKzc4
LDExIEBAIGNsYXNzIENwcEJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJhdG9yKENwcEdlbmVy
YXRvcik6CiAgICAgICAgIGhlYWRlcl9pbmNsdWRlcyA9IFsKICAgICAgICAgICAgIChbIkphdmFT
Y3JpcHRDb3JlIiwgIldlYktpdCJdLCAoc2VsZi5tb2RlbCgpLmZyYW1ld29yay5uYW1lLCAiJXNQ
cm90b2NvbE9iamVjdHMuaCIgJSBzZWxmLnByb3RvY29sX25hbWUoKSkpLAogICAgICAgICAgICAg
KFsiSmF2YVNjcmlwdENvcmUiLCAiV2ViS2l0Il0sICgiSmF2YVNjcmlwdENvcmUiLCAiaW5zcGVj
dG9yL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmgiKSksCi0gICAgICAgICAgICAoWyJKYXZh
U2NyaXB0Q29yZSIsICJXZWJLaXQiXSwgKCJXVEYiLCAid3RmL3RleHQvV1RGU3RyaW5nLmgiKSkK
KyAgICAgICAgICAgIChbIkphdmFTY3JpcHRDb3JlIiwgIldlYktpdCJdLCAoIldURiIsICJ3dGYv
RXhwZWN0ZWQuaCIpKSwKKyAgICAgICAgICAgIChbIkphdmFTY3JpcHRDb3JlIiwgIldlYktpdCJd
LCAoIldURiIsICJ3dGYvT3B0aW9uYWwuaCIpKSwKKyAgICAgICAgICAgIChbIkphdmFTY3JpcHRD
b3JlIiwgIldlYktpdCJdLCAoIldURiIsICJ3dGYvdGV4dC9XVEZTdHJpbmcuaCIpKSwKKyAgICAg
ICAgICAgIChbIkphdmFTY3JpcHRDb3JlIiwgIldlYktpdCJdLCAoInN0ZCIsICJ0dXBsZSIpKSwK
ICAgICAgICAgXQotCiAgICAgICAgIHJldHVybiAnXG4nLmpvaW4oc2VsZi5nZW5lcmF0ZV9pbmNs
dWRlc19mcm9tX2VudHJpZXMoaGVhZGVyX2luY2x1ZGVzKSkKIAogICAgIGRlZiBfZ2VuZXJhdGVf
YWx0ZXJuYXRlX2hhbmRsZXJfZm9yd2FyZF9kZWNsYXJhdGlvbnNfZm9yX2RvbWFpbnMoc2VsZiwg
ZG9tYWlucyk6CkBAIC0xMDEsMTEgKzEwMiw5IEBAIGNsYXNzIENwcEJhY2tlbmREaXNwYXRjaGVy
SGVhZGVyR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAgIGlmIGV4cG9ydE1hY3JvIGlz
IG5vdCBOb25lOgogICAgICAgICAgICAgY2xhc3NDb21wb25lbnRzLmFwcGVuZChleHBvcnRNYWNy
bykKIAotICAgICAgICB1c2VkX2VudW1fbmFtZXMgPSBzZXQoKQotCiAgICAgICAgIGNvbW1hbmRf
ZGVjbGFyYXRpb25zID0gW10KICAgICAgICAgZm9yIGNvbW1hbmQgaW4gc2VsZi5jb21tYW5kc19m
b3JfZG9tYWluKGRvbWFpbik6Ci0gICAgICAgICAgICBjb21tYW5kX2RlY2xhcmF0aW9ucy5hcHBl
bmQoc2VsZi5fZ2VuZXJhdGVfaGFuZGxlcl9kZWNsYXJhdGlvbl9mb3JfY29tbWFuZChjb21tYW5k
LCB1c2VkX2VudW1fbmFtZXMpKQorICAgICAgICAgICAgY29tbWFuZF9kZWNsYXJhdGlvbnMuYXBw
ZW5kKHNlbGYuX2dlbmVyYXRlX2hhbmRsZXJfZGVjbGFyYXRpb25fZm9yX2NvbW1hbmQoY29tbWFu
ZCkpCiAKICAgICAgICAgaGFuZGxlcl9hcmdzID0gewogICAgICAgICAgICAgJ2NsYXNzQW5kRXhw
b3J0TWFjcm8nOiAiICIuam9pbihjbGFzc0NvbXBvbmVudHMpLApAQCAtMTE1LDY5ICsxMTQsNTYg
QEAgY2xhc3MgQ3BwQmFja2VuZERpc3BhdGNoZXJIZWFkZXJHZW5lcmF0b3IoQ3BwR2VuZXJhdG9y
KToKIAogICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihk
b21haW4uY29uZGl0aW9uLCBUZW1wbGF0ZShDcHBUZW1wbGF0ZXMuQmFja2VuZERpc3BhdGNoZXJI
ZWFkZXJEb21haW5IYW5kbGVyRGVjbGFyYXRpb24pLnN1YnN0aXR1dGUoTm9uZSwgKipoYW5kbGVy
X2FyZ3MpKQogCi0gICAgZGVmIF9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9mb3JfcGFyYW1ldGVy
KHNlbGYsIHBhcmFtZXRlciwgY29tbWFuZCk6Ci0gICAgICAgIGVudW1fYXJncyA9IHsKLSAgICAg
ICAgICAgICdwYXJhbWV0ZXJOYW1lJzogcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lLAotICAgICAg
ICAgICAgJ2NvbW1hbmROYW1lJzogY29tbWFuZC5jb21tYW5kX25hbWUKLSAgICAgICAgfQotCi0g
ICAgICAgIGxpbmVzID0gW10KLSAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgLy8gTmFtZWQgYWZ0
ZXIgcGFyYW1ldGVyIFwnJShwYXJhbWV0ZXJOYW1lKXNcJyB3aGlsZSBnZW5lcmF0aW5nIGNvbW1h
bmQvZXZlbnQgJShjb21tYW5kTmFtZSlzLicgJSBlbnVtX2FyZ3MpCi0gICAgICAgIGxpbmVzLmFw
cGVuZCgnICAgIGVudW0gY2xhc3MgJXMgeycgJSB1Y2ZpcnN0KHBhcmFtZXRlci5wYXJhbWV0ZXJf
bmFtZSkpCi0gICAgICAgIGZvciBlbnVtX3ZhbHVlIGluIHBhcmFtZXRlci50eXBlLmVudW1fdmFs
dWVzKCk6Ci0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgJXMgPSAlZCwnICUgKEdl
bmVyYXRvci5zdHlsaXplZF9uYW1lX2Zvcl9lbnVtX3ZhbHVlKGVudW1fdmFsdWUpLCBzZWxmLmVu
Y29kaW5nX2Zvcl9lbnVtX3ZhbHVlKGVudW1fdmFsdWUpKSkKLSAgICAgICAgbGluZXMuYXBwZW5k
KCcgICAgfTsgLy8gZW51bSBjbGFzcyAlcycgJSB1Y2ZpcnN0KHBhcmFtZXRlci5wYXJhbWV0ZXJf
bmFtZSkpCi0gICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCi0KLSAgICBkZWYgX2dlbmVy
YXRlX2hhbmRsZXJfZGVjbGFyYXRpb25fZm9yX2NvbW1hbmQoc2VsZiwgY29tbWFuZCwgdXNlZF9l
bnVtX25hbWVzKToKKyAgICBkZWYgX2dlbmVyYXRlX2hhbmRsZXJfZGVjbGFyYXRpb25fZm9yX2Nv
bW1hbmQoc2VsZiwgY29tbWFuZCk6CiAgICAgICAgIGlmIGNvbW1hbmQuaXNfYXN5bmM6CiAgICAg
ICAgICAgICByZXR1cm4gc2VsZi5fZ2VuZXJhdGVfYXN5bmNfaGFuZGxlcl9kZWNsYXJhdGlvbl9m
b3JfY29tbWFuZChjb21tYW5kKQogCiAgICAgICAgIGxpbmVzID0gW10KLSAgICAgICAgcGFyYW1l
dGVycyA9IFsnRXJyb3JTdHJpbmcmJ10KLSAgICAgICAgZm9yIF9wYXJhbWV0ZXIgaW4gY29tbWFu
ZC5jYWxsX3BhcmFtZXRlcnM6Ci0gICAgICAgICAgICBwYXJhbWV0ZXJfbmFtZSA9ICdpbl8nICsg
X3BhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZQotICAgICAgICAgICAgaWYgX3BhcmFtZXRlci5pc19v
cHRpb25hbDoKKworICAgICAgICBwYXJhbWV0ZXJzID0gW10KKyAgICAgICAgZm9yIHBhcmFtZXRl
ciBpbiBjb21tYW5kLmNhbGxfcGFyYW1ldGVyczoKKyAgICAgICAgICAgIHBhcmFtZXRlcl9uYW1l
ID0gcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lCisgICAgICAgICAgICBpZiBwYXJhbWV0ZXIuaXNf
b3B0aW9uYWw6CiAgICAgICAgICAgICAgICAgcGFyYW1ldGVyX25hbWUgPSAnb3B0XycgKyBwYXJh
bWV0ZXJfbmFtZQorICAgICAgICAgICAgcGFyYW1ldGVycy5hcHBlbmQoIiVzICVzIiAlIChDcHBH
ZW5lcmF0b3IuY3BwX3R5cGVfZm9yX2NvbW1hbmRfcGFyYW1ldGVyKHBhcmFtZXRlci50eXBlLCBw
YXJhbWV0ZXIuaXNfb3B0aW9uYWwpLCBwYXJhbWV0ZXJfbmFtZSkpCiAKLSAgICAgICAgICAgIHBh
cmFtZXRlcnMuYXBwZW5kKCIlcyAlcyIgJSAoQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl91bmNo
ZWNrZWRfZm9ybWFsX2luX3BhcmFtZXRlcihfcGFyYW1ldGVyKSwgcGFyYW1ldGVyX25hbWUpKQot
Ci0gICAgICAgICAgICBpZiBpc2luc3RhbmNlKF9wYXJhbWV0ZXIudHlwZSwgRW51bVR5cGUpIGFu
ZCBfcGFyYW1ldGVyLnR5cGUuaXNfYW5vbnltb3VzIGFuZCBfcGFyYW1ldGVyLnBhcmFtZXRlcl9u
YW1lIG5vdCBpbiB1c2VkX2VudW1fbmFtZXM6Ci0gICAgICAgICAgICAgICAgbGluZXMuYXBwZW5k
KHNlbGYuX2dlbmVyYXRlX2Fub255bW91c19lbnVtX2Zvcl9wYXJhbWV0ZXIoX3BhcmFtZXRlciwg
Y29tbWFuZCkpCi0gICAgICAgICAgICAgICAgdXNlZF9lbnVtX25hbWVzLmFkZChfcGFyYW1ldGVy
LnBhcmFtZXRlcl9uYW1lKQotCi0gICAgICAgIGZvciBfcGFyYW1ldGVyIGluIGNvbW1hbmQucmV0
dXJuX3BhcmFtZXRlcnM6Ci0gICAgICAgICAgICBwYXJhbWV0ZXJfbmFtZSA9ICdvdXRfJyArIF9w
YXJhbWV0ZXIucGFyYW1ldGVyX25hbWUKLSAgICAgICAgICAgIGlmIF9wYXJhbWV0ZXIuaXNfb3B0
aW9uYWw6CisgICAgICAgIHJldHVybnMgPSBbXQorICAgICAgICBmb3IgcGFyYW1ldGVyIGluIGNv
bW1hbmQucmV0dXJuX3BhcmFtZXRlcnM6CisgICAgICAgICAgICBwYXJhbWV0ZXJfbmFtZSA9IHBh
cmFtZXRlci5wYXJhbWV0ZXJfbmFtZQorICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlv
bmFsOgogICAgICAgICAgICAgICAgIHBhcmFtZXRlcl9uYW1lID0gJ29wdF8nICsgcGFyYW1ldGVy
X25hbWUKLSAgICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKCIlcyAlcyIgJSAoQ3BwR2VuZXJh
dG9yLmNwcF90eXBlX2Zvcl9mb3JtYWxfb3V0X3BhcmFtZXRlcihfcGFyYW1ldGVyKSwgcGFyYW1l
dGVyX25hbWUpKQotCi0gICAgICAgICAgICBpZiBpc2luc3RhbmNlKF9wYXJhbWV0ZXIudHlwZSwg
RW51bVR5cGUpIGFuZCBfcGFyYW1ldGVyLnR5cGUuaXNfYW5vbnltb3VzIGFuZCBfcGFyYW1ldGVy
LnBhcmFtZXRlcl9uYW1lIG5vdCBpbiB1c2VkX2VudW1fbmFtZXM6Ci0gICAgICAgICAgICAgICAg
bGluZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2Fub255bW91c19lbnVtX2Zvcl9wYXJhbWV0ZXIo
X3BhcmFtZXRlciwgY29tbWFuZCkpCi0gICAgICAgICAgICAgICAgdXNlZF9lbnVtX25hbWVzLmFk
ZChfcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKQorICAgICAgICAgICAgcmV0dXJucy5hcHBlbmQo
JyVzIC8qICVzICovJyAlIChDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX2NvbW1hbmRfcmV0dXJu
X2RlY2xhcmF0aW9uKHBhcmFtZXRlci50eXBlLCBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwpLCBwYXJh
bWV0ZXJfbmFtZSkpCiAKICAgICAgICAgY29tbWFuZF9hcmdzID0gewogICAgICAgICAgICAgJ2Nv
bW1hbmROYW1lJzogY29tbWFuZC5jb21tYW5kX25hbWUsCi0gICAgICAgICAgICAncGFyYW1ldGVy
cyc6ICIsICIuam9pbihwYXJhbWV0ZXJzKQorICAgICAgICAgICAgJ3BhcmFtZXRlcnMnOiAiLCAi
LmpvaW4ocGFyYW1ldGVycyksCisgICAgICAgICAgICAncmV0dXJucyc6ICIsICIuam9pbihyZXR1
cm5zKSwKICAgICAgICAgfQotICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICB2aXJ0dWFsIHZvaWQg
JShjb21tYW5kTmFtZSlzKCUocGFyYW1ldGVycylzKSA9IDA7JyAlIGNvbW1hbmRfYXJncykKKyAg
ICAgICAgaWYgbGVuKHJldHVybnMpID09IDE6CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAg
ICB2aXJ0dWFsIFByb3RvY29sOjpFcnJvclN0cmluZ09yPCUocmV0dXJucylzPiAlKGNvbW1hbmRO
YW1lKXMoJShwYXJhbWV0ZXJzKXMpID0gMDsnICUgY29tbWFuZF9hcmdzKQorICAgICAgICBlbGlm
IGxlbihyZXR1cm5zKSA+IDE6CisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICB2aXJ0dWFs
IFByb3RvY29sOjpFcnJvclN0cmluZ09yPHN0ZDo6dHVwbGU8JShyZXR1cm5zKXM+PiAlKGNvbW1h
bmROYW1lKXMoJShwYXJhbWV0ZXJzKXMpID0gMDsnICUgY29tbWFuZF9hcmdzKQorICAgICAgICBl
bHNlOgorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgdmlydHVhbCBQcm90b2NvbDo6RXJy
b3JTdHJpbmdPcjx2b2lkPiAlKGNvbW1hbmROYW1lKXMoJShwYXJhbWV0ZXJzKXMpID0gMDsnICUg
Y29tbWFuZF9hcmdzKQogICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2Nv
bmRpdGlvbihjb21tYW5kLmNvbmRpdGlvbiwgJ1xuJy5qb2luKGxpbmVzKSkKIAogICAgIGRlZiBf
Z2VuZXJhdGVfYXN5bmNfaGFuZGxlcl9kZWNsYXJhdGlvbl9mb3JfY29tbWFuZChzZWxmLCBjb21t
YW5kKToKICAgICAgICAgY2FsbGJhY2tOYW1lID0gIiVzQ2FsbGJhY2siICUgdWNmaXJzdChjb21t
YW5kLmNvbW1hbmRfbmFtZSkKIAotICAgICAgICBpbl9wYXJhbWV0ZXJzID0gW10KLSAgICAgICAg
Zm9yIF9wYXJhbWV0ZXIgaW4gY29tbWFuZC5jYWxsX3BhcmFtZXRlcnM6Ci0gICAgICAgICAgICBw
YXJhbWV0ZXJfbmFtZSA9ICdpbl8nICsgX3BhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZQotICAgICAg
ICAgICAgaWYgX3BhcmFtZXRlci5pc19vcHRpb25hbDoKKyAgICAgICAgcGFyYW1ldGVycyA9IFtd
CisgICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gY29tbWFuZC5jYWxsX3BhcmFtZXRlcnM6CisgICAg
ICAgICAgICBwYXJhbWV0ZXJfbmFtZSA9IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZQorICAgICAg
ICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgogICAgICAgICAgICAgICAgIHBhcmFtZXRl
cl9uYW1lID0gJ29wdF8nICsgcGFyYW1ldGVyX25hbWUKKyAgICAgICAgICAgIHBhcmFtZXRlcnMu
YXBwZW5kKCIlcyAlcyIgJSAoQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl9jb21tYW5kX3BhcmFt
ZXRlcihwYXJhbWV0ZXIudHlwZSwgcGFyYW1ldGVyLmlzX29wdGlvbmFsKSwgcGFyYW1ldGVyX25h
bWUpKQorICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZCgiUmVmPCVzPiYmIiAlIGNhbGxiYWNrTmFt
ZSkKIAotICAgICAgICAgICAgaW5fcGFyYW1ldGVycy5hcHBlbmQoIiVzICVzIiAlIChDcHBHZW5l
cmF0b3IuY3BwX3R5cGVfZm9yX3VuY2hlY2tlZF9mb3JtYWxfaW5fcGFyYW1ldGVyKF9wYXJhbWV0
ZXIpLCBwYXJhbWV0ZXJfbmFtZSkpCi0gICAgICAgIGluX3BhcmFtZXRlcnMuYXBwZW5kKCJSZWY8
JXM+JiYgY2FsbGJhY2siICUgY2FsbGJhY2tOYW1lKQotCi0gICAgICAgIG91dF9wYXJhbWV0ZXJz
ID0gW10KLSAgICAgICAgZm9yIF9wYXJhbWV0ZXIgaW4gY29tbWFuZC5yZXR1cm5fcGFyYW1ldGVy
czoKLSAgICAgICAgICAgIG91dF9wYXJhbWV0ZXJzLmFwcGVuZCgiJXMgJXMiICUgKENwcEdlbmVy
YXRvci5jcHBfdHlwZV9mb3JfZm9ybWFsX2FzeW5jX3BhcmFtZXRlcihfcGFyYW1ldGVyKSwgX3Bh
cmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkpCisgICAgICAgIHJldHVybnMgPSBbXQorICAgICAgICBm
b3IgcGFyYW1ldGVyIGluIGNvbW1hbmQucmV0dXJuX3BhcmFtZXRlcnM6CisgICAgICAgICAgICBw
YXJhbWV0ZXJfbmFtZSA9IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZQorICAgICAgICAgICAgaWYg
cGFyYW1ldGVyLmlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAgIHBhcmFtZXRlcl9uYW1lID0g
J29wdF8nICsgcGFyYW1ldGVyX25hbWUKKyAgICAgICAgICAgIHJldHVybnMuYXBwZW5kKCIlcyAl
cyIgJSAoQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl9jb21tYW5kX3JldHVybl9hcmd1bWVudChw
YXJhbWV0ZXIudHlwZSwgcGFyYW1ldGVyLmlzX29wdGlvbmFsKSwgcGFyYW1ldGVyX25hbWUpKQog
CiAgICAgICAgIGNsYXNzX2NvbXBvbmVudHMgPSBbJ2NsYXNzJ10KICAgICAgICAgZXhwb3J0X21h
Y3JvID0gc2VsZi5tb2RlbCgpLmZyYW1ld29yay5zZXR0aW5nKCdleHBvcnRfbWFjcm8nLCBOb25l
KQpAQCAtMTg4LDggKzE3NCw4IEBAIGNsYXNzIENwcEJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2Vu
ZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAgICAgICAnY2xhc3NBbmRFeHBvcnRNYWNybyc6
ICcgJy5qb2luKGNsYXNzX2NvbXBvbmVudHMpLAogICAgICAgICAgICAgJ2NhbGxiYWNrTmFtZSc6
IGNhbGxiYWNrTmFtZSwKICAgICAgICAgICAgICdjb21tYW5kTmFtZSc6IGNvbW1hbmQuY29tbWFu
ZF9uYW1lLAotICAgICAgICAgICAgJ2luUGFyYW1ldGVycyc6ICIsICIuam9pbihpbl9wYXJhbWV0
ZXJzKSwKLSAgICAgICAgICAgICdvdXRQYXJhbWV0ZXJzJzogIiwgIi5qb2luKG91dF9wYXJhbWV0
ZXJzKSwKKyAgICAgICAgICAgICdwYXJhbWV0ZXJzJzogIiwgIi5qb2luKHBhcmFtZXRlcnMpLAor
ICAgICAgICAgICAgJ3JldHVybnMnOiAiLCAiLmpvaW4ocmV0dXJucyksCiAgICAgICAgIH0KIAog
ICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihjb21tYW5k
LmNvbmRpdGlvbiwgVGVtcGxhdGUoQ3BwVGVtcGxhdGVzLkJhY2tlbmREaXNwYXRjaGVySGVhZGVy
QXN5bmNDb21tYW5kRGVjbGFyYXRpb24pLnN1YnN0aXR1dGUoTm9uZSwgKipjb21tYW5kX2FyZ3Mp
KQpAQCAtMjIzLDQgKzIwOSw0IEBAIGNsYXNzIENwcEJhY2tlbmREaXNwYXRjaGVySGVhZGVyR2Vu
ZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAgIHJldHVybiBzZWxmLndyYXBfd2l0aF9ndWFy
ZF9mb3JfY29uZGl0aW9uKGRvbWFpbi5jb25kaXRpb24sIFRlbXBsYXRlKENwcFRlbXBsYXRlcy5C
YWNrZW5kRGlzcGF0Y2hlckhlYWRlckRvbWFpbkRpc3BhdGNoZXJEZWNsYXJhdGlvbikuc3Vic3Rp
dHV0ZShOb25lLCAqKmhhbmRsZXJfYXJncykpCiAKICAgICBkZWYgX2dlbmVyYXRlX2Rpc3BhdGNo
ZXJfZGVjbGFyYXRpb25fZm9yX2NvbW1hbmQoc2VsZiwgY29tbWFuZCk6Ci0gICAgICAgIHJldHVy
biBzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGNvbW1hbmQuY29uZGl0aW9uLCAi
ICAgIHZvaWQgJXMobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1l
dGVycyk7IiAlIGNvbW1hbmQuY29tbWFuZF9uYW1lKQorICAgICAgICByZXR1cm4gc2VsZi53cmFw
X3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihjb21tYW5kLmNvbmRpdGlvbiwgIiAgICB2b2lkICVz
KGxvbmcgcHJvdG9jb2xfcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29s
X3BhcmFtZXRlcnMpOyIgJSBjb21tYW5kLmNvbW1hbmRfbmFtZSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9i
YWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRj
aGVyX2ltcGxlbWVudGF0aW9uLnB5CmluZGV4IGRhZjE5Yzk1MGZiMDdhYWEyZDhiMzFhMmY0OWM3
Y2FiNTA3MDJjNjAuLjhhMTA0NmQ2ODI1YzE0MTA0ZTJhMTFjMjU3N2E4NGFlODczMjI2NjcgMTAw
NzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2Vu
L2dlbmVyYXRlX2NwcF9iYWNrZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVf
Y3BwX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQpAQCAtMzMsMTIgKzMzLDEy
IEBAIHRyeToKICAgICBmcm9tIC5jcHBfZ2VuZXJhdG9yIGltcG9ydCBDcHBHZW5lcmF0b3IKICAg
ICBmcm9tIC5jcHBfZ2VuZXJhdG9yX3RlbXBsYXRlcyBpbXBvcnQgQ3BwR2VuZXJhdG9yVGVtcGxh
dGVzIGFzIENwcFRlbXBsYXRlcwogICAgIGZyb20gLmdlbmVyYXRvciBpbXBvcnQgR2VuZXJhdG9y
LCB1Y2ZpcnN0Ci0gICAgZnJvbSAubW9kZWxzIGltcG9ydCBPYmplY3RUeXBlLCBBcnJheVR5cGUK
KyAgICBmcm9tIC5tb2RlbHMgaW1wb3J0IE9iamVjdFR5cGUsIEFycmF5VHlwZSwgQWxpYXNlZFR5
cGUsIEVudW1UeXBlCiBleGNlcHQgVmFsdWVFcnJvcjoKICAgICBmcm9tIGNwcF9nZW5lcmF0b3Ig
aW1wb3J0IENwcEdlbmVyYXRvcgogICAgIGZyb20gY3BwX2dlbmVyYXRvcl90ZW1wbGF0ZXMgaW1w
b3J0IENwcEdlbmVyYXRvclRlbXBsYXRlcyBhcyBDcHBUZW1wbGF0ZXMKICAgICBmcm9tIGdlbmVy
YXRvciBpbXBvcnQgR2VuZXJhdG9yLCB1Y2ZpcnN0Ci0gICAgZnJvbSBtb2RlbHMgaW1wb3J0IE9i
amVjdFR5cGUsIEFycmF5VHlwZQorICAgIGZyb20gbW9kZWxzIGltcG9ydCBPYmplY3RUeXBlLCBB
cnJheVR5cGUsIEFsaWFzZWRUeXBlLCBFbnVtVHlwZQogCiBsb2cgPSBsb2dnaW5nLmdldExvZ2dl
cignZ2xvYmFsJykKIApAQCAtODAsMTEgKzgwLDggQEAgY2xhc3MgQ3BwQmFja2VuZERpc3BhdGNo
ZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgIGRlZiBfZ2VuZXJh
dGVfc2Vjb25kYXJ5X2hlYWRlcl9pbmNsdWRlcyhzZWxmKToKICAgICAgICAgaGVhZGVyX2luY2x1
ZGVzID0gWwogICAgICAgICAgICAgKFsiSmF2YVNjcmlwdENvcmUiLCAiV2ViS2l0Il0sICgiSmF2
YVNjcmlwdENvcmUiLCAiaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmgiKSksCi0g
ICAgICAgICAgICAoWyJKYXZhU2NyaXB0Q29yZSIsICJXZWJLaXQiXSwgKCJXVEYiLCAid3RmL0pT
T05WYWx1ZXMuaCIpKSwKICAgICAgICAgICAgIChbIkphdmFTY3JpcHRDb3JlIiwgIldlYktpdCJd
LCAoIldURiIsICJ3dGYvTmV2ZXJEZXN0cm95ZWQuaCIpKSwKLSAgICAgICAgICAgIChbIkphdmFT
Y3JpcHRDb3JlIiwgIldlYktpdCJdLCAoIldURiIsICJ3dGYvdGV4dC9DU3RyaW5nLmgiKSkKICAg
ICAgICAgXQotCiAgICAgICAgIHJldHVybiBzZWxmLmdlbmVyYXRlX2luY2x1ZGVzX2Zyb21fZW50
cmllcyhoZWFkZXJfaW5jbHVkZXMpCiAKIApAQCAtMTIzLDggKzEyMCw4IEBAIGNsYXNzIENwcEJh
Y2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAg
ICAgICAgY2FzZXMgPSBbXQogCiAgICAgICAgIGZpcnN0X2NvbW1hbmRfc3RyaW5nID0gIlxuIi5q
b2luKFsKLSAgICAgICAgICAgICcgICAgaWYgKG1ldGhvZCA9PSAiJXMiKSB7JyAlIGNvbW1hbmRz
WzBdLmNvbW1hbmRfbmFtZSwKLSAgICAgICAgICAgICcgICAgICAgICVzKHJlcXVlc3RJZCwgV1RG
TW92ZShwYXJhbWV0ZXJzKSk7JyAlIGNvbW1hbmRzWzBdLmNvbW1hbmRfbmFtZSwKKyAgICAgICAg
ICAgICcgICAgaWYgKHByb3RvY29sX21ldGhvZCA9PSAiJXMiKSB7JyAlIGNvbW1hbmRzWzBdLmNv
bW1hbmRfbmFtZSwKKyAgICAgICAgICAgICcgICAgICAgICVzKHByb3RvY29sX3JlcXVlc3RJZCwg
V1RGTW92ZShwcm90b2NvbF9wYXJhbWV0ZXJzKSk7JyAlIGNvbW1hbmRzWzBdLmNvbW1hbmRfbmFt
ZSwKICAgICAgICAgICAgICcgICAgICAgIHJldHVybjsnLAogICAgICAgICAgICAgJyAgICB9JywK
ICAgICAgICAgXSkKQEAgLTEzMiw4ICsxMjksOCBAQCBjbGFzcyBDcHBCYWNrZW5kRGlzcGF0Y2hl
ckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAKICAgICAgICAgZm9yIGNv
bW1hbmQgaW4gY29tbWFuZHNbMTpdOgogICAgICAgICAgICAgYWRkaXRpb25hbF9jb21tYW5kX3N0
cmluZyA9ICJcbiIuam9pbihbCi0gICAgICAgICAgICAgICAgJyAgICBpZiAobWV0aG9kID09ICIl
cyIpIHsnICUgY29tbWFuZC5jb21tYW5kX25hbWUsCi0gICAgICAgICAgICAgICAgJyAgICAgICAg
JXMocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsnICUgY29tbWFuZC5jb21tYW5kX25h
bWUsCisgICAgICAgICAgICAgICAgJyAgICBpZiAocHJvdG9jb2xfbWV0aG9kID09ICIlcyIpIHsn
ICUgY29tbWFuZC5jb21tYW5kX25hbWUsCisgICAgICAgICAgICAgICAgJyAgICAgICAgJXMocHJv
dG9jb2xfcmVxdWVzdElkLCBXVEZNb3ZlKHByb3RvY29sX3BhcmFtZXRlcnMpKTsnICUgY29tbWFu
ZC5jb21tYW5kX25hbWUsCiAgICAgICAgICAgICAgICAgJyAgICAgICAgcmV0dXJuOycsCiAgICAg
ICAgICAgICAgICAgJyAgICB9JywKICAgICAgICAgICAgIF0pCkBAIC0xNjUsMTQ2ICsxNjIsMTM2
IEBAIGNsYXNzIENwcEJhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IoQ3Bw
R2VuZXJhdG9yKToKICAgICAgICAgcmV0dXJuIFRlbXBsYXRlKENwcFRlbXBsYXRlcy5CYWNrZW5k
RGlzcGF0Y2hlckltcGxlbWVudGF0aW9uTGFyZ2VTd2l0Y2gpLnN1YnN0aXR1dGUoTm9uZSwgKipz
d2l0Y2hfYXJncykKIAogICAgIGRlZiBfZ2VuZXJhdGVfYXN5bmNfZGlzcGF0Y2hlcl9jbGFzc19m
b3JfZG9tYWluKHNlbGYsIGNvbW1hbmQsIGRvbWFpbik6Ci0gICAgICAgIG91dF9wYXJhbWV0ZXJf
YXNzaWdubWVudHMgPSBbXQotICAgICAgICBmb3JtYWxfcGFyYW1ldGVycyA9IFtdCisgICAgICAg
IHJldHVybl9hc3NpZ25tZW50cyA9IFtdCisgICAgICAgIGNhbGxiYWNrX3BhcmFtZXRlcnMgPSBb
XQogCiAgICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gY29tbWFuZC5yZXR1cm5fcGFyYW1ldGVyczoK
KyAgICAgICAgICAgIHBhcmFtZXRlcl9uYW1lID0gcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lCisg
ICAgICAgICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6CisgICAgICAgICAgICAgICAgcGFy
YW1ldGVyX25hbWUgPSAnb3B0XycgKyBwYXJhbWV0ZXJfbmFtZQorCisgICAgICAgICAgICBwYXJh
bWV0ZXJfdmFsdWUgPSBwYXJhbWV0ZXJfbmFtZQorCisgICAgICAgICAgICBfdHlwZSA9IHBhcmFt
ZXRlci50eXBlCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBBbGlhc2VkVHlwZSk6
CisgICAgICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5hbGlhc2VkX3R5cGUKKyAgICAgICAgICAg
IGlmIGlzaW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKSBhbmQgX3R5cGUuaXNfYW5vbnltb3VzOgor
ICAgICAgICAgICAgICAgIF90eXBlID0gX3R5cGUucHJpbWl0aXZlX3R5cGUKKworICAgICAgICAg
ICAgaWYgX3R5cGUuaXNfZW51bSgpOgorICAgICAgICAgICAgICAgIGlmIHBhcmFtZXRlci5pc19v
cHRpb25hbDoKKyAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyX3ZhbHVlID0gJyonICsgcGFy
YW1ldGVyX3ZhbHVlCisgICAgICAgICAgICAgICAgcGFyYW1ldGVyX3ZhbHVlID0gJ1Byb3RvY29s
Ojolczo6Z2V0RW51bUNvbnN0YW50VmFsdWUoJXMpJyAlIChzZWxmLmhlbHBlcnNfbmFtZXNwYWNl
KCksIHBhcmFtZXRlcl92YWx1ZSkKKyAgICAgICAgICAgIGVsaWYgQ3BwR2VuZXJhdG9yLnNob3Vs
ZF9yZWxlYXNlX2FyZ3VtZW50KF90eXBlLCBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwpOgorICAgICAg
ICAgICAgICAgIHBhcmFtZXRlcl92YWx1ZSA9IHBhcmFtZXRlcl92YWx1ZSArICcucmVsZWFzZU5v
bk51bGwoKScKKyAgICAgICAgICAgIGVsaWYgQ3BwR2VuZXJhdG9yLnNob3VsZF9kZXJlZmVyZW5j
ZV9hcmd1bWVudChfdHlwZSwgcGFyYW1ldGVyLmlzX29wdGlvbmFsKToKKyAgICAgICAgICAgICAg
ICBwYXJhbWV0ZXJfdmFsdWUgPSAnKicgKyBwYXJhbWV0ZXJfdmFsdWUKKyAgICAgICAgICAgIGVs
aWYgQ3BwR2VuZXJhdG9yLnNob3VsZF9tb3ZlX2FyZ3VtZW50KF90eXBlLCBwYXJhbWV0ZXIuaXNf
b3B0aW9uYWwpOgorICAgICAgICAgICAgICAgIHBhcmFtZXRlcl92YWx1ZSA9ICdXVEZNb3ZlKCVz
KScgJSBwYXJhbWV0ZXJfdmFsdWUKKwogICAgICAgICAgICAgcGFyYW1fYXJncyA9IHsKLSAgICAg
ICAgICAgICAgICAna2V5ZWRTZXRNZXRob2QnOiBDcHBHZW5lcmF0b3IuY3BwX3NldHRlcl9tZXRo
b2RfZm9yX3R5cGUocGFyYW1ldGVyLnR5cGUpLAorICAgICAgICAgICAgICAgICdrZXllZFNldE1l
dGhvZCc6IENwcEdlbmVyYXRvci5jcHBfc2V0dGVyX21ldGhvZF9mb3JfdHlwZShfdHlwZSksCiAg
ICAgICAgICAgICAgICAgJ3BhcmFtZXRlcktleSc6IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwK
LSAgICAgICAgICAgICAgICAncGFyYW1ldGVyTmFtZSc6IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFt
ZSwKLSAgICAgICAgICAgICAgICAncGFyYW1ldGVyVHlwZSc6IENwcEdlbmVyYXRvci5jcHBfdHlw
ZV9mb3Jfc3RhY2tfaW5fcGFyYW1ldGVyKHBhcmFtZXRlciksCi0gICAgICAgICAgICAgICAgJ2hl
bHBlcnNOYW1lc3BhY2UnOiBzZWxmLmhlbHBlcnNfbmFtZXNwYWNlKCksCisgICAgICAgICAgICAg
ICAgJ3BhcmFtZXRlck5hbWUnOiBwYXJhbWV0ZXJfbmFtZSwKKyAgICAgICAgICAgICAgICAncGFy
YW1ldGVyVmFsdWUnOiBwYXJhbWV0ZXJfdmFsdWUsCiAgICAgICAgICAgICB9CiAKLSAgICAgICAg
ICAgIGZvcm1hbF9wYXJhbWV0ZXJzLmFwcGVuZCgnJXMgJXMnICUgKENwcEdlbmVyYXRvci5jcHBf
dHlwZV9mb3JfZm9ybWFsX2FzeW5jX3BhcmFtZXRlcihwYXJhbWV0ZXIpLCBwYXJhbWV0ZXIucGFy
YW1ldGVyX25hbWUpKQorICAgICAgICAgICAgY2FsbGJhY2tfcGFyYW1ldGVycy5hcHBlbmQoJyVz
ICVzJyAlIChDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX2NvbW1hbmRfcmV0dXJuX2FyZ3VtZW50
KF90eXBlLCBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwpLCBwYXJhbWV0ZXJfbmFtZSkpCiAKICAgICAg
ICAgICAgIGlmIHBhcmFtZXRlci5pc19vcHRpb25hbDoKLSAgICAgICAgICAgICAgICBpZiBDcHBH
ZW5lcmF0b3Iuc2hvdWxkX3VzZV93cmFwcGVyX2Zvcl9yZXR1cm5fdHlwZShwYXJhbWV0ZXIudHlw
ZSk6Ci0gICAgICAgICAgICAgICAgICAgIG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5k
KCcgICAgaWYgKCUocGFyYW1ldGVyTmFtZSlzLmhhc1ZhbHVlKCkpJyAlIHBhcmFtX2FyZ3MpCi0g
ICAgICAgICAgICAgICAgICAgIG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAg
ICAgIGpzb25NZXNzYWdlLT4lKGtleWVkU2V0TWV0aG9kKXMoIiUocGFyYW1ldGVyS2V5KXMiX3Ms
IColKHBhcmFtZXRlck5hbWUpcyk7JyAlIHBhcmFtX2FyZ3MpCi0gICAgICAgICAgICAgICAgZWxz
ZToKLSAgICAgICAgICAgICAgICAgICAgb3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQo
JyAgICBpZiAoJShwYXJhbWV0ZXJOYW1lKXMpJyAlIHBhcmFtX2FyZ3MpCi0gICAgICAgICAgICAg
ICAgICAgIG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAgICAgIGpzb25NZXNz
YWdlLT4lKGtleWVkU2V0TWV0aG9kKXMoIiUocGFyYW1ldGVyS2V5KXMiX3MsICUocGFyYW1ldGVy
TmFtZSlzKTsnICUgcGFyYW1fYXJncykKLSAgICAgICAgICAgIGVsaWYgcGFyYW1ldGVyLnR5cGUu
aXNfZW51bSgpOgotICAgICAgICAgICAgICAgIG91dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBw
ZW5kKCcgICAganNvbk1lc3NhZ2UtPiUoa2V5ZWRTZXRNZXRob2QpcygiJShwYXJhbWV0ZXJLZXkp
cyJfcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6JShoZWxwZXJzTmFtZXNwYWNlKXM6OmdldEVudW1D
b25zdGFudFZhbHVlKCUocGFyYW1ldGVyTmFtZSlzKSk7JyAlIHBhcmFtX2FyZ3MpCisgICAgICAg
ICAgICAgICAgcmV0dXJuX2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAgIGlmICghISUocGFyYW1ldGVy
TmFtZSlzKScgJSBwYXJhbV9hcmdzKQorICAgICAgICAgICAgICAgIHJldHVybl9hc3NpZ25tZW50
cy5hcHBlbmQoJyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPiUoa2V5ZWRTZXRNZXRob2Qp
cygiJShwYXJhbWV0ZXJLZXkpcyJfcywgJShwYXJhbWV0ZXJWYWx1ZSlzKTsnICUgcGFyYW1fYXJn
cykKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgb3V0X3BhcmFtZXRlcl9hc3Np
Z25tZW50cy5hcHBlbmQoJyAgICBqc29uTWVzc2FnZS0+JShrZXllZFNldE1ldGhvZClzKCIlKHBh
cmFtZXRlcktleSlzIl9zLCAlKHBhcmFtZXRlck5hbWUpcyk7JyAlIHBhcmFtX2FyZ3MpCisgICAg
ICAgICAgICAgICAgcmV0dXJuX2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAgIHByb3RvY29sX2pzb25N
ZXNzYWdlLT4lKGtleWVkU2V0TWV0aG9kKXMoIiUocGFyYW1ldGVyS2V5KXMiX3MsICUocGFyYW1l
dGVyVmFsdWUpcyk7JyAlIHBhcmFtX2FyZ3MpCiAKICAgICAgICAgYXN5bmNfYXJncyA9IHsKICAg
ICAgICAgICAgICdkb21haW5OYW1lJzogZG9tYWluLmRvbWFpbl9uYW1lLAogICAgICAgICAgICAg
J2NhbGxiYWNrTmFtZSc6IHVjZmlyc3QoY29tbWFuZC5jb21tYW5kX25hbWUpICsgJ0NhbGxiYWNr
JywKLSAgICAgICAgICAgICdmb3JtYWxQYXJhbWV0ZXJzJzogIiwgIi5qb2luKGZvcm1hbF9wYXJh
bWV0ZXJzKSwKLSAgICAgICAgICAgICdvdXRQYXJhbWV0ZXJBc3NpZ25tZW50cyc6ICJcbiIuam9p
bihvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRzKQorICAgICAgICAgICAgJ2NhbGxiYWNrUGFyYW1l
dGVycyc6ICIsICIuam9pbihjYWxsYmFja19wYXJhbWV0ZXJzKSwKKyAgICAgICAgICAgICdyZXR1
cm5Bc3NpZ25tZW50cyc6ICJcbiIuam9pbihyZXR1cm5fYXNzaWdubWVudHMpCiAgICAgICAgIH0K
ICAgICAgICAgcmV0dXJuIHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oY29tbWFu
ZC5jb25kaXRpb24sIFRlbXBsYXRlKENwcFRlbXBsYXRlcy5CYWNrZW5kRGlzcGF0Y2hlckltcGxl
bWVudGF0aW9uQXN5bmNDb21tYW5kKS5zdWJzdGl0dXRlKE5vbmUsICoqYXN5bmNfYXJncykpCiAK
ICAgICBkZWYgX2dlbmVyYXRlX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb25fZm9yX2NvbW1hbmQo
c2VsZiwgY29tbWFuZCwgZG9tYWluKToKLSAgICAgICAgaW5fcGFyYW1ldGVyX2RlY2xhcmF0aW9u
cyA9IFtdCi0gICAgICAgIG91dF9wYXJhbWV0ZXJfZGVjbGFyYXRpb25zID0gW10KLSAgICAgICAg
b3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cyA9IFtdCi0gICAgICAgIGFsdGVybmF0ZV9kaXNwYXRj
aGVyX21ldGhvZF9wYXJhbWV0ZXJzID0gWydyZXF1ZXN0SWQnXQorICAgICAgICBwYXJhbWV0ZXJf
ZGVjbGFyYXRpb25zID0gW10KKyAgICAgICAgcGFyYW1ldGVyX2VudW1fcmVzb2x1dGlvbnMgPSBb
XQorICAgICAgICBhbHRlcm5hdGVfZGlzcGF0Y2hlcl9tZXRob2RfcGFyYW1ldGVycyA9IFsncHJv
dG9jb2xfcmVxdWVzdElkJ10KICAgICAgICAgbWV0aG9kX3BhcmFtZXRlcnMgPSBbXQotICAgICAg
ICBpZiBub3QgY29tbWFuZC5pc19hc3luYzoKLSAgICAgICAgICAgIG1ldGhvZF9wYXJhbWV0ZXJz
LmFwcGVuZCgnZXJyb3InKQogCiAgICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gY29tbWFuZC5jYWxs
X3BhcmFtZXRlcnM6Ci0gICAgICAgICAgICBwYXJhbWV0ZXJfbmFtZSA9ICdpbl8nICsgcGFyYW1l
dGVyLnBhcmFtZXRlcl9uYW1lCisgICAgICAgICAgICBwYXJhbWV0ZXJfbmFtZSA9IHBhcmFtZXRl
ci5wYXJhbWV0ZXJfbmFtZQogICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgog
ICAgICAgICAgICAgICAgIHBhcmFtZXRlcl9uYW1lID0gJ29wdF8nICsgcGFyYW1ldGVyX25hbWUK
KyAgICAgICAgICAgIHBhcmFtZXRlcl9uYW1lID0gJ2luXycgKyBwYXJhbWV0ZXJfbmFtZQogCi0g
ICAgICAgICAgICBvdXRfc3VjY2Vzc19hcmd1bWVudCA9ICdudWxscHRyJwotICAgICAgICAgICAg
aWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgotICAgICAgICAgICAgICAgIG91dF9zdWNjZXNzX2Fy
Z3VtZW50ID0gJyYlc192YWx1ZUZvdW5kJyAlIHBhcmFtZXRlcl9uYW1lCi0gICAgICAgICAgICAg
ICAgaW5fcGFyYW1ldGVyX2RlY2xhcmF0aW9ucy5hcHBlbmQoJyAgICBib29sICVzX3ZhbHVlRm91
bmQgPSBmYWxzZTsnICUgcGFyYW1ldGVyX25hbWUpCisgICAgICAgICAgICB2YXJpYWJsZV9uYW1l
ID0gcGFyYW1ldGVyX25hbWUKIAotICAgICAgICAgICAgIyBOb3cgYWRkIGFwcHJvcHJpYXRlIG9w
ZXJhdG9ycy4KLSAgICAgICAgICAgIHBhcmFtZXRlcl9leHByZXNzaW9uID0gcGFyYW1ldGVyX25h
bWUKKyAgICAgICAgICAgIF90eXBlID0gcGFyYW1ldGVyLnR5cGUKKyAgICAgICAgICAgIGlmIGlz
aW5zdGFuY2UoX3R5cGUsIEFsaWFzZWRUeXBlKToKKyAgICAgICAgICAgICAgICBfdHlwZSA9IF90
eXBlLmFsaWFzZWRfdHlwZQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgRW51bVR5
cGUpIGFuZCBfdHlwZS5pc19hbm9ueW1vdXM6CisgICAgICAgICAgICAgICAgX3R5cGUgPSBfdHlw
ZS5wcmltaXRpdmVfdHlwZQogCi0gICAgICAgICAgICBpZiBDcHBHZW5lcmF0b3Iuc2hvdWxkX3Vz
ZV9yZWZlcmVuY2VzX2Zvcl90eXBlKHBhcmFtZXRlci50eXBlKToKLSAgICAgICAgICAgICAgICBp
ZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6Ci0gICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcl9l
eHByZXNzaW9uID0gJyVzLmdldCgpJyAlIHBhcmFtZXRlcl9leHByZXNzaW9uCi0gICAgICAgICAg
ICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgIyBUaGlzIGFzc3VtZXMgdGhhdCB3ZSBo
YXZlIGFscmVhZHkgcHJvdmVkIHRoZSBvYmplY3QgaXMgbm9uLW51bGwuCi0gICAgICAgICAgICAg
ICAgICAgICMgSWYgYSByZXF1aXJlZCBwcm9wZXJ0eSBpcyBtaXNzaW5nLCBJbnNwZWN0b3JCYWNr
ZW5kOjpnZXRPYmplY3Qgd2lsbAotICAgICAgICAgICAgICAgICAgICAjIGFwcGVuZCBhIHByb3Rv
Y29sIGVycm9yLCBhbmQgdGhlIG1ldGhvZCBkaXNwYXRjaGVyIHdpbGwgcmV0dXJuIHdpdGhvdXQK
LSAgICAgICAgICAgICAgICAgICAgIyBpbnZva2luZyB0aGUgYmFja2VuZCBtZXRob2QgKGFuZCBk
ZXJlZmVyZW5jaW5nIHRoZSBvYmplY3QpLgotICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJf
ZXhwcmVzc2lvbiA9ICcqJXMnICUgcGFyYW1ldGVyX2V4cHJlc3Npb24KLSAgICAgICAgICAgIGVs
aWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgotICAgICAgICAgICAgICAgIHBhcmFtZXRlcl9leHBy
ZXNzaW9uID0gJyYlcycgJSBwYXJhbWV0ZXJfZXhwcmVzc2lvbgorICAgICAgICAgICAgaWYgX3R5
cGUuaXNfZW51bSgpOgorICAgICAgICAgICAgICAgIHBhcmFtZXRlcl9uYW1lID0gcGFyYW1ldGVy
X25hbWUgKyAnX2pzb24nCiAKLSAgICAgICAgICAgIHBhcmFtX2FyZ3MgPSB7Ci0gICAgICAgICAg
ICAgICAgJ3BhcmFtZXRlclR5cGUnOiBDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX3N0YWNrX2lu
X3BhcmFtZXRlcihwYXJhbWV0ZXIpLAotICAgICAgICAgICAgICAgICdwYXJhbWV0ZXJLZXknOiBw
YXJhbWV0ZXIucGFyYW1ldGVyX25hbWUsCi0gICAgICAgICAgICAgICAgJ3BhcmFtZXRlck5hbWUn
OiBwYXJhbWV0ZXJfbmFtZSwKLSAgICAgICAgICAgICAgICAncGFyYW1ldGVyRXhwcmVzc2lvbic6
IHBhcmFtZXRlcl9leHByZXNzaW9uLAotICAgICAgICAgICAgICAgICdrZXllZEdldE1ldGhvZCc6
IENwcEdlbmVyYXRvci5jcHBfZ2V0dGVyX21ldGhvZF9mb3JfdHlwZShwYXJhbWV0ZXIudHlwZSks
Ci0gICAgICAgICAgICAgICAgJ3N1Y2Nlc3NPdXRQYXJhbSc6IG91dF9zdWNjZXNzX2FyZ3VtZW50
Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYWx0ZXJuYXRlX2Rpc3BhdGNoZXJfbWV0
aG9kX3BhcmFtZXRlcnMuYXBwZW5kKHBhcmFtZXRlcl9uYW1lKQogCi0gICAgICAgICAgICBpbl9w
YXJhbWV0ZXJfZGVjbGFyYXRpb25zLmFwcGVuZCgnICAgICUocGFyYW1ldGVyVHlwZSlzICUocGFy
YW1ldGVyTmFtZSlzID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+JShrZXllZEdldE1ldGhvZClzKHBh
cmFtZXRlcnMuZ2V0KCksICIlKHBhcmFtZXRlcktleSlzIl9zLCAlKHN1Y2Nlc3NPdXRQYXJhbSlz
KTsnICUgcGFyYW1fYXJncykKLQotICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFs
OgotICAgICAgICAgICAgICAgIG9wdGlvbmFsX2luX3BhcmFtZXRlcl9zdHJpbmcgPSAnJShwYXJh
bWV0ZXJOYW1lKXNfdmFsdWVGb3VuZCA/ICUocGFyYW1ldGVyRXhwcmVzc2lvbilzIDogbnVsbHB0
cicgJSBwYXJhbV9hcmdzCi0gICAgICAgICAgICAgICAgYWx0ZXJuYXRlX2Rpc3BhdGNoZXJfbWV0
aG9kX3BhcmFtZXRlcnMuYXBwZW5kKG9wdGlvbmFsX2luX3BhcmFtZXRlcl9zdHJpbmcpCi0gICAg
ICAgICAgICAgICAgbWV0aG9kX3BhcmFtZXRlcnMuYXBwZW5kKG9wdGlvbmFsX2luX3BhcmFtZXRl
cl9zdHJpbmcpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGFsdGVybmF0ZV9k
aXNwYXRjaGVyX21ldGhvZF9wYXJhbWV0ZXJzLmFwcGVuZChwYXJhbWV0ZXJfZXhwcmVzc2lvbikK
LSAgICAgICAgICAgICAgICBtZXRob2RfcGFyYW1ldGVycy5hcHBlbmQocGFyYW1ldGVyX2V4cHJl
c3Npb24pCi0KLSAgICAgICAgaWYgY29tbWFuZC5pc19hc3luYzoKLSAgICAgICAgICAgIGFzeW5j
X2FyZ3MgPSB7Ci0gICAgICAgICAgICAgICAgJ2RvbWFpbk5hbWUnOiBkb21haW4uZG9tYWluX25h
bWUsCi0gICAgICAgICAgICAgICAgJ2NhbGxiYWNrTmFtZSc6IHVjZmlyc3QoY29tbWFuZC5jb21t
YW5kX25hbWUpICsgJ0NhbGxiYWNrJwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBvdXRf
cGFyYW1ldGVyX2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAgICAgICBjYWxsYmFjay0+ZGlzYWJsZSgp
OycpCi0gICAgICAgICAgICBvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAgICAg
ICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRj
aGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOycpCi0gICAgICAgICAgICBvdXRfcGFyYW1ldGVyX2Fz
c2lnbm1lbnRzLmFwcGVuZCgnICAgICAgICByZXR1cm47JykKLSAgICAgICAgICAgIG1ldGhvZF9w
YXJhbWV0ZXJzLmFwcGVuZCgnY2FsbGJhY2suY29weVJlZigpJykKLQotICAgICAgICBlbHNlOgot
ICAgICAgICAgICAgZm9yIHBhcmFtZXRlciBpbiBjb21tYW5kLnJldHVybl9wYXJhbWV0ZXJzOgot
ICAgICAgICAgICAgICAgIHBhcmFtX2FyZ3MgPSB7Ci0gICAgICAgICAgICAgICAgICAgICdwYXJh
bWV0ZXJUeXBlJzogQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl9zdGFja19vdXRfcGFyYW1ldGVy
KHBhcmFtZXRlciksCi0gICAgICAgICAgICAgICAgICAgICdwYXJhbWV0ZXJLZXknOiBwYXJhbWV0
ZXIucGFyYW1ldGVyX25hbWUsCi0gICAgICAgICAgICAgICAgICAgICdwYXJhbWV0ZXJOYW1lJzog
cGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lLAotICAgICAgICAgICAgICAgICAgICAna2V5ZWRTZXRN
ZXRob2QnOiBDcHBHZW5lcmF0b3IuY3BwX3NldHRlcl9tZXRob2RfZm9yX3R5cGUocGFyYW1ldGVy
LnR5cGUpLAorICAgICAgICAgICAgICAgIGVudW1fYXJncyA9IHsKICAgICAgICAgICAgICAgICAg
ICAgJ2hlbHBlcnNOYW1lc3BhY2UnOiBzZWxmLmhlbHBlcnNfbmFtZXNwYWNlKCksCisgICAgICAg
ICAgICAgICAgICAgICdwYXJhbWV0ZXJLZXknOiBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUsCisg
ICAgICAgICAgICAgICAgICAgICdlbnVtVHlwZSc6IENwcEdlbmVyYXRvci5jcHBfcHJvdG9jb2xf
dHlwZV9mb3JfdHlwZShfdHlwZSksCisgICAgICAgICAgICAgICAgICAgICdlbnVtVmFyaWFibGVO
YW1lJzogdmFyaWFibGVfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgJ3N0cmluZ1ZhcmlhYmxl
TmFtZSc6IHBhcmFtZXRlcl9uYW1lLAogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAg
ICAgIG91dF9wYXJhbWV0ZXJfZGVjbGFyYXRpb25zLmFwcGVuZCgnICAgICUocGFyYW1ldGVyVHlw
ZSlzIG91dF8lKHBhcmFtZXRlck5hbWUpczsnICUgcGFyYW1fYXJncykKKyAgICAgICAgICAgICAg
ICBpZiBsZW4ocGFyYW1ldGVyX2VudW1fcmVzb2x1dGlvbnMpOgorICAgICAgICAgICAgICAgICAg
ICBwYXJhbWV0ZXJfZW51bV9yZXNvbHV0aW9ucy5hcHBlbmQoJycpCisgICAgICAgICAgICAgICAg
cGFyYW1ldGVyX2VudW1fcmVzb2x1dGlvbnMuYXBwZW5kKCcgICAgYXV0byAlKGVudW1WYXJpYWJs
ZU5hbWUpcyA9IFByb3RvY29sOjolKGhlbHBlcnNOYW1lc3BhY2Upczo6cGFyc2VFbnVtVmFsdWVG
cm9tU3RyaW5nPCUoZW51bVR5cGUpcz4oJShzdHJpbmdWYXJpYWJsZU5hbWUpcyk7JyAlIGVudW1f
YXJncykKICAgICAgICAgICAgICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIENwcEdlbmVyYXRvci5zaG91bGRfdXNlX3dyYXBwZXJfZm9yX3JldHVy
bl90eXBlKHBhcmFtZXRlci50eXBlKToKLSAgICAgICAgICAgICAgICAgICAgICAgIG91dF9wYXJh
bWV0ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAgICAgIGlmIChvdXRfJShwYXJhbWV0ZXJOYW1l
KXMuaGFzVmFsdWUoKSknICUgcGFyYW1fYXJncykKLSAgICAgICAgICAgICAgICAgICAgICAgIG91
dF9wYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAgICAgICAgICByZXN1bHQtPiUoa2V5
ZWRTZXRNZXRob2QpcygiJShwYXJhbWV0ZXJLZXkpcyJfcywgKm91dF8lKHBhcmFtZXRlck5hbWUp
cyk7JyAlIHBhcmFtX2FyZ3MpCi0gICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBvdXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRzLmFwcGVuZCgnICAgICAgICBp
ZiAob3V0XyUocGFyYW1ldGVyTmFtZSlzKScgJSBwYXJhbV9hcmdzKQotICAgICAgICAgICAgICAg
ICAgICAgICAgb3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICAgICAgICAgIHJl
c3VsdC0+JShrZXllZFNldE1ldGhvZClzKCIlKHBhcmFtZXRlcktleSlzIl9zLCBvdXRfJShwYXJh
bWV0ZXJOYW1lKXMpOycgJSBwYXJhbV9hcmdzKQotICAgICAgICAgICAgICAgIGVsaWYgcGFyYW1l
dGVyLnR5cGUuaXNfZW51bSgpOgotICAgICAgICAgICAgICAgICAgICBvdXRfcGFyYW1ldGVyX2Fz
c2lnbm1lbnRzLmFwcGVuZCgnICAgICAgICByZXN1bHQtPiUoa2V5ZWRTZXRNZXRob2QpcygiJShw
YXJhbWV0ZXJLZXkpcyJfcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6JShoZWxwZXJzTmFtZXNwYWNl
KXM6OmdldEVudW1Db25zdGFudFZhbHVlKG91dF8lKHBhcmFtZXRlck5hbWUpcykpOycgJSBwYXJh
bV9hcmdzKQorICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfZXhwcmVzc2lvbiA9ICdXVEZN
b3ZlKCVzKScgJSB2YXJpYWJsZV9uYW1lCiAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAg
ICAgICAgICAgICAgb3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAgICAgICAgcmVz
dWx0LT4lKGtleWVkU2V0TWV0aG9kKXMoIiUocGFyYW1ldGVyS2V5KXMiX3MsIG91dF8lKHBhcmFt
ZXRlck5hbWUpcyk7JyAlIHBhcmFtX2FyZ3MpCisgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRl
cl9lbnVtX3Jlc29sdXRpb25zLmFwcGVuZCgnICAgIGlmICghJShlbnVtVmFyaWFibGVOYW1lKXMp
IHsnICUgZW51bV9hcmdzKQorICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfZW51bV9yZXNv
bHV0aW9ucy5hcHBlbmQoJyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9j
b2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIG1ha2VTdHJpbmcoIlVua25v
d24gJShwYXJhbWV0ZXJLZXkpczogIl9zLCAlKHN0cmluZ1ZhcmlhYmxlTmFtZSlzKSk7JyAlIGVu
dW1fYXJncykKKyAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyX2VudW1fcmVzb2x1dGlvbnMu
YXBwZW5kKCcgICAgICAgIHJldHVybjsnKQorICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJf
ZW51bV9yZXNvbHV0aW9ucy5hcHBlbmQoJyAgICB9JykKKyAgICAgICAgICAgICAgICAgICAgcGFy
YW1ldGVyX2V4cHJlc3Npb24gPSAnKicgKyB2YXJpYWJsZV9uYW1lCisgICAgICAgICAgICBlbHNl
OgorICAgICAgICAgICAgICAgIGlmIF90eXBlLnJhd19uYW1lKCkgPT0gJ3N0cmluZyc6CisgICAg
ICAgICAgICAgICAgICAgIHBhcmFtZXRlcl9leHByZXNzaW9uID0gdmFyaWFibGVfbmFtZQorICAg
ICAgICAgICAgICAgIGVsaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAg
ICAgICBwYXJhbWV0ZXJfZXhwcmVzc2lvbiA9ICdXVEZNb3ZlKCVzKScgJSB2YXJpYWJsZV9uYW1l
CisgICAgICAgICAgICAgICAgZWxpZiBfdHlwZS5yYXdfbmFtZSgpIGluIFsnYm9vbGVhbicsICdp
bnRlZ2VyJywgJ251bWJlciddOgorICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfZXhwcmVz
c2lvbiA9ICcqJyArIHZhcmlhYmxlX25hbWUKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAg
ICAgICAgICAgICAgICBwYXJhbWV0ZXJfZXhwcmVzc2lvbiA9IHZhcmlhYmxlX25hbWUgKyAnLnJl
bGVhc2VOb25OdWxsKCknCisgICAgICAgICAgICAgICAgYWx0ZXJuYXRlX2Rpc3BhdGNoZXJfbWV0
aG9kX3BhcmFtZXRlcnMuYXBwZW5kKHBhcmFtZXRlcl9leHByZXNzaW9uKQorICAgICAgICAgICAg
bWV0aG9kX3BhcmFtZXRlcnMuYXBwZW5kKHBhcmFtZXRlcl9leHByZXNzaW9uKQogCi0gICAgICAg
ICAgICAgICAgaWYgQ3BwR2VuZXJhdG9yLnNob3VsZF9wYXNzX2J5X2NvcHlfZm9yX3JldHVybl90
eXBlKHBhcmFtZXRlci50eXBlKSBvciBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwgYW5kIENwcEdlbmVy
YXRvci5zaG91bGRfdXNlX3dyYXBwZXJfZm9yX3JldHVybl90eXBlKHBhcmFtZXRlci50eXBlKToK
LSAgICAgICAgICAgICAgICAgICAgbWV0aG9kX3BhcmFtZXRlcnMuYXBwZW5kKCdvdXRfJyArIHBh
cmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAg
ICAgICAgICAgICBtZXRob2RfcGFyYW1ldGVycy5hcHBlbmQoJyZvdXRfJyArIHBhcmFtZXRlci5w
YXJhbWV0ZXJfbmFtZSkKKyAgICAgICAgICAgIHBhcmFtX2FyZ3MgPSB7CisgICAgICAgICAgICAg
ICAgJ3BhcmFtZXRlcktleSc6IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwKKyAgICAgICAgICAg
ICAgICAncGFyYW1ldGVyTmFtZSc6IHBhcmFtZXRlcl9uYW1lLAorICAgICAgICAgICAgICAgICdr
ZXllZEdldE1ldGhvZCc6IENwcEdlbmVyYXRvci5jcHBfZ2V0dGVyX21ldGhvZF9mb3JfdHlwZShf
dHlwZSksCisgICAgICAgICAgICAgICAgJ3JlcXVpcmVkJzogJ2ZhbHNlJyBpZiBwYXJhbWV0ZXIu
aXNfb3B0aW9uYWwgZWxzZSAndHJ1ZScsCisgICAgICAgICAgICB9CisgICAgICAgICAgICBwYXJh
bWV0ZXJfZGVjbGFyYXRpb25zLmFwcGVuZCgnICAgIGF1dG8gJShwYXJhbWV0ZXJOYW1lKXMgPSBt
X2JhY2tlbmREaXNwYXRjaGVyLT4lKGtleWVkR2V0TWV0aG9kKXMocHJvdG9jb2xfcGFyYW1ldGVy
cy5nZXQoKSwgIiUocGFyYW1ldGVyS2V5KXMiX3MsICUocmVxdWlyZWQpcyk7JyAlIHBhcmFtX2Fy
Z3MpCisKKyAgICAgICAgaWYgY29tbWFuZC5pc19hc3luYzoKKyAgICAgICAgICAgIG1ldGhvZF9w
YXJhbWV0ZXJzLmFwcGVuZCgnYWRvcHRSZWYoKm5ldyAlc0JhY2tlbmREaXNwYXRjaGVySGFuZGxl
cjo6JXMobV9iYWNrZW5kRGlzcGF0Y2hlci5jb3B5UmVmKCksIHByb3RvY29sX3JlcXVlc3RJZCkp
JyAlIChkb21haW4uZG9tYWluX25hbWUsICclc0NhbGxiYWNrJyAlIHVjZmlyc3QoY29tbWFuZC5j
b21tYW5kX25hbWUpKSkKIAogICAgICAgICBjb21tYW5kX2FyZ3MgPSB7CiAgICAgICAgICAgICAn
ZG9tYWluTmFtZSc6IGRvbWFpbi5kb21haW5fbmFtZSwKLSAgICAgICAgICAgICdjYWxsYmFja05h
bWUnOiAnJXNDYWxsYmFjaycgJSB1Y2ZpcnN0KGNvbW1hbmQuY29tbWFuZF9uYW1lKSwKICAgICAg
ICAgICAgICdjb21tYW5kTmFtZSc6IGNvbW1hbmQuY29tbWFuZF9uYW1lLAotICAgICAgICAgICAg
J2luUGFyYW1ldGVyRGVjbGFyYXRpb25zJzogJ1xuJy5qb2luKGluX3BhcmFtZXRlcl9kZWNsYXJh
dGlvbnMpLAorICAgICAgICAgICAgJ3BhcmFtZXRlckRlY2xhcmF0aW9ucyc6ICdcbicuam9pbihw
YXJhbWV0ZXJfZGVjbGFyYXRpb25zKSwKICAgICAgICAgICAgICdpbnZvY2F0aW9uUGFyYW1ldGVy
cyc6ICcsICcuam9pbihtZXRob2RfcGFyYW1ldGVycyksCiAgICAgICAgICAgICAnYWx0ZXJuYXRl
SW52b2NhdGlvblBhcmFtZXRlcnMnOiAnLCAnLmpvaW4oYWx0ZXJuYXRlX2Rpc3BhdGNoZXJfbWV0
aG9kX3BhcmFtZXRlcnMpLAogICAgICAgICB9CiAKICAgICAgICAgbGluZXMgPSBbXQogICAgICAg
ICBpZiBsZW4oY29tbWFuZC5jYWxsX3BhcmFtZXRlcnMpID09IDA6Ci0gICAgICAgICAgICBsaW5l
cy5hcHBlbmQoJ3ZvaWQgJShkb21haW5OYW1lKXNCYWNrZW5kRGlzcGF0Y2hlcjo6JShjb21tYW5k
TmFtZSlzKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKScgJSBjb21tYW5k
X2FyZ3MpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ3ZvaWQgJShkb21haW5OYW1lKXNCYWNr
ZW5kRGlzcGF0Y2hlcjo6JShjb21tYW5kTmFtZSlzKGxvbmcgcHJvdG9jb2xfcmVxdWVzdElkLCBS
ZWZQdHI8SlNPTjo6T2JqZWN0PiYmKScgJSBjb21tYW5kX2FyZ3MpCiAgICAgICAgIGVsc2U6Ci0g
ICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ3ZvaWQgJShkb21haW5OYW1lKXNCYWNrZW5kRGlzcGF0
Y2hlcjo6JShjb21tYW5kTmFtZSlzKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0
PiYmIHBhcmFtZXRlcnMpJyAlIGNvbW1hbmRfYXJncykKKyAgICAgICAgICAgIGxpbmVzLmFwcGVu
ZCgndm9pZCAlKGRvbWFpbk5hbWUpc0JhY2tlbmREaXNwYXRjaGVyOjolKGNvbW1hbmROYW1lKXMo
bG9uZyBwcm90b2NvbF9yZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xf
cGFyYW1ldGVycyknICUgY29tbWFuZF9hcmdzKQogICAgICAgICBsaW5lcy5hcHBlbmQoJ3snKQog
CiAgICAgICAgIGlmIGxlbihjb21tYW5kLmNhbGxfcGFyYW1ldGVycykgPiAwOgpAQCAtMzE5LDMx
ICszMDYsNzEgQEAgY2xhc3MgQ3BwQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVy
YXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcjZW5kaWYgLy8g
RU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpJykKICAgICAgICAgICAgIGxp
bmVzLmFwcGVuZCgnJykKIAorICAgICAgICBpZiBsZW4ocGFyYW1ldGVyX2VudW1fcmVzb2x1dGlv
bnMpOgorICAgICAgICAgICAgbGluZXMuZXh0ZW5kKHBhcmFtZXRlcl9lbnVtX3Jlc29sdXRpb25z
KQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcnKQorCiAgICAgICAgIGlmIGNvbW1hbmQuaXNf
YXN5bmM6Ci0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBSZWY8JShkb21haW5OYW1lKXNC
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OiUoY2FsbGJhY2tOYW1lKXM+IGNhbGxiYWNrID0gYWRv
cHRSZWYoKm5ldyAlKGRvbWFpbk5hbWUpc0JhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6JShjYWxs
YmFja05hbWUpcyhtX2JhY2tlbmREaXNwYXRjaGVyLmNvcHlSZWYoKSwgcmVxdWVzdElkKSk7JyAl
IGNvbW1hbmRfYXJncykKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIG1fYWdlbnQtPiUo
Y29tbWFuZE5hbWUpcyglKGludm9jYXRpb25QYXJhbWV0ZXJzKXMpOycgJSBjb21tYW5kX2FyZ3Mp
CiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBFcnJvclN0cmlu
ZyBlcnJvcjsnKQotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgUmVmPEpTT046Ok9iamVj
dD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsnKQorICAgICAgICAgICAgcmVzdWx0
X2Rlc3RydWN0dXJlZF9uYW1lcyA9IFtdCisgICAgICAgICAgICByZXN1bHRfY29udmVyc2lvbl9s
aW5lcyA9IFtdCisgICAgICAgICAgICBmb3IgcGFyYW1ldGVyIGluIGNvbW1hbmQucmV0dXJuX3Bh
cmFtZXRlcnM6CisgICAgICAgICAgICAgICAgcGFyYW1ldGVyX25hbWUgPSBwYXJhbWV0ZXIucGFy
YW1ldGVyX25hbWUKKyAgICAgICAgICAgICAgICBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6Cisg
ICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcl9uYW1lID0gJ29wdF8nICsgcGFyYW1ldGVyX25h
bWUKKyAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfbmFtZSA9ICdvdXRfJyArIHBhcmFtZXRlcl9u
YW1lCiAKLSAgICAgICAgaWYgbGVuKGNvbW1hbmQucmV0dXJuX3BhcmFtZXRlcnMpID4gMDoKLSAg
ICAgICAgICAgIGxpbmVzLmV4dGVuZChvdXRfcGFyYW1ldGVyX2RlY2xhcmF0aW9ucykKLSAgICAg
ICAgbGluZXMuYXBwZW5kKCcgICAgbV9hZ2VudC0+JShjb21tYW5kTmFtZSlzKCUoaW52b2NhdGlv
blBhcmFtZXRlcnMpcyk7JyAlIGNvbW1hbmRfYXJncykKLSAgICAgICAgbGluZXMuYXBwZW5kKCcn
KQorICAgICAgICAgICAgICAgIHJlc3VsdF9kZXN0cnVjdHVyZWRfbmFtZXMuYXBwZW5kKHBhcmFt
ZXRlcl9uYW1lKQogCi0gICAgICAgIGlmIG5vdCBjb21tYW5kLmlzX2FzeW5jOgotICAgICAgICAg
ICAgaWYgbGVuKGNvbW1hbmQucmV0dXJuX3BhcmFtZXRlcnMpID4gMToKLSAgICAgICAgICAgICAg
ICBsaW5lcy5hcHBlbmQoJyAgICBpZiAoIWVycm9yLmxlbmd0aCgpKSB7JykKLSAgICAgICAgICAg
ICAgICBsaW5lcy5leHRlbmQob3V0X3BhcmFtZXRlcl9hc3NpZ25tZW50cykKLSAgICAgICAgICAg
ICAgICBsaW5lcy5hcHBlbmQoJyAgICB9JykKLSAgICAgICAgICAgIGVsaWYgbGVuKGNvbW1hbmQu
cmV0dXJuX3BhcmFtZXRlcnMpID09IDE6Ci0gICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcg
ICAgaWYgKCFlcnJvci5sZW5ndGgoKSknKQotICAgICAgICAgICAgICAgIGxpbmVzLmV4dGVuZChv
dXRfcGFyYW1ldGVyX2Fzc2lnbm1lbnRzKQorICAgICAgICAgICAgICAgIHBhcmFtZXRlcl92YWx1
ZSA9IHBhcmFtZXRlcl9uYW1lCisKKyAgICAgICAgICAgICAgICBfdHlwZSA9IHBhcmFtZXRlci50
eXBlCisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShfdHlwZSwgQWxpYXNlZFR5cGUpOgor
ICAgICAgICAgICAgICAgICAgICBfdHlwZSA9IF90eXBlLmFsaWFzZWRfdHlwZQorICAgICAgICAg
ICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKSBhbmQgX3R5cGUuaXNfYW5vbnlt
b3VzOgorICAgICAgICAgICAgICAgICAgICBfdHlwZSA9IF90eXBlLnByaW1pdGl2ZV90eXBlCisK
KyAgICAgICAgICAgICAgICBpZiBfdHlwZS5pc19lbnVtKCk6CisgICAgICAgICAgICAgICAgICAg
IGlmIHBhcmFtZXRlci5pc19vcHRpb25hbDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFt
ZXRlcl92YWx1ZSA9ICcqJyArIHBhcmFtZXRlcl92YWx1ZQorICAgICAgICAgICAgICAgICAgICBw
YXJhbWV0ZXJfdmFsdWUgPSAnUHJvdG9jb2w6OiVzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZSglcykn
ICUgKHNlbGYuaGVscGVyc19uYW1lc3BhY2UoKSwgcGFyYW1ldGVyX3ZhbHVlKQorICAgICAgICAg
ICAgICAgIGVsaWYgQ3BwR2VuZXJhdG9yLnNob3VsZF9yZWxlYXNlX2FyZ3VtZW50KF90eXBlLCBw
YXJhbWV0ZXIuaXNfb3B0aW9uYWwpOgorICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfdmFs
dWUgPSBwYXJhbWV0ZXJfdmFsdWUgKyAnLnJlbGVhc2VOb25OdWxsKCknCisgICAgICAgICAgICAg
ICAgZWxpZiBDcHBHZW5lcmF0b3Iuc2hvdWxkX2RlcmVmZXJlbmNlX2FyZ3VtZW50KF90eXBlLCBw
YXJhbWV0ZXIuaXNfb3B0aW9uYWwpOgorICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfdmFs
dWUgPSAnKicgKyBwYXJhbWV0ZXJfdmFsdWUKKyAgICAgICAgICAgICAgICBlbGlmIENwcEdlbmVy
YXRvci5zaG91bGRfbW92ZV9hcmd1bWVudChfdHlwZSwgcGFyYW1ldGVyLmlzX29wdGlvbmFsKToK
KyAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyX3ZhbHVlID0gJ1dURk1vdmUoJXMpJyAlIHBh
cmFtZXRlcl92YWx1ZQorCisgICAgICAgICAgICAgICAgcGFyYW1fYXJncyA9IHsKKyAgICAgICAg
ICAgICAgICAgICAgJ2tleWVkU2V0TWV0aG9kJzogQ3BwR2VuZXJhdG9yLmNwcF9zZXR0ZXJfbWV0
aG9kX2Zvcl90eXBlKF90eXBlKSwKKyAgICAgICAgICAgICAgICAgICAgJ3BhcmFtZXRlcktleSc6
IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgJ3BhcmFtZXRl
ck5hbWUnOiBwYXJhbWV0ZXJfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgJ3BhcmFtZXRlclZh
bHVlJzogcGFyYW1ldGVyX3ZhbHVlLAorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgIGlmIHBhcmFtZXRlci5pc19vcHRpb25hbDoKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0
X2NvbnZlcnNpb25fbGluZXMuYXBwZW5kKCcgICAgaWYgKCEhJShwYXJhbWV0ZXJOYW1lKXMpJyAl
IHBhcmFtX2FyZ3MpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdF9jb252ZXJzaW9uX2xpbmVz
LmFwcGVuZCgnICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+JShrZXllZFNldE1ldGhvZClz
KCIlKHBhcmFtZXRlcktleSlzIl9zLCAlKHBhcmFtZXRlclZhbHVlKXMpOycgJSBwYXJhbV9hcmdz
KQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdF9jb252
ZXJzaW9uX2xpbmVzLmFwcGVuZCgnICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT4lKGtleWVkU2V0
TWV0aG9kKXMoIiUocGFyYW1ldGVyS2V5KXMiX3MsICUocGFyYW1ldGVyVmFsdWUpcyk7JyAlIHBh
cmFtX2FyZ3MpCisKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGF1dG8gcmVzdWx0ID0g
bV9hZ2VudC0+JShjb21tYW5kTmFtZSlzKCUoaW52b2NhdGlvblBhcmFtZXRlcnMpcyk7JyAlIGNv
bW1hbmRfYXJncykKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGlmICghcmVzdWx0KSB7
JykKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBBU1NFUlQoIXJlc3VsdC5lcnJv
cigpLmlzRW1wdHkoKSk7JykKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBtX2Jh
Y2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpT
ZXJ2ZXJFcnJvciwgcmVzdWx0LmVycm9yKCkpOycpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQo
JyAgICAgICAgcmV0dXJuOycpCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICB9JykKKyAg
ICAgICAgICAgIGxpbmVzLmFwcGVuZCgnJykKKyAgICAgICAgICAgIGlmIGxlbihyZXN1bHRfZGVz
dHJ1Y3R1cmVkX25hbWVzKSA9PSAxOgorICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAg
IGF1dG8gJXMgPSBXVEZNb3ZlKHJlc3VsdC52YWx1ZSgpKTsnICUgcmVzdWx0X2Rlc3RydWN0dXJl
ZF9uYW1lc1swXSkKICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJycpCi0KLSAgICAgICAg
ICAgIGxpbmVzLmFwcGVuZCgnICAgIGlmICghZXJyb3IubGVuZ3RoKCkpJykKLSAgICAgICAgICAg
IGxpbmVzLmFwcGVuZCgnICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2Uo
cmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsnKQotICAgICAgICAgICAgbGluZXMu
YXBwZW5kKCcgICAgZWxzZScpCi0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgbV9i
YWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6
U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsnKQorICAgICAgICAgICAgZWxpZiBsZW4ocmVz
dWx0X2Rlc3RydWN0dXJlZF9uYW1lcykgPiAxOgorICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVu
ZCgnICAgIGF1dG8gWyVzXSA9IFdURk1vdmUocmVzdWx0LnZhbHVlKCkpOycgJSAiLCAiLmpvaW4o
cmVzdWx0X2Rlc3RydWN0dXJlZF9uYW1lcykpCisgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5k
KCcnKQorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgYXV0byBwcm90b2NvbF9qc29uTWVz
c2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7JykKKyAgICAgICAgICAgIGxpbmVzLmV4dGVu
ZChyZXN1bHRfY29udmVyc2lvbl9saW5lcykKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAg
IG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShwcm90b2NvbF9yZXF1ZXN0SWQsIFdU
Rk1vdmUocHJvdG9jb2xfanNvbk1lc3NhZ2UpLCBmYWxzZSk7JykKIAogICAgICAgICBsaW5lcy5h
cHBlbmQoJ30nKQogICAgICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRp
dGlvbihjb21tYW5kLmNvbmRpdGlvbiwgIlxuIi5qb2luKGxpbmVzKSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2Nw
cF9mcm9udGVuZF9kaXNwYXRjaGVyX2hlYWRlci5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9mcm9udGVuZF9kaXNwYXRjaGVy
X2hlYWRlci5weQppbmRleCAxMTlkMjNjMzhjZGYyNGNmNTZkMGZmYzY2ZDU3YjhhM2Q0ZTJkYTQ0
Li5iZWFhMTdjOTgxNTRiN2VlMjJlM2I1Yjk3NmQwMTgzOTQwYTQ2OTEzIDEwMDc1NQotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9j
cHBfZnJvbnRlbmRfZGlzcGF0Y2hlcl9oZWFkZXIucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX2Zyb250ZW5kX2Rpc3Bh
dGNoZXJfaGVhZGVyLnB5CkBAIC03Myw5ICs3Myw5IEBAIGNsYXNzIENwcEZyb250ZW5kRGlzcGF0
Y2hlckhlYWRlckdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAgICBoZWFkZXJfaW5jbHVk
ZXMgPSBbCiAgICAgICAgICAgICAoWyJKYXZhU2NyaXB0Q29yZSIsICJXZWJLaXQiXSwgKHNlbGYu
bW9kZWwoKS5mcmFtZXdvcmsubmFtZSwgIiVzUHJvdG9jb2xPYmplY3RzLmgiICUgc2VsZi5wcm90
b2NvbF9uYW1lKCkpKSwKICAgICAgICAgICAgIChbIkphdmFTY3JpcHRDb3JlIiwgIldlYktpdCJd
LCAoIldURiIsICJ3dGYvSlNPTlZhbHVlcy5oIikpLAotICAgICAgICAgICAgKFsiSmF2YVNjcmlw
dENvcmUiLCAiV2ViS2l0Il0sICgiV1RGIiwgInd0Zi90ZXh0L1dURlN0cmluZy5oIikpCisgICAg
ICAgICAgICAoWyJKYXZhU2NyaXB0Q29yZSIsICJXZWJLaXQiXSwgKCJXVEYiLCAid3RmL09wdGlv
bmFsLmgiKSksCisgICAgICAgICAgICAoWyJKYXZhU2NyaXB0Q29yZSIsICJXZWJLaXQiXSwgKCJX
VEYiLCAid3RmL3RleHQvV1RGU3RyaW5nLmgiKSksCiAgICAgICAgIF0KLQogICAgICAgICByZXR1
cm4gJ1xuJy5qb2luKHNlbGYuZ2VuZXJhdGVfaW5jbHVkZXNfZnJvbV9lbnRyaWVzKGhlYWRlcl9p
bmNsdWRlcykpCiAKICAgICBkZWYgX2dlbmVyYXRlX2Fub255bW91c19lbnVtX2Zvcl9wYXJhbWV0
ZXIoc2VsZiwgcGFyYW1ldGVyLCBldmVudCk6CkBAIC0xMTcsOCArMTE3LDEzIEBAIGNsYXNzIENw
cEZyb250ZW5kRGlzcGF0Y2hlckhlYWRlckdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAg
ICBmb3JtYWxfcGFyYW1ldGVycyA9IFtdCiAgICAgICAgIGxpbmVzID0gW10KICAgICAgICAgZm9y
IHBhcmFtZXRlciBpbiBldmVudC5ldmVudF9wYXJhbWV0ZXJzOgotICAgICAgICAgICAgZm9ybWFs
X3BhcmFtZXRlcnMuYXBwZW5kKCclcyAlcycgJSAoQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl9j
aGVja2VkX2Zvcm1hbF9ldmVudF9wYXJhbWV0ZXIocGFyYW1ldGVyKSwgcGFyYW1ldGVyLnBhcmFt
ZXRlcl9uYW1lKSkKLSAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UocGFyYW1ldGVyLnR5cGUsIEVu
dW1UeXBlKSBhbmQgcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lIG5vdCBpbiB1c2VkX2VudW1fbmFt
ZXM6CisgICAgICAgICAgICBwYXJhbWV0ZXJfbmFtZSA9IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFt
ZQorICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAg
IHBhcmFtZXRlcl9uYW1lID0gJ29wdF8nICsgcGFyYW1ldGVyX25hbWUKKworICAgICAgICAgICAg
Zm9ybWFsX3BhcmFtZXRlcnMuYXBwZW5kKCclcyAlcycgJSAoQ3BwR2VuZXJhdG9yLmNwcF90eXBl
X2Zvcl9ldmVudF9wYXJhbWV0ZXIocGFyYW1ldGVyLnR5cGUsIHBhcmFtZXRlci5pc19vcHRpb25h
bCksIHBhcmFtZXRlcl9uYW1lKSkKKworICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShwYXJhbWV0
ZXIudHlwZSwgRW51bVR5cGUpIGFuZCBwYXJhbWV0ZXIudHlwZS5pc19hbm9ueW1vdXMgYW5kIHBh
cmFtZXRlci5wYXJhbWV0ZXJfbmFtZSBub3QgaW4gdXNlZF9lbnVtX25hbWVzOgogICAgICAgICAg
ICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLl9nZW5lcmF0ZV9hbm9ueW1vdXNfZW51bV9mb3JfcGFy
YW1ldGVyKHBhcmFtZXRlciwgZXZlbnQpKQogICAgICAgICAgICAgICAgIHVzZWRfZW51bV9uYW1l
cy5hZGQocGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lKQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfZnJvbnRl
bmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9mcm9udGVuZF9kaXNwYXRjaGVy
X2ltcGxlbWVudGF0aW9uLnB5CmluZGV4IDY2ZGM2ZTE4NWNmZTJiNjFiMWVjYTc3NTczY2UxNjc0
ZTZiMzVhNDkuLjc2M2UwMWRmYjc4Y2RlYzhkNjAzMGQyZWRjMzUwNTQ4OTE3Njk4MGMgMTAwNzU1
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dl
bmVyYXRlX2NwcF9mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5CisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2Nw
cF9mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5CkBAIC0zMywxMiArMzMsMTIg
QEAgdHJ5OgogICAgIGZyb20gLmNwcF9nZW5lcmF0b3IgaW1wb3J0IENwcEdlbmVyYXRvcgogICAg
IGZyb20gLmNwcF9nZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBDcHBHZW5lcmF0b3JUZW1wbGF0
ZXMgYXMgQ3BwVGVtcGxhdGVzCiAgICAgZnJvbSAuZ2VuZXJhdG9yIGltcG9ydCBHZW5lcmF0b3Is
IHVjZmlyc3QKLSAgICBmcm9tIC5tb2RlbHMgaW1wb3J0IE9iamVjdFR5cGUsIEFycmF5VHlwZQor
ICAgIGZyb20gLm1vZGVscyBpbXBvcnQgT2JqZWN0VHlwZSwgQXJyYXlUeXBlLCBBbGlhc2VkVHlw
ZSwgRW51bVR5cGUKIGV4Y2VwdDoKICAgICBmcm9tIGNwcF9nZW5lcmF0b3IgaW1wb3J0IENwcEdl
bmVyYXRvcgogICAgIGZyb20gY3BwX2dlbmVyYXRvcl90ZW1wbGF0ZXMgaW1wb3J0IENwcEdlbmVy
YXRvclRlbXBsYXRlcyBhcyBDcHBUZW1wbGF0ZXMKICAgICBmcm9tIGdlbmVyYXRvciBpbXBvcnQg
R2VuZXJhdG9yLCB1Y2ZpcnN0Ci0gICAgZnJvbSBtb2RlbHMgaW1wb3J0IE9iamVjdFR5cGUsIEFy
cmF5VHlwZQorICAgIGZyb20gbW9kZWxzIGltcG9ydCBPYmplY3RUeXBlLCBBcnJheVR5cGUsIEFs
aWFzZWRUeXBlLCBFbnVtVHlwZQogCiBsb2cgPSBsb2dnaW5nLmdldExvZ2dlcignZ2xvYmFsJykK
IApAQCAtNzEsOSArNzEsNyBAQCBjbGFzcyBDcHBGcm9udGVuZERpc3BhdGNoZXJJbXBsZW1lbnRh
dGlvbkdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgIGRlZiBfZ2VuZXJhdGVfc2Vjb25kYXJ5
X2hlYWRlcl9pbmNsdWRlcyhzZWxmKToKICAgICAgICAgaGVhZGVyX2luY2x1ZGVzID0gWwogICAg
ICAgICAgICAgKFsiSmF2YVNjcmlwdENvcmUiLCAiV2ViS2l0Il0sICgiSmF2YVNjcmlwdENvcmUi
LCAiaW5zcGVjdG9yL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmgiKSksCi0gICAgICAgICAgICAo
WyJKYXZhU2NyaXB0Q29yZSIsICJXZWJLaXQiXSwgKCJXVEYiLCAid3RmL3RleHQvQ1N0cmluZy5o
IikpCiAgICAgICAgIF0KLQogICAgICAgICByZXR1cm4gJ1xuJy5qb2luKHNlbGYuZ2VuZXJhdGVf
aW5jbHVkZXNfZnJvbV9lbnRyaWVzKGhlYWRlcl9pbmNsdWRlcykpCiAKICAgICBkZWYgX2dlbmVy
YXRlX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb25zX2Zvcl9kb21haW4oc2VsZiwgZG9tYWluKToK
QEAgLTkwLDI3ICs4OCw0MyBAQCBjbGFzcyBDcHBGcm9udGVuZERpc3BhdGNoZXJJbXBsZW1lbnRh
dGlvbkdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAgICBmb3JtYWxfcGFyYW1ldGVycyA9
IFtdCiAKICAgICAgICAgZm9yIHBhcmFtZXRlciBpbiBldmVudC5ldmVudF9wYXJhbWV0ZXJzOgor
ICAgICAgICAgICAgcGFyYW1ldGVyX25hbWUgPSBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUKKyAg
ICAgICAgICAgIGlmIHBhcmFtZXRlci5pc19vcHRpb25hbDoKKyAgICAgICAgICAgICAgICBwYXJh
bWV0ZXJfbmFtZSA9ICdvcHRfJyArIHBhcmFtZXRlcl9uYW1lCiAKLSAgICAgICAgICAgIHBhcmFt
ZXRlcl92YWx1ZSA9IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZQotICAgICAgICAgICAgaWYgcGFy
YW1ldGVyLmlzX29wdGlvbmFsIGFuZCBub3QgQ3BwR2VuZXJhdG9yLnNob3VsZF9wYXNzX2J5X2Nv
cHlfZm9yX3JldHVybl90eXBlKHBhcmFtZXRlci50eXBlKToKKyAgICAgICAgICAgIHBhcmFtZXRl
cl92YWx1ZSA9IHBhcmFtZXRlcl9uYW1lCisKKyAgICAgICAgICAgIF90eXBlID0gcGFyYW1ldGVy
LnR5cGUKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoX3R5cGUsIEFsaWFzZWRUeXBlKToKKyAg
ICAgICAgICAgICAgICBfdHlwZSA9IF90eXBlLmFsaWFzZWRfdHlwZQorICAgICAgICAgICAgaWYg
aXNpbnN0YW5jZShfdHlwZSwgRW51bVR5cGUpIGFuZCBfdHlwZS5pc19hbm9ueW1vdXM6CisgICAg
ICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5wcmltaXRpdmVfdHlwZQorCisgICAgICAgICAgICBp
ZiBfdHlwZS5pc19lbnVtKCk6CisgICAgICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlv
bmFsOgorICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfdmFsdWUgPSAnKicgKyBwYXJhbWV0
ZXJfdmFsdWUKKyAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfdmFsdWUgPSAnUHJvdG9jb2w6OiVz
OjpnZXRFbnVtQ29uc3RhbnRWYWx1ZSglcyknICUgKHNlbGYuaGVscGVyc19uYW1lc3BhY2UoKSwg
cGFyYW1ldGVyX3ZhbHVlKQorICAgICAgICAgICAgZWxpZiBDcHBHZW5lcmF0b3Iuc2hvdWxkX3Jl
bGVhc2VfYXJndW1lbnQoX3R5cGUsIHBhcmFtZXRlci5pc19vcHRpb25hbCk6CisgICAgICAgICAg
ICAgICAgcGFyYW1ldGVyX3ZhbHVlID0gcGFyYW1ldGVyX3ZhbHVlICsgJy5yZWxlYXNlTm9uTnVs
bCgpJworICAgICAgICAgICAgZWxpZiBDcHBHZW5lcmF0b3Iuc2hvdWxkX2RlcmVmZXJlbmNlX2Fy
Z3VtZW50KF90eXBlLCBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwpOgogICAgICAgICAgICAgICAgIHBh
cmFtZXRlcl92YWx1ZSA9ICcqJyArIHBhcmFtZXRlcl92YWx1ZQotICAgICAgICAgICAgaWYgcGFy
YW1ldGVyLnR5cGUuaXNfZW51bSgpOgotICAgICAgICAgICAgICAgIHBhcmFtZXRlcl92YWx1ZSA9
ICdJbnNwZWN0b3I6OlByb3RvY29sOjolczo6Z2V0RW51bUNvbnN0YW50VmFsdWUoJXMpJyAlIChz
ZWxmLmhlbHBlcnNfbmFtZXNwYWNlKCksIHBhcmFtZXRlcl92YWx1ZSkKKyAgICAgICAgICAgIGVs
aWYgQ3BwR2VuZXJhdG9yLnNob3VsZF9tb3ZlX2FyZ3VtZW50KF90eXBlLCBwYXJhbWV0ZXIuaXNf
b3B0aW9uYWwpOgorICAgICAgICAgICAgICAgIHBhcmFtZXRlcl92YWx1ZSA9ICdXVEZNb3ZlKCVz
KScgJSBwYXJhbWV0ZXJfdmFsdWUKIAogICAgICAgICAgICAgcGFyYW1ldGVyX2FyZ3MgPSB7Ci0g
ICAgICAgICAgICAgICAgJ3BhcmFtZXRlclR5cGUnOiBDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9y
X3N0YWNrX291dF9wYXJhbWV0ZXIocGFyYW1ldGVyKSwKLSAgICAgICAgICAgICAgICAncGFyYW1l
dGVyTmFtZSc6IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwKKyAgICAgICAgICAgICAgICAncGFy
YW1ldGVyS2V5JzogcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lLAorICAgICAgICAgICAgICAgICdw
YXJhbWV0ZXJOYW1lJzogcGFyYW1ldGVyX25hbWUsCiAgICAgICAgICAgICAgICAgJ3BhcmFtZXRl
clZhbHVlJzogcGFyYW1ldGVyX3ZhbHVlLAotICAgICAgICAgICAgICAgICdrZXllZFNldE1ldGhv
ZCc6IENwcEdlbmVyYXRvci5jcHBfc2V0dGVyX21ldGhvZF9mb3JfdHlwZShwYXJhbWV0ZXIudHlw
ZSksCisgICAgICAgICAgICAgICAgJ2tleWVkU2V0TWV0aG9kJzogQ3BwR2VuZXJhdG9yLmNwcF9z
ZXR0ZXJfbWV0aG9kX2Zvcl90eXBlKF90eXBlKSwKICAgICAgICAgICAgIH0KIAogICAgICAgICAg
ICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgotICAgICAgICAgICAgICAgIHBhcmFtZXRlcl9h
c3NpZ25tZW50cy5hcHBlbmQoJyAgICBpZiAoJShwYXJhbWV0ZXJOYW1lKXMpJyAlIHBhcmFtZXRl
cl9hcmdzKQotICAgICAgICAgICAgICAgIHBhcmFtZXRlcl9hc3NpZ25tZW50cy5hcHBlbmQoJyAg
ICAgICAgcGFyYW1zT2JqZWN0LT4lKGtleWVkU2V0TWV0aG9kKXMoIiUocGFyYW1ldGVyTmFtZSlz
Il9zLCAlKHBhcmFtZXRlclZhbHVlKXMpOycgJSBwYXJhbWV0ZXJfYXJncykKKyAgICAgICAgICAg
ICAgICBwYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAgaWYgKCEhJShwYXJhbWV0ZXJO
YW1lKXMpJyAlIHBhcmFtZXRlcl9hcmdzKQorICAgICAgICAgICAgICAgIHBhcmFtZXRlcl9hc3Np
Z25tZW50cy5hcHBlbmQoJyAgICAgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT4lKGtleWVkU2V0
TWV0aG9kKXMoIiUocGFyYW1ldGVyS2V5KXMiX3MsICUocGFyYW1ldGVyVmFsdWUpcyk7JyAlIHBh
cmFtZXRlcl9hcmdzKQogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBwYXJhbWV0
ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcgICAgcGFyYW1zT2JqZWN0LT4lKGtleWVkU2V0TWV0aG9k
KXMoIiUocGFyYW1ldGVyTmFtZSlzIl9zLCAlKHBhcmFtZXRlclZhbHVlKXMpOycgJSBwYXJhbWV0
ZXJfYXJncykKKyAgICAgICAgICAgICAgICBwYXJhbWV0ZXJfYXNzaWdubWVudHMuYXBwZW5kKCcg
ICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT4lKGtleWVkU2V0TWV0aG9kKXMoIiUocGFyYW1ldGVy
S2V5KXMiX3MsICUocGFyYW1ldGVyVmFsdWUpcyk7JyAlIHBhcmFtZXRlcl9hcmdzKQogCi0gICAg
ICAgICAgICBmb3JtYWxfcGFyYW1ldGVycy5hcHBlbmQoJyVzICVzJyAlIChDcHBHZW5lcmF0b3Iu
Y3BwX3R5cGVfZm9yX2NoZWNrZWRfZm9ybWFsX2V2ZW50X3BhcmFtZXRlcihwYXJhbWV0ZXIpLCBw
YXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpKQorICAgICAgICAgICAgZm9ybWFsX3BhcmFtZXRlcnMu
YXBwZW5kKCclcyAlcycgJSAoQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl9ldmVudF9wYXJhbWV0
ZXIoX3R5cGUsIHBhcmFtZXRlci5pc19vcHRpb25hbCksIHBhcmFtZXRlcl9uYW1lKSkKIAogICAg
ICAgICBldmVudF9hcmdzID0gewogICAgICAgICAgICAgJ2RvbWFpbk5hbWUnOiBkb21haW4uZG9t
YWluX25hbWUsCkBAIC0xMjAsMTUgKzEzNCwxNSBAQCBjbGFzcyBDcHBGcm9udGVuZERpc3BhdGNo
ZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogCiAgICAgICAgIGxpbmVz
LmFwcGVuZCgndm9pZCAlKGRvbWFpbk5hbWUpc0Zyb250ZW5kRGlzcGF0Y2hlcjo6JShldmVudE5h
bWUpcyglKGZvcm1hbFBhcmFtZXRlcnMpcyknICUgZXZlbnRfYXJncykKICAgICAgICAgbGluZXMu
YXBwZW5kKCd7JykKLSAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgUmVmPEpTT046Ok9iamVjdD4g
anNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOycpCi0gICAgICAgIGxpbmVzLmFw
cGVuZCgnICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIiUoZG9tYWluTmFt
ZSlzLiUoZXZlbnROYW1lKXMiX3MpOycgJSBldmVudF9hcmdzKQorICAgICAgICBsaW5lcy5hcHBl
bmQoJyAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUo
KTsnKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0
U3RyaW5nKCJtZXRob2QiX3MsICIlKGRvbWFpbk5hbWUpcy4lKGV2ZW50TmFtZSlzIl9zKTsnICUg
ZXZlbnRfYXJncykKIAogICAgICAgICBpZiBsZW4ocGFyYW1ldGVyX2Fzc2lnbm1lbnRzKSA+IDA6
Ci0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBSZWY8SlNPTjo6T2JqZWN0PiBwYXJhbXNP
YmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOycpCisgICAgICAgICAgICBsaW5lcy5hcHBl
bmQoJyAgICBhdXRvIHByb3RvY29sX3BhcmFtc09iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRl
KCk7JykKICAgICAgICAgICAgIGxpbmVzLmV4dGVuZChwYXJhbWV0ZXJfYXNzaWdubWVudHMpCi0g
ICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJh
bXMiX3MsIFdURk1vdmUocGFyYW1zT2JqZWN0KSk7JykKKyAgICAgICAgICAgIGxpbmVzLmFwcGVu
ZCgnICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyJfcywgV1RGTW92
ZShwcm90b2NvbF9wYXJhbXNPYmplY3QpKTsnKQogCiAgICAgICAgIGxpbmVzLmFwcGVuZCgnJykK
LSAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgbV9mcm9udGVuZFJvdXRlci5zZW5kRXZlbnQoanNv
bk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsnKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBt
X2Zyb250ZW5kUm91dGVyLnNlbmRFdmVudChwcm90b2NvbF9qc29uTWVzc2FnZS0+dG9KU09OU3Ry
aW5nKCkpOycpCiAgICAgICAgIGxpbmVzLmFwcGVuZCgnfScpCiAgICAgICAgIHJldHVybiBzZWxm
LndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGV2ZW50LmNvbmRpdGlvbiwgIlxuIi5qb2lu
KGxpbmVzKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9wcm90b2NvbF90eXBlc19oZWFkZXIucHkgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBf
cHJvdG9jb2xfdHlwZXNfaGVhZGVyLnB5CmluZGV4IDAwMTkyNGRlMGViMDgyN2Y3NDVkM2Q3MzZj
MGFiOTIwMjEyNGRiMzYuLjc4MWQwNmQ5NDA1NjZiMTcyZWM1NWMyZWZiZDEwMWEwMDUwZDcxYTgg
MTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2Rl
Z2VuL2dlbmVyYXRlX2NwcF9wcm90b2NvbF90eXBlc19oZWFkZXIucHkKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX3Byb3Rv
Y29sX3R5cGVzX2hlYWRlci5weQpAQCAtODUsOSArODUsMTAgQEAgY2xhc3MgQ3BwUHJvdG9jb2xU
eXBlc0hlYWRlckdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgIGRlZiBfZ2VuZXJhdGVfc2Vj
b25kYXJ5X2hlYWRlcl9pbmNsdWRlcyhzZWxmKToKICAgICAgICAgaGVhZGVyX2luY2x1ZGVzID0g
WwogICAgICAgICAgICAgKFsiSmF2YVNjcmlwdENvcmUiLCAiV2ViS2l0Il0sICgiSmF2YVNjcmlw
dENvcmUiLCAiaW5zcGVjdG9yL0luc3BlY3RvclByb3RvY29sVHlwZXMuaCIpKSwKLSAgICAgICAg
ICAgIChbIkphdmFTY3JpcHRDb3JlIiwgIldlYktpdCJdLCAoIldURiIsICJ3dGYvQXNzZXJ0aW9u
cy5oIikpCisgICAgICAgICAgICAoWyJKYXZhU2NyaXB0Q29yZSIsICJXZWJLaXQiXSwgKCJXVEYi
LCAid3RmL0pTT05WYWx1ZXMuaCIpKSwKKyAgICAgICAgICAgIChbIkphdmFTY3JpcHRDb3JlIiwg
IldlYktpdCJdLCAoIldURiIsICJ3dGYvT3B0aW9uYWwuaCIpKSwKKyAgICAgICAgICAgIChbIkph
dmFTY3JpcHRDb3JlIiwgIldlYktpdCJdLCAoIldURiIsICJ3dGYvdGV4dC9XVEZTdHJpbmcuaCIp
KSwKICAgICAgICAgXQotCiAgICAgICAgIHJldHVybiAnXG4nLmpvaW4oc2VsZi5nZW5lcmF0ZV9p
bmNsdWRlc19mcm9tX2VudHJpZXMoaGVhZGVyX2luY2x1ZGVzKSkKIAogICAgIGRlZiBfZ2VuZXJh
dGVfdmVyc2lvbnMoc2VsZiwgZG9tYWlucyk6CkBAIC0yMzIsOSArMjMzLDYgQEAgY2xhc3MgQ3Bw
UHJvdG9jb2xUeXBlc0hlYWRlckdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAgICByZXR1
cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihkb21haW4uY29uZGl0aW9uLCAn
XG4nLmpvaW4obGluZXMpKQogCiAgICAgZGVmIF9nZW5lcmF0ZV9jbGFzc19mb3Jfb2JqZWN0X2Rl
Y2xhcmF0aW9uKHNlbGYsIHR5cGVfZGVjbGFyYXRpb24sIGRvbWFpbik6Ci0gICAgICAgIGlmIGxl
bih0eXBlX2RlY2xhcmF0aW9uLnR5cGVfbWVtYmVycykgPT0gMDoKLSAgICAgICAgICAgIHJldHVy
biAnJwotCiAgICAgICAgIGVudW1fbWVtYmVycyA9IFttZW1iZXIgZm9yIG1lbWJlciBpbiB0eXBl
X2RlY2xhcmF0aW9uLnR5cGVfbWVtYmVycyBpZiBpc2luc3RhbmNlKG1lbWJlci50eXBlLCBFbnVt
VHlwZSkgYW5kIG1lbWJlci50eXBlLmlzX2Fub255bW91c10KICAgICAgICAgcmVxdWlyZWRfbWVt
YmVycyA9IFttZW1iZXIgZm9yIG1lbWJlciBpbiB0eXBlX2RlY2xhcmF0aW9uLnR5cGVfbWVtYmVy
cyBpZiBub3QgbWVtYmVyLmlzX29wdGlvbmFsXQogICAgICAgICBvcHRpb25hbF9tZW1iZXJzID0g
W21lbWJlciBmb3IgbWVtYmVyIGluIHR5cGVfZGVjbGFyYXRpb24udHlwZV9tZW1iZXJzIGlmIG1l
bWJlci5pc19vcHRpb25hbF0KQEAgLTI0NiwxMSArMjQ0LDEyIEBAIGNsYXNzIENwcFByb3RvY29s
VHlwZXNIZWFkZXJHZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAgICAgYmFzZV9jbGFzcyA9
ICdKU09OOjpPYmplY3QnCiAgICAgICAgIGlmIG5vdCBHZW5lcmF0b3IudHlwZV9oYXNfb3Blbl9m
aWVsZHModHlwZV9kZWNsYXJhdGlvbi50eXBlKToKICAgICAgICAgICAgIGJhc2VfY2xhc3MgPSBi
YXNlX2NsYXNzICsgJ0Jhc2UnCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnY2xhc3MgJXMgOiBwdWJs
aWMgJXMgeycgJSAob2JqZWN0X25hbWUsIGJhc2VfY2xhc3MpKQorICAgICAgICBsaW5lcy5hcHBl
bmQoJ2NsYXNzICVzIGZpbmFsIDogcHVibGljICVzIHsnICUgKG9iamVjdF9uYW1lLCBiYXNlX2Ns
YXNzKSkKICAgICAgICAgbGluZXMuYXBwZW5kKCdwdWJsaWM6JykKICAgICAgICAgZm9yIGVudW1f
bWVtYmVyIGluIGVudW1fbWVtYmVyczoKICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIC8v
IE5hbWVkIGFmdGVyIHByb3BlcnR5IG5hbWUgXCclc1wnIHdoaWxlIGdlbmVyYXRpbmcgJXMuJyAl
IChlbnVtX21lbWJlci5tZW1iZXJfbmFtZSwgb2JqZWN0X25hbWUpKQogICAgICAgICAgICAgbGlu
ZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX3N0cnVjdF9mb3JfYW5vbnltb3VzX2VudW1fbWVtYmVy
KGVudW1fbWVtYmVyKSkKKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnJykKICAgICAgICAgbGlu
ZXMuYXBwZW5kKHNlbGYuX2dlbmVyYXRlX2J1aWxkZXJfc3RhdGVfZW51bSh0eXBlX2RlY2xhcmF0
aW9uKSkKIAogICAgICAgICBjb25zdHJ1Y3Rvcl9leGFtcGxlID0gW10KQEAgLTI3Nyw3ICsyNzYs
NyBAQCBjbGFzcyBDcHBQcm90b2NvbFR5cGVzSGVhZGVyR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6
CiAgICAgICAgICAgICBvcGVuX21lbWJlcnMgPSBHZW5lcmF0b3Iub3Blbl9maWVsZHModHlwZV9k
ZWNsYXJhdGlvbikKICAgICAgICAgICAgIGZvciB0eXBlX21lbWJlciBpbiBvcGVuX21lbWJlcnM6
CiAgICAgICAgICAgICAgICAgZXhwb3J0X21hY3JvID0gc2VsZi5tb2RlbCgpLmZyYW1ld29yay5z
ZXR0aW5nKCdleHBvcnRfbWFjcm8nLCBOb25lKQotICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVu
ZCgnICAgICVzIHN0YXRpYyBjb25zdCBjaGFyKiAlczsnICUgKGV4cG9ydF9tYWNybywgdWNmaXJz
dCh0eXBlX21lbWJlci5tZW1iZXJfbmFtZSkpKQorICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVu
ZCgnICAgICVzIHN0YXRpYyBjb25zdCBjaGFyKiAlc0tleTsnICUgKGV4cG9ydF9tYWNybywgdHlw
ZV9tZW1iZXIubWVtYmVyX25hbWUpKQogCiAgICAgICAgIGxpbmVzLmFwcGVuZCgnfTsnKQogICAg
ICAgICByZXR1cm4gc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbih0eXBlX2RlY2xh
cmF0aW9uLmNvbmRpdGlvbiwgJ1xuJy5qb2luKGxpbmVzKSkKQEAgLTMyOCw0NyArMzI3LDU2IEBA
IGNsYXNzIENwcFByb3RvY29sVHlwZXNIZWFkZXJHZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAg
ICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKIAogICAgIGRlZiBfZ2VuZXJhdGVfYnVpbGRl
cl9zZXR0ZXJfZm9yX21lbWJlcihzZWxmLCB0eXBlX21lbWJlciwgZG9tYWluKToKKyAgICAgICAg
bWVtYmVyX25hbWUgPSAnaW5fJyArIHR5cGVfbWVtYmVyLm1lbWJlcl9uYW1lCisKKyAgICAgICAg
bWVtYmVyX3ZhbHVlID0gbWVtYmVyX25hbWUKKyAgICAgICAgaWYgdHlwZV9tZW1iZXIudHlwZS5p
c19lbnVtKCk6CisgICAgICAgICAgICBtZW1iZXJfdmFsdWUgPSAnUHJvdG9jb2w6OiVzOjpnZXRF
bnVtQ29uc3RhbnRWYWx1ZSglcyknICUgKHNlbGYuaGVscGVyc19uYW1lc3BhY2UoKSwgbWVtYmVy
X3ZhbHVlKQorICAgICAgICBlbGlmIENwcEdlbmVyYXRvci5zaG91bGRfbW92ZV9hcmd1bWVudCh0
eXBlX21lbWJlci50eXBlLCBGYWxzZSk6CisgICAgICAgICAgICBtZW1iZXJfdmFsdWUgPSAnV1RG
TW92ZSglcyknICUgbWVtYmVyX3ZhbHVlCisKICAgICAgICAgc2V0dGVyX2FyZ3MgPSB7CiAgICAg
ICAgICAgICAnY2FtZWxOYW1lJzogdWNmaXJzdCh0eXBlX21lbWJlci5tZW1iZXJfbmFtZSksCi0g
ICAgICAgICAgICAna2V5ZWRTZXQnOiBDcHBHZW5lcmF0b3IuY3BwX3NldHRlcl9tZXRob2RfZm9y
X3R5cGUodHlwZV9tZW1iZXIudHlwZSksCi0gICAgICAgICAgICAnbmFtZSc6IHR5cGVfbWVtYmVy
Lm1lbWJlcl9uYW1lLAotICAgICAgICAgICAgJ3BhcmFtZXRlclR5cGUnOiBDcHBHZW5lcmF0b3Iu
Y3BwX3R5cGVfZm9yX3R5cGVfbWVtYmVyKHR5cGVfbWVtYmVyKSwKLSAgICAgICAgICAgICdoZWxw
ZXJzTmFtZXNwYWNlJzogc2VsZi5oZWxwZXJzX25hbWVzcGFjZSgpLAorICAgICAgICAgICAgJ3Nl
dHRlcic6IENwcEdlbmVyYXRvci5jcHBfc2V0dGVyX21ldGhvZF9mb3JfdHlwZSh0eXBlX21lbWJl
ci50eXBlKSwKKyAgICAgICAgICAgICdtZW1iZXJUeXBlJzogQ3BwR2VuZXJhdG9yLmNwcF90eXBl
X2Zvcl90eXBlX21lbWJlcl9hcmd1bWVudCh0eXBlX21lbWJlci50eXBlLCB0eXBlX21lbWJlci5t
ZW1iZXJfbmFtZSksCisgICAgICAgICAgICAnbWVtYmVyS2V5JzogdHlwZV9tZW1iZXIubWVtYmVy
X25hbWUsCisgICAgICAgICAgICAnbWVtYmVyTmFtZSc6IG1lbWJlcl9uYW1lLAorICAgICAgICAg
ICAgJ21lbWJlclZhbHVlJzogbWVtYmVyX3ZhbHVlLAogICAgICAgICB9CiAKICAgICAgICAgbGlu
ZXMgPSBbXQogICAgICAgICBsaW5lcy5hcHBlbmQoJycpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgn
ICAgICAgICBCdWlsZGVyPFNUQVRFIHwgJShjYW1lbE5hbWUpc1NldD4mIHNldCUoY2FtZWxOYW1l
KXMoJShwYXJhbWV0ZXJUeXBlKXMgdmFsdWUpJyAlIHNldHRlcl9hcmdzKQorICAgICAgICBsaW5l
cy5hcHBlbmQoJyAgICAgICAgQnVpbGRlcjxTVEFURSB8ICUoY2FtZWxOYW1lKXNTZXQ+JiBzZXQl
KGNhbWVsTmFtZSlzKCUobWVtYmVyVHlwZSlzICUobWVtYmVyTmFtZSlzKScgJSBzZXR0ZXJfYXJn
cykKICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIHsnKQotICAgICAgICBsaW5lcy5hcHBl
bmQoJyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiAlKGNhbWVsTmFtZSlzU2V0
KSwgcHJvcGVydHlfJShuYW1lKXNfYWxyZWFkeV9zZXQpOycgJSBzZXR0ZXJfYXJncykKLQotICAg
ICAgICBpZiBpc2luc3RhbmNlKHR5cGVfbWVtYmVyLnR5cGUsIEVudW1UeXBlKToKLSAgICAgICAg
ICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICAgICAgbV9yZXN1bHQtPiUoa2V5ZWRTZXQpcygiJShu
YW1lKXMiX3MsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OiUoaGVscGVyc05hbWVzcGFjZSlzOjpnZXRF
bnVtQ29uc3RhbnRWYWx1ZSh2YWx1ZSkpOycgJSBzZXR0ZXJfYXJncykKLSAgICAgICAgZWxzZToK
LSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICAgICAgbV9yZXN1bHQtPiUoa2V5ZWRT
ZXQpcygiJShuYW1lKXMiX3MsIHZhbHVlKTsnICUgc2V0dGVyX2FyZ3MpCisgICAgICAgIGxpbmVz
LmFwcGVuZCgnICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmICUoY2FtZWxOYW1l
KXNTZXQpLCBwcm9wZXJ0eV8lKG1lbWJlcktleSlzX2FscmVhZHlfc2V0KTsnICUgc2V0dGVyX2Fy
Z3MpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICAgICAgbV9yZXN1bHQtPiUoc2V0dGVy
KXMoIiUobWVtYmVyS2V5KXMiX3MsICUobWVtYmVyVmFsdWUpcyk7JyAlIHNldHRlcl9hcmdzKQog
ICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8JShjYW1l
bE5hbWUpc1NldD4oKTsnICUgc2V0dGVyX2FyZ3MpCiAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAg
ICAgICB9JykKICAgICAgICAgcmV0dXJuICdcbicuam9pbihsaW5lcykKIAogICAgIGRlZiBfZ2Vu
ZXJhdGVfdW5jaGVja2VkX3NldHRlcl9mb3JfbWVtYmVyKHNlbGYsIHR5cGVfbWVtYmVyLCBkb21h
aW4pOgorICAgICAgICBtZW1iZXJfbmFtZSA9ICdpbl9vcHRfJyArIHR5cGVfbWVtYmVyLm1lbWJl
cl9uYW1lCisKKyAgICAgICAgbWVtYmVyX3ZhbHVlID0gbWVtYmVyX25hbWUKKyAgICAgICAgaWYg
dHlwZV9tZW1iZXIudHlwZS5pc19lbnVtKCk6CisgICAgICAgICAgICBtZW1iZXJfdmFsdWUgPSAn
UHJvdG9jb2w6OiVzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZSglcyknICUgKHNlbGYuaGVscGVyc19u
YW1lc3BhY2UoKSwgbWVtYmVyX3ZhbHVlKQorICAgICAgICBlbGlmIENwcEdlbmVyYXRvci5zaG91
bGRfbW92ZV9hcmd1bWVudCh0eXBlX21lbWJlci50eXBlLCBGYWxzZSk6CisgICAgICAgICAgICBt
ZW1iZXJfdmFsdWUgPSAnV1RGTW92ZSglcyknICUgbWVtYmVyX3ZhbHVlCisKICAgICAgICAgc2V0
dGVyX2FyZ3MgPSB7CiAgICAgICAgICAgICAnY2FtZWxOYW1lJzogdWNmaXJzdCh0eXBlX21lbWJl
ci5tZW1iZXJfbmFtZSksCi0gICAgICAgICAgICAna2V5ZWRTZXQnOiBDcHBHZW5lcmF0b3IuY3Bw
X3NldHRlcl9tZXRob2RfZm9yX3R5cGUodHlwZV9tZW1iZXIudHlwZSksCi0gICAgICAgICAgICAn
bmFtZSc6IHR5cGVfbWVtYmVyLm1lbWJlcl9uYW1lLAotICAgICAgICAgICAgJ3BhcmFtZXRlclR5
cGUnOiBDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX3R5cGVfbWVtYmVyKHR5cGVfbWVtYmVyKSwK
LSAgICAgICAgICAgICdoZWxwZXJzTmFtZXNwYWNlJzogc2VsZi5oZWxwZXJzX25hbWVzcGFjZSgp
LAorICAgICAgICAgICAgJ3NldHRlcic6IENwcEdlbmVyYXRvci5jcHBfc2V0dGVyX21ldGhvZF9m
b3JfdHlwZSh0eXBlX21lbWJlci50eXBlKSwKKyAgICAgICAgICAgICdtZW1iZXJLZXknOiB0eXBl
X21lbWJlci5tZW1iZXJfbmFtZSwKKyAgICAgICAgICAgICdtZW1iZXJOYW1lJzogbWVtYmVyX25h
bWUsCisgICAgICAgICAgICAnbWVtYmVyVmFsdWUnOiBtZW1iZXJfdmFsdWUsCisgICAgICAgICAg
ICAnbWVtYmVyVHlwZSc6IENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3JfdHlwZV9tZW1iZXJfYXJn
dW1lbnQodHlwZV9tZW1iZXIudHlwZSwgdHlwZV9tZW1iZXIubWVtYmVyX25hbWUpLAogICAgICAg
ICB9CiAKICAgICAgICAgbGluZXMgPSBbXQogICAgICAgICBsaW5lcy5hcHBlbmQoJycpCi0gICAg
ICAgIGxpbmVzLmFwcGVuZCgnICAgIHZvaWQgc2V0JShjYW1lbE5hbWUpcyglKHBhcmFtZXRlclR5
cGUpcyB2YWx1ZSknICUgc2V0dGVyX2FyZ3MpCisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIHZv
aWQgc2V0JShjYW1lbE5hbWUpcyglKG1lbWJlclR5cGUpcyAlKG1lbWJlck5hbWUpcyknICUgc2V0
dGVyX2FyZ3MpCiAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIHsnKQotICAgICAgICBpZiBpc2lu
c3RhbmNlKHR5cGVfbWVtYmVyLnR5cGUsIEVudW1UeXBlKToKLSAgICAgICAgICAgIGxpbmVzLmFw
cGVuZCgnICAgICAgICBKU09OOjpPYmplY3RCYXNlOjolKGtleWVkU2V0KXMoIiUobmFtZSlzIl9z
LCBJbnNwZWN0b3I6OlByb3RvY29sOjolKGhlbHBlcnNOYW1lc3BhY2Upczo6Z2V0RW51bUNvbnN0
YW50VmFsdWUodmFsdWUpKTsnICUgc2V0dGVyX2FyZ3MpCi0gICAgICAgIGVsaWYgQ3BwR2VuZXJh
dG9yLnNob3VsZF91c2VfcmVmZXJlbmNlc19mb3JfdHlwZSh0eXBlX21lbWJlci50eXBlKToKLSAg
ICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBKU09OOjpPYmplY3RCYXNlOjolKGtleWVk
U2V0KXMoIiUobmFtZSlzIl9zLCBXVEZNb3ZlKHZhbHVlKSk7JyAlIHNldHRlcl9hcmdzKQotICAg
ICAgICBlbHNlOgotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIEpTT046Ok9iamVj
dEJhc2U6OiUoa2V5ZWRTZXQpcygiJShuYW1lKXMiX3MsIHZhbHVlKTsnICUgc2V0dGVyX2FyZ3Mp
CisgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBKU09OOjpPYmplY3RCYXNlOjolKHNldHRl
cilzKCIlKG1lbWJlcktleSlzIl9zLCAlKG1lbWJlclZhbHVlKXMpOycgJSBzZXR0ZXJfYXJncykK
ICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgfScpCiAgICAgICAgIHJldHVybiAnXG4nLmpvaW4o
bGluZXMpCiAKQEAgLTM4MSwxMyArMzg5LDEzIEBAIGNsYXNzIENwcFByb3RvY29sVHlwZXNIZWFk
ZXJHZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAgICAgICAgIGRlY2xhcmF0aW9uc190b19n
ZW5lcmF0ZSA9IFtkZWNsIGZvciBkZWNsIGluIHR5cGVfZGVjbGFyYXRpb25zIGlmIHNlbGYudHlw
ZV9uZWVkc19zaGFwZV9hc3NlcnRpb25zKGRlY2wudHlwZSldCiAKICAgICAgICAgICAgIGZvciB0
eXBlX2RlY2xhcmF0aW9uIGluIGRlY2xhcmF0aW9uc190b19nZW5lcmF0ZToKLSAgICAgICAgICAg
ICAgICBmb3IgdHlwZV9tZW1iZXIgaW4gdHlwZV9kZWNsYXJhdGlvbi50eXBlX21lbWJlcnM6Ci0g
ICAgICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodHlwZV9tZW1iZXIudHlwZSwgRW51bVR5
cGUpOgotICAgICAgICAgICAgICAgICAgICAgICAgdHlwZV9hcmd1bWVudHMuYXBwZW5kKChzZWxm
LndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKHR5cGVfZGVjbGFyYXRpb24uY29uZGl0aW9u
LCBDcHBHZW5lcmF0b3IuY3BwX3Byb3RvY29sX3R5cGVfZm9yX3R5cGVfbWVtYmVyKHR5cGVfbWVt
YmVyLCB0eXBlX2RlY2xhcmF0aW9uKSksIEZhbHNlKSkKLQogICAgICAgICAgICAgICAgIGlmIGlz
aW5zdGFuY2UodHlwZV9kZWNsYXJhdGlvbi50eXBlLCBPYmplY3RUeXBlKToKICAgICAgICAgICAg
ICAgICAgICAgdHlwZV9hcmd1bWVudHMuYXBwZW5kKChzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3Jf
Y29uZGl0aW9uKHR5cGVfZGVjbGFyYXRpb24uY29uZGl0aW9uLCBDcHBHZW5lcmF0b3IuY3BwX3By
b3RvY29sX3R5cGVfZm9yX3R5cGUodHlwZV9kZWNsYXJhdGlvbi50eXBlKSksIEdlbmVyYXRvci50
eXBlX25lZWRzX3J1bnRpbWVfY2FzdHModHlwZV9kZWNsYXJhdGlvbi50eXBlKSkpCiAKKyAgICAg
ICAgICAgICAgICBmb3IgdHlwZV9tZW1iZXIgaW4gdHlwZV9kZWNsYXJhdGlvbi50eXBlX21lbWJl
cnM6CisgICAgICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodHlwZV9tZW1iZXIudHlwZSwg
RW51bVR5cGUpOgorICAgICAgICAgICAgICAgICAgICAgICAgdHlwZV9hcmd1bWVudHMuYXBwZW5k
KChzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKHR5cGVfZGVjbGFyYXRpb24uY29u
ZGl0aW9uLCBDcHBHZW5lcmF0b3IuY3BwX3R5cGVfZm9yX2VudW0odHlwZV9tZW1iZXIudHlwZSwg
JyVzOjolcycgJSAodHlwZV9kZWNsYXJhdGlvbi50eXBlX25hbWUsIHVjZmlyc3QodHlwZV9tZW1i
ZXIubWVtYmVyX25hbWUpKSkpLCBGYWxzZSkpCisKICAgICAgICAgc3RydWN0X2tleXdvcmRzID0g
WydzdHJ1Y3QnXQogICAgICAgICBmdW5jdGlvbl9rZXl3b3JkcyA9IFsnc3RhdGljIHZvaWQnXQog
ICAgICAgICBleHBvcnRfbWFjcm8gPSBzZWxmLm1vZGVsKCkuZnJhbWV3b3JrLnNldHRpbmcoJ2V4
cG9ydF9tYWNybycsIE5vbmUpCkBAIC0zOTksNyArNDA3LDcgQEAgY2xhc3MgQ3BwUHJvdG9jb2xU
eXBlc0hlYWRlckdlbmVyYXRvcihDcHBHZW5lcmF0b3IpOgogICAgICAgICBmb3IgYXJndW1lbnQg
aW4gdHlwZV9hcmd1bWVudHM6CiAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ3RlbXBsYXRlPD4g
JXMgQmluZGluZ1RyYWl0czwlcz4geycgJSAoJyAnLmpvaW4oc3RydWN0X2tleXdvcmRzKSwgYXJn
dW1lbnRbMF0pKQogICAgICAgICAgICAgaWYgYXJndW1lbnRbMV06Ci0gICAgICAgICAgICAgICAg
bGluZXMuYXBwZW5kKCdzdGF0aWMgUmVmUHRyPCVzPiBydW50aW1lQ2FzdChSZWZQdHI8SlNPTjo6
VmFsdWU+JiYgdmFsdWUpOycgJSBhcmd1bWVudFswXSkKKyAgICAgICAgICAgICAgICBsaW5lcy5h
cHBlbmQoJ3N0YXRpYyBSZWY8JXM+IHJ1bnRpbWVDYXN0KFJlZjxKU09OOjpWYWx1ZT4mJiB2YWx1
ZSk7JyAlIGFyZ3VtZW50WzBdKQogICAgICAgICAgICAgbGluZXMuYXBwZW5kKCclcyBhc3NlcnRW
YWx1ZUhhc0V4cGVjdGVkVHlwZShKU09OOjpWYWx1ZSopOycgJSAnICcuam9pbihmdW5jdGlvbl9r
ZXl3b3JkcykpCiAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJ307JykKICAgICAgICAgcmV0dXJu
ICdcbicuam9pbihsaW5lcykKQEAgLTQzOCwxMyArNDQ2LDEzIEBAIGNsYXNzIENwcFByb3RvY29s
VHlwZXNIZWFkZXJHZW5lcmF0b3IoQ3BwR2VuZXJhdG9yKToKICAgICAgICAgICAgIGRvbWFpbl9s
aW5lcyA9IFtdCiAgICAgICAgICAgICBkb21haW5fbGluZXMuYXBwZW5kKCIvLyBFbnVtcyBpbiB0
aGUgJyVzJyBEb21haW4iICUgZG9tYWluLmRvbWFpbl9uYW1lKQogICAgICAgICAgICAgZm9yIGVu
dW1fdHlwZSBpbiBlbnVtX3R5cGVzOgotICAgICAgICAgICAgICAgIGNwcF9wcm90b2NvbF90eXBl
ID0gQ3BwR2VuZXJhdG9yLmNwcF9wcm90b2NvbF90eXBlX2Zvcl90eXBlKGVudW1fdHlwZSkKKyAg
ICAgICAgICAgICAgICBjcHBfcHJvdG9jb2xfdHlwZSA9IENwcEdlbmVyYXRvci5jcHBfdHlwZV9m
b3JfZW51bShlbnVtX3R5cGUsIGVudW1fdHlwZS5yYXdfbmFtZSgpKQogICAgICAgICAgICAgICAg
IGRvbWFpbl9saW5lcy5hcHBlbmQoc2VsZi53cmFwX3dpdGhfZ3VhcmRfZm9yX2NvbmRpdGlvbihl
bnVtX3R5cGUuZGVjbGFyYXRpb24oKS5jb25kaXRpb24sICd0ZW1wbGF0ZTw+XG4lcyBwYXJzZUVu
dW1WYWx1ZUZyb21TdHJpbmc8JXM+KGNvbnN0IFN0cmluZyYpOycgJSAocmV0dXJuX3R5cGVfd2l0
aF9leHBvcnRfbWFjcm8oY3BwX3Byb3RvY29sX3R5cGUpLCBjcHBfcHJvdG9jb2xfdHlwZSkpKQog
CiAgICAgICAgICAgICBmb3Igb2JqZWN0X3R5cGUgaW4gb2JqZWN0X3R5cGVzOgogICAgICAgICAg
ICAgICAgIG9iamVjdF9saW5lcyA9IFtdCiAgICAgICAgICAgICAgICAgZm9yIGVudW1fbWVtYmVy
IGluIGZpbHRlcih0eXBlX21lbWJlcl9pc19hbm9ueW1vdXNfZW51bV90eXBlLCBvYmplY3RfdHlw
ZS5tZW1iZXJzKToKLSAgICAgICAgICAgICAgICAgICAgY3BwX3Byb3RvY29sX3R5cGUgPSBDcHBH
ZW5lcmF0b3IuY3BwX3Byb3RvY29sX3R5cGVfZm9yX3R5cGVfbWVtYmVyKGVudW1fbWVtYmVyLCBv
YmplY3RfdHlwZS5kZWNsYXJhdGlvbigpKQorICAgICAgICAgICAgICAgICAgICBjcHBfcHJvdG9j
b2xfdHlwZSA9IENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3JfZW51bShlbnVtX21lbWJlci50eXBl
LCAnJXM6OiVzJyAlIChvYmplY3RfdHlwZS5yYXdfbmFtZSgpLCB1Y2ZpcnN0KGVudW1fbWVtYmVy
Lm1lbWJlcl9uYW1lKSkpCiAgICAgICAgICAgICAgICAgICAgIG9iamVjdF9saW5lcy5hcHBlbmQo
J3RlbXBsYXRlPD5cbiVzIHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzwlcz4oY29uc3QgU3RyaW5n
Jik7JyAlIChyZXR1cm5fdHlwZV93aXRoX2V4cG9ydF9tYWNybyhjcHBfcHJvdG9jb2xfdHlwZSks
IGNwcF9wcm90b2NvbF90eXBlKSkKICAgICAgICAgICAgICAgICBpZiBsZW4ob2JqZWN0X2xpbmVz
KToKICAgICAgICAgICAgICAgICAgICAgZG9tYWluX2xpbmVzLmFwcGVuZChzZWxmLndyYXBfd2l0
aF9ndWFyZF9mb3JfY29uZGl0aW9uKG9iamVjdF90eXBlLmRlY2xhcmF0aW9uKCkuY29uZGl0aW9u
LCAnXG4nLmpvaW4ob2JqZWN0X2xpbmVzKSkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfcHJvdG9jb2xfdHlw
ZXNfaW1wbGVtZW50YXRpb24ucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Nj
cmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9jcHBfcHJvdG9jb2xfdHlwZXNfaW1wbGVtZW50YXRpb24u
cHkKaW5kZXggNWRkNTM0Njk0NDg1NTE1NDhkNjdhYTBiNDU2YzZhMWE2NjU4ZDU5My4uMTNlNTg5
NzI2ZDRjZGI3YTQ1MmM2NzBjODMyNWViMWEzOWVlNjIyMiAxMDA3NTUKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfY3BwX3Byb3Rv
Y29sX3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX2NwcF9wcm90b2NvbF90eXBlc19pbXBs
ZW1lbnRhdGlvbi5weQpAQCAtODIsMTAgKzgyLDggQEAgY2xhc3MgQ3BwUHJvdG9jb2xUeXBlc0lt
cGxlbWVudGF0aW9uR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAKICAgICBkZWYgX2dlbmVyYXRl
X3NlY29uZGFyeV9oZWFkZXJfaW5jbHVkZXMoc2VsZik6CiAgICAgICAgIGhlYWRlcl9pbmNsdWRl
cyA9IFsKLSAgICAgICAgICAgIChbIkphdmFTY3JpcHRDb3JlIiwgIldlYktpdCJdLCAoIldURiIs
ICJ3dGYvT3B0aW9uYWwuaCIpKSwKLSAgICAgICAgICAgIChbIkphdmFTY3JpcHRDb3JlIiwgIldl
YktpdCJdLCAoIldURiIsICJ3dGYvdGV4dC9DU3RyaW5nLmgiKSksCisgICAgICAgICAgICAoWyJK
YXZhU2NyaXB0Q29yZSIsICJXZWJLaXQiXSwgKCJXVEYiLCAid3RmL0Fzc2VydGlvbnMuaCIpKSwK
ICAgICAgICAgXQotCiAgICAgICAgIHJldHVybiAnXG4nLmpvaW4oc2VsZi5nZW5lcmF0ZV9pbmNs
dWRlc19mcm9tX2VudHJpZXMoaGVhZGVyX2luY2x1ZGVzKSkKIAogICAgIGRlZiBfZ2VuZXJhdGVf
ZW51bV9tYXBwaW5nKHNlbGYpOgpAQCAtMTQ0LDE0ICsxNDIsMTQgQEAgY2xhc3MgQ3BwUHJvdG9j
b2xUeXBlc0ltcGxlbWVudGF0aW9uR2VuZXJhdG9yKENwcEdlbmVyYXRvcik6CiAgICAgICAgIGxp
bmVzID0gW10KICAgICAgICAgbGluZXMuYXBwZW5kKCIvLyBFbnVtcyBpbiB0aGUgJyVzJyBEb21h
aW4iICUgZG9tYWluLmRvbWFpbl9uYW1lKQogICAgICAgICBmb3IgZW51bV90eXBlIGluIGVudW1f
dHlwZXM6Ci0gICAgICAgICAgICBjcHBfcHJvdG9jb2xfdHlwZSA9IENwcEdlbmVyYXRvci5jcHBf
cHJvdG9jb2xfdHlwZV9mb3JfdHlwZShlbnVtX3R5cGUpCisgICAgICAgICAgICBjcHBfcHJvdG9j
b2xfdHlwZSA9IENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3JfZW51bShlbnVtX3R5cGUsIGVudW1f
dHlwZS5yYXdfbmFtZSgpKQogICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcnKQogICAgICAgICAg
ICAgbGluZXMuYXBwZW5kKHNlbGYud3JhcF93aXRoX2d1YXJkX2Zvcl9jb25kaXRpb24oZW51bV90
eXBlLmRlY2xhcmF0aW9uKCkuY29uZGl0aW9uLCBnZW5lcmF0ZV9jb252ZXJzaW9uX21ldGhvZF9i
b2R5KGVudW1fdHlwZSwgY3BwX3Byb3RvY29sX3R5cGUpKSkKIAogICAgICAgICBmb3Igb2JqZWN0
X3R5cGUgaW4gb2JqZWN0X3R5cGVzOgogICAgICAgICAgICAgb2JqZWN0X2xpbmVzID0gW10KICAg
ICAgICAgICAgIGZvciBlbnVtX21lbWJlciBpbiBmaWx0ZXIodHlwZV9tZW1iZXJfaXNfYW5vbnlt
b3VzX2VudW1fdHlwZSwgb2JqZWN0X3R5cGUubWVtYmVycyk6Ci0gICAgICAgICAgICAgICAgY3Bw
X3Byb3RvY29sX3R5cGUgPSBDcHBHZW5lcmF0b3IuY3BwX3Byb3RvY29sX3R5cGVfZm9yX3R5cGVf
bWVtYmVyKGVudW1fbWVtYmVyLCBvYmplY3RfdHlwZS5kZWNsYXJhdGlvbigpKQorICAgICAgICAg
ICAgICAgIGNwcF9wcm90b2NvbF90eXBlID0gQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl9lbnVt
KGVudW1fbWVtYmVyLnR5cGUsICclczo6JXMnICUgKG9iamVjdF90eXBlLnJhd19uYW1lKCksIHVj
Zmlyc3QoZW51bV9tZW1iZXIubWVtYmVyX25hbWUpKSkKICAgICAgICAgICAgICAgICBvYmplY3Rf
bGluZXMuYXBwZW5kKGdlbmVyYXRlX2NvbnZlcnNpb25fbWV0aG9kX2JvZHkoZW51bV9tZW1iZXIu
dHlwZSwgY3BwX3Byb3RvY29sX3R5cGUpKQogICAgICAgICAgICAgaWYgbGVuKG9iamVjdF9saW5l
cyk6CiAgICAgICAgICAgICAgICAgaWYgbGVuKGxpbmVzKToKQEAgLTE4Myw4ICsxODEsNyBAQCBj
bGFzcyBDcHBQcm90b2NvbFR5cGVzSW1wbGVtZW50YXRpb25HZW5lcmF0b3IoQ3BwR2VuZXJhdG9y
KToKICAgICAgICAgICAgIGZvciB0eXBlX2RlY2xhcmF0aW9uIGluIFtkZWNsIGZvciBkZWNsIGlu
IHR5cGVfZGVjbGFyYXRpb25zIGlmIEdlbmVyYXRvci50eXBlX2hhc19vcGVuX2ZpZWxkcyhkZWNs
LnR5cGUpXToKICAgICAgICAgICAgICAgICBvcGVuX21lbWJlcnMgPSBHZW5lcmF0b3Iub3Blbl9m
aWVsZHModHlwZV9kZWNsYXJhdGlvbikKICAgICAgICAgICAgICAgICBmb3IgdHlwZV9tZW1iZXIg
aW4gc29ydGVkKG9wZW5fbWVtYmVycywga2V5PWxhbWJkYSBtZW1iZXI6IG1lbWJlci5tZW1iZXJf
bmFtZSk6Ci0gICAgICAgICAgICAgICAgICAgIGZpZWxkX25hbWUgPSAnOjonLmpvaW4oWydJbnNw
ZWN0b3InLCAnUHJvdG9jb2wnLCBkb21haW4uZG9tYWluX25hbWUsIHVjZmlyc3QodHlwZV9kZWNs
YXJhdGlvbi50eXBlX25hbWUpLCB1Y2ZpcnN0KHR5cGVfbWVtYmVyLm1lbWJlcl9uYW1lKV0pCi0g
ICAgICAgICAgICAgICAgICAgIGRvbWFpbl9saW5lcy5hcHBlbmQoJ2NvbnN0IGNoYXIqICVzID0g
IiVzIjsnICUgKGZpZWxkX25hbWUsIHR5cGVfbWVtYmVyLm1lbWJlcl9uYW1lKSkKKyAgICAgICAg
ICAgICAgICAgICAgZG9tYWluX2xpbmVzLmFwcGVuZCgnY29uc3QgY2hhciogUHJvdG9jb2w6OiVz
Ojolczo6JXNLZXkgPSAiJXMiOycgJSAoZG9tYWluLmRvbWFpbl9uYW1lLCB1Y2ZpcnN0KHR5cGVf
ZGVjbGFyYXRpb24udHlwZV9uYW1lKSwgdHlwZV9tZW1iZXIubWVtYmVyX25hbWUsIHR5cGVfbWVt
YmVyLm1lbWJlcl9uYW1lKSkKICAgICAgICAgICAgIGlmIGxlbihkb21haW5fbGluZXMpOgogICAg
ICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0
aW9uKGRvbWFpbi5jb25kaXRpb24sICdcbicuam9pbihkb21haW5fbGluZXMpKSkKIApAQCAtMjI3
LDM3ICsyMjQsNTQgQEAgY2xhc3MgQ3BwUHJvdG9jb2xUeXBlc0ltcGxlbWVudGF0aW9uR2VuZXJh
dG9yKENwcEdlbmVyYXRvcik6CiAKICAgICAgICAgbGluZXMuYXBwZW5kKCd2b2lkIEJpbmRpbmdU
cmFpdHM8JXM+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShKU09OOjpWYWx1ZSogdmFsdWUp
JyAlIChDcHBHZW5lcmF0b3IuY3BwX3Byb3RvY29sX3R5cGVfZm9yX3R5cGUob2JqZWN0X2RlY2xh
cmF0aW9uLnR5cGUpKSkKICAgICAgICAgbGluZXMuYXBwZW5kKCIiInsKKyAgICBBU1NFUlRfVU5V
U0VEKHZhbHVlLCB2YWx1ZSk7CiAjaWYgQVNTRVJUX0VOQUJMRUQKLSAgICBBU1NFUlRfQVJHKHZh
bHVlLCB2YWx1ZSk7Ci0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gb2JqZWN0OwotICAgIGJvb2wg
Y2FzdFN1Y2NlZWRlZCA9IHZhbHVlLT5hc09iamVjdChvYmplY3QpOwotICAgIEFTU0VSVF9VTlVT
RUQoY2FzdFN1Y2NlZWRlZCwgY2FzdFN1Y2NlZWRlZCk7IiIiKQorICAgIGF1dG8gb2JqZWN0ID0g
dmFsdWUtPmFzT2JqZWN0KCk7CisgICAgQVNTRVJUKG9iamVjdCk7IiIiKQogICAgICAgICBmb3Ig
dHlwZV9tZW1iZXIgaW4gcmVxdWlyZWRfbWVtYmVyczoKKyAgICAgICAgICAgIG1lbWJlcl90eXBl
ID0gdHlwZV9tZW1iZXIudHlwZQorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShtZW1iZXJfdHlw
ZSwgQWxpYXNlZFR5cGUpOgorICAgICAgICAgICAgICAgIG1lbWJlcl90eXBlID0gbWVtYmVyX3R5
cGUuYWxpYXNlZF90eXBlCisKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UobWVtYmVyX3R5cGUs
IEVudW1UeXBlKToKKyAgICAgICAgICAgICAgICBtZW1iZXJfdHlwZSA9IENwcEdlbmVyYXRvci5j
cHBfdHlwZV9mb3JfZW51bShtZW1iZXJfdHlwZSwgJyVzOjolcycgJSAob2JqZWN0X2RlY2xhcmF0
aW9uLnR5cGVfbmFtZSwgdWNmaXJzdCh0eXBlX21lbWJlci5tZW1iZXJfbmFtZSkpKQorICAgICAg
ICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBtZW1iZXJfdHlwZSA9IENwcEdlbmVyYXRvci5j
cHBfcHJvdG9jb2xfdHlwZV9mb3JfdHlwZShtZW1iZXJfdHlwZSkKKwogICAgICAgICAgICAgYXJn
cyA9IHsKICAgICAgICAgICAgICAgICAnbWVtYmVyTmFtZSc6IHR5cGVfbWVtYmVyLm1lbWJlcl9u
YW1lLAotICAgICAgICAgICAgICAgICdhc3NlcnRNZXRob2QnOiBDcHBHZW5lcmF0b3IuY3BwX2Fz
c2VydGlvbl9tZXRob2RfZm9yX3R5cGVfbWVtYmVyKHR5cGVfbWVtYmVyLCBvYmplY3RfZGVjbGFy
YXRpb24pCisgICAgICAgICAgICAgICAgJ21lbWJlclR5cGUnOiBtZW1iZXJfdHlwZQogICAgICAg
ICAgICAgfQogCiAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoIiIiICAgIHsKICAgICAgICAgYXV0
byAlKG1lbWJlck5hbWUpc1BvcyA9IG9iamVjdC0+ZmluZCgiJShtZW1iZXJOYW1lKXMiX3MpOwog
ICAgICAgICBBU1NFUlQoJShtZW1iZXJOYW1lKXNQb3MgIT0gb2JqZWN0LT5lbmQoKSk7Ci0gICAg
ICAgICUoYXNzZXJ0TWV0aG9kKXMoJShtZW1iZXJOYW1lKXNQb3MtPnZhbHVlLmdldCgpKTsKKyAg
ICAgICAgQmluZGluZ1RyYWl0czwlKG1lbWJlclR5cGUpcz46OmFzc2VydFZhbHVlSGFzRXhwZWN0
ZWRUeXBlKCUobWVtYmVyTmFtZSlzUG9zLT52YWx1ZS5wdHIoKSk7CiAgICAgfSIiIiAlIGFyZ3Mp
CiAKICAgICAgICAgaWYgc2hvdWxkX2NvdW50X3Byb3BlcnRpZXM6CiAgICAgICAgICAgICBsaW5l
cy5hcHBlbmQoJycpCi0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBpbnQgZm91bmRQcm9w
ZXJ0aWVzQ291bnQgPSAlczsnICUgbGVuKHJlcXVpcmVkX21lbWJlcnMpKQorICAgICAgICAgICAg
bGluZXMuYXBwZW5kKCcgICAgc2l6ZV90IGZvdW5kUHJvcGVydGllc0NvdW50ID0gJXM7JyAlIGxl
bihyZXF1aXJlZF9tZW1iZXJzKSkKIAogICAgICAgICBmb3IgdHlwZV9tZW1iZXIgaW4gb3B0aW9u
YWxfbWVtYmVyczoKKyAgICAgICAgICAgIG1lbWJlcl90eXBlID0gdHlwZV9tZW1iZXIudHlwZQor
ICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShtZW1iZXJfdHlwZSwgQWxpYXNlZFR5cGUpOgorICAg
ICAgICAgICAgICAgIG1lbWJlcl90eXBlID0gbWVtYmVyX3R5cGUuYWxpYXNlZF90eXBlCisKKyAg
ICAgICAgICAgIGlmIGlzaW5zdGFuY2UobWVtYmVyX3R5cGUsIEVudW1UeXBlKToKKyAgICAgICAg
ICAgICAgICBtZW1iZXJfdHlwZSA9IENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3JfZW51bShtZW1i
ZXJfdHlwZSwgJyVzOjolcycgJSAob2JqZWN0X2RlY2xhcmF0aW9uLnR5cGVfbmFtZSwgdWNmaXJz
dCh0eXBlX21lbWJlci5tZW1iZXJfbmFtZSkpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAg
ICAgICAgICBtZW1iZXJfdHlwZSA9IENwcEdlbmVyYXRvci5jcHBfcHJvdG9jb2xfdHlwZV9mb3Jf
dHlwZShtZW1iZXJfdHlwZSkKKwogICAgICAgICAgICAgYXJncyA9IHsKICAgICAgICAgICAgICAg
ICAnbWVtYmVyTmFtZSc6IHR5cGVfbWVtYmVyLm1lbWJlcl9uYW1lLAotICAgICAgICAgICAgICAg
ICdhc3NlcnRNZXRob2QnOiBDcHBHZW5lcmF0b3IuY3BwX2Fzc2VydGlvbl9tZXRob2RfZm9yX3R5
cGVfbWVtYmVyKHR5cGVfbWVtYmVyLCBvYmplY3RfZGVjbGFyYXRpb24pCisgICAgICAgICAgICAg
ICAgJ21lbWJlclR5cGUnOiBtZW1iZXJfdHlwZQogICAgICAgICAgICAgfQogCiAgICAgICAgICAg
ICBsaW5lcy5hcHBlbmQoIiIiICAgIHsKICAgICAgICAgYXV0byAlKG1lbWJlck5hbWUpc1BvcyA9
IG9iamVjdC0+ZmluZCgiJShtZW1iZXJOYW1lKXMiX3MpOwogICAgICAgICBpZiAoJShtZW1iZXJO
YW1lKXNQb3MgIT0gb2JqZWN0LT5lbmQoKSkgewotICAgICAgICAgICAgJShhc3NlcnRNZXRob2Qp
cyglKG1lbWJlck5hbWUpc1Bvcy0+dmFsdWUuZ2V0KCkpOyIiIiAlIGFyZ3MpCisgICAgICAgICAg
ICBCaW5kaW5nVHJhaXRzPCUobWVtYmVyVHlwZSlzPjo6YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5
cGUoJShtZW1iZXJOYW1lKXNQb3MtPnZhbHVlLnB0cigpKTsiIiIgJSBhcmdzKQogCiAgICAgICAg
ICAgICBpZiBzaG91bGRfY291bnRfcHJvcGVydGllczoKICAgICAgICAgICAgICAgICBsaW5lcy5h
cHBlbmQoJyAgICAgICAgICAgICsrZm91bmRQcm9wZXJ0aWVzQ291bnQ7JykKQEAgLTI2NywyNyAr
MjgxLDIyIEBAIGNsYXNzIENwcFByb3RvY29sVHlwZXNJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihD
cHBHZW5lcmF0b3IpOgogICAgICAgICBpZiBzaG91bGRfY291bnRfcHJvcGVydGllczoKICAgICAg
ICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIGlmIChmb3VuZFByb3BlcnRpZXNDb3VudCAhPSBvYmpl
Y3QtPnNpemUoKSknKQogICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIEZBVEFMKCJV
bmV4cGVjdGVkIHByb3BlcnRpZXMgaW4gb2JqZWN0OiAlc1xcbiIsIG9iamVjdC0+dG9KU09OU3Ry
aW5nKCkuYXNjaWkoKS5kYXRhKCkpOycpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnI2Vsc2UgLy8g
QVNTRVJUX0VOQUJMRUQnKQotICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBVTlVTRURfUEFSQU0o
dmFsdWUpOycpCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnI2VuZGlmIC8vIEFTU0VSVF9FTkFCTEVE
JykKKyAgICAgICAgbGluZXMuYXBwZW5kKCcjZW5kaWYnKQogICAgICAgICBsaW5lcy5hcHBlbmQo
J30nKQogICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQogCiAgICAgZGVmIF9nZW5lcmF0
ZV9hc3NlcnRpb25fZm9yX2VudW0oc2VsZiwgZW51bV9tZW1iZXIsIG9iamVjdF9kZWNsYXJhdGlv
bik6CiAgICAgICAgIGxpbmVzID0gW10KLSAgICAgICAgbGluZXMuYXBwZW5kKCd2b2lkICVzKEpT
T046OlZhbHVlKiB2YWx1ZSknICUgQ3BwR2VuZXJhdG9yLmNwcF9hc3NlcnRpb25fbWV0aG9kX2Zv
cl90eXBlX21lbWJlcihlbnVtX21lbWJlciwgb2JqZWN0X2RlY2xhcmF0aW9uKSkKKyAgICAgICAg
bGluZXMuYXBwZW5kKCd2b2lkIEJpbmRpbmdUcmFpdHM8JXM+Ojphc3NlcnRWYWx1ZUhhc0V4cGVj
dGVkVHlwZShKU09OOjpWYWx1ZSogdmFsdWUpJyAlIENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3Jf
ZW51bShlbnVtX21lbWJlci50eXBlLCAnJXM6OiVzJyAlIChvYmplY3RfZGVjbGFyYXRpb24udHlw
ZV9uYW1lLCB1Y2ZpcnN0KGVudW1fbWVtYmVyLm1lbWJlcl9uYW1lKSkpKQogICAgICAgICBsaW5l
cy5hcHBlbmQoJ3snKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBBU1NFUlRfVU5VU0VEKHZh
bHVlLCB2YWx1ZSk7JykKICAgICAgICAgbGluZXMuYXBwZW5kKCcjaWYgQVNTRVJUX0VOQUJMRUQn
KQotICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBBU1NFUlRfQVJHKHZhbHVlLCB2YWx1ZSk7JykK
LSAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgU3RyaW5nIHJlc3VsdDsnKQotICAgICAgICBsaW5l
cy5hcHBlbmQoJyAgICBib29sIGNhc3RTdWNjZWVkZWQgPSB2YWx1ZS0+YXNTdHJpbmcocmVzdWx0
KTsnKQotICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBBU1NFUlQoY2FzdFN1Y2NlZWRlZCk7JykK
KyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgYXV0byByZXN1bHQgPSB2YWx1ZS0+YXNTdHJpbmco
KTsnKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBBU1NFUlQocmVzdWx0KTsnKQogCiAgICAg
ICAgIGFzc2VydF9jb25kaXRpb24gPSAnIHx8ICcuam9pbihbJ3Jlc3VsdCA9PSAiJXMiJyAlIGVu
dW1fdmFsdWUgZm9yIGVudW1fdmFsdWUgaW4gZW51bV9tZW1iZXIudHlwZS5lbnVtX3ZhbHVlcygp
XSkKICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgQVNTRVJUKCVzKTsnICUgYXNzZXJ0X2NvbmRp
dGlvbikKLSAgICAgICAgbGluZXMuYXBwZW5kKCcjZWxzZSAvLyBBU1NFUlRfRU5BQkxFRCcpCi0g
ICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7JykKLSAgICAgICAg
bGluZXMuYXBwZW5kKCcjZW5kaWYgLy8gQVNTRVJUX0VOQUJMRUQnKQorICAgICAgICBsaW5lcy5h
cHBlbmQoJyNlbmRpZicpCiAgICAgICAgIGxpbmVzLmFwcGVuZCgnfScpCiAKICAgICAgICAgcmV0
dXJuICdcbicuam9pbihsaW5lcykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRlX29iamNfYmFja2VuZF9kaXNwYXRjaGVy
X2hlYWRlci5weSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2Rl
Z2VuL2dlbmVyYXRlX29iamNfYmFja2VuZF9kaXNwYXRjaGVyX2hlYWRlci5weQppbmRleCAzZTEz
OTc0YWIzNjIxM2RhNzhiNzJjYTIzMmU3N2UxYTk5NGM1NWY3Li4xNWMwNGIwMTRlYzZhODM0MDAy
YmFlMmNlYjkzNjIwMzYyNWVjMjM1IDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hl
cl9oZWFkZXIucHkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5CkBAIC0z
MywxMyArMzMsMTMgQEAgZnJvbSBzdHJpbmcgaW1wb3J0IFRlbXBsYXRlCiB0cnk6CiAgICAgZnJv
bSAuY3BwX2dlbmVyYXRvciBpbXBvcnQgQ3BwR2VuZXJhdG9yCiAgICAgZnJvbSAuZ2VuZXJhdG9y
IGltcG9ydCBHZW5lcmF0b3IKLSAgICBmcm9tIC5tb2RlbHMgaW1wb3J0IEZyYW1ld29ya3MKKyAg
ICBmcm9tIC5tb2RlbHMgaW1wb3J0IEVudW1UeXBlLCBBbGlhc2VkVHlwZSwgRnJhbWV3b3Jrcwog
ICAgIGZyb20gLm9iamNfZ2VuZXJhdG9yIGltcG9ydCBPYmpDR2VuZXJhdG9yCiAgICAgZnJvbSAu
b2JqY19nZW5lcmF0b3JfdGVtcGxhdGVzIGltcG9ydCBPYmpDR2VuZXJhdG9yVGVtcGxhdGVzIGFz
IE9iakNUZW1wbGF0ZXMKIGV4Y2VwdCBWYWx1ZUVycm9yOgogICAgIGZyb20gY3BwX2dlbmVyYXRv
ciBpbXBvcnQgQ3BwR2VuZXJhdG9yCiAgICAgZnJvbSBnZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRv
cgotICAgIGZyb20gbW9kZWxzIGltcG9ydCBGcmFtZXdvcmtzCisgICAgZnJvbSBtb2RlbHMgaW1w
b3J0IEVudW1UeXBlLCBBbGlhc2VkVHlwZSwgRnJhbWV3b3JrcwogICAgIGZyb20gb2JqY19nZW5l
cmF0b3IgaW1wb3J0IE9iakNHZW5lcmF0b3IKICAgICBmcm9tIG9iamNfZ2VuZXJhdG9yX3RlbXBs
YXRlcyBpbXBvcnQgT2JqQ0dlbmVyYXRvclRlbXBsYXRlcyBhcyBPYmpDVGVtcGxhdGVzCiAKQEAg
LTEwMyw5ICsxMDMsMTkgQEAgY2xhc3MgT2JqQ0JhY2tlbmREaXNwYXRjaGVySGVhZGVyR2VuZXJh
dG9yKE9iakNHZW5lcmF0b3IpOgogCiAgICAgZGVmIF9nZW5lcmF0ZV9vYmpjX2hhbmRsZXJfZGVj
bGFyYXRpb25fZm9yX2NvbW1hbmQoc2VsZiwgY29tbWFuZCk6CiAgICAgICAgIGxpbmVzID0gW10K
LSAgICAgICAgcGFyYW1ldGVycyA9IFsnbG9uZyByZXF1ZXN0SWQnXQotICAgICAgICBmb3IgX3Bh
cmFtZXRlciBpbiBjb21tYW5kLmNhbGxfcGFyYW1ldGVyczoKLSAgICAgICAgICAgIHBhcmFtZXRl
cnMuYXBwZW5kKCclcyBpbl8lcycgJSAoQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl91bmNoZWNr
ZWRfZm9ybWFsX2luX3BhcmFtZXRlcihfcGFyYW1ldGVyKSwgX3BhcmFtZXRlci5wYXJhbWV0ZXJf
bmFtZSkpCisgICAgICAgIHBhcmFtZXRlcnMgPSBbJ2xvbmcgcHJvdG9jb2xfcmVxdWVzdElkJ10K
KyAgICAgICAgZm9yIHBhcmFtZXRlciBpbiBjb21tYW5kLmNhbGxfcGFyYW1ldGVyczoKKyAgICAg
ICAgICAgIHBhcmFtZXRlcl90eXBlID0gcGFyYW1ldGVyLnR5cGUKKyAgICAgICAgICAgIGlmIGlz
aW5zdGFuY2UocGFyYW1ldGVyX3R5cGUsIEFsaWFzZWRUeXBlKToKKyAgICAgICAgICAgICAgICBw
YXJhbWV0ZXJfdHlwZSA9IHBhcmFtZXRlcl90eXBlLmFsaWFzZWRfdHlwZQorICAgICAgICAgICAg
aWYgaXNpbnN0YW5jZShwYXJhbWV0ZXJfdHlwZSwgRW51bVR5cGUpOgorICAgICAgICAgICAgICAg
IHBhcmFtZXRlcl90eXBlID0gcGFyYW1ldGVyX3R5cGUucHJpbWl0aXZlX3R5cGUKKworICAgICAg
ICAgICAgcGFyYW1ldGVyX25hbWUgPSBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUKKyAgICAgICAg
ICAgIGlmIHBhcmFtZXRlci5pc19vcHRpb25hbDoKKyAgICAgICAgICAgICAgICBwYXJhbWV0ZXJf
bmFtZSA9ICdvcHRfJyArIHBhcmFtZXRlcl9uYW1lCisKKyAgICAgICAgICAgIHBhcmFtZXRlcnMu
YXBwZW5kKCclcyAlcycgJSAoQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl9jb21tYW5kX3BhcmFt
ZXRlcihwYXJhbWV0ZXJfdHlwZSwgcGFyYW1ldGVyLmlzX29wdGlvbmFsKSwgcGFyYW1ldGVyX25h
bWUpKQogCiAgICAgICAgIGNvbW1hbmRfYXJncyA9IHsKICAgICAgICAgICAgICdjb21tYW5kTmFt
ZSc6IGNvbW1hbmQuY29tbWFuZF9uYW1lLApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vZ2VuZXJhdGVfb2JqY19iYWNrZW5kX2Rpc3Bh
dGNoZXJfaW1wbGVtZW50YXRpb24ucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1l
bnRhdGlvbi5weQppbmRleCBmNWVlOGU1ODM5OGQ2OWJhZTRiZWI0YzE4NjcwNjNjY2Q1MjIwOWVj
Li5jMGZlN2E3OGUzN2ZhNTEyNDM1MjQzOGZiOWQ0NWFlOTg4YTc0NTUzIDEwMDc1NQotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9v
YmpjX2JhY2tlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2JhY2tl
bmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQpAQCAtOTAsOSArOTAsMjAgQEAgY2xhc3Mg
T2JqQ0JhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25HZW5lcmF0b3IoT2JqQ0dlbmVyYXRv
cik6CiAKICAgICBkZWYgX2dlbmVyYXRlX2hhbmRsZXJfaW1wbGVtZW50YXRpb25fZm9yX2NvbW1h
bmQoc2VsZiwgZG9tYWluLCBjb21tYW5kKToKICAgICAgICAgbGluZXMgPSBbXQotICAgICAgICBw
YXJhbWV0ZXJzID0gWydsb25nIHJlcXVlc3RJZCddCisgICAgICAgIHBhcmFtZXRlcnMgPSBbJ2xv
bmcgcHJvdG9jb2xfcmVxdWVzdElkJ10KICAgICAgICAgZm9yIHBhcmFtZXRlciBpbiBjb21tYW5k
LmNhbGxfcGFyYW1ldGVyczoKLSAgICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKCclcyBpbl8l
cycgJSAoQ3BwR2VuZXJhdG9yLmNwcF90eXBlX2Zvcl91bmNoZWNrZWRfZm9ybWFsX2luX3BhcmFt
ZXRlcihwYXJhbWV0ZXIpLCBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpKQorICAgICAgICAgICAg
cGFyYW1ldGVyX3R5cGUgPSBwYXJhbWV0ZXIudHlwZQorICAgICAgICAgICAgaWYgaXNpbnN0YW5j
ZShwYXJhbWV0ZXJfdHlwZSwgQWxpYXNlZFR5cGUpOgorICAgICAgICAgICAgICAgIHBhcmFtZXRl
cl90eXBlID0gcGFyYW1ldGVyX3R5cGUuYWxpYXNlZF90eXBlCisgICAgICAgICAgICBpZiBpc2lu
c3RhbmNlKHBhcmFtZXRlcl90eXBlLCBFbnVtVHlwZSk6CisgICAgICAgICAgICAgICAgcGFyYW1l
dGVyX3R5cGUgPSBwYXJhbWV0ZXJfdHlwZS5wcmltaXRpdmVfdHlwZQorCisgICAgICAgICAgICBw
YXJhbWV0ZXJfbmFtZSA9IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZQorICAgICAgICAgICAgaWYg
cGFyYW1ldGVyLmlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAgIHBhcmFtZXRlcl9uYW1lID0g
J29wdF8nICsgcGFyYW1ldGVyX25hbWUKKyAgICAgICAgICAgIHBhcmFtZXRlcl9uYW1lID0gJ2lu
XycgKyBwYXJhbWV0ZXJfbmFtZQorCisgICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZCgnJXMg
JXMnICUgKENwcEdlbmVyYXRvci5jcHBfdHlwZV9mb3JfY29tbWFuZF9wYXJhbWV0ZXIocGFyYW1l
dGVyX3R5cGUsIHBhcmFtZXRlci5pc19vcHRpb25hbCksIHBhcmFtZXRlcl9uYW1lKSkKIAogICAg
ICAgICBjb21tYW5kX2FyZ3MgPSB7CiAgICAgICAgICAgICAnZG9tYWluTmFtZSc6IGRvbWFpbi5k
b21haW5fbmFtZSwKQEAgLTExNSw0NSArMTI2LDU0IEBAIGNsYXNzIE9iakNCYWNrZW5kRGlzcGF0
Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKE9iakNHZW5lcmF0b3IpOgogICAgICAgICBpZiBj
b21tYW5kLnJldHVybl9wYXJhbWV0ZXJzOgogICAgICAgICAgICAgc3VjY2Vzc19ibG9ja19wYXJh
bWV0ZXJzID0gW10KICAgICAgICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gY29tbWFuZC5yZXR1cm5f
cGFyYW1ldGVyczoKKyAgICAgICAgICAgICAgICBvdXRfcGFyYW1fbmFtZSA9IHBhcmFtZXRlci5w
YXJhbWV0ZXJfbmFtZQorICAgICAgICAgICAgICAgIGlmIHBhcmFtZXRlci5pc19vcHRpb25hbDoK
KyAgICAgICAgICAgICAgICAgICAgb3V0X3BhcmFtX25hbWUgPSAnb3B0XycgKyBvdXRfcGFyYW1f
bmFtZQorICAgICAgICAgICAgICAgIG91dF9wYXJhbV9uYW1lID0gJ291dF8nICsgb3V0X3BhcmFt
X25hbWUKICAgICAgICAgICAgICAgICBvYmpjX3R5cGUgPSBzZWxmLm9iamNfdHlwZV9mb3JfcGFy
YW0oZG9tYWluLCBjb21tYW5kLmNvbW1hbmRfbmFtZSwgcGFyYW1ldGVyKQotICAgICAgICAgICAg
ICAgIHZhcl9uYW1lID0gT2JqQ0dlbmVyYXRvci5pZGVudGlmaWVyX3RvX29iamNfaWRlbnRpZmll
cihwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpCi0gICAgICAgICAgICAgICAgc3VjY2Vzc19ibG9j
a19wYXJhbWV0ZXJzLmFwcGVuZChqb2luX3R5cGVfYW5kX25hbWUob2JqY190eXBlLCB2YXJfbmFt
ZSkpCisgICAgICAgICAgICAgICAgc3VjY2Vzc19ibG9ja19wYXJhbWV0ZXJzLmFwcGVuZChqb2lu
X3R5cGVfYW5kX25hbWUob2JqY190eXBlLCBvdXRfcGFyYW1fbmFtZSkpCiAgICAgICAgICAgICBs
aW5lcy5hcHBlbmQoJyAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeKCVzKSB7JyAlICcsICcuam9p
bihzdWNjZXNzX2Jsb2NrX3BhcmFtZXRlcnMpKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAg
bGluZXMuYXBwZW5kKCcgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsnKQogCisgICAgICAgIGxp
bmVzLmFwcGVuZCgnICAgICAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2Jq
ZWN0OjpjcmVhdGUoKTsnKQogICAgICAgICBpZiBjb21tYW5kLnJldHVybl9wYXJhbWV0ZXJzOgot
ICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3Vs
dE9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7JykKLQogICAgICAgICAgICAgcmVxdWly
ZWRfcG9pbnRlcl9wYXJhbWV0ZXJzID0gW3BhcmFtZXRlciBmb3IgcGFyYW1ldGVyIGluIGNvbW1h
bmQucmV0dXJuX3BhcmFtZXRlcnMgaWYgbm90IHBhcmFtZXRlci5pc19vcHRpb25hbCBhbmQgT2Jq
Q0dlbmVyYXRvci5pc190eXBlX29iamNfcG9pbnRlcl90eXBlKHBhcmFtZXRlci50eXBlKV0KICAg
ICAgICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gcmVxdWlyZWRfcG9pbnRlcl9wYXJhbWV0ZXJzOgot
ICAgICAgICAgICAgICAgIHZhcl9uYW1lID0gT2JqQ0dlbmVyYXRvci5pZGVudGlmaWVyX3RvX29i
amNfaWRlbnRpZmllcihwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpCi0gICAgICAgICAgICAgICAg
bGluZXMuYXBwZW5kKCcgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1F
VEVSKCVzLCBAIiVzIik7JyAlICh2YXJfbmFtZSwgdmFyX25hbWUpKQorICAgICAgICAgICAgICAg
IG91dF9wYXJhbV9uYW1lID0gcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lCisgICAgICAgICAgICAg
ICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAgICAgICBvdXRfcGFy
YW1fbmFtZSA9ICdvcHRfJyArIG91dF9wYXJhbV9uYW1lCisgICAgICAgICAgICAgICAgb3V0X3Bh
cmFtX25hbWUgPSAnb3V0XycgKyBvdXRfcGFyYW1fbmFtZQorICAgICAgICAgICAgICAgIGxpbmVz
LmFwcGVuZCgnICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUigl
cywgQCIlcyIpOycgJSAob3V0X3BhcmFtX25hbWUsIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkp
CiAgICAgICAgICAgICAgICAgb2JqY19hcnJheV9jbGFzcyA9IHNlbGYub2JqY19jbGFzc19mb3Jf
YXJyYXlfdHlwZShwYXJhbWV0ZXIudHlwZSkKICAgICAgICAgICAgICAgICBpZiBvYmpjX2FycmF5
X2NsYXNzIGFuZCBvYmpjX2FycmF5X2NsYXNzLnN0YXJ0c3dpdGgoc2VsZi5vYmpjX3ByZWZpeCgp
KToKLSAgICAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIFRIUk9XX0VYQ0VQ
VElPTl9GT1JfQkFEX1RZUEVfSU5fQVJSQVkoJXMsIFslcyBjbGFzc10pOycgJSAodmFyX25hbWUs
IG9iamNfYXJyYXlfY2xhc3MpKQorICAgICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAg
ICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRV9JTl9BUlJBWSglcywgWyVzIGNsYXNz
XSk7JyAlIChvdXRfcGFyYW1fbmFtZSwgb2JqY19hcnJheV9jbGFzcykpCiAKICAgICAgICAgICAg
IG9wdGlvbmFsX3BvaW50ZXJfcGFyYW1ldGVycyA9IFtwYXJhbWV0ZXIgZm9yIHBhcmFtZXRlciBp
biBjb21tYW5kLnJldHVybl9wYXJhbWV0ZXJzIGlmIHBhcmFtZXRlci5pc19vcHRpb25hbCBhbmQg
T2JqQ0dlbmVyYXRvci5pc190eXBlX29iamNfcG9pbnRlcl90eXBlKHBhcmFtZXRlci50eXBlKV0K
ICAgICAgICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gb3B0aW9uYWxfcG9pbnRlcl9wYXJhbWV0ZXJz
OgotICAgICAgICAgICAgICAgIHZhcl9uYW1lID0gT2JqQ0dlbmVyYXRvci5pZGVudGlmaWVyX3Rv
X29iamNfaWRlbnRpZmllcihwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUpCi0gICAgICAgICAgICAg
ICAgbGluZXMuYXBwZW5kKCcgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFM
X1BBUkFNRVRFUiglcywgQCIlcyIpOycgJSAodmFyX25hbWUsIHZhcl9uYW1lKSkKKyAgICAgICAg
ICAgICAgICBvdXRfcGFyYW1fbmFtZSA9IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZQorICAgICAg
ICAgICAgICAgIGlmIHBhcmFtZXRlci5pc19vcHRpb25hbDoKKyAgICAgICAgICAgICAgICAgICAg
b3V0X3BhcmFtX25hbWUgPSAnb3B0XycgKyBvdXRfcGFyYW1fbmFtZQorICAgICAgICAgICAgICAg
IG91dF9wYXJhbV9uYW1lID0gJ291dF8nICsgb3V0X3BhcmFtX25hbWUKKyAgICAgICAgICAgICAg
ICBsaW5lcy5hcHBlbmQoJyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxf
UEFSQU1FVEVSKCVzLCBAIiVzIik7JyAlIChvdXRfcGFyYW1fbmFtZSwgcGFyYW1ldGVyLnBhcmFt
ZXRlcl9uYW1lKSkKICAgICAgICAgICAgICAgICBvYmpjX2FycmF5X2NsYXNzID0gc2VsZi5vYmpj
X2NsYXNzX2Zvcl9hcnJheV90eXBlKHBhcmFtZXRlci50eXBlKQogICAgICAgICAgICAgICAgIGlm
IG9iamNfYXJyYXlfY2xhc3MgYW5kIG9iamNfYXJyYXlfY2xhc3Muc3RhcnRzd2l0aChzZWxmLm9i
amNfcHJlZml4KCkpOgotICAgICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAg
VEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfVFlQRV9JTl9PUFRJT05BTF9BUlJBWSglcywgWyVzIGNs
YXNzXSk7JyAlICh2YXJfbmFtZSwgb2JqY19hcnJheV9jbGFzcykpCisgICAgICAgICAgICAgICAg
ICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFX0lO
X09QVElPTkFMX0FSUkFZKCVzLCBbJXMgY2xhc3NdKTsnICUgKG91dF9wYXJhbV9uYW1lLCBvYmpj
X2FycmF5X2NsYXNzKSkKIAogICAgICAgICAgICAgZm9yIHBhcmFtZXRlciBpbiBjb21tYW5kLnJl
dHVybl9wYXJhbWV0ZXJzOgorICAgICAgICAgICAgICAgIG91dF9wYXJhbV9uYW1lID0gcGFyYW1l
dGVyLnBhcmFtZXRlcl9uYW1lCisgICAgICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlv
bmFsOgorICAgICAgICAgICAgICAgICAgICBvdXRfcGFyYW1fbmFtZSA9ICdvcHRfJyArIG91dF9w
YXJhbV9uYW1lCisgICAgICAgICAgICAgICAgb3V0X3BhcmFtX25hbWUgPSAnb3V0XycgKyBvdXRf
cGFyYW1fbmFtZQogICAgICAgICAgICAgICAgIGtleWVkX3NldF9tZXRob2QgPSBDcHBHZW5lcmF0
b3IuY3BwX3NldHRlcl9tZXRob2RfZm9yX3R5cGUocGFyYW1ldGVyLnR5cGUpCi0gICAgICAgICAg
ICAgICAgdmFyX25hbWUgPSBPYmpDR2VuZXJhdG9yLmlkZW50aWZpZXJfdG9fb2JqY19pZGVudGlm
aWVyKHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSkKLSAgICAgICAgICAgICAgICB2YXJfZXhwcmVz
c2lvbiA9ICcqJXMnICUgdmFyX25hbWUgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsIGVsc2UgdmFy
X25hbWUKKyAgICAgICAgICAgICAgICB2YXJfZXhwcmVzc2lvbiA9ICcqJXMnICUgb3V0X3BhcmFt
X25hbWUgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsIGVsc2Ugb3V0X3BhcmFtX25hbWUKICAgICAg
ICAgICAgICAgICBleHBvcnRfZXhwcmVzc2lvbiA9IHNlbGYub2JqY19wcm90b2NvbF9leHBvcnRf
ZXhwcmVzc2lvbl9mb3JfdmFyaWFibGUocGFyYW1ldGVyLnR5cGUsIHZhcl9leHByZXNzaW9uKQog
ICAgICAgICAgICAgICAgIGlmIG5vdCBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6Ci0gICAgICAgICAg
ICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICByZXN1bHRPYmplY3QtPiVzKCIlcyJfcywg
JXMpOycgJSAoa2V5ZWRfc2V0X21ldGhvZCwgcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lLCBleHBv
cnRfZXhwcmVzc2lvbikpCisgICAgICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAg
ICBwcm90b2NvbF9qc29uTWVzc2FnZS0+JXMoIiVzIl9zLCAlcyk7JyAlIChrZXllZF9zZXRfbWV0
aG9kLCBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUsIGV4cG9ydF9leHByZXNzaW9uKSkKICAgICAg
ICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAg
ICAgaWYgKCVzKScgJSB2YXJfbmFtZSkKLSAgICAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5k
KCcgICAgICAgICAgICByZXN1bHRPYmplY3QtPiVzKCIlcyJfcywgJXMpOycgJSAoa2V5ZWRfc2V0
X21ldGhvZCwgcGFyYW1ldGVyLnBhcmFtZXRlcl9uYW1lLCBleHBvcnRfZXhwcmVzc2lvbikpCi0g
ICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2Vu
ZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHRPYmplY3QpLCBmYWxzZSk7JykKLSAg
ICAgICAgZWxzZToKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICAgICBiYWNrZW5kRGlz
cGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgp
LCBmYWxzZSk7JykKKyAgICAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIGlm
ICghISVzKScgJSBvdXRfcGFyYW1fbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgbGluZXMuYXBw
ZW5kKCcgICAgICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+JXMoIiVzIl9zLCAlcyk7JyAl
IChrZXllZF9zZXRfbWV0aG9kLCBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUsIGV4cG9ydF9leHBy
ZXNzaW9uKSkKKyAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgICAgIGJhY2tlbmREaXNwYXRjaGVy
KCktPnNlbmRSZXNwb25zZShwcm90b2NvbF9yZXF1ZXN0SWQsIFdURk1vdmUocHJvdG9jb2xfanNv
bk1lc3NhZ2UpLCBmYWxzZSk7JykKIAogICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICB9OycpCiAg
ICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCkBAIC0xNjYsMTcgKzE4NiwyNyBAQCBjbGFz
cyBPYmpDQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVyYXRvcihPYmpDR2VuZXJh
dG9yKToKICAgICAgICAgZGVmIGluX3BhcmFtX2V4cHJlc3Npb24ocGFyYW1fbmFtZSwgcGFyYW1l
dGVyKToKICAgICAgICAgICAgIF90eXBlID0gcGFyYW1ldGVyLnR5cGUKICAgICAgICAgICAgIGlm
IGlzaW5zdGFuY2UoX3R5cGUsIEFsaWFzZWRUeXBlKToKLSAgICAgICAgICAgICAgICBfdHlwZSA9
IF90eXBlLmFsaWFzZWRfdHlwZSAgIyBGYWxsIHRocm91Z2ggdG8gZW51bSBvciBwcmltaXRpdmUu
CisgICAgICAgICAgICAgICAgX3R5cGUgPSBfdHlwZS5hbGlhc2VkX3R5cGUKICAgICAgICAgICAg
IGlmIGlzaW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKToKLSAgICAgICAgICAgICAgICBfdHlwZSA9
IF90eXBlLnByaW1pdGl2ZV90eXBlICAjIEZhbGwgdGhyb3VnaCB0byBwcmltaXRpdmUuCi0gICAg
ICAgICAgICBpZiBpc2luc3RhbmNlKF90eXBlLCBQcmltaXRpdmVUeXBlKToKLSAgICAgICAgICAg
ICAgICBpZiBfdHlwZS5yYXdfbmFtZSgpIGluIFsnYXJyYXknLCAnYW55JywgJ29iamVjdCddOgot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gJyYlcycgJSBwYXJhbV9uYW1lIGlmIG5vdCBwYXJh
bWV0ZXIuaXNfb3B0aW9uYWwgZWxzZSBwYXJhbV9uYW1lCi0gICAgICAgICAgICAgICAgcmV0dXJu
ICcqJXMnICUgcGFyYW1fbmFtZSBpZiBwYXJhbWV0ZXIuaXNfb3B0aW9uYWwgZWxzZSBwYXJhbV9u
YW1lCi0gICAgICAgICAgICByZXR1cm4gJyYlcycgJSBwYXJhbV9uYW1lIGlmIG5vdCBwYXJhbWV0
ZXIuaXNfb3B0aW9uYWwgZWxzZSBwYXJhbV9uYW1lCisgICAgICAgICAgICAgICAgX3R5cGUgPSBf
dHlwZS5wcmltaXRpdmVfdHlwZQorCisgICAgICAgICAgICBpZiBfdHlwZS5pc19lbnVtKCk6Cisg
ICAgICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAg
ICAgICBwYXJhbV9uYW1lID0gJyonICsgcGFyYW1fbmFtZQorICAgICAgICAgICAgICAgIHJldHVy
biAnUHJvdG9jb2w6OkhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKCVzKScgJSBwYXJhbV9u
YW1lCisgICAgICAgICAgICBpZiBDcHBHZW5lcmF0b3Iuc2hvdWxkX3JlbGVhc2VfYXJndW1lbnQo
X3R5cGUsIHBhcmFtZXRlci5pc19vcHRpb25hbCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHBh
cmFtX25hbWUgKyAnLnJlbGVhc2VOb25OdWxsKCknCisgICAgICAgICAgICBpZiBDcHBHZW5lcmF0
b3Iuc2hvdWxkX2RlcmVmZXJlbmNlX2FyZ3VtZW50KF90eXBlLCBwYXJhbWV0ZXIuaXNfb3B0aW9u
YWwpOgorICAgICAgICAgICAgICAgIHJldHVybiAnKicgKyBwYXJhbV9uYW1lCisgICAgICAgICAg
ICBpZiBDcHBHZW5lcmF0b3Iuc2hvdWxkX21vdmVfYXJndW1lbnQoX3R5cGUsIHBhcmFtZXRlci5p
c19vcHRpb25hbCk6CisgICAgICAgICAgICAgICAgcmV0dXJuICdXVEZNb3ZlKCVzKScgJSBwYXJh
bV9uYW1lCisgICAgICAgICAgICByZXR1cm4gcGFyYW1fbmFtZQogCiAgICAgICAgIGZvciBwYXJh
bWV0ZXIgaW4gY29tbWFuZC5jYWxsX3BhcmFtZXRlcnM6Ci0gICAgICAgICAgICBpbl9wYXJhbV9u
YW1lID0gJ2luXyVzJyAlIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZQorICAgICAgICAgICAgaW5f
cGFyYW1fbmFtZSA9IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZQorICAgICAgICAgICAgaWYgcGFy
YW1ldGVyLmlzX29wdGlvbmFsOgorICAgICAgICAgICAgICAgIGluX3BhcmFtX25hbWUgPSAnb3B0
XycgKyBpbl9wYXJhbV9uYW1lCisgICAgICAgICAgICBpbl9wYXJhbV9uYW1lID0gJ2luXycgKyBp
bl9wYXJhbV9uYW1lCiAgICAgICAgICAgICBvYmpjX2luX3BhcmFtX25hbWUgPSAnb18lcycgJSBp
bl9wYXJhbV9uYW1lCiAgICAgICAgICAgICBvYmpjX3R5cGUgPSBzZWxmLm9iamNfdHlwZV9mb3Jf
cGFyYW0oZG9tYWluLCBjb21tYW5kLmNvbW1hbmRfbmFtZSwgcGFyYW1ldGVyLCBGYWxzZSkKICAg
ICAgICAgICAgIGlmIGlzaW5zdGFuY2UocGFyYW1ldGVyLnR5cGUsIEVudW1UeXBlKToKQEAgLTE5
NCwxMSArMjI0LDggQEAgY2xhc3MgT2JqQ0JhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25H
ZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6CiAKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAg
ICAgICAgbGluZXMuYXBwZW5kKCcgICAgJXM7JyAlIGpvaW5fdHlwZV9hbmRfbmFtZShvYmpjX3R5
cGUsIG9iamNfaW5fcGFyYW1fbmFtZSkpCi0gICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcg
ICAgaWYgKCVzKScgJSBpbl9wYXJhbV9uYW1lKQorICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVu
ZCgnICAgIGlmICghISVzKScgJSBpbl9wYXJhbV9uYW1lKQogICAgICAgICAgICAgICAgIGxpbmVz
LmFwcGVuZCgnICAgICAgICAlcyA9ICVzOycgJSAob2JqY19pbl9wYXJhbV9uYW1lLCBpbXBvcnRf
ZXhwcmVzc2lvbikpCi0KLSAgICAgICAgaWYgbGluZXM6Ci0gICAgICAgICAgICBsaW5lcy5hcHBl
bmQoJycpCiAgICAgICAgIHJldHVybiAnXG4nLmpvaW4obGluZXMpCiAKICAgICBkZWYgX2dlbmVy
YXRlX2ludm9jYXRpb25fZm9yX2NvbW1hbmQoc2VsZiwgZG9tYWluLCBjb21tYW5kKToKQEAgLTIw
Niw3ICsyMzMsMTAgQEAgY2xhc3MgT2JqQ0JhY2tlbmREaXNwYXRjaGVySW1wbGVtZW50YXRpb25H
ZW5lcmF0b3IoT2JqQ0dlbmVyYXRvcik6CiAgICAgICAgIHBhaXJzLmFwcGVuZCgnV2l0aEVycm9y
Q2FsbGJhY2s6ZXJyb3JDYWxsYmFjaycpCiAgICAgICAgIHBhaXJzLmFwcGVuZCgnc3VjY2Vzc0Nh
bGxiYWNrOnN1Y2Nlc3NDYWxsYmFjaycpCiAgICAgICAgIGZvciBwYXJhbWV0ZXIgaW4gY29tbWFu
ZC5jYWxsX3BhcmFtZXRlcnM6Ci0gICAgICAgICAgICBpbl9wYXJhbV9uYW1lID0gJ2luXyVzJyAl
IHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZQorICAgICAgICAgICAgaW5fcGFyYW1fbmFtZSA9IHBh
cmFtZXRlci5wYXJhbWV0ZXJfbmFtZQorICAgICAgICAgICAgaWYgcGFyYW1ldGVyLmlzX29wdGlv
bmFsOgorICAgICAgICAgICAgICAgIGluX3BhcmFtX25hbWUgPSAnb3B0XycgKyBpbl9wYXJhbV9u
YW1lCisgICAgICAgICAgICBpbl9wYXJhbV9uYW1lID0gJ2luXycgKyBpbl9wYXJhbV9uYW1lCiAg
ICAgICAgICAgICBvYmpjX2luX3BhcmFtX2V4cHJlc3Npb24gPSAnb18lcycgJSBpbl9wYXJhbV9u
YW1lCiAgICAgICAgICAgICBpZiBub3QgcGFyYW1ldGVyLmlzX29wdGlvbmFsOgogICAgICAgICAg
ICAgICAgIGlmIGlzaW5zdGFuY2UocGFyYW1ldGVyLnR5cGUsIEVudW1UeXBlKToKQEAgLTIxNyw2
ICsyNDcsNiBAQCBjbGFzcyBPYmpDQmFja2VuZERpc3BhdGNoZXJJbXBsZW1lbnRhdGlvbkdlbmVy
YXRvcihPYmpDR2VuZXJhdG9yKToKICAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHBhcmFt
ZXRlci50eXBlLCBFbnVtVHlwZSk6CiAgICAgICAgICAgICAgICAgICAgIG9iamNfaW5fcGFyYW1f
ZXhwcmVzc2lvbiA9ICclcy52YWx1ZSgpJyAlIG9iamNfaW5fcGFyYW1fZXhwcmVzc2lvbgogCi0g
ICAgICAgICAgICAgICAgb3B0aW9uYWxfZXhwcmVzc2lvbiA9ICcoJXMgPyAmJXMgOiBuaWwpJyAl
IChpbl9wYXJhbV9uYW1lLCBvYmpjX2luX3BhcmFtX2V4cHJlc3Npb24pCisgICAgICAgICAgICAg
ICAgb3B0aW9uYWxfZXhwcmVzc2lvbiA9ICcoISElcyA/ICYlcyA6IG5pbCknICUgKGluX3BhcmFt
X25hbWUsIG9iamNfaW5fcGFyYW1fZXhwcmVzc2lvbikKICAgICAgICAgICAgICAgICBwYWlycy5h
cHBlbmQoJyVzOiVzJyAlIChwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUsIG9wdGlvbmFsX2V4cHJl
c3Npb24pKQogICAgICAgICByZXR1cm4gJyAgICBbbV9kZWxlZ2F0ZSAlcyVzXTsnICUgKGNvbW1h
bmQuY29tbWFuZF9uYW1lLCAnICcuam9pbihwYWlycykpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2Zyb250
ZW5kX2Rpc3BhdGNoZXJfaW1wbGVtZW50YXRpb24ucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9nZW5lcmF0ZV9vYmpjX2Zyb250ZW5kX2Rpc3BhdGNo
ZXJfaW1wbGVtZW50YXRpb24ucHkKaW5kZXggZGRkYjI3YTg4YzJiYWZmNWZjNmYyN2JjNDNhMDFl
MzFlYTljZDQ5ZC4uOGQ0MTkzODEyM2Y5MDZmYmYwOTFlMmFiN2IzNmE2MDczM2RiMzk1MiAxMDA3
NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4v
Z2VuZXJhdGVfb2JqY19mcm9udGVuZF9kaXNwYXRjaGVyX2ltcGxlbWVudGF0aW9uLnB5CisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy9jb2RlZ2VuL2dlbmVyYXRl
X29iamNfZnJvbnRlbmRfZGlzcGF0Y2hlcl9pbXBsZW1lbnRhdGlvbi5weQpAQCAtMTI1LDExICsx
MjUsMTEgQEAgY2xhc3MgT2JqQ0Zyb250ZW5kRGlzcGF0Y2hlckltcGxlbWVudGF0aW9uR2VuZXJh
dG9yKE9iakNHZW5lcmF0b3IpOgogICAgICAgICBpZiByZXF1aXJlZF9wb2ludGVyX3BhcmFtZXRl
cnMgb3Igb3B0aW9uYWxfcG9pbnRlcl9wYXJhbWV0ZXJzOgogICAgICAgICAgICAgbGluZXMuYXBw
ZW5kKCcnKQogCi0gICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIFJlZjxKU09OOjpPYmplY3Q+IGpz
b25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsnKQotICAgICAgICBsaW5lcy5hcHBl
bmQoJyAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICIlcy4lcyJfcyk7JyAl
IChkb21haW4uZG9tYWluX25hbWUsIGV2ZW50LmV2ZW50X25hbWUpKQorICAgICAgICBsaW5lcy5h
cHBlbmQoJyAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVh
dGUoKTsnKQorICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+
c2V0U3RyaW5nKCJtZXRob2QiX3MsICIlcy4lcyJfcyk7JyAlIChkb21haW4uZG9tYWluX25hbWUs
IGV2ZW50LmV2ZW50X25hbWUpKQogICAgICAgICBpZiBldmVudC5ldmVudF9wYXJhbWV0ZXJzOgog
ICAgICAgICAgICAgbGluZXMuZXh0ZW5kKHNlbGYuX2dlbmVyYXRlX2V2ZW50X291dF9wYXJhbWV0
ZXJzKGRvbWFpbiwgZXZlbnQpKQotICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICByb3V0ZXIuc2Vu
ZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7JykKKyAgICAgICAgbGluZXMuYXBw
ZW5kKCcgICAgcm91dGVyLnNlbmRFdmVudChwcm90b2NvbF9qc29uTWVzc2FnZS0+dG9KU09OU3Ry
aW5nKCkpOycpCiAgICAgICAgIGxpbmVzLmFwcGVuZCgnfScpCiAgICAgICAgIHJldHVybiBzZWxm
LndyYXBfd2l0aF9ndWFyZF9mb3JfY29uZGl0aW9uKGV2ZW50LmNvbmRpdGlvbiwgJ1xuJy5qb2lu
KGxpbmVzKSkKIApAQCAtMTQ1LDE2ICsxNDUsMTYgQEAgY2xhc3MgT2JqQ0Zyb250ZW5kRGlzcGF0
Y2hlckltcGxlbWVudGF0aW9uR2VuZXJhdG9yKE9iakNHZW5lcmF0b3IpOgogCiAgICAgZGVmIF9n
ZW5lcmF0ZV9ldmVudF9vdXRfcGFyYW1ldGVycyhzZWxmLCBkb21haW4sIGV2ZW50KToKICAgICAg
ICAgbGluZXMgPSBbXQotICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICBSZWY8SlNPTjo6T2JqZWN0
PiBwYXJhbXNPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOycpCisgICAgICAgIGxpbmVz
LmFwcGVuZCgnICAgIGF1dG8gcHJvdG9jb2xfcGFyYW1zT2JqZWN0ID0gSlNPTjo6T2JqZWN0Ojpj
cmVhdGUoKTsnKQogICAgICAgICBmb3IgcGFyYW1ldGVyIGluIGV2ZW50LmV2ZW50X3BhcmFtZXRl
cnM6CiAgICAgICAgICAgICBrZXllZF9zZXRfbWV0aG9kID0gQ3BwR2VuZXJhdG9yLmNwcF9zZXR0
ZXJfbWV0aG9kX2Zvcl90eXBlKHBhcmFtZXRlci50eXBlKQogICAgICAgICAgICAgdmFyX25hbWUg
PSBwYXJhbWV0ZXIucGFyYW1ldGVyX25hbWUKICAgICAgICAgICAgIHNhZmVfdmFyX25hbWUgPSAn
KColcyknICUgdmFyX25hbWUgaWYgcGFyYW1ldGVyLmlzX29wdGlvbmFsIGVsc2UgdmFyX25hbWUK
ICAgICAgICAgICAgIGV4cG9ydF9leHByZXNzaW9uID0gc2VsZi5vYmpjX3Byb3RvY29sX2V4cG9y
dF9leHByZXNzaW9uX2Zvcl92YXJpYWJsZShwYXJhbWV0ZXIudHlwZSwgc2FmZV92YXJfbmFtZSkK
ICAgICAgICAgICAgIGlmIG5vdCBwYXJhbWV0ZXIuaXNfb3B0aW9uYWw6Ci0gICAgICAgICAgICAg
ICAgbGluZXMuYXBwZW5kKCcgICAgcGFyYW1zT2JqZWN0LT4lcygiJXMiX3MsICVzKTsnICUgKGtl
eWVkX3NldF9tZXRob2QsIHBhcmFtZXRlci5wYXJhbWV0ZXJfbmFtZSwgZXhwb3J0X2V4cHJlc3Np
b24pKQorICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgIHByb3RvY29sX3BhcmFtc09i
amVjdC0+JXMoIiVzIl9zLCAlcyk7JyAlIChrZXllZF9zZXRfbWV0aG9kLCBwYXJhbWV0ZXIucGFy
YW1ldGVyX25hbWUsIGV4cG9ydF9leHByZXNzaW9uKSkKICAgICAgICAgICAgIGVsc2U6CiAgICAg
ICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgaWYgKCVzKScgJSAocGFyYW1ldGVyLnBhcmFt
ZXRlcl9uYW1lKSkKLSAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgcGFyYW1z
T2JqZWN0LT4lcygiJXMiX3MsICVzKTsnICUgKGtleWVkX3NldF9tZXRob2QsIHBhcmFtZXRlci5w
YXJhbWV0ZXJfbmFtZSwgZXhwb3J0X2V4cHJlc3Npb24pKQotICAgICAgICBsaW5lcy5hcHBlbmQo
JyAgICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiX3MsIFdURk1vdmUocGFyYW1zT2Jq
ZWN0KSk7JykKKyAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAgICAgcHJvdG9jb2xf
cGFyYW1zT2JqZWN0LT4lcygiJXMiX3MsICVzKTsnICUgKGtleWVkX3NldF9tZXRob2QsIHBhcmFt
ZXRlci5wYXJhbWV0ZXJfbmFtZSwgZXhwb3J0X2V4cHJlc3Npb24pKQorICAgICAgICBsaW5lcy5h
cHBlbmQoJyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiX3MsIFdU
Rk1vdmUocHJvdG9jb2xfcGFyYW1zT2JqZWN0KSk7JykKICAgICAgICAgcmV0dXJuIGxpbmVzCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdl
bi9nZW5lcmF0b3IucHkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMv
Y29kZWdlbi9nZW5lcmF0b3IucHkKaW5kZXggOTRkMThkOWQ2NjE5NGQxNTg1YzBlMTBjMDQ5NGJi
NGIxYTEzYjk1NS4uMjlhMmRlYTcyNGYwYmJlY2ZlYmE2ZGI5MjA2MDgxNzAxZTUxMGM1MSAxMDA3
NTUKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4v
Z2VuZXJhdG9yLnB5CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy9jb2RlZ2VuL2dlbmVyYXRvci5weQpAQCAtNzMsOSArNzMsNiBAQCBfVFlQRVNfTkVFRElOR19S
VU5USU1FX0NBU1RTID0gc2V0KFsKICAgICAiUnVudGltZS5Db2xsZWN0aW9uRW50cnkiLAogICAg
ICJEZWJ1Z2dlci5GdW5jdGlvbkRldGFpbHMiLAogICAgICJEZWJ1Z2dlci5DYWxsRnJhbWUiLAot
ICAgICJDYW52YXMuVHJhY2VMb2ciLAotICAgICJDYW52YXMuUmVzb3VyY2VJbmZvIiwKLSAgICAi
Q2FudmFzLlJlc291cmNlU3RhdGUiLAogICAgICMgVGhpcyBzaG91bGQgYmUgYSB0ZW1wb3Jhcnkg
aGFjay4gVGltZWxpbmVFdmVudCBzaG91bGQgYmUgY3JlYXRlZCB2aWEgZ2VuZXJhdGVkIEMrKyBB
UEkuCiAgICAgIlRpbWVsaW5lLlRpbWVsaW5lRXZlbnQiLAogICAgICMgRm9yIHRlc3RpbmcgcHVy
cG9zZXMgb25seS4KQEAgLTg1LDEwICs4MiwxOSBAQCBfVFlQRVNfTkVFRElOR19SVU5USU1FX0NB
U1RTID0gc2V0KFsKICMgRklYTUU6IFRoaXMgc2hvdWxkIGJlIGNvbnZlcnRlZCBpbnRvIGEgcHJv
cGVydHkgaW4gSlNPTi4KIF9UWVBFU19XSVRIX09QRU5fRklFTERTID0gewogICAgICJUaW1lbGlu
ZS5UaW1lbGluZUV2ZW50IjogW10sCi0gICAgIyBJbnNwZWN0b3JTdHlsZVNoZWV0IG5vdCBvbmx5
IGNyZWF0ZXMgdGhpcyBwcm9wZXJ0eSBidXQgd2FudHMgdG8gcmVhZCBpdCBhbmQgbW9kaWZ5IGl0
LgotICAgICJDU1MuQ1NTUHJvcGVydHkiOiBbXSwKLSAgICAjIEluc3BlY3Rvck5ldHdvcmtBZ2Vu
dCBuZWVkcyB0byB1cGRhdGUgbWltZS10eXBlLgotICAgICJOZXR3b3JrLlJlc3BvbnNlIjogWyJt
aW1lVHlwZSJdLAorICAgICJDU1MuQ1NTUHJvcGVydHkiOiBbInByaW9yaXR5IiwgInBhcnNlZE9r
IiwgInN0YXR1cyJdLAorICAgICJET00uSGlnaGxpZ2h0Q29uZmlnIjogW10sCisgICAgIkRPTS5S
R0JBQ29sb3IiOiBbXSwKKyAgICAiRE9NU3RvcmFnZS5TdG9yYWdlSWQiOiBbXSwKKyAgICAiRGVi
dWdnZXIuQnJlYWtwb2ludEFjdGlvbiI6IFtdLAorICAgICJEZWJ1Z2dlci5CcmVha3BvaW50T3B0
aW9ucyI6IFtdLAorICAgICJEZWJ1Z2dlci5Mb2NhdGlvbiI6IFtdLAorICAgICJJbmRleGVkREIu
S2V5IjogW10sCisgICAgIkluZGV4ZWREQi5LZXlSYW5nZSI6IFtdLAorICAgICJOZXR3b3JrLlJl
c3BvbnNlIjogWyJzdGF0dXMiLCAic3RhdHVzVGV4dCIsICJtaW1lVHlwZSIsICJzb3VyY2UiXSwK
KyAgICAiUGFnZS5Db29raWUiOiBbXSwKKyAgICAiUnVudGltZS5DYWxsQXJndW1lbnQiOiBbIm9i
amVjdElkIl0sCisgICAgIlJ1bnRpbWUuVHlwZUxvY2F0aW9uIjogW10sCiAgICAgIyBGb3IgdGVz
dGluZyBwdXJwb3NlcyBvbmx5LgogICAgICJUZXN0Lk9wZW5QYXJhbWV0ZXJzIjogWyJhbHBoYSJd
LAogfQpAQCAtMTM0LDcgKzE0MCw3IEBAIGNsYXNzIEdlbmVyYXRvcjoKICAgICAgICAgICAgIGlm
IHNlbGYubW9kZWwoKS5mcmFtZXdvcmsubmFtZSBub3QgaW4gYWxsb3dlZF9mcmFtZXdvcmtzOgog
ICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAKLSAgICAgICAgICAgIGlmIGZyYW1ld29ya19uYW1l
ID09ICJXVEYiOgorICAgICAgICAgICAgaWYgZnJhbWV3b3JrX25hbWUgPT0gIldURiIgb3IgZnJh
bWV3b3JrX25hbWUgPT0gInN0ZCI6CiAgICAgICAgICAgICAgICAgaW5jbHVkZXMuYWRkKCIjaW5j
bHVkZSA8JXM+IiAlIGhlYWRlcl9wYXRoKQogICAgICAgICAgICAgZWxpZiBzZWxmLm1vZGVsKCku
ZnJhbWV3b3JrLm5hbWUgIT0gZnJhbWV3b3JrX25hbWU6CiAgICAgICAgICAgICAgICAgaW5jbHVk
ZXMuYWRkKCIjaW5jbHVkZSA8JXMvJXM+IiAlIChmcmFtZXdvcmtfbmFtZSwgb3MucGF0aC5iYXNl
bmFtZShoZWFkZXJfcGF0aCkpKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vb2JqY19nZW5lcmF0b3IucHkgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9vYmpjX2dlbmVyYXRvci5weQppbmRl
eCA3MzE1M2I5NTQ2NjcyYjk5MDRlN2Y1ZWI5MTg4NjVmYzhhNTE2OGI2Li5hMmQzNzZkZjNiOTQz
ZGRjOTE2NzhiYmJhNWEyZWQzZjAyZTM3MGMwIDEwMDc1NQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9vYmpjX2dlbmVyYXRvci5weQorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9vYmpjX2dlbmVy
YXRvci5weQpAQCAtMjYzLDcgKzI2Myw3IEBAIGNsYXNzIE9iakNHZW5lcmF0b3IoR2VuZXJhdG9y
KToKICAgICAgICAgaWYgKGlzaW5zdGFuY2UoX3R5cGUsIEVudW1UeXBlKSk6CiAgICAgICAgICAg
ICByZXR1cm4gT2JqQ0dlbmVyYXRvci5wcm90b2NvbF90eXBlX2Zvcl90eXBlKF90eXBlLnByaW1p
dGl2ZV90eXBlKQogICAgICAgICBpZiAoaXNpbnN0YW5jZShfdHlwZSwgT2JqZWN0VHlwZSkpOgot
ICAgICAgICAgICAgcmV0dXJuICdJbnNwZWN0b3I6OlByb3RvY29sOjolczo6JXMnICUgKF90eXBl
LnR5cGVfZG9tYWluKCkuZG9tYWluX25hbWUsIF90eXBlLnJhd19uYW1lKCkpCisgICAgICAgICAg
ICByZXR1cm4gJ1Byb3RvY29sOjolczo6JXMnICUgKF90eXBlLnR5cGVfZG9tYWluKCkuZG9tYWlu
X25hbWUsIF90eXBlLnJhd19uYW1lKCkpCiAgICAgICAgIGlmIChpc2luc3RhbmNlKF90eXBlLCBB
cnJheVR5cGUpKToKICAgICAgICAgICAgIHN1Yl90eXBlID0gT2JqQ0dlbmVyYXRvci5wcm90b2Nv
bF90eXBlX2Zvcl90eXBlKF90eXBlLmVsZW1lbnRfdHlwZSkKICAgICAgICAgICAgIHJldHVybiAn
SlNPTjo6QXJyYXlPZjwlcz4nICUgc3ViX3R5cGUKQEAgLTM1Myw4ICszNTMsNiBAQCBjbGFzcyBP
YmpDR2VuZXJhdG9yKEdlbmVyYXRvcik6CiAgICAgICAgIGlmIChpc2luc3RhbmNlKF90eXBlLCBQ
cmltaXRpdmVUeXBlKSk6CiAgICAgICAgICAgICByZXR1cm4gc2VsZi5vYmpjX3R5cGVfZm9yX3Jh
d19uYW1lKF90eXBlLnJhd19uYW1lKCkpCiAgICAgICAgIGlmIChpc2luc3RhbmNlKF90eXBlLCBF
bnVtVHlwZSkpOgotICAgICAgICAgICAgaWYgX3R5cGUuaXNfYW5vbnltb3VzOgotICAgICAgICAg
ICAgICAgIHJldHVybiBzZWxmLm9iamNfZW51bV9uYW1lX2Zvcl9hbm9ueW1vdXNfZW51bV9wYXJh
bWV0ZXIoZG9tYWluLCBldmVudF9vcl9jb21tYW5kX25hbWUsIHBhcmFtZXRlcikKICAgICAgICAg
ICAgIHJldHVybiBzZWxmLm9iamNfZW51bV9uYW1lX2Zvcl9ub25fYW5vbnltb3VzX2VudW0oX3R5
cGUpCiAgICAgICAgIGlmIChpc2luc3RhbmNlKF90eXBlLCBPYmplY3RUeXBlKSk6CiAgICAgICAg
ICAgICByZXR1cm4gc2VsZi5vYmpjX25hbWVfZm9yX3R5cGUoX3R5cGUpICsgJyAqJwpAQCAtMzk4
LDggKzM5Niw2IEBAIGNsYXNzIE9iakNHZW5lcmF0b3IoR2VuZXJhdG9yKToKIAogICAgIGRlZiBv
YmpjX3Byb3RvY29sX2ltcG9ydF9leHByZXNzaW9uX2Zvcl9wYXJhbWV0ZXIoc2VsZiwgbmFtZSwg
ZG9tYWluLCBldmVudF9vcl9jb21tYW5kX25hbWUsIHBhcmFtZXRlcik6CiAgICAgICAgIGlmIGlz
aW5zdGFuY2UocGFyYW1ldGVyLnR5cGUsIEVudW1UeXBlKToKLSAgICAgICAgICAgIGlmIHBhcmFt
ZXRlci50eXBlLmlzX2Fub255bW91czoKLSAgICAgICAgICAgICAgICByZXR1cm4gJ2Zyb21Qcm90
b2NvbFN0cmluZzwlcz4oJXMpJyAlIChzZWxmLm9iamNfZW51bV9uYW1lX2Zvcl9hbm9ueW1vdXNf
ZW51bV9wYXJhbWV0ZXIoZG9tYWluLCBldmVudF9vcl9jb21tYW5kX25hbWUsIHBhcmFtZXRlciks
IG5hbWUpCiAgICAgICAgICAgICByZXR1cm4gJ2Zyb21Qcm90b2NvbFN0cmluZzwlcz4oJXMpJyAl
IChzZWxmLm9iamNfZW51bV9uYW1lX2Zvcl9ub25fYW5vbnltb3VzX2VudW0ocGFyYW1ldGVyLnR5
cGUpLCBuYW1lKQogICAgICAgICByZXR1cm4gc2VsZi5vYmpjX3Byb3RvY29sX2ltcG9ydF9leHBy
ZXNzaW9uX2Zvcl92YXJpYWJsZShwYXJhbWV0ZXIudHlwZSwgbmFtZSkKIApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL2NvZGVnZW4vb2JqY19nZW5l
cmF0b3JfdGVtcGxhdGVzLnB5IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL2NvZGVnZW4vb2JqY19nZW5lcmF0b3JfdGVtcGxhdGVzLnB5CmluZGV4IDMyNmMyNjI1ZWEz
NGYwNjZiMmQ0Y2M5ODQ2ZTE0YTIzNDFiODE4ODEuLjczOTMyOTRjYzZmOGUwOTM4ZGM0NDhkZGYz
Mzc0NDJjNjgzZGYyMmMgMTAwNzU1Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0
b3Ivc2NyaXB0cy9jb2RlZ2VuL29iamNfZ2VuZXJhdG9yX3RlbXBsYXRlcy5weQorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvY29kZWdlbi9vYmpjX2dlbmVyYXRv
cl90ZW1wbGF0ZXMucHkKQEAgLTExNCwxMyArMTE0LDEzIEBAIHByaXZhdGU6CiAgICAgIiIidm9p
ZCBPYmpDSW5zcGVjdG9yJHtkb21haW5OYW1lfUJhY2tlbmREaXNwYXRjaGVyOjoke2NvbW1hbmRO
YW1lfSgke3BhcmFtZXRlcnN9KQogewogICAgIGlmICghJHtyZXNwb25kc1RvU2VsZWN0b3J9KSB7
Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVz
dElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInJHtkb21haW5OYW1lfS4k
e2NvbW1hbmROYW1lfScgd2FzIG5vdCBmb3VuZCJfcyk7CisgICAgICAgIGJhY2tlbmREaXNwYXRj
aGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocHJvdG9jb2xfcmVxdWVzdElkLCBCYWNrZW5kRGlz
cGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInJHtkb21haW5OYW1lfS4ke2NvbW1hbmROYW1lfScg
d2FzIG5vdCBmb3VuZCJfcyk7CiAgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5k
aW5nRXJyb3JzKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZCBlcnJvckNhbGxi
YWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+
cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJF
cnJvciwgZXJyb3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2Nv
bEVycm9yKHByb3RvY29sX3JlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9y
LCBlcnJvcik7CiAgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3Jz
KCk7CiAgICAgfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rv
ci9zY3JpcHRzL3Rlc3RzL2VudW0tdmFsdWVzLmpzb24gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZW51bS12YWx1ZXMuanNvbgppbmRleCBjZGFkNjFkZjdj
OWY5Yzc2ZTY5Mjg5N2MzZGZlMGIwODIzZjkwZTRkLi4yODE1NjFiOTQ4ZTE5YTQxZmEwYTJjODBl
Y2YyZTA5YWYzYThiYzQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVj
dG9yL3NjcmlwdHMvdGVzdHMvZW51bS12YWx1ZXMuanNvbgorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZW51bS12YWx1ZXMuanNvbgpAQCAtMyw5ICsz
LDkgQEAKICAgICAiZG9tYWluIjogIlR5cGVEb21haW4iLAogICAgICJ0eXBlcyI6IFsKICAgICAg
ICAgewotICAgICAgICAgICAgImlkIjogIlR5cGVEb21haW5FbnVtIiwKKyAgICAgICAgICAgICJp
ZCI6ICJFbnVtIiwKICAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCi0gICAgICAgICAgICAi
ZW51bSI6IFsic2hhcmVkIiwgInJlZCIsICJncmVlbiIsICJibHVlIl0KKyAgICAgICAgICAgICJl
bnVtIjogWyJzaGFyZWQiLCAiMSIsICIyIl0KICAgICAgICAgfQogICAgIF0KIH0sCkBAIC0xMywx
MCArMTMsMTggQEAKICAgICAiZG9tYWluIjogIkNvbW1hbmREb21haW4iLAogICAgICJjb21tYW5k
cyI6IFsKICAgICAgICAgewotICAgICAgICAgICAgIm5hbWUiOiAiY29tbWFuZFdpdGhFbnVtUmV0
dXJuVmFsdWUiLAotICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbXSwKKyAgICAgICAgICAgICJu
YW1lIjogImNvbW1hbmQiLAorICAgICAgICAgICAgInBhcmFtZXRlcnMiOiBbCisgICAgICAgICAg
ICAgICAgeyAibmFtZSI6ICJlbnVtUmVxdWlyZWQiLCAiJHJlZiI6ICJUeXBlRG9tYWluLkVudW0i
IH0sCisgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJlbnVtT3B0aW9uYWwiLCAiJHJlZiI6ICJU
eXBlRG9tYWluLkVudW0iLCAib3B0aW9uYWwiOiB0cnVlIH0sCisgICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJwYXJhbWV0ZXJSZXF1aXJlZCIsICJ0eXBlIjogInN0cmluZyIsICJlbnVtIjogWyJz
aGFyZWQiLCAic2hhcmVkUmVxdWlyZWQiLCAiYmxhY2siXSB9LAorICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAicGFyYW1ldGVyT3B0aW9uYWwiLCAidHlwZSI6ICJzdHJpbmciLCAiZW51bSI6IFsi
c2hhcmVkIiwgInNoYXJlZE9wdGlvbmFsIiwgInJlZCJdLCAib3B0aW9uYWwiOiB0cnVlIH0KKyAg
ICAgICAgICAgIF0sCiAgICAgICAgICAgICAicmV0dXJucyI6IFsKLSAgICAgICAgICAgICAgICB7
ICJuYW1lIjogInJldHVyblZhbHVlIiwgInR5cGUiOiAic3RyaW5nIiwgImVudW0iOiBbInNoYXJl
ZCIsICJjeWFuIiwgIm1hZ2VudGEiLCAieWVsbG93Il0gfQorICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAiZW51bVJlcXVpcmVkIiwgIiRyZWYiOiAiVHlwZURvbWFpbi5FbnVtIiB9LAorICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAiZW51bU9wdGlvbmFsIiwgIiRyZWYiOiAiVHlwZURvbWFpbi5F
bnVtIiwgIm9wdGlvbmFsIjogdHJ1ZSB9LAorICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicmV0
dXJuUmVxdWlyZWQiLCAidHlwZSI6ICJzdHJpbmciLCAiZW51bSI6IFsic2hhcmVkIiwgInNoYXJl
ZFJlcXVpcmVkIiwgIndoaXRlIl0gfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInJldHVy
bk9wdGlvbmFsIiwgInR5cGUiOiAic3RyaW5nIiwgImVudW0iOiBbInNoYXJlZCIsICJzaGFyZWRP
cHRpb25hbCIsICJibHVlIl0sICJvcHRpb25hbCI6IHRydWUgfQogICAgICAgICAgICAgXQogICAg
ICAgICB9CiAgICAgXQpAQCAtMjUsOSArMzMsMTIgQEAKICAgICAiZG9tYWluIjogIkV2ZW50RG9t
YWluIiwKICAgICAiZXZlbnRzIjogWwogICAgICAgICB7Ci0gICAgICAgICAgICAibmFtZSI6ICJl
dmVudFdpdGhFbnVtUGFyYW1ldGVyIiwKKyAgICAgICAgICAgICJuYW1lIjogImV2ZW50IiwKICAg
ICAgICAgICAgICJwYXJhbWV0ZXJzIjogWwotICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAicGFy
YW1ldGVyIiwgInR5cGUiOiAic3RyaW5nIiwgImVudW0iOiBbInNoYXJlZCIsICJibGFjayIsICJ3
aGl0ZSJdIH0KKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImVudW1SZXF1aXJlZCIsICIkcmVm
IjogIlR5cGVEb21haW4uRW51bSIgfSwKKyAgICAgICAgICAgICAgICB7ICJuYW1lIjogImVudW1P
cHRpb25hbCIsICIkcmVmIjogIlR5cGVEb21haW4uRW51bSIsICJvcHRpb25hbCI6IHRydWUgfSwK
KyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBhcmFtZXRlclJlcXVpcmVkIiwgInR5cGUiOiAi
c3RyaW5nIiwgImVudW0iOiBbInNoYXJlZCIsICJzaGFyZWRSZXF1aXJlZCIsICJncmV5Il0gfSwK
KyAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBhcmFtZXRlck9wdGlvbmFsIiwgInR5cGUiOiAi
c3RyaW5nIiwgImVudW0iOiBbInNoYXJlZCIsICJzaGFyZWRPcHRpb25hbCIsICJncmVlbiJdLCAi
b3B0aW9uYWwiOiB0cnVlIH0KICAgICAgICAgICAgIF0KICAgICAgICAgfQogICAgIF0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBl
Y3RlZC9jb21tYW5kLXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpz
b24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2V4cGVjdGVkL2NvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5
cGUuanNvbi1yZXN1bHQKaW5kZXggZTljMThiZmFlNWIzMmM5NTdiYmVhZDRlMGViOWQwNmI2Mzk4
YjA2My4uNjRmYzM0MGVhZTVmMzA2MDM3NzEzOGU4NGYwYTRiZDM2ZGY4NmI0OSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVk
L2NvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbi1y
ZXN1bHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3Rz
L2V4cGVjdGVkL2NvbW1hbmQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5
cGUuanNvbi1yZXN1bHQKQEAgLTcwLDcgKzcwLDcgQEAgSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0
ZURvbWFpbigiRG9tYWluIiwgWyJwYWdlIl0pOwogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRF
Uk5BVEVfRElTUEFUQ0hFUlMpCiAKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgorI2lu
Y2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9J
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0lu
c3BlY3RvckZyb250ZW5kUm91dGVyLmg+CiAKQEAgLTg4LDcgKzg4LDcgQEAgcHJpdmF0ZToKIGNs
YXNzIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyIDogcHVibGljIEFsdGVybmF0ZUJh
Y2tlbmREaXNwYXRjaGVyIHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5BbHRlcm5hdGVEb21haW5C
YWNrZW5kRGlzcGF0Y2hlcigpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBDb21tYW5kKGxvbmcgY2Fs
bElkKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIENvbW1hbmQobG9uZyBwcm90b2NvbF9yZXF1ZXN0
SWQpID0gMDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgpAQCAtMTMwLDExICsxMzAs
MTQgQEAgcHVibGljOgogCiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVk
ZSA8dHVwbGU+CisjaW5jbHVkZSA8d3RmL0V4cGVjdGVkLmg+CisjaW5jbHVkZSA8d3RmL09wdGlv
bmFsLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNw
ZWN0b3IgewogCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKwogCiAjaWYgRU5BQkxFKElO
U1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiBjbGFzcyBBbHRlcm5hdGVEb21haW5CYWNr
ZW5kRGlzcGF0Y2hlcjsKQEAgLTE0Miw3ICsxNDUsNyBAQCBjbGFzcyBBbHRlcm5hdGVEb21haW5C
YWNrZW5kRGlzcGF0Y2hlcjsKIAogY2xhc3MgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVy
IHsKIHB1YmxpYzoKLSAgICB2aXJ0dWFsIHZvaWQgQ29tbWFuZChFcnJvclN0cmluZyYpID0gMDsK
KyAgICB2aXJ0dWFsIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IENvbW1hbmQoKSA9IDA7
CiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB+RG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVy
KCk7CiB9OwpAQCAtMTUwLDkgKzE1Myw5IEBAIHByb3RlY3RlZDoKIGNsYXNzIERvbWFpbkJhY2tl
bmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVy
IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPERvbWFpbkJhY2tlbmREaXNwYXRjaGVyPiBjcmVh
dGUoQmFja2VuZERpc3BhdGNoZXImLCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsK
LSAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwg
UmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKSBmaW5hbDsKKyAgICB2b2lkIGRpc3BhdGNoKGxv
bmcgcHJvdG9jb2xfcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIHByb3RvY29sX21ldGhvZCwgUmVm
PEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9tZXNzYWdlKSBmaW5hbDsKIHByaXZhdGU6Ci0gICAg
dm9pZCBDb21tYW5kKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFt
ZXRlcnMpOworICAgIHZvaWQgQ29tbWFuZChsb25nIHByb3RvY29sX3JlcXVlc3RJZCwgUmVmUHRy
PEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9wYXJhbWV0ZXJzKTsKICNpZiBFTkFCTEUoSU5TUEVD
VE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIHB1YmxpYzoKICAgICB2b2lkIHNldEFsdGVybmF0
ZURpc3BhdGNoZXIoQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIqIGFsdGVybmF0ZURp
c3BhdGNoZXIpIHsgbV9hbHRlcm5hdGVEaXNwYXRjaGVyID0gYWx0ZXJuYXRlRGlzcGF0Y2hlcjsg
fQpAQCAtMjAxLDkgKzIwNCw3IEBAIHByaXZhdGU6CiAjaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNw
YXRjaGVycy5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRS
b3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgogI2luY2x1ZGUgPHd0Zi9OZXZl
ckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogI2lmIEVOQUJM
RShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogI2luY2x1ZGUgIlRlc3RBbHRlcm5h
dGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKQEAgLTIyNSwzOCArMjI2LDM4IEBAIERvbWFpbkJhY2tl
bmREaXNwYXRjaGVyOjpEb21haW5CYWNrZW5kRGlzcGF0Y2hlcihCYWNrZW5kRGlzcGF0Y2hlciYg
YmFja2VuZERpc3BhCiAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRjaGVy
Rm9yRG9tYWluKCJEb21haW4iX3MsIHRoaXMpOwogfQogCi12b2lkIERvbWFpbkJhY2tlbmREaXNw
YXRjaGVyOjpkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJl
ZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkKK3ZvaWQgRG9tYWluQmFja2VuZERpc3BhdGNoZXI6
OmRpc3BhdGNoKGxvbmcgcHJvdG9jb2xfcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIHByb3RvY29s
X21ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9tZXNzYWdlKQogewogICAgIFJl
ZjxEb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7CiAKLSAgICBSZWZQdHI8
SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzOwotICAgIG1lc3NhZ2UtPmdldE9iamVjdCgicGFyYW1z
Il9zLCBwYXJhbWV0ZXJzKTsKKyAgICBhdXRvIHByb3RvY29sX3BhcmFtZXRlcnMgPSBwcm90b2Nv
bF9tZXNzYWdlLT5nZXRPYmplY3QoInBhcmFtcyJfcyk7CiAKLSAgICBpZiAobWV0aG9kID09ICJD
b21tYW5kIikgewotICAgICAgICBDb21tYW5kKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJz
KSk7CisgICAgaWYgKHByb3RvY29sX21ldGhvZCA9PSAiQ29tbWFuZCIpIHsKKyAgICAgICAgQ29t
bWFuZChwcm90b2NvbF9yZXF1ZXN0SWQsIFdURk1vdmUocHJvdG9jb2xfcGFyYW1ldGVycykpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0
UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRG9tYWlu
LiIgKyBtZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQs
ICInRG9tYWluLiIgKyBwcm90b2NvbF9tZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7CiB9CiAK
LXZvaWQgRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkNvbW1hbmQobG9uZyByZXF1ZXN0SWQsIFJl
ZlB0cjxKU09OOjpPYmplY3Q+JiYpCit2b2lkIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpDb21t
YW5kKGxvbmcgcHJvdG9jb2xfcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQogewog
I2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogICAgIGlmIChtX2Fs
dGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5Db21t
YW5kKHJlcXVlc3RJZCk7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+Q29tbWFuZChw
cm90b2NvbF9yZXF1ZXN0SWQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmIC8vIEVO
QUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogCi0gICAgRXJyb3JTdHJpbmcg
ZXJyb3I7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVh
dGUoKTsKLSAgICBtX2FnZW50LT5Db21tYW5kKGVycm9yKTsKKyAgICBhdXRvIHJlc3VsdCA9IG1f
YWdlbnQtPkNvbW1hbmQoKTsKKyAgICBpZiAoIXJlc3VsdCkgeworICAgICAgICBBU1NFUlQoIXJl
c3VsdC5lcnJvcigpLmlzRW1wdHkoKSk7CisgICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJl
cG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCByZXN1bHQu
ZXJyb3IoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBpZiAoIWVycm9yLmxlbmd0
aCgpKQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElk
LCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERp
c3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVy
cm9yLCBXVEZNb3ZlKGVycm9yKSk7CisgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpT
T046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3Bv
bnNlKHByb3RvY29sX3JlcXVlc3RJZCwgV1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSksIGZh
bHNlKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCkBAIC0yOTcsNiArMjk4LDcgQEAg
dm9pZCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Q29tbWFuZChsb25nIHJlcXVlc3RJZCwgUmVm
UHRyPEpTT046Ok9iamVjdD4mJikKIAogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIK
ICNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgog
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsK
QEAgLTM0OSwxNiArMzUxLDE1IEBAIHByaXZhdGU6CiAjaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlz
cGF0Y2hlcnMuaCIKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5k
Um91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5z
cGVjdG9yIHsKIAogdm9pZCBEb21haW5Gcm9udGVuZERpc3BhdGNoZXI6OkV2ZW50KCkKIHsKLSAg
ICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7
Ci0gICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiRG9tYWluLkV2ZW50Il9z
KTsKKyAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUo
KTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJEb21h
aW4uRXZlbnQiX3MpOwogCi0gICAgbV9mcm9udGVuZFJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3Nh
Z2UtPnRvSlNPTlN0cmluZygpKTsKKyAgICBtX2Zyb250ZW5kUm91dGVyLnNlbmRFdmVudChwcm90
b2NvbF9qc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBJ
bnNwZWN0b3IKQEAgLTM5OCw3ICszOTksOSBAQCB2b2lkIERvbWFpbkZyb250ZW5kRGlzcGF0Y2hl
cjo6RXZlbnQoKQogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JQcm90b2NvbFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNs
dWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAt
NDUyLDggKzQ1NSw3IEBAIG5hbWVzcGFjZSBQcm90b2NvbCB7CiAjaW5jbHVkZSAiY29uZmlnLmgi
CiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogCi0jaW5jbHVkZSA8d3RmL09wdGlv
bmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3Nl
cnRpb25zLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC01MDksNyArNTExLDcgQEAg
Y2xhc3MgT2JqQ0luc3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGlj
IEFsdGVybmF0ZURvbWFpbkJhY2tlbmQKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1
YmxpYzoKICAgICBPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXIoaWQ8VGVzdFBy
b3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4gaGFuZGxlcikgeyBtX2RlbGVnYXRlID0gaGFuZGxl
cjsgfQotICAgIHZvaWQgQ29tbWFuZChsb25nIHJlcXVlc3RJZCkgZmluYWw7CisgICAgdm9pZCBD
b21tYW5kKGxvbmcgcHJvdG9jb2xfcmVxdWVzdElkKSBmaW5hbDsKIHByaXZhdGU6CiAgICAgUmV0
YWluUHRyPGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+PiBtX2RlbGVnYXRlOwog
fTsKQEAgLTU1NywyMSArNTU5LDIyIEBAIHByaXZhdGU6CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3Ig
ewogCi12b2lkIE9iakNJbnNwZWN0b3JEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Q29tbWFuZChs
b25nIHJlcXVlc3RJZCkKK3ZvaWQgT2JqQ0luc3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVy
OjpDb21tYW5kKGxvbmcgcHJvdG9jb2xfcmVxdWVzdElkKQogewogICAgIGlmICghW21fZGVsZWdh
dGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihDb21tYW5kV2l0aEVycm9yQ2FsbGJhY2s6
c3VjY2Vzc0NhbGxiYWNrOildKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9y
dFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91
bmQsICInRG9tYWluLkNvbW1hbmQnIHdhcyBub3QgZm91bmQiX3MpOworICAgICAgICBiYWNrZW5k
RGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHByb3RvY29sX3JlcXVlc3RJZCwgQmFj
a2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RvbWFpbi5Db21tYW5kJyB3YXMgbm90
IGZvdW5kIl9zKTsKICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJv
cnMoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBe
KE5TU3RyaW5nICplcnJvcikgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQ
cm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBl
cnJvcik7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3Io
cHJvdG9jb2xfcmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9y
KTsKICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKICAg
ICB9OwogCiAgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKLSAgICAgICAgYmFja2VuZERpc3Bh
dGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSwg
ZmFsc2UpOworICAgICAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0
OjpjcmVhdGUoKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHBy
b3RvY29sX3JlcXVlc3RJZCwgV1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSksIGZhbHNlKTsK
ICAgICB9OwogCiAgICAgW21fZGVsZWdhdGUgQ29tbWFuZFdpdGhFcnJvckNhbGxiYWNrOmVycm9y
Q2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107CkBAIC03NzMsOSArNzc2
LDkgQEAgdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsKIHsKICAgICBjb25zdCBGcm9udGVuZFJv
dXRlciYgcm91dGVyID0gX2NvbnRyb2xsZXItPmZyb250ZW5kUm91dGVyKCk7CiAKLSAgICBSZWY8
SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAg
anNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiRG9tYWluLkV2ZW50Il9zKTsKLSAg
ICByb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7CisgICAgYXV0
byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgcHJv
dG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiRG9tYWluLkV2ZW50Il9z
KTsKKyAgICByb3V0ZXIuc2VuZEV2ZW50KHByb3RvY29sX2pzb25NZXNzYWdlLT50b0pTT05TdHJp
bmcoKSk7CiB9CiAKIEBlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9jb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0
ZS5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9leHBlY3RlZC9jb21tYW5kcy13aXRoLWFzeW5jLWF0dHJpYnV0ZS5qc29uLXJlc3VsdApp
bmRleCBkMWM2OWIwMzFjZGI0NzFkMThhMmU0OTc4ZjIxMjdiMGVjZDQ3YzUyLi4wNTFmOTcxY2Fm
NTViZTI2MmRkZWQwNDVkMTdkMGNlN2M1YTUzZWNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1h
c3luYy1hdHRyaWJ1dGUuanNvbi1yZXN1bHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2NvbW1hbmRzLXdpdGgtYXN5bmMtYXR0cmli
dXRlLmpzb24tcmVzdWx0CkBAIC03Myw3ICs3Myw3IEBAIEluc3BlY3RvckJhY2tlbmQuYWN0aXZh
dGVEb21haW4oIkRhdGFiYXNlIiwgbnVsbCk7CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVS
TkFURV9ESVNQQVRDSEVSUykKIAotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCisjaW5j
bHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0lu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KIApAQCAtOTEsMTAgKzkxLDEwIEBAIHByaXZhdGU6CiBj
bGFzcyBBbHRlcm5hdGVEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyIDogcHVibGljIEFsdGVybmF0
ZUJhY2tlbmREaXNwYXRjaGVyIHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5BbHRlcm5hdGVEYXRh
YmFzZUJhY2tlbmREaXNwYXRjaGVyKCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVTUUxT
eW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyBjYWxsSWQsIGludCBpbl9kYXRhYmFzZUlkLCBj
b25zdCBTdHJpbmcmIGluX3F1ZXJ5KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVTUUxB
c3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgY2FsbElkLCBpbnQgaW5fZGF0YWJhc2VJZCwg
Y29uc3QgU3RyaW5nJiBpbl9xdWVyeSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU1FM
U3luYyhsb25nIGNhbGxJZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVl
cnkpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNRTEFzeW5jKGxvbmcgY2FsbElkLCBp
bnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSkgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgcHJvdG9jb2xf
cmVxdWVzdElkLCBpbnQgZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBxdWVyeSkgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIHBy
b3RvY29sX3JlcXVlc3RJZCwgaW50IGRhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgcXVlcnkpID0g
MDsKKyAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNRTFN5bmMobG9uZyBwcm90b2NvbF9yZXF1ZXN0
SWQsIGludCBkYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIHF1ZXJ5KSA9IDA7CisgICAgdmlydHVh
bCB2b2lkIGV4ZWN1dGVTUUxBc3luYyhsb25nIHByb3RvY29sX3JlcXVlc3RJZCwgaW50IGRhdGFi
YXNlSWQsIGNvbnN0IFN0cmluZyYgcXVlcnkpID0gMDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIElu
c3BlY3RvcgpAQCAtMTM2LDExICsxMzYsMTQgQEAgcHVibGljOgogCiAjaW5jbHVkZSAiVGVzdFBy
b3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8dHVwbGU+CisjaW5jbHVkZSA8d3RmL0V4cGVjdGVk
Lmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCi10eXBlZGVmIFN0cmluZyBFcnJvclN0
cmluZzsKKwogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiBj
bGFzcyBBbHRlcm5hdGVEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOwpAQCAtMTQ4LDI3ICsxNTEs
MjAgQEAgY2xhc3MgQWx0ZXJuYXRlRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjsKIAogY2xhc3Mg
RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewogcHVibGljOgotICAgIC8vIE5hbWVk
IGFmdGVyIHBhcmFtZXRlciAncHJpbnRDb2xvcicgd2hpbGUgZ2VuZXJhdGluZyBjb21tYW5kL2V2
ZW50IGV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMuCi0gICAgZW51bSBjbGFzcyBQ
cmludENvbG9yIHsKLSAgICAgICAgQ3lhbiA9IDMsCi0gICAgICAgIE1hZ2VudGEgPSA0LAotICAg
ICAgICBZZWxsb3cgPSA1LAotICAgICAgICBCbGFjayA9IDYsCi0gICAgfTsgLy8gZW51bSBjbGFz
cyBQcmludENvbG9yCi0gICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1
cm5WYWx1ZXMoRXJyb3JTdHJpbmcmLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBp
bl9xdWVyeSwgUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4mIG9wdF9vdXRfY29sdW1uTmFt
ZXMsIE9wdGlvbmFsPFN0cmluZz4mIG9wdF9vdXRfbm90ZXMsIE9wdGlvbmFsPGRvdWJsZT4mIG9w
dF9vdXRfdGltZXN0YW1wLCBPcHRpb25hbDxKU09OOjpPYmplY3Q+JiBvcHRfb3V0X3ZhbHVlcywg
T3B0aW9uYWw8SlNPTjo6VmFsdWU+JiBvcHRfb3V0X3BheWxvYWQsIE9wdGlvbmFsPGludD4mIG9w
dF9vdXRfZGF0YWJhc2VJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpF
cnJvcj4mIG9wdF9vdXRfc3FsRXJyb3IsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQ
cmltYXJ5Q29sb3JzKiBvcHRfb3V0X3NjcmVlbkNvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4mIG9wdF9vdXRfYWx0ZXJuYXRlQ29sb3JzLCBEYXRh
YmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UHJpbnRDb2xvciogb3B0X291dF9wcmludENv
bG9yKSA9IDA7CisgICAgdmlydHVhbCBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxzdGQ6OnR1cGxl
PFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+IC8qIG9wdF9jb2x1bW5OYW1lcyAqLywgU3Ry
aW5nIC8qIG9wdF9ub3RlcyAqLywgT3B0aW9uYWw8ZG91YmxlPiAvKiBvcHRfdGltZXN0YW1wICov
LCBSZWZQdHI8SlNPTjo6T2JqZWN0PiAvKiBvcHRfdmFsdWVzICovLCBSZWZQdHI8SlNPTjo6VmFs
dWU+IC8qIG9wdF9wYXlsb2FkICovLCBPcHRpb25hbDxpbnQ+IC8qIG9wdF9kYXRhYmFzZUlkICov
LCBSZWZQdHI8UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4gLyogb3B0X3NxbEVycm9yICovLCBP
cHRpb25hbDxQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+IC8qIG9wdF9zY3JlZW5D
b2xvciAqLywgUmVmUHRyPFByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiAvKiBvcHRfYWx0
ZXJuYXRlQ29sb3JzICovLCBTdHJpbmcgLyogb3B0X3ByaW50Q29sb3IgKi8+PiBleGVjdXRlU1FM
U3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGludCBkYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIHF1
ZXJ5KSA9IDA7CiAgICAgY2xhc3MgRXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXND
YWxsYmFjayA6IHB1YmxpYyBCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJhY2tCYXNlIHsKICAgICBw
dWJsaWM6CiAgICAgICAgIEV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJh
Y2soUmVmPEJhY2tlbmREaXNwYXRjaGVyPiYmLCBpbnQgaWQpOwotICAgICAgICB2b2lkIHNlbmRT
dWNjZXNzKFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+JiYgY29sdW1uTmFtZXMsIE9wdGlv
bmFsPFN0cmluZz4mIG5vdGVzLCBPcHRpb25hbDxkb3VibGU+JiB0aW1lc3RhbXAsIE9wdGlvbmFs
PEpTT046Ok9iamVjdD4mIHZhbHVlcywgT3B0aW9uYWw8SlNPTjo6VmFsdWU+JiBwYXlsb2FkLCBP
cHRpb25hbDxpbnQ+JiBkYXRhYmFzZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0
YWJhc2U6OkVycm9yPiYmIHNxbEVycm9yLCBPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpE
YXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4gc2NyZWVuQ29sb3IsIFJlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiYmIGFsdGVybmF0ZUNvbG9ycywgT3B0aW9uYWw8
RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3I+IHByaW50Q29sb3Ip
OworICAgICAgICB2b2lkIHNlbmRTdWNjZXNzKFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+
JiYgb3B0X2NvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIG9wdF9ub3RlcywgT3B0aW9uYWw8ZG91
YmxlPiYmIG9wdF90aW1lc3RhbXAsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgb3B0X3ZhbHVlcywg
UmVmUHRyPEpTT046OlZhbHVlPiYmIG9wdF9wYXlsb2FkLCBPcHRpb25hbDxpbnQ+JiYgb3B0X2Rh
dGFiYXNlSWQsIFJlZlB0cjxQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiYmIG9wdF9zcWxFcnJv
ciwgT3B0aW9uYWw8UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPiYmIG9wdF9zY3Jl
ZW5Db2xvciwgUmVmUHRyPFByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiYmIG9wdF9hbHRl
cm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyYgb3B0X3ByaW50Q29sb3IpOwogICAgIH07Ci0gICAg
dmlydHVhbCB2b2lkIGV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGludCBpbl9k
YXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5LCBSZWY8RXhlY3V0ZVNRTEFzeW5jT3B0
aW9uYWxSZXR1cm5WYWx1ZXNDYWxsYmFjaz4mJiBjYWxsYmFjaykgPSAwOwotICAgIHZpcnR1YWwg
dm9pZCBleGVjdXRlU1FMU3luYyhFcnJvclN0cmluZyYsIGludCBpbl9kYXRhYmFzZUlkLCBjb25z
dCBTdHJpbmcmIGluX3F1ZXJ5LCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiYgb3V0X2Nv
bHVtbk5hbWVzLCBTdHJpbmcqIG91dF9ub3RlcywgZG91YmxlKiBvdXRfdGltZXN0YW1wLCBKU09O
OjpPYmplY3QqIG91dF92YWx1ZXMsIEpTT046OlZhbHVlKiBvdXRfcGF5bG9hZCwgaW50KiBvdXRf
ZGF0YWJhc2VJZCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4m
IG91dF9zcWxFcnJvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xv
ckxpc3Q+JiBvdXRfYWx0ZXJuYXRlQ29sb3JzLCBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFz
ZTo6UHJpbWFyeUNvbG9ycyogb3V0X3NjcmVlbkNvbG9yLCBEYXRhYmFzZUJhY2tlbmREaXNwYXRj
aGVySGFuZGxlcjo6UHJpbnRDb2xvciogb3V0X3ByaW50Q29sb3IpID0gMDsKKyAgICB2aXJ0dWFs
IHZvaWQgZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMoaW50IGRhdGFiYXNlSWQs
IGNvbnN0IFN0cmluZyYgcXVlcnksIFJlZjxFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZh
bHVlc0NhbGxiYWNrPiYmKSA9IDA7CisgICAgdmlydHVhbCBQcm90b2NvbDo6RXJyb3JTdHJpbmdP
cjxzdGQ6OnR1cGxlPFJlZjxKU09OOjpBcnJheU9mPFN0cmluZz4+IC8qIGNvbHVtbk5hbWVzICov
LCBTdHJpbmcgLyogbm90ZXMgKi8sIGRvdWJsZSAvKiB0aW1lc3RhbXAgKi8sIFJlZjxKU09OOjpP
YmplY3Q+IC8qIHZhbHVlcyAqLywgUmVmPEpTT046OlZhbHVlPiAvKiBwYXlsb2FkICovLCBpbnQg
LyogZGF0YWJhc2VJZCAqLywgUmVmPFByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IC8qIHNxbEVy
cm9yICovLCBSZWY8UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+IC8qIGFsdGVybmF0ZUNv
bG9ycyAqLywgUHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzIC8qIHNjcmVlbkNvbG9y
ICovLCBTdHJpbmcgLyogcHJpbnRDb2xvciAqLz4+IGV4ZWN1dGVTUUxTeW5jKGludCBkYXRhYmFz
ZUlkLCBjb25zdCBTdHJpbmcmIHF1ZXJ5KSA9IDA7CiAgICAgY2xhc3MgRXhlY3V0ZVNRTEFzeW5j
Q2FsbGJhY2sgOiBwdWJsaWMgQmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNrQmFzZSB7CiAgICAg
cHVibGljOgogICAgICAgICBFeGVjdXRlU1FMQXN5bmNDYWxsYmFjayhSZWY8QmFja2VuZERpc3Bh
dGNoZXI+JiYsIGludCBpZCk7Ci0gICAgICAgIHZvaWQgc2VuZFN1Y2Nlc3MoUmVmUHRyPEpTT046
OkFycmF5T2Y8U3RyaW5nPj4mJiBjb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBub3RlcywgZG91
YmxlIHRpbWVzdGFtcCwgSlNPTjo6T2JqZWN0IHZhbHVlcywgSlNPTjo6VmFsdWUgcGF5bG9hZCwg
aW50IGRhdGFiYXNlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJy
b3I+JiYgc3FsRXJyb3IsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29s
b3JzIHNjcmVlbkNvbG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkNv
bG9yTGlzdD4mJiBhbHRlcm5hdGVDb2xvcnMsIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5k
bGVyOjpQcmludENvbG9yIHByaW50Q29sb3IpOworICAgICAgICB2b2lkIHNlbmRTdWNjZXNzKFJl
ZjxKU09OOjpBcnJheU9mPFN0cmluZz4+JiYgY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgbm90
ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIFJlZjxKU09OOjpPYmplY3Q+JiYgdmFsdWVzLCBSZWY8SlNP
Tjo6VmFsdWU+JiYgcGF5bG9hZCwgaW50IGRhdGFiYXNlSWQsIFJlZjxQcm90b2NvbDo6RGF0YWJh
c2U6OkVycm9yPiYmIHNxbEVycm9yLCBQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMg
c2NyZWVuQ29sb3IsIFJlZjxQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4mJiBhbHRlcm5h
dGVDb2xvcnMsIGNvbnN0IFN0cmluZyYgcHJpbnRDb2xvcik7CiAgICAgfTsKLSAgICB2aXJ0dWFs
IHZvaWQgZXhlY3V0ZVNRTEFzeW5jKGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGlu
X3F1ZXJ5LCBSZWY8RXhlY3V0ZVNRTEFzeW5jQ2FsbGJhY2s+JiYgY2FsbGJhY2spID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNRTEFzeW5jKGludCBkYXRhYmFzZUlkLCBjb25zdCBTdHJp
bmcmIHF1ZXJ5LCBSZWY8RXhlY3V0ZVNRTEFzeW5jQ2FsbGJhY2s+JiYpID0gMDsKIHByb3RlY3Rl
ZDoKICAgICB2aXJ0dWFsIH5EYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpOwogfTsK
QEAgLTE3NiwxMiArMTcyLDEyIEBAIHByb3RlY3RlZDoKIGNsYXNzIERhdGFiYXNlQmFja2VuZERp
c3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIgewog
cHVibGljOgogICAgIHN0YXRpYyBSZWY8RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRl
KEJhY2tlbmREaXNwYXRjaGVyJiwgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIqKTsK
LSAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwg
UmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKSBmaW5hbDsKKyAgICB2b2lkIGRpc3BhdGNoKGxv
bmcgcHJvdG9jb2xfcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIHByb3RvY29sX21ldGhvZCwgUmVm
PEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9tZXNzYWdlKSBmaW5hbDsKIHByaXZhdGU6Ci0gICAg
dm9pZCBleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgcmVxdWVzdElkLCBS
ZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOwotICAgIHZvaWQgZXhlY3V0ZVNRTEFz
eW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmpl
Y3Q+JiYgcGFyYW1ldGVycyk7Ci0gICAgdm9pZCBleGVjdXRlU1FMU3luYyhsb25nIHJlcXVlc3RJ
ZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKLSAgICB2b2lkIGV4ZWN1dGVT
UUxBc3luYyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJz
KTsKKyAgICB2b2lkIGV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyBwcm90
b2NvbF9yZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfcGFyYW1ldGVy
cyk7CisgICAgdm9pZCBleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIHBy
b3RvY29sX3JlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9wYXJhbWV0
ZXJzKTsKKyAgICB2b2lkIGV4ZWN1dGVTUUxTeW5jKGxvbmcgcHJvdG9jb2xfcmVxdWVzdElkLCBS
ZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX3BhcmFtZXRlcnMpOworICAgIHZvaWQgZXhl
Y3V0ZVNRTEFzeW5jKGxvbmcgcHJvdG9jb2xfcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0
PiYmIHByb3RvY29sX3BhcmFtZXRlcnMpOwogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRF
X0RJU1BBVENIRVJTKQogcHVibGljOgogICAgIHZvaWQgc2V0QWx0ZXJuYXRlRGlzcGF0Y2hlcihB
bHRlcm5hdGVEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKiBhbHRlcm5hdGVEaXNwYXRjaGVyKSB7
IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IGFsdGVybmF0ZURpc3BhdGNoZXI7IH0KQEAgLTIzMCw5
ICsyMjYsNyBAQCBwcml2YXRlOgogI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIK
IAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0j
aW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQu
aD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9S
X0FMVEVSTkFURV9ESVNQQVRDSEVSUykKICNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERp
c3BhdGNoZXJzLmgiCkBAIC0yNTQsMzcgKzI0OCwzNiBAQCBEYXRhYmFzZUJhY2tlbmREaXNwYXRj
aGVyOjpEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5k
RAogICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbigi
RGF0YWJhc2UiX3MsIHRoaXMpOwogfQogCi12b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6
OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046
Ok9iamVjdD4mJiBtZXNzYWdlKQordm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpkaXNw
YXRjaChsb25nIHByb3RvY29sX3JlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBwcm90b2NvbF9tZXRo
b2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfbWVzc2FnZSkKIHsKICAgICBSZWY8RGF0
YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7CiAKLSAgICBSZWZQdHI8SlNP
Tjo6T2JqZWN0PiBwYXJhbWV0ZXJzOwotICAgIG1lc3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9z
LCBwYXJhbWV0ZXJzKTsKKyAgICBhdXRvIHByb3RvY29sX3BhcmFtZXRlcnMgPSBwcm90b2NvbF9t
ZXNzYWdlLT5nZXRPYmplY3QoInBhcmFtcyJfcyk7CiAKLSAgICBpZiAobWV0aG9kID09ICJleGVj
dXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzIikgewotICAgICAgICBleGVjdXRlU1FMU3lu
Y09wdGlvbmFsUmV0dXJuVmFsdWVzKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7Cisg
ICAgaWYgKHByb3RvY29sX21ldGhvZCA9PSAiZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZh
bHVlcyIpIHsKKyAgICAgICAgZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhwcm90
b2NvbF9yZXF1ZXN0SWQsIFdURk1vdmUocHJvdG9jb2xfcGFyYW1ldGVycykpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQotICAgIGlmIChtZXRob2QgPT0gImV4ZWN1dGVTUUxBc3luY09wdGlvbmFs
UmV0dXJuVmFsdWVzIikgewotICAgICAgICBleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZh
bHVlcyhyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykpOworICAgIGlmIChwcm90b2NvbF9t
ZXRob2QgPT0gImV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzIikgeworICAgICAg
ICBleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhwcm90b2NvbF9yZXF1ZXN0SWQs
IFdURk1vdmUocHJvdG9jb2xfcGFyYW1ldGVycykpOwogICAgICAgICByZXR1cm47CiAgICAgfQot
ICAgIGlmIChtZXRob2QgPT0gImV4ZWN1dGVTUUxTeW5jIikgewotICAgICAgICBleGVjdXRlU1FM
U3luYyhyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykpOworICAgIGlmIChwcm90b2NvbF9t
ZXRob2QgPT0gImV4ZWN1dGVTUUxTeW5jIikgeworICAgICAgICBleGVjdXRlU1FMU3luYyhwcm90
b2NvbF9yZXF1ZXN0SWQsIFdURk1vdmUocHJvdG9jb2xfcGFyYW1ldGVycykpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQotICAgIGlmIChtZXRob2QgPT0gImV4ZWN1dGVTUUxBc3luYyIpIHsKLSAg
ICAgICAgZXhlY3V0ZVNRTEFzeW5jKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7Cisg
ICAgaWYgKHByb3RvY29sX21ldGhvZCA9PSAiZXhlY3V0ZVNRTEFzeW5jIikgeworICAgICAgICBl
eGVjdXRlU1FMQXN5bmMocHJvdG9jb2xfcmVxdWVzdElkLCBXVEZNb3ZlKHByb3RvY29sX3BhcmFt
ZXRlcnMpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1fYmFja2VuZERpc3BhdGNo
ZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5k
LCAiJ0RhdGFiYXNlLiIgKyBtZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7CisgICAgbV9iYWNr
ZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0
aG9kTm90Rm91bmQsICInRGF0YWJhc2UuIiArIHByb3RvY29sX21ldGhvZCArICInIHdhcyBub3Qg
Zm91bmQiKTsKIH0KIAotdm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FM
U3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiYmIHBhcmFtZXRlcnMpCit2b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1
dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyBwcm90b2NvbF9yZXF1ZXN0SWQsIFJl
ZlB0cjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfcGFyYW1ldGVycykKIHsKLSAgICBpbnQgaW5f
ZGF0YWJhc2VJZCA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldEludGVnZXIocGFyYW1ldGVycy5n
ZXQoKSwgImRhdGFiYXNlSWQiX3MsIG51bGxwdHIpOwotICAgIFN0cmluZyBpbl9xdWVyeSA9IG1f
YmFja2VuZERpc3BhdGNoZXItPmdldFN0cmluZyhwYXJhbWV0ZXJzLmdldCgpLCAicXVlcnkiX3Ms
IG51bGxwdHIpOworICAgIGF1dG8gaW5fZGF0YWJhc2VJZCA9IG1fYmFja2VuZERpc3BhdGNoZXIt
PmdldEludGVnZXIocHJvdG9jb2xfcGFyYW1ldGVycy5nZXQoKSwgImRhdGFiYXNlSWQiX3MsIHRy
dWUpOworICAgIGF1dG8gaW5fcXVlcnkgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRTdHJpbmco
cHJvdG9jb2xfcGFyYW1ldGVycy5nZXQoKSwgInF1ZXJ5Il9zLCB0cnVlKTsKICAgICBpZiAobV9i
YWNrZW5kRGlzcGF0Y2hlci0+aGFzUHJvdG9jb2xFcnJvcnMoKSkgewogICAgICAgICBtX2JhY2tl
bmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpJbnZh
bGlkUGFyYW1zLCAiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICdEYXRhYmFzZS5leGVjdXRlU1FM
U3luY09wdGlvbmFsUmV0dXJuVmFsdWVzJyBjYW4ndCBiZSBwcm9jZXNzZWQiX3MpOwogICAgICAg
ICByZXR1cm47CkBAIC0yOTIsODUgKzI4NSw3NiBAQCB2b2lkIERhdGFiYXNlQmFja2VuZERpc3Bh
dGNoZXI6OmV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyByZXF1ZXN0SQog
CiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAgICAgaWYgKG1f
YWx0ZXJuYXRlRGlzcGF0Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmV4
ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMocmVxdWVzdElkLCBpbl9kYXRhYmFzZUlk
LCBpbl9xdWVyeSk7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+ZXhlY3V0ZVNRTFN5
bmNPcHRpb25hbFJldHVyblZhbHVlcyhwcm90b2NvbF9yZXF1ZXN0SWQsICppbl9kYXRhYmFzZUlk
LCBpbl9xdWVyeSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKElO
U1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAKLSAgICBFcnJvclN0cmluZyBlcnJvcjsK
LSAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwot
ICAgIFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+IG91dF9jb2x1bW5OYW1lczsKLSAgICBP
cHRpb25hbDxTdHJpbmc+IG91dF9ub3RlczsKLSAgICBPcHRpb25hbDxkb3VibGU+IG91dF90aW1l
c3RhbXA7Ci0gICAgT3B0aW9uYWw8SlNPTjo6T2JqZWN0PiBvdXRfdmFsdWVzOwotICAgIE9wdGlv
bmFsPEpTT046OlZhbHVlPiBvdXRfcGF5bG9hZDsKLSAgICBPcHRpb25hbDxpbnQ+IG91dF9kYXRh
YmFzZUlkOwotICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+
IG91dF9zcWxFcnJvcjsKLSAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFy
eUNvbG9ycyBvdXRfc2NyZWVuQ29sb3I7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRhdGFiYXNlOjpDb2xvckxpc3Q+IG91dF9hbHRlcm5hdGVDb2xvcnM7Ci0gICAgRGF0YWJhc2VC
YWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3Igb3V0X3ByaW50Q29sb3I7Ci0gICAg
bV9hZ2VudC0+ZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhlcnJvciwgaW5fZGF0
YWJhc2VJZCwgaW5fcXVlcnksIG91dF9jb2x1bW5OYW1lcywgb3V0X25vdGVzLCBvdXRfdGltZXN0
YW1wLCBvdXRfdmFsdWVzLCBvdXRfcGF5bG9hZCwgb3V0X2RhdGFiYXNlSWQsIG91dF9zcWxFcnJv
ciwgb3V0X3NjcmVlbkNvbG9yLCBvdXRfYWx0ZXJuYXRlQ29sb3JzLCBvdXRfcHJpbnRDb2xvcik7
Ci0KLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKSB7Ci0gICAgICAgIGlmIChvdXRfY29sdW1uTmFt
ZXMpCi0gICAgICAgICAgICByZXN1bHQtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgb3V0X2Nv
bHVtbk5hbWVzKTsKLSAgICAgICAgaWYgKG91dF9ub3Rlcy5oYXNWYWx1ZSgpKQotICAgICAgICAg
ICAgcmVzdWx0LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCAqb3V0X25vdGVzKTsKLSAgICAgICAgaWYg
KG91dF90aW1lc3RhbXAuaGFzVmFsdWUoKSkKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0RG91Ymxl
KCJ0aW1lc3RhbXAiX3MsICpvdXRfdGltZXN0YW1wKTsKLSAgICAgICAgaWYgKG91dF92YWx1ZXMu
aGFzVmFsdWUoKSkKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsICpv
dXRfdmFsdWVzKTsKLSAgICAgICAgaWYgKG91dF9wYXlsb2FkLmhhc1ZhbHVlKCkpCi0gICAgICAg
ICAgICByZXN1bHQtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCAqb3V0X3BheWxvYWQpOwotICAgICAg
ICBpZiAob3V0X2RhdGFiYXNlSWQuaGFzVmFsdWUoKSkKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0
SW50ZWdlcigiZGF0YWJhc2VJZCJfcywgKm91dF9kYXRhYmFzZUlkKTsKLSAgICAgICAgaWYgKG91
dF9zcWxFcnJvcikKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0T2JqZWN0KCJzcWxFcnJvciJfcywg
b3V0X3NxbEVycm9yKTsKLSAgICAgICAgaWYgKG91dF9zY3JlZW5Db2xvci5oYXNWYWx1ZSgpKQot
ICAgICAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCAqb3V0X3NjcmVl
bkNvbG9yKTsKLSAgICAgICAgaWYgKG91dF9hbHRlcm5hdGVDb2xvcnMpCi0gICAgICAgICAgICBy
ZXN1bHQtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIG91dF9hbHRlcm5hdGVDb2xvcnMp
OwotICAgICAgICBpZiAob3V0X3ByaW50Q29sb3IuaGFzVmFsdWUoKSkKLSAgICAgICAgICAgIHJl
c3VsdC0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCAqb3V0X3ByaW50Q29sb3IpOworICAgIGF1
dG8gcmVzdWx0ID0gbV9hZ2VudC0+ZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcygq
aW5fZGF0YWJhc2VJZCwgaW5fcXVlcnkpOworICAgIGlmICghcmVzdWx0KSB7CisgICAgICAgIEFT
U0VSVCghcmVzdWx0LmVycm9yKCkuaXNFbXB0eSgpKTsKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0
Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3Is
IHJlc3VsdC5lcnJvcigpKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAoIWVycm9y
Lmxlbmd0aCgpKQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVx
dWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZhbHNlKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFj
a2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNl
cnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7CisKKyAgICBhdXRvIFtvdXRfb3B0X2NvbHVtbk5h
bWVzLCBvdXRfb3B0X25vdGVzLCBvdXRfb3B0X3RpbWVzdGFtcCwgb3V0X29wdF92YWx1ZXMsIG91
dF9vcHRfcGF5bG9hZCwgb3V0X29wdF9kYXRhYmFzZUlkLCBvdXRfb3B0X3NxbEVycm9yLCBvdXRf
b3B0X3NjcmVlbkNvbG9yLCBvdXRfb3B0X2FsdGVybmF0ZUNvbG9ycywgb3V0X29wdF9wcmludENv
bG9yXSA9IFdURk1vdmUocmVzdWx0LnZhbHVlKCkpOworCisgICAgYXV0byBwcm90b2NvbF9qc29u
TWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgaWYgKCEhb3V0X29wdF9jb2x1
bW5OYW1lcykKKyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldEFycmF5KCJjb2x1bW5O
YW1lcyJfcywgb3V0X29wdF9jb2x1bW5OYW1lcy5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICBpZiAo
ISFvdXRfb3B0X25vdGVzKQorICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5n
KCJub3RlcyJfcywgb3V0X29wdF9ub3Rlcyk7CisgICAgaWYgKCEhb3V0X29wdF90aW1lc3RhbXAp
CisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywg
Km91dF9vcHRfdGltZXN0YW1wKTsKKyAgICBpZiAoISFvdXRfb3B0X3ZhbHVlcykKKyAgICAgICAg
cHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldE9iamVjdCgidmFsdWVzIl9zLCBvdXRfb3B0X3ZhbHVl
cy5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICBpZiAoISFvdXRfb3B0X3BheWxvYWQpCisgICAgICAg
IHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgb3V0X29wdF9wYXls
b2FkLnJlbGVhc2VOb25OdWxsKCkpOworICAgIGlmICghIW91dF9vcHRfZGF0YWJhc2VJZCkKKyAg
ICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldEludGVnZXIoImRhdGFiYXNlSWQiX3MsICpv
dXRfb3B0X2RhdGFiYXNlSWQpOworICAgIGlmICghIW91dF9vcHRfc3FsRXJyb3IpCisgICAgICAg
IHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBvdXRfb3B0X3Nx
bEVycm9yLnJlbGVhc2VOb25OdWxsKCkpOworICAgIGlmICghIW91dF9vcHRfc2NyZWVuQ29sb3Ip
CisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9z
LCBQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKCpvdXRfb3B0X3Nj
cmVlbkNvbG9yKSk7CisgICAgaWYgKCEhb3V0X29wdF9hbHRlcm5hdGVDb2xvcnMpCisgICAgICAg
IHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCBvdXRf
b3B0X2FsdGVybmF0ZUNvbG9ycy5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICBpZiAoISFvdXRfb3B0
X3ByaW50Q29sb3IpCisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoInBy
aW50Q29sb3IiX3MsIG91dF9vcHRfcHJpbnRDb2xvcik7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+c2VuZFJlc3BvbnNlKHByb3RvY29sX3JlcXVlc3RJZCwgV1RGTW92ZShwcm90b2NvbF9qc29u
TWVzc2FnZSksIGZhbHNlKTsKIH0KIAogRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6
OkV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJhY2s6OkV4ZWN1dGVTUUxB
c3luY09wdGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJhY2soUmVmPEJhY2tlbmREaXNwYXRjaGVyPiYm
IGJhY2tlbmREaXNwYXRjaGVyLCBpbnQgaWQpIDogQmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNr
QmFzZShXVEZNb3ZlKGJhY2tlbmREaXNwYXRjaGVyKSwgaWQpIHsgfQogCi12b2lkIERhdGFiYXNl
QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZh
bHVlc0NhbGxiYWNrOjpzZW5kU3VjY2VzcyhSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiYm
IGNvbHVtbk5hbWVzLCBPcHRpb25hbDxTdHJpbmc+JiBub3RlcywgT3B0aW9uYWw8ZG91YmxlPiYg
dGltZXN0YW1wLCBPcHRpb25hbDxKU09OOjpPYmplY3Q+JiB2YWx1ZXMsIE9wdGlvbmFsPEpTT046
OlZhbHVlPiYgcGF5bG9hZCwgT3B0aW9uYWw8aW50PiYgZGF0YWJhc2VJZCwgUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4mJiBzcWxFcnJvciwgT3B0aW9uYWw8SW5z
cGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+IHNjcmVlbkNvbG9yLCBS
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4mJiBhbHRlcm5h
dGVDb2xvcnMsIE9wdGlvbmFsPERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQcmlu
dENvbG9yPiBwcmludENvbG9yKQordm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxl
cjo6RXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNDYWxsYmFjazo6c2VuZFN1Y2Nl
c3MoUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4mJiBvcHRfY29sdW1uTmFtZXMsIGNvbnN0
IFN0cmluZyYgb3B0X25vdGVzLCBPcHRpb25hbDxkb3VibGU+JiYgb3B0X3RpbWVzdGFtcCwgUmVm
UHRyPEpTT046Ok9iamVjdD4mJiBvcHRfdmFsdWVzLCBSZWZQdHI8SlNPTjo6VmFsdWU+JiYgb3B0
X3BheWxvYWQsIE9wdGlvbmFsPGludD4mJiBvcHRfZGF0YWJhc2VJZCwgUmVmUHRyPFByb3RvY29s
OjpEYXRhYmFzZTo6RXJyb3I+JiYgb3B0X3NxbEVycm9yLCBPcHRpb25hbDxQcm90b2NvbDo6RGF0
YWJhc2U6OlByaW1hcnlDb2xvcnM+JiYgb3B0X3NjcmVlbkNvbG9yLCBSZWZQdHI8UHJvdG9jb2w6
OkRhdGFiYXNlOjpDb2xvckxpc3Q+JiYgb3B0X2FsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5n
JiBvcHRfcHJpbnRDb2xvcikKIHsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9
IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgaWYgKGNvbHVtbk5hbWVzKQotICAgICAgICBq
c29uTWVzc2FnZS0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCBjb2x1bW5OYW1lcyk7Ci0gICAg
aWYgKG5vdGVzLmhhc1ZhbHVlKCkpCi0gICAgICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm5v
dGVzIl9zLCAqbm90ZXMpOwotICAgIGlmICh0aW1lc3RhbXAuaGFzVmFsdWUoKSkKLSAgICAgICAg
anNvbk1lc3NhZ2UtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCAqdGltZXN0YW1wKTsKLSAgICBp
ZiAodmFsdWVzLmhhc1ZhbHVlKCkpCi0gICAgICAgIGpzb25NZXNzYWdlLT5zZXRPYmplY3QoInZh
bHVlcyJfcywgKnZhbHVlcyk7Ci0gICAgaWYgKHBheWxvYWQuaGFzVmFsdWUoKSkKLSAgICAgICAg
anNvbk1lc3NhZ2UtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCAqcGF5bG9hZCk7Ci0gICAgaWYgKGRh
dGFiYXNlSWQuaGFzVmFsdWUoKSkKLSAgICAgICAganNvbk1lc3NhZ2UtPnNldEludGVnZXIoImRh
dGFiYXNlSWQiX3MsICpkYXRhYmFzZUlkKTsKLSAgICBpZiAoc3FsRXJyb3IpCi0gICAgICAgIGpz
b25NZXNzYWdlLT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBzcWxFcnJvcik7Ci0gICAgaWYgKHNj
cmVlbkNvbG9yLmhhc1ZhbHVlKCkpCi0gICAgICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoInNj
cmVlbkNvbG9yIl9zLCAqc2NyZWVuQ29sb3IpOwotICAgIGlmIChhbHRlcm5hdGVDb2xvcnMpCi0g
ICAgICAgIGpzb25NZXNzYWdlLT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCBhbHRlcm5h
dGVDb2xvcnMpOwotICAgIGlmIChwcmludENvbG9yLmhhc1ZhbHVlKCkpCi0gICAgICAgIGpzb25N
ZXNzYWdlLT5zZXRTdHJpbmcoInByaW50Q29sb3IiX3MsICpwcmludENvbG9yKTsKLSAgICBDYWxs
YmFja0Jhc2U6OnNlbmRTdWNjZXNzKFdURk1vdmUoanNvbk1lc3NhZ2UpKTsKKyAgICBhdXRvIHBy
b3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBpZiAoISFv
cHRfY29sdW1uTmFtZXMpCisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRBcnJheSgi
Y29sdW1uTmFtZXMiX3MsIG9wdF9jb2x1bW5OYW1lcy5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICBp
ZiAoISFvcHRfbm90ZXMpCisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJpbmco
Im5vdGVzIl9zLCBvcHRfbm90ZXMpOworICAgIGlmICghIW9wdF90aW1lc3RhbXApCisgICAgICAg
IHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywgKm9wdF90aW1l
c3RhbXApOworICAgIGlmICghIW9wdF92YWx1ZXMpCisgICAgICAgIHByb3RvY29sX2pzb25NZXNz
YWdlLT5zZXRPYmplY3QoInZhbHVlcyJfcywgb3B0X3ZhbHVlcy5yZWxlYXNlTm9uTnVsbCgpKTsK
KyAgICBpZiAoISFvcHRfcGF5bG9hZCkKKyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNl
dFZhbHVlKCJwYXlsb2FkIl9zLCBvcHRfcGF5bG9hZC5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICBp
ZiAoISFvcHRfZGF0YWJhc2VJZCkKKyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldElu
dGVnZXIoImRhdGFiYXNlSWQiX3MsICpvcHRfZGF0YWJhc2VJZCk7CisgICAgaWYgKCEhb3B0X3Nx
bEVycm9yKQorICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJzcWxFcnJv
ciJfcywgb3B0X3NxbEVycm9yLnJlbGVhc2VOb25OdWxsKCkpOworICAgIGlmICghIW9wdF9zY3Jl
ZW5Db2xvcikKKyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygic2NyZWVu
Q29sb3IiX3MsIFByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUoKm9w
dF9zY3JlZW5Db2xvcikpOworICAgIGlmICghIW9wdF9hbHRlcm5hdGVDb2xvcnMpCisgICAgICAg
IHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCBvcHRf
YWx0ZXJuYXRlQ29sb3JzLnJlbGVhc2VOb25OdWxsKCkpOworICAgIGlmICghIW9wdF9wcmludENv
bG9yKQorICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJwcmludENvbG9y
Il9zLCBvcHRfcHJpbnRDb2xvcik7CisgICAgQ2FsbGJhY2tCYXNlOjpzZW5kU3VjY2VzcyhXVEZN
b3ZlKHByb3RvY29sX2pzb25NZXNzYWdlKSk7CiB9CiAKLXZvaWQgRGF0YWJhc2VCYWNrZW5kRGlz
cGF0Y2hlcjo6ZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyByZXF1ZXN0
SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycykKK3ZvaWQgRGF0YWJhc2VCYWNr
ZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyBw
cm90b2NvbF9yZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfcGFyYW1l
dGVycykKIHsKLSAgICBpbnQgaW5fZGF0YWJhc2VJZCA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdl
dEludGVnZXIocGFyYW1ldGVycy5nZXQoKSwgImRhdGFiYXNlSWQiX3MsIG51bGxwdHIpOwotICAg
IFN0cmluZyBpbl9xdWVyeSA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFN0cmluZyhwYXJhbWV0
ZXJzLmdldCgpLCAicXVlcnkiX3MsIG51bGxwdHIpOworICAgIGF1dG8gaW5fZGF0YWJhc2VJZCA9
IG1fYmFja2VuZERpc3BhdGNoZXItPmdldEludGVnZXIocHJvdG9jb2xfcGFyYW1ldGVycy5nZXQo
KSwgImRhdGFiYXNlSWQiX3MsIHRydWUpOworICAgIGF1dG8gaW5fcXVlcnkgPSBtX2JhY2tlbmRE
aXNwYXRjaGVyLT5nZXRTdHJpbmcocHJvdG9jb2xfcGFyYW1ldGVycy5nZXQoKSwgInF1ZXJ5Il9z
LCB0cnVlKTsKICAgICBpZiAobV9iYWNrZW5kRGlzcGF0Y2hlci0+aGFzUHJvdG9jb2xFcnJvcnMo
KSkgewogICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJh
Y2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCAiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9k
ICdEYXRhYmFzZS5leGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcycgY2FuJ3QgYmUg
cHJvY2Vzc2VkIl9zKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMzc4LDIwICszNjIsMTggQEAgdm9p
ZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVy
blZhbHVlcyhsb25nIHJlcXVlc3QKIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJ
U1BBVENIRVJTKQogICAgIGlmIChtX2FsdGVybmF0ZURpc3BhdGNoZXIpIHsKLSAgICAgICAgbV9h
bHRlcm5hdGVEaXNwYXRjaGVyLT5leGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhy
ZXF1ZXN0SWQsIGluX2RhdGFiYXNlSWQsIGluX3F1ZXJ5KTsKKyAgICAgICAgbV9hbHRlcm5hdGVE
aXNwYXRjaGVyLT5leGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhwcm90b2NvbF9y
ZXF1ZXN0SWQsICppbl9kYXRhYmFzZUlkLCBpbl9xdWVyeSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAK
LSAgICBSZWY8RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkV4ZWN1dGVTUUxBc3lu
Y09wdGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJhY2s+IGNhbGxiYWNrID0gYWRvcHRSZWYoKm5ldyBE
YXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxS
ZXR1cm5WYWx1ZXNDYWxsYmFjayhtX2JhY2tlbmREaXNwYXRjaGVyLmNvcHlSZWYoKSwgcmVxdWVz
dElkKSk7Ci0gICAgbV9hZ2VudC0+ZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMo
aW5fZGF0YWJhc2VJZCwgaW5fcXVlcnksIGNhbGxiYWNrLmNvcHlSZWYoKSk7Ci0KKyAgICBtX2Fn
ZW50LT5leGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcygqaW5fZGF0YWJhc2VJZCwg
aW5fcXVlcnksIGFkb3B0UmVmKCpuZXcgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6
OkV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzQ2FsbGJhY2sobV9iYWNrZW5kRGlz
cGF0Y2hlci5jb3B5UmVmKCksIHByb3RvY29sX3JlcXVlc3RJZCkpKTsKIH0KIAotdm9pZCBEYXRh
YmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlU1FMU3luYyhsb25nIHJlcXVlc3RJZCwgUmVm
UHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKQordm9pZCBEYXRhYmFzZUJhY2tlbmREaXNw
YXRjaGVyOjpleGVjdXRlU1FMU3luYyhsb25nIHByb3RvY29sX3JlcXVlc3RJZCwgUmVmUHRyPEpT
T046Ok9iamVjdD4mJiBwcm90b2NvbF9wYXJhbWV0ZXJzKQogewotICAgIGludCBpbl9kYXRhYmFz
ZUlkID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0SW50ZWdlcihwYXJhbWV0ZXJzLmdldCgpLCAi
ZGF0YWJhc2VJZCJfcywgbnVsbHB0cik7Ci0gICAgU3RyaW5nIGluX3F1ZXJ5ID0gbV9iYWNrZW5k
RGlzcGF0Y2hlci0+Z2V0U3RyaW5nKHBhcmFtZXRlcnMuZ2V0KCksICJxdWVyeSJfcywgbnVsbHB0
cik7CisgICAgYXV0byBpbl9kYXRhYmFzZUlkID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0SW50
ZWdlcihwcm90b2NvbF9wYXJhbWV0ZXJzLmdldCgpLCAiZGF0YWJhc2VJZCJfcywgdHJ1ZSk7Cisg
ICAgYXV0byBpbl9xdWVyeSA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFN0cmluZyhwcm90b2Nv
bF9wYXJhbWV0ZXJzLmdldCgpLCAicXVlcnkiX3MsIHRydWUpOwogICAgIGlmIChtX2JhY2tlbmRE
aXNwYXRjaGVyLT5oYXNQcm90b2NvbEVycm9ycygpKSB7CiAgICAgICAgIG1fYmFja2VuZERpc3Bh
dGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OkludmFsaWRQYXJh
bXMsICJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJ0RhdGFiYXNlLmV4ZWN1dGVTUUxTeW5jJyBj
YW4ndCBiZSBwcm9jZXNzZWQiX3MpOwogICAgICAgICByZXR1cm47CkBAIC0zOTksNjUgKzM4MSw1
NiBAQCB2b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxTeW5jKGxvbmcg
cmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZQogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRF
Uk5BVEVfRElTUEFUQ0hFUlMpCiAgICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgewotICAg
ICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmV4ZWN1dGVTUUxTeW5jKHJlcXVlc3RJZCwgaW5f
ZGF0YWJhc2VJZCwgaW5fcXVlcnkpOworICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmV4
ZWN1dGVTUUxTeW5jKHByb3RvY29sX3JlcXVlc3RJZCwgKmluX2RhdGFiYXNlSWQsIGluX3F1ZXJ5
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FM
VEVSTkFURV9ESVNQQVRDSEVSUykKIAotICAgIEVycm9yU3RyaW5nIGVycm9yOwotICAgIFJlZjxK
U09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgUmVmUHRy
PEpTT046OkFycmF5T2Y8U3RyaW5nPj4gb3V0X2NvbHVtbk5hbWVzOwotICAgIFN0cmluZyBvdXRf
bm90ZXM7Ci0gICAgZG91YmxlIG91dF90aW1lc3RhbXA7Ci0gICAgSlNPTjo6T2JqZWN0IG91dF92
YWx1ZXM7Ci0gICAgSlNPTjo6VmFsdWUgb3V0X3BheWxvYWQ7Ci0gICAgaW50IG91dF9kYXRhYmFz
ZUlkOwotICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IG91
dF9zcWxFcnJvcjsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkNv
bG9yTGlzdD4gb3V0X2FsdGVybmF0ZUNvbG9yczsKLSAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpE
YXRhYmFzZTo6UHJpbWFyeUNvbG9ycyBvdXRfc2NyZWVuQ29sb3I7Ci0gICAgRGF0YWJhc2VCYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlByaW50Q29sb3Igb3V0X3ByaW50Q29sb3I7Ci0gICAgbV9h
Z2VudC0+ZXhlY3V0ZVNRTFN5bmMoZXJyb3IsIGluX2RhdGFiYXNlSWQsIGluX3F1ZXJ5LCBvdXRf
Y29sdW1uTmFtZXMsICZvdXRfbm90ZXMsICZvdXRfdGltZXN0YW1wLCBvdXRfdmFsdWVzLCAmb3V0
X3BheWxvYWQsICZvdXRfZGF0YWJhc2VJZCwgb3V0X3NxbEVycm9yLCBvdXRfYWx0ZXJuYXRlQ29s
b3JzLCAmb3V0X3NjcmVlbkNvbG9yLCAmb3V0X3ByaW50Q29sb3IpOwotCi0gICAgaWYgKCFlcnJv
ci5sZW5ndGgoKSkgewotICAgICAgICByZXN1bHQtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywg
b3V0X2NvbHVtbk5hbWVzKTsKLSAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCBv
dXRfbm90ZXMpOwotICAgICAgICByZXN1bHQtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCBvdXRf
dGltZXN0YW1wKTsKLSAgICAgICAgcmVzdWx0LT5zZXRPYmplY3QoInZhbHVlcyJfcywgb3V0X3Zh
bHVlcyk7Ci0gICAgICAgIHJlc3VsdC0+c2V0VmFsdWUoInBheWxvYWQiX3MsIG91dF9wYXlsb2Fk
KTsKLSAgICAgICAgcmVzdWx0LT5zZXRJbnRlZ2VyKCJkYXRhYmFzZUlkIl9zLCBvdXRfZGF0YWJh
c2VJZCk7Ci0gICAgICAgIHJlc3VsdC0+c2V0T2JqZWN0KCJzcWxFcnJvciJfcywgb3V0X3NxbEVy
cm9yKTsKLSAgICAgICAgcmVzdWx0LT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCBvdXRf
YWx0ZXJuYXRlQ29sb3JzKTsKLSAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoInNjcmVlbkNvbG9y
Il9zLCBJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFs
dWUob3V0X3NjcmVlbkNvbG9yKSk7Ci0gICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJwcmludENv
bG9yIl9zLCBJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50
VmFsdWUob3V0X3ByaW50Q29sb3IpKTsKKyAgICBhdXRvIHJlc3VsdCA9IG1fYWdlbnQtPmV4ZWN1
dGVTUUxTeW5jKCppbl9kYXRhYmFzZUlkLCBpbl9xdWVyeSk7CisgICAgaWYgKCFyZXN1bHQpIHsK
KyAgICAgICAgQVNTRVJUKCFyZXN1bHQuZXJyb3IoKS5pc0VtcHR5KCkpOworICAgICAgICBtX2Jh
Y2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpT
ZXJ2ZXJFcnJvciwgcmVzdWx0LmVycm9yKCkpOworICAgICAgICByZXR1cm47CiAgICAgfQotICAg
IGlmICghZXJyb3IubGVuZ3RoKCkpCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRS
ZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2UpOwotICAgIGVsc2UKLSAg
ICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlz
cGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKKworICAgIGF1dG8gW291dF9j
b2x1bW5OYW1lcywgb3V0X25vdGVzLCBvdXRfdGltZXN0YW1wLCBvdXRfdmFsdWVzLCBvdXRfcGF5
bG9hZCwgb3V0X2RhdGFiYXNlSWQsIG91dF9zcWxFcnJvciwgb3V0X2FsdGVybmF0ZUNvbG9ycywg
b3V0X3NjcmVlbkNvbG9yLCBvdXRfcHJpbnRDb2xvcl0gPSBXVEZNb3ZlKHJlc3VsdC52YWx1ZSgp
KTsKKworICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0
ZSgpOworICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3Ms
IFdURk1vdmUob3V0X2NvbHVtbk5hbWVzKSk7CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNl
dFN0cmluZygibm90ZXMiX3MsIG91dF9ub3Rlcyk7CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2Ut
PnNldERvdWJsZSgidGltZXN0YW1wIl9zLCBvdXRfdGltZXN0YW1wKTsKKyAgICBwcm90b2NvbF9q
c29uTWVzc2FnZS0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIFdURk1vdmUob3V0X3ZhbHVlcykpOwor
ICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgV1RGTW92ZShv
dXRfcGF5bG9hZCkpOworICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRJbnRlZ2VyKCJkYXRh
YmFzZUlkIl9zLCBvdXRfZGF0YWJhc2VJZCk7CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNl
dE9iamVjdCgic3FsRXJyb3IiX3MsIFdURk1vdmUob3V0X3NxbEVycm9yKSk7CisgICAgcHJvdG9j
b2xfanNvbk1lc3NhZ2UtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIFdURk1vdmUob3V0
X2FsdGVybmF0ZUNvbG9ycykpOworICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJpbmco
InNjcmVlbkNvbG9yIl9zLCBQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZh
bHVlKG91dF9zY3JlZW5Db2xvcikpOworICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJp
bmcoInByaW50Q29sb3IiX3MsIG91dF9wcmludENvbG9yKTsKKyAgICBtX2JhY2tlbmREaXNwYXRj
aGVyLT5zZW5kUmVzcG9uc2UocHJvdG9jb2xfcmVxdWVzdElkLCBXVEZNb3ZlKHByb3RvY29sX2pz
b25NZXNzYWdlKSwgZmFsc2UpOwogfQogCiBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxl
cjo6RXhlY3V0ZVNRTEFzeW5jQ2FsbGJhY2s6OkV4ZWN1dGVTUUxBc3luY0NhbGxiYWNrKFJlZjxC
YWNrZW5kRGlzcGF0Y2hlcj4mJiBiYWNrZW5kRGlzcGF0Y2hlciwgaW50IGlkKSA6IEJhY2tlbmRE
aXNwYXRjaGVyOjpDYWxsYmFja0Jhc2UoV1RGTW92ZShiYWNrZW5kRGlzcGF0Y2hlciksIGlkKSB7
IH0KIAotdm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNRTEFz
eW5jQ2FsbGJhY2s6OnNlbmRTdWNjZXNzKFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+JiYg
Y29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgbm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIEpTT046
Ok9iamVjdCB2YWx1ZXMsIEpTT046OlZhbHVlIHBheWxvYWQsIGludCBkYXRhYmFzZUlkLCBSZWZQ
dHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiYmIHNxbEVycm9yLCBJbnNw
ZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyBzY3JlZW5Db2xvciwgUmVm
UHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+JiYgYWx0ZXJuYXRl
Q29sb3JzLCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UHJpbnRDb2xvciBwcmlu
dENvbG9yKQordm9pZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6RXhlY3V0ZVNR
TEFzeW5jQ2FsbGJhY2s6OnNlbmRTdWNjZXNzKFJlZjxKU09OOjpBcnJheU9mPFN0cmluZz4+JiYg
Y29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgbm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIFJlZjxK
U09OOjpPYmplY3Q+JiYgdmFsdWVzLCBSZWY8SlNPTjo6VmFsdWU+JiYgcGF5bG9hZCwgaW50IGRh
dGFiYXNlSWQsIFJlZjxQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiYmIHNxbEVycm9yLCBQcm90
b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMgc2NyZWVuQ29sb3IsIFJlZjxQcm90b2NvbDo6
RGF0YWJhc2U6OkNvbG9yTGlzdD4mJiBhbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyYgcHJp
bnRDb2xvcikKIHsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9i
amVjdDo6Y3JlYXRlKCk7Ci0gICAganNvbk1lc3NhZ2UtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJf
cywgY29sdW1uTmFtZXMpOwotICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm5vdGVzIl9zLCBu
b3Rlcyk7Ci0gICAganNvbk1lc3NhZ2UtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCB0aW1lc3Rh
bXApOwotICAgIGpzb25NZXNzYWdlLT5zZXRPYmplY3QoInZhbHVlcyJfcywgdmFsdWVzKTsKLSAg
ICBqc29uTWVzc2FnZS0+c2V0VmFsdWUoInBheWxvYWQiX3MsIHBheWxvYWQpOwotICAgIGpzb25N
ZXNzYWdlLT5zZXRJbnRlZ2VyKCJkYXRhYmFzZUlkIl9zLCBkYXRhYmFzZUlkKTsKLSAgICBqc29u
TWVzc2FnZS0+c2V0T2JqZWN0KCJzcWxFcnJvciJfcywgc3FsRXJyb3IpOwotICAgIGpzb25NZXNz
YWdlLT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCBJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0
SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUoc2NyZWVuQ29sb3IpKTsKLSAgICBqc29uTWVz
c2FnZS0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywgYWx0ZXJuYXRlQ29sb3JzKTsKLSAg
ICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUocHJpbnRDb2xvcikpOwotICAg
IENhbGxiYWNrQmFzZTo6c2VuZFN1Y2Nlc3MoV1RGTW92ZShqc29uTWVzc2FnZSkpOworICAgIGF1
dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIHBy
b3RvY29sX2pzb25NZXNzYWdlLT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIFdURk1vdmUoY29s
dW1uTmFtZXMpKTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJub3RlcyJf
cywgbm90ZXMpOworICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXREb3VibGUoInRpbWVzdGFt
cCJfcywgdGltZXN0YW1wKTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJ2
YWx1ZXMiX3MsIFdURk1vdmUodmFsdWVzKSk7CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNl
dFZhbHVlKCJwYXlsb2FkIl9zLCBXVEZNb3ZlKHBheWxvYWQpKTsKKyAgICBwcm90b2NvbF9qc29u
TWVzc2FnZS0+c2V0SW50ZWdlcigiZGF0YWJhc2VJZCJfcywgZGF0YWJhc2VJZCk7CisgICAgcHJv
dG9jb2xfanNvbk1lc3NhZ2UtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIFdURk1vdmUoc3FsRXJy
b3IpKTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJf
cywgUHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShzY3JlZW5Db2xv
cikpOworICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3Jz
Il9zLCBXVEZNb3ZlKGFsdGVybmF0ZUNvbG9ycykpOworICAgIHByb3RvY29sX2pzb25NZXNzYWdl
LT5zZXRTdHJpbmcoInByaW50Q29sb3IiX3MsIHByaW50Q29sb3IpOworICAgIENhbGxiYWNrQmFz
ZTo6c2VuZFN1Y2Nlc3MoV1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSkpOwogfQogCi12b2lk
IERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxBc3luYyhsb25nIHJlcXVlc3RJ
ZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKQordm9pZCBEYXRhYmFzZUJhY2tl
bmREaXNwYXRjaGVyOjpleGVjdXRlU1FMQXN5bmMobG9uZyBwcm90b2NvbF9yZXF1ZXN0SWQsIFJl
ZlB0cjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfcGFyYW1ldGVycykKIHsKLSAgICBpbnQgaW5f
ZGF0YWJhc2VJZCA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldEludGVnZXIocGFyYW1ldGVycy5n
ZXQoKSwgImRhdGFiYXNlSWQiX3MsIG51bGxwdHIpOwotICAgIFN0cmluZyBpbl9xdWVyeSA9IG1f
YmFja2VuZERpc3BhdGNoZXItPmdldFN0cmluZyhwYXJhbWV0ZXJzLmdldCgpLCAicXVlcnkiX3Ms
IG51bGxwdHIpOworICAgIGF1dG8gaW5fZGF0YWJhc2VJZCA9IG1fYmFja2VuZERpc3BhdGNoZXIt
PmdldEludGVnZXIocHJvdG9jb2xfcGFyYW1ldGVycy5nZXQoKSwgImRhdGFiYXNlSWQiX3MsIHRy
dWUpOworICAgIGF1dG8gaW5fcXVlcnkgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRTdHJpbmco
cHJvdG9jb2xfcGFyYW1ldGVycy5nZXQoKSwgInF1ZXJ5Il9zLCB0cnVlKTsKICAgICBpZiAobV9i
YWNrZW5kRGlzcGF0Y2hlci0+aGFzUHJvdG9jb2xFcnJvcnMoKSkgewogICAgICAgICBtX2JhY2tl
bmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpJbnZh
bGlkUGFyYW1zLCAiU29tZSBhcmd1bWVudHMgb2YgbWV0aG9kICdEYXRhYmFzZS5leGVjdXRlU1FM
QXN5bmMnIGNhbid0IGJlIHByb2Nlc3NlZCJfcyk7CiAgICAgICAgIHJldHVybjsKQEAgLTQ2NSwx
NCArNDM4LDEyIEBAIHZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTEFz
eW5jKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqCiAKICNpZiBFTkFCTEUoSU5TUEVD
VE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKICAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVy
KSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+ZXhlY3V0ZVNRTEFzeW5jKHJlcXVl
c3RJZCwgaW5fZGF0YWJhc2VJZCwgaW5fcXVlcnkpOworICAgICAgICBtX2FsdGVybmF0ZURpc3Bh
dGNoZXItPmV4ZWN1dGVTUUxBc3luYyhwcm90b2NvbF9yZXF1ZXN0SWQsICppbl9kYXRhYmFzZUlk
LCBpbl9xdWVyeSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKElO
U1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAKLSAgICBSZWY8RGF0YWJhc2VCYWNrZW5k
RGlzcGF0Y2hlckhhbmRsZXI6OkV4ZWN1dGVTUUxBc3luY0NhbGxiYWNrPiBjYWxsYmFjayA9IGFk
b3B0UmVmKCpuZXcgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkV4ZWN1dGVTUUxB
c3luY0NhbGxiYWNrKG1fYmFja2VuZERpc3BhdGNoZXIuY29weVJlZigpLCByZXF1ZXN0SWQpKTsK
LSAgICBtX2FnZW50LT5leGVjdXRlU1FMQXN5bmMoaW5fZGF0YWJhc2VJZCwgaW5fcXVlcnksIGNh
bGxiYWNrLmNvcHlSZWYoKSk7Ci0KKyAgICBtX2FnZW50LT5leGVjdXRlU1FMQXN5bmMoKmluX2Rh
dGFiYXNlSWQsIGluX3F1ZXJ5LCBhZG9wdFJlZigqbmV3IERhdGFiYXNlQmFja2VuZERpc3BhdGNo
ZXJIYW5kbGVyOjpFeGVjdXRlU1FMQXN5bmNDYWxsYmFjayhtX2JhY2tlbmREaXNwYXRjaGVyLmNv
cHlSZWYoKSwgcHJvdG9jb2xfcmVxdWVzdElkKSkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBJbnNw
ZWN0b3IKQEAgLTUxMyw2ICs0ODQsNyBAQCB2b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6
OmV4ZWN1dGVTUUxBc3luYyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iagogCiAjaW5j
bHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+
CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewpAQCAtNTU2LDcgKzUyOCw2IEBAIGNsYXNzIEZy
b250ZW5kUm91dGVyOwogI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCiAKICNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKQEAgLTU5
Nyw3ICs1NjgsOSBAQCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKICNwcmFnbWEgb25jZQogCiAjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgotI2luY2x1ZGUg
PHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRl
IDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFt
ZXNwYWNlIEluc3BlY3RvciB7CiAKQEAgLTYxOSw3ICs1OTIsNyBAQCBlbnVtIGNsYXNzIFByaW1h
cnlDb2xvcnM7CiBuYW1lc3BhY2UgRGF0YWJhc2UgewogLyogVW5pcXVlIGlkZW50aWZpZXIgb2Yg
RGF0YWJhc2Ugb2JqZWN0LiAqLwogdXNpbmcgRGF0YWJhc2VJZCA9IGludDsKLXVzaW5nIENvbG9y
TGlzdCA9IEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1h
cnlDb2xvcnM+OwordXNpbmcgQ29sb3JMaXN0ID0gSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6RGF0
YWJhc2U6OlByaW1hcnlDb2xvcnM+OwogfSAvLyBEYXRhYmFzZQogLy8gRW5kIG9mIHR5cGVkZWZz
LgogCkBAIC02NDMsNyArNjE2LDcgQEAgZW51bSBjbGFzcyBQcmltYXJ5Q29sb3JzIHsKIH07IC8v
IGVudW0gY2xhc3MgUHJpbWFyeUNvbG9ycwogCiAvKiBEYXRhYmFzZSBlcnJvci4gKi8KLWNsYXNz
IEVycm9yIDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgeworY2xhc3MgRXJyb3IgZmluYWwgOiBw
dWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7CiBwdWJsaWM6CiAgICAgZW51bSB7CiAgICAgICAgIE5v
RmllbGRzU2V0ID0gMCwKQEAgLTY3MCwxNyArNjQzLDE3IEBAIHB1YmxpYzoKICAgICAgICAgZnJp
ZW5kIGNsYXNzIEVycm9yOwogICAgIHB1YmxpYzoKIAotICAgICAgICBCdWlsZGVyPFNUQVRFIHwg
TWVzc2FnZVNldD4mIHNldE1lc3NhZ2UoY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICAgICAgQnVp
bGRlcjxTVEFURSB8IE1lc3NhZ2VTZXQ+JiBzZXRNZXNzYWdlKGNvbnN0IFN0cmluZyYgaW5fbWVz
c2FnZSkKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE1l
c3NhZ2VTZXQpLCBwcm9wZXJ0eV9tZXNzYWdlX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1f
cmVzdWx0LT5zZXRTdHJpbmcoIm1lc3NhZ2UiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIG1fcmVz
dWx0LT5zZXRTdHJpbmcoIm1lc3NhZ2UiX3MsIGluX21lc3NhZ2UpOwogICAgICAgICAgICAgcmV0
dXJuIGNhc3RTdGF0ZTxNZXNzYWdlU2V0PigpOwogICAgICAgICB9CiAKLSAgICAgICAgQnVpbGRl
cjxTVEFURSB8IENvZGVTZXQ+JiBzZXRDb2RlKGludCB2YWx1ZSkKKyAgICAgICAgQnVpbGRlcjxT
VEFURSB8IENvZGVTZXQ+JiBzZXRDb2RlKGludCBpbl9jb2RlKQogICAgICAgICB7CiAgICAgICAg
ICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQ29kZVNldCksIHByb3BlcnR5X2NvZGVfYWxy
ZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldEludGVnZXIoImNvZGUiX3MsIHZh
bHVlKTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRJbnRlZ2VyKCJjb2RlIl9zLCBpbl9jb2Rl
KTsKICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Q29kZVNldD4oKTsKICAgICAgICAgfQog
CkBAIC03MTksNyArNjkyLDcgQEAgT3B0aW9uYWw8UHJvdG9jb2xFbnVtVHlwZT4gcGFyc2VFbnVt
VmFsdWVGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYpOwogCiAvLyBFbnVtcyBpbiB0aGUgJ0RhdGFi
YXNlJyBEb21haW4KIHRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRh
dGFiYXNlOjpQcmltYXJ5Q29sb3JzPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9y
OjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+KGNvbnN0IFN0cmluZyYpOworT3B0
aW9uYWw8UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPiBwYXJzZUVudW1WYWx1ZUZy
b21TdHJpbmc8UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPihjb25zdCBTdHJpbmcm
KTsKIAogfSAvLyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKIApAQCAtNzcxLDggKzc0NCw3IEBAIHN0
cnVjdCBEZWZhdWx0SGFzaDxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNv
bG9ycz4gOiBJbnRIYXNoPEluc3BlCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGVz
dFByb3RvY29sT2JqZWN0cy5oIgogCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVk
ZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAKIG5h
bWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC03OTcsMTYgKzc2OSwxNiBAQCBTdHJpbmcgZ2V0RW51
bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpIHsKIC8vIEVudW1zIGluIHRoZSAnRGF0YWJhc2UnIERv
bWFpbgogCiB0ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFz
ZTo6UHJpbWFyeUNvbG9ycz4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPihjb25zdCBTdHJpbmcmIHByb3RvY29sU3Ry
aW5nKQorT3B0aW9uYWw8UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPiBwYXJzZUVu
dW1WYWx1ZUZyb21TdHJpbmc8UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPihjb25z
dCBTdHJpbmcmIHByb3RvY29sU3RyaW5nKQogewogICAgIHN0YXRpYyBjb25zdCBzaXplX3QgY29u
c3RhbnRWYWx1ZXNbXSA9IHsKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpE
YXRhYmFzZTo6UHJpbWFyeUNvbG9yczo6UmVkLAotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzOjpHcmVlbiwKLSAgICAgICAgKHNpemVf
dClJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9yczo6Qmx1ZSwKKyAg
ICAgICAgKHNpemVfdClQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM6OlJlZCwKKyAg
ICAgICAgKHNpemVfdClQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM6OkdyZWVuLAor
ICAgICAgICAoc2l6ZV90KVByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9yczo6Qmx1ZSwK
ICAgICB9OwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgMzsgKytpKQogICAgICAgICBpZiAo
cHJvdG9jb2xTdHJpbmcgPT0gZW51bV9jb25zdGFudF92YWx1ZXNbY29uc3RhbnRWYWx1ZXNbaV1d
KQotICAgICAgICAgICAgcmV0dXJuIChJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJp
bWFyeUNvbG9ycyljb25zdGFudFZhbHVlc1tpXTsKKyAgICAgICAgICAgIHJldHVybiAoUHJvdG9j
b2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzKWNvbnN0YW50VmFsdWVzW2ldOwogCiAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKIH0KQEAgLTg2MywxMCArODM1LDEwIEBAIGNsYXNzIE9iakNJbnNw
ZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEFsdGVybmF0ZURh
dGFiYXNlQmFjCiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgT2Jq
Q0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIoaWQ8VGVzdFByb3RvY29sRGF0YWJh
c2VEb21haW5IYW5kbGVyPiBoYW5kbGVyKSB7IG1fZGVsZWdhdGUgPSBoYW5kbGVyOyB9Ci0gICAg
dm9pZCBleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgcmVxdWVzdElkLCBp
bnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSkgZmluYWw7Ci0gICAgdm9p
ZCBleGVjdXRlU1FMQXN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIHJlcXVlc3RJZCwgaW50
IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnkpIGZpbmFsOwotICAgIHZvaWQg
ZXhlY3V0ZVNRTFN5bmMobG9uZyByZXF1ZXN0SWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBT
dHJpbmcmIGluX3F1ZXJ5KSBmaW5hbDsKLSAgICB2b2lkIGV4ZWN1dGVTUUxBc3luYyhsb25nIHJl
cXVlc3RJZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5fcXVlcnkpIGZpbmFs
OworICAgIHZvaWQgZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcyhsb25nIHByb3Rv
Y29sX3JlcXVlc3RJZCwgaW50IGRhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgcXVlcnkpIGZpbmFs
OworICAgIHZvaWQgZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXMobG9uZyBwcm90
b2NvbF9yZXF1ZXN0SWQsIGludCBkYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIHF1ZXJ5KSBmaW5h
bDsKKyAgICB2b2lkIGV4ZWN1dGVTUUxTeW5jKGxvbmcgcHJvdG9jb2xfcmVxdWVzdElkLCBpbnQg
ZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBxdWVyeSkgZmluYWw7CisgICAgdm9pZCBleGVjdXRl
U1FMQXN5bmMobG9uZyBwcm90b2NvbF9yZXF1ZXN0SWQsIGludCBkYXRhYmFzZUlkLCBjb25zdCBT
dHJpbmcmIHF1ZXJ5KSBmaW5hbDsKIHByaXZhdGU6CiAgICAgUmV0YWluUHRyPGlkPFRlc3RQcm90
b2NvbERhdGFiYXNlRG9tYWluSGFuZGxlcj4+IG1fZGVsZWdhdGU7CiB9OwpAQCAtOTE0LDE4MyAr
ODg2LDE3OSBAQCBwcml2YXRlOgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAotdm9pZCBPYmpD
SW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTFN5bmNPcHRpb25h
bFJldHVyblZhbHVlcyhsb25nIHJlcXVlc3RJZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0
cmluZyYgaW5fcXVlcnkpCit2b2lkIE9iakNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRj
aGVyOjpleGVjdXRlU1FMU3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgcHJvdG9jb2xfcmVx
dWVzdElkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSkKIHsKICAg
ICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoZXhlY3V0ZVNR
TFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1dpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFj
azpkYXRhYmFzZUlkOnF1ZXJ5OildKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJl
cG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90
Rm91bmQsICInRGF0YWJhc2UuZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcycgd2Fz
IG5vdCBmb3VuZCJfcyk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3Rv
Y29sRXJyb3IocHJvdG9jb2xfcmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90
Rm91bmQsICInRGF0YWJhc2UuZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlcycgd2Fz
IG5vdCBmb3VuZCJfcyk7CiAgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5n
RXJyb3JzKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZCBlcnJvckNhbGxiYWNr
ID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVw
b3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJv
ciwgZXJyb3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVy
cm9yKHByb3RvY29sX3JlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBl
cnJvcik7CiAgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7
CiAgICAgfTsKIAotICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF4oTlNBcnJheS8qPE5TU3RyaW5n
PiovICoqY29sdW1uTmFtZXMsIE5TU3RyaW5nICoqbm90ZXMsIGRvdWJsZSAqdGltZXN0YW1wLCBS
V0lQcm90b2NvbEpTT05PYmplY3QgKip2YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqKnBh
eWxvYWQsIGludCAqZGF0YWJhc2VJZCwgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKnNxbEVy
cm9yLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgKnNjcmVlbkNvbG9yLCBOU0Fy
cmF5Lyo8TlNTdHJpbmc+Ki8gKiphbHRlcm5hdGVDb2xvcnMsIFRlc3RQcm90b2NvbERhdGFiYXNl
RXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1ByaW50Q29sb3IgKnByaW50Q29sb3Ip
IHsKLSAgICAgICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0T2JqZWN0ID0gSlNPTjo6T2JqZWN0
OjpjcmVhdGUoKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFS
QU1FVEVSKGNvbHVtbk5hbWVzLCBAImNvbHVtbk5hbWVzIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQ
VElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihub3RlcywgQCJub3RlcyIpOwotICAgICAg
ICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIodmFsdWVzLCBAInZh
bHVlcyIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVU
RVIocGF5bG9hZCwgQCJwYXlsb2FkIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFE
X09QVElPTkFMX1BBUkFNRVRFUihzcWxFcnJvciwgQCJzcWxFcnJvciIpOwotICAgICAgICBUSFJP
V19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIoYWx0ZXJuYXRlQ29sb3JzLCBA
ImFsdGVybmF0ZUNvbG9ycyIpOwotICAgICAgICBpZiAoY29sdW1uTmFtZXMpCi0gICAgICAgICAg
ICByZXN1bHRPYmplY3QtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgdG9KU09OU3RyaW5nQXJy
YXkoKmNvbHVtbk5hbWVzKSk7Ci0gICAgICAgIGlmIChub3RlcykKLSAgICAgICAgICAgIHJlc3Vs
dE9iamVjdC0+c2V0U3RyaW5nKCJub3RlcyJfcywgKm5vdGVzKTsKLSAgICAgICAgaWYgKHRpbWVz
dGFtcCkKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3Ms
ICp0aW1lc3RhbXApOwotICAgICAgICBpZiAodmFsdWVzKQotICAgICAgICAgICAgcmVzdWx0T2Jq
ZWN0LT5zZXRPYmplY3QoInZhbHVlcyJfcywgWyp2YWx1ZXMgdG9KU09OT2JqZWN0XSk7Ci0gICAg
ICAgIGlmIChwYXlsb2FkKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRWYWx1ZSgicGF5
bG9hZCJfcywgWypwYXlsb2FkIHRvSlNPTk9iamVjdF0pOwotICAgICAgICBpZiAoZGF0YWJhc2VJ
ZCkKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0SW50ZWdlcigiZGF0YWJhc2VJZCJfcywg
KmRhdGFiYXNlSWQpOwotICAgICAgICBpZiAoc3FsRXJyb3IpCi0gICAgICAgICAgICByZXN1bHRP
YmplY3QtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIFsqc3FsRXJyb3IgdG9KU09OT2JqZWN0XSk7
Ci0gICAgICAgIGlmIChzY3JlZW5Db2xvcikKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0
U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgdG9Qcm90b2NvbFN0cmluZygqc2NyZWVuQ29sb3IpKTsK
LSAgICAgICAgaWYgKGFsdGVybmF0ZUNvbG9ycykKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+
c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywgdG9KU09OU3RyaW5nQXJyYXkoKmFsdGVybmF0
ZUNvbG9ycykpOwotICAgICAgICBpZiAocHJpbnRDb2xvcikKLSAgICAgICAgICAgIHJlc3VsdE9i
amVjdC0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCB0b1Byb3RvY29sU3RyaW5nKCpwcmludENv
bG9yKSk7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0
SWQsIFdURk1vdmUocmVzdWx0T2JqZWN0KSwgZmFsc2UpOworICAgIGlkIHN1Y2Nlc3NDYWxsYmFj
ayA9IF4oTlNBcnJheS8qPE5TU3RyaW5nPiovICoqb3V0X29wdF9jb2x1bW5OYW1lcywgTlNTdHJp
bmcgKipvdXRfb3B0X25vdGVzLCBkb3VibGUgKm91dF9vcHRfdGltZXN0YW1wLCBSV0lQcm90b2Nv
bEpTT05PYmplY3QgKipvdXRfb3B0X3ZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqb3V0
X29wdF9wYXlsb2FkLCBpbnQgKm91dF9vcHRfZGF0YWJhc2VJZCwgVGVzdFByb3RvY29sRGF0YWJh
c2VFcnJvciAqKm91dF9vcHRfc3FsRXJyb3IsIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNv
bG9ycyAqb3V0X29wdF9zY3JlZW5Db2xvciwgTlNBcnJheS8qPE5TU3RyaW5nPiovICoqb3V0X29w
dF9hbHRlcm5hdGVDb2xvcnMsIFRlc3RQcm90b2NvbERhdGFiYXNlKGFub255bW91cykgKm91dF9v
cHRfcHJpbnRDb2xvcikgeworICAgICAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNP
Tjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BU
SU9OQUxfUEFSQU1FVEVSKG91dF9vcHRfY29sdW1uTmFtZXMsIEAiY29sdW1uTmFtZXMiKTsKKyAg
ICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKG91dF9vcHRf
bm90ZXMsIEAibm90ZXMiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9O
QUxfUEFSQU1FVEVSKG91dF9vcHRfdmFsdWVzLCBAInZhbHVlcyIpOworICAgICAgICBUSFJPV19F
WENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIob3V0X29wdF9wYXlsb2FkLCBAInBh
eWxvYWQiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1F
VEVSKG91dF9vcHRfc3FsRXJyb3IsIEAic3FsRXJyb3IiKTsKKyAgICAgICAgVEhST1dfRVhDRVBU
SU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKG91dF9vcHRfYWx0ZXJuYXRlQ29sb3JzLCBA
ImFsdGVybmF0ZUNvbG9ycyIpOworICAgICAgICBpZiAoISFvdXRfb3B0X2NvbHVtbk5hbWVzKQor
ICAgICAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJf
cywgdG9KU09OU3RyaW5nQXJyYXkoKm91dF9vcHRfY29sdW1uTmFtZXMpKTsKKyAgICAgICAgaWYg
KCEhb3V0X29wdF9ub3RlcykKKyAgICAgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRT
dHJpbmcoIm5vdGVzIl9zLCAqb3V0X29wdF9ub3Rlcyk7CisgICAgICAgIGlmICghIW91dF9vcHRf
dGltZXN0YW1wKQorICAgICAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldERvdWJsZSgi
dGltZXN0YW1wIl9zLCAqb3V0X29wdF90aW1lc3RhbXApOworICAgICAgICBpZiAoISFvdXRfb3B0
X3ZhbHVlcykKKyAgICAgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRPYmplY3QoInZh
bHVlcyJfcywgWypvdXRfb3B0X3ZhbHVlcyB0b0pTT05PYmplY3RdKTsKKyAgICAgICAgaWYgKCEh
b3V0X29wdF9wYXlsb2FkKQorICAgICAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFZh
bHVlKCJwYXlsb2FkIl9zLCBbKm91dF9vcHRfcGF5bG9hZCB0b0pTT05PYmplY3RdKTsKKyAgICAg
ICAgaWYgKCEhb3V0X29wdF9kYXRhYmFzZUlkKQorICAgICAgICAgICAgcHJvdG9jb2xfanNvbk1l
c3NhZ2UtPnNldEludGVnZXIoImRhdGFiYXNlSWQiX3MsICpvdXRfb3B0X2RhdGFiYXNlSWQpOwor
ICAgICAgICBpZiAoISFvdXRfb3B0X3NxbEVycm9yKQorICAgICAgICAgICAgcHJvdG9jb2xfanNv
bk1lc3NhZ2UtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIFsqb3V0X29wdF9zcWxFcnJvciB0b0pT
T05PYmplY3RdKTsKKyAgICAgICAgaWYgKCEhb3V0X29wdF9zY3JlZW5Db2xvcikKKyAgICAgICAg
ICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCB0b1By
b3RvY29sU3RyaW5nKCpvdXRfb3B0X3NjcmVlbkNvbG9yKSk7CisgICAgICAgIGlmICghIW91dF9v
cHRfYWx0ZXJuYXRlQ29sb3JzKQorICAgICAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNl
dEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KCpvdXRfb3B0X2Fs
dGVybmF0ZUNvbG9ycykpOworICAgICAgICBpZiAoISFvdXRfb3B0X3ByaW50Q29sb3IpCisgICAg
ICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCB0
b1Byb3RvY29sU3RyaW5nKCpvdXRfb3B0X3ByaW50Q29sb3IpKTsKKyAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHByb3RvY29sX3JlcXVlc3RJZCwgV1RGTW92ZShwcm90
b2NvbF9qc29uTWVzc2FnZSksIGZhbHNlKTsKICAgICB9OwogCiAgICAgaW50IG9faW5fZGF0YWJh
c2VJZCA9IGluX2RhdGFiYXNlSWQ7CiAgICAgTlNTdHJpbmcgKm9faW5fcXVlcnkgPSBpbl9xdWVy
eTsKLQogICAgIFttX2RlbGVnYXRlIGV4ZWN1dGVTUUxTeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNX
aXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2Fs
bGJhY2sgZGF0YWJhc2VJZDpvX2luX2RhdGFiYXNlSWQgcXVlcnk6b19pbl9xdWVyeV07CiB9CiAK
LXZvaWQgT2JqQ0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxB
c3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcgcmVxdWVzdElkLCBpbnQgaW5fZGF0YWJhc2VJ
ZCwgY29uc3QgU3RyaW5nJiBpbl9xdWVyeSkKK3ZvaWQgT2JqQ0luc3BlY3RvckRhdGFiYXNlQmFj
a2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFsdWVzKGxvbmcg
cHJvdG9jb2xfcmVxdWVzdElkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBpbl9x
dWVyeSkKIHsKICAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0
b3IoZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNXaXRoRXJyb3JDYWxsYmFjazpz
dWNjZXNzQ2FsbGJhY2s6ZGF0YWJhc2VJZDpxdWVyeTopXSkgewotICAgICAgICBiYWNrZW5kRGlz
cGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNo
ZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RhdGFiYXNlLmV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0
dXJuVmFsdWVzJyB3YXMgbm90IGZvdW5kIl9zKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIo
KS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9yZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRj
aGVyOjpNZXRob2ROb3RGb3VuZCwgIidEYXRhYmFzZS5leGVjdXRlU1FMQXN5bmNPcHRpb25hbFJl
dHVyblZhbHVlcycgd2FzIG5vdCBmb3VuZCJfcyk7CiAgICAgICAgIGJhY2tlbmREaXNwYXRjaGVy
KCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBp
ZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRj
aGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5y
ZXBvcnRQcm90b2NvbEVycm9yKHByb3RvY29sX3JlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6
OlNlcnZlckVycm9yLCBlcnJvcik7CiAgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQ
ZW5kaW5nRXJyb3JzKCk7CiAgICAgfTsKIAotICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF4oTlNB
cnJheS8qPE5TU3RyaW5nPiovICoqY29sdW1uTmFtZXMsIE5TU3RyaW5nICoqbm90ZXMsIGRvdWJs
ZSAqdGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKip2YWx1ZXMsIFJXSVByb3RvY29s
SlNPTk9iamVjdCAqKnBheWxvYWQsIGludCAqZGF0YWJhc2VJZCwgVGVzdFByb3RvY29sRGF0YWJh
c2VFcnJvciAqKnNxbEVycm9yLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgKnNj
cmVlbkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiphbHRlcm5hdGVDb2xvcnMsIFRlc3RQ
cm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNQcmludENv
bG9yICpwcmludENvbG9yKSB7Ci0gICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdE9iamVj
dCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1Jf
QkFEX09QVElPTkFMX1BBUkFNRVRFUihjb2x1bW5OYW1lcywgQCJjb2x1bW5OYW1lcyIpOwotICAg
ICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIobm90ZXMsIEAi
bm90ZXMiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1F
VEVSKHZhbHVlcywgQCJ2YWx1ZXMiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURf
T1BUSU9OQUxfUEFSQU1FVEVSKHBheWxvYWQsIEAicGF5bG9hZCIpOwotICAgICAgICBUSFJPV19F
WENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIoc3FsRXJyb3IsIEAic3FsRXJyb3Ii
KTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKGFs
dGVybmF0ZUNvbG9ycywgQCJhbHRlcm5hdGVDb2xvcnMiKTsKLSAgICAgICAgaWYgKGNvbHVtbk5h
bWVzKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3Ms
IHRvSlNPTlN0cmluZ0FycmF5KCpjb2x1bW5OYW1lcykpOwotICAgICAgICBpZiAobm90ZXMpCi0g
ICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZygibm90ZXMiX3MsICpub3Rlcyk7Ci0g
ICAgICAgIGlmICh0aW1lc3RhbXApCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldERvdWJs
ZSgidGltZXN0YW1wIl9zLCAqdGltZXN0YW1wKTsKLSAgICAgICAgaWYgKHZhbHVlcykKLSAgICAg
ICAgICAgIHJlc3VsdE9iamVjdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIFsqdmFsdWVzIHRvSlNP
Tk9iamVjdF0pOwotICAgICAgICBpZiAocGF5bG9hZCkKLSAgICAgICAgICAgIHJlc3VsdE9iamVj
dC0+c2V0VmFsdWUoInBheWxvYWQiX3MsIFsqcGF5bG9hZCB0b0pTT05PYmplY3RdKTsKLSAgICAg
ICAgaWYgKGRhdGFiYXNlSWQpCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldEludGVnZXIo
ImRhdGFiYXNlSWQiX3MsICpkYXRhYmFzZUlkKTsKLSAgICAgICAgaWYgKHNxbEVycm9yKQotICAg
ICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBbKnNxbEVycm9y
IHRvSlNPTk9iamVjdF0pOwotICAgICAgICBpZiAoc2NyZWVuQ29sb3IpCi0gICAgICAgICAgICBy
ZXN1bHRPYmplY3QtPnNldFN0cmluZygic2NyZWVuQ29sb3IiX3MsIHRvUHJvdG9jb2xTdHJpbmco
KnNjcmVlbkNvbG9yKSk7Ci0gICAgICAgIGlmIChhbHRlcm5hdGVDb2xvcnMpCi0gICAgICAgICAg
ICByZXN1bHRPYmplY3QtPnNldEFycmF5KCJhbHRlcm5hdGVDb2xvcnMiX3MsIHRvSlNPTlN0cmlu
Z0FycmF5KCphbHRlcm5hdGVDb2xvcnMpKTsKLSAgICAgICAgaWYgKHByaW50Q29sb3IpCi0gICAg
ICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZygicHJpbnRDb2xvciJfcywgdG9Qcm90b2Nv
bFN0cmluZygqcHJpbnRDb2xvcikpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5k
UmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdE9iamVjdCksIGZhbHNlKTsKKyAgICBp
ZCBzdWNjZXNzQ2FsbGJhY2sgPSBeKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKm91dF9vcHRfY29s
dW1uTmFtZXMsIE5TU3RyaW5nICoqb3V0X29wdF9ub3RlcywgZG91YmxlICpvdXRfb3B0X3RpbWVz
dGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqb3V0X29wdF92YWx1ZXMsIFJXSVByb3RvY29s
SlNPTk9iamVjdCAqKm91dF9vcHRfcGF5bG9hZCwgaW50ICpvdXRfb3B0X2RhdGFiYXNlSWQsIFRl
c3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKipvdXRfb3B0X3NxbEVycm9yLCBUZXN0UHJvdG9jb2xE
YXRhYmFzZVByaW1hcnlDb2xvcnMgKm91dF9vcHRfc2NyZWVuQ29sb3IsIE5TQXJyYXkvKjxOU1N0
cmluZz4qLyAqKm91dF9vcHRfYWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZShh
bm9ueW1vdXMpICpvdXRfb3B0X3ByaW50Q29sb3IpIHsKKyAgICAgICAgYXV0byBwcm90b2NvbF9q
c29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIFRIUk9XX0VYQ0VQ
VElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihvdXRfb3B0X2NvbHVtbk5hbWVzLCBAImNv
bHVtbk5hbWVzIik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BB
UkFNRVRFUihvdXRfb3B0X25vdGVzLCBAIm5vdGVzIik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihvdXRfb3B0X3ZhbHVlcywgQCJ2YWx1ZXMiKTsK
KyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKG91dF9v
cHRfcGF5bG9hZCwgQCJwYXlsb2FkIik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFE
X09QVElPTkFMX1BBUkFNRVRFUihvdXRfb3B0X3NxbEVycm9yLCBAInNxbEVycm9yIik7CisgICAg
ICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihvdXRfb3B0X2Fs
dGVybmF0ZUNvbG9ycywgQCJhbHRlcm5hdGVDb2xvcnMiKTsKKyAgICAgICAgaWYgKCEhb3V0X29w
dF9jb2x1bW5OYW1lcykKKyAgICAgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRBcnJh
eSgiY29sdW1uTmFtZXMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KCpvdXRfb3B0X2NvbHVtbk5hbWVz
KSk7CisgICAgICAgIGlmICghIW91dF9vcHRfbm90ZXMpCisgICAgICAgICAgICBwcm90b2NvbF9q
c29uTWVzc2FnZS0+c2V0U3RyaW5nKCJub3RlcyJfcywgKm91dF9vcHRfbm90ZXMpOworICAgICAg
ICBpZiAoISFvdXRfb3B0X3RpbWVzdGFtcCkKKyAgICAgICAgICAgIHByb3RvY29sX2pzb25NZXNz
YWdlLT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywgKm91dF9vcHRfdGltZXN0YW1wKTsKKyAgICAg
ICAgaWYgKCEhb3V0X29wdF92YWx1ZXMpCisgICAgICAgICAgICBwcm90b2NvbF9qc29uTWVzc2Fn
ZS0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIFsqb3V0X29wdF92YWx1ZXMgdG9KU09OT2JqZWN0XSk7
CisgICAgICAgIGlmICghIW91dF9vcHRfcGF5bG9hZCkKKyAgICAgICAgICAgIHByb3RvY29sX2pz
b25NZXNzYWdlLT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgWypvdXRfb3B0X3BheWxvYWQgdG9KU09O
T2JqZWN0XSk7CisgICAgICAgIGlmICghIW91dF9vcHRfZGF0YWJhc2VJZCkKKyAgICAgICAgICAg
IHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRJbnRlZ2VyKCJkYXRhYmFzZUlkIl9zLCAqb3V0X29w
dF9kYXRhYmFzZUlkKTsKKyAgICAgICAgaWYgKCEhb3V0X29wdF9zcWxFcnJvcikKKyAgICAgICAg
ICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBbKm91dF9v
cHRfc3FsRXJyb3IgdG9KU09OT2JqZWN0XSk7CisgICAgICAgIGlmICghIW91dF9vcHRfc2NyZWVu
Q29sb3IpCisgICAgICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJzY3Jl
ZW5Db2xvciJfcywgdG9Qcm90b2NvbFN0cmluZygqb3V0X29wdF9zY3JlZW5Db2xvcikpOworICAg
ICAgICBpZiAoISFvdXRfb3B0X2FsdGVybmF0ZUNvbG9ycykKKyAgICAgICAgICAgIHByb3RvY29s
X2pzb25NZXNzYWdlLT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCB0b0pTT05TdHJpbmdB
cnJheSgqb3V0X29wdF9hbHRlcm5hdGVDb2xvcnMpKTsKKyAgICAgICAgaWYgKCEhb3V0X29wdF9w
cmludENvbG9yKQorICAgICAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygi
cHJpbnRDb2xvciJfcywgdG9Qcm90b2NvbFN0cmluZygqb3V0X29wdF9wcmludENvbG9yKSk7Cisg
ICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShwcm90b2NvbF9yZXF1ZXN0
SWQsIFdURk1vdmUocHJvdG9jb2xfanNvbk1lc3NhZ2UpLCBmYWxzZSk7CiAgICAgfTsKIAogICAg
IGludCBvX2luX2RhdGFiYXNlSWQgPSBpbl9kYXRhYmFzZUlkOwogICAgIE5TU3RyaW5nICpvX2lu
X3F1ZXJ5ID0gaW5fcXVlcnk7Ci0KICAgICBbbV9kZWxlZ2F0ZSBleGVjdXRlU1FMQXN5bmNPcHRp
b25hbFJldHVyblZhbHVlc1dpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0Nh
bGxiYWNrOnN1Y2Nlc3NDYWxsYmFjayBkYXRhYmFzZUlkOm9faW5fZGF0YWJhc2VJZCBxdWVyeTpv
X2luX3F1ZXJ5XTsKIH0KIAotdm9pZCBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0
Y2hlcjo6ZXhlY3V0ZVNRTFN5bmMobG9uZyByZXF1ZXN0SWQsIGludCBpbl9kYXRhYmFzZUlkLCBj
b25zdCBTdHJpbmcmIGluX3F1ZXJ5KQordm9pZCBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5k
RGlzcGF0Y2hlcjo6ZXhlY3V0ZVNRTFN5bmMobG9uZyBwcm90b2NvbF9yZXF1ZXN0SWQsIGludCBp
bl9kYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIGluX3F1ZXJ5KQogewogICAgIGlmICghW21fZGVs
ZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihleGVjdXRlU1FMU3luY1dpdGhFcnJv
ckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazpkYXRhYmFzZUlkOnF1ZXJ5OildKSB7Ci0gICAgICAg
IGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNr
ZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRGF0YWJhc2UuZXhlY3V0ZVNRTFN5bmMn
IHdhcyBub3QgZm91bmQiX3MpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQ
cm90b2NvbEVycm9yKHByb3RvY29sX3JlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhv
ZE5vdEZvdW5kLCAiJ0RhdGFiYXNlLmV4ZWN1dGVTUUxTeW5jJyB3YXMgbm90IGZvdW5kIl9zKTsK
ICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICpl
cnJvcikgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9y
KHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CisgICAg
ICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocHJvdG9jb2xfcmVx
dWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKICAgICAgICAg
YmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKICAgICB9OwogCi0gICAg
aWQgc3VjY2Vzc0NhbGxiYWNrID0gXihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmNvbHVtbk5hbWVz
LCBOU1N0cmluZyAqbm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIFJXSVByb3RvY29sSlNPTk9iamVj
dCAqdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKnBheWxvYWQsIGludCBkYXRhYmFzZUlk
LCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICpzcWxFcnJvciwgTlNBcnJheS8qPE5TU3RyaW5n
PiovICphbHRlcm5hdGVDb2xvcnMsIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyBz
Y3JlZW5Db2xvciwgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMU3luY1ByaW50Q29sb3Ig
cHJpbnRDb2xvcikgewotICAgICAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHRPYmplY3QgPSBK
U09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJ
UkVEX1BBUkFNRVRFUihjb2x1bW5OYW1lcywgQCJjb2x1bW5OYW1lcyIpOwotICAgICAgICBUSFJP
V19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihub3RlcywgQCJub3RlcyIpOwotICAg
ICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUih2YWx1ZXMsIEAidmFs
dWVzIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKHBh
eWxvYWQsIEAicGF5bG9hZCIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVE
X1BBUkFNRVRFUihzcWxFcnJvciwgQCJzcWxFcnJvciIpOwotICAgICAgICBUSFJPV19FWENFUFRJ
T05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihhbHRlcm5hdGVDb2xvcnMsIEAiYWx0ZXJuYXRlQ29s
b3JzIik7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCB0
b0pTT05TdHJpbmdBcnJheShjb2x1bW5OYW1lcykpOwotICAgICAgICByZXN1bHRPYmplY3QtPnNl
dFN0cmluZygibm90ZXMiX3MsIG5vdGVzKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXREb3Vi
bGUoInRpbWVzdGFtcCJfcywgdGltZXN0YW1wKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRP
YmplY3QoInZhbHVlcyJfcywgW3ZhbHVlcyB0b0pTT05PYmplY3RdKTsKLSAgICAgICAgcmVzdWx0
T2JqZWN0LT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgW3BheWxvYWQgdG9KU09OT2JqZWN0XSk7Ci0g
ICAgICAgIHJlc3VsdE9iamVjdC0+c2V0SW50ZWdlcigiZGF0YWJhc2VJZCJfcywgZGF0YWJhc2VJ
ZCk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0T2JqZWN0KCJzcWxFcnJvciJfcywgW3NxbEVy
cm9yIHRvSlNPTk9iamVjdF0pOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldEFycmF5KCJhbHRl
cm5hdGVDb2xvcnMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KGFsdGVybmF0ZUNvbG9ycykpOwotICAg
ICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZygic2NyZWVuQ29sb3IiX3MsIHRvUHJvdG9jb2xT
dHJpbmcoc2NyZWVuQ29sb3IpKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoInBy
aW50Q29sb3IiX3MsIHRvUHJvdG9jb2xTdHJpbmcocHJpbnRDb2xvcikpOwotICAgICAgICBiYWNr
ZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdE9i
amVjdCksIGZhbHNlKTsKKyAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeKE5TQXJyYXkvKjxOU1N0
cmluZz4qLyAqb3V0X2NvbHVtbk5hbWVzLCBOU1N0cmluZyAqb3V0X25vdGVzLCBkb3VibGUgb3V0
X3RpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpvdXRfdmFsdWVzLCBSV0lQcm90b2Nv
bEpTT05PYmplY3QgKm91dF9wYXlsb2FkLCBpbnQgb3V0X2RhdGFiYXNlSWQsIFRlc3RQcm90b2Nv
bERhdGFiYXNlRXJyb3IgKm91dF9zcWxFcnJvciwgTlNBcnJheS8qPE5TU3RyaW5nPiovICpvdXRf
YWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgb3V0X3Nj
cmVlbkNvbG9yLCBUZXN0UHJvdG9jb2xEYXRhYmFzZShhbm9ueW1vdXMpIG91dF9wcmludENvbG9y
KSB7CisgICAgICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNy
ZWF0ZSgpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihv
dXRfY29sdW1uTmFtZXMsIEAiY29sdW1uTmFtZXMiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9O
X0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIob3V0X25vdGVzLCBAIm5vdGVzIik7CisgICAgICAgIFRI
Uk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKG91dF92YWx1ZXMsIEAidmFsdWVz
Iik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKG91dF9w
YXlsb2FkLCBAInBheWxvYWQiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJF
RF9QQVJBTUVURVIob3V0X3NxbEVycm9yLCBAInNxbEVycm9yIik7CisgICAgICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKG91dF9hbHRlcm5hdGVDb2xvcnMsIEAiYWx0
ZXJuYXRlQ29sb3JzIik7CisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRBcnJheSgi
Y29sdW1uTmFtZXMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KG91dF9jb2x1bW5OYW1lcykpOworICAg
ICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJub3RlcyJfcywgb3V0X25vdGVz
KTsKKyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldERvdWJsZSgidGltZXN0YW1wIl9z
LCBvdXRfdGltZXN0YW1wKTsKKyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldE9iamVj
dCgidmFsdWVzIl9zLCBbb3V0X3ZhbHVlcyB0b0pTT05PYmplY3RdKTsKKyAgICAgICAgcHJvdG9j
b2xfanNvbk1lc3NhZ2UtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCBbb3V0X3BheWxvYWQgdG9KU09O
T2JqZWN0XSk7CisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRJbnRlZ2VyKCJkYXRh
YmFzZUlkIl9zLCBvdXRfZGF0YWJhc2VJZCk7CisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdl
LT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBbb3V0X3NxbEVycm9yIHRvSlNPTk9iamVjdF0pOwor
ICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJf
cywgdG9KU09OU3RyaW5nQXJyYXkob3V0X2FsdGVybmF0ZUNvbG9ycykpOworICAgICAgICBwcm90
b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgdG9Qcm90b2NvbFN0
cmluZyhvdXRfc2NyZWVuQ29sb3IpKTsKKyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNl
dFN0cmluZygicHJpbnRDb2xvciJfcywgdG9Qcm90b2NvbFN0cmluZyhvdXRfcHJpbnRDb2xvcikp
OworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocHJvdG9jb2xfcmVx
dWVzdElkLCBXVEZNb3ZlKHByb3RvY29sX2pzb25NZXNzYWdlKSwgZmFsc2UpOwogICAgIH07CiAK
ICAgICBpbnQgb19pbl9kYXRhYmFzZUlkID0gaW5fZGF0YWJhc2VJZDsKICAgICBOU1N0cmluZyAq
b19pbl9xdWVyeSA9IGluX3F1ZXJ5OwotCiAgICAgW21fZGVsZWdhdGUgZXhlY3V0ZVNRTFN5bmNX
aXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2Fs
bGJhY2sgZGF0YWJhc2VJZDpvX2luX2RhdGFiYXNlSWQgcXVlcnk6b19pbl9xdWVyeV07CiB9CiAK
LXZvaWQgT2JqQ0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVTUUxB
c3luYyhsb25nIHJlcXVlc3RJZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgaW5f
cXVlcnkpCit2b2lkIE9iakNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVj
dXRlU1FMQXN5bmMobG9uZyBwcm90b2NvbF9yZXF1ZXN0SWQsIGludCBpbl9kYXRhYmFzZUlkLCBj
b25zdCBTdHJpbmcmIGluX3F1ZXJ5KQogewogICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNU
b1NlbGVjdG9yOkBzZWxlY3RvcihleGVjdXRlU1FMQXN5bmNXaXRoRXJyb3JDYWxsYmFjazpzdWNj
ZXNzQ2FsbGJhY2s6ZGF0YWJhc2VJZDpxdWVyeTopXSkgewotICAgICAgICBiYWNrZW5kRGlzcGF0
Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6
Ok1ldGhvZE5vdEZvdW5kLCAiJ0RhdGFiYXNlLmV4ZWN1dGVTUUxBc3luYycgd2FzIG5vdCBmb3Vu
ZCJfcyk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3Io
cHJvdG9jb2xfcmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICIn
RGF0YWJhc2UuZXhlY3V0ZVNRTEFzeW5jJyB3YXMgbm90IGZvdW5kIl9zKTsKICAgICAgICAgYmFj
a2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAogICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgewotICAg
ICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwg
QmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CisgICAgICAgIGJhY2tlbmRE
aXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocHJvdG9jb2xfcmVxdWVzdElkLCBCYWNr
ZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKICAgICAgICAgYmFja2VuZERpc3Bh
dGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKICAgICB9OwogCi0gICAgaWQgc3VjY2Vzc0Nh
bGxiYWNrID0gXihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmNvbHVtbk5hbWVzLCBOU1N0cmluZyAq
bm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqdmFsdWVzLCBS
V0lQcm90b2NvbEpTT05PYmplY3QgKnBheWxvYWQsIGludCBkYXRhYmFzZUlkLCBUZXN0UHJvdG9j
b2xEYXRhYmFzZUVycm9yICpzcWxFcnJvciwgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29s
b3JzIHNjcmVlbkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmFsdGVybmF0ZUNvbG9ycywg
VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNQcmludENvbG9yIHByaW50Q29sb3Ip
IHsKLSAgICAgICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0T2JqZWN0ID0gSlNPTjo6T2JqZWN0
OjpjcmVhdGUoKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVU
RVIoY29sdW1uTmFtZXMsIEAiY29sdW1uTmFtZXMiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9O
X0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIobm90ZXMsIEAibm90ZXMiKTsKLSAgICAgICAgVEhST1df
RVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIodmFsdWVzLCBAInZhbHVlcyIpOwotICAg
ICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihwYXlsb2FkLCBAInBh
eWxvYWQiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIo
c3FsRXJyb3IsIEAic3FsRXJyb3IiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFV
SVJFRF9QQVJBTUVURVIoYWx0ZXJuYXRlQ29sb3JzLCBAImFsdGVybmF0ZUNvbG9ycyIpOwotICAg
ICAgICByZXN1bHRPYmplY3QtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgdG9KU09OU3RyaW5n
QXJyYXkoY29sdW1uTmFtZXMpKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoIm5v
dGVzIl9zLCBub3Rlcyk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0RG91YmxlKCJ0aW1lc3Rh
bXAiX3MsIHRpbWVzdGFtcCk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0T2JqZWN0KCJ2YWx1
ZXMiX3MsIFt2YWx1ZXMgdG9KU09OT2JqZWN0XSk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0
VmFsdWUoInBheWxvYWQiX3MsIFtwYXlsb2FkIHRvSlNPTk9iamVjdF0pOwotICAgICAgICByZXN1
bHRPYmplY3QtPnNldEludGVnZXIoImRhdGFiYXNlSWQiX3MsIGRhdGFiYXNlSWQpOwotICAgICAg
ICByZXN1bHRPYmplY3QtPnNldE9iamVjdCgic3FsRXJyb3IiX3MsIFtzcWxFcnJvciB0b0pTT05P
YmplY3RdKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9z
LCB0b1Byb3RvY29sU3RyaW5nKHNjcmVlbkNvbG9yKSk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+
c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywgdG9KU09OU3RyaW5nQXJyYXkoYWx0ZXJuYXRl
Q29sb3JzKSk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9z
LCB0b1Byb3RvY29sU3RyaW5nKHByaW50Q29sb3IpKTsKLSAgICAgICAgYmFja2VuZERpc3BhdGNo
ZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHRPYmplY3QpLCBmYWxz
ZSk7CisgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKm91
dF9jb2x1bW5OYW1lcywgTlNTdHJpbmcgKm91dF9ub3RlcywgZG91YmxlIG91dF90aW1lc3RhbXAs
IFJXSVByb3RvY29sSlNPTk9iamVjdCAqb3V0X3ZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0
ICpvdXRfcGF5bG9hZCwgaW50IG91dF9kYXRhYmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVy
cm9yICpvdXRfc3FsRXJyb3IsIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyBvdXRf
c2NyZWVuQ29sb3IsIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqb3V0X2FsdGVybmF0ZUNvbG9ycywg
VGVzdFByb3RvY29sRGF0YWJhc2UoYW5vbnltb3VzKSBvdXRfcHJpbnRDb2xvcikgeworICAgICAg
ICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAg
ICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIob3V0X2NvbHVtbk5h
bWVzLCBAImNvbHVtbk5hbWVzIik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlS
RURfUEFSQU1FVEVSKG91dF9ub3RlcywgQCJub3RlcyIpOworICAgICAgICBUSFJPV19FWENFUFRJ
T05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihvdXRfdmFsdWVzLCBAInZhbHVlcyIpOworICAgICAg
ICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihvdXRfcGF5bG9hZCwgQCJw
YXlsb2FkIik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVS
KG91dF9zcWxFcnJvciwgQCJzcWxFcnJvciIpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9S
X1JFUVVJUkVEX1BBUkFNRVRFUihvdXRfYWx0ZXJuYXRlQ29sb3JzLCBAImFsdGVybmF0ZUNvbG9y
cyIpOworICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0QXJyYXkoImNvbHVtbk5hbWVz
Il9zLCB0b0pTT05TdHJpbmdBcnJheShvdXRfY29sdW1uTmFtZXMpKTsKKyAgICAgICAgcHJvdG9j
b2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygibm90ZXMiX3MsIG91dF9ub3Rlcyk7CisgICAgICAg
IHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywgb3V0X3RpbWVz
dGFtcCk7CisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRPYmplY3QoInZhbHVlcyJf
cywgW291dF92YWx1ZXMgdG9KU09OT2JqZWN0XSk7CisgICAgICAgIHByb3RvY29sX2pzb25NZXNz
YWdlLT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgW291dF9wYXlsb2FkIHRvSlNPTk9iamVjdF0pOwor
ICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0SW50ZWdlcigiZGF0YWJhc2VJZCJfcywg
b3V0X2RhdGFiYXNlSWQpOworICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0T2JqZWN0
KCJzcWxFcnJvciJfcywgW291dF9zcWxFcnJvciB0b0pTT05PYmplY3RdKTsKKyAgICAgICAgcHJv
dG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygic2NyZWVuQ29sb3IiX3MsIHRvUHJvdG9jb2xT
dHJpbmcob3V0X3NjcmVlbkNvbG9yKSk7CisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5z
ZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCB0b0pTT05TdHJpbmdBcnJheShvdXRfYWx0ZXJu
YXRlQ29sb3JzKSk7CisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoInBy
aW50Q29sb3IiX3MsIHRvUHJvdG9jb2xTdHJpbmcob3V0X3ByaW50Q29sb3IpKTsKKyAgICAgICAg
YmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHByb3RvY29sX3JlcXVlc3RJZCwgV1RG
TW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSksIGZhbHNlKTsKICAgICB9OwogCiAgICAgaW50IG9f
aW5fZGF0YWJhc2VJZCA9IGluX2RhdGFiYXNlSWQ7CiAgICAgTlNTdHJpbmcgKm9faW5fcXVlcnkg
PSBpbl9xdWVyeTsKLQogICAgIFttX2RlbGVnYXRlIGV4ZWN1dGVTUUxBc3luY1dpdGhFcnJvckNh
bGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjayBkYXRh
YmFzZUlkOm9faW5fZGF0YWJhc2VJZCBxdWVyeTpvX2luX3F1ZXJ5XTsKIH0KIApAQCAtMTM0Niwx
MCArMTMxNCwxMCBAQCBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKIAog
QHByb3RvY29sIFRlc3RQcm90b2NvbERhdGFiYXNlRG9tYWluSGFuZGxlciA8TlNPYmplY3Q+CiBA
b3B0aW9uYWwKLS0gKHZvaWQpZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJldHVyblZhbHVlc1dpdGhF
cnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNj
ZXNzQ2FsbGJhY2s6KHZvaWQoXikoTlNBcnJheS8qPE5TU3RyaW5nPiovICoqY29sdW1uTmFtZXMs
IE5TU3RyaW5nICoqbm90ZXMsIGRvdWJsZSAqdGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05PYmpl
Y3QgKip2YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqKnBheWxvYWQsIGludCAqZGF0YWJh
c2VJZCwgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKnNxbEVycm9yLCBUZXN0UHJvdG9jb2xE
YXRhYmFzZVByaW1hcnlDb2xvcnMgKnNjcmVlbkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8g
KiphbHRlcm5hdGVDb2xvcnMsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNPcHRp
b25hbFJldHVyblZhbHVlc1ByaW50Q29sb3IgKnByaW50Q29sb3IpKXN1Y2Nlc3NDYWxsYmFjayBk
YXRhYmFzZUlkOihpbnQpZGF0YWJhc2VJZCBxdWVyeTooTlNTdHJpbmcgKilxdWVyeTsKLS0gKHZv
aWQpZXhlY3V0ZVNRTEFzeW5jT3B0aW9uYWxSZXR1cm5WYWx1ZXNXaXRoRXJyb3JDYWxsYmFjazoo
dm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2
b2lkKF4pKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKmNvbHVtbk5hbWVzLCBOU1N0cmluZyAqKm5v
dGVzLCBkb3VibGUgKnRpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqdmFsdWVzLCBS
V0lQcm90b2NvbEpTT05PYmplY3QgKipwYXlsb2FkLCBpbnQgKmRhdGFiYXNlSWQsIFRlc3RQcm90
b2NvbERhdGFiYXNlRXJyb3IgKipzcWxFcnJvciwgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5
Q29sb3JzICpzY3JlZW5Db2xvciwgTlNBcnJheS8qPE5TU3RyaW5nPiovICoqYWx0ZXJuYXRlQ29s
b3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVTUUxBc3luY09wdGlvbmFsUmV0dXJuVmFs
dWVzUHJpbnRDb2xvciAqcHJpbnRDb2xvcikpc3VjY2Vzc0NhbGxiYWNrIGRhdGFiYXNlSWQ6KGlu
dClkYXRhYmFzZUlkIHF1ZXJ5OihOU1N0cmluZyAqKXF1ZXJ5OwotLSAodm9pZClleGVjdXRlU1FM
U3luY1dpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxs
YmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikoTlNBcnJheS8qPE5TU3RyaW5nPiovICpjb2x1
bW5OYW1lcywgTlNTdHJpbmcgKm5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBSV0lQcm90b2NvbEpT
T05PYmplY3QgKnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpwYXlsb2FkLCBpbnQgZGF0
YWJhc2VJZCwgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqc3FsRXJyb3IsIE5TQXJyYXkvKjxO
U1N0cmluZz4qLyAqYWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlD
b2xvcnMgc2NyZWVuQ29sb3IsIFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZVNRTFN5bmNQcmlu
dENvbG9yIHByaW50Q29sb3IpKXN1Y2Nlc3NDYWxsYmFjayBkYXRhYmFzZUlkOihpbnQpZGF0YWJh
c2VJZCBxdWVyeTooTlNTdHJpbmcgKilxdWVyeTsKLS0gKHZvaWQpZXhlY3V0ZVNRTEFzeW5jV2l0
aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1
Y2Nlc3NDYWxsYmFjazoodm9pZCheKShOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmNvbHVtbk5hbWVz
LCBOU1N0cmluZyAqbm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIFJXSVByb3RvY29sSlNPTk9iamVj
dCAqdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKnBheWxvYWQsIGludCBkYXRhYmFzZUlk
LCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICpzcWxFcnJvciwgVGVzdFByb3RvY29sRGF0YWJh
c2VQcmltYXJ5Q29sb3JzIHNjcmVlbkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmFsdGVy
bmF0ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlU1FMQXN5bmNQcmludENvbG9y
IHByaW50Q29sb3IpKXN1Y2Nlc3NDYWxsYmFjayBkYXRhYmFzZUlkOihpbnQpZGF0YWJhc2VJZCBx
dWVyeTooTlNTdHJpbmcgKilxdWVyeTsKKy0gKHZvaWQpZXhlY3V0ZVNRTFN5bmNPcHRpb25hbFJl
dHVyblZhbHVlc1dpdGhFcnJvckNhbGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJy
b3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQoXikoTlNBcnJheS8qPE5TU3RyaW5nPiov
ICoqY29sdW1uTmFtZXMsIE5TU3RyaW5nICoqbm90ZXMsIGRvdWJsZSAqdGltZXN0YW1wLCBSV0lQ
cm90b2NvbEpTT05PYmplY3QgKip2YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqKnBheWxv
YWQsIGludCAqZGF0YWJhc2VJZCwgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKnNxbEVycm9y
LCBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgKnNjcmVlbkNvbG9yLCBOU0FycmF5
Lyo8TlNTdHJpbmc+Ki8gKiphbHRlcm5hdGVDb2xvcnMsIFRlc3RQcm90b2NvbERhdGFiYXNlKGFu
b255bW91cykgKnByaW50Q29sb3IpKXN1Y2Nlc3NDYWxsYmFjayBkYXRhYmFzZUlkOihpbnQpZGF0
YWJhc2VJZCBxdWVyeTooTlNTdHJpbmcgKilxdWVyeTsKKy0gKHZvaWQpZXhlY3V0ZVNRTEFzeW5j
T3B0aW9uYWxSZXR1cm5WYWx1ZXNXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmluZyAq
ZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKE5TQXJyYXkvKjxO
U1N0cmluZz4qLyAqKmNvbHVtbk5hbWVzLCBOU1N0cmluZyAqKm5vdGVzLCBkb3VibGUgKnRpbWVz
dGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmpl
Y3QgKipwYXlsb2FkLCBpbnQgKmRhdGFiYXNlSWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3Ig
KipzcWxFcnJvciwgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzICpzY3JlZW5Db2xv
ciwgTlNBcnJheS8qPE5TU3RyaW5nPiovICoqYWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xE
YXRhYmFzZShhbm9ueW1vdXMpICpwcmludENvbG9yKSlzdWNjZXNzQ2FsbGJhY2sgZGF0YWJhc2VJ
ZDooaW50KWRhdGFiYXNlSWQgcXVlcnk6KE5TU3RyaW5nICopcXVlcnk7CistICh2b2lkKWV4ZWN1
dGVTUUxTeW5jV2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJv
ckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKShOU0FycmF5Lyo8TlNTdHJpbmc+Ki8g
KmNvbHVtbk5hbWVzLCBOU1N0cmluZyAqbm90ZXMsIGRvdWJsZSB0aW1lc3RhbXAsIFJXSVByb3Rv
Y29sSlNPTk9iamVjdCAqdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKnBheWxvYWQsIGlu
dCBkYXRhYmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICpzcWxFcnJvciwgTlNBcnJh
eS8qPE5TU3RyaW5nPiovICphbHRlcm5hdGVDb2xvcnMsIFRlc3RQcm90b2NvbERhdGFiYXNlUHJp
bWFyeUNvbG9ycyBzY3JlZW5Db2xvciwgVGVzdFByb3RvY29sRGF0YWJhc2UoYW5vbnltb3VzKSBw
cmludENvbG9yKSlzdWNjZXNzQ2FsbGJhY2sgZGF0YWJhc2VJZDooaW50KWRhdGFiYXNlSWQgcXVl
cnk6KE5TU3RyaW5nICopcXVlcnk7CistICh2b2lkKWV4ZWN1dGVTUUxBc3luY1dpdGhFcnJvckNh
bGxiYWNrOih2b2lkKF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2Fs
bGJhY2s6KHZvaWQoXikoTlNBcnJheS8qPE5TU3RyaW5nPiovICpjb2x1bW5OYW1lcywgTlNTdHJp
bmcgKm5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKnZhbHVl
cywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpwYXlsb2FkLCBpbnQgZGF0YWJhc2VJZCwgVGVzdFBy
b3RvY29sRGF0YWJhc2VFcnJvciAqc3FsRXJyb3IsIFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFy
eUNvbG9ycyBzY3JlZW5Db2xvciwgTlNBcnJheS8qPE5TU3RyaW5nPiovICphbHRlcm5hdGVDb2xv
cnMsIFRlc3RQcm90b2NvbERhdGFiYXNlKGFub255bW91cykgcHJpbnRDb2xvcikpc3VjY2Vzc0Nh
bGxiYWNrIGRhdGFiYXNlSWQ6KGludClkYXRhYmFzZUlkIHF1ZXJ5OihOU1N0cmluZyAqKXF1ZXJ5
OwogQGVuZAogCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9leHBlY3RlZC9jb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJu
LXBhcmFtZXRlcnMuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvY29tbWFuZHMtd2l0aC1vcHRpb25hbC1jYWxsLXJldHVy
bi1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0CmluZGV4IDFmMmY0NWQ3NGMzOTM5MTExMjM2YTg2N2Q3
ZmZmZDI0MGU2ZDk5YzUuLjlmNDRjNWI3NGZlMjkzNGUzZWE5MTEwMDRhMWUyNzNkMzgxZWE2Y2Ug
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9leHBlY3RlZC9jb21tYW5kcy13aXRoLW9wdGlvbmFsLWNhbGwtcmV0dXJuLXBhcmFtZXRlcnMu
anNvbi1yZXN1bHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2V4cGVjdGVkL2NvbW1hbmRzLXdpdGgtb3B0aW9uYWwtY2FsbC1yZXR1cm4tcGFyYW1l
dGVycy5qc29uLXJlc3VsdApAQCAtNzAsNyArNzAsNyBAQCBJbnNwZWN0b3JCYWNrZW5kLmFjdGl2
YXRlRG9tYWluKCJEYXRhYmFzZSIsIG51bGwpOwogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRF
Uk5BVEVfRElTUEFUQ0hFUlMpCiAKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgorI2lu
Y2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9J
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0lu
c3BlY3RvckZyb250ZW5kUm91dGVyLmg+CiAKQEAgLTg4LDggKzg4LDggQEAgcHJpdmF0ZToKIGNs
YXNzIEFsdGVybmF0ZURhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIgOiBwdWJsaWMgQWx0ZXJuYXRl
QmFja2VuZERpc3BhdGNoZXIgewogcHVibGljOgogICAgIHZpcnR1YWwgfkFsdGVybmF0ZURhdGFi
YXNlQmFja2VuZERpc3BhdGNoZXIoKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZUFsbE9w
dGlvbmFsUGFyYW1ldGVycyhsb25nIGNhbGxJZCwgY29uc3QgSlNPTjo6QXJyYXkqIGluX2NvbHVt
bk5hbWVzLCBjb25zdCBTdHJpbmcqIGluX25vdGVzLCBjb25zdCBkb3VibGUqIGluX3RpbWVzdGFt
cCwgY29uc3QgSlNPTjo6T2JqZWN0KiBpbl92YWx1ZXMsIGNvbnN0IEpTT046OlZhbHVlKiBpbl9w
YXlsb2FkLCBjb25zdCBpbnQqIGluX2RhdGFiYXNlSWQsIGNvbnN0IEpTT046Ok9iamVjdCogaW5f
c3FsRXJyb3IsIGNvbnN0IFN0cmluZyogaW5fc2NyZWVuQ29sb3IsIGNvbnN0IEpTT046OkFycmF5
KiBpbl9hbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyogaW5fcHJpbnRDb2xvcikgPSAwOwot
ICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMobG9uZyBjYWxsSWQs
IGNvbnN0IEpTT046OkFycmF5JiBpbl9jb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBpbl9ub3Rl
cywgZG91YmxlIGluX3RpbWVzdGFtcCwgY29uc3QgSlNPTjo6T2JqZWN0JiBpbl92YWx1ZXMsIEpT
T046OlZhbHVlIGluX3BheWxvYWQsIGludCBpbl9kYXRhYmFzZUlkLCBjb25zdCBKU09OOjpPYmpl
Y3QmIGluX3NxbEVycm9yLCBjb25zdCBTdHJpbmcmIGluX3NjcmVlbkNvbG9yLCBjb25zdCBKU09O
OjpBcnJheSYgaW5fYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcmIGluX3ByaW50Q29sb3Ip
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhsb25n
IHByb3RvY29sX3JlcXVlc3RJZCwgUmVmUHRyPEpTT046OkFycmF5PiYmIG9wdF9jb2x1bW5OYW1l
cywgY29uc3QgU3RyaW5nJiBvcHRfbm90ZXMsIE9wdGlvbmFsPGRvdWJsZT4mJiBvcHRfdGltZXN0
YW1wLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIG9wdF92YWx1ZXMsIFJlZlB0cjxKU09OOjpWYWx1
ZT4mJiBvcHRfcGF5bG9hZCwgT3B0aW9uYWw8aW50PiYmIG9wdF9kYXRhYmFzZUlkLCBSZWZQdHI8
SlNPTjo6T2JqZWN0PiYmIG9wdF9zcWxFcnJvciwgY29uc3QgU3RyaW5nJiBvcHRfc2NyZWVuQ29s
b3IsIFJlZlB0cjxKU09OOjpBcnJheT4mJiBvcHRfYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJp
bmcmIG9wdF9wcmludENvbG9yKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVOb09wdGlv
bmFsUGFyYW1ldGVycyhsb25nIHByb3RvY29sX3JlcXVlc3RJZCwgUmVmPEpTT046OkFycmF5PiYm
IGNvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIG5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBSZWY8
SlNPTjo6T2JqZWN0PiYmIHZhbHVlcywgUmVmPEpTT046OlZhbHVlPiYmIHBheWxvYWQsIGludCBk
YXRhYmFzZUlkLCBSZWY8SlNPTjo6T2JqZWN0PiYmIHNxbEVycm9yLCBjb25zdCBTdHJpbmcmIHNj
cmVlbkNvbG9yLCBSZWY8SlNPTjo6QXJyYXk+JiYgYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJp
bmcmIHByaW50Q29sb3IpID0gMDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgpAQCAt
MTMxLDExICsxMzEsMTQgQEAgcHVibGljOgogCiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0
cy5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
Lmg+CisjaW5jbHVkZSA8dHVwbGU+CisjaW5jbHVkZSA8d3RmL0V4cGVjdGVkLmg+CisjaW5jbHVk
ZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5h
bWVzcGFjZSBJbnNwZWN0b3IgewogCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKwogCiAj
aWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiBjbGFzcyBBbHRlcm5h
dGVEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOwpAQCAtMTQzLDE1ICsxNDYsOCBAQCBjbGFzcyBB
bHRlcm5hdGVEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOwogCiBjbGFzcyBEYXRhYmFzZUJhY2tl
bmREaXNwYXRjaGVySGFuZGxlciB7CiBwdWJsaWM6Ci0gICAgLy8gTmFtZWQgYWZ0ZXIgcGFyYW1l
dGVyICdwcmludENvbG9yJyB3aGlsZSBnZW5lcmF0aW5nIGNvbW1hbmQvZXZlbnQgZXhlY3V0ZUFs
bE9wdGlvbmFsUGFyYW1ldGVycy4KLSAgICBlbnVtIGNsYXNzIFByaW50Q29sb3IgewotICAgICAg
ICBDeWFuID0gMywKLSAgICAgICAgTWFnZW50YSA9IDQsCi0gICAgICAgIFllbGxvdyA9IDUsCi0g
ICAgICAgIEJsYWNrID0gNiwKLSAgICB9OyAvLyBlbnVtIGNsYXNzIFByaW50Q29sb3IKLSAgICB2
aXJ0dWFsIHZvaWQgZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhFcnJvclN0cmluZyYsIGNv
bnN0IEpTT046OkFycmF5KiBvcHRfaW5fY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyogb3B0X2lu
X25vdGVzLCBjb25zdCBkb3VibGUqIG9wdF9pbl90aW1lc3RhbXAsIGNvbnN0IEpTT046Ok9iamVj
dCogb3B0X2luX3ZhbHVlcywgY29uc3QgSlNPTjo6VmFsdWUqIG9wdF9pbl9wYXlsb2FkLCBjb25z
dCBpbnQqIG9wdF9pbl9kYXRhYmFzZUlkLCBjb25zdCBKU09OOjpPYmplY3QqIG9wdF9pbl9zcWxF
cnJvciwgY29uc3QgU3RyaW5nKiBvcHRfaW5fc2NyZWVuQ29sb3IsIGNvbnN0IEpTT046OkFycmF5
KiBvcHRfaW5fYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcqIG9wdF9pbl9wcmludENvbG9y
LCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiYgb3B0X291dF9jb2x1bW5OYW1lcywgT3B0
aW9uYWw8U3RyaW5nPiYgb3B0X291dF9ub3RlcywgT3B0aW9uYWw8ZG91YmxlPiYgb3B0X291dF90
aW1lc3RhbXAsIE9wdGlvbmFsPEpTT046Ok9iamVjdD4mIG9wdF9vdXRfdmFsdWVzLCBPcHRpb25h
bDxKU09OOjpWYWx1ZT4mIG9wdF9vdXRfcGF5bG9hZCwgT3B0aW9uYWw8aW50PiYgb3B0X291dF9k
YXRhYmFzZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiYg
b3B0X291dF9zcWxFcnJvciwgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlD
b2xvcnMqIG9wdF9vdXRfc2NyZWVuQ29sb3IsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpE
YXRhYmFzZTo6Q29sb3JMaXN0PiYgb3B0X291dF9hbHRlcm5hdGVDb2xvcnMsIERhdGFiYXNlQmFj
a2VuZERpc3BhdGNoZXJIYW5kbGVyOjpQcmludENvbG9yKiBvcHRfb3V0X3ByaW50Q29sb3IpID0g
MDsKLSAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKEVycm9yU3Ry
aW5nJiwgY29uc3QgSlNPTjo6QXJyYXkmIGluX2NvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIGlu
X25vdGVzLCBkb3VibGUgaW5fdGltZXN0YW1wLCBjb25zdCBKU09OOjpPYmplY3QmIGluX3ZhbHVl
cywgSlNPTjo6VmFsdWUgaW5fcGF5bG9hZCwgaW50IGluX2RhdGFiYXNlSWQsIGNvbnN0IEpTT046
Ok9iamVjdCYgaW5fc3FsRXJyb3IsIGNvbnN0IFN0cmluZyYgaW5fc2NyZWVuQ29sb3IsIGNvbnN0
IEpTT046OkFycmF5JiBpbl9hbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyYgaW5fcHJpbnRD
b2xvciwgUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4mIG91dF9jb2x1bW5OYW1lcywgU3Ry
aW5nKiBvdXRfbm90ZXMsIGRvdWJsZSogb3V0X3RpbWVzdGFtcCwgSlNPTjo6T2JqZWN0KiBvdXRf
dmFsdWVzLCBKU09OOjpWYWx1ZSogb3V0X3BheWxvYWQsIGludCogb3V0X2RhdGFiYXNlSWQsIFJl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+JiBvdXRfc3FsRXJyb3Is
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzKiBvdXRfc2NyZWVu
Q29sb3IsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiYg
b3V0X2FsdGVybmF0ZUNvbG9ycywgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlBy
aW50Q29sb3IqIG91dF9wcmludENvbG9yKSA9IDA7CisgICAgdmlydHVhbCBQcm90b2NvbDo6RXJy
b3JTdHJpbmdPcjxzdGQ6OnR1cGxlPFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+IC8qIG9w
dF9jb2x1bW5OYW1lcyAqLywgU3RyaW5nIC8qIG9wdF9ub3RlcyAqLywgT3B0aW9uYWw8ZG91Ymxl
PiAvKiBvcHRfdGltZXN0YW1wICovLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiAvKiBvcHRfdmFsdWVz
ICovLCBSZWZQdHI8SlNPTjo6VmFsdWU+IC8qIG9wdF9wYXlsb2FkICovLCBPcHRpb25hbDxpbnQ+
IC8qIG9wdF9kYXRhYmFzZUlkICovLCBSZWZQdHI8UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4g
Lyogb3B0X3NxbEVycm9yICovLCBPcHRpb25hbDxQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlD
b2xvcnM+IC8qIG9wdF9zY3JlZW5Db2xvciAqLywgUmVmUHRyPFByb3RvY29sOjpEYXRhYmFzZTo6
Q29sb3JMaXN0PiAvKiBvcHRfYWx0ZXJuYXRlQ29sb3JzICovLCBTdHJpbmcgLyogb3B0X3ByaW50
Q29sb3IgKi8+PiBleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKFJlZlB0cjxKU09OOjpBcnJh
eT4mJiBvcHRfY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgb3B0X25vdGVzLCBPcHRpb25hbDxk
b3VibGU+JiYgb3B0X3RpbWVzdGFtcCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBvcHRfdmFsdWVz
LCBSZWZQdHI8SlNPTjo6VmFsdWU+JiYgb3B0X3BheWxvYWQsIE9wdGlvbmFsPGludD4mJiBvcHRf
ZGF0YWJhc2VJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBvcHRfc3FsRXJyb3IsIE9wdGlvbmFs
PFByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4mJiBvcHRfc2NyZWVuQ29sb3IsIFJl
ZlB0cjxKU09OOjpBcnJheT4mJiBvcHRfYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcmIG9w
dF9wcmludENvbG9yKSA9IDA7CisgICAgdmlydHVhbCBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxz
dGQ6OnR1cGxlPFJlZjxKU09OOjpBcnJheU9mPFN0cmluZz4+IC8qIGNvbHVtbk5hbWVzICovLCBT
dHJpbmcgLyogbm90ZXMgKi8sIGRvdWJsZSAvKiB0aW1lc3RhbXAgKi8sIFJlZjxKU09OOjpPYmpl
Y3Q+IC8qIHZhbHVlcyAqLywgUmVmPEpTT046OlZhbHVlPiAvKiBwYXlsb2FkICovLCBpbnQgLyog
ZGF0YWJhc2VJZCAqLywgUmVmPFByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IC8qIHNxbEVycm9y
ICovLCBQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMgLyogc2NyZWVuQ29sb3IgKi8s
IFJlZjxQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4gLyogYWx0ZXJuYXRlQ29sb3JzICov
LCBTdHJpbmcgLyogcHJpbnRDb2xvciAqLz4+IGV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhS
ZWY8SlNPTjo6QXJyYXk+JiYgY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgbm90ZXMsIGRvdWJs
ZSB0aW1lc3RhbXAsIFJlZjxKU09OOjpPYmplY3Q+JiYgdmFsdWVzLCBSZWY8SlNPTjo6VmFsdWU+
JiYgcGF5bG9hZCwgaW50IGRhdGFiYXNlSWQsIFJlZjxKU09OOjpPYmplY3Q+JiYgc3FsRXJyb3Is
IFByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycyBzY3JlZW5Db2xvciwgUmVmPEpTT046
OkFycmF5PiYmIGFsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nJiBwcmludENvbG9yKSA9IDA7
CiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB+RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXIoKTsKIH07CkBAIC0xNTksMTAgKzE1NSwxMCBAQCBwcm90ZWN0ZWQ6CiBjbGFzcyBEYXRhYmFz
ZUJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIFN1cHBsZW1lbnRhbEJhY2tlbmREaXNw
YXRjaGVyIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPERhdGFiYXNlQmFja2VuZERpc3BhdGNo
ZXI+IGNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYsIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyKik7Ci0gICAgdm9pZCBkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5n
JiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkgZmluYWw7CisgICAgdm9pZCBk
aXNwYXRjaChsb25nIHByb3RvY29sX3JlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBwcm90b2NvbF9t
ZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfbWVzc2FnZSkgZmluYWw7CiBwcml2
YXRlOgotICAgIHZvaWQgZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhsb25nIHJlcXVlc3RJ
ZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKLSAgICB2b2lkIGV4ZWN1dGVO
b09wdGlvbmFsUGFyYW1ldGVycyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4m
JiBwYXJhbWV0ZXJzKTsKKyAgICB2b2lkIGV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMobG9u
ZyBwcm90b2NvbF9yZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfcGFy
YW1ldGVycyk7CisgICAgdm9pZCBleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMobG9uZyBwcm90
b2NvbF9yZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfcGFyYW1ldGVy
cyk7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiBwdWJsaWM6
CiAgICAgdm9pZCBzZXRBbHRlcm5hdGVEaXNwYXRjaGVyKEFsdGVybmF0ZURhdGFiYXNlQmFja2Vu
ZERpc3BhdGNoZXIqIGFsdGVybmF0ZURpc3BhdGNoZXIpIHsgbV9hbHRlcm5hdGVEaXNwYXRjaGVy
ID0gYWx0ZXJuYXRlRGlzcGF0Y2hlcjsgfQpAQCAtMjExLDkgKzIwNyw3IEBAIHByaXZhdGU6CiAj
aW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVl
cy5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0
L0NTdHJpbmcuaD4KIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJT
KQogI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKQEAgLTIzNSw0
NyArMjI5LDM2IEBAIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OkRhdGFiYXNlQmFja2VuZERp
c3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmRECiAgICAgbV9iYWNrZW5kRGlzcGF0
Y2hlci0+cmVnaXN0ZXJEaXNwYXRjaGVyRm9yRG9tYWluKCJEYXRhYmFzZSJfcywgdGhpcyk7CiB9
CiAKLXZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0
SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpCit2
b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcHJvdG9jb2xfcmVx
dWVzdElkLCBjb25zdCBTdHJpbmcmIHByb3RvY29sX21ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4m
JiBwcm90b2NvbF9tZXNzYWdlKQogewogICAgIFJlZjxEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVy
PiBwcm90ZWN0KCp0aGlzKTsKIAotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnM7
Ci0gICAgbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3MsIHBhcmFtZXRlcnMpOworICAgIGF1
dG8gcHJvdG9jb2xfcGFyYW1ldGVycyA9IHByb3RvY29sX21lc3NhZ2UtPmdldE9iamVjdCgicGFy
YW1zIl9zKTsKIAotICAgIGlmIChtZXRob2QgPT0gImV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRl
cnMiKSB7Ci0gICAgICAgIGV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMocmVxdWVzdElkLCBX
VEZNb3ZlKHBhcmFtZXRlcnMpKTsKKyAgICBpZiAocHJvdG9jb2xfbWV0aG9kID09ICJleGVjdXRl
QWxsT3B0aW9uYWxQYXJhbWV0ZXJzIikgeworICAgICAgICBleGVjdXRlQWxsT3B0aW9uYWxQYXJh
bWV0ZXJzKHByb3RvY29sX3JlcXVlc3RJZCwgV1RGTW92ZShwcm90b2NvbF9wYXJhbWV0ZXJzKSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKG1ldGhvZCA9PSAiZXhlY3V0ZU5vT3B0
aW9uYWxQYXJhbWV0ZXJzIikgewotICAgICAgICBleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMo
cmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKKyAgICBpZiAocHJvdG9jb2xfbWV0aG9k
ID09ICJleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMiKSB7CisgICAgICAgIGV4ZWN1dGVOb09w
dGlvbmFsUGFyYW1ldGVycyhwcm90b2NvbF9yZXF1ZXN0SWQsIFdURk1vdmUocHJvdG9jb2xfcGFy
YW1ldGVycykpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbV9iYWNrZW5kRGlzcGF0
Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91
bmQsICInRGF0YWJhc2UuIiArIG1ldGhvZCArICInIHdhcyBub3QgZm91bmQiKTsKKyAgICBtX2Jh
Y2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpN
ZXRob2ROb3RGb3VuZCwgIidEYXRhYmFzZS4iICsgcHJvdG9jb2xfbWV0aG9kICsgIicgd2FzIG5v
dCBmb3VuZCIpOwogfQogCi12b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVB
bGxPcHRpb25hbFBhcmFtZXRlcnMobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+
JiYgcGFyYW1ldGVycykKK3ZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZUFs
bE9wdGlvbmFsUGFyYW1ldGVycyhsb25nIHByb3RvY29sX3JlcXVlc3RJZCwgUmVmUHRyPEpTT046
Ok9iamVjdD4mJiBwcm90b2NvbF9wYXJhbWV0ZXJzKQogewotICAgIGJvb2wgb3B0X2luX2NvbHVt
bk5hbWVzX3ZhbHVlRm91bmQgPSBmYWxzZTsKLSAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IG9wdF9p
bl9jb2x1bW5OYW1lcyA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldEFycmF5KHBhcmFtZXRlcnMu
Z2V0KCksICJjb2x1bW5OYW1lcyJfcywgJm9wdF9pbl9jb2x1bW5OYW1lc192YWx1ZUZvdW5kKTsK
LSAgICBib29sIG9wdF9pbl9ub3Rlc192YWx1ZUZvdW5kID0gZmFsc2U7Ci0gICAgU3RyaW5nIG9w
dF9pbl9ub3RlcyA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFN0cmluZyhwYXJhbWV0ZXJzLmdl
dCgpLCAibm90ZXMiX3MsICZvcHRfaW5fbm90ZXNfdmFsdWVGb3VuZCk7Ci0gICAgYm9vbCBvcHRf
aW5fdGltZXN0YW1wX3ZhbHVlRm91bmQgPSBmYWxzZTsKLSAgICBkb3VibGUgb3B0X2luX3RpbWVz
dGFtcCA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldERvdWJsZShwYXJhbWV0ZXJzLmdldCgpLCAi
dGltZXN0YW1wIl9zLCAmb3B0X2luX3RpbWVzdGFtcF92YWx1ZUZvdW5kKTsKLSAgICBib29sIG9w
dF9pbl92YWx1ZXNfdmFsdWVGb3VuZCA9IGZhbHNlOwotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+
IG9wdF9pbl92YWx1ZXMgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRPYmplY3QocGFyYW1ldGVy
cy5nZXQoKSwgInZhbHVlcyJfcywgJm9wdF9pbl92YWx1ZXNfdmFsdWVGb3VuZCk7Ci0gICAgYm9v
bCBvcHRfaW5fcGF5bG9hZF92YWx1ZUZvdW5kID0gZmFsc2U7Ci0gICAgUmVmUHRyPEpTT046OlZh
bHVlPiBvcHRfaW5fcGF5bG9hZCA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFZhbHVlKHBhcmFt
ZXRlcnMuZ2V0KCksICJwYXlsb2FkIl9zLCAmb3B0X2luX3BheWxvYWRfdmFsdWVGb3VuZCk7Ci0g
ICAgYm9vbCBvcHRfaW5fZGF0YWJhc2VJZF92YWx1ZUZvdW5kID0gZmFsc2U7Ci0gICAgaW50IG9w
dF9pbl9kYXRhYmFzZUlkID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0SW50ZWdlcihwYXJhbWV0
ZXJzLmdldCgpLCAiZGF0YWJhc2VJZCJfcywgJm9wdF9pbl9kYXRhYmFzZUlkX3ZhbHVlRm91bmQp
OwotICAgIGJvb2wgb3B0X2luX3NxbEVycm9yX3ZhbHVlRm91bmQgPSBmYWxzZTsKLSAgICBSZWZQ
dHI8SlNPTjo6T2JqZWN0PiBvcHRfaW5fc3FsRXJyb3IgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5n
ZXRPYmplY3QocGFyYW1ldGVycy5nZXQoKSwgInNxbEVycm9yIl9zLCAmb3B0X2luX3NxbEVycm9y
X3ZhbHVlRm91bmQpOwotICAgIGJvb2wgb3B0X2luX3NjcmVlbkNvbG9yX3ZhbHVlRm91bmQgPSBm
YWxzZTsKLSAgICBTdHJpbmcgb3B0X2luX3NjcmVlbkNvbG9yID0gbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+Z2V0U3RyaW5nKHBhcmFtZXRlcnMuZ2V0KCksICJzY3JlZW5Db2xvciJfcywgJm9wdF9pbl9z
Y3JlZW5Db2xvcl92YWx1ZUZvdW5kKTsKLSAgICBib29sIG9wdF9pbl9hbHRlcm5hdGVDb2xvcnNf
dmFsdWVGb3VuZCA9IGZhbHNlOwotICAgIFJlZlB0cjxKU09OOjpBcnJheT4gb3B0X2luX2FsdGVy
bmF0ZUNvbG9ycyA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldEFycmF5KHBhcmFtZXRlcnMuZ2V0
KCksICJhbHRlcm5hdGVDb2xvcnMiX3MsICZvcHRfaW5fYWx0ZXJuYXRlQ29sb3JzX3ZhbHVlRm91
bmQpOwotICAgIGJvb2wgb3B0X2luX3ByaW50Q29sb3JfdmFsdWVGb3VuZCA9IGZhbHNlOwotICAg
IFN0cmluZyBvcHRfaW5fcHJpbnRDb2xvciA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFN0cmlu
ZyhwYXJhbWV0ZXJzLmdldCgpLCAicHJpbnRDb2xvciJfcywgJm9wdF9pbl9wcmludENvbG9yX3Zh
bHVlRm91bmQpOworICAgIGF1dG8gaW5fb3B0X2NvbHVtbk5hbWVzID0gbV9iYWNrZW5kRGlzcGF0
Y2hlci0+Z2V0QXJyYXkocHJvdG9jb2xfcGFyYW1ldGVycy5nZXQoKSwgImNvbHVtbk5hbWVzIl9z
LCBmYWxzZSk7CisgICAgYXV0byBpbl9vcHRfbm90ZXMgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5n
ZXRTdHJpbmcocHJvdG9jb2xfcGFyYW1ldGVycy5nZXQoKSwgIm5vdGVzIl9zLCBmYWxzZSk7Cisg
ICAgYXV0byBpbl9vcHRfdGltZXN0YW1wID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0RG91Ymxl
KHByb3RvY29sX3BhcmFtZXRlcnMuZ2V0KCksICJ0aW1lc3RhbXAiX3MsIGZhbHNlKTsKKyAgICBh
dXRvIGluX29wdF92YWx1ZXMgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRPYmplY3QocHJvdG9j
b2xfcGFyYW1ldGVycy5nZXQoKSwgInZhbHVlcyJfcywgZmFsc2UpOworICAgIGF1dG8gaW5fb3B0
X3BheWxvYWQgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRWYWx1ZShwcm90b2NvbF9wYXJhbWV0
ZXJzLmdldCgpLCAicGF5bG9hZCJfcywgZmFsc2UpOworICAgIGF1dG8gaW5fb3B0X2RhdGFiYXNl
SWQgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRJbnRlZ2VyKHByb3RvY29sX3BhcmFtZXRlcnMu
Z2V0KCksICJkYXRhYmFzZUlkIl9zLCBmYWxzZSk7CisgICAgYXV0byBpbl9vcHRfc3FsRXJyb3Ig
PSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRPYmplY3QocHJvdG9jb2xfcGFyYW1ldGVycy5nZXQo
KSwgInNxbEVycm9yIl9zLCBmYWxzZSk7CisgICAgYXV0byBpbl9vcHRfc2NyZWVuQ29sb3JfanNv
biA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFN0cmluZyhwcm90b2NvbF9wYXJhbWV0ZXJzLmdl
dCgpLCAic2NyZWVuQ29sb3IiX3MsIGZhbHNlKTsKKyAgICBhdXRvIGluX29wdF9hbHRlcm5hdGVD
b2xvcnMgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRBcnJheShwcm90b2NvbF9wYXJhbWV0ZXJz
LmdldCgpLCAiYWx0ZXJuYXRlQ29sb3JzIl9zLCBmYWxzZSk7CisgICAgYXV0byBpbl9vcHRfcHJp
bnRDb2xvciA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFN0cmluZyhwcm90b2NvbF9wYXJhbWV0
ZXJzLmdldCgpLCAicHJpbnRDb2xvciJfcywgZmFsc2UpOwogICAgIGlmIChtX2JhY2tlbmREaXNw
YXRjaGVyLT5oYXNQcm90b2NvbEVycm9ycygpKSB7CiAgICAgICAgIG1fYmFja2VuZERpc3BhdGNo
ZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OkludmFsaWRQYXJhbXMs
ICJTb21lIGFyZ3VtZW50cyBvZiBtZXRob2QgJ0RhdGFiYXNlLmV4ZWN1dGVBbGxPcHRpb25hbFBh
cmFtZXRlcnMnIGNhbid0IGJlIHByb2Nlc3NlZCJfcyk7CiAgICAgICAgIHJldHVybjsKQEAgLTI4
Myw2NSArMjY2LDU4IEBAIHZvaWQgRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZUFs
bE9wdGlvbmFsUGFyYW1ldGVycyhsb25nIHJlcXVlc3RJZCwgUmVmCiAKICNpZiBFTkFCTEUoSU5T
UEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKICAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRj
aGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+ZXhlY3V0ZUFsbE9wdGlvbmFs
UGFyYW1ldGVycyhyZXF1ZXN0SWQsIG9wdF9pbl9jb2x1bW5OYW1lc192YWx1ZUZvdW5kID8gb3B0
X2luX2NvbHVtbk5hbWVzLmdldCgpIDogbnVsbHB0ciwgb3B0X2luX25vdGVzX3ZhbHVlRm91bmQg
PyAmb3B0X2luX25vdGVzIDogbnVsbHB0ciwgb3B0X2luX3RpbWVzdGFtcF92YWx1ZUZvdW5kID8g
Jm9wdF9pbl90aW1lc3RhbXAgOiBudWxscHRyLCBvcHRfaW5fdmFsdWVzX3ZhbHVlRm91bmQgPyBv
cHRfaW5fdmFsdWVzLmdldCgpIDogbnVsbHB0ciwgb3B0X2luX3BheWxvYWRfdmFsdWVGb3VuZCA/
IG9wdF9pbl9wYXlsb2FkLmdldCgpIDogbnVsbHB0ciwgb3B0X2luX2RhdGFiYXNlSWRfdmFsdWVG
b3VuZCA/ICZvcHRfaW5fZGF0YWJhc2VJZCA6IG51bGxwdHIsIG9wdF9pbl9zcWxFcnJvcl92YWx1
ZUZvdW5kID8gb3B0X2luX3NxbEVycm9yLmdldCgpIDogbnVsbHB0ciwgb3B0X2luX3NjcmVlbkNv
bG9yX3ZhbHVlRm91bmQgPyAmb3B0X2luX3NjcmVlbkNvbG9yIDogbnVsbHB0ciwgb3B0X2luX2Fs
dGVybmF0ZUNvbG9yc192YWx1ZUZvdW5kID8gb3B0X2luX2FsdGVybmF0ZUNvbG9ycy5nZXQoKSA6
IG51bGxwdHIsIG9wdF9pbl9wcmludENvbG9yX3ZhbHVlRm91bmQgPyAmb3B0X2luX3ByaW50Q29s
b3IgOiBudWxscHRyKTsKKyAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5leGVjdXRlQWxs
T3B0aW9uYWxQYXJhbWV0ZXJzKHByb3RvY29sX3JlcXVlc3RJZCwgV1RGTW92ZShpbl9vcHRfY29s
dW1uTmFtZXMpLCBpbl9vcHRfbm90ZXMsIFdURk1vdmUoaW5fb3B0X3RpbWVzdGFtcCksIFdURk1v
dmUoaW5fb3B0X3ZhbHVlcyksIFdURk1vdmUoaW5fb3B0X3BheWxvYWQpLCBXVEZNb3ZlKGluX29w
dF9kYXRhYmFzZUlkKSwgV1RGTW92ZShpbl9vcHRfc3FsRXJyb3IpLCBpbl9vcHRfc2NyZWVuQ29s
b3JfanNvbiwgV1RGTW92ZShpbl9vcHRfYWx0ZXJuYXRlQ29sb3JzKSwgaW5fb3B0X3ByaW50Q29s
b3IpOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1Jf
QUxURVJOQVRFX0RJU1BBVENIRVJTKQogCi0gICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVm
PEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBSZWZQ
dHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiBvdXRfY29sdW1uTmFtZXM7Ci0gICAgT3B0aW9uYWw8
U3RyaW5nPiBvdXRfbm90ZXM7Ci0gICAgT3B0aW9uYWw8ZG91YmxlPiBvdXRfdGltZXN0YW1wOwot
ICAgIE9wdGlvbmFsPEpTT046Ok9iamVjdD4gb3V0X3ZhbHVlczsKLSAgICBPcHRpb25hbDxKU09O
OjpWYWx1ZT4gb3V0X3BheWxvYWQ7Ci0gICAgT3B0aW9uYWw8aW50PiBvdXRfZGF0YWJhc2VJZDsK
LSAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yPiBvdXRfc3Fs
RXJyb3I7Ci0gICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMg
b3V0X3NjcmVlbkNvbG9yOwotICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFz
ZTo6Q29sb3JMaXN0PiBvdXRfYWx0ZXJuYXRlQ29sb3JzOwotICAgIERhdGFiYXNlQmFja2VuZERp
c3BhdGNoZXJIYW5kbGVyOjpQcmludENvbG9yIG91dF9wcmludENvbG9yOwotICAgIG1fYWdlbnQt
PmV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMoZXJyb3IsIG9wdF9pbl9jb2x1bW5OYW1lc192
YWx1ZUZvdW5kID8gb3B0X2luX2NvbHVtbk5hbWVzLmdldCgpIDogbnVsbHB0ciwgb3B0X2luX25v
dGVzX3ZhbHVlRm91bmQgPyAmb3B0X2luX25vdGVzIDogbnVsbHB0ciwgb3B0X2luX3RpbWVzdGFt
cF92YWx1ZUZvdW5kID8gJm9wdF9pbl90aW1lc3RhbXAgOiBudWxscHRyLCBvcHRfaW5fdmFsdWVz
X3ZhbHVlRm91bmQgPyBvcHRfaW5fdmFsdWVzLmdldCgpIDogbnVsbHB0ciwgb3B0X2luX3BheWxv
YWRfdmFsdWVGb3VuZCA/IG9wdF9pbl9wYXlsb2FkLmdldCgpIDogbnVsbHB0ciwgb3B0X2luX2Rh
dGFiYXNlSWRfdmFsdWVGb3VuZCA/ICZvcHRfaW5fZGF0YWJhc2VJZCA6IG51bGxwdHIsIG9wdF9p
bl9zcWxFcnJvcl92YWx1ZUZvdW5kID8gb3B0X2luX3NxbEVycm9yLmdldCgpIDogbnVsbHB0ciwg
b3B0X2luX3NjcmVlbkNvbG9yX3ZhbHVlRm91bmQgPyAmb3B0X2luX3NjcmVlbkNvbG9yIDogbnVs
bHB0ciwgb3B0X2luX2FsdGVybmF0ZUNvbG9yc192YWx1ZUZvdW5kID8gb3B0X2luX2FsdGVybmF0
ZUNvbG9ycy5nZXQoKSA6IG51bGxwdHIsIG9wdF9pbl9wcmludENvbG9yX3ZhbHVlRm91bmQgPyAm
b3B0X2luX3ByaW50Q29sb3IgOiBudWxscHRyLCBvdXRfY29sdW1uTmFtZXMsIG91dF9ub3Rlcywg
b3V0X3RpbWVzdGFtcCwgb3V0X3ZhbHVlcywgb3V0X3BheWxvYWQsIG91dF9kYXRhYmFzZUlkLCBv
dXRfc3FsRXJyb3IsIG91dF9zY3JlZW5Db2xvciwgb3V0X2FsdGVybmF0ZUNvbG9ycywgb3V0X3By
aW50Q29sb3IpOworICAgIGF1dG8gaW5fb3B0X3NjcmVlbkNvbG9yID0gUHJvdG9jb2w6OlRlc3RI
ZWxwZXJzOjpwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmlt
YXJ5Q29sb3JzPihpbl9vcHRfc2NyZWVuQ29sb3JfanNvbik7CiAKLSAgICBpZiAoIWVycm9yLmxl
bmd0aCgpKSB7Ci0gICAgICAgIGlmIChvdXRfY29sdW1uTmFtZXMpCi0gICAgICAgICAgICByZXN1
bHQtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgb3V0X2NvbHVtbk5hbWVzKTsKLSAgICAgICAg
aWYgKG91dF9ub3Rlcy5oYXNWYWx1ZSgpKQotICAgICAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmco
Im5vdGVzIl9zLCAqb3V0X25vdGVzKTsKLSAgICAgICAgaWYgKG91dF90aW1lc3RhbXAuaGFzVmFs
dWUoKSkKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsICpvdXRf
dGltZXN0YW1wKTsKLSAgICAgICAgaWYgKG91dF92YWx1ZXMuaGFzVmFsdWUoKSkKLSAgICAgICAg
ICAgIHJlc3VsdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsICpvdXRfdmFsdWVzKTsKLSAgICAgICAg
aWYgKG91dF9wYXlsb2FkLmhhc1ZhbHVlKCkpCi0gICAgICAgICAgICByZXN1bHQtPnNldFZhbHVl
KCJwYXlsb2FkIl9zLCAqb3V0X3BheWxvYWQpOwotICAgICAgICBpZiAob3V0X2RhdGFiYXNlSWQu
aGFzVmFsdWUoKSkKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0SW50ZWdlcigiZGF0YWJhc2VJZCJf
cywgKm91dF9kYXRhYmFzZUlkKTsKLSAgICAgICAgaWYgKG91dF9zcWxFcnJvcikKLSAgICAgICAg
ICAgIHJlc3VsdC0+c2V0T2JqZWN0KCJzcWxFcnJvciJfcywgb3V0X3NxbEVycm9yKTsKLSAgICAg
ICAgaWYgKG91dF9zY3JlZW5Db2xvci5oYXNWYWx1ZSgpKQotICAgICAgICAgICAgcmVzdWx0LT5z
ZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCAqb3V0X3NjcmVlbkNvbG9yKTsKLSAgICAgICAgaWYg
KG91dF9hbHRlcm5hdGVDb2xvcnMpCi0gICAgICAgICAgICByZXN1bHQtPnNldEFycmF5KCJhbHRl
cm5hdGVDb2xvcnMiX3MsIG91dF9hbHRlcm5hdGVDb2xvcnMpOwotICAgICAgICBpZiAob3V0X3By
aW50Q29sb3IuaGFzVmFsdWUoKSkKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJwcmlu
dENvbG9yIl9zLCAqb3V0X3ByaW50Q29sb3IpOworICAgIGF1dG8gcmVzdWx0ID0gbV9hZ2VudC0+
ZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVycyhXVEZNb3ZlKGluX29wdF9jb2x1bW5OYW1lcyks
IGluX29wdF9ub3RlcywgV1RGTW92ZShpbl9vcHRfdGltZXN0YW1wKSwgV1RGTW92ZShpbl9vcHRf
dmFsdWVzKSwgV1RGTW92ZShpbl9vcHRfcGF5bG9hZCksIFdURk1vdmUoaW5fb3B0X2RhdGFiYXNl
SWQpLCBXVEZNb3ZlKGluX29wdF9zcWxFcnJvciksIFdURk1vdmUoaW5fb3B0X3NjcmVlbkNvbG9y
KSwgV1RGTW92ZShpbl9vcHRfYWx0ZXJuYXRlQ29sb3JzKSwgaW5fb3B0X3ByaW50Q29sb3IpOwor
ICAgIGlmICghcmVzdWx0KSB7CisgICAgICAgIEFTU0VSVCghcmVzdWx0LmVycm9yKCkuaXNFbXB0
eSgpKTsKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihC
YWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIHJlc3VsdC5lcnJvcigpKTsKKyAgICAgICAg
cmV0dXJuOwogICAgIH0KLSAgICBpZiAoIWVycm9yLmxlbmd0aCgpKQotICAgICAgICBtX2JhY2tl
bmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdCksIGZh
bHNlKTsKLSAgICBlbHNlCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3Rv
Y29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBXVEZNb3ZlKGVycm9yKSk7
CisKKyAgICBhdXRvIFtvdXRfb3B0X2NvbHVtbk5hbWVzLCBvdXRfb3B0X25vdGVzLCBvdXRfb3B0
X3RpbWVzdGFtcCwgb3V0X29wdF92YWx1ZXMsIG91dF9vcHRfcGF5bG9hZCwgb3V0X29wdF9kYXRh
YmFzZUlkLCBvdXRfb3B0X3NxbEVycm9yLCBvdXRfb3B0X3NjcmVlbkNvbG9yLCBvdXRfb3B0X2Fs
dGVybmF0ZUNvbG9ycywgb3V0X29wdF9wcmludENvbG9yXSA9IFdURk1vdmUocmVzdWx0LnZhbHVl
KCkpOworCisgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3Jl
YXRlKCk7CisgICAgaWYgKCEhb3V0X29wdF9jb2x1bW5OYW1lcykKKyAgICAgICAgcHJvdG9jb2xf
anNvbk1lc3NhZ2UtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgb3V0X29wdF9jb2x1bW5OYW1l
cy5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICBpZiAoISFvdXRfb3B0X25vdGVzKQorICAgICAgICBw
cm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJub3RlcyJfcywgb3V0X29wdF9ub3Rlcyk7
CisgICAgaWYgKCEhb3V0X29wdF90aW1lc3RhbXApCisgICAgICAgIHByb3RvY29sX2pzb25NZXNz
YWdlLT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywgKm91dF9vcHRfdGltZXN0YW1wKTsKKyAgICBp
ZiAoISFvdXRfb3B0X3ZhbHVlcykKKyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldE9i
amVjdCgidmFsdWVzIl9zLCBvdXRfb3B0X3ZhbHVlcy5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICBp
ZiAoISFvdXRfb3B0X3BheWxvYWQpCisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRW
YWx1ZSgicGF5bG9hZCJfcywgb3V0X29wdF9wYXlsb2FkLnJlbGVhc2VOb25OdWxsKCkpOworICAg
IGlmICghIW91dF9vcHRfZGF0YWJhc2VJZCkKKyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2Ut
PnNldEludGVnZXIoImRhdGFiYXNlSWQiX3MsICpvdXRfb3B0X2RhdGFiYXNlSWQpOworICAgIGlm
ICghIW91dF9vcHRfc3FsRXJyb3IpCisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRP
YmplY3QoInNxbEVycm9yIl9zLCBvdXRfb3B0X3NxbEVycm9yLnJlbGVhc2VOb25OdWxsKCkpOwor
ICAgIGlmICghIW91dF9vcHRfc2NyZWVuQ29sb3IpCisgICAgICAgIHByb3RvY29sX2pzb25NZXNz
YWdlLT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCBQcm90b2NvbDo6VGVzdEhlbHBlcnM6Omdl
dEVudW1Db25zdGFudFZhbHVlKCpvdXRfb3B0X3NjcmVlbkNvbG9yKSk7CisgICAgaWYgKCEhb3V0
X29wdF9hbHRlcm5hdGVDb2xvcnMpCisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRB
cnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCBvdXRfb3B0X2FsdGVybmF0ZUNvbG9ycy5yZWxlYXNl
Tm9uTnVsbCgpKTsKKyAgICBpZiAoISFvdXRfb3B0X3ByaW50Q29sb3IpCisgICAgICAgIHByb3Rv
Y29sX2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoInByaW50Q29sb3IiX3MsIG91dF9vcHRfcHJpbnRD
b2xvcik7CisgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHByb3RvY29sX3Jl
cXVlc3RJZCwgV1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSksIGZhbHNlKTsKIH0KIAotdm9p
ZCBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMo
bG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycykKK3ZvaWQg
RGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKGxv
bmcgcHJvdG9jb2xfcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX3Bh
cmFtZXRlcnMpCiB7Ci0gICAgUmVmUHRyPEpTT046OkFycmF5PiBpbl9jb2x1bW5OYW1lcyA9IG1f
YmFja2VuZERpc3BhdGNoZXItPmdldEFycmF5KHBhcmFtZXRlcnMuZ2V0KCksICJjb2x1bW5OYW1l
cyJfcywgbnVsbHB0cik7Ci0gICAgU3RyaW5nIGluX25vdGVzID0gbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+Z2V0U3RyaW5nKHBhcmFtZXRlcnMuZ2V0KCksICJub3RlcyJfcywgbnVsbHB0cik7Ci0gICAg
ZG91YmxlIGluX3RpbWVzdGFtcCA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldERvdWJsZShwYXJh
bWV0ZXJzLmdldCgpLCAidGltZXN0YW1wIl9zLCBudWxscHRyKTsKLSAgICBSZWZQdHI8SlNPTjo6
T2JqZWN0PiBpbl92YWx1ZXMgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRPYmplY3QocGFyYW1l
dGVycy5nZXQoKSwgInZhbHVlcyJfcywgbnVsbHB0cik7Ci0gICAgUmVmUHRyPEpTT046OlZhbHVl
PiBpbl9wYXlsb2FkID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0VmFsdWUocGFyYW1ldGVycy5n
ZXQoKSwgInBheWxvYWQiX3MsIG51bGxwdHIpOwotICAgIGludCBpbl9kYXRhYmFzZUlkID0gbV9i
YWNrZW5kRGlzcGF0Y2hlci0+Z2V0SW50ZWdlcihwYXJhbWV0ZXJzLmdldCgpLCAiZGF0YWJhc2VJ
ZCJfcywgbnVsbHB0cik7Ci0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gaW5fc3FsRXJyb3IgPSBt
X2JhY2tlbmREaXNwYXRjaGVyLT5nZXRPYmplY3QocGFyYW1ldGVycy5nZXQoKSwgInNxbEVycm9y
Il9zLCBudWxscHRyKTsKLSAgICBTdHJpbmcgaW5fc2NyZWVuQ29sb3IgPSBtX2JhY2tlbmREaXNw
YXRjaGVyLT5nZXRTdHJpbmcocGFyYW1ldGVycy5nZXQoKSwgInNjcmVlbkNvbG9yIl9zLCBudWxs
cHRyKTsKLSAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IGluX2FsdGVybmF0ZUNvbG9ycyA9IG1fYmFj
a2VuZERpc3BhdGNoZXItPmdldEFycmF5KHBhcmFtZXRlcnMuZ2V0KCksICJhbHRlcm5hdGVDb2xv
cnMiX3MsIG51bGxwdHIpOwotICAgIFN0cmluZyBpbl9wcmludENvbG9yID0gbV9iYWNrZW5kRGlz
cGF0Y2hlci0+Z2V0U3RyaW5nKHBhcmFtZXRlcnMuZ2V0KCksICJwcmludENvbG9yIl9zLCBudWxs
cHRyKTsKKyAgICBhdXRvIGluX2NvbHVtbk5hbWVzID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0
QXJyYXkocHJvdG9jb2xfcGFyYW1ldGVycy5nZXQoKSwgImNvbHVtbk5hbWVzIl9zLCB0cnVlKTsK
KyAgICBhdXRvIGluX25vdGVzID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3RyaW5nKHByb3Rv
Y29sX3BhcmFtZXRlcnMuZ2V0KCksICJub3RlcyJfcywgdHJ1ZSk7CisgICAgYXV0byBpbl90aW1l
c3RhbXAgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXREb3VibGUocHJvdG9jb2xfcGFyYW1ldGVy
cy5nZXQoKSwgInRpbWVzdGFtcCJfcywgdHJ1ZSk7CisgICAgYXV0byBpbl92YWx1ZXMgPSBtX2Jh
Y2tlbmREaXNwYXRjaGVyLT5nZXRPYmplY3QocHJvdG9jb2xfcGFyYW1ldGVycy5nZXQoKSwgInZh
bHVlcyJfcywgdHJ1ZSk7CisgICAgYXV0byBpbl9wYXlsb2FkID0gbV9iYWNrZW5kRGlzcGF0Y2hl
ci0+Z2V0VmFsdWUocHJvdG9jb2xfcGFyYW1ldGVycy5nZXQoKSwgInBheWxvYWQiX3MsIHRydWUp
OworICAgIGF1dG8gaW5fZGF0YWJhc2VJZCA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldEludGVn
ZXIocHJvdG9jb2xfcGFyYW1ldGVycy5nZXQoKSwgImRhdGFiYXNlSWQiX3MsIHRydWUpOworICAg
IGF1dG8gaW5fc3FsRXJyb3IgPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRPYmplY3QocHJvdG9j
b2xfcGFyYW1ldGVycy5nZXQoKSwgInNxbEVycm9yIl9zLCB0cnVlKTsKKyAgICBhdXRvIGluX3Nj
cmVlbkNvbG9yX2pzb24gPSBtX2JhY2tlbmREaXNwYXRjaGVyLT5nZXRTdHJpbmcocHJvdG9jb2xf
cGFyYW1ldGVycy5nZXQoKSwgInNjcmVlbkNvbG9yIl9zLCB0cnVlKTsKKyAgICBhdXRvIGluX2Fs
dGVybmF0ZUNvbG9ycyA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldEFycmF5KHByb3RvY29sX3Bh
cmFtZXRlcnMuZ2V0KCksICJhbHRlcm5hdGVDb2xvcnMiX3MsIHRydWUpOworICAgIGF1dG8gaW5f
cHJpbnRDb2xvciA9IG1fYmFja2VuZERpc3BhdGNoZXItPmdldFN0cmluZyhwcm90b2NvbF9wYXJh
bWV0ZXJzLmdldCgpLCAicHJpbnRDb2xvciJfcywgdHJ1ZSk7CiAgICAgaWYgKG1fYmFja2VuZERp
c3BhdGNoZXItPmhhc1Byb3RvY29sRXJyb3JzKCkpIHsKICAgICAgICAgbV9iYWNrZW5kRGlzcGF0
Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFt
cywgIlNvbWUgYXJndW1lbnRzIG9mIG1ldGhvZCAnRGF0YWJhc2UuZXhlY3V0ZU5vT3B0aW9uYWxQ
YXJhbWV0ZXJzJyBjYW4ndCBiZSBwcm9jZXNzZWQiX3MpOwogICAgICAgICByZXR1cm47CkBAIC0z
NDksNDEgKzMyNSwzOCBAQCB2b2lkIERhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1dGVO
b09wdGlvbmFsUGFyYW1ldGVycyhsb25nIHJlcXVlc3RJZCwgUmVmUAogCiAjaWYgRU5BQkxFKElO
U1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAgICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0
Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmV4ZWN1dGVOb09wdGlvbmFs
UGFyYW1ldGVycyhyZXF1ZXN0SWQsICppbl9jb2x1bW5OYW1lcywgaW5fbm90ZXMsIGluX3RpbWVz
dGFtcCwgKmluX3ZhbHVlcywgKmluX3BheWxvYWQsIGluX2RhdGFiYXNlSWQsICppbl9zcWxFcnJv
ciwgaW5fc2NyZWVuQ29sb3IsICppbl9hbHRlcm5hdGVDb2xvcnMsIGluX3ByaW50Q29sb3IpOwor
ICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVy
cyhwcm90b2NvbF9yZXF1ZXN0SWQsIGluX2NvbHVtbk5hbWVzLnJlbGVhc2VOb25OdWxsKCksIGlu
X25vdGVzLCAqaW5fdGltZXN0YW1wLCBpbl92YWx1ZXMucmVsZWFzZU5vbk51bGwoKSwgaW5fcGF5
bG9hZC5yZWxlYXNlTm9uTnVsbCgpLCAqaW5fZGF0YWJhc2VJZCwgaW5fc3FsRXJyb3IucmVsZWFz
ZU5vbk51bGwoKSwgaW5fc2NyZWVuQ29sb3JfanNvbiwgaW5fYWx0ZXJuYXRlQ29sb3JzLnJlbGVh
c2VOb25OdWxsKCksIGluX3ByaW50Q29sb3IpOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2Vu
ZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogCi0gICAgRXJy
b3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2Jq
ZWN0OjpjcmVhdGUoKTsKLSAgICBSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiBvdXRfY29s
dW1uTmFtZXM7Ci0gICAgU3RyaW5nIG91dF9ub3RlczsKLSAgICBkb3VibGUgb3V0X3RpbWVzdGFt
cDsKLSAgICBKU09OOjpPYmplY3Qgb3V0X3ZhbHVlczsKLSAgICBKU09OOjpWYWx1ZSBvdXRfcGF5
bG9hZDsKLSAgICBpbnQgb3V0X2RhdGFiYXNlSWQ7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4gb3V0X3NxbEVycm9yOwotICAgIEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzIG91dF9zY3JlZW5Db2xvcjsKLSAgICBSZWZQ
dHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4gb3V0X2FsdGVybmF0
ZUNvbG9yczsKLSAgICBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UHJpbnRDb2xv
ciBvdXRfcHJpbnRDb2xvcjsKLSAgICBtX2FnZW50LT5leGVjdXRlTm9PcHRpb25hbFBhcmFtZXRl
cnMoZXJyb3IsICppbl9jb2x1bW5OYW1lcywgaW5fbm90ZXMsIGluX3RpbWVzdGFtcCwgKmluX3Zh
bHVlcywgKmluX3BheWxvYWQsIGluX2RhdGFiYXNlSWQsICppbl9zcWxFcnJvciwgaW5fc2NyZWVu
Q29sb3IsICppbl9hbHRlcm5hdGVDb2xvcnMsIGluX3ByaW50Q29sb3IsIG91dF9jb2x1bW5OYW1l
cywgJm91dF9ub3RlcywgJm91dF90aW1lc3RhbXAsIG91dF92YWx1ZXMsICZvdXRfcGF5bG9hZCwg
Jm91dF9kYXRhYmFzZUlkLCBvdXRfc3FsRXJyb3IsICZvdXRfc2NyZWVuQ29sb3IsIG91dF9hbHRl
cm5hdGVDb2xvcnMsICZvdXRfcHJpbnRDb2xvcik7Ci0KLSAgICBpZiAoIWVycm9yLmxlbmd0aCgp
KSB7Ci0gICAgICAgIHJlc3VsdC0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCBvdXRfY29sdW1u
TmFtZXMpOwotICAgICAgICByZXN1bHQtPnNldFN0cmluZygibm90ZXMiX3MsIG91dF9ub3Rlcyk7
Ci0gICAgICAgIHJlc3VsdC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsIG91dF90aW1lc3RhbXAp
OwotICAgICAgICByZXN1bHQtPnNldE9iamVjdCgidmFsdWVzIl9zLCBvdXRfdmFsdWVzKTsKLSAg
ICAgICAgcmVzdWx0LT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgb3V0X3BheWxvYWQpOwotICAgICAg
ICByZXN1bHQtPnNldEludGVnZXIoImRhdGFiYXNlSWQiX3MsIG91dF9kYXRhYmFzZUlkKTsKLSAg
ICAgICAgcmVzdWx0LT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBvdXRfc3FsRXJyb3IpOwotICAg
ICAgICByZXN1bHQtPnNldFN0cmluZygic2NyZWVuQ29sb3IiX3MsIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShvdXRfc2NyZWVuQ29sb3IpKTsK
LSAgICAgICAgcmVzdWx0LT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCBvdXRfYWx0ZXJu
YXRlQ29sb3JzKTsKLSAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoInByaW50Q29sb3IiX3MsIElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShvdXRf
cHJpbnRDb2xvcikpOworICAgIGF1dG8gaW5fc2NyZWVuQ29sb3IgPSBQcm90b2NvbDo6VGVzdEhl
bHBlcnM6OnBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1h
cnlDb2xvcnM+KGluX3NjcmVlbkNvbG9yX2pzb24pOworICAgIGlmICghaW5fc2NyZWVuQ29sb3Ip
IHsKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNr
ZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIG1ha2VTdHJpbmcoIlVua25vd24gc2NyZWVuQ29s
b3I6ICJfcywgaW5fc2NyZWVuQ29sb3JfanNvbikpOworICAgICAgICByZXR1cm47CiAgICAgfQot
ICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNl
bmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2UpOwotICAgIGVsc2UK
LSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5k
RGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKKworICAgIGF1dG8gcmVz
dWx0ID0gbV9hZ2VudC0+ZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKGluX2NvbHVtbk5hbWVz
LnJlbGVhc2VOb25OdWxsKCksIGluX25vdGVzLCAqaW5fdGltZXN0YW1wLCBpbl92YWx1ZXMucmVs
ZWFzZU5vbk51bGwoKSwgaW5fcGF5bG9hZC5yZWxlYXNlTm9uTnVsbCgpLCAqaW5fZGF0YWJhc2VJ
ZCwgaW5fc3FsRXJyb3IucmVsZWFzZU5vbk51bGwoKSwgKmluX3NjcmVlbkNvbG9yLCBpbl9hbHRl
cm5hdGVDb2xvcnMucmVsZWFzZU5vbk51bGwoKSwgaW5fcHJpbnRDb2xvcik7CisgICAgaWYgKCFy
ZXN1bHQpIHsKKyAgICAgICAgQVNTRVJUKCFyZXN1bHQuZXJyb3IoKS5pc0VtcHR5KCkpOworICAg
ICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNw
YXRjaGVyOjpTZXJ2ZXJFcnJvciwgcmVzdWx0LmVycm9yKCkpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgYXV0byBbb3V0X2NvbHVtbk5hbWVzLCBvdXRfbm90ZXMsIG91dF90aW1lc3Rh
bXAsIG91dF92YWx1ZXMsIG91dF9wYXlsb2FkLCBvdXRfZGF0YWJhc2VJZCwgb3V0X3NxbEVycm9y
LCBvdXRfc2NyZWVuQ29sb3IsIG91dF9hbHRlcm5hdGVDb2xvcnMsIG91dF9wcmludENvbG9yXSA9
IFdURk1vdmUocmVzdWx0LnZhbHVlKCkpOworCisgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2Fn
ZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNl
dEFycmF5KCJjb2x1bW5OYW1lcyJfcywgV1RGTW92ZShvdXRfY29sdW1uTmFtZXMpKTsKKyAgICBw
cm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJub3RlcyJfcywgb3V0X25vdGVzKTsKKyAg
ICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsIG91dF90aW1l
c3RhbXApOworICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRPYmplY3QoInZhbHVlcyJfcywg
V1RGTW92ZShvdXRfdmFsdWVzKSk7CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFZhbHVl
KCJwYXlsb2FkIl9zLCBXVEZNb3ZlKG91dF9wYXlsb2FkKSk7CisgICAgcHJvdG9jb2xfanNvbk1l
c3NhZ2UtPnNldEludGVnZXIoImRhdGFiYXNlSWQiX3MsIG91dF9kYXRhYmFzZUlkKTsKKyAgICBw
cm90b2NvbF9qc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJzcWxFcnJvciJfcywgV1RGTW92ZShvdXRf
c3FsRXJyb3IpKTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJzY3JlZW5D
b2xvciJfcywgUHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShvdXRf
c2NyZWVuQ29sb3IpKTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0QXJyYXkoImFsdGVy
bmF0ZUNvbG9ycyJfcywgV1RGTW92ZShvdXRfYWx0ZXJuYXRlQ29sb3JzKSk7CisgICAgcHJvdG9j
b2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygicHJpbnRDb2xvciJfcywgb3V0X3ByaW50Q29sb3Ip
OworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShwcm90b2NvbF9yZXF1ZXN0
SWQsIFdURk1vdmUocHJvdG9jb2xfanNvbk1lc3NhZ2UpLCBmYWxzZSk7CiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgpAQCAtNDI0LDYgKzM5Nyw3IEBAIHZvaWQgRGF0YWJhc2VCYWNrZW5k
RGlzcGF0Y2hlcjo6ZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcmVxdWVzdElkLCBS
ZWZQCiAKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8d3RmL0pT
T05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CkBAIC00NjcsNyArNDQxLDYg
QEAgY2xhc3MgRnJvbnRlbmRSb3V0ZXI7CiAjaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hl
cnMuaCIKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVy
Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9y
IHsKIApAQCAtNTA4LDcgKzQ4MSw5IEBAIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogI3ByYWdtYSBv
bmNlCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+
Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5o
PgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtNTMwLDcgKzUwNSw3IEBAIGVudW0g
Y2xhc3MgUHJpbWFyeUNvbG9yczsKIG5hbWVzcGFjZSBEYXRhYmFzZSB7CiAvKiBVbmlxdWUgaWRl
bnRpZmllciBvZiBEYXRhYmFzZSBvYmplY3QuICovCiB1c2luZyBEYXRhYmFzZUlkID0gaW50Owot
dXNpbmcgQ29sb3JMaXN0ID0gSlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRh
YmFzZTo6UHJpbWFyeUNvbG9ycz47Cit1c2luZyBDb2xvckxpc3QgPSBKU09OOjpBcnJheU9mPFBy
b3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz47CiB9IC8vIERhdGFiYXNlCiAvLyBFbmQg
b2YgdHlwZWRlZnMuCiAKQEAgLTU1NCw3ICs1MjksNyBAQCBlbnVtIGNsYXNzIFByaW1hcnlDb2xv
cnMgewogfTsgLy8gZW51bSBjbGFzcyBQcmltYXJ5Q29sb3JzCiAKIC8qIERhdGFiYXNlIGVycm9y
LiAqLwotY2xhc3MgRXJyb3IgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7CitjbGFzcyBFcnJv
ciBmaW5hbCA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKIHB1YmxpYzoKICAgICBlbnVtIHsK
ICAgICAgICAgTm9GaWVsZHNTZXQgPSAwLApAQCAtNTgxLDE3ICs1NTYsMTcgQEAgcHVibGljOgog
ICAgICAgICBmcmllbmQgY2xhc3MgRXJyb3I7CiAgICAgcHVibGljOgogCi0gICAgICAgIEJ1aWxk
ZXI8U1RBVEUgfCBNZXNzYWdlU2V0PiYgc2V0TWVzc2FnZShjb25zdCBTdHJpbmcmIHZhbHVlKQor
ICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTWVzc2FnZVNldD4mIHNldE1lc3NhZ2UoY29uc3QgU3Ry
aW5nJiBpbl9tZXNzYWdlKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCgh
KFNUQVRFICYgTWVzc2FnZVNldCksIHByb3BlcnR5X21lc3NhZ2VfYWxyZWFkeV9zZXQpOwotICAg
ICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibWVzc2FnZSJfcywgdmFsdWUpOworICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibWVzc2FnZSJfcywgaW5fbWVzc2FnZSk7CiAgICAg
ICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE1lc3NhZ2VTZXQ+KCk7CiAgICAgICAgIH0KIAotICAg
ICAgICBCdWlsZGVyPFNUQVRFIHwgQ29kZVNldD4mIHNldENvZGUoaW50IHZhbHVlKQorICAgICAg
ICBCdWlsZGVyPFNUQVRFIHwgQ29kZVNldD4mIHNldENvZGUoaW50IGluX2NvZGUpCiAgICAgICAg
IHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBDb2RlU2V0KSwgcHJvcGVy
dHlfY29kZV9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0SW50ZWdlcigi
Y29kZSJfcywgdmFsdWUpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldEludGVnZXIoImNvZGUi
X3MsIGluX2NvZGUpOwogICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxDb2RlU2V0PigpOwog
ICAgICAgICB9CiAKQEAgLTYzMCw3ICs2MDUsNyBAQCBPcHRpb25hbDxQcm90b2NvbEVudW1UeXBl
PiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmcoY29uc3QgU3RyaW5nJik7CiAKIC8vIEVudW1zIGlu
IHRoZSAnRGF0YWJhc2UnIERvbWFpbgogdGVtcGxhdGU8PgotT3B0aW9uYWw8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmlu
ZzxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9ycz4oY29uc3QgU3Ry
aW5nJik7CitPcHRpb25hbDxQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+IHBhcnNl
RW51bVZhbHVlRnJvbVN0cmluZzxQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+KGNv
bnN0IFN0cmluZyYpOwogCiB9IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycwogCkBAIC02ODIsOCAr
NjU3LDcgQEAgc3RydWN0IERlZmF1bHRIYXNoPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNl
OjpQcmltYXJ5Q29sb3JzPiA6IEludEhhc2g8SW5zcGUKICNpbmNsdWRlICJjb25maWcuaCIKICNp
bmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAKLSNpbmNsdWRlIDx3dGYvT3B0aW9uYWwu
aD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlv
bnMuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKQEAgLTcwOCwxNiArNjgyLDE2IEBAIFN0
cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSkgewogLy8gRW51bXMgaW4gdGhlICdE
YXRhYmFzZScgRG9tYWluCiAKIHRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5z
cGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM+KGNvbnN0IFN0cmluZyYg
cHJvdG9jb2xTdHJpbmcpCitPcHRpb25hbDxQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xv
cnM+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlD
b2xvcnM+KGNvbnN0IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcpCiB7CiAgICAgc3RhdGljIGNvbnN0
IHNpemVfdCBjb25zdGFudFZhbHVlc1tdID0gewotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3JzOjpSZWQsCi0gICAgICAgIChzaXplX3Qp
SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnM6OkdyZWVuLAotICAg
ICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29sb3Jz
OjpCbHVlLAorICAgICAgICAoc2l6ZV90KVByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9y
czo6UmVkLAorICAgICAgICAoc2l6ZV90KVByb3RvY29sOjpEYXRhYmFzZTo6UHJpbWFyeUNvbG9y
czo6R3JlZW4sCisgICAgICAgIChzaXplX3QpUHJvdG9jb2w6OkRhdGFiYXNlOjpQcmltYXJ5Q29s
b3JzOjpCbHVlLAogICAgIH07CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAzOyArK2kpCiAg
ICAgICAgIGlmIChwcm90b2NvbFN0cmluZyA9PSBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb25zdGFu
dFZhbHVlc1tpXV0pCi0gICAgICAgICAgICByZXR1cm4gKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRh
dGFiYXNlOjpQcmltYXJ5Q29sb3JzKWNvbnN0YW50VmFsdWVzW2ldOworICAgICAgICAgICAgcmV0
dXJuIChQcm90b2NvbDo6RGF0YWJhc2U6OlByaW1hcnlDb2xvcnMpY29uc3RhbnRWYWx1ZXNbaV07
CiAKICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQpAQCAtNzc0LDggKzc0OCw4IEBAIGNsYXNz
IE9iakNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEFs
dGVybmF0ZURhdGFiYXNlQmFjCiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6
CiAgICAgT2JqQ0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXIoaWQ8VGVzdFByb3Rv
Y29sRGF0YWJhc2VEb21haW5IYW5kbGVyPiBoYW5kbGVyKSB7IG1fZGVsZWdhdGUgPSBoYW5kbGVy
OyB9Ci0gICAgdm9pZCBleGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcmVxdWVzdElk
LCBjb25zdCBKU09OOjpBcnJheSogaW5fY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyogaW5fbm90
ZXMsIGNvbnN0IGRvdWJsZSogaW5fdGltZXN0YW1wLCBjb25zdCBKU09OOjpPYmplY3QqIGluX3Zh
bHVlcywgY29uc3QgSlNPTjo6VmFsdWUqIGluX3BheWxvYWQsIGNvbnN0IGludCogaW5fZGF0YWJh
c2VJZCwgY29uc3QgSlNPTjo6T2JqZWN0KiBpbl9zcWxFcnJvciwgY29uc3QgU3RyaW5nKiBpbl9z
Y3JlZW5Db2xvciwgY29uc3QgSlNPTjo6QXJyYXkqIGluX2FsdGVybmF0ZUNvbG9ycywgY29uc3Qg
U3RyaW5nKiBpbl9wcmludENvbG9yKSBmaW5hbDsKLSAgICB2b2lkIGV4ZWN1dGVOb09wdGlvbmFs
UGFyYW1ldGVycyhsb25nIHJlcXVlc3RJZCwgY29uc3QgSlNPTjo6QXJyYXkmIGluX2NvbHVtbk5h
bWVzLCBjb25zdCBTdHJpbmcmIGluX25vdGVzLCBkb3VibGUgaW5fdGltZXN0YW1wLCBjb25zdCBK
U09OOjpPYmplY3QmIGluX3ZhbHVlcywgSlNPTjo6VmFsdWUgaW5fcGF5bG9hZCwgaW50IGluX2Rh
dGFiYXNlSWQsIGNvbnN0IEpTT046Ok9iamVjdCYgaW5fc3FsRXJyb3IsIGNvbnN0IFN0cmluZyYg
aW5fc2NyZWVuQ29sb3IsIGNvbnN0IEpTT046OkFycmF5JiBpbl9hbHRlcm5hdGVDb2xvcnMsIGNv
bnN0IFN0cmluZyYgaW5fcHJpbnRDb2xvcikgZmluYWw7CisgICAgdm9pZCBleGVjdXRlQWxsT3B0
aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcHJvdG9jb2xfcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6QXJy
YXk+JiYgb3B0X2NvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIG9wdF9ub3RlcywgT3B0aW9uYWw8
ZG91YmxlPiYmIG9wdF90aW1lc3RhbXAsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgb3B0X3ZhbHVl
cywgUmVmUHRyPEpTT046OlZhbHVlPiYmIG9wdF9wYXlsb2FkLCBPcHRpb25hbDxpbnQ+JiYgb3B0
X2RhdGFiYXNlSWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgb3B0X3NxbEVycm9yLCBjb25zdCBT
dHJpbmcmIG9wdF9zY3JlZW5Db2xvciwgUmVmUHRyPEpTT046OkFycmF5PiYmIG9wdF9hbHRlcm5h
dGVDb2xvcnMsIGNvbnN0IFN0cmluZyYgb3B0X3ByaW50Q29sb3IpIGZpbmFsOworICAgIHZvaWQg
ZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcHJvdG9jb2xfcmVxdWVzdElkLCBSZWY8
SlNPTjo6QXJyYXk+JiYgY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgbm90ZXMsIGRvdWJsZSB0
aW1lc3RhbXAsIFJlZjxKU09OOjpPYmplY3Q+JiYgdmFsdWVzLCBSZWY8SlNPTjo6VmFsdWU+JiYg
cGF5bG9hZCwgaW50IGRhdGFiYXNlSWQsIFJlZjxKU09OOjpPYmplY3Q+JiYgc3FsRXJyb3IsIGNv
bnN0IFN0cmluZyYgc2NyZWVuQ29sb3IsIFJlZjxKU09OOjpBcnJheT4mJiBhbHRlcm5hdGVDb2xv
cnMsIGNvbnN0IFN0cmluZyYgcHJpbnRDb2xvcikgZmluYWw7CiBwcml2YXRlOgogICAgIFJldGFp
blB0cjxpZDxUZXN0UHJvdG9jb2xEYXRhYmFzZURvbWFpbkhhbmRsZXI+PiBtX2RlbGVnYXRlOwog
fTsKQEAgLTgyMywxMzcgKzc5NywxMzUgQEAgcHJpdmF0ZToKIAogbmFtZXNwYWNlIEluc3BlY3Rv
ciB7CiAKLXZvaWQgT2JqQ0luc3BlY3RvckRhdGFiYXNlQmFja2VuZERpc3BhdGNoZXI6OmV4ZWN1
dGVBbGxPcHRpb25hbFBhcmFtZXRlcnMobG9uZyByZXF1ZXN0SWQsIGNvbnN0IEpTT046OkFycmF5
KiBpbl9jb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nKiBpbl9ub3RlcywgY29uc3QgZG91YmxlKiBp
bl90aW1lc3RhbXAsIGNvbnN0IEpTT046Ok9iamVjdCogaW5fdmFsdWVzLCBjb25zdCBKU09OOjpW
YWx1ZSogaW5fcGF5bG9hZCwgY29uc3QgaW50KiBpbl9kYXRhYmFzZUlkLCBjb25zdCBKU09OOjpP
YmplY3QqIGluX3NxbEVycm9yLCBjb25zdCBTdHJpbmcqIGluX3NjcmVlbkNvbG9yLCBjb25zdCBK
U09OOjpBcnJheSogaW5fYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBTdHJpbmcqIGluX3ByaW50Q29s
b3IpCit2b2lkIE9iakNJbnNwZWN0b3JEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVyOjpleGVjdXRl
QWxsT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcHJvdG9jb2xfcmVxdWVzdElkLCBSZWZQdHI8SlNP
Tjo6QXJyYXk+JiYgaW5fb3B0X2NvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIGluX29wdF9ub3Rl
cywgT3B0aW9uYWw8ZG91YmxlPiYmIGluX29wdF90aW1lc3RhbXAsIFJlZlB0cjxKU09OOjpPYmpl
Y3Q+JiYgaW5fb3B0X3ZhbHVlcywgUmVmUHRyPEpTT046OlZhbHVlPiYmIGluX29wdF9wYXlsb2Fk
LCBPcHRpb25hbDxpbnQ+JiYgaW5fb3B0X2RhdGFiYXNlSWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+
JiYgaW5fb3B0X3NxbEVycm9yLCBjb25zdCBTdHJpbmcmIGluX29wdF9zY3JlZW5Db2xvciwgUmVm
UHRyPEpTT046OkFycmF5PiYmIGluX29wdF9hbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyYg
aW5fb3B0X3ByaW50Q29sb3IpCiB7CiAgICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25kc1RvU2Vs
ZWN0b3I6QHNlbGVjdG9yKGV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNXaXRoRXJyb3JDYWxs
YmFjazpzdWNjZXNzQ2FsbGJhY2s6Y29sdW1uTmFtZXM6bm90ZXM6dGltZXN0YW1wOnZhbHVlczpw
YXlsb2FkOmRhdGFiYXNlSWQ6c3FsRXJyb3I6c2NyZWVuQ29sb3I6YWx0ZXJuYXRlQ29sb3JzOnBy
aW50Q29sb3I6KV0pIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9j
b2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidE
YXRhYmFzZS5leGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzJyB3YXMgbm90IGZvdW5kIl9zKTsK
KyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2Nv
bF9yZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEYXRhYmFz
ZS5leGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzJyB3YXMgbm90IGZvdW5kIl9zKTsKICAgICAg
ICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAogICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikg
ewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVl
c3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CisgICAgICAgIGJh
Y2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocHJvdG9jb2xfcmVxdWVzdElk
LCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKICAgICAgICAgYmFja2Vu
ZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKICAgICB9OwogCi0gICAgaWQgc3Vj
Y2Vzc0NhbGxiYWNrID0gXihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKipjb2x1bW5OYW1lcywgTlNT
dHJpbmcgKipub3RlcywgZG91YmxlICp0aW1lc3RhbXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAq
KnZhbHVlcywgUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqcGF5bG9hZCwgaW50ICpkYXRhYmFzZUlk
LCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoqc3FsRXJyb3IsIFRlc3RQcm90b2NvbERhdGFi
YXNlUHJpbWFyeUNvbG9ycyAqc2NyZWVuQ29sb3IsIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKmFs
dGVybmF0ZUNvbG9ycywgVGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJh
bWV0ZXJzUHJpbnRDb2xvciAqcHJpbnRDb2xvcikgewotICAgICAgICBSZWY8SlNPTjo6T2JqZWN0
PiByZXN1bHRPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgICAgICBUSFJPV19F
WENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIoY29sdW1uTmFtZXMsIEAiY29sdW1u
TmFtZXMiKTsKLSAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1F
VEVSKG5vdGVzLCBAIm5vdGVzIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09Q
VElPTkFMX1BBUkFNRVRFUih2YWx1ZXMsIEAidmFsdWVzIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQ
VElPTl9GT1JfQkFEX09QVElPTkFMX1BBUkFNRVRFUihwYXlsb2FkLCBAInBheWxvYWQiKTsKLSAg
ICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1FVEVSKHNxbEVycm9y
LCBAInNxbEVycm9yIik7Ci0gICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFM
X1BBUkFNRVRFUihhbHRlcm5hdGVDb2xvcnMsIEAiYWx0ZXJuYXRlQ29sb3JzIik7Ci0gICAgICAg
IGlmIChjb2x1bW5OYW1lcykKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0QXJyYXkoImNv
bHVtbk5hbWVzIl9zLCB0b0pTT05TdHJpbmdBcnJheSgqY29sdW1uTmFtZXMpKTsKLSAgICAgICAg
aWYgKG5vdGVzKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoIm5vdGVzIl9z
LCAqbm90ZXMpOwotICAgICAgICBpZiAodGltZXN0YW1wKQotICAgICAgICAgICAgcmVzdWx0T2Jq
ZWN0LT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywgKnRpbWVzdGFtcCk7Ci0gICAgICAgIGlmICh2
YWx1ZXMpCi0gICAgICAgICAgICByZXN1bHRPYmplY3QtPnNldE9iamVjdCgidmFsdWVzIl9zLCBb
KnZhbHVlcyB0b0pTT05PYmplY3RdKTsKLSAgICAgICAgaWYgKHBheWxvYWQpCi0gICAgICAgICAg
ICByZXN1bHRPYmplY3QtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCBbKnBheWxvYWQgdG9KU09OT2Jq
ZWN0XSk7Ci0gICAgICAgIGlmIChkYXRhYmFzZUlkKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0
LT5zZXRJbnRlZ2VyKCJkYXRhYmFzZUlkIl9zLCAqZGF0YWJhc2VJZCk7Ci0gICAgICAgIGlmIChz
cWxFcnJvcikKLSAgICAgICAgICAgIHJlc3VsdE9iamVjdC0+c2V0T2JqZWN0KCJzcWxFcnJvciJf
cywgWypzcWxFcnJvciB0b0pTT05PYmplY3RdKTsKLSAgICAgICAgaWYgKHNjcmVlbkNvbG9yKQot
ICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCB0b1By
b3RvY29sU3RyaW5nKCpzY3JlZW5Db2xvcikpOwotICAgICAgICBpZiAoYWx0ZXJuYXRlQ29sb3Jz
KQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9z
LCB0b0pTT05TdHJpbmdBcnJheSgqYWx0ZXJuYXRlQ29sb3JzKSk7Ci0gICAgICAgIGlmIChwcmlu
dENvbG9yKQotICAgICAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoInByaW50Q29sb3Ii
X3MsIHRvUHJvdG9jb2xTdHJpbmcoKnByaW50Q29sb3IpKTsKLSAgICAgICAgYmFja2VuZERpc3Bh
dGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHRPYmplY3QpLCBm
YWxzZSk7CisgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8g
KipvdXRfb3B0X2NvbHVtbk5hbWVzLCBOU1N0cmluZyAqKm91dF9vcHRfbm90ZXMsIGRvdWJsZSAq
b3V0X29wdF90aW1lc3RhbXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqKm91dF9vcHRfdmFsdWVz
LCBSV0lQcm90b2NvbEpTT05PYmplY3QgKipvdXRfb3B0X3BheWxvYWQsIGludCAqb3V0X29wdF9k
YXRhYmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUVycm9yICoqb3V0X29wdF9zcWxFcnJvciwg
VGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzICpvdXRfb3B0X3NjcmVlbkNvbG9yLCBO
U0FycmF5Lyo8TlNTdHJpbmc+Ki8gKipvdXRfb3B0X2FsdGVybmF0ZUNvbG9ycywgVGVzdFByb3Rv
Y29sRGF0YWJhc2UoYW5vbnltb3VzKSAqb3V0X29wdF9wcmludENvbG9yKSB7CisgICAgICAgIGF1
dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgICAg
ICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIob3V0X29wdF9jb2x1
bW5OYW1lcywgQCJjb2x1bW5OYW1lcyIpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JB
RF9PUFRJT05BTF9QQVJBTUVURVIob3V0X29wdF9ub3RlcywgQCJub3RlcyIpOworICAgICAgICBU
SFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIob3V0X29wdF92YWx1ZXMs
IEAidmFsdWVzIik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfQkFEX09QVElPTkFMX1BB
UkFNRVRFUihvdXRfb3B0X3BheWxvYWQsIEAicGF5bG9hZCIpOworICAgICAgICBUSFJPV19FWENF
UFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIob3V0X29wdF9zcWxFcnJvciwgQCJzcWxF
cnJvciIpOworICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVU
RVIob3V0X29wdF9hbHRlcm5hdGVDb2xvcnMsIEAiYWx0ZXJuYXRlQ29sb3JzIik7CisgICAgICAg
IGlmICghIW91dF9vcHRfY29sdW1uTmFtZXMpCisgICAgICAgICAgICBwcm90b2NvbF9qc29uTWVz
c2FnZS0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCB0b0pTT05TdHJpbmdBcnJheSgqb3V0X29w
dF9jb2x1bW5OYW1lcykpOworICAgICAgICBpZiAoISFvdXRfb3B0X25vdGVzKQorICAgICAgICAg
ICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygibm90ZXMiX3MsICpvdXRfb3B0X25v
dGVzKTsKKyAgICAgICAgaWYgKCEhb3V0X29wdF90aW1lc3RhbXApCisgICAgICAgICAgICBwcm90
b2NvbF9qc29uTWVzc2FnZS0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsICpvdXRfb3B0X3RpbWVz
dGFtcCk7CisgICAgICAgIGlmICghIW91dF9vcHRfdmFsdWVzKQorICAgICAgICAgICAgcHJvdG9j
b2xfanNvbk1lc3NhZ2UtPnNldE9iamVjdCgidmFsdWVzIl9zLCBbKm91dF9vcHRfdmFsdWVzIHRv
SlNPTk9iamVjdF0pOworICAgICAgICBpZiAoISFvdXRfb3B0X3BheWxvYWQpCisgICAgICAgICAg
ICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0VmFsdWUoInBheWxvYWQiX3MsIFsqb3V0X29wdF9w
YXlsb2FkIHRvSlNPTk9iamVjdF0pOworICAgICAgICBpZiAoISFvdXRfb3B0X2RhdGFiYXNlSWQp
CisgICAgICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0SW50ZWdlcigiZGF0YWJhc2VJ
ZCJfcywgKm91dF9vcHRfZGF0YWJhc2VJZCk7CisgICAgICAgIGlmICghIW91dF9vcHRfc3FsRXJy
b3IpCisgICAgICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJzcWxFcnJv
ciJfcywgWypvdXRfb3B0X3NxbEVycm9yIHRvSlNPTk9iamVjdF0pOworICAgICAgICBpZiAoISFv
dXRfb3B0X3NjcmVlbkNvbG9yKQorICAgICAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNl
dFN0cmluZygic2NyZWVuQ29sb3IiX3MsIHRvUHJvdG9jb2xTdHJpbmcoKm91dF9vcHRfc2NyZWVu
Q29sb3IpKTsKKyAgICAgICAgaWYgKCEhb3V0X29wdF9hbHRlcm5hdGVDb2xvcnMpCisgICAgICAg
ICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0QXJyYXkoImFsdGVybmF0ZUNvbG9ycyJfcywg
dG9KU09OU3RyaW5nQXJyYXkoKm91dF9vcHRfYWx0ZXJuYXRlQ29sb3JzKSk7CisgICAgICAgIGlm
ICghIW91dF9vcHRfcHJpbnRDb2xvcikKKyAgICAgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdl
LT5zZXRTdHJpbmcoInByaW50Q29sb3IiX3MsIHRvUHJvdG9jb2xTdHJpbmcoKm91dF9vcHRfcHJp
bnRDb2xvcikpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocHJv
dG9jb2xfcmVxdWVzdElkLCBXVEZNb3ZlKHByb3RvY29sX2pzb25NZXNzYWdlKSwgZmFsc2UpOwog
ICAgIH07CiAKLSAgICBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKm9faW5fY29sdW1uTmFtZXM7Ci0g
ICAgaWYgKGluX2NvbHVtbk5hbWVzKQotICAgICAgICBvX2luX2NvbHVtbk5hbWVzID0gdG9PYmpD
U3RyaW5nQXJyYXkoaW5fY29sdW1uTmFtZXMpOwotICAgIE5TU3RyaW5nICpvX2luX25vdGVzOwot
ICAgIGlmIChpbl9ub3RlcykKLSAgICAgICAgb19pbl9ub3RlcyA9ICppbl9ub3RlczsKLSAgICBk
b3VibGUgb19pbl90aW1lc3RhbXA7Ci0gICAgaWYgKGluX3RpbWVzdGFtcCkKLSAgICAgICAgb19p
bl90aW1lc3RhbXAgPSAqaW5fdGltZXN0YW1wOwotICAgIFJXSVByb3RvY29sSlNPTk9iamVjdCAq
b19pbl92YWx1ZXM7Ci0gICAgaWYgKGluX3ZhbHVlcykKLSAgICAgICAgb19pbl92YWx1ZXMgPSBb
W1tSV0lQcm90b2NvbEpTT05PYmplY3QgYWxsb2NdIGluaXRXaXRoSlNPTk9iamVjdDppbl92YWx1
ZXNdIGF1dG9yZWxlYXNlXTsKLSAgICBSV0lQcm90b2NvbEpTT05PYmplY3QgKm9faW5fcGF5bG9h
ZDsKLSAgICBpZiAoaW5fcGF5bG9hZCkKLSAgICAgICAgb19pbl9wYXlsb2FkID0gW1tbUldJUHJv
dG9jb2xKU09OT2JqZWN0IGFsbG9jXSBpbml0V2l0aEpTT05PYmplY3Q6aW5fcGF5bG9hZF0gYXV0
b3JlbGVhc2VdOwotICAgIGludCBvX2luX2RhdGFiYXNlSWQ7Ci0gICAgaWYgKGluX2RhdGFiYXNl
SWQpCi0gICAgICAgIG9faW5fZGF0YWJhc2VJZCA9ICppbl9kYXRhYmFzZUlkOwotICAgIFRlc3RQ
cm90b2NvbERhdGFiYXNlRXJyb3IgKm9faW5fc3FsRXJyb3I7Ci0gICAgaWYgKGluX3NxbEVycm9y
KQotICAgICAgICBvX2luX3NxbEVycm9yID0gW1tbVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciBh
bGxvY10gaW5pdFdpdGhKU09OT2JqZWN0OmluX3NxbEVycm9yXSBhdXRvcmVsZWFzZV07Ci0gICAg
T3B0aW9uYWw8VGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzPiBvX2luX3NjcmVlbkNv
bG9yOwotICAgIGlmIChpbl9zY3JlZW5Db2xvcikKLSAgICAgICAgb19pbl9zY3JlZW5Db2xvciA9
IGZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnM+KCpp
bl9zY3JlZW5Db2xvcik7Ci0gICAgTlNBcnJheS8qPE5TU3RyaW5nPiovICpvX2luX2FsdGVybmF0
ZUNvbG9yczsKLSAgICBpZiAoaW5fYWx0ZXJuYXRlQ29sb3JzKQotICAgICAgICBvX2luX2FsdGVy
bmF0ZUNvbG9ycyA9IHRvT2JqQ1N0cmluZ0FycmF5KGluX2FsdGVybmF0ZUNvbG9ycyk7Ci0gICAg
T3B0aW9uYWw8VGVzdFByb3RvY29sRGF0YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJz
UHJpbnRDb2xvcj4gb19pbl9wcmludENvbG9yOwotICAgIGlmIChpbl9wcmludENvbG9yKQotICAg
ICAgICBvX2luX3ByaW50Q29sb3IgPSBmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sRGF0
YWJhc2VFeGVjdXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzUHJpbnRDb2xvcj4oKmluX3ByaW50Q29s
b3IpOwotCi0gICAgW21fZGVsZWdhdGUgZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1dpdGhF
cnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFj
ayBjb2x1bW5OYW1lczooaW5fY29sdW1uTmFtZXMgPyAmb19pbl9jb2x1bW5OYW1lcyA6IG5pbCkg
bm90ZXM6KGluX25vdGVzID8gJm9faW5fbm90ZXMgOiBuaWwpIHRpbWVzdGFtcDooaW5fdGltZXN0
YW1wID8gJm9faW5fdGltZXN0YW1wIDogbmlsKSB2YWx1ZXM6KGluX3ZhbHVlcyA/ICZvX2luX3Zh
bHVlcyA6IG5pbCkgcGF5bG9hZDooaW5fcGF5bG9hZCA/ICZvX2luX3BheWxvYWQgOiBuaWwpIGRh
dGFiYXNlSWQ6KGluX2RhdGFiYXNlSWQgPyAmb19pbl9kYXRhYmFzZUlkIDogbmlsKSBzcWxFcnJv
cjooaW5fc3FsRXJyb3IgPyAmb19pbl9zcWxFcnJvciA6IG5pbCkgc2NyZWVuQ29sb3I6KGluX3Nj
cmVlbkNvbG9yID8gJm9faW5fc2NyZWVuQ29sb3IudmFsdWUoKSA6IG5pbCkgYWx0ZXJuYXRlQ29s
b3JzOihpbl9hbHRlcm5hdGVDb2xvcnMgPyAmb19pbl9hbHRlcm5hdGVDb2xvcnMgOiBuaWwpIHBy
aW50Q29sb3I6KGluX3ByaW50Q29sb3IgPyAmb19pbl9wcmludENvbG9yLnZhbHVlKCkgOiBuaWwp
XTsKKyAgICBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKm9faW5fb3B0X2NvbHVtbk5hbWVzOworICAg
IGlmICghIWluX29wdF9jb2x1bW5OYW1lcykKKyAgICAgICAgb19pbl9vcHRfY29sdW1uTmFtZXMg
PSB0b09iakNTdHJpbmdBcnJheShpbl9vcHRfY29sdW1uTmFtZXMucmVsZWFzZU5vbk51bGwoKSk7
CisgICAgTlNTdHJpbmcgKm9faW5fb3B0X25vdGVzOworICAgIGlmICghIWluX29wdF9ub3RlcykK
KyAgICAgICAgb19pbl9vcHRfbm90ZXMgPSBpbl9vcHRfbm90ZXM7CisgICAgZG91YmxlIG9faW5f
b3B0X3RpbWVzdGFtcDsKKyAgICBpZiAoISFpbl9vcHRfdGltZXN0YW1wKQorICAgICAgICBvX2lu
X29wdF90aW1lc3RhbXAgPSAqaW5fb3B0X3RpbWVzdGFtcDsKKyAgICBSV0lQcm90b2NvbEpTT05P
YmplY3QgKm9faW5fb3B0X3ZhbHVlczsKKyAgICBpZiAoISFpbl9vcHRfdmFsdWVzKQorICAgICAg
ICBvX2luX29wdF92YWx1ZXMgPSBbW1tSV0lQcm90b2NvbEpTT05PYmplY3QgYWxsb2NdIGluaXRX
aXRoSlNPTk9iamVjdDppbl9vcHRfdmFsdWVzLnJlbGVhc2VOb25OdWxsKCldIGF1dG9yZWxlYXNl
XTsKKyAgICBSV0lQcm90b2NvbEpTT05PYmplY3QgKm9faW5fb3B0X3BheWxvYWQ7CisgICAgaWYg
KCEhaW5fb3B0X3BheWxvYWQpCisgICAgICAgIG9faW5fb3B0X3BheWxvYWQgPSBbW1tSV0lQcm90
b2NvbEpTT05PYmplY3QgYWxsb2NdIGluaXRXaXRoSlNPTk9iamVjdDppbl9vcHRfcGF5bG9hZC5y
ZWxlYXNlTm9uTnVsbCgpXSBhdXRvcmVsZWFzZV07CisgICAgaW50IG9faW5fb3B0X2RhdGFiYXNl
SWQ7CisgICAgaWYgKCEhaW5fb3B0X2RhdGFiYXNlSWQpCisgICAgICAgIG9faW5fb3B0X2RhdGFi
YXNlSWQgPSAqaW5fb3B0X2RhdGFiYXNlSWQ7CisgICAgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJv
ciAqb19pbl9vcHRfc3FsRXJyb3I7CisgICAgaWYgKCEhaW5fb3B0X3NxbEVycm9yKQorICAgICAg
ICBvX2luX29wdF9zcWxFcnJvciA9IFtbW1Rlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgYWxsb2Nd
IGluaXRXaXRoSlNPTk9iamVjdDppbl9vcHRfc3FsRXJyb3IucmVsZWFzZU5vbk51bGwoKV0gYXV0
b3JlbGVhc2VdOworICAgIE9wdGlvbmFsPFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9y
cz4gb19pbl9vcHRfc2NyZWVuQ29sb3I7CisgICAgaWYgKCEhaW5fb3B0X3NjcmVlbkNvbG9yKQor
ICAgICAgICBvX2luX29wdF9zY3JlZW5Db2xvciA9IGZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJv
dG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnM+KGluX29wdF9zY3JlZW5Db2xvcik7CisgICAgTlNB
cnJheS8qPE5TU3RyaW5nPiovICpvX2luX29wdF9hbHRlcm5hdGVDb2xvcnM7CisgICAgaWYgKCEh
aW5fb3B0X2FsdGVybmF0ZUNvbG9ycykKKyAgICAgICAgb19pbl9vcHRfYWx0ZXJuYXRlQ29sb3Jz
ID0gdG9PYmpDU3RyaW5nQXJyYXkoaW5fb3B0X2FsdGVybmF0ZUNvbG9ycy5yZWxlYXNlTm9uTnVs
bCgpKTsKKyAgICBPcHRpb25hbDxUZXN0UHJvdG9jb2xEYXRhYmFzZShhbm9ueW1vdXMpPiBvX2lu
X29wdF9wcmludENvbG9yOworICAgIGlmICghIWluX29wdF9wcmludENvbG9yKQorICAgICAgICBv
X2luX29wdF9wcmludENvbG9yID0gZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbERhdGFi
YXNlKGFub255bW91cyk+KGluX29wdF9wcmludENvbG9yKTsKKyAgICBbbV9kZWxlZ2F0ZSBleGVj
dXRlQWxsT3B0aW9uYWxQYXJhbWV0ZXJzV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBz
dWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrIGNvbHVtbk5hbWVzOighIWluX29wdF9jb2x1
bW5OYW1lcyA/ICZvX2luX29wdF9jb2x1bW5OYW1lcyA6IG5pbCkgbm90ZXM6KCEhaW5fb3B0X25v
dGVzID8gJm9faW5fb3B0X25vdGVzIDogbmlsKSB0aW1lc3RhbXA6KCEhaW5fb3B0X3RpbWVzdGFt
cCA/ICZvX2luX29wdF90aW1lc3RhbXAgOiBuaWwpIHZhbHVlczooISFpbl9vcHRfdmFsdWVzID8g
Jm9faW5fb3B0X3ZhbHVlcyA6IG5pbCkgcGF5bG9hZDooISFpbl9vcHRfcGF5bG9hZCA/ICZvX2lu
X29wdF9wYXlsb2FkIDogbmlsKSBkYXRhYmFzZUlkOighIWluX29wdF9kYXRhYmFzZUlkID8gJm9f
aW5fb3B0X2RhdGFiYXNlSWQgOiBuaWwpIHNxbEVycm9yOighIWluX29wdF9zcWxFcnJvciA/ICZv
X2luX29wdF9zcWxFcnJvciA6IG5pbCkgc2NyZWVuQ29sb3I6KCEhaW5fb3B0X3NjcmVlbkNvbG9y
ID8gJm9faW5fb3B0X3NjcmVlbkNvbG9yLnZhbHVlKCkgOiBuaWwpIGFsdGVybmF0ZUNvbG9yczoo
ISFpbl9vcHRfYWx0ZXJuYXRlQ29sb3JzID8gJm9faW5fb3B0X2FsdGVybmF0ZUNvbG9ycyA6IG5p
bCkgcHJpbnRDb2xvcjooISFpbl9vcHRfcHJpbnRDb2xvciA/ICZvX2luX29wdF9wcmludENvbG9y
LnZhbHVlKCkgOiBuaWwpXTsKIH0KIAotdm9pZCBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5k
RGlzcGF0Y2hlcjo6ZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcmVxdWVzdElkLCBj
b25zdCBKU09OOjpBcnJheSYgaW5fY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgaW5fbm90ZXMs
IGRvdWJsZSBpbl90aW1lc3RhbXAsIGNvbnN0IEpTT046Ok9iamVjdCYgaW5fdmFsdWVzLCBKU09O
OjpWYWx1ZSBpbl9wYXlsb2FkLCBpbnQgaW5fZGF0YWJhc2VJZCwgY29uc3QgSlNPTjo6T2JqZWN0
JiBpbl9zcWxFcnJvciwgY29uc3QgU3RyaW5nJiBpbl9zY3JlZW5Db2xvciwgY29uc3QgSlNPTjo6
QXJyYXkmIGluX2FsdGVybmF0ZUNvbG9ycywgY29uc3QgU3RyaW5nJiBpbl9wcmludENvbG9yKQor
dm9pZCBPYmpDSW5zcGVjdG9yRGF0YWJhc2VCYWNrZW5kRGlzcGF0Y2hlcjo6ZXhlY3V0ZU5vT3B0
aW9uYWxQYXJhbWV0ZXJzKGxvbmcgcHJvdG9jb2xfcmVxdWVzdElkLCBSZWY8SlNPTjo6QXJyYXk+
JiYgaW5fY29sdW1uTmFtZXMsIGNvbnN0IFN0cmluZyYgaW5fbm90ZXMsIGRvdWJsZSBpbl90aW1l
c3RhbXAsIFJlZjxKU09OOjpPYmplY3Q+JiYgaW5fdmFsdWVzLCBSZWY8SlNPTjo6VmFsdWU+JiYg
aW5fcGF5bG9hZCwgaW50IGluX2RhdGFiYXNlSWQsIFJlZjxKU09OOjpPYmplY3Q+JiYgaW5fc3Fs
RXJyb3IsIGNvbnN0IFN0cmluZyYgaW5fc2NyZWVuQ29sb3IsIFJlZjxKU09OOjpBcnJheT4mJiBp
bl9hbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyYgaW5fcHJpbnRDb2xvcikKIHsKICAgICBp
ZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoZXhlY3V0ZU5vT3B0
aW9uYWxQYXJhbWV0ZXJzV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOmNvbHVtbk5h
bWVzOm5vdGVzOnRpbWVzdGFtcDp2YWx1ZXM6cGF5bG9hZDpkYXRhYmFzZUlkOnNxbEVycm9yOnNj
cmVlbkNvbG9yOmFsdGVybmF0ZUNvbG9yczpwcmludENvbG9yOildKSB7Ci0gICAgICAgIGJhY2tl
bmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlz
cGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRGF0YWJhc2UuZXhlY3V0ZU5vT3B0aW9uYWxQYXJh
bWV0ZXJzJyB3YXMgbm90IGZvdW5kIl9zKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+
cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9yZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVy
OjpNZXRob2ROb3RGb3VuZCwgIidEYXRhYmFzZS5leGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMn
IHdhcyBub3QgZm91bmQiX3MpOwogICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVu
ZGluZ0Vycm9ycygpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWQgZXJyb3JDYWxs
YmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCkt
PnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVy
RXJyb3IsIGVycm9yKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9j
b2xFcnJvcihwcm90b2NvbF9yZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJv
ciwgZXJyb3IpOwogICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9y
cygpOwogICAgIH07CiAKLSAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeKE5TQXJyYXkvKjxOU1N0
cmluZz4qLyAqY29sdW1uTmFtZXMsIE5TU3RyaW5nICpub3RlcywgZG91YmxlIHRpbWVzdGFtcCwg
UldJUHJvdG9jb2xKU09OT2JqZWN0ICp2YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqcGF5
bG9hZCwgaW50IGRhdGFiYXNlSWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKnNxbEVycm9y
LCBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgc2NyZWVuQ29sb3IsIE5TQXJyYXkv
KjxOU1N0cmluZz4qLyAqYWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1
dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3IgcHJpbnRDb2xvcikgewotICAgICAgICBS
ZWY8SlNPTjo6T2JqZWN0PiByZXN1bHRPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwot
ICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihjb2x1bW5OYW1l
cywgQCJjb2x1bW5OYW1lcyIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVE
X1BBUkFNRVRFUihub3RlcywgQCJub3RlcyIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9S
X1JFUVVJUkVEX1BBUkFNRVRFUih2YWx1ZXMsIEAidmFsdWVzIik7Ci0gICAgICAgIFRIUk9XX0VY
Q0VQVElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKHBheWxvYWQsIEAicGF5bG9hZCIpOwotICAg
ICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihzcWxFcnJvciwgQCJz
cWxFcnJvciIpOwotICAgICAgICBUSFJPV19FWENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRF
UihhbHRlcm5hdGVDb2xvcnMsIEAiYWx0ZXJuYXRlQ29sb3JzIik7Ci0gICAgICAgIHJlc3VsdE9i
amVjdC0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCB0b0pTT05TdHJpbmdBcnJheShjb2x1bW5O
YW1lcykpOwotICAgICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZygibm90ZXMiX3MsIG5vdGVz
KTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywgdGltZXN0
YW1wKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRPYmplY3QoInZhbHVlcyJfcywgW3ZhbHVl
cyB0b0pTT05PYmplY3RdKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRWYWx1ZSgicGF5bG9h
ZCJfcywgW3BheWxvYWQgdG9KU09OT2JqZWN0XSk7Ci0gICAgICAgIHJlc3VsdE9iamVjdC0+c2V0
SW50ZWdlcigiZGF0YWJhc2VJZCJfcywgZGF0YWJhc2VJZCk7Ci0gICAgICAgIHJlc3VsdE9iamVj
dC0+c2V0T2JqZWN0KCJzcWxFcnJvciJfcywgW3NxbEVycm9yIHRvSlNPTk9iamVjdF0pOwotICAg
ICAgICByZXN1bHRPYmplY3QtPnNldFN0cmluZygic2NyZWVuQ29sb3IiX3MsIHRvUHJvdG9jb2xT
dHJpbmcoc2NyZWVuQ29sb3IpKTsKLSAgICAgICAgcmVzdWx0T2JqZWN0LT5zZXRBcnJheSgiYWx0
ZXJuYXRlQ29sb3JzIl9zLCB0b0pTT05TdHJpbmdBcnJheShhbHRlcm5hdGVDb2xvcnMpKTsKLSAg
ICAgICAgcmVzdWx0T2JqZWN0LT5zZXRTdHJpbmcoInByaW50Q29sb3IiX3MsIHRvUHJvdG9jb2xT
dHJpbmcocHJpbnRDb2xvcikpOwotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVz
cG9uc2UocmVxdWVzdElkLCBXVEZNb3ZlKHJlc3VsdE9iamVjdCksIGZhbHNlKTsKKyAgICBpZCBz
dWNjZXNzQ2FsbGJhY2sgPSBeKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqb3V0X2NvbHVtbk5hbWVz
LCBOU1N0cmluZyAqb3V0X25vdGVzLCBkb3VibGUgb3V0X3RpbWVzdGFtcCwgUldJUHJvdG9jb2xK
U09OT2JqZWN0ICpvdXRfdmFsdWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKm91dF9wYXlsb2Fk
LCBpbnQgb3V0X2RhdGFiYXNlSWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKm91dF9zcWxF
cnJvciwgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzIG91dF9zY3JlZW5Db2xvciwg
TlNBcnJheS8qPE5TU3RyaW5nPiovICpvdXRfYWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xE
YXRhYmFzZShhbm9ueW1vdXMpIG91dF9wcmludENvbG9yKSB7CisgICAgICAgIGF1dG8gcHJvdG9j
b2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBUSFJPV19F
WENFUFRJT05fRk9SX1JFUVVJUkVEX1BBUkFNRVRFUihvdXRfY29sdW1uTmFtZXMsIEAiY29sdW1u
TmFtZXMiKTsKKyAgICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIo
b3V0X25vdGVzLCBAIm5vdGVzIik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlS
RURfUEFSQU1FVEVSKG91dF92YWx1ZXMsIEAidmFsdWVzIik7CisgICAgICAgIFRIUk9XX0VYQ0VQ
VElPTl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKG91dF9wYXlsb2FkLCBAInBheWxvYWQiKTsKKyAg
ICAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIob3V0X3NxbEVycm9y
LCBAInNxbEVycm9yIik7CisgICAgICAgIFRIUk9XX0VYQ0VQVElPTl9GT1JfUkVRVUlSRURfUEFS
QU1FVEVSKG91dF9hbHRlcm5hdGVDb2xvcnMsIEAiYWx0ZXJuYXRlQ29sb3JzIik7CisgICAgICAg
IHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIHRvSlNPTlN0
cmluZ0FycmF5KG91dF9jb2x1bW5OYW1lcykpOworICAgICAgICBwcm90b2NvbF9qc29uTWVzc2Fn
ZS0+c2V0U3RyaW5nKCJub3RlcyJfcywgb3V0X25vdGVzKTsKKyAgICAgICAgcHJvdG9jb2xfanNv
bk1lc3NhZ2UtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCBvdXRfdGltZXN0YW1wKTsKKyAgICAg
ICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldE9iamVjdCgidmFsdWVzIl9zLCBbb3V0X3ZhbHVl
cyB0b0pTT05PYmplY3RdKTsKKyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFZhbHVl
KCJwYXlsb2FkIl9zLCBbb3V0X3BheWxvYWQgdG9KU09OT2JqZWN0XSk7CisgICAgICAgIHByb3Rv
Y29sX2pzb25NZXNzYWdlLT5zZXRJbnRlZ2VyKCJkYXRhYmFzZUlkIl9zLCBvdXRfZGF0YWJhc2VJ
ZCk7CisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRPYmplY3QoInNxbEVycm9yIl9z
LCBbb3V0X3NxbEVycm9yIHRvSlNPTk9iamVjdF0pOworICAgICAgICBwcm90b2NvbF9qc29uTWVz
c2FnZS0+c2V0U3RyaW5nKCJzY3JlZW5Db2xvciJfcywgdG9Qcm90b2NvbFN0cmluZyhvdXRfc2Ny
ZWVuQ29sb3IpKTsKKyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldEFycmF5KCJhbHRl
cm5hdGVDb2xvcnMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KG91dF9hbHRlcm5hdGVDb2xvcnMpKTsK
KyAgICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygicHJpbnRDb2xvciJfcywg
dG9Qcm90b2NvbFN0cmluZyhvdXRfcHJpbnRDb2xvcikpOworICAgICAgICBiYWNrZW5kRGlzcGF0
Y2hlcigpLT5zZW5kUmVzcG9uc2UocHJvdG9jb2xfcmVxdWVzdElkLCBXVEZNb3ZlKHByb3RvY29s
X2pzb25NZXNzYWdlKSwgZmFsc2UpOwogICAgIH07CiAKLSAgICBOU0FycmF5Lyo8TlNTdHJpbmc+
Ki8gKm9faW5fY29sdW1uTmFtZXMgPSB0b09iakNTdHJpbmdBcnJheSgmaW5fY29sdW1uTmFtZXMp
OworICAgIE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqb19pbl9jb2x1bW5OYW1lcyA9IHRvT2JqQ1N0
cmluZ0FycmF5KFdURk1vdmUoaW5fY29sdW1uTmFtZXMpKTsKICAgICBOU1N0cmluZyAqb19pbl9u
b3RlcyA9IGluX25vdGVzOwogICAgIGRvdWJsZSBvX2luX3RpbWVzdGFtcCA9IGluX3RpbWVzdGFt
cDsKLSAgICBSV0lQcm90b2NvbEpTT05PYmplY3QgKm9faW5fdmFsdWVzID0gW1tbUldJUHJvdG9j
b2xKU09OT2JqZWN0IGFsbG9jXSBpbml0V2l0aEpTT05PYmplY3Q6JmluX3ZhbHVlc10gYXV0b3Jl
bGVhc2VdOwotICAgIFJXSVByb3RvY29sSlNPTk9iamVjdCAqb19pbl9wYXlsb2FkID0gW1tbUldJ
UHJvdG9jb2xKU09OT2JqZWN0IGFsbG9jXSBpbml0V2l0aEpTT05PYmplY3Q6JmluX3BheWxvYWRd
IGF1dG9yZWxlYXNlXTsKKyAgICBSV0lQcm90b2NvbEpTT05PYmplY3QgKm9faW5fdmFsdWVzID0g
W1tbUldJUHJvdG9jb2xKU09OT2JqZWN0IGFsbG9jXSBpbml0V2l0aEpTT05PYmplY3Q6V1RGTW92
ZShpbl92YWx1ZXMpXSBhdXRvcmVsZWFzZV07CisgICAgUldJUHJvdG9jb2xKU09OT2JqZWN0ICpv
X2luX3BheWxvYWQgPSBbW1tSV0lQcm90b2NvbEpTT05PYmplY3QgYWxsb2NdIGluaXRXaXRoSlNP
Tk9iamVjdDpXVEZNb3ZlKGluX3BheWxvYWQpXSBhdXRvcmVsZWFzZV07CiAgICAgaW50IG9faW5f
ZGF0YWJhc2VJZCA9IGluX2RhdGFiYXNlSWQ7Ci0gICAgVGVzdFByb3RvY29sRGF0YWJhc2VFcnJv
ciAqb19pbl9zcWxFcnJvciA9IFtbW1Rlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgYWxsb2NdIGlu
aXRXaXRoSlNPTk9iamVjdDomaW5fc3FsRXJyb3JdIGF1dG9yZWxlYXNlXTsKKyAgICBUZXN0UHJv
dG9jb2xEYXRhYmFzZUVycm9yICpvX2luX3NxbEVycm9yID0gW1tbVGVzdFByb3RvY29sRGF0YWJh
c2VFcnJvciBhbGxvY10gaW5pdFdpdGhKU09OT2JqZWN0OldURk1vdmUoaW5fc3FsRXJyb3IpXSBh
dXRvcmVsZWFzZV07CiAgICAgT3B0aW9uYWw8VGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29s
b3JzPiBvX2luX3NjcmVlbkNvbG9yID0gZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2NvbERh
dGFiYXNlUHJpbWFyeUNvbG9ycz4oaW5fc2NyZWVuQ29sb3IpOwogICAgIGlmICghb19pbl9zY3Jl
ZW5Db2xvcikgewogICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVy
cm9yKEJhY2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCAiUGFyYW1ldGVyICdzY3JlZW5D
b2xvcicgb2YgbWV0aG9kICdEYXRhYmFzZS5leGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMnIGNh
bm5vdCBiZSBwcm9jZXNzZWQiX3MpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIE5TQXJy
YXkvKjxOU1N0cmluZz4qLyAqb19pbl9hbHRlcm5hdGVDb2xvcnMgPSB0b09iakNTdHJpbmdBcnJh
eSgmaW5fYWx0ZXJuYXRlQ29sb3JzKTsKLSAgICBPcHRpb25hbDxUZXN0UHJvdG9jb2xEYXRhYmFz
ZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3I+IG9faW5fcHJpbnRDb2xvciA9
IGZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xEYXRhYmFzZUV4ZWN1dGVOb09wdGlvbmFs
UGFyYW1ldGVyc1ByaW50Q29sb3I+KGluX3ByaW50Q29sb3IpOworICAgIE5TQXJyYXkvKjxOU1N0
cmluZz4qLyAqb19pbl9hbHRlcm5hdGVDb2xvcnMgPSB0b09iakNTdHJpbmdBcnJheShXVEZNb3Zl
KGluX2FsdGVybmF0ZUNvbG9ycykpOworICAgIE9wdGlvbmFsPFRlc3RQcm90b2NvbERhdGFiYXNl
KGFub255bW91cyk+IG9faW5fcHJpbnRDb2xvciA9IGZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJv
dG9jb2xEYXRhYmFzZShhbm9ueW1vdXMpPihpbl9wcmludENvbG9yKTsKICAgICBpZiAoIW9faW5f
cHJpbnRDb2xvcikgewogICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2Nv
bEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpJbnZhbGlkUGFyYW1zLCAiUGFyYW1ldGVyICdwcmlu
dENvbG9yJyBvZiBtZXRob2QgJ0RhdGFiYXNlLmV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycycg
Y2Fubm90IGJlIHByb2Nlc3NlZCJfcyk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0KICAgICBb
bV9kZWxlZ2F0ZSBleGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNXaXRoRXJyb3JDYWxsYmFjazpl
cnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2sgY29sdW1uTmFtZXM6
b19pbl9jb2x1bW5OYW1lcyBub3RlczpvX2luX25vdGVzIHRpbWVzdGFtcDpvX2luX3RpbWVzdGFt
cCB2YWx1ZXM6b19pbl92YWx1ZXMgcGF5bG9hZDpvX2luX3BheWxvYWQgZGF0YWJhc2VJZDpvX2lu
X2RhdGFiYXNlSWQgc3FsRXJyb3I6b19pbl9zcWxFcnJvciBzY3JlZW5Db2xvcjpvX2luX3NjcmVl
bkNvbG9yLnZhbHVlKCkgYWx0ZXJuYXRlQ29sb3JzOm9faW5fYWx0ZXJuYXRlQ29sb3JzIHByaW50
Q29sb3I6b19pbl9wcmludENvbG9yLnZhbHVlKCldOwogfQogCkBAIC0xMjEzLDggKzExODUsOCBA
QCBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSkKIAogQHByb3RvY29sIFRl
c3RQcm90b2NvbERhdGFiYXNlRG9tYWluSGFuZGxlciA8TlNPYmplY3Q+CiBAb3B0aW9uYWwKLS0g
KHZvaWQpZXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1dpdGhFcnJvckNhbGxiYWNrOih2b2lk
KF4pKE5TU3RyaW5nICplcnJvcikpZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6KHZvaWQo
XikoTlNBcnJheS8qPE5TU3RyaW5nPiovICoqY29sdW1uTmFtZXMsIE5TU3RyaW5nICoqbm90ZXMs
IGRvdWJsZSAqdGltZXN0YW1wLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKip2YWx1ZXMsIFJXSVBy
b3RvY29sSlNPTk9iamVjdCAqKnBheWxvYWQsIGludCAqZGF0YWJhc2VJZCwgVGVzdFByb3RvY29s
RGF0YWJhc2VFcnJvciAqKnNxbEVycm9yLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xv
cnMgKnNjcmVlbkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiphbHRlcm5hdGVDb2xvcnMs
IFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFsbE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29s
b3IgKnByaW50Q29sb3IpKXN1Y2Nlc3NDYWxsYmFjayBjb2x1bW5OYW1lczooTlNBcnJheS8qPE5T
U3RyaW5nPiovICoqKWNvbHVtbk5hbWVzIG5vdGVzOihOU1N0cmluZyAqKilub3RlcyB0aW1lc3Rh
bXA6KGRvdWJsZSAqKXRpbWVzdGFtcCB2YWx1ZXM6KFJXSVByb3RvY29sSlNPTk9iamVjdCAqKil2
YWx1ZXMgcGF5bG9hZDooUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqKXBheWxvYWQgZGF0YWJhc2VJ
ZDooaW50ICopZGF0YWJhc2VJZCBzcWxFcnJvcjooVGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAq
KilzcWxFcnJvciBzY3JlZW5Db2xvcjooVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3Jz
ICopc2NyZWVuQ29sb3IgYWx0ZXJuYXRlQ29sb3JzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiop
YWx0ZXJuYXRlQ29sb3JzIHByaW50Q29sb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXhlY3V0ZUFs
bE9wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3IgKilwcmludENvbG9yOwotLSAodm9pZClleGVj
dXRlTm9PcHRpb25hbFBhcmFtZXRlcnNXaXRoRXJyb3JDYWxsYmFjazoodm9pZCheKShOU1N0cmlu
ZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOih2b2lkKF4pKE5TQXJyYXkv
KjxOU1N0cmluZz4qLyAqY29sdW1uTmFtZXMsIE5TU3RyaW5nICpub3RlcywgZG91YmxlIHRpbWVz
dGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0ICp2YWx1ZXMsIFJXSVByb3RvY29sSlNPTk9iamVj
dCAqcGF5bG9hZCwgaW50IGRhdGFiYXNlSWQsIFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKnNx
bEVycm9yLCBUZXN0UHJvdG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMgc2NyZWVuQ29sb3IsIE5T
QXJyYXkvKjxOU1N0cmluZz4qLyAqYWx0ZXJuYXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFz
ZUV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVyc1ByaW50Q29sb3IgcHJpbnRDb2xvcikpc3VjY2Vz
c0NhbGxiYWNrIGNvbHVtbk5hbWVzOihOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKiljb2x1bW5OYW1l
cyBub3RlczooTlNTdHJpbmcgKilub3RlcyB0aW1lc3RhbXA6KGRvdWJsZSl0aW1lc3RhbXAgdmFs
dWVzOihSV0lQcm90b2NvbEpTT05PYmplY3QgKil2YWx1ZXMgcGF5bG9hZDooUldJUHJvdG9jb2xK
U09OT2JqZWN0ICopcGF5bG9hZCBkYXRhYmFzZUlkOihpbnQpZGF0YWJhc2VJZCBzcWxFcnJvcjoo
VGVzdFByb3RvY29sRGF0YWJhc2VFcnJvciAqKXNxbEVycm9yIHNjcmVlbkNvbG9yOihUZXN0UHJv
dG9jb2xEYXRhYmFzZVByaW1hcnlDb2xvcnMpc2NyZWVuQ29sb3IgYWx0ZXJuYXRlQ29sb3JzOihO
U0FycmF5Lyo8TlNTdHJpbmc+Ki8gKilhbHRlcm5hdGVDb2xvcnMgcHJpbnRDb2xvcjooVGVzdFBy
b3RvY29sRGF0YWJhc2VFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnNQcmludENvbG9yKXByaW50
Q29sb3I7CistICh2b2lkKWV4ZWN1dGVBbGxPcHRpb25hbFBhcmFtZXRlcnNXaXRoRXJyb3JDYWxs
YmFjazoodm9pZCheKShOU1N0cmluZyAqZXJyb3IpKWVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxi
YWNrOih2b2lkKF4pKE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKmNvbHVtbk5hbWVzLCBOU1N0cmlu
ZyAqKm5vdGVzLCBkb3VibGUgKnRpbWVzdGFtcCwgUldJUHJvdG9jb2xKU09OT2JqZWN0ICoqdmFs
dWVzLCBSV0lQcm90b2NvbEpTT05PYmplY3QgKipwYXlsb2FkLCBpbnQgKmRhdGFiYXNlSWQsIFRl
c3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKipzcWxFcnJvciwgVGVzdFByb3RvY29sRGF0YWJhc2VQ
cmltYXJ5Q29sb3JzICpzY3JlZW5Db2xvciwgTlNBcnJheS8qPE5TU3RyaW5nPiovICoqYWx0ZXJu
YXRlQ29sb3JzLCBUZXN0UHJvdG9jb2xEYXRhYmFzZShhbm9ueW1vdXMpICpwcmludENvbG9yKSlz
dWNjZXNzQ2FsbGJhY2sgY29sdW1uTmFtZXM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKiljb2x1
bW5OYW1lcyBub3RlczooTlNTdHJpbmcgKiopbm90ZXMgdGltZXN0YW1wOihkb3VibGUgKil0aW1l
c3RhbXAgdmFsdWVzOihSV0lQcm90b2NvbEpTT05PYmplY3QgKiopdmFsdWVzIHBheWxvYWQ6KFJX
SVByb3RvY29sSlNPTk9iamVjdCAqKilwYXlsb2FkIGRhdGFiYXNlSWQ6KGludCAqKWRhdGFiYXNl
SWQgc3FsRXJyb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKiopc3FsRXJyb3Igc2NyZWVu
Q29sb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlUHJpbWFyeUNvbG9ycyAqKXNjcmVlbkNvbG9yIGFs
dGVybmF0ZUNvbG9yczooTlNBcnJheS8qPE5TU3RyaW5nPiovICoqKWFsdGVybmF0ZUNvbG9ycyBw
cmludENvbG9yOihUZXN0UHJvdG9jb2xEYXRhYmFzZShhbm9ueW1vdXMpICopcHJpbnRDb2xvcjsK
Ky0gKHZvaWQpZXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzV2l0aEVycm9yQ2FsbGJhY2s6KHZv
aWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9p
ZCheKShOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmNvbHVtbk5hbWVzLCBOU1N0cmluZyAqbm90ZXMs
IGRvdWJsZSB0aW1lc3RhbXAsIFJXSVByb3RvY29sSlNPTk9iamVjdCAqdmFsdWVzLCBSV0lQcm90
b2NvbEpTT05PYmplY3QgKnBheWxvYWQsIGludCBkYXRhYmFzZUlkLCBUZXN0UHJvdG9jb2xEYXRh
YmFzZUVycm9yICpzcWxFcnJvciwgVGVzdFByb3RvY29sRGF0YWJhc2VQcmltYXJ5Q29sb3JzIHNj
cmVlbkNvbG9yLCBOU0FycmF5Lyo8TlNTdHJpbmc+Ki8gKmFsdGVybmF0ZUNvbG9ycywgVGVzdFBy
b3RvY29sRGF0YWJhc2UoYW5vbnltb3VzKSBwcmludENvbG9yKSlzdWNjZXNzQ2FsbGJhY2sgY29s
dW1uTmFtZXM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWNvbHVtbk5hbWVzIG5vdGVzOihOU1N0
cmluZyAqKW5vdGVzIHRpbWVzdGFtcDooZG91YmxlKXRpbWVzdGFtcCB2YWx1ZXM6KFJXSVByb3Rv
Y29sSlNPTk9iamVjdCAqKXZhbHVlcyBwYXlsb2FkOihSV0lQcm90b2NvbEpTT05PYmplY3QgKilw
YXlsb2FkIGRhdGFiYXNlSWQ6KGludClkYXRhYmFzZUlkIHNxbEVycm9yOihUZXN0UHJvdG9jb2xE
YXRhYmFzZUVycm9yICopc3FsRXJyb3Igc2NyZWVuQ29sb3I6KFRlc3RQcm90b2NvbERhdGFiYXNl
UHJpbWFyeUNvbG9ycylzY3JlZW5Db2xvciBhbHRlcm5hdGVDb2xvcnM6KE5TQXJyYXkvKjxOU1N0
cmluZz4qLyAqKWFsdGVybmF0ZUNvbG9ycyBwcmludENvbG9yOihUZXN0UHJvdG9jb2xEYXRhYmFz
ZShhbm9ueW1vdXMpKXByaW50Q29sb3I7CiBAZW5kCiAKIApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2RlZmluaXRpb25z
LXdpdGgtbWFjLXBsYXRmb3JtLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2RlZmluaXRpb25zLXdpdGgtbWFjLXBsYXRm
b3JtLmpzb24tcmVzdWx0CmluZGV4IGQwMmJlZDdiOGQ2ZTJmZTAyYTUyNDJlZDEyMmY0YTI4NGY5
MGM5YjkuLjYzNWE5ZmJjZDRkZGIwN2Q3YjA5N2VmZjM5NmViYmFmYWRmMjIyZTQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3Rl
ZC9kZWZpbml0aW9ucy13aXRoLW1hYy1wbGF0Zm9ybS5qc29uLXJlc3VsdAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZGVmaW5pdGlv
bnMtd2l0aC1tYWMtcGxhdGZvcm0uanNvbi1yZXN1bHQKQEAgLTc2LDcgKzc2LDcgQEAgSW5zcGVj
dG9yQmFja2VuZC5hY3RpdmF0ZURvbWFpbigiTmV0d29yayIsIG51bGwpOwogCiAjaWYgRU5BQkxF
KElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAKLSNpbmNsdWRlICJUZXN0UHJvdG9j
b2xUeXBlcy5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgogI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CiAKQEAgLTk2LDcgKzk2LDcg
QEAgY2xhc3MgQWx0ZXJuYXRlTmV0d29ya0JhY2tlbmREaXNwYXRjaGVyIDogcHVibGljIEFsdGVy
bmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5BbHRlcm5hdGVO
ZXR3b3JrQmFja2VuZERpc3BhdGNoZXIoKSB7IH0KICNpZiBDT01NQU5ELU1BQwotICAgIHZpcnR1
YWwgdm9pZCBsb2FkUmVzb3VyY2UobG9uZyBjYWxsSWQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
bG9hZFJlc291cmNlKGxvbmcgcHJvdG9jb2xfcmVxdWVzdElkKSA9IDA7CiAjZW5kaWYgLy8gQ09N
TUFORC1NQUMKIH07CiAjZW5kaWYgLy8gRE9NQUlOLU1BQwpAQCAtMTQwLDExICsxNDAsMTQgQEAg
cHVibGljOgogCiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8dHVw
bGU+CisjaW5jbHVkZSA8d3RmL0V4cGVjdGVkLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+
CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3Ig
ewogCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKwogCiAjaWYgRU5BQkxFKElOU1BFQ1RP
Ul9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAjaWYgRE9NQUlOLU1BQwpAQCAtMTU2LDcgKzE1OSw3
IEBAIGNsYXNzIEFsdGVybmF0ZU5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlcjsKIGNsYXNzIE5ldHdv
cmtCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewogcHVibGljOgogI2lmIENPTU1BTkQtTUFDCi0g
ICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZShFcnJvclN0cmluZyYpID0gMDsKKyAgICB2aXJ0
dWFsIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGxvYWRSZXNvdXJjZSgpID0gMDsKICNl
bmRpZiAvLyBDT01NQU5ELU1BQwogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgfk5ldHdvcmtCYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXIoKTsKQEAgLTE2NywxMCArMTcwLDEwIEBAIHByb3RlY3RlZDoK
IGNsYXNzIE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBTdXBwbGVtZW50
YWxCYWNrZW5kRGlzcGF0Y2hlciB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxOZXR3b3JrQmFj
a2VuZERpc3BhdGNoZXI+IGNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYsIE5ldHdvcmtCYWNrZW5k
RGlzcGF0Y2hlckhhbmRsZXIqKTsKLSAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBj
b25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKSBmaW5hbDsK
KyAgICB2b2lkIGRpc3BhdGNoKGxvbmcgcHJvdG9jb2xfcmVxdWVzdElkLCBjb25zdCBTdHJpbmcm
IHByb3RvY29sX21ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9tZXNzYWdlKSBm
aW5hbDsKIHByaXZhdGU6CiAjaWYgQ09NTUFORC1NQUMKLSAgICB2b2lkIGxvYWRSZXNvdXJjZShs
b25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKKyAgICB2
b2lkIGxvYWRSZXNvdXJjZShsb25nIHByb3RvY29sX3JlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9i
amVjdD4mJiBwcm90b2NvbF9wYXJhbWV0ZXJzKTsKICNlbmRpZiAvLyBDT01NQU5ELU1BQwogI2lm
IEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogcHVibGljOgpAQCAtMjIx
LDkgKzIyNCw3IEBAIHByaXZhdGU6CiAjaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5o
IgogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4K
LSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3ll
ZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogI2lmIEVOQUJMRShJTlNQRUNU
T1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5k
RGlzcGF0Y2hlcnMuaCIKQEAgLTI0OCw0MSArMjQ5LDQxIEBAIE5ldHdvcmtCYWNrZW5kRGlzcGF0
Y2hlcjo6TmV0d29ya0JhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5k
RGlzCiAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRjaGVyRm9yRG9tYWlu
KCJOZXR3b3JrIl9zLCB0aGlzKTsKIH0KIAotdm9pZCBOZXR3b3JrQmFja2VuZERpc3BhdGNoZXI6
OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046
Ok9iamVjdD4mJiBtZXNzYWdlKQordm9pZCBOZXR3b3JrQmFja2VuZERpc3BhdGNoZXI6OmRpc3Bh
dGNoKGxvbmcgcHJvdG9jb2xfcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIHByb3RvY29sX21ldGhv
ZCwgUmVmPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9tZXNzYWdlKQogewogICAgIFJlZjxOZXR3
b3JrQmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOwogCi0gICAgUmVmUHRyPEpTT046
Ok9iamVjdD4gcGFyYW1ldGVyczsKLSAgICBtZXNzYWdlLT5nZXRPYmplY3QoInBhcmFtcyJfcywg
cGFyYW1ldGVycyk7CisgICAgYXV0byBwcm90b2NvbF9wYXJhbWV0ZXJzID0gcHJvdG9jb2xfbWVz
c2FnZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3MpOwogCiAjaWYgQ09NTUFORC1NQUMKLSAgICBpZiAo
bWV0aG9kID09ICJsb2FkUmVzb3VyY2UiKSB7Ci0gICAgICAgIGxvYWRSZXNvdXJjZShyZXF1ZXN0
SWQsIFdURk1vdmUocGFyYW1ldGVycykpOworICAgIGlmIChwcm90b2NvbF9tZXRob2QgPT0gImxv
YWRSZXNvdXJjZSIpIHsKKyAgICAgICAgbG9hZFJlc291cmNlKHByb3RvY29sX3JlcXVlc3RJZCwg
V1RGTW92ZShwcm90b2NvbF9wYXJhbWV0ZXJzKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAj
ZW5kaWYgLy8gQ09NTUFORC1NQUMKIAotICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFBy
b3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdvcmsu
IiArIG1ldGhvZCArICInIHdhcyBub3QgZm91bmQiKTsKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVy
LT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwg
IidOZXR3b3JrLiIgKyBwcm90b2NvbF9tZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7CiB9CiAK
ICNpZiBDT01NQU5ELU1BQwotdm9pZCBOZXR3b3JrQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNv
dXJjZShsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikKK3ZvaWQgTmV0d29y
a0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UobG9uZyBwcm90b2NvbF9yZXF1ZXN0SWQs
IFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5B
VEVfRElTUEFUQ0hFUlMpCiAgICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgewotICAgICAg
ICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmxvYWRSZXNvdXJjZShyZXF1ZXN0SWQpOworICAgICAg
ICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmxvYWRSZXNvdXJjZShwcm90b2NvbF9yZXF1ZXN0SWQp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQogCi0gICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVmPEpT
T046Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBtX2FnZW50
LT5sb2FkUmVzb3VyY2UoZXJyb3IpOworICAgIGF1dG8gcmVzdWx0ID0gbV9hZ2VudC0+bG9hZFJl
c291cmNlKCk7CisgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAgICAgQVNTRVJUKCFyZXN1bHQuZXJy
b3IoKS5pc0VtcHR5KCkpOworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90
b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgcmVzdWx0LmVycm9yKCkp
OworICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKLSAg
ICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92
ZShyZXN1bHQpLCBmYWxzZSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVy
LT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RG
TW92ZShlcnJvcikpOworICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmpl
Y3Q6OmNyZWF0ZSgpOworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShwcm90
b2NvbF9yZXF1ZXN0SWQsIFdURk1vdmUocHJvdG9jb2xfanNvbk1lc3NhZ2UpLCBmYWxzZSk7CiB9
CiAjZW5kaWYgLy8gQ09NTUFORC1NQUMKICNlbmRpZiAvLyBET01BSU4tTUFDCkBAIC0zMjUsNiAr
MzI2LDcgQEAgdm9pZCBOZXR3b3JrQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZShsb25n
IHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4KIAogI2luY2x1ZGUgIlRlc3RQcm90b2Nv
bE9iamVjdHMuaCIKICNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9P
cHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKQEAgLTM4MSw3ICszODMsNiBAQCBwcml2YXRlOgogI2luY2x1ZGUgIlRlc3RG
cm9udGVuZERpc3BhdGNoZXJzLmgiCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogbmFt
ZXNwYWNlIEluc3BlY3RvciB7CiAKQEAgLTM4OSwxMCArMzkwLDEwIEBAIG5hbWVzcGFjZSBJbnNw
ZWN0b3IgewogI2lmIEVWRU5ULU1BQwogdm9pZCBOZXR3b3JrRnJvbnRlbmREaXNwYXRjaGVyOjpy
ZXNvdXJjZUxvYWRlZCgpCiB7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBK
U09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhv
ZCJfcywgIk5ldHdvcmsucmVzb3VyY2VMb2FkZWQiX3MpOworICAgIGF1dG8gcHJvdG9jb2xfanNv
bk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIHByb3RvY29sX2pzb25NZXNz
YWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIk5ldHdvcmsucmVzb3VyY2VMb2FkZWQiX3MpOwog
Ci0gICAgbV9mcm9udGVuZFJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmlu
ZygpKTsKKyAgICBtX2Zyb250ZW5kUm91dGVyLnNlbmRFdmVudChwcm90b2NvbF9qc29uTWVzc2Fn
ZS0+dG9KU09OU3RyaW5nKCkpOwogfQogI2VuZGlmIC8vIEVWRU5ULU1BQwogI2VuZGlmIC8vIERP
TUFJTi1NQUMKQEAgLTQzNCw3ICs0MzUsOSBAQCB2b2lkIE5ldHdvcmtGcm9udGVuZERpc3BhdGNo
ZXI6OnJlc291cmNlTG9hZGVkKCkKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25z
Lmg+CisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwu
aD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3Rv
ciB7CiAKQEAgLTQ2MSw3ICs0NjQsNyBAQCBjbGFzcyBOZXR3b3JrRXJyb3I7CiBuYW1lc3BhY2Ug
TmV0d29yayB7CiAKICNpZiBUWVBFLU1BQwotY2xhc3MgTmV0d29ya0Vycm9yIDogcHVibGljIEpT
T046Ok9iamVjdEJhc2UgeworY2xhc3MgTmV0d29ya0Vycm9yIGZpbmFsIDogcHVibGljIEpTT046
Ok9iamVjdEJhc2UgewogcHVibGljOgogICAgIGVudW0gewogICAgICAgICBOb0ZpZWxkc1NldCA9
IDAsCkBAIC00ODgsMTcgKzQ5MSwxNyBAQCBwdWJsaWM6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBO
ZXR3b3JrRXJyb3I7CiAgICAgcHVibGljOgogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBNZXNz
YWdlU2V0PiYgc2V0TWVzc2FnZShjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgICAgICBCdWlsZGVy
PFNUQVRFIHwgTWVzc2FnZVNldD4mIHNldE1lc3NhZ2UoY29uc3QgU3RyaW5nJiBpbl9tZXNzYWdl
KQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTWVzc2Fn
ZVNldCksIHByb3BlcnR5X21lc3NhZ2VfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1
bHQtPnNldFN0cmluZygibWVzc2FnZSJfcywgdmFsdWUpOworICAgICAgICAgICAgbV9yZXN1bHQt
PnNldFN0cmluZygibWVzc2FnZSJfcywgaW5fbWVzc2FnZSk7CiAgICAgICAgICAgICByZXR1cm4g
Y2FzdFN0YXRlPE1lc3NhZ2VTZXQ+KCk7CiAgICAgICAgIH0KIAotICAgICAgICBCdWlsZGVyPFNU
QVRFIHwgQ29kZVNldD4mIHNldENvZGUoaW50IHZhbHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRF
IHwgQ29kZVNldD4mIHNldENvZGUoaW50IGluX2NvZGUpCiAgICAgICAgIHsKICAgICAgICAgICAg
IENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBDb2RlU2V0KSwgcHJvcGVydHlfY29kZV9hbHJlYWR5
X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0SW50ZWdlcigiY29kZSJfcywgdmFsdWUp
OworICAgICAgICAgICAgbV9yZXN1bHQtPnNldEludGVnZXIoImNvZGUiX3MsIGluX2NvZGUpOwog
ICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxDb2RlU2V0PigpOwogICAgICAgICB9CiAKQEAg
LTU3MCw4ICs1NzMsNyBAQCBwdWJsaWM6CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
VGVzdFByb3RvY29sT2JqZWN0cy5oIgogCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5j
bHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAK
IG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC02MzEsNyArNjMzLDcgQEAgY2xhc3MgT2JqQ0lu
c3BlY3Rvck5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBBbHRlcm5hdGVO
ZXR3b3JrQmFja2UKIHB1YmxpYzoKICAgICBPYmpDSW5zcGVjdG9yTmV0d29ya0JhY2tlbmREaXNw
YXRjaGVyKGlkPFRlc3RQcm90b2NvbE5ldHdvcmtEb21haW5IYW5kbGVyPiBoYW5kbGVyKSB7IG1f
ZGVsZWdhdGUgPSBoYW5kbGVyOyB9CiAjaWYgQ09NTUFORC1NQUMKLSAgICB2b2lkIGxvYWRSZXNv
dXJjZShsb25nIHJlcXVlc3RJZCkgZmluYWw7CisgICAgdm9pZCBsb2FkUmVzb3VyY2UobG9uZyBw
cm90b2NvbF9yZXF1ZXN0SWQpIGZpbmFsOwogI2VuZGlmIC8vIENPTU1BTkQtTUFDCiBwcml2YXRl
OgogICAgIFJldGFpblB0cjxpZDxUZXN0UHJvdG9jb2xOZXR3b3JrRG9tYWluSGFuZGxlcj4+IG1f
ZGVsZWdhdGU7CkBAIC02ODMsMjEgKzY4NSwyMiBAQCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAog
I2lmIERPTUFJTi1NQUMKICNpZiBDT01NQU5ELU1BQwotdm9pZCBPYmpDSW5zcGVjdG9yTmV0d29y
a0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UobG9uZyByZXF1ZXN0SWQpCit2b2lkIE9i
akNJbnNwZWN0b3JOZXR3b3JrQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZShsb25nIHBy
b3RvY29sX3JlcXVlc3RJZCkKIHsKICAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxl
Y3RvcjpAc2VsZWN0b3IobG9hZFJlc291cmNlV2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxi
YWNrOildKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJy
b3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29y
ay5sb2FkUmVzb3VyY2UnIHdhcyBub3QgZm91bmQiX3MpOworICAgICAgICBiYWNrZW5kRGlzcGF0
Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHByb3RvY29sX3JlcXVlc3RJZCwgQmFja2VuZERp
c3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdvcmsubG9hZFJlc291cmNlJyB3YXMgbm90
IGZvdW5kIl9zKTsKICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJv
cnMoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBe
KE5TU3RyaW5nICplcnJvcikgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQ
cm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBl
cnJvcik7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3Io
cHJvdG9jb2xfcmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9y
KTsKICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKICAg
ICB9OwogCiAgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKLSAgICAgICAgYmFja2VuZERpc3Bh
dGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSwg
ZmFsc2UpOworICAgICAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0
OjpjcmVhdGUoKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHBy
b3RvY29sX3JlcXVlc3RJZCwgV1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSksIGZhbHNlKTsK
ICAgICB9OwogCiAgICAgW21fZGVsZWdhdGUgbG9hZFJlc291cmNlV2l0aEVycm9yQ2FsbGJhY2s6
ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsKQEAgLTkxMSw5
ICs5MTQsOSBAQCB1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwogewogICAgIGNvbnN0IEZyb250
ZW5kUm91dGVyJiByb3V0ZXIgPSBfY29udHJvbGxlci0+ZnJvbnRlbmRSb3V0ZXIoKTsKIAotICAg
IFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsK
LSAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJOZXR3b3JrLnJlc291cmNl
TG9hZGVkIl9zKTsKLSAgICByb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJp
bmcoKSk7CisgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3Jl
YXRlKCk7CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAi
TmV0d29yay5yZXNvdXJjZUxvYWRlZCJfcyk7CisgICAgcm91dGVyLnNlbmRFdmVudChwcm90b2Nv
bF9qc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwogfQogI2VuZGlmIC8vIEVWRU5ULU1BQwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVz
dHMvZXhwZWN0ZWQvZG9tYWluLWRlYnVnZ2FibGVUeXBlcy5qc29uLXJlc3VsdCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9kb21haW4tZGVi
dWdnYWJsZVR5cGVzLmpzb24tcmVzdWx0CmluZGV4IGE0OGY2ZjliNWExOTc5ODJhZDY5MTAyOWFl
YWFkYzY3NTJmODEzMmEuLmFjN2U0OWQxOTcwZDhhZjNmNjk3YTY5YjNiODFlNzc4NWZiZmY4ZWYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0
cy9leHBlY3RlZC9kb21haW4tZGVidWdnYWJsZVR5cGVzLmpzb24tcmVzdWx0CisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9kb21haW4t
ZGVidWdnYWJsZVR5cGVzLmpzb24tcmVzdWx0CkBAIC03MCw3ICs3MCw3IEBAIEluc3BlY3RvckJh
Y2tlbmQuYWN0aXZhdGVEb21haW4oIkRvbWFpbiIsIFsid2ViLXBhZ2UiXSk7CiAKICNpZiBFTkFC
TEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIAotI2luY2x1ZGUgIlRlc3RQcm90
b2NvbFR5cGVzLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CiAjaW5jbHVkZSA8
SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KIApAQCAtODgsNyArODgs
NyBAQCBwcml2YXRlOgogY2xhc3MgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIgOiBw
dWJsaWMgQWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXIgewogcHVibGljOgogICAgIHZpcnR1YWwg
fkFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyKCkgeyB9Ci0gICAgdmlydHVhbCB2b2lk
IENvbW1hbmQobG9uZyBjYWxsSWQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgQ29tbWFuZChsb25n
IHByb3RvY29sX3JlcXVlc3RJZCkgPSAwOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
CkBAIC0xMzAsMTEgKzEzMCwxNCBAQCBwdWJsaWM6CiAKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xP
YmplY3RzLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXIuaD4KKyNpbmNsdWRlIDx0dXBsZT4KKyNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4KKyNp
bmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
IAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwor
CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIGNsYXNzIEFs
dGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyOwpAQCAtMTQyLDcgKzE0NSw3IEBAIGNsYXNz
IEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyOwogCiBjbGFzcyBEb21haW5CYWNrZW5k
RGlzcGF0Y2hlckhhbmRsZXIgewogcHVibGljOgotICAgIHZpcnR1YWwgdm9pZCBDb21tYW5kKEVy
cm9yU3RyaW5nJikgPSAwOworICAgIHZpcnR1YWwgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9p
ZD4gQ29tbWFuZCgpID0gMDsKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIH5Eb21haW5CYWNrZW5k
RGlzcGF0Y2hlckhhbmRsZXIoKTsKIH07CkBAIC0xNTAsOSArMTUzLDkgQEAgcHJvdGVjdGVkOgog
Y2xhc3MgRG9tYWluQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgU3VwcGxlbWVudGFs
QmFja2VuZERpc3BhdGNoZXIgewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8RG9tYWluQmFja2Vu
ZERpc3BhdGNoZXI+IGNyZWF0ZShCYWNrZW5kRGlzcGF0Y2hlciYsIERvbWFpbkJhY2tlbmREaXNw
YXRjaGVySGFuZGxlciopOwotICAgIHZvaWQgZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0
IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpIGZpbmFsOworICAg
IHZvaWQgZGlzcGF0Y2gobG9uZyBwcm90b2NvbF9yZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgcHJv
dG9jb2xfbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX21lc3NhZ2UpIGZpbmFs
OwogcHJpdmF0ZToKLSAgICB2b2lkIENvbW1hbmQobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09O
OjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7CisgICAgdm9pZCBDb21tYW5kKGxvbmcgcHJvdG9jb2xf
cmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX3BhcmFtZXRlcnMpOwog
I2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogcHVibGljOgogICAg
IHZvaWQgc2V0QWx0ZXJuYXRlRGlzcGF0Y2hlcihBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0
Y2hlciogYWx0ZXJuYXRlRGlzcGF0Y2hlcikgeyBtX2FsdGVybmF0ZURpc3BhdGNoZXIgPSBhbHRl
cm5hdGVEaXNwYXRjaGVyOyB9CkBAIC0yMDEsOSArMjA0LDcgQEAgcHJpdmF0ZToKICNpbmNsdWRl
ICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9J
bnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CiAj
aW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAjaW5j
bHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgpAQCAtMjI1LDM4ICsyMjYs
MzggQEAgRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkRvbWFpbkJhY2tlbmREaXNwYXRjaGVyKEJh
Y2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlzcGEKICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5y
ZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4oIkRvbWFpbiJfcywgdGhpcyk7CiB9CiAKLXZvaWQg
RG9tYWluQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBT
dHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKQordm9pZCBEb21haW5C
YWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyBwcm90b2NvbF9yZXF1ZXN0SWQsIGNvbnN0
IFN0cmluZyYgcHJvdG9jb2xfbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX21l
c3NhZ2UpCiB7CiAgICAgUmVmPERvbWFpbkJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlz
KTsKIAotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnM7Ci0gICAgbWVzc2FnZS0+
Z2V0T2JqZWN0KCJwYXJhbXMiX3MsIHBhcmFtZXRlcnMpOworICAgIGF1dG8gcHJvdG9jb2xfcGFy
YW1ldGVycyA9IHByb3RvY29sX21lc3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9zKTsKIAotICAg
IGlmIChtZXRob2QgPT0gIkNvbW1hbmQiKSB7Ci0gICAgICAgIENvbW1hbmQocmVxdWVzdElkLCBX
VEZNb3ZlKHBhcmFtZXRlcnMpKTsKKyAgICBpZiAocHJvdG9jb2xfbWV0aG9kID09ICJDb21tYW5k
IikgeworICAgICAgICBDb21tYW5kKHByb3RvY29sX3JlcXVlc3RJZCwgV1RGTW92ZShwcm90b2Nv
bF9wYXJhbWV0ZXJzKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBtX2JhY2tlbmRE
aXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2RO
b3RGb3VuZCwgIidEb21haW4uIiArIG1ldGhvZCArICInIHdhcyBub3QgZm91bmQiKTsKKyAgICBt
X2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVy
OjpNZXRob2ROb3RGb3VuZCwgIidEb21haW4uIiArIHByb3RvY29sX21ldGhvZCArICInIHdhcyBu
b3QgZm91bmQiKTsKIH0KIAotdm9pZCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Q29tbWFuZChs
b25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikKK3ZvaWQgRG9tYWluQmFja2Vu
ZERpc3BhdGNoZXI6OkNvbW1hbmQobG9uZyBwcm90b2NvbF9yZXF1ZXN0SWQsIFJlZlB0cjxKU09O
OjpPYmplY3Q+JiYpCiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hF
UlMpCiAgICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0
ZURpc3BhdGNoZXItPkNvbW1hbmQocmVxdWVzdElkKTsKKyAgICAgICAgbV9hbHRlcm5hdGVEaXNw
YXRjaGVyLT5Db21tYW5kKHByb3RvY29sX3JlcXVlc3RJZCk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAK
LSAgICBFcnJvclN0cmluZyBlcnJvcjsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBK
U09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIG1fYWdlbnQtPkNvbW1hbmQoZXJyb3IpOworICAg
IGF1dG8gcmVzdWx0ID0gbV9hZ2VudC0+Q29tbWFuZCgpOworICAgIGlmICghcmVzdWx0KSB7Cisg
ICAgICAgIEFTU0VSVCghcmVzdWx0LmVycm9yKCkuaXNFbXB0eSgpKTsKKyAgICAgICAgbV9iYWNr
ZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2Vy
dmVyRXJyb3IsIHJlc3VsdC5lcnJvcigpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAg
IGlmICghZXJyb3IubGVuZ3RoKCkpCi0gICAgICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRS
ZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUocmVzdWx0KSwgZmFsc2UpOwotICAgIGVsc2UKLSAg
ICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlz
cGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1vdmUoZXJyb3IpKTsKKyAgICBhdXRvIHByb3RvY29s
X2pzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBtX2JhY2tlbmREaXNw
YXRjaGVyLT5zZW5kUmVzcG9uc2UocHJvdG9jb2xfcmVxdWVzdElkLCBXVEZNb3ZlKHByb3RvY29s
X2pzb25NZXNzYWdlKSwgZmFsc2UpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKQEAg
LTI5Nyw2ICsyOTgsNyBAQCB2b2lkIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpDb21tYW5kKGxv
bmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQogCiAjaW5jbHVkZSAiVGVzdFBy
b3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8
d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVz
cGFjZSBJbnNwZWN0b3IgewpAQCAtMzQ5LDE2ICszNTEsMTUgQEAgcHJpdmF0ZToKICNpbmNsdWRl
ICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+
CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCiB2b2lkIERvbWFpbkZyb250ZW5kRGlzcGF0Y2hl
cjo6RXZlbnQoKQogewotICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6
T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3Ms
ICJEb21haW4uRXZlbnQiX3MpOworICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09O
OjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJpbmco
Im1ldGhvZCJfcywgIkRvbWFpbi5FdmVudCJfcyk7CiAKLSAgICBtX2Zyb250ZW5kUm91dGVyLnNl
bmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOworICAgIG1fZnJvbnRlbmRSb3V0
ZXIuc2VuZEV2ZW50KHByb3RvY29sX2pzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgpAQCAtMzk4LDcgKzM5OSw5IEBAIHZvaWQgRG9tYWlu
RnJvbnRlbmREaXNwYXRjaGVyOjpFdmVudCgpCiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYvQXNz
ZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL09w
dGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJ
bnNwZWN0b3IgewogCkBAIC00NTIsOCArNDU1LDcgQEAgbmFtZXNwYWNlIFByb3RvY29sIHsKICNp
bmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAKLSNp
bmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Cisj
aW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKQEAg
LTUwOSw3ICs1MTEsNyBAQCBjbGFzcyBPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNo
ZXIgZmluYWwgOiBwdWJsaWMgQWx0ZXJuYXRlRG9tYWluQmFja2VuZAogICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIE9iakNJbnNwZWN0b3JEb21haW5CYWNrZW5kRGlz
cGF0Y2hlcihpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPiBoYW5kbGVyKSB7IG1f
ZGVsZWdhdGUgPSBoYW5kbGVyOyB9Ci0gICAgdm9pZCBDb21tYW5kKGxvbmcgcmVxdWVzdElkKSBm
aW5hbDsKKyAgICB2b2lkIENvbW1hbmQobG9uZyBwcm90b2NvbF9yZXF1ZXN0SWQpIGZpbmFsOwog
cHJpdmF0ZToKICAgICBSZXRhaW5QdHI8aWQ8VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxl
cj4+IG1fZGVsZWdhdGU7CiB9OwpAQCAtNTU3LDIxICs1NTksMjIgQEAgcHJpdmF0ZToKIAogbmFt
ZXNwYWNlIEluc3BlY3RvciB7CiAKLXZvaWQgT2JqQ0luc3BlY3RvckRvbWFpbkJhY2tlbmREaXNw
YXRjaGVyOjpDb21tYW5kKGxvbmcgcmVxdWVzdElkKQordm9pZCBPYmpDSW5zcGVjdG9yRG9tYWlu
QmFja2VuZERpc3BhdGNoZXI6OkNvbW1hbmQobG9uZyBwcm90b2NvbF9yZXF1ZXN0SWQpCiB7CiAg
ICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKENvbW1hbmRX
aXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6KV0pIHsKLSAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRj
aGVyOjpNZXRob2ROb3RGb3VuZCwgIidEb21haW4uQ29tbWFuZCcgd2FzIG5vdCBmb3VuZCJfcyk7
CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocHJvdG9j
b2xfcmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRG9tYWlu
LkNvbW1hbmQnIHdhcyBub3QgZm91bmQiX3MpOwogICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigp
LT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWQg
ZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7Ci0gICAgICAgIGJhY2tlbmREaXNw
YXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hl
cjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVw
b3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9yZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpT
ZXJ2ZXJFcnJvciwgZXJyb3IpOwogICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVu
ZGluZ0Vycm9ycygpOwogICAgIH07CiAKICAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeewotICAg
ICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBKU09OOjpP
YmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7CisgICAgICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3Nh
Z2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigp
LT5zZW5kUmVzcG9uc2UocHJvdG9jb2xfcmVxdWVzdElkLCBXVEZNb3ZlKHByb3RvY29sX2pzb25N
ZXNzYWdlKSwgZmFsc2UpOwogICAgIH07CiAKICAgICBbbV9kZWxlZ2F0ZSBDb21tYW5kV2l0aEVy
cm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNr
XTsKQEAgLTc3Myw5ICs3NzYsOSBAQCB1c2luZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwogewogICAg
IGNvbnN0IEZyb250ZW5kUm91dGVyJiByb3V0ZXIgPSBfY29udHJvbGxlci0+ZnJvbnRlbmRSb3V0
ZXIoKTsKIAotICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0
OjpjcmVhdGUoKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJEb21h
aW4uRXZlbnQiX3MpOwotICAgIHJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0
cmluZygpKTsKKyAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0Ojpj
cmVhdGUoKTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3Ms
ICJEb21haW4uRXZlbnQiX3MpOworICAgIHJvdXRlci5zZW5kRXZlbnQocHJvdG9jb2xfanNvbk1l
c3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKIH0KIAogQGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2RvbWFpbi10YXJn
ZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uLXJlc3VsdCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9kb21haW4t
dGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNvbi1yZXN1bHQKaW5k
ZXggYTc3ZmUzNTg5Nzg4NTM0NzUwNTYyMjNlMDE5YTFiMGZiMWQ0N2U2OC4uZWI5ZTUwMDM1Nzk0
NGNiODA0ZDYzNjYxMzllNGJiODBkNTY2YWFhYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2RvbWFpbi10YXJnZXRUeXBl
LW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxlVHlwZS5qc29uLXJlc3VsdAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZG9tYWluLXRh
cmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVUeXBlLmpzb24tcmVzdWx0CkBAIC03
MCw3ICs3MCw3IEBAIEluc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIkRvbWFpbiIsIFsi
cGFnZSJdKTsKIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQog
Ci0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xP
YmplY3RzLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXIuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRl
ci5oPgogCkBAIC04OCw3ICs4OCw3IEBAIHByaXZhdGU6CiBjbGFzcyBBbHRlcm5hdGVEb21haW5C
YWNrZW5kRGlzcGF0Y2hlciA6IHB1YmxpYyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7CiBw
dWJsaWM6CiAgICAgdmlydHVhbCB+QWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIoKSB7
IH0KLSAgICB2aXJ0dWFsIHZvaWQgQ29tbWFuZChsb25nIGNhbGxJZCkgPSAwOworICAgIHZpcnR1
YWwgdm9pZCBDb21tYW5kKGxvbmcgcHJvdG9jb2xfcmVxdWVzdElkKSA9IDA7CiB9OwogCiB9IC8v
IG5hbWVzcGFjZSBJbnNwZWN0b3IKQEAgLTEzMCwxMSArMTMwLDE0IEBAIHB1YmxpYzoKIAogI2lu
Y2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9J
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHR1cGxlPgorI2luY2x1ZGUg
PHd0Zi9FeHBlY3RlZC5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAotdHlwZWRlZiBT
dHJpbmcgRXJyb3JTdHJpbmc7CisKIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJ
U1BBVENIRVJTKQogY2xhc3MgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXI7CkBAIC0x
NDIsNyArMTQ1LDcgQEAgY2xhc3MgQWx0ZXJuYXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXI7CiAK
IGNsYXNzIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7CiBwdWJsaWM6Ci0gICAgdmly
dHVhbCB2b2lkIENvbW1hbmQoRXJyb3JTdHJpbmcmKSA9IDA7CisgICAgdmlydHVhbCBQcm90b2Nv
bDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBDb21tYW5kKCkgPSAwOwogcHJvdGVjdGVkOgogICAgIHZp
cnR1YWwgfkRvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpOwogfTsKQEAgLTE1MCw5ICsx
NTMsOSBAQCBwcm90ZWN0ZWQ6CiBjbGFzcyBEb21haW5CYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6
IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7CiBwdWJsaWM6CiAgICAgc3Rh
dGljIFJlZjxEb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4gY3JlYXRlKEJhY2tlbmREaXNwYXRjaGVy
JiwgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7Ci0gICAgdm9pZCBkaXNwYXRjaChs
b25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYg
bWVzc2FnZSkgZmluYWw7CisgICAgdm9pZCBkaXNwYXRjaChsb25nIHByb3RvY29sX3JlcXVlc3RJ
ZCwgY29uc3QgU3RyaW5nJiBwcm90b2NvbF9tZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgcHJv
dG9jb2xfbWVzc2FnZSkgZmluYWw7CiBwcml2YXRlOgotICAgIHZvaWQgQ29tbWFuZChsb25nIHJl
cXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzKTsKKyAgICB2b2lkIENv
bW1hbmQobG9uZyBwcm90b2NvbF9yZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcHJv
dG9jb2xfcGFyYW1ldGVycyk7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFU
Q0hFUlMpCiBwdWJsaWM6CiAgICAgdm9pZCBzZXRBbHRlcm5hdGVEaXNwYXRjaGVyKEFsdGVybmF0
ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyKiBhbHRlcm5hdGVEaXNwYXRjaGVyKSB7IG1fYWx0ZXJu
YXRlRGlzcGF0Y2hlciA9IGFsdGVybmF0ZURpc3BhdGNoZXI7IH0KQEAgLTIwMSw5ICsyMDQsNyBA
QCBwcml2YXRlOgogI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKIAogI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8
d3RmL0pTT05WYWx1ZXMuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNs
dWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKICNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJz
LmgiCkBAIC0yMjUsMzggKzIyNiwzOCBAQCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6RG9tYWlu
QmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXImIGJhY2tlbmREaXNwYQogICAgIG1f
YmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbigiRG9tYWluIl9z
LCB0aGlzKTsKIH0KIAotdm9pZCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2gobG9u
ZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1l
c3NhZ2UpCit2b2lkIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHByb3Rv
Y29sX3JlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBwcm90b2NvbF9tZXRob2QsIFJlZjxKU09OOjpP
YmplY3Q+JiYgcHJvdG9jb2xfbWVzc2FnZSkKIHsKICAgICBSZWY8RG9tYWluQmFja2VuZERpc3Bh
dGNoZXI+IHByb3RlY3QoKnRoaXMpOwogCi0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1l
dGVyczsKLSAgICBtZXNzYWdlLT5nZXRPYmplY3QoInBhcmFtcyJfcywgcGFyYW1ldGVycyk7Cisg
ICAgYXV0byBwcm90b2NvbF9wYXJhbWV0ZXJzID0gcHJvdG9jb2xfbWVzc2FnZS0+Z2V0T2JqZWN0
KCJwYXJhbXMiX3MpOwogCi0gICAgaWYgKG1ldGhvZCA9PSAiQ29tbWFuZCIpIHsKLSAgICAgICAg
Q29tbWFuZChyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVycykpOworICAgIGlmIChwcm90b2Nv
bF9tZXRob2QgPT0gIkNvbW1hbmQiKSB7CisgICAgICAgIENvbW1hbmQocHJvdG9jb2xfcmVxdWVz
dElkLCBXVEZNb3ZlKHByb3RvY29sX3BhcmFtZXRlcnMpKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2Vu
ZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RvbWFpbi4iICsgbWV0aG9kICsgIicgd2Fz
IG5vdCBmb3VuZCIpOworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJy
b3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RvbWFpbi4iICsgcHJvdG9j
b2xfbWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOwogfQogCi12b2lkIERvbWFpbkJhY2tlbmRE
aXNwYXRjaGVyOjpDb21tYW5kKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYm
KQordm9pZCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Q29tbWFuZChsb25nIHByb3RvY29sX3Jl
cXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9S
X0FMVEVSTkFURV9ESVNQQVRDSEVSUykKICAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7
Ci0gICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+Q29tbWFuZChyZXF1ZXN0SWQpOworICAg
ICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPkNvbW1hbmQocHJvdG9jb2xfcmVxdWVzdElkKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVS
TkFURV9ESVNQQVRDSEVSUykKIAotICAgIEVycm9yU3RyaW5nIGVycm9yOwotICAgIFJlZjxKU09O
OjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgbV9hZ2VudC0+
Q29tbWFuZChlcnJvcik7CisgICAgYXV0byByZXN1bHQgPSBtX2FnZW50LT5Db21tYW5kKCk7Cisg
ICAgaWYgKCFyZXN1bHQpIHsKKyAgICAgICAgQVNTRVJUKCFyZXN1bHQuZXJyb3IoKS5pc0VtcHR5
KCkpOworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJh
Y2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgcmVzdWx0LmVycm9yKCkpOworICAgICAgICBy
ZXR1cm47CisgICAgfQogCi0gICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKLSAgICAgICAgbV9iYWNr
ZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBm
YWxzZSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90
b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikp
OworICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgp
OworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShwcm90b2NvbF9yZXF1ZXN0
SWQsIFdURk1vdmUocHJvdG9jb2xfanNvbk1lc3NhZ2UpLCBmYWxzZSk7CiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIEluc3BlY3RvcgpAQCAtMjk3LDYgKzI5OCw3IEBAIHZvaWQgRG9tYWluQmFja2VuZERp
c3BhdGNoZXI6OkNvbW1hbmQobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYp
CiAKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8d3RmL0pTT05W
YWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CkBAIC0zNDksMTYgKzM1MSwxNSBA
QCBwcml2YXRlOgogI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCiAKICNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUg
PHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKIHZvaWQgRG9t
YWluRnJvbnRlbmREaXNwYXRjaGVyOjpFdmVudCgpCiB7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4g
anNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIGpzb25NZXNzYWdlLT5z
ZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRvbWFpbi5FdmVudCJfcyk7CisgICAgYXV0byBwcm90b2Nv
bF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgcHJvdG9jb2xfanNv
bk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiRG9tYWluLkV2ZW50Il9zKTsKIAotICAg
IG1fZnJvbnRlbmRSb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7
CisgICAgbV9mcm9udGVuZFJvdXRlci5zZW5kRXZlbnQocHJvdG9jb2xfanNvbk1lc3NhZ2UtPnRv
SlNPTlN0cmluZygpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCkBAIC0zOTgsNyAr
Mzk5LDkgQEAgdm9pZCBEb21haW5Gcm9udGVuZERpc3BhdGNoZXI6OkV2ZW50KCkKICNwcmFnbWEg
b25jZQogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5o
PgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMu
aD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKQEAgLTQ1Miw4ICs0NTUsNyBAQCBuYW1l
c3BhY2UgUHJvdG9jb2wgewogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlRlc3RQcm90
b2NvbE9iamVjdHMuaCIKIAotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0
Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogCiBuYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKIApAQCAtNTA5LDcgKzUxMSw3IEBAIGNsYXNzIE9iakNJbnNwZWN0b3JE
b21haW5CYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBBbHRlcm5hdGVEb21haW5CYWNr
ZW5kCiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgT2JqQ0luc3Bl
Y3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyKGlkPFRlc3RQcm90b2NvbERvbWFpbkRvbWFpbkhh
bmRsZXI+IGhhbmRsZXIpIHsgbV9kZWxlZ2F0ZSA9IGhhbmRsZXI7IH0KLSAgICB2b2lkIENvbW1h
bmQobG9uZyByZXF1ZXN0SWQpIGZpbmFsOworICAgIHZvaWQgQ29tbWFuZChsb25nIHByb3RvY29s
X3JlcXVlc3RJZCkgZmluYWw7CiBwcml2YXRlOgogICAgIFJldGFpblB0cjxpZDxUZXN0UHJvdG9j
b2xEb21haW5Eb21haW5IYW5kbGVyPj4gbV9kZWxlZ2F0ZTsKIH07CkBAIC01NTcsMjEgKzU1OSwy
MiBAQCBwcml2YXRlOgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAotdm9pZCBPYmpDSW5zcGVj
dG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkNvbW1hbmQobG9uZyByZXF1ZXN0SWQpCit2b2lk
IE9iakNJbnNwZWN0b3JEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Q29tbWFuZChsb25nIHByb3Rv
Y29sX3JlcXVlc3RJZCkKIHsKICAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3Rv
cjpAc2VsZWN0b3IoQ29tbWFuZFdpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazopXSkg
ewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVl
c3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RvbWFpbi5Db21tYW5k
JyB3YXMgbm90IGZvdW5kIl9zKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0
UHJvdG9jb2xFcnJvcihwcm90b2NvbF9yZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRo
b2ROb3RGb3VuZCwgIidEb21haW4uQ29tbWFuZCcgd2FzIG5vdCBmb3VuZCJfcyk7CiAgICAgICAg
IGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKICAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsK
LSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0
SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgICAgICBiYWNr
ZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHByb3RvY29sX3JlcXVlc3RJZCwg
QmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CiAgICAgICAgIGJhY2tlbmRE
aXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgfTsKIAogICAgIGlkIHN1Y2Nl
c3NDYWxsYmFjayA9IF57Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25z
ZShyZXF1ZXN0SWQsIEpTT046Ok9iamVjdDo6Y3JlYXRlKCksIGZhbHNlKTsKKyAgICAgICAgYXV0
byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAg
IGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShwcm90b2NvbF9yZXF1ZXN0SWQsIFdU
Rk1vdmUocHJvdG9jb2xfanNvbk1lc3NhZ2UpLCBmYWxzZSk7CiAgICAgfTsKIAogICAgIFttX2Rl
bGVnYXRlIENvbW1hbmRXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxs
YmFjazpzdWNjZXNzQ2FsbGJhY2tdOwpAQCAtNzczLDkgKzc3Niw5IEBAIHVzaW5nIG5hbWVzcGFj
ZSBJbnNwZWN0b3I7CiB7CiAgICAgY29uc3QgRnJvbnRlbmRSb3V0ZXImIHJvdXRlciA9IF9jb250
cm9sbGVyLT5mcm9udGVuZFJvdXRlcigpOwogCi0gICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1l
c3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIGpzb25NZXNzYWdlLT5zZXRTdHJp
bmcoIm1ldGhvZCJfcywgIkRvbWFpbi5FdmVudCJfcyk7Ci0gICAgcm91dGVyLnNlbmRFdmVudChq
c29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOworICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3Nh
Z2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5z
ZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRvbWFpbi5FdmVudCJfcyk7CisgICAgcm91dGVyLnNlbmRF
dmVudChwcm90b2NvbF9qc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwogfQogCiBAZW5kCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
ZXhwZWN0ZWQvZG9tYWluLXRhcmdldFR5cGVzLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2RvbWFpbi10YXJnZXRUeXBl
cy5qc29uLXJlc3VsdAppbmRleCAwYWQ2ZDA0NDYwMWMyZWE0MDgzODhiY2YyNTRmYzY2NTQ1Zjdj
ZDA0Li5iODhjNDM0ZTdjYWViOWQ0MjQ1ZWQ2NGUyMDQ0YjkyMWM3YjlhNmZlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQv
ZG9tYWluLXRhcmdldFR5cGVzLmpzb24tcmVzdWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9kb21haW4tdGFyZ2V0VHlwZXMuanNv
bi1yZXN1bHQKQEAgLTcwLDcgKzcwLDcgQEAgSW5zcGVjdG9yQmFja2VuZC5hY3RpdmF0ZURvbWFp
bigiRG9tYWluIiwgbnVsbCk7CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQ
QVRDSEVSUykKIAotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVkZSAiVGVz
dFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJv
bnRlbmRSb3V0ZXIuaD4KIApAQCAtODgsNyArODgsNyBAQCBwcml2YXRlOgogY2xhc3MgQWx0ZXJu
YXRlRG9tYWluQmFja2VuZERpc3BhdGNoZXIgOiBwdWJsaWMgQWx0ZXJuYXRlQmFja2VuZERpc3Bh
dGNoZXIgewogcHVibGljOgogICAgIHZpcnR1YWwgfkFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNw
YXRjaGVyKCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIENvbW1hbmQobG9uZyBjYWxsSWQpID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgQ29tbWFuZChsb25nIHByb3RvY29sX3JlcXVlc3RJZCkgPSAwOwog
fTsKIAogfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCkBAIC0xMzAsMTEgKzEzMCwxNCBAQCBwdWJs
aWM6CiAKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx0dXBsZT4K
KyNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAK
LXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FM
VEVSTkFURV9ESVNQQVRDSEVSUykKIGNsYXNzIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRj
aGVyOwpAQCAtMTQyLDcgKzE0NSw3IEBAIGNsYXNzIEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNw
YXRjaGVyOwogCiBjbGFzcyBEb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewogcHVibGlj
OgotICAgIHZpcnR1YWwgdm9pZCBDb21tYW5kKEVycm9yU3RyaW5nJikgPSAwOworICAgIHZpcnR1
YWwgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gQ29tbWFuZCgpID0gMDsKIHByb3RlY3Rl
ZDoKICAgICB2aXJ0dWFsIH5Eb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKTsKIH07CkBA
IC0xNTAsOSArMTUzLDkgQEAgcHJvdGVjdGVkOgogY2xhc3MgRG9tYWluQmFja2VuZERpc3BhdGNo
ZXIgZmluYWwgOiBwdWJsaWMgU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIgewogcHVibGlj
OgogICAgIHN0YXRpYyBSZWY8RG9tYWluQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShCYWNrZW5k
RGlzcGF0Y2hlciYsIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwotICAgIHZvaWQg
ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6
T2JqZWN0PiYmIG1lc3NhZ2UpIGZpbmFsOworICAgIHZvaWQgZGlzcGF0Y2gobG9uZyBwcm90b2Nv
bF9yZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgcHJvdG9jb2xfbWV0aG9kLCBSZWY8SlNPTjo6T2Jq
ZWN0PiYmIHByb3RvY29sX21lc3NhZ2UpIGZpbmFsOwogcHJpdmF0ZToKLSAgICB2b2lkIENvbW1h
bmQobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7Cisg
ICAgdm9pZCBDb21tYW5kKGxvbmcgcHJvdG9jb2xfcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiYmIHByb3RvY29sX3BhcmFtZXRlcnMpOwogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJO
QVRFX0RJU1BBVENIRVJTKQogcHVibGljOgogICAgIHZvaWQgc2V0QWx0ZXJuYXRlRGlzcGF0Y2hl
cihBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlciogYWx0ZXJuYXRlRGlzcGF0Y2hlcikg
eyBtX2FsdGVybmF0ZURpc3BhdGNoZXIgPSBhbHRlcm5hdGVEaXNwYXRjaGVyOyB9CkBAIC0yMDEs
OSArMjA0LDcgQEAgcHJpdmF0ZToKICNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgi
CiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgot
I2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVk
Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiAjaWYgRU5BQkxFKElOU1BFQ1RP
Ul9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAjaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmRE
aXNwYXRjaGVycy5oIgpAQCAtMjI1LDM4ICsyMjYsMzggQEAgRG9tYWluQmFja2VuZERpc3BhdGNo
ZXI6OkRvbWFpbkJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRGlz
cGEKICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZWdpc3RlckRpc3BhdGNoZXJGb3JEb21haW4o
IkRvbWFpbiJfcywgdGhpcyk7CiB9CiAKLXZvaWQgRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OmRp
c3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9i
amVjdD4mJiBtZXNzYWdlKQordm9pZCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6ZGlzcGF0Y2go
bG9uZyBwcm90b2NvbF9yZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgcHJvdG9jb2xfbWV0aG9kLCBS
ZWY8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX21lc3NhZ2UpCiB7CiAgICAgUmVmPERvbWFpbkJh
Y2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKIAotICAgIFJlZlB0cjxKU09OOjpPYmpl
Y3Q+IHBhcmFtZXRlcnM7Ci0gICAgbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3MsIHBhcmFt
ZXRlcnMpOworICAgIGF1dG8gcHJvdG9jb2xfcGFyYW1ldGVycyA9IHByb3RvY29sX21lc3NhZ2Ut
PmdldE9iamVjdCgicGFyYW1zIl9zKTsKIAotICAgIGlmIChtZXRob2QgPT0gIkNvbW1hbmQiKSB7
Ci0gICAgICAgIENvbW1hbmQocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKKyAgICBp
ZiAocHJvdG9jb2xfbWV0aG9kID09ICJDb21tYW5kIikgeworICAgICAgICBDb21tYW5kKHByb3Rv
Y29sX3JlcXVlc3RJZCwgV1RGTW92ZShwcm90b2NvbF9wYXJhbWV0ZXJzKSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVy
cm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEb21haW4uIiArIG1ldGhv
ZCArICInIHdhcyBub3QgZm91bmQiKTsKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQ
cm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEb21haW4u
IiArIHByb3RvY29sX21ldGhvZCArICInIHdhcyBub3QgZm91bmQiKTsKIH0KIAotdm9pZCBEb21h
aW5CYWNrZW5kRGlzcGF0Y2hlcjo6Q29tbWFuZChsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046
Ok9iamVjdD4mJikKK3ZvaWQgRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkNvbW1hbmQobG9uZyBw
cm90b2NvbF9yZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCiB7CiAjaWYgRU5BQkxF
KElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAgICAgaWYgKG1fYWx0ZXJuYXRlRGlz
cGF0Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPkNvbW1hbmQocmVxdWVz
dElkKTsKKyAgICAgICAgbV9hbHRlcm5hdGVEaXNwYXRjaGVyLT5Db21tYW5kKHByb3RvY29sX3Jl
cXVlc3RJZCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKElOU1BF
Q1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAKLSAgICBFcnJvclN0cmluZyBlcnJvcjsKLSAg
ICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAg
IG1fYWdlbnQtPkNvbW1hbmQoZXJyb3IpOworICAgIGF1dG8gcmVzdWx0ID0gbV9hZ2VudC0+Q29t
bWFuZCgpOworICAgIGlmICghcmVzdWx0KSB7CisgICAgICAgIEFTU0VSVCghcmVzdWx0LmVycm9y
KCkuaXNFbXB0eSgpKTsKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9j
b2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIHJlc3VsdC5lcnJvcigpKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIGlmICghZXJyb3IubGVuZ3RoKCkpCi0gICAg
ICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIFdURk1vdmUo
cmVzdWx0KSwgZmFsc2UpOwotICAgIGVsc2UKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+
cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIFdURk1v
dmUoZXJyb3IpKTsKKyAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0
OjpjcmVhdGUoKTsKKyAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5zZW5kUmVzcG9uc2UocHJvdG9j
b2xfcmVxdWVzdElkLCBXVEZNb3ZlKHByb3RvY29sX2pzb25NZXNzYWdlKSwgZmFsc2UpOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKQEAgLTI5Nyw2ICsyOTgsNyBAQCB2b2lkIERvbWFp
bkJhY2tlbmREaXNwYXRjaGVyOjpDb21tYW5kKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6
T2JqZWN0PiYmKQogCiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUg
PHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewpAQCAtMzQ5LDE2
ICszNTEsMTUgQEAgcHJpdmF0ZToKICNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5o
IgogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4K
LSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3Igewog
CiB2b2lkIERvbWFpbkZyb250ZW5kRGlzcGF0Y2hlcjo6RXZlbnQoKQogewotICAgIFJlZjxKU09O
OjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBqc29u
TWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJEb21haW4uRXZlbnQiX3MpOworICAgIGF1
dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIHBy
b3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRvbWFpbi5FdmVudCJf
cyk7CiAKLSAgICBtX2Zyb250ZW5kUm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09O
U3RyaW5nKCkpOworICAgIG1fZnJvbnRlbmRSb3V0ZXIuc2VuZEV2ZW50KHByb3RvY29sX2pzb25N
ZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgpA
QCAtMzk4LDcgKzM5OSw5IEBAIHZvaWQgRG9tYWluRnJvbnRlbmREaXNwYXRjaGVyOjpFdmVudCgp
CiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3Rv
Y29sVHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9K
U09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC00NTIsOCArNDU1
LDcgQEAgbmFtZXNwYWNlIFByb3RvY29sIHsKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRl
ICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAKLSNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KLSNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4K
IAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKQEAgLTUwOSw3ICs1MTEsNyBAQCBjbGFzcyBPYmpD
SW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgQWx0ZXJuYXRl
RG9tYWluQmFja2VuZAogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAg
IE9iakNJbnNwZWN0b3JEb21haW5CYWNrZW5kRGlzcGF0Y2hlcihpZDxUZXN0UHJvdG9jb2xEb21h
aW5Eb21haW5IYW5kbGVyPiBoYW5kbGVyKSB7IG1fZGVsZWdhdGUgPSBoYW5kbGVyOyB9Ci0gICAg
dm9pZCBDb21tYW5kKGxvbmcgcmVxdWVzdElkKSBmaW5hbDsKKyAgICB2b2lkIENvbW1hbmQobG9u
ZyBwcm90b2NvbF9yZXF1ZXN0SWQpIGZpbmFsOwogcHJpdmF0ZToKICAgICBSZXRhaW5QdHI8aWQ8
VGVzdFByb3RvY29sRG9tYWluRG9tYWluSGFuZGxlcj4+IG1fZGVsZWdhdGU7CiB9OwpAQCAtNTU3
LDIxICs1NTksMjIgQEAgcHJpdmF0ZToKIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKLXZvaWQg
T2JqQ0luc3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpDb21tYW5kKGxvbmcgcmVxdWVz
dElkKQordm9pZCBPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkNvbW1hbmQo
bG9uZyBwcm90b2NvbF9yZXF1ZXN0SWQpCiB7CiAgICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25k
c1RvU2VsZWN0b3I6QHNlbGVjdG9yKENvbW1hbmRXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2Fs
bGJhY2s6KV0pIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xF
cnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEb21h
aW4uQ29tbWFuZCcgd2FzIG5vdCBmb3VuZCJfcyk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVy
KCktPnJlcG9ydFByb3RvY29sRXJyb3IocHJvdG9jb2xfcmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0
Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInRG9tYWluLkNvbW1hbmQnIHdhcyBub3QgZm91bmQiX3Mp
OwogICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcg
KmVycm9yKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJy
b3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAg
ICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9y
ZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwogICAgICAg
ICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgIH07CiAKICAg
ICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5z
ZW5kUmVzcG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7Cisg
ICAgICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgp
OworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocHJvdG9jb2xfcmVx
dWVzdElkLCBXVEZNb3ZlKHByb3RvY29sX2pzb25NZXNzYWdlKSwgZmFsc2UpOwogICAgIH07CiAK
ICAgICBbbV9kZWxlZ2F0ZSBDb21tYW5kV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBz
dWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsKQEAgLTc3Myw5ICs3NzYsOSBAQCB1c2lu
ZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwogewogICAgIGNvbnN0IEZyb250ZW5kUm91dGVyJiByb3V0
ZXIgPSBfY29udHJvbGxlci0+ZnJvbnRlbmRSb3V0ZXIoKTsKIAotICAgIFJlZjxKU09OOjpPYmpl
Y3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBqc29uTWVzc2Fn
ZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJEb21haW4uRXZlbnQiX3MpOwotICAgIHJvdXRlci5z
ZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKKyAgICBhdXRvIHByb3RvY29s
X2pzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBwcm90b2NvbF9qc29u
TWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJEb21haW4uRXZlbnQiX3MpOworICAgIHJv
dXRlci5zZW5kRXZlbnQocHJvdG9jb2xfanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKIH0K
IAogQGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2V4cGVjdGVkL2RvbWFpbnMtd2l0aC12YXJ5aW5nLWNvbW1hbmQtc2l6ZXMuanNv
bi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMv
ZXhwZWN0ZWQvZG9tYWlucy13aXRoLXZhcnlpbmctY29tbWFuZC1zaXplcy5qc29uLXJlc3VsdApp
bmRleCA0NzViODdiZDBjOGRhODUyYjVmOTkwY2IyMWNiM2MyZTA3NjA5OTg0Li44NjkzN2Q1NWIw
NGZiZTMxZTU2YzgzNzEyODI3ZGNiYWRiNjVmN2UzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZG9tYWlucy13aXRoLXZh
cnlpbmctY29tbWFuZC1zaXplcy5qc29uLXJlc3VsdAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZG9tYWlucy13aXRoLXZhcnlpbmct
Y29tbWFuZC1zaXplcy5qc29uLXJlc3VsdApAQCAtNzksNyArNzksNyBAQCBJbnNwZWN0b3JCYWNr
ZW5kLmFjdGl2YXRlRG9tYWluKCJOZXR3b3JrMyIsIG51bGwpOwogCiAjaWYgRU5BQkxFKElOU1BF
Q1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBl
cy5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgogI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CiAKQEAgLTk3LDE5ICs5NywxOSBAQCBw
cml2YXRlOgogY2xhc3MgQWx0ZXJuYXRlTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlciA6IHB1Ymxp
YyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+QWx0
ZXJuYXRlTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcigpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBs
b2FkUmVzb3VyY2UxKGxvbmcgY2FsbElkKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGxvYWRSZXNv
dXJjZTEobG9uZyBwcm90b2NvbF9yZXF1ZXN0SWQpID0gMDsKIH07CiAKIGNsYXNzIEFsdGVybmF0
ZU5ldHdvcmszQmFja2VuZERpc3BhdGNoZXIgOiBwdWJsaWMgQWx0ZXJuYXRlQmFja2VuZERpc3Bh
dGNoZXIgewogcHVibGljOgogICAgIHZpcnR1YWwgfkFsdGVybmF0ZU5ldHdvcmszQmFja2VuZERp
c3BhdGNoZXIoKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlMShsb25nIGNhbGxJ
ZCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UyKGxvbmcgY2FsbElkKSA9IDA7
Ci0gICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJjZTMobG9uZyBjYWxsSWQpID0gMDsKLSAgICB2
aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlNChsb25nIGNhbGxJZCkgPSAwOwotICAgIHZpcnR1YWwg
dm9pZCBsb2FkUmVzb3VyY2U1KGxvbmcgY2FsbElkKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGxv
YWRSZXNvdXJjZTYobG9uZyBjYWxsSWQpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291
cmNlNyhsb25nIGNhbGxJZCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2UxKGxv
bmcgcHJvdG9jb2xfcmVxdWVzdElkKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGxvYWRSZXNvdXJj
ZTIobG9uZyBwcm90b2NvbF9yZXF1ZXN0SWQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJl
c291cmNlMyhsb25nIHByb3RvY29sX3JlcXVlc3RJZCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBs
b2FkUmVzb3VyY2U0KGxvbmcgcHJvdG9jb2xfcmVxdWVzdElkKSA9IDA7CisgICAgdmlydHVhbCB2
b2lkIGxvYWRSZXNvdXJjZTUobG9uZyBwcm90b2NvbF9yZXF1ZXN0SWQpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgbG9hZFJlc291cmNlNihsb25nIHByb3RvY29sX3JlcXVlc3RJZCkgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBsb2FkUmVzb3VyY2U3KGxvbmcgcHJvdG9jb2xfcmVxdWVzdElkKSA9IDA7
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKQEAgLTE1MSwxMSArMTUxLDE0IEBAIHB1
YmxpYzoKIAogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHR1cGxl
PgorI2luY2x1ZGUgPHd0Zi9FeHBlY3RlZC5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgog
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsK
IAotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKIAogI2lmIEVOQUJMRShJTlNQRUNUT1Jf
QUxURVJOQVRFX0RJU1BBVENIRVJTKQogY2xhc3MgQWx0ZXJuYXRlTmV0d29yazFCYWNrZW5kRGlz
cGF0Y2hlcjsKQEAgLTE2NCwyMCArMTY3LDIwIEBAIGNsYXNzIEFsdGVybmF0ZU5ldHdvcmszQmFj
a2VuZERpc3BhdGNoZXI7CiAKIGNsYXNzIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVy
IHsKIHB1YmxpYzoKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlMShFcnJvclN0cmluZyYp
ID0gMDsKKyAgICB2aXJ0dWFsIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGxvYWRSZXNv
dXJjZTEoKSA9IDA7CiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB+TmV0d29yazFCYWNrZW5kRGlz
cGF0Y2hlckhhbmRsZXIoKTsKIH07CiAKIGNsYXNzIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyIHsKIHB1YmxpYzoKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlMShFcnJvclN0
cmluZyYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlMihFcnJvclN0cmluZyYp
ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlMyhFcnJvclN0cmluZyYpID0gMDsK
LSAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlNChFcnJvclN0cmluZyYpID0gMDsKLSAgICB2
aXJ0dWFsIHZvaWQgbG9hZFJlc291cmNlNShFcnJvclN0cmluZyYpID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgbG9hZFJlc291cmNlNihFcnJvclN0cmluZyYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQg
bG9hZFJlc291cmNlNyhFcnJvclN0cmluZyYpID0gMDsKKyAgICB2aXJ0dWFsIFByb3RvY29sOjpF
cnJvclN0cmluZ09yPHZvaWQ+IGxvYWRSZXNvdXJjZTEoKSA9IDA7CisgICAgdmlydHVhbCBQcm90
b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBsb2FkUmVzb3VyY2UyKCkgPSAwOworICAgIHZpcnR1
YWwgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gbG9hZFJlc291cmNlMygpID0gMDsKKyAg
ICB2aXJ0dWFsIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGxvYWRSZXNvdXJjZTQoKSA9
IDA7CisgICAgdmlydHVhbCBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBsb2FkUmVzb3Vy
Y2U1KCkgPSAwOworICAgIHZpcnR1YWwgUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gbG9h
ZFJlc291cmNlNigpID0gMDsKKyAgICB2aXJ0dWFsIFByb3RvY29sOjpFcnJvclN0cmluZ09yPHZv
aWQ+IGxvYWRSZXNvdXJjZTcoKSA9IDA7CiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB+TmV0d29y
azNCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIoKTsKIH07CkBAIC0xODUsOSArMTg4LDkgQEAgcHJv
dGVjdGVkOgogY2xhc3MgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBT
dXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hlciB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxO
ZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImLCBOZXR3
b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciopOwotICAgIHZvaWQgZGlzcGF0Y2gobG9uZyBy
ZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3Nh
Z2UpIGZpbmFsOworICAgIHZvaWQgZGlzcGF0Y2gobG9uZyBwcm90b2NvbF9yZXF1ZXN0SWQsIGNv
bnN0IFN0cmluZyYgcHJvdG9jb2xfbWV0aG9kLCBSZWY8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29s
X21lc3NhZ2UpIGZpbmFsOwogcHJpdmF0ZToKLSAgICB2b2lkIGxvYWRSZXNvdXJjZTEobG9uZyBy
ZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7CisgICAgdm9pZCBs
b2FkUmVzb3VyY2UxKGxvbmcgcHJvdG9jb2xfcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0
PiYmIHByb3RvY29sX3BhcmFtZXRlcnMpOwogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRF
X0RJU1BBVENIRVJTKQogcHVibGljOgogICAgIHZvaWQgc2V0QWx0ZXJuYXRlRGlzcGF0Y2hlcihB
bHRlcm5hdGVOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyKiBhbHRlcm5hdGVEaXNwYXRjaGVyKSB7
IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IGFsdGVybmF0ZURpc3BhdGNoZXI7IH0KQEAgLTIwMiwx
NSArMjA1LDE1IEBAIHByaXZhdGU6CiBjbGFzcyBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyIGZp
bmFsIDogcHVibGljIFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIHsKIHB1YmxpYzoKICAg
ICBzdGF0aWMgUmVmPE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShCYWNrZW5kRGlz
cGF0Y2hlciYsIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7Ci0gICAgdm9pZCBk
aXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09OOjpP
YmplY3Q+JiYgbWVzc2FnZSkgZmluYWw7CisgICAgdm9pZCBkaXNwYXRjaChsb25nIHByb3RvY29s
X3JlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBwcm90b2NvbF9tZXRob2QsIFJlZjxKU09OOjpPYmpl
Y3Q+JiYgcHJvdG9jb2xfbWVzc2FnZSkgZmluYWw7CiBwcml2YXRlOgotICAgIHZvaWQgbG9hZFJl
c291cmNlMShsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJz
KTsKLSAgICB2b2lkIGxvYWRSZXNvdXJjZTIobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpP
YmplY3Q+JiYgcGFyYW1ldGVycyk7Ci0gICAgdm9pZCBsb2FkUmVzb3VyY2UzKGxvbmcgcmVxdWVz
dElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOwotICAgIHZvaWQgbG9hZFJl
c291cmNlNChsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJz
KTsKLSAgICB2b2lkIGxvYWRSZXNvdXJjZTUobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpP
YmplY3Q+JiYgcGFyYW1ldGVycyk7Ci0gICAgdm9pZCBsb2FkUmVzb3VyY2U2KGxvbmcgcmVxdWVz
dElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMpOwotICAgIHZvaWQgbG9hZFJl
c291cmNlNyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJz
KTsKKyAgICB2b2lkIGxvYWRSZXNvdXJjZTEobG9uZyBwcm90b2NvbF9yZXF1ZXN0SWQsIFJlZlB0
cjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfcGFyYW1ldGVycyk7CisgICAgdm9pZCBsb2FkUmVz
b3VyY2UyKGxvbmcgcHJvdG9jb2xfcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBy
b3RvY29sX3BhcmFtZXRlcnMpOworICAgIHZvaWQgbG9hZFJlc291cmNlMyhsb25nIHByb3RvY29s
X3JlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9wYXJhbWV0ZXJzKTsK
KyAgICB2b2lkIGxvYWRSZXNvdXJjZTQobG9uZyBwcm90b2NvbF9yZXF1ZXN0SWQsIFJlZlB0cjxK
U09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfcGFyYW1ldGVycyk7CisgICAgdm9pZCBsb2FkUmVzb3Vy
Y2U1KGxvbmcgcHJvdG9jb2xfcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHByb3Rv
Y29sX3BhcmFtZXRlcnMpOworICAgIHZvaWQgbG9hZFJlc291cmNlNihsb25nIHByb3RvY29sX3Jl
cXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9wYXJhbWV0ZXJzKTsKKyAg
ICB2b2lkIGxvYWRSZXNvdXJjZTcobG9uZyBwcm90b2NvbF9yZXF1ZXN0SWQsIFJlZlB0cjxKU09O
OjpPYmplY3Q+JiYgcHJvdG9jb2xfcGFyYW1ldGVycyk7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9B
TFRFUk5BVEVfRElTUEFUQ0hFUlMpCiBwdWJsaWM6CiAgICAgdm9pZCBzZXRBbHRlcm5hdGVEaXNw
YXRjaGVyKEFsdGVybmF0ZU5ldHdvcmszQmFja2VuZERpc3BhdGNoZXIqIGFsdGVybmF0ZURpc3Bh
dGNoZXIpIHsgbV9hbHRlcm5hdGVEaXNwYXRjaGVyID0gYWx0ZXJuYXRlRGlzcGF0Y2hlcjsgfQpA
QCAtMjU5LDkgKzI2Miw3IEBAIHByaXZhdGU6CiAjaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRj
aGVycy5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0
ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRl
c3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogI2lmIEVOQUJMRShJ
TlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVC
YWNrZW5kRGlzcGF0Y2hlcnMuaCIKQEAgLTI4NCwzOCArMjg1LDM4IEBAIE5ldHdvcmsxQmFja2Vu
ZERpc3BhdGNoZXI6Ok5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXIm
IGJhY2tlbmRECiAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRjaGVyRm9y
RG9tYWluKCJOZXR3b3JrMSJfcywgdGhpcyk7CiB9CiAKLXZvaWQgTmV0d29yazFCYWNrZW5kRGlz
cGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBS
ZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpCit2b2lkIE5ldHdvcmsxQmFja2VuZERpc3BhdGNo
ZXI6OmRpc3BhdGNoKGxvbmcgcHJvdG9jb2xfcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIHByb3Rv
Y29sX21ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9tZXNzYWdlKQogewogICAg
IFJlZjxOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyPiBwcm90ZWN0KCp0aGlzKTsKIAotICAgIFJl
ZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnM7Ci0gICAgbWVzc2FnZS0+Z2V0T2JqZWN0KCJw
YXJhbXMiX3MsIHBhcmFtZXRlcnMpOworICAgIGF1dG8gcHJvdG9jb2xfcGFyYW1ldGVycyA9IHBy
b3RvY29sX21lc3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9zKTsKIAotICAgIGlmIChtZXRob2Qg
PT0gImxvYWRSZXNvdXJjZTEiKSB7Ci0gICAgICAgIGxvYWRSZXNvdXJjZTEocmVxdWVzdElkLCBX
VEZNb3ZlKHBhcmFtZXRlcnMpKTsKKyAgICBpZiAocHJvdG9jb2xfbWV0aG9kID09ICJsb2FkUmVz
b3VyY2UxIikgeworICAgICAgICBsb2FkUmVzb3VyY2UxKHByb3RvY29sX3JlcXVlc3RJZCwgV1RG
TW92ZShwcm90b2NvbF9wYXJhbWV0ZXJzKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAg
ICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRj
aGVyOjpNZXRob2ROb3RGb3VuZCwgIidOZXR3b3JrMS4iICsgbWV0aG9kICsgIicgd2FzIG5vdCBm
b3VuZCIpOworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFj
a2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdvcmsxLiIgKyBwcm90b2NvbF9t
ZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7CiB9CiAKLXZvaWQgTmV0d29yazFCYWNrZW5kRGlz
cGF0Y2hlcjo6bG9hZFJlc291cmNlMShsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVj
dD4mJikKK3ZvaWQgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMShsb25n
IHByb3RvY29sX3JlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikKIHsKICNpZiBFTkFC
TEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKICAgICBpZiAobV9hbHRlcm5hdGVE
aXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJlc291cmNl
MShyZXF1ZXN0SWQpOworICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmxvYWRSZXNvdXJj
ZTEocHJvdG9jb2xfcmVxdWVzdElkKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZiAv
LyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIAotICAgIEVycm9yU3Ry
aW5nIGVycm9yOwotICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6
Y3JlYXRlKCk7Ci0gICAgbV9hZ2VudC0+bG9hZFJlc291cmNlMShlcnJvcik7CisgICAgYXV0byBy
ZXN1bHQgPSBtX2FnZW50LT5sb2FkUmVzb3VyY2UxKCk7CisgICAgaWYgKCFyZXN1bHQpIHsKKyAg
ICAgICAgQVNTRVJUKCFyZXN1bHQuZXJyb3IoKS5pc0VtcHR5KCkpOworICAgICAgICBtX2JhY2tl
bmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2
ZXJFcnJvciwgcmVzdWx0LmVycm9yKCkpOworICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAg
aWYgKCFlcnJvci5sZW5ndGgoKSkKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJl
c3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7Ci0gICAgZWxzZQotICAg
ICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNw
YXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOworICAgIGF1dG8gcHJvdG9jb2xf
anNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIG1fYmFja2VuZERpc3Bh
dGNoZXItPnNlbmRSZXNwb25zZShwcm90b2NvbF9yZXF1ZXN0SWQsIFdURk1vdmUocHJvdG9jb2xf
anNvbk1lc3NhZ2UpLCBmYWxzZSk7CiB9CiAKIFJlZjxOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVy
PiBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpjcmVhdGUoQmFja2VuZERpc3BhdGNoZXImIGJh
Y2tlbmREaXNwYXRjaGVyLCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVySGFuZGxlciogYWdlbnQp
CkBAIC0zMzAsMTQgKzMzMSwxMyBAQCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpOZXR3b3Jr
M0JhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyJiBiYWNrZW5kRAogICAgIG1fYmFj
a2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hlckZvckRvbWFpbigiTmV0d29yazMiX3Ms
IHRoaXMpOwogfQogCi12b2lkIE5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxv
bmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBt
ZXNzYWdlKQordm9pZCBOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHBy
b3RvY29sX3JlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBwcm90b2NvbF9tZXRob2QsIFJlZjxKU09O
OjpPYmplY3Q+JiYgcHJvdG9jb2xfbWVzc2FnZSkKIHsKICAgICBSZWY8TmV0d29yazNCYWNrZW5k
RGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7CiAKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBw
YXJhbWV0ZXJzOwotICAgIG1lc3NhZ2UtPmdldE9iamVjdCgicGFyYW1zIl9zLCBwYXJhbWV0ZXJz
KTsKKyAgICBhdXRvIHByb3RvY29sX3BhcmFtZXRlcnMgPSBwcm90b2NvbF9tZXNzYWdlLT5nZXRP
YmplY3QoInBhcmFtcyJfcyk7CiAKLSAgICB1c2luZyBDYWxsSGFuZGxlciA9IHZvaWQgKE5ldHdv
cmszQmFja2VuZERpc3BhdGNoZXI6OiopKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiYmIG1lc3NhZ2UpOworICAgIHVzaW5nIENhbGxIYW5kbGVyID0gdm9pZCAoTmV0d29yazNC
YWNrZW5kRGlzcGF0Y2hlcjo6KikobG9uZyBwcm90b2NvbF9yZXF1ZXN0SWQsIFJlZlB0cjxKU09O
OjpPYmplY3Q+JiYgcHJvdG9jb2xfbWVzc2FnZSk7CiAgICAgdXNpbmcgRGlzcGF0Y2hNYXAgPSBI
YXNoTWFwPFN0cmluZywgQ2FsbEhhbmRsZXI+OwogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxE
aXNwYXRjaE1hcD4gZGlzcGF0Y2hNYXA7CiAgICAgaWYgKGRpc3BhdGNoTWFwLmdldCgpLmlzRW1w
dHkoKSkgewpAQCAtMzU4LDE0NiArMzU4LDE1MyBAQCB2b2lkIE5ldHdvcmszQmFja2VuZERpc3Bh
dGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUgog
ICAgICAgICAgICAgZGlzcGF0Y2hNYXAuZ2V0KCkuYWRkKGNvbW1hbmRzW2ldLm5hbWUsIGNvbW1h
bmRzW2ldLmhhbmRsZXIpOwogICAgIH0KIAotICAgIGF1dG8gZmluZFJlc3VsdCA9IGRpc3BhdGNo
TWFwLmdldCgpLmZpbmQobWV0aG9kKTsKKyAgICBhdXRvIGZpbmRSZXN1bHQgPSBkaXNwYXRjaE1h
cC5nZXQoKS5maW5kKHByb3RvY29sX21ldGhvZCk7CiAgICAgaWYgKGZpbmRSZXN1bHQgPT0gZGlz
cGF0Y2hNYXAuZ2V0KCkuZW5kKCkpIHsKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVw
b3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0
d29yazMuIiArIG1ldGhvZCArICInIHdhcyBub3QgZm91bmQiKTsKKyAgICAgICAgbV9iYWNrZW5k
RGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9k
Tm90Rm91bmQsICInTmV0d29yazMuIiArIHByb3RvY29sX21ldGhvZCArICInIHdhcyBub3QgZm91
bmQiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgICgoKnRoaXMpLipmaW5kUmVzdWx0
LT52YWx1ZSkocmVxdWVzdElkLCBXVEZNb3ZlKHBhcmFtZXRlcnMpKTsKKyAgICAoKCp0aGlzKS4q
ZmluZFJlc3VsdC0+dmFsdWUpKHByb3RvY29sX3JlcXVlc3RJZCwgV1RGTW92ZShwcm90b2NvbF9w
YXJhbWV0ZXJzKSk7CiB9CiAKLXZvaWQgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJl
c291cmNlMShsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikKK3ZvaWQgTmV0
d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMShsb25nIHByb3RvY29sX3JlcXVl
c3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FM
VEVSTkFURV9ESVNQQVRDSEVSUykKICAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0g
ICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJlc291cmNlMShyZXF1ZXN0SWQpOwor
ICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmxvYWRSZXNvdXJjZTEocHJvdG9jb2xfcmVx
dWVzdElkKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZiAvLyBFTkFCTEUoSU5TUEVD
VE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIAotICAgIEVycm9yU3RyaW5nIGVycm9yOwotICAg
IFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAg
bV9hZ2VudC0+bG9hZFJlc291cmNlMShlcnJvcik7CisgICAgYXV0byByZXN1bHQgPSBtX2FnZW50
LT5sb2FkUmVzb3VyY2UxKCk7CisgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAgICAgQVNTRVJUKCFy
ZXN1bHQuZXJyb3IoKS5pc0VtcHR5KCkpOworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5y
ZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgcmVzdWx0
LmVycm9yKCkpOworICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgaWYgKCFlcnJvci5sZW5n
dGgoKSkKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJ
ZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tlbmRE
aXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJF
cnJvciwgV1RGTW92ZShlcnJvcikpOworICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBK
U09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNw
b25zZShwcm90b2NvbF9yZXF1ZXN0SWQsIFdURk1vdmUocHJvdG9jb2xfanNvbk1lc3NhZ2UpLCBm
YWxzZSk7CiB9CiAKLXZvaWQgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNl
Mihsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikKK3ZvaWQgTmV0d29yazNC
YWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMihsb25nIHByb3RvY29sX3JlcXVlc3RJZCwg
UmVmUHRyPEpTT046Ok9iamVjdD4mJikKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKICAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAg
IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJlc291cmNlMihyZXF1ZXN0SWQpOworICAgICAg
ICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmxvYWRSZXNvdXJjZTIocHJvdG9jb2xfcmVxdWVzdElk
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FM
VEVSTkFURV9ESVNQQVRDSEVSUykKIAotICAgIEVycm9yU3RyaW5nIGVycm9yOwotICAgIFJlZjxK
U09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgbV9hZ2Vu
dC0+bG9hZFJlc291cmNlMihlcnJvcik7CisgICAgYXV0byByZXN1bHQgPSBtX2FnZW50LT5sb2Fk
UmVzb3VyY2UyKCk7CisgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAgICAgQVNTRVJUKCFyZXN1bHQu
ZXJyb3IoKS5pc0VtcHR5KCkpOworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQ
cm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgcmVzdWx0LmVycm9y
KCkpOworICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgaWYgKCFlcnJvci5sZW5ndGgoKSkK
LSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RG
TW92ZShyZXN1bHQpLCBmYWxzZSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRj
aGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwg
V1RGTW92ZShlcnJvcikpOworICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpP
YmplY3Q6OmNyZWF0ZSgpOworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShw
cm90b2NvbF9yZXF1ZXN0SWQsIFdURk1vdmUocHJvdG9jb2xfanNvbk1lc3NhZ2UpLCBmYWxzZSk7
CiB9CiAKLXZvaWQgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMyhsb25n
IHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikKK3ZvaWQgTmV0d29yazNCYWNrZW5k
RGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMyhsb25nIHByb3RvY29sX3JlcXVlc3RJZCwgUmVmUHRy
PEpTT046Ok9iamVjdD4mJikKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQ
QVRDSEVSUykKICAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0
ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJlc291cmNlMyhyZXF1ZXN0SWQpOworICAgICAgICBtX2Fs
dGVybmF0ZURpc3BhdGNoZXItPmxvYWRSZXNvdXJjZTMocHJvdG9jb2xfcmVxdWVzdElkKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFU
RV9ESVNQQVRDSEVSUykKIAotICAgIEVycm9yU3RyaW5nIGVycm9yOwotICAgIFJlZjxKU09OOjpP
YmplY3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgbV9hZ2VudC0+bG9h
ZFJlc291cmNlMyhlcnJvcik7CisgICAgYXV0byByZXN1bHQgPSBtX2FnZW50LT5sb2FkUmVzb3Vy
Y2UzKCk7CisgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAgICAgQVNTRVJUKCFyZXN1bHQuZXJyb3Io
KS5pc0VtcHR5KCkpOworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2Nv
bEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgcmVzdWx0LmVycm9yKCkpOwor
ICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKLSAgICAg
ICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShy
ZXN1bHQpLCBmYWxzZSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5y
ZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92
ZShlcnJvcikpOworICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6
OmNyZWF0ZSgpOworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShwcm90b2Nv
bF9yZXF1ZXN0SWQsIFdURk1vdmUocHJvdG9jb2xfanNvbk1lc3NhZ2UpLCBmYWxzZSk7CiB9CiAK
LXZvaWQgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNChsb25nIHJlcXVl
c3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikKK3ZvaWQgTmV0d29yazNCYWNrZW5kRGlzcGF0
Y2hlcjo6bG9hZFJlc291cmNlNChsb25nIHByb3RvY29sX3JlcXVlc3RJZCwgUmVmUHRyPEpTT046
Ok9iamVjdD4mJikKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVS
UykKICAgICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRl
RGlzcGF0Y2hlci0+bG9hZFJlc291cmNlNChyZXF1ZXN0SWQpOworICAgICAgICBtX2FsdGVybmF0
ZURpc3BhdGNoZXItPmxvYWRSZXNvdXJjZTQocHJvdG9jb2xfcmVxdWVzdElkKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KICNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQ
QVRDSEVSUykKIAotICAgIEVycm9yU3RyaW5nIGVycm9yOwotICAgIFJlZjxKU09OOjpPYmplY3Q+
IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgbV9hZ2VudC0+bG9hZFJlc291
cmNlNChlcnJvcik7CisgICAgYXV0byByZXN1bHQgPSBtX2FnZW50LT5sb2FkUmVzb3VyY2U0KCk7
CisgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAgICAgQVNTRVJUKCFyZXN1bHQuZXJyb3IoKS5pc0Vt
cHR5KCkpOworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9y
KEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgcmVzdWx0LmVycm9yKCkpOworICAgICAg
ICByZXR1cm47CisgICAgfQogCi0gICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKLSAgICAgICAgbV9i
YWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQp
LCBmYWxzZSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQ
cm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJv
cikpOworICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0
ZSgpOworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShwcm90b2NvbF9yZXF1
ZXN0SWQsIFdURk1vdmUocHJvdG9jb2xfanNvbk1lc3NhZ2UpLCBmYWxzZSk7CiB9CiAKLXZvaWQg
TmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNShsb25nIHJlcXVlc3RJZCwg
UmVmUHRyPEpTT046Ok9iamVjdD4mJikKK3ZvaWQgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6
bG9hZFJlc291cmNlNShsb25nIHByb3RvY29sX3JlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVj
dD4mJikKIHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKICAg
ICBpZiAobV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0
Y2hlci0+bG9hZFJlc291cmNlNShyZXF1ZXN0SWQpOworICAgICAgICBtX2FsdGVybmF0ZURpc3Bh
dGNoZXItPmxvYWRSZXNvdXJjZTUocHJvdG9jb2xfcmVxdWVzdElkKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KICNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVS
UykKIAotICAgIEVycm9yU3RyaW5nIGVycm9yOwotICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3Vs
dCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgbV9hZ2VudC0+bG9hZFJlc291cmNlNShl
cnJvcik7CisgICAgYXV0byByZXN1bHQgPSBtX2FnZW50LT5sb2FkUmVzb3VyY2U1KCk7CisgICAg
aWYgKCFyZXN1bHQpIHsKKyAgICAgICAgQVNTRVJUKCFyZXN1bHQuZXJyb3IoKS5pc0VtcHR5KCkp
OworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tl
bmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgcmVzdWx0LmVycm9yKCkpOworICAgICAgICByZXR1
cm47CisgICAgfQogCi0gICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKLSAgICAgICAgbV9iYWNrZW5k
RGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxz
ZSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2Nv
bEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOwor
ICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwor
ICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShwcm90b2NvbF9yZXF1ZXN0SWQs
IFdURk1vdmUocHJvdG9jb2xfanNvbk1lc3NhZ2UpLCBmYWxzZSk7CiB9CiAKLXZvaWQgTmV0d29y
azNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNihsb25nIHJlcXVlc3RJZCwgUmVmUHRy
PEpTT046Ok9iamVjdD4mJikKK3ZvaWQgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJl
c291cmNlNihsb25nIHByb3RvY29sX3JlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikK
IHsKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKICAgICBpZiAo
bV9hbHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+
bG9hZFJlc291cmNlNihyZXF1ZXN0SWQpOworICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXIt
PmxvYWRSZXNvdXJjZTYocHJvdG9jb2xfcmVxdWVzdElkKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KICNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIAot
ICAgIEVycm9yU3RyaW5nIGVycm9yOwotICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpT
T046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgbV9hZ2VudC0+bG9hZFJlc291cmNlNihlcnJvcik7
CisgICAgYXV0byByZXN1bHQgPSBtX2FnZW50LT5sb2FkUmVzb3VyY2U2KCk7CisgICAgaWYgKCFy
ZXN1bHQpIHsKKyAgICAgICAgQVNTRVJUKCFyZXN1bHQuZXJyb3IoKS5pc0VtcHR5KCkpOworICAg
ICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNw
YXRjaGVyOjpTZXJ2ZXJFcnJvciwgcmVzdWx0LmVycm9yKCkpOworICAgICAgICByZXR1cm47Cisg
ICAgfQogCi0gICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0
Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7Ci0g
ICAgZWxzZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9y
KEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOworICAgIGF1
dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIG1f
YmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShwcm90b2NvbF9yZXF1ZXN0SWQsIFdURk1v
dmUocHJvdG9jb2xfanNvbk1lc3NhZ2UpLCBmYWxzZSk7CiB9CiAKLXZvaWQgTmV0d29yazNCYWNr
ZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046
Ok9iamVjdD4mJikKK3ZvaWQgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNl
Nyhsb25nIHByb3RvY29sX3JlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikKIHsKICNp
ZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKICAgICBpZiAobV9hbHRl
cm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+bG9hZFJl
c291cmNlNyhyZXF1ZXN0SWQpOworICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmxvYWRS
ZXNvdXJjZTcocHJvdG9jb2xfcmVxdWVzdElkKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNl
bmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIAotICAgIEVy
cm9yU3RyaW5nIGVycm9yOwotICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9i
amVjdDo6Y3JlYXRlKCk7Ci0gICAgbV9hZ2VudC0+bG9hZFJlc291cmNlNyhlcnJvcik7CisgICAg
YXV0byByZXN1bHQgPSBtX2FnZW50LT5sb2FkUmVzb3VyY2U3KCk7CisgICAgaWYgKCFyZXN1bHQp
IHsKKyAgICAgICAgQVNTRVJUKCFyZXN1bHQuZXJyb3IoKS5pc0VtcHR5KCkpOworICAgICAgICBt
X2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVy
OjpTZXJ2ZXJFcnJvciwgcmVzdWx0LmVycm9yKCkpOworICAgICAgICByZXR1cm47CisgICAgfQog
Ci0gICAgaWYgKCFlcnJvci5sZW5ndGgoKSkKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+
c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7Ci0gICAgZWxz
ZQotICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tl
bmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOworICAgIGF1dG8gcHJv
dG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIG1fYmFja2Vu
ZERpc3BhdGNoZXItPnNlbmRSZXNwb25zZShwcm90b2NvbF9yZXF1ZXN0SWQsIFdURk1vdmUocHJv
dG9jb2xfanNvbk1lc3NhZ2UpLCBmYWxzZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEluc3BlY3Rv
cgpAQCAtNTM4LDYgKzU0NSw3IEBAIHZvaWQgTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9h
ZFJlc291cmNlNyhsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjCiAKICNpbmNsdWRl
ICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNp
bmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
IAogbmFtZXNwYWNlIEluc3BlY3RvciB7CkBAIC01ODEsNyArNTg5LDYgQEAgY2xhc3MgRnJvbnRl
bmRSb3V0ZXI7CiAjaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKIAogI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8
d3RmL3RleHQvQ1N0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtNjIyLDcg
KzYyOSw5IEBAIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3Rm
L0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0
Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKIApAQCAtNjgxLDggKzY5MCw3IEBAIHVzaW5nIExvYWRlcklkID0gU3Ry
aW5nOwogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMu
aCIKIAotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJp
bmcuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9y
IHsKIApAQCAtNzM5LDcgKzc0Nyw3IEBAIGNsYXNzIE9iakNJbnNwZWN0b3JOZXR3b3JrMUJhY2tl
bmREaXNwYXRjaGVyIGZpbmFsIDogcHVibGljIEFsdGVybmF0ZU5ldHdvcmsxQmFjCiAgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgT2JqQ0luc3BlY3Rvck5ldHdvcmsx
QmFja2VuZERpc3BhdGNoZXIoaWQ8VGVzdFByb3RvY29sTmV0d29yazFEb21haW5IYW5kbGVyPiBo
YW5kbGVyKSB7IG1fZGVsZWdhdGUgPSBoYW5kbGVyOyB9Ci0gICAgdm9pZCBsb2FkUmVzb3VyY2Ux
KGxvbmcgcmVxdWVzdElkKSBmaW5hbDsKKyAgICB2b2lkIGxvYWRSZXNvdXJjZTEobG9uZyBwcm90
b2NvbF9yZXF1ZXN0SWQpIGZpbmFsOwogcHJpdmF0ZToKICAgICBSZXRhaW5QdHI8aWQ8VGVzdFBy
b3RvY29sTmV0d29yazFEb21haW5IYW5kbGVyPj4gbV9kZWxlZ2F0ZTsKIH07CkBAIC03NDgsMTMg
Kzc1NiwxMyBAQCBjbGFzcyBPYmpDSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlciBm
aW5hbCA6IHB1YmxpYyBBbHRlcm5hdGVOZXR3b3JrM0JhYwogICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOwogcHVibGljOgogICAgIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRj
aGVyKGlkPFRlc3RQcm90b2NvbE5ldHdvcmszRG9tYWluSGFuZGxlcj4gaGFuZGxlcikgeyBtX2Rl
bGVnYXRlID0gaGFuZGxlcjsgfQotICAgIHZvaWQgbG9hZFJlc291cmNlMShsb25nIHJlcXVlc3RJ
ZCkgZmluYWw7Ci0gICAgdm9pZCBsb2FkUmVzb3VyY2UyKGxvbmcgcmVxdWVzdElkKSBmaW5hbDsK
LSAgICB2b2lkIGxvYWRSZXNvdXJjZTMobG9uZyByZXF1ZXN0SWQpIGZpbmFsOwotICAgIHZvaWQg
bG9hZFJlc291cmNlNChsb25nIHJlcXVlc3RJZCkgZmluYWw7Ci0gICAgdm9pZCBsb2FkUmVzb3Vy
Y2U1KGxvbmcgcmVxdWVzdElkKSBmaW5hbDsKLSAgICB2b2lkIGxvYWRSZXNvdXJjZTYobG9uZyBy
ZXF1ZXN0SWQpIGZpbmFsOwotICAgIHZvaWQgbG9hZFJlc291cmNlNyhsb25nIHJlcXVlc3RJZCkg
ZmluYWw7CisgICAgdm9pZCBsb2FkUmVzb3VyY2UxKGxvbmcgcHJvdG9jb2xfcmVxdWVzdElkKSBm
aW5hbDsKKyAgICB2b2lkIGxvYWRSZXNvdXJjZTIobG9uZyBwcm90b2NvbF9yZXF1ZXN0SWQpIGZp
bmFsOworICAgIHZvaWQgbG9hZFJlc291cmNlMyhsb25nIHByb3RvY29sX3JlcXVlc3RJZCkgZmlu
YWw7CisgICAgdm9pZCBsb2FkUmVzb3VyY2U0KGxvbmcgcHJvdG9jb2xfcmVxdWVzdElkKSBmaW5h
bDsKKyAgICB2b2lkIGxvYWRSZXNvdXJjZTUobG9uZyBwcm90b2NvbF9yZXF1ZXN0SWQpIGZpbmFs
OworICAgIHZvaWQgbG9hZFJlc291cmNlNihsb25nIHByb3RvY29sX3JlcXVlc3RJZCkgZmluYWw7
CisgICAgdm9pZCBsb2FkUmVzb3VyY2U3KGxvbmcgcHJvdG9jb2xfcmVxdWVzdElkKSBmaW5hbDsK
IHByaXZhdGU6CiAgICAgUmV0YWluUHRyPGlkPFRlc3RQcm90b2NvbE5ldHdvcmszRG9tYWluSGFu
ZGxlcj4+IG1fZGVsZWdhdGU7CiB9OwpAQCAtODAyLDE2MSArODEwLDE2OSBAQCBwcml2YXRlOgog
CiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAotdm9pZCBPYmpDSW5zcGVjdG9yTmV0d29yazFCYWNr
ZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMShsb25nIHJlcXVlc3RJZCkKK3ZvaWQgT2JqQ0lu
c3BlY3Rvck5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTEobG9uZyBwcm90
b2NvbF9yZXF1ZXN0SWQpCiB7CiAgICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0
b3I6QHNlbGVjdG9yKGxvYWRSZXNvdXJjZTFXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJh
Y2s6KV0pIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJv
cihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidOZXR3b3Jr
MS5sb2FkUmVzb3VyY2UxJyB3YXMgbm90IGZvdW5kIl9zKTsKKyAgICAgICAgYmFja2VuZERpc3Bh
dGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9yZXF1ZXN0SWQsIEJhY2tlbmRE
aXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidOZXR3b3JrMS5sb2FkUmVzb3VyY2UxJyB3YXMg
bm90IGZvdW5kIl9zKTsKICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdF
cnJvcnMoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlkIGVycm9yQ2FsbGJhY2sg
PSBeKE5TU3RyaW5nICplcnJvcikgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBv
cnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9y
LCBlcnJvcik7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJy
b3IocHJvdG9jb2xfcmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVy
cm9yKTsKICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsK
ICAgICB9OwogCiAgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKLSAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgSlNPTjo6T2JqZWN0OjpjcmVhdGUo
KSwgZmFsc2UpOworICAgICAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2Jq
ZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNl
KHByb3RvY29sX3JlcXVlc3RJZCwgV1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSksIGZhbHNl
KTsKICAgICB9OwogCiAgICAgW21fZGVsZWdhdGUgbG9hZFJlc291cmNlMVdpdGhFcnJvckNhbGxi
YWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107CiB9CiAK
LXZvaWQgT2JqQ0luc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJj
ZTEobG9uZyByZXF1ZXN0SWQpCit2b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNw
YXRjaGVyOjpsb2FkUmVzb3VyY2UxKGxvbmcgcHJvdG9jb2xfcmVxdWVzdElkKQogewogICAgIGlm
ICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihsb2FkUmVzb3VyY2Ux
V2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7Ci0gICAgICAgIGJhY2tlbmRE
aXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0
Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29yazMubG9hZFJlc291cmNlMScgd2FzIG5vdCBm
b3VuZCJfcyk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJy
b3IocHJvdG9jb2xfcmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQs
ICInTmV0d29yazMubG9hZFJlc291cmNlMScgd2FzIG5vdCBmb3VuZCJfcyk7CiAgICAgICAgIGJh
Y2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKICAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAg
ICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQs
IEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgICAgICBiYWNrZW5k
RGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHByb3RvY29sX3JlcXVlc3RJZCwgQmFj
a2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CiAgICAgICAgIGJhY2tlbmREaXNw
YXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgfTsKIAogICAgIGlkIHN1Y2Nlc3ND
YWxsYmFjayA9IF57Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShy
ZXF1ZXN0SWQsIEpTT046Ok9iamVjdDo6Y3JlYXRlKCksIGZhbHNlKTsKKyAgICAgICAgYXV0byBw
cm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIGJh
Y2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShwcm90b2NvbF9yZXF1ZXN0SWQsIFdURk1v
dmUocHJvdG9jb2xfanNvbk1lc3NhZ2UpLCBmYWxzZSk7CiAgICAgfTsKIAogICAgIFttX2RlbGVn
YXRlIGxvYWRSZXNvdXJjZTFXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3ND
YWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOwogfQogCi12b2lkIE9iakNJbnNwZWN0b3JOZXR3b3Jr
M0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UyKGxvbmcgcmVxdWVzdElkKQordm9pZCBP
YmpDSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlMihsb25n
IHByb3RvY29sX3JlcXVlc3RJZCkKIHsKICAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9T
ZWxlY3RvcjpAc2VsZWN0b3IobG9hZFJlc291cmNlMldpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3ND
YWxsYmFjazopXSkgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2Nv
bEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05l
dHdvcmszLmxvYWRSZXNvdXJjZTInIHdhcyBub3QgZm91bmQiX3MpOworICAgICAgICBiYWNrZW5k
RGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHByb3RvY29sX3JlcXVlc3RJZCwgQmFj
a2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdvcmszLmxvYWRSZXNvdXJjZTIn
IHdhcyBub3QgZm91bmQiX3MpOwogICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVu
ZGluZ0Vycm9ycygpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWQgZXJyb3JDYWxs
YmFjayA9IF4oTlNTdHJpbmcgKmVycm9yKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCkt
PnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVy
RXJyb3IsIGVycm9yKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9j
b2xFcnJvcihwcm90b2NvbF9yZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJv
ciwgZXJyb3IpOwogICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9y
cygpOwogICAgIH07CiAKICAgICBpZCBzdWNjZXNzQ2FsbGJhY2sgPSBeewotICAgICAgICBiYWNr
ZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNy
ZWF0ZSgpLCBmYWxzZSk7CisgICAgICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09O
OjpPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVz
cG9uc2UocHJvdG9jb2xfcmVxdWVzdElkLCBXVEZNb3ZlKHByb3RvY29sX2pzb25NZXNzYWdlKSwg
ZmFsc2UpOwogICAgIH07CiAKICAgICBbbV9kZWxlZ2F0ZSBsb2FkUmVzb3VyY2UyV2l0aEVycm9y
Q2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsK
IH0KIAotdm9pZCBPYmpDSW5zcGVjdG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJl
c291cmNlMyhsb25nIHJlcXVlc3RJZCkKK3ZvaWQgT2JqQ0luc3BlY3Rvck5ldHdvcmszQmFja2Vu
ZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTMobG9uZyBwcm90b2NvbF9yZXF1ZXN0SWQpCiB7CiAg
ICAgaWYgKCFbbV9kZWxlZ2F0ZSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGxvYWRSZXNv
dXJjZTNXaXRoRXJyb3JDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2s6KV0pIHsKLSAgICAgICAgYmFj
a2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmRE
aXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidOZXR3b3JrMy5sb2FkUmVzb3VyY2UzJyB3YXMg
bm90IGZvdW5kIl9zKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9j
b2xFcnJvcihwcm90b2NvbF9yZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RG
b3VuZCwgIidOZXR3b3JrMy5sb2FkUmVzb3VyY2UzJyB3YXMgbm90IGZvdW5kIl9zKTsKICAgICAg
ICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAogICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikg
ewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVl
c3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CisgICAgICAgIGJh
Y2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocHJvdG9jb2xfcmVxdWVzdElk
LCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKICAgICAgICAgYmFja2Vu
ZERpc3BhdGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKICAgICB9OwogCiAgICAgaWQgc3Vj
Y2Vzc0NhbGxiYWNrID0gXnsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3Bv
bnNlKHJlcXVlc3RJZCwgSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSwgZmFsc2UpOworICAgICAgICBh
dXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAg
ICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHByb3RvY29sX3JlcXVlc3RJZCwg
V1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSksIGZhbHNlKTsKICAgICB9OwogCiAgICAgW21f
ZGVsZWdhdGUgbG9hZFJlc291cmNlM1dpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3Vj
Y2Vzc0NhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFja107CiB9CiAKLXZvaWQgT2JqQ0luc3BlY3Rvck5l
dHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNvdXJjZTQobG9uZyByZXF1ZXN0SWQpCit2
b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U0
KGxvbmcgcHJvdG9jb2xfcmVxdWVzdElkKQogewogICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9u
ZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihsb2FkUmVzb3VyY2U0V2l0aEVycm9yQ2FsbGJhY2s6c3Vj
Y2Vzc0NhbGxiYWNrOildKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFBy
b3RvY29sRXJyb3IocmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQs
ICInTmV0d29yazMubG9hZFJlc291cmNlNCcgd2FzIG5vdCBmb3VuZCJfcyk7CisgICAgICAgIGJh
Y2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocHJvdG9jb2xfcmVxdWVzdElk
LCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29yazMubG9hZFJlc291
cmNlNCcgd2FzIG5vdCBmb3VuZCJfcyk7CiAgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNl
bmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZCBlcnJv
ckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNo
ZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpT
ZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQ
cm90b2NvbEVycm9yKHByb3RvY29sX3JlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZl
ckVycm9yLCBlcnJvcik7CiAgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5n
RXJyb3JzKCk7CiAgICAgfTsKIAogICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF57Ci0gICAgICAg
IGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIEpTT046Ok9iamVj
dDo6Y3JlYXRlKCksIGZhbHNlKTsKKyAgICAgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9
IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNl
bmRSZXNwb25zZShwcm90b2NvbF9yZXF1ZXN0SWQsIFdURk1vdmUocHJvdG9jb2xfanNvbk1lc3Nh
Z2UpLCBmYWxzZSk7CiAgICAgfTsKIAogICAgIFttX2RlbGVnYXRlIGxvYWRSZXNvdXJjZTRXaXRo
RXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJh
Y2tdOwogfQogCi12b2lkIE9iakNJbnNwZWN0b3JOZXR3b3JrM0JhY2tlbmREaXNwYXRjaGVyOjps
b2FkUmVzb3VyY2U1KGxvbmcgcmVxdWVzdElkKQordm9pZCBPYmpDSW5zcGVjdG9yTmV0d29yazNC
YWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNShsb25nIHByb3RvY29sX3JlcXVlc3RJZCkK
IHsKICAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IobG9h
ZFJlc291cmNlNVdpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazopXSkgewotICAgICAg
ICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFj
a2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdvcmszLmxvYWRSZXNvdXJjZTUn
IHdhcyBub3QgZm91bmQiX3MpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQ
cm90b2NvbEVycm9yKHByb3RvY29sX3JlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhv
ZE5vdEZvdW5kLCAiJ05ldHdvcmszLmxvYWRSZXNvdXJjZTUnIHdhcyBub3QgZm91bmQiX3MpOwog
ICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCiAgICAgaWQgZXJyb3JDYWxsYmFjayA9IF4oTlNTdHJpbmcgKmVy
cm9yKSB7Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3Io
cmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKKyAgICAg
ICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9yZXF1
ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwogICAgICAgICBi
YWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUGVuZGluZ0Vycm9ycygpOwogICAgIH07CiAKICAgICBp
ZCBzdWNjZXNzQ2FsbGJhY2sgPSBeewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5k
UmVzcG9uc2UocmVxdWVzdElkLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpLCBmYWxzZSk7CisgICAg
ICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwor
ICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5zZW5kUmVzcG9uc2UocHJvdG9jb2xfcmVxdWVz
dElkLCBXVEZNb3ZlKHByb3RvY29sX2pzb25NZXNzYWdlKSwgZmFsc2UpOwogICAgIH07CiAKICAg
ICBbbV9kZWxlZ2F0ZSBsb2FkUmVzb3VyY2U1V2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFj
ayBzdWNjZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrXTsKIH0KIAotdm9pZCBPYmpDSW5zcGVj
dG9yTmV0d29yazNCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlNihsb25nIHJlcXVlc3RJ
ZCkKK3ZvaWQgT2JqQ0luc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNoZXI6OmxvYWRSZXNv
dXJjZTYobG9uZyBwcm90b2NvbF9yZXF1ZXN0SWQpCiB7CiAgICAgaWYgKCFbbV9kZWxlZ2F0ZSBy
ZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKGxvYWRSZXNvdXJjZTZXaXRoRXJyb3JDYWxsYmFj
azpzdWNjZXNzQ2FsbGJhY2s6KV0pIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVw
b3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RG
b3VuZCwgIidOZXR3b3JrMy5sb2FkUmVzb3VyY2U2JyB3YXMgbm90IGZvdW5kIl9zKTsKKyAgICAg
ICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9yZXF1
ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidOZXR3b3JrMy5sb2Fk
UmVzb3VyY2U2JyB3YXMgbm90IGZvdW5kIl9zKTsKICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIo
KS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlk
IGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgewotICAgICAgICBiYWNrZW5kRGlz
cGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNo
ZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJl
cG9ydFByb3RvY29sRXJyb3IocHJvdG9jb2xfcmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6
U2VydmVyRXJyb3IsIGVycm9yKTsKICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFBl
bmRpbmdFcnJvcnMoKTsKICAgICB9OwogCiAgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXnsKLSAg
ICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgSlNPTjo6
T2JqZWN0OjpjcmVhdGUoKSwgZmFsc2UpOworICAgICAgICBhdXRvIHByb3RvY29sX2pzb25NZXNz
YWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIo
KS0+c2VuZFJlc3BvbnNlKHByb3RvY29sX3JlcXVlc3RJZCwgV1RGTW92ZShwcm90b2NvbF9qc29u
TWVzc2FnZSksIGZhbHNlKTsKICAgICB9OwogCiAgICAgW21fZGVsZWdhdGUgbG9hZFJlc291cmNl
NldpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3ND
YWxsYmFja107CiB9CiAKLXZvaWQgT2JqQ0luc3BlY3Rvck5ldHdvcmszQmFja2VuZERpc3BhdGNo
ZXI6OmxvYWRSZXNvdXJjZTcobG9uZyByZXF1ZXN0SWQpCit2b2lkIE9iakNJbnNwZWN0b3JOZXR3
b3JrM0JhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2U3KGxvbmcgcHJvdG9jb2xfcmVxdWVz
dElkKQogewogICAgIGlmICghW21fZGVsZWdhdGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rv
cihsb2FkUmVzb3VyY2U3V2l0aEVycm9yQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrOildKSB7Ci0g
ICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocmVxdWVzdElk
LCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInTmV0d29yazMubG9hZFJlc291
cmNlNycgd2FzIG5vdCBmb3VuZCJfcyk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJl
cG9ydFByb3RvY29sRXJyb3IocHJvdG9jb2xfcmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6
TWV0aG9kTm90Rm91bmQsICInTmV0d29yazMubG9hZFJlc291cmNlNycgd2FzIG5vdCBmb3VuZCJf
cyk7CiAgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmlu
ZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xF
cnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOwor
ICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHByb3RvY29s
X3JlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CiAgICAg
ICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgfTsKIAog
ICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF57Ci0gICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCkt
PnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIEpTT046Ok9iamVjdDo6Y3JlYXRlKCksIGZhbHNlKTsK
KyAgICAgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRl
KCk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShwcm90b2NvbF9y
ZXF1ZXN0SWQsIFdURk1vdmUocHJvdG9jb2xfanNvbk1lc3NhZ2UpLCBmYWxzZSk7CiAgICAgfTsK
IAogICAgIFttX2RlbGVnYXRlIGxvYWRSZXNvdXJjZTdXaXRoRXJyb3JDYWxsYmFjazplcnJvckNh
bGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2VudW0t
dmFsdWVzLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3Jp
cHRzL3Rlc3RzL2V4cGVjdGVkL2VudW0tdmFsdWVzLmpzb24tcmVzdWx0CmluZGV4IDc5NTNjYmYy
MTgzODhmODQ3NzcyYmQ0MTNkMTgwMjYyOWE3YjgwNWIuLmFiYTk3NzEwMTNiMzAwMDM5NjVhOWZh
MzVlNjQ0Y2I5ZDI3MGE2MmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9lbnVtLXZhbHVlcy5qc29uLXJlc3VsdAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQv
ZW51bS12YWx1ZXMuanNvbi1yZXN1bHQKQEAgLTMwLDE4ICszMCwxOSBAQAogCiAvLyBUeXBlRG9t
YWluCiBJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluKCJUeXBlRG9tYWluIiwgbnVsbCk7
Ci1JbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRW51bSgiVHlwZURvbWFpbi5UeXBlRG9tYWluRW51
bSIsIHtTaGFyZWQ6ICJzaGFyZWQiLCBSZWQ6ICJyZWQiLCBHcmVlbjogImdyZWVuIiwgQmx1ZTog
ImJsdWUifSk7CitJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRW51bSgiVHlwZURvbWFpbi5FbnVt
Iiwge1NoYXJlZDogInNoYXJlZCIsIDE6ICIxIiwgMjogIjIifSk7CiBJbnNwZWN0b3JCYWNrZW5k
LmFjdGl2YXRlRG9tYWluKCJUeXBlRG9tYWluIiwgbnVsbCk7CiAKIC8vIENvbW1hbmREb21haW4K
IEluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJEb21haW4oIkNvbW1hbmREb21haW4iLCBudWxsKTsK
LUluc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJDb21tYW5kKCJDb21tYW5kRG9tYWluLmNvbW1hbmRX
aXRoRW51bVJldHVyblZhbHVlIiwgbnVsbCwgW10sIFsicmV0dXJuVmFsdWUiXSk7CitJbnNwZWN0
b3JCYWNrZW5kLnJlZ2lzdGVyQ29tbWFuZCgiQ29tbWFuZERvbWFpbi5jb21tYW5kIiwgbnVsbCwg
W3sibmFtZSI6ICJlbnVtUmVxdWlyZWQiLCAidHlwZSI6ICJzdHJpbmcifSwgeyJuYW1lIjogImVu
dW1PcHRpb25hbCIsICJ0eXBlIjogInN0cmluZyIsICJvcHRpb25hbCI6IHRydWV9LCB7Im5hbWUi
OiAicGFyYW1ldGVyUmVxdWlyZWQiLCAidHlwZSI6ICJzdHJpbmcifSwgeyJuYW1lIjogInBhcmFt
ZXRlck9wdGlvbmFsIiwgInR5cGUiOiAic3RyaW5nIiwgIm9wdGlvbmFsIjogdHJ1ZX1dLCBbImVu
dW1SZXF1aXJlZCIsICJlbnVtT3B0aW9uYWwiLCAicmV0dXJuUmVxdWlyZWQiLCAicmV0dXJuT3B0
aW9uYWwiXSk7CiBJbnNwZWN0b3JCYWNrZW5kLmFjdGl2YXRlRG9tYWluKCJDb21tYW5kRG9tYWlu
IiwgbnVsbCk7CiAKIC8vIEV2ZW50RG9tYWluCiBJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9t
YWluKCJFdmVudERvbWFpbiIsIG51bGwpOwotSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckVudW0o
IkV2ZW50RG9tYWluLkV2ZW50V2l0aEVudW1QYXJhbWV0ZXJQYXJhbWV0ZXIiLCB7U2hhcmVkOiAi
c2hhcmVkIiwgQmxhY2s6ICJibGFjayIsIFdoaXRlOiAid2hpdGUifSk7Ci1JbnNwZWN0b3JCYWNr
ZW5kLnJlZ2lzdGVyRXZlbnQoIkV2ZW50RG9tYWluLmV2ZW50V2l0aEVudW1QYXJhbWV0ZXIiLCBu
dWxsLCBbInBhcmFtZXRlciJdKTsKK0luc3BlY3RvckJhY2tlbmQucmVnaXN0ZXJFbnVtKCJFdmVu
dERvbWFpbi5FdmVudFBhcmFtZXRlclJlcXVpcmVkIiwge1NoYXJlZDogInNoYXJlZCIsIFNoYXJl
ZFJlcXVpcmVkOiAic2hhcmVkUmVxdWlyZWQiLCBHcmV5OiAiZ3JleSJ9KTsKK0luc3BlY3RvckJh
Y2tlbmQucmVnaXN0ZXJFbnVtKCJFdmVudERvbWFpbi5FdmVudFBhcmFtZXRlck9wdGlvbmFsIiwg
e1NoYXJlZDogInNoYXJlZCIsIFNoYXJlZE9wdGlvbmFsOiAic2hhcmVkT3B0aW9uYWwiLCBHcmVl
bjogImdyZWVuIn0pOworSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckV2ZW50KCJFdmVudERvbWFp
bi5ldmVudCIsIG51bGwsIFsiZW51bVJlcXVpcmVkIiwgImVudW1PcHRpb25hbCIsICJwYXJhbWV0
ZXJSZXF1aXJlZCIsICJwYXJhbWV0ZXJPcHRpb25hbCJdKTsKIEluc3BlY3RvckJhY2tlbmQucmVn
aXN0ZXJFdmVudERvbWFpbkRpc3BhdGNoZXIgPSBJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRGlz
cGF0Y2hlci5iaW5kKEluc3BlY3RvckJhY2tlbmQsICJFdmVudERvbWFpbiIpOwogSW5zcGVjdG9y
QmFja2VuZC5hY3RpdmF0ZURvbWFpbigiRXZlbnREb21haW4iLCBudWxsKTsKICMjIyBFbmQgRmls
ZTogSW5zcGVjdG9yQmFja2VuZENvbW1hbmRzLmpzLmluCkBAIC04MCw3ICs4MSw3IEBAIEluc3Bl
Y3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4oIkV2ZW50RG9tYWluIiwgbnVsbCk7CiAKICNpZiBF
TkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIAotI2luY2x1ZGUgIlRlc3RQ
cm90b2NvbFR5cGVzLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CiAjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KIApAQCAtOTgsNyAr
OTksNyBAQCBwcml2YXRlOgogY2xhc3MgQWx0ZXJuYXRlQ29tbWFuZERvbWFpbkJhY2tlbmREaXNw
YXRjaGVyIDogcHVibGljIEFsdGVybmF0ZUJhY2tlbmREaXNwYXRjaGVyIHsKIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIH5BbHRlcm5hdGVDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXIoKSB7IH0K
LSAgICB2aXJ0dWFsIHZvaWQgY29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUobG9uZyBjYWxsSWQp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY29tbWFuZChsb25nIHByb3RvY29sX3JlcXVlc3RJZCwg
Y29uc3QgU3RyaW5nJiBlbnVtUmVxdWlyZWQsIGNvbnN0IFN0cmluZyYgb3B0X2VudW1PcHRpb25h
bCwgY29uc3QgU3RyaW5nJiBwYXJhbWV0ZXJSZXF1aXJlZCwgY29uc3QgU3RyaW5nJiBvcHRfcGFy
YW1ldGVyT3B0aW9uYWwpID0gMDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgpAQCAt
MTQwLDExICsxNDEsMTQgQEAgcHVibGljOgogCiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0
cy5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
Lmg+CisjaW5jbHVkZSA8dHVwbGU+CisjaW5jbHVkZSA8d3RmL0V4cGVjdGVkLmg+CisjaW5jbHVk
ZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5h
bWVzcGFjZSBJbnNwZWN0b3IgewogCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKwogCiAj
aWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiBjbGFzcyBBbHRlcm5h
dGVDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXI7CkBAIC0xNTIsMTQgKzE1Niw3IEBAIGNs
YXNzIEFsdGVybmF0ZUNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcjsKIAogY2xhc3MgQ29t
bWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7CiBwdWJsaWM6Ci0gICAgLy8gTmFt
ZWQgYWZ0ZXIgcGFyYW1ldGVyICdyZXR1cm5WYWx1ZScgd2hpbGUgZ2VuZXJhdGluZyBjb21tYW5k
L2V2ZW50IGNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlLgotICAgIGVudW0gY2xhc3MgUmV0dXJu
VmFsdWUgewotICAgICAgICBTaGFyZWQgPSAwLAotICAgICAgICBDeWFuID0gNiwKLSAgICAgICAg
TWFnZW50YSA9IDcsCi0gICAgICAgIFllbGxvdyA9IDgsCi0gICAgfTsgLy8gZW51bSBjbGFzcyBS
ZXR1cm5WYWx1ZQotICAgIHZpcnR1YWwgdm9pZCBjb21tYW5kV2l0aEVudW1SZXR1cm5WYWx1ZShF
cnJvclN0cmluZyYsIENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlJldHVy
blZhbHVlKiBvdXRfcmV0dXJuVmFsdWUpID0gMDsKKyAgICB2aXJ0dWFsIFByb3RvY29sOjpFcnJv
clN0cmluZ09yPHN0ZDo6dHVwbGU8UHJvdG9jb2w6OlR5cGVEb21haW46OkVudW0gLyogZW51bVJl
cXVpcmVkICovLCBPcHRpb25hbDxQcm90b2NvbDo6VHlwZURvbWFpbjo6RW51bT4gLyogb3B0X2Vu
dW1PcHRpb25hbCAqLywgU3RyaW5nIC8qIHJldHVyblJlcXVpcmVkICovLCBTdHJpbmcgLyogb3B0
X3JldHVybk9wdGlvbmFsICovPj4gY29tbWFuZChQcm90b2NvbDo6VHlwZURvbWFpbjo6RW51bSBl
bnVtUmVxdWlyZWQsIE9wdGlvbmFsPFByb3RvY29sOjpUeXBlRG9tYWluOjpFbnVtPiYmIG9wdF9l
bnVtT3B0aW9uYWwsIGNvbnN0IFN0cmluZyYgcGFyYW1ldGVyUmVxdWlyZWQsIGNvbnN0IFN0cmlu
ZyYgb3B0X3BhcmFtZXRlck9wdGlvbmFsKSA9IDA7CiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB+
Q29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpOwogfTsKQEAgLTE2Nyw5ICsx
NjQsOSBAQCBwcm90ZWN0ZWQ6CiBjbGFzcyBDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXIg
ZmluYWwgOiBwdWJsaWMgU3VwcGxlbWVudGFsQmFja2VuZERpc3BhdGNoZXIgewogcHVibGljOgog
ICAgIHN0YXRpYyBSZWY8Q29tbWFuZERvbWFpbkJhY2tlbmREaXNwYXRjaGVyPiBjcmVhdGUoQmFj
a2VuZERpc3BhdGNoZXImLCBDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7
Ci0gICAgdm9pZCBkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2Qs
IFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkgZmluYWw7CisgICAgdm9pZCBkaXNwYXRjaChs
b25nIHByb3RvY29sX3JlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBwcm90b2NvbF9tZXRob2QsIFJl
ZjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfbWVzc2FnZSkgZmluYWw7CiBwcml2YXRlOgotICAg
IHZvaWQgY29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUobG9uZyByZXF1ZXN0SWQsIFJlZlB0cjxK
U09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycyk7CisgICAgdm9pZCBjb21tYW5kKGxvbmcgcHJvdG9j
b2xfcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX3BhcmFtZXRlcnMp
OwogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogcHVibGljOgog
ICAgIHZvaWQgc2V0QWx0ZXJuYXRlRGlzcGF0Y2hlcihBbHRlcm5hdGVDb21tYW5kRG9tYWluQmFj
a2VuZERpc3BhdGNoZXIqIGFsdGVybmF0ZURpc3BhdGNoZXIpIHsgbV9hbHRlcm5hdGVEaXNwYXRj
aGVyID0gYWx0ZXJuYXRlRGlzcGF0Y2hlcjsgfQpAQCAtMjE4LDkgKzIxNSw3IEBAIHByaXZhdGU6
CiAjaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgogCiAjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSlNPTlZh
bHVlcy5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90
ZXh0L0NTdHJpbmcuaD4KIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENI
RVJTKQogI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKQEAgLTI0
Miw0MiArMjM3LDYzIEBAIENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Q29tbWFuZERv
bWFpbkJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNwYXRjaGVyCiAgICAgbV9iYWNrZW5kRGlz
cGF0Y2hlci0+cmVnaXN0ZXJEaXNwYXRjaGVyRm9yRG9tYWluKCJDb21tYW5kRG9tYWluIl9zLCB0
aGlzKTsKIH0KIAotdm9pZCBDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNo
KGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1ldGhvZCwgUmVmPEpTT046Ok9iamVjdD4m
JiBtZXNzYWdlKQordm9pZCBDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OmRpc3BhdGNo
KGxvbmcgcHJvdG9jb2xfcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIHByb3RvY29sX21ldGhvZCwg
UmVmPEpTT046Ok9iamVjdD4mJiBwcm90b2NvbF9tZXNzYWdlKQogewogICAgIFJlZjxDb21tYW5k
RG9tYWluQmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOwogCi0gICAgUmVmUHRyPEpT
T046Ok9iamVjdD4gcGFyYW1ldGVyczsKLSAgICBtZXNzYWdlLT5nZXRPYmplY3QoInBhcmFtcyJf
cywgcGFyYW1ldGVycyk7CisgICAgYXV0byBwcm90b2NvbF9wYXJhbWV0ZXJzID0gcHJvdG9jb2xf
bWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3MpOwogCi0gICAgaWYgKG1ldGhvZCA9PSAiY29t
bWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUiKSB7Ci0gICAgICAgIGNvbW1hbmRXaXRoRW51bVJldHVy
blZhbHVlKHJlcXVlc3RJZCwgV1RGTW92ZShwYXJhbWV0ZXJzKSk7CisgICAgaWYgKHByb3RvY29s
X21ldGhvZCA9PSAiY29tbWFuZCIpIHsKKyAgICAgICAgY29tbWFuZChwcm90b2NvbF9yZXF1ZXN0
SWQsIFdURk1vdmUocHJvdG9jb2xfcGFyYW1ldGVycykpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xFcnJvcihCYWNrZW5k
RGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInQ29tbWFuZERvbWFpbi4iICsgbWV0aG9kICsg
Iicgd2FzIG5vdCBmb3VuZCIpOworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3Rv
Y29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0NvbW1hbmREb21h
aW4uIiArIHByb3RvY29sX21ldGhvZCArICInIHdhcyBub3QgZm91bmQiKTsKIH0KIAotdm9pZCBD
b21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OmNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVl
KGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQordm9pZCBDb21tYW5kRG9t
YWluQmFja2VuZERpc3BhdGNoZXI6OmNvbW1hbmQobG9uZyBwcm90b2NvbF9yZXF1ZXN0SWQsIFJl
ZlB0cjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfcGFyYW1ldGVycykKIHsKKyAgICBhdXRvIGlu
X2VudW1SZXF1aXJlZF9qc29uID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3RyaW5nKHByb3Rv
Y29sX3BhcmFtZXRlcnMuZ2V0KCksICJlbnVtUmVxdWlyZWQiX3MsIHRydWUpOworICAgIGF1dG8g
aW5fb3B0X2VudW1PcHRpb25hbF9qc29uID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3RyaW5n
KHByb3RvY29sX3BhcmFtZXRlcnMuZ2V0KCksICJlbnVtT3B0aW9uYWwiX3MsIGZhbHNlKTsKKyAg
ICBhdXRvIGluX3BhcmFtZXRlclJlcXVpcmVkID0gbV9iYWNrZW5kRGlzcGF0Y2hlci0+Z2V0U3Ry
aW5nKHByb3RvY29sX3BhcmFtZXRlcnMuZ2V0KCksICJwYXJhbWV0ZXJSZXF1aXJlZCJfcywgdHJ1
ZSk7CisgICAgYXV0byBpbl9vcHRfcGFyYW1ldGVyT3B0aW9uYWwgPSBtX2JhY2tlbmREaXNwYXRj
aGVyLT5nZXRTdHJpbmcocHJvdG9jb2xfcGFyYW1ldGVycy5nZXQoKSwgInBhcmFtZXRlck9wdGlv
bmFsIl9zLCBmYWxzZSk7CisgICAgaWYgKG1fYmFja2VuZERpc3BhdGNoZXItPmhhc1Byb3RvY29s
RXJyb3JzKCkpIHsKKyAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+cmVwb3J0UHJvdG9jb2xF
cnJvcihCYWNrZW5kRGlzcGF0Y2hlcjo6SW52YWxpZFBhcmFtcywgIlNvbWUgYXJndW1lbnRzIG9m
IG1ldGhvZCAnQ29tbWFuZERvbWFpbi5jb21tYW5kJyBjYW4ndCBiZSBwcm9jZXNzZWQiX3MpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVf
RElTUEFUQ0hFUlMpCiAgICAgaWYgKG1fYWx0ZXJuYXRlRGlzcGF0Y2hlcikgewotICAgICAgICBt
X2FsdGVybmF0ZURpc3BhdGNoZXItPmNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlKHJlcXVlc3RJ
ZCk7CisgICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+Y29tbWFuZChwcm90b2NvbF9yZXF1
ZXN0SWQsIGluX2VudW1SZXF1aXJlZF9qc29uLCBpbl9vcHRfZW51bU9wdGlvbmFsX2pzb24sIGlu
X3BhcmFtZXRlclJlcXVpcmVkLCBpbl9vcHRfcGFyYW1ldGVyT3B0aW9uYWwpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BB
VENIRVJTKQogCi0gICAgRXJyb3JTdHJpbmcgZXJyb3I7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4g
cmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBDb21tYW5kRG9tYWluQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyOjpSZXR1cm5WYWx1ZSBvdXRfcmV0dXJuVmFsdWU7Ci0gICAgbV9h
Z2VudC0+Y29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUoZXJyb3IsICZvdXRfcmV0dXJuVmFsdWUp
OworICAgIGF1dG8gaW5fZW51bVJlcXVpcmVkID0gUHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpwYXJz
ZUVudW1WYWx1ZUZyb21TdHJpbmc8UHJvdG9jb2w6OlR5cGVEb21haW46OkVudW0+KGluX2VudW1S
ZXF1aXJlZF9qc29uKTsKKyAgICBpZiAoIWluX2VudW1SZXF1aXJlZCkgeworICAgICAgICBtX2Jh
Y2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpT
ZXJ2ZXJFcnJvciwgbWFrZVN0cmluZygiVW5rbm93biBlbnVtUmVxdWlyZWQ6ICJfcywgaW5fZW51
bVJlcXVpcmVkX2pzb24pKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgIGlmICghZXJy
b3IubGVuZ3RoKCkpCi0gICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJyZXR1cm5WYWx1ZSJfcywg
SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKG91
dF9yZXR1cm5WYWx1ZSkpOworICAgIGF1dG8gaW5fb3B0X2VudW1PcHRpb25hbCA9IFByb3RvY29s
OjpUZXN0SGVscGVyczo6cGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPFByb3RvY29sOjpUeXBlRG9t
YWluOjpFbnVtPihpbl9vcHRfZW51bU9wdGlvbmFsX2pzb24pOwogCi0gICAgaWYgKCFlcnJvci5s
ZW5ndGgoKSkKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVl
c3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tl
bmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2
ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOworICAgIGF1dG8gcmVzdWx0ID0gbV9hZ2VudC0+Y29t
bWFuZCgqaW5fZW51bVJlcXVpcmVkLCBXVEZNb3ZlKGluX29wdF9lbnVtT3B0aW9uYWwpLCBpbl9w
YXJhbWV0ZXJSZXF1aXJlZCwgaW5fb3B0X3BhcmFtZXRlck9wdGlvbmFsKTsKKyAgICBpZiAoIXJl
c3VsdCkgeworICAgICAgICBBU1NFUlQoIXJlc3VsdC5lcnJvcigpLmlzRW1wdHkoKSk7CisgICAg
ICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3Bh
dGNoZXI6OlNlcnZlckVycm9yLCByZXN1bHQuZXJyb3IoKSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBhdXRvIFtvdXRfZW51bVJlcXVpcmVkLCBvdXRfb3B0X2VudW1PcHRpb25hbCwg
b3V0X3JldHVyblJlcXVpcmVkLCBvdXRfb3B0X3JldHVybk9wdGlvbmFsXSA9IFdURk1vdmUocmVz
dWx0LnZhbHVlKCkpOworCisgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9i
amVjdDo6Y3JlYXRlKCk7CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygiZW51
bVJlcXVpcmVkIl9zLCBQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVl
KG91dF9lbnVtUmVxdWlyZWQpKTsKKyAgICBpZiAoISFvdXRfb3B0X2VudW1PcHRpb25hbCkKKyAg
ICAgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygiZW51bU9wdGlvbmFsIl9zLCBQ
cm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKCpvdXRfb3B0X2VudW1P
cHRpb25hbCkpOworICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoInJldHVyblJl
cXVpcmVkIl9zLCBvdXRfcmV0dXJuUmVxdWlyZWQpOworICAgIGlmICghIW91dF9vcHRfcmV0dXJu
T3B0aW9uYWwpCisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoInJldHVy
bk9wdGlvbmFsIl9zLCBvdXRfb3B0X3JldHVybk9wdGlvbmFsKTsKKyAgICBtX2JhY2tlbmREaXNw
YXRjaGVyLT5zZW5kUmVzcG9uc2UocHJvdG9jb2xfcmVxdWVzdElkLCBXVEZNb3ZlKHByb3RvY29s
X2pzb25NZXNzYWdlKSwgZmFsc2UpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKQEAg
LTMxOCw2ICszMzQsNyBAQCB2b2lkIENvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Y29t
bWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUobG9uZyByZXF1ZXN0SWQsCiAKICNpbmNsdWRlICJUZXN0
UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRl
IDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFt
ZXNwYWNlIEluc3BlY3RvciB7CkBAIC0zMjgsMTMgKzM0NSwxOSBAQCBjbGFzcyBFdmVudERvbWFp
bkZyb250ZW5kRGlzcGF0Y2hlciB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJs
aWM6CiAgICAgRXZlbnREb21haW5Gcm9udGVuZERpc3BhdGNoZXIoRnJvbnRlbmRSb3V0ZXImIGZy
b250ZW5kUm91dGVyKSA6IG1fZnJvbnRlbmRSb3V0ZXIoZnJvbnRlbmRSb3V0ZXIpIHsgfQotICAg
ICAgICAvLyBOYW1lZCBhZnRlciBwYXJhbWV0ZXIgJ3BhcmFtZXRlcicgd2hpbGUgZ2VuZXJhdGlu
ZyBjb21tYW5kL2V2ZW50IGV2ZW50V2l0aEVudW1QYXJhbWV0ZXIuCi0gICAgICAgIGVudW0gY2xh
c3MgUGFyYW1ldGVyIHsKKyAgICAgICAgLy8gTmFtZWQgYWZ0ZXIgcGFyYW1ldGVyICdwYXJhbWV0
ZXJSZXF1aXJlZCcgd2hpbGUgZ2VuZXJhdGluZyBjb21tYW5kL2V2ZW50IGV2ZW50LgorICAgICAg
ICBlbnVtIGNsYXNzIFBhcmFtZXRlclJlcXVpcmVkIHsKICAgICAgICAgICAgIFNoYXJlZCA9IDAs
Ci0gICAgICAgICAgICBCbGFjayA9IDQsCi0gICAgICAgICAgICBXaGl0ZSA9IDUsCi0gICAgICAg
IH07IC8vIGVudW0gY2xhc3MgUGFyYW1ldGVyCi0gICAgdm9pZCBldmVudFdpdGhFbnVtUGFyYW1l
dGVyKFBhcmFtZXRlciBwYXJhbWV0ZXIpOworICAgICAgICAgICAgU2hhcmVkUmVxdWlyZWQgPSAz
LAorICAgICAgICAgICAgR3JleSA9IDQsCisgICAgICAgIH07IC8vIGVudW0gY2xhc3MgUGFyYW1l
dGVyUmVxdWlyZWQKKyAgICAgICAgLy8gTmFtZWQgYWZ0ZXIgcGFyYW1ldGVyICdwYXJhbWV0ZXJP
cHRpb25hbCcgd2hpbGUgZ2VuZXJhdGluZyBjb21tYW5kL2V2ZW50IGV2ZW50LgorICAgICAgICBl
bnVtIGNsYXNzIFBhcmFtZXRlck9wdGlvbmFsIHsKKyAgICAgICAgICAgIFNoYXJlZCA9IDAsCisg
ICAgICAgICAgICBTaGFyZWRPcHRpb25hbCA9IDUsCisgICAgICAgICAgICBHcmVlbiA9IDYsCisg
ICAgICAgIH07IC8vIGVudW0gY2xhc3MgUGFyYW1ldGVyT3B0aW9uYWwKKyAgICB2b2lkIGV2ZW50
KFByb3RvY29sOjpUeXBlRG9tYWluOjpFbnVtIGVudW1SZXF1aXJlZCwgT3B0aW9uYWw8UHJvdG9j
b2w6OlR5cGVEb21haW46OkVudW0+JiYgb3B0X2VudW1PcHRpb25hbCwgY29uc3QgU3RyaW5nJiBw
YXJhbWV0ZXJSZXF1aXJlZCwgY29uc3QgU3RyaW5nJiBvcHRfcGFyYW1ldGVyT3B0aW9uYWwpOwog
cHJpdmF0ZToKICAgICBGcm9udGVuZFJvdXRlciYgbV9mcm9udGVuZFJvdXRlcjsKIH07CkBAIC0z
NzYsMTkgKzM5OSwyMyBAQCBwcml2YXRlOgogI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNo
ZXJzLmgiCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRl
ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3Rv
ciB7CiAKLXZvaWQgRXZlbnREb21haW5Gcm9udGVuZERpc3BhdGNoZXI6OmV2ZW50V2l0aEVudW1Q
YXJhbWV0ZXIoUGFyYW1ldGVyIHBhcmFtZXRlcikKK3ZvaWQgRXZlbnREb21haW5Gcm9udGVuZERp
c3BhdGNoZXI6OmV2ZW50KFByb3RvY29sOjpUeXBlRG9tYWluOjpFbnVtIGVudW1SZXF1aXJlZCwg
T3B0aW9uYWw8UHJvdG9jb2w6OlR5cGVEb21haW46OkVudW0+JiYgb3B0X2VudW1PcHRpb25hbCwg
Y29uc3QgU3RyaW5nJiBwYXJhbWV0ZXJSZXF1aXJlZCwgY29uc3QgU3RyaW5nJiBvcHRfcGFyYW1l
dGVyT3B0aW9uYWwpCiB7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09O
OjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJf
cywgIkV2ZW50RG9tYWluLmV2ZW50V2l0aEVudW1QYXJhbWV0ZXIiX3MpOwotICAgIFJlZjxKU09O
OjpPYmplY3Q+IHBhcmFtc09iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgcGFy
YW1zT2JqZWN0LT5zZXRTdHJpbmcoInBhcmFtZXRlciJfcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6
VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKHBhcmFtZXRlcikpOwotICAgIGpzb25N
ZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyJfcywgV1RGTW92ZShwYXJhbXNPYmplY3QpKTsKKyAg
ICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAg
ICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJFdmVudERvbWFp
bi5ldmVudCJfcyk7CisgICAgYXV0byBwcm90b2NvbF9wYXJhbXNPYmplY3QgPSBKU09OOjpPYmpl
Y3Q6OmNyZWF0ZSgpOworICAgIHByb3RvY29sX3BhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJlbnVt
UmVxdWlyZWQiX3MsIFByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUo
ZW51bVJlcXVpcmVkKSk7CisgICAgaWYgKCEhb3B0X2VudW1PcHRpb25hbCkKKyAgICAgICAgcHJv
dG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoImVudW1PcHRpb25hbCJfcywgUHJvdG9jb2w6
OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZSgqb3B0X2VudW1PcHRpb25hbCkpOwor
ICAgIHByb3RvY29sX3BhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJwYXJhbWV0ZXJSZXF1aXJlZCJf
cywgcGFyYW1ldGVyUmVxdWlyZWQpOworICAgIGlmICghIW9wdF9wYXJhbWV0ZXJPcHRpb25hbCkK
KyAgICAgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInBhcmFtZXRlck9wdGlv
bmFsIl9zLCBvcHRfcGFyYW1ldGVyT3B0aW9uYWwpOworICAgIHByb3RvY29sX2pzb25NZXNzYWdl
LT5zZXRPYmplY3QoInBhcmFtcyJfcywgV1RGTW92ZShwcm90b2NvbF9wYXJhbXNPYmplY3QpKTsK
IAotICAgIG1fZnJvbnRlbmRSb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pTT05TdHJp
bmcoKSk7CisgICAgbV9mcm9udGVuZFJvdXRlci5zZW5kRXZlbnQocHJvdG9jb2xfanNvbk1lc3Nh
Z2UtPnRvSlNPTlN0cmluZygpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCkBAIC00
MjgsNyArNDU1LDkgQEAgdm9pZCBFdmVudERvbWFpbkZyb250ZW5kRGlzcGF0Y2hlcjo6ZXZlbnRX
aXRoRW51bVBhcmFtZXRlcihQYXJhbWV0ZXIgcGFyYW1ldGVyKQogI3ByYWdtYSBvbmNlCiAKICNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+Ci0jaW5jbHVk
ZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1
ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBu
YW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtNDQwLDcgKzQ2OSw3IEBAIG5hbWVzcGFjZSBQcm90
b2NvbCB7CiAKIC8vIEZvcndhcmQgZGVjbGFyYXRpb25zLgogbmFtZXNwYWNlIFR5cGVEb21haW4g
ewotZW51bSBjbGFzcyBUeXBlRG9tYWluRW51bTsKK2VudW0gY2xhc3MgRW51bTsKIH0gLy8gVHlw
ZURvbWFpbgogLy8gRW5kIG9mIGZvcndhcmQgZGVjbGFyYXRpb25zLgogCkBAIC00NjAsMTIgKzQ4
OSwxMSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBTdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUo
VCBlbnVtVmFsdWUpCiAKIG5hbWVzcGFjZSBUeXBlRG9tYWluIHsKIAotZW51bSBjbGFzcyBUeXBl
RG9tYWluRW51bSB7CitlbnVtIGNsYXNzIEVudW0gewogICAgIFNoYXJlZCA9IDAsCi0gICAgUmVk
ID0gMSwKLSAgICBHcmVlbiA9IDIsCi0gICAgQmx1ZSA9IDMsCi19OyAvLyBlbnVtIGNsYXNzIFR5
cGVEb21haW5FbnVtCisgICAgMSA9IDEsCisgICAgMiA9IDIsCit9OyAvLyBlbnVtIGNsYXNzIEVu
dW0KIAogfSAvLyBUeXBlRG9tYWluCiAKQEAgLTQ3OCw3ICs1MDYsNyBAQCBPcHRpb25hbDxQcm90
b2NvbEVudW1UeXBlPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmcoY29uc3QgU3RyaW5nJik7CiAK
IC8vIEVudW1zIGluIHRoZSAnVHlwZURvbWFpbicgRG9tYWluCiB0ZW1wbGF0ZTw+Ci1PcHRpb25h
bDxJbnNwZWN0b3I6OlByb3RvY29sOjpUeXBlRG9tYWluOjpUeXBlRG9tYWluRW51bT4gcGFyc2VF
bnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlR5cGVEb21haW46OlR5cGVE
b21haW5FbnVtPihjb25zdCBTdHJpbmcmKTsKK09wdGlvbmFsPFByb3RvY29sOjpUeXBlRG9tYWlu
OjpFbnVtPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8UHJvdG9jb2w6OlR5cGVEb21haW46OkVu
dW0+KGNvbnN0IFN0cmluZyYpOwogCiB9IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycwogCkBAIC00
OTIsNyArNTIwLDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRIYXNoOwog
CiAvLyBIYXNoIGRlY2xhcmF0aW9ucyBpbiB0aGUgJ1R5cGVEb21haW4nIERvbWFpbgogdGVtcGxh
dGU8Pgotc3RydWN0IERlZmF1bHRIYXNoPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlR5cGVEb21haW46
OlR5cGVEb21haW5FbnVtPiA6IEludEhhc2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6VHlwZURvbWFp
bjo6VHlwZURvbWFpbkVudW0+IHsgfTsKK3N0cnVjdCBEZWZhdWx0SGFzaDxJbnNwZWN0b3I6OlBy
b3RvY29sOjpUeXBlRG9tYWluOjpFbnVtPiA6IEludEhhc2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6
VHlwZURvbWFpbjo6RW51bT4geyB9OwogCiB9IC8vIG5hbWVzcGFjZSBXVEYKICMjIyBFbmQgRmls
ZTogVGVzdFByb3RvY29sT2JqZWN0cy5oCkBAIC01MzAsOCArNTU4LDcgQEAgc3RydWN0IERlZmF1
bHRIYXNoPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlR5cGVEb21haW46OlR5cGVEb21haW5FbnVtPiA6
IEludEhhc2g8SW4KICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xP
YmplY3RzLmgiCiAKLSNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KIAogbmFtZXNwYWNlIElu
c3BlY3RvciB7CiAKQEAgLTU0MSwxNCArNTY4LDE2IEBAIG5hbWVzcGFjZSBUZXN0SGVscGVycyB7
CiAKIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBlbnVtX2NvbnN0YW50X3ZhbHVlc1tdID0gewog
ICAgICJzaGFyZWQiLAotICAgICJyZWQiLAorICAgICIxIiwKKyAgICAiMiIsCisgICAgInNoYXJl
ZFJlcXVpcmVkIiwKKyAgICAiZ3JleSIsCisgICAgInNoYXJlZE9wdGlvbmFsIiwKICAgICAiZ3Jl
ZW4iLAotICAgICJibHVlIiwKICAgICAiYmxhY2siLAorICAgICJyZWQiLAogICAgICJ3aGl0ZSIs
Ci0gICAgImN5YW4iLAotICAgICJtYWdlbnRhIiwKLSAgICAieWVsbG93IiwKKyAgICAiYmx1ZSIs
CiB9OwogCiBTdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUoaW50IGNvZGUpIHsKQEAgLTU1OCwx
NyArNTg3LDE2IEBAIFN0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSkgewogLy8g
RW51bXMgaW4gdGhlICdUeXBlRG9tYWluJyBEb21haW4KIAogdGVtcGxhdGU8PgotT3B0aW9uYWw8
SW5zcGVjdG9yOjpQcm90b2NvbDo6VHlwZURvbWFpbjo6VHlwZURvbWFpbkVudW0+IHBhcnNlRW51
bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpUeXBlRG9tYWluOjpUeXBlRG9t
YWluRW51bT4oY29uc3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKK09wdGlvbmFsPFByb3RvY29s
OjpUeXBlRG9tYWluOjpFbnVtPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8UHJvdG9jb2w6OlR5
cGVEb21haW46OkVudW0+KGNvbnN0IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcpCiB7CiAgICAgc3Rh
dGljIGNvbnN0IHNpemVfdCBjb25zdGFudFZhbHVlc1tdID0gewotICAgICAgICAoc2l6ZV90KUlu
c3BlY3Rvcjo6UHJvdG9jb2w6OlR5cGVEb21haW46OlR5cGVEb21haW5FbnVtOjpTaGFyZWQsCi0g
ICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6VHlwZURvbWFpbjo6VHlwZURvbWFp
bkVudW06OlJlZCwKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpUeXBlRG9t
YWluOjpUeXBlRG9tYWluRW51bTo6R3JlZW4sCi0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQ
cm90b2NvbDo6VHlwZURvbWFpbjo6VHlwZURvbWFpbkVudW06OkJsdWUsCisgICAgICAgIChzaXpl
X3QpUHJvdG9jb2w6OlR5cGVEb21haW46OkVudW06OlNoYXJlZCwKKyAgICAgICAgKHNpemVfdClQ
cm90b2NvbDo6VHlwZURvbWFpbjo6RW51bTo6MSwKKyAgICAgICAgKHNpemVfdClQcm90b2NvbDo6
VHlwZURvbWFpbjo6RW51bTo6MiwKICAgICB9OwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
NDsgKytpKQorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgMzsgKytpKQogICAgICAgICBpZiAo
cHJvdG9jb2xTdHJpbmcgPT0gZW51bV9jb25zdGFudF92YWx1ZXNbY29uc3RhbnRWYWx1ZXNbaV1d
KQotICAgICAgICAgICAgcmV0dXJuIChJbnNwZWN0b3I6OlByb3RvY29sOjpUeXBlRG9tYWluOjpU
eXBlRG9tYWluRW51bSljb25zdGFudFZhbHVlc1tpXTsKKyAgICAgICAgICAgIHJldHVybiAoUHJv
dG9jb2w6OlR5cGVEb21haW46OkVudW0pY29uc3RhbnRWYWx1ZXNbaV07CiAKICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwogfQpAQCAtNjI1LDcgKzY1Myw3IEBAIGNsYXNzIE9iakNJbnNwZWN0b3JD
b21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgQWx0ZXJuYXRlQ29t
bWFuCiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgT2JqQ0luc3Bl
Y3RvckNvbW1hbmREb21haW5CYWNrZW5kRGlzcGF0Y2hlcihpZDxUZXN0UHJvdG9jb2xDb21tYW5k
RG9tYWluRG9tYWluSGFuZGxlcj4gaGFuZGxlcikgeyBtX2RlbGVnYXRlID0gaGFuZGxlcjsgfQot
ICAgIHZvaWQgY29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWUobG9uZyByZXF1ZXN0SWQpIGZpbmFs
OworICAgIHZvaWQgY29tbWFuZChsb25nIHByb3RvY29sX3JlcXVlc3RJZCwgY29uc3QgU3RyaW5n
JiBlbnVtUmVxdWlyZWQsIGNvbnN0IFN0cmluZyYgb3B0X2VudW1PcHRpb25hbCwgY29uc3QgU3Ry
aW5nJiBwYXJhbWV0ZXJSZXF1aXJlZCwgY29uc3QgU3RyaW5nJiBvcHRfcGFyYW1ldGVyT3B0aW9u
YWwpIGZpbmFsOwogcHJpdmF0ZToKICAgICBSZXRhaW5QdHI8aWQ8VGVzdFByb3RvY29sQ29tbWFu
ZERvbWFpbkRvbWFpbkhhbmRsZXI+PiBtX2RlbGVnYXRlOwogfTsKQEAgLTY3MywyNiArNzAxLDQ3
IEBAIHByaXZhdGU6CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCi12b2lkIE9iakNJbnNwZWN0
b3JDb21tYW5kRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OmNvbW1hbmRXaXRoRW51bVJldHVyblZh
bHVlKGxvbmcgcmVxdWVzdElkKQordm9pZCBPYmpDSW5zcGVjdG9yQ29tbWFuZERvbWFpbkJhY2tl
bmREaXNwYXRjaGVyOjpjb21tYW5kKGxvbmcgcHJvdG9jb2xfcmVxdWVzdElkLCBjb25zdCBTdHJp
bmcmIGluX2VudW1SZXF1aXJlZCwgY29uc3QgU3RyaW5nJiBpbl9vcHRfZW51bU9wdGlvbmFsLCBj
b25zdCBTdHJpbmcmIGluX3BhcmFtZXRlclJlcXVpcmVkLCBjb25zdCBTdHJpbmcmIGluX29wdF9w
YXJhbWV0ZXJPcHRpb25hbCkKIHsKLSAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxl
Y3RvcjpAc2VsZWN0b3IoY29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWVXaXRoRXJyb3JDYWxsYmFj
azpzdWNjZXNzQ2FsbGJhY2s6KV0pIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVw
b3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RG
b3VuZCwgIidDb21tYW5kRG9tYWluLmNvbW1hbmRXaXRoRW51bVJldHVyblZhbHVlJyB3YXMgbm90
IGZvdW5kIl9zKTsKKyAgICBpZiAoIVttX2RlbGVnYXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2Vs
ZWN0b3IoY29tbWFuZFdpdGhFcnJvckNhbGxiYWNrOnN1Y2Nlc3NDYWxsYmFjazplbnVtUmVxdWly
ZWQ6ZW51bU9wdGlvbmFsOnBhcmFtZXRlclJlcXVpcmVkOnBhcmFtZXRlck9wdGlvbmFsOildKSB7
CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IocHJvdG9j
b2xfcmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0Y2hlcjo6TWV0aG9kTm90Rm91bmQsICInQ29tbWFu
ZERvbWFpbi5jb21tYW5kJyB3YXMgbm90IGZvdW5kIl9zKTsKICAgICAgICAgYmFja2VuZERpc3Bh
dGNoZXIoKS0+c2VuZFBlbmRpbmdFcnJvcnMoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAog
ICAgIGlkIGVycm9yQ2FsbGJhY2sgPSBeKE5TU3RyaW5nICplcnJvcikgewotICAgICAgICBiYWNr
ZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERp
c3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJvcik7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVy
KCktPnJlcG9ydFByb3RvY29sRXJyb3IocHJvdG9jb2xfcmVxdWVzdElkLCBCYWNrZW5kRGlzcGF0
Y2hlcjo6U2VydmVyRXJyb3IsIGVycm9yKTsKICAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+
c2VuZFBlbmRpbmdFcnJvcnMoKTsKICAgICB9OwogCi0gICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0g
XihUZXN0UHJvdG9jb2xDb21tYW5kRG9tYWluQ29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWVSZXR1
cm5WYWx1ZSByZXR1cm5WYWx1ZSkgewotICAgICAgICBSZWY8SlNPTjo6T2JqZWN0PiByZXN1bHRP
YmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgICAgICByZXN1bHRPYmplY3QtPnNl
dFN0cmluZygicmV0dXJuVmFsdWUiX3MsIHRvUHJvdG9jb2xTdHJpbmcocmV0dXJuVmFsdWUpKTsK
LSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJZCwgV1RG
TW92ZShyZXN1bHRPYmplY3QpLCBmYWxzZSk7CisgICAgaWQgc3VjY2Vzc0NhbGxiYWNrID0gXihU
ZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bSBvdXRfZW51bVJlcXVpcmVkLCBUZXN0UHJvdG9jb2xU
eXBlRG9tYWluRW51bSAqb3V0X29wdF9lbnVtT3B0aW9uYWwsIFRlc3RQcm90b2NvbENvbW1hbmRE
b21haW4oYW5vbnltb3VzKSBvdXRfcmV0dXJuUmVxdWlyZWQsIFRlc3RQcm90b2NvbENvbW1hbmRE
b21haW4oYW5vbnltb3VzKSAqb3V0X29wdF9yZXR1cm5PcHRpb25hbCkgeworICAgICAgICBhdXRv
IHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAg
cHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygiZW51bVJlcXVpcmVkIl9zLCB0b1Byb3Rv
Y29sU3RyaW5nKG91dF9lbnVtUmVxdWlyZWQpKTsKKyAgICAgICAgaWYgKCEhb3V0X29wdF9lbnVt
T3B0aW9uYWwpCisgICAgICAgICAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJl
bnVtT3B0aW9uYWwiX3MsIHRvUHJvdG9jb2xTdHJpbmcoKm91dF9vcHRfZW51bU9wdGlvbmFsKSk7
CisgICAgICAgIHByb3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoInJldHVyblJlcXVpcmVk
Il9zLCB0b1Byb3RvY29sU3RyaW5nKG91dF9yZXR1cm5SZXF1aXJlZCkpOworICAgICAgICBpZiAo
ISFvdXRfb3B0X3JldHVybk9wdGlvbmFsKQorICAgICAgICAgICAgcHJvdG9jb2xfanNvbk1lc3Nh
Z2UtPnNldFN0cmluZygicmV0dXJuT3B0aW9uYWwiX3MsIHRvUHJvdG9jb2xTdHJpbmcoKm91dF9v
cHRfcmV0dXJuT3B0aW9uYWwpKTsKKyAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+c2VuZFJl
c3BvbnNlKHByb3RvY29sX3JlcXVlc3RJZCwgV1RGTW92ZShwcm90b2NvbF9qc29uTWVzc2FnZSks
IGZhbHNlKTsKICAgICB9OwogCi0gICAgW21fZGVsZWdhdGUgY29tbWFuZFdpdGhFbnVtUmV0dXJu
VmFsdWVXaXRoRXJyb3JDYWxsYmFjazplcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNj
ZXNzQ2FsbGJhY2tdOworICAgIE9wdGlvbmFsPFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtPiBv
X2luX2VudW1SZXF1aXJlZCA9IGZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xUeXBlRG9t
YWluRW51bT4oaW5fZW51bVJlcXVpcmVkKTsKKyAgICBpZiAoIW9faW5fZW51bVJlcXVpcmVkKSB7
CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2Vu
ZERpc3BhdGNoZXI6OkludmFsaWRQYXJhbXMsICJQYXJhbWV0ZXIgJ2VudW1SZXF1aXJlZCcgb2Yg
bWV0aG9kICdDb21tYW5kRG9tYWluLmNvbW1hbmQnIGNhbm5vdCBiZSBwcm9jZXNzZWQiX3MpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIE9wdGlvbmFsPFRlc3RQcm90b2NvbFR5cGVEb21h
aW5FbnVtPiBvX2luX29wdF9lbnVtT3B0aW9uYWw7CisgICAgaWYgKCEhaW5fb3B0X2VudW1PcHRp
b25hbCkKKyAgICAgICAgb19pbl9vcHRfZW51bU9wdGlvbmFsID0gZnJvbVByb3RvY29sU3RyaW5n
PFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtPihpbl9vcHRfZW51bU9wdGlvbmFsKTsKKyAgICBP
cHRpb25hbDxUZXN0UHJvdG9jb2xDb21tYW5kRG9tYWluKGFub255bW91cyk+IG9faW5fcGFyYW1l
dGVyUmVxdWlyZWQgPSBmcm9tUHJvdG9jb2xTdHJpbmc8VGVzdFByb3RvY29sQ29tbWFuZERvbWFp
bihhbm9ueW1vdXMpPihpbl9wYXJhbWV0ZXJSZXF1aXJlZCk7CisgICAgaWYgKCFvX2luX3BhcmFt
ZXRlclJlcXVpcmVkKSB7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnJlcG9ydFByb3Rv
Y29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6OkludmFsaWRQYXJhbXMsICJQYXJhbWV0ZXIgJ3Bh
cmFtZXRlclJlcXVpcmVkJyBvZiBtZXRob2QgJ0NvbW1hbmREb21haW4uY29tbWFuZCcgY2Fubm90
IGJlIHByb2Nlc3NlZCJfcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgT3B0aW9uYWw8
VGVzdFByb3RvY29sQ29tbWFuZERvbWFpbihhbm9ueW1vdXMpPiBvX2luX29wdF9wYXJhbWV0ZXJP
cHRpb25hbDsKKyAgICBpZiAoISFpbl9vcHRfcGFyYW1ldGVyT3B0aW9uYWwpCisgICAgICAgIG9f
aW5fb3B0X3BhcmFtZXRlck9wdGlvbmFsID0gZnJvbVByb3RvY29sU3RyaW5nPFRlc3RQcm90b2Nv
bENvbW1hbmREb21haW4oYW5vbnltb3VzKT4oaW5fb3B0X3BhcmFtZXRlck9wdGlvbmFsKTsKKyAg
ICBbbV9kZWxlZ2F0ZSBjb21tYW5kV2l0aEVycm9yQ2FsbGJhY2s6ZXJyb3JDYWxsYmFjayBzdWNj
ZXNzQ2FsbGJhY2s6c3VjY2Vzc0NhbGxiYWNrIGVudW1SZXF1aXJlZDpvX2luX2VudW1SZXF1aXJl
ZC52YWx1ZSgpIGVudW1PcHRpb25hbDooISFpbl9vcHRfZW51bU9wdGlvbmFsID8gJm9faW5fb3B0
X2VudW1PcHRpb25hbC52YWx1ZSgpIDogbmlsKSBwYXJhbWV0ZXJSZXF1aXJlZDpvX2luX3BhcmFt
ZXRlclJlcXVpcmVkLnZhbHVlKCkgcGFyYW1ldGVyT3B0aW9uYWw6KCEhaW5fb3B0X3BhcmFtZXRl
ck9wdGlvbmFsID8gJm9faW5fb3B0X3BhcmFtZXRlck9wdGlvbmFsLnZhbHVlKCkgOiBuaWwpXTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9yCkBAIC04ODcsMTYgKzkzNiwyMSBAQCB1c2lu
ZyBuYW1lc3BhY2UgSW5zcGVjdG9yOwogICAgIHJldHVybiBzZWxmOwogfQogCi0tICh2b2lkKWV2
ZW50V2l0aEVudW1QYXJhbWV0ZXJXaXRoUGFyYW1ldGVyOihUZXN0UHJvdG9jb2xFdmVudERvbWFp
bkV2ZW50V2l0aEVudW1QYXJhbWV0ZXJQYXJhbWV0ZXIpcGFyYW1ldGVyCistICh2b2lkKWV2ZW50
V2l0aEVudW1SZXF1aXJlZDooVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW0pZW51bVJlcXVpcmVk
IGVudW1PcHRpb25hbDooVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW0gKillbnVtT3B0aW9uYWwg
cGFyYW1ldGVyUmVxdWlyZWQ6KFRlc3RQcm90b2NvbEV2ZW50RG9tYWluKGFub255bW91cykpcGFy
YW1ldGVyUmVxdWlyZWQgcGFyYW1ldGVyT3B0aW9uYWw6KFRlc3RQcm90b2NvbEV2ZW50RG9tYWlu
KGFub255bW91cykgKilwYXJhbWV0ZXJPcHRpb25hbAogewogICAgIGNvbnN0IEZyb250ZW5kUm91
dGVyJiByb3V0ZXIgPSBfY29udHJvbGxlci0+ZnJvbnRlbmRSb3V0ZXIoKTsKIAotICAgIFJlZjxK
U09OOjpPYmplY3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBq
c29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJFdmVudERvbWFpbi5ldmVudFdpdGhF
bnVtUGFyYW1ldGVyIl9zKTsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBwYXJhbXNPYmplY3QgPSBK
U09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJwYXJh
bWV0ZXIiX3MsIHRvUHJvdG9jb2xTdHJpbmcocGFyYW1ldGVyKSk7Ci0gICAganNvbk1lc3NhZ2Ut
PnNldE9iamVjdCgicGFyYW1zIl9zLCBXVEZNb3ZlKHBhcmFtc09iamVjdCkpOwotICAgIHJvdXRl
ci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKKyAgICBhdXRvIHByb3Rv
Y29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBwcm90b2NvbF9q
c29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJFdmVudERvbWFpbi5ldmVudCJfcyk7
CisgICAgYXV0byBwcm90b2NvbF9wYXJhbXNPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgp
OworICAgIHByb3RvY29sX3BhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJlbnVtUmVxdWlyZWQiX3Ms
IHRvUHJvdG9jb2xTdHJpbmcoZW51bVJlcXVpcmVkKSk7CisgICAgaWYgKGVudW1PcHRpb25hbCkK
KyAgICAgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoImVudW1PcHRpb25hbCJf
cywgdG9Qcm90b2NvbFN0cmluZygoKmVudW1PcHRpb25hbCkpKTsKKyAgICBwcm90b2NvbF9wYXJh
bXNPYmplY3QtPnNldFN0cmluZygicGFyYW1ldGVyUmVxdWlyZWQiX3MsIHRvUHJvdG9jb2xTdHJp
bmcocGFyYW1ldGVyUmVxdWlyZWQpKTsKKyAgICBpZiAocGFyYW1ldGVyT3B0aW9uYWwpCisgICAg
ICAgIHByb3RvY29sX3BhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJwYXJhbWV0ZXJPcHRpb25hbCJf
cywgdG9Qcm90b2NvbFN0cmluZygoKnBhcmFtZXRlck9wdGlvbmFsKSkpOworICAgIHByb3RvY29s
X2pzb25NZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyJfcywgV1RGTW92ZShwcm90b2NvbF9wYXJh
bXNPYmplY3QpKTsKKyAgICByb3V0ZXIuc2VuZEV2ZW50KHByb3RvY29sX2pzb25NZXNzYWdlLT50
b0pTT05TdHJpbmcoKSk7CiB9CiAKIEBlbmQKQEAgLTk0MywyMSArOTk3LDIwIEBAIHVzaW5nIG5h
bWVzcGFjZSBJbnNwZWN0b3I7CiAKIHR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFRlc3RQcm90
b2NvbFR5cGVEb21haW5FbnVtKSB7CiAgICAgVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW1TaGFy
ZWQsCi0gICAgVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW1SZWQsCi0gICAgVGVzdFByb3RvY29s
VHlwZURvbWFpbkVudW1HcmVlbiwKLSAgICBUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bUJsdWUs
CisgICAgVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW0xLAorICAgIFRlc3RQcm90b2NvbFR5cGVE
b21haW5FbnVtMiwKIH07CiAKIAogCiBAcHJvdG9jb2wgVGVzdFByb3RvY29sQ29tbWFuZERvbWFp
bkRvbWFpbkhhbmRsZXIgPE5TT2JqZWN0PgogQG9wdGlvbmFsCi0tICh2b2lkKWNvbW1hbmRXaXRo
RW51bVJldHVyblZhbHVlV2l0aEVycm9yQ2FsbGJhY2s6KHZvaWQoXikoTlNTdHJpbmcgKmVycm9y
KSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9pZCheKShUZXN0UHJvdG9jb2xDb21t
YW5kRG9tYWluQ29tbWFuZFdpdGhFbnVtUmV0dXJuVmFsdWVSZXR1cm5WYWx1ZSByZXR1cm5WYWx1
ZSkpc3VjY2Vzc0NhbGxiYWNrOworLSAodm9pZCljb21tYW5kV2l0aEVycm9yQ2FsbGJhY2s6KHZv
aWQoXikoTlNTdHJpbmcgKmVycm9yKSllcnJvckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazoodm9p
ZCheKShUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bSBlbnVtUmVxdWlyZWQsIFRlc3RQcm90b2Nv
bFR5cGVEb21haW5FbnVtICplbnVtT3B0aW9uYWwsIFRlc3RQcm90b2NvbENvbW1hbmREb21haW4o
YW5vbnltb3VzKSByZXR1cm5SZXF1aXJlZCwgVGVzdFByb3RvY29sQ29tbWFuZERvbWFpbihhbm9u
eW1vdXMpICpyZXR1cm5PcHRpb25hbCkpc3VjY2Vzc0NhbGxiYWNrIGVudW1SZXF1aXJlZDooVGVz
dFByb3RvY29sVHlwZURvbWFpbkVudW0pZW51bVJlcXVpcmVkIGVudW1PcHRpb25hbDooVGVzdFBy
b3RvY29sVHlwZURvbWFpbkVudW0gKillbnVtT3B0aW9uYWwgcGFyYW1ldGVyUmVxdWlyZWQ6KFRl
c3RQcm90b2NvbENvbW1hbmREb21haW4oYW5vbnltb3VzKSlwYXJhbWV0ZXJSZXF1aXJlZCBwYXJh
bWV0ZXJPcHRpb25hbDooVGVzdFByb3RvY29sQ29tbWFuZERvbWFpbihhbm9ueW1vdXMpICopcGFy
YW1ldGVyT3B0aW9uYWw7CiBAZW5kCiAKIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJkZWZh
dWx0IikpKQogQGludGVyZmFjZSBUZXN0UHJvdG9jb2xFdmVudERvbWFpbkRvbWFpbkV2ZW50RGlz
cGF0Y2hlciA6IE5TT2JqZWN0Ci0tICh2b2lkKWV2ZW50V2l0aEVudW1QYXJhbWV0ZXJXaXRoUGFy
YW1ldGVyOihUZXN0UHJvdG9jb2xFdmVudERvbWFpbkV2ZW50V2l0aEVudW1QYXJhbWV0ZXJQYXJh
bWV0ZXIpcGFyYW1ldGVyOworLSAodm9pZClldmVudFdpdGhFbnVtUmVxdWlyZWQ6KFRlc3RQcm90
b2NvbFR5cGVEb21haW5FbnVtKWVudW1SZXF1aXJlZCBlbnVtT3B0aW9uYWw6KFRlc3RQcm90b2Nv
bFR5cGVEb21haW5FbnVtICopZW51bU9wdGlvbmFsIHBhcmFtZXRlclJlcXVpcmVkOihUZXN0UHJv
dG9jb2xFdmVudERvbWFpbihhbm9ueW1vdXMpKXBhcmFtZXRlclJlcXVpcmVkIHBhcmFtZXRlck9w
dGlvbmFsOihUZXN0UHJvdG9jb2xFdmVudERvbWFpbihhbm9ueW1vdXMpICopcGFyYW1ldGVyT3B0
aW9uYWw7CiBAZW5kCiAKIApAQCAtMTA1MCwxMiArMTEwMywxMCBAQCBpbmxpbmUgU3RyaW5nIHRv
UHJvdG9jb2xTdHJpbmcoVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW0gdmFsdWUpCiAgICAgc3dp
dGNoKHZhbHVlKSB7CiAgICAgY2FzZSBUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bVNoYXJlZDoK
ICAgICAgICAgcmV0dXJuICJzaGFyZWQiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9jb2xUeXBlRG9t
YWluRW51bVJlZDoKLSAgICAgICAgcmV0dXJuICJyZWQiX3M7Ci0gICAgY2FzZSBUZXN0UHJvdG9j
b2xUeXBlRG9tYWluRW51bUdyZWVuOgotICAgICAgICByZXR1cm4gImdyZWVuIl9zOwotICAgIGNh
c2UgVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW1CbHVlOgotICAgICAgICByZXR1cm4gImJsdWUi
X3M7CisgICAgY2FzZSBUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bTE6CisgICAgICAgIHJldHVy
biAiMSJfczsKKyAgICBjYXNlIFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtMjoKKyAgICAgICAg
cmV0dXJuICIyIl9zOwogICAgIH0KIH0KIApAQCAtMTA2NCwxMiArMTExNSwxMCBAQCBpbmxpbmUg
T3B0aW9uYWw8VGVzdFByb3RvY29sVHlwZURvbWFpbkVudW0+IGZyb21Qcm90b2NvbFN0cmluZyhj
b25zdCBTdHJpbmcmIHZhbAogewogICAgIGlmICh2YWx1ZSA9PSAic2hhcmVkIikKICAgICAgICAg
cmV0dXJuIFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtU2hhcmVkOwotICAgIGlmICh2YWx1ZSA9
PSAicmVkIikKLSAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtUmVkOwot
ICAgIGlmICh2YWx1ZSA9PSAiZ3JlZW4iKQotICAgICAgICByZXR1cm4gVGVzdFByb3RvY29sVHlw
ZURvbWFpbkVudW1HcmVlbjsKLSAgICBpZiAodmFsdWUgPT0gImJsdWUiKQotICAgICAgICByZXR1
cm4gVGVzdFByb3RvY29sVHlwZURvbWFpbkVudW1CbHVlOworICAgIGlmICh2YWx1ZSA9PSAiMSIp
CisgICAgICAgIHJldHVybiBUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bTE7CisgICAgaWYgKHZh
bHVlID09ICIyIikKKyAgICAgICAgcmV0dXJuIFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtMjsK
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQogCkBAIC0xMTE3LDE3ICsxMTY2LDE3IEBAIHVz
aW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CiAKIEBpbnRlcmZhY2UgVGVzdFByb3RvY29sVHlwZUNv
bnZlcnNpb25zIChUeXBlRG9tYWluRG9tYWluKQogCi0rICh2b2lkKV9wYXJzZVR5cGVEb21haW5F
bnVtOihOU051bWJlciAqKilvdXRWYWx1ZSBmcm9tUGF5bG9hZDooaWQpcGF5bG9hZDsKKysgKHZv
aWQpX3BhcnNlRW51bTooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxv
YWQ7CiAKIEBlbmQKIAogQGltcGxlbWVudGF0aW9uIFRlc3RQcm90b2NvbFR5cGVDb252ZXJzaW9u
cyAoVHlwZURvbWFpbkRvbWFpbikKIAotKyAodm9pZClfcGFyc2VUeXBlRG9tYWluRW51bTooTlNO
dW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKKysgKHZvaWQpX3BhcnNl
RW51bTooTlNOdW1iZXIgKiopb3V0VmFsdWUgZnJvbVBheWxvYWQ6KGlkKXBheWxvYWQKIHsKICAg
ICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9UWVBFKHBheWxvYWQsIFtOU1N0cmluZyBjbGFzc10p
OwogICAgIE9wdGlvbmFsPFRlc3RQcm90b2NvbFR5cGVEb21haW5FbnVtPiByZXN1bHQgPSBJbnNw
ZWN0b3I6OmZyb21Qcm90b2NvbFN0cmluZzxUZXN0UHJvdG9jb2xUeXBlRG9tYWluRW51bT4ocGF5
bG9hZCk7Ci0gICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfRU5VTV9WQUxVRShyZXN1bHQsIEAi
VHlwZURvbWFpbkVudW0iKTsKKyAgICBUSFJPV19FWENFUFRJT05fRk9SX0JBRF9FTlVNX1ZBTFVF
KHJlc3VsdCwgQCJFbnVtIik7CiAgICAgKm91dFZhbHVlID0gQChyZXN1bHQudmFsdWUoKSk7CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9leHBlY3RlZC9ldmVudC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dhYmxl
VHlwZS5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9leHBlY3RlZC9ldmVudC10YXJnZXRUeXBlLW1hdGNoaW5nLWRvbWFpbi1kZWJ1Z2dh
YmxlVHlwZS5qc29uLXJlc3VsdAppbmRleCBlMmVkOWY4ODk0Y2U3NzZiMjcyZDYxMTNlNTM2Y2Fh
NzQ2ZWJjYjg1Li42MjNjNGIxZjM3MTQzMGIyN2Y0ZWVmMGE2NTBlMzgyZmRiZjk2YzZjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhw
ZWN0ZWQvZXZlbnQtdGFyZ2V0VHlwZS1tYXRjaGluZy1kb21haW4tZGVidWdnYWJsZVR5cGUuanNv
bi1yZXN1bHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2V4cGVjdGVkL2V2ZW50LXRhcmdldFR5cGUtbWF0Y2hpbmctZG9tYWluLWRlYnVnZ2FibGVU
eXBlLmpzb24tcmVzdWx0CkBAIC03MCw3ICs3MCw3IEBAIEluc3BlY3RvckJhY2tlbmQuYWN0aXZh
dGVEb21haW4oIkRvbWFpbiIsIFsicGFnZSJdKTsKIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQogCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKKyNp
bmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9J
bnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgogCkBAIC04OCw3ICs4OCw3IEBAIHByaXZhdGU6CiBj
bGFzcyBBbHRlcm5hdGVEb21haW5CYWNrZW5kRGlzcGF0Y2hlciA6IHB1YmxpYyBBbHRlcm5hdGVC
YWNrZW5kRGlzcGF0Y2hlciB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+QWx0ZXJuYXRlRG9tYWlu
QmFja2VuZERpc3BhdGNoZXIoKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgQ29tbWFuZChsb25nIGNh
bGxJZCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBDb21tYW5kKGxvbmcgcHJvdG9jb2xfcmVxdWVz
dElkKSA9IDA7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBJbnNwZWN0b3IKQEAgLTEzMCwxMSArMTMw
LDE0IEBAIHB1YmxpYzoKIAogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1
ZGUgPHR1cGxlPgorI2luY2x1ZGUgPHd0Zi9FeHBlY3RlZC5oPgorI2luY2x1ZGUgPHd0Zi9PcHRp
b25hbC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5z
cGVjdG9yIHsKIAotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKIAogI2lmIEVOQUJMRShJ
TlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogY2xhc3MgQWx0ZXJuYXRlRG9tYWluQmFj
a2VuZERpc3BhdGNoZXI7CkBAIC0xNDIsNyArMTQ1LDcgQEAgY2xhc3MgQWx0ZXJuYXRlRG9tYWlu
QmFja2VuZERpc3BhdGNoZXI7CiAKIGNsYXNzIERvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxl
ciB7CiBwdWJsaWM6Ci0gICAgdmlydHVhbCB2b2lkIENvbW1hbmQoRXJyb3JTdHJpbmcmKSA9IDA7
CisgICAgdmlydHVhbCBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBDb21tYW5kKCkgPSAw
OwogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgfkRvbWFpbkJhY2tlbmREaXNwYXRjaGVySGFuZGxl
cigpOwogfTsKQEAgLTE1MCw5ICsxNTMsOSBAQCBwcm90ZWN0ZWQ6CiBjbGFzcyBEb21haW5CYWNr
ZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1YmxpYyBTdXBwbGVtZW50YWxCYWNrZW5kRGlzcGF0Y2hl
ciB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxEb21haW5CYWNrZW5kRGlzcGF0Y2hlcj4gY3Jl
YXRlKEJhY2tlbmREaXNwYXRjaGVyJiwgRG9tYWluQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7
Ci0gICAgdm9pZCBkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2Qs
IFJlZjxKU09OOjpPYmplY3Q+JiYgbWVzc2FnZSkgZmluYWw7CisgICAgdm9pZCBkaXNwYXRjaChs
b25nIHByb3RvY29sX3JlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBwcm90b2NvbF9tZXRob2QsIFJl
ZjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfbWVzc2FnZSkgZmluYWw7CiBwcml2YXRlOgotICAg
IHZvaWQgQ29tbWFuZChsb25nIHJlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJh
bWV0ZXJzKTsKKyAgICB2b2lkIENvbW1hbmQobG9uZyBwcm90b2NvbF9yZXF1ZXN0SWQsIFJlZlB0
cjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfcGFyYW1ldGVycyk7CiAjaWYgRU5BQkxFKElOU1BF
Q1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiBwdWJsaWM6CiAgICAgdm9pZCBzZXRBbHRlcm5h
dGVEaXNwYXRjaGVyKEFsdGVybmF0ZURvbWFpbkJhY2tlbmREaXNwYXRjaGVyKiBhbHRlcm5hdGVE
aXNwYXRjaGVyKSB7IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IGFsdGVybmF0ZURpc3BhdGNoZXI7
IH0KQEAgLTIwMSw5ICsyMDQsNyBAQCBwcml2YXRlOgogI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlz
cGF0Y2hlcnMuaCIKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5k
Um91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KICNpbmNsdWRlIDx3dGYvTmV2
ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKICNpZiBFTkFC
TEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKICNpbmNsdWRlICJUZXN0QWx0ZXJu
YXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCkBAIC0yMjUsMzggKzIyNiwzOCBAQCBEb21haW5CYWNr
ZW5kRGlzcGF0Y2hlcjo6RG9tYWluQmFja2VuZERpc3BhdGNoZXIoQmFja2VuZERpc3BhdGNoZXIm
IGJhY2tlbmREaXNwYQogICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0Y2hl
ckZvckRvbWFpbigiRG9tYWluIl9zLCB0aGlzKTsKIH0KIAotdm9pZCBEb21haW5CYWNrZW5kRGlz
cGF0Y2hlcjo6ZGlzcGF0Y2gobG9uZyByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbWV0aG9kLCBS
ZWY8SlNPTjo6T2JqZWN0PiYmIG1lc3NhZ2UpCit2b2lkIERvbWFpbkJhY2tlbmREaXNwYXRjaGVy
OjpkaXNwYXRjaChsb25nIHByb3RvY29sX3JlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBwcm90b2Nv
bF9tZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfbWVzc2FnZSkKIHsKICAgICBS
ZWY8RG9tYWluQmFja2VuZERpc3BhdGNoZXI+IHByb3RlY3QoKnRoaXMpOwogCi0gICAgUmVmUHRy
PEpTT046Ok9iamVjdD4gcGFyYW1ldGVyczsKLSAgICBtZXNzYWdlLT5nZXRPYmplY3QoInBhcmFt
cyJfcywgcGFyYW1ldGVycyk7CisgICAgYXV0byBwcm90b2NvbF9wYXJhbWV0ZXJzID0gcHJvdG9j
b2xfbWVzc2FnZS0+Z2V0T2JqZWN0KCJwYXJhbXMiX3MpOwogCi0gICAgaWYgKG1ldGhvZCA9PSAi
Q29tbWFuZCIpIHsKLSAgICAgICAgQ29tbWFuZChyZXF1ZXN0SWQsIFdURk1vdmUocGFyYW1ldGVy
cykpOworICAgIGlmIChwcm90b2NvbF9tZXRob2QgPT0gIkNvbW1hbmQiKSB7CisgICAgICAgIENv
bW1hbmQocHJvdG9jb2xfcmVxdWVzdElkLCBXVEZNb3ZlKHByb3RvY29sX3BhcmFtZXRlcnMpKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9y
dFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ0RvbWFp
bi4iICsgbWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOworICAgIG1fYmFja2VuZERpc3BhdGNo
ZXItPnJlcG9ydFByb3RvY29sRXJyb3IoQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5k
LCAiJ0RvbWFpbi4iICsgcHJvdG9jb2xfbWV0aG9kICsgIicgd2FzIG5vdCBmb3VuZCIpOwogfQog
Ci12b2lkIERvbWFpbkJhY2tlbmREaXNwYXRjaGVyOjpDb21tYW5kKGxvbmcgcmVxdWVzdElkLCBS
ZWZQdHI8SlNPTjo6T2JqZWN0PiYmKQordm9pZCBEb21haW5CYWNrZW5kRGlzcGF0Y2hlcjo6Q29t
bWFuZChsb25nIHByb3RvY29sX3JlcXVlc3RJZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJikKIHsK
ICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKICAgICBpZiAobV9h
bHRlcm5hdGVEaXNwYXRjaGVyKSB7Ci0gICAgICAgIG1fYWx0ZXJuYXRlRGlzcGF0Y2hlci0+Q29t
bWFuZChyZXF1ZXN0SWQpOworICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPkNvbW1hbmQo
cHJvdG9jb2xfcmVxdWVzdElkKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRpZiAvLyBF
TkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIAotICAgIEVycm9yU3RyaW5n
IGVycm9yOwotICAgIFJlZjxKU09OOjpPYmplY3Q+IHJlc3VsdCA9IEpTT046Ok9iamVjdDo6Y3Jl
YXRlKCk7Ci0gICAgbV9hZ2VudC0+Q29tbWFuZChlcnJvcik7CisgICAgYXV0byByZXN1bHQgPSBt
X2FnZW50LT5Db21tYW5kKCk7CisgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAgICAgQVNTRVJUKCFy
ZXN1bHQuZXJyb3IoKS5pc0VtcHR5KCkpOworICAgICAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5y
ZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwgcmVzdWx0
LmVycm9yKCkpOworICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgaWYgKCFlcnJvci5sZW5n
dGgoKSkKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3BvbnNlKHJlcXVlc3RJ
ZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7Ci0gICAgZWxzZQotICAgICAgICBtX2JhY2tlbmRE
aXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJF
cnJvciwgV1RGTW92ZShlcnJvcikpOworICAgIGF1dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBK
U09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnNlbmRSZXNw
b25zZShwcm90b2NvbF9yZXF1ZXN0SWQsIFdURk1vdmUocHJvdG9jb2xfanNvbk1lc3NhZ2UpLCBm
YWxzZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgpAQCAtMjk3LDYgKzI5OCw3IEBA
IHZvaWQgRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkNvbW1hbmQobG9uZyByZXF1ZXN0SWQsIFJl
ZlB0cjxKU09OOjpPYmplY3Q+JiYpCiAKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgi
CiAjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4K
ICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7
CkBAIC0zNDksMTYgKzM1MSwxNSBAQCBwcml2YXRlOgogI2luY2x1ZGUgIlRlc3RGcm9udGVuZERp
c3BhdGNoZXJzLmgiCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVu
ZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogbmFtZXNwYWNlIElu
c3BlY3RvciB7CiAKIHZvaWQgRG9tYWluRnJvbnRlbmREaXNwYXRjaGVyOjpFdmVudCgpCiB7Ci0g
ICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgp
OwotICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRvbWFpbi5FdmVudCJf
cyk7CisgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRl
KCk7CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiRG9t
YWluLkV2ZW50Il9zKTsKIAotICAgIG1fZnJvbnRlbmRSb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNz
YWdlLT50b0pTT05TdHJpbmcoKSk7CisgICAgbV9mcm9udGVuZFJvdXRlci5zZW5kRXZlbnQocHJv
dG9jb2xfanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
SW5zcGVjdG9yCkBAIC0zOTgsNyArMzk5LDkgQEAgdm9pZCBEb21haW5Gcm9udGVuZERpc3BhdGNo
ZXI6OkV2ZW50KCkKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yUHJvdG9jb2xUeXBlcy5oPgotI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5j
bHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKQEAg
LTQ1Miw4ICs0NTUsNyBAQCBuYW1lc3BhY2UgUHJvdG9jb2wgewogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKIAotI2luY2x1ZGUgPHd0Zi9PcHRp
b25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvQXNz
ZXJ0aW9ucy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtNTA5LDcgKzUxMSw3IEBA
IGNsYXNzIE9iakNJbnNwZWN0b3JEb21haW5CYWNrZW5kRGlzcGF0Y2hlciBmaW5hbCA6IHB1Ymxp
YyBBbHRlcm5hdGVEb21haW5CYWNrZW5kCiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBw
dWJsaWM6CiAgICAgT2JqQ0luc3BlY3RvckRvbWFpbkJhY2tlbmREaXNwYXRjaGVyKGlkPFRlc3RQ
cm90b2NvbERvbWFpbkRvbWFpbkhhbmRsZXI+IGhhbmRsZXIpIHsgbV9kZWxlZ2F0ZSA9IGhhbmRs
ZXI7IH0KLSAgICB2b2lkIENvbW1hbmQobG9uZyByZXF1ZXN0SWQpIGZpbmFsOworICAgIHZvaWQg
Q29tbWFuZChsb25nIHByb3RvY29sX3JlcXVlc3RJZCkgZmluYWw7CiBwcml2YXRlOgogICAgIFJl
dGFpblB0cjxpZDxUZXN0UHJvdG9jb2xEb21haW5Eb21haW5IYW5kbGVyPj4gbV9kZWxlZ2F0ZTsK
IH07CkBAIC01NTcsMjEgKzU1OSwyMiBAQCBwcml2YXRlOgogCiBuYW1lc3BhY2UgSW5zcGVjdG9y
IHsKIAotdm9pZCBPYmpDSW5zcGVjdG9yRG9tYWluQmFja2VuZERpc3BhdGNoZXI6OkNvbW1hbmQo
bG9uZyByZXF1ZXN0SWQpCit2b2lkIE9iakNJbnNwZWN0b3JEb21haW5CYWNrZW5kRGlzcGF0Y2hl
cjo6Q29tbWFuZChsb25nIHByb3RvY29sX3JlcXVlc3RJZCkKIHsKICAgICBpZiAoIVttX2RlbGVn
YXRlIHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0b3IoQ29tbWFuZFdpdGhFcnJvckNhbGxiYWNr
OnN1Y2Nlc3NDYWxsYmFjazopXSkgewotICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBv
cnRQcm90b2NvbEVycm9yKHJlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZv
dW5kLCAiJ0RvbWFpbi5Db21tYW5kJyB3YXMgbm90IGZvdW5kIl9zKTsKKyAgICAgICAgYmFja2Vu
ZERpc3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihwcm90b2NvbF9yZXF1ZXN0SWQsIEJh
Y2tlbmREaXNwYXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidEb21haW4uQ29tbWFuZCcgd2FzIG5v
dCBmb3VuZCJfcyk7CiAgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJy
b3JzKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpZCBlcnJvckNhbGxiYWNrID0g
XihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+cmVwb3J0
UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJFcnJvciwg
ZXJyb3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9y
KHByb3RvY29sX3JlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6OlNlcnZlckVycm9yLCBlcnJv
cik7CiAgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CiAg
ICAgfTsKIAogICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF57Ci0gICAgICAgIGJhY2tlbmREaXNw
YXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIEpTT046Ok9iamVjdDo6Y3JlYXRlKCks
IGZhbHNlKTsKKyAgICAgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9iamVj
dDo6Y3JlYXRlKCk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShw
cm90b2NvbF9yZXF1ZXN0SWQsIFdURk1vdmUocHJvdG9jb2xfanNvbk1lc3NhZ2UpLCBmYWxzZSk7
CiAgICAgfTsKIAogICAgIFttX2RlbGVnYXRlIENvbW1hbmRXaXRoRXJyb3JDYWxsYmFjazplcnJv
ckNhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjazpzdWNjZXNzQ2FsbGJhY2tdOwpAQCAtNzczLDkgKzc3
Niw5IEBAIHVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CiB7CiAgICAgY29uc3QgRnJvbnRlbmRS
b3V0ZXImIHJvdXRlciA9IF9jb250cm9sbGVyLT5mcm9udGVuZFJvdXRlcigpOwogCi0gICAgUmVm
PEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwotICAg
IGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRvbWFpbi5FdmVudCJfcyk7Ci0g
ICAgcm91dGVyLnNlbmRFdmVudChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOworICAgIGF1
dG8gcHJvdG9jb2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIHBy
b3RvY29sX2pzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRvbWFpbi5FdmVudCJf
cyk7CisgICAgcm91dGVyLnNlbmRFdmVudChwcm90b2NvbF9qc29uTWVzc2FnZS0+dG9KU09OU3Ry
aW5nKCkpOwogfQogCiBAZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZXZlbnRzLXdpdGgtb3B0aW9uYWwtcGFyYW1l
dGVycy5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9leHBlY3RlZC9ldmVudHMtd2l0aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24tcmVz
dWx0CmluZGV4IDkwZTE0ZThjN2JiNGYwNTE1MTNjYmQ3YzNjNmRjN2I5NmZjYzFhNzQuLjg0N2I0
OTNmNzFjNTdlNDI3M2Q4NDk2MmJhZTlmNmM5MjBmZGM5ZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9ldmVudHMtd2l0
aC1vcHRpb25hbC1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9ldmVudHMtd2l0aC1vcHRpb25h
bC1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0CkBAIC03MCw3ICs3MCw3IEBAIEluc3BlY3RvckJhY2tl
bmQuYWN0aXZhdGVEb21haW4oIkRhdGFiYXNlIiwgbnVsbCk7CiAKICNpZiBFTkFCTEUoSU5TUEVD
VE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIAotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVz
LmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KIApAQCAtMTI2LDExICsxMjYsMTQgQEAg
cHJpdmF0ZToKIAogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHR1
cGxlPgorI2luY2x1ZGUgPHd0Zi9FeHBlY3RlZC5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5o
PgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9y
IHsKIAotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CisKIAogCiAKQEAgLTE3MSw5ICsxNzQs
NyBAQCB0eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKICNpbmNsdWRlICJUZXN0QmFja2VuZERp
c3BhdGNoZXJzLmgiCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVu
ZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CiAjaW5jbHVkZSA8d3RmL05l
dmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiAjaWYgRU5B
QkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAjaW5jbHVkZSAiVGVzdEFsdGVy
bmF0ZUJhY2tlbmREaXNwYXRjaGVycy5oIgpAQCAtMjIxLDYgKzIyMiw3IEBAIG5hbWVzcGFjZSBJ
bnNwZWN0b3IgewogCiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUg
PHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewpAQCAtMjMxLDgg
KzIzMyw4IEBAIGNsYXNzIERhdGFiYXNlRnJvbnRlbmREaXNwYXRjaGVyIHsKICAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBEYXRhYmFzZUZyb250ZW5kRGlzcGF0Y2hl
cihGcm9udGVuZFJvdXRlciYgZnJvbnRlbmRSb3V0ZXIpIDogbV9mcm9udGVuZFJvdXRlcihmcm9u
dGVuZFJvdXRlcikgeyB9Ci0gICAgdm9pZCBkaWRFeGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJzKFJl
ZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+IGNvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcqIG5v
dGVzLCBjb25zdCBkb3VibGUqIHRpbWVzdGFtcCwgUmVmUHRyPEpTT046Ok9iamVjdD4gdmFsdWVz
LCBSZWZQdHI8SlNPTjo6VmFsdWU+IHBheWxvYWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29s
OjpEYXRhYmFzZTo6RXJyb3I+IHNxbEVycm9yLCBjb25zdCBTdHJpbmcqIHNjcmVlbkNvbG9yLCBS
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4gYWx0ZXJuYXRl
Q29sb3JzLCBjb25zdCBTdHJpbmcqIHByaW50Q29sb3IpOwotICAgIHZvaWQgZGlkRXhlY3V0ZU5v
T3B0aW9uYWxQYXJhbWV0ZXJzKFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+IGNvbHVtbk5h
bWVzLCBjb25zdCBTdHJpbmcmIG5vdGVzLCBkb3VibGUgdGltZXN0YW1wLCBSZWZQdHI8SlNPTjo6
T2JqZWN0PiB2YWx1ZXMsIFJlZlB0cjxKU09OOjpWYWx1ZT4gcGF5bG9hZCwgUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4gc3FsRXJyb3IsIGNvbnN0IFN0cmluZyYg
c2NyZWVuQ29sb3IsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JM
aXN0PiBhbHRlcm5hdGVDb2xvcnMsIGNvbnN0IFN0cmluZyYgcHJpbnRDb2xvcik7CisgICAgdm9p
ZCBkaWRFeGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJzKFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmlu
Zz4+JiYgb3B0X2NvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIG9wdF9ub3RlcywgT3B0aW9uYWw8
ZG91YmxlPiYmIG9wdF90aW1lc3RhbXAsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgb3B0X3ZhbHVl
cywgUmVmUHRyPEpTT046OlZhbHVlPiYmIG9wdF9wYXlsb2FkLCBSZWZQdHI8UHJvdG9jb2w6OkRh
dGFiYXNlOjpFcnJvcj4mJiBvcHRfc3FsRXJyb3IsIGNvbnN0IFN0cmluZyYgb3B0X3NjcmVlbkNv
bG9yLCBSZWZQdHI8UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+JiYgb3B0X2FsdGVybmF0
ZUNvbG9ycywgY29uc3QgU3RyaW5nJiBvcHRfcHJpbnRDb2xvcik7CisgICAgdm9pZCBkaWRFeGVj
dXRlTm9PcHRpb25hbFBhcmFtZXRlcnMoUmVmPEpTT046OkFycmF5T2Y8U3RyaW5nPj4mJiBjb2x1
bW5OYW1lcywgY29uc3QgU3RyaW5nJiBub3RlcywgZG91YmxlIHRpbWVzdGFtcCwgUmVmPEpTT046
Ok9iamVjdD4mJiB2YWx1ZXMsIFJlZjxKU09OOjpWYWx1ZT4mJiBwYXlsb2FkLCBSZWY8UHJvdG9j
b2w6OkRhdGFiYXNlOjpFcnJvcj4mJiBzcWxFcnJvciwgY29uc3QgU3RyaW5nJiBzY3JlZW5Db2xv
ciwgUmVmPFByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiYmIGFsdGVybmF0ZUNvbG9ycywg
Y29uc3QgU3RyaW5nJiBwcmludENvbG9yKTsKIHByaXZhdGU6CiAgICAgRnJvbnRlbmRSb3V0ZXIm
IG1fZnJvbnRlbmRSb3V0ZXI7CiB9OwpAQCAtMjc0LDU1ICsyNzYsNTQgQEAgcHJpdmF0ZToKICNp
bmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3Ry
aW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCi12b2lkIERhdGFiYXNlRnJvbnRlbmRE
aXNwYXRjaGVyOjpkaWRFeGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJzKFJlZlB0cjxKU09OOjpBcnJh
eU9mPFN0cmluZz4+IGNvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcqIG5vdGVzLCBjb25zdCBkb3Vi
bGUqIHRpbWVzdGFtcCwgUmVmUHRyPEpTT046Ok9iamVjdD4gdmFsdWVzLCBSZWZQdHI8SlNPTjo6
VmFsdWU+IHBheWxvYWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJy
b3I+IHNxbEVycm9yLCBjb25zdCBTdHJpbmcqIHNjcmVlbkNvbG9yLCBSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4gYWx0ZXJuYXRlQ29sb3JzLCBjb25zdCBT
dHJpbmcqIHByaW50Q29sb3IpCit2b2lkIERhdGFiYXNlRnJvbnRlbmREaXNwYXRjaGVyOjpkaWRF
eGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJzKFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+JiYg
b3B0X2NvbHVtbk5hbWVzLCBjb25zdCBTdHJpbmcmIG9wdF9ub3RlcywgT3B0aW9uYWw8ZG91Ymxl
PiYmIG9wdF90aW1lc3RhbXAsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgb3B0X3ZhbHVlcywgUmVm
UHRyPEpTT046OlZhbHVlPiYmIG9wdF9wYXlsb2FkLCBSZWZQdHI8UHJvdG9jb2w6OkRhdGFiYXNl
OjpFcnJvcj4mJiBvcHRfc3FsRXJyb3IsIGNvbnN0IFN0cmluZyYgb3B0X3NjcmVlbkNvbG9yLCBS
ZWZQdHI8UHJvdG9jb2w6OkRhdGFiYXNlOjpDb2xvckxpc3Q+JiYgb3B0X2FsdGVybmF0ZUNvbG9y
cywgY29uc3QgU3RyaW5nJiBvcHRfcHJpbnRDb2xvcikKIHsKLSAgICBSZWY8SlNPTjo6T2JqZWN0
PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAganNvbk1lc3NhZ2Ut
PnNldFN0cmluZygibWV0aG9kIl9zLCAiRGF0YWJhc2UuZGlkRXhlY3V0ZU9wdGlvbmFsUGFyYW1l
dGVycyJfcyk7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4gcGFyYW1zT2JqZWN0ID0gSlNPTjo6T2Jq
ZWN0OjpjcmVhdGUoKTsKLSAgICBpZiAoY29sdW1uTmFtZXMpCi0gICAgICAgIHBhcmFtc09iamVj
dC0+c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCBjb2x1bW5OYW1lcyk7Ci0gICAgaWYgKG5vdGVz
KQotICAgICAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygibm90ZXMiX3MsICpub3Rlcyk7Ci0g
ICAgaWYgKHRpbWVzdGFtcCkKLSAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXREb3VibGUoInRpbWVz
dGFtcCJfcywgKnRpbWVzdGFtcCk7Ci0gICAgaWYgKHZhbHVlcykKLSAgICAgICAgcGFyYW1zT2Jq
ZWN0LT5zZXRPYmplY3QoInZhbHVlcyJfcywgdmFsdWVzKTsKLSAgICBpZiAocGF5bG9hZCkKLSAg
ICAgICAgcGFyYW1zT2JqZWN0LT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgKnBheWxvYWQpOwotICAg
IGlmIChzcWxFcnJvcikKLSAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRPYmplY3QoInNxbEVycm9y
Il9zLCBzcWxFcnJvcik7Ci0gICAgaWYgKHNjcmVlbkNvbG9yKQotICAgICAgICBwYXJhbXNPYmpl
Y3QtPnNldFN0cmluZygic2NyZWVuQ29sb3IiX3MsICpzY3JlZW5Db2xvcik7Ci0gICAgaWYgKGFs
dGVybmF0ZUNvbG9ycykKLSAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRBcnJheSgiYWx0ZXJuYXRl
Q29sb3JzIl9zLCBhbHRlcm5hdGVDb2xvcnMpOwotICAgIGlmIChwcmludENvbG9yKQotICAgICAg
ICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygicHJpbnRDb2xvciJfcywgKnByaW50Q29sb3IpOwot
ICAgIGpzb25NZXNzYWdlLT5zZXRPYmplY3QoInBhcmFtcyJfcywgV1RGTW92ZShwYXJhbXNPYmpl
Y3QpKTsKKyAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVh
dGUoKTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJE
YXRhYmFzZS5kaWRFeGVjdXRlT3B0aW9uYWxQYXJhbWV0ZXJzIl9zKTsKKyAgICBhdXRvIHByb3Rv
Y29sX3BhcmFtc09iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgaWYgKCEhb3B0
X2NvbHVtbk5hbWVzKQorICAgICAgICBwcm90b2NvbF9wYXJhbXNPYmplY3QtPnNldEFycmF5KCJj
b2x1bW5OYW1lcyJfcywgb3B0X2NvbHVtbk5hbWVzLnJlbGVhc2VOb25OdWxsKCkpOworICAgIGlm
ICghIW9wdF9ub3RlcykKKyAgICAgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmco
Im5vdGVzIl9zLCBvcHRfbm90ZXMpOworICAgIGlmICghIW9wdF90aW1lc3RhbXApCisgICAgICAg
IHByb3RvY29sX3BhcmFtc09iamVjdC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsICpvcHRfdGlt
ZXN0YW1wKTsKKyAgICBpZiAoISFvcHRfdmFsdWVzKQorICAgICAgICBwcm90b2NvbF9wYXJhbXNP
YmplY3QtPnNldE9iamVjdCgidmFsdWVzIl9zLCBvcHRfdmFsdWVzLnJlbGVhc2VOb25OdWxsKCkp
OworICAgIGlmICghIW9wdF9wYXlsb2FkKQorICAgICAgICBwcm90b2NvbF9wYXJhbXNPYmplY3Qt
PnNldFZhbHVlKCJwYXlsb2FkIl9zLCBvcHRfcGF5bG9hZC5yZWxlYXNlTm9uTnVsbCgpKTsKKyAg
ICBpZiAoISFvcHRfc3FsRXJyb3IpCisgICAgICAgIHByb3RvY29sX3BhcmFtc09iamVjdC0+c2V0
T2JqZWN0KCJzcWxFcnJvciJfcywgb3B0X3NxbEVycm9yLnJlbGVhc2VOb25OdWxsKCkpOworICAg
IGlmICghIW9wdF9zY3JlZW5Db2xvcikKKyAgICAgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT5z
ZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCBvcHRfc2NyZWVuQ29sb3IpOworICAgIGlmICghIW9w
dF9hbHRlcm5hdGVDb2xvcnMpCisgICAgICAgIHByb3RvY29sX3BhcmFtc09iamVjdC0+c2V0QXJy
YXkoImFsdGVybmF0ZUNvbG9ycyJfcywgb3B0X2FsdGVybmF0ZUNvbG9ycy5yZWxlYXNlTm9uTnVs
bCgpKTsKKyAgICBpZiAoISFvcHRfcHJpbnRDb2xvcikKKyAgICAgICAgcHJvdG9jb2xfcGFyYW1z
T2JqZWN0LT5zZXRTdHJpbmcoInByaW50Q29sb3IiX3MsIG9wdF9wcmludENvbG9yKTsKKyAgICBw
cm90b2NvbF9qc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiX3MsIFdURk1vdmUocHJvdG9j
b2xfcGFyYW1zT2JqZWN0KSk7CiAKLSAgICBtX2Zyb250ZW5kUm91dGVyLnNlbmRFdmVudChqc29u
TWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOworICAgIG1fZnJvbnRlbmRSb3V0ZXIuc2VuZEV2ZW50
KHByb3RvY29sX2pzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7CiB9CiAKLXZvaWQgRGF0YWJh
c2VGcm9udGVuZERpc3BhdGNoZXI6OmRpZEV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhSZWZQ
dHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiBjb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBub3Rl
cywgZG91YmxlIHRpbWVzdGFtcCwgUmVmUHRyPEpTT046Ok9iamVjdD4gdmFsdWVzLCBSZWZQdHI8
SlNPTjo6VmFsdWU+IHBheWxvYWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFz
ZTo6RXJyb3I+IHNxbEVycm9yLCBjb25zdCBTdHJpbmcmIHNjcmVlbkNvbG9yLCBSZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkNvbG9yTGlzdD4gYWx0ZXJuYXRlQ29sb3JzLCBj
b25zdCBTdHJpbmcmIHByaW50Q29sb3IpCit2b2lkIERhdGFiYXNlRnJvbnRlbmREaXNwYXRjaGVy
OjpkaWRFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMoUmVmPEpTT046OkFycmF5T2Y8U3RyaW5n
Pj4mJiBjb2x1bW5OYW1lcywgY29uc3QgU3RyaW5nJiBub3RlcywgZG91YmxlIHRpbWVzdGFtcCwg
UmVmPEpTT046Ok9iamVjdD4mJiB2YWx1ZXMsIFJlZjxKU09OOjpWYWx1ZT4mJiBwYXlsb2FkLCBS
ZWY8UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4mJiBzcWxFcnJvciwgY29uc3QgU3RyaW5nJiBz
Y3JlZW5Db2xvciwgUmVmPFByb3RvY29sOjpEYXRhYmFzZTo6Q29sb3JMaXN0PiYmIGFsdGVybmF0
ZUNvbG9ycywgY29uc3QgU3RyaW5nJiBwcmludENvbG9yKQogewotICAgIFJlZjxKU09OOjpPYmpl
Y3Q+IGpzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBqc29uTWVzc2Fn
ZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJEYXRhYmFzZS5kaWRFeGVjdXRlTm9PcHRpb25hbFBh
cmFtZXRlcnMiX3MpOwotICAgIFJlZjxKU09OOjpPYmplY3Q+IHBhcmFtc09iamVjdCA9IEpTT046
Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAgcGFyYW1zT2JqZWN0LT5zZXRBcnJheSgiY29sdW1uTmFt
ZXMiX3MsIGNvbHVtbk5hbWVzKTsKLSAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygibm90ZXMi
X3MsIG5vdGVzKTsKLSAgICBwYXJhbXNPYmplY3QtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCB0
aW1lc3RhbXApOwotICAgIHBhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIHZhbHVl
cyk7Ci0gICAgcGFyYW1zT2JqZWN0LT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgcGF5bG9hZCk7Ci0g
ICAgcGFyYW1zT2JqZWN0LT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBzcWxFcnJvcik7Ci0gICAg
cGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCBzY3JlZW5Db2xvcik7Ci0g
ICAgcGFyYW1zT2JqZWN0LT5zZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCBhbHRlcm5hdGVD
b2xvcnMpOwotICAgIHBhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCBwcmlu
dENvbG9yKTsKLSAgICBqc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiX3MsIFdURk1vdmUo
cGFyYW1zT2JqZWN0KSk7CisgICAgYXV0byBwcm90b2NvbF9qc29uTWVzc2FnZSA9IEpTT046Ok9i
amVjdDo6Y3JlYXRlKCk7CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0
aG9kIl9zLCAiRGF0YWJhc2UuZGlkRXhlY3V0ZU5vT3B0aW9uYWxQYXJhbWV0ZXJzIl9zKTsKKyAg
ICBhdXRvIHByb3RvY29sX3BhcmFtc09iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Cisg
ICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIFdURk1v
dmUoY29sdW1uTmFtZXMpKTsKKyAgICBwcm90b2NvbF9wYXJhbXNPYmplY3QtPnNldFN0cmluZygi
bm90ZXMiX3MsIG5vdGVzKTsKKyAgICBwcm90b2NvbF9wYXJhbXNPYmplY3QtPnNldERvdWJsZSgi
dGltZXN0YW1wIl9zLCB0aW1lc3RhbXApOworICAgIHByb3RvY29sX3BhcmFtc09iamVjdC0+c2V0
T2JqZWN0KCJ2YWx1ZXMiX3MsIFdURk1vdmUodmFsdWVzKSk7CisgICAgcHJvdG9jb2xfcGFyYW1z
T2JqZWN0LT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgV1RGTW92ZShwYXlsb2FkKSk7CisgICAgcHJv
dG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBXVEZNb3ZlKHNxbEVy
cm9yKSk7CisgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInNjcmVlbkNvbG9y
Il9zLCBzY3JlZW5Db2xvcik7CisgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRBcnJheSgi
YWx0ZXJuYXRlQ29sb3JzIl9zLCBXVEZNb3ZlKGFsdGVybmF0ZUNvbG9ycykpOworICAgIHByb3Rv
Y29sX3BhcmFtc09iamVjdC0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCBwcmludENvbG9yKTsK
KyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiX3MsIFdURk1vdmUo
cHJvdG9jb2xfcGFyYW1zT2JqZWN0KSk7CiAKLSAgICBtX2Zyb250ZW5kUm91dGVyLnNlbmRFdmVu
dChqc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOworICAgIG1fZnJvbnRlbmRSb3V0ZXIuc2Vu
ZEV2ZW50KHByb3RvY29sX2pzb25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIEluc3BlY3RvcgpAQCAtMzYyLDcgKzM2Myw5IEBAIHZvaWQgRGF0YWJhc2VGcm9u
dGVuZERpc3BhdGNoZXI6OmRpZEV4ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyhSZWZQdHI8SlNP
Tjo6QXJyCiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3Rv
clByb3RvY29sVHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUg
PHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC0zOTEs
NyArMzk0LDcgQEAgdXNpbmcgQ29sb3JMaXN0ID0gSlNPTjo6QXJyYXlPZjxTdHJpbmc+OwogbmFt
ZXNwYWNlIERhdGFiYXNlIHsKIAogLyogRGF0YWJhc2UgZXJyb3IuICovCi1jbGFzcyBFcnJvciA6
IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKK2NsYXNzIEVycm9yIGZpbmFsIDogcHVibGljIEpT
T046Ok9iamVjdEJhc2UgewogcHVibGljOgogICAgIGVudW0gewogICAgICAgICBOb0ZpZWxkc1Nl
dCA9IDAsCkBAIC00MTgsMTcgKzQyMSwxNyBAQCBwdWJsaWM6CiAgICAgICAgIGZyaWVuZCBjbGFz
cyBFcnJvcjsKICAgICBwdWJsaWM6CiAKLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IE1lc3NhZ2VT
ZXQ+JiBzZXRNZXNzYWdlKGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8U1RB
VEUgfCBNZXNzYWdlU2V0PiYgc2V0TWVzc2FnZShjb25zdCBTdHJpbmcmIGluX21lc3NhZ2UpCiAg
ICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBNZXNzYWdlU2V0
KSwgcHJvcGVydHlfbWVzc2FnZV9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+
c2V0U3RyaW5nKCJtZXNzYWdlIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0
U3RyaW5nKCJtZXNzYWdlIl9zLCBpbl9tZXNzYWdlKTsKICAgICAgICAgICAgIHJldHVybiBjYXN0
U3RhdGU8TWVzc2FnZVNldD4oKTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUg
fCBDb2RlU2V0PiYgc2V0Q29kZShpbnQgdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBD
b2RlU2V0PiYgc2V0Q29kZShpbnQgaW5fY29kZSkKICAgICAgICAgewogICAgICAgICAgICAgQ09N
UElMRV9BU1NFUlQoIShTVEFURSAmIENvZGVTZXQpLCBwcm9wZXJ0eV9jb2RlX2FscmVhZHlfc2V0
KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRJbnRlZ2VyKCJjb2RlIl9zLCB2YWx1ZSk7Cisg
ICAgICAgICAgICBtX3Jlc3VsdC0+c2V0SW50ZWdlcigiY29kZSJfcywgaW5fY29kZSk7CiAgICAg
ICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENvZGVTZXQ+KCk7CiAgICAgICAgIH0KIApAQCAtNDk4
LDggKzUwMSw3IEBAIHB1YmxpYzoKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJUZXN0
UHJvdG9jb2xPYmplY3RzLmgiCiAKLSNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KLSNpbmNsdWRl
IDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KIAogbmFt
ZXNwYWNlIEluc3BlY3RvciB7CiAKQEAgLTc3OCwyOSArNzgwLDI5IEBAIHVzaW5nIG5hbWVzcGFj
ZSBJbnNwZWN0b3I7CiAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9CQURfT1BUSU9OQUxfUEFSQU1F
VEVSKGFsdGVybmF0ZUNvbG9ycywgQCJhbHRlcm5hdGVDb2xvcnMiKTsKICAgICBUSFJPV19FWENF
UFRJT05fRk9SX0JBRF9PUFRJT05BTF9QQVJBTUVURVIocHJpbnRDb2xvciwgQCJwcmludENvbG9y
Iik7CiAKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046Ok9iamVjdDo6
Y3JlYXRlKCk7Ci0gICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9zLCAiRGF0YWJh
c2UuZGlkRXhlY3V0ZU9wdGlvbmFsUGFyYW1ldGVycyJfcyk7Ci0gICAgUmVmPEpTT046Ok9iamVj
dD4gcGFyYW1zT2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBhdXRvIHByb3Rv
Y29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBwcm90b2NvbF9q
c29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJEYXRhYmFzZS5kaWRFeGVjdXRlT3B0
aW9uYWxQYXJhbWV0ZXJzIl9zKTsKKyAgICBhdXRvIHByb3RvY29sX3BhcmFtc09iamVjdCA9IEpT
T046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgaWYgKGNvbHVtbk5hbWVzKQotICAgICAgICBwYXJh
bXNPYmplY3QtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgdG9KU09OU3RyaW5nQXJyYXkoKCpj
b2x1bW5OYW1lcykpKTsKKyAgICAgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRBcnJheSgi
Y29sdW1uTmFtZXMiX3MsIHRvSlNPTlN0cmluZ0FycmF5KCgqY29sdW1uTmFtZXMpKSk7CiAgICAg
aWYgKG5vdGVzKQotICAgICAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygibm90ZXMiX3MsICgq
bm90ZXMpKTsKKyAgICAgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoIm5vdGVz
Il9zLCAoKm5vdGVzKSk7CiAgICAgaWYgKHRpbWVzdGFtcCkKLSAgICAgICAgcGFyYW1zT2JqZWN0
LT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywgKCp0aW1lc3RhbXApKTsKKyAgICAgICAgcHJvdG9j
b2xfcGFyYW1zT2JqZWN0LT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywgKCp0aW1lc3RhbXApKTsK
ICAgICBpZiAodmFsdWVzKQotICAgICAgICBwYXJhbXNPYmplY3QtPnNldE9iamVjdCgidmFsdWVz
Il9zLCBbKCp2YWx1ZXMpIHRvSlNPTk9iamVjdF0pOworICAgICAgICBwcm90b2NvbF9wYXJhbXNP
YmplY3QtPnNldE9iamVjdCgidmFsdWVzIl9zLCBbKCp2YWx1ZXMpIHRvSlNPTk9iamVjdF0pOwog
ICAgIGlmIChwYXlsb2FkKQotICAgICAgICBwYXJhbXNPYmplY3QtPnNldFZhbHVlKCJwYXlsb2Fk
Il9zLCBbKCpwYXlsb2FkKSB0b0pTT05PYmplY3RdKTsKKyAgICAgICAgcHJvdG9jb2xfcGFyYW1z
T2JqZWN0LT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgWygqcGF5bG9hZCkgdG9KU09OT2JqZWN0XSk7
CiAgICAgaWYgKHNxbEVycm9yKQotICAgICAgICBwYXJhbXNPYmplY3QtPnNldE9iamVjdCgic3Fs
RXJyb3IiX3MsIFsoKnNxbEVycm9yKSB0b0pTT05PYmplY3RdKTsKKyAgICAgICAgcHJvdG9jb2xf
cGFyYW1zT2JqZWN0LT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBbKCpzcWxFcnJvcikgdG9KU09O
T2JqZWN0XSk7CiAgICAgaWYgKHNjcmVlbkNvbG9yKQotICAgICAgICBwYXJhbXNPYmplY3QtPnNl
dFN0cmluZygic2NyZWVuQ29sb3IiX3MsICgqc2NyZWVuQ29sb3IpKTsKKyAgICAgICAgcHJvdG9j
b2xfcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInNjcmVlbkNvbG9yIl9zLCAoKnNjcmVlbkNvbG9y
KSk7CiAgICAgaWYgKGFsdGVybmF0ZUNvbG9ycykKLSAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRB
cnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCB0b0pTT05TdHJpbmdBcnJheSgoKmFsdGVybmF0ZUNv
bG9ycykpKTsKKyAgICAgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRBcnJheSgiYWx0ZXJu
YXRlQ29sb3JzIl9zLCB0b0pTT05TdHJpbmdBcnJheSgoKmFsdGVybmF0ZUNvbG9ycykpKTsKICAg
ICBpZiAocHJpbnRDb2xvcikKLSAgICAgICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInByaW50
Q29sb3IiX3MsICgqcHJpbnRDb2xvcikpOwotICAgIGpzb25NZXNzYWdlLT5zZXRPYmplY3QoInBh
cmFtcyJfcywgV1RGTW92ZShwYXJhbXNPYmplY3QpKTsKLSAgICByb3V0ZXIuc2VuZEV2ZW50KGpz
b25NZXNzYWdlLT50b0pTT05TdHJpbmcoKSk7CisgICAgICAgIHByb3RvY29sX3BhcmFtc09iamVj
dC0+c2V0U3RyaW5nKCJwcmludENvbG9yIl9zLCAoKnByaW50Q29sb3IpKTsKKyAgICBwcm90b2Nv
bF9qc29uTWVzc2FnZS0+c2V0T2JqZWN0KCJwYXJhbXMiX3MsIFdURk1vdmUocHJvdG9jb2xfcGFy
YW1zT2JqZWN0KSk7CisgICAgcm91dGVyLnNlbmRFdmVudChwcm90b2NvbF9qc29uTWVzc2FnZS0+
dG9KU09OU3RyaW5nKCkpOwogfQogCiAtICh2b2lkKWRpZEV4ZWN1dGVOb09wdGlvbmFsUGFyYW1l
dGVyc1dpdGhDb2x1bW5OYW1lczooTlNBcnJheS8qPE5TU3RyaW5nPiovICopY29sdW1uTmFtZXMg
bm90ZXM6KE5TU3RyaW5nICopbm90ZXMgdGltZXN0YW1wOihkb3VibGUpdGltZXN0YW1wIHZhbHVl
czooUldJUHJvdG9jb2xKU09OT2JqZWN0ICopdmFsdWVzIHBheWxvYWQ6KFJXSVByb3RvY29sSlNP
Tk9iamVjdCAqKXBheWxvYWQgc3FsRXJyb3I6KFRlc3RQcm90b2NvbERhdGFiYXNlRXJyb3IgKilz
cWxFcnJvciBzY3JlZW5Db2xvcjooTlNTdHJpbmcgKilzY3JlZW5Db2xvciBhbHRlcm5hdGVDb2xv
cnM6KE5TQXJyYXkvKjxOU1N0cmluZz4qLyAqKWFsdGVybmF0ZUNvbG9ycyBwcmludENvbG9yOihO
U1N0cmluZyAqKXByaW50Q29sb3IKQEAgLTgxNiwyMCArODE4LDIwIEBAIHVzaW5nIG5hbWVzcGFj
ZSBJbnNwZWN0b3I7CiAgICAgVEhST1dfRVhDRVBUSU9OX0ZPUl9SRVFVSVJFRF9QQVJBTUVURVIo
YWx0ZXJuYXRlQ29sb3JzLCBAImFsdGVybmF0ZUNvbG9ycyIpOwogICAgIFRIUk9XX0VYQ0VQVElP
Tl9GT1JfUkVRVUlSRURfUEFSQU1FVEVSKHByaW50Q29sb3IsIEAicHJpbnRDb2xvciIpOwogCi0g
ICAgUmVmPEpTT046Ok9iamVjdD4ganNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgp
OwotICAgIGpzb25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIkRhdGFiYXNlLmRpZEV4
ZWN1dGVOb09wdGlvbmFsUGFyYW1ldGVycyJfcyk7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4gcGFy
YW1zT2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBwYXJhbXNPYmplY3QtPnNl
dEFycmF5KCJjb2x1bW5OYW1lcyJfcywgdG9KU09OU3RyaW5nQXJyYXkoY29sdW1uTmFtZXMpKTsK
LSAgICBwYXJhbXNPYmplY3QtPnNldFN0cmluZygibm90ZXMiX3MsIG5vdGVzKTsKLSAgICBwYXJh
bXNPYmplY3QtPnNldERvdWJsZSgidGltZXN0YW1wIl9zLCB0aW1lc3RhbXApOwotICAgIHBhcmFt
c09iamVjdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIFt2YWx1ZXMgdG9KU09OT2JqZWN0XSk7Ci0g
ICAgcGFyYW1zT2JqZWN0LT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgW3BheWxvYWQgdG9KU09OT2Jq
ZWN0XSk7Ci0gICAgcGFyYW1zT2JqZWN0LT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBbc3FsRXJy
b3IgdG9KU09OT2JqZWN0XSk7Ci0gICAgcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInNjcmVlbkNv
bG9yIl9zLCBzY3JlZW5Db2xvcik7Ci0gICAgcGFyYW1zT2JqZWN0LT5zZXRBcnJheSgiYWx0ZXJu
YXRlQ29sb3JzIl9zLCB0b0pTT05TdHJpbmdBcnJheShhbHRlcm5hdGVDb2xvcnMpKTsKLSAgICBw
YXJhbXNPYmplY3QtPnNldFN0cmluZygicHJpbnRDb2xvciJfcywgcHJpbnRDb2xvcik7Ci0gICAg
anNvbk1lc3NhZ2UtPnNldE9iamVjdCgicGFyYW1zIl9zLCBXVEZNb3ZlKHBhcmFtc09iamVjdCkp
OwotICAgIHJvdXRlci5zZW5kRXZlbnQoanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKKyAg
ICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdlID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAg
ICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0U3RyaW5nKCJtZXRob2QiX3MsICJEYXRhYmFzZS5k
aWRFeGVjdXRlTm9PcHRpb25hbFBhcmFtZXRlcnMiX3MpOworICAgIGF1dG8gcHJvdG9jb2xfcGFy
YW1zT2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBwcm90b2NvbF9wYXJhbXNP
YmplY3QtPnNldEFycmF5KCJjb2x1bW5OYW1lcyJfcywgdG9KU09OU3RyaW5nQXJyYXkoY29sdW1u
TmFtZXMpKTsKKyAgICBwcm90b2NvbF9wYXJhbXNPYmplY3QtPnNldFN0cmluZygibm90ZXMiX3Ms
IG5vdGVzKTsKKyAgICBwcm90b2NvbF9wYXJhbXNPYmplY3QtPnNldERvdWJsZSgidGltZXN0YW1w
Il9zLCB0aW1lc3RhbXApOworICAgIHByb3RvY29sX3BhcmFtc09iamVjdC0+c2V0T2JqZWN0KCJ2
YWx1ZXMiX3MsIFt2YWx1ZXMgdG9KU09OT2JqZWN0XSk7CisgICAgcHJvdG9jb2xfcGFyYW1zT2Jq
ZWN0LT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgW3BheWxvYWQgdG9KU09OT2JqZWN0XSk7CisgICAg
cHJvdG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRPYmplY3QoInNxbEVycm9yIl9zLCBbc3FsRXJyb3Ig
dG9KU09OT2JqZWN0XSk7CisgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT5zZXRTdHJpbmcoInNj
cmVlbkNvbG9yIl9zLCBzY3JlZW5Db2xvcik7CisgICAgcHJvdG9jb2xfcGFyYW1zT2JqZWN0LT5z
ZXRBcnJheSgiYWx0ZXJuYXRlQ29sb3JzIl9zLCB0b0pTT05TdHJpbmdBcnJheShhbHRlcm5hdGVD
b2xvcnMpKTsKKyAgICBwcm90b2NvbF9wYXJhbXNPYmplY3QtPnNldFN0cmluZygicHJpbnRDb2xv
ciJfcywgcHJpbnRDb2xvcik7CisgICAgcHJvdG9jb2xfanNvbk1lc3NhZ2UtPnNldE9iamVjdCgi
cGFyYW1zIl9zLCBXVEZNb3ZlKHByb3RvY29sX3BhcmFtc09iamVjdCkpOworICAgIHJvdXRlci5z
ZW5kRXZlbnQocHJvdG9jb2xfanNvbk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKIH0KIAogQGVu
ZApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rl
c3RzL2V4cGVjdGVkL2dlbmVyYXRlLWRvbWFpbnMtd2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uLXJl
c3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBl
Y3RlZC9nZW5lcmF0ZS1kb21haW5zLXdpdGgtZmVhdHVyZS1ndWFyZHMuanNvbi1yZXN1bHQKaW5k
ZXggMjk0YmE5MDgxMjE4YTM1MDJkOTZkNDU1ZDRkNjNkMmIzZjVhYWU5YS4uZTdiMDU4ZTc1MThh
ODNkYWIzODlhYmQ3M2E4YjA0MTc3YzBkMTIyYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL2dlbmVyYXRlLWRvbWFpbnMt
d2l0aC1mZWF0dXJlLWd1YXJkcy5qc29uLXJlc3VsdAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvZ2VuZXJhdGUtZG9tYWlucy13aXRo
LWZlYXR1cmUtZ3VhcmRzLmpzb24tcmVzdWx0CkBAIC03NCw3ICs3NCw3IEBAIEluc3BlY3RvckJh
Y2tlbmQuYWN0aXZhdGVEb21haW4oIk5ldHdvcmszIiwgbnVsbCk7CiAKICNpZiBFTkFCTEUoSU5T
UEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKIAotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5
cGVzLmgiCisjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CiAjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KIApAQCAtOTIsNyArOTIsNyBAQCBw
cml2YXRlOgogY2xhc3MgQWx0ZXJuYXRlTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlciA6IHB1Ymxp
YyBBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlciB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+QWx0
ZXJuYXRlTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcigpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBs
b2FkUmVzb3VyY2UobG9uZyBjYWxsSWQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZFJlc291
cmNlKGxvbmcgcHJvdG9jb2xfcmVxdWVzdElkKSA9IDA7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBJ
bnNwZWN0b3IKQEAgLTEzNCwxMSArMTM0LDE0IEBAIHB1YmxpYzoKIAogI2luY2x1ZGUgIlRlc3RQ
cm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNr
ZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHR1cGxlPgorI2luY2x1ZGUgPHd0Zi9FeHBlY3Rl
ZC5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAotdHlwZWRlZiBTdHJpbmcgRXJyb3JT
dHJpbmc7CisKIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQog
Y2xhc3MgQWx0ZXJuYXRlTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjsKQEAgLTE0Niw3ICsxNDks
NyBAQCBjbGFzcyBBbHRlcm5hdGVOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOwogCiBjbGFzcyBO
ZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7CiBwdWJsaWM6Ci0gICAgdmlydHVhbCB2
b2lkIGxvYWRSZXNvdXJjZShFcnJvclN0cmluZyYpID0gMDsKKyAgICB2aXJ0dWFsIFByb3RvY29s
OjpFcnJvclN0cmluZ09yPHZvaWQ+IGxvYWRSZXNvdXJjZSgpID0gMDsKIHByb3RlY3RlZDoKICAg
ICB2aXJ0dWFsIH5OZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcigpOwogfTsKQEAgLTE1
NCw5ICsxNTcsOSBAQCBwcm90ZWN0ZWQ6CiBjbGFzcyBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVy
IGZpbmFsIDogcHVibGljIFN1cHBsZW1lbnRhbEJhY2tlbmREaXNwYXRjaGVyIHsKIHB1YmxpYzoK
ICAgICBzdGF0aWMgUmVmPE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXI+IGNyZWF0ZShCYWNrZW5k
RGlzcGF0Y2hlciYsIE5ldHdvcmsxQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyKik7Ci0gICAgdm9p
ZCBkaXNwYXRjaChsb25nIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZjxKU09O
OjpPYmplY3Q+JiYgbWVzc2FnZSkgZmluYWw7CisgICAgdm9pZCBkaXNwYXRjaChsb25nIHByb3Rv
Y29sX3JlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBwcm90b2NvbF9tZXRob2QsIFJlZjxKU09OOjpP
YmplY3Q+JiYgcHJvdG9jb2xfbWVzc2FnZSkgZmluYWw7CiBwcml2YXRlOgotICAgIHZvaWQgbG9h
ZFJlc291cmNlKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRl
cnMpOworICAgIHZvaWQgbG9hZFJlc291cmNlKGxvbmcgcHJvdG9jb2xfcmVxdWVzdElkLCBSZWZQ
dHI8SlNPTjo6T2JqZWN0PiYmIHByb3RvY29sX3BhcmFtZXRlcnMpOwogI2lmIEVOQUJMRShJTlNQ
RUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogcHVibGljOgogICAgIHZvaWQgc2V0QWx0ZXJu
YXRlRGlzcGF0Y2hlcihBbHRlcm5hdGVOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyKiBhbHRlcm5h
dGVEaXNwYXRjaGVyKSB7IG1fYWx0ZXJuYXRlRGlzcGF0Y2hlciA9IGFsdGVybmF0ZURpc3BhdGNo
ZXI7IH0KQEAgLTIwNSw5ICsyMDgsNyBAQCBwcml2YXRlOgogI2luY2x1ZGUgIlRlc3RCYWNrZW5k
RGlzcGF0Y2hlcnMuaCIKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250
ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KICNpbmNsdWRlIDx3dGYv
TmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKICNpZiBF
TkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKICNpbmNsdWRlICJUZXN0QWx0
ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCkBAIC0yMjksMzggKzIzMCwzOCBAQCBOZXR3b3Jr
MUJhY2tlbmREaXNwYXRjaGVyOjpOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyKEJhY2tlbmREaXNw
YXRjaGVyJiBiYWNrZW5kRAogICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlZ2lzdGVyRGlzcGF0
Y2hlckZvckRvbWFpbigiTmV0d29yazEiX3MsIHRoaXMpOwogfQogCi12b2lkIE5ldHdvcmsxQmFj
a2VuZERpc3BhdGNoZXI6OmRpc3BhdGNoKGxvbmcgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIG1l
dGhvZCwgUmVmPEpTT046Ok9iamVjdD4mJiBtZXNzYWdlKQordm9pZCBOZXR3b3JrMUJhY2tlbmRE
aXNwYXRjaGVyOjpkaXNwYXRjaChsb25nIHByb3RvY29sX3JlcXVlc3RJZCwgY29uc3QgU3RyaW5n
JiBwcm90b2NvbF9tZXRob2QsIFJlZjxKU09OOjpPYmplY3Q+JiYgcHJvdG9jb2xfbWVzc2FnZSkK
IHsKICAgICBSZWY8TmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcj4gcHJvdGVjdCgqdGhpcyk7CiAK
LSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzOwotICAgIG1lc3NhZ2UtPmdldE9i
amVjdCgicGFyYW1zIl9zLCBwYXJhbWV0ZXJzKTsKKyAgICBhdXRvIHByb3RvY29sX3BhcmFtZXRl
cnMgPSBwcm90b2NvbF9tZXNzYWdlLT5nZXRPYmplY3QoInBhcmFtcyJfcyk7CiAKLSAgICBpZiAo
bWV0aG9kID09ICJsb2FkUmVzb3VyY2UiKSB7Ci0gICAgICAgIGxvYWRSZXNvdXJjZShyZXF1ZXN0
SWQsIFdURk1vdmUocGFyYW1ldGVycykpOworICAgIGlmIChwcm90b2NvbF9tZXRob2QgPT0gImxv
YWRSZXNvdXJjZSIpIHsKKyAgICAgICAgbG9hZFJlc291cmNlKHByb3RvY29sX3JlcXVlc3RJZCwg
V1RGTW92ZShwcm90b2NvbF9wYXJhbWV0ZXJzKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNw
YXRjaGVyOjpNZXRob2ROb3RGb3VuZCwgIidOZXR3b3JrMS4iICsgbWV0aG9kICsgIicgd2FzIG5v
dCBmb3VuZCIpOworICAgIG1fYmFja2VuZERpc3BhdGNoZXItPnJlcG9ydFByb3RvY29sRXJyb3Io
QmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdvcmsxLiIgKyBwcm90b2Nv
bF9tZXRob2QgKyAiJyB3YXMgbm90IGZvdW5kIik7CiB9CiAKLXZvaWQgTmV0d29yazFCYWNrZW5k
RGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlKGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiYmKQordm9pZCBOZXR3b3JrMUJhY2tlbmREaXNwYXRjaGVyOjpsb2FkUmVzb3VyY2UobG9u
ZyBwcm90b2NvbF9yZXF1ZXN0SWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpCiB7CiAjaWYgRU5B
QkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAgICAgaWYgKG1fYWx0ZXJuYXRl
RGlzcGF0Y2hlcikgewotICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmxvYWRSZXNvdXJj
ZShyZXF1ZXN0SWQpOworICAgICAgICBtX2FsdGVybmF0ZURpc3BhdGNoZXItPmxvYWRSZXNvdXJj
ZShwcm90b2NvbF9yZXF1ZXN0SWQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmIC8v
IEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogCi0gICAgRXJyb3JTdHJp
bmcgZXJyb3I7Ci0gICAgUmVmPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6T2JqZWN0Ojpj
cmVhdGUoKTsKLSAgICBtX2FnZW50LT5sb2FkUmVzb3VyY2UoZXJyb3IpOworICAgIGF1dG8gcmVz
dWx0ID0gbV9hZ2VudC0+bG9hZFJlc291cmNlKCk7CisgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAg
ICAgQVNTRVJUKCFyZXN1bHQuZXJyb3IoKS5pc0VtcHR5KCkpOworICAgICAgICBtX2JhY2tlbmRE
aXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRjaGVyOjpTZXJ2ZXJF
cnJvciwgcmVzdWx0LmVycm9yKCkpOworICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAgaWYg
KCFlcnJvci5sZW5ndGgoKSkKLSAgICAgICAgbV9iYWNrZW5kRGlzcGF0Y2hlci0+c2VuZFJlc3Bv
bnNlKHJlcXVlc3RJZCwgV1RGTW92ZShyZXN1bHQpLCBmYWxzZSk7Ci0gICAgZWxzZQotICAgICAg
ICBtX2JhY2tlbmREaXNwYXRjaGVyLT5yZXBvcnRQcm90b2NvbEVycm9yKEJhY2tlbmREaXNwYXRj
aGVyOjpTZXJ2ZXJFcnJvciwgV1RGTW92ZShlcnJvcikpOworICAgIGF1dG8gcHJvdG9jb2xfanNv
bk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIG1fYmFja2VuZERpc3BhdGNo
ZXItPnNlbmRSZXNwb25zZShwcm90b2NvbF9yZXF1ZXN0SWQsIFdURk1vdmUocHJvdG9jb2xfanNv
bk1lc3NhZ2UpLCBmYWxzZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEluc3BlY3RvcgpAQCAtMzAx
LDYgKzMwMiw3IEBAIHZvaWQgTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNl
KGxvbmcgcmVxdWVzdElkLCBSZWZQdHI8SlNPTjo6T2JqZWN0CiAKICNpbmNsdWRlICJUZXN0UHJv
dG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3
dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNw
YWNlIEluc3BlY3RvciB7CkBAIC0zNTMsMTYgKzM1NSwxNSBAQCBwcml2YXRlOgogI2luY2x1ZGUg
IlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9J
bnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
IAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKIHZvaWQgTmV0d29yazNGcm9udGVuZERpc3BhdGNo
ZXI6OnJlc291cmNlTG9hZGVkKCkKIHsKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2Fn
ZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygi
bWV0aG9kIl9zLCAiTmV0d29yazMucmVzb3VyY2VMb2FkZWQiX3MpOworICAgIGF1dG8gcHJvdG9j
b2xfanNvbk1lc3NhZ2UgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIHByb3RvY29sX2pz
b25NZXNzYWdlLT5zZXRTdHJpbmcoIm1ldGhvZCJfcywgIk5ldHdvcmszLnJlc291cmNlTG9hZGVk
Il9zKTsKIAotICAgIG1fZnJvbnRlbmRSb3V0ZXIuc2VuZEV2ZW50KGpzb25NZXNzYWdlLT50b0pT
T05TdHJpbmcoKSk7CisgICAgbV9mcm9udGVuZFJvdXRlci5zZW5kRXZlbnQocHJvdG9jb2xfanNv
bk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSW5zcGVjdG9y
CkBAIC00MDIsNyArNDAzLDkgQEAgdm9pZCBOZXR3b3JrM0Zyb250ZW5kRGlzcGF0Y2hlcjo6cmVz
b3VyY2VMb2FkZWQoKQogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9J
bnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNp
bmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApA
QCAtNDIzLDcgKzQyNiw3IEBAIGNsYXNzIE5ldHdvcmtFcnJvcjsKIAogbmFtZXNwYWNlIE5ldHdv
cmsyIHsKIAotY2xhc3MgTmV0d29ya0Vycm9yIDogcHVibGljIEpTT046Ok9iamVjdEJhc2Ugewor
Y2xhc3MgTmV0d29ya0Vycm9yIGZpbmFsIDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgewogcHVi
bGljOgogICAgIGVudW0gewogICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCkBAIC00NTAsMTcgKzQ1
MywxNyBAQCBwdWJsaWM6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBOZXR3b3JrRXJyb3I7CiAgICAg
cHVibGljOgogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBNZXNzYWdlU2V0PiYgc2V0TWVzc2Fn
ZShjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRFIHwgTWVzc2FnZVNl
dD4mIHNldE1lc3NhZ2UoY29uc3QgU3RyaW5nJiBpbl9tZXNzYWdlKQogICAgICAgICB7CiAgICAg
ICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgTWVzc2FnZVNldCksIHByb3BlcnR5X21l
c3NhZ2VfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibWVz
c2FnZSJfcywgdmFsdWUpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibWVzc2Fn
ZSJfcywgaW5fbWVzc2FnZSk7CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE1lc3NhZ2VT
ZXQ+KCk7CiAgICAgICAgIH0KIAotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQ29kZVNldD4mIHNl
dENvZGUoaW50IHZhbHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQ29kZVNldD4mIHNldENv
ZGUoaW50IGluX2NvZGUpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEo
U1RBVEUgJiBDb2RlU2V0KSwgcHJvcGVydHlfY29kZV9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAg
ICBtX3Jlc3VsdC0+c2V0SW50ZWdlcigiY29kZSJfcywgdmFsdWUpOworICAgICAgICAgICAgbV9y
ZXN1bHQtPnNldEludGVnZXIoImNvZGUiX3MsIGluX2NvZGUpOwogICAgICAgICAgICAgcmV0dXJu
IGNhc3RTdGF0ZTxDb2RlU2V0PigpOwogICAgICAgICB9CiAKQEAgLTUzMCw4ICs1MzMsNyBAQCBw
dWJsaWM6CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0
cy5oIgogCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0
b3IgewogCkBAIC01ODcsNyArNTg5LDcgQEAgY2xhc3MgT2JqQ0luc3BlY3Rvck5ldHdvcmsxQmFj
a2VuZERpc3BhdGNoZXIgZmluYWwgOiBwdWJsaWMgQWx0ZXJuYXRlTmV0d29yazFCYWMKICAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBPYmpDSW5zcGVjdG9yTmV0d29y
azFCYWNrZW5kRGlzcGF0Y2hlcihpZDxUZXN0UHJvdG9jb2xOZXR3b3JrMURvbWFpbkhhbmRsZXI+
IGhhbmRsZXIpIHsgbV9kZWxlZ2F0ZSA9IGhhbmRsZXI7IH0KLSAgICB2b2lkIGxvYWRSZXNvdXJj
ZShsb25nIHJlcXVlc3RJZCkgZmluYWw7CisgICAgdm9pZCBsb2FkUmVzb3VyY2UobG9uZyBwcm90
b2NvbF9yZXF1ZXN0SWQpIGZpbmFsOwogcHJpdmF0ZToKICAgICBSZXRhaW5QdHI8aWQ8VGVzdFBy
b3RvY29sTmV0d29yazFEb21haW5IYW5kbGVyPj4gbV9kZWxlZ2F0ZTsKIH07CkBAIC02MzUsMjEg
KzYzNywyMiBAQCBwcml2YXRlOgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAotdm9pZCBPYmpD
SW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6bG9hZFJlc291cmNlKGxvbmcgcmVx
dWVzdElkKQordm9pZCBPYmpDSW5zcGVjdG9yTmV0d29yazFCYWNrZW5kRGlzcGF0Y2hlcjo6bG9h
ZFJlc291cmNlKGxvbmcgcHJvdG9jb2xfcmVxdWVzdElkKQogewogICAgIGlmICghW21fZGVsZWdh
dGUgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihsb2FkUmVzb3VyY2VXaXRoRXJyb3JDYWxs
YmFjazpzdWNjZXNzQ2FsbGJhY2s6KV0pIHsKLSAgICAgICAgYmFja2VuZERpc3BhdGNoZXIoKS0+
cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRjaGVyOjpNZXRob2RO
b3RGb3VuZCwgIidOZXR3b3JrMS5sb2FkUmVzb3VyY2UnIHdhcyBub3QgZm91bmQiX3MpOworICAg
ICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5yZXBvcnRQcm90b2NvbEVycm9yKHByb3RvY29sX3Jl
cXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6Ok1ldGhvZE5vdEZvdW5kLCAiJ05ldHdvcmsxLmxv
YWRSZXNvdXJjZScgd2FzIG5vdCBmb3VuZCJfcyk7CiAgICAgICAgIGJhY2tlbmREaXNwYXRjaGVy
KCktPnNlbmRQZW5kaW5nRXJyb3JzKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBp
ZCBlcnJvckNhbGxiYWNrID0gXihOU1N0cmluZyAqZXJyb3IpIHsKLSAgICAgICAgYmFja2VuZERp
c3BhdGNoZXIoKS0+cmVwb3J0UHJvdG9jb2xFcnJvcihyZXF1ZXN0SWQsIEJhY2tlbmREaXNwYXRj
aGVyOjpTZXJ2ZXJFcnJvciwgZXJyb3IpOworICAgICAgICBiYWNrZW5kRGlzcGF0Y2hlcigpLT5y
ZXBvcnRQcm90b2NvbEVycm9yKHByb3RvY29sX3JlcXVlc3RJZCwgQmFja2VuZERpc3BhdGNoZXI6
OlNlcnZlckVycm9yLCBlcnJvcik7CiAgICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRQ
ZW5kaW5nRXJyb3JzKCk7CiAgICAgfTsKIAogICAgIGlkIHN1Y2Nlc3NDYWxsYmFjayA9IF57Ci0g
ICAgICAgIGJhY2tlbmREaXNwYXRjaGVyKCktPnNlbmRSZXNwb25zZShyZXF1ZXN0SWQsIEpTT046
Ok9iamVjdDo6Y3JlYXRlKCksIGZhbHNlKTsKKyAgICAgICAgYXV0byBwcm90b2NvbF9qc29uTWVz
c2FnZSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIGJhY2tlbmREaXNwYXRjaGVy
KCktPnNlbmRSZXNwb25zZShwcm90b2NvbF9yZXF1ZXN0SWQsIFdURk1vdmUocHJvdG9jb2xfanNv
bk1lc3NhZ2UpLCBmYWxzZSk7CiAgICAgfTsKIAogICAgIFttX2RlbGVnYXRlIGxvYWRSZXNvdXJj
ZVdpdGhFcnJvckNhbGxiYWNrOmVycm9yQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrOnN1Y2Nlc3ND
YWxsYmFja107CkBAIC04NTEsOSArODU0LDkgQEAgdXNpbmcgbmFtZXNwYWNlIEluc3BlY3RvcjsK
IHsKICAgICBjb25zdCBGcm9udGVuZFJvdXRlciYgcm91dGVyID0gX2NvbnRyb2xsZXItPmZyb250
ZW5kUm91dGVyKCk7CiAKLSAgICBSZWY8SlNPTjo6T2JqZWN0PiBqc29uTWVzc2FnZSA9IEpTT046
Ok9iamVjdDo6Y3JlYXRlKCk7Ci0gICAganNvbk1lc3NhZ2UtPnNldFN0cmluZygibWV0aG9kIl9z
LCAiTmV0d29yazMucmVzb3VyY2VMb2FkZWQiX3MpOwotICAgIHJvdXRlci5zZW5kRXZlbnQoanNv
bk1lc3NhZ2UtPnRvSlNPTlN0cmluZygpKTsKKyAgICBhdXRvIHByb3RvY29sX2pzb25NZXNzYWdl
ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBwcm90b2NvbF9qc29uTWVzc2FnZS0+c2V0
U3RyaW5nKCJtZXRob2QiX3MsICJOZXR3b3JrMy5yZXNvdXJjZUxvYWRlZCJfcyk7CisgICAgcm91
dGVyLnNlbmRFdmVudChwcm90b2NvbF9qc29uTWVzc2FnZS0+dG9KU09OU3RyaW5nKCkpOwogfQog
CiBAZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3Njcmlw
dHMvdGVzdHMvZXhwZWN0ZWQvc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbi1yZXN1
bHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0
ZWQvc2FtZS10eXBlLWlkLWRpZmZlcmVudC1kb21haW4uanNvbi1yZXN1bHQKaW5kZXggNDUzZWY2
ZTQ5NDhlYWIwMjVhYjU2MTM3OGQyYjhhYTk0ZjU1Yzg4ZC4uNTZlZjYzNGRlOTgwNjg1ODZkYmRj
ZDA4ODFiOTFkODQ5ZTJmYmExNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3NhbWUtdHlwZS1pZC1kaWZmZXJlbnQtZG9t
YWluLmpzb24tcmVzdWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9leHBlY3RlZC9zYW1lLXR5cGUtaWQtZGlmZmVyZW50LWRvbWFpbi5qc29uLXJl
c3VsdApAQCAtNjMsNyArNjMsNyBAQAogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVf
RElTUEFUQ0hFUlMpCiAKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5oIgorI2luY2x1ZGUg
IlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0
b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3Rv
ckZyb250ZW5kUm91dGVyLmg+CiAKQEAgLTExOSwxMSArMTE5LDE0IEBAIHByaXZhdGU6CiAKICNp
bmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx0dXBsZT4KKyNpbmNsdWRl
IDx3dGYvRXhwZWN0ZWQuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKLXR5cGVkZWYg
U3RyaW5nIEVycm9yU3RyaW5nOworCiAKIAogCkBAIC0xNjQsOSArMTY3LDcgQEAgdHlwZWRlZiBT
dHJpbmcgRXJyb3JTdHJpbmc7CiAjaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgog
CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNp
bmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5o
PgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogI2lmIEVOQUJMRShJTlNQRUNUT1Jf
QUxURVJOQVRFX0RJU1BBVENIRVJTKQogI2luY2x1ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlz
cGF0Y2hlcnMuaCIKQEAgLTIxNCw2ICsyMTUsNyBAQCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAog
I2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDx3dGYvSlNPTlZhbHVl
cy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKQEAgLTI1Nyw3ICsyNTksNiBAQCBjbGFz
cyBGcm9udGVuZFJvdXRlcjsKICNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgog
CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBA
IC0yOTgsNyArMjk5LDkgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiAjcHJhZ21hIG9uY2UKIAog
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlwZXMuaD4KLSNpbmNs
dWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5j
bHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAK
IG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC0zNjIsOCArMzY1LDcgQEAgdXNpbmcgUmVtb3Rl
T2JqZWN0SWQgPSBTdHJpbmc7CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGVzdFBy
b3RvY29sT2JqZWN0cy5oIgogCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8
d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAKIG5hbWVz
cGFjZSBJbnNwZWN0b3IgewogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5z
cGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvc2hhZG93ZWQtb3B0aW9uYWwtdHlwZS1zZXR0
ZXJzLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRz
L3Rlc3RzL2V4cGVjdGVkL3NoYWRvd2VkLW9wdGlvbmFsLXR5cGUtc2V0dGVycy5qc29uLXJlc3Vs
dAppbmRleCA1ZjJjZDc5MzMwNDI0N2U3NjU1ZjNlOTgxZWE3MDBmNTdjNzcwZmQ5Li44ZWNlY2M3
MDEwMzQwNGRhN2RjMjc4Y2E5NzUxOWEyZGViZmMwMDViIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvc2hhZG93ZWQtb3B0
aW9uYWwtdHlwZS1zZXR0ZXJzLmpzb24tcmVzdWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC9zaGFkb3dlZC1vcHRpb25hbC10eXBl
LXNldHRlcnMuanNvbi1yZXN1bHQKQEAgLTYzLDcgKzYzLDcgQEAKIAogI2lmIEVOQUJMRShJTlNQ
RUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlw
ZXMuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KICNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgogCkBAIC0xMTksMTEgKzExOSwxNCBA
QCBwcml2YXRlOgogCiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8
dHVwbGU+CisjaW5jbHVkZSA8d3RmL0V4cGVjdGVkLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFs
Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0
b3IgewogCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKwogCiAKIApAQCAtMTY0LDkgKzE2
Nyw3IEBAIHR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwogI2luY2x1ZGUgIlRlc3RCYWNrZW5k
RGlzcGF0Y2hlcnMuaCIKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250
ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KICNpbmNsdWRlIDx3dGYv
TmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKICNpZiBF
TkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKICNpbmNsdWRlICJUZXN0QWx0
ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCkBAIC0yMTQsNiArMjE1LDcgQEAgbmFtZXNwYWNl
IEluc3BlY3RvciB7CiAKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVk
ZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CkBAIC0yNTcs
NyArMjU5LDYgQEAgY2xhc3MgRnJvbnRlbmRSb3V0ZXI7CiAjaW5jbHVkZSAiVGVzdEZyb250ZW5k
RGlzcGF0Y2hlcnMuaCIKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250
ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiBuYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKIApAQCAtMjk4LDcgKzI5OSw5IEBAIG5hbWVzcGFjZSBJbnNwZWN0b3Igewog
I3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2Nv
bFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvSlNP
TlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtMzMxLDcgKzMzNCw3
IEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFN0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShUIGVu
dW1WYWx1ZSkKIG5hbWVzcGFjZSBSdW50aW1lIHsKIAogLyogS2V5IHBhdGguICovCi1jbGFzcyBL
ZXlQYXRoIDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgeworY2xhc3MgS2V5UGF0aCBmaW5hbCA6
IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKIHB1YmxpYzoKICAgICAvLyBOYW1lZCBhZnRlciBw
cm9wZXJ0eSBuYW1lICd0eXBlJyB3aGlsZSBnZW5lcmF0aW5nIEtleVBhdGguCiAgICAgZW51bSBj
bGFzcyBUeXBlIHsKQEAgLTMzOSw2ICszNDIsNyBAQCBwdWJsaWM6CiAgICAgICAgIFN0cmluZyA9
IDEsCiAgICAgICAgIEFycmF5ID0gMiwKICAgICB9OyAvLyBlbnVtIGNsYXNzIFR5cGUKKwogICAg
IGVudW0gewogICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCiAgICAgICAgIFR5cGVTZXQgPSAxIDw8
IDAsCkBAIC0zNjMsMTAgKzM2NywxMCBAQCBwdWJsaWM6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBL
ZXlQYXRoOwogICAgIHB1YmxpYzoKIAotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVHlwZVNldD4m
IHNldFR5cGUoVHlwZSB2YWx1ZSkKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IFR5cGVTZXQ+JiBz
ZXRUeXBlKFR5cGUgaW5fdHlwZSkKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoIShTVEFURSAmIFR5cGVTZXQpLCBwcm9wZXJ0eV90eXBlX2FscmVhZHlfc2V0KTsKLSAgICAg
ICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInR5cGUiX3MsIEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZSh2YWx1ZSkpOworICAgICAgICAgICAg
bV9yZXN1bHQtPnNldFN0cmluZygidHlwZSJfcywgUHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRF
bnVtQ29uc3RhbnRWYWx1ZShpbl90eXBlKSk7CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRl
PFR5cGVTZXQ+KCk7CiAgICAgICAgIH0KIApAQCAtMzkyLDE0ICszOTYsMTQgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSlNPTjo6T2JqZWN0OjpjcmVhdGUo
KSk7CiAgICAgfQogCi0gICAgdm9pZCBzZXRTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAg
ICB2b2lkIHNldFN0cmluZyhjb25zdCBTdHJpbmcmIGluX29wdF9zdHJpbmcpCiAgICAgewotICAg
ICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXRTdHJpbmcoInN0cmluZyJfcywgdmFsdWUpOworICAg
ICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXRTdHJpbmcoInN0cmluZyJfcywgaW5fb3B0X3N0cmlu
Zyk7CiAgICAgfQogCi0gICAgdm9pZCBzZXRBcnJheShSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJp
bmc+PiB2YWx1ZSkKKyAgICB2b2lkIHNldEFycmF5KFJlZjxKU09OOjpBcnJheU9mPFN0cmluZz4+
JiYgaW5fb3B0X2FycmF5KQogICAgIHsKLSAgICAgICAgSlNPTjo6T2JqZWN0QmFzZTo6c2V0QXJy
YXkoImFycmF5Il9zLCBXVEZNb3ZlKHZhbHVlKSk7CisgICAgICAgIEpTT046Ok9iamVjdEJhc2U6
OnNldEFycmF5KCJhcnJheSJfcywgV1RGTW92ZShpbl9vcHRfYXJyYXkpKTsKICAgICB9CiB9Owog
CkBAIC00MTQsNyArNDE4LDcgQEAgT3B0aW9uYWw8UHJvdG9jb2xFbnVtVHlwZT4gcGFyc2VFbnVt
VmFsdWVGcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYpOwogCiAvLyBFbnVtcyBpbiB0aGUgJ1J1bnRp
bWUnIERvbWFpbgogdGVtcGxhdGU8PgotT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVu
dGltZTo6S2V5UGF0aDo6VHlwZT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlJ1bnRpbWU6OktleVBhdGg6OlR5cGU+KGNvbnN0IFN0cmluZyYpOworT3B0aW9u
YWw8UHJvdG9jb2w6OlJ1bnRpbWU6OktleVBhdGg6OlR5cGU+IHBhcnNlRW51bVZhbHVlRnJvbVN0
cmluZzxQcm90b2NvbDo6UnVudGltZTo6S2V5UGF0aDo6VHlwZT4oY29uc3QgU3RyaW5nJik7CiAK
IH0gLy8gbmFtZXNwYWNlIFRlc3RIZWxwZXJzCiAKQEAgLTQ1Niw4ICs0NjAsNyBAQCBPcHRpb25h
bDxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpLZXlQYXRoOjpUeXBlPiBwYXJzZUVudW1W
YWx1ZUZyb21TdHJpbmc8SQogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlRlc3RQcm90
b2NvbE9iamVjdHMuaCIKIAotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0
Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogCiBuYW1lc3Bh
Y2UgSW5zcGVjdG9yIHsKIApAQCAtNDc4LDE2ICs0ODEsMTYgQEAgU3RyaW5nIGdldEVudW1Db25z
dGFudFZhbHVlKGludCBjb2RlKSB7CiAvLyBFbnVtcyBpbiB0aGUgJ1J1bnRpbWUnIERvbWFpbgog
CiB0ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpLZXlQ
YXRoOjpUeXBlPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6
UnVudGltZTo6S2V5UGF0aDo6VHlwZT4oY29uc3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKK09w
dGlvbmFsPFByb3RvY29sOjpSdW50aW1lOjpLZXlQYXRoOjpUeXBlPiBwYXJzZUVudW1WYWx1ZUZy
b21TdHJpbmc8UHJvdG9jb2w6OlJ1bnRpbWU6OktleVBhdGg6OlR5cGU+KGNvbnN0IFN0cmluZyYg
cHJvdG9jb2xTdHJpbmcpCiB7CiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBjb25zdGFudFZhbHVl
c1tdID0gewotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6Oktl
eVBhdGg6OlR5cGU6Ok51bGwsCi0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6
UnVudGltZTo6S2V5UGF0aDo6VHlwZTo6U3RyaW5nLAotICAgICAgICAoc2l6ZV90KUluc3BlY3Rv
cjo6UHJvdG9jb2w6OlJ1bnRpbWU6OktleVBhdGg6OlR5cGU6OkFycmF5LAorICAgICAgICAoc2l6
ZV90KVByb3RvY29sOjpSdW50aW1lOjpLZXlQYXRoOjpUeXBlOjpOdWxsLAorICAgICAgICAoc2l6
ZV90KVByb3RvY29sOjpSdW50aW1lOjpLZXlQYXRoOjpUeXBlOjpTdHJpbmcsCisgICAgICAgIChz
aXplX3QpUHJvdG9jb2w6OlJ1bnRpbWU6OktleVBhdGg6OlR5cGU6OkFycmF5LAogICAgIH07CiAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAzOyArK2kpCiAgICAgICAgIGlmIChwcm90b2NvbFN0
cmluZyA9PSBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb25zdGFudFZhbHVlc1tpXV0pCi0gICAgICAg
ICAgICByZXR1cm4gKEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OktleVBhdGg6OlR5cGUp
Y29uc3RhbnRWYWx1ZXNbaV07CisgICAgICAgICAgICByZXR1cm4gKFByb3RvY29sOjpSdW50aW1l
OjpLZXlQYXRoOjpUeXBlKWNvbnN0YW50VmFsdWVzW2ldOwogCiAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2Ny
aXB0cy90ZXN0cy9leHBlY3RlZC9zaG91bGQtc3RyaXAtY29tbWVudHMuanNvbi1yZXN1bHQgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvc2hv
dWxkLXN0cmlwLWNvbW1lbnRzLmpzb24tcmVzdWx0CmluZGV4IDM0OGFjZTkzYmFiMDk0N2RhZjg1
YjQ1ZjU5YzlmY2FhNjcwMmRlMDAuLjAwYWEzNmZhM2QwMjQ5MTNjNWI4ZDI3MzgxMWRhNWEwMTU0
ODMxMjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9leHBlY3RlZC9zaG91bGQtc3RyaXAtY29tbWVudHMuanNvbi1yZXN1bHQKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3No
b3VsZC1zdHJpcC1jb21tZW50cy5qc29uLXJlc3VsdApAQCAtNjMsNyArNjMsNyBAQAogCiAjaWYg
RU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAKLSNpbmNsdWRlICJUZXN0
UHJvdG9jb2xUeXBlcy5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgogI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CiAKQEAgLTExOSwx
MSArMTE5LDE0IEBAIHByaXZhdGU6CiAKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgi
CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4K
KyNpbmNsdWRlIDx0dXBsZT4KKyNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4KKyNpbmNsdWRlIDx3
dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNw
YWNlIEluc3BlY3RvciB7CiAKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCiAKIAogCkBA
IC0xNjQsOSArMTY3LDcgQEAgdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiAjaW5jbHVkZSAi
VGVzdEJhY2tlbmREaXNwYXRjaGVycy5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgogI2lu
Y2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcu
aD4KIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogI2luY2x1
ZGUgIlRlc3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKQEAgLTIxNCw2ICsyMTUsNyBA
QCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMu
aCIKICNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5o
PgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9y
IHsKQEAgLTI1Nyw3ICsyNTksNiBAQCBjbGFzcyBGcm9udGVuZFJvdXRlcjsKICNpbmNsdWRlICJU
ZXN0RnJvbnRlbmREaXNwYXRjaGVycy5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5z
cGVjdG9yRnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAK
IG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC0yOTgsNyArMjk5LDkgQEAgbmFtZXNwYWNlIElu
c3BlY3RvciB7CiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3Bl
Y3RvclByb3RvY29sVHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1
ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC0z
NTIsOCArMzU1LDcgQEAgbmFtZXNwYWNlIFByb3RvY29sIHsKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAKLSNpbmNsdWRlIDx3dGYvT3B0aW9u
YWwuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2Vy
dGlvbnMuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xh
cmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZlLXR5cGUuanNvbi1yZXN1bHQgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlv
bi1hbGlhc2VkLXByaW1pdGl2ZS10eXBlLmpzb24tcmVzdWx0CmluZGV4IDc5Y2I5ODU0NTlmODgy
NDU2NzdjNWUzYzI2MDVmNzM0NGUxMTZiZmMuLjM0YjFhY2JiY2FlYzgxMmQ4NGQxNjlmZTNiMmI4
MjcyNTY3YWJkNDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWFsaWFzZWQtcHJpbWl0aXZl
LXR5cGUuanNvbi1yZXN1bHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tYWxpYXNlZC1wcmltaXRpdmUt
dHlwZS5qc29uLXJlc3VsdApAQCAtNjMsNyArNjMsNyBAQAogCiAjaWYgRU5BQkxFKElOU1BFQ1RP
Ul9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAKLSNpbmNsdWRlICJUZXN0UHJvdG9jb2xUeXBlcy5o
IgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CiAKQEAgLTExOSwxMSArMTE5LDE0IEBAIHBy
aXZhdGU6CiAKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNsdWRlIDx0dXBs
ZT4KKyNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4K
ICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7
CiAKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCiAKIAogCkBAIC0xNjQsOSArMTY3LDcg
QEAgdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiAjaW5jbHVkZSAiVGVzdEJhY2tlbmREaXNw
YXRjaGVycy5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRS
b3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgogI2luY2x1ZGUgPHd0Zi9OZXZl
ckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogI2lmIEVOQUJM
RShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogI2luY2x1ZGUgIlRlc3RBbHRlcm5h
dGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKQEAgLTIxNCw2ICsyMTUsNyBAQCBuYW1lc3BhY2UgSW5z
cGVjdG9yIHsKIAogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDx3
dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKQEAgLTI1Nyw3ICsy
NTksNiBAQCBjbGFzcyBGcm9udGVuZFJvdXRlcjsKICNpbmNsdWRlICJUZXN0RnJvbnRlbmREaXNw
YXRjaGVycy5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJvbnRlbmRS
b3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNw
ZWN0b3IgewogCkBAIC0yOTgsNyArMjk5LDkgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiAjcHJh
Z21hIG9uY2UKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclByb3RvY29sVHlw
ZXMuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9KU09OVmFs
dWVzLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC0zNTcsOCArMzYwLDcgQEAg
dXNpbmcgUmVtb3RlT2JqZWN0SWQgPSBpbnQ7CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVk
ZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogCi0jaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Ci0j
aW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+
CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1h
cnJheS10eXBlLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9z
Y3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tYXJyYXktdHlwZS5qc29uLXJl
c3VsdAppbmRleCBkODg4MGM2M2UzMzc4YzVjZmUzMDhjYWZkZjg0Y2M5ODc0OTJiYmZjLi45NDBm
MTU4MGJkYzFkOWJjYTQ0MDE0NzQxNTJhMjNiYjI1NGIxOTBmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNs
YXJhdGlvbi1hcnJheS10eXBlLmpzb24tcmVzdWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWFycmF5
LXR5cGUuanNvbi1yZXN1bHQKQEAgLTY4LDcgKzY4LDcgQEAgSW5zcGVjdG9yQmFja2VuZC5hY3Rp
dmF0ZURvbWFpbigiRGVidWdnZXIiLCBudWxsKTsKIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxU
RVJOQVRFX0RJU1BBVENIRVJTKQogCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKKyNp
bmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9J
bnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgogCkBAIC0xMjQsMTEgKzEyNCwxNCBAQCBwcml2YXRl
OgogCiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8dHVwbGU+Cisj
aW5jbHVkZSA8d3RmL0V4cGVjdGVkLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCi10
eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKwogCiAKIApAQCAtMTY5LDkgKzE3Miw3IEBAIHR5
cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwogI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hl
cnMuaCIKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVy
Lmg+Ci0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0
cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKICNpZiBFTkFCTEUoSU5T
UEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKICNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFj
a2VuZERpc3BhdGNoZXJzLmgiCkBAIC0yMTksNiArMjIwLDcgQEAgbmFtZXNwYWNlIEluc3BlY3Rv
ciB7CiAKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8d3RmL0pT
T05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CkBAIC0yNjIsNyArMjY0LDYg
QEAgY2xhc3MgRnJvbnRlbmRSb3V0ZXI7CiAjaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hl
cnMuaCIKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVy
Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9y
IHsKIApAQCAtMzAzLDcgKzMwNCw5IEBAIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogI3ByYWdtYSBv
bmNlCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+
Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5o
PgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtMzMxLDcgKzMzNCw3IEBAIHVzaW5n
IEx1Y2t5TnVtYmVycyA9IEpTT046OkFycmF5T2Y8aW50PjsKIHVzaW5nIEJhYnlOYW1lcyA9IEpT
T046OkFycmF5T2Y8U3RyaW5nPjsKIHVzaW5nIE5ld09iamVjdHMgPSBKU09OOjpBcnJheU9mPGlu
dD47CiB1c2luZyBPbGRPYmplY3RzID0gSlNPTjo6QXJyYXlPZjxpbnQ+OwotdXNpbmcgU3RvcFJl
YXNvbnMgPSBKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpSZWFz
b24+OwordXNpbmcgU3RvcFJlYXNvbnMgPSBKU09OOjpBcnJheU9mPFByb3RvY29sOjpEZWJ1Z2dl
cjo6UmVhc29uPjsKIH0gLy8gUnVudGltZQogLy8gRW5kIG9mIHR5cGVkZWZzLgogCkBAIC0zNjUs
NyArMzY4LDcgQEAgT3B0aW9uYWw8UHJvdG9jb2xFbnVtVHlwZT4gcGFyc2VFbnVtVmFsdWVGcm9t
U3RyaW5nKGNvbnN0IFN0cmluZyYpOwogCiAvLyBFbnVtcyBpbiB0aGUgJ0RlYnVnZ2VyJyBEb21h
aW4KIHRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpS
ZWFzb24+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1
Z2dlcjo6UmVhc29uPihjb25zdCBTdHJpbmcmKTsKK09wdGlvbmFsPFByb3RvY29sOjpEZWJ1Z2dl
cjo6UmVhc29uPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8UHJvdG9jb2w6OkRlYnVnZ2VyOjpS
ZWFzb24+KGNvbnN0IFN0cmluZyYpOwogCiB9IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycwogCkBA
IC00MTcsOCArNDIwLDcgQEAgc3RydWN0IERlZmF1bHRIYXNoPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRlYnVnZ2VyOjpSZWFzb24+IDogSW50SGFzaDxJbnNwZWN0b3I6OlAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAKLSNpbmNsdWRlIDx3dGYv
T3B0aW9uYWwuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3Rm
L0Fzc2VydGlvbnMuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKQEAgLTQzOSwxNiArNDQx
LDE2IEBAIFN0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSkgewogLy8gRW51bXMg
aW4gdGhlICdEZWJ1Z2dlcicgRG9tYWluCiAKIHRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRlYnVnZ2VyOjpSZWFzb24+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJ
bnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1Z2dlcjo6UmVhc29uPihjb25zdCBTdHJpbmcmIHByb3Rv
Y29sU3RyaW5nKQorT3B0aW9uYWw8UHJvdG9jb2w6OkRlYnVnZ2VyOjpSZWFzb24+IHBhcnNlRW51
bVZhbHVlRnJvbVN0cmluZzxQcm90b2NvbDo6RGVidWdnZXI6OlJlYXNvbj4oY29uc3QgU3RyaW5n
JiBwcm90b2NvbFN0cmluZykKIHsKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNvbnN0YW50VmFs
dWVzW10gPSB7Ci0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6RGVidWdnZXI6
OlJlYXNvbjo6RGllZCwKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpEZWJ1
Z2dlcjo6UmVhc29uOjpGYWludGVkLAotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRlYnVnZ2VyOjpSZWFzb246Okh1bmdyeSwKKyAgICAgICAgKHNpemVfdClQcm90b2NvbDo6
RGVidWdnZXI6OlJlYXNvbjo6RGllZCwKKyAgICAgICAgKHNpemVfdClQcm90b2NvbDo6RGVidWdn
ZXI6OlJlYXNvbjo6RmFpbnRlZCwKKyAgICAgICAgKHNpemVfdClQcm90b2NvbDo6RGVidWdnZXI6
OlJlYXNvbjo6SHVuZ3J5LAogICAgIH07CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAzOyAr
K2kpCiAgICAgICAgIGlmIChwcm90b2NvbFN0cmluZyA9PSBlbnVtX2NvbnN0YW50X3ZhbHVlc1tj
b25zdGFudFZhbHVlc1tpXV0pCi0gICAgICAgICAgICByZXR1cm4gKEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRlYnVnZ2VyOjpSZWFzb24pY29uc3RhbnRWYWx1ZXNbaV07CisgICAgICAgICAgICByZXR1
cm4gKFByb3RvY29sOjpEZWJ1Z2dlcjo6UmVhc29uKWNvbnN0YW50VmFsdWVzW2ldOwogCiAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWVudW0t
dHlwZS5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0
cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLWVudW0tdHlwZS5qc29uLXJlc3VsdApp
bmRleCAzYTJjMjA1MjgzMDQ0ZTAwMDZiMzMxZWUzMTViMDQzN2E0ZmE1YmY5Li45NTExNmJjNTBh
YmYyNzk0MDY0NTkwNzEwZmNkM2UyNDZiZjBjNThiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlv
bi1lbnVtLXR5cGUuanNvbi1yZXN1bHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3Bl
Y3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtZGVjbGFyYXRpb24tZW51bS10eXBlLmpz
b24tcmVzdWx0CkBAIC02OSw3ICs2OSw3IEBAIEluc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21h
aW4oIlJ1bnRpbWUiLCBudWxsKTsKIAogI2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJ
U1BBVENIRVJTKQogCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMuaCIKKyNpbmNsdWRlICJU
ZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXIuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JG
cm9udGVuZFJvdXRlci5oPgogCkBAIC0xMjUsMTEgKzEyNSwxNCBAQCBwcml2YXRlOgogCiAjaW5j
bHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0lu
c3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8dHVwbGU+CisjaW5jbHVkZSA8
d3RmL0V4cGVjdGVkLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCi10eXBlZGVmIFN0
cmluZyBFcnJvclN0cmluZzsKKwogCiAKIApAQCAtMTcwLDkgKzE3Myw3IEBAIHR5cGVkZWYgU3Ry
aW5nIEVycm9yU3RyaW5nOwogI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKIAog
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5j
bHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4K
LSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FM
VEVSTkFURV9ESVNQQVRDSEVSUykKICNpbmNsdWRlICJUZXN0QWx0ZXJuYXRlQmFja2VuZERpc3Bh
dGNoZXJzLmgiCkBAIC0yMjAsNiArMjIxLDcgQEAgbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKICNp
bmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMu
aD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CkBAIC0yNjMsNyArMjY1LDYgQEAgY2xhc3Mg
RnJvbnRlbmRSb3V0ZXI7CiAjaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlzcGF0Y2hlcnMuaCIKIAog
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+Ci0jaW5j
bHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAt
MzA0LDcgKzMwNSw5IEBAIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogI3ByYWdtYSBvbmNlCiAKICNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5cGVzLmg+Ci0jaW5jbHVk
ZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1
ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBu
YW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtMzYyLDkgKzM2NSw5IEBAIE9wdGlvbmFsPFByb3Rv
Y29sRW51bVR5cGU+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZyhjb25zdCBTdHJpbmcmKTsKIAog
Ly8gRW51bXMgaW4gdGhlICdSdW50aW1lJyBEb21haW4KIHRlbXBsYXRlPD4KLU9wdGlvbmFsPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkZhcm1BbmltYWxzPiBwYXJzZUVudW1WYWx1ZUZy
b21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHM+KGNvbnN0
IFN0cmluZyYpOworT3B0aW9uYWw8UHJvdG9jb2w6OlJ1bnRpbWU6OkZhcm1BbmltYWxzPiBwYXJz
ZUVudW1WYWx1ZUZyb21TdHJpbmc8UHJvdG9jb2w6OlJ1bnRpbWU6OkZhcm1BbmltYWxzPihjb25z
dCBTdHJpbmcmKTsKIHRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1
bnRpbWU6OlR3b0xlZ2dlZEFuaW1hbHM+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0
b3I6OlByb3RvY29sOjpSdW50aW1lOjpUd29MZWdnZWRBbmltYWxzPihjb25zdCBTdHJpbmcmKTsK
K09wdGlvbmFsPFByb3RvY29sOjpSdW50aW1lOjpUd29MZWdnZWRBbmltYWxzPiBwYXJzZUVudW1W
YWx1ZUZyb21TdHJpbmc8UHJvdG9jb2w6OlJ1bnRpbWU6OlR3b0xlZ2dlZEFuaW1hbHM+KGNvbnN0
IFN0cmluZyYpOwogCiB9IC8vIG5hbWVzcGFjZSBUZXN0SGVscGVycwogCkBAIC00MTgsOCArNDIx
LDcgQEAgc3RydWN0IERlZmF1bHRIYXNoPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlR3
b0xlZ2dlZEFuaW1hbHM+IDogSW50SGFzaDxJbnMKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAKLSNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4K
LSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMu
aD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKQEAgLTQ0NCwzMyArNDQ2LDMzIEBAIFN0cmlu
ZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShpbnQgY29kZSkgewogLy8gRW51bXMgaW4gdGhlICdSdW50
aW1lJyBEb21haW4KIAogdGVtcGxhdGU8PgotT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6
UnVudGltZTo6RmFybUFuaW1hbHM+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6
OlByb3RvY29sOjpSdW50aW1lOjpGYXJtQW5pbWFscz4oY29uc3QgU3RyaW5nJiBwcm90b2NvbFN0
cmluZykKK09wdGlvbmFsPFByb3RvY29sOjpSdW50aW1lOjpGYXJtQW5pbWFscz4gcGFyc2VFbnVt
VmFsdWVGcm9tU3RyaW5nPFByb3RvY29sOjpSdW50aW1lOjpGYXJtQW5pbWFscz4oY29uc3QgU3Ry
aW5nJiBwcm90b2NvbFN0cmluZykKIHsKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNvbnN0YW50
VmFsdWVzW10gPSB7Ci0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGlt
ZTo6RmFybUFuaW1hbHM6OlBpZ3MsCi0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2Nv
bDo6UnVudGltZTo6RmFybUFuaW1hbHM6OkNvd3MsCi0gICAgICAgIChzaXplX3QpSW5zcGVjdG9y
OjpQcm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHM6OkNhdHMsCi0gICAgICAgIChzaXplX3Qp
SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHM6OkhlbnMsCisgICAgICAg
IChzaXplX3QpUHJvdG9jb2w6OlJ1bnRpbWU6OkZhcm1BbmltYWxzOjpQaWdzLAorICAgICAgICAo
c2l6ZV90KVByb3RvY29sOjpSdW50aW1lOjpGYXJtQW5pbWFsczo6Q293cywKKyAgICAgICAgKHNp
emVfdClQcm90b2NvbDo6UnVudGltZTo6RmFybUFuaW1hbHM6OkNhdHMsCisgICAgICAgIChzaXpl
X3QpUHJvdG9jb2w6OlJ1bnRpbWU6OkZhcm1BbmltYWxzOjpIZW5zLAogICAgIH07CiAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCA0OyArK2kpCiAgICAgICAgIGlmIChwcm90b2NvbFN0cmluZyA9
PSBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb25zdGFudFZhbHVlc1tpXV0pCi0gICAgICAgICAgICBy
ZXR1cm4gKEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OkZhcm1BbmltYWxzKWNvbnN0YW50
VmFsdWVzW2ldOworICAgICAgICAgICAgcmV0dXJuIChQcm90b2NvbDo6UnVudGltZTo6RmFybUFu
aW1hbHMpY29uc3RhbnRWYWx1ZXNbaV07CiAKICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQog
CiB0ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpUd29M
ZWdnZWRBbmltYWxzPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFscz4oY29uc3QgU3RyaW5nJiBwcm90b2NvbFN0cmlu
ZykKK09wdGlvbmFsPFByb3RvY29sOjpSdW50aW1lOjpUd29MZWdnZWRBbmltYWxzPiBwYXJzZUVu
dW1WYWx1ZUZyb21TdHJpbmc8UHJvdG9jb2w6OlJ1bnRpbWU6OlR3b0xlZ2dlZEFuaW1hbHM+KGNv
bnN0IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcpCiB7CiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBj
b25zdGFudFZhbHVlc1tdID0gewotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6
OlJ1bnRpbWU6OlR3b0xlZ2dlZEFuaW1hbHM6OkR1Y2tzLAotICAgICAgICAoc2l6ZV90KUluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlR3b0xlZ2dlZEFuaW1hbHM6OkhlbnMsCi0gICAgICAg
IChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFsczo6
Q3Jvd3MsCi0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6VHdv
TGVnZ2VkQW5pbWFsczo6RmxhbWluZ29zLAorICAgICAgICAoc2l6ZV90KVByb3RvY29sOjpSdW50
aW1lOjpUd29MZWdnZWRBbmltYWxzOjpEdWNrcywKKyAgICAgICAgKHNpemVfdClQcm90b2NvbDo6
UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFsczo6SGVucywKKyAgICAgICAgKHNpemVfdClQcm90b2Nv
bDo6UnVudGltZTo6VHdvTGVnZ2VkQW5pbWFsczo6Q3Jvd3MsCisgICAgICAgIChzaXplX3QpUHJv
dG9jb2w6OlJ1bnRpbWU6OlR3b0xlZ2dlZEFuaW1hbHM6OkZsYW1pbmdvcywKICAgICB9OwogICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgNDsgKytpKQogICAgICAgICBpZiAocHJvdG9jb2xTdHJp
bmcgPT0gZW51bV9jb25zdGFudF92YWx1ZXNbY29uc3RhbnRWYWx1ZXNbaV1dKQotICAgICAgICAg
ICAgcmV0dXJuIChJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpUd29MZWdnZWRBbmltYWxz
KWNvbnN0YW50VmFsdWVzW2ldOworICAgICAgICAgICAgcmV0dXJuIChQcm90b2NvbDo6UnVudGlt
ZTo6VHdvTGVnZ2VkQW5pbWFscyljb25zdGFudFZhbHVlc1tpXTsKIAogICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9y
L3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1kZWNsYXJhdGlvbi1vYmplY3QtdHlwZS5qc29u
LXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9l
eHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24tcmVzdWx0CmluZGV4IDMy
OGZlZDIzZGM0Y2E3ZjE4ODU5MGI2MzQ0ZDViZjdlNDczZGRjMDMuLmJhOWYxN2M2MjUwZGNlMDY4
Y2Y5NDY1NTk0NzBkZDQ1YjYxNzc0MDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLW9iamVj
dC10eXBlLmpzb24tcmVzdWx0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Iv
c2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLWRlY2xhcmF0aW9uLW9iamVjdC10eXBlLmpzb24t
cmVzdWx0CkBAIC03MCw3ICs3MCw3IEBAIEluc3BlY3RvckJhY2tlbmQuYWN0aXZhdGVEb21haW4o
IkRhdGFiYXNlIiwgbnVsbCk7CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQ
QVRDSEVSUykKIAotI2luY2x1ZGUgIlRlc3RQcm90b2NvbFR5cGVzLmgiCisjaW5jbHVkZSAiVGVz
dFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyLmg+CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yRnJv
bnRlbmRSb3V0ZXIuaD4KIApAQCAtMTI2LDExICsxMjYsMTQgQEAgcHJpdmF0ZToKIAogI2luY2x1
ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgorI2luY2x1ZGUgPHR1cGxlPgorI2luY2x1ZGUgPHd0
Zi9FeHBlY3RlZC5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIAotdHlwZWRlZiBTdHJp
bmcgRXJyb3JTdHJpbmc7CisKIAogCiAKQEAgLTE3MSw5ICsxNzQsNyBAQCB0eXBlZGVmIFN0cmlu
ZyBFcnJvclN0cmluZzsKICNpbmNsdWRlICJUZXN0QmFja2VuZERpc3BhdGNoZXJzLmgiCiAKICNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1
ZGUgPHd0Zi9KU09OVmFsdWVzLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0j
aW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiAjaWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRF
Uk5BVEVfRElTUEFUQ0hFUlMpCiAjaW5jbHVkZSAiVGVzdEFsdGVybmF0ZUJhY2tlbmREaXNwYXRj
aGVycy5oIgpAQCAtMjIxLDYgKzIyMiw3IEBAIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCiAjaW5j
bHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPHd0Zi9KU09OVmFsdWVzLmg+
CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewpAQCAtMjY0LDcgKzI2Niw2IEBAIGNsYXNzIEZy
b250ZW5kUm91dGVyOwogI2luY2x1ZGUgIlRlc3RGcm9udGVuZERpc3BhdGNoZXJzLmgiCiAKICNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgotI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CiAKQEAgLTMw
NSw3ICszMDYsOSBAQCBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKICNwcmFnbWEgb25jZQogCiAjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yUHJvdG9jb2xUeXBlcy5oPgotI2luY2x1ZGUg
PHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRl
IDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFt
ZXNwYWNlIEluc3BlY3RvciB7CiAKQEAgLTMzMyw3ICszMzYsNyBAQCBjbGFzcyBQYXJhbWV0ZXJC
dW5kbGU7CiAKIC8vIFR5cGVkZWZzLgogbmFtZXNwYWNlIERhdGFiYXNlIHsKLXVzaW5nIEVycm9y
TGlzdCA9IEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9y
PjsKK3VzaW5nIEVycm9yTGlzdCA9IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkRhdGFiYXNlOjpF
cnJvcj47CiB9IC8vIERhdGFiYXNlCiAvLyBFbmQgb2YgdHlwZWRlZnMuCiAKQEAgLTM1MSw3ICsz
NTQsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBTdHJpbmcgZ2V0RW51bUNvbnN0YW50VmFsdWUo
VCBlbnVtVmFsdWUpCiBuYW1lc3BhY2UgRGF0YWJhc2UgewogCiAvKiBEYXRhYmFzZSBlcnJvci4g
Ki8KLWNsYXNzIEVycm9yIDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgeworY2xhc3MgRXJyb3Ig
ZmluYWwgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7CiBwdWJsaWM6CiAgICAgZW51bSB7CiAg
ICAgICAgIE5vRmllbGRzU2V0ID0gMCwKQEAgLTM3OCwxNyArMzgxLDE3IEBAIHB1YmxpYzoKICAg
ICAgICAgZnJpZW5kIGNsYXNzIEVycm9yOwogICAgIHB1YmxpYzoKIAotICAgICAgICBCdWlsZGVy
PFNUQVRFIHwgTWVzc2FnZVNldD4mIHNldE1lc3NhZ2UoY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAg
ICAgICAgQnVpbGRlcjxTVEFURSB8IE1lc3NhZ2VTZXQ+JiBzZXRNZXNzYWdlKGNvbnN0IFN0cmlu
ZyYgaW5fbWVzc2FnZSkKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShT
VEFURSAmIE1lc3NhZ2VTZXQpLCBwcm9wZXJ0eV9tZXNzYWdlX2FscmVhZHlfc2V0KTsKLSAgICAg
ICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm1lc3NhZ2UiX3MsIHZhbHVlKTsKKyAgICAgICAg
ICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm1lc3NhZ2UiX3MsIGluX21lc3NhZ2UpOwogICAgICAg
ICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxNZXNzYWdlU2V0PigpOwogICAgICAgICB9CiAKLSAgICAg
ICAgQnVpbGRlcjxTVEFURSB8IENvZGVTZXQ+JiBzZXRDb2RlKGludCB2YWx1ZSkKKyAgICAgICAg
QnVpbGRlcjxTVEFURSB8IENvZGVTZXQ+JiBzZXRDb2RlKGludCBpbl9jb2RlKQogICAgICAgICB7
CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQ29kZVNldCksIHByb3BlcnR5
X2NvZGVfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldEludGVnZXIoImNv
ZGUiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRJbnRlZ2VyKCJjb2RlIl9z
LCBpbl9jb2RlKTsKICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Q29kZVNldD4oKTsKICAg
ICAgICAgfQogCkBAIC00MjQsMTMgKzQyNywxNCBAQCBlbnVtIGNsYXNzIE1vdXNlQnV0dG9uIHsK
ICAgICBSaWdodCA9IDMsCiB9OyAvLyBlbnVtIGNsYXNzIE1vdXNlQnV0dG9uCiAKLWNsYXNzIE9w
dGlvbmFsUGFyYW1ldGVyQnVuZGxlIDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgeworY2xhc3Mg
T3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGUgZmluYWwgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7
CiBwdWJsaWM6CiAgICAgLy8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAnZGlyZWN0aW9uYWxp
dHknIHdoaWxlIGdlbmVyYXRpbmcgT3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGUuCiAgICAgZW51bSBj
bGFzcyBEaXJlY3Rpb25hbGl0eSB7CiAgICAgICAgIExUUiA9IDQsCiAgICAgICAgIFJUTCA9IDUs
CiAgICAgfTsgLy8gZW51bSBjbGFzcyBEaXJlY3Rpb25hbGl0eQorCiAgICAgZW51bSB7CiAgICAg
ICAgIE5vRmllbGRzU2V0ID0gMCwKICAgICAgICAgQWxsRmllbGRzU2V0ID0gMApAQCAtNDc1LDU5
ICs0NzksNjAgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4o
SlNPTjo6T2JqZWN0OjpjcmVhdGUoKSk7CiAgICAgfQogCi0gICAgdm9pZCBzZXRDb2x1bW5OYW1l
cyhSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiB2YWx1ZSkKKyAgICB2b2lkIHNldENvbHVt
bk5hbWVzKFJlZjxKU09OOjpBcnJheU9mPFN0cmluZz4+JiYgaW5fb3B0X2NvbHVtbk5hbWVzKQog
ICAgIHsKLSAgICAgICAgSlNPTjo6T2JqZWN0QmFzZTo6c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9z
LCBXVEZNb3ZlKHZhbHVlKSk7CisgICAgICAgIEpTT046Ok9iamVjdEJhc2U6OnNldEFycmF5KCJj
b2x1bW5OYW1lcyJfcywgV1RGTW92ZShpbl9vcHRfY29sdW1uTmFtZXMpKTsKICAgICB9CiAKLSAg
ICB2b2lkIHNldEJ1dHRvbnMoUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9uPj4gdmFsdWUpCisgICAgdm9pZCBzZXRCdXR0b25zKFJl
ZjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpEYXRhYmFzZTo6TW91c2VCdXR0b24+PiYmIGluX29w
dF9idXR0b25zKQogICAgIHsKLSAgICAgICAgSlNPTjo6T2JqZWN0QmFzZTo6c2V0QXJyYXkoImJ1
dHRvbnMiX3MsIFdURk1vdmUodmFsdWUpKTsKKyAgICAgICAgSlNPTjo6T2JqZWN0QmFzZTo6c2V0
QXJyYXkoImJ1dHRvbnMiX3MsIFdURk1vdmUoaW5fb3B0X2J1dHRvbnMpKTsKICAgICB9CiAKLSAg
ICB2b2lkIHNldERpcmVjdGlvbmFsaXR5KERpcmVjdGlvbmFsaXR5IHZhbHVlKQorICAgIHZvaWQg
c2V0RGlyZWN0aW9uYWxpdHkoRGlyZWN0aW9uYWxpdHkgaW5fb3B0X2RpcmVjdGlvbmFsaXR5KQog
ICAgIHsKLSAgICAgICAgSlNPTjo6T2JqZWN0QmFzZTo6c2V0U3RyaW5nKCJkaXJlY3Rpb25hbGl0
eSJfcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZh
bHVlKHZhbHVlKSk7CisgICAgICAgIEpTT046Ok9iamVjdEJhc2U6OnNldFN0cmluZygiZGlyZWN0
aW9uYWxpdHkiX3MsIFByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUo
aW5fb3B0X2RpcmVjdGlvbmFsaXR5KSk7CiAgICAgfQogCi0gICAgdm9pZCBzZXROb3Rlcyhjb25z
dCBTdHJpbmcmIHZhbHVlKQorICAgIHZvaWQgc2V0Tm90ZXMoY29uc3QgU3RyaW5nJiBpbl9vcHRf
bm90ZXMpCiAgICAgewotICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXRTdHJpbmcoIm5vdGVz
Il9zLCB2YWx1ZSk7CisgICAgICAgIEpTT046Ok9iamVjdEJhc2U6OnNldFN0cmluZygibm90ZXMi
X3MsIGluX29wdF9ub3Rlcyk7CiAgICAgfQogCi0gICAgdm9pZCBzZXRUaW1lc3RhbXAoZG91Ymxl
IHZhbHVlKQorICAgIHZvaWQgc2V0VGltZXN0YW1wKGRvdWJsZSBpbl9vcHRfdGltZXN0YW1wKQog
ICAgIHsKLSAgICAgICAgSlNPTjo6T2JqZWN0QmFzZTo6c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3Ms
IHZhbHVlKTsKKyAgICAgICAgSlNPTjo6T2JqZWN0QmFzZTo6c2V0RG91YmxlKCJ0aW1lc3RhbXAi
X3MsIGluX29wdF90aW1lc3RhbXApOwogICAgIH0KIAotICAgIHZvaWQgc2V0VmFsdWVzKFJlZlB0
cjxKU09OOjpPYmplY3Q+IHZhbHVlKQorICAgIHZvaWQgc2V0VmFsdWVzKFJlZjxKU09OOjpPYmpl
Y3Q+JiYgaW5fb3B0X3ZhbHVlcykKICAgICB7Ci0gICAgICAgIEpTT046Ok9iamVjdEJhc2U6OnNl
dE9iamVjdCgidmFsdWVzIl9zLCBXVEZNb3ZlKHZhbHVlKSk7CisgICAgICAgIEpTT046Ok9iamVj
dEJhc2U6OnNldE9iamVjdCgidmFsdWVzIl9zLCBXVEZNb3ZlKGluX29wdF92YWx1ZXMpKTsKICAg
ICB9CiAKLSAgICB2b2lkIHNldFBheWxvYWQoUmVmUHRyPEpTT046OlZhbHVlPiB2YWx1ZSkKKyAg
ICB2b2lkIHNldFBheWxvYWQoUmVmPEpTT046OlZhbHVlPiYmIGluX29wdF9wYXlsb2FkKQogICAg
IHsKLSAgICAgICAgSlNPTjo6T2JqZWN0QmFzZTo6c2V0VmFsdWUoInBheWxvYWQiX3MsIFdURk1v
dmUodmFsdWUpKTsKKyAgICAgICAgSlNPTjo6T2JqZWN0QmFzZTo6c2V0VmFsdWUoInBheWxvYWQi
X3MsIFdURk1vdmUoaW5fb3B0X3BheWxvYWQpKTsKICAgICB9CiAKLSAgICB2b2lkIHNldEVycm9y
KFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IHZhbHVlKQorICAg
IHZvaWQgc2V0RXJyb3IoUmVmPFByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+JiYgaW5fb3B0X2Vy
cm9yKQogICAgIHsKLSAgICAgICAgSlNPTjo6T2JqZWN0QmFzZTo6c2V0T2JqZWN0KCJlcnJvciJf
cywgV1RGTW92ZSh2YWx1ZSkpOworICAgICAgICBKU09OOjpPYmplY3RCYXNlOjpzZXRPYmplY3Qo
ImVycm9yIl9zLCBXVEZNb3ZlKGluX29wdF9lcnJvcikpOwogICAgIH0KIAotICAgIHZvaWQgc2V0
RXJyb3JMaXN0KFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3JMaXN0
PiB2YWx1ZSkKKyAgICB2b2lkIHNldEVycm9yTGlzdChSZWY8UHJvdG9jb2w6OkRhdGFiYXNlOjpF
cnJvckxpc3Q+JiYgaW5fb3B0X2Vycm9yTGlzdCkKICAgICB7Ci0gICAgICAgIEpTT046Ok9iamVj
dEJhc2U6OnNldEFycmF5KCJlcnJvckxpc3QiX3MsIFdURk1vdmUodmFsdWUpKTsKKyAgICAgICAg
SlNPTjo6T2JqZWN0QmFzZTo6c2V0QXJyYXkoImVycm9yTGlzdCJfcywgV1RGTW92ZShpbl9vcHRf
ZXJyb3JMaXN0KSk7CiAgICAgfQogfTsKIAotY2xhc3MgUGFyYW1ldGVyQnVuZGxlIDogcHVibGlj
IEpTT046Ok9iamVjdEJhc2UgeworY2xhc3MgUGFyYW1ldGVyQnVuZGxlIGZpbmFsIDogcHVibGlj
IEpTT046Ok9iamVjdEJhc2UgewogcHVibGljOgogICAgIC8vIE5hbWVkIGFmdGVyIHByb3BlcnR5
IG5hbWUgJ2RpcmVjdGlvbmFsaXR5JyB3aGlsZSBnZW5lcmF0aW5nIFBhcmFtZXRlckJ1bmRsZS4K
ICAgICBlbnVtIGNsYXNzIERpcmVjdGlvbmFsaXR5IHsKICAgICAgICAgTFRSID0gNCwKICAgICAg
ICAgUlRMID0gNSwKICAgICB9OyAvLyBlbnVtIGNsYXNzIERpcmVjdGlvbmFsaXR5CisKICAgICBl
bnVtIHsKICAgICAgICAgTm9GaWVsZHNTZXQgPSAwLAogICAgICAgICBDb2x1bW5OYW1lc1NldCA9
IDEgPDwgMCwKQEAgLTU2MCw2NiArNTY1LDY2IEBAIHB1YmxpYzoKICAgICAgICAgZnJpZW5kIGNs
YXNzIFBhcmFtZXRlckJ1bmRsZTsKICAgICBwdWJsaWM6CiAKLSAgICAgICAgQnVpbGRlcjxTVEFU
RSB8IENvbHVtbk5hbWVzU2V0PiYgc2V0Q29sdW1uTmFtZXMoUmVmUHRyPEpTT046OkFycmF5T2Y8
U3RyaW5nPj4gdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDb2x1bW5OYW1lc1NldD4m
IHNldENvbHVtbk5hbWVzKFJlZjxKU09OOjpBcnJheU9mPFN0cmluZz4+JiYgaW5fY29sdW1uTmFt
ZXMpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBDb2x1
bW5OYW1lc1NldCksIHByb3BlcnR5X2NvbHVtbk5hbWVzX2FscmVhZHlfc2V0KTsKLSAgICAgICAg
ICAgIG1fcmVzdWx0LT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIHZhbHVlKTsKKyAgICAgICAg
ICAgIG1fcmVzdWx0LT5zZXRBcnJheSgiY29sdW1uTmFtZXMiX3MsIFdURk1vdmUoaW5fY29sdW1u
TmFtZXMpKTsKICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8Q29sdW1uTmFtZXNTZXQ+KCk7
CiAgICAgICAgIH0KIAotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQnV0dG9uc1NldD4mIHNldEJ1
dHRvbnMoUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6
Ok1vdXNlQnV0dG9uPj4gdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBCdXR0b25zU2V0
PiYgc2V0QnV0dG9ucyhSZWY8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6RGF0YWJhc2U6Ok1vdXNl
QnV0dG9uPj4mJiBpbl9idXR0b25zKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FT
U0VSVCghKFNUQVRFICYgQnV0dG9uc1NldCksIHByb3BlcnR5X2J1dHRvbnNfYWxyZWFkeV9zZXQp
OwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldEFycmF5KCJidXR0b25zIl9zLCB2YWx1ZSk7Cisg
ICAgICAgICAgICBtX3Jlc3VsdC0+c2V0QXJyYXkoImJ1dHRvbnMiX3MsIFdURk1vdmUoaW5fYnV0
dG9ucykpOwogICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxCdXR0b25zU2V0PigpOwogICAg
ICAgICB9CiAKLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IERpcmVjdGlvbmFsaXR5U2V0PiYgc2V0
RGlyZWN0aW9uYWxpdHkoRGlyZWN0aW9uYWxpdHkgdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8U1RB
VEUgfCBEaXJlY3Rpb25hbGl0eVNldD4mIHNldERpcmVjdGlvbmFsaXR5KERpcmVjdGlvbmFsaXR5
IGluX2RpcmVjdGlvbmFsaXR5KQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VS
VCghKFNUQVRFICYgRGlyZWN0aW9uYWxpdHlTZXQpLCBwcm9wZXJ0eV9kaXJlY3Rpb25hbGl0eV9h
bHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJkaXJlY3Rpb25h
bGl0eSJfcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFu
dFZhbHVlKHZhbHVlKSk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJkaXJlY3Rp
b25hbGl0eSJfcywgUHJvdG9jb2w6OlRlc3RIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShp
bl9kaXJlY3Rpb25hbGl0eSkpOwogICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxEaXJlY3Rp
b25hbGl0eVNldD4oKTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBOb3Rl
c1NldD4mIHNldE5vdGVzKGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8U1RB
VEUgfCBOb3Rlc1NldD4mIHNldE5vdGVzKGNvbnN0IFN0cmluZyYgaW5fbm90ZXMpCiAgICAgICAg
IHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBOb3Rlc1NldCksIHByb3Bl
cnR5X25vdGVzX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmco
Im5vdGVzIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJub3Rl
cyJfcywgaW5fbm90ZXMpOwogICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxOb3Rlc1NldD4o
KTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBUaW1lc3RhbXBTZXQ+JiBz
ZXRUaW1lc3RhbXAoZG91YmxlIHZhbHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVGltZXN0
YW1wU2V0PiYgc2V0VGltZXN0YW1wKGRvdWJsZSBpbl90aW1lc3RhbXApCiAgICAgICAgIHsKICAg
ICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBUaW1lc3RhbXBTZXQpLCBwcm9wZXJ0
eV90aW1lc3RhbXBfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldERvdWJs
ZSgidGltZXN0YW1wIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0RG91Ymxl
KCJ0aW1lc3RhbXAiX3MsIGluX3RpbWVzdGFtcCk7CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0
YXRlPFRpbWVzdGFtcFNldD4oKTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUg
fCBWYWx1ZXNTZXQ+JiBzZXRWYWx1ZXMoUmVmUHRyPEpTT046Ok9iamVjdD4gdmFsdWUpCisgICAg
ICAgIEJ1aWxkZXI8U1RBVEUgfCBWYWx1ZXNTZXQ+JiBzZXRWYWx1ZXMoUmVmPEpTT046Ok9iamVj
dD4mJiBpbl92YWx1ZXMpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEo
U1RBVEUgJiBWYWx1ZXNTZXQpLCBwcm9wZXJ0eV92YWx1ZXNfYWxyZWFkeV9zZXQpOwotICAgICAg
ICAgICAgbV9yZXN1bHQtPnNldE9iamVjdCgidmFsdWVzIl9zLCB2YWx1ZSk7CisgICAgICAgICAg
ICBtX3Jlc3VsdC0+c2V0T2JqZWN0KCJ2YWx1ZXMiX3MsIFdURk1vdmUoaW5fdmFsdWVzKSk7CiAg
ICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFZhbHVlc1NldD4oKTsKICAgICAgICAgfQogCi0g
ICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBQYXlsb2FkU2V0PiYgc2V0UGF5bG9hZChSZWZQdHI8SlNP
Tjo6VmFsdWU+IHZhbHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRFIHwgUGF5bG9hZFNldD4mIHNl
dFBheWxvYWQoUmVmPEpTT046OlZhbHVlPiYmIGluX3BheWxvYWQpCiAgICAgICAgIHsKICAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBQYXlsb2FkU2V0KSwgcHJvcGVydHlfcGF5
bG9hZF9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0VmFsdWUoInBheWxv
YWQiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRWYWx1ZSgicGF5bG9hZCJf
cywgV1RGTW92ZShpbl9wYXlsb2FkKSk7CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFBh
eWxvYWRTZXQ+KCk7CiAgICAgICAgIH0KIAotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgRXJyb3JT
ZXQ+JiBzZXRFcnJvcihSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9y
PiB2YWx1ZSkKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IEVycm9yU2V0PiYgc2V0RXJyb3IoUmVm
PFByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+JiYgaW5fZXJyb3IpCiAgICAgICAgIHsKICAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBFcnJvclNldCksIHByb3BlcnR5X2Vycm9y
X2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRPYmplY3QoImVycm9yIl9z
LCB2YWx1ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0KCJlcnJvciJfcywgV1RG
TW92ZShpbl9lcnJvcikpOwogICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxFcnJvclNldD4o
KTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBFcnJvckxpc3RTZXQ+JiBz
ZXRFcnJvckxpc3QoUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvckxp
c3Q+IHZhbHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRFIHwgRXJyb3JMaXN0U2V0PiYgc2V0RXJy
b3JMaXN0KFJlZjxQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yTGlzdD4mJiBpbl9lcnJvckxpc3Qp
CiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBFcnJvckxp
c3RTZXQpLCBwcm9wZXJ0eV9lcnJvckxpc3RfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9y
ZXN1bHQtPnNldEFycmF5KCJlcnJvckxpc3QiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIG1fcmVz
dWx0LT5zZXRBcnJheSgiZXJyb3JMaXN0Il9zLCBXVEZNb3ZlKGluX2Vycm9yTGlzdCkpOwogICAg
ICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxFcnJvckxpc3RTZXQ+KCk7CiAgICAgICAgIH0KIApA
QCAtNjU1LDcgKzY2MCw3IEBAIHB1YmxpYzoKIH07CiAKIC8qIENvbmZsaWN0ZWQgbmFtZXMgbWF5
IGNhdXNlIGdlbmVyYXRlZCBnZXR0ZXJzL3NldHRlcnMgdG8gY2xhc2ggd2l0aCBidWlsdC1pbiBJ
bnNwZWN0b3JPYmplY3QgbWV0aG9kcy4gKi8KLWNsYXNzIE9iamVjdFdpdGhQcm9wZXJ0eU5hbWVD
b25mbGljdHMgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7CitjbGFzcyBPYmplY3RXaXRoUHJv
cGVydHlOYW1lQ29uZmxpY3RzIGZpbmFsIDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgewogcHVi
bGljOgogICAgIGVudW0gewogICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCkBAIC02ODUsMzggKzY5
MCwzOCBAQCBwdWJsaWM6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBPYmplY3RXaXRoUHJvcGVydHlO
YW1lQ29uZmxpY3RzOwogICAgIHB1YmxpYzoKIAotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgSW50
ZWdlclNldD4mIHNldEludGVnZXIoY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICAgICAgQnVpbGRl
cjxTVEFURSB8IEludGVnZXJTZXQ+JiBzZXRJbnRlZ2VyKGNvbnN0IFN0cmluZyYgaW5faW50ZWdl
cikKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEludGVn
ZXJTZXQpLCBwcm9wZXJ0eV9pbnRlZ2VyX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVz
dWx0LT5zZXRTdHJpbmcoImludGVnZXIiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIG1fcmVzdWx0
LT5zZXRTdHJpbmcoImludGVnZXIiX3MsIGluX2ludGVnZXIpOwogICAgICAgICAgICAgcmV0dXJu
IGNhc3RTdGF0ZTxJbnRlZ2VyU2V0PigpOwogICAgICAgICB9CiAKLSAgICAgICAgQnVpbGRlcjxT
VEFURSB8IEFycmF5U2V0PiYgc2V0QXJyYXkoY29uc3QgU3RyaW5nJiB2YWx1ZSkKKyAgICAgICAg
QnVpbGRlcjxTVEFURSB8IEFycmF5U2V0PiYgc2V0QXJyYXkoY29uc3QgU3RyaW5nJiBpbl9hcnJh
eSkKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEFycmF5
U2V0KSwgcHJvcGVydHlfYXJyYXlfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQt
PnNldFN0cmluZygiYXJyYXkiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRT
dHJpbmcoImFycmF5Il9zLCBpbl9hcnJheSk7CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRl
PEFycmF5U2V0PigpOwogICAgICAgICB9CiAKLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IFN0cmlu
Z1NldD4mIHNldFN0cmluZyhjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgICAgICBCdWlsZGVyPFNU
QVRFIHwgU3RyaW5nU2V0PiYgc2V0U3RyaW5nKGNvbnN0IFN0cmluZyYgaW5fc3RyaW5nKQogICAg
ICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgU3RyaW5nU2V0KSwg
cHJvcGVydHlfc3RyaW5nX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRT
dHJpbmcoInN0cmluZyJfcywgdmFsdWUpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmlu
Zygic3RyaW5nIl9zLCBpbl9zdHJpbmcpOwogICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxT
dHJpbmdTZXQ+KCk7CiAgICAgICAgIH0KIAotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVmFsdWVT
ZXQ+JiBzZXRWYWx1ZShjb25zdCBTdHJpbmcmIHZhbHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRF
IHwgVmFsdWVTZXQ+JiBzZXRWYWx1ZShjb25zdCBTdHJpbmcmIGluX3ZhbHVlKQogICAgICAgICB7
CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgVmFsdWVTZXQpLCBwcm9wZXJ0
eV92YWx1ZV9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJ2
YWx1ZSJfcywgdmFsdWUpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygidmFsdWUi
X3MsIGluX3ZhbHVlKTsKICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VmFsdWVTZXQ+KCk7
CiAgICAgICAgIH0KIAotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgT2JqZWN0U2V0PiYgc2V0T2Jq
ZWN0KGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBPYmplY3RT
ZXQ+JiBzZXRPYmplY3QoY29uc3QgU3RyaW5nJiBpbl9vYmplY3QpCiAgICAgICAgIHsKICAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBPYmplY3RTZXQpLCBwcm9wZXJ0eV9vYmpl
Y3RfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygib2JqZWN0
Il9zLCB2YWx1ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJvYmplY3QiX3Ms
IGluX29iamVjdCk7CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPE9iamVjdFNldD4oKTsK
ICAgICAgICAgfQogCkBAIC03NDcsMTcgKzc1Miw2NiBAQCBwdWJsaWM6CiAgICAgfQogfTsKIAor
LyogQW4gb3BlbiBvYmplY3QgdGhhdCBkb2Vzbid0IGhhdmUgYW55IHByZWRlZmluZWQgZmllbGRz
LiAqLworY2xhc3MgRHVtbXlPYmplY3QgZmluYWwgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7
CitwdWJsaWM6CisgICAgZW51bSB7CisgICAgICAgIE5vRmllbGRzU2V0ID0gMCwKKyAgICAgICAg
QWxsRmllbGRzU2V0ID0gMAorICAgIH07CisKKyAgICB0ZW1wbGF0ZTxpbnQgU1RBVEU+CisgICAg
Y2xhc3MgQnVpbGRlciB7CisgICAgcHJpdmF0ZToKKyAgICAgICAgUmVmUHRyPEpTT046Ok9iamVj
dD4gbV9yZXN1bHQ7CisKKyAgICAgICAgdGVtcGxhdGU8aW50IFNURVA+IEJ1aWxkZXI8U1RBVEUg
fCBTVEVQPiYgY2FzdFN0YXRlKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICpyZWlu
dGVycHJldF9jYXN0PEJ1aWxkZXI8U1RBVEUgfCBTVEVQPio+KHRoaXMpOworICAgICAgICB9CisK
KyAgICAgICAgQnVpbGRlcihSZWY8LypEdW1teU9iamVjdCovSlNPTjo6T2JqZWN0PiYmIG9iamVj
dCkKKyAgICAgICAgICAgIDogbV9yZXN1bHQoV1RGTW92ZShvYmplY3QpKQorICAgICAgICB7Cisg
ICAgICAgICAgICBDT01QSUxFX0FTU0VSVChTVEFURSA9PSBOb0ZpZWxkc1NldCwgYnVpbGRlcl9j
cmVhdGVkX2luX25vbl9pbml0X3N0YXRlKTsKKyAgICAgICAgfQorICAgICAgICBmcmllbmQgY2xh
c3MgRHVtbXlPYmplY3Q7CisgICAgcHVibGljOgorCisgICAgICAgIFJlZjxEdW1teU9iamVjdD4g
cmVsZWFzZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKFNUQVRFID09
IEFsbEZpZWxkc1NldCwgcmVzdWx0X2lzX25vdF9yZWFkeSk7CisgICAgICAgICAgICBDT01QSUxF
X0FTU0VSVChzaXplb2YoRHVtbXlPYmplY3QpID09IHNpemVvZihKU09OOjpPYmplY3QpLCBjYW5u
b3RfY2FzdCk7CisKKyAgICAgICAgICAgIFJlZjxKU09OOjpPYmplY3Q+IGpzb25SZXN1bHQgPSBt
X3Jlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOworICAgICAgICAgICAgYXV0byByZXN1bHQgPSBXVEZN
b3ZlKCpyZWludGVycHJldF9jYXN0PFJlZjxEdW1teU9iamVjdD4qPigmanNvblJlc3VsdCkpOwor
ICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgIH07CisKKyAgICAvKgor
ICAgICAqIFN5bnRoZXRpYyBjb25zdHJ1Y3RvcjoKKyAgICAgKiBSZWY8RHVtbXlPYmplY3Q+IHJl
c3VsdCA9IER1bW15T2JqZWN0OjpjcmVhdGUoKQorICAgICAqICAgICAucmVsZWFzZSgpOworICAg
ICAqLworICAgIHN0YXRpYyBCdWlsZGVyPE5vRmllbGRzU2V0PiBjcmVhdGUoKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIEJ1aWxkZXI8Tm9GaWVsZHNTZXQ+KEpTT046Ok9iamVjdDo6Y3JlYXRlKCkp
OworICAgIH0KK307CisKIH0gLy8gRGF0YWJhc2UKIAogbmFtZXNwYWNlIFRlc3QgewogCi1jbGFz
cyBQYXJhbWV0ZXJCdW5kbGUgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7CitjbGFzcyBQYXJh
bWV0ZXJCdW5kbGUgZmluYWwgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7CiBwdWJsaWM6CiAg
ICAgLy8gTmFtZWQgYWZ0ZXIgcHJvcGVydHkgbmFtZSAnZGlyZWN0aW9uYWxpdHknIHdoaWxlIGdl
bmVyYXRpbmcgUGFyYW1ldGVyQnVuZGxlLgogICAgIGVudW0gY2xhc3MgRGlyZWN0aW9uYWxpdHkg
ewogICAgICAgICBMVFIgPSA0LAogICAgICAgICBSVEwgPSA1LAogICAgIH07IC8vIGVudW0gY2xh
c3MgRGlyZWN0aW9uYWxpdHkKKwogICAgIGVudW0gewogICAgICAgICBOb0ZpZWxkc1NldCA9IDAs
CiAgICAgICAgIERpcmVjdGlvbmFsaXR5U2V0ID0gMSA8PCAwLApAQCAtNzg5LDU5ICs4NDMsNTkg
QEAgcHVibGljOgogICAgICAgICBmcmllbmQgY2xhc3MgUGFyYW1ldGVyQnVuZGxlOwogICAgIHB1
YmxpYzoKIAotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgRGlyZWN0aW9uYWxpdHlTZXQ+JiBzZXRE
aXJlY3Rpb25hbGl0eShEaXJlY3Rpb25hbGl0eSB2YWx1ZSkKKyAgICAgICAgQnVpbGRlcjxTVEFU
RSB8IERpcmVjdGlvbmFsaXR5U2V0PiYgc2V0RGlyZWN0aW9uYWxpdHkoRGlyZWN0aW9uYWxpdHkg
aW5fZGlyZWN0aW9uYWxpdHkpCiAgICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJU
KCEoU1RBVEUgJiBEaXJlY3Rpb25hbGl0eVNldCksIHByb3BlcnR5X2RpcmVjdGlvbmFsaXR5X2Fs
cmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoImRpcmVjdGlvbmFs
aXR5Il9zLCBJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50
VmFsdWUodmFsdWUpKTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoImRpcmVjdGlv
bmFsaXR5Il9zLCBQcm90b2NvbDo6VGVzdEhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKGlu
X2RpcmVjdGlvbmFsaXR5KSk7CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPERpcmVjdGlv
bmFsaXR5U2V0PigpOwogICAgICAgICB9CiAKLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IEJ1dHRv
bnNTZXQ+JiBzZXRCdXR0b25zKFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbj4+IHZhbHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRF
IHwgQnV0dG9uc1NldD4mIHNldEJ1dHRvbnMoUmVmPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkRh
dGFiYXNlOjpNb3VzZUJ1dHRvbj4+JiYgaW5fYnV0dG9ucykKICAgICAgICAgewogICAgICAgICAg
ICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIEJ1dHRvbnNTZXQpLCBwcm9wZXJ0eV9idXR0b25z
X2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRBcnJheSgiYnV0dG9ucyJf
cywgdmFsdWUpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldEFycmF5KCJidXR0b25zIl9zLCBX
VEZNb3ZlKGluX2J1dHRvbnMpKTsKICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8QnV0dG9u
c1NldD4oKTsKICAgICAgICAgfQogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBDb2x1bW5OYW1l
c1NldD4mIHNldENvbHVtbk5hbWVzKFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+IHZhbHVl
KQorICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQ29sdW1uTmFtZXNTZXQ+JiBzZXRDb2x1bW5OYW1l
cyhSZWY8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiYmIGluX2NvbHVtbk5hbWVzKQogICAgICAgICB7
CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgQ29sdW1uTmFtZXNTZXQpLCBw
cm9wZXJ0eV9jb2x1bW5OYW1lc19hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+
c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+
c2V0QXJyYXkoImNvbHVtbk5hbWVzIl9zLCBXVEZNb3ZlKGluX2NvbHVtbk5hbWVzKSk7CiAgICAg
ICAgICAgICByZXR1cm4gY2FzdFN0YXRlPENvbHVtbk5hbWVzU2V0PigpOwogICAgICAgICB9CiAK
LSAgICAgICAgQnVpbGRlcjxTVEFURSB8IE5vdGVzU2V0PiYgc2V0Tm90ZXMoY29uc3QgU3RyaW5n
JiB2YWx1ZSkKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IE5vdGVzU2V0PiYgc2V0Tm90ZXMoY29u
c3QgU3RyaW5nJiBpbl9ub3RlcykKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NF
UlQoIShTVEFURSAmIE5vdGVzU2V0KSwgcHJvcGVydHlfbm90ZXNfYWxyZWFkeV9zZXQpOwotICAg
ICAgICAgICAgbV9yZXN1bHQtPnNldFN0cmluZygibm90ZXMiX3MsIHZhbHVlKTsKKyAgICAgICAg
ICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoIm5vdGVzIl9zLCBpbl9ub3Rlcyk7CiAgICAgICAgICAg
ICByZXR1cm4gY2FzdFN0YXRlPE5vdGVzU2V0PigpOwogICAgICAgICB9CiAKLSAgICAgICAgQnVp
bGRlcjxTVEFURSB8IFRpbWVzdGFtcFNldD4mIHNldFRpbWVzdGFtcChkb3VibGUgdmFsdWUpCisg
ICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBUaW1lc3RhbXBTZXQ+JiBzZXRUaW1lc3RhbXAoZG91Ymxl
IGluX3RpbWVzdGFtcCkKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShT
VEFURSAmIFRpbWVzdGFtcFNldCksIHByb3BlcnR5X3RpbWVzdGFtcF9hbHJlYWR5X3NldCk7Ci0g
ICAgICAgICAgICBtX3Jlc3VsdC0+c2V0RG91YmxlKCJ0aW1lc3RhbXAiX3MsIHZhbHVlKTsKKyAg
ICAgICAgICAgIG1fcmVzdWx0LT5zZXREb3VibGUoInRpbWVzdGFtcCJfcywgaW5fdGltZXN0YW1w
KTsKICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8VGltZXN0YW1wU2V0PigpOwogICAgICAg
ICB9CiAKLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IFZhbHVlc1NldD4mIHNldFZhbHVlcyhSZWZQ
dHI8SlNPTjo6T2JqZWN0PiB2YWx1ZSkKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IFZhbHVlc1Nl
dD4mIHNldFZhbHVlcyhSZWY8SlNPTjo6T2JqZWN0PiYmIGluX3ZhbHVlcykKICAgICAgICAgewog
ICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIFZhbHVlc1NldCksIHByb3BlcnR5
X3ZhbHVlc19hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0T2JqZWN0KCJ2
YWx1ZXMiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRPYmplY3QoInZhbHVl
cyJfcywgV1RGTW92ZShpbl92YWx1ZXMpKTsKICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8
VmFsdWVzU2V0PigpOwogICAgICAgICB9CiAKLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IFBheWxv
YWRTZXQ+JiBzZXRQYXlsb2FkKFJlZlB0cjxKU09OOjpWYWx1ZT4gdmFsdWUpCisgICAgICAgIEJ1
aWxkZXI8U1RBVEUgfCBQYXlsb2FkU2V0PiYgc2V0UGF5bG9hZChSZWY8SlNPTjo6VmFsdWU+JiYg
aW5fcGF5bG9hZCkKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFU
RSAmIFBheWxvYWRTZXQpLCBwcm9wZXJ0eV9wYXlsb2FkX2FscmVhZHlfc2V0KTsKLSAgICAgICAg
ICAgIG1fcmVzdWx0LT5zZXRWYWx1ZSgicGF5bG9hZCJfcywgdmFsdWUpOworICAgICAgICAgICAg
bV9yZXN1bHQtPnNldFZhbHVlKCJwYXlsb2FkIl9zLCBXVEZNb3ZlKGluX3BheWxvYWQpKTsKICAg
ICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8UGF5bG9hZFNldD4oKTsKICAgICAgICAgfQogCi0g
ICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBFcnJvclNldD4mIHNldEVycm9yKFJlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6RXJyb3I+IHZhbHVlKQorICAgICAgICBCdWlsZGVyPFNU
QVRFIHwgRXJyb3JTZXQ+JiBzZXRFcnJvcihSZWY8UHJvdG9jb2w6OkRhdGFiYXNlOjpFcnJvcj4m
JiBpbl9lcnJvcikKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFU
RSAmIEVycm9yU2V0KSwgcHJvcGVydHlfZXJyb3JfYWxyZWFkeV9zZXQpOwotICAgICAgICAgICAg
bV9yZXN1bHQtPnNldE9iamVjdCgiZXJyb3IiX3MsIHZhbHVlKTsKKyAgICAgICAgICAgIG1fcmVz
dWx0LT5zZXRPYmplY3QoImVycm9yIl9zLCBXVEZNb3ZlKGluX2Vycm9yKSk7CiAgICAgICAgICAg
ICByZXR1cm4gY2FzdFN0YXRlPEVycm9yU2V0PigpOwogICAgICAgICB9CiAKQEAgLTg4NiwxNSAr
OTQwLDE1IEBAIE9wdGlvbmFsPFByb3RvY29sRW51bVR5cGU+IHBhcnNlRW51bVZhbHVlRnJvbVN0
cmluZyhjb25zdCBTdHJpbmcmKTsKIAogLy8gRW51bXMgaW4gdGhlICdEYXRhYmFzZScgRG9tYWlu
CiB0ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6TW91
c2VCdXR0b24+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpE
YXRhYmFzZTo6TW91c2VCdXR0b24+KGNvbnN0IFN0cmluZyYpOworT3B0aW9uYWw8UHJvdG9jb2w6
OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbj4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPFByb3RvY29s
OjpEYXRhYmFzZTo6TW91c2VCdXR0b24+KGNvbnN0IFN0cmluZyYpOwogdGVtcGxhdGU8PgotT3B0
aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6Ok9wdGlvbmFsUGFyYW1ldGVyQnVu
ZGxlOjpEaXJlY3Rpb25hbGl0eT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRhdGFiYXNlOjpPcHRpb25hbFBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxp
dHk+KGNvbnN0IFN0cmluZyYpOworT3B0aW9uYWw8UHJvdG9jb2w6OkRhdGFiYXNlOjpPcHRpb25h
bFBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmlu
ZzxQcm90b2NvbDo6RGF0YWJhc2U6Ok9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25h
bGl0eT4oY29uc3QgU3RyaW5nJik7CiB0ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJbnNwZWN0b3I6OlBy
b3RvY29sOjpEYXRhYmFzZTo6UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eT4gcGFyc2VF
bnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQYXJhbWV0
ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5Pihjb25zdCBTdHJpbmcmKTsKK09wdGlvbmFsPFByb3Rv
Y29sOjpEYXRhYmFzZTo6UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eT4gcGFyc2VFbnVt
VmFsdWVGcm9tU3RyaW5nPFByb3RvY29sOjpEYXRhYmFzZTo6UGFyYW1ldGVyQnVuZGxlOjpEaXJl
Y3Rpb25hbGl0eT4oY29uc3QgU3RyaW5nJik7CiAKIC8vIEVudW1zIGluIHRoZSAnVGVzdCcgRG9t
YWluCiB0ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpQYXJh
bWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5PiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5z
cGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eT4o
Y29uc3QgU3RyaW5nJik7CitPcHRpb25hbDxQcm90b2NvbDo6VGVzdDo6UGFyYW1ldGVyQnVuZGxl
OjpEaXJlY3Rpb25hbGl0eT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPFByb3RvY29sOjpUZXN0
OjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5Pihjb25zdCBTdHJpbmcmKTsKIAogfSAv
LyBuYW1lc3BhY2UgVGVzdEhlbHBlcnMKIApAQCAtOTQ2LDggKzEwMDAsNyBAQCBzdHJ1Y3QgRGVm
YXVsdEhhc2g8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9uPiA6IElu
dEhhc2g8SW5zcGVjdAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlRlc3RQcm90b2Nv
bE9iamVjdHMuaCIKIAotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi90
ZXh0L0NTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogCiBuYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKIApAQCAtOTcxLDQ1ICsxMDI0LDQ1IEBAIFN0cmluZyBnZXRFbnVtQ29uc3Rh
bnRWYWx1ZShpbnQgY29kZSkgewogLy8gRW51bXMgaW4gdGhlICdEYXRhYmFzZScgRG9tYWluCiAK
IHRlbXBsYXRlPD4KLU9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpNb3Vz
ZUJ1dHRvbj4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRh
dGFiYXNlOjpNb3VzZUJ1dHRvbj4oY29uc3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKK09wdGlv
bmFsPFByb3RvY29sOjpEYXRhYmFzZTo6TW91c2VCdXR0b24+IHBhcnNlRW51bVZhbHVlRnJvbVN0
cmluZzxQcm90b2NvbDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9uPihjb25zdCBTdHJpbmcmIHByb3Rv
Y29sU3RyaW5nKQogewogICAgIHN0YXRpYyBjb25zdCBzaXplX3QgY29uc3RhbnRWYWx1ZXNbXSA9
IHsKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6TW91c2VC
dXR0b246Ok5vbmUsCi0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJh
c2U6Ok1vdXNlQnV0dG9uOjpMZWZ0LAotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbjo6TWlkZGxlLAotICAgICAgICAoc2l6ZV90KUluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbjo6UmlnaHQsCisgICAgICAgIChz
aXplX3QpUHJvdG9jb2w6OkRhdGFiYXNlOjpNb3VzZUJ1dHRvbjo6Tm9uZSwKKyAgICAgICAgKHNp
emVfdClQcm90b2NvbDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9uOjpMZWZ0LAorICAgICAgICAoc2l6
ZV90KVByb3RvY29sOjpEYXRhYmFzZTo6TW91c2VCdXR0b246Ok1pZGRsZSwKKyAgICAgICAgKHNp
emVfdClQcm90b2NvbDo6RGF0YWJhc2U6Ok1vdXNlQnV0dG9uOjpSaWdodCwKICAgICB9OwogICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgNDsgKytpKQogICAgICAgICBpZiAocHJvdG9jb2xTdHJp
bmcgPT0gZW51bV9jb25zdGFudF92YWx1ZXNbY29uc3RhbnRWYWx1ZXNbaV1dKQotICAgICAgICAg
ICAgcmV0dXJuIChJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6TW91c2VCdXR0b24pY29u
c3RhbnRWYWx1ZXNbaV07CisgICAgICAgICAgICByZXR1cm4gKFByb3RvY29sOjpEYXRhYmFzZTo6
TW91c2VCdXR0b24pY29uc3RhbnRWYWx1ZXNbaV07CiAKICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OwogfQogCiB0ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFz
ZTo6T3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5PiBwYXJzZUVudW1WYWx1
ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6Ok9wdGlvbmFsUGFyYW1l
dGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eT4oY29uc3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykK
K09wdGlvbmFsPFByb3RvY29sOjpEYXRhYmFzZTo6T3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU6OkRp
cmVjdGlvbmFsaXR5PiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8UHJvdG9jb2w6OkRhdGFiYXNl
OjpPcHRpb25hbFBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk+KGNvbnN0IFN0cmluZyYg
cHJvdG9jb2xTdHJpbmcpCiB7CiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBjb25zdGFudFZhbHVl
c1tdID0gewotICAgICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpP
cHRpb25hbFBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk6OkxUUiwKLSAgICAgICAgKHNp
emVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6T3B0aW9uYWxQYXJhbWV0ZXJCdW5k
bGU6OkRpcmVjdGlvbmFsaXR5OjpSVEwsCisgICAgICAgIChzaXplX3QpUHJvdG9jb2w6OkRhdGFi
YXNlOjpPcHRpb25hbFBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk6OkxUUiwKKyAgICAg
ICAgKHNpemVfdClQcm90b2NvbDo6RGF0YWJhc2U6Ok9wdGlvbmFsUGFyYW1ldGVyQnVuZGxlOjpE
aXJlY3Rpb25hbGl0eTo6UlRMLAogICAgIH07CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAy
OyArK2kpCiAgICAgICAgIGlmIChwcm90b2NvbFN0cmluZyA9PSBlbnVtX2NvbnN0YW50X3ZhbHVl
c1tjb25zdGFudFZhbHVlc1tpXV0pCi0gICAgICAgICAgICByZXR1cm4gKEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRhdGFiYXNlOjpPcHRpb25hbFBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHkp
Y29uc3RhbnRWYWx1ZXNbaV07CisgICAgICAgICAgICByZXR1cm4gKFByb3RvY29sOjpEYXRhYmFz
ZTo6T3B0aW9uYWxQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5KWNvbnN0YW50VmFsdWVz
W2ldOwogCiAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KIAogdGVtcGxhdGU8PgotT3B0aW9u
YWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0
aW9uYWxpdHk+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpE
YXRhYmFzZTo6UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eT4oY29uc3QgU3RyaW5nJiBw
cm90b2NvbFN0cmluZykKK09wdGlvbmFsPFByb3RvY29sOjpEYXRhYmFzZTo6UGFyYW1ldGVyQnVu
ZGxlOjpEaXJlY3Rpb25hbGl0eT4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPFByb3RvY29sOjpE
YXRhYmFzZTo6UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eT4oY29uc3QgU3RyaW5nJiBw
cm90b2NvbFN0cmluZykKIHsKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGNvbnN0YW50VmFsdWVz
W10gPSB7Ci0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OlBh
cmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk6OkxUUiwKLSAgICAgICAgKHNpemVfdClJbnNw
ZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0
eTo6UlRMLAorICAgICAgICAoc2l6ZV90KVByb3RvY29sOjpEYXRhYmFzZTo6UGFyYW1ldGVyQnVu
ZGxlOjpEaXJlY3Rpb25hbGl0eTo6TFRSLAorICAgICAgICAoc2l6ZV90KVByb3RvY29sOjpEYXRh
YmFzZTo6UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eTo6UlRMLAogICAgIH07CiAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCAyOyArK2kpCiAgICAgICAgIGlmIChwcm90b2NvbFN0cmlu
ZyA9PSBlbnVtX2NvbnN0YW50X3ZhbHVlc1tjb25zdGFudFZhbHVlc1tpXV0pCi0gICAgICAgICAg
ICByZXR1cm4gKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRhdGFiYXNlOjpQYXJhbWV0ZXJCdW5kbGU6
OkRpcmVjdGlvbmFsaXR5KWNvbnN0YW50VmFsdWVzW2ldOworICAgICAgICAgICAgcmV0dXJuIChQ
cm90b2NvbDo6RGF0YWJhc2U6OlBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHkpY29uc3Rh
bnRWYWx1ZXNbaV07CiAKICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQpAQCAtMTAxNywxNSAr
MTA3MCwxNSBAQCBPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpEYXRhYmFzZTo6UGFyYW1l
dGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eT4gcGFyc2VFbgogLy8gRW51bXMgaW4gdGhlICdUZXN0
JyBEb21haW4KIAogdGVtcGxhdGU8PgotT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVz
dDo6UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eT4gcGFyc2VFbnVtVmFsdWVGcm9tU3Ry
aW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9u
YWxpdHk+KGNvbnN0IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcpCitPcHRpb25hbDxQcm90b2NvbDo6
VGVzdDo6UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eT4gcGFyc2VFbnVtVmFsdWVGcm9t
U3RyaW5nPFByb3RvY29sOjpUZXN0OjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5Pihj
b25zdCBTdHJpbmcmIHByb3RvY29sU3RyaW5nKQogewogICAgIHN0YXRpYyBjb25zdCBzaXplX3Qg
Y29uc3RhbnRWYWx1ZXNbXSA9IHsKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29s
OjpUZXN0OjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVjdGlvbmFsaXR5OjpMVFIsCi0gICAgICAgIChz
aXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rp
b25hbGl0eTo6UlRMLAorICAgICAgICAoc2l6ZV90KVByb3RvY29sOjpUZXN0OjpQYXJhbWV0ZXJC
dW5kbGU6OkRpcmVjdGlvbmFsaXR5OjpMVFIsCisgICAgICAgIChzaXplX3QpUHJvdG9jb2w6OlRl
c3Q6OlBhcmFtZXRlckJ1bmRsZTo6RGlyZWN0aW9uYWxpdHk6OlJUTCwKICAgICB9OwogICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgMjsgKytpKQogICAgICAgICBpZiAocHJvdG9jb2xTdHJpbmcg
PT0gZW51bV9jb25zdGFudF92YWx1ZXNbY29uc3RhbnRWYWx1ZXNbaV1dKQotICAgICAgICAgICAg
cmV0dXJuIChJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpQYXJhbWV0ZXJCdW5kbGU6OkRpcmVj
dGlvbmFsaXR5KWNvbnN0YW50VmFsdWVzW2ldOworICAgICAgICAgICAgcmV0dXJuIChQcm90b2Nv
bDo6VGVzdDo6UGFyYW1ldGVyQnVuZGxlOjpEaXJlY3Rpb25hbGl0eSljb25zdGFudFZhbHVlc1tp
XTsKIAogICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW5zcGVjdG9yL3NjcmlwdHMvdGVzdHMvZXhwZWN0ZWQvdHlwZS1yZXF1aXJp
bmctcnVudGltZS1jYXN0cy5qc29uLXJlc3VsdCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNw
ZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3Rz
Lmpzb24tcmVzdWx0CmluZGV4IDI2Yjc1MGM2NmIyMDFiMGQ0ZWNiZjJmMzc0OGFiOWY0MDMwOWE5
ZWMuLjRkZTA0YWI0YjZkOTFkYzk3ZjAwNjM1OWE4ZDZjNzY4MGQ5MmYzN2MgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90
eXBlLXJlcXVpcmluZy1ydW50aW1lLWNhc3RzLmpzb24tcmVzdWx0CisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLXJlcXVpcmlu
Zy1ydW50aW1lLWNhc3RzLmpzb24tcmVzdWx0CkBAIC02OSw3ICs2OSw3IEBAIEluc3BlY3RvckJh
Y2tlbmQuYWN0aXZhdGVEb21haW4oIlRlc3QiLCBudWxsKTsKIAogI2lmIEVOQUJMRShJTlNQRUNU
T1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlwZXMu
aCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgogCkBAIC0xMjUsMTEgKzEyNSwxNCBAQCBw
cml2YXRlOgogCiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8dHVw
bGU+CisjaW5jbHVkZSA8d3RmL0V4cGVjdGVkLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+
CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3Ig
ewogCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKwogCiAKIApAQCAtMTcwLDkgKzE3Myw3
IEBAIHR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwogI2luY2x1ZGUgIlRlc3RCYWNrZW5kRGlz
cGF0Y2hlcnMuaCIKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5k
Um91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KICNpbmNsdWRlIDx3dGYvTmV2
ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKICNpZiBFTkFC
TEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKICNpbmNsdWRlICJUZXN0QWx0ZXJu
YXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCkBAIC0yMjAsNiArMjIxLDcgQEAgbmFtZXNwYWNlIElu
c3BlY3RvciB7CiAKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8
d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CkBAIC0yNjMsNyAr
MjY1LDYgQEAgY2xhc3MgRnJvbnRlbmRSb3V0ZXI7CiAjaW5jbHVkZSAiVGVzdEZyb250ZW5kRGlz
cGF0Y2hlcnMuaCIKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5k
Um91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5z
cGVjdG9yIHsKIApAQCAtMzA0LDcgKzMwNSw5IEBAIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogI3By
YWdtYSBvbmNlCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2NvbFR5
cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvSlNPTlZh
bHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtMzQ2LDcgKzM0OSw3IEBA
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFN0cmluZyBnZXRFbnVtQ29uc3RhbnRWYWx1ZShUIGVudW1W
YWx1ZSkKIG5hbWVzcGFjZSBUZXN0IHsKIAogLyogQSBkdW1teSB0eXBlIHRoYXQgcmVxdWlyZXMg
cnVudGltZSBjYXN0cywgYW5kIGZvcmNlcyBub24tcHJpbWl0aXZlIHJlZmVyZW5jZWQgdHlwZXMg
dG8gYWxzbyBlbWl0IHJ1bnRpbWUgY2FzdCBoZWxwZXJzLiAqLwotY2xhc3MgVHlwZU5lZWRpbmdD
YXN0IDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgeworY2xhc3MgVHlwZU5lZWRpbmdDYXN0IGZp
bmFsIDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgewogcHVibGljOgogICAgIGVudW0gewogICAg
ICAgICBOb0ZpZWxkc1NldCA9IDAsCkBAIC0zNzYsMzggKzM3OSwzOCBAQCBwdWJsaWM6CiAgICAg
ICAgIGZyaWVuZCBjbGFzcyBUeXBlTmVlZGluZ0Nhc3Q7CiAgICAgcHVibGljOgogCi0gICAgICAg
IEJ1aWxkZXI8U1RBVEUgfCBTdHJpbmdTZXQ+JiBzZXRTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1
ZSkKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IFN0cmluZ1NldD4mIHNldFN0cmluZyhjb25zdCBT
dHJpbmcmIGluX3N0cmluZykKICAgICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQo
IShTVEFURSAmIFN0cmluZ1NldCksIHByb3BlcnR5X3N0cmluZ19hbHJlYWR5X3NldCk7Ci0gICAg
ICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5nKCJzdHJpbmciX3MsIHZhbHVlKTsKKyAgICAgICAg
ICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoInN0cmluZyJfcywgaW5fc3RyaW5nKTsKICAgICAgICAg
ICAgIHJldHVybiBjYXN0U3RhdGU8U3RyaW5nU2V0PigpOwogICAgICAgICB9CiAKLSAgICAgICAg
QnVpbGRlcjxTVEFURSB8IE51bWJlclNldD4mIHNldE51bWJlcihpbnQgdmFsdWUpCisgICAgICAg
IEJ1aWxkZXI8U1RBVEUgfCBOdW1iZXJTZXQ+JiBzZXROdW1iZXIoaW50IGluX251bWJlcikKICAg
ICAgICAgewogICAgICAgICAgICAgQ09NUElMRV9BU1NFUlQoIShTVEFURSAmIE51bWJlclNldCks
IHByb3BlcnR5X251bWJlcl9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0
SW50ZWdlcigibnVtYmVyIl9zLCB2YWx1ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0SW50
ZWdlcigibnVtYmVyIl9zLCBpbl9udW1iZXIpOwogICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0
ZTxOdW1iZXJTZXQ+KCk7CiAgICAgICAgIH0KIAotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgQW5p
bWFsc1NldD4mIHNldEFuaW1hbHMoSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5p
bWFscyB2YWx1ZSkKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IEFuaW1hbHNTZXQ+JiBzZXRBbmlt
YWxzKFByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzIGluX2FuaW1hbHMpCiAgICAgICAgIHsK
ICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBBbmltYWxzU2V0KSwgcHJvcGVy
dHlfYW5pbWFsc19hbHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0U3RyaW5n
KCJhbmltYWxzIl9zLCBJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNv
bnN0YW50VmFsdWUodmFsdWUpKTsKKyAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRTdHJpbmcoImFu
aW1hbHMiX3MsIFByb3RvY29sOjpUZXN0SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUoaW5f
YW5pbWFscykpOwogICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxBbmltYWxzU2V0PigpOwog
ICAgICAgICB9CiAKLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IElkU2V0PiYgc2V0SWQoaW50IHZh
bHVlKQorICAgICAgICBCdWlsZGVyPFNUQVRFIHwgSWRTZXQ+JiBzZXRJZChpbnQgaW5faWQpCiAg
ICAgICAgIHsKICAgICAgICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBJZFNldCksIHBy
b3BlcnR5X2lkX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRJbnRlZ2Vy
KCJpZCJfcywgdmFsdWUpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldEludGVnZXIoImlkIl9z
LCBpbl9pZCk7CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPElkU2V0PigpOwogICAgICAg
ICB9CiAKLSAgICAgICAgQnVpbGRlcjxTVEFURSB8IFRyZWVTZXQ+JiBzZXRUcmVlKFJlZlB0cjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpSZWN1cnNpdmVPYmplY3QxPiB2YWx1ZSkKKyAgICAg
ICAgQnVpbGRlcjxTVEFURSB8IFRyZWVTZXQ+JiBzZXRUcmVlKFJlZjxQcm90b2NvbDo6VGVzdDo6
UmVjdXJzaXZlT2JqZWN0MT4mJiBpbl90cmVlKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01Q
SUxFX0FTU0VSVCghKFNUQVRFICYgVHJlZVNldCksIHByb3BlcnR5X3RyZWVfYWxyZWFkeV9zZXQp
OwotICAgICAgICAgICAgbV9yZXN1bHQtPnNldE9iamVjdCgidHJlZSJfcywgdmFsdWUpOworICAg
ICAgICAgICAgbV9yZXN1bHQtPnNldE9iamVjdCgidHJlZSJfcywgV1RGTW92ZShpbl90cmVlKSk7
CiAgICAgICAgICAgICByZXR1cm4gY2FzdFN0YXRlPFRyZWVTZXQ+KCk7CiAgICAgICAgIH0KIApA
QCAtNDUyLDcgKzQ1NSw3IEBAIGVudW0gY2xhc3MgQ2FzdGVkQW5pbWFscyB7CiAgICAgRmxhbWlu
Z29zID0gMywKIH07IC8vIGVudW0gY2xhc3MgQ2FzdGVkQW5pbWFscwogCi1jbGFzcyBSZWN1cnNp
dmVPYmplY3QxIDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgeworY2xhc3MgUmVjdXJzaXZlT2Jq
ZWN0MSBmaW5hbCA6IHB1YmxpYyBKU09OOjpPYmplY3RCYXNlIHsKIHB1YmxpYzoKICAgICBlbnVt
IHsKICAgICAgICAgTm9GaWVsZHNTZXQgPSAwLApAQCAtNDk4LDEzICs1MDEsMTMgQEAgcHVibGlj
OgogICAgICAgICByZXR1cm4gQnVpbGRlcjxOb0ZpZWxkc1NldD4oSlNPTjo6T2JqZWN0OjpjcmVh
dGUoKSk7CiAgICAgfQogCi0gICAgdm9pZCBzZXRPYmooUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDI+IHZhbHVlKQorICAgIHZvaWQgc2V0T2JqKFJlZjxQ
cm90b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0Mj4mJiBpbl9vcHRfb2JqKQogICAgIHsKLSAg
ICAgICAgSlNPTjo6T2JqZWN0QmFzZTo6c2V0T2JqZWN0KCJvYmoiX3MsIFdURk1vdmUodmFsdWUp
KTsKKyAgICAgICAgSlNPTjo6T2JqZWN0QmFzZTo6c2V0T2JqZWN0KCJvYmoiX3MsIFdURk1vdmUo
aW5fb3B0X29iaikpOwogICAgIH0KIH07CiAKLWNsYXNzIFJlY3Vyc2l2ZU9iamVjdDIgOiBwdWJs
aWMgSlNPTjo6T2JqZWN0QmFzZSB7CitjbGFzcyBSZWN1cnNpdmVPYmplY3QyIGZpbmFsIDogcHVi
bGljIEpTT046Ok9iamVjdEJhc2UgewogcHVibGljOgogICAgIGVudW0gewogICAgICAgICBOb0Zp
ZWxkc1NldCA9IDAsCkBAIC01NTAsMjUgKzU1MywyNSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVy
biBCdWlsZGVyPE5vRmllbGRzU2V0PihKU09OOjpPYmplY3Q6OmNyZWF0ZSgpKTsKICAgICB9CiAK
LSAgICB2b2lkIHNldE9iaihSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UmVjdXJz
aXZlT2JqZWN0MT4gdmFsdWUpCisgICAgdm9pZCBzZXRPYmooUmVmPFByb3RvY29sOjpUZXN0OjpS
ZWN1cnNpdmVPYmplY3QxPiYmIGluX29wdF9vYmopCiAgICAgewotICAgICAgICBKU09OOjpPYmpl
Y3RCYXNlOjpzZXRPYmplY3QoIm9iaiJfcywgV1RGTW92ZSh2YWx1ZSkpOworICAgICAgICBKU09O
OjpPYmplY3RCYXNlOjpzZXRPYmplY3QoIm9iaiJfcywgV1RGTW92ZShpbl9vcHRfb2JqKSk7CiAg
ICAgfQogfTsKIAogfSAvLyBUZXN0CiAKLXRlbXBsYXRlPD4gc3RydWN0IEJpbmRpbmdUcmFpdHM8
SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFscz4gewordGVtcGxhdGU8PiBz
dHJ1Y3QgQmluZGluZ1RyYWl0czxQcm90b2NvbDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0PiB7Citz
dGF0aWMgUmVmPFByb3RvY29sOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3Q+IHJ1bnRpbWVDYXN0KFJl
ZjxKU09OOjpWYWx1ZT4mJiB2YWx1ZSk7CiBzdGF0aWMgdm9pZCBhc3NlcnRWYWx1ZUhhc0V4cGVj
dGVkVHlwZShKU09OOjpWYWx1ZSopOwogfTsKLXRlbXBsYXRlPD4gc3RydWN0IEJpbmRpbmdUcmFp
dHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0PiB7Ci1zdGF0aWMg
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdD4gcnVudGlt
ZUNhc3QoUmVmUHRyPEpTT046OlZhbHVlPiYmIHZhbHVlKTsKK3RlbXBsYXRlPD4gc3RydWN0IEJp
bmRpbmdUcmFpdHM8UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM+IHsKIHN0YXRpYyB2b2lk
IGFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKEpTT046OlZhbHVlKik7CiB9OwotdGVtcGxhdGU8
PiBzdHJ1Y3QgQmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpSZWN1cnNp
dmVPYmplY3QxPiB7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBCaW5kaW5nVHJhaXRzPFByb3RvY29sOjpU
ZXN0OjpSZWN1cnNpdmVPYmplY3QxPiB7CiBzdGF0aWMgdm9pZCBhc3NlcnRWYWx1ZUhhc0V4cGVj
dGVkVHlwZShKU09OOjpWYWx1ZSopOwogfTsKLXRlbXBsYXRlPD4gc3RydWN0IEJpbmRpbmdUcmFp
dHM8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0Mj4gewordGVtcGxh
dGU8PiBzdHJ1Y3QgQmluZGluZ1RyYWl0czxQcm90b2NvbDo6VGVzdDo6UmVjdXJzaXZlT2JqZWN0
Mj4gewogc3RhdGljIHZvaWQgYXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoSlNPTjo6VmFsdWUq
KTsKIH07CiAKQEAgLTU3OSw5ICs1ODIsOSBAQCBPcHRpb25hbDxQcm90b2NvbEVudW1UeXBlPiBw
YXJzZUVudW1WYWx1ZUZyb21TdHJpbmcoY29uc3QgU3RyaW5nJik7CiAKIC8vIEVudW1zIGluIHRo
ZSAnVGVzdCcgRG9tYWluCiB0ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29s
OjpUZXN0OjpVbmNhc3RlZEFuaW1hbHM+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0
b3I6OlByb3RvY29sOjpUZXN0OjpVbmNhc3RlZEFuaW1hbHM+KGNvbnN0IFN0cmluZyYpOworT3B0
aW9uYWw8UHJvdG9jb2w6OlRlc3Q6OlVuY2FzdGVkQW5pbWFscz4gcGFyc2VFbnVtVmFsdWVGcm9t
U3RyaW5nPFByb3RvY29sOjpUZXN0OjpVbmNhc3RlZEFuaW1hbHM+KGNvbnN0IFN0cmluZyYpOwog
dGVtcGxhdGU8PgotT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5p
bWFscz4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6
OkNhc3RlZEFuaW1hbHM+KGNvbnN0IFN0cmluZyYpOworT3B0aW9uYWw8UHJvdG9jb2w6OlRlc3Q6
OkNhc3RlZEFuaW1hbHM+IHBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxQcm90b2NvbDo6VGVzdDo6
Q2FzdGVkQW5pbWFscz4oY29uc3QgU3RyaW5nJik7CiAKIH0gLy8gbmFtZXNwYWNlIFRlc3RIZWxw
ZXJzCiAKQEAgLTYzNSw4ICs2MzgsNyBAQCBzdHJ1Y3QgRGVmYXVsdEhhc2g8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFscz4gOiBJbnRIYXNoPEluc3BlY3RvcgogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKIAotI2luY2x1
ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNpbmNs
dWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtNjYx
LDMzICs2NjMsMzMgQEAgU3RyaW5nIGdldEVudW1Db25zdGFudFZhbHVlKGludCBjb2RlKSB7CiAv
LyBFbnVtcyBpbiB0aGUgJ1Rlc3QnIERvbWFpbgogCiB0ZW1wbGF0ZTw+Ci1PcHRpb25hbDxJbnNw
ZWN0b3I6OlByb3RvY29sOjpUZXN0OjpVbmNhc3RlZEFuaW1hbHM+IHBhcnNlRW51bVZhbHVlRnJv
bVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpVbmNhc3RlZEFuaW1hbHM+KGNvbnN0
IFN0cmluZyYgcHJvdG9jb2xTdHJpbmcpCitPcHRpb25hbDxQcm90b2NvbDo6VGVzdDo6VW5jYXN0
ZWRBbmltYWxzPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8UHJvdG9jb2w6OlRlc3Q6OlVuY2Fz
dGVkQW5pbWFscz4oY29uc3QgU3RyaW5nJiBwcm90b2NvbFN0cmluZykKIHsKICAgICBzdGF0aWMg
Y29uc3Qgc2l6ZV90IGNvbnN0YW50VmFsdWVzW10gPSB7Ci0gICAgICAgIChzaXplX3QpSW5zcGVj
dG9yOjpQcm90b2NvbDo6VGVzdDo6VW5jYXN0ZWRBbmltYWxzOjpQaWdzLAotICAgICAgICAoc2l6
ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlVuY2FzdGVkQW5pbWFsczo6Q293cywKLSAg
ICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpVbmNhc3RlZEFuaW1hbHM6
OkNhdHMsCi0gICAgICAgIChzaXplX3QpSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6VW5jYXN0
ZWRBbmltYWxzOjpIZW5zLAorICAgICAgICAoc2l6ZV90KVByb3RvY29sOjpUZXN0OjpVbmNhc3Rl
ZEFuaW1hbHM6OlBpZ3MsCisgICAgICAgIChzaXplX3QpUHJvdG9jb2w6OlRlc3Q6OlVuY2FzdGVk
QW5pbWFsczo6Q293cywKKyAgICAgICAgKHNpemVfdClQcm90b2NvbDo6VGVzdDo6VW5jYXN0ZWRB
bmltYWxzOjpDYXRzLAorICAgICAgICAoc2l6ZV90KVByb3RvY29sOjpUZXN0OjpVbmNhc3RlZEFu
aW1hbHM6OkhlbnMsCiAgICAgfTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDQ7ICsraSkK
ICAgICAgICAgaWYgKHByb3RvY29sU3RyaW5nID09IGVudW1fY29uc3RhbnRfdmFsdWVzW2NvbnN0
YW50VmFsdWVzW2ldXSkKLSAgICAgICAgICAgIHJldHVybiAoSW5zcGVjdG9yOjpQcm90b2NvbDo6
VGVzdDo6VW5jYXN0ZWRBbmltYWxzKWNvbnN0YW50VmFsdWVzW2ldOworICAgICAgICAgICAgcmV0
dXJuIChQcm90b2NvbDo6VGVzdDo6VW5jYXN0ZWRBbmltYWxzKWNvbnN0YW50VmFsdWVzW2ldOwog
CiAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KIAogdGVtcGxhdGU8PgotT3B0aW9uYWw8SW5z
cGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFscz4gcGFyc2VFbnVtVmFsdWVGcm9t
U3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM+KGNvbnN0IFN0
cmluZyYgcHJvdG9jb2xTdHJpbmcpCitPcHRpb25hbDxQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5p
bWFscz4gcGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPFByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmlt
YWxzPihjb25zdCBTdHJpbmcmIHByb3RvY29sU3RyaW5nKQogewogICAgIHN0YXRpYyBjb25zdCBz
aXplX3QgY29uc3RhbnRWYWx1ZXNbXSA9IHsKLSAgICAgICAgKHNpemVfdClJbnNwZWN0b3I6OlBy
b3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzOjpEdWNrcywKLSAgICAgICAgKHNpemVfdClJbnNw
ZWN0b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzOjpIZW5zLAotICAgICAgICAoc2l6
ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM6OkNyb3dzLAotICAg
ICAgICAoc2l6ZV90KUluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM6OkZs
YW1pbmdvcywKKyAgICAgICAgKHNpemVfdClQcm90b2NvbDo6VGVzdDo6Q2FzdGVkQW5pbWFsczo6
RHVja3MsCisgICAgICAgIChzaXplX3QpUHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM6Okhl
bnMsCisgICAgICAgIChzaXplX3QpUHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM6OkNyb3dz
LAorICAgICAgICAoc2l6ZV90KVByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzOjpGbGFtaW5n
b3MsCiAgICAgfTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IDQ7ICsraSkKICAgICAgICAg
aWYgKHByb3RvY29sU3RyaW5nID09IGVudW1fY29uc3RhbnRfdmFsdWVzW2NvbnN0YW50VmFsdWVz
W2ldXSkKLSAgICAgICAgICAgIHJldHVybiAoSW5zcGVjdG9yOjpQcm90b2NvbDo6VGVzdDo6Q2Fz
dGVkQW5pbWFscyljb25zdGFudFZhbHVlc1tpXTsKKyAgICAgICAgICAgIHJldHVybiAoUHJvdG9j
b2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHMpY29uc3RhbnRWYWx1ZXNbaV07CiAKICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwogfQpAQCAtNjk2LDExNSArNjk4LDEwMSBAQCBPcHRpb25hbDxJbnNwZWN0
b3I6OlByb3RvY29sOjpUZXN0OjpDYXN0ZWRBbmltYWxzPiBwYXJzZUVudW1WYWx1ZUZyb21TdHJp
bmc8SW5zcAogCiAKIAotdm9pZCBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRl
c3Q6OkNhc3RlZEFuaW1hbHM+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShKU09OOjpWYWx1
ZSogdmFsdWUpCit2b2lkIEJpbmRpbmdUcmFpdHM8UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1h
bHM+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShKU09OOjpWYWx1ZSogdmFsdWUpCiB7Cisg
ICAgQVNTRVJUX1VOVVNFRCh2YWx1ZSwgdmFsdWUpOwogI2lmIEFTU0VSVF9FTkFCTEVECi0gICAg
QVNTRVJUX0FSRyh2YWx1ZSwgdmFsdWUpOwotICAgIFN0cmluZyByZXN1bHQ7Ci0gICAgYm9vbCBj
YXN0U3VjY2VlZGVkID0gdmFsdWUtPmFzU3RyaW5nKHJlc3VsdCk7Ci0gICAgQVNTRVJUKGNhc3RT
dWNjZWVkZWQpOworICAgIGF1dG8gcmVzdWx0ID0gdmFsdWUtPmFzU3RyaW5nKCk7CisgICAgQVNT
RVJUKHJlc3VsdCk7CiAgICAgQVNTRVJUKHJlc3VsdCA9PSAiRHVja3MiIHx8IHJlc3VsdCA9PSAi
SGVucyIgfHwgcmVzdWx0ID09ICJDcm93cyIgfHwgcmVzdWx0ID09ICJGbGFtaW5nb3MiKTsKLSNl
bHNlIC8vIEFTU0VSVF9FTkFCTEVECi0gICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKLSNlbmRpZiAv
LyBBU1NFUlRfRU5BQkxFRAorI2VuZGlmCiB9CiAKLXZvaWQgQmluZGluZ1RyYWl0czxJbnNwZWN0
b3I6OlByb3RvY29sOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3Q+Ojphc3NlcnRWYWx1ZUhhc0V4cGVj
dGVkVHlwZShKU09OOjpWYWx1ZSogdmFsdWUpCit2b2lkIEJpbmRpbmdUcmFpdHM8UHJvdG9jb2w6
OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdD46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKEpTT046
OlZhbHVlKiB2YWx1ZSkKIHsKKyAgICBBU1NFUlRfVU5VU0VEKHZhbHVlLCB2YWx1ZSk7CiAjaWYg
QVNTRVJUX0VOQUJMRUQKLSAgICBBU1NFUlRfQVJHKHZhbHVlLCB2YWx1ZSk7Ci0gICAgUmVmUHRy
PEpTT046Ok9iamVjdD4gb2JqZWN0OwotICAgIGJvb2wgY2FzdFN1Y2NlZWRlZCA9IHZhbHVlLT5h
c09iamVjdChvYmplY3QpOwotICAgIEFTU0VSVF9VTlVTRUQoY2FzdFN1Y2NlZWRlZCwgY2FzdFN1
Y2NlZWRlZCk7CisgICAgYXV0byBvYmplY3QgPSB2YWx1ZS0+YXNPYmplY3QoKTsKKyAgICBBU1NF
UlQob2JqZWN0KTsKICAgICB7CiAgICAgICAgIGF1dG8gc3RyaW5nUG9zID0gb2JqZWN0LT5maW5k
KCJzdHJpbmciX3MpOwogICAgICAgICBBU1NFUlQoc3RyaW5nUG9zICE9IG9iamVjdC0+ZW5kKCkp
OwotICAgICAgICBCaW5kaW5nVHJhaXRzPFN0cmluZz46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRU
eXBlKHN0cmluZ1Bvcy0+dmFsdWUuZ2V0KCkpOworICAgICAgICBCaW5kaW5nVHJhaXRzPFN0cmlu
Zz46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKHN0cmluZ1Bvcy0+dmFsdWUucHRyKCkpOwog
ICAgIH0KICAgICB7CiAgICAgICAgIGF1dG8gbnVtYmVyUG9zID0gb2JqZWN0LT5maW5kKCJudW1i
ZXIiX3MpOwogICAgICAgICBBU1NFUlQobnVtYmVyUG9zICE9IG9iamVjdC0+ZW5kKCkpOwotICAg
ICAgICBCaW5kaW5nVHJhaXRzPGludD46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKG51bWJl
clBvcy0+dmFsdWUuZ2V0KCkpOworICAgICAgICBCaW5kaW5nVHJhaXRzPGludD46OmFzc2VydFZh
bHVlSGFzRXhwZWN0ZWRUeXBlKG51bWJlclBvcy0+dmFsdWUucHRyKCkpOwogICAgIH0KICAgICB7
CiAgICAgICAgIGF1dG8gYW5pbWFsc1BvcyA9IG9iamVjdC0+ZmluZCgiYW5pbWFscyJfcyk7CiAg
ICAgICAgIEFTU0VSVChhbmltYWxzUG9zICE9IG9iamVjdC0+ZW5kKCkpOwotICAgICAgICBCaW5k
aW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM+Ojphc3Nl
cnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShhbmltYWxzUG9zLT52YWx1ZS5nZXQoKSk7CisgICAgICAg
IEJpbmRpbmdUcmFpdHM8UHJvdG9jb2w6OlRlc3Q6OkNhc3RlZEFuaW1hbHM+Ojphc3NlcnRWYWx1
ZUhhc0V4cGVjdGVkVHlwZShhbmltYWxzUG9zLT52YWx1ZS5wdHIoKSk7CiAgICAgfQogICAgIHsK
ICAgICAgICAgYXV0byBpZFBvcyA9IG9iamVjdC0+ZmluZCgiaWQiX3MpOwogICAgICAgICBBU1NF
UlQoaWRQb3MgIT0gb2JqZWN0LT5lbmQoKSk7Ci0gICAgICAgIEJpbmRpbmdUcmFpdHM8aW50Pjo6
YXNzZXJ0VmFsdWVIYXNFeHBlY3RlZFR5cGUoaWRQb3MtPnZhbHVlLmdldCgpKTsKKyAgICAgICAg
QmluZGluZ1RyYWl0czxpbnQ+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShpZFBvcy0+dmFs
dWUucHRyKCkpOwogICAgIH0KICAgICB7CiAgICAgICAgIGF1dG8gdHJlZVBvcyA9IG9iamVjdC0+
ZmluZCgidHJlZSJfcyk7CiAgICAgICAgIEFTU0VSVCh0cmVlUG9zICE9IG9iamVjdC0+ZW5kKCkp
OwotICAgICAgICBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlJlY3Vy
c2l2ZU9iamVjdDE+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZSh0cmVlUG9zLT52YWx1ZS5n
ZXQoKSk7CisgICAgICAgIEJpbmRpbmdUcmFpdHM8UHJvdG9jb2w6OlRlc3Q6OlJlY3Vyc2l2ZU9i
amVjdDE+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZSh0cmVlUG9zLT52YWx1ZS5wdHIoKSk7
CiAgICAgfQogCi0gICAgaW50IGZvdW5kUHJvcGVydGllc0NvdW50ID0gNTsKKyAgICBzaXplX3Qg
Zm91bmRQcm9wZXJ0aWVzQ291bnQgPSA1OwogICAgIGlmIChmb3VuZFByb3BlcnRpZXNDb3VudCAh
PSBvYmplY3QtPnNpemUoKSkKICAgICAgICAgRkFUQUwoIlVuZXhwZWN0ZWQgcHJvcGVydGllcyBp
biBvYmplY3Q6ICVzXG4iLCBvYmplY3QtPnRvSlNPTlN0cmluZygpLmFzY2lpKCkuZGF0YSgpKTsK
LSNlbHNlIC8vIEFTU0VSVF9FTkFCTEVECi0gICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKLSNlbmRp
ZiAvLyBBU1NFUlRfRU5BQkxFRAorI2VuZGlmCiB9CiAKLVJlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3Q+IEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90
b2NvbDo6VGVzdDo6VHlwZU5lZWRpbmdDYXN0Pjo6cnVudGltZUNhc3QoUmVmUHRyPEpTT046OlZh
bHVlPiYmIHZhbHVlKQorUmVmPFByb3RvY29sOjpUZXN0OjpUeXBlTmVlZGluZ0Nhc3Q+IEJpbmRp
bmdUcmFpdHM8UHJvdG9jb2w6OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdD46OnJ1bnRpbWVDYXN0KFJl
ZjxKU09OOjpWYWx1ZT4mJiB2YWx1ZSkKIHsKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiByZXN1
bHQ7Ci0gICAgYm9vbCBjYXN0U3VjY2VlZGVkID0gdmFsdWUtPmFzT2JqZWN0KHJlc3VsdCk7Ci0g
ICAgQVNTRVJUX1VOVVNFRChjYXN0U3VjY2VlZGVkLCBjYXN0U3VjY2VlZGVkKTsKLSAgICBCaW5k
aW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdD46OmFz
c2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKHJlc3VsdC5nZXQoKSk7Ci0gICAgQ09NUElMRV9BU1NF
UlQoc2l6ZW9mKEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdCkgPT0g
c2l6ZW9mKEpTT046Ok9iamVjdEJhc2UpLCB0eXBlX2Nhc3RfcHJvYmxlbSk7Ci0gICAgcmV0dXJu
IHN0YXRpY19jYXN0PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdCo+
KHN0YXRpY19jYXN0PEpTT046Ok9iamVjdEJhc2UqPihyZXN1bHQuZ2V0KCkpKTsKKyAgICBhdXRv
IHJlc3VsdCA9IHZhbHVlLT5hc09iamVjdCgpOworICAgIEJpbmRpbmdUcmFpdHM8UHJvdG9jb2w6
OlRlc3Q6OlR5cGVOZWVkaW5nQ2FzdD46OmFzc2VydFZhbHVlSGFzRXhwZWN0ZWRUeXBlKHJlc3Vs
dC5nZXQoKSk7CisgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9mKFByb3RvY29sOjpUZXN0OjpUeXBl
TmVlZGluZ0Nhc3QpID09IHNpemVvZihKU09OOjpPYmplY3RCYXNlKSwgdHlwZV9jYXN0X3Byb2Js
ZW0pOworICAgIHJldHVybiBzdGF0aWNfcmVmZXJlbmNlX2Nhc3Q8UHJvdG9jb2w6OlRlc3Q6OlR5
cGVOZWVkaW5nQ2FzdD4oc3RhdGljX3JlZmVyZW5jZV9jYXN0PEpTT046Ok9iamVjdEJhc2U+KHJl
c3VsdC5yZWxlYXNlTm9uTnVsbCgpKSk7CiB9CiAKIAotdm9pZCBCaW5kaW5nVHJhaXRzPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDE+Ojphc3NlcnRWYWx1ZUhhc0V4
cGVjdGVkVHlwZShKU09OOjpWYWx1ZSogdmFsdWUpCit2b2lkIEJpbmRpbmdUcmFpdHM8UHJvdG9j
b2w6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDE+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShK
U09OOjpWYWx1ZSogdmFsdWUpCiB7CisgICAgQVNTRVJUX1VOVVNFRCh2YWx1ZSwgdmFsdWUpOwog
I2lmIEFTU0VSVF9FTkFCTEVECi0gICAgQVNTRVJUX0FSRyh2YWx1ZSwgdmFsdWUpOwotICAgIFJl
ZlB0cjxKU09OOjpPYmplY3Q+IG9iamVjdDsKLSAgICBib29sIGNhc3RTdWNjZWVkZWQgPSB2YWx1
ZS0+YXNPYmplY3Qob2JqZWN0KTsKLSAgICBBU1NFUlRfVU5VU0VEKGNhc3RTdWNjZWVkZWQsIGNh
c3RTdWNjZWVkZWQpOworICAgIGF1dG8gb2JqZWN0ID0gdmFsdWUtPmFzT2JqZWN0KCk7CisgICAg
QVNTRVJUKG9iamVjdCk7CiAKLSAgICBpbnQgZm91bmRQcm9wZXJ0aWVzQ291bnQgPSAwOworICAg
IHNpemVfdCBmb3VuZFByb3BlcnRpZXNDb3VudCA9IDA7CiAgICAgewogICAgICAgICBhdXRvIG9i
alBvcyA9IG9iamVjdC0+ZmluZCgib2JqIl9zKTsKICAgICAgICAgaWYgKG9ialBvcyAhPSBvYmpl
Y3QtPmVuZCgpKSB7Ci0gICAgICAgICAgICBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDI+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShv
YmpQb3MtPnZhbHVlLmdldCgpKTsKKyAgICAgICAgICAgIEJpbmRpbmdUcmFpdHM8UHJvdG9jb2w6
OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDI+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShvYmpQ
b3MtPnZhbHVlLnB0cigpKTsKICAgICAgICAgICAgICsrZm91bmRQcm9wZXJ0aWVzQ291bnQ7CiAg
ICAgICAgIH0KICAgICB9CiAgICAgaWYgKGZvdW5kUHJvcGVydGllc0NvdW50ICE9IG9iamVjdC0+
c2l6ZSgpKQogICAgICAgICBGQVRBTCgiVW5leHBlY3RlZCBwcm9wZXJ0aWVzIGluIG9iamVjdDog
JXNcbiIsIG9iamVjdC0+dG9KU09OU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOwotI2Vsc2UgLy8g
QVNTRVJUX0VOQUJMRUQKLSAgICBVTlVTRURfUEFSQU0odmFsdWUpOwotI2VuZGlmIC8vIEFTU0VS
VF9FTkFCTEVECisjZW5kaWYKIH0KIAotdm9pZCBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OlRlc3Q6OlJlY3Vyc2l2ZU9iamVjdDI+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlw
ZShKU09OOjpWYWx1ZSogdmFsdWUpCit2b2lkIEJpbmRpbmdUcmFpdHM8UHJvdG9jb2w6OlRlc3Q6
OlJlY3Vyc2l2ZU9iamVjdDI+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShKU09OOjpWYWx1
ZSogdmFsdWUpCiB7CisgICAgQVNTRVJUX1VOVVNFRCh2YWx1ZSwgdmFsdWUpOwogI2lmIEFTU0VS
VF9FTkFCTEVECi0gICAgQVNTRVJUX0FSRyh2YWx1ZSwgdmFsdWUpOwotICAgIFJlZlB0cjxKU09O
OjpPYmplY3Q+IG9iamVjdDsKLSAgICBib29sIGNhc3RTdWNjZWVkZWQgPSB2YWx1ZS0+YXNPYmpl
Y3Qob2JqZWN0KTsKLSAgICBBU1NFUlRfVU5VU0VEKGNhc3RTdWNjZWVkZWQsIGNhc3RTdWNjZWVk
ZWQpOworICAgIGF1dG8gb2JqZWN0ID0gdmFsdWUtPmFzT2JqZWN0KCk7CisgICAgQVNTRVJUKG9i
amVjdCk7CiAKLSAgICBpbnQgZm91bmRQcm9wZXJ0aWVzQ291bnQgPSAwOworICAgIHNpemVfdCBm
b3VuZFByb3BlcnRpZXNDb3VudCA9IDA7CiAgICAgewogICAgICAgICBhdXRvIG9ialBvcyA9IG9i
amVjdC0+ZmluZCgib2JqIl9zKTsKICAgICAgICAgaWYgKG9ialBvcyAhPSBvYmplY3QtPmVuZCgp
KSB7Ci0gICAgICAgICAgICBCaW5kaW5nVHJhaXRzPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRlc3Q6
OlJlY3Vyc2l2ZU9iamVjdDE+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShvYmpQb3MtPnZh
bHVlLmdldCgpKTsKKyAgICAgICAgICAgIEJpbmRpbmdUcmFpdHM8UHJvdG9jb2w6OlRlc3Q6OlJl
Y3Vyc2l2ZU9iamVjdDE+Ojphc3NlcnRWYWx1ZUhhc0V4cGVjdGVkVHlwZShvYmpQb3MtPnZhbHVl
LnB0cigpKTsKICAgICAgICAgICAgICsrZm91bmRQcm9wZXJ0aWVzQ291bnQ7CiAgICAgICAgIH0K
ICAgICB9CiAgICAgaWYgKGZvdW5kUHJvcGVydGllc0NvdW50ICE9IG9iamVjdC0+c2l6ZSgpKQog
ICAgICAgICBGQVRBTCgiVW5leHBlY3RlZCBwcm9wZXJ0aWVzIGluIG9iamVjdDogJXNcbiIsIG9i
amVjdC0+dG9KU09OU3RyaW5nKCkuYXNjaWkoKS5kYXRhKCkpOwotI2Vsc2UgLy8gQVNTRVJUX0VO
QUJMRUQKLSAgICBVTlVTRURfUEFSQU0odmFsdWUpOwotI2VuZGlmIC8vIEFTU0VSVF9FTkFCTEVE
CisjZW5kaWYKIH0KIAogfSAvLyBuYW1lc3BhY2UgUHJvdG9jb2wKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90ZXN0cy9leHBlY3RlZC90eXBlLXdp
dGgtb3Blbi1wYXJhbWV0ZXJzLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
c3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtd2l0aC1vcGVuLXBhcmFtZXRlcnMu
anNvbi1yZXN1bHQKaW5kZXggN2Q1Nzc2MmE4ZmY4YmU0YTlhZTQ5ZGM5ZWY1NDdiOWQzMjEzZGM3
Yi4uYjk4NGNiMDdjMmIzNzU1MWExZjc3YzIzYjA5NDA2MjI5MTZlZTVlMSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5
cGUtd2l0aC1vcGVuLXBhcmFtZXRlcnMuanNvbi1yZXN1bHQKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3R5cGUtd2l0aC1vcGVuLXBh
cmFtZXRlcnMuanNvbi1yZXN1bHQKQEAgLTYzLDcgKzYzLDcgQEAKIAogI2lmIEVOQUJMRShJTlNQ
RUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogCi0jaW5jbHVkZSAiVGVzdFByb3RvY29sVHlw
ZXMuaCIKKyNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KICNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9JbnNwZWN0b3JGcm9udGVuZFJvdXRlci5oPgogCkBAIC0xMTksMTEgKzExOSwxNCBA
QCBwcml2YXRlOgogCiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmg+CisjaW5jbHVkZSA8
dHVwbGU+CisjaW5jbHVkZSA8d3RmL0V4cGVjdGVkLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFs
Lmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0
b3IgewogCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKKwogCiAKIApAQCAtMTY0LDkgKzE2
Nyw3IEBAIHR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwogI2luY2x1ZGUgIlRlc3RCYWNrZW5k
RGlzcGF0Y2hlcnMuaCIKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250
ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL0pTT05WYWx1ZXMuaD4KICNpbmNsdWRlIDx3dGYv
TmV2ZXJEZXN0cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKICNpZiBF
TkFCTEUoSU5TUEVDVE9SX0FMVEVSTkFURV9ESVNQQVRDSEVSUykKICNpbmNsdWRlICJUZXN0QWx0
ZXJuYXRlQmFja2VuZERpc3BhdGNoZXJzLmgiCkBAIC0yMTQsNiArMjE1LDcgQEAgbmFtZXNwYWNl
IEluc3BlY3RvciB7CiAKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVk
ZSA8d3RmL0pTT05WYWx1ZXMuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KICNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIEluc3BlY3RvciB7CkBAIC0yNTcs
NyArMjU5LDYgQEAgY2xhc3MgRnJvbnRlbmRSb3V0ZXI7CiAjaW5jbHVkZSAiVGVzdEZyb250ZW5k
RGlzcGF0Y2hlcnMuaCIKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250
ZW5kUm91dGVyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiBuYW1lc3BhY2Ug
SW5zcGVjdG9yIHsKIApAQCAtMjk4LDcgKzI5OSw5IEBAIG5hbWVzcGFjZSBJbnNwZWN0b3Igewog
I3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JQcm90b2Nv
bFR5cGVzLmg+Ci0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvSlNP
TlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKIApAQCAtMzIwLDcgKzMyMyw3
IEBAIGNsYXNzIE9wZW5QYXJhbWV0ZXJzOwogCiBuYW1lc3BhY2UgVGVzdCB7CiAKLWNsYXNzIE5v
T3BlblBhcmFtZXRlcnMgOiBwdWJsaWMgSlNPTjo6T2JqZWN0QmFzZSB7CitjbGFzcyBOb09wZW5Q
YXJhbWV0ZXJzIGZpbmFsIDogcHVibGljIEpTT046Ok9iamVjdEJhc2UgewogcHVibGljOgogICAg
IGVudW0gewogICAgICAgICBOb0ZpZWxkc1NldCA9IDAsCkBAIC0zNDcsMTcgKzM1MCwxNyBAQCBw
dWJsaWM6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBOb09wZW5QYXJhbWV0ZXJzOwogICAgIHB1Ymxp
YzoKIAotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgT25lU2V0PiYgc2V0T25lKGRvdWJsZSB2YWx1
ZSkKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IE9uZVNldD4mIHNldE9uZShkb3VibGUgaW5fb25l
KQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRFICYgT25lU2V0
KSwgcHJvcGVydHlfb25lX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVzdWx0LT5zZXRE
b3VibGUoIm9uZSJfcywgdmFsdWUpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNldERvdWJsZSgi
b25lIl9zLCBpbl9vbmUpOwogICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxPbmVTZXQ+KCk7
CiAgICAgICAgIH0KIAotICAgICAgICBCdWlsZGVyPFNUQVRFIHwgVHdvU2V0PiYgc2V0VHdvKGRv
dWJsZSB2YWx1ZSkKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IFR3b1NldD4mIHNldFR3byhkb3Vi
bGUgaW5fdHdvKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNUQVRF
ICYgVHdvU2V0KSwgcHJvcGVydHlfdHdvX2FscmVhZHlfc2V0KTsKLSAgICAgICAgICAgIG1fcmVz
dWx0LT5zZXREb3VibGUoInR3byJfcywgdmFsdWUpOworICAgICAgICAgICAgbV9yZXN1bHQtPnNl
dERvdWJsZSgidHdvIl9zLCBpbl90d28pOwogICAgICAgICAgICAgcmV0dXJuIGNhc3RTdGF0ZTxU
d29TZXQ+KCk7CiAgICAgICAgIH0KIApAQCAtMzg1LDcgKzM4OCw3IEBAIHB1YmxpYzoKICAgICB9
CiB9OwogCi1jbGFzcyBPcGVuUGFyYW1ldGVycyA6IHB1YmxpYyBKU09OOjpPYmplY3QgeworY2xh
c3MgT3BlblBhcmFtZXRlcnMgZmluYWwgOiBwdWJsaWMgSlNPTjo6T2JqZWN0IHsKIHB1YmxpYzoK
ICAgICBlbnVtIHsKICAgICAgICAgTm9GaWVsZHNTZXQgPSAwLApAQCAtNDEyLDE3ICs0MTUsMTcg
QEAgcHVibGljOgogICAgICAgICBmcmllbmQgY2xhc3MgT3BlblBhcmFtZXRlcnM7CiAgICAgcHVi
bGljOgogCi0gICAgICAgIEJ1aWxkZXI8U1RBVEUgfCBBbHBoYVNldD4mIHNldEFscGhhKGRvdWJs
ZSB2YWx1ZSkKKyAgICAgICAgQnVpbGRlcjxTVEFURSB8IEFscGhhU2V0PiYgc2V0QWxwaGEoZG91
YmxlIGluX2FscGhhKQogICAgICAgICB7CiAgICAgICAgICAgICBDT01QSUxFX0FTU0VSVCghKFNU
QVRFICYgQWxwaGFTZXQpLCBwcm9wZXJ0eV9hbHBoYV9hbHJlYWR5X3NldCk7Ci0gICAgICAgICAg
ICBtX3Jlc3VsdC0+c2V0RG91YmxlKCJhbHBoYSJfcywgdmFsdWUpOworICAgICAgICAgICAgbV9y
ZXN1bHQtPnNldERvdWJsZSgiYWxwaGEiX3MsIGluX2FscGhhKTsKICAgICAgICAgICAgIHJldHVy
biBjYXN0U3RhdGU8QWxwaGFTZXQ+KCk7CiAgICAgICAgIH0KIAotICAgICAgICBCdWlsZGVyPFNU
QVRFIHwgQmV0YVNldD4mIHNldEJldGEoZG91YmxlIHZhbHVlKQorICAgICAgICBCdWlsZGVyPFNU
QVRFIHwgQmV0YVNldD4mIHNldEJldGEoZG91YmxlIGluX2JldGEpCiAgICAgICAgIHsKICAgICAg
ICAgICAgIENPTVBJTEVfQVNTRVJUKCEoU1RBVEUgJiBCZXRhU2V0KSwgcHJvcGVydHlfYmV0YV9h
bHJlYWR5X3NldCk7Ci0gICAgICAgICAgICBtX3Jlc3VsdC0+c2V0RG91YmxlKCJiZXRhIl9zLCB2
YWx1ZSk7CisgICAgICAgICAgICBtX3Jlc3VsdC0+c2V0RG91YmxlKCJiZXRhIl9zLCBpbl9iZXRh
KTsKICAgICAgICAgICAgIHJldHVybiBjYXN0U3RhdGU8QmV0YVNldD4oKTsKICAgICAgICAgfQog
CkBAIC00NTAsNyArNDUzLDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIC8vIFByb3BlcnR5IG5h
bWVzIGZvciB0eXBlIGdlbmVyYXRlZCBhcyBvcGVuLgotICAgIE5vbmUgc3RhdGljIGNvbnN0IGNo
YXIqIEFscGhhOworICAgIE5vbmUgc3RhdGljIGNvbnN0IGNoYXIqIGFscGhhS2V5OwogfTsKIAog
fSAvLyBUZXN0CkBAIC00OTUsMTQgKzQ5OCwxMyBAQCBwdWJsaWM6CiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogCi0jaW5jbHVkZSA8d3RmL09w
dGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi9B
c3NlcnRpb25zLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCiBuYW1lc3BhY2UgUHJvdG9j
b2wgewogCi1jb25zdCBjaGFyKiBJbnNwZWN0b3I6OlByb3RvY29sOjpUZXN0OjpPcGVuUGFyYW1l
dGVyczo6QWxwaGEgPSAiYWxwaGEiOworY29uc3QgY2hhciogUHJvdG9jb2w6OlRlc3Q6Ok9wZW5Q
YXJhbWV0ZXJzOjphbHBoYUtleSA9ICJhbHBoYSI7CiAKIH0gLy8gbmFtZXNwYWNlIFByb3RvY29s
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Ivc2NyaXB0cy90
ZXN0cy9leHBlY3RlZC92ZXJzaW9uLmpzb24tcmVzdWx0IGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3ZlcnNpb24uanNvbi1yZXN1bHQKaW5k
ZXggZWY3NzhhMDZjN2YyNTExZjZjMjM0MTg2NzI1NTA1NjgzN2ZiZmEzZi4uYzA0YWI1OTczZTc2
NjEyMWU2YmU4Njk5OTg1NDFkNWE3MTI3MmU4ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4cGVjdGVkL3ZlcnNpb24uanNvbi1yZXN1
bHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2luc3BlY3Rvci9zY3JpcHRzL3Rlc3RzL2V4
cGVjdGVkL3ZlcnNpb24uanNvbi1yZXN1bHQKQEAgLTY4LDcgKzY4LDcgQEAgSW5zcGVjdG9yQmFj
a2VuZC5hY3RpdmF0ZURvbWFpbigiVmVyc2lvbkRvbWFpbiIsIG51bGwpOwogCiAjaWYgRU5BQkxF
KElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCiAKLSNpbmNsdWRlICJUZXN0UHJvdG9j
b2xUeXBlcy5oIgorI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9JbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oPgogI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0luc3BlY3RvckZyb250ZW5kUm91dGVyLmg+CiAKQEAgLTEyNCwxMSArMTI0
LDE0IEBAIHByaXZhdGU6CiAKICNpbmNsdWRlICJUZXN0UHJvdG9jb2xPYmplY3RzLmgiCiAjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaD4KKyNpbmNs
dWRlIDx0dXBsZT4KKyNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4KKyNpbmNsdWRlIDx3dGYvT3B0
aW9uYWwuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIElu
c3BlY3RvciB7CiAKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOworCiAKIAogCkBAIC0xNjks
OSArMTcyLDcgQEAgdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiAjaW5jbHVkZSAiVGVzdEJh
Y2tlbmREaXNwYXRjaGVycy5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
RnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgogI2luY2x1ZGUg
PHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAog
I2lmIEVOQUJMRShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQogI2luY2x1ZGUgIlRl
c3RBbHRlcm5hdGVCYWNrZW5kRGlzcGF0Y2hlcnMuaCIKQEAgLTIxOSw2ICsyMjAsNyBAQCBuYW1l
c3BhY2UgSW5zcGVjdG9yIHsKIAogI2luY2x1ZGUgIlRlc3RQcm90b2NvbE9iamVjdHMuaCIKICNp
bmNsdWRlIDx3dGYvSlNPTlZhbHVlcy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSW5zcGVjdG9yIHsKQEAg
LTI2Miw3ICsyNjQsNiBAQCBjbGFzcyBGcm9udGVuZFJvdXRlcjsKICNpbmNsdWRlICJUZXN0RnJv
bnRlbmREaXNwYXRjaGVycy5oIgogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSW5zcGVjdG9y
RnJvbnRlbmRSb3V0ZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKIG5hbWVz
cGFjZSBJbnNwZWN0b3IgewogCkBAIC0zMDMsNyArMzA0LDkgQEAgbmFtZXNwYWNlIEluc3BlY3Rv
ciB7CiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0luc3BlY3RvclBy
b3RvY29sVHlwZXMuaD4KLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0
Zi9KU09OVmFsdWVzLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCkBAIC0zNjIsOCAr
MzY1LDcgQEAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBWRVJTSU9OID0gNDI7CiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGVzdFByb3RvY29sT2JqZWN0cy5oIgogCi0jaW5jbHVk
ZSA8d3RmL09wdGlvbmFsLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1
ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAKIG5hbWVzcGFjZSBJbnNwZWN0b3IgewogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlU2V0LmNwcCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVTZXQuY3BwCmluZGV4IGQ5OWZmMzExZGI3NTU0YTJi
MDEzMGQyNzIyNDljN2IwNGQwNWI4YTUuLjY1ZWEzNTQ1OWM0NDk3ODQyYjU4YWEzYjRkMmMxNmFi
Y2M5ZmUxNTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVT
ZXQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVTZXQuY3BwCkBA
IC01MDEsMTQgKzUwMSwxNCBAQCBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6U3Ry
dWN0dXJlRGVzY3JpcHRpb24+IFN0cnVjdHVyZVNoYXBlOjppbnNwZWN0bwogICAgICAgICBmb3Ig
KGNvbnN0IGF1dG8mIGZpZWxkIDogY3VycmVudFNoYXBlLT5tX29wdGlvbmFsRmllbGRzKQogICAg
ICAgICAgICAgb3B0aW9uYWxGaWVsZHMtPmFkZEl0ZW0oZmllbGQuZ2V0KCkpOwogCi0gICAgICAg
IGN1cnJlbnRPYmplY3QtPnNldEZpZWxkcygmZmllbGRzLmdldCgpKTsKLSAgICAgICAgY3VycmVu
dE9iamVjdC0+c2V0T3B0aW9uYWxGaWVsZHMoJm9wdGlvbmFsRmllbGRzLmdldCgpKTsKKyAgICAg
ICAgY3VycmVudE9iamVjdC0+c2V0RmllbGRzKFdURk1vdmUoZmllbGRzKSk7CisgICAgICAgIGN1
cnJlbnRPYmplY3QtPnNldE9wdGlvbmFsRmllbGRzKFdURk1vdmUob3B0aW9uYWxGaWVsZHMpKTsK
ICAgICAgICAgY3VycmVudE9iamVjdC0+c2V0Q29uc3RydWN0b3JOYW1lKGN1cnJlbnRTaGFwZS0+
bV9jb25zdHJ1Y3Rvck5hbWUpOwogICAgICAgICBjdXJyZW50T2JqZWN0LT5zZXRJc0ltcHJlY2lz
ZShjdXJyZW50U2hhcGUtPm1faXNJbkRpY3Rpb25hcnlNb2RlKTsKIAogICAgICAgICBpZiAoY3Vy
cmVudFNoYXBlLT5tX3Byb3RvKSB7CiAgICAgICAgICAgICBhdXRvIG5leHRPYmplY3QgPSBJbnNw
ZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpTdHJ1Y3R1cmVEZXNjcmlwdGlvbjo6Y3JlYXRlKCku
cmVsZWFzZSgpOwotICAgICAgICAgICAgY3VycmVudE9iamVjdC0+c2V0UHJvdG90eXBlU3RydWN0
dXJlKCZuZXh0T2JqZWN0LmdldCgpKTsKKyAgICAgICAgICAgIGN1cnJlbnRPYmplY3QtPnNldFBy
b3RvdHlwZVN0cnVjdHVyZShuZXh0T2JqZWN0LmNvcHlSZWYoKSk7CiAgICAgICAgICAgICBjdXJy
ZW50T2JqZWN0ID0gV1RGTW92ZShuZXh0T2JqZWN0KTsKICAgICAgICAgfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV1RGL3d0Zi9KU09OVmFsdWVzLmNwcCBiL1NvdXJjZS9XVEYvd3RmL0pTT05WYWx1
ZXMuY3BwCmluZGV4IDQwNTIwNzhmM2Y5N2MyZTkwZmFjZDA1MWRjMTkyZWM2NTI2MTRjMzQuLjQ5
YjNmMGNhMmZmMWY4ZTY5ZDBjNGY0M2FhYWNmY2M2YWJkYTZiNjAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XVEYvd3RmL0pTT05WYWx1ZXMuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL0pTT05WYWx1ZXMu
Y3BwCkBAIC01Nyw5ICs1Nyw5IEBAIGVudW0gY2xhc3MgVG9rZW4gewogICAgIEludmFsaWQsCiB9
OwogCi1jb25zdCBjaGFyKiBjb25zdCBudWxsU3RyaW5nID0gIm51bGwiOwotY29uc3QgY2hhciog
Y29uc3QgdHJ1ZVN0cmluZyA9ICJ0cnVlIjsKLWNvbnN0IGNoYXIqIGNvbnN0IGZhbHNlU3RyaW5n
ID0gImZhbHNlIjsKK2NvbnN0IGNoYXIqIGNvbnN0IG51bGxUb2tlbiA9ICJudWxsIjsKK2NvbnN0
IGNoYXIqIGNvbnN0IHRydWVUb2tlbiA9ICJ0cnVlIjsKK2NvbnN0IGNoYXIqIGNvbnN0IGZhbHNl
VG9rZW4gPSAiZmFsc2UiOwogCiBib29sIHBhcnNlQ29uc3RUb2tlbihjb25zdCBVQ2hhciogc3Rh
cnQsIGNvbnN0IFVDaGFyKiBlbmQsIGNvbnN0IFVDaGFyKiogdG9rZW5FbmQsIGNvbnN0IGNoYXIq
IHRva2VuKQogewpAQCAtMjA5LDE1ICsyMDksMTUgQEAgVG9rZW4gcGFyc2VUb2tlbihjb25zdCBV
Q2hhciogc3RhcnQsIGNvbnN0IFVDaGFyKiBlbmQsIGNvbnN0IFVDaGFyKiogdG9rZW5TdGFydCwK
IAogICAgIHN3aXRjaCAoKnN0YXJ0KSB7CiAgICAgY2FzZSAnbic6Ci0gICAgICAgIGlmIChwYXJz
ZUNvbnN0VG9rZW4oc3RhcnQsIGVuZCwgdG9rZW5FbmQsIG51bGxTdHJpbmcpKQorICAgICAgICBp
ZiAocGFyc2VDb25zdFRva2VuKHN0YXJ0LCBlbmQsIHRva2VuRW5kLCBudWxsVG9rZW4pKQogICAg
ICAgICAgICAgcmV0dXJuIFRva2VuOjpOdWxsOwogICAgICAgICBicmVhazsKICAgICBjYXNlICd0
JzoKLSAgICAgICAgaWYgKHBhcnNlQ29uc3RUb2tlbihzdGFydCwgZW5kLCB0b2tlbkVuZCwgdHJ1
ZVN0cmluZykpCisgICAgICAgIGlmIChwYXJzZUNvbnN0VG9rZW4oc3RhcnQsIGVuZCwgdG9rZW5F
bmQsIHRydWVUb2tlbikpCiAgICAgICAgICAgICByZXR1cm4gVG9rZW46OkJvb2xUcnVlOwogICAg
ICAgICBicmVhazsKICAgICBjYXNlICdmJzoKLSAgICAgICAgaWYgKHBhcnNlQ29uc3RUb2tlbihz
dGFydCwgZW5kLCB0b2tlbkVuZCwgZmFsc2VTdHJpbmcpKQorICAgICAgICBpZiAocGFyc2VDb25z
dFRva2VuKHN0YXJ0LCBlbmQsIHRva2VuRW5kLCBmYWxzZVRva2VuKSkKICAgICAgICAgICAgIHJl
dHVybiBUb2tlbjo6Qm9vbEZhbHNlOwogICAgICAgICBicmVhazsKICAgICBjYXNlICdbJzoKQEAg
LTM4MCw3ICszODAsNyBAQCBSZWZQdHI8SlNPTjo6VmFsdWU+IGJ1aWxkVmFsdWUoY29uc3QgVUNo
YXIqIHN0YXJ0LCBjb25zdCBVQ2hhciogZW5kLCBjb25zdCBVQ2hhcgogICAgICAgICAgICAgUmVm
UHRyPEpTT046OlZhbHVlPiBhcnJheU5vZGUgPSBidWlsZFZhbHVlKHN0YXJ0LCBlbmQsICZ0b2tl
bkVuZCwgZGVwdGggKyAxKTsKICAgICAgICAgICAgIGlmICghYXJyYXlOb2RlKQogICAgICAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICAgICAgYXJyYXktPnB1c2hWYWx1ZShXVEZN
b3ZlKGFycmF5Tm9kZSkpOworICAgICAgICAgICAgYXJyYXktPnB1c2hWYWx1ZShhcnJheU5vZGUu
cmVsZWFzZU5vbk51bGwoKSk7CiAKICAgICAgICAgICAgIC8vIEFmdGVyIGEgbGlzdCB2YWx1ZSwg
d2UgZXhwZWN0IGEgY29tbWEgb3IgdGhlIGVuZCBvZiB0aGUgbGlzdC4KICAgICAgICAgICAgIHN0
YXJ0ID0gdG9rZW5FbmQ7CkBAIC00MjAsNyArNDIwLDcgQEAgUmVmUHRyPEpTT046OlZhbHVlPiBi
dWlsZFZhbHVlKGNvbnN0IFVDaGFyKiBzdGFydCwgY29uc3QgVUNoYXIqIGVuZCwgY29uc3QgVUNo
YXIKICAgICAgICAgICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gdmFsdWUgPSBidWlsZFZhbHVlKHN0
YXJ0LCBlbmQsICZ0b2tlbkVuZCwgZGVwdGggKyAxKTsKICAgICAgICAgICAgIGlmICghdmFsdWUp
CiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgICAgICBvYmplY3QtPnNl
dFZhbHVlKGtleSwgV1RGTW92ZSh2YWx1ZSkpOworICAgICAgICAgICAgb2JqZWN0LT5zZXRWYWx1
ZShrZXksIHZhbHVlLnJlbGVhc2VOb25OdWxsKCkpOwogICAgICAgICAgICAgc3RhcnQgPSB0b2tl
bkVuZDsKIAogICAgICAgICAgICAgLy8gQWZ0ZXIgYSBrZXkvdmFsdWUgcGFpciwgd2UgZXhwZWN0
IGEgY29tbWEgb3IgdGhlIGVuZCBvZiB0aGUKQEAgLTQ4OSw0MCArNDg5LDM4IEBAIFJlZjxWYWx1
ZT4gVmFsdWU6OmNyZWF0ZShjb25zdCBjaGFyKiB2YWx1ZSkKICAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBWYWx1ZSh2YWx1ZSkpOwogfQogCi1ib29sIFZhbHVlOjphc1ZhbHVlKFJlZlB0cjxWYWx1
ZT4mIHZhbHVlKQorUmVmUHRyPFZhbHVlPiBWYWx1ZTo6YXNWYWx1ZSgpCiB7Ci0gICAgdmFsdWUg
PSB0aGlzOwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiB0aGlzOwogfQogCi1ib29sIFZh
bHVlOjphc09iamVjdChSZWZQdHI8T2JqZWN0PiYpCitSZWZQdHI8T2JqZWN0PiBWYWx1ZTo6YXNP
YmplY3QoKQogewotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAot
Ym9vbCBWYWx1ZTo6YXNBcnJheShSZWZQdHI8QXJyYXk+JikKK1JlZlB0cjxBcnJheT4gVmFsdWU6
OmFzQXJyYXkoKQogewotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0K
IAotYm9vbCBWYWx1ZTo6cGFyc2VKU09OKGNvbnN0IFN0cmluZyYganNvbklucHV0LCBSZWZQdHI8
VmFsdWU+JiBvdXRwdXQpCitSZWZQdHI8VmFsdWU+IFZhbHVlOjpwYXJzZUpTT04oY29uc3QgU3Ry
aW5nJiBqc29uKQogewogICAgIC8vIEZJWE1FOiBUaGlzIHdob2xlIGZpbGUgc2hvdWxkIGp1c3Qg
dXNlIFN0cmluZ1ZpZXcgaW5zdGVhZCBvZiBVQ2hhci9sZW5ndGggYW5kIGF2b2lkIHVwY29udmVy
dGluZy4KLSAgICBhdXRvIGNoYXJhY3RlcnMgPSBTdHJpbmdWaWV3KGpzb25JbnB1dCkudXBjb252
ZXJ0ZWRDaGFyYWN0ZXJzKCk7CisgICAgYXV0byBjaGFyYWN0ZXJzID0gU3RyaW5nVmlldyhqc29u
KS51cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsKICAgICBjb25zdCBVQ2hhciogc3RhcnQgPSBjaGFy
YWN0ZXJzOwotICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBzdGFydCArIGpzb25JbnB1dC5sZW5ndGgo
KTsKKyAgICBjb25zdCBVQ2hhciogZW5kID0gc3RhcnQgKyBqc29uLmxlbmd0aCgpOwogICAgIGNv
bnN0IFVDaGFyKiB0b2tlbkVuZDsKICAgICBhdXRvIHJlc3VsdCA9IGJ1aWxkVmFsdWUoc3RhcnQs
IGVuZCwgJnRva2VuRW5kLCAwKTsKICAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIGZvciAoY29uc3QgVUNoYXIqIHZh
bHVlRW5kID0gdG9rZW5FbmQ7IHZhbHVlRW5kIDwgZW5kOyArK3ZhbHVlRW5kKSB7CiAgICAgICAg
IGlmICghaXNTcGFjZU9yTmV3bGluZSgqdmFsdWVFbmQpKQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCi0gICAgb3V0cHV0ID0g
V1RGTW92ZShyZXN1bHQpOwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKIHZvaWQgVmFsdWU6OmVzY2FwZVN0cmluZyhTdHJpbmdCdWlsZGVyJiBidWlsZGVyLCBTdHJp
bmdWaWV3IHN0cmluZykKQEAgLTU3Myw5NCArNTcxLDMyIEBAIFN0cmluZyBWYWx1ZTo6dG9KU09O
U3RyaW5nKCkgY29uc3QKICAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CiB9CiAKLWJvb2wg
VmFsdWU6OmFzQm9vbGVhbihib29sJiBvdXRwdXQpIGNvbnN0CitPcHRpb25hbDxib29sPiBWYWx1
ZTo6YXNCb29sZWFuKCkgY29uc3QKIHsKICAgICBpZiAodHlwZSgpICE9IFR5cGU6OkJvb2xlYW4p
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIG91dHB1dCA9IG1fdmFsdWUuYm9vbGVhbjsK
LSAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICByZXR1
cm4gbV92YWx1ZS5ib29sZWFuOwogfQogCi1ib29sIFZhbHVlOjphc0RvdWJsZShkb3VibGUmIG91
dHB1dCkgY29uc3QKK09wdGlvbmFsPGRvdWJsZT4gVmFsdWU6OmFzRG91YmxlKCkgY29uc3QKIHsK
LSAgICBpZiAodHlwZSgpICE9IFR5cGU6OkRvdWJsZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgb3V0cHV0ID0gbV92YWx1ZS5udW1iZXI7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgaWYg
KHR5cGUoKSAhPSBUeXBlOjpEb3VibGUgJiYgdHlwZSgpICE9IFR5cGU6OkludGVnZXIpCisgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgcmV0dXJuIG1fdmFsdWUubnVtYmVyOwogfQog
Ci1ib29sIFZhbHVlOjphc0RvdWJsZShmbG9hdCYgb3V0cHV0KSBjb25zdAorT3B0aW9uYWw8aW50
PiBWYWx1ZTo6YXNJbnRlZ2VyKCkgY29uc3QKIHsKLSAgICBpZiAodHlwZSgpICE9IFR5cGU6OkRv
dWJsZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgb3V0cHV0ID0gc3RhdGljX2Nhc3Q8
ZmxvYXQ+KG1fdmFsdWUubnVtYmVyKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAodHlwZSgp
ICE9IFR5cGU6OkRvdWJsZSAmJiB0eXBlKCkgIT0gVHlwZTo6SW50ZWdlcikKKyAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihtX3ZhbHVlLm51
bWJlcik7CiB9CiAKLWJvb2wgVmFsdWU6OmFzSW50ZWdlcihpbnQmIG91dHB1dCkgY29uc3QKLXsK
LSAgICBpZiAodHlwZSgpICE9IFR5cGU6OkludGVnZXIgJiYgdHlwZSgpICE9IFR5cGU6OkRvdWJs
ZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgb3V0cHV0ID0gc3RhdGljX2Nhc3Q8aW50
PihtX3ZhbHVlLm51bWJlcik7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgVmFsdWU6OmFz
SW50ZWdlcih1bnNpZ25lZCYgb3V0cHV0KSBjb25zdAotewotICAgIGlmICh0eXBlKCkgIT0gVHlw
ZTo6SW50ZWdlciAmJiB0eXBlKCkgIT0gVHlwZTo6RG91YmxlKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBvdXRwdXQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV92YWx1ZS5udW1iZXIp
OwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFZhbHVlOjphc0ludGVnZXIobG9uZyYgb3V0
cHV0KSBjb25zdAotewotICAgIGlmICh0eXBlKCkgIT0gVHlwZTo6SW50ZWdlciAmJiB0eXBlKCkg
IT0gVHlwZTo6RG91YmxlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBvdXRwdXQgPSBz
dGF0aWNfY2FzdDxsb25nPihtX3ZhbHVlLm51bWJlcik7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LWJvb2wgVmFsdWU6OmFzSW50ZWdlcihsb25nIGxvbmcmIG91dHB1dCkgY29uc3QKLXsKLSAgICBp
ZiAodHlwZSgpICE9IFR5cGU6OkludGVnZXIgJiYgdHlwZSgpICE9IFR5cGU6OkRvdWJsZSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgb3V0cHV0ID0gc3RhdGljX2Nhc3Q8bG9uZyBsb25n
PihtX3ZhbHVlLm51bWJlcik7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgVmFsdWU6OmFz
SW50ZWdlcih1bnNpZ25lZCBsb25nJiBvdXRwdXQpIGNvbnN0Ci17Ci0gICAgaWYgKHR5cGUoKSAh
PSBUeXBlOjpJbnRlZ2VyICYmIHR5cGUoKSAhPSBUeXBlOjpEb3VibGUpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIG91dHB1dCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KG1fdmFs
dWUubnVtYmVyKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBWYWx1ZTo6YXNJbnRlZ2Vy
KHVuc2lnbmVkIGxvbmcgbG9uZyYgb3V0cHV0KSBjb25zdAotewotICAgIGlmICh0eXBlKCkgIT0g
VHlwZTo6SW50ZWdlciAmJiB0eXBlKCkgIT0gVHlwZTo6RG91YmxlKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBvdXRwdXQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KG1f
dmFsdWUubnVtYmVyKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBWYWx1ZTo6YXNTdHJp
bmcoU3RyaW5nJiBvdXRwdXQpIGNvbnN0CitTdHJpbmcgVmFsdWU6OmFzU3RyaW5nKCkgY29uc3QK
IHsKICAgICBpZiAodHlwZSgpICE9IFR5cGU6OlN0cmluZykKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgb3V0cHV0ID0gbV92YWx1ZS5zdHJpbmc7Ci0gICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIHJldHVybiBudWxsU3RyaW5nKCk7CisgICAgcmV0dXJuIG1fdmFsdWUuc3RyaW5nOwogfQog
CiB2b2lkIFZhbHVlOjp3cml0ZUpTT04oU3RyaW5nQnVpbGRlciYgb3V0cHV0KSBjb25zdApAQCAt
NzAzLDc2ICs2MzksNzQgQEAgT2JqZWN0QmFzZTo6fk9iamVjdEJhc2UoKQogewogfQogCi1ib29s
IE9iamVjdEJhc2U6OmFzT2JqZWN0KFJlZlB0cjxPYmplY3Q+JiBvdXRwdXQpCitSZWZQdHI8T2Jq
ZWN0PiBPYmplY3RCYXNlOjphc09iamVjdCgpCiB7CiAgICAgQ09NUElMRV9BU1NFUlQoc2l6ZW9m
KE9iamVjdCkgPT0gc2l6ZW9mKE9iamVjdEJhc2UpLCBjYW5ub3RfY2FzdCk7Ci0KLSAgICBvdXRw
dXQgPSBzdGF0aWNfY2FzdDxPYmplY3QqPih0aGlzKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
T2JqZWN0KiBPYmplY3RCYXNlOjpvcGVuQWNjZXNzb3JzKCkKLXsKLSAgICBDT01QSUxFX0FTU0VS
VChzaXplb2YoT2JqZWN0KSA9PSBzaXplb2YoT2JqZWN0QmFzZSksIGNhbm5vdF9jYXN0KTsKLQog
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxPYmplY3QqPih0aGlzKTsKIH0KIAogc2l6ZV90IE9iamVj
dEJhc2U6Om1lbW9yeUNvc3QoKSBjb25zdAogewogICAgIHNpemVfdCBtZW1vcnlDb3N0ID0gVmFs
dWU6Om1lbW9yeUNvc3QoKTsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIGVudHJ5IDogbV9tYXApIHsK
LSAgICAgICAgbWVtb3J5Q29zdCArPSBlbnRyeS5rZXkuc2l6ZUluQnl0ZXMoKTsKLSAgICAgICAg
aWYgKGVudHJ5LnZhbHVlKQotICAgICAgICAgICAgbWVtb3J5Q29zdCArPSBlbnRyeS52YWx1ZS0+
bWVtb3J5Q29zdCgpOwotICAgIH0KKyAgICBmb3IgKGNvbnN0IGF1dG8mIGVudHJ5IDogbV9tYXAp
CisgICAgICAgIG1lbW9yeUNvc3QgKz0gZW50cnkua2V5LnNpemVJbkJ5dGVzKCkgKyBlbnRyeS52
YWx1ZS0+bWVtb3J5Q29zdCgpOwogICAgIHJldHVybiBtZW1vcnlDb3N0OwogfQogCi1ib29sIE9i
amVjdEJhc2U6OmdldEJvb2xlYW4oY29uc3QgU3RyaW5nJiBuYW1lLCBib29sJiBvdXRwdXQpIGNv
bnN0CitPcHRpb25hbDxib29sPiBPYmplY3RCYXNlOjpnZXRCb29sZWFuKGNvbnN0IFN0cmluZyYg
bmFtZSkgY29uc3QKIHsKLSAgICBSZWZQdHI8VmFsdWU+IHZhbHVlOwotICAgIGlmICghZ2V0VmFs
dWUobmFtZSwgdmFsdWUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gdmFs
dWUtPmFzQm9vbGVhbihvdXRwdXQpOworICAgIGF1dG8gdmFsdWUgPSBnZXRWYWx1ZShuYW1lKTsK
KyAgICBpZiAoIXZhbHVlKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHJldHVy
biB2YWx1ZS0+YXNCb29sZWFuKCk7CiB9CiAKLWJvb2wgT2JqZWN0QmFzZTo6Z2V0U3RyaW5nKGNv
bnN0IFN0cmluZyYgbmFtZSwgU3RyaW5nJiBvdXRwdXQpIGNvbnN0CitPcHRpb25hbDxkb3VibGU+
IE9iamVjdEJhc2U6OmdldERvdWJsZShjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0CiB7Ci0gICAg
UmVmUHRyPFZhbHVlPiB2YWx1ZTsKLSAgICBpZiAoIWdldFZhbHVlKG5hbWUsIHZhbHVlKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHZhbHVlLT5hc1N0cmluZyhvdXRwdXQp
OworICAgIGF1dG8gdmFsdWUgPSBnZXRWYWx1ZShuYW1lKTsKKyAgICBpZiAoIXZhbHVlKQorICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHJldHVybiB2YWx1ZS0+YXNEb3VibGUoKTsK
IH0KIAotYm9vbCBPYmplY3RCYXNlOjpnZXRPYmplY3QoY29uc3QgU3RyaW5nJiBuYW1lLCBSZWZQ
dHI8T2JqZWN0PiYgb3V0cHV0KSBjb25zdAorT3B0aW9uYWw8aW50PiBPYmplY3RCYXNlOjpnZXRJ
bnRlZ2VyKGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3QKIHsKLSAgICBSZWZQdHI8VmFsdWU+IHZh
bHVlOwotICAgIGlmICghZ2V0VmFsdWUobmFtZSwgdmFsdWUpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICByZXR1cm4gdmFsdWUtPmFzT2JqZWN0KG91dHB1dCk7CisgICAgYXV0byB2YWx1
ZSA9IGdldFZhbHVlKG5hbWUpOworICAgIGlmICghdmFsdWUpCisgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CisgICAgcmV0dXJuIHZhbHVlLT5hc0ludGVnZXIoKTsKIH0KIAotYm9vbCBPYmpl
Y3RCYXNlOjpnZXRBcnJheShjb25zdCBTdHJpbmcmIG5hbWUsIFJlZlB0cjxBcnJheT4mIG91dHB1
dCkgY29uc3QKK1N0cmluZyBPYmplY3RCYXNlOjpnZXRTdHJpbmcoY29uc3QgU3RyaW5nJiBuYW1l
KSBjb25zdAogewotICAgIFJlZlB0cjxWYWx1ZT4gdmFsdWU7Ci0gICAgaWYgKCFnZXRWYWx1ZShu
YW1lLCB2YWx1ZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB2YWx1ZS0+
YXNBcnJheShvdXRwdXQpOworICAgIGF1dG8gdmFsdWUgPSBnZXRWYWx1ZShuYW1lKTsKKyAgICBp
ZiAoIXZhbHVlKQorICAgICAgICByZXR1cm4gbnVsbFN0cmluZygpOworICAgIHJldHVybiB2YWx1
ZS0+YXNTdHJpbmcoKTsKIH0KIAotYm9vbCBPYmplY3RCYXNlOjpnZXRWYWx1ZShjb25zdCBTdHJp
bmcmIG5hbWUsIFJlZlB0cjxWYWx1ZT4mIG91dHB1dCkgY29uc3QKK1JlZlB0cjxPYmplY3Q+IE9i
amVjdEJhc2U6OmdldE9iamVjdChjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0CiB7Ci0gICAgRGlj
dGlvbmFyeTo6Y29uc3RfaXRlcmF0b3IgZmluZFJlc3VsdCA9IG1fbWFwLmZpbmQobmFtZSk7Cisg
ICAgYXV0byB2YWx1ZSA9IGdldFZhbHVlKG5hbWUpOworICAgIGlmICghdmFsdWUpCisgICAgICAg
IHJldHVybiBudWxscHRyOworICAgIHJldHVybiB2YWx1ZS0+YXNPYmplY3QoKTsKK30KKworUmVm
UHRyPEFycmF5PiBPYmplY3RCYXNlOjpnZXRBcnJheShjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0
Cit7CisgICAgYXV0byB2YWx1ZSA9IGdldFZhbHVlKG5hbWUpOworICAgIGlmICghdmFsdWUpCisg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiB2YWx1ZS0+YXNBcnJheSgpOworfQor
CitSZWZQdHI8VmFsdWU+IE9iamVjdEJhc2U6OmdldFZhbHVlKGNvbnN0IFN0cmluZyYgbmFtZSkg
Y29uc3QKK3sKKyAgICBhdXRvIGZpbmRSZXN1bHQgPSBtX21hcC5maW5kKG5hbWUpOwogICAgIGlm
IChmaW5kUmVzdWx0ID09IG1fbWFwLmVuZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBvdXRwdXQgPSBmaW5kUmVzdWx0LT52YWx1ZTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIGZpbmRSZXN1bHQtPnZhbHVlLmNvcHlSZWYoKTsK
IH0KIAogdm9pZCBPYmplY3RCYXNlOjpyZW1vdmUoY29uc3QgU3RyaW5nJiBuYW1lKQpAQCAtNzk4
LDggKzczMiw2IEBAIHZvaWQgT2JqZWN0QmFzZTo6d3JpdGVKU09OKFN0cmluZ0J1aWxkZXImIG91
dHB1dCkgY29uc3QKIAogT2JqZWN0QmFzZTo6T2JqZWN0QmFzZSgpCiAgICAgOiBWYWx1ZShUeXBl
OjpPYmplY3QpCi0gICAgLCBtX21hcCgpCi0gICAgLCBtX29yZGVyKCkKIHsKIH0KIApAQCAtODA3
LDE3ICs3MzksMTYgQEAgQXJyYXlCYXNlOjp+QXJyYXlCYXNlKCkKIHsKIH0KIAotYm9vbCBBcnJh
eUJhc2U6OmFzQXJyYXkoUmVmUHRyPEFycmF5PiYgb3V0cHV0KQorUmVmUHRyPEFycmF5PiBBcnJh
eUJhc2U6OmFzQXJyYXkoKQogewogICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihBcnJheUJhc2Up
ID09IHNpemVvZihBcnJheSksIGNhbm5vdF9jYXN0KTsKLSAgICBvdXRwdXQgPSBzdGF0aWNfY2Fz
dDxBcnJheSo+KHRoaXMpOwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxBcnJheSo+KHRoaXMpOwogfQogCiB2b2lkIEFycmF5QmFzZTo6d3JpdGVKU09OKFN0cmluZ0J1
aWxkZXImIG91dHB1dCkgY29uc3QKIHsKICAgICBvdXRwdXQuYXBwZW5kKCdbJyk7Ci0gICAgZm9y
IChWZWN0b3I8UmVmUHRyPFZhbHVlPj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9tYXAuYmVnaW4o
KTsgaXQgIT0gbV9tYXAuZW5kKCk7ICsraXQpIHsKKyAgICBmb3IgKGF1dG8gaXQgPSBtX21hcC5i
ZWdpbigpOyBpdCAhPSBtX21hcC5lbmQoKTsgKytpdCkgewogICAgICAgICBpZiAoaXQgIT0gbV9t
YXAuYmVnaW4oKSkKICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoJywnKTsKICAgICAgICAgKCpp
dCktPndyaXRlSlNPTihvdXRwdXQpOwpAQCAtODI3LDExICs3NTgsMTAgQEAgdm9pZCBBcnJheUJh
c2U6OndyaXRlSlNPTihTdHJpbmdCdWlsZGVyJiBvdXRwdXQpIGNvbnN0CiAKIEFycmF5QmFzZTo6
QXJyYXlCYXNlKCkKICAgICA6IFZhbHVlKFR5cGU6OkFycmF5KQotICAgICwgbV9tYXAoKQogewog
fQogCi1SZWZQdHI8VmFsdWU+IEFycmF5QmFzZTo6Z2V0KHNpemVfdCBpbmRleCkgY29uc3QKK1Jl
ZjxWYWx1ZT4gQXJyYXlCYXNlOjpnZXQoc2l6ZV90IGluZGV4KSBjb25zdAogewogICAgIFJFTEVB
U0VfQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oaW5kZXggPCBtX21hcC5zaXplKCkp
OwogICAgIHJldHVybiBtX21hcFtpbmRleF07CkBAIC04NTAsMTAgKzc4MCw4IEBAIFJlZjxBcnJh
eT4gQXJyYXk6OmNyZWF0ZSgpCiBzaXplX3QgQXJyYXlCYXNlOjptZW1vcnlDb3N0KCkgY29uc3QK
IHsKICAgICBzaXplX3QgbWVtb3J5Q29zdCA9IFZhbHVlOjptZW1vcnlDb3N0KCk7Ci0gICAgZm9y
IChjb25zdCBhdXRvJiBpdGVtIDogbV9tYXApIHsKLSAgICAgICAgaWYgKGl0ZW0pCi0gICAgICAg
ICAgICBtZW1vcnlDb3N0ICs9IGl0ZW0tPm1lbW9yeUNvc3QoKTsKLSAgICB9CisgICAgZm9yIChj
b25zdCBhdXRvJiBpdGVtIDogbV9tYXApCisgICAgICAgIG1lbW9yeUNvc3QgKz0gaXRlbS0+bWVt
b3J5Q29zdCgpOwogICAgIHJldHVybiBtZW1vcnlDb3N0OwogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV1RGL3d0Zi9KU09OVmFsdWVzLmggYi9Tb3VyY2UvV1RGL3d0Zi9KU09OVmFsdWVzLmgKaW5k
ZXggZWJhYmM0NDlmODgwYjM5ZDNmYWRlNzhjZDYxYjFjNGQ1ZTBlNjg2My4uNDMwNzQ1M2Q5Y2M4
Zjg4Y2MxNjk5Y2Q4ODU3MjE2ODc3ZmRjOWIwOSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYv
SlNPTlZhbHVlcy5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL0pTT05WYWx1ZXMuaApAQCAtOTIsMjIg
KzkyLDE1IEBAIHB1YmxpYzoKICAgICBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7
IH0KICAgICBib29sIGlzTnVsbCgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSA9PSBUeXBlOjpOdWxs
OyB9CiAKLSAgICBib29sIGFzQm9vbGVhbihib29sJikgY29uc3Q7Ci0gICAgYm9vbCBhc0ludGVn
ZXIoaW50JikgY29uc3Q7Ci0gICAgYm9vbCBhc0ludGVnZXIodW5zaWduZWQmKSBjb25zdDsKLSAg
ICBib29sIGFzSW50ZWdlcihsb25nJikgY29uc3Q7Ci0gICAgYm9vbCBhc0ludGVnZXIobG9uZyBs
b25nJikgY29uc3Q7Ci0gICAgYm9vbCBhc0ludGVnZXIodW5zaWduZWQgbG9uZyYpIGNvbnN0Owot
ICAgIGJvb2wgYXNJbnRlZ2VyKHVuc2lnbmVkIGxvbmcgbG9uZyYpIGNvbnN0OwotICAgIGJvb2wg
YXNEb3VibGUoZG91YmxlJikgY29uc3Q7Ci0gICAgYm9vbCBhc0RvdWJsZShmbG9hdCYpIGNvbnN0
OwotICAgIGJvb2wgYXNTdHJpbmcoU3RyaW5nJikgY29uc3Q7Ci0gICAgYm9vbCBhc1ZhbHVlKFJl
ZlB0cjxWYWx1ZT4mKTsKKyAgICBPcHRpb25hbDxib29sPiBhc0Jvb2xlYW4oKSBjb25zdDsKKyAg
ICBPcHRpb25hbDxpbnQ+IGFzSW50ZWdlcigpIGNvbnN0OworICAgIE9wdGlvbmFsPGRvdWJsZT4g
YXNEb3VibGUoKSBjb25zdDsKKyAgICBTdHJpbmcgYXNTdHJpbmcoKSBjb25zdDsKKyAgICBSZWZQ
dHI8VmFsdWU+IGFzVmFsdWUoKTsKKyAgICB2aXJ0dWFsIFJlZlB0cjxPYmplY3Q+IGFzT2JqZWN0
KCk7CisgICAgdmlydHVhbCBSZWZQdHI8QXJyYXk+IGFzQXJyYXkoKTsKIAotICAgIHZpcnR1YWwg
Ym9vbCBhc09iamVjdChSZWZQdHI8T2JqZWN0PiYpOwotICAgIHZpcnR1YWwgYm9vbCBhc0FycmF5
KFJlZlB0cjxBcnJheT4mKTsKLQotICAgIHN0YXRpYyBib29sIHBhcnNlSlNPTihjb25zdCBTdHJp
bmcmIGpzb25JbnB1dCwgUmVmUHRyPFZhbHVlPiYgb3V0cHV0KTsKKyAgICBzdGF0aWMgUmVmUHRy
PFZhbHVlPiBwYXJzZUpTT04oY29uc3QgU3RyaW5nJik7CiAgICAgc3RhdGljIHZvaWQgZXNjYXBl
U3RyaW5nKFN0cmluZ0J1aWxkZXImLCBTdHJpbmdWaWV3KTsKIAogICAgIFN0cmluZyB0b0pTT05T
dHJpbmcoKSBjb25zdDsKQEAgLTE3Miw5NSArMTY1LDYzIEBAIHByaXZhdGU6CiAKIGNsYXNzIFdU
Rl9FWFBPUlRfUFJJVkFURSBPYmplY3RCYXNlIDogcHVibGljIFZhbHVlIHsKIHByaXZhdGU6Ci0g
ICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgUmVmUHRyPFZhbHVlPj4gRGljdGlvbmFyeTsKKyAg
ICB1c2luZyBEYXRhU3RvcmFnZSA9IEhhc2hNYXA8U3RyaW5nLCBSZWY8VmFsdWU+PjsKKyAgICB1
c2luZyBPcmRlclN0b3JhZ2UgPSBWZWN0b3I8U3RyaW5nPjsKIAogcHVibGljOgotICAgIHR5cGVk
ZWYgRGljdGlvbmFyeTo6aXRlcmF0b3IgaXRlcmF0b3I7Ci0gICAgdHlwZWRlZiBEaWN0aW9uYXJ5
Ojpjb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKKyAgICB1c2luZyBpdGVyYXRvciA9IERh
dGFTdG9yYWdlOjppdGVyYXRvcjsKKyAgICB1c2luZyBjb25zdF9pdGVyYXRvciA9IERhdGFTdG9y
YWdlOjpjb25zdF9pdGVyYXRvcjsKIAotICAgIE9iamVjdCogb3BlbkFjY2Vzc29ycygpOworICAg
IFJlZlB0cjxPYmplY3Q+IGFzT2JqZWN0KCkgZmluYWw7CiAKICAgICBzaXplX3QgbWVtb3J5Q29z
dCgpIGNvbnN0IGZpbmFsOwogCiBwcm90ZWN0ZWQ6CiAgICAgfk9iamVjdEJhc2UoKSBvdmVycmlk
ZTsKIAotICAgIGJvb2wgYXNPYmplY3QoUmVmUHRyPE9iamVjdD4mIG91dHB1dCkgb3ZlcnJpZGU7
Ci0KICAgICAvLyBGSVhNRTogdXNlIHRlbXBsYXRlcyB0byByZWR1Y2UgdGhlIGFtb3VudCBvZiBk
dXBsaWNhdGVkIHNldCooKSBtZXRob2RzLgogICAgIHZvaWQgc2V0Qm9vbGVhbihjb25zdCBTdHJp
bmcmIG5hbWUsIGJvb2wpOwogICAgIHZvaWQgc2V0SW50ZWdlcihjb25zdCBTdHJpbmcmIG5hbWUs
IGludCk7CiAgICAgdm9pZCBzZXREb3VibGUoY29uc3QgU3RyaW5nJiBuYW1lLCBkb3VibGUpOwog
ICAgIHZvaWQgc2V0U3RyaW5nKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJik7Ci0g
ICAgdm9pZCBzZXRWYWx1ZShjb25zdCBTdHJpbmcmIG5hbWUsIFJlZlB0cjxWYWx1ZT4mJik7Ci0g
ICAgdm9pZCBzZXRPYmplY3QoY29uc3QgU3RyaW5nJiBuYW1lLCBSZWZQdHI8T2JqZWN0QmFzZT4m
Jik7Ci0gICAgdm9pZCBzZXRBcnJheShjb25zdCBTdHJpbmcmIG5hbWUsIFJlZlB0cjxBcnJheUJh
c2U+JiYpOworICAgIHZvaWQgc2V0VmFsdWUoY29uc3QgU3RyaW5nJiBuYW1lLCBSZWY8VmFsdWU+
JiYpOworICAgIHZvaWQgc2V0T2JqZWN0KGNvbnN0IFN0cmluZyYgbmFtZSwgUmVmPE9iamVjdEJh
c2U+JiYpOworICAgIHZvaWQgc2V0QXJyYXkoY29uc3QgU3RyaW5nJiBuYW1lLCBSZWY8QXJyYXlC
YXNlPiYmKTsKIAogICAgIGl0ZXJhdG9yIGZpbmQoY29uc3QgU3RyaW5nJiBuYW1lKTsKICAgICBj
b25zdF9pdGVyYXRvciBmaW5kKGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3Q7CiAKLSAgICAvLyBG
SVhNRTogdXNlIHRlbXBsYXRlcyB0byByZWR1Y2UgdGhlIGFtb3VudCBvZiBkdXBsaWNhdGVkIGdl
dCooKSBtZXRob2RzLgotICAgIGJvb2wgZ2V0Qm9vbGVhbihjb25zdCBTdHJpbmcmIG5hbWUsIGJv
b2wmIG91dHB1dCkgY29uc3Q7Ci0gICAgdGVtcGxhdGU8Y2xhc3MgVD4gYm9vbCBnZXREb3VibGUo
Y29uc3QgU3RyaW5nJiBuYW1lLCBUJiBvdXRwdXQpIGNvbnN0Ci0gICAgewotICAgICAgICBSZWZQ
dHI8VmFsdWU+IHZhbHVlOwotICAgICAgICBpZiAoIWdldFZhbHVlKG5hbWUsIHZhbHVlKSkKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICByZXR1cm4gdmFsdWUtPmFzRG91Ymxl
KG91dHB1dCk7Ci0gICAgfQotICAgIHRlbXBsYXRlPGNsYXNzIFQ+IGJvb2wgZ2V0SW50ZWdlcihj
b25zdCBTdHJpbmcmIG5hbWUsIFQmIG91dHB1dCkgY29uc3QKLSAgICB7Ci0gICAgICAgIFJlZlB0
cjxWYWx1ZT4gdmFsdWU7Ci0gICAgICAgIGlmICghZ2V0VmFsdWUobmFtZSwgdmFsdWUpKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIHJldHVybiB2YWx1ZS0+YXNJbnRlZ2Vy
KG91dHB1dCk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8Y2xhc3MgVD4gT3B0aW9uYWw8VD4gZ2V0
TnVtYmVyKGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3QKLSAgICB7Ci0gICAgICAgIFJlZlB0cjxW
YWx1ZT4gdmFsdWU7Ci0gICAgICAgIGlmICghZ2V0VmFsdWUobmFtZSwgdmFsdWUpKQotICAgICAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgICAgICBUIHJlc3VsdDsKLSAgICAgICAg
aWYgKCF2YWx1ZS0+YXNEb3VibGUocmVzdWx0KSkKLSAgICAgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7Ci0KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0KLSAgICBib29sIGdldFN0
cmluZyhjb25zdCBTdHJpbmcmIG5hbWUsIFN0cmluZyYgb3V0cHV0KSBjb25zdDsKLSAgICBib29s
IGdldE9iamVjdChjb25zdCBTdHJpbmcmIG5hbWUsIFJlZlB0cjxPYmplY3Q+JikgY29uc3Q7Ci0g
ICAgYm9vbCBnZXRBcnJheShjb25zdCBTdHJpbmcmIG5hbWUsIFJlZlB0cjxBcnJheT4mKSBjb25z
dDsKLSAgICBib29sIGdldFZhbHVlKGNvbnN0IFN0cmluZyYgbmFtZSwgUmVmUHRyPFZhbHVlPiYp
IGNvbnN0OworICAgIE9wdGlvbmFsPGJvb2w+IGdldEJvb2xlYW4oY29uc3QgU3RyaW5nJiBuYW1l
KSBjb25zdDsKKyAgICBPcHRpb25hbDxkb3VibGU+IGdldERvdWJsZShjb25zdCBTdHJpbmcmIG5h
bWUpIGNvbnN0OworICAgIE9wdGlvbmFsPGludD4gZ2V0SW50ZWdlcihjb25zdCBTdHJpbmcmIG5h
bWUpIGNvbnN0OworICAgIFN0cmluZyBnZXRTdHJpbmcoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25z
dDsKKyAgICBSZWZQdHI8T2JqZWN0PiBnZXRPYmplY3QoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25z
dDsKKyAgICBSZWZQdHI8QXJyYXk+IGdldEFycmF5KGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3Q7
CisgICAgUmVmUHRyPFZhbHVlPiBnZXRWYWx1ZShjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0Owog
CiAgICAgdm9pZCByZW1vdmUoY29uc3QgU3RyaW5nJiBuYW1lKTsKIAotICAgIHZvaWQgd3JpdGVK
U09OKFN0cmluZ0J1aWxkZXImIG91dHB1dCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCB3cml0
ZUpTT04oU3RyaW5nQnVpbGRlciYgb3V0cHV0KSBjb25zdCBmaW5hbDsKIAogICAgIGl0ZXJhdG9y
IGJlZ2luKCkgeyByZXR1cm4gbV9tYXAuYmVnaW4oKTsgfQogICAgIGl0ZXJhdG9yIGVuZCgpIHsg
cmV0dXJuIG1fbWFwLmVuZCgpOyB9CiAgICAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7
IHJldHVybiBtX21hcC5iZWdpbigpOyB9CiAgICAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3Qg
eyByZXR1cm4gbV9tYXAuZW5kKCk7IH0KIAotICAgIGludCBzaXplKCkgY29uc3QgeyByZXR1cm4g
bV9tYXAuc2l6ZSgpOyB9CisgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWFw
LnNpemUoKTsgfQogCiBwcm90ZWN0ZWQ6CiAgICAgT2JqZWN0QmFzZSgpOwogCiBwcml2YXRlOgot
ICAgIERpY3Rpb25hcnkgbV9tYXA7Ci0gICAgVmVjdG9yPFN0cmluZz4gbV9vcmRlcjsKKyAgICBE
YXRhU3RvcmFnZSBtX21hcDsKKyAgICBPcmRlclN0b3JhZ2UgbV9vcmRlcjsKIH07CiAKIGNsYXNz
IE9iamVjdCA6IHB1YmxpYyBPYmplY3RCYXNlIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgV1RGX0VY
UE9SVF9QUklWQVRFIFJlZjxPYmplY3Q+IGNyZWF0ZSgpOwogCi0gICAgdXNpbmcgT2JqZWN0QmFz
ZTo6YXNPYmplY3Q7Ci0KICAgICAvLyBUaGlzIGNsYXNzIGV4cGVjdGVkIG5vbi1jeWNsaWMgdmFs
dWVzLCBhcyB3ZSBjYW5ub3Qgc2VyaWFsaXplIGN5Y2xlcyBpbiBKU09OLgogICAgIHVzaW5nIE9i
amVjdEJhc2U6OnNldEJvb2xlYW47CiAgICAgdXNpbmcgT2JqZWN0QmFzZTo6c2V0SW50ZWdlcjsK
QEAgLTI3NCw3ICsyMzUsNiBAQCBwdWJsaWM6CiAgICAgdXNpbmcgT2JqZWN0QmFzZTo6Z2V0Qm9v
bGVhbjsKICAgICB1c2luZyBPYmplY3RCYXNlOjpnZXRJbnRlZ2VyOwogICAgIHVzaW5nIE9iamVj
dEJhc2U6OmdldERvdWJsZTsKLSAgICB1c2luZyBPYmplY3RCYXNlOjpnZXROdW1iZXI7CiAgICAg
dXNpbmcgT2JqZWN0QmFzZTo6Z2V0U3RyaW5nOwogICAgIHVzaW5nIE9iamVjdEJhc2U6OmdldE9i
amVjdDsKICAgICB1c2luZyBPYmplY3RCYXNlOjpnZXRBcnJheTsKQEAgLTI5MCw0OSArMjUwLDQ5
IEBAIHB1YmxpYzoKIAogCiBjbGFzcyBXVEZfRVhQT1JUX1BSSVZBVEUgQXJyYXlCYXNlIDogcHVi
bGljIFZhbHVlIHsKK3ByaXZhdGU6CisgICAgdXNpbmcgRGF0YVN0b3JhZ2UgPSBWZWN0b3I8UmVm
PFZhbHVlPj47CisKIHB1YmxpYzoKLSAgICB0eXBlZGVmIFZlY3RvcjxSZWZQdHI8VmFsdWU+Pjo6
aXRlcmF0b3IgaXRlcmF0b3I7Ci0gICAgdHlwZWRlZiBWZWN0b3I8UmVmUHRyPFZhbHVlPj46OmNv
bnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOworICAgIHVzaW5nIGl0ZXJhdG9yID0gRGF0YVN0
b3JhZ2U6Oml0ZXJhdG9yOworICAgIHVzaW5nIGNvbnN0X2l0ZXJhdG9yID0gRGF0YVN0b3JhZ2U6
OmNvbnN0X2l0ZXJhdG9yOwogCi0gICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4g
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fbWFwLnNpemUoKSk7IH0KKyAgICBzaXplX3QgbGVuZ3Ro
KCkgY29uc3QgeyByZXR1cm4gbV9tYXAuc2l6ZSgpOyB9CiAKLSAgICBSZWZQdHI8VmFsdWU+IGdl
dChzaXplX3QgaW5kZXgpIGNvbnN0OworICAgIFJlZjxWYWx1ZT4gZ2V0KHNpemVfdCBpbmRleCkg
Y29uc3Q7CiAKICAgICBzaXplX3QgbWVtb3J5Q29zdCgpIGNvbnN0IGZpbmFsOwogCisgICAgUmVm
UHRyPEFycmF5PiBhc0FycmF5KCkgZmluYWw7CisKIHByb3RlY3RlZDoKICAgICB+QXJyYXlCYXNl
KCkgb3ZlcnJpZGU7CiAKLSAgICBib29sIGFzQXJyYXkoUmVmUHRyPEFycmF5PiYpIG92ZXJyaWRl
OwotCiAgICAgdm9pZCBwdXNoQm9vbGVhbihib29sKTsKICAgICB2b2lkIHB1c2hJbnRlZ2VyKGlu
dCk7CiAgICAgdm9pZCBwdXNoRG91YmxlKGRvdWJsZSk7CiAgICAgdm9pZCBwdXNoU3RyaW5nKGNv
bnN0IFN0cmluZyYpOwotICAgIHZvaWQgcHVzaFZhbHVlKFJlZlB0cjxWYWx1ZT4mJik7Ci0gICAg
dm9pZCBwdXNoT2JqZWN0KFJlZlB0cjxPYmplY3RCYXNlPiYmKTsKLSAgICB2b2lkIHB1c2hBcnJh
eShSZWZQdHI8QXJyYXlCYXNlPiYmKTsKLQotICAgIHZvaWQgd3JpdGVKU09OKFN0cmluZ0J1aWxk
ZXImIG91dHB1dCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBwdXNoVmFsdWUoUmVmPFZhbHVl
PiYmKTsKKyAgICB2b2lkIHB1c2hPYmplY3QoUmVmPE9iamVjdEJhc2U+JiYpOworICAgIHZvaWQg
cHVzaEFycmF5KFJlZjxBcnJheUJhc2U+JiYpOwogCiAgICAgaXRlcmF0b3IgYmVnaW4oKSB7IHJl
dHVybiBtX21hcC5iZWdpbigpOyB9CiAgICAgaXRlcmF0b3IgZW5kKCkgeyByZXR1cm4gbV9tYXAu
ZW5kKCk7IH0KICAgICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fbWFw
LmJlZ2luKCk7IH0KICAgICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBtX21h
cC5lbmQoKTsgfQorICAgIHZvaWQgd3JpdGVKU09OKFN0cmluZ0J1aWxkZXImIG91dHB1dCkgY29u
c3QgZmluYWw7CiAKIHByb3RlY3RlZDoKICAgICBBcnJheUJhc2UoKTsKIAogcHJpdmF0ZToKLSAg
ICBWZWN0b3I8UmVmUHRyPFZhbHVlPj4gbV9tYXA7CisgICAgRGF0YVN0b3JhZ2UgbV9tYXA7CiB9
OwogCi1jbGFzcyBBcnJheSA6IHB1YmxpYyBBcnJheUJhc2UgeworY2xhc3MgQXJyYXkgZmluYWwg
OiBwdWJsaWMgQXJyYXlCYXNlIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgV1RGX0VYUE9SVF9QUklW
QVRFIFJlZjxBcnJheT4gY3JlYXRlKCk7CiAKLSAgICB1c2luZyBBcnJheUJhc2U6OmFzQXJyYXk7
Ci0KICAgICAvLyBUaGlzIGNsYXNzIGV4cGVjdGVkIG5vbi1jeWNsaWMgdmFsdWVzLCBhcyB3ZSBj
YW5ub3Qgc2VyaWFsaXplIGN5Y2xlcyBpbiBKU09OLgogICAgIHVzaW5nIEFycmF5QmFzZTo6cHVz
aEJvb2xlYW47CiAgICAgdXNpbmcgQXJyYXlCYXNlOjpwdXNoSW50ZWdlcjsKQEAgLTM0OCw3ICsz
MDgsNiBAQCBwdWJsaWM6CiAgICAgdXNpbmcgQXJyYXlCYXNlOjplbmQ7CiB9OwogCi0KIGlubGlu
ZSBPYmplY3RCYXNlOjppdGVyYXRvciBPYmplY3RCYXNlOjpmaW5kKGNvbnN0IFN0cmluZyYgbmFt
ZSkKIHsKICAgICByZXR1cm4gbV9tYXAuZmluZChuYW1lKTsKQEAgLTM3OSwyMyArMzM4LDIwIEBA
IGlubGluZSB2b2lkIE9iamVjdEJhc2U6OnNldFN0cmluZyhjb25zdCBTdHJpbmcmIG5hbWUsIGNv
bnN0IFN0cmluZyYgdmFsdWUpCiAgICAgc2V0VmFsdWUobmFtZSwgVmFsdWU6OmNyZWF0ZSh2YWx1
ZSkpOwogfQogCi1pbmxpbmUgdm9pZCBPYmplY3RCYXNlOjpzZXRWYWx1ZShjb25zdCBTdHJpbmcm
IG5hbWUsIFJlZlB0cjxWYWx1ZT4mJiB2YWx1ZSkKK2lubGluZSB2b2lkIE9iamVjdEJhc2U6OnNl
dFZhbHVlKGNvbnN0IFN0cmluZyYgbmFtZSwgUmVmPFZhbHVlPiYmIHZhbHVlKQogewotICAgIEFT
U0VSVCh2YWx1ZSk7CiAgICAgaWYgKG1fbWFwLnNldChuYW1lLCBXVEZNb3ZlKHZhbHVlKSkuaXNO
ZXdFbnRyeSkKICAgICAgICAgbV9vcmRlci5hcHBlbmQobmFtZSk7CiB9CiAKLWlubGluZSB2b2lk
IE9iamVjdEJhc2U6OnNldE9iamVjdChjb25zdCBTdHJpbmcmIG5hbWUsIFJlZlB0cjxPYmplY3RC
YXNlPiYmIHZhbHVlKQoraW5saW5lIHZvaWQgT2JqZWN0QmFzZTo6c2V0T2JqZWN0KGNvbnN0IFN0
cmluZyYgbmFtZSwgUmVmPE9iamVjdEJhc2U+JiYgdmFsdWUpCiB7Ci0gICAgQVNTRVJUKHZhbHVl
KTsKICAgICBpZiAobV9tYXAuc2V0KG5hbWUsIFdURk1vdmUodmFsdWUpKS5pc05ld0VudHJ5KQog
ICAgICAgICBtX29yZGVyLmFwcGVuZChuYW1lKTsKIH0KIAotaW5saW5lIHZvaWQgT2JqZWN0QmFz
ZTo6c2V0QXJyYXkoY29uc3QgU3RyaW5nJiBuYW1lLCBSZWZQdHI8QXJyYXlCYXNlPiYmIHZhbHVl
KQoraW5saW5lIHZvaWQgT2JqZWN0QmFzZTo6c2V0QXJyYXkoY29uc3QgU3RyaW5nJiBuYW1lLCBS
ZWY8QXJyYXlCYXNlPiYmIHZhbHVlKQogewotICAgIEFTU0VSVCh2YWx1ZSk7CiAgICAgaWYgKG1f
bWFwLnNldChuYW1lLCBXVEZNb3ZlKHZhbHVlKSkuaXNOZXdFbnRyeSkKICAgICAgICAgbV9vcmRl
ci5hcHBlbmQobmFtZSk7CiB9CkBAIC00MjAsMjYgKzM3NiwyMyBAQCBpbmxpbmUgdm9pZCBBcnJh
eUJhc2U6OnB1c2hTdHJpbmcoY29uc3QgU3RyaW5nJiB2YWx1ZSkKICAgICBtX21hcC5hcHBlbmQo
VmFsdWU6OmNyZWF0ZSh2YWx1ZSkpOwogfQogCi1pbmxpbmUgdm9pZCBBcnJheUJhc2U6OnB1c2hW
YWx1ZShSZWZQdHI8VmFsdWU+JiYgdmFsdWUpCitpbmxpbmUgdm9pZCBBcnJheUJhc2U6OnB1c2hW
YWx1ZShSZWY8VmFsdWU+JiYgdmFsdWUpCiB7Ci0gICAgQVNTRVJUKHZhbHVlKTsKICAgICBtX21h
cC5hcHBlbmQoV1RGTW92ZSh2YWx1ZSkpOwogfQogCi1pbmxpbmUgdm9pZCBBcnJheUJhc2U6OnB1
c2hPYmplY3QoUmVmUHRyPE9iamVjdEJhc2U+JiYgdmFsdWUpCitpbmxpbmUgdm9pZCBBcnJheUJh
c2U6OnB1c2hPYmplY3QoUmVmPE9iamVjdEJhc2U+JiYgdmFsdWUpCiB7Ci0gICAgQVNTRVJUKHZh
bHVlKTsKICAgICBtX21hcC5hcHBlbmQoV1RGTW92ZSh2YWx1ZSkpOwogfQogCi1pbmxpbmUgdm9p
ZCBBcnJheUJhc2U6OnB1c2hBcnJheShSZWZQdHI8QXJyYXlCYXNlPiYmIHZhbHVlKQoraW5saW5l
IHZvaWQgQXJyYXlCYXNlOjpwdXNoQXJyYXkoUmVmPEFycmF5QmFzZT4mJiB2YWx1ZSkKIHsKLSAg
ICBBU1NFUlQodmFsdWUpOwogICAgIG1fbWFwLmFwcGVuZChXVEZNb3ZlKHZhbHVlKSk7CiB9CiAK
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1jbGFzcyBBcnJheU9mIDogcHVibGljIEFycmF5QmFzZSB7
CitjbGFzcyBBcnJheU9mIGZpbmFsIDogcHVibGljIEFycmF5QmFzZSB7CiBwcml2YXRlOgogICAg
IEFycmF5T2YoKSB7IH0KIApAQCAtNDUwLDcgKzQwMyw3IEBAIHByaXZhdGU6CiAgICAgfQogCiBw
dWJsaWM6Ci0gICAgdm9pZCBhZGRJdGVtKFJlZlB0cjxUPiYmIHZhbHVlKQorICAgIHZvaWQgYWRk
SXRlbShSZWY8VD4mJiB2YWx1ZSkKICAgICB7CiAgICAgICAgIGNhc3RlZEFycmF5KCkucHVzaFZh
bHVlKFdURk1vdmUodmFsdWUpKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2FwcGxpY2F0aW9ubWFuaWZlc3QvQXBwbGljYXRpb25NYW5pZmVzdFBhcnNlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2FwcGxpY2F0aW9ubWFuaWZlc3QvQXBwbGljYXRpb25N
YW5pZmVzdFBhcnNlci5jcHAKaW5kZXggOGRjNzZmYTJlNTllYTY3ZTAyMTczOGMzMTFhMzU3N2Y0
ZDM2ZTY5MS4uZjg4Y2FkYTY2MGYzOWFkZWZhMDA2ZDA5NWVjNTg3ZmIyOTM0NjIwZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9hcHBsaWNhdGlvbm1hbmlmZXN0L0FwcGxpY2F0
aW9uTWFuaWZlc3RQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvYXBwbGlj
YXRpb25tYW5pZmVzdC9BcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyLmNwcApAQCAtNTQsMTQgKzU0
LDE0IEBAIEFwcGxpY2F0aW9uTWFuaWZlc3QgQXBwbGljYXRpb25NYW5pZmVzdFBhcnNlcjo6cGFy
c2VNYW5pZmVzdChjb25zdCBTdHJpbmcmIHRleHQsCiB7CiAgICAgbV9tYW5pZmVzdFVSTCA9IG1h
bmlmZXN0VVJMOwogCi0gICAgUmVmUHRyPEpTT046OlZhbHVlPiBqc29uVmFsdWU7Ci0gICAgaWYg
KCFKU09OOjpWYWx1ZTo6cGFyc2VKU09OKHRleHQsIGpzb25WYWx1ZSkpIHsKKyAgICBhdXRvIGpz
b25WYWx1ZSA9IEpTT046OlZhbHVlOjpwYXJzZUpTT04odGV4dCk7CisgICAgaWYgKCFqc29uVmFs
dWUpIHsKICAgICAgICAgbG9nRGV2ZWxvcGVyV2FybmluZygiVGhlIG1hbmlmZXN0IGlzIG5vdCB2
YWxpZCBKU09OIGRhdGEuIl9zKTsKICAgICAgICAganNvblZhbHVlID0gSlNPTjo6T2JqZWN0Ojpj
cmVhdGUoKTsKICAgICB9CiAKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBtYW5pZmVzdDsKLSAg
ICBpZiAoIWpzb25WYWx1ZS0+YXNPYmplY3QobWFuaWZlc3QpKSB7CisgICAgYXV0byBtYW5pZmVz
dCA9IGpzb25WYWx1ZS0+YXNPYmplY3QoKTsKKyAgICBpZiAoIW1hbmlmZXN0KSB7CiAgICAgICAg
IGxvZ0RldmVsb3Blcldhcm5pbmcoIlRoZSBtYW5pZmVzdCBpcyBub3QgYSBKU09OIHZhbHVlIG9m
IHR5cGUgXCJvYmplY3RcIi4iX3MpOwogICAgICAgICBtYW5pZmVzdCA9IEpTT046Ok9iamVjdDo6
Y3JlYXRlKCk7CiAgICAgfQpAQCAtOTYsMTIgKzk2LDEyIEBAIHZvaWQgQXBwbGljYXRpb25NYW5p
ZmVzdFBhcnNlcjo6bG9nRGV2ZWxvcGVyV2FybmluZyhjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCiAK
IFVSTCBBcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyOjpwYXJzZVN0YXJ0VVJMKGNvbnN0IEpTT046
Ok9iamVjdCYgbWFuaWZlc3QsIGNvbnN0IFVSTCYgZG9jdW1lbnRVUkwpCiB7Ci0gICAgUmVmUHRy
PEpTT046OlZhbHVlPiB2YWx1ZTsKLSAgICBpZiAoIW1hbmlmZXN0LmdldFZhbHVlKCJzdGFydF91
cmwiLCB2YWx1ZSkpCisgICAgYXV0byB2YWx1ZSA9IG1hbmlmZXN0LmdldFZhbHVlKCJzdGFydF91
cmwiX3MpOworICAgIGlmICghdmFsdWUpCiAgICAgICAgIHJldHVybiBkb2N1bWVudFVSTDsKIAot
ICAgIFN0cmluZyBzdHJpbmdWYWx1ZTsKLSAgICBpZiAoIXZhbHVlLT5hc1N0cmluZyhzdHJpbmdW
YWx1ZSkpIHsKKyAgICBhdXRvIHN0cmluZ1ZhbHVlID0gdmFsdWUtPmFzU3RyaW5nKCk7CisgICAg
aWYgKCFzdHJpbmdWYWx1ZSkgewogICAgICAgICBsb2dNYW5pZmVzdFByb3BlcnR5Tm90QVN0cmlu
Zygic3RhcnRfdXJsIl9zKTsKICAgICAgICAgcmV0dXJuIGRvY3VtZW50VVJMOwogICAgIH0KQEAg
LTEyNywxMiArMTI3LDEyIEBAIFVSTCBBcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyOjpwYXJzZVN0
YXJ0VVJMKGNvbnN0IEpTT046Ok9iamVjdCYgbWFuaWZlc3QsIGNvbnN0CiAKIEFwcGxpY2F0aW9u
TWFuaWZlc3Q6OkRpc3BsYXkgQXBwbGljYXRpb25NYW5pZmVzdFBhcnNlcjo6cGFyc2VEaXNwbGF5
KGNvbnN0IEpTT046Ok9iamVjdCYgbWFuaWZlc3QpCiB7Ci0gICAgUmVmUHRyPEpTT046OlZhbHVl
PiB2YWx1ZTsKLSAgICBpZiAoIW1hbmlmZXN0LmdldFZhbHVlKCJkaXNwbGF5Il9zLCB2YWx1ZSkp
CisgICAgYXV0byB2YWx1ZSA9IG1hbmlmZXN0LmdldFZhbHVlKCJkaXNwbGF5Il9zKTsKKyAgICBp
ZiAoIXZhbHVlKQogICAgICAgICByZXR1cm4gQXBwbGljYXRpb25NYW5pZmVzdDo6RGlzcGxheTo6
QnJvd3NlcjsKIAotICAgIFN0cmluZyBzdHJpbmdWYWx1ZTsKLSAgICBpZiAoIXZhbHVlLT5hc1N0
cmluZyhzdHJpbmdWYWx1ZSkpIHsKKyAgICBhdXRvIHN0cmluZ1ZhbHVlID0gdmFsdWUtPmFzU3Ry
aW5nKCk7CisgICAgaWYgKCFzdHJpbmdWYWx1ZSkgewogICAgICAgICBsb2dNYW5pZmVzdFByb3Bl
cnR5Tm90QVN0cmluZygiZGlzcGxheSJfcyk7CiAgICAgICAgIHJldHVybiBBcHBsaWNhdGlvbk1h
bmlmZXN0OjpEaXNwbGF5OjpCcm93c2VyOwogICAgIH0KQEAgLTE5NSwxMiArMTk1LDEyIEBAIFVS
TCBBcHBsaWNhdGlvbk1hbmlmZXN0UGFyc2VyOjpwYXJzZVNjb3BlKGNvbnN0IEpTT046Ok9iamVj
dCYgbWFuaWZlc3QsIGNvbnN0IFVSCiB7CiAgICAgVVJMIGRlZmF1bHRTY29wZSB7IHN0YXJ0VVJM
LCAiLi8iIH07CiAKLSAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHZhbHVlOwotICAgIGlmICghbWFu
aWZlc3QuZ2V0VmFsdWUoInNjb3BlIiwgdmFsdWUpKQorICAgIGF1dG8gdmFsdWUgPSBtYW5pZmVz
dC5nZXRWYWx1ZSgic2NvcGUiKTsKKyAgICBpZiAoIXZhbHVlKQogICAgICAgICByZXR1cm4gZGVm
YXVsdFNjb3BlOwogCi0gICAgU3RyaW5nIHN0cmluZ1ZhbHVlOwotICAgIGlmICghdmFsdWUtPmFz
U3RyaW5nKHN0cmluZ1ZhbHVlKSkgeworICAgIGF1dG8gc3RyaW5nVmFsdWUgPSB2YWx1ZS0+YXNT
dHJpbmcoKTsKKyAgICBpZiAoIXN0cmluZ1ZhbHVlKSB7CiAgICAgICAgIGxvZ01hbmlmZXN0UHJv
cGVydHlOb3RBU3RyaW5nKCJzY29wZSJfcyk7CiAgICAgICAgIHJldHVybiBkZWZhdWx0U2NvcGU7
CiAgICAgfQpAQCAtMjMxLDEyICsyMzEsMTIgQEAgVVJMIEFwcGxpY2F0aW9uTWFuaWZlc3RQYXJz
ZXI6OnBhcnNlU2NvcGUoY29uc3QgSlNPTjo6T2JqZWN0JiBtYW5pZmVzdCwgY29uc3QgVVIKIAog
U3RyaW5nIEFwcGxpY2F0aW9uTWFuaWZlc3RQYXJzZXI6OnBhcnNlR2VuZXJpY1N0cmluZyhjb25z
dCBKU09OOjpPYmplY3QmIG1hbmlmZXN0LCBjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSkKIHsK
LSAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHZhbHVlOwotICAgIGlmICghbWFuaWZlc3QuZ2V0VmFs
dWUocHJvcGVydHlOYW1lLCB2YWx1ZSkpCisgICAgYXV0byB2YWx1ZSA9IG1hbmlmZXN0LmdldFZh
bHVlKHByb3BlcnR5TmFtZSk7CisgICAgaWYgKCF2YWx1ZSkKICAgICAgICAgcmV0dXJuIHsgfTsK
IAotICAgIFN0cmluZyBzdHJpbmdWYWx1ZTsKLSAgICBpZiAoIXZhbHVlLT5hc1N0cmluZyhzdHJp
bmdWYWx1ZSkpIHsKKyAgICBhdXRvIHN0cmluZ1ZhbHVlID0gdmFsdWUtPmFzU3RyaW5nKCk7Cisg
ICAgaWYgKCFzdHJpbmdWYWx1ZSkgewogICAgICAgICBsb2dNYW5pZmVzdFByb3BlcnR5Tm90QVN0
cmluZyhwcm9wZXJ0eU5hbWUpOwogICAgICAgICByZXR1cm4geyB9OwogICAgIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvZW5jcnlwdGVkbWVkaWEvSW5pdERhdGFSZWdpc3Ry
eS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2VuY3J5cHRlZG1lZGlhL0luaXREYXRhUmVn
aXN0cnkuY3BwCmluZGV4IDNiMjVkMDZiMTIzYTFhNTFhMGEyYWNmYjRmNjU2ZjhkOTRhZGIzZmMu
LjZhYjJmODc4YTNmOGNhOThlODJiMGU0MmU1ZjBiYWFhMjI4YjFjNWMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvZW5jcnlwdGVkbWVkaWEvSW5pdERhdGFSZWdpc3RyeS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9lbmNyeXB0ZWRtZWRpYS9Jbml0RGF0YVJlZ2lz
dHJ5LmNwcApAQCAtNjIsMjIgKzYyLDIyIEBAIHN0YXRpYyBPcHRpb25hbDxWZWN0b3I8UmVmPFNo
YXJlZEJ1ZmZlcj4+PiBleHRyYWN0S2V5SURzS2V5aWRzKGNvbnN0IFNoYXJlZEJ1ZmZlCiAgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgU3RyaW5nIGpzb24geyBidWZmZXIuZGF0YSgp
LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oYnVmZmVyLnNpemUoKSkgfTsKIAotICAgIFJlZlB0cjxK
U09OOjpWYWx1ZT4gdmFsdWU7Ci0gICAgaWYgKCFKU09OOjpWYWx1ZTo6cGFyc2VKU09OKGpzb24s
IHZhbHVlKSkKKyAgICBhdXRvIHZhbHVlID0gSlNPTjo6VmFsdWU6OnBhcnNlSlNPTihqc29uKTsK
KyAgICBpZiAoIXZhbHVlKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgUmVm
UHRyPEpTT046Ok9iamVjdD4gb2JqZWN0OwotICAgIGlmICghdmFsdWUtPmFzT2JqZWN0KG9iamVj
dCkpCisgICAgYXV0byBvYmplY3QgPSB2YWx1ZS0+YXNPYmplY3QoKTsKKyAgICBpZiAoIW9iamVj
dCkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIFJlZlB0cjxKU09OOjpBcnJh
eT4ga2lkc0FycmF5OwotICAgIGlmICghb2JqZWN0LT5nZXRBcnJheSgia2lkcyIsIGtpZHNBcnJh
eSkpCisgICAgYXV0byBraWRzQXJyYXkgPSBvYmplY3QtPmdldEFycmF5KCJraWRzIl9zKTsKKyAg
ICBpZiAoIWtpZHNBcnJheSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIFZl
Y3RvcjxSZWY8U2hhcmVkQnVmZmVyPj4ga2V5SURzOwogICAgIGZvciAoYXV0byYgdmFsdWUgOiAq
a2lkc0FycmF5KSB7Ci0gICAgICAgIFN0cmluZyBrZXlJRDsKLSAgICAgICAgaWYgKCF2YWx1ZS0+
YXNTdHJpbmcoa2V5SUQpKQorICAgICAgICBhdXRvIGtleUlEID0gdmFsdWUtPmFzU3RyaW5nKCk7
CisgICAgICAgIGlmICgha2V5SUQpCiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBW
ZWN0b3I8Y2hhcj4ga2V5SUREYXRhOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0NvbW1hbmRMaW5lQVBJSG9zdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29t
bWFuZExpbmVBUElIb3N0LmNwcAppbmRleCBkY2UzNTllNzY4ZWY5YTEzYTZjNmRlMTZkMWY4ZDNj
OGJiZmY3YTk3Li45NGQwM2Q4NWQ2ZGE5ZjRmODhmOGNkMTJlNGJmZmJkMzNiNGRjNTY3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29tbWFuZExpbmVBUElIb3N0LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvQ29tbWFuZExpbmVBUElIb3N0LmNwcApAQCAt
NzMsNyArNzMsNyBAQCB2b2lkIENvbW1hbmRMaW5lQVBJSG9zdDo6ZGlzY29ubmVjdCgpCiAgICAg
bV9pbnN0cnVtZW50aW5nQWdlbnRzID0gbnVsbHB0cjsKIH0KIAotdm9pZCBDb21tYW5kTGluZUFQ
SUhvc3Q6Omluc3BlY3QoSlNDOjpKU0dsb2JhbE9iamVjdCYgbGV4aWNhbEdsb2JhbE9iamVjdCwg
SlNDOjpKU1ZhbHVlIHZhbHVlVG9JbnNwZWN0LCBKU0M6OkpTVmFsdWUgaGludHNWYWx1ZSkKK3Zv
aWQgQ29tbWFuZExpbmVBUElIb3N0OjppbnNwZWN0KEpTQzo6SlNHbG9iYWxPYmplY3QmIGxleGlj
YWxHbG9iYWxPYmplY3QsIEpTQzo6SlNWYWx1ZSBvYmplY3QsIEpTQzo6SlNWYWx1ZSBoaW50cykK
IHsKICAgICBpZiAoIW1faW5zdHJ1bWVudGluZ0FnZW50cykKICAgICAgICAgcmV0dXJuOwpAQCAt
ODIsMTIgKzgyLDIwIEBAIHZvaWQgQ29tbWFuZExpbmVBUElIb3N0OjppbnNwZWN0KEpTQzo6SlNH
bG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpTQzo6CiAgICAgaWYgKCFpbnNwZWN0
b3JBZ2VudCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gaGlu
dHNPYmplY3Q7Ci0gICAgaWYgKCFJbnNwZWN0b3I6OnRvSW5zcGVjdG9yVmFsdWUoJmxleGljYWxH
bG9iYWxPYmplY3QsIGhpbnRzVmFsdWUpLT5hc09iamVjdChoaW50c09iamVjdCkpCisgICAgYXV0
byBvYmplY3RWYWx1ZSA9IEluc3BlY3Rvcjo6dG9JbnNwZWN0b3JWYWx1ZSgmbGV4aWNhbEdsb2Jh
bE9iamVjdCwgb2JqZWN0KTsKKyAgICBpZiAoIW9iamVjdFZhbHVlKQogICAgICAgICByZXR1cm47
CiAKLSAgICBhdXRvIHJlbW90ZU9iamVjdCA9IEJpbmRpbmdUcmFpdHM8SW5zcGVjdG9yOjpQcm90
b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0Pjo6cnVudGltZUNhc3QoSW5zcGVjdG9yOjp0b0lu
c3BlY3RvclZhbHVlKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCB2YWx1ZVRvSW5zcGVjdCkpOwotICAg
IGluc3BlY3RvckFnZW50LT5pbnNwZWN0KFdURk1vdmUocmVtb3RlT2JqZWN0KSwgV1RGTW92ZSho
aW50c09iamVjdCkpOworICAgIGF1dG8gaGludHNWYWx1ZSA9IEluc3BlY3Rvcjo6dG9JbnNwZWN0
b3JWYWx1ZSgmbGV4aWNhbEdsb2JhbE9iamVjdCwgaGludHMpOworICAgIGlmICghaGludHNWYWx1
ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byBoaW50c09iamVjdCA9IGhpbnRzVmFsdWUt
PmFzT2JqZWN0KCk7CisgICAgaWYgKCFoaW50c09iamVjdCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgYXV0byByZW1vdGVPYmplY3QgPSBQcm90b2NvbDo6QmluZGluZ1RyYWl0czxQcm90b2NvbDo6
UnVudGltZTo6UmVtb3RlT2JqZWN0Pjo6cnVudGltZUNhc3Qob2JqZWN0VmFsdWUucmVsZWFzZU5v
bk51bGwoKSk7CisgICAgaW5zcGVjdG9yQWdlbnQtPmluc3BlY3QoV1RGTW92ZShyZW1vdGVPYmpl
Y3QpLCBoaW50c09iamVjdC5yZWxlYXNlTm9uTnVsbCgpKTsKIH0KIAogQ29tbWFuZExpbmVBUElI
b3N0OjpFdmVudExpc3RlbmVyc1JlY29yZCBDb21tYW5kTGluZUFQSUhvc3Q6OmdldEV2ZW50TGlz
dGVuZXJzKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBFdmVudFRhcmdldCYg
dGFyZ2V0KQpAQCAtMTM2LDggKzE0NCw3IEBAIHZvaWQgQ29tbWFuZExpbmVBUElIb3N0OjpjbGVh
ckNvbnNvbGVNZXNzYWdlcygpCiAgICAgaWYgKCFjb25zb2xlQWdlbnQpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIEVycm9yU3RyaW5nIGlnbm9yZWQ7Ci0gICAgY29uc29sZUFnZW50LT5jbGVhck1l
c3NhZ2VzKGlnbm9yZWQpOworICAgIGNvbnNvbGVBZ2VudC0+Y2xlYXJNZXNzYWdlcygpOwogfQog
CiB2b2lkIENvbW1hbmRMaW5lQVBJSG9zdDo6Y29weVRleHQoY29uc3QgU3RyaW5nJiB0ZXh0KQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckF1ZGl0UmVzb3Vy
Y2VzT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBdWRpdFJl
c291cmNlc09iamVjdC5jcHAKaW5kZXggMDAxNDhlMGZmNDk0NGFiZDA5MGI4MzZlYTkzMDVlY2Y3
NDhjNmZhNC4uYjdmZjBlMTA0YTU1MDY5MTZjY2ZhOWQyMzBjOGIyYmJiMzYzZGYzYSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckF1ZGl0UmVzb3VyY2VzT2Jq
ZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQXVkaXRSZXNv
dXJjZXNPYmplY3QuY3BwCkBAIC0xMDUsNyArMTA1LDcgQEAgRXhjZXB0aW9uT3I8SW5zcGVjdG9y
QXVkaXRSZXNvdXJjZXNPYmplY3Q6OlJlc291cmNlQ29udGVudD4gSW5zcGVjdG9yQXVkaXRSZXNv
dXIKICAgICBpZiAoIWNhY2hlZFJlc291cmNlKQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsg
Tm90Rm91bmRFcnJvciwgbWFrZVN0cmluZygiVW5rbm93biBpZGVudGlmaWVyICJfcywgaWQpIH07
CiAKLSAgICBFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJp
bmcgZXJyb3JTdHJpbmc7CiAgICAgUmVzb3VyY2VDb250ZW50IHJlc291cmNlQ29udGVudDsKICAg
ICBJbnNwZWN0b3JQYWdlQWdlbnQ6OnJlc291cmNlQ29udGVudChlcnJvclN0cmluZywgZnJhbWUs
IGNhY2hlZFJlc291cmNlLT51cmwoKSwgJnJlc291cmNlQ29udGVudC5kYXRhLCAmcmVzb3VyY2VD
b250ZW50LmJhc2U2NEVuY29kZWQpOwogICAgIGlmICghZXJyb3JTdHJpbmcuaXNFbXB0eSgpKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNhbnZhcy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzLmNwcAppbmRleCA1YzU3
YjYwNTc0ZWNhNTcyMmQxNTQ5OTJhZmRiZGM3NTVlNjMxOTlmLi5hNjFiOGVlZGEwNDE2Y2Y3ZjE1
NGFhMDExYzg2MGNlOGZiMGIzMjViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yQ2FudmFzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yQ2FudmFzLmNwcApAQCAtMzU2LDEzICszNTYsMTMgQEAgdm9pZCBJbnNwZWN0b3JDYW52
YXM6OnJlY29yZEFjdGlvbihjb25zdCBTdHJpbmcmIG5hbWUsIHN0ZDo6aW5pdGlhbGl6ZXJfbGlz
dDxSZWMKICAgICB9CiAKICAgICBpZiAoIW1fZnJhbWVzKQotICAgICAgICBtX2ZyYW1lcyA9IEpT
T046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6UmVjb3JkaW5nOjpGcmFtZT46OmNyZWF0
ZSgpOworICAgICAgICBtX2ZyYW1lcyA9IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlJlY29yZGlu
Zzo6RnJhbWU+OjpjcmVhdGUoKTsKIAogICAgIGlmICghbV9jdXJyZW50QWN0aW9ucykgewogICAg
ICAgICBtX2N1cnJlbnRBY3Rpb25zID0gSlNPTjo6QXJyYXlPZjxKU09OOjpWYWx1ZT46OmNyZWF0
ZSgpOwogCi0gICAgICAgIGF1dG8gZnJhbWUgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpSZWNvcmRp
bmc6OkZyYW1lOjpjcmVhdGUoKQotICAgICAgICAgICAgLnNldEFjdGlvbnMobV9jdXJyZW50QWN0
aW9ucykKKyAgICAgICAgYXV0byBmcmFtZSA9IFByb3RvY29sOjpSZWNvcmRpbmc6OkZyYW1lOjpj
cmVhdGUoKQorICAgICAgICAgICAgLnNldEFjdGlvbnMoKm1fY3VycmVudEFjdGlvbnMpCiAgICAg
ICAgICAgICAucmVsZWFzZSgpOwogCiAgICAgICAgIG1fZnJhbWVzLT5hZGRJdGVtKFdURk1vdmUo
ZnJhbWUpKTsKQEAgLTM3NSw3ICszNzUsNyBAQCB2b2lkIEluc3BlY3RvckNhbnZhczo6cmVjb3Jk
QWN0aW9uKGNvbnN0IFN0cmluZyYgbmFtZSwgc3RkOjppbml0aWFsaXplcl9saXN0PFJlYwogCiAg
ICAgbV9sYXN0UmVjb3JkZWRBY3Rpb24gPSBidWlsZEFjdGlvbihuYW1lLCBXVEZNb3ZlKHBhcmFt
ZXRlcnMpKTsKICAgICBtX2J1ZmZlclVzZWQgKz0gbV9sYXN0UmVjb3JkZWRBY3Rpb24tPm1lbW9y
eUNvc3QoKTsKLSAgICBtX2N1cnJlbnRBY3Rpb25zLT5hZGRJdGVtKG1fbGFzdFJlY29yZGVkQWN0
aW9uLmdldCgpKTsKKyAgICBtX2N1cnJlbnRBY3Rpb25zLT5hZGRJdGVtKCptX2xhc3RSZWNvcmRl
ZEFjdGlvbik7CiAKICAgICBhdXRvKiBjb250ZXh0ID0gY2FudmFzQ29udGV4dCgpOwogICAgIEFT
U0VSVChjb250ZXh0KTsKQEAgLTM5OCw3ICszOTgsNyBAQCB2b2lkIEluc3BlY3RvckNhbnZhczo6
ZmluYWxpemVGcmFtZSgpCiAgICAgYXBwZW5kQWN0aW9uU25hcHNob3RJZk5lZWRlZCgpOwogCiAg
ICAgaWYgKG1fZnJhbWVzICYmIG1fZnJhbWVzLT5sZW5ndGgoKSAmJiAhc3RkOjppc25hbihtX2N1
cnJlbnRGcmFtZVN0YXJ0VGltZSkpIHsKLSAgICAgICAgYXV0byBjdXJyZW50RnJhbWUgPSBzdGF0
aWNfY2FzdDxJbnNwZWN0b3I6OlByb3RvY29sOjpSZWNvcmRpbmc6OkZyYW1lKj4obV9mcmFtZXMt
PmdldChtX2ZyYW1lcy0+bGVuZ3RoKCkgLSAxKS5nZXQoKSk7CisgICAgICAgIGF1dG8gY3VycmVu
dEZyYW1lID0gc3RhdGljX3JlZmVyZW5jZV9jYXN0PFByb3RvY29sOjpSZWNvcmRpbmc6OkZyYW1l
PihtX2ZyYW1lcy0+Z2V0KG1fZnJhbWVzLT5sZW5ndGgoKSAtIDEpKTsKICAgICAgICAgY3VycmVu
dEZyYW1lLT5zZXREdXJhdGlvbigoTW9ub3RvbmljVGltZTo6bm93KCkgLSBtX2N1cnJlbnRGcmFt
ZVN0YXJ0VGltZSkubWlsbGlzZWNvbmRzKCkpOwogCiAgICAgICAgIG1fY3VycmVudEZyYW1lU3Rh
cnRUaW1lID0gTW9ub3RvbmljVGltZTo6bmFuKCk7CkBAIC00MTIsNyArNDEyLDggQEAgdm9pZCBJ
bnNwZWN0b3JDYW52YXM6Om1hcmtDdXJyZW50RnJhbWVJbmNvbXBsZXRlKCkKICAgICBpZiAoIW1f
Y3VycmVudEFjdGlvbnMgfHwgIW1fZnJhbWVzIHx8ICFtX2ZyYW1lcy0+bGVuZ3RoKCkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIHN0YXRpY19jYXN0PEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlY29y
ZGluZzo6RnJhbWUqPihtX2ZyYW1lcy0+Z2V0KG1fZnJhbWVzLT5sZW5ndGgoKSAtIDEpLmdldCgp
KS0+c2V0SW5jb21wbGV0ZSh0cnVlKTsKKyAgICBhdXRvIGN1cnJlbnRGcmFtZSA9IHN0YXRpY19y
ZWZlcmVuY2VfY2FzdDxQcm90b2NvbDo6UmVjb3JkaW5nOjpGcmFtZT4obV9mcmFtZXMtPmdldCht
X2ZyYW1lcy0+bGVuZ3RoKCkgLSAxKSk7CisgICAgY3VycmVudEZyYW1lLT5zZXRJbmNvbXBsZXRl
KHRydWUpOwogfQogCiB2b2lkIEluc3BlY3RvckNhbnZhczo6c2V0QnVmZmVyTGltaXQobG9uZyBt
ZW1vcnlMaW1pdCkKQEAgLTQzOCwyOSArNDM5LDI5IEBAIGJvb2wgSW5zcGVjdG9yQ2FudmFzOjpv
dmVyRnJhbWVDb3VudCgpIGNvbnN0CiAgICAgcmV0dXJuIG1fZnJhbWVDb3VudCAmJiBtX2ZyYW1l
c0NhcHR1cmVkID49IG1fZnJhbWVDb3VudC52YWx1ZSgpOwogfQogCi1SZWY8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6Q2FudmFzOjpDYW52YXM+IEluc3BlY3RvckNhbnZhczo6YnVpbGRPYmplY3RGb3JD
YW52YXMoYm9vbCBjYXB0dXJlQmFja3RyYWNlKQorUmVmPFByb3RvY29sOjpDYW52YXM6OkNhbnZh
cz4gSW5zcGVjdG9yQ2FudmFzOjpidWlsZE9iamVjdEZvckNhbnZhcyhib29sIGNhcHR1cmVCYWNr
dHJhY2UpCiB7Ci0gICAgdXNpbmcgQ29udGV4dFR5cGVUeXBlID0gT3B0aW9uYWw8SW5zcGVjdG9y
OjpQcm90b2NvbDo6Q2FudmFzOjpDb250ZXh0VHlwZT47CisgICAgdXNpbmcgQ29udGV4dFR5cGVU
eXBlID0gT3B0aW9uYWw8UHJvdG9jb2w6OkNhbnZhczo6Q29udGV4dFR5cGU+OwogICAgIGF1dG8g
Y29udGV4dFR5cGUgPSBXVEY6OnN3aXRjaE9uKG1fY29udGV4dCwKICAgICAgICAgW10gKHN0ZDo6
cmVmZXJlbmNlX3dyYXBwZXI8Q2FudmFzUmVuZGVyaW5nQ29udGV4dD4gY29udGV4dFdyYXBwZXIp
IC0+IENvbnRleHRUeXBlVHlwZSB7CiAgICAgICAgICAgICBhdXRvJiBjb250ZXh0ID0gY29udGV4
dFdyYXBwZXIuZ2V0KCk7CiAgICAgICAgICAgICBpZiAoaXM8Q2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEPihjb250ZXh0KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2Nv
bDo6Q2FudmFzOjpDb250ZXh0VHlwZTo6Q2FudmFzMkQ7CisgICAgICAgICAgICAgICAgcmV0dXJu
IFByb3RvY29sOjpDYW52YXM6OkNvbnRleHRUeXBlOjpDYW52YXMyRDsKICAgICAgICAgICAgIGlm
IChpczxJbWFnZUJpdG1hcFJlbmRlcmluZ0NvbnRleHQ+KGNvbnRleHQpKQotICAgICAgICAgICAg
ICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpDYW52YXM6OkNvbnRleHRUeXBlOjpCaXRt
YXBSZW5kZXJlcjsKKyAgICAgICAgICAgICAgICByZXR1cm4gUHJvdG9jb2w6OkNhbnZhczo6Q29u
dGV4dFR5cGU6OkJpdG1hcFJlbmRlcmVyOwogI2lmIEVOQUJMRShXRUJHTCkKICAgICAgICAgICAg
IGlmIChpczxXZWJHTFJlbmRlcmluZ0NvbnRleHQ+KGNvbnRleHQpKQotICAgICAgICAgICAgICAg
IHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpDYW52YXM6OkNvbnRleHRUeXBlOjpXZWJHTDsK
KyAgICAgICAgICAgICAgICByZXR1cm4gUHJvdG9jb2w6OkNhbnZhczo6Q29udGV4dFR5cGU6Oldl
YkdMOwogI2VuZGlmCiAjaWYgRU5BQkxFKFdFQkdMMikKICAgICAgICAgICAgIGlmIChpczxXZWJH
TDJSZW5kZXJpbmdDb250ZXh0Pihjb250ZXh0KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gSW5z
cGVjdG9yOjpQcm90b2NvbDo6Q2FudmFzOjpDb250ZXh0VHlwZTo6V2ViR0wyOworICAgICAgICAg
ICAgICAgIHJldHVybiBQcm90b2NvbDo6Q2FudmFzOjpDb250ZXh0VHlwZTo6V2ViR0wyOwogI2Vu
ZGlmCiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAgICB9LAogI2lmIEVO
QUJMRShXRUJHUFUpCiAgICAgICAgIFtdIChzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFdlYkdQVURl
dmljZT4pIHsKLSAgICAgICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpDYW52YXM6
OkNvbnRleHRUeXBlOjpXZWJHUFU7CisgICAgICAgICAgICByZXR1cm4gUHJvdG9jb2w6OkNhbnZh
czo6Q29udGV4dFR5cGU6OldlYkdQVTsKICAgICAgICAgfSwKICNlbmRpZgogICAgICAgICBbXSAo
TW9ub3N0YXRlKSB7CkBAIC00NzAsMTAgKzQ3MSwxMCBAQCBSZWY8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6Q2FudmFzOjpDYW52YXM+IEluc3BlY3RvckNhbnZhczo6YnVpbGRPYmplY3RGb3JDYW52YXMo
YgogICAgICk7CiAgICAgaWYgKCFjb250ZXh0VHlwZSkgewogICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICAgICAgY29udGV4dFR5cGUgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpDYW52
YXM6OkNvbnRleHRUeXBlOjpDYW52YXMyRDsKKyAgICAgICAgY29udGV4dFR5cGUgPSBQcm90b2Nv
bDo6Q2FudmFzOjpDb250ZXh0VHlwZTo6Q2FudmFzMkQ7CiAgICAgfQogCi0gICAgYXV0byBjYW52
YXMgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpDYW52YXM6OkNhbnZhczo6Y3JlYXRlKCkKKyAgICBh
dXRvIGNhbnZhcyA9IFByb3RvY29sOjpDYW52YXM6OkNhbnZhczo6Y3JlYXRlKCkKICAgICAgICAg
LnNldENhbnZhc0lkKG1faWRlbnRpZmllcikKICAgICAgICAgLnNldENvbnRleHRUeXBlKGNvbnRl
eHRUeXBlLnZhbHVlKCkpCiAgICAgICAgIC5yZWxlYXNlKCk7CkBAIC00ODYsMTIgKzQ4NywxMiBA
QCBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q2FudmFzOjpDYW52YXM+IEluc3BlY3RvckNhbnZh
czo6YnVpbGRPYmplY3RGb3JDYW52YXMoYgogICAgICAgICAvLyBGSVhNRTogPGh0dHBzOi8vd2Vi
a2l0Lm9yZy9iLzE3ODI4Mj4gV2ViIEluc3BlY3Rvcjogc2VuZCBhIERPTSBub2RlIHdpdGggZWFj
aCBDYW52YXMgcGF5bG9hZCBhbmQgZWxpbWluYXRlIENhbnZhcy5yZXF1ZXN0Tm9kZQogICAgIH0K
IAotICAgIHVzaW5nIENvbnRleHRBdHRyaWJ1dGVzVHlwZSA9IFJlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpDYW52YXM6OkNvbnRleHRBdHRyaWJ1dGVzPjsKKyAgICB1c2luZyBDb250ZXh0QXR0
cmlidXRlc1R5cGUgPSBSZWZQdHI8UHJvdG9jb2w6OkNhbnZhczo6Q29udGV4dEF0dHJpYnV0ZXM+
OwogICAgIGF1dG8gY29udGV4dEF0dHJpYnV0ZXMgPSBXVEY6OnN3aXRjaE9uKG1fY29udGV4dCwK
ICAgICAgICAgW10gKHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8Q2FudmFzUmVuZGVyaW5nQ29udGV4
dD4gY29udGV4dFdyYXBwZXIpIC0+IENvbnRleHRBdHRyaWJ1dGVzVHlwZSB7CiAgICAgICAgICAg
ICBhdXRvJiBjb250ZXh0ID0gY29udGV4dFdyYXBwZXIuZ2V0KCk7CiAgICAgICAgICAgICBpZiAo
aXM8SW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0Pihjb250ZXh0KSkgewotICAgICAgICAgICAg
ICAgIGF1dG8gY29udGV4dEF0dHJpYnV0ZXNQYXlsb2FkID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6
Q2FudmFzOjpDb250ZXh0QXR0cmlidXRlczo6Y3JlYXRlKCkKKyAgICAgICAgICAgICAgICBhdXRv
IGNvbnRleHRBdHRyaWJ1dGVzUGF5bG9hZCA9IFByb3RvY29sOjpDYW52YXM6OkNvbnRleHRBdHRy
aWJ1dGVzOjpjcmVhdGUoKQogICAgICAgICAgICAgICAgICAgICAucmVsZWFzZSgpOwogICAgICAg
ICAgICAgICAgIGNvbnRleHRBdHRyaWJ1dGVzUGF5bG9hZC0+c2V0QWxwaGEoZG93bmNhc3Q8SW1h
Z2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0Pihjb250ZXh0KS5oYXNBbHBoYSgpKTsKICAgICAgICAg
ICAgICAgICByZXR1cm4gY29udGV4dEF0dHJpYnV0ZXNQYXlsb2FkOwpAQCAtNTAwLDcgKzUwMSw3
IEBAIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDYW52YXM6OkNhbnZhcz4gSW5zcGVjdG9yQ2Fu
dmFzOjpidWlsZE9iamVjdEZvckNhbnZhcyhiCiAjaWYgRU5BQkxFKFdFQkdMKQogICAgICAgICAg
ICAgaWYgKGlzPFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U+KGNvbnRleHQpKSB7CiAgICAgICAg
ICAgICAgICAgaWYgKGNvbnN0IGF1dG8mIGF0dHJpYnV0ZXMgPSBkb3duY2FzdDxXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlPihjb250ZXh0KS5nZXRDb250ZXh0QXR0cmlidXRlcygpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGF1dG8gY29udGV4dEF0dHJpYnV0ZXNQYXlsb2FkID0gSW5zcGVjdG9y
OjpQcm90b2NvbDo6Q2FudmFzOjpDb250ZXh0QXR0cmlidXRlczo6Y3JlYXRlKCkKKyAgICAgICAg
ICAgICAgICAgICAgYXV0byBjb250ZXh0QXR0cmlidXRlc1BheWxvYWQgPSBQcm90b2NvbDo6Q2Fu
dmFzOjpDb250ZXh0QXR0cmlidXRlczo6Y3JlYXRlKCkKICAgICAgICAgICAgICAgICAgICAgICAg
IC5yZWxlYXNlKCk7CiAgICAgICAgICAgICAgICAgICAgIGNvbnRleHRBdHRyaWJ1dGVzUGF5bG9h
ZC0+c2V0QWxwaGEoYXR0cmlidXRlcy0+YWxwaGEpOwogICAgICAgICAgICAgICAgICAgICBjb250
ZXh0QXR0cmlidXRlc1BheWxvYWQtPnNldERlcHRoKGF0dHJpYnV0ZXMtPmRlcHRoKTsKQEAgLTUz
MCw3ICs1MzEsNyBAQCBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q2FudmFzOjpDYW52YXM+IElu
c3BlY3RvckNhbnZhczo6YnVpbGRPYmplY3RGb3JDYW52YXMoYgogICAgICAgICBbXSAoc3RkOjpy
ZWZlcmVuY2Vfd3JhcHBlcjxXZWJHUFVEZXZpY2U+IGRldmljZVdyYXBwZXIpIC0+IENvbnRleHRB
dHRyaWJ1dGVzVHlwZSB7CiAgICAgICAgICAgICBhdXRvJiBkZXZpY2UgPSBkZXZpY2VXcmFwcGVy
LmdldCgpOwogICAgICAgICAgICAgaWYgKGNvbnN0IGF1dG8mIG9wdGlvbnMgPSBkZXZpY2UuYWRh
cHRlcigpLm9wdGlvbnMoKSkgewotICAgICAgICAgICAgICAgIGF1dG8gY29udGV4dEF0dHJpYnV0
ZXNQYXlsb2FkID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q2FudmFzOjpDb250ZXh0QXR0cmlidXRl
czo6Y3JlYXRlKCkKKyAgICAgICAgICAgICAgICBhdXRvIGNvbnRleHRBdHRyaWJ1dGVzUGF5bG9h
ZCA9IFByb3RvY29sOjpDYW52YXM6OkNvbnRleHRBdHRyaWJ1dGVzOjpjcmVhdGUoKQogICAgICAg
ICAgICAgICAgICAgICAucmVsZWFzZSgpOwogICAgICAgICAgICAgICAgIGlmIChjb25zdCBhdXRv
JiBwb3dlclByZWZlcmVuY2UgPSBvcHRpb25zLT5wb3dlclByZWZlcmVuY2UpIHsKICAgICAgICAg
ICAgICAgICAgICAgc3dpdGNoIChwb3dlclByZWZlcmVuY2UudmFsdWUoKSkgewpAQCAtNTU0LDcg
KzU1NSw3IEBAIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDYW52YXM6OkNhbnZhcz4gSW5zcGVj
dG9yQ2FudmFzOjpidWlsZE9iamVjdEZvckNhbnZhcyhiCiAgICAgICAgIH0KICAgICApOwogICAg
IGlmIChjb250ZXh0QXR0cmlidXRlcykKLSAgICAgICAgY2FudmFzLT5zZXRDb250ZXh0QXR0cmli
dXRlcyhXVEZNb3ZlKGNvbnRleHRBdHRyaWJ1dGVzKSk7CisgICAgICAgIGNhbnZhcy0+c2V0Q29u
dGV4dEF0dHJpYnV0ZXMoY29udGV4dEF0dHJpYnV0ZXMucmVsZWFzZU5vbk51bGwoKSk7CiAKICAg
ICAvLyBGSVhNRTogPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzE4MDgzMz4gV2ViIEluc3BlY3Rvcjog
c3VwcG9ydCBPZmZzY3JlZW5DYW52YXMgZm9yIENhbnZhcyByZWxhdGVkIG9wZXJhdGlvbnMKIApA
QCAtNTcxLDcgKzU3Miw3IEBAIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDYW52YXM6OkNhbnZh
cz4gSW5zcGVjdG9yQ2FudmFzOjpidWlsZE9iamVjdEZvckNhbnZhcyhiCiAgICAgcmV0dXJuIGNh
bnZhczsKIH0KIAotUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlY29yZGluZzo6UmVjb3JkaW5n
PiBJbnNwZWN0b3JDYW52YXM6OnJlbGVhc2VPYmplY3RGb3JSZWNvcmRpbmcoKQorUmVmPFByb3Rv
Y29sOjpSZWNvcmRpbmc6OlJlY29yZGluZz4gSW5zcGVjdG9yQ2FudmFzOjpyZWxlYXNlT2JqZWN0
Rm9yUmVjb3JkaW5nKCkKIHsKICAgICBBU1NFUlQoIW1fY3VycmVudEFjdGlvbnMpOwogICAgIEFT
U0VSVCghbV9sYXN0UmVjb3JkZWRBY3Rpb24pOwpAQCAtNTgxLDI2ICs1ODIsMjYgQEAgUmVmPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlJlY29yZGluZzo6UmVjb3JkaW5nPiBJbnNwZWN0b3JDYW52YXM6
OnJlbGVhc2VPYmplY3RGb3IKICAgICBBU1NFUlQoY29udGV4dCk7CiAgICAgLy8gRklYTUU6IDxo
dHRwczovL3dlYmtpdC5vcmcvYi8yMDE2NTE+IFdlYiBJbnNwZWN0b3I6IENhbnZhczogc3VwcG9y
dCBjYW52YXMgcmVjb3JkaW5ncyBmb3IgV2ViR1BVRGV2aWNlCiAKLSAgICBJbnNwZWN0b3I6OlBy
b3RvY29sOjpSZWNvcmRpbmc6OlR5cGUgdHlwZTsKKyAgICBQcm90b2NvbDo6UmVjb3JkaW5nOjpU
eXBlIHR5cGU7CiAgICAgaWYgKGlzPENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4oY29udGV4dCkp
Ci0gICAgICAgIHR5cGUgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpSZWNvcmRpbmc6OlR5cGU6OkNh
bnZhczJEOworICAgICAgICB0eXBlID0gUHJvdG9jb2w6OlJlY29yZGluZzo6VHlwZTo6Q2FudmFz
MkQ7CiAgICAgZWxzZSBpZiAoaXM8SW1hZ2VCaXRtYXBSZW5kZXJpbmdDb250ZXh0Pihjb250ZXh0
KSkKLSAgICAgICAgdHlwZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlY29yZGluZzo6VHlwZTo6
Q2FudmFzQml0bWFwUmVuZGVyZXI7CisgICAgICAgIHR5cGUgPSBQcm90b2NvbDo6UmVjb3JkaW5n
OjpUeXBlOjpDYW52YXNCaXRtYXBSZW5kZXJlcjsKICNpZiBFTkFCTEUoV0VCR0wpCiAgICAgZWxz
ZSBpZiAoaXM8V2ViR0xSZW5kZXJpbmdDb250ZXh0Pihjb250ZXh0KSkKLSAgICAgICAgdHlwZSA9
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJlY29yZGluZzo6VHlwZTo6Q2FudmFzV2ViR0w7CisgICAg
ICAgIHR5cGUgPSBQcm90b2NvbDo6UmVjb3JkaW5nOjpUeXBlOjpDYW52YXNXZWJHTDsKICNlbmRp
ZgogI2lmIEVOQUJMRShXRUJHTDIpCiAgICAgZWxzZSBpZiAoaXM8V2ViR0wyUmVuZGVyaW5nQ29u
dGV4dD4oY29udGV4dCkpCi0gICAgICAgIHR5cGUgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpSZWNv
cmRpbmc6OlR5cGU6OkNhbnZhc1dlYkdMMjsKKyAgICAgICAgdHlwZSA9IFByb3RvY29sOjpSZWNv
cmRpbmc6OlR5cGU6OkNhbnZhc1dlYkdMMjsKICNlbmRpZgogICAgIGVsc2UgewogICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgdHlwZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlJlY29yZGluZzo6VHlwZTo6Q2FudmFzMkQ7CisgICAgICAgIHR5cGUgPSBQcm90b2NvbDo6UmVj
b3JkaW5nOjpUeXBlOjpDYW52YXMyRDsKICAgICB9CiAKLSAgICBhdXRvIHJlY29yZGluZyA9IElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlJlY29yZGluZzo6UmVjb3JkaW5nOjpjcmVhdGUoKQotICAgICAg
ICAuc2V0VmVyc2lvbihJbnNwZWN0b3I6OlByb3RvY29sOjpSZWNvcmRpbmc6OlZFUlNJT04pCisg
ICAgYXV0byByZWNvcmRpbmcgPSBQcm90b2NvbDo6UmVjb3JkaW5nOjpSZWNvcmRpbmc6OmNyZWF0
ZSgpCisgICAgICAgIC5zZXRWZXJzaW9uKFByb3RvY29sOjpSZWNvcmRpbmc6OlZFUlNJT04pCiAg
ICAgICAgIC5zZXRUeXBlKHR5cGUpCiAgICAgICAgIC5zZXRJbml0aWFsU3RhdGUobV9pbml0aWFs
U3RhdGUucmVsZWFzZU5vbk51bGwoKSkKICAgICAgICAgLnNldERhdGEobV9zZXJpYWxpemVkRHVw
bGljYXRlRGF0YS5yZWxlYXNlTm9uTnVsbCgpKQpAQCAtNjE0LDcgKzYxNSw3IEBAIFJlZjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpSZWNvcmRpbmc6OlJlY29yZGluZz4gSW5zcGVjdG9yQ2FudmFzOjpy
ZWxlYXNlT2JqZWN0Rm9yCiAgICAgcmV0dXJuIHJlY29yZGluZzsKIH0KIAotU3RyaW5nIEluc3Bl
Y3RvckNhbnZhczo6Z2V0Q2FudmFzQ29udGVudEFzRGF0YVVSTChFcnJvclN0cmluZyYgZXJyb3JT
dHJpbmcpCitTdHJpbmcgSW5zcGVjdG9yQ2FudmFzOjpnZXRDYW52YXNDb250ZW50QXNEYXRhVVJM
KFByb3RvY29sOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCiB7CiAgICAgYXV0byogbm9kZSA9
IGNhbnZhc0VsZW1lbnQoKTsKICAgICBpZiAoIW5vZGUpIHsKQEAgLTY1MSw3ICs2NTIsNyBAQCB2
b2lkIEluc3BlY3RvckNhbnZhczo6YXBwZW5kQWN0aW9uU25hcHNob3RJZk5lZWRlZCgpCiAgICAg
aWYgKG1fY29udGVudENoYW5nZWQpIHsKICAgICAgICAgbV9idWZmZXJVc2VkIC09IG1fbGFzdFJl
Y29yZGVkQWN0aW9uLT5tZW1vcnlDb3N0KCk7CiAKLSAgICAgICAgRXJyb3JTdHJpbmcgaWdub3Jl
ZDsKKyAgICAgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGlnbm9yZWQ7CiAgICAgICAgIG1fbGFz
dFJlY29yZGVkQWN0aW9uLT5hZGRJdGVtKGluZGV4Rm9yRGF0YShnZXRDYW52YXNDb250ZW50QXNE
YXRhVVJMKGlnbm9yZWQpKSk7CiAKICAgICAgICAgbV9idWZmZXJVc2VkICs9IG1fbGFzdFJlY29y
ZGVkQWN0aW9uLT5tZW1vcnlDb3N0KCk7CkBAIC03NzUsNyArNzc2LDcgQEAgaW50IEluc3BlY3Rv
ckNhbnZhczo6aW5kZXhGb3JEYXRhKER1cGxpY2F0ZURhdGFWYXJpYW50IGRhdGEpCiAKICAgICBp
ZiAoaXRlbSkgewogICAgICAgICBtX2J1ZmZlclVzZWQgKz0gaXRlbS0+bWVtb3J5Q29zdCgpOwot
ICAgICAgICBtX3NlcmlhbGl6ZWREdXBsaWNhdGVEYXRhLT5hZGRJdGVtKFdURk1vdmUoaXRlbSkp
OworICAgICAgICBtX3NlcmlhbGl6ZWREdXBsaWNhdGVEYXRhLT5hZGRJdGVtKGl0ZW0ucmVsZWFz
ZU5vbk51bGwoKSk7CiAKICAgICAgICAgbV9pbmRleGVkRHVwbGljYXRlRGF0YS5hcHBlbmQoZGF0
YSk7CiAgICAgICAgIGluZGV4ID0gbV9pbmRleGVkRHVwbGljYXRlRGF0YS5zaXplKCkgLSAxOwpA
QCAtODEwLDEzICs4MTEsMTMgQEAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RhdGljIFJlZjxKU09O
OjpBcnJheU9mPEpTT046OlZhbHVlPj4gYnVpbGRBcnJheUZvclZlY3RvcigKICAgICByZXR1cm4g
YXJyYXk7CiB9CiAKLVJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpSZWNvcmRpbmc6OkluaXRpYWxT
dGF0ZT4gSW5zcGVjdG9yQ2FudmFzOjpidWlsZEluaXRpYWxTdGF0ZSgpCitSZWY8UHJvdG9jb2w6
OlJlY29yZGluZzo6SW5pdGlhbFN0YXRlPiBJbnNwZWN0b3JDYW52YXM6OmJ1aWxkSW5pdGlhbFN0
YXRlKCkKIHsKICAgICBhdXRvKiBjb250ZXh0ID0gY2FudmFzQ29udGV4dCgpOwogICAgIEFTU0VS
VChjb250ZXh0KTsKICAgICAvLyBGSVhNRTogPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzIwMTY1MT4g
V2ViIEluc3BlY3RvcjogQ2FudmFzOiBzdXBwb3J0IGNhbnZhcyByZWNvcmRpbmdzIGZvciBXZWJH
UFVEZXZpY2UKIAotICAgIGF1dG8gaW5pdGlhbFN0YXRlUGF5bG9hZCA9IEluc3BlY3Rvcjo6UHJv
dG9jb2w6OlJlY29yZGluZzo6SW5pdGlhbFN0YXRlOjpjcmVhdGUoKS5yZWxlYXNlKCk7CisgICAg
YXV0byBpbml0aWFsU3RhdGVQYXlsb2FkID0gUHJvdG9jb2w6OlJlY29yZGluZzo6SW5pdGlhbFN0
YXRlOjpjcmVhdGUoKS5yZWxlYXNlKCk7CiAKICAgICBhdXRvIGF0dHJpYnV0ZXNQYXlsb2FkID0g
SlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICBhdHRyaWJ1dGVzUGF5bG9hZC0+c2V0SW50ZWdl
cigid2lkdGgiX3MsIGNvbnRleHQtPmNhbnZhc0Jhc2UoKS53aWR0aCgpKTsKQEAgLTkwOCw3ICs5
MDksNyBAQCBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6UmVjb3JkaW5nOjpJbml0aWFsU3RhdGU+
IEluc3BlY3RvckNhbnZhczo6YnVpbGRJbml0aWFsUwogICAgIGlmIChwYXJhbWV0ZXJzUGF5bG9h
ZC0+bGVuZ3RoKCkpCiAgICAgICAgIGluaXRpYWxTdGF0ZVBheWxvYWQtPnNldFBhcmFtZXRlcnMo
V1RGTW92ZShwYXJhbWV0ZXJzUGF5bG9hZCkpOwogCi0gICAgRXJyb3JTdHJpbmcgaWdub3JlZDsK
KyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgaWdub3JlZDsKICAgICBpbml0aWFsU3RhdGVQYXls
b2FkLT5zZXRDb250ZW50KGdldENhbnZhc0NvbnRlbnRBc0RhdGFVUkwoaWdub3JlZCkpOwogCiAg
ICAgcmV0dXJuIGluaXRpYWxTdGF0ZVBheWxvYWQ7CkBAIC05NDYsNyArOTQ3LDcgQEAgUmVmPEpT
T046OkFycmF5T2Y8SlNPTjo6VmFsdWU+PiBJbnNwZWN0b3JDYW52YXM6OmJ1aWxkQWN0aW9uKGNv
bnN0IFN0cmluZyYgbmFtZSwKICAgICAgICAgICAgICAgICBhcnJheS0+YWRkSXRlbSh2YWx1ZS5k
LnZhbHVlT3IoMSkpOwogICAgICAgICAgICAgICAgIGFycmF5LT5hZGRJdGVtKHZhbHVlLmUudmFs
dWVPcigwKSk7CiAgICAgICAgICAgICAgICAgYXJyYXktPmFkZEl0ZW0odmFsdWUuZi52YWx1ZU9y
KDApKTsKLSAgICAgICAgICAgICAgICBhZGRQYXJhbWV0ZXIoYXJyYXkucHRyKCksIFJlY29yZGlu
Z1N3aXp6bGVUeXBlczo6RE9NTWF0cml4KTsKKyAgICAgICAgICAgICAgICBhZGRQYXJhbWV0ZXIo
V1RGTW92ZShhcnJheSksIFJlY29yZGluZ1N3aXp6bGVUeXBlczo6RE9NTWF0cml4KTsKICAgICAg
ICAgICAgIH0sCiAgICAgICAgICAgICBbJl0gKGNvbnN0IEVsZW1lbnQqIHZhbHVlKSB7CiAgICAg
ICAgICAgICAgICAgaWYgKHZhbHVlKSB7CkBAIC0xMTA2LDE2ICsxMTA3LDE2IEBAIFJlZjxKU09O
OjpBcnJheU9mPEpTT046OlZhbHVlPj4gSW5zcGVjdG9yQ2FudmFzOjpidWlsZEFjdGlvbihjb25z
dCBTdHJpbmcmIG5hbWUsCiAgICAgICAgICAgICAgICAgYXV0byBkZWR1cGxpY2F0ZWQgPSB2YWx1
ZS5tYXAoWyZdIChjb25zdCBTdHJpbmcmIGl0ZW0pIHsKICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGluZGV4Rm9yRGF0YShpdGVtKTsKICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAg
ICAgICBhZGRQYXJhbWV0ZXIoYnVpbGRBcnJheUZvclZlY3RvcihkZWR1cGxpY2F0ZWQpLnB0cigp
LCBSZWNvcmRpbmdTd2l6emxlVHlwZXM6OlN0cmluZyk7CisgICAgICAgICAgICAgICAgYWRkUGFy
YW1ldGVyKGJ1aWxkQXJyYXlGb3JWZWN0b3IoZGVkdXBsaWNhdGVkKSwgUmVjb3JkaW5nU3dpenps
ZVR5cGVzOjpTdHJpbmcpOwogICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIFsmXSAoY29uc3Qg
VmVjdG9yPGZsb2F0PiYgdmFsdWUpIHsgYWRkUGFyYW1ldGVyKGJ1aWxkQXJyYXlGb3JWZWN0b3Io
dmFsdWUpLnB0cigpLCBSZWNvcmRpbmdTd2l6emxlVHlwZXM6OkFycmF5KTsgfSwKKyAgICAgICAg
ICAgIFsmXSAoY29uc3QgVmVjdG9yPGZsb2F0PiYgdmFsdWUpIHsgYWRkUGFyYW1ldGVyKGJ1aWxk
QXJyYXlGb3JWZWN0b3IodmFsdWUpLCBSZWNvcmRpbmdTd2l6emxlVHlwZXM6OkFycmF5KTsgfSwK
ICAgICAgICAgICAgIFsmXSAoY29uc3QgVmVjdG9yPHVpbnQzMl90PiYgdmFsdWUpIHsKICAgICAg
ICAgICAgICAgICBhdXRvIG1hcHBlZCA9IHZhbHVlLm1hcChbJl0gKHVpbnQzMl90IGl0ZW0pIHsK
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGRvdWJsZT4oaXRlbSk7CiAg
ICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgYWRkUGFyYW1ldGVyKGJ1aWxkQXJy
YXlGb3JWZWN0b3IobWFwcGVkKS5wdHIoKSwgUmVjb3JkaW5nU3dpenpsZVR5cGVzOjpBcnJheSk7
CisgICAgICAgICAgICAgICAgYWRkUGFyYW1ldGVyKGJ1aWxkQXJyYXlGb3JWZWN0b3IobWFwcGVk
KSwgUmVjb3JkaW5nU3dpenpsZVR5cGVzOjpBcnJheSk7CiAgICAgICAgICAgICB9LAotICAgICAg
ICAgICAgWyZdIChjb25zdCBWZWN0b3I8aW50MzJfdD4mIHZhbHVlKSB7IGFkZFBhcmFtZXRlcihi
dWlsZEFycmF5Rm9yVmVjdG9yKHZhbHVlKS5wdHIoKSwgUmVjb3JkaW5nU3dpenpsZVR5cGVzOjpB
cnJheSk7IH0sCisgICAgICAgICAgICBbJl0gKGNvbnN0IFZlY3RvcjxpbnQzMl90PiYgdmFsdWUp
IHsgYWRkUGFyYW1ldGVyKGJ1aWxkQXJyYXlGb3JWZWN0b3IodmFsdWUpLCBSZWNvcmRpbmdTd2l6
emxlVHlwZXM6OkFycmF5KTsgfSwKICNpZiBFTkFCTEUoV0VCR0wpCiAgICAgICAgICAgICBbJl0g
KGNvbnN0IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OkZsb2F0MzJMaXN0OjpWYXJpYW50VHlw
ZSYgdmFsdWUpIHsKICAgICAgICAgICAgICAgICBXVEY6OnZpc2l0KHBhcnNlUGFyYW1ldGVyLCB2
YWx1ZSk7CkBAIC0xMTU5LDcgKzExNjAsNyBAQCBSZWY8SlNPTjo6QXJyYXlPZjxKU09OOjpWYWx1
ZT4+IEluc3BlY3RvckNhbnZhczo6YnVpbGRBY3Rpb24oY29uc3QgU3RyaW5nJiBuYW1lLAogUmVm
PEpTT046OkFycmF5T2Y8SlNPTjo6VmFsdWU+PiBJbnNwZWN0b3JDYW52YXM6OmJ1aWxkQXJyYXlG
b3JDYW52YXNHcmFkaWVudChjb25zdCBDYW52YXNHcmFkaWVudCYgY2FudmFzR3JhZGllbnQpCiB7
CiAgICAgQVNDSUlMaXRlcmFsIHR5cGUgPSAibGluZWFyLWdyYWRpZW50Il9zOwotICAgIGF1dG8g
cGFyYW1ldGVycyA9IEpTT046OkFycmF5T2Y8ZmxvYXQ+OjpjcmVhdGUoKTsKKyAgICBhdXRvIHBh
cmFtZXRlcnMgPSBKU09OOjpBcnJheU9mPGRvdWJsZT46OmNyZWF0ZSgpOwogICAgIFdURjo6c3dp
dGNoT24oY2FudmFzR3JhZGllbnQuZ3JhZGllbnQoKS5kYXRhKCksCiAgICAgICAgIFsmXSAoY29u
c3QgR3JhZGllbnQ6OkxpbmVhckRhdGEmIGRhdGEpIHsKICAgICAgICAgICAgIHBhcmFtZXRlcnMt
PmFkZEl0ZW0oZGF0YS5wb2ludDAueCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JDYW52YXMuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JDYW52YXMuaAppbmRleCA3OGNiNmE4YTNiOGFiNzgwZTk1ZmIzZmFlZDNhYmM1OTRkMTQ2
NTk4Li5iMjdiYzhkNDkyMzkxMTdiZWU1MjVkNWZlNmFjMjZlMmQ2MTZiNWM3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2FudmFzLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNhbnZhcy5oCkBAIC01OCw4ICs1OCw2IEBAIGNs
YXNzIE9mZnNjcmVlbkNhbnZhczsKIGNsYXNzIFR5cGVkT01DU1NJbWFnZVZhbHVlOwogI2VuZGlm
CiAKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCiBjbGFzcyBJbnNwZWN0b3JDYW52YXMg
ZmluYWwgOiBwdWJsaWMgUmVmQ291bnRlZDxJbnNwZWN0b3JDYW52YXM+IHsKIHB1YmxpYzoKICAg
ICBzdGF0aWMgUmVmPEluc3BlY3RvckNhbnZhcz4gY3JlYXRlKENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQmKTsKQEAgLTEwNyw3ICsxMDUsNyBAQCBwdWJsaWM6CiAgICAgUmVmPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkNhbnZhczo6Q2FudmFzPiBidWlsZE9iamVjdEZvckNhbnZhcyhib29sIGNhcHR1cmVC
YWNrdHJhY2UpOwogICAgIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpSZWNvcmRpbmc6OlJlY29y
ZGluZz4gcmVsZWFzZU9iamVjdEZvclJlY29yZGluZygpOwogCi0gICAgU3RyaW5nIGdldENhbnZh
c0NvbnRlbnRBc0RhdGFVUkwoRXJyb3JTdHJpbmcmKTsKKyAgICBTdHJpbmcgZ2V0Q2FudmFzQ29u
dGVudEFzRGF0YVVSTChJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZyYpOwogCiBwcml2
YXRlOgogICAgIEluc3BlY3RvckNhbnZhcyhDYW52YXNSZW5kZXJpbmdDb250ZXh0Jik7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKaW5kZXgg
MmU5MGMxMTk0OGE3ZTBlYjYxMDVhODNlMmMwOGNiNGY4MmE4ZjJmZS4uNjMwZGY3MTc5MGM2M2I2
ZTc1ODczNDUxYTE3NDBmODZmNjdlMDJkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcApAQCAtNDc4LDEwICs0NzgsOCBAQCB2b2lkIElu
c3BlY3RvckNvbnRyb2xsZXI6OmZyb250ZW5kSW5pdGlhbGl6ZWQoKQogewogICAgIGlmIChtX3Bh
dXNlQWZ0ZXJJbml0aWFsaXphdGlvbikgewogICAgICAgICBtX3BhdXNlQWZ0ZXJJbml0aWFsaXph
dGlvbiA9IGZhbHNlOwotICAgICAgICBpZiAoYXV0byogZGVidWdnZXJBZ2VudCA9IG1faW5zdHJ1
bWVudGluZ0FnZW50cy0+ZW5hYmxlZFBhZ2VEZWJ1Z2dlckFnZW50KCkpIHsKLSAgICAgICAgICAg
IEVycm9yU3RyaW5nIGlnbm9yZWQ7Ci0gICAgICAgICAgICBkZWJ1Z2dlckFnZW50LT5wYXVzZShp
Z25vcmVkKTsKLSAgICAgICAgfQorICAgICAgICBpZiAoYXV0byogZGVidWdnZXJBZ2VudCA9IG1f
aW5zdHJ1bWVudGluZ0FnZW50cy0+ZW5hYmxlZFBhZ2VEZWJ1Z2dlckFnZW50KCkpCisgICAgICAg
ICAgICBkZWJ1Z2dlckFnZW50LT5wYXVzZSgpOwogICAgIH0KIAogI2lmIEVOQUJMRShSRU1PVEVf
SU5TUEVDVE9SKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckZyb250ZW5kSG9zdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJv
bnRlbmRIb3N0LmNwcAppbmRleCA1MGUwYzgzYmM5MjA2NjJlNzY4MDI1NTc3NTJiMzZmMjM3NWIw
MzljLi5hNmJiODc3YTIyYTBhYTg2YmY4OTk4MzlhNzVmNWFmZjZlZjhkZTMwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNwcApAQCAt
NjA3LDcgKzYwNyw3IEBAIGJvb2wgSW5zcGVjdG9yRnJvbnRlbmRIb3N0OjpkaWFnbm9zdGljTG9n
Z2luZ0F2YWlsYWJsZSgpCiAgICAgcmV0dXJuIG1fY2xpZW50ICYmIG1fY2xpZW50LT5kaWFnbm9z
dGljTG9nZ2luZ0F2YWlsYWJsZSgpOwogfQogCi1zdGF0aWMgT3B0aW9uYWw8RGlhZ25vc3RpY0xv
Z2dpbmdDbGllbnQ6OlZhbHVlUGF5bG9hZD4gdmFsdWVQYXlsb2FkRnJvbUpTT05WYWx1ZShjb25z
dCBSZWZQdHI8SlNPTjo6VmFsdWU+JiB2YWx1ZSkKK3N0YXRpYyBPcHRpb25hbDxEaWFnbm9zdGlj
TG9nZ2luZ0NsaWVudDo6VmFsdWVQYXlsb2FkPiB2YWx1ZVBheWxvYWRGcm9tSlNPTlZhbHVlKFJl
ZjxKU09OOjpWYWx1ZT4mJiB2YWx1ZSkKIHsKICAgICBzd2l0Y2ggKHZhbHVlLT50eXBlKCkpIHsK
ICAgICBjYXNlIEpTT046OlZhbHVlOjpUeXBlOjpBcnJheToKQEAgLTYxNywyNCArNjE3LDE2IEBA
IHN0YXRpYyBPcHRpb25hbDxEaWFnbm9zdGljTG9nZ2luZ0NsaWVudDo6VmFsdWVQYXlsb2FkPiB2
YWx1ZVBheWxvYWRGcm9tSlNPTlZhbHVlCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAK
ICAgICBjYXNlIEpTT046OlZhbHVlOjpUeXBlOjpCb29sZWFuOgotICAgICAgICBib29sIGJvb2xW
YWx1ZTsKLSAgICAgICAgdmFsdWUtPmFzQm9vbGVhbihib29sVmFsdWUpOwotICAgICAgICByZXR1
cm4gRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQ6OlZhbHVlUGF5bG9hZChib29sVmFsdWUpOworICAg
ICAgICByZXR1cm4gRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQ6OlZhbHVlUGF5bG9hZCh2YWx1ZS0+
YXNCb29sZWFuKCkudmFsdWVPcihmYWxzZSkpOwogCiAgICAgY2FzZSBKU09OOjpWYWx1ZTo6VHlw
ZTo6RG91YmxlOgotICAgICAgICBkb3VibGUgZG91YmxlVmFsdWU7Ci0gICAgICAgIHZhbHVlLT5h
c0RvdWJsZShkb3VibGVWYWx1ZSk7Ci0gICAgICAgIHJldHVybiBEaWFnbm9zdGljTG9nZ2luZ0Ns
aWVudDo6VmFsdWVQYXlsb2FkKGRvdWJsZVZhbHVlKTsKKyAgICAgICAgcmV0dXJuIERpYWdub3N0
aWNMb2dnaW5nQ2xpZW50OjpWYWx1ZVBheWxvYWQodmFsdWUtPmFzRG91YmxlKCkudmFsdWVPcigw
KSk7CiAKICAgICBjYXNlIEpTT046OlZhbHVlOjpUeXBlOjpJbnRlZ2VyOgotICAgICAgICBsb25n
IGxvbmcgaW50VmFsdWU7Ci0gICAgICAgIHZhbHVlLT5hc0ludGVnZXIoaW50VmFsdWUpOwotICAg
ICAgICByZXR1cm4gRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQ6OlZhbHVlUGF5bG9hZChpbnRWYWx1
ZSk7CisgICAgICAgIHJldHVybiBEaWFnbm9zdGljTG9nZ2luZ0NsaWVudDo6VmFsdWVQYXlsb2Fk
KHN0YXRpY19jYXN0PGxvbmcgbG9uZz4odmFsdWUtPmFzSW50ZWdlcigpLnZhbHVlT3IoMCkpKTsK
IAogICAgIGNhc2UgSlNPTjo6VmFsdWU6OlR5cGU6OlN0cmluZzoKLSAgICAgICAgU3RyaW5nIHN0
cmluZ1ZhbHVlOwotICAgICAgICB2YWx1ZS0+YXNTdHJpbmcoc3RyaW5nVmFsdWUpOwotICAgICAg
ICByZXR1cm4gRGlhZ25vc3RpY0xvZ2dpbmdDbGllbnQ6OlZhbHVlUGF5bG9hZChzdHJpbmdWYWx1
ZSk7CisgICAgICAgIHJldHVybiBEaWFnbm9zdGljTG9nZ2luZ0NsaWVudDo6VmFsdWVQYXlsb2Fk
KHZhbHVlLT5hc1N0cmluZygpKTsKICAgICB9CiAKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
QEAgLTY0NiwxNyArNjM4LDE3IEBAIHZvaWQgSW5zcGVjdG9yRnJvbnRlbmRIb3N0Ojpsb2dEaWFn
bm9zdGljRXZlbnQoY29uc3QgU3RyaW5nJiBldmVudE5hbWUsIGNvbnN0IFN0CiAgICAgaWYgKCFz
dXBwb3J0c0RpYWdub3N0aWNMb2dnaW5nKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlZlB0
cjxKU09OOjpWYWx1ZT4gcGF5bG9hZFZhbHVlOwotICAgIGlmICghSlNPTjo6VmFsdWU6OnBhcnNl
SlNPTihwYXlsb2FkU3RyaW5nLCBwYXlsb2FkVmFsdWUpKQorICAgIGF1dG8gcGF5bG9hZFZhbHVl
ID0gSlNPTjo6VmFsdWU6OnBhcnNlSlNPTihwYXlsb2FkU3RyaW5nKTsKKyAgICBpZiAoIXBheWxv
YWRWYWx1ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGF5
bG9hZE9iamVjdDsKLSAgICBpZiAoIXBheWxvYWRWYWx1ZS0+YXNPYmplY3QocGF5bG9hZE9iamVj
dCkpCisgICAgYXV0byBwYXlsb2FkT2JqZWN0ID0gcGF5bG9hZFZhbHVlLT5hc09iamVjdCgpOwor
ICAgIGlmICghcGF5bG9hZE9iamVjdCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgRGlhZ25vc3Rp
Y0xvZ2dpbmdDbGllbnQ6OlZhbHVlRGljdGlvbmFyeSBkaWN0aW9uYXJ5OwotICAgIGZvciAoY29u
c3QgYXV0byYgW2tleSwgdmFsdWVdIDogKnBheWxvYWRPYmplY3QpIHsKLSAgICAgICAgaWYgKGF1
dG8gdmFsdWVQYXlsb2FkID0gdmFsdWVQYXlsb2FkRnJvbUpTT05WYWx1ZSh2YWx1ZSkpCisgICAg
Zm9yIChhdXRvJiBba2V5LCB2YWx1ZV0gOiAqcGF5bG9hZE9iamVjdCkgeworICAgICAgICBpZiAo
YXV0byB2YWx1ZVBheWxvYWQgPSB2YWx1ZVBheWxvYWRGcm9tSlNPTlZhbHVlKFdURk1vdmUodmFs
dWUpKSkKICAgICAgICAgICAgIGRpY3Rpb25hcnkuc2V0KGtleSwgV1RGTW92ZSh2YWx1ZVBheWxv
YWQudmFsdWUoKSkpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvclN0eWxlU2hlZXQuY3BwCmluZGV4IGFlMGZlZjVkZmUzOWI5YTUxNmU1NTEwMzA3ZWFi
Y2I2NjBkMWFiY2IuLmIxZTA5NDFjMmUzYzQxMzM3ZTEyZTM4MGUyMTUyYzJkMjUwMmM2NGEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHAK
QEAgLTM4MCw3ICszODAsNyBAQCB2b2lkIFN0eWxlU2hlZXRIYW5kbGVyOjpvYnNlcnZlQ29tbWVu
dCh1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0KQogICAgIG1fY3VycmVu
dFJ1bGVEYXRhU3RhY2subGFzdCgpLT5zdHlsZVNvdXJjZURhdGEtPnByb3BlcnR5RGF0YS5hcHBl
bmQoQ1NTUHJvcGVydHlTb3VyY2VEYXRhKHByb3BlcnR5RGF0YS5uYW1lLCBwcm9wZXJ0eURhdGEu
dmFsdWUsIGZhbHNlLCB0cnVlLCB0cnVlLCBTb3VyY2VSYW5nZShzdGFydE9mZnNldCAtIHRvcFJ1
bGVCb2R5UmFuZ2Uuc3RhcnQsIGVuZE9mZnNldCAtIHRvcFJ1bGVCb2R5UmFuZ2Uuc3RhcnQpKSk7
CiB9CiAKLXN0YXRpYyBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTb3VyY2VSYW5n
ZT4gYnVpbGRTb3VyY2VSYW5nZU9iamVjdChjb25zdCBTb3VyY2VSYW5nZSYgcmFuZ2UsIGNvbnN0
IFZlY3RvcjxzaXplX3Q+JiBsaW5lRW5kaW5ncywgaW50KiBlbmRpbmdMaW5lID0gbnVsbHB0cikK
K3N0YXRpYyBSZWZQdHI8UHJvdG9jb2w6OkNTUzo6U291cmNlUmFuZ2U+IGJ1aWxkU291cmNlUmFu
Z2VPYmplY3QoY29uc3QgU291cmNlUmFuZ2UmIHJhbmdlLCBjb25zdCBWZWN0b3I8c2l6ZV90PiYg
bGluZUVuZGluZ3MsIGludCogZW5kaW5nTGluZSA9IG51bGxwdHIpCiB7CiAgICAgaWYgKGxpbmVF
bmRpbmdzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0zOTEsNyArMzkx
LDcgQEAgc3RhdGljIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlNvdXJjZVJhbmdl
PiBidWlsZFNvdXJjZVJhbmdlT2JqZWN0KGNvbnMKICAgICBpZiAoZW5kaW5nTGluZSkKICAgICAg
ICAgKmVuZGluZ0xpbmUgPSBlbmQubV9saW5lLnplcm9CYXNlZEludCgpOwogCi0gICAgcmV0dXJu
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U291cmNlUmFuZ2U6OmNyZWF0ZSgpCisgICAgcmV0
dXJuIFByb3RvY29sOjpDU1M6OlNvdXJjZVJhbmdlOjpjcmVhdGUoKQogICAgICAgICAuc2V0U3Rh
cnRMaW5lKHN0YXJ0Lm1fbGluZS56ZXJvQmFzZWRJbnQoKSkKICAgICAgICAgLnNldFN0YXJ0Q29s
dW1uKHN0YXJ0Lm1fY29sdW1uLnplcm9CYXNlZEludCgpKQogICAgICAgICAuc2V0RW5kTGluZShl
bmQubV9saW5lLnplcm9CYXNlZEludCgpKQpAQCAtNDI4LDM0ICs0MjgsMzQgQEAgc3RhdGljIFJl
ZlB0cjxDU1NSdWxlTGlzdD4gYXNDU1NSdWxlTGlzdChDU1NSdWxlKiBydWxlKQogICAgIHJldHVy
biBudWxscHRyOwogfQogCi1zdGF0aWMgUmVmPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90
b2NvbDo6Q1NTOjpHcm91cGluZz4+IGJ1aWxkQXJyYXlGb3JHcm91cGluZ3MoQ1NTUnVsZSYgcnVs
ZSkKK3N0YXRpYyBSZWY8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6Q1NTOjpHcm91cGluZz4+IGJ1
aWxkQXJyYXlGb3JHcm91cGluZ3MoQ1NTUnVsZSYgcnVsZSkKIHsKLSAgICBhdXRvIGdyb3VwaW5n
c1BheWxvYWQgPSBKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6R3JvdXBp
bmc+OjpjcmVhdGUoKTsKKyAgICBhdXRvIGdyb3VwaW5nc1BheWxvYWQgPSBKU09OOjpBcnJheU9m
PFByb3RvY29sOjpDU1M6Okdyb3VwaW5nPjo6Y3JlYXRlKCk7CiAKICAgICBhdXRvKiBwYXJlbnRS
dWxlID0gJnJ1bGU7CiAgICAgd2hpbGUgKHBhcmVudFJ1bGUpIHsKLSAgICAgICAgUmVmUHRyPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6R3JvdXBpbmc+IHJ1bGVHcm91cGluZ1BheWxvYWQ7Cisg
ICAgICAgIFJlZlB0cjxQcm90b2NvbDo6Q1NTOjpHcm91cGluZz4gcnVsZUdyb3VwaW5nUGF5bG9h
ZDsKIAogICAgICAgICBpZiAoaXM8Q1NTTWVkaWFSdWxlPihwYXJlbnRSdWxlKSkgewogICAgICAg
ICAgICAgYXV0byogbWVkaWEgPSBkb3duY2FzdDxDU1NNZWRpYVJ1bGU+KHBhcmVudFJ1bGUpLT5t
ZWRpYSgpOwogICAgICAgICAgICAgaWYgKG1lZGlhICYmIG1lZGlhLT5sZW5ndGgoKSAmJiBtZWRp
YS0+bWVkaWFUZXh0KCkgIT0gImFsbCIpIHsKLSAgICAgICAgICAgICAgICBydWxlR3JvdXBpbmdQ
YXlsb2FkID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpHcm91cGluZzo6Y3JlYXRlKCkKKyAg
ICAgICAgICAgICAgICBydWxlR3JvdXBpbmdQYXlsb2FkID0gUHJvdG9jb2w6OkNTUzo6R3JvdXBp
bmc6OmNyZWF0ZSgpCiAgICAgICAgICAgICAgICAgICAgIC5zZXRUZXh0KG1lZGlhLT5tZWRpYVRl
eHQoKSkKLSAgICAgICAgICAgICAgICAgICAgLnNldFR5cGUoSW5zcGVjdG9yOjpQcm90b2NvbDo6
Q1NTOjpHcm91cGluZzo6VHlwZTo6TWVkaWFSdWxlKQorICAgICAgICAgICAgICAgICAgICAuc2V0
VHlwZShQcm90b2NvbDo6Q1NTOjpHcm91cGluZzo6VHlwZTo6TWVkaWFSdWxlKQogICAgICAgICAg
ICAgICAgICAgICAucmVsZWFzZSgpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYg
KGlzPENTU0ltcG9ydFJ1bGU+KHBhcmVudFJ1bGUpKSB7CiAgICAgICAgICAgICBhdXRvJiBtZWRp
YSA9IGRvd25jYXN0PENTU0ltcG9ydFJ1bGU+KHBhcmVudFJ1bGUpLT5tZWRpYSgpOwogICAgICAg
ICAgICAgaWYgKG1lZGlhLmxlbmd0aCgpICYmIG1lZGlhLm1lZGlhVGV4dCgpICE9ICJhbGwiKSB7
Ci0gICAgICAgICAgICAgICAgcnVsZUdyb3VwaW5nUGF5bG9hZCA9IEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkNTUzo6R3JvdXBpbmc6OmNyZWF0ZSgpCisgICAgICAgICAgICAgICAgcnVsZUdyb3VwaW5n
UGF5bG9hZCA9IFByb3RvY29sOjpDU1M6Okdyb3VwaW5nOjpjcmVhdGUoKQogICAgICAgICAgICAg
ICAgICAgICAuc2V0VGV4dChtZWRpYS5tZWRpYVRleHQoKSkKLSAgICAgICAgICAgICAgICAgICAg
LnNldFR5cGUoSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpHcm91cGluZzo6VHlwZTo6TWVkaWFJ
bXBvcnRSdWxlKQorICAgICAgICAgICAgICAgICAgICAuc2V0VHlwZShQcm90b2NvbDo6Q1NTOjpH
cm91cGluZzo6VHlwZTo6TWVkaWFJbXBvcnRSdWxlKQogICAgICAgICAgICAgICAgICAgICAucmVs
ZWFzZSgpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKGlzPENTU1N1cHBvcnRz
UnVsZT4ocGFyZW50UnVsZSkpIHsKLSAgICAgICAgICAgIHJ1bGVHcm91cGluZ1BheWxvYWQgPSBJ
bnNwZWN0b3I6OlByb3RvY29sOjpDU1M6Okdyb3VwaW5nOjpjcmVhdGUoKQorICAgICAgICAgICAg
cnVsZUdyb3VwaW5nUGF5bG9hZCA9IFByb3RvY29sOjpDU1M6Okdyb3VwaW5nOjpjcmVhdGUoKQog
ICAgICAgICAgICAgICAgIC5zZXRUZXh0KGRvd25jYXN0PENTU1N1cHBvcnRzUnVsZT4ocGFyZW50
UnVsZSktPmNvbmRpdGlvblRleHQoKSkKLSAgICAgICAgICAgICAgICAuc2V0VHlwZShJbnNwZWN0
b3I6OlByb3RvY29sOjpDU1M6Okdyb3VwaW5nOjpUeXBlOjpTdXBwb3J0c1J1bGUpCisgICAgICAg
ICAgICAgICAgLnNldFR5cGUoUHJvdG9jb2w6OkNTUzo6R3JvdXBpbmc6OlR5cGU6OlN1cHBvcnRz
UnVsZSkKICAgICAgICAgICAgICAgICAucmVsZWFzZSgpOwogICAgICAgICB9CiAKQEAgLTQ3MCw3
ICs0NzAsNyBAQCBzdGF0aWMgUmVmPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6
Q1NTOjpHcm91cGluZz4+IGJ1aWxkQXJyYXlGb3JHcm91cAogICAgICAgICAgICAgICAgICAgICBy
dWxlR3JvdXBpbmdQYXlsb2FkLT5zZXRTb3VyY2VVUkwoc291cmNlVVJMKTsKICAgICAgICAgICAg
IH0KIAotICAgICAgICAgICAgZ3JvdXBpbmdzUGF5bG9hZC0+YWRkSXRlbShXVEZNb3ZlKHJ1bGVH
cm91cGluZ1BheWxvYWQpKTsKKyAgICAgICAgICAgIGdyb3VwaW5nc1BheWxvYWQtPmFkZEl0ZW0o
cnVsZUdyb3VwaW5nUGF5bG9hZC5yZWxlYXNlTm9uTnVsbCgpKTsKICAgICAgICAgfQogCiAgICAg
ICAgIGlmIChwYXJlbnRSdWxlLT5wYXJlbnRSdWxlKCkpIHsKQEAgLTQ4Miw5ICs0ODIsOSBAQCBz
dGF0aWMgUmVmPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpHcm91cGlu
Zz4+IGJ1aWxkQXJyYXlGb3JHcm91cAogICAgICAgICB3aGlsZSAoc3R5bGVTaGVldCkgewogICAg
ICAgICAgICAgYXV0byogbWVkaWEgPSBzdHlsZVNoZWV0LT5tZWRpYSgpOwogICAgICAgICAgICAg
aWYgKG1lZGlhICYmIG1lZGlhLT5sZW5ndGgoKSAmJiBtZWRpYS0+bWVkaWFUZXh0KCkgIT0gImFs
bCIpIHsKLSAgICAgICAgICAgICAgICBhdXRvIHNoZWV0R3JvdXBpbmdQYXlsb2FkID0gSW5zcGVj
dG9yOjpQcm90b2NvbDo6Q1NTOjpHcm91cGluZzo6Y3JlYXRlKCkKKyAgICAgICAgICAgICAgICBh
dXRvIHNoZWV0R3JvdXBpbmdQYXlsb2FkID0gUHJvdG9jb2w6OkNTUzo6R3JvdXBpbmc6OmNyZWF0
ZSgpCiAgICAgICAgICAgICAgICAgICAgIC5zZXRUZXh0KG1lZGlhLT5tZWRpYVRleHQoKSkKLSAg
ICAgICAgICAgICAgICAgICAgLnNldFR5cGUoaXM8SFRNTFN0eWxlRWxlbWVudD4oc3R5bGVTaGVl
dC0+b3duZXJOb2RlKCkpID8gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpHcm91cGluZzo6VHlw
ZTo6TWVkaWFTdHlsZU5vZGU6IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6R3JvdXBpbmc6OlR5
cGU6Ok1lZGlhTGlua05vZGUpCisgICAgICAgICAgICAgICAgICAgIC5zZXRUeXBlKGlzPEhUTUxT
dHlsZUVsZW1lbnQ+KHN0eWxlU2hlZXQtPm93bmVyTm9kZSgpKSA/IFByb3RvY29sOjpDU1M6Okdy
b3VwaW5nOjpUeXBlOjpNZWRpYVN0eWxlTm9kZTogUHJvdG9jb2w6OkNTUzo6R3JvdXBpbmc6OlR5
cGU6Ok1lZGlhTGlua05vZGUpCiAgICAgICAgICAgICAgICAgICAgIC5yZWxlYXNlKCk7CiAKICAg
ICAgICAgICAgICAgICBTdHJpbmcgc291cmNlVVJMOwpAQCAtNTIzLDI4ICs1MjMsMjkgQEAgSW5z
cGVjdG9yU3R5bGU6Okluc3BlY3RvclN0eWxlKGNvbnN0IEluc3BlY3RvckNTU0lkJiBzdHlsZUlk
LCBSZWY8Q1NTU3R5bGVEZWNsYXIKIAogSW5zcGVjdG9yU3R5bGU6On5JbnNwZWN0b3JTdHlsZSgp
ID0gZGVmYXVsdDsKIAotUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+
IEluc3BlY3RvclN0eWxlOjpidWlsZE9iamVjdEZvclN0eWxlKCkgY29uc3QKK1JlZjxQcm90b2Nv
bDo6Q1NTOjpDU1NTdHlsZT4gSW5zcGVjdG9yU3R5bGU6OmJ1aWxkT2JqZWN0Rm9yU3R5bGUoKSBj
b25zdAogewotICAgIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlPiByZXN1
bHQgPSBzdHlsZVdpdGhQcm9wZXJ0aWVzKCk7Ci0gICAgaWYgKCFtX3N0eWxlSWQuaXNFbXB0eSgp
KQotICAgICAgICByZXN1bHQtPnNldFN0eWxlSWQobV9zdHlsZUlkLmFzUHJvdG9jb2xWYWx1ZTxJ
bnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlSWQ+KCkpOworICAgIGF1dG8gcmVzdWx0
ID0gc3R5bGVXaXRoUHJvcGVydGllcygpOworICAgIGlmIChhdXRvIHN0eWxlSWQgPSBtX3N0eWxl
SWQuYXNQcm90b2NvbFZhbHVlPFByb3RvY29sOjpDU1M6OkNTU1N0eWxlSWQ+KCkpCisgICAgICAg
IHJlc3VsdC0+c2V0U3R5bGVJZChzdHlsZUlkLnJlbGVhc2VOb25OdWxsKCkpOwogCiAgICAgcmVz
dWx0LT5zZXRXaWR0aChtX3N0eWxlLT5nZXRQcm9wZXJ0eVZhbHVlKCJ3aWR0aCIpKTsKICAgICBy
ZXN1bHQtPnNldEhlaWdodChtX3N0eWxlLT5nZXRQcm9wZXJ0eVZhbHVlKCJoZWlnaHQiKSk7CiAK
LSAgICBSZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+IHNvdXJjZURhdGEgPSBleHRyYWN0U291cmNl
RGF0YSgpOwotICAgIGlmIChzb3VyY2VEYXRhKQotICAgICAgICByZXN1bHQtPnNldFJhbmdlKGJ1
aWxkU291cmNlUmFuZ2VPYmplY3Qoc291cmNlRGF0YS0+cnVsZUJvZHlSYW5nZSwgbV9wYXJlbnRT
dHlsZVNoZWV0LT5saW5lRW5kaW5ncygpKSk7CisgICAgaWYgKGF1dG8gc291cmNlRGF0YSA9IGV4
dHJhY3RTb3VyY2VEYXRhKCkpIHsKKyAgICAgICAgaWYgKGF1dG8gcmFuZ2UgPSBidWlsZFNvdXJj
ZVJhbmdlT2JqZWN0KHNvdXJjZURhdGEtPnJ1bGVCb2R5UmFuZ2UsIG1fcGFyZW50U3R5bGVTaGVl
dC0+bGluZUVuZGluZ3MoKSkpCisgICAgICAgICAgICByZXN1bHQtPnNldFJhbmdlKHJhbmdlLnJl
bGVhc2VOb25OdWxsKCkpOworICAgIH0KIAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLVJlZjxK
U09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTQ29tcHV0ZWRTdHlsZVBy
b3BlcnR5Pj4gSW5zcGVjdG9yU3R5bGU6OmJ1aWxkQXJyYXlGb3JDb21wdXRlZFN0eWxlKCkgY29u
c3QKK1JlZjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpDU1M6OkNTU0NvbXB1dGVkU3R5bGVQcm9w
ZXJ0eT4+IEluc3BlY3RvclN0eWxlOjpidWlsZEFycmF5Rm9yQ29tcHV0ZWRTdHlsZSgpIGNvbnN0
CiB7Ci0gICAgYXV0byByZXN1bHQgPSBKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkNTUzo6Q1NTQ29tcHV0ZWRTdHlsZVByb3BlcnR5Pjo6Y3JlYXRlKCk7CisgICAgYXV0byByZXN1
bHQgPSBKU09OOjpBcnJheU9mPFByb3RvY29sOjpDU1M6OkNTU0NvbXB1dGVkU3R5bGVQcm9wZXJ0
eT46OmNyZWF0ZSgpOwogICAgIGZvciAoYXV0byYgcHJvcGVydHkgOiBjb2xsZWN0UHJvcGVydGll
cyh0cnVlKSkgewogICAgICAgICBjb25zdCBDU1NQcm9wZXJ0eVNvdXJjZURhdGEmIHByb3BlcnR5
RW50cnkgPSBwcm9wZXJ0eS5zb3VyY2VEYXRhOwotICAgICAgICBhdXRvIGVudHJ5ID0gSW5zcGVj
dG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NDb21wdXRlZFN0eWxlUHJvcGVydHk6OmNyZWF0ZSgpCisg
ICAgICAgIGF1dG8gZW50cnkgPSBQcm90b2NvbDo6Q1NTOjpDU1NDb21wdXRlZFN0eWxlUHJvcGVy
dHk6OmNyZWF0ZSgpCiAgICAgICAgICAgICAuc2V0TmFtZShwcm9wZXJ0eUVudHJ5Lm5hbWUpCiAg
ICAgICAgICAgICAuc2V0VmFsdWUocHJvcGVydHlFbnRyeS52YWx1ZSkKICAgICAgICAgICAgIC5y
ZWxlYXNlKCk7CkBAIC02MjMsMTMgKzYyNCwxMyBAQCBWZWN0b3I8SW5zcGVjdG9yU3R5bGVQcm9w
ZXJ0eT4gSW5zcGVjdG9yU3R5bGU6OmNvbGxlY3RQcm9wZXJ0aWVzKGJvb2wgaW5jbHVkZUFsbAog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLVJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNT
U1N0eWxlPiBJbnNwZWN0b3JTdHlsZTo6c3R5bGVXaXRoUHJvcGVydGllcygpIGNvbnN0CitSZWY8
UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+IEluc3BlY3RvclN0eWxlOjpzdHlsZVdpdGhQcm9wZXJ0
aWVzKCkgY29uc3QKIHsKICAgICBhdXRvIHByb3BlcnRpZXMgPSBjb2xsZWN0UHJvcGVydGllcyhm
YWxzZSk7CiAKLSAgICBhdXRvIHByb3BlcnRpZXNPYmplY3QgPSBKU09OOjpBcnJheU9mPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUHJvcGVydHk+OjpjcmVhdGUoKTsKLSAgICBhdXRvIHNo
b3J0aGFuZEVudHJpZXMgPSBBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U2hvcnRo
YW5kRW50cnk+OjpjcmVhdGUoKTsKLSAgICBIYXNoTWFwPFN0cmluZywgUmVmUHRyPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkNTUzo6Q1NTUHJvcGVydHk+PiBwcm9wZXJ0eU5hbWVUb1ByZXZpb3VzQWN0
aXZlUHJvcGVydHk7CisgICAgYXV0byBwcm9wZXJ0aWVzT2JqZWN0ID0gSlNPTjo6QXJyYXlPZjxQ
cm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0eT46OmNyZWF0ZSgpOworICAgIGF1dG8gc2hvcnRoYW5k
RW50cmllcyA9IEFycmF5T2Y8UHJvdG9jb2w6OkNTUzo6U2hvcnRoYW5kRW50cnk+OjpjcmVhdGUo
KTsKKyAgICBIYXNoTWFwPFN0cmluZywgUmVmUHRyPFByb3RvY29sOjpDU1M6OkNTU1Byb3BlcnR5
Pj4gcHJvcGVydHlOYW1lVG9QcmV2aW91c0FjdGl2ZVByb3BlcnR5OwogICAgIEhhc2hTZXQ8U3Ry
aW5nPiBmb3VuZFNob3J0aGFuZHM7CiAgICAgU3RyaW5nIHByZXZpb3VzUHJpb3JpdHk7CiAgICAg
U3RyaW5nIHByZXZpb3VzU3RhdHVzOwpAQCAtNjQxLDkgKzY0Miw5IEBAIFJlZjxJbnNwZWN0b3I6
OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlPiBJbnNwZWN0b3JTdHlsZTo6c3R5bGVXaXRoUHJvcGVy
dGllcygpIGNvCiAgICAgICAgIGNvbnN0IENTU1Byb3BlcnR5U291cmNlRGF0YSYgcHJvcGVydHlF
bnRyeSA9IGl0LT5zb3VyY2VEYXRhOwogICAgICAgICBjb25zdCBTdHJpbmcmIG5hbWUgPSBwcm9w
ZXJ0eUVudHJ5Lm5hbWU7CiAKLSAgICAgICAgYXV0byBzdGF0dXMgPSBpdC0+ZGlzYWJsZWQgPyBJ
bnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1Byb3BlcnR5U3RhdHVzOjpEaXNhYmxlZCA6IElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUHJvcGVydHlTdGF0dXM6OkFjdGl2ZTsKKyAgICAg
ICAgYXV0byBzdGF0dXMgPSBpdC0+ZGlzYWJsZWQgPyBQcm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0
eVN0YXR1czo6RGlzYWJsZWQgOiBQcm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0eVN0YXR1czo6QWN0
aXZlOwogCi0gICAgICAgIGF1dG8gcHJvcGVydHkgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6
OkNTU1Byb3BlcnR5OjpjcmVhdGUoKQorICAgICAgICBhdXRvIHByb3BlcnR5ID0gUHJvdG9jb2w6
OkNTUzo6Q1NTUHJvcGVydHk6OmNyZWF0ZSgpCiAgICAgICAgICAgICAuc2V0TmFtZShuYW1lLmNv
bnZlcnRUb0FTQ0lJTG93ZXJjYXNlKCkpCiAgICAgICAgICAgICAuc2V0VmFsdWUocHJvcGVydHlF
bnRyeS52YWx1ZSkKICAgICAgICAgICAgIC5yZWxlYXNlKCk7CkBAIC02NjksNyArNjcwLDggQEAg
UmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+IEluc3BlY3RvclN0eWxlOjpz
dHlsZVdpdGhQcm9wZXJ0aWVzKCkgY28KICAgICAgICAgICAgIFNvdXJjZVJhbmdlIGFic29sdXRl
UHJvcGVydHlSYW5nZSA9IHByb3BlcnR5RW50cnkucmFuZ2U7CiAgICAgICAgICAgICBhYnNvbHV0
ZVByb3BlcnR5UmFuZ2Uuc3RhcnQgKz0gcnVsZUJvZHlSYW5nZVN0YXJ0OwogICAgICAgICAgICAg
YWJzb2x1dGVQcm9wZXJ0eVJhbmdlLmVuZCArPSBydWxlQm9keVJhbmdlU3RhcnQ7Ci0gICAgICAg
ICAgICBwcm9wZXJ0eS0+c2V0UmFuZ2UoYnVpbGRTb3VyY2VSYW5nZU9iamVjdChhYnNvbHV0ZVBy
b3BlcnR5UmFuZ2UsIGxpbmVFbmRpbmdzKSk7CisgICAgICAgICAgICBpZiAoYXV0byByYW5nZSA9
IGJ1aWxkU291cmNlUmFuZ2VPYmplY3QoYWJzb2x1dGVQcm9wZXJ0eVJhbmdlLCBsaW5lRW5kaW5n
cykpCisgICAgICAgICAgICAgICAgcHJvcGVydHktPnNldFJhbmdlKHJhbmdlLnJlbGVhc2VOb25O
dWxsKCkpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKCFpdC0+ZGlzYWJsZWQpIHsKQEAgLTY4
MywzMCArNjg1LDM1IEBAIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlPiBJ
bnNwZWN0b3JTdHlsZTo6c3R5bGVXaXRoUHJvcGVydGllcygpIGNvCiAKICAgICAgICAgICAgICAg
ICAvLyBDYW5vbmljYWxpemUgcHJvcGVydHkgbmFtZXMgdG8gdHJlYXQgbm9uLXByZWZpeGVkIGFu
ZCB2ZW5kb3ItcHJlZml4ZWQgcHJvcGVydHkgbmFtZXMgdGhlIHNhbWUgKG9wYWNpdHkgdnMuIC13
ZWJraXQtb3BhY2l0eSkuCiAgICAgICAgICAgICAgICAgU3RyaW5nIGNhbm9uaWNhbFByb3BlcnR5
TmFtZSA9IHByb3BlcnR5SWQgPyBnZXRQcm9wZXJ0eU5hbWVTdHJpbmcocHJvcGVydHlJZCkgOiBu
YW1lOwotICAgICAgICAgICAgICAgIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0eT4+OjppdGVyYXRvciBhY3RpdmVJdCA9IHByb3BlcnR5
TmFtZVRvUHJldmlvdXNBY3RpdmVQcm9wZXJ0eS5maW5kKGNhbm9uaWNhbFByb3BlcnR5TmFtZSk7
CisgICAgICAgICAgICAgICAgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxQcm90b2NvbDo6Q1NTOjpD
U1NQcm9wZXJ0eT4+OjppdGVyYXRvciBhY3RpdmVJdCA9IHByb3BlcnR5TmFtZVRvUHJldmlvdXNB
Y3RpdmVQcm9wZXJ0eS5maW5kKGNhbm9uaWNhbFByb3BlcnR5TmFtZSk7CiAgICAgICAgICAgICAg
ICAgaWYgKGFjdGl2ZUl0ICE9IHByb3BlcnR5TmFtZVRvUHJldmlvdXNBY3RpdmVQcm9wZXJ0eS5l
bmQoKSkgewogICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydHlFbnRyeS5wYXJzZWRPaykg
ewotICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBzdWNjZXNzUHJpb3JpdHkgPSBhY3RpdmVJ
dC0+dmFsdWUtPmdldFN0cmluZyhJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1Byb3BlcnR5
OjpQcmlvcml0eSwgcHJldmlvdXNQcmlvcml0eSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBi
b29sIHN1Y2Nlc3NTdGF0dXMgPSBhY3RpdmVJdC0+dmFsdWUtPmdldFN0cmluZyhJbnNwZWN0b3I6
OlByb3RvY29sOjpDU1M6OkNTU1Byb3BlcnR5OjpTdGF0dXMsIHByZXZpb3VzU3RhdHVzKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChzdWNjZXNzU3RhdHVzICYmIHByZXZpb3VzU3RhdHVz
ICE9ICJpbmFjdGl2ZSIpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVy
dHlFbnRyeS5pbXBvcnRhbnQgfHwgIXN1Y2Nlc3NQcmlvcml0eSkgLy8gUHJpb3JpdHkgbm90IHNl
dCA9PSAibm90IGltcG9ydGFudCIuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNo
b3VsZEluYWN0aXZhdGUgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Ug
aWYgKHN0YXR1cyA9PSBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1Byb3BlcnR5U3RhdHVz
OjpBY3RpdmUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSW5hY3RpdmF0
ZSBhIG5vbi1pbXBvcnRhbnQgcHJvcGVydHkgZm9sbG93aW5nIHRoZSBzYW1lLW5hbWVkIGltcG9y
dGFudCBwcm9wZXJ0eS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0g
SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0eVN0YXR1czo6SW5hY3RpdmU7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBhdXRvIG5ld1ByaW9yaXR5ID0gYWN0aXZlSXQtPnZhbHVl
LT5nZXRTdHJpbmcoUHJvdG9jb2w6OkNTUzo6Q1NTUHJvcGVydHk6OnByaW9yaXR5S2V5KTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICghIW5ld1ByaW9yaXR5KQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHByZXZpb3VzUHJpb3JpdHkgPSBuZXdQcmlvcml0eTsKKworICAgICAgICAg
ICAgICAgICAgICAgICAgYXV0byBuZXdTdGF0dXMgPSBhY3RpdmVJdC0+dmFsdWUtPmdldFN0cmlu
ZyhQcm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0eTo6c3RhdHVzS2V5KTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICghIW5ld1N0YXR1cykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHByZXZpb3VzU3RhdHVzID0gbmV3U3RhdHVzOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChwcmV2aW91c1N0YXR1cyAhPSBQcm90b2NvbDo6SGVscGVyczo6Z2V0RW51bUNvbnN0YW50
VmFsdWUoUHJvdG9jb2w6OkNTUzo6Q1NTUHJvcGVydHlTdGF0dXM6OkluYWN0aXZlKSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydHlFbnRyeS5pbXBvcnRhbnQg
fHwgIW5ld1ByaW9yaXR5KSAvLyBQcmlvcml0eSBub3Qgc2V0ID09ICJub3QgaW1wb3J0YW50Ii4K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3VsZEluYWN0aXZhdGUgPSB0
cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChzdGF0dXMgPT0g
UHJvdG9jb2w6OkNTUzo6Q1NTUHJvcGVydHlTdGF0dXM6OkFjdGl2ZSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gSW5hY3RpdmF0ZSBhIG5vbi1pbXBvcnRhbnQgcHJv
cGVydHkgZm9sbG93aW5nIHRoZSBzYW1lLW5hbWVkIGltcG9ydGFudCBwcm9wZXJ0eS4KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IFByb3RvY29sOjpDU1M6OkNT
U1Byb3BlcnR5U3RhdHVzOjpJbmFjdGl2ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGJvb2wgcHJldmlvdXNQYXJzZWRPazsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wg
c3VjY2VzcyA9IGFjdGl2ZUl0LT52YWx1ZS0+Z2V0Qm9vbGVhbihJbnNwZWN0b3I6OlByb3RvY29s
OjpDU1M6OkNTU1Byb3BlcnR5OjpQYXJzZWRPaywgcHJldmlvdXNQYXJzZWRPayk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoc3VjY2VzcyAmJiAhcHJldmlvdXNQYXJzZWRPaykKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGF1dG8gcHJldmlvdXNQYXJzZWRPayA9IGFjdGl2ZUl0LT52YWx1
ZS0+Z2V0Qm9vbGVhbihQcm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0eTo6cGFyc2VkT2tLZXkpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByZXZpb3VzUGFyc2VkT2sgJiYgIXByZXZpb3Vz
UGFyc2VkT2spCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvdWxkSW5hY3RpdmF0ZSA9
IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9IGVsc2UKICAg
ICAgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lVG9QcmV2aW91c0FjdGl2ZVByb3BlcnR5LnNl
dChjYW5vbmljYWxQcm9wZXJ0eU5hbWUsIHByb3BlcnR5LmNvcHlSZWYoKSk7CiAKICAgICAgICAg
ICAgICAgICBpZiAoc2hvdWxkSW5hY3RpdmF0ZSkgewotICAgICAgICAgICAgICAgICAgICBhY3Rp
dmVJdC0+dmFsdWUtPnNldFN0YXR1cyhJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1Byb3Bl
cnR5U3RhdHVzOjpJbmFjdGl2ZSk7CisgICAgICAgICAgICAgICAgICAgIGFjdGl2ZUl0LT52YWx1
ZS0+c2V0U3RhdHVzKFByb3RvY29sOjpDU1M6OkNTU1Byb3BlcnR5U3RhdHVzOjpJbmFjdGl2ZSk7
CiAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZVRvUHJldmlvdXNBY3RpdmVQcm9wZXJ0
eS5zZXQoY2Fub25pY2FsUHJvcGVydHlOYW1lLCBwcm9wZXJ0eS5jb3B5UmVmKCkpOwogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSB7CkBAIC03MTQsMTMgKzcyMSwxMyBAQCBS
ZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4gSW5zcGVjdG9yU3R5bGU6OnN0
eWxlV2l0aFByb3BlcnRpZXMoKSBjbwogICAgICAgICAgICAgICAgIC8vIERlZmF1bHQgImltcGxp
Y2l0IiA9PSBmYWxzZS4KICAgICAgICAgICAgICAgICBpZiAoaW1wbGljaXQpCiAgICAgICAgICAg
ICAgICAgICAgIHByb3BlcnR5LT5zZXRJbXBsaWNpdCh0cnVlKTsKLSAgICAgICAgICAgICAgICBz
dGF0dXMgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1Byb3BlcnR5U3RhdHVzOjpTdHls
ZTsKKyAgICAgICAgICAgICAgICBzdGF0dXMgPSBQcm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0eVN0
YXR1czo6U3R5bGU7CiAKICAgICAgICAgICAgICAgICBTdHJpbmcgc2hvcnRoYW5kID0gbV9zdHls
ZS0+Z2V0UHJvcGVydHlTaG9ydGhhbmQobmFtZSk7CiAgICAgICAgICAgICAgICAgaWYgKCFzaG9y
dGhhbmQuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmICghZm91bmRTaG9ydGhh
bmRzLmNvbnRhaW5zKHNob3J0aGFuZCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5k
U2hvcnRoYW5kcy5hZGQoc2hvcnRoYW5kKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8g
ZW50cnkgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlNob3J0aGFuZEVudHJ5OjpjcmVhdGUo
KQorICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBlbnRyeSA9IFByb3RvY29sOjpDU1M6OlNo
b3J0aGFuZEVudHJ5OjpjcmVhdGUoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRO
YW1lKHNob3J0aGFuZCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0VmFsdWUoc2hv
cnRoYW5kVmFsdWUoc2hvcnRoYW5kKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVs
ZWFzZSgpOwpAQCAtNzMxLDExICs3MzgsMTEgQEAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNT
Uzo6Q1NTU3R5bGU+IEluc3BlY3RvclN0eWxlOjpzdHlsZVdpdGhQcm9wZXJ0aWVzKCkgY28KICAg
ICAgICAgfQogCiAgICAgICAgIC8vIERlZmF1bHQgInN0YXR1cyIgPT0gInN0eWxlIi4KLSAgICAg
ICAgaWYgKHN0YXR1cyAhPSBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1Byb3BlcnR5U3Rh
dHVzOjpTdHlsZSkKKyAgICAgICAgaWYgKHN0YXR1cyAhPSBQcm90b2NvbDo6Q1NTOjpDU1NQcm9w
ZXJ0eVN0YXR1czo6U3R5bGUpCiAgICAgICAgICAgICBwcm9wZXJ0eS0+c2V0U3RhdHVzKHN0YXR1
cyk7CiAgICAgfQogCi0gICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5
bGU6OmNyZWF0ZSgpCisgICAgcmV0dXJuIFByb3RvY29sOjpDU1M6OkNTU1N0eWxlOjpjcmVhdGUo
KQogICAgICAgICAuc2V0Q3NzUHJvcGVydGllcyhXVEZNb3ZlKHByb3BlcnRpZXNPYmplY3QpKQog
ICAgICAgICAuc2V0U2hvcnRoYW5kRW50cmllcyhXVEZNb3ZlKHNob3J0aGFuZEVudHJpZXMpKQog
ICAgICAgICAucmVsZWFzZSgpOwpAQCAtODA1LDcgKzgxMiw3IEBAIFZlY3RvcjxTdHJpbmc+IElu
c3BlY3RvclN0eWxlOjpsb25naGFuZFByb3BlcnRpZXMoY29uc3QgU3RyaW5nJiBzaG9ydGhhbmRQ
cm9wZXJ0CiAgICAgcmV0dXJuIHByb3BlcnRpZXM7CiB9CiAKLVJlZjxJbnNwZWN0b3JTdHlsZVNo
ZWV0PiBJbnNwZWN0b3JTdHlsZVNoZWV0OjpjcmVhdGUoSW5zcGVjdG9yUGFnZUFnZW50KiBwYWdl
QWdlbnQsIGNvbnN0IFN0cmluZyYgaWQsIFJlZlB0cjxDU1NTdHlsZVNoZWV0PiYmIHBhZ2VTdHls
ZVNoZWV0LCBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW4gb3JpZ2lu
LCBjb25zdCBTdHJpbmcmIGRvY3VtZW50VVJMLCBMaXN0ZW5lciogbGlzdGVuZXIpCitSZWY8SW5z
cGVjdG9yU3R5bGVTaGVldD4gSW5zcGVjdG9yU3R5bGVTaGVldDo6Y3JlYXRlKEluc3BlY3RvclBh
Z2VBZ2VudCogcGFnZUFnZW50LCBjb25zdCBTdHJpbmcmIGlkLCBSZWZQdHI8Q1NTU3R5bGVTaGVl
dD4mJiBwYWdlU3R5bGVTaGVldCwgUHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbiBvcmln
aW4sIGNvbnN0IFN0cmluZyYgZG9jdW1lbnRVUkwsIExpc3RlbmVyKiBsaXN0ZW5lcikKIHsKICAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJbnNwZWN0b3JTdHlsZVNoZWV0KHBhZ2VBZ2VudCwgaWQs
IFdURk1vdmUocGFnZVN0eWxlU2hlZXQpLCBvcmlnaW4sIGRvY3VtZW50VVJMLCBsaXN0ZW5lcikp
OwogfQpAQCAtODE3LDcgKzgyNCw3IEBAIFN0cmluZyBJbnNwZWN0b3JTdHlsZVNoZWV0OjpzdHls
ZVNoZWV0VVJMKENTU1N0eWxlU2hlZXQqIHBhZ2VTdHlsZVNoZWV0KQogICAgIHJldHVybiBlbXB0
eVN0cmluZygpOwogfQogCi1JbnNwZWN0b3JTdHlsZVNoZWV0OjpJbnNwZWN0b3JTdHlsZVNoZWV0
KEluc3BlY3RvclBhZ2VBZ2VudCogcGFnZUFnZW50LCBjb25zdCBTdHJpbmcmIGlkLCBSZWZQdHI8
Q1NTU3R5bGVTaGVldD4mJiBwYWdlU3R5bGVTaGVldCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NT
OjpTdHlsZVNoZWV0T3JpZ2luIG9yaWdpbiwgY29uc3QgU3RyaW5nJiBkb2N1bWVudFVSTCwgTGlz
dGVuZXIqIGxpc3RlbmVyKQorSW5zcGVjdG9yU3R5bGVTaGVldDo6SW5zcGVjdG9yU3R5bGVTaGVl
dChJbnNwZWN0b3JQYWdlQWdlbnQqIHBhZ2VBZ2VudCwgY29uc3QgU3RyaW5nJiBpZCwgUmVmUHRy
PENTU1N0eWxlU2hlZXQ+JiYgcGFnZVN0eWxlU2hlZXQsIFByb3RvY29sOjpDU1M6OlN0eWxlU2hl
ZXRPcmlnaW4gb3JpZ2luLCBjb25zdCBTdHJpbmcmIGRvY3VtZW50VVJMLCBMaXN0ZW5lciogbGlz
dGVuZXIpCiAgICAgOiBtX3BhZ2VBZ2VudChwYWdlQWdlbnQpCiAgICAgLCBtX2lkKGlkKQogICAg
ICwgbV9wYWdlU3R5bGVTaGVldChXVEZNb3ZlKHBhZ2VTdHlsZVNoZWV0KSkKQEAgLTk0Nyw3ICs5
NTQsNyBAQCBFeGNlcHRpb25PcjxDU1NTdHlsZVJ1bGUqPiBJbnNwZWN0b3JTdHlsZVNoZWV0Ojph
ZGRSdWxlKGNvbnN0IFN0cmluZyYgc2VsZWN0b3IpCiAgICAgc2V0VGV4dChzdHlsZVNoZWV0VGV4
dC50b1N0cmluZygpKTsKIAogICAgIC8vIEluc3BlY3RvciBTdHlsZSBTaGVldHMgYXJlIGFsd2F5
cyB0cmVhdGVkIGFzIHRob3VnaCB0aGVpciBwYXJzZWQgZGF0YSBpcyByZWFkeS4KLSAgICBpZiAo
bV9vcmlnaW4gPT0gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luOjpJ
bnNwZWN0b3IpCisgICAgaWYgKG1fb3JpZ2luID09IFByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRP
cmlnaW46Okluc3BlY3RvcikKICAgICAgICAgZmlyZVN0eWxlU2hlZXRDaGFuZ2VkKCk7CiAgICAg
ZWxzZQogICAgICAgICByZXBhcnNlU3R5bGVTaGVldChzdHlsZVNoZWV0VGV4dC50b1N0cmluZygp
KTsKQEAgLTEwMDcsNyArMTAxNCw3IEBAIENTU1N0eWxlUnVsZSogSW5zcGVjdG9yU3R5bGVTaGVl
dDo6cnVsZUZvcklkKGNvbnN0IEluc3BlY3RvckNTU0lkJiBpZCkgY29uc3QKICAgICByZXR1cm4g
aWQub3JkaW5hbCgpID49IG1fZmxhdFJ1bGVzLnNpemUoKSA/IG51bGxwdHIgOiBtX2ZsYXRSdWxl
cy5hdChpZC5vcmRpbmFsKCkpLmdldCgpOwogfQogCi1SZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6Q1NTOjpDU1NTdHlsZVNoZWV0Qm9keT4gSW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGRPYmpl
Y3RGb3JTdHlsZVNoZWV0KCkKK1JlZlB0cjxQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZVNoZWV0Qm9k
eT4gSW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGRPYmplY3RGb3JTdHlsZVNoZWV0KCkKIHsKICAg
ICBDU1NTdHlsZVNoZWV0KiBzdHlsZVNoZWV0ID0gcGFnZVN0eWxlU2hlZXQoKTsKICAgICBpZiAo
IXN0eWxlU2hlZXQpCkBAIC0xMDE1LDcgKzEwMjIsNyBAQCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6Q1NTOjpDU1NTdHlsZVNoZWV0Qm9keT4gSW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGRP
YgogCiAgICAgUmVmUHRyPENTU1J1bGVMaXN0PiBjc3NSdWxlTGlzdCA9IGFzQ1NTUnVsZUxpc3Qo
c3R5bGVTaGVldCk7CiAKLSAgICBhdXRvIHJlc3VsdCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNT
Uzo6Q1NTU3R5bGVTaGVldEJvZHk6OmNyZWF0ZSgpCisgICAgYXV0byByZXN1bHQgPSBQcm90b2Nv
bDo6Q1NTOjpDU1NTdHlsZVNoZWV0Qm9keTo6Y3JlYXRlKCkKICAgICAgICAgLnNldFN0eWxlU2hl
ZXRJZChpZCgpKQogICAgICAgICAuc2V0UnVsZXMoYnVpbGRBcnJheUZvclJ1bGVMaXN0KGNzc1J1
bGVMaXN0LmdldCgpKSkKICAgICAgICAgLnJlbGVhc2UoKTsKQEAgLTEwMjcsNyArMTAzNCw3IEBA
IFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlU2hlZXRCb2R5PiBJbnNw
ZWN0b3JTdHlsZVNoZWV0OjpidWlsZE9iCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGVTaGVldEhlYWRlcj4gSW5zcGVjdG9y
U3R5bGVTaGVldDo6YnVpbGRPYmplY3RGb3JTdHlsZVNoZWV0SW5mbygpCitSZWZQdHI8UHJvdG9j
b2w6OkNTUzo6Q1NTU3R5bGVTaGVldEhlYWRlcj4gSW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGRP
YmplY3RGb3JTdHlsZVNoZWV0SW5mbygpCiB7CiAgICAgQ1NTU3R5bGVTaGVldCogc3R5bGVTaGVl
dCA9IHBhZ2VTdHlsZVNoZWV0KCk7CiAgICAgaWYgKCFzdHlsZVNoZWV0KQpAQCAtMTAzNSw3ICsx
MDQyLDcgQEAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGVTaGVldEhl
YWRlcj4gSW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGQKIAogICAgIERvY3VtZW50KiBkb2N1bWVu
dCA9IHN0eWxlU2hlZXQtPm93bmVyRG9jdW1lbnQoKTsKICAgICBGcmFtZSogZnJhbWUgPSBkb2N1
bWVudCA/IGRvY3VtZW50LT5mcmFtZSgpIDogbnVsbHB0cjsKLSAgICByZXR1cm4gSW5zcGVjdG9y
OjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZVNoZWV0SGVhZGVyOjpjcmVhdGUoKQorICAgIHJldHVy
biBQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZVNoZWV0SGVhZGVyOjpjcmVhdGUoKQogICAgICAgICAu
c2V0U3R5bGVTaGVldElkKGlkKCkpCiAgICAgICAgIC5zZXRPcmlnaW4obV9vcmlnaW4pCiAgICAg
ICAgIC5zZXREaXNhYmxlZChzdHlsZVNoZWV0LT5kaXNhYmxlZCgpKQpAQCAtMTA0OCw5ICsxMDU1
LDkgQEAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGVTaGVldEhlYWRl
cj4gSW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGQKICAgICAgICAgLnJlbGVhc2UoKTsKIH0KIAot
c3RhdGljIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1NlbGVjdG9yPiBidWlsZE9i
amVjdEZvclNlbGVjdG9ySGVscGVyKGNvbnN0IFN0cmluZyYgc2VsZWN0b3JUZXh0LCBjb25zdCBD
U1NTZWxlY3RvciYgc2VsZWN0b3IpCitzdGF0aWMgUmVmPFByb3RvY29sOjpDU1M6OkNTU1NlbGVj
dG9yPiBidWlsZE9iamVjdEZvclNlbGVjdG9ySGVscGVyKGNvbnN0IFN0cmluZyYgc2VsZWN0b3JU
ZXh0LCBjb25zdCBDU1NTZWxlY3RvciYgc2VsZWN0b3IpCiB7Ci0gICAgYXV0byBpbnNwZWN0b3JT
ZWxlY3RvciA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU2VsZWN0b3I6OmNyZWF0ZSgp
CisgICAgYXV0byBpbnNwZWN0b3JTZWxlY3RvciA9IFByb3RvY29sOjpDU1M6OkNTU1NlbGVjdG9y
OjpjcmVhdGUoKQogICAgICAgICAuc2V0VGV4dChzZWxlY3RvclRleHQpCiAgICAgICAgIC5yZWxl
YXNlKCk7CiAKQEAgLTEwNjUsMTEgKzEwNzIsMTEgQEAgc3RhdGljIFJlZjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpDU1M6OkNTU1NlbGVjdG9yPiBidWlsZE9iamVjdEZvclNlbGVjdG9ySGVscGVyKGMK
ICAgICByZXR1cm4gaW5zcGVjdG9yU2VsZWN0b3I7CiB9CiAKLXN0YXRpYyBSZWY8SlNPTjo6QXJy
YXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1NlbGVjdG9yPj4gc2VsZWN0b3JzRnJv
bVNvdXJjZShjb25zdCBDU1NSdWxlU291cmNlRGF0YSogc291cmNlRGF0YSwgY29uc3QgU3RyaW5n
JiBzaGVldFRleHQsIGNvbnN0IENTU1NlbGVjdG9yTGlzdCYgc2VsZWN0b3JMaXN0KQorc3RhdGlj
IFJlZjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpDU1M6OkNTU1NlbGVjdG9yPj4gc2VsZWN0b3Jz
RnJvbVNvdXJjZShjb25zdCBDU1NSdWxlU291cmNlRGF0YSogc291cmNlRGF0YSwgY29uc3QgU3Ry
aW5nJiBzaGVldFRleHQsIGNvbnN0IENTU1NlbGVjdG9yTGlzdCYgc2VsZWN0b3JMaXN0KQogewog
ICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxKU0M6OllhcnI6OlJlZ3VsYXJFeHByZXNzaW9uPiBj
b21tZW50KCIvXFwqW15dKj9cXCovIiwgSlNDOjpZYXJyOjpUZXh0Q2FzZVNlbnNpdGl2ZSwgSlND
OjpZYXJyOjpNdWx0aWxpbmVFbmFibGVkKTsKIAotICAgIGF1dG8gcmVzdWx0ID0gSlNPTjo6QXJy
YXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1NlbGVjdG9yPjo6Y3JlYXRlKCk7Cisg
ICAgYXV0byByZXN1bHQgPSBKU09OOjpBcnJheU9mPFByb3RvY29sOjpDU1M6OkNTU1NlbGVjdG9y
Pjo6Y3JlYXRlKCk7CiAgICAgY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yID0gc2VsZWN0b3JM
aXN0LmZpcnN0KCk7CiAgICAgZm9yIChhdXRvJiByYW5nZSA6IHNvdXJjZURhdGEtPnNlbGVjdG9y
UmFuZ2VzKSB7CiAgICAgICAgIC8vIElmIHdlIGRvbid0IGhhdmUgYSBzZWxlY3RvciwgdGhhdCBt
ZWFucyB0aGUgU291cmNlRGF0YSBmb3IgdGhpcyBDU1NTdHlsZVNoZWV0CkBAIC0xMDg5LDE3ICsx
MDk2LDE3IEBAIHN0YXRpYyBSZWY8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpD
U1M6OkNTU1NlbGVjdG9yPj4gc2VsZWN0b3JzRnJvbVNvCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAotUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU2VsZWN0b3I+IEluc3BlY3RvclN0
eWxlU2hlZXQ6OmJ1aWxkT2JqZWN0Rm9yU2VsZWN0b3IoY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVj
dG9yKQorUmVmPFByb3RvY29sOjpDU1M6OkNTU1NlbGVjdG9yPiBJbnNwZWN0b3JTdHlsZVNoZWV0
OjpidWlsZE9iamVjdEZvclNlbGVjdG9yKGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlY3RvcikKIHsK
ICAgICByZXR1cm4gYnVpbGRPYmplY3RGb3JTZWxlY3RvckhlbHBlcihzZWxlY3Rvci0+c2VsZWN0
b3JUZXh0KCksICpzZWxlY3Rvcik7CiB9CiAKLVJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6
OlNlbGVjdG9yTGlzdD4gSW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGRPYmplY3RGb3JTZWxlY3Rv
ckxpc3QoQ1NTU3R5bGVSdWxlKiBydWxlLCBpbnQmIGVuZGluZ0xpbmUpCitSZWY8UHJvdG9jb2w6
OkNTUzo6U2VsZWN0b3JMaXN0PiBJbnNwZWN0b3JTdHlsZVNoZWV0OjpidWlsZE9iamVjdEZvclNl
bGVjdG9yTGlzdChDU1NTdHlsZVJ1bGUqIHJ1bGUsIGludCYgZW5kaW5nTGluZSkKIHsKICAgICBS
ZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+IHNvdXJjZURhdGE7CiAgICAgaWYgKGVuc3VyZVBhcnNl
ZERhdGFSZWFkeSgpKQogICAgICAgICBzb3VyY2VEYXRhID0gcnVsZVNvdXJjZURhdGFGb3IoJnJ1
bGUtPnN0eWxlKCkpOwotICAgIFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkNTUzo6Q1NTU2VsZWN0b3I+PiBzZWxlY3RvcnM7CisgICAgUmVmUHRyPEpTT046OkFycmF5
T2Y8UHJvdG9jb2w6OkNTUzo6Q1NTU2VsZWN0b3I+PiBzZWxlY3RvcnM7CiAKICAgICAvLyBUaGlz
IGludGVudGlvbmFsbHkgZG9lcyBub3QgcmVseSBvbiB0aGUgc291cmNlIGRhdGEgdG8gYXZvaWQg
Y2F0Y2hpbmcgdGhlIHRyYWlsaW5nIGNvbW1lbnRzIChiZWZvcmUgdGhlIGRlY2xhcmF0aW9uIHN0
YXJ0aW5nICd7JykuCiAgICAgU3RyaW5nIHNlbGVjdG9yVGV4dCA9IHJ1bGUtPnNlbGVjdG9yVGV4
dCgpOwpAQCAtMTEwNyw0MSArMTExNCw0MiBAQCBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NT
OjpTZWxlY3Rvckxpc3Q+IEluc3BlY3RvclN0eWxlU2hlZXQ6OmJ1aWxkT2JqZWN0Rm9yUwogICAg
IGlmIChzb3VyY2VEYXRhKQogICAgICAgICBzZWxlY3RvcnMgPSBzZWxlY3RvcnNGcm9tU291cmNl
KHNvdXJjZURhdGEuZ2V0KCksIG1fcGFyc2VkU3R5bGVTaGVldC0+dGV4dCgpLCBydWxlLT5zdHls
ZVJ1bGUoKS5zZWxlY3Rvckxpc3QoKSk7CiAgICAgZWxzZSB7Ci0gICAgICAgIHNlbGVjdG9ycyA9
IEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTZWxlY3Rvcj46OmNy
ZWF0ZSgpOworICAgICAgICBzZWxlY3RvcnMgPSBKU09OOjpBcnJheU9mPFByb3RvY29sOjpDU1M6
OkNTU1NlbGVjdG9yPjo6Y3JlYXRlKCk7CiAgICAgICAgIGNvbnN0IENTU1NlbGVjdG9yTGlzdCYg
c2VsZWN0b3JMaXN0ID0gcnVsZS0+c3R5bGVSdWxlKCkuc2VsZWN0b3JMaXN0KCk7CiAgICAgICAg
IGZvciAoY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yID0gc2VsZWN0b3JMaXN0LmZpcnN0KCk7
IHNlbGVjdG9yOyBzZWxlY3RvciA9IENTU1NlbGVjdG9yTGlzdDo6bmV4dChzZWxlY3RvcikpCiAg
ICAgICAgICAgICBzZWxlY3RvcnMtPmFkZEl0ZW0oYnVpbGRPYmplY3RGb3JTZWxlY3RvcihzZWxl
Y3RvcikpOwogICAgIH0KLSAgICBhdXRvIHJlc3VsdCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNT
Uzo6U2VsZWN0b3JMaXN0OjpjcmVhdGUoKQotICAgICAgICAuc2V0U2VsZWN0b3JzKFdURk1vdmUo
c2VsZWN0b3JzKSkKKyAgICBhdXRvIHJlc3VsdCA9IFByb3RvY29sOjpDU1M6OlNlbGVjdG9yTGlz
dDo6Y3JlYXRlKCkKKyAgICAgICAgLnNldFNlbGVjdG9ycyhzZWxlY3RvcnMucmVsZWFzZU5vbk51
bGwoKSkKICAgICAgICAgLnNldFRleHQoc2VsZWN0b3JUZXh0KQogICAgICAgICAucmVsZWFzZSgp
OwotICAgIGlmIChzb3VyY2VEYXRhKQotICAgICAgICByZXN1bHQtPnNldFJhbmdlKGJ1aWxkU291
cmNlUmFuZ2VPYmplY3Qoc291cmNlRGF0YS0+cnVsZUhlYWRlclJhbmdlLCBsaW5lRW5kaW5ncygp
LCAmZW5kaW5nTGluZSkpOworICAgIGlmIChzb3VyY2VEYXRhKSB7CisgICAgICAgIGlmIChhdXRv
IHJhbmdlID0gYnVpbGRTb3VyY2VSYW5nZU9iamVjdChzb3VyY2VEYXRhLT5ydWxlSGVhZGVyUmFu
Z2UsIGxpbmVFbmRpbmdzKCksICZlbmRpbmdMaW5lKSkKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0
UmFuZ2UocmFuZ2UucmVsZWFzZU5vbk51bGwoKSk7CisgICAgfQogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKLVJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1J1bGU+IEluc3BlY3Rv
clN0eWxlU2hlZXQ6OmJ1aWxkT2JqZWN0Rm9yUnVsZShDU1NTdHlsZVJ1bGUqIHJ1bGUpCitSZWZQ
dHI8UHJvdG9jb2w6OkNTUzo6Q1NTUnVsZT4gSW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGRPYmpl
Y3RGb3JSdWxlKENTU1N0eWxlUnVsZSogcnVsZSkKIHsKICAgICBDU1NTdHlsZVNoZWV0KiBzdHls
ZVNoZWV0ID0gcGFnZVN0eWxlU2hlZXQoKTsKICAgICBpZiAoIXN0eWxlU2hlZXQpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwogCiAgICAgaW50IGVuZGluZ0xpbmUgPSAwOwotICAgIGF1dG8gcmVz
dWx0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NSdWxlOjpjcmVhdGUoKQorICAgIGF1
dG8gcmVzdWx0ID0gUHJvdG9jb2w6OkNTUzo6Q1NTUnVsZTo6Y3JlYXRlKCkKICAgICAgICAgLnNl
dFNlbGVjdG9yTGlzdChidWlsZE9iamVjdEZvclNlbGVjdG9yTGlzdChydWxlLCBlbmRpbmdMaW5l
KSkKICAgICAgICAgLnNldFNvdXJjZUxpbmUoZW5kaW5nTGluZSkKICAgICAgICAgLnNldE9yaWdp
bihtX29yaWdpbikKICAgICAgICAgLnNldFN0eWxlKGJ1aWxkT2JqZWN0Rm9yU3R5bGUoJnJ1bGUt
PnN0eWxlKCkpKQogICAgICAgICAucmVsZWFzZSgpOwogCi0gICAgaWYgKG1fb3JpZ2luID09IElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6QXV0aG9yIHx8IG1fb3Jp
Z2luID09IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6VXNlcikK
KyAgICBpZiAobV9vcmlnaW4gPT0gUHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6QXV0
aG9yIHx8IG1fb3JpZ2luID09IFByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW46OlVzZXIp
CiAgICAgICAgIHJlc3VsdC0+c2V0U291cmNlVVJMKGZpbmFsVVJMKCkpOwogCiAgICAgaWYgKGNh
bkJpbmQoKSkgewotICAgICAgICBJbnNwZWN0b3JDU1NJZCBpZChydWxlSWQocnVsZSkpOwotICAg
ICAgICBpZiAoIWlkLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0UnVsZUlkKGlk
LmFzUHJvdG9jb2xWYWx1ZTxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1J1bGVJZD4oKSk7
CisgICAgICAgIGlmIChhdXRvIHJ1bGVJZCA9IHRoaXMtPnJ1bGVJZChydWxlKS5hc1Byb3RvY29s
VmFsdWU8UHJvdG9jb2w6OkNTUzo6Q1NTUnVsZUlkPigpKQorICAgICAgICAgICAgcmVzdWx0LT5z
ZXRSdWxlSWQocnVsZUlkLnJlbGVhc2VOb25OdWxsKCkpOwogICAgIH0KIAogICAgIGF1dG8gZ3Jv
dXBpbmdzUGF5bG9hZCA9IGJ1aWxkQXJyYXlGb3JHcm91cGluZ3MoKnJ1bGUpOwpAQCAtMTE1MSw3
ICsxMTU5LDcgQEAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUnVsZT4gSW5z
cGVjdG9yU3R5bGVTaGVldDo6YnVpbGRPYmplY3RGb3JSdWwKICAgICByZXR1cm4gcmVzdWx0Owog
fQogCi1SZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4gSW5zcGVjdG9y
U3R5bGVTaGVldDo6YnVpbGRPYmplY3RGb3JTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHls
ZSkKK1JlZjxQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4gSW5zcGVjdG9yU3R5bGVTaGVldDo6YnVp
bGRPYmplY3RGb3JTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSkKIHsKICAgICBSZWZQ
dHI8Q1NTUnVsZVNvdXJjZURhdGE+IHNvdXJjZURhdGE7CiAgICAgaWYgKGVuc3VyZVBhcnNlZERh
dGFSZWFkeSgpKQpAQCAtMTE1OSwxMyArMTE2NywxNSBAQCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6Q1NTOjpDU1NTdHlsZT4gSW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGRPYmplY3RGb3JT
dAogCiAgICAgSW5zcGVjdG9yQ1NTSWQgaWQgPSBydWxlT3JTdHlsZUlkKHN0eWxlKTsKICAgICBp
ZiAoaWQuaXNFbXB0eSgpKSB7Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpD
U1M6OkNTU1N0eWxlOjpjcmVhdGUoKQotICAgICAgICAgICAgLnNldENzc1Byb3BlcnRpZXMoQXJy
YXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1Byb3BlcnR5Pjo6Y3JlYXRlKCkpCi0g
ICAgICAgICAgICAuc2V0U2hvcnRoYW5kRW50cmllcyhBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkNTUzo6U2hvcnRoYW5kRW50cnk+OjpjcmVhdGUoKSkKKyAgICAgICAgcmV0dXJuIFByb3Rv
Y29sOjpDU1M6OkNTU1N0eWxlOjpjcmVhdGUoKQorICAgICAgICAgICAgLnNldENzc1Byb3BlcnRp
ZXMoQXJyYXlPZjxQcm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0eT46OmNyZWF0ZSgpKQorICAgICAg
ICAgICAgLnNldFNob3J0aGFuZEVudHJpZXMoQXJyYXlPZjxQcm90b2NvbDo6Q1NTOjpTaG9ydGhh
bmRFbnRyeT46OmNyZWF0ZSgpKQogICAgICAgICAgICAgLnJlbGVhc2UoKTsKICAgICB9CisKICAg
ICBSZWZQdHI8SW5zcGVjdG9yU3R5bGU+IGluc3BlY3RvclN0eWxlID0gaW5zcGVjdG9yU3R5bGVG
b3JJZChpZCk7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+
IHJlc3VsdCA9IGluc3BlY3RvclN0eWxlLT5idWlsZE9iamVjdEZvclN0eWxlKCk7CisKKyAgICBh
dXRvIHJlc3VsdCA9IGluc3BlY3RvclN0eWxlLT5idWlsZE9iamVjdEZvclN0eWxlKCk7CiAKICAg
ICAvLyBTdHlsZSB0ZXh0IGNhbm5vdCBiZSByZXRyaWV2ZWQgd2l0aG91dCBzdHlsZXNoZWV0LCBz
byBzZXQgY3NzVGV4dCBoZXJlLgogICAgIGlmIChzb3VyY2VEYXRhKSB7CkBAIC0xMjc0LDcgKzEy
ODQsNyBAQCBib29sIEluc3BlY3RvclN0eWxlU2hlZXQ6OnN0eWxlU2hlZXRNdXRhdGVkKCkgY29u
c3QKIAogYm9vbCBJbnNwZWN0b3JTdHlsZVNoZWV0OjplbnN1cmVQYXJzZWREYXRhUmVhZHkoKQog
ewotICAgIGJvb2wgYWxsb3dQYXJzZWREYXRhID0gbV9vcmlnaW4gPT0gSW5zcGVjdG9yOjpQcm90
b2NvbDo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luOjpJbnNwZWN0b3IgfHwgIXN0eWxlU2hlZXRNdXRh
dGVkKCk7CisgICAgYm9vbCBhbGxvd1BhcnNlZERhdGEgPSBtX29yaWdpbiA9PSBQcm90b2NvbDo6
Q1NTOjpTdHlsZVNoZWV0T3JpZ2luOjpJbnNwZWN0b3IgfHwgIXN0eWxlU2hlZXRNdXRhdGVkKCk7
CiAgICAgcmV0dXJuIGFsbG93UGFyc2VkRGF0YSAmJiBlbnN1cmVUZXh0KCkgJiYgZW5zdXJlU291
cmNlRGF0YSgpOwogfQogCkBAIC0xMzcxLDcgKzEzODEsNyBAQCBJbnNwZWN0b3JDU1NJZCBJbnNw
ZWN0b3JTdHlsZVNoZWV0OjpydWxlSWQoQ1NTU3R5bGVSdWxlKiBydWxlKSBjb25zdAogCiBib29s
IEluc3BlY3RvclN0eWxlU2hlZXQ6Om9yaWdpbmFsU3R5bGVTaGVldFRleHQoU3RyaW5nKiByZXN1
bHQpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX3BhZ2VTdHlsZVNoZWV0IHx8IG1fb3JpZ2luID09IElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6VXNlckFnZW50KQorICAg
IGlmICghbV9wYWdlU3R5bGVTaGVldCB8fCBtX29yaWdpbiA9PSBQcm90b2NvbDo6Q1NTOjpTdHls
ZVNoZWV0T3JpZ2luOjpVc2VyQWdlbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1
cm4gaW5saW5lU3R5bGVTaGVldFRleHQocmVzdWx0KSB8fCByZXNvdXJjZVN0eWxlU2hlZXRUZXh0
KHJlc3VsdCkgfHwgZXh0ZW5zaW9uU3R5bGVTaGVldFRleHQocmVzdWx0KTsKIH0KQEAgLTE0MTQs
OSArMTQyNCw5IEBAIGJvb2wgSW5zcGVjdG9yU3R5bGVTaGVldDo6ZXh0ZW5zaW9uU3R5bGVTaGVl
dFRleHQoU3RyaW5nKiByZXN1bHQpIGNvbnN0CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLVJlZjxK
U09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUnVsZT4+IEluc3BlY3Rv
clN0eWxlU2hlZXQ6OmJ1aWxkQXJyYXlGb3JSdWxlTGlzdChDU1NSdWxlTGlzdCogcnVsZUxpc3Qp
CitSZWY8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6Q1NTOjpDU1NSdWxlPj4gSW5zcGVjdG9yU3R5
bGVTaGVldDo6YnVpbGRBcnJheUZvclJ1bGVMaXN0KENTU1J1bGVMaXN0KiBydWxlTGlzdCkKIHsK
LSAgICBhdXRvIHJlc3VsdCA9IEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NT
OjpDU1NSdWxlPjo6Y3JlYXRlKCk7CisgICAgYXV0byByZXN1bHQgPSBKU09OOjpBcnJheU9mPFBy
b3RvY29sOjpDU1M6OkNTU1J1bGU+OjpjcmVhdGUoKTsKICAgICBpZiAoIXJ1bGVMaXN0KQogICAg
ICAgICByZXR1cm4gcmVzdWx0OwogCkBAIC0xNDI0LDggKzE0MzQsMTAgQEAgUmVmPEpTT046OkFy
cmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NSdWxlPj4gSW5zcGVjdG9yU3R5bGVT
aGVldDo6YnVpbGQKICAgICBDU1NTdHlsZVJ1bGVWZWN0b3IgcnVsZXM7CiAgICAgY29sbGVjdEZs
YXRSdWxlcyhXVEZNb3ZlKHJlZlJ1bGVMaXN0KSwgJnJ1bGVzKTsKIAotICAgIGZvciAoYXV0byYg
cnVsZSA6IHJ1bGVzKQotICAgICAgICByZXN1bHQtPmFkZEl0ZW0oYnVpbGRPYmplY3RGb3JSdWxl
KHJ1bGUuZ2V0KCkpKTsKKyAgICBmb3IgKGF1dG8mIHJ1bGUgOiBydWxlcykgeworICAgICAgICBp
ZiAoYXV0byBydWxlT2JqZWN0ID0gYnVpbGRPYmplY3RGb3JSdWxlKHJ1bGUuZ2V0KCkpKQorICAg
ICAgICAgICAgcmVzdWx0LT5hZGRJdGVtKHJ1bGVPYmplY3QucmVsZWFzZU5vbk51bGwoKSk7Cisg
ICAgfQogCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTE0NDgsMTIgKzE0NjAsMTIgQEAgdm9p
ZCBJbnNwZWN0b3JTdHlsZVNoZWV0Ojpjb2xsZWN0RmxhdFJ1bGVzKFJlZlB0cjxDU1NSdWxlTGlz
dD4mJiBydWxlTGlzdCwgQ1NTU3QKICAgICB9CiB9CiAKLVJlZjxJbnNwZWN0b3JTdHlsZVNoZWV0
Rm9ySW5saW5lU3R5bGU+IEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZTo6Y3JlYXRl
KEluc3BlY3RvclBhZ2VBZ2VudCogcGFnZUFnZW50LCBjb25zdCBTdHJpbmcmIGlkLCBSZWY8U3R5
bGVkRWxlbWVudD4mJiBlbGVtZW50LCBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlN0eWxlU2hl
ZXRPcmlnaW4gb3JpZ2luLCBMaXN0ZW5lciogbGlzdGVuZXIpCitSZWY8SW5zcGVjdG9yU3R5bGVT
aGVldEZvcklubGluZVN0eWxlPiBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU6OmNy
ZWF0ZShJbnNwZWN0b3JQYWdlQWdlbnQqIHBhZ2VBZ2VudCwgY29uc3QgU3RyaW5nJiBpZCwgUmVm
PFN0eWxlZEVsZW1lbnQ+JiYgZWxlbWVudCwgUHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdp
biBvcmlnaW4sIExpc3RlbmVyKiBsaXN0ZW5lcikKIHsKICAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGUocGFnZUFnZW50LCBpZCwgV1RGTW92
ZShlbGVtZW50KSwgb3JpZ2luLCBsaXN0ZW5lcikpOwogfQogCi1JbnNwZWN0b3JTdHlsZVNoZWV0
Rm9ySW5saW5lU3R5bGU6Okluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZShJbnNwZWN0
b3JQYWdlQWdlbnQqIHBhZ2VBZ2VudCwgY29uc3QgU3RyaW5nJiBpZCwgUmVmPFN0eWxlZEVsZW1l
bnQ+JiYgZWxlbWVudCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2lu
IG9yaWdpbiwgTGlzdGVuZXIqIGxpc3RlbmVyKQorSW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGlu
ZVN0eWxlOjpJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGUoSW5zcGVjdG9yUGFnZUFn
ZW50KiBwYWdlQWdlbnQsIGNvbnN0IFN0cmluZyYgaWQsIFJlZjxTdHlsZWRFbGVtZW50PiYmIGVs
ZW1lbnQsIFByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW4gb3JpZ2luLCBMaXN0ZW5lciog
bGlzdGVuZXIpCiAgICAgOiBJbnNwZWN0b3JTdHlsZVNoZWV0KHBhZ2VBZ2VudCwgaWQsIG51bGxw
dHIsIG9yaWdpbiwgU3RyaW5nKCksIGxpc3RlbmVyKQogICAgICwgbV9lbGVtZW50KFdURk1vdmUo
ZWxlbWVudCkpCiAgICAgLCBtX3J1bGVTb3VyY2VEYXRhKG51bGxwdHIpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5oIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuaAppbmRleCA3M2QzNjE4ZTVhNDhh
Mzc0NTc2MjZkZDU0OGRjZTdlMzZiMWRlMTM1Li43OGYxNGQyOTE2YmFhNWMzN2UwMTA5MzkyZjIx
ZWY2NmE2NTVmNzZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yU3R5bGVTaGVldC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JT
dHlsZVNoZWV0LmgKQEAgLTQ1LDE4ICs0NSwxOSBAQCBjbGFzcyBFbGVtZW50OwogY2xhc3MgSW5z
cGVjdG9yUGFnZUFnZW50OwogY2xhc3MgSW5zcGVjdG9yU3R5bGVTaGVldDsKIAotdHlwZWRlZiBT
dHJpbmcgRXJyb3JTdHJpbmc7Ci0KIGNsYXNzIEluc3BlY3RvckNTU0lkIHsKIHB1YmxpYzoKICAg
ICBJbnNwZWN0b3JDU1NJZCgpID0gZGVmYXVsdDsKIAogICAgIGV4cGxpY2l0IEluc3BlY3RvckNT
U0lkKGNvbnN0IEpTT046Ok9iamVjdCYgdmFsdWUpCiAgICAgewotICAgICAgICBpZiAoIXZhbHVl
LmdldFN0cmluZygic3R5bGVTaGVldElkIl9zLCBtX3N0eWxlU2hlZXRJZCkpCisgICAgICAgIG1f
c3R5bGVTaGVldElkID0gdmFsdWUuZ2V0U3RyaW5nKCJzdHlsZVNoZWV0SWQiX3MpOworICAgICAg
ICBpZiAoIW1fc3R5bGVTaGVldElkKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIGlm
ICghdmFsdWUuZ2V0SW50ZWdlcigib3JkaW5hbCJfcywgbV9vcmRpbmFsKSkKKyAgICAgICAgaWYg
KGF1dG8gb3JkaW5hbCA9IHZhbHVlLmdldEludGVnZXIoIm9yZGluYWwiX3MpKQorICAgICAgICAg
ICAgbV9vcmRpbmFsID0gKm9yZGluYWw7CisgICAgICAgIGVsc2UKICAgICAgICAgICAgIG1fc3R5
bGVTaGVldElkID0gU3RyaW5nKCk7CiAgICAgfQogCkBAIC0xMjYsNyArMTI3LDcgQEAgcHVibGlj
OgogICAgIH5JbnNwZWN0b3JTdHlsZSgpOwogCiAgICAgQ1NTU3R5bGVEZWNsYXJhdGlvbiYgY3Nz
U3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0eWxlLmdldCgpOyB9Ci0gICAgUmVmUHRyPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+IGJ1aWxkT2JqZWN0Rm9yU3R5bGUoKSBjb25z
dDsKKyAgICBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4gYnVpbGRPYmpl
Y3RGb3JTdHlsZSgpIGNvbnN0OwogICAgIFJlZjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkNTUzo6Q1NTQ29tcHV0ZWRTdHlsZVByb3BlcnR5Pj4gYnVpbGRBcnJheUZvckNvbXB1
dGVkU3R5bGUoKSBjb25zdDsKIAogICAgIEV4Y2VwdGlvbk9yPFN0cmluZz4gdGV4dCgpIGNvbnN0
OwpAQCAtMTc1LDcgKzE3Niw3IEBAIHB1YmxpYzoKICAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6Q1NTOjpDU1NTdHlsZVNoZWV0Qm9keT4gYnVpbGRPYmplY3RGb3JTdHlsZVNoZWV0KCk7
CiAgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGVTaGVldEhlYWRl
cj4gYnVpbGRPYmplY3RGb3JTdHlsZVNoZWV0SW5mbygpOwogICAgIFJlZlB0cjxJbnNwZWN0b3I6
OlByb3RvY29sOjpDU1M6OkNTU1J1bGU+IGJ1aWxkT2JqZWN0Rm9yUnVsZShDU1NTdHlsZVJ1bGUq
KTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4gYnVpbGRP
YmplY3RGb3JTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKik7CisgICAgUmVmPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGU+IGJ1aWxkT2JqZWN0Rm9yU3R5bGUoQ1NTU3R5bGVEZWNs
YXJhdGlvbiopOwogICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IHNldFN0eWxlVGV4dChjb25zdCBJbnNw
ZWN0b3JDU1NJZCYsIGNvbnN0IFN0cmluZyYgdGV4dCwgU3RyaW5nKiBvbGRUZXh0KTsKIAogICAg
IHZpcnR1YWwgRXhjZXB0aW9uT3I8U3RyaW5nPiB0ZXh0KCkgY29uc3Q7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvVGltZWxpbmVSZWNvcmRGYWN0b3J5LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9UaW1lbGluZVJlY29yZEZhY3RvcnkuY3BwCmluZGV4IDM2M2Qx
NjhlODA1ZWEzZjg3ZDdiYzlkODI5ZDQ2ZGU2Y2JmNTJhYWUuLmEwNzAzMzZiNzU2MWRhODVlY2I1
ZmZmNGMxNGI2MWJmZjM5NjIxMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9UaW1lbGluZVJlY29yZEZhY3RvcnkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9UaW1lbGluZVJlY29yZEZhY3RvcnkuY3BwCkBAIC0xNjEsOSArMTYxLDkgQEAgUmVmPEpTT046
Ok9iamVjdD4gVGltZWxpbmVSZWNvcmRGYWN0b3J5OjpjcmVhdGVQYWludERhdGEoY29uc3QgRmxv
YXRRdWFkJiBxdWFkKQogICAgIHJldHVybiBkYXRhOwogfQogCi12b2lkIFRpbWVsaW5lUmVjb3Jk
RmFjdG9yeTo6YXBwZW5kTGF5b3V0Um9vdChKU09OOjpPYmplY3QqIGRhdGEsIGNvbnN0IEZsb2F0
UXVhZCYgcXVhZCkKK3ZvaWQgVGltZWxpbmVSZWNvcmRGYWN0b3J5OjphcHBlbmRMYXlvdXRSb290
KEpTT046Ok9iamVjdCYgZGF0YSwgY29uc3QgRmxvYXRRdWFkJiBxdWFkKQogewotICAgIGRhdGEt
PnNldEFycmF5KCJyb290Il9zLCBjcmVhdGVRdWFkKHF1YWQpKTsKKyAgICBkYXRhLnNldEFycmF5
KCJyb290Il9zLCBjcmVhdGVRdWFkKHF1YWQpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1RpbWVsaW5lUmVjb3JkRmFj
dG9yeS5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1RpbWVsaW5lUmVjb3JkRmFjdG9yeS5o
CmluZGV4IDQ4ZjQzMGU5YmVkOTNkMWFmZDJiYTM2ZTU5NTdlN2VmMDYxOGIzYWEuLmNhNWRiNDEw
ODk4ZGI5M2NkMGEzNWMyNjI3OTA5YzFkNDllMWMyNjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9UaW1lbGluZVJlY29yZEZhY3RvcnkuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvVGltZWxpbmVSZWNvcmRGYWN0b3J5LmgKQEAgLTU5LDcgKzU5LDcgQEAgcHVi
bGljOgogICAgIHN0YXRpYyBSZWY8SlNPTjo6T2JqZWN0PiBjcmVhdGVPYnNlcnZlckNhbGxiYWNr
RGF0YShjb25zdCBTdHJpbmcmIGNhbGxiYWNrVHlwZSk7CiAgICAgc3RhdGljIFJlZjxKU09OOjpP
YmplY3Q+IGNyZWF0ZVBhaW50RGF0YShjb25zdCBGbG9hdFF1YWQmKTsKIAotICAgIHN0YXRpYyB2
b2lkIGFwcGVuZExheW91dFJvb3QoSlNPTjo6T2JqZWN0KiBkYXRhLCBjb25zdCBGbG9hdFF1YWQm
KTsKKyAgICBzdGF0aWMgdm9pZCBhcHBlbmRMYXlvdXRSb290KEpTT046Ok9iamVjdCYgZGF0YSwg
Y29uc3QgRmxvYXRRdWFkJik7CiAKIHByaXZhdGU6CiAgICAgVGltZWxpbmVSZWNvcmRGYWN0b3J5
KCkgeyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3Bl
Y3RvckFuaW1hdGlvbkFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9yQW5pbWF0aW9uQWdlbnQuY3BwCmluZGV4IDcxMzI1ZjUyMmQzYTEyM2E1MzRmYzdm
ZjNhNTg0YjU4YmM5NGY5MzYuLjAyNTcxMmIwOTQ2NGVjNmIxNTQ3ZWNmNzA2NmUyMGJkZmFiZjQx
Y2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9y
QW5pbWF0aW9uQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9yQW5pbWF0aW9uQWdlbnQuY3BwCkBAIC03Miw0NSArNzIsNDUgQEAgc3RhdGljIE9w
dGlvbmFsPGRvdWJsZT4gcHJvdG9jb2xWYWx1ZUZvclNlY29uZHMoY29uc3QgU2Vjb25kcyYgc2Vj
b25kcykKICAgICByZXR1cm4gc2Vjb25kcy5taWxsaXNlY29uZHMoKTsKIH0KIAotc3RhdGljIE9w
dGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFuaW1hdGlvbjo6UGxheWJhY2tEaXJlY3Rpb24+
IHByb3RvY29sVmFsdWVGb3JQbGF5YmFja0RpcmVjdGlvbihQbGF5YmFja0RpcmVjdGlvbiBwbGF5
YmFja0RpcmVjdGlvbikKK3N0YXRpYyBPcHRpb25hbDxQcm90b2NvbDo6QW5pbWF0aW9uOjpQbGF5
YmFja0RpcmVjdGlvbj4gcHJvdG9jb2xWYWx1ZUZvclBsYXliYWNrRGlyZWN0aW9uKFBsYXliYWNr
RGlyZWN0aW9uIHBsYXliYWNrRGlyZWN0aW9uKQogewogICAgIHN3aXRjaCAocGxheWJhY2tEaXJl
Y3Rpb24pIHsKICAgICBjYXNlIFBsYXliYWNrRGlyZWN0aW9uOjpOb3JtYWw6Ci0gICAgICAgIHJl
dHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpBbmltYXRpb246OlBsYXliYWNrRGlyZWN0aW9uOjpO
b3JtYWw7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6QW5pbWF0aW9uOjpQbGF5YmFja0RpcmVj
dGlvbjo6Tm9ybWFsOwogICAgIGNhc2UgUGxheWJhY2tEaXJlY3Rpb246OlJldmVyc2U6Ci0gICAg
ICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpBbmltYXRpb246OlBsYXliYWNrRGlyZWN0
aW9uOjpSZXZlcnNlOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OkFuaW1hdGlvbjo6UGxheWJh
Y2tEaXJlY3Rpb246OlJldmVyc2U7CiAgICAgY2FzZSBQbGF5YmFja0RpcmVjdGlvbjo6QWx0ZXJu
YXRlOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6QW5pbWF0aW9uOjpQbGF5
YmFja0RpcmVjdGlvbjo6QWx0ZXJuYXRlOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OkFuaW1h
dGlvbjo6UGxheWJhY2tEaXJlY3Rpb246OkFsdGVybmF0ZTsKICAgICBjYXNlIFBsYXliYWNrRGly
ZWN0aW9uOjpBbHRlcm5hdGVSZXZlcnNlOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90
b2NvbDo6QW5pbWF0aW9uOjpQbGF5YmFja0RpcmVjdGlvbjo6QWx0ZXJuYXRlUmV2ZXJzZTsKKyAg
ICAgICAgcmV0dXJuIFByb3RvY29sOjpBbmltYXRpb246OlBsYXliYWNrRGlyZWN0aW9uOjpBbHRl
cm5hdGVSZXZlcnNlOwogICAgIH0KIAogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CiB9CiAKLXN0YXRpYyBPcHRpb25hbDxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpBbmltYXRpb246OkZpbGxNb2RlPiBwcm90b2NvbFZhbHVlRm9yRmlsbE1vZGUoRmlsbE1v
ZGUgZmlsbE1vZGUpCitzdGF0aWMgT3B0aW9uYWw8UHJvdG9jb2w6OkFuaW1hdGlvbjo6RmlsbE1v
ZGU+IHByb3RvY29sVmFsdWVGb3JGaWxsTW9kZShGaWxsTW9kZSBmaWxsTW9kZSkKIHsKICAgICBz
d2l0Y2ggKGZpbGxNb2RlKSB7CiAgICAgY2FzZSBGaWxsTW9kZTo6Tm9uZToKLSAgICAgICAgcmV0
dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFuaW1hdGlvbjo6RmlsbE1vZGU6Ok5vbmU7CisgICAg
ICAgIHJldHVybiBQcm90b2NvbDo6QW5pbWF0aW9uOjpGaWxsTW9kZTo6Tm9uZTsKICAgICBjYXNl
IEZpbGxNb2RlOjpGb3J3YXJkczoKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkFuaW1hdGlvbjo6RmlsbE1vZGU6OkZvcndhcmRzOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6
OkFuaW1hdGlvbjo6RmlsbE1vZGU6OkZvcndhcmRzOwogICAgIGNhc2UgRmlsbE1vZGU6OkJhY2t3
YXJkczoKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFuaW1hdGlvbjo6Rmls
bE1vZGU6OkJhY2t3YXJkczsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpBbmltYXRpb246OkZp
bGxNb2RlOjpCYWNrd2FyZHM7CiAgICAgY2FzZSBGaWxsTW9kZTo6Qm90aDoKLSAgICAgICAgcmV0
dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFuaW1hdGlvbjo6RmlsbE1vZGU6OkJvdGg7CisgICAg
ICAgIHJldHVybiBQcm90b2NvbDo6QW5pbWF0aW9uOjpGaWxsTW9kZTo6Qm90aDsKICAgICBjYXNl
IEZpbGxNb2RlOjpBdXRvOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6QW5p
bWF0aW9uOjpGaWxsTW9kZTo6QXV0bzsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpBbmltYXRp
b246OkZpbGxNb2RlOjpBdXRvOwogICAgIH0KIAogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiB9CiAKLXN0YXRpYyBSZWY8SlNPTjo6QXJyYXlPZjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpBbmltYXRpb246OktleWZyYW1lPj4gYnVpbGRPYmplY3RGb3JL
ZXlmcmFtZXMoS2V5ZnJhbWVFZmZlY3QmIGtleWZyYW1lRWZmZWN0KQorc3RhdGljIFJlZjxKU09O
OjpBcnJheU9mPFByb3RvY29sOjpBbmltYXRpb246OktleWZyYW1lPj4gYnVpbGRPYmplY3RGb3JL
ZXlmcmFtZXMoS2V5ZnJhbWVFZmZlY3QmIGtleWZyYW1lRWZmZWN0KQogewotICAgIGF1dG8ga2V5
ZnJhbWVzUGF5bG9hZCA9IEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6QW5pbWF0
aW9uOjpLZXlmcmFtZT46OmNyZWF0ZSgpOworICAgIGF1dG8ga2V5ZnJhbWVzUGF5bG9hZCA9IEpT
T046OkFycmF5T2Y8UHJvdG9jb2w6OkFuaW1hdGlvbjo6S2V5ZnJhbWU+OjpjcmVhdGUoKTsKIAog
ICAgIGNvbnN0IGF1dG8mIGJsZW5kaW5nS2V5ZnJhbWVzID0ga2V5ZnJhbWVFZmZlY3QuYmxlbmRp
bmdLZXlmcmFtZXMoKTsKICAgICBjb25zdCBhdXRvJiBwYXJzZWRLZXlmcmFtZXMgPSBrZXlmcmFt
ZUVmZmVjdC5wYXJzZWRLZXlmcmFtZXMoKTsKQEAgLTEzMCw3ICsxMzAsNyBAQCBzdGF0aWMgUmVm
PEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6QW5pbWF0aW9uOjpLZXlmcmFtZT4+
IGJ1aWxkT2JqZWN0RgogICAgICAgICAgICAgQVNTRVJUKGJsZW5kaW5nS2V5ZnJhbWUuc3R5bGUo
KSk7CiAgICAgICAgICAgICBhdXRvJiBzdHlsZSA9ICpibGVuZGluZ0tleWZyYW1lLnN0eWxlKCk7
CiAKLSAgICAgICAgICAgIGF1dG8ga2V5ZnJhbWVQYXlsb2FkID0gSW5zcGVjdG9yOjpQcm90b2Nv
bDo6QW5pbWF0aW9uOjpLZXlmcmFtZTo6Y3JlYXRlKCkKKyAgICAgICAgICAgIGF1dG8ga2V5ZnJh
bWVQYXlsb2FkID0gUHJvdG9jb2w6OkFuaW1hdGlvbjo6S2V5ZnJhbWU6OmNyZWF0ZSgpCiAgICAg
ICAgICAgICAgICAgLnNldE9mZnNldChibGVuZGluZ0tleWZyYW1lLmtleSgpKQogICAgICAgICAg
ICAgICAgIC5yZWxlYXNlKCk7CiAKQEAgLTE2Nyw3ICsxNjcsNyBAQCBzdGF0aWMgUmVmPEpTT046
OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6QW5pbWF0aW9uOjpLZXlmcmFtZT4+IGJ1aWxk
T2JqZWN0RgogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgZm9yIChjb25zdCBhdXRv
JiBwYXJzZWRLZXlmcmFtZSA6IHBhcnNlZEtleWZyYW1lcykgewotICAgICAgICAgICAgYXV0byBr
ZXlmcmFtZVBheWxvYWQgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBbmltYXRpb246OktleWZyYW1l
OjpjcmVhdGUoKQorICAgICAgICAgICAgYXV0byBrZXlmcmFtZVBheWxvYWQgPSBQcm90b2NvbDo6
QW5pbWF0aW9uOjpLZXlmcmFtZTo6Y3JlYXRlKCkKICAgICAgICAgICAgICAgICAuc2V0T2Zmc2V0
KHBhcnNlZEtleWZyYW1lLmNvbXB1dGVkT2Zmc2V0KQogICAgICAgICAgICAgICAgIC5yZWxlYXNl
KCk7CiAKQEAgLTE4Niw5ICsxODYsOSBAQCBzdGF0aWMgUmVmPEpTT046OkFycmF5T2Y8SW5zcGVj
dG9yOjpQcm90b2NvbDo6QW5pbWF0aW9uOjpLZXlmcmFtZT4+IGJ1aWxkT2JqZWN0RgogICAgIHJl
dHVybiBrZXlmcmFtZXNQYXlsb2FkOwogfQogCi1zdGF0aWMgUmVmPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkFuaW1hdGlvbjo6RWZmZWN0PiBidWlsZE9iamVjdEZvckVmZmVjdChBbmltYXRpb25FZmZl
Y3QmIGVmZmVjdCkKK3N0YXRpYyBSZWY8UHJvdG9jb2w6OkFuaW1hdGlvbjo6RWZmZWN0PiBidWls
ZE9iamVjdEZvckVmZmVjdChBbmltYXRpb25FZmZlY3QmIGVmZmVjdCkKIHsKLSAgICBhdXRvIGVm
ZmVjdFBheWxvYWQgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBbmltYXRpb246OkVmZmVjdDo6Y3Jl
YXRlKCkKKyAgICBhdXRvIGVmZmVjdFBheWxvYWQgPSBQcm90b2NvbDo6QW5pbWF0aW9uOjpFZmZl
Y3Q6OmNyZWF0ZSgpCiAgICAgICAgIC5yZWxlYXNlKCk7CiAKICAgICBpZiAoYXV0byBzdGFydERl
bGF5ID0gcHJvdG9jb2xWYWx1ZUZvclNlY29uZHMoZWZmZWN0LmRlbGF5KCkpKQpAQCAtMjM4LDIw
ICsyMzgsMTcgQEAgdm9pZCBJbnNwZWN0b3JBbmltYXRpb25BZ2VudDo6ZGlkQ3JlYXRlRnJvbnRl
bmRBbmRCYWNrZW5kKEZyb250ZW5kUm91dGVyKiwgQmFja2UKIAogdm9pZCBJbnNwZWN0b3JBbmlt
YXRpb25BZ2VudDo6d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoRGlzY29ubmVjdFJlYXNv
bikKIHsKLSAgICBFcnJvclN0cmluZyBpZ25vcmVkOwotICAgIHN0b3BUcmFja2luZyhpZ25vcmVk
KTsKLSAgICBkaXNhYmxlKGlnbm9yZWQpOworICAgIHN0b3BUcmFja2luZygpOworICAgIGRpc2Fi
bGUoKTsKIAogICAgIEFTU0VSVChtX2luc3RydW1lbnRpbmdBZ2VudHMucGVyc2lzdGVudEFuaW1h
dGlvbkFnZW50KCkgPT0gdGhpcyk7CiAgICAgbV9pbnN0cnVtZW50aW5nQWdlbnRzLnNldFBlcnNp
c3RlbnRBbmltYXRpb25BZ2VudChudWxscHRyKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JBbmltYXRp
b25BZ2VudDo6ZW5hYmxlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZykKK1Byb3RvY29sOjpFcnJv
clN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckFuaW1hdGlvbkFnZW50OjplbmFibGUoKQogewotICAg
IGlmIChtX2luc3RydW1lbnRpbmdBZ2VudHMuZW5hYmxlZEFuaW1hdGlvbkFnZW50KCkgPT0gdGhp
cykgewotICAgICAgICBlcnJvclN0cmluZyA9ICJBbmltYXRpb24gZG9tYWluIGFscmVhZHkgZW5h
YmxlZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAobV9pbnN0cnVtZW50aW5n
QWdlbnRzLmVuYWJsZWRBbmltYXRpb25BZ2VudCgpID09IHRoaXMpCisgICAgICAgIHJldHVybiBt
YWtlVW5leHBlY3RlZCgiQW5pbWF0aW9uIGRvbWFpbiBhbHJlYWR5IGVuYWJsZWQiX3MpOwogCiAg
ICAgbV9pbnN0cnVtZW50aW5nQWdlbnRzLnNldEVuYWJsZWRBbmltYXRpb25BZ2VudCh0aGlzKTsK
IApAQCAtMjcwLDQ5ICsyNjcsNTEgQEAgdm9pZCBJbnNwZWN0b3JBbmltYXRpb25BZ2VudDo6ZW5h
YmxlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZykKICAgICAgICAgICAgICAgICBiaW5kQW5pbWF0
aW9uKCphbmltYXRpb24sIGZhbHNlKTsKICAgICAgICAgfQogICAgIH0KKworICAgIHJldHVybiB7
IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yQW5pbWF0aW9uQWdlbnQ6OmRpc2FibGUoRXJyb3JTdHJp
bmcmKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yQW5pbWF0aW9uQWdl
bnQ6OmRpc2FibGUoKQogewogICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy5zZXRFbmFibGVkQW5p
bWF0aW9uQWdlbnQobnVsbHB0cik7CiAKICAgICByZXNldCgpOworCisgICAgcmV0dXJuIHsgfTsK
IH0KIAotdm9pZCBJbnNwZWN0b3JBbmltYXRpb25BZ2VudDo6cmVxdWVzdEVmZmVjdFRhcmdldChF
cnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uSWQsIGludCog
bm9kZUlkKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UHJvdG9jb2w6OkRPTTo6Tm9kZUlkPiBJ
bnNwZWN0b3JBbmltYXRpb25BZ2VudDo6cmVxdWVzdEVmZmVjdFRhcmdldChjb25zdCBQcm90b2Nv
bDo6QW5pbWF0aW9uOjpBbmltYXRpb25JZCYgYW5pbWF0aW9uSWQpCiB7CisgICAgUHJvdG9jb2w6
OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAgICAgYXV0byogYW5pbWF0aW9uID0gYXNzZXJ0
QW5pbWF0aW9uKGVycm9yU3RyaW5nLCBhbmltYXRpb25JZCk7CiAgICAgaWYgKCFhbmltYXRpb24p
Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3Ry
aW5nKTsKIAogICAgIGF1dG8qIGRvbUFnZW50ID0gbV9pbnN0cnVtZW50aW5nQWdlbnRzLnBlcnNp
c3RlbnRET01BZ2VudCgpOwotICAgIGlmICghZG9tQWdlbnQpIHsKLSAgICAgICAgZXJyb3JTdHJp
bmcgPSAiRE9NIGRvbWFpbiBtdXN0IGJlIGVuYWJsZWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9CisgICAgaWYgKCFkb21BZ2VudCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJE
T00gZG9tYWluIG11c3QgYmUgZW5hYmxlZCJfcyk7CiAKICAgICBhdXRvKiBlZmZlY3QgPSBhbmlt
YXRpb24tPmVmZmVjdCgpOwotICAgIGlmICghaXM8S2V5ZnJhbWVFZmZlY3Q+KGVmZmVjdCkpIHsK
LSAgICAgICAgZXJyb3JTdHJpbmcgPSAiQW5pbWF0aW9uIGZvciBnaXZlbiBhbmltYXRpb25JZCBk
b2VzIG5vdCBoYXZlIGFuIGVmZmVjdCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBp
ZiAoIWlzPEtleWZyYW1lRWZmZWN0PihlZmZlY3QpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoIkFuaW1hdGlvbiBmb3IgZ2l2ZW4gYW5pbWF0aW9uSWQgZG9lcyBub3QgaGF2ZSBhbiBl
ZmZlY3QiX3MpOwogCiAgICAgYXV0byYga2V5ZnJhbWVFZmZlY3QgPSBkb3duY2FzdDxLZXlmcmFt
ZUVmZmVjdD4oKmVmZmVjdCk7CiAKICAgICBhdXRvKiB0YXJnZXQgPSBrZXlmcmFtZUVmZmVjdC50
YXJnZXRFbGVtZW50T3JQc2V1ZG9FbGVtZW50KCk7Ci0gICAgaWYgKCF0YXJnZXQpIHsKLSAgICAg
ICAgZXJyb3JTdHJpbmcgPSAiQW5pbWF0aW9uIGZvciBnaXZlbiBhbmltYXRpb25JZCBkb2VzIG5v
dCBoYXZlIGEgdGFyZ2V0Il9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghdGFy
Z2V0KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkFuaW1hdGlvbiBmb3IgZ2l2ZW4g
YW5pbWF0aW9uSWQgZG9lcyBub3QgaGF2ZSBhIHRhcmdldCJfcyk7CiAKLSAgICAqbm9kZUlkID0g
ZG9tQWdlbnQtPnB1c2hOb2RlUGF0aFRvRnJvbnRlbmQoZXJyb3JTdHJpbmcsIHRhcmdldCk7Cisg
ICAgcmV0dXJuIGRvbUFnZW50LT5wdXNoTm9kZVBhdGhUb0Zyb250ZW5kKGVycm9yU3RyaW5nLCB0
YXJnZXQpOwogfQogCi12b2lkIEluc3BlY3RvckFuaW1hdGlvbkFnZW50OjpyZXNvbHZlQW5pbWF0
aW9uKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBhbmltYXRpb25JZCwg
Y29uc3QgU3RyaW5nKiBvYmplY3RHcm91cCwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1
bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3VsdCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPFJl
ZjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0Pj4gSW5zcGVjdG9yQW5pbWF0aW9uQWdl
bnQ6OnJlc29sdmVBbmltYXRpb24oY29uc3QgUHJvdG9jb2w6OkFuaW1hdGlvbjo6QW5pbWF0aW9u
SWQmIGFuaW1hdGlvbklkLCBjb25zdCBTdHJpbmcmIG9iamVjdEdyb3VwKQogeworICAgIFByb3Rv
Y29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIGF1dG8qIGFuaW1hdGlvbiA9IGFz
c2VydEFuaW1hdGlvbihlcnJvclN0cmluZywgYW5pbWF0aW9uSWQpOwogICAgIGlmICghYW5pbWF0
aW9uKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJv
clN0cmluZyk7CiAKICAgICBhdXRvKiBzdGF0ZSA9IGFuaW1hdGlvbi0+c2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpLT5leGVjU3RhdGUoKTsKICAgICBhdXRvIGluamVjdGVkU2NyaXB0ID0gbV9pbmpl
Y3RlZFNjcmlwdE1hbmFnZXIuaW5qZWN0ZWRTY3JpcHRGb3Ioc3RhdGUpOwpAQCAtMzI4LDM4ICsz
MjcsNDIgQEAgdm9pZCBJbnNwZWN0b3JBbmltYXRpb25BZ2VudDo6cmVzb2x2ZUFuaW1hdGlvbihF
cnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFMKIAogICAgIGlmICghdmFsdWUpIHsKICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIkludGVy
bmFsIGVycm9yOiB1bmtub3duIEFuaW1hdGlvbiBmb3IgZ2l2ZW4gYW5pbWF0aW9uSWQiX3M7Ci0g
ICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJJbnRlcm5hbCBl
cnJvcjogdW5rbm93biBBbmltYXRpb24gZm9yIGdpdmVuIGFuaW1hdGlvbklkIl9zKTsKICAgICB9
CiAKLSAgICBTdHJpbmcgb2JqZWN0R3JvdXBOYW1lID0gb2JqZWN0R3JvdXAgPyAqb2JqZWN0R3Jv
dXAgOiBTdHJpbmcoKTsKLSAgICByZXN1bHQgPSBpbmplY3RlZFNjcmlwdC53cmFwT2JqZWN0KHZh
bHVlLCBvYmplY3RHcm91cE5hbWUpOworICAgIGF1dG8gb2JqZWN0ID0gaW5qZWN0ZWRTY3JpcHQu
d3JhcE9iamVjdCh2YWx1ZSwgb2JqZWN0R3JvdXApOworICAgIGlmICghb2JqZWN0KQorICAgICAg
ICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkludGVybmFsIGVycm9yOiB1bmFibGUgdG8gY2FzdCBB
bmltYXRpb24iKTsKKworICAgIHJldHVybiBvYmplY3QucmVsZWFzZU5vbk51bGwoKTsKIH0KIAot
dm9pZCBJbnNwZWN0b3JBbmltYXRpb25BZ2VudDo6c3RhcnRUcmFja2luZyhFcnJvclN0cmluZyYg
ZXJyb3JTdHJpbmcpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JBbmlt
YXRpb25BZ2VudDo6c3RhcnRUcmFja2luZygpCiB7Ci0gICAgaWYgKG1faW5zdHJ1bWVudGluZ0Fn
ZW50cy50cmFja2luZ0FuaW1hdGlvbkFnZW50KCkgPT0gdGhpcykgewotICAgICAgICBlcnJvclN0
cmluZyA9ICJBbmltYXRpb24gZG9tYWluIGFscmVhZHkgdHJhY2tpbmciX3M7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9CisgICAgaWYgKG1faW5zdHJ1bWVudGluZ0FnZW50cy50cmFja2luZ0FuaW1h
dGlvbkFnZW50KCkgPT0gdGhpcykKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJBbmlt
YXRpb24gZG9tYWluIGFscmVhZHkgdHJhY2tpbmciX3MpOwogCiAgICAgbV9pbnN0cnVtZW50aW5n
QWdlbnRzLnNldFRyYWNraW5nQW5pbWF0aW9uQWdlbnQodGhpcyk7CiAKICAgICBBU1NFUlQobV90
cmFja2VkRGVjbGFyYXRpdmVBbmltYXRpb25EYXRhLmlzRW1wdHkoKSk7CiAKICAgICBtX2Zyb250
ZW5kRGlzcGF0Y2hlci0+dHJhY2tpbmdTdGFydChtX2Vudmlyb25tZW50LmV4ZWN1dGlvblN0b3B3
YXRjaCgpLmVsYXBzZWRUaW1lKCkuc2Vjb25kcygpKTsKKworICAgIHJldHVybiB7IH07CiB9CiAK
LXZvaWQgSW5zcGVjdG9yQW5pbWF0aW9uQWdlbnQ6OnN0b3BUcmFja2luZyhFcnJvclN0cmluZyYp
CitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JBbmltYXRpb25BZ2VudDo6
c3RvcFRyYWNraW5nKCkKIHsKICAgICBpZiAobV9pbnN0cnVtZW50aW5nQWdlbnRzLnRyYWNraW5n
QW5pbWF0aW9uQWdlbnQoKSAhPSB0aGlzKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVy
biB7IH07CiAKICAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMuc2V0VHJhY2tpbmdBbmltYXRpb25B
Z2VudChudWxscHRyKTsKIAogICAgIG1fdHJhY2tlZERlY2xhcmF0aXZlQW5pbWF0aW9uRGF0YS5j
bGVhcigpOwogCiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPnRyYWNraW5nQ29tcGxldGUobV9l
bnZpcm9ubWVudC5leGVjdXRpb25TdG9wd2F0Y2goKS5lbGFwc2VkVGltZSgpLnNlY29uZHMoKSk7
CisKKyAgICByZXR1cm4geyB9OwogfQogCiBzdGF0aWMgYm9vbCBpc0RlbGF5ZWQoQ29tcHV0ZWRF
ZmZlY3RUaW1pbmcmIGNvbXB1dGVkVGltaW5nKQpAQCAtMzgwLDMxICszODMsMzEgQEAgdm9pZCBJ
bnNwZWN0b3JBbmltYXRpb25BZ2VudDo6d2lsbEFwcGx5S2V5ZnJhbWVFZmZlY3QoRWxlbWVudCYg
dGFyZ2V0LCBLZXlmcmFtZUUKICAgICB9KTsKICAgICBhdXRvJiB0cmFja2luZ0RhdGEgPSBlbnN1
cmVSZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwogCi0gICAgT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90
b2NvbDo6QW5pbWF0aW9uOjpBbmltYXRpb25TdGF0ZT4gYW5pbWF0aW9uQW5pbWF0aW9uU3RhdGU7
CisgICAgT3B0aW9uYWw8UHJvdG9jb2w6OkFuaW1hdGlvbjo6QW5pbWF0aW9uU3RhdGU+IGFuaW1h
dGlvbkFuaW1hdGlvblN0YXRlOwogCiAgICAgaWYgKChlbnN1cmVSZXN1bHQuaXNOZXdFbnRyeSB8
fCAhaXNEZWxheWVkKHRyYWNraW5nRGF0YS5sYXN0Q29tcHV0ZWRUaW1pbmcpKSAmJiBpc0RlbGF5
ZWQoY29tcHV0ZWRUaW1pbmcpKQotICAgICAgICBhbmltYXRpb25BbmltYXRpb25TdGF0ZSA9IElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkFuaW1hdGlvbjo6QW5pbWF0aW9uU3RhdGU6OkRlbGF5ZWQ7Cisg
ICAgICAgIGFuaW1hdGlvbkFuaW1hdGlvblN0YXRlID0gUHJvdG9jb2w6OkFuaW1hdGlvbjo6QW5p
bWF0aW9uU3RhdGU6OkRlbGF5ZWQ7CiAgICAgZWxzZSBpZiAoZW5zdXJlUmVzdWx0LmlzTmV3RW50
cnkgfHwgdHJhY2tpbmdEYXRhLmxhc3RDb21wdXRlZFRpbWluZy5waGFzZSAhPSBjb21wdXRlZFRp
bWluZy5waGFzZSkgewogICAgICAgICBzd2l0Y2ggKGNvbXB1dGVkVGltaW5nLnBoYXNlKSB7CiAg
ICAgICAgIGNhc2UgQW5pbWF0aW9uRWZmZWN0UGhhc2U6OkJlZm9yZToKLSAgICAgICAgICAgIGFu
aW1hdGlvbkFuaW1hdGlvblN0YXRlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QW5pbWF0aW9uOjpB
bmltYXRpb25TdGF0ZTo6UmVhZHk7CisgICAgICAgICAgICBhbmltYXRpb25BbmltYXRpb25TdGF0
ZSA9IFByb3RvY29sOjpBbmltYXRpb246OkFuaW1hdGlvblN0YXRlOjpSZWFkeTsKICAgICAgICAg
ICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgQW5pbWF0aW9uRWZmZWN0UGhhc2U6OkFjdGl2ZToK
LSAgICAgICAgICAgIGFuaW1hdGlvbkFuaW1hdGlvblN0YXRlID0gSW5zcGVjdG9yOjpQcm90b2Nv
bDo6QW5pbWF0aW9uOjpBbmltYXRpb25TdGF0ZTo6QWN0aXZlOworICAgICAgICAgICAgYW5pbWF0
aW9uQW5pbWF0aW9uU3RhdGUgPSBQcm90b2NvbDo6QW5pbWF0aW9uOjpBbmltYXRpb25TdGF0ZTo6
QWN0aXZlOwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBBbmltYXRpb25FZmZl
Y3RQaGFzZTo6QWZ0ZXI6Ci0gICAgICAgICAgICBhbmltYXRpb25BbmltYXRpb25TdGF0ZSA9IElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkFuaW1hdGlvbjo6QW5pbWF0aW9uU3RhdGU6OkRvbmU7CisgICAg
ICAgICAgICBhbmltYXRpb25BbmltYXRpb25TdGF0ZSA9IFByb3RvY29sOjpBbmltYXRpb246OkFu
aW1hdGlvblN0YXRlOjpEb25lOwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBB
bmltYXRpb25FZmZlY3RQaGFzZTo6SWRsZToKLSAgICAgICAgICAgIGFuaW1hdGlvbkFuaW1hdGlv
blN0YXRlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QW5pbWF0aW9uOjpBbmltYXRpb25TdGF0ZTo6
Q2FuY2VsZWQ7CisgICAgICAgICAgICBhbmltYXRpb25BbmltYXRpb25TdGF0ZSA9IFByb3RvY29s
OjpBbmltYXRpb246OkFuaW1hdGlvblN0YXRlOjpDYW5jZWxlZDsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAgICAgfSBlbHNlIGlmICh0cmFja2luZ0RhdGEubGFzdENvbXB1dGVkVGlt
aW5nLmN1cnJlbnRJdGVyYXRpb24gIT0gY29tcHV0ZWRUaW1pbmcuY3VycmVudEl0ZXJhdGlvbikg
ewogICAgICAgICAvLyBJdGVyYXRpb25zIGFyZSByZXByZXNlbnRlZCBieSBzZXF1ZW50aWFsICJh
Y3RpdmUiIHN0YXRlIGV2ZW50cy4KLSAgICAgICAgYW5pbWF0aW9uQW5pbWF0aW9uU3RhdGUgPSBJ
bnNwZWN0b3I6OlByb3RvY29sOjpBbmltYXRpb246OkFuaW1hdGlvblN0YXRlOjpBY3RpdmU7Cisg
ICAgICAgIGFuaW1hdGlvbkFuaW1hdGlvblN0YXRlID0gUHJvdG9jb2w6OkFuaW1hdGlvbjo6QW5p
bWF0aW9uU3RhdGU6OkFjdGl2ZTsKICAgICB9CiAKICAgICB0cmFja2luZ0RhdGEubGFzdENvbXB1
dGVkVGltaW5nID0gY29tcHV0ZWRUaW1pbmc7CkBAIC00MTIsNyArNDE1LDcgQEAgdm9pZCBJbnNw
ZWN0b3JBbmltYXRpb25BZ2VudDo6d2lsbEFwcGx5S2V5ZnJhbWVFZmZlY3QoRWxlbWVudCYgdGFy
Z2V0LCBLZXlmcmFtZUUKICAgICBpZiAoIWFuaW1hdGlvbkFuaW1hdGlvblN0YXRlKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBhdXRvIGV2ZW50ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QW5pbWF0
aW9uOjpUcmFja2luZ1VwZGF0ZTo6Y3JlYXRlKCkKKyAgICBhdXRvIGV2ZW50ID0gUHJvdG9jb2w6
OkFuaW1hdGlvbjo6VHJhY2tpbmdVcGRhdGU6OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRUcmFja2lu
Z0FuaW1hdGlvbklkKHRyYWNraW5nRGF0YS50cmFja2luZ0FuaW1hdGlvbklkKQogICAgICAgICAu
c2V0QW5pbWF0aW9uU3RhdGUoYW5pbWF0aW9uQW5pbWF0aW9uU3RhdGUudmFsdWUoKSkKICAgICAg
ICAgLnJlbGVhc2UoKTsKQEAgLTQ0MSw4ICs0NDQsNyBAQCB2b2lkIEluc3BlY3RvckFuaW1hdGlv
bkFnZW50OjpkaWRDaGFuZ2VXZWJBbmltYXRpb25OYW1lKFdlYkFuaW1hdGlvbiYgYW5pbWF0aW9u
KQogICAgIGlmIChhbmltYXRpb25JZC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAg
IGF1dG8gbmFtZSA9IGFuaW1hdGlvbi5pZCgpOwotICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5u
YW1lQ2hhbmdlZChhbmltYXRpb25JZCwgIW5hbWUuaXNFbXB0eSgpID8gJm5hbWUgOiBudWxscHRy
KTsKKyAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+bmFtZUNoYW5nZWQoYW5pbWF0aW9uSWQsIGFu
aW1hdGlvbi5pZCgpKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JBbmltYXRpb25BZ2VudDo6ZGlkU2V0
V2ViQW5pbWF0aW9uRWZmZWN0KFdlYkFuaW1hdGlvbiYgYW5pbWF0aW9uKQpAQCAtNTI1LDcgKzUy
Nyw3IEBAIFN0cmluZyBJbnNwZWN0b3JBbmltYXRpb25BZ2VudDo6ZmluZEFuaW1hdGlvbklkKFdl
YkFuaW1hdGlvbiYgYW5pbWF0aW9uKQogICAgIHJldHVybiBudWxsU3RyaW5nKCk7CiB9CiAKLVdl
YkFuaW1hdGlvbiogSW5zcGVjdG9yQW5pbWF0aW9uQWdlbnQ6OmFzc2VydEFuaW1hdGlvbihFcnJv
clN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uSWQpCitXZWJBbmlt
YXRpb24qIEluc3BlY3RvckFuaW1hdGlvbkFnZW50Ojphc3NlcnRBbmltYXRpb24oUHJvdG9jb2w6
OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBhbmltYXRpb25JZCkKIHsK
ICAgICBhdXRvKiBhbmltYXRpb24gPSBtX2FuaW1hdGlvbklkTWFwLmdldChhbmltYXRpb25JZCk7
CiAgICAgaWYgKCFhbmltYXRpb24pCkBAIC01MzgsNyArNTQwLDcgQEAgdm9pZCBJbnNwZWN0b3JB
bmltYXRpb25BZ2VudDo6YmluZEFuaW1hdGlvbihXZWJBbmltYXRpb24mIGFuaW1hdGlvbiwgYm9v
bCBjYXB0dXIKICAgICBhdXRvIGFuaW1hdGlvbklkID0gbWFrZVN0cmluZygiYW5pbWF0aW9uOiIg
KyBJZGVudGlmaWVyc0ZhY3Rvcnk6OmNyZWF0ZUlkZW50aWZpZXIoKSk7CiAgICAgbV9hbmltYXRp
b25JZE1hcC5zZXQoYW5pbWF0aW9uSWQsICZhbmltYXRpb24pOwogCi0gICAgYXV0byBhbmltYXRp
b25QYXlsb2FkID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QW5pbWF0aW9uOjpBbmltYXRpb246OmNy
ZWF0ZSgpCisgICAgYXV0byBhbmltYXRpb25QYXlsb2FkID0gUHJvdG9jb2w6OkFuaW1hdGlvbjo6
QW5pbWF0aW9uOjpjcmVhdGUoKQogICAgICAgICAuc2V0QW5pbWF0aW9uSWQoYW5pbWF0aW9uSWQp
CiAgICAgICAgIC5yZWxlYXNlKCk7CiAKQEAgLTYwMyw5ICs2MDUsOSBAQCB2b2lkIEluc3BlY3Rv
ckFuaW1hdGlvbkFnZW50OjpzdG9wVHJhY2tpbmdEZWNsYXJhdGl2ZUFuaW1hdGlvbihEZWNsYXJh
dGl2ZUFuaW1hdAogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoaXQtPnZhbHVlLmxhc3RDb21w
dXRlZFRpbWluZy5waGFzZSAhPSBBbmltYXRpb25FZmZlY3RQaGFzZTo6QWZ0ZXIgJiYgaXQtPnZh
bHVlLmxhc3RDb21wdXRlZFRpbWluZy5waGFzZSAhPSBBbmltYXRpb25FZmZlY3RQaGFzZTo6SWRs
ZSkgewotICAgICAgICBhdXRvIGV2ZW50ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QW5pbWF0aW9u
OjpUcmFja2luZ1VwZGF0ZTo6Y3JlYXRlKCkKKyAgICAgICAgYXV0byBldmVudCA9IFByb3RvY29s
OjpBbmltYXRpb246OlRyYWNraW5nVXBkYXRlOjpjcmVhdGUoKQogICAgICAgICAgICAgLnNldFRy
YWNraW5nQW5pbWF0aW9uSWQoaXQtPnZhbHVlLnRyYWNraW5nQW5pbWF0aW9uSWQpCi0gICAgICAg
ICAgICAuc2V0QW5pbWF0aW9uU3RhdGUoSW5zcGVjdG9yOjpQcm90b2NvbDo6QW5pbWF0aW9uOjpB
bmltYXRpb25TdGF0ZTo6Q2FuY2VsZWQpCisgICAgICAgICAgICAuc2V0QW5pbWF0aW9uU3RhdGUo
UHJvdG9jb2w6OkFuaW1hdGlvbjo6QW5pbWF0aW9uU3RhdGU6OkNhbmNlbGVkKQogICAgICAgICAg
ICAgLnJlbGVhc2UoKTsKICAgICAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPnRyYWNraW5nVXBk
YXRlKG1fZW52aXJvbm1lbnQuZXhlY3V0aW9uU3RvcHdhdGNoKCkuZWxhcHNlZFRpbWUoKS5zZWNv
bmRzKCksIFdURk1vdmUoZXZlbnQpKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckFuaW1hdGlvbkFnZW50LmggYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckFuaW1hdGlvbkFnZW50LmgKaW5kZXggOGI1
MTE2MjhjOTdhMjIyYThmOWFjZDhkM2U1YjIwMmE4ZGJiNmJlYy4uMDY0YWM0MDYzYzMwOWZkYjQx
YzcxYmZjZjZjYmQ5ZWE2NGVkOTMxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2FnZW50cy9JbnNwZWN0b3JBbmltYXRpb25BZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQW5pbWF0aW9uQWdlbnQuaApAQCAtNDQsMjYgKzQ0
LDI0IEBAIGNsYXNzIEtleWZyYW1lRWZmZWN0OwogY2xhc3MgUGFnZTsKIGNsYXNzIFdlYkFuaW1h
dGlvbjsKIAotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7Ci0KIGNsYXNzIEluc3BlY3RvckFu
aW1hdGlvbkFnZW50IGZpbmFsIDogcHVibGljIEluc3BlY3RvckFnZW50QmFzZSwgcHVibGljIElu
c3BlY3Rvcjo6QW5pbWF0aW9uQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKICAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShJbnNwZWN0b3JBbmltYXRpb25BZ2VudCk7CiAgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgSW5zcGVjdG9yQW5pbWF0aW9uQWdlbnQoUGFnZUFn
ZW50Q29udGV4dCYpOwotICAgIH5JbnNwZWN0b3JBbmltYXRpb25BZ2VudCgpIG92ZXJyaWRlOwor
ICAgIH5JbnNwZWN0b3JBbmltYXRpb25BZ2VudCgpOwogCiAgICAgLy8gSW5zcGVjdG9yQWdlbnRC
YXNlCi0gICAgdm9pZCBkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9u
dGVuZFJvdXRlciosIEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXIqKSBvdmVycmlkZTsKLSAg
ICB2b2lkIHdpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlzY29ubmVj
dFJlYXNvbikgb3ZlcnJpZGU7CisgICAgdm9pZCBkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQo
SW5zcGVjdG9yOjpGcm9udGVuZFJvdXRlciosIEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXIq
KTsKKyAgICB2b2lkIHdpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlz
Y29ubmVjdFJlYXNvbik7CiAKICAgICAvLyBBbmltYXRpb25CYWNrZW5kRGlzcGF0Y2hlckhhbmRs
ZXIKLSAgICB2b2lkIGVuYWJsZShFcnJvclN0cmluZyYpIG92ZXJyaWRlOwotICAgIHZvaWQgZGlz
YWJsZShFcnJvclN0cmluZyYpIG92ZXJyaWRlOwotICAgIHZvaWQgcmVxdWVzdEVmZmVjdFRhcmdl
dChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uSWQsIGludCogbm9kZUlkKSBv
dmVycmlkZTsKLSAgICB2b2lkIHJlc29sdmVBbmltYXRpb24oRXJyb3JTdHJpbmcmLCBjb25zdCBT
dHJpbmcmIGFuaW1hdGlvbklkLCBjb25zdCBTdHJpbmcqIG9iamVjdEdyb3VwLCBSZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYpIG92ZXJyaWRlOwotICAg
IHZvaWQgc3RhcnRUcmFja2luZyhFcnJvclN0cmluZyYpIG92ZXJyaWRlOwotICAgIHZvaWQgc3Rv
cFRyYWNraW5nKEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7CisgICAgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBlbmFibGUoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29s
OjpFcnJvclN0cmluZ09yPHZvaWQ+IGRpc2FibGUoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29s
OjpFcnJvclN0cmluZ09yPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkPiByZXF1ZXN0
RWZmZWN0VGFyZ2V0KGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFuaW1hdGlvbjo6QW5pbWF0
aW9uSWQmKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+PiByZXNvbHZlQW5pbWF0aW9u
KGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFuaW1hdGlvbjo6QW5pbWF0aW9uSWQmLCBjb25z
dCBTdHJpbmcmIG9iamVjdEdyb3VwKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0
cmluZ09yPHZvaWQ+IHN0YXJ0VHJhY2tpbmcoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpF
cnJvclN0cmluZ09yPHZvaWQ+IHN0b3BUcmFja2luZygpOwogCiAgICAgLy8gSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uCiAgICAgdm9pZCB3aWxsQXBwbHlLZXlmcmFtZUVmZmVjdChFbGVtZW50Jiwg
S2V5ZnJhbWVFZmZlY3QmLCBDb21wdXRlZEVmZmVjdFRpbWluZyk7CkBAIC03Nyw3ICs3NSw3IEBA
IHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBTdHJpbmcgZmluZEFuaW1hdGlvbklkKFdlYkFuaW1h
dGlvbiYpOwotICAgIFdlYkFuaW1hdGlvbiogYXNzZXJ0QW5pbWF0aW9uKEVycm9yU3RyaW5nJiwg
Y29uc3QgU3RyaW5nJiBhbmltYXRpb25JZCk7CisgICAgV2ViQW5pbWF0aW9uKiBhc3NlcnRBbmlt
YXRpb24oSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGFu
aW1hdGlvbklkKTsKICAgICB2b2lkIGJpbmRBbmltYXRpb24oV2ViQW5pbWF0aW9uJiwgYm9vbCBj
YXB0dXJlQmFja3RyYWNlKTsKICAgICB2b2lkIHVuYmluZEFuaW1hdGlvbihjb25zdCBTdHJpbmcm
IGFuaW1hdGlvbklkKTsKICAgICB2b2lkIGFuaW1hdGlvbkRlc3Ryb3llZFRpbWVyRmlyZWQoKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQXBw
bGljYXRpb25DYWNoZUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50LmNwcAppbmRleCA5MTI5MjY0OGQ2ODJkOWMz
ODFlNTI0ZmQwOTcwMDhhNDdjMzY1MDRhLi5hZjY3Mzc4YTZkZGNkMWFlNzcyNDRlODk5NTM2Nzcz
YTcwMjdiMDNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0lu
c3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2FnZW50cy9JbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuY3BwCkBAIC01Nywz
MSArNTcsMzAgQEAgdm9pZCBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQ6OmRpZENyZWF0
ZUZyb250ZW5kQW5kQmFja2VuZChGcm9udGVuZFJvdXRlcioKIAogdm9pZCBJbnNwZWN0b3JBcHBs
aWNhdGlvbkNhY2hlQWdlbnQ6OndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rv
cjo6RGlzY29ubmVjdFJlYXNvbikKIHsKLSAgICBFcnJvclN0cmluZyBpZ25vcmVkOwotICAgIGRp
c2FibGUoaWdub3JlZCk7CisgICAgZGlzYWJsZSgpOwogfQogCi12b2lkIEluc3BlY3RvckFwcGxp
Y2F0aW9uQ2FjaGVBZ2VudDo6ZW5hYmxlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZykKK1Byb3Rv
Y29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudDo6
ZW5hYmxlKCkKIHsKLSAgICBpZiAobV9pbnN0cnVtZW50aW5nQWdlbnRzLmVuYWJsZWRBcHBsaWNh
dGlvbkNhY2hlQWdlbnQoKSA9PSB0aGlzKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIkFwcGxp
Y2F0aW9uQ2FjaGUgZG9tYWluIGFscmVhZHkgZW5hYmxlZCJfczsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KKyAgICBpZiAobV9pbnN0cnVtZW50aW5nQWdlbnRzLmVuYWJsZWRBcHBsaWNhdGlvbkNh
Y2hlQWdlbnQoKSA9PSB0aGlzKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkFwcGxp
Y2F0aW9uQ2FjaGUgZG9tYWluIGFscmVhZHkgZW5hYmxlZCJfcyk7CiAKICAgICBtX2luc3RydW1l
bnRpbmdBZ2VudHMuc2V0RW5hYmxlZEFwcGxpY2F0aW9uQ2FjaGVBZ2VudCh0aGlzKTsKIAogICAg
IC8vIFdlIG5lZWQgdG8gcGFzcyBpbml0aWFsIG5hdmlnYXRvci5vbk9ubGluZS4KICAgICBuZXR3
b3JrU3RhdGVDaGFuZ2VkKCk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3Rv
ckFwcGxpY2F0aW9uQ2FjaGVBZ2VudDo6ZGlzYWJsZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcp
CitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hl
QWdlbnQ6OmRpc2FibGUoKQogewotICAgIGlmIChtX2luc3RydW1lbnRpbmdBZ2VudHMuZW5hYmxl
ZEFwcGxpY2F0aW9uQ2FjaGVBZ2VudCgpICE9IHRoaXMpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcg
PSAiQXBwbGljYXRpb25DYWNoZSBkb21haW4gYWxyZWFkeSBkaXNhYmxlZCJfczsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KKyAgICBpZiAobV9pbnN0cnVtZW50aW5nQWdlbnRzLmVuYWJsZWRBcHBs
aWNhdGlvbkNhY2hlQWdlbnQoKSAhPSB0aGlzKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0
ZWQoIkFwcGxpY2F0aW9uQ2FjaGUgZG9tYWluIGFscmVhZHkgZGlzYWJsZWQiX3MpOwogCiAgICAg
bV9pbnN0cnVtZW50aW5nQWdlbnRzLnNldEVuYWJsZWRBcHBsaWNhdGlvbkNhY2hlQWdlbnQobnVs
bHB0cik7CisKKyAgICByZXR1cm4geyB9OwogfQogCiB2b2lkIEluc3BlY3RvckFwcGxpY2F0aW9u
Q2FjaGVBZ2VudDo6dXBkYXRlQXBwbGljYXRpb25DYWNoZVN0YXR1cyhGcmFtZSogZnJhbWUpCkBA
IC0xMDksMTYgKzEwOCwxMyBAQCB2b2lkIEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudDo6
bmV0d29ya1N0YXRlQ2hhbmdlZCgpCiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPm5ldHdvcmtT
dGF0ZVVwZGF0ZWQocGxhdGZvcm1TdHJhdGVnaWVzKCktPmxvYWRlclN0cmF0ZWd5KCktPmlzT25M
aW5lKCkpOwogfQogCi12b2lkIEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudDo6Z2V0RnJh
bWVzV2l0aE1hbmlmZXN0cyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIFJlZlB0cjxKU09OOjpB
cnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkZyYW1lV2l0aE1h
bmlmZXN0Pj4mIHJlc3VsdCkKK0V4cGVjdGVkPFJlZjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpB
cHBsaWNhdGlvbkNhY2hlOjpGcmFtZVdpdGhNYW5pZmVzdD4+LCBQcm90b2NvbDo6RXJyb3JTdHJp
bmc+IEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudDo6Z2V0RnJhbWVzV2l0aE1hbmlmZXN0
cygpCiB7CiAgICAgYXV0byogcGFnZUFnZW50ID0gbV9pbnN0cnVtZW50aW5nQWdlbnRzLmVuYWJs
ZWRQYWdlQWdlbnQoKTsKLSAgICBpZiAoIXBhZ2VBZ2VudCkgewotICAgICAgICBlcnJvclN0cmlu
ZyA9ICJQYWdlIGRvbWFpbiBtdXN0IGJlIGVuYWJsZWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICByZXN1bHQgPSBKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFw
cGxpY2F0aW9uQ2FjaGU6OkZyYW1lV2l0aE1hbmlmZXN0Pjo6Y3JlYXRlKCk7CisgICAgaWYgKCFw
YWdlQWdlbnQpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiUGFnZSBkb21haW4gbXVz
dCBiZSBlbmFibGVkIl9zKTsKIAorICAgIGF1dG8gcmVzdWx0ID0gSlNPTjo6QXJyYXlPZjxQcm90
b2NvbDo6QXBwbGljYXRpb25DYWNoZTo6RnJhbWVXaXRoTWFuaWZlc3Q+OjpjcmVhdGUoKTsKICAg
ICBmb3IgKEZyYW1lKiBmcmFtZSA9ICZtX2luc3BlY3RlZFBhZ2UubWFpbkZyYW1lKCk7IGZyYW1l
OyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsKICAgICAgICAgYXV0byog
ZG9jdW1lbnRMb2FkZXIgPSBmcmFtZS0+bG9hZGVyKCkuZG9jdW1lbnRMb2FkZXIoKTsKICAgICAg
ICAgaWYgKCFkb2N1bWVudExvYWRlcikKQEAgLTEyNywxNiArMTIzLDE3IEBAIHZvaWQgSW5zcGVj
dG9yQXBwbGljYXRpb25DYWNoZUFnZW50OjpnZXRGcmFtZXNXaXRoTWFuaWZlc3RzKEVycm9yU3Ry
aW5nJiBlcnJvclN0CiAgICAgICAgIGF1dG8mIGhvc3QgPSBkb2N1bWVudExvYWRlci0+YXBwbGlj
YXRpb25DYWNoZUhvc3QoKTsKICAgICAgICAgU3RyaW5nIG1hbmlmZXN0VVJMID0gaG9zdC5hcHBs
aWNhdGlvbkNhY2hlSW5mbygpLm1hbmlmZXN0LnN0cmluZygpOwogICAgICAgICBpZiAoIW1hbmlm
ZXN0VVJMLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgcmVzdWx0LT5hZGRJdGVtKEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkZyYW1lV2l0aE1hbmlmZXN0OjpjcmVhdGUo
KQorICAgICAgICAgICAgcmVzdWx0LT5hZGRJdGVtKFByb3RvY29sOjpBcHBsaWNhdGlvbkNhY2hl
OjpGcmFtZVdpdGhNYW5pZmVzdDo6Y3JlYXRlKCkKICAgICAgICAgICAgICAgICAuc2V0RnJhbWVJ
ZChwYWdlQWdlbnQtPmZyYW1lSWQoZnJhbWUpKQogICAgICAgICAgICAgICAgIC5zZXRNYW5pZmVz
dFVSTChtYW5pZmVzdFVSTCkKICAgICAgICAgICAgICAgICAuc2V0U3RhdHVzKHN0YXRpY19jYXN0
PGludD4oaG9zdC5zdGF0dXMoKSkpCiAgICAgICAgICAgICAgICAgLnJlbGVhc2UoKSk7CiAgICAg
ICAgIH0KICAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotRG9jdW1lbnRMb2FkZXIqIElu
c3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudDo6YXNzZXJ0RnJhbWVXaXRoRG9jdW1lbnRMb2Fk
ZXIoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGZyYW1lSWQpCitEb2N1
bWVudExvYWRlciogSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50Ojphc3NlcnRGcmFtZVdp
dGhEb2N1bWVudExvYWRlcihQcm90b2NvbDo6RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25z
dCBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpGcmFtZUlkJiBmcmFtZUlkKQogewogICAg
IGF1dG8qIHBhZ2VBZ2VudCA9IG1faW5zdHJ1bWVudGluZ0FnZW50cy5lbmFibGVkUGFnZUFnZW50
KCk7CiAgICAgaWYgKCFwYWdlQWdlbnQpIHsKQEAgLTE1MSwyOCArMTQ4LDMyIEBAIERvY3VtZW50
TG9hZGVyKiBJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQ6OmFzc2VydEZyYW1lV2l0aERv
Y3VtZW50TG9hZGVyKEVyCiAgICAgcmV0dXJuIEluc3BlY3RvclBhZ2VBZ2VudDo6YXNzZXJ0RG9j
dW1lbnRMb2FkZXIoZXJyb3JTdHJpbmcsIGZyYW1lKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JBcHBs
aWNhdGlvbkNhY2hlQWdlbnQ6OmdldE1hbmlmZXN0Rm9yRnJhbWUoRXJyb3JTdHJpbmcmIGVycm9y
U3RyaW5nLCBjb25zdCBTdHJpbmcmIGZyYW1lSWQsIFN0cmluZyogbWFuaWZlc3RVUkwpCitFeHBl
Y3RlZDxTdHJpbmcsIFByb3RvY29sOjpFcnJvclN0cmluZz4gSW5zcGVjdG9yQXBwbGljYXRpb25D
YWNoZUFnZW50OjpnZXRNYW5pZmVzdEZvckZyYW1lKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6
Ok5ldHdvcms6OkZyYW1lSWQmIGZyYW1lSWQpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5n
IGVycm9yU3RyaW5nOworCiAgICAgRG9jdW1lbnRMb2FkZXIqIGRvY3VtZW50TG9hZGVyID0gYXNz
ZXJ0RnJhbWVXaXRoRG9jdW1lbnRMb2FkZXIoZXJyb3JTdHJpbmcsIGZyYW1lSWQpOwogICAgIGlm
ICghZG9jdW1lbnRMb2FkZXIpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAotICAgICptYW5pZmVzdFVSTCA9IGRvY3VtZW50TG9h
ZGVyLT5hcHBsaWNhdGlvbkNhY2hlSG9zdCgpLmFwcGxpY2F0aW9uQ2FjaGVJbmZvKCkubWFuaWZl
c3Quc3RyaW5nKCk7CisgICAgcmV0dXJuIGRvY3VtZW50TG9hZGVyLT5hcHBsaWNhdGlvbkNhY2hl
SG9zdCgpLmFwcGxpY2F0aW9uQ2FjaGVJbmZvKCkubWFuaWZlc3Quc3RyaW5nKCk7CiB9CiAKLXZv
aWQgSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50OjpnZXRBcHBsaWNhdGlvbkNhY2hlRm9y
RnJhbWUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGZyYW1lSWQsIFJl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcHBsaWNhdGlvbkNhY2hlOjpBcHBsaWNhdGlvbkNh
Y2hlPiYgYXBwbGljYXRpb25DYWNoZSkKK0V4cGVjdGVkPFJlZjxQcm90b2NvbDo6QXBwbGljYXRp
b25DYWNoZTo6QXBwbGljYXRpb25DYWNoZT4sIFByb3RvY29sOjpFcnJvclN0cmluZz4gSW5zcGVj
dG9yQXBwbGljYXRpb25DYWNoZUFnZW50OjpnZXRBcHBsaWNhdGlvbkNhY2hlRm9yRnJhbWUoY29u
c3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6RnJhbWVJZCYgZnJhbWVJZCkKIHsKKyAg
ICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBhdXRvKiBkb2N1bWVu
dExvYWRlciA9IGFzc2VydEZyYW1lV2l0aERvY3VtZW50TG9hZGVyKGVycm9yU3RyaW5nLCBmcmFt
ZUlkKTsKICAgICBpZiAoIWRvY3VtZW50TG9hZGVyKQotICAgICAgICByZXR1cm47CisgICAgICAg
IHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAgICBhdXRvJiBob3N0ID0g
ZG9jdW1lbnRMb2FkZXItPmFwcGxpY2F0aW9uQ2FjaGVIb3N0KCk7Ci0gICAgYXBwbGljYXRpb25D
YWNoZSA9IGJ1aWxkT2JqZWN0Rm9yQXBwbGljYXRpb25DYWNoZShob3N0LnJlc291cmNlTGlzdCgp
LCBob3N0LmFwcGxpY2F0aW9uQ2FjaGVJbmZvKCkpOworICAgIHJldHVybiBidWlsZE9iamVjdEZv
ckFwcGxpY2F0aW9uQ2FjaGUoaG9zdC5yZXNvdXJjZUxpc3QoKSwgaG9zdC5hcHBsaWNhdGlvbkNh
Y2hlSW5mbygpKTsKIH0KIAotUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2Fj
aGU6OkFwcGxpY2F0aW9uQ2FjaGU+IEluc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudDo6YnVp
bGRPYmplY3RGb3JBcHBsaWNhdGlvbkNhY2hlKGNvbnN0IFZlY3RvcjxBcHBsaWNhdGlvbkNhY2hl
SG9zdDo6UmVzb3VyY2VJbmZvPiYgYXBwbGljYXRpb25DYWNoZVJlc291cmNlcywgY29uc3QgQXBw
bGljYXRpb25DYWNoZUhvc3Q6OkNhY2hlSW5mbyYgYXBwbGljYXRpb25DYWNoZUluZm8pCitSZWY8
UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkFwcGxpY2F0aW9uQ2FjaGU+IEluc3BlY3RvckFw
cGxpY2F0aW9uQ2FjaGVBZ2VudDo6YnVpbGRPYmplY3RGb3JBcHBsaWNhdGlvbkNhY2hlKGNvbnN0
IFZlY3RvcjxBcHBsaWNhdGlvbkNhY2hlSG9zdDo6UmVzb3VyY2VJbmZvPiYgYXBwbGljYXRpb25D
YWNoZVJlc291cmNlcywgY29uc3QgQXBwbGljYXRpb25DYWNoZUhvc3Q6OkNhY2hlSW5mbyYgYXBw
bGljYXRpb25DYWNoZUluZm8pCiB7Ci0gICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFw
cGxpY2F0aW9uQ2FjaGU6OkFwcGxpY2F0aW9uQ2FjaGU6OmNyZWF0ZSgpCisgICAgcmV0dXJuIFBy
b3RvY29sOjpBcHBsaWNhdGlvbkNhY2hlOjpBcHBsaWNhdGlvbkNhY2hlOjpjcmVhdGUoKQogICAg
ICAgICAuc2V0TWFuaWZlc3RVUkwoYXBwbGljYXRpb25DYWNoZUluZm8ubWFuaWZlc3Quc3RyaW5n
KCkpCiAgICAgICAgIC5zZXRTaXplKGFwcGxpY2F0aW9uQ2FjaGVJbmZvLnNpemUpCiAgICAgICAg
IC5zZXRDcmVhdGlvblRpbWUoYXBwbGljYXRpb25DYWNoZUluZm8uY3JlYXRpb25UaW1lKQpAQCAt
MTgxLDE1ICsxODIsMTUgQEAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2Fj
aGU6OkFwcGxpY2F0aW9uQ2FjaGU+IEluc3BlY3RvckFwcGxpY2F0aW8KICAgICAgICAgLnJlbGVh
c2UoKTsKIH0KIAotUmVmPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXBwbGlj
YXRpb25DYWNoZTo6QXBwbGljYXRpb25DYWNoZVJlc291cmNlPj4gSW5zcGVjdG9yQXBwbGljYXRp
b25DYWNoZUFnZW50OjpidWlsZEFycmF5Rm9yQXBwbGljYXRpb25DYWNoZVJlc291cmNlcyhjb25z
dCBWZWN0b3I8QXBwbGljYXRpb25DYWNoZUhvc3Q6OlJlc291cmNlSW5mbz4mIGFwcGxpY2F0aW9u
Q2FjaGVSZXNvdXJjZXMpCitSZWY8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6QXBwbGljYXRpb25D
YWNoZTo6QXBwbGljYXRpb25DYWNoZVJlc291cmNlPj4gSW5zcGVjdG9yQXBwbGljYXRpb25DYWNo
ZUFnZW50OjpidWlsZEFycmF5Rm9yQXBwbGljYXRpb25DYWNoZVJlc291cmNlcyhjb25zdCBWZWN0
b3I8QXBwbGljYXRpb25DYWNoZUhvc3Q6OlJlc291cmNlSW5mbz4mIGFwcGxpY2F0aW9uQ2FjaGVS
ZXNvdXJjZXMpCiB7Ci0gICAgYXV0byByZXN1bHQgPSBKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZT46OmNy
ZWF0ZSgpOworICAgIGF1dG8gcmVzdWx0ID0gSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6QXBwbGlj
YXRpb25DYWNoZTo6QXBwbGljYXRpb25DYWNoZVJlc291cmNlPjo6Y3JlYXRlKCk7CiAgICAgZm9y
IChhdXRvJiBpbmZvIDogYXBwbGljYXRpb25DYWNoZVJlc291cmNlcykKICAgICAgICAgcmVzdWx0
LT5hZGRJdGVtKGJ1aWxkT2JqZWN0Rm9yQXBwbGljYXRpb25DYWNoZVJlc291cmNlKGluZm8pKTsK
ICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1SZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXBwbGlj
YXRpb25DYWNoZTo6QXBwbGljYXRpb25DYWNoZVJlc291cmNlPiBJbnNwZWN0b3JBcHBsaWNhdGlv
bkNhY2hlQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yQXBwbGljYXRpb25DYWNoZVJlc291cmNlKGNvbnN0
IEFwcGxpY2F0aW9uQ2FjaGVIb3N0OjpSZXNvdXJjZUluZm8mIHJlc291cmNlSW5mbykKK1JlZjxQ
cm90b2NvbDo6QXBwbGljYXRpb25DYWNoZTo6QXBwbGljYXRpb25DYWNoZVJlc291cmNlPiBJbnNw
ZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yQXBwbGljYXRpb25DYWNo
ZVJlc291cmNlKGNvbnN0IEFwcGxpY2F0aW9uQ2FjaGVIb3N0OjpSZXNvdXJjZUluZm8mIHJlc291
cmNlSW5mbykKIHsKICAgICBTdHJpbmdCdWlsZGVyIHR5cGVzOwogCkBAIC0yMDgsNyArMjA5LDcg
QEAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkFwcGxpY2F0aW9u
Q2FjaGVSZXNvdXJjZT4gSW5zcGVjdG9yQXAKICAgICBpZiAocmVzb3VyY2VJbmZvLmlzRXhwbGlj
aXQpCiAgICAgICAgIHR5cGVzLmFwcGVuZExpdGVyYWwoIkV4cGxpY2l0ICIpOwogCi0gICAgcmV0
dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkFwcGxpY2F0aW9uQ2Fj
aGVSZXNvdXJjZTo6Y3JlYXRlKCkKKyAgICByZXR1cm4gUHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2Fj
aGU6OkFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZTo6Y3JlYXRlKCkKICAgICAgICAgLnNldFVybChy
ZXNvdXJjZUluZm8ucmVzb3VyY2Uuc3RyaW5nKCkpCiAgICAgICAgIC5zZXRTaXplKHN0YXRpY19j
YXN0PGludD4ocmVzb3VyY2VJbmZvLnNpemUpKQogICAgICAgICAuc2V0VHlwZSh0eXBlcy50b1N0
cmluZygpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNw
ZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9h
Z2VudHMvSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50LmgKaW5kZXggNTE5ODhmNjE3ZGUx
MWVmMTE3MDhhN2IzOTJjZjBjZTE5NGI0ODZlYS4uODA3Njc5N2NhYjYwOWI5MjM2NzkzZTIyODFh
NTg5YzRjZDE0NjI1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50
cy9JbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5oCkBAIC0zOSwy
NSArMzksMjMgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgRnJhbWU7CiBjbGFzcyBQYWdl
OwogCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQogY2xhc3MgSW5zcGVjdG9yQXBwbGlj
YXRpb25DYWNoZUFnZW50IGZpbmFsIDogcHVibGljIEluc3BlY3RvckFnZW50QmFzZSwgcHVibGlj
IEluc3BlY3Rvcjo6QXBwbGljYXRpb25DYWNoZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7CiAg
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50KTsK
ICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBJbnNwZWN0b3JBcHBs
aWNhdGlvbkNhY2hlQWdlbnQoUGFnZUFnZW50Q29udGV4dCYpOwotICAgIH5JbnNwZWN0b3JBcHBs
aWNhdGlvbkNhY2hlQWdlbnQoKSBvdmVycmlkZTsKKyAgICB+SW5zcGVjdG9yQXBwbGljYXRpb25D
YWNoZUFnZW50KCk7CiAKICAgICAvLyBJbnNwZWN0b3JBZ2VudEJhc2UKLSAgICB2b2lkIGRpZENy
ZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kUm91dGVyKiwgSW5zcGVj
dG9yOjpCYWNrZW5kRGlzcGF0Y2hlciopIG92ZXJyaWRlOwotICAgIHZvaWQgd2lsbERlc3Ryb3lG
cm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKSBvdmVycmlkZTsK
KyAgICB2b2lkIGRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5k
Um91dGVyKiwgSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlciopOworICAgIHZvaWQgd2lsbERl
c3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKTsKIAog
ICAgIC8vIEFwcGxpY2F0aW9uQ2FjaGVCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIKLSAgICB2b2lk
IGVuYWJsZShFcnJvclN0cmluZyYpIG92ZXJyaWRlOwotICAgIHZvaWQgZGlzYWJsZShFcnJvclN0
cmluZyYpIG92ZXJyaWRlOwotICAgIHZvaWQgZ2V0RnJhbWVzV2l0aE1hbmlmZXN0cyhFcnJvclN0
cmluZyYsIFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFwcGxpY2F0
aW9uQ2FjaGU6OkZyYW1lV2l0aE1hbmlmZXN0Pj4mIHJlc3VsdCkgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBnZXRNYW5pZmVzdEZvckZyYW1lKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBmcmFtZUlk
LCBTdHJpbmcqIG1hbmlmZXN0VVJMKSBvdmVycmlkZTsKLSAgICB2b2lkIGdldEFwcGxpY2F0aW9u
Q2FjaGVGb3JGcmFtZShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgZnJhbWVJZCwgUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkFwcGxpY2F0aW9uQ2FjaGU+
Jikgb3ZlcnJpZGU7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lk
PiBlbmFibGUoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+
IGRpc2FibGUoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxK
U09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkFwcGxpY2F0aW9uQ2FjaGU6OkZyYW1l
V2l0aE1hbmlmZXN0Pj4+IGdldEZyYW1lc1dpdGhNYW5pZmVzdHMoKTsKKyAgICBJbnNwZWN0b3I6
OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFN0cmluZz4gZ2V0TWFuaWZlc3RGb3JGcmFtZShjb25z
dCBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpGcmFtZUlkJik7CisgICAgSW5zcGVjdG9y
OjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXBwbGlj
YXRpb25DYWNoZTo6QXBwbGljYXRpb25DYWNoZT4+IGdldEFwcGxpY2F0aW9uQ2FjaGVGb3JGcmFt
ZShjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpGcmFtZUlkJik7CiAKICAgICAv
LyBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24KICAgICB2b2lkIHVwZGF0ZUFwcGxpY2F0aW9uQ2Fj
aGVTdGF0dXMoRnJhbWUqKTsKQEAgLTY4LDcgKzY2LDcgQEAgcHJpdmF0ZToKICAgICBSZWY8SlNP
Tjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpBcHBsaWNhdGlvbkNhY2hlOjpBcHBsaWNh
dGlvbkNhY2hlUmVzb3VyY2U+PiBidWlsZEFycmF5Rm9yQXBwbGljYXRpb25DYWNoZVJlc291cmNl
cyhjb25zdCBWZWN0b3I8QXBwbGljYXRpb25DYWNoZUhvc3Q6OlJlc291cmNlSW5mbz4mKTsKICAg
ICBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXBwbGljYXRpb25DYWNoZTo6QXBwbGljYXRpb25D
YWNoZVJlc291cmNlPiBidWlsZE9iamVjdEZvckFwcGxpY2F0aW9uQ2FjaGVSZXNvdXJjZShjb25z
dCBBcHBsaWNhdGlvbkNhY2hlSG9zdDo6UmVzb3VyY2VJbmZvJik7CiAKLSAgICBEb2N1bWVudExv
YWRlciogYXNzZXJ0RnJhbWVXaXRoRG9jdW1lbnRMb2FkZXIoRXJyb3JTdHJpbmcmLCBjb25zdCBT
dHJpbmcmIGZyYW1lSWQpOworICAgIERvY3VtZW50TG9hZGVyKiBhc3NlcnRGcmFtZVdpdGhEb2N1
bWVudExvYWRlcihJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZyYsIGNvbnN0IEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OkZyYW1lSWQmKTsKIAogICAgIHN0ZDo6dW5pcXVlX3B0
cjxJbnNwZWN0b3I6OkFwcGxpY2F0aW9uQ2FjaGVGcm9udGVuZERpc3BhdGNoZXI+IG1fZnJvbnRl
bmREaXNwYXRjaGVyOwogICAgIFJlZlB0cjxJbnNwZWN0b3I6OkFwcGxpY2F0aW9uQ2FjaGVCYWNr
ZW5kRGlzcGF0Y2hlcj4gbV9iYWNrZW5kRGlzcGF0Y2hlcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ1BVUHJvZmlsZXJBZ2VudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNQVVByb2ZpbGVyQWdlbnQu
Y3BwCmluZGV4IGEwZTZmYzQ1MzE1MTZkOTg5MzIxMTViYjRiOWNhMmIyYzIzMDU2OTMuLjgyODEx
YmU1MWNmNDYzYzQxMTgwYmRlODA0NTgyMmQ0N2ZlMWU1MjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ1BVUHJvZmlsZXJBZ2VudC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDUFVQcm9maWxlckFn
ZW50LmNwcApAQCAtNTMsMTYgKzUzLDE1IEBAIHZvaWQgSW5zcGVjdG9yQ1BVUHJvZmlsZXJBZ2Vu
dDo6ZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEZyb250ZW5kUm91dGVyKiwgQmFjCiAKIHZv
aWQgSW5zcGVjdG9yQ1BVUHJvZmlsZXJBZ2VudDo6d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tl
bmQoRGlzY29ubmVjdFJlYXNvbikKIHsKLSAgICBFcnJvclN0cmluZyBpZ25vcmVkOwotICAgIHN0
b3BUcmFja2luZyhpZ25vcmVkKTsKKyAgICBzdG9wVHJhY2tpbmcoKTsKIAogICAgIG1faW5zdHJ1
bWVudGluZ0FnZW50cy5zZXRQZXJzaXN0ZW50Q1BVUHJvZmlsZXJBZ2VudChudWxscHRyKTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JDUFVQcm9maWxlckFnZW50OjpzdGFydFRyYWNraW5nKEVycm9yU3Ry
aW5nJikKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckNQVVByb2ZpbGVy
QWdlbnQ6OnN0YXJ0VHJhY2tpbmcoKQogewogICAgIGlmIChtX3RyYWNraW5nKQotICAgICAgICBy
ZXR1cm47CisgICAgICAgIHJldHVybiB7IH07CiAKICAgICBSZXNvdXJjZVVzYWdlVGhyZWFkOjph
ZGRPYnNlcnZlcih0aGlzLCBDUFUsIFt0aGlzXSAoY29uc3QgUmVzb3VyY2VVc2FnZURhdGEmIGRh
dGEpIHsKICAgICAgICAgY29sbGVjdFNhbXBsZShkYXRhKTsKQEAgLTcxLDE4ICs3MCwyMiBAQCB2
b2lkIEluc3BlY3RvckNQVVByb2ZpbGVyQWdlbnQ6OnN0YXJ0VHJhY2tpbmcoRXJyb3JTdHJpbmcm
KQogICAgIG1fdHJhY2tpbmcgPSB0cnVlOwogCiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPnRy
YWNraW5nU3RhcnQobV9lbnZpcm9ubWVudC5leGVjdXRpb25TdG9wd2F0Y2goKS5lbGFwc2VkVGlt
ZSgpLnNlY29uZHMoKSk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckNQ
VVByb2ZpbGVyQWdlbnQ6OnN0b3BUcmFja2luZyhFcnJvclN0cmluZyYpCitQcm90b2NvbDo6RXJy
b3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JDUFVQcm9maWxlckFnZW50OjpzdG9wVHJhY2tpbmco
KQogewogICAgIGlmICghbV90cmFja2luZykKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1
cm4geyB9OwogCiAgICAgUmVzb3VyY2VVc2FnZVRocmVhZDo6cmVtb3ZlT2JzZXJ2ZXIodGhpcyk7
CiAKICAgICBtX3RyYWNraW5nID0gZmFsc2U7CiAKICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+
dHJhY2tpbmdDb21wbGV0ZShtX2Vudmlyb25tZW50LmV4ZWN1dGlvblN0b3B3YXRjaCgpLmVsYXBz
ZWRUaW1lKCkuc2Vjb25kcygpKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKIHN0YXRpYyBSZWY8
UHJvdG9jb2w6OkNQVVByb2ZpbGVyOjpUaHJlYWRJbmZvPiBidWlsZFRocmVhZEluZm8oY29uc3Qg
VGhyZWFkQ1BVSW5mbyYgdGhyZWFkKQpAQCAtMTEzLDcgKzExNiw3IEBAIHZvaWQgSW5zcGVjdG9y
Q1BVUHJvZmlsZXJBZ2VudDo6Y29sbGVjdFNhbXBsZShjb25zdCBSZXNvdXJjZVVzYWdlRGF0YSYg
ZGF0YSkKICAgICAgICAgLnJlbGVhc2UoKTsKIAogICAgIGlmICghZGF0YS5jcHVUaHJlYWRzLmlz
RW1wdHkoKSkgewotICAgICAgICBSZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6Q1BVUHJv
ZmlsZXI6OlRocmVhZEluZm8+PiB0aHJlYWRzID0gSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6Q1BV
UHJvZmlsZXI6OlRocmVhZEluZm8+OjpjcmVhdGUoKTsKKyAgICAgICAgYXV0byB0aHJlYWRzID0g
SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6Q1BVUHJvZmlsZXI6OlRocmVhZEluZm8+OjpjcmVhdGUo
KTsKICAgICAgICAgZm9yIChhdXRvJiB0aHJlYWRJbmZvIDogZGF0YS5jcHVUaHJlYWRzKQogICAg
ICAgICAgICAgdGhyZWFkcy0+YWRkSXRlbShidWlsZFRocmVhZEluZm8odGhyZWFkSW5mbykpOwog
ICAgICAgICBldmVudC0+c2V0VGhyZWFkcyhXVEZNb3ZlKHRocmVhZHMpKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ1BVUHJvZmlsZXJBZ2Vu
dC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDUFVQcm9maWxl
ckFnZW50LmgKaW5kZXggNGVlOGU5Nzg1M2Q3MTJkM2RhNjQzOWI5ODk3ZTg2NWE4OTZkYmZmZi4u
ZmU1ZTE4NWFiZGIxYzRmMmYxM2I0ZDhhMDdhOTJiZmQ3OWU2OWQwYiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDUFVQcm9maWxlckFnZW50LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDUFVQcm9maWxl
ckFnZW50LmgKQEAgLTM0LDIyICszNCwyMCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXR5
cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCiBjbGFzcyBJbnNwZWN0b3JDUFVQcm9maWxlckFn
ZW50IGZpbmFsIDogcHVibGljIEluc3BlY3RvckFnZW50QmFzZSwgcHVibGljIEluc3BlY3Rvcjo6
Q1BVUHJvZmlsZXJCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewogICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKEluc3BlY3RvckNQVVByb2ZpbGVyQWdlbnQpOwogICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOwogcHVibGljOgogICAgIEluc3BlY3RvckNQVVByb2ZpbGVyQWdlbnQoUGFnZUFnZW50
Q29udGV4dCYpOwotICAgIH5JbnNwZWN0b3JDUFVQcm9maWxlckFnZW50KCkgb3ZlcnJpZGU7Cisg
ICAgfkluc3BlY3RvckNQVVByb2ZpbGVyQWdlbnQoKTsKIAogICAgIC8vIEluc3BlY3RvckFnZW50
QmFzZQotICAgIHZvaWQgZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJv
bnRlbmRSb3V0ZXIqLCBJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyKikgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCB3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5l
Y3RSZWFzb24pIG92ZXJyaWRlOworICAgIHZvaWQgZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5k
KEluc3BlY3Rvcjo6RnJvbnRlbmRSb3V0ZXIqLCBJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVy
Kik7CisgICAgdm9pZCB3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkRp
c2Nvbm5lY3RSZWFzb24pOwogCiAgICAgLy8gQ1BVUHJvZmlsZXJCYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXIKLSAgICB2b2lkIHN0YXJ0VHJhY2tpbmcoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKLSAg
ICB2b2lkIHN0b3BUcmFja2luZyhFcnJvclN0cmluZyYpIG92ZXJyaWRlOworICAgIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc3RhcnRUcmFja2luZygpOworICAgIElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc3RvcFRyYWNraW5nKCk7CiAK
IHByaXZhdGU6CiAgICAgdm9pZCBjb2xsZWN0U2FtcGxlKGNvbnN0IFJlc291cmNlVXNhZ2VEYXRh
Jik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rv
ckNTU0FnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9y
Q1NTQWdlbnQuY3BwCmluZGV4IDU2NWViZTA4MmMwNzhiYjY2ODc3NDAzODllYjM3MmVlMTE5Yjc0
MWIuLjU5NGM4NDVjMThhMzI1ZDUwZDllNWUwMzgyMTA5ZjkyMmIzYmNkMjEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ1NTQWdlbnQuY3Bw
CkBAIC05MiwxMCArOTIsNyBAQCBzdGF0aWMgdW5zaWduZWQgY29tcHV0ZVBzZXVkb0NsYXNzTWFz
ayhjb25zdCBKU09OOjpBcnJheSYgcHNldWRvQ2xhc3NBcnJheSkKIAogICAgIHVuc2lnbmVkIHJl
c3VsdCA9IFBzZXVkb0NsYXNzTm9uZTsKICAgICBmb3IgKGF1dG8mIHBzZXVkb0NsYXNzVmFsdWUg
OiBwc2V1ZG9DbGFzc0FycmF5KSB7Ci0gICAgICAgIFN0cmluZyBwc2V1ZG9DbGFzczsKLSAgICAg
ICAgYm9vbCBzdWNjZXNzID0gcHNldWRvQ2xhc3NWYWx1ZS0+YXNTdHJpbmcocHNldWRvQ2xhc3Mp
OwotICAgICAgICBpZiAoIXN1Y2Nlc3MpCi0gICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
YXV0byBwc2V1ZG9DbGFzcyA9IHBzZXVkb0NsYXNzVmFsdWUtPmFzU3RyaW5nKCk7CiAgICAgICAg
IGlmIChwc2V1ZG9DbGFzcyA9PSBhY3RpdmUpCiAgICAgICAgICAgICByZXN1bHQgfD0gUHNldWRv
Q2xhc3NBY3RpdmU7CiAgICAgICAgIGVsc2UgaWYgKHBzZXVkb0NsYXNzID09IGhvdmVyKQpAQCAt
MzEyLDggKzMwOSw3IEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmRpZENyZWF0ZUZyb250ZW5k
QW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kUm91dGVyKiwKIAogdm9pZCBJbnNwZWN0b3JD
U1NBZ2VudDo6d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25u
ZWN0UmVhc29uKQogewotICAgIFN0cmluZyB1bnVzZWQ7Ci0gICAgZGlzYWJsZSh1bnVzZWQpOwor
ICAgIGRpc2FibGUoKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6cmVzZXQoKQpAQCAt
MzI3LDEwICszMjMsMTAgQEAgdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6cmVzZXQoKQogICAgIHJl
c2V0UHNldWRvU3RhdGVzKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmVuYWJsZShF
cnJvclN0cmluZyYpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JDU1NB
Z2VudDo6ZW5hYmxlKCkKIHsKICAgICBpZiAobV9pbnN0cnVtZW50aW5nQWdlbnRzLmVuYWJsZWRD
U1NBZ2VudCgpID09IHRoaXMpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHsgfTsK
IAogICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy5zZXRFbmFibGVkQ1NTQWdlbnQodGhpcyk7CiAK
QEAgLTMzOCwxMyArMzM0LDE3IEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmVuYWJsZShFcnJv
clN0cmluZyYpCiAgICAgICAgIGZvciAoYXV0byogZG9jdW1lbnQgOiBkb21BZ2VudC0+ZG9jdW1l
bnRzKCkpCiAgICAgICAgICAgICBhY3RpdmVTdHlsZVNoZWV0c1VwZGF0ZWQoKmRvY3VtZW50KTsK
ICAgICB9CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckNTU0FnZW50Ojpk
aXNhYmxlKEVycm9yU3RyaW5nJikKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3Bl
Y3RvckNTU0FnZW50OjpkaXNhYmxlKCkKIHsKICAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMuc2V0
RW5hYmxlZENTU0FnZW50KG51bGxwdHIpOwogCiAgICAgcmVzZXQoKTsKKworICAgIHJldHVybiB7
IH07CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmRvY3VtZW50RGV0YWNoZWQoRG9jdW1l
bnQmIGRvY3VtZW50KQpAQCAtMzg3LDcgKzM4Nyw3IEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6
OnNldEFjdGl2ZVN0eWxlU2hlZXRzRm9yRG9jdW1lbnQoRG9jdW1lbnQmIGRvY3VtZW50LCBWZWN0
CiAgICAgICAgIHByZXZpb3VzbHlLbm93bkFjdGl2ZVN0eWxlU2hlZXRzLnJlbW92ZShjc3NTdHls
ZVNoZWV0KTsKICAgICAgICAgUmVmUHRyPEluc3BlY3RvclN0eWxlU2hlZXQ+IGluc3BlY3RvclN0
eWxlU2hlZXQgPSBtX2Nzc1N0eWxlU2hlZXRUb0luc3BlY3RvclN0eWxlU2hlZXQuZ2V0KGNzc1N0
eWxlU2hlZXQpOwogICAgICAgICBpZiAobV9pZFRvSW5zcGVjdG9yU3R5bGVTaGVldC5jb250YWlu
cyhpbnNwZWN0b3JTdHlsZVNoZWV0LT5pZCgpKSkgewotICAgICAgICAgICAgU3RyaW5nIGlkID0g
dW5iaW5kU3R5bGVTaGVldChpbnNwZWN0b3JTdHlsZVNoZWV0LmdldCgpKTsKKyAgICAgICAgICAg
IGF1dG8gaWQgPSB1bmJpbmRTdHlsZVNoZWV0KGluc3BlY3RvclN0eWxlU2hlZXQuZ2V0KCkpOwog
ICAgICAgICAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPnN0eWxlU2hlZXRSZW1vdmVkKGlkKTsK
ICAgICAgICAgfQogICAgIH0KQEAgLTM5Niw3ICszOTYsOCBAQCB2b2lkIEluc3BlY3RvckNTU0Fn
ZW50OjpzZXRBY3RpdmVTdHlsZVNoZWV0c0ZvckRvY3VtZW50KERvY3VtZW50JiBkb2N1bWVudCwg
VmVjdAogICAgICAgICBwcmV2aW91c2x5S25vd25BY3RpdmVTdHlsZVNoZWV0cy5hZGQoY3NzU3R5
bGVTaGVldCk7CiAgICAgICAgIGlmICghbV9jc3NTdHlsZVNoZWV0VG9JbnNwZWN0b3JTdHlsZVNo
ZWV0LmNvbnRhaW5zKGNzc1N0eWxlU2hlZXQpKSB7CiAgICAgICAgICAgICBJbnNwZWN0b3JTdHls
ZVNoZWV0KiBpbnNwZWN0b3JTdHlsZVNoZWV0ID0gYmluZFN0eWxlU2hlZXQoY3NzU3R5bGVTaGVl
dCk7Ci0gICAgICAgICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+c3R5bGVTaGVldEFkZGVkKGlu
c3BlY3RvclN0eWxlU2hlZXQtPmJ1aWxkT2JqZWN0Rm9yU3R5bGVTaGVldEluZm8oKSk7CisgICAg
ICAgICAgICBpZiAoYXV0byBoZWFkZXIgPSBpbnNwZWN0b3JTdHlsZVNoZWV0LT5idWlsZE9iamVj
dEZvclN0eWxlU2hlZXRJbmZvKCkpCisgICAgICAgICAgICAgICAgbV9mcm9udGVuZERpc3BhdGNo
ZXItPnN0eWxlU2hlZXRBZGRlZChoZWFkZXIucmVsZWFzZU5vbk51bGwoKSk7CiAgICAgICAgIH0K
ICAgICB9CiB9CkBAIC00MTAsNyArNDExLDcgQEAgYm9vbCBJbnNwZWN0b3JDU1NBZ2VudDo6Zm9y
Y2VQc2V1ZG9TdGF0ZShjb25zdCBFbGVtZW50JiBlbGVtZW50LCBDU1NTZWxlY3Rvcjo6UHMKICAg
ICBpZiAoIWRvbUFnZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpbnQgbm9kZUlk
ID0gZG9tQWdlbnQtPmJvdW5kTm9kZUlkKCZlbGVtZW50KTsKKyAgICBhdXRvIG5vZGVJZCA9IGRv
bUFnZW50LT5ib3VuZE5vZGVJZCgmZWxlbWVudCk7CiAgICAgaWYgKCFub2RlSWQpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIApAQCAtNDI5LDM3ICs0MzAsMzcgQEAgYm9vbCBJbnNwZWN0b3JDU1NB
Z2VudDo6Zm9yY2VQc2V1ZG9TdGF0ZShjb25zdCBFbGVtZW50JiBlbGVtZW50LCBDU1NTZWxlY3Rv
cjo6UHMKICAgICB9CiB9CiAKLXN0YXRpYyBPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpD
U1M6OlBzZXVkb0lkPiBwcm90b2NvbFZhbHVlRm9yUHNldWRvSWQoUHNldWRvSWQgcHNldWRvSWQp
CitzdGF0aWMgT3B0aW9uYWw8UHJvdG9jb2w6OkNTUzo6UHNldWRvSWQ+IHByb3RvY29sVmFsdWVG
b3JQc2V1ZG9JZChQc2V1ZG9JZCBwc2V1ZG9JZCkKIHsKICAgICBzd2l0Y2ggKHBzZXVkb0lkKSB7
CiAgICAgY2FzZSBQc2V1ZG9JZDo6Rmlyc3RMaW5lOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9y
OjpQcm90b2NvbDo6Q1NTOjpQc2V1ZG9JZDo6Rmlyc3RMaW5lOworICAgICAgICByZXR1cm4gUHJv
dG9jb2w6OkNTUzo6UHNldWRvSWQ6OkZpcnN0TGluZTsKICAgICBjYXNlIFBzZXVkb0lkOjpGaXJz
dExldHRlcjoKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6UHNldWRv
SWQ6OkZpcnN0TGV0dGVyOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OkNTUzo6UHNldWRvSWQ6
OkZpcnN0TGV0dGVyOwogICAgIGNhc2UgUHNldWRvSWQ6Ok1hcmtlcjoKLSAgICAgICAgcmV0dXJu
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6UHNldWRvSWQ6Ok1hcmtlcjsKKyAgICAgICAgcmV0
dXJuIFByb3RvY29sOjpDU1M6OlBzZXVkb0lkOjpNYXJrZXI7CiAgICAgY2FzZSBQc2V1ZG9JZDo6
QmVmb3JlOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpQc2V1ZG9J
ZDo6QmVmb3JlOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OkNTUzo6UHNldWRvSWQ6OkJlZm9y
ZTsKICAgICBjYXNlIFBzZXVkb0lkOjpBZnRlcjoKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkNTUzo6UHNldWRvSWQ6OkFmdGVyOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6
OkNTUzo6UHNldWRvSWQ6OkFmdGVyOwogICAgIGNhc2UgUHNldWRvSWQ6OlNlbGVjdGlvbjoKLSAg
ICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6UHNldWRvSWQ6OlNlbGVjdGlv
bjsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpDU1M6OlBzZXVkb0lkOjpTZWxlY3Rpb247CiAg
ICAgY2FzZSBQc2V1ZG9JZDo6SGlnaGxpZ2h0OgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQ
cm90b2NvbDo6Q1NTOjpQc2V1ZG9JZDo6SGlnaGxpZ2h0OworICAgICAgICByZXR1cm4gUHJvdG9j
b2w6OkNTUzo6UHNldWRvSWQ6OkhpZ2hsaWdodDsKICAgICBjYXNlIFBzZXVkb0lkOjpTY3JvbGxi
YXI6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlBzZXVkb0lkOjpT
Y3JvbGxiYXI7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6Q1NTOjpQc2V1ZG9JZDo6U2Nyb2xs
YmFyOwogICAgIGNhc2UgUHNldWRvSWQ6OlNjcm9sbGJhclRodW1iOgotICAgICAgICByZXR1cm4g
SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpQc2V1ZG9JZDo6U2Nyb2xsYmFyVGh1bWI7CisgICAg
ICAgIHJldHVybiBQcm90b2NvbDo6Q1NTOjpQc2V1ZG9JZDo6U2Nyb2xsYmFyVGh1bWI7CiAgICAg
Y2FzZSBQc2V1ZG9JZDo6U2Nyb2xsYmFyQnV0dG9uOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9y
OjpQcm90b2NvbDo6Q1NTOjpQc2V1ZG9JZDo6U2Nyb2xsYmFyQnV0dG9uOworICAgICAgICByZXR1
cm4gUHJvdG9jb2w6OkNTUzo6UHNldWRvSWQ6OlNjcm9sbGJhckJ1dHRvbjsKICAgICBjYXNlIFBz
ZXVkb0lkOjpTY3JvbGxiYXJUcmFjazoKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkNTUzo6UHNldWRvSWQ6OlNjcm9sbGJhclRyYWNrOworICAgICAgICByZXR1cm4gUHJvdG9j
b2w6OkNTUzo6UHNldWRvSWQ6OlNjcm9sbGJhclRyYWNrOwogICAgIGNhc2UgUHNldWRvSWQ6OlNj
cm9sbGJhclRyYWNrUGllY2U6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpD
U1M6OlBzZXVkb0lkOjpTY3JvbGxiYXJUcmFja1BpZWNlOworICAgICAgICByZXR1cm4gUHJvdG9j
b2w6OkNTUzo6UHNldWRvSWQ6OlNjcm9sbGJhclRyYWNrUGllY2U7CiAgICAgY2FzZSBQc2V1ZG9J
ZDo6U2Nyb2xsYmFyQ29ybmVyOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6
Q1NTOjpQc2V1ZG9JZDo6U2Nyb2xsYmFyQ29ybmVyOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6
OkNTUzo6UHNldWRvSWQ6OlNjcm9sbGJhckNvcm5lcjsKICAgICBjYXNlIFBzZXVkb0lkOjpSZXNp
emVyOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpQc2V1ZG9JZDo6
UmVzaXplcjsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpDU1M6OlBzZXVkb0lkOjpSZXNpemVy
OwogCiAgICAgZGVmYXVsdDoKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC00Njcs
MzYgKzQ2OCwzNyBAQCBzdGF0aWMgT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpQ
c2V1ZG9JZD4gcHJvdG9jb2xWYWx1ZUZvclBzZXVkb0lkKFBzZQogICAgIH0KIH0KIAotdm9pZCBJ
bnNwZWN0b3JDU1NBZ2VudDo6Z2V0TWF0Y2hlZFN0eWxlc0Zvck5vZGUoRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBpbnQgbm9kZUlkLCBjb25zdCBib29sKiBpbmNsdWRlUHNldWRvLCBjb25zdCBi
b29sKiBpbmNsdWRlSW5oZXJpdGVkLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpDU1M6OlJ1bGVNYXRjaD4+JiBtYXRjaGVkQ1NTUnVsZXMsIFJlZlB0cjxKU09OOjpB
cnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6UHNldWRvSWRNYXRjaGVzPj4mIHBzZXVk
b0lkTWF0Y2hlcywgUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NT
OjpJbmhlcml0ZWRTdHlsZUVudHJ5Pj4mIGluaGVyaXRlZEVudHJpZXMpCitQcm90b2NvbDo6RXJy
b3JTdHJpbmdPcjxzdGQ6OnR1cGxlPFJlZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpDU1M6
OlJ1bGVNYXRjaD4+LCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6Q1NTOjpQc2V1ZG9J
ZE1hdGNoZXM+PiwgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkNTUzo6SW5oZXJpdGVk
U3R5bGVFbnRyeT4+Pj4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldE1hdGNoZWRTdHlsZXNGb3JOb2Rl
KFByb3RvY29sOjpET006Ok5vZGVJZCBub2RlSWQsIE9wdGlvbmFsPGJvb2w+JiYgaW5jbHVkZVBz
ZXVkbywgT3B0aW9uYWw8Ym9vbD4mJiBpbmNsdWRlSW5oZXJpdGVkKQogeworICAgIFByb3RvY29s
OjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBlbGVt
ZW50Rm9ySWQoZXJyb3JTdHJpbmcsIG5vZGVJZCk7CiAgICAgaWYgKCFlbGVtZW50KQotICAgICAg
ICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAK
ICAgICBFbGVtZW50KiBvcmlnaW5hbEVsZW1lbnQgPSBlbGVtZW50OwogICAgIFBzZXVkb0lkIGVs
ZW1lbnRQc2V1ZG9JZCA9IGVsZW1lbnQtPnBzZXVkb0lkKCk7CiAgICAgaWYgKGVsZW1lbnRQc2V1
ZG9JZCAhPSBQc2V1ZG9JZDo6Tm9uZSkgewogICAgICAgICBlbGVtZW50ID0gZG93bmNhc3Q8UHNl
dWRvRWxlbWVudD4oKmVsZW1lbnQpLmhvc3RFbGVtZW50KCk7Ci0gICAgICAgIGlmICghZWxlbWVu
dCkgewotICAgICAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWlzc2luZyBwYXJlbnQgb2YgcHNldWRv
LWVsZW1lbnQgbm9kZSBmb3IgZ2l2ZW4gbm9kZUlkIl9zOwotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB9CisgICAgICAgIGlmICghZWxlbWVudCkKKyAgICAgICAgICAgIHJldHVybiBtYWtl
VW5leHBlY3RlZCgiTWlzc2luZyBwYXJlbnQgb2YgcHNldWRvLWVsZW1lbnQgbm9kZSBmb3IgZ2l2
ZW4gbm9kZUlkIl9zKTsKICAgICB9CiAKICAgICAvLyBNYXRjaGVkIHJ1bGVzLgogICAgIGF1dG8m
IHN0eWxlUmVzb2x2ZXIgPSBlbGVtZW50LT5zdHlsZVJlc29sdmVyKCk7CiAgICAgYXV0byBtYXRj
aGVkUnVsZXMgPSBzdHlsZVJlc29sdmVyLnBzZXVkb1N0eWxlUnVsZXNGb3JFbGVtZW50KGVsZW1l
bnQsIGVsZW1lbnRQc2V1ZG9JZCwgU3R5bGU6OlJlc29sdmVyOjpBbGxDU1NSdWxlcyk7Ci0gICAg
bWF0Y2hlZENTU1J1bGVzID0gYnVpbGRBcnJheUZvck1hdGNoZWRSdWxlTGlzdChtYXRjaGVkUnVs
ZXMsIHN0eWxlUmVzb2x2ZXIsICplbGVtZW50LCBlbGVtZW50UHNldWRvSWQpOworICAgIGF1dG8g
bWF0Y2hlZENTU1J1bGVzID0gYnVpbGRBcnJheUZvck1hdGNoZWRSdWxlTGlzdChtYXRjaGVkUnVs
ZXMsIHN0eWxlUmVzb2x2ZXIsICplbGVtZW50LCBlbGVtZW50UHNldWRvSWQpOworICAgIFJlZlB0
cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpDU1M6OlBzZXVkb0lkTWF0Y2hlcz4+IHBzZXVkb0Vs
ZW1lbnRzOworICAgIFJlZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpDU1M6OkluaGVyaXRl
ZFN0eWxlRW50cnk+PiBpbmhlcml0ZWQ7CiAKICAgICBpZiAoIW9yaWdpbmFsRWxlbWVudC0+aXNQ
c2V1ZG9FbGVtZW50KCkpIHsKLSAgICAgICAgLy8gUHNldWRvIGVsZW1lbnRzLgogICAgICAgICBp
ZiAoIWluY2x1ZGVQc2V1ZG8gfHwgKmluY2x1ZGVQc2V1ZG8pIHsKLSAgICAgICAgICAgIGF1dG8g
cHNldWRvRWxlbWVudHMgPSBKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6
UHNldWRvSWRNYXRjaGVzPjo6Y3JlYXRlKCk7CisgICAgICAgICAgICBwc2V1ZG9FbGVtZW50cyA9
IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkNTUzo6UHNldWRvSWRNYXRjaGVzPjo6Y3JlYXRlKCk7
CiAgICAgICAgICAgICBmb3IgKFBzZXVkb0lkIHBzZXVkb0lkID0gUHNldWRvSWQ6OkZpcnN0UHVi
bGljUHNldWRvSWQ7IHBzZXVkb0lkIDwgUHNldWRvSWQ6OkFmdGVyTGFzdEludGVybmFsUHNldWRv
SWQ7IHBzZXVkb0lkID0gc3RhdGljX2Nhc3Q8UHNldWRvSWQ+KHN0YXRpY19jYXN0PHVuc2lnbmVk
Pihwc2V1ZG9JZCkgKyAxKSkgewogICAgICAgICAgICAgICAgIGlmIChhdXRvIHByb3RvY29sUHNl
dWRvSWQgPSBwcm90b2NvbFZhbHVlRm9yUHNldWRvSWQocHNldWRvSWQpKSB7CiAgICAgICAgICAg
ICAgICAgICAgIGF1dG8gbWF0Y2hlZFJ1bGVzID0gc3R5bGVSZXNvbHZlci5wc2V1ZG9TdHlsZVJ1
bGVzRm9yRWxlbWVudChlbGVtZW50LCBwc2V1ZG9JZCwgU3R5bGU6OlJlc29sdmVyOjpBbGxDU1NS
dWxlcyk7CiAgICAgICAgICAgICAgICAgICAgIGlmICghbWF0Y2hlZFJ1bGVzLmlzRW1wdHkoKSkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBtYXRjaGVzID0gSW5zcGVjdG9yOjpQcm90
b2NvbDo6Q1NTOjpQc2V1ZG9JZE1hdGNoZXM6OmNyZWF0ZSgpCisgICAgICAgICAgICAgICAgICAg
ICAgICBhdXRvIG1hdGNoZXMgPSBQcm90b2NvbDo6Q1NTOjpQc2V1ZG9JZE1hdGNoZXM6OmNyZWF0
ZSgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNldFBzZXVkb0lkKHByb3RvY29sUHNl
dWRvSWQudmFsdWUoKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2V0TWF0Y2hlcyhi
dWlsZEFycmF5Rm9yTWF0Y2hlZFJ1bGVMaXN0KG1hdGNoZWRSdWxlcywgc3R5bGVSZXNvbHZlciwg
KmVsZW1lbnQsIHBzZXVkb0lkKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVsZWFz
ZSgpOwpAQCAtNTA0LDY2ICs1MDYsNjYgQEAgdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0TWF0
Y2hlZFN0eWxlc0Zvck5vZGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgbm8KICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgcHNldWRvSWRNYXRjaGVzID0gV1RGTW92ZShwc2V1ZG9FbGVtZW50cyk7CiAgICAg
ICAgIH0KIAotICAgICAgICAvLyBJbmhlcml0ZWQgc3R5bGVzLgogICAgICAgICBpZiAoIWluY2x1
ZGVJbmhlcml0ZWQgfHwgKmluY2x1ZGVJbmhlcml0ZWQpIHsKLSAgICAgICAgICAgIGF1dG8gZW50
cmllcyA9IEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpJbmhlcml0ZWRT
dHlsZUVudHJ5Pjo6Y3JlYXRlKCk7CisgICAgICAgICAgICBpbmhlcml0ZWQgPSBKU09OOjpBcnJh
eU9mPFByb3RvY29sOjpDU1M6OkluaGVyaXRlZFN0eWxlRW50cnk+OjpjcmVhdGUoKTsKICAgICAg
ICAgICAgIGZvciAoYXV0byYgYW5jZXN0b3IgOiBhbmNlc3RvcnNPZlR5cGU8RWxlbWVudD4oKmVs
ZW1lbnQpKSB7CiAgICAgICAgICAgICAgICAgYXV0byYgcGFyZW50U3R5bGVSZXNvbHZlciA9IGFu
Y2VzdG9yLnN0eWxlUmVzb2x2ZXIoKTsKICAgICAgICAgICAgICAgICBhdXRvIHBhcmVudE1hdGNo
ZWRSdWxlcyA9IHBhcmVudFN0eWxlUmVzb2x2ZXIuc3R5bGVSdWxlc0ZvckVsZW1lbnQoJmFuY2Vz
dG9yLCBTdHlsZTo6UmVzb2x2ZXI6OkFsbENTU1J1bGVzKTsKLSAgICAgICAgICAgICAgICBhdXRv
IGVudHJ5ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpJbmhlcml0ZWRTdHlsZUVudHJ5Ojpj
cmVhdGUoKQorICAgICAgICAgICAgICAgIGF1dG8gZW50cnkgPSBQcm90b2NvbDo6Q1NTOjpJbmhl
cml0ZWRTdHlsZUVudHJ5OjpjcmVhdGUoKQogICAgICAgICAgICAgICAgICAgICAuc2V0TWF0Y2hl
ZENTU1J1bGVzKGJ1aWxkQXJyYXlGb3JNYXRjaGVkUnVsZUxpc3QocGFyZW50TWF0Y2hlZFJ1bGVz
LCBzdHlsZVJlc29sdmVyLCBhbmNlc3RvciwgUHNldWRvSWQ6Ok5vbmUpKQogICAgICAgICAgICAg
ICAgICAgICAucmVsZWFzZSgpOwogICAgICAgICAgICAgICAgIGlmIChpczxTdHlsZWRFbGVtZW50
PihhbmNlc3RvcikgJiYgZG93bmNhc3Q8U3R5bGVkRWxlbWVudD4oYW5jZXN0b3IpLmNzc29tU3R5
bGUoKS5sZW5ndGgoKSkgewogICAgICAgICAgICAgICAgICAgICBhdXRvJiBzdHlsZVNoZWV0ID0g
YXNJbnNwZWN0b3JTdHlsZVNoZWV0KGRvd25jYXN0PFN0eWxlZEVsZW1lbnQ+KGFuY2VzdG9yKSk7
CiAgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5zZXRJbmxpbmVTdHlsZShzdHlsZVNoZWV0LmJ1
aWxkT2JqZWN0Rm9yU3R5bGUoc3R5bGVTaGVldC5zdHlsZUZvcklkKEluc3BlY3RvckNTU0lkKHN0
eWxlU2hlZXQuaWQoKSwgMCkpKSk7CiAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgZW50cmllcy0+YWRkSXRlbShXVEZNb3ZlKGVudHJ5KSk7CisgICAgICAgICAgICAgICAgaW5o
ZXJpdGVkLT5hZGRJdGVtKFdURk1vdmUoZW50cnkpKTsKICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgaW5oZXJpdGVkRW50cmllcyA9IFdURk1vdmUoZW50cmllcyk7CiAgICAgICAgIH0KICAg
ICB9CisKKyAgICByZXR1cm4geyB7IFdURk1vdmUobWF0Y2hlZENTU1J1bGVzKSwgV1RGTW92ZShw
c2V1ZG9FbGVtZW50cyksIFdURk1vdmUoaW5oZXJpdGVkKSB9IH07CiB9CiAKLXZvaWQgSW5zcGVj
dG9yQ1NTQWdlbnQ6OmdldElubGluZVN0eWxlc0Zvck5vZGUoRXJyb3JTdHJpbmcmIGVycm9yU3Ry
aW5nLCBpbnQgbm9kZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHls
ZT4mIGlubGluZVN0eWxlLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHls
ZT4mIGF0dHJpYnV0ZXNTdHlsZSkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHN0ZDo6dHVwbGU8
UmVmUHRyPFByb3RvY29sOjpDU1M6OkNTU1N0eWxlPiAvKiBpbmxpbmVTdHlsZSAqLywgUmVmUHRy
PFByb3RvY29sOjpDU1M6OkNTU1N0eWxlPiAvKiBhdHRyaWJ1dGVzU3R5bGUgKi8+PiBJbnNwZWN0
b3JDU1NBZ2VudDo6Z2V0SW5saW5lU3R5bGVzRm9yTm9kZShQcm90b2NvbDo6RE9NOjpOb2RlSWQg
bm9kZUlkKQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAg
IGF1dG8qIGVsZW1lbnQgPSBlbGVtZW50Rm9ySWQoZXJyb3JTdHJpbmcsIG5vZGVJZCk7CiAgICAg
aWYgKCFpczxTdHlsZWRFbGVtZW50PihlbGVtZW50KSkKLSAgICAgICAgcmV0dXJuOworICAgICAg
ICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCiAgICAgYXV0byYgc3R5bGVk
RWxlbWVudCA9IGRvd25jYXN0PFN0eWxlZEVsZW1lbnQ+KCplbGVtZW50KTsKICAgICBhdXRvJiBz
dHlsZVNoZWV0ID0gYXNJbnNwZWN0b3JTdHlsZVNoZWV0KHN0eWxlZEVsZW1lbnQpOwotICAgIGlu
bGluZVN0eWxlID0gc3R5bGVTaGVldC5idWlsZE9iamVjdEZvclN0eWxlKCZzdHlsZWRFbGVtZW50
LmNzc29tU3R5bGUoKSk7Ci0gICAgaWYgKGF1dG8gYXR0cmlidXRlcyA9IGJ1aWxkT2JqZWN0Rm9y
QXR0cmlidXRlc1N0eWxlKHN0eWxlZEVsZW1lbnQpKQotICAgICAgICBhdHRyaWJ1dGVzU3R5bGUg
PSBXVEZNb3ZlKGF0dHJpYnV0ZXMpOwotICAgIGVsc2UKLSAgICAgICAgYXR0cmlidXRlc1N0eWxl
ID0gbnVsbHB0cjsKKyAgICByZXR1cm4geyB7IHN0eWxlU2hlZXQuYnVpbGRPYmplY3RGb3JTdHls
ZSgmc3R5bGVkRWxlbWVudC5jc3NvbVN0eWxlKCkpLCBidWlsZE9iamVjdEZvckF0dHJpYnV0ZXNT
dHlsZShzdHlsZWRFbGVtZW50KSB9IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6Omdl
dENvbXB1dGVkU3R5bGVGb3JOb2RlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJ
ZCwgUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NDb21w
dXRlZFN0eWxlUHJvcGVydHk+PiYgc3R5bGUpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8
SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6Q1NTOjpDU1NDb21wdXRlZFN0eWxlUHJvcGVydHk+Pj4g
SW5zcGVjdG9yQ1NTQWdlbnQ6OmdldENvbXB1dGVkU3R5bGVGb3JOb2RlKFByb3RvY29sOjpET006
Ok5vZGVJZCBub2RlSWQpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5n
OworCiAgICAgYXV0byogZWxlbWVudCA9IGVsZW1lbnRGb3JJZChlcnJvclN0cmluZywgbm9kZUlk
KTsKICAgICBpZiAoIWVsZW1lbnQpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1h
a2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgIGF1dG8gY29tcHV0ZWRTdHlsZUluZm8g
PSBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb246OmNyZWF0ZSgqZWxlbWVudCwgdHJ1ZSk7CiAg
ICAgYXV0byBpbnNwZWN0b3JTdHlsZSA9IEluc3BlY3RvclN0eWxlOjpjcmVhdGUoSW5zcGVjdG9y
Q1NTSWQoKSwgV1RGTW92ZShjb21wdXRlZFN0eWxlSW5mbyksIG51bGxwdHIpOwotICAgIHN0eWxl
ID0gaW5zcGVjdG9yU3R5bGUtPmJ1aWxkQXJyYXlGb3JDb21wdXRlZFN0eWxlKCk7CisgICAgcmV0
dXJuIGluc3BlY3RvclN0eWxlLT5idWlsZEFycmF5Rm9yQ29tcHV0ZWRTdHlsZSgpOwogfQogCi12
b2lkIEluc3BlY3RvckNTU0FnZW50OjpnZXRBbGxTdHlsZVNoZWV0cyhFcnJvclN0cmluZyYsIFJl
ZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGVTaGVl
dEhlYWRlcj4+JiBzdHlsZUluZm9zKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEpTT046
OkFycmF5T2Y8UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGVTaGVldEhlYWRlcj4+PiBJbnNwZWN0b3JD
U1NBZ2VudDo6Z2V0QWxsU3R5bGVTaGVldHMoKQogewotICAgIHN0eWxlSW5mb3MgPSBKU09OOjpB
cnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTU3R5bGVTaGVldEhlYWRlcj46OmNy
ZWF0ZSgpOworICAgIGF1dG8gaGVhZGVycyA9IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkNTUzo6
Q1NTU3R5bGVTaGVldEhlYWRlcj46OmNyZWF0ZSgpOwogCiAgICAgVmVjdG9yPEluc3BlY3RvclN0
eWxlU2hlZXQqPiBpbnNwZWN0b3JTdHlsZVNoZWV0czsKICAgICBjb2xsZWN0QWxsU3R5bGVTaGVl
dHMoaW5zcGVjdG9yU3R5bGVTaGVldHMpOwotICAgIGZvciAoYXV0byogaW5zcGVjdG9yU3R5bGVT
aGVldCA6IGluc3BlY3RvclN0eWxlU2hlZXRzKQotICAgICAgICBzdHlsZUluZm9zLT5hZGRJdGVt
KGluc3BlY3RvclN0eWxlU2hlZXQtPmJ1aWxkT2JqZWN0Rm9yU3R5bGVTaGVldEluZm8oKSk7Cisg
ICAgZm9yIChhdXRvKiBpbnNwZWN0b3JTdHlsZVNoZWV0IDogaW5zcGVjdG9yU3R5bGVTaGVldHMp
IHsKKyAgICAgICAgaWYgKGF1dG8gaGVhZGVyID0gaW5zcGVjdG9yU3R5bGVTaGVldC0+YnVpbGRP
YmplY3RGb3JTdHlsZVNoZWV0SW5mbygpKQorICAgICAgICAgICAgaGVhZGVycy0+YWRkSXRlbSho
ZWFkZXIucmVsZWFzZU5vbk51bGwoKSk7CisgICAgfQorCisgICAgcmV0dXJuIFdURk1vdmUoaGVh
ZGVycyk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmNvbGxlY3RBbGxTdHlsZVNoZWV0
cyhWZWN0b3I8SW5zcGVjdG9yU3R5bGVTaGVldCo+JiByZXN1bHQpCkBAIC01OTgsMTE2ICs2MDAs
MTI0IEBAIHZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmNvbGxlY3RTdHlsZVNoZWV0cyhDU1NTdHls
ZVNoZWV0KiBzdHlsZVNoZWV0LCBWZWN0b3I8Q1NTCiAgICAgfQogfQogCi12b2lkIEluc3BlY3Rv
ckNTU0FnZW50OjpnZXRTdHlsZVNoZWV0KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3Qg
U3RyaW5nJiBzdHlsZVNoZWV0SWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNT
U1N0eWxlU2hlZXRCb2R5PiYgc3R5bGVTaGVldE9iamVjdCkKK1Byb3RvY29sOjpFcnJvclN0cmlu
Z09yPFJlZjxQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZVNoZWV0Qm9keT4+IEluc3BlY3RvckNTU0Fn
ZW50OjpnZXRTdHlsZVNoZWV0KGNvbnN0IFByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRJZCYgc3R5
bGVTaGVldElkKQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwog
ICAgIEluc3BlY3RvclN0eWxlU2hlZXQqIGluc3BlY3RvclN0eWxlU2hlZXQgPSBhc3NlcnRTdHls
ZVNoZWV0Rm9ySWQoZXJyb3JTdHJpbmcsIHN0eWxlU2hlZXRJZCk7CiAgICAgaWYgKCFpbnNwZWN0
b3JTdHlsZVNoZWV0KQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBl
Y3RlZChlcnJvclN0cmluZyk7CiAKLSAgICBzdHlsZVNoZWV0T2JqZWN0ID0gaW5zcGVjdG9yU3R5
bGVTaGVldC0+YnVpbGRPYmplY3RGb3JTdHlsZVNoZWV0KCk7CisgICAgYXV0byBzdHlsZVNoZWV0
ID0gaW5zcGVjdG9yU3R5bGVTaGVldC0+YnVpbGRPYmplY3RGb3JTdHlsZVNoZWV0KCk7CisgICAg
aWYgKCFzdHlsZVNoZWV0KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkludGVybmFs
IGVycm9yOiBtaXNzaW5nIHN0eWxlIHNoZWV0Iik7CisKKyAgICByZXR1cm4gc3R5bGVTaGVldC5y
ZWxlYXNlTm9uTnVsbCgpOwogfQogCi12b2lkIEluc3BlY3RvckNTU0FnZW50OjpnZXRTdHlsZVNo
ZWV0VGV4dChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgc3R5bGVTaGVl
dElkLCBTdHJpbmcqIHJlc3VsdCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPFN0cmluZz4gSW5z
cGVjdG9yQ1NTQWdlbnQ6OmdldFN0eWxlU2hlZXRUZXh0KGNvbnN0IFByb3RvY29sOjpDU1M6OlN0
eWxlU2hlZXRJZCYgc3R5bGVTaGVldElkKQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBl
cnJvclN0cmluZzsKKwogICAgIEluc3BlY3RvclN0eWxlU2hlZXQqIGluc3BlY3RvclN0eWxlU2hl
ZXQgPSBhc3NlcnRTdHlsZVNoZWV0Rm9ySWQoZXJyb3JTdHJpbmcsIHN0eWxlU2hlZXRJZCk7CiAg
ICAgaWYgKCFpbnNwZWN0b3JTdHlsZVNoZWV0KQotICAgICAgICByZXR1cm47CisgICAgICAgIHJl
dHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAgICBhdXRvIHRleHQgPSBpbnNw
ZWN0b3JTdHlsZVNoZWV0LT50ZXh0KCk7Ci0gICAgaWYgKCF0ZXh0Lmhhc0V4Y2VwdGlvbigpKQot
ICAgICAgICAqcmVzdWx0ID0gdGV4dC5yZWxlYXNlUmV0dXJuVmFsdWUoKTsKKyAgICBpZiAodGV4
dC5oYXNFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEluc3BlY3Rv
ckRPTUFnZW50Ojp0b0Vycm9yU3RyaW5nKHRleHQucmVsZWFzZUV4Y2VwdGlvbigpKSk7CisKKyAg
ICByZXR1cm4gdGV4dC5yZWxlYXNlUmV0dXJuVmFsdWUoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JD
U1NBZ2VudDo6c2V0U3R5bGVTaGVldFRleHQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25z
dCBTdHJpbmcmIHN0eWxlU2hlZXRJZCwgY29uc3QgU3RyaW5nJiB0ZXh0KQorUHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yQ1NTQWdlbnQ6OnNldFN0eWxlU2hlZXRUZXh0KGNv
bnN0IFByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRJZCYgc3R5bGVTaGVldElkLCBjb25zdCBTdHJp
bmcmIHRleHQpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAg
ICAgSW5zcGVjdG9yU3R5bGVTaGVldCogaW5zcGVjdG9yU3R5bGVTaGVldCA9IGFzc2VydFN0eWxl
U2hlZXRGb3JJZChlcnJvclN0cmluZywgc3R5bGVTaGVldElkKTsKICAgICBpZiAoIWluc3BlY3Rv
clN0eWxlU2hlZXQpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVj
dGVkKGVycm9yU3RyaW5nKTsKIAogICAgIGF1dG8qIGRvbUFnZW50ID0gbV9pbnN0cnVtZW50aW5n
QWdlbnRzLnBlcnNpc3RlbnRET01BZ2VudCgpOwotICAgIGlmICghZG9tQWdlbnQpIHsKLSAgICAg
ICAgZXJyb3JTdHJpbmcgPSAiRE9NIGRvbWFpbiBtdXN0IGJlIGVuYWJsZWQiX3M7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9CisgICAgaWYgKCFkb21BZ2VudCkKKyAgICAgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKCJET00gZG9tYWluIG11c3QgYmUgZW5hYmxlZCJfcyk7CiAKICAgICBhdXRvIHJl
c3VsdCA9IGRvbUFnZW50LT5oaXN0b3J5KCktPnBlcmZvcm0obWFrZVVuaXF1ZTxTZXRTdHlsZVNo
ZWV0VGV4dEFjdGlvbj4oaW5zcGVjdG9yU3R5bGVTaGVldCwgdGV4dCkpOwogICAgIGlmIChyZXN1
bHQuaGFzRXhjZXB0aW9uKCkpCi0gICAgICAgIGVycm9yU3RyaW5nID0gSW5zcGVjdG9yRE9NQWdl
bnQ6OnRvRXJyb3JTdHJpbmcocmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKSk7CisgICAgICAgIHJl
dHVybiBtYWtlVW5leHBlY3RlZChJbnNwZWN0b3JET01BZ2VudDo6dG9FcnJvclN0cmluZyhyZXN1
bHQucmVsZWFzZUV4Y2VwdGlvbigpKSk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIElu
c3BlY3RvckNTU0FnZW50OjpzZXRTdHlsZVRleHQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBj
b25zdCBKU09OOjpPYmplY3QmIGZ1bGxTdHlsZUlkLCBjb25zdCBTdHJpbmcmIHRleHQsIFJlZlB0
cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlPiYgcmVzdWx0KQorUHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8UmVmPFByb3RvY29sOjpDU1M6OkNTU1N0eWxlPj4gSW5zcGVjdG9yQ1NT
QWdlbnQ6OnNldFN0eWxlVGV4dChSZWY8SlNPTjo6T2JqZWN0PiYmIHN0eWxlSWQsIGNvbnN0IFN0
cmluZyYgdGV4dCkKIHsKLSAgICBJbnNwZWN0b3JDU1NJZCBjb21wb3VuZElkKGZ1bGxTdHlsZUlk
KTsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKKyAgICBJbnNwZWN0
b3JDU1NJZCBjb21wb3VuZElkKHN0eWxlSWQpOwogICAgIEFTU0VSVCghY29tcG91bmRJZC5pc0Vt
cHR5KCkpOwogCiAgICAgSW5zcGVjdG9yU3R5bGVTaGVldCogaW5zcGVjdG9yU3R5bGVTaGVldCA9
IGFzc2VydFN0eWxlU2hlZXRGb3JJZChlcnJvclN0cmluZywgY29tcG91bmRJZC5zdHlsZVNoZWV0
SWQoKSk7CiAgICAgaWYgKCFpbnNwZWN0b3JTdHlsZVNoZWV0KQotICAgICAgICByZXR1cm47Cisg
ICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAgICBhdXRvKiBk
b21BZ2VudCA9IG1faW5zdHJ1bWVudGluZ0FnZW50cy5wZXJzaXN0ZW50RE9NQWdlbnQoKTsKLSAg
ICBpZiAoIWRvbUFnZW50KSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIkRPTSBkb21haW4gbXVz
dCBiZSBlbmFibGVkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghZG9tQWdl
bnQpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiRE9NIGRvbWFpbiBtdXN0IGJlIGVu
YWJsZWQiX3MpOwogCiAgICAgYXV0byBwZXJmb3JtUmVzdWx0ID0gZG9tQWdlbnQtPmhpc3Rvcnko
KS0+cGVyZm9ybShtYWtlVW5pcXVlPFNldFN0eWxlVGV4dEFjdGlvbj4oaW5zcGVjdG9yU3R5bGVT
aGVldCwgY29tcG91bmRJZCwgdGV4dCkpOwotICAgIGlmIChwZXJmb3JtUmVzdWx0Lmhhc0V4Y2Vw
dGlvbigpKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gSW5zcGVjdG9yRE9NQWdlbnQ6OnRvRXJy
b3JTdHJpbmcocGVyZm9ybVJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCkpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQorICAgIGlmIChwZXJmb3JtUmVzdWx0Lmhhc0V4Y2VwdGlvbigpKQorICAgICAg
ICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoSW5zcGVjdG9yRE9NQWdlbnQ6OnRvRXJyb3JTdHJpbmco
cGVyZm9ybVJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCkpKTsKIAotICAgIHJlc3VsdCA9IGluc3Bl
Y3RvclN0eWxlU2hlZXQtPmJ1aWxkT2JqZWN0Rm9yU3R5bGUoaW5zcGVjdG9yU3R5bGVTaGVldC0+
c3R5bGVGb3JJZChjb21wb3VuZElkKSk7CisgICAgcmV0dXJuIGluc3BlY3RvclN0eWxlU2hlZXQt
PmJ1aWxkT2JqZWN0Rm9yU3R5bGUoaW5zcGVjdG9yU3R5bGVTaGVldC0+c3R5bGVGb3JJZChjb21w
b3VuZElkKSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OnNldFJ1bGVTZWxlY3RvcihF
cnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IEpTT046Ok9iamVjdCYgZnVsbFJ1bGVJZCwg
Y29uc3QgU3RyaW5nJiBzZWxlY3RvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6
Q1NTUnVsZT4mIHJlc3VsdCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxQcm90b2NvbDo6
Q1NTOjpDU1NSdWxlPj4gSW5zcGVjdG9yQ1NTQWdlbnQ6OnNldFJ1bGVTZWxlY3RvcihSZWY8SlNP
Tjo6T2JqZWN0PiYmIHJ1bGVJZCwgY29uc3QgU3RyaW5nJiBzZWxlY3RvcikKIHsKLSAgICBJbnNw
ZWN0b3JDU1NJZCBjb21wb3VuZElkKGZ1bGxSdWxlSWQpOworICAgIFByb3RvY29sOjpFcnJvclN0
cmluZyBlcnJvclN0cmluZzsKKworICAgIEluc3BlY3RvckNTU0lkIGNvbXBvdW5kSWQocnVsZUlk
KTsKICAgICBBU1NFUlQoIWNvbXBvdW5kSWQuaXNFbXB0eSgpKTsKIAogICAgIEluc3BlY3RvclN0
eWxlU2hlZXQqIGluc3BlY3RvclN0eWxlU2hlZXQgPSBhc3NlcnRTdHlsZVNoZWV0Rm9ySWQoZXJy
b3JTdHJpbmcsIGNvbXBvdW5kSWQuc3R5bGVTaGVldElkKCkpOwogICAgIGlmICghaW5zcGVjdG9y
U3R5bGVTaGVldCkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0
ZWQoZXJyb3JTdHJpbmcpOwogCiAgICAgYXV0byogZG9tQWdlbnQgPSBtX2luc3RydW1lbnRpbmdB
Z2VudHMucGVyc2lzdGVudERPTUFnZW50KCk7Ci0gICAgaWYgKCFkb21BZ2VudCkgewotICAgICAg
ICBlcnJvclN0cmluZyA9ICJET00gZG9tYWluIG11c3QgYmUgZW5hYmxlZCJfczsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KKyAgICBpZiAoIWRvbUFnZW50KQorICAgICAgICByZXR1cm4gbWFrZVVu
ZXhwZWN0ZWQoIkRPTSBkb21haW4gbXVzdCBiZSBlbmFibGVkIl9zKTsKIAogICAgIGF1dG8gcGVy
Zm9ybVJlc3VsdCA9IGRvbUFnZW50LT5oaXN0b3J5KCktPnBlcmZvcm0obWFrZVVuaXF1ZTxTZXRS
dWxlU2VsZWN0b3JBY3Rpb24+KGluc3BlY3RvclN0eWxlU2hlZXQsIGNvbXBvdW5kSWQsIHNlbGVj
dG9yKSk7Ci0gICAgaWYgKHBlcmZvcm1SZXN1bHQuaGFzRXhjZXB0aW9uKCkpIHsKLSAgICAgICAg
ZXJyb3JTdHJpbmcgPSBJbnNwZWN0b3JET01BZ2VudDo6dG9FcnJvclN0cmluZyhwZXJmb3JtUmVz
dWx0LnJlbGVhc2VFeGNlcHRpb24oKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYg
KHBlcmZvcm1SZXN1bHQuaGFzRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBl
Y3RlZChJbnNwZWN0b3JET01BZ2VudDo6dG9FcnJvclN0cmluZyhwZXJmb3JtUmVzdWx0LnJlbGVh
c2VFeGNlcHRpb24oKSkpOwogCi0gICAgcmVzdWx0ID0gaW5zcGVjdG9yU3R5bGVTaGVldC0+YnVp
bGRPYmplY3RGb3JSdWxlKGluc3BlY3RvclN0eWxlU2hlZXQtPnJ1bGVGb3JJZChjb21wb3VuZElk
KSk7CisgICAgYXV0byBydWxlID0gaW5zcGVjdG9yU3R5bGVTaGVldC0+YnVpbGRPYmplY3RGb3JS
dWxlKGluc3BlY3RvclN0eWxlU2hlZXQtPnJ1bGVGb3JJZChjb21wb3VuZElkKSk7CisgICAgaWYg
KCFydWxlKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkludGVybmFsIGVycm9yOiBt
aXNzaW5nIHN0eWxlIHNoZWV0Iik7CisKKyAgICByZXR1cm4gcnVsZS5yZWxlYXNlTm9uTnVsbCgp
OwogfQogCi12b2lkIEluc3BlY3RvckNTU0FnZW50OjpjcmVhdGVTdHlsZVNoZWV0KEVycm9yU3Ry
aW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBTdHJpbmcqIHN0eWxlU2hl
ZXRJZCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPFByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRJ
ZD4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmNyZWF0ZVN0eWxlU2hlZXQoY29uc3QgUHJvdG9jb2w6Ok5l
dHdvcms6OkZyYW1lSWQmIGZyYW1lSWQpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVy
cm9yU3RyaW5nOworCiAgICAgYXV0byogcGFnZUFnZW50ID0gbV9pbnN0cnVtZW50aW5nQWdlbnRz
LmVuYWJsZWRQYWdlQWdlbnQoKTsKLSAgICBpZiAoIXBhZ2VBZ2VudCkgewotICAgICAgICBlcnJv
clN0cmluZyA9ICJQYWdlIGRvbWFpbiBtdXN0IGJlIGVuYWJsZWQiX3M7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9CisgICAgaWYgKCFwYWdlQWdlbnQpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBl
Y3RlZCgiUGFnZSBkb21haW4gbXVzdCBiZSBlbmFibGVkIl9zKTsKIAogICAgIGF1dG8qIGZyYW1l
ID0gcGFnZUFnZW50LT5hc3NlcnRGcmFtZShlcnJvclN0cmluZywgZnJhbWVJZCk7CiAgICAgaWYg
KCFmcmFtZSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQo
ZXJyb3JTdHJpbmcpOwogCiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gZnJhbWUtPmRvY3VtZW50
KCk7Ci0gICAgaWYgKCFkb2N1bWVudCkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5n
IGRvY3VtZW50IG9mIGZyYW1lIGZvciBnaXZlbiBmcmFtZUlkIl9zOwotICAgICAgICByZXR1cm47
Ci0gICAgfQorICAgIGlmICghZG9jdW1lbnQpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3Rl
ZCgiTWlzc2luZyBkb2N1bWVudCBvZiBmcmFtZSBmb3IgZ2l2ZW4gZnJhbWVJZCJfcyk7CiAKICAg
ICBJbnNwZWN0b3JTdHlsZVNoZWV0KiBpbnNwZWN0b3JTdHlsZVNoZWV0ID0gY3JlYXRlSW5zcGVj
dG9yU3R5bGVTaGVldEZvckRvY3VtZW50KCpkb2N1bWVudCk7Ci0gICAgaWYgKCFpbnNwZWN0b3JT
dHlsZVNoZWV0KSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIkNvdWxkIG5vdCBjcmVhdGUgc3R5
bGUgc2hlZXQgZm9yIGRvY3VtZW50IG9mIGZyYW1lIGZvciBnaXZlbiBmcmFtZUlkIl9zOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghaW5zcGVjdG9yU3R5bGVTaGVldCkKKyAgICAg
ICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJDb3VsZCBub3QgY3JlYXRlIHN0eWxlIHNoZWV0IGZv
ciBkb2N1bWVudCBvZiBmcmFtZSBmb3IgZ2l2ZW4gZnJhbWVJZCJfcyk7CiAKLSAgICAqc3R5bGVT
aGVldElkID0gaW5zcGVjdG9yU3R5bGVTaGVldC0+aWQoKTsKKyAgICByZXR1cm4gaW5zcGVjdG9y
U3R5bGVTaGVldC0+aWQoKTsKIH0KIAogSW5zcGVjdG9yU3R5bGVTaGVldCogSW5zcGVjdG9yQ1NT
QWdlbnQ6OmNyZWF0ZUluc3BlY3RvclN0eWxlU2hlZXRGb3JEb2N1bWVudChEb2N1bWVudCYgZG9j
dW1lbnQpCkBAIC03NTEsNDEgKzc2MSw0MiBAQCBJbnNwZWN0b3JTdHlsZVNoZWV0KiBJbnNwZWN0
b3JDU1NBZ2VudDo6Y3JlYXRlSW5zcGVjdG9yU3R5bGVTaGVldEZvckRvY3VtZW50KERvYwogICAg
IHJldHVybiBpbnNwZWN0b3JTdHlsZVNoZWV0c0ZvckRvY3VtZW50Lmxhc3QoKS5nZXQoKTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6YWRkUnVsZShFcnJvclN0cmluZyYgZXJyb3JTdHJp
bmcsIGNvbnN0IFN0cmluZyYgc3R5bGVTaGVldElkLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yLCBS
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NSdWxlPiYgcmVzdWx0KQorUHJvdG9j
b2w6OkVycm9yU3RyaW5nT3I8UmVmPFByb3RvY29sOjpDU1M6OkNTU1J1bGU+PiBJbnNwZWN0b3JD
U1NBZ2VudDo6YWRkUnVsZShjb25zdCBQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0SWQmIHN0eWxl
U2hlZXRJZCwgY29uc3QgU3RyaW5nJiBzZWxlY3RvcikKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JT
dHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBJbnNwZWN0b3JTdHlsZVNoZWV0KiBpbnNwZWN0b3JT
dHlsZVNoZWV0ID0gYXNzZXJ0U3R5bGVTaGVldEZvcklkKGVycm9yU3RyaW5nLCBzdHlsZVNoZWV0
SWQpOwogICAgIGlmICghaW5zcGVjdG9yU3R5bGVTaGVldCkKLSAgICAgICAgcmV0dXJuOworICAg
ICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCiAgICAgYXV0byogZG9t
QWdlbnQgPSBtX2luc3RydW1lbnRpbmdBZ2VudHMucGVyc2lzdGVudERPTUFnZW50KCk7Ci0gICAg
aWYgKCFkb21BZ2VudCkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJET00gZG9tYWluIG11c3Qg
YmUgZW5hYmxlZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoIWRvbUFnZW50
KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkRPTSBkb21haW4gbXVzdCBiZSBlbmFi
bGVkIl9zKTsKIAogICAgIGF1dG8gYWN0aW9uID0gbWFrZVVuaXF1ZTxBZGRSdWxlQWN0aW9uPihp
bnNwZWN0b3JTdHlsZVNoZWV0LCBzZWxlY3Rvcik7CiAgICAgYXV0byYgcmF3QWN0aW9uID0gKmFj
dGlvbjsKICAgICBhdXRvIHBlcmZvcm1SZXN1bHQgPSBkb21BZ2VudC0+aGlzdG9yeSgpLT5wZXJm
b3JtKFdURk1vdmUoYWN0aW9uKSk7Ci0gICAgaWYgKHBlcmZvcm1SZXN1bHQuaGFzRXhjZXB0aW9u
KCkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSBJbnNwZWN0b3JET01BZ2VudDo6dG9FcnJvclN0
cmluZyhwZXJmb3JtUmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKSk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9CisgICAgaWYgKHBlcmZvcm1SZXN1bHQuaGFzRXhjZXB0aW9uKCkpCisgICAgICAgIHJl
dHVybiBtYWtlVW5leHBlY3RlZChJbnNwZWN0b3JET01BZ2VudDo6dG9FcnJvclN0cmluZyhwZXJm
b3JtUmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKSkpOwogCi0gICAgSW5zcGVjdG9yQ1NTSWQgcnVs
ZUlkID0gcmF3QWN0aW9uLm5ld1J1bGVJZCgpOwotICAgIENTU1N0eWxlUnVsZSogcnVsZSA9IGlu
c3BlY3RvclN0eWxlU2hlZXQtPnJ1bGVGb3JJZChydWxlSWQpOwotICAgIHJlc3VsdCA9IGluc3Bl
Y3RvclN0eWxlU2hlZXQtPmJ1aWxkT2JqZWN0Rm9yUnVsZShydWxlKTsKKyAgICBhdXRvIHJ1bGUg
PSBpbnNwZWN0b3JTdHlsZVNoZWV0LT5idWlsZE9iamVjdEZvclJ1bGUoaW5zcGVjdG9yU3R5bGVT
aGVldC0+cnVsZUZvcklkKHJhd0FjdGlvbi5uZXdSdWxlSWQoKSkpOworICAgIGlmICghcnVsZSkK
KyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJJbnRlcm5hbCBlcnJvcjogbWlzc2luZyBz
dHlsZSBzaGVldCIpOworCisgICAgcmV0dXJuIHJ1bGUucmVsZWFzZU5vbk51bGwoKTsKIH0KIAot
dm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0U3VwcG9ydGVkQ1NTUHJvcGVydGllcyhFcnJvclN0
cmluZyYsIFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NT
UHJvcGVydHlJbmZvPj4mIGNzc1Byb3BlcnRpZXMpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxS
ZWY8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6Q1NTOjpDU1NQcm9wZXJ0eUluZm8+Pj4gSW5zcGVj
dG9yQ1NTQWdlbnQ6OmdldFN1cHBvcnRlZENTU1Byb3BlcnRpZXMoKQogewotICAgIGF1dG8gcHJv
cGVydGllcyA9IEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NQcm9w
ZXJ0eUluZm8+OjpjcmVhdGUoKTsKKyAgICBhdXRvIGNzc1Byb3BlcnRpZXMgPSBKU09OOjpBcnJh
eU9mPFByb3RvY29sOjpDU1M6OkNTU1Byb3BlcnR5SW5mbz46OmNyZWF0ZSgpOworCiAgICAgZm9y
IChpbnQgaSA9IGZpcnN0Q1NTUHJvcGVydHk7IGkgPD0gbGFzdENTU1Byb3BlcnR5OyArK2kpIHsK
ICAgICAgICAgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlEID0gY29udmVydFRvQ1NTUHJvcGVydHlJ
RChpKTsKICAgICAgICAgLy8gRklYTUU6IFNob3VsZCB0YWtlIGFjY291bnQgZm9yIGZsYWdzIGlu
IHNldHRpbmdzKCkuCiAgICAgICAgIGlmIChpc0ludGVybmFsQ1NTUHJvcGVydHkocHJvcGVydHlJ
RCkgfHwgIWlzRW5hYmxlZENTU1Byb3BlcnR5KHByb3BlcnR5SUQpKQogICAgICAgICAgICAgY29u
dGludWU7CiAKLSAgICAgICAgYXV0byBwcm9wZXJ0eSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNT
Uzo6Q1NTUHJvcGVydHlJbmZvOjpjcmVhdGUoKQorICAgICAgICBhdXRvIHByb3BlcnR5ID0gUHJv
dG9jb2w6OkNTUzo6Q1NTUHJvcGVydHlJbmZvOjpjcmVhdGUoKQogICAgICAgICAgICAgLnNldE5h
bWUoZ2V0UHJvcGVydHlOYW1lU3RyaW5nKHByb3BlcnR5SUQpKQogICAgICAgICAgICAgLnJlbGVh
c2UoKTsKIApAQCAtODIxLDYzICs4MzIsNjYgQEAgdm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0
U3VwcG9ydGVkQ1NTUHJvcGVydGllcyhFcnJvclN0cmluZyYsIFJlZlB0cjxKU09OOjpBcnIKICAg
ICAgICAgaWYgKENTU1Byb3BlcnR5Ojppc0luaGVyaXRlZFByb3BlcnR5KHByb3BlcnR5SUQpKQog
ICAgICAgICAgICAgcHJvcGVydHktPnNldEluaGVyaXRlZCh0cnVlKTsKIAotICAgICAgICBwcm9w
ZXJ0aWVzLT5hZGRJdGVtKFdURk1vdmUocHJvcGVydHkpKTsKKyAgICAgICAgY3NzUHJvcGVydGll
cy0+YWRkSXRlbShXVEZNb3ZlKHByb3BlcnR5KSk7CiAgICAgfQotICAgIGNzc1Byb3BlcnRpZXMg
PSBXVEZNb3ZlKHByb3BlcnRpZXMpOworCisgICAgcmV0dXJuIFdURk1vdmUoY3NzUHJvcGVydGll
cyk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldFN1cHBvcnRlZFN5c3RlbUZvbnRG
YW1pbHlOYW1lcyhFcnJvclN0cmluZyYsIFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+JiBm
b250RmFtaWx5TmFtZXMpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SlNPTjo6QXJyYXlP
ZjxTdHJpbmc+Pj4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldFN1cHBvcnRlZFN5c3RlbUZvbnRGYW1p
bHlOYW1lcygpCiB7Ci0gICAgYXV0byBmYW1pbGllcyA9IEpTT046OkFycmF5T2Y8U3RyaW5nPjo6
Y3JlYXRlKCk7CisgICAgYXV0byBmb250RmFtaWx5TmFtZXMgPSBKU09OOjpBcnJheU9mPFN0cmlu
Zz46OmNyZWF0ZSgpOwogCiAgICAgVmVjdG9yPFN0cmluZz4gc3lzdGVtRm9udEZhbWlsaWVzID0g
Rm9udENhY2hlOjpzaW5nbGV0b24oKS5zeXN0ZW1Gb250RmFtaWxpZXMoKTsKICAgICBmb3IgKGNv
bnN0IGF1dG8mIGZhbWlseU5hbWUgOiBzeXN0ZW1Gb250RmFtaWxpZXMpCi0gICAgICAgIGZhbWls
aWVzLT5hZGRJdGVtKGZhbWlseU5hbWUpOworICAgICAgICBmb250RmFtaWx5TmFtZXMtPmFkZEl0
ZW0oZmFtaWx5TmFtZSk7CiAKLSAgICBmb250RmFtaWx5TmFtZXMgPSBXVEZNb3ZlKGZhbWlsaWVz
KTsKKyAgICByZXR1cm4gV1RGTW92ZShmb250RmFtaWx5TmFtZXMpOwogfQogCi12b2lkIEluc3Bl
Y3RvckNTU0FnZW50Ojpmb3JjZVBzZXVkb1N0YXRlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywg
aW50IG5vZGVJZCwgY29uc3QgSlNPTjo6QXJyYXkmIGZvcmNlZFBzZXVkb0NsYXNzZXMpCitQcm90
b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JDU1NBZ2VudDo6Zm9yY2VQc2V1ZG9T
dGF0ZShQcm90b2NvbDo6RE9NOjpOb2RlSWQgbm9kZUlkLCBSZWY8SlNPTjo6QXJyYXk+JiYgZm9y
Y2VkUHNldWRvQ2xhc3NlcykKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJp
bmc7CisKICAgICBhdXRvKiBkb21BZ2VudCA9IG1faW5zdHJ1bWVudGluZ0FnZW50cy5wZXJzaXN0
ZW50RE9NQWdlbnQoKTsKLSAgICBpZiAoIWRvbUFnZW50KSB7Ci0gICAgICAgIGVycm9yU3RyaW5n
ID0gIkRPTSBkb21haW4gbXVzdCBiZSBlbmFibGVkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAg
fQorICAgIGlmICghZG9tQWdlbnQpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiRE9N
IGRvbWFpbiBtdXN0IGJlIGVuYWJsZWQiX3MpOwogCiAgICAgRWxlbWVudCogZWxlbWVudCA9IGRv
bUFnZW50LT5hc3NlcnRFbGVtZW50KGVycm9yU3RyaW5nLCBub2RlSWQpOwogICAgIGlmICghZWxl
bWVudCkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJy
b3JTdHJpbmcpOwogCiAgICAgLy8gUmV0dXJuIGVhcmx5IGlmIHRoZSBmb3JjZWQgcHNldWRvIHN0
YXRlIHdhcyBhbHJlYWR5IHNldCBjb3JyZWN0bHkuCiAgICAgdW5zaWduZWQgZm9yY2VkUHNldWRv
U3RhdGUgPSBjb21wdXRlUHNldWRvQ2xhc3NNYXNrKGZvcmNlZFBzZXVkb0NsYXNzZXMpOwogICAg
IGlmIChmb3JjZWRQc2V1ZG9TdGF0ZSkgewogICAgICAgICBhdXRvIGl0ZXJhdG9yID0gbV9ub2Rl
SWRUb0ZvcmNlZFBzZXVkb1N0YXRlLmFkZChub2RlSWQsIDApLml0ZXJhdG9yOwogICAgICAgICBp
ZiAoZm9yY2VkUHNldWRvU3RhdGUgPT0gaXRlcmF0b3ItPnZhbHVlKQotICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAgICAgaXRlcmF0b3ItPnZhbHVlID0g
Zm9yY2VkUHNldWRvU3RhdGU7CiAgICAgICAgIG1fZG9jdW1lbnRzV2l0aEZvcmNlZFBzZXVkb1N0
YXRlcy5hZGQoJmVsZW1lbnQtPmRvY3VtZW50KCkpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGlm
ICghbV9ub2RlSWRUb0ZvcmNlZFBzZXVkb1N0YXRlLnJlbW92ZShub2RlSWQpKQotICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgcmV0dXJuIHsgfTsKICAgICAgICAgaWYgKG1fbm9kZUlk
VG9Gb3JjZWRQc2V1ZG9TdGF0ZS5pc0VtcHR5KCkpCiAgICAgICAgICAgICBtX2RvY3VtZW50c1dp
dGhGb3JjZWRQc2V1ZG9TdGF0ZXMuY2xlYXIoKTsKICAgICB9CiAKICAgICBlbGVtZW50LT5kb2N1
bWVudCgpLnN0eWxlU2NvcGUoKS5kaWRDaGFuZ2VTdHlsZVNoZWV0RW52aXJvbm1lbnQoKTsKKwor
ICAgIHJldHVybiB7IH07CiB9CiAKIEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZSYg
SW5zcGVjdG9yQ1NTQWdlbnQ6OmFzSW5zcGVjdG9yU3R5bGVTaGVldChTdHlsZWRFbGVtZW50JiBl
bGVtZW50KQogewogICAgIHJldHVybiBtX25vZGVUb0luc3BlY3RvclN0eWxlU2hlZXQuZW5zdXJl
KCZlbGVtZW50LCBbdGhpcywgJmVsZW1lbnRdIHsKICAgICAgICAgU3RyaW5nIG5ld1N0eWxlU2hl
ZXRJZCA9IFN0cmluZzo6bnVtYmVyKG1fbGFzdFN0eWxlU2hlZXRJZCsrKTsKLSAgICAgICAgYXV0
byBpbnNwZWN0b3JTdHlsZVNoZWV0ID0gSW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxl
OjpjcmVhdGUobV9pbnN0cnVtZW50aW5nQWdlbnRzLmVuYWJsZWRQYWdlQWdlbnQoKSwgbmV3U3R5
bGVTaGVldElkLCBlbGVtZW50LCBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRP
cmlnaW46OkF1dGhvciwgdGhpcyk7CisgICAgICAgIGF1dG8gaW5zcGVjdG9yU3R5bGVTaGVldCA9
IEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZTo6Y3JlYXRlKG1faW5zdHJ1bWVudGlu
Z0FnZW50cy5lbmFibGVkUGFnZUFnZW50KCksIG5ld1N0eWxlU2hlZXRJZCwgZWxlbWVudCwgUHJv
dG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6QXV0aG9yLCB0aGlzKTsKICAgICAgICAgbV9p
ZFRvSW5zcGVjdG9yU3R5bGVTaGVldC5zZXQobmV3U3R5bGVTaGVldElkLCBpbnNwZWN0b3JTdHls
ZVNoZWV0LmNvcHlSZWYoKSk7CiAgICAgICAgIHJldHVybiBpbnNwZWN0b3JTdHlsZVNoZWV0Owog
ICAgIH0pLml0ZXJhdG9yLT52YWx1ZTsKIH0KIAotRWxlbWVudCogSW5zcGVjdG9yQ1NTQWdlbnQ6
OmVsZW1lbnRGb3JJZChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQpCitFbGVt
ZW50KiBJbnNwZWN0b3JDU1NBZ2VudDo6ZWxlbWVudEZvcklkKFByb3RvY29sOjpFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcsIFByb3RvY29sOjpET006Ok5vZGVJZCBub2RlSWQpCiB7CiAgICAgYXV0
byogZG9tQWdlbnQgPSBtX2luc3RydW1lbnRpbmdBZ2VudHMucGVyc2lzdGVudERPTUFnZW50KCk7
CiAgICAgaWYgKCFkb21BZ2VudCkgewpAQCAtOTE0LDcgKzkyOCw3IEBAIEluc3BlY3RvclN0eWxl
U2hlZXQqIEluc3BlY3RvckNTU0FnZW50OjpiaW5kU3R5bGVTaGVldChDU1NTdHlsZVNoZWV0KiBz
dHlsZVNoZWV0CiAgICAgcmV0dXJuIGluc3BlY3RvclN0eWxlU2hlZXQuZ2V0KCk7CiB9CiAKLUlu
c3BlY3RvclN0eWxlU2hlZXQqIEluc3BlY3RvckNTU0FnZW50Ojphc3NlcnRTdHlsZVNoZWV0Rm9y
SWQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHN0eWxlU2hlZXRJZCkK
K0luc3BlY3RvclN0eWxlU2hlZXQqIEluc3BlY3RvckNTU0FnZW50Ojphc3NlcnRTdHlsZVNoZWV0
Rm9ySWQoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBz
dHlsZVNoZWV0SWQpCiB7CiAgICAgSWRUb0luc3BlY3RvclN0eWxlU2hlZXQ6Oml0ZXJhdG9yIGl0
ID0gbV9pZFRvSW5zcGVjdG9yU3R5bGVTaGVldC5maW5kKHN0eWxlU2hlZXRJZCk7CiAgICAgaWYg
KGl0ID09IG1faWRUb0luc3BlY3RvclN0eWxlU2hlZXQuZW5kKCkpIHsKQEAgLTkyNCwyOSArOTM4
LDI5IEBAIEluc3BlY3RvclN0eWxlU2hlZXQqIEluc3BlY3RvckNTU0FnZW50Ojphc3NlcnRTdHls
ZVNoZWV0Rm9ySWQoRXJyb3JTdHJpbmcmIGVycm9yCiAgICAgcmV0dXJuIGl0LT52YWx1ZS5nZXQo
KTsKIH0KIAotSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luIEluc3Bl
Y3RvckNTU0FnZW50OjpkZXRlY3RPcmlnaW4oQ1NTU3R5bGVTaGVldCogcGFnZVN0eWxlU2hlZXQs
IERvY3VtZW50KiBvd25lckRvY3VtZW50KQorUHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdp
biBJbnNwZWN0b3JDU1NBZ2VudDo6ZGV0ZWN0T3JpZ2luKENTU1N0eWxlU2hlZXQqIHBhZ2VTdHls
ZVNoZWV0LCBEb2N1bWVudCogb3duZXJEb2N1bWVudCkKIHsKICAgICBpZiAobV9jcmVhdGluZ1Zp
YUluc3BlY3RvclN0eWxlU2hlZXQpCi0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29s
OjpDU1M6OlN0eWxlU2hlZXRPcmlnaW46Okluc3BlY3RvcjsKKyAgICAgICAgcmV0dXJuIFByb3Rv
Y29sOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW46Okluc3BlY3RvcjsKIAogICAgIGlmIChwYWdlU3R5
bGVTaGVldCAmJiAhcGFnZVN0eWxlU2hlZXQtPm93bmVyTm9kZSgpICYmIHBhZ2VTdHlsZVNoZWV0
LT5ocmVmKCkuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6
Q1NTOjpTdHlsZVNoZWV0T3JpZ2luOjpVc2VyQWdlbnQ7CisgICAgICAgIHJldHVybiBQcm90b2Nv
bDo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luOjpVc2VyQWdlbnQ7CiAKICAgICBpZiAocGFnZVN0eWxl
U2hlZXQgJiYgcGFnZVN0eWxlU2hlZXQtPmNvbnRlbnRzKCkuaXNVc2VyU3R5bGVTaGVldCgpKQot
ICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2lu
OjpVc2VyOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6
VXNlcjsKIAogICAgIGF1dG8gaXRlcmF0b3IgPSBtX2RvY3VtZW50VG9JbnNwZWN0b3JTdHlsZVNo
ZWV0LmZpbmQob3duZXJEb2N1bWVudCk7CiAgICAgaWYgKGl0ZXJhdG9yICE9IG1fZG9jdW1lbnRU
b0luc3BlY3RvclN0eWxlU2hlZXQuZW5kKCkpIHsKICAgICAgICAgZm9yIChhdXRvJiBpbnNwZWN0
b3JTdHlsZVNoZWV0IDogaXRlcmF0b3ItPnZhbHVlKSB7CiAgICAgICAgICAgICBpZiAocGFnZVN0
eWxlU2hlZXQgPT0gaW5zcGVjdG9yU3R5bGVTaGVldC0+cGFnZVN0eWxlU2hlZXQoKSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0T3Jp
Z2luOjpJbnNwZWN0b3I7CisgICAgICAgICAgICAgICAgcmV0dXJuIFByb3RvY29sOjpDU1M6OlN0
eWxlU2hlZXRPcmlnaW46Okluc3BlY3RvcjsKICAgICAgICAgfQogICAgIH0KIAotICAgIHJldHVy
biBJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlN0eWxlU2hlZXRPcmlnaW46OkF1dGhvcjsKKyAg
ICByZXR1cm4gUHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldE9yaWdpbjo6QXV0aG9yOwogfQogCi1S
ZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NSdWxlPiBJbnNwZWN0b3JDU1NBZ2Vu
dDo6YnVpbGRPYmplY3RGb3JSdWxlKGNvbnN0IFN0eWxlUnVsZSogc3R5bGVSdWxlLCBTdHlsZTo6
UmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIEVsZW1lbnQmIGVsZW1lbnQpCitSZWZQdHI8UHJvdG9j
b2w6OkNTUzo6Q1NTUnVsZT4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yUnVsZShj
b25zdCBTdHlsZVJ1bGUqIHN0eWxlUnVsZSwgU3R5bGU6OlJlc29sdmVyJiBzdHlsZVJlc29sdmVy
LCBFbGVtZW50JiBlbGVtZW50KQogewogICAgIGlmICghc3R5bGVSdWxlKQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKQEAgLTk2OCw3ICs5ODIsNyBAQCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6Q1NTOjpDU1NSdWxlPiBJbnNwZWN0b3JDU1NBZ2VudDo6YnVpbGRPYmplY3RGb3JSdWxlKAog
ICAgIHJldHVybiBpbnNwZWN0b3JTdHlsZVNoZWV0ID8gaW5zcGVjdG9yU3R5bGVTaGVldC0+YnVp
bGRPYmplY3RGb3JSdWxlKGNzc29tV3JhcHBlcikgOiBudWxscHRyOwogfQogCi1SZWZQdHI8SW5z
cGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NSdWxlPiBJbnNwZWN0b3JDU1NBZ2VudDo6YnVpbGRP
YmplY3RGb3JSdWxlKENTU1N0eWxlUnVsZSogcnVsZSkKK1JlZlB0cjxQcm90b2NvbDo6Q1NTOjpD
U1NSdWxlPiBJbnNwZWN0b3JDU1NBZ2VudDo6YnVpbGRPYmplY3RGb3JSdWxlKENTU1N0eWxlUnVs
ZSogcnVsZSkKIHsKICAgICBpZiAoIXJ1bGUpCiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAt
OTc4LDE2ICs5OTIsMTYgQEAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUnVs
ZT4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yUnVsZSgKICAgICByZXR1cm4gaW5z
cGVjdG9yU3R5bGVTaGVldCA/IGluc3BlY3RvclN0eWxlU2hlZXQtPmJ1aWxkT2JqZWN0Rm9yUnVs
ZShydWxlKSA6IG51bGxwdHI7CiB9CiAKLVJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkNTUzo6UnVsZU1hdGNoPj4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmJ1aWxkQXJyYXlG
b3JNYXRjaGVkUnVsZUxpc3QoY29uc3QgVmVjdG9yPFJlZlB0cjxjb25zdCBTdHlsZVJ1bGU+PiYg
bWF0Y2hlZFJ1bGVzLCBTdHlsZTo6UmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIEVsZW1lbnQmIGVs
ZW1lbnQsIFBzZXVkb0lkIHBzZXVkb0lkKQorUmVmPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkNT
Uzo6UnVsZU1hdGNoPj4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmJ1aWxkQXJyYXlGb3JNYXRjaGVkUnVs
ZUxpc3QoY29uc3QgVmVjdG9yPFJlZlB0cjxjb25zdCBTdHlsZVJ1bGU+PiYgbWF0Y2hlZFJ1bGVz
LCBTdHlsZTo6UmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIEVsZW1lbnQmIGVsZW1lbnQsIFBzZXVk
b0lkIHBzZXVkb0lkKQogewotICAgIGF1dG8gcmVzdWx0ID0gSlNPTjo6QXJyYXlPZjxJbnNwZWN0
b3I6OlByb3RvY29sOjpDU1M6OlJ1bGVNYXRjaD46OmNyZWF0ZSgpOworICAgIGF1dG8gcmVzdWx0
ID0gSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6Q1NTOjpSdWxlTWF0Y2g+OjpjcmVhdGUoKTsKIAog
ICAgIFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdDb250ZXh0IGNvbnRleHQoU2VsZWN0b3JDaGVj
a2VyOjpNb2RlOjpDb2xsZWN0aW5nUnVsZXMpOwogICAgIGNvbnRleHQucHNldWRvSWQgPSBwc2V1
ZG9JZCAhPSBQc2V1ZG9JZDo6Tm9uZSA/IHBzZXVkb0lkIDogZWxlbWVudC5wc2V1ZG9JZCgpOwog
ICAgIFNlbGVjdG9yQ2hlY2tlciBzZWxlY3RvckNoZWNrZXIoZWxlbWVudC5kb2N1bWVudCgpKTsK
IAogICAgIGZvciAoYXV0byYgbWF0Y2hlZFJ1bGUgOiBtYXRjaGVkUnVsZXMpIHsKLSAgICAgICAg
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUnVsZT4gcnVsZU9iamVjdCA9IGJ1
aWxkT2JqZWN0Rm9yUnVsZShtYXRjaGVkUnVsZS5nZXQoKSwgc3R5bGVSZXNvbHZlciwgZWxlbWVu
dCk7CisgICAgICAgIFJlZlB0cjxQcm90b2NvbDo6Q1NTOjpDU1NSdWxlPiBydWxlT2JqZWN0ID0g
YnVpbGRPYmplY3RGb3JSdWxlKG1hdGNoZWRSdWxlLmdldCgpLCBzdHlsZVJlc29sdmVyLCBlbGVt
ZW50KTsKICAgICAgICAgaWYgKCFydWxlT2JqZWN0KQogICAgICAgICAgICAgY29udGludWU7CiAK
QEAgLTEwMDEsOCArMTAxNSw4IEBAIFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkNTUzo6UnVsZU1hdGNoPj4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmJ1CiAgICAgICAgICAg
ICArK2luZGV4OwogICAgICAgICB9CiAKLSAgICAgICAgYXV0byBtYXRjaCA9IEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkNTUzo6UnVsZU1hdGNoOjpjcmVhdGUoKQotICAgICAgICAgICAgLnNldFJ1bGUo
V1RGTW92ZShydWxlT2JqZWN0KSkKKyAgICAgICAgYXV0byBtYXRjaCA9IFByb3RvY29sOjpDU1M6
OlJ1bGVNYXRjaDo6Y3JlYXRlKCkKKyAgICAgICAgICAgIC5zZXRSdWxlKHJ1bGVPYmplY3QucmVs
ZWFzZU5vbk51bGwoKSkKICAgICAgICAgICAgIC5zZXRNYXRjaGluZ1NlbGVjdG9ycyhXVEZNb3Zl
KG1hdGNoaW5nU2VsZWN0b3JzKSkKICAgICAgICAgICAgIC5yZWxlYXNlKCk7CiAgICAgICAgIHJl
c3VsdC0+YWRkSXRlbShXVEZNb3ZlKG1hdGNoKSk7CkBAIC0xMDExLDcgKzEwMjUsNyBAQCBSZWZQ
dHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OlJ1bGVNYXRjaD4+IElu
c3BlY3RvckNTU0FnZW50OjpidQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLVJlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlPiBJbnNwZWN0b3JDU1NBZ2VudDo6YnVpbGRP
YmplY3RGb3JBdHRyaWJ1dGVzU3R5bGUoU3R5bGVkRWxlbWVudCYgZWxlbWVudCkKK1JlZlB0cjxQ
cm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9y
QXR0cmlidXRlc1N0eWxlKFN0eWxlZEVsZW1lbnQmIGVsZW1lbnQpCiB7CiAgICAgLy8gRklYTUU6
IFVnbGluZXNzIGJlbG93LgogICAgIGF1dG8qIGF0dHJpYnV0ZVN0eWxlID0gY29uc3RfY2FzdDxT
dHlsZVByb3BlcnRpZXMqPihlbGVtZW50LnByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKCkpOwpA
QCAtMTAyMyw3ICsxMDM3LDcgQEAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NT
U3R5bGU+IEluc3BlY3RvckNTU0FnZW50OjpidWlsZE9iamVjdEZvckF0dHIKICAgICByZXR1cm4g
aW5zcGVjdG9yU3R5bGUtPmJ1aWxkT2JqZWN0Rm9yU3R5bGUoKTsKIH0KIAotdm9pZCBJbnNwZWN0
b3JDU1NBZ2VudDo6ZGlkUmVtb3ZlRE9NTm9kZShOb2RlJiBub2RlLCBpbnQgbm9kZUlkKQordm9p
ZCBJbnNwZWN0b3JDU1NBZ2VudDo6ZGlkUmVtb3ZlRE9NTm9kZShOb2RlJiBub2RlLCBQcm90b2Nv
bDo6RE9NOjpOb2RlSWQgbm9kZUlkKQogewogICAgIG1fbm9kZUlkVG9Gb3JjZWRQc2V1ZG9TdGF0
ZS5yZW1vdmUobm9kZUlkKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2FnZW50cy9JbnNwZWN0b3JDU1NBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Fn
ZW50cy9JbnNwZWN0b3JDU1NBZ2VudC5oCmluZGV4IGZhMWQ2NzFkZDgzM2IwMDNhNjFkYzI3OTY1
OTY2OTIxNjFhYWRmN2YuLmQyZmNhNzk1ZGM2ODBmOThkZTg2Y2JjYzFkNmU5MGM4Y2E3YzcwYjEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ1NT
QWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNT
U0FnZW50LmgKQEAgLTYxLDcgKzYxLDcgQEAgY2xhc3MgSW5zcGVjdG9yQ1NTQWdlbnQgZmluYWwg
OiBwdWJsaWMgSW5zcGVjdG9yQWdlbnRCYXNlICwgcHVibGljIEluc3BlY3Rvcjo6Q1MKICAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBJbnNwZWN0b3JDU1NBZ2VudChX
ZWJBZ2VudENvbnRleHQmKTsKLSAgICB+SW5zcGVjdG9yQ1NTQWdlbnQoKSBvdmVycmlkZTsKKyAg
ICB+SW5zcGVjdG9yQ1NTQWdlbnQoKTsKIAogICAgIGNsYXNzIElubGluZVN0eWxlT3ZlcnJpZGVT
Y29wZSB7CiAgICAgcHVibGljOgpAQCAtODMsMjkgKzgzLDI5IEBAIHB1YmxpYzoKICAgICBzdGF0
aWMgQ1NTU3R5bGVSdWxlKiBhc0NTU1N0eWxlUnVsZShDU1NSdWxlJik7CiAKICAgICAvLyBJbnNw
ZWN0b3JBZ2VudEJhc2UKLSAgICB2b2lkIGRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJbnNw
ZWN0b3I6OkZyb250ZW5kUm91dGVyKiwgSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlciopIG92
ZXJyaWRlOwotICAgIHZvaWQgd2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9y
OjpEaXNjb25uZWN0UmVhc29uKSBvdmVycmlkZTsKKyAgICB2b2lkIGRpZENyZWF0ZUZyb250ZW5k
QW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kUm91dGVyKiwgSW5zcGVjdG9yOjpCYWNrZW5k
RGlzcGF0Y2hlciopOworICAgIHZvaWQgd2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5z
cGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKTsKIAogICAgIC8vIENTU0JhY2tlbmREaXNwYXRjaGVy
SGFuZGxlcgotICAgIHZvaWQgZW5hYmxlKEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBkaXNhYmxlKEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBnZXRDb21wdXRlZFN0
eWxlRm9yTm9kZShFcnJvclN0cmluZyYsIGludCBub2RlSWQsIFJlZlB0cjxKU09OOjpBcnJheU9m
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTQ29tcHV0ZWRTdHlsZVByb3BlcnR5Pj4mKSBv
dmVycmlkZTsKLSAgICB2b2lkIGdldElubGluZVN0eWxlc0Zvck5vZGUoRXJyb3JTdHJpbmcmLCBp
bnQgbm9kZUlkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4mIGlu
bGluZVN0eWxlLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZT4mIGF0
dHJpYnV0ZXMpIG92ZXJyaWRlOwotICAgIHZvaWQgZ2V0TWF0Y2hlZFN0eWxlc0Zvck5vZGUoRXJy
b3JTdHJpbmcmLCBpbnQgbm9kZUlkLCBjb25zdCBib29sKiBpbmNsdWRlUHNldWRvLCBjb25zdCBi
b29sKiBpbmNsdWRlSW5oZXJpdGVkLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpDU1M6OlJ1bGVNYXRjaD4+JiBtYXRjaGVkQ1NTUnVsZXMsIFJlZlB0cjxKU09OOjpB
cnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6UHNldWRvSWRNYXRjaGVzPj4mLCBSZWZQ
dHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkluaGVyaXRlZFN0eWxl
RW50cnk+PiYgaW5oZXJpdGVkRW50cmllcykgb3ZlcnJpZGU7Ci0gICAgdm9pZCBnZXRBbGxTdHls
ZVNoZWV0cyhFcnJvclN0cmluZyYsIFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkNTUzo6Q1NTU3R5bGVTaGVldEhlYWRlcj4+JiBzdHlsZVNoZWV0SW5mb3MpIG92ZXJy
aWRlOwotICAgIHZvaWQgZ2V0U3R5bGVTaGVldChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYg
c3R5bGVTaGVldElkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZVNo
ZWV0Qm9keT4mIHJlc3VsdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBnZXRTdHlsZVNoZWV0VGV4dChF
cnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgc3R5bGVTaGVldElkLCBTdHJpbmcqIHJlc3VsdCkg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRTdHlsZVNoZWV0VGV4dChFcnJvclN0cmluZyYsIGNvbnN0
IFN0cmluZyYgc3R5bGVTaGVldElkLCBjb25zdCBTdHJpbmcmIHRleHQpIG92ZXJyaWRlOwotICAg
IHZvaWQgc2V0U3R5bGVUZXh0KEVycm9yU3RyaW5nJiwgY29uc3QgSlNPTjo6T2JqZWN0JiBzdHls
ZUlkLCBjb25zdCBTdHJpbmcmIHRleHQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6
OkNTU1N0eWxlPiYgcmVzdWx0KSBvdmVycmlkZTsKLSAgICB2b2lkIHNldFJ1bGVTZWxlY3RvcihF
cnJvclN0cmluZyYsIGNvbnN0IEpTT046Ok9iamVjdCYgcnVsZUlkLCBjb25zdCBTdHJpbmcmIHNl
bGVjdG9yLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NSdWxlPiYgcmVzdWx0
KSBvdmVycmlkZTsKLSAgICB2b2lkIGNyZWF0ZVN0eWxlU2hlZXQoRXJyb3JTdHJpbmcmLCBjb25z
dCBTdHJpbmcmIGZyYW1lSWQsIFN0cmluZyogc3R5bGVTaGVldElkKSBvdmVycmlkZTsKLSAgICB2
b2lkIGFkZFJ1bGUoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHN0eWxlU2hlZXRJZCwgY29u
c3QgU3RyaW5nJiBzZWxlY3RvciwgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NT
UnVsZT4mIHJlc3VsdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBnZXRTdXBwb3J0ZWRDU1NQcm9wZXJ0
aWVzKEVycm9yU3RyaW5nJiwgUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6Q1NTOjpDU1NQcm9wZXJ0eUluZm8+PiYgcmVzdWx0KSBvdmVycmlkZTsKLSAgICB2b2lkIGdl
dFN1cHBvcnRlZFN5c3RlbUZvbnRGYW1pbHlOYW1lcyhFcnJvclN0cmluZyYsIFJlZlB0cjxKU09O
OjpBcnJheU9mPFN0cmluZz4+JiByZXN1bHQpIG92ZXJyaWRlOwotICAgIHZvaWQgZm9yY2VQc2V1
ZG9TdGF0ZShFcnJvclN0cmluZyYsIGludCBub2RlSWQsIGNvbnN0IEpTT046OkFycmF5JiBmb3Jj
ZWRQc2V1ZG9DbGFzc2VzKSBvdmVycmlkZTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJv
clN0cmluZ09yPHZvaWQ+IGVuYWJsZSgpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8dm9pZD4gZGlzYWJsZSgpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8UmVmPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1ND
b21wdXRlZFN0eWxlUHJvcGVydHk+Pj4gZ2V0Q29tcHV0ZWRTdHlsZUZvck5vZGUoSW5zcGVjdG9y
OjpQcm90b2NvbDo6RE9NOjpOb2RlSWQpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8c3RkOjp0dXBsZTxSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NT
dHlsZT4gLyogaW5saW5lU3R5bGUgKi8sIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6
OkNTU1N0eWxlPiAvKiBhdHRyaWJ1dGVzU3R5bGUgKi8+PiBnZXRJbmxpbmVTdHlsZXNGb3JOb2Rl
KEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkKTsKKyAgICBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpFcnJvclN0cmluZ09yPHN0ZDo6dHVwbGU8UmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVj
dG9yOjpQcm90b2NvbDo6Q1NTOjpSdWxlTWF0Y2g+PiwgUmVmUHRyPEpTT046OkFycmF5T2Y8SW5z
cGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpQc2V1ZG9JZE1hdGNoZXM+PiwgUmVmUHRyPEpTT046OkFy
cmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpJbmhlcml0ZWRTdHlsZUVudHJ5Pj4+PiBn
ZXRNYXRjaGVkU3R5bGVzRm9yTm9kZShJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZCwg
T3B0aW9uYWw8Ym9vbD4mJiBpbmNsdWRlUHNldWRvLCBPcHRpb25hbDxib29sPiYmIGluY2x1ZGVJ
bmhlcml0ZWQpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEpT
T046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZVNoZWV0SGVhZGVy
Pj4+IGdldEFsbFN0eWxlU2hlZXRzKCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JT
dHJpbmdPcjxSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NTdHlsZVNoZWV0Qm9keT4+
IGdldFN0eWxlU2hlZXQoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0
SWQmKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFN0cmluZz4gZ2V0
U3R5bGVTaGVldFRleHQoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0
SWQmKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHNldFN0
eWxlU2hlZXRUZXh0KGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldElk
JiwgY29uc3QgU3RyaW5nJiB0ZXh0KTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0
cmluZ09yPFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDU1M6OkNTU1N0eWxlPj4gc2V0U3R5bGVU
ZXh0KFJlZjxKU09OOjpPYmplY3Q+JiYgc3R5bGVJZCwgY29uc3QgU3RyaW5nJiB0ZXh0KTsKKyAg
ICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpDU1M6OkNTU1J1bGU+PiBzZXRSdWxlU2VsZWN0b3IoUmVmPEpTT046Ok9iamVjdD4mJiBy
dWxlSWQsIGNvbnN0IFN0cmluZyYgc2VsZWN0b3IpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0SWQ+IGNy
ZWF0ZVN0eWxlU2hlZXQoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6RnJhbWVJ
ZCYpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkNTUzo6Q1NTUnVsZT4+IGFkZFJ1bGUoY29uc3QgSW5zcGVjdG9yOjpQcm90
b2NvbDo6Q1NTOjpTdHlsZVNoZWV0SWQmLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yKTsKKyAgICBJ
bnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUHJvcGVydHlJbmZvPj4+IGdldFN1cHBvcnRlZENTU1By
b3BlcnRpZXMoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxK
U09OOjpBcnJheU9mPFN0cmluZz4+PiBnZXRTdXBwb3J0ZWRTeXN0ZW1Gb250RmFtaWx5TmFtZXMo
KTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGZvcmNlUHNl
dWRvU3RhdGUoSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQsIFJlZjxKU09OOjpBcnJh
eT4mJiBmb3JjZWRQc2V1ZG9DbGFzc2VzKTsKIAogICAgIC8vIEluc3BlY3RvclN0eWxlU2hlZXQ6
Okxpc3RlbmVyCi0gICAgdm9pZCBzdHlsZVNoZWV0Q2hhbmdlZChJbnNwZWN0b3JTdHlsZVNoZWV0
Kikgb3ZlcnJpZGU7CisgICAgdm9pZCBzdHlsZVNoZWV0Q2hhbmdlZChJbnNwZWN0b3JTdHlsZVNo
ZWV0Kik7CiAKICAgICAvLyBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24KICAgICB2b2lkIGRvY3Vt
ZW50RGV0YWNoZWQoRG9jdW1lbnQmKTsKQEAgLTExNCw3ICsxMTQsNyBAQCBwdWJsaWM6CiAgICAg
Ym9vbCBmb3JjZVBzZXVkb1N0YXRlKGNvbnN0IEVsZW1lbnQmLCBDU1NTZWxlY3Rvcjo6UHNldWRv
Q2xhc3NUeXBlKTsKIAogICAgIC8vIEluc3BlY3RvckRPTUFnZW50IGhvb2tzCi0gICAgdm9pZCBk
aWRSZW1vdmVET01Ob2RlKE5vZGUmLCBpbnQgbm9kZUlkKTsKKyAgICB2b2lkIGRpZFJlbW92ZURP
TU5vZGUoTm9kZSYsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkKTsKICAgICB2b2lk
IGRpZE1vZGlmeURPTUF0dHIoRWxlbWVudCYpOwogCiAgICAgdm9pZCByZXNldCgpOwpAQCAtMTI2
LDI4ICsxMjYsMjggQEAgcHJpdmF0ZToKICAgICBjbGFzcyBTZXRSdWxlU2VsZWN0b3JBY3Rpb247
CiAgICAgY2xhc3MgQWRkUnVsZUFjdGlvbjsKIAotICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcs
IFJlZlB0cjxJbnNwZWN0b3JTdHlsZVNoZWV0Pj4gSWRUb0luc3BlY3RvclN0eWxlU2hlZXQ7Cisg
ICAgdHlwZWRlZiBIYXNoTWFwPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldElk
LCBSZWZQdHI8SW5zcGVjdG9yU3R5bGVTaGVldD4+IElkVG9JbnNwZWN0b3JTdHlsZVNoZWV0Owog
ICAgIHR5cGVkZWYgSGFzaE1hcDxDU1NTdHlsZVNoZWV0KiwgUmVmUHRyPEluc3BlY3RvclN0eWxl
U2hlZXQ+PiBDU1NTdHlsZVNoZWV0VG9JbnNwZWN0b3JTdHlsZVNoZWV0OwogICAgIHR5cGVkZWYg
SGFzaE1hcDxSZWZQdHI8RG9jdW1lbnQ+LCBWZWN0b3I8UmVmUHRyPEluc3BlY3RvclN0eWxlU2hl
ZXQ+Pj4gRG9jdW1lbnRUb1ZpYUluc3BlY3RvclN0eWxlU2hlZXQ7IC8vICJ2aWEgaW5zcGVjdG9y
IiBzdHlsZXNoZWV0cwotICAgIHR5cGVkZWYgSGFzaE1hcDxpbnQsIHVuc2lnbmVkPiBOb2RlSWRU
b0ZvcmNlZFBzZXVkb1N0YXRlOworICAgIHR5cGVkZWYgSGFzaE1hcDxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpET006Ok5vZGVJZCwgdW5zaWduZWQ+IE5vZGVJZFRvRm9yY2VkUHNldWRvU3RhdGU7CiAK
ICAgICBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGUmIGFzSW5zcGVjdG9yU3R5bGVT
aGVldChTdHlsZWRFbGVtZW50Jik7Ci0gICAgRWxlbWVudCogZWxlbWVudEZvcklkKEVycm9yU3Ry
aW5nJiwgaW50IG5vZGVJZCk7CisgICAgRWxlbWVudCogZWxlbWVudEZvcklkKEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkVycm9yU3RyaW5nJiwgSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQp
OwogCiAgICAgdm9pZCBjb2xsZWN0QWxsU3R5bGVTaGVldHMoVmVjdG9yPEluc3BlY3RvclN0eWxl
U2hlZXQqPiYpOwogICAgIHZvaWQgY29sbGVjdEFsbERvY3VtZW50U3R5bGVTaGVldHMoRG9jdW1l
bnQmLCBWZWN0b3I8Q1NTU3R5bGVTaGVldCo+Jik7CiAgICAgdm9pZCBjb2xsZWN0U3R5bGVTaGVl
dHMoQ1NTU3R5bGVTaGVldCosIFZlY3RvcjxDU1NTdHlsZVNoZWV0Kj4mKTsKICAgICB2b2lkIHNl
dEFjdGl2ZVN0eWxlU2hlZXRzRm9yRG9jdW1lbnQoRG9jdW1lbnQmLCBWZWN0b3I8Q1NTU3R5bGVT
aGVldCo+JiBhY3RpdmVTdHlsZVNoZWV0cyk7CiAKLSAgICBTdHJpbmcgdW5iaW5kU3R5bGVTaGVl
dChJbnNwZWN0b3JTdHlsZVNoZWV0Kik7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpT
dHlsZVNoZWV0SWQgdW5iaW5kU3R5bGVTaGVldChJbnNwZWN0b3JTdHlsZVNoZWV0Kik7CiAgICAg
SW5zcGVjdG9yU3R5bGVTaGVldCogYmluZFN0eWxlU2hlZXQoQ1NTU3R5bGVTaGVldCopOwotICAg
IEluc3BlY3RvclN0eWxlU2hlZXQqIGFzc2VydFN0eWxlU2hlZXRGb3JJZChFcnJvclN0cmluZyYs
IGNvbnN0IFN0cmluZyYpOworICAgIEluc3BlY3RvclN0eWxlU2hlZXQqIGFzc2VydFN0eWxlU2hl
ZXRGb3JJZChJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZyYsIGNvbnN0IEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkNTUzo6U3R5bGVTaGVldElkJik7CiAgICAgSW5zcGVjdG9yU3R5bGVTaGVl
dCogY3JlYXRlSW5zcGVjdG9yU3R5bGVTaGVldEZvckRvY3VtZW50KERvY3VtZW50Jik7CiAgICAg
SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpTdHlsZVNoZWV0T3JpZ2luIGRldGVjdE9yaWdpbihD
U1NTdHlsZVNoZWV0KiBwYWdlU3R5bGVTaGVldCwgRG9jdW1lbnQqIG93bmVyRG9jdW1lbnQpOwog
CiAgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNTUzo6Q1NTUnVsZT4gYnVpbGRPYmpl
Y3RGb3JSdWxlKGNvbnN0IFN0eWxlUnVsZSosIFN0eWxlOjpSZXNvbHZlciYsIEVsZW1lbnQmKTsK
ICAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6Q1NTOjpDU1NSdWxlPiBidWlsZE9iamVj
dEZvclJ1bGUoQ1NTU3R5bGVSdWxlKik7Ci0gICAgUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVj
dG9yOjpQcm90b2NvbDo6Q1NTOjpSdWxlTWF0Y2g+PiBidWlsZEFycmF5Rm9yTWF0Y2hlZFJ1bGVM
aXN0KGNvbnN0IFZlY3RvcjxSZWZQdHI8Y29uc3QgU3R5bGVSdWxlPj4mLCBTdHlsZTo6UmVzb2x2
ZXImLCBFbGVtZW50JiwgUHNldWRvSWQpOworICAgIFJlZjxKU09OOjpBcnJheU9mPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkNTUzo6UnVsZU1hdGNoPj4gYnVpbGRBcnJheUZvck1hdGNoZWRSdWxlTGlz
dChjb25zdCBWZWN0b3I8UmVmUHRyPGNvbnN0IFN0eWxlUnVsZT4+JiwgU3R5bGU6OlJlc29sdmVy
JiwgRWxlbWVudCYsIFBzZXVkb0lkKTsKICAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
Q1NTOjpDU1NTdHlsZT4gYnVpbGRPYmplY3RGb3JBdHRyaWJ1dGVzU3R5bGUoU3R5bGVkRWxlbWVu
dCYpOwogCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5z
cGVjdG9yQ2FudmFzQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9J
bnNwZWN0b3JDYW52YXNBZ2VudC5jcHAKaW5kZXggZDA5MTY4Mjk0MDBmOTQ2ZjA4NjAwOTU4YWE0
NDNlNTcwNzNmZThhYS4uYTg1MDM4ZjVjMDY3N2U3ZDkyODE5NGRiN2QwNDA5YTk0OGJjOTZiOSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDYW52
YXNBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0
b3JDYW52YXNBZ2VudC5jcHAKQEAgLTEwMiw4ICsxMDIsNyBAQCB2b2lkIEluc3BlY3RvckNhbnZh
c0FnZW50OjpkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9udGVuZFJv
dXRlcgogCiB2b2lkIEluc3BlY3RvckNhbnZhc0FnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5k
QmFja2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24pCiB7Ci0gICAgRXJyb3JTdHJpbmcg
aWdub3JlZDsKLSAgICBkaXNhYmxlKGlnbm9yZWQpOworICAgIGRpc2FibGUoKTsKIH0KIAogdm9p
ZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6ZGlzY2FyZEFnZW50KCkKQEAgLTExMSwxMCArMTEwLDEw
IEBAIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmRpc2NhcmRBZ2VudCgpCiAgICAgcmVzZXQo
KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6ZW5hYmxlKEVycm9yU3RyaW5nJikK
K1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckNhbnZhc0FnZW50OjplbmFi
bGUoKQogewogICAgIGlmIChtX2luc3RydW1lbnRpbmdBZ2VudHMuZW5hYmxlZENhbnZhc0FnZW50
KCkgPT0gdGhpcykKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4geyB9OwogCiAgICAg
bV9pbnN0cnVtZW50aW5nQWdlbnRzLnNldEVuYWJsZWRDYW52YXNBZ2VudCh0aGlzKTsKIApAQCAt
MTcwLDczICsxNjksODQgQEAgdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6ZW5hYmxlKEVycm9y
U3RyaW5nJikKICAgICAgICAgfQogICAgIH0KICNlbmRpZiAvLyBFTkFCTEUoV0VCR1BVKQorCisg
ICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6ZGlzYWJsZShF
cnJvclN0cmluZyYpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JDYW52
YXNBZ2VudDo6ZGlzYWJsZSgpCiB7CiAgICAgbV9pbnN0cnVtZW50aW5nQWdlbnRzLnNldEVuYWJs
ZWRDYW52YXNBZ2VudChudWxscHRyKTsKIAogICAgIHJlc2V0KCk7CiAKICAgICBtX3JlY29yZGlu
Z0F1dG9DYXB0dXJlRnJhbWVDb3VudCA9IFdURjo6bnVsbG9wdDsKKworICAgIHJldHVybiB7IH07
CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnJlcXVlc3ROb2RlKEVycm9yU3RyaW5n
JiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBjYW52YXNJZCwgaW50KiBub2RlSWQpCitQcm90
b2NvbDo6RXJyb3JTdHJpbmdPcjxQcm90b2NvbDo6RE9NOjpOb2RlSWQ+IEluc3BlY3RvckNhbnZh
c0FnZW50OjpyZXF1ZXN0Tm9kZShjb25zdCBQcm90b2NvbDo6Q2FudmFzOjpDYW52YXNJZCYgY2Fu
dmFzSWQpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAgICAg
YXV0byBpbnNwZWN0b3JDYW52YXMgPSBhc3NlcnRJbnNwZWN0b3JDYW52YXMoZXJyb3JTdHJpbmcs
IGNhbnZhc0lkKTsKICAgICBpZiAoIWluc3BlY3RvckNhbnZhcykKLSAgICAgICAgcmV0dXJuOwor
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCiAgICAgYXV0byog
bm9kZSA9IGluc3BlY3RvckNhbnZhcy0+Y2FudmFzRWxlbWVudCgpOwotICAgIGlmICghbm9kZSkg
ewotICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIGVsZW1lbnQgb2YgY2FudmFzIGZvciBn
aXZlbiBjYW52YXNJZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoIW5vZGUp
CisgICAgICAgIG1ha2VVbmV4cGVjdGVkKCJNaXNzaW5nIGVsZW1lbnQgb2YgY2FudmFzIGZvciBn
aXZlbiBjYW52YXNJZCJfcyk7CiAKICAgICAvLyBGSVhNRTogPGh0dHBzOi8vd2Via2l0Lm9yZy9i
LzIxMzQ5OT4gV2ViIEluc3BlY3RvcjogYWxsb3cgRE9NIG5vZGVzIHRvIGJlIGluc3RydW1lbnRl
ZCBhdCBhbnkgcG9pbnQsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGUgbWFpbiBkb2N1bWVudCBo
YXMgYWxzbyBiZWVuIGluc3RydW1lbnRlZAogICAgIGludCBkb2N1bWVudE5vZGVJZCA9IG1faW5z
dHJ1bWVudGluZ0FnZW50cy5wZXJzaXN0ZW50RE9NQWdlbnQoKS0+Ym91bmROb2RlSWQoJm5vZGUt
PmRvY3VtZW50KCkpOwotICAgIGlmICghZG9jdW1lbnROb2RlSWQpIHsKLSAgICAgICAgZXJyb3JT
dHJpbmcgPSAiRG9jdW1lbnQgbXVzdCBoYXZlIGJlZW4gcmVxdWVzdGVkIl9zOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQorICAgIGlmICghZG9jdW1lbnROb2RlSWQpCisgICAgICAgIG1ha2VVbmV4
cGVjdGVkKCJEb2N1bWVudCBtdXN0IGhhdmUgYmVlbiByZXF1ZXN0ZWQiX3MpOwogCi0gICAgKm5v
ZGVJZCA9IG1faW5zdHJ1bWVudGluZ0FnZW50cy5wZXJzaXN0ZW50RE9NQWdlbnQoKS0+cHVzaE5v
ZGVUb0Zyb250ZW5kKGVycm9yU3RyaW5nLCBkb2N1bWVudE5vZGVJZCwgbm9kZSk7CisgICAgcmV0
dXJuIG1faW5zdHJ1bWVudGluZ0FnZW50cy5wZXJzaXN0ZW50RE9NQWdlbnQoKS0+cHVzaE5vZGVU
b0Zyb250ZW5kKGVycm9yU3RyaW5nLCBkb2N1bWVudE5vZGVJZCwgbm9kZSk7CiB9CiAKLXZvaWQg
SW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnJlcXVlc3RDb250ZW50KEVycm9yU3RyaW5nJiBlcnJvclN0
cmluZywgY29uc3QgU3RyaW5nJiBjYW52YXNJZCwgU3RyaW5nKiBjb250ZW50KQorUHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8U3RyaW5nPiBJbnNwZWN0b3JDYW52YXNBZ2VudDo6cmVxdWVzdENvbnRl
bnQoY29uc3QgUHJvdG9jb2w6OkNhbnZhczo6Q2FudmFzSWQmIGNhbnZhc0lkKQogeworICAgIFBy
b3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIGF1dG8gaW5zcGVjdG9yQ2Fu
dmFzID0gYXNzZXJ0SW5zcGVjdG9yQ2FudmFzKGVycm9yU3RyaW5nLCBjYW52YXNJZCk7CiAgICAg
aWYgKCFpbnNwZWN0b3JDYW52YXMpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1h
a2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAotICAgICpjb250ZW50ID0gaW5zcGVjdG9yQ2Fu
dmFzLT5nZXRDYW52YXNDb250ZW50QXNEYXRhVVJMKGVycm9yU3RyaW5nKTsKKyAgICBhdXRvIHJl
c3VsdCA9IGluc3BlY3RvckNhbnZhcy0+Z2V0Q2FudmFzQ29udGVudEFzRGF0YVVSTChlcnJvclN0
cmluZyk7CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChl
cnJvclN0cmluZyk7CisKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIEluc3BlY3RvckNh
bnZhc0FnZW50OjpyZXF1ZXN0Q2xpZW50Tm9kZXMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBj
b25zdCBTdHJpbmcmIGNhbnZhc0lkLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxpbnQ+PiYgY2xpZW50
Tm9kZUlkcykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPFByb3Rv
Y29sOjpET006Ok5vZGVJZD4+PiBJbnNwZWN0b3JDYW52YXNBZ2VudDo6cmVxdWVzdENsaWVudE5v
ZGVzKGNvbnN0IFByb3RvY29sOjpDYW52YXM6OkNhbnZhc0lkJiBjYW52YXNJZCkKIHsKKyAgICBQ
cm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBhdXRvKiBkb21BZ2VudCA9
IG1faW5zdHJ1bWVudGluZ0FnZW50cy5wZXJzaXN0ZW50RE9NQWdlbnQoKTsKLSAgICBpZiAoIWRv
bUFnZW50KSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIkRPTSBkb21haW4gbXVzdCBiZSBlbmFi
bGVkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghZG9tQWdlbnQpCisgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiRE9NIGRvbWFpbiBtdXN0IGJlIGVuYWJsZWQiX3Mp
OwogCiAgICAgYXV0byBpbnNwZWN0b3JDYW52YXMgPSBhc3NlcnRJbnNwZWN0b3JDYW52YXMoZXJy
b3JTdHJpbmcsIGNhbnZhc0lkKTsKICAgICBpZiAoIWluc3BlY3RvckNhbnZhcykKLSAgICAgICAg
cmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCi0g
ICAgY2xpZW50Tm9kZUlkcyA9IEpTT046OkFycmF5T2Y8aW50Pjo6Y3JlYXRlKCk7CisgICAgYXV0
byBjbGllbnROb2RlSWRzID0gSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6RE9NOjpOb2RlSWQ+Ojpj
cmVhdGUoKTsKICAgICBmb3IgKGF1dG8mIGNsaWVudE5vZGUgOiBpbnNwZWN0b3JDYW52YXMtPmNs
aWVudE5vZGVzKCkpIHsKICAgICAgICAgLy8gRklYTUU6IDxodHRwczovL3dlYmtpdC5vcmcvYi8y
MTM0OTk+IFdlYiBJbnNwZWN0b3I6IGFsbG93IERPTSBub2RlcyB0byBiZSBpbnN0cnVtZW50ZWQg
YXQgYW55IHBvaW50LCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlIG1haW4gZG9jdW1lbnQgaGFz
IGFsc28gYmVlbiBpbnN0cnVtZW50ZWQKICAgICAgICAgaWYgKGF1dG8gZG9jdW1lbnROb2RlSWQg
PSBkb21BZ2VudC0+Ym91bmROb2RlSWQoJmNsaWVudE5vZGUtPmRvY3VtZW50KCkpKQogICAgICAg
ICAgICAgY2xpZW50Tm9kZUlkcy0+YWRkSXRlbShkb21BZ2VudC0+cHVzaE5vZGVUb0Zyb250ZW5k
KGVycm9yU3RyaW5nLCBkb2N1bWVudE5vZGVJZCwgY2xpZW50Tm9kZSkpOwogICAgIH0KKyAgICBy
ZXR1cm4gV1RGTW92ZShjbGllbnROb2RlSWRzKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDYW52YXNB
Z2VudDo6cmVzb2x2ZUNvbnRleHQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJp
bmcmIGNhbnZhc0lkLCBjb25zdCBTdHJpbmcqIG9iamVjdEdyb3VwLCBSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0KQorUHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8UmVmPFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+PiBJbnNwZWN0
b3JDYW52YXNBZ2VudDo6cmVzb2x2ZUNvbnRleHQoY29uc3QgUHJvdG9jb2w6OkNhbnZhczo6Q2Fu
dmFzSWQmIGNhbnZhc0lkLCBjb25zdCBTdHJpbmcmIG9iamVjdEdyb3VwKQogeworICAgIFByb3Rv
Y29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIGF1dG8gaW5zcGVjdG9yQ2FudmFz
ID0gYXNzZXJ0SW5zcGVjdG9yQ2FudmFzKGVycm9yU3RyaW5nLCBjYW52YXNJZCk7CiAgICAgaWYg
KCFpbnNwZWN0b3JDYW52YXMpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgIGF1dG8qIHN0YXRlID0gaW5zcGVjdG9yQ2Fu
dmFzLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmV4ZWNTdGF0ZSgpOwogICAgIGF1dG8gaW5q
ZWN0ZWRTY3JpcHQgPSBtX2luamVjdGVkU2NyaXB0TWFuYWdlci5pbmplY3RlZFNjcmlwdEZvcihz
dGF0ZSk7CkBAIC0yNDYsMTIyICsyNTYsMTI5IEBAIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6
OnJlc29sdmVDb250ZXh0KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nCiAK
ICAgICBpZiAoIXZhbHVlKSB7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAg
ICBlcnJvclN0cmluZyA9ICJJbnRlcm5hbCBlcnJvcjogdW5rbm93biBjb250ZXh0IG9mIGNhbnZh
cyBmb3IgZ2l2ZW4gY2FudmFzSWQiX3M7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJu
IG1ha2VVbmV4cGVjdGVkKCJJbnRlcm5hbCBlcnJvcjogdW5rbm93biBjb250ZXh0IG9mIGNhbnZh
cyBmb3IgZ2l2ZW4gY2FudmFzSWQiX3MpOwogICAgIH0KIAotICAgIFN0cmluZyBvYmplY3RHcm91
cE5hbWUgPSBvYmplY3RHcm91cCA/ICpvYmplY3RHcm91cCA6IFN0cmluZygpOwotICAgIHJlc3Vs
dCA9IGluamVjdGVkU2NyaXB0LndyYXBPYmplY3QodmFsdWUsIG9iamVjdEdyb3VwTmFtZSk7Cisg
ICAgYXV0byByZXN1bHQgPSBpbmplY3RlZFNjcmlwdC53cmFwT2JqZWN0KHZhbHVlLCBvYmplY3RH
cm91cCk7CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgi
SW50ZXJuYWwgZXJyb3I6IHVuYWJsZSB0byBjYXN0IENvbnRleHQiKTsKKworICAgIHJldHVybiBy
ZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6
c2V0UmVjb3JkaW5nQXV0b0NhcHR1cmVGcmFtZUNvdW50KEVycm9yU3RyaW5nJiwgaW50IGNvdW50
KQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnNl
dFJlY29yZGluZ0F1dG9DYXB0dXJlRnJhbWVDb3VudChpbnQgY291bnQpCiB7CiAgICAgaWYgKGNv
dW50ID4gMCkKICAgICAgICAgbV9yZWNvcmRpbmdBdXRvQ2FwdHVyZUZyYW1lQ291bnQgPSBjb3Vu
dDsKICAgICBlbHNlCiAgICAgICAgIG1fcmVjb3JkaW5nQXV0b0NhcHR1cmVGcmFtZUNvdW50ID0g
V1RGOjpudWxsb3B0OworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ2FudmFz
QWdlbnQ6OnN0YXJ0UmVjb3JkaW5nKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3Ry
aW5nJiBjYW52YXNJZCwgY29uc3QgaW50KiBmcmFtZUNvdW50LCBjb25zdCBpbnQqIG1lbW9yeUxp
bWl0KQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yQ2FudmFzQWdlbnQ6
OnN0YXJ0UmVjb3JkaW5nKGNvbnN0IFByb3RvY29sOjpDYW52YXM6OkNhbnZhc0lkJiBjYW52YXNJ
ZCwgT3B0aW9uYWw8aW50PiYmIGZyYW1lQ291bnQsIE9wdGlvbmFsPGludD4mJiBtZW1vcnlMaW1p
dCkKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBhdXRv
IGluc3BlY3RvckNhbnZhcyA9IGFzc2VydEluc3BlY3RvckNhbnZhcyhlcnJvclN0cmluZywgY2Fu
dmFzSWQpOwogICAgIGlmICghaW5zcGVjdG9yQ2FudmFzKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICAvLyBGSVhNRTogPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzIwMTY1MT4gV2ViIEluc3BlY3Rvcjog
Q2FudmFzOiBzdXBwb3J0IGNhbnZhcyByZWNvcmRpbmdzIGZvciBXZWJHUFVEZXZpY2UKKyAgICAg
ICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgIGF1dG8qIGNvbnRl
eHQgPSBpbnNwZWN0b3JDYW52YXMtPmNhbnZhc0NvbnRleHQoKTsKLSAgICBpZiAoIWNvbnRleHQp
Ci0gICAgICAgIHJldHVybjsKIAotICAgIGlmIChjb250ZXh0LT5jYWxsVHJhY2luZ0FjdGl2ZSgp
KSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIkFscmVhZHkgcmVjb3JkaW5nIGNhbnZhcyJfczsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICAvLyBGSVhNRTogPGh0dHBzOi8vd2Via2l0Lm9y
Zy9iLzIwMTY1MT4gV2ViIEluc3BlY3RvcjogQ2FudmFzOiBzdXBwb3J0IGNhbnZhcyByZWNvcmRp
bmdzIGZvciBXZWJHUFVEZXZpY2UKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJldHVybiBt
YWtlVW5leHBlY3RlZCgiTm90IHN1cHBvcnRlZCJfcyk7CisKKyAgICBpZiAoY29udGV4dC0+Y2Fs
bFRyYWNpbmdBY3RpdmUoKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJBbHJlYWR5
IHJlY29yZGluZyBjYW52YXMiX3MpOwogCiAgICAgUmVjb3JkaW5nT3B0aW9ucyByZWNvcmRpbmdP
cHRpb25zOwogICAgIGlmIChmcmFtZUNvdW50KQogICAgICAgICByZWNvcmRpbmdPcHRpb25zLmZy
YW1lQ291bnQgPSAqZnJhbWVDb3VudDsKICAgICBpZiAobWVtb3J5TGltaXQpCiAgICAgICAgIHJl
Y29yZGluZ09wdGlvbnMubWVtb3J5TGltaXQgPSAqbWVtb3J5TGltaXQ7Ci0gICAgc3RhcnRSZWNv
cmRpbmcoKmluc3BlY3RvckNhbnZhcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6UmVjb3JkaW5nOjpJ
bml0aWF0b3I6OkZyb250ZW5kLCBXVEZNb3ZlKHJlY29yZGluZ09wdGlvbnMpKTsKKyAgICBzdGFy
dFJlY29yZGluZygqaW5zcGVjdG9yQ2FudmFzLCBQcm90b2NvbDo6UmVjb3JkaW5nOjpJbml0aWF0
b3I6OkZyb250ZW5kLCBXVEZNb3ZlKHJlY29yZGluZ09wdGlvbnMpKTsKKworICAgIHJldHVybiB7
IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnN0b3BSZWNvcmRpbmcoRXJyb3JT
dHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGNhbnZhc0lkKQorUHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnN0b3BSZWNvcmRpbmcoY29u
c3QgUHJvdG9jb2w6OkNhbnZhczo6Q2FudmFzSWQmIGNhbnZhc0lkKQogeworICAgIFByb3RvY29s
OjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAgIGF1dG8gaW5zcGVjdG9yQ2FudmFzID0g
YXNzZXJ0SW5zcGVjdG9yQ2FudmFzKGVycm9yU3RyaW5nLCBjYW52YXNJZCk7CiAgICAgaWYgKCFp
bnNwZWN0b3JDYW52YXMpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEZJWE1FOiA8aHR0cHM6
Ly93ZWJraXQub3JnL2IvMjAxNjUxPiBXZWIgSW5zcGVjdG9yOiBDYW52YXM6IHN1cHBvcnQgY2Fu
dmFzIHJlY29yZGluZ3MgZm9yIFdlYkdQVURldmljZQorICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoZXJyb3JTdHJpbmcpOwogCiAgICAgYXV0byogY29udGV4dCA9IGluc3BlY3RvckNhbnZh
cy0+Y2FudmFzQ29udGV4dCgpOwotICAgIGlmICghY29udGV4dCkKLSAgICAgICAgcmV0dXJuOwog
Ci0gICAgaWYgKCFjb250ZXh0LT5jYWxsVHJhY2luZ0FjdGl2ZSgpKSB7Ci0gICAgICAgIGVycm9y
U3RyaW5nID0gIk5vdCByZWNvcmRpbmcgY2FudmFzIl9zOwotICAgICAgICByZXR1cm47Ci0gICAg
fQorICAgIC8vIEZJWE1FOiA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMjAxNjUxPiBXZWIgSW5zcGVj
dG9yOiBDYW52YXM6IHN1cHBvcnQgY2FudmFzIHJlY29yZGluZ3MgZm9yIFdlYkdQVURldmljZQor
ICAgIGlmICghY29udGV4dCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJOb3Qgc3Vw
cG9ydGVkIl9zKTsKKworICAgIGlmICghY29udGV4dC0+Y2FsbFRyYWNpbmdBY3RpdmUoKSkKKyAg
ICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJOb3QgcmVjb3JkaW5nIGNhbnZhcyJfcyk7CiAK
ICAgICBkaWRGaW5pc2hSZWNvcmRpbmdDYW52YXNGcmFtZSgqY29udGV4dCwgdHJ1ZSk7CisKKyAg
ICByZXR1cm4geyB9OwogfQogCiAjaWYgRU5BQkxFKFdFQkdMKSB8fCBFTkFCTEUoV0VCR1BVKQot
dm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6cmVxdWVzdFNoYWRlclNvdXJjZShFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgcHJvZ3JhbUlkLCBjb25zdCBTdHJpbmcmIHNo
YWRlclR5cGVTdHJpbmcsIFN0cmluZyogb3V0U291cmNlKQorUHJvdG9jb2w6OkVycm9yU3RyaW5n
T3I8U3RyaW5nPiBJbnNwZWN0b3JDYW52YXNBZ2VudDo6cmVxdWVzdFNoYWRlclNvdXJjZShjb25z
dCBQcm90b2NvbDo6Q2FudmFzOjpQcm9ncmFtSWQmIHByb2dyYW1JZCwgUHJvdG9jb2w6OkNhbnZh
czo6U2hhZGVyVHlwZSBzaGFkZXJUeXBlKQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBl
cnJvclN0cmluZzsKKwogICAgIGF1dG8gaW5zcGVjdG9yUHJvZ3JhbSA9IGFzc2VydEluc3BlY3Rv
clByb2dyYW0oZXJyb3JTdHJpbmcsIHByb2dyYW1JZCk7CiAgICAgaWYgKCFpbnNwZWN0b3JQcm9n
cmFtKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJv
clN0cmluZyk7CiAKLSAgICBhdXRvIHNoYWRlclR5cGUgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpJ
bnNwZWN0b3JIZWxwZXJzOjpwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90
b2NvbDo6Q2FudmFzOjpTaGFkZXJUeXBlPihzaGFkZXJUeXBlU3RyaW5nKTsKLSAgICBpZiAoIXNo
YWRlclR5cGUpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSBtYWtlU3RyaW5nKCJVbmtub3duIHNo
YWRlclR5cGU6ICJfcywgc2hhZGVyVHlwZVN0cmluZyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
CisgICAgYXV0byBzb3VyY2UgPSBpbnNwZWN0b3JQcm9ncmFtLT5yZXF1ZXN0U2hhZGVyU291cmNl
KHNoYWRlclR5cGUpOworICAgIGlmICghc291cmNlKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoIk1pc3Npbmcgc2hhZGVyIG9mIGdpdmVuIHNoYWRlclR5cGUgZm9yIGdpdmVuIHByb2dy
YW1JZCJfcyk7CiAKLSAgICBhdXRvIHNvdXJjZSA9IGluc3BlY3RvclByb2dyYW0tPnJlcXVlc3RT
aGFkZXJTb3VyY2Uoc2hhZGVyVHlwZS52YWx1ZSgpKTsKLSAgICBpZiAoIXNvdXJjZSkgewotICAg
ICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIHNoYWRlciBvZiBnaXZlbiBzaGFkZXJUeXBlIGZv
ciBnaXZlbiBwcm9ncmFtSWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAqb3V0
U291cmNlID0gc291cmNlOworICAgIHJldHVybiBzb3VyY2U7CiB9CiAKLXZvaWQgSW5zcGVjdG9y
Q2FudmFzQWdlbnQ6OnVwZGF0ZVNoYWRlcihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0
IFN0cmluZyYgcHJvZ3JhbUlkLCBjb25zdCBTdHJpbmcmIHNoYWRlclR5cGVTdHJpbmcsIGNvbnN0
IFN0cmluZyYgc291cmNlKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9y
Q2FudmFzQWdlbnQ6OnVwZGF0ZVNoYWRlcihjb25zdCBQcm90b2NvbDo6Q2FudmFzOjpQcm9ncmFt
SWQmIHByb2dyYW1JZCwgUHJvdG9jb2w6OkNhbnZhczo6U2hhZGVyVHlwZSBzaGFkZXJUeXBlLCBj
b25zdCBTdHJpbmcmIHNvdXJjZSkKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JT
dHJpbmc7CisKICAgICBhdXRvIGluc3BlY3RvclByb2dyYW0gPSBhc3NlcnRJbnNwZWN0b3JQcm9n
cmFtKGVycm9yU3RyaW5nLCBwcm9ncmFtSWQpOwogICAgIGlmICghaW5zcGVjdG9yUHJvZ3JhbSkK
LSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJp
bmcpOwogCi0gICAgYXV0byBzaGFkZXJUeXBlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6SW5zcGVj
dG9ySGVscGVyczo6cGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkNhbnZhczo6U2hhZGVyVHlwZT4oc2hhZGVyVHlwZVN0cmluZyk7Ci0gICAgaWYgKCFzaGFkZXJU
eXBlKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gbWFrZVN0cmluZygiVW5rbm93biBzaGFkZXJU
eXBlOiAiX3MsIHNoYWRlclR5cGVTdHJpbmcpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAg
IGlmICghaW5zcGVjdG9yUHJvZ3JhbS0+dXBkYXRlU2hhZGVyKHNoYWRlclR5cGUsIHNvdXJjZSkp
CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiRmFpbGVkIHRvIHVwZGF0ZSBzaGFkZXIg
b2YgZ2l2ZW4gc2hhZGVyVHlwZSBmb3IgZ2l2ZW4gcHJvZ3JhbUlkIl9zKTsKIAotICAgIGlmICgh
aW5zcGVjdG9yUHJvZ3JhbS0+dXBkYXRlU2hhZGVyKHNoYWRlclR5cGUudmFsdWUoKSwgc291cmNl
KSkKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiRmFpbGVkIHRvIHVwZGF0ZSBzaGFkZXIgb2YgZ2l2
ZW4gc2hhZGVyVHlwZSBmb3IgZ2l2ZW4gcHJvZ3JhbUlkIl9zOworICAgIHJldHVybiB7IH07CiB9
CiAKICNpZiBFTkFCTEUoV0VCR0wpCi12b2lkIEluc3BlY3RvckNhbnZhc0FnZW50OjpzZXRTaGFk
ZXJQcm9ncmFtRGlzYWJsZWQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcm
IHByb2dyYW1JZCwgYm9vbCBkaXNhYmxlZCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+
IEluc3BlY3RvckNhbnZhc0FnZW50OjpzZXRTaGFkZXJQcm9ncmFtRGlzYWJsZWQoY29uc3QgUHJv
dG9jb2w6OkNhbnZhczo6UHJvZ3JhbUlkJiBwcm9ncmFtSWQsIGJvb2wgZGlzYWJsZWQpCiB7Cisg
ICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAgICAgYXV0byBpbnNwZWN0
b3JQcm9ncmFtID0gYXNzZXJ0SW5zcGVjdG9yUHJvZ3JhbShlcnJvclN0cmluZywgcHJvZ3JhbUlk
KTsKICAgICBpZiAoIWluc3BlY3RvclByb2dyYW0pCi0gICAgICAgIHJldHVybjsKKyAgICAgICAg
cmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgIGluc3BlY3RvclByb2dy
YW0tPnNldERpc2FibGVkKGRpc2FibGVkKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQg
SW5zcGVjdG9yQ2FudmFzQWdlbnQ6OnNldFNoYWRlclByb2dyYW1IaWdobGlnaHRlZChFcnJvclN0
cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgcHJvZ3JhbUlkLCBib29sIGhpZ2hsaWdo
dGVkKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yQ2FudmFzQWdlbnQ6
OnNldFNoYWRlclByb2dyYW1IaWdobGlnaHRlZChjb25zdCBQcm90b2NvbDo6Q2FudmFzOjpQcm9n
cmFtSWQmIHByb2dyYW1JZCwgYm9vbCBoaWdobGlnaHRlZCkKIHsKKyAgICBQcm90b2NvbDo6RXJy
b3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBhdXRvIGluc3BlY3RvclByb2dyYW0gPSBhc3Nl
cnRJbnNwZWN0b3JQcm9ncmFtKGVycm9yU3RyaW5nLCBwcm9ncmFtSWQpOwogICAgIGlmICghaW5z
cGVjdG9yUHJvZ3JhbSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoZXJyb3JTdHJpbmcpOwogCiAgICAgaW5zcGVjdG9yUHJvZ3JhbS0+c2V0SGlnaGxpZ2h0
ZWQoaGlnaGxpZ2h0ZWQpOworCisgICAgcmV0dXJuIHsgfTsKIH0KICNlbmRpZiAvLyBFTkFCTEUo
V0VCR0wpCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKSB8fCBFTkFCTEUoV0VCR1BVKQpAQCAtNDEz
LDcgKzQzMCw3IEBAIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmRpZENyZWF0ZUNhbnZhc1Jl
bmRlcmluZ0NvbnRleHQoQ2FudmFzUmVuZGVyaW5nQ29udGV4CiAgICAgaWYgKG1fcmVjb3JkaW5n
QXV0b0NhcHR1cmVGcmFtZUNvdW50KSB7CiAgICAgICAgIFJlY29yZGluZ09wdGlvbnMgcmVjb3Jk
aW5nT3B0aW9uczsKICAgICAgICAgcmVjb3JkaW5nT3B0aW9ucy5mcmFtZUNvdW50ID0gbV9yZWNv
cmRpbmdBdXRvQ2FwdHVyZUZyYW1lQ291bnQudmFsdWUoKTsKLSAgICAgICAgc3RhcnRSZWNvcmRp
bmcoaW5zcGVjdG9yQ2FudmFzLCBJbnNwZWN0b3I6OlByb3RvY29sOjpSZWNvcmRpbmc6OkluaXRp
YXRvcjo6QXV0b0NhcHR1cmUsIFdURk1vdmUocmVjb3JkaW5nT3B0aW9ucykpOworICAgICAgICBz
dGFydFJlY29yZGluZyhpbnNwZWN0b3JDYW52YXMsIFByb3RvY29sOjpSZWNvcmRpbmc6OkluaXRp
YXRvcjo6QXV0b0NhcHR1cmUsIFdURk1vdmUocmVjb3JkaW5nT3B0aW9ucykpOwogICAgIH0KIH0K
IApAQCAtNTczLDcgKzU5MCw3IEBAIHZvaWQgSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmNvbnNvbGVT
dGFydFJlY29yZGluZ0NhbnZhcyhDYW52YXNSZW5kZXJpbmdDb250ZXh0JiBjCiAgICAgICAgIGlm
IChKU0M6OkpTVmFsdWUgb3B0aW9uTmFtZSA9IG9wdGlvbnMtPmdldCgmZXhlYywgSlNDOjpJZGVu
dGlmaWVyOjpmcm9tU3RyaW5nKHZtLCAibmFtZSIpKSkKICAgICAgICAgICAgIHJlY29yZGluZ09w
dGlvbnMubmFtZSA9IG9wdGlvbk5hbWUudG9XVEZTdHJpbmcoJmV4ZWMpOwogICAgIH0KLSAgICBz
dGFydFJlY29yZGluZygqaW5zcGVjdG9yQ2FudmFzLCBJbnNwZWN0b3I6OlByb3RvY29sOjpSZWNv
cmRpbmc6OkluaXRpYXRvcjo6Q29uc29sZSwgV1RGTW92ZShyZWNvcmRpbmdPcHRpb25zKSk7Cisg
ICAgc3RhcnRSZWNvcmRpbmcoKmluc3BlY3RvckNhbnZhcywgUHJvdG9jb2w6OlJlY29yZGluZzo6
SW5pdGlhdG9yOjpDb25zb2xlLCBXVEZNb3ZlKHJlY29yZGluZ09wdGlvbnMpKTsKIH0KIAogdm9p
ZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6Y29uc29sZVN0b3BSZWNvcmRpbmdDYW52YXMoQ2FudmFz
UmVuZGVyaW5nQ29udGV4dCYgY29udGV4dCkKQEAgLTY5OCw3ICs3MTUsNyBAQCB2b2lkIEluc3Bl
Y3RvckNhbnZhc0FnZW50Ojp3aWxsRGVzdHJveVdlYkdQVVBpcGVsaW5lKFdlYkdQVVBpcGVsaW5l
JiBwaXBlbGluZSkKIH0KICNlbmRpZiAvLyBFTkFCTEUoV0VCR1BVKQogCi12b2lkIEluc3BlY3Rv
ckNhbnZhc0FnZW50OjpzdGFydFJlY29yZGluZyhJbnNwZWN0b3JDYW52YXMmIGluc3BlY3RvckNh
bnZhcywgSW5zcGVjdG9yOjpQcm90b2NvbDo6UmVjb3JkaW5nOjpJbml0aWF0b3IgaW5pdGlhdG9y
LCBSZWNvcmRpbmdPcHRpb25zJiYgcmVjb3JkaW5nT3B0aW9ucykKK3ZvaWQgSW5zcGVjdG9yQ2Fu
dmFzQWdlbnQ6OnN0YXJ0UmVjb3JkaW5nKEluc3BlY3RvckNhbnZhcyYgaW5zcGVjdG9yQ2FudmFz
LCBQcm90b2NvbDo6UmVjb3JkaW5nOjpJbml0aWF0b3IgaW5pdGlhdG9yLCBSZWNvcmRpbmdPcHRp
b25zJiYgcmVjb3JkaW5nT3B0aW9ucykKIHsKICAgICBhdXRvKiBjb250ZXh0ID0gaW5zcGVjdG9y
Q2FudmFzLmNhbnZhc0NvbnRleHQoKTsKICAgICBBU1NFUlQoY29udGV4dCk7CkBAIC04NDAsNyAr
ODU3LDcgQEAgdm9pZCBJbnNwZWN0b3JDYW52YXNBZ2VudDo6dW5iaW5kQ2FudmFzKEluc3BlY3Rv
ckNhbnZhcyYgaW5zcGVjdG9yQ2FudmFzKQogICAgICAgICBtX2NhbnZhc0Rlc3Ryb3llZFRpbWVy
LnN0YXJ0T25lU2hvdCgwX3MpOwogfQogCi1SZWZQdHI8SW5zcGVjdG9yQ2FudmFzPiBJbnNwZWN0
b3JDYW52YXNBZ2VudDo6YXNzZXJ0SW5zcGVjdG9yQ2FudmFzKEVycm9yU3RyaW5nJiBlcnJvclN0
cmluZywgY29uc3QgU3RyaW5nJiBjYW52YXNJZCkKK1JlZlB0cjxJbnNwZWN0b3JDYW52YXM+IElu
c3BlY3RvckNhbnZhc0FnZW50Ojphc3NlcnRJbnNwZWN0b3JDYW52YXMoUHJvdG9jb2w6OkVycm9y
U3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBjYW52YXNJZCkKIHsKICAgICBhdXRv
IGluc3BlY3RvckNhbnZhcyA9IG1faWRlbnRpZmllclRvSW5zcGVjdG9yQ2FudmFzLmdldChjYW52
YXNJZCk7CiAgICAgaWYgKCFpbnNwZWN0b3JDYW52YXMpIHsKQEAgLTg4NSw3ICs5MDIsNyBAQCB2
b2lkIEluc3BlY3RvckNhbnZhc0FnZW50Ojp1bmJpbmRQcm9ncmFtKEluc3BlY3RvclNoYWRlclBy
b2dyYW0mIGluc3BlY3RvclByb2dyYQogICAgICAgICBtX3Byb2dyYW1EZXN0cm95ZWRUaW1lci5z
dGFydE9uZVNob3QoMF9zKTsKIH0KIAotUmVmUHRyPEluc3BlY3RvclNoYWRlclByb2dyYW0+IElu
c3BlY3RvckNhbnZhc0FnZW50Ojphc3NlcnRJbnNwZWN0b3JQcm9ncmFtKEVycm9yU3RyaW5nJiBl
cnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBwcm9ncmFtSWQpCitSZWZQdHI8SW5zcGVjdG9yU2hh
ZGVyUHJvZ3JhbT4gSW5zcGVjdG9yQ2FudmFzQWdlbnQ6OmFzc2VydEluc3BlY3RvclByb2dyYW0o
UHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBwcm9ncmFt
SWQpCiB7CiAgICAgYXV0byBpbnNwZWN0b3JQcm9ncmFtID0gbV9pZGVudGlmaWVyVG9JbnNwZWN0
b3JQcm9ncmFtLmdldChwcm9ncmFtSWQpOwogICAgIGlmICghaW5zcGVjdG9yUHJvZ3JhbSkgewpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDYW52
YXNBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JDYW52
YXNBZ2VudC5oCmluZGV4IDBlZjFhZWZiNjQ3ZWFkOTliN2QwZWIyNDNmZDBiNDA4Y2U0NWI2MGYu
Ljg2YmRiNTEyNTY5YTMxMWY3YTI1MDg5NWU4ZmZiYzlkZDllYmNkYzAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yQ2FudmFzQWdlbnQuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckNhbnZhc0FnZW50LmgK
QEAgLTU3LDQzICs1Nyw0MSBAQCBjbGFzcyBXZWJHUFVTd2FwQ2hhaW47CiAjZW5kaWYgLy8gRU5B
QkxFKFdFQkdQVSkKICNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpIHx8IEVOQUJMRShXRUJHUFUpCiAK
LXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCiBjbGFzcyBJbnNwZWN0b3JDYW52YXNBZ2Vu
dCBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3JBZ2VudEJhc2UsIHB1YmxpYyBJbnNwZWN0b3I6OkNh
bnZhc0JhY2tlbmREaXNwYXRjaGVySGFuZGxlciwgcHVibGljIENhbnZhc09ic2VydmVyLCBwdWJs
aWMgQ2FuTWFrZVdlYWtQdHI8SW5zcGVjdG9yQ2FudmFzQWdlbnQ+IHsKICAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShJbnNwZWN0b3JDYW52YXNBZ2VudCk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CiBwdWJsaWM6CiAgICAgSW5zcGVjdG9yQ2FudmFzQWdlbnQoUGFnZUFnZW50Q29udGV4
dCYpOwotICAgIH5JbnNwZWN0b3JDYW52YXNBZ2VudCgpIG92ZXJyaWRlOworICAgIH5JbnNwZWN0
b3JDYW52YXNBZ2VudCgpOwogCiAgICAgLy8gSW5zcGVjdG9yQWdlbnRCYXNlCi0gICAgdm9pZCBk
aWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9udGVuZFJvdXRlciosIElu
c3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXIqKSBvdmVycmlkZTsKLSAgICB2b2lkIHdpbGxEZXN0
cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlzY29ubmVjdFJlYXNvbikgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCBkaXNjYXJkQWdlbnQoKSBvdmVycmlkZTsKKyAgICB2b2lkIGRpZENyZWF0
ZUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kUm91dGVyKiwgSW5zcGVjdG9y
OjpCYWNrZW5kRGlzcGF0Y2hlciopOworICAgIHZvaWQgd2lsbERlc3Ryb3lGcm9udGVuZEFuZEJh
Y2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKTsKKyAgICB2b2lkIGRpc2NhcmRBZ2Vu
dCgpOwogCiAgICAgLy8gQ2FudmFzQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyCi0gICAgdm9pZCBl
bmFibGUoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2b2lkIGRpc2FibGUoRXJyb3JTdHJp
bmcmKSBvdmVycmlkZTsKLSAgICB2b2lkIHJlcXVlc3ROb2RlKEVycm9yU3RyaW5nJiwgY29uc3Qg
U3RyaW5nJiBjYW52YXNJZCwgaW50KiBub2RlSWQpIG92ZXJyaWRlOwotICAgIHZvaWQgcmVxdWVz
dENvbnRlbnQoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGNhbnZhc0lkLCBTdHJpbmcqIGNv
bnRlbnQpIG92ZXJyaWRlOwotICAgIHZvaWQgcmVxdWVzdENsaWVudE5vZGVzKEVycm9yU3RyaW5n
JiwgY29uc3QgU3RyaW5nJiBjYW52YXNJZCwgUmVmUHRyPEpTT046OkFycmF5T2Y8aW50Pj4mKSBv
dmVycmlkZTsKLSAgICB2b2lkIHJlc29sdmVDb250ZXh0KEVycm9yU3RyaW5nJiwgY29uc3QgU3Ry
aW5nJiBjYW52YXNJZCwgY29uc3QgU3RyaW5nKiBvYmplY3RHcm91cCwgUmVmUHRyPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mKSBvdmVycmlkZTsKLSAgICB2b2lk
IHNldFJlY29yZGluZ0F1dG9DYXB0dXJlRnJhbWVDb3VudChFcnJvclN0cmluZyYsIGludCBjb3Vu
dCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzdGFydFJlY29yZGluZyhFcnJvclN0cmluZyYsIGNvbnN0
IFN0cmluZyYgY2FudmFzSWQsIGNvbnN0IGludCogZnJhbWVDb3VudCwgY29uc3QgaW50KiBtZW1v
cnlMaW1pdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzdG9wUmVjb3JkaW5nKEVycm9yU3RyaW5nJiwg
Y29uc3QgU3RyaW5nJiBjYW52YXNJZCkgb3ZlcnJpZGU7CisgICAgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBlbmFibGUoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29s
OjpFcnJvclN0cmluZ09yPHZvaWQ+IGRpc2FibGUoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29s
OjpFcnJvclN0cmluZ09yPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkPiByZXF1ZXN0
Tm9kZShjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpDYW52YXM6OkNhbnZhc0lkJik7CisgICAg
SW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxTdHJpbmc+IHJlcXVlc3RDb250ZW50
KGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6Q2FudmFzSWQmKTsKKyAgICBJbnNw
ZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkPj4+IHJlcXVlc3RDbGllbnROb2Rlcyhjb25zdCBJbnNw
ZWN0b3I6OlByb3RvY29sOjpDYW52YXM6OkNhbnZhc0lkJik7CisgICAgSW5zcGVjdG9yOjpQcm90
b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6UmVt
b3RlT2JqZWN0Pj4gcmVzb2x2ZUNvbnRleHQoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6Q2Fu
dmFzOjpDYW52YXNJZCYsIGNvbnN0IFN0cmluZyYgb2JqZWN0R3JvdXApOworICAgIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc2V0UmVjb3JkaW5nQXV0b0NhcHR1cmVG
cmFtZUNvdW50KGludCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2
b2lkPiBzdGFydFJlY29yZGluZyhjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpDYW52YXM6OkNh
bnZhc0lkJiwgT3B0aW9uYWw8aW50PiYmIGZyYW1lQ291bnQsIE9wdGlvbmFsPGludD4mJiBtZW1v
cnlMaW1pdCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBz
dG9wUmVjb3JkaW5nKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6Q2FudmFzSWQm
KTsKICNpZiBFTkFCTEUoV0VCR0wpIHx8IEVOQUJMRShXRUJHUFUpCi0gICAgdm9pZCByZXF1ZXN0
U2hhZGVyU291cmNlKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBwcm9ncmFtSWQsIGNvbnN0
IFN0cmluZyYgc2hhZGVyVHlwZSwgU3RyaW5nKiBzb3VyY2UpIG92ZXJyaWRlOwotICAgIHZvaWQg
dXBkYXRlU2hhZGVyKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBwcm9ncmFtSWQsIGNvbnN0
IFN0cmluZyYgc2hhZGVyVHlwZSwgY29uc3QgU3RyaW5nJiBzb3VyY2UpIG92ZXJyaWRlOworICAg
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8U3RyaW5nPiByZXF1ZXN0U2hhZGVy
U291cmNlKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6UHJvZ3JhbUlkJiwgSW5z
cGVjdG9yOjpQcm90b2NvbDo6Q2FudmFzOjpTaGFkZXJUeXBlKTsKKyAgICBJbnNwZWN0b3I6OlBy
b3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHVwZGF0ZVNoYWRlcihjb25zdCBJbnNwZWN0b3I6
OlByb3RvY29sOjpDYW52YXM6OlByb2dyYW1JZCYsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZh
czo6U2hhZGVyVHlwZSwgY29uc3QgU3RyaW5nJiBzb3VyY2UpOwogI2lmIEVOQUJMRShXRUJHTCkK
LSAgICB2b2lkIHNldFNoYWRlclByb2dyYW1EaXNhYmxlZChFcnJvclN0cmluZyYsIGNvbnN0IFN0
cmluZyYgcHJvZ3JhbUlkLCBib29sIGRpc2FibGVkKSBvdmVycmlkZTsKLSAgICB2b2lkIHNldFNo
YWRlclByb2dyYW1IaWdobGlnaHRlZChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgcHJvZ3Jh
bUlkLCBib29sIGhpZ2hsaWdodGVkKSBvdmVycmlkZTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29s
OjpFcnJvclN0cmluZ09yPHZvaWQ+IHNldFNoYWRlclByb2dyYW1EaXNhYmxlZChjb25zdCBJbnNw
ZWN0b3I6OlByb3RvY29sOjpDYW52YXM6OlByb2dyYW1JZCYsIGJvb2wgZGlzYWJsZWQpOworICAg
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc2V0U2hhZGVyUHJvZ3Jh
bUhpZ2hsaWdodGVkKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNhbnZhczo6UHJvZ3JhbUlk
JiwgYm9vbCBoaWdobGlnaHRlZCk7CiAjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKQogI2VuZGlmIC8v
IEVOQUJMRShXRUJHTCkgfHwgRU5BQkxFKFdFQkdQVSkKIAogICAgIC8vIENhbnZhc09ic2VydmVy
Ci0gICAgdm9pZCBjYW52YXNDaGFuZ2VkKENhbnZhc0Jhc2UmLCBjb25zdCBGbG9hdFJlY3QmKSBv
dmVycmlkZTsKLSAgICB2b2lkIGNhbnZhc1Jlc2l6ZWQoQ2FudmFzQmFzZSYpIG92ZXJyaWRlIHsg
fQotICAgIHZvaWQgY2FudmFzRGVzdHJveWVkKENhbnZhc0Jhc2UmKSBvdmVycmlkZTsKKyAgICB2
b2lkIGNhbnZhc0NoYW5nZWQoQ2FudmFzQmFzZSYsIGNvbnN0IEZsb2F0UmVjdCYpOworICAgIHZv
aWQgY2FudmFzUmVzaXplZChDYW52YXNCYXNlJikgeyB9CisgICAgdm9pZCBjYW52YXNEZXN0cm95
ZWQoQ2FudmFzQmFzZSYpOwogCiAgICAgLy8gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uCiAgICAg
dm9pZCBmcmFtZU5hdmlnYXRlZChGcmFtZSYpOwpAQCAtMTM4LDcgKzEzNiw3IEBAIHByaXZhdGU6
CiAgICAgSW5zcGVjdG9yQ2FudmFzJiBiaW5kQ2FudmFzKFdlYkdQVURldmljZSYsIGJvb2wgY2Fw
dHVyZUJhY2t0cmFjZSk7CiAjZW5kaWYgLy8gRU5BQkxFKFdFQkdQVSkKICAgICB2b2lkIHVuYmlu
ZENhbnZhcyhJbnNwZWN0b3JDYW52YXMmKTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yQ2FudmFzPiBh
c3NlcnRJbnNwZWN0b3JDYW52YXMoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGNhbnZhc0lk
KTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yQ2FudmFzPiBhc3NlcnRJbnNwZWN0b3JDYW52YXMoSW5z
cGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGNhbnZhc0lkKTsK
ICAgICBSZWZQdHI8SW5zcGVjdG9yQ2FudmFzPiBmaW5kSW5zcGVjdG9yQ2FudmFzKENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQmKTsKICNpZiBFTkFCTEUoV0VCR1BVKQogICAgIFJlZlB0cjxJbnNwZWN0
b3JDYW52YXM+IGZpbmRJbnNwZWN0b3JDYW52YXMoV2ViR1BVRGV2aWNlJik7CkBAIC0xNDYsNyAr
MTQ0LDcgQEAgcHJpdmF0ZToKIAogI2lmIEVOQUJMRShXRUJHTCkgfHwgRU5BQkxFKFdFQkdQVSkK
ICAgICB2b2lkIHVuYmluZFByb2dyYW0oSW5zcGVjdG9yU2hhZGVyUHJvZ3JhbSYpOwotICAgIFJl
ZlB0cjxJbnNwZWN0b3JTaGFkZXJQcm9ncmFtPiBhc3NlcnRJbnNwZWN0b3JQcm9ncmFtKEVycm9y
U3RyaW5nJiwgY29uc3QgU3RyaW5nJiBwcm9ncmFtSWQpOworICAgIFJlZlB0cjxJbnNwZWN0b3JT
aGFkZXJQcm9ncmFtPiBhc3NlcnRJbnNwZWN0b3JQcm9ncmFtKEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBwcm9ncmFtSWQpOwogI2lmIEVOQUJMRShXRUJH
TCkKICAgICBSZWZQdHI8SW5zcGVjdG9yU2hhZGVyUHJvZ3JhbT4gZmluZEluc3BlY3RvclByb2dy
YW0oV2ViR0xQcm9ncmFtJik7CiAjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01BZ2VudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmNwcAppbmRl
eCA4MzlhNThiNTQ4ODU0ZGU3NTc3MGQyNjMzZDhkNTlhZjU5ZjI0MTEyLi42NGFiZTA0YWEwNTYz
MWNlOWFmNjdmMWE2NDRiNmIzZDJlNmEzNzZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmNwcApAQCAtMTI5LDQwICsxMjks
MzkgQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIHN0YXRpYyBjb25zdCBzaXplX3QgbWF4
VGV4dFNpemUgPSAxMDAwMDsKIHN0YXRpYyBjb25zdCBVQ2hhciBlbGxpcHNpc1VDaGFyW10gPSB7
IDB4MjAyNiwgMCB9OwogCi1zdGF0aWMgQ29sb3IgcGFyc2VDb2xvcihjb25zdCBKU09OOjpPYmpl
Y3QqIGNvbG9yT2JqZWN0KQorc3RhdGljIENvbG9yIHBhcnNlQ29sb3IoUmVmUHRyPEpTT046Ok9i
amVjdD4mJiBjb2xvck9iamVjdCkKIHsKICAgICBpZiAoIWNvbG9yT2JqZWN0KQogICAgICAgICBy
ZXR1cm4gQ29sb3I6OnRyYW5zcGFyZW50QmxhY2s7CiAKLSAgICBpbnQgciA9IDA7Ci0gICAgaW50
IGcgPSAwOwotICAgIGludCBiID0gMDsKLSAgICBpZiAoIWNvbG9yT2JqZWN0LT5nZXRJbnRlZ2Vy
KCJyIiwgcikgfHwgIWNvbG9yT2JqZWN0LT5nZXRJbnRlZ2VyKCJnIiwgZykgfHwgIWNvbG9yT2Jq
ZWN0LT5nZXRJbnRlZ2VyKCJiIiwgYikpCisgICAgYXV0byByID0gY29sb3JPYmplY3QtPmdldElu
dGVnZXIoUHJvdG9jb2w6OkRPTTo6UkdCQUNvbG9yOjpyS2V5KTsKKyAgICBhdXRvIGcgPSBjb2xv
ck9iamVjdC0+Z2V0SW50ZWdlcihQcm90b2NvbDo6RE9NOjpSR0JBQ29sb3I6OmdLZXkpOworICAg
IGF1dG8gYiA9IGNvbG9yT2JqZWN0LT5nZXRJbnRlZ2VyKFByb3RvY29sOjpET006OlJHQkFDb2xv
cjo6YktleSk7CisgICAgaWYgKCFyIHx8ICFnIHx8ICFiKQogICAgICAgICByZXR1cm4gQ29sb3I6
OnRyYW5zcGFyZW50QmxhY2s7CiAKLSAgICBkb3VibGUgYSA9IDEuMDsKLSAgICBpZiAoIWNvbG9y
T2JqZWN0LT5nZXREb3VibGUoImEiLCBhKSkKLSAgICAgICAgcmV0dXJuIGNsYW1wVG9Db21wb25l
bnRCeXRlczxTUkdCQT4ociwgZywgYik7Ci0gICAgcmV0dXJuIGNsYW1wVG9Db21wb25lbnRCeXRl
czxTUkdCQT4ociwgZywgYiwgY29udmVydFRvQ29tcG9uZW50Qnl0ZShhKSk7CisgICAgYXV0byBh
ID0gY29sb3JPYmplY3QtPmdldERvdWJsZShQcm90b2NvbDo6RE9NOjpSR0JBQ29sb3I6OmFLZXkp
OworICAgIGlmICghYSkKKyAgICAgICAgcmV0dXJuIGNsYW1wVG9Db21wb25lbnRCeXRlczxTUkdC
QT4oKnIsICpnLCAqYik7CisgICAgcmV0dXJuIGNsYW1wVG9Db21wb25lbnRCeXRlczxTUkdCQT4o
KnIsICpnLCAqYiwgY29udmVydFRvQ29tcG9uZW50Qnl0ZSgqYSkpOwogfQogCi1zdGF0aWMgQ29s
b3IgcGFyc2VDb25maWdDb2xvcihjb25zdCBTdHJpbmcmIGZpZWxkTmFtZSwgY29uc3QgSlNPTjo6
T2JqZWN0KiBjb25maWdPYmplY3QpCitzdGF0aWMgQ29sb3IgcGFyc2VDb25maWdDb2xvcihjb25z
dCBTdHJpbmcmIGZpZWxkTmFtZSwgSlNPTjo6T2JqZWN0JiBjb25maWdPYmplY3QpCiB7Ci0gICAg
UmVmUHRyPEpTT046Ok9iamVjdD4gY29sb3JPYmplY3Q7Ci0gICAgY29uZmlnT2JqZWN0LT5nZXRP
YmplY3QoZmllbGROYW1lLCBjb2xvck9iamVjdCk7Ci0KLSAgICByZXR1cm4gcGFyc2VDb2xvcihj
b2xvck9iamVjdC5nZXQoKSk7CisgICAgcmV0dXJuIHBhcnNlQ29sb3IoY29uZmlnT2JqZWN0Lmdl
dE9iamVjdChmaWVsZE5hbWUpKTsKIH0KIAotc3RhdGljIGJvb2wgcGFyc2VRdWFkKGNvbnN0IEpT
T046OkFycmF5JiBxdWFkQXJyYXksIEZsb2F0UXVhZCogcXVhZCkKK3N0YXRpYyBib29sIHBhcnNl
UXVhZChSZWY8SlNPTjo6QXJyYXk+JiYgcXVhZEFycmF5LCBGbG9hdFF1YWQqIHF1YWQpCiB7CiAg
ICAgY29uc3Qgc2l6ZV90IGNvb3JkaW5hdGVzSW5RdWFkID0gODsKICAgICBkb3VibGUgY29vcmRp
bmF0ZXNbY29vcmRpbmF0ZXNJblF1YWRdOwotICAgIGlmIChxdWFkQXJyYXkubGVuZ3RoKCkgIT0g
Y29vcmRpbmF0ZXNJblF1YWQpCisgICAgaWYgKHF1YWRBcnJheS0+bGVuZ3RoKCkgIT0gY29vcmRp
bmF0ZXNJblF1YWQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGNvb3JkaW5hdGVzSW5RdWFkOyArK2kpIHsKLSAgICAgICAgaWYgKCFxdWFkQXJyYXku
Z2V0KGkpLT5hc0RvdWJsZSgqKGNvb3JkaW5hdGVzICsgaSkpKQorICAgICAgICBhdXRvIGNvb3Jk
aW5hdGUgPSBxdWFkQXJyYXktPmdldChpKS0+YXNEb3VibGUoKTsKKyAgICAgICAgaWYgKCFjb29y
ZGluYXRlKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBjb29yZGluYXRlc1tp
XSA9ICpjb29yZGluYXRlOwogICAgIH0KICAgICBxdWFkLT5zZXRQMShGbG9hdFBvaW50KGNvb3Jk
aW5hdGVzWzBdLCBjb29yZGluYXRlc1sxXSkpOwogICAgIHF1YWQtPnNldFAyKEZsb2F0UG9pbnQo
Y29vcmRpbmF0ZXNbMl0sIGNvb3JkaW5hdGVzWzNdKSk7CkBAIC0yNDMsNyArMjQyLDcgQEAgcHVi
bGljOgogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIGF1dG8qIG5vZGUgPSBkb3duY2Fz
dDxOb2RlPihldmVudC50YXJnZXQoKSk7Ci0gICAgICAgIGludCBub2RlSWQgPSBtX2RvbUFnZW50
LnB1c2hOb2RlUGF0aFRvRnJvbnRlbmQobm9kZSk7CisgICAgICAgIGF1dG8gbm9kZUlkID0gbV9k
b21BZ2VudC5wdXNoTm9kZVBhdGhUb0Zyb250ZW5kKG5vZGUpOwogICAgICAgICBpZiAoIW5vZGVJ
ZCkKICAgICAgICAgICAgIHJldHVybjsKIApAQCAtMzIwLDkgKzMxOSw5IEBAIHZvaWQgSW5zcGVj
dG9yRE9NQWdlbnQ6OndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlz
Y29ubmVjdFJlYXNvCiAgICAgbV9tb3VzZWRPdmVyTm9kZSA9IG51bGxwdHI7CiAgICAgbV9pbnNw
ZWN0ZWROb2RlID0gbnVsbHB0cjsKIAotICAgIEVycm9yU3RyaW5nIGlnbm9yZWQ7CisgICAgUHJv
dG9jb2w6OkVycm9yU3RyaW5nIGlnbm9yZWQ7CiAgICAgc2V0U2VhcmNoaW5nRm9yTm9kZShpZ25v
cmVkLCBmYWxzZSwgbnVsbHB0ciwgZmFsc2UpOwotICAgIGhpZGVIaWdobGlnaHQoaWdub3JlZCk7
CisgICAgaGlkZUhpZ2hsaWdodCgpOwogCiAgICAgbV9pbnN0cnVtZW50aW5nQWdlbnRzLnNldFBl
cnNpc3RlbnRET01BZ2VudChudWxscHRyKTsKICAgICBtX2RvY3VtZW50UmVxdWVzdGVkID0gZmFs
c2U7CkBAIC0zNzQsOSArMzczLDkgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6cmVsZWFzZURh
bmdsaW5nTm9kZXMoKQogICAgIG1fZGFuZ2xpbmdOb2RlVG9JZE1hcHMuY2xlYXIoKTsKIH0KIAot
aW50IEluc3BlY3RvckRPTUFnZW50OjpiaW5kKE5vZGUqIG5vZGUsIE5vZGVUb0lkTWFwKiBub2Rl
c01hcCkKK1Byb3RvY29sOjpET006Ok5vZGVJZCBJbnNwZWN0b3JET01BZ2VudDo6YmluZChOb2Rl
KiBub2RlLCBOb2RlVG9JZE1hcCogbm9kZXNNYXApCiB7Ci0gICAgaW50IGlkID0gbm9kZXNNYXAt
PmdldChub2RlKTsKKyAgICBhdXRvIGlkID0gbm9kZXNNYXAtPmdldChub2RlKTsKICAgICBpZiAo
aWQpCiAgICAgICAgIHJldHVybiBpZDsKICAgICBpZCA9IG1fbGFzdE5vZGVJZCsrOwpAQCAtMzg4
LDcgKzM4Nyw3IEBAIGludCBJbnNwZWN0b3JET01BZ2VudDo6YmluZChOb2RlKiBub2RlLCBOb2Rl
VG9JZE1hcCogbm9kZXNNYXApCiAKIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnVuYmluZChOb2Rl
KiBub2RlLCBOb2RlVG9JZE1hcCogbm9kZXNNYXApCiB7Ci0gICAgaW50IGlkID0gbm9kZXNNYXAt
PmdldChub2RlKTsKKyAgICBhdXRvIGlkID0gbm9kZXNNYXAtPmdldChub2RlKTsKICAgICBpZiAo
IWlkKQogICAgICAgICByZXR1cm47CiAKQEAgLTQyMiw3ICs0MjEsNyBAQCB2b2lkIEluc3BlY3Rv
ckRPTUFnZW50Ojp1bmJpbmQoTm9kZSogbm9kZSwgTm9kZVRvSWRNYXAqIG5vZGVzTWFwKQogICAg
IH0KIH0KIAotTm9kZSogSW5zcGVjdG9yRE9NQWdlbnQ6OmFzc2VydE5vZGUoRXJyb3JTdHJpbmcm
IGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkKQorTm9kZSogSW5zcGVjdG9yRE9NQWdlbnQ6OmFzc2Vy
dE5vZGUoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgUHJvdG9jb2w6OkRPTTo6
Tm9kZUlkIG5vZGVJZCkKIHsKICAgICBOb2RlKiBub2RlID0gbm9kZUZvcklkKG5vZGVJZCk7CiAg
ICAgaWYgKCFub2RlKSB7CkBAIC00MzIsNyArNDMxLDcgQEAgTm9kZSogSW5zcGVjdG9yRE9NQWdl
bnQ6OmFzc2VydE5vZGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkKQogICAg
IHJldHVybiBub2RlOwogfQogCi1Eb2N1bWVudCogSW5zcGVjdG9yRE9NQWdlbnQ6OmFzc2VydERv
Y3VtZW50KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJZCkKK0RvY3VtZW50KiBJ
bnNwZWN0b3JET01BZ2VudDo6YXNzZXJ0RG9jdW1lbnQoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBl
cnJvclN0cmluZywgUHJvdG9jb2w6OkRPTTo6Tm9kZUlkIG5vZGVJZCkKIHsKICAgICBOb2RlKiBu
b2RlID0gYXNzZXJ0Tm9kZShlcnJvclN0cmluZywgbm9kZUlkKTsKICAgICBpZiAoIW5vZGUpCkBA
IC00NDQsNyArNDQzLDcgQEAgRG9jdW1lbnQqIEluc3BlY3RvckRPTUFnZW50Ojphc3NlcnREb2N1
bWVudChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQKICAgICByZXR1cm4gZG93
bmNhc3Q8RG9jdW1lbnQ+KG5vZGUpOwogfQogCi1FbGVtZW50KiBJbnNwZWN0b3JET01BZ2VudDo6
YXNzZXJ0RWxlbWVudChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQpCitFbGVt
ZW50KiBJbnNwZWN0b3JET01BZ2VudDo6YXNzZXJ0RWxlbWVudChQcm90b2NvbDo6RXJyb3JTdHJp
bmcmIGVycm9yU3RyaW5nLCBQcm90b2NvbDo6RE9NOjpOb2RlSWQgbm9kZUlkKQogewogICAgIE5v
ZGUqIG5vZGUgPSBhc3NlcnROb2RlKGVycm9yU3RyaW5nLCBub2RlSWQpOwogICAgIGlmICghbm9k
ZSkKQEAgLTQ1Niw3ICs0NTUsNyBAQCBFbGVtZW50KiBJbnNwZWN0b3JET01BZ2VudDo6YXNzZXJ0
RWxlbWVudChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQpCiAgICAgcmV0dXJu
IGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpOwogfQogCi1Ob2RlKiBJbnNwZWN0b3JET01BZ2VudDo6
YXNzZXJ0RWRpdGFibGVOb2RlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJZCkK
K05vZGUqIEluc3BlY3RvckRPTUFnZW50Ojphc3NlcnRFZGl0YWJsZU5vZGUoUHJvdG9jb2w6OkVy
cm9yU3RyaW5nJiBlcnJvclN0cmluZywgUHJvdG9jb2w6OkRPTTo6Tm9kZUlkIG5vZGVJZCkKIHsK
ICAgICBOb2RlKiBub2RlID0gYXNzZXJ0Tm9kZShlcnJvclN0cmluZywgbm9kZUlkKTsKICAgICBp
ZiAoIW5vZGUpCkBAIC00NzIsNyArNDcxLDcgQEAgTm9kZSogSW5zcGVjdG9yRE9NQWdlbnQ6OmFz
c2VydEVkaXRhYmxlTm9kZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQKICAg
ICByZXR1cm4gbm9kZTsKIH0KIAotRWxlbWVudCogSW5zcGVjdG9yRE9NQWdlbnQ6OmFzc2VydEVk
aXRhYmxlRWxlbWVudChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQpCitFbGVt
ZW50KiBJbnNwZWN0b3JET01BZ2VudDo6YXNzZXJ0RWRpdGFibGVFbGVtZW50KFByb3RvY29sOjpF
cnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIFByb3RvY29sOjpET006Ok5vZGVJZCBub2RlSWQpCiB7
CiAgICAgTm9kZSogbm9kZSA9IGFzc2VydEVkaXRhYmxlTm9kZShlcnJvclN0cmluZywgbm9kZUlk
KTsKICAgICBpZiAoIW5vZGUpCkBAIC00ODQsMjcgKzQ4MywyNyBAQCBFbGVtZW50KiBJbnNwZWN0
b3JET01BZ2VudDo6YXNzZXJ0RWRpdGFibGVFbGVtZW50KEVycm9yU3RyaW5nJiBlcnJvclN0cmlu
ZywgaW50CiAgICAgcmV0dXJuIGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpOwogfQogCi12b2lkIElu
c3BlY3RvckRPTUFnZW50OjpnZXREb2N1bWVudChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIFJl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+JiByb290KQorUHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8UmVmPFByb3RvY29sOjpET006Ok5vZGU+PiBJbnNwZWN0b3JET01BZ2VudDo6
Z2V0RG9jdW1lbnQoKQogewogICAgIG1fZG9jdW1lbnRSZXF1ZXN0ZWQgPSB0cnVlOwogCi0gICAg
aWYgKCFtX2RvY3VtZW50KSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIkludGVybmFsIGVycm9y
OiBtaXNzaW5nIGRvY3VtZW50Il9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICgh
bV9kb2N1bWVudCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJJbnRlcm5hbCBlcnJv
cjogbWlzc2luZyBkb2N1bWVudCJfcyk7CiAKICAgICAvLyBSZXNldCBiYWNrZW5kIHN0YXRlLgog
ICAgIFJlZlB0cjxEb2N1bWVudD4gZG9jdW1lbnQgPSBtX2RvY3VtZW50OwogICAgIHJlc2V0KCk7
CiAgICAgbV9kb2N1bWVudCA9IGRvY3VtZW50OwogCi0gICAgcm9vdCA9IGJ1aWxkT2JqZWN0Rm9y
Tm9kZShtX2RvY3VtZW50LmdldCgpLCAyLCAmbV9kb2N1bWVudE5vZGVUb0lkTWFwKTsKKyAgICBh
dXRvIHJvb3QgPSBidWlsZE9iamVjdEZvck5vZGUobV9kb2N1bWVudC5nZXQoKSwgMiwgJm1fZG9j
dW1lbnROb2RlVG9JZE1hcCk7CiAKICAgICBpZiAobV9ub2RlVG9Gb2N1cykKICAgICAgICAgZm9j
dXNOb2RlKCk7CisKKyAgICByZXR1cm4gV1RGTW92ZShyb290KTsKIH0KIAotdm9pZCBJbnNwZWN0
b3JET01BZ2VudDo6cHVzaENoaWxkTm9kZXNUb0Zyb250ZW5kKGludCBub2RlSWQsIGludCBkZXB0
aCkKK3ZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnB1c2hDaGlsZE5vZGVzVG9Gcm9udGVuZChQcm90
b2NvbDo6RE9NOjpOb2RlSWQgbm9kZUlkLCBpbnQgZGVwdGgpCiB7CiAgICAgTm9kZSogbm9kZSA9
IG5vZGVGb3JJZChub2RlSWQpOwogICAgIGlmICghbm9kZSB8fCAobm9kZS0+bm9kZVR5cGUoKSAh
PSBOb2RlOjpFTEVNRU5UX05PREUgJiYgbm9kZS0+bm9kZVR5cGUoKSAhPSBOb2RlOjpET0NVTUVO
VF9OT0RFICYmIG5vZGUtPm5vZGVUeXBlKCkgIT0gTm9kZTo6RE9DVU1FTlRfRlJBR01FTlRfTk9E
RSkpCkBAIC01MTksNyArNTE4LDcgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6cHVzaENoaWxk
Tm9kZXNUb0Zyb250ZW5kKGludCBub2RlSWQsIGludCBkZXB0aCkKICAgICAgICAgZGVwdGgtLTsK
IAogICAgICAgICBmb3IgKG5vZGUgPSBpbm5lckZpcnN0Q2hpbGQobm9kZSk7IG5vZGU7IG5vZGUg
PSBpbm5lck5leHRTaWJsaW5nKG5vZGUpKSB7Ci0gICAgICAgICAgICBpbnQgY2hpbGROb2RlSWQg
PSBub2RlTWFwLT5nZXQobm9kZSk7CisgICAgICAgICAgICBhdXRvIGNoaWxkTm9kZUlkID0gbm9k
ZU1hcC0+Z2V0KG5vZGUpOwogICAgICAgICAgICAgQVNTRVJUKGNoaWxkTm9kZUlkKTsKICAgICAg
ICAgICAgIHB1c2hDaGlsZE5vZGVzVG9Gcm9udGVuZChjaGlsZE5vZGVJZCwgZGVwdGgpOwogICAg
ICAgICB9CkBAIC01NDEsMTggKzU0MCwxOCBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpkaXNj
YXJkQmluZGluZ3MoKQogICAgIG1fY2hpbGRyZW5SZXF1ZXN0ZWQuY2xlYXIoKTsKIH0KIAotaW50
IEluc3BlY3RvckRPTUFnZW50OjpwdXNoTm9kZVRvRnJvbnRlbmQoTm9kZSogbm9kZVRvUHVzaCkK
K1Byb3RvY29sOjpET006Ok5vZGVJZCBJbnNwZWN0b3JET01BZ2VudDo6cHVzaE5vZGVUb0Zyb250
ZW5kKE5vZGUqIG5vZGVUb1B1c2gpCiB7CiAgICAgaWYgKCFub2RlVG9QdXNoKQogICAgICAgICBy
ZXR1cm4gMDsKIAogICAgIC8vIEZJWE1FOiA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMjEzNDk5PiBX
ZWIgSW5zcGVjdG9yOiBhbGxvdyBET00gbm9kZXMgdG8gYmUgaW5zdHJ1bWVudGVkIGF0IGFueSBw
b2ludCwgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZSBtYWluIGRvY3VtZW50IGhhcyBhbHNvIGJl
ZW4gaW5zdHJ1bWVudGVkCiAKLSAgICBFcnJvclN0cmluZyBpZ25vcmVkOworICAgIFByb3RvY29s
OjpFcnJvclN0cmluZyBpZ25vcmVkOwogICAgIHJldHVybiBwdXNoTm9kZVRvRnJvbnRlbmQoaWdu
b3JlZCwgYm91bmROb2RlSWQoJm5vZGVUb1B1c2gtPmRvY3VtZW50KCkpLCBub2RlVG9QdXNoKTsK
IH0KIAotaW50IEluc3BlY3RvckRPTUFnZW50OjpwdXNoTm9kZVRvRnJvbnRlbmQoRXJyb3JTdHJp
bmcmIGVycm9yU3RyaW5nLCBpbnQgZG9jdW1lbnROb2RlSWQsIE5vZGUqIG5vZGVUb1B1c2gpCitQ
cm90b2NvbDo6RE9NOjpOb2RlSWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnB1c2hOb2RlVG9Gcm9udGVu
ZChQcm90b2NvbDo6RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBQcm90b2NvbDo6RE9NOjpOb2Rl
SWQgZG9jdW1lbnROb2RlSWQsIE5vZGUqIG5vZGVUb1B1c2gpCiB7CiAgICAgRG9jdW1lbnQqIGRv
Y3VtZW50ID0gYXNzZXJ0RG9jdW1lbnQoZXJyb3JTdHJpbmcsIGRvY3VtZW50Tm9kZUlkKTsKICAg
ICBpZiAoIWRvY3VtZW50KQpAQCAtNTY1LDcgKzU2NCw3IEBAIGludCBJbnNwZWN0b3JET01BZ2Vu
dDo6cHVzaE5vZGVUb0Zyb250ZW5kKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IGRvY3Vt
ZW50CiAgICAgcmV0dXJuIHB1c2hOb2RlUGF0aFRvRnJvbnRlbmQoZXJyb3JTdHJpbmcsIG5vZGVU
b1B1c2gpOwogfQogCi1Ob2RlKiBJbnNwZWN0b3JET01BZ2VudDo6bm9kZUZvcklkKGludCBpZCkK
K05vZGUqIEluc3BlY3RvckRPTUFnZW50Ojpub2RlRm9ySWQoUHJvdG9jb2w6OkRPTTo6Tm9kZUlk
IGlkKQogewogICAgIGlmICghbV9pZFRvTm9kZS5pc1ZhbGlkS2V5KGlkKSkKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CkBAIC01NzMsNyArNTcyLDcgQEAgTm9kZSogSW5zcGVjdG9yRE9NQWdlbnQ6
Om5vZGVGb3JJZChpbnQgaWQpCiAgICAgcmV0dXJuIG1faWRUb05vZGUuZ2V0KGlkKTsKIH0KIAot
dm9pZCBJbnNwZWN0b3JET01BZ2VudDo6cmVxdWVzdENoaWxkTm9kZXMoRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBpbnQgbm9kZUlkLCBjb25zdCBpbnQqIGRlcHRoKQorUHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yRE9NQWdlbnQ6OnJlcXVlc3RDaGlsZE5vZGVzKFByb3Rv
Y29sOjpET006Ok5vZGVJZCBub2RlSWQsIE9wdGlvbmFsPGludD4mJiBkZXB0aCkKIHsKICAgICBp
bnQgc2FuaXRpemVkRGVwdGg7CiAKQEAgLTU4Myw2NCArNTgyLDY0IEBAIHZvaWQgSW5zcGVjdG9y
RE9NQWdlbnQ6OnJlcXVlc3RDaGlsZE5vZGVzKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50
IG5vZGVJZCwKICAgICAgICAgc2FuaXRpemVkRGVwdGggPSBJTlRfTUFYOwogICAgIGVsc2UgaWYg
KCpkZXB0aCA+IDApCiAgICAgICAgIHNhbml0aXplZERlcHRoID0gKmRlcHRoOwotICAgIGVsc2Ug
ewotICAgICAgICBlcnJvclN0cmluZyA9ICJVbmV4cGVjdGVkIHZhbHVlIGJlbG93IC0xIGZvciBn
aXZlbiBkZXB0aCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBlbHNlCisgICAgICAg
IHJldHVybiBtYWtlVW5leHBlY3RlZCgiVW5leHBlY3RlZCB2YWx1ZSBiZWxvdyAtMSBmb3IgZ2l2
ZW4gZGVwdGgiX3MpOwogCiAgICAgcHVzaENoaWxkTm9kZXNUb0Zyb250ZW5kKG5vZGVJZCwgc2Fu
aXRpemVkRGVwdGgpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01B
Z2VudDo6cXVlcnlTZWxlY3RvcihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQs
IGNvbnN0IFN0cmluZyYgc2VsZWN0b3JzLCBpbnQqIGVsZW1lbnRJZCkKK1Byb3RvY29sOjpFcnJv
clN0cmluZ09yPFByb3RvY29sOjpET006Ok5vZGVJZD4gSW5zcGVjdG9yRE9NQWdlbnQ6OnF1ZXJ5
U2VsZWN0b3IoUHJvdG9jb2w6OkRPTTo6Tm9kZUlkIG5vZGVJZCwgY29uc3QgU3RyaW5nJiBzZWxl
Y3RvcikKIHsKLSAgICAqZWxlbWVudElkID0gMDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcg
ZXJyb3JTdHJpbmc7CisKICAgICBOb2RlKiBub2RlID0gYXNzZXJ0Tm9kZShlcnJvclN0cmluZywg
bm9kZUlkKTsKICAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIWlzPENv
bnRhaW5lck5vZGU+KCpub2RlKSkgewotICAgICAgICBhc3NlcnRFbGVtZW50KGVycm9yU3RyaW5n
LCBub2RlSWQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgICAgICByZXR1cm4gbWFrZVVu
ZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOworICAgIGlmICghaXM8Q29udGFpbmVyTm9kZT4oKm5vZGUp
KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk5vZGUgZm9yIGdpdmVuIG5vZGVJZCBp
cyBub3QgYSBjb250YWluZXIgbm9kZSJfcyk7CiAKLSAgICBhdXRvIHF1ZXJ5UmVzdWx0ID0gZG93
bmNhc3Q8Q29udGFpbmVyTm9kZT4oKm5vZGUpLnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3JzKTsKLSAg
ICBpZiAocXVlcnlSZXN1bHQuaGFzRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcg
PSAiRE9NIEVycm9yIHdoaWxlIHF1ZXJ5aW5nIHdpdGggZ2l2ZW4gc2VsZWN0b3JzIl9zOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQorICAgIGF1dG8gcXVlcnlSZXN1bHQgPSBkb3duY2FzdDxDb250
YWluZXJOb2RlPigqbm9kZSkucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7CisgICAgaWYgKHF1ZXJ5
UmVzdWx0Lmhhc0V4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoSW5z
cGVjdG9yRE9NQWdlbnQ6OnRvRXJyb3JTdHJpbmcocXVlcnlSZXN1bHQucmVsZWFzZUV4Y2VwdGlv
bigpKSk7CiAKLSAgICBpZiAoYXV0byogZWxlbWVudCA9IHF1ZXJ5UmVzdWx0LnJlbGVhc2VSZXR1
cm5WYWx1ZSgpKQotICAgICAgICAqZWxlbWVudElkID0gcHVzaE5vZGVQYXRoVG9Gcm9udGVuZChl
cnJvclN0cmluZywgZWxlbWVudCk7CisgICAgYXV0byByZXN1bHROb2RlSWQgPSBwdXNoTm9kZVBh
dGhUb0Zyb250ZW5kKGVycm9yU3RyaW5nLCBxdWVyeVJlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUo
KSk7CisgICAgaWYgKCFyZXN1bHROb2RlSWQpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3Rl
ZChlcnJvclN0cmluZyk7CisKKyAgICByZXR1cm4gcmVzdWx0Tm9kZUlkOwogfQogCi12b2lkIElu
c3BlY3RvckRPTUFnZW50OjpxdWVyeVNlbGVjdG9yQWxsKEVycm9yU3RyaW5nJiBlcnJvclN0cmlu
ZywgaW50IG5vZGVJZCwgY29uc3QgU3RyaW5nJiBzZWxlY3RvcnMsIFJlZlB0cjxKU09OOjpBcnJh
eU9mPGludD4+JiByZXN1bHQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SlNPTjo6QXJy
YXlPZjxQcm90b2NvbDo6RE9NOjpOb2RlSWQ+Pj4gSW5zcGVjdG9yRE9NQWdlbnQ6OnF1ZXJ5U2Vs
ZWN0b3JBbGwoUHJvdG9jb2w6OkRPTTo6Tm9kZUlkIG5vZGVJZCwgY29uc3QgU3RyaW5nJiBzZWxl
Y3RvcikKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBO
b2RlKiBub2RlID0gYXNzZXJ0Tm9kZShlcnJvclN0cmluZywgbm9kZUlkKTsKICAgICBpZiAoIW5v
ZGUpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIWlzPENvbnRhaW5lck5vZGU+KCpub2RlKSkg
ewotICAgICAgICBhc3NlcnRFbGVtZW50KGVycm9yU3RyaW5nLCBub2RlSWQpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcp
OworICAgIGlmICghaXM8Q29udGFpbmVyTm9kZT4oKm5vZGUpKQorICAgICAgICByZXR1cm4gbWFr
ZVVuZXhwZWN0ZWQoIk5vZGUgZm9yIGdpdmVuIG5vZGVJZCBpcyBub3QgYSBjb250YWluZXIgbm9k
ZSJfcyk7CiAKLSAgICBhdXRvIHF1ZXJ5UmVzdWx0ID0gZG93bmNhc3Q8Q29udGFpbmVyTm9kZT4o
Km5vZGUpLnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3JzKTsKLSAgICBpZiAocXVlcnlSZXN1bHQu
aGFzRXhjZXB0aW9uKCkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiRE9NIEVycm9yIHdoaWxl
IHF1ZXJ5aW5nIHdpdGggZ2l2ZW4gc2VsZWN0b3JzIl9zOwotICAgICAgICByZXR1cm47Ci0gICAg
fQorICAgIGF1dG8gcXVlcnlSZXN1bHQgPSBkb3duY2FzdDxDb250YWluZXJOb2RlPigqbm9kZSku
cXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7CisgICAgaWYgKHF1ZXJ5UmVzdWx0Lmhhc0V4Y2Vw
dGlvbigpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoSW5zcGVjdG9yRE9NQWdlbnQ6
OnRvRXJyb3JTdHJpbmcocXVlcnlSZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpKSk7CiAKICAgICBh
dXRvIG5vZGVzID0gcXVlcnlSZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCk7Ci0gICAgcmVzdWx0
ID0gSlNPTjo6QXJyYXlPZjxpbnQ+OjpjcmVhdGUoKTsKKworICAgIGF1dG8gbm9kZUlkcyA9IEpT
T046OkFycmF5T2Y8UHJvdG9jb2w6OkRPTTo6Tm9kZUlkPjo6Y3JlYXRlKCk7CiAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG5vZGVzLT5sZW5ndGgoKTsgKytpKQotICAgICAgICByZXN1bHQt
PmFkZEl0ZW0ocHVzaE5vZGVQYXRoVG9Gcm9udGVuZChub2Rlcy0+aXRlbShpKSkpOworICAgICAg
ICBub2RlSWRzLT5hZGRJdGVtKHB1c2hOb2RlUGF0aFRvRnJvbnRlbmQobm9kZXMtPml0ZW0oaSkp
KTsKKyAgICByZXR1cm4gV1RGTW92ZShub2RlSWRzKTsKIH0KIAotaW50IEluc3BlY3RvckRPTUFn
ZW50OjpwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKE5vZGUqIG5vZGVUb1B1c2gpCitQcm90b2NvbDo6
RE9NOjpOb2RlSWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnB1c2hOb2RlUGF0aFRvRnJvbnRlbmQoTm9k
ZSogbm9kZVRvUHVzaCkKIHsKLSAgICBFcnJvclN0cmluZyBpZ25vcmVkOworICAgIFByb3RvY29s
OjpFcnJvclN0cmluZyBpZ25vcmVkOwogICAgIHJldHVybiBwdXNoTm9kZVBhdGhUb0Zyb250ZW5k
KGlnbm9yZWQsIG5vZGVUb1B1c2gpOwogfQogCi1pbnQgSW5zcGVjdG9yRE9NQWdlbnQ6OnB1c2hO
b2RlUGF0aFRvRnJvbnRlbmQoRXJyb3JTdHJpbmcgZXJyb3JTdHJpbmcsIE5vZGUqIG5vZGVUb1B1
c2gpCitQcm90b2NvbDo6RE9NOjpOb2RlSWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnB1c2hOb2RlUGF0
aFRvRnJvbnRlbmQoUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nLCBOb2RlKiBub2Rl
VG9QdXNoKQogewogICAgIEFTU0VSVChub2RlVG9QdXNoKTsgIC8vIEludmFsaWQgaW5wdXQKIApA
QCAtNjU2LDggKzY1NSw3IEBAIGludCBJbnNwZWN0b3JET01BZ2VudDo6cHVzaE5vZGVQYXRoVG9G
cm9udGVuZChFcnJvclN0cmluZyBlcnJvclN0cmluZywgTm9kZSogbm9kCiAgICAgfQogCiAgICAg
Ly8gUmV0dXJuIGlkIGluIGNhc2UgdGhlIG5vZGUgaXMga25vd24uCi0gICAgaW50IHJlc3VsdCA9
IG1fZG9jdW1lbnROb2RlVG9JZE1hcC5nZXQobm9kZVRvUHVzaCk7Ci0gICAgaWYgKHJlc3VsdCkK
KyAgICBpZiAoYXV0byByZXN1bHQgPSBtX2RvY3VtZW50Tm9kZVRvSWRNYXAuZ2V0KG5vZGVUb1B1
c2gpKQogICAgICAgICByZXR1cm4gcmVzdWx0OwogCiAgICAgTm9kZSogbm9kZSA9IG5vZGVUb1B1
c2g7CkBAIC02NzEsNyArNjY5LDcgQEAgaW50IEluc3BlY3RvckRPTUFnZW50OjpwdXNoTm9kZVBh
dGhUb0Zyb250ZW5kKEVycm9yU3RyaW5nIGVycm9yU3RyaW5nLCBOb2RlKiBub2QKICAgICAgICAg
ICAgIGF1dG8gbmV3TWFwID0gbWFrZVVuaXF1ZTxOb2RlVG9JZE1hcD4oKTsKICAgICAgICAgICAg
IGRhbmdsaW5nTWFwID0gbmV3TWFwLmdldCgpOwogICAgICAgICAgICAgbV9kYW5nbGluZ05vZGVU
b0lkTWFwcy5hcHBlbmQobmV3TWFwLnJlbGVhc2UoKSk7Ci0gICAgICAgICAgICBhdXRvIGNoaWxk
cmVuID0gSlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+OjpjcmVh
dGUoKTsKKyAgICAgICAgICAgIGF1dG8gY2hpbGRyZW4gPSBKU09OOjpBcnJheU9mPFByb3RvY29s
OjpET006Ok5vZGU+OjpjcmVhdGUoKTsKICAgICAgICAgICAgIGNoaWxkcmVuLT5hZGRJdGVtKGJ1
aWxkT2JqZWN0Rm9yTm9kZShub2RlLCAwLCBkYW5nbGluZ01hcCkpOwogICAgICAgICAgICAgbV9m
cm9udGVuZERpc3BhdGNoZXItPnNldENoaWxkTm9kZXMoMCwgV1RGTW92ZShjaGlsZHJlbikpOwog
ICAgICAgICAgICAgYnJlYWs7CkBAIC02ODYsMjIxICs2ODQsMjUyIEBAIGludCBJbnNwZWN0b3JE
T01BZ2VudDo6cHVzaE5vZGVQYXRoVG9Gcm9udGVuZChFcnJvclN0cmluZyBlcnJvclN0cmluZywg
Tm9kZSogbm9kCiAKICAgICBOb2RlVG9JZE1hcCogbWFwID0gZGFuZ2xpbmdNYXAgPyBkYW5nbGlu
Z01hcCA6ICZtX2RvY3VtZW50Tm9kZVRvSWRNYXA7CiAgICAgZm9yIChpbnQgaSA9IHBhdGguc2l6
ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKLSAgICAgICAgaW50IG5vZGVJZCA9IG1hcC0+Z2V0KHBh
dGguYXQoaSkpOworICAgICAgICBhdXRvIG5vZGVJZCA9IG1hcC0+Z2V0KHBhdGguYXQoaSkpOwog
ICAgICAgICBBU1NFUlQobm9kZUlkKTsKICAgICAgICAgcHVzaENoaWxkTm9kZXNUb0Zyb250ZW5k
KG5vZGVJZCk7CiAgICAgfQogICAgIHJldHVybiBtYXAtPmdldChub2RlVG9QdXNoKTsKIH0KIAot
aW50IEluc3BlY3RvckRPTUFnZW50Ojpib3VuZE5vZGVJZChjb25zdCBOb2RlKiBub2RlKQorUHJv
dG9jb2w6OkRPTTo6Tm9kZUlkIEluc3BlY3RvckRPTUFnZW50Ojpib3VuZE5vZGVJZChjb25zdCBO
b2RlKiBub2RlKQogewogICAgIHJldHVybiBtX2RvY3VtZW50Tm9kZVRvSWRNYXAuZ2V0KGNvbnN0
X2Nhc3Q8Tm9kZSo+KG5vZGUpKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c2V0QXR0
cmlidXRlVmFsdWUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgZWxlbWVudElkLCBjb25z
dCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCitQcm90b2NvbDo6RXJyb3JTdHJp
bmdPcjx2b2lkPiBJbnNwZWN0b3JET01BZ2VudDo6c2V0QXR0cmlidXRlVmFsdWUoUHJvdG9jb2w6
OkRPTTo6Tm9kZUlkIG5vZGVJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZh
bHVlKQogewotICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBhc3NlcnRFZGl0YWJsZUVsZW1lbnQoZXJy
b3JTdHJpbmcsIGVsZW1lbnRJZCk7Ci0gICAgaWYgKCFlbGVtZW50KQotICAgICAgICByZXR1cm47
CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOwogCi0gICAgbV9kb21FZGl0
b3ItPnNldEF0dHJpYnV0ZSgqZWxlbWVudCwgbmFtZSwgdmFsdWUsIGVycm9yU3RyaW5nKTsKKyAg
ICBFbGVtZW50KiBlbGVtZW50ID0gYXNzZXJ0RWRpdGFibGVFbGVtZW50KGVycm9yU3RyaW5nLCBu
b2RlSWQpOworICAgIGlmICghZWxlbWVudCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVk
KGVycm9yU3RyaW5nKTsKKworICAgIGlmICghbV9kb21FZGl0b3ItPnNldEF0dHJpYnV0ZSgqZWxl
bWVudCwgbmFtZSwgdmFsdWUsIGVycm9yU3RyaW5nKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4
cGVjdGVkKGVycm9yU3RyaW5nKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVj
dG9yRE9NQWdlbnQ6OnNldEF0dHJpYnV0ZXNBc1RleHQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5n
LCBpbnQgZWxlbWVudElkLCBjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFN0cmluZyogbmFtZSkK
K1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRPTUFnZW50OjpzZXRBdHRy
aWJ1dGVzQXNUZXh0KFByb3RvY29sOjpET006Ok5vZGVJZCBub2RlSWQsIGNvbnN0IFN0cmluZyYg
dGV4dCwgY29uc3QgU3RyaW5nJiBuYW1lKQogewotICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBhc3Nl
cnRFZGl0YWJsZUVsZW1lbnQoZXJyb3JTdHJpbmcsIGVsZW1lbnRJZCk7CisgICAgUHJvdG9jb2w6
OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCisgICAgRWxlbWVudCogZWxlbWVudCA9IGFzc2Vy
dEVkaXRhYmxlRWxlbWVudChlcnJvclN0cmluZywgbm9kZUlkKTsKICAgICBpZiAoIWVsZW1lbnQp
Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3Ry
aW5nKTsKIAogICAgIGF1dG8gcGFyc2VkRWxlbWVudCA9IGNyZWF0ZUhUTUxFbGVtZW50KGVsZW1l
bnQtPmRvY3VtZW50KCksIHNwYW5UYWcpOwogICAgIGF1dG8gcmVzdWx0ID0gcGFyc2VkRWxlbWVu
dC5nZXQoKS5zZXRJbm5lckhUTUwoIjxzcGFuICIgKyB0ZXh0ICsgIj48L3NwYW4+Iik7Ci0gICAg
aWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkgewotICAgICAgICBlcnJvclN0cmluZyA9IHRvRXJy
b3JTdHJpbmcocmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKSk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9CisgICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKEluc3BlY3RvckRPTUFnZW50Ojp0b0Vycm9yU3RyaW5nKHJlc3VsdC5yZWxlYXNl
RXhjZXB0aW9uKCkpKTsKIAogICAgIE5vZGUqIGNoaWxkID0gcGFyc2VkRWxlbWVudC0+Zmlyc3RD
aGlsZCgpOwotICAgIGlmICghY2hpbGQpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiQ291bGQg
bm90IHBhcnNlIGdpdmVuIHRleHQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYg
KCFjaGlsZCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJDb3VsZCBub3QgcGFyc2Ug
Z2l2ZW4gdGV4dCJfcyk7CiAKICAgICBFbGVtZW50KiBjaGlsZEVsZW1lbnQgPSBkb3duY2FzdDxF
bGVtZW50PihjaGlsZCk7Ci0gICAgaWYgKCFjaGlsZEVsZW1lbnQtPmhhc0F0dHJpYnV0ZXMoKSAm
JiBuYW1lKSB7Ci0gICAgICAgIG1fZG9tRWRpdG9yLT5yZW1vdmVBdHRyaWJ1dGUoKmVsZW1lbnQs
ICpuYW1lLCBlcnJvclN0cmluZyk7Ci0gICAgICAgIHJldHVybjsKKyAgICBpZiAoIWNoaWxkRWxl
bWVudC0+aGFzQXR0cmlidXRlcygpICYmICEhbmFtZSkgeworICAgICAgICBpZiAoIW1fZG9tRWRp
dG9yLT5yZW1vdmVBdHRyaWJ1dGUoKmVsZW1lbnQsIG5hbWUsIGVycm9yU3RyaW5nKSkKKyAgICAg
ICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CisgICAgICAgIHJldHVy
biB7IH07CiAgICAgfQogCiAgICAgYm9vbCBmb3VuZE9yaWdpbmFsQXR0cmlidXRlID0gZmFsc2U7
CiAgICAgZm9yIChjb25zdCBBdHRyaWJ1dGUmIGF0dHJpYnV0ZSA6IGNoaWxkRWxlbWVudC0+YXR0
cmlidXRlc0l0ZXJhdG9yKCkpIHsKICAgICAgICAgLy8gQWRkIGF0dHJpYnV0ZSBwYWlyCi0gICAg
ICAgIGZvdW5kT3JpZ2luYWxBdHRyaWJ1dGUgPSBmb3VuZE9yaWdpbmFsQXR0cmlidXRlIHx8IChu
YW1lICYmIGF0dHJpYnV0ZS5uYW1lKCkudG9TdHJpbmcoKSA9PSAqbmFtZSk7CisgICAgICAgIGZv
dW5kT3JpZ2luYWxBdHRyaWJ1dGUgPSBmb3VuZE9yaWdpbmFsQXR0cmlidXRlIHx8IGF0dHJpYnV0
ZS5uYW1lKCkudG9TdHJpbmcoKSA9PSBuYW1lOwogICAgICAgICBpZiAoIW1fZG9tRWRpdG9yLT5z
ZXRBdHRyaWJ1dGUoKmVsZW1lbnQsIGF0dHJpYnV0ZS5uYW1lKCkudG9TdHJpbmcoKSwgYXR0cmli
dXRlLnZhbHVlKCksIGVycm9yU3RyaW5nKSkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAgICAgfQogCi0gICAgaWYg
KCFmb3VuZE9yaWdpbmFsQXR0cmlidXRlICYmIG5hbWUgJiYgIW5hbWUtPnN0cmlwV2hpdGVTcGFj
ZSgpLmlzRW1wdHkoKSkKLSAgICAgICAgbV9kb21FZGl0b3ItPnJlbW92ZUF0dHJpYnV0ZSgqZWxl
bWVudCwgKm5hbWUsIGVycm9yU3RyaW5nKTsKKyAgICBpZiAoIWZvdW5kT3JpZ2luYWxBdHRyaWJ1
dGUgJiYgIW5hbWUuc3RyaXBXaGl0ZVNwYWNlKCkuaXNFbXB0eSgpKSB7CisgICAgICAgIGlmICgh
bV9kb21FZGl0b3ItPnJlbW92ZUF0dHJpYnV0ZSgqZWxlbWVudCwgbmFtZSwgZXJyb3JTdHJpbmcp
KQorICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKKyAgICB9
CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpyZW1vdmVB
dHRyaWJ1dGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgZWxlbWVudElkLCBjb25zdCBT
dHJpbmcmIG5hbWUpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JET01B
Z2VudDo6cmVtb3ZlQXR0cmlidXRlKFByb3RvY29sOjpET006Ok5vZGVJZCBub2RlSWQsIGNvbnN0
IFN0cmluZyYgbmFtZSkKIHsKLSAgICBFbGVtZW50KiBlbGVtZW50ID0gYXNzZXJ0RWRpdGFibGVF
bGVtZW50KGVycm9yU3RyaW5nLCBlbGVtZW50SWQpOworICAgIFByb3RvY29sOjpFcnJvclN0cmlu
ZyBlcnJvclN0cmluZzsKKworICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBhc3NlcnRFZGl0YWJsZUVs
ZW1lbnQoZXJyb3JTdHJpbmcsIG5vZGVJZCk7CiAgICAgaWYgKCFlbGVtZW50KQotICAgICAgICBy
ZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKLSAg
ICBtX2RvbUVkaXRvci0+cmVtb3ZlQXR0cmlidXRlKCplbGVtZW50LCBuYW1lLCBlcnJvclN0cmlu
Zyk7CisgICAgaWYgKCFtX2RvbUVkaXRvci0+cmVtb3ZlQXR0cmlidXRlKCplbGVtZW50LCBuYW1l
LCBlcnJvclN0cmluZykpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmlu
Zyk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpyZW1v
dmVOb2RlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJZCkKK1Byb3RvY29sOjpF
cnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRPTUFnZW50OjpyZW1vdmVOb2RlKFByb3RvY29s
OjpET006Ok5vZGVJZCBub2RlSWQpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9y
U3RyaW5nOworCiAgICAgTm9kZSogbm9kZSA9IGFzc2VydEVkaXRhYmxlTm9kZShlcnJvclN0cmlu
Zywgbm9kZUlkKTsKICAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0
dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgIENvbnRhaW5lck5vZGUqIHBh
cmVudE5vZGUgPSBub2RlLT5wYXJlbnROb2RlKCk7Ci0gICAgaWYgKCFwYXJlbnROb2RlKSB7Ci0g
ICAgICAgIGVycm9yU3RyaW5nID0gIkNhbm5vdCByZW1vdmUgZGV0YWNoZWQgbm9kZSJfczsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoIXBhcmVudE5vZGUpCisgICAgICAgIHJldHVy
biBtYWtlVW5leHBlY3RlZCgiQ2Fubm90IHJlbW92ZSBkZXRhY2hlZCBub2RlIl9zKTsKIAotICAg
IG1fZG9tRWRpdG9yLT5yZW1vdmVDaGlsZCgqcGFyZW50Tm9kZSwgKm5vZGUsIGVycm9yU3RyaW5n
KTsKKyAgICBpZiAoIW1fZG9tRWRpdG9yLT5yZW1vdmVDaGlsZCgqcGFyZW50Tm9kZSwgKm5vZGUs
IGVycm9yU3RyaW5nKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5n
KTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNldE5v
ZGVOYW1lKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJZCwgY29uc3QgU3RyaW5n
JiB0YWdOYW1lLCBpbnQqIG5ld0lkKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UHJvdG9jb2w6
OkRPTTo6Tm9kZUlkPiBJbnNwZWN0b3JET01BZ2VudDo6c2V0Tm9kZU5hbWUoUHJvdG9jb2w6OkRP
TTo6Tm9kZUlkIG5vZGVJZCwgY29uc3QgU3RyaW5nJiB0YWdOYW1lKQogewotICAgICpuZXdJZCA9
IDA7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOwogCi0gICAgUmVmUHRy
PE5vZGU+IG9sZE5vZGUgPSBub2RlRm9ySWQobm9kZUlkKTsKLSAgICBpZiAoIWlzPEVsZW1lbnQ+
KG9sZE5vZGUpKQotICAgICAgICByZXR1cm47CisgICAgYXV0byBvbGROb2RlID0gYXNzZXJ0RWxl
bWVudChlcnJvclN0cmluZywgbm9kZUlkKTsKKyAgICBpZiAoIW9sZE5vZGUpCisgICAgICAgIHJl
dHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAgICBhdXRvIGNyZWF0ZUVsZW1l
bnRSZXN1bHQgPSBvbGROb2RlLT5kb2N1bWVudCgpLmNyZWF0ZUVsZW1lbnRGb3JCaW5kaW5ncyh0
YWdOYW1lKTsKICAgICBpZiAoY3JlYXRlRWxlbWVudFJlc3VsdC5oYXNFeGNlcHRpb24oKSkKLSAg
ICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoSW5zcGVjdG9yRE9N
QWdlbnQ6OnRvRXJyb3JTdHJpbmcoY3JlYXRlRWxlbWVudFJlc3VsdC5yZWxlYXNlRXhjZXB0aW9u
KCkpKTsKKwogICAgIGF1dG8gbmV3RWxlbWVudCA9IGNyZWF0ZUVsZW1lbnRSZXN1bHQucmVsZWFz
ZVJldHVyblZhbHVlKCk7CiAKICAgICAvLyBDb3B5IG92ZXIgdGhlIG9yaWdpbmFsIG5vZGUncyBh
dHRyaWJ1dGVzLgotICAgIG5ld0VsZW1lbnQtPmNsb25lQXR0cmlidXRlc0Zyb21FbGVtZW50KGRv
d25jYXN0PEVsZW1lbnQ+KCpvbGROb2RlKSk7CisgICAgbmV3RWxlbWVudC0+Y2xvbmVBdHRyaWJ1
dGVzRnJvbUVsZW1lbnQoKm9sZE5vZGUpOwogCiAgICAgLy8gQ29weSBvdmVyIHRoZSBvcmlnaW5h
bCBub2RlJ3MgY2hpbGRyZW4uCiAgICAgUmVmUHRyPE5vZGU+IGNoaWxkOwogICAgIHdoaWxlICgo
Y2hpbGQgPSBvbGROb2RlLT5maXJzdENoaWxkKCkpKSB7CiAgICAgICAgIGlmICghbV9kb21FZGl0
b3ItPmluc2VydEJlZm9yZShuZXdFbGVtZW50LCAqY2hpbGQsIDAsIGVycm9yU3RyaW5nKSkKLSAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJv
clN0cmluZyk7CiAgICAgfQogCiAgICAgLy8gUmVwbGFjZSB0aGUgb2xkIG5vZGUgd2l0aCB0aGUg
bmV3IG5vZGUKICAgICBSZWZQdHI8Q29udGFpbmVyTm9kZT4gcGFyZW50ID0gb2xkTm9kZS0+cGFy
ZW50Tm9kZSgpOwogICAgIGlmICghbV9kb21FZGl0b3ItPmluc2VydEJlZm9yZSgqcGFyZW50LCBu
ZXdFbGVtZW50LmNvcHlSZWYoKSwgb2xkTm9kZS0+bmV4dFNpYmxpbmcoKSwgZXJyb3JTdHJpbmcp
KQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0
cmluZyk7CiAgICAgaWYgKCFtX2RvbUVkaXRvci0+cmVtb3ZlQ2hpbGQoKnBhcmVudCwgKm9sZE5v
ZGUsIGVycm9yU3RyaW5nKSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVu
ZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCi0gICAgKm5ld0lkID0gcHVzaE5vZGVQYXRoVG9Gcm9u
dGVuZChlcnJvclN0cmluZywgbmV3RWxlbWVudC5wdHIoKSk7CisgICAgYXV0byByZXN1bHROb2Rl
SWQgPSBwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKGVycm9yU3RyaW5nLCBuZXdFbGVtZW50LnB0cigp
KTsKICAgICBpZiAobV9jaGlsZHJlblJlcXVlc3RlZC5jb250YWlucyhub2RlSWQpKQotICAgICAg
ICBwdXNoQ2hpbGROb2Rlc1RvRnJvbnRlbmQoKm5ld0lkKTsKKyAgICAgICAgcHVzaENoaWxkTm9k
ZXNUb0Zyb250ZW5kKHJlc3VsdE5vZGVJZCk7CisKKyAgICByZXR1cm4gcmVzdWx0Tm9kZUlkOwog
fQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpnZXRPdXRlckhUTUwoRXJyb3JTdHJpbmcmIGVy
cm9yU3RyaW5nLCBpbnQgbm9kZUlkLCBXVEY6OlN0cmluZyogb3V0ZXJIVE1MKQorUHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8U3RyaW5nPiBJbnNwZWN0b3JET01BZ2VudDo6Z2V0T3V0ZXJIVE1MKFBy
b3RvY29sOjpET006Ok5vZGVJZCBub2RlSWQpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5n
IGVycm9yU3RyaW5nOworCiAgICAgTm9kZSogbm9kZSA9IGFzc2VydE5vZGUoZXJyb3JTdHJpbmcs
IG5vZGVJZCk7CiAgICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVy
biBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKLSAgICAqb3V0ZXJIVE1MID0gc2VyaWFs
aXplRnJhZ21lbnQoKm5vZGUsIFNlcmlhbGl6ZWROb2Rlczo6U3VidHJlZUluY2x1ZGluZ05vZGUp
OworICAgIHJldHVybiBzZXJpYWxpemVGcmFnbWVudCgqbm9kZSwgU2VyaWFsaXplZE5vZGVzOjpT
dWJ0cmVlSW5jbHVkaW5nTm9kZSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNldE91
dGVySFRNTChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQsIGNvbnN0IFN0cmlu
ZyYgb3V0ZXJIVE1MKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yRE9N
QWdlbnQ6OnNldE91dGVySFRNTChQcm90b2NvbDo6RE9NOjpOb2RlSWQgbm9kZUlkLCBjb25zdCBT
dHJpbmcmIG91dGVySFRNTCkKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJp
bmc7CisKICAgICBpZiAoIW5vZGVJZCkgewogICAgICAgICBET01QYXRjaFN1cHBvcnQgeyAqbV9k
b21FZGl0b3IsICptX2RvY3VtZW50IH0ucGF0Y2hEb2N1bWVudChvdXRlckhUTUwpOwotICAgICAg
ICByZXR1cm47CisgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCiAgICAgTm9kZSogbm9kZSA9
IGFzc2VydEVkaXRhYmxlTm9kZShlcnJvclN0cmluZywgbm9kZUlkKTsKICAgICBpZiAoIW5vZGUp
Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3Ry
aW5nKTsKIAogICAgIERvY3VtZW50JiBkb2N1bWVudCA9IG5vZGUtPmRvY3VtZW50KCk7Ci0gICAg
aWYgKCFkb2N1bWVudC5pc0hUTUxEb2N1bWVudCgpICYmICFkb2N1bWVudC5pc1hNTERvY3VtZW50
KCkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiRG9jdW1lbnQgb2Ygbm9kZSBmb3IgZ2l2ZW4g
bm9kZUlkIGlzIG5vdCBIVE1ML1hNTCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBp
ZiAoIWRvY3VtZW50LmlzSFRNTERvY3VtZW50KCkgJiYgIWRvY3VtZW50LmlzWE1MRG9jdW1lbnQo
KSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJEb2N1bWVudCBvZiBub2RlIGZvciBn
aXZlbiBub2RlSWQgaXMgbm90IEhUTUwvWE1MIl9zKTsKIAogICAgIE5vZGUqIG5ld05vZGUgPSBu
dWxscHRyOwogICAgIGlmICghbV9kb21FZGl0b3ItPnNldE91dGVySFRNTCgqbm9kZSwgb3V0ZXJI
VE1MLCBuZXdOb2RlLCBlcnJvclN0cmluZykpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0
dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgIGlmICghbmV3Tm9kZSkgewog
ICAgICAgICAvLyBUaGUgb25seSBjaGlsZCBub2RlIGhhcyBiZWVuIGRlbGV0ZWQuCi0gICAgICAg
IHJldHVybjsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKLSAgICBpbnQgbmV3SWQgPSBw
dXNoTm9kZVBhdGhUb0Zyb250ZW5kKGVycm9yU3RyaW5nLCBuZXdOb2RlKTsKKyAgICBhdXRvIG5l
d0lkID0gcHVzaE5vZGVQYXRoVG9Gcm9udGVuZChlcnJvclN0cmluZywgbmV3Tm9kZSk7CiAKICAg
ICBib29sIGNoaWxkcmVuUmVxdWVzdGVkID0gbV9jaGlsZHJlblJlcXVlc3RlZC5jb250YWlucyhu
b2RlSWQpOwogICAgIGlmIChjaGlsZHJlblJlcXVlc3RlZCkKICAgICAgICAgcHVzaENoaWxkTm9k
ZXNUb0Zyb250ZW5kKG5ld0lkKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVj
dG9yRE9NQWdlbnQ6Omluc2VydEFkamFjZW50SFRNTChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcs
IGludCBub2RlSWQsIGNvbnN0IFN0cmluZyYgcG9zaXRpb24sIGNvbnN0IFN0cmluZyYgaHRtbCkK
K1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRPTUFnZW50OjppbnNlcnRB
ZGphY2VudEhUTUwoUHJvdG9jb2w6OkRPTTo6Tm9kZUlkIG5vZGVJZCwgY29uc3QgU3RyaW5nJiBw
b3NpdGlvbiwgY29uc3QgU3RyaW5nJiBodG1sKQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmlu
ZyBlcnJvclN0cmluZzsKKwogICAgIE5vZGUqIG5vZGUgPSBhc3NlcnRFZGl0YWJsZU5vZGUoZXJy
b3JTdHJpbmcsIG5vZGVJZCk7CiAgICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm47CisgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKLSAgICBpZiAoIWlzPEVs
ZW1lbnQ+KG5vZGUpKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIk5vZGUgZm9yIGdpdmVuIG5v
ZGVJZCBpcyBub3QgYW4gZWxlbWVudCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBp
ZiAoIWlzPEVsZW1lbnQ+KG5vZGUpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk5v
ZGUgZm9yIGdpdmVuIG5vZGVJZCBpcyBub3QgYW4gZWxlbWVudCJfcyk7CiAKLSAgICBtX2RvbUVk
aXRvci0+aW5zZXJ0QWRqYWNlbnRIVE1MKGRvd25jYXN0PEVsZW1lbnQ+KCpub2RlKSwgcG9zaXRp
b24sIGh0bWwsIGVycm9yU3RyaW5nKTsKKyAgICBpZiAoIW1fZG9tRWRpdG9yLT5pbnNlcnRBZGph
Y2VudEhUTUwoZG93bmNhc3Q8RWxlbWVudD4oKm5vZGUpLCBwb3NpdGlvbiwgaHRtbCwgZXJyb3JT
dHJpbmcpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOworCisg
ICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c2V0Tm9kZVZhbHVl
KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJZCwgY29uc3QgU3RyaW5nJiB2YWx1
ZSkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRPTUFnZW50OjpzZXRO
b2RlVmFsdWUoUHJvdG9jb2w6OkRPTTo6Tm9kZUlkIG5vZGVJZCwgY29uc3QgU3RyaW5nJiB2YWx1
ZSkKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBOb2Rl
KiBub2RlID0gYXNzZXJ0RWRpdGFibGVOb2RlKGVycm9yU3RyaW5nLCBub2RlSWQpOwogICAgIGlm
ICghbm9kZSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQo
ZXJyb3JTdHJpbmcpOwogCi0gICAgaWYgKCFpczxUZXh0Pigqbm9kZSkpIHsKLSAgICAgICAgZXJy
b3JTdHJpbmcgPSAiTm9kZSBmb3IgZ2l2ZW4gbm9kZUlkIGlzIG5vdCB0ZXh0Il9zOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQorICAgIGlmICghaXM8VGV4dD4oKm5vZGUpKQorICAgICAgICByZXR1
cm4gbWFrZVVuZXhwZWN0ZWQoIk5vZGUgZm9yIGdpdmVuIG5vZGVJZCBpcyBub3QgdGV4dCJfcyk7
CiAKLSAgICBtX2RvbUVkaXRvci0+cmVwbGFjZVdob2xlVGV4dChkb3duY2FzdDxUZXh0Pigqbm9k
ZSksIHZhbHVlLCBlcnJvclN0cmluZyk7CisgICAgaWYgKCFtX2RvbUVkaXRvci0+cmVwbGFjZVdo
b2xlVGV4dChkb3duY2FzdDxUZXh0Pigqbm9kZSksIHZhbHVlLCBlcnJvclN0cmluZykpCisgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CisKKyAgICByZXR1cm4geyB9
OwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpnZXRTdXBwb3J0ZWRFdmVudE5hbWVzKEVy
cm9yU3RyaW5nJiwgUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4mIGV2ZW50TmFtZXMpCitQ
cm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SlNPTjo6QXJyYXlPZjxTdHJpbmc+Pj4gSW5zcGVj
dG9yRE9NQWdlbnQ6OmdldFN1cHBvcnRlZEV2ZW50TmFtZXMoKQogewotICAgIGV2ZW50TmFtZXMg
PSBKU09OOjpBcnJheU9mPFN0cmluZz46OmNyZWF0ZSgpOworICAgIGF1dG8gZXZlbnROYW1lcyA9
IEpTT046OkFycmF5T2Y8U3RyaW5nPjo6Y3JlYXRlKCk7CiAKICNkZWZpbmUgRE9NX0VWRU5UX05B
TUVTX0FERChuYW1lKSBldmVudE5hbWVzLT5hZGRJdGVtKCNuYW1lKTsKICAgICBET01fRVZFTlRf
TkFNRVNfRk9SX0VBQ0goRE9NX0VWRU5UX05BTUVTX0FERCkKICN1bmRlZiBET01fRVZFTlRfTkFN
RVNfQURECisKKyAgICByZXR1cm4gV1RGTW92ZShldmVudE5hbWVzKTsKIH0KIAogI2lmIEVOQUJM
RShJTlNQRUNUT1JfQUxURVJOQVRFX0RJU1BBVENIRVJTKQotdm9pZCBJbnNwZWN0b3JET01BZ2Vu
dDo6Z2V0RGF0YUJpbmRpbmdzRm9yTm9kZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCAv
KiBub2RlSWQgKi8sIFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRP
TTo6RGF0YUJpbmRpbmc+PiYgLyogZGF0YUJpbmRpbmdzICovKQorUHJvdG9jb2w6OkVycm9yU3Ry
aW5nT3I8UmVmPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkRPTTo6RGF0YUJpbmRpbmc+Pj4gSW5z
cGVjdG9yRE9NQWdlbnQ6OmdldERhdGFCaW5kaW5nc0Zvck5vZGUoUHJvdG9jb2w6OkRPTTo6Tm9k
ZUlkKQogewotICAgIGVycm9yU3RyaW5nID0gIk5vdCBzdXBwb3J0ZWQiX3M7CisgICAgcmV0dXJu
IG1ha2VVbmV4cGVjdGVkKCJOb3Qgc3VwcG9ydGVkIl9zKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JE
T01BZ2VudDo6Z2V0QXNzb2NpYXRlZERhdGFGb3JOb2RlKEVycm9yU3RyaW5nJiBlcnJvclN0cmlu
ZywgaW50IC8qIG5vZGVJZCAqLywgT3B0aW9uYWw8U3RyaW5nPiYgLyogYXNzb2NpYXRlZERhdGEg
Ki8pCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxTdHJpbmc+IEluc3BlY3RvckRPTUFnZW50Ojpn
ZXRBc3NvY2lhdGVkRGF0YUZvck5vZGUoUHJvdG9jb2w6OkRPTTo6Tm9kZUlkKQogewotICAgIGVy
cm9yU3RyaW5nID0gIk5vdCBzdXBwb3J0ZWQiX3M7CisgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVk
KCJOb3Qgc3VwcG9ydGVkIl9zKTsKIH0KICNlbmRpZgogCi12b2lkIEluc3BlY3RvckRPTUFnZW50
OjpnZXRFdmVudExpc3RlbmVyc0Zvck5vZGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQg
bm9kZUlkLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkV2
ZW50TGlzdGVuZXI+PiYgbGlzdGVuZXJzQXJyYXkpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxS
ZWY8SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6RE9NOjpFdmVudExpc3RlbmVyPj4+IEluc3BlY3Rv
ckRPTUFnZW50OjpnZXRFdmVudExpc3RlbmVyc0Zvck5vZGUoUHJvdG9jb2w6OkRPTTo6Tm9kZUlk
IG5vZGVJZCkKIHsKLSAgICBsaXN0ZW5lcnNBcnJheSA9IEpTT046OkFycmF5T2Y8SW5zcGVjdG9y
OjpQcm90b2NvbDo6RE9NOjpFdmVudExpc3RlbmVyPjo6Y3JlYXRlKCk7CisgICAgUHJvdG9jb2w6
OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOwogCiAgICAgYXV0byogbm9kZSA9IGFzc2VydE5vZGUo
ZXJyb3JTdHJpbmcsIG5vZGVJZCk7CiAgICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm47Cisg
ICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAgICBWZWN0b3I8
UmVmUHRyPEV2ZW50VGFyZ2V0Pj4gYW5jZXN0b3JzOwogICAgIGFuY2VzdG9ycy5hcHBlbmQobm9k
ZSk7CkBAIC05MjksOCArOTU4LDEwIEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmdldEV2ZW50
TGlzdGVuZXJzRm9yTm9kZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBuCiAgICAgICAg
IH0KICAgICB9CiAKKyAgICBhdXRvIGxpc3RlbmVycyA9IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6
OkRPTTo6RXZlbnRMaXN0ZW5lcj46OmNyZWF0ZSgpOworCiAgICAgYXV0byBhZGRMaXN0ZW5lciA9
IFsmXSAoUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXImIGxpc3RlbmVyLCBjb25zdCBFdmVudExpc3Rl
bmVySW5mbyYgaW5mbykgewotICAgICAgICBpbnQgaWRlbnRpZmllciA9IDA7CisgICAgICAgIFBy
b3RvY29sOjpET006OkV2ZW50TGlzdGVuZXJJZCBpZGVudGlmaWVyID0gMDsKICAgICAgICAgYm9v
bCBkaXNhYmxlZCA9IGZhbHNlOwogICAgICAgICBSZWZQdHI8SlNDOjpCcmVha3BvaW50PiBicmVh
a3BvaW50OwogCkBAIC05NTMsNyArOTg0LDcgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Z2V0
RXZlbnRMaXN0ZW5lcnNGb3JOb2RlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG4KICAg
ICAgICAgICAgIG1fZXZlbnRMaXN0ZW5lckVudHJpZXMuYWRkKGlkZW50aWZpZXIsIGluc3BlY3Rv
ckV2ZW50TGlzdGVuZXIpOwogICAgICAgICB9CiAKLSAgICAgICAgbGlzdGVuZXJzQXJyYXktPmFk
ZEl0ZW0oYnVpbGRPYmplY3RGb3JFdmVudExpc3RlbmVyKGxpc3RlbmVyLCBpZGVudGlmaWVyLCAq
aW5mby5ldmVudFRhcmdldCwgaW5mby5ldmVudFR5cGUsIGRpc2FibGVkLCBicmVha3BvaW50KSk7
CisgICAgICAgIGxpc3RlbmVycy0+YWRkSXRlbShidWlsZE9iamVjdEZvckV2ZW50TGlzdGVuZXIo
bGlzdGVuZXIsIGlkZW50aWZpZXIsICppbmZvLmV2ZW50VGFyZ2V0LCBpbmZvLmV2ZW50VHlwZSwg
ZGlzYWJsZWQsIGJyZWFrcG9pbnQpKTsKICAgICB9OwogCiAgICAgLy8gR2V0IENhcHR1cmluZyBM
aXN0ZW5lcnMgKGluIHRoaXMgb3JkZXIpCkBAIC05NzYsODAgKzEwMDcsODEgQEAgdm9pZCBJbnNw
ZWN0b3JET01BZ2VudDo6Z2V0RXZlbnRMaXN0ZW5lcnNGb3JOb2RlKEVycm9yU3RyaW5nJiBlcnJv
clN0cmluZywgaW50IG4KIAogICAgIGlmIChtX2luc3BlY3RlZE5vZGUgPT0gbm9kZSkKICAgICAg
ICAgbV9zdXBwcmVzc0V2ZW50TGlzdGVuZXJDaGFuZ2VkRXZlbnQgPSBmYWxzZTsKKworICAgIHJl
dHVybiBXVEZNb3ZlKGxpc3RlbmVycyk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNl
dEV2ZW50TGlzdGVuZXJEaXNhYmxlZChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBldmVu
dExpc3RlbmVySWQsIGJvb2wgZGlzYWJsZWQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lk
PiBJbnNwZWN0b3JET01BZ2VudDo6c2V0RXZlbnRMaXN0ZW5lckRpc2FibGVkKFByb3RvY29sOjpE
T006OkV2ZW50TGlzdGVuZXJJZCBldmVudExpc3RlbmVySWQsIGJvb2wgZGlzYWJsZWQpCiB7CiAg
ICAgYXV0byBpdCA9IG1fZXZlbnRMaXN0ZW5lckVudHJpZXMuZmluZChldmVudExpc3RlbmVySWQp
OwotICAgIGlmIChpdCA9PSBtX2V2ZW50TGlzdGVuZXJFbnRyaWVzLmVuZCgpKSB7Ci0gICAgICAg
IGVycm9yU3RyaW5nID0gIk1pc3NpbmcgZXZlbnQgbGlzdGVuZXIgZm9yIGdpdmVuIGV2ZW50TGlz
dGVuZXJJZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoaXQgPT0gbV9ldmVu
dExpc3RlbmVyRW50cmllcy5lbmQoKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJN
aXNzaW5nIGV2ZW50IGxpc3RlbmVyIGZvciBnaXZlbiBldmVudExpc3RlbmVySWQiX3MpOwogCiAg
ICAgaXQtPnZhbHVlLmRpc2FibGVkID0gZGlzYWJsZWQ7CisKKyAgICByZXR1cm4geyB9OwogfQog
Ci12b2lkIEluc3BlY3RvckRPTUFnZW50OjpzZXRCcmVha3BvaW50Rm9yRXZlbnRMaXN0ZW5lcihF
cnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBldmVudExpc3RlbmVySWQsIGNvbnN0IEpTT046
Ok9iamVjdCogb3B0aW9uc1BheWxvYWQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJ
bnNwZWN0b3JET01BZ2VudDo6c2V0QnJlYWtwb2ludEZvckV2ZW50TGlzdGVuZXIoUHJvdG9jb2w6
OkRPTTo6RXZlbnRMaXN0ZW5lcklkIGV2ZW50TGlzdGVuZXJJZCwgUmVmUHRyPEpTT046Ok9iamVj
dD4mJiBvcHRpb25zKQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsK
KwogICAgIGF1dG8gaXQgPSBtX2V2ZW50TGlzdGVuZXJFbnRyaWVzLmZpbmQoZXZlbnRMaXN0ZW5l
cklkKTsKLSAgICBpZiAoaXQgPT0gbV9ldmVudExpc3RlbmVyRW50cmllcy5lbmQoKSkgewotICAg
ICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIGV2ZW50IGxpc3RlbmVyIGZvciBnaXZlbiBldmVu
dExpc3RlbmVySWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKGl0ID09IG1f
ZXZlbnRMaXN0ZW5lckVudHJpZXMuZW5kKCkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3Rl
ZCgiTWlzc2luZyBldmVudCBsaXN0ZW5lciBmb3IgZ2l2ZW4gZXZlbnRMaXN0ZW5lcklkIl9zKTsK
IAotICAgIGlmIChpdC0+dmFsdWUuYnJlYWtwb2ludCkgewotICAgICAgICBlcnJvclN0cmluZyA9
ICJCcmVha3BvaW50IGZvciBnaXZlbiBldmVudExpc3RlbmVySWQgYWxyZWFkeSBleGlzdHMiX3M7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKGl0LT52YWx1ZS5icmVha3BvaW50KQor
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkJyZWFrcG9pbnQgZm9yIGdpdmVuIGV2ZW50
TGlzdGVuZXJJZCBhbHJlYWR5IGV4aXN0cyJfcyk7CiAKLSAgICBpdC0+dmFsdWUuYnJlYWtwb2lu
dCA9IEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRlYnVnZ2VyQnJlYWtwb2ludEZyb21QYXlsb2Fk
KGVycm9yU3RyaW5nLCBvcHRpb25zUGF5bG9hZCk7CisgICAgaXQtPnZhbHVlLmJyZWFrcG9pbnQg
PSBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkZWJ1Z2dlckJyZWFrcG9pbnRGcm9tUGF5bG9hZChl
cnJvclN0cmluZywgV1RGTW92ZShvcHRpb25zKSk7CisgICAgaWYgKCFpdC0+dmFsdWUuYnJlYWtw
b2ludCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKKworICAg
IHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnJlbW92ZUJyZWFrcG9p
bnRGb3JFdmVudExpc3RlbmVyKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IGV2ZW50TGlz
dGVuZXJJZCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRPTUFnZW50
OjpyZW1vdmVCcmVha3BvaW50Rm9yRXZlbnRMaXN0ZW5lcihQcm90b2NvbDo6RE9NOjpFdmVudExp
c3RlbmVySWQgZXZlbnRMaXN0ZW5lcklkKQogewogICAgIGF1dG8gaXQgPSBtX2V2ZW50TGlzdGVu
ZXJFbnRyaWVzLmZpbmQoZXZlbnRMaXN0ZW5lcklkKTsKLSAgICBpZiAoaXQgPT0gbV9ldmVudExp
c3RlbmVyRW50cmllcy5lbmQoKSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIGV2
ZW50IGxpc3RlbmVyIGZvciBnaXZlbiBldmVudExpc3RlbmVySWQiX3M7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9CisgICAgaWYgKGl0ID09IG1fZXZlbnRMaXN0ZW5lckVudHJpZXMuZW5kKCkpCisg
ICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTWlzc2luZyBldmVudCBsaXN0ZW5lciBmb3Ig
Z2l2ZW4gZXZlbnRMaXN0ZW5lcklkIl9zKTsKIAogICAgIGlmICghaXQtPnZhbHVlLmJyZWFrcG9p
bnQpCi0gICAgICAgIGVycm9yU3RyaW5nID0gIkJyZWFrcG9pbnQgZm9yIGdpdmVuIGV2ZW50TGlz
dGVuZXJJZCBtaXNzaW5nIl9zOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkJyZWFr
cG9pbnQgZm9yIGdpdmVuIGV2ZW50TGlzdGVuZXJJZCBtaXNzaW5nIl9zKTsKIAogICAgIGl0LT52
YWx1ZS5icmVha3BvaW50ID0gbnVsbHB0cjsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQg
SW5zcGVjdG9yRE9NQWdlbnQ6OmdldEFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzRm9yTm9kZShFcnJv
clN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzPiYgYXhQcm9wZXJ0aWVzKQorUHJvdG9j
b2w6OkVycm9yU3RyaW5nT3I8UmVmPFByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0
aWVzPj4gSW5zcGVjdG9yRE9NQWdlbnQ6OmdldEFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzRm9yTm9k
ZShQcm90b2NvbDo6RE9NOjpOb2RlSWQgbm9kZUlkKQogeworICAgIFByb3RvY29sOjpFcnJvclN0
cmluZyBlcnJvclN0cmluZzsKKwogICAgIE5vZGUqIG5vZGUgPSBhc3NlcnROb2RlKGVycm9yU3Ry
aW5nLCBub2RlSWQpOwogICAgIGlmICghbm9kZSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICBy
ZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCi0gICAgYXhQcm9wZXJ0aWVzID0g
YnVpbGRPYmplY3RGb3JBY2Nlc3NpYmlsaXR5UHJvcGVydGllcyhub2RlKTsKKyAgICByZXR1cm4g
YnVpbGRPYmplY3RGb3JBY2Nlc3NpYmlsaXR5UHJvcGVydGllcygqbm9kZSk7CiB9CiAKLXZvaWQg
SW5zcGVjdG9yRE9NQWdlbnQ6OnBlcmZvcm1TZWFyY2goRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5n
LCBjb25zdCBTdHJpbmcmIHF1ZXJ5LCBjb25zdCBKU09OOjpBcnJheSogbm9kZUlkcywgY29uc3Qg
Ym9vbCogY2FzZVNlbnNpdGl2ZSwgU3RyaW5nKiBzZWFyY2hJZCwgaW50KiByZXN1bHRDb3VudCkK
K1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHN0ZDo6dHVwbGU8U3RyaW5nIC8qIHNlYXJjaElkICov
LCBpbnQgLyogcmVzdWx0Q291bnQgKi8+PiBJbnNwZWN0b3JET01BZ2VudDo6cGVyZm9ybVNlYXJj
aChjb25zdCBTdHJpbmcmIHF1ZXJ5LCBSZWZQdHI8SlNPTjo6QXJyYXk+JiYgbm9kZUlkcywgT3B0
aW9uYWw8Ym9vbD4mJiBjYXNlU2Vuc2l0aXZlKQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmlu
ZyBlcnJvclN0cmluZzsKKwogICAgIC8vIEZJWE1FOiBTZWFyY2ggd29ya3Mgd2l0aCBub2RlIGdy
YW51bGFyaXR5IC0gbnVtYmVyIG9mIG1hdGNoZXMgd2l0aGluIG5vZGUgaXMgbm90IGNhbGN1bGF0
ZWQuCiAgICAgSW5zcGVjdG9yTm9kZUZpbmRlciBmaW5kZXIocXVlcnksIGNhc2VTZW5zaXRpdmUg
JiYgKmNhc2VTZW5zaXRpdmUpOwogCiAgICAgaWYgKG5vZGVJZHMpIHsKICAgICAgICAgZm9yIChh
dXRvJiBub2RlVmFsdWUgOiAqbm9kZUlkcykgewotICAgICAgICAgICAgaWYgKCFub2RlVmFsdWUp
IHsKLSAgICAgICAgICAgICAgICBlcnJvclN0cmluZyA9ICJVbmV4cGVjdGVkIG5vbi1pbnRlZ2Vy
IGl0ZW0gaW4gZ2l2ZW4gbm9kZUlkcyJfczsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBpbnQgbm9kZUlkID0gMDsKLSAgICAgICAgICAgIGlmICgh
bm9kZVZhbHVlLT5hc0ludGVnZXIobm9kZUlkKSkgewotICAgICAgICAgICAgICAgIGVycm9yU3Ry
aW5nID0gIlVuZXhwZWN0ZWQgbm9uLWludGVnZXIgaXRlbSBpbiBnaXZlbiBub2RlSWRzIl9zOwot
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIE5vZGUq
IG5vZGUgPSBhc3NlcnROb2RlKGVycm9yU3RyaW5nLCBub2RlSWQpOwotICAgICAgICAgICAgaWYg
KCFub2RlKSB7Ci0gICAgICAgICAgICAgICAgLy8gYXNzZXJ0Tm9kZSBzaG91bGQgaGF2ZSBmaWxs
ZWQgdGhlIGVycm9yU3RyaW5nIGZvciB1cy4KLSAgICAgICAgICAgICAgICBBU1NFUlQoZXJyb3JT
dHJpbmcubGVuZ3RoKCkpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGF1dG8gbm9kZUlkID0gbm9kZVZhbHVlLT5hc0ludGVnZXIoKTsKKyAgICAg
ICAgICAgIGlmICghbm9kZUlkKQorICAgICAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3Rl
ZCgiVW5leHBlY3RlZCBub24taW50ZWdlciBpdGVtIGluIGdpdmVuIG5vZGVJZHMiX3MpOworCisg
ICAgICAgICAgICBOb2RlKiBub2RlID0gYXNzZXJ0Tm9kZShlcnJvclN0cmluZywgKm5vZGVJZCk7
CisgICAgICAgICAgICBpZiAoIW5vZGUpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4
cGVjdGVkKGVycm9yU3RyaW5nKTsKKwogICAgICAgICAgICAgZmluZGVyLnBlcmZvcm1TZWFyY2go
bm9kZSk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewpAQCAtMTA1OCwzNyArMTA5MCwzNiBAQCB2
b2lkIEluc3BlY3RvckRPTUFnZW50OjpwZXJmb3JtU2VhcmNoKEVycm9yU3RyaW5nJiBlcnJvclN0
cmluZywgY29uc3QgU3RyaW5nJiBxdQogICAgICAgICBmaW5kZXIucGVyZm9ybVNlYXJjaChtX2Rv
Y3VtZW50LmdldCgpKTsKICAgICB9CiAKLSAgICAqc2VhcmNoSWQgPSBJZGVudGlmaWVyc0ZhY3Rv
cnk6OmNyZWF0ZUlkZW50aWZpZXIoKTsKKyAgICBhdXRvIHNlYXJjaElkID0gSWRlbnRpZmllcnNG
YWN0b3J5OjpjcmVhdGVJZGVudGlmaWVyKCk7CiAKLSAgICBhdXRvJiByZXN1bHRzVmVjdG9yID0g
bV9zZWFyY2hSZXN1bHRzLmFkZCgqc2VhcmNoSWQsIFZlY3RvcjxSZWZQdHI8Tm9kZT4+KCkpLml0
ZXJhdG9yLT52YWx1ZTsKKyAgICBhdXRvJiByZXN1bHRzVmVjdG9yID0gbV9zZWFyY2hSZXN1bHRz
LmFkZChzZWFyY2hJZCwgVmVjdG9yPFJlZlB0cjxOb2RlPj4oKSkuaXRlcmF0b3ItPnZhbHVlOwog
ICAgIGZvciAoYXV0byYgcmVzdWx0IDogZmluZGVyLnJlc3VsdHMoKSkKICAgICAgICAgcmVzdWx0
c1ZlY3Rvci5hcHBlbmQocmVzdWx0KTsKIAotICAgICpyZXN1bHRDb3VudCA9IHJlc3VsdHNWZWN0
b3Iuc2l6ZSgpOworICAgIHJldHVybiB7IHsgc2VhcmNoSWQsIHJlc3VsdHNWZWN0b3Iuc2l6ZSgp
IH0gfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Z2V0U2VhcmNoUmVzdWx0cyhFcnJv
clN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgc2VhcmNoSWQsIGludCBmcm9tSW5k
ZXgsIGludCB0b0luZGV4LCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxpbnQ+PiYgbm9kZUlkcykKK1By
b3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpET006Ok5v
ZGVJZD4+PiBJbnNwZWN0b3JET01BZ2VudDo6Z2V0U2VhcmNoUmVzdWx0cyhjb25zdCBTdHJpbmcm
IHNlYXJjaElkLCBpbnQgZnJvbUluZGV4LCBpbnQgdG9JbmRleCkKIHsKICAgICBTZWFyY2hSZXN1
bHRzOjppdGVyYXRvciBpdCA9IG1fc2VhcmNoUmVzdWx0cy5maW5kKHNlYXJjaElkKTsKLSAgICBp
ZiAoaXQgPT0gbV9zZWFyY2hSZXN1bHRzLmVuZCgpKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0g
Ik1pc3Npbmcgc2VhcmNoIHJlc3VsdCBmb3IgZ2l2ZW4gc2VhcmNoSWQiX3M7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9CisgICAgaWYgKGl0ID09IG1fc2VhcmNoUmVzdWx0cy5lbmQoKSkKKyAgICAg
ICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJNaXNzaW5nIHNlYXJjaCByZXN1bHQgZm9yIGdpdmVu
IHNlYXJjaElkIl9zKTsKIAogICAgIGludCBzaXplID0gaXQtPnZhbHVlLnNpemUoKTsKLSAgICBp
ZiAoZnJvbUluZGV4IDwgMCB8fCB0b0luZGV4ID4gc2l6ZSB8fCBmcm9tSW5kZXggPj0gdG9JbmRl
eCkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJJbnZhbGlkIHNlYXJjaCByZXN1bHQgcmFuZ2Ug
Zm9yIGdpdmVuIGZyb21JbmRleCBhbmQgdG9JbmRleCJfczsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KKyAgICBpZiAoZnJvbUluZGV4IDwgMCB8fCB0b0luZGV4ID4gc2l6ZSB8fCBmcm9tSW5kZXgg
Pj0gdG9JbmRleCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJJbnZhbGlkIHNlYXJj
aCByZXN1bHQgcmFuZ2UgZm9yIGdpdmVuIGZyb21JbmRleCBhbmQgdG9JbmRleCJfcyk7CiAKLSAg
ICBub2RlSWRzID0gSlNPTjo6QXJyYXlPZjxpbnQ+OjpjcmVhdGUoKTsKKyAgICBhdXRvIG5vZGVJ
ZHMgPSBKU09OOjpBcnJheU9mPFByb3RvY29sOjpET006Ok5vZGVJZD46OmNyZWF0ZSgpOwogICAg
IGZvciAoaW50IGkgPSBmcm9tSW5kZXg7IGkgPCB0b0luZGV4OyArK2kpCiAgICAgICAgIG5vZGVJ
ZHMtPmFkZEl0ZW0ocHVzaE5vZGVQYXRoVG9Gcm9udGVuZCgoaXQtPnZhbHVlKVtpXS5nZXQoKSkp
OworICAgIHJldHVybiBXVEZNb3ZlKG5vZGVJZHMpOwogfQogCi12b2lkIEluc3BlY3RvckRPTUFn
ZW50OjpkaXNjYXJkU2VhcmNoUmVzdWx0cyhFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgc2Vh
cmNoSWQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JET01BZ2VudDo6
ZGlzY2FyZFNlYXJjaFJlc3VsdHMoY29uc3QgU3RyaW5nJiBzZWFyY2hJZCkKIHsKICAgICBtX3Nl
YXJjaFJlc3VsdHMucmVtb3ZlKHNlYXJjaElkKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKIGJv
b2wgSW5zcGVjdG9yRE9NQWdlbnQ6OmhhbmRsZU1vdXNlUHJlc3MoKQpAQCAtMTExNyw3ICsxMTQ4
LDcgQEAgYm9vbCBJbnNwZWN0b3JET01BZ2VudDo6aGFuZGxlVG91Y2hFdmVudChOb2RlJiBub2Rl
KQogCiB2b2lkIEluc3BlY3RvckRPTUFnZW50OjppbnNwZWN0KE5vZGUqIGluc3BlY3RlZE5vZGUp
CiB7Ci0gICAgRXJyb3JTdHJpbmcgaWdub3JlZDsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcg
aWdub3JlZDsKICAgICBSZWZQdHI8Tm9kZT4gbm9kZSA9IGluc3BlY3RlZE5vZGU7CiAgICAgc2V0
U2VhcmNoaW5nRm9yTm9kZShpZ25vcmVkLCBmYWxzZSwgbnVsbHB0ciwgZmFsc2UpOwogCkBAIC0x
MTczLDcgKzEyMDQsNyBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpoaWdobGlnaHRNb3VzZWRP
dmVyTm9kZSgpCiAgICAgICAgIG1fb3ZlcmxheS0+aGlnaGxpZ2h0Tm9kZShub2RlLCAqbV9pbnNw
ZWN0TW9kZUhpZ2hsaWdodENvbmZpZyk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNl
dFNlYXJjaGluZ0Zvck5vZGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBib29sIGVuYWJsZWQs
IGNvbnN0IEpTT046Ok9iamVjdCogaGlnaGxpZ2h0SW5zcGVjdG9yT2JqZWN0LCBib29sIHNob3dS
dWxlcnMpCit2b2lkIEluc3BlY3RvckRPTUFnZW50OjpzZXRTZWFyY2hpbmdGb3JOb2RlKFByb3Rv
Y29sOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGJvb2wgZW5hYmxlZCwgUmVmUHRyPEpTT046
Ok9iamVjdD4mJiBoaWdobGlnaHRJbnNwZWN0b3JPYmplY3QsIGJvb2wgc2hvd1J1bGVycykKIHsK
ICAgICBpZiAobV9zZWFyY2hpbmdGb3JOb2RlID09IGVuYWJsZWQpCiAgICAgICAgIHJldHVybjsK
QEAgLTExODMsMTIgKzEyMTQsMTIgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c2V0U2VhcmNo
aW5nRm9yTm9kZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGJvb2wgZW5hYmwKICAgICBtX292
ZXJsYXktPnNldFNob3dSdWxlcnNEdXJpbmdFbGVtZW50U2VsZWN0aW9uKG1fc2VhcmNoaW5nRm9y
Tm9kZSAmJiBzaG93UnVsZXJzKTsKIAogICAgIGlmIChtX3NlYXJjaGluZ0Zvck5vZGUpIHsKLSAg
ICAgICAgbV9pbnNwZWN0TW9kZUhpZ2hsaWdodENvbmZpZyA9IGhpZ2hsaWdodENvbmZpZ0Zyb21J
bnNwZWN0b3JPYmplY3QoZXJyb3JTdHJpbmcsIGhpZ2hsaWdodEluc3BlY3Rvck9iamVjdCk7Cisg
ICAgICAgIG1faW5zcGVjdE1vZGVIaWdobGlnaHRDb25maWcgPSBoaWdobGlnaHRDb25maWdGcm9t
SW5zcGVjdG9yT2JqZWN0KGVycm9yU3RyaW5nLCBXVEZNb3ZlKGhpZ2hsaWdodEluc3BlY3Rvck9i
amVjdCkpOwogICAgICAgICBpZiAoIW1faW5zcGVjdE1vZGVIaWdobGlnaHRDb25maWcpCiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIGhpZ2hsaWdodE1vdXNlZE92ZXJOb2RlKCk7CiAgICAg
fSBlbHNlCi0gICAgICAgIGhpZGVIaWdobGlnaHQoZXJyb3JTdHJpbmcpOworICAgICAgICBoaWRl
SGlnaGxpZ2h0KCk7CiAKICAgICBtX292ZXJsYXktPmRpZFNldFNlYXJjaGluZ0Zvck5vZGUobV9z
ZWFyY2hpbmdGb3JOb2RlKTsKIApAQCAtMTE5Niw3ICsxMjI3LDcgQEAgdm9pZCBJbnNwZWN0b3JE
T01BZ2VudDo6c2V0U2VhcmNoaW5nRm9yTm9kZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGJv
b2wgZW5hYmwKICAgICAgICAgY2xpZW50LT5lbGVtZW50U2VsZWN0aW9uQ2hhbmdlZChtX3NlYXJj
aGluZ0Zvck5vZGUpOwogfQogCi1zdGQ6OnVuaXF1ZV9wdHI8SGlnaGxpZ2h0Q29uZmlnPiBJbnNw
ZWN0b3JET01BZ2VudDo6aGlnaGxpZ2h0Q29uZmlnRnJvbUluc3BlY3Rvck9iamVjdChFcnJvclN0
cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IEpTT046Ok9iamVjdCogaGlnaGxpZ2h0SW5zcGVjdG9y
T2JqZWN0KQorc3RkOjp1bmlxdWVfcHRyPEhpZ2hsaWdodENvbmZpZz4gSW5zcGVjdG9yRE9NQWdl
bnQ6OmhpZ2hsaWdodENvbmZpZ0Zyb21JbnNwZWN0b3JPYmplY3QoUHJvdG9jb2w6OkVycm9yU3Ry
aW5nJiBlcnJvclN0cmluZywgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBoaWdobGlnaHRJbnNwZWN0
b3JPYmplY3QpCiB7CiAgICAgaWYgKCFoaWdobGlnaHRJbnNwZWN0b3JPYmplY3QpIHsKICAgICAg
ICAgZXJyb3JTdHJpbmcgPSAiSW50ZXJuYWwgZXJyb3I6IGhpZ2hsaWdodCBjb25maWd1cmF0aW9u
IHBhcmFtZXRlciBpcyBtaXNzaW5nIl9zOwpAQCAtMTIwNCw4MSArMTIzNSw5MyBAQCBzdGQ6OnVu
aXF1ZV9wdHI8SGlnaGxpZ2h0Q29uZmlnPiBJbnNwZWN0b3JET01BZ2VudDo6aGlnaGxpZ2h0Q29u
ZmlnRnJvbUluc3BlY3RvcgogICAgIH0KIAogICAgIGF1dG8gaGlnaGxpZ2h0Q29uZmlnID0gbWFr
ZVVuaXF1ZTxIaWdobGlnaHRDb25maWc+KCk7Ci0gICAgYm9vbCBzaG93SW5mbyA9IGZhbHNlOyAv
LyBEZWZhdWx0OiBmYWxzZSAoZG8gbm90IHNob3cgYSB0b29sdGlwKS4KLSAgICBoaWdobGlnaHRJ
bnNwZWN0b3JPYmplY3QtPmdldEJvb2xlYW4oInNob3dJbmZvIiwgc2hvd0luZm8pOwotICAgIGhp
Z2hsaWdodENvbmZpZy0+c2hvd0luZm8gPSBzaG93SW5mbzsKLSAgICBoaWdobGlnaHRDb25maWct
PmNvbnRlbnQgPSBwYXJzZUNvbmZpZ0NvbG9yKCJjb250ZW50Q29sb3IiLCBoaWdobGlnaHRJbnNw
ZWN0b3JPYmplY3QpOwotICAgIGhpZ2hsaWdodENvbmZpZy0+Y29udGVudE91dGxpbmUgPSBwYXJz
ZUNvbmZpZ0NvbG9yKCJjb250ZW50T3V0bGluZUNvbG9yIiwgaGlnaGxpZ2h0SW5zcGVjdG9yT2Jq
ZWN0KTsKLSAgICBoaWdobGlnaHRDb25maWctPnBhZGRpbmcgPSBwYXJzZUNvbmZpZ0NvbG9yKCJw
YWRkaW5nQ29sb3IiLCBoaWdobGlnaHRJbnNwZWN0b3JPYmplY3QpOwotICAgIGhpZ2hsaWdodENv
bmZpZy0+Ym9yZGVyID0gcGFyc2VDb25maWdDb2xvcigiYm9yZGVyQ29sb3IiLCBoaWdobGlnaHRJ
bnNwZWN0b3JPYmplY3QpOwotICAgIGhpZ2hsaWdodENvbmZpZy0+bWFyZ2luID0gcGFyc2VDb25m
aWdDb2xvcigibWFyZ2luQ29sb3IiLCBoaWdobGlnaHRJbnNwZWN0b3JPYmplY3QpOworICAgIGhp
Z2hsaWdodENvbmZpZy0+c2hvd0luZm8gPSBoaWdobGlnaHRJbnNwZWN0b3JPYmplY3QtPmdldEJv
b2xlYW4oUHJvdG9jb2w6OkRPTTo6SGlnaGxpZ2h0Q29uZmlnOjpzaG93SW5mb0tleSkudmFsdWVP
cihmYWxzZSk7CisgICAgaGlnaGxpZ2h0Q29uZmlnLT5jb250ZW50ID0gcGFyc2VDb25maWdDb2xv
cihQcm90b2NvbDo6RE9NOjpIaWdobGlnaHRDb25maWc6OmNvbnRlbnRDb2xvcktleSwgKmhpZ2hs
aWdodEluc3BlY3Rvck9iamVjdCk7CisgICAgaGlnaGxpZ2h0Q29uZmlnLT5wYWRkaW5nID0gcGFy
c2VDb25maWdDb2xvcihQcm90b2NvbDo6RE9NOjpIaWdobGlnaHRDb25maWc6OnBhZGRpbmdDb2xv
cktleSwgKmhpZ2hsaWdodEluc3BlY3Rvck9iamVjdCk7CisgICAgaGlnaGxpZ2h0Q29uZmlnLT5i
b3JkZXIgPSBwYXJzZUNvbmZpZ0NvbG9yKFByb3RvY29sOjpET006OkhpZ2hsaWdodENvbmZpZzo6
Ym9yZGVyQ29sb3JLZXksICpoaWdobGlnaHRJbnNwZWN0b3JPYmplY3QpOworICAgIGhpZ2hsaWdo
dENvbmZpZy0+bWFyZ2luID0gcGFyc2VDb25maWdDb2xvcihQcm90b2NvbDo6RE9NOjpIaWdobGln
aHRDb25maWc6Om1hcmdpbkNvbG9yS2V5LCAqaGlnaGxpZ2h0SW5zcGVjdG9yT2JqZWN0KTsKICAg
ICByZXR1cm4gaGlnaGxpZ2h0Q29uZmlnOwogfQogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkK
LXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNldEluc3BlY3RNb2RlRW5hYmxlZChFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcsIGJvb2wgZW5hYmxlZCwgY29uc3QgSlNPTjo6T2JqZWN0KiBoaWdobGln
aHRDb25maWcpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JET01BZ2Vu
dDo6c2V0SW5zcGVjdE1vZGVFbmFibGVkKGJvb2wgZW5hYmxlZCwgUmVmUHRyPEpTT046Ok9iamVj
dD4mJiBoaWdobGlnaHRDb25maWcpCiB7Ci0gICAgc2V0U2VhcmNoaW5nRm9yTm9kZShlcnJvclN0
cmluZywgZW5hYmxlZCwgaGlnaGxpZ2h0Q29uZmlnID8gaGlnaGxpZ2h0Q29uZmlnIDogbnVsbHB0
ciwgZmFsc2UpOworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKworICAg
IHNldFNlYXJjaGluZ0Zvck5vZGUoZXJyb3JTdHJpbmcsIGVuYWJsZWQsIFdURk1vdmUoaGlnaGxp
Z2h0Q29uZmlnKSwgZmFsc2UpOworCisgICAgaWYgKCEhZXJyb3JTdHJpbmcpCisgICAgICAgIHJl
dHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CisKKyAgICByZXR1cm4geyB9OwogfQog
I2Vsc2UKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNldEluc3BlY3RNb2RlRW5hYmxlZChFcnJv
clN0cmluZyYgZXJyb3JTdHJpbmcsIGJvb2wgZW5hYmxlZCwgY29uc3QgSlNPTjo6T2JqZWN0KiBo
aWdobGlnaHRDb25maWcsIGNvbnN0IGJvb2wqIHNob3dSdWxlcnMpCitQcm90b2NvbDo6RXJyb3JT
dHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JET01BZ2VudDo6c2V0SW5zcGVjdE1vZGVFbmFibGVkKGJv
b2wgZW5hYmxlZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBoaWdobGlnaHRDb25maWcsIE9wdGlv
bmFsPGJvb2w+JiYgc2hvd1J1bGVycykKIHsKLSAgICBzZXRTZWFyY2hpbmdGb3JOb2RlKGVycm9y
U3RyaW5nLCBlbmFibGVkLCBoaWdobGlnaHRDb25maWcgPyBoaWdobGlnaHRDb25maWcgOiBudWxs
cHRyLCBzaG93UnVsZXJzICYmICpzaG93UnVsZXJzKTsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJp
bmcgZXJyb3JTdHJpbmc7CisKKyAgICBzZXRTZWFyY2hpbmdGb3JOb2RlKGVycm9yU3RyaW5nLCBl
bmFibGVkLCBXVEZNb3ZlKGhpZ2hsaWdodENvbmZpZyksIHNob3dSdWxlcnMgJiYgKnNob3dSdWxl
cnMpOworCisgICAgaWYgKCEhZXJyb3JTdHJpbmcpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBl
Y3RlZChlcnJvclN0cmluZyk7CisKKyAgICByZXR1cm4geyB9OwogfQogI2VuZGlmCiAKLXZvaWQg
SW5zcGVjdG9yRE9NQWdlbnQ6OmhpZ2hsaWdodFJlY3QoRXJyb3JTdHJpbmcmLCBpbnQgeCwgaW50
IHksIGludCB3aWR0aCwgaW50IGhlaWdodCwgY29uc3QgSlNPTjo6T2JqZWN0KiBjb2xvciwgY29u
c3QgSlNPTjo6T2JqZWN0KiBvdXRsaW5lQ29sb3IsIGNvbnN0IGJvb2wqIHVzZVBhZ2VDb29yZGlu
YXRlcykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRPTUFnZW50Ojpo
aWdobGlnaHRSZWN0KGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBSZWZQdHI8
SlNPTjo6T2JqZWN0PiYmIGNvbG9yLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIG91dGxpbmVDb2xv
ciwgT3B0aW9uYWw8Ym9vbD4mJiB1c2VQYWdlQ29vcmRpbmF0ZXMpCiB7CiAgICAgYXV0byBxdWFk
ID0gbWFrZVVuaXF1ZTxGbG9hdFF1YWQ+KEZsb2F0UmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KSk7
Ci0gICAgaW5uZXJIaWdobGlnaHRRdWFkKFdURk1vdmUocXVhZCksIGNvbG9yLCBvdXRsaW5lQ29s
b3IsIHVzZVBhZ2VDb29yZGluYXRlcyk7CisgICAgaW5uZXJIaWdobGlnaHRRdWFkKFdURk1vdmUo
cXVhZCksIFdURk1vdmUoY29sb3IpLCBXVEZNb3ZlKG91dGxpbmVDb2xvciksIFdURk1vdmUodXNl
UGFnZUNvb3JkaW5hdGVzKSk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3Rv
ckRPTUFnZW50OjpoaWdobGlnaHRRdWFkKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3Qg
SlNPTjo6QXJyYXkmIHF1YWRBcnJheSwgY29uc3QgSlNPTjo6T2JqZWN0KiBjb2xvciwgY29uc3Qg
SlNPTjo6T2JqZWN0KiBvdXRsaW5lQ29sb3IsIGNvbnN0IGJvb2wqIHVzZVBhZ2VDb29yZGluYXRl
cykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRPTUFnZW50OjpoaWdo
bGlnaHRRdWFkKFJlZjxKU09OOjpBcnJheT4mJiBxdWFkT2JqZWN0LCBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiYmIGNvbG9yLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIG91dGxpbmVDb2xvciwgT3B0aW9u
YWw8Ym9vbD4mJiB1c2VQYWdlQ29vcmRpbmF0ZXMpCiB7CiAgICAgYXV0byBxdWFkID0gbWFrZVVu
aXF1ZTxGbG9hdFF1YWQ+KCk7Ci0gICAgaWYgKCFwYXJzZVF1YWQocXVhZEFycmF5LCBxdWFkLmdl
dCgpKSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJVbmV4cGVjdGVkIGludmFsaWQgcXVhZEFy
cmF5Il9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlubmVySGlnaGxpZ2h0UXVhZChX
VEZNb3ZlKHF1YWQpLCBjb2xvciwgb3V0bGluZUNvbG9yLCB1c2VQYWdlQ29vcmRpbmF0ZXMpOwor
ICAgIGlmICghcGFyc2VRdWFkKFdURk1vdmUocXVhZE9iamVjdCksIHF1YWQuZ2V0KCkpKQorICAg
ICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIlVuZXhwZWN0ZWQgaW52YWxpZCBxdWFkIl9zKTsK
KworICAgIGlubmVySGlnaGxpZ2h0UXVhZChXVEZNb3ZlKHF1YWQpLCBXVEZNb3ZlKGNvbG9yKSwg
V1RGTW92ZShvdXRsaW5lQ29sb3IpLCBXVEZNb3ZlKHVzZVBhZ2VDb29yZGluYXRlcykpOworCisg
ICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6aW5uZXJIaWdobGln
aHRRdWFkKHN0ZDo6dW5pcXVlX3B0cjxGbG9hdFF1YWQ+IHF1YWQsIGNvbnN0IEpTT046Ok9iamVj
dCogY29sb3IsIGNvbnN0IEpTT046Ok9iamVjdCogb3V0bGluZUNvbG9yLCBjb25zdCBib29sKiB1
c2VQYWdlQ29vcmRpbmF0ZXMpCit2b2lkIEluc3BlY3RvckRPTUFnZW50Ojppbm5lckhpZ2hsaWdo
dFF1YWQoc3RkOjp1bmlxdWVfcHRyPEZsb2F0UXVhZD4gcXVhZCwgUmVmUHRyPEpTT046Ok9iamVj
dD4mJiBjb2xvciwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBvdXRsaW5lQ29sb3IsIE9wdGlvbmFs
PGJvb2w+JiYgdXNlUGFnZUNvb3JkaW5hdGVzKQogewogICAgIGF1dG8gaGlnaGxpZ2h0Q29uZmln
ID0gbWFrZVVuaXF1ZTxIaWdobGlnaHRDb25maWc+KCk7Ci0gICAgaGlnaGxpZ2h0Q29uZmlnLT5j
b250ZW50ID0gcGFyc2VDb2xvcihjb2xvcik7Ci0gICAgaGlnaGxpZ2h0Q29uZmlnLT5jb250ZW50
T3V0bGluZSA9IHBhcnNlQ29sb3Iob3V0bGluZUNvbG9yKTsKKyAgICBoaWdobGlnaHRDb25maWct
PmNvbnRlbnQgPSBwYXJzZUNvbG9yKFdURk1vdmUoY29sb3IpKTsKKyAgICBoaWdobGlnaHRDb25m
aWctPmNvbnRlbnRPdXRsaW5lID0gcGFyc2VDb2xvcihXVEZNb3ZlKG91dGxpbmVDb2xvcikpOwog
ICAgIGhpZ2hsaWdodENvbmZpZy0+dXNlUGFnZUNvb3JkaW5hdGVzID0gdXNlUGFnZUNvb3JkaW5h
dGVzID8gKnVzZVBhZ2VDb29yZGluYXRlcyA6IGZhbHNlOwogICAgIG1fb3ZlcmxheS0+aGlnaGxp
Z2h0UXVhZChXVEZNb3ZlKHF1YWQpLCAqaGlnaGxpZ2h0Q29uZmlnKTsKIH0KIAotdm9pZCBJbnNw
ZWN0b3JET01BZ2VudDo6aGlnaGxpZ2h0U2VsZWN0b3IoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5n
LCBjb25zdCBKU09OOjpPYmplY3QmIGhpZ2hsaWdodEluc3BlY3Rvck9iamVjdCwgY29uc3QgU3Ry
aW5nJiBzZWxlY3RvclN0cmluZywgY29uc3QgU3RyaW5nKiBmcmFtZUlkKQorUHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yRE9NQWdlbnQ6OmhpZ2hsaWdodFNlbGVjdG9yKFJl
ZjxKU09OOjpPYmplY3Q+JiYgaGlnaGxpZ2h0SW5zcGVjdG9yT2JqZWN0LCBjb25zdCBTdHJpbmcm
IHNlbGVjdG9yU3RyaW5nLCBjb25zdCBQcm90b2NvbDo6TmV0d29yazo6RnJhbWVJZCYgZnJhbWVJ
ZCkKIHsKLSAgICBhdXRvIGhpZ2hsaWdodENvbmZpZyA9IGhpZ2hsaWdodENvbmZpZ0Zyb21JbnNw
ZWN0b3JPYmplY3QoZXJyb3JTdHJpbmcsICZoaWdobGlnaHRJbnNwZWN0b3JPYmplY3QpOworICAg
IFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKworICAgIGF1dG8gaGlnaGxpZ2h0
Q29uZmlnID0gaGlnaGxpZ2h0Q29uZmlnRnJvbUluc3BlY3Rvck9iamVjdChlcnJvclN0cmluZywg
V1RGTW92ZShoaWdobGlnaHRJbnNwZWN0b3JPYmplY3QpKTsKICAgICBpZiAoIWhpZ2hsaWdodENv
bmZpZykKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJy
b3JTdHJpbmcpOwogCiAgICAgUmVmUHRyPERvY3VtZW50PiBkb2N1bWVudDsKIAotICAgIGlmIChm
cmFtZUlkKSB7CisgICAgaWYgKCEhZnJhbWVJZCkgewogICAgICAgICBhdXRvKiBwYWdlQWdlbnQg
PSBtX2luc3RydW1lbnRpbmdBZ2VudHMuZW5hYmxlZFBhZ2VBZ2VudCgpOwotICAgICAgICBpZiAo
IXBhZ2VBZ2VudCkgewotICAgICAgICAgICAgZXJyb3JTdHJpbmcgPSAiUGFnZSBkb21haW4gbXVz
dCBiZSBlbmFibGVkIl9zOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9CisgICAgICAg
IGlmICghcGFnZUFnZW50KQorICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJQYWdl
IGRvbWFpbiBtdXN0IGJlIGVuYWJsZWQiX3MpOwogCi0gICAgICAgIGF1dG8qIGZyYW1lID0gcGFn
ZUFnZW50LT5hc3NlcnRGcmFtZShlcnJvclN0cmluZywgKmZyYW1lSWQpOworICAgICAgICBhdXRv
KiBmcmFtZSA9IHBhZ2VBZ2VudC0+YXNzZXJ0RnJhbWUoZXJyb3JTdHJpbmcsIGZyYW1lSWQpOwog
ICAgICAgICBpZiAoIWZyYW1lKQotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgcmV0
dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgICAgICBkb2N1bWVudCA9IGZy
YW1lLT5kb2N1bWVudCgpOwogICAgIH0gZWxzZQogICAgICAgICBkb2N1bWVudCA9IG1fZG9jdW1l
bnQ7CiAKLSAgICBpZiAoIWRvY3VtZW50KSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIk1pc3Np
bmcgZG9jdW1lbnQgb2YgZnJhbWUgZm9yIGdpdmVuIGZyYW1lSWQiX3M7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9CisgICAgaWYgKCFkb2N1bWVudCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVj
dGVkKCJNaXNzaW5nIGRvY3VtZW50IG9mIGZyYW1lIGZvciBnaXZlbiBmcmFtZUlkIl9zKTsKIAog
ICAgIENTU1BhcnNlciBwYXJzZXIoKmRvY3VtZW50KTsKICAgICBDU1NTZWxlY3Rvckxpc3Qgc2Vs
ZWN0b3JMaXN0OwpAQCAtMTMzOSwxNTggKzEzODIsMTczIEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdl
bnQ6OmhpZ2hsaWdodFNlbGVjdG9yKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgSlNP
Tjo6CiAgICAgfQogCiAgICAgbV9vdmVybGF5LT5oaWdobGlnaHROb2RlTGlzdChTdGF0aWNOb2Rl
TGlzdDo6Y3JlYXRlKFdURk1vdmUobm9kZUxpc3QpKSwgKmhpZ2hsaWdodENvbmZpZyk7CisKKyAg
ICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpoaWdobGlnaHROb2Rl
KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgSlNPTjo6T2JqZWN0JiBoaWdobGlnaHRJ
bnNwZWN0b3JPYmplY3QsIGNvbnN0IGludCogbm9kZUlkLCBjb25zdCBTdHJpbmcqIG9iamVjdElk
KQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yRE9NQWdlbnQ6OmhpZ2hs
aWdodE5vZGUoUmVmPEpTT046Ok9iamVjdD4mJiBoaWdobGlnaHRJbnNwZWN0b3JPYmplY3QsIE9w
dGlvbmFsPFByb3RvY29sOjpET006Ok5vZGVJZD4mJiBub2RlSWQsIGNvbnN0IFByb3RvY29sOjpS
dW50aW1lOjpSZW1vdGVPYmplY3RJZCYgb2JqZWN0SWQpCiB7CisgICAgUHJvdG9jb2w6OkVycm9y
U3RyaW5nIGVycm9yU3RyaW5nOworCiAgICAgTm9kZSogbm9kZSA9IG51bGxwdHI7CiAgICAgaWYg
KG5vZGVJZCkKICAgICAgICAgbm9kZSA9IGFzc2VydE5vZGUoZXJyb3JTdHJpbmcsICpub2RlSWQp
OwotICAgIGVsc2UgaWYgKG9iamVjdElkKSB7Ci0gICAgICAgIG5vZGUgPSBub2RlRm9yT2JqZWN0
SWQoKm9iamVjdElkKTsKLSAgICAgICAgaWYgKCFub2RlKQotICAgICAgICAgICAgZXJyb3JTdHJp
bmcgPSAiTWlzc2luZyBub2RlIGZvciBnaXZlbiBvYmplY3RJZCJfczsKKyAgICBlbHNlIGlmICgh
IW9iamVjdElkKSB7CisgICAgICAgIG5vZGUgPSBub2RlRm9yT2JqZWN0SWQob2JqZWN0SWQpOwor
ICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIG5vZGUgZm9yIGdpdmVuIG9iamVjdElkIl9z
OwogICAgIH0gZWxzZQogICAgICAgICBlcnJvclN0cmluZyA9ICJFaXRoZXIgbm9kZUlkIG9yIG9i
amVjdElkIG11c3QgYmUgc3BlY2lmaWVkIl9zOwogCiAgICAgaWYgKCFub2RlKQotICAgICAgICBy
ZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKLSAg
ICBzdGQ6OnVuaXF1ZV9wdHI8SGlnaGxpZ2h0Q29uZmlnPiBoaWdobGlnaHRDb25maWcgPSBoaWdo
bGlnaHRDb25maWdGcm9tSW5zcGVjdG9yT2JqZWN0KGVycm9yU3RyaW5nLCAmaGlnaGxpZ2h0SW5z
cGVjdG9yT2JqZWN0KTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SGlnaGxpZ2h0Q29uZmlnPiBoaWdo
bGlnaHRDb25maWcgPSBoaWdobGlnaHRDb25maWdGcm9tSW5zcGVjdG9yT2JqZWN0KGVycm9yU3Ry
aW5nLCBXVEZNb3ZlKGhpZ2hsaWdodEluc3BlY3Rvck9iamVjdCkpOwogICAgIGlmICghaGlnaGxp
Z2h0Q29uZmlnKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3Rl
ZChlcnJvclN0cmluZyk7CiAKICAgICBtX292ZXJsYXktPmhpZ2hsaWdodE5vZGUobm9kZSwgKmhp
Z2hsaWdodENvbmZpZyk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckRP
TUFnZW50OjpoaWdobGlnaHROb2RlTGlzdChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0
IEpTT046OkFycmF5JiBub2RlSWRzLCBjb25zdCBKU09OOjpPYmplY3QmIGhpZ2hsaWdodEluc3Bl
Y3Rvck9iamVjdCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRPTUFn
ZW50OjpoaWdobGlnaHROb2RlTGlzdChSZWY8SlNPTjo6QXJyYXk+JiYgbm9kZUlkcywgUmVmPEpT
T046Ok9iamVjdD4mJiBoaWdobGlnaHRJbnNwZWN0b3JPYmplY3QpCiB7Ci0gICAgVmVjdG9yPFJl
ZjxOb2RlPj4gbm9kZXM7Ci0gICAgZm9yIChhdXRvJiBub2RlVmFsdWUgOiBub2RlSWRzKSB7Ci0g
ICAgICAgIGlmICghbm9kZVZhbHVlKSB7Ci0gICAgICAgICAgICBlcnJvclN0cmluZyA9ICJVbmV4
cGVjdGVkIG5vbi1pbnRlZ2VyIGl0ZW0gaW4gZ2l2ZW4gbm9kZUlkcyJfczsKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfQorICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmlu
ZzsKIAotICAgICAgICBpbnQgbm9kZUlkID0gMDsKLSAgICAgICAgaWYgKCFub2RlVmFsdWUtPmFz
SW50ZWdlcihub2RlSWQpKSB7Ci0gICAgICAgICAgICBlcnJvclN0cmluZyA9ICJVbmV4cGVjdGVk
IG5vbi1pbnRlZ2VyIGl0ZW0gaW4gZ2l2ZW4gbm9kZUlkcyJfczsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQorICAgIFZlY3RvcjxSZWY8Tm9kZT4+IG5vZGVzOworICAgIGZvciAoYXV0
byYgbm9kZUlkVmFsdWUgOiBub2RlSWRzLmdldCgpKSB7CisgICAgICAgIGF1dG8gbm9kZUlkID0g
bm9kZUlkVmFsdWUtPmFzSW50ZWdlcigpOworICAgICAgICBpZiAoIW5vZGVJZCkKKyAgICAgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiVW5leHBlY3RlZCBub24taW50ZWdlciBpdGVtIGlu
IGdpdmVuIG5vZGVJZHMiX3MpOwogCiAgICAgICAgIC8vIEluIHRoZSBjYXNlIHRoYXQgYSBub2Rl
IGlzIHJlbW92ZWQgaW4gdGhlIHRpbWUgYmV0d2VlbiB3aGVuIGhpZ2hsaWdodE5vZGVMaXN0IGlz
IGludm9rZWQKICAgICAgICAgLy8gYnkgdGhlIGZyb250ZW5kIGFuZCBpdCBpcyBleGVjdXRlZCBi
eSB0aGUgYmFja2VuZCwgd2Ugc2hvdWxkIHN0aWxsIGF0dGVtcHQgdG8gaGlnaGxpZ2h0CiAgICAg
ICAgIC8vIGFzIG1hbnkgbm9kZXMgYXMgcG9zc2libGUuIEFzIHN1Y2gsIHdlIHNob3VsZCBpZ25v
cmUgYW55IGVycm9ycyBnZW5lcmF0ZWQgd2hlbiBhdHRlbXB0aW5nCiAgICAgICAgIC8vIHRvIGdl
dCBhIE5vZGUgZnJvbSBhIGdpdmVuIG5vZGVJZC4gCi0gICAgICAgIEVycm9yU3RyaW5nIGlnbm9y
ZWQ7Ci0gICAgICAgIE5vZGUqIG5vZGUgPSBhc3NlcnROb2RlKGlnbm9yZWQsIG5vZGVJZCk7Cisg
ICAgICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBpZ25vcmVkOworICAgICAgICBOb2RlKiBub2Rl
ID0gYXNzZXJ0Tm9kZShpZ25vcmVkLCAqbm9kZUlkKTsKICAgICAgICAgaWYgKCFub2RlKQogICAg
ICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgbm9kZXMuYXBwZW5kKCpub2RlKTsKICAgICB9
CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SGlnaGxpZ2h0Q29uZmlnPiBoaWdobGlnaHRDb25maWcg
PSBoaWdobGlnaHRDb25maWdGcm9tSW5zcGVjdG9yT2JqZWN0KGVycm9yU3RyaW5nLCAmaGlnaGxp
Z2h0SW5zcGVjdG9yT2JqZWN0KTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8SGlnaGxpZ2h0Q29uZmln
PiBoaWdobGlnaHRDb25maWcgPSBoaWdobGlnaHRDb25maWdGcm9tSW5zcGVjdG9yT2JqZWN0KGVy
cm9yU3RyaW5nLCBXVEZNb3ZlKGhpZ2hsaWdodEluc3BlY3Rvck9iamVjdCkpOwogICAgIGlmICgh
aGlnaGxpZ2h0Q29uZmlnKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5l
eHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAgICBtX292ZXJsYXktPmhpZ2hsaWdodE5vZGVMaXN0
KFN0YXRpY05vZGVMaXN0OjpjcmVhdGUoV1RGTW92ZShub2RlcykpLCAqaGlnaGxpZ2h0Q29uZmln
KTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmhpZ2hs
aWdodEZyYW1lKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBmcmFtZUlk
LCBjb25zdCBKU09OOjpPYmplY3QqIGNvbG9yLCBjb25zdCBKU09OOjpPYmplY3QqIG91dGxpbmVD
b2xvcikKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRPTUFnZW50Ojpo
aWdobGlnaHRGcmFtZShjb25zdCBQcm90b2NvbDo6TmV0d29yazo6RnJhbWVJZCYgZnJhbWVJZCwg
UmVmUHRyPEpTT046Ok9iamVjdD4mJiBjb2xvciwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBvdXRs
aW5lQ29sb3IpCiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAg
ICAgYXV0byogcGFnZUFnZW50ID0gbV9pbnN0cnVtZW50aW5nQWdlbnRzLmVuYWJsZWRQYWdlQWdl
bnQoKTsKLSAgICBpZiAoIXBhZ2VBZ2VudCkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJQYWdl
IGRvbWFpbiBtdXN0IGJlIGVuYWJsZWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAg
aWYgKCFwYWdlQWdlbnQpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiUGFnZSBkb21h
aW4gbXVzdCBiZSBlbmFibGVkIl9zKTsKIAogICAgIGF1dG8qIGZyYW1lID0gcGFnZUFnZW50LT5h
c3NlcnRGcmFtZShlcnJvclN0cmluZywgZnJhbWVJZCk7CiAgICAgaWYgKCFmcmFtZSkKLSAgICAg
ICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwog
CiAgICAgaWYgKGZyYW1lLT5vd25lckVsZW1lbnQoKSkgewogICAgICAgICBhdXRvIGhpZ2hsaWdo
dENvbmZpZyA9IG1ha2VVbmlxdWU8SGlnaGxpZ2h0Q29uZmlnPigpOwogICAgICAgICBoaWdobGln
aHRDb25maWctPnNob3dJbmZvID0gdHJ1ZTsgLy8gQWx3YXlzIHNob3cgdG9vbHRpcHMgZm9yIGZy
YW1lcy4KLSAgICAgICAgaGlnaGxpZ2h0Q29uZmlnLT5jb250ZW50ID0gcGFyc2VDb2xvcihjb2xv
cik7Ci0gICAgICAgIGhpZ2hsaWdodENvbmZpZy0+Y29udGVudE91dGxpbmUgPSBwYXJzZUNvbG9y
KG91dGxpbmVDb2xvcik7CisgICAgICAgIGhpZ2hsaWdodENvbmZpZy0+Y29udGVudCA9IHBhcnNl
Q29sb3IoV1RGTW92ZShjb2xvcikpOworICAgICAgICBoaWdobGlnaHRDb25maWctPmNvbnRlbnRP
dXRsaW5lID0gcGFyc2VDb2xvcihXVEZNb3ZlKG91dGxpbmVDb2xvcikpOwogICAgICAgICBtX292
ZXJsYXktPmhpZ2hsaWdodE5vZGUoZnJhbWUtPm93bmVyRWxlbWVudCgpLCAqaGlnaGxpZ2h0Q29u
ZmlnKTsKICAgICB9CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckRPTUFn
ZW50OjpoaWRlSGlnaGxpZ2h0KEVycm9yU3RyaW5nJikKK1Byb3RvY29sOjpFcnJvclN0cmluZ09y
PHZvaWQ+IEluc3BlY3RvckRPTUFnZW50OjpoaWRlSGlnaGxpZ2h0KCkKIHsKICAgICBtX292ZXJs
YXktPmhpZGVIaWdobGlnaHQoKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVj
dG9yRE9NQWdlbnQ6Om1vdmVUbyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQs
IGludCB0YXJnZXRFbGVtZW50SWQsIGNvbnN0IGludCogYW5jaG9yTm9kZUlkLCBpbnQqIG5ld05v
ZGVJZCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPFByb3RvY29sOjpET006Ok5vZGVJZD4gSW5z
cGVjdG9yRE9NQWdlbnQ6Om1vdmVUbyhQcm90b2NvbDo6RE9NOjpOb2RlSWQgbm9kZUlkLCBQcm90
b2NvbDo6RE9NOjpOb2RlSWQgdGFyZ2V0Tm9kZUlkLCBPcHRpb25hbDxQcm90b2NvbDo6RE9NOjpO
b2RlSWQ+JiYgaW5zZXJ0QmVmb3JlTm9kZUlkKQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmlu
ZyBlcnJvclN0cmluZzsKKwogICAgIE5vZGUqIG5vZGUgPSBhc3NlcnRFZGl0YWJsZU5vZGUoZXJy
b3JTdHJpbmcsIG5vZGVJZCk7CiAgICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm47CisgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKLSAgICBFbGVtZW50KiB0
YXJnZXRFbGVtZW50ID0gYXNzZXJ0RWRpdGFibGVFbGVtZW50KGVycm9yU3RyaW5nLCB0YXJnZXRF
bGVtZW50SWQpOworICAgIEVsZW1lbnQqIHRhcmdldEVsZW1lbnQgPSBhc3NlcnRFZGl0YWJsZUVs
ZW1lbnQoZXJyb3JTdHJpbmcsIHRhcmdldE5vZGVJZCk7CiAgICAgaWYgKCF0YXJnZXRFbGVtZW50
KQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0
cmluZyk7CiAKLSAgICBOb2RlKiBhbmNob3JOb2RlID0gMDsKLSAgICBpZiAoYW5jaG9yTm9kZUlk
ICYmICphbmNob3JOb2RlSWQpIHsKLSAgICAgICAgYW5jaG9yTm9kZSA9IGFzc2VydEVkaXRhYmxl
Tm9kZShlcnJvclN0cmluZywgKmFuY2hvck5vZGVJZCk7CisgICAgTm9kZSogYW5jaG9yTm9kZSA9
IG51bGxwdHI7CisgICAgaWYgKGluc2VydEJlZm9yZU5vZGVJZCAmJiAqaW5zZXJ0QmVmb3JlTm9k
ZUlkKSB7CisgICAgICAgIGFuY2hvck5vZGUgPSBhc3NlcnRFZGl0YWJsZU5vZGUoZXJyb3JTdHJp
bmcsICppbnNlcnRCZWZvcmVOb2RlSWQpOwogICAgICAgICBpZiAoIWFuY2hvck5vZGUpCi0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmIChhbmNob3JOb2RlLT5wYXJlbnROb2RlKCkgIT0g
dGFyZ2V0RWxlbWVudCkgewotICAgICAgICAgICAgZXJyb3JTdHJpbmcgPSAiR2l2ZW4gYW5jaG9y
Tm9kZUlkIG11c3QgYmUgYSBjaGlsZCBvZiBnaXZlbiB0YXJnZXRFbGVtZW50SWQiX3M7Ci0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBl
Y3RlZChlcnJvclN0cmluZyk7CisgICAgICAgIGlmIChhbmNob3JOb2RlLT5wYXJlbnROb2RlKCkg
IT0gdGFyZ2V0RWxlbWVudCkKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiR2l2
ZW4gaW5zZXJ0QmVmb3JlTm9kZUlkIG11c3QgYmUgYSBjaGlsZCBvZiBnaXZlbiB0YXJnZXROb2Rl
SWQiX3MpOwogICAgIH0KIAogICAgIGlmICghbV9kb21FZGl0b3ItPmluc2VydEJlZm9yZSgqdGFy
Z2V0RWxlbWVudCwgKm5vZGUsIGFuY2hvck5vZGUsIGVycm9yU3RyaW5nKSkKLSAgICAgICAgcmV0
dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCi0gICAg
Km5ld05vZGVJZCA9IHB1c2hOb2RlUGF0aFRvRnJvbnRlbmQoZXJyb3JTdHJpbmcsIG5vZGUpOwor
ICAgIHJldHVybiBwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKGVycm9yU3RyaW5nLCBub2RlKTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6dW5kbyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcp
CitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JET01BZ2VudDo6dW5kbygp
CiB7CiAgICAgYXV0byByZXN1bHQgPSBtX2hpc3RvcnktPnVuZG8oKTsKICAgICBpZiAocmVzdWx0
Lmhhc0V4Y2VwdGlvbigpKQotICAgICAgICBlcnJvclN0cmluZyA9IHRvRXJyb3JTdHJpbmcocmVz
dWx0LnJlbGVhc2VFeGNlcHRpb24oKSk7CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChJ
bnNwZWN0b3JET01BZ2VudDo6dG9FcnJvclN0cmluZyhyZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigp
KSk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpyZWRv
KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+
IEluc3BlY3RvckRPTUFnZW50OjpyZWRvKCkKIHsKICAgICBhdXRvIHJlc3VsdCA9IG1faGlzdG9y
eS0+cmVkbygpOwogICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpCi0gICAgICAgIGVycm9y
U3RyaW5nID0gdG9FcnJvclN0cmluZyhyZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpKTsKKyAgICAg
ICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEluc3BlY3RvckRPTUFnZW50Ojp0b0Vycm9yU3RyaW5n
KHJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCkpKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZv
aWQgSW5zcGVjdG9yRE9NQWdlbnQ6Om1hcmtVbmRvYWJsZVN0YXRlKEVycm9yU3RyaW5nJikKK1By
b3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRPTUFnZW50OjptYXJrVW5kb2Fi
bGVTdGF0ZSgpCiB7CiAgICAgbV9oaXN0b3J5LT5tYXJrVW5kb2FibGVTdGF0ZSgpOworCisgICAg
cmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Zm9jdXMoRXJyb3JTdHJp
bmcmIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9p
ZD4gSW5zcGVjdG9yRE9NQWdlbnQ6OmZvY3VzKFByb3RvY29sOjpET006Ok5vZGVJZCBub2RlSWQp
CiB7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAgICAgRWxlbWVu
dCogZWxlbWVudCA9IGFzc2VydEVsZW1lbnQoZXJyb3JTdHJpbmcsIG5vZGVJZCk7CiAgICAgaWYg
KCFlbGVtZW50KQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKCFlbGVtZW50LT5pc0ZvY3VzYWJs
ZSgpKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIkVsZW1lbnQgZm9yIGdpdmVuIG5vZGVJZCBp
cyBub3QgZm9jdXNhYmxlIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgICAgICByZXR1
cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOworICAgIGlmICghZWxlbWVudC0+aXNGb2N1
c2FibGUoKSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJFbGVtZW50IGZvciBnaXZl
biBub2RlSWQgaXMgbm90IGZvY3VzYWJsZSJfcyk7CisKICAgICBlbGVtZW50LT5mb2N1cygpOwor
CisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c2V0SW5zcGVj
dGVkTm9kZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQpCitQcm90b2NvbDo6
RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JET01BZ2VudDo6c2V0SW5zcGVjdGVkTm9kZShQ
cm90b2NvbDo6RE9NOjpOb2RlSWQgbm9kZUlkKQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmlu
ZyBlcnJvclN0cmluZzsKKwogICAgIE5vZGUqIG5vZGUgPSBhc3NlcnROb2RlKGVycm9yU3RyaW5n
LCBub2RlSWQpOwogICAgIGlmICghbm9kZSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1
cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCi0gICAgaWYgKG5vZGUtPmlzSW5Vc2Vy
QWdlbnRTaGFkb3dUcmVlKCkgJiYgIW1fYWxsb3dFZGl0aW5nVXNlckFnZW50U2hhZG93VHJlZXMp
IHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiTm9kZSBmb3IgZ2l2ZW4gbm9kZUlkIGlzIGluIGEg
c2hhZG93IHRyZWUiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKG5vZGUtPmlz
SW5Vc2VyQWdlbnRTaGFkb3dUcmVlKCkgJiYgIW1fYWxsb3dFZGl0aW5nVXNlckFnZW50U2hhZG93
VHJlZXMpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTm9kZSBmb3IgZ2l2ZW4gbm9k
ZUlkIGlzIGluIGEgc2hhZG93IHRyZWUiX3MpOwogCiAgICAgbV9pbnNwZWN0ZWROb2RlID0gbm9k
ZTsKIApAQCAtMTQ5OCwzOCArMTU1Niw0OSBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpzZXRJ
bnNwZWN0ZWROb2RlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50IG5vZGVJZCkKICAgICAg
ICAgY29tbWFuZExpbmVBUElIb3N0LT5hZGRJbnNwZWN0ZWRPYmplY3QobWFrZVVuaXF1ZTxJbnNw
ZWN0YWJsZU5vZGU+KG5vZGUpKTsKIAogICAgIG1fc3VwcHJlc3NFdmVudExpc3RlbmVyQ2hhbmdl
ZEV2ZW50ID0gZmFsc2U7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvckRP
TUFnZW50OjpyZXNvbHZlTm9kZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQs
IGNvbnN0IFN0cmluZyogb2JqZWN0R3JvdXAsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpS
dW50aW1lOjpSZW1vdGVPYmplY3Q+JiByZXN1bHQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxS
ZWY8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4+IEluc3BlY3RvckRPTUFnZW50Ojpy
ZXNvbHZlTm9kZShQcm90b2NvbDo6RE9NOjpOb2RlSWQgbm9kZUlkLCBjb25zdCBTdHJpbmcmIG9i
amVjdEdyb3VwKQogewotICAgIFN0cmluZyBvYmplY3RHcm91cE5hbWUgPSBvYmplY3RHcm91cCA/
ICpvYmplY3RHcm91cCA6IGVtcHR5U3RyaW5nKCk7CisgICAgUHJvdG9jb2w6OkVycm9yU3RyaW5n
IGVycm9yU3RyaW5nOworCiAgICAgTm9kZSogbm9kZSA9IGFzc2VydE5vZGUoZXJyb3JTdHJpbmcs
IG5vZGVJZCk7CiAgICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm47Ci0gICAgUmVmUHRyPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4gb2JqZWN0ID0gcmVzb2x2
ZU5vZGUobm9kZSwgb2JqZWN0R3JvdXBOYW1lKTsKLSAgICBpZiAoIW9iamVjdCkgewotICAgICAg
ICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIGluamVjdGVkIHNjcmlwdCBmb3IgZ2l2ZW4gbm9kZUlk
Il9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIHJlc3VsdCA9IG9iamVjdDsKKyAgICAg
ICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKKworICAgIGF1dG8gb2JqZWN0
ID0gcmVzb2x2ZU5vZGUobm9kZSwgb2JqZWN0R3JvdXApOworICAgIGlmICghb2JqZWN0KQorICAg
ICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk1pc3NpbmcgaW5qZWN0ZWQgc2NyaXB0IGZvciBn
aXZlbiBub2RlSWQiX3MpOworCisgICAgcmV0dXJuIG9iamVjdC5yZWxlYXNlTm9uTnVsbCgpOwog
fQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpnZXRBdHRyaWJ1dGVzKEVycm9yU3RyaW5nJiBl
cnJvclN0cmluZywgaW50IG5vZGVJZCwgUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4mIHJl
c3VsdCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPFN0cmluZz4+
PiBJbnNwZWN0b3JET01BZ2VudDo6Z2V0QXR0cmlidXRlcyhQcm90b2NvbDo6RE9NOjpOb2RlSWQg
bm9kZUlkKQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAg
IEVsZW1lbnQqIGVsZW1lbnQgPSBhc3NlcnRFbGVtZW50KGVycm9yU3RyaW5nLCBub2RlSWQpOwog
ICAgIGlmICghZWxlbWVudCkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVu
ZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCi0gICAgcmVzdWx0ID0gYnVpbGRBcnJheUZvckVsZW1l
bnRBdHRyaWJ1dGVzKGVsZW1lbnQpOworICAgIHJldHVybiBidWlsZEFycmF5Rm9yRWxlbWVudEF0
dHJpYnV0ZXMoZWxlbWVudCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnJlcXVlc3RO
b2RlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBvYmplY3RJZCwgaW50
KiBub2RlSWQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxQcm90b2NvbDo6RE9NOjpOb2RlSWQ+
IEluc3BlY3RvckRPTUFnZW50OjpyZXF1ZXN0Tm9kZShjb25zdCBQcm90b2NvbDo6UnVudGltZTo6
UmVtb3RlT2JqZWN0SWQmIG9iamVjdElkKQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBl
cnJvclN0cmluZzsKKwogICAgIE5vZGUqIG5vZGUgPSBub2RlRm9yT2JqZWN0SWQob2JqZWN0SWQp
OwotICAgIGlmIChub2RlKQotICAgICAgICAqbm9kZUlkID0gcHVzaE5vZGVQYXRoVG9Gcm9udGVu
ZChlcnJvclN0cmluZywgbm9kZSk7Ci0gICAgZWxzZQotICAgICAgICAqbm9kZUlkID0gMDsKKyAg
ICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTWlzc2luZyBub2Rl
IGZvciBnaXZlbiBvYmplY3RJZCJfcyk7CisKKyAgICBhdXRvIG5vZGVJZCA9IHB1c2hOb2RlUGF0
aFRvRnJvbnRlbmQoZXJyb3JTdHJpbmcsIG5vZGUpOworICAgIGlmICghbm9kZUlkKQorICAgICAg
ICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOworCisgICAgcmV0dXJuIG5vZGVJ
ZDsKIH0KIAogU3RyaW5nIEluc3BlY3RvckRPTUFnZW50Ojpkb2N1bWVudFVSTFN0cmluZyhEb2N1
bWVudCogZG9jdW1lbnQpCkBAIC0xNTQ0LDQ0ICsxNjEzLDQ0IEBAIHN0YXRpYyBTdHJpbmcgZG9j
dW1lbnRCYXNlVVJMU3RyaW5nKERvY3VtZW50KiBkb2N1bWVudCkKICAgICByZXR1cm4gZG9jdW1l
bnQtPmNvbXBsZXRlVVJMKGVtcHR5U3RyaW5nKCkpLnN0cmluZygpOwogfQogCi1zdGF0aWMgYm9v
bCBwc2V1ZG9FbGVtZW50VHlwZShQc2V1ZG9JZCBwc2V1ZG9JZCwgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6RE9NOjpQc2V1ZG9UeXBlKiB0eXBlKQorc3RhdGljIGJvb2wgcHNldWRvRWxlbWVudFR5cGUo
UHNldWRvSWQgcHNldWRvSWQsIFByb3RvY29sOjpET006OlBzZXVkb1R5cGUqIHR5cGUpCiB7CiAg
ICAgc3dpdGNoIChwc2V1ZG9JZCkgewogICAgIGNhc2UgUHNldWRvSWQ6OkJlZm9yZToKLSAgICAg
ICAgKnR5cGUgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpET006OlBzZXVkb1R5cGU6OkJlZm9yZTsK
KyAgICAgICAgKnR5cGUgPSBQcm90b2NvbDo6RE9NOjpQc2V1ZG9UeXBlOjpCZWZvcmU7CiAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIGNhc2UgUHNldWRvSWQ6OkFmdGVyOgotICAgICAgICAqdHlw
ZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6UHNldWRvVHlwZTo6QWZ0ZXI7CisgICAgICAg
ICp0eXBlID0gUHJvdG9jb2w6OkRPTTo6UHNldWRvVHlwZTo6QWZ0ZXI7CiAgICAgICAgIHJldHVy
biB0cnVlOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiB9CiAK
LXN0YXRpYyBJbnNwZWN0b3I6OlByb3RvY29sOjpET006OlNoYWRvd1Jvb3RUeXBlIHNoYWRvd1Jv
b3RUeXBlKFNoYWRvd1Jvb3RNb2RlIG1vZGUpCitzdGF0aWMgUHJvdG9jb2w6OkRPTTo6U2hhZG93
Um9vdFR5cGUgc2hhZG93Um9vdFR5cGUoU2hhZG93Um9vdE1vZGUgbW9kZSkKIHsKICAgICBzd2l0
Y2ggKG1vZGUpIHsKICAgICBjYXNlIFNoYWRvd1Jvb3RNb2RlOjpVc2VyQWdlbnQ6Ci0gICAgICAg
IHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpET006OlNoYWRvd1Jvb3RUeXBlOjpVc2VyQWdl
bnQ7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6RE9NOjpTaGFkb3dSb290VHlwZTo6VXNlckFn
ZW50OwogICAgIGNhc2UgU2hhZG93Um9vdE1vZGU6OkNsb3NlZDoKLSAgICAgICAgcmV0dXJuIElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6U2hhZG93Um9vdFR5cGU6OkNsb3NlZDsKKyAgICAgICAg
cmV0dXJuIFByb3RvY29sOjpET006OlNoYWRvd1Jvb3RUeXBlOjpDbG9zZWQ7CiAgICAgY2FzZSBT
aGFkb3dSb290TW9kZTo6T3BlbjoKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRPTTo6U2hhZG93Um9vdFR5cGU6Ok9wZW47CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6RE9N
OjpTaGFkb3dSb290VHlwZTo6T3BlbjsKICAgICB9CiAKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpTaGFkb3dSb290VHlwZTo6
VXNlckFnZW50OworICAgIHJldHVybiBQcm90b2NvbDo6RE9NOjpTaGFkb3dSb290VHlwZTo6VXNl
ckFnZW50OwogfQogCi1zdGF0aWMgSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpDdXN0b21FbGVt
ZW50U3RhdGUgY3VzdG9tRWxlbWVudFN0YXRlKGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQpCitzdGF0
aWMgUHJvdG9jb2w6OkRPTTo6Q3VzdG9tRWxlbWVudFN0YXRlIGN1c3RvbUVsZW1lbnRTdGF0ZShj
b25zdCBFbGVtZW50JiBlbGVtZW50KQogewogICAgIGlmIChlbGVtZW50LmlzRGVmaW5lZEN1c3Rv
bUVsZW1lbnQoKSkKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Q3Vz
dG9tRWxlbWVudFN0YXRlOjpDdXN0b207CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6RE9NOjpD
dXN0b21FbGVtZW50U3RhdGU6OkN1c3RvbTsKICAgICBpZiAoZWxlbWVudC5pc0ZhaWxlZEN1c3Rv
bUVsZW1lbnQoKSkKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Q3Vz
dG9tRWxlbWVudFN0YXRlOjpGYWlsZWQ7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6RE9NOjpD
dXN0b21FbGVtZW50U3RhdGU6OkZhaWxlZDsKICAgICBpZiAoZWxlbWVudC5pc1VuZGVmaW5lZEN1
c3RvbUVsZW1lbnQoKSB8fCBlbGVtZW50LmlzQ3VzdG9tRWxlbWVudFVwZ3JhZGVDYW5kaWRhdGUo
KSkKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Q3VzdG9tRWxlbWVu
dFN0YXRlOjpXYWl0aW5nOwotICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkN1
c3RvbUVsZW1lbnRTdGF0ZTo6QnVpbHRpbjsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpET006
OkN1c3RvbUVsZW1lbnRTdGF0ZTo6V2FpdGluZzsKKyAgICByZXR1cm4gUHJvdG9jb2w6OkRPTTo6
Q3VzdG9tRWxlbWVudFN0YXRlOjpCdWlsdGluOwogfQogCiBzdGF0aWMgU3RyaW5nIGNvbXB1dGVD
b250ZW50U2VjdXJpdHlQb2xpY3lTSEEyNTZIYXNoKGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQpCkBA
IC0xNTk3LDkgKzE2NjYsOSBAQCBzdGF0aWMgU3RyaW5nIGNvbXB1dGVDb250ZW50U2VjdXJpdHlQ
b2xpY3lTSEEyNTZIYXNoKGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQpCiAgICAgcmV0dXJuIG1ha2VT
dHJpbmcoInNoYTI1Ni0iLCBiYXNlNjRFbmNvZGUoZGlnZXN0LmRhdGEoKSwgZGlnZXN0LnNpemUo
KSkpOwogfQogCi1SZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlPiBJbnNwZWN0b3JE
T01BZ2VudDo6YnVpbGRPYmplY3RGb3JOb2RlKE5vZGUqIG5vZGUsIGludCBkZXB0aCwgTm9kZVRv
SWRNYXAqIG5vZGVzTWFwKQorUmVmPFByb3RvY29sOjpET006Ok5vZGU+IEluc3BlY3RvckRPTUFn
ZW50OjpidWlsZE9iamVjdEZvck5vZGUoTm9kZSogbm9kZSwgaW50IGRlcHRoLCBOb2RlVG9JZE1h
cCogbm9kZXNNYXApCiB7Ci0gICAgaW50IGlkID0gYmluZChub2RlLCBub2Rlc01hcCk7CisgICAg
YXV0byBpZCA9IGJpbmQobm9kZSwgbm9kZXNNYXApOwogICAgIFN0cmluZyBub2RlTmFtZTsKICAg
ICBTdHJpbmcgbG9jYWxOYW1lOwogICAgIFN0cmluZyBub2RlVmFsdWU7CkBAIC0xNjMwLDcgKzE2
OTksNyBAQCBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlPiBJbnNwZWN0b3JET01B
Z2VudDo6YnVpbGRPYmplY3RGb3JOb2RlKE5vZGUqCiAgICAgICAgIGJyZWFrOwogICAgIH0KIAot
ICAgIGF1dG8gdmFsdWUgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU6OmNyZWF0ZSgp
CisgICAgYXV0byB2YWx1ZSA9IFByb3RvY29sOjpET006Ok5vZGU6OmNyZWF0ZSgpCiAgICAgICAg
IC5zZXROb2RlSWQoaWQpCiAgICAgICAgIC5zZXROb2RlVHlwZShzdGF0aWNfY2FzdDxpbnQ+KG5v
ZGUtPm5vZGVUeXBlKCkpKQogICAgICAgICAuc2V0Tm9kZU5hbWUobm9kZU5hbWUpCkBAIC0xNjQx
LDcgKzE3MTAsNyBAQCBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlPiBJbnNwZWN0
b3JET01BZ2VudDo6YnVpbGRPYmplY3RGb3JOb2RlKE5vZGUqCiAgICAgaWYgKG5vZGUtPmlzQ29u
dGFpbmVyTm9kZSgpKSB7CiAgICAgICAgIGludCBub2RlQ291bnQgPSBpbm5lckNoaWxkTm9kZUNv
dW50KG5vZGUpOwogICAgICAgICB2YWx1ZS0+c2V0Q2hpbGROb2RlQ291bnQobm9kZUNvdW50KTsK
LSAgICAgICAgUmVmPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2Rl
Pj4gY2hpbGRyZW4gPSBidWlsZEFycmF5Rm9yQ29udGFpbmVyQ2hpbGRyZW4obm9kZSwgZGVwdGgs
IG5vZGVzTWFwKTsKKyAgICAgICAgYXV0byBjaGlsZHJlbiA9IGJ1aWxkQXJyYXlGb3JDb250YWlu
ZXJDaGlsZHJlbihub2RlLCBkZXB0aCwgbm9kZXNNYXApOwogICAgICAgICBpZiAoY2hpbGRyZW4t
Pmxlbmd0aCgpID4gMCkKICAgICAgICAgICAgIHZhbHVlLT5zZXRDaGlsZHJlbihXVEZNb3ZlKGNo
aWxkcmVuKSk7CiAgICAgfQpAQCAtMTY2MSw3ICsxNzMwLDcgQEAgUmVmPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRPTTo6Tm9kZT4gSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yTm9kZShO
b2RlKgogICAgICAgICB9CiAKICAgICAgICAgaWYgKFNoYWRvd1Jvb3QqIHJvb3QgPSBlbGVtZW50
LnNoYWRvd1Jvb3QoKSkgewotICAgICAgICAgICAgYXV0byBzaGFkb3dSb290cyA9IEpTT046OkFy
cmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlPjo6Y3JlYXRlKCk7CisgICAgICAg
ICAgICBhdXRvIHNoYWRvd1Jvb3RzID0gSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6RE9NOjpOb2Rl
Pjo6Y3JlYXRlKCk7CiAgICAgICAgICAgICBzaGFkb3dSb290cy0+YWRkSXRlbShidWlsZE9iamVj
dEZvck5vZGUocm9vdCwgMCwgbm9kZXNNYXApKTsKICAgICAgICAgICAgIHZhbHVlLT5zZXRTaGFk
b3dSb290cyhXVEZNb3ZlKHNoYWRvd1Jvb3RzKSk7CiAgICAgICAgIH0KQEAgLTE2NzMsMTYgKzE3
NDIsMTYgQEAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZT4gSW5zcGVjdG9yRE9N
QWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yTm9kZShOb2RlKgogICAgICAgICAgICAgdmFsdWUtPnNldENv
bnRlbnRTZWN1cml0eVBvbGljeUhhc2goY29tcHV0ZUNvbnRlbnRTZWN1cml0eVBvbGljeVNIQTI1
Nkhhc2goZWxlbWVudCkpOwogCiAgICAgICAgIGF1dG8gc3RhdGUgPSBjdXN0b21FbGVtZW50U3Rh
dGUoZWxlbWVudCk7Ci0gICAgICAgIGlmIChzdGF0ZSAhPSBJbnNwZWN0b3I6OlByb3RvY29sOjpE
T006OkN1c3RvbUVsZW1lbnRTdGF0ZTo6QnVpbHRpbikKKyAgICAgICAgaWYgKHN0YXRlICE9IFBy
b3RvY29sOjpET006OkN1c3RvbUVsZW1lbnRTdGF0ZTo6QnVpbHRpbikKICAgICAgICAgICAgIHZh
bHVlLT5zZXRDdXN0b21FbGVtZW50U3RhdGUoc3RhdGUpOwogCiAgICAgICAgIGlmIChlbGVtZW50
LnBzZXVkb0lkKCkgIT0gUHNldWRvSWQ6Ok5vbmUpIHsKLSAgICAgICAgICAgIEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRPTTo6UHNldWRvVHlwZSBwc2V1ZG9UeXBlOworICAgICAgICAgICAgUHJvdG9j
b2w6OkRPTTo6UHNldWRvVHlwZSBwc2V1ZG9UeXBlOwogICAgICAgICAgICAgaWYgKHBzZXVkb0Vs
ZW1lbnRUeXBlKGVsZW1lbnQucHNldWRvSWQoKSwgJnBzZXVkb1R5cGUpKQogICAgICAgICAgICAg
ICAgIHZhbHVlLT5zZXRQc2V1ZG9UeXBlKHBzZXVkb1R5cGUpOwogICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgaWYgKGF1dG8gcHNldWRvRWxlbWVudHMgPSBidWlsZEFycmF5Rm9yUHNldWRv
RWxlbWVudHMoZWxlbWVudCwgbm9kZXNNYXApKQotICAgICAgICAgICAgICAgIHZhbHVlLT5zZXRQ
c2V1ZG9FbGVtZW50cyhXVEZNb3ZlKHBzZXVkb0VsZW1lbnRzKSk7CisgICAgICAgICAgICAgICAg
dmFsdWUtPnNldFBzZXVkb0VsZW1lbnRzKHBzZXVkb0VsZW1lbnRzLnJlbGVhc2VOb25OdWxsKCkp
OwogICAgICAgICB9CiAgICAgfSBlbHNlIGlmIChpczxEb2N1bWVudD4oKm5vZGUpKSB7CiAgICAg
ICAgIERvY3VtZW50JiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50Pigqbm9kZSk7CkBAIC0x
NzIxLDkgKzE3OTAsOSBAQCBSZWY8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiBJbnNwZWN0b3JET01B
Z2VudDo6YnVpbGRBcnJheUZvckVsZW1lbnRBdHRyaWJ1dGVzKEVsZQogICAgIHJldHVybiBhdHRy
aWJ1dGVzVmFsdWU7CiB9CiAKLVJlZjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkRPTTo6Tm9kZT4+IEluc3BlY3RvckRPTUFnZW50OjpidWlsZEFycmF5Rm9yQ29udGFpbmVyQ2hp
bGRyZW4oTm9kZSogY29udGFpbmVyLCBpbnQgZGVwdGgsIE5vZGVUb0lkTWFwKiBub2Rlc01hcCkK
K1JlZjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpET006Ok5vZGU+PiBJbnNwZWN0b3JET01BZ2Vu
dDo6YnVpbGRBcnJheUZvckNvbnRhaW5lckNoaWxkcmVuKE5vZGUqIGNvbnRhaW5lciwgaW50IGRl
cHRoLCBOb2RlVG9JZE1hcCogbm9kZXNNYXApCiB7Ci0gICAgYXV0byBjaGlsZHJlbiA9IEpTT046
OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlPjo6Y3JlYXRlKCk7CisgICAg
YXV0byBjaGlsZHJlbiA9IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkRPTTo6Tm9kZT46OmNyZWF0
ZSgpOwogICAgIGlmIChkZXB0aCA9PSAwKSB7CiAgICAgICAgIC8vIFNwZWNpYWwtY2FzZSB0aGUg
b25seSB0ZXh0IGNoaWxkIC0gcHJldGVuZCB0aGF0IGNvbnRhaW5lcidzIGNoaWxkcmVuIGhhdmUg
YmVlbiByZXF1ZXN0ZWQuCiAgICAgICAgIE5vZGUqIGZpcnN0Q2hpbGQgPSBjb250YWluZXItPmZp
cnN0Q2hpbGQoKTsKQEAgLTE3NDUsMTQgKzE4MTQsMTQgQEAgUmVmPEpTT046OkFycmF5T2Y8SW5z
cGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlPj4gSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkQXJy
YXkKICAgICByZXR1cm4gY2hpbGRyZW47CiB9CiAKLVJlZlB0cjxKU09OOjpBcnJheU9mPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZT4+IEluc3BlY3RvckRPTUFnZW50OjpidWlsZEFycmF5
Rm9yUHNldWRvRWxlbWVudHMoY29uc3QgRWxlbWVudCYgZWxlbWVudCwgTm9kZVRvSWRNYXAqIG5v
ZGVzTWFwKQorUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkRPTTo6Tm9kZT4+IEluc3Bl
Y3RvckRPTUFnZW50OjpidWlsZEFycmF5Rm9yUHNldWRvRWxlbWVudHMoY29uc3QgRWxlbWVudCYg
ZWxlbWVudCwgTm9kZVRvSWRNYXAqIG5vZGVzTWFwKQogewogICAgIFBzZXVkb0VsZW1lbnQqIGJl
Zm9yZUVsZW1lbnQgPSBlbGVtZW50LmJlZm9yZVBzZXVkb0VsZW1lbnQoKTsKICAgICBQc2V1ZG9F
bGVtZW50KiBhZnRlckVsZW1lbnQgPSBlbGVtZW50LmFmdGVyUHNldWRvRWxlbWVudCgpOwogICAg
IGlmICghYmVmb3JlRWxlbWVudCAmJiAhYWZ0ZXJFbGVtZW50KQogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKIAotICAgIGF1dG8gcHNldWRvRWxlbWVudHMgPSBKU09OOjpBcnJheU9mPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkRPTTo6Tm9kZT46OmNyZWF0ZSgpOworICAgIGF1dG8gcHNldWRvRWxlbWVu
dHMgPSBKU09OOjpBcnJheU9mPFByb3RvY29sOjpET006Ok5vZGU+OjpjcmVhdGUoKTsKICAgICBp
ZiAoYmVmb3JlRWxlbWVudCkKICAgICAgICAgcHNldWRvRWxlbWVudHMtPmFkZEl0ZW0oYnVpbGRP
YmplY3RGb3JOb2RlKGJlZm9yZUVsZW1lbnQsIDAsIG5vZGVzTWFwKSk7CiAgICAgaWYgKGFmdGVy
RWxlbWVudCkKQEAgLTE3NjAsNyArMTgyOSw3IEBAIFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZT4+IEluc3BlY3RvckRPTUFnZW50OjpidWlsZEFyCiAg
ICAgcmV0dXJuIHBzZXVkb0VsZW1lbnRzOwogfQogCi1SZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6
RE9NOjpFdmVudExpc3RlbmVyPiBJbnNwZWN0b3JET01BZ2VudDo6YnVpbGRPYmplY3RGb3JFdmVu
dExpc3RlbmVyKGNvbnN0IFJlZ2lzdGVyZWRFdmVudExpc3RlbmVyJiByZWdpc3RlcmVkRXZlbnRM
aXN0ZW5lciwgaW50IGlkZW50aWZpZXIsIEV2ZW50VGFyZ2V0JiBldmVudFRhcmdldCwgY29uc3Qg
QXRvbVN0cmluZyYgZXZlbnRUeXBlLCBib29sIGRpc2FibGVkLCBjb25zdCBSZWZQdHI8SlNDOjpC
cmVha3BvaW50PiYgYnJlYWtwb2ludCkKK1JlZjxQcm90b2NvbDo6RE9NOjpFdmVudExpc3RlbmVy
PiBJbnNwZWN0b3JET01BZ2VudDo6YnVpbGRPYmplY3RGb3JFdmVudExpc3RlbmVyKGNvbnN0IFJl
Z2lzdGVyZWRFdmVudExpc3RlbmVyJiByZWdpc3RlcmVkRXZlbnRMaXN0ZW5lciwgUHJvdG9jb2w6
OkRPTTo6RXZlbnRMaXN0ZW5lcklkIGlkZW50aWZpZXIsIEV2ZW50VGFyZ2V0JiBldmVudFRhcmdl
dCwgY29uc3QgQXRvbVN0cmluZyYgZXZlbnRUeXBlLCBib29sIGRpc2FibGVkLCBjb25zdCBSZWZQ
dHI8SlNDOjpCcmVha3BvaW50PiYgYnJlYWtwb2ludCkKIHsKICAgICBSZWY8RXZlbnRMaXN0ZW5l
cj4gZXZlbnRMaXN0ZW5lciA9IHJlZ2lzdGVyZWRFdmVudExpc3RlbmVyLmNhbGxiYWNrKCk7CiAK
QEAgLTE4MjIsNyArMTg5MSw3IEBAIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkV2ZW50
TGlzdGVuZXI+IEluc3BlY3RvckRPTUFnZW50OjpidWlsZE9iamVjdEZvckV2CiAgICAgICAgIH0K
ICAgICB9CiAKLSAgICBhdXRvIHZhbHVlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpFdmVu
dExpc3RlbmVyOjpjcmVhdGUoKQorICAgIGF1dG8gdmFsdWUgPSBQcm90b2NvbDo6RE9NOjpFdmVu
dExpc3RlbmVyOjpjcmVhdGUoKQogICAgICAgICAuc2V0RXZlbnRMaXN0ZW5lcklkKGlkZW50aWZp
ZXIpCiAgICAgICAgIC5zZXRUeXBlKGV2ZW50VHlwZSkKICAgICAgICAgLnNldFVzZUNhcHR1cmUo
cmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIudXNlQ2FwdHVyZSgpKQpAQCAtMTgzMyw3ICsxOTAyLDcg
QEAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6RXZlbnRMaXN0ZW5lcj4gSW5zcGVjdG9y
RE9NQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yRXYKICAgICBlbHNlIGlmIChpczxET01XaW5kb3c+KGV2
ZW50VGFyZ2V0KSkKICAgICAgICAgdmFsdWUtPnNldE9uV2luZG93KHRydWUpOwogICAgIGlmICgh
c2NyaXB0SUQuaXNOdWxsKCkpIHsKLSAgICAgICAgYXV0byBsb2NhdGlvbiA9IEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRlYnVnZ2VyOjpMb2NhdGlvbjo6Y3JlYXRlKCkKKyAgICAgICAgYXV0byBsb2Nh
dGlvbiA9IFByb3RvY29sOjpEZWJ1Z2dlcjo6TG9jYXRpb246OmNyZWF0ZSgpCiAgICAgICAgICAg
ICAuc2V0U2NyaXB0SWQoc2NyaXB0SUQpCiAgICAgICAgICAgICAuc2V0TGluZU51bWJlcihsaW5l
TnVtYmVyKQogICAgICAgICAgICAgLnJlbGVhc2UoKTsKQEAgLTE4NTMsNyArMTkyMiw3IEBAIFJl
ZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkV2ZW50TGlzdGVuZXI+IEluc3BlY3RvckRPTUFn
ZW50OjpidWlsZE9iamVjdEZvckV2CiAgICAgcmV0dXJuIHZhbHVlOwogfQogCi12b2lkIEluc3Bl
Y3RvckRPTUFnZW50Ojpwcm9jZXNzQWNjZXNzaWJpbGl0eUNoaWxkcmVuKEFYQ29yZU9iamVjdCYg
YXhPYmplY3QsIEpTT046OkFycmF5T2Y8aW50PiYgY2hpbGROb2RlSWRzKQordm9pZCBJbnNwZWN0
b3JET01BZ2VudDo6cHJvY2Vzc0FjY2Vzc2liaWxpdHlDaGlsZHJlbihBWENvcmVPYmplY3QmIGF4
T2JqZWN0LCBKU09OOjpBcnJheU9mPFByb3RvY29sOjpET006Ok5vZGVJZD4mIGNoaWxkTm9kZUlk
cykKIHsKICAgICBjb25zdCBhdXRvJiBjaGlsZHJlbiA9IGF4T2JqZWN0LmNoaWxkcmVuKCk7CiAg
ICAgaWYgKCFjaGlsZHJlbi5zaXplKCkpCkBAIC0xODY3LDQzICsxOTM2LDM5IEBAIHZvaWQgSW5z
cGVjdG9yRE9NQWdlbnQ6OnByb2Nlc3NBY2Nlc3NpYmlsaXR5Q2hpbGRyZW4oQVhDb3JlT2JqZWN0
JiBheE9iamVjdCwgSlNPCiAgICAgfQogfQogICAgIAotUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM+IEluc3BlY3RvckRPTUFnZW50OjpidWls
ZE9iamVjdEZvckFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzKE5vZGUqIG5vZGUpCitSZWY8UHJvdG9j
b2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM+IEluc3BlY3RvckRPTUFnZW50OjpidWls
ZE9iamVjdEZvckFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzKE5vZGUmIG5vZGUpCiB7Ci0gICAgQVNT
RVJUKG5vZGUpOwotICAgIGlmICghbm9kZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KICAg
ICBpZiAoIVdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkpCiAg
ICAgICAgIFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OmVuYWJsZUFjY2Vzc2liaWxpdHkoKTsKIAog
ICAgIE5vZGUqIGFjdGl2ZURlc2NlbmRhbnROb2RlID0gbnVsbHB0cjsKICAgICBib29sIGJ1c3kg
PSBmYWxzZTsKLSAgICBhdXRvIGNoZWNrZWQgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkFj
Y2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpDaGVja2VkOjpGYWxzZTsKLSAgICBSZWZQdHI8SlNPTjo6
QXJyYXlPZjxpbnQ+PiBjaGlsZE5vZGVJZHM7Ci0gICAgUmVmUHRyPEpTT046OkFycmF5T2Y8aW50
Pj4gY29udHJvbGxlZE5vZGVJZHM7Ci0gICAgYXV0byBjdXJyZW50U3RhdGUgPSBJbnNwZWN0b3I6
OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpDdXJyZW50OjpGYWxzZTsK
KyAgICBhdXRvIGNoZWNrZWQgPSBQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGll
czo6Q2hlY2tlZDo6RmFsc2U7CisgICAgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkRP
TTo6Tm9kZUlkPj4gY2hpbGROb2RlSWRzOworICAgIFJlZlB0cjxKU09OOjpBcnJheU9mPFByb3Rv
Y29sOjpET006Ok5vZGVJZD4+IGNvbnRyb2xsZWROb2RlSWRzOworICAgIGF1dG8gY3VycmVudFN0
YXRlID0gUHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6OkN1cnJlbnQ6OkZh
bHNlOwogICAgIGJvb2wgZXhpc3RzID0gZmFsc2U7CiAgICAgYm9vbCBleHBhbmRlZCA9IGZhbHNl
OwogICAgIGJvb2wgZGlzYWJsZWQgPSBmYWxzZTsKLSAgICBSZWZQdHI8SlNPTjo6QXJyYXlPZjxp
bnQ+PiBmbG93ZWROb2RlSWRzOworICAgIFJlZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpE
T006Ok5vZGVJZD4+IGZsb3dlZE5vZGVJZHM7CiAgICAgYm9vbCBmb2N1c2VkID0gZmFsc2U7CiAg
ICAgYm9vbCBpZ25vcmVkID0gdHJ1ZTsKICAgICBib29sIGlnbm9yZWRCeURlZmF1bHQgPSBmYWxz
ZTsKLSAgICBhdXRvIGludmFsaWQgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2li
aWxpdHlQcm9wZXJ0aWVzOjpJbnZhbGlkOjpGYWxzZTsKKyAgICBhdXRvIGludmFsaWQgPSBQcm90
b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6SW52YWxpZDo6RmFsc2U7CiAgICAg
Ym9vbCBoaWRkZW4gPSBmYWxzZTsKICAgICBTdHJpbmcgbGFiZWw7CiAgICAgYm9vbCBsaXZlUmVn
aW9uQXRvbWljID0gZmFsc2U7CiAgICAgUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4gbGl2
ZVJlZ2lvblJlbGV2YW50OwotICAgIGF1dG8gbGl2ZVJlZ2lvblN0YXR1cyA9IEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6OkxpdmVSZWdpb25TdGF0dXM6
Ok9mZjsKKyAgICBhdXRvIGxpdmVSZWdpb25TdGF0dXMgPSBQcm90b2NvbDo6RE9NOjpBY2Nlc3Np
YmlsaXR5UHJvcGVydGllczo6TGl2ZVJlZ2lvblN0YXR1czo6T2ZmOwogICAgIE5vZGUqIG1vdXNl
RXZlbnROb2RlID0gbnVsbHB0cjsKLSAgICBSZWZQdHI8SlNPTjo6QXJyYXlPZjxpbnQ+PiBvd25l
ZE5vZGVJZHM7CisgICAgUmVmUHRyPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkRPTTo6Tm9kZUlk
Pj4gb3duZWROb2RlSWRzOwogICAgIE5vZGUqIHBhcmVudE5vZGUgPSBudWxscHRyOwogICAgIGJv
b2wgcHJlc3NlZCA9IGZhbHNlOwogICAgIGJvb2wgcmVhZG9ubHkgPSBmYWxzZTsKICAgICBib29s
IHJlcXVpcmVkID0gZmFsc2U7CiAgICAgU3RyaW5nIHJvbGU7CiAgICAgYm9vbCBzZWxlY3RlZCA9
IGZhbHNlOwotICAgIFJlZlB0cjxKU09OOjpBcnJheU9mPGludD4+IHNlbGVjdGVkQ2hpbGROb2Rl
SWRzOworICAgIFJlZlB0cjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpET006Ok5vZGVJZD4+IHNl
bGVjdGVkQ2hpbGROb2RlSWRzOwogICAgIGJvb2wgc3VwcG9ydHNDaGVja2VkID0gZmFsc2U7CiAg
ICAgYm9vbCBzdXBwb3J0c0V4cGFuZGVkID0gZmFsc2U7CiAgICAgYm9vbCBzdXBwb3J0c0xpdmVS
ZWdpb24gPSBmYWxzZTsKQEAgLTE5MTUsOCArMTk4MCw4IEBAIFJlZlB0cjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzPiBJbnNwZWN0b3JET01BZ2VudDo6
YnVpCiAgICAgdW5zaWduZWQgaGllcmFyY2hpY2FsTGV2ZWwgPSAwOwogICAgIHVuc2lnbmVkIGxl
dmVsID0gMDsKIAotICAgIGlmIChBWE9iamVjdENhY2hlKiBheE9iamVjdENhY2hlID0gbm9kZS0+
ZG9jdW1lbnQoKS5heE9iamVjdENhY2hlKCkpIHsKLSAgICAgICAgaWYgKEFYQ29yZU9iamVjdCog
YXhPYmplY3QgPSBheE9iamVjdENhY2hlLT5nZXRPckNyZWF0ZShub2RlKSkgeworICAgIGlmIChB
WE9iamVjdENhY2hlKiBheE9iamVjdENhY2hlID0gbm9kZS5kb2N1bWVudCgpLmF4T2JqZWN0Q2Fj
aGUoKSkgeworICAgICAgICBpZiAoQVhDb3JlT2JqZWN0KiBheE9iamVjdCA9IGF4T2JqZWN0Q2Fj
aGUtPmdldE9yQ3JlYXRlKCZub2RlKSkgewogCiAgICAgICAgICAgICBpZiAoQVhDb3JlT2JqZWN0
KiBhY3RpdmVEZXNjZW5kYW50ID0gYXhPYmplY3QtPmFjdGl2ZURlc2NlbmRhbnQoKSkKICAgICAg
ICAgICAgICAgICBhY3RpdmVEZXNjZW5kYW50Tm9kZSA9IGFjdGl2ZURlc2NlbmRhbnQtPm5vZGUo
KTsKQEAgLTE5MzIsNDcgKzE5OTcsNDkgQEAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRP
TTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM+IEluc3BlY3RvckRPTUFnZW50OjpidWkKICAgICAg
ICAgICAgIGlmIChzdXBwb3J0c0NoZWNrZWQpIHsKICAgICAgICAgICAgICAgICBBY2Nlc3NpYmls
aXR5QnV0dG9uU3RhdGUgY2hlY2tWYWx1ZSA9IGF4T2JqZWN0LT5jaGVja2JveE9yUmFkaW9WYWx1
ZSgpOyAvLyBFbGVtZW50IHVzaW5nIGFyaWEtY2hlY2tlZC4KICAgICAgICAgICAgICAgICBpZiAo
Y2hlY2tWYWx1ZSA9PSBBY2Nlc3NpYmlsaXR5QnV0dG9uU3RhdGU6Ok9uKQotICAgICAgICAgICAg
ICAgICAgICBjaGVja2VkID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5
UHJvcGVydGllczo6Q2hlY2tlZDo6VHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgY2hlY2tlZCA9
IFByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpDaGVja2VkOjpUcnVlOwog
ICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrVmFsdWUgPT0gQWNjZXNzaWJpbGl0eUJ1dHRv
blN0YXRlOjpNaXhlZCkKLSAgICAgICAgICAgICAgICAgICAgY2hlY2tlZCA9IEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6OkNoZWNrZWQ6Ok1peGVkOwor
ICAgICAgICAgICAgICAgICAgICBjaGVja2VkID0gUHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0
eVByb3BlcnRpZXM6OkNoZWNrZWQ6Ok1peGVkOwogICAgICAgICAgICAgICAgIGVsc2UgaWYgKGF4
T2JqZWN0LT5pc0NoZWNrZWQoKSkgLy8gTmF0aXZlIGNoZWNrYm94LgotICAgICAgICAgICAgICAg
ICAgICBjaGVja2VkID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJv
cGVydGllczo6Q2hlY2tlZDo6VHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgY2hlY2tlZCA9IFBy
b3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpDaGVja2VkOjpUcnVlOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAoIWF4T2JqZWN0LT5jaGls
ZHJlbigpLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgIGNoaWxkTm9kZUlkcyA9IEpTT046
OkFycmF5T2Y8aW50Pjo6Y3JlYXRlKCk7CisgICAgICAgICAgICAgICAgY2hpbGROb2RlSWRzID0g
SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6RE9NOjpOb2RlSWQ+OjpjcmVhdGUoKTsKICAgICAgICAg
ICAgICAgICBwcm9jZXNzQWNjZXNzaWJpbGl0eUNoaWxkcmVuKCpheE9iamVjdCwgKmNoaWxkTm9k
ZUlkcyk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIFZlY3RvcjxF
bGVtZW50Kj4gY29udHJvbGxlZEVsZW1lbnRzOwogICAgICAgICAgICAgYXhPYmplY3QtPmVsZW1l
bnRzRnJvbUF0dHJpYnV0ZShjb250cm9sbGVkRWxlbWVudHMsIGFyaWFfY29udHJvbHNBdHRyKTsK
ICAgICAgICAgICAgIGlmIChjb250cm9sbGVkRWxlbWVudHMuc2l6ZSgpKSB7Ci0gICAgICAgICAg
ICAgICAgY29udHJvbGxlZE5vZGVJZHMgPSBKU09OOjpBcnJheU9mPGludD46OmNyZWF0ZSgpOwot
ICAgICAgICAgICAgICAgIGZvciAoRWxlbWVudCogY29udHJvbGxlZEVsZW1lbnQgOiBjb250cm9s
bGVkRWxlbWVudHMpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZWROb2RlSWRzLT5hZGRJ
dGVtKHB1c2hOb2RlUGF0aFRvRnJvbnRlbmQoY29udHJvbGxlZEVsZW1lbnQpKTsKKyAgICAgICAg
ICAgICAgICBjb250cm9sbGVkTm9kZUlkcyA9IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkRPTTo6
Tm9kZUlkPjo6Y3JlYXRlKCk7CisgICAgICAgICAgICAgICAgZm9yIChFbGVtZW50KiBjb250cm9s
bGVkRWxlbWVudCA6IGNvbnRyb2xsZWRFbGVtZW50cykgeworICAgICAgICAgICAgICAgICAgICBp
ZiAoYXV0byBjb250cm9sbGVkRWxlbWVudElkID0gcHVzaE5vZGVQYXRoVG9Gcm9udGVuZChjb250
cm9sbGVkRWxlbWVudCkpCisgICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVkTm9kZUlk
cy0+YWRkSXRlbShjb250cm9sbGVkRWxlbWVudElkKTsKKyAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIHN3aXRjaCAoYXhPYmplY3QtPmN1
cnJlbnRTdGF0ZSgpKSB7CiAgICAgICAgICAgICBjYXNlIEFjY2Vzc2liaWxpdHlDdXJyZW50U3Rh
dGU6OkZhbHNlOgotICAgICAgICAgICAgICAgIGN1cnJlbnRTdGF0ZSA9IEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6OkN1cnJlbnQ6OkZhbHNlOworICAg
ICAgICAgICAgICAgIGN1cnJlbnRTdGF0ZSA9IFByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQ
cm9wZXJ0aWVzOjpDdXJyZW50OjpGYWxzZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIGNhc2UgQWNjZXNzaWJpbGl0eUN1cnJlbnRTdGF0ZTo6UGFnZToKLSAgICAgICAgICAg
ICAgICBjdXJyZW50U3RhdGUgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxp
dHlQcm9wZXJ0aWVzOjpDdXJyZW50OjpQYWdlOworICAgICAgICAgICAgICAgIGN1cnJlbnRTdGF0
ZSA9IFByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpDdXJyZW50OjpQYWdl
OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBBY2Nlc3NpYmlsaXR5
Q3VycmVudFN0YXRlOjpTdGVwOgotICAgICAgICAgICAgICAgIGN1cnJlbnRTdGF0ZSA9IEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6OkN1cnJlbnQ6OlN0
ZXA7CisgICAgICAgICAgICAgICAgY3VycmVudFN0YXRlID0gUHJvdG9jb2w6OkRPTTo6QWNjZXNz
aWJpbGl0eVByb3BlcnRpZXM6OkN1cnJlbnQ6OlN0ZXA7CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICBjYXNlIEFjY2Vzc2liaWxpdHlDdXJyZW50U3RhdGU6OkxvY2F0aW9uOgot
ICAgICAgICAgICAgICAgIGN1cnJlbnRTdGF0ZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6
QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6OkN1cnJlbnQ6OkxvY2F0aW9uOworICAgICAgICAgICAg
ICAgIGN1cnJlbnRTdGF0ZSA9IFByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVz
OjpDdXJyZW50OjpMb2NhdGlvbjsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IGNhc2UgQWNjZXNzaWJpbGl0eUN1cnJlbnRTdGF0ZTo6RGF0ZToKLSAgICAgICAgICAgICAgICBj
dXJyZW50U3RhdGUgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9w
ZXJ0aWVzOjpDdXJyZW50OjpEYXRlOworICAgICAgICAgICAgICAgIGN1cnJlbnRTdGF0ZSA9IFBy
b3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpDdXJyZW50OjpEYXRlOwogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBBY2Nlc3NpYmlsaXR5Q3VycmVu
dFN0YXRlOjpUaW1lOgotICAgICAgICAgICAgICAgIGN1cnJlbnRTdGF0ZSA9IEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6OkN1cnJlbnQ6OlRpbWU7Cisg
ICAgICAgICAgICAgICAgY3VycmVudFN0YXRlID0gUHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0
eVByb3BlcnRpZXM6OkN1cnJlbnQ6OlRpbWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICBjYXNlIEFjY2Vzc2liaWxpdHlDdXJyZW50U3RhdGU6OlRydWU6Ci0gICAgICAgICAg
ICAgICAgY3VycmVudFN0YXRlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmls
aXR5UHJvcGVydGllczo6Q3VycmVudDo6VHJ1ZTsKKyAgICAgICAgICAgICAgICBjdXJyZW50U3Rh
dGUgPSBQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6Q3VycmVudDo6VHJ1
ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KIApAQCAtMTk4NiwxMiAr
MjA1MywxNCBAQCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5
UHJvcGVydGllcz4gSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aQogICAgICAgICAgICAgVmVjdG9yPEVs
ZW1lbnQqPiBmbG93ZWRFbGVtZW50czsKICAgICAgICAgICAgIGF4T2JqZWN0LT5lbGVtZW50c0Zy
b21BdHRyaWJ1dGUoZmxvd2VkRWxlbWVudHMsIGFyaWFfZmxvd3RvQXR0cik7CiAgICAgICAgICAg
ICBpZiAoZmxvd2VkRWxlbWVudHMuc2l6ZSgpKSB7Ci0gICAgICAgICAgICAgICAgZmxvd2VkTm9k
ZUlkcyA9IEpTT046OkFycmF5T2Y8aW50Pjo6Y3JlYXRlKCk7Ci0gICAgICAgICAgICAgICAgZm9y
IChFbGVtZW50KiBmbG93ZWRFbGVtZW50IDogZmxvd2VkRWxlbWVudHMpCi0gICAgICAgICAgICAg
ICAgICAgIGZsb3dlZE5vZGVJZHMtPmFkZEl0ZW0ocHVzaE5vZGVQYXRoVG9Gcm9udGVuZChmbG93
ZWRFbGVtZW50KSk7CisgICAgICAgICAgICAgICAgZmxvd2VkTm9kZUlkcyA9IEpTT046OkFycmF5
T2Y8UHJvdG9jb2w6OkRPTTo6Tm9kZUlkPjo6Y3JlYXRlKCk7CisgICAgICAgICAgICAgICAgZm9y
IChFbGVtZW50KiBmbG93ZWRFbGVtZW50IDogZmxvd2VkRWxlbWVudHMpIHsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKGF1dG8gZmxvd2VkRWxlbWVudElkID0gcHVzaE5vZGVQYXRoVG9Gcm9udGVu
ZChmbG93ZWRFbGVtZW50KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGZsb3dlZE5vZGVJZHMt
PmFkZEl0ZW0oZmxvd2VkRWxlbWVudElkKTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChpczxFbGVtZW50Pigqbm9kZSkpIHsK
KyAgICAgICAgICAgIGlmIChpczxFbGVtZW50Pihub2RlKSkgewogICAgICAgICAgICAgICAgIHN1
cHBvcnRzRm9jdXNlZCA9IGF4T2JqZWN0LT5jYW5TZXRGb2N1c0F0dHJpYnV0ZSgpOwogICAgICAg
ICAgICAgICAgIGlmIChzdXBwb3J0c0ZvY3VzZWQpCiAgICAgICAgICAgICAgICAgICAgIGZvY3Vz
ZWQgPSBheE9iamVjdC0+aXNGb2N1c2VkKCk7CkBAIC0yMDAyLDEzICsyMDcxLDEzIEBAIFJlZlB0
cjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzPiBJbnNw
ZWN0b3JET01BZ2VudDo6YnVpCiAgICAgICAgICAgICAKICAgICAgICAgICAgIFN0cmluZyBpbnZh
bGlkVmFsdWUgPSBheE9iamVjdC0+aW52YWxpZFN0YXR1cygpOwogICAgICAgICAgICAgaWYgKGlu
dmFsaWRWYWx1ZSA9PSAiZmFsc2UiKQotICAgICAgICAgICAgICAgIGludmFsaWQgPSBJbnNwZWN0
b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpJbnZhbGlkOjpGYWxz
ZTsKKyAgICAgICAgICAgICAgICBpbnZhbGlkID0gUHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0
eVByb3BlcnRpZXM6OkludmFsaWQ6OkZhbHNlOwogICAgICAgICAgICAgZWxzZSBpZiAoaW52YWxp
ZFZhbHVlID09ICJncmFtbWFyIikKLSAgICAgICAgICAgICAgICBpbnZhbGlkID0gSW5zcGVjdG9y
OjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6SW52YWxpZDo6R3JhbW1h
cjsKKyAgICAgICAgICAgICAgICBpbnZhbGlkID0gUHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0
eVByb3BlcnRpZXM6OkludmFsaWQ6OkdyYW1tYXI7CiAgICAgICAgICAgICBlbHNlIGlmIChpbnZh
bGlkVmFsdWUgPT0gInNwZWxsaW5nIikKLSAgICAgICAgICAgICAgICBpbnZhbGlkID0gSW5zcGVj
dG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6SW52YWxpZDo6U3Bl
bGxpbmc7CisgICAgICAgICAgICAgICAgaW52YWxpZCA9IFByb3RvY29sOjpET006OkFjY2Vzc2li
aWxpdHlQcm9wZXJ0aWVzOjpJbnZhbGlkOjpTcGVsbGluZzsKICAgICAgICAgICAgIGVsc2UgLy8g
RnV0dXJlIHZlcnNpb25zIG9mIEFSSUEgbWF5IGFsbG93IGFkZGl0aW9uYWwgdHJ1dGh5IHZhbHVl
cy4gRXguIGZvcm1hdCwgb3JkZXIsIG9yIHNpemUuCi0gICAgICAgICAgICAgICAgaW52YWxpZCA9
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6OkludmFs
aWQ6OlRydWU7CisgICAgICAgICAgICAgICAgaW52YWxpZCA9IFByb3RvY29sOjpET006OkFjY2Vz
c2liaWxpdHlQcm9wZXJ0aWVzOjpJbnZhbGlkOjpUcnVlOwogICAgICAgICAgICAgCiAgICAgICAg
ICAgICBpZiAoYXhPYmplY3QtPmlzQVhIaWRkZW4oKSB8fCBheE9iamVjdC0+aXNET01IaWRkZW4o
KSkKICAgICAgICAgICAgICAgICBoaWRkZW4gPSB0cnVlOwpAQCAtMjAyMiw5ICsyMDkxLDkgQEAg
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM+
IEluc3BlY3RvckRPTUFnZW50OjpidWkKICAgICAgICAgICAgICAgICBTdHJpbmcgYXJpYVJlbGV2
YW50QXR0clZhbHVlID0gYXhPYmplY3QtPmxpdmVSZWdpb25SZWxldmFudCgpOwogICAgICAgICAg
ICAgICAgIGlmICghYXJpYVJlbGV2YW50QXR0clZhbHVlLmlzRW1wdHkoKSkgewogICAgICAgICAg
ICAgICAgICAgICAvLyBGSVhNRTogUGFzcyBlbnVtIHZhbHVlcyByYXRoZXIgdGhhbiBzdHJpbmdz
IG9uY2UgdW5ibG9ja2VkLiBodHRwOi8vd2Via2l0Lm9yZy9iLzEzMzcxMQotICAgICAgICAgICAg
ICAgICAgICBTdHJpbmcgYXJpYVJlbGV2YW50QWRkaXRpb25zID0gSW5zcGVjdG9yOjpQcm90b2Nv
bDo6SW5zcGVjdG9ySGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUoSW5zcGVjdG9yOjpQcm90
b2NvbDo6RE9NOjpMaXZlUmVnaW9uUmVsZXZhbnQ6OkFkZGl0aW9ucyk7Ci0gICAgICAgICAgICAg
ICAgICAgIFN0cmluZyBhcmlhUmVsZXZhbnRSZW1vdmFscyA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6
Okluc3BlY3RvckhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRPTTo6TGl2ZVJlZ2lvblJlbGV2YW50OjpSZW1vdmFscyk7Ci0gICAgICAgICAgICAgICAg
ICAgIFN0cmluZyBhcmlhUmVsZXZhbnRUZXh0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6SW5zcGVj
dG9ySGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUoSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9N
OjpMaXZlUmVnaW9uUmVsZXZhbnQ6OlRleHQpOworICAgICAgICAgICAgICAgICAgICBTdHJpbmcg
YXJpYVJlbGV2YW50QWRkaXRpb25zID0gUHJvdG9jb2w6OkhlbHBlcnM6OmdldEVudW1Db25zdGFu
dFZhbHVlKFByb3RvY29sOjpET006OkxpdmVSZWdpb25SZWxldmFudDo6QWRkaXRpb25zKTsKKyAg
ICAgICAgICAgICAgICAgICAgU3RyaW5nIGFyaWFSZWxldmFudFJlbW92YWxzID0gUHJvdG9jb2w6
OkhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKFByb3RvY29sOjpET006OkxpdmVSZWdpb25S
ZWxldmFudDo6UmVtb3ZhbHMpOworICAgICAgICAgICAgICAgICAgICBTdHJpbmcgYXJpYVJlbGV2
YW50VGV4dCA9IFByb3RvY29sOjpIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShQcm90b2Nv
bDo6RE9NOjpMaXZlUmVnaW9uUmVsZXZhbnQ6OlRleHQpOwogICAgICAgICAgICAgICAgICAgICBs
aXZlUmVnaW9uUmVsZXZhbnQgPSBKU09OOjpBcnJheU9mPFN0cmluZz46OmNyZWF0ZSgpOwogICAg
ICAgICAgICAgICAgICAgICBjb25zdCBTcGFjZVNwbGl0U3RyaW5nJiB2YWx1ZXMgPSBTcGFjZVNw
bGl0U3RyaW5nKGFyaWFSZWxldmFudEF0dHJWYWx1ZSwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAg
ICAgIC8vIEBhcmlhLXJlbGV2YW50PSJhbGwiIGlzIGV4cG9zZWQgYXMgWyJhZGRpdGlvbnMiLCJy
ZW1vdmFscyIsInRleHQiXSwgaW4gb3JkZXIuCkBAIC0yMDQ1LDkgKzIxMTQsOSBAQCBSZWZQdHI8
SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllcz4gSW5zcGVj
dG9yRE9NQWdlbnQ6OmJ1aQogCiAgICAgICAgICAgICAgICAgU3RyaW5nIGFyaWFMaXZlID0gYXhP
YmplY3QtPmxpdmVSZWdpb25TdGF0dXMoKTsKICAgICAgICAgICAgICAgICBpZiAoYXJpYUxpdmUg
PT0gImFzc2VydGl2ZSIpCi0gICAgICAgICAgICAgICAgICAgIGxpdmVSZWdpb25TdGF0dXMgPSBJ
bnNwZWN0b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpMaXZlUmVn
aW9uU3RhdHVzOjpBc3NlcnRpdmU7CisgICAgICAgICAgICAgICAgICAgIGxpdmVSZWdpb25TdGF0
dXMgPSBQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6TGl2ZVJlZ2lvblN0
YXR1czo6QXNzZXJ0aXZlOwogICAgICAgICAgICAgICAgIGVsc2UgaWYgKGFyaWFMaXZlID09ICJw
b2xpdGUiKQotICAgICAgICAgICAgICAgICAgICBsaXZlUmVnaW9uU3RhdHVzID0gSW5zcGVjdG9y
OjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6TGl2ZVJlZ2lvblN0YXR1
czo6UG9saXRlOworICAgICAgICAgICAgICAgICAgICBsaXZlUmVnaW9uU3RhdHVzID0gUHJvdG9j
b2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6OkxpdmVSZWdpb25TdGF0dXM6OlBvbGl0
ZTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKGlzPEFjY2Vzc2liaWxpdHlOb2Rl
T2JqZWN0PigqYXhPYmplY3QpKQpAQCAtMjA1Nyw5ICsyMTI2LDExIEBAIFJlZlB0cjxJbnNwZWN0
b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzPiBJbnNwZWN0b3JET01B
Z2VudDo6YnVpCiAgICAgICAgICAgICAgICAgVmVjdG9yPEVsZW1lbnQqPiBvd25lZEVsZW1lbnRz
OwogICAgICAgICAgICAgICAgIGF4T2JqZWN0LT5lbGVtZW50c0Zyb21BdHRyaWJ1dGUob3duZWRF
bGVtZW50cywgYXJpYV9vd25zQXR0cik7CiAgICAgICAgICAgICAgICAgaWYgKG93bmVkRWxlbWVu
dHMuc2l6ZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG93bmVkTm9kZUlkcyA9IEpTT046OkFy
cmF5T2Y8aW50Pjo6Y3JlYXRlKCk7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoRWxlbWVudCog
b3duZWRFbGVtZW50IDogb3duZWRFbGVtZW50cykKLSAgICAgICAgICAgICAgICAgICAgICAgIG93
bmVkTm9kZUlkcy0+YWRkSXRlbShwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKG93bmVkRWxlbWVudCkp
OworICAgICAgICAgICAgICAgICAgICBvd25lZE5vZGVJZHMgPSBKU09OOjpBcnJheU9mPFByb3Rv
Y29sOjpET006Ok5vZGVJZD46OmNyZWF0ZSgpOworICAgICAgICAgICAgICAgICAgICBmb3IgKEVs
ZW1lbnQqIG93bmVkRWxlbWVudCA6IG93bmVkRWxlbWVudHMpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChhdXRvIG93bmVkRWxlbWVudElkID0gcHVzaE5vZGVQYXRoVG9Gcm9udGVuZChv
d25lZEVsZW1lbnQpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG93bmVkTm9kZUlkcy0+
YWRkSXRlbShvd25lZEVsZW1lbnRJZCk7CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICB9CiAKQEAgLTIwODMsMTAgKzIxNTQsMTIgQEAgUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM+IEluc3Bl
Y3RvckRPTUFnZW50OjpidWkKICAgICAgICAgICAgIEFYQ29yZU9iamVjdDo6QWNjZXNzaWJpbGl0
eUNoaWxkcmVuVmVjdG9yIHNlbGVjdGVkQ2hpbGRyZW47CiAgICAgICAgICAgICBheE9iamVjdC0+
c2VsZWN0ZWRDaGlsZHJlbihzZWxlY3RlZENoaWxkcmVuKTsKICAgICAgICAgICAgIGlmIChzZWxl
Y3RlZENoaWxkcmVuLnNpemUoKSkgewotICAgICAgICAgICAgICAgIHNlbGVjdGVkQ2hpbGROb2Rl
SWRzID0gSlNPTjo6QXJyYXlPZjxpbnQ+OjpjcmVhdGUoKTsKKyAgICAgICAgICAgICAgICBzZWxl
Y3RlZENoaWxkTm9kZUlkcyA9IEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkRPTTo6Tm9kZUlkPjo6
Y3JlYXRlKCk7CiAgICAgICAgICAgICAgICAgZm9yIChhdXRvJiBzZWxlY3RlZENoaWxkT2JqZWN0
IDogc2VsZWN0ZWRDaGlsZHJlbikgewotICAgICAgICAgICAgICAgICAgICBpZiAoTm9kZSogc2Vs
ZWN0ZWRDaGlsZE5vZGUgPSBzZWxlY3RlZENoaWxkT2JqZWN0LT5ub2RlKCkpCi0gICAgICAgICAg
ICAgICAgICAgICAgICBzZWxlY3RlZENoaWxkTm9kZUlkcy0+YWRkSXRlbShwdXNoTm9kZVBhdGhU
b0Zyb250ZW5kKHNlbGVjdGVkQ2hpbGROb2RlKSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChO
b2RlKiBzZWxlY3RlZENoaWxkTm9kZSA9IHNlbGVjdGVkQ2hpbGRPYmplY3QtPm5vZGUoKSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGF1dG8gc2VsZWN0ZWRDaGlsZE5vZGVJZCA9IHB1
c2hOb2RlUGF0aFRvRnJvbnRlbmQoc2VsZWN0ZWRDaGlsZE5vZGUpKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNlbGVjdGVkQ2hpbGROb2RlSWRzLT5hZGRJdGVtKHNlbGVjdGVkQ2hpbGRO
b2RlSWQpOworICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgCkBAIC0yMDk4LDU0ICsyMTcxLDYwIEBAIFJlZlB0cjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzPiBJbnNwZWN0b3JE
T01BZ2VudDo6YnVpCiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgUmVmPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM+IHZhbHVlID0gSW5zcGVjdG9y
OjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6Y3JlYXRlKCkKKyAgICBh
dXRvIHZhbHVlID0gUHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM6OmNyZWF0
ZSgpCiAgICAgICAgIC5zZXRFeGlzdHMoZXhpc3RzKQogICAgICAgICAuc2V0TGFiZWwobGFiZWwp
CiAgICAgICAgIC5zZXRSb2xlKHJvbGUpCi0gICAgICAgIC5zZXROb2RlSWQocHVzaE5vZGVQYXRo
VG9Gcm9udGVuZChub2RlKSkKKyAgICAgICAgLnNldE5vZGVJZChwdXNoTm9kZVBhdGhUb0Zyb250
ZW5kKCZub2RlKSkKICAgICAgICAgLnJlbGVhc2UoKTsKIAogICAgIGlmIChleGlzdHMpIHsKLSAg
ICAgICAgaWYgKGFjdGl2ZURlc2NlbmRhbnROb2RlKQotICAgICAgICAgICAgdmFsdWUtPnNldEFj
dGl2ZURlc2NlbmRhbnROb2RlSWQocHVzaE5vZGVQYXRoVG9Gcm9udGVuZChhY3RpdmVEZXNjZW5k
YW50Tm9kZSkpOworICAgICAgICBpZiAoYWN0aXZlRGVzY2VuZGFudE5vZGUpIHsKKyAgICAgICAg
ICAgIGlmIChhdXRvIGFjdGl2ZURlc2NlbmRhbnROb2RlSWQgPSBwdXNoTm9kZVBhdGhUb0Zyb250
ZW5kKGFjdGl2ZURlc2NlbmRhbnROb2RlKSkKKyAgICAgICAgICAgICAgICB2YWx1ZS0+c2V0QWN0
aXZlRGVzY2VuZGFudE5vZGVJZChhY3RpdmVEZXNjZW5kYW50Tm9kZUlkKTsKKyAgICAgICAgfQog
ICAgICAgICBpZiAoYnVzeSkKICAgICAgICAgICAgIHZhbHVlLT5zZXRCdXN5KGJ1c3kpOwogICAg
ICAgICBpZiAoc3VwcG9ydHNDaGVja2VkKQogICAgICAgICAgICAgdmFsdWUtPnNldENoZWNrZWQo
Y2hlY2tlZCk7CiAgICAgICAgIGlmIChjaGlsZE5vZGVJZHMpCi0gICAgICAgICAgICB2YWx1ZS0+
c2V0Q2hpbGROb2RlSWRzKGNoaWxkTm9kZUlkcyk7CisgICAgICAgICAgICB2YWx1ZS0+c2V0Q2hp
bGROb2RlSWRzKGNoaWxkTm9kZUlkcy5yZWxlYXNlTm9uTnVsbCgpKTsKICAgICAgICAgaWYgKGNv
bnRyb2xsZWROb2RlSWRzKQotICAgICAgICAgICAgdmFsdWUtPnNldENvbnRyb2xsZWROb2RlSWRz
KGNvbnRyb2xsZWROb2RlSWRzKTsKLSAgICAgICAgaWYgKGN1cnJlbnRTdGF0ZSAhPSBJbnNwZWN0
b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzOjpDdXJyZW50OjpGYWxz
ZSkKKyAgICAgICAgICAgIHZhbHVlLT5zZXRDb250cm9sbGVkTm9kZUlkcyhjb250cm9sbGVkTm9k
ZUlkcy5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICAgICAgaWYgKGN1cnJlbnRTdGF0ZSAhPSBQcm90
b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6Q3VycmVudDo6RmFsc2UpCiAgICAg
ICAgICAgICB2YWx1ZS0+c2V0Q3VycmVudChjdXJyZW50U3RhdGUpOwogICAgICAgICBpZiAoZGlz
YWJsZWQpCiAgICAgICAgICAgICB2YWx1ZS0+c2V0RGlzYWJsZWQoZGlzYWJsZWQpOwogICAgICAg
ICBpZiAoc3VwcG9ydHNFeHBhbmRlZCkKICAgICAgICAgICAgIHZhbHVlLT5zZXRFeHBhbmRlZChl
eHBhbmRlZCk7CiAgICAgICAgIGlmIChmbG93ZWROb2RlSWRzKQotICAgICAgICAgICAgdmFsdWUt
PnNldEZsb3dlZE5vZGVJZHMoZmxvd2VkTm9kZUlkcyk7CisgICAgICAgICAgICB2YWx1ZS0+c2V0
Rmxvd2VkTm9kZUlkcyhmbG93ZWROb2RlSWRzLnJlbGVhc2VOb25OdWxsKCkpOwogICAgICAgICBp
ZiAoc3VwcG9ydHNGb2N1c2VkKQogICAgICAgICAgICAgdmFsdWUtPnNldEZvY3VzZWQoZm9jdXNl
ZCk7CiAgICAgICAgIGlmIChpZ25vcmVkKQogICAgICAgICAgICAgdmFsdWUtPnNldElnbm9yZWQo
aWdub3JlZCk7CiAgICAgICAgIGlmIChpZ25vcmVkQnlEZWZhdWx0KQogICAgICAgICAgICAgdmFs
dWUtPnNldElnbm9yZWRCeURlZmF1bHQoaWdub3JlZEJ5RGVmYXVsdCk7Ci0gICAgICAgIGlmIChp
bnZhbGlkICE9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRp
ZXM6OkludmFsaWQ6OkZhbHNlKQorICAgICAgICBpZiAoaW52YWxpZCAhPSBQcm90b2NvbDo6RE9N
OjpBY2Nlc3NpYmlsaXR5UHJvcGVydGllczo6SW52YWxpZDo6RmFsc2UpCiAgICAgICAgICAgICB2
YWx1ZS0+c2V0SW52YWxpZChpbnZhbGlkKTsKICAgICAgICAgaWYgKGhpZGRlbikKICAgICAgICAg
ICAgIHZhbHVlLT5zZXRIaWRkZW4oaGlkZGVuKTsKICAgICAgICAgaWYgKHN1cHBvcnRzTGl2ZVJl
Z2lvbikgewogICAgICAgICAgICAgdmFsdWUtPnNldExpdmVSZWdpb25BdG9taWMobGl2ZVJlZ2lv
bkF0b21pYyk7CiAgICAgICAgICAgICBpZiAobGl2ZVJlZ2lvblJlbGV2YW50LT5sZW5ndGgoKSkK
LSAgICAgICAgICAgICAgICB2YWx1ZS0+c2V0TGl2ZVJlZ2lvblJlbGV2YW50KGxpdmVSZWdpb25S
ZWxldmFudCk7CisgICAgICAgICAgICAgICAgdmFsdWUtPnNldExpdmVSZWdpb25SZWxldmFudChs
aXZlUmVnaW9uUmVsZXZhbnQucmVsZWFzZU5vbk51bGwoKSk7CiAgICAgICAgICAgICB2YWx1ZS0+
c2V0TGl2ZVJlZ2lvblN0YXR1cyhsaXZlUmVnaW9uU3RhdHVzKTsKICAgICAgICAgfQotICAgICAg
ICBpZiAobW91c2VFdmVudE5vZGUpCi0gICAgICAgICAgICB2YWx1ZS0+c2V0TW91c2VFdmVudE5v
ZGVJZChwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKG1vdXNlRXZlbnROb2RlKSk7CisgICAgICAgIGlm
IChtb3VzZUV2ZW50Tm9kZSkgeworICAgICAgICAgICAgaWYgKGF1dG8gbW91c2VFdmVudE5vZGVJ
ZCA9IHB1c2hOb2RlUGF0aFRvRnJvbnRlbmQobW91c2VFdmVudE5vZGUpKQorICAgICAgICAgICAg
ICAgIHZhbHVlLT5zZXRNb3VzZUV2ZW50Tm9kZUlkKG1vdXNlRXZlbnROb2RlSWQpOworICAgICAg
ICB9CiAgICAgICAgIGlmIChvd25lZE5vZGVJZHMpCi0gICAgICAgICAgICB2YWx1ZS0+c2V0T3du
ZWROb2RlSWRzKG93bmVkTm9kZUlkcyk7Ci0gICAgICAgIGlmIChwYXJlbnROb2RlKQotICAgICAg
ICAgICAgdmFsdWUtPnNldFBhcmVudE5vZGVJZChwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKHBhcmVu
dE5vZGUpKTsKKyAgICAgICAgICAgIHZhbHVlLT5zZXRPd25lZE5vZGVJZHMob3duZWROb2RlSWRz
LnJlbGVhc2VOb25OdWxsKCkpOworICAgICAgICBpZiAocGFyZW50Tm9kZSkgeworICAgICAgICAg
ICAgaWYgKGF1dG8gcGFyZW50Tm9kZUlkID0gcHVzaE5vZGVQYXRoVG9Gcm9udGVuZChwYXJlbnRO
b2RlKSkKKyAgICAgICAgICAgICAgICB2YWx1ZS0+c2V0UGFyZW50Tm9kZUlkKHBhcmVudE5vZGVJ
ZCk7CisgICAgICAgIH0KICAgICAgICAgaWYgKHN1cHBvcnRzUHJlc3NlZCkKICAgICAgICAgICAg
IHZhbHVlLT5zZXRQcmVzc2VkKHByZXNzZWQpOwogICAgICAgICBpZiAocmVhZG9ubHkpCkBAIC0y
MTU1LDcgKzIyMzQsNyBAQCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3Np
YmlsaXR5UHJvcGVydGllcz4gSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aQogICAgICAgICBpZiAoc2Vs
ZWN0ZWQpCiAgICAgICAgICAgICB2YWx1ZS0+c2V0U2VsZWN0ZWQoc2VsZWN0ZWQpOwogICAgICAg
ICBpZiAoc2VsZWN0ZWRDaGlsZE5vZGVJZHMpCi0gICAgICAgICAgICB2YWx1ZS0+c2V0U2VsZWN0
ZWRDaGlsZE5vZGVJZHMoc2VsZWN0ZWRDaGlsZE5vZGVJZHMpOworICAgICAgICAgICAgdmFsdWUt
PnNldFNlbGVjdGVkQ2hpbGROb2RlSWRzKHNlbGVjdGVkQ2hpbGROb2RlSWRzLnJlbGVhc2VOb25O
dWxsKCkpOwogICAgICAgICAKICAgICAgICAgLy8gSDEgLS0gSDYgYWx3YXlzIGhhdmUgYSBoZWFk
aW5nTGV2ZWwgcHJvcGVydHkgdGhhdCBjYW4gYmUgY29tcGxpbWVudGVkIGJ5IGEgaGllcmFyY2hp
Y2FsTGV2ZWwKICAgICAgICAgLy8gcHJvcGVydHkgd2hlbiBhcmlhLWxldmVsIGlzIHNldCBvbiB0
aGUgZWxlbWVudCwgaW4gd2hpY2ggY2FzZSB3ZSB3YW50IHRvIHJlbWFpbiBjYWxsaW5nCkBAIC0y
MjM1LDIyICsyMzE0LDIyIEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmRpZENvbW1pdExvYWQo
RG9jdW1lbnQqIGRvY3VtZW50KQogICAgIGlmICghZnJhbWVPd25lcikKICAgICAgICAgcmV0dXJu
OwogCi0gICAgaW50IGZyYW1lT3duZXJJZCA9IG1fZG9jdW1lbnROb2RlVG9JZE1hcC5nZXQoZnJh
bWVPd25lcik7CisgICAgYXV0byBmcmFtZU93bmVySWQgPSBtX2RvY3VtZW50Tm9kZVRvSWRNYXAu
Z2V0KGZyYW1lT3duZXIpOwogICAgIGlmICghZnJhbWVPd25lcklkKQogICAgICAgICByZXR1cm47
CiAKICAgICAvLyBSZS1hZGQgZnJhbWUgb3duZXIgZWxlbWVudCB0b2dldGhlciB3aXRoIGl0cyBu
ZXcgY2hpbGRyZW4uCi0gICAgaW50IHBhcmVudElkID0gbV9kb2N1bWVudE5vZGVUb0lkTWFwLmdl
dChpbm5lclBhcmVudE5vZGUoZnJhbWVPd25lci5nZXQoKSkpOworICAgIGF1dG8gcGFyZW50SWQg
PSBtX2RvY3VtZW50Tm9kZVRvSWRNYXAuZ2V0KGlubmVyUGFyZW50Tm9kZShmcmFtZU93bmVyLmdl
dCgpKSk7CiAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPmNoaWxkTm9kZVJlbW92ZWQocGFyZW50
SWQsIGZyYW1lT3duZXJJZCk7CiAgICAgdW5iaW5kKGZyYW1lT3duZXIuZ2V0KCksICZtX2RvY3Vt
ZW50Tm9kZVRvSWRNYXApOwogCi0gICAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9k
ZT4gdmFsdWUgPSBidWlsZE9iamVjdEZvck5vZGUoZnJhbWVPd25lci5nZXQoKSwgMCwgJm1fZG9j
dW1lbnROb2RlVG9JZE1hcCk7CisgICAgYXV0byB2YWx1ZSA9IGJ1aWxkT2JqZWN0Rm9yTm9kZShm
cmFtZU93bmVyLmdldCgpLCAwLCAmbV9kb2N1bWVudE5vZGVUb0lkTWFwKTsKICAgICBOb2RlKiBw
cmV2aW91c1NpYmxpbmcgPSBpbm5lclByZXZpb3VzU2libGluZyhmcmFtZU93bmVyLmdldCgpKTsK
LSAgICBpbnQgcHJldklkID0gcHJldmlvdXNTaWJsaW5nID8gbV9kb2N1bWVudE5vZGVUb0lkTWFw
LmdldChwcmV2aW91c1NpYmxpbmcpIDogMDsKKyAgICBhdXRvIHByZXZJZCA9IHByZXZpb3VzU2li
bGluZyA/IG1fZG9jdW1lbnROb2RlVG9JZE1hcC5nZXQocHJldmlvdXNTaWJsaW5nKSA6IDA7CiAg
ICAgbV9mcm9udGVuZERpc3BhdGNoZXItPmNoaWxkTm9kZUluc2VydGVkKHBhcmVudElkLCBwcmV2
SWQsIFdURk1vdmUodmFsdWUpKTsKIH0KIAotaW50IEluc3BlY3RvckRPTUFnZW50OjppZGVudGlm
aWVyRm9yTm9kZShOb2RlJiBub2RlKQorUHJvdG9jb2w6OkRPTTo6Tm9kZUlkIEluc3BlY3RvckRP
TUFnZW50OjppZGVudGlmaWVyRm9yTm9kZShOb2RlJiBub2RlKQogewogICAgIHJldHVybiBwdXNo
Tm9kZVBhdGhUb0Zyb250ZW5kKCZub2RlKTsKIH0KQEAgLTIzMDcsNyArMjM4Niw3IEBAIHZvaWQg
SW5zcGVjdG9yRE9NQWdlbnQ6OmRpZEluc2VydERPTU5vZGUoTm9kZSYgbm9kZSkKICAgICBpZiAo
IXBhcmVudCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaW50IHBhcmVudElkID0gbV9kb2N1bWVu
dE5vZGVUb0lkTWFwLmdldChwYXJlbnQpOworICAgIGF1dG8gcGFyZW50SWQgPSBtX2RvY3VtZW50
Tm9kZVRvSWRNYXAuZ2V0KHBhcmVudCk7CiAgICAgLy8gUmV0dXJuIGlmIHBhcmVudCBpcyBub3Qg
bWFwcGVkIHlldC4KICAgICBpZiAoIXBhcmVudElkKQogICAgICAgICByZXR1cm47CkBAIC0yMzE4
LDggKzIzOTcsOCBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpkaWRJbnNlcnRET01Ob2RlKE5v
ZGUmIG5vZGUpCiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gQ2hpbGRyZW4gaGF2ZSBiZWVuIHJl
cXVlc3RlZCAtPiByZXR1cm4gdmFsdWUgb2YgYSBuZXcgY2hpbGQuCiAgICAgICAgIE5vZGUqIHBy
ZXZTaWJsaW5nID0gaW5uZXJQcmV2aW91c1NpYmxpbmcoJm5vZGUpOwotICAgICAgICBpbnQgcHJl
dklkID0gcHJldlNpYmxpbmcgPyBtX2RvY3VtZW50Tm9kZVRvSWRNYXAuZ2V0KHByZXZTaWJsaW5n
KSA6IDA7Ci0gICAgICAgIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+IHZhbHVl
ID0gYnVpbGRPYmplY3RGb3JOb2RlKCZub2RlLCAwLCAmbV9kb2N1bWVudE5vZGVUb0lkTWFwKTsK
KyAgICAgICAgYXV0byBwcmV2SWQgPSBwcmV2U2libGluZyA/IG1fZG9jdW1lbnROb2RlVG9JZE1h
cC5nZXQocHJldlNpYmxpbmcpIDogMDsKKyAgICAgICAgYXV0byB2YWx1ZSA9IGJ1aWxkT2JqZWN0
Rm9yTm9kZSgmbm9kZSwgMCwgJm1fZG9jdW1lbnROb2RlVG9JZE1hcCk7CiAgICAgICAgIG1fZnJv
bnRlbmREaXNwYXRjaGVyLT5jaGlsZE5vZGVJbnNlcnRlZChwYXJlbnRJZCwgcHJldklkLCBXVEZN
b3ZlKHZhbHVlKSk7CiAgICAgfQogfQpAQCAtMjMzNSw3ICsyNDE0LDcgQEAgdm9pZCBJbnNwZWN0
b3JET01BZ2VudDo6ZGlkUmVtb3ZlRE9NTm9kZShOb2RlJiBub2RlKQogICAgIGlmICghbV9kb2N1
bWVudE5vZGVUb0lkTWFwLmNvbnRhaW5zKHBhcmVudCkpCiAgICAgICAgIHJldHVybjsKIAotICAg
IGludCBwYXJlbnRJZCA9IG1fZG9jdW1lbnROb2RlVG9JZE1hcC5nZXQocGFyZW50KTsKKyAgICBh
dXRvIHBhcmVudElkID0gbV9kb2N1bWVudE5vZGVUb0lkTWFwLmdldChwYXJlbnQpOwogCiAgICAg
aWYgKCFtX2NoaWxkcmVuUmVxdWVzdGVkLmNvbnRhaW5zKHBhcmVudElkKSkgewogICAgICAgICAv
LyBObyBjaGlsZHJlbiBhcmUgbWFwcGVkIHlldCAtPiBvbmx5IG5vdGlmeSBvbiBjaGFuZ2VzIG9m
IGhhc0NoaWxkcmVuLgpAQCAtMjM1OCw3ICsyNDM3LDcgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2Vu
dDo6ZGlkTW9kaWZ5RE9NQXR0cihFbGVtZW50JiBlbGVtZW50LCBjb25zdCBBdG9tU3RyaW5nJiBu
YW0KICAgICBpZiAoc2hvdWxkU3VwcHJlc3NFdmVudCkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
aW50IGlkID0gYm91bmROb2RlSWQoJmVsZW1lbnQpOworICAgIGF1dG8gaWQgPSBib3VuZE5vZGVJ
ZCgmZWxlbWVudCk7CiAgICAgaWYgKCFpZCkKICAgICAgICAgcmV0dXJuOwogCkBAIC0yMzcwLDcg
KzI0NDksNyBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpkaWRNb2RpZnlET01BdHRyKEVsZW1l
bnQmIGVsZW1lbnQsIGNvbnN0IEF0b21TdHJpbmcmIG5hbQogCiB2b2lkIEluc3BlY3RvckRPTUFn
ZW50OjpkaWRSZW1vdmVET01BdHRyKEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IEF0b21TdHJpbmcm
IG5hbWUpCiB7Ci0gICAgaW50IGlkID0gYm91bmROb2RlSWQoJmVsZW1lbnQpOworICAgIGF1dG8g
aWQgPSBib3VuZE5vZGVJZCgmZWxlbWVudCk7CiAgICAgaWYgKCFpZCkKICAgICAgICAgcmV0dXJu
OwogCkBAIC0yMzgyLDkgKzI0NjEsOSBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpkaWRSZW1v
dmVET01BdHRyKEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IEF0b21TdHJpbmcmIG5hbQogCiB2b2lk
IEluc3BlY3RvckRPTUFnZW50OjpzdHlsZUF0dHJpYnV0ZUludmFsaWRhdGVkKGNvbnN0IFZlY3Rv
cjxFbGVtZW50Kj4mIGVsZW1lbnRzKQogewotICAgIGF1dG8gbm9kZUlkcyA9IEpTT046OkFycmF5
T2Y8aW50Pjo6Y3JlYXRlKCk7CisgICAgYXV0byBub2RlSWRzID0gSlNPTjo6QXJyYXlPZjxQcm90
b2NvbDo6RE9NOjpOb2RlSWQ+OjpjcmVhdGUoKTsKICAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBl
bGVtZW50cykgewotICAgICAgICBpbnQgaWQgPSBib3VuZE5vZGVJZChlbGVtZW50KTsKKyAgICAg
ICAgYXV0byBpZCA9IGJvdW5kTm9kZUlkKGVsZW1lbnQpOwogICAgICAgICBpZiAoIWlkKQogICAg
ICAgICAgICAgY29udGludWU7CiAKQEAgLTIzOTgsNyArMjQ3Nyw3IEBAIHZvaWQgSW5zcGVjdG9y
RE9NQWdlbnQ6OnN0eWxlQXR0cmlidXRlSW52YWxpZGF0ZWQoY29uc3QgVmVjdG9yPEVsZW1lbnQq
PiYgZWxlbWVuCiAKIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmNoYXJhY3RlckRhdGFNb2RpZmll
ZChDaGFyYWN0ZXJEYXRhJiBjaGFyYWN0ZXJEYXRhKQogewotICAgIGludCBpZCA9IG1fZG9jdW1l
bnROb2RlVG9JZE1hcC5nZXQoJmNoYXJhY3RlckRhdGEpOworICAgIGF1dG8gaWQgPSBtX2RvY3Vt
ZW50Tm9kZVRvSWRNYXAuZ2V0KCZjaGFyYWN0ZXJEYXRhKTsKICAgICBpZiAoIWlkKSB7CiAgICAg
ICAgIC8vIFB1c2ggdGV4dCBub2RlIGlmIGl0IGlzIGJlaW5nIGNyZWF0ZWQuCiAgICAgICAgIGRp
ZEluc2VydERPTU5vZGUoY2hhcmFjdGVyRGF0YSk7CkBAIC0yNDA5LDcgKzI0ODgsNyBAQCB2b2lk
IEluc3BlY3RvckRPTUFnZW50OjpjaGFyYWN0ZXJEYXRhTW9kaWZpZWQoQ2hhcmFjdGVyRGF0YSYg
Y2hhcmFjdGVyRGF0YSkKIAogdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6ZGlkSW52YWxpZGF0ZVN0
eWxlQXR0cihFbGVtZW50JiBlbGVtZW50KQogewotICAgIGludCBpZCA9IG1fZG9jdW1lbnROb2Rl
VG9JZE1hcC5nZXQoJmVsZW1lbnQpOworICAgIGF1dG8gaWQgPSBtX2RvY3VtZW50Tm9kZVRvSWRN
YXAuZ2V0KCZlbGVtZW50KTsKICAgICBpZiAoIWlkKQogICAgICAgICByZXR1cm47CiAKQEAgLTI0
MjAsMjIgKzI0OTksMjIgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6ZGlkSW52YWxpZGF0ZVN0
eWxlQXR0cihFbGVtZW50JiBlbGVtZW50KQogCiB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpkaWRQ
dXNoU2hhZG93Um9vdChFbGVtZW50JiBob3N0LCBTaGFkb3dSb290JiByb290KQogewotICAgIGlu
dCBob3N0SWQgPSBtX2RvY3VtZW50Tm9kZVRvSWRNYXAuZ2V0KCZob3N0KTsKKyAgICBhdXRvIGhv
c3RJZCA9IG1fZG9jdW1lbnROb2RlVG9JZE1hcC5nZXQoJmhvc3QpOwogICAgIGlmIChob3N0SWQp
CiAgICAgICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5zaGFkb3dSb290UHVzaGVkKGhvc3RJZCwg
YnVpbGRPYmplY3RGb3JOb2RlKCZyb290LCAwLCAmbV9kb2N1bWVudE5vZGVUb0lkTWFwKSk7CiB9
CiAKIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OndpbGxQb3BTaGFkb3dSb290KEVsZW1lbnQmIGhv
c3QsIFNoYWRvd1Jvb3QmIHJvb3QpCiB7Ci0gICAgaW50IGhvc3RJZCA9IG1fZG9jdW1lbnROb2Rl
VG9JZE1hcC5nZXQoJmhvc3QpOwotICAgIGludCByb290SWQgPSBtX2RvY3VtZW50Tm9kZVRvSWRN
YXAuZ2V0KCZyb290KTsKKyAgICBhdXRvIGhvc3RJZCA9IG1fZG9jdW1lbnROb2RlVG9JZE1hcC5n
ZXQoJmhvc3QpOworICAgIGF1dG8gcm9vdElkID0gbV9kb2N1bWVudE5vZGVUb0lkTWFwLmdldCgm
cm9vdCk7CiAgICAgaWYgKGhvc3RJZCAmJiByb290SWQpCiAgICAgICAgIG1fZnJvbnRlbmREaXNw
YXRjaGVyLT5zaGFkb3dSb290UG9wcGVkKGhvc3RJZCwgcm9vdElkKTsKIH0KIAogdm9pZCBJbnNw
ZWN0b3JET01BZ2VudDo6ZGlkQ2hhbmdlQ3VzdG9tRWxlbWVudFN0YXRlKEVsZW1lbnQmIGVsZW1l
bnQpCiB7Ci0gICAgaW50IGVsZW1lbnRJZCA9IG1fZG9jdW1lbnROb2RlVG9JZE1hcC5nZXQoJmVs
ZW1lbnQpOworICAgIGF1dG8gZWxlbWVudElkID0gbV9kb2N1bWVudE5vZGVUb0lkTWFwLmdldCgm
ZWxlbWVudCk7CiAgICAgaWYgKCFlbGVtZW50SWQpCiAgICAgICAgIHJldHVybjsKIApAQCAtMjQ2
Miw3ICsyNTQxLDcgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6cHNldWRvRWxlbWVudENyZWF0
ZWQoUHNldWRvRWxlbWVudCYgcHNldWRvRWxlbWVudCkKICAgICBpZiAoIXBhcmVudCkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgaW50IHBhcmVudElkID0gbV9kb2N1bWVudE5vZGVUb0lkTWFwLmdl
dChwYXJlbnQpOworICAgIGF1dG8gcGFyZW50SWQgPSBtX2RvY3VtZW50Tm9kZVRvSWRNYXAuZ2V0
KHBhcmVudCk7CiAgICAgaWYgKCFwYXJlbnRJZCkKICAgICAgICAgcmV0dXJuOwogCkBAIC0yNDcy
LDE0ICsyNTUxLDE0IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnBzZXVkb0VsZW1lbnRDcmVh
dGVkKFBzZXVkb0VsZW1lbnQmIHBzZXVkb0VsZW1lbnQpCiAKIHZvaWQgSW5zcGVjdG9yRE9NQWdl
bnQ6OnBzZXVkb0VsZW1lbnREZXN0cm95ZWQoUHNldWRvRWxlbWVudCYgcHNldWRvRWxlbWVudCkK
IHsKLSAgICBpbnQgcHNldWRvRWxlbWVudElkID0gbV9kb2N1bWVudE5vZGVUb0lkTWFwLmdldCgm
cHNldWRvRWxlbWVudCk7CisgICAgYXV0byBwc2V1ZG9FbGVtZW50SWQgPSBtX2RvY3VtZW50Tm9k
ZVRvSWRNYXAuZ2V0KCZwc2V1ZG9FbGVtZW50KTsKICAgICBpZiAoIXBzZXVkb0VsZW1lbnRJZCkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gSWYgYSBQc2V1ZG9FbGVtZW50IGlzIGJvdW5kLCBp
dHMgcGFyZW50IGVsZW1lbnQgbXVzdCBoYXZlIGJlZW4gYm91bmQuCiAgICAgRWxlbWVudCogcGFy
ZW50ID0gcHNldWRvRWxlbWVudC5ob3N0RWxlbWVudCgpOwogICAgIEFTU0VSVChwYXJlbnQpOwot
ICAgIGludCBwYXJlbnRJZCA9IG1fZG9jdW1lbnROb2RlVG9JZE1hcC5nZXQocGFyZW50KTsKKyAg
ICBhdXRvIHBhcmVudElkID0gbV9kb2N1bWVudE5vZGVUb0lkTWFwLmdldChwYXJlbnQpOwogICAg
IEFTU0VSVChwYXJlbnRJZCk7CiAKICAgICB1bmJpbmQoJnBzZXVkb0VsZW1lbnQsICZtX2RvY3Vt
ZW50Tm9kZVRvSWRNYXApOwpAQCAtMjQ5NSw3ICsyNTc0LDcgQEAgdm9pZCBJbnNwZWN0b3JET01B
Z2VudDo6ZGlkQWRkRXZlbnRMaXN0ZW5lcihFdmVudFRhcmdldCYgdGFyZ2V0KQogICAgIGlmICgh
bm9kZS5jb250YWlucyhtX2luc3BlY3RlZE5vZGUuZ2V0KCkpKQogICAgICAgICByZXR1cm47CiAK
LSAgICBpbnQgbm9kZUlkID0gYm91bmROb2RlSWQoJm5vZGUpOworICAgIGF1dG8gbm9kZUlkID0g
Ym91bmROb2RlSWQoJm5vZGUpOwogICAgIGlmICghbm9kZUlkKQogICAgICAgICByZXR1cm47CiAK
QEAgLTI1MTYsNyArMjU5NSw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OndpbGxSZW1vdmVF
dmVudExpc3RlbmVyKEV2ZW50VGFyZ2V0JiB0YXJnZXQsIGNvbnN0IEF0b21TCiAgICAgaWYgKCFu
b2RlLmNvbnRhaW5zKG1faW5zcGVjdGVkTm9kZS5nZXQoKSkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIGludCBub2RlSWQgPSBib3VuZE5vZGVJZCgmbm9kZSk7CisgICAgYXV0byBub2RlSWQgPSBi
b3VuZE5vZGVJZCgmbm9kZSk7CiAgICAgaWYgKCFub2RlSWQpCiAgICAgICAgIHJldHVybjsKIApA
QCAtMjU2Niw3ICsyNjQ1LDcgQEAgUmVmUHRyPEpTQzo6QnJlYWtwb2ludD4gSW5zcGVjdG9yRE9N
QWdlbnQ6OmJyZWFrcG9pbnRGb3JFdmVudExpc3RlbmVyKEV2ZW50VGFyZ2UKICAgICByZXR1cm4g
bnVsbHB0cjsKIH0KIAotaW50IEluc3BlY3RvckRPTUFnZW50OjppZEZvckV2ZW50TGlzdGVuZXIo
RXZlbnRUYXJnZXQmIHRhcmdldCwgY29uc3QgQXRvbVN0cmluZyYgZXZlbnRUeXBlLCBFdmVudExp
c3RlbmVyJiBsaXN0ZW5lciwgYm9vbCBjYXB0dXJlKQorUHJvdG9jb2w6OkRPTTo6RXZlbnRMaXN0
ZW5lcklkIEluc3BlY3RvckRPTUFnZW50OjppZEZvckV2ZW50TGlzdGVuZXIoRXZlbnRUYXJnZXQm
IHRhcmdldCwgY29uc3QgQXRvbVN0cmluZyYgZXZlbnRUeXBlLCBFdmVudExpc3RlbmVyJiBsaXN0
ZW5lciwgYm9vbCBjYXB0dXJlKQogewogICAgIGZvciAoYXV0byYgaW5zcGVjdG9yRXZlbnRMaXN0
ZW5lciA6IG1fZXZlbnRMaXN0ZW5lckVudHJpZXMudmFsdWVzKCkpIHsKICAgICAgICAgaWYgKGlu
c3BlY3RvckV2ZW50TGlzdGVuZXIubWF0Y2hlcyh0YXJnZXQsIGV2ZW50VHlwZSwgbGlzdGVuZXIs
IGNhcHR1cmUpKQpAQCAtMjYwNCw4ICsyNjgzLDcgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6
bWVkaWFNZXRyaWNzVGltZXJGaXJlZCgpCiAgICAgICAgIGlmIChpdGVyYXRvci0+dmFsdWUuaXNQ
b3dlckVmZmljaWVudCAhPSBpc1Bvd2VyRWZmaWNpZW50KSB7CiAgICAgICAgICAgICBpdGVyYXRv
ci0+dmFsdWUuaXNQb3dlckVmZmljaWVudCA9IGlzUG93ZXJFZmZpY2llbnQ7CiAKLSAgICAgICAg
ICAgIGludCBub2RlSWQgPSBwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKG1lZGlhRWxlbWVudCk7Ci0g
ICAgICAgICAgICBpZiAobm9kZUlkKSB7CisgICAgICAgICAgICBpZiAoYXV0byBub2RlSWQgPSBw
dXNoTm9kZVBhdGhUb0Zyb250ZW5kKG1lZGlhRWxlbWVudCkpIHsKICAgICAgICAgICAgICAgICBh
dXRvIHRpbWVzdGFtcCA9IG1fZW52aXJvbm1lbnQuZXhlY3V0aW9uU3RvcHdhdGNoKCkuZWxhcHNl
ZFRpbWUoKS5zZWNvbmRzKCk7CiAgICAgICAgICAgICAgICAgbV9mcm9udGVuZERpc3BhdGNoZXIt
PnBvd2VyRWZmaWNpZW50UGxheWJhY2tTdGF0ZUNoYW5nZWQobm9kZUlkLCB0aW1lc3RhbXAsIGl0
ZXJhdG9yLT52YWx1ZS5pc1Bvd2VyRWZmaWNpZW50KTsKICAgICAgICAgICAgIH0KQEAgLTI2NTks
NyArMjczNyw3IEBAIE5vZGUqIEluc3BlY3RvckRPTUFnZW50Ojpub2RlRm9yUGF0aChjb25zdCBT
dHJpbmcmIHBhdGgpCiAgICAgcmV0dXJuIG5vZGU7CiB9CiAKLU5vZGUqIEluc3BlY3RvckRPTUFn
ZW50Ojpub2RlRm9yT2JqZWN0SWQoY29uc3QgU3RyaW5nJiBvYmplY3RJZCkKK05vZGUqIEluc3Bl
Y3RvckRPTUFnZW50Ojpub2RlRm9yT2JqZWN0SWQoY29uc3QgUHJvdG9jb2w6OlJ1bnRpbWU6OlJl
bW90ZU9iamVjdElkJiBvYmplY3RJZCkKIHsKICAgICBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNj
cmlwdCA9IG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmluamVjdGVkU2NyaXB0Rm9yT2JqZWN0SWQo
b2JqZWN0SWQpOwogICAgIGlmIChpbmplY3RlZFNjcmlwdC5oYXNOb1ZhbHVlKCkpCkBAIC0yNjY4
LDE1ICsyNzQ2LDIwIEBAIE5vZGUqIEluc3BlY3RvckRPTUFnZW50Ojpub2RlRm9yT2JqZWN0SWQo
Y29uc3QgU3RyaW5nJiBvYmplY3RJZCkKICAgICByZXR1cm4gc2NyaXB0VmFsdWVBc05vZGUoaW5q
ZWN0ZWRTY3JpcHQuZmluZE9iamVjdEJ5SWQob2JqZWN0SWQpKTsKIH0KIAotdm9pZCBJbnNwZWN0
b3JET01BZ2VudDo6cHVzaE5vZGVCeVBhdGhUb0Zyb250ZW5kKEVycm9yU3RyaW5nJiBlcnJvclN0
cmluZywgY29uc3QgU3RyaW5nJiBwYXRoLCBpbnQqIG5vZGVJZCkKK1Byb3RvY29sOjpFcnJvclN0
cmluZ09yPFByb3RvY29sOjpET006Ok5vZGVJZD4gSW5zcGVjdG9yRE9NQWdlbnQ6OnB1c2hOb2Rl
QnlQYXRoVG9Gcm9udGVuZChjb25zdCBTdHJpbmcmIHBhdGgpCiB7Ci0gICAgaWYgKE5vZGUqIG5v
ZGUgPSBub2RlRm9yUGF0aChwYXRoKSkKLSAgICAgICAgKm5vZGVJZCA9IHB1c2hOb2RlUGF0aFRv
RnJvbnRlbmQoZXJyb3JTdHJpbmcsIG5vZGUpOwotICAgIGVsc2UKLSAgICAgICAgZXJyb3JTdHJp
bmcgPSAiTWlzc2luZyBub2RlIGZvciBnaXZlbiBwYXRoIl9zOworICAgIFByb3RvY29sOjpFcnJv
clN0cmluZyBlcnJvclN0cmluZzsKKworICAgIGlmIChOb2RlKiBub2RlID0gbm9kZUZvclBhdGgo
cGF0aCkpIHsKKyAgICAgICAgaWYgKGF1dG8gbm9kZUlkID0gcHVzaE5vZGVQYXRoVG9Gcm9udGVu
ZChlcnJvclN0cmluZywgbm9kZSkpCisgICAgICAgICAgICByZXR1cm4gbm9kZUlkOworICAgICAg
ICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOworICAgIH0KKworICAgIHJldHVy
biBtYWtlVW5leHBlY3RlZCgiTWlzc2luZyBub2RlIGZvciBnaXZlbiBwYXRoIl9zKTsKIH0KIAot
UmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4gSW5zcGVj
dG9yRE9NQWdlbnQ6OnJlc29sdmVOb2RlKE5vZGUqIG5vZGUsIGNvbnN0IFN0cmluZyYgb2JqZWN0
R3JvdXApCitSZWZQdHI8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4gSW5zcGVjdG9y
RE9NQWdlbnQ6OnJlc29sdmVOb2RlKE5vZGUqIG5vZGUsIGNvbnN0IFN0cmluZyYgb2JqZWN0R3Jv
dXApCiB7CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gJm5vZGUtPmRvY3VtZW50KCk7CiAgICAg
aWYgKGF1dG8qIHRlbXBsYXRlSG9zdCA9IGRvY3VtZW50LT50ZW1wbGF0ZURvY3VtZW50SG9zdCgp
KQpAQCAtMjcwNiw5ICsyNzg5LDExIEBAIEpTQzo6SlNWYWx1ZSBJbnNwZWN0b3JET01BZ2VudDo6
bm9kZUFzU2NyaXB0VmFsdWUoSlNDOjpKU0dsb2JhbE9iamVjdCYgc3RhdGUsIE5vCiAgICAgcmV0
dXJuIHRvSlMoJnN0YXRlLCBkZXByZWNhdGVkR2xvYmFsT2JqZWN0Rm9yUHJvdG90eXBlKCZzdGF0
ZSksIEJpbmRpbmdTZWN1cml0eTo6Y2hlY2tTZWN1cml0eUZvck5vZGUoc3RhdGUsIG5vZGUpKTsK
IH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c2V0QWxsb3dFZGl0aW5nVXNlckFnZW50U2hh
ZG93VHJlZXMoRXJyb3JTdHJpbmcmLCBib29sIGFsbG93KQorUHJvdG9jb2w6OkVycm9yU3RyaW5n
T3I8dm9pZD4gSW5zcGVjdG9yRE9NQWdlbnQ6OnNldEFsbG93RWRpdGluZ1VzZXJBZ2VudFNoYWRv
d1RyZWVzKGJvb2wgYWxsb3cpCiB7CiAgICAgbV9hbGxvd0VkaXRpbmdVc2VyQWdlbnRTaGFkb3dU
cmVlcyA9IGFsbG93OworCisgICAgcmV0dXJuIHsgfTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0
b3JET01BZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JE
T01BZ2VudC5oCmluZGV4IDNlMzc3MDdhZmVjZjc4ZjQyMThhYTgzMDFlMWVhMmQ0MWM3MjUxNzIu
LjdmMjg3MmRmNDllMGQ0MGFiMDIwY2Q5ODg0ZGVkMDAzMDhmMWEyYTYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NQWdlbnQuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTUFnZW50LmgKQEAgLTc2
LDE0ICs3NiwxMiBAQCBjbGFzcyBTaGFkb3dSb290OwogCiBzdHJ1Y3QgSGlnaGxpZ2h0Q29uZmln
OwogCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQogY2xhc3MgSW5zcGVjdG9yRE9NQWdl
bnQgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yQWdlbnRCYXNlLCBwdWJsaWMgSW5zcGVjdG9yOjpE
T01CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKElu
c3BlY3RvckRPTUFnZW50KTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoK
ICAgICBJbnNwZWN0b3JET01BZ2VudChQYWdlQWdlbnRDb250ZXh0JiwgSW5zcGVjdG9yT3Zlcmxh
eSopOwotICAgIH5JbnNwZWN0b3JET01BZ2VudCgpIG92ZXJyaWRlOworICAgIH5JbnNwZWN0b3JE
T01BZ2VudCgpOwogCiAgICAgc3RhdGljIFN0cmluZyB0b0Vycm9yU3RyaW5nKEV4Y2VwdGlvbkNv
ZGUpOwogICAgIHN0YXRpYyBTdHJpbmcgdG9FcnJvclN0cmluZyhFeGNlcHRpb24mJik7CkBAIC0x
MDIsNjIgKzEwMCw2MiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEpTQzo6SlNWYWx1ZSBub2RlQXNT
Y3JpcHRWYWx1ZShKU0M6OkpTR2xvYmFsT2JqZWN0JiwgTm9kZSopOwogCiAgICAgLy8gSW5zcGVj
dG9yQWdlbnRCYXNlCi0gICAgdm9pZCBkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVj
dG9yOjpGcm9udGVuZFJvdXRlciosIEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXIqKSBvdmVy
cmlkZTsKLSAgICB2b2lkIHdpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6
RGlzY29ubmVjdFJlYXNvbikgb3ZlcnJpZGU7CisgICAgdm9pZCBkaWRDcmVhdGVGcm9udGVuZEFu
ZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9udGVuZFJvdXRlciosIEluc3BlY3Rvcjo6QmFja2VuZERp
c3BhdGNoZXIqKTsKKyAgICB2b2lkIHdpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3Bl
Y3Rvcjo6RGlzY29ubmVjdFJlYXNvbik7CiAKICAgICAvLyBET01CYWNrZW5kRGlzcGF0Y2hlckhh
bmRsZXIKLSAgICB2b2lkIHF1ZXJ5U2VsZWN0b3IoRXJyb3JTdHJpbmcmLCBpbnQgbm9kZUlkLCBj
b25zdCBTdHJpbmcmIHNlbGVjdG9ycywgaW50KiBlbGVtZW50SWQpIG92ZXJyaWRlOwotICAgIHZv
aWQgcXVlcnlTZWxlY3RvckFsbChFcnJvclN0cmluZyYsIGludCBub2RlSWQsIGNvbnN0IFN0cmlu
ZyYgc2VsZWN0b3JzLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxpbnQ+PiYgcmVzdWx0KSBvdmVycmlk
ZTsKLSAgICB2b2lkIGdldERvY3VtZW50KEVycm9yU3RyaW5nJiwgUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRPTTo6Tm9kZT4mIHJvb3QpIG92ZXJyaWRlOwotICAgIHZvaWQgcmVxdWVzdENo
aWxkTm9kZXMoRXJyb3JTdHJpbmcmLCBpbnQgbm9kZUlkLCBjb25zdCBpbnQqIGRlcHRoKSBvdmVy
cmlkZTsKLSAgICB2b2lkIHNldEF0dHJpYnV0ZVZhbHVlKEVycm9yU3RyaW5nJiwgaW50IGVsZW1l
bnRJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKSBvdmVycmlkZTsK
LSAgICB2b2lkIHNldEF0dHJpYnV0ZXNBc1RleHQoRXJyb3JTdHJpbmcmLCBpbnQgZWxlbWVudElk
LCBjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFN0cmluZyogbmFtZSkgb3ZlcnJpZGU7Ci0gICAg
dm9pZCByZW1vdmVBdHRyaWJ1dGUoRXJyb3JTdHJpbmcmLCBpbnQgZWxlbWVudElkLCBjb25zdCBT
dHJpbmcmIG5hbWUpIG92ZXJyaWRlOwotICAgIHZvaWQgcmVtb3ZlTm9kZShFcnJvclN0cmluZyYs
IGludCBub2RlSWQpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0Tm9kZU5hbWUoRXJyb3JTdHJpbmcm
LCBpbnQgbm9kZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGludCogbmV3SWQpIG92ZXJyaWRlOwot
ICAgIHZvaWQgZ2V0T3V0ZXJIVE1MKEVycm9yU3RyaW5nJiwgaW50IG5vZGVJZCwgV1RGOjpTdHJp
bmcqIG91dGVySFRNTCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRPdXRlckhUTUwoRXJyb3JTdHJp
bmcmLCBpbnQgbm9kZUlkLCBjb25zdCBTdHJpbmcmIG91dGVySFRNTCkgb3ZlcnJpZGU7Ci0gICAg
dm9pZCBpbnNlcnRBZGphY2VudEhUTUwoRXJyb3JTdHJpbmcmLCBpbnQgbm9kZUlkLCBjb25zdCBT
dHJpbmcmIHBvc2l0aW9uLCBjb25zdCBTdHJpbmcmIGh0bWwpIG92ZXJyaWRlOwotICAgIHZvaWQg
c2V0Tm9kZVZhbHVlKEVycm9yU3RyaW5nJiwgaW50IG5vZGVJZCwgY29uc3QgU3RyaW5nJiB2YWx1
ZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBnZXRTdXBwb3J0ZWRFdmVudE5hbWVzKEVycm9yU3RyaW5n
JiwgUmVmUHRyPEpTT046OkFycmF5T2Y8U3RyaW5nPj4mIGV2ZW50TmFtZXMpIG92ZXJyaWRlOwor
ICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6RE9NOjpOb2RlSWQ+IHF1ZXJ5U2VsZWN0b3IoSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpO
b2RlSWQsIGNvbnN0IFN0cmluZyYgc2VsZWN0b3IpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8UmVmPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9N
OjpOb2RlSWQ+Pj4gcXVlcnlTZWxlY3RvckFsbChJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5v
ZGVJZCwgY29uc3QgU3RyaW5nJiBzZWxlY3Rvcik7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6
RXJyb3JTdHJpbmdPcjxSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlPj4gZ2V0RG9j
dW1lbnQoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHJl
cXVlc3RDaGlsZE5vZGVzKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkLCBPcHRpb25h
bDxpbnQ+JiYgZGVwdGgpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8
dm9pZD4gc2V0QXR0cmlidXRlVmFsdWUoSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQs
IGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7CisgICAgSW5zcGVjdG9y
OjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzZXRBdHRyaWJ1dGVzQXNUZXh0KEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkLCBjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFN0
cmluZyYgbmFtZSk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lk
PiByZW1vdmVBdHRyaWJ1dGUoSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQsIGNvbnN0
IFN0cmluZyYgbmFtZSk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2
b2lkPiByZW1vdmVOb2RlKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkKTsKKyAgICBJ
bnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRP
TTo6Tm9kZUlkPiBzZXROb2RlTmFtZShJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZCwg
Y29uc3QgU3RyaW5nJik7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxT
dHJpbmc+IGdldE91dGVySFRNTChJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZCk7Cisg
ICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzZXRPdXRlckhUTUwo
SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQsIGNvbnN0IFN0cmluZyYpOworICAgIElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gaW5zZXJ0QWRqYWNlbnRIVE1M
KEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkLCBjb25zdCBTdHJpbmcmIHBvc2l0aW9u
LCBjb25zdCBTdHJpbmcmIGh0bWwpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3Ry
aW5nT3I8dm9pZD4gc2V0Tm9kZVZhbHVlKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlk
LCBjb25zdCBTdHJpbmcmKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09y
PFJlZjxKU09OOjpBcnJheU9mPFN0cmluZz4+PiBnZXRTdXBwb3J0ZWRFdmVudE5hbWVzKCk7CiAj
aWYgRU5BQkxFKElOU1BFQ1RPUl9BTFRFUk5BVEVfRElTUEFUQ0hFUlMpCi0gICAgdm9pZCBnZXRE
YXRhQmluZGluZ3NGb3JOb2RlKEVycm9yU3RyaW5nJiwgaW50IG5vZGVJZCwgUmVmUHRyPEpTT046
OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpEYXRhQmluZGluZz4+JiBkYXRhQXJy
YXkpIG92ZXJyaWRlOwotICAgIHZvaWQgZ2V0QXNzb2NpYXRlZERhdGFGb3JOb2RlKEVycm9yU3Ry
aW5nJiwgaW50IG5vZGVJZCwgT3B0aW9uYWw8U3RyaW5nPiYgYXNzb2NpYXRlZERhdGEpIG92ZXJy
aWRlOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEpTT046OkFy
cmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpEYXRhQmluZGluZz4+PiBnZXREYXRhQmlu
ZGluZ3NGb3JOb2RlKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkKTsKKyAgICBJbnNw
ZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFN0cmluZz4gZ2V0QXNzb2NpYXRlZERhdGFG
b3JOb2RlKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkKTsKICNlbmRpZgotICAgIHZv
aWQgZ2V0RXZlbnRMaXN0ZW5lcnNGb3JOb2RlKEVycm9yU3RyaW5nJiwgaW50IG5vZGVJZCwgUmVm
UHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpFdmVudExpc3RlbmVy
Pj4mIGxpc3RlbmVyc0FycmF5KSBvdmVycmlkZTsKLSAgICB2b2lkIHNldEV2ZW50TGlzdGVuZXJE
aXNhYmxlZChFcnJvclN0cmluZyYsIGludCBldmVudExpc3RlbmVySWQsIGJvb2wgZGlzYWJsZWQp
IG92ZXJyaWRlOwotICAgIHZvaWQgc2V0QnJlYWtwb2ludEZvckV2ZW50TGlzdGVuZXIoRXJyb3JT
dHJpbmcmLCBpbnQgZXZlbnRMaXN0ZW5lcklkLCBjb25zdCBKU09OOjpPYmplY3QqIG9wdGlvbnMp
IGZpbmFsOwotICAgIHZvaWQgcmVtb3ZlQnJlYWtwb2ludEZvckV2ZW50TGlzdGVuZXIoRXJyb3JT
dHJpbmcmLCBpbnQgZXZlbnRMaXN0ZW5lcklkKSBvdmVycmlkZTsKLSAgICB2b2lkIGdldEFjY2Vz
c2liaWxpdHlQcm9wZXJ0aWVzRm9yTm9kZShFcnJvclN0cmluZyYsIGludCBub2RlSWQsIFJlZlB0
cjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzPiYgYXhQ
cm9wZXJ0aWVzKSBvdmVycmlkZTsKLSAgICB2b2lkIHBlcmZvcm1TZWFyY2goRXJyb3JTdHJpbmcm
LCBjb25zdCBTdHJpbmcmIHF1ZXJ5LCBjb25zdCBKU09OOjpBcnJheSogbm9kZUlkcywgY29uc3Qg
Ym9vbCogY2FzZVNlbnNpdGl2ZSwgU3RyaW5nKiBzZWFyY2hJZCwgaW50KiByZXN1bHRDb3VudCkg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBnZXRTZWFyY2hSZXN1bHRzKEVycm9yU3RyaW5nJiwgY29uc3Qg
U3RyaW5nJiBzZWFyY2hJZCwgaW50IGZyb21JbmRleCwgaW50IHRvSW5kZXgsIFJlZlB0cjxKU09O
OjpBcnJheU9mPGludD4+Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkaXNjYXJkU2VhcmNoUmVzdWx0
cyhFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgc2VhcmNoSWQpIG92ZXJyaWRlOwotICAgIHZv
aWQgcmVzb2x2ZU5vZGUoRXJyb3JTdHJpbmcmLCBpbnQgbm9kZUlkLCBjb25zdCBTdHJpbmcqIG9i
amVjdEdyb3VwLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2Jq
ZWN0PiYgcmVzdWx0KSBvdmVycmlkZTsKLSAgICB2b2lkIGdldEF0dHJpYnV0ZXMoRXJyb3JTdHJp
bmcmLCBpbnQgbm9kZUlkLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxTdHJpbmc+PiYgcmVzdWx0KSBv
dmVycmlkZTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxKU09O
OjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6RXZlbnRMaXN0ZW5lcj4+PiBnZXRF
dmVudExpc3RlbmVyc0Zvck5vZGUoSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQpOwor
ICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc2V0RXZlbnRMaXN0
ZW5lckRpc2FibGVkKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6RXZlbnRMaXN0ZW5lcklkLCBi
b29sKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHNldEJy
ZWFrcG9pbnRGb3JFdmVudExpc3RlbmVyKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6RXZlbnRM
aXN0ZW5lcklkLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIG9wdGlvbnMpOworICAgIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gcmVtb3ZlQnJlYWtwb2ludEZvckV2ZW50
TGlzdGVuZXIoSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpFdmVudExpc3RlbmVySWQpOworICAg
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRPTTo6QWNjZXNzaWJpbGl0eVByb3BlcnRpZXM+PiBnZXRBY2Nlc3NpYmlsaXR5UHJvcGVy
dGllc0Zvck5vZGUoSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQpOworICAgIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8c3RkOjp0dXBsZTxTdHJpbmcgLyogc2VhcmNo
SWQgKi8sIGludCAvKiByZXN1bHRDb3VudCAqLz4+IHBlcmZvcm1TZWFyY2goY29uc3QgU3RyaW5n
JiBxdWVyeSwgUmVmUHRyPEpTT046OkFycmF5PiYmIG5vZGVJZHMsIE9wdGlvbmFsPGJvb2w+JiYg
Y2FzZVNlbnNpdGl2ZSk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxS
ZWY8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZD4+PiBnZXRT
ZWFyY2hSZXN1bHRzKGNvbnN0IFN0cmluZyYgc2VhcmNoSWQsIGludCBmcm9tSW5kZXgsIGludCB0
b0luZGV4KTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGRp
c2NhcmRTZWFyY2hSZXN1bHRzKGNvbnN0IFN0cmluZyYgc2VhcmNoSWQpOworICAgIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRp
bWU6OlJlbW90ZU9iamVjdD4+IHJlc29sdmVOb2RlKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6
Tm9kZUlkLCBjb25zdCBTdHJpbmcmIG9iamVjdEdyb3VwKTsKKyAgICBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPFN0cmluZz4+PiBnZXRBdHRyaWJ1
dGVzKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkKTsKICNpZiBQTEFURk9STShJT1Nf
RkFNSUxZKQotICAgIHZvaWQgc2V0SW5zcGVjdE1vZGVFbmFibGVkKEVycm9yU3RyaW5nJiwgYm9v
bCBlbmFibGVkLCBjb25zdCBKU09OOjpPYmplY3QqIGhpZ2hsaWdodENvbmZpZykgb3ZlcnJpZGU7
CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzZXRJbnNwZWN0
TW9kZUVuYWJsZWQoYm9vbCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBoaWdobGlnaHRDb25maWcp
OwogI2Vsc2UKLSAgICB2b2lkIHNldEluc3BlY3RNb2RlRW5hYmxlZChFcnJvclN0cmluZyYsIGJv
b2wgZW5hYmxlZCwgY29uc3QgSlNPTjo6T2JqZWN0KiBoaWdobGlnaHRDb25maWcsIGNvbnN0IGJv
b2wqIHNob3dSdWxlcnMpIG92ZXJyaWRlOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8dm9pZD4gc2V0SW5zcGVjdE1vZGVFbmFibGVkKGJvb2wsIFJlZlB0cjxKU09OOjpP
YmplY3Q+JiYgaGlnaGxpZ2h0Q29uZmlnLCBPcHRpb25hbDxib29sPiYmIHNob3dSdWxlcnMpOwog
I2VuZGlmCi0gICAgdm9pZCByZXF1ZXN0Tm9kZShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYg
b2JqZWN0SWQsIGludCogbm9kZUlkKSBvdmVycmlkZTsKLSAgICB2b2lkIHB1c2hOb2RlQnlQYXRo
VG9Gcm9udGVuZChFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgcGF0aCwgaW50KiBub2RlSWQp
IG92ZXJyaWRlOwotICAgIHZvaWQgaGlkZUhpZ2hsaWdodChFcnJvclN0cmluZyYpIG92ZXJyaWRl
OwotICAgIHZvaWQgaGlnaGxpZ2h0UmVjdChFcnJvclN0cmluZyYsIGludCB4LCBpbnQgeSwgaW50
IHdpZHRoLCBpbnQgaGVpZ2h0LCBjb25zdCBKU09OOjpPYmplY3QqIGNvbG9yLCBjb25zdCBKU09O
OjpPYmplY3QqIG91dGxpbmVDb2xvciwgY29uc3QgYm9vbCogdXNlUGFnZUNvb3JkaW5hdGVzKSBv
dmVycmlkZTsKLSAgICB2b2lkIGhpZ2hsaWdodFF1YWQoRXJyb3JTdHJpbmcmLCBjb25zdCBKU09O
OjpBcnJheSYgcXVhZCwgY29uc3QgSlNPTjo6T2JqZWN0KiBjb2xvciwgY29uc3QgSlNPTjo6T2Jq
ZWN0KiBvdXRsaW5lQ29sb3IsIGNvbnN0IGJvb2wqIHVzZVBhZ2VDb29yZGluYXRlcykgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCBoaWdobGlnaHRTZWxlY3RvcihFcnJvclN0cmluZyYsIGNvbnN0IEpTT046
Ok9iamVjdCYgaGlnaGxpZ2h0Q29uZmlnLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yU3RyaW5nLCBj
b25zdCBTdHJpbmcqIGZyYW1lSWQpIG92ZXJyaWRlOwotICAgIHZvaWQgaGlnaGxpZ2h0Tm9kZShF
cnJvclN0cmluZyYsIGNvbnN0IEpTT046Ok9iamVjdCYgaGlnaGxpZ2h0Q29uZmlnLCBjb25zdCBp
bnQqIG5vZGVJZCwgY29uc3QgU3RyaW5nKiBvYmplY3RJZCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBo
aWdobGlnaHROb2RlTGlzdChFcnJvclN0cmluZyYsIGNvbnN0IEpTT046OkFycmF5JiBub2RlSWRz
LCBjb25zdCBKU09OOjpPYmplY3QmIGhpZ2hsaWdodENvbmZpZykgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBoaWdobGlnaHRGcmFtZShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgZnJhbWVJZCwgY29u
c3QgSlNPTjo6T2JqZWN0KiBjb2xvciwgY29uc3QgSlNPTjo6T2JqZWN0KiBvdXRsaW5lQ29sb3Ip
IG92ZXJyaWRlOwotICAgIHZvaWQgbW92ZVRvKEVycm9yU3RyaW5nJiwgaW50IG5vZGVJZCwgaW50
IHRhcmdldE5vZGVJZCwgY29uc3QgaW50KiBhbmNob3JOb2RlSWQsIGludCogbmV3Tm9kZUlkKSBv
dmVycmlkZTsKLSAgICB2b2lkIHVuZG8oRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2b2lk
IHJlZG8oRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2b2lkIG1hcmtVbmRvYWJsZVN0YXRl
KEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBmb2N1cyhFcnJvclN0cmluZyYsIGlu
dCBub2RlSWQpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0SW5zcGVjdGVkTm9kZShFcnJvclN0cmlu
ZyYsIGludCBub2RlSWQpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0QWxsb3dFZGl0aW5nVXNlckFn
ZW50U2hhZG93VHJlZXMoRXJyb3JTdHJpbmcmLCBib29sIGFsbG93KSBmaW5hbDsKKyAgICBJbnNw
ZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6
Tm9kZUlkPiByZXF1ZXN0Tm9kZShjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpS
ZW1vdGVPYmplY3RJZCYpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8
SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQ+IHB1c2hOb2RlQnlQYXRoVG9Gcm9udGVu
ZChjb25zdCBTdHJpbmcmIHBhdGgpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3Ry
aW5nT3I8dm9pZD4gaGlkZUhpZ2hsaWdodCgpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8dm9pZD4gaGlnaGxpZ2h0UmVjdChpbnQgeCwgaW50IHksIGludCB3aWR0aCwg
aW50IGhlaWdodCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBjb2xvciwgUmVmUHRyPEpTT046Ok9i
amVjdD4mJiBvdXRsaW5lQ29sb3IsIE9wdGlvbmFsPGJvb2w+JiYgdXNlUGFnZUNvb3JkaW5hdGVz
KTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGhpZ2hsaWdo
dFF1YWQoUmVmPEpTT046OkFycmF5PiYmIHF1YWQsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgY29s
b3IsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgb3V0bGluZUNvbG9yLCBPcHRpb25hbDxib29sPiYm
IHVzZVBhZ2VDb29yZGluYXRlcyk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJp
bmdPcjx2b2lkPiBoaWdobGlnaHRTZWxlY3RvcihSZWY8SlNPTjo6T2JqZWN0PiYmIGhpZ2hsaWdo
dENvbmZpZywgY29uc3QgU3RyaW5nJiBzZWxlY3RvclN0cmluZywgY29uc3QgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6TmV0d29yazo6RnJhbWVJZCYpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8dm9pZD4gaGlnaGxpZ2h0Tm9kZShSZWY8SlNPTjo6T2JqZWN0PiYmIGhpZ2hs
aWdodENvbmZpZywgT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQ+JiYs
IGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdElkJik7Cisg
ICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBoaWdobGlnaHROb2Rl
TGlzdChSZWY8SlNPTjo6QXJyYXk+JiYgbm9kZUlkcywgUmVmPEpTT046Ok9iamVjdD4mJiBoaWdo
bGlnaHRDb25maWcpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9p
ZD4gaGlnaGxpZ2h0RnJhbWUoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6RnJh
bWVJZCYsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgY29sb3IsIFJlZlB0cjxKU09OOjpPYmplY3Q+
JiYgb3V0bGluZUNvbG9yKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09y
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkPiBtb3ZlVG8oSW5zcGVjdG9yOjpQcm90
b2NvbDo6RE9NOjpOb2RlSWQgbm9kZUlkLCBJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJ
ZCB0YXJnZXROb2RlSWQsIE9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlk
PiYmIGluc2VydEJlZm9yZU5vZGVJZCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JT
dHJpbmdPcjx2b2lkPiB1bmRvKCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJp
bmdPcjx2b2lkPiByZWRvKCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdP
cjx2b2lkPiBtYXJrVW5kb2FibGVTdGF0ZSgpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8dm9pZD4gZm9jdXMoSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQp
OworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc2V0SW5zcGVj
dGVkTm9kZShJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZCk7CisgICAgSW5zcGVjdG9y
OjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzZXRBbGxvd0VkaXRpbmdVc2VyQWdlbnRT
aGFkb3dUcmVlcyhib29sKTsKIAogICAgIC8vIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbgotICAg
IGludCBpZGVudGlmaWVyRm9yTm9kZShOb2RlJik7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6
RE9NOjpOb2RlSWQgaWRlbnRpZmllckZvck5vZGUoTm9kZSYpOwogICAgIHZvaWQgYWRkRXZlbnRM
aXN0ZW5lcnNUb05vZGUoTm9kZSYpOwogICAgIHZvaWQgZGlkSW5zZXJ0RE9NTm9kZShOb2RlJik7
CiAgICAgdm9pZCBkaWRSZW1vdmVET01Ob2RlKE5vZGUmKTsKQEAgLTE4NSwxMiArMTgzLDEyIEBA
IHB1YmxpYzoKIAogICAgIHZvaWQgc3R5bGVBdHRyaWJ1dGVJbnZhbGlkYXRlZChjb25zdCBWZWN0
b3I8RWxlbWVudCo+JiBlbGVtZW50cyk7CiAKLSAgICBpbnQgcHVzaE5vZGVUb0Zyb250ZW5kKE5v
ZGUqKTsKLSAgICBpbnQgcHVzaE5vZGVUb0Zyb250ZW5kKEVycm9yU3RyaW5nJiwgaW50IGRvY3Vt
ZW50Tm9kZUlkLCBOb2RlKik7Ci0gICAgaW50IHB1c2hOb2RlUGF0aFRvRnJvbnRlbmQoTm9kZSop
OwotICAgIGludCBwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKEVycm9yU3RyaW5nLCBOb2RlKik7Ci0g
ICAgTm9kZSogbm9kZUZvcklkKGludCBub2RlSWQpOwotICAgIGludCBib3VuZE5vZGVJZChjb25z
dCBOb2RlKik7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQgcHVzaE5vZGVU
b0Zyb250ZW5kKE5vZGUqKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZCBw
dXNoTm9kZVRvRnJvbnRlbmQoSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBJbnNw
ZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZCBkb2N1bWVudE5vZGVJZCwgTm9kZSopOworICAg
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkIHB1c2hOb2RlUGF0aFRvRnJvbnRlbmQo
Tm9kZSopOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkIHB1c2hOb2RlUGF0
aFRvRnJvbnRlbmQoSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmcsIE5vZGUqKTsKKyAg
ICBOb2RlKiBub2RlRm9ySWQoSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQpOworICAg
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkIGJvdW5kTm9kZUlkKGNvbnN0IE5vZGUq
KTsKIAogICAgIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmpl
Y3Q+IHJlc29sdmVOb2RlKE5vZGUqLCBjb25zdCBTdHJpbmcmIG9iamVjdEdyb3VwKTsKICAgICBi
b29sIGhhbmRsZU1vdXNlUHJlc3MoKTsKQEAgLTIwMiwxMiArMjAwLDEyIEBAIHB1YmxpYzoKICAg
ICBWZWN0b3I8RG9jdW1lbnQqPiBkb2N1bWVudHMoKTsKICAgICB2b2lkIHJlc2V0KCk7CiAKLSAg
ICBOb2RlKiBhc3NlcnROb2RlKEVycm9yU3RyaW5nJiwgaW50IG5vZGVJZCk7Ci0gICAgRWxlbWVu
dCogYXNzZXJ0RWxlbWVudChFcnJvclN0cmluZyYsIGludCBub2RlSWQpOwotICAgIERvY3VtZW50
KiBhc3NlcnREb2N1bWVudChFcnJvclN0cmluZyYsIGludCBub2RlSWQpOworICAgIE5vZGUqIGFz
c2VydE5vZGUoSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBJbnNwZWN0b3I6OlBy
b3RvY29sOjpET006Ok5vZGVJZCk7CisgICAgRWxlbWVudCogYXNzZXJ0RWxlbWVudChJbnNwZWN0
b3I6OlByb3RvY29sOjpFcnJvclN0cmluZyYsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9k
ZUlkKTsKKyAgICBEb2N1bWVudCogYXNzZXJ0RG9jdW1lbnQoSW5zcGVjdG9yOjpQcm90b2NvbDo6
RXJyb3JTdHJpbmcmLCBJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZCk7CiAKICAgICBS
ZWZQdHI8SlNDOjpCcmVha3BvaW50PiBicmVha3BvaW50Rm9yRXZlbnRMaXN0ZW5lcihFdmVudFRh
cmdldCYsIGNvbnN0IEF0b21TdHJpbmcmIGV2ZW50VHlwZSwgRXZlbnRMaXN0ZW5lciYsIGJvb2wg
Y2FwdHVyZSk7Ci0gICAgaW50IGlkRm9yRXZlbnRMaXN0ZW5lcihFdmVudFRhcmdldCYsIGNvbnN0
IEF0b21TdHJpbmcmIGV2ZW50VHlwZSwgRXZlbnRMaXN0ZW5lciYsIGJvb2wgY2FwdHVyZSk7Cisg
ICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpFdmVudExpc3RlbmVySWQgaWRGb3JFdmVudExp
c3RlbmVyKEV2ZW50VGFyZ2V0JiwgY29uc3QgQXRvbVN0cmluZyYgZXZlbnRUeXBlLCBFdmVudExp
c3RlbmVyJiwgYm9vbCBjYXB0dXJlKTsKIAogcHJpdmF0ZToKICNpZiBFTkFCTEUoVklERU8pCkBA
IC0yMTUsMzMgKzIxMywzMyBAQCBwcml2YXRlOgogI2VuZGlmCiAKICAgICB2b2lkIGhpZ2hsaWdo
dE1vdXNlZE92ZXJOb2RlKCk7Ci0gICAgdm9pZCBzZXRTZWFyY2hpbmdGb3JOb2RlKEVycm9yU3Ry
aW5nJiwgYm9vbCBlbmFibGVkLCBjb25zdCBKU09OOjpPYmplY3QqIGhpZ2hsaWdodENvbmZpZywg
Ym9vbCBzaG93UnVsZXJzKTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SGlnaGxpZ2h0Q29uZmlnPiBo
aWdobGlnaHRDb25maWdGcm9tSW5zcGVjdG9yT2JqZWN0KEVycm9yU3RyaW5nJiwgY29uc3QgSlNP
Tjo6T2JqZWN0KiBoaWdobGlnaHRJbnNwZWN0b3JPYmplY3QpOworICAgIHZvaWQgc2V0U2VhcmNo
aW5nRm9yTm9kZShJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZyYsIGJvb2wgZW5hYmxl
ZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBoaWdobGlnaHRDb25maWcsIGJvb2wgc2hvd1J1bGVy
cyk7CisgICAgc3RkOjp1bmlxdWVfcHRyPEhpZ2hsaWdodENvbmZpZz4gaGlnaGxpZ2h0Q29uZmln
RnJvbUluc3BlY3Rvck9iamVjdChJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZyYsIFJl
ZlB0cjxKU09OOjpPYmplY3Q+JiYgaGlnaGxpZ2h0SW5zcGVjdG9yT2JqZWN0KTsKIAogICAgIC8v
IE5vZGUtcmVsYXRlZCBtZXRob2RzLgotICAgIHR5cGVkZWYgSGFzaE1hcDxSZWZQdHI8Tm9kZT4s
IGludD4gTm9kZVRvSWRNYXA7Ci0gICAgaW50IGJpbmQoTm9kZSosIE5vZGVUb0lkTWFwKik7Cisg
ICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxOb2RlPiwgSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9N
OjpOb2RlSWQ+IE5vZGVUb0lkTWFwOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9k
ZUlkIGJpbmQoTm9kZSosIE5vZGVUb0lkTWFwKik7CiAgICAgdm9pZCB1bmJpbmQoTm9kZSosIE5v
ZGVUb0lkTWFwKik7CiAKLSAgICBOb2RlKiBhc3NlcnRFZGl0YWJsZU5vZGUoRXJyb3JTdHJpbmcm
LCBpbnQgbm9kZUlkKTsKLSAgICBFbGVtZW50KiBhc3NlcnRFZGl0YWJsZUVsZW1lbnQoRXJyb3JT
dHJpbmcmLCBpbnQgbm9kZUlkKTsKKyAgICBOb2RlKiBhc3NlcnRFZGl0YWJsZU5vZGUoSW5zcGVj
dG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5v
ZGVJZCk7CisgICAgRWxlbWVudCogYXNzZXJ0RWRpdGFibGVFbGVtZW50KEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkVycm9yU3RyaW5nJiwgSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQpOwog
Ci0gICAgdm9pZCBwdXNoQ2hpbGROb2Rlc1RvRnJvbnRlbmQoaW50IG5vZGVJZCwgaW50IGRlcHRo
ID0gMSk7CisgICAgdm9pZCBwdXNoQ2hpbGROb2Rlc1RvRnJvbnRlbmQoSW5zcGVjdG9yOjpQcm90
b2NvbDo6RE9NOjpOb2RlSWQsIGludCBkZXB0aCA9IDEpOwogCiAgICAgUmVmPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRPTTo6Tm9kZT4gYnVpbGRPYmplY3RGb3JOb2RlKE5vZGUqLCBpbnQgZGVwdGgs
IE5vZGVUb0lkTWFwKik7CiAgICAgUmVmPEpTT046OkFycmF5T2Y8U3RyaW5nPj4gYnVpbGRBcnJh
eUZvckVsZW1lbnRBdHRyaWJ1dGVzKEVsZW1lbnQqKTsKICAgICBSZWY8SlNPTjo6QXJyYXlPZjxJ
bnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGU+PiBidWlsZEFycmF5Rm9yQ29udGFpbmVyQ2hp
bGRyZW4oTm9kZSogY29udGFpbmVyLCBpbnQgZGVwdGgsIE5vZGVUb0lkTWFwKiBub2Rlc01hcCk7
CiAgICAgUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2Rl
Pj4gYnVpbGRBcnJheUZvclBzZXVkb0VsZW1lbnRzKGNvbnN0IEVsZW1lbnQmLCBOb2RlVG9JZE1h
cCogbm9kZXNNYXApOwotICAgIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkV2ZW50TGlz
dGVuZXI+IGJ1aWxkT2JqZWN0Rm9yRXZlbnRMaXN0ZW5lcihjb25zdCBSZWdpc3RlcmVkRXZlbnRM
aXN0ZW5lciYsIGludCBpZGVudGlmaWVyLCBFdmVudFRhcmdldCYsIGNvbnN0IEF0b21TdHJpbmcm
IGV2ZW50VHlwZSwgYm9vbCBkaXNhYmxlZCwgY29uc3QgUmVmUHRyPEpTQzo6QnJlYWtwb2ludD4m
KTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpBY2Nlc3NpYmlsaXR5UHJv
cGVydGllcz4gYnVpbGRPYmplY3RGb3JBY2Nlc3NpYmlsaXR5UHJvcGVydGllcyhOb2RlKik7Ci0g
ICAgdm9pZCBwcm9jZXNzQWNjZXNzaWJpbGl0eUNoaWxkcmVuKEFYQ29yZU9iamVjdCYsIEpTT046
OkFycmF5T2Y8aW50PiYpOworICAgIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkV2ZW50
TGlzdGVuZXI+IGJ1aWxkT2JqZWN0Rm9yRXZlbnRMaXN0ZW5lcihjb25zdCBSZWdpc3RlcmVkRXZl
bnRMaXN0ZW5lciYsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6RXZlbnRMaXN0ZW5lcklkIGlk
ZW50aWZpZXIsIEV2ZW50VGFyZ2V0JiwgY29uc3QgQXRvbVN0cmluZyYgZXZlbnRUeXBlLCBib29s
IGRpc2FibGVkLCBjb25zdCBSZWZQdHI8SlNDOjpCcmVha3BvaW50PiYpOworICAgIFJlZjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpET006OkFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzPiBidWlsZE9iamVj
dEZvckFjY2Vzc2liaWxpdHlQcm9wZXJ0aWVzKE5vZGUmKTsKKyAgICB2b2lkIHByb2Nlc3NBY2Nl
c3NpYmlsaXR5Q2hpbGRyZW4oQVhDb3JlT2JqZWN0JiwgSlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6
OlByb3RvY29sOjpET006Ok5vZGVJZD4mKTsKICAgICAKICAgICBOb2RlKiBub2RlRm9yUGF0aChj
b25zdCBTdHJpbmcmIHBhdGgpOwotICAgIE5vZGUqIG5vZGVGb3JPYmplY3RJZChjb25zdCBTdHJp
bmcmIG9iamVjdElkKTsKKyAgICBOb2RlKiBub2RlRm9yT2JqZWN0SWQoY29uc3QgSW5zcGVjdG9y
OjpQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0SWQmKTsKIAogICAgIHZvaWQgZGlzY2Fy
ZEJpbmRpbmdzKCk7CiAKLSAgICB2b2lkIGlubmVySGlnaGxpZ2h0UXVhZChzdGQ6OnVuaXF1ZV9w
dHI8RmxvYXRRdWFkPiwgY29uc3QgSlNPTjo6T2JqZWN0KiBjb2xvciwgY29uc3QgSlNPTjo6T2Jq
ZWN0KiBvdXRsaW5lQ29sb3IsIGNvbnN0IGJvb2wqIHVzZVBhZ2VDb29yZGluYXRlcyk7CisgICAg
dm9pZCBpbm5lckhpZ2hsaWdodFF1YWQoc3RkOjp1bmlxdWVfcHRyPEZsb2F0UXVhZD4sIFJlZlB0
cjxKU09OOjpPYmplY3Q+JiYgY29sb3IsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgb3V0bGluZUNv
bG9yLCBPcHRpb25hbDxib29sPiYmIHVzZVBhZ2VDb29yZGluYXRlcyk7CiAKICAgICBJbnNwZWN0
b3I6OkluamVjdGVkU2NyaXB0TWFuYWdlciYgbV9pbmplY3RlZFNjcmlwdE1hbmFnZXI7CiAgICAg
c3RkOjp1bmlxdWVfcHRyPEluc3BlY3Rvcjo6RE9NRnJvbnRlbmREaXNwYXRjaGVyPiBtX2Zyb250
ZW5kRGlzcGF0Y2hlcjsKQEAgLTI1MSwxMCArMjQ5LDEwIEBAIHByaXZhdGU6CiAgICAgTm9kZVRv
SWRNYXAgbV9kb2N1bWVudE5vZGVUb0lkTWFwOwogICAgIC8vIE93bnMgbm9kZSBtYXBwaW5ncyBm
b3IgZGFuZ2xpbmcgbm9kZXMuCiAgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxOb2RlVG9JZE1h
cD4+IG1fZGFuZ2xpbmdOb2RlVG9JZE1hcHM7Ci0gICAgSGFzaE1hcDxpbnQsIE5vZGUqPiBtX2lk
VG9Ob2RlOwotICAgIEhhc2hNYXA8aW50LCBOb2RlVG9JZE1hcCo+IG1faWRUb05vZGVzTWFwOwot
ICAgIEhhc2hTZXQ8aW50PiBtX2NoaWxkcmVuUmVxdWVzdGVkOwotICAgIGludCBtX2xhc3ROb2Rl
SWQgeyAxIH07CisgICAgSGFzaE1hcDxJbnNwZWN0b3I6OlByb3RvY29sOjpET006Ok5vZGVJZCwg
Tm9kZSo+IG1faWRUb05vZGU7CisgICAgSGFzaE1hcDxJbnNwZWN0b3I6OlByb3RvY29sOjpET006
Ok5vZGVJZCwgTm9kZVRvSWRNYXAqPiBtX2lkVG9Ob2Rlc01hcDsKKyAgICBIYXNoU2V0PEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkPiBtX2NoaWxkcmVuUmVxdWVzdGVkOworICAgIElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkIG1fbGFzdE5vZGVJZCB7IDEgfTsKICAgICBS
ZWZQdHI8RG9jdW1lbnQ+IG1fZG9jdW1lbnQ7CiAgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywg
VmVjdG9yPFJlZlB0cjxOb2RlPj4+IFNlYXJjaFJlc3VsdHM7CiAgICAgU2VhcmNoUmVzdWx0cyBt
X3NlYXJjaFJlc3VsdHM7CkBAIC0yODUsNyArMjgzLDcgQEAgcHJpdmF0ZToKICNlbmRpZgogCiAg
ICAgc3RydWN0IEluc3BlY3RvckV2ZW50TGlzdGVuZXIgewotICAgICAgICBpbnQgaWRlbnRpZmll
ciB7IDEgfTsKKyAgICAgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpFdmVudExpc3RlbmVy
SWQgaWRlbnRpZmllciB7IDEgfTsKICAgICAgICAgUmVmUHRyPEV2ZW50VGFyZ2V0PiBldmVudFRh
cmdldDsKICAgICAgICAgUmVmUHRyPEV2ZW50TGlzdGVuZXI+IGV2ZW50TGlzdGVuZXI7CiAgICAg
ICAgIEF0b21TdHJpbmcgZXZlbnRUeXBlOwpAQCAtMjk1LDcgKzI5Myw3IEBAIHByaXZhdGU6CiAK
ICAgICAgICAgSW5zcGVjdG9yRXZlbnRMaXN0ZW5lcigpIHsgfQogCi0gICAgICAgIEluc3BlY3Rv
ckV2ZW50TGlzdGVuZXIoaW50IGlkZW50aWZpZXIsIEV2ZW50VGFyZ2V0JiB0YXJnZXQsIGNvbnN0
IEF0b21TdHJpbmcmIHR5cGUsIEV2ZW50TGlzdGVuZXImIGxpc3RlbmVyLCBib29sIGNhcHR1cmUp
CisgICAgICAgIEluc3BlY3RvckV2ZW50TGlzdGVuZXIoSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9N
OjpFdmVudExpc3RlbmVySWQgaWRlbnRpZmllciwgRXZlbnRUYXJnZXQmIHRhcmdldCwgY29uc3Qg
QXRvbVN0cmluZyYgdHlwZSwgRXZlbnRMaXN0ZW5lciYgbGlzdGVuZXIsIGJvb2wgY2FwdHVyZSkK
ICAgICAgICAgICAgIDogaWRlbnRpZmllcihpZGVudGlmaWVyKQogICAgICAgICAgICAgLCBldmVu
dFRhcmdldCgmdGFyZ2V0KQogICAgICAgICAgICAgLCBldmVudExpc3RlbmVyKCZsaXN0ZW5lcikK
QEAgLTMyMSw4ICszMTksOCBAQCBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBFdmVudEZpcmVk
Q2FsbGJhY2s7CiAKICAgICBIYXNoU2V0PGNvbnN0IEV2ZW50Kj4gbV9kaXNwYXRjaGVkRXZlbnRz
OwotICAgIEhhc2hNYXA8aW50LCBJbnNwZWN0b3JFdmVudExpc3RlbmVyPiBtX2V2ZW50TGlzdGVu
ZXJFbnRyaWVzOwotICAgIGludCBtX2xhc3RFdmVudExpc3RlbmVySWQgeyAxIH07CisgICAgSGFz
aE1hcDxJbnNwZWN0b3I6OlByb3RvY29sOjpET006OkV2ZW50TGlzdGVuZXJJZCwgSW5zcGVjdG9y
RXZlbnRMaXN0ZW5lcj4gbV9ldmVudExpc3RlbmVyRW50cmllczsKKyAgICBJbnNwZWN0b3I6OlBy
b3RvY29sOjpET006OkV2ZW50TGlzdGVuZXJJZCBtX2xhc3RFdmVudExpc3RlbmVySWQgeyAxIH07
CiAKICAgICBib29sIG1fc2VhcmNoaW5nRm9yTm9kZSB7IGZhbHNlIH07CiAgICAgYm9vbCBtX3N1
cHByZXNzQXR0cmlidXRlTW9kaWZpZWRFdmVudCB7IGZhbHNlIH07CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01EZWJ1Z2dlckFn
ZW50LmNwcAppbmRleCAwNzlhMTE2ODZlNDk4Yjg0Nzk5NTU5Y2YzY2Q4YWYyZjdjMDkxODE3Li5j
MzJlNWEzOTE0ZTc5ZjMwYmMxNGU2OGRkNmNmYmQzMWIwMDU0OWRkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NRGVidWdn
ZXJBZ2VudC5jcHAKQEAgLTEyOCwxMDkgKzEyOCw5NCBAQCB2b2lkIEluc3BlY3RvckRPTURlYnVn
Z2VyQWdlbnQ6Om1haW5GcmFtZU5hdmlnYXRlZCgpCiAgICAgICAgIG1fcGF1c2VPbkFsbFRpbWVv
dXRzQnJlYWtwb2ludC0+cmVzZXRIaXRDb3VudCgpOwogfQogCi12b2lkIEluc3BlY3RvckRPTURl
YnVnZ2VyQWdlbnQ6OnNldEV2ZW50QnJlYWtwb2ludChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcs
IGNvbnN0IFN0cmluZyYgYnJlYWtwb2ludFR5cGVTdHJpbmcsIGNvbnN0IFN0cmluZyogZXZlbnRO
YW1lLCBjb25zdCBKU09OOjpPYmplY3QqIG9wdGlvbnNQYXlsb2FkKQorUHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudDo6c2V0RXZlbnRCcmVha3Bv
aW50KFByb3RvY29sOjpET01EZWJ1Z2dlcjo6RXZlbnRCcmVha3BvaW50VHlwZSBicmVha3BvaW50
VHlwZSwgY29uc3QgU3RyaW5nJiBldmVudE5hbWUsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgb3B0
aW9ucykKIHsKLSAgICBpZiAoYnJlYWtwb2ludFR5cGVTdHJpbmcuaXNFbXB0eSgpKSB7Ci0gICAg
ICAgIGVycm9yU3RyaW5nID0gImJyZWFrcG9pbnRUeXBlIGlzIGVtcHR5Il9zOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQorICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKIAot
ICAgIGF1dG8gYnJlYWtwb2ludFR5cGUgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpJbnNwZWN0b3JI
ZWxwZXJzOjpwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9N
RGVidWdnZXI6OkV2ZW50QnJlYWtwb2ludFR5cGU+KGJyZWFrcG9pbnRUeXBlU3RyaW5nKTsKLSAg
ICBpZiAoIWJyZWFrcG9pbnRUeXBlKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gbWFrZVN0cmlu
ZygiVW5rbm93biBicmVha3BvaW50VHlwZTogIl9zLCBicmVha3BvaW50VHlwZVN0cmluZyk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBhdXRvIGJyZWFrcG9pbnQgPSBJbnNwZWN0b3JE
ZWJ1Z2dlckFnZW50OjpkZWJ1Z2dlckJyZWFrcG9pbnRGcm9tUGF5bG9hZChlcnJvclN0cmluZywg
b3B0aW9uc1BheWxvYWQpOworICAgIGF1dG8gYnJlYWtwb2ludCA9IEluc3BlY3RvckRlYnVnZ2Vy
QWdlbnQ6OmRlYnVnZ2VyQnJlYWtwb2ludEZyb21QYXlsb2FkKGVycm9yU3RyaW5nLCBXVEZNb3Zl
KG9wdGlvbnMpKTsKICAgICBpZiAoIWJyZWFrcG9pbnQpCi0gICAgICAgIHJldHVybjsKKyAgICAg
ICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAotICAgIGlmIChldmVudE5h
bWUgJiYgIWV2ZW50TmFtZS0+aXNFbXB0eSgpKSB7Ci0gICAgICAgIGlmIChicmVha3BvaW50VHlw
ZS52YWx1ZSgpID09IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpFdmVudEJyZWFr
cG9pbnRUeXBlOjpMaXN0ZW5lcikgewotICAgICAgICAgICAgaWYgKCFtX2xpc3RlbmVyQnJlYWtw
b2ludHMuYWRkKCpldmVudE5hbWUsIGJyZWFrcG9pbnQucmVsZWFzZU5vbk51bGwoKSkpCi0gICAg
ICAgICAgICAgICAgZXJyb3JTdHJpbmcgPSAiQnJlYWtwb2ludCB3aXRoIGV2ZW50TmFtZSBhbHJl
YWR5IGV4aXN0cyJfczsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICBpZiAoIWV2ZW50TmFtZS5p
c0VtcHR5KCkpIHsKKyAgICAgICAgaWYgKGJyZWFrcG9pbnRUeXBlID09IFByb3RvY29sOjpET01E
ZWJ1Z2dlcjo6RXZlbnRCcmVha3BvaW50VHlwZTo6TGlzdGVuZXIpIHsKKyAgICAgICAgICAgIGlm
ICghbV9saXN0ZW5lckJyZWFrcG9pbnRzLmFkZChldmVudE5hbWUsIGJyZWFrcG9pbnQucmVsZWFz
ZU5vbk51bGwoKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJCcmVh
a3BvaW50IHdpdGggZXZlbnROYW1lIGFscmVhZHkgZXhpc3RzIl9zKTsKKyAgICAgICAgICAgIHJl
dHVybiB7IH07CiAgICAgICAgIH0KIAotICAgICAgICBlcnJvclN0cmluZyA9ICJVbmV4cGVjdGVk
IGV2ZW50TmFtZSJfczsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoIlVuZXhwZWN0ZWQgZXZlbnROYW1lIl9zKTsKICAgICB9CiAKLSAgICBzd2l0Y2ggKGJy
ZWFrcG9pbnRUeXBlLnZhbHVlKCkpIHsKLSAgICBjYXNlIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRP
TURlYnVnZ2VyOjpFdmVudEJyZWFrcG9pbnRUeXBlOjpBbmltYXRpb25GcmFtZToKLSAgICAgICAg
c2V0QW5pbWF0aW9uRnJhbWVCcmVha3BvaW50KGVycm9yU3RyaW5nLCBXVEZNb3ZlKGJyZWFrcG9p
bnQpKTsKLSAgICAgICAgYnJlYWs7CisgICAgc3dpdGNoIChicmVha3BvaW50VHlwZSkgeworICAg
IGNhc2UgUHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpFdmVudEJyZWFrcG9pbnRUeXBlOjpBbmltYXRp
b25GcmFtZToKKyAgICAgICAgaWYgKCFzZXRBbmltYXRpb25GcmFtZUJyZWFrcG9pbnQoZXJyb3JT
dHJpbmcsIFdURk1vdmUoYnJlYWtwb2ludCkpKQorICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4
cGVjdGVkKGVycm9yU3RyaW5nKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGNhc2UgSW5z
cGVjdG9yOjpQcm90b2NvbDo6RE9NRGVidWdnZXI6OkV2ZW50QnJlYWtwb2ludFR5cGU6OkludGVy
dmFsOgotICAgICAgICBpZiAoIW1fcGF1c2VPbkFsbEludGVydmFsc0JyZWFrcG9pbnQpCi0gICAg
ICAgICAgICBtX3BhdXNlT25BbGxJbnRlcnZhbHNCcmVha3BvaW50ID0gV1RGTW92ZShicmVha3Bv
aW50KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZXJyb3JTdHJpbmcgPSAiQnJlYWtwb2lu
dCBmb3IgSW50ZXJ2YWwgYWxyZWFkeSBleGlzdHMiX3M7Ci0gICAgICAgIGJyZWFrOworICAgIGNh
c2UgUHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpFdmVudEJyZWFrcG9pbnRUeXBlOjpJbnRlcnZhbDoK
KyAgICAgICAgaWYgKG1fcGF1c2VPbkFsbEludGVydmFsc0JyZWFrcG9pbnQpCisgICAgICAgICAg
ICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkJyZWFrcG9pbnQgZm9yIEludGVydmFsIGFscmVhZHkg
ZXhpc3RzIl9zKTsKKyAgICAgICAgbV9wYXVzZU9uQWxsSW50ZXJ2YWxzQnJlYWtwb2ludCA9IFdU
Rk1vdmUoYnJlYWtwb2ludCk7CisgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBjYXNlIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpFdmVudEJyZWFrcG9pbnRUeXBlOjpMaXN0ZW5l
cjoKLSAgICAgICAgaWYgKCFtX3BhdXNlT25BbGxMaXN0ZW5lcnNCcmVha3BvaW50KQotICAgICAg
ICAgICAgbV9wYXVzZU9uQWxsTGlzdGVuZXJzQnJlYWtwb2ludCA9IFdURk1vdmUoYnJlYWtwb2lu
dCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGVycm9yU3RyaW5nID0gIkJyZWFrcG9pbnQg
Zm9yIExpc3RlbmVyIGFscmVhZHkgZXhpc3RzIl9zOwotICAgICAgICBicmVhazsKKyAgICBjYXNl
IFByb3RvY29sOjpET01EZWJ1Z2dlcjo6RXZlbnRCcmVha3BvaW50VHlwZTo6TGlzdGVuZXI6Cisg
ICAgICAgIGlmIChtX3BhdXNlT25BbGxMaXN0ZW5lcnNCcmVha3BvaW50KQorICAgICAgICAgICAg
cmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJCcmVha3BvaW50IGZvciBMaXN0ZW5lciBhbHJlYWR5IGV4
aXN0cyJfcyk7CisgICAgICAgIG1fcGF1c2VPbkFsbExpc3RlbmVyc0JyZWFrcG9pbnQgPSBXVEZN
b3ZlKGJyZWFrcG9pbnQpOworICAgICAgICByZXR1cm4geyB9OwogCi0gICAgY2FzZSBJbnNwZWN0
b3I6OlByb3RvY29sOjpET01EZWJ1Z2dlcjo6RXZlbnRCcmVha3BvaW50VHlwZTo6VGltZW91dDoK
LSAgICAgICAgaWYgKCFtX3BhdXNlT25BbGxUaW1lb3V0c0JyZWFrcG9pbnQpCi0gICAgICAgICAg
ICBtX3BhdXNlT25BbGxUaW1lb3V0c0JyZWFrcG9pbnQgPSBXVEZNb3ZlKGJyZWFrcG9pbnQpOwot
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBlcnJvclN0cmluZyA9ICJCcmVha3BvaW50IGZvciBU
aW1lb3V0IGFscmVhZHkgZXhpc3RzIl9zOwotICAgICAgICBicmVhazsKKyAgICBjYXNlIFByb3Rv
Y29sOjpET01EZWJ1Z2dlcjo6RXZlbnRCcmVha3BvaW50VHlwZTo6VGltZW91dDoKKyAgICAgICAg
aWYgKG1fcGF1c2VPbkFsbFRpbWVvdXRzQnJlYWtwb2ludCkKKyAgICAgICAgICAgIHJldHVybiBt
YWtlVW5leHBlY3RlZCgiQnJlYWtwb2ludCBmb3IgVGltZW91dCBhbHJlYWR5IGV4aXN0cyJfcyk7
CisgICAgICAgIG1fcGF1c2VPbkFsbFRpbWVvdXRzQnJlYWtwb2ludCA9IFdURk1vdmUoYnJlYWtw
b2ludCk7CisgICAgICAgIHJldHVybiB7IH07CiAgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJOb3Qgc3VwcG9ydGVkIik7CiB9CiAK
LXZvaWQgSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudDo6cmVtb3ZlRXZlbnRCcmVha3BvaW50KEVy
cm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBicmVha3BvaW50VHlwZVN0cmlu
ZywgY29uc3QgU3RyaW5nKiBldmVudE5hbWUpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lk
PiBJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50OjpyZW1vdmVFdmVudEJyZWFrcG9pbnQoUHJvdG9j
b2w6OkRPTURlYnVnZ2VyOjpFdmVudEJyZWFrcG9pbnRUeXBlIGJyZWFrcG9pbnRUeXBlLCBjb25z
dCBTdHJpbmcmIGV2ZW50TmFtZSkKIHsKLSAgICBpZiAoYnJlYWtwb2ludFR5cGVTdHJpbmcuaXNF
bXB0eSgpKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gImJyZWFrcG9pbnRUeXBlIGlzIGVtcHR5
Il9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBl
cnJvclN0cmluZzsKIAotICAgIGF1dG8gYnJlYWtwb2ludFR5cGUgPSBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpJbnNwZWN0b3JIZWxwZXJzOjpwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9y
OjpQcm90b2NvbDo6RE9NRGVidWdnZXI6OkV2ZW50QnJlYWtwb2ludFR5cGU+KGJyZWFrcG9pbnRU
eXBlU3RyaW5nKTsKLSAgICBpZiAoIWJyZWFrcG9pbnRUeXBlKSB7Ci0gICAgICAgIGVycm9yU3Ry
aW5nID0gbWFrZVN0cmluZygiVW5rbm93biBicmVha3BvaW50VHlwZTogIl9zLCBicmVha3BvaW50
VHlwZVN0cmluZyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoZXZlbnROYW1l
ICYmICFldmVudE5hbWUtPmlzRW1wdHkoKSkgewotICAgICAgICBpZiAoYnJlYWtwb2ludFR5cGUu
dmFsdWUoKSA9PSBJbnNwZWN0b3I6OlByb3RvY29sOjpET01EZWJ1Z2dlcjo6RXZlbnRCcmVha3Bv
aW50VHlwZTo6TGlzdGVuZXIpIHsKLSAgICAgICAgICAgIGlmICghbV9saXN0ZW5lckJyZWFrcG9p
bnRzLnJlbW92ZSgqZXZlbnROYW1lKSkKLSAgICAgICAgICAgICAgICBlcnJvclN0cmluZyA9ICJC
cmVha3BvaW50IGZvciBnaXZlbiBldmVudE5hbWUgbWlzc2luZyJfczsKLSAgICAgICAgICAgIHJl
dHVybjsKKyAgICBpZiAoIWV2ZW50TmFtZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgaWYgKGJyZWFr
cG9pbnRUeXBlID09IFByb3RvY29sOjpET01EZWJ1Z2dlcjo6RXZlbnRCcmVha3BvaW50VHlwZTo6
TGlzdGVuZXIpIHsKKyAgICAgICAgICAgIGlmICghbV9saXN0ZW5lckJyZWFrcG9pbnRzLnJlbW92
ZShldmVudE5hbWUpKQorICAgICAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiQnJl
YWtwb2ludCBmb3IgZ2l2ZW4gZXZlbnROYW1lIG1pc3NpbmciX3MpOworICAgICAgICAgICAgcmV0
dXJuIHsgfTsKICAgICAgICAgfQogCi0gICAgICAgIGVycm9yU3RyaW5nID0gIlVuZXhwZWN0ZWQg
ZXZlbnROYW1lIl9zOwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBl
Y3RlZCgiVW5leHBlY3RlZCBldmVudE5hbWUiX3MpOwogICAgIH0KIAotICAgIHN3aXRjaCAoYnJl
YWtwb2ludFR5cGUudmFsdWUoKSkgewotICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9N
RGVidWdnZXI6OkV2ZW50QnJlYWtwb2ludFR5cGU6OkFuaW1hdGlvbkZyYW1lOgotICAgICAgICBz
ZXRBbmltYXRpb25GcmFtZUJyZWFrcG9pbnQoZXJyb3JTdHJpbmcsIG51bGxwdHIpOwotICAgICAg
ICBicmVhazsKKyAgICBzd2l0Y2ggKGJyZWFrcG9pbnRUeXBlKSB7CisgICAgY2FzZSBQcm90b2Nv
bDo6RE9NRGVidWdnZXI6OkV2ZW50QnJlYWtwb2ludFR5cGU6OkFuaW1hdGlvbkZyYW1lOgorICAg
ICAgICBpZiAoIXNldEFuaW1hdGlvbkZyYW1lQnJlYWtwb2ludChlcnJvclN0cmluZywgbnVsbHB0
cikpCisgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOworICAg
ICAgICByZXR1cm4geyB9OwogCi0gICAgY2FzZSBJbnNwZWN0b3I6OlByb3RvY29sOjpET01EZWJ1
Z2dlcjo6RXZlbnRCcmVha3BvaW50VHlwZTo6SW50ZXJ2YWw6CisgICAgY2FzZSBQcm90b2NvbDo6
RE9NRGVidWdnZXI6OkV2ZW50QnJlYWtwb2ludFR5cGU6OkludGVydmFsOgogICAgICAgICBpZiAo
IW1fcGF1c2VPbkFsbEludGVydmFsc0JyZWFrcG9pbnQpCi0gICAgICAgICAgICBlcnJvclN0cmlu
ZyA9ICJCcmVha3BvaW50IGZvciBJbnRlcnZhbHMgbWlzc2luZyJfczsKKyAgICAgICAgICAgIHJl
dHVybiBtYWtlVW5leHBlY3RlZCgiQnJlYWtwb2ludCBmb3IgSW50ZXJ2YWxzIG1pc3NpbmciX3Mp
OwogICAgICAgICBtX3BhdXNlT25BbGxJbnRlcnZhbHNCcmVha3BvaW50ID0gbnVsbHB0cjsKLSAg
ICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBjYXNlIEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpFdmVudEJyZWFrcG9pbnRUeXBlOjpMaXN0ZW5lcjoKKyAg
ICBjYXNlIFByb3RvY29sOjpET01EZWJ1Z2dlcjo6RXZlbnRCcmVha3BvaW50VHlwZTo6TGlzdGVu
ZXI6CiAgICAgICAgIGlmICghbV9wYXVzZU9uQWxsTGlzdGVuZXJzQnJlYWtwb2ludCkKLSAgICAg
ICAgICAgIGVycm9yU3RyaW5nID0gIkJyZWFrcG9pbnQgZm9yIExpc3RlbmVycyBtaXNzaW5nIl9z
OworICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJCcmVha3BvaW50IGZvciBMaXN0
ZW5lcnMgbWlzc2luZyJfcyk7CiAgICAgICAgIG1fcGF1c2VPbkFsbExpc3RlbmVyc0JyZWFrcG9p
bnQgPSBudWxscHRyOwotICAgICAgICBicmVhazsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAotICAg
IGNhc2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NRGVidWdnZXI6OkV2ZW50QnJlYWtwb2ludFR5
cGU6OlRpbWVvdXQ6CisgICAgY2FzZSBQcm90b2NvbDo6RE9NRGVidWdnZXI6OkV2ZW50QnJlYWtw
b2ludFR5cGU6OlRpbWVvdXQ6CiAgICAgICAgIGlmICghbV9wYXVzZU9uQWxsVGltZW91dHNCcmVh
a3BvaW50KQotICAgICAgICAgICAgZXJyb3JTdHJpbmcgPSAiQnJlYWtwb2ludCBmb3IgVGltZW91
dHMgbWlzc2luZyJfczsKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiQnJlYWtw
b2ludCBmb3IgVGltZW91dHMgbWlzc2luZyJfcyk7CiAgICAgICAgIG1fcGF1c2VPbkFsbFRpbWVv
dXRzQnJlYWtwb2ludCA9IG51bGxwdHI7Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4g
eyB9OwogICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBtYWtl
VW5leHBlY3RlZCgiTm90IHN1cHBvcnRlZCIpOwogfQogCiB2b2lkIEluc3BlY3RvckRPTURlYnVn
Z2VyQWdlbnQ6OndpbGxIYW5kbGVFdmVudChFdmVudCYgZXZlbnQsIGNvbnN0IFJlZ2lzdGVyZWRF
dmVudExpc3RlbmVyJiByZWdpc3RlcmVkRXZlbnRMaXN0ZW5lcikKQEAgLTMyOSw0NSArMzE0LDUw
IEBAIHZvaWQgSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudDo6ZGlkRmlyZVRpbWVyKGJvb2wgb25l
U2hvdCkKICAgICBtX2RlYnVnZ2VyQWdlbnQtPmNhbmNlbFBhdXNlRm9yU3BlY2lhbEJyZWFrcG9p
bnQoKmJyZWFrcG9pbnQpOwogfQogCi12b2lkIEluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQ6OnNl
dFVSTEJyZWFrcG9pbnQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHVy
bCwgY29uc3QgYm9vbCogb3B0aW9uYWxJc1JlZ2V4LCBjb25zdCBKU09OOjpPYmplY3QqIG9wdGlv
bnNQYXlsb2FkKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yRE9NRGVi
dWdnZXJBZ2VudDo6c2V0VVJMQnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHVybCwgT3B0aW9uYWw8
Ym9vbD4mJiBpc1JlZ2V4LCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIG9wdGlvbnMpCiB7Ci0gICAg
YXV0byBicmVha3BvaW50ID0gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGVidWdnZXJCcmVha3Bv
aW50RnJvbVBheWxvYWQoZXJyb3JTdHJpbmcsIG9wdGlvbnNQYXlsb2FkKTsKKyAgICBQcm90b2Nv
bDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKKyAgICBhdXRvIGJyZWFrcG9pbnQgPSBJbnNw
ZWN0b3JEZWJ1Z2dlckFnZW50OjpkZWJ1Z2dlckJyZWFrcG9pbnRGcm9tUGF5bG9hZChlcnJvclN0
cmluZywgV1RGTW92ZShvcHRpb25zKSk7CiAgICAgaWYgKCFicmVha3BvaW50KQotICAgICAgICBy
ZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAg
ICBpZiAodXJsLmlzRW1wdHkoKSkgewotICAgICAgICBpZiAoIW1fcGF1c2VPbkFsbFVSTHNCcmVh
a3BvaW50KQotICAgICAgICAgICAgbV9wYXVzZU9uQWxsVVJMc0JyZWFrcG9pbnQgPSBXVEZNb3Zl
KGJyZWFrcG9pbnQpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBlcnJvclN0cmluZyA9ICJC
cmVha3BvaW50IGZvciBhbGwgVVJMcyBhbHJlYWR5IGV4aXN0cyJfczsKLSAgICAgICAgcmV0dXJu
OworICAgICAgICBpZiAobV9wYXVzZU9uQWxsVVJMc0JyZWFrcG9pbnQpCisgICAgICAgICAgICBy
ZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkJyZWFrcG9pbnQgZm9yIGFsbCBVUkxzIGFscmVhZHkgZXhp
c3RzIl9zKTsKKyAgICAgICAgbV9wYXVzZU9uQWxsVVJMc0JyZWFrcG9pbnQgPSBXVEZNb3ZlKGJy
ZWFrcG9pbnQpOworICAgICAgICByZXR1cm4geyB9OwogICAgIH0KIAotICAgIGlmIChvcHRpb25h
bElzUmVnZXggJiYgKm9wdGlvbmFsSXNSZWdleCkgeworICAgIGlmIChpc1JlZ2V4ICYmICppc1Jl
Z2V4KSB7CiAgICAgICAgIGlmICghbV91cmxSZWdleEJyZWFrcG9pbnRzLmFkZCh1cmwsIGJyZWFr
cG9pbnQucmVsZWFzZU5vbk51bGwoKSkpCi0gICAgICAgICAgICBlcnJvclN0cmluZyA9ICJCcmVh
a3BvaW50IGZvciBnaXZlbiByZWdleCBhbHJlYWR5IGV4aXN0cyJfczsKKyAgICAgICAgICAgIHJl
dHVybiBtYWtlVW5leHBlY3RlZCgiQnJlYWtwb2ludCBmb3IgZ2l2ZW4gcmVnZXggYWxyZWFkeSBl
eGlzdHMiX3MpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmICghbV91cmxUZXh0QnJlYWtwb2lu
dHMuYWRkKHVybCwgYnJlYWtwb2ludC5yZWxlYXNlTm9uTnVsbCgpKSkKLSAgICAgICAgICAgIGVy
cm9yU3RyaW5nID0gIkJyZWFrcG9pbnQgZm9yIGdpdmVuIFVSTCBhbHJlYWR5IGV4aXN0cyJfczsK
KyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiQnJlYWtwb2ludCBmb3IgZ2l2ZW4g
VVJMIGFscmVhZHkgZXhpc3RzIl9zKTsKICAgICB9CisKKyAgICByZXR1cm4geyB9OwogfQogCi12
b2lkIEluc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQ6OnJlbW92ZVVSTEJyZWFrcG9pbnQoRXJyb3JT
dHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgYm9vbCogb3B0aW9u
YWxJc1JlZ2V4KQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yRE9NRGVi
dWdnZXJBZ2VudDo6cmVtb3ZlVVJMQnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHVybCwgT3B0aW9u
YWw8Ym9vbD4mJiBpc1JlZ2V4KQogewogICAgIGlmICh1cmwuaXNFbXB0eSgpKSB7CiAgICAgICAg
IGlmICghbV9wYXVzZU9uQWxsVVJMc0JyZWFrcG9pbnQpCi0gICAgICAgICAgICBlcnJvclN0cmlu
ZyA9ICJCcmVha3BvaW50IGZvciBhbGwgVVJMcyBtaXNzaW5nIl9zOworICAgICAgICAgICAgcmV0
dXJuIG1ha2VVbmV4cGVjdGVkKCJCcmVha3BvaW50IGZvciBhbGwgVVJMcyBtaXNzaW5nIl9zKTsK
ICAgICAgICAgbV9wYXVzZU9uQWxsVVJMc0JyZWFrcG9pbnQgPSBudWxscHRyOwotICAgICAgICBy
ZXR1cm47CisgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCi0gICAgaWYgKG9wdGlvbmFsSXNS
ZWdleCAmJiAqb3B0aW9uYWxJc1JlZ2V4KSB7CisgICAgaWYgKGlzUmVnZXggJiYgKmlzUmVnZXgp
IHsKICAgICAgICAgaWYgKCFtX3VybFJlZ2V4QnJlYWtwb2ludHMucmVtb3ZlKHVybCkpCi0gICAg
ICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIGJyZWFrcG9pbnQgZm9yIGdpdmVuIHJlZ2V4
Il9zOworICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJNaXNzaW5nIGJyZWFrcG9p
bnQgZm9yIGdpdmVuIHJlZ2V4Il9zKTsKICAgICB9IGVsc2UgewogICAgICAgICBpZiAoIW1fdXJs
VGV4dEJyZWFrcG9pbnRzLnJlbW92ZSh1cmwpKQotICAgICAgICAgICAgZXJyb3JTdHJpbmcgPSAi
TWlzc2luZyBicmVha3BvaW50IGZvciBnaXZlbiBVUkwiX3M7CisgICAgICAgICAgICByZXR1cm4g
bWFrZVVuZXhwZWN0ZWQoIk1pc3NpbmcgYnJlYWtwb2ludCBmb3IgZ2l2ZW4gVVJMIl9zKTsKICAg
ICB9CisKKyAgICByZXR1cm4geyB9OwogfQogCiB2b2lkIEluc3BlY3RvckRPTURlYnVnZ2VyQWdl
bnQ6OmJyZWFrT25VUkxJZk5lZWRlZChjb25zdCBTdHJpbmcmIHVybCwgVVJMQnJlYWtwb2ludFNv
dXJjZSBzb3VyY2UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRz
L0luc3BlY3RvckRPTURlYnVnZ2VyQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9h
Z2VudHMvSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudC5oCmluZGV4IDRlYzBmMDhjOWI1YTFjMjdk
ZDQzZWE4NTQwNGVjZTYyYzkzNmYxZmEuLjg5NjA5ZWNmYzBkODc5Njc0MWQ0NTVhMDNlN2RhYzA5
MWU4ZGNjOGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5z
cGVjdG9yRE9NRGVidWdnZXJBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9h
Z2VudHMvSW5zcGVjdG9yRE9NRGVidWdnZXJBZ2VudC5oCkBAIC01MCw4ICs1MCw2IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIGNsYXNzIEV2ZW50OwogY2xhc3MgUmVnaXN0ZXJlZEV2ZW50TGlzdGVu
ZXI7CiAKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCiBjbGFzcyBJbnNwZWN0b3JET01E
ZWJ1Z2dlckFnZW50IDogcHVibGljIEluc3BlY3RvckFnZW50QmFzZSwgcHVibGljIEluc3BlY3Rv
cjo6RE9NRGVidWdnZXJCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIsIHB1YmxpYyBJbnNwZWN0b3I6
Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6Okxpc3RlbmVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50KTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKQEAgLTY1LDEwICs2MywxMCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGVuYWJs
ZWQoKSBjb25zdDsKIAogICAgIC8vIERPTURlYnVnZ2VyQmFja2VuZERpc3BhdGNoZXJIYW5kbGVy
Ci0gICAgdm9pZCBzZXRVUkxCcmVha3BvaW50KEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiB1
cmwsIGNvbnN0IGJvb2wqIGlzUmVnZXgsIGNvbnN0IEpTT046Ok9iamVjdCogb3B0aW9ucykgZmlu
YWw7Ci0gICAgdm9pZCByZW1vdmVVUkxCcmVha3BvaW50KEVycm9yU3RyaW5nJiwgY29uc3QgU3Ry
aW5nJiB1cmwsIGNvbnN0IGJvb2wqIGlzUmVnZXgpIGZpbmFsOwotICAgIHZvaWQgc2V0RXZlbnRC
cmVha3BvaW50KEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBicmVha3BvaW50VHlwZSwgY29u
c3QgU3RyaW5nKiBldmVudE5hbWUsIGNvbnN0IEpTT046Ok9iamVjdCogb3B0aW9ucykgZmluYWw7
Ci0gICAgdm9pZCByZW1vdmVFdmVudEJyZWFrcG9pbnQoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJp
bmcmIGJyZWFrcG9pbnRUeXBlLCBjb25zdCBTdHJpbmcqIGV2ZW50TmFtZSkgZmluYWw7CisgICAg
SW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzZXRVUkxCcmVha3BvaW50
KGNvbnN0IFN0cmluZyYgdXJsLCBPcHRpb25hbDxib29sPiYmIGlzUmVnZXgsIFJlZlB0cjxKU09O
OjpPYmplY3Q+JiYgb3B0aW9ucykgZmluYWw7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJy
b3JTdHJpbmdPcjx2b2lkPiByZW1vdmVVUkxCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgdXJsLCBP
cHRpb25hbDxib29sPiYmIGlzUmVnZXgpIGZpbmFsOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8dm9pZD4gc2V0RXZlbnRCcmVha3BvaW50KEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRPTURlYnVnZ2VyOjpFdmVudEJyZWFrcG9pbnRUeXBlLCBjb25zdCBTdHJpbmcmIGV2ZW50
TmFtZSwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBvcHRpb25zKSBmaW5hbDsKKyAgICBJbnNwZWN0
b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHJlbW92ZUV2ZW50QnJlYWtwb2ludChJ
bnNwZWN0b3I6OlByb3RvY29sOjpET01EZWJ1Z2dlcjo6RXZlbnRCcmVha3BvaW50VHlwZSwgY29u
c3QgU3RyaW5nJiBldmVudE5hbWUpIGZpbmFsOwogCiAgICAgLy8gSW5zcGVjdG9yRGVidWdnZXJB
Z2VudDo6TGlzdGVuZXIKICAgICB2b2lkIGRlYnVnZ2VyV2FzRW5hYmxlZCgpIG92ZXJyaWRlOwpA
QCAtODgsNyArODYsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIGVuYWJsZSgpOwog
ICAgIHZpcnR1YWwgdm9pZCBkaXNhYmxlKCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgc2V0QW5pbWF0
aW9uRnJhbWVCcmVha3BvaW50KEVycm9yU3RyaW5nJiwgUmVmUHRyPEpTQzo6QnJlYWtwb2ludD4m
JikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBzZXRBbmltYXRpb25GcmFtZUJyZWFrcG9pbnQoSW5z
cGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBSZWZQdHI8SlNDOjpCcmVha3BvaW50PiYm
KSA9IDA7CiAKICAgICBJbnNwZWN0b3I6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQqIG1fZGVidWdn
ZXJBZ2VudCB7IG51bGxwdHIgfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2FnZW50cy9JbnNwZWN0b3JET01TdG9yYWdlQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01TdG9yYWdlQWdlbnQuY3BwCmluZGV4IGU1OTFl
OTE2OWRmMzA0NTQ1NjIwYjU0MDMyYjYyZmEyYmFkZWNiNmUuLjAzYTdmZDA4ZDIwNTdjMjJjYWNk
Y2Y4NTA1OGYxZTRkZjA0ZGQ3ZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9hZ2VudHMvSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTVN0b3JhZ2VBZ2VudC5jcHAKQEAgLTcwLDQx
ICs3MCwzOSBAQCB2b2lkIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6ZGlkQ3JlYXRlRnJvbnRl
bmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRSbwogCiB2b2lkIEluc3BlY3RvckRPTVN0
b3JhZ2VBZ2VudDo6d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNj
b25uZWN0UmVhc29uKQogewotICAgIEVycm9yU3RyaW5nIGlnbm9yZWQ7Ci0gICAgZGlzYWJsZShp
Z25vcmVkKTsKKyAgICBkaXNhYmxlKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NU3RvcmFnZUFn
ZW50OjplbmFibGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nKQorUHJvdG9jb2w6OkVycm9yU3Ry
aW5nT3I8dm9pZD4gSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjplbmFibGUoKQogewotICAgIGlm
IChtX2luc3RydW1lbnRpbmdBZ2VudHMuZW5hYmxlZERPTVN0b3JhZ2VBZ2VudCgpID09IHRoaXMp
IHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiRE9NU3RvcmFnZSBkb21haW4gYWxyZWFkeSBlbmFi
bGVkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmIChtX2luc3RydW1lbnRpbmdB
Z2VudHMuZW5hYmxlZERPTVN0b3JhZ2VBZ2VudCgpID09IHRoaXMpCisgICAgICAgIHJldHVybiBt
YWtlVW5leHBlY3RlZCgiRE9NU3RvcmFnZSBkb21haW4gYWxyZWFkeSBlbmFibGVkIl9zKTsKIAog
ICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy5zZXRFbmFibGVkRE9NU3RvcmFnZUFnZW50KHRoaXMp
OworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6
OmRpc2FibGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nKQorUHJvdG9jb2w6OkVycm9yU3RyaW5n
T3I8dm9pZD4gSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjpkaXNhYmxlKCkKIHsKLSAgICBpZiAo
bV9pbnN0cnVtZW50aW5nQWdlbnRzLmVuYWJsZWRET01TdG9yYWdlQWdlbnQoKSAhPSB0aGlzKSB7
Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIkRPTVN0b3JhZ2UgZG9tYWluIGFscmVhZHkgZGlzYWJs
ZWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKG1faW5zdHJ1bWVudGluZ0Fn
ZW50cy5lbmFibGVkRE9NU3RvcmFnZUFnZW50KCkgIT0gdGhpcykKKyAgICAgICAgcmV0dXJuIG1h
a2VVbmV4cGVjdGVkKCJET01TdG9yYWdlIGRvbWFpbiBhbHJlYWR5IGRpc2FibGVkIl9zKTsKIAog
ICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy5zZXRFbmFibGVkRE9NU3RvcmFnZUFnZW50KG51bGxw
dHIpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01TdG9yYWdlQWdl
bnQ6OmdldERPTVN0b3JhZ2VJdGVtcyhFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IEpT
T046Ok9iamVjdCYgc3RvcmFnZUlkLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxKU09OOjpBcnJheU9m
PFN0cmluZz4+PiYgaXRlbXMpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SlNPTjo6QXJy
YXlPZjxQcm90b2NvbDo6RE9NU3RvcmFnZTo6SXRlbT4+PiBJbnNwZWN0b3JET01TdG9yYWdlQWdl
bnQ6OmdldERPTVN0b3JhZ2VJdGVtcyhSZWY8SlNPTjo6T2JqZWN0PiYmIHN0b3JhZ2VJZCkKIHsK
KyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7CisKICAgICBGcmFtZSogZnJh
bWU7Ci0gICAgUmVmUHRyPFN0b3JhZ2VBcmVhPiBzdG9yYWdlQXJlYSA9IGZpbmRTdG9yYWdlQXJl
YShlcnJvclN0cmluZywgc3RvcmFnZUlkLCBmcmFtZSk7Ci0gICAgaWYgKCFzdG9yYWdlQXJlYSkg
ewotICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIHN0b3JhZ2UgZm9yIGdpdmVuIHN0b3Jh
Z2VJZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBSZWZQdHI8U3RvcmFnZUFyZWE+
IHN0b3JhZ2VBcmVhID0gZmluZFN0b3JhZ2VBcmVhKGVycm9yU3RyaW5nLCBXVEZNb3ZlKHN0b3Jh
Z2VJZCksIGZyYW1lKTsKKyAgICBpZiAoIXN0b3JhZ2VBcmVhKQorICAgICAgICByZXR1cm4gbWFr
ZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCiAgICAgYXV0byBzdG9yYWdlSXRlbXMgPSBKU09O
OjpBcnJheU9mPEpTT046OkFycmF5T2Y8U3RyaW5nPj46OmNyZWF0ZSgpOwotCiAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHN0b3JhZ2VBcmVhLT5sZW5ndGgoKTsgKytpKSB7CiAgICAgICAg
IFN0cmluZyBrZXkgPSBzdG9yYWdlQXJlYS0+a2V5KGkpOwogICAgICAgICBTdHJpbmcgdmFsdWUg
PSBzdG9yYWdlQXJlYS0+aXRlbShrZXkpOwpAQCAtMTE0LDQ3ICsxMTIsNTIgQEAgdm9pZCBJbnNw
ZWN0b3JET01TdG9yYWdlQWdlbnQ6OmdldERPTVN0b3JhZ2VJdGVtcyhFcnJvclN0cmluZyYgZXJy
b3JTdHJpbmcsIGNvbnMKICAgICAgICAgZW50cnktPmFkZEl0ZW0odmFsdWUpOwogICAgICAgICBz
dG9yYWdlSXRlbXMtPmFkZEl0ZW0oV1RGTW92ZShlbnRyeSkpOwogICAgIH0KLQotICAgIGl0ZW1z
ID0gV1RGTW92ZShzdG9yYWdlSXRlbXMpOworICAgIHJldHVybiBXVEZNb3ZlKHN0b3JhZ2VJdGVt
cyk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjpzZXRET01TdG9yYWdlSXRl
bShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IEpTT046Ok9iamVjdCYgc3RvcmFnZUlk
LCBjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKK1Byb3RvY29sOjpFcnJv
clN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6c2V0RE9NU3RvcmFnZUl0
ZW0oUmVmPEpTT046Ok9iamVjdD4mJiBzdG9yYWdlSWQsIGNvbnN0IFN0cmluZyYga2V5LCBjb25z
dCBTdHJpbmcmIHZhbHVlKQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmlu
ZzsKKwogICAgIEZyYW1lKiBmcmFtZTsKLSAgICBSZWZQdHI8U3RvcmFnZUFyZWE+IHN0b3JhZ2VB
cmVhID0gZmluZFN0b3JhZ2VBcmVhKGVycm9yU3RyaW5nLCBzdG9yYWdlSWQsIGZyYW1lKTsKLSAg
ICBpZiAoIXN0b3JhZ2VBcmVhKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIk1pc3Npbmcgc3Rv
cmFnZSBmb3IgZ2l2ZW4gc3RvcmFnZUlkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAg
IFJlZlB0cjxTdG9yYWdlQXJlYT4gc3RvcmFnZUFyZWEgPSBmaW5kU3RvcmFnZUFyZWEoZXJyb3JT
dHJpbmcsIFdURk1vdmUoc3RvcmFnZUlkKSwgZnJhbWUpOworICAgIGlmICghc3RvcmFnZUFyZWEp
CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKICAgICBib29s
IHF1b3RhRXhjZXB0aW9uID0gZmFsc2U7CiAgICAgc3RvcmFnZUFyZWEtPnNldEl0ZW0oZnJhbWUs
IGtleSwgdmFsdWUsIHF1b3RhRXhjZXB0aW9uKTsKICAgICBpZiAocXVvdGFFeGNlcHRpb24pCi0g
ICAgICAgIGVycm9yU3RyaW5nID0gRE9NRXhjZXB0aW9uOjpuYW1lKFF1b3RhRXhjZWVkZWRFcnJv
cik7CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChET01FeGNlcHRpb246Om5hbWUoUXVv
dGFFeGNlZWRlZEVycm9yKSk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3Rv
ckRPTVN0b3JhZ2VBZ2VudDo6cmVtb3ZlRE9NU3RvcmFnZUl0ZW0oRXJyb3JTdHJpbmcmIGVycm9y
U3RyaW5nLCBjb25zdCBKU09OOjpPYmplY3QmIHN0b3JhZ2VJZCwgY29uc3QgU3RyaW5nJiBrZXkp
CitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6
OnJlbW92ZURPTVN0b3JhZ2VJdGVtKFJlZjxKU09OOjpPYmplY3Q+JiYgc3RvcmFnZUlkLCBjb25z
dCBTdHJpbmcmIGtleSkKIHsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJpbmc7
CisKICAgICBGcmFtZSogZnJhbWU7Ci0gICAgUmVmUHRyPFN0b3JhZ2VBcmVhPiBzdG9yYWdlQXJl
YSA9IGZpbmRTdG9yYWdlQXJlYShlcnJvclN0cmluZywgc3RvcmFnZUlkLCBmcmFtZSk7Ci0gICAg
aWYgKCFzdG9yYWdlQXJlYSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIHN0b3Jh
Z2UgZm9yIGdpdmVuIHN0b3JhZ2VJZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBS
ZWZQdHI8U3RvcmFnZUFyZWE+IHN0b3JhZ2VBcmVhID0gZmluZFN0b3JhZ2VBcmVhKGVycm9yU3Ry
aW5nLCBXVEZNb3ZlKHN0b3JhZ2VJZCksIGZyYW1lKTsKKyAgICBpZiAoIXN0b3JhZ2VBcmVhKQor
ICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCiAgICAgc3RvcmFn
ZUFyZWEtPnJlbW92ZUl0ZW0oZnJhbWUsIGtleSk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12
b2lkIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6Y2xlYXJET01TdG9yYWdlSXRlbXMoRXJyb3JT
dHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBKU09OOjpPYmplY3QmIHN0b3JhZ2VJZCkKK1Byb3Rv
Y29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6Y2xlYXJE
T01TdG9yYWdlSXRlbXMoUmVmPEpTT046Ok9iamVjdD4mJiBzdG9yYWdlSWQpCiB7CisgICAgUHJv
dG9jb2w6OkVycm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAgICAgRnJhbWUqIGZyYW1lOwotICAg
IGF1dG8gc3RvcmFnZUFyZWEgPSBmaW5kU3RvcmFnZUFyZWEoZXJyb3JTdHJpbmcsIHN0b3JhZ2VJ
ZCwgZnJhbWUpOwotICAgIGlmICghc3RvcmFnZUFyZWEpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcg
PSAiTWlzc2luZyBzdG9yYWdlIGZvciBnaXZlbiBzdG9yYWdlSWQiX3M7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9CisgICAgYXV0byBzdG9yYWdlQXJlYSA9IGZpbmRTdG9yYWdlQXJlYShlcnJvclN0
cmluZywgV1RGTW92ZShzdG9yYWdlSWQpLCBmcmFtZSk7CisgICAgaWYgKCFzdG9yYWdlQXJlYSkK
KyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAogICAgIHN0b3Jh
Z2VBcmVhLT5jbGVhcihmcmFtZSk7CisKKyAgICByZXR1cm4geyB9OwogfQogCiBTdHJpbmcgSW5z
cGVjdG9yRE9NU3RvcmFnZUFnZW50OjpzdG9yYWdlSWQoU3RvcmFnZSYgc3RvcmFnZSkKQEAgLTE2
OCw5ICsxNzEsOSBAQCBTdHJpbmcgSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjpzdG9yYWdlSWQo
U3RvcmFnZSYgc3RvcmFnZSkKICAgICByZXR1cm4gSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50Ojpz
dG9yYWdlSWQoc2VjdXJpdHlPcmlnaW4ucHRyKCksIGlzTG9jYWxTdG9yYWdlKS0+dG9KU09OU3Ry
aW5nKCk7CiB9CiAKLVJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpET01TdG9yYWdlOjpTdG9y
YWdlSWQ+IEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6c3RvcmFnZUlkKFNlY3VyaXR5T3JpZ2lu
KiBzZWN1cml0eU9yaWdpbiwgYm9vbCBpc0xvY2FsU3RvcmFnZSkKK1JlZjxQcm90b2NvbDo6RE9N
U3RvcmFnZTo6U3RvcmFnZUlkPiBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OnN0b3JhZ2VJZChT
ZWN1cml0eU9yaWdpbiogc2VjdXJpdHlPcmlnaW4sIGJvb2wgaXNMb2NhbFN0b3JhZ2UpCiB7Ci0g
ICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTVN0b3JhZ2U6OlN0b3JhZ2VJZDo6Y3Jl
YXRlKCkKKyAgICByZXR1cm4gUHJvdG9jb2w6OkRPTVN0b3JhZ2U6OlN0b3JhZ2VJZDo6Y3JlYXRl
KCkKICAgICAgICAgLnNldFNlY3VyaXR5T3JpZ2luKHNlY3VyaXR5T3JpZ2luLT50b1Jhd1N0cmlu
ZygpKQogICAgICAgICAuc2V0SXNMb2NhbFN0b3JhZ2UoaXNMb2NhbFN0b3JhZ2UpCiAgICAgICAg
IC5yZWxlYXNlKCk7CkBAIC0xNzgsMjggKzE4MSwyOCBAQCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90
b2NvbDo6RE9NU3RvcmFnZTo6U3RvcmFnZUlkPiBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OnN0
bwogCiB2b2lkIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6ZGlkRGlzcGF0Y2hET01TdG9yYWdl
RXZlbnQoY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgb2xkVmFsdWUsIGNvbnN0IFN0
cmluZyYgbmV3VmFsdWUsIFN0b3JhZ2VUeXBlIHN0b3JhZ2VUeXBlLCBTZWN1cml0eU9yaWdpbiog
c2VjdXJpdHlPcmlnaW4pCiB7Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTVN0
b3JhZ2U6OlN0b3JhZ2VJZD4gaWQgPSBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OnN0b3JhZ2VJ
ZChzZWN1cml0eU9yaWdpbiwgc3RvcmFnZVR5cGUgPT0gU3RvcmFnZVR5cGU6OkxvY2FsKTsKKyAg
ICBhdXRvIGlkID0gSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjpzdG9yYWdlSWQoc2VjdXJpdHlP
cmlnaW4sIHN0b3JhZ2VUeXBlID09IFN0b3JhZ2VUeXBlOjpMb2NhbCk7CiAKICAgICBpZiAoa2V5
LmlzTnVsbCgpKQotICAgICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+ZG9tU3RvcmFnZUl0ZW1z
Q2xlYXJlZChpZCk7CisgICAgICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5kb21TdG9yYWdlSXRl
bXNDbGVhcmVkKFdURk1vdmUoaWQpKTsKICAgICBlbHNlIGlmIChuZXdWYWx1ZS5pc051bGwoKSkK
LSAgICAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPmRvbVN0b3JhZ2VJdGVtUmVtb3ZlZChpZCwg
a2V5KTsKKyAgICAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPmRvbVN0b3JhZ2VJdGVtUmVtb3Zl
ZChXVEZNb3ZlKGlkKSwga2V5KTsKICAgICBlbHNlIGlmIChvbGRWYWx1ZS5pc051bGwoKSkKLSAg
ICAgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPmRvbVN0b3JhZ2VJdGVtQWRkZWQoaWQsIGtleSwg
bmV3VmFsdWUpOworICAgICAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+ZG9tU3RvcmFnZUl0ZW1B
ZGRlZChXVEZNb3ZlKGlkKSwga2V5LCBuZXdWYWx1ZSk7CiAgICAgZWxzZQotICAgICAgICBtX2Zy
b250ZW5kRGlzcGF0Y2hlci0+ZG9tU3RvcmFnZUl0ZW1VcGRhdGVkKGlkLCBrZXksIG9sZFZhbHVl
LCBuZXdWYWx1ZSk7CisgICAgICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5kb21TdG9yYWdlSXRl
bVVwZGF0ZWQoV1RGTW92ZShpZCksIGtleSwgb2xkVmFsdWUsIG5ld1ZhbHVlKTsKIH0KIAotUmVm
UHRyPFN0b3JhZ2VBcmVhPiBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OmZpbmRTdG9yYWdlQXJl
YShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IEpTT046Ok9iamVjdCYgc3RvcmFnZUlk
LCBGcmFtZSomIHRhcmdldEZyYW1lKQorUmVmUHRyPFN0b3JhZ2VBcmVhPiBJbnNwZWN0b3JET01T
dG9yYWdlQWdlbnQ6OmZpbmRTdG9yYWdlQXJlYShQcm90b2NvbDo6RXJyb3JTdHJpbmcmIGVycm9y
U3RyaW5nLCBSZWY8SlNPTjo6T2JqZWN0PiYmIHN0b3JhZ2VJZCwgRnJhbWUqJiB0YXJnZXRGcmFt
ZSkKIHsKLSAgICBTdHJpbmcgc2VjdXJpdHlPcmlnaW47Ci0gICAgaWYgKCFzdG9yYWdlSWQuZ2V0
U3RyaW5nKCJzZWN1cml0eU9yaWdpbiJfcywgc2VjdXJpdHlPcmlnaW4pKSB7CisgICAgYXV0byBz
ZWN1cml0eU9yaWdpbiA9IHN0b3JhZ2VJZC0+Z2V0U3RyaW5nKFByb3RvY29sOjpET01TdG9yYWdl
OjpTdG9yYWdlSWQ6OnNlY3VyaXR5T3JpZ2luS2V5KTsKKyAgICBpZiAoIXNlY3VyaXR5T3JpZ2lu
KSB7CiAgICAgICAgIGVycm9yU3RyaW5nID0gIk1pc3Npbmcgc2VjdXJpdHlPcmlnaW4gaW4gZ2l2
ZW4gc3RvcmFnZUlkIjsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCi0gICAgYm9v
bCBpc0xvY2FsU3RvcmFnZSA9IGZhbHNlOwotICAgIGlmICghc3RvcmFnZUlkLmdldEJvb2xlYW4o
ImlzTG9jYWxTdG9yYWdlIl9zLCBpc0xvY2FsU3RvcmFnZSkpIHsKKyAgICBhdXRvIGlzTG9jYWxT
dG9yYWdlID0gc3RvcmFnZUlkLT5nZXRCb29sZWFuKFByb3RvY29sOjpET01TdG9yYWdlOjpTdG9y
YWdlSWQ6OmlzTG9jYWxTdG9yYWdlS2V5KTsKKyAgICBpZiAoIWlzTG9jYWxTdG9yYWdlKSB7CiAg
ICAgICAgIGVycm9yU3RyaW5nID0gIk1pc3NpbmcgaXNMb2NhbFN0b3JhZ2UgaW4gZ2l2ZW4gc3Rv
cmFnZUlkIjsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQpAQCAtMjEwLDcgKzIxMyw3
IEBAIFJlZlB0cjxTdG9yYWdlQXJlYT4gSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjpmaW5kU3Rv
cmFnZUFyZWEoRXJyb3JTdHJpbmcmIGVycm9yCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAg
IH0KIAotICAgIGlmICghaXNMb2NhbFN0b3JhZ2UpCisgICAgaWYgKCEqaXNMb2NhbFN0b3JhZ2Up
CiAgICAgICAgIHJldHVybiBtX2luc3BlY3RlZFBhZ2Uuc2Vzc2lvblN0b3JhZ2UoKS0+c3RvcmFn
ZUFyZWEodGFyZ2V0RnJhbWUtPmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCkuZGF0YSgpKTsK
ICAgICByZXR1cm4gbV9pbnNwZWN0ZWRQYWdlLnN0b3JhZ2VOYW1lc3BhY2VQcm92aWRlcigpLmxv
Y2FsU3RvcmFnZUFyZWEoKnRhcmdldEZyYW1lLT5kb2N1bWVudCgpKTsKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50
LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckRPTVN0b3JhZ2VB
Z2VudC5oCmluZGV4IGRkYmI1ZDUzNDdmM2JlYWJlM2NmYWIyMDFkNjgzOGM4OTZkMjFlMzkuLjMz
ODZjYjg3OWYxMTc4YzFiOTYzNTc3NWM5YTBlODY0ZjViOTRjNTIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JET01TdG9yYWdlQWdl
bnQuaApAQCAtNDUsMzYgKzQ1LDM0IEBAIGNsYXNzIFBhZ2U7CiBjbGFzcyBTZWN1cml0eU9yaWdp
bjsKIGNsYXNzIFN0b3JhZ2U7CiAKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCiBjbGFz
cyBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yQWdlbnRC
YXNlLCBwdWJsaWMgSW5zcGVjdG9yOjpET01TdG9yYWdlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVy
IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQpOwog
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIEluc3BlY3RvckRPTVN0
b3JhZ2VBZ2VudChQYWdlQWdlbnRDb250ZXh0Jik7Ci0gICAgfkluc3BlY3RvckRPTVN0b3JhZ2VB
Z2VudCgpIG92ZXJyaWRlOworICAgIH5JbnNwZWN0b3JET01TdG9yYWdlQWdlbnQoKTsKIAogICAg
IC8vIEluc3BlY3RvckFnZW50QmFzZQotICAgIHZvaWQgZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNr
ZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRSb3V0ZXIqLCBJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRj
aGVyKikgb3ZlcnJpZGU7Ci0gICAgdm9pZCB3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJ
bnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24pIG92ZXJyaWRlOworICAgIHZvaWQgZGlkQ3JlYXRl
RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRSb3V0ZXIqLCBJbnNwZWN0b3I6
OkJhY2tlbmREaXNwYXRjaGVyKik7CisgICAgdm9pZCB3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFj
a2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24pOwogCiAgICAgLy8gRE9NU3RvcmFnZUJh
Y2tlbmREaXNwYXRjaGVySGFuZGxlcgotICAgIHZvaWQgZW5hYmxlKEVycm9yU3RyaW5nJikgb3Zl
cnJpZGU7Ci0gICAgdm9pZCBkaXNhYmxlKEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBnZXRET01TdG9yYWdlSXRlbXMoRXJyb3JTdHJpbmcmLCBjb25zdCBKU09OOjpPYmplY3QmIHN0
b3JhZ2VJZCwgUmVmUHRyPEpTT046OkFycmF5T2Y8SlNPTjo6QXJyYXlPZjxTdHJpbmc+Pj4mIGl0
ZW1zKSBvdmVycmlkZTsKLSAgICB2b2lkIHNldERPTVN0b3JhZ2VJdGVtKEVycm9yU3RyaW5nJiwg
Y29uc3QgSlNPTjo6T2JqZWN0JiBzdG9yYWdlSWQsIGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBT
dHJpbmcmIHZhbHVlKSBvdmVycmlkZTsKLSAgICB2b2lkIHJlbW92ZURPTVN0b3JhZ2VJdGVtKEVy
cm9yU3RyaW5nJiwgY29uc3QgSlNPTjo6T2JqZWN0JiBzdG9yYWdlSWQsIGNvbnN0IFN0cmluZyYg
a2V5KSBvdmVycmlkZTsKLSAgICB2b2lkIGNsZWFyRE9NU3RvcmFnZUl0ZW1zKEVycm9yU3RyaW5n
JiwgY29uc3QgSlNPTjo6T2JqZWN0JiBzdG9yYWdlSWQpIG92ZXJyaWRlOworICAgIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZW5hYmxlKCk7CisgICAgSW5zcGVjdG9y
OjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBkaXNhYmxlKCk7CisgICAgSW5zcGVjdG9y
OjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpET01TdG9yYWdlOjpJdGVtPj4+IGdldERPTVN0b3JhZ2VJdGVtcyhSZWY8SlNPTjo6
T2JqZWN0PiYmIHN0b3JhZ2VJZCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJp
bmdPcjx2b2lkPiBzZXRET01TdG9yYWdlSXRlbShSZWY8SlNPTjo6T2JqZWN0PiYmIHN0b3JhZ2VJ
ZCwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUpOworICAgIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gcmVtb3ZlRE9NU3RvcmFnZUl0ZW0oUmVm
PEpTT046Ok9iamVjdD4mJiBzdG9yYWdlSWQsIGNvbnN0IFN0cmluZyYga2V5KTsKKyAgICBJbnNw
ZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGNsZWFyRE9NU3RvcmFnZUl0ZW1z
KFJlZjxKU09OOjpPYmplY3Q+JiYgc3RvcmFnZUlkKTsKIAogICAgIC8vIEluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbgogICAgIHZvaWQgZGlkRGlzcGF0Y2hET01TdG9yYWdlRXZlbnQoY29uc3QgU3Ry
aW5nJiBrZXksIGNvbnN0IFN0cmluZyYgb2xkVmFsdWUsIGNvbnN0IFN0cmluZyYgbmV3VmFsdWUs
IFN0b3JhZ2VUeXBlLCBTZWN1cml0eU9yaWdpbiopOwogCiAgICAgLy8gQ29tbWFuZExpbmVBUEkK
ICAgICBzdGF0aWMgU3RyaW5nIHN0b3JhZ2VJZChTdG9yYWdlJik7Ci0gICAgc3RhdGljIFJlZlB0
cjxJbnNwZWN0b3I6OlByb3RvY29sOjpET01TdG9yYWdlOjpTdG9yYWdlSWQ+IHN0b3JhZ2VJZChT
ZWN1cml0eU9yaWdpbiosIGJvb2wgaXNMb2NhbFN0b3JhZ2UpOworICAgIHN0YXRpYyBSZWY8SW5z
cGVjdG9yOjpQcm90b2NvbDo6RE9NU3RvcmFnZTo6U3RvcmFnZUlkPiBzdG9yYWdlSWQoU2VjdXJp
dHlPcmlnaW4qLCBib29sIGlzTG9jYWxTdG9yYWdlKTsKIAogcHJpdmF0ZToKLSAgICBSZWZQdHI8
U3RvcmFnZUFyZWE+IGZpbmRTdG9yYWdlQXJlYShFcnJvclN0cmluZyYsIGNvbnN0IEpTT046Ok9i
amVjdCYsIEZyYW1lKiYpOworICAgIFJlZlB0cjxTdG9yYWdlQXJlYT4gZmluZFN0b3JhZ2VBcmVh
KEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nJiwgUmVmPEpTT046Ok9iamVjdD4mJiBz
dG9yYWdlSWQsIEZyYW1lKiYpOwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPEluc3BlY3Rvcjo6RE9N
U3RvcmFnZUZyb250ZW5kRGlzcGF0Y2hlcj4gbV9mcm9udGVuZERpc3BhdGNoZXI7CiAgICAgUmVm
UHRyPEluc3BlY3Rvcjo6RE9NU3RvcmFnZUJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNw
YXRjaGVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNw
ZWN0b3JEYXRhYmFzZUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5jcHAKaW5kZXggNGI5YTU1ZGU1NTdiZTk0NjcxNmY1ZTAy
MTExNDQzNzExODJkNmQ1Mi4uMjljMTE0ZjI2NzY4M2QyNTA2NTI3YWQ3Y2Y5ZDU3ZmJiMWU5MmYz
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JE
YXRhYmFzZUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0lu
c3BlY3RvckRhdGFiYXNlQWdlbnQuY3BwCkBAIC01OSw3ICs1OSw3IEBAIG5hbWVzcGFjZSB7CiAK
IHZvaWQgcmVwb3J0VHJhbnNhY3Rpb25GYWlsZWQoRXhlY3V0ZVNRTENhbGxiYWNrJiByZXF1ZXN0
Q2FsbGJhY2ssIFNRTEVycm9yJiBlcnJvcikKIHsKLSAgICBhdXRvIGVycm9yT2JqZWN0ID0gSW5z
cGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yOjpjcmVhdGUoKQorICAgIGF1dG8gZXJy
b3JPYmplY3QgPSBQcm90b2NvbDo6RGF0YWJhc2U6OkVycm9yOjpjcmVhdGUoKQogICAgICAgICAu
c2V0TWVzc2FnZShlcnJvci5tZXNzYWdlSXNvbGF0ZWRDb3B5KCkpCiAgICAgICAgIC5zZXRDb2Rl
KGVycm9yLmNvZGUoKSkKICAgICAgICAgLnJlbGVhc2UoKTsKQEAgLTIzMCw1MSArMjMwLDQ4IEBA
IHZvaWQgSW5zcGVjdG9yRGF0YWJhc2VBZ2VudDo6ZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5k
KEluc3BlY3Rvcjo6RnJvbnRlbmRSb3V0CiAKIHZvaWQgSW5zcGVjdG9yRGF0YWJhc2VBZ2VudDo6
d2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29u
KQogewotICAgIEVycm9yU3RyaW5nIGlnbm9yZWQ7Ci0gICAgZGlzYWJsZShpZ25vcmVkKTsKKyAg
ICBkaXNhYmxlKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGF0YWJhc2VBZ2VudDo6ZW5hYmxlKEVy
cm9yU3RyaW5nJiBlcnJvclN0cmluZykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IElu
c3BlY3RvckRhdGFiYXNlQWdlbnQ6OmVuYWJsZSgpCiB7Ci0gICAgaWYgKG1faW5zdHJ1bWVudGlu
Z0FnZW50cy5lbmFibGVkRGF0YWJhc2VBZ2VudCgpID09IHRoaXMpIHsKLSAgICAgICAgZXJyb3JT
dHJpbmcgPSAiRGF0YWJhc2UgZG9tYWluIGFscmVhZHkgZW5hYmxlZCJfczsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KKyAgICBpZiAobV9pbnN0cnVtZW50aW5nQWdlbnRzLmVuYWJsZWREYXRhYmFz
ZUFnZW50KCkgPT0gdGhpcykKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJEYXRhYmFz
ZSBkb21haW4gYWxyZWFkeSBlbmFibGVkIl9zKTsKIAogICAgIG1faW5zdHJ1bWVudGluZ0FnZW50
cy5zZXRFbmFibGVkRGF0YWJhc2VBZ2VudCh0aGlzKTsKIAogICAgIGZvciAoYXV0byYgZGF0YWJh
c2UgOiBEYXRhYmFzZVRyYWNrZXI6OnNpbmdsZXRvbigpLm9wZW5EYXRhYmFzZXMoKSkKICAgICAg
ICAgZGlkT3BlbkRhdGFiYXNlKGRhdGFiYXNlLmdldCgpKTsKKworICAgIHJldHVybiB7IH07CiB9
CiAKLXZvaWQgSW5zcGVjdG9yRGF0YWJhc2VBZ2VudDo6ZGlzYWJsZShFcnJvclN0cmluZyYgZXJy
b3JTdHJpbmcpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JEYXRhYmFz
ZUFnZW50OjpkaXNhYmxlKCkKIHsKLSAgICBpZiAobV9pbnN0cnVtZW50aW5nQWdlbnRzLmVuYWJs
ZWREYXRhYmFzZUFnZW50KCkgIT0gdGhpcykgewotICAgICAgICBlcnJvclN0cmluZyA9ICJEYXRh
YmFzZSBkb21haW4gYWxyZWFkeSBkaXNhYmxlZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
KyAgICBpZiAobV9pbnN0cnVtZW50aW5nQWdlbnRzLmVuYWJsZWREYXRhYmFzZUFnZW50KCkgIT0g
dGhpcykKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJEYXRhYmFzZSBkb21haW4gYWxy
ZWFkeSBkaXNhYmxlZCJfcyk7CiAKICAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMuc2V0RW5hYmxl
ZERhdGFiYXNlQWdlbnQobnVsbHB0cik7CiAKICAgICBtX3Jlc291cmNlcy5jbGVhcigpOworCisg
ICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JEYXRhYmFzZUFnZW50OjpnZXREYXRh
YmFzZVRhYmxlTmFtZXMoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIGRh
dGFiYXNlSWQsIFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+JiBuYW1lcykKK1Byb3RvY29s
OjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPFN0cmluZz4+PiBJbnNwZWN0b3JEYXRh
YmFzZUFnZW50OjpnZXREYXRhYmFzZVRhYmxlTmFtZXMoY29uc3QgUHJvdG9jb2w6OkRhdGFiYXNl
OjpEYXRhYmFzZUlkJiBkYXRhYmFzZUlkKQogewotICAgIGlmIChtX2luc3RydW1lbnRpbmdBZ2Vu
dHMuZW5hYmxlZERhdGFiYXNlQWdlbnQoKSAhPSB0aGlzKSB7Ci0gICAgICAgIGVycm9yU3RyaW5n
ID0gIkRhdGFiYXNlIGRvbWFpbiBtdXN0IGJlIGVuYWJsZWQiX3M7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBuYW1lcyA9IEpTT046OkFycmF5T2Y8U3RyaW5nPjo6Y3JlYXRlKCk7Cisg
ICAgaWYgKG1faW5zdHJ1bWVudGluZ0FnZW50cy5lbmFibGVkRGF0YWJhc2VBZ2VudCgpICE9IHRo
aXMpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiRGF0YWJhc2UgZG9tYWluIG11c3Qg
YmUgZW5hYmxlZCJfcyk7CiAKKyAgICBhdXRvIG5hbWVzID0gSlNPTjo6QXJyYXlPZjxTdHJpbmc+
OjpjcmVhdGUoKTsKICAgICBpZiAoYXV0byogZGF0YWJhc2UgPSBkYXRhYmFzZUZvcklkKGRhdGFi
YXNlSWQpKSB7CiAgICAgICAgIGZvciAoYXV0byYgdGFibGVOYW1lIDogZGF0YWJhc2UtPnRhYmxl
TmFtZXMoKSkKICAgICAgICAgICAgIG5hbWVzLT5hZGRJdGVtKHRhYmxlTmFtZSk7CiAgICAgfQor
ICAgIHJldHVybiBXVEZNb3ZlKG5hbWVzKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JEYXRhYmFzZUFn
ZW50OjpleGVjdXRlU1FMKGNvbnN0IFN0cmluZyYgZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBx
dWVyeSwgUmVmPEV4ZWN1dGVTUUxDYWxsYmFjaz4mJiByZXF1ZXN0Q2FsbGJhY2spCit2b2lkIElu
c3BlY3RvckRhdGFiYXNlQWdlbnQ6OmV4ZWN1dGVTUUwoY29uc3QgUHJvdG9jb2w6OkRhdGFiYXNl
OjpEYXRhYmFzZUlkJiBkYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIHF1ZXJ5LCBSZWY8RXhlY3V0
ZVNRTENhbGxiYWNrPiYmIHJlcXVlc3RDYWxsYmFjaykKIHsKICAgICBpZiAobV9pbnN0cnVtZW50
aW5nQWdlbnRzLmVuYWJsZWREYXRhYmFzZUFnZW50KCkgIT0gdGhpcykgewogICAgICAgICByZXF1
ZXN0Q2FsbGJhY2stPnNlbmRGYWlsdXJlKCJEYXRhYmFzZSBkb21haW4gbXVzdCBiZSBlbmFibGVk
Il9zKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVj
dG9yRGF0YWJhc2VBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNw
ZWN0b3JEYXRhYmFzZUFnZW50LmgKaW5kZXggNDMwNTAzMTkxY2RjYjk4NzlmZGI2NTUxMzljMTRi
Yjc3YTczNzQyZi4uMDFjZWY0MzliNGFjNmRhZDJlNDEyNmI1NDM0MTZjNTM5NDMyY2JjNyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JEYXRhYmFz
ZUFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JE
YXRhYmFzZUFnZW50LmgKQEAgLTQxLDI0ICs0MSwyMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBj
bGFzcyBEYXRhYmFzZTsKIGNsYXNzIEluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2U7CiAKLXR5cGVk
ZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCiBjbGFzcyBJbnNwZWN0b3JEYXRhYmFzZUFnZW50IGZp
bmFsIDogcHVibGljIEluc3BlY3RvckFnZW50QmFzZSwgcHVibGljIEluc3BlY3Rvcjo6RGF0YWJh
c2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKElu
c3BlY3RvckRhdGFiYXNlQWdlbnQpOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVi
bGljOgogICAgIEluc3BlY3RvckRhdGFiYXNlQWdlbnQoV2ViQWdlbnRDb250ZXh0Jik7Ci0gICAg
fkluc3BlY3RvckRhdGFiYXNlQWdlbnQoKSBvdmVycmlkZTsKKyAgICB+SW5zcGVjdG9yRGF0YWJh
c2VBZ2VudCgpOwogCiAgICAgLy8gSW5zcGVjdG9yQWdlbnRCYXNlCi0gICAgdm9pZCBkaWRDcmVh
dGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9udGVuZFJvdXRlciosIEluc3BlY3Rv
cjo6QmFja2VuZERpc3BhdGNoZXIqKSBvdmVycmlkZTsKLSAgICB2b2lkIHdpbGxEZXN0cm95RnJv
bnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlzY29ubmVjdFJlYXNvbikgb3ZlcnJpZGU7Cisg
ICAgdm9pZCBkaWRDcmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9udGVuZFJv
dXRlciosIEluc3BlY3Rvcjo6QmFja2VuZERpc3BhdGNoZXIqKTsKKyAgICB2b2lkIHdpbGxEZXN0
cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlzY29ubmVjdFJlYXNvbik7CiAKICAg
ICAvLyBEYXRhYmFzZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcgotICAgIHZvaWQgZW5hYmxlKEVy
cm9yU3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkaXNhYmxlKEVycm9yU3RyaW5nJikgb3Zl
cnJpZGU7Ci0gICAgdm9pZCBnZXREYXRhYmFzZVRhYmxlTmFtZXMoRXJyb3JTdHJpbmcmLCBjb25z
dCBTdHJpbmcmIGRhdGFiYXNlSWQsIFJlZlB0cjxKU09OOjpBcnJheU9mPFN0cmluZz4+JiBuYW1l
cykgb3ZlcnJpZGU7Ci0gICAgdm9pZCBleGVjdXRlU1FMKGNvbnN0IFN0cmluZyYgZGF0YWJhc2VJ
ZCwgY29uc3QgU3RyaW5nJiBxdWVyeSwgUmVmPEV4ZWN1dGVTUUxDYWxsYmFjaz4mJikgb3ZlcnJp
ZGU7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBlbmFibGUo
KTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGRpc2FibGUo
KTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFJlZjxKU09OOjpBcnJh
eU9mPFN0cmluZz4+PiBnZXREYXRhYmFzZVRhYmxlTmFtZXMoY29uc3QgSW5zcGVjdG9yOjpQcm90
b2NvbDo6RGF0YWJhc2U6OkRhdGFiYXNlSWQmKTsKKyAgICB2b2lkIGV4ZWN1dGVTUUwoY29uc3Qg
SW5zcGVjdG9yOjpQcm90b2NvbDo6RGF0YWJhc2U6OkRhdGFiYXNlSWQmLCBjb25zdCBTdHJpbmcm
IHF1ZXJ5LCBSZWY8RXhlY3V0ZVNRTENhbGxiYWNrPiYmKTsKIAogICAgIC8vIEluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbgogICAgIHZvaWQgZGlkQ29tbWl0TG9hZCgpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JJbmRleGVkREJBZ2VudC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckluZGV4ZWREQkFnZW50
LmNwcAppbmRleCBmZjhmMzBmNDAzZjg1YzdkZGJlMzFiMTBlMDNjZWY1ZmNkZjdmMDA2Li5hMTQ1
ZTA0ZWIyMThkZThhNDJmZjg5ODI5OGI4YmVhNjgyYzRlZGUxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckluZGV4ZWREQkFnZW50LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvckluZGV4ZWREQkFnZW50
LmNwcApAQCAtNzAsMjYgKzcwLDYgQEAKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVk
ZSA8d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGVOdW1iZXJzLmg+CiAKLXVzaW5nIEpTT046OkFy
cmF5T2Y7Ci11c2luZyBJbnNwZWN0b3I6OlByb3RvY29sOjpJbmRleGVkREI6OkRhdGFiYXNlV2l0
aE9iamVjdFN0b3JlczsKLXVzaW5nIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkluZGV4ZWREQjo6RGF0
YUVudHJ5OwotdXNpbmcgSW5zcGVjdG9yOjpQcm90b2NvbDo6SW5kZXhlZERCOjpLZXk7Ci11c2lu
ZyBJbnNwZWN0b3I6OlByb3RvY29sOjpJbmRleGVkREI6OktleVBhdGg7Ci11c2luZyBJbnNwZWN0
b3I6OlByb3RvY29sOjpJbmRleGVkREI6OktleVJhbmdlOwotdXNpbmcgSW5zcGVjdG9yOjpQcm90
b2NvbDo6SW5kZXhlZERCOjpPYmplY3RTdG9yZTsKLXVzaW5nIEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkluZGV4ZWREQjo6T2JqZWN0U3RvcmVJbmRleDsKLQotdHlwZWRlZiBJbnNwZWN0b3I6OkJhY2tl
bmREaXNwYXRjaGVyOjpDYWxsYmFja0Jhc2UgUmVxdWVzdENhbGxiYWNrOwotdHlwZWRlZiBJbnNw
ZWN0b3I6OkluZGV4ZWREQkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UmVxdWVzdERhdGFiYXNl
TmFtZXNDYWxsYmFjayBSZXF1ZXN0RGF0YWJhc2VOYW1lc0NhbGxiYWNrOwotdHlwZWRlZiBJbnNw
ZWN0b3I6OkluZGV4ZWREQkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UmVxdWVzdERhdGFiYXNl
Q2FsbGJhY2sgUmVxdWVzdERhdGFiYXNlQ2FsbGJhY2s7Ci10eXBlZGVmIEluc3BlY3Rvcjo6SW5k
ZXhlZERCQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpSZXF1ZXN0RGF0YUNhbGxiYWNrIFJlcXVl
c3REYXRhQ2FsbGJhY2s7Ci10eXBlZGVmIEluc3BlY3Rvcjo6SW5kZXhlZERCQmFja2VuZERpc3Bh
dGNoZXJIYW5kbGVyOjpDbGVhck9iamVjdFN0b3JlQ2FsbGJhY2sgQ2xlYXJPYmplY3RTdG9yZUNh
bGxiYWNrOwotCi10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQotdGVtcGxhdGUgPHR5cGVu
YW1lIFQ+Ci11c2luZyBFcnJvclN0cmluZ09yID0gRXhwZWN0ZWQ8VCwgRXJyb3JTdHJpbmc+Owot
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CkBAIC0x
MDMsNyArODMsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+RXhlY3V0YWJsZVdpdGhEYXRhYmFz
ZSgpID0gZGVmYXVsdDsKICAgICB2b2lkIHN0YXJ0KElEQkZhY3RvcnkqLCBTZWN1cml0eU9yaWdp
biosIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VOYW1lKTsKICAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0
ZShJREJEYXRhYmFzZSYpID0gMDsKLSAgICB2aXJ0dWFsIFJlcXVlc3RDYWxsYmFjayYgcmVxdWVz
dENhbGxiYWNrKCkgPSAwOworICAgIHZpcnR1YWwgQmFja2VuZERpc3BhdGNoZXI6OkNhbGxiYWNr
QmFzZSYgcmVxdWVzdENhbGxiYWNrKCkgPSAwOwogICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IGNvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX2NvbnRleHQ7IH0KIHByaXZhdGU6CiAgICAgU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogbV9jb250ZXh0OwpAQCAtMTcxLDIwICsxNTEsMjAgQEAgdm9p
ZCBFeGVjdXRhYmxlV2l0aERhdGFiYXNlOjpzdGFydChJREJGYWN0b3J5KiBpZGJGYWN0b3J5LCBT
ZWN1cml0eU9yaWdpbiosIGNvbnMKIH0KIAogCi1zdGF0aWMgUmVmUHRyPEtleVBhdGg+IGtleVBh
dGhGcm9tSURCS2V5UGF0aChjb25zdCBPcHRpb25hbDxJREJLZXlQYXRoPiYgaWRiS2V5UGF0aCkK
K3N0YXRpYyBSZWY8UHJvdG9jb2w6OkluZGV4ZWREQjo6S2V5UGF0aD4ga2V5UGF0aEZyb21JREJL
ZXlQYXRoKGNvbnN0IE9wdGlvbmFsPElEQktleVBhdGg+JiBpZGJLZXlQYXRoKQogewogICAgIGlm
ICghaWRiS2V5UGF0aCkKLSAgICAgICAgcmV0dXJuIEtleVBhdGg6OmNyZWF0ZSgpLnNldFR5cGUo
S2V5UGF0aDo6VHlwZTo6TnVsbCkucmVsZWFzZSgpOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6
OkluZGV4ZWREQjo6S2V5UGF0aDo6Y3JlYXRlKCkuc2V0VHlwZShQcm90b2NvbDo6SW5kZXhlZERC
OjpLZXlQYXRoOjpUeXBlOjpOdWxsKS5yZWxlYXNlKCk7CiAKICAgICBhdXRvIHZpc2l0b3IgPSBX
VEY6Om1ha2VWaXNpdG9yKFtdKGNvbnN0IFN0cmluZyYgc3RyaW5nKSB7Ci0gICAgICAgIGF1dG8g
a2V5UGF0aCA9IEtleVBhdGg6OmNyZWF0ZSgpLnNldFR5cGUoS2V5UGF0aDo6VHlwZTo6U3RyaW5n
KS5yZWxlYXNlKCk7CisgICAgICAgIGF1dG8ga2V5UGF0aCA9IFByb3RvY29sOjpJbmRleGVkREI6
OktleVBhdGg6OmNyZWF0ZSgpLnNldFR5cGUoUHJvdG9jb2w6OkluZGV4ZWREQjo6S2V5UGF0aDo6
VHlwZTo6U3RyaW5nKS5yZWxlYXNlKCk7CiAgICAgICAgIGtleVBhdGgtPnNldFN0cmluZyhzdHJp
bmcpOwogICAgICAgICByZXR1cm4ga2V5UGF0aDsKICAgICB9LCBbXShjb25zdCBWZWN0b3I8U3Ry
aW5nPiYgdmVjdG9yKSB7CiAgICAgICAgIGF1dG8gYXJyYXkgPSBKU09OOjpBcnJheU9mPFN0cmlu
Zz46OmNyZWF0ZSgpOwogICAgICAgICBmb3IgKGF1dG8mIHN0cmluZyA6IHZlY3RvcikKICAgICAg
ICAgICAgIGFycmF5LT5hZGRJdGVtKHN0cmluZyk7Ci0gICAgICAgIGF1dG8ga2V5UGF0aCA9IEtl
eVBhdGg6OmNyZWF0ZSgpLnNldFR5cGUoS2V5UGF0aDo6VHlwZTo6QXJyYXkpLnJlbGVhc2UoKTsK
KyAgICAgICAgYXV0byBrZXlQYXRoID0gUHJvdG9jb2w6OkluZGV4ZWREQjo6S2V5UGF0aDo6Y3Jl
YXRlKCkuc2V0VHlwZShQcm90b2NvbDo6SW5kZXhlZERCOjpLZXlQYXRoOjpUeXBlOjpBcnJheSku
cmVsZWFzZSgpOwogICAgICAgICBrZXlQYXRoLT5zZXRBcnJheShXVEZNb3ZlKGFycmF5KSk7CiAg
ICAgICAgIHJldHVybiBrZXlQYXRoOwogICAgIH0pOwpAQCAtMjE3LDcgKzE5Nyw3IEBAIHN0YXRp
YyBSZWZQdHI8SURCSW5kZXg+IGluZGV4Rm9yT2JqZWN0U3RvcmUoSURCT2JqZWN0U3RvcmUqIGlk
Yk9iamVjdFN0b3JlLCBjb25zCiAKIGNsYXNzIERhdGFiYXNlTG9hZGVyIGZpbmFsIDogcHVibGlj
IEV4ZWN1dGFibGVXaXRoRGF0YWJhc2UgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RGF0YWJh
c2VMb2FkZXI+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBSZWY8UmVx
dWVzdERhdGFiYXNlQ2FsbGJhY2s+JiYgcmVxdWVzdENhbGxiYWNrKQorICAgIHN0YXRpYyBSZWY8
RGF0YWJhc2VMb2FkZXI+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBS
ZWY8SW5kZXhlZERCQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpSZXF1ZXN0RGF0YWJhc2VDYWxs
YmFjaz4mJiByZXF1ZXN0Q2FsbGJhY2spCiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBEYXRhYmFzZUxvYWRlcihjb250ZXh0LCBXVEZNb3ZlKHJlcXVlc3RDYWxsYmFjaykpKTsK
ICAgICB9CkBAIC0yMzAsMTcgKzIxMCwxNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgCiAgICAgICAgIGF1dG8mIGRhdGFiYXNlSW5mbyA9IGRhdGFiYXNlLmluZm8oKTsKLSAg
ICAgICAgYXV0byBvYmplY3RTdG9yZXMgPSBKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkluZGV4ZWREQjo6T2JqZWN0U3RvcmU+OjpjcmVhdGUoKTsKKyAgICAgICAgYXV0byBvYmpl
Y3RTdG9yZXMgPSBKU09OOjpBcnJheU9mPFByb3RvY29sOjpJbmRleGVkREI6Ok9iamVjdFN0b3Jl
Pjo6Y3JlYXRlKCk7CiAgICAgICAgIGF1dG8gb2JqZWN0U3RvcmVOYW1lcyA9IGRhdGFiYXNlSW5m
by5vYmplY3RTdG9yZU5hbWVzKCk7CiAgICAgICAgIGZvciAoYXV0byYgbmFtZSA6IG9iamVjdFN0
b3JlTmFtZXMpIHsKICAgICAgICAgICAgIGF1dG8qIG9iamVjdFN0b3JlSW5mbyA9IGRhdGFiYXNl
SW5mby5pbmZvRm9yRXhpc3RpbmdPYmplY3RTdG9yZShuYW1lKTsKICAgICAgICAgICAgIGlmICgh
b2JqZWN0U3RvcmVJbmZvKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAg
ICBhdXRvIGluZGV4ZXMgPSBKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkluZGV4
ZWREQjo6T2JqZWN0U3RvcmVJbmRleD46OmNyZWF0ZSgpOworICAgICAgICAgICAgYXV0byBpbmRl
eGVzID0gSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6SW5kZXhlZERCOjpPYmplY3RTdG9yZUluZGV4
Pjo6Y3JlYXRlKCk7CiAgICAgCiAgICAgICAgICAgICBmb3IgKGF1dG8mIGluZGV4SW5mbyA6IG9i
amVjdFN0b3JlSW5mby0+aW5kZXhNYXAoKS52YWx1ZXMoKSkgewotICAgICAgICAgICAgICAgIGF1
dG8gb2JqZWN0U3RvcmVJbmRleCA9IE9iamVjdFN0b3JlSW5kZXg6OmNyZWF0ZSgpCisgICAgICAg
ICAgICAgICAgYXV0byBvYmplY3RTdG9yZUluZGV4ID0gUHJvdG9jb2w6OkluZGV4ZWREQjo6T2Jq
ZWN0U3RvcmVJbmRleDo6Y3JlYXRlKCkKICAgICAgICAgICAgICAgICAgICAgLnNldE5hbWUoaW5k
ZXhJbmZvLm5hbWUoKSkKICAgICAgICAgICAgICAgICAgICAgLnNldEtleVBhdGgoa2V5UGF0aEZy
b21JREJLZXlQYXRoKGluZGV4SW5mby5rZXlQYXRoKCkpKQogICAgICAgICAgICAgICAgICAgICAu
c2V0VW5pcXVlKGluZGV4SW5mby51bmlxdWUoKSkKQEAgLTI0OSw3ICsyMjksNyBAQCBwdWJsaWM6
CiAgICAgICAgICAgICAgICAgaW5kZXhlcy0+YWRkSXRlbShXVEZNb3ZlKG9iamVjdFN0b3JlSW5k
ZXgpKTsKICAgICAgICAgICAgIH0KICAgICAKLSAgICAgICAgICAgIGF1dG8gb2JqZWN0U3RvcmUg
PSBPYmplY3RTdG9yZTo6Y3JlYXRlKCkKKyAgICAgICAgICAgIGF1dG8gb2JqZWN0U3RvcmUgPSBQ
cm90b2NvbDo6SW5kZXhlZERCOjpPYmplY3RTdG9yZTo6Y3JlYXRlKCkKICAgICAgICAgICAgICAg
ICAuc2V0TmFtZShvYmplY3RTdG9yZUluZm8tPm5hbWUoKSkKICAgICAgICAgICAgICAgICAuc2V0
S2V5UGF0aChrZXlQYXRoRnJvbUlEQktleVBhdGgob2JqZWN0U3RvcmVJbmZvLT5rZXlQYXRoKCkp
KQogICAgICAgICAgICAgICAgIC5zZXRBdXRvSW5jcmVtZW50KG9iamVjdFN0b3JlSW5mby0+YXV0
b0luY3JlbWVudCgpKQpAQCAtMjU4LDcgKzIzOCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIG9i
amVjdFN0b3Jlcy0+YWRkSXRlbShXVEZNb3ZlKG9iamVjdFN0b3JlKSk7CiAgICAgICAgIH0KICAg
ICAKLSAgICAgICAgYXV0byByZXN1bHQgPSBEYXRhYmFzZVdpdGhPYmplY3RTdG9yZXM6OmNyZWF0
ZSgpCisgICAgICAgIGF1dG8gcmVzdWx0ID0gUHJvdG9jb2w6OkluZGV4ZWREQjo6RGF0YWJhc2VX
aXRoT2JqZWN0U3RvcmVzOjpjcmVhdGUoKQogICAgICAgICAgICAgLnNldE5hbWUoZGF0YWJhc2VJ
bmZvLm5hbWUoKSkKICAgICAgICAgICAgIC5zZXRWZXJzaW9uKGRhdGFiYXNlSW5mby52ZXJzaW9u
KCkpCiAgICAgICAgICAgICAuc2V0T2JqZWN0U3RvcmVzKFdURk1vdmUob2JqZWN0U3RvcmVzKSkK
QEAgLTI2Niw5MiArMjQ2LDk2IEBAIHB1YmxpYzoKICAgICAgICAgbV9yZXF1ZXN0Q2FsbGJhY2st
PnNlbmRTdWNjZXNzKFdURk1vdmUocmVzdWx0KSk7CiAgICAgfQogCi0gICAgUmVxdWVzdENhbGxi
YWNrJiByZXF1ZXN0Q2FsbGJhY2soKSBvdmVycmlkZSB7IHJldHVybiBtX3JlcXVlc3RDYWxsYmFj
ay5nZXQoKTsgfQorICAgIEJhY2tlbmREaXNwYXRjaGVyOjpDYWxsYmFja0Jhc2UmIHJlcXVlc3RD
YWxsYmFjaygpIG92ZXJyaWRlIHsgcmV0dXJuIG1fcmVxdWVzdENhbGxiYWNrLmdldCgpOyB9CiBw
cml2YXRlOgotICAgIERhdGFiYXNlTG9hZGVyKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRl
eHQsIFJlZjxSZXF1ZXN0RGF0YWJhc2VDYWxsYmFjaz4mJiByZXF1ZXN0Q2FsbGJhY2spCisgICAg
RGF0YWJhc2VMb2FkZXIoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUmVmPEluZGV4
ZWREQkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UmVxdWVzdERhdGFiYXNlQ2FsbGJhY2s+JiYg
cmVxdWVzdENhbGxiYWNrKQogICAgICAgICA6IEV4ZWN1dGFibGVXaXRoRGF0YWJhc2UoY29udGV4
dCkKICAgICAgICAgLCBtX3JlcXVlc3RDYWxsYmFjayhXVEZNb3ZlKHJlcXVlc3RDYWxsYmFjaykp
IHsgfQotICAgIFJlZjxSZXF1ZXN0RGF0YWJhc2VDYWxsYmFjaz4gbV9yZXF1ZXN0Q2FsbGJhY2s7
CisgICAgUmVmPEluZGV4ZWREQkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UmVxdWVzdERhdGFi
YXNlQ2FsbGJhY2s+IG1fcmVxdWVzdENhbGxiYWNrOwogfTsKIAotc3RhdGljIFJlZlB0cjxJREJL
ZXk+IGlkYktleUZyb21JbnNwZWN0b3JPYmplY3QoSlNPTjo6T2JqZWN0KiBrZXkpCitzdGF0aWMg
UmVmUHRyPElEQktleT4gaWRiS2V5RnJvbUluc3BlY3Rvck9iamVjdChSZWY8SlNPTjo6T2JqZWN0
PiYmIGtleSkKIHsKLSAgICBTdHJpbmcgdHlwZTsKLSAgICBpZiAoIWtleS0+Z2V0U3RyaW5nKCJ0
eXBlIiwgdHlwZSkpCisgICAgYXV0byB0eXBlU3RyaW5nID0ga2V5LT5nZXRTdHJpbmcoUHJvdG9j
b2w6OkluZGV4ZWREQjo6S2V5Ojp0eXBlS2V5KTsKKyAgICBpZiAoIXR5cGVTdHJpbmcpCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwogCi0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IFN0
cmluZz4gbnVtYmVyVHlwZShNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgibnVtYmVyIikpOwotICAg
IHN0YXRpYyBOZXZlckRlc3Ryb3llZDxjb25zdCBTdHJpbmc+IHN0cmluZ1R5cGUoTUFLRV9TVEFU
SUNfU1RSSU5HX0lNUEwoInN0cmluZyIpKTsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29u
c3QgU3RyaW5nPiBkYXRlVHlwZShNQUtFX1NUQVRJQ19TVFJJTkdfSU1QTCgiZGF0ZSIpKTsKLSAg
ICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgU3RyaW5nPiBhcnJheVR5cGUoTUFLRV9TVEFU
SUNfU1RSSU5HX0lNUEwoImFycmF5IikpOworICAgIGF1dG8gdHlwZSA9IFByb3RvY29sOjpIZWxw
ZXJzOjpwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8UHJvdG9jb2w6OkluZGV4ZWREQjo6S2V5OjpU
eXBlPih0eXBlU3RyaW5nKTsKKyAgICBpZiAoIXR5cGUpCisgICAgICAgIHJldHVybiBudWxscHRy
OwogCi0gICAgUmVmUHRyPElEQktleT4gaWRiS2V5OwotICAgIGlmICh0eXBlID09IG51bWJlclR5
cGUpIHsKLSAgICAgICAgZG91YmxlIG51bWJlcjsKLSAgICAgICAgaWYgKCFrZXktPmdldERvdWJs
ZSgibnVtYmVyIiwgbnVtYmVyKSkKKyAgICBzd2l0Y2ggKCp0eXBlKSB7CisgICAgY2FzZSBQcm90
b2NvbDo6SW5kZXhlZERCOjpLZXk6OlR5cGU6Ok51bWJlcjogeworICAgICAgICBhdXRvIG51bWJl
ciA9IGtleS0+Z2V0RG91YmxlKFByb3RvY29sOjpJbmRleGVkREI6OktleTo6bnVtYmVyS2V5KTsK
KyAgICAgICAgaWYgKCFudW1iZXIpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAg
ICAgaWRiS2V5ID0gSURCS2V5OjpjcmVhdGVOdW1iZXIobnVtYmVyKTsKLSAgICB9IGVsc2UgaWYg
KHR5cGUgPT0gc3RyaW5nVHlwZSkgewotICAgICAgICBTdHJpbmcgc3RyaW5nOwotICAgICAgICBp
ZiAoIWtleS0+Z2V0U3RyaW5nKCJzdHJpbmciLCBzdHJpbmcpKQorICAgICAgICByZXR1cm4gSURC
S2V5OjpjcmVhdGVOdW1iZXIoKm51bWJlcik7CisgICAgfQorCisgICAgY2FzZSBQcm90b2NvbDo6
SW5kZXhlZERCOjpLZXk6OlR5cGU6OlN0cmluZzogeworICAgICAgICBhdXRvIHN0cmluZyA9IGtl
eS0+Z2V0U3RyaW5nKFByb3RvY29sOjpJbmRleGVkREI6OktleTo6c3RyaW5nS2V5KTsKKyAgICAg
ICAgaWYgKCFzdHJpbmcpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgaWRi
S2V5ID0gSURCS2V5OjpjcmVhdGVTdHJpbmcoc3RyaW5nKTsKLSAgICB9IGVsc2UgaWYgKHR5cGUg
PT0gZGF0ZVR5cGUpIHsKLSAgICAgICAgZG91YmxlIGRhdGU7Ci0gICAgICAgIGlmICgha2V5LT5n
ZXREb3VibGUoImRhdGUiLCBkYXRlKSkKKyAgICAgICAgcmV0dXJuIElEQktleTo6Y3JlYXRlU3Ry
aW5nKHN0cmluZyk7CisgICAgfQorCisgICAgY2FzZSBQcm90b2NvbDo6SW5kZXhlZERCOjpLZXk6
OlR5cGU6OkRhdGU6IHsKKyAgICAgICAgYXV0byBkYXRlID0ga2V5LT5nZXREb3VibGUoUHJvdG9j
b2w6OkluZGV4ZWREQjo6S2V5OjpkYXRlS2V5KTsKKyAgICAgICAgaWYgKCFkYXRlKQogICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIGlkYktleSA9IElEQktleTo6Y3JlYXRlRGF0
ZShkYXRlKTsKLSAgICB9IGVsc2UgaWYgKHR5cGUgPT0gYXJyYXlUeXBlKSB7CisgICAgICAgIHJl
dHVybiBJREJLZXk6OmNyZWF0ZURhdGUoKmRhdGUpOworICAgIH0KKworICAgIGNhc2UgUHJvdG9j
b2w6OkluZGV4ZWREQjo6S2V5OjpUeXBlOjpBcnJheTogeworICAgICAgICBhdXRvIGFycmF5ID0g
a2V5LT5nZXRBcnJheShQcm90b2NvbDo6SW5kZXhlZERCOjpLZXk6OmFycmF5S2V5KTsKKyAgICAg
ICAgaWYgKCFhcnJheSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCiAgICAgICAgIFZl
Y3RvcjxSZWZQdHI8SURCS2V5Pj4ga2V5QXJyYXk7Ci0gICAgICAgIFJlZlB0cjxKU09OOjpBcnJh
eT4gYXJyYXk7Ci0gICAgICAgIGlmICgha2V5LT5nZXRBcnJheSgiYXJyYXkiLCBhcnJheSkpCi0g
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBhcnJheS0+bGVuZ3RoKCk7ICsraSkgewotICAgICAgICAgICAgUmVmUHRyPEpTT046OlZhbHVl
PiB2YWx1ZSA9IGFycmF5LT5nZXQoaSk7Ci0gICAgICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0
PiBvYmplY3Q7Ci0gICAgICAgICAgICBpZiAoIXZhbHVlLT5hc09iamVjdChvYmplY3QpKQorICAg
ICAgICAgICAgYXV0byBvYmplY3QgPSBhcnJheS0+Z2V0KGkpLT5hc09iamVjdCgpOworICAgICAg
ICAgICAgaWYgKCFvYmplY3QpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAg
ICAgICAgICBrZXlBcnJheS5hcHBlbmQoaWRiS2V5RnJvbUluc3BlY3Rvck9iamVjdChvYmplY3Qu
Z2V0KCkpKTsKKyAgICAgICAgICAgIGtleUFycmF5LmFwcGVuZChpZGJLZXlGcm9tSW5zcGVjdG9y
T2JqZWN0KG9iamVjdC5yZWxlYXNlTm9uTnVsbCgpKSk7CiAgICAgICAgIH0KLSAgICAgICAgaWRi
S2V5ID0gSURCS2V5OjpjcmVhdGVBcnJheShrZXlBcnJheSk7Ci0gICAgfSBlbHNlCi0gICAgICAg
IHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gSURCS2V5OjpjcmVhdGVBcnJheShrZXlB
cnJheSk7CisgICAgfQorICAgIH0KIAotICAgIHJldHVybiBpZGJLZXk7CisgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLXN0YXRpYyBSZWZQdHI8SURC
S2V5UmFuZ2U+IGlkYktleVJhbmdlRnJvbUtleVJhbmdlKGNvbnN0IEpTT046Ok9iamVjdCoga2V5
UmFuZ2UpCitzdGF0aWMgUmVmUHRyPElEQktleVJhbmdlPiBpZGJLZXlSYW5nZUZyb21LZXlSYW5n
ZShKU09OOjpPYmplY3QmIGtleVJhbmdlKQogewogICAgIFJlZlB0cjxJREJLZXk+IGlkYkxvd2Vy
OwotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IGxvd2VyOwotICAgIGlmIChrZXlSYW5nZS0+Z2V0
T2JqZWN0KCJsb3dlciJfcywgbG93ZXIpKSB7Ci0gICAgICAgIGlkYkxvd2VyID0gaWRiS2V5RnJv
bUluc3BlY3Rvck9iamVjdChsb3dlci5nZXQoKSk7CisgICAgaWYgKGF1dG8gbG93ZXIgPSBrZXlS
YW5nZS5nZXRPYmplY3QoUHJvdG9jb2w6OkluZGV4ZWREQjo6S2V5UmFuZ2U6Omxvd2VyS2V5KSkg
eworICAgICAgICBpZGJMb3dlciA9IGlkYktleUZyb21JbnNwZWN0b3JPYmplY3QobG93ZXIucmVs
ZWFzZU5vbk51bGwoKSk7CiAgICAgICAgIGlmICghaWRiTG93ZXIpCiAgICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKICAgICB9CiAKICAgICBSZWZQdHI8SURCS2V5PiBpZGJVcHBlcjsKLSAgICBS
ZWZQdHI8SlNPTjo6T2JqZWN0PiB1cHBlcjsKLSAgICBpZiAoa2V5UmFuZ2UtPmdldE9iamVjdCgi
dXBwZXIiX3MsIHVwcGVyKSkgewotICAgICAgICBpZGJVcHBlciA9IGlkYktleUZyb21JbnNwZWN0
b3JPYmplY3QodXBwZXIuZ2V0KCkpOworICAgIGlmIChhdXRvIHVwcGVyID0ga2V5UmFuZ2UuZ2V0
T2JqZWN0KFByb3RvY29sOjpJbmRleGVkREI6OktleVJhbmdlOjp1cHBlcktleSkpIHsKKyAgICAg
ICAgaWRiVXBwZXIgPSBpZGJLZXlGcm9tSW5zcGVjdG9yT2JqZWN0KHVwcGVyLnJlbGVhc2VOb25O
dWxsKCkpOwogICAgICAgICBpZiAoIWlkYlVwcGVyKQogICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAgICAgfQogCi0gICAgYm9vbCBsb3dlck9wZW47Ci0gICAgaWYgKCFrZXlSYW5nZS0+Z2V0
Qm9vbGVhbigibG93ZXJPcGVuIl9zLCBsb3dlck9wZW4pKQorICAgIGF1dG8gbG93ZXJPcGVuID0g
a2V5UmFuZ2UuZ2V0Qm9vbGVhbihQcm90b2NvbDo6SW5kZXhlZERCOjpLZXlSYW5nZTo6bG93ZXJP
cGVuS2V5KTsKKyAgICBpZiAoIWxvd2VyT3BlbikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAK
LSAgICBib29sIHVwcGVyT3BlbjsKLSAgICBpZiAoIWtleVJhbmdlLT5nZXRCb29sZWFuKCJ1cHBl
ck9wZW4iX3MsIHVwcGVyT3BlbikpCisgICAgYXV0byB1cHBlck9wZW4gPSBrZXlSYW5nZS5nZXRC
b29sZWFuKFByb3RvY29sOjpJbmRleGVkREI6OktleVJhbmdlOjp1cHBlck9wZW5LZXkpOworICAg
IGlmICghdXBwZXJPcGVuKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHJldHVybiBJ
REJLZXlSYW5nZTo6Y3JlYXRlKFdURk1vdmUoaWRiTG93ZXIpLCBXVEZNb3ZlKGlkYlVwcGVyKSwg
bG93ZXJPcGVuLCB1cHBlck9wZW4pOworICAgIHJldHVybiBJREJLZXlSYW5nZTo6Y3JlYXRlKFdU
Rk1vdmUoaWRiTG93ZXIpLCBXVEZNb3ZlKGlkYlVwcGVyKSwgKmxvd2VyT3BlbiwgKnVwcGVyT3Bl
bik7CiB9CiAKIGNsYXNzIE9wZW5DdXJzb3JDYWxsYmFjayBmaW5hbCA6IHB1YmxpYyBFdmVudExp
c3RlbmVyIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPE9wZW5DdXJzb3JDYWxsYmFjaz4gY3Jl
YXRlKEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0LCBSZWY8UmVxdWVzdERhdGFDYWxsYmFj
az4mJiByZXF1ZXN0Q2FsbGJhY2ssIGludCBza2lwQ291bnQsIHVuc2lnbmVkIHBhZ2VTaXplKQor
ICAgIHN0YXRpYyBSZWY8T3BlbkN1cnNvckNhbGxiYWNrPiBjcmVhdGUoSW5qZWN0ZWRTY3JpcHQg
aW5qZWN0ZWRTY3JpcHQsIFJlZjxJbmRleGVkREJCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlJl
cXVlc3REYXRhQ2FsbGJhY2s+JiYgcmVxdWVzdENhbGxiYWNrLCBpbnQgc2tpcENvdW50LCB1bnNp
Z25lZCBwYWdlU2l6ZSkKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE9wZW5D
dXJzb3JDYWxsYmFjayhpbmplY3RlZFNjcmlwdCwgV1RGTW92ZShyZXF1ZXN0Q2FsbGJhY2spLCBz
a2lwQ291bnQsIHBhZ2VTaXplKSk7CiAgICAgfQpAQCAtNDA1LDEzICszODksMjMgQEAgcHVibGlj
OgogICAgICAgICB9CiAKICAgICAgICAgYXV0byogbGV4aWNhbEdsb2JhbE9iamVjdCA9IGNvbnRl
eHQuZXhlY1N0YXRlKCk7Ci0gICAgICAgIGF1dG8ga2V5ID0gIHRvSlMoKmxleGljYWxHbG9iYWxP
YmplY3QsICpsZXhpY2FsR2xvYmFsT2JqZWN0LCBjdXJzb3ItPmtleSgpKTsKLSAgICAgICAgYXV0
byBwcmltYXJ5S2V5ID0gdG9KUygqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmxleGljYWxHbG9iYWxP
YmplY3QsIGN1cnNvci0+cHJpbWFyeUtleSgpKTsKLSAgICAgICAgYXV0byB2YWx1ZSA9IGRlc2Vy
aWFsaXplSURCVmFsdWVUb0pTVmFsdWUoKmxleGljYWxHbG9iYWxPYmplY3QsIGN1cnNvci0+dmFs
dWUoKSk7Ci0gICAgICAgIGF1dG8gZGF0YUVudHJ5ID0gRGF0YUVudHJ5OjpjcmVhdGUoKQotICAg
ICAgICAgICAgLnNldEtleShtX2luamVjdGVkU2NyaXB0LndyYXBPYmplY3Qoa2V5LCBTdHJpbmco
KSwgdHJ1ZSkpCi0gICAgICAgICAgICAuc2V0UHJpbWFyeUtleShtX2luamVjdGVkU2NyaXB0Lndy
YXBPYmplY3QocHJpbWFyeUtleSwgU3RyaW5nKCksIHRydWUpKQotICAgICAgICAgICAgLnNldFZh
bHVlKG1faW5qZWN0ZWRTY3JpcHQud3JhcE9iamVjdCh2YWx1ZSwgU3RyaW5nKCksIHRydWUpKQor
CisgICAgICAgIGF1dG8ga2V5ID0gbV9pbmplY3RlZFNjcmlwdC53cmFwT2JqZWN0KHRvSlMoKmxl
eGljYWxHbG9iYWxPYmplY3QsICpsZXhpY2FsR2xvYmFsT2JqZWN0LCBjdXJzb3ItPmtleSgpKSwg
U3RyaW5nKCksIHRydWUpOworICAgICAgICBpZiAoIWtleSkKKyAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICBhdXRvIHByaW1hcnlLZXkgPSBtX2luamVjdGVkU2NyaXB0LndyYXBPYmplY3Qo
dG9KUygqbGV4aWNhbEdsb2JhbE9iamVjdCwgKmxleGljYWxHbG9iYWxPYmplY3QsIGN1cnNvci0+
cHJpbWFyeUtleSgpKSwgU3RyaW5nKCksIHRydWUpOworICAgICAgICBpZiAoIXByaW1hcnlLZXkp
CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgYXV0byB2YWx1ZSA9IG1faW5qZWN0ZWRT
Y3JpcHQud3JhcE9iamVjdChkZXNlcmlhbGl6ZUlEQlZhbHVlVG9KU1ZhbHVlKCpsZXhpY2FsR2xv
YmFsT2JqZWN0LCBjdXJzb3ItPnZhbHVlKCkpLCBTdHJpbmcoKSwgdHJ1ZSk7CisgICAgICAgIGlm
ICghdmFsdWUpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgYXV0byBkYXRhRW50cnkg
PSBQcm90b2NvbDo6SW5kZXhlZERCOjpEYXRhRW50cnk6OmNyZWF0ZSgpCisgICAgICAgICAgICAu
c2V0S2V5KGtleS5yZWxlYXNlTm9uTnVsbCgpKQorICAgICAgICAgICAgLnNldFByaW1hcnlLZXko
cHJpbWFyeUtleS5yZWxlYXNlTm9uTnVsbCgpKQorICAgICAgICAgICAgLnNldFZhbHVlKHZhbHVl
LnJlbGVhc2VOb25OdWxsKCkpCiAgICAgICAgICAgICAucmVsZWFzZSgpOwogICAgICAgICBtX3Jl
c3VsdC0+YWRkSXRlbShXVEZNb3ZlKGRhdGFFbnRyeSkpOwogICAgIH0KQEAgLTQyNCwyNSArNDE4
LDI1IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgT3BlbkN1cnNvckNhbGxiYWNr
KEluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0LCBSZWY8UmVxdWVzdERhdGFDYWxsYmFjaz4m
JiByZXF1ZXN0Q2FsbGJhY2ssIGludCBza2lwQ291bnQsIHVuc2lnbmVkIHBhZ2VTaXplKQorICAg
IE9wZW5DdXJzb3JDYWxsYmFjayhJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdCwgUmVmPElu
ZGV4ZWREQkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UmVxdWVzdERhdGFDYWxsYmFjaz4mJiBy
ZXF1ZXN0Q2FsbGJhY2ssIGludCBza2lwQ291bnQsIHVuc2lnbmVkIHBhZ2VTaXplKQogICAgICAg
ICA6IEV2ZW50TGlzdGVuZXIoRXZlbnRMaXN0ZW5lcjo6Q1BQRXZlbnRMaXN0ZW5lclR5cGUpCiAg
ICAgICAgICwgbV9pbmplY3RlZFNjcmlwdChpbmplY3RlZFNjcmlwdCkKICAgICAgICAgLCBtX3Jl
cXVlc3RDYWxsYmFjayhXVEZNb3ZlKHJlcXVlc3RDYWxsYmFjaykpCi0gICAgICAgICwgbV9yZXN1
bHQoSlNPTjo6QXJyYXlPZjxEYXRhRW50cnk+OjpjcmVhdGUoKSkKKyAgICAgICAgLCBtX3Jlc3Vs
dChKU09OOjpBcnJheU9mPFByb3RvY29sOjpJbmRleGVkREI6OkRhdGFFbnRyeT46OmNyZWF0ZSgp
KQogICAgICAgICAsIG1fc2tpcENvdW50KHNraXBDb3VudCkKICAgICAgICAgLCBtX3BhZ2VTaXpl
KHBhZ2VTaXplKQogICAgIHsKICAgICB9CiAgICAgSW5qZWN0ZWRTY3JpcHQgbV9pbmplY3RlZFNj
cmlwdDsKLSAgICBSZWY8UmVxdWVzdERhdGFDYWxsYmFjaz4gbV9yZXF1ZXN0Q2FsbGJhY2s7Ci0g
ICAgUmVmPEpTT046OkFycmF5T2Y8RGF0YUVudHJ5Pj4gbV9yZXN1bHQ7CisgICAgUmVmPEluZGV4
ZWREQkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6UmVxdWVzdERhdGFDYWxsYmFjaz4gbV9yZXF1
ZXN0Q2FsbGJhY2s7CisgICAgUmVmPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkluZGV4ZWREQjo6
RGF0YUVudHJ5Pj4gbV9yZXN1bHQ7CiAgICAgaW50IG1fc2tpcENvdW50OwogICAgIHVuc2lnbmVk
IG1fcGFnZVNpemU7CiB9OwogCiBjbGFzcyBEYXRhTG9hZGVyIGZpbmFsIDogcHVibGljIEV4ZWN1
dGFibGVXaXRoRGF0YWJhc2UgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8RGF0YUxvYWRlcj4g
Y3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFJlZjxSZXF1ZXN0RGF0YUNh
bGxiYWNrPiYmIHJlcXVlc3RDYWxsYmFjaywgY29uc3QgSW5qZWN0ZWRTY3JpcHQmIGluamVjdGVk
U2NyaXB0LCBjb25zdCBTdHJpbmcmIG9iamVjdFN0b3JlTmFtZSwgY29uc3QgU3RyaW5nJiBpbmRl
eE5hbWUsIFJlZlB0cjxJREJLZXlSYW5nZT4mJiBpZGJLZXlSYW5nZSwgaW50IHNraXBDb3VudCwg
dW5zaWduZWQgcGFnZVNpemUpCisgICAgc3RhdGljIFJlZjxEYXRhTG9hZGVyPiBjcmVhdGUoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUmVmPEluZGV4ZWREQkJhY2tlbmREaXNwYXRj
aGVySGFuZGxlcjo6UmVxdWVzdERhdGFDYWxsYmFjaz4mJiByZXF1ZXN0Q2FsbGJhY2ssIGNvbnN0
IEluamVjdGVkU2NyaXB0JiBpbmplY3RlZFNjcmlwdCwgY29uc3QgU3RyaW5nJiBvYmplY3RTdG9y
ZU5hbWUsIGNvbnN0IFN0cmluZyYgaW5kZXhOYW1lLCBSZWZQdHI8SURCS2V5UmFuZ2U+JiYgaWRi
S2V5UmFuZ2UsIGludCBza2lwQ291bnQsIHVuc2lnbmVkIHBhZ2VTaXplKQogICAgIHsKICAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRGF0YUxvYWRlcihjb250ZXh0LCBXVEZNb3ZlKHJlcXVl
c3RDYWxsYmFjayksIGluamVjdGVkU2NyaXB0LCBvYmplY3RTdG9yZU5hbWUsIGluZGV4TmFtZSwg
V1RGTW92ZShpZGJLZXlSYW5nZSksIHNraXBDb3VudCwgcGFnZVNpemUpKTsKICAgICB9CkBAIC00
OTgsOCArNDkyLDggQEAgcHVibGljOgogICAgICAgICBpZGJSZXF1ZXN0LT5hZGRFdmVudExpc3Rl
bmVyKGV2ZW50TmFtZXMoKS5zdWNjZXNzRXZlbnQsIFdURk1vdmUob3BlbkN1cnNvckNhbGxiYWNr
KSwgZmFsc2UpOwogICAgIH0KIAotICAgIFJlcXVlc3RDYWxsYmFjayYgcmVxdWVzdENhbGxiYWNr
KCkgb3ZlcnJpZGUgeyByZXR1cm4gbV9yZXF1ZXN0Q2FsbGJhY2suZ2V0KCk7IH0KLSAgICBEYXRh
TG9hZGVyKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIFJl
ZjxSZXF1ZXN0RGF0YUNhbGxiYWNrPiYmIHJlcXVlc3RDYWxsYmFjaywgY29uc3QgSW5qZWN0ZWRT
Y3JpcHQmIGluamVjdGVkU2NyaXB0LCBjb25zdCBTdHJpbmcmIG9iamVjdFN0b3JlTmFtZSwgY29u
c3QgU3RyaW5nJiBpbmRleE5hbWUsIFJlZlB0cjxJREJLZXlSYW5nZT4gaWRiS2V5UmFuZ2UsIGlu
dCBza2lwQ291bnQsIHVuc2lnbmVkIHBhZ2VTaXplKQorICAgIEJhY2tlbmREaXNwYXRjaGVyOjpD
YWxsYmFja0Jhc2UmIHJlcXVlc3RDYWxsYmFjaygpIG92ZXJyaWRlIHsgcmV0dXJuIG1fcmVxdWVz
dENhbGxiYWNrLmdldCgpOyB9CisgICAgRGF0YUxvYWRlcihTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBSZWY8SW5kZXhlZERCQmFja2VuZERpc3BhdGNoZXJI
YW5kbGVyOjpSZXF1ZXN0RGF0YUNhbGxiYWNrPiYmIHJlcXVlc3RDYWxsYmFjaywgY29uc3QgSW5q
ZWN0ZWRTY3JpcHQmIGluamVjdGVkU2NyaXB0LCBjb25zdCBTdHJpbmcmIG9iamVjdFN0b3JlTmFt
ZSwgY29uc3QgU3RyaW5nJiBpbmRleE5hbWUsIFJlZlB0cjxJREJLZXlSYW5nZT4gaWRiS2V5UmFu
Z2UsIGludCBza2lwQ291bnQsIHVuc2lnbmVkIHBhZ2VTaXplKQogICAgICAgICA6IEV4ZWN1dGFi
bGVXaXRoRGF0YWJhc2Uoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkKICAgICAgICAgLCBtX3JlcXVl
c3RDYWxsYmFjayhXVEZNb3ZlKHJlcXVlc3RDYWxsYmFjaykpCiAgICAgICAgICwgbV9pbmplY3Rl
ZFNjcmlwdChpbmplY3RlZFNjcmlwdCkKQEAgLTUwOCw3ICs1MDIsNyBAQCBwdWJsaWM6CiAgICAg
ICAgICwgbV9pZGJLZXlSYW5nZShXVEZNb3ZlKGlkYktleVJhbmdlKSkKICAgICAgICAgLCBtX3Nr
aXBDb3VudChza2lwQ291bnQpCiAgICAgICAgICwgbV9wYWdlU2l6ZShwYWdlU2l6ZSkgeyB9Ci0g
ICAgUmVmPFJlcXVlc3REYXRhQ2FsbGJhY2s+IG1fcmVxdWVzdENhbGxiYWNrOworICAgIFJlZjxJ
bmRleGVkREJCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OlJlcXVlc3REYXRhQ2FsbGJhY2s+IG1f
cmVxdWVzdENhbGxiYWNrOwogICAgIEluamVjdGVkU2NyaXB0IG1faW5qZWN0ZWRTY3JpcHQ7CiAg
ICAgU3RyaW5nIG1fb2JqZWN0U3RvcmVOYW1lOwogICAgIFN0cmluZyBtX2luZGV4TmFtZTsKQEAg
LTUzNSwxOSArNTI5LDIwIEBAIHZvaWQgSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQ6OmRpZENyZWF0
ZUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kUm91CiAKIHZvaWQgSW5zcGVj
dG9ySW5kZXhlZERCQWdlbnQ6OndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rv
cjo6RGlzY29ubmVjdFJlYXNvbikKIHsKLSAgICBFcnJvclN0cmluZyBpZ25vcmVkOwotICAgIGRp
c2FibGUoaWdub3JlZCk7CisgICAgZGlzYWJsZSgpOwogfQogCi12b2lkIEluc3BlY3RvckluZGV4
ZWREQkFnZW50OjplbmFibGUoRXJyb3JTdHJpbmcmKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8
dm9pZD4gSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQ6OmVuYWJsZSgpCiB7CisgICAgcmV0dXJuIHsg
fTsKIH0KIAotdm9pZCBJbnNwZWN0b3JJbmRleGVkREJBZ2VudDo6ZGlzYWJsZShFcnJvclN0cmlu
ZyYpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JJbmRleGVkREJBZ2Vu
dDo6ZGlzYWJsZSgpCiB7CisgICAgcmV0dXJuIHsgfTsKIH0KIAotc3RhdGljIEVycm9yU3RyaW5n
T3I8RG9jdW1lbnQqPiBkb2N1bWVudEZyb21GcmFtZShGcmFtZSogZnJhbWUpCitzdGF0aWMgUHJv
dG9jb2w6OkVycm9yU3RyaW5nT3I8RG9jdW1lbnQqPiBkb2N1bWVudEZyb21GcmFtZShGcmFtZSog
ZnJhbWUpCiB7CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gZnJhbWUgPyBmcmFtZS0+ZG9jdW1l
bnQoKSA6IG51bGxwdHI7CiAgICAgaWYgKCFkb2N1bWVudCkKQEAgLTU1Niw3ICs1NTEsNyBAQCBz
dGF0aWMgRXJyb3JTdHJpbmdPcjxEb2N1bWVudCo+IGRvY3VtZW50RnJvbUZyYW1lKEZyYW1lKiBm
cmFtZSkKICAgICByZXR1cm4gZG9jdW1lbnQ7CiB9CiAKLXN0YXRpYyBFcnJvclN0cmluZ09yPElE
QkZhY3RvcnkqPiBJREJGYWN0b3J5RnJvbURvY3VtZW50KERvY3VtZW50KiBkb2N1bWVudCkKK3N0
YXRpYyBQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxJREJGYWN0b3J5Kj4gSURCRmFjdG9yeUZyb21E
b2N1bWVudChEb2N1bWVudCogZG9jdW1lbnQpCiB7CiAgICAgRE9NV2luZG93KiBkb21XaW5kb3cg
PSBkb2N1bWVudC0+ZG9tV2luZG93KCk7CiAgICAgaWYgKCFkb21XaW5kb3cpCkBAIC01NzEsMTMg
KzU2NiwxMyBAQCBzdGF0aWMgRXJyb3JTdHJpbmdPcjxJREJGYWN0b3J5Kj4gSURCRmFjdG9yeUZy
b21Eb2N1bWVudChEb2N1bWVudCogZG9jdW1lbnQpCiAKIHN0YXRpYyBib29sIGdldERvY3VtZW50
QW5kSURCRmFjdG9yeUZyb21GcmFtZU9yU2VuZEZhaWx1cmUoRnJhbWUqIGZyYW1lLCBEb2N1bWVu
dComIG91dF9kb2N1bWVudCwgSURCRmFjdG9yeSomIG91dF9pZGJGYWN0b3J5LCBCYWNrZW5kRGlz
cGF0Y2hlcjo6Q2FsbGJhY2tCYXNlJiBjYWxsYmFjaykKIHsKLSAgICBFcnJvclN0cmluZ09yPERv
Y3VtZW50Kj4gZG9jdW1lbnQgPSBkb2N1bWVudEZyb21GcmFtZShmcmFtZSk7CisgICAgUHJvdG9j
b2w6OkVycm9yU3RyaW5nT3I8RG9jdW1lbnQqPiBkb2N1bWVudCA9IGRvY3VtZW50RnJvbUZyYW1l
KGZyYW1lKTsKICAgICBpZiAoIWRvY3VtZW50Lmhhc192YWx1ZSgpKSB7CiAgICAgICAgIGNhbGxi
YWNrLnNlbmRGYWlsdXJlKGRvY3VtZW50LmVycm9yKCkpOwogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQogCi0gICAgRXJyb3JTdHJpbmdPcjxJREJGYWN0b3J5Kj4gaWRiRmFjdG9yeSA9IElE
QkZhY3RvcnlGcm9tRG9jdW1lbnQoZG9jdW1lbnQudmFsdWUoKSk7CisgICAgUHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8SURCRmFjdG9yeSo+IGlkYkZhY3RvcnkgPSBJREJGYWN0b3J5RnJvbURvY3Vt
ZW50KGRvY3VtZW50LnZhbHVlKCkpOwogICAgIGlmICghaWRiRmFjdG9yeS5oYXNfdmFsdWUoKSkg
ewogICAgICAgICBjYWxsYmFjay5zZW5kRmFpbHVyZShpZGJGYWN0b3J5LmVycm9yKCkpOwogICAg
ICAgICByZXR1cm4gZmFsc2U7CkBAIC02MjAsNyArNjE1LDcgQEAgdm9pZCBJbnNwZWN0b3JJbmRl
eGVkREJBZ2VudDo6cmVxdWVzdERhdGFiYXNlKGNvbnN0IFN0cmluZyYgc2VjdXJpdHlPcmlnaW4s
IGNvbnMKICAgICBkYXRhYmFzZUxvYWRlci0+c3RhcnQoaWRiRmFjdG9yeSwgJmRvY3VtZW50LT5z
ZWN1cml0eU9yaWdpbigpLCBkYXRhYmFzZU5hbWUpOwogfQogCi12b2lkIEluc3BlY3RvckluZGV4
ZWREQkFnZW50OjpyZXF1ZXN0RGF0YShjb25zdCBTdHJpbmcmIHNlY3VyaXR5T3JpZ2luLCBjb25z
dCBTdHJpbmcmIGRhdGFiYXNlTmFtZSwgY29uc3QgU3RyaW5nJiBvYmplY3RTdG9yZU5hbWUsIGNv
bnN0IFN0cmluZyYgaW5kZXhOYW1lLCBpbnQgc2tpcENvdW50LCBpbnQgcGFnZVNpemUsIGNvbnN0
IEpTT046Ok9iamVjdCoga2V5UmFuZ2UsIFJlZjxSZXF1ZXN0RGF0YUNhbGxiYWNrPiYmIGNhbGxi
YWNrKQordm9pZCBJbnNwZWN0b3JJbmRleGVkREJBZ2VudDo6cmVxdWVzdERhdGEoY29uc3QgU3Ry
aW5nJiBzZWN1cml0eU9yaWdpbiwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZU5hbWUsIGNvbnN0IFN0
cmluZyYgb2JqZWN0U3RvcmVOYW1lLCBjb25zdCBTdHJpbmcmIGluZGV4TmFtZSwgaW50IHNraXBD
b3VudCwgaW50IHBhZ2VTaXplLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIGtleVJhbmdlLCBSZWY8
UmVxdWVzdERhdGFDYWxsYmFjaz4mJiBjYWxsYmFjaykKIHsKICAgICBhdXRvKiBmcmFtZSA9IElu
c3BlY3RvclBhZ2VBZ2VudDo6ZmluZEZyYW1lV2l0aFNlY3VyaXR5T3JpZ2luKG1faW5zcGVjdGVk
UGFnZSwgc2VjdXJpdHlPcmlnaW4pOwogICAgIERvY3VtZW50KiBkb2N1bWVudDsKQEAgLTYyOSw3
ICs2MjQsNyBAQCB2b2lkIEluc3BlY3RvckluZGV4ZWREQkFnZW50OjpyZXF1ZXN0RGF0YShjb25z
dCBTdHJpbmcmIHNlY3VyaXR5T3JpZ2luLCBjb25zdCBTdAogICAgICAgICByZXR1cm47CiAKICAg
ICBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdCA9IG1faW5qZWN0ZWRTY3JpcHRNYW5hZ2Vy
LmluamVjdGVkU2NyaXB0Rm9yKG1haW5Xb3JsZEV4ZWNTdGF0ZShmcmFtZSkpOwotICAgIFJlZlB0
cjxJREJLZXlSYW5nZT4gaWRiS2V5UmFuZ2UgPSBrZXlSYW5nZSA/IGlkYktleVJhbmdlRnJvbUtl
eVJhbmdlKGtleVJhbmdlKSA6IG51bGxwdHI7CisgICAgUmVmUHRyPElEQktleVJhbmdlPiBpZGJL
ZXlSYW5nZSA9IGtleVJhbmdlID8gaWRiS2V5UmFuZ2VGcm9tS2V5UmFuZ2UoKmtleVJhbmdlKSA6
IG51bGxwdHI7CiAgICAgaWYgKGtleVJhbmdlICYmICFpZGJLZXlSYW5nZSkgewogICAgICAgICBj
YWxsYmFjay0+c2VuZEZhaWx1cmUoIkNvdWxkIG5vdCBwYXJzZSBrZXkgcmFuZ2UuIl9zKTsKICAg
ICAgICAgcmV0dXJuOwpAQCAtNjQ0LDcgKzYzOSw3IEBAIG5hbWVzcGFjZSB7CiBjbGFzcyBDbGVh
ck9iamVjdFN0b3JlTGlzdGVuZXIgZmluYWwgOiBwdWJsaWMgRXZlbnRMaXN0ZW5lciB7CiAgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoQ2xlYXJPYmplY3RTdG9yZUxpc3RlbmVyKTsKIHB1YmxpYzoK
LSAgICBzdGF0aWMgUmVmPENsZWFyT2JqZWN0U3RvcmVMaXN0ZW5lcj4gY3JlYXRlKFJlZjxDbGVh
ck9iamVjdFN0b3JlQ2FsbGJhY2s+IHJlcXVlc3RDYWxsYmFjaykKKyAgICBzdGF0aWMgUmVmPENs
ZWFyT2JqZWN0U3RvcmVMaXN0ZW5lcj4gY3JlYXRlKFJlZjxJbmRleGVkREJCYWNrZW5kRGlzcGF0
Y2hlckhhbmRsZXI6OkNsZWFyT2JqZWN0U3RvcmVDYWxsYmFjaz4gcmVxdWVzdENhbGxiYWNrKQog
ICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ2xlYXJPYmplY3RTdG9yZUxpc3Rl
bmVyKFdURk1vdmUocmVxdWVzdENhbGxiYWNrKSkpOwogICAgIH0KQEAgLTY2OCwyMyArNjYzLDIz
IEBAIHB1YmxpYzoKICAgICAgICAgbV9yZXF1ZXN0Q2FsbGJhY2stPnNlbmRTdWNjZXNzKCk7CiAg
ICAgfQogcHJpdmF0ZToKLSAgICBDbGVhck9iamVjdFN0b3JlTGlzdGVuZXIoUmVmPENsZWFyT2Jq
ZWN0U3RvcmVDYWxsYmFjaz4mJiByZXF1ZXN0Q2FsbGJhY2spCisgICAgQ2xlYXJPYmplY3RTdG9y
ZUxpc3RlbmVyKFJlZjxJbmRleGVkREJCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkNsZWFyT2Jq
ZWN0U3RvcmVDYWxsYmFjaz4mJiByZXF1ZXN0Q2FsbGJhY2spCiAgICAgICAgIDogRXZlbnRMaXN0
ZW5lcihFdmVudExpc3RlbmVyOjpDUFBFdmVudExpc3RlbmVyVHlwZSkKICAgICAgICAgLCBtX3Jl
cXVlc3RDYWxsYmFjayhXVEZNb3ZlKHJlcXVlc3RDYWxsYmFjaykpCiAgICAgewogICAgIH0KIAot
ICAgIFJlZjxDbGVhck9iamVjdFN0b3JlQ2FsbGJhY2s+IG1fcmVxdWVzdENhbGxiYWNrOworICAg
IFJlZjxJbmRleGVkREJCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkNsZWFyT2JqZWN0U3RvcmVD
YWxsYmFjaz4gbV9yZXF1ZXN0Q2FsbGJhY2s7CiB9OwogCiBjbGFzcyBDbGVhck9iamVjdFN0b3Jl
IGZpbmFsIDogcHVibGljIEV4ZWN1dGFibGVXaXRoRGF0YWJhc2UgewogcHVibGljOgotICAgIHN0
YXRpYyBSZWY8Q2xlYXJPYmplY3RTdG9yZT4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IGNvbnRleHQsIGNvbnN0IFN0cmluZyYgb2JqZWN0U3RvcmVOYW1lLCBSZWY8Q2xlYXJPYmplY3RT
dG9yZUNhbGxiYWNrPiYmIHJlcXVlc3RDYWxsYmFjaykKKyAgICBzdGF0aWMgUmVmPENsZWFyT2Jq
ZWN0U3RvcmU+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBT
dHJpbmcmIG9iamVjdFN0b3JlTmFtZSwgUmVmPEluZGV4ZWREQkJhY2tlbmREaXNwYXRjaGVySGFu
ZGxlcjo6Q2xlYXJPYmplY3RTdG9yZUNhbGxiYWNrPiYmIHJlcXVlc3RDYWxsYmFjaykKICAgICB7
CiAgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENsZWFyT2JqZWN0U3RvcmUoY29udGV4dCwg
b2JqZWN0U3RvcmVOYW1lLCBXVEZNb3ZlKHJlcXVlc3RDYWxsYmFjaykpKTsKICAgICB9CiAKLSAg
ICBDbGVhck9iamVjdFN0b3JlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0
IFN0cmluZyYgb2JqZWN0U3RvcmVOYW1lLCBSZWY8Q2xlYXJPYmplY3RTdG9yZUNhbGxiYWNrPiYm
IHJlcXVlc3RDYWxsYmFjaykKKyAgICBDbGVhck9iamVjdFN0b3JlKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgb2JqZWN0U3RvcmVOYW1lLCBSZWY8SW5kZXhl
ZERCQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpDbGVhck9iamVjdFN0b3JlQ2FsbGJhY2s+JiYg
cmVxdWVzdENhbGxiYWNrKQogICAgICAgICA6IEV4ZWN1dGFibGVXaXRoRGF0YWJhc2UoY29udGV4
dCkKICAgICAgICAgLCBtX29iamVjdFN0b3JlTmFtZShvYmplY3RTdG9yZU5hbWUpCiAgICAgICAg
ICwgbV9yZXF1ZXN0Q2FsbGJhY2soV1RGTW92ZShyZXF1ZXN0Q2FsbGJhY2spKQpAQCAtNzIzLDEw
ICs3MTgsMTAgQEAgcHVibGljOgogICAgICAgICBpZGJUcmFuc2FjdGlvbi0+YWRkRXZlbnRMaXN0
ZW5lcihldmVudE5hbWVzKCkuY29tcGxldGVFdmVudCwgQ2xlYXJPYmplY3RTdG9yZUxpc3RlbmVy
OjpjcmVhdGUobV9yZXF1ZXN0Q2FsbGJhY2suY29weVJlZigpKSwgZmFsc2UpOwogICAgIH0KIAot
ICAgIFJlcXVlc3RDYWxsYmFjayYgcmVxdWVzdENhbGxiYWNrKCkgb3ZlcnJpZGUgeyByZXR1cm4g
bV9yZXF1ZXN0Q2FsbGJhY2suZ2V0KCk7IH0KKyAgICBCYWNrZW5kRGlzcGF0Y2hlcjo6Q2FsbGJh
Y2tCYXNlJiByZXF1ZXN0Q2FsbGJhY2soKSBvdmVycmlkZSB7IHJldHVybiBtX3JlcXVlc3RDYWxs
YmFjay5nZXQoKTsgfQogcHJpdmF0ZToKICAgICBjb25zdCBTdHJpbmcgbV9vYmplY3RTdG9yZU5h
bWU7Ci0gICAgUmVmPENsZWFyT2JqZWN0U3RvcmVDYWxsYmFjaz4gbV9yZXF1ZXN0Q2FsbGJhY2s7
CisgICAgUmVmPEluZGV4ZWREQkJhY2tlbmREaXNwYXRjaGVySGFuZGxlcjo6Q2xlYXJPYmplY3RT
dG9yZUNhbGxiYWNrPiBtX3JlcXVlc3RDYWxsYmFjazsKIH07CiAKIH0gLy8gYW5vbnltb3VzIG5h
bWVzcGFjZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNw
ZWN0b3JJbmRleGVkREJBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9J
bnNwZWN0b3JJbmRleGVkREJBZ2VudC5oCmluZGV4IGRiMjk3YmQ5Y2RhOGRhNmMwNDdhYjgyZmYz
NTBhMmY0ZjU3NDhmZTkuLmU1NDRmOWM2ZjI1MzljNDExNzJkNWM2OTJlNGQyODBlNTQzMDIzOTEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9ySW5k
ZXhlZERCQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3Bl
Y3RvckluZGV4ZWREQkFnZW50LmgKQEAgLTQ1LDI2ICs0NSwyNCBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIGNsYXNzIFBhZ2U7CiAKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCiBjbGFz
cyBJbnNwZWN0b3JJbmRleGVkREJBZ2VudCBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3JBZ2VudEJh
c2UsIHB1YmxpYyBJbnNwZWN0b3I6OkluZGV4ZWREQkJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7
CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQpOwogICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIEluc3BlY3RvckluZGV4ZWRE
QkFnZW50KFBhZ2VBZ2VudENvbnRleHQmKTsKLSAgICB+SW5zcGVjdG9ySW5kZXhlZERCQWdlbnQo
KSBvdmVycmlkZTsKKyAgICB+SW5zcGVjdG9ySW5kZXhlZERCQWdlbnQoKTsKIAogICAgIC8vIElu
c3BlY3RvckFnZW50QmFzZQotICAgIHZvaWQgZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKElu
c3BlY3Rvcjo6RnJvbnRlbmRSb3V0ZXIqLCBJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyKikg
b3ZlcnJpZGU7Ci0gICAgdm9pZCB3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0
b3I6OkRpc2Nvbm5lY3RSZWFzb24pIG92ZXJyaWRlOworICAgIHZvaWQgZGlkQ3JlYXRlRnJvbnRl
bmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRSb3V0ZXIqLCBJbnNwZWN0b3I6OkJhY2tl
bmREaXNwYXRjaGVyKik7CisgICAgdm9pZCB3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJ
bnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24pOwogCiAgICAgLy8gSW5kZXhlZERCQmFja2VuZERp
c3BhdGNoZXJIYW5kbGVyCi0gICAgdm9pZCBlbmFibGUoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsK
LSAgICB2b2lkIGRpc2FibGUoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2b2lkIHJlcXVl
c3REYXRhYmFzZU5hbWVzKGNvbnN0IFN0cmluZyYgc2VjdXJpdHlPcmlnaW4sIFJlZjxSZXF1ZXN0
RGF0YWJhc2VOYW1lc0NhbGxiYWNrPiYmKSBvdmVycmlkZTsKLSAgICB2b2lkIHJlcXVlc3REYXRh
YmFzZShjb25zdCBTdHJpbmcmIHNlY3VyaXR5T3JpZ2luLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNl
TmFtZSwgUmVmPFJlcXVlc3REYXRhYmFzZUNhbGxiYWNrPiYmKSBvdmVycmlkZTsKLSAgICB2b2lk
IHJlcXVlc3REYXRhKGNvbnN0IFN0cmluZyYgc2VjdXJpdHlPcmlnaW4sIGNvbnN0IFN0cmluZyYg
ZGF0YWJhc2VOYW1lLCBjb25zdCBTdHJpbmcmIG9iamVjdFN0b3JlTmFtZSwgY29uc3QgU3RyaW5n
JiBpbmRleE5hbWUsIGludCBza2lwQ291bnQsIGludCBwYWdlU2l6ZSwgY29uc3QgSlNPTjo6T2Jq
ZWN0KiBrZXlSYW5nZSwgUmVmPFJlcXVlc3REYXRhQ2FsbGJhY2s+JiYpIG92ZXJyaWRlOwotICAg
IHZvaWQgY2xlYXJPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIHNlY3VyaXR5T3JpZ2luLCBjb25z
dCBTdHJpbmcmIGRhdGFiYXNlTmFtZSwgY29uc3QgU3RyaW5nJiBvYmplY3RTdG9yZU5hbWUsIFJl
ZjxDbGVhck9iamVjdFN0b3JlQ2FsbGJhY2s+JiYpIG92ZXJyaWRlOworICAgIEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZW5hYmxlKCk7CisgICAgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBkaXNhYmxlKCk7CisgICAgdm9pZCByZXF1ZXN0
RGF0YWJhc2VOYW1lcyhjb25zdCBTdHJpbmcmIHNlY3VyaXR5T3JpZ2luLCBSZWY8UmVxdWVzdERh
dGFiYXNlTmFtZXNDYWxsYmFjaz4mJik7CisgICAgdm9pZCByZXF1ZXN0RGF0YWJhc2UoY29uc3Qg
U3RyaW5nJiBzZWN1cml0eU9yaWdpbiwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZU5hbWUsIFJlZjxS
ZXF1ZXN0RGF0YWJhc2VDYWxsYmFjaz4mJik7CisgICAgdm9pZCByZXF1ZXN0RGF0YShjb25zdCBT
dHJpbmcmIHNlY3VyaXR5T3JpZ2luLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlTmFtZSwgY29uc3Qg
U3RyaW5nJiBvYmplY3RTdG9yZU5hbWUsIGNvbnN0IFN0cmluZyYgaW5kZXhOYW1lLCBpbnQgc2tp
cENvdW50LCBpbnQgcGFnZVNpemUsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYga2V5UmFuZ2UsIFJl
ZjxSZXF1ZXN0RGF0YUNhbGxiYWNrPiYmKTsKKyAgICB2b2lkIGNsZWFyT2JqZWN0U3RvcmUoY29u
c3QgU3RyaW5nJiBzZWN1cml0eU9yaWdpbiwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZU5hbWUsIGNv
bnN0IFN0cmluZyYgb2JqZWN0U3RvcmVOYW1lLCBSZWY8Q2xlYXJPYmplY3RTdG9yZUNhbGxiYWNr
PiYmKTsKIAogcHJpdmF0ZToKICAgICBJbnNwZWN0b3I6OkluamVjdGVkU2NyaXB0TWFuYWdlciYg
bV9pbmplY3RlZFNjcmlwdE1hbmFnZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvYWdlbnRzL0luc3BlY3RvckxheWVyVHJlZUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQuY3BwCmluZGV4IGJiOTk0
YmY5OWZjMjUxNjY5ZjhkNzNhNGRmMGI1NWVjMGY1NmM2MTMuLjUyZDNmZDcwZjZhMjk5ZDlhZjA0
NjkyNGY0YmFlM2RkNWQ2MGIxMWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9hZ2VudHMvSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQuY3BwCkBAIC02MSw4ICs2
MSw3IEBAIHZvaWQgSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OmRpZENyZWF0ZUZyb250ZW5kQW5k
QmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kUm91CiAKIHZvaWQgSW5zcGVjdG9yTGF5ZXJUcmVl
QWdlbnQ6OndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlzY29ubmVj
dFJlYXNvbikKIHsKLSAgICBFcnJvclN0cmluZyBpZ25vcmVkOwotICAgIGRpc2FibGUoaWdub3Jl
ZCk7CisgICAgZGlzYWJsZSgpOwogfQogCiB2b2lkIEluc3BlY3RvckxheWVyVHJlZUFnZW50Ojpy
ZXNldCgpCkBAIC03NCwxNiArNzMsMjAgQEAgdm9pZCBJbnNwZWN0b3JMYXllclRyZWVBZ2VudDo6
cmVzZXQoKQogICAgIG1fc3VwcHJlc3NMYXllckNoYW5nZUV2ZW50cyA9IGZhbHNlOwogfQogCi12
b2lkIEluc3BlY3RvckxheWVyVHJlZUFnZW50OjplbmFibGUoRXJyb3JTdHJpbmcmKQorUHJvdG9j
b2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OmVuYWJsZSgp
CiB7CiAgICAgbV9pbnN0cnVtZW50aW5nQWdlbnRzLnNldEVuYWJsZWRMYXllclRyZWVBZ2VudCh0
aGlzKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yTGF5ZXJUcmVlQWdl
bnQ6OmRpc2FibGUoRXJyb3JTdHJpbmcmKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4g
SW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OmRpc2FibGUoKQogewogICAgIG1faW5zdHJ1bWVudGlu
Z0FnZW50cy5zZXRFbmFibGVkTGF5ZXJUcmVlQWdlbnQobnVsbHB0cik7CiAKICAgICByZXNldCgp
OworCisgICAgcmV0dXJuIHsgfTsKIH0KIAogdm9pZCBJbnNwZWN0b3JMYXllclRyZWVBZ2VudDo6
bGF5ZXJUcmVlRGlkQ2hhbmdlKCkKQEAgLTEwNiw1MSArMTA5LDQ5IEBAIHZvaWQgSW5zcGVjdG9y
TGF5ZXJUcmVlQWdlbnQ6OnBzZXVkb0VsZW1lbnREZXN0cm95ZWQoUHNldWRvRWxlbWVudCYgcHNl
dWRvRWxlbWVuCiAgICAgdW5iaW5kUHNldWRvRWxlbWVudCgmcHNldWRvRWxlbWVudCk7CiB9CiAK
LXZvaWQgSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OmxheWVyc0Zvck5vZGUoRXJyb3JTdHJpbmcm
IGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6
OlByb3RvY29sOjpMYXllclRyZWU6OkxheWVyPj4mIGxheWVycykKK1Byb3RvY29sOjpFcnJvclN0
cmluZ09yPFJlZjxKU09OOjpBcnJheU9mPFByb3RvY29sOjpMYXllclRyZWU6OkxheWVyPj4+IElu
c3BlY3RvckxheWVyVHJlZUFnZW50OjpsYXllcnNGb3JOb2RlKFByb3RvY29sOjpET006Ok5vZGVJ
ZCBub2RlSWQpCiB7Ci0gICAgbGF5ZXJzID0gSlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpMYXllclRyZWU6OkxheWVyPjo6Y3JlYXRlKCk7Ci0KICAgICBhdXRvKiBub2RlID0gbV9p
bnN0cnVtZW50aW5nQWdlbnRzLnBlcnNpc3RlbnRET01BZ2VudCgpLT5ub2RlRm9ySWQobm9kZUlk
KTsKLSAgICBpZiAoIW5vZGUpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWlzc2luZyBub2Rl
IGZvciBnaXZlbiBub2RlSWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKCFu
b2RlKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk1pc3Npbmcgbm9kZSBmb3IgZ2l2
ZW4gbm9kZUlkIl9zKTsKIAogICAgIGF1dG8qIHJlbmRlcmVyID0gbm9kZS0+cmVuZGVyZXIoKTsK
LSAgICBpZiAoIXJlbmRlcmVyKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIk1pc3NpbmcgcmVu
ZGVyZXIgb2Ygbm9kZSBmb3IgZ2l2ZW4gbm9kZUlkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAg
fQorICAgIGlmICghcmVuZGVyZXIpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTWlz
c2luZyByZW5kZXJlciBvZiBub2RlIGZvciBnaXZlbiBub2RlSWQiX3MpOwogCiAgICAgaWYgKCFp
czxSZW5kZXJFbGVtZW50PigqcmVuZGVyZXIpKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJl
dHVybiBtYWtlVW5leHBlY3RlZCgiTWlzc2luZyByZW5kZXJlciBvZiBlbGVtZW50IGZvciBnaXZl
biBub2RlSWQiX3MpOwogCi0gICAgZ2F0aGVyTGF5ZXJzVXNpbmdSZW5kZXJPYmplY3RIaWVyYXJj
aHkoZXJyb3JTdHJpbmcsIGRvd25jYXN0PFJlbmRlckVsZW1lbnQ+KCpyZW5kZXJlciksIGxheWVy
cyk7CisgICAgYXV0byBsYXllcnMgPSBKU09OOjpBcnJheU9mPFByb3RvY29sOjpMYXllclRyZWU6
OkxheWVyPjo6Y3JlYXRlKCk7CisKKyAgICBnYXRoZXJMYXllcnNVc2luZ1JlbmRlck9iamVjdEhp
ZXJhcmNoeShkb3duY2FzdDxSZW5kZXJFbGVtZW50PigqcmVuZGVyZXIpLCBsYXllcnMpOwogCiAg
ICAgbV9zdXBwcmVzc0xheWVyQ2hhbmdlRXZlbnRzID0gZmFsc2U7CisKKyAgICByZXR1cm4gV1RG
TW92ZShsYXllcnMpOwogfQogCi12b2lkIEluc3BlY3RvckxheWVyVHJlZUFnZW50OjpnYXRoZXJM
YXllcnNVc2luZ1JlbmRlck9iamVjdEhpZXJhcmNoeShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcs
IFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6
OlByb3RvY29sOjpMYXllclRyZWU6OkxheWVyPj4mIGxheWVycykKK3ZvaWQgSW5zcGVjdG9yTGF5
ZXJUcmVlQWdlbnQ6OmdhdGhlckxheWVyc1VzaW5nUmVuZGVyT2JqZWN0SGllcmFyY2h5KFJlbmRl
ckVsZW1lbnQmIHJlbmRlcmVyLCBKU09OOjpBcnJheU9mPFByb3RvY29sOjpMYXllclRyZWU6Okxh
eWVyPiYgbGF5ZXJzKQogewogICAgIGlmIChyZW5kZXJlci5oYXNMYXllcigpKSB7Ci0gICAgICAg
IGdhdGhlckxheWVyc1VzaW5nUmVuZGVyTGF5ZXJIaWVyYXJjaHkoZXJyb3JTdHJpbmcsIGRvd25j
YXN0PFJlbmRlckxheWVyTW9kZWxPYmplY3Q+KHJlbmRlcmVyKS5sYXllcigpLCBsYXllcnMpOwor
ICAgICAgICBnYXRoZXJMYXllcnNVc2luZ1JlbmRlckxheWVySGllcmFyY2h5KGRvd25jYXN0PFJl
bmRlckxheWVyTW9kZWxPYmplY3Q+KHJlbmRlcmVyKS5sYXllcigpLCBsYXllcnMpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCiAgICAgZm9yIChhdXRvJiBjaGlsZCA6IGNoaWxkcmVuT2ZUeXBl
PFJlbmRlckVsZW1lbnQ+KHJlbmRlcmVyKSkKLSAgICAgICAgZ2F0aGVyTGF5ZXJzVXNpbmdSZW5k
ZXJPYmplY3RIaWVyYXJjaHkoZXJyb3JTdHJpbmcsIGNoaWxkLCBsYXllcnMpOworICAgICAgICBn
YXRoZXJMYXllcnNVc2luZ1JlbmRlck9iamVjdEhpZXJhcmNoeShjaGlsZCwgbGF5ZXJzKTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JMYXllclRyZWVBZ2VudDo6Z2F0aGVyTGF5ZXJzVXNpbmdSZW5kZXJM
YXllckhpZXJhcmNoeShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIFJlbmRlckxheWVyKiByZW5k
ZXJMYXllciwgUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6TGF5ZXJU
cmVlOjpMYXllcj4+JiBsYXllcnMpCit2b2lkIEluc3BlY3RvckxheWVyVHJlZUFnZW50OjpnYXRo
ZXJMYXllcnNVc2luZ1JlbmRlckxheWVySGllcmFyY2h5KFJlbmRlckxheWVyKiByZW5kZXJMYXll
ciwgSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6TGF5ZXJUcmVlOjpMYXllcj4mIGxheWVycykKIHsK
ICAgICBpZiAocmVuZGVyTGF5ZXItPmlzQ29tcG9zaXRlZCgpKQotICAgICAgICBsYXllcnMtPmFk
ZEl0ZW0oYnVpbGRPYmplY3RGb3JMYXllcihlcnJvclN0cmluZywgcmVuZGVyTGF5ZXIpKTsKKyAg
ICAgICAgbGF5ZXJzLmFkZEl0ZW0oYnVpbGRPYmplY3RGb3JMYXllcihyZW5kZXJMYXllcikpOwog
CiAgICAgZm9yIChyZW5kZXJMYXllciA9IHJlbmRlckxheWVyLT5maXJzdENoaWxkKCk7IHJlbmRl
ckxheWVyOyByZW5kZXJMYXllciA9IHJlbmRlckxheWVyLT5uZXh0U2libGluZygpKQotICAgICAg
ICBnYXRoZXJMYXllcnNVc2luZ1JlbmRlckxheWVySGllcmFyY2h5KGVycm9yU3RyaW5nLCByZW5k
ZXJMYXllciwgbGF5ZXJzKTsKKyAgICAgICAgZ2F0aGVyTGF5ZXJzVXNpbmdSZW5kZXJMYXllckhp
ZXJhcmNoeShyZW5kZXJMYXllciwgbGF5ZXJzKTsKIH0KIAotUmVmPEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkxheWVyVHJlZTo6TGF5ZXI+IEluc3BlY3RvckxheWVyVHJlZUFnZW50OjpidWlsZE9iamVj
dEZvckxheWVyKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgUmVuZGVyTGF5ZXIqIHJlbmRlckxh
eWVyKQorUmVmPFByb3RvY29sOjpMYXllclRyZWU6OkxheWVyPiBJbnNwZWN0b3JMYXllclRyZWVB
Z2VudDo6YnVpbGRPYmplY3RGb3JMYXllcihSZW5kZXJMYXllciogcmVuZGVyTGF5ZXIpCiB7CiAg
ICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9ICZyZW5kZXJMYXllci0+cmVuZGVyZXIoKTsKICAg
ICBSZW5kZXJMYXllckJhY2tpbmcqIGJhY2tpbmcgPSByZW5kZXJMYXllci0+YmFja2luZygpOwpA
QCAtMTcwLDkgKzE3MSw5IEBAIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpMYXllclRyZWU6Okxh
eWVyPiBJbnNwZWN0b3JMYXllclRyZWVBZ2VudDo6YnVpbGRPYmplY3RGCiAgICAgICAgIG5vZGUg
PSByZW5kZXJlci0+cGFyZW50KCktPmVsZW1lbnQoKTsKIAogICAgIC8vIEJhc2ljIHNldCBvZiBw
cm9wZXJ0aWVzLgotICAgIGF1dG8gbGF5ZXJPYmplY3QgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpM
YXllclRyZWU6OkxheWVyOjpjcmVhdGUoKQorICAgIGF1dG8gbGF5ZXJPYmplY3QgPSBQcm90b2Nv
bDo6TGF5ZXJUcmVlOjpMYXllcjo6Y3JlYXRlKCkKICAgICAgICAgLnNldExheWVySWQoYmluZChy
ZW5kZXJMYXllcikpCi0gICAgICAgIC5zZXROb2RlSWQoaWRGb3JOb2RlKGVycm9yU3RyaW5nLCBu
b2RlKSkKKyAgICAgICAgLnNldE5vZGVJZChpZEZvck5vZGUobm9kZSkpCiAgICAgICAgIC5zZXRC
b3VuZHMoYnVpbGRPYmplY3RGb3JJbnRSZWN0KHJlbmRlcmVyLT5hYnNvbHV0ZUJvdW5kaW5nQm94
UmVjdCgpKSkKICAgICAgICAgLnNldE1lbW9yeShiYWNraW5nLT5iYWNraW5nU3RvcmVNZW1vcnlF
c3RpbWF0ZSgpKQogICAgICAgICAuc2V0Q29tcG9zaXRlZEJvdW5kcyhidWlsZE9iamVjdEZvcklu
dFJlY3QoZW5jbG9zaW5nSW50UmVjdChiYWNraW5nLT5jb21wb3NpdGVkQm91bmRzKCkpKSkKQEAg
LTIwOSwyNSArMjEwLDI1IEBAIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpMYXllclRyZWU6Okxh
eWVyPiBJbnNwZWN0b3JMYXllclRyZWVBZ2VudDo6YnVpbGRPYmplY3RGCiAgICAgcmV0dXJuIGxh
eWVyT2JqZWN0OwogfQogCi1pbnQgSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OmlkRm9yTm9kZShF
cnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIE5vZGUqIG5vZGUpCitQcm90b2NvbDo6RE9NOjpOb2Rl
SWQgSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OmlkRm9yTm9kZShOb2RlKiBub2RlKQogewogICAg
IGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBJbnNwZWN0b3JET01BZ2VudCog
ZG9tQWdlbnQgPSBtX2luc3RydW1lbnRpbmdBZ2VudHMucGVyc2lzdGVudERPTUFnZW50KCk7CiAg
ICAgCi0gICAgaW50IG5vZGVJZCA9IGRvbUFnZW50LT5ib3VuZE5vZGVJZChub2RlKTsKKyAgICBh
dXRvIG5vZGVJZCA9IGRvbUFnZW50LT5ib3VuZE5vZGVJZChub2RlKTsKICAgICBpZiAoIW5vZGVJ
ZCkgewogICAgICAgICAvLyBGSVhNRTogPGh0dHBzOi8vd2Via2l0Lm9yZy9iLzIxMzQ5OT4gV2Vi
IEluc3BlY3RvcjogYWxsb3cgRE9NIG5vZGVzIHRvIGJlIGluc3RydW1lbnRlZCBhdCBhbnkgcG9p
bnQsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGUgbWFpbiBkb2N1bWVudCBoYXMgYWxzbyBiZWVu
IGluc3RydW1lbnRlZAotICAgICAgICBub2RlSWQgPSBkb21BZ2VudC0+cHVzaE5vZGVUb0Zyb250
ZW5kKGVycm9yU3RyaW5nLCBkb21BZ2VudC0+Ym91bmROb2RlSWQoJm5vZGUtPmRvY3VtZW50KCkp
LCBub2RlKTsKKyAgICAgICAgbm9kZUlkID0gZG9tQWdlbnQtPnB1c2hOb2RlVG9Gcm9udGVuZChu
b2RlKTsKICAgICB9CiAKICAgICByZXR1cm4gbm9kZUlkOwogfQogCi1SZWY8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6TGF5ZXJUcmVlOjpJbnRSZWN0PiBJbnNwZWN0b3JMYXllclRyZWVBZ2VudDo6YnVp
bGRPYmplY3RGb3JJbnRSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCitSZWY8UHJvdG9jb2w6Okxh
eWVyVHJlZTo6SW50UmVjdD4gSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9y
SW50UmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQogewotICAgIHJldHVybiBJbnNwZWN0b3I6OlBy
b3RvY29sOjpMYXllclRyZWU6OkludFJlY3Q6OmNyZWF0ZSgpCisgICAgcmV0dXJuIFByb3RvY29s
OjpMYXllclRyZWU6OkludFJlY3Q6OmNyZWF0ZSgpCiAgICAgICAgIC5zZXRYKHJlY3QueCgpKQog
ICAgICAgICAuc2V0WShyZWN0LnkoKSkKICAgICAgICAgLnNldFdpZHRoKHJlY3Qud2lkdGgoKSkK
QEAgLTIzNSwxNyArMjM2LDE1IEBAIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpMYXllclRyZWU6
OkludFJlY3Q+IEluc3BlY3RvckxheWVyVHJlZUFnZW50OjpidWlsZE9iamVjCiAgICAgICAgIC5y
ZWxlYXNlKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OnJlYXNvbnNGb3JD
b21wb3NpdGluZ0xheWVyKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBs
YXllcklkLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6TGF5ZXJUcmVlOjpDb21wb3NpdGlu
Z1JlYXNvbnM+JiBjb21wb3NpdGluZ1JlYXNvbnNSZXN1bHQpCitQcm90b2NvbDo6RXJyb3JTdHJp
bmdPcjxSZWY8UHJvdG9jb2w6OkxheWVyVHJlZTo6Q29tcG9zaXRpbmdSZWFzb25zPj4gSW5zcGVj
dG9yTGF5ZXJUcmVlQWdlbnQ6OnJlYXNvbnNGb3JDb21wb3NpdGluZ0xheWVyKGNvbnN0IFByb3Rv
Y29sOjpMYXllclRyZWU6OkxheWVySWQmIGxheWVySWQpCiB7CiAgICAgY29uc3QgUmVuZGVyTGF5
ZXIqIHJlbmRlckxheWVyID0gbV9pZFRvTGF5ZXIuZ2V0KGxheWVySWQpOwogCi0gICAgaWYgKCFy
ZW5kZXJMYXllcikgewotICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIHJlbmRlciBsYXll
ciBmb3IgZ2l2ZW4gbGF5ZXJJZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAo
IXJlbmRlckxheWVyKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk1pc3NpbmcgcmVu
ZGVyIGxheWVyIGZvciBnaXZlbiBsYXllcklkIl9zKTsKIAogICAgIE9wdGlvblNldDxDb21wb3Np
dGluZ1JlYXNvbj4gcmVhc29ucyA9IHJlbmRlckxheWVyLT5jb21wb3NpdG9yKCkucmVhc29uc0Zv
ckNvbXBvc2l0aW5nKCpyZW5kZXJMYXllcik7Ci0gICAgYXV0byBjb21wb3NpdGluZ1JlYXNvbnMg
PSBJbnNwZWN0b3I6OlByb3RvY29sOjpMYXllclRyZWU6OkNvbXBvc2l0aW5nUmVhc29uczo6Y3Jl
YXRlKCkucmVsZWFzZSgpOworICAgIGF1dG8gY29tcG9zaXRpbmdSZWFzb25zID0gUHJvdG9jb2w6
OkxheWVyVHJlZTo6Q29tcG9zaXRpbmdSZWFzb25zOjpjcmVhdGUoKS5yZWxlYXNlKCk7CiAKICAg
ICBpZiAocmVhc29ucy5jb250YWlucyhDb21wb3NpdGluZ1JlYXNvbjo6VHJhbnNmb3JtM0QpKQog
ICAgICAgICBjb21wb3NpdGluZ1JlYXNvbnMtPnNldFRyYW5zZm9ybTNEKHRydWUpOwpAQCAtMzI0
LDcgKzMyMyw3IEBAIHZvaWQgSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQ6OnJlYXNvbnNGb3JDb21w
b3NpdGluZ0xheWVyKEVycm9yU3RyaW5nJiBlcnJvclN0cmluCiAgICAgaWYgKHJlYXNvbnMuY29u
dGFpbnMoQ29tcG9zaXRpbmdSZWFzb246OlJvb3QpKQogICAgICAgICBjb21wb3NpdGluZ1JlYXNv
bnMtPnNldFJvb3QodHJ1ZSk7CiAKLSAgICBjb21wb3NpdGluZ1JlYXNvbnNSZXN1bHQgPSBXVEZN
b3ZlKGNvbXBvc2l0aW5nUmVhc29ucyk7CisgICAgcmV0dXJuIFdURk1vdmUoY29tcG9zaXRpbmdS
ZWFzb25zKTsKIH0KIAogU3RyaW5nIEluc3BlY3RvckxheWVyVHJlZUFnZW50OjpiaW5kKGNvbnN0
IFJlbmRlckxheWVyKiBsYXllcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9hZ2VudHMvSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9hZ2VudHMvSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQuaAppbmRleCA4NzIzNTgwYzY1MzAx
MGUxZWVhNjBkNDBlOWNkOWQ3MzIzNThkOWZiLi41ZjExNTMxY2M2NDQ0MjlmNDhkMWQ2ZDgxNTUx
ZGQ4NGI5Zjk0Y2NjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRz
L0luc3BlY3RvckxheWVyVHJlZUFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2FnZW50cy9JbnNwZWN0b3JMYXllclRyZWVBZ2VudC5oCkBAIC00MiwyNCArNDIsMjIgQEAgY2xh
c3MgUHNldWRvRWxlbWVudDsKIGNsYXNzIFJlbmRlckVsZW1lbnQ7CiBjbGFzcyBSZW5kZXJMYXll
cjsKIAotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7Ci0KIGNsYXNzIEluc3BlY3RvckxheWVy
VHJlZUFnZW50IGZpbmFsIDogcHVibGljIEluc3BlY3RvckFnZW50QmFzZSwgcHVibGljIEluc3Bl
Y3Rvcjo6TGF5ZXJUcmVlQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKICAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShJbnNwZWN0b3JMYXllclRyZWVBZ2VudCk7CiAgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgSW5zcGVjdG9yTGF5ZXJUcmVlQWdlbnQoV2ViQWdlbnRD
b250ZXh0Jik7Ci0gICAgfkluc3BlY3RvckxheWVyVHJlZUFnZW50KCkgb3ZlcnJpZGU7CisgICAg
fkluc3BlY3RvckxheWVyVHJlZUFnZW50KCk7CiAKICAgICAvLyBJbnNwZWN0b3JBZ2VudEJhc2UK
LSAgICB2b2lkIGRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5k
Um91dGVyKiwgSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlciopIG92ZXJyaWRlOwotICAgIHZv
aWQgd2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVh
c29uKSBvdmVycmlkZTsKKyAgICB2b2lkIGRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJbnNw
ZWN0b3I6OkZyb250ZW5kUm91dGVyKiwgSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlciopOwor
ICAgIHZvaWQgd2lsbERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25u
ZWN0UmVhc29uKTsKIAogICAgIC8vIExheWVyVHJlZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcgot
ICAgIHZvaWQgZW5hYmxlKEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkaXNhYmxl
KEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBsYXllcnNGb3JOb2RlKEVycm9yU3Ry
aW5nJiwgaW50IG5vZGVJZCwgUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6TGF5ZXJUcmVlOjpMYXllcj4+Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZWFzb25zRm9yQ29t
cG9zaXRpbmdMYXllcihFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgbGF5ZXJJZCwgUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkxheWVyVHJlZTo6Q29tcG9zaXRpbmdSZWFzb25zPiYpIG92
ZXJyaWRlOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZW5h
YmxlKCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBkaXNh
YmxlKCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SlNPTjo6
QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpMYXllclRyZWU6OkxheWVyPj4+IGxheWVyc0Zv
ck5vZGUoSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQpOworICAgIEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkxheWVyVHJl
ZTo6Q29tcG9zaXRpbmdSZWFzb25zPj4gcmVhc29uc0ZvckNvbXBvc2l0aW5nTGF5ZXIoY29uc3Qg
SW5zcGVjdG9yOjpQcm90b2NvbDo6TGF5ZXJUcmVlOjpMYXllcklkJik7CiAKICAgICAvLyBJbnNw
ZWN0b3JJbnN0cnVtZW50YXRpb24KICAgICB2b2lkIGxheWVyVHJlZURpZENoYW5nZSgpOwpAQCAt
NzIsMTMgKzcwLDEzIEBAIHByaXZhdGU6CiAgICAgU3RyaW5nIGJpbmQoY29uc3QgUmVuZGVyTGF5
ZXIqKTsKICAgICB2b2lkIHVuYmluZChjb25zdCBSZW5kZXJMYXllciopOwogCi0gICAgdm9pZCBn
YXRoZXJMYXllcnNVc2luZ1JlbmRlck9iamVjdEhpZXJhcmNoeShFcnJvclN0cmluZyYsIFJlbmRl
ckVsZW1lbnQmLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpMYXll
clRyZWU6OkxheWVyPj4mKTsKLSAgICB2b2lkIGdhdGhlckxheWVyc1VzaW5nUmVuZGVyTGF5ZXJI
aWVyYXJjaHkoRXJyb3JTdHJpbmcmLCBSZW5kZXJMYXllciosIFJlZlB0cjxKU09OOjpBcnJheU9m
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkxheWVyVHJlZTo6TGF5ZXI+PiYpOworICAgIHZvaWQgZ2F0
aGVyTGF5ZXJzVXNpbmdSZW5kZXJPYmplY3RIaWVyYXJjaHkoUmVuZGVyRWxlbWVudCYsIEpTT046
OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6TGF5ZXJUcmVlOjpMYXllcj4mKTsKKyAgICB2
b2lkIGdhdGhlckxheWVyc1VzaW5nUmVuZGVyTGF5ZXJIaWVyYXJjaHkoUmVuZGVyTGF5ZXIqLCBK
U09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkxheWVyVHJlZTo6TGF5ZXI+Jik7CiAK
LSAgICBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6TGF5ZXJUcmVlOjpMYXllcj4gYnVpbGRPYmpl
Y3RGb3JMYXllcihFcnJvclN0cmluZyYsIFJlbmRlckxheWVyKik7CisgICAgUmVmPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkxheWVyVHJlZTo6TGF5ZXI+IGJ1aWxkT2JqZWN0Rm9yTGF5ZXIoUmVuZGVy
TGF5ZXIqKTsKICAgICBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6TGF5ZXJUcmVlOjpJbnRSZWN0
PiBidWlsZE9iamVjdEZvckludFJlY3QoY29uc3QgSW50UmVjdCYpOwogCi0gICAgaW50IGlkRm9y
Tm9kZShFcnJvclN0cmluZyYsIE5vZGUqKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpET006
Ok5vZGVJZCBpZEZvck5vZGUoTm9kZSopOwogCiAgICAgU3RyaW5nIGJpbmRQc2V1ZG9FbGVtZW50
KFBzZXVkb0VsZW1lbnQqKTsKICAgICB2b2lkIHVuYmluZFBzZXVkb0VsZW1lbnQoUHNldWRvRWxl
bWVudCopOwpAQCAtODYsMTEgKzg0LDExIEBAIHByaXZhdGU6CiAgICAgc3RkOjp1bmlxdWVfcHRy
PEluc3BlY3Rvcjo6TGF5ZXJUcmVlRnJvbnRlbmREaXNwYXRjaGVyPiBtX2Zyb250ZW5kRGlzcGF0
Y2hlcjsKICAgICBSZWZQdHI8SW5zcGVjdG9yOjpMYXllclRyZWVCYWNrZW5kRGlzcGF0Y2hlcj4g
bV9iYWNrZW5kRGlzcGF0Y2hlcjsKIAotICAgIEhhc2hNYXA8Y29uc3QgUmVuZGVyTGF5ZXIqLCBT
dHJpbmc+IG1fZG9jdW1lbnRMYXllclRvSWRNYXA7Ci0gICAgSGFzaE1hcDxTdHJpbmcsIGNvbnN0
IFJlbmRlckxheWVyKj4gbV9pZFRvTGF5ZXI7CisgICAgSGFzaE1hcDxjb25zdCBSZW5kZXJMYXll
ciosIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkxheWVyVHJlZTo6TGF5ZXJJZD4gbV9kb2N1bWVudExh
eWVyVG9JZE1hcDsKKyAgICBIYXNoTWFwPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkxheWVyVHJlZTo6
TGF5ZXJJZCwgY29uc3QgUmVuZGVyTGF5ZXIqPiBtX2lkVG9MYXllcjsKIAotICAgIEhhc2hNYXA8
UHNldWRvRWxlbWVudCosIFN0cmluZz4gbV9wc2V1ZG9FbGVtZW50VG9JZE1hcDsKLSAgICBIYXNo
TWFwPFN0cmluZywgUHNldWRvRWxlbWVudCo+IG1faWRUb1BzZXVkb0VsZW1lbnQ7CisgICAgSGFz
aE1hcDxQc2V1ZG9FbGVtZW50KiwgSW5zcGVjdG9yOjpQcm90b2NvbDo6TGF5ZXJUcmVlOjpQc2V1
ZG9FbGVtZW50SWQ+IG1fcHNldWRvRWxlbWVudFRvSWRNYXA7CisgICAgSGFzaE1hcDxJbnNwZWN0
b3I6OlByb3RvY29sOjpMYXllclRyZWU6OlBzZXVkb0VsZW1lbnRJZCwgUHNldWRvRWxlbWVudCo+
IG1faWRUb1BzZXVkb0VsZW1lbnQ7CiAKICAgICBib29sIG1fc3VwcHJlc3NMYXllckNoYW5nZUV2
ZW50cyB7IGZhbHNlIH07CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2FnZW50cy9JbnNwZWN0b3JNZW1vcnlBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvYWdlbnRzL0luc3BlY3Rvck1lbW9yeUFnZW50LmNwcAppbmRleCBkMGU4YWE2ODgzMzY1OWU2
NGFmZTU1MzQ3Y2I1NmY3NzNlYjdkN2E1Li4xNGNlNjcwOTZhMjQyNDQ5NGM1OTI0NjYwODZhMWQx
ZTI4Nzc0MTA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0lu
c3BlY3Rvck1lbW9yeUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdl
bnRzL0luc3BlY3Rvck1lbW9yeUFnZW50LmNwcApAQCAtNTQsNDAgKzU0LDM5IEBAIHZvaWQgSW5z
cGVjdG9yTWVtb3J5QWdlbnQ6OmRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChGcm9udGVuZFJv
dXRlciosIEJhY2tlbmRECiAKIHZvaWQgSW5zcGVjdG9yTWVtb3J5QWdlbnQ6OndpbGxEZXN0cm95
RnJvbnRlbmRBbmRCYWNrZW5kKERpc2Nvbm5lY3RSZWFzb24pCiB7Ci0gICAgRXJyb3JTdHJpbmcg
aWdub3JlZDsKLSAgICBkaXNhYmxlKGlnbm9yZWQpOworICAgIGRpc2FibGUoKTsKIAogICAgIG1f
aW5zdHJ1bWVudGluZ0FnZW50cy5zZXRQZXJzaXN0ZW50TWVtb3J5QWdlbnQobnVsbHB0cik7CiB9
CiAKLXZvaWQgSW5zcGVjdG9yTWVtb3J5QWdlbnQ6OmVuYWJsZShFcnJvclN0cmluZyYgZXJyb3JT
dHJpbmcpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JNZW1vcnlBZ2Vu
dDo6ZW5hYmxlKCkKIHsKLSAgICBpZiAobV9pbnN0cnVtZW50aW5nQWdlbnRzLmVuYWJsZWRNZW1v
cnlBZ2VudCgpID09IHRoaXMpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWVtb3J5IGRvbWFp
biBhbHJlYWR5IGVuYWJsZWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKG1f
aW5zdHJ1bWVudGluZ0FnZW50cy5lbmFibGVkTWVtb3J5QWdlbnQoKSA9PSB0aGlzKQorICAgICAg
ICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk1lbW9yeSBkb21haW4gYWxyZWFkeSBlbmFibGVkIl9z
KTsKIAogICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy5zZXRFbmFibGVkTWVtb3J5QWdlbnQodGhp
cyk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3Rvck1lbW9yeUFnZW50Ojpk
aXNhYmxlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09y
PHZvaWQ+IEluc3BlY3Rvck1lbW9yeUFnZW50OjpkaXNhYmxlKCkKIHsKLSAgICBpZiAobV9pbnN0
cnVtZW50aW5nQWdlbnRzLmVuYWJsZWRNZW1vcnlBZ2VudCgpICE9IHRoaXMpIHsKLSAgICAgICAg
ZXJyb3JTdHJpbmcgPSAiTWVtb3J5IGRvbWFpbiBhbHJlYWR5IGRpc2FibGVkIl9zOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQorICAgIGlmIChtX2luc3RydW1lbnRpbmdBZ2VudHMuZW5hYmxlZE1l
bW9yeUFnZW50KCkgIT0gdGhpcykKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJNZW1v
cnkgZG9tYWluIGFscmVhZHkgZGlzYWJsZWQiX3MpOwogCiAgICAgbV9pbnN0cnVtZW50aW5nQWdl
bnRzLnNldEVuYWJsZWRNZW1vcnlBZ2VudChudWxscHRyKTsKIAogICAgIG1fdHJhY2tpbmcgPSBm
YWxzZTsKIAogICAgIFJlc291cmNlVXNhZ2VUaHJlYWQ6OnJlbW92ZU9ic2VydmVyKHRoaXMpOwor
CisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JNZW1vcnlBZ2VudDo6c3RhcnRU
cmFja2luZyhFcnJvclN0cmluZyYpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNw
ZWN0b3JNZW1vcnlBZ2VudDo6c3RhcnRUcmFja2luZygpCiB7CiAgICAgaWYgKG1fdHJhY2tpbmcp
Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAogICAgIFJlc291cmNlVXNh
Z2VUaHJlYWQ6OmFkZE9ic2VydmVyKHRoaXMsIE1lbW9yeSwgW3RoaXNdIChjb25zdCBSZXNvdXJj
ZVVzYWdlRGF0YSYgZGF0YSkgewogICAgICAgICBjb2xsZWN0U2FtcGxlKGRhdGEpOwpAQCAtOTYs
MjQgKzk1LDI4IEBAIHZvaWQgSW5zcGVjdG9yTWVtb3J5QWdlbnQ6OnN0YXJ0VHJhY2tpbmcoRXJy
b3JTdHJpbmcmKQogICAgIG1fdHJhY2tpbmcgPSB0cnVlOwogCiAgICAgbV9mcm9udGVuZERpc3Bh
dGNoZXItPnRyYWNraW5nU3RhcnQobV9lbnZpcm9ubWVudC5leGVjdXRpb25TdG9wd2F0Y2goKS5l
bGFwc2VkVGltZSgpLnNlY29uZHMoKSk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIElu
c3BlY3Rvck1lbW9yeUFnZW50OjpzdG9wVHJhY2tpbmcoRXJyb3JTdHJpbmcmKQorUHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yTWVtb3J5QWdlbnQ6OnN0b3BUcmFja2luZygp
CiB7CiAgICAgaWYgKCFtX3RyYWNraW5nKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVy
biB7IH07CiAKICAgICBSZXNvdXJjZVVzYWdlVGhyZWFkOjpyZW1vdmVPYnNlcnZlcih0aGlzKTsK
IAogICAgIG1fdHJhY2tpbmcgPSBmYWxzZTsKIAogICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT50
cmFja2luZ0NvbXBsZXRlKG1fZW52aXJvbm1lbnQuZXhlY3V0aW9uU3RvcHdhdGNoKCkuZWxhcHNl
ZFRpbWUoKS5zZWNvbmRzKCkpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAogdm9pZCBJbnNwZWN0
b3JNZW1vcnlBZ2VudDo6ZGlkSGFuZGxlTWVtb3J5UHJlc3N1cmUoQ3JpdGljYWwgY3JpdGljYWwp
CiB7CiAgICAgTWVtb3J5RnJvbnRlbmREaXNwYXRjaGVyOjpTZXZlcml0eSBzZXZlcml0eSA9IGNy
aXRpY2FsID09IENyaXRpY2FsOjpZZXMgPyBNZW1vcnlGcm9udGVuZERpc3BhdGNoZXI6OlNldmVy
aXR5OjpDcml0aWNhbCA6IE1lbW9yeUZyb250ZW5kRGlzcGF0Y2hlcjo6U2V2ZXJpdHk6Ok5vbkNy
aXRpY2FsOwotICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5tZW1vcnlQcmVzc3VyZShtX2Vudmly
b25tZW50LmV4ZWN1dGlvblN0b3B3YXRjaCgpLmVsYXBzZWRUaW1lKCkuc2Vjb25kcygpLCBzZXZl
cml0eSk7CisgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPm1lbW9yeVByZXNzdXJlKG1fZW52aXJv
bm1lbnQuZXhlY3V0aW9uU3RvcHdhdGNoKCkuZWxhcHNlZFRpbWUoKS5zZWNvbmRzKCksIFByb3Rv
Y29sOjpIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShzZXZlcml0eSkpOwogfQogCiB2b2lk
IEluc3BlY3Rvck1lbW9yeUFnZW50Ojpjb2xsZWN0U2FtcGxlKGNvbnN0IFJlc291cmNlVXNhZ2VE
YXRhJiBkYXRhKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9J
bnNwZWN0b3JNZW1vcnlBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9J
bnNwZWN0b3JNZW1vcnlBZ2VudC5oCmluZGV4IGM0NDc3MmRiZWFiZjkxMTRjZmE0NDdmZTk2ZTg0
ZTNkMmI1MjYyOGUuLjFhNzY0MDhlZjkzYzk2MWI1YTAwYWFjMWY5MjVhODkzNjQzMjk0NzMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yTWVtb3J5
QWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rvck1l
bW9yeUFnZW50LmgKQEAgLTM1LDI0ICszNSwyMiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwotCiBjbGFzcyBJbnNwZWN0b3JNZW1vcnlBZ2Vu
dCBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3JBZ2VudEJhc2UsIHB1YmxpYyBJbnNwZWN0b3I6Ok1l
bW9yeUJhY2tlbmREaXNwYXRjaGVySGFuZGxlciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
SW5zcGVjdG9yTWVtb3J5QWdlbnQpOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVi
bGljOgogICAgIEluc3BlY3Rvck1lbW9yeUFnZW50KFBhZ2VBZ2VudENvbnRleHQmKTsKLSAgICB+
SW5zcGVjdG9yTWVtb3J5QWdlbnQoKSBvdmVycmlkZTsKKyAgICB+SW5zcGVjdG9yTWVtb3J5QWdl
bnQoKTsKIAogICAgIC8vIEluc3BlY3RvckFnZW50QmFzZQotICAgIHZvaWQgZGlkQ3JlYXRlRnJv
bnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRSb3V0ZXIqLCBJbnNwZWN0b3I6OkJh
Y2tlbmREaXNwYXRjaGVyKikgb3ZlcnJpZGU7Ci0gICAgdm9pZCB3aWxsRGVzdHJveUZyb250ZW5k
QW5kQmFja2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24pIG92ZXJyaWRlOworICAgIHZv
aWQgZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRSb3V0ZXIq
LCBJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyKik7CisgICAgdm9pZCB3aWxsRGVzdHJveUZy
b250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24pOwogCiAgICAgLy8g
TWVtb3J5QmFja2VuZERpc3BhdGNoZXJIYW5kbGVyCi0gICAgdm9pZCBlbmFibGUoRXJyb3JTdHJp
bmcmKSBvdmVycmlkZTsKLSAgICB2b2lkIGRpc2FibGUoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsK
LSAgICB2b2lkIHN0YXJ0VHJhY2tpbmcoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2b2lk
IHN0b3BUcmFja2luZyhFcnJvclN0cmluZyYpIG92ZXJyaWRlOworICAgIEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZW5hYmxlKCk7CisgICAgSW5zcGVjdG9yOjpQcm90
b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBkaXNhYmxlKCk7CisgICAgSW5zcGVjdG9yOjpQcm90
b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzdGFydFRyYWNraW5nKCk7CisgICAgSW5zcGVjdG9y
OjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzdG9wVHJhY2tpbmcoKTsKIAogICAgIC8v
IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbgogICAgIHZvaWQgZGlkSGFuZGxlTWVtb3J5UHJlc3N1
cmUoQ3JpdGljYWwpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50
cy9JbnNwZWN0b3JOZXR3b3JrQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Fn
ZW50cy9JbnNwZWN0b3JOZXR3b3JrQWdlbnQuY3BwCmluZGV4IDA5ZjI3N2YxOTVkMzU2Y2Y2ZDMx
NGZiZjcyY2ZjYmVhZDY2N2UxNWMuLjU3NTM4MmU0MzkwZGQzMWRiZjQwNGZjNzI2NjJiMjIwNjA3
MWM3ZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVj
dG9yTmV0d29ya0FnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRz
L0luc3BlY3Rvck5ldHdvcmtBZ2VudC5jcHAKQEAgLTE3Miw5ICsxNzIsOSBAQCBwcml2YXRlOgog
ICAgIGludCBtX3N0YXR1c0NvZGU7CiB9OwogCi1SZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0
d29yazo6V2ViU29ja2V0RnJhbWU+IGJ1aWxkV2ViU29ja2V0TWVzc2FnZShjb25zdCBXZWJTb2Nr
ZXRGcmFtZSYgZnJhbWUpCitSZWY8UHJvdG9jb2w6Ok5ldHdvcms6OldlYlNvY2tldEZyYW1lPiBi
dWlsZFdlYlNvY2tldE1lc3NhZ2UoY29uc3QgV2ViU29ja2V0RnJhbWUmIGZyYW1lKQogewotICAg
IHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpXZWJTb2NrZXRGcmFtZTo6Y3Jl
YXRlKCkKKyAgICByZXR1cm4gUHJvdG9jb2w6Ok5ldHdvcms6OldlYlNvY2tldEZyYW1lOjpjcmVh
dGUoKQogICAgICAgICAuc2V0T3Bjb2RlKGZyYW1lLm9wQ29kZSkKICAgICAgICAgLnNldE1hc2so
ZnJhbWUubWFza2VkKQogICAgICAgICAuc2V0UGF5bG9hZERhdGEoZnJhbWUub3BDb2RlID09IDEg
PyBTdHJpbmc6OmZyb21VVEY4V2l0aExhdGluMUZhbGxiYWNrKGZyYW1lLnBheWxvYWQsIGZyYW1l
LnBheWxvYWRMZW5ndGgpIDogYmFzZTY0RW5jb2RlKGZyYW1lLnBheWxvYWQsIGZyYW1lLnBheWxv
YWRMZW5ndGgpKQpAQCAtMjAxLDIwICsyMDEsMjEgQEAgdm9pZCBJbnNwZWN0b3JOZXR3b3JrQWdl
bnQ6OmRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kUm91dGUK
IAogdm9pZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNr
ZW5kKEluc3BlY3Rvcjo6RGlzY29ubmVjdFJlYXNvbikKIHsKLSAgICBFcnJvclN0cmluZyBpZ25v
cmVkOwotICAgIGRpc2FibGUoaWdub3JlZCk7CisgICAgZGlzYWJsZSgpOwogfQogCi1zdGF0aWMg
UmVmPEpTT046Ok9iamVjdD4gYnVpbGRPYmplY3RGb3JIZWFkZXJzKGNvbnN0IEhUVFBIZWFkZXJN
YXAmIGhlYWRlcnMpCitzdGF0aWMgUmVmPFByb3RvY29sOjpOZXR3b3JrOjpIZWFkZXJzPiBidWls
ZE9iamVjdEZvckhlYWRlcnMoY29uc3QgSFRUUEhlYWRlck1hcCYgaGVhZGVycykKIHsKLSAgICBS
ZWY8SlNPTjo6T2JqZWN0PiBoZWFkZXJzT2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsK
KyAgICBhdXRvIGhlYWRlcnNWYWx1ZSA9IFByb3RvY29sOjpOZXR3b3JrOjpIZWFkZXJzOjpjcmVh
dGUoKS5yZWxlYXNlKCk7CiAKKyAgICBhdXRvIGhlYWRlcnNPYmplY3QgPSBoZWFkZXJzVmFsdWUt
PmFzT2JqZWN0KCk7CiAgICAgZm9yIChjb25zdCBhdXRvJiBoZWFkZXIgOiBoZWFkZXJzKQogICAg
ICAgICBoZWFkZXJzT2JqZWN0LT5zZXRTdHJpbmcoaGVhZGVyLmtleSwgaGVhZGVyLnZhbHVlKTsK
LSAgICByZXR1cm4gaGVhZGVyc09iamVjdDsKKworICAgIHJldHVybiBoZWFkZXJzVmFsdWU7CiB9
CiAKLVJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpSZXNvdXJjZVRpbWluZz4gSW5z
cGVjdG9yTmV0d29ya0FnZW50OjpidWlsZE9iamVjdEZvclRpbWluZyhjb25zdCBOZXR3b3JrTG9h
ZE1ldHJpY3MqIHRpbWluZywgUmVzb3VyY2VMb2FkZXImIHJlc291cmNlTG9hZGVyKQorUmVmPFBy
b3RvY29sOjpOZXR3b3JrOjpSZXNvdXJjZVRpbWluZz4gSW5zcGVjdG9yTmV0d29ya0FnZW50Ojpi
dWlsZE9iamVjdEZvclRpbWluZyhjb25zdCBOZXR3b3JrTG9hZE1ldHJpY3MqIHRpbWluZywgUmVz
b3VyY2VMb2FkZXImIHJlc291cmNlTG9hZGVyKQogewogICAgIGF1dG8mIGxvYWRUaW1pbmcgPSBy
ZXNvdXJjZUxvYWRlci5sb2FkVGltaW5nKCk7CiAKQEAgLTIyNyw3ICsyMjgsNyBAQCBSZWY8SW5z
cGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6UmVzb3VyY2VUaW1pbmc+IEluc3BlY3Rvck5ldHdv
cmtBZ2VudDo6YnVpbGRPYgogICAgICAgICB0aW1pbmcgPSAmZW1wdHkudmFsdWUoKTsKICAgICB9
CiAKLSAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6UmVzb3VyY2VUaW1p
bmc6OmNyZWF0ZSgpCisgICAgcmV0dXJuIFByb3RvY29sOjpOZXR3b3JrOjpSZXNvdXJjZVRpbWlu
Zzo6Y3JlYXRlKCkKICAgICAgICAgLnNldFN0YXJ0VGltZShlbGFwc2VkVGltZVNpbmNlKGxvYWRU
aW1pbmcuc3RhcnRUaW1lKCkpKQogICAgICAgICAuc2V0UmVkaXJlY3RTdGFydChlbGFwc2VkVGlt
ZVNpbmNlKGxvYWRUaW1pbmcucmVkaXJlY3RTdGFydCgpKSkKICAgICAgICAgLnNldFJlZGlyZWN0
RW5kKGVsYXBzZWRUaW1lU2luY2UobG9hZFRpbWluZy5yZWRpcmVjdEVuZCgpKSkKQEAgLTI0Mywy
NiArMjQ0LDI2IEBAIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpSZXNvdXJjZVRp
bWluZz4gSW5zcGVjdG9yTmV0d29ya0FnZW50OjpidWlsZE9iCiAgICAgICAgIC5yZWxlYXNlKCk7
CiB9CiAKLXN0YXRpYyBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpNZXRyaWNzOjpQcmlv
cml0eSB0b1Byb3RvY29sKE5ldHdvcmtMb2FkUHJpb3JpdHkgcHJpb3JpdHkpCitzdGF0aWMgUHJv
dG9jb2w6Ok5ldHdvcms6Ok1ldHJpY3M6OlByaW9yaXR5IHRvUHJvdG9jb2woTmV0d29ya0xvYWRQ
cmlvcml0eSBwcmlvcml0eSkKIHsKICAgICBzd2l0Y2ggKHByaW9yaXR5KSB7CiAgICAgY2FzZSBO
ZXR3b3JrTG9hZFByaW9yaXR5OjpMb3c6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpOZXR3b3JrOjpNZXRyaWNzOjpQcmlvcml0eTo6TG93OworICAgICAgICByZXR1cm4gUHJv
dG9jb2w6Ok5ldHdvcms6Ok1ldHJpY3M6OlByaW9yaXR5OjpMb3c7CiAgICAgY2FzZSBOZXR3b3Jr
TG9hZFByaW9yaXR5OjpNZWRpdW06Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29s
OjpOZXR3b3JrOjpNZXRyaWNzOjpQcmlvcml0eTo6TWVkaXVtOworICAgICAgICByZXR1cm4gUHJv
dG9jb2w6Ok5ldHdvcms6Ok1ldHJpY3M6OlByaW9yaXR5OjpNZWRpdW07CiAgICAgY2FzZSBOZXR3
b3JrTG9hZFByaW9yaXR5OjpIaWdoOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2Nv
bDo6TmV0d29yazo6TWV0cmljczo6UHJpb3JpdHk6OkhpZ2g7CisgICAgICAgIHJldHVybiBQcm90
b2NvbDo6TmV0d29yazo6TWV0cmljczo6UHJpb3JpdHk6OkhpZ2g7CiAgICAgY2FzZSBOZXR3b3Jr
TG9hZFByaW9yaXR5OjpVbmtub3duOgogICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29y
azo6TWV0cmljczo6UHJpb3JpdHk6Ok1lZGl1bTsKKyAgICByZXR1cm4gUHJvdG9jb2w6Ok5ldHdv
cms6Ok1ldHJpY3M6OlByaW9yaXR5OjpNZWRpdW07CiB9CiAKLVJlZjxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpOZXR3b3JrOjpNZXRyaWNzPiBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmJ1aWxkT2JqZWN0
Rm9yTWV0cmljcyhjb25zdCBOZXR3b3JrTG9hZE1ldHJpY3MmIG5ldHdvcmtMb2FkTWV0cmljcykK
K1JlZjxQcm90b2NvbDo6TmV0d29yazo6TWV0cmljcz4gSW5zcGVjdG9yTmV0d29ya0FnZW50Ojpi
dWlsZE9iamVjdEZvck1ldHJpY3MoY29uc3QgTmV0d29ya0xvYWRNZXRyaWNzJiBuZXR3b3JrTG9h
ZE1ldHJpY3MpCiB7Ci0gICAgYXV0byBtZXRyaWNzID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0
d29yazo6TWV0cmljczo6Y3JlYXRlKCkucmVsZWFzZSgpOworICAgIGF1dG8gbWV0cmljcyA9IFBy
b3RvY29sOjpOZXR3b3JrOjpNZXRyaWNzOjpjcmVhdGUoKS5yZWxlYXNlKCk7CiAKICAgICBpZiAo
IW5ldHdvcmtMb2FkTWV0cmljcy5wcm90b2NvbC5pc051bGwoKSkKICAgICAgICAgbWV0cmljcy0+
c2V0UHJvdG9jb2wobmV0d29ya0xvYWRNZXRyaWNzLnByb3RvY29sKTsKQEAgLTI4Niw3ICsyODcs
NyBAQCBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6TWV0cmljcz4gSW5zcGVjdG9y
TmV0d29ya0FnZW50OjpidWlsZE9iamVjdEZvcgogICAgIGlmIChuZXR3b3JrTG9hZE1ldHJpY3Mu
cmVzcG9uc2VCb2R5RGVjb2RlZFNpemUgIT0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50NjRfdD46
Om1heCgpKQogICAgICAgICBtZXRyaWNzLT5zZXRSZXNwb25zZUJvZHlEZWNvZGVkU2l6ZShuZXR3
b3JrTG9hZE1ldHJpY3MucmVzcG9uc2VCb2R5RGVjb2RlZFNpemUpOwogCi0gICAgYXV0byBjb25u
ZWN0aW9uUGF5bG9hZCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlNlY3VyaXR5OjpDb25uZWN0aW9u
OjpjcmVhdGUoKQorICAgIGF1dG8gY29ubmVjdGlvblBheWxvYWQgPSBQcm90b2NvbDo6U2VjdXJp
dHk6OkNvbm5lY3Rpb246OmNyZWF0ZSgpCiAgICAgICAgIC5yZWxlYXNlKCk7CiAKICAgICBpZiAo
IW5ldHdvcmtMb2FkTWV0cmljcy50bHNQcm90b2NvbC5pc0VtcHR5KCkpCkBAIC0zMDAsOSArMzAx
LDkgQEAgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6Ok1ldHJpY3M+IEluc3BlY3Rv
ck5ldHdvcmtBZ2VudDo6YnVpbGRPYmplY3RGb3IKICAgICByZXR1cm4gbWV0cmljczsKIH0KIAot
c3RhdGljIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpSZXF1ZXN0PiBidWlsZE9i
amVjdEZvclJlc291cmNlUmVxdWVzdChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCitz
dGF0aWMgUmVmPFByb3RvY29sOjpOZXR3b3JrOjpSZXF1ZXN0PiBidWlsZE9iamVjdEZvclJlc291
cmNlUmVxdWVzdChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCiB7Ci0gICAgYXV0byBy
ZXF1ZXN0T2JqZWN0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6UmVxdWVzdDo6Y3Jl
YXRlKCkKKyAgICBhdXRvIHJlcXVlc3RPYmplY3QgPSBQcm90b2NvbDo6TmV0d29yazo6UmVxdWVz
dDo6Y3JlYXRlKCkKICAgICAgICAgLnNldFVybChyZXF1ZXN0LnVybCgpLnN0cmluZygpKQogICAg
ICAgICAuc2V0TWV0aG9kKHJlcXVlc3QuaHR0cE1ldGhvZCgpKQogICAgICAgICAuc2V0SGVhZGVy
cyhidWlsZE9iamVjdEZvckhlYWRlcnMocmVxdWVzdC5odHRwSGVhZGVyRmllbGRzKCkpKQpAQCAt
MzE0LDQ0ICszMTUsNDIgQEAgc3RhdGljIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3Jr
OjpSZXF1ZXN0PiBidWlsZE9iamVjdEZvclJlc291cmNlUmVxdWVzdCgKICAgICByZXR1cm4gcmVx
dWVzdE9iamVjdDsKIH0KIAotc3RhdGljIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OlJl
c3BvbnNlOjpTb3VyY2UgcmVzcG9uc2VTb3VyY2UoUmVzb3VyY2VSZXNwb25zZTo6U291cmNlIHNv
dXJjZSkKK3N0YXRpYyBQcm90b2NvbDo6TmV0d29yazo6UmVzcG9uc2U6OlNvdXJjZSByZXNwb25z
ZVNvdXJjZShSZXNvdXJjZVJlc3BvbnNlOjpTb3VyY2Ugc291cmNlKQogewogICAgIHN3aXRjaCAo
c291cmNlKSB7CiAgICAgY2FzZSBSZXNvdXJjZVJlc3BvbnNlOjpTb3VyY2U6OkRPTUNhY2hlOgog
ICAgIGNhc2UgUmVzb3VyY2VSZXNwb25zZTo6U291cmNlOjpBcHBsaWNhdGlvbkNhY2hlOgogICAg
ICAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yIEFwcGxpY2F0aW9uQ2FjaGUgaW4gaW5zcGVj
dG9yLgogICAgIGNhc2UgUmVzb3VyY2VSZXNwb25zZTo6U291cmNlOjpVbmtub3duOgotICAgICAg
ICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6UmVzcG9uc2U6OlNvdXJjZTo6
VW5rbm93bjsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpOZXR3b3JrOjpSZXNwb25zZTo6U291
cmNlOjpVbmtub3duOwogICAgIGNhc2UgUmVzb3VyY2VSZXNwb25zZTo6U291cmNlOjpOZXR3b3Jr
OgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6UmVzcG9uc2U6
OlNvdXJjZTo6TmV0d29yazsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpOZXR3b3JrOjpSZXNw
b25zZTo6U291cmNlOjpOZXR3b3JrOwogICAgIGNhc2UgUmVzb3VyY2VSZXNwb25zZTo6U291cmNl
OjpNZW1vcnlDYWNoZToKICAgICBjYXNlIFJlc291cmNlUmVzcG9uc2U6OlNvdXJjZTo6TWVtb3J5
Q2FjaGVBZnRlclZhbGlkYXRpb246Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29s
OjpOZXR3b3JrOjpSZXNwb25zZTo6U291cmNlOjpNZW1vcnlDYWNoZTsKKyAgICAgICAgcmV0dXJu
IFByb3RvY29sOjpOZXR3b3JrOjpSZXNwb25zZTo6U291cmNlOjpNZW1vcnlDYWNoZTsKICAgICBj
YXNlIFJlc291cmNlUmVzcG9uc2U6OlNvdXJjZTo6RGlza0NhY2hlOgogICAgIGNhc2UgUmVzb3Vy
Y2VSZXNwb25zZTo6U291cmNlOjpEaXNrQ2FjaGVBZnRlclZhbGlkYXRpb246Ci0gICAgICAgIHJl
dHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpSZXNwb25zZTo6U291cmNlOjpEaXNr
Q2FjaGU7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6TmV0d29yazo6UmVzcG9uc2U6OlNvdXJj
ZTo6RGlza0NhY2hlOwogICAgIGNhc2UgUmVzb3VyY2VSZXNwb25zZTo6U291cmNlOjpTZXJ2aWNl
V29ya2VyOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6UmVz
cG9uc2U6OlNvdXJjZTo6U2VydmljZVdvcmtlcjsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpO
ZXR3b3JrOjpSZXNwb25zZTo6U291cmNlOjpTZXJ2aWNlV29ya2VyOwogICAgIGNhc2UgUmVzb3Vy
Y2VSZXNwb25zZTo6U291cmNlOjpJbnNwZWN0b3JPdmVycmlkZToKLSAgICAgICAgcmV0dXJuIElu
c3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OlJlc3BvbnNlOjpTb3VyY2U6Okluc3BlY3Rvck92
ZXJyaWRlOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6Ok5ldHdvcms6OlJlc3BvbnNlOjpTb3Vy
Y2U6Okluc3BlY3Rvck92ZXJyaWRlOwogICAgIH0KIAogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpSZXNwb25zZTo6U291
cmNlOjpVbmtub3duOworICAgIHJldHVybiBQcm90b2NvbDo6TmV0d29yazo6UmVzcG9uc2U6OlNv
dXJjZTo6VW5rbm93bjsKIH0KIAotUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6
OlJlc3BvbnNlPiBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yUmVzb3VyY2VS
ZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwgUmVzb3VyY2VMb2FkZXIq
IHJlc291cmNlTG9hZGVyKQorUmVmUHRyPFByb3RvY29sOjpOZXR3b3JrOjpSZXNwb25zZT4gSW5z
cGVjdG9yTmV0d29ya0FnZW50OjpidWlsZE9iamVjdEZvclJlc291cmNlUmVzcG9uc2UoY29uc3Qg
UmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIFJlc291cmNlTG9hZGVyKiByZXNvdXJjZUxvYWRl
cikKIHsKICAgICBpZiAocmVzcG9uc2UuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBudWxscHRy
OwogCi0gICAgUmVmPEpTT046Ok9iamVjdD4gaGVhZGVycyA9IGJ1aWxkT2JqZWN0Rm9ySGVhZGVy
cyhyZXNwb25zZS5odHRwSGVhZGVyRmllbGRzKCkpOwotCi0gICAgYXV0byByZXNwb25zZU9iamVj
dCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OlJlc3BvbnNlOjpjcmVhdGUoKQorICAg
IGF1dG8gcmVzcG9uc2VPYmplY3QgPSBQcm90b2NvbDo6TmV0d29yazo6UmVzcG9uc2U6OmNyZWF0
ZSgpCiAgICAgICAgIC5zZXRVcmwocmVzcG9uc2UudXJsKCkuc3RyaW5nKCkpCiAgICAgICAgIC5z
ZXRTdGF0dXMocmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKSkKICAgICAgICAgLnNldFN0YXR1c1Rl
eHQocmVzcG9uc2UuaHR0cFN0YXR1c1RleHQoKSkKLSAgICAgICAgLnNldEhlYWRlcnMoV1RGTW92
ZShoZWFkZXJzKSkKKyAgICAgICAgLnNldEhlYWRlcnMoYnVpbGRPYmplY3RGb3JIZWFkZXJzKHJl
c3BvbnNlLmh0dHBIZWFkZXJGaWVsZHMoKSkpCiAgICAgICAgIC5zZXRNaW1lVHlwZShyZXNwb25z
ZS5taW1lVHlwZSgpKQogICAgICAgICAuc2V0U291cmNlKHJlc3BvbnNlU291cmNlKHJlc3BvbnNl
LnNvdXJjZSgpKSkKICAgICAgICAgLnJlbGVhc2UoKTsKQEAgLTM2MCwxMSArMzU5LDExIEBAIFJl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpSZXNwb25zZT4gSW5zcGVjdG9yTmV0
d29ya0FnZW50OjpidWlsZE9iamVjCiAgICAgICAgIHJlc3BvbnNlT2JqZWN0LT5zZXRUaW1pbmco
YnVpbGRPYmplY3RGb3JUaW1pbmcocmVzcG9uc2UuZGVwcmVjYXRlZE5ldHdvcmtMb2FkTWV0cmlj
c09yTnVsbCgpLCAqcmVzb3VyY2VMb2FkZXIpKTsKIAogICAgIGlmIChhdXRvJiBjZXJ0aWZpY2F0
ZUluZm8gPSByZXNwb25zZS5jZXJ0aWZpY2F0ZUluZm8oKSkgewotICAgICAgICBhdXRvIHNlY3Vy
aXR5UGF5bG9hZCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlNlY3VyaXR5OjpTZWN1cml0eTo6Y3Jl
YXRlKCkKKyAgICAgICAgYXV0byBzZWN1cml0eVBheWxvYWQgPSBQcm90b2NvbDo6U2VjdXJpdHk6
OlNlY3VyaXR5OjpjcmVhdGUoKQogICAgICAgICAgICAgLnJlbGVhc2UoKTsKIAogICAgICAgICBp
ZiAoYXV0byBjZXJ0aWZpY2F0ZVN1bW1hcnlJbmZvID0gY2VydGlmaWNhdGVJbmZvLnZhbHVlKCku
c3VtbWFyeSgpKSB7Ci0gICAgICAgICAgICBhdXRvIGNlcnRpZmljYXRlUGF5bG9hZCA9IEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlNlY3VyaXR5OjpDZXJ0aWZpY2F0ZTo6Y3JlYXRlKCkKKyAgICAgICAg
ICAgIGF1dG8gY2VydGlmaWNhdGVQYXlsb2FkID0gUHJvdG9jb2w6OlNlY3VyaXR5OjpDZXJ0aWZp
Y2F0ZTo6Y3JlYXRlKCkKICAgICAgICAgICAgICAgICAucmVsZWFzZSgpOwogCiAgICAgICAgICAg
ICBjZXJ0aWZpY2F0ZVBheWxvYWQtPnNldFN1YmplY3QoY2VydGlmaWNhdGVTdW1tYXJ5SW5mby52
YWx1ZSgpLnN1YmplY3QpOwpAQCAtMzk2LDE2ICszOTUsMTYgQEAgUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6Ok5ldHdvcms6OlJlc3BvbnNlPiBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmJ1aWxk
T2JqZWMKICAgICByZXR1cm4gcmVzcG9uc2VPYmplY3Q7CiB9CiAKLVJlZjxJbnNwZWN0b3I6OlBy
b3RvY29sOjpOZXR3b3JrOjpDYWNoZWRSZXNvdXJjZT4gSW5zcGVjdG9yTmV0d29ya0FnZW50Ojpi
dWlsZE9iamVjdEZvckNhY2hlZFJlc291cmNlKENhY2hlZFJlc291cmNlKiBjYWNoZWRSZXNvdXJj
ZSkKK1JlZjxQcm90b2NvbDo6TmV0d29yazo6Q2FjaGVkUmVzb3VyY2U+IEluc3BlY3Rvck5ldHdv
cmtBZ2VudDo6YnVpbGRPYmplY3RGb3JDYWNoZWRSZXNvdXJjZShDYWNoZWRSZXNvdXJjZSogY2Fj
aGVkUmVzb3VyY2UpCiB7Ci0gICAgYXV0byByZXNvdXJjZU9iamVjdCA9IEluc3BlY3Rvcjo6UHJv
dG9jb2w6Ok5ldHdvcms6OkNhY2hlZFJlc291cmNlOjpjcmVhdGUoKQorICAgIGF1dG8gcmVzb3Vy
Y2VPYmplY3QgPSBQcm90b2NvbDo6TmV0d29yazo6Q2FjaGVkUmVzb3VyY2U6OmNyZWF0ZSgpCiAg
ICAgICAgIC5zZXRVcmwoY2FjaGVkUmVzb3VyY2UtPnVybCgpLnN0cmluZygpKQogICAgICAgICAu
c2V0VHlwZShJbnNwZWN0b3JQYWdlQWdlbnQ6OmNhY2hlZFJlc291cmNlVHlwZUpTT04oKmNhY2hl
ZFJlc291cmNlKSkKICAgICAgICAgLnNldEJvZHlTaXplKGNhY2hlZFJlc291cmNlLT5lbmNvZGVk
U2l6ZSgpKQogICAgICAgICAucmVsZWFzZSgpOwogCi0gICAgYXV0byByZXNvdXJjZVJlc3BvbnNl
ID0gYnVpbGRPYmplY3RGb3JSZXNvdXJjZVJlc3BvbnNlKGNhY2hlZFJlc291cmNlLT5yZXNwb25z
ZSgpLCBjYWNoZWRSZXNvdXJjZS0+bG9hZGVyKCkpOwotICAgIHJlc291cmNlT2JqZWN0LT5zZXRS
ZXNwb25zZShXVEZNb3ZlKHJlc291cmNlUmVzcG9uc2UpKTsKKyAgICBpZiAoYXV0byByZXNvdXJj
ZVJlc3BvbnNlID0gYnVpbGRPYmplY3RGb3JSZXNvdXJjZVJlc3BvbnNlKGNhY2hlZFJlc291cmNl
LT5yZXNwb25zZSgpLCBjYWNoZWRSZXNvdXJjZS0+bG9hZGVyKCkpKQorICAgICAgICByZXNvdXJj
ZU9iamVjdC0+c2V0UmVzcG9uc2UocmVzb3VyY2VSZXNwb25zZS5yZWxlYXNlTm9uTnVsbCgpKTsK
IAogICAgIFN0cmluZyBzb3VyY2VNYXBwaW5nVVJMID0gSW5zcGVjdG9yUGFnZUFnZW50Ojpzb3Vy
Y2VNYXBVUkxGb3JSZXNvdXJjZShjYWNoZWRSZXNvdXJjZSk7CiAgICAgaWYgKCFzb3VyY2VNYXBw
aW5nVVJMLmlzRW1wdHkoKSkKQEAgLTQyOSw5ICs0MjgsOSBAQCB2b2lkIEluc3BlY3Rvck5ldHdv
cmtBZ2VudDo6d2lsbFNlbmRSZXF1ZXN0KHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgRG9jdW1l
bnRMbwogICAgIGRvdWJsZSBzZW5kVGltZXN0YW1wID0gdGltZXN0YW1wKCk7CiAgICAgV2FsbFRp
bWUgd2FsbHRpbWUgPSBXYWxsVGltZTo6bm93KCk7CiAKLSAgICBTdHJpbmcgcmVxdWVzdElkID0g
SWRlbnRpZmllcnNGYWN0b3J5OjpyZXF1ZXN0SWQoaWRlbnRpZmllcik7Ci0gICAgU3RyaW5nIGZy
YW1lSWQgPSBmcmFtZUlkZW50aWZpZXIobG9hZGVyKTsKLSAgICBTdHJpbmcgbG9hZGVySWQgPSBs
b2FkZXJJZGVudGlmaWVyKGxvYWRlcik7CisgICAgYXV0byByZXF1ZXN0SWQgPSBJZGVudGlmaWVy
c0ZhY3Rvcnk6OnJlcXVlc3RJZChpZGVudGlmaWVyKTsKKyAgICBhdXRvIGZyYW1lSWQgPSBmcmFt
ZUlkZW50aWZpZXIobG9hZGVyKTsKKyAgICBhdXRvIGxvYWRlcklkID0gbG9hZGVySWRlbnRpZmll
cihsb2FkZXIpOwogICAgIFN0cmluZyB0YXJnZXRJZCA9IHJlcXVlc3QuaW5pdGlhdG9ySWRlbnRp
ZmllcigpOwogCiAgICAgaWYgKHR5cGUgPT0gSW5zcGVjdG9yUGFnZUFnZW50OjpPdGhlclJlc291
cmNlKSB7CkBAIC00NjIsNyArNDYxLDEwIEBAIHZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50Ojp3
aWxsU2VuZFJlcXVlc3QodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBEb2N1bWVudExvCiAgICAg
YXV0byBpbml0aWF0b3JPYmplY3QgPSBidWlsZEluaXRpYXRvck9iamVjdChkb2N1bWVudCwgJnJl
cXVlc3QpOwogCiAgICAgU3RyaW5nIHVybCA9IGxvYWRlciA/IGxvYWRlci0+dXJsKCkuc3RyaW5n
KCkgOiByZXF1ZXN0LnVybCgpLnN0cmluZygpOwotICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5y
ZXF1ZXN0V2lsbEJlU2VudChyZXF1ZXN0SWQsIGZyYW1lSWQsIGxvYWRlcklkLCB1cmwsIGJ1aWxk
T2JqZWN0Rm9yUmVzb3VyY2VSZXF1ZXN0KHJlcXVlc3QpLCBzZW5kVGltZXN0YW1wLCB3YWxsdGlt
ZS5zZWNvbmRzU2luY2VFcG9jaCgpLnNlY29uZHMoKSwgaW5pdGlhdG9yT2JqZWN0LCBidWlsZE9i
amVjdEZvclJlc291cmNlUmVzcG9uc2UocmVkaXJlY3RSZXNwb25zZSwgbnVsbHB0ciksIHR5cGUg
IT0gSW5zcGVjdG9yUGFnZUFnZW50OjpPdGhlclJlc291cmNlID8gJnByb3RvY29sUmVzb3VyY2VU
eXBlIDogbnVsbHB0ciwgdGFyZ2V0SWQuaXNFbXB0eSgpID8gbnVsbHB0ciA6ICZ0YXJnZXRJZCk7
CisgICAgT3B0aW9uYWw8UHJvdG9jb2w6OlBhZ2U6OlJlc291cmNlVHlwZT4gdHlwZVBheWxvYWQ7
CisgICAgaWYgKHR5cGUgIT0gSW5zcGVjdG9yUGFnZUFnZW50OjpPdGhlclJlc291cmNlKQorICAg
ICAgICB0eXBlUGF5bG9hZCA9IHByb3RvY29sUmVzb3VyY2VUeXBlOworICAgIG1fZnJvbnRlbmRE
aXNwYXRjaGVyLT5yZXF1ZXN0V2lsbEJlU2VudChyZXF1ZXN0SWQsIGZyYW1lSWQsIGxvYWRlcklk
LCB1cmwsIGJ1aWxkT2JqZWN0Rm9yUmVzb3VyY2VSZXF1ZXN0KHJlcXVlc3QpLCBzZW5kVGltZXN0
YW1wLCB3YWxsdGltZS5zZWNvbmRzU2luY2VFcG9jaCgpLnNlY29uZHMoKSwgV1RGTW92ZShpbml0
aWF0b3JPYmplY3QpLCBidWlsZE9iamVjdEZvclJlc291cmNlUmVzcG9uc2UocmVkaXJlY3RSZXNw
b25zZSwgbnVsbHB0ciksIFdURk1vdmUodHlwZVBheWxvYWQpLCB0YXJnZXRJZCk7CiB9CiAKIHN0
YXRpYyBJbnNwZWN0b3JQYWdlQWdlbnQ6OlJlc291cmNlVHlwZSByZXNvdXJjZVR5cGVGb3JDYWNo
ZWRSZXNvdXJjZShDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UpCkBAIC01MTQsNyArNTE2LDggQEAg
dm9pZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmRpZFJlY2VpdmVSZXNwb25zZSh1bnNpZ25lZCBs
b25nIGlkZW50aWZpZXIsIERvY3VtZW4KICAgICAgICAgfSk7CiAgICAgfQogCi0gICAgUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OlJlc3BvbnNlPiByZXNvdXJjZVJlc3BvbnNl
ID0gYnVpbGRPYmplY3RGb3JSZXNvdXJjZVJlc3BvbnNlKHJlYWxSZXNwb25zZSA/ICpyZWFsUmVz
cG9uc2UgOiByZXNwb25zZSwgcmVzb3VyY2VMb2FkZXIpOworICAgIGF1dG8gcmVzb3VyY2VSZXNw
b25zZSA9IGJ1aWxkT2JqZWN0Rm9yUmVzb3VyY2VSZXNwb25zZShyZWFsUmVzcG9uc2UgPyAqcmVh
bFJlc3BvbnNlIDogcmVzcG9uc2UsIHJlc291cmNlTG9hZGVyKTsKKyAgICBBU1NFUlQocmVzb3Vy
Y2VSZXNwb25zZSk7CiAKICAgICBib29sIGlzTm90TW9kaWZpZWQgPSByZXNwb25zZS5odHRwU3Rh
dHVzQ29kZSgpID09IDMwNDsKIApAQCAtNTI3LDcgKzUzMCw3IEBAIHZvaWQgSW5zcGVjdG9yTmV0
d29ya0FnZW50OjpkaWRSZWNlaXZlUmVzcG9uc2UodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBE
b2N1bWVuCiAgICAgaWYgKGNhY2hlZFJlc291cmNlKSB7CiAgICAgICAgIC8vIFVzZSBtaW1lIHR5
cGUgZnJvbSBjYWNoZWQgcmVzb3VyY2UgaW4gY2FzZSB0aGUgb25lIGluIHJlc3BvbnNlIGlzIGVt
cHR5LgogICAgICAgICBpZiAocmVzb3VyY2VSZXNwb25zZSAmJiByZXNwb25zZS5taW1lVHlwZSgp
LmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJlc291cmNlUmVzcG9uc2UtPnNldFN0cmluZyhJbnNw
ZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpSZXNwb25zZTo6TWltZVR5cGUsIGNhY2hlZFJlc291
cmNlLT5yZXNwb25zZSgpLm1pbWVUeXBlKCkpOworICAgICAgICAgICAgcmVzb3VyY2VSZXNwb25z
ZS0+c2V0U3RyaW5nKFByb3RvY29sOjpOZXR3b3JrOjpSZXNwb25zZTo6bWltZVR5cGVLZXksIGNh
Y2hlZFJlc291cmNlLT5yZXNwb25zZSgpLm1pbWVUeXBlKCkpOwogICAgICAgICBtX3Jlc291cmNl
c0RhdGEtPmFkZENhY2hlZFJlc291cmNlKHJlcXVlc3RJZCwgY2FjaGVkUmVzb3VyY2UpOwogICAg
IH0KIApAQCAtNTQ5LDIxICs1NTIsMjEgQEAgdm9pZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmRp
ZFJlY2VpdmVSZXNwb25zZSh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIERvY3VtZW4KICAgICAg
ICAgICAgICAgICBtX3Jlc291cmNlc0RhdGEtPm1heWJlQWRkUmVzb3VyY2VEYXRhKHJlcXVlc3RJ
ZCwgcHJldmlvdXNCdWZmZXItPmRhdGEoKSwgcHJldmlvdXNCdWZmZXItPnNpemUoKSk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIHJlc291cmNlUmVzcG9uc2UtPnNl
dFN0cmluZygibWltZVR5cGUiX3MsIHByZXZpb3VzUmVzb3VyY2VEYXRhLT5taW1lVHlwZSgpKTsK
KyAgICAgICAgICAgIHJlc291cmNlUmVzcG9uc2UtPnNldFN0cmluZyhQcm90b2NvbDo6TmV0d29y
azo6UmVzcG9uc2U6Om1pbWVUeXBlS2V5LCBwcmV2aW91c1Jlc291cmNlRGF0YS0+bWltZVR5cGUo
KSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIHJlc291cmNlUmVzcG9uc2UtPnNldEludGVn
ZXIoInN0YXR1cyJfcywgcHJldmlvdXNSZXNvdXJjZURhdGEtPmh0dHBTdGF0dXNDb2RlKCkpOwot
ICAgICAgICAgICAgcmVzb3VyY2VSZXNwb25zZS0+c2V0U3RyaW5nKCJzdGF0dXNUZXh0Il9zLCBw
cmV2aW91c1Jlc291cmNlRGF0YS0+aHR0cFN0YXR1c1RleHQoKSk7CisgICAgICAgICAgICByZXNv
dXJjZVJlc3BvbnNlLT5zZXRJbnRlZ2VyKFByb3RvY29sOjpOZXR3b3JrOjpSZXNwb25zZTo6c3Rh
dHVzS2V5LCBwcmV2aW91c1Jlc291cmNlRGF0YS0+aHR0cFN0YXR1c0NvZGUoKSk7CisgICAgICAg
ICAgICByZXNvdXJjZVJlc3BvbnNlLT5zZXRTdHJpbmcoUHJvdG9jb2w6Ok5ldHdvcms6OlJlc3Bv
bnNlOjpzdGF0dXNUZXh0S2V5LCBwcmV2aW91c1Jlc291cmNlRGF0YS0+aHR0cFN0YXR1c1RleHQo
KSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIHJlc291cmNlUmVzcG9uc2UtPnNldFN0cmlu
Zygic291cmNlIl9zLCBJbnNwZWN0b3I6OlByb3RvY29sOjpJbnNwZWN0b3JIZWxwZXJzOjpnZXRF
bnVtQ29uc3RhbnRWYWx1ZShJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpSZXNwb25zZTo6
U291cmNlOjpEaXNrQ2FjaGUpKTsKKyAgICAgICAgICAgIHJlc291cmNlUmVzcG9uc2UtPnNldFN0
cmluZyhQcm90b2NvbDo6TmV0d29yazo6UmVzcG9uc2U6OnNvdXJjZUtleSwgUHJvdG9jb2w6Okhl
bHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKFByb3RvY29sOjpOZXR3b3JrOjpSZXNwb25zZTo6
U291cmNlOjpEaXNrQ2FjaGUpKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIFN0cmluZyBmcmFt
ZUlkID0gZnJhbWVJZGVudGlmaWVyKGxvYWRlcik7Ci0gICAgU3RyaW5nIGxvYWRlcklkID0gbG9h
ZGVySWRlbnRpZmllcihsb2FkZXIpOworICAgIFByb3RvY29sOjpOZXR3b3JrOjpGcmFtZUlkIGZy
YW1lSWQgPSBmcmFtZUlkZW50aWZpZXIobG9hZGVyKTsKKyAgICBQcm90b2NvbDo6TmV0d29yazo6
TG9hZGVySWQgbG9hZGVySWQgPSBsb2FkZXJJZGVudGlmaWVyKGxvYWRlcik7CiAKICAgICBtX3Jl
c291cmNlc0RhdGEtPnJlc3BvbnNlUmVjZWl2ZWQocmVxdWVzdElkLCBmcmFtZUlkLCByZXNwb25z
ZSwgdHlwZSwgc2hvdWxkRm9yY2VCdWZmZXJpbmdOZXR3b3JrUmVzb3VyY2VEYXRhKCkpOwogCi0g
ICAgbV9mcm9udGVuZERpc3BhdGNoZXItPnJlc3BvbnNlUmVjZWl2ZWQocmVxdWVzdElkLCBmcmFt
ZUlkLCBsb2FkZXJJZCwgdGltZXN0YW1wKCksIEluc3BlY3RvclBhZ2VBZ2VudDo6cmVzb3VyY2VU
eXBlSlNPTih0eXBlKSwgcmVzb3VyY2VSZXNwb25zZSk7CisgICAgbV9mcm9udGVuZERpc3BhdGNo
ZXItPnJlc3BvbnNlUmVjZWl2ZWQocmVxdWVzdElkLCBmcmFtZUlkLCBsb2FkZXJJZCwgdGltZXN0
YW1wKCksIEluc3BlY3RvclBhZ2VBZ2VudDo6cmVzb3VyY2VUeXBlSlNPTih0eXBlKSwgcmVzb3Vy
Y2VSZXNwb25zZS5yZWxlYXNlTm9uTnVsbCgpKTsKIAogICAgIC8vIElmIHdlIHJldmFsaWRhdGVk
IHRoZSByZXNvdXJjZSBhbmQgZ290IE5vdCBtb2RpZmllZCwgc2VuZCBjb250ZW50IGxlbmd0aCBm
b2xsb3dpbmcgZGlkUmVjZWl2ZVJlc3BvbnNlCiAgICAgLy8gYXMgdGhlcmUgd2lsbCBiZSBubyBj
YWxscyB0byBkaWRSZWNlaXZlRGF0YSBmcm9tIHRoZSBuZXR3b3JrIHN0YWNrLgpAQCAtNjIxLDkg
KzYyNCw5IEBAIHZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50OjpkaWRGaW5pc2hMb2FkaW5nKHVu
c2lnbmVkIGxvbmcgaWRlbnRpZmllciwgRG9jdW1lbnRMCiAgICAgICAgICAgICByZWFsTWV0cmlj
cyA9IHBsYXRmb3JtU3RyYXRlZ2llcygpLT5sb2FkZXJTdHJhdGVneSgpLT5uZXR3b3JrTWV0cmlj
c0Zyb21SZXNvdXJjZUxvYWRJZGVudGlmaWVyKGlkZW50aWZpZXIpLmlzb2xhdGVkQ29weSgpOwog
ICAgICAgICB9KTsKICAgICB9Ci0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdv
cms6Ok1ldHJpY3M+IG1ldHJpY3MgPSBidWlsZE9iamVjdEZvck1ldHJpY3MocmVhbE1ldHJpY3Mg
PyAqcmVhbE1ldHJpY3MgOiBuZXR3b3JrTG9hZE1ldHJpY3MpOworICAgIGF1dG8gbWV0cmljcyA9
IGJ1aWxkT2JqZWN0Rm9yTWV0cmljcyhyZWFsTWV0cmljcyA/ICpyZWFsTWV0cmljcyA6IG5ldHdv
cmtMb2FkTWV0cmljcyk7CiAKLSAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+bG9hZGluZ0Zpbmlz
aGVkKHJlcXVlc3RJZCwgZWxhcHNlZEZpbmlzaFRpbWUsICFzb3VyY2VNYXBwaW5nVVJMLmlzRW1w
dHkoKSA/ICZzb3VyY2VNYXBwaW5nVVJMIDogbnVsbHB0ciwgbWV0cmljcyk7CisgICAgbV9mcm9u
dGVuZERpc3BhdGNoZXItPmxvYWRpbmdGaW5pc2hlZChyZXF1ZXN0SWQsIGVsYXBzZWRGaW5pc2hU
aW1lLCBzb3VyY2VNYXBwaW5nVVJMLCBXVEZNb3ZlKG1ldHJpY3MpKTsKIH0KIAogdm9pZCBJbnNw
ZWN0b3JOZXR3b3JrQWdlbnQ6OmRpZEZhaWxMb2FkaW5nKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmll
ciwgRG9jdW1lbnRMb2FkZXIqIGxvYWRlciwgY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCkBA
IC02NDIsOCArNjQ1LDcgQEAgdm9pZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmRpZEZhaWxMb2Fk
aW5nKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgRG9jdW1lbnRMb2EKICAgICAgICAgfQogICAg
IH0KIAotICAgIGJvb2wgY2FuY2VsZWQgPSBlcnJvci5pc0NhbmNlbGxhdGlvbigpOwotICAgIG1f
ZnJvbnRlbmREaXNwYXRjaGVyLT5sb2FkaW5nRmFpbGVkKHJlcXVlc3RJZCwgdGltZXN0YW1wKCks
IGVycm9yLmxvY2FsaXplZERlc2NyaXB0aW9uKCksIGNhbmNlbGVkID8gJmNhbmNlbGVkIDogbnVs
bHB0cik7CisgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPmxvYWRpbmdGYWlsZWQocmVxdWVzdElk
LCB0aW1lc3RhbXAoKSwgZXJyb3IubG9jYWxpemVkRGVzY3JpcHRpb24oKSwgZXJyb3IuaXNDYW5j
ZWxsYXRpb24oKSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50OjpkaWRMb2FkUmVz
b3VyY2VGcm9tTWVtb3J5Q2FjaGUoRG9jdW1lbnRMb2FkZXIqIGxvYWRlciwgQ2FjaGVkUmVzb3Vy
Y2UmIHJlc291cmNlKQpAQCAtNjU0LDggKzY1Niw4IEBAIHZvaWQgSW5zcGVjdG9yTmV0d29ya0Fn
ZW50OjpkaWRMb2FkUmVzb3VyY2VGcm9tTWVtb3J5Q2FjaGUoRG9jdW1lbnRMb2FkZXIqIGxvYWRl
CiAKICAgICB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIgPSBsb2FkZXItPmZyYW1lKCktPnBhZ2Uo
KS0+cHJvZ3Jlc3MoKS5jcmVhdGVVbmlxdWVJZGVudGlmaWVyKCk7CiAgICAgU3RyaW5nIHJlcXVl
c3RJZCA9IElkZW50aWZpZXJzRmFjdG9yeTo6cmVxdWVzdElkKGlkZW50aWZpZXIpOwotICAgIFN0
cmluZyBsb2FkZXJJZCA9IGxvYWRlcklkZW50aWZpZXIobG9hZGVyKTsKLSAgICBTdHJpbmcgZnJh
bWVJZCA9IGZyYW1lSWRlbnRpZmllcihsb2FkZXIpOworICAgIFByb3RvY29sOjpOZXR3b3JrOjpM
b2FkZXJJZCBsb2FkZXJJZCA9IGxvYWRlcklkZW50aWZpZXIobG9hZGVyKTsKKyAgICBQcm90b2Nv
bDo6TmV0d29yazo6RnJhbWVJZCBmcmFtZUlkID0gZnJhbWVJZGVudGlmaWVyKGxvYWRlcik7CiAK
ICAgICBtX3Jlc291cmNlc0RhdGEtPnJlc291cmNlQ3JlYXRlZChyZXF1ZXN0SWQsIGxvYWRlcklk
LCByZXNvdXJjZSk7CiAKQEAgLTY2NSw3ICs2NjcsNyBAQCB2b2lkIEluc3BlY3Rvck5ldHdvcmtB
Z2VudDo6ZGlkTG9hZFJlc291cmNlRnJvbU1lbW9yeUNhY2hlKERvY3VtZW50TG9hZGVyKiBsb2Fk
ZQogICAgIC8vIGluc3RlYWQgb2Ygd2hhdGV2ZXIgUmVzb3VyY2VSZXNwb25zZTo6U291cmNlIHRo
ZSBDYWNoZWRSZXNvdXJjZXMncyByZXNwb25zZSBoYXMuCiAgICAgLy8gVGhlIGZyb250ZW5kIGFs
cmVhZHkga25vd3MgZm9yIGNlcnRhaW4gdGhhdCB0aGlzIHdhcyBzZXJ2ZWQgZnJvbSB0aGUgbWVt
b3J5IGNhY2hlLgogCi0gICAgbV9mcm9udGVuZERpc3BhdGNoZXItPnJlcXVlc3RTZXJ2ZWRGcm9t
TWVtb3J5Q2FjaGUocmVxdWVzdElkLCBmcmFtZUlkLCBsb2FkZXJJZCwgbG9hZGVyLT51cmwoKS5z
dHJpbmcoKSwgdGltZXN0YW1wKCksIGluaXRpYXRvck9iamVjdCwgYnVpbGRPYmplY3RGb3JDYWNo
ZWRSZXNvdXJjZSgmcmVzb3VyY2UpKTsKKyAgICBtX2Zyb250ZW5kRGlzcGF0Y2hlci0+cmVxdWVz
dFNlcnZlZEZyb21NZW1vcnlDYWNoZShyZXF1ZXN0SWQsIGZyYW1lSWQsIGxvYWRlcklkLCBsb2Fk
ZXItPnVybCgpLnN0cmluZygpLCB0aW1lc3RhbXAoKSwgV1RGTW92ZShpbml0aWF0b3JPYmplY3Qp
LCBidWlsZE9iamVjdEZvckNhY2hlZFJlc291cmNlKCZyZXNvdXJjZSkpOwogfQogCiB2b2lkIElu
c3BlY3Rvck5ldHdvcmtBZ2VudDo6c2V0SW5pdGlhbFNjcmlwdENvbnRlbnQodW5zaWduZWQgbG9u
ZyBpZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZVN0cmluZykKQEAgLTcyOSwyNiArNzMx
LDI2IEBAIHZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50OjpkaWRTY2hlZHVsZVN0eWxlUmVjYWxj
dWxhdGlvbihEb2N1bWVudCYgZG9jdW1lbnQpCiAgICAgICAgIG1fc3R5bGVSZWNhbGN1bGF0aW9u
SW5pdGlhdG9yID0gYnVpbGRJbml0aWF0b3JPYmplY3QoJmRvY3VtZW50KTsKIH0KIAotUmVmUHRy
PEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OkluaXRpYXRvcj4gSW5zcGVjdG9yTmV0d29y
a0FnZW50OjpidWlsZEluaXRpYXRvck9iamVjdChEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IFJl
c291cmNlUmVxdWVzdCogcmVzb3VyY2VSZXF1ZXN0KQorUmVmPFByb3RvY29sOjpOZXR3b3JrOjpJ
bml0aWF0b3I+IEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6YnVpbGRJbml0aWF0b3JPYmplY3QoRG9j
dW1lbnQqIGRvY3VtZW50LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QqIHJlc291cmNlUmVxdWVzdCkK
IHsKICAgICAvLyBGSVhNRTogV29ya2VyIHN1cHBvcnQuCiAgICAgaWYgKCFpc01haW5UaHJlYWQo
KSkgewotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6SW5pdGlh
dG9yOjpjcmVhdGUoKQotICAgICAgICAgICAgLnNldFR5cGUoSW5zcGVjdG9yOjpQcm90b2NvbDo6
TmV0d29yazo6SW5pdGlhdG9yOjpUeXBlOjpPdGhlcikKKyAgICAgICAgcmV0dXJuIFByb3RvY29s
OjpOZXR3b3JrOjpJbml0aWF0b3I6OmNyZWF0ZSgpCisgICAgICAgICAgICAuc2V0VHlwZShQcm90
b2NvbDo6TmV0d29yazo6SW5pdGlhdG9yOjpUeXBlOjpPdGhlcikKICAgICAgICAgICAgIC5yZWxl
YXNlKCk7CiAgICAgfQogCi0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6
OkluaXRpYXRvcj4gaW5pdGlhdG9yT2JqZWN0OworICAgIFJlZlB0cjxQcm90b2NvbDo6TmV0d29y
azo6SW5pdGlhdG9yPiBpbml0aWF0b3JPYmplY3Q7CiAKICAgICBSZWY8U2NyaXB0Q2FsbFN0YWNr
PiBzdGFja1RyYWNlID0gY3JlYXRlU2NyaXB0Q2FsbFN0YWNrKEpTRXhlY1N0YXRlOjpjdXJyZW50
U3RhdGUoKSk7CiAgICAgaWYgKHN0YWNrVHJhY2UtPnNpemUoKSA+IDApIHsKLSAgICAgICAgaW5p
dGlhdG9yT2JqZWN0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6SW5pdGlhdG9yOjpj
cmVhdGUoKQotICAgICAgICAgICAgLnNldFR5cGUoSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29y
azo6SW5pdGlhdG9yOjpUeXBlOjpTY3JpcHQpCisgICAgICAgIGluaXRpYXRvck9iamVjdCA9IFBy
b3RvY29sOjpOZXR3b3JrOjpJbml0aWF0b3I6OmNyZWF0ZSgpCisgICAgICAgICAgICAuc2V0VHlw
ZShQcm90b2NvbDo6TmV0d29yazo6SW5pdGlhdG9yOjpUeXBlOjpTY3JpcHQpCiAgICAgICAgICAg
ICAucmVsZWFzZSgpOwogICAgICAgICBpbml0aWF0b3JPYmplY3QtPnNldFN0YWNrVHJhY2Uoc3Rh
Y2tUcmFjZS0+YnVpbGRJbnNwZWN0b3JBcnJheSgpKTsKICAgICB9IGVsc2UgaWYgKGRvY3VtZW50
ICYmIGRvY3VtZW50LT5zY3JpcHRhYmxlRG9jdW1lbnRQYXJzZXIoKSkgewotICAgICAgICBpbml0
aWF0b3JPYmplY3QgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpJbml0aWF0b3I6OmNy
ZWF0ZSgpCi0gICAgICAgICAgICAuc2V0VHlwZShJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3Jr
OjpJbml0aWF0b3I6OlR5cGU6OlBhcnNlcikKKyAgICAgICAgaW5pdGlhdG9yT2JqZWN0ID0gUHJv
dG9jb2w6Ok5ldHdvcms6OkluaXRpYXRvcjo6Y3JlYXRlKCkKKyAgICAgICAgICAgIC5zZXRUeXBl
KFByb3RvY29sOjpOZXR3b3JrOjpJbml0aWF0b3I6OlR5cGU6OlBhcnNlcikKICAgICAgICAgICAg
IC5yZWxlYXNlKCk7CiAgICAgICAgIGluaXRpYXRvck9iamVjdC0+c2V0VXJsKGRvY3VtZW50LT51
cmwoKS5zdHJpbmcoKSk7CiAgICAgICAgIGluaXRpYXRvck9iamVjdC0+c2V0TGluZU51bWJlcihk
b2N1bWVudC0+c2NyaXB0YWJsZURvY3VtZW50UGFyc2VyKCktPnRleHRQb3NpdGlvbigpLm1fbGlu
ZS5vbmVCYXNlZEludCgpKTsKQEAgLTc1OCw4ICs3NjAsOCBAQCBSZWZQdHI8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6TmV0d29yazo6SW5pdGlhdG9yPiBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmJ1aWxk
SW5pdAogICAgIGlmIChkb21BZ2VudCAmJiByZXNvdXJjZVJlcXVlc3QpIHsKICAgICAgICAgaWYg
KGF1dG8gaW5zcGVjdG9ySW5pdGlhdG9yTm9kZUlkZW50aWZpZXIgPSByZXNvdXJjZVJlcXVlc3Qt
Pmluc3BlY3RvckluaXRpYXRvck5vZGVJZGVudGlmaWVyKCkpIHsKICAgICAgICAgICAgIGlmICgh
aW5pdGlhdG9yT2JqZWN0KSB7Ci0gICAgICAgICAgICAgICAgaW5pdGlhdG9yT2JqZWN0ID0gSW5z
cGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6SW5pdGlhdG9yOjpjcmVhdGUoKQotICAgICAgICAg
ICAgICAgICAgICAuc2V0VHlwZShJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpJbml0aWF0
b3I6OlR5cGU6Ok90aGVyKQorICAgICAgICAgICAgICAgIGluaXRpYXRvck9iamVjdCA9IFByb3Rv
Y29sOjpOZXR3b3JrOjpJbml0aWF0b3I6OmNyZWF0ZSgpCisgICAgICAgICAgICAgICAgICAgIC5z
ZXRUeXBlKFByb3RvY29sOjpOZXR3b3JrOjpJbml0aWF0b3I6OlR5cGU6Ok90aGVyKQogICAgICAg
ICAgICAgICAgICAgICAucmVsZWFzZSgpOwogICAgICAgICAgICAgfQogCkBAIC03NjgsMTMgKzc3
MCwxMyBAQCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6SW5pdGlhdG9yPiBJ
bnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmJ1aWxkSW5pdAogICAgIH0KIAogICAgIGlmIChpbml0aWF0
b3JPYmplY3QpCi0gICAgICAgIHJldHVybiBpbml0aWF0b3JPYmplY3Q7CisgICAgICAgIHJldHVy
biBpbml0aWF0b3JPYmplY3QucmVsZWFzZU5vbk51bGwoKTsKIAogICAgIGlmIChtX2lzUmVjYWxj
dWxhdGluZ1N0eWxlICYmIG1fc3R5bGVSZWNhbGN1bGF0aW9uSW5pdGlhdG9yKQotICAgICAgICBy
ZXR1cm4gbV9zdHlsZVJlY2FsY3VsYXRpb25Jbml0aWF0b3I7CisgICAgICAgIHJldHVybiAqbV9z
dHlsZVJlY2FsY3VsYXRpb25Jbml0aWF0b3I7CiAKLSAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90
b2NvbDo6TmV0d29yazo6SW5pdGlhdG9yOjpjcmVhdGUoKQotICAgICAgICAuc2V0VHlwZShJbnNw
ZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpJbml0aWF0b3I6OlR5cGU6Ok90aGVyKQorICAgIHJl
dHVybiBQcm90b2NvbDo6TmV0d29yazo6SW5pdGlhdG9yOjpjcmVhdGUoKQorICAgICAgICAuc2V0
VHlwZShQcm90b2NvbDo6TmV0d29yazo6SW5pdGlhdG9yOjpUeXBlOjpPdGhlcikKICAgICAgICAg
LnJlbGVhc2UoKTsKIH0KIApAQCAtNzg1LDcgKzc4Nyw3IEBAIHZvaWQgSW5zcGVjdG9yTmV0d29y
a0FnZW50OjpkaWRDcmVhdGVXZWJTb2NrZXQodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25z
dCBVCiAKIHZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50Ojp3aWxsU2VuZFdlYlNvY2tldEhhbmRz
aGFrZVJlcXVlc3QodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBSZXNvdXJjZVJlcXVl
c3QmIHJlcXVlc3QpCiB7Ci0gICAgYXV0byByZXF1ZXN0T2JqZWN0ID0gSW5zcGVjdG9yOjpQcm90
b2NvbDo6TmV0d29yazo6V2ViU29ja2V0UmVxdWVzdDo6Y3JlYXRlKCkKKyAgICBhdXRvIHJlcXVl
c3RPYmplY3QgPSBQcm90b2NvbDo6TmV0d29yazo6V2ViU29ja2V0UmVxdWVzdDo6Y3JlYXRlKCkK
ICAgICAgICAgLnNldEhlYWRlcnMoYnVpbGRPYmplY3RGb3JIZWFkZXJzKHJlcXVlc3QuaHR0cEhl
YWRlckZpZWxkcygpKSkKICAgICAgICAgLnJlbGVhc2UoKTsKICAgICBtX2Zyb250ZW5kRGlzcGF0
Y2hlci0+d2ViU29ja2V0V2lsbFNlbmRIYW5kc2hha2VSZXF1ZXN0KElkZW50aWZpZXJzRmFjdG9y
eTo6cmVxdWVzdElkKGlkZW50aWZpZXIpLCB0aW1lc3RhbXAoKSwgV2FsbFRpbWU6Om5vdygpLnNl
Y29uZHNTaW5jZUVwb2NoKCkuc2Vjb25kcygpLCBXVEZNb3ZlKHJlcXVlc3RPYmplY3QpKTsKQEAg
LTc5Myw3ICs3OTUsNyBAQCB2b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6d2lsbFNlbmRXZWJT
b2NrZXRIYW5kc2hha2VSZXF1ZXN0KHVuc2lnbmVkIGxvbmcgaWRlbgogCiB2b2lkIEluc3BlY3Rv
ck5ldHdvcmtBZ2VudDo6ZGlkUmVjZWl2ZVdlYlNvY2tldEhhbmRzaGFrZVJlc3BvbnNlKHVuc2ln
bmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCiB7
Ci0gICAgYXV0byByZXNwb25zZU9iamVjdCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6
OldlYlNvY2tldFJlc3BvbnNlOjpjcmVhdGUoKQorICAgIGF1dG8gcmVzcG9uc2VPYmplY3QgPSBQ
cm90b2NvbDo6TmV0d29yazo6V2ViU29ja2V0UmVzcG9uc2U6OmNyZWF0ZSgpCiAgICAgICAgIC5z
ZXRTdGF0dXMocmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKSkKICAgICAgICAgLnNldFN0YXR1c1Rl
eHQocmVzcG9uc2UuaHR0cFN0YXR1c1RleHQoKSkKICAgICAgICAgLnNldEhlYWRlcnMoYnVpbGRP
YmplY3RGb3JIZWFkZXJzKHJlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZHMoKSkpCkBAIC04MjAsMTIg
KzgyMiw3IEBAIHZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50OjpkaWRSZWNlaXZlV2ViU29ja2V0
RnJhbWVFcnJvcih1bnNpZ25lZCBsb25nIGlkZW50aWZpCiAgICAgbV9mcm9udGVuZERpc3BhdGNo
ZXItPndlYlNvY2tldEZyYW1lRXJyb3IoSWRlbnRpZmllcnNGYWN0b3J5OjpyZXF1ZXN0SWQoaWRl
bnRpZmllciksIHRpbWVzdGFtcCgpLCBlcnJvck1lc3NhZ2UpOwogfQogCi12b2lkIEluc3BlY3Rv
ck5ldHdvcmtBZ2VudDo6ZW5hYmxlKEVycm9yU3RyaW5nJikKLXsKLSAgICBlbmFibGUoKTsKLX0K
LQotdm9pZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmVuYWJsZSgpCitQcm90b2NvbDo6RXJyb3JT
dHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmVuYWJsZSgpCiB7CiAgICAgbV9l
bmFibGVkID0gdHJ1ZTsKICAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMuc2V0RW5hYmxlZE5ldHdv
cmtBZ2VudCh0aGlzKTsKQEAgLTg1Nyw5ICs4NTQsMTEgQEAgdm9pZCBJbnNwZWN0b3JOZXR3b3Jr
QWdlbnQ6OmVuYWJsZSgpCiAgICAgICAgICAgICAgICAgZGlkQ2xvc2VXZWJTb2NrZXQoaWRlbnRp
Zmllcik7CiAgICAgICAgIH0KICAgICB9CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIElu
c3BlY3Rvck5ldHdvcmtBZ2VudDo6ZGlzYWJsZShFcnJvclN0cmluZyYpCitQcm90b2NvbDo6RXJy
b3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmRpc2FibGUoKQogewogICAg
IG1fZW5hYmxlZCA9IGZhbHNlOwogICAgIG1faW50ZXJjZXB0aW9uRW5hYmxlZCA9IGZhbHNlOwpA
QCAtODcyLDkgKzg3MSwxMSBAQCB2b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6ZGlzYWJsZShF
cnJvclN0cmluZyYpCiAgICAgY29udGludWVQZW5kaW5nUmVzcG9uc2VzKCk7CiAKICAgICBzZXRS
ZXNvdXJjZUNhY2hpbmdEaXNhYmxlZChmYWxzZSk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi1i
b29sIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6c2hvdWxkSW50ZXJjZXB0KFVSTCB1cmwsIE5ldHdv
cmtTdGFnZSBuZXR3b3JrU3RhZ2UpCitib29sIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6c2hvdWxk
SW50ZXJjZXB0KFVSTCB1cmwsIFByb3RvY29sOjpOZXR3b3JrOjpOZXR3b3JrU3RhZ2UgbmV0d29y
a1N0YWdlKQogewogICAgIHVybC5yZW1vdmVGcmFnbWVudElkZW50aWZpZXIoKTsKIApAQCAtOTEx
LDU2ICs5MTIsNTUgQEAgdm9pZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmNvbnRpbnVlUGVuZGlu
Z1Jlc3BvbnNlcygpCiAgICAgbV9wZW5kaW5nSW50ZXJjZXB0UmVzcG9uc2VzLmNsZWFyKCk7CiB9
CiAKLXZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50OjpzZXRFeHRyYUhUVFBIZWFkZXJzKEVycm9y
U3RyaW5nJiwgY29uc3QgSlNPTjo6T2JqZWN0JiBoZWFkZXJzKQorUHJvdG9jb2w6OkVycm9yU3Ry
aW5nT3I8dm9pZD4gSW5zcGVjdG9yTmV0d29ya0FnZW50OjpzZXRFeHRyYUhUVFBIZWFkZXJzKFJl
ZjxKU09OOjpPYmplY3Q+JiYgaGVhZGVycykKIHsKLSAgICBmb3IgKGF1dG8mIGVudHJ5IDogaGVh
ZGVycykgewotICAgICAgICBTdHJpbmcgc3RyaW5nVmFsdWU7Ci0gICAgICAgIGlmIChlbnRyeS52
YWx1ZS0+YXNTdHJpbmcoc3RyaW5nVmFsdWUpKQorICAgIGZvciAoYXV0byYgZW50cnkgOiBoZWFk
ZXJzLmdldCgpKSB7CisgICAgICAgIGF1dG8gc3RyaW5nVmFsdWUgPSBlbnRyeS52YWx1ZS0+YXNT
dHJpbmcoKTsKKyAgICAgICAgaWYgKCEhc3RyaW5nVmFsdWUpCiAgICAgICAgICAgICBtX2V4dHJh
UmVxdWVzdEhlYWRlcnMuc2V0KGVudHJ5LmtleSwgc3RyaW5nVmFsdWUpOwogICAgIH0KKworICAg
IHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50OjpnZXRSZXNwb25z
ZUJvZHkoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwg
U3RyaW5nKiBjb250ZW50LCBib29sKiBiYXNlNjRFbmNvZGVkKQorUHJvdG9jb2w6OkVycm9yU3Ry
aW5nT3I8c3RkOjp0dXBsZTxTdHJpbmcsIGJvb2wgLyogYmFzZTY0RW5jb2RlZCAqLz4+IEluc3Bl
Y3Rvck5ldHdvcmtBZ2VudDo6Z2V0UmVzcG9uc2VCb2R5KGNvbnN0IFByb3RvY29sOjpOZXR3b3Jr
OjpSZXF1ZXN0SWQmIHJlcXVlc3RJZCkKIHsKICAgICBOZXR3b3JrUmVzb3VyY2VzRGF0YTo6UmVz
b3VyY2VEYXRhIGNvbnN0KiByZXNvdXJjZURhdGEgPSBtX3Jlc291cmNlc0RhdGEtPmRhdGEocmVx
dWVzdElkKTsKLSAgICBpZiAoIXJlc291cmNlRGF0YSkgewotICAgICAgICBlcnJvclN0cmluZyA9
ICJNaXNzaW5nIHJlc291cmNlIGZvciBnaXZlbiByZXF1ZXN0SWQiX3M7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9CisgICAgaWYgKCFyZXNvdXJjZURhdGEpCisgICAgICAgIHJldHVybiBtYWtlVW5l
eHBlY3RlZCgiTWlzc2luZyByZXNvdXJjZSBmb3IgZ2l2ZW4gcmVxdWVzdElkIl9zKTsKIAotICAg
IGlmIChyZXNvdXJjZURhdGEtPmhhc0NvbnRlbnQoKSkgewotICAgICAgICAqYmFzZTY0RW5jb2Rl
ZCA9IHJlc291cmNlRGF0YS0+YmFzZTY0RW5jb2RlZCgpOwotICAgICAgICAqY29udGVudCA9IHJl
c291cmNlRGF0YS0+Y29udGVudCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmIChy
ZXNvdXJjZURhdGEtPmhhc0NvbnRlbnQoKSkKKyAgICAgICAgcmV0dXJuIHsgeyByZXNvdXJjZURh
dGEtPmNvbnRlbnQoKSwgcmVzb3VyY2VEYXRhLT5iYXNlNjRFbmNvZGVkKCkgfSB9OwogCi0gICAg
aWYgKHJlc291cmNlRGF0YS0+aXNDb250ZW50RXZpY3RlZCgpKSB7Ci0gICAgICAgIGVycm9yU3Ry
aW5nID0gIlJlc291cmNlIGNvbnRlbnQgd2FzIGV2aWN0ZWQgZnJvbSBpbnNwZWN0b3IgY2FjaGUi
X3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKHJlc291cmNlRGF0YS0+aXNDb250
ZW50RXZpY3RlZCgpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIlJlc291cmNlIGNv
bnRlbnQgd2FzIGV2aWN0ZWQgZnJvbSBpbnNwZWN0b3IgY2FjaGUiX3MpOwogCiAgICAgaWYgKHJl
c291cmNlRGF0YS0+YnVmZmVyKCkgJiYgIXJlc291cmNlRGF0YS0+dGV4dEVuY29kaW5nTmFtZSgp
LmlzTnVsbCgpKSB7Ci0gICAgICAgICpiYXNlNjRFbmNvZGVkID0gZmFsc2U7Ci0gICAgICAgIGlm
IChJbnNwZWN0b3JQYWdlQWdlbnQ6OnNoYXJlZEJ1ZmZlckNvbnRlbnQocmVzb3VyY2VEYXRhLT5i
dWZmZXIoKSwgcmVzb3VyY2VEYXRhLT50ZXh0RW5jb2RpbmdOYW1lKCksICpiYXNlNjRFbmNvZGVk
LCBjb250ZW50KSkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgU3RyaW5nIGJvZHk7Cisg
ICAgICAgIGlmIChJbnNwZWN0b3JQYWdlQWdlbnQ6OnNoYXJlZEJ1ZmZlckNvbnRlbnQocmVzb3Vy
Y2VEYXRhLT5idWZmZXIoKSwgcmVzb3VyY2VEYXRhLT50ZXh0RW5jb2RpbmdOYW1lKCksIGZhbHNl
LCAmYm9keSkpCisgICAgICAgICAgICByZXR1cm4geyB7IGJvZHksIGZhbHNlIH0gfTsKICAgICB9
CiAKICAgICBpZiAocmVzb3VyY2VEYXRhLT5jYWNoZWRSZXNvdXJjZSgpKSB7Ci0gICAgICAgIGlm
IChJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmNhY2hlZFJlc291cmNlQ29udGVudCgqcmVzb3VyY2VE
YXRhLT5jYWNoZWRSZXNvdXJjZSgpLCBjb250ZW50LCBiYXNlNjRFbmNvZGVkKSkKLSAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgU3RyaW5nIGJvZHk7CisgICAgICAgIGJvb2wgYmFzZTY0RW5j
b2RlZDsKKyAgICAgICAgaWYgKEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6Y2FjaGVkUmVzb3VyY2VD
b250ZW50KCpyZXNvdXJjZURhdGEtPmNhY2hlZFJlc291cmNlKCksICZib2R5LCAmYmFzZTY0RW5j
b2RlZCkpCisgICAgICAgICAgICByZXR1cm4geyB7IGJvZHksIGJhc2U2NEVuY29kZWQgfSB9Owog
ICAgIH0KIAotICAgIGVycm9yU3RyaW5nID0gIk1pc3NpbmcgY29udGVudCBvZiByZXNvdXJjZSBm
b3IgZ2l2ZW4gcmVxdWVzdElkIl9zOworICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTWlzc2lu
ZyBjb250ZW50IG9mIHJlc291cmNlIGZvciBnaXZlbiByZXF1ZXN0SWQiX3MpOwogfQogCi12b2lk
IEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6c2V0UmVzb3VyY2VDYWNoaW5nRGlzYWJsZWQoRXJyb3JT
dHJpbmcmLCBib29sIGRpc2FibGVkKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5z
cGVjdG9yTmV0d29ya0FnZW50OjpzZXRSZXNvdXJjZUNhY2hpbmdEaXNhYmxlZChib29sIGRpc2Fi
bGVkKQogewotICAgIHNldFJlc291cmNlQ2FjaGluZ0Rpc2FibGVkKGRpc2FibGVkKTsKKyAgICBz
ZXRSZXNvdXJjZUNhY2hpbmdEaXNhYmxlZEludGVybmFsKGRpc2FibGVkKTsKKworICAgIHJldHVy
biB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50Ojpsb2FkUmVzb3VyY2UoY29u
c3QgU3RyaW5nJiBmcmFtZUlkLCBjb25zdCBTdHJpbmcmIHVybFN0cmluZywgUmVmPExvYWRSZXNv
dXJjZUNhbGxiYWNrPiYmIGNhbGxiYWNrKQordm9pZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6Omxv
YWRSZXNvdXJjZShjb25zdCBQcm90b2NvbDo6TmV0d29yazo6RnJhbWVJZCYgZnJhbWVJZCwgY29u
c3QgU3RyaW5nJiB1cmxTdHJpbmcsIFJlZjxMb2FkUmVzb3VyY2VDYWxsYmFjaz4mJiBjYWxsYmFj
aykKIHsKLSAgICBFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKyAgICBQcm90b2NvbDo6RXJyb3JT
dHJpbmcgZXJyb3JTdHJpbmc7CiAgICAgYXV0byogY29udGV4dCA9IHNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoZXJyb3JTdHJpbmcsIGZyYW1lSWQpOwogICAgIGlmICghY29udGV4dCkgewogICAgICAg
ICBjYWxsYmFjay0+c2VuZEZhaWx1cmUoZXJyb3JTdHJpbmcpOwpAQCAtOTk0LDI2ICs5OTQsMjIg
QEAgdm9pZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmxvYWRSZXNvdXJjZShjb25zdCBTdHJpbmcm
IGZyYW1lSWQsIGNvbnN0IFN0cmluZyYgdXIKICAgICBpbnNwZWN0b3JUaHJlYWRhYmxlTG9hZGVy
Q2xpZW50LT5zZXRMb2FkZXIoV1RGTW92ZShsb2FkZXIpKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JO
ZXR3b3JrQWdlbnQ6OmdldFNlcmlhbGl6ZWRDZXJ0aWZpY2F0ZShFcnJvclN0cmluZyYgZXJyb3JT
dHJpbmcsIGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBTdHJpbmcqIHNlcmlhbGl6ZWRDZXJ0aWZp
Y2F0ZSkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPFN0cmluZz4gSW5zcGVjdG9yTmV0d29ya0Fn
ZW50OjpnZXRTZXJpYWxpemVkQ2VydGlmaWNhdGUoY29uc3QgUHJvdG9jb2w6Ok5ldHdvcms6OlJl
cXVlc3RJZCYgcmVxdWVzdElkKQogewogICAgIGF1dG8qIHJlc291cmNlRGF0YSA9IG1fcmVzb3Vy
Y2VzRGF0YS0+ZGF0YShyZXF1ZXN0SWQpOwotICAgIGlmICghcmVzb3VyY2VEYXRhKSB7Ci0gICAg
ICAgIGVycm9yU3RyaW5nID0gIk1pc3NpbmcgcmVzb3VyY2UgZm9yIGdpdmVuIHJlcXVlc3RJZCJf
czsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoIXJlc291cmNlRGF0YSkKKyAgICAg
ICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJNaXNzaW5nIHJlc291cmNlIGZvciBnaXZlbiByZXF1
ZXN0SWQiX3MpOwogCiAgICAgYXV0byYgY2VydGlmaWNhdGUgPSByZXNvdXJjZURhdGEtPmNlcnRp
ZmljYXRlSW5mbygpOwotICAgIGlmICghY2VydGlmaWNhdGUgfHwgY2VydGlmaWNhdGUudmFsdWUo
KS5pc0VtcHR5KCkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWlzc2luZyBjZXJ0aWZpY2F0
ZSBvZiByZXNvdXJjZSBmb3IgZ2l2ZW4gcmVxdWVzdElkIl9zOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQorICAgIGlmICghY2VydGlmaWNhdGUgfHwgY2VydGlmaWNhdGUudmFsdWUoKS5pc0VtcHR5
KCkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTWlzc2luZyBjZXJ0aWZpY2F0ZSBv
ZiByZXNvdXJjZSBmb3IgZ2l2ZW4gcmVxdWVzdElkIl9zKTsKIAogICAgIFdURjo6UGVyc2lzdGVu
Y2U6OkVuY29kZXIgZW5jb2RlcjsKICAgICBXVEY6OlBlcnNpc3RlbmNlOjpDb2RlcjxXZWJDb3Jl
OjpDZXJ0aWZpY2F0ZUluZm8+OjplbmNvZGUoZW5jb2RlciwgY2VydGlmaWNhdGUudmFsdWUoKSk7
Ci0gICAgKnNlcmlhbGl6ZWRDZXJ0aWZpY2F0ZSA9IGJhc2U2NEVuY29kZShlbmNvZGVyLmJ1ZmZl
cigpLCBlbmNvZGVyLmJ1ZmZlclNpemUoKSk7CisgICAgcmV0dXJuIGJhc2U2NEVuY29kZShlbmNv
ZGVyLmJ1ZmZlcigpLCBlbmNvZGVyLmJ1ZmZlclNpemUoKSk7CiB9CiAKLVdlYlNvY2tldCogSW5z
cGVjdG9yTmV0d29ya0FnZW50Ojp3ZWJTb2NrZXRGb3JSZXF1ZXN0SWQoY29uc3QgU3RyaW5nJiBy
ZXF1ZXN0SWQpCitXZWJTb2NrZXQqIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6d2ViU29ja2V0Rm9y
UmVxdWVzdElkKGNvbnN0IFByb3RvY29sOjpOZXR3b3JrOjpSZXF1ZXN0SWQmIHJlcXVlc3RJZCkK
IHsKICAgICBMb2NrSG9sZGVyIGxvY2soV2ViU29ja2V0OjphbGxBY3RpdmVXZWJTb2NrZXRzTXV0
ZXgoKSk7CiAKQEAgLTEwMzEsMzkgKzEwMjcsMzYgQEAgc3RhdGljIEpTQzo6SlNWYWx1ZSB3ZWJT
b2NrZXRBc1NjcmlwdFZhbHVlKEpTQzo6SlNHbG9iYWxPYmplY3QmIHN0YXRlLCBXZWJTb2NrZXQK
ICAgICByZXR1cm4gdG9KUygmc3RhdGUsIGRlcHJlY2F0ZWRHbG9iYWxPYmplY3RGb3JQcm90b3R5
cGUoJnN0YXRlKSwgd2ViU29ja2V0KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6
OnJlc29sdmVXZWJTb2NrZXQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcm
IHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nKiBvYmplY3RHcm91cCwgUmVmUHRyPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4mIHJlc3VsdCkKK1Byb3RvY29sOjpFcnJv
clN0cmluZ09yPFJlZjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0Pj4gSW5zcGVjdG9y
TmV0d29ya0FnZW50OjpyZXNvbHZlV2ViU29ja2V0KGNvbnN0IFByb3RvY29sOjpOZXR3b3JrOjpS
ZXF1ZXN0SWQmIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCkKIHsKICAgICBX
ZWJTb2NrZXQqIHdlYlNvY2tldCA9IHdlYlNvY2tldEZvclJlcXVlc3RJZChyZXF1ZXN0SWQpOwot
ICAgIGlmICghd2ViU29ja2V0KSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIk1pc3Npbmcgd2Vi
IHNvY2tldCBmb3IgZ2l2ZW4gcmVxdWVzdElkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQor
ICAgIGlmICghd2ViU29ja2V0KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk1pc3Np
bmcgd2ViIHNvY2tldCBmb3IgZ2l2ZW4gcmVxdWVzdElkIl9zKTsKIAogICAgIC8vIEZJWE1FOiA8
aHR0cHM6Ly93ZWJraXQub3JnL2IvMTY4NDc1PiBXZWIgSW5zcGVjdG9yOiBDb3JyZWN0bHkgZGlz
cGxheSBpZnJhbWUncyBhbmQgd29ya2VyJ3MgV2ViU29ja2V0cwogICAgIGlmICghaXM8RG9jdW1l
bnQ+KHdlYlNvY2tldC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKSkKLSAgICAgICAgcmV0dXJu
OworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk5vdCBzdXBwb3J0ZWQiKTsKIAogICAg
IGF1dG8qIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KHdlYlNvY2tldC0+c2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCgpKTsKICAgICBhdXRvKiBmcmFtZSA9IGRvY3VtZW50LT5mcmFtZSgpOwot
ICAgIGlmICghZnJhbWUpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWlzc2luZyBmcmFtZSBv
ZiB3ZWIgc29ja2V0IGZvciBnaXZlbiByZXF1ZXN0SWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJNaXNz
aW5nIGZyYW1lIG9mIHdlYiBzb2NrZXQgZm9yIGdpdmVuIHJlcXVlc3RJZCJfcyk7CiAKICAgICBh
dXRvJiBzdGF0ZSA9ICptYWluV29ybGRFeGVjU3RhdGUoZnJhbWUpOwogICAgIGF1dG8gaW5qZWN0
ZWRTY3JpcHQgPSBtX2luamVjdGVkU2NyaXB0TWFuYWdlci5pbmplY3RlZFNjcmlwdEZvcigmc3Rh
dGUpOwogICAgIEFTU0VSVCghaW5qZWN0ZWRTY3JpcHQuaGFzTm9WYWx1ZSgpKTsKIAotICAgIFN0
cmluZyBvYmplY3RHcm91cE5hbWUgPSBvYmplY3RHcm91cCA/ICpvYmplY3RHcm91cCA6IFN0cmlu
ZygpOwotICAgIHJlc3VsdCA9IGluamVjdGVkU2NyaXB0LndyYXBPYmplY3Qod2ViU29ja2V0QXNT
Y3JpcHRWYWx1ZShzdGF0ZSwgd2ViU29ja2V0KSwgb2JqZWN0R3JvdXBOYW1lKTsKKyAgICBhdXRv
IG9iamVjdCA9IGluamVjdGVkU2NyaXB0LndyYXBPYmplY3Qod2ViU29ja2V0QXNTY3JpcHRWYWx1
ZShzdGF0ZSwgd2ViU29ja2V0KSwgb2JqZWN0R3JvdXApOworICAgIGlmICghb2JqZWN0KQorICAg
ICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkludGVybmFsIGVycm9yOiB1bmFibGUgdG8gY2Fz
dCBXZWJTb2NrZXQiKTsKKworICAgIHJldHVybiBvYmplY3QucmVsZWFzZU5vbk51bGwoKTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OnNldEludGVyY2VwdGlvbkVuYWJsZWQoRXJy
b3JTdHJpbmcmIGVycm9yU3RyaW5nLCBib29sIGVuYWJsZWQpCitQcm90b2NvbDo6RXJyb3JTdHJp
bmdPcjx2b2lkPiBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OnNldEludGVyY2VwdGlvbkVuYWJsZWQo
Ym9vbCBlbmFibGVkKQogewotICAgIGlmIChtX2ludGVyY2VwdGlvbkVuYWJsZWQgPT0gZW5hYmxl
ZCkgewotICAgICAgICBlcnJvclN0cmluZyA9IG1faW50ZXJjZXB0aW9uRW5hYmxlZCA/ICJJbnRl
cmNlcHRpb24gYWxyZWFkeSBlbmFibGVkIl9zIDogIkludGVyY2VwdGlvbiBhbHJlYWR5IGRpc2Fi
bGVkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmIChtX2ludGVyY2VwdGlvbkVu
YWJsZWQgPT0gZW5hYmxlZCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKG1faW50ZXJj
ZXB0aW9uRW5hYmxlZCA/ICJJbnRlcmNlcHRpb24gYWxyZWFkeSBlbmFibGVkIl9zIDogIkludGVy
Y2VwdGlvbiBhbHJlYWR5IGRpc2FibGVkIl9zKTsKIAogICAgIG1faW50ZXJjZXB0aW9uRW5hYmxl
ZCA9IGVuYWJsZWQ7CiAKQEAgLTEwNzEsNDYgKzEwNjQsNDAgQEAgdm9pZCBJbnNwZWN0b3JOZXR3
b3JrQWdlbnQ6OnNldEludGVyY2VwdGlvbkVuYWJsZWQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5n
LCBib28KICAgICAgICAgY29udGludWVQZW5kaW5nUmVxdWVzdHMoKTsKICAgICAgICAgY29udGlu
dWVQZW5kaW5nUmVzcG9uc2VzKCk7CiAgICAgfQorCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9p
ZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmFkZEludGVyY2VwdGlvbihFcnJvclN0cmluZyYgZXJy
b3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIG5ldHdvcmtTdGFnZVN0
cmluZywgY29uc3QgYm9vbCogb3B0aW9uYWxDYXNlU2Vuc2l0aXZlLCBjb25zdCBib29sKiBvcHRp
b25hbElzUmVnZXgpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JOZXR3
b3JrQWdlbnQ6OmFkZEludGVyY2VwdGlvbihjb25zdCBTdHJpbmcmIHVybCwgUHJvdG9jb2w6Ok5l
dHdvcms6Ok5ldHdvcmtTdGFnZSBuZXR3b3JrU3RhZ2UsIE9wdGlvbmFsPGJvb2w+JiYgY2FzZVNl
bnNpdGl2ZSwgT3B0aW9uYWw8Ym9vbD4mJiBpc1JlZ2V4KQogewotICAgIGF1dG8gbmV0d29ya1N0
YWdlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6SW5zcGVjdG9ySGVscGVyczo6cGFyc2VFbnVtVmFs
dWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6Ok5ldHdvcmtTdGFnZT4o
bmV0d29ya1N0YWdlU3RyaW5nKTsKLSAgICBpZiAoIW5ldHdvcmtTdGFnZSkgewotICAgICAgICBl
cnJvclN0cmluZyA9IG1ha2VTdHJpbmcoIlVua25vd24gbmV0d29ya1N0YWdlOiAiX3MsIG5ldHdv
cmtTdGFnZVN0cmluZyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBJbnRlcmNlcHQg
aW50ZXJjZXB0OwogICAgIGludGVyY2VwdC51cmwgPSB1cmw7Ci0gICAgaWYgKG9wdGlvbmFsQ2Fz
ZVNlbnNpdGl2ZSkKLSAgICAgICAgaW50ZXJjZXB0LmNhc2VTZW5zaXRpdmUgPSAqb3B0aW9uYWxD
YXNlU2Vuc2l0aXZlOwotICAgIGlmIChvcHRpb25hbElzUmVnZXgpCi0gICAgICAgIGludGVyY2Vw
dC5pc1JlZ2V4ID0gKm9wdGlvbmFsSXNSZWdleDsKLSAgICBpbnRlcmNlcHQubmV0d29ya1N0YWdl
ID0gbmV0d29ya1N0YWdlLnZhbHVlKCk7CisgICAgaWYgKGNhc2VTZW5zaXRpdmUpCisgICAgICAg
IGludGVyY2VwdC5jYXNlU2Vuc2l0aXZlID0gKmNhc2VTZW5zaXRpdmU7CisgICAgaWYgKGlzUmVn
ZXgpCisgICAgICAgIGludGVyY2VwdC5pc1JlZ2V4ID0gKmlzUmVnZXg7CisgICAgaW50ZXJjZXB0
Lm5ldHdvcmtTdGFnZSA9IG5ldHdvcmtTdGFnZTsKIAogICAgIGlmICghbV9pbnRlcmNlcHRzLmFw
cGVuZElmTm90Q29udGFpbnMoaW50ZXJjZXB0KSkKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiSW50
ZXJjZXB0IGZvciBnaXZlbiB1cmwsIGdpdmVuIGlzUmVnZXgsIGFuZCBnaXZlbiBzdGFnZSBhbHJl
YWR5IGV4aXN0cyJfczsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJJbnRlcmNlcHQg
Zm9yIGdpdmVuIHVybCwgZ2l2ZW4gaXNSZWdleCwgYW5kIGdpdmVuIHN0YWdlIGFscmVhZHkgZXhp
c3RzIl9zKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yTmV0d29ya0Fn
ZW50OjpyZW1vdmVJbnRlcmNlcHRpb24oRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBT
dHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBuZXR3b3JrU3RhZ2VTdHJpbmcsIGNvbnN0IGJvb2wq
IG9wdGlvbmFsQ2FzZVNlbnNpdGl2ZSwgY29uc3QgYm9vbCogb3B0aW9uYWxJc1JlZ2V4KQorUHJv
dG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yTmV0d29ya0FnZW50OjpyZW1vdmVJ
bnRlcmNlcHRpb24oY29uc3QgU3RyaW5nJiB1cmwsIFByb3RvY29sOjpOZXR3b3JrOjpOZXR3b3Jr
U3RhZ2UgbmV0d29ya1N0YWdlLCBPcHRpb25hbDxib29sPiYmIGNhc2VTZW5zaXRpdmUsIE9wdGlv
bmFsPGJvb2w+JiYgaXNSZWdleCkKIHsKLSAgICBhdXRvIG5ldHdvcmtTdGFnZSA9IEluc3BlY3Rv
cjo6UHJvdG9jb2w6Okluc3BlY3RvckhlbHBlcnM6OnBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJ
bnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpOZXR3b3JrU3RhZ2U+KG5ldHdvcmtTdGFnZVN0
cmluZyk7Ci0gICAgaWYgKCFuZXR3b3JrU3RhZ2UpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSBt
YWtlU3RyaW5nKCJVbmtub3duIG5ldHdvcmtTdGFnZTogIl9zLCBuZXR3b3JrU3RhZ2VTdHJpbmcp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgSW50ZXJjZXB0IGludGVyY2VwdDsKICAg
ICBpbnRlcmNlcHQudXJsID0gdXJsOwotICAgIGlmIChvcHRpb25hbENhc2VTZW5zaXRpdmUpCi0g
ICAgICAgIGludGVyY2VwdC5jYXNlU2Vuc2l0aXZlID0gKm9wdGlvbmFsQ2FzZVNlbnNpdGl2ZTsK
LSAgICBpZiAob3B0aW9uYWxJc1JlZ2V4KQotICAgICAgICBpbnRlcmNlcHQuaXNSZWdleCA9ICpv
cHRpb25hbElzUmVnZXg7Ci0gICAgaW50ZXJjZXB0Lm5ldHdvcmtTdGFnZSA9IG5ldHdvcmtTdGFn
ZS52YWx1ZSgpOworICAgIGlmIChjYXNlU2Vuc2l0aXZlKQorICAgICAgICBpbnRlcmNlcHQuY2Fz
ZVNlbnNpdGl2ZSA9ICpjYXNlU2Vuc2l0aXZlOworICAgIGlmIChpc1JlZ2V4KQorICAgICAgICBp
bnRlcmNlcHQuaXNSZWdleCA9ICppc1JlZ2V4OworICAgIGludGVyY2VwdC5uZXR3b3JrU3RhZ2Ug
PSBuZXR3b3JrU3RhZ2U7CiAKICAgICBpZiAoIW1faW50ZXJjZXB0cy5yZW1vdmVBbGwoaW50ZXJj
ZXB0KSkKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWlzc2luZyBpbnRlcmNlcHQgZm9yIGdpdmVu
IHVybCwgZ2l2ZW4gaXNSZWdleCwgYW5kIGdpdmVuIHN0YWdlIl9zOworICAgICAgICByZXR1cm4g
bWFrZVVuZXhwZWN0ZWQoIk1pc3NpbmcgaW50ZXJjZXB0IGZvciBnaXZlbiB1cmwsIGdpdmVuIGlz
UmVnZXgsIGFuZCBnaXZlbiBzdGFnZSJfcyk7CisKKyAgICByZXR1cm4geyB9OwogfQogCiBib29s
IEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6d2lsbEludGVyY2VwdChjb25zdCBSZXNvdXJjZVJlcXVl
c3QmIHJlcXVlc3QpCkBAIC0xMTE4LDggKzExMDUsOCBAQCBib29sIEluc3BlY3Rvck5ldHdvcmtB
Z2VudDo6d2lsbEludGVyY2VwdChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCiAgICAg
aWYgKCFtX2ludGVyY2VwdGlvbkVuYWJsZWQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
IHJldHVybiBzaG91bGRJbnRlcmNlcHQocmVxdWVzdC51cmwoKSwgTmV0d29ya1N0YWdlOjpSZXF1
ZXN0KQotICAgICAgICB8fCBzaG91bGRJbnRlcmNlcHQocmVxdWVzdC51cmwoKSwgTmV0d29ya1N0
YWdlOjpSZXNwb25zZSk7CisgICAgcmV0dXJuIHNob3VsZEludGVyY2VwdChyZXF1ZXN0LnVybCgp
LCBQcm90b2NvbDo6TmV0d29yazo6TmV0d29ya1N0YWdlOjpSZXF1ZXN0KQorICAgICAgICB8fCBz
aG91bGRJbnRlcmNlcHQocmVxdWVzdC51cmwoKSwgUHJvdG9jb2w6Ok5ldHdvcms6Ok5ldHdvcmtT
dGFnZTo6UmVzcG9uc2UpOwogfQogCiBib29sIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6c2hvdWxk
SW50ZXJjZXB0UmVxdWVzdChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCkBAIC0xMTI3
LDcgKzExMTQsNyBAQCBib29sIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6c2hvdWxkSW50ZXJjZXB0
UmVxdWVzdChjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlcwogICAgIGlmICghbV9pbnRlcmNl
cHRpb25FbmFibGVkKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gc2hvdWxk
SW50ZXJjZXB0KHJlcXVlc3QudXJsKCksIE5ldHdvcmtTdGFnZTo6UmVxdWVzdCk7CisgICAgcmV0
dXJuIHNob3VsZEludGVyY2VwdChyZXF1ZXN0LnVybCgpLCBQcm90b2NvbDo6TmV0d29yazo6TmV0
d29ya1N0YWdlOjpSZXF1ZXN0KTsKIH0KIAogYm9vbCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OnNo
b3VsZEludGVyY2VwdFJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQpA
QCAtMTEzNSw3ICsxMTIyLDcgQEAgYm9vbCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OnNob3VsZElu
dGVyY2VwdFJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3AKICAgICBpZiAoIW1f
aW50ZXJjZXB0aW9uRW5hYmxlZCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmV0dXJu
IHNob3VsZEludGVyY2VwdChyZXNwb25zZS51cmwoKSwgTmV0d29ya1N0YWdlOjpSZXNwb25zZSk7
CisgICAgcmV0dXJuIHNob3VsZEludGVyY2VwdChyZXNwb25zZS51cmwoKSwgUHJvdG9jb2w6Ok5l
dHdvcms6Ok5ldHdvcmtTdGFnZTo6UmVzcG9uc2UpOwogfQogCiB2b2lkIEluc3BlY3Rvck5ldHdv
cmtBZ2VudDo6aW50ZXJjZXB0UmVxdWVzdChSZXNvdXJjZUxvYWRlciYgbG9hZGVyLCBGdW5jdGlv
bjx2b2lkKGNvbnN0IFJlc291cmNlUmVxdWVzdCYpPiYmIGhhbmRsZXIpCkBAIC0xMTY2LDkyICsx
MTUzLDg5IEBAIHZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50OjppbnRlcmNlcHRSZXNwb25zZShj
b25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSwKIAogICAgIG1fcGVuZGluZ0ludGVyY2Vw
dFJlc3BvbnNlcy5zZXQocmVxdWVzdElkLCBtYWtlVW5pcXVlPFBlbmRpbmdJbnRlcmNlcHRSZXNw
b25zZT4ocmVzcG9uc2UsIFdURk1vdmUoaGFuZGxlcikpKTsKIAotICAgIG1fZnJvbnRlbmREaXNw
YXRjaGVyLT5yZXNwb25zZUludGVyY2VwdGVkKHJlcXVlc3RJZCwgYnVpbGRPYmplY3RGb3JSZXNv
dXJjZVJlc3BvbnNlKHJlc3BvbnNlLCBudWxscHRyKSk7CisgICAgYXV0byByZXNvdXJjZVJlc3Bv
bnNlID0gYnVpbGRPYmplY3RGb3JSZXNvdXJjZVJlc3BvbnNlKHJlc3BvbnNlLCBudWxscHRyKTsK
KyAgICBpZiAoIXJlc291cmNlUmVzcG9uc2UpCisgICAgICAgIHJldHVybjsKKworICAgIG1fZnJv
bnRlbmREaXNwYXRjaGVyLT5yZXNwb25zZUludGVyY2VwdGVkKHJlcXVlc3RJZCwgcmVzb3VyY2VS
ZXNwb25zZS5yZWxlYXNlTm9uTnVsbCgpKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JOZXR3b3JrQWdl
bnQ6OmludGVyY2VwdENvbnRpbnVlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3Ry
aW5nJiByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgbmV0d29ya1N0YWdlU3RyaW5nKQorUHJvdG9j
b2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yTmV0d29ya0FnZW50OjppbnRlcmNlcHRD
b250aW51ZShjb25zdCBQcm90b2NvbDo6TmV0d29yazo6UmVxdWVzdElkJiByZXF1ZXN0SWQsIFBy
b3RvY29sOjpOZXR3b3JrOjpOZXR3b3JrU3RhZ2UgbmV0d29ya1N0YWdlKQogewotICAgIGF1dG8g
bmV0d29ya1N0YWdlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6SW5zcGVjdG9ySGVscGVyczo6cGFy
c2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6Ok5ldHdv
cmtTdGFnZT4obmV0d29ya1N0YWdlU3RyaW5nKTsKLSAgICBpZiAoIW5ldHdvcmtTdGFnZSkgewot
ICAgICAgICBlcnJvclN0cmluZyA9IG1ha2VTdHJpbmcoIlVua25vd24gbmV0d29ya1N0YWdlOiAi
X3MsIG5ldHdvcmtTdGFnZVN0cmluZyk7Ci0gICAgICAgIHJldHVybjsKKyAgICBzd2l0Y2ggKG5l
dHdvcmtTdGFnZSkgeworICAgIGNhc2UgUHJvdG9jb2w6Ok5ldHdvcms6Ok5ldHdvcmtTdGFnZTo6
UmVxdWVzdDoKKyAgICAgICAgaWYgKGF1dG8gcGVuZGluZ0ludGVyY2VwdFJlcXVlc3QgPSBtX3Bl
bmRpbmdJbnRlcmNlcHRSZXF1ZXN0cy50YWtlKHJlcXVlc3RJZCkpIHsKKyAgICAgICAgICAgIHBl
bmRpbmdJbnRlcmNlcHRSZXF1ZXN0LT5jb250aW51ZVdpdGhPcmlnaW5hbFJlcXVlc3QoKTsKKyAg
ICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4
cGVjdGVkKCJNaXNzaW5nIHBlbmRpbmcgaW50ZXJjZXB0IHJlcXVlc3QgZm9yIGdpdmVuIHJlcXVl
c3RJZCJfcyk7CisKKyAgICBjYXNlIFByb3RvY29sOjpOZXR3b3JrOjpOZXR3b3JrU3RhZ2U6OlJl
c3BvbnNlOgorICAgICAgICBpZiAoYXV0byBwZW5kaW5nSW50ZXJjZXB0UmVzcG9uc2UgPSBtX3Bl
bmRpbmdJbnRlcmNlcHRSZXNwb25zZXMudGFrZShyZXF1ZXN0SWQpKSB7CisgICAgICAgICAgICBw
ZW5kaW5nSW50ZXJjZXB0UmVzcG9uc2UtPnJlc3BvbmRXaXRoT3JpZ2luYWxSZXNwb25zZSgpOwor
ICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbWFrZVVu
ZXhwZWN0ZWQoIk1pc3NpbmcgcGVuZGluZyBpbnRlcmNlcHQgcmVzcG9uc2UgZm9yIGdpdmVuIHJl
cXVlc3RJZCJfcyk7CiAgICAgfQogCi0gICAgc3dpdGNoIChuZXR3b3JrU3RhZ2UudmFsdWUoKSkg
ewotICAgIGNhc2UgTmV0d29ya1N0YWdlOjpSZXF1ZXN0OgotICAgICAgICBpZiAoYXV0byBwZW5k
aW5nSW50ZXJjZXB0UmVxdWVzdCA9IG1fcGVuZGluZ0ludGVyY2VwdFJlcXVlc3RzLnRha2UocmVx
dWVzdElkKSkKLSAgICAgICAgICAgIHBlbmRpbmdJbnRlcmNlcHRSZXF1ZXN0LT5jb250aW51ZVdp
dGhPcmlnaW5hbFJlcXVlc3QoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZXJyb3JTdHJp
bmcgPSAiTWlzc2luZyBwZW5kaW5nIGludGVyY2VwdCByZXF1ZXN0IGZvciBnaXZlbiByZXF1ZXN0
SWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIE5ldHdvcmtTdGFnZTo6UmVzcG9uc2U6
Ci0gICAgICAgIGlmIChhdXRvIHBlbmRpbmdJbnRlcmNlcHRSZXNwb25zZSA9IG1fcGVuZGluZ0lu
dGVyY2VwdFJlc3BvbnNlcy50YWtlKHJlcXVlc3RJZCkpCi0gICAgICAgICAgICBwZW5kaW5nSW50
ZXJjZXB0UmVzcG9uc2UtPnJlc3BvbmRXaXRoT3JpZ2luYWxSZXNwb25zZSgpOwotICAgICAgICBl
bHNlCi0gICAgICAgICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIHBlbmRpbmcgaW50ZXJjZXB0
IHJlc3BvbnNlIGZvciBnaXZlbiByZXF1ZXN0SWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJ
bnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmludGVyY2VwdFdpdGhSZXF1ZXN0KEVycm9yU3RyaW5nJiBl
cnJvclN0cmluZywgY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyogdXJsLCBj
b25zdCBTdHJpbmcqIG1ldGhvZCwgY29uc3QgSlNPTjo6T2JqZWN0KiBoZWFkZXJzLCBjb25zdCBT
dHJpbmcqIHBvc3REYXRhKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9y
TmV0d29ya0FnZW50OjppbnRlcmNlcHRXaXRoUmVxdWVzdChjb25zdCBQcm90b2NvbDo6TmV0d29y
azo6UmVxdWVzdElkJiByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcm
IG1ldGhvZCwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBoZWFkZXJzLCBjb25zdCBTdHJpbmcmIHBv
c3REYXRhKQogewogICAgIGF1dG8gcGVuZGluZ1JlcXVlc3QgPSBtX3BlbmRpbmdJbnRlcmNlcHRS
ZXF1ZXN0cy50YWtlKHJlcXVlc3RJZCk7Ci0gICAgaWYgKCFwZW5kaW5nUmVxdWVzdCkgewotICAg
ICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIHBlbmRpbmcgaW50ZXJjZXB0IHJlcXVlc3QgZm9y
IGdpdmVuIHJlcXVlc3RJZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoIXBl
bmRpbmdSZXF1ZXN0KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk1pc3NpbmcgcGVu
ZGluZyBpbnRlcmNlcHQgcmVxdWVzdCBmb3IgZ2l2ZW4gcmVxdWVzdElkIl9zKTsKIAogICAgIGF1
dG8mIGxvYWRlciA9ICpwZW5kaW5nUmVxdWVzdC0+bV9sb2FkZXI7CiAgICAgUmVzb3VyY2VSZXF1
ZXN0IHJlcXVlc3QgPSBsb2FkZXIucmVxdWVzdCgpOwotICAgIGlmICh1cmwpCi0gICAgICAgIHJl
cXVlc3Quc2V0VVJMKFVSTCh7IH0sICp1cmwpKTsKLSAgICBpZiAobWV0aG9kKQotICAgICAgICBy
ZXF1ZXN0LnNldEhUVFBNZXRob2QoKm1ldGhvZCk7CisgICAgaWYgKCEhdXJsKQorICAgICAgICBy
ZXF1ZXN0LnNldFVSTChVUkwoeyB9LCB1cmwpKTsKKyAgICBpZiAoISFtZXRob2QpCisgICAgICAg
IHJlcXVlc3Quc2V0SFRUUE1ldGhvZChtZXRob2QpOwogICAgIGlmIChoZWFkZXJzKSB7CiAgICAg
ICAgIEhUVFBIZWFkZXJNYXAgZXhwbGljaXRIZWFkZXJzOwogICAgICAgICBmb3IgKGF1dG8mIGhl
YWRlciA6ICpoZWFkZXJzKSB7Ci0gICAgICAgICAgICBTdHJpbmcgaGVhZGVyVmFsdWU7Ci0gICAg
ICAgICAgICBpZiAoaGVhZGVyLnZhbHVlLT5hc1N0cmluZyhoZWFkZXJWYWx1ZSkpCisgICAgICAg
ICAgICBhdXRvIGhlYWRlclZhbHVlID0gaGVhZGVyLnZhbHVlLT5hc1N0cmluZygpOworICAgICAg
ICAgICAgaWYgKCEhaGVhZGVyVmFsdWUpCiAgICAgICAgICAgICAgICAgZXhwbGljaXRIZWFkZXJz
LmFkZChoZWFkZXIua2V5LCBoZWFkZXJWYWx1ZSk7CiAgICAgICAgIH0KICAgICAgICAgcmVxdWVz
dC5zZXRIVFRQSGVhZGVyRmllbGRzKFdURk1vdmUoZXhwbGljaXRIZWFkZXJzKSk7CiAgICAgfQot
ICAgIGlmIChwb3N0RGF0YSkgeworICAgIGlmICghIXBvc3REYXRhKSB7CiAgICAgICAgIFZlY3Rv
cjx1aW50OF90PiBidWZmZXI7Ci0gICAgICAgIGlmICghYmFzZTY0RGVjb2RlKCpwb3N0RGF0YSwg
YnVmZmVyKSkgewotICAgICAgICAgICAgZXJyb3JTdHJpbmcgPSAiVW5hYmxlIHRvIGRlY29kZSBn
aXZlbiBwb3N0RGF0YSJfczsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQorICAgICAg
ICBpZiAoIWJhc2U2NERlY29kZShwb3N0RGF0YSwgYnVmZmVyKSkKKyAgICAgICAgICAgIHJldHVy
biBtYWtlVW5leHBlY3RlZCgiVW5hYmxlIHRvIGRlY29kZSBnaXZlbiBwb3N0RGF0YSJfcyk7CiAK
ICAgICAgICAgcmVxdWVzdC5zZXRIVFRQQm9keShGb3JtRGF0YTo6Y3JlYXRlKGJ1ZmZlcikpOwog
ICAgIH0KICAgICAvLyBGSVhNRTogZmlndXJlIG91dCBob3cgdG8gaWRlbnRpZnkgd2hlbiBhIHJl
cXVlc3QgaGFzIGJlZW4gb3ZlcnJpZGRlbiB3aGVuIHdlIGFkZCB0aGlzIHRvIHRoZSBmcm9udGVu
ZC4KICAgICBwZW5kaW5nUmVxdWVzdC0+Y29udGludWVXaXRoUmVxdWVzdChyZXF1ZXN0KTsKKwor
ICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50OjppbnRlcmNl
cHRXaXRoUmVzcG9uc2UoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBTdHJpbmcmIHJl
cXVlc3RJZCwgY29uc3QgU3RyaW5nJiBjb250ZW50LCBib29sIGJhc2U2NEVuY29kZWQsIGNvbnN0
IFN0cmluZyogbWltZVR5cGUsIGNvbnN0IGludCogc3RhdHVzLCBjb25zdCBTdHJpbmcqIHN0YXR1
c1RleHQsIGNvbnN0IEpTT046Ok9iamVjdCogaGVhZGVycykKK1Byb3RvY29sOjpFcnJvclN0cmlu
Z09yPHZvaWQ+IEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6aW50ZXJjZXB0V2l0aFJlc3BvbnNlKGNv
bnN0IFByb3RvY29sOjpOZXR3b3JrOjpSZXF1ZXN0SWQmIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5n
JiBjb250ZW50LCBib29sIGJhc2U2NEVuY29kZWQsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9w
dGlvbmFsPGludD4mJiBzdGF0dXMsIGNvbnN0IFN0cmluZyYgc3RhdHVzVGV4dCwgUmVmUHRyPEpT
T046Ok9iamVjdD4mJiBoZWFkZXJzKQogewogICAgIGF1dG8gcGVuZGluZ0ludGVyY2VwdFJlc3Bv
bnNlID0gbV9wZW5kaW5nSW50ZXJjZXB0UmVzcG9uc2VzLnRha2UocmVxdWVzdElkKTsKLSAgICBp
ZiAoIXBlbmRpbmdJbnRlcmNlcHRSZXNwb25zZSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJN
aXNzaW5nIHBlbmRpbmcgaW50ZXJjZXB0IHJlc3BvbnNlIGZvciBnaXZlbiByZXF1ZXN0SWQiX3M7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKCFwZW5kaW5nSW50ZXJjZXB0UmVzcG9u
c2UpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTWlzc2luZyBwZW5kaW5nIGludGVy
Y2VwdCByZXNwb25zZSBmb3IgZ2l2ZW4gcmVxdWVzdElkIl9zKTsKIAogICAgIFJlc291cmNlUmVz
cG9uc2Ugb3ZlcnJpZGVSZXNwb25zZShwZW5kaW5nSW50ZXJjZXB0UmVzcG9uc2UtPm9yaWdpbmFs
UmVzcG9uc2UoKSk7CiAgICAgb3ZlcnJpZGVSZXNwb25zZS5zZXRTb3VyY2UoUmVzb3VyY2VSZXNw
b25zZTo6U291cmNlOjpJbnNwZWN0b3JPdmVycmlkZSk7CiAKICAgICBpZiAoc3RhdHVzKQogICAg
ICAgICBvdmVycmlkZVJlc3BvbnNlLnNldEhUVFBTdGF0dXNDb2RlKCpzdGF0dXMpOwotICAgIGlm
IChzdGF0dXNUZXh0KQotICAgICAgICBvdmVycmlkZVJlc3BvbnNlLnNldEhUVFBTdGF0dXNUZXh0
KCpzdGF0dXNUZXh0KTsKLSAgICBpZiAobWltZVR5cGUpCi0gICAgICAgIG92ZXJyaWRlUmVzcG9u
c2Uuc2V0TWltZVR5cGUoKm1pbWVUeXBlKTsKKyAgICBpZiAoISFzdGF0dXNUZXh0KQorICAgICAg
ICBvdmVycmlkZVJlc3BvbnNlLnNldEhUVFBTdGF0dXNUZXh0KHN0YXR1c1RleHQpOworICAgIGlm
ICghIW1pbWVUeXBlKQorICAgICAgICBvdmVycmlkZVJlc3BvbnNlLnNldE1pbWVUeXBlKG1pbWVU
eXBlKTsKICAgICBpZiAoaGVhZGVycykgewogICAgICAgICBIVFRQSGVhZGVyTWFwIGV4cGxpY2l0
SGVhZGVyczsKICAgICAgICAgZm9yIChhdXRvJiBoZWFkZXIgOiAqaGVhZGVycykgewotICAgICAg
ICAgICAgU3RyaW5nIGhlYWRlclZhbHVlOwotICAgICAgICAgICAgaWYgKGhlYWRlci52YWx1ZS0+
YXNTdHJpbmcoaGVhZGVyVmFsdWUpKQorICAgICAgICAgICAgYXV0byBoZWFkZXJWYWx1ZSA9IGhl
YWRlci52YWx1ZS0+YXNTdHJpbmcoKTsKKyAgICAgICAgICAgIGlmICghIWhlYWRlclZhbHVlKQog
ICAgICAgICAgICAgICAgIGV4cGxpY2l0SGVhZGVycy5hZGQoaGVhZGVyLmtleSwgaGVhZGVyVmFs
dWUpOwogICAgICAgICB9CiAgICAgICAgIG92ZXJyaWRlUmVzcG9uc2Uuc2V0SFRUUEhlYWRlckZp
ZWxkcyhXVEZNb3ZlKGV4cGxpY2l0SGVhZGVycykpOwpAQCAtMTI2MSw0MSArMTI0NSwzNCBAQCB2
b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6aW50ZXJjZXB0V2l0aFJlc3BvbnNlKEVycm9yU3Ry
aW5nJiBlcnJvclN0cmluZywgY29ucwogICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IG92ZXJyaWRl
RGF0YTsKICAgICBpZiAoYmFzZTY0RW5jb2RlZCkgewogICAgICAgICBWZWN0b3I8dWludDhfdD4g
YnVmZmVyOwotICAgICAgICBpZiAoIWJhc2U2NERlY29kZShjb250ZW50LCBidWZmZXIpKSB7Ci0g
ICAgICAgICAgICBlcnJvclN0cmluZyA9ICJVbmFibGUgdG8gZGVjb2RlIGdpdmVuIGNvbnRlbnQi
X3M7Ci0gICAgICAgICAgICBwZW5kaW5nSW50ZXJjZXB0UmVzcG9uc2UtPnJlc3BvbmRXaXRoT3Jp
Z2luYWxSZXNwb25zZSgpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9CisgICAgICAg
IGlmICghYmFzZTY0RGVjb2RlKGNvbnRlbnQsIGJ1ZmZlcikpCisgICAgICAgICAgICByZXR1cm4g
bWFrZVVuZXhwZWN0ZWQoIlVuYWJsZSB0byBkZWNvZGUgZ2l2ZW4gY29udGVudCJfcyk7CiAKICAg
ICAgICAgb3ZlcnJpZGVEYXRhID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUoV1RGTW92ZShidWZmZXIp
KTsKICAgICB9IGVsc2UKICAgICAgICAgb3ZlcnJpZGVEYXRhID0gU2hhcmVkQnVmZmVyOjpjcmVh
dGUoY29udGVudC51dGY4KCkuZGF0YSgpLCBjb250ZW50LnV0ZjgoKS5sZW5ndGgoKSk7CiAKICAg
ICBwZW5kaW5nSW50ZXJjZXB0UmVzcG9uc2UtPnJlc3BvbmQob3ZlcnJpZGVSZXNwb25zZSwgb3Zl
cnJpZGVEYXRhKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yTmV0d29y
a0FnZW50OjppbnRlcmNlcHRSZXF1ZXN0V2l0aFJlc3BvbnNlKEVycm9yU3RyaW5nJiBlcnJvclN0
cmluZywgY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgY29udGVudCwgYm9v
bCBiYXNlNjRFbmNvZGVkLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBpbnQgc3RhdHVzLCBjb25z
dCBTdHJpbmcmIHN0YXR1c1RleHQsIGNvbnN0IEpTT046Ok9iamVjdCYgaGVhZGVycykKK1Byb3Rv
Y29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6aW50ZXJjZXB0
UmVxdWVzdFdpdGhSZXNwb25zZShjb25zdCBQcm90b2NvbDo6TmV0d29yazo6UmVxdWVzdElkJiBy
ZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgY29udGVudCwgYm9vbCBiYXNlNjRFbmNvZGVkLCBjb25z
dCBTdHJpbmcmIG1pbWVUeXBlLCBpbnQgc3RhdHVzLCBjb25zdCBTdHJpbmcmIHN0YXR1c1RleHQs
IFJlZjxKU09OOjpPYmplY3Q+JiYgaGVhZGVycykKIHsKICAgICBhdXRvIHBlbmRpbmdSZXF1ZXN0
ID0gbV9wZW5kaW5nSW50ZXJjZXB0UmVxdWVzdHMudGFrZShyZXF1ZXN0SWQpOwotICAgIGlmICgh
cGVuZGluZ1JlcXVlc3QpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWlzc2luZyBwZW5kaW5n
IGludGVyY2VwdCByZXF1ZXN0IGZvciBnaXZlbiByZXF1ZXN0SWQiX3M7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9CisgICAgaWYgKCFwZW5kaW5nUmVxdWVzdCkKKyAgICAgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKCJNaXNzaW5nIHBlbmRpbmcgaW50ZXJjZXB0IHJlcXVlc3QgZm9yIGdpdmVuIHJl
cXVlc3RJZCJfcyk7CiAKICAgICAvLyBMb2FkZXIgd2lsbCBiZSByZXRhaW5lZCBpbiB0aGUgZGlk
UmVjZWl2ZVJlc3BvbnNlIGxhbWJkYSBiZWxvdy4KICAgICBSZWZQdHI8UmVzb3VyY2VMb2FkZXI+
IGxvYWRlciA9IHBlbmRpbmdSZXF1ZXN0LT5tX2xvYWRlci5nZXQoKTsKLSAgICBpZiAobG9hZGVy
LT5yZWFjaGVkVGVybWluYWxTdGF0ZSgpKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIlVuYWJs
ZSB0byBmdWxmaWxsIHJlcXVlc3QsIGl0IGhhcyBhbHJlYWR5IGJlZW4gcHJvY2Vzc2VkIl9zOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmIChsb2FkZXItPnJlYWNoZWRUZXJtaW5hbFN0
YXRlKCkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiVW5hYmxlIHRvIGZ1bGZpbGwg
cmVxdWVzdCwgaXQgaGFzIGFscmVhZHkgYmVlbiBwcm9jZXNzZWQiX3MpOwogCiAgICAgUmVmUHRy
PFNoYXJlZEJ1ZmZlcj4gZGF0YTsKICAgICBpZiAoYmFzZTY0RW5jb2RlZCkgewogICAgICAgICBW
ZWN0b3I8dWludDhfdD4gYnVmZmVyOwotICAgICAgICBpZiAoIWJhc2U2NERlY29kZShjb250ZW50
LCBidWZmZXIpKSB7Ci0gICAgICAgICAgICBlcnJvclN0cmluZyA9ICJVbmFibGUgdG8gZGVjb2Rl
IGdpdmVuIGNvbnRlbnQiX3M7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KKyAgICAg
ICAgaWYgKCFiYXNlNjREZWNvZGUoY29udGVudCwgYnVmZmVyKSkKKyAgICAgICAgICAgIHJldHVy
biBtYWtlVW5leHBlY3RlZCgiVW5hYmxlIHRvIGRlY29kZSBnaXZlbiBjb250ZW50Il9zKTsKIAog
ICAgICAgICBkYXRhID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUoV1RGTW92ZShidWZmZXIpKTsKICAg
ICB9IGVsc2UKQEAgLTEzMDcsOSArMTI4NCw5IEBAIHZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50
OjppbnRlcmNlcHRSZXF1ZXN0V2l0aFJlc3BvbnNlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluCiAg
ICAgcmVzcG9uc2Uuc2V0SFRUUFN0YXR1c0NvZGUoc3RhdHVzKTsKICAgICByZXNwb25zZS5zZXRI
VFRQU3RhdHVzVGV4dChzdGF0dXNUZXh0KTsKICAgICBIVFRQSGVhZGVyTWFwIGV4cGxpY2l0SGVh
ZGVyczsKLSAgICBmb3IgKGF1dG8mIGhlYWRlciA6IGhlYWRlcnMpIHsKLSAgICAgICAgU3RyaW5n
IGhlYWRlclZhbHVlOwotICAgICAgICBpZiAoaGVhZGVyLnZhbHVlLT5hc1N0cmluZyhoZWFkZXJW
YWx1ZSkpCisgICAgZm9yIChhdXRvJiBoZWFkZXIgOiBoZWFkZXJzLmdldCgpKSB7CisgICAgICAg
IGF1dG8gaGVhZGVyVmFsdWUgPSBoZWFkZXIudmFsdWUtPmFzU3RyaW5nKCk7CisgICAgICAgIGlm
ICghIWhlYWRlclZhbHVlKQogICAgICAgICAgICAgZXhwbGljaXRIZWFkZXJzLmFkZChoZWFkZXIu
a2V5LCBoZWFkZXJWYWx1ZSk7CiAgICAgfQogICAgIHJlc3BvbnNlLnNldEhUVFBIZWFkZXJGaWVs
ZHMoV1RGTW92ZShleHBsaWNpdEhlYWRlcnMpKTsKQEAgLTEzMTksNDQgKzEyOTYsNDAgQEAgdm9p
ZCBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6OmludGVyY2VwdFJlcXVlc3RXaXRoUmVzcG9uc2UoRXJy
b3JTdHJpbmcmIGVycm9yU3RyaW4KICAgICAgICAgICAgIGxvYWRlci0+ZGlkUmVjZWl2ZUJ1ZmZl
cihXVEZNb3ZlKGJ1ZmZlciksIGJ1ZmZlci0+c2l6ZSgpLCBEYXRhUGF5bG9hZFdob2xlUmVzb3Vy
Y2UpOwogICAgICAgICBsb2FkZXItPmRpZEZpbmlzaExvYWRpbmcoTmV0d29ya0xvYWRNZXRyaWNz
KCkpOwogICAgIH0pOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JOZXR3
b3JrQWdlbnQ6OmludGVyY2VwdFJlcXVlc3RXaXRoRXJyb3IoRXJyb3JTdHJpbmcmIGVycm9yU3Ry
aW5nLCBjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBlcnJvclR5cGVTdHJp
bmcpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JOZXR3b3JrQWdlbnQ6
OmludGVyY2VwdFJlcXVlc3RXaXRoRXJyb3IoY29uc3QgUHJvdG9jb2w6Ok5ldHdvcms6OlJlcXVl
c3RJZCYgcmVxdWVzdElkLCBQcm90b2NvbDo6TmV0d29yazo6UmVzb3VyY2VFcnJvclR5cGUgZXJy
b3JUeXBlKQogewogICAgIGF1dG8gcGVuZGluZ1JlcXVlc3QgPSBtX3BlbmRpbmdJbnRlcmNlcHRS
ZXF1ZXN0cy50YWtlKHJlcXVlc3RJZCk7Ci0gICAgaWYgKCFwZW5kaW5nUmVxdWVzdCkgewotICAg
ICAgICBlcnJvclN0cmluZyA9ICJNaXNzaW5nIHBlbmRpbmcgaW50ZXJjZXB0IHJlcXVlc3QgZm9y
IGdpdmVuIHJlcXVlc3RJZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoIXBl
bmRpbmdSZXF1ZXN0KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIk1pc3NpbmcgcGVu
ZGluZyBpbnRlcmNlcHQgcmVxdWVzdCBmb3IgZ2l2ZW4gcmVxdWVzdElkIl9zKTsKIAogICAgIGF1
dG8mIGxvYWRlciA9ICpwZW5kaW5nUmVxdWVzdC0+bV9sb2FkZXI7Ci0gICAgaWYgKGxvYWRlci5y
ZWFjaGVkVGVybWluYWxTdGF0ZSgpKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIlVuYWJsZSB0
byBhYm9ydCByZXF1ZXN0LCBpdCBoYXMgYWxyZWFkeSBiZWVuIHByb2Nlc3NlZCJfczsKLSAgICAg
ICAgcmV0dXJuOworICAgIGlmIChsb2FkZXIucmVhY2hlZFRlcm1pbmFsU3RhdGUoKSkKKyAgICAg
ICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJVbmFibGUgdG8gYWJvcnQgcmVxdWVzdCwgaXQgaGFz
IGFscmVhZHkgYmVlbiBwcm9jZXNzZWQiX3MpOworCisgICAgc3dpdGNoIChlcnJvclR5cGUpIHsK
KyAgICBjYXNlIFByb3RvY29sOjpOZXR3b3JrOjpSZXNvdXJjZUVycm9yVHlwZTo6R2VuZXJhbDoK
KyAgICAgICAgbG9hZGVyLmRpZEZhaWwoUmVzb3VyY2VFcnJvcihlcnJvckRvbWFpbldlYktpdElu
dGVybmFsLCAwLCBsb2FkZXIudXJsKCksICJSZXF1ZXN0IGludGVyY2VwdGVkIl9zLCBSZXNvdXJj
ZUVycm9yOjpUeXBlOjpHZW5lcmFsKSk7CisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBjYXNl
IFByb3RvY29sOjpOZXR3b3JrOjpSZXNvdXJjZUVycm9yVHlwZTo6QWNjZXNzQ29udHJvbDoKKyAg
ICAgICAgbG9hZGVyLmRpZEZhaWwoUmVzb3VyY2VFcnJvcihlcnJvckRvbWFpbldlYktpdEludGVy
bmFsLCAwLCBsb2FkZXIudXJsKCksICJBY2Nlc3MgZGVuaWVkIl9zLCBSZXNvdXJjZUVycm9yOjpU
eXBlOjpBY2Nlc3NDb250cm9sKSk7CisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBjYXNlIFBy
b3RvY29sOjpOZXR3b3JrOjpSZXNvdXJjZUVycm9yVHlwZTo6Q2FuY2VsbGF0aW9uOgorICAgICAg
ICBsb2FkZXIuZGlkRmFpbChSZXNvdXJjZUVycm9yKGVycm9yRG9tYWluV2ViS2l0SW50ZXJuYWws
IDAsIGxvYWRlci51cmwoKSwgIlJlcXVlc3QgY2FuY2VsZWQiX3MsIFJlc291cmNlRXJyb3I6OlR5
cGU6OkNhbmNlbGxhdGlvbikpOworICAgICAgICByZXR1cm4geyB9OworCisgICAgY2FzZSBQcm90
b2NvbDo6TmV0d29yazo6UmVzb3VyY2VFcnJvclR5cGU6OlRpbWVvdXQ6CisgICAgICAgIGxvYWRl
ci5kaWRGYWlsKFJlc291cmNlRXJyb3IoZXJyb3JEb21haW5XZWJLaXRJbnRlcm5hbCwgMCwgbG9h
ZGVyLnVybCgpLCAiUmVxdWVzdCB0aW1lZCBvdXQiX3MsIFJlc291cmNlRXJyb3I6OlR5cGU6OlRp
bWVvdXQpKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKLSAgICBhdXRvIGVycm9yVHlw
ZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6Okluc3BlY3RvckhlbHBlcnM6OnBhcnNlRW51bVZhbHVl
RnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpSZXNvdXJjZUVycm9yVHlw
ZT4oZXJyb3JUeXBlU3RyaW5nKTsKLSAgICBpZiAoIWVycm9yVHlwZSkgewotICAgICAgICBlcnJv
clN0cmluZyA9IG1ha2VTdHJpbmcoIlVua25vd24gZXJyb3JUeXBlOiAiX3MsIGVycm9yVHlwZVN0
cmluZyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBSZXNvdXJjZUVycm9yIGVycm9y
OwotICAgIHN3aXRjaCAoZXJyb3JUeXBlLnZhbHVlKCkpIHsKLSAgICBjYXNlIEluc3BlY3Rvcjo6
UHJvdG9jb2w6Ok5ldHdvcms6OlJlc291cmNlRXJyb3JUeXBlOjpHZW5lcmFsOgotICAgICAgICBl
cnJvciA9IFJlc291cmNlRXJyb3IoZXJyb3JEb21haW5XZWJLaXRJbnRlcm5hbCwgMCwgbG9hZGVy
LnVybCgpLCAiUmVxdWVzdCBpbnRlcmNlcHRlZCJfcywgUmVzb3VyY2VFcnJvcjo6VHlwZTo6R2Vu
ZXJhbCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0
d29yazo6UmVzb3VyY2VFcnJvclR5cGU6OkFjY2Vzc0NvbnRyb2w6Ci0gICAgICAgIGVycm9yID0g
UmVzb3VyY2VFcnJvcihlcnJvckRvbWFpbldlYktpdEludGVybmFsLCAwLCBsb2FkZXIudXJsKCks
ICJBY2Nlc3MgZGVuaWVkIl9zLCBSZXNvdXJjZUVycm9yOjpUeXBlOjpBY2Nlc3NDb250cm9sKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpS
ZXNvdXJjZUVycm9yVHlwZTo6Q2FuY2VsbGF0aW9uOgotICAgICAgICBlcnJvciA9IFJlc291cmNl
RXJyb3IoZXJyb3JEb21haW5XZWJLaXRJbnRlcm5hbCwgMCwgbG9hZGVyLnVybCgpLCAiUmVxdWVz
dCBjYW5jZWxlZCJfcywgUmVzb3VyY2VFcnJvcjo6VHlwZTo6Q2FuY2VsbGF0aW9uKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpSZXNvdXJj
ZUVycm9yVHlwZTo6VGltZW91dDoKLSAgICAgICAgZXJyb3IgPSBSZXNvdXJjZUVycm9yKGVycm9y
RG9tYWluV2ViS2l0SW50ZXJuYWwsIDAsIGxvYWRlci51cmwoKSwgIlJlcXVlc3QgdGltZWQgb3V0
Il9zLCBSZXNvdXJjZUVycm9yOjpUeXBlOjpUaW1lb3V0KTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotICAgIGxvYWRlci5kaWRGYWlsKGVycm9yKTsKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICByZXR1cm4geyB9OwogfQogCiBib29sIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6c2hvdWxk
VHJlYXRBc1RleHQoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKQEAgLTE0MzksOSArMTQxMiw5IEBA
IGJvb2wgSW5zcGVjdG9yTmV0d29ya0FnZW50OjpjYWNoZWRSZXNvdXJjZUNvbnRlbnQoQ2FjaGVk
UmVzb3VyY2UmIHJlc291cmNlLCBTdHJpCiAgICAgfQogfQogCi1zdGF0aWMgUmVmPEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlBhZ2U6OlNlYXJjaFJlc3VsdD4gYnVpbGRPYmplY3RGb3JTZWFyY2hSZXN1
bHQoY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgZnJhbWVJZCwgY29uc3Qg
U3RyaW5nJiB1cmwsIGludCBtYXRjaGVzQ291bnQpCitzdGF0aWMgUmVmPFByb3RvY29sOjpQYWdl
OjpTZWFyY2hSZXN1bHQ+IGJ1aWxkT2JqZWN0Rm9yU2VhcmNoUmVzdWx0KGNvbnN0IFByb3RvY29s
OjpOZXR3b3JrOjpSZXF1ZXN0SWQmIHJlcXVlc3RJZCwgY29uc3QgUHJvdG9jb2w6Ok5ldHdvcms6
OkZyYW1lSWQmIGZyYW1lSWQsIGNvbnN0IFN0cmluZyYgdXJsLCBpbnQgbWF0Y2hlc0NvdW50KQog
ewotICAgIGF1dG8gc2VhcmNoUmVzdWx0ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6U2Vh
cmNoUmVzdWx0OjpjcmVhdGUoKQorICAgIGF1dG8gc2VhcmNoUmVzdWx0ID0gUHJvdG9jb2w6OlBh
Z2U6OlNlYXJjaFJlc3VsdDo6Y3JlYXRlKCkKICAgICAgICAgLnNldFVybCh1cmwpCiAgICAgICAg
IC5zZXRGcmFtZUlkKGZyYW1lSWQpCiAgICAgICAgIC5zZXRNYXRjaGVzQ291bnQobWF0Y2hlc0Nv
dW50KQpAQCAtMTQ2MSw3ICsxNDM0LDcgQEAgc3RhdGljIE9wdGlvbmFsPFN0cmluZz4gdGV4dENv
bnRlbnRGb3JSZXNvdXJjZURhdGEoY29uc3QgTmV0d29ya1Jlc291cmNlc0RhdGE6OlIKICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OwogfQogCi12b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6c2Vh
cmNoT3RoZXJSZXF1ZXN0cyhjb25zdCBKU0M6OllhcnI6OlJlZ3VsYXJFeHByZXNzaW9uJiByZWdl
eCwgUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6U2VhcmNo
UmVzdWx0Pj4mIHJlc3VsdCkKK3ZvaWQgSW5zcGVjdG9yTmV0d29ya0FnZW50OjpzZWFyY2hPdGhl
clJlcXVlc3RzKGNvbnN0IEpTQzo6WWFycjo6UmVndWxhckV4cHJlc3Npb24mIHJlZ2V4LCBSZWY8
SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UGFnZTo6U2VhcmNoUmVzdWx0Pj4mIHJlc3VsdCkKIHsK
ICAgICBWZWN0b3I8TmV0d29ya1Jlc291cmNlc0RhdGE6OlJlc291cmNlRGF0YSo+IHJlc291cmNl
cyA9IG1fcmVzb3VyY2VzRGF0YS0+cmVzb3VyY2VzKCk7CiAgICAgZm9yIChhdXRvKiByZXNvdXJj
ZURhdGEgOiByZXNvdXJjZXMpIHsKQEAgLTE0NzMsNyArMTQ0Niw3IEBAIHZvaWQgSW5zcGVjdG9y
TmV0d29ya0FnZW50OjpzZWFyY2hPdGhlclJlcXVlc3RzKGNvbnN0IEpTQzo6WWFycjo6UmVndWxh
ckV4cHJlc3NpCiAgICAgfQogfQogCi12b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6c2VhcmNo
SW5SZXF1ZXN0KEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiByZXF1ZXN0
SWQsIGNvbnN0IFN0cmluZyYgcXVlcnksIGJvb2wgY2FzZVNlbnNpdGl2ZSwgYm9vbCBpc1JlZ2V4
LCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpHZW5lcmljVHlwZXM6
OlNlYXJjaE1hdGNoPj4mIHJlc3VsdHMpCit2b2lkIEluc3BlY3Rvck5ldHdvcmtBZ2VudDo6c2Vh
cmNoSW5SZXF1ZXN0KFByb3RvY29sOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFBy
b3RvY29sOjpOZXR3b3JrOjpSZXF1ZXN0SWQmIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBxdWVy
eSwgYm9vbCBjYXNlU2Vuc2l0aXZlLCBib29sIGlzUmVnZXgsIFJlZlB0cjxKU09OOjpBcnJheU9m
PFByb3RvY29sOjpHZW5lcmljVHlwZXM6OlNlYXJjaE1hdGNoPj4mIHJlc3VsdHMpCiB7CiAgICAg
TmV0d29ya1Jlc291cmNlc0RhdGE6OlJlc291cmNlRGF0YSBjb25zdCogcmVzb3VyY2VEYXRhID0g
bV9yZXNvdXJjZXNEYXRhLT5kYXRhKHJlcXVlc3RJZCk7CiAgICAgaWYgKCFyZXNvdXJjZURhdGEp
IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9y
TmV0d29ya0FnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3Rv
ck5ldHdvcmtBZ2VudC5oCmluZGV4IDM0NDBlNzFhNWVkNWVmMzg0NjIwYTlmNjI4MDM3NTFlOTgz
ZGI1YjEuLjkzMzYwMTc2MTY2NzQxN2ViZTVkZTMwMTU4Njg2OWNjYzY0ZmMzZGEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yTmV0d29ya0FnZW50
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JOZXR3b3Jr
QWdlbnQuaApAQCAtNjEsOCArNjEsNiBAQCBjbGFzcyBXZWJTb2NrZXQ7CiAKIHN0cnVjdCBXZWJT
b2NrZXRGcmFtZTsKIAotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7Ci0KIGNsYXNzIEluc3Bl
Y3Rvck5ldHdvcmtBZ2VudCA6IHB1YmxpYyBJbnNwZWN0b3JBZ2VudEJhc2UsIHB1YmxpYyBJbnNw
ZWN0b3I6Ok5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewogICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKEluc3BlY3Rvck5ldHdvcmtBZ2VudCk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CkBAIC03OSwyMiArNzcsMjIgQEAgcHVibGljOgogICAgIHZvaWQgd2lsbERlc3Ryb3lG
cm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKSBmaW5hbDsKIAog
ICAgIC8vIE5ldHdvcmtCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIKLSAgICB2b2lkIGVuYWJsZShF
cnJvclN0cmluZyYpIGZpbmFsOwotICAgIHZvaWQgZGlzYWJsZShFcnJvclN0cmluZyYpIGZpbmFs
OwotICAgIHZvaWQgc2V0RXh0cmFIVFRQSGVhZGVycyhFcnJvclN0cmluZyYsIGNvbnN0IEpTT046
Ok9iamVjdCYgaGVhZGVycykgZmluYWw7Ci0gICAgdm9pZCBnZXRSZXNwb25zZUJvZHkoRXJyb3JT
dHJpbmcmLCBjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgU3RyaW5nKiBjb250ZW50LCBib29sKiBi
YXNlNjRFbmNvZGVkKSBmaW5hbDsKLSAgICB2b2lkIHNldFJlc291cmNlQ2FjaGluZ0Rpc2FibGVk
KEVycm9yU3RyaW5nJiwgYm9vbCBkaXNhYmxlZCkgZmluYWw7Ci0gICAgdm9pZCBsb2FkUmVzb3Vy
Y2UoY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBjb25zdCBTdHJpbmcmIHVybCwgUmVmPExvYWRSZXNv
dXJjZUNhbGxiYWNrPiYmKSBmaW5hbDsKLSAgICB2b2lkIGdldFNlcmlhbGl6ZWRDZXJ0aWZpY2F0
ZShFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBTdHJpbmcqIHNlcmlhbGl6
ZWRDZXJ0aWZpY2F0ZSkgZmluYWw7Ci0gICAgdm9pZCByZXNvbHZlV2ViU29ja2V0KEVycm9yU3Ry
aW5nJiwgY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyogb2JqZWN0R3JvdXAs
IFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JikgZmlu
YWw7Ci0gICAgdm9pZCBzZXRJbnRlcmNlcHRpb25FbmFibGVkKEVycm9yU3RyaW5nJiwgYm9vbCBl
bmFibGVkKSBmaW5hbDsKLSAgICB2b2lkIGFkZEludGVyY2VwdGlvbihFcnJvclN0cmluZyYsIGNv
bnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIG5ldHdvcmtTdGFnZVN0cmluZywgY29uc3Qg
Ym9vbCogY2FzZVNlbnNpdGl2ZSwgY29uc3QgYm9vbCogaXNSZWdleCkgZmluYWw7Ci0gICAgdm9p
ZCByZW1vdmVJbnRlcmNlcHRpb24oRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHVybCwgY29u
c3QgU3RyaW5nJiBuZXR3b3JrU3RhZ2VTdHJpbmcsIGNvbnN0IGJvb2wqIGNhc2VTZW5zaXRpdmUs
IGNvbnN0IGJvb2wqIGlzUmVnZXgpIGZpbmFsOwotICAgIHZvaWQgaW50ZXJjZXB0Q29udGludWUo
RXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nJiBuZXR3
b3JrU3RhZ2VTdHJpbmcpIGZpbmFsOwotICAgIHZvaWQgaW50ZXJjZXB0V2l0aFJlcXVlc3QoRXJy
b3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHJlcXVlc3RJZCwgY29uc3QgU3RyaW5nKiB1cmwsIGNv
bnN0IFN0cmluZyogbWV0aG9kLCBjb25zdCBKU09OOjpPYmplY3QqIGhlYWRlcnMsIGNvbnN0IFN0
cmluZyogcG9zdERhdGEpIGZpbmFsOwotICAgIHZvaWQgaW50ZXJjZXB0V2l0aFJlc3BvbnNlKEVy
cm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQsIGNvbnN0IFN0cmluZyYgY29udGVu
dCwgYm9vbCBiYXNlNjRFbmNvZGVkLCBjb25zdCBTdHJpbmcqIG1pbWVUeXBlLCBjb25zdCBpbnQq
IHN0YXR1cywgY29uc3QgU3RyaW5nKiBzdGF0dXNUZXh0LCBjb25zdCBKU09OOjpPYmplY3QqIGhl
YWRlcnMpIGZpbmFsOwotICAgIHZvaWQgaW50ZXJjZXB0UmVxdWVzdFdpdGhSZXNwb25zZShFcnJv
clN0cmluZyYsIGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQs
IGJvb2wgYmFzZTY0RW5jb2RlZCwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgaW50IHN0YXR1cywg
Y29uc3QgU3RyaW5nJiBzdGF0dXNUZXh0LCBjb25zdCBKU09OOjpPYmplY3QmIGhlYWRlcnMpIGZp
bmFsOwotICAgIHZvaWQgaW50ZXJjZXB0UmVxdWVzdFdpdGhFcnJvcihFcnJvclN0cmluZyYsIGNv
bnN0IFN0cmluZyYgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIGVycm9yVHlwZSkgZmluYWw7Cisg
ICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBlbmFibGUoKSBmaW5h
bDsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGRpc2FibGUo
KSBmaW5hbDsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHNl
dEV4dHJhSFRUUEhlYWRlcnMoUmVmPEpTT046Ok9iamVjdD4mJikgZmluYWw7CisgICAgSW5zcGVj
dG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxzdGQ6OnR1cGxlPFN0cmluZywgYm9vbCAvKiBi
YXNlNjRFbmNvZGVkICovPj4gZ2V0UmVzcG9uc2VCb2R5KGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9j
b2w6Ok5ldHdvcms6OlJlcXVlc3RJZCYpIGZpbmFsOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8dm9pZD4gc2V0UmVzb3VyY2VDYWNoaW5nRGlzYWJsZWQoYm9vbCkgZmlu
YWw7CisgICAgdm9pZCBsb2FkUmVzb3VyY2UoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0
d29yazo6RnJhbWVJZCYsIGNvbnN0IFN0cmluZyYgdXJsLCBSZWY8TG9hZFJlc291cmNlQ2FsbGJh
Y2s+JiYpIGZpbmFsOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8U3Ry
aW5nPiBnZXRTZXJpYWxpemVkQ2VydGlmaWNhdGUoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6
TmV0d29yazo6UmVxdWVzdElkJikgZmluYWw7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJy
b3JTdHJpbmdPcjxSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0
Pj4gcmVzb2x2ZVdlYlNvY2tldChjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpS
ZXF1ZXN0SWQmLCBjb25zdCBTdHJpbmcmIG9iamVjdEdyb3VwKSBmaW5hbDsKKyAgICBJbnNwZWN0
b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHNldEludGVyY2VwdGlvbkVuYWJsZWQo
Ym9vbCkgZmluYWw7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lk
PiBhZGRJbnRlcmNlcHRpb24oY29uc3QgU3RyaW5nJiB1cmwsIEluc3BlY3Rvcjo6UHJvdG9jb2w6
Ok5ldHdvcms6Ok5ldHdvcmtTdGFnZSwgT3B0aW9uYWw8Ym9vbD4mJiBjYXNlU2Vuc2l0aXZlLCBP
cHRpb25hbDxib29sPiYmIGlzUmVnZXgpIGZpbmFsOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8dm9pZD4gcmVtb3ZlSW50ZXJjZXB0aW9uKGNvbnN0IFN0cmluZyYgdXJs
LCBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpOZXR3b3JrU3RhZ2UsIE9wdGlvbmFsPGJv
b2w+JiYgY2FzZVNlbnNpdGl2ZSwgT3B0aW9uYWw8Ym9vbD4mJiBpc1JlZ2V4KSBmaW5hbDsKKyAg
ICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGludGVyY2VwdENvbnRp
bnVlKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OlJlcXVlc3RJZCYsIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6Ok5ldHdvcmtTdGFnZSkgZmluYWw7CisgICAgSW5zcGVj
dG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBpbnRlcmNlcHRXaXRoUmVxdWVzdChj
b25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpSZXF1ZXN0SWQmLCBjb25zdCBTdHJp
bmcmIHVybCwgY29uc3QgU3RyaW5nJiBtZXRob2QsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgaGVh
ZGVycywgY29uc3QgU3RyaW5nJiBwb3N0RGF0YSkgZmluYWw7CisgICAgSW5zcGVjdG9yOjpQcm90
b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBpbnRlcmNlcHRXaXRoUmVzcG9uc2UoY29uc3QgSW5z
cGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6UmVxdWVzdElkJiwgY29uc3QgU3RyaW5nJiBjb250
ZW50LCBib29sIGJhc2U2NEVuY29kZWQsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIE9wdGlvbmFs
PGludD4mJiBzdGF0dXMsIGNvbnN0IFN0cmluZyYgc3RhdHVzVGV4dCwgUmVmUHRyPEpTT046Ok9i
amVjdD4mJiBoZWFkZXJzKSBmaW5hbDsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0
cmluZ09yPHZvaWQ+IGludGVyY2VwdFJlcXVlc3RXaXRoUmVzcG9uc2UoY29uc3QgSW5zcGVjdG9y
OjpQcm90b2NvbDo6TmV0d29yazo6UmVxdWVzdElkJiwgY29uc3QgU3RyaW5nJiBjb250ZW50LCBi
b29sIGJhc2U2NEVuY29kZWQsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGludCBzdGF0dXMsIGNv
bnN0IFN0cmluZyYgc3RhdHVzVGV4dCwgUmVmPEpTT046Ok9iamVjdD4mJiBoZWFkZXJzKSBmaW5h
bDsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGludGVyY2Vw
dFJlcXVlc3RXaXRoRXJyb3IoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6UmVx
dWVzdElkJiwgSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6UmVzb3VyY2VFcnJvclR5cGUp
IGZpbmFsOwogCiAgICAgLy8gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uCiAgICAgdm9pZCB3aWxs
UmVjYWxjdWxhdGVTdHlsZSgpOwpAQCAtMTI3LDMyICsxMjUsMjkgQEAgcHVibGljOgogICAgIHZv
aWQgaW50ZXJjZXB0UmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYsIHVuc2lnbmVkIGxv
bmcgaWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBSZXNvdXJjZVJlc3Bv
bnNlJiwgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4pPiYmKTsKICAgICB2b2lkIGludGVyY2VwdFJlcXVl
c3QoUmVzb3VyY2VMb2FkZXImLCBGdW5jdGlvbjx2b2lkKGNvbnN0IFJlc291cmNlUmVxdWVzdCYp
PiYmKTsKIAotICAgIHZvaWQgc2VhcmNoT3RoZXJSZXF1ZXN0cyhjb25zdCBKU0M6OllhcnI6OlJl
Z3VsYXJFeHByZXNzaW9uJiwgUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6UGFnZTo6U2VhcmNoUmVzdWx0Pj4mKTsKLSAgICB2b2lkIHNlYXJjaEluUmVxdWVzdChFcnJv
clN0cmluZyYsIGNvbnN0IFN0cmluZyYgcmVxdWVzdElkLCBjb25zdCBTdHJpbmcmIHF1ZXJ5LCBi
b29sIGNhc2VTZW5zaXRpdmUsIGJvb2wgaXNSZWdleCwgUmVmUHRyPEpTT046OkFycmF5T2Y8SW5z
cGVjdG9yOjpQcm90b2NvbDo6R2VuZXJpY1R5cGVzOjpTZWFyY2hNYXRjaD4+Jik7CisgICAgdm9p
ZCBzZWFyY2hPdGhlclJlcXVlc3RzKGNvbnN0IEpTQzo6WWFycjo6UmVndWxhckV4cHJlc3Npb24m
LCBSZWY8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpTZWFyY2hSZXN1
bHQ+PiYpOworICAgIHZvaWQgc2VhcmNoSW5SZXF1ZXN0KEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVy
cm9yU3RyaW5nJiwgY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6UmVxdWVzdElk
JiwgY29uc3QgU3RyaW5nJiBxdWVyeSwgYm9vbCBjYXNlU2Vuc2l0aXZlLCBib29sIGlzUmVnZXgs
IFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkdlbmVyaWNUeXBlczo6
U2VhcmNoTWF0Y2g+PiYpOwogCiBwcm90ZWN0ZWQ6CiAgICAgSW5zcGVjdG9yTmV0d29ya0FnZW50
KFdlYkFnZW50Q29udGV4dCYpOwogCi0gICAgdmlydHVhbCBTdHJpbmcgbG9hZGVySWRlbnRpZmll
cihEb2N1bWVudExvYWRlciopID0gMDsKLSAgICB2aXJ0dWFsIFN0cmluZyBmcmFtZUlkZW50aWZp
ZXIoRG9jdW1lbnRMb2FkZXIqKSA9IDA7CisgICAgdmlydHVhbCBJbnNwZWN0b3I6OlByb3RvY29s
OjpOZXR3b3JrOjpMb2FkZXJJZCBsb2FkZXJJZGVudGlmaWVyKERvY3VtZW50TG9hZGVyKikgPSAw
OworICAgIHZpcnR1YWwgSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6RnJhbWVJZCBmcmFt
ZUlkZW50aWZpZXIoRG9jdW1lbnRMb2FkZXIqKSA9IDA7CiAgICAgdmlydHVhbCBWZWN0b3I8V2Vi
U29ja2V0Kj4gYWN0aXZlV2ViU29ja2V0cyhjb25zdCBMb2NrSG9sZGVyJikgPSAwOwotICAgIHZp
cnR1YWwgdm9pZCBzZXRSZXNvdXJjZUNhY2hpbmdEaXNhYmxlZChib29sKSA9IDA7Ci0gICAgdmly
dHVhbCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KEVycm9y
U3RyaW5nJiwgY29uc3QgU3RyaW5nJiBmcmFtZUlkKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNl
dFJlc291cmNlQ2FjaGluZ0Rpc2FibGVkSW50ZXJuYWwoYm9vbCkgPSAwOworICAgIHZpcnR1YWwg
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dChJbnNwZWN0b3I6
OlByb3RvY29sOjpFcnJvclN0cmluZyYsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdv
cms6OkZyYW1lSWQmKSA9IDA7CiAgICAgdmlydHVhbCBib29sIHNob3VsZEZvcmNlQnVmZmVyaW5n
TmV0d29ya1Jlc291cmNlRGF0YSgpIGNvbnN0ID0gMDsKIAogcHJpdmF0ZToKLSAgICB2b2lkIGVu
YWJsZSgpOwotCiAgICAgdm9pZCB3aWxsU2VuZFJlcXVlc3QodW5zaWduZWQgbG9uZyBpZGVudGlm
aWVyLCBEb2N1bWVudExvYWRlciosIFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFJlc291cmNlUmVz
cG9uc2UmIHJlZGlyZWN0UmVzcG9uc2UsIEluc3BlY3RvclBhZ2VBZ2VudDo6UmVzb3VyY2VUeXBl
KTsKIAotICAgIHVzaW5nIE5ldHdvcmtTdGFnZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdv
cms6Ok5ldHdvcmtTdGFnZTsKLSAgICBib29sIHNob3VsZEludGVyY2VwdChVUkwsIE5ldHdvcmtT
dGFnZSk7CisgICAgYm9vbCBzaG91bGRJbnRlcmNlcHQoVVJMLCBJbnNwZWN0b3I6OlByb3RvY29s
OjpOZXR3b3JrOjpOZXR3b3JrU3RhZ2UpOwogICAgIHZvaWQgY29udGludWVQZW5kaW5nUmVxdWVz
dHMoKTsKICAgICB2b2lkIGNvbnRpbnVlUGVuZGluZ1Jlc3BvbnNlcygpOwogCi0gICAgV2ViU29j
a2V0KiB3ZWJTb2NrZXRGb3JSZXF1ZXN0SWQoY29uc3QgU3RyaW5nJiByZXF1ZXN0SWQpOworICAg
IFdlYlNvY2tldCogd2ViU29ja2V0Rm9yUmVxdWVzdElkKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9j
b2w6Ok5ldHdvcms6OlJlcXVlc3RJZCYpOwogCi0gICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9j
b2w6Ok5ldHdvcms6OkluaXRpYXRvcj4gYnVpbGRJbml0aWF0b3JPYmplY3QoRG9jdW1lbnQqLCBj
b25zdCBSZXNvdXJjZVJlcXVlc3QqID0gbnVsbHB0cik7CisgICAgUmVmPEluc3BlY3Rvcjo6UHJv
dG9jb2w6Ok5ldHdvcms6OkluaXRpYXRvcj4gYnVpbGRJbml0aWF0b3JPYmplY3QoRG9jdW1lbnQq
LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QqID0gbnVsbHB0cik7CiAgICAgUmVmPEluc3BlY3Rvcjo6
UHJvdG9jb2w6Ok5ldHdvcms6OlJlc291cmNlVGltaW5nPiBidWlsZE9iamVjdEZvclRpbWluZyhj
b25zdCBOZXR3b3JrTG9hZE1ldHJpY3MqLCBSZXNvdXJjZUxvYWRlciYpOwogICAgIFJlZjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpNZXRyaWNzPiBidWlsZE9iamVjdEZvck1ldHJpY3Mo
Y29uc3QgTmV0d29ya0xvYWRNZXRyaWNzJik7CiAgICAgUmVmUHRyPEluc3BlY3Rvcjo6UHJvdG9j
b2w6Ok5ldHdvcms6OlJlc3BvbnNlPiBidWlsZE9iamVjdEZvclJlc291cmNlUmVzcG9uc2UoY29u
c3QgUmVzb3VyY2VSZXNwb25zZSYsIFJlc291cmNlTG9hZGVyKik7CkBAIC0yMzYsNyArMjMxLDcg
QEAgcHJpdmF0ZToKICAgICAgICAgU3RyaW5nIHVybDsKICAgICAgICAgYm9vbCBjYXNlU2Vuc2l0
aXZlIHsgdHJ1ZSB9OwogICAgICAgICBib29sIGlzUmVnZXggeyBmYWxzZSB9OwotICAgICAgICBO
ZXR3b3JrU3RhZ2UgbmV0d29ya1N0YWdlIHsgTmV0d29ya1N0YWdlOjpSZXNwb25zZSB9OworICAg
ICAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpOZXR3b3JrU3RhZ2UgbmV0d29ya1N0
YWdlIHsgSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6TmV0d29ya1N0YWdlOjpSZXNwb25z
ZSB9OwogCiAgICAgICAgIGlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgSW50ZXJjZXB0JiBv
dGhlcikgY29uc3QKICAgICAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2FnZW50cy9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2FnZW50cy9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCmluZGV4IDUzOWU4MTA1YjY2ZTdiMmE2
YTA1NTcxYTFlMWM4Y2Q2YmRmMjdjOTAuLmFlMjVmY2ViYzkzZDUwNGJiMGFiZjE3YjYxYmJlMWQ3
M2VmY2MxZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5z
cGVjdG9yUGFnZUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRz
L0luc3BlY3RvclBhZ2VBZ2VudC5jcHAKQEAgLTE1MSw3ICsxNTEsNyBAQCBWZWN0b3I8Q2FjaGVk
UmVzb3VyY2UqPiBJbnNwZWN0b3JQYWdlQWdlbnQ6OmNhY2hlZFJlc291cmNlc0ZvckZyYW1lKEZy
YW1lKiBmcmFtZQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgSW5zcGVjdG9yUGFnZUFn
ZW50OjpyZXNvdXJjZUNvbnRlbnQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBGcmFtZSogZnJh
bWUsIGNvbnN0IFVSTCYgdXJsLCBTdHJpbmcqIHJlc3VsdCwgYm9vbCogYmFzZTY0RW5jb2RlZCkK
K3ZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpyZXNvdXJjZUNvbnRlbnQoUHJvdG9jb2w6OkVycm9y
U3RyaW5nJiBlcnJvclN0cmluZywgRnJhbWUqIGZyYW1lLCBjb25zdCBVUkwmIHVybCwgU3RyaW5n
KiByZXN1bHQsIGJvb2wqIGJhc2U2NEVuY29kZWQpCiB7CiAgICAgRG9jdW1lbnRMb2FkZXIqIGxv
YWRlciA9IGFzc2VydERvY3VtZW50TG9hZGVyKGVycm9yU3RyaW5nLCBmcmFtZSk7CiAgICAgaWYg
KCFsb2FkZXIpCkBAIC0yMTMsMzcgKzIxMywzNyBAQCBDYWNoZWRSZXNvdXJjZSogSW5zcGVjdG9y
UGFnZUFnZW50OjpjYWNoZWRSZXNvdXJjZShGcmFtZSogZnJhbWUsIGNvbnN0IFVSTCYgdXJsKQog
ICAgIHJldHVybiBjYWNoZWRSZXNvdXJjZTsKIH0KIAotSW5zcGVjdG9yOjpQcm90b2NvbDo6UGFn
ZTo6UmVzb3VyY2VUeXBlIEluc3BlY3RvclBhZ2VBZ2VudDo6cmVzb3VyY2VUeXBlSlNPTihJbnNw
ZWN0b3JQYWdlQWdlbnQ6OlJlc291cmNlVHlwZSByZXNvdXJjZVR5cGUpCitQcm90b2NvbDo6UGFn
ZTo6UmVzb3VyY2VUeXBlIEluc3BlY3RvclBhZ2VBZ2VudDo6cmVzb3VyY2VUeXBlSlNPTihJbnNw
ZWN0b3JQYWdlQWdlbnQ6OlJlc291cmNlVHlwZSByZXNvdXJjZVR5cGUpCiB7CiAgICAgc3dpdGNo
IChyZXNvdXJjZVR5cGUpIHsKICAgICBjYXNlIERvY3VtZW50UmVzb3VyY2U6Ci0gICAgICAgIHJl
dHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpSZXNvdXJjZVR5cGU6OkRvY3VtZW50Owor
ICAgICAgICByZXR1cm4gUHJvdG9jb2w6OlBhZ2U6OlJlc291cmNlVHlwZTo6RG9jdW1lbnQ7CiAg
ICAgY2FzZSBJbWFnZVJlc291cmNlOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2Nv
bDo6UGFnZTo6UmVzb3VyY2VUeXBlOjpJbWFnZTsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpQ
YWdlOjpSZXNvdXJjZVR5cGU6OkltYWdlOwogICAgIGNhc2UgRm9udFJlc291cmNlOgotICAgICAg
ICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6UmVzb3VyY2VUeXBlOjpGb250Owor
ICAgICAgICByZXR1cm4gUHJvdG9jb2w6OlBhZ2U6OlJlc291cmNlVHlwZTo6Rm9udDsKICAgICBj
YXNlIFN0eWxlU2hlZXRSZXNvdXJjZToKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlBhZ2U6OlJlc291cmNlVHlwZTo6U3R5bGVTaGVldDsKKyAgICAgICAgcmV0dXJuIFByb3Rv
Y29sOjpQYWdlOjpSZXNvdXJjZVR5cGU6OlN0eWxlU2hlZXQ7CiAgICAgY2FzZSBTY3JpcHRSZXNv
dXJjZToKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OlJlc291cmNl
VHlwZTo6U2NyaXB0OworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OlBhZ2U6OlJlc291cmNlVHlw
ZTo6U2NyaXB0OwogICAgIGNhc2UgWEhSUmVzb3VyY2U6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0
b3I6OlByb3RvY29sOjpQYWdlOjpSZXNvdXJjZVR5cGU6OlhIUjsKKyAgICAgICAgcmV0dXJuIFBy
b3RvY29sOjpQYWdlOjpSZXNvdXJjZVR5cGU6OlhIUjsKICAgICBjYXNlIEZldGNoUmVzb3VyY2U6
Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpSZXNvdXJjZVR5cGU6
OkZldGNoOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OlBhZ2U6OlJlc291cmNlVHlwZTo6RmV0
Y2g7CiAgICAgY2FzZSBQaW5nUmVzb3VyY2U6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlBy
b3RvY29sOjpQYWdlOjpSZXNvdXJjZVR5cGU6OlBpbmc7CisgICAgICAgIHJldHVybiBQcm90b2Nv
bDo6UGFnZTo6UmVzb3VyY2VUeXBlOjpQaW5nOwogICAgIGNhc2UgQmVhY29uUmVzb3VyY2U6Ci0g
ICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpSZXNvdXJjZVR5cGU6OkJl
YWNvbjsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpQYWdlOjpSZXNvdXJjZVR5cGU6OkJlYWNv
bjsKICAgICBjYXNlIFdlYlNvY2tldFJlc291cmNlOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9y
OjpQcm90b2NvbDo6UGFnZTo6UmVzb3VyY2VUeXBlOjpXZWJTb2NrZXQ7CisgICAgICAgIHJldHVy
biBQcm90b2NvbDo6UGFnZTo6UmVzb3VyY2VUeXBlOjpXZWJTb2NrZXQ7CiAgICAgY2FzZSBPdGhl
clJlc291cmNlOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6UmVz
b3VyY2VUeXBlOjpPdGhlcjsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpQYWdlOjpSZXNvdXJj
ZVR5cGU6Ok90aGVyOwogI2lmIEVOQUJMRShBUFBMSUNBVElPTl9NQU5JRkVTVCkKICAgICBjYXNl
IEFwcGxpY2F0aW9uTWFuaWZlc3RSZXNvdXJjZToKICAgICAgICAgYnJlYWs7CiAjZW5kaWYKICAg
ICB9Ci0gICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OlJlc291cmNlVHlwZTo6
T3RoZXI7CisgICAgcmV0dXJuIFByb3RvY29sOjpQYWdlOjpSZXNvdXJjZVR5cGU6Ok90aGVyOwog
fQogCiBJbnNwZWN0b3JQYWdlQWdlbnQ6OlJlc291cmNlVHlwZSBJbnNwZWN0b3JQYWdlQWdlbnQ6
Omluc3BlY3RvclJlc291cmNlVHlwZShDYWNoZWRSZXNvdXJjZTo6VHlwZSB0eXBlKQpAQCAtMjk3
LDcgKzI5Nyw3IEBAIEluc3BlY3RvclBhZ2VBZ2VudDo6UmVzb3VyY2VUeXBlIEluc3BlY3RvclBh
Z2VBZ2VudDo6aW5zcGVjdG9yUmVzb3VyY2VUeXBlKGNvbnN0CiAgICAgcmV0dXJuIGluc3BlY3Rv
clJlc291cmNlVHlwZShjYWNoZWRSZXNvdXJjZS50eXBlKCkpOwogfQogCi1JbnNwZWN0b3I6OlBy
b3RvY29sOjpQYWdlOjpSZXNvdXJjZVR5cGUgSW5zcGVjdG9yUGFnZUFnZW50OjpjYWNoZWRSZXNv
dXJjZVR5cGVKU09OKGNvbnN0IENhY2hlZFJlc291cmNlJiBjYWNoZWRSZXNvdXJjZSkKK1Byb3Rv
Y29sOjpQYWdlOjpSZXNvdXJjZVR5cGUgSW5zcGVjdG9yUGFnZUFnZW50OjpjYWNoZWRSZXNvdXJj
ZVR5cGVKU09OKGNvbnN0IENhY2hlZFJlc291cmNlJiBjYWNoZWRSZXNvdXJjZSkKIHsKICAgICBy
ZXR1cm4gcmVzb3VyY2VUeXBlSlNPTihpbnNwZWN0b3JSZXNvdXJjZVR5cGUoY2FjaGVkUmVzb3Vy
Y2UpKTsKIH0KQEAgLTMxMSw3ICszMTEsNyBAQCBGcmFtZSogSW5zcGVjdG9yUGFnZUFnZW50Ojpm
aW5kRnJhbWVXaXRoU2VjdXJpdHlPcmlnaW4oUGFnZSYgcGFnZSwgY29uc3QgU3RyaW5nJgogICAg
IHJldHVybiBudWxscHRyOwogfQogCi1Eb2N1bWVudExvYWRlciogSW5zcGVjdG9yUGFnZUFnZW50
Ojphc3NlcnREb2N1bWVudExvYWRlcihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIEZyYW1lKiBm
cmFtZSkKK0RvY3VtZW50TG9hZGVyKiBJbnNwZWN0b3JQYWdlQWdlbnQ6OmFzc2VydERvY3VtZW50
TG9hZGVyKFByb3RvY29sOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIEZyYW1lKiBmcmFtZSkK
IHsKICAgICBGcmFtZUxvYWRlciYgZnJhbWVMb2FkZXIgPSBmcmFtZS0+bG9hZGVyKCk7CiAgICAg
RG9jdW1lbnRMb2FkZXIqIGRvY3VtZW50TG9hZGVyID0gZnJhbWVMb2FkZXIuZG9jdW1lbnRMb2Fk
ZXIoKTsKQEAgLTMzOCwxNiArMzM4LDEzIEBAIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpkaWRD
cmVhdGVGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpGcm9udGVuZFJvdXRlciosCiAKIHZv
aWQgSW5zcGVjdG9yUGFnZUFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJbnNw
ZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24pCiB7Ci0gICAgRXJyb3JTdHJpbmcgdW51c2VkOwotICAg
IGRpc2FibGUodW51c2VkKTsKKyAgICBkaXNhYmxlKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yUGFn
ZUFnZW50OjplbmFibGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nKQorUHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yUGFnZUFnZW50OjplbmFibGUoKQogewotICAgIGlmICht
X2luc3RydW1lbnRpbmdBZ2VudHMuZW5hYmxlZFBhZ2VBZ2VudCgpID09IHRoaXMpIHsKLSAgICAg
ICAgZXJyb3JTdHJpbmcgPSAiUGFnZSBkb21haW4gYWxyZWFkeSBlbmFibGVkIl9zOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQorICAgIGlmIChtX2luc3RydW1lbnRpbmdBZ2VudHMuZW5hYmxlZFBh
Z2VBZ2VudCgpID09IHRoaXMpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiUGFnZSBk
b21haW4gYWxyZWFkeSBlbmFibGVkIl9zKTsKIAogICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy5z
ZXRFbmFibGVkUGFnZUFnZW50KHRoaXMpOwogCkBAIC0zNTgsMjEgKzM1NSwyMiBAQCB2b2lkIElu
c3BlY3RvclBhZ2VBZ2VudDo6ZW5hYmxlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZykKICNpZiBF
TkFCTEUoREFSS19NT0RFX0NTUykgfHwgSEFWRShPU19EQVJLX01PREVfU1VQUE9SVCkKICAgICBk
ZWZhdWx0QXBwZWFyYW5jZURpZENoYW5nZShtX2luc3BlY3RlZFBhZ2UuZGVmYXVsdFVzZURhcmtB
cHBlYXJhbmNlKCkpOwogI2VuZGlmCisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3Bl
Y3RvclBhZ2VBZ2VudDo6ZGlzYWJsZShFcnJvclN0cmluZyYpCitQcm90b2NvbDo6RXJyb3JTdHJp
bmdPcjx2b2lkPiBJbnNwZWN0b3JQYWdlQWdlbnQ6OmRpc2FibGUoKQogewogICAgIG1faW5zdHJ1
bWVudGluZ0FnZW50cy5zZXRFbmFibGVkUGFnZUFnZW50KG51bGxwdHIpOwogCi0gICAgRXJyb3JT
dHJpbmcgdW51c2VkOwotICAgIHNldFNob3dQYWludFJlY3RzKHVudXNlZCwgZmFsc2UpOworICAg
IHNldFNob3dQYWludFJlY3RzKGZhbHNlKTsKICNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAg
ICBzZXRTaG93UnVsZXJzKHVudXNlZCwgZmFsc2UpOworICAgIHNldFNob3dSdWxlcnMoZmFsc2Up
OwogI2VuZGlmCi0gICAgb3ZlcnJpZGVVc2VyQWdlbnQodW51c2VkLCBudWxscHRyKTsKLSAgICBz
ZXRFbXVsYXRlZE1lZGlhKHVudXNlZCwgZW1wdHlTdHJpbmcoKSk7CisgICAgb3ZlcnJpZGVVc2Vy
QWdlbnQobnVsbFN0cmluZygpKTsKKyAgICBzZXRFbXVsYXRlZE1lZGlhKGVtcHR5U3RyaW5nKCkp
OwogI2lmIEVOQUJMRShEQVJLX01PREVfQ1NTKSB8fCBIQVZFKE9TX0RBUktfTU9ERV9TVVBQT1JU
KQotICAgIHNldEZvcmNlZEFwcGVhcmFuY2UodW51c2VkLCBlbXB0eVN0cmluZygpKTsKKyAgICBz
ZXRGb3JjZWRBcHBlYXJhbmNlKFdURjo6bnVsbG9wdCk7CiAjZW5kaWYKIAogICAgIGF1dG8mIGlu
c3BlY3RlZFBhZ2VTZXR0aW5ncyA9IG1faW5zcGVjdGVkUGFnZS5zZXR0aW5ncygpOwpAQCAtMzkx
LDYgKzM4OSw4IEBAIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpkaXNhYmxlKEVycm9yU3RyaW5n
JikKICAgICBtX2NsaWVudC0+c2V0RGV2ZWxvcGVyUHJlZmVyZW5jZU92ZXJyaWRlKEluc3BlY3Rv
ckNsaWVudDo6RGV2ZWxvcGVyUHJlZmVyZW5jZTo6QWRDbGlja0F0dHJpYnV0aW9uRGVidWdNb2Rl
RW5hYmxlZCwgV1RGOjpudWxsb3B0KTsKICAgICBtX2NsaWVudC0+c2V0RGV2ZWxvcGVyUHJlZmVy
ZW5jZU92ZXJyaWRlKEluc3BlY3RvckNsaWVudDo6RGV2ZWxvcGVyUHJlZmVyZW5jZTo6SVRQRGVi
dWdNb2RlRW5hYmxlZCwgV1RGOjpudWxsb3B0KTsKICAgICBtX2NsaWVudC0+c2V0RGV2ZWxvcGVy
UHJlZmVyZW5jZU92ZXJyaWRlKEluc3BlY3RvckNsaWVudDo6RGV2ZWxvcGVyUHJlZmVyZW5jZTo6
TW9ja0NhcHR1cmVEZXZpY2VzRW5hYmxlZCwgV1RGOjpudWxsb3B0KTsKKworICAgIHJldHVybiB7
IH07CiB9CiAKIGRvdWJsZSBJbnNwZWN0b3JQYWdlQWdlbnQ6OnRpbWVzdGFtcCgpCkBAIC0zOTgs
MjEgKzM5OCwxOSBAQCBkb3VibGUgSW5zcGVjdG9yUGFnZUFnZW50Ojp0aW1lc3RhbXAoKQogICAg
IHJldHVybiBtX2Vudmlyb25tZW50LmV4ZWN1dGlvblN0b3B3YXRjaCgpLmVsYXBzZWRUaW1lKCku
c2Vjb25kcygpOwogfQogCi12b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6cmVsb2FkKEVycm9yU3Ry
aW5nJiwgY29uc3QgYm9vbCogb3B0aW9uYWxSZWxvYWRGcm9tT3JpZ2luLCBjb25zdCBib29sKiBv
cHRpb25hbFJldmFsaWRhdGVBbGxSZXNvdXJjZXMpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2
b2lkPiBJbnNwZWN0b3JQYWdlQWdlbnQ6OnJlbG9hZChPcHRpb25hbDxib29sPiYmIGlnbm9yZUNh
Y2hlLCBPcHRpb25hbDxib29sPiYmIHJldmFsaWRhdGVBbGxSZXNvdXJjZXMpCiB7Ci0gICAgYm9v
bCByZWxvYWRGcm9tT3JpZ2luID0gb3B0aW9uYWxSZWxvYWRGcm9tT3JpZ2luICYmICpvcHRpb25h
bFJlbG9hZEZyb21PcmlnaW47Ci0gICAgYm9vbCByZXZhbGlkYXRlQWxsUmVzb3VyY2VzID0gb3B0
aW9uYWxSZXZhbGlkYXRlQWxsUmVzb3VyY2VzICYmICpvcHRpb25hbFJldmFsaWRhdGVBbGxSZXNv
dXJjZXM7Ci0KICAgICBPcHRpb25TZXQ8UmVsb2FkT3B0aW9uPiByZWxvYWRPcHRpb25zOwotICAg
IGlmIChyZWxvYWRGcm9tT3JpZ2luKQorICAgIGlmIChpZ25vcmVDYWNoZSAmJiAqaWdub3JlQ2Fj
aGUpCiAgICAgICAgIHJlbG9hZE9wdGlvbnMuYWRkKFJlbG9hZE9wdGlvbjo6RnJvbU9yaWdpbik7
Ci0gICAgaWYgKCFyZXZhbGlkYXRlQWxsUmVzb3VyY2VzKQorICAgIGlmICghcmV2YWxpZGF0ZUFs
bFJlc291cmNlcyB8fCAhKnJldmFsaWRhdGVBbGxSZXNvdXJjZXMpCiAgICAgICAgIHJlbG9hZE9w
dGlvbnMuYWRkKFJlbG9hZE9wdGlvbjo6RXhwaXJlZE9ubHkpOwotCiAgICAgbV9pbnNwZWN0ZWRQ
YWdlLm1haW5GcmFtZSgpLmxvYWRlcigpLnJlbG9hZChyZWxvYWRPcHRpb25zKTsKKworICAgIHJl
dHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpuYXZpZ2F0ZShFcnJvclN0
cmluZyYsIGNvbnN0IFN0cmluZyYgdXJsKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4g
SW5zcGVjdG9yUGFnZUFnZW50OjpuYXZpZ2F0ZShjb25zdCBTdHJpbmcmIHVybCkKIHsKICAgICBV
c2VyR2VzdHVyZUluZGljYXRvciBpbmRpY2F0b3IgeyBQcm9jZXNzaW5nVXNlckdlc3R1cmUgfTsK
ICAgICBGcmFtZSYgZnJhbWUgPSBtX2luc3BlY3RlZFBhZ2UubWFpbkZyYW1lKCk7CkBAIC00MjEs
MTExICs0MTksOTcgQEAgdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6Om5hdmlnYXRlKEVycm9yU3Ry
aW5nJiwgY29uc3QgU3RyaW5nJiB1cmwpCiAgICAgRnJhbWVMb2FkUmVxdWVzdCBmcmFtZUxvYWRS
ZXF1ZXN0IHsgKmZyYW1lLmRvY3VtZW50KCksIGZyYW1lLmRvY3VtZW50KCktPnNlY3VyaXR5T3Jp
Z2luKCksIFdURk1vdmUocmVzb3VyY2VSZXF1ZXN0KSwgIl9zZWxmIl9zLCBJbml0aWF0ZWRCeU1h
aW5GcmFtZTo6VW5rbm93biB9OwogICAgIGZyYW1lTG9hZFJlcXVlc3QuZGlzYWJsZU5hdmlnYXRp
b25Ub0ludmFsaWRVUkwoKTsKICAgICBmcmFtZS5sb2FkZXIoKS5jaGFuZ2VMb2NhdGlvbihXVEZN
b3ZlKGZyYW1lTG9hZFJlcXVlc3QpKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5z
cGVjdG9yUGFnZUFnZW50OjpvdmVycmlkZVVzZXJBZ2VudChFcnJvclN0cmluZyYsIGNvbnN0IFN0
cmluZyogdmFsdWUpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JQYWdl
QWdlbnQ6Om92ZXJyaWRlVXNlckFnZW50KGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7Ci0gICAgbV91
c2VyQWdlbnRPdmVycmlkZSA9IHZhbHVlID8gKnZhbHVlIDogU3RyaW5nKCk7CisgICAgbV91c2Vy
QWdlbnRPdmVycmlkZSA9IHZhbHVlOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotc3RhdGljIGlu
bGluZSBPcHRpb25hbDxib29sPiBhc09wdGlvbmFsQm9vbChjb25zdCBib29sKiB2YWx1ZSkKK1By
b3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvclBhZ2VBZ2VudDo6b3ZlcnJpZGVT
ZXR0aW5nKFByb3RvY29sOjpQYWdlOjpTZXR0aW5nIHNldHRpbmcsIE9wdGlvbmFsPGJvb2w+JiYg
dmFsdWUpCiB7Ci0gICAgaWYgKCF2YWx1ZSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
LSAgICByZXR1cm4gKnZhbHVlOwotfQotCi12b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6b3ZlcnJp
ZGVTZXR0aW5nKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBzZXR0aW5n
U3RyaW5nLCBjb25zdCBib29sKiB2YWx1ZSkKLXsKLSAgICBpZiAoc2V0dGluZ1N0cmluZy5pc0Vt
cHR5KCkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAic2V0dGluZ1N0cmluZyBpcyBlbXB0eSJf
czsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8gc2V0dGluZyA9IEluc3BlY3Rv
cjo6UHJvdG9jb2w6Okluc3BlY3RvckhlbHBlcnM6OnBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJ
bnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpTZXR0aW5nPihzZXR0aW5nU3RyaW5nKTsKLSAgICBp
ZiAoIXNldHRpbmcpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSBtYWtlU3RyaW5nKCJVbmtub3du
IHNldHRpbmdTdHJpbmc6ICJfcywgc2V0dGluZ1N0cmluZyk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KICAgICBhdXRvJiBpbnNwZWN0ZWRQYWdlU2V0dGluZ3MgPSBtX2luc3BlY3RlZFBhZ2Uu
c2V0dGluZ3MoKTsKIAotICAgIGF1dG8gb3ZlcnJpZGVWYWx1ZSA9IGFzT3B0aW9uYWxCb29sKHZh
bHVlKTsKLSAgICBzd2l0Y2ggKHNldHRpbmcudmFsdWUoKSkgewotICAgIGNhc2UgSW5zcGVjdG9y
OjpQcm90b2NvbDo6UGFnZTo6U2V0dGluZzo6QWRDbGlja0F0dHJpYnV0aW9uRGVidWdNb2RlRW5h
YmxlZDoKLSAgICAgICAgbV9jbGllbnQtPnNldERldmVsb3BlclByZWZlcmVuY2VPdmVycmlkZShJ
bnNwZWN0b3JDbGllbnQ6OkRldmVsb3BlclByZWZlcmVuY2U6OkFkQ2xpY2tBdHRyaWJ1dGlvbkRl
YnVnTW9kZUVuYWJsZWQsIG92ZXJyaWRlVmFsdWUpOwotICAgICAgICByZXR1cm47CisgICAgc3dp
dGNoIChzZXR0aW5nKSB7CisgICAgY2FzZSBQcm90b2NvbDo6UGFnZTo6U2V0dGluZzo6QWRDbGlj
a0F0dHJpYnV0aW9uRGVidWdNb2RlRW5hYmxlZDoKKyAgICAgICAgbV9jbGllbnQtPnNldERldmVs
b3BlclByZWZlcmVuY2VPdmVycmlkZShJbnNwZWN0b3JDbGllbnQ6OkRldmVsb3BlclByZWZlcmVu
Y2U6OkFkQ2xpY2tBdHRyaWJ1dGlvbkRlYnVnTW9kZUVuYWJsZWQsIHZhbHVlKTsKKyAgICAgICAg
cmV0dXJuIHsgfTsKIAotICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6U2V0dGlu
Zzo6QXV0aG9yQW5kVXNlclN0eWxlc0VuYWJsZWQ6Ci0gICAgICAgIGluc3BlY3RlZFBhZ2VTZXR0
aW5ncy5zZXRBdXRob3JBbmRVc2VyU3R5bGVzRW5hYmxlZEluc3BlY3Rvck92ZXJyaWRlKG92ZXJy
aWRlVmFsdWUpOwotICAgICAgICByZXR1cm47CisgICAgY2FzZSBQcm90b2NvbDo6UGFnZTo6U2V0
dGluZzo6QXV0aG9yQW5kVXNlclN0eWxlc0VuYWJsZWQ6CisgICAgICAgIGluc3BlY3RlZFBhZ2VT
ZXR0aW5ncy5zZXRBdXRob3JBbmRVc2VyU3R5bGVzRW5hYmxlZEluc3BlY3Rvck92ZXJyaWRlKHZh
bHVlKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6UGFnZTo6U2V0dGluZzo6SUNFQ2FuZGlkYXRlRmlsdGVyaW5nRW5hYmxlZDoKLSAgICAgICAg
aW5zcGVjdGVkUGFnZVNldHRpbmdzLnNldElDRUNhbmRpZGF0ZUZpbHRlcmluZ0VuYWJsZWRJbnNw
ZWN0b3JPdmVycmlkZShvdmVycmlkZVZhbHVlKTsKLSAgICAgICAgcmV0dXJuOworICAgIGNhc2Ug
UHJvdG9jb2w6OlBhZ2U6OlNldHRpbmc6OklDRUNhbmRpZGF0ZUZpbHRlcmluZ0VuYWJsZWQ6Cisg
ICAgICAgIGluc3BlY3RlZFBhZ2VTZXR0aW5ncy5zZXRJQ0VDYW5kaWRhdGVGaWx0ZXJpbmdFbmFi
bGVkSW5zcGVjdG9yT3ZlcnJpZGUodmFsdWUpOworICAgICAgICByZXR1cm4geyB9OwogCi0gICAg
Y2FzZSBJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpTZXR0aW5nOjpJVFBEZWJ1Z01vZGVFbmFi
bGVkOgotICAgICAgICBtX2NsaWVudC0+c2V0RGV2ZWxvcGVyUHJlZmVyZW5jZU92ZXJyaWRlKElu
c3BlY3RvckNsaWVudDo6RGV2ZWxvcGVyUHJlZmVyZW5jZTo6SVRQRGVidWdNb2RlRW5hYmxlZCwg
b3ZlcnJpZGVWYWx1ZSk7Ci0gICAgICAgIHJldHVybjsKKyAgICBjYXNlIFByb3RvY29sOjpQYWdl
OjpTZXR0aW5nOjpJVFBEZWJ1Z01vZGVFbmFibGVkOgorICAgICAgICBtX2NsaWVudC0+c2V0RGV2
ZWxvcGVyUHJlZmVyZW5jZU92ZXJyaWRlKEluc3BlY3RvckNsaWVudDo6RGV2ZWxvcGVyUHJlZmVy
ZW5jZTo6SVRQRGVidWdNb2RlRW5hYmxlZCwgdmFsdWUpOworICAgICAgICByZXR1cm4geyB9Owog
Ci0gICAgY2FzZSBJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpTZXR0aW5nOjpJbWFnZXNFbmFi
bGVkOgotICAgICAgICBpbnNwZWN0ZWRQYWdlU2V0dGluZ3Muc2V0SW1hZ2VzRW5hYmxlZEluc3Bl
Y3Rvck92ZXJyaWRlKG92ZXJyaWRlVmFsdWUpOwotICAgICAgICByZXR1cm47CisgICAgY2FzZSBQ
cm90b2NvbDo6UGFnZTo6U2V0dGluZzo6SW1hZ2VzRW5hYmxlZDoKKyAgICAgICAgaW5zcGVjdGVk
UGFnZVNldHRpbmdzLnNldEltYWdlc0VuYWJsZWRJbnNwZWN0b3JPdmVycmlkZSh2YWx1ZSk7Cisg
ICAgICAgIHJldHVybiB7IH07CiAKLSAgICBjYXNlIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6
OlNldHRpbmc6Ok1lZGlhQ2FwdHVyZVJlcXVpcmVzU2VjdXJlQ29ubmVjdGlvbjoKLSAgICAgICAg
aW5zcGVjdGVkUGFnZVNldHRpbmdzLnNldE1lZGlhQ2FwdHVyZVJlcXVpcmVzU2VjdXJlQ29ubmVj
dGlvbkluc3BlY3Rvck92ZXJyaWRlKG92ZXJyaWRlVmFsdWUpOwotICAgICAgICByZXR1cm47Cisg
ICAgY2FzZSBQcm90b2NvbDo6UGFnZTo6U2V0dGluZzo6TWVkaWFDYXB0dXJlUmVxdWlyZXNTZWN1
cmVDb25uZWN0aW9uOgorICAgICAgICBpbnNwZWN0ZWRQYWdlU2V0dGluZ3Muc2V0TWVkaWFDYXB0
dXJlUmVxdWlyZXNTZWN1cmVDb25uZWN0aW9uSW5zcGVjdG9yT3ZlcnJpZGUodmFsdWUpOworICAg
ICAgICByZXR1cm4geyB9OwogCi0gICAgY2FzZSBJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpT
ZXR0aW5nOjpNb2NrQ2FwdHVyZURldmljZXNFbmFibGVkOgotICAgICAgICBpbnNwZWN0ZWRQYWdl
U2V0dGluZ3Muc2V0TW9ja0NhcHR1cmVEZXZpY2VzRW5hYmxlZEluc3BlY3Rvck92ZXJyaWRlKG92
ZXJyaWRlVmFsdWUpOwotICAgICAgICBtX2NsaWVudC0+c2V0RGV2ZWxvcGVyUHJlZmVyZW5jZU92
ZXJyaWRlKEluc3BlY3RvckNsaWVudDo6RGV2ZWxvcGVyUHJlZmVyZW5jZTo6TW9ja0NhcHR1cmVE
ZXZpY2VzRW5hYmxlZCwgb3ZlcnJpZGVWYWx1ZSk7Ci0gICAgICAgIHJldHVybjsKKyAgICBjYXNl
IFByb3RvY29sOjpQYWdlOjpTZXR0aW5nOjpNb2NrQ2FwdHVyZURldmljZXNFbmFibGVkOgorICAg
ICAgICBpbnNwZWN0ZWRQYWdlU2V0dGluZ3Muc2V0TW9ja0NhcHR1cmVEZXZpY2VzRW5hYmxlZElu
c3BlY3Rvck92ZXJyaWRlKHZhbHVlKTsKKyAgICAgICAgbV9jbGllbnQtPnNldERldmVsb3BlclBy
ZWZlcmVuY2VPdmVycmlkZShJbnNwZWN0b3JDbGllbnQ6OkRldmVsb3BlclByZWZlcmVuY2U6Ok1v
Y2tDYXB0dXJlRGV2aWNlc0VuYWJsZWQsIHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAot
ICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6U2V0dGluZzo6TmVlZHNTaXRlU3Bl
Y2lmaWNRdWlya3M6Ci0gICAgICAgIGluc3BlY3RlZFBhZ2VTZXR0aW5ncy5zZXROZWVkc1NpdGVT
cGVjaWZpY1F1aXJrc0luc3BlY3Rvck92ZXJyaWRlKG92ZXJyaWRlVmFsdWUpOwotICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBQcm90b2NvbDo6UGFnZTo6U2V0dGluZzo6TmVlZHNTaXRlU3BlY2lm
aWNRdWlya3M6CisgICAgICAgIGluc3BlY3RlZFBhZ2VTZXR0aW5ncy5zZXROZWVkc1NpdGVTcGVj
aWZpY1F1aXJrc0luc3BlY3Rvck92ZXJyaWRlKHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHsgfTsK
IAotICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6U2V0dGluZzo6U2NyaXB0RW5h
YmxlZDoKLSAgICAgICAgaW5zcGVjdGVkUGFnZVNldHRpbmdzLnNldFNjcmlwdEVuYWJsZWRJbnNw
ZWN0b3JPdmVycmlkZShvdmVycmlkZVZhbHVlKTsKLSAgICAgICAgcmV0dXJuOworICAgIGNhc2Ug
UHJvdG9jb2w6OlBhZ2U6OlNldHRpbmc6OlNjcmlwdEVuYWJsZWQ6CisgICAgICAgIGluc3BlY3Rl
ZFBhZ2VTZXR0aW5ncy5zZXRTY3JpcHRFbmFibGVkSW5zcGVjdG9yT3ZlcnJpZGUodmFsdWUpOwor
ICAgICAgICByZXR1cm4geyB9OwogCi0gICAgY2FzZSBJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdl
OjpTZXR0aW5nOjpTaG93RGVidWdCb3JkZXJzOgotICAgICAgICBpbnNwZWN0ZWRQYWdlU2V0dGlu
Z3Muc2V0U2hvd0RlYnVnQm9yZGVyc0luc3BlY3Rvck92ZXJyaWRlKG92ZXJyaWRlVmFsdWUpOwot
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBQcm90b2NvbDo6UGFnZTo6U2V0dGluZzo6U2hvd0Rl
YnVnQm9yZGVyczoKKyAgICAgICAgaW5zcGVjdGVkUGFnZVNldHRpbmdzLnNldFNob3dEZWJ1Z0Jv
cmRlcnNJbnNwZWN0b3JPdmVycmlkZSh2YWx1ZSk7CisgICAgICAgIHJldHVybiB7IH07CiAKLSAg
ICBjYXNlIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OlNldHRpbmc6OlNob3dSZXBhaW50Q291
bnRlcjoKLSAgICAgICAgaW5zcGVjdGVkUGFnZVNldHRpbmdzLnNldFNob3dSZXBhaW50Q291bnRl
ckluc3BlY3Rvck92ZXJyaWRlKG92ZXJyaWRlVmFsdWUpOwotICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBQcm90b2NvbDo6UGFnZTo6U2V0dGluZzo6U2hvd1JlcGFpbnRDb3VudGVyOgorICAgICAg
ICBpbnNwZWN0ZWRQYWdlU2V0dGluZ3Muc2V0U2hvd1JlcGFpbnRDb3VudGVySW5zcGVjdG9yT3Zl
cnJpZGUodmFsdWUpOworICAgICAgICByZXR1cm4geyB9OwogCi0gICAgY2FzZSBJbnNwZWN0b3I6
OlByb3RvY29sOjpQYWdlOjpTZXR0aW5nOjpXZWJSVENFbmNyeXB0aW9uRW5hYmxlZDoKLSAgICAg
ICAgaW5zcGVjdGVkUGFnZVNldHRpbmdzLnNldFdlYlJUQ0VuY3J5cHRpb25FbmFibGVkSW5zcGVj
dG9yT3ZlcnJpZGUob3ZlcnJpZGVWYWx1ZSk7Ci0gICAgICAgIHJldHVybjsKKyAgICBjYXNlIFBy
b3RvY29sOjpQYWdlOjpTZXR0aW5nOjpXZWJSVENFbmNyeXB0aW9uRW5hYmxlZDoKKyAgICAgICAg
aW5zcGVjdGVkUGFnZVNldHRpbmdzLnNldFdlYlJUQ0VuY3J5cHRpb25FbmFibGVkSW5zcGVjdG9y
T3ZlcnJpZGUodmFsdWUpOworICAgICAgICByZXR1cm4geyB9OwogCi0gICAgY2FzZSBJbnNwZWN0
b3I6OlByb3RvY29sOjpQYWdlOjpTZXR0aW5nOjpXZWJTZWN1cml0eUVuYWJsZWQ6Ci0gICAgICAg
IGluc3BlY3RlZFBhZ2VTZXR0aW5ncy5zZXRXZWJTZWN1cml0eUVuYWJsZWRJbnNwZWN0b3JPdmVy
cmlkZShvdmVycmlkZVZhbHVlKTsKLSAgICAgICAgcmV0dXJuOworICAgIGNhc2UgUHJvdG9jb2w6
OlBhZ2U6OlNldHRpbmc6OldlYlNlY3VyaXR5RW5hYmxlZDoKKyAgICAgICAgaW5zcGVjdGVkUGFn
ZVNldHRpbmdzLnNldFdlYlNlY3VyaXR5RW5hYmxlZEluc3BlY3Rvck92ZXJyaWRlKHZhbHVlKTsK
KyAgICAgICAgcmV0dXJuIHsgfTsKICAgICB9CiAKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICByZXR1cm4geyB9OwogfQogCi1zdGF0aWMgSW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6
Q29va2llU2FtZVNpdGVQb2xpY3kgY29va2llU2FtZVNpdGVQb2xpY3lKU09OKENvb2tpZTo6U2Ft
ZVNpdGVQb2xpY3kgcG9saWN5KQorc3RhdGljIFByb3RvY29sOjpQYWdlOjpDb29raWVTYW1lU2l0
ZVBvbGljeSBjb29raWVTYW1lU2l0ZVBvbGljeUpTT04oQ29va2llOjpTYW1lU2l0ZVBvbGljeSBw
b2xpY3kpCiB7CiAgICAgc3dpdGNoIChwb2xpY3kpIHsKICAgICBjYXNlIENvb2tpZTo6U2FtZVNp
dGVQb2xpY3k6Ok5vbmU6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdl
OjpDb29raWVTYW1lU2l0ZVBvbGljeTo6Tm9uZTsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpQ
YWdlOjpDb29raWVTYW1lU2l0ZVBvbGljeTo6Tm9uZTsKICAgICBjYXNlIENvb2tpZTo6U2FtZVNp
dGVQb2xpY3k6OkxheDoKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6
OkNvb2tpZVNhbWVTaXRlUG9saWN5OjpMYXg7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6UGFn
ZTo6Q29va2llU2FtZVNpdGVQb2xpY3k6OkxheDsKICAgICBjYXNlIENvb2tpZTo6U2FtZVNpdGVQ
b2xpY3k6OlN0cmljdDoKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6
OkNvb2tpZVNhbWVTaXRlUG9saWN5OjpTdHJpY3Q7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6
UGFnZTo6Q29va2llU2FtZVNpdGVQb2xpY3k6OlN0cmljdDsKICAgICB9CiAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkNvb2tp
ZVNhbWVTaXRlUG9saWN5OjpOb25lOworICAgIHJldHVybiBQcm90b2NvbDo6UGFnZTo6Q29va2ll
U2FtZVNpdGVQb2xpY3k6Ok5vbmU7CiB9CiAKLXN0YXRpYyBSZWY8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6UGFnZTo6Q29va2llPiBidWlsZE9iamVjdEZvckNvb2tpZShjb25zdCBDb29raWUmIGNvb2tp
ZSkKK3N0YXRpYyBSZWY8UHJvdG9jb2w6OlBhZ2U6OkNvb2tpZT4gYnVpbGRPYmplY3RGb3JDb29r
aWUoY29uc3QgQ29va2llJiBjb29raWUpCiB7Ci0gICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OlBhZ2U6OkNvb2tpZTo6Y3JlYXRlKCkKKyAgICByZXR1cm4gUHJvdG9jb2w6OlBhZ2U6OkNv
b2tpZTo6Y3JlYXRlKCkKICAgICAgICAgLnNldE5hbWUoY29va2llLm5hbWUpCiAgICAgICAgIC5z
ZXRWYWx1ZShjb29raWUudmFsdWUpCiAgICAgICAgIC5zZXREb21haW4oY29va2llLmRvbWFpbikK
QEAgLTUzOCw5ICs1MjIsOSBAQCBzdGF0aWMgUmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6
OkNvb2tpZT4gYnVpbGRPYmplY3RGb3JDb29raWUoY29uc3QgQ29va2llJgogICAgICAgICAucmVs
ZWFzZSgpOwogfQogCi1zdGF0aWMgUmVmPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6UGFnZTo6Q29va2llPj4gYnVpbGRBcnJheUZvckNvb2tpZXMoTGlzdEhhc2hTZXQ8Q29va2ll
PiYgY29va2llc0xpc3QpCitzdGF0aWMgUmVmPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OlBhZ2U6
OkNvb2tpZT4+IGJ1aWxkQXJyYXlGb3JDb29raWVzKExpc3RIYXNoU2V0PENvb2tpZT4mIGNvb2tp
ZXNMaXN0KQogewotICAgIGF1dG8gY29va2llcyA9IEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6UGFnZTo6Q29va2llPjo6Y3JlYXRlKCk7CisgICAgYXV0byBjb29raWVzID0gSlNP
Tjo6QXJyYXlPZjxQcm90b2NvbDo6UGFnZTo6Q29va2llPjo6Y3JlYXRlKCk7CiAKICAgICBmb3Ig
KGNvbnN0IGF1dG8mIGNvb2tpZSA6IGNvb2tpZXNMaXN0KQogICAgICAgICBjb29raWVzLT5hZGRJ
dGVtKGJ1aWxkT2JqZWN0Rm9yQ29va2llKGNvb2tpZSkpOwpAQCAtNTYwLDcgKzU0NCw3IEBAIHN0
YXRpYyBWZWN0b3I8VVJMPiBhbGxSZXNvdXJjZXNVUkxzRm9yRnJhbWUoRnJhbWUqIGZyYW1lKQog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpnZXRDb29r
aWVzKEVycm9yU3RyaW5nJiwgUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6UGFnZTo6Q29va2llPj4mIGNvb2tpZXMpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8
SlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UGFnZTo6Q29va2llPj4+IEluc3BlY3RvclBhZ2VBZ2Vu
dDo6Z2V0Q29va2llcygpCiB7CiAgICAgTGlzdEhhc2hTZXQ8Q29va2llPiBhbGxSYXdDb29raWVz
OwogCkBAIC01NzksNzIgKzU2Myw4NCBAQCB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6Z2V0Q29v
a2llcyhFcnJvclN0cmluZyYsIFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3RvcgogICAgICAg
ICB9CiAgICAgfQogCi0gICAgY29va2llcyA9IGJ1aWxkQXJyYXlGb3JDb29raWVzKGFsbFJhd0Nv
b2tpZXMpOworICAgIHJldHVybiBidWlsZEFycmF5Rm9yQ29va2llcyhhbGxSYXdDb29raWVzKTsK
IH0KIAotc3RhdGljIE9wdGlvbmFsPENvb2tpZT4gcGFyc2VDb29raWVPYmplY3QoRXJyb3JTdHJp
bmcmIGVycm9yU3RyaW5nLCBjb25zdCBKU09OOjpPYmplY3QmIGNvb2tpZU9iamVjdCkKK3N0YXRp
YyBPcHRpb25hbDxDb29raWU+IHBhcnNlQ29va2llT2JqZWN0KFByb3RvY29sOjpFcnJvclN0cmlu
ZyYgZXJyb3JTdHJpbmcsIFJlZjxKU09OOjpPYmplY3Q+JiYgY29va2llT2JqZWN0KQogewogICAg
IENvb2tpZSBjb29raWU7CiAKLSAgICBpZiAoIWNvb2tpZU9iamVjdC5nZXRTdHJpbmcoIm5hbWUi
X3MsIGNvb2tpZS5uYW1lKSkgeworICAgIGNvb2tpZS5uYW1lID0gY29va2llT2JqZWN0LT5nZXRT
dHJpbmcoUHJvdG9jb2w6OlBhZ2U6OkNvb2tpZTo6bmFtZUtleSk7CisgICAgaWYgKCFjb29raWUu
bmFtZSkgewogICAgICAgICBlcnJvclN0cmluZyA9ICJJbnZhbGlkIHZhbHVlIGZvciBrZXkgbmFt
ZSBpbiBnaXZlbiBjb29raWUiOwogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIH0K
IAotICAgIGlmICghY29va2llT2JqZWN0LmdldFN0cmluZygidmFsdWUiX3MsIGNvb2tpZS52YWx1
ZSkpIHsKKyAgICBjb29raWUudmFsdWUgPSBjb29raWVPYmplY3QtPmdldFN0cmluZyhQcm90b2Nv
bDo6UGFnZTo6Q29va2llOjp2YWx1ZUtleSk7CisgICAgaWYgKCFjb29raWUudmFsdWUpIHsKICAg
ICAgICAgZXJyb3JTdHJpbmcgPSAiSW52YWxpZCB2YWx1ZSBmb3Iga2V5IHZhbHVlIGluIGdpdmVu
IGNvb2tpZSI7CiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgfQogCi0gICAgaWYg
KCFjb29raWVPYmplY3QuZ2V0U3RyaW5nKCJkb21haW4iX3MsIGNvb2tpZS5kb21haW4pKSB7Cisg
ICAgY29va2llLmRvbWFpbiA9IGNvb2tpZU9iamVjdC0+Z2V0U3RyaW5nKFByb3RvY29sOjpQYWdl
OjpDb29raWU6OmRvbWFpbktleSk7CisgICAgaWYgKCFjb29raWUuZG9tYWluKSB7CiAgICAgICAg
IGVycm9yU3RyaW5nID0gIkludmFsaWQgdmFsdWUgZm9yIGtleSBkb21haW4gaW4gZ2l2ZW4gY29v
a2llIjsKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICB9CiAKLSAgICBpZiAoIWNv
b2tpZU9iamVjdC5nZXRTdHJpbmcoInBhdGgiX3MsIGNvb2tpZS5wYXRoKSkgeworICAgIGNvb2tp
ZS5wYXRoID0gY29va2llT2JqZWN0LT5nZXRTdHJpbmcoUHJvdG9jb2w6OlBhZ2U6OkNvb2tpZTo6
cGF0aEtleSk7CisgICAgaWYgKCFjb29raWUucGF0aCkgewogICAgICAgICBlcnJvclN0cmluZyA9
ICJJbnZhbGlkIHZhbHVlIGZvciBrZXkgcGF0aCBpbiBnaXZlbiBjb29raWUiOwogICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIH0KIAotICAgIGlmICghY29va2llT2JqZWN0LmdldEJv
b2xlYW4oImh0dHBPbmx5Il9zLCBjb29raWUuaHR0cE9ubHkpKSB7CisgICAgYXV0byBodHRwT25s
eSA9IGNvb2tpZU9iamVjdC0+Z2V0Qm9vbGVhbihQcm90b2NvbDo6UGFnZTo6Q29va2llOjpodHRw
T25seUtleSk7CisgICAgaWYgKCFodHRwT25seSkgewogICAgICAgICBlcnJvclN0cmluZyA9ICJJ
bnZhbGlkIHZhbHVlIGZvciBrZXkgaHR0cE9ubHkgaW4gZ2l2ZW4gY29va2llIjsKICAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICB9CiAKLSAgICBpZiAoIWNvb2tpZU9iamVjdC5nZXRC
b29sZWFuKCJzZWN1cmUiX3MsIGNvb2tpZS5zZWN1cmUpKSB7CisgICAgY29va2llLmh0dHBPbmx5
ID0gKmh0dHBPbmx5OworCisgICAgYXV0byBzZWN1cmUgPSBjb29raWVPYmplY3QtPmdldEJvb2xl
YW4oUHJvdG9jb2w6OlBhZ2U6OkNvb2tpZTo6c2VjdXJlS2V5KTsKKyAgICBpZiAoIXNlY3VyZSkg
ewogICAgICAgICBlcnJvclN0cmluZyA9ICJJbnZhbGlkIHZhbHVlIGZvciBrZXkgc2VjdXJlIGlu
IGdpdmVuIGNvb2tpZSI7CiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgfQogCi0g
ICAgYm9vbCB2YWxpZFNlc3Npb24gPSBjb29raWVPYmplY3QuZ2V0Qm9vbGVhbigic2Vzc2lvbiJf
cywgY29va2llLnNlc3Npb24pOwotICAgIGNvb2tpZS5leHBpcmVzID0gY29va2llT2JqZWN0Lmdl
dE51bWJlcjxkb3VibGU+KCJleHBpcmVzIl9zKTsKLSAgICBpZiAoIXZhbGlkU2Vzc2lvbiAmJiAh
Y29va2llLmV4cGlyZXMpIHsKKyAgICBjb29raWUuc2VjdXJlID0gKnNlY3VyZTsKKworICAgIGF1
dG8gc2Vzc2lvbiA9IGNvb2tpZU9iamVjdC0+Z2V0Qm9vbGVhbihQcm90b2NvbDo6UGFnZTo6Q29v
a2llOjpzZXNzaW9uS2V5KTsKKyAgICBjb29raWUuZXhwaXJlcyA9IGNvb2tpZU9iamVjdC0+Z2V0
RG91YmxlKFByb3RvY29sOjpQYWdlOjpDb29raWU6OmV4cGlyZXNLZXkpOworICAgIGlmICghc2Vz
c2lvbiAmJiAhY29va2llLmV4cGlyZXMpIHsKICAgICAgICAgZXJyb3JTdHJpbmcgPSAiSW52YWxp
ZCB2YWx1ZSBmb3Iga2V5IGV4cGlyZXMgaW4gZ2l2ZW4gY29va2llIjsKICAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKICAgICB9CiAKLSAgICBTdHJpbmcgc2FtZVNpdGVTdHJpbmc7Ci0gICAg
aWYgKCFjb29raWVPYmplY3QuZ2V0U3RyaW5nKCJzYW1lU2l0ZSJfcywgc2FtZVNpdGVTdHJpbmcp
KSB7CisgICAgY29va2llLnNlc3Npb24gPSAqc2Vzc2lvbjsKKworICAgIGF1dG8gc2FtZVNpdGVT
dHJpbmcgPSBjb29raWVPYmplY3QtPmdldFN0cmluZyhQcm90b2NvbDo6UGFnZTo6Q29va2llOjpz
YW1lU2l0ZUtleSk7CisgICAgaWYgKCFzYW1lU2l0ZVN0cmluZykgewogICAgICAgICBlcnJvclN0
cmluZyA9ICJJbnZhbGlkIHZhbHVlIGZvciBrZXkgc2FtZVNpdGUgaW4gZ2l2ZW4gY29va2llIjsK
ICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICB9CiAKLSAgICBhdXRvIHNhbWVTaXRl
ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6SW5zcGVjdG9ySGVscGVyczo6cGFyc2VFbnVtVmFsdWVG
cm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkNvb2tpZVNhbWVTaXRlUG9saWN5
PihzYW1lU2l0ZVN0cmluZyk7CisgICAgYXV0byBzYW1lU2l0ZSA9IFByb3RvY29sOjpIZWxwZXJz
OjpwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8UHJvdG9jb2w6OlBhZ2U6OkNvb2tpZVNhbWVTaXRl
UG9saWN5PihzYW1lU2l0ZVN0cmluZyk7CiAgICAgaWYgKCFzYW1lU2l0ZSkgewogICAgICAgICBl
cnJvclN0cmluZyA9ICJJbnZhbGlkIHZhbHVlIGZvciBrZXkgc2FtZVNpdGUgaW4gZ2l2ZW4gY29v
a2llIjsKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICB9CiAKICAgICBzd2l0Y2gg
KHNhbWVTaXRlLnZhbHVlKCkpIHsKLSAgICBjYXNlIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6
OkNvb2tpZVNhbWVTaXRlUG9saWN5OjpOb25lOgorICAgIGNhc2UgUHJvdG9jb2w6OlBhZ2U6OkNv
b2tpZVNhbWVTaXRlUG9saWN5OjpOb25lOgogICAgICAgICBjb29raWUuc2FtZVNpdGUgPSBDb29r
aWU6OlNhbWVTaXRlUG9saWN5OjpOb25lOwotCiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgSW5z
cGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6Q29va2llU2FtZVNpdGVQb2xpY3k6OkxheDoKKworICAg
IGNhc2UgUHJvdG9jb2w6OlBhZ2U6OkNvb2tpZVNhbWVTaXRlUG9saWN5OjpMYXg6CiAgICAgICAg
IGNvb2tpZS5zYW1lU2l0ZSA9IENvb2tpZTo6U2FtZVNpdGVQb2xpY3k6OkxheDsKLQogICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkNvb2tpZVNhbWVT
aXRlUG9saWN5OjpTdHJpY3Q6CisKKyAgICBjYXNlIFByb3RvY29sOjpQYWdlOjpDb29raWVTYW1l
U2l0ZVBvbGljeTo6U3RyaWN0OgogICAgICAgICBjb29raWUuc2FtZVNpdGUgPSBDb29raWU6OlNh
bWVTaXRlUG9saWN5OjpTdHJpY3Q7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTY1MiwxMSAr
NjQ4LDEzIEBAIHN0YXRpYyBPcHRpb25hbDxDb29raWU+IHBhcnNlQ29va2llT2JqZWN0KEVycm9y
U3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgSlNPTjo6CiAgICAgcmV0dXJuIGNvb2tpZTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OnNldENvb2tpZShFcnJvclN0cmluZyYgZXJyb3JT
dHJpbmcsIGNvbnN0IEpTT046Ok9iamVjdCYgY29va2llT2JqZWN0KQorUHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yUGFnZUFnZW50OjpzZXRDb29raWUoUmVmPEpTT046Ok9i
amVjdD4mJiBjb29raWVPYmplY3QpCiB7Ci0gICAgYXV0byBjb29raWUgPSBwYXJzZUNvb2tpZU9i
amVjdChlcnJvclN0cmluZywgY29va2llT2JqZWN0KTsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJp
bmcgZXJyb3JTdHJpbmc7CisKKyAgICBhdXRvIGNvb2tpZSA9IHBhcnNlQ29va2llT2JqZWN0KGVy
cm9yU3RyaW5nLCBXVEZNb3ZlKGNvb2tpZU9iamVjdCkpOwogICAgIGlmICghY29va2llKQotICAg
ICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7
CiAKICAgICBmb3IgKGF1dG8qIGZyYW1lID0gJm1faW5zcGVjdGVkUGFnZS5tYWluRnJhbWUoKTsg
ZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoKSkgewogICAgICAgICBp
ZiAoYXV0byogZG9jdW1lbnQgPSBmcmFtZS0+ZG9jdW1lbnQoKSkgewpAQCAtNjY0LDkgKzY2Miwx
MSBAQCB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6c2V0Q29va2llKEVycm9yU3RyaW5nJiBlcnJv
clN0cmluZywgY29uc3QgSlNPTjo6T2JqZWN0JgogICAgICAgICAgICAgICAgIHBhZ2UtPmNvb2tp
ZUphcigpLnNldFJhd0Nvb2tpZSgqZG9jdW1lbnQsIGNvb2tpZS52YWx1ZSgpKTsKICAgICAgICAg
fQogICAgIH0KKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yUGFnZUFnZW50
OjpkZWxldGVDb29raWUoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGNvb2tpZU5hbWUsIGNv
bnN0IFN0cmluZyYgdXJsKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9y
UGFnZUFnZW50OjpkZWxldGVDb29raWUoY29uc3QgU3RyaW5nJiBjb29raWVOYW1lLCBjb25zdCBT
dHJpbmcmIHVybCkKIHsKICAgICBVUkwgcGFyc2VkVVJMKHsgfSwgdXJsKTsKICAgICBmb3IgKEZy
YW1lKiBmcmFtZSA9ICZtX2luc3BlY3RlZFBhZ2UubWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9
IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsKQEAgLTY3NSw0OCArNjc1LDU5IEBAIHZv
aWQgSW5zcGVjdG9yUGFnZUFnZW50OjpkZWxldGVDb29raWUoRXJyb3JTdHJpbmcmLCBjb25zdCBT
dHJpbmcmIGNvb2tpZU5hbWUsIGNvCiAgICAgICAgICAgICAgICAgcGFnZS0+Y29va2llSmFyKCku
ZGVsZXRlQ29va2llKCpkb2N1bWVudCwgcGFyc2VkVVJMLCBjb29raWVOYW1lKTsKICAgICAgICAg
fQogICAgIH0KKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yUGFnZUFnZW50
OjpnZXRSZXNvdXJjZVRyZWUoRXJyb3JTdHJpbmcmLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2Nv
bDo6UGFnZTo6RnJhbWVSZXNvdXJjZVRyZWU+JiBvYmplY3QpCitQcm90b2NvbDo6RXJyb3JTdHJp
bmdPcjxSZWY8UHJvdG9jb2w6OlBhZ2U6OkZyYW1lUmVzb3VyY2VUcmVlPj4gSW5zcGVjdG9yUGFn
ZUFnZW50OjpnZXRSZXNvdXJjZVRyZWUoKQogewotICAgIG9iamVjdCA9IGJ1aWxkT2JqZWN0Rm9y
RnJhbWVUcmVlKCZtX2luc3BlY3RlZFBhZ2UubWFpbkZyYW1lKCkpOworICAgIHJldHVybiBidWls
ZE9iamVjdEZvckZyYW1lVHJlZSgmbV9pbnNwZWN0ZWRQYWdlLm1haW5GcmFtZSgpKTsKIH0KIAot
dm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmdldFJlc291cmNlQ29udGVudChFcnJvclN0cmluZyYg
ZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgZnJhbWVJZCwgY29uc3QgU3RyaW5nJiB1cmwsIFN0
cmluZyogY29udGVudCwgYm9vbCogYmFzZTY0RW5jb2RlZCkKK1Byb3RvY29sOjpFcnJvclN0cmlu
Z09yPHN0ZDo6dHVwbGU8U3RyaW5nLCBib29sIC8qIGJhc2U2NEVuY29kZWQgKi8+PiBJbnNwZWN0
b3JQYWdlQWdlbnQ6OmdldFJlc291cmNlQ29udGVudChjb25zdCBQcm90b2NvbDo6TmV0d29yazo6
RnJhbWVJZCYgZnJhbWVJZCwgY29uc3QgU3RyaW5nJiB1cmwpCiB7CisgICAgUHJvdG9jb2w6OkVy
cm9yU3RyaW5nIGVycm9yU3RyaW5nOworCiAgICAgRnJhbWUqIGZyYW1lID0gYXNzZXJ0RnJhbWUo
ZXJyb3JTdHJpbmcsIGZyYW1lSWQpOwogICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybjsK
KyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAotICAgIHJlc291
cmNlQ29udGVudChlcnJvclN0cmluZywgZnJhbWUsIFVSTCh7IH0sIHVybCksIGNvbnRlbnQsIGJh
c2U2NEVuY29kZWQpOworICAgIFN0cmluZyBjb250ZW50OworICAgIGJvb2wgYmFzZTY0RW5jb2Rl
ZDsKKworICAgIHJlc291cmNlQ29udGVudChlcnJvclN0cmluZywgZnJhbWUsIFVSTCh7IH0sIHVy
bCksICZjb250ZW50LCAmYmFzZTY0RW5jb2RlZCk7CisKKyAgICByZXR1cm4geyB7IGNvbnRlbnQs
IGJhc2U2NEVuY29kZWQgfSB9OwogfQogCi12b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6c2V0Qm9v
dHN0cmFwU2NyaXB0KEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nKiBvcHRpb25hbFNvdXJjZSkK
K1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvclBhZ2VBZ2VudDo6c2V0Qm9v
dHN0cmFwU2NyaXB0KGNvbnN0IFN0cmluZyYgc291cmNlKQogewotICAgIG1fYm9vdHN0cmFwU2Ny
aXB0ID0gb3B0aW9uYWxTb3VyY2UgPyAqb3B0aW9uYWxTb3VyY2UgOiBudWxsU3RyaW5nKCk7Cisg
ICAgbV9ib290c3RyYXBTY3JpcHQgPSBzb3VyY2U7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12
b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6c2VhcmNoSW5SZXNvdXJjZShFcnJvclN0cmluZyYgZXJy
b3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgZnJhbWVJZCwgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0
IFN0cmluZyYgcXVlcnksIGNvbnN0IGJvb2wqIG9wdGlvbmFsQ2FzZVNlbnNpdGl2ZSwgY29uc3Qg
Ym9vbCogb3B0aW9uYWxJc1JlZ2V4LCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsUmVxdWVzdElkLCBS
ZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpHZW5lcmljVHlwZXM6OlNl
YXJjaE1hdGNoPj4mIHJlc3VsdHMpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SlNPTjo6
QXJyYXlPZjxQcm90b2NvbDo6R2VuZXJpY1R5cGVzOjpTZWFyY2hNYXRjaD4+PiBJbnNwZWN0b3JQ
YWdlQWdlbnQ6OnNlYXJjaEluUmVzb3VyY2UoY29uc3QgUHJvdG9jb2w6Ok5ldHdvcms6OkZyYW1l
SWQmIGZyYW1lSWQsIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIHF1ZXJ5LCBPcHRp
b25hbDxib29sPiYmIGNhc2VTZW5zaXRpdmUsIE9wdGlvbmFsPGJvb2w+JiYgaXNSZWdleCwgY29u
c3QgUHJvdG9jb2w6Ok5ldHdvcms6OlJlcXVlc3RJZCYgcmVxdWVzdElkKQogewotICAgIHJlc3Vs
dHMgPSBKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkdlbmVyaWNUeXBlczo6U2Vh
cmNoTWF0Y2g+OjpjcmVhdGUoKTsKKyAgICBQcm90b2NvbDo6RXJyb3JTdHJpbmcgZXJyb3JTdHJp
bmc7CiAKLSAgICBib29sIGlzUmVnZXggPSBvcHRpb25hbElzUmVnZXggPyAqb3B0aW9uYWxJc1Jl
Z2V4IDogZmFsc2U7Ci0gICAgYm9vbCBjYXNlU2Vuc2l0aXZlID0gb3B0aW9uYWxDYXNlU2Vuc2l0
aXZlID8gKm9wdGlvbmFsQ2FzZVNlbnNpdGl2ZSA6IGZhbHNlOwotCi0gICAgaWYgKG9wdGlvbmFs
UmVxdWVzdElkKSB7CisgICAgaWYgKCEhcmVxdWVzdElkKSB7CiAgICAgICAgIGlmIChhdXRvKiBu
ZXR3b3JrQWdlbnQgPSBtX2luc3RydW1lbnRpbmdBZ2VudHMuZW5hYmxlZE5ldHdvcmtBZ2VudCgp
KSB7Ci0gICAgICAgICAgICBuZXR3b3JrQWdlbnQtPnNlYXJjaEluUmVxdWVzdChlcnJvclN0cmlu
ZywgKm9wdGlvbmFsUmVxdWVzdElkLCBxdWVyeSwgY2FzZVNlbnNpdGl2ZSwgaXNSZWdleCwgcmVz
dWx0cyk7Ci0gICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBSZWZQdHI8SlNPTjo6QXJy
YXlPZjxQcm90b2NvbDo6R2VuZXJpY1R5cGVzOjpTZWFyY2hNYXRjaD4+IHJlc3VsdDsKKyAgICAg
ICAgICAgIG5ldHdvcmtBZ2VudC0+c2VhcmNoSW5SZXF1ZXN0KGVycm9yU3RyaW5nLCByZXF1ZXN0
SWQsIHF1ZXJ5LCBjYXNlU2Vuc2l0aXZlICYmICpjYXNlU2Vuc2l0aXZlLCBpc1JlZ2V4ICYmICpp
c1JlZ2V4LCByZXN1bHQpOworICAgICAgICAgICAgaWYgKCFyZXN1bHQpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKKyAgICAgICAgICAgIHJldHVy
biByZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKICAgICAgICAgfQogICAgIH0KIAogICAgIEZyYW1l
KiBmcmFtZSA9IGFzc2VydEZyYW1lKGVycm9yU3RyaW5nLCBmcmFtZUlkKTsKICAgICBpZiAoIWZy
YW1lKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJv
clN0cmluZyk7CiAKICAgICBEb2N1bWVudExvYWRlciogbG9hZGVyID0gYXNzZXJ0RG9jdW1lbnRM
b2FkZXIoZXJyb3JTdHJpbmcsIGZyYW1lKTsKICAgICBpZiAoIWxvYWRlcikKLSAgICAgICAgcmV0
dXJuOworICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoZXJyb3JTdHJpbmcpOwogCiAgICAg
VVJMIGt1cmwoeyB9LCB1cmwpOwogCkBAIC03MzUsMjkgKzc0NiwyNiBAQCB2b2lkIEluc3BlY3Rv
clBhZ2VBZ2VudDo6c2VhcmNoSW5SZXNvdXJjZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNv
bnN0IFN0cmluZwogICAgIH0KIAogICAgIGlmICghc3VjY2VzcykKLSAgICAgICAgcmV0dXJuOwor
ICAgICAgICByZXR1cm4gSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6R2VuZXJpY1R5cGVzOjpTZWFy
Y2hNYXRjaD46OmNyZWF0ZSgpOwogCi0gICAgcmVzdWx0cyA9IENvbnRlbnRTZWFyY2hVdGlsaXRp
ZXM6OnNlYXJjaEluVGV4dEJ5TGluZXMoY29udGVudCwgcXVlcnksIGNhc2VTZW5zaXRpdmUsIGlz
UmVnZXgpOworICAgIHJldHVybiBDb250ZW50U2VhcmNoVXRpbGl0aWVzOjpzZWFyY2hJblRleHRC
eUxpbmVzKGNvbnRlbnQsIHF1ZXJ5LCBjYXNlU2Vuc2l0aXZlICYmICpjYXNlU2Vuc2l0aXZlLCBp
c1JlZ2V4ICYmICppc1JlZ2V4KTsKIH0KIAotc3RhdGljIFJlZjxJbnNwZWN0b3I6OlByb3RvY29s
OjpQYWdlOjpTZWFyY2hSZXN1bHQ+IGJ1aWxkT2JqZWN0Rm9yU2VhcmNoUmVzdWx0KGNvbnN0IFN0
cmluZyYgZnJhbWVJZCwgY29uc3QgU3RyaW5nJiB1cmwsIGludCBtYXRjaGVzQ291bnQpCitzdGF0
aWMgUmVmPFByb3RvY29sOjpQYWdlOjpTZWFyY2hSZXN1bHQ+IGJ1aWxkT2JqZWN0Rm9yU2VhcmNo
UmVzdWx0KGNvbnN0IFByb3RvY29sOjpOZXR3b3JrOjpGcmFtZUlkJiBmcmFtZUlkLCBjb25zdCBT
dHJpbmcmIHVybCwgaW50IG1hdGNoZXNDb3VudCkKIHsKLSAgICByZXR1cm4gSW5zcGVjdG9yOjpQ
cm90b2NvbDo6UGFnZTo6U2VhcmNoUmVzdWx0OjpjcmVhdGUoKQorICAgIHJldHVybiBQcm90b2Nv
bDo6UGFnZTo6U2VhcmNoUmVzdWx0OjpjcmVhdGUoKQogICAgICAgICAuc2V0VXJsKHVybCkKICAg
ICAgICAgLnNldEZyYW1lSWQoZnJhbWVJZCkKICAgICAgICAgLnNldE1hdGNoZXNDb3VudChtYXRj
aGVzQ291bnQpCiAgICAgICAgIC5yZWxlYXNlKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yUGFnZUFn
ZW50OjpzZWFyY2hJblJlc291cmNlcyhFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgdGV4dCwg
Y29uc3QgYm9vbCogb3B0aW9uYWxDYXNlU2Vuc2l0aXZlLCBjb25zdCBib29sKiBvcHRpb25hbElz
UmVnZXgsIFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OlNl
YXJjaFJlc3VsdD4+JiByZXN1bHQpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SlNPTjo6
QXJyYXlPZjxQcm90b2NvbDo6UGFnZTo6U2VhcmNoUmVzdWx0Pj4+IEluc3BlY3RvclBhZ2VBZ2Vu
dDo6c2VhcmNoSW5SZXNvdXJjZXMoY29uc3QgU3RyaW5nJiB0ZXh0LCBPcHRpb25hbDxib29sPiYm
IGNhc2VTZW5zaXRpdmUsIE9wdGlvbmFsPGJvb2w+JiYgaXNSZWdleCkKIHsKLSAgICByZXN1bHQg
PSBKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OlNlYXJjaFJlc3VsdD46
OmNyZWF0ZSgpOworICAgIGF1dG8gcmVzdWx0ID0gSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UGFn
ZTo6U2VhcmNoUmVzdWx0Pjo6Y3JlYXRlKCk7CiAKLSAgICBib29sIGNhc2VTZW5zaXRpdmUgPSBv
cHRpb25hbENhc2VTZW5zaXRpdmUgPyAqb3B0aW9uYWxDYXNlU2Vuc2l0aXZlIDogZmFsc2U7Ci0g
ICAgYm9vbCBpc1JlZ2V4ID0gb3B0aW9uYWxJc1JlZ2V4ID8gKm9wdGlvbmFsSXNSZWdleCA6IGZh
bHNlOwotCi0gICAgYXV0byBzZWFyY2hTdHJpbmdUeXBlID0gaXNSZWdleCA/IENvbnRlbnRTZWFy
Y2hVdGlsaXRpZXM6OlNlYXJjaFN0cmluZ1R5cGU6OlJlZ2V4IDogQ29udGVudFNlYXJjaFV0aWxp
dGllczo6U2VhcmNoU3RyaW5nVHlwZTo6Q29udGFpbnNTdHJpbmc7Ci0gICAgYXV0byByZWdleCA9
IENvbnRlbnRTZWFyY2hVdGlsaXRpZXM6OmNyZWF0ZVJlZ3VsYXJFeHByZXNzaW9uRm9yU2VhcmNo
U3RyaW5nKHRleHQsIGNhc2VTZW5zaXRpdmUsIHNlYXJjaFN0cmluZ1R5cGUpOworICAgIGF1dG8g
c2VhcmNoU3RyaW5nVHlwZSA9IChpc1JlZ2V4ICYmICppc1JlZ2V4KSA/IENvbnRlbnRTZWFyY2hV
dGlsaXRpZXM6OlNlYXJjaFN0cmluZ1R5cGU6OlJlZ2V4IDogQ29udGVudFNlYXJjaFV0aWxpdGll
czo6U2VhcmNoU3RyaW5nVHlwZTo6Q29udGFpbnNTdHJpbmc7CisgICAgYXV0byByZWdleCA9IENv
bnRlbnRTZWFyY2hVdGlsaXRpZXM6OmNyZWF0ZVJlZ3VsYXJFeHByZXNzaW9uRm9yU2VhcmNoU3Ry
aW5nKHRleHQsIGNhc2VTZW5zaXRpdmUgJiYgKmNhc2VTZW5zaXRpdmUsIHNlYXJjaFN0cmluZ1R5
cGUpOwogCiAgICAgZm9yIChGcmFtZSogZnJhbWUgPSAmbV9pbnNwZWN0ZWRQYWdlLm1haW5GcmFt
ZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKSB7CiAgICAg
ICAgIGZvciAoYXV0byogY2FjaGVkUmVzb3VyY2UgOiBjYWNoZWRSZXNvdXJjZXNGb3JGcmFtZShm
cmFtZSkpIHsKQEAgLTc3MSwyNCArNzc5LDMwIEBAIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50Ojpz
ZWFyY2hJblJlc291cmNlcyhFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgdGV4dCwgY29uCiAK
ICAgICBpZiAoYXV0byogbmV0d29ya0FnZW50ID0gbV9pbnN0cnVtZW50aW5nQWdlbnRzLmVuYWJs
ZWROZXR3b3JrQWdlbnQoKSkKICAgICAgICAgbmV0d29ya0FnZW50LT5zZWFyY2hPdGhlclJlcXVl
c3RzKHJlZ2V4LCByZXN1bHQpOworCisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogI2lmICFQTEFU
Rk9STShJT1NfRkFNSUxZKQotdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OnNldFNob3dSdWxlcnMo
RXJyb3JTdHJpbmcmLCBib29sIHNob3dSdWxlcnMpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2
b2lkPiBJbnNwZWN0b3JQYWdlQWdlbnQ6OnNldFNob3dSdWxlcnMoYm9vbCBzaG93UnVsZXJzKQog
ewogICAgIG1fb3ZlcmxheS0+c2V0U2hvd1J1bGVycyhzaG93UnVsZXJzKTsKKworICAgIHJldHVy
biB7IH07CiB9CiAjZW5kaWYKIAotdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OnNldFNob3dQYWlu
dFJlY3RzKEVycm9yU3RyaW5nJiwgYm9vbCBzaG93KQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8
dm9pZD4gSW5zcGVjdG9yUGFnZUFnZW50OjpzZXRTaG93UGFpbnRSZWN0cyhib29sIHNob3cpCiB7
CiAgICAgbV9zaG93UGFpbnRSZWN0cyA9IHNob3c7CiAgICAgbV9jbGllbnQtPnNldFNob3dQYWlu
dFJlY3RzKHNob3cpOwogCiAgICAgaWYgKG1fY2xpZW50LT5vdmVycmlkZXNTaG93UGFpbnRSZWN0
cygpKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB7IH07CiAKICAgICBtX292ZXJs
YXktPnNldFNob3dQYWludFJlY3RzKHNob3cpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAogdm9p
ZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmRvbUNvbnRlbnRFdmVudEZpcmVkKCkKQEAgLTgxNiw3ICs4
MzAsNyBAQCB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6ZnJhbWVEZXRhY2hlZChGcmFtZSYgZnJh
bWUpCiAgICAgbV9pZGVudGlmaWVyVG9GcmFtZS5yZW1vdmUoaWRlbnRpZmllcik7CiB9CiAKLUZy
YW1lKiBJbnNwZWN0b3JQYWdlQWdlbnQ6OmZyYW1lRm9ySWQoY29uc3QgU3RyaW5nJiBmcmFtZUlk
KQorRnJhbWUqIEluc3BlY3RvclBhZ2VBZ2VudDo6ZnJhbWVGb3JJZChjb25zdCBQcm90b2NvbDo6
TmV0d29yazo6RnJhbWVJZCYgZnJhbWVJZCkKIHsKICAgICByZXR1cm4gZnJhbWVJZC5pc0VtcHR5
KCkgPyBudWxscHRyIDogbV9pZGVudGlmaWVyVG9GcmFtZS5nZXQoZnJhbWVJZCk7CiB9CkBAIC04
NDEsNyArODU1LDcgQEAgU3RyaW5nIEluc3BlY3RvclBhZ2VBZ2VudDo6bG9hZGVySWQoRG9jdW1l
bnRMb2FkZXIqIGxvYWRlcikKICAgICB9KS5pdGVyYXRvci0+dmFsdWU7CiB9CiAKLUZyYW1lKiBJ
bnNwZWN0b3JQYWdlQWdlbnQ6OmFzc2VydEZyYW1lKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywg
Y29uc3QgU3RyaW5nJiBmcmFtZUlkKQorRnJhbWUqIEluc3BlY3RvclBhZ2VBZ2VudDo6YXNzZXJ0
RnJhbWUoUHJvdG9jb2w6OkVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgUHJvdG9jb2w6
Ok5ldHdvcms6OkZyYW1lSWQmIGZyYW1lSWQpCiB7CiAgICAgRnJhbWUqIGZyYW1lID0gZnJhbWVG
b3JJZChmcmFtZUlkKTsKICAgICBpZiAoIWZyYW1lKQpAQCAtODc3LDcgKzg5MSw3IEBAIHZvaWQg
SW5zcGVjdG9yUGFnZUFnZW50OjpmcmFtZUNsZWFyZWRTY2hlZHVsZWROYXZpZ2F0aW9uKEZyYW1l
JiBmcmFtZSkKICNpZiBFTkFCTEUoREFSS19NT0RFX0NTUykgfHwgSEFWRShPU19EQVJLX01PREVf
U1VQUE9SVCkKIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpkZWZhdWx0QXBwZWFyYW5jZURpZENo
YW5nZShib29sIHVzZURhcmtBcHBlYXJhbmNlKQogewotICAgIG1fZnJvbnRlbmREaXNwYXRjaGVy
LT5kZWZhdWx0QXBwZWFyYW5jZURpZENoYW5nZSh1c2VEYXJrQXBwZWFyYW5jZSA/IEluc3BlY3Rv
cjo6UHJvdG9jb2w6OlBhZ2U6OkFwcGVhcmFuY2U6OkRhcmsgOiBJbnNwZWN0b3I6OlByb3RvY29s
OjpQYWdlOjpBcHBlYXJhbmNlOjpMaWdodCk7CisgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPmRl
ZmF1bHRBcHBlYXJhbmNlRGlkQ2hhbmdlKHVzZURhcmtBcHBlYXJhbmNlID8gUHJvdG9jb2w6OlBh
Z2U6OkFwcGVhcmFuY2U6OkRhcmsgOiBQcm90b2NvbDo6UGFnZTo6QXBwZWFyYW5jZTo6TGlnaHQp
OwogfQogI2VuZGlmCiAKQEAgLTkzMywxMSArOTQ3LDExIEBAIHZvaWQgSW5zcGVjdG9yUGFnZUFn
ZW50OjpkaWRSZWNhbGN1bGF0ZVN0eWxlKCkKICAgICBtX292ZXJsYXktPnVwZGF0ZSgpOwogfQog
Ci1SZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6RnJhbWU+IEluc3BlY3RvclBhZ2VBZ2Vu
dDo6YnVpbGRPYmplY3RGb3JGcmFtZShGcmFtZSogZnJhbWUpCitSZWY8UHJvdG9jb2w6OlBhZ2U6
OkZyYW1lPiBJbnNwZWN0b3JQYWdlQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yRnJhbWUoRnJhbWUqIGZy
YW1lKQogewogICAgIEFTU0VSVF9BUkcoZnJhbWUsIGZyYW1lKTsKIAotICAgIGF1dG8gZnJhbWVP
YmplY3QgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpGcmFtZTo6Y3JlYXRlKCkKKyAgICBh
dXRvIGZyYW1lT2JqZWN0ID0gUHJvdG9jb2w6OlBhZ2U6OkZyYW1lOjpjcmVhdGUoKQogICAgICAg
ICAuc2V0SWQoZnJhbWVJZChmcmFtZSkpCiAgICAgICAgIC5zZXRMb2FkZXJJZChsb2FkZXJJZChm
cmFtZS0+bG9hZGVyKCkuZG9jdW1lbnRMb2FkZXIoKSkpCiAgICAgICAgIC5zZXRVcmwoZnJhbWUt
PmRvY3VtZW50KCktPnVybCgpLnN0cmluZygpKQpAQCAtOTU2LDE5ICs5NzAsMTkgQEAgUmVmPElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkZyYW1lPiBJbnNwZWN0b3JQYWdlQWdlbnQ6OmJ1aWxk
T2JqZWN0Rm9yRnJhbWUoRnIKICAgICByZXR1cm4gZnJhbWVPYmplY3Q7CiB9CiAKLVJlZjxJbnNw
ZWN0b3I6OlByb3RvY29sOjpQYWdlOjpGcmFtZVJlc291cmNlVHJlZT4gSW5zcGVjdG9yUGFnZUFn
ZW50OjpidWlsZE9iamVjdEZvckZyYW1lVHJlZShGcmFtZSogZnJhbWUpCitSZWY8UHJvdG9jb2w6
OlBhZ2U6OkZyYW1lUmVzb3VyY2VUcmVlPiBJbnNwZWN0b3JQYWdlQWdlbnQ6OmJ1aWxkT2JqZWN0
Rm9yRnJhbWVUcmVlKEZyYW1lKiBmcmFtZSkKIHsKICAgICBBU1NFUlRfQVJHKGZyYW1lLCBmcmFt
ZSk7CiAKLSAgICBSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6RnJhbWU+IGZyYW1lT2Jq
ZWN0ID0gYnVpbGRPYmplY3RGb3JGcmFtZShmcmFtZSk7Ci0gICAgYXV0byBzdWJyZXNvdXJjZXMg
PSBKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkZyYW1lUmVzb3VyY2U+
OjpjcmVhdGUoKTsKLSAgICBhdXRvIHJlc3VsdCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6
OkZyYW1lUmVzb3VyY2VUcmVlOjpjcmVhdGUoKQorICAgIGF1dG8gZnJhbWVPYmplY3QgPSBidWls
ZE9iamVjdEZvckZyYW1lKGZyYW1lKTsKKyAgICBhdXRvIHN1YnJlc291cmNlcyA9IEpTT046OkFy
cmF5T2Y8UHJvdG9jb2w6OlBhZ2U6OkZyYW1lUmVzb3VyY2U+OjpjcmVhdGUoKTsKKyAgICBhdXRv
IHJlc3VsdCA9IFByb3RvY29sOjpQYWdlOjpGcmFtZVJlc291cmNlVHJlZTo6Y3JlYXRlKCkKICAg
ICAgICAgLnNldEZyYW1lKFdURk1vdmUoZnJhbWVPYmplY3QpKQogICAgICAgICAuc2V0UmVzb3Vy
Y2VzKHN1YnJlc291cmNlcy5jb3B5UmVmKCkpCiAgICAgICAgIC5yZWxlYXNlKCk7CiAKICAgICBm
b3IgKGF1dG8qIGNhY2hlZFJlc291cmNlIDogY2FjaGVkUmVzb3VyY2VzRm9yRnJhbWUoZnJhbWUp
KSB7Ci0gICAgICAgIGF1dG8gcmVzb3VyY2VPYmplY3QgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpQ
YWdlOjpGcmFtZVJlc291cmNlOjpjcmVhdGUoKQorICAgICAgICBhdXRvIHJlc291cmNlT2JqZWN0
ID0gUHJvdG9jb2w6OlBhZ2U6OkZyYW1lUmVzb3VyY2U6OmNyZWF0ZSgpCiAgICAgICAgICAgICAu
c2V0VXJsKGNhY2hlZFJlc291cmNlLT51cmwoKS5zdHJpbmcoKSkKICAgICAgICAgICAgIC5zZXRU
eXBlKGNhY2hlZFJlc291cmNlVHlwZUpTT04oKmNhY2hlZFJlc291cmNlKSkKICAgICAgICAgICAg
IC5zZXRNaW1lVHlwZShjYWNoZWRSZXNvdXJjZS0+cmVzcG9uc2UoKS5taW1lVHlwZSgpKQpAQCAt
OTg2LDIxICsxMDAwLDIxIEBAIFJlZjxJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpGcmFtZVJl
c291cmNlVHJlZT4gSW5zcGVjdG9yUGFnZUFnZW50OjpidWlsZE9iamVjCiAgICAgICAgIHN1YnJl
c291cmNlcy0+YWRkSXRlbShXVEZNb3ZlKHJlc291cmNlT2JqZWN0KSk7CiAgICAgfQogCi0gICAg
UmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6RnJhbWVSZXNv
dXJjZVRyZWU+PiBjaGlsZHJlbkFycmF5OworICAgIFJlZlB0cjxKU09OOjpBcnJheU9mPFByb3Rv
Y29sOjpQYWdlOjpGcmFtZVJlc291cmNlVHJlZT4+IGNoaWxkcmVuQXJyYXk7CiAgICAgZm9yIChG
cmFtZSogY2hpbGQgPSBmcmFtZS0+dHJlZSgpLmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0g
Y2hpbGQtPnRyZWUoKS5uZXh0U2libGluZygpKSB7CiAgICAgICAgIGlmICghY2hpbGRyZW5BcnJh
eSkgewotICAgICAgICAgICAgY2hpbGRyZW5BcnJheSA9IEpTT046OkFycmF5T2Y8SW5zcGVjdG9y
OjpQcm90b2NvbDo6UGFnZTo6RnJhbWVSZXNvdXJjZVRyZWU+OjpjcmVhdGUoKTsKLSAgICAgICAg
ICAgIHJlc3VsdC0+c2V0Q2hpbGRGcmFtZXMoY2hpbGRyZW5BcnJheSk7CisgICAgICAgICAgICBj
aGlsZHJlbkFycmF5ID0gSlNPTjo6QXJyYXlPZjxQcm90b2NvbDo6UGFnZTo6RnJhbWVSZXNvdXJj
ZVRyZWU+OjpjcmVhdGUoKTsKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0Q2hpbGRGcmFtZXMoKmNo
aWxkcmVuQXJyYXkpOwogICAgICAgICB9CiAgICAgICAgIGNoaWxkcmVuQXJyYXktPmFkZEl0ZW0o
YnVpbGRPYmplY3RGb3JGcmFtZVRyZWUoY2hpbGQpKTsKICAgICB9CiAgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIAotdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OnNldEVtdWxhdGVkTWVkaWEoRXJyb3JT
dHJpbmcmLCBjb25zdCBTdHJpbmcmIG1lZGlhKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9p
ZD4gSW5zcGVjdG9yUGFnZUFnZW50OjpzZXRFbXVsYXRlZE1lZGlhKGNvbnN0IFN0cmluZyYgbWVk
aWEpCiB7CiAgICAgaWYgKG1lZGlhID09IG1fZW11bGF0ZWRNZWRpYSkKLSAgICAgICAgcmV0dXJu
OworICAgICAgICByZXR1cm4geyB9OwogCiAgICAgbV9lbXVsYXRlZE1lZGlhID0gbWVkaWE7CiAK
QEAgLTEwMDksMjEgKzEwMjMsMzQgQEAgdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OnNldEVtdWxh
dGVkTWVkaWEoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIG1lZGlhKQogCiAgICAgYXV0byBk
b2N1bWVudCA9IG1ha2VSZWZQdHIobV9pbnNwZWN0ZWRQYWdlLm1haW5GcmFtZSgpLmRvY3VtZW50
KCkpOwogICAgIGlmICghZG9jdW1lbnQpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJu
IHsgfTsKIAogICAgIGRvY3VtZW50LT51cGRhdGVMYXlvdXQoKTsKICAgICBkb2N1bWVudC0+ZXZh
bHVhdGVNZWRpYVF1ZXJpZXNBbmRSZXBvcnRDaGFuZ2VzKCk7CisKKyAgICByZXR1cm4geyB9Owog
fQogCiAjaWYgRU5BQkxFKERBUktfTU9ERV9DU1MpIHx8IEhBVkUoT1NfREFSS19NT0RFX1NVUFBP
UlQpCi12b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6c2V0Rm9yY2VkQXBwZWFyYW5jZShFcnJvclN0
cmluZyYsIGNvbnN0IFN0cmluZyYgYXBwZWFyYW5jZSkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09y
PHZvaWQ+IEluc3BlY3RvclBhZ2VBZ2VudDo6c2V0Rm9yY2VkQXBwZWFyYW5jZShPcHRpb25hbDxQ
cm90b2NvbDo6UGFnZTo6QXBwZWFyYW5jZT4mJiBhcHBlYXJhbmNlKQogewotICAgIGlmIChhcHBl
YXJhbmNlID09ICJMaWdodCJfcykKLSAgICAgICAgbV9pbnNwZWN0ZWRQYWdlLnNldFVzZURhcmtB
cHBlYXJhbmNlT3ZlcnJpZGUoZmFsc2UpOwotICAgIGVsc2UgaWYgKGFwcGVhcmFuY2UgPT0gIkRh
cmsiX3MpCi0gICAgICAgIG1faW5zcGVjdGVkUGFnZS5zZXRVc2VEYXJrQXBwZWFyYW5jZU92ZXJy
aWRlKHRydWUpOwotICAgIGVsc2UKKyAgICBpZiAoIWFwcGVhcmFuY2UpIHsKICAgICAgICAgbV9p
bnNwZWN0ZWRQYWdlLnNldFVzZURhcmtBcHBlYXJhbmNlT3ZlcnJpZGUoV1RGOjpudWxsb3B0KTsK
KyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBzd2l0Y2ggKCphcHBlYXJhbmNlKSB7
CisgICAgY2FzZSBQcm90b2NvbDo6UGFnZTo6QXBwZWFyYW5jZTo6TGlnaHQ6CisgICAgICAgIG1f
aW5zcGVjdGVkUGFnZS5zZXRVc2VEYXJrQXBwZWFyYW5jZU92ZXJyaWRlKGZhbHNlKTsKKyAgICAg
ICAgcmV0dXJuIHsgfTsKKworICAgIGNhc2UgUHJvdG9jb2w6OlBhZ2U6OkFwcGVhcmFuY2U6OkRh
cms6CisgICAgICAgIG1faW5zcGVjdGVkUGFnZS5zZXRVc2VEYXJrQXBwZWFyYW5jZU92ZXJyaWRl
KHRydWUpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgIHJldHVybiB7IH07CiB9CiAjZW5kaWYKIApAQCAtMTAzOSw1MSArMTA2Niw0
NyBAQCB2b2lkIEluc3BlY3RvclBhZ2VBZ2VudDo6YXBwbHlFbXVsYXRlZE1lZGlhKFN0cmluZyYg
bWVkaWEpCiAgICAgICAgIG1lZGlhID0gbV9lbXVsYXRlZE1lZGlhOwogfQogCi12b2lkIEluc3Bl
Y3RvclBhZ2VBZ2VudDo6c25hcHNob3ROb2RlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgaW50
IG5vZGVJZCwgU3RyaW5nKiBvdXREYXRhVVJMKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8U3Ry
aW5nPiBJbnNwZWN0b3JQYWdlQWdlbnQ6OnNuYXBzaG90Tm9kZShQcm90b2NvbDo6RE9NOjpOb2Rl
SWQgbm9kZUlkKQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwog
ICAgIEluc3BlY3RvckRPTUFnZW50KiBkb21BZ2VudCA9IG1faW5zdHJ1bWVudGluZ0FnZW50cy5w
ZXJzaXN0ZW50RE9NQWdlbnQoKTsKICAgICBBU1NFUlQoZG9tQWdlbnQpOwogICAgIE5vZGUqIG5v
ZGUgPSBkb21BZ2VudC0+YXNzZXJ0Tm9kZShlcnJvclN0cmluZywgbm9kZUlkKTsKICAgICBpZiAo
IW5vZGUpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVy
cm9yU3RyaW5nKTsKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gc25hcHNob3Qg
PSBXZWJDb3JlOjpzbmFwc2hvdE5vZGUobV9pbnNwZWN0ZWRQYWdlLm1haW5GcmFtZSgpLCAqbm9k
ZSk7Ci0gICAgaWYgKCFzbmFwc2hvdCkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJDb3VsZCBu
b3QgY2FwdHVyZSBzbmFwc2hvdCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAo
IXNuYXBzaG90KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkNvdWxkIG5vdCBjYXB0
dXJlIHNuYXBzaG90Il9zKTsKIAotICAgICpvdXREYXRhVVJMID0gc25hcHNob3QtPnRvRGF0YVVS
TCgiaW1hZ2UvcG5nIl9zLCBXVEY6Om51bGxvcHQsIFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKTsK
KyAgICByZXR1cm4gc25hcHNob3QtPnRvRGF0YVVSTCgiaW1hZ2UvcG5nIl9zLCBXVEY6Om51bGxv
cHQsIFByZXNlcnZlUmVzb2x1dGlvbjo6WWVzKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JQYWdlQWdl
bnQ6OnNuYXBzaG90UmVjdChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCB4LCBpbnQgeSwg
aW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBjb25zdCBTdHJpbmcmIGNvb3JkaW5hdGVTeXN0ZW0sIFN0
cmluZyogb3V0RGF0YVVSTCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPFN0cmluZz4gSW5zcGVj
dG9yUGFnZUFnZW50OjpzbmFwc2hvdFJlY3QoaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBo
ZWlnaHQsIFByb3RvY29sOjpQYWdlOjpDb29yZGluYXRlU3lzdGVtIGNvb3JkaW5hdGVTeXN0ZW0p
CiB7CiAgICAgU25hcHNob3RPcHRpb25zIG9wdGlvbnMgPSBTbmFwc2hvdE9wdGlvbnNOb25lOwot
ICAgIGlmIChjb29yZGluYXRlU3lzdGVtID09ICJWaWV3cG9ydCIpCisgICAgaWYgKGNvb3JkaW5h
dGVTeXN0ZW0gPT0gUHJvdG9jb2w6OlBhZ2U6OkNvb3JkaW5hdGVTeXN0ZW06OlZpZXdwb3J0KQog
ICAgICAgICBvcHRpb25zIHw9IFNuYXBzaG90T3B0aW9uc0luVmlld0Nvb3JkaW5hdGVzOwogCiAg
ICAgSW50UmVjdCByZWN0YW5nbGUoeCwgeSwgd2lkdGgsIGhlaWdodCk7CiAgICAgc3RkOjp1bmlx
dWVfcHRyPEltYWdlQnVmZmVyPiBzbmFwc2hvdCA9IHNuYXBzaG90RnJhbWVSZWN0KG1faW5zcGVj
dGVkUGFnZS5tYWluRnJhbWUoKSwgcmVjdGFuZ2xlLCBvcHRpb25zKTsKIAotICAgIGlmICghc25h
cHNob3QpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiQ291bGQgbm90IGNhcHR1cmUgc25hcHNo
b3QiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKCFzbmFwc2hvdCkKKyAgICAg
ICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJDb3VsZCBub3QgY2FwdHVyZSBzbmFwc2hvdCJfcyk7
CiAKLSAgICAqb3V0RGF0YVVSTCA9IHNuYXBzaG90LT50b0RhdGFVUkwoImltYWdlL3BuZyJfcywg
V1RGOjpudWxsb3B0LCBQcmVzZXJ2ZVJlc29sdXRpb246Olllcyk7CisgICAgcmV0dXJuIHNuYXBz
aG90LT50b0RhdGFVUkwoImltYWdlL3BuZyJfcywgV1RGOjpudWxsb3B0LCBQcmVzZXJ2ZVJlc29s
dXRpb246Olllcyk7CiB9CiAKICNpZiBFTkFCTEUoV0VCX0FSQ0hJVkUpICYmIFVTRShDRikKLXZv
aWQgSW5zcGVjdG9yUGFnZUFnZW50OjphcmNoaXZlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywg
U3RyaW5nKiBkYXRhKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8U3RyaW5nPiBJbnNwZWN0b3JQ
YWdlQWdlbnQ6OmFyY2hpdmUoKQogewogICAgIGF1dG8gYXJjaGl2ZSA9IExlZ2FjeVdlYkFyY2hp
dmU6OmNyZWF0ZShtX2luc3BlY3RlZFBhZ2UubWFpbkZyYW1lKCkpOwotICAgIGlmICghYXJjaGl2
ZSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJDb3VsZCBub3QgY3JlYXRlIHdlYiBhcmNoaXZl
IGZvciBtYWluIGZyYW1lIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmICghYXJj
aGl2ZSkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJDb3VsZCBub3QgY3JlYXRlIHdl
YiBhcmNoaXZlIGZvciBtYWluIGZyYW1lIl9zKTsKIAogICAgIFJldGFpblB0cjxDRkRhdGFSZWY+
IGJ1ZmZlciA9IGFyY2hpdmUtPnJhd0RhdGFSZXByZXNlbnRhdGlvbigpOwotICAgICpkYXRhID0g
YmFzZTY0RW5jb2RlKENGRGF0YUdldEJ5dGVQdHIoYnVmZmVyLmdldCgpKSwgQ0ZEYXRhR2V0TGVu
Z3RoKGJ1ZmZlci5nZXQoKSkpOworICAgIHJldHVybiBiYXNlNjRFbmNvZGUoQ0ZEYXRhR2V0Qnl0
ZVB0cihidWZmZXIuZ2V0KCkpLCBDRkRhdGFHZXRMZW5ndGgoYnVmZmVyLmdldCgpKSk7CiB9CiAj
ZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNw
ZWN0b3JQYWdlQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVj
dG9yUGFnZUFnZW50LmgKaW5kZXggM2JjZDA0ODdjZmM4NzY2YmFhMDFjNzgwNDE3M2ExNTc0N2I0
N2IyZC4uZDJiMDY1ZTEzNjUxZmFmZTc0NzMyNWYwMmU3NzAxZmJmMWU4ZTQ1ZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JQYWdlQWdlbnQuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclBhZ2VBZ2VudC5o
CkBAIC01MSwxNCArNTEsMTIgQEAgY2xhc3MgUGFnZTsKIGNsYXNzIFJlbmRlck9iamVjdDsKIGNs
YXNzIFNoYXJlZEJ1ZmZlcjsKIAotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7Ci0KIGNsYXNz
IEluc3BlY3RvclBhZ2VBZ2VudCBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3JBZ2VudEJhc2UsIHB1
YmxpYyBJbnNwZWN0b3I6OlBhZ2VCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewogICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKEluc3BlY3RvclBhZ2VBZ2VudCk7CiAgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgSW5zcGVjdG9yUGFnZUFnZW50KFBhZ2VBZ2VudENvbnRl
eHQmLCBJbnNwZWN0b3JDbGllbnQqLCBJbnNwZWN0b3JPdmVybGF5Kik7Ci0gICAgfkluc3BlY3Rv
clBhZ2VBZ2VudCgpIG92ZXJyaWRlOworICAgIH5JbnNwZWN0b3JQYWdlQWdlbnQoKTsKIAogICAg
IGVudW0gUmVzb3VyY2VUeXBlIHsKICAgICAgICAgRG9jdW1lbnRSZXNvdXJjZSwKQEAgLTc5LDcg
Kzc3LDcgQEAgcHVibGljOgogCiAgICAgc3RhdGljIGJvb2wgc2hhcmVkQnVmZmVyQ29udGVudChS
ZWZQdHI8U2hhcmVkQnVmZmVyPiYmLCBjb25zdCBTdHJpbmcmIHRleHRFbmNvZGluZ05hbWUsIGJv
b2wgd2l0aEJhc2U2NEVuY29kZSwgU3RyaW5nKiByZXN1bHQpOwogICAgIHN0YXRpYyBWZWN0b3I8
Q2FjaGVkUmVzb3VyY2UqPiBjYWNoZWRSZXNvdXJjZXNGb3JGcmFtZShGcmFtZSopOwotICAgIHN0
YXRpYyB2b2lkIHJlc291cmNlQ29udGVudChFcnJvclN0cmluZyYsIEZyYW1lKiwgY29uc3QgVVJM
JiwgU3RyaW5nKiByZXN1bHQsIGJvb2wqIGJhc2U2NEVuY29kZWQpOworICAgIHN0YXRpYyB2b2lk
IHJlc291cmNlQ29udGVudChJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZyYsIEZyYW1l
KiwgY29uc3QgVVJMJiwgU3RyaW5nKiByZXN1bHQsIGJvb2wqIGJhc2U2NEVuY29kZWQpOwogICAg
IHN0YXRpYyBTdHJpbmcgc291cmNlTWFwVVJMRm9yUmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2UqKTsK
ICAgICBzdGF0aWMgQ2FjaGVkUmVzb3VyY2UqIGNhY2hlZFJlc291cmNlKEZyYW1lKiwgY29uc3Qg
VVJMJik7CiAgICAgc3RhdGljIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OlJlc291cmNlVHlw
ZSByZXNvdXJjZVR5cGVKU09OKFJlc291cmNlVHlwZSk7CkBAIC04NywzOSArODUsMzkgQEAgcHVi
bGljOgogICAgIHN0YXRpYyBSZXNvdXJjZVR5cGUgaW5zcGVjdG9yUmVzb3VyY2VUeXBlKGNvbnN0
IENhY2hlZFJlc291cmNlJik7CiAgICAgc3RhdGljIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6
OlJlc291cmNlVHlwZSBjYWNoZWRSZXNvdXJjZVR5cGVKU09OKGNvbnN0IENhY2hlZFJlc291cmNl
Jik7CiAgICAgc3RhdGljIEZyYW1lKiBmaW5kRnJhbWVXaXRoU2VjdXJpdHlPcmlnaW4oUGFnZSYs
IGNvbnN0IFN0cmluZyYgb3JpZ2luUmF3U3RyaW5nKTsKLSAgICBzdGF0aWMgRG9jdW1lbnRMb2Fk
ZXIqIGFzc2VydERvY3VtZW50TG9hZGVyKEVycm9yU3RyaW5nJiwgRnJhbWUqKTsKKyAgICBzdGF0
aWMgRG9jdW1lbnRMb2FkZXIqIGFzc2VydERvY3VtZW50TG9hZGVyKEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkVycm9yU3RyaW5nJiwgRnJhbWUqKTsKIAogICAgIC8vIEluc3BlY3RvckFnZW50QmFzZQot
ICAgIHZvaWQgZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRS
b3V0ZXIqLCBJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyKikgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCB3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFz
b24pIG92ZXJyaWRlOworICAgIHZvaWQgZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEluc3Bl
Y3Rvcjo6RnJvbnRlbmRSb3V0ZXIqLCBJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyKik7Cisg
ICAgdm9pZCB3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5l
Y3RSZWFzb24pOwogCiAgICAgLy8gUGFnZUJhY2tlbmREaXNwYXRjaGVySGFuZGxlcgotICAgIHZv
aWQgZW5hYmxlKEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkaXNhYmxlKEVycm9y
U3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZWxvYWQoRXJyb3JTdHJpbmcmLCBjb25zdCBi
b29sKiBvcHRpb25hbFJlbG9hZEZyb21PcmlnaW4sIGNvbnN0IGJvb2wqIG9wdGlvbmFsUmV2YWxp
ZGF0ZUFsbFJlc291cmNlcykgb3ZlcnJpZGU7Ci0gICAgdm9pZCBuYXZpZ2F0ZShFcnJvclN0cmlu
ZyYsIGNvbnN0IFN0cmluZyYgdXJsKSBvdmVycmlkZTsKLSAgICB2b2lkIG92ZXJyaWRlVXNlckFn
ZW50KEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nKiB2YWx1ZSkgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBvdmVycmlkZVNldHRpbmcoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHNldHRpbmcsIGNv
bnN0IGJvb2wqIHZhbHVlKSBvdmVycmlkZTsKLSAgICB2b2lkIGdldENvb2tpZXMoRXJyb3JTdHJp
bmcmLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpDb29r
aWU+PiYgY29va2llcykgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRDb29raWUoRXJyb3JTdHJpbmcm
LCBjb25zdCBKU09OOjpPYmplY3QmIGNvb2tpZU9iamVjdCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBk
ZWxldGVDb29raWUoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGNvb2tpZU5hbWUsIGNvbnN0
IFN0cmluZyYgdXJsKSBvdmVycmlkZTsKLSAgICB2b2lkIGdldFJlc291cmNlVHJlZShFcnJvclN0
cmluZyYsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpGcmFtZVJlc291cmNlVHJl
ZT4mKSBvdmVycmlkZTsKLSAgICB2b2lkIGdldFJlc291cmNlQ29udGVudChFcnJvclN0cmluZyYs
IGNvbnN0IFN0cmluZyYgZnJhbWVJZCwgY29uc3QgU3RyaW5nJiB1cmwsIFN0cmluZyogY29udGVu
dCwgYm9vbCogYmFzZTY0RW5jb2RlZCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRCb290c3RyYXBT
Y3JpcHQoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsU291cmNlKSBmaW5hbDsK
LSAgICB2b2lkIHNlYXJjaEluUmVzb3VyY2UoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGZy
YW1lSWQsIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIHF1ZXJ5LCBjb25zdCBib29s
KiBvcHRpb25hbENhc2VTZW5zaXRpdmUsIGNvbnN0IGJvb2wqIG9wdGlvbmFsSXNSZWdleCwgY29u
c3QgU3RyaW5nKiBvcHRpb25hbFJlcXVlc3RJZCwgUmVmUHRyPEpTT046OkFycmF5T2Y8SW5zcGVj
dG9yOjpQcm90b2NvbDo6R2VuZXJpY1R5cGVzOjpTZWFyY2hNYXRjaD4+Jikgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCBzZWFyY2hJblJlc291cmNlcyhFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYsIGNv
bnN0IGJvb2wqIGNhc2VTZW5zaXRpdmUsIGNvbnN0IGJvb2wqIGlzUmVnZXgsIFJlZlB0cjxKU09O
OjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OlNlYXJjaFJlc3VsdD4+Jikgb3Zl
cnJpZGU7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBlbmFi
bGUoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGRpc2Fi
bGUoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHJlbG9h
ZChPcHRpb25hbDxib29sPiYmIGlnbm9yZUNhY2hlLCBPcHRpb25hbDxib29sPiYmIHJldmFsaWRh
dGVBbGxSZXNvdXJjZXMpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8
dm9pZD4gbmF2aWdhdGUoY29uc3QgU3RyaW5nJiB1cmwpOworICAgIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gb3ZlcnJpZGVVc2VyQWdlbnQoY29uc3QgU3RyaW5nJik7
CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBvdmVycmlkZVNl
dHRpbmcoSW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6U2V0dGluZywgT3B0aW9uYWw8Ym9vbD4m
JiB2YWx1ZSk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SlNP
Tjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpQYWdlOjpDb29raWU+Pj4gZ2V0Q29va2ll
cygpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc2V0Q29v
a2llKFJlZjxKU09OOjpPYmplY3Q+JiYpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8dm9pZD4gZGVsZXRlQ29va2llKGNvbnN0IFN0cmluZyYgY29va2llTmFtZSwgY29u
c3QgU3RyaW5nJiB1cmwpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8
UmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkZyYW1lUmVzb3VyY2VUcmVlPj4gZ2V0UmVz
b3VyY2VUcmVlKCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxzdGQ6
OnR1cGxlPFN0cmluZywgYm9vbCAvKiBiYXNlNjRFbmNvZGVkICovPj4gZ2V0UmVzb3VyY2VDb250
ZW50KGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OkZyYW1lSWQmLCBjb25zdCBT
dHJpbmcmIHVybCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lk
PiBzZXRCb290c3RyYXBTY3JpcHQoY29uc3QgU3RyaW5nJiBzb3VyY2UpOworICAgIEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8UmVmPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQ
cm90b2NvbDo6R2VuZXJpY1R5cGVzOjpTZWFyY2hNYXRjaD4+PiBzZWFyY2hJblJlc291cmNlKGNv
bnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OkZyYW1lSWQmLCBjb25zdCBTdHJpbmcm
IHVybCwgY29uc3QgU3RyaW5nJiBxdWVyeSwgT3B0aW9uYWw8Ym9vbD4mJiBjYXNlU2Vuc2l0aXZl
LCBPcHRpb25hbDxib29sPiYmIGlzUmVnZXgsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5l
dHdvcms6OlJlcXVlc3RJZCYpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5n
T3I8UmVmPEpTT046OkFycmF5T2Y8SW5zcGVjdG9yOjpQcm90b2NvbDo6UGFnZTo6U2VhcmNoUmVz
dWx0Pj4+IHNlYXJjaEluUmVzb3VyY2VzKGNvbnN0IFN0cmluZyYsIE9wdGlvbmFsPGJvb2w+JiYg
Y2FzZVNlbnNpdGl2ZSwgT3B0aW9uYWw8Ym9vbD4mJiBpc1JlZ2V4KTsKICNpZiAhUExBVEZPUk0o
SU9TX0ZBTUlMWSkKLSAgICB2b2lkIHNldFNob3dSdWxlcnMoRXJyb3JTdHJpbmcmLCBib29sKSBv
dmVycmlkZTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHNl
dFNob3dSdWxlcnMoYm9vbCk7CiAjZW5kaWYKLSAgICB2b2lkIHNldFNob3dQYWludFJlY3RzKEVy
cm9yU3RyaW5nJiwgYm9vbCBzaG93KSBvdmVycmlkZTsKLSAgICB2b2lkIHNldEVtdWxhdGVkTWVk
aWEoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmKSBvdmVycmlkZTsKKyAgICBJbnNwZWN0b3I6
OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IHNldFNob3dQYWludFJlY3RzKGJvb2wpOwor
ICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc2V0RW11bGF0ZWRN
ZWRpYShjb25zdCBTdHJpbmcmKTsKICNpZiBFTkFCTEUoREFSS19NT0RFX0NTUykgfHwgSEFWRShP
U19EQVJLX01PREVfU1VQUE9SVCkKLSAgICB2b2lkIHNldEZvcmNlZEFwcGVhcmFuY2UoRXJyb3JT
dHJpbmcmLCBjb25zdCBTdHJpbmcmKSBvdmVycmlkZTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29s
OjpFcnJvclN0cmluZ09yPHZvaWQ+IHNldEZvcmNlZEFwcGVhcmFuY2UoT3B0aW9uYWw8SW5zcGVj
dG9yOjpQcm90b2NvbDo6UGFnZTo6QXBwZWFyYW5jZT4mJik7CiAjZW5kaWYKLSAgICB2b2lkIHNu
YXBzaG90Tm9kZShFcnJvclN0cmluZyYsIGludCBub2RlSWQsIFN0cmluZyogb3V0RGF0YVVSTCkg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBzbmFwc2hvdFJlY3QoRXJyb3JTdHJpbmcmLCBpbnQgeCwgaW50
IHksIGludCB3aWR0aCwgaW50IGhlaWdodCwgY29uc3QgU3RyaW5nJiBjb29yZGluYXRlU3lzdGVt
LCBTdHJpbmcqIG91dERhdGFVUkwpIG92ZXJyaWRlOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8U3RyaW5nPiBzbmFwc2hvdE5vZGUoSW5zcGVjdG9yOjpQcm90b2NvbDo6
RE9NOjpOb2RlSWQpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8U3Ry
aW5nPiBzbmFwc2hvdFJlY3QoaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIElu
c3BlY3Rvcjo6UHJvdG9jb2w6OlBhZ2U6OkNvb3JkaW5hdGVTeXN0ZW0pOwogI2lmIEVOQUJMRShX
RUJfQVJDSElWRSkgJiYgVVNFKENGKQotICAgIHZvaWQgYXJjaGl2ZShFcnJvclN0cmluZyYsIFN0
cmluZyogZGF0YSkgb3ZlcnJpZGU7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJp
bmdPcjxTdHJpbmc+IGFyY2hpdmUoKTsKICNlbmRpZgogCiAgICAgLy8gSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uCkBAIC0xNDMsMTAgKzE0MSwxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBkaWRTY3Jv
bGwoKTsKICAgICB2b2lkIGRpZFJlY2FsY3VsYXRlU3R5bGUoKTsKIAotICAgIEZyYW1lKiBmcmFt
ZUZvcklkKGNvbnN0IFN0cmluZyYgZnJhbWVJZCk7CisgICAgRnJhbWUqIGZyYW1lRm9ySWQoY29u
c3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6RnJhbWVJZCYpOwogICAgIFdFQkNPUkVf
RVhQT1JUIFN0cmluZyBmcmFtZUlkKEZyYW1lKik7CiAgICAgU3RyaW5nIGxvYWRlcklkKERvY3Vt
ZW50TG9hZGVyKik7Ci0gICAgRnJhbWUqIGFzc2VydEZyYW1lKEVycm9yU3RyaW5nJiwgY29uc3Qg
U3RyaW5nJiBmcmFtZUlkKTsKKyAgICBGcmFtZSogYXNzZXJ0RnJhbWUoSW5zcGVjdG9yOjpQcm90
b2NvbDo6RXJyb3JTdHJpbmcmLCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpG
cmFtZUlkJik7CiAKIHByaXZhdGU6CiAgICAgZG91YmxlIHRpbWVzdGFtcCgpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JUaW1lbGluZUFnZW50
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yVGltZWxpbmVB
Z2VudC5jcHAKaW5kZXggMGI0NjYwNjhkOTBmZTE0OTVhODQyOWI3NjM5ZjMxMzViZDQzM2Y0OC4u
MGRmOTUwNTcwM2QwYjM4MTgxMTI1ZTUzMDFlMjA0MTEyN2ZjM2I1NSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JUaW1lbGluZUFnZW50LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3BlY3RvclRpbWVsaW5lQWdl
bnQuY3BwCkBAIC0xMDIsODAgKzEwMiw4MiBAQCB2b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6
OmRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kUm91dAogCiB2
b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OndpbGxEZXN0cm95RnJvbnRlbmRBbmRCYWNrZW5k
KEluc3BlY3Rvcjo6RGlzY29ubmVjdFJlYXNvbikKIHsKLSAgICBFcnJvclN0cmluZyBpZ25vcmVk
OwotICAgIGRpc2FibGUoaWdub3JlZCk7CisgICAgZGlzYWJsZSgpOwogfQogCi12b2lkIEluc3Bl
Y3RvclRpbWVsaW5lQWdlbnQ6OmVuYWJsZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCitQcm90
b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjplbmFibGUo
KQogewotICAgIGlmIChtX2luc3RydW1lbnRpbmdBZ2VudHMuZW5hYmxlZFRpbWVsaW5lQWdlbnQo
KSA9PSB0aGlzKSB7Ci0gICAgICAgIGVycm9yU3RyaW5nID0gIlRpbWVsaW5lIGRvbWFpbiBhbHJl
YWR5IGVuYWJsZWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKG1faW5zdHJ1
bWVudGluZ0FnZW50cy5lbmFibGVkVGltZWxpbmVBZ2VudCgpID09IHRoaXMpCisgICAgICAgIHJl
dHVybiBtYWtlVW5leHBlY3RlZCgiVGltZWxpbmUgZG9tYWluIGFscmVhZHkgZW5hYmxlZCJfcyk7
CiAKICAgICBtX2luc3RydW1lbnRpbmdBZ2VudHMuc2V0RW5hYmxlZFRpbWVsaW5lQWdlbnQodGhp
cyk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6
OmRpc2FibGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nKQorUHJvdG9jb2w6OkVycm9yU3RyaW5n
T3I8dm9pZD4gSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6ZGlzYWJsZSgpCiB7Ci0gICAgaWYgKG1f
aW5zdHJ1bWVudGluZ0FnZW50cy5lbmFibGVkVGltZWxpbmVBZ2VudCgpICE9IHRoaXMpIHsKLSAg
ICAgICAgZXJyb3JTdHJpbmcgPSAiVGltZWxpbmUgZG9tYWluIGFscmVhZHkgZGlzYWJsZWQiX3M7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKG1faW5zdHJ1bWVudGluZ0FnZW50cy5l
bmFibGVkVGltZWxpbmVBZ2VudCgpICE9IHRoaXMpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBl
Y3RlZCgiVGltZWxpbmUgZG9tYWluIGFscmVhZHkgZGlzYWJsZWQiX3MpOwogCiAgICAgbV9pbnN0
cnVtZW50aW5nQWdlbnRzLnNldEVuYWJsZWRUaW1lbGluZUFnZW50KG51bGxwdHIpOwogCi0gICAg
RXJyb3JTdHJpbmcgaWdub3JlZDsKLSAgICBzdG9wKGlnbm9yZWQpOworICAgIHN0b3AoKTsKIAog
ICAgIG1fYXV0b0NhcHR1cmVFbmFibGVkID0gZmFsc2U7CiAgICAgbV9pbnN0cnVtZW50cy5jbGVh
cigpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50
OjpzdGFydChFcnJvclN0cmluZyYsIGNvbnN0IGludCogbWF4Q2FsbFN0YWNrRGVwdGgpCitQcm90
b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpzdGFydChP
cHRpb25hbDxpbnQ+JiYgbWF4Q2FsbFN0YWNrRGVwdGgpCiB7CiAgICAgbV90cmFja2luZ0Zyb21G
cm9udGVuZCA9IHRydWU7CiAKLSAgICBpbnRlcm5hbFN0YXJ0KG1heENhbGxTdGFja0RlcHRoKTsK
KyAgICBpbnRlcm5hbFN0YXJ0KFdURk1vdmUobWF4Q2FsbFN0YWNrRGVwdGgpKTsKKworICAgIHJl
dHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6c3RvcChFcnJvclN0
cmluZyYpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBJbnNwZWN0b3JUaW1lbGluZUFn
ZW50OjpzdG9wKCkKIHsKICAgICBpbnRlcm5hbFN0b3AoKTsKIAogICAgIG1fdHJhY2tpbmdGcm9t
RnJvbnRlbmQgPSBmYWxzZTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9y
VGltZWxpbmVBZ2VudDo6c2V0QXV0b0NhcHR1cmVFbmFibGVkKEVycm9yU3RyaW5nJiwgYm9vbCBl
bmFibGVkKQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yVGltZWxpbmVB
Z2VudDo6c2V0QXV0b0NhcHR1cmVFbmFibGVkKGJvb2wgZW5hYmxlZCkKIHsKICAgICBtX2F1dG9D
YXB0dXJlRW5hYmxlZCA9IGVuYWJsZWQ7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lkIElu
c3BlY3RvclRpbWVsaW5lQWdlbnQ6OnNldEluc3RydW1lbnRzKEVycm9yU3RyaW5nJiBlcnJvclN0
cmluZywgY29uc3QgSlNPTjo6QXJyYXkmIGluc3RydW1lbnRzKQorUHJvdG9jb2w6OkVycm9yU3Ry
aW5nT3I8dm9pZD4gSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6c2V0SW5zdHJ1bWVudHMoUmVmPEpT
T046OkFycmF5PiYmIGluc3RydW1lbnRzKQogewogICAgIFZlY3RvcjxQcm90b2NvbDo6VGltZWxp
bmU6Okluc3RydW1lbnQ+IG5ld0luc3RydW1lbnRzOwotICAgIG5ld0luc3RydW1lbnRzLnJlc2Vy
dmVDYXBhY2l0eShpbnN0cnVtZW50cy5sZW5ndGgoKSk7CisgICAgbmV3SW5zdHJ1bWVudHMucmVz
ZXJ2ZUNhcGFjaXR5KGluc3RydW1lbnRzLT5sZW5ndGgoKSk7CiAKLSAgICBmb3IgKGNvbnN0IGF1
dG8mIGluc3RydW1lbnRWYWx1ZSA6IGluc3RydW1lbnRzKSB7Ci0gICAgICAgIFN0cmluZyBlbnVt
VmFsdWVTdHJpbmc7Ci0gICAgICAgIGlmICghaW5zdHJ1bWVudFZhbHVlLT5hc1N0cmluZyhlbnVt
VmFsdWVTdHJpbmcpKSB7Ci0gICAgICAgICAgICBlcnJvclN0cmluZyA9ICJVbmV4cGVjdGVkIG5v
bi1zdHJpbmcgdmFsdWUgaW4gZ2l2ZW4gaW5zdHJ1bWVudHMiX3M7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KKyAgICBmb3IgKGNvbnN0IGF1dG8mIGluc3RydW1lbnRWYWx1ZSA6IGlu
c3RydW1lbnRzLmdldCgpKSB7CisgICAgICAgIGF1dG8gaW5zdHJ1bWVudFN0cmluZyA9IGluc3Ry
dW1lbnRWYWx1ZS0+YXNTdHJpbmcoKTsKKyAgICAgICAgaWYgKCFpbnN0cnVtZW50U3RyaW5nKQor
ICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJVbmV4cGVjdGVkIG5vbi1zdHJpbmcg
dmFsdWUgaW4gZ2l2ZW4gaW5zdHJ1bWVudHMiX3MpOwogCi0gICAgICAgIE9wdGlvbmFsPFByb3Rv
Y29sOjpUaW1lbGluZTo6SW5zdHJ1bWVudD4gaW5zdHJ1bWVudFR5cGUgPSBQcm90b2NvbDo6SW5z
cGVjdG9ySGVscGVyczo6cGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPFByb3RvY29sOjpUaW1lbGlu
ZTo6SW5zdHJ1bWVudD4oZW51bVZhbHVlU3RyaW5nKTsKLSAgICAgICAgaWYgKCFpbnN0cnVtZW50
VHlwZSkgewotICAgICAgICAgICAgZXJyb3JTdHJpbmcgPSBtYWtlU3RyaW5nKCJVbmtub3duIGl0
ZW0gaW4gZ2l2ZW4gaW5zdHJ1bWVudHM6ICIsIGVudW1WYWx1ZVN0cmluZyk7Ci0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIH0KKyAgICAgICAgYXV0byBpbnN0cnVtZW50ID0gUHJvdG9jb2w6
OkhlbHBlcnM6OnBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxQcm90b2NvbDo6VGltZWxpbmU6Oklu
c3RydW1lbnQ+KGluc3RydW1lbnRTdHJpbmcpOworICAgICAgICBpZiAoIWluc3RydW1lbnQpCisg
ICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQobWFrZVN0cmluZygiVW5rbm93biBpbnN0
cnVtZW50OiAiLCBpbnN0cnVtZW50U3RyaW5nKSk7CiAKLSAgICAgICAgbmV3SW5zdHJ1bWVudHMu
dW5jaGVja2VkQXBwZW5kKCppbnN0cnVtZW50VHlwZSk7CisgICAgICAgIG5ld0luc3RydW1lbnRz
LnVuY2hlY2tlZEFwcGVuZCgqaW5zdHJ1bWVudCk7CiAgICAgfQogCiAgICAgbV9pbnN0cnVtZW50
cy5zd2FwKG5ld0luc3RydW1lbnRzKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5z
cGVjdG9yVGltZWxpbmVBZ2VudDo6aW50ZXJuYWxTdGFydChjb25zdCBpbnQqIG1heENhbGxTdGFj
a0RlcHRoKQordm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjppbnRlcm5hbFN0YXJ0KE9wdGlv
bmFsPGludD4mJiBtYXhDYWxsU3RhY2tEZXB0aCkKIHsKICAgICBpZiAobV90cmFja2luZykKICAg
ICAgICAgcmV0dXJuOwpAQCAtMjkyLDggKzI5NCw3IEBAIHZvaWQgSW5zcGVjdG9yVGltZWxpbmVB
Z2VudDo6c3RhcnRGcm9tQ29uc29sZShKU0M6OkpTR2xvYmFsT2JqZWN0KiBleGVjLCBjb25zdCBT
CiAgICAgLy8gQWxsb3cgZHVwbGljYXRlIHVubmFtZWQgcHJvZmlsZXMuIERpc2FsbG93IGR1cGxp
Y2F0ZSBuYW1lZCBwcm9maWxlcy4KICAgICBpZiAoIXRpdGxlLmlzRW1wdHkoKSkgewogICAgICAg
ICBmb3IgKGNvbnN0IFRpbWVsaW5lUmVjb3JkRW50cnkmIHJlY29yZCA6IG1fcGVuZGluZ0NvbnNv
bGVQcm9maWxlUmVjb3JkcykgewotICAgICAgICAgICAgU3RyaW5nIHJlY29yZFRpdGxlOwotICAg
ICAgICAgICAgcmVjb3JkLmRhdGEtPmdldFN0cmluZygidGl0bGUiX3MsIHJlY29yZFRpdGxlKTsK
KyAgICAgICAgICAgIGF1dG8gcmVjb3JkVGl0bGUgPSByZWNvcmQuZGF0YS0+Z2V0U3RyaW5nKCJ0
aXRsZSJfcyk7CiAgICAgICAgICAgICBpZiAocmVjb3JkVGl0bGUgPT0gdGl0bGUpIHsKICAgICAg
ICAgICAgICAgICBpZiAoYXV0byogY29uc29sZUFnZW50ID0gbV9pbnN0cnVtZW50aW5nQWdlbnRz
LndlYkNvbnNvbGVBZ2VudCgpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBTZW5k
IGFuIGVudW0gdG8gdGhlIGZyb250ZW5kIGZvciBsb2NhbGl6YXRpb24/CkBAIC0zMTgsOCArMzE5
LDcgQEAgdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpzdG9wRnJvbUNvbnNvbGUoSlNDOjpK
U0dsb2JhbE9iamVjdCosIGNvbnN0IFN0cmluZyYKICAgICBmb3IgKGludCBpID0gbV9wZW5kaW5n
Q29uc29sZVByb2ZpbGVSZWNvcmRzLnNpemUoKSAtIDE7IGkgPj0gMDsgLS1pKSB7CiAgICAgICAg
IGNvbnN0IFRpbWVsaW5lUmVjb3JkRW50cnkmIHJlY29yZCA9IG1fcGVuZGluZ0NvbnNvbGVQcm9m
aWxlUmVjb3Jkc1tpXTsKIAotICAgICAgICBTdHJpbmcgcmVjb3JkVGl0bGU7Ci0gICAgICAgIHJl
Y29yZC5kYXRhLT5nZXRTdHJpbmcoInRpdGxlIl9zLCByZWNvcmRUaXRsZSk7CisgICAgICAgIGF1
dG8gcmVjb3JkVGl0bGUgPSByZWNvcmQuZGF0YS0+Z2V0U3RyaW5nKCJ0aXRsZSJfcyk7CiAgICAg
ICAgIGlmICh0aXRsZS5pc0VtcHR5KCkgfHwgcmVjb3JkVGl0bGUgPT0gdGl0bGUpIHsKICAgICAg
ICAgICAgIGRpZENvbXBsZXRlUmVjb3JkRW50cnkocmVjb3JkKTsKICAgICAgICAgICAgIG1fcGVu
ZGluZ0NvbnNvbGVQcm9maWxlUmVjb3Jkcy5yZW1vdmUoaSk7CkBAIC00OTYsMTAgKzQ5Niw4IEBA
IHZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6bWFpbkZyYW1lU3RhcnRlZExvYWRpbmcoKQog
ICAgIG1fYXV0b0NhcHR1cmVQaGFzZSA9IEF1dG9DYXB0dXJlUGhhc2U6OkJlZm9yZUxvYWQ7CiAK
ICAgICAvLyBQcmUtZW1wdGl2ZWx5IGRpc2FibGUgYnJlYWtwb2ludHMuIFRoZSBmcm9udGVuZCBt
dXN0IHJlLWVuYWJsZSB0aGVtLgotICAgIGlmIChhdXRvKiB3ZWJEZWJ1Z2dlckFnZW50ID0gbV9p
bnN0cnVtZW50aW5nQWdlbnRzLmVuYWJsZWRXZWJEZWJ1Z2dlckFnZW50KCkpIHsKLSAgICAgICAg
RXJyb3JTdHJpbmcgaWdub3JlZDsKLSAgICAgICAgd2ViRGVidWdnZXJBZ2VudC0+c2V0QnJlYWtw
b2ludHNBY3RpdmUoaWdub3JlZCwgZmFsc2UpOwotICAgIH0KKyAgICBpZiAoYXV0byogd2ViRGVi
dWdnZXJBZ2VudCA9IG1faW5zdHJ1bWVudGluZ0FnZW50cy5lbmFibGVkV2ViRGVidWdnZXJBZ2Vu
dCgpKQorICAgICAgICB3ZWJEZWJ1Z2dlckFnZW50LT5zZXRCcmVha3BvaW50c0FjdGl2ZShmYWxz
ZSk7CiAKICAgICAvLyBJbmZvcm0gdGhlIGZyb250ZW5kIHdlIHN0YXJ0ZWQgYW4gYXV0byBjYXB0
dXJlLiBUaGUgZnJvbnRlbmQgbXVzdCBzdG9wIGNhcHR1cmUuCiAgICAgbV9mcm9udGVuZERpc3Bh
dGNoZXItPmF1dG9DYXB0dXJlU3RhcnRlZCgpOwpAQCAtNTIzLDEwICs1MjEsOCBAQCB2b2lkIElu
c3BlY3RvclRpbWVsaW5lQWdlbnQ6OnN0YXJ0UHJvZ3JhbW1hdGljQ2FwdHVyZSgpCiAgICAgLy8g
RGlzYWJsZSBicmVha3BvaW50cyBkdXJpbmcgcHJvZ3JhbW1hdGljIGNhcHR1cmUuCiAgICAgaWYg
KGF1dG8qIHdlYkRlYnVnZ2VyQWdlbnQgPSBtX2luc3RydW1lbnRpbmdBZ2VudHMuZW5hYmxlZFdl
YkRlYnVnZ2VyQWdlbnQoKSkgewogICAgICAgICBtX3Byb2dyYW1tYXRpY0NhcHR1cmVSZXN0b3Jl
QnJlYWtwb2ludEFjdGl2ZVZhbHVlID0gd2ViRGVidWdnZXJBZ2VudC0+YnJlYWtwb2ludHNBY3Rp
dmUoKTsKLSAgICAgICAgaWYgKG1fcHJvZ3JhbW1hdGljQ2FwdHVyZVJlc3RvcmVCcmVha3BvaW50
QWN0aXZlVmFsdWUpIHsKLSAgICAgICAgICAgIEVycm9yU3RyaW5nIGlnbm9yZWQ7Ci0gICAgICAg
ICAgICB3ZWJEZWJ1Z2dlckFnZW50LT5zZXRCcmVha3BvaW50c0FjdGl2ZShpZ25vcmVkLCBmYWxz
ZSk7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKG1fcHJvZ3JhbW1hdGljQ2FwdHVyZVJlc3RvcmVC
cmVha3BvaW50QWN0aXZlVmFsdWUpCisgICAgICAgICAgICB3ZWJEZWJ1Z2dlckFnZW50LT5zZXRC
cmVha3BvaW50c0FjdGl2ZShmYWxzZSk7CiAgICAgfSBlbHNlCiAgICAgICAgIG1fcHJvZ3JhbW1h
dGljQ2FwdHVyZVJlc3RvcmVCcmVha3BvaW50QWN0aXZlVmFsdWUgPSBmYWxzZTsKIApAQCAtNTQ2
LDEwICs1NDIsOCBAQCB2b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OnN0b3BQcm9ncmFtbWF0
aWNDYXB0dXJlKCkKIAogICAgIC8vIFJlLWVuYWJsZSBicmVha3BvaW50cyBpZiB0aGV5IHdlcmUg
ZW5hYmxlZC4KICAgICBpZiAobV9wcm9ncmFtbWF0aWNDYXB0dXJlUmVzdG9yZUJyZWFrcG9pbnRB
Y3RpdmVWYWx1ZSkgewotICAgICAgICBpZiAoYXV0byogd2ViRGVidWdnZXJBZ2VudCA9IG1faW5z
dHJ1bWVudGluZ0FnZW50cy5lbmFibGVkV2ViRGVidWdnZXJBZ2VudCgpKSB7Ci0gICAgICAgICAg
ICBFcnJvclN0cmluZyBpZ25vcmVkOwotICAgICAgICAgICAgd2ViRGVidWdnZXJBZ2VudC0+c2V0
QnJlYWtwb2ludHNBY3RpdmUoaWdub3JlZCwgdHJ1ZSk7Ci0gICAgICAgIH0KKyAgICAgICAgaWYg
KGF1dG8qIHdlYkRlYnVnZ2VyQWdlbnQgPSBtX2luc3RydW1lbnRpbmdBZ2VudHMuZW5hYmxlZFdl
YkRlYnVnZ2VyQWdlbnQoKSkKKyAgICAgICAgICAgIHdlYkRlYnVnZ2VyQWdlbnQtPnNldEJyZWFr
cG9pbnRzQWN0aXZlKHRydWUpOwogICAgIH0KIH0KIApAQCAtNTU3LDI2ICs1NTEsMjYgQEAgdm9p
ZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50Ojp0b2dnbGVJbnN0cnVtZW50cyhJbnN0cnVtZW50U3Rh
dGUgc3RhdGUpCiB7CiAgICAgZm9yIChhdXRvIGluc3RydW1lbnRUeXBlIDogbV9pbnN0cnVtZW50
cykgewogICAgICAgICBzd2l0Y2ggKGluc3RydW1lbnRUeXBlKSB7Ci0gICAgICAgIGNhc2UgSW5z
cGVjdG9yOjpQcm90b2NvbDo6VGltZWxpbmU6Okluc3RydW1lbnQ6OlNjcmlwdFByb2ZpbGVyOiB7
CisgICAgICAgIGNhc2UgUHJvdG9jb2w6OlRpbWVsaW5lOjpJbnN0cnVtZW50OjpTY3JpcHRQcm9m
aWxlcjogewogICAgICAgICAgICAgdG9nZ2xlU2NyaXB0UHJvZmlsZXJJbnN0cnVtZW50KHN0YXRl
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGNhc2UgSW5zcGVjdG9y
OjpQcm90b2NvbDo6VGltZWxpbmU6Okluc3RydW1lbnQ6OkhlYXA6IHsKKyAgICAgICAgY2FzZSBQ
cm90b2NvbDo6VGltZWxpbmU6Okluc3RydW1lbnQ6OkhlYXA6IHsKICAgICAgICAgICAgIHRvZ2ds
ZUhlYXBJbnN0cnVtZW50KHN0YXRlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0g
ICAgICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6VGltZWxpbmU6Okluc3RydW1lbnQ6OkNQ
VTogeworICAgICAgICBjYXNlIFByb3RvY29sOjpUaW1lbGluZTo6SW5zdHJ1bWVudDo6Q1BVOiB7
CiAgICAgICAgICAgICB0b2dnbGVDUFVJbnN0cnVtZW50KHN0YXRlKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9Ci0gICAgICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6VGltZWxp
bmU6Okluc3RydW1lbnQ6Ok1lbW9yeTogeworICAgICAgICBjYXNlIFByb3RvY29sOjpUaW1lbGlu
ZTo6SW5zdHJ1bWVudDo6TWVtb3J5OiB7CiAgICAgICAgICAgICB0b2dnbGVNZW1vcnlJbnN0cnVt
ZW50KHN0YXRlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGNhc2Ug
SW5zcGVjdG9yOjpQcm90b2NvbDo6VGltZWxpbmU6Okluc3RydW1lbnQ6OlRpbWVsaW5lOgorICAg
ICAgICBjYXNlIFByb3RvY29sOjpUaW1lbGluZTo6SW5zdHJ1bWVudDo6VGltZWxpbmU6CiAgICAg
ICAgICAgICB0b2dnbGVUaW1lbGluZUluc3RydW1lbnQoc3RhdGUpOwogICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgSW5zcGVjdG9yOjpQcm90b2NvbDo6VGltZWxpbmU6Okluc3RydW1l
bnQ6OkFuaW1hdGlvbjoKKyAgICAgICAgY2FzZSBQcm90b2NvbDo6VGltZWxpbmU6Okluc3RydW1l
bnQ6OkFuaW1hdGlvbjoKICAgICAgICAgICAgIHRvZ2dsZUFuaW1hdGlvbkluc3RydW1lbnQoc3Rh
dGUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTU4NiwyNCArNTgwLDIxIEBA
IHZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6dG9nZ2xlSW5zdHJ1bWVudHMoSW5zdHJ1bWVu
dFN0YXRlIHN0YXRlKQogdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50Ojp0b2dnbGVTY3JpcHRQ
cm9maWxlckluc3RydW1lbnQoSW5zdHJ1bWVudFN0YXRlIHN0YXRlKQogewogICAgIGlmIChhdXRv
KiBzY3JpcHRQcm9maWxlckFnZW50ID0gbV9pbnN0cnVtZW50aW5nQWdlbnRzLnBlcnNpc3RlbnRT
Y3JpcHRQcm9maWxlckFnZW50KCkpIHsKLSAgICAgICAgRXJyb3JTdHJpbmcgaWdub3JlZDsKLSAg
ICAgICAgaWYgKHN0YXRlID09IEluc3RydW1lbnRTdGF0ZTo6U3RhcnQpIHsKLSAgICAgICAgICAg
IGNvbnN0IGJvb2wgaW5jbHVkZVNhbXBsZXMgPSB0cnVlOwotICAgICAgICAgICAgc2NyaXB0UHJv
ZmlsZXJBZ2VudC0+c3RhcnRUcmFja2luZyhpZ25vcmVkLCAmaW5jbHVkZVNhbXBsZXMpOwotICAg
ICAgICB9IGVsc2UKLSAgICAgICAgICAgIHNjcmlwdFByb2ZpbGVyQWdlbnQtPnN0b3BUcmFja2lu
ZyhpZ25vcmVkKTsKKyAgICAgICAgaWYgKHN0YXRlID09IEluc3RydW1lbnRTdGF0ZTo6U3RhcnQp
CisgICAgICAgICAgICBzY3JpcHRQcm9maWxlckFnZW50LT5zdGFydFRyYWNraW5nKHRydWUpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBzY3JpcHRQcm9maWxlckFnZW50LT5zdG9wVHJhY2tp
bmcoKTsKICAgICB9CiB9CiAKIHZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6dG9nZ2xlSGVh
cEluc3RydW1lbnQoSW5zdHJ1bWVudFN0YXRlIHN0YXRlKQogewogICAgIGlmIChhdXRvKiBoZWFw
QWdlbnQgPSBtX2luc3RydW1lbnRpbmdBZ2VudHMuZW5hYmxlZFBhZ2VIZWFwQWdlbnQoKSkgewot
ICAgICAgICBFcnJvclN0cmluZyBpZ25vcmVkOwogICAgICAgICBpZiAoc3RhdGUgPT0gSW5zdHJ1
bWVudFN0YXRlOjpTdGFydCkgewogICAgICAgICAgICAgaWYgKG1fYXV0b0NhcHR1cmVQaGFzZSA9
PSBBdXRvQ2FwdHVyZVBoYXNlOjpOb25lIHx8IG1fYXV0b0NhcHR1cmVQaGFzZSA9PSBBdXRvQ2Fw
dHVyZVBoYXNlOjpGaXJzdE5hdmlnYXRpb24pCi0gICAgICAgICAgICAgICAgaGVhcEFnZW50LT5z
dGFydFRyYWNraW5nKGlnbm9yZWQpOworICAgICAgICAgICAgICAgIGhlYXBBZ2VudC0+c3RhcnRU
cmFja2luZygpOwogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGhlYXBBZ2VudC0+c3RvcFRy
YWNraW5nKGlnbm9yZWQpOworICAgICAgICAgICAgaGVhcEFnZW50LT5zdG9wVHJhY2tpbmcoKTsK
ICAgICB9CiB9CiAKQEAgLTYxMSwxMSArNjAyLDEwIEBAIHZvaWQgSW5zcGVjdG9yVGltZWxpbmVB
Z2VudDo6dG9nZ2xlQ1BVSW5zdHJ1bWVudChJbnN0cnVtZW50U3RhdGUgc3RhdGUpCiB7CiAjaWYg
RU5BQkxFKFJFU09VUkNFX1VTQUdFKQogICAgIGlmIChhdXRvKiBjcHVQcm9maWxlckFnZW50ID0g
bV9pbnN0cnVtZW50aW5nQWdlbnRzLnBlcnNpc3RlbnRDUFVQcm9maWxlckFnZW50KCkpIHsKLSAg
ICAgICAgRXJyb3JTdHJpbmcgaWdub3JlZDsKICAgICAgICAgaWYgKHN0YXRlID09IEluc3RydW1l
bnRTdGF0ZTo6U3RhcnQpCi0gICAgICAgICAgICBjcHVQcm9maWxlckFnZW50LT5zdGFydFRyYWNr
aW5nKGlnbm9yZWQpOworICAgICAgICAgICAgY3B1UHJvZmlsZXJBZ2VudC0+c3RhcnRUcmFja2lu
ZygpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBjcHVQcm9maWxlckFnZW50LT5zdG9wVHJh
Y2tpbmcoaWdub3JlZCk7CisgICAgICAgICAgICBjcHVQcm9maWxlckFnZW50LT5zdG9wVHJhY2tp
bmcoKTsKICAgICB9CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CkBAIC02MjYsMTEg
KzYxNiwxMCBAQCB2b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OnRvZ2dsZU1lbW9yeUluc3Ry
dW1lbnQoSW5zdHJ1bWVudFN0YXRlIHN0YXRlKQogewogI2lmIEVOQUJMRShSRVNPVVJDRV9VU0FH
RSkKICAgICBpZiAoYXV0byogbWVtb3J5QWdlbnQgPSBtX2luc3RydW1lbnRpbmdBZ2VudHMucGVy
c2lzdGVudE1lbW9yeUFnZW50KCkpIHsKLSAgICAgICAgRXJyb3JTdHJpbmcgaWdub3JlZDsKICAg
ICAgICAgaWYgKHN0YXRlID09IEluc3RydW1lbnRTdGF0ZTo6U3RhcnQpCi0gICAgICAgICAgICBt
ZW1vcnlBZ2VudC0+c3RhcnRUcmFja2luZyhpZ25vcmVkKTsKKyAgICAgICAgICAgIG1lbW9yeUFn
ZW50LT5zdGFydFRyYWNraW5nKCk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1lbW9yeUFn
ZW50LT5zdG9wVHJhY2tpbmcoaWdub3JlZCk7CisgICAgICAgICAgICBtZW1vcnlBZ2VudC0+c3Rv
cFRyYWNraW5nKCk7CiAgICAgfQogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwpAQCAt
NjQwLDcgKzYyOSw3IEBAIHZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6dG9nZ2xlTWVtb3J5
SW5zdHJ1bWVudChJbnN0cnVtZW50U3RhdGUgc3RhdGUpCiB2b2lkIEluc3BlY3RvclRpbWVsaW5l
QWdlbnQ6OnRvZ2dsZVRpbWVsaW5lSW5zdHJ1bWVudChJbnN0cnVtZW50U3RhdGUgc3RhdGUpCiB7
CiAgICAgaWYgKHN0YXRlID09IEluc3RydW1lbnRTdGF0ZTo6U3RhcnQpCi0gICAgICAgIGludGVy
bmFsU3RhcnQoKTsKKyAgICAgICAgaW50ZXJuYWxTdGFydChXVEY6Om51bGxvcHQpOwogICAgIGVs
c2UKICAgICAgICAgaW50ZXJuYWxTdG9wKCk7CiB9CkBAIC02NDgsMTEgKzYzNywxMCBAQCB2b2lk
IEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OnRvZ2dsZVRpbWVsaW5lSW5zdHJ1bWVudChJbnN0cnVt
ZW50U3RhdGUgc3RhdGUpCiB2b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OnRvZ2dsZUFuaW1h
dGlvbkluc3RydW1lbnQoSW5zdHJ1bWVudFN0YXRlIHN0YXRlKQogewogICAgIGlmIChhdXRvKiBh
bmltYXRpb25BZ2VudCA9IG1faW5zdHJ1bWVudGluZ0FnZW50cy5wZXJzaXN0ZW50QW5pbWF0aW9u
QWdlbnQoKSkgewotICAgICAgICBFcnJvclN0cmluZyBpZ25vcmVkOwogICAgICAgICBpZiAoc3Rh
dGUgPT0gSW5zdHJ1bWVudFN0YXRlOjpTdGFydCkKLSAgICAgICAgICAgIGFuaW1hdGlvbkFnZW50
LT5zdGFydFRyYWNraW5nKGlnbm9yZWQpOworICAgICAgICAgICAgYW5pbWF0aW9uQWdlbnQtPnN0
YXJ0VHJhY2tpbmcoKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgYW5pbWF0aW9uQWdlbnQt
PnN0b3BUcmFja2luZyhpZ25vcmVkKTsKKyAgICAgICAgICAgIGFuaW1hdGlvbkFnZW50LT5zdG9w
VHJhY2tpbmcoKTsKICAgICB9CiB9CiAKQEAgLTY5MSw3MSArNjc5LDcxIEBAIHZvaWQgSW5zcGVj
dG9yVGltZWxpbmVBZ2VudDo6YnJlYWtwb2ludEFjdGlvblByb2JlKEpTQzo6SlNHbG9iYWxPYmpl
Y3QqIGxleGljYWxHCiAgICAgYXBwZW5kUmVjb3JkKFRpbWVsaW5lUmVjb3JkRmFjdG9yeTo6Y3Jl
YXRlUHJvYmVTYW1wbGVEYXRhKGFjdGlvbklELCBzYW1wbGVJZCksIFRpbWVsaW5lUmVjb3JkVHlw
ZTo6UHJvYmVTYW1wbGUsIGZhbHNlLCBmcmFtZUZyb21FeGVjU3RhdGUobGV4aWNhbEdsb2JhbE9i
amVjdCkpOwogfQogCi1zdGF0aWMgSW5zcGVjdG9yOjpQcm90b2NvbDo6VGltZWxpbmU6OkV2ZW50
VHlwZSB0b1Byb3RvY29sKFRpbWVsaW5lUmVjb3JkVHlwZSB0eXBlKQorc3RhdGljIFByb3RvY29s
OjpUaW1lbGluZTo6RXZlbnRUeXBlIHRvUHJvdG9jb2woVGltZWxpbmVSZWNvcmRUeXBlIHR5cGUp
CiB7CiAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgY2FzZSBUaW1lbGluZVJlY29yZFR5cGU6OkV2
ZW50RGlzcGF0Y2g6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpUaW1lbGlu
ZTo6RXZlbnRUeXBlOjpFdmVudERpc3BhdGNoOworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OlRp
bWVsaW5lOjpFdmVudFR5cGU6OkV2ZW50RGlzcGF0Y2g7CiAgICAgY2FzZSBUaW1lbGluZVJlY29y
ZFR5cGU6OlNjaGVkdWxlU3R5bGVSZWNhbGN1bGF0aW9uOgotICAgICAgICByZXR1cm4gSW5zcGVj
dG9yOjpQcm90b2NvbDo6VGltZWxpbmU6OkV2ZW50VHlwZTo6U2NoZWR1bGVTdHlsZVJlY2FsY3Vs
YXRpb247CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6VGltZWxpbmU6OkV2ZW50VHlwZTo6U2No
ZWR1bGVTdHlsZVJlY2FsY3VsYXRpb247CiAgICAgY2FzZSBUaW1lbGluZVJlY29yZFR5cGU6OlJl
Y2FsY3VsYXRlU3R5bGVzOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2NvbDo6VGlt
ZWxpbmU6OkV2ZW50VHlwZTo6UmVjYWxjdWxhdGVTdHlsZXM7CisgICAgICAgIHJldHVybiBQcm90
b2NvbDo6VGltZWxpbmU6OkV2ZW50VHlwZTo6UmVjYWxjdWxhdGVTdHlsZXM7CiAgICAgY2FzZSBU
aW1lbGluZVJlY29yZFR5cGU6OkludmFsaWRhdGVMYXlvdXQ6Ci0gICAgICAgIHJldHVybiBJbnNw
ZWN0b3I6OlByb3RvY29sOjpUaW1lbGluZTo6RXZlbnRUeXBlOjpJbnZhbGlkYXRlTGF5b3V0Owor
ICAgICAgICByZXR1cm4gUHJvdG9jb2w6OlRpbWVsaW5lOjpFdmVudFR5cGU6OkludmFsaWRhdGVM
YXlvdXQ7CiAgICAgY2FzZSBUaW1lbGluZVJlY29yZFR5cGU6OkxheW91dDoKLSAgICAgICAgcmV0
dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRpbWVsaW5lOjpFdmVudFR5cGU6OkxheW91dDsKKyAg
ICAgICAgcmV0dXJuIFByb3RvY29sOjpUaW1lbGluZTo6RXZlbnRUeXBlOjpMYXlvdXQ7CiAgICAg
Y2FzZSBUaW1lbGluZVJlY29yZFR5cGU6OlBhaW50OgotICAgICAgICByZXR1cm4gSW5zcGVjdG9y
OjpQcm90b2NvbDo6VGltZWxpbmU6OkV2ZW50VHlwZTo6UGFpbnQ7CisgICAgICAgIHJldHVybiBQ
cm90b2NvbDo6VGltZWxpbmU6OkV2ZW50VHlwZTo6UGFpbnQ7CiAgICAgY2FzZSBUaW1lbGluZVJl
Y29yZFR5cGU6OkNvbXBvc2l0ZToKLSAgICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6
OlRpbWVsaW5lOjpFdmVudFR5cGU6OkNvbXBvc2l0ZTsKKyAgICAgICAgcmV0dXJuIFByb3RvY29s
OjpUaW1lbGluZTo6RXZlbnRUeXBlOjpDb21wb3NpdGU7CiAgICAgY2FzZSBUaW1lbGluZVJlY29y
ZFR5cGU6OlJlbmRlcmluZ0ZyYW1lOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQcm90b2Nv
bDo6VGltZWxpbmU6OkV2ZW50VHlwZTo6UmVuZGVyaW5nRnJhbWU7CisgICAgICAgIHJldHVybiBQ
cm90b2NvbDo6VGltZWxpbmU6OkV2ZW50VHlwZTo6UmVuZGVyaW5nRnJhbWU7CiAKICAgICBjYXNl
IFRpbWVsaW5lUmVjb3JkVHlwZTo6VGltZXJJbnN0YWxsOgotICAgICAgICByZXR1cm4gSW5zcGVj
dG9yOjpQcm90b2NvbDo6VGltZWxpbmU6OkV2ZW50VHlwZTo6VGltZXJJbnN0YWxsOworICAgICAg
ICByZXR1cm4gUHJvdG9jb2w6OlRpbWVsaW5lOjpFdmVudFR5cGU6OlRpbWVySW5zdGFsbDsKICAg
ICBjYXNlIFRpbWVsaW5lUmVjb3JkVHlwZTo6VGltZXJSZW1vdmU6Ci0gICAgICAgIHJldHVybiBJ
bnNwZWN0b3I6OlByb3RvY29sOjpUaW1lbGluZTo6RXZlbnRUeXBlOjpUaW1lclJlbW92ZTsKKyAg
ICAgICAgcmV0dXJuIFByb3RvY29sOjpUaW1lbGluZTo6RXZlbnRUeXBlOjpUaW1lclJlbW92ZTsK
ICAgICBjYXNlIFRpbWVsaW5lUmVjb3JkVHlwZTo6VGltZXJGaXJlOgotICAgICAgICByZXR1cm4g
SW5zcGVjdG9yOjpQcm90b2NvbDo6VGltZWxpbmU6OkV2ZW50VHlwZTo6VGltZXJGaXJlOworICAg
ICAgICByZXR1cm4gUHJvdG9jb2w6OlRpbWVsaW5lOjpFdmVudFR5cGU6OlRpbWVyRmlyZTsKIAog
ICAgIGNhc2UgVGltZWxpbmVSZWNvcmRUeXBlOjpFdmFsdWF0ZVNjcmlwdDoKLSAgICAgICAgcmV0
dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRpbWVsaW5lOjpFdmVudFR5cGU6OkV2YWx1YXRlU2Ny
aXB0OworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OlRpbWVsaW5lOjpFdmVudFR5cGU6OkV2YWx1
YXRlU2NyaXB0OwogCiAgICAgY2FzZSBUaW1lbGluZVJlY29yZFR5cGU6OlRpbWVTdGFtcDoKLSAg
ICAgICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRpbWVsaW5lOjpFdmVudFR5cGU6OlRp
bWVTdGFtcDsKKyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpUaW1lbGluZTo6RXZlbnRUeXBlOjpU
aW1lU3RhbXA7CiAgICAgY2FzZSBUaW1lbGluZVJlY29yZFR5cGU6OlRpbWU6Ci0gICAgICAgIHJl
dHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpUaW1lbGluZTo6RXZlbnRUeXBlOjpUaW1lOworICAg
ICAgICByZXR1cm4gUHJvdG9jb2w6OlRpbWVsaW5lOjpFdmVudFR5cGU6OlRpbWU7CiAgICAgY2Fz
ZSBUaW1lbGluZVJlY29yZFR5cGU6OlRpbWVFbmQ6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6
OlByb3RvY29sOjpUaW1lbGluZTo6RXZlbnRUeXBlOjpUaW1lRW5kOworICAgICAgICByZXR1cm4g
UHJvdG9jb2w6OlRpbWVsaW5lOjpFdmVudFR5cGU6OlRpbWVFbmQ7CiAKICAgICBjYXNlIFRpbWVs
aW5lUmVjb3JkVHlwZTo6RnVuY3Rpb25DYWxsOgotICAgICAgICByZXR1cm4gSW5zcGVjdG9yOjpQ
cm90b2NvbDo6VGltZWxpbmU6OkV2ZW50VHlwZTo6RnVuY3Rpb25DYWxsOworICAgICAgICByZXR1
cm4gUHJvdG9jb2w6OlRpbWVsaW5lOjpFdmVudFR5cGU6OkZ1bmN0aW9uQ2FsbDsKICAgICBjYXNl
IFRpbWVsaW5lUmVjb3JkVHlwZTo6UHJvYmVTYW1wbGU6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0
b3I6OlByb3RvY29sOjpUaW1lbGluZTo6RXZlbnRUeXBlOjpQcm9iZVNhbXBsZTsKKyAgICAgICAg
cmV0dXJuIFByb3RvY29sOjpUaW1lbGluZTo6RXZlbnRUeXBlOjpQcm9iZVNhbXBsZTsKICAgICBj
YXNlIFRpbWVsaW5lUmVjb3JkVHlwZTo6Q29uc29sZVByb2ZpbGU6Ci0gICAgICAgIHJldHVybiBJ
bnNwZWN0b3I6OlByb3RvY29sOjpUaW1lbGluZTo6RXZlbnRUeXBlOjpDb25zb2xlUHJvZmlsZTsK
KyAgICAgICAgcmV0dXJuIFByb3RvY29sOjpUaW1lbGluZTo6RXZlbnRUeXBlOjpDb25zb2xlUHJv
ZmlsZTsKIAogICAgIGNhc2UgVGltZWxpbmVSZWNvcmRUeXBlOjpSZXF1ZXN0QW5pbWF0aW9uRnJh
bWU6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpUaW1lbGluZTo6RXZlbnRU
eXBlOjpSZXF1ZXN0QW5pbWF0aW9uRnJhbWU7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6VGlt
ZWxpbmU6OkV2ZW50VHlwZTo6UmVxdWVzdEFuaW1hdGlvbkZyYW1lOwogICAgIGNhc2UgVGltZWxp
bmVSZWNvcmRUeXBlOjpDYW5jZWxBbmltYXRpb25GcmFtZToKLSAgICAgICAgcmV0dXJuIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlRpbWVsaW5lOjpFdmVudFR5cGU6OkNhbmNlbEFuaW1hdGlvbkZyYW1l
OworICAgICAgICByZXR1cm4gUHJvdG9jb2w6OlRpbWVsaW5lOjpFdmVudFR5cGU6OkNhbmNlbEFu
aW1hdGlvbkZyYW1lOwogICAgIGNhc2UgVGltZWxpbmVSZWNvcmRUeXBlOjpGaXJlQW5pbWF0aW9u
RnJhbWU6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpUaW1lbGluZTo6RXZl
bnRUeXBlOjpGaXJlQW5pbWF0aW9uRnJhbWU7CisgICAgICAgIHJldHVybiBQcm90b2NvbDo6VGlt
ZWxpbmU6OkV2ZW50VHlwZTo6RmlyZUFuaW1hdGlvbkZyYW1lOwogCiAgICAgY2FzZSBUaW1lbGlu
ZVJlY29yZFR5cGU6Ok9ic2VydmVyQ2FsbGJhY2s6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6
OlByb3RvY29sOjpUaW1lbGluZTo6RXZlbnRUeXBlOjpPYnNlcnZlckNhbGxiYWNrOworICAgICAg
ICByZXR1cm4gUHJvdG9jb2w6OlRpbWVsaW5lOjpFdmVudFR5cGU6Ok9ic2VydmVyQ2FsbGJhY2s7
CiAgICAgfQogCi0gICAgcmV0dXJuIEluc3BlY3Rvcjo6UHJvdG9jb2w6OlRpbWVsaW5lOjpFdmVu
dFR5cGU6OlRpbWVTdGFtcDsKKyAgICByZXR1cm4gUHJvdG9jb2w6OlRpbWVsaW5lOjpFdmVudFR5
cGU6OlRpbWVTdGFtcDsKIH0KIAotdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjphZGRSZWNv
cmRUb1RpbWVsaW5lKFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcmVjb3JkLCBUaW1lbGluZVJlY29y
ZFR5cGUgdHlwZSkKK3ZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6YWRkUmVjb3JkVG9UaW1l
bGluZShSZWY8SlNPTjo6T2JqZWN0PiYmIHJlY29yZCwgVGltZWxpbmVSZWNvcmRUeXBlIHR5cGUp
CiB7Ci0gICAgQVNTRVJUX0FSRyhyZWNvcmQsIHJlY29yZCk7Ci0gICAgcmVjb3JkLT5zZXRTdHJp
bmcoInR5cGUiLCBJbnNwZWN0b3I6OlByb3RvY29sOjpJbnNwZWN0b3JIZWxwZXJzOjpnZXRFbnVt
Q29uc3RhbnRWYWx1ZSh0b1Byb3RvY29sKHR5cGUpKSk7CisgICAgcmVjb3JkLT5zZXRTdHJpbmco
UHJvdG9jb2w6OlRpbWVsaW5lOjpUaW1lbGluZUV2ZW50Ojp0eXBlS2V5LCBQcm90b2NvbDo6SGVs
cGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUodG9Qcm90b2NvbCh0eXBlKSkpOwogCiAgICAgaWYg
KG1fcmVjb3JkU3RhY2suaXNFbXB0eSgpKSB7Ci0gICAgICAgIGF1dG8gcmVjb3JkT2JqZWN0ID0g
QmluZGluZ1RyYWl0czxJbnNwZWN0b3I6OlByb3RvY29sOjpUaW1lbGluZTo6VGltZWxpbmVFdmVu
dD46OnJ1bnRpbWVDYXN0KFdURk1vdmUocmVjb3JkKSk7CisgICAgICAgIC8vIEZJWE1FOiBydW50
aW1lQ2FzdCBpcyBhIGhhY2suIFdlIGRvIGl0IGJlY2F1c2Ugd2UgY2FuJ3QgYnVpbGQgVGltZWxp
bmVFdmVudCBkaXJlY3RseSBub3cuCisgICAgICAgIGF1dG8gcmVjb3JkT2JqZWN0ID0gUHJvdG9j
b2w6OkJpbmRpbmdUcmFpdHM8UHJvdG9jb2w6OlRpbWVsaW5lOjpUaW1lbGluZUV2ZW50Pjo6cnVu
dGltZUNhc3QoV1RGTW92ZShyZWNvcmQpKTsKICAgICAgICAgc2VuZEV2ZW50KFdURk1vdmUocmVj
b3JkT2JqZWN0KSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgY29uc3QgVGltZWxpbmVSZWNvcmRF
bnRyeSYgcGFyZW50ID0gbV9yZWNvcmRTdGFjay5sYXN0KCk7CkBAIC03ODEsOCArNzY5LDkgQEAg
dm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpzZXRGcmFtZUlkZW50aWZpZXIoSlNPTjo6T2Jq
ZWN0KiByZWNvcmQsIEZyYW1lKiBmcmEKIAogdm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50Ojpk
aWRDb21wbGV0ZVJlY29yZEVudHJ5KGNvbnN0IFRpbWVsaW5lUmVjb3JkRW50cnkmIGVudHJ5KQog
ewotICAgIGVudHJ5LnJlY29yZC0+c2V0T2JqZWN0KCJkYXRhIl9zLCBlbnRyeS5kYXRhKTsKLSAg
ICBlbnRyeS5yZWNvcmQtPnNldEFycmF5KCJjaGlsZHJlbiJfcywgZW50cnkuY2hpbGRyZW4pOwor
ICAgIGVudHJ5LnJlY29yZC0+c2V0T2JqZWN0KFByb3RvY29sOjpUaW1lbGluZTo6VGltZWxpbmVF
dmVudDo6ZGF0YUtleSwgZW50cnkuZGF0YS5jb3B5UmVmKCkpOworICAgIGlmIChlbnRyeS5jaGls
ZHJlbikKKyAgICAgICAgZW50cnkucmVjb3JkLT5zZXRBcnJheShQcm90b2NvbDo6VGltZWxpbmU6
OlRpbWVsaW5lRXZlbnQ6OmNoaWxkcmVuS2V5LCAqZW50cnkuY2hpbGRyZW4pOwogICAgIGVudHJ5
LnJlY29yZC0+c2V0RG91YmxlKCJlbmRUaW1lIl9zLCB0aW1lc3RhbXAoKSk7CiAgICAgYWRkUmVj
b3JkVG9UaW1lbGluZShlbnRyeS5yZWNvcmQuY29weVJlZigpLCBlbnRyeS50eXBlKTsKIH0KQEAg
LTgwNCwyOSArNzkzLDI5IEBAIHZvaWQgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6ZGlkQ29tcGxl
dGVDdXJyZW50UmVjb3JkKFRpbWVsaW5lUmVjb3JkVHlwZSB0eXBlKQogICAgIH0KIH0KIAotdm9p
ZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjphcHBlbmRSZWNvcmQoUmVmUHRyPEpTT046Ok9iamVj
dD4mJiBkYXRhLCBUaW1lbGluZVJlY29yZFR5cGUgdHlwZSwgYm9vbCBjYXB0dXJlQ2FsbFN0YWNr
LCBGcmFtZSogZnJhbWUpCit2b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OmFwcGVuZFJlY29y
ZChSZWY8SlNPTjo6T2JqZWN0PiYmIGRhdGEsIFRpbWVsaW5lUmVjb3JkVHlwZSB0eXBlLCBib29s
IGNhcHR1cmVDYWxsU3RhY2ssIEZyYW1lKiBmcmFtZSkKIHsKICAgICBSZWY8SlNPTjo6T2JqZWN0
PiByZWNvcmQgPSBUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZUdlbmVyaWNSZWNvcmQodGlt
ZXN0YW1wKCksIGNhcHR1cmVDYWxsU3RhY2sgPyBtX21heENhbGxTdGFja0RlcHRoIDogMCk7Ci0g
ICAgcmVjb3JkLT5zZXRPYmplY3QoImRhdGEiLCBXVEZNb3ZlKGRhdGEpKTsKKyAgICByZWNvcmQt
PnNldE9iamVjdChQcm90b2NvbDo6VGltZWxpbmU6OlRpbWVsaW5lRXZlbnQ6OmRhdGFLZXksIFdU
Rk1vdmUoZGF0YSkpOwogICAgIHNldEZyYW1lSWRlbnRpZmllcigmcmVjb3JkLmdldCgpLCBmcmFt
ZSk7CiAgICAgYWRkUmVjb3JkVG9UaW1lbGluZShXVEZNb3ZlKHJlY29yZCksIHR5cGUpOwogfQog
Ci12b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OnNlbmRFdmVudChSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiYmIGV2ZW50KQordm9pZCBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpzZW5kRXZlbnQoUmVm
PEpTT046Ok9iamVjdD4mJiBldmVudCkKIHsKICAgICAvLyBGSVhNRTogcnVudGltZUNhc3QgaXMg
YSBoYWNrLiBXZSBkbyBpdCBiZWNhdXNlIHdlIGNhbid0IGJ1aWxkIFRpbWVsaW5lRXZlbnQgZGly
ZWN0bHkgbm93LgotICAgIGF1dG8gcmVjb3JkQ2hlY2tlZCA9IEJpbmRpbmdUcmFpdHM8SW5zcGVj
dG9yOjpQcm90b2NvbDo6VGltZWxpbmU6OlRpbWVsaW5lRXZlbnQ+OjpydW50aW1lQ2FzdChXVEZN
b3ZlKGV2ZW50KSk7CisgICAgYXV0byByZWNvcmRDaGVja2VkID0gUHJvdG9jb2w6OkJpbmRpbmdU
cmFpdHM8UHJvdG9jb2w6OlRpbWVsaW5lOjpUaW1lbGluZUV2ZW50Pjo6cnVudGltZUNhc3QoV1RG
TW92ZShldmVudCkpOwogICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5ldmVudFJlY29yZGVkKFdU
Rk1vdmUocmVjb3JkQ2hlY2tlZCkpOwogfQogCi1JbnNwZWN0b3JUaW1lbGluZUFnZW50OjpUaW1l
bGluZVJlY29yZEVudHJ5IEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OmNyZWF0ZVJlY29yZEVudHJ5
KFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgZGF0YSwgVGltZWxpbmVSZWNvcmRUeXBlIHR5cGUsIGJv
b2wgY2FwdHVyZUNhbGxTdGFjaywgRnJhbWUqIGZyYW1lKQorSW5zcGVjdG9yVGltZWxpbmVBZ2Vu
dDo6VGltZWxpbmVSZWNvcmRFbnRyeSBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpjcmVhdGVSZWNv
cmRFbnRyeShSZWY8SlNPTjo6T2JqZWN0PiYmIGRhdGEsIFRpbWVsaW5lUmVjb3JkVHlwZSB0eXBl
LCBib29sIGNhcHR1cmVDYWxsU3RhY2ssIEZyYW1lKiBmcmFtZSkKIHsKICAgICBSZWY8SlNPTjo6
T2JqZWN0PiByZWNvcmQgPSBUaW1lbGluZVJlY29yZEZhY3Rvcnk6OmNyZWF0ZUdlbmVyaWNSZWNv
cmQodGltZXN0YW1wKCksIGNhcHR1cmVDYWxsU3RhY2sgPyBtX21heENhbGxTdGFja0RlcHRoIDog
MCk7CiAgICAgc2V0RnJhbWVJZGVudGlmaWVyKCZyZWNvcmQuZ2V0KCksIGZyYW1lKTsKICAgICBy
ZXR1cm4gVGltZWxpbmVSZWNvcmRFbnRyeShXVEZNb3ZlKHJlY29yZCksIFdURk1vdmUoZGF0YSks
IEpTT046OkFycmF5OjpjcmVhdGUoKSwgdHlwZSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yVGltZWxp
bmVBZ2VudDo6cHVzaEN1cnJlbnRSZWNvcmQoUmVmUHRyPEpTT046Ok9iamVjdD4mJiBkYXRhLCBU
aW1lbGluZVJlY29yZFR5cGUgdHlwZSwgYm9vbCBjYXB0dXJlQ2FsbFN0YWNrLCBGcmFtZSogZnJh
bWUpCit2b2lkIEluc3BlY3RvclRpbWVsaW5lQWdlbnQ6OnB1c2hDdXJyZW50UmVjb3JkKFJlZjxK
U09OOjpPYmplY3Q+JiYgZGF0YSwgVGltZWxpbmVSZWNvcmRUeXBlIHR5cGUsIGJvb2wgY2FwdHVy
ZUNhbGxTdGFjaywgRnJhbWUqIGZyYW1lKQogewogICAgIHB1c2hDdXJyZW50UmVjb3JkKGNyZWF0
ZVJlY29yZEVudHJ5KFdURk1vdmUoZGF0YSksIHR5cGUsIGNhcHR1cmVDYWxsU3RhY2ssIGZyYW1l
KSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL0luc3Bl
Y3RvclRpbWVsaW5lQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5z
cGVjdG9yVGltZWxpbmVBZ2VudC5oCmluZGV4IGFlNzU3OWExNWYwNTcyYjUyZjlhYWUxYWZiZWUw
OTJmYjgyNGM4MTkuLmZlNzVlNDBiNDM0Zjg1ZDk3M2FlZGJiNDI5N2E5NGJhZTE4ZmJiMmMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yVGltZWxp
bmVBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9y
VGltZWxpbmVBZ2VudC5oCkBAIC01MCw4ICs1MCw2IEBAIGNsYXNzIEZyYW1lOwogY2xhc3MgUmVu
ZGVyT2JqZWN0OwogY2xhc3MgUnVuTG9vcE9ic2VydmVyOwogCi10eXBlZGVmIFN0cmluZyBFcnJv
clN0cmluZzsKLQogZW51bSBjbGFzcyBUaW1lbGluZVJlY29yZFR5cGUgewogICAgIEV2ZW50RGlz
cGF0Y2gsCiAgICAgU2NoZWR1bGVTdHlsZVJlY2FsY3VsYXRpb24sCkBAIC04OCwyMiArODYsMjIg
QEAgY2xhc3MgSW5zcGVjdG9yVGltZWxpbmVBZ2VudCBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3JB
Z2VudEJhc2UgLCBwdWJsaWMgSW5zcGVjdG8KICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
IHB1YmxpYzoKICAgICBJbnNwZWN0b3JUaW1lbGluZUFnZW50KFBhZ2VBZ2VudENvbnRleHQmKTsK
LSAgICB+SW5zcGVjdG9yVGltZWxpbmVBZ2VudCgpIG92ZXJyaWRlOworICAgIH5JbnNwZWN0b3JU
aW1lbGluZUFnZW50KCk7CiAKICAgICAvLyBJbnNwZWN0b3JBZ2VudEJhc2UKLSAgICB2b2lkIGRp
ZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kUm91dGVyKiwgSW5z
cGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlciopIG92ZXJyaWRlOwotICAgIHZvaWQgd2lsbERlc3Ry
b3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKSBvdmVycmlk
ZTsKKyAgICB2b2lkIGRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250
ZW5kUm91dGVyKiwgSW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlciopOworICAgIHZvaWQgd2ls
bERlc3Ryb3lGcm9udGVuZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKTsK
IAogICAgIC8vIFRpbWVsaW5lQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyCi0gICAgdm9pZCBlbmFi
bGUoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2b2lkIGRpc2FibGUoRXJyb3JTdHJpbmcm
KSBvdmVycmlkZTsKLSAgICB2b2lkIHN0YXJ0KEVycm9yU3RyaW5nJiwgY29uc3QgaW50KiBtYXhD
YWxsU3RhY2tEZXB0aCA9IG51bGxwdHIpIG92ZXJyaWRlOwotICAgIHZvaWQgc3RvcChFcnJvclN0
cmluZyYpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0QXV0b0NhcHR1cmVFbmFibGVkKEVycm9yU3Ry
aW5nJiwgYm9vbCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRJbnN0cnVtZW50cyhFcnJvclN0cmlu
ZyYsIGNvbnN0IEpTT046OkFycmF5Jikgb3ZlcnJpZGU7CisgICAgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBlbmFibGUoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29s
OjpFcnJvclN0cmluZ09yPHZvaWQ+IGRpc2FibGUoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29s
OjpFcnJvclN0cmluZ09yPHZvaWQ+IHN0YXJ0KE9wdGlvbmFsPGludD4mJiBtYXhDYWxsU3RhY2tE
ZXB0aCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzdG9w
KCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzZXRBdXRv
Q2FwdHVyZUVuYWJsZWQoYm9vbCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJp
bmdPcjx2b2lkPiBzZXRJbnN0cnVtZW50cyhSZWY8SlNPTjo6QXJyYXk+JiYpOwogCiAgICAgLy8g
SlNDOjpEZWJ1Z2dlcjo6T2JzZXJ2ZXIKLSAgICB2b2lkIGJyZWFrcG9pbnRBY3Rpb25Qcm9iZShK
U0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpCcmVha3BvaW50QWN0aW9uSUQsIHVuc2lnbmVkIGJh
dGNoSWQsIHVuc2lnbmVkIHNhbXBsZUlkLCBKU0M6OkpTVmFsdWUgcmVzdWx0KSBmaW5hbDsKKyAg
ICB2b2lkIGJyZWFrcG9pbnRBY3Rpb25Qcm9iZShKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpC
cmVha3BvaW50QWN0aW9uSUQsIHVuc2lnbmVkIGJhdGNoSWQsIHVuc2lnbmVkIHNhbXBsZUlkLCBK
U0M6OkpTVmFsdWUgcmVzdWx0KTsKIAogICAgIC8vIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbgog
ICAgIHZvaWQgZGlkSW5zdGFsbFRpbWVyKGludCB0aW1lcklkLCBTZWNvbmRzIHRpbWVvdXQsIGJv
b2wgc2luZ2xlU2hvdCwgRnJhbWUqKTsKQEAgLTE2MCw5ICsxNTgsNyBAQCBwcml2YXRlOgogICAg
IGZyaWVuZCBjbGFzcyBUaW1lbGluZVJlY29yZFN0YWNrOwogCiAgICAgc3RydWN0IFRpbWVsaW5l
UmVjb3JkRW50cnkgewotICAgICAgICBUaW1lbGluZVJlY29yZEVudHJ5KCkKLSAgICAgICAgICAg
IDogdHlwZShUaW1lbGluZVJlY29yZFR5cGU6OkV2ZW50RGlzcGF0Y2gpIHsgfQotICAgICAgICBU
aW1lbGluZVJlY29yZEVudHJ5KFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcmVjb3JkLCBSZWZQdHI8
SlNPTjo6T2JqZWN0PiYmIGRhdGEsIFJlZlB0cjxKU09OOjpBcnJheT4mJiBjaGlsZHJlbiwgVGlt
ZWxpbmVSZWNvcmRUeXBlIHR5cGUpCisgICAgICAgIFRpbWVsaW5lUmVjb3JkRW50cnkoUmVmPEpT
T046Ok9iamVjdD4mJiByZWNvcmQsIFJlZjxKU09OOjpPYmplY3Q+JiYgZGF0YSwgUmVmUHRyPEpT
T046OkFycmF5PiYmIGNoaWxkcmVuLCBUaW1lbGluZVJlY29yZFR5cGUgdHlwZSkKICAgICAgICAg
ICAgIDogcmVjb3JkKFdURk1vdmUocmVjb3JkKSkKICAgICAgICAgICAgICwgZGF0YShXVEZNb3Zl
KGRhdGEpKQogICAgICAgICAgICAgLCBjaGlsZHJlbihXVEZNb3ZlKGNoaWxkcmVuKSkKQEAgLTE3
MCwyOSArMTY2LDI5IEBAIHByaXZhdGU6CiAgICAgICAgIHsKICAgICAgICAgfQogCi0gICAgICAg
IFJlZlB0cjxKU09OOjpPYmplY3Q+IHJlY29yZDsKLSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVj
dD4gZGF0YTsKKyAgICAgICAgUmVmPEpTT046Ok9iamVjdD4gcmVjb3JkOworICAgICAgICBSZWY8
SlNPTjo6T2JqZWN0PiBkYXRhOwogICAgICAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IGNoaWxkcmVu
OwogICAgICAgICBUaW1lbGluZVJlY29yZFR5cGUgdHlwZTsKICAgICB9OwogCi0gICAgdm9pZCBp
bnRlcm5hbFN0YXJ0KGNvbnN0IGludCogbWF4Q2FsbFN0YWNrRGVwdGggPSBudWxscHRyKTsKKyAg
ICB2b2lkIGludGVybmFsU3RhcnQoT3B0aW9uYWw8aW50PiYmIG1heENhbGxTdGFja0RlcHRoKTsK
ICAgICB2b2lkIGludGVybmFsU3RvcCgpOwogICAgIGRvdWJsZSB0aW1lc3RhbXAoKTsKIAotICAg
IHZvaWQgc2VuZEV2ZW50KFJlZlB0cjxKU09OOjpPYmplY3Q+JiYpOwotICAgIHZvaWQgYXBwZW5k
UmVjb3JkKFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgZGF0YSwgVGltZWxpbmVSZWNvcmRUeXBlLCBi
b29sIGNhcHR1cmVDYWxsU3RhY2ssIEZyYW1lKik7Ci0gICAgdm9pZCBwdXNoQ3VycmVudFJlY29y
ZChSZWZQdHI8SlNPTjo6T2JqZWN0PiYmLCBUaW1lbGluZVJlY29yZFR5cGUsIGJvb2wgY2FwdHVy
ZUNhbGxTdGFjaywgRnJhbWUqKTsKKyAgICB2b2lkIHNlbmRFdmVudChSZWY8SlNPTjo6T2JqZWN0
PiYmKTsKKyAgICB2b2lkIGFwcGVuZFJlY29yZChSZWY8SlNPTjo6T2JqZWN0PiYmIGRhdGEsIFRp
bWVsaW5lUmVjb3JkVHlwZSwgYm9vbCBjYXB0dXJlQ2FsbFN0YWNrLCBGcmFtZSopOworICAgIHZv
aWQgcHVzaEN1cnJlbnRSZWNvcmQoUmVmPEpTT046Ok9iamVjdD4mJiwgVGltZWxpbmVSZWNvcmRU
eXBlLCBib29sIGNhcHR1cmVDYWxsU3RhY2ssIEZyYW1lKik7CiAgICAgdm9pZCBwdXNoQ3VycmVu
dFJlY29yZChjb25zdCBUaW1lbGluZVJlY29yZEVudHJ5JiByZWNvcmQpIHsgbV9yZWNvcmRTdGFj
ay5hcHBlbmQocmVjb3JkKTsgfQogCi0gICAgVGltZWxpbmVSZWNvcmRFbnRyeSBjcmVhdGVSZWNv
cmRFbnRyeShSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIGRhdGEsIFRpbWVsaW5lUmVjb3JkVHlwZSwg
Ym9vbCBjYXB0dXJlQ2FsbFN0YWNrLCBGcmFtZSopOworICAgIFRpbWVsaW5lUmVjb3JkRW50cnkg
Y3JlYXRlUmVjb3JkRW50cnkoUmVmPEpTT046Ok9iamVjdD4mJiBkYXRhLCBUaW1lbGluZVJlY29y
ZFR5cGUsIGJvb2wgY2FwdHVyZUNhbGxTdGFjaywgRnJhbWUqKTsKIAogICAgIHZvaWQgc2V0RnJh
bWVJZGVudGlmaWVyKEpTT046Ok9iamVjdCogcmVjb3JkLCBGcmFtZSopOwogCiAgICAgdm9pZCBk
aWRDb21wbGV0ZVJlY29yZEVudHJ5KGNvbnN0IFRpbWVsaW5lUmVjb3JkRW50cnkmKTsKICAgICB2
b2lkIGRpZENvbXBsZXRlQ3VycmVudFJlY29yZChUaW1lbGluZVJlY29yZFR5cGUpOwogCi0gICAg
dm9pZCBhZGRSZWNvcmRUb1RpbWVsaW5lKFJlZlB0cjxKU09OOjpPYmplY3Q+JiYsIFRpbWVsaW5l
UmVjb3JkVHlwZSk7CisgICAgdm9pZCBhZGRSZWNvcmRUb1RpbWVsaW5lKFJlZjxKU09OOjpPYmpl
Y3Q+JiYsIFRpbWVsaW5lUmVjb3JkVHlwZSk7CiAKICAgICB2b2lkIGxvY2FsVG9QYWdlUXVhZChj
b25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBMYXlvdXRSZWN0JiwgRmxvYXRRdWFkKik7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvSW5zcGVjdG9yV29ya2Vy
QWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JXb3Jr
ZXJBZ2VudC5jcHAKaW5kZXggOTA5YzQ2NmY4N2U5YmZhOGM0YzE3MjhjNDZhZDZlN2U1OTA3YjQ2
ZS4uMzNjYWEwYWEyMDc5YWQ0MDgxY2MyOTYwNWE1MzUzN2MyNGQ2NmJlZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JXb3JrZXJBZ2VudC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9JbnNwZWN0b3JXb3JrZXJBZ2Vu
dC5jcHAKQEAgLTUzLDU1ICs1Myw1NiBAQCB2b2lkIEluc3BlY3RvcldvcmtlckFnZW50Ojp3aWxs
RGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChEaXNjb25uZWN0UmVhc29uKQogewogICAgIG1faW5z
dHJ1bWVudGluZ0FnZW50cy5zZXRQZXJzaXN0ZW50V29ya2VyQWdlbnQobnVsbHB0cik7CiAKLSAg
ICBFcnJvclN0cmluZyBpZ25vcmVkOwotICAgIGRpc2FibGUoaWdub3JlZCk7CisgICAgZGlzYWJs
ZSgpOwogfQogCi12b2lkIEluc3BlY3RvcldvcmtlckFnZW50OjplbmFibGUoRXJyb3JTdHJpbmcm
KQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yV29ya2VyQWdlbnQ6OmVu
YWJsZSgpCiB7CiAgICAgaWYgKG1fZW5hYmxlZCkKLSAgICAgICAgcmV0dXJuOworICAgICAgICBy
ZXR1cm4geyB9OwogCiAgICAgbV9lbmFibGVkID0gdHJ1ZTsKIAogICAgIGNvbm5lY3RUb0FsbFdv
cmtlckluc3BlY3RvclByb3hpZXNGb3JQYWdlKCk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12
b2lkIEluc3BlY3RvcldvcmtlckFnZW50OjpkaXNhYmxlKEVycm9yU3RyaW5nJikKK1Byb3RvY29s
OjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvcldvcmtlckFnZW50OjpkaXNhYmxlKCkKIHsK
ICAgICBpZiAoIW1fZW5hYmxlZCkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4geyB9
OwogCiAgICAgbV9lbmFibGVkID0gZmFsc2U7CiAKICAgICBkaXNjb25uZWN0RnJvbUFsbFdvcmtl
ckluc3BlY3RvclByb3hpZXMoKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVj
dG9yV29ya2VyQWdlbnQ6OmluaXRpYWxpemVkKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29u
c3QgU3RyaW5nJiB3b3JrZXJJZCkKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IEluc3Bl
Y3RvcldvcmtlckFnZW50Ojppbml0aWFsaXplZChjb25zdCBTdHJpbmcmIHdvcmtlcklkKQogewog
ICAgIFdvcmtlckluc3BlY3RvclByb3h5KiBwcm94eSA9IG1fY29ubmVjdGVkUHJveGllcy5nZXQo
d29ya2VySWQpOwotICAgIGlmICghcHJveHkpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiTWlz
c2luZyB3b3JrZXIgZm9yIGdpdmVuIHdvcmtlcklkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAg
fQorICAgIGlmICghcHJveHkpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZCgiTWlzc2lu
ZyB3b3JrZXIgZm9yIGdpdmVuIHdvcmtlcklkIl9zKTsKIAogICAgIHByb3h5LT5yZXN1bWVXb3Jr
ZXJJZlBhdXNlZCgpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBJbnNwZWN0b3JXb3Jr
ZXJBZ2VudDo6c2VuZE1lc3NhZ2VUb1dvcmtlcihFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNv
bnN0IFN0cmluZyYgd29ya2VySWQsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK1Byb3RvY29sOjpF
cnJvclN0cmluZ09yPHZvaWQ+IEluc3BlY3RvcldvcmtlckFnZW50OjpzZW5kTWVzc2FnZVRvV29y
a2VyKGNvbnN0IFN0cmluZyYgd29ya2VySWQsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKIHsKLSAg
ICBpZiAoIW1fZW5hYmxlZCkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJXb3JrZXIgZG9tYWlu
IG11c3QgYmUgZW5hYmxlZCJfczsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoIW1f
ZW5hYmxlZCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJXb3JrZXIgZG9tYWluIG11
c3QgYmUgZW5hYmxlZCJfcyk7CiAKICAgICBXb3JrZXJJbnNwZWN0b3JQcm94eSogcHJveHkgPSBt
X2Nvbm5lY3RlZFByb3hpZXMuZ2V0KHdvcmtlcklkKTsKLSAgICBpZiAoIXByb3h5KSB7Ci0gICAg
ICAgIGVycm9yU3RyaW5nID0gIk1pc3Npbmcgd29ya2VyIGZvciBnaXZlbiB3b3JrZXJJZCJfczsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoIXByb3h5KQorICAgICAgICByZXR1cm4g
bWFrZVVuZXhwZWN0ZWQoIk1pc3Npbmcgd29ya2VyIGZvciBnaXZlbiB3b3JrZXJJZCJfcyk7CiAK
ICAgICBwcm94eS0+c2VuZE1lc3NhZ2VUb1dvcmtlckluc3BlY3RvckNvbnRyb2xsZXIobWVzc2Fn
ZSk7CisKKyAgICByZXR1cm4geyB9OwogfQogCiB2b2lkIEluc3BlY3RvcldvcmtlckFnZW50Ojpz
ZW5kTWVzc2FnZUZyb21Xb3JrZXJUb0Zyb250ZW5kKFdvcmtlckluc3BlY3RvclByb3h5JiBwcm94
eSwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2FnZW50cy9JbnNwZWN0b3JXb3JrZXJBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2FnZW50cy9JbnNwZWN0b3JXb3JrZXJBZ2VudC5oCmluZGV4IDE3ZDFiZWFlOTAxMGYz
MjAwMWFjNjRkZDlkODkyYTkzZjEwYTdkNTYuLjYzNmJjODFkZDVhNTBhZWUwNTNjMmUwNGU2ODY5
OWQzZmE2YjY0ZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMv
SW5zcGVjdG9yV29ya2VyQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdl
bnRzL0luc3BlY3RvcldvcmtlckFnZW50LmgKQEAgLTM1LDI3ICszNSwyNSBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIGNsYXNzIFBhZ2U7CiAKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwot
CiBjbGFzcyBJbnNwZWN0b3JXb3JrZXJBZ2VudCBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3JBZ2Vu
dEJhc2UsIHB1YmxpYyBJbnNwZWN0b3I6OldvcmtlckJhY2tlbmREaXNwYXRjaGVySGFuZGxlciwg
cHVibGljIFdvcmtlckluc3BlY3RvclByb3h5OjpQYWdlQ2hhbm5lbCB7CiAgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoSW5zcGVjdG9yV29ya2VyQWdlbnQpOwogICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOwogcHVibGljOgogICAgIEluc3BlY3RvcldvcmtlckFnZW50KFBhZ2VBZ2VudENvbnRl
eHQmKTsKLSAgICB+SW5zcGVjdG9yV29ya2VyQWdlbnQoKSBvdmVycmlkZTsKKyAgICB+SW5zcGVj
dG9yV29ya2VyQWdlbnQoKTsKIAogICAgIC8vIEluc3BlY3RvckFnZW50QmFzZQotICAgIHZvaWQg
ZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRSb3V0ZXIqLCBJ
bnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyKikgb3ZlcnJpZGU7Ci0gICAgdm9pZCB3aWxsRGVz
dHJveUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24pIG92ZXJy
aWRlOworICAgIHZvaWQgZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJv
bnRlbmRSb3V0ZXIqLCBJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyKik7CisgICAgdm9pZCB3
aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24p
OwogCiAgICAgLy8gV29ya2VyQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyCi0gICAgdm9pZCBlbmFi
bGUoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2b2lkIGRpc2FibGUoRXJyb3JTdHJpbmcm
KSBvdmVycmlkZTsKLSAgICB2b2lkIGluaXRpYWxpemVkKEVycm9yU3RyaW5nJiwgY29uc3QgU3Ry
aW5nJiB3b3JrZXJJZCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZW5kTWVzc2FnZVRvV29ya2VyKEVy
cm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiB3b3JrZXJJZCwgY29uc3QgU3RyaW5nJiBtZXNzYWdl
KSBvdmVycmlkZTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+
IGVuYWJsZSgpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4g
ZGlzYWJsZSgpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4g
aW5pdGlhbGl6ZWQoY29uc3QgU3RyaW5nJiB3b3JrZXJJZCk7CisgICAgSW5zcGVjdG9yOjpQcm90
b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzZW5kTWVzc2FnZVRvV29ya2VyKGNvbnN0IFN0cmlu
ZyYgd29ya2VySWQsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7CiAKICAgICAvLyBXb3JrZXJJbnNw
ZWN0b3JQcm94eTo6UGFnZUNoYW5uZWwKLSAgICB2b2lkIHNlbmRNZXNzYWdlRnJvbVdvcmtlclRv
RnJvbnRlbmQoV29ya2VySW5zcGVjdG9yUHJveHkmLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpIG92
ZXJyaWRlOworICAgIHZvaWQgc2VuZE1lc3NhZ2VGcm9tV29ya2VyVG9Gcm9udGVuZChXb3JrZXJJ
bnNwZWN0b3JQcm94eSYsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7CiAKICAgICAvLyBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb24KICAgICBib29sIHNob3VsZFdhaXRGb3JEZWJ1Z2dlck9uU3RhcnQo
KSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvV2Vi
Q29uc29sZUFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL1dlYkNvbnNv
bGVBZ2VudC5oCmluZGV4IGY3ZDgyNzgwNzBmZTQ3MDI5OWYyZGQ2YmFiNjY0NjJkNTg1ODg5MDUu
LjBiOGYyMGVhYzM0M2I2NjgxN2FjOWYwZjBjNmM4Y2IyMGM5YmFjN2IgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvV2ViQ29uc29sZUFnZW50LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9XZWJDb25zb2xlQWdlbnQuaApAQCAtMzMsNyAr
MzMsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBET01XaW5kb3c7CiBjbGFzcyBSZXNv
dXJjZUVycm9yOwogY2xhc3MgUmVzb3VyY2VSZXNwb25zZTsKLXR5cGVkZWYgU3RyaW5nIEVycm9y
U3RyaW5nOwogCiBjbGFzcyBXZWJDb25zb2xlQWdlbnQgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNw
ZWN0b3JDb25zb2xlQWdlbnQgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFdlYkNvbnNvbGVB
Z2VudCk7CkBAIC00Niw4ICs0NSw2IEBAIHB1YmxpYzoKICAgICB2b2lkIGZyYW1lV2luZG93RGlz
Y2FyZGVkKERPTVdpbmRvdyopOwogICAgIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKHVuc2lnbmVk
IGxvbmcgcmVxdWVzdElkZW50aWZpZXIsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKICAgICB2
b2lkIGRpZEZhaWxMb2FkaW5nKHVuc2lnbmVkIGxvbmcgcmVxdWVzdElkZW50aWZpZXIsIGNvbnN0
IFJlc291cmNlRXJyb3ImKTsKLQotcHJvdGVjdGVkOgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9XZWJEZWJ1
Z2dlckFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvV2ViRGVidWdn
ZXJBZ2VudC5jcHAKaW5kZXggYjkzYTgxZmJmNGY1MDY0NjZhZGIzZTEzYmJlODhjYzUzOTIzNWI3
ZS4uMWM2MTM1N2FmZGNlMzUwYWUyM2FiYzIwN2YyMjcwNGM5NGViZjRmMyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9XZWJEZWJ1Z2dlckFnZW50LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL1dlYkRlYnVnZ2VyQWdlbnQuY3BwCkBA
IC00OSwxOCArNDksMTggQEAgYm9vbCBXZWJEZWJ1Z2dlckFnZW50OjplbmFibGVkKCkgY29uc3QK
ICAgICByZXR1cm4gbV9pbnN0cnVtZW50aW5nQWdlbnRzLmVuYWJsZWRXZWJEZWJ1Z2dlckFnZW50
KCkgPT0gdGhpcyAmJiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjplbmFibGVkKCk7CiB9CiAKLXZv
aWQgV2ViRGVidWdnZXJBZ2VudDo6ZW5hYmxlKCkKK3ZvaWQgV2ViRGVidWdnZXJBZ2VudDo6aW50
ZXJuYWxFbmFibGUoKQogewogICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy5zZXRFbmFibGVkV2Vi
RGVidWdnZXJBZ2VudCh0aGlzKTsKIAotICAgIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmVuYWJs
ZSgpOworICAgIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmludGVybmFsRW5hYmxlKCk7CiB9CiAK
LXZvaWQgV2ViRGVidWdnZXJBZ2VudDo6ZGlzYWJsZShib29sIGlzQmVpbmdEZXN0cm95ZWQpCit2
b2lkIFdlYkRlYnVnZ2VyQWdlbnQ6OmludGVybmFsRGlzYWJsZShib29sIGlzQmVpbmdEZXN0cm95
ZWQpCiB7CiAgICAgbV9pbnN0cnVtZW50aW5nQWdlbnRzLnNldEVuYWJsZWRXZWJEZWJ1Z2dlckFn
ZW50KG51bGxwdHIpOwogCi0gICAgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlzYWJsZShpc0Jl
aW5nRGVzdHJveWVkKTsKKyAgICBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjppbnRlcm5hbERpc2Fi
bGUoaXNCZWluZ0Rlc3Ryb3llZCk7CiB9CiAKIHZvaWQgV2ViRGVidWdnZXJBZ2VudDo6ZGlkQWRk
RXZlbnRMaXN0ZW5lcihFdmVudFRhcmdldCYgdGFyZ2V0LCBjb25zdCBBdG9tU3RyaW5nJiBldmVu
dFR5cGUsIEV2ZW50TGlzdGVuZXImIGxpc3RlbmVyLCBib29sIGNhcHR1cmUpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL1dlYkRlYnVnZ2VyQWdlbnQuaCBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvV2ViRGVidWdnZXJBZ2VudC5oCmluZGV4IDEw
Yjk2NDg4ODFhYTAxNTY0ZmNiZTcyZTc0ZmZiYWM3OTY4NDU3NjIuLmE5MjM3MWRhNWQyM2FhMDVl
ZGI2ODk4NzU5ZWE0MTFlZTc1YTY5OGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9hZ2VudHMvV2ViRGVidWdnZXJBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9hZ2VudHMvV2ViRGVidWdnZXJBZ2VudC5oCkBAIC0zNSw3ICszNSw2IEBAIGNsYXNzIEV2
ZW50VGFyZ2V0OwogY2xhc3MgSW5zdHJ1bWVudGluZ0FnZW50czsKIGNsYXNzIFJlZ2lzdGVyZWRF
dmVudExpc3RlbmVyOwogY2xhc3MgVGltZXJCYXNlOwotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJp
bmc7CiAKIGNsYXNzIFdlYkRlYnVnZ2VyQWdlbnQgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0
b3JEZWJ1Z2dlckFnZW50IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShXZWJEZWJ1Z2dlckFn
ZW50KTsKQEAgLTU2LDggKzU1LDggQEAgcHVibGljOgogCiBwcm90ZWN0ZWQ6CiAgICAgV2ViRGVi
dWdnZXJBZ2VudChXZWJBZ2VudENvbnRleHQmKTsKLSAgICB2b2lkIGVuYWJsZSgpIG92ZXJyaWRl
OwotICAgIHZvaWQgZGlzYWJsZShib29sIGlzQmVpbmdEZXN0cm95ZWQpIG92ZXJyaWRlOworICAg
IHZvaWQgaW50ZXJuYWxFbmFibGUoKSBvdmVycmlkZTsKKyAgICB2b2lkIGludGVybmFsRGlzYWJs
ZShib29sIGlzQmVpbmdEZXN0cm95ZWQpIG92ZXJyaWRlOwogCiAgICAgdm9pZCBkaWRDbGVhckFz
eW5jU3RhY2tUcmFjZURhdGEoKSBmaW5hbDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2FnZW50cy9XZWJIZWFwQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2FnZW50cy9XZWJIZWFwQWdlbnQuY3BwCmluZGV4IDVhYTc0NTNkMDk1NjA3NjI3OGViMDMw
ZjgwOGRkZjAxNGRhYmZiODUuLjkyNzVlOGY3OWQwMGZlMWExMTgyMWVkOGE4NjljMGUxN2I0MDgw
MjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvV2ViSGVhcEFn
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL1dlYkhlYXBBZ2Vu
dC5jcHAKQEAgLTM1LDcgKzM1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogdXNpbmcgbmFtZXNw
YWNlIEluc3BlY3RvcjsKIAogc3RydWN0IEdhcmJhZ2VDb2xsZWN0aW9uRGF0YSB7Ci0gICAgSW5z
cGVjdG9yOjpQcm90b2NvbDo6SGVhcDo6R2FyYmFnZUNvbGxlY3Rpb246OlR5cGUgdHlwZTsKKyAg
ICBQcm90b2NvbDo6SGVhcDo6R2FyYmFnZUNvbGxlY3Rpb246OlR5cGUgdHlwZTsKICAgICBTZWNv
bmRzIHN0YXJ0VGltZTsKICAgICBTZWNvbmRzIGVuZFRpbWU7CiB9OwpAQCAtMTAzLDI1ICsxMDMs
MjcgQEAgV2ViSGVhcEFnZW50OjpXZWJIZWFwQWdlbnQoV2ViQWdlbnRDb250ZXh0JiBjb250ZXh0
KQogCiBXZWJIZWFwQWdlbnQ6On5XZWJIZWFwQWdlbnQoKSA9IGRlZmF1bHQ7CiAKLXZvaWQgV2Vi
SGVhcEFnZW50OjplbmFibGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nKQorUHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8dm9pZD4gV2ViSGVhcEFnZW50OjplbmFibGUoKQogewotICAgIEluc3BlY3Rv
ckhlYXBBZ2VudDo6ZW5hYmxlKGVycm9yU3RyaW5nKTsKKyAgICBhdXRvIHJlc3VsdCA9IEluc3Bl
Y3RvckhlYXBBZ2VudDo6ZW5hYmxlKCk7CiAKICAgICBpZiAoYXV0byogY29uc29sZUFnZW50ID0g
bV9pbnN0cnVtZW50aW5nQWdlbnRzLndlYkNvbnNvbGVBZ2VudCgpKQogICAgICAgICBjb25zb2xl
QWdlbnQtPnNldEhlYXBBZ2VudCh0aGlzKTsKKworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZv
aWQgV2ViSGVhcEFnZW50OjpkaXNhYmxlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZykKK1Byb3Rv
Y29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IFdlYkhlYXBBZ2VudDo6ZGlzYWJsZSgpCiB7CiAgICAg
bV9zZW5kR2FyYmFnZUNvbGxlY3Rpb25FdmVudHNUYXNrLT5yZXNldCgpOwogCiAgICAgaWYgKGF1
dG8qIGNvbnNvbGVBZ2VudCA9IG1faW5zdHJ1bWVudGluZ0FnZW50cy53ZWJDb25zb2xlQWdlbnQo
KSkKICAgICAgICAgY29uc29sZUFnZW50LT5zZXRIZWFwQWdlbnQobnVsbHB0cik7CiAKLSAgICBJ
bnNwZWN0b3JIZWFwQWdlbnQ6OmRpc2FibGUoZXJyb3JTdHJpbmcpOworICAgIHJldHVybiBJbnNw
ZWN0b3JIZWFwQWdlbnQ6OmRpc2FibGUoKTsKIH0KIAotdm9pZCBXZWJIZWFwQWdlbnQ6OmRpc3Bh
dGNoR2FyYmFnZUNvbGxlY3RlZEV2ZW50KEluc3BlY3Rvcjo6UHJvdG9jb2w6OkhlYXA6OkdhcmJh
Z2VDb2xsZWN0aW9uOjpUeXBlIHR5cGUsIFNlY29uZHMgc3RhcnRUaW1lLCBTZWNvbmRzIGVuZFRp
bWUpCit2b2lkIFdlYkhlYXBBZ2VudDo6ZGlzcGF0Y2hHYXJiYWdlQ29sbGVjdGVkRXZlbnQoUHJv
dG9jb2w6OkhlYXA6OkdhcmJhZ2VDb2xsZWN0aW9uOjpUeXBlIHR5cGUsIFNlY29uZHMgc3RhcnRU
aW1lLCBTZWNvbmRzIGVuZFRpbWUpCiB7CiAgICAgLy8gRGlzcGF0Y2ggdGhlIGV2ZW50IGFzeW5j
aHJvbm91c2x5IGJlY2F1c2UgdGhpcyBtZXRob2QgbWF5IGJlCiAgICAgLy8gY2FsbGVkIGJldHdl
ZW4gY29sbGVjdGlvbiBhbmQgc3dlZXBpbmcgYW5kIHdlIGRvbid0IHdhbnQgdG8KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvV2ViSGVhcEFnZW50LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL1dlYkhlYXBBZ2VudC5oCmluZGV4IDBiYzhlNjRh
ZjVhODZhNzJkNWY4MDQ0MGZkYjExNjNmZTE3ZTE1NzMuLmEzNWU1N2NjN2E3MWY4YWY0MTM4NjM3
ODdjZWYzNmJlZTQxNmY2YmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9h
Z2VudHMvV2ViSGVhcEFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50
cy9XZWJIZWFwQWdlbnQuaApAQCAtMzMsNyArMzMsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IGNsYXNzIFNlbmRHYXJiYWdlQ29sbGVjdGlvbkV2ZW50c1Rhc2s7CiBzdHJ1Y3QgR2FyYmFnZUNv
bGxlY3Rpb25EYXRhOwotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7CiAKIGNsYXNzIFdlYkhl
YXBBZ2VudCA6IHB1YmxpYyBJbnNwZWN0b3I6Okluc3BlY3RvckhlYXBBZ2VudCB7CiAgICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoV2ViSGVhcEFnZW50KTsKQEAgLTQ0LDggKzQzLDggQEAgcHVibGlj
OgogICAgIH5XZWJIZWFwQWdlbnQoKSBvdmVycmlkZTsKIAogICAgIC8vIEhlYXBCYWNrZW5kRGlz
cGF0Y2hlckhhbmRsZXIKLSAgICB2b2lkIGVuYWJsZShFcnJvclN0cmluZyYpIG92ZXJyaWRlOwot
ICAgIHZvaWQgZGlzYWJsZShFcnJvclN0cmluZyYpIG92ZXJyaWRlOworICAgIEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZW5hYmxlKCkgb3ZlcnJpZGU7CisgICAgSW5z
cGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBkaXNhYmxlKCkgb3ZlcnJpZGU7
CiAKIHByb3RlY3RlZDoKICAgICB2b2lkIGRpc3BhdGNoR2FyYmFnZUNvbGxlY3RlZEV2ZW50KElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkhlYXA6OkdhcmJhZ2VDb2xsZWN0aW9uOjpUeXBlLCBTZWNvbmRz
IHN0YXJ0VGltZSwgU2Vjb25kcyBlbmRUaW1lKSBmaW5hbDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlQXVkaXRBZ2VudC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZUF1ZGl0QWdlbnQuY3BwCmluZGV4IGRk
ZDUzYmE1ZGZiY2E1NTM3YmJiNmI3YmUwNjUwNTdkNzJmYmFiZDguLjlhY2ZlNGRkNGIxNjBlZTli
Mzg5MTBjYzljNzVhMjQxMjRjZWZlZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9hZ2VudHMvcGFnZS9QYWdlQXVkaXRBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VBdWRpdEFnZW50LmNwcApAQCAtNTYsNyArNTYsNyBA
QCBQYWdlQXVkaXRBZ2VudDo6UGFnZUF1ZGl0QWdlbnQoUGFnZUFnZW50Q29udGV4dCYgY29udGV4
dCkKIAogUGFnZUF1ZGl0QWdlbnQ6On5QYWdlQXVkaXRBZ2VudCgpID0gZGVmYXVsdDsKIAotSW5q
ZWN0ZWRTY3JpcHQgUGFnZUF1ZGl0QWdlbnQ6OmluamVjdGVkU2NyaXB0Rm9yRXZhbChjb25zdCBp
bnQqIGV4ZWN1dGlvbkNvbnRleHRJZCkKK0luamVjdGVkU2NyaXB0IFBhZ2VBdWRpdEFnZW50Ojpp
bmplY3RlZFNjcmlwdEZvckV2YWwoT3B0aW9uYWw8UHJvdG9jb2w6OlJ1bnRpbWU6OkV4ZWN1dGlv
bkNvbnRleHRJZD4mJiBleGVjdXRpb25Db250ZXh0SWQpCiB7CiAgICAgaWYgKGV4ZWN1dGlvbkNv
bnRleHRJZCkKICAgICAgICAgcmV0dXJuIGluamVjdGVkU2NyaXB0TWFuYWdlcigpLmluamVjdGVk
U2NyaXB0Rm9ySWQoKmV4ZWN1dGlvbkNvbnRleHRJZCk7CkBAIC02NSw5ICs2NSw5IEBAIEluamVj
dGVkU2NyaXB0IFBhZ2VBdWRpdEFnZW50OjppbmplY3RlZFNjcmlwdEZvckV2YWwoY29uc3QgaW50
KiBleGVjdXRpb25Db250ZXh0CiAgICAgcmV0dXJuIGluamVjdGVkU2NyaXB0TWFuYWdlcigpLmlu
amVjdGVkU2NyaXB0Rm9yKHNjcmlwdFN0YXRlKTsKIH0KIAotSW5qZWN0ZWRTY3JpcHQgUGFnZUF1
ZGl0QWdlbnQ6OmluamVjdGVkU2NyaXB0Rm9yRXZhbChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcs
IGNvbnN0IGludCogZXhlY3V0aW9uQ29udGV4dElkKQorSW5qZWN0ZWRTY3JpcHQgUGFnZUF1ZGl0
QWdlbnQ6OmluamVjdGVkU2NyaXB0Rm9yRXZhbChQcm90b2NvbDo6RXJyb3JTdHJpbmcmIGVycm9y
U3RyaW5nLCBPcHRpb25hbDxQcm90b2NvbDo6UnVudGltZTo6RXhlY3V0aW9uQ29udGV4dElkPiYm
IGV4ZWN1dGlvbkNvbnRleHRJZCkKIHsKLSAgICBJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlw
dCA9IGluamVjdGVkU2NyaXB0Rm9yRXZhbChleGVjdXRpb25Db250ZXh0SWQpOworICAgIEluamVj
dGVkU2NyaXB0IGluamVjdGVkU2NyaXB0ID0gaW5qZWN0ZWRTY3JpcHRGb3JFdmFsKFdURk1vdmUo
ZXhlY3V0aW9uQ29udGV4dElkKSk7CiAgICAgaWYgKGluamVjdGVkU2NyaXB0Lmhhc05vVmFsdWUo
KSkgewogICAgICAgICBpZiAoZXhlY3V0aW9uQ29udGV4dElkKQogICAgICAgICAgICAgZXJyb3JT
dHJpbmcgPSAiTWlzc2luZyBpbmplY3RlZCBzY3JpcHQgZm9yIGdpdmVuIGV4ZWN1dGlvbkNvbnRl
eHRJZCJfczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFn
ZS9QYWdlQXVkaXRBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdl
L1BhZ2VBdWRpdEFnZW50LmgKaW5kZXggZGRlYzQ2NTE3ZTFhMDVjYmY1YmY4ZmZkN2QxYWM4ODhh
MDg5NGY3OS4uNjkzZmFjMzI3NDY5YTkwNDRkODcwMTc2ZmFhMmExZDQ5ZmJhMWIzOSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VBdWRpdEFnZW50
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VBdWRpdEFn
ZW50LmgKQEAgLTM3LDE2ICszNywxNiBAQCBjbGFzcyBQYWdlQXVkaXRBZ2VudCBmaW5hbCA6IHB1
YmxpYyBJbnNwZWN0b3I6Okluc3BlY3RvckF1ZGl0QWdlbnQgewogICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOwogcHVibGljOgogICAgIFBhZ2VBdWRpdEFnZW50KFBhZ2VBZ2VudENvbnRleHQm
KTsKLSAgICB+UGFnZUF1ZGl0QWdlbnQoKSBvdmVycmlkZTsKKyAgICB+UGFnZUF1ZGl0QWdlbnQo
KTsKIAogcHJpdmF0ZToKLSAgICBJbnNwZWN0b3I6OkluamVjdGVkU2NyaXB0IGluamVjdGVkU2Ny
aXB0Rm9yRXZhbChjb25zdCBpbnQqIGV4ZWN1dGlvbkNvbnRleHRJZCk7Ci0gICAgSW5zcGVjdG9y
OjpJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdEZvckV2YWwoSW5zcGVjdG9yOjpFcnJvclN0
cmluZyYsIGNvbnN0IGludCogZXhlY3V0aW9uQ29udGV4dElkKSBvdmVycmlkZTsKKyAgICBJbnNw
ZWN0b3I6OkluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0Rm9yRXZhbChPcHRpb25hbDxJbnNw
ZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0SWQ+JiYpOworICAgIElu
c3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHRGb3JFdmFsKEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkVycm9yU3RyaW5nJiwgT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVu
dGltZTo6RXhlY3V0aW9uQ29udGV4dElkPiYmKTsKIAotICAgIHZvaWQgcG9wdWxhdGVBdWRpdE9i
amVjdChKU0M6OkpTR2xvYmFsT2JqZWN0KiwgSlNDOjpTdHJvbmc8SlNDOjpKU09iamVjdD4mIGF1
ZGl0T2JqZWN0KSBvdmVycmlkZTsKKyAgICB2b2lkIHBvcHVsYXRlQXVkaXRPYmplY3QoSlNDOjpK
U0dsb2JhbE9iamVjdCosIEpTQzo6U3Ryb25nPEpTQzo6SlNPYmplY3Q+JiBhdWRpdE9iamVjdCk7
CiAKLSAgICB2b2lkIG11dGVDb25zb2xlKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCB1bm11dGVDb25z
b2xlKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBtdXRlQ29uc29sZSgpOworICAgIHZvaWQgdW5tdXRl
Q29uc29sZSgpOwogCiAgICAgUGFnZSYgbV9pbnNwZWN0ZWRQYWdlOwogfTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlQ29uc29sZUFnZW50LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlQ29uc29sZUFnZW50
LmNwcAppbmRleCAxM2ZkMWQ3ZGFiYWE5OWQwYmIwYzQ5ZmY3YmI1ZTUyZjU0YzY2M2QzLi4xMjEy
Yjg2NmQ5ZTI4OTk2NzdhOTNmZDcxNmMxZTg2OGQzYzFmZmZiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZUNvbnNvbGVBZ2VudC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VDb25zb2xlQWdlbnQuY3Bw
CkBAIC01NCw3OSArNTQsODMgQEAgUGFnZUNvbnNvbGVBZ2VudDo6UGFnZUNvbnNvbGVBZ2VudChQ
YWdlQWdlbnRDb250ZXh0JiBjb250ZXh0KQogCiBQYWdlQ29uc29sZUFnZW50Ojp+UGFnZUNvbnNv
bGVBZ2VudCgpID0gZGVmYXVsdDsKIAotdm9pZCBQYWdlQ29uc29sZUFnZW50OjpjbGVhck1lc3Nh
Z2VzKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZv
aWQ+IFBhZ2VDb25zb2xlQWdlbnQ6OmNsZWFyTWVzc2FnZXMoKQogewogICAgIGlmIChhdXRvKiBk
b21BZ2VudCA9IG1faW5zdHJ1bWVudGluZ0FnZW50cy5wZXJzaXN0ZW50RE9NQWdlbnQoKSkKICAg
ICAgICAgZG9tQWdlbnQtPnJlbGVhc2VEYW5nbGluZ05vZGVzKCk7CiAKLSAgICBXZWJDb25zb2xl
QWdlbnQ6OmNsZWFyTWVzc2FnZXMoZXJyb3JTdHJpbmcpOworICAgIHJldHVybiBXZWJDb25zb2xl
QWdlbnQ6OmNsZWFyTWVzc2FnZXMoKTsKIH0KIAotdm9pZCBQYWdlQ29uc29sZUFnZW50OjpnZXRM
b2dnaW5nQ2hhbm5lbHMoRXJyb3JTdHJpbmcmLCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0
b3I6OlByb3RvY29sOjpDb25zb2xlOjpDaGFubmVsPj4mIGNoYW5uZWxzKQorUHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8UmVmPEpTT046OkFycmF5T2Y8UHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWw+
Pj4gUGFnZUNvbnNvbGVBZ2VudDo6Z2V0TG9nZ2luZ0NoYW5uZWxzKCkKIHsKLSAgICBzdGF0aWMg
Y29uc3Qgc3RydWN0IENoYW5uZWxUYWJsZSB7Ci0gICAgICAgIE5ldmVyRGVzdHJveWVkPFN0cmlu
Zz4gbmFtZTsKLSAgICAgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6Q29uc29sZTo6Q2hhbm5lbFNv
dXJjZSBzb3VyY2U7Ci0gICAgfSBjaGFubmVsVGFibGVbXSA9IHsKLSAgICAgICAgeyBNQUtFX1NU
QVRJQ19TVFJJTkdfSU1QTCgiV2ViUlRDIiksIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNvbnNvbGU6
OkNoYW5uZWxTb3VyY2U6OldlYlJUQyB9LAotICAgICAgICB7IE1BS0VfU1RBVElDX1NUUklOR19J
TVBMKCJNZWRpYSIpLCBJbnNwZWN0b3I6OlByb3RvY29sOjpDb25zb2xlOjpDaGFubmVsU291cmNl
OjpNZWRpYSB9LAotICAgICAgICB7IE1BS0VfU1RBVElDX1NUUklOR19JTVBMKCJNZWRpYVNvdXJj
ZSIpLCBJbnNwZWN0b3I6OlByb3RvY29sOjpDb25zb2xlOjpDaGFubmVsU291cmNlOjpNZWRpYVNv
dXJjZSB9LAotICAgIH07CisgICAgYXV0byBjaGFubmVscyA9IEpTT046OkFycmF5T2Y8UHJvdG9j
b2w6OkNvbnNvbGU6OkNoYW5uZWw+OjpjcmVhdGUoKTsKIAotICAgIGNoYW5uZWxzID0gSlNPTjo6
QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDb25zb2xlOjpDaGFubmVsPjo6Y3JlYXRlKCk7
Ci0KLSAgICBzaXplX3QgbGVuZ3RoID0gV1RGX0FSUkFZX0xFTkdUSChjaGFubmVsVGFibGUpOwot
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgYXV0byog
bG9nQ2hhbm5lbCA9IGdldExvZ0NoYW5uZWwoY2hhbm5lbFRhYmxlW2ldLm5hbWUpOworICAgIGF1
dG8gYWRkTG9nQ2hhbm5lbCA9IFsmXSAoUHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWxTb3VyY2Ug
c291cmNlKSB7CisgICAgICAgIGF1dG8qIGxvZ0NoYW5uZWwgPSBnZXRMb2dDaGFubmVsKFByb3Rv
Y29sOjpIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShzb3VyY2UpKTsKICAgICAgICAgaWYg
KCFsb2dDaGFubmVsKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIGF1dG8gbGV2ZWwg
PSBJbnNwZWN0b3I6OlByb3RvY29sOjpDb25zb2xlOjpDaGFubmVsTGV2ZWw6Ok9mZjsKKyAgICAg
ICAgYXV0byBsZXZlbCA9IFByb3RvY29sOjpDb25zb2xlOjpDaGFubmVsTGV2ZWw6Ok9mZjsKICAg
ICAgICAgaWYgKGxvZ0NoYW5uZWwtPnN0YXRlICE9IFdURkxvZ0NoYW5uZWxTdGF0ZTo6T2ZmKSB7
CiAgICAgICAgICAgICBzd2l0Y2ggKGxvZ0NoYW5uZWwtPmxldmVsKSB7CiAgICAgICAgICAgICBj
YXNlIFdURkxvZ0xldmVsOjpBbHdheXM6CiAgICAgICAgICAgICBjYXNlIFdURkxvZ0xldmVsOjpF
cnJvcjoKICAgICAgICAgICAgIGNhc2UgV1RGTG9nTGV2ZWw6Oldhcm5pbmc6CiAgICAgICAgICAg
ICBjYXNlIFdURkxvZ0xldmVsOjpJbmZvOgotICAgICAgICAgICAgICAgIGxldmVsID0gSW5zcGVj
dG9yOjpQcm90b2NvbDo6Q29uc29sZTo6Q2hhbm5lbExldmVsOjpCYXNpYzsKKyAgICAgICAgICAg
ICAgICBsZXZlbCA9IFByb3RvY29sOjpDb25zb2xlOjpDaGFubmVsTGV2ZWw6OkJhc2ljOwogICAg
ICAgICAgICAgICAgIGJyZWFrOworCiAgICAgICAgICAgICBjYXNlIFdURkxvZ0xldmVsOjpEZWJ1
ZzoKLSAgICAgICAgICAgICAgICBsZXZlbCA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNvbnNvbGU6
OkNoYW5uZWxMZXZlbDo6VmVyYm9zZTsKKyAgICAgICAgICAgICAgICBsZXZlbCA9IFByb3RvY29s
OjpDb25zb2xlOjpDaGFubmVsTGV2ZWw6OlZlcmJvc2U7CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBhdXRvIGNoYW5uZWwgPSBJbnNw
ZWN0b3I6OlByb3RvY29sOjpDb25zb2xlOjpDaGFubmVsOjpjcmVhdGUoKQotICAgICAgICAgICAg
LnNldFNvdXJjZShjaGFubmVsVGFibGVbaV0uc291cmNlKQorICAgICAgICBhdXRvIGNoYW5uZWwg
PSBQcm90b2NvbDo6Q29uc29sZTo6Q2hhbm5lbDo6Y3JlYXRlKCkKKyAgICAgICAgICAgIC5zZXRT
b3VyY2Uoc291cmNlKQogICAgICAgICAgICAgLnNldExldmVsKGxldmVsKQogICAgICAgICAgICAg
LnJlbGVhc2UoKTsKICAgICAgICAgY2hhbm5lbHMtPmFkZEl0ZW0oV1RGTW92ZShjaGFubmVsKSk7
Ci0gICAgfQorICAgIH07CisgICAgYWRkTG9nQ2hhbm5lbChQcm90b2NvbDo6Q29uc29sZTo6Q2hh
bm5lbFNvdXJjZTo6WE1MKTsKKyAgICBhZGRMb2dDaGFubmVsKFByb3RvY29sOjpDb25zb2xlOjpD
aGFubmVsU291cmNlOjpKYXZhU2NyaXB0KTsKKyAgICBhZGRMb2dDaGFubmVsKFByb3RvY29sOjpD
b25zb2xlOjpDaGFubmVsU291cmNlOjpOZXR3b3JrKTsKKyAgICBhZGRMb2dDaGFubmVsKFByb3Rv
Y29sOjpDb25zb2xlOjpDaGFubmVsU291cmNlOjpDb25zb2xlQVBJKTsKKyAgICBhZGRMb2dDaGFu
bmVsKFByb3RvY29sOjpDb25zb2xlOjpDaGFubmVsU291cmNlOjpTdG9yYWdlKTsKKyAgICBhZGRM
b2dDaGFubmVsKFByb3RvY29sOjpDb25zb2xlOjpDaGFubmVsU291cmNlOjpBcHBjYWNoZSk7Cisg
ICAgYWRkTG9nQ2hhbm5lbChQcm90b2NvbDo6Q29uc29sZTo6Q2hhbm5lbFNvdXJjZTo6UmVuZGVy
aW5nKTsKKyAgICBhZGRMb2dDaGFubmVsKFByb3RvY29sOjpDb25zb2xlOjpDaGFubmVsU291cmNl
OjpDU1MpOworICAgIGFkZExvZ0NoYW5uZWwoUHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWxTb3Vy
Y2U6OlNlY3VyaXR5KTsKKyAgICBhZGRMb2dDaGFubmVsKFByb3RvY29sOjpDb25zb2xlOjpDaGFu
bmVsU291cmNlOjpDb250ZW50QmxvY2tlcik7CisgICAgYWRkTG9nQ2hhbm5lbChQcm90b2NvbDo6
Q29uc29sZTo6Q2hhbm5lbFNvdXJjZTo6TWVkaWEpOworICAgIGFkZExvZ0NoYW5uZWwoUHJvdG9j
b2w6OkNvbnNvbGU6OkNoYW5uZWxTb3VyY2U6Ok1lZGlhU291cmNlKTsKKyAgICBhZGRMb2dDaGFu
bmVsKFByb3RvY29sOjpDb25zb2xlOjpDaGFubmVsU291cmNlOjpXZWJSVEMpOworICAgIGFkZExv
Z0NoYW5uZWwoUHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWxTb3VyY2U6OklUUERlYnVnKTsKKyAg
ICBhZGRMb2dDaGFubmVsKFByb3RvY29sOjpDb25zb2xlOjpDaGFubmVsU291cmNlOjpBZENsaWNr
QXR0cmlidXRpb24pOworICAgIGFkZExvZ0NoYW5uZWwoUHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5u
ZWxTb3VyY2U6Ok90aGVyKTsKKworICAgIHJldHVybiBXVEZNb3ZlKGNoYW5uZWxzKTsKIH0KIAot
c3RhdGljIE9wdGlvbmFsPHN0ZDo6cGFpcjxXVEZMb2dDaGFubmVsU3RhdGUsIFdURkxvZ0xldmVs
Pj4gY2hhbm5lbENvbmZpZ3VyYXRpb25Gb3JTdHJpbmcoY29uc3QgU3RyaW5nJiBsZXZlbFN0cmlu
ZykKK1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IFBhZ2VDb25zb2xlQWdlbnQ6OnNldExv
Z2dpbmdDaGFubmVsTGV2ZWwoUHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWxTb3VyY2Ugc291cmNl
LCBQcm90b2NvbDo6Q29uc29sZTo6Q2hhbm5lbExldmVsIGxldmVsKQogewotICAgIGlmIChlcXVh
bElnbm9yaW5nQVNDSUlDYXNlKGxldmVsU3RyaW5nLCAib2ZmIikpCi0gICAgICAgIHJldHVybiB7
IHsgV1RGTG9nQ2hhbm5lbFN0YXRlOjpPZmYsIFdURkxvZ0xldmVsOjpFcnJvciB9IH07CisgICAg
c3dpdGNoIChsZXZlbCkgeworICAgIGNhc2UgUHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWxMZXZl
bDo6T2ZmOgorICAgICAgICBtX2luc3BlY3RlZFBhZ2UuY29uZmlndXJlTG9nZ2luZ0NoYW5uZWwo
UHJvdG9jb2w6OkhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKHNvdXJjZSksIFdURkxvZ0No
YW5uZWxTdGF0ZTo6T2ZmLCBXVEZMb2dMZXZlbDo6RXJyb3IpOworICAgICAgICByZXR1cm4geyB9
OwogCi0gICAgaWYgKGVxdWFsSWdub3JpbmdBU0NJSUNhc2UobGV2ZWxTdHJpbmcsICJiYXNpYyIp
KQotICAgICAgICByZXR1cm4geyB7IFdURkxvZ0NoYW5uZWxTdGF0ZTo6T24sIFdURkxvZ0xldmVs
OjpJbmZvIH0gfTsKKyAgICBjYXNlIFByb3RvY29sOjpDb25zb2xlOjpDaGFubmVsTGV2ZWw6OkJh
c2ljOgorICAgICAgICBtX2luc3BlY3RlZFBhZ2UuY29uZmlndXJlTG9nZ2luZ0NoYW5uZWwoUHJv
dG9jb2w6OkhlbHBlcnM6OmdldEVudW1Db25zdGFudFZhbHVlKHNvdXJjZSksIFdURkxvZ0NoYW5u
ZWxTdGF0ZTo6T24sIFdURkxvZ0xldmVsOjpJbmZvKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAot
ICAgIGlmIChlcXVhbElnbm9yaW5nQVNDSUlDYXNlKGxldmVsU3RyaW5nLCAidmVyYm9zZSIpKQot
ICAgICAgICByZXR1cm4geyB7IFdURkxvZ0NoYW5uZWxTdGF0ZTo6T24sIFdURkxvZ0xldmVsOjpE
ZWJ1ZyB9IH07Ci0KLSAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotfQotCi12b2lkIFBhZ2VDb25z
b2xlQWdlbnQ6OnNldExvZ2dpbmdDaGFubmVsTGV2ZWwoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5n
LCBjb25zdCBTdHJpbmcmIGNoYW5uZWxOYW1lLCBjb25zdCBTdHJpbmcmIGNoYW5uZWxMZXZlbCkK
LXsKLSAgICBhdXRvIGNvbmZpZ3VyYXRpb24gPSBjaGFubmVsQ29uZmlndXJhdGlvbkZvclN0cmlu
ZyhjaGFubmVsTGV2ZWwpOwotICAgIGlmICghY29uZmlndXJhdGlvbikgewotICAgICAgICBlcnJv
clN0cmluZyA9IG1ha2VTdHJpbmcoIlVua25vd24gY2hhbm5lbExldmVsOiAiX3MsIGNoYW5uZWxM
ZXZlbCk7Ci0gICAgICAgIHJldHVybjsKKyAgICBjYXNlIFByb3RvY29sOjpDb25zb2xlOjpDaGFu
bmVsTGV2ZWw6OlZlcmJvc2U6CisgICAgICAgIG1faW5zcGVjdGVkUGFnZS5jb25maWd1cmVMb2dn
aW5nQ2hhbm5lbChQcm90b2NvbDo6SGVscGVyczo6Z2V0RW51bUNvbnN0YW50VmFsdWUoc291cmNl
KSwgV1RGTG9nQ2hhbm5lbFN0YXRlOjpPbiwgV1RGTG9nTGV2ZWw6OkRlYnVnKTsKKyAgICAgICAg
cmV0dXJuIHsgfTsKICAgICB9CiAKLSAgICBtX2luc3BlY3RlZFBhZ2UuY29uZmlndXJlTG9nZ2lu
Z0NoYW5uZWwoY2hhbm5lbE5hbWUsIGNvbmZpZ3VyYXRpb24udmFsdWUoKS5maXJzdCwgY29uZmln
dXJhdGlvbi52YWx1ZSgpLnNlY29uZCk7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
cmV0dXJuIHsgfTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VDb25zb2xlQWdlbnQuaCBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlQ29uc29sZUFnZW50LmgKaW5k
ZXggNGM0NWYyZGFkMGY3YzFiNDA0NTM5ZmU0ZjU3ZTVhODZkYjIwNjMxOC4uNDFmZTc2ZDAzMjA3
MGUwZDQxMDNlNDBhMmMxNDRjZTM3OTgxYzgzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VDb25zb2xlQWdlbnQuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZUNvbnNvbGVBZ2VudC5oCkBAIC00MSwxMiAr
NDEsMTIgQEAgY2xhc3MgUGFnZUNvbnNvbGVBZ2VudCBmaW5hbCA6IHB1YmxpYyBXZWJDb25zb2xl
QWdlbnQgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIFBhZ2VD
b25zb2xlQWdlbnQoUGFnZUFnZW50Q29udGV4dCYpOwotICAgIH5QYWdlQ29uc29sZUFnZW50KCkg
b3ZlcnJpZGU7CisgICAgflBhZ2VDb25zb2xlQWdlbnQoKTsKIAogICAgIC8vIENvbnNvbGVCYWNr
ZW5kRGlzcGF0Y2hlckhhbmRsZXIKLSAgICB2b2lkIGNsZWFyTWVzc2FnZXMoRXJyb3JTdHJpbmcm
KSBvdmVycmlkZTsKLSAgICB2b2lkIGdldExvZ2dpbmdDaGFubmVscyhFcnJvclN0cmluZyYsIFJl
ZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkNvbnNvbGU6OkNoYW5uZWw+
PiYpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0TG9nZ2luZ0NoYW5uZWxMZXZlbChFcnJvclN0cmlu
ZyYsIGNvbnN0IFN0cmluZyYgY2hhbm5lbCwgY29uc3QgU3RyaW5nJiBsZXZlbCkgb3ZlcnJpZGU7
CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBjbGVhck1lc3Nh
Z2VzKCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SlNPTjo6
QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpDb25zb2xlOjpDaGFubmVsPj4+IGdldExvZ2dp
bmdDaGFubmVscygpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9p
ZD4gc2V0TG9nZ2luZ0NoYW5uZWxMZXZlbChJbnNwZWN0b3I6OlByb3RvY29sOjpDb25zb2xlOjpD
aGFubmVsU291cmNlLCBJbnNwZWN0b3I6OlByb3RvY29sOjpDb25zb2xlOjpDaGFubmVsTGV2ZWwp
OwogCiBwcml2YXRlOgogICAgIEluc3RydW1lbnRpbmdBZ2VudHMmIG1faW5zdHJ1bWVudGluZ0Fn
ZW50czsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9Q
YWdlRE9NRGVidWdnZXJBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRz
L3BhZ2UvUGFnZURPTURlYnVnZ2VyQWdlbnQuY3BwCmluZGV4IDdjNWZmYTRlMzgzZjUyY2FiNWUy
YTI3ZmQ5MTU5MDlmYmNlZjUxNGMuLmM4OGJiZGMwM2QyNTQxMGZiNjk1OGIwZjA5YWZjNWJmMTg4
ZGIyNTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9Q
YWdlRE9NRGVidWdnZXJBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Fn
ZW50cy9wYWdlL1BhZ2VET01EZWJ1Z2dlckFnZW50LmNwcApAQCAtNjksODQgKzY5LDc0IEBAIHZv
aWQgUGFnZURPTURlYnVnZ2VyQWdlbnQ6OmRpc2FibGUoKQogICAgIEluc3BlY3RvckRPTURlYnVn
Z2VyQWdlbnQ6OmRpc2FibGUoKTsKIH0KIAotdm9pZCBQYWdlRE9NRGVidWdnZXJBZ2VudDo6c2V0
RE9NQnJlYWtwb2ludChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGludCBub2RlSWQsIGNvbnN0
IFN0cmluZyYgdHlwZVN0cmluZywgY29uc3QgSlNPTjo6T2JqZWN0KiBvcHRpb25zUGF5bG9hZCkK
K1Byb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IFBhZ2VET01EZWJ1Z2dlckFnZW50OjpzZXRE
T01CcmVha3BvaW50KFByb3RvY29sOjpET006Ok5vZGVJZCBub2RlSWQsIFByb3RvY29sOjpET01E
ZWJ1Z2dlcjo6RE9NQnJlYWtwb2ludFR5cGUgdHlwZSwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBv
cHRpb25zKQogeworICAgIFByb3RvY29sOjpFcnJvclN0cmluZyBlcnJvclN0cmluZzsKKwogICAg
IGF1dG8qIGRvbUFnZW50ID0gbV9pbnN0cnVtZW50aW5nQWdlbnRzLnBlcnNpc3RlbnRET01BZ2Vu
dCgpOwotICAgIGlmICghZG9tQWdlbnQpIHsKLSAgICAgICAgZXJyb3JTdHJpbmcgPSAiRE9NIGRv
bWFpbiBtdXN0IGJlIGVuYWJsZWQiX3M7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYg
KCFkb21BZ2VudCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJET00gZG9tYWluIG11
c3QgYmUgZW5hYmxlZCJfcyk7CiAKICAgICBOb2RlKiBub2RlID0gZG9tQWdlbnQtPmFzc2VydE5v
ZGUoZXJyb3JTdHJpbmcsIG5vZGVJZCk7CiAgICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm47
CisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChlcnJvclN0cmluZyk7CiAKLSAgICBhdXRv
IHR5cGUgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpJbnNwZWN0b3JIZWxwZXJzOjpwYXJzZUVudW1W
YWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NRGVidWdnZXI6OkRPTUJyZWFr
cG9pbnRUeXBlPih0eXBlU3RyaW5nKTsKLSAgICBpZiAoIXR5cGUpIHsKLSAgICAgICAgZXJyb3JT
dHJpbmcgPSBtYWtlU3RyaW5nKCJVbmtub3duIHR5cGU6ICJfcywgdHlwZVN0cmluZyk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBhdXRvIGJyZWFrcG9pbnQgPSBJbnNwZWN0b3JEZWJ1
Z2dlckFnZW50OjpkZWJ1Z2dlckJyZWFrcG9pbnRGcm9tUGF5bG9hZChlcnJvclN0cmluZywgb3B0
aW9uc1BheWxvYWQpOworICAgIGF1dG8gYnJlYWtwb2ludCA9IEluc3BlY3RvckRlYnVnZ2VyQWdl
bnQ6OmRlYnVnZ2VyQnJlYWtwb2ludEZyb21QYXlsb2FkKGVycm9yU3RyaW5nLCBXVEZNb3ZlKG9w
dGlvbnMpKTsKICAgICBpZiAoIWJyZWFrcG9pbnQpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAg
cmV0dXJuIG1ha2VVbmV4cGVjdGVkKGVycm9yU3RyaW5nKTsKIAotICAgIHN3aXRjaCAoKnR5cGUp
IHsKLSAgICBjYXNlIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpET01CcmVha3Bv
aW50VHlwZTo6U3VidHJlZU1vZGlmaWVkOgorICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2Ug
UHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpET01CcmVha3BvaW50VHlwZTo6U3VidHJlZU1vZGlmaWVk
OgogICAgICAgICBpZiAoIW1fZG9tU3VidHJlZU1vZGlmaWVkQnJlYWtwb2ludHMuYWRkKG5vZGUs
IGJyZWFrcG9pbnQucmVsZWFzZU5vbk51bGwoKSkpCi0gICAgICAgICAgICBlcnJvclN0cmluZyA9
ICJCcmVha3BvaW50IGZvciBnaXZlbiBub2RlIGFuZCBnaXZlbiB0eXBlIGFscmVhZHkgZXhpc3Rz
Il9zOwotICAgICAgICByZXR1cm47CisgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQo
IkJyZWFrcG9pbnQgZm9yIGdpdmVuIG5vZGUgYW5kIGdpdmVuIHR5cGUgYWxyZWFkeSBleGlzdHMi
X3MpOworICAgICAgICByZXR1cm4geyB9OwogCi0gICAgY2FzZSBJbnNwZWN0b3I6OlByb3RvY29s
OjpET01EZWJ1Z2dlcjo6RE9NQnJlYWtwb2ludFR5cGU6OkF0dHJpYnV0ZU1vZGlmaWVkOgorICAg
IGNhc2UgUHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpET01CcmVha3BvaW50VHlwZTo6QXR0cmlidXRl
TW9kaWZpZWQ6CiAgICAgICAgIGlmICghbV9kb21BdHRyaWJ1dGVNb2RpZmllZEJyZWFrcG9pbnRz
LmFkZChub2RlLCBicmVha3BvaW50LnJlbGVhc2VOb25OdWxsKCkpKQotICAgICAgICAgICAgZXJy
b3JTdHJpbmcgPSAiQnJlYWtwb2ludCBmb3IgZ2l2ZW4gbm9kZSBhbmQgZ2l2ZW4gdHlwZSBhbHJl
YWR5IGV4aXN0cyJfczsKLSAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgcmV0dXJuIG1ha2VV
bmV4cGVjdGVkKCJCcmVha3BvaW50IGZvciBnaXZlbiBub2RlIGFuZCBnaXZlbiB0eXBlIGFscmVh
ZHkgZXhpc3RzIl9zKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIGNhc2UgSW5zcGVjdG9y
OjpQcm90b2NvbDo6RE9NRGVidWdnZXI6OkRPTUJyZWFrcG9pbnRUeXBlOjpOb2RlUmVtb3ZlZDoK
KyAgICBjYXNlIFByb3RvY29sOjpET01EZWJ1Z2dlcjo6RE9NQnJlYWtwb2ludFR5cGU6Ok5vZGVS
ZW1vdmVkOgogICAgICAgICBpZiAoIW1fZG9tTm9kZVJlbW92ZWRCcmVha3BvaW50cy5hZGQobm9k
ZSwgYnJlYWtwb2ludC5yZWxlYXNlTm9uTnVsbCgpKSkKLSAgICAgICAgICAgIGVycm9yU3RyaW5n
ID0gIkJyZWFrcG9pbnQgZm9yIGdpdmVuIG5vZGUgYW5kIGdpdmVuIHR5cGUgYWxyZWFkeSBleGlz
dHMiX3M7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3Rl
ZCgiQnJlYWtwb2ludCBmb3IgZ2l2ZW4gbm9kZSBhbmQgZ2l2ZW4gdHlwZSBhbHJlYWR5IGV4aXN0
cyJfcyk7CisgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCiAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJOb3Qgc3VwcG9ydGVkIik7CiB9CiAK
LXZvaWQgUGFnZURPTURlYnVnZ2VyQWdlbnQ6OnJlbW92ZURPTUJyZWFrcG9pbnQoRXJyb3JTdHJp
bmcmIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkLCBjb25zdCBTdHJpbmcmIHR5cGVTdHJpbmcpCitQ
cm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBQYWdlRE9NRGVidWdnZXJBZ2VudDo6cmVtb3Zl
RE9NQnJlYWtwb2ludChQcm90b2NvbDo6RE9NOjpOb2RlSWQgbm9kZUlkLCBQcm90b2NvbDo6RE9N
RGVidWdnZXI6OkRPTUJyZWFrcG9pbnRUeXBlIHR5cGUpCiB7CisgICAgUHJvdG9jb2w6OkVycm9y
U3RyaW5nIGVycm9yU3RyaW5nOworCiAgICAgYXV0byogZG9tQWdlbnQgPSBtX2luc3RydW1lbnRp
bmdBZ2VudHMucGVyc2lzdGVudERPTUFnZW50KCk7Ci0gICAgaWYgKCFkb21BZ2VudCkgewotICAg
ICAgICBlcnJvclN0cmluZyA9ICJET00gZG9tYWluIG11c3QgYmUgZW5hYmxlZCJfczsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAoIWRvbUFnZW50KQorICAgICAgICByZXR1cm4gbWFr
ZVVuZXhwZWN0ZWQoIkRPTSBkb21haW4gbXVzdCBiZSBlbmFibGVkIl9zKTsKIAogICAgIE5vZGUq
IG5vZGUgPSBkb21BZ2VudC0+YXNzZXJ0Tm9kZShlcnJvclN0cmluZywgbm9kZUlkKTsKICAgICBp
ZiAoIW5vZGUpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVk
KGVycm9yU3RyaW5nKTsKIAotICAgIGF1dG8gdHlwZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6Oklu
c3BlY3RvckhlbHBlcnM6OnBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3Rv
Y29sOjpET01EZWJ1Z2dlcjo6RE9NQnJlYWtwb2ludFR5cGU+KHR5cGVTdHJpbmcpOwotICAgIGlm
ICghdHlwZSkgewotICAgICAgICBlcnJvclN0cmluZyA9IG1ha2VTdHJpbmcoIlVua25vd24gdHlw
ZTogIl9zLCB0eXBlU3RyaW5nKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHN3aXRj
aCAoKnR5cGUpIHsKLSAgICBjYXNlIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpE
T01CcmVha3BvaW50VHlwZTo6U3VidHJlZU1vZGlmaWVkOgorICAgIHN3aXRjaCAodHlwZSkgewor
ICAgIGNhc2UgUHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpET01CcmVha3BvaW50VHlwZTo6U3VidHJl
ZU1vZGlmaWVkOgogICAgICAgICBpZiAoIW1fZG9tU3VidHJlZU1vZGlmaWVkQnJlYWtwb2ludHMu
cmVtb3ZlKG5vZGUpKQotICAgICAgICAgICAgZXJyb3JTdHJpbmcgPSAiQnJlYWtwb2ludCBmb3Ig
Z2l2ZW4gbm9kZSBhbmQgZ2l2ZW4gdHlwZSBtaXNzaW5nIl9zOwotICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkJyZWFrcG9pbnQgZm9yIGdpdmVuIG5v
ZGUgYW5kIGdpdmVuIHR5cGUgbWlzc2luZyJfcyk7CisgICAgICAgIHJldHVybiB7IH07CiAKLSAg
ICBjYXNlIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpET01CcmVha3BvaW50VHlw
ZTo6QXR0cmlidXRlTW9kaWZpZWQ6CisgICAgY2FzZSBQcm90b2NvbDo6RE9NRGVidWdnZXI6OkRP
TUJyZWFrcG9pbnRUeXBlOjpBdHRyaWJ1dGVNb2RpZmllZDoKICAgICAgICAgaWYgKCFtX2RvbUF0
dHJpYnV0ZU1vZGlmaWVkQnJlYWtwb2ludHMucmVtb3ZlKG5vZGUpKQotICAgICAgICAgICAgZXJy
b3JTdHJpbmcgPSAiQnJlYWtwb2ludCBmb3IgZ2l2ZW4gbm9kZSBhbmQgZ2l2ZW4gdHlwZSBtaXNz
aW5nIl9zOwotICAgICAgICByZXR1cm47CisgICAgICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0
ZWQoIkJyZWFrcG9pbnQgZm9yIGdpdmVuIG5vZGUgYW5kIGdpdmVuIHR5cGUgbWlzc2luZyJfcyk7
CisgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBjYXNlIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRP
TURlYnVnZ2VyOjpET01CcmVha3BvaW50VHlwZTo6Tm9kZVJlbW92ZWQ6CisgICAgY2FzZSBQcm90
b2NvbDo6RE9NRGVidWdnZXI6OkRPTUJyZWFrcG9pbnRUeXBlOjpOb2RlUmVtb3ZlZDoKICAgICAg
ICAgaWYgKCFtX2RvbU5vZGVSZW1vdmVkQnJlYWtwb2ludHMucmVtb3ZlKG5vZGUpKQotICAgICAg
ICAgICAgZXJyb3JTdHJpbmcgPSAiQnJlYWtwb2ludCBmb3IgZ2l2ZW4gbm9kZSBhbmQgZ2l2ZW4g
dHlwZSBtaXNzaW5nIl9zOwotICAgICAgICByZXR1cm47CisgICAgICAgICAgICByZXR1cm4gbWFr
ZVVuZXhwZWN0ZWQoIkJyZWFrcG9pbnQgZm9yIGdpdmVuIG5vZGUgYW5kIGdpdmVuIHR5cGUgbWlz
c2luZyJfcyk7CisgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCiAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKCJOb3Qgc3VwcG9ydGVkIik7CiB9
CiAKIHZvaWQgUGFnZURPTURlYnVnZ2VyQWdlbnQ6Om1haW5GcmFtZU5hdmlnYXRlZCgpCkBAIC0y
MTMsNyArMjAzLDcgQEAgdm9pZCBQYWdlRE9NRGVidWdnZXJBZ2VudDo6d2lsbEluc2VydERPTU5v
ZGUoTm9kZSYgcGFyZW50KQogCiAgICAgQVNTRVJUKGNsb3Nlc3RCcmVha3BvaW50T3duZXIpOwog
Ci0gICAgYXV0byBwYXVzZURhdGEgPSBidWlsZFBhdXNlRGF0YUZvckRPTUJyZWFrcG9pbnQoSW5z
cGVjdG9yOjpQcm90b2NvbDo6RE9NRGVidWdnZXI6OkRPTUJyZWFrcG9pbnRUeXBlOjpTdWJ0cmVl
TW9kaWZpZWQsICpjbG9zZXN0QnJlYWtwb2ludE93bmVyKTsKKyAgICBhdXRvIHBhdXNlRGF0YSA9
IGJ1aWxkUGF1c2VEYXRhRm9yRE9NQnJlYWtwb2ludChQcm90b2NvbDo6RE9NRGVidWdnZXI6OkRP
TUJyZWFrcG9pbnRUeXBlOjpTdWJ0cmVlTW9kaWZpZWQsICpjbG9zZXN0QnJlYWtwb2ludE93bmVy
KTsKICAgICBwYXVzZURhdGEtPnNldEJvb2xlYW4oImluc2VydGlvbiIsIHRydWUpOwogICAgIC8v
IEZJWE1FOiA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMjEzNDk5PiBXZWIgSW5zcGVjdG9yOiBhbGxv
dyBET00gbm9kZXMgdG8gYmUgaW5zdHJ1bWVudGVkIGF0IGFueSBwb2ludCwgcmVnYXJkbGVzcyBv
ZiB3aGV0aGVyIHRoZSBtYWluIGRvY3VtZW50IGhhcyBhbHNvIGJlZW4gaW5zdHJ1bWVudGVkCiAg
ICAgLy8gSW5jbHVkZSB0aGUgbmV3IGNoaWxkIG5vZGUgSUQgc28gdGhlIGZyb250ZW5kIGNhbiBz
aG93IHRoZSBub2RlIHRoYXQncyBhYm91dCB0byBiZSBpbnNlcnRlZC4KQEAgLTIzMCw3ICsyMjAs
NyBAQCB2b2lkIFBhZ2VET01EZWJ1Z2dlckFnZW50Ojp3aWxsUmVtb3ZlRE9NTm9kZShOb2RlJiBu
b2RlKQogCiAgICAgT3B0aW9uYWw8c2l6ZV90PiBjbG9zZXN0RGlzdGFuY2U7CiAgICAgUmVmUHRy
PEpTQzo6QnJlYWtwb2ludD4gY2xvc2VzdEJyZWFrcG9pbnQ7Ci0gICAgT3B0aW9uYWw8SW5zcGVj
dG9yOjpQcm90b2NvbDo6RE9NRGVidWdnZXI6OkRPTUJyZWFrcG9pbnRUeXBlPiBjbG9zZXN0QnJl
YWtwb2ludFR5cGU7CisgICAgT3B0aW9uYWw8UHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpET01CcmVh
a3BvaW50VHlwZT4gY2xvc2VzdEJyZWFrcG9pbnRUeXBlOwogICAgIE5vZGUqIGNsb3Nlc3RCcmVh
a3BvaW50T3duZXIgPSBudWxscHRyOwogCiAgICAgZm9yIChhdXRvIFticmVha3BvaW50T3duZXIs
IGJyZWFrcG9pbnRdIDogbV9kb21Ob2RlUmVtb3ZlZEJyZWFrcG9pbnRzKSB7CkBAIC0yNDEsNyAr
MjMxLDcgQEAgdm9pZCBQYWdlRE9NRGVidWdnZXJBZ2VudDo6d2lsbFJlbW92ZURPTU5vZGUoTm9k
ZSYgbm9kZSkKICAgICAgICAgaWYgKCFjbG9zZXN0RGlzdGFuY2UgfHwgZGlzdGFuY2UgPCBjbG9z
ZXN0RGlzdGFuY2UpIHsKICAgICAgICAgICAgIGNsb3Nlc3REaXN0YW5jZSA9IGRpc3RhbmNlOwog
ICAgICAgICAgICAgY2xvc2VzdEJyZWFrcG9pbnQgPSBicmVha3BvaW50LmNvcHlSZWYoKTsKLSAg
ICAgICAgICAgIGNsb3Nlc3RCcmVha3BvaW50VHlwZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRP
TURlYnVnZ2VyOjpET01CcmVha3BvaW50VHlwZTo6Tm9kZVJlbW92ZWQ7CisgICAgICAgICAgICBj
bG9zZXN0QnJlYWtwb2ludFR5cGUgPSBQcm90b2NvbDo6RE9NRGVidWdnZXI6OkRPTUJyZWFrcG9p
bnRUeXBlOjpOb2RlUmVtb3ZlZDsKICAgICAgICAgICAgIGNsb3Nlc3RCcmVha3BvaW50T3duZXIg
PSBicmVha3BvaW50T3duZXI7CiAgICAgICAgIH0KICAgICB9CkBAIC0yNTUsNyArMjQ1LDcgQEAg
dm9pZCBQYWdlRE9NRGVidWdnZXJBZ2VudDo6d2lsbFJlbW92ZURPTU5vZGUoTm9kZSYgbm9kZSkK
ICAgICAgICAgICAgIGlmICghY2xvc2VzdERpc3RhbmNlIHx8IGRpc3RhbmNlIDwgY2xvc2VzdERp
c3RhbmNlKSB7CiAgICAgICAgICAgICAgICAgY2xvc2VzdERpc3RhbmNlID0gZGlzdGFuY2U7CiAg
ICAgICAgICAgICAgICAgY2xvc2VzdEJyZWFrcG9pbnQgPSBicmVha3BvaW50LmNvcHlSZWYoKTsK
LSAgICAgICAgICAgICAgICBjbG9zZXN0QnJlYWtwb2ludFR5cGUgPSBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpET01EZWJ1Z2dlcjo6RE9NQnJlYWtwb2ludFR5cGU6OlN1YnRyZWVNb2RpZmllZDsKKyAg
ICAgICAgICAgICAgICBjbG9zZXN0QnJlYWtwb2ludFR5cGUgPSBQcm90b2NvbDo6RE9NRGVidWdn
ZXI6OkRPTUJyZWFrcG9pbnRUeXBlOjpTdWJ0cmVlTW9kaWZpZWQ7CiAgICAgICAgICAgICAgICAg
Y2xvc2VzdEJyZWFrcG9pbnRPd25lciA9IGJyZWFrcG9pbnRPd25lcjsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQpAQCAtMjk2LDcgKzI4Niw3IEBAIHZvaWQgUGFnZURPTURlYnVnZ2VyQWdlbnQ6
OndpbGxNb2RpZnlET01BdHRyKEVsZW1lbnQmIGVsZW1lbnQpCiAgICAgaWYgKGl0ID09IG1fZG9t
QXR0cmlidXRlTW9kaWZpZWRCcmVha3BvaW50cy5lbmQoKSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgYXV0byBwYXVzZURhdGEgPSBidWlsZFBhdXNlRGF0YUZvckRPTUJyZWFrcG9pbnQoSW5zcGVj
dG9yOjpQcm90b2NvbDo6RE9NRGVidWdnZXI6OkRPTUJyZWFrcG9pbnRUeXBlOjpBdHRyaWJ1dGVN
b2RpZmllZCwgZWxlbWVudCk7CisgICAgYXV0byBwYXVzZURhdGEgPSBidWlsZFBhdXNlRGF0YUZv
ckRPTUJyZWFrcG9pbnQoUHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpET01CcmVha3BvaW50VHlwZTo6
QXR0cmlidXRlTW9kaWZpZWQsIGVsZW1lbnQpOwogICAgIG1fZGVidWdnZXJBZ2VudC0+YnJlYWtQ
cm9ncmFtKEluc3BlY3Rvcjo6RGVidWdnZXJGcm9udGVuZERpc3BhdGNoZXI6OlJlYXNvbjo6RE9N
LCBXVEZNb3ZlKHBhdXNlRGF0YSksIGl0LT52YWx1ZS5jb3B5UmVmKCkpOwogfQogCkBAIC0zMzMs
MjcgKzMyMywyOCBAQCB2b2lkIFBhZ2VET01EZWJ1Z2dlckFnZW50Ojp3aWxsSW52YWxpZGF0ZVN0
eWxlQXR0cihFbGVtZW50JiBlbGVtZW50KQogICAgIGlmIChpdCA9PSBtX2RvbUF0dHJpYnV0ZU1v
ZGlmaWVkQnJlYWtwb2ludHMuZW5kKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gcGF1
c2VEYXRhID0gYnVpbGRQYXVzZURhdGFGb3JET01CcmVha3BvaW50KEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRPTURlYnVnZ2VyOjpET01CcmVha3BvaW50VHlwZTo6QXR0cmlidXRlTW9kaWZpZWQsIGVs
ZW1lbnQpOworICAgIGF1dG8gcGF1c2VEYXRhID0gYnVpbGRQYXVzZURhdGFGb3JET01CcmVha3Bv
aW50KFByb3RvY29sOjpET01EZWJ1Z2dlcjo6RE9NQnJlYWtwb2ludFR5cGU6OkF0dHJpYnV0ZU1v
ZGlmaWVkLCBlbGVtZW50KTsKICAgICBtX2RlYnVnZ2VyQWdlbnQtPmJyZWFrUHJvZ3JhbShJbnNw
ZWN0b3I6OkRlYnVnZ2VyRnJvbnRlbmREaXNwYXRjaGVyOjpSZWFzb246OkRPTSwgV1RGTW92ZShw
YXVzZURhdGEpLCBpdC0+dmFsdWUuY29weVJlZigpKTsKIH0KIAotdm9pZCBQYWdlRE9NRGVidWdn
ZXJBZ2VudDo6c2V0QW5pbWF0aW9uRnJhbWVCcmVha3BvaW50KEVycm9yU3RyaW5nJiBlcnJvclN0
cmluZywgUmVmUHRyPEpTQzo6QnJlYWtwb2ludD4mJiBicmVha3BvaW50KQorYm9vbCBQYWdlRE9N
RGVidWdnZXJBZ2VudDo6c2V0QW5pbWF0aW9uRnJhbWVCcmVha3BvaW50KFByb3RvY29sOjpFcnJv
clN0cmluZyYgZXJyb3JTdHJpbmcsIFJlZlB0cjxKU0M6OkJyZWFrcG9pbnQ+JiYgYnJlYWtwb2lu
dCkKIHsKICAgICBpZiAoIW1fcGF1c2VPbkFsbEFuaW1hdGlvbkZyYW1lc0JyZWFrcG9pbnQgPT0g
IWJyZWFrcG9pbnQpIHsKICAgICAgICAgZXJyb3JTdHJpbmcgPSBtX3BhdXNlT25BbGxBbmltYXRp
b25GcmFtZXNCcmVha3BvaW50ID8gIkJyZWFrcG9pbnQgZm9yIEFuaW1hdGlvbkZyYW1lIGFscmVh
ZHkgZXhpc3RzIl9zIDogIkJyZWFrcG9pbnQgZm9yIEFuaW1hdGlvbkZyYW1lIG1pc3NpbmciX3M7
Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIG1f
cGF1c2VPbkFsbEFuaW1hdGlvbkZyYW1lc0JyZWFrcG9pbnQgPSBXVEZNb3ZlKGJyZWFrcG9pbnQp
OworICAgIHJldHVybiB0cnVlOwogfQogCi1SZWY8SlNPTjo6T2JqZWN0PiBQYWdlRE9NRGVidWdn
ZXJBZ2VudDo6YnVpbGRQYXVzZURhdGFGb3JET01CcmVha3BvaW50KEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRPTURlYnVnZ2VyOjpET01CcmVha3BvaW50VHlwZSBicmVha3BvaW50VHlwZSwgTm9kZSYg
YnJlYWtwb2ludE93bmVyKQorUmVmPEpTT046Ok9iamVjdD4gUGFnZURPTURlYnVnZ2VyQWdlbnQ6
OmJ1aWxkUGF1c2VEYXRhRm9yRE9NQnJlYWtwb2ludChQcm90b2NvbDo6RE9NRGVidWdnZXI6OkRP
TUJyZWFrcG9pbnRUeXBlIGJyZWFrcG9pbnRUeXBlLCBOb2RlJiBicmVha3BvaW50T3duZXIpCiB7
CiAgICAgQVNTRVJUKG1fZGVidWdnZXJBZ2VudC0+YnJlYWtwb2ludHNBY3RpdmUoKSk7CiAgICAg
QVNTRVJUKG1fZG9tU3VidHJlZU1vZGlmaWVkQnJlYWtwb2ludHMuY29udGFpbnMoJmJyZWFrcG9p
bnRPd25lcikgfHwgbV9kb21BdHRyaWJ1dGVNb2RpZmllZEJyZWFrcG9pbnRzLmNvbnRhaW5zKCZi
cmVha3BvaW50T3duZXIpIHx8IG1fZG9tTm9kZVJlbW92ZWRCcmVha3BvaW50cy5jb250YWlucygm
YnJlYWtwb2ludE93bmVyKSk7CiAKICAgICBhdXRvIHBhdXNlRGF0YSA9IEpTT046Ok9iamVjdDo6
Y3JlYXRlKCk7Ci0gICAgcGF1c2VEYXRhLT5zZXRTdHJpbmcoInR5cGUiLCBJbnNwZWN0b3I6OlBy
b3RvY29sOjpJbnNwZWN0b3JIZWxwZXJzOjpnZXRFbnVtQ29uc3RhbnRWYWx1ZShicmVha3BvaW50
VHlwZSkpOworICAgIHBhdXNlRGF0YS0+c2V0U3RyaW5nKCJ0eXBlIiwgUHJvdG9jb2w6OkhlbHBl
cnM6OmdldEVudW1Db25zdGFudFZhbHVlKGJyZWFrcG9pbnRUeXBlKSk7CiAgICAgaWYgKGF1dG8q
IGRvbUFnZW50ID0gbV9pbnN0cnVtZW50aW5nQWdlbnRzLnBlcnNpc3RlbnRET01BZ2VudCgpKSB7
CiAgICAgICAgIGlmIChhdXRvIGJyZWFrcG9pbnRPd25lck5vZGVJZCA9IGRvbUFnZW50LT5wdXNo
Tm9kZVRvRnJvbnRlbmQoJmJyZWFrcG9pbnRPd25lcikpCiAgICAgICAgICAgICBwYXVzZURhdGEt
PnNldEludGVnZXIoIm5vZGVJZCIsIGJyZWFrcG9pbnRPd25lck5vZGVJZCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZURPTURlYnVnZ2VyQWdl
bnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlRE9NRGVidWdn
ZXJBZ2VudC5oCmluZGV4IGFkMDFjNjc3ZTVkMjIyNWEwNjVjZjAxMDQ1MTU2OWIxNzk0ZDY5YTku
LmQ4NzI4MjkyNWVjNjkzMTBlMGJjMGU3ODgzY2RjYTUwOGQxMDM1MjIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlRE9NRGVidWdnZXJBZ2VudC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlRE9NRGVidWdn
ZXJBZ2VudC5oCkBAIC0zNiwyMSArMzYsMTkgQEAgY2xhc3MgRWxlbWVudDsKIGNsYXNzIEZyYW1l
OwogY2xhc3MgTm9kZTsKIAotdHlwZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7Ci0KIGNsYXNzIFBh
Z2VET01EZWJ1Z2dlckFnZW50IGZpbmFsIDogcHVibGljIEluc3BlY3RvckRPTURlYnVnZ2VyQWdl
bnQgewogcHVibGljOgogICAgIFBhZ2VET01EZWJ1Z2dlckFnZW50KFBhZ2VBZ2VudENvbnRleHQm
LCBJbnNwZWN0b3I6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQqKTsKLSAgICB+UGFnZURPTURlYnVn
Z2VyQWdlbnQoKSBvdmVycmlkZTsKKyAgICB+UGFnZURPTURlYnVnZ2VyQWdlbnQoKTsKIAotICAg
IGJvb2wgZW5hYmxlZCgpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgZW5hYmxlZCgpIGNvbnN0
OwogCiAgICAgLy8gRE9NRGVidWdnZXJCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIKLSAgICB2b2lk
IHNldERPTUJyZWFrcG9pbnQoRXJyb3JTdHJpbmcmLCBpbnQgbm9kZUlkLCBjb25zdCBTdHJpbmcm
IHR5cGUsIGNvbnN0IEpTT046Ok9iamVjdCogb3B0aW9ucykgb3ZlcnJpZGU7Ci0gICAgdm9pZCBy
ZW1vdmVET01CcmVha3BvaW50KEVycm9yU3RyaW5nJiwgaW50IG5vZGVJZCwgY29uc3QgU3RyaW5n
JiB0eXBlKSBvdmVycmlkZTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09y
PHZvaWQ+IHNldERPTUJyZWFrcG9pbnQoSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9NOjpOb2RlSWQs
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpET01CcmVha3BvaW50VHlwZSwgUmVm
UHRyPEpTT046Ok9iamVjdD4mJiBvcHRpb25zKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpF
cnJvclN0cmluZ09yPHZvaWQ+IHJlbW92ZURPTUJyZWFrcG9pbnQoSW5zcGVjdG9yOjpQcm90b2Nv
bDo6RE9NOjpOb2RlSWQsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpET01CcmVh
a3BvaW50VHlwZSk7CiAKICAgICAvLyBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24KLSAgICB2b2lk
IG1haW5GcmFtZU5hdmlnYXRlZCgpIGZpbmFsOworICAgIHZvaWQgbWFpbkZyYW1lTmF2aWdhdGVk
KCk7CiAgICAgdm9pZCBmcmFtZURvY3VtZW50VXBkYXRlZChGcmFtZSYpOwogICAgIHZvaWQgd2ls
bEluc2VydERPTU5vZGUoTm9kZSYgcGFyZW50KTsKICAgICB2b2lkIHdpbGxSZW1vdmVET01Ob2Rl
KE5vZGUmKTsKQEAgLTYxLDEwICs1OSwxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBkaWRGaXJlQW5p
bWF0aW9uRnJhbWUoKTsKIAogcHJpdmF0ZToKLSAgICB2b2lkIGVuYWJsZSgpIG92ZXJyaWRlOwot
ICAgIHZvaWQgZGlzYWJsZSgpIG92ZXJyaWRlOworICAgIHZvaWQgZW5hYmxlKCk7CisgICAgdm9p
ZCBkaXNhYmxlKCk7CiAKLSAgICB2b2lkIHNldEFuaW1hdGlvbkZyYW1lQnJlYWtwb2ludChFcnJv
clN0cmluZyYsIFJlZlB0cjxKU0M6OkJyZWFrcG9pbnQ+JiYpIG92ZXJyaWRlOworICAgIGJvb2wg
c2V0QW5pbWF0aW9uRnJhbWVCcmVha3BvaW50KEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3Ry
aW5nJiwgUmVmUHRyPEpTQzo6QnJlYWtwb2ludD4mJik7CiAKICAgICBSZWY8SlNPTjo6T2JqZWN0
PiBidWlsZFBhdXNlRGF0YUZvckRPTUJyZWFrcG9pbnQoSW5zcGVjdG9yOjpQcm90b2NvbDo6RE9N
RGVidWdnZXI6OkRPTUJyZWFrcG9pbnRUeXBlLCBOb2RlJiBicmVha3BvaW50T3duZXIpOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZURlYnVn
Z2VyQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VE
ZWJ1Z2dlckFnZW50LmNwcAppbmRleCAwYzIwMzk4MjczM2I0ZWU4YmFiZDA1NThmYTMzYjJhMWRj
NGY4ZjI1Li42MTg3MjY4YmQyNzUxODFlOThmNDVlZTBmYTdlMTZhNzUwOWJjMTYwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZURlYnVnZ2VyQWdl
bnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlRGVi
dWdnZXJBZ2VudC5jcHAKQEAgLTY4LDI2ICs2OCwyNSBAQCBib29sIFBhZ2VEZWJ1Z2dlckFnZW50
OjplbmFibGVkKCkgY29uc3QKICAgICByZXR1cm4gbV9pbnN0cnVtZW50aW5nQWdlbnRzLmVuYWJs
ZWRQYWdlRGVidWdnZXJBZ2VudCgpID09IHRoaXMgJiYgV2ViRGVidWdnZXJBZ2VudDo6ZW5hYmxl
ZCgpOwogfQogCi12b2lkIFBhZ2VEZWJ1Z2dlckFnZW50OjpldmFsdWF0ZU9uQ2FsbEZyYW1lKEVy
cm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBjYWxsRnJhbWVJZCwgY29uc3Qg
U3RyaW5nJiBleHByZXNzaW9uLCBjb25zdCBTdHJpbmcqIG9iamVjdEdyb3VwLCBjb25zdCBib29s
KiBpbmNsdWRlQ29tbWFuZExpbmVBUEksIGNvbnN0IGJvb2wqIGRvTm90UGF1c2VPbkV4Y2VwdGlv
bnNBbmRNdXRlQ29uc29sZSwgY29uc3QgYm9vbCogcmV0dXJuQnlWYWx1ZSwgY29uc3QgYm9vbCog
Z2VuZXJhdGVQcmV2aWV3LCBjb25zdCBib29sKiBzYXZlUmVzdWx0LCBjb25zdCBib29sKiBlbXVs
YXRlVXNlckdlc3R1cmUsIFJlZlB0cjxQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYg
cmVzdWx0LCBPcHRpb25hbDxib29sPiYgd2FzVGhyb3duLCBPcHRpb25hbDxpbnQ+JiBzYXZlZFJl
c3VsdEluZGV4KQorUHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8c3RkOjp0dXBsZTxSZWY8UHJvdG9j
b2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4sIE9wdGlvbmFsPGJvb2w+IC8qIHdhc1Rocm93biAq
LywgT3B0aW9uYWw8aW50PiAvKiBzYXZlZFJlc3VsdEluZGV4ICovPj4gUGFnZURlYnVnZ2VyQWdl
bnQ6OmV2YWx1YXRlT25DYWxsRnJhbWUoY29uc3QgUHJvdG9jb2w6OkRlYnVnZ2VyOjpDYWxsRnJh
bWVJZCYgY2FsbEZyYW1lSWQsIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgY29uc3QgU3RyaW5n
JiBvYmplY3RHcm91cCwgT3B0aW9uYWw8Ym9vbD4mJiBpbmNsdWRlQ29tbWFuZExpbmVBUEksIE9w
dGlvbmFsPGJvb2w+JiYgZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xlLCBPcHRp
b25hbDxib29sPiYmIHJldHVybkJ5VmFsdWUsIE9wdGlvbmFsPGJvb2w+JiYgZ2VuZXJhdGVQcmV2
aWV3LCBPcHRpb25hbDxib29sPiYmIHNhdmVSZXN1bHQsIE9wdGlvbmFsPGJvb2w+JiYgZW11bGF0
ZVVzZXJHZXN0dXJlKQogewotICAgIGF1dG8gc2hvdWxkRW11bGF0ZVVzZXJHZXN0dXJlID0gZW11
bGF0ZVVzZXJHZXN0dXJlICYmICplbXVsYXRlVXNlckdlc3R1cmU7Ci0gICAgVXNlckdlc3R1cmVF
bXVsYXRpb25TY29wZSB1c2VyR2VzdHVyZVNjb3BlKG1faW5zcGVjdGVkUGFnZSwgc2hvdWxkRW11
bGF0ZVVzZXJHZXN0dXJlKTsKKyAgICBVc2VyR2VzdHVyZUVtdWxhdGlvblNjb3BlIHVzZXJHZXN0
dXJlU2NvcGUobV9pbnNwZWN0ZWRQYWdlLCBlbXVsYXRlVXNlckdlc3R1cmUgJiYgKmVtdWxhdGVV
c2VyR2VzdHVyZSk7CiAKLSAgICBXZWJEZWJ1Z2dlckFnZW50OjpldmFsdWF0ZU9uQ2FsbEZyYW1l
KGVycm9yU3RyaW5nLCBjYWxsRnJhbWVJZCwgZXhwcmVzc2lvbiwgb2JqZWN0R3JvdXAsIGluY2x1
ZGVDb21tYW5kTGluZUFQSSwgZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xlLCBy
ZXR1cm5CeVZhbHVlLCBnZW5lcmF0ZVByZXZpZXcsIHNhdmVSZXN1bHQsIGVtdWxhdGVVc2VyR2Vz
dHVyZSwgcmVzdWx0LCB3YXNUaHJvd24sIHNhdmVkUmVzdWx0SW5kZXgpOworICAgIHJldHVybiBX
ZWJEZWJ1Z2dlckFnZW50OjpldmFsdWF0ZU9uQ2FsbEZyYW1lKGNhbGxGcmFtZUlkLCBleHByZXNz
aW9uLCBvYmplY3RHcm91cCwgV1RGTW92ZShpbmNsdWRlQ29tbWFuZExpbmVBUEkpLCBXVEZNb3Zl
KGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29sZSksIFdURk1vdmUocmV0dXJuQnlW
YWx1ZSksIFdURk1vdmUoZ2VuZXJhdGVQcmV2aWV3KSwgV1RGTW92ZShzYXZlUmVzdWx0KSwgV1RG
TW92ZShlbXVsYXRlVXNlckdlc3R1cmUpKTsKIH0KIAotdm9pZCBQYWdlRGVidWdnZXJBZ2VudDo6
ZW5hYmxlKCkKK3ZvaWQgUGFnZURlYnVnZ2VyQWdlbnQ6OmludGVybmFsRW5hYmxlKCkKIHsKICAg
ICBtX2luc3RydW1lbnRpbmdBZ2VudHMuc2V0RW5hYmxlZFBhZ2VEZWJ1Z2dlckFnZW50KHRoaXMp
OwogCi0gICAgV2ViRGVidWdnZXJBZ2VudDo6ZW5hYmxlKCk7CisgICAgV2ViRGVidWdnZXJBZ2Vu
dDo6aW50ZXJuYWxFbmFibGUoKTsKIH0KIAotdm9pZCBQYWdlRGVidWdnZXJBZ2VudDo6ZGlzYWJs
ZShib29sIGlzQmVpbmdEZXN0cm95ZWQpCit2b2lkIFBhZ2VEZWJ1Z2dlckFnZW50OjppbnRlcm5h
bERpc2FibGUoYm9vbCBpc0JlaW5nRGVzdHJveWVkKQogewogICAgIG1faW5zdHJ1bWVudGluZ0Fn
ZW50cy5zZXRFbmFibGVkUGFnZURlYnVnZ2VyQWdlbnQobnVsbHB0cik7CiAKLSAgICBXZWJEZWJ1
Z2dlckFnZW50OjpkaXNhYmxlKGlzQmVpbmdEZXN0cm95ZWQpOworICAgIFdlYkRlYnVnZ2VyQWdl
bnQ6OmludGVybmFsRGlzYWJsZShpc0JlaW5nRGVzdHJveWVkKTsKIH0KIAogU3RyaW5nIFBhZ2VE
ZWJ1Z2dlckFnZW50Ojpzb3VyY2VNYXBVUkxGb3JTY3JpcHQoY29uc3QgSlNDOjpEZWJ1Z2dlcjo6
U2NyaXB0JiBzY3JpcHQpCkBAIC0xMjYsNyArMTI1LDcgQEAgdm9pZCBQYWdlRGVidWdnZXJBZ2Vu
dDo6YnJlYWtwb2ludEFjdGlvbkxvZyhKU0M6OkpTR2xvYmFsT2JqZWN0KiBsZXhpY2FsR2xvYmFs
T2IKICAgICBtX2luc3BlY3RlZFBhZ2UuY29uc29sZSgpLmFkZE1lc3NhZ2UoTWVzc2FnZVNvdXJj
ZTo6SlMsIE1lc3NhZ2VMZXZlbDo6TG9nLCBtZXNzYWdlLCBjcmVhdGVTY3JpcHRDYWxsU3RhY2so
bGV4aWNhbEdsb2JhbE9iamVjdCkpOwogfQogCi1JbmplY3RlZFNjcmlwdCBQYWdlRGVidWdnZXJB
Z2VudDo6aW5qZWN0ZWRTY3JpcHRGb3JFdmFsKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29u
c3QgaW50KiBleGVjdXRpb25Db250ZXh0SWQpCitJbmplY3RlZFNjcmlwdCBQYWdlRGVidWdnZXJB
Z2VudDo6aW5qZWN0ZWRTY3JpcHRGb3JFdmFsKFByb3RvY29sOjpFcnJvclN0cmluZyYgZXJyb3JT
dHJpbmcsIE9wdGlvbmFsPFByb3RvY29sOjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0SWQ+JiYg
ZXhlY3V0aW9uQ29udGV4dElkKQogewogICAgIGlmICghZXhlY3V0aW9uQ29udGV4dElkKSB7CiAg
ICAgICAgIEpTQzo6SlNHbG9iYWxPYmplY3QqIHNjcmlwdFN0YXRlID0gbWFpbldvcmxkRXhlY1N0
YXRlKCZtX2luc3BlY3RlZFBhZ2UubWFpbkZyYW1lKCkpOwpAQCAtMTUzLDggKzE1Miw3IEBAIHZv
aWQgUGFnZURlYnVnZ2VyQWdlbnQ6Om1haW5GcmFtZVN0YXJ0ZWRMb2FkaW5nKCkKICAgICBpZiAo
aXNQYXVzZWQoKSkgewogICAgICAgICBzZXRTdXBwcmVzc0FsbFBhdXNlcyh0cnVlKTsKIAotICAg
ICAgICBFcnJvclN0cmluZyBpZ25vcmVkOwotICAgICAgICByZXN1bWUoaWdub3JlZCk7CisgICAg
ICAgIHJlc3VtZSgpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VEZWJ1Z2dlckFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZURlYnVnZ2VyQWdlbnQuaAppbmRleCA0YzI3ZGQxYzc0
YjEyZTg1N2I2Y2Y2NTEwZjg5OTc2MDdhMTY2MjA3Li5iZmViZTkzNjJjNDkzNWUxMDFlMWExZjEz
YzdhMDJiZTE1M2M5ZWI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdl
bnRzL3BhZ2UvUGFnZURlYnVnZ2VyQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvYWdlbnRzL3BhZ2UvUGFnZURlYnVnZ2VyQWdlbnQuaApAQCAtNDUsMTQgKzQ1LDE0IEBAIGNs
YXNzIFBhZ2VEZWJ1Z2dlckFnZW50IGZpbmFsIDogcHVibGljIFdlYkRlYnVnZ2VyQWdlbnQgewog
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIFBhZ2VEZWJ1Z2dlckFn
ZW50KFBhZ2VBZ2VudENvbnRleHQmKTsKLSAgICB+UGFnZURlYnVnZ2VyQWdlbnQoKSBvdmVycmlk
ZTsKLSAgICBib29sIGVuYWJsZWQoKSBjb25zdCBmaW5hbDsKKyAgICB+UGFnZURlYnVnZ2VyQWdl
bnQoKTsKKyAgICBib29sIGVuYWJsZWQoKSBjb25zdDsKIAogICAgIC8vIERlYnVnZ2VyQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyCi0gICAgdm9pZCBldmFsdWF0ZU9uQ2FsbEZyYW1lKEVycm9yU3Ry
aW5nJiwgY29uc3QgU3RyaW5nJiBjYWxsRnJhbWVJZCwgY29uc3QgU3RyaW5nJiBleHByZXNzaW9u
LCBjb25zdCBTdHJpbmcqIG9iamVjdEdyb3VwLCBjb25zdCBib29sKiBpbmNsdWRlQ29tbWFuZExp
bmVBUEksIGNvbnN0IGJvb2wqIGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29sZSwg
Y29uc3QgYm9vbCogcmV0dXJuQnlWYWx1ZSwgY29uc3QgYm9vbCogZ2VuZXJhdGVQcmV2aWV3LCBj
b25zdCBib29sKiBzYXZlUmVzdWx0LCBjb25zdCBib29sKiBlbXVsYXRlVXNlckdlc3R1cmUsIFJl
ZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+JiByZXN1bHQs
IE9wdGlvbmFsPGJvb2w+JiB3YXNUaHJvd24sIE9wdGlvbmFsPGludD4mIHNhdmVkUmVzdWx0SW5k
ZXgpIG92ZXJyaWRlOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8c3Rk
Ojp0dXBsZTxSZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0Piwg
T3B0aW9uYWw8Ym9vbD4gLyogd2FzVGhyb3duICovLCBPcHRpb25hbDxpbnQ+IC8qIHNhdmVkUmVz
dWx0SW5kZXggKi8+PiBldmFsdWF0ZU9uQ2FsbEZyYW1lKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkRlYnVnZ2VyOjpDYWxsRnJhbWVJZCYsIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgY29u
c3QgU3RyaW5nJiBvYmplY3RHcm91cCwgT3B0aW9uYWw8Ym9vbD4mJiBpbmNsdWRlQ29tbWFuZExp
bmVBUEksIE9wdGlvbmFsPGJvb2w+JiYgZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25z
b2xlLCBPcHRpb25hbDxib29sPiYmIHJldHVybkJ5VmFsdWUsIE9wdGlvbmFsPGJvb2w+JiYgZ2Vu
ZXJhdGVQcmV2aWV3LCBPcHRpb25hbDxib29sPiYmIHNhdmVSZXN1bHQsIE9wdGlvbmFsPGJvb2w+
JiYgZW11bGF0ZVVzZXJHZXN0dXJlKTsKIAogICAgIC8vIEpTQzo6RGVidWdnZXI6Ok9ic2VydmVy
Ci0gICAgdm9pZCBicmVha3BvaW50QWN0aW9uTG9nKEpTQzo6SlNHbG9iYWxPYmplY3QqLCBjb25z
dCBTdHJpbmcmIGRhdGEpIGZpbmFsOworICAgIHZvaWQgYnJlYWtwb2ludEFjdGlvbkxvZyhKU0M6
OkpTR2xvYmFsT2JqZWN0KiwgY29uc3QgU3RyaW5nJiBkYXRhKTsKIAogICAgIC8vIEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbgogICAgIHZvaWQgZGlkQ2xlYXJXaW5kb3dPYmplY3RJbldvcmxkKEZy
YW1lJiwgRE9NV3JhcHBlcldvcmxkJik7CkBAIC02NCwxNSArNjQsMTUgQEAgcHVibGljOgogICAg
IHZvaWQgZGlkQ2FuY2VsQW5pbWF0aW9uRnJhbWUoaW50IGNhbGxiYWNrSWQpOwogCiBwcml2YXRl
OgotICAgIHZvaWQgZW5hYmxlKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkaXNhYmxlKGJvb2wgaXNC
ZWluZ0Rlc3Ryb3llZCkgb3ZlcnJpZGU7CisgICAgdm9pZCBpbnRlcm5hbEVuYWJsZSgpOworICAg
IHZvaWQgaW50ZXJuYWxEaXNhYmxlKGJvb2wgaXNCZWluZ0Rlc3Ryb3llZCk7CiAKLSAgICBTdHJp
bmcgc291cmNlTWFwVVJMRm9yU2NyaXB0KGNvbnN0IEpTQzo6RGVidWdnZXI6OlNjcmlwdCYpIG92
ZXJyaWRlOworICAgIFN0cmluZyBzb3VyY2VNYXBVUkxGb3JTY3JpcHQoY29uc3QgSlNDOjpEZWJ1
Z2dlcjo6U2NyaXB0Jik7CiAKLSAgICB2b2lkIG11dGVDb25zb2xlKCkgb3ZlcnJpZGU7Ci0gICAg
dm9pZCB1bm11dGVDb25zb2xlKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBtdXRlQ29uc29sZSgpOwor
ICAgIHZvaWQgdW5tdXRlQ29uc29sZSgpOwogCi0gICAgSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlw
dCBpbmplY3RlZFNjcmlwdEZvckV2YWwoRXJyb3JTdHJpbmcmLCBjb25zdCBpbnQqIGV4ZWN1dGlv
bkNvbnRleHRJZCkgb3ZlcnJpZGU7CisgICAgSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdCBpbmpl
Y3RlZFNjcmlwdEZvckV2YWwoSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBPcHRp
b25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0SWQ+JiYp
OwogCiAgICAgUGFnZSYgbV9pbnNwZWN0ZWRQYWdlOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlSGVhcEFnZW50LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlSGVhcEFnZW50LmNwcAppbmRleCA0OTIx
OGVmMTI4M2ViZDRkZDc1NDIxMTM2OWIzNDlhNDgyNTIyZDk4Li40MDM2YTIzYzY4NTA3ZTU5NGFi
MmU5NzRmNWI2MmRiODY3Yzc4NzYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvYWdlbnRzL3BhZ2UvUGFnZUhlYXBBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VIZWFwQWdlbnQuY3BwCkBAIC0zOSwxNiArMzksMjAgQEAg
UGFnZUhlYXBBZ2VudDo6UGFnZUhlYXBBZ2VudChQYWdlQWdlbnRDb250ZXh0JiBjb250ZXh0KQog
CiBQYWdlSGVhcEFnZW50Ojp+UGFnZUhlYXBBZ2VudCgpID0gZGVmYXVsdDsKIAotdm9pZCBQYWdl
SGVhcEFnZW50OjplbmFibGUoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nKQorUHJvdG9jb2w6OkVy
cm9yU3RyaW5nT3I8dm9pZD4gUGFnZUhlYXBBZ2VudDo6ZW5hYmxlKCkKIHsKLSAgICBXZWJIZWFw
QWdlbnQ6OmVuYWJsZShlcnJvclN0cmluZyk7CisgICAgYXV0byByZXN1bHQgPSBXZWJIZWFwQWdl
bnQ6OmVuYWJsZSgpOworCiAgICAgbV9pbnN0cnVtZW50aW5nQWdlbnRzLnNldEVuYWJsZWRQYWdl
SGVhcEFnZW50KHRoaXMpOworCisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBQYWdlSGVh
cEFnZW50OjpkaXNhYmxlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZykKK1Byb3RvY29sOjpFcnJv
clN0cmluZ09yPHZvaWQ+IFBhZ2VIZWFwQWdlbnQ6OmRpc2FibGUoKQogewogICAgIG1faW5zdHJ1
bWVudGluZ0FnZW50cy5zZXRFbmFibGVkUGFnZUhlYXBBZ2VudChudWxscHRyKTsKLSAgICBXZWJI
ZWFwQWdlbnQ6OmRpc2FibGUoZXJyb3JTdHJpbmcpOworCisgICAgcmV0dXJuIFdlYkhlYXBBZ2Vu
dDo6ZGlzYWJsZSgpOwogfQogCiB2b2lkIFBhZ2VIZWFwQWdlbnQ6Om1haW5GcmFtZU5hdmlnYXRl
ZCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFn
ZUhlYXBBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VI
ZWFwQWdlbnQuaAppbmRleCAxYmQ2Y2EwZmM5ZWYxNWExZDdhMjUyODQyOTVhOGUxOWU4NWYxMGRl
Li5mMjZmZjg0YjM4Yjk0Yzk3MmQ5ZjQ2Y2M5YzRhNzRlYWZmNzRjN2FiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZUhlYXBBZ2VudC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlSGVhcEFnZW50LmgKQEAg
LTMxLDE4ICszMSwxNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXR5cGVkZWYgU3RyaW5n
IEVycm9yU3RyaW5nOwotCiBjbGFzcyBQYWdlSGVhcEFnZW50IGZpbmFsIDogcHVibGljIFdlYkhl
YXBBZ2VudCB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUGFnZUhlYXBBZ2VudCk7CiAgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgUGFnZUhlYXBBZ2VudChQYWdl
QWdlbnRDb250ZXh0Jik7Ci0gICAgflBhZ2VIZWFwQWdlbnQoKSBvdmVycmlkZTsKKyAgICB+UGFn
ZUhlYXBBZ2VudCgpOwogCiAgICAgLy8gSGVhcEJhY2tlbmREaXNwYXRjaGVySGFuZGxlcgotICAg
IHZvaWQgZW5hYmxlKEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkaXNhYmxlKEVy
cm9yU3RyaW5nJikgb3ZlcnJpZGU7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJp
bmdPcjx2b2lkPiBlbmFibGUoKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmlu
Z09yPHZvaWQ+IGRpc2FibGUoKTsKIAogICAgIC8vIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbgog
ICAgIHZvaWQgbWFpbkZyYW1lTmF2aWdhdGVkKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZU5ldHdvcmtBZ2VudC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZU5ldHdvcmtBZ2VudC5jcHAKaW5kZXggMmM2
NWI4MTA0OTRiYmViNzNkNTM0ZTY2MmFjMzExOTNmNDBjM2M2OC4uNjUyYTc5ZjU3MTQ1NWFjOTZj
ZDA0YTI0MGVjNGQ5Yjc2NWNmY2YzMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2FnZW50cy9wYWdlL1BhZ2VOZXR3b3JrQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlTmV0d29ya0FnZW50LmNwcApAQCAtNDcsNyArNDcs
NyBAQCBQYWdlTmV0d29ya0FnZW50OjpQYWdlTmV0d29ya0FnZW50KFBhZ2VBZ2VudENvbnRleHQm
IGNvbnRleHQpCiAKIFBhZ2VOZXR3b3JrQWdlbnQ6On5QYWdlTmV0d29ya0FnZW50KCkgPSBkZWZh
dWx0OwogCi1TdHJpbmcgUGFnZU5ldHdvcmtBZ2VudDo6bG9hZGVySWRlbnRpZmllcihEb2N1bWVu
dExvYWRlciogbG9hZGVyKQorUHJvdG9jb2w6Ok5ldHdvcms6OkxvYWRlcklkIFBhZ2VOZXR3b3Jr
QWdlbnQ6OmxvYWRlcklkZW50aWZpZXIoRG9jdW1lbnRMb2FkZXIqIGxvYWRlcikKIHsKICAgICBp
ZiAobG9hZGVyKSB7CiAgICAgICAgIGlmIChhdXRvKiBwYWdlQWdlbnQgPSBtX2luc3RydW1lbnRp
bmdBZ2VudHMuZW5hYmxlZFBhZ2VBZ2VudCgpKQpAQCAtNTYsNyArNTYsNyBAQCBTdHJpbmcgUGFn
ZU5ldHdvcmtBZ2VudDo6bG9hZGVySWRlbnRpZmllcihEb2N1bWVudExvYWRlciogbG9hZGVyKQog
ICAgIHJldHVybiB7IH07CiB9CiAKLVN0cmluZyBQYWdlTmV0d29ya0FnZW50OjpmcmFtZUlkZW50
aWZpZXIoRG9jdW1lbnRMb2FkZXIqIGxvYWRlcikKK1Byb3RvY29sOjpOZXR3b3JrOjpGcmFtZUlk
IFBhZ2VOZXR3b3JrQWdlbnQ6OmZyYW1lSWRlbnRpZmllcihEb2N1bWVudExvYWRlciogbG9hZGVy
KQogewogICAgIGlmIChsb2FkZXIpIHsKICAgICAgICAgaWYgKGF1dG8qIHBhZ2VBZ2VudCA9IG1f
aW5zdHJ1bWVudGluZ0FnZW50cy5lbmFibGVkUGFnZUFnZW50KCkpCkBAIC05MSwxMiArOTEsMTIg
QEAgVmVjdG9yPFdlYlNvY2tldCo+IFBhZ2VOZXR3b3JrQWdlbnQ6OmFjdGl2ZVdlYlNvY2tldHMo
Y29uc3QgTG9ja0hvbGRlciYgbG9jaykKICAgICByZXR1cm4gd2ViU29ja2V0czsKIH0KIAotdm9p
ZCBQYWdlTmV0d29ya0FnZW50OjpzZXRSZXNvdXJjZUNhY2hpbmdEaXNhYmxlZChib29sIGRpc2Fi
bGVkKQordm9pZCBQYWdlTmV0d29ya0FnZW50OjpzZXRSZXNvdXJjZUNhY2hpbmdEaXNhYmxlZElu
dGVybmFsKGJvb2wgZGlzYWJsZWQpCiB7CiAgICAgbV9pbnNwZWN0ZWRQYWdlLnNldFJlc291cmNl
Q2FjaGluZ0Rpc2FibGVkQnlXZWJJbnNwZWN0b3IoZGlzYWJsZWQpOwogfQogCi1TY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBQYWdlTmV0d29ya0FnZW50OjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KEVy
cm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBmcmFtZUlkKQorU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogUGFnZU5ldHdvcmtBZ2VudDo6c2NyaXB0RXhlY3V0aW9uQ29udGV4dChQ
cm90b2NvbDo6RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBQcm90b2NvbDo6TmV0d29y
azo6RnJhbWVJZCYgZnJhbWVJZCkKIHsKICAgICBhdXRvKiBwYWdlQWdlbnQgPSBtX2luc3RydW1l
bnRpbmdBZ2VudHMuZW5hYmxlZFBhZ2VBZ2VudCgpOwogICAgIGlmICghcGFnZUFnZW50KSB7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZU5ldHdv
cmtBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VOZXR3
b3JrQWdlbnQuaAppbmRleCBiZWRjZTNlOGRiYjdjOWQyMmIyZTFiOTcyZDIyYjJhNWJjZTQwYWNh
Li5jMTI5OTk2YzFiZmI0NTFkNzdkZDUyMGY0YTA4OWFmZDU1ODNjMGYwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZU5ldHdvcmtBZ2VudC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlTmV0d29ya0FnZW50
LmgKQEAgLTM2LDE1ICszNiwxNSBAQCBjbGFzcyBQYWdlTmV0d29ya0FnZW50IGZpbmFsIDogcHVi
bGljIEluc3BlY3Rvck5ldHdvcmtBZ2VudCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CiBwdWJsaWM6CiAgICAgUGFnZU5ldHdvcmtBZ2VudChQYWdlQWdlbnRDb250ZXh0Jik7Ci0gICAg
flBhZ2VOZXR3b3JrQWdlbnQoKSBvdmVycmlkZTsKKyAgICB+UGFnZU5ldHdvcmtBZ2VudCgpOwog
CiBwcml2YXRlOgotICAgIFN0cmluZyBsb2FkZXJJZGVudGlmaWVyKERvY3VtZW50TG9hZGVyKikg
b3ZlcnJpZGU7Ci0gICAgU3RyaW5nIGZyYW1lSWRlbnRpZmllcihEb2N1bWVudExvYWRlciopIG92
ZXJyaWRlOwotICAgIFZlY3RvcjxXZWJTb2NrZXQqPiBhY3RpdmVXZWJTb2NrZXRzKGNvbnN0IExv
Y2tIb2xkZXImKSBvdmVycmlkZTsKLSAgICB2b2lkIHNldFJlc291cmNlQ2FjaGluZ0Rpc2FibGVk
KGJvb2wpIG92ZXJyaWRlOwotICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoRXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGZyYW1lSWQpIG92ZXJyaWRl
OwotICAgIGJvb2wgc2hvdWxkRm9yY2VCdWZmZXJpbmdOZXR3b3JrUmVzb3VyY2VEYXRhKCkgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpO
ZXR3b3JrOjpMb2FkZXJJZCBsb2FkZXJJZGVudGlmaWVyKERvY3VtZW50TG9hZGVyKik7CisgICAg
SW5zcGVjdG9yOjpQcm90b2NvbDo6TmV0d29yazo6RnJhbWVJZCBmcmFtZUlkZW50aWZpZXIoRG9j
dW1lbnRMb2FkZXIqKTsKKyAgICBWZWN0b3I8V2ViU29ja2V0Kj4gYWN0aXZlV2ViU29ja2V0cyhj
b25zdCBMb2NrSG9sZGVyJik7CisgICAgdm9pZCBzZXRSZXNvdXJjZUNhY2hpbmdEaXNhYmxlZElu
dGVybmFsKGJvb2wpOworICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBjb25zdCBJbnNwZWN0
b3I6OlByb3RvY29sOjpOZXR3b3JrOjpGcmFtZUlkJik7CisgICAgYm9vbCBzaG91bGRGb3JjZUJ1
ZmZlcmluZ05ldHdvcmtSZXNvdXJjZURhdGEoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCiAg
ICAgUGFnZSYgbV9pbnNwZWN0ZWRQYWdlOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlUnVudGltZUFnZW50LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlUnVudGltZUFnZW50LmNwcAppbmRleCBlOGFi
NWY0Yzg5YWRlNGZjODVjMDQyYjQzNDMzYjcyNjU2M2FiZGQyLi4wMGU2OWYxYWEyZTNmOGVhMmY0
NDVlOGRkNDQ2ZGQxNmVhNjM2M2RmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvYWdlbnRzL3BhZ2UvUGFnZVJ1bnRpbWVBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VSdW50aW1lQWdlbnQuY3BwCkBAIC01MiwxMSArNTIs
NiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBJbnNwZWN0b3I7CiAK
LXN0YXRpYyBib29sIGFzQm9vbChjb25zdCBib29sKiBiKQotewotICAgIHJldHVybiBiICYmICpi
OwotfQotCiBQYWdlUnVudGltZUFnZW50OjpQYWdlUnVudGltZUFnZW50KFBhZ2VBZ2VudENvbnRl
eHQmIGNvbnRleHQpCiAgICAgOiBJbnNwZWN0b3JSdW50aW1lQWdlbnQoY29udGV4dCkKICAgICAs
IG1fZnJvbnRlbmREaXNwYXRjaGVyKG1ha2VVbmlxdWU8SW5zcGVjdG9yOjpSdW50aW1lRnJvbnRl
bmREaXNwYXRjaGVyPihjb250ZXh0LmZyb250ZW5kUm91dGVyKSkKQEAgLTY4LDI3ICs2MywyOSBA
QCBQYWdlUnVudGltZUFnZW50OjpQYWdlUnVudGltZUFnZW50KFBhZ2VBZ2VudENvbnRleHQmIGNv
bnRleHQpCiAKIFBhZ2VSdW50aW1lQWdlbnQ6On5QYWdlUnVudGltZUFnZW50KCkgPSBkZWZhdWx0
OwogCi12b2lkIFBhZ2VSdW50aW1lQWdlbnQ6OmVuYWJsZShFcnJvclN0cmluZyYgZXJyb3JTdHJp
bmcpCitQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBQYWdlUnVudGltZUFnZW50OjplbmFi
bGUoKQogewogICAgIGlmIChtX2luc3RydW1lbnRpbmdBZ2VudHMuZW5hYmxlZFBhZ2VSdW50aW1l
QWdlbnQoKSA9PSB0aGlzKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB7IH07CiAK
LSAgICBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmVuYWJsZShlcnJvclN0cmluZyk7Ci0gICAgaWYg
KCFlcnJvclN0cmluZy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKKyAgICBhdXRvIHJlc3Vs
dCA9IEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6ZW5hYmxlKCk7CisgICAgaWYgKCFyZXN1bHQpCisg
ICAgICAgIHJldHVybiByZXN1bHQ7CiAKICAgICAvLyBSZXBvcnQgaW5pdGlhbCBjb250ZXh0cyBi
ZWZvcmUgZW5hYmxpbmcgaW5zdHJ1bWVudGF0aW9uIGFzIHRoZSByZXBvcnRpbmcKICAgICAvLyBj
YW4gZm9yY2UgY3JlYXRpb24gb2Ygc2NyaXB0IHN0YXRlIHdoaWNoIGNvdWxkIHJlc3VsdCBpbiBk
dXBsaWNhdGUgbm90aWZpY2F0aW9ucy4KICAgICByZXBvcnRFeGVjdXRpb25Db250ZXh0Q3JlYXRp
b24oKTsKIAogICAgIG1faW5zdHJ1bWVudGluZ0FnZW50cy5zZXRFbmFibGVkUGFnZVJ1bnRpbWVB
Z2VudCh0aGlzKTsKKworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgUGFnZVJ1bnRpbWVB
Z2VudDo6ZGlzYWJsZShFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcpCitQcm90b2NvbDo6RXJyb3JT
dHJpbmdPcjx2b2lkPiBQYWdlUnVudGltZUFnZW50OjpkaXNhYmxlKCkKIHsKICAgICBtX2luc3Ry
dW1lbnRpbmdBZ2VudHMuc2V0RW5hYmxlZFBhZ2VSdW50aW1lQWdlbnQobnVsbHB0cik7CiAKLSAg
ICBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmRpc2FibGUoZXJyb3JTdHJpbmcpOworICAgIHJldHVy
biBJbnNwZWN0b3JSdW50aW1lQWdlbnQ6OmRpc2FibGUoKTsKIH0KIAogdm9pZCBQYWdlUnVudGlt
ZUFnZW50OjpmcmFtZU5hdmlnYXRlZChGcmFtZSYgZnJhbWUpCkBAIC0xMDYsNyArMTAzLDcgQEAg
dm9pZCBQYWdlUnVudGltZUFnZW50OjpkaWRDbGVhcldpbmRvd09iamVjdEluV29ybGQoRnJhbWUm
IGZyYW1lLCBET01XcmFwcGVyV29ybGQKICAgICBub3RpZnlDb250ZXh0Q3JlYXRlZChwYWdlQWdl
bnQtPmZyYW1lSWQoJmZyYW1lKSwgZnJhbWUuc2NyaXB0KCkuZ2xvYmFsT2JqZWN0KHdvcmxkKSwg
d29ybGQpOwogfQogCi1JbmplY3RlZFNjcmlwdCBQYWdlUnVudGltZUFnZW50OjppbmplY3RlZFNj
cmlwdEZvckV2YWwoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBpbnQqIGV4ZWN1dGlv
bkNvbnRleHRJZCkKK0luamVjdGVkU2NyaXB0IFBhZ2VSdW50aW1lQWdlbnQ6OmluamVjdGVkU2Ny
aXB0Rm9yRXZhbChQcm90b2NvbDo6RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBPcHRpb25hbDxQ
cm90b2NvbDo6UnVudGltZTo6RXhlY3V0aW9uQ29udGV4dElkPiYmIGV4ZWN1dGlvbkNvbnRleHRJ
ZCkKIHsKICAgICBpZiAoIWV4ZWN1dGlvbkNvbnRleHRJZCkgewogICAgICAgICBKU0M6OkpTR2xv
YmFsT2JqZWN0KiBzY3JpcHRTdGF0ZSA9IG1haW5Xb3JsZEV4ZWNTdGF0ZSgmbV9pbnNwZWN0ZWRQ
YWdlLm1haW5GcmFtZSgpKTsKQEAgLTE1OSwyMiArMTU2LDIyIEBAIHZvaWQgUGFnZVJ1bnRpbWVB
Z2VudDo6cmVwb3J0RXhlY3V0aW9uQ29udGV4dENyZWF0aW9uKCkKICAgICB9CiB9CiAKLXN0YXRp
YyBJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0VHlwZSB0b1By
b3RvY29sKERPTVdyYXBwZXJXb3JsZDo6VHlwZSB0eXBlKQorc3RhdGljIFByb3RvY29sOjpSdW50
aW1lOjpFeGVjdXRpb25Db250ZXh0VHlwZSB0b1Byb3RvY29sKERPTVdyYXBwZXJXb3JsZDo6VHlw
ZSB0eXBlKQogewogICAgIHN3aXRjaCAodHlwZSkgewogICAgIGNhc2UgRE9NV3JhcHBlcldvcmxk
OjpUeXBlOjpOb3JtYWw6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50
aW1lOjpFeGVjdXRpb25Db250ZXh0VHlwZTo6Tm9ybWFsOworICAgICAgICByZXR1cm4gUHJvdG9j
b2w6OlJ1bnRpbWU6OkV4ZWN1dGlvbkNvbnRleHRUeXBlOjpOb3JtYWw7CiAgICAgY2FzZSBET01X
cmFwcGVyV29ybGQ6OlR5cGU6OlVzZXI6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0VHlwZTo6VXNlcjsKKyAgICAgICAgcmV0dXJu
IFByb3RvY29sOjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0VHlwZTo6VXNlcjsKICAgICBjYXNl
IERPTVdyYXBwZXJXb3JsZDo6VHlwZTo6SW50ZXJuYWw6Ci0gICAgICAgIHJldHVybiBJbnNwZWN0
b3I6OlByb3RvY29sOjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0VHlwZTo6SW50ZXJuYWw7Cisg
ICAgICAgIHJldHVybiBQcm90b2NvbDo6UnVudGltZTo6RXhlY3V0aW9uQ29udGV4dFR5cGU6Oklu
dGVybmFsOwogICAgIH0KIAogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBJ
bnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0VHlwZTo6SW50ZXJu
YWw7CisgICAgcmV0dXJuIFByb3RvY29sOjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0VHlwZTo6
SW50ZXJuYWw7CiB9CiAKLXZvaWQgUGFnZVJ1bnRpbWVBZ2VudDo6bm90aWZ5Q29udGV4dENyZWF0
ZWQoY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIGNvbnN0IERPTVdyYXBwZXJXb3JsZCYgd29ybGQsIFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0
eU9yaWdpbikKK3ZvaWQgUGFnZVJ1bnRpbWVBZ2VudDo6bm90aWZ5Q29udGV4dENyZWF0ZWQoY29u
c3QgUHJvdG9jb2w6Ok5ldHdvcms6OkZyYW1lSWQmIGZyYW1lSWQsIEpTQzo6SlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgY29uc3QgRE9NV3JhcHBlcldvcmxkJiB3b3JsZCwgU2VjdXJpdHlP
cmlnaW4qIHNlY3VyaXR5T3JpZ2luKQogewogICAgIGF1dG8gaW5qZWN0ZWRTY3JpcHQgPSBpbmpl
Y3RlZFNjcmlwdE1hbmFnZXIoKS5pbmplY3RlZFNjcmlwdEZvcihnbG9iYWxPYmplY3QpOwogICAg
IGlmIChpbmplY3RlZFNjcmlwdC5oYXNOb1ZhbHVlKCkpCkBAIC0xODQsNyArMTgxLDcgQEAgdm9p
ZCBQYWdlUnVudGltZUFnZW50Ojpub3RpZnlDb250ZXh0Q3JlYXRlZChjb25zdCBTdHJpbmcmIGZy
YW1lSWQsIEpTQzo6SlNHbG9iYWwKICAgICBpZiAobmFtZS5pc0VtcHR5KCkgJiYgc2VjdXJpdHlP
cmlnaW4pCiAgICAgICAgIG5hbWUgPSBzZWN1cml0eU9yaWdpbi0+dG9SYXdTdHJpbmcoKTsKIAot
ICAgIG1fZnJvbnRlbmREaXNwYXRjaGVyLT5leGVjdXRpb25Db250ZXh0Q3JlYXRlZChJbnNwZWN0
b3I6OlByb3RvY29sOjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0RGVzY3JpcHRpb246OmNyZWF0
ZSgpCisgICAgbV9mcm9udGVuZERpc3BhdGNoZXItPmV4ZWN1dGlvbkNvbnRleHRDcmVhdGVkKFBy
b3RvY29sOjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0RGVzY3JpcHRpb246OmNyZWF0ZSgpCiAg
ICAgICAgIC5zZXRJZChpbmplY3RlZFNjcmlwdE1hbmFnZXIoKS5pbmplY3RlZFNjcmlwdElkRm9y
KGdsb2JhbE9iamVjdCkpCiAgICAgICAgIC5zZXRUeXBlKHRvUHJvdG9jb2wod29ybGQudHlwZSgp
KSkKICAgICAgICAgLnNldE5hbWUobmFtZSkKQEAgLTE5MiwxNiArMTg5LDE2IEBAIHZvaWQgUGFn
ZVJ1bnRpbWVBZ2VudDo6bm90aWZ5Q29udGV4dENyZWF0ZWQoY29uc3QgU3RyaW5nJiBmcmFtZUlk
LCBKU0M6OkpTR2xvYmFsCiAgICAgICAgIC5yZWxlYXNlKCkpOwogfQogCi12b2lkIFBhZ2VSdW50
aW1lQWdlbnQ6OmV2YWx1YXRlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5n
JiBleHByZXNzaW9uLCBjb25zdCBTdHJpbmcqIG9iamVjdEdyb3VwLCBjb25zdCBib29sKiBpbmNs
dWRlQ29tbWFuZExpbmVBUEksIGNvbnN0IGJvb2wqIGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRN
dXRlQ29uc29sZSwgY29uc3QgaW50KiBleGVjdXRpb25Db250ZXh0SWQsIGNvbnN0IGJvb2wqIHJl
dHVybkJ5VmFsdWUsIGNvbnN0IGJvb2wqIGdlbmVyYXRlUHJldmlldywgY29uc3QgYm9vbCogc2F2
ZVJlc3VsdCwgY29uc3QgYm9vbCogZW11bGF0ZVVzZXJHZXN0dXJlLCBSZWZQdHI8SW5zcGVjdG9y
OjpQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiYgcmVzdWx0LCBPcHRpb25hbDxib29s
PiYgd2FzVGhyb3duLCBPcHRpb25hbDxpbnQ+JiBzYXZlZFJlc3VsdEluZGV4KQorUHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8c3RkOjp0dXBsZTxSZWY8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9i
amVjdD4sIE9wdGlvbmFsPGJvb2w+IC8qIHdhc1Rocm93biAqLywgT3B0aW9uYWw8aW50PiAvKiBz
YXZlZFJlc3VsdEluZGV4ICovPj4gUGFnZVJ1bnRpbWVBZ2VudDo6ZXZhbHVhdGUoY29uc3QgU3Ry
aW5nJiBleHByZXNzaW9uLCBjb25zdCBTdHJpbmcmIG9iamVjdEdyb3VwLCBPcHRpb25hbDxib29s
PiYmIGluY2x1ZGVDb21tYW5kTGluZUFQSSwgT3B0aW9uYWw8Ym9vbD4mJiBkb05vdFBhdXNlT25F
eGNlcHRpb25zQW5kTXV0ZUNvbnNvbGUsIE9wdGlvbmFsPFByb3RvY29sOjpSdW50aW1lOjpFeGVj
dXRpb25Db250ZXh0SWQ+JiYgZXhlY3V0aW9uQ29udGV4dElkLCBPcHRpb25hbDxib29sPiYmIHJl
dHVybkJ5VmFsdWUsIE9wdGlvbmFsPGJvb2w+JiYgZ2VuZXJhdGVQcmV2aWV3LCBPcHRpb25hbDxi
b29sPiYmIHNhdmVSZXN1bHQsIE9wdGlvbmFsPGJvb2w+JiYgZW11bGF0ZVVzZXJHZXN0dXJlKQog
ewotICAgIFVzZXJHZXN0dXJlRW11bGF0aW9uU2NvcGUgdXNlckdlc3R1cmVTY29wZShtX2luc3Bl
Y3RlZFBhZ2UsIGFzQm9vbChlbXVsYXRlVXNlckdlc3R1cmUpKTsKLSAgICBJbnNwZWN0b3JSdW50
aW1lQWdlbnQ6OmV2YWx1YXRlKGVycm9yU3RyaW5nLCBleHByZXNzaW9uLCBvYmplY3RHcm91cCwg
aW5jbHVkZUNvbW1hbmRMaW5lQVBJLCBkb05vdFBhdXNlT25FeGNlcHRpb25zQW5kTXV0ZUNvbnNv
bGUsIGV4ZWN1dGlvbkNvbnRleHRJZCwgcmV0dXJuQnlWYWx1ZSwgZ2VuZXJhdGVQcmV2aWV3LCBz
YXZlUmVzdWx0LCBlbXVsYXRlVXNlckdlc3R1cmUsIHJlc3VsdCwgd2FzVGhyb3duLCBzYXZlZFJl
c3VsdEluZGV4KTsKKyAgICBVc2VyR2VzdHVyZUVtdWxhdGlvblNjb3BlIHVzZXJHZXN0dXJlU2Nv
cGUobV9pbnNwZWN0ZWRQYWdlLCBlbXVsYXRlVXNlckdlc3R1cmUgJiYgKmVtdWxhdGVVc2VyR2Vz
dHVyZSk7CisgICAgcmV0dXJuIEluc3BlY3RvclJ1bnRpbWVBZ2VudDo6ZXZhbHVhdGUoZXhwcmVz
c2lvbiwgb2JqZWN0R3JvdXAsIFdURk1vdmUoaW5jbHVkZUNvbW1hbmRMaW5lQVBJKSwgV1RGTW92
ZShkb05vdFBhdXNlT25FeGNlcHRpb25zQW5kTXV0ZUNvbnNvbGUpLCBXVEZNb3ZlKGV4ZWN1dGlv
bkNvbnRleHRJZCksIFdURk1vdmUocmV0dXJuQnlWYWx1ZSksIFdURk1vdmUoZ2VuZXJhdGVQcmV2
aWV3KSwgV1RGTW92ZShzYXZlUmVzdWx0KSwgV1RGTW92ZShlbXVsYXRlVXNlckdlc3R1cmUpKTsK
IH0KIAotdm9pZCBQYWdlUnVudGltZUFnZW50OjpjYWxsRnVuY3Rpb25PbihFcnJvclN0cmluZyYg
ZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgb2JqZWN0SWQsIGNvbnN0IFN0cmluZyYgZXhwcmVz
c2lvbiwgY29uc3QgSlNPTjo6QXJyYXkqIG9wdGlvbmFsQXJndW1lbnRzLCBjb25zdCBib29sKiBk
b05vdFBhdXNlT25FeGNlcHRpb25zQW5kTXV0ZUNvbnNvbGUsIGNvbnN0IGJvb2wqIHJldHVybkJ5
VmFsdWUsIGNvbnN0IGJvb2wqIGdlbmVyYXRlUHJldmlldywgY29uc3QgYm9vbCogZW11bGF0ZVVz
ZXJHZXN0dXJlLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2Jq
ZWN0PiYgcmVzdWx0LCBPcHRpb25hbDxib29sPiYgd2FzVGhyb3duKQorUHJvdG9jb2w6OkVycm9y
U3RyaW5nT3I8c3RkOjp0dXBsZTxSZWY8UHJvdG9jb2w6OlJ1bnRpbWU6OlJlbW90ZU9iamVjdD4s
IE9wdGlvbmFsPGJvb2w+IC8qIHdhc1Rocm93biAqLz4+IFBhZ2VSdW50aW1lQWdlbnQ6OmNhbGxG
dW5jdGlvbk9uKGNvbnN0IFByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3RJZCYgb2JqZWN0
SWQsIGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgUmVmUHRyPEpTT046OkFycmF5PiYmIG9wdGlv
bmFsQXJndW1lbnRzLCBPcHRpb25hbDxib29sPiYmIGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRN
dXRlQ29uc29sZSwgT3B0aW9uYWw8Ym9vbD4mJiByZXR1cm5CeVZhbHVlLCBPcHRpb25hbDxib29s
PiYmIGdlbmVyYXRlUHJldmlldywgT3B0aW9uYWw8Ym9vbD4mJiBlbXVsYXRlVXNlckdlc3R1cmUp
CiB7Ci0gICAgVXNlckdlc3R1cmVFbXVsYXRpb25TY29wZSB1c2VyR2VzdHVyZVNjb3BlKG1faW5z
cGVjdGVkUGFnZSwgYXNCb29sKGVtdWxhdGVVc2VyR2VzdHVyZSkpOwotICAgIEluc3BlY3RvclJ1
bnRpbWVBZ2VudDo6Y2FsbEZ1bmN0aW9uT24oZXJyb3JTdHJpbmcsIG9iamVjdElkLCBleHByZXNz
aW9uLCBvcHRpb25hbEFyZ3VtZW50cywgZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25z
b2xlLCByZXR1cm5CeVZhbHVlLCBnZW5lcmF0ZVByZXZpZXcsIGVtdWxhdGVVc2VyR2VzdHVyZSwg
cmVzdWx0LCB3YXNUaHJvd24pOworICAgIFVzZXJHZXN0dXJlRW11bGF0aW9uU2NvcGUgdXNlckdl
c3R1cmVTY29wZShtX2luc3BlY3RlZFBhZ2UsIGVtdWxhdGVVc2VyR2VzdHVyZSAmJiAqZW11bGF0
ZVVzZXJHZXN0dXJlKTsKKyAgICByZXR1cm4gSW5zcGVjdG9yUnVudGltZUFnZW50OjpjYWxsRnVu
Y3Rpb25PbihvYmplY3RJZCwgZXhwcmVzc2lvbiwgV1RGTW92ZShvcHRpb25hbEFyZ3VtZW50cyks
IFdURk1vdmUoZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xlKSwgV1RGTW92ZShy
ZXR1cm5CeVZhbHVlKSwgV1RGTW92ZShnZW5lcmF0ZVByZXZpZXcpLCBXVEZNb3ZlKGVtdWxhdGVV
c2VyR2VzdHVyZSkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZVJ1bnRpbWVBZ2VudC5oIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy9wYWdlL1BhZ2VSdW50aW1lQWdlbnQuaApp
bmRleCAyYWYzNzM5YjdmZTdjMTZmYWE3ZDhkMjc5N2NlNmQwMTAyMTUzOThkLi4yOTg0NjVjNTJi
NDI0NjRjMjczMzY1OWUwN2YzZjc2MDE3NGE5NWViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvYWdlbnRzL3BhZ2UvUGFnZVJ1bnRpbWVBZ2VudC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvcGFnZS9QYWdlUnVudGltZUFnZW50LmgKQEAgLTQ1LDMx
ICs0NSwzMCBAQCBjbGFzcyBET01XcmFwcGVyV29ybGQ7CiBjbGFzcyBGcmFtZTsKIGNsYXNzIFBh
Z2U7CiBjbGFzcyBTZWN1cml0eU9yaWdpbjsKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwog
CiBjbGFzcyBQYWdlUnVudGltZUFnZW50IGZpbmFsIDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVj
dG9yUnVudGltZUFnZW50IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShQYWdlUnVudGltZUFn
ZW50KTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBQYWdlUnVu
dGltZUFnZW50KFBhZ2VBZ2VudENvbnRleHQmKTsKLSAgICB+UGFnZVJ1bnRpbWVBZ2VudCgpIG92
ZXJyaWRlOworICAgIH5QYWdlUnVudGltZUFnZW50KCk7CiAKICAgICAvLyBSdW50aW1lQmFja2Vu
ZERpc3BhdGNoZXJIYW5kbGVyCi0gICAgdm9pZCBlbmFibGUoRXJyb3JTdHJpbmcmKSBvdmVycmlk
ZTsKLSAgICB2b2lkIGRpc2FibGUoRXJyb3JTdHJpbmcmKSBvdmVycmlkZTsKLSAgICB2b2lkIGV2
YWx1YXRlKEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBleHByZXNzaW9uLCBjb25zdCBTdHJp
bmcqIG9iamVjdEdyb3VwLCBjb25zdCBib29sKiBpbmNsdWRlQ29tbWFuZExpbmVBUEksIGNvbnN0
IGJvb2wqIGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29sZSwgY29uc3QgaW50KiBl
eGVjdXRpb25Db250ZXh0SWQsIGNvbnN0IGJvb2wqIHJldHVybkJ5VmFsdWUsIGNvbnN0IGJvb2wq
IGdlbmVyYXRlUHJldmlldywgY29uc3QgYm9vbCogc2F2ZVJlc3VsdCwgY29uc3QgYm9vbCogZW11
bGF0ZVVzZXJHZXN0dXJlLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6UmVt
b3RlT2JqZWN0PiYgcmVzdWx0LCBPcHRpb25hbDxib29sPiYgd2FzVGhyb3duLCBPcHRpb25hbDxp
bnQ+JiBzYXZlZFJlc3VsdEluZGV4KSBvdmVycmlkZTsKLSAgICB2b2lkIGNhbGxGdW5jdGlvbk9u
KEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBvYmplY3RJZCwgY29uc3QgU3RyaW5nJiBleHBy
ZXNzaW9uLCBjb25zdCBKU09OOjpBcnJheSogb3B0aW9uYWxBcmd1bWVudHMsIGNvbnN0IGJvb2wq
IGRvTm90UGF1c2VPbkV4Y2VwdGlvbnNBbmRNdXRlQ29uc29sZSwgY29uc3QgYm9vbCogcmV0dXJu
QnlWYWx1ZSwgY29uc3QgYm9vbCogZ2VuZXJhdGVQcmV2aWV3LCBjb25zdCBib29sKiBlbXVsYXRl
VXNlckdlc3R1cmUsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVP
YmplY3Q+JiByZXN1bHQsIE9wdGlvbmFsPGJvb2w+JiB3YXNUaHJvd24pIG92ZXJyaWRlOworICAg
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gZW5hYmxlKCk7CisgICAg
SW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBkaXNhYmxlKCk7CisgICAg
SW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxzdGQ6OnR1cGxlPFJlZjxJbnNwZWN0
b3I6OlByb3RvY29sOjpSdW50aW1lOjpSZW1vdGVPYmplY3Q+LCBPcHRpb25hbDxib29sPiAvKiB3
YXNUaHJvd24gKi8sIE9wdGlvbmFsPGludD4gLyogc2F2ZWRSZXN1bHRJbmRleCAqLz4+IGV2YWx1
YXRlKGNvbnN0IFN0cmluZyYgZXhwcmVzc2lvbiwgY29uc3QgU3RyaW5nJiBvYmplY3RHcm91cCwg
T3B0aW9uYWw8Ym9vbD4mJiBpbmNsdWRlQ29tbWFuZExpbmVBUEksIE9wdGlvbmFsPGJvb2w+JiYg
ZG9Ob3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xlLCBPcHRpb25hbDxJbnNwZWN0b3I6
OlByb3RvY29sOjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0SWQ+JiYsIE9wdGlvbmFsPGJvb2w+
JiYgcmV0dXJuQnlWYWx1ZSwgT3B0aW9uYWw8Ym9vbD4mJiBnZW5lcmF0ZVByZXZpZXcsIE9wdGlv
bmFsPGJvb2w+JiYgc2F2ZVJlc3VsdCwgT3B0aW9uYWw8Ym9vbD4mJiBlbXVsYXRlVXNlckdlc3R1
cmUpOworICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8c3RkOjp0dXBsZTxS
ZWY8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0PiwgT3B0aW9uYWw8
Ym9vbD4gLyogd2FzVGhyb3duICovPj4gY2FsbEZ1bmN0aW9uT24oY29uc3QgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6UnVudGltZTo6UmVtb3RlT2JqZWN0SWQmLCBjb25zdCBTdHJpbmcmIGV4cHJlc3Np
b24sIFJlZlB0cjxKU09OOjpBcnJheT4mJiBhcmd1bWVudHMsIE9wdGlvbmFsPGJvb2w+JiYgZG9O
b3RQYXVzZU9uRXhjZXB0aW9uc0FuZE11dGVDb25zb2xlLCBPcHRpb25hbDxib29sPiYmIHJldHVy
bkJ5VmFsdWUsIE9wdGlvbmFsPGJvb2w+JiYgZ2VuZXJhdGVQcmV2aWV3LCBPcHRpb25hbDxib29s
PiYmIGVtdWxhdGVVc2VyR2VzdHVyZSk7CiAKICAgICAvLyBJbnNwZWN0b3JJbnN0cnVtZW50YXRp
b24KICAgICB2b2lkIGZyYW1lTmF2aWdhdGVkKEZyYW1lJik7CiAgICAgdm9pZCBkaWRDbGVhcldp
bmRvd09iamVjdEluV29ybGQoRnJhbWUmLCBET01XcmFwcGVyV29ybGQmKTsKIAogcHJpdmF0ZToK
LSAgICBJbnNwZWN0b3I6OkluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0Rm9yRXZhbChFcnJv
clN0cmluZyYsIGNvbnN0IGludCogZXhlY3V0aW9uQ29udGV4dElkKSBvdmVycmlkZTsKLSAgICB2
b2lkIG11dGVDb25zb2xlKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCB1bm11dGVDb25zb2xlKCkgb3Zl
cnJpZGU7CisgICAgSW5zcGVjdG9yOjpJbmplY3RlZFNjcmlwdCBpbmplY3RlZFNjcmlwdEZvckV2
YWwoSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBPcHRpb25hbDxJbnNwZWN0b3I6
OlByb3RvY29sOjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0SWQ+JiYpOworICAgIHZvaWQgbXV0
ZUNvbnNvbGUoKTsKKyAgICB2b2lkIHVubXV0ZUNvbnNvbGUoKTsKICAgICB2b2lkIHJlcG9ydEV4
ZWN1dGlvbkNvbnRleHRDcmVhdGlvbigpOwotICAgIHZvaWQgbm90aWZ5Q29udGV4dENyZWF0ZWQo
Y29uc3QgU3RyaW5nJiBmcmFtZUlkLCBKU0M6OkpTR2xvYmFsT2JqZWN0KiwgY29uc3QgRE9NV3Jh
cHBlcldvcmxkJiwgU2VjdXJpdHlPcmlnaW4qID0gbnVsbHB0cik7CisgICAgdm9pZCBub3RpZnlD
b250ZXh0Q3JlYXRlZChjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpGcmFtZUlk
JiwgSlNDOjpKU0dsb2JhbE9iamVjdCosIGNvbnN0IERPTVdyYXBwZXJXb3JsZCYsIFNlY3VyaXR5
T3JpZ2luKiA9IG51bGxwdHIpOwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPEluc3BlY3Rvcjo6UnVu
dGltZUZyb250ZW5kRGlzcGF0Y2hlcj4gbV9mcm9udGVuZERpc3BhdGNoZXI7CiAgICAgUmVmUHRy
PEluc3BlY3Rvcjo6UnVudGltZUJhY2tlbmREaXNwYXRjaGVyPiBtX2JhY2tlbmREaXNwYXRjaGVy
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvU2Vy
dmljZVdvcmtlckFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29y
a2VyL1NlcnZpY2VXb3JrZXJBZ2VudC5jcHAKaW5kZXggMThhNjBjM2MxY2IyZmExMTMzZTg5NDE5
MTI2MzlmOTM3MmVmZjJhNi4uYmJlMmNjMDNkNjQ1ZmMxMjkwODRkYmVlOWRkODA0MjJiYmQ2M2Zk
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvU2Vy
dmljZVdvcmtlckFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRz
L3dvcmtlci9TZXJ2aWNlV29ya2VyQWdlbnQuY3BwCkBAIC01NCw5ICs1NCw5IEBAIHZvaWQgU2Vy
dmljZVdvcmtlckFnZW50Ojp3aWxsRGVzdHJveUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6
OkRpc2Nvbm5lY3RSZWFzCiB7CiB9CiAKLXZvaWQgU2VydmljZVdvcmtlckFnZW50OjpnZXRJbml0
aWFsaXphdGlvbkluZm8oRXJyb3JTdHJpbmcmLCBSZWZQdHI8SW5zcGVjdG9yOjpQcm90b2NvbDo6
U2VydmljZVdvcmtlcjo6Q29uZmlndXJhdGlvbj4mIGluZm8pCitQcm90b2NvbDo6RXJyb3JTdHJp
bmdPcjxSZWY8UHJvdG9jb2w6OlNlcnZpY2VXb3JrZXI6OkNvbmZpZ3VyYXRpb24+PiBTZXJ2aWNl
V29ya2VyQWdlbnQ6OmdldEluaXRpYWxpemF0aW9uSW5mbygpCiB7Ci0gICAgaW5mbyA9IEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OlNlcnZpY2VXb3JrZXI6OkNvbmZpZ3VyYXRpb246OmNyZWF0ZSgpCisg
ICAgcmV0dXJuIFByb3RvY29sOjpTZXJ2aWNlV29ya2VyOjpDb25maWd1cmF0aW9uOjpjcmVhdGUo
KQogICAgICAgICAuc2V0VGFyZ2V0SWQobV9zZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGUuaWRlbnRp
ZmllcigpKQogICAgICAgICAuc2V0U2VjdXJpdHlPcmlnaW4obV9zZXJ2aWNlV29ya2VyR2xvYmFs
U2NvcGUuc2VjdXJpdHlPcmlnaW4oKS0+dG9SYXdTdHJpbmcoKSkKICAgICAgICAgLnNldFVybCht
X3NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZS50aHJlYWQoKS5jb250ZXh0RGF0YSgpLnNjcmlwdFVS
TC5zdHJpbmcoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMv
d29ya2VyL1NlcnZpY2VXb3JrZXJBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Fn
ZW50cy93b3JrZXIvU2VydmljZVdvcmtlckFnZW50LmgKaW5kZXggODE0OWZmM2RhYzM1NzhmYzA0
OGI2NThlNjMxN2RlMzJiMTk3ZDQwMC4uMGJhNWNjNWNjN2YzM2Q2MTFiNDVhMDQ5ODc0NTA1NWI4
ZjI5ZmZjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93b3Jr
ZXIvU2VydmljZVdvcmtlckFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Fn
ZW50cy93b3JrZXIvU2VydmljZVdvcmtlckFnZW50LmgKQEAgLTM0LDIxICszNCwxOSBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFNlcnZpY2VXb3JrZXJHbG9iYWxTY29wZTsKIAotdHlw
ZWRlZiBTdHJpbmcgRXJyb3JTdHJpbmc7Ci0KIGNsYXNzIFNlcnZpY2VXb3JrZXJBZ2VudCBmaW5h
bCA6IHB1YmxpYyBJbnNwZWN0b3JBZ2VudEJhc2UsIHB1YmxpYyBJbnNwZWN0b3I6OlNlcnZpY2VX
b3JrZXJCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KFNlcnZpY2VXb3JrZXJBZ2VudCk7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJs
aWM6CiAgICAgU2VydmljZVdvcmtlckFnZW50KFdvcmtlckFnZW50Q29udGV4dCYpOwotICAgIH5T
ZXJ2aWNlV29ya2VyQWdlbnQoKSBvdmVycmlkZTsKKyAgICB+U2VydmljZVdvcmtlckFnZW50KCk7
CiAKICAgICAvLyBJbnNwZWN0b3JBZ2VudEJhc2UKLSAgICB2b2lkIGRpZENyZWF0ZUZyb250ZW5k
QW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kUm91dGVyKiwgSW5zcGVjdG9yOjpCYWNrZW5k
RGlzcGF0Y2hlciopIG92ZXJyaWRlOwotICAgIHZvaWQgd2lsbERlc3Ryb3lGcm9udGVuZEFuZEJh
Y2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKSBvdmVycmlkZTsKKyAgICB2b2lkIGRp
ZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250ZW5kUm91dGVyKiwgSW5z
cGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlciopOworICAgIHZvaWQgd2lsbERlc3Ryb3lGcm9udGVu
ZEFuZEJhY2tlbmQoSW5zcGVjdG9yOjpEaXNjb25uZWN0UmVhc29uKTsKIAogICAgIC8vIFNlcnZp
Y2VXb3JrZXJCYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXIKLSAgICB2b2lkIGdldEluaXRpYWxpemF0
aW9uSW5mbyhFcnJvclN0cmluZyYsIFJlZlB0cjxJbnNwZWN0b3I6OlByb3RvY29sOjpTZXJ2aWNl
V29ya2VyOjpDb25maWd1cmF0aW9uPiYpIG92ZXJyaWRlOworICAgIEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkVycm9yU3RyaW5nT3I8UmVmPEluc3BlY3Rvcjo6UHJvdG9jb2w6OlNlcnZpY2VXb3JrZXI6
OkNvbmZpZ3VyYXRpb24+PiBnZXRJbml0aWFsaXphdGlvbkluZm8oKTsKIAogcHJpdmF0ZToKICAg
ICBTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGUmIG1fc2VydmljZVdvcmtlckdsb2JhbFNjb3BlOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2Vy
QXVkaXRBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9X
b3JrZXJBdWRpdEFnZW50LmNwcAppbmRleCBjMTJiNWFhNDEzMmY4OWFjNTgyZGViOWY3MmYxODUx
YTllZWY5NTNmLi44OTI0MTkwZWU2MjBmMTU1MTRhMjUwZDc2MmUyYmU0YTE5MzMwNjNkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJBdWRp
dEFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9X
b3JrZXJBdWRpdEFnZW50LmNwcApAQCAtNDgsNyArNDgsNyBAQCBXb3JrZXJBdWRpdEFnZW50OjpX
b3JrZXJBdWRpdEFnZW50KFdvcmtlckFnZW50Q29udGV4dCYgY29udGV4dCkKIAogV29ya2VyQXVk
aXRBZ2VudDo6fldvcmtlckF1ZGl0QWdlbnQoKSA9IGRlZmF1bHQ7CiAKLUluamVjdGVkU2NyaXB0
IFdvcmtlckF1ZGl0QWdlbnQ6OmluamVjdGVkU2NyaXB0Rm9yRXZhbChFcnJvclN0cmluZyYgZXJy
b3JTdHJpbmcsIGNvbnN0IGludCogZXhlY3V0aW9uQ29udGV4dElkKQorSW5qZWN0ZWRTY3JpcHQg
V29ya2VyQXVkaXRBZ2VudDo6aW5qZWN0ZWRTY3JpcHRGb3JFdmFsKFByb3RvY29sOjpFcnJvclN0
cmluZyYgZXJyb3JTdHJpbmcsIE9wdGlvbmFsPFByb3RvY29sOjpSdW50aW1lOjpFeGVjdXRpb25D
b250ZXh0SWQ+JiYgZXhlY3V0aW9uQ29udGV4dElkKQogewogICAgIGlmIChleGVjdXRpb25Db250
ZXh0SWQpIHsKICAgICAgICAgZXJyb3JTdHJpbmcgPSAiZXhlY3V0aW9uQ29udGV4dElkIGlzIG5v
dCBzdXBwb3J0ZWQgZm9yIHdvcmtlcnMgYXMgdGhlcmUgaXMgb25seSBvbmUgZXhlY3V0aW9uIGNv
bnRleHQiX3M7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dv
cmtlci9Xb3JrZXJBdWRpdEFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRz
L3dvcmtlci9Xb3JrZXJBdWRpdEFnZW50LmgKaW5kZXggZDZhY2RjMGVhM2U4OWYwZmFkMzFjY2Iy
ZDc2OGUwZTE0NmJkMzIzNS4uZDI1OWM2YTc2YzJlY2IwZWViOGVkZDczMzllYzA0NTliZDM3MmIz
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29y
a2VyQXVkaXRBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29y
a2VyL1dvcmtlckF1ZGl0QWdlbnQuaApAQCAtMzcsMTAgKzM3LDEwIEBAIGNsYXNzIFdvcmtlckF1
ZGl0QWdlbnQgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yOjpJbnNwZWN0b3JBdWRpdEFnZW50IHsK
ICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICBXb3JrZXJBdWRpdEFn
ZW50KFdvcmtlckFnZW50Q29udGV4dCYpOwotICAgIH5Xb3JrZXJBdWRpdEFnZW50KCkgb3ZlcnJp
ZGU7CisgICAgfldvcmtlckF1ZGl0QWdlbnQoKTsKIAogcHJpdmF0ZToKLSAgICBJbnNwZWN0b3I6
OkluamVjdGVkU2NyaXB0IGluamVjdGVkU2NyaXB0Rm9yRXZhbChJbnNwZWN0b3I6OkVycm9yU3Ry
aW5nJiwgY29uc3QgaW50KiBleGVjdXRpb25Db250ZXh0SWQpIG92ZXJyaWRlOworICAgIEluc3Bl
Y3Rvcjo6SW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHRGb3JFdmFsKEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkVycm9yU3RyaW5nJiwgT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGlt
ZTo6RXhlY3V0aW9uQ29udGV4dElkPiYmKTsKIAogICAgIFdvcmtlckdsb2JhbFNjb3BlJiBtX3dv
cmtlckdsb2JhbFNjb3BlOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9hZ2VudHMvd29ya2VyL1dvcmtlckNvbnNvbGVBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2VyQ29uc29sZUFnZW50LmgKaW5kZXggYjdiNTVkMDA2
NTkwZWZiMDgzZmViYjk0ZTQzYjQxMmQ2M2NlYWZkMC4uNTcxNTk5MTI0N2NhZmI5ZDY3ZWYzMzE3
MWFkZmQxYzk2YzdlNDgyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Fn
ZW50cy93b3JrZXIvV29ya2VyQ29uc29sZUFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2VyQ29uc29sZUFnZW50LmgKQEAgLTM1LDcgKzM1LDcg
QEAgY2xhc3MgV29ya2VyQ29uc29sZUFnZW50IGZpbmFsIDogcHVibGljIFdlYkNvbnNvbGVBZ2Vu
dCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgV29ya2VyQ29u
c29sZUFnZW50KFdvcmtlckFnZW50Q29udGV4dCYpOwotICAgIH5Xb3JrZXJDb25zb2xlQWdlbnQo
KSBvdmVycmlkZTsKKyAgICB+V29ya2VyQ29uc29sZUFnZW50KCk7CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRz
L3dvcmtlci9Xb3JrZXJET01EZWJ1Z2dlckFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlckRPTURlYnVnZ2VyQWdlbnQuY3BwCmluZGV4IGJkNWQ4
YTgzNGVhZTg2MzMwZmNiOTcyYzU5MmQ1ZjcwYTdlNzMwNGMuLjkyMjc0MzUwYzYzNzE0NjA1MWQ3
NDk5YzliZmI3NDYwNzAzMjIxMTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9hZ2VudHMvd29ya2VyL1dvcmtlckRPTURlYnVnZ2VyQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlckRPTURlYnVnZ2VyQWdlbnQuY3Bw
CkBAIC0zNywxOSArMzcsMjAgQEAgV29ya2VyRE9NRGVidWdnZXJBZ2VudDo6V29ya2VyRE9NRGVi
dWdnZXJBZ2VudChXb3JrZXJBZ2VudENvbnRleHQmIGNvbnRleHQsIEluc3AKIAogV29ya2VyRE9N
RGVidWdnZXJBZ2VudDo6fldvcmtlckRPTURlYnVnZ2VyQWdlbnQoKSA9IGRlZmF1bHQ7CiAKLXZv
aWQgV29ya2VyRE9NRGVidWdnZXJBZ2VudDo6c2V0RE9NQnJlYWtwb2ludChFcnJvclN0cmluZyYg
ZXJyb3JTdHJpbmcsIGludCAvKiBub2RlSWQgKi8sIGNvbnN0IFN0cmluZyYgLyogdHlwZVN0cmlu
ZyAqLywgY29uc3QgSlNPTjo6T2JqZWN0KiAvKiBvcHRpb25zUGF5bG9hZCAqLykKK1Byb3RvY29s
OjpFcnJvclN0cmluZ09yPHZvaWQ+IFdvcmtlckRPTURlYnVnZ2VyQWdlbnQ6OnNldERPTUJyZWFr
cG9pbnQoUHJvdG9jb2w6OkRPTTo6Tm9kZUlkLCBQcm90b2NvbDo6RE9NRGVidWdnZXI6OkRPTUJy
ZWFrcG9pbnRUeXBlLCBSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIC8qIG9wdGlvbnMgKi8pCiB7Ci0g
ICAgZXJyb3JTdHJpbmcgPSAiTm90IHN1cHBvcnRlZCJfczsKKyAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoIk5vdCBzdXBwb3J0ZWQiX3MpOwogfQogCi12b2lkIFdvcmtlckRPTURlYnVnZ2VyQWdl
bnQ6OnJlbW92ZURPTUJyZWFrcG9pbnQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBpbnQgLyog
bm9kZUlkICovLCBjb25zdCBTdHJpbmcmIC8qIHR5cGVTdHJpbmcgKi8pCitQcm90b2NvbDo6RXJy
b3JTdHJpbmdPcjx2b2lkPiBXb3JrZXJET01EZWJ1Z2dlckFnZW50OjpyZW1vdmVET01CcmVha3Bv
aW50KFByb3RvY29sOjpET006Ok5vZGVJZCwgUHJvdG9jb2w6OkRPTURlYnVnZ2VyOjpET01CcmVh
a3BvaW50VHlwZSkKIHsKLSAgICBlcnJvclN0cmluZyA9ICJOb3Qgc3VwcG9ydGVkIl9zOworICAg
IHJldHVybiBtYWtlVW5leHBlY3RlZCgiTm90IHN1cHBvcnRlZCJfcyk7CiB9CiAKLXZvaWQgV29y
a2VyRE9NRGVidWdnZXJBZ2VudDo6c2V0QW5pbWF0aW9uRnJhbWVCcmVha3BvaW50KEVycm9yU3Ry
aW5nJiBlcnJvclN0cmluZywgUmVmUHRyPEpTQzo6QnJlYWtwb2ludD4mJikKK2Jvb2wgV29ya2Vy
RE9NRGVidWdnZXJBZ2VudDo6c2V0QW5pbWF0aW9uRnJhbWVCcmVha3BvaW50KFByb3RvY29sOjpF
cnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIFJlZlB0cjxKU0M6OkJyZWFrcG9pbnQ+JiYpCiB7CiAg
ICAgZXJyb3JTdHJpbmcgPSAiTm90IHN1cHBvcnRlZCJfczsKKyAgICByZXR1cm4gZmFsc2U7CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlckRPTURlYnVnZ2VyQWdlbnQuaCBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlckRPTURlYnVnZ2VyQWdlbnQuaApp
bmRleCA4NmViOTNmNWUxOTc1NTFiYmQyMDk2OTY1NzljNzA4OTRkNThjMjFjLi41NmY1YTA5MGEz
MzA4NjAxZGJkYmE5YzRmMmI0ZDNmN2MxMTMzZDE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJET01EZWJ1Z2dlckFnZW50LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2VyRE9NRGVidWdnZXJB
Z2VudC5oCkBAIC0zMSwxOSArMzEsMTcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi10eXBl
ZGVmIFN0cmluZyBFcnJvclN0cmluZzsKLQogY2xhc3MgV29ya2VyRE9NRGVidWdnZXJBZ2VudCBm
aW5hbCA6IHB1YmxpYyBJbnNwZWN0b3JET01EZWJ1Z2dlckFnZW50IHsKIHB1YmxpYzoKICAgICBX
b3JrZXJET01EZWJ1Z2dlckFnZW50KFdvcmtlckFnZW50Q29udGV4dCYsIEluc3BlY3Rvcjo6SW5z
cGVjdG9yRGVidWdnZXJBZ2VudCopOwotICAgIH5Xb3JrZXJET01EZWJ1Z2dlckFnZW50KCkgb3Zl
cnJpZGU7CisgICAgfldvcmtlckRPTURlYnVnZ2VyQWdlbnQoKTsKIAogICAgIC8vIERPTURlYnVn
Z2VyQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyCi0gICAgdm9pZCBzZXRET01CcmVha3BvaW50KEVy
cm9yU3RyaW5nJiwgaW50IG5vZGVJZCwgY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBKU09OOjpP
YmplY3QqIG9wdGlvbnMpIG92ZXJyaWRlOwotICAgIHZvaWQgcmVtb3ZlRE9NQnJlYWtwb2ludChF
cnJvclN0cmluZyYsIGludCBub2RlSWQsIGNvbnN0IFN0cmluZyYgdHlwZSkgb3ZlcnJpZGU7Cisg
ICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzZXRET01CcmVha3Bv
aW50KEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkLCBJbnNwZWN0b3I6OlByb3RvY29s
OjpET01EZWJ1Z2dlcjo6RE9NQnJlYWtwb2ludFR5cGUsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYg
b3B0aW9ucyk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBy
ZW1vdmVET01CcmVha3BvaW50KEluc3BlY3Rvcjo6UHJvdG9jb2w6OkRPTTo6Tm9kZUlkLCBJbnNw
ZWN0b3I6OlByb3RvY29sOjpET01EZWJ1Z2dlcjo6RE9NQnJlYWtwb2ludFR5cGUpOwogCiBwcml2
YXRlOgotICAgIHZvaWQgc2V0QW5pbWF0aW9uRnJhbWVCcmVha3BvaW50KEVycm9yU3RyaW5nJiwg
UmVmUHRyPEpTQzo6QnJlYWtwb2ludD4mJikgb3ZlcnJpZGU7CisgICAgYm9vbCBzZXRBbmltYXRp
b25GcmFtZUJyZWFrcG9pbnQoSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBSZWZQ
dHI8SlNDOjpCcmVha3BvaW50PiYmKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlckRl
YnVnZ2VyQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93b3JrZXIv
V29ya2VyRGVidWdnZXJBZ2VudC5jcHAKaW5kZXggY2JjNjIwNTIyMTk0ZjI5YTk0MTg3YThhMjdh
YzEyYjQxOWQzNTllMC4uN2FhNzJiNmE0YzY0Y2E5ZjY3ODE1MGQwNmEzMmQwMjk0YzUwODgyNSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2Vy
RGVidWdnZXJBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93
b3JrZXIvV29ya2VyRGVidWdnZXJBZ2VudC5jcHAKQEAgLTUzLDcgKzUzLDcgQEAgdm9pZCBXb3Jr
ZXJEZWJ1Z2dlckFnZW50OjpicmVha3BvaW50QWN0aW9uTG9nKEpTR2xvYmFsT2JqZWN0KiBsZXhp
Y2FsR2xvYmFsT2JqZWMKICAgICBtX3dvcmtlckdsb2JhbFNjb3BlLmFkZENvbnNvbGVNZXNzYWdl
KG1ha2VVbmlxdWU8Q29uc29sZU1lc3NhZ2U+KE1lc3NhZ2VTb3VyY2U6OkpTLCBNZXNzYWdlVHlw
ZTo6TG9nLCBNZXNzYWdlTGV2ZWw6OkxvZywgbWVzc2FnZSwgY3JlYXRlU2NyaXB0Q2FsbFN0YWNr
KGxleGljYWxHbG9iYWxPYmplY3QpKSk7CiB9CiAKLUluamVjdGVkU2NyaXB0IFdvcmtlckRlYnVn
Z2VyQWdlbnQ6OmluamVjdGVkU2NyaXB0Rm9yRXZhbChFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcs
IGNvbnN0IGludCogZXhlY3V0aW9uQ29udGV4dElkKQorSW5qZWN0ZWRTY3JpcHQgV29ya2VyRGVi
dWdnZXJBZ2VudDo6aW5qZWN0ZWRTY3JpcHRGb3JFdmFsKFByb3RvY29sOjpFcnJvclN0cmluZyYg
ZXJyb3JTdHJpbmcsIE9wdGlvbmFsPFByb3RvY29sOjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0
SWQ+JiYgZXhlY3V0aW9uQ29udGV4dElkKQogewogICAgIGlmIChleGVjdXRpb25Db250ZXh0SWQp
IHsKICAgICAgICAgZXJyb3JTdHJpbmcgPSAiZXhlY3V0aW9uQ29udGV4dElkIGlzIG5vdCBzdXBw
b3J0ZWQgZm9yIHdvcmtlcnMgYXMgdGhlcmUgaXMgb25seSBvbmUgZXhlY3V0aW9uIGNvbnRleHQi
X3M7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9X
b3JrZXJEZWJ1Z2dlckFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dv
cmtlci9Xb3JrZXJEZWJ1Z2dlckFnZW50LmgKaW5kZXggNGFjMDdkNmNjMzdjMjI4MDMzMzhlYjgw
ZDM0MjE5NTIxYjk2ZjNkZS4uN2NhNjRlNDAxM2E1NGI0MThkNTNlNDc0ODAyZTczMmJmMTkwOGM5
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29y
a2VyRGVidWdnZXJBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMv
d29ya2VyL1dvcmtlckRlYnVnZ2VyQWdlbnQuaApAQCAtMzYsMTcgKzM2LDE3IEBAIGNsYXNzIFdv
cmtlckRlYnVnZ2VyQWdlbnQgZmluYWwgOiBwdWJsaWMgV2ViRGVidWdnZXJBZ2VudCB7CiAgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CiAgICAgV29ya2VyRGVidWdnZXJBZ2Vu
dChXb3JrZXJBZ2VudENvbnRleHQmKTsKLSAgICB+V29ya2VyRGVidWdnZXJBZ2VudCgpIG92ZXJy
aWRlOworICAgIH5Xb3JrZXJEZWJ1Z2dlckFnZW50KCk7CiAKICAgICAvLyBKU0M6OkRlYnVnZ2Vy
OjpPYnNlcnZlcgotICAgIHZvaWQgYnJlYWtwb2ludEFjdGlvbkxvZyhKU0M6OkpTR2xvYmFsT2Jq
ZWN0KiwgY29uc3QgU3RyaW5nJiBkYXRhKSBmaW5hbDsKKyAgICB2b2lkIGJyZWFrcG9pbnRBY3Rp
b25Mb2coSlNDOjpKU0dsb2JhbE9iamVjdCosIGNvbnN0IFN0cmluZyYgZGF0YSk7CiAKIHByaXZh
dGU6CiAgICAgLy8gV2UgZG9uJ3QgbmVlZCB0byBtdXRlIGNvbnNvbGUgZm9yIHdvcmtlcnMuCi0g
ICAgdm9pZCBtdXRlQ29uc29sZSgpIG92ZXJyaWRlIHsgfQotICAgIHZvaWQgdW5tdXRlQ29uc29s
ZSgpIG92ZXJyaWRlIHsgfQorICAgIHZvaWQgbXV0ZUNvbnNvbGUoKSB7IH0KKyAgICB2b2lkIHVu
bXV0ZUNvbnNvbGUoKSB7IH0KIAotICAgIEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHQgaW5qZWN0
ZWRTY3JpcHRGb3JFdmFsKEVycm9yU3RyaW5nJiwgY29uc3QgaW50KiBleGVjdXRpb25Db250ZXh0
SWQpIG92ZXJyaWRlOworICAgIEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3Jp
cHRGb3JFdmFsKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nJiwgT3B0aW9uYWw8SW5z
cGVjdG9yOjpQcm90b2NvbDo6UnVudGltZTo6RXhlY3V0aW9uQ29udGV4dElkPiYmKTsKIAogICAg
IFdvcmtlckdsb2JhbFNjb3BlJiBtX3dvcmtlckdsb2JhbFNjb3BlOwogfTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlck5ldHdvcmtBZ2Vu
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJOZXR3
b3JrQWdlbnQuY3BwCmluZGV4IDUzZmE4ODNhZDk3MTg4Njg0Y2I5NGMwOTBlNzk2MTY5MDgxYjZi
NGQuLjVkY2U4MjZmNGIxMGUwY2Q0ODVjODU5YWEzNzI5MzJiZWU2NGI1YTkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlck5ldHdvcmtBZ2Vu
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2Vy
TmV0d29ya0FnZW50LmNwcApAQCAtNDMsMTIgKzQzLDEyIEBAIFdvcmtlck5ldHdvcmtBZ2VudDo6
V29ya2VyTmV0d29ya0FnZW50KFdvcmtlckFnZW50Q29udGV4dCYgY29udGV4dCkKIAogV29ya2Vy
TmV0d29ya0FnZW50Ojp+V29ya2VyTmV0d29ya0FnZW50KCkgPSBkZWZhdWx0OwogCi1TdHJpbmcg
V29ya2VyTmV0d29ya0FnZW50Ojpsb2FkZXJJZGVudGlmaWVyKERvY3VtZW50TG9hZGVyKikKK1By
b3RvY29sOjpOZXR3b3JrOjpMb2FkZXJJZCBXb3JrZXJOZXR3b3JrQWdlbnQ6OmxvYWRlcklkZW50
aWZpZXIoRG9jdW1lbnRMb2FkZXIqKQogewogICAgIHJldHVybiB7IH07CiB9CiAKLVN0cmluZyBX
b3JrZXJOZXR3b3JrQWdlbnQ6OmZyYW1lSWRlbnRpZmllcihEb2N1bWVudExvYWRlciopCitQcm90
b2NvbDo6TmV0d29yazo6RnJhbWVJZCBXb3JrZXJOZXR3b3JrQWdlbnQ6OmZyYW1lSWRlbnRpZmll
cihEb2N1bWVudExvYWRlciopCiB7CiAgICAgcmV0dXJuIHsgfTsKIH0KQEAgLTU5LDEyICs1OSwx
MiBAQCBWZWN0b3I8V2ViU29ja2V0Kj4gV29ya2VyTmV0d29ya0FnZW50OjphY3RpdmVXZWJTb2Nr
ZXRzKGNvbnN0IExvY2tIb2xkZXImKQogICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgV29ya2Vy
TmV0d29ya0FnZW50OjpzZXRSZXNvdXJjZUNhY2hpbmdEaXNhYmxlZChib29sIGRpc2FibGVkKQor
dm9pZCBXb3JrZXJOZXR3b3JrQWdlbnQ6OnNldFJlc291cmNlQ2FjaGluZ0Rpc2FibGVkSW50ZXJu
YWwoYm9vbCBkaXNhYmxlZCkKIHsKICAgICBtX3dvcmtlckdsb2JhbFNjb3BlLnRocmVhZCgpLndv
cmtlckRlYnVnZ2VyUHJveHkoKS5zZXRSZXNvdXJjZUNhY2hpbmdEaXNhYmxlZEJ5V2ViSW5zcGVj
dG9yKGRpc2FibGVkKTsKIH0KIAotU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogV29ya2VyTmV0d29y
a0FnZW50OjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KEVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5n
JikKK1NjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIFdvcmtlck5ldHdvcmtBZ2VudDo6c2NyaXB0RXhl
Y3V0aW9uQ29udGV4dChQcm90b2NvbDo6RXJyb3JTdHJpbmcmLCBjb25zdCBQcm90b2NvbDo6TmV0
d29yazo6RnJhbWVJZCYpCiB7CiAgICAgcmV0dXJuICZtX3dvcmtlckdsb2JhbFNjb3BlOwogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2Vy
TmV0d29ya0FnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9X
b3JrZXJOZXR3b3JrQWdlbnQuaAppbmRleCA4OTlmMGE1NmZkMWI3ZGE5NDNhNDU1M2I4Yzk0Y2Yz
YzdiZmIwYjk0Li5kZDg3ZDgxMDIwMmU1YjE3ZGU5Y2YwN2I3NjJiNTI1ZWVlMmUzYmU4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJOZXR3
b3JrQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9X
b3JrZXJOZXR3b3JrQWdlbnQuaApAQCAtMzQsMTUgKzM0LDE1IEBAIGNsYXNzIFdvcmtlck5ldHdv
cmtBZ2VudCBmaW5hbCA6IHB1YmxpYyBJbnNwZWN0b3JOZXR3b3JrQWdlbnQgewogICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIFdvcmtlck5ldHdvcmtBZ2VudChXb3Jr
ZXJBZ2VudENvbnRleHQmKTsKLSAgICB+V29ya2VyTmV0d29ya0FnZW50KCkgb3ZlcnJpZGU7Cisg
ICAgfldvcmtlck5ldHdvcmtBZ2VudCgpOwogCiBwcml2YXRlOgotICAgIFN0cmluZyBsb2FkZXJJ
ZGVudGlmaWVyKERvY3VtZW50TG9hZGVyKikgb3ZlcnJpZGU7Ci0gICAgU3RyaW5nIGZyYW1lSWRl
bnRpZmllcihEb2N1bWVudExvYWRlciopIG92ZXJyaWRlOwotICAgIFZlY3RvcjxXZWJTb2NrZXQq
PiBhY3RpdmVXZWJTb2NrZXRzKGNvbnN0IExvY2tIb2xkZXImKSBvdmVycmlkZTsKLSAgICB2b2lk
IHNldFJlc291cmNlQ2FjaGluZ0Rpc2FibGVkKGJvb2wpIG92ZXJyaWRlOwotICAgIFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoRXJyb3JTdHJpbmcmLCBjb25z
dCBTdHJpbmcmIGZyYW1lSWQpIG92ZXJyaWRlOwotICAgIGJvb2wgc2hvdWxkRm9yY2VCdWZmZXJp
bmdOZXR3b3JrUmVzb3VyY2VEYXRhKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQor
ICAgIEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OkxvYWRlcklkIGxvYWRlcklkZW50aWZp
ZXIoRG9jdW1lbnRMb2FkZXIqKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpOZXR3b3JrOjpG
cmFtZUlkIGZyYW1lSWRlbnRpZmllcihEb2N1bWVudExvYWRlciopOworICAgIFZlY3RvcjxXZWJT
b2NrZXQqPiBhY3RpdmVXZWJTb2NrZXRzKGNvbnN0IExvY2tIb2xkZXImKTsKKyAgICB2b2lkIHNl
dFJlc291cmNlQ2FjaGluZ0Rpc2FibGVkSW50ZXJuYWwoYm9vbCk7CisgICAgU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dChJbnNwZWN0b3I6OlByb3RvY29sOjpF
cnJvclN0cmluZyYsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6Ok5ldHdvcms6OkZyYW1lSWQm
KTsKKyAgICBib29sIHNob3VsZEZvcmNlQnVmZmVyaW5nTmV0d29ya1Jlc291cmNlRGF0YSgpIGNv
bnN0IHsgcmV0dXJuIHRydWU7IH0KIAogICAgIFdvcmtlckdsb2JhbFNjb3BlJiBtX3dvcmtlckds
b2JhbFNjb3BlOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2Vu
dHMvd29ya2VyL1dvcmtlclJ1bnRpbWVBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJSdW50aW1lQWdlbnQuY3BwCmluZGV4IGQ5MjMwODFjNTFl
M2JkMjc1MjFhYTI0MWM3Y2FjOGZiNDBkM2UyODMuLmZmZmQzY2VhMjE1MzU5ZmU2ZjBlZDFlZGQ3
NzJkMTZiNzA5NTFkZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2Vu
dHMvd29ya2VyL1dvcmtlclJ1bnRpbWVBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2FnZW50cy93b3JrZXIvV29ya2VyUnVudGltZUFnZW50LmNwcApAQCAtNTEsNyArNTEs
NyBAQCBXb3JrZXJSdW50aW1lQWdlbnQ6OldvcmtlclJ1bnRpbWVBZ2VudChXb3JrZXJBZ2VudENv
bnRleHQmIGNvbnRleHQpCiAKIFdvcmtlclJ1bnRpbWVBZ2VudDo6fldvcmtlclJ1bnRpbWVBZ2Vu
dCgpID0gZGVmYXVsdDsKIAotSW5qZWN0ZWRTY3JpcHQgV29ya2VyUnVudGltZUFnZW50Ojppbmpl
Y3RlZFNjcmlwdEZvckV2YWwoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBpbnQqIGV4
ZWN1dGlvbkNvbnRleHRJZCkKK0luamVjdGVkU2NyaXB0IFdvcmtlclJ1bnRpbWVBZ2VudDo6aW5q
ZWN0ZWRTY3JpcHRGb3JFdmFsKFByb3RvY29sOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIE9w
dGlvbmFsPFByb3RvY29sOjpSdW50aW1lOjpFeGVjdXRpb25Db250ZXh0SWQ+JiYgZXhlY3V0aW9u
Q29udGV4dElkKQogewogICAgIGlmIChleGVjdXRpb25Db250ZXh0SWQpIHsKICAgICAgICAgZXJy
b3JTdHJpbmcgPSAiZXhlY3V0aW9uQ29udGV4dElkIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHdvcmtl
cnMgYXMgdGhlcmUgaXMgb25seSBvbmUgZXhlY3V0aW9uIGNvbnRleHQiX3M7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvYWdlbnRzL3dvcmtlci9Xb3JrZXJSdW50aW1lQWdl
bnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlclJ1bnRp
bWVBZ2VudC5oCmluZGV4IDUzMDhlYjQzODhkNGQxMDUyZWM3NDU4NTA0N2ExZTg4ZTdkNDNiNGIu
LjZiOTk4ZjRkMTczMTg1MWY5OWI2N2VlMTVhNWQyMDAxNTg3ZjRkMDYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlclJ1bnRpbWVBZ2VudC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9hZ2VudHMvd29ya2VyL1dvcmtlclJ1bnRp
bWVBZ2VudC5oCkBAIC0zNywyMSArMzcsMjAgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xh
c3MgV29ya2VyR2xvYmFsU2NvcGU7Ci10eXBlZGVmIFN0cmluZyBFcnJvclN0cmluZzsKIAogY2xh
c3MgV29ya2VyUnVudGltZUFnZW50IGZpbmFsIDogcHVibGljIEluc3BlY3Rvcjo6SW5zcGVjdG9y
UnVudGltZUFnZW50IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShXb3JrZXJSdW50aW1lQWdl
bnQpOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIFdvcmtlclJ1
bnRpbWVBZ2VudChXb3JrZXJBZ2VudENvbnRleHQmKTsKLSAgICB+V29ya2VyUnVudGltZUFnZW50
KCkgb3ZlcnJpZGU7CisgICAgfldvcmtlclJ1bnRpbWVBZ2VudCgpOwogCiBwcml2YXRlOgotICAg
IEluc3BlY3Rvcjo6SW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHRGb3JFdmFsKEVycm9yU3Ry
aW5nJiwgY29uc3QgaW50KiBleGVjdXRpb25Db250ZXh0SWQpIG92ZXJyaWRlOworICAgIEluc3Bl
Y3Rvcjo6SW5qZWN0ZWRTY3JpcHQgaW5qZWN0ZWRTY3JpcHRGb3JFdmFsKEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkVycm9yU3RyaW5nJiwgT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6UnVudGlt
ZTo6RXhlY3V0aW9uQ29udGV4dElkPiYmKTsKIAogICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gbXV0
ZSBjb25zb2xlIGZvciB3b3JrZXJzLgotICAgIHZvaWQgbXV0ZUNvbnNvbGUoKSBvdmVycmlkZSB7
IH0KLSAgICB2b2lkIHVubXV0ZUNvbnNvbGUoKSBvdmVycmlkZSB7IH0KKyAgICB2b2lkIG11dGVD
b25zb2xlKCkgeyB9CisgICAgdm9pZCB1bm11dGVDb25zb2xlKCkgeyB9CiAKICAgICBSZWZQdHI8
SW5zcGVjdG9yOjpSdW50aW1lQmFja2VuZERpc3BhdGNoZXI+IG1fYmFja2VuZERpc3BhdGNoZXI7
CiAgICAgV29ya2VyR2xvYmFsU2NvcGUmIG1fd29ya2VyR2xvYmFsU2NvcGU7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1VdGlsaXRpZXMuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNVXRpbGl0aWVzLmNw
cAppbmRleCA1ZTg4NWFkNmU1ODY5MDljMGVkMjE1YmVlNWJlOGU4ZWY3YzI3YWY4Li41YmViY2I0
OWFhOGViOWEyYmIwNzExZWFlMDgwZjM3N2UyMmI5ODM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1VdGlsaXRpZXMuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NETVV0aWxpdGllcy5jcHAKQEAgLTQ3
LDEyICs0NywxMiBAQCBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJzZUpTT05PYmplY3QoY29uc3Qg
U2hhcmVkQnVmZmVyJiBidWZmZXIpCiAKICAgICAvLyBQYXJzZSB0aGUgYnVmZmVyIGNvbnRlbnRz
IGFzIEpTT04sIHJldHVybmluZyB0aGUgcm9vdCBvYmplY3QgKGlmIGFueSkuCiAgICAgU3RyaW5n
IGpzb24geyBidWZmZXIuZGF0YSgpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc2l6ZSkgfTsKLSAg
ICBSZWZQdHI8SlNPTjo6VmFsdWU+IHZhbHVlOwotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG9i
amVjdDsKLSAgICBpZiAoIUpTT046OlZhbHVlOjpwYXJzZUpTT04oanNvbiwgdmFsdWUpIHx8ICF2
YWx1ZS0+YXNPYmplY3Qob2JqZWN0KSkKKworICAgIGF1dG8gdmFsdWUgPSBKU09OOjpWYWx1ZTo6
cGFyc2VKU09OKGpzb24pOworICAgIGlmICghdmFsdWUpCiAgICAgICAgIHJldHVybiBudWxscHRy
OwogCi0gICAgcmV0dXJuIG9iamVjdDsKKyAgICByZXR1cm4gdmFsdWUtPmFzT2JqZWN0KCk7CiB9
CiAKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNyeXB0ZWRtZWRp
YS9jbGVhcmtleS9DRE1DbGVhcktleS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lbmNy
eXB0ZWRtZWRpYS9jbGVhcmtleS9DRE1DbGVhcktleS5jcHAKaW5kZXggZTZjYzIyZDkwYzdhYzM5
YjU2ZmQ4MmExNmIwNzY1ZWMxZTFjZmE4Ny4uNWExODJmZGY0NTI2NDJhYThlZjQ2MGI3NzRhYzll
N2I0MGMyZWM1MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZW5jcnlwdGVk
bWVkaWEvY2xlYXJrZXkvQ0RNQ2xlYXJLZXkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2VuY3J5cHRlZG1lZGlhL2NsZWFya2V5L0NETUNsZWFyS2V5LmNwcApAQCAtNTUsMjMgKzU1
LDI3IEBAIHN0YXRpYyBPcHRpb25hbDxWZWN0b3I8UmVmUHRyPEtleUhhbmRsZT4+PiBwYXJzZUxp
Y2Vuc2VGb3JtYXQoY29uc3QgSlNPTjo6T2JqZWN0CiAgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CiAKICAgICAvLyBSZXRyaWV2ZSB0aGUga2V5cyBhcnJheS4KLSAgICBSZWZQdHI8SlNPTjo6
QXJyYXk+IGtleXNBcnJheTsKLSAgICBpZiAoIWl0LT52YWx1ZS0+YXNBcnJheShrZXlzQXJyYXkp
KQorICAgIGF1dG8ga2V5c0FycmF5ID0gaXQtPnZhbHVlLT5hc0FycmF5KCk7CisgICAgaWYgKCFr
ZXlzQXJyYXkpCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICBWZWN0b3I8UmVm
UHRyPEtleUhhbmRsZT4+IGRlY29kZWRLZXlzOwogICAgIGJvb2wgdmFsaWRGb3JtYXQgPSBzdGQ6
OmFsbF9vZihrZXlzQXJyYXktPmJlZ2luKCksIGtleXNBcnJheS0+ZW5kKCksCiAgICAgICAgIFsm
ZGVjb2RlZEtleXNdIChjb25zdCBhdXRvJiB2YWx1ZSkgewotICAgICAgICAgICAgUmVmUHRyPEpT
T046Ok9iamVjdD4ga2V5T2JqZWN0OwotICAgICAgICAgICAgaWYgKCF2YWx1ZS0+YXNPYmplY3Qo
a2V5T2JqZWN0KSkKKyAgICAgICAgICAgIGF1dG8ga2V5T2JqZWN0ID0gdmFsdWUtPmFzT2JqZWN0
KCk7CisgICAgICAgICAgICBpZiAoIWtleU9iamVjdCkKICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICAgICAgICAgIFN0cmluZyBrZXlUeXBlOwotICAgICAgICAgICAgaWYgKCFr
ZXlPYmplY3QtPmdldFN0cmluZygia3R5Iiwga2V5VHlwZSkgfHwgIWVxdWFsTGV0dGVyc0lnbm9y
aW5nQVNDSUlDYXNlKGtleVR5cGUsICJvY3QiKSkKKyAgICAgICAgICAgIGF1dG8ga2V5VHlwZSA9
IGtleU9iamVjdC0+Z2V0U3RyaW5nKCJrdHkiKTsKKyAgICAgICAgICAgIGlmICgha2V5VHlwZSB8
fCAhZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uoa2V5VHlwZSwgIm9jdCIpKQogICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICAgICAgU3RyaW5nIGtleUlELCBrZXlW
YWx1ZTsKLSAgICAgICAgICAgIGlmICgha2V5T2JqZWN0LT5nZXRTdHJpbmcoImtpZCIsIGtleUlE
KSB8fCAha2V5T2JqZWN0LT5nZXRTdHJpbmcoImsiLCBrZXlWYWx1ZSkpCisgICAgICAgICAgICBh
dXRvIGtleUlEID0ga2V5T2JqZWN0LT5nZXRTdHJpbmcoImtpZCIpOworICAgICAgICAgICAgaWYg
KCFrZXlJRCkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgIGF1
dG8ga2V5VmFsdWUgPSBrZXlPYmplY3QtPmdldFN0cmluZygiayIpOworICAgICAgICAgICAgaWYg
KCFrZXlWYWx1ZSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgICAg
IEtleUlEVHlwZSBrZXlJRERhdGE7CkBAIC05Niw4ICsxMDAsOCBAQCBzdGF0aWMgYm9vbCBwYXJz
ZUxpY2Vuc2VSZWxlYXNlQWNrbm93bGVkZ2VtZW50Rm9ybWF0KGNvbnN0IEpTT046Ok9iamVjdCYg
cm9vdCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gUmV0cmlldmUgdGhlIGtpZHMg
YXJyYXkuCi0gICAgUmVmUHRyPEpTT046OkFycmF5PiBraWRzQXJyYXk7Ci0gICAgaWYgKCFpdC0+
dmFsdWUtPmFzQXJyYXkoa2lkc0FycmF5KSkKKyAgICBhdXRvIGtpZHNBcnJheSA9IGl0LT52YWx1
ZS0+YXNBcnJheSgpOworICAgIGlmICgha2lkc0FycmF5KQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKICAgICAvLyBGSVhNRTogUmV0dXJuIHRoZSBrZXkgSURzIGFuZCB2YWxpZGF0ZSB0aGVtLgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9u
L0NETUZhaXJQbGF5U3RyZWFtaW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2F2Zm91bmRhdGlvbi9DRE1GYWlyUGxheVN0cmVhbWluZy5jcHAKaW5kZXggOGFjNDhlYzVk
YzY5YjMxNDk1N2JhNDMzZjk3MTAxZWEyNzc2OTY0NC4uNGY0MmM0OTNjYzM1NzBkZGM2YWYwOGRl
MzkwNWQwY2M4NDlkOWE3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvYXZmb3VuZGF0aW9uL0NETUZhaXJQbGF5U3RyZWFtaW5nLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vQ0RNRmFpclBsYXlTdHJlYW1p
bmcuY3BwCkBAIC05MiwyNCArOTIsMjQgQEAgc3RhdGljIFZlY3RvcjxSZWY8U2hhcmVkQnVmZmVy
Pj4gZXh0cmFjdFNpbmZEYXRhKGNvbnN0IFNoYXJlZEJ1ZmZlciYgYnVmZmVyKQogICAgICAgICBy
ZXR1cm4geyB9OwogICAgIFN0cmluZyBqc29uIHsgYnVmZmVyLmRhdGEoKSwgc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KGJ1ZmZlci5zaXplKCkpIH07CiAKLSAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHZh
bHVlOwotICAgIGlmICghSlNPTjo6VmFsdWU6OnBhcnNlSlNPTihqc29uLCB2YWx1ZSkpCisgICAg
YXV0byB2YWx1ZSA9IEpTT046OlZhbHVlOjpwYXJzZUpTT04oanNvbik7CisgICAgaWYgKCF2YWx1
ZSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG9iamVj
dDsKLSAgICBpZiAoIXZhbHVlLT5hc09iamVjdChvYmplY3QpKQorICAgIGF1dG8gb2JqZWN0ID0g
dmFsdWUtPmFzT2JqZWN0KCk7CisgICAgaWYgKCFvYmplY3QpCiAgICAgICAgIHJldHVybiB7IH07
CiAKLSAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IHNpbmZBcnJheTsKLSAgICBpZiAoIW9iamVjdC0+
Z2V0QXJyYXkoQ0RNUHJpdmF0ZUZhaXJQbGF5U3RyZWFtaW5nOjpzaW5mTmFtZSgpLCBzaW5mQXJy
YXkpKQorICAgIGF1dG8gc2luZkFycmF5ID0gb2JqZWN0LT5nZXRBcnJheShDRE1Qcml2YXRlRmFp
clBsYXlTdHJlYW1pbmc6OnNpbmZOYW1lKCkpOworICAgIGlmICghc2luZkFycmF5KQogICAgICAg
ICByZXR1cm4geyB9OwogCiAgICAgVmVjdG9yPFJlZjxTaGFyZWRCdWZmZXI+PiBzaW5mczsKICAg
ICBzaW5mcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHNpbmZBcnJheS0+bGVuZ3RoKCkpOwogCiAg
ICAgZm9yIChhdXRvJiB2YWx1ZSA6ICpzaW5mQXJyYXkpIHsKLSAgICAgICAgU3RyaW5nIGtleUlE
OwotICAgICAgICBpZiAoIXZhbHVlLT5hc1N0cmluZyhrZXlJRCkpCisgICAgICAgIGF1dG8ga2V5
SUQgPSB2YWx1ZS0+YXNTdHJpbmcoKTsKKyAgICAgICAgaWYgKCFrZXlJRCkKICAgICAgICAgICAg
IGNvbnRpbnVlOwogCiAgICAgICAgIFZlY3RvcjxjaGFyPiBzaW5mRGF0YTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL0NETUlu
c3RhbmNlRmFpclBsYXlTdHJlYW1pbmdBVkZPYmpDLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvQ0RNSW5zdGFuY2VGYWlyUGxheVN0cmVhbWlu
Z0FWRk9iakMubW0KaW5kZXggYzA1MTlhOGMyMjE5MzBmNWM2MWEwYTgwZTllYzNhMWU5OWM4ZjFk
NC4uMWM0OWY4ODc1M2E5NGM5MDdiZGY2ZGIwMTlmMjE5NWI4NDdiNDgzZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvQ0RNSW5z
dGFuY2VGYWlyUGxheVN0cmVhbWluZ0FWRk9iakMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvQ0RNSW5zdGFuY2VGYWlyUGxheVN0cmVh
bWluZ0FWRk9iakMubW0KQEAgLTMxMiwxMSArMzEyLDggQEAgc3RhdGljIFJlZlB0cjxKU09OOjpW
YWx1ZT4gcGFyc2VKU09OVmFsdWUoY29uc3QgU2hhcmVkQnVmZmVyJiBidWZmZXIpCiAKICAgICAv
LyBQYXJzZSB0aGUgYnVmZmVyIGNvbnRlbnRzIGFzIEpTT04sIHJldHVybmluZyB0aGUgcm9vdCBv
YmplY3QgKGlmIGFueSkuCiAgICAgU3RyaW5nIGpzb24geyBidWZmZXIuZGF0YSgpLCBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oc2l6ZSkgfTsKLSAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHZhbHVlOwot
ICAgIGlmICghSlNPTjo6VmFsdWU6OnBhcnNlSlNPTihqc29uLCB2YWx1ZSkpCi0gICAgICAgIHJl
dHVybiBudWxscHRyOwogCi0gICAgcmV0dXJuIHZhbHVlOworICAgIHJldHVybiBKU09OOjpWYWx1
ZTo6cGFyc2VKU09OKGpzb24pOwogfQogCiBib29sIENETUluc3RhbmNlRmFpclBsYXlTdHJlYW1p
bmdBVkZPYmpDOjpzdXBwb3J0c1BlcnNpc3RhYmxlU3RhdGUoKQpAQCAtODA0LDE5ICs4MDEsMjQg
QEAgdm9pZCBDRE1JbnN0YW5jZVNlc3Npb25GYWlyUGxheVN0cmVhbWluZ0FWRk9iakM6OnVwZGF0
ZUxpY2Vuc2UoY29uc3QgU3RyaW5nJiwgTGkKICAgICAgICAgfSk7CiAKICAgICAgICAgYXV0byBy
b290ID0gcGFyc2VKU09OVmFsdWUocmVzcG9uc2VEYXRhKTsKLSAgICAgICAgUmVmUHRyPEpTT046
OkFycmF5PiBhcnJheTsKLSAgICAgICAgaWYgKCFyb290IHx8ICFyb290LT5hc0FycmF5KGFycmF5
KSkgeworICAgICAgICBpZiAoIXJvb3QpIHsKICAgICAgICAgICAgIGNhbGxiYWNrKGZhbHNlLCBX
VEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0LCBGYWlsZWQpOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgYXV0byBwYXJzZVJlc3BvbnNlID0g
WyZdKFJlZlB0cjxKU09OOjpWYWx1ZT4mIHZhbHVlKSAtPiBib29sIHsKLSAgICAgICAgICAgIFJl
ZlB0cjxKU09OOjpPYmplY3Q+IG9iamVjdDsKLSAgICAgICAgICAgIGlmICghdmFsdWUtPmFzT2Jq
ZWN0KG9iamVjdCkpCisgICAgICAgIGF1dG8gYXJyYXkgPSByb290LT5hc0FycmF5KCk7CisgICAg
ICAgIGlmICghYXJyYXkpIHsKKyAgICAgICAgICAgIGNhbGxiYWNrKGZhbHNlLCBXVEY6Om51bGxv
cHQsIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0LCBGYWlsZWQpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisKKyAgICAgICAgYXV0byBwYXJzZVJlc3BvbnNlID0gWyZdKFJlZjxK
U09OOjpWYWx1ZT4mJiB2YWx1ZSkgLT4gYm9vbCB7CisgICAgICAgICAgICBhdXRvIG9iamVjdCA9
IHZhbHVlLT5hc09iamVjdCgpOworICAgICAgICAgICAgaWYgKCFvYmplY3QpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgICAgICBTdHJpbmcga2V5SURTdHJpbmc7Ci0g
ICAgICAgICAgICBpZiAoIW9iamVjdC0+Z2V0U3RyaW5nKCJrZXlJRCIsIGtleUlEU3RyaW5nKSkK
KyAgICAgICAgICAgIGF1dG8ga2V5SURTdHJpbmcgPSBvYmplY3QtPmdldFN0cmluZygia2V5SUQi
KTsKKyAgICAgICAgICAgIGlmICgha2V5SURTdHJpbmcpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCiAgICAgICAgICAgICBWZWN0b3I8dWludDhfdD4ga2V5SURWZWN0b3I7CkBAIC04
NDMsMTQgKzg0NSwxNCBAQCB2b2lkIENETUluc3RhbmNlU2Vzc2lvbkZhaXJQbGF5U3RyZWFtaW5n
QVZGT2JqQzo6dXBkYXRlTGljZW5zZShjb25zdCBTdHJpbmcmLCBMaQogICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKIAogICAgICAgICAgICAgaWYgKGhhc0Vycm9yKSB7Ci0gICAgICAgICAg
ICAgICAgTlNJbnRlZ2VyIGVycm9yQ29kZTsKLSAgICAgICAgICAgICAgICBpZiAoIWVycm9yRmlu
ZFJlc3VsdHMtPnZhbHVlLT5hc0ludGVnZXIoZXJyb3JDb2RlKSkKKyAgICAgICAgICAgICAgICBh
dXRvIGVycm9yQ29kZSA9IGVycm9yRmluZFJlc3VsdHMtPnZhbHVlLT5hc0ludGVnZXIoKTsKKyAg
ICAgICAgICAgICAgICBpZiAoIWVycm9yQ29kZSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICAgICAgICAgIGF1dG8gZXJyb3IgPSBhZG9wdE5TKFtbTlNFcnJvciBh
bGxvY10gaW5pdFdpdGhEb21haW46QCJvcmcud2Via2l0LmVtZSIgY29kZTplcnJvckNvZGUgdXNl
ckluZm86bmlsXSk7CisgICAgICAgICAgICAgICAgYXV0byBlcnJvciA9IGFkb3B0TlMoW1tOU0Vy
cm9yIGFsbG9jXSBpbml0V2l0aERvbWFpbjpAIm9yZy53ZWJraXQuZW1lIiBjb2RlOiplcnJvckNv
ZGUgdXNlckluZm86bmlsXSk7CiAgICAgICAgICAgICAgICAgW3JlcXVlc3QgcHJvY2Vzc0NvbnRl
bnRLZXlSZXNwb25zZUVycm9yOmVycm9yLmdldCgpXTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAo
aGFzUGF5bG9hZCkgewotICAgICAgICAgICAgICAgIFN0cmluZyBwYXlsb2FkU3RyaW5nOwotICAg
ICAgICAgICAgICAgIGlmICghcGF5bG9hZEZpbmRSZXN1bHRzLT52YWx1ZS0+YXNTdHJpbmcocGF5
bG9hZFN0cmluZykpCisgICAgICAgICAgICAgICAgYXV0byBwYXlsb2FkU3RyaW5nID0gcGF5bG9h
ZEZpbmRSZXN1bHRzLT52YWx1ZS0+YXNTdHJpbmcoKTsKKyAgICAgICAgICAgICAgICBpZiAoIXBh
eWxvYWRTdHJpbmcpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
ICAgICAgICBWZWN0b3I8dWludDhfdD4gcGF5bG9hZFZlY3RvcjsKICAgICAgICAgICAgICAgICBp
ZiAoIWJhc2U2NERlY29kZShwYXlsb2FkU3RyaW5nLCBwYXlsb2FkVmVjdG9yKSkKQEAgLTg2MSw3
ICs4NjMsNyBAQCB2b2lkIENETUluc3RhbmNlU2Vzc2lvbkZhaXJQbGF5U3RyZWFtaW5nQVZGT2Jq
Qzo6dXBkYXRlTGljZW5zZShjb25zdCBTdHJpbmcmLCBMaQogICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgICAgIH07CiAgICAgICAgIGZvciAoYXV0byB2YWx1ZSA6ICphcnJheSkgewotICAg
ICAgICAgICAgaWYgKCFwYXJzZVJlc3BvbnNlKHZhbHVlKSkgeworICAgICAgICAgICAgaWYgKCFw
YXJzZVJlc3BvbnNlKFdURk1vdmUodmFsdWUpKSkgewogICAgICAgICAgICAgICAgIERFQlVHX0xP
R19JRl9QT1NTSUJMRShMT0dJREVOVElGSUVSLCAiJ2NlbmMnIGluaXREYXRhLCBGYWlsZWQsIGNv
dWxkIG5vdCBwYXJzZSByZXNwb25zZSIpOwogICAgICAgICAgICAgICAgIGNhbGxiYWNrKGZhbHNl
LCBXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0LCBGYWlsZWQpOwogICAg
ICAgICAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJEcml2ZXIvQ29tbWFu
ZFJlc3VsdC5jcHAgYi9Tb3VyY2UvV2ViRHJpdmVyL0NvbW1hbmRSZXN1bHQuY3BwCmluZGV4IGE3
MjA3MDk5MDg5M2RiMTU2ZDdmZDZmZTMwN2E1M2YyMGNiMjM1MGEuLjA4MzFhZjcxMjFhMWY5MGIw
N2M2YzhjYWM0ODE3NmQ1OTA1YTI2NDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJEcml2ZXIvQ29t
bWFuZFJlc3VsdC5jcHAKKysrIGIvU291cmNlL1dlYkRyaXZlci9Db21tYW5kUmVzdWx0LmNwcApA
QCAtNDksMTggKzQ5LDE5IEBAIENvbW1hbmRSZXN1bHQ6OkNvbW1hbmRSZXN1bHQoUmVmUHRyPEpT
T046OlZhbHVlPiYmIHJlc3VsdCwgT3B0aW9uYWw8RXJyb3JDb2RlPiBlCiAgICAgaWYgKCFyZXN1
bHQpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IGVycm9yT2Jq
ZWN0OwotICAgIGlmICghcmVzdWx0LT5hc09iamVjdChlcnJvck9iamVjdCkpCisgICAgYXV0byBl
cnJvck9iamVjdCA9IHJlc3VsdC0+YXNPYmplY3QoKTsKKyAgICBpZiAoIWVycm9yT2JqZWN0KQog
ICAgICAgICByZXR1cm47CiAKLSAgICBpbnQgZXJyb3I7Ci0gICAgaWYgKCFlcnJvck9iamVjdC0+
Z2V0SW50ZWdlcigiY29kZSIsIGVycm9yKSkKLSAgICAgICAgcmV0dXJuOwotICAgIFN0cmluZyBl
cnJvck1lc3NhZ2U7Ci0gICAgaWYgKCFlcnJvck9iamVjdC0+Z2V0U3RyaW5nKCJtZXNzYWdlIiwg
ZXJyb3JNZXNzYWdlKSkKKyAgICBhdXRvIGVycm9yID0gZXJyb3JPYmplY3QtPmdldEludGVnZXIo
ImNvZGUiKTsKKyAgICBpZiAoIWVycm9yKQogICAgICAgICByZXR1cm47CiAKLSAgICBzd2l0Y2gg
KGVycm9yKSB7CisgICAgYXV0byBlcnJvck1lc3NhZ2UgPSBlcnJvck9iamVjdC0+Z2V0U3RyaW5n
KCJtZXNzYWdlIik7CisgICAgaWYgKCFlcnJvck1lc3NhZ2UpCisgICAgICAgIHJldHVybjsKKwor
ICAgIHN3aXRjaCAoKmVycm9yKSB7CiAgICAgY2FzZSBQcm90b2NvbEVycm9yQ29kZTo6UGFyc2VF
cnJvcjoKICAgICBjYXNlIFByb3RvY29sRXJyb3JDb2RlOjpJbnZhbGlkUmVxdWVzdDoKICAgICBj
YXNlIFByb3RvY29sRXJyb3JDb2RlOjpNZXRob2ROb3RGb3VuZDoKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJEcml2ZXIvU2Vzc2lvbi5jcHAgYi9Tb3VyY2UvV2ViRHJpdmVyL1Nlc3Npb24uY3BwCmlu
ZGV4IGE1NWZhNDkzODBjNDk1MTMwZmUzMWE5NmM4NGUwODliNzZkMWNhYzguLmFlYTQwNjFlMjI1
YTdjZGNiY2RlZDdlNzhiYzZkNzBmOWZkODAzZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJEcml2
ZXIvU2Vzc2lvbi5jcHAKKysrIGIvU291cmNlL1dlYkRyaXZlci9TZXNzaW9uLmNwcApAQCAtODMs
MTEgKzgzLDEwIEBAIGJvb2wgU2Vzc2lvbjo6aXNDb25uZWN0ZWQoKSBjb25zdAogCiBzdGF0aWMg
T3B0aW9uYWw8U3RyaW5nPiBmaXJzdFdpbmRvd0hhbmRsZUluUmVzdWx0KEpTT046OlZhbHVlJiBy
ZXN1bHQpCiB7Ci0gICAgUmVmUHRyPEpTT046OkFycmF5PiBoYW5kbGVzOwotICAgIGlmIChyZXN1
bHQuYXNBcnJheShoYW5kbGVzKSAmJiBoYW5kbGVzLT5sZW5ndGgoKSkgewotICAgICAgICBhdXRv
IGhhbmRsZVZhbHVlID0gaGFuZGxlcy0+Z2V0KDApOwotICAgICAgICBTdHJpbmcgaGFuZGxlOwot
ICAgICAgICBpZiAoaGFuZGxlVmFsdWUtPmFzU3RyaW5nKGhhbmRsZSkpCisgICAgYXV0byBoYW5k
bGVzID0gcmVzdWx0LmFzQXJyYXkoKTsKKyAgICBpZiAoaGFuZGxlcyAmJiBoYW5kbGVzLT5sZW5n
dGgoKSkgeworICAgICAgICBhdXRvIGhhbmRsZSA9IGhhbmRsZXMtPmdldCgwKS0+YXNTdHJpbmco
KTsKKyAgICAgICAgaWYgKCEhaGFuZGxlKQogICAgICAgICAgICAgcmV0dXJuIGhhbmRsZTsKICAg
ICB9CiAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKQEAgLTEyNiw3ICsxMjUsNyBAQCB2b2lkIFNl
c3Npb246OmNsb3NlKEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSZXN1bHQmJik+JiYgY29tcGxldGlv
bkhhbmRsZXIpCiAKIHZvaWQgU2Vzc2lvbjo6Z2V0VGltZW91dHMoRnVuY3Rpb248dm9pZCAoQ29t
bWFuZFJlc3VsdCYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBSZWZQdHI8SlNPTjo6
T2JqZWN0PiBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBhdXRvIHBh
cmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgIGlmIChtX3NjcmlwdFRpbWVv
dXQgPT0gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjppbmZpbml0eSgpKQogICAgICAgICBw
YXJhbWV0ZXJzLT5zZXRWYWx1ZSgic2NyaXB0Il9zLCBKU09OOjpWYWx1ZTo6bnVsbCgpKTsKICAg
ICBlbHNlCkBAIC0xODcsMTEgKzE4NiwxMyBAQCB2b2lkIFNlc3Npb246OmNyZWF0ZVRvcExldmVs
QnJvd3NpbmdDb250ZXh0KEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSZXN1bHQmJik+JiYgYwogICAg
ICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChXVEZNb3ZlKHJl
c3BvbnNlLnJlc3BvbnNlT2JqZWN0KSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
Ci0gICAgICAgIFN0cmluZyBoYW5kbGU7Ci0gICAgICAgIGlmICghcmVzcG9uc2UucmVzcG9uc2VP
YmplY3QtPmdldFN0cmluZygiaGFuZGxlIl9zLCBoYW5kbGUpKSB7CisKKyAgICAgICAgYXV0byBo
YW5kbGUgPSByZXNwb25zZS5yZXNwb25zZU9iamVjdC0+Z2V0U3RyaW5nKCJoYW5kbGUiX3MpOwor
ICAgICAgICBpZiAoIWhhbmRsZSkgewogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29t
bWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikp
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CisKICAgICAgICAgc3dpdGNoVG9Ub3BM
ZXZlbEJyb3dzaW5nQ29udGV4dChoYW5kbGUpOwogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihD
b21tYW5kUmVzdWx0OjpzdWNjZXNzKCkpOwogICAgIH0pOwpAQCAtMTk5LDE1ICsyMDAsMTYgQEAg
dm9pZCBTZXNzaW9uOjpjcmVhdGVUb3BMZXZlbEJyb3dzaW5nQ29udGV4dChGdW5jdGlvbjx2b2lk
IChDb21tYW5kUmVzdWx0JiYpPiYmIGMKIAogdm9pZCBTZXNzaW9uOjpoYW5kbGVVc2VyUHJvbXB0
cyhGdW5jdGlvbjx2b2lkIChDb21tYW5kUmVzdWx0JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQog
ewotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNy
ZWF0ZSgpOworICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAg
ICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJicm93c2luZ0NvbnRleHRIYW5kbGUiX3MsIG1fdG9w
bGV2ZWxCcm93c2luZ0NvbnRleHQudmFsdWUoKSk7CiAgICAgbV9ob3N0LT5zZW5kQ29tbWFuZFRv
QmFja2VuZCgiaXNTaG93aW5nSmF2YVNjcmlwdERpYWxvZyJfcywgV1RGTW92ZShwYXJhbWV0ZXJz
KSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY29tcGxldGlvbkhhbmRs
ZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oU2Vzc2lvbkhvc3Q6OkNvbW1hbmRSZXNw
b25zZSYmIHJlc3BvbnNlKSBtdXRhYmxlIHsKICAgICAgICAgaWYgKHJlc3BvbnNlLmlzRXJyb3Ig
fHwgIXJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0KSB7CiAgICAgICAgICAgICBjb21wbGV0aW9uSGFu
ZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKFdURk1vdmUocmVzcG9uc2UucmVzcG9uc2VPYmplY3Qp
KSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgYm9vbCBpc1Nob3dp
bmdKYXZhU2NyaXB0RGlhbG9nOwotICAgICAgICBpZiAoIXJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0
LT5nZXRCb29sZWFuKCJyZXN1bHQiLCBpc1Nob3dpbmdKYXZhU2NyaXB0RGlhbG9nKSkgeworCisg
ICAgICAgIGF1dG8gaXNTaG93aW5nSmF2YVNjcmlwdERpYWxvZyA9IHJlc3BvbnNlLnJlc3BvbnNl
T2JqZWN0LT5nZXRCb29sZWFuKCJyZXN1bHQiKTsKKyAgICAgICAgaWYgKCFpc1Nob3dpbmdKYXZh
U2NyaXB0RGlhbG9nKSB7CiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVz
dWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVycm9yKSk7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTI3MywxMyArMjc1LDEzIEBAIHZvaWQgU2Vz
c2lvbjo6cmVwb3J0VW5leHBlY3RlZEFsZXJ0T3BlbihGdW5jdGlvbjx2b2lkIChDb21tYW5kUmVz
dWx0JiYpPiYmIGNvbXBsCiAgICAgZ2V0QWxlcnRUZXh0KFtjb21wbGV0aW9uSGFuZGxlciA9IFdU
Rk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXShDb21tYW5kUmVzdWx0JiYgcmVzdWx0KSB7CiAgICAg
ICAgIE9wdGlvbmFsPFN0cmluZz4gYWxlcnRUZXh0OwogICAgICAgICBpZiAoIXJlc3VsdC5pc0Vy
cm9yKCkpIHsKLSAgICAgICAgICAgIFN0cmluZyB2YWx1ZVN0cmluZzsKLSAgICAgICAgICAgIGlm
IChyZXN1bHQucmVzdWx0KCktPmFzU3RyaW5nKHZhbHVlU3RyaW5nKSkKKyAgICAgICAgICAgIGF1
dG8gdmFsdWVTdHJpbmcgPSByZXN1bHQucmVzdWx0KCktPmFzU3RyaW5nKCk7CisgICAgICAgICAg
ICBpZiAoISF2YWx1ZVN0cmluZykKICAgICAgICAgICAgICAgICBhbGVydFRleHQgPSB2YWx1ZVN0
cmluZzsKICAgICAgICAgfQogICAgICAgICBhdXRvIGVycm9yUmVzdWx0ID0gQ29tbWFuZFJlc3Vs
dDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OlVuZXhwZWN0ZWRBbGVydE9wZW4pOwog
ICAgICAgICBpZiAoYWxlcnRUZXh0KSB7Ci0gICAgICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0
PiBhZGRpdG9uYWxEYXRhID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgICAgIGF1
dG8gYWRkaXRvbmFsRGF0YSA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgICAgICBh
ZGRpdG9uYWxEYXRhLT5zZXRTdHJpbmcoInRleHQiX3MsIGFsZXJ0VGV4dC52YWx1ZSgpKTsKICAg
ICAgICAgICAgIGVycm9yUmVzdWx0LnNldEFkZGl0aW9uYWxFcnJvckRhdGEoV1RGTW92ZShhZGRp
dG9uYWxEYXRhKSk7CiAgICAgICAgIH0KQEAgLTMwMCw3ICszMDIsNyBAQCB2b2lkIFNlc3Npb246
OmdvKGNvbnN0IFN0cmluZyYgdXJsLCBGdW5jdGlvbjx2b2lkIChDb21tYW5kUmVzdWx0JiYpPiYm
IGNvbXBsZXRpbwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgUmVm
UHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Cisg
ICAgICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAg
IHBhcmFtZXRlcnMtPnNldFN0cmluZygiaGFuZGxlIl9zLCBtX3RvcGxldmVsQnJvd3NpbmdDb250
ZXh0LnZhbHVlKCkpOwogICAgICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoInVybCJfcywgdXJs
KTsKICAgICAgICAgcGFyYW1ldGVycy0+c2V0RG91YmxlKCJwYWdlTG9hZFRpbWVvdXQiX3MsIG1f
cGFnZUxvYWRUaW1lb3V0KTsKQEAgLTMzMCwyMyArMzMyLDI2IEBAIHZvaWQgU2Vzc2lvbjo6Z2V0
Q3VycmVudFVSTChGdW5jdGlvbjx2b2lkIChDb21tYW5kUmVzdWx0JiYpPiYmIGNvbXBsZXRpb25I
YW5kbGVyCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBSZWZQdHI8
SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAg
ICAgYXV0byBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICAgcGFy
YW1ldGVycy0+c2V0U3RyaW5nKCJoYW5kbGUiX3MsIG1fdG9wbGV2ZWxCcm93c2luZ0NvbnRleHQu
dmFsdWUoKSk7CiAgICAgICAgIG1faG9zdC0+c2VuZENvbW1hbmRUb0JhY2tlbmQoImdldEJyb3dz
aW5nQ29udGV4dCJfcywgV1RGTW92ZShwYXJhbWV0ZXJzKSwgW3Byb3RlY3RlZFRoaXMsIGNvbXBs
ZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKFNlc3Npb25Ib3N0OjpD
b21tYW5kUmVzcG9uc2UmJiByZXNwb25zZSkgewogICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmlz
RXJyb3IgfHwgIXJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0KSB7CiAgICAgICAgICAgICAgICAgY29t
cGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChXVEZNb3ZlKHJlc3BvbnNlLnJlc3Bv
bnNlT2JqZWN0KSkpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IGJyb3dzaW5nQ29udGV4dDsKLSAgICAgICAg
ICAgIGlmICghcmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdldE9iamVjdCgiY29udGV4dCIsIGJy
b3dzaW5nQ29udGV4dCkpIHsKKworICAgICAgICAgICAgYXV0byBicm93c2luZ0NvbnRleHQgPSBy
ZXNwb25zZS5yZXNwb25zZU9iamVjdC0+Z2V0T2JqZWN0KCJjb250ZXh0Iik7CisgICAgICAgICAg
ICBpZiAoIWJyb3dzaW5nQ29udGV4dCkgewogICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5k
bGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtub3du
RXJyb3IpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBTdHJpbmcgdXJsOwotICAgICAgICAgICAgaWYgKCFicm93c2luZ0NvbnRleHQtPmdldFN0
cmluZygidXJsIiwgdXJsKSkgeworCisgICAgICAgICAgICBhdXRvIHVybCA9IGJyb3dzaW5nQ29u
dGV4dC0+Z2V0U3RyaW5nKCJ1cmwiKTsKKyAgICAgICAgICAgIGlmICghdXJsKSB7CiAgICAgICAg
ICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVz
dWx0OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikpOwogICAgICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJl
c3VsdDo6c3VjY2VzcyhKU09OOjpWYWx1ZTo6Y3JlYXRlKHVybCkpKTsKICAgICAgICAgfSk7CiAg
ICAgfSk7CkBAIC0zNjQsNyArMzY5LDcgQEAgdm9pZCBTZXNzaW9uOjpiYWNrKEZ1bmN0aW9uPHZv
aWQgKENvbW1hbmRSZXN1bHQmJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiAgICAgICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKHJlc3VsdCkpOwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9Ci0gICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnMgPSBKU09O
OjpPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU09OOjpPYmpl
Y3Q6OmNyZWF0ZSgpOwogICAgICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoImhhbmRsZSJfcywg
bV90b3BsZXZlbEJyb3dzaW5nQ29udGV4dC52YWx1ZSgpKTsKICAgICAgICAgcGFyYW1ldGVycy0+
c2V0RG91YmxlKCJwYWdlTG9hZFRpbWVvdXQiX3MsIG1fcGFnZUxvYWRUaW1lb3V0KTsKICAgICAg
ICAgaWYgKGF1dG8gcGFnZUxvYWRTdHJhdGVneSA9IHBhZ2VMb2FkU3RyYXRlZ3lTdHJpbmcoKSkK
QEAgLTM5Miw3ICszOTcsNyBAQCB2b2lkIFNlc3Npb246OmZvcndhcmQoRnVuY3Rpb248dm9pZCAo
Q29tbWFuZFJlc3VsdCYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKICAgICAgICAgICAgIGNvbXBs
ZXRpb25IYW5kbGVyKFdURk1vdmUocmVzdWx0KSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KLSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVycyA9IEpTT046Ok9i
amVjdDo6Y3JlYXRlKCk7CisgICAgICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6
Y3JlYXRlKCk7CiAgICAgICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiaGFuZGxlIl9zLCBtX3Rv
cGxldmVsQnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwogICAgICAgICBwYXJhbWV0ZXJzLT5zZXRE
b3VibGUoInBhZ2VMb2FkVGltZW91dCJfcywgbV9wYWdlTG9hZFRpbWVvdXQpOwogICAgICAgICBp
ZiAoYXV0byBwYWdlTG9hZFN0cmF0ZWd5ID0gcGFnZUxvYWRTdHJhdGVneVN0cmluZygpKQpAQCAt
NDIwLDcgKzQyNSw3IEBAIHZvaWQgU2Vzc2lvbjo6cmVmcmVzaChGdW5jdGlvbjx2b2lkIChDb21t
YW5kUmVzdWx0JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogICAgICAgICAgICAgY29tcGxldGlv
bkhhbmRsZXIoV1RGTW92ZShyZXN1bHQpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQotICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0
OjpjcmVhdGUoKTsKKyAgICAgICAgYXV0byBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVh
dGUoKTsKICAgICAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJoYW5kbGUiX3MsIG1fdG9wbGV2
ZWxCcm93c2luZ0NvbnRleHQudmFsdWUoKSk7CiAgICAgICAgIHBhcmFtZXRlcnMtPnNldERvdWJs
ZSgicGFnZUxvYWRUaW1lb3V0Il9zLCBtX3BhZ2VMb2FkVGltZW91dCk7CiAgICAgICAgIGlmIChh
dXRvIHBhZ2VMb2FkU3RyYXRlZ3kgPSBwYWdlTG9hZFN0cmF0ZWd5U3RyaW5nKCkpCkBAIC00NDgs
NyArNDUzLDcgQEAgdm9pZCBTZXNzaW9uOjpnZXRUaXRsZShGdW5jdGlvbjx2b2lkIChDb21tYW5k
UmVzdWx0JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogICAgICAgICAgICAgY29tcGxldGlvbkhh
bmRsZXIoV1RGTW92ZShyZXN1bHQpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQot
ICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0Ojpj
cmVhdGUoKTsKKyAgICAgICAgYXV0byBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUo
KTsKICAgICAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJicm93c2luZ0NvbnRleHRIYW5kbGUi
X3MsIG1fdG9wbGV2ZWxCcm93c2luZ0NvbnRleHQudmFsdWUoKSk7CiAgICAgICAgIHBhcmFtZXRl
cnMtPnNldFN0cmluZygiZnVuY3Rpb24iX3MsICJmdW5jdGlvbigpIHsgcmV0dXJuIGRvY3VtZW50
LnRpdGxlOyB9Il9zKTsKICAgICAgICAgcGFyYW1ldGVycy0+c2V0QXJyYXkoImFyZ3VtZW50cyJf
cywgSlNPTjo6QXJyYXk6OmNyZWF0ZSgpKTsKQEAgLTQ1NywxNiArNDYyLDE5IEBAIHZvaWQgU2Vz
c2lvbjo6Z2V0VGl0bGUoRnVuY3Rpb248dm9pZCAoQ29tbWFuZFJlc3VsdCYmKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVz
dWx0OjpmYWlsKFdURk1vdmUocmVzcG9uc2UucmVzcG9uc2VPYmplY3QpKSk7CiAgICAgICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgU3RyaW5nIHZhbHVlU3Ry
aW5nOwotICAgICAgICAgICAgaWYgKCFyZXNwb25zZS5yZXNwb25zZU9iamVjdC0+Z2V0U3RyaW5n
KCJyZXN1bHQiX3MsIHZhbHVlU3RyaW5nKSkgeworCisgICAgICAgICAgICBhdXRvIHZhbHVlU3Ry
aW5nID0gcmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdldFN0cmluZygicmVzdWx0Il9zKTsKKyAg
ICAgICAgICAgIGlmICghdmFsdWVTdHJpbmcpIHsKICAgICAgICAgICAgICAgICBjb21wbGV0aW9u
SGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5r
bm93bkVycm9yKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQotICAg
ICAgICAgICAgUmVmUHRyPEpTT046OlZhbHVlPiByZXN1bHRWYWx1ZTsKLSAgICAgICAgICAgIGlm
ICghSlNPTjo6VmFsdWU6OnBhcnNlSlNPTih2YWx1ZVN0cmluZywgcmVzdWx0VmFsdWUpKSB7CisK
KyAgICAgICAgICAgIGF1dG8gcmVzdWx0VmFsdWUgPSBKU09OOjpWYWx1ZTo6cGFyc2VKU09OKHZh
bHVlU3RyaW5nKTsKKyAgICAgICAgICAgIGlmICghcmVzdWx0VmFsdWUpIHsKICAgICAgICAgICAg
ICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6
OkVycm9yQ29kZTo6VW5rbm93bkVycm9yKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAgICAgfQorCiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0
OjpzdWNjZXNzKFdURk1vdmUocmVzdWx0VmFsdWUpKSk7CiAgICAgICAgIH0pOwogICAgIH0pOwpA
QCAtNDc5LDMwICs0ODcsMzMgQEAgdm9pZCBTZXNzaW9uOjpnZXRXaW5kb3dIYW5kbGUoRnVuY3Rp
b248dm9pZCAoQ29tbWFuZFJlc3VsdCYmKT4mJiBjb21wbGV0aW9uSGFuZGwKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnMgPSBKU09O
OjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6
Y3JlYXRlKCk7CiAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJoYW5kbGUiX3MsIG1fdG9wbGV2
ZWxCcm93c2luZ0NvbnRleHQudmFsdWUoKSk7CiAgICAgbV9ob3N0LT5zZW5kQ29tbWFuZFRvQmFj
a2VuZCgiZ2V0QnJvd3NpbmdDb250ZXh0Il9zLCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBbcHJvdGVj
dGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29t
cGxldGlvbkhhbmRsZXIpXShTZXNzaW9uSG9zdDo6Q29tbWFuZFJlc3BvbnNlJiYgcmVzcG9uc2Up
IHsKICAgICAgICAgaWYgKHJlc3BvbnNlLmlzRXJyb3IgfHwgIXJlc3BvbnNlLnJlc3BvbnNlT2Jq
ZWN0KSB7CiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWls
KFdURk1vdmUocmVzcG9uc2UucmVzcG9uc2VPYmplY3QpKSk7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KLSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gYnJvd3NpbmdDb250ZXh0
OwotICAgICAgICBpZiAoIXJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRPYmplY3QoImNvbnRl
eHQiX3MsIGJyb3dzaW5nQ29udGV4dCkpIHsKKworICAgICAgICBhdXRvIGJyb3dzaW5nQ29udGV4
dCA9IHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRPYmplY3QoImNvbnRleHQiX3MpOworICAg
ICAgICBpZiAoIWJyb3dzaW5nQ29udGV4dCkgewogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OlVua25vd25F
cnJvcikpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIFN0cmluZyBo
YW5kbGU7Ci0gICAgICAgIGlmICghYnJvd3NpbmdDb250ZXh0LT5nZXRTdHJpbmcoImhhbmRsZSJf
cywgaGFuZGxlKSkgeworCisgICAgICAgIGF1dG8gaGFuZGxlID0gYnJvd3NpbmdDb250ZXh0LT5n
ZXRTdHJpbmcoImhhbmRsZSJfcyk7CisgICAgICAgIGlmICghaGFuZGxlKSB7CiAgICAgICAgICAg
ICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVy
cm9yQ29kZTo6VW5rbm93bkVycm9yKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
KwogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpzdWNjZXNzKEpTT046
OlZhbHVlOjpjcmVhdGUoaGFuZGxlKSkpOwogICAgIH0pOwogfQogCiB2b2lkIFNlc3Npb246OmNs
b3NlVG9wTGV2ZWxCcm93c2luZ0NvbnRleHQoY29uc3QgU3RyaW5nJiB0b3BsZXZlbEJyb3dzaW5n
Q29udGV4dCwgRnVuY3Rpb248dm9pZCAoQ29tbWFuZFJlc3VsdCYmKT4mJiBjb21wbGV0aW9uSGFu
ZGxlcikKIHsKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzID0gSlNPTjo6T2Jq
ZWN0OjpjcmVhdGUoKTsKKyAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0
ZSgpOwogICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiaGFuZGxlIl9zLCB0b3BsZXZlbEJyb3dz
aW5nQ29udGV4dCk7CiAgICAgbV9ob3N0LT5zZW5kQ29tbWFuZFRvQmFja2VuZCgiY2xvc2VCcm93
c2luZ0NvbnRleHQiX3MsIFdURk1vdmUocGFyYW1ldGVycyksIFt0aGlzLCBwcm90ZWN0ZWRUaGlz
ID0gbWFrZVJlZigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcildKFNlc3Npb25Ib3N0OjpDb21tYW5kUmVzcG9uc2UmJiByZXNwb25zZSkgbXV0YWJs
ZSB7CiAgICAgICAgIGlmICghbV9ob3N0LT5pc0Nvbm5lY3RlZCgpKSB7CkBAIC01NDUsNyArNTU2
LDcgQEAgdm9pZCBTZXNzaW9uOjpjbG9zZVdpbmRvdyhGdW5jdGlvbjx2b2lkIChDb21tYW5kUmVz
dWx0JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogCiB2b2lkIFNlc3Npb246OnN3aXRjaFRvV2lu
ZG93KGNvbnN0IFN0cmluZyYgd2luZG93SGFuZGxlLCBGdW5jdGlvbjx2b2lkIChDb21tYW5kUmVz
dWx0JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+
IHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGF1dG8gcGFyYW1ldGVy
cyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJi
cm93c2luZ0NvbnRleHRIYW5kbGUiX3MsIHdpbmRvd0hhbmRsZSk7CiAgICAgbV9ob3N0LT5zZW5k
Q29tbWFuZFRvQmFja2VuZCgic3dpdGNoVG9Ccm93c2luZ0NvbnRleHQiX3MsIFdURk1vdmUocGFy
YW1ldGVycyksIFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIHdpbmRvd0hh
bmRsZSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oU2Vz
c2lvbkhvc3Q6OkNvbW1hbmRSZXNwb25zZSYmIHJlc3BvbnNlKSB7CiAgICAgICAgIGlmIChyZXNw
b25zZS5pc0Vycm9yKSB7CkBAIC01NjQsMjIgKzU3NSwyMyBAQCB2b2lkIFNlc3Npb246OmdldFdp
bmRvd0hhbmRsZXMoRnVuY3Rpb248dm9pZCAoQ29tbWFuZFJlc3VsdCYmKT4mJiBjb21wbGV0aW9u
SGFuZAogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChX
VEZNb3ZlKHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0KSkpOwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9Ci0gICAgICAgIFJlZlB0cjxKU09OOjpBcnJheT4gYnJvd3NpbmdDb250ZXh0QXJy
YXk7Ci0gICAgICAgIGlmICghcmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdldEFycmF5KCJjb250
ZXh0cyJfcywgYnJvd3NpbmdDb250ZXh0QXJyYXkpKSB7CisKKyAgICAgICAgYXV0byBicm93c2lu
Z0NvbnRleHRBcnJheSA9IHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRBcnJheSgiY29udGV4
dHMiX3MpOworICAgICAgICBpZiAoIWJyb3dzaW5nQ29udGV4dEFycmF5KSB7CiAgICAgICAgICAg
ICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVy
cm9yQ29kZTo6VW5rbm93bkVycm9yKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
LSAgICAgICAgUmVmUHRyPEpTT046OkFycmF5PiB3aW5kb3dIYW5kbGVzID0gSlNPTjo6QXJyYXk6
OmNyZWF0ZSgpOworCisgICAgICAgIGF1dG8gd2luZG93SGFuZGxlcyA9IEpTT046OkFycmF5Ojpj
cmVhdGUoKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJyb3dzaW5nQ29udGV4
dEFycmF5LT5sZW5ndGgoKTsgKytpKSB7Ci0gICAgICAgICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+
IGJyb3dzaW5nQ29udGV4dFZhbHVlID0gYnJvd3NpbmdDb250ZXh0QXJyYXktPmdldChpKTsKLSAg
ICAgICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IGJyb3dzaW5nQ29udGV4dDsKLSAgICAgICAg
ICAgIGlmICghYnJvd3NpbmdDb250ZXh0VmFsdWUtPmFzT2JqZWN0KGJyb3dzaW5nQ29udGV4dCkp
IHsKKyAgICAgICAgICAgIGF1dG8gYnJvd3NpbmdDb250ZXh0ID0gYnJvd3NpbmdDb250ZXh0QXJy
YXktPmdldChpKS0+YXNPYmplY3QoKTsKKyAgICAgICAgICAgIGlmICghYnJvd3NpbmdDb250ZXh0
KSB7CiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFp
bChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikpOwogICAgICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgU3RyaW5nIGhhbmRsZTsK
LSAgICAgICAgICAgIGlmICghYnJvd3NpbmdDb250ZXh0LT5nZXRTdHJpbmcoImhhbmRsZSJfcywg
aGFuZGxlKSkgeworICAgICAgICAgICAgYXV0byBoYW5kbGUgPSBicm93c2luZ0NvbnRleHQtPmdl
dFN0cmluZygiaGFuZGxlIl9zKTsKKyAgICAgICAgICAgIGlmICghaGFuZGxlKSB7CiAgICAgICAg
ICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVz
dWx0OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikpOwogICAgICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgICAgIH0KQEAgLTYxMywxNyArNjI1LDIwIEBAIHZvaWQgU2Vzc2lvbjo6bmV3V2lu
ZG93KE9wdGlvbmFsPFN0cmluZz4gdHlwZUhpbnQsIEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSZXN1
bHQmCiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFp
bChXVEZNb3ZlKHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0KSkpOwogICAgICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFN0cmluZyBoYW5kbGU7Ci0gICAgICAg
ICAgICBpZiAoIXJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRTdHJpbmcoImhhbmRsZSJfcywg
aGFuZGxlKSkgeworCisgICAgICAgICAgICBhdXRvIGhhbmRsZSA9IHJlc3BvbnNlLnJlc3BvbnNl
T2JqZWN0LT5nZXRTdHJpbmcoImhhbmRsZSJfcyk7CisgICAgICAgICAgICBpZiAoIWhhbmRsZSkg
ewogICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwo
Q29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKICAgICAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBTdHJpbmcgcHJlc2VudGF0aW9u
OwotICAgICAgICAgICAgaWYgKCFyZXNwb25zZS5yZXNwb25zZU9iamVjdC0+Z2V0U3RyaW5nKCJw
cmVzZW50YXRpb24iX3MsIHByZXNlbnRhdGlvbikpIHsKKworICAgICAgICAgICAgYXV0byBwcmVz
ZW50YXRpb24gPSByZXNwb25zZS5yZXNwb25zZU9iamVjdC0+Z2V0U3RyaW5nKCJwcmVzZW50YXRp
b24iX3MpOworICAgICAgICAgICAgaWYgKCFwcmVzZW50YXRpb24pIHsKICAgICAgICAgICAgICAg
ICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVy
cm9yQ29kZTo6VW5rbm93bkVycm9yKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICAgICAgfQotICAgICAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcmVzdWx0ID0gSlNPTjo6
T2JqZWN0OjpjcmVhdGUoKTsKKworICAgICAgICAgICAgYXV0byByZXN1bHQgPSBKU09OOjpPYmpl
Y3Q6OmNyZWF0ZSgpOwogICAgICAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoImhhbmRsZSJfcywg
aGFuZGxlKTsKICAgICAgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJ0eXBlIl9zLCBwcmVzZW50
YXRpb24gPT0gIldpbmRvdyJfcyA/ICJ3aW5kb3ciX3MgOiAidGFiIl9zKTsKICAgICAgICAgICAg
IGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OnN1Y2Nlc3MoV1RGTW92ZShyZXN1bHQp
KSk7CkBAIC02NDksMTUgKzY2NCwxNCBAQCB2b2lkIFNlc3Npb246OnN3aXRjaFRvRnJhbWUoUmVm
UHRyPEpTT046OlZhbHVlPiYmIGZyYW1lSUQsIEZ1bmN0aW9uPHZvaWQgKENvbW1hbgogICAgICAg
ICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShyZXN1bHQpKTsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQotICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJz
ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgYXV0byBwYXJhbWV0ZXJzID0gSlNP
Tjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJicm93
c2luZ0NvbnRleHRIYW5kbGUiX3MsIG1fdG9wbGV2ZWxCcm93c2luZ0NvbnRleHQudmFsdWUoKSk7
CiAgICAgICAgIGlmIChtX2N1cnJlbnRCcm93c2luZ0NvbnRleHQpCiAgICAgICAgICAgICBwYXJh
bWV0ZXJzLT5zZXRTdHJpbmcoImZyYW1lSGFuZGxlIl9zLCBtX2N1cnJlbnRCcm93c2luZ0NvbnRl
eHQudmFsdWUoKSk7CiAKLSAgICAgICAgaW50IGZyYW1lSW5kZXg7Ci0gICAgICAgIGlmIChmcmFt
ZUlELT5hc0ludGVnZXIoZnJhbWVJbmRleCkpIHsKKyAgICAgICAgaWYgKGF1dG8gZnJhbWVJbmRl
eCA9IGZyYW1lSUQtPmFzSW50ZWdlcigpKSB7CiAgICAgICAgICAgICBBU1NFUlQoZnJhbWVJbmRl
eCA+PSAwICYmIGZyYW1lSW5kZXggPCBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkIHNob3J0
Pjo6bWF4KCkpOwotICAgICAgICAgICAgcGFyYW1ldGVycy0+c2V0SW50ZWdlcigib3JkaW5hbCJf
cywgZnJhbWVJbmRleCk7CisgICAgICAgICAgICBwYXJhbWV0ZXJzLT5zZXRJbnRlZ2VyKCJvcmRp
bmFsIl9zLCAqZnJhbWVJbmRleCk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBTdHJp
bmcgZnJhbWVFbGVtZW50SUQgPSBleHRyYWN0RWxlbWVudElEKCpmcmFtZUlEKTsKICAgICAgICAg
ICAgIEFTU0VSVCghZnJhbWVFbGVtZW50SUQuaXNFbXB0eSgpKTsKQEAgLTY2OSwxMSArNjgzLDEz
IEBAIHZvaWQgU2Vzc2lvbjo6c3dpdGNoVG9GcmFtZShSZWZQdHI8SlNPTjo6VmFsdWU+JiYgZnJh
bWVJRCwgRnVuY3Rpb248dm9pZCAoQ29tbWFuCiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhh
bmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChXVEZNb3ZlKHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0
KSkpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IFN0cmluZyBmcmFtZUhhbmRsZTsKLSAgICAgICAgICAgIGlmICghcmVzcG9uc2UucmVzcG9uc2VP
YmplY3QtPmdldFN0cmluZygicmVzdWx0Il9zLCBmcmFtZUhhbmRsZSkpIHsKKworICAgICAgICAg
ICAgYXV0byBmcmFtZUhhbmRsZSA9IHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRTdHJpbmco
InJlc3VsdCJfcyk7CisgICAgICAgICAgICBpZiAoIWZyYW1lSGFuZGxlKSB7CiAgICAgICAgICAg
ICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0
OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgICAgIH0KKwogICAgICAgICAgICAgc3dpdGNoVG9Ccm93c2luZ0NvbnRleHQoZnJhbWVI
YW5kbGUpOwogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6c3Vj
Y2VzcygpKTsKICAgICAgICAgfSk7CkBAIC02OTcsNyArNzEzLDcgQEAgdm9pZCBTZXNzaW9uOjpz
d2l0Y2hUb1BhcmVudEZyYW1lKEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSZXN1bHQmJik+JiYgY29t
cGxldGlvbkgKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUocmVzdWx0KSk7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgUmVmUHRyPEpTT046Ok9i
amVjdD4gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIGF1dG8g
cGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgIHBhcmFtZXRlcnMt
PnNldFN0cmluZygiYnJvd3NpbmdDb250ZXh0SGFuZGxlIl9zLCBtX3RvcGxldmVsQnJvd3NpbmdD
b250ZXh0LnZhbHVlKCkpOwogICAgICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoImZyYW1lSGFu
ZGxlIl9zLCBtX2N1cnJlbnRCcm93c2luZ0NvbnRleHQudmFsdWUoKSk7CiAgICAgICAgIG1faG9z
dC0+c2VuZENvbW1hbmRUb0JhY2tlbmQoInJlc29sdmVQYXJlbnRGcmFtZUhhbmRsZSJfcywgV1RG
TW92ZShwYXJhbWV0ZXJzKSwgW3RoaXMsIHByb3RlY3RlZFRoaXMsIGNvbXBsZXRpb25IYW5kbGVy
ID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKFNlc3Npb25Ib3N0OjpDb21tYW5kUmVzcG9u
c2UmJiByZXNwb25zZSkgewpAQCAtNzA1LDExICs3MjEsMTMgQEAgdm9pZCBTZXNzaW9uOjpzd2l0
Y2hUb1BhcmVudEZyYW1lKEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSZXN1bHQmJik+JiYgY29tcGxl
dGlvbkgKICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0Ojpm
YWlsKFdURk1vdmUocmVzcG9uc2UucmVzcG9uc2VPYmplY3QpKSk7CiAgICAgICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgU3RyaW5nIGZyYW1lSGFuZGxlOwot
ICAgICAgICAgICAgaWYgKCFyZXNwb25zZS5yZXNwb25zZU9iamVjdC0+Z2V0U3RyaW5nKCJyZXN1
bHQiX3MsIGZyYW1lSGFuZGxlKSkgeworCisgICAgICAgICAgICBhdXRvIGZyYW1lSGFuZGxlID0g
cmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdldFN0cmluZygicmVzdWx0Il9zKTsKKyAgICAgICAg
ICAgIGlmICghZnJhbWVIYW5kbGUpIHsKICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVy
cm9yKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQorCiAgICAgICAg
ICAgICBzd2l0Y2hUb0Jyb3dzaW5nQ29udGV4dChmcmFtZUhhbmRsZSk7CiAgICAgICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpzdWNjZXNzKCkpOwogICAgICAgICB9KTsK
QEAgLTcxOCwzOSArNzM2LDYxIEBAIHZvaWQgU2Vzc2lvbjo6c3dpdGNoVG9QYXJlbnRGcmFtZShG
dW5jdGlvbjx2b2lkIChDb21tYW5kUmVzdWx0JiYpPiYmIGNvbXBsZXRpb25ICiAKIHZvaWQgU2Vz
c2lvbjo6Z2V0VG9wbGV2ZWxCcm93c2luZ0NvbnRleHRSZWN0KEZ1bmN0aW9uPHZvaWQgKENvbW1h
bmRSZXN1bHQmJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgUmVmUHRyPEpTT046Ok9i
amVjdD4gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgYXV0byBwYXJh
bWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJp
bmcoImhhbmRsZSJfcywgbV90b3BsZXZlbEJyb3dzaW5nQ29udGV4dC52YWx1ZSgpKTsKICAgICBt
X2hvc3QtPnNlbmRDb21tYW5kVG9CYWNrZW5kKCJnZXRCcm93c2luZ0NvbnRleHQiX3MsIFdURk1v
dmUocGFyYW1ldGVycyksIFtwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNvbXBsZXRp
b25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKFNlc3Npb25Ib3N0OjpDb21t
YW5kUmVzcG9uc2UmJiByZXNwb25zZSkgewogICAgICAgICBpZiAocmVzcG9uc2UuaXNFcnJvciB8
fCAhcmVzcG9uc2UucmVzcG9uc2VPYmplY3QpIHsKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5k
bGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoV1RGTW92ZShyZXNwb25zZS5yZXNwb25zZU9iamVjdCkp
KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBSZWZQdHI8SlNPTjo6
T2JqZWN0PiBicm93c2luZ0NvbnRleHQ7Ci0gICAgICAgIGlmICghcmVzcG9uc2UucmVzcG9uc2VP
YmplY3QtPmdldE9iamVjdCgiY29udGV4dCJfcywgYnJvd3NpbmdDb250ZXh0KSkgeworCisgICAg
ICAgIGF1dG8gYnJvd3NpbmdDb250ZXh0ID0gcmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdldE9i
amVjdCgiY29udGV4dCJfcyk7CisgICAgICAgIGlmICghYnJvd3NpbmdDb250ZXh0KSB7CiAgICAg
ICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1
bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVycm9yKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KLSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gd2luZG93T3JpZ2luOwotICAgICAg
ICBkb3VibGUgeCA9IDAsIHkgPSAwOwotICAgICAgICBpZiAoIWJyb3dzaW5nQ29udGV4dC0+Z2V0
T2JqZWN0KCJ3aW5kb3dPcmlnaW4iX3MsIHdpbmRvd09yaWdpbikKLSAgICAgICAgICAgIHx8ICF3
aW5kb3dPcmlnaW4tPmdldERvdWJsZSgieCJfcywgeCkKLSAgICAgICAgICAgIHx8ICF3aW5kb3dP
cmlnaW4tPmdldERvdWJsZSgieSJfcywgeSkpIHsKKworICAgICAgICBhdXRvIHdpbmRvd09yaWdp
biA9IGJyb3dzaW5nQ29udGV4dC0+Z2V0T2JqZWN0KCJ3aW5kb3dPcmlnaW4iX3MpOworICAgICAg
ICBpZiAoIXdpbmRvd09yaWdpbikgewogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29t
bWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikp
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIFJlZlB0cjxKU09OOjpP
YmplY3Q+IHdpbmRvd1NpemU7Ci0gICAgICAgIGRvdWJsZSB3aWR0aCA9IDAsIGhlaWdodCA9IDA7
Ci0gICAgICAgIGlmICghYnJvd3NpbmdDb250ZXh0LT5nZXRPYmplY3QoIndpbmRvd1NpemUiX3Ms
IHdpbmRvd1NpemUpCi0gICAgICAgICAgICB8fCAhd2luZG93U2l6ZS0+Z2V0RG91YmxlKCJ3aWR0
aCJfcywgd2lkdGgpCi0gICAgICAgICAgICB8fCAhd2luZG93U2l6ZS0+Z2V0RG91YmxlKCJoZWln
aHQiX3MsIGhlaWdodCkpIHsKKworICAgICAgICBhdXRvIHggPSB3aW5kb3dPcmlnaW4tPmdldERv
dWJsZSgieCJfcyk7CisgICAgICAgIGlmICgheCkgewogICAgICAgICAgICAgY29tcGxldGlvbkhh
bmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OlVua25v
d25FcnJvcikpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CisKKyAgICAgICAgYXV0
byB5ID0gd2luZG93T3JpZ2luLT5nZXREb3VibGUoInkiX3MpOworICAgICAgICBpZiAoIXkpIHsK
KyAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFu
ZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorCisgICAgICAgIGF1dG8gd2luZG93U2l6ZSA9IGJyb3dzaW5nQ29udGV4dC0+
Z2V0T2JqZWN0KCJ3aW5kb3dTaXplIl9zKTsKKyAgICAgICAgaWYgKCF3aW5kb3dTaXplKSB7Cisg
ICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRS
ZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVycm9yKSk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKworICAgICAgICBhdXRvIHdpZHRoID0gd2luZG93U2l6ZS0+Z2V0RG91YmxlKCJ3
aWR0aCJfcyk7CisgICAgICAgIGlmICghd2lkdGgpIHsKKyAgICAgICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtu
b3duRXJyb3IpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGF1
dG8gaGVpZ2h0ID0gd2luZG93U2l6ZS0+Z2V0RG91YmxlKCJoZWlnaHQiX3MpOworICAgICAgICBp
ZiAoIWhlaWdodCkgeworICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3Vs
dDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisKICAgICAgICAgYXV0byB3aW5kb3dSZWN0ID0gSlNP
Tjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICAgICAgd2luZG93UmVjdC0+c2V0RG91YmxlKCJ4Il9z
LCB4KTsKLSAgICAgICAgd2luZG93UmVjdC0+c2V0RG91YmxlKCJ5Il9zLCB5KTsKLSAgICAgICAg
d2luZG93UmVjdC0+c2V0RG91YmxlKCJ3aWR0aCJfcywgd2lkdGgpOwotICAgICAgICB3aW5kb3dS
ZWN0LT5zZXREb3VibGUoImhlaWdodCJfcywgaGVpZ2h0KTsKKyAgICAgICAgd2luZG93UmVjdC0+
c2V0RG91YmxlKCJ4Il9zLCAqeCk7CisgICAgICAgIHdpbmRvd1JlY3QtPnNldERvdWJsZSgieSJf
cywgKnkpOworICAgICAgICB3aW5kb3dSZWN0LT5zZXREb3VibGUoIndpZHRoIl9zLCAqd2lkdGgp
OworICAgICAgICB3aW5kb3dSZWN0LT5zZXREb3VibGUoImhlaWdodCJfcywgKmhlaWdodCk7CiAg
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OnN1Y2Nlc3MoV1RGTW92ZSh3
aW5kb3dSZWN0KSkpOwogICAgIH0pOwogfQpAQCAtNzg0LDE2ICs4MjQsMTYgQEAgdm9pZCBTZXNz
aW9uOjpzZXRXaW5kb3dSZWN0KE9wdGlvbmFsPGRvdWJsZT4geCwgT3B0aW9uYWw8ZG91YmxlPiB5
LCBPcHRpb25hbDxkb3UKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAg
IFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgp
OworICAgICAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAg
ICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoImhhbmRsZSJfcywgbV90b3BsZXZlbEJyb3dzaW5n
Q29udGV4dC52YWx1ZSgpKTsKICAgICAgICAgaWYgKHggJiYgeSkgewotICAgICAgICAgICAgUmVm
UHRyPEpTT046Ok9iamVjdD4gd2luZG93T3JpZ2luID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsK
KyAgICAgICAgICAgIGF1dG8gd2luZG93T3JpZ2luID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsK
ICAgICAgICAgICAgIHdpbmRvd09yaWdpbi0+c2V0RG91YmxlKCJ4IiwgeC52YWx1ZSgpKTsKICAg
ICAgICAgICAgIHdpbmRvd09yaWdpbi0+c2V0RG91YmxlKCJ5IiwgeS52YWx1ZSgpKTsKICAgICAg
ICAgICAgIHBhcmFtZXRlcnMtPnNldE9iamVjdCgib3JpZ2luIl9zLCBXVEZNb3ZlKHdpbmRvd09y
aWdpbikpOwogICAgICAgICB9CiAgICAgICAgIGlmICh3aWR0aCAmJiBoZWlnaHQpIHsKLSAgICAg
ICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHdpbmRvd1NpemUgPSBKU09OOjpPYmplY3Q6OmNy
ZWF0ZSgpOworICAgICAgICAgICAgYXV0byB3aW5kb3dTaXplID0gSlNPTjo6T2JqZWN0OjpjcmVh
dGUoKTsKICAgICAgICAgICAgIHdpbmRvd1NpemUtPnNldERvdWJsZSgid2lkdGgiLCB3aWR0aC52
YWx1ZSgpKTsKICAgICAgICAgICAgIHdpbmRvd1NpemUtPnNldERvdWJsZSgiaGVpZ2h0IiwgaGVp
Z2h0LnZhbHVlKCkpOwogICAgICAgICAgICAgcGFyYW1ldGVycy0+c2V0T2JqZWN0KCJzaXplIl9z
LCBXVEZNb3ZlKHdpbmRvd1NpemUpKTsKQEAgLTgyMSw3ICs4NjEsNyBAQCB2b2lkIFNlc3Npb246
Om1heGltaXplV2luZG93KEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSZXN1bHQmJik+JiYgY29tcGxl
dGlvbkhhbmRsZQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgUmVm
UHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Cisg
ICAgICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAg
IHBhcmFtZXRlcnMtPnNldFN0cmluZygiaGFuZGxlIl9zLCBtX3RvcGxldmVsQnJvd3NpbmdDb250
ZXh0LnZhbHVlKCkpOwogICAgICAgICBtX2hvc3QtPnNlbmRDb21tYW5kVG9CYWNrZW5kKCJtYXhp
bWl6ZVdpbmRvd09mQnJvd3NpbmdDb250ZXh0Il9zLCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBbdGhp
cywgcHJvdGVjdGVkVGhpcywgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25I
YW5kbGVyKV0gKFNlc3Npb25Ib3N0OjpDb21tYW5kUmVzcG9uc2UmJiByZXNwb25zZSkgbXV0YWJs
ZSB7CiAgICAgICAgICAgICBpZiAocmVzcG9uc2UuaXNFcnJvcikgewpAQCAtODQ2LDcgKzg4Niw3
IEBAIHZvaWQgU2Vzc2lvbjo6bWluaW1pemVXaW5kb3coRnVuY3Rpb248dm9pZCAoQ29tbWFuZFJl
c3VsdCYmKT4mJiBjb21wbGV0aW9uSGFuZGxlCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KIAotICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzID0gSlNPTjo6T2Jq
ZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgYXV0byBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0Ojpj
cmVhdGUoKTsKICAgICAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJoYW5kbGUiX3MsIG1fdG9w
bGV2ZWxCcm93c2luZ0NvbnRleHQudmFsdWUoKSk7CiAgICAgICAgIG1faG9zdC0+c2VuZENvbW1h
bmRUb0JhY2tlbmQoImhpZGVXaW5kb3dPZkJyb3dzaW5nQ29udGV4dCJfcywgV1RGTW92ZShwYXJh
bWV0ZXJzKSwgW3RoaXMsIHByb3RlY3RlZFRoaXMsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlcildIChTZXNzaW9uSG9zdDo6Q29tbWFuZFJlc3BvbnNlJiYgcmVz
cG9uc2UpIG11dGFibGUgewogICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmlzRXJyb3IpIHsKQEAg
LTg3MSw3ICs5MTEsNyBAQCB2b2lkIFNlc3Npb246OmZ1bGxzY3JlZW5XaW5kb3coRnVuY3Rpb248
dm9pZCAoQ29tbWFuZFJlc3VsdCYmKT4mJiBjb21wbGV0aW9uSGFuZAogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVy
cyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIGF1dG8gcGFyYW1ldGVycyA9IEpT
T046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiYnJv
d3NpbmdDb250ZXh0SGFuZGxlIl9zLCBtX3RvcGxldmVsQnJvd3NpbmdDb250ZXh0LnZhbHVlKCkp
OwogICAgICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoImZ1bmN0aW9uIl9zLCBTdHJpbmcoRW50
ZXJGdWxsc2NyZWVuSmF2YVNjcmlwdCwgc2l6ZW9mKEVudGVyRnVsbHNjcmVlbkphdmFTY3JpcHQp
KSk7CiAgICAgICAgIHBhcmFtZXRlcnMtPnNldEFycmF5KCJhcmd1bWVudHMiX3MsIEpTT046OkFy
cmF5OjpjcmVhdGUoKSk7CkBAIC04ODIsMTMgKzkyMiwxNCBAQCB2b2lkIFNlc3Npb246OmZ1bGxz
Y3JlZW5XaW5kb3coRnVuY3Rpb248dm9pZCAoQ29tbWFuZFJlc3VsdCYmKT4mJiBjb21wbGV0aW9u
SGFuZAogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KIAotICAgICAgICAg
ICAgU3RyaW5nIHZhbHVlU3RyaW5nOwotICAgICAgICAgICAgaWYgKCFyZXNwb25zZS5yZXNwb25z
ZU9iamVjdC0+Z2V0U3RyaW5nKCJyZXN1bHQiX3MsIHZhbHVlU3RyaW5nKSkgeworICAgICAgICAg
ICAgYXV0byB2YWx1ZVN0cmluZyA9IHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRTdHJpbmco
InJlc3VsdCJfcyk7CisgICAgICAgICAgICBpZiAoIXZhbHVlU3RyaW5nKSB7CiAgICAgICAgICAg
ICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0
OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gcmVzdWx0VmFsdWU7
Ci0gICAgICAgICAgICBpZiAoIUpTT046OlZhbHVlOjpwYXJzZUpTT04odmFsdWVTdHJpbmcsIHJl
c3VsdFZhbHVlKSkgeworCisgICAgICAgICAgICBhdXRvIHJlc3VsdFZhbHVlID0gSlNPTjo6VmFs
dWU6OnBhcnNlSlNPTih2YWx1ZVN0cmluZyk7CisgICAgICAgICAgICBpZiAoIXJlc3VsdFZhbHVl
KSB7CiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFp
bChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikpOwogICAgICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgICAgIH0KQEAgLTkwMCwyMiArOTQxLDI1IEBAIHZvaWQgU2Vz
c2lvbjo6ZnVsbHNjcmVlbldpbmRvdyhGdW5jdGlvbjx2b2lkIChDb21tYW5kUmVzdWx0JiYpPiYm
IGNvbXBsZXRpb25IYW5kCiAKIFJlZlB0cjxKU09OOjpPYmplY3Q+IFNlc3Npb246OmNyZWF0ZUVs
ZW1lbnQoUmVmUHRyPEpTT046OlZhbHVlPiYmIHZhbHVlKQogewotICAgIFJlZlB0cjxKU09OOjpP
YmplY3Q+IHZhbHVlT2JqZWN0OwotICAgIGlmICghdmFsdWUtPmFzT2JqZWN0KHZhbHVlT2JqZWN0
KSkKKyAgICBpZiAoIXZhbHVlKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIFN0cmlu
ZyBlbGVtZW50SUQ7Ci0gICAgaWYgKCF2YWx1ZU9iamVjdC0+Z2V0U3RyaW5nKCJzZXNzaW9uLW5v
ZGUtIiArIGlkKCksIGVsZW1lbnRJRCkpCisgICAgYXV0byB2YWx1ZU9iamVjdCA9IHZhbHVlLT5h
c09iamVjdCgpOworICAgIGlmICghdmFsdWVPYmplY3QpCiAgICAgICAgIHJldHVybiBudWxscHRy
OwogCi0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gZWxlbWVudE9iamVjdCA9IEpTT046Ok9iamVj
dDo6Y3JlYXRlKCk7CisgICAgYXV0byBlbGVtZW50SUQgPSB2YWx1ZU9iamVjdC0+Z2V0U3RyaW5n
KCJzZXNzaW9uLW5vZGUtIiArIGlkKCkpOworICAgIGlmICghZWxlbWVudElEKQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gZWxlbWVudE9iamVjdCA9IEpTT046Ok9iamVjdDo6
Y3JlYXRlKCk7CiAgICAgZWxlbWVudE9iamVjdC0+c2V0U3RyaW5nKHdlYkVsZW1lbnRJZGVudGlm
aWVyKCksIGVsZW1lbnRJRCk7CiAgICAgcmV0dXJuIGVsZW1lbnRPYmplY3Q7CiB9CiAKLVJlZlB0
cjxKU09OOjpPYmplY3Q+IFNlc3Npb246OmNyZWF0ZUVsZW1lbnQoY29uc3QgU3RyaW5nJiBlbGVt
ZW50SUQpCitSZWY8SlNPTjo6T2JqZWN0PiBTZXNzaW9uOjpjcmVhdGVFbGVtZW50KGNvbnN0IFN0
cmluZyYgZWxlbWVudElEKQogewotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IGVsZW1lbnRPYmpl
Y3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGF1dG8gZWxlbWVudE9iamVjdCA9IEpT
T046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgZWxlbWVudE9iamVjdC0+c2V0U3RyaW5nKCJzZXNz
aW9uLW5vZGUtIiArIGlkKCksIGVsZW1lbnRJRCk7CiAgICAgcmV0dXJuIGVsZW1lbnRPYmplY3Q7
CiB9CkBAIC05MjMsMTcgKzk2NywxNyBAQCBSZWZQdHI8SlNPTjo6T2JqZWN0PiBTZXNzaW9uOjpj
cmVhdGVFbGVtZW50KGNvbnN0IFN0cmluZyYgZWxlbWVudElEKQogUmVmUHRyPEpTT046Ok9iamVj
dD4gU2Vzc2lvbjo6ZXh0cmFjdEVsZW1lbnQoSlNPTjo6VmFsdWUmIHZhbHVlKQogewogICAgIFN0
cmluZyBlbGVtZW50SUQgPSBleHRyYWN0RWxlbWVudElEKHZhbHVlKTsKLSAgICByZXR1cm4gIWVs
ZW1lbnRJRC5pc0VtcHR5KCkgPyBjcmVhdGVFbGVtZW50KGVsZW1lbnRJRCkgOiBudWxscHRyOwor
ICAgIHJldHVybiAhZWxlbWVudElELmlzRW1wdHkoKSA/IGNyZWF0ZUVsZW1lbnQoZWxlbWVudElE
KS5wdHIoKSA6IG51bGxwdHI7CiB9CiAKIFN0cmluZyBTZXNzaW9uOjpleHRyYWN0RWxlbWVudElE
KEpTT046OlZhbHVlJiB2YWx1ZSkKIHsKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiB2YWx1ZU9i
amVjdDsKLSAgICBpZiAoIXZhbHVlLmFzT2JqZWN0KHZhbHVlT2JqZWN0KSkKKyAgICBhdXRvIHZh
bHVlT2JqZWN0ID0gdmFsdWUuYXNPYmplY3QoKTsKKyAgICBpZiAoIXZhbHVlT2JqZWN0KQogICAg
ICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKIAotICAgIFN0cmluZyBlbGVtZW50SUQ7Ci0gICAg
aWYgKCF2YWx1ZU9iamVjdC0+Z2V0U3RyaW5nKHdlYkVsZW1lbnRJZGVudGlmaWVyKCksIGVsZW1l
bnRJRCkpCisgICAgYXV0byBlbGVtZW50SUQgPSB2YWx1ZU9iamVjdC0+Z2V0U3RyaW5nKHdlYkVs
ZW1lbnRJZGVudGlmaWVyKCkpOworICAgIGlmICghZWxlbWVudElEKQogICAgICAgICByZXR1cm4g
ZW1wdHlTdHJpbmcoKTsKIAogICAgIHJldHVybiBlbGVtZW50SUQ7CkBAIC05NDMsNyArOTg3LDcg
QEAgdm9pZCBTZXNzaW9uOjpjb21wdXRlRWxlbWVudExheW91dChjb25zdCBTdHJpbmcmIGVsZW1l
bnRJRCwgT3B0aW9uU2V0PEVsZW1lbnRMYXkKIHsKICAgICBBU1NFUlQobV90b3BsZXZlbEJyb3dz
aW5nQ29udGV4dC52YWx1ZSgpKTsKIAotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRl
cnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTT046
Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJicm93c2luZ0Nv
bnRleHRIYW5kbGUiX3MsIG1fdG9wbGV2ZWxCcm93c2luZ0NvbnRleHQudmFsdWUoKSk7CiAgICAg
cGFyYW1ldGVycy0+c2V0U3RyaW5nKCJmcmFtZUhhbmRsZSJfcywgbV9jdXJyZW50QnJvd3NpbmdD
b250ZXh0LnZhbHVlT3IoZW1wdHlTdHJpbmcoKSkpOwogICAgIHBhcmFtZXRlcnMtPnNldFN0cmlu
Zygibm9kZUhhbmRsZSJfcywgZWxlbWVudElEKTsKQEAgLTk1NCw1OSArOTk4LDYwIEBAIHZvaWQg
U2Vzc2lvbjo6Y29tcHV0ZUVsZW1lbnRMYXlvdXQoY29uc3QgU3RyaW5nJiBlbGVtZW50SUQsIE9w
dGlvblNldDxFbGVtZW50TGF5CiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEY6Om51
bGxvcHQsIFdURjo6bnVsbG9wdCwgZmFsc2UsIFdURk1vdmUocmVzcG9uc2UucmVzcG9uc2VPYmpl
Y3QpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBSZWZQdHI8SlNP
Tjo6T2JqZWN0PiByZWN0T2JqZWN0OwotICAgICAgICBpZiAoIXJlc3BvbnNlLnJlc3BvbnNlT2Jq
ZWN0LT5nZXRPYmplY3QoInJlY3QiX3MsIHJlY3RPYmplY3QpKSB7CisKKyAgICAgICAgYXV0byBy
ZWN0T2JqZWN0ID0gcmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdldE9iamVjdCgicmVjdCJfcyk7
CisgICAgICAgIGlmICghcmVjdE9iamVjdCkgewogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIoV1RGOjpudWxsb3B0LCBXVEY6Om51bGxvcHQsIGZhbHNlLCBudWxscHRyKTsKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQorCiAgICAgICAgIE9wdGlvbmFsPGludD4gZWxlbWVudFg7
CiAgICAgICAgIE9wdGlvbmFsPGludD4gZWxlbWVudFk7Ci0gICAgICAgIFJlZlB0cjxKU09OOjpP
YmplY3Q+IGVsZW1lbnRQb3NpdGlvbjsKLSAgICAgICAgaWYgKHJlY3RPYmplY3QtPmdldE9iamVj
dCgib3JpZ2luIl9zLCBlbGVtZW50UG9zaXRpb24pKSB7Ci0gICAgICAgICAgICBpbnQgeCwgeTsK
LSAgICAgICAgICAgIGlmIChlbGVtZW50UG9zaXRpb24tPmdldEludGVnZXIoIngiX3MsIHgpICYm
IGVsZW1lbnRQb3NpdGlvbi0+Z2V0SW50ZWdlcigieSJfcywgeSkpIHsKLSAgICAgICAgICAgICAg
ICBlbGVtZW50WCA9IHg7Ci0gICAgICAgICAgICAgICAgZWxlbWVudFkgPSB5OwotICAgICAgICAg
ICAgfQorICAgICAgICBhdXRvIGVsZW1lbnRQb3NpdGlvbiA9IHJlY3RPYmplY3QtPmdldE9iamVj
dCgib3JpZ2luIl9zKTsKKyAgICAgICAgaWYgKGVsZW1lbnRQb3NpdGlvbikgeworICAgICAgICAg
ICAgZWxlbWVudFggPSBlbGVtZW50UG9zaXRpb24tPmdldEludGVnZXIoIngiX3MpOworICAgICAg
ICAgICAgZWxlbWVudFkgPSBlbGVtZW50UG9zaXRpb24tPmdldEludGVnZXIoInkiX3MpOwogICAg
ICAgICB9CiAgICAgICAgIGlmICghZWxlbWVudFggfHwgIWVsZW1lbnRZKSB7CiAgICAgICAgICAg
ICBjb21wbGV0aW9uSGFuZGxlcihXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCwgZmFsc2UsIG51
bGxwdHIpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CisKICAgICAgICAgT3B0aW9u
YWw8aW50PiBlbGVtZW50V2lkdGg7CiAgICAgICAgIE9wdGlvbmFsPGludD4gZWxlbWVudEhlaWdo
dDsKLSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gZWxlbWVudFNpemU7Ci0gICAgICAgIGlm
IChyZWN0T2JqZWN0LT5nZXRPYmplY3QoInNpemUiX3MsIGVsZW1lbnRTaXplKSkgewotICAgICAg
ICAgICAgaW50IHdpZHRoLCBoZWlnaHQ7Ci0gICAgICAgICAgICBpZiAoZWxlbWVudFNpemUtPmdl
dEludGVnZXIoIndpZHRoIl9zLCB3aWR0aCkgJiYgZWxlbWVudFNpemUtPmdldEludGVnZXIoImhl
aWdodCJfcywgaGVpZ2h0KSkgewotICAgICAgICAgICAgICAgIGVsZW1lbnRXaWR0aCA9IHdpZHRo
OwotICAgICAgICAgICAgICAgIGVsZW1lbnRIZWlnaHQgPSBoZWlnaHQ7Ci0gICAgICAgICAgICB9
CisgICAgICAgIGF1dG8gZWxlbWVudFNpemUgPSByZWN0T2JqZWN0LT5nZXRPYmplY3QoInNpemUi
X3MpOworICAgICAgICBpZiAoZWxlbWVudFNpemUpIHsKKyAgICAgICAgICAgIGVsZW1lbnRXaWR0
aCA9IGVsZW1lbnRTaXplLT5nZXRJbnRlZ2VyKCJ3aWR0aCJfcyk7CisgICAgICAgICAgICBlbGVt
ZW50SGVpZ2h0ID0gZWxlbWVudFNpemUtPmdldEludGVnZXIoImhlaWdodCJfcyk7CiAgICAgICAg
IH0KICAgICAgICAgaWYgKCFlbGVtZW50V2lkdGggfHwgIWVsZW1lbnRIZWlnaHQpIHsKICAgICAg
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0LCBmYWxz
ZSwgbnVsbHB0cik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KKwogICAgICAgICBS
ZWN0IHJlY3QgPSB7IHsgZWxlbWVudFgudmFsdWUoKSwgZWxlbWVudFkudmFsdWUoKSB9LCB7IGVs
ZW1lbnRXaWR0aC52YWx1ZSgpLCBlbGVtZW50SGVpZ2h0LnZhbHVlKCkgfSB9OwogCi0gICAgICAg
IGJvb2wgaXNPYnNjdXJlZDsKLSAgICAgICAgaWYgKCFyZXNwb25zZS5yZXNwb25zZU9iamVjdC0+
Z2V0Qm9vbGVhbigiaXNPYnNjdXJlZCJfcywgaXNPYnNjdXJlZCkpIHsKKyAgICAgICAgYXV0byBp
c09ic2N1cmVkID0gcmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdldEJvb2xlYW4oImlzT2JzY3Vy
ZWQiX3MpOworICAgICAgICBpZiAoIWlzT2JzY3VyZWQpIHsKICAgICAgICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKFdURjo6bnVsbG9wdCwgV1RGOjpudWxsb3B0LCBmYWxzZSwgbnVsbHB0cik7CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVj
dD4gaW5WaWV3Q2VudGVyUG9pbnRPYmplY3Q7Ci0gICAgICAgIGlmICghcmVzcG9uc2UucmVzcG9u
c2VPYmplY3QtPmdldE9iamVjdCgiaW5WaWV3Q2VudGVyUG9pbnQiX3MsIGluVmlld0NlbnRlclBv
aW50T2JqZWN0KSkgewotICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIocmVjdCwgV1RGOjpu
dWxsb3B0LCBpc09ic2N1cmVkLCBudWxscHRyKTsKKworICAgICAgICBhdXRvIGluVmlld0NlbnRl
clBvaW50T2JqZWN0ID0gcmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdldE9iamVjdCgiaW5WaWV3
Q2VudGVyUG9pbnQiX3MpOworICAgICAgICBpZiAoIWluVmlld0NlbnRlclBvaW50T2JqZWN0KSB7
CisgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihyZWN0LCBXVEY6Om51bGxvcHQsICppc09i
c2N1cmVkLCBudWxscHRyKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAg
ICBpbnQgaW5WaWV3Q2VudGVyUG9pbnRYID0gMCwgaW5WaWV3Q2VudGVyUG9pbnRZID0gMDsKLSAg
ICAgICAgaWYgKCFpblZpZXdDZW50ZXJQb2ludE9iamVjdC0+Z2V0SW50ZWdlcigieCJfcywgaW5W
aWV3Q2VudGVyUG9pbnRYKQotICAgICAgICAgICAgfHwgIWluVmlld0NlbnRlclBvaW50T2JqZWN0
LT5nZXRJbnRlZ2VyKCJ5Il9zLCBpblZpZXdDZW50ZXJQb2ludFkpKSB7Ci0gICAgICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcihXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9wdCwgaXNPYnNjdXJlZCwg
bnVsbHB0cik7CisKKyAgICAgICAgYXV0byBpblZpZXdDZW50ZXJQb2ludFggPSBpblZpZXdDZW50
ZXJQb2ludE9iamVjdC0+Z2V0SW50ZWdlcigieCJfcyk7CisgICAgICAgIGF1dG8gaW5WaWV3Q2Vu
dGVyUG9pbnRZID0gaW5WaWV3Q2VudGVyUG9pbnRPYmplY3QtPmdldEludGVnZXIoInkiX3MpOwor
ICAgICAgICBpZiAoIWluVmlld0NlbnRlclBvaW50WCB8fCAhaW5WaWV3Q2VudGVyUG9pbnRZKSB7
CisgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEY6Om51bGxvcHQsIFdURjo6bnVsbG9w
dCwgKmlzT2JzY3VyZWQsIG51bGxwdHIpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
Ci0gICAgICAgIFBvaW50IGluVmlld0NlbnRlclBvaW50ID0geyBpblZpZXdDZW50ZXJQb2ludFgs
IGluVmlld0NlbnRlclBvaW50WSB9OwotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihyZWN0LCBp
blZpZXdDZW50ZXJQb2ludCwgaXNPYnNjdXJlZCwgbnVsbHB0cik7CisKKyAgICAgICAgUG9pbnQg
aW5WaWV3Q2VudGVyUG9pbnQgPSB7ICppblZpZXdDZW50ZXJQb2ludFgsICppblZpZXdDZW50ZXJQ
b2ludFkgfTsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIocmVjdCwgaW5WaWV3Q2VudGVyUG9p
bnQsICppc09ic2N1cmVkLCBudWxscHRyKTsKICAgICB9KTsKIH0KIApAQCAtMTAyMiw3ICsxMDY3
LDcgQEAgdm9pZCBTZXNzaW9uOjpmaW5kRWxlbWVudHMoY29uc3QgU3RyaW5nJiBzdHJhdGVneSwg
Y29uc3QgU3RyaW5nJiBzZWxlY3RvciwgRmluZEUKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5k
bGVyKFdURk1vdmUocmVzdWx0KSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAg
ICAgICAgUmVmUHRyPEpTT046OkFycmF5PiBhcmd1bWVudHMgPSBKU09OOjpBcnJheTo6Y3JlYXRl
KCk7CisgICAgICAgIGF1dG8gYXJndW1lbnRzID0gSlNPTjo6QXJyYXk6OmNyZWF0ZSgpOwogICAg
ICAgICBhcmd1bWVudHMtPnB1c2hTdHJpbmcoSlNPTjo6VmFsdWU6OmNyZWF0ZShzdHJhdGVneSkt
PnRvSlNPTlN0cmluZygpKTsKICAgICAgICAgaWYgKHJvb3RFbGVtZW50SUQuaXNFbXB0eSgpKQog
ICAgICAgICAgICAgYXJndW1lbnRzLT5wdXNoU3RyaW5nKEpTT046OlZhbHVlOjpudWxsKCktPnRv
SlNPTlN0cmluZygpKTsKQEAgLTEwMzIsNyArMTA3Nyw3IEBAIHZvaWQgU2Vzc2lvbjo6ZmluZEVs
ZW1lbnRzKGNvbnN0IFN0cmluZyYgc3RyYXRlZ3ksIGNvbnN0IFN0cmluZyYgc2VsZWN0b3IsIEZp
bmRFCiAgICAgICAgIGFyZ3VtZW50cy0+cHVzaFN0cmluZyhKU09OOjpWYWx1ZTo6Y3JlYXRlKG1v
ZGUgPT0gRmluZEVsZW1lbnRzTW9kZTo6U2luZ2xlKS0+dG9KU09OU3RyaW5nKCkpOwogICAgICAg
ICBhcmd1bWVudHMtPnB1c2hTdHJpbmcoSlNPTjo6VmFsdWU6OmNyZWF0ZShtX2ltcGxpY2l0V2Fp
dFRpbWVvdXQpLT50b0pTT05TdHJpbmcoKSk7CiAKLSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVj
dD4gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIGF1dG8gcGFy
YW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgIHBhcmFtZXRlcnMtPnNl
dFN0cmluZygiYnJvd3NpbmdDb250ZXh0SGFuZGxlIl9zLCBtX3RvcGxldmVsQnJvd3NpbmdDb250
ZXh0LnZhbHVlKCkpOwogICAgICAgICBpZiAobV9jdXJyZW50QnJvd3NpbmdDb250ZXh0KQogICAg
ICAgICAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJmcmFtZUhhbmRsZSJfcywgbV9jdXJyZW50
QnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwpAQCAtMTA0OCwyMCArMTA5MywyMyBAQCB2b2lkIFNl
c3Npb246OmZpbmRFbGVtZW50cyhjb25zdCBTdHJpbmcmIHN0cmF0ZWd5LCBjb25zdCBTdHJpbmcm
IHNlbGVjdG9yLCBGaW5kRQogICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1h
bmRSZXN1bHQ6OmZhaWwoV1RGTW92ZShyZXNwb25zZS5yZXNwb25zZU9iamVjdCkpKTsKICAgICAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBTdHJpbmcgdmFs
dWVTdHJpbmc7Ci0gICAgICAgICAgICBpZiAoIXJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRT
dHJpbmcoInJlc3VsdCJfcywgdmFsdWVTdHJpbmcpKSB7Ci0gICAgICAgICAgICAgICAgY29tcGxl
dGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6
OlVua25vd25FcnJvcikpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gcmVzdWx0VmFsdWU7Ci0gICAgICAgICAg
ICBpZiAoIUpTT046OlZhbHVlOjpwYXJzZUpTT04odmFsdWVTdHJpbmcsIHJlc3VsdFZhbHVlKSkg
eworCisgICAgICAgICAgICBhdXRvIHZhbHVlU3RyaW5nID0gcmVzcG9uc2UucmVzcG9uc2VPYmpl
Y3QtPmdldFN0cmluZygicmVzdWx0Il9zKTsKKyAgICAgICAgICAgIGlmICghdmFsdWVTdHJpbmcp
IHsKICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWls
KENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVycm9yKSk7CiAgICAgICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAgICAgfQogCisgICAgICAgICAgICBhdXRvIHJlc3VsdFZhbHVl
ID0gSlNPTjo6VmFsdWU6OnBhcnNlSlNPTih2YWx1ZVN0cmluZyk7CisgICAgICAgICAgICBpZiAo
IXJlc3VsdFZhbHVlKSB7CisgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFu
ZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikpOwor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworCiAgICAgICAgICAgICBz
d2l0Y2ggKG1vZGUpIHsKICAgICAgICAgICAgIGNhc2UgRmluZEVsZW1lbnRzTW9kZTo6U2luZ2xl
OiB7Ci0gICAgICAgICAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gZWxlbWVudE9iamVjdCA9
IGNyZWF0ZUVsZW1lbnQoV1RGTW92ZShyZXN1bHRWYWx1ZSkpOworICAgICAgICAgICAgICAgIGF1
dG8gZWxlbWVudE9iamVjdCA9IGNyZWF0ZUVsZW1lbnQoV1RGTW92ZShyZXN1bHRWYWx1ZSkpOwog
ICAgICAgICAgICAgICAgIGlmICghZWxlbWVudE9iamVjdCkgewogICAgICAgICAgICAgICAgICAg
ICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVy
cm9yQ29kZTo6Tm9TdWNoRWxlbWVudCkpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47CkBA
IC0xMDcwLDE2ICsxMTE4LDE3IEBAIHZvaWQgU2Vzc2lvbjo6ZmluZEVsZW1lbnRzKGNvbnN0IFN0
cmluZyYgc3RyYXRlZ3ksIGNvbnN0IFN0cmluZyYgc2VsZWN0b3IsIEZpbmRFCiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXNlIEZpbmRFbGVtZW50
c01vZGU6Ok11bHRpcGxlOiB7Ci0gICAgICAgICAgICAgICAgUmVmUHRyPEpTT046OkFycmF5PiBl
bGVtZW50c0FycmF5OwotICAgICAgICAgICAgICAgIGlmICghcmVzdWx0VmFsdWUtPmFzQXJyYXko
ZWxlbWVudHNBcnJheSkpIHsKKyAgICAgICAgICAgICAgICBhdXRvIGVsZW1lbnRzQXJyYXkgPSBy
ZXN1bHRWYWx1ZS0+YXNBcnJheSgpOworICAgICAgICAgICAgICAgIGlmICghZWxlbWVudHNBcnJh
eSkgewogICAgICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0
OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6Tm9TdWNoRWxlbWVudCkpOwogICAgICAg
ICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IFJlZlB0cjxKU09OOjpBcnJheT4gZWxlbWVudE9iamVjdHNBcnJheSA9IEpTT046OkFycmF5Ojpj
cmVhdGUoKTsKKworICAgICAgICAgICAgICAgIGF1dG8gZWxlbWVudE9iamVjdHNBcnJheSA9IEpT
T046OkFycmF5OjpjcmVhdGUoKTsKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBlbGVtZW50c0Fy
cmF5TGVuZ3RoID0gZWxlbWVudHNBcnJheS0+bGVuZ3RoKCk7CiAgICAgICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGVsZW1lbnRzQXJyYXlMZW5ndGg7ICsraSkgewogICAgICAg
ICAgICAgICAgICAgICBpZiAoYXV0byBlbGVtZW50T2JqZWN0ID0gY3JlYXRlRWxlbWVudChlbGVt
ZW50c0FycmF5LT5nZXQoaSkpKQotICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudE9iamVj
dHNBcnJheS0+cHVzaE9iamVjdChXVEZNb3ZlKGVsZW1lbnRPYmplY3QpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGVsZW1lbnRPYmplY3RzQXJyYXktPnB1c2hPYmplY3QoZWxlbWVudE9iamVj
dC5yZWxlYXNlTm9uTnVsbCgpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6c3VjY2VzcyhXVEZNb3ZlKGVsZW1lbnRP
YmplY3RzQXJyYXkpKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0xMTAxLDcgKzExNTAs
NyBAQCB2b2lkIFNlc3Npb246OmdldEFjdGl2ZUVsZW1lbnQoRnVuY3Rpb248dm9pZCAoQ29tbWFu
ZFJlc3VsdCYmKT4mJiBjb21wbGV0aW9uSGFuZAogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIoV1RGTW92ZShyZXN1bHQpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAg
ICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVh
dGUoKTsKKyAgICAgICAgYXV0byBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsK
ICAgICAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJicm93c2luZ0NvbnRleHRIYW5kbGUiX3Ms
IG1fdG9wbGV2ZWxCcm93c2luZ0NvbnRleHQudmFsdWUoKSk7CiAgICAgICAgIHBhcmFtZXRlcnMt
PnNldFN0cmluZygiZnVuY3Rpb24iX3MsICJmdW5jdGlvbigpIHsgcmV0dXJuIGRvY3VtZW50LmFj
dGl2ZUVsZW1lbnQ7IH0iX3MpOwogICAgICAgICBwYXJhbWV0ZXJzLT5zZXRBcnJheSgiYXJndW1l
bnRzIl9zLCBKU09OOjpBcnJheTo6Y3JlYXRlKCkpOwpAQCAtMTExMCwxNyArMTE1OSwyMCBAQCB2
b2lkIFNlc3Npb246OmdldEFjdGl2ZUVsZW1lbnQoRnVuY3Rpb248dm9pZCAoQ29tbWFuZFJlc3Vs
dCYmKT4mJiBjb21wbGV0aW9uSGFuZAogICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVy
KENvbW1hbmRSZXN1bHQ6OmZhaWwoV1RGTW92ZShyZXNwb25zZS5yZXNwb25zZU9iamVjdCkpKTsK
ICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBTdHJp
bmcgdmFsdWVTdHJpbmc7Ci0gICAgICAgICAgICBpZiAoIXJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0
LT5nZXRTdHJpbmcoInJlc3VsdCJfcywgdmFsdWVTdHJpbmcpKSB7CisKKyAgICAgICAgICAgIGF1
dG8gdmFsdWVTdHJpbmcgPSByZXNwb25zZS5yZXNwb25zZU9iamVjdC0+Z2V0U3RyaW5nKCJyZXN1
bHQiX3MpOworICAgICAgICAgICAgaWYgKCF2YWx1ZVN0cmluZykgewogICAgICAgICAgICAgICAg
IGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJy
b3JDb2RlOjpVbmtub3duRXJyb3IpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHJlc3VsdFZhbHVlOwotICAg
ICAgICAgICAgaWYgKCFKU09OOjpWYWx1ZTo6cGFyc2VKU09OKHZhbHVlU3RyaW5nLCByZXN1bHRW
YWx1ZSkpIHsKKworICAgICAgICAgICAgYXV0byByZXN1bHRWYWx1ZSA9IEpTT046OlZhbHVlOjpw
YXJzZUpTT04odmFsdWVTdHJpbmcpOworICAgICAgICAgICAgaWYgKCFyZXN1bHRWYWx1ZSkgewog
ICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29t
bWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKICAgICAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBl
bGVtZW50T2JqZWN0ID0gY3JlYXRlRWxlbWVudChXVEZNb3ZlKHJlc3VsdFZhbHVlKSk7CisKKyAg
ICAgICAgICAgIGF1dG8gZWxlbWVudE9iamVjdCA9IGNyZWF0ZUVsZW1lbnQoV1RGTW92ZShyZXN1
bHRWYWx1ZSkpOwogICAgICAgICAgICAgaWYgKCFlbGVtZW50T2JqZWN0KSB7CiAgICAgICAgICAg
ICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0
OjpFcnJvckNvZGU6Ok5vU3VjaEVsZW1lbnQpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CkBA
IC0xMTQyLDExICsxMTk0LDExIEBAIHZvaWQgU2Vzc2lvbjo6aXNFbGVtZW50U2VsZWN0ZWQoY29u
c3QgU3RyaW5nJiBlbGVtZW50SUQsIEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSCiAgICAgICAgICAg
ICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKHJlc3VsdCkpOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9Ci0gICAgICAgIFJlZlB0cjxKU09OOjpBcnJheT4gYXJndW1lbnRzID0gSlNP
Tjo6QXJyYXk6OmNyZWF0ZSgpOworICAgICAgICBhdXRvIGFyZ3VtZW50cyA9IEpTT046OkFycmF5
OjpjcmVhdGUoKTsKICAgICAgICAgYXJndW1lbnRzLT5wdXNoU3RyaW5nKGNyZWF0ZUVsZW1lbnQo
ZWxlbWVudElEKS0+dG9KU09OU3RyaW5nKCkpOwogICAgICAgICBhcmd1bWVudHMtPnB1c2hTdHJp
bmcoSlNPTjo6VmFsdWU6OmNyZWF0ZSgic2VsZWN0ZWQiKS0+dG9KU09OU3RyaW5nKCkpOwogCi0g
ICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNy
ZWF0ZSgpOworICAgICAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgp
OwogICAgICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoImJyb3dzaW5nQ29udGV4dEhhbmRsZSJf
cywgbV90b3BsZXZlbEJyb3dzaW5nQ29udGV4dC52YWx1ZSgpKTsKICAgICAgICAgaWYgKG1fY3Vy
cmVudEJyb3dzaW5nQ29udGV4dCkKICAgICAgICAgICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygi
ZnJhbWVIYW5kbGUiX3MsIG1fY3VycmVudEJyb3dzaW5nQ29udGV4dC52YWx1ZSgpKTsKQEAgLTEx
NTcsMjUgKzEyMDksMzAgQEAgdm9pZCBTZXNzaW9uOjppc0VsZW1lbnRTZWxlY3RlZChjb25zdCBT
dHJpbmcmIGVsZW1lbnRJRCwgRnVuY3Rpb248dm9pZCAoQ29tbWFuZFIKICAgICAgICAgICAgICAg
ICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKFdURk1vdmUocmVzcG9uc2Uu
cmVzcG9uc2VPYmplY3QpKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAg
fQotICAgICAgICAgICAgU3RyaW5nIHZhbHVlU3RyaW5nOwotICAgICAgICAgICAgaWYgKCFyZXNw
b25zZS5yZXNwb25zZU9iamVjdC0+Z2V0U3RyaW5nKCJyZXN1bHQiX3MsIHZhbHVlU3RyaW5nKSkg
eworCisgICAgICAgICAgICBhdXRvIHZhbHVlU3RyaW5nID0gcmVzcG9uc2UucmVzcG9uc2VPYmpl
Y3QtPmdldFN0cmluZygicmVzdWx0Il9zKTsKKyAgICAgICAgICAgIGlmICghdmFsdWVTdHJpbmcp
IHsKICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWls
KENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVycm9yKSk7CiAgICAgICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgUmVmUHRyPEpTT046OlZhbHVl
PiByZXN1bHRWYWx1ZTsKLSAgICAgICAgICAgIGlmICghSlNPTjo6VmFsdWU6OnBhcnNlSlNPTih2
YWx1ZVN0cmluZywgcmVzdWx0VmFsdWUpKSB7CisKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0VmFs
dWUgPSBKU09OOjpWYWx1ZTo6cGFyc2VKU09OKHZhbHVlU3RyaW5nKTsKKyAgICAgICAgICAgIGlm
ICghcmVzdWx0VmFsdWUpIHsKICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21t
YW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVycm9yKSk7
CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBp
ZiAocmVzdWx0VmFsdWUtPmlzTnVsbCgpKSB7CiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhh
bmRsZXIoQ29tbWFuZFJlc3VsdDo6c3VjY2VzcyhKU09OOjpWYWx1ZTo6Y3JlYXRlKGZhbHNlKSkp
OwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFN0
cmluZyBib29sZWFuUmVzdWx0OwotICAgICAgICAgICAgaWYgKCFyZXN1bHRWYWx1ZS0+YXNTdHJp
bmcoYm9vbGVhblJlc3VsdCkgfHwgYm9vbGVhblJlc3VsdCAhPSAidHJ1ZSIpIHsKKworICAgICAg
ICAgICAgYXV0byBib29sZWFuUmVzdWx0ID0gcmVzdWx0VmFsdWUtPmFzU3RyaW5nKCk7CisgICAg
ICAgICAgICBpZiAoIWJvb2xlYW5SZXN1bHQgfHwgYm9vbGVhblJlc3VsdCAhPSAidHJ1ZSIpIHsK
ICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENv
bW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVycm9yKSk7CiAgICAgICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihD
b21tYW5kUmVzdWx0OjpzdWNjZXNzKEpTT046OlZhbHVlOjpjcmVhdGUodHJ1ZSkpKTsKICAgICAg
ICAgfSk7CiAgICAgfSk7CkBAIC0xMTkzLDEwICsxMjUwLDEwIEBAIHZvaWQgU2Vzc2lvbjo6Z2V0
RWxlbWVudFRleHQoY29uc3QgU3RyaW5nJiBlbGVtZW50SUQsIEZ1bmN0aW9uPHZvaWQgKENvbW1h
bmRSZXN1CiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKHJlc3VsdCkpOwog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIFJlZlB0cjxKU09OOjpBcnJh
eT4gYXJndW1lbnRzID0gSlNPTjo6QXJyYXk6OmNyZWF0ZSgpOworICAgICAgICBhdXRvIGFyZ3Vt
ZW50cyA9IEpTT046OkFycmF5OjpjcmVhdGUoKTsKICAgICAgICAgYXJndW1lbnRzLT5wdXNoU3Ry
aW5nKGNyZWF0ZUVsZW1lbnQoZWxlbWVudElEKS0+dG9KU09OU3RyaW5nKCkpOwogCi0gICAgICAg
IFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgp
OworICAgICAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAg
ICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoImJyb3dzaW5nQ29udGV4dEhhbmRsZSJfcywgbV90
b3BsZXZlbEJyb3dzaW5nQ29udGV4dC52YWx1ZSgpKTsKICAgICAgICAgaWYgKG1fY3VycmVudEJy
b3dzaW5nQ29udGV4dCkKICAgICAgICAgICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiZnJhbWVI
YW5kbGUiX3MsIG1fY3VycmVudEJyb3dzaW5nQ29udGV4dC52YWx1ZSgpKTsKQEAgLTEyMDgsMTYg
KzEyNjUsMTkgQEAgdm9pZCBTZXNzaW9uOjpnZXRFbGVtZW50VGV4dChjb25zdCBTdHJpbmcmIGVs
ZW1lbnRJRCwgRnVuY3Rpb248dm9pZCAoQ29tbWFuZFJlc3UKICAgICAgICAgICAgICAgICBjb21w
bGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKFdURk1vdmUocmVzcG9uc2UucmVzcG9u
c2VPYmplY3QpKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQotICAg
ICAgICAgICAgU3RyaW5nIHZhbHVlU3RyaW5nOwotICAgICAgICAgICAgaWYgKCFyZXNwb25zZS5y
ZXNwb25zZU9iamVjdC0+Z2V0U3RyaW5nKCJyZXN1bHQiX3MsIHZhbHVlU3RyaW5nKSkgeworCisg
ICAgICAgICAgICBhdXRvIHZhbHVlU3RyaW5nID0gcmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdl
dFN0cmluZygicmVzdWx0Il9zKTsKKyAgICAgICAgICAgIGlmICghdmFsdWVTdHJpbmcpIHsKICAg
ICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1h
bmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVycm9yKSk7CiAgICAgICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgUmVmUHRyPEpTT046OlZhbHVlPiByZXN1
bHRWYWx1ZTsKLSAgICAgICAgICAgIGlmICghSlNPTjo6VmFsdWU6OnBhcnNlSlNPTih2YWx1ZVN0
cmluZywgcmVzdWx0VmFsdWUpKSB7CisKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0VmFsdWUgPSBK
U09OOjpWYWx1ZTo6cGFyc2VKU09OKHZhbHVlU3RyaW5nKTsKKyAgICAgICAgICAgIGlmICghcmVz
dWx0VmFsdWUpIHsKICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVz
dWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVycm9yKSk7CiAgICAg
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBjb21wbGV0
aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpzdWNjZXNzKFdURk1vdmUocmVzdWx0VmFsdWUpKSk7
CiAgICAgICAgIH0pOwogICAgIH0pOwpAQCAtMTIzNSwxMCArMTI5NSwxMCBAQCB2b2lkIFNlc3Np
b246OmdldEVsZW1lbnRUYWdOYW1lKGNvbnN0IFN0cmluZyYgZWxlbWVudElELCBGdW5jdGlvbjx2
b2lkIChDb21tYW5kUgogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShyZXN1
bHQpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBSZWZQdHI8SlNP
Tjo6QXJyYXk+IGFyZ3VtZW50cyA9IEpTT046OkFycmF5OjpjcmVhdGUoKTsKKyAgICAgICAgYXV0
byBhcmd1bWVudHMgPSBKU09OOjpBcnJheTo6Y3JlYXRlKCk7CiAgICAgICAgIGFyZ3VtZW50cy0+
cHVzaFN0cmluZyhjcmVhdGVFbGVtZW50KGVsZW1lbnRJRCktPnRvSlNPTlN0cmluZygpKTsKIAot
ICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0Ojpj
cmVhdGUoKTsKKyAgICAgICAgYXV0byBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUo
KTsKICAgICAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJicm93c2luZ0NvbnRleHRIYW5kbGUi
X3MsIG1fdG9wbGV2ZWxCcm93c2luZ0NvbnRleHQudmFsdWUoKSk7CiAgICAgICAgIGlmIChtX2N1
cnJlbnRCcm93c2luZ0NvbnRleHQpCiAgICAgICAgICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmco
ImZyYW1lSGFuZGxlIl9zLCBtX2N1cnJlbnRCcm93c2luZ0NvbnRleHQudmFsdWUoKSk7CkBAIC0x
MjQ5LDE2ICsxMzA5LDE5IEBAIHZvaWQgU2Vzc2lvbjo6Z2V0RWxlbWVudFRhZ05hbWUoY29uc3Qg
U3RyaW5nJiBlbGVtZW50SUQsIEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSCiAgICAgICAgICAgICAg
ICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChXVEZNb3ZlKHJlc3BvbnNl
LnJlc3BvbnNlT2JqZWN0KSkpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIFN0cmluZyB2YWx1ZVN0cmluZzsKLSAgICAgICAgICAgIGlmICghcmVz
cG9uc2UucmVzcG9uc2VPYmplY3QtPmdldFN0cmluZygicmVzdWx0Il9zLCB2YWx1ZVN0cmluZykp
IHsKKworICAgICAgICAgICAgYXV0byB2YWx1ZVN0cmluZyA9IHJlc3BvbnNlLnJlc3BvbnNlT2Jq
ZWN0LT5nZXRTdHJpbmcoInJlc3VsdCJfcyk7CisgICAgICAgICAgICBpZiAoIXZhbHVlU3RyaW5n
KSB7CiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFp
bChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikpOwogICAgICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFJlZlB0cjxKU09OOjpWYWx1
ZT4gcmVzdWx0VmFsdWU7Ci0gICAgICAgICAgICBpZiAoIUpTT046OlZhbHVlOjpwYXJzZUpTT04o
dmFsdWVTdHJpbmcsIHJlc3VsdFZhbHVlKSkgeworCisgICAgICAgICAgICBhdXRvIHJlc3VsdFZh
bHVlID0gSlNPTjo6VmFsdWU6OnBhcnNlSlNPTih2YWx1ZVN0cmluZyk7CisgICAgICAgICAgICBp
ZiAoIXJlc3VsdFZhbHVlKSB7CiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29t
bWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikp
OwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KKwogICAgICAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6c3VjY2VzcyhXVEZNb3ZlKHJlc3VsdFZh
bHVlKSkpOwogICAgICAgICB9KTsKICAgICB9KTsKQEAgLTEyODEsNyArMTM0NCw3IEBAIHZvaWQg
U2Vzc2lvbjo6Z2V0RWxlbWVudFJlY3QoY29uc3QgU3RyaW5nJiBlbGVtZW50SUQsIEZ1bmN0aW9u
PHZvaWQgKENvbW1hbmRSZXN1CiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29t
bWFuZFJlc3VsdDo6ZmFpbChXVEZNb3ZlKGVycm9yKSkpOwogICAgICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHJlY3RP
YmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICAgICAgYXV0byByZWN0T2Jq
ZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICAgICAgIHJlY3RPYmplY3QtPnNl
dEludGVnZXIoIngiX3MsIHJlY3QudmFsdWUoKS5vcmlnaW4ueCk7CiAgICAgICAgICAgICByZWN0
T2JqZWN0LT5zZXRJbnRlZ2VyKCJ5Il9zLCByZWN0LnZhbHVlKCkub3JpZ2luLnkpOwogICAgICAg
ICAgICAgcmVjdE9iamVjdC0+c2V0SW50ZWdlcigid2lkdGgiX3MsIHJlY3QudmFsdWUoKS5zaXpl
LndpZHRoKTsKQEAgLTEzMDMsMTAgKzEzNjYsMTAgQEAgdm9pZCBTZXNzaW9uOjppc0VsZW1lbnRF
bmFibGVkKGNvbnN0IFN0cmluZyYgZWxlbWVudElELCBGdW5jdGlvbjx2b2lkIChDb21tYW5kUmUK
ICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUocmVzdWx0KSk7CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgUmVmUHRyPEpTT046OkFycmF5PiBhcmd1
bWVudHMgPSBKU09OOjpBcnJheTo6Y3JlYXRlKCk7CisgICAgICAgIGF1dG8gYXJndW1lbnRzID0g
SlNPTjo6QXJyYXk6OmNyZWF0ZSgpOwogICAgICAgICBhcmd1bWVudHMtPnB1c2hTdHJpbmcoY3Jl
YXRlRWxlbWVudChlbGVtZW50SUQpLT50b0pTT05TdHJpbmcoKSk7CiAKLSAgICAgICAgUmVmUHRy
PEpTT046Ok9iamVjdD4gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAg
ICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgIHBh
cmFtZXRlcnMtPnNldFN0cmluZygiYnJvd3NpbmdDb250ZXh0SGFuZGxlIl9zLCBtX3RvcGxldmVs
QnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwogICAgICAgICBpZiAobV9jdXJyZW50QnJvd3NpbmdD
b250ZXh0KQogICAgICAgICAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJmcmFtZUhhbmRsZSJf
cywgbV9jdXJyZW50QnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwpAQCAtMTMxNywxNiArMTM4MCwx
OSBAQCB2b2lkIFNlc3Npb246OmlzRWxlbWVudEVuYWJsZWQoY29uc3QgU3RyaW5nJiBlbGVtZW50
SUQsIEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSZQogICAgICAgICAgICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoV1RGTW92ZShyZXNwb25zZS5yZXNwb25zZU9iamVj
dCkpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBTdHJpbmcgdmFsdWVTdHJpbmc7Ci0gICAgICAgICAgICBpZiAoIXJlc3BvbnNlLnJlc3BvbnNl
T2JqZWN0LT5nZXRTdHJpbmcoInJlc3VsdCJfcywgdmFsdWVTdHJpbmcpKSB7CisKKyAgICAgICAg
ICAgIGF1dG8gdmFsdWVTdHJpbmcgPSByZXNwb25zZS5yZXNwb25zZU9iamVjdC0+Z2V0U3RyaW5n
KCJyZXN1bHQiX3MpOworICAgICAgICAgICAgaWYgKCF2YWx1ZVN0cmluZykgewogICAgICAgICAg
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3Vs
dDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHJlc3VsdFZhbHVl
OwotICAgICAgICAgICAgaWYgKCFKU09OOjpWYWx1ZTo6cGFyc2VKU09OKHZhbHVlU3RyaW5nLCBy
ZXN1bHRWYWx1ZSkpIHsKKworICAgICAgICAgICAgYXV0byByZXN1bHRWYWx1ZSA9IEpTT046OlZh
bHVlOjpwYXJzZUpTT04odmFsdWVTdHJpbmcpOworICAgICAgICAgICAgaWYgKCFyZXN1bHRWYWx1
ZSkgewogICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZh
aWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKICAgICAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgICAgICB9CisKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5k
bGVyKENvbW1hbmRSZXN1bHQ6OnN1Y2Nlc3MoV1RGTW92ZShyZXN1bHRWYWx1ZSkpKTsKICAgICAg
ICAgfSk7CiAgICAgfSk7CkBAIC0xMzQ0LDEwICsxNDEwLDEwIEBAIHZvaWQgU2Vzc2lvbjo6aXNF
bGVtZW50RGlzcGxheWVkKGNvbnN0IFN0cmluZyYgZWxlbWVudElELCBGdW5jdGlvbjx2b2lkIChD
b21tYW5kCiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKHJlc3VsdCkpOwog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIFJlZlB0cjxKU09OOjpBcnJh
eT4gYXJndW1lbnRzID0gSlNPTjo6QXJyYXk6OmNyZWF0ZSgpOworICAgICAgICBhdXRvIGFyZ3Vt
ZW50cyA9IEpTT046OkFycmF5OjpjcmVhdGUoKTsKICAgICAgICAgYXJndW1lbnRzLT5wdXNoU3Ry
aW5nKGNyZWF0ZUVsZW1lbnQoZWxlbWVudElEKS0+dG9KU09OU3RyaW5nKCkpOwogCi0gICAgICAg
IFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgp
OworICAgICAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAg
ICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoImJyb3dzaW5nQ29udGV4dEhhbmRsZSJfcywgbV90
b3BsZXZlbEJyb3dzaW5nQ29udGV4dC52YWx1ZSgpKTsKICAgICAgICAgaWYgKG1fY3VycmVudEJy
b3dzaW5nQ29udGV4dCkKICAgICAgICAgICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiZnJhbWVI
YW5kbGUiX3MsIG1fY3VycmVudEJyb3dzaW5nQ29udGV4dC52YWx1ZSgpKTsKQEAgLTEzNTgsMTYg
KzE0MjQsMTkgQEAgdm9pZCBTZXNzaW9uOjppc0VsZW1lbnREaXNwbGF5ZWQoY29uc3QgU3RyaW5n
JiBlbGVtZW50SUQsIEZ1bmN0aW9uPHZvaWQgKENvbW1hbmQKICAgICAgICAgICAgICAgICBjb21w
bGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKFdURk1vdmUocmVzcG9uc2UucmVzcG9u
c2VPYmplY3QpKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQotICAg
ICAgICAgICAgU3RyaW5nIHZhbHVlU3RyaW5nOwotICAgICAgICAgICAgaWYgKCFyZXNwb25zZS5y
ZXNwb25zZU9iamVjdC0+Z2V0U3RyaW5nKCJyZXN1bHQiX3MsIHZhbHVlU3RyaW5nKSkgeworCisg
ICAgICAgICAgICBhdXRvIHZhbHVlU3RyaW5nID0gcmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdl
dFN0cmluZygicmVzdWx0Il9zKTsKKyAgICAgICAgICAgIGlmICghdmFsdWVTdHJpbmcpIHsKICAg
ICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1h
bmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVycm9yKSk7CiAgICAgICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgUmVmUHRyPEpTT046OlZhbHVlPiByZXN1
bHRWYWx1ZTsKLSAgICAgICAgICAgIGlmICghSlNPTjo6VmFsdWU6OnBhcnNlSlNPTih2YWx1ZVN0
cmluZywgcmVzdWx0VmFsdWUpKSB7CisKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0VmFsdWUgPSBK
U09OOjpWYWx1ZTo6cGFyc2VKU09OKHZhbHVlU3RyaW5nKTsKKyAgICAgICAgICAgIGlmICghcmVz
dWx0VmFsdWUpIHsKICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVz
dWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVycm9yKSk7CiAgICAg
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBjb21wbGV0
aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpzdWNjZXNzKFdURk1vdmUocmVzdWx0VmFsdWUpKSk7
CiAgICAgICAgIH0pOwogICAgIH0pOwpAQCAtMTM4NSwxMSArMTQ1NCwxMSBAQCB2b2lkIFNlc3Np
b246OmdldEVsZW1lbnRBdHRyaWJ1dGUoY29uc3QgU3RyaW5nJiBlbGVtZW50SUQsIGNvbnN0IFN0
cmluZyYgYXR0cmlidQogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShyZXN1
bHQpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBSZWZQdHI8SlNP
Tjo6QXJyYXk+IGFyZ3VtZW50cyA9IEpTT046OkFycmF5OjpjcmVhdGUoKTsKKyAgICAgICAgYXV0
byBhcmd1bWVudHMgPSBKU09OOjpBcnJheTo6Y3JlYXRlKCk7CiAgICAgICAgIGFyZ3VtZW50cy0+
cHVzaFN0cmluZyhjcmVhdGVFbGVtZW50KGVsZW1lbnRJRCktPnRvSlNPTlN0cmluZygpKTsKICAg
ICAgICAgYXJndW1lbnRzLT5wdXNoU3RyaW5nKEpTT046OlZhbHVlOjpjcmVhdGUoYXR0cmlidXRl
KS0+dG9KU09OU3RyaW5nKCkpOwogCi0gICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFt
ZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBhdXRvIHBhcmFtZXRlcnMg
PSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmco
ImJyb3dzaW5nQ29udGV4dEhhbmRsZSJfcywgbV90b3BsZXZlbEJyb3dzaW5nQ29udGV4dC52YWx1
ZSgpKTsKICAgICAgICAgaWYgKG1fY3VycmVudEJyb3dzaW5nQ29udGV4dCkKICAgICAgICAgICAg
IHBhcmFtZXRlcnMtPnNldFN0cmluZygiZnJhbWVIYW5kbGUiX3MsIG1fY3VycmVudEJyb3dzaW5n
Q29udGV4dC52YWx1ZSgpKTsKQEAgLTE0MDAsMTYgKzE0NjksMTkgQEAgdm9pZCBTZXNzaW9uOjpn
ZXRFbGVtZW50QXR0cmlidXRlKGNvbnN0IFN0cmluZyYgZWxlbWVudElELCBjb25zdCBTdHJpbmcm
IGF0dHJpYnUKICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0
OjpmYWlsKFdURk1vdmUocmVzcG9uc2UucmVzcG9uc2VPYmplY3QpKSk7CiAgICAgICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgU3RyaW5nIHZhbHVlU3RyaW5n
OwotICAgICAgICAgICAgaWYgKCFyZXNwb25zZS5yZXNwb25zZU9iamVjdC0+Z2V0U3RyaW5nKCJy
ZXN1bHQiX3MsIHZhbHVlU3RyaW5nKSkgeworCisgICAgICAgICAgICBhdXRvIHZhbHVlU3RyaW5n
ID0gcmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdldFN0cmluZygicmVzdWx0Il9zKTsKKyAgICAg
ICAgICAgIGlmICghdmFsdWVTdHJpbmcpIHsKICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFu
ZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93
bkVycm9yKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQotICAgICAg
ICAgICAgUmVmUHRyPEpTT046OlZhbHVlPiByZXN1bHRWYWx1ZTsKLSAgICAgICAgICAgIGlmICgh
SlNPTjo6VmFsdWU6OnBhcnNlSlNPTih2YWx1ZVN0cmluZywgcmVzdWx0VmFsdWUpKSB7CisKKyAg
ICAgICAgICAgIGF1dG8gcmVzdWx0VmFsdWUgPSBKU09OOjpWYWx1ZTo6cGFyc2VKU09OKHZhbHVl
U3RyaW5nKTsKKyAgICAgICAgICAgIGlmICghcmVzdWx0VmFsdWUpIHsKICAgICAgICAgICAgICAg
ICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVy
cm9yQ29kZTo6VW5rbm93bkVycm9yKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICAgICAgfQorCiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0Ojpz
dWNjZXNzKFdURk1vdmUocmVzdWx0VmFsdWUpKSk7CiAgICAgICAgIH0pOwogICAgIH0pOwpAQCAt
MTQyNywxMCArMTQ5OSwxMCBAQCB2b2lkIFNlc3Npb246OmdldEVsZW1lbnRQcm9wZXJ0eShjb25z
dCBTdHJpbmcmIGVsZW1lbnRJRCwgY29uc3QgU3RyaW5nJiBwcm9wZXJ0eQogICAgICAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShyZXN1bHQpKTsKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQotICAgICAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IGFyZ3VtZW50cyA9IEpTT046
OkFycmF5OjpjcmVhdGUoKTsKKyAgICAgICAgYXV0byBhcmd1bWVudHMgPSBKU09OOjpBcnJheTo6
Y3JlYXRlKCk7CiAgICAgICAgIGFyZ3VtZW50cy0+cHVzaFN0cmluZyhjcmVhdGVFbGVtZW50KGVs
ZW1lbnRJRCktPnRvSlNPTlN0cmluZygpKTsKIAotICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0
PiBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgYXV0byBwYXJh
bWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICAgcGFyYW1ldGVycy0+c2V0
U3RyaW5nKCJicm93c2luZ0NvbnRleHRIYW5kbGUiX3MsIG1fdG9wbGV2ZWxCcm93c2luZ0NvbnRl
eHQudmFsdWUoKSk7CiAgICAgICAgIGlmIChtX2N1cnJlbnRCcm93c2luZ0NvbnRleHQpCiAgICAg
ICAgICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoImZyYW1lSGFuZGxlIl9zLCBtX2N1cnJlbnRC
cm93c2luZ0NvbnRleHQudmFsdWUoKSk7CkBAIC0xNDQxLDE2ICsxNTEzLDE5IEBAIHZvaWQgU2Vz
c2lvbjo6Z2V0RWxlbWVudFByb3BlcnR5KGNvbnN0IFN0cmluZyYgZWxlbWVudElELCBjb25zdCBT
dHJpbmcmIHByb3BlcnR5CiAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFu
ZFJlc3VsdDo6ZmFpbChXVEZNb3ZlKHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0KSkpOwogICAgICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFN0cmluZyB2YWx1
ZVN0cmluZzsKLSAgICAgICAgICAgIGlmICghcmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdldFN0
cmluZygicmVzdWx0Il9zLCB2YWx1ZVN0cmluZykpIHsKKworICAgICAgICAgICAgYXV0byB2YWx1
ZVN0cmluZyA9IHJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRTdHJpbmcoInJlc3VsdCJfcyk7
CisgICAgICAgICAgICBpZiAoIXZhbHVlU3RyaW5nKSB7CiAgICAgICAgICAgICAgICAgY29tcGxl
dGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6
OlVua25vd25FcnJvcikpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gcmVzdWx0VmFsdWU7Ci0gICAgICAgICAg
ICBpZiAoIUpTT046OlZhbHVlOjpwYXJzZUpTT04odmFsdWVTdHJpbmcsIHJlc3VsdFZhbHVlKSkg
eworCisgICAgICAgICAgICBhdXRvIHJlc3VsdFZhbHVlID0gSlNPTjo6VmFsdWU6OnBhcnNlSlNP
Tih2YWx1ZVN0cmluZyk7CisgICAgICAgICAgICBpZiAoIXJlc3VsdFZhbHVlKSB7CiAgICAgICAg
ICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVz
dWx0OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikpOwogICAgICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJl
c3VsdDo6c3VjY2VzcyhXVEZNb3ZlKHJlc3VsdFZhbHVlKSkpOwogICAgICAgICB9KTsKICAgICB9
KTsKQEAgLTE0NjgsMTAgKzE1NDMsMTAgQEAgdm9pZCBTZXNzaW9uOjpnZXRFbGVtZW50Q1NTVmFs
dWUoY29uc3QgU3RyaW5nJiBlbGVtZW50SUQsIGNvbnN0IFN0cmluZyYgY3NzUHJvcGUKICAgICAg
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUocmVzdWx0KSk7CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgUmVmUHRyPEpTT046OkFycmF5PiBhcmd1bWVudHMg
PSBKU09OOjpBcnJheTo6Y3JlYXRlKCk7CisgICAgICAgIGF1dG8gYXJndW1lbnRzID0gSlNPTjo6
QXJyYXk6OmNyZWF0ZSgpOwogICAgICAgICBhcmd1bWVudHMtPnB1c2hTdHJpbmcoY3JlYXRlRWxl
bWVudChlbGVtZW50SUQpLT50b0pTT05TdHJpbmcoKSk7CiAKLSAgICAgICAgUmVmUHRyPEpTT046
Ok9iamVjdD4gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIGF1
dG8gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgIHBhcmFtZXRl
cnMtPnNldFN0cmluZygiYnJvd3NpbmdDb250ZXh0SGFuZGxlIl9zLCBtX3RvcGxldmVsQnJvd3Np
bmdDb250ZXh0LnZhbHVlKCkpOwogICAgICAgICBpZiAobV9jdXJyZW50QnJvd3NpbmdDb250ZXh0
KQogICAgICAgICAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJmcmFtZUhhbmRsZSJfcywgbV9j
dXJyZW50QnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwpAQCAtMTQ4MiwxNiArMTU1NywxOSBAQCB2
b2lkIFNlc3Npb246OmdldEVsZW1lbnRDU1NWYWx1ZShjb25zdCBTdHJpbmcmIGVsZW1lbnRJRCwg
Y29uc3QgU3RyaW5nJiBjc3NQcm9wZQogICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVy
KENvbW1hbmRSZXN1bHQ6OmZhaWwoV1RGTW92ZShyZXNwb25zZS5yZXNwb25zZU9iamVjdCkpKTsK
ICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBTdHJp
bmcgdmFsdWVTdHJpbmc7Ci0gICAgICAgICAgICBpZiAoIXJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0
LT5nZXRTdHJpbmcoInJlc3VsdCJfcywgdmFsdWVTdHJpbmcpKSB7CisKKyAgICAgICAgICAgIGF1
dG8gdmFsdWVTdHJpbmcgPSByZXNwb25zZS5yZXNwb25zZU9iamVjdC0+Z2V0U3RyaW5nKCJyZXN1
bHQiX3MpOworICAgICAgICAgICAgaWYgKCF2YWx1ZVN0cmluZykgewogICAgICAgICAgICAgICAg
IGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJy
b3JDb2RlOjpVbmtub3duRXJyb3IpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHJlc3VsdFZhbHVlOwotICAg
ICAgICAgICAgaWYgKCFKU09OOjpWYWx1ZTo6cGFyc2VKU09OKHZhbHVlU3RyaW5nLCByZXN1bHRW
YWx1ZSkpIHsKKworICAgICAgICAgICAgYXV0byByZXN1bHRWYWx1ZSA9IEpTT046OlZhbHVlOjpw
YXJzZUpTT04odmFsdWVTdHJpbmcpOworICAgICAgICAgICAgaWYgKCFyZXN1bHRWYWx1ZSkgewog
ICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29t
bWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3IpKTsKICAgICAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgICAgICB9CisKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENv
bW1hbmRSZXN1bHQ6OnN1Y2Nlc3MoV1RGTW92ZShyZXN1bHRWYWx1ZSkpKTsKICAgICAgICAgfSk7
CiAgICAgfSk7CkBAIC0xNTA0LDcgKzE1ODIsNyBAQCB2b2lkIFNlc3Npb246OndhaXRGb3JOYXZp
Z2F0aW9uVG9Db21wbGV0ZShGdW5jdGlvbjx2b2lkIChDb21tYW5kUmVzdWx0JiYpPiYmIGNvbQog
ICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1l
dGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgYXV0byBwYXJhbWV0ZXJzID0gSlNP
Tjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoImJyb3dzaW5n
Q29udGV4dEhhbmRsZSJfcywgbV90b3BsZXZlbEJyb3dzaW5nQ29udGV4dC52YWx1ZSgpKTsKICAg
ICBpZiAobV9jdXJyZW50QnJvd3NpbmdDb250ZXh0KQogICAgICAgICBwYXJhbWV0ZXJzLT5zZXRT
dHJpbmcoImZyYW1lSGFuZGxlIl9zLCBtX2N1cnJlbnRCcm93c2luZ0NvbnRleHQudmFsdWUoKSk7
CkBAIC0xNTM0LDcgKzE2MTIsNyBAQCB2b2lkIFNlc3Npb246OndhaXRGb3JOYXZpZ2F0aW9uVG9D
b21wbGV0ZShGdW5jdGlvbjx2b2lkIChDb21tYW5kUmVzdWx0JiYpPiYmIGNvbQogCiB2b2lkIFNl
c3Npb246OmVsZW1lbnRJc0ZpbGVVcGxvYWQoY29uc3QgU3RyaW5nJiBlbGVtZW50SUQsIEZ1bmN0
aW9uPHZvaWQgKENvbW1hbmRSZXN1bHQmJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAg
UmVmUHRyPEpTT046OkFycmF5PiBhcmd1bWVudHMgPSBKU09OOjpBcnJheTo6Y3JlYXRlKCk7Cisg
ICAgYXV0byBhcmd1bWVudHMgPSBKU09OOjpBcnJheTo6Y3JlYXRlKCk7CiAgICAgYXJndW1lbnRz
LT5wdXNoU3RyaW5nKGNyZWF0ZUVsZW1lbnQoZWxlbWVudElEKS0+dG9KU09OU3RyaW5nKCkpOwog
CiAgICAgc3RhdGljIGNvbnN0IGNoYXIgaXNGaWxlVXBsb2FkU2NyaXB0W10gPQpAQCAtMTU0NCw3
ICsxNjIyLDcgQEAgdm9pZCBTZXNzaW9uOjplbGVtZW50SXNGaWxlVXBsb2FkKGNvbnN0IFN0cmlu
ZyYgZWxlbWVudElELCBGdW5jdGlvbjx2b2lkIChDb21tYW4KICAgICAgICAgIiAgICByZXR1cm4g
eyAnZmlsZVVwbG9hZCc6IGZhbHNlIH07IgogICAgICAgICAifSI7CiAKLSAgICBSZWZQdHI8SlNP
Tjo6T2JqZWN0PiBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBhdXRv
IHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgIHBhcmFtZXRlcnMtPnNl
dFN0cmluZygiYnJvd3NpbmdDb250ZXh0SGFuZGxlIl9zLCBtX3RvcGxldmVsQnJvd3NpbmdDb250
ZXh0LnZhbHVlKCkpOwogICAgIGlmIChtX2N1cnJlbnRCcm93c2luZ0NvbnRleHQpCiAgICAgICAg
IHBhcmFtZXRlcnMtPnNldFN0cmluZygiZnJhbWVIYW5kbGUiX3MsIG1fY3VycmVudEJyb3dzaW5n
Q29udGV4dC52YWx1ZSgpKTsKQEAgLTE1NTUsMzIgKzE2MzMsMzggQEAgdm9pZCBTZXNzaW9uOjpl
bGVtZW50SXNGaWxlVXBsb2FkKGNvbnN0IFN0cmluZyYgZWxlbWVudElELCBGdW5jdGlvbjx2b2lk
IChDb21tYW4KICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZh
aWwoV1RGTW92ZShyZXNwb25zZS5yZXNwb25zZU9iamVjdCkpKTsKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQotICAgICAgICBTdHJpbmcgdmFsdWVTdHJpbmc7Ci0gICAgICAgIGlmICgh
cmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdldFN0cmluZygicmVzdWx0Il9zLCB2YWx1ZVN0cmlu
ZykpIHsKKworICAgICAgICBhdXRvIHZhbHVlU3RyaW5nID0gcmVzcG9uc2UucmVzcG9uc2VPYmpl
Y3QtPmdldFN0cmluZygicmVzdWx0Il9zKTsKKyAgICAgICAgaWYgKCF2YWx1ZVN0cmluZykgewog
ICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5k
UmVzdWx0OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikpOwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9Ci0gICAgICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gcmVzdWx0VmFsdWU7Ci0gICAg
ICAgIGlmICghSlNPTjo6VmFsdWU6OnBhcnNlSlNPTih2YWx1ZVN0cmluZywgcmVzdWx0VmFsdWUp
KSB7CisKKyAgICAgICAgYXV0byByZXN1bHRWYWx1ZSA9IEpTT046OlZhbHVlOjpwYXJzZUpTT04o
dmFsdWVTdHJpbmcpOworICAgICAgICBpZiAoIXJlc3VsdFZhbHVlKSB7CiAgICAgICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9y
Q29kZTo6VW5rbm93bkVycm9yKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KKwog
ICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpzdWNjZXNzKFdURk1vdmUo
cmVzdWx0VmFsdWUpKSk7CiAgICAgfSk7CiB9CiAKIE9wdGlvbmFsPFNlc3Npb246OkZpbGVVcGxv
YWRUeXBlPiBTZXNzaW9uOjpwYXJzZUVsZW1lbnRJc0ZpbGVVcGxvYWRSZXN1bHQoY29uc3QgUmVm
UHRyPEpTT046OlZhbHVlPiYgcmVzdWx0VmFsdWUpCiB7Ci0gICAgUmVmUHRyPEpTT046Ok9iamVj
dD4gcmVzdWx0OwotICAgIGlmICghcmVzdWx0VmFsdWUtPmFzT2JqZWN0KHJlc3VsdCkpCisgICAg
aWYgKCFyZXN1bHRWYWx1ZSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIGJv
b2wgaXNGaWxlVXBsb2FkOwotICAgIGlmICghcmVzdWx0LT5nZXRCb29sZWFuKCJmaWxlVXBsb2Fk
Il9zLCBpc0ZpbGVVcGxvYWQpIHx8ICFpc0ZpbGVVcGxvYWQpCisgICAgYXV0byByZXN1bHQgPSBy
ZXN1bHRWYWx1ZS0+YXNPYmplY3QoKTsKKyAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKIAotICAgIGJvb2wgbXVsdGlwbGU7Ci0gICAgaWYgKCFyZXN1bHQtPmdl
dEJvb2xlYW4oIm11bHRpcGxlIl9zLCBtdWx0aXBsZSkgfHwgIW11bHRpcGxlKQorICAgIGF1dG8g
aXNGaWxlVXBsb2FkID0gcmVzdWx0LT5nZXRCb29sZWFuKCJmaWxlVXBsb2FkIl9zKTsKKyAgICBp
ZiAoIWlzRmlsZVVwbG9hZCB8fCAhKmlzRmlsZVVwbG9hZCkKKyAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKKworICAgIGF1dG8gbXVsdGlwbGUgPSByZXN1bHQtPmdldEJvb2xlYW4oIm11bHRp
cGxlIl9zKTsKKyAgICBpZiAoIW11bHRpcGxlIHx8ICEqbXVsdGlwbGUpCiAgICAgICAgIHJldHVy
biBGaWxlVXBsb2FkVHlwZTo6U2luZ2xlOwogCiAgICAgcmV0dXJuIEZpbGVVcGxvYWRUeXBlOjpN
dWx0aXBsZTsKQEAgLTE1ODgsNyArMTY3Miw3IEBAIE9wdGlvbmFsPFNlc3Npb246OkZpbGVVcGxv
YWRUeXBlPiBTZXNzaW9uOjpwYXJzZUVsZW1lbnRJc0ZpbGVVcGxvYWRSZXN1bHQoY29uc3QKIAog
dm9pZCBTZXNzaW9uOjpzZWxlY3RPcHRpb25FbGVtZW50KGNvbnN0IFN0cmluZyYgZWxlbWVudElE
LCBGdW5jdGlvbjx2b2lkIChDb21tYW5kUmVzdWx0JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQog
ewotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNy
ZWF0ZSgpOworICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAg
ICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJicm93c2luZ0NvbnRleHRIYW5kbGUiX3MsIG1fdG9w
bGV2ZWxCcm93c2luZ0NvbnRleHQudmFsdWUoKSk7CiAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5n
KCJmcmFtZUhhbmRsZSJfcywgbV9jdXJyZW50QnJvd3NpbmdDb250ZXh0LnZhbHVlT3IoZW1wdHlT
dHJpbmcoKSkpOwogICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygibm9kZUhhbmRsZSJfcywgZWxl
bWVudElEKTsKQEAgLTE2NDEsOCArMTcyNSw4IEBAIHZvaWQgU2Vzc2lvbjo6ZWxlbWVudENsaWNr
KGNvbnN0IFN0cmluZyYgZWxlbWVudElELCBGdW5jdGlvbjx2b2lkIChDb21tYW5kUmVzdWx0CiAg
ICAgICAgICAgICAgICAgZ2V0RWxlbWVudFRhZ05hbWUoZWxlbWVudElELCBbdGhpcywgZWxlbWVu
dElELCBpblZpZXdDZW50ZXIgPSBXVEZNb3ZlKGluVmlld0NlbnRlciksIGNvbXBsZXRpb25IYW5k
bGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKENvbW1hbmRSZXN1bHQmJiByZXN1bHQp
IG11dGFibGUgewogICAgICAgICAgICAgICAgICAgICBib29sIGlzT3B0aW9uRWxlbWVudCA9IGZh
bHNlOwogICAgICAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdC5pc0Vycm9yKCkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIFN0cmluZyB0YWdOYW1lOwotICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKHJlc3VsdC5yZXN1bHQoKS0+YXNTdHJpbmcodGFnTmFtZSkpCisgICAgICAgICAgICAg
ICAgICAgICAgICBhdXRvIHRhZ05hbWUgPSByZXN1bHQucmVzdWx0KCktPmFzU3RyaW5nKCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoISF0YWdOYW1lKQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlzT3B0aW9uRWxlbWVudCA9IHRhZ05hbWUgPT0gIm9wdGlvbiI7CiAgICAgICAg
ICAgICAgICAgICAgIH0KIApAQCAtMTY2Niw3ICsxNzUwLDcgQEAgdm9pZCBTZXNzaW9uOjplbGVt
ZW50Q2xpY2soY29uc3QgU3RyaW5nJiBlbGVtZW50SUQsIEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRS
ZXN1bHQKIAogdm9pZCBTZXNzaW9uOjplbGVtZW50SXNFZGl0YWJsZShjb25zdCBTdHJpbmcmIGVs
ZW1lbnRJRCwgRnVuY3Rpb248dm9pZCAoQ29tbWFuZFJlc3VsdCYmKT4mJiBjb21wbGV0aW9uSGFu
ZGxlcikKIHsKLSAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IGFyZ3VtZW50cyA9IEpTT046OkFycmF5
OjpjcmVhdGUoKTsKKyAgICBhdXRvIGFyZ3VtZW50cyA9IEpTT046OkFycmF5OjpjcmVhdGUoKTsK
ICAgICBhcmd1bWVudHMtPnB1c2hTdHJpbmcoY3JlYXRlRWxlbWVudChlbGVtZW50SUQpLT50b0pT
T05TdHJpbmcoKSk7CiAKICAgICBzdGF0aWMgY29uc3QgY2hhciBpc0VkaXRhYmxlU2NyaXB0W10g
PQpAQCAtMTY4Niw3ICsxNzcwLDcgQEAgdm9pZCBTZXNzaW9uOjplbGVtZW50SXNFZGl0YWJsZShj
b25zdCBTdHJpbmcmIGVsZW1lbnRJRCwgRnVuY3Rpb248dm9pZCAoQ29tbWFuZFIKICAgICAgICAg
IiAgICByZXR1cm4gZmFsc2U7IgogICAgICAgICAifSI7CiAKLSAgICBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBhdXRvIHBhcmFt
ZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgIHBhcmFtZXRlcnMtPnNldFN0cmlu
ZygiYnJvd3NpbmdDb250ZXh0SGFuZGxlIl9zLCBtX3RvcGxldmVsQnJvd3NpbmdDb250ZXh0LnZh
bHVlKCkpOwogICAgIGlmIChtX2N1cnJlbnRCcm93c2luZ0NvbnRleHQpCiAgICAgICAgIHBhcmFt
ZXRlcnMtPnNldFN0cmluZygiZnJhbWVIYW5kbGUiX3MsIG1fY3VycmVudEJyb3dzaW5nQ29udGV4
dC52YWx1ZSgpKTsKQEAgLTE2OTcsMTYgKzE3ODEsMTkgQEAgdm9pZCBTZXNzaW9uOjplbGVtZW50
SXNFZGl0YWJsZShjb25zdCBTdHJpbmcmIGVsZW1lbnRJRCwgRnVuY3Rpb248dm9pZCAoQ29tbWFu
ZFIKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoV1RG
TW92ZShyZXNwb25zZS5yZXNwb25zZU9iamVjdCkpKTsKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQotICAgICAgICBTdHJpbmcgdmFsdWVTdHJpbmc7Ci0gICAgICAgIGlmICghcmVzcG9u
c2UucmVzcG9uc2VPYmplY3QtPmdldFN0cmluZygicmVzdWx0Il9zLCB2YWx1ZVN0cmluZykpIHsK
KworICAgICAgICBhdXRvIHZhbHVlU3RyaW5nID0gcmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdl
dFN0cmluZygicmVzdWx0Il9zKTsKKyAgICAgICAgaWYgKCF2YWx1ZVN0cmluZykgewogICAgICAg
ICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0
OjpFcnJvckNvZGU6OlVua25vd25FcnJvcikpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9Ci0gICAgICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gcmVzdWx0VmFsdWU7Ci0gICAgICAgIGlm
ICghSlNPTjo6VmFsdWU6OnBhcnNlSlNPTih2YWx1ZVN0cmluZywgcmVzdWx0VmFsdWUpKSB7CisK
KyAgICAgICAgYXV0byByZXN1bHRWYWx1ZSA9IEpTT046OlZhbHVlOjpwYXJzZUpTT04odmFsdWVT
dHJpbmcpOworICAgICAgICBpZiAoIXJlc3VsdFZhbHVlKSB7CiAgICAgICAgICAgICBjb21wbGV0
aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6
VW5rbm93bkVycm9yKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KKwogICAgICAg
ICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpzdWNjZXNzKFdURk1vdmUocmVzdWx0
VmFsdWUpKSk7CiAgICAgfSk7CiB9CkBAIC0xNzMwLDggKzE4MTcsOCBAQCB2b2lkIFNlc3Npb246
OmVsZW1lbnRDbGVhcihjb25zdCBTdHJpbmcmIGVsZW1lbnRJRCwgRnVuY3Rpb248dm9pZCAoQ29t
bWFuZFJlc3VsdAogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KIAotICAg
ICAgICAgICAgYm9vbCBpc0VkaXRhYmxlOwotICAgICAgICAgICAgaWYgKCFyZXN1bHQucmVzdWx0
KCktPmFzQm9vbGVhbihpc0VkaXRhYmxlKSB8fCAhaXNFZGl0YWJsZSkgeworICAgICAgICAgICAg
YXV0byBpc0VkaXRhYmxlID0gcmVzdWx0LnJlc3VsdCgpLT5hc0Jvb2xlYW4oKTsKKyAgICAgICAg
ICAgIGlmICghaXNFZGl0YWJsZSB8fCAhKmlzRWRpdGFibGUpIHsKICAgICAgICAgICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9y
Q29kZTo6SW52YWxpZEVsZW1lbnRTdGF0ZSkpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgICAgIH0KQEAgLTE3NDYsMTAgKzE4MzMsMTAgQEAgdm9pZCBTZXNzaW9uOjplbGVtZW50
Q2xlYXIoY29uc3QgU3RyaW5nJiBlbGVtZW50SUQsIEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSZXN1
bHQKICAgICAgICAgICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6
ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OkVsZW1lbnROb3RJbnRlcmFjdGFibGUpKTsK
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IGFyZ3VtZW50cyA9IEpTT046OkFycmF5OjpjcmVh
dGUoKTsKKyAgICAgICAgICAgICAgICBhdXRvIGFyZ3VtZW50cyA9IEpTT046OkFycmF5OjpjcmVh
dGUoKTsKICAgICAgICAgICAgICAgICBhcmd1bWVudHMtPnB1c2hTdHJpbmcoY3JlYXRlRWxlbWVu
dChlbGVtZW50SUQpLT50b0pTT05TdHJpbmcoKSk7CiAKLSAgICAgICAgICAgICAgICBSZWZQdHI8
SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAg
ICAgICAgICAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAg
ICAgICAgICAgICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiYnJvd3NpbmdDb250ZXh0SGFuZGxl
Il9zLCBtX3RvcGxldmVsQnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwogICAgICAgICAgICAgICAg
IGlmIChtX2N1cnJlbnRCcm93c2luZ0NvbnRleHQpCiAgICAgICAgICAgICAgICAgICAgIHBhcmFt
ZXRlcnMtPnNldFN0cmluZygiZnJhbWVIYW5kbGUiX3MsIG1fY3VycmVudEJyb3dzaW5nQ29udGV4
dC52YWx1ZSgpKTsKQEAgLTE3ODAsNyArMTg2Nyw3IEBAIHZvaWQgU2Vzc2lvbjo6c2V0SW5wdXRG
aWxlVXBsb2FkRmlsZXMoY29uc3QgU3RyaW5nJiBlbGVtZW50SUQsIGNvbnN0IFN0cmluZyYgdGV4
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IGZpbGVu
YW1lcyA9IEpTT046OkFycmF5OjpjcmVhdGUoKTsKKyAgICBhdXRvIGZpbGVuYW1lcyA9IEpTT046
OkFycmF5OjpjcmVhdGUoKTsKICAgICBmb3IgKGNvbnN0IGF1dG8mIGZpbGUgOiBmaWxlcykgewog
ICAgICAgICBpZiAoIUZpbGVTeXN0ZW06OmZpbGVFeGlzdHMoZmlsZSkpIHsKICAgICAgICAgICAg
IGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJy
b3JDb2RlOjpJbnZhbGlkQXJndW1lbnQpKTsKQEAgLTE3ODksNyArMTg3Niw3IEBAIHZvaWQgU2Vz
c2lvbjo6c2V0SW5wdXRGaWxlVXBsb2FkRmlsZXMoY29uc3QgU3RyaW5nJiBlbGVtZW50SUQsIGNv
bnN0IFN0cmluZyYgdGV4CiAgICAgICAgIGZpbGVuYW1lcy0+cHVzaFN0cmluZyhmaWxlKTsKICAg
ICB9CiAKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0
OjpjcmVhdGUoKTsKKyAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgp
OwogICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiYnJvd3NpbmdDb250ZXh0SGFuZGxlIl9zLCBt
X3RvcGxldmVsQnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwogICAgIHBhcmFtZXRlcnMtPnNldFN0
cmluZygiZnJhbWVIYW5kbGUiX3MsIG1fY3VycmVudEJyb3dzaW5nQ29udGV4dC52YWx1ZU9yKGVt
cHR5U3RyaW5nKCkpKTsKICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoIm5vZGVIYW5kbGUiX3Ms
IGVsZW1lbnRJRCk7CkBAIC0xOTgwLDkgKzIwNjcsOSBAQCB2b2lkIFNlc3Npb246OmVsZW1lbnRT
ZW5kS2V5cyhjb25zdCBTdHJpbmcmIGVsZW1lbnRJRCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBGdW5j
dAogICAgICAgICAgICAgICAgICAgICAiICAgICAgICB0aHJvdyB7bmFtZTogJ0VsZW1lbnROb3RJ
bnRlcmFjdGFibGUnLCBtZXNzYWdlOiAnRWxlbWVudCBpcyBub3QgZm9jdXNhYmxlLid9OyIKICAg
ICAgICAgICAgICAgICAgICAgIn0iOwogCi0gICAgICAgICAgICAgICAgUmVmUHRyPEpTT046OkFy
cmF5PiBhcmd1bWVudHMgPSBKU09OOjpBcnJheTo6Y3JlYXRlKCk7CisgICAgICAgICAgICAgICAg
YXV0byBhcmd1bWVudHMgPSBKU09OOjpBcnJheTo6Y3JlYXRlKCk7CiAgICAgICAgICAgICAgICAg
YXJndW1lbnRzLT5wdXNoU3RyaW5nKGNyZWF0ZUVsZW1lbnQoZWxlbWVudElEKS0+dG9KU09OU3Ry
aW5nKCkpOwotICAgICAgICAgICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnMg
PSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICAgICAgICAgIGF1dG8gcGFyYW1ldGVy
cyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgICAgICAgICAgcGFyYW1ldGVycy0+
c2V0U3RyaW5nKCJicm93c2luZ0NvbnRleHRIYW5kbGUiX3MsIG1fdG9wbGV2ZWxCcm93c2luZ0Nv
bnRleHQudmFsdWUoKSk7CiAgICAgICAgICAgICAgICAgaWYgKG1fY3VycmVudEJyb3dzaW5nQ29u
dGV4dCkKICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJmcmFtZUhh
bmRsZSJfcywgbV9jdXJyZW50QnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwpAQCAtMjA1Niw3ICsy
MTQzLDcgQEAgdm9pZCBTZXNzaW9uOjpnZXRQYWdlU291cmNlKEZ1bmN0aW9uPHZvaWQgKENvbW1h
bmRSZXN1bHQmJik+JiYgY29tcGxldGlvbkhhbmRsZXIKICAgICAgICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKFdURk1vdmUocmVzdWx0KSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
LSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6
Y3JlYXRlKCk7CisgICAgICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRl
KCk7CiAgICAgICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiYnJvd3NpbmdDb250ZXh0SGFuZGxl
Il9zLCBtX3RvcGxldmVsQnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwogICAgICAgICBwYXJhbWV0
ZXJzLT5zZXRTdHJpbmcoImZ1bmN0aW9uIl9zLCAiZnVuY3Rpb24oKSB7IHJldHVybiBkb2N1bWVu
dC5kb2N1bWVudEVsZW1lbnQub3V0ZXJIVE1MOyB9Il9zKTsKICAgICAgICAgcGFyYW1ldGVycy0+
c2V0QXJyYXkoImFyZ3VtZW50cyJfcywgSlNPTjo6QXJyYXk6OmNyZWF0ZSgpKTsKQEAgLTIwNjUs
MzggKzIxNTIsMzkgQEAgdm9pZCBTZXNzaW9uOjpnZXRQYWdlU291cmNlKEZ1bmN0aW9uPHZvaWQg
KENvbW1hbmRSZXN1bHQmJik+JiYgY29tcGxldGlvbkhhbmRsZXIKICAgICAgICAgICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKFdURk1vdmUocmVzcG9uc2UucmVz
cG9uc2VPYmplY3QpKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQot
ICAgICAgICAgICAgU3RyaW5nIHZhbHVlU3RyaW5nOwotICAgICAgICAgICAgaWYgKCFyZXNwb25z
ZS5yZXNwb25zZU9iamVjdC0+Z2V0U3RyaW5nKCJyZXN1bHQiX3MsIHZhbHVlU3RyaW5nKSkgewor
CisgICAgICAgICAgICBhdXRvIHZhbHVlU3RyaW5nID0gcmVzcG9uc2UucmVzcG9uc2VPYmplY3Qt
PmdldFN0cmluZygicmVzdWx0Il9zKTsKKyAgICAgICAgICAgIGlmICghdmFsdWVTdHJpbmcpIHsK
ICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENv
bW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVycm9yKSk7CiAgICAgICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgUmVmUHRyPEpTT046OlZhbHVlPiBy
ZXN1bHRWYWx1ZTsKLSAgICAgICAgICAgIGlmICghSlNPTjo6VmFsdWU6OnBhcnNlSlNPTih2YWx1
ZVN0cmluZywgcmVzdWx0VmFsdWUpKSB7CisKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0VmFsdWUg
PSBKU09OOjpWYWx1ZTo6cGFyc2VKU09OKHZhbHVlU3RyaW5nKTsKKyAgICAgICAgICAgIGlmICgh
cmVzdWx0VmFsdWUpIHsKICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5k
UmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVycm9yKSk7CiAg
ICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBjb21w
bGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpzdWNjZXNzKFdURk1vdmUocmVzdWx0VmFsdWUp
KSk7CiAgICAgICAgIH0pOwogICAgIH0pOwogfQogCi1SZWZQdHI8SlNPTjo6VmFsdWU+IFNlc3Np
b246OmhhbmRsZVNjcmlwdFJlc3VsdChSZWZQdHI8SlNPTjo6VmFsdWU+JiYgcmVzdWx0VmFsdWUp
CitSZWY8SlNPTjo6VmFsdWU+IFNlc3Npb246OmhhbmRsZVNjcmlwdFJlc3VsdChSZWY8SlNPTjo6
VmFsdWU+JiYgcmVzdWx0VmFsdWUpCiB7Ci0gICAgUmVmUHRyPEpTT046OkFycmF5PiByZXN1bHRB
cnJheTsKLSAgICBpZiAocmVzdWx0VmFsdWUtPmFzQXJyYXkocmVzdWx0QXJyYXkpKSB7Ci0gICAg
ICAgIFJlZlB0cjxKU09OOjpBcnJheT4gcmV0dXJuVmFsdWVBcnJheSA9IEpTT046OkFycmF5Ojpj
cmVhdGUoKTsKKyAgICBpZiAoYXV0byByZXN1bHRBcnJheSA9IHJlc3VsdFZhbHVlLT5hc0FycmF5
KCkpIHsKKyAgICAgICAgYXV0byByZXR1cm5WYWx1ZUFycmF5ID0gSlNPTjo6QXJyYXk6OmNyZWF0
ZSgpOwogICAgICAgICB1bnNpZ25lZCByZXN1bHRBcnJheUxlbmd0aCA9IHJlc3VsdEFycmF5LT5s
ZW5ndGgoKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlc3VsdEFycmF5TGVu
Z3RoOyArK2kpCiAgICAgICAgICAgICByZXR1cm5WYWx1ZUFycmF5LT5wdXNoVmFsdWUoaGFuZGxl
U2NyaXB0UmVzdWx0KHJlc3VsdEFycmF5LT5nZXQoaSkpKTsKICAgICAgICAgcmV0dXJuIHJldHVy
blZhbHVlQXJyYXk7CiAgICAgfQogCi0gICAgaWYgKGF1dG8gZWxlbWVudCA9IGNyZWF0ZUVsZW1l
bnQoUmVmUHRyPEpTT046OlZhbHVlPihyZXN1bHRWYWx1ZSkpKQotICAgICAgICByZXR1cm4gZWxl
bWVudDsKKyAgICBpZiAoYXV0byBlbGVtZW50ID0gY3JlYXRlRWxlbWVudChyZXN1bHRWYWx1ZS5j
b3B5UmVmKCkpKQorICAgICAgICByZXR1cm4gZWxlbWVudC5yZWxlYXNlTm9uTnVsbCgpOwogCi0g
ICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcmVzdWx0T2JqZWN0OwotICAgIGlmIChyZXN1bHRWYWx1
ZS0+YXNPYmplY3QocmVzdWx0T2JqZWN0KSkgewotICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0
PiByZXR1cm5WYWx1ZU9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgaWYgKGF1
dG8gcmVzdWx0T2JqZWN0ID0gcmVzdWx0VmFsdWUtPmFzT2JqZWN0KCkpIHsKKyAgICAgICAgYXV0
byByZXR1cm5WYWx1ZU9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgIGF1
dG8gZW5kID0gcmVzdWx0T2JqZWN0LT5lbmQoKTsKICAgICAgICAgZm9yIChhdXRvIGl0ID0gcmVz
dWx0T2JqZWN0LT5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCiAgICAgICAgICAgICByZXR1cm5W
YWx1ZU9iamVjdC0+c2V0VmFsdWUoaXQtPmtleSwgaGFuZGxlU2NyaXB0UmVzdWx0KFdURk1vdmUo
aXQtPnZhbHVlKSkpOwpAQCAtMjExOCwxOCArMjIwNiwxNyBAQCB2b2lkIFNlc3Npb246OmV4ZWN1
dGVTY3JpcHQoY29uc3QgU3RyaW5nJiBzY3JpcHQsIFJlZlB0cjxKU09OOjpBcnJheT4mJiBhcmd1
bWVudAogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShyZXN1bHQpKTsKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBSZWZQdHI8SlNPTjo6QXJyYXk+
IGFyZ3VtZW50cyA9IEpTT046OkFycmF5OjpjcmVhdGUoKTsKKyAgICAgICAgYXV0byBhcmd1bWVu
dHMgPSBKU09OOjpBcnJheTo6Y3JlYXRlKCk7CiAgICAgICAgIHVuc2lnbmVkIGFyZ3VtZW50c0xl
bmd0aCA9IGFyZ3VtZW50c0FycmF5LT5sZW5ndGgoKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGFyZ3VtZW50c0xlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoYXV0byBh
cmd1bWVudCA9IGFyZ3VtZW50c0FycmF5LT5nZXQoaSkpIHsKLSAgICAgICAgICAgICAgICBpZiAo
YXV0byBlbGVtZW50ID0gZXh0cmFjdEVsZW1lbnQoKmFyZ3VtZW50KSkKLSAgICAgICAgICAgICAg
ICAgICAgYXJndW1lbnRzLT5wdXNoU3RyaW5nKGVsZW1lbnQtPnRvSlNPTlN0cmluZygpKTsKLSAg
ICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50cy0+cHVzaFN0
cmluZyhhcmd1bWVudC0+dG9KU09OU3RyaW5nKCkpOwotICAgICAgICAgICAgfQorICAgICAgICAg
ICAgYXV0byBhcmd1bWVudCA9IGFyZ3VtZW50c0FycmF5LT5nZXQoaSk7CisgICAgICAgICAgICBp
ZiAoYXV0byBlbGVtZW50ID0gZXh0cmFjdEVsZW1lbnQoYXJndW1lbnQpKQorICAgICAgICAgICAg
ICAgIGFyZ3VtZW50cy0+cHVzaFN0cmluZyhlbGVtZW50LT50b0pTT05TdHJpbmcoKSk7CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYXJndW1lbnRzLT5wdXNoU3RyaW5nKGFyZ3Vt
ZW50LT50b0pTT05TdHJpbmcoKSk7CiAgICAgICAgIH0KIAotICAgICAgICBSZWZQdHI8SlNPTjo6
T2JqZWN0PiBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgYXV0
byBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICAgcGFyYW1ldGVy
cy0+c2V0U3RyaW5nKCJicm93c2luZ0NvbnRleHRIYW5kbGUiX3MsIG1fdG9wbGV2ZWxCcm93c2lu
Z0NvbnRleHQudmFsdWUoKSk7CiAgICAgICAgIGlmIChtX2N1cnJlbnRCcm93c2luZ0NvbnRleHQp
CiAgICAgICAgICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoImZyYW1lSGFuZGxlIl9zLCBtX2N1
cnJlbnRCcm93c2luZ0NvbnRleHQudmFsdWUoKSk7CkBAIC0yMTQ4LDE3ICsyMjM1LDIwIEBAIHZv
aWQgU2Vzc2lvbjo6ZXhlY3V0ZVNjcmlwdChjb25zdCBTdHJpbmcmIHNjcmlwdCwgUmVmUHRyPEpT
T046OkFycmF5PiYmIGFyZ3VtZW50CiAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5k
bGVyKFdURk1vdmUocmVzdWx0KSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAg
ICAgfQotICAgICAgICAgICAgU3RyaW5nIHZhbHVlU3RyaW5nOwotICAgICAgICAgICAgaWYgKCFy
ZXNwb25zZS5yZXNwb25zZU9iamVjdC0+Z2V0U3RyaW5nKCJyZXN1bHQiX3MsIHZhbHVlU3RyaW5n
KSkgeworCisgICAgICAgICAgICBhdXRvIHZhbHVlU3RyaW5nID0gcmVzcG9uc2UucmVzcG9uc2VP
YmplY3QtPmdldFN0cmluZygicmVzdWx0Il9zKTsKKyAgICAgICAgICAgIGlmICghdmFsdWVTdHJp
bmcpIHsKICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0Ojpm
YWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVycm9yKSk7CiAgICAgICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgUmVmUHRyPEpTT046OlZh
bHVlPiByZXN1bHRWYWx1ZTsKLSAgICAgICAgICAgIGlmICghSlNPTjo6VmFsdWU6OnBhcnNlSlNP
Tih2YWx1ZVN0cmluZywgcmVzdWx0VmFsdWUpKSB7CisKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0
VmFsdWUgPSBKU09OOjpWYWx1ZTo6cGFyc2VKU09OKHZhbHVlU3RyaW5nKTsKKyAgICAgICAgICAg
IGlmICghcmVzdWx0VmFsdWUpIHsKICAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihD
b21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6VW5rbm93bkVycm9y
KSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQotICAgICAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6c3VjY2VzcyhoYW5kbGVTY3JpcHRSZXN1
bHQoV1RGTW92ZShyZXN1bHRWYWx1ZSkpKSk7CisKKyAgICAgICAgICAgIGNvbXBsZXRpb25IYW5k
bGVyKENvbW1hbmRSZXN1bHQ6OnN1Y2Nlc3MoaGFuZGxlU2NyaXB0UmVzdWx0KHJlc3VsdFZhbHVl
LnJlbGVhc2VOb25OdWxsKCkpKSk7CiAgICAgICAgIH0pOwogICAgIH0pOwogfQpAQCAtMjE4MSw5
ICsyMjcxLDkgQEAgc3RhdGljIFN0cmluZyBtb3VzZUJ1dHRvbkZvckF1dG9tYXRpb24oTW91c2VC
dXR0b24gYnV0dG9uKQogCiB2b2lkIFNlc3Npb246OnBlcmZvcm1Nb3VzZUludGVyYWN0aW9uKGlu
dCB4LCBpbnQgeSwgTW91c2VCdXR0b24gYnV0dG9uLCBNb3VzZUludGVyYWN0aW9uIGludGVyYWN0
aW9uLCBGdW5jdGlvbjx2b2lkIChDb21tYW5kUmVzdWx0JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KQogewotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6
OmNyZWF0ZSgpOworICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7
CiAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJoYW5kbGUiX3MsIG1fdG9wbGV2ZWxCcm93c2lu
Z0NvbnRleHQudmFsdWUoKSk7Ci0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcG9zaXRpb24gPSBK
U09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGF1dG8gcG9zaXRpb24gPSBKU09OOjpPYmplY3Q6
OmNyZWF0ZSgpOwogICAgIHBvc2l0aW9uLT5zZXRJbnRlZ2VyKCJ4Il9zLCB4KTsKICAgICBwb3Np
dGlvbi0+c2V0SW50ZWdlcigieSJfcywgeSk7CiAgICAgcGFyYW1ldGVycy0+c2V0T2JqZWN0KCJw
b3NpdGlvbiJfcywgV1RGTW92ZShwb3NpdGlvbikpOwpAQCAtMjIxNywxMSArMjMwNywxMSBAQCB2
b2lkIFNlc3Npb246OnBlcmZvcm1Nb3VzZUludGVyYWN0aW9uKGludCB4LCBpbnQgeSwgTW91c2VC
dXR0b24gYnV0dG9uLCBNb3VzZUludAogCiB2b2lkIFNlc3Npb246OnBlcmZvcm1LZXlib2FyZElu
dGVyYWN0aW9ucyhWZWN0b3I8S2V5Ym9hcmRJbnRlcmFjdGlvbj4mJiBpbnRlcmFjdGlvbnMsIEZ1
bmN0aW9uPHZvaWQgKENvbW1hbmRSZXN1bHQmJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0g
ICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRl
KCk7CisgICAgYXV0byBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICBw
YXJhbWV0ZXJzLT5zZXRTdHJpbmcoImhhbmRsZSJfcywgbV90b3BsZXZlbEJyb3dzaW5nQ29udGV4
dC52YWx1ZSgpKTsKLSAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IGludGVyYWN0aW9uc0FycmF5ID0g
SlNPTjo6QXJyYXk6OmNyZWF0ZSgpOworICAgIGF1dG8gaW50ZXJhY3Rpb25zQXJyYXkgPSBKU09O
OjpBcnJheTo6Y3JlYXRlKCk7CiAgICAgZm9yIChjb25zdCBhdXRvJiBpbnRlcmFjdGlvbiA6IGlu
dGVyYWN0aW9ucykgewotICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBpbnRlcmFjdGlvbk9i
amVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIGF1dG8gaW50ZXJhY3Rpb25P
YmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICBzd2l0Y2ggKGludGVyYWN0
aW9uLnR5cGUpIHsKICAgICAgICAgY2FzZSBLZXlib2FyZEludGVyYWN0aW9uVHlwZTo6S2V5UHJl
c3M6CiAgICAgICAgICAgICBpbnRlcmFjdGlvbk9iamVjdC0+c2V0U3RyaW5nKCJ0eXBlIl9zLCAi
S2V5UHJlc3MiX3MpOwpAQCAtMjI1MiwzNyArMjM0Miw0MyBAQCB2b2lkIFNlc3Npb246OnBlcmZv
cm1LZXlib2FyZEludGVyYWN0aW9ucyhWZWN0b3I8S2V5Ym9hcmRJbnRlcmFjdGlvbj4mJiBpbnRl
cmFjdAogc3RhdGljIE9wdGlvbmFsPFNlc3Npb246OkNvb2tpZT4gcGFyc2VBdXRvbWF0aW9uQ29v
a2llKGNvbnN0IEpTT046Ok9iamVjdCYgY29va2llT2JqZWN0KQogewogICAgIFNlc3Npb246OkNv
b2tpZSBjb29raWU7Ci0gICAgaWYgKCFjb29raWVPYmplY3QuZ2V0U3RyaW5nKCJuYW1lIl9zLCBj
b29raWUubmFtZSkpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgaWYgKCFjb29r
aWVPYmplY3QuZ2V0U3RyaW5nKCJ2YWx1ZSJfcywgY29va2llLnZhbHVlKSkKKworICAgIGNvb2tp
ZS5uYW1lID0gY29va2llT2JqZWN0LmdldFN0cmluZygibmFtZSJfcyk7CisgICAgaWYgKCFjb29r
aWUubmFtZSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIFN0cmluZyBwYXRo
OwotICAgIGlmIChjb29raWVPYmplY3QuZ2V0U3RyaW5nKCJwYXRoIl9zLCBwYXRoKSkKKyAgICBj
b29raWUudmFsdWUgPSBjb29raWVPYmplY3QuZ2V0U3RyaW5nKCJ2YWx1ZSJfcyk7CisgICAgaWYg
KCFjb29raWUudmFsdWUpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBhdXRv
IHBhdGggPSBjb29raWVPYmplY3QuZ2V0U3RyaW5nKCJwYXRoIl9zKTsKKyAgICBpZiAoISFwYXRo
KQogICAgICAgICBjb29raWUucGF0aCA9IHBhdGg7Ci0gICAgU3RyaW5nIGRvbWFpbjsKLSAgICBp
ZiAoY29va2llT2JqZWN0LmdldFN0cmluZygiZG9tYWluIl9zLCBkb21haW4pKQorCisgICAgYXV0
byBkb21haW4gPSBjb29raWVPYmplY3QuZ2V0U3RyaW5nKCJkb21haW4iX3MpOworICAgIGlmICgh
IWRvbWFpbikKICAgICAgICAgY29va2llLmRvbWFpbiA9IGRvbWFpbjsKLSAgICBib29sIHNlY3Vy
ZTsKLSAgICBpZiAoY29va2llT2JqZWN0LmdldEJvb2xlYW4oInNlY3VyZSJfcywgc2VjdXJlKSkK
LSAgICAgICAgY29va2llLnNlY3VyZSA9IHNlY3VyZTsKLSAgICBib29sIGh0dHBPbmx5OwotICAg
IGlmIChjb29raWVPYmplY3QuZ2V0Qm9vbGVhbigiaHR0cE9ubHkiX3MsIGh0dHBPbmx5KSkKLSAg
ICAgICAgY29va2llLmh0dHBPbmx5ID0gaHR0cE9ubHk7Ci0gICAgYm9vbCBzZXNzaW9uID0gZmFs
c2U7Ci0gICAgY29va2llT2JqZWN0LmdldEJvb2xlYW4oInNlc3Npb24iX3MsIHNlc3Npb24pOwor
CisgICAgYXV0byBzZWN1cmUgPSBjb29raWVPYmplY3QuZ2V0Qm9vbGVhbigic2VjdXJlIl9zKTsK
KyAgICBpZiAoc2VjdXJlKQorICAgICAgICBjb29raWUuc2VjdXJlID0gKnNlY3VyZTsKKworICAg
IGF1dG8gaHR0cE9ubHkgPSBjb29raWVPYmplY3QuZ2V0Qm9vbGVhbigiaHR0cE9ubHkiX3MpOwor
ICAgIGlmIChodHRwT25seSkKKyAgICAgICAgY29va2llLmh0dHBPbmx5ID0gKmh0dHBPbmx5Owor
CisgICAgYXV0byBzZXNzaW9uID0gY29va2llT2JqZWN0LmdldEJvb2xlYW4oInNlc3Npb24iX3Mp
OwogICAgIGlmICghc2Vzc2lvbikgewotICAgICAgICBkb3VibGUgZXhwaXJ5OwotICAgICAgICBp
ZiAoY29va2llT2JqZWN0LmdldERvdWJsZSgiZXhwaXJlcyJfcywgZXhwaXJ5KSkKLSAgICAgICAg
ICAgIGNvb2tpZS5leHBpcnkgPSBleHBpcnk7CisgICAgICAgIGlmIChhdXRvIGV4cGlyeSA9IGNv
b2tpZU9iamVjdC5nZXREb3VibGUoImV4cGlyZXMiX3MpKQorICAgICAgICAgICAgY29va2llLmV4
cGlyeSA9ICpleHBpcnk7CiAgICAgfQogCiAgICAgcmV0dXJuIGNvb2tpZTsKIH0KIAotc3RhdGlj
IFJlZlB0cjxKU09OOjpPYmplY3Q+IGJ1aWx0QXV0b21hdGlvbkNvb2tpZShjb25zdCBTZXNzaW9u
OjpDb29raWUmIGNvb2tpZSkKK3N0YXRpYyBSZWY8SlNPTjo6T2JqZWN0PiBidWlsdEF1dG9tYXRp
b25Db29raWUoY29uc3QgU2Vzc2lvbjo6Q29va2llJiBjb29raWUpCiB7Ci0gICAgUmVmUHRyPEpT
T046Ok9iamVjdD4gY29va2llT2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBh
dXRvIGNvb2tpZU9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgY29va2llT2Jq
ZWN0LT5zZXRTdHJpbmcoIm5hbWUiX3MsIGNvb2tpZS5uYW1lKTsKICAgICBjb29raWVPYmplY3Qt
PnNldFN0cmluZygidmFsdWUiX3MsIGNvb2tpZS52YWx1ZSk7CiAgICAgY29va2llT2JqZWN0LT5z
ZXRTdHJpbmcoInBhdGgiX3MsIGNvb2tpZS5wYXRoLnZhbHVlT3IoIi8iKSk7CkBAIC0yMjk0LDkg
KzIzOTAsOSBAQCBzdGF0aWMgUmVmUHRyPEpTT046Ok9iamVjdD4gYnVpbHRBdXRvbWF0aW9uQ29v
a2llKGNvbnN0IFNlc3Npb246OkNvb2tpZSYgY29va2llKQogICAgIHJldHVybiBjb29raWVPYmpl
Y3Q7CiB9CiAKLXN0YXRpYyBSZWZQdHI8SlNPTjo6T2JqZWN0PiBzZXJpYWxpemVDb29raWUoY29u
c3QgU2Vzc2lvbjo6Q29va2llJiBjb29raWUpCitzdGF0aWMgUmVmPEpTT046Ok9iamVjdD4gc2Vy
aWFsaXplQ29va2llKGNvbnN0IFNlc3Npb246OkNvb2tpZSYgY29va2llKQogewotICAgIFJlZlB0
cjxKU09OOjpPYmplY3Q+IGNvb2tpZU9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7Cisg
ICAgYXV0byBjb29raWVPYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgIGNvb2tp
ZU9iamVjdC0+c2V0U3RyaW5nKCJuYW1lIl9zLCBjb29raWUubmFtZSk7CiAgICAgY29va2llT2Jq
ZWN0LT5zZXRTdHJpbmcoInZhbHVlIl9zLCBjb29raWUudmFsdWUpOwogICAgIGlmIChjb29raWUu
cGF0aCkKQEAgLTIzMjUsMjMgKzI0MjEsMjQgQEAgdm9pZCBTZXNzaW9uOjpnZXRBbGxDb29raWVz
KEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSZXN1bHQmJik+JiYgY29tcGxldGlvbkhhbmRsZXIKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIFJlZlB0cjxKU09OOjpPYmpl
Y3Q+IHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBhdXRvIHBh
cmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICBwYXJhbWV0ZXJzLT5z
ZXRTdHJpbmcoImJyb3dzaW5nQ29udGV4dEhhbmRsZSJfcywgbV90b3BsZXZlbEJyb3dzaW5nQ29u
dGV4dC52YWx1ZSgpKTsKICAgICAgICAgbV9ob3N0LT5zZW5kQ29tbWFuZFRvQmFja2VuZCgiZ2V0
QWxsQ29va2llcyJfcywgV1RGTW92ZShwYXJhbWV0ZXJzKSwgW3Byb3RlY3RlZFRoaXMsIGNvbXBs
ZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKFNlc3Npb25Ib3N0OjpD
b21tYW5kUmVzcG9uc2UmJiByZXNwb25zZSkgbXV0YWJsZSB7CiAgICAgICAgICAgICBpZiAocmVz
cG9uc2UuaXNFcnJvciB8fCAhcmVzcG9uc2UucmVzcG9uc2VPYmplY3QpIHsKICAgICAgICAgICAg
ICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKFdURk1vdmUocmVzcG9u
c2UucmVzcG9uc2VPYmplY3QpKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAg
ICAgfQotICAgICAgICAgICAgUmVmUHRyPEpTT046OkFycmF5PiBjb29raWVzQXJyYXk7Ci0gICAg
ICAgICAgICBpZiAoIXJlc3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRBcnJheSgiY29va2llcyJf
cywgY29va2llc0FycmF5KSkgeworCisgICAgICAgICAgICBhdXRvIGNvb2tpZXNBcnJheSA9IHJl
c3BvbnNlLnJlc3BvbnNlT2JqZWN0LT5nZXRBcnJheSgiY29va2llcyJfcyk7CisgICAgICAgICAg
ICBpZiAoIWNvb2tpZXNBcnJheSkgewogICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVy
KENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtub3duRXJy
b3IpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBSZWZQdHI8SlNPTjo6QXJyYXk+IGNvb2tpZXMgPSBKU09OOjpBcnJheTo6Y3JlYXRlKCk7CisK
KyAgICAgICAgICAgIGF1dG8gY29va2llcyA9IEpTT046OkFycmF5OjpjcmVhdGUoKTsKICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb29raWVzQXJyYXktPmxlbmd0aCgpOyAr
K2kpIHsKLSAgICAgICAgICAgICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IGNvb2tpZVZhbHVlID0g
Y29va2llc0FycmF5LT5nZXQoaSk7Ci0gICAgICAgICAgICAgICAgUmVmUHRyPEpTT046Ok9iamVj
dD4gY29va2llT2JqZWN0OwotICAgICAgICAgICAgICAgIGlmICghY29va2llVmFsdWUtPmFzT2Jq
ZWN0KGNvb2tpZU9iamVjdCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvIGNvb2tpZU9iamVjdCA9
IGNvb2tpZXNBcnJheS0+Z2V0KGkpLT5hc09iamVjdCgpOworICAgICAgICAgICAgICAgIGlmICgh
Y29va2llT2JqZWN0KSB7CiAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENv
bW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpVbmtub3duRXJyb3Ip
KTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIH0KQEAgLTIz
NjUsMTQgKzI0NjIsMTEgQEAgdm9pZCBTZXNzaW9uOjpnZXROYW1lZENvb2tpZShjb25zdCBTdHJp
bmcmIG5hbWUsIEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSZXN1bHQmJikKICAgICAgICAgICAgIGNv
bXBsZXRpb25IYW5kbGVyKFdURk1vdmUocmVzdWx0KSk7CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KLSAgICAgICAgUmVmUHRyPEpTT046OkFycmF5PiBjb29raWVzQXJyYXk7Ci0gICAg
ICAgIHJlc3VsdC5yZXN1bHQoKS0+YXNBcnJheShjb29raWVzQXJyYXkpOworCisgICAgICAgIGF1
dG8gY29va2llc0FycmF5ID0gcmVzdWx0LnJlc3VsdCgpLT5hc0FycmF5KCk7CiAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb29raWVzQXJyYXktPmxlbmd0aCgpOyArK2kpIHsKLSAg
ICAgICAgICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gY29va2llVmFsdWUgPSBjb29raWVzQXJyYXkt
PmdldChpKTsKLSAgICAgICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IGNvb2tpZU9iamVjdDsK
LSAgICAgICAgICAgIGNvb2tpZVZhbHVlLT5hc09iamVjdChjb29raWVPYmplY3QpOwotICAgICAg
ICAgICAgU3RyaW5nIGNvb2tpZU5hbWU7Ci0gICAgICAgICAgICBjb29raWVPYmplY3QtPmdldFN0
cmluZygibmFtZSJfcywgY29va2llTmFtZSk7CisgICAgICAgICAgICBhdXRvIGNvb2tpZU9iamVj
dCA9IGNvb2tpZXNBcnJheS0+Z2V0KGkpLT5hc09iamVjdCgpOworICAgICAgICAgICAgYXV0byBj
b29raWVOYW1lID0gY29va2llT2JqZWN0LT5nZXRTdHJpbmcoIm5hbWUiX3MpOwogICAgICAgICAg
ICAgaWYgKGNvb2tpZU5hbWUgPT0gbmFtZSkgewogICAgICAgICAgICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKENvbW1hbmRSZXN1bHQ6OnN1Y2Nlc3MoV1RGTW92ZShjb29raWVPYmplY3QpKSk7CiAg
ICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAtMjM5NCw3ICsyNDg4LDcgQEAgdm9pZCBTZXNzaW9u
OjphZGRDb29raWUoY29uc3QgQ29va2llJiBjb29raWUsIEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRS
ZXN1bHQmJik+JiYKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUocmVzdWx0
KSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgUmVmUHRyPEpTT046
Ok9iamVjdD4gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIGF1
dG8gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgIHBhcmFtZXRl
cnMtPnNldFN0cmluZygiYnJvd3NpbmdDb250ZXh0SGFuZGxlIl9zLCBtX3RvcGxldmVsQnJvd3Np
bmdDb250ZXh0LnZhbHVlKCkpOwogICAgICAgICBwYXJhbWV0ZXJzLT5zZXRPYmplY3QoImNvb2tp
ZSJfcywgV1RGTW92ZShjb29raWUpKTsKICAgICAgICAgbV9ob3N0LT5zZW5kQ29tbWFuZFRvQmFj
a2VuZCgiYWRkU2luZ2xlQ29va2llIl9zLCBXVEZNb3ZlKHBhcmFtZXRlcnMpLCBbcHJvdGVjdGVk
VGhpcywgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oU2Vz
c2lvbkhvc3Q6OkNvbW1hbmRSZXNwb25zZSYmIHJlc3BvbnNlKSB7CkBAIC0yNDE5LDcgKzI1MTMs
NyBAQCB2b2lkIFNlc3Npb246OmRlbGV0ZUNvb2tpZShjb25zdCBTdHJpbmcmIG5hbWUsIEZ1bmN0
aW9uPHZvaWQgKENvbW1hbmRSZXN1bHQmJik+JgogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRs
ZXIoV1RGTW92ZShyZXN1bHQpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAg
ICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVh
dGUoKTsKKyAgICAgICAgYXV0byBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsK
ICAgICAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJicm93c2luZ0NvbnRleHRIYW5kbGUiX3Ms
IG1fdG9wbGV2ZWxCcm93c2luZ0NvbnRleHQudmFsdWUoKSk7CiAgICAgICAgIHBhcmFtZXRlcnMt
PnNldFN0cmluZygiY29va2llTmFtZSJfcywgbmFtZSk7CiAgICAgICAgIG1faG9zdC0+c2VuZENv
bW1hbmRUb0JhY2tlbmQoImRlbGV0ZVNpbmdsZUNvb2tpZSJfcywgV1RGTW92ZShwYXJhbWV0ZXJz
KSwgW3Byb3RlY3RlZFRoaXMsIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlcildKFNlc3Npb25Ib3N0OjpDb21tYW5kUmVzcG9uc2UmJiByZXNwb25zZSkgewpAQCAt
MjQ0NCw3ICsyNTM4LDcgQEAgdm9pZCBTZXNzaW9uOjpkZWxldGVBbGxDb29raWVzKEZ1bmN0aW9u
PHZvaWQgKENvbW1hbmRSZXN1bHQmJik+JiYgY29tcGxldGlvbkhhbmQKICAgICAgICAgICAgIGNv
bXBsZXRpb25IYW5kbGVyKFdURk1vdmUocmVzdWx0KSk7CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KLSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVycyA9IEpTT046
Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTT046Ok9iamVj
dDo6Y3JlYXRlKCk7CiAgICAgICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiYnJvd3NpbmdDb250
ZXh0SGFuZGxlIl9zLCBtX3RvcGxldmVsQnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwogICAgICAg
ICBtX2hvc3QtPnNlbmRDb21tYW5kVG9CYWNrZW5kKCJkZWxldGVBbGxDb29raWVzIl9zLCBXVEZN
b3ZlKHBhcmFtZXRlcnMpLCBbcHJvdGVjdGVkVGhpcywgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZN
b3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oU2Vzc2lvbkhvc3Q6OkNvbW1hbmRSZXNwb25zZSYmIHJl
c3BvbnNlKSB7CiAgICAgICAgICAgICBpZiAocmVzcG9uc2UuaXNFcnJvcikgewpAQCAtMjUxNywy
MyArMjYxMSwyMyBAQCB2b2lkIFNlc3Npb246OnBlcmZvcm1BY3Rpb25zKFZlY3RvcjxWZWN0b3I8
QWN0aW9uPj4mJiBhY3Rpb25zQnlUaWNrLCBGdW5jdGlvbjx2bwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CiAKLSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVycyA9
IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTT046
Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiaGFuZGxl
Il9zLCBtX3RvcGxldmVsQnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwogICAgICAgICBpZiAobV9j
dXJyZW50QnJvd3NpbmdDb250ZXh0KQogICAgICAgICAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5n
KCJmcmFtZUhhbmRsZSJfcywgbV9jdXJyZW50QnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwotICAg
ICAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IGlucHV0U291cmNlcyA9IEpTT046OkFycmF5OjpjcmVh
dGUoKTsKKyAgICAgICAgYXV0byBpbnB1dFNvdXJjZXMgPSBKU09OOjpBcnJheTo6Y3JlYXRlKCk7
CiAgICAgICAgIGZvciAoY29uc3QgYXV0byYgaW5wdXRTb3VyY2UgOiBtX2FjdGl2ZUlucHV0U291
cmNlcykgewotICAgICAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gaW5wdXRTb3VyY2VPYmpl
Y3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICAgICAgYXV0byBpbnB1dFNvdXJj
ZU9iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgICAgICBpbnB1dFNvdXJj
ZU9iamVjdC0+c2V0U3RyaW5nKCJzb3VyY2VJZCJfcywgaW5wdXRTb3VyY2Uua2V5KTsKICAgICAg
ICAgICAgIGlucHV0U291cmNlT2JqZWN0LT5zZXRTdHJpbmcoInNvdXJjZVR5cGUiX3MsIGF1dG9t
YXRpb25Tb3VyY2VUeXBlKGlucHV0U291cmNlLnZhbHVlLnR5cGUpKTsKICAgICAgICAgICAgIGlu
cHV0U291cmNlcy0+cHVzaE9iamVjdChXVEZNb3ZlKGlucHV0U291cmNlT2JqZWN0KSk7CiAgICAg
ICAgIH0KICAgICAgICAgcGFyYW1ldGVycy0+c2V0QXJyYXkoImlucHV0U291cmNlcyJfcywgV1RG
TW92ZShpbnB1dFNvdXJjZXMpKTsKLSAgICAgICAgUmVmUHRyPEpTT046OkFycmF5PiBzdGVwcyA9
IEpTT046OkFycmF5OjpjcmVhdGUoKTsKKyAgICAgICAgYXV0byBzdGVwcyA9IEpTT046OkFycmF5
OjpjcmVhdGUoKTsKICAgICAgICAgZm9yIChjb25zdCBhdXRvJiB0aWNrIDogYWN0aW9uc0J5VGlj
aykgewotICAgICAgICAgICAgUmVmUHRyPEpTT046OkFycmF5PiBzdGF0ZXMgPSBKU09OOjpBcnJh
eTo6Y3JlYXRlKCk7CisgICAgICAgICAgICBhdXRvIHN0YXRlcyA9IEpTT046OkFycmF5OjpjcmVh
dGUoKTsKICAgICAgICAgICAgIGZvciAoY29uc3QgYXV0byYgYWN0aW9uIDogdGljaykgewotICAg
ICAgICAgICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHN0YXRlID0gSlNPTjo6T2JqZWN0Ojpj
cmVhdGUoKTsKKyAgICAgICAgICAgICAgICBhdXRvIHN0YXRlID0gSlNPTjo6T2JqZWN0OjpjcmVh
dGUoKTsKICAgICAgICAgICAgICAgICBhdXRvJiBjdXJyZW50U3RhdGUgPSBpbnB1dFNvdXJjZVN0
YXRlKGFjdGlvbi5pZCk7CiAgICAgICAgICAgICAgICAgc3RhdGUtPnNldFN0cmluZygic291cmNl
SWQiX3MsIGFjdGlvbi5pZCk7CiAgICAgICAgICAgICAgICAgc3dpdGNoIChhY3Rpb24udHlwZSkg
ewpAQCAtMjU1MSw3ICsyNjQ1LDcgQEAgdm9pZCBTZXNzaW9uOjpwZXJmb3JtQWN0aW9ucyhWZWN0
b3I8VmVjdG9yPEFjdGlvbj4+JiYgYWN0aW9uc0J5VGljaywgRnVuY3Rpb248dm8KICAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICBjYXNlIEFjdGlvbjo6
U3VidHlwZTo6UG9pbnRlck1vdmU6IHsKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5z
ZXRTdHJpbmcoIm9yaWdpbiJfcywgYXV0b21hdGlvbk9yaWdpblR5cGUoYWN0aW9uLm9yaWdpbi0+
dHlwZSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gbG9j
YXRpb24gPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICAgICAgICAgICAgICAgICAg
YXV0byBsb2NhdGlvbiA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBsb2NhdGlvbi0+c2V0SW50ZWdlcigieCJfcywgYWN0aW9uLngudmFsdWUoKSk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbi0+c2V0SW50ZWdlcigieSJfcywgYWN0aW9u
LnkudmFsdWUoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+c2V0T2JqZWN0KCJs
b2NhdGlvbiJfcywgV1RGTW92ZShsb2NhdGlvbikpOwpAQCAtMjYxNyw3ICsyNzExLDcgQEAgdm9p
ZCBTZXNzaW9uOjpwZXJmb3JtQWN0aW9ucyhWZWN0b3I8VmVjdG9yPEFjdGlvbj4+JiYgYWN0aW9u
c0J5VGljaywgRnVuY3Rpb248dm8KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
c3RhdGVzLT5wdXNoT2JqZWN0KFdURk1vdmUoc3RhdGUpKTsKICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHN0ZXBTdGF0ZXMgPSBKU09OOjpPYmplY3Q6OmNy
ZWF0ZSgpOworICAgICAgICAgICAgYXV0byBzdGVwU3RhdGVzID0gSlNPTjo6T2JqZWN0OjpjcmVh
dGUoKTsKICAgICAgICAgICAgIHN0ZXBTdGF0ZXMtPnNldEFycmF5KCJzdGF0ZXMiX3MsIFdURk1v
dmUoc3RhdGVzKSk7CiAgICAgICAgICAgICBzdGVwcy0+cHVzaE9iamVjdChXVEZNb3ZlKHN0ZXBT
dGF0ZXMpKTsKICAgICAgICAgfQpAQCAtMjY0Myw3ICsyNzM3LDcgQEAgdm9pZCBTZXNzaW9uOjpy
ZWxlYXNlQWN0aW9ucyhGdW5jdGlvbjx2b2lkIChDb21tYW5kUmVzdWx0JiYpPiYmIGNvbXBsZXRp
b25IYW5kbGUKICAgICBtX2FjdGl2ZUlucHV0U291cmNlcy5jbGVhcigpOwogICAgIG1faW5wdXRT
dGF0ZVRhYmxlLmNsZWFyKCk7CiAKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJz
ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBhdXRvIHBhcmFtZXRlcnMgPSBKU09OOjpP
YmplY3Q6OmNyZWF0ZSgpOwogICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygiaGFuZGxlIl9zLCBt
X3RvcGxldmVsQnJvd3NpbmdDb250ZXh0LnZhbHVlKCkpOwogICAgIG1faG9zdC0+c2VuZENvbW1h
bmRUb0JhY2tlbmQoImNhbmNlbEludGVyYWN0aW9uU2VxdWVuY2UiX3MsIFdURk1vdmUocGFyYW1l
dGVycyksIFtwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVy
ID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKFNlc3Npb25Ib3N0OjpDb21tYW5kUmVzcG9u
c2UmJiByZXNwb25zZSkgewogICAgICAgICBpZiAocmVzcG9uc2UuaXNFcnJvcikgewpAQCAtMjY2
MSw3ICsyNzU1LDcgQEAgdm9pZCBTZXNzaW9uOjpkaXNtaXNzQWxlcnQoRnVuY3Rpb248dm9pZCAo
Q29tbWFuZFJlc3VsdCYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnMgPSBKU09OOjpPYmpl
Y3Q6OmNyZWF0ZSgpOworICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6Y3JlYXRl
KCk7CiAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJicm93c2luZ0NvbnRleHRIYW5kbGUiX3Ms
IG1fdG9wbGV2ZWxCcm93c2luZ0NvbnRleHQudmFsdWUoKSk7CiAgICAgbV9ob3N0LT5zZW5kQ29t
bWFuZFRvQmFja2VuZCgiZGlzbWlzc0N1cnJlbnRKYXZhU2NyaXB0RGlhbG9nIl9zLCBXVEZNb3Zl
KHBhcmFtZXRlcnMpLCBbcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjb21wbGV0aW9u
SGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXShTZXNzaW9uSG9zdDo6Q29tbWFu
ZFJlc3BvbnNlJiYgcmVzcG9uc2UpIHsKICAgICAgICAgaWYgKHJlc3BvbnNlLmlzRXJyb3IpIHsK
QEAgLTI2NzksNyArMjc3Myw3IEBAIHZvaWQgU2Vzc2lvbjo6YWNjZXB0QWxlcnQoRnVuY3Rpb248
dm9pZCAoQ29tbWFuZFJlc3VsdCYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBhcmFtZXRlcnMgPSBKU09O
OjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGF1dG8gcGFyYW1ldGVycyA9IEpTT046Ok9iamVjdDo6
Y3JlYXRlKCk7CiAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJicm93c2luZ0NvbnRleHRIYW5k
bGUiX3MsIG1fdG9wbGV2ZWxCcm93c2luZ0NvbnRleHQudmFsdWUoKSk7CiAgICAgbV9ob3N0LT5z
ZW5kQ29tbWFuZFRvQmFja2VuZCgiYWNjZXB0Q3VycmVudEphdmFTY3JpcHREaWFsb2ciX3MsIFdU
Rk1vdmUocGFyYW1ldGVycyksIFtwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNvbXBs
ZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKFNlc3Npb25Ib3N0OjpD
b21tYW5kUmVzcG9uc2UmJiByZXNwb25zZSkgewogICAgICAgICBpZiAocmVzcG9uc2UuaXNFcnJv
cikgewpAQCAtMjY5NywxOCArMjc5MSwyMCBAQCB2b2lkIFNlc3Npb246OmdldEFsZXJ0VGV4dChG
dW5jdGlvbjx2b2lkIChDb21tYW5kUmVzdWx0JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVy
cyA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgYXV0byBwYXJhbWV0ZXJzID0gSlNPTjo6
T2JqZWN0OjpjcmVhdGUoKTsKICAgICBwYXJhbWV0ZXJzLT5zZXRTdHJpbmcoImJyb3dzaW5nQ29u
dGV4dEhhbmRsZSJfcywgbV90b3BsZXZlbEJyb3dzaW5nQ29udGV4dC52YWx1ZSgpKTsKICAgICBt
X2hvc3QtPnNlbmRDb21tYW5kVG9CYWNrZW5kKCJtZXNzYWdlT2ZDdXJyZW50SmF2YVNjcmlwdERp
YWxvZyJfcywgV1RGTW92ZShwYXJhbWV0ZXJzKSwgW3Byb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0
aGlzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oU2Vz
c2lvbkhvc3Q6OkNvbW1hbmRSZXNwb25zZSYmIHJlc3BvbnNlKSB7CiAgICAgICAgIGlmIChyZXNw
b25zZS5pc0Vycm9yIHx8ICFyZXNwb25zZS5yZXNwb25zZU9iamVjdCkgewogICAgICAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChXVEZNb3ZlKHJlc3BvbnNlLnJl
c3BvbnNlT2JqZWN0KSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAg
IFN0cmluZyB2YWx1ZVN0cmluZzsKLSAgICAgICAgaWYgKCFyZXNwb25zZS5yZXNwb25zZU9iamVj
dC0+Z2V0U3RyaW5nKCJtZXNzYWdlIl9zLCB2YWx1ZVN0cmluZykpIHsKKworICAgICAgICBhdXRv
IHZhbHVlU3RyaW5nID0gcmVzcG9uc2UucmVzcG9uc2VPYmplY3QtPmdldFN0cmluZygibWVzc2Fn
ZSJfcyk7CisgICAgICAgIGlmICghdmFsdWVTdHJpbmcpIHsKICAgICAgICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpV
bmtub3duRXJyb3IpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQorCiAgICAgICAg
IGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OnN1Y2Nlc3MoSlNPTjo6VmFsdWU6OmNy
ZWF0ZSh2YWx1ZVN0cmluZykpKTsKICAgICB9KTsKIH0KQEAgLTI3MjAsNyArMjgxNiw3IEBAIHZv
aWQgU2Vzc2lvbjo6c2VuZEFsZXJ0VGV4dChjb25zdCBTdHJpbmcmIHRleHQsIEZ1bmN0aW9uPHZv
aWQgKENvbW1hbmRSZXN1bHQmJik+CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBSZWZQ
dHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAg
ICBhdXRvIHBhcmFtZXRlcnMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgIHBhcmFtZXRl
cnMtPnNldFN0cmluZygiYnJvd3NpbmdDb250ZXh0SGFuZGxlIl9zLCBtX3RvcGxldmVsQnJvd3Np
bmdDb250ZXh0LnZhbHVlKCkpOwogICAgIHBhcmFtZXRlcnMtPnNldFN0cmluZygidXNlcklucHV0
Il9zLCB0ZXh0KTsKICAgICBtX2hvc3QtPnNlbmRDb21tYW5kVG9CYWNrZW5kKCJzZXRVc2VySW5w
dXRGb3JDdXJyZW50SmF2YVNjcmlwdFByb21wdCJfcywgV1RGTW92ZShwYXJhbWV0ZXJzKSwgW3By
b3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKV0oU2Vzc2lvbkhvc3Q6OkNvbW1hbmRSZXNwb25zZSYmIHJlc3Bv
bnNlKSB7CkBAIC0yNzQ0LDcgKzI4NDAsNyBAQCB2b2lkIFNlc3Npb246OnRha2VTY3JlZW5zaG90
KE9wdGlvbmFsPFN0cmluZz4gZWxlbWVudElELCBPcHRpb25hbDxib29sPiBzY3JvbGxJbgogICAg
ICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShyZXN1bHQpKTsKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfQotICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0
ZXJzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgYXV0byBwYXJhbWV0ZXJzID0g
SlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICAgcGFyYW1ldGVycy0+c2V0U3RyaW5nKCJo
YW5kbGUiX3MsIG1fdG9wbGV2ZWxCcm93c2luZ0NvbnRleHQudmFsdWUoKSk7CiAgICAgICAgIGlm
IChtX2N1cnJlbnRCcm93c2luZ0NvbnRleHQpCiAgICAgICAgICAgICBwYXJhbWV0ZXJzLT5zZXRT
dHJpbmcoImZyYW1lSGFuZGxlIl9zLCBtX2N1cnJlbnRCcm93c2luZ0NvbnRleHQudmFsdWUoKSk7
CkBAIC0yNzU4LDExICsyODU0LDEzIEBAIHZvaWQgU2Vzc2lvbjo6dGFrZVNjcmVlbnNob3QoT3B0
aW9uYWw8U3RyaW5nPiBlbGVtZW50SUQsIE9wdGlvbmFsPGJvb2w+IHNjcm9sbEluCiAgICAgICAg
ICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChXVEZNb3ZlKHJl
c3BvbnNlLnJlc3BvbnNlT2JqZWN0KSkpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIFN0cmluZyBkYXRhOwotICAgICAgICAgICAgaWYgKCFyZXNw
b25zZS5yZXNwb25zZU9iamVjdC0+Z2V0U3RyaW5nKCJkYXRhIl9zLCBkYXRhKSkgeworCisgICAg
ICAgICAgICBhdXRvIGRhdGEgPSByZXNwb25zZS5yZXNwb25zZU9iamVjdC0+Z2V0U3RyaW5nKCJk
YXRhIl9zKTsKKyAgICAgICAgICAgIGlmICghZGF0YSkgewogICAgICAgICAgICAgICAgIGNvbXBs
ZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2Rl
OjpVbmtub3duRXJyb3IpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9
CisKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OnN1Y2Nlc3Mo
SlNPTjo6VmFsdWU6OmNyZWF0ZShkYXRhKSkpOwogICAgICAgICB9KTsKICAgICB9KTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJEcml2ZXIvU2Vzc2lvbi5oIGIvU291cmNlL1dlYkRyaXZlci9TZXNz
aW9uLmgKaW5kZXggODQ0OWFhODk4OGI3NzkzNzRmODgyZmVkN2QyZmNkY2QzNDQ3MzRlMi4uYWQw
NTYzYmI5MTlmMWUzZTg3OWVlNzFlZjIzOWI4YTdhZjVkNDcxNCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkRyaXZlci9TZXNzaW9uLmgKKysrIGIvU291cmNlL1dlYkRyaXZlci9TZXNzaW9uLmgKQEAg
LTE0MywxMCArMTQzLDEwIEBAIHByaXZhdGU6CiAgICAgdm9pZCByZXBvcnRVbmV4cGVjdGVkQWxl
cnRPcGVuKEZ1bmN0aW9uPHZvaWQgKENvbW1hbmRSZXN1bHQmJik+JiYpOwogCiAgICAgUmVmUHRy
PEpTT046Ok9iamVjdD4gY3JlYXRlRWxlbWVudChSZWZQdHI8SlNPTjo6VmFsdWU+JiYpOwotICAg
IFJlZlB0cjxKU09OOjpPYmplY3Q+IGNyZWF0ZUVsZW1lbnQoY29uc3QgU3RyaW5nJiBlbGVtZW50
SUQpOworICAgIFJlZjxKU09OOjpPYmplY3Q+IGNyZWF0ZUVsZW1lbnQoY29uc3QgU3RyaW5nJiBl
bGVtZW50SUQpOwogICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IGV4dHJhY3RFbGVtZW50KEpTT046
OlZhbHVlJik7CiAgICAgU3RyaW5nIGV4dHJhY3RFbGVtZW50SUQoSlNPTjo6VmFsdWUmKTsKLSAg
ICBSZWZQdHI8SlNPTjo6VmFsdWU+IGhhbmRsZVNjcmlwdFJlc3VsdChSZWZQdHI8SlNPTjo6VmFs
dWU+JiYpOworICAgIFJlZjxKU09OOjpWYWx1ZT4gaGFuZGxlU2NyaXB0UmVzdWx0KFJlZjxKU09O
OjpWYWx1ZT4mJik7CiAgICAgdm9pZCBlbGVtZW50SXNFZGl0YWJsZShjb25zdCBTdHJpbmcmIGVs
ZW1lbnRJRCwgRnVuY3Rpb248dm9pZCAoQ29tbWFuZFJlc3VsdCYmKT4mJik7CiAKICAgICBzdHJ1
Y3QgUG9pbnQgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkRyaXZlci9TZXNzaW9uSG9zdC5jcHAg
Yi9Tb3VyY2UvV2ViRHJpdmVyL1Nlc3Npb25Ib3N0LmNwcAppbmRleCBkMTY5Yjk1YzRiNmNlZTQy
ODlkOGM4ODllNTUzZGY3NjM5NTVhYWJjLi40NzJlYmRmYWY0YTYyYjZiMjAwYjRkMWVjN2IyMWJl
NTkxMTg1ZTAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViRHJpdmVyL1Nlc3Npb25Ib3N0LmNwcAor
KysgYi9Tb3VyY2UvV2ViRHJpdmVyL1Nlc3Npb25Ib3N0LmNwcApAQCAtNjIsMzEgKzYyLDI3IEBA
IGxvbmcgU2Vzc2lvbkhvc3Q6OnNlbmRDb21tYW5kVG9CYWNrZW5kKGNvbnN0IFN0cmluZyYgY29t
bWFuZCwgUmVmUHRyPEpTT046Ok9iamVjCiAKIHZvaWQgU2Vzc2lvbkhvc3Q6OmRpc3BhdGNoTWVz
c2FnZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCiB7Ci0gICAgUmVmUHRyPEpTT046OlZhbHVlPiBt
ZXNzYWdlVmFsdWU7Ci0gICAgaWYgKCFKU09OOjpWYWx1ZTo6cGFyc2VKU09OKG1lc3NhZ2UsIG1l
c3NhZ2VWYWx1ZSkpCisgICAgYXV0byBtZXNzYWdlVmFsdWUgPSBKU09OOjpWYWx1ZTo6cGFyc2VK
U09OKG1lc3NhZ2UpOworICAgIGlmICghbWVzc2FnZVZhbHVlKQogICAgICAgICByZXR1cm47CiAK
LSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBtZXNzYWdlT2JqZWN0OwotICAgIGlmICghbWVzc2Fn
ZVZhbHVlLT5hc09iamVjdChtZXNzYWdlT2JqZWN0KSkKKyAgICBhdXRvIG1lc3NhZ2VPYmplY3Qg
PSBtZXNzYWdlVmFsdWUtPmFzT2JqZWN0KCk7CisgICAgaWYgKCFtZXNzYWdlT2JqZWN0KQogICAg
ICAgICByZXR1cm47CiAKLSAgICBsb25nIHNlcXVlbmNlSUQ7Ci0gICAgaWYgKCFtZXNzYWdlT2Jq
ZWN0LT5nZXRJbnRlZ2VyKCJpZCJfcywgc2VxdWVuY2VJRCkpCisgICAgYXV0byBzZXF1ZW5jZUlE
ID0gbWVzc2FnZU9iamVjdC0+Z2V0SW50ZWdlcigiaWQiX3MpOworICAgIGlmICghc2VxdWVuY2VJ
RCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byByZXNwb25zZUhhbmRsZXIgPSBtX2NvbW1h
bmRSZXF1ZXN0cy50YWtlKHNlcXVlbmNlSUQpOworICAgIGF1dG8gcmVzcG9uc2VIYW5kbGVyID0g
bV9jb21tYW5kUmVxdWVzdHMudGFrZSgqc2VxdWVuY2VJRCk7CiAgICAgQVNTRVJUKHJlc3BvbnNl
SGFuZGxlcik7CiAKICAgICBDb21tYW5kUmVzcG9uc2UgcmVzcG9uc2U7Ci0gICAgUmVmUHRyPEpT
T046Ok9iamVjdD4gZXJyb3JPYmplY3Q7Ci0gICAgaWYgKG1lc3NhZ2VPYmplY3QtPmdldE9iamVj
dCgiZXJyb3IiX3MsIGVycm9yT2JqZWN0KSkgeworICAgIGlmIChhdXRvIGVycm9yT2JqZWN0ID0g
bWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJlcnJvciJfcykpIHsKICAgICAgICAgcmVzcG9uc2Uu
cmVzcG9uc2VPYmplY3QgPSBXVEZNb3ZlKGVycm9yT2JqZWN0KTsKICAgICAgICAgcmVzcG9uc2Uu
aXNFcnJvciA9IHRydWU7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVj
dD4gcmVzdWx0T2JqZWN0OwotICAgICAgICBpZiAobWVzc2FnZU9iamVjdC0+Z2V0T2JqZWN0KCJy
ZXN1bHQiX3MsIHJlc3VsdE9iamVjdCkgJiYgcmVzdWx0T2JqZWN0LT5zaXplKCkpCi0gICAgICAg
ICAgICByZXNwb25zZS5yZXNwb25zZU9iamVjdCA9IFdURk1vdmUocmVzdWx0T2JqZWN0KTsKLSAg
ICB9CisgICAgfSBlbHNlIGlmIChhdXRvIHJlc3VsdE9iamVjdCA9IG1lc3NhZ2VPYmplY3QtPmdl
dE9iamVjdCgicmVzdWx0Il9zKSkKKyAgICAgICAgcmVzcG9uc2UucmVzcG9uc2VPYmplY3QgPSBX
VEZNb3ZlKHJlc3VsdE9iamVjdCk7CiAKICAgICByZXNwb25zZUhhbmRsZXIoV1RGTW92ZShyZXNw
b25zZSkpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkRyaXZlci9XZWJEcml2ZXJTZXJ2aWNl
LmNwcCBiL1NvdXJjZS9XZWJEcml2ZXIvV2ViRHJpdmVyU2VydmljZS5jcHAKaW5kZXggOWJiOTc2
ZDlmMGM1ZTNiNDg5YjIwOWYzZGI4NTBkYzMyMWI2MGY0ZS4uMzFlNmRkZTFmYzI4Mjc5NGUwMjVl
NmJjNjA3ZjMyNDk4ZWE1N2IyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkRyaXZlci9XZWJEcml2
ZXJTZXJ2aWNlLmNwcAorKysgYi9Tb3VyY2UvV2ViRHJpdmVyL1dlYkRyaXZlclNlcnZpY2UuY3Bw
CkBAIC0yMzksMTMgKzIzOSwxNCBAQCB2b2lkIFdlYkRyaXZlclNlcnZpY2U6OmhhbmRsZVJlcXVl
c3QoSFRUUFJlcXVlc3RIYW5kbGVyOjpSZXF1ZXN0JiYgcmVxdWVzdCwgRnVuYwogCiAgICAgUmVm
UHRyPEpTT046Ok9iamVjdD4gcGFyYW1ldGVyc09iamVjdDsKICAgICBpZiAobWV0aG9kLnZhbHVl
KCkgPT0gSFRUUE1ldGhvZDo6UG9zdCkgewotICAgICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IG1l
c3NhZ2VWYWx1ZTsKLSAgICAgICAgaWYgKCFKU09OOjpWYWx1ZTo6cGFyc2VKU09OKFN0cmluZzo6
ZnJvbVVURjgocmVxdWVzdC5kYXRhLCByZXF1ZXN0LmRhdGFMZW5ndGgpLCBtZXNzYWdlVmFsdWUp
KSB7CisgICAgICAgIGF1dG8gbWVzc2FnZVZhbHVlID0gSlNPTjo6VmFsdWU6OnBhcnNlSlNPTihT
dHJpbmc6OmZyb21VVEY4KHJlcXVlc3QuZGF0YSwgcmVxdWVzdC5kYXRhTGVuZ3RoKSk7CisgICAg
ICAgIGlmICghbWVzc2FnZVZhbHVlKSB7CiAgICAgICAgICAgICBzZW5kUmVzcG9uc2UoV1RGTW92
ZShyZXBseUhhbmRsZXIpLCBDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9y
Q29kZTo6SW52YWxpZEFyZ3VtZW50KSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
IAotICAgICAgICBpZiAoIW1lc3NhZ2VWYWx1ZS0+YXNPYmplY3QocGFyYW1ldGVyc09iamVjdCkp
IHsKKyAgICAgICAgcGFyYW1ldGVyc09iamVjdCA9IG1lc3NhZ2VWYWx1ZS0+YXNPYmplY3QoKTsK
KyAgICAgICAgaWYgKCFwYXJhbWV0ZXJzT2JqZWN0KSB7CiAgICAgICAgICAgICBzZW5kUmVzcG9u
c2UoV1RGTW92ZShyZXBseUhhbmRsZXIpLCBDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1
bHQ6OkVycm9yQ29kZTo6SW52YWxpZEFyZ3VtZW50KSk7CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KQEAgLTI3NCw3ICsyNzUsNyBAQCB2b2lkIFdlYkRyaXZlclNlcnZpY2U6OnNlbmRS
ZXNwb25zZShGdW5jdGlvbjx2b2lkIChIVFRQUmVxdWVzdEhhbmRsZXI6OlJlc3BvbnNlJgogICAg
ICAgICBlcnJvck9iamVjdC0+c2V0U3RyaW5nKCJzdGFja3RyYWNlIl9zLCBlbXB0eVN0cmluZygp
KTsKICAgICAgICAgLy8gSWYgdGhlIGVycm9yIGRhdGEgZGljdGlvbmFyeSBjb250YWlucyBhbnkg
ZW50cmllcywgc2V0IHRoZSAiZGF0YSIgZmllbGQgb24gYm9keSB0byBhIG5ldyBKU09OIE9iamVj
dCBwb3B1bGF0ZWQgd2l0aCB0aGUgZGljdGlvbmFyeS4KICAgICAgICAgaWYgKGF1dG8mIGFkZGl0
aW9uYWxEYXRhID0gcmVzdWx0LmFkZGl0aW9uYWxFcnJvckRhdGEoKSkKLSAgICAgICAgICAgIGVy
cm9yT2JqZWN0LT5zZXRPYmplY3QoImRhdGEiX3MsIFJlZlB0cjxKU09OOjpPYmplY3Q+IHsgYWRk
aXRpb25hbERhdGEgfSk7CisgICAgICAgICAgICBlcnJvck9iamVjdC0+c2V0T2JqZWN0KCJkYXRh
Il9zLCAqYWRkaXRpb25hbERhdGEpOwogICAgICAgICAvLyBTZW5kIGEgcmVzcG9uc2Ugd2l0aCBz
dGF0dXMgYW5kIGJvZHkgYXMgYXJndW1lbnRzLgogICAgICAgICByZXN1bHRWYWx1ZSA9IFdURk1v
dmUoZXJyb3JPYmplY3QpOwogICAgIH0gZWxzZSBpZiAoYXV0byB2YWx1ZSA9IHJlc3VsdC5yZXN1
bHQoKSkKQEAgLTI4NCwyNCArMjg1LDI0IEBAIHZvaWQgV2ViRHJpdmVyU2VydmljZTo6c2VuZFJl
c3BvbnNlKEZ1bmN0aW9uPHZvaWQgKEhUVFBSZXF1ZXN0SGFuZGxlcjo6UmVzcG9uc2UmCiAKICAg
ICAvLyBXaGVuIHJlcXVpcmVkIHRvIHNlbmQgYSByZXNwb25zZS4KICAgICAvLyBodHRwczovL3cz
Yy5naXRodWIuaW8vd2ViZHJpdmVyL3dlYmRyaXZlci1zcGVjLmh0bWwjZGZuLXNlbmQtYS1yZXNw
b25zZQotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHJlc3BvbnNlT2JqZWN0ID0gSlNPTjo6T2Jq
ZWN0OjpjcmVhdGUoKTsKLSAgICByZXNwb25zZU9iamVjdC0+c2V0VmFsdWUoInZhbHVlIl9zLCBX
VEZNb3ZlKHJlc3VsdFZhbHVlKSk7CisgICAgYXV0byByZXNwb25zZU9iamVjdCA9IEpTT046Ok9i
amVjdDo6Y3JlYXRlKCk7CisgICAgcmVzcG9uc2VPYmplY3QtPnNldFZhbHVlKCJ2YWx1ZSJfcywg
cmVzdWx0VmFsdWUucmVsZWFzZU5vbk51bGwoKSk7CiAgICAgcmVwbHlIYW5kbGVyKHsgcmVzdWx0
Lmh0dHBTdGF0dXNDb2RlKCksIHJlc3BvbnNlT2JqZWN0LT50b0pTT05TdHJpbmcoKS51dGY4KCks
ICJhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PXV0Zi04Il9zIH0pOwogfQogCiBzdGF0aWMgT3B0
aW9uYWw8ZG91YmxlPiB2YWx1ZUFzTnVtYmVySW5SYW5nZShjb25zdCBKU09OOjpWYWx1ZSYgdmFs
dWUsIGRvdWJsZSBtaW5BbGxvd2VkID0gMCwgZG91YmxlIG1heEFsbG93ZWQgPSBzdGQ6Om51bWVy
aWNfbGltaXRzPGludD46Om1heCgpKQogewotICAgIGRvdWJsZSBudW1iZXI7Ci0gICAgaWYgKCF2
YWx1ZS5hc0RvdWJsZShudW1iZXIpKQorICAgIGF1dG8gbnVtYmVyID0gdmFsdWUuYXNEb3VibGUo
KTsKKyAgICBpZiAoIW51bWJlcikKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAg
IGlmIChzdGQ6OmlzbmFuKG51bWJlcikgfHwgc3RkOjppc2luZihudW1iZXIpKQorICAgIGlmIChz
dGQ6OmlzbmFuKCpudW1iZXIpIHx8IHN0ZDo6aXNpbmYoKm51bWJlcikpCiAgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CiAKLSAgICBpZiAobnVtYmVyIDwgbWluQWxsb3dlZCB8fCBudW1iZXIg
PiBtYXhBbGxvd2VkKQorICAgIGlmICgqbnVtYmVyIDwgbWluQWxsb3dlZCB8fCAqbnVtYmVyID4g
bWF4QWxsb3dlZCkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIHJldHVybiBu
dW1iZXI7CisgICAgcmV0dXJuICpudW1iZXI7CiB9CiAKIHN0YXRpYyBPcHRpb25hbDx1aW50NjRf
dD4gdW5zaWduZWRWYWx1ZShKU09OOjpWYWx1ZSYgdmFsdWUpCkBAIC0zMzgsNyArMzM5LDcgQEAg
c3RhdGljIE9wdGlvbmFsPFRpbWVvdXRzPiBkZXNlcmlhbGl6ZVRpbWVvdXRzKEpTT046Ok9iamVj
dCYgdGltZW91dHNPYmplY3QsIElnbm8KICAgICAgICAgfQogCiAgICAgICAgIC8vIElmIHZhbHVl
IGlzIG5vdCBhbiBpbnRlZ2VyLCBvciBpdCBpcyBsZXNzIHRoYW4gMCBvciBncmVhdGVyIHRoYW4g
dGhlIG1heGltdW0gc2FmZSBpbnRlZ2VyLCByZXR1cm4gZXJyb3Igd2l0aCBlcnJvciBjb2RlIGlu
dmFsaWQgYXJndW1lbnQuCi0gICAgICAgIGF1dG8gdGltZW91dE1TID0gdW5zaWduZWRWYWx1ZSgq
aXQtPnZhbHVlKTsKKyAgICAgICAgYXV0byB0aW1lb3V0TVMgPSB1bnNpZ25lZFZhbHVlKGl0LT52
YWx1ZSk7CiAgICAgICAgIGlmICghdGltZW91dE1TKQogICAgICAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKIApAQCAtMzU5LDYxICszNjAsNjEgQEAgc3RhdGljIE9wdGlvbmFsPFByb3h5PiBk
ZXNlcmlhbGl6ZVByb3h5KEpTT046Ok9iamVjdCYgcHJveHlPYmplY3QpCiAgICAgLy8gwqc3LjEg
UHJveHkuCiAgICAgLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmRyaXZlci8jcHJveHkKICAg
ICBQcm94eSBwcm94eTsKLSAgICBpZiAoIXByb3h5T2JqZWN0LmdldFN0cmluZygicHJveHlUeXBl
Il9zLCBwcm94eS50eXBlKSkKKworICAgIHByb3h5LnR5cGUgPSBwcm94eU9iamVjdC5nZXRTdHJp
bmcoInByb3h5VHlwZSJfcyk7CisgICAgaWYgKCFwcm94eS50eXBlKQogICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwogCiAgICAgaWYgKHByb3h5LnR5cGUgPT0gImRpcmVjdCIgfHwgcHJveHku
dHlwZSA9PSAiYXV0b2RldGVjdCIgfHwgcHJveHkudHlwZSA9PSAic3lzdGVtIikKICAgICAgICAg
cmV0dXJuIHByb3h5OwogCiAgICAgaWYgKHByb3h5LnR5cGUgPT0gInBhYyIpIHsKLSAgICAgICAg
U3RyaW5nIGF1dG9jb25maWdVUkw7Ci0gICAgICAgIGlmICghcHJveHlPYmplY3QuZ2V0U3RyaW5n
KCJwcm94eUF1dG9jb25maWdVcmwiX3MsIGF1dG9jb25maWdVUkwpKQorICAgICAgICBwcm94eS5h
dXRvY29uZmlnVVJMID0gcHJveHlPYmplY3QuZ2V0U3RyaW5nKCJwcm94eUF1dG9jb25maWdVcmwi
X3MpOworICAgICAgICBpZiAoIXByb3h5LmF1dG9jb25maWdVUkwpCiAgICAgICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwogCi0gICAgICAgIHByb3h5LmF1dG9jb25maWdVUkwgPSBhdXRvY29u
ZmlnVVJMOwogICAgICAgICByZXR1cm4gcHJveHk7CiAgICAgfQogCiAgICAgaWYgKHByb3h5LnR5
cGUgPT0gIm1hbnVhbCIpIHsKLSAgICAgICAgUmVmUHRyPEpTT046OlZhbHVlPiB2YWx1ZTsKLSAg
ICAgICAgaWYgKHByb3h5T2JqZWN0LmdldFZhbHVlKCJmdHBQcm94eSJfcywgdmFsdWUpKSB7Ci0g
ICAgICAgICAgICBTdHJpbmcgZnRwUHJveHk7Ci0gICAgICAgICAgICBpZiAoIXZhbHVlLT5hc1N0
cmluZyhmdHBQcm94eSkpCisgICAgICAgIGlmIChhdXRvIHZhbHVlID0gcHJveHlPYmplY3QuZ2V0
VmFsdWUoImZ0cFByb3h5Il9zKSkgeworICAgICAgICAgICAgYXV0byBmdHBQcm94eSA9IHZhbHVl
LT5hc1N0cmluZygpOworICAgICAgICAgICAgaWYgKCFmdHBQcm94eSkKICAgICAgICAgICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgICAgICAgICBwcm94eS5mdHBVUkwgPSBVUkwo
eyB9LCBtYWtlU3RyaW5nKCJmdHA6Ly8iLCBmdHBQcm94eSkpOwogICAgICAgICAgICAgaWYgKCFw
cm94eS5mdHBVUkwtPmlzVmFsaWQoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwogICAgICAgICB9Ci0gICAgICAgIGlmIChwcm94eU9iamVjdC5nZXRWYWx1ZSgiaHR0cFBy
b3h5Il9zLCB2YWx1ZSkpIHsKLSAgICAgICAgICAgIFN0cmluZyBodHRwUHJveHk7Ci0gICAgICAg
ICAgICBpZiAoIXZhbHVlLT5hc1N0cmluZyhodHRwUHJveHkpKQorICAgICAgICBpZiAoYXV0byB2
YWx1ZSA9IHByb3h5T2JqZWN0LmdldFZhbHVlKCJodHRwUHJveHkiX3MpKSB7CisgICAgICAgICAg
ICBhdXRvIGh0dHBQcm94eSA9IHZhbHVlLT5hc1N0cmluZygpOworICAgICAgICAgICAgaWYgKCFo
dHRwUHJveHkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgICAg
ICAgICAgcHJveHkuaHR0cFVSTCA9IFVSTCh7IH0sIG1ha2VTdHJpbmcoImh0dHA6Ly8iLCBodHRw
UHJveHkpKTsKICAgICAgICAgICAgIGlmICghcHJveHkuaHR0cFVSTC0+aXNWYWxpZCgpKQogICAg
ICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAgIH0KLSAgICAgICAgaWYg
KHByb3h5T2JqZWN0LmdldFZhbHVlKCJzc2xQcm94eSJfcywgdmFsdWUpKSB7Ci0gICAgICAgICAg
ICBTdHJpbmcgc3NsUHJveHk7Ci0gICAgICAgICAgICBpZiAoIXZhbHVlLT5hc1N0cmluZyhzc2xQ
cm94eSkpCisgICAgICAgIGlmIChhdXRvIHZhbHVlID0gcHJveHlPYmplY3QuZ2V0VmFsdWUoInNz
bFByb3h5Il9zKSkgeworICAgICAgICAgICAgYXV0byBzc2xQcm94eSA9IHZhbHVlLT5hc1N0cmlu
ZygpOworICAgICAgICAgICAgaWYgKCFzc2xQcm94eSkKICAgICAgICAgICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwogCiAgICAgICAgICAgICBwcm94eS5odHRwc1VSTCA9IFVSTCh7IH0sIG1h
a2VTdHJpbmcoImh0dHBzOi8vIiwgc3NsUHJveHkpKTsKICAgICAgICAgICAgIGlmICghcHJveHku
aHR0cHNVUkwtPmlzVmFsaWQoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OwogICAgICAgICB9Ci0gICAgICAgIGlmIChwcm94eU9iamVjdC5nZXRWYWx1ZSgic29ja3NQcm94
eSIsIHZhbHVlKSkgewotICAgICAgICAgICAgU3RyaW5nIHNvY2tzUHJveHk7Ci0gICAgICAgICAg
ICBpZiAoIXZhbHVlLT5hc1N0cmluZyhzb2Nrc1Byb3h5KSkKKyAgICAgICAgaWYgKGF1dG8gdmFs
dWUgPSBwcm94eU9iamVjdC5nZXRWYWx1ZSgic29ja3NQcm94eSIpKSB7CisgICAgICAgICAgICBh
dXRvIHNvY2tzUHJveHkgPSB2YWx1ZS0+YXNTdHJpbmcoKTsKKyAgICAgICAgICAgIGlmICghc29j
a3NQcm94eSkKICAgICAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgICAg
ICAgICBwcm94eS5zb2Nrc1VSTCA9IFVSTCh7IH0sIG1ha2VTdHJpbmcoInNvY2tzOi8vIiwgc29j
a3NQcm94eSkpOwogICAgICAgICAgICAgaWYgKCFwcm94eS5zb2Nrc1VSTC0+aXNWYWxpZCgpKQog
ICAgICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICAgICAgICAgIFJlZlB0
cjxKU09OOjpWYWx1ZT4gc29ja3NWZXJzaW9uVmFsdWU7Ci0gICAgICAgICAgICBpZiAoIXByb3h5
T2JqZWN0LmdldFZhbHVlKCJzb2Nrc1ZlcnNpb24iLCBzb2Nrc1ZlcnNpb25WYWx1ZSkpCisgICAg
ICAgICAgICBhdXRvIHNvY2tzVmVyc2lvblZhbHVlID0gcHJveHlPYmplY3QuZ2V0VmFsdWUoInNv
Y2tzVmVyc2lvbiIpOworICAgICAgICAgICAgaWYgKCFzb2Nrc1ZlcnNpb25WYWx1ZSkKICAgICAg
ICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgICAgICAgICBhdXRvIHNvY2tz
VmVyc2lvbiA9IHVuc2lnbmVkVmFsdWUoKnNvY2tzVmVyc2lvblZhbHVlKTsKQEAgLTQyMSwxOCAr
NDIyLDE3IEBAIHN0YXRpYyBPcHRpb25hbDxQcm94eT4gZGVzZXJpYWxpemVQcm94eShKU09OOjpP
YmplY3QmIHByb3h5T2JqZWN0KQogICAgICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CiAgICAgICAgICAgICBwcm94eS5zb2Nrc1ZlcnNpb24gPSBzb2Nrc1ZlcnNpb24udmFsdWUoKTsK
ICAgICAgICAgfQotICAgICAgICBpZiAocHJveHlPYmplY3QuZ2V0VmFsdWUoIm5vUHJveHkiX3Ms
IHZhbHVlKSkgewotICAgICAgICAgICAgUmVmUHRyPEpTT046OkFycmF5PiBub1Byb3h5OwotICAg
ICAgICAgICAgaWYgKCF2YWx1ZS0+YXNBcnJheShub1Byb3h5KSkKKyAgICAgICAgaWYgKGF1dG8g
dmFsdWUgPSBwcm94eU9iamVjdC5nZXRWYWx1ZSgibm9Qcm94eSJfcykpIHsKKyAgICAgICAgICAg
IGF1dG8gbm9Qcm94eSA9IHZhbHVlLT5hc0FycmF5KCk7CisgICAgICAgICAgICBpZiAoIW5vUHJv
eHkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgICAgICAgICAg
YXV0byBub1Byb3h5TGVuZ3RoID0gbm9Qcm94eS0+bGVuZ3RoKCk7CiAgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbm9Qcm94eUxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICAg
ICAgUmVmUHRyPEpTT046OlZhbHVlPiBhZGRyZXNzVmFsdWUgPSBub1Byb3h5LT5nZXQoaSk7Ci0g
ICAgICAgICAgICAgICAgU3RyaW5nIGFkZHJlc3M7Ci0gICAgICAgICAgICAgICAgaWYgKCFhZGRy
ZXNzVmFsdWUtPmFzU3RyaW5nKGFkZHJlc3MpKQorICAgICAgICAgICAgICAgIGF1dG8gYWRkcmVz
cyA9IG5vUHJveHktPmdldChpKS0+YXNTdHJpbmcoKTsKKyAgICAgICAgICAgICAgICBpZiAoIWFk
ZHJlc3MpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgICAg
ICAgICAgICAgcHJveHkuaWdub3JlQWRkcmVzc0xpc3QuYXBwZW5kKFdURk1vdmUoYWRkcmVzcykp
OworICAgICAgICAgICAgICAgIHByb3h5Lmlnbm9yZUFkZHJlc3NMaXN0LmFwcGVuZChhZGRyZXNz
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCkBAIC00NzEsNDMgKzQ3MSw1MyBAQCBzdGF0
aWMgT3B0aW9uYWw8VW5oYW5kbGVkUHJvbXB0QmVoYXZpb3I+IGRlc2VyaWFsaXplVW5oYW5kbGVk
UHJvbXB0QmVoYXZpb3IoY29ucwogdm9pZCBXZWJEcml2ZXJTZXJ2aWNlOjpwYXJzZUNhcGFiaWxp
dGllcyhjb25zdCBKU09OOjpPYmplY3QmIG1hdGNoZWRDYXBhYmlsaXRpZXMsIENhcGFiaWxpdGll
cyYgY2FwYWJpbGl0aWVzKSBjb25zdAogewogICAgIC8vIE1hdGNoZWQgY2FwYWJpbGl0aWVzIGhh
dmUgYWxyZWFkeSBiZWVuIHZhbGlkYXRlZC4KLSAgICBib29sIGFjY2VwdEluc2VjdXJlQ2VydHM7
Ci0gICAgaWYgKG1hdGNoZWRDYXBhYmlsaXRpZXMuZ2V0Qm9vbGVhbigiYWNjZXB0SW5zZWN1cmVD
ZXJ0cyJfcywgYWNjZXB0SW5zZWN1cmVDZXJ0cykpCi0gICAgICAgIGNhcGFiaWxpdGllcy5hY2Nl
cHRJbnNlY3VyZUNlcnRzID0gYWNjZXB0SW5zZWN1cmVDZXJ0czsKLSAgICBib29sIHNldFdpbmRv
d1JlY3Q7Ci0gICAgaWYgKG1hdGNoZWRDYXBhYmlsaXRpZXMuZ2V0Qm9vbGVhbigic2V0V2luZG93
UmVjdCJfcywgc2V0V2luZG93UmVjdCkpCi0gICAgICAgIGNhcGFiaWxpdGllcy5zZXRXaW5kb3dS
ZWN0ID0gc2V0V2luZG93UmVjdDsKLSAgICBTdHJpbmcgYnJvd3Nlck5hbWU7Ci0gICAgaWYgKG1h
dGNoZWRDYXBhYmlsaXRpZXMuZ2V0U3RyaW5nKCJicm93c2VyTmFtZSJfcywgYnJvd3Nlck5hbWUp
KQorICAgIGF1dG8gYWNjZXB0SW5zZWN1cmVDZXJ0cyA9IG1hdGNoZWRDYXBhYmlsaXRpZXMuZ2V0
Qm9vbGVhbigiYWNjZXB0SW5zZWN1cmVDZXJ0cyJfcyk7CisgICAgaWYgKGFjY2VwdEluc2VjdXJl
Q2VydHMpCisgICAgICAgIGNhcGFiaWxpdGllcy5hY2NlcHRJbnNlY3VyZUNlcnRzID0gKmFjY2Vw
dEluc2VjdXJlQ2VydHM7CisKKyAgICBhdXRvIHNldFdpbmRvd1JlY3QgPSBtYXRjaGVkQ2FwYWJp
bGl0aWVzLmdldEJvb2xlYW4oInNldFdpbmRvd1JlY3QiX3MpOworICAgIGlmIChzZXRXaW5kb3dS
ZWN0KQorICAgICAgICBjYXBhYmlsaXRpZXMuc2V0V2luZG93UmVjdCA9ICpzZXRXaW5kb3dSZWN0
OworCisgICAgYXV0byBicm93c2VyTmFtZSA9IG1hdGNoZWRDYXBhYmlsaXRpZXMuZ2V0U3RyaW5n
KCJicm93c2VyTmFtZSJfcyk7CisgICAgaWYgKCEhYnJvd3Nlck5hbWUpCiAgICAgICAgIGNhcGFi
aWxpdGllcy5icm93c2VyTmFtZSA9IGJyb3dzZXJOYW1lOwotICAgIFN0cmluZyBicm93c2VyVmVy
c2lvbjsKLSAgICBpZiAobWF0Y2hlZENhcGFiaWxpdGllcy5nZXRTdHJpbmcoImJyb3dzZXJWZXJz
aW9uIl9zLCBicm93c2VyVmVyc2lvbikpCisKKyAgICBhdXRvIGJyb3dzZXJWZXJzaW9uID0gbWF0
Y2hlZENhcGFiaWxpdGllcy5nZXRTdHJpbmcoImJyb3dzZXJWZXJzaW9uIl9zKTsKKyAgICBpZiAo
ISFicm93c2VyVmVyc2lvbikKICAgICAgICAgY2FwYWJpbGl0aWVzLmJyb3dzZXJWZXJzaW9uID0g
YnJvd3NlclZlcnNpb247Ci0gICAgU3RyaW5nIHBsYXRmb3JtTmFtZTsKLSAgICBpZiAobWF0Y2hl
ZENhcGFiaWxpdGllcy5nZXRTdHJpbmcoInBsYXRmb3JtTmFtZSJfcywgcGxhdGZvcm1OYW1lKSkK
KworICAgIGF1dG8gcGxhdGZvcm1OYW1lID0gbWF0Y2hlZENhcGFiaWxpdGllcy5nZXRTdHJpbmco
InBsYXRmb3JtTmFtZSJfcyk7CisgICAgaWYgKCEhcGxhdGZvcm1OYW1lKQogICAgICAgICBjYXBh
YmlsaXRpZXMucGxhdGZvcm1OYW1lID0gcGxhdGZvcm1OYW1lOwotICAgIFJlZlB0cjxKU09OOjpP
YmplY3Q+IHByb3h5OwotICAgIGlmIChtYXRjaGVkQ2FwYWJpbGl0aWVzLmdldE9iamVjdCgicHJv
eHkiX3MsIHByb3h5KSkKKworICAgIGF1dG8gcHJveHkgPSBtYXRjaGVkQ2FwYWJpbGl0aWVzLmdl
dE9iamVjdCgicHJveHkiX3MpOworICAgIGlmIChwcm94eSkKICAgICAgICAgY2FwYWJpbGl0aWVz
LnByb3h5ID0gZGVzZXJpYWxpemVQcm94eSgqcHJveHkpOwotICAgIGJvb2wgc3RyaWN0RmlsZUlu
dGVyYWN0YWJpbGl0eTsKLSAgICBpZiAobWF0Y2hlZENhcGFiaWxpdGllcy5nZXRCb29sZWFuKCJz
dHJpY3RGaWxlSW50ZXJhY3RhYmlsaXR5Il9zLCBzdHJpY3RGaWxlSW50ZXJhY3RhYmlsaXR5KSkK
LSAgICAgICAgY2FwYWJpbGl0aWVzLnN0cmljdEZpbGVJbnRlcmFjdGFiaWxpdHkgPSBzdHJpY3RG
aWxlSW50ZXJhY3RhYmlsaXR5OwotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHRpbWVvdXRzOwot
ICAgIGlmIChtYXRjaGVkQ2FwYWJpbGl0aWVzLmdldE9iamVjdCgidGltZW91dHMiX3MsIHRpbWVv
dXRzKSkKKworICAgIGF1dG8gc3RyaWN0RmlsZUludGVyYWN0YWJpbGl0eSA9IG1hdGNoZWRDYXBh
YmlsaXRpZXMuZ2V0Qm9vbGVhbigic3RyaWN0RmlsZUludGVyYWN0YWJpbGl0eSJfcyk7CisgICAg
aWYgKHN0cmljdEZpbGVJbnRlcmFjdGFiaWxpdHkpCisgICAgICAgIGNhcGFiaWxpdGllcy5zdHJp
Y3RGaWxlSW50ZXJhY3RhYmlsaXR5ID0gKnN0cmljdEZpbGVJbnRlcmFjdGFiaWxpdHk7CisKKyAg
ICBhdXRvIHRpbWVvdXRzID0gbWF0Y2hlZENhcGFiaWxpdGllcy5nZXRPYmplY3QoInRpbWVvdXRz
Il9zKTsKKyAgICBpZiAodGltZW91dHMpCiAgICAgICAgIGNhcGFiaWxpdGllcy50aW1lb3V0cyA9
IGRlc2VyaWFsaXplVGltZW91dHMoKnRpbWVvdXRzLCBJZ25vcmVVbmtub3duVGltZW91dDo6Tm8p
OwotICAgIFN0cmluZyBwYWdlTG9hZFN0cmF0ZWd5OwotICAgIGlmIChtYXRjaGVkQ2FwYWJpbGl0
aWVzLmdldFN0cmluZygicGFnZUxvYWRTdHJhdGVneSJfcywgcGFnZUxvYWRTdHJhdGVneSkpCisK
KyAgICBhdXRvIHBhZ2VMb2FkU3RyYXRlZ3kgPSBtYXRjaGVkQ2FwYWJpbGl0aWVzLmdldFN0cmlu
ZygicGFnZUxvYWRTdHJhdGVneSJfcyk7CisgICAgaWYgKCEhcGFnZUxvYWRTdHJhdGVneSkKICAg
ICAgICAgY2FwYWJpbGl0aWVzLnBhZ2VMb2FkU3RyYXRlZ3kgPSBkZXNlcmlhbGl6ZVBhZ2VMb2Fk
U3RyYXRlZ3kocGFnZUxvYWRTdHJhdGVneSk7Ci0gICAgU3RyaW5nIHVuaGFuZGxlZFByb21wdEJl
aGF2aW9yOwotICAgIGlmIChtYXRjaGVkQ2FwYWJpbGl0aWVzLmdldFN0cmluZygidW5oYW5kbGVk
UHJvbXB0QmVoYXZpb3IiX3MsIHVuaGFuZGxlZFByb21wdEJlaGF2aW9yKSkKKworICAgIGF1dG8g
dW5oYW5kbGVkUHJvbXB0QmVoYXZpb3IgPSBtYXRjaGVkQ2FwYWJpbGl0aWVzLmdldFN0cmluZygi
dW5oYW5kbGVkUHJvbXB0QmVoYXZpb3IiX3MpOworICAgIGlmICghIXVuaGFuZGxlZFByb21wdEJl
aGF2aW9yKQogICAgICAgICBjYXBhYmlsaXRpZXMudW5oYW5kbGVkUHJvbXB0QmVoYXZpb3IgPSBk
ZXNlcmlhbGl6ZVVuaGFuZGxlZFByb21wdEJlaGF2aW9yKHVuaGFuZGxlZFByb21wdEJlaGF2aW9y
KTsKKwogICAgIHBsYXRmb3JtUGFyc2VDYXBhYmlsaXRpZXMobWF0Y2hlZENhcGFiaWxpdGllcywg
Y2FwYWJpbGl0aWVzKTsKIH0KIAogYm9vbCBXZWJEcml2ZXJTZXJ2aWNlOjpmaW5kU2Vzc2lvbk9y
Q29tcGxldGVXaXRoRXJyb3IoSlNPTjo6T2JqZWN0JiBwYXJhbWV0ZXJzLCBGdW5jdGlvbjx2b2lk
IChDb21tYW5kUmVzdWx0JiYpPiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgU3RyaW5nIHNl
c3Npb25JRDsKLSAgICBpZiAoIXBhcmFtZXRlcnMuZ2V0U3RyaW5nKCJzZXNzaW9uSWQiX3MsIHNl
c3Npb25JRCkpIHsKKyAgICBhdXRvIHNlc3Npb25JRCA9IHBhcmFtZXRlcnMuZ2V0U3RyaW5nKCJz
ZXNzaW9uSWQiX3MpOworICAgIGlmICghc2Vzc2lvbklEKSB7CiAgICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpJbnZh
bGlkQXJndW1lbnQpKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTUzMCw1MCAr
NTQwLDUwIEBAIFJlZlB0cjxKU09OOjpPYmplY3Q+IFdlYkRyaXZlclNlcnZpY2U6OnZhbGlkYXRl
ZENhcGFiaWxpdGllcyhjb25zdCBKU09OOjpPYmplY3QmCiB7CiAgICAgLy8gwqc3LjIgUHJvY2Vz
c2luZyBDYXBhYmlsaXRpZXMuCiAgICAgLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmRyaXZl
ci93ZWJkcml2ZXItc3BlYy5odG1sI2Rmbi12YWxpZGF0ZS1jYXBhYmlsaXRpZXMKLSAgICBSZWZQ
dHI8SlNPTjo6T2JqZWN0PiByZXN1bHQgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOworICAgIGF1
dG8gcmVzdWx0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICBhdXRvIGVuZCA9IGNhcGFi
aWxpdGllcy5lbmQoKTsKICAgICBmb3IgKGF1dG8gaXQgPSBjYXBhYmlsaXRpZXMuYmVnaW4oKTsg
aXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgIGlmIChpdC0+dmFsdWUtPmlzTnVsbCgpKQogICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgIGlmIChpdC0+a2V5ID09ICJhY2NlcHRJbnNlY3Vy
ZUNlcnRzIikgewotICAgICAgICAgICAgYm9vbCBhY2NlcHRJbnNlY3VyZUNlcnRzOwotICAgICAg
ICAgICAgaWYgKCFpdC0+dmFsdWUtPmFzQm9vbGVhbihhY2NlcHRJbnNlY3VyZUNlcnRzKSkKKyAg
ICAgICAgICAgIGF1dG8gYWNjZXB0SW5zZWN1cmVDZXJ0cyA9IGl0LT52YWx1ZS0+YXNCb29sZWFu
KCk7CisgICAgICAgICAgICBpZiAoIWFjY2VwdEluc2VjdXJlQ2VydHMpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgICAgICByZXN1bHQtPnNldEJvb2xlYW4oaXQtPmtl
eSwgYWNjZXB0SW5zZWN1cmVDZXJ0cyk7CisgICAgICAgICAgICByZXN1bHQtPnNldEJvb2xlYW4o
aXQtPmtleSwgKmFjY2VwdEluc2VjdXJlQ2VydHMpOwogICAgICAgICB9IGVsc2UgaWYgKGl0LT5r
ZXkgPT0gImJyb3dzZXJOYW1lIiB8fCBpdC0+a2V5ID09ICJicm93c2VyVmVyc2lvbiIgfHwgaXQt
PmtleSA9PSAicGxhdGZvcm1OYW1lIikgewotICAgICAgICAgICAgU3RyaW5nIHN0cmluZ1ZhbHVl
OwotICAgICAgICAgICAgaWYgKCFpdC0+dmFsdWUtPmFzU3RyaW5nKHN0cmluZ1ZhbHVlKSkKKyAg
ICAgICAgICAgIGF1dG8gc3RyaW5nVmFsdWUgPSBpdC0+dmFsdWUtPmFzU3RyaW5nKCk7CisgICAg
ICAgICAgICBpZiAoIXN0cmluZ1ZhbHVlKQogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRy
OwogICAgICAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoaXQtPmtleSwgc3RyaW5nVmFsdWUpOwog
ICAgICAgICB9IGVsc2UgaWYgKGl0LT5rZXkgPT0gInBhZ2VMb2FkU3RyYXRlZ3kiKSB7Ci0gICAg
ICAgICAgICBTdHJpbmcgcGFnZUxvYWRTdHJhdGVneTsKLSAgICAgICAgICAgIGlmICghaXQtPnZh
bHVlLT5hc1N0cmluZyhwYWdlTG9hZFN0cmF0ZWd5KSB8fCAhZGVzZXJpYWxpemVQYWdlTG9hZFN0
cmF0ZWd5KHBhZ2VMb2FkU3RyYXRlZ3kpKQorICAgICAgICAgICAgYXV0byBwYWdlTG9hZFN0cmF0
ZWd5ID0gaXQtPnZhbHVlLT5hc1N0cmluZygpOworICAgICAgICAgICAgaWYgKCFwYWdlTG9hZFN0
cmF0ZWd5IHx8ICFkZXNlcmlhbGl6ZVBhZ2VMb2FkU3RyYXRlZ3kocGFnZUxvYWRTdHJhdGVneSkp
CiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgICAgICByZXN1bHQtPnNl
dFN0cmluZyhpdC0+a2V5LCBwYWdlTG9hZFN0cmF0ZWd5KTsKICAgICAgICAgfSBlbHNlIGlmIChp
dC0+a2V5ID09ICJwcm94eSIpIHsKLSAgICAgICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHBy
b3h5OwotICAgICAgICAgICAgaWYgKCFpdC0+dmFsdWUtPmFzT2JqZWN0KHByb3h5KSB8fCAhZGVz
ZXJpYWxpemVQcm94eSgqcHJveHkpKQorICAgICAgICAgICAgYXV0byBwcm94eSA9IGl0LT52YWx1
ZS0+YXNPYmplY3QoKTsKKyAgICAgICAgICAgIGlmICghcHJveHkgfHwgIWRlc2VyaWFsaXplUHJv
eHkoKnByb3h5KSkKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgICAg
IHJlc3VsdC0+c2V0VmFsdWUoaXQtPmtleSwgUmVmUHRyPEpTT046OlZhbHVlPihpdC0+dmFsdWUp
KTsKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0VmFsdWUoaXQtPmtleSwgKnByb3h5KTsKICAgICAg
ICAgfSBlbHNlIGlmIChpdC0+a2V5ID09ICJzdHJpY3RGaWxlSW50ZXJhY3RhYmlsaXR5Iikgewot
ICAgICAgICAgICAgYm9vbCBzdHJpY3RGaWxlSW50ZXJhY3RhYmlsaXR5OwotICAgICAgICAgICAg
aWYgKCFpdC0+dmFsdWUtPmFzQm9vbGVhbihzdHJpY3RGaWxlSW50ZXJhY3RhYmlsaXR5KSkKKyAg
ICAgICAgICAgIGF1dG8gc3RyaWN0RmlsZUludGVyYWN0YWJpbGl0eSA9IGl0LT52YWx1ZS0+YXNC
b29sZWFuKCk7CisgICAgICAgICAgICBpZiAoIXN0cmljdEZpbGVJbnRlcmFjdGFiaWxpdHkpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgICAgICByZXN1bHQtPnNldEJv
b2xlYW4oaXQtPmtleSwgc3RyaWN0RmlsZUludGVyYWN0YWJpbGl0eSk7CisgICAgICAgICAgICBy
ZXN1bHQtPnNldEJvb2xlYW4oaXQtPmtleSwgKnN0cmljdEZpbGVJbnRlcmFjdGFiaWxpdHkpOwog
ICAgICAgICB9IGVsc2UgaWYgKGl0LT5rZXkgPT0gInRpbWVvdXRzIikgewotICAgICAgICAgICAg
UmVmUHRyPEpTT046Ok9iamVjdD4gdGltZW91dHM7Ci0gICAgICAgICAgICBpZiAoIWl0LT52YWx1
ZS0+YXNPYmplY3QodGltZW91dHMpIHx8ICFkZXNlcmlhbGl6ZVRpbWVvdXRzKCp0aW1lb3V0cywg
SWdub3JlVW5rbm93blRpbWVvdXQ6Ok5vKSkKKyAgICAgICAgICAgIGF1dG8gdGltZW91dHMgPSBp
dC0+dmFsdWUtPmFzT2JqZWN0KCk7CisgICAgICAgICAgICBpZiAoIXRpbWVvdXRzIHx8ICFkZXNl
cmlhbGl6ZVRpbWVvdXRzKCp0aW1lb3V0cywgSWdub3JlVW5rbm93blRpbWVvdXQ6Ok5vKSkKICAg
ICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgICAgIHJlc3VsdC0+c2V0VmFs
dWUoaXQtPmtleSwgUmVmUHRyPEpTT046OlZhbHVlPihpdC0+dmFsdWUpKTsKKyAgICAgICAgICAg
IHJlc3VsdC0+c2V0VmFsdWUoaXQtPmtleSwgKnRpbWVvdXRzKTsKICAgICAgICAgfSBlbHNlIGlm
IChpdC0+a2V5ID09ICJ1bmhhbmRsZWRQcm9tcHRCZWhhdmlvciIpIHsKLSAgICAgICAgICAgIFN0
cmluZyB1bmhhbmRsZWRQcm9tcHRCZWhhdmlvcjsKLSAgICAgICAgICAgIGlmICghaXQtPnZhbHVl
LT5hc1N0cmluZyh1bmhhbmRsZWRQcm9tcHRCZWhhdmlvcikgfHwgIWRlc2VyaWFsaXplVW5oYW5k
bGVkUHJvbXB0QmVoYXZpb3IodW5oYW5kbGVkUHJvbXB0QmVoYXZpb3IpKQorICAgICAgICAgICAg
YXV0byB1bmhhbmRsZWRQcm9tcHRCZWhhdmlvciA9IGl0LT52YWx1ZS0+YXNTdHJpbmcoKTsKKyAg
ICAgICAgICAgIGlmICghdW5oYW5kbGVkUHJvbXB0QmVoYXZpb3IgfHwgIWRlc2VyaWFsaXplVW5o
YW5kbGVkUHJvbXB0QmVoYXZpb3IodW5oYW5kbGVkUHJvbXB0QmVoYXZpb3IpKQogICAgICAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoaXQt
PmtleSwgdW5oYW5kbGVkUHJvbXB0QmVoYXZpb3IpOwogICAgICAgICB9IGVsc2UgaWYgKGl0LT5r
ZXkuZmluZCgiOiIpICE9IG5vdEZvdW5kKSB7CiAgICAgICAgICAgICBpZiAoIXBsYXRmb3JtVmFs
aWRhdGVDYXBhYmlsaXR5KGl0LT5rZXksIGl0LT52YWx1ZSkpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0gICAgICAgICAgICByZXN1bHQtPnNldFZhbHVlKGl0LT5rZXksIFJlZlB0
cjxKU09OOjpWYWx1ZT4oaXQtPnZhbHVlKSk7CisgICAgICAgICAgICByZXN1bHQtPnNldFZhbHVl
KGl0LT5rZXksIGl0LT52YWx1ZS5jb3B5UmVmKCkpOwogICAgICAgICB9IGVsc2UKICAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOwogICAgIH0KQEAgLTU4NCwxNCArNTk0LDE0IEBAIFJlZlB0cjxK
U09OOjpPYmplY3Q+IFdlYkRyaXZlclNlcnZpY2U6Om1lcmdlQ2FwYWJpbGl0aWVzKGNvbnN0IEpT
T046Ok9iamVjdCYgcmVxCiB7CiAgICAgLy8gwqc3LjIgUHJvY2Vzc2luZyBDYXBhYmlsaXRpZXMu
CiAgICAgLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmRyaXZlci93ZWJkcml2ZXItc3BlYy5o
dG1sI2Rmbi1tZXJnaW5nLWNhcGFiaWxpdGllcwotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHJl
c3VsdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAgYXV0byByZXN1bHQgPSBKU09OOjpP
YmplY3Q6OmNyZWF0ZSgpOwogICAgIGF1dG8gcmVxdWlyZWRFbmQgPSByZXF1aXJlZENhcGFiaWxp
dGllcy5lbmQoKTsKICAgICBmb3IgKGF1dG8gaXQgPSByZXF1aXJlZENhcGFiaWxpdGllcy5iZWdp
bigpOyBpdCAhPSByZXF1aXJlZEVuZDsgKytpdCkKLSAgICAgICAgcmVzdWx0LT5zZXRWYWx1ZShp
dC0+a2V5LCBSZWZQdHI8SlNPTjo6VmFsdWU+KGl0LT52YWx1ZSkpOworICAgICAgICByZXN1bHQt
PnNldFZhbHVlKGl0LT5rZXksIGl0LT52YWx1ZS5jb3B5UmVmKCkpOwogCiAgICAgYXV0byBmaXJz
dE1hdGNoRW5kID0gZmlyc3RNYXRjaENhcGFiaWxpdGllcy5lbmQoKTsKICAgICBmb3IgKGF1dG8g
aXQgPSBmaXJzdE1hdGNoQ2FwYWJpbGl0aWVzLmJlZ2luKCk7IGl0ICE9IGZpcnN0TWF0Y2hFbmQ7
ICsraXQpCi0gICAgICAgIHJlc3VsdC0+c2V0VmFsdWUoaXQtPmtleSwgUmVmUHRyPEpTT046OlZh
bHVlPihpdC0+dmFsdWUpKTsKKyAgICAgICAgcmVzdWx0LT5zZXRWYWx1ZShpdC0+a2V5LCBpdC0+
dmFsdWUuY29weVJlZigpKTsKIAogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC02MDQsNyArNjE0
LDcgQEAgUmVmUHRyPEpTT046Ok9iamVjdD4gV2ViRHJpdmVyU2VydmljZTo6bWF0Y2hDYXBhYmls
aXRpZXMoY29uc3QgSlNPTjo6T2JqZWN0JiBtZXIKIAogICAgIC8vIFNvbWUgY2FwYWJpbGl0aWVz
IGxpa2UgYnJvd3NlciBuYW1lIGFuZCB2ZXJzaW9uIG1pZ2h0IG5lZWQgdG8gbGF1bmNoIHRoZSBi
cm93c2VyLAogICAgIC8vIHNvIHdlIG9ubHkgcmVqZWN0IHRoZSBrbm93biBjYXBhYmlsaXRpZXMg
dGhhdCBkb24ndCBtYXRjaC4KLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBtYXRjaGVkQ2FwYWJp
bGl0aWVzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICBhdXRvIG1hdGNoZWRDYXBhYmls
aXRpZXMgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwogICAgIGlmIChwbGF0Zm9ybUNhcGFiaWxp
dGllcy5icm93c2VyTmFtZSkKICAgICAgICAgbWF0Y2hlZENhcGFiaWxpdGllcy0+c2V0U3RyaW5n
KCJicm93c2VyTmFtZSJfcywgcGxhdGZvcm1DYXBhYmlsaXRpZXMuYnJvd3Nlck5hbWUudmFsdWUo
KSk7CiAgICAgaWYgKHBsYXRmb3JtQ2FwYWJpbGl0aWVzLmJyb3dzZXJWZXJzaW9uKQpAQCAtNjIx
LDM1ICs2MzEsMjggQEAgUmVmUHRyPEpTT046Ok9iamVjdD4gV2ViRHJpdmVyU2VydmljZTo6bWF0
Y2hDYXBhYmlsaXRpZXMoY29uc3QgSlNPTjo6T2JqZWN0JiBtZXIKICAgICBhdXRvIGVuZCA9IG1l
cmdlZENhcGFiaWxpdGllcy5lbmQoKTsKICAgICBmb3IgKGF1dG8gaXQgPSBtZXJnZWRDYXBhYmls
aXRpZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgIGlmIChpdC0+a2V5ID09
ICJicm93c2VyTmFtZSIgJiYgcGxhdGZvcm1DYXBhYmlsaXRpZXMuYnJvd3Nlck5hbWUpIHsKLSAg
ICAgICAgICAgIFN0cmluZyBicm93c2VyTmFtZTsKLSAgICAgICAgICAgIGl0LT52YWx1ZS0+YXNT
dHJpbmcoYnJvd3Nlck5hbWUpOworICAgICAgICAgICAgYXV0byBicm93c2VyTmFtZSA9IGl0LT52
YWx1ZS0+YXNTdHJpbmcoKTsKICAgICAgICAgICAgIGlmICghZXF1YWxJZ25vcmluZ0FTQ0lJQ2Fz
ZShwbGF0Zm9ybUNhcGFiaWxpdGllcy5icm93c2VyTmFtZS52YWx1ZSgpLCBicm93c2VyTmFtZSkp
CiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIH0gZWxzZSBpZiAoaXQt
PmtleSA9PSAiYnJvd3NlclZlcnNpb24iICYmIHBsYXRmb3JtQ2FwYWJpbGl0aWVzLmJyb3dzZXJW
ZXJzaW9uKSB7Ci0gICAgICAgICAgICBTdHJpbmcgYnJvd3NlclZlcnNpb247Ci0gICAgICAgICAg
ICBpdC0+dmFsdWUtPmFzU3RyaW5nKGJyb3dzZXJWZXJzaW9uKTsKKyAgICAgICAgICAgIGF1dG8g
YnJvd3NlclZlcnNpb24gPSBpdC0+dmFsdWUtPmFzU3RyaW5nKCk7CiAgICAgICAgICAgICBpZiAo
IXBsYXRmb3JtQ29tcGFyZUJyb3dzZXJWZXJzaW9ucyhicm93c2VyVmVyc2lvbiwgcGxhdGZvcm1D
YXBhYmlsaXRpZXMuYnJvd3NlclZlcnNpb24udmFsdWUoKSkpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAgICAgICAgIH0gZWxzZSBpZiAoaXQtPmtleSA9PSAicGxhdGZvcm1OYW1l
IiAmJiBwbGF0Zm9ybUNhcGFiaWxpdGllcy5wbGF0Zm9ybU5hbWUpIHsKLSAgICAgICAgICAgIFN0
cmluZyBwbGF0Zm9ybU5hbWU7Ci0gICAgICAgICAgICBpdC0+dmFsdWUtPmFzU3RyaW5nKHBsYXRm
b3JtTmFtZSk7CisgICAgICAgICAgICBhdXRvIHBsYXRmb3JtTmFtZSA9IGl0LT52YWx1ZS0+YXNT
dHJpbmcoKTsKICAgICAgICAgICAgIGlmICghZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uo
cGxhdGZvcm1OYW1lLCAiYW55IikgJiYgcGxhdGZvcm1DYXBhYmlsaXRpZXMucGxhdGZvcm1OYW1l
LnZhbHVlKCkgIT0gcGxhdGZvcm1OYW1lKQogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRy
OwogICAgICAgICB9IGVsc2UgaWYgKGl0LT5rZXkgPT0gImFjY2VwdEluc2VjdXJlQ2VydHMiICYm
IHBsYXRmb3JtQ2FwYWJpbGl0aWVzLmFjY2VwdEluc2VjdXJlQ2VydHMpIHsKLSAgICAgICAgICAg
IGJvb2wgYWNjZXB0SW5zZWN1cmVDZXJ0czsKLSAgICAgICAgICAgIGl0LT52YWx1ZS0+YXNCb29s
ZWFuKGFjY2VwdEluc2VjdXJlQ2VydHMpOworICAgICAgICAgICAgYXV0byBhY2NlcHRJbnNlY3Vy
ZUNlcnRzID0gaXQtPnZhbHVlLT5hc0Jvb2xlYW4oKTsKICAgICAgICAgICAgIGlmIChhY2NlcHRJ
bnNlY3VyZUNlcnRzICYmICFwbGF0Zm9ybUNhcGFiaWxpdGllcy5hY2NlcHRJbnNlY3VyZUNlcnRz
LnZhbHVlKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIH0gZWxz
ZSBpZiAoaXQtPmtleSA9PSAicHJveHkiKSB7Ci0gICAgICAgICAgICBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiBwcm94eTsKLSAgICAgICAgICAgIGl0LT52YWx1ZS0+YXNPYmplY3QocHJveHkpOwotICAg
ICAgICAgICAgU3RyaW5nIHByb3h5VHlwZTsKLSAgICAgICAgICAgIHByb3h5LT5nZXRTdHJpbmco
InByb3h5VHlwZSJfcywgcHJveHlUeXBlKTsKKyAgICAgICAgICAgIGF1dG8gcHJveHlUeXBlID0g
aXQtPnZhbHVlLT5hc09iamVjdCgpLT5nZXRTdHJpbmcoInByb3h5VHlwZSJfcyk7CiAgICAgICAg
ICAgICBpZiAoIXBsYXRmb3JtU3VwcG9ydFByb3h5VHlwZShwcm94eVR5cGUpKQogICAgICAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICB9IGVsc2UgaWYgKCFwbGF0Zm9ybU1hdGNo
Q2FwYWJpbGl0eShpdC0+a2V5LCBpdC0+dmFsdWUpKQogICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0gICAgICAgIG1hdGNoZWRDYXBhYmlsaXRpZXMtPnNldFZhbHVlKGl0LT5rZXksIFJlZlB0
cjxKU09OOjpWYWx1ZT4oaXQtPnZhbHVlKSk7CisgICAgICAgIG1hdGNoZWRDYXBhYmlsaXRpZXMt
PnNldFZhbHVlKGl0LT5rZXksIGl0LT52YWx1ZS5jb3B5UmVmKCkpOwogICAgIH0KIAogICAgIHJl
dHVybiBtYXRjaGVkQ2FwYWJpbGl0aWVzOwpAQCAtNjYxLDE5ICs2NjQsMTkgQEAgVmVjdG9yPENh
cGFiaWxpdGllcz4gV2ViRHJpdmVyU2VydmljZTo6cHJvY2Vzc0NhcGFiaWxpdGllcyhjb25zdCBK
U09OOjpPYmplY3QmIHAKICAgICAvLyBodHRwczovL3czYy5naXRodWIuaW8vd2ViZHJpdmVyL3dl
YmRyaXZlci1zcGVjLmh0bWwjcHJvY2Vzc2luZy1jYXBhYmlsaXRpZXMKIAogICAgIC8vIDEuIExl
dCBjYXBhYmlsaXRpZXMgcmVxdWVzdCBiZSB0aGUgcmVzdWx0IG9mIGdldHRpbmcgdGhlIHByb3Bl
cnR5ICJjYXBhYmlsaXRpZXMiIGZyb20gcGFyYW1ldGVycy4KLSAgICBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiBjYXBhYmlsaXRpZXNPYmplY3Q7Ci0gICAgaWYgKCFwYXJhbWV0ZXJzLmdldE9iamVjdCgi
Y2FwYWJpbGl0aWVzIl9zLCBjYXBhYmlsaXRpZXNPYmplY3QpKSB7CisgICAgYXV0byBjYXBhYmls
aXRpZXNPYmplY3QgPSBwYXJhbWV0ZXJzLmdldE9iamVjdCgiY2FwYWJpbGl0aWVzIl9zKTsKKyAg
ICBpZiAoIWNhcGFiaWxpdGllc09iamVjdCkgewogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihD
b21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6SW52YWxpZEFyZ3Vt
ZW50KSk7CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogCiAgICAgLy8gMi4gTGV0IHJlcXVp
cmVkIGNhcGFiaWxpdGllcyBiZSB0aGUgcmVzdWx0IG9mIGdldHRpbmcgdGhlIHByb3BlcnR5ICJh
bHdheXNNYXRjaCIgZnJvbSBjYXBhYmlsaXRpZXMgcmVxdWVzdC4KLSAgICBSZWZQdHI8SlNPTjo6
VmFsdWU+IHJlcXVpcmVkQ2FwYWJpbGl0aWVzVmFsdWU7CiAgICAgUmVmUHRyPEpTT046Ok9iamVj
dD4gcmVxdWlyZWRDYXBhYmlsaXRpZXM7Ci0gICAgaWYgKCFjYXBhYmlsaXRpZXNPYmplY3QtPmdl
dFZhbHVlKCJhbHdheXNNYXRjaCJfcywgcmVxdWlyZWRDYXBhYmlsaXRpZXNWYWx1ZSkpCisgICAg
YXV0byByZXF1aXJlZENhcGFiaWxpdGllc1ZhbHVlID0gY2FwYWJpbGl0aWVzT2JqZWN0LT5nZXRW
YWx1ZSgiYWx3YXlzTWF0Y2giX3MpOworICAgIGlmICghcmVxdWlyZWRDYXBhYmlsaXRpZXNWYWx1
ZSkgewogICAgICAgICAvLyAyLjEuIElmIHJlcXVpcmVkIGNhcGFiaWxpdGllcyBpcyB1bmRlZmlu
ZWQsIHNldCB0aGUgdmFsdWUgdG8gYW4gZW1wdHkgSlNPTiBPYmplY3QuCiAgICAgICAgIHJlcXVp
cmVkQ2FwYWJpbGl0aWVzID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKLSAgICBlbHNlIGlmICgh
cmVxdWlyZWRDYXBhYmlsaXRpZXNWYWx1ZS0+YXNPYmplY3QocmVxdWlyZWRDYXBhYmlsaXRpZXMp
KSB7CisgICAgfSBlbHNlIGlmICghKHJlcXVpcmVkQ2FwYWJpbGl0aWVzID0gcmVxdWlyZWRDYXBh
YmlsaXRpZXNWYWx1ZS0+YXNPYmplY3QoKSkpIHsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIo
Q29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OkludmFsaWRBcmd1
bWVudCwgU3RyaW5nKCJhbHdheXNNYXRjaCBpcyBpbnZhbGlkIGluIGNhcGFiaWxpdGllcyIpKSk7
CiAgICAgICAgIHJldHVybiB7IH07CiAgICAgfQpAQCAtNjg2LDE2ICs2ODksMTkgQEAgVmVjdG9y
PENhcGFiaWxpdGllcz4gV2ViRHJpdmVyU2VydmljZTo6cHJvY2Vzc0NhcGFiaWxpdGllcyhjb25z
dCBKU09OOjpPYmplY3QmIHAKICAgICB9CiAKICAgICAvLyAzLiBMZXQgYWxsIGZpcnN0IG1hdGNo
IGNhcGFiaWxpdGllcyBiZSB0aGUgcmVzdWx0IG9mIGdldHRpbmcgdGhlIHByb3BlcnR5ICJmaXJz
dE1hdGNoIiBmcm9tIGNhcGFiaWxpdGllcyByZXF1ZXN0LgotICAgIFJlZlB0cjxKU09OOjpWYWx1
ZT4gZmlyc3RNYXRjaENhcGFiaWxpdGllc1ZhbHVlOwogICAgIFJlZlB0cjxKU09OOjpBcnJheT4g
Zmlyc3RNYXRjaENhcGFiaWxpdGllc0xpc3Q7Ci0gICAgaWYgKCFjYXBhYmlsaXRpZXNPYmplY3Qt
PmdldFZhbHVlKCJmaXJzdE1hdGNoIl9zLCBmaXJzdE1hdGNoQ2FwYWJpbGl0aWVzVmFsdWUpKSB7
CisgICAgYXV0byBmaXJzdE1hdGNoQ2FwYWJpbGl0aWVzVmFsdWUgPSBjYXBhYmlsaXRpZXNPYmpl
Y3QtPmdldFZhbHVlKCJmaXJzdE1hdGNoIl9zKTsKKyAgICBpZiAoIWZpcnN0TWF0Y2hDYXBhYmls
aXRpZXNWYWx1ZSkgewogICAgICAgICAvLyAzLjEuIElmIGFsbCBmaXJzdCBtYXRjaCBjYXBhYmls
aXRpZXMgaXMgdW5kZWZpbmVkLCBzZXQgdGhlIHZhbHVlIHRvIGEgSlNPTiBMaXN0IHdpdGggYSBz
aW5nbGUgZW50cnkgb2YgYW4gZW1wdHkgSlNPTiBPYmplY3QuCiAgICAgICAgIGZpcnN0TWF0Y2hD
YXBhYmlsaXRpZXNMaXN0ID0gSlNPTjo6QXJyYXk6OmNyZWF0ZSgpOwogICAgICAgICBmaXJzdE1h
dGNoQ2FwYWJpbGl0aWVzTGlzdC0+cHVzaE9iamVjdChKU09OOjpPYmplY3Q6OmNyZWF0ZSgpKTsK
LSAgICB9IGVsc2UgaWYgKCFmaXJzdE1hdGNoQ2FwYWJpbGl0aWVzVmFsdWUtPmFzQXJyYXkoZmly
c3RNYXRjaENhcGFiaWxpdGllc0xpc3QpKSB7Ci0gICAgICAgIC8vIDMuMi4gSWYgYWxsIGZpcnN0
IG1hdGNoIGNhcGFiaWxpdGllcyBpcyBub3QgYSBKU09OIExpc3QsIHJldHVybiBlcnJvciB3aXRo
IGVycm9yIGNvZGUgaW52YWxpZCBhcmd1bWVudC4KLSAgICAgICAgY29tcGxldGlvbkhhbmRsZXIo
Q29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OkludmFsaWRBcmd1
bWVudCwgU3RyaW5nKCJmaXJzdE1hdGNoIGlzIGludmFsaWQgaW4gY2FwYWJpbGl0aWVzIikpKTsK
LSAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9IGVsc2UgeworICAgICAgICBmaXJzdE1hdGNoQ2Fw
YWJpbGl0aWVzTGlzdCA9IGZpcnN0TWF0Y2hDYXBhYmlsaXRpZXNWYWx1ZS0+YXNBcnJheSgpOwor
ICAgICAgICBpZiAoIWZpcnN0TWF0Y2hDYXBhYmlsaXRpZXNMaXN0KSB7CisgICAgICAgICAgICAv
LyAzLjIuIElmIGFsbCBmaXJzdCBtYXRjaCBjYXBhYmlsaXRpZXMgaXMgbm90IGEgSlNPTiBMaXN0
LCByZXR1cm4gZXJyb3Igd2l0aCBlcnJvciBjb2RlIGludmFsaWQgYXJndW1lbnQuCisgICAgICAg
ICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6
OkVycm9yQ29kZTo6SW52YWxpZEFyZ3VtZW50LCBTdHJpbmcoImZpcnN0TWF0Y2ggaXMgaW52YWxp
ZCBpbiBjYXBhYmlsaXRpZXMiKSkpOworICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAg
fQogICAgIH0KIAogICAgIC8vIDQuIExldCB2YWxpZGF0ZWQgZmlyc3QgbWF0Y2ggY2FwYWJpbGl0
aWVzIGJlIGFuIGVtcHR5IEpTT04gTGlzdC4KQEAgLTcwNCw5ICs3MTAsOCBAQCBWZWN0b3I8Q2Fw
YWJpbGl0aWVzPiBXZWJEcml2ZXJTZXJ2aWNlOjpwcm9jZXNzQ2FwYWJpbGl0aWVzKGNvbnN0IEpT
T046Ok9iamVjdCYgcAogICAgIHZhbGlkYXRlZEZpcnN0TWF0Y2hDYXBhYmlsaXRpZXNMaXN0LnJl
c2VydmVJbml0aWFsQ2FwYWNpdHkoZmlyc3RNYXRjaENhcGFiaWxpdGllc0xpc3RMZW5ndGgpOwog
ICAgIC8vIDUuIEZvciBlYWNoIGZpcnN0IG1hdGNoIGNhcGFiaWxpdGllcyBjb3JyZXNwb25kaW5n
IHRvIGFuIGluZGV4ZWQgcHJvcGVydHkgaW4gYWxsIGZpcnN0IG1hdGNoIGNhcGFiaWxpdGllcy4K
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZmlyc3RNYXRjaENhcGFiaWxpdGllc0xpc3RM
ZW5ndGg7ICsraSkgewotICAgICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IGZpcnN0TWF0Y2hDYXBh
YmlsaXRpZXNWYWx1ZSA9IGZpcnN0TWF0Y2hDYXBhYmlsaXRpZXNMaXN0LT5nZXQoaSk7Ci0gICAg
ICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IGZpcnN0TWF0Y2hDYXBhYmlsaXRpZXM7Ci0gICAgICAg
IGlmICghZmlyc3RNYXRjaENhcGFiaWxpdGllc1ZhbHVlLT5hc09iamVjdChmaXJzdE1hdGNoQ2Fw
YWJpbGl0aWVzKSkgeworICAgICAgICBhdXRvIGZpcnN0TWF0Y2hDYXBhYmlsaXRpZXMgPSBmaXJz
dE1hdGNoQ2FwYWJpbGl0aWVzTGlzdC0+Z2V0KGkpLT5hc09iamVjdCgpOworICAgICAgICBpZiAo
IWZpcnN0TWF0Y2hDYXBhYmlsaXRpZXMpIHsKICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVy
KENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpJbnZhbGlkQXJn
dW1lbnQsIFN0cmluZygiSW52YWxpZCBjYXBhYmlsaXRpZXMgZm91bmQgaW4gZmlyc3RNYXRjaCIp
KSk7CiAgICAgICAgICAgICByZXR1cm4geyB9OwogICAgICAgICB9CkBAIC04MTUsOSArODIwLDkg
QEAgdm9pZCBXZWJEcml2ZXJTZXJ2aWNlOjpjcmVhdGVTZXNzaW9uKFZlY3RvcjxDYXBhYmlsaXRp
ZXM+JiYgY2FwYWJpbGl0aWVzTGlzdCwgc3QKIAogICAgICAgICAgICAgbV9zZXNzaW9uID0gV1RG
TW92ZShzZXNzaW9uKTsKIAotICAgICAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcmVzdWx0
T2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0
T2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICAgICAgIHJlc3VsdE9iamVj
dC0+c2V0U3RyaW5nKCJzZXNzaW9uSWQiX3MsIG1fc2Vzc2lvbi0+aWQoKSk7Ci0gICAgICAgICAg
ICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBjYXBhYmlsaXRpZXNPYmplY3QgPSBKU09OOjpPYmplY3Q6
OmNyZWF0ZSgpOworICAgICAgICAgICAgYXV0byBjYXBhYmlsaXRpZXNPYmplY3QgPSBKU09OOjpP
YmplY3Q6OmNyZWF0ZSgpOwogICAgICAgICAgICAgY29uc3QgYXV0byYgY2FwYWJpbGl0aWVzID0g
bV9zZXNzaW9uLT5jYXBhYmlsaXRpZXMoKTsKICAgICAgICAgICAgIGNhcGFiaWxpdGllc09iamVj
dC0+c2V0U3RyaW5nKCJicm93c2VyTmFtZSJfcywgY2FwYWJpbGl0aWVzLmJyb3dzZXJOYW1lLnZh
bHVlT3IoZW1wdHlTdHJpbmcoKSkpOwogICAgICAgICAgICAgY2FwYWJpbGl0aWVzT2JqZWN0LT5z
ZXRTdHJpbmcoImJyb3dzZXJWZXJzaW9uIl9zLCBjYXBhYmlsaXRpZXMuYnJvd3NlclZlcnNpb24u
dmFsdWVPcihlbXB0eVN0cmluZygpKSk7CkBAIC04NTUsNyArODYwLDcgQEAgdm9pZCBXZWJEcml2
ZXJTZXJ2aWNlOjpjcmVhdGVTZXNzaW9uKFZlY3RvcjxDYXBhYmlsaXRpZXM+JiYgY2FwYWJpbGl0
aWVzTGlzdCwgc3QKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmICghY2FwYWJpbGl0aWVz
LnByb3h5KQogICAgICAgICAgICAgICAgIGNhcGFiaWxpdGllc09iamVjdC0+c2V0T2JqZWN0KCJw
cm94eSJfcywgSlNPTjo6T2JqZWN0OjpjcmVhdGUoKSk7Ci0gICAgICAgICAgICBSZWZQdHI8SlNP
Tjo6T2JqZWN0PiB0aW1lb3V0c09iamVjdCA9IEpTT046Ok9iamVjdDo6Y3JlYXRlKCk7CisgICAg
ICAgICAgICBhdXRvIHRpbWVvdXRzT2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAg
ICAgICAgICAgIGlmIChtX3Nlc3Npb24tPnNjcmlwdFRpbWVvdXQoKSA9PSBzdGQ6Om51bWVyaWNf
bGltaXRzPGRvdWJsZT46OmluZmluaXR5KCkpCiAgICAgICAgICAgICAgICAgdGltZW91dHNPYmpl
Y3QtPnNldFZhbHVlKCJzY3JpcHQiX3MsIEpTT046OlZhbHVlOjpudWxsKCkpOwogICAgICAgICAg
ICAgZWxzZQpAQCAtODc0LDggKzg3OSw4IEBAIHZvaWQgV2ViRHJpdmVyU2VydmljZTo6ZGVsZXRl
U2Vzc2lvbihSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMsIEZ1bmN0aW9uCiB7CiAg
ICAgLy8gwqc4LjIgRGVsZXRlIFNlc3Npb24uCiAgICAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RS
L3dlYmRyaXZlci8jZGVsZXRlLXNlc3Npb24KLSAgICBTdHJpbmcgc2Vzc2lvbklEOwotICAgIGlm
ICghcGFyYW1ldGVycy0+Z2V0U3RyaW5nKCJzZXNzaW9uSWQiX3MsIHNlc3Npb25JRCkpIHsKKyAg
ICBhdXRvIHNlc3Npb25JRCA9IHBhcmFtZXRlcnMtPmdldFN0cmluZygic2Vzc2lvbklkIl9zKTsK
KyAgICBpZiAoIXNlc3Npb25JRCkgewogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5k
UmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6SW52YWxpZEFyZ3VtZW50KSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC05MzgsOCArOTQzLDggQEAgdm9pZCBXZWJEcml2
ZXJTZXJ2aWNlOjpnbyhSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMsIEZ1bmN0aW9u
PHZvaWQgKENvbW0KICAgICBpZiAoIWZpbmRTZXNzaW9uT3JDb21wbGV0ZVdpdGhFcnJvcigqcGFy
YW1ldGVycywgY29tcGxldGlvbkhhbmRsZXIpKQogICAgICAgICByZXR1cm47CiAKLSAgICBTdHJp
bmcgdXJsOwotICAgIGlmICghcGFyYW1ldGVycy0+Z2V0U3RyaW5nKCJ1cmwiX3MsIHVybCkpIHsK
KyAgICBhdXRvIHVybCA9IHBhcmFtZXRlcnMtPmdldFN0cmluZygidXJsIl9zKTsKKyAgICBpZiAo
IXVybCkgewogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENv
bW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6SW52YWxpZEFyZ3VtZW50KSk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CkBAIC0xMDUzLDkgKzEwNTgsOCBAQCB2b2lkIFdlYkRyaXZlclNlcnZpY2U6OnNl
dFdpbmRvd1JlY3QoUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzLCBGdW5jdGlvbgog
ewogICAgIC8vIMKnMTAuNy4yIFNldCBXaW5kb3cgUmVjdC4KICAgICAvLyBodHRwczovL3czYy5n
aXRodWIuaW8vd2ViZHJpdmVyL3dlYmRyaXZlci1zcGVjLmh0bWwjc2V0LXdpbmRvdy1yZWN0Ci0g
ICAgUmVmUHRyPEpTT046OlZhbHVlPiB2YWx1ZTsKICAgICBPcHRpb25hbDxkb3VibGU+IHdpZHRo
OwotICAgIGlmIChwYXJhbWV0ZXJzLT5nZXRWYWx1ZSgid2lkdGgiX3MsIHZhbHVlKSkgeworICAg
IGlmIChhdXRvIHZhbHVlID0gcGFyYW1ldGVycy0+Z2V0VmFsdWUoIndpZHRoIl9zKSkgewogICAg
ICAgICBpZiAoYXV0byBudW1iZXIgPSB2YWx1ZUFzTnVtYmVySW5SYW5nZSgqdmFsdWUpKQogICAg
ICAgICAgICAgd2lkdGggPSBudW1iZXI7CiAgICAgICAgIGVsc2UgaWYgKCF2YWx1ZS0+aXNOdWxs
KCkpIHsKQEAgLTEwNjQsNyArMTA2OCw3IEBAIHZvaWQgV2ViRHJpdmVyU2VydmljZTo6c2V0V2lu
ZG93UmVjdChSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMsIEZ1bmN0aW9uCiAgICAg
ICAgIH0KICAgICB9CiAgICAgT3B0aW9uYWw8ZG91YmxlPiBoZWlnaHQ7Ci0gICAgaWYgKHBhcmFt
ZXRlcnMtPmdldFZhbHVlKCJoZWlnaHQiX3MsIHZhbHVlKSkgeworICAgIGlmIChhdXRvIHZhbHVl
ID0gcGFyYW1ldGVycy0+Z2V0VmFsdWUoImhlaWdodCJfcykpIHsKICAgICAgICAgaWYgKGF1dG8g
bnVtYmVyID0gdmFsdWVBc051bWJlckluUmFuZ2UoKnZhbHVlKSkKICAgICAgICAgICAgIGhlaWdo
dCA9IG51bWJlcjsKICAgICAgICAgZWxzZSBpZiAoIXZhbHVlLT5pc051bGwoKSkgewpAQCAtMTA3
Myw3ICsxMDc3LDcgQEAgdm9pZCBXZWJEcml2ZXJTZXJ2aWNlOjpzZXRXaW5kb3dSZWN0KFJlZlB0
cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycywgRnVuY3Rpb24KICAgICAgICAgfQogICAgIH0K
ICAgICBPcHRpb25hbDxkb3VibGU+IHg7Ci0gICAgaWYgKHBhcmFtZXRlcnMtPmdldFZhbHVlKCJ4
Il9zLCB2YWx1ZSkpIHsKKyAgICBpZiAoYXV0byB2YWx1ZSA9IHBhcmFtZXRlcnMtPmdldFZhbHVl
KCJ4Il9zKSkgewogICAgICAgICBpZiAoYXV0byBudW1iZXIgPSB2YWx1ZUFzTnVtYmVySW5SYW5n
ZSgqdmFsdWUsIElOVF9NSU4pKQogICAgICAgICAgICAgeCA9IG51bWJlcjsKICAgICAgICAgZWxz
ZSBpZiAoIXZhbHVlLT5pc051bGwoKSkgewpAQCAtMTA4Miw3ICsxMDg2LDcgQEAgdm9pZCBXZWJE
cml2ZXJTZXJ2aWNlOjpzZXRXaW5kb3dSZWN0KFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1l
dGVycywgRnVuY3Rpb24KICAgICAgICAgfQogICAgIH0KICAgICBPcHRpb25hbDxkb3VibGU+IHk7
Ci0gICAgaWYgKHBhcmFtZXRlcnMtPmdldFZhbHVlKCJ5Il9zLCB2YWx1ZSkpIHsKKyAgICBpZiAo
YXV0byB2YWx1ZSA9IHBhcmFtZXRlcnMtPmdldFZhbHVlKCJ5Il9zKSkgewogICAgICAgICBpZiAo
YXV0byBudW1iZXIgPSB2YWx1ZUFzTnVtYmVySW5SYW5nZSgqdmFsdWUsIElOVF9NSU4pKQogICAg
ICAgICAgICAgeSA9IG51bWJlcjsKICAgICAgICAgZWxzZSBpZiAoIXZhbHVlLT5pc051bGwoKSkg
ewpAQCAtMTEzNSw4ICsxMTM5LDggQEAgdm9pZCBXZWJEcml2ZXJTZXJ2aWNlOjpjbG9zZVdpbmRv
dyhSZWZQdHI8SlNPTjo6T2JqZWN0PiYmIHBhcmFtZXRlcnMsIEZ1bmN0aW9uPHYKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIFJlZlB0cjxKU09OOjpBcnJheT4gaGFu
ZGxlczsKLSAgICAgICAgaWYgKHJlc3VsdC5yZXN1bHQoKS0+YXNBcnJheShoYW5kbGVzKSAmJiAh
aGFuZGxlcy0+bGVuZ3RoKCkpCisgICAgICAgIGF1dG8gaGFuZGxlcyA9IHJlc3VsdC5yZXN1bHQo
KS0+YXNBcnJheSgpOworICAgICAgICBpZiAoaGFuZGxlcyAmJiAhaGFuZGxlcy0+bGVuZ3RoKCkp
CiAgICAgICAgICAgICBtX3Nlc3Npb24gPSBudWxscHRyOwogCiAgICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKFdURk1vdmUocmVzdWx0KSk7CkBAIC0xMTUwLDggKzExNTQsOCBAQCB2b2lkIFdlYkRy
aXZlclNlcnZpY2U6OnN3aXRjaFRvV2luZG93KFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1l
dGVycywgRnVuY3RpbwogICAgIGlmICghZmluZFNlc3Npb25PckNvbXBsZXRlV2l0aEVycm9yKCpw
YXJhbWV0ZXJzLCBjb21wbGV0aW9uSGFuZGxlcikpCiAgICAgICAgIHJldHVybjsKIAotICAgIFN0
cmluZyBoYW5kbGU7Ci0gICAgaWYgKCFwYXJhbWV0ZXJzLT5nZXRTdHJpbmcoImhhbmRsZSJfcywg
aGFuZGxlKSkgeworICAgIGF1dG8gaGFuZGxlID0gcGFyYW1ldGVycy0+Z2V0U3RyaW5nKCJoYW5k
bGUiX3MpOworICAgIGlmICghaGFuZGxlKSB7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENv
bW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpJbnZhbGlkQXJndW1l
bnQpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTExNzUsMTMgKzExNzksMTEgQEAgdm9p
ZCBXZWJEcml2ZXJTZXJ2aWNlOjpuZXdXaW5kb3coUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJh
bWV0ZXJzLCBGdW5jdGlvbjx2b2kKICAgICAgICAgcmV0dXJuOwogCiAgICAgT3B0aW9uYWw8U3Ry
aW5nPiB0eXBlSGludDsKLSAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHZhbHVlOwotICAgIGlmIChw
YXJhbWV0ZXJzLT5nZXRWYWx1ZSgidHlwZSJfcywgdmFsdWUpKSB7Ci0gICAgICAgIFN0cmluZyB2
YWx1ZVN0cmluZzsKLSAgICAgICAgaWYgKHZhbHVlLT5hc1N0cmluZyh2YWx1ZVN0cmluZykpIHsK
LSAgICAgICAgICAgIGlmICh2YWx1ZVN0cmluZyA9PSAid2luZG93IiB8fCB2YWx1ZVN0cmluZyA9
PSAidGFiIikKLSAgICAgICAgICAgICAgICB0eXBlSGludCA9IHZhbHVlU3RyaW5nOwotICAgICAg
ICB9IGVsc2UgaWYgKCF2YWx1ZS0+aXNOdWxsKCkpIHsKKyAgICBpZiAoYXV0byB2YWx1ZSA9IHBh
cmFtZXRlcnMtPmdldFZhbHVlKCJ0eXBlIl9zKSkgeworICAgICAgICBhdXRvIHZhbHVlU3RyaW5n
ID0gdmFsdWUtPmFzU3RyaW5nKCk7CisgICAgICAgIGlmICh2YWx1ZVN0cmluZyA9PSAid2luZG93
IiB8fCB2YWx1ZVN0cmluZyA9PSAidGFiIikKKyAgICAgICAgICAgIHR5cGVIaW50ID0gdmFsdWVT
dHJpbmc7CisgICAgICAgIGVsc2UgaWYgKCF2YWx1ZS0+aXNOdWxsKCkpIHsKICAgICAgICAgICAg
IGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJy
b3JDb2RlOjpJbnZhbGlkQXJndW1lbnQpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQpAQCAtMTE5Nyw4ICsxMTk5LDggQEAgdm9pZCBXZWJEcml2ZXJTZXJ2aWNlOjpzd2l0Y2hUb0Zy
YW1lKFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycywgRnVuY3Rpb24KICAgICBpZiAo
IWZpbmRTZXNzaW9uT3JDb21wbGV0ZVdpdGhFcnJvcigqcGFyYW1ldGVycywgY29tcGxldGlvbkhh
bmRsZXIpKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IGZyYW1l
SUQ7Ci0gICAgaWYgKCFwYXJhbWV0ZXJzLT5nZXRWYWx1ZSgiaWQiX3MsIGZyYW1lSUQpKSB7Cisg
ICAgYXV0byBmcmFtZUlEID0gcGFyYW1ldGVycy0+Z2V0VmFsdWUoImlkIl9zKTsKKyAgICBpZiAo
IWZyYW1lSUQpIHsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFp
bChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OkludmFsaWRBcmd1bWVudCkpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQpAQCAtMTIxNCw4ICsxMjE2LDcgQEAgdm9pZCBXZWJEcml2ZXJTZXJ2aWNl
Ojpzd2l0Y2hUb0ZyYW1lKFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycywgRnVuY3Rp
b24KICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICBjYXNlIEpTT046OlZhbHVlOjpUeXBl
OjpPYmplY3Q6IHsKLSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gZnJhbWVJRE9iamVjdDsK
LSAgICAgICAgZnJhbWVJRC0+YXNPYmplY3QoZnJhbWVJRE9iamVjdCk7CisgICAgICAgIGF1dG8g
ZnJhbWVJRE9iamVjdCA9IGZyYW1lSUQtPmFzT2JqZWN0KCk7CiAgICAgICAgIGlmIChmcmFtZUlE
T2JqZWN0LT5maW5kKFNlc3Npb246OndlYkVsZW1lbnRJZGVudGlmaWVyKCkpID09IGZyYW1lSURP
YmplY3QtPmVuZCgpKSB7CiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVz
dWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6SW52YWxpZEFyZ3VtZW50KSk7CiAg
ICAgICAgICAgICByZXR1cm47CkBAIC0xMjU2LDggKzEyNTcsOCBAQCB2b2lkIFdlYkRyaXZlclNl
cnZpY2U6OnN3aXRjaFRvUGFyZW50RnJhbWUoUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0
ZXJzLCBGdQogCiBzdGF0aWMgT3B0aW9uYWw8U3RyaW5nPiBmaW5kRWxlbWVudE9yQ29tcGxldGVX
aXRoRXJyb3IoSlNPTjo6T2JqZWN0JiBwYXJhbWV0ZXJzLCBGdW5jdGlvbjx2b2lkIChDb21tYW5k
UmVzdWx0JiYpPiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgU3RyaW5nIGVsZW1lbnRJRDsK
LSAgICBpZiAoIXBhcmFtZXRlcnMuZ2V0U3RyaW5nKCJlbGVtZW50SWQiX3MsIGVsZW1lbnRJRCkg
fHwgZWxlbWVudElELmlzRW1wdHkoKSkgeworICAgIGF1dG8gZWxlbWVudElEID0gcGFyYW1ldGVy
cy5nZXRTdHJpbmcoImVsZW1lbnRJZCJfcyk7CisgICAgaWYgKGVsZW1lbnRJRC5pc0VtcHR5KCkp
IHsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5k
UmVzdWx0OjpFcnJvckNvZGU6OkludmFsaWRBcmd1bWVudCkpOwogICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwogICAgIH0KQEAgLTEyNzcsMTEgKzEyNzgsMTMgQEAgc3RhdGljIGlubGluZSBi
b29sIGlzVmFsaWRTdHJhdGVneShjb25zdCBTdHJpbmcmIHN0cmF0ZWd5KQogCiBzdGF0aWMgYm9v
bCBmaW5kU3RyYXRlZ3lBbmRTZWxlY3Rvck9yQ29tcGxldGVXaXRoRXJyb3IoSlNPTjo6T2JqZWN0
JiBwYXJhbWV0ZXJzLCBGdW5jdGlvbjx2b2lkIChDb21tYW5kUmVzdWx0JiYpPiYgY29tcGxldGlv
bkhhbmRsZXIsIFN0cmluZyYgc3RyYXRlZ3ksIFN0cmluZyYgc2VsZWN0b3IpCiB7Ci0gICAgaWYg
KCFwYXJhbWV0ZXJzLmdldFN0cmluZygidXNpbmciX3MsIHN0cmF0ZWd5KSB8fCAhaXNWYWxpZFN0
cmF0ZWd5KHN0cmF0ZWd5KSkgeworICAgIHN0cmF0ZWd5ID0gcGFyYW1ldGVycy5nZXRTdHJpbmco
InVzaW5nIl9zKTsKKyAgICBpZiAoIWlzVmFsaWRTdHJhdGVneShzdHJhdGVneSkpIHsKICAgICAg
ICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpF
cnJvckNvZGU6OkludmFsaWRBcmd1bWVudCkpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
fQotICAgIGlmICghcGFyYW1ldGVycy5nZXRTdHJpbmcoInZhbHVlIl9zLCBzZWxlY3RvcikpIHsK
KyAgICBzZWxlY3RvciA9IHBhcmFtZXRlcnMuZ2V0U3RyaW5nKCJ2YWx1ZSJfcyk7CisgICAgaWYg
KCFzZWxlY3RvcikgewogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0Ojpm
YWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6SW52YWxpZEFyZ3VtZW50KSk7CiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICB9CkBAIC0xNDA1LDggKzE0MDgsOCBAQCB2b2lkIFdlYkRyaXZl
clNlcnZpY2U6OmdldEVsZW1lbnRBdHRyaWJ1dGUoUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJh
bWV0ZXJzLCBGdQogICAgIGlmICghZWxlbWVudElEKQogICAgICAgICByZXR1cm47CiAKLSAgICBT
dHJpbmcgYXR0cmlidXRlOwotICAgIGlmICghcGFyYW1ldGVycy0+Z2V0U3RyaW5nKCJuYW1lIl9z
LCBhdHRyaWJ1dGUpKSB7CisgICAgYXV0byBhdHRyaWJ1dGUgPSBwYXJhbWV0ZXJzLT5nZXRTdHJp
bmcoIm5hbWUiX3MpOworICAgIGlmICghYXR0cmlidXRlKSB7CiAgICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpJbnZh
bGlkQXJndW1lbnQpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTE0MjUsOCArMTQyOCw4
IEBAIHZvaWQgV2ViRHJpdmVyU2VydmljZTo6Z2V0RWxlbWVudFByb3BlcnR5KFJlZlB0cjxKU09O
OjpPYmplY3Q+JiYgcGFyYW1ldGVycywgRnVuCiAgICAgaWYgKCFlbGVtZW50SUQpCiAgICAgICAg
IHJldHVybjsKIAotICAgIFN0cmluZyBhdHRyaWJ1dGU7Ci0gICAgaWYgKCFwYXJhbWV0ZXJzLT5n
ZXRTdHJpbmcoIm5hbWUiX3MsIGF0dHJpYnV0ZSkpIHsKKyAgICBhdXRvIGF0dHJpYnV0ZSA9IHBh
cmFtZXRlcnMtPmdldFN0cmluZygibmFtZSJfcyk7CisgICAgaWYgKCFhdHRyaWJ1dGUpIHsKICAg
ICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0
OjpFcnJvckNvZGU6OkludmFsaWRBcmd1bWVudCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQpA
QCAtMTQ0NSw4ICsxNDQ4LDggQEAgdm9pZCBXZWJEcml2ZXJTZXJ2aWNlOjpnZXRFbGVtZW50Q1NT
VmFsdWUoUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzLCBGdW4KICAgICBpZiAoIWVs
ZW1lbnRJRCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgU3RyaW5nIGNzc1Byb3BlcnR5OwotICAg
IGlmICghcGFyYW1ldGVycy0+Z2V0U3RyaW5nKCJuYW1lIl9zLCBjc3NQcm9wZXJ0eSkpIHsKKyAg
ICBhdXRvIGNzc1Byb3BlcnR5ID0gcGFyYW1ldGVycy0+Z2V0U3RyaW5nKCJuYW1lIl9zKTsKKyAg
ICBpZiAoIWNzc1Byb3BlcnR5KSB7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRS
ZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpJbnZhbGlkQXJndW1lbnQpKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTE1NjMsOCArMTU2Niw4IEBAIHZvaWQgV2ViRHJp
dmVyU2VydmljZTo6ZWxlbWVudFNlbmRLZXlzKFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1l
dGVycywgRnVuY3RpCiAgICAgaWYgKCFlbGVtZW50SUQpCiAgICAgICAgIHJldHVybjsKIAotICAg
IFN0cmluZyB0ZXh0OwotICAgIGlmICghcGFyYW1ldGVycy0+Z2V0U3RyaW5nKCJ0ZXh0Il9zLCB0
ZXh0KSB8fCB0ZXh0LmlzRW1wdHkoKSkgeworICAgIGF1dG8gdGV4dCA9IHBhcmFtZXRlcnMtPmdl
dFN0cmluZygidGV4dCJfcyk7CisgICAgaWYgKHRleHQuaXNFbXB0eSgpKSB7CiAgICAgICAgIGNv
bXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JD
b2RlOjpJbnZhbGlkQXJndW1lbnQpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTE1ODQs
MTEgKzE1ODcsMTMgQEAgdm9pZCBXZWJEcml2ZXJTZXJ2aWNlOjpnZXRQYWdlU291cmNlKFJlZlB0
cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycywgRnVuY3Rpb24KIAogc3RhdGljIGJvb2wgZmlu
ZFNjcmlwdEFuZEFyZ3VtZW50c09yQ29tcGxldGVXaXRoRXJyb3IoSlNPTjo6T2JqZWN0JiBwYXJh
bWV0ZXJzLCBGdW5jdGlvbjx2b2lkIChDb21tYW5kUmVzdWx0JiYpPiYgY29tcGxldGlvbkhhbmRs
ZXIsIFN0cmluZyYgc2NyaXB0LCBSZWZQdHI8SlNPTjo6QXJyYXk+JiBhcmd1bWVudHMpCiB7Ci0g
ICAgaWYgKCFwYXJhbWV0ZXJzLmdldFN0cmluZygic2NyaXB0Il9zLCBzY3JpcHQpKSB7CisgICAg
c2NyaXB0ID0gcGFyYW1ldGVycy5nZXRTdHJpbmcoInNjcmlwdCJfcyk7CisgICAgaWYgKCFzY3Jp
cHQpIHsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFuZFJlc3VsdDo6ZmFpbChDb21t
YW5kUmVzdWx0OjpFcnJvckNvZGU6OkludmFsaWRBcmd1bWVudCkpOwogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQotICAgIGlmICghcGFyYW1ldGVycy5nZXRBcnJheSgiYXJncyJfcywgYXJn
dW1lbnRzKSkgeworICAgIGFyZ3VtZW50cyA9IHBhcmFtZXRlcnMuZ2V0QXJyYXkoImFyZ3MiX3Mp
OworICAgIGlmICghYXJndW1lbnRzKSB7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1h
bmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpJbnZhbGlkQXJndW1lbnQp
KTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTE2NjAsOCArMTY2NSw4IEBAIHZv
aWQgV2ViRHJpdmVyU2VydmljZTo6Z2V0TmFtZWRDb29raWUoUmVmUHRyPEpTT046Ok9iamVjdD4m
JiBwYXJhbWV0ZXJzLCBGdW5jdGlvCiAgICAgaWYgKCFmaW5kU2Vzc2lvbk9yQ29tcGxldGVXaXRo
RXJyb3IoKnBhcmFtZXRlcnMsIGNvbXBsZXRpb25IYW5kbGVyKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgU3RyaW5nIG5hbWU7Ci0gICAgaWYgKCFwYXJhbWV0ZXJzLT5nZXRTdHJpbmcoIm5hbWUi
X3MsIG5hbWUpKSB7CisgICAgYXV0byBuYW1lID0gcGFyYW1ldGVycy0+Z2V0U3RyaW5nKCJuYW1l
Il9zKTsKKyAgICBpZiAoIW5hbWUpIHsKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29tbWFu
ZFJlc3VsdDo6ZmFpbChDb21tYW5kUmVzdWx0OjpFcnJvckNvZGU6OkludmFsaWRBcmd1bWVudCkp
OwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTY3OCwzNyArMTY4Myw0MCBAQCB2b2lkIFdl
YkRyaXZlclNlcnZpY2U6OmdldE5hbWVkQ29va2llKFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFy
YW1ldGVycywgRnVuY3Rpbwogc3RhdGljIE9wdGlvbmFsPFNlc3Npb246OkNvb2tpZT4gZGVzZXJp
YWxpemVDb29raWUoSlNPTjo6T2JqZWN0JiBjb29raWVPYmplY3QpCiB7CiAgICAgU2Vzc2lvbjo6
Q29va2llIGNvb2tpZTsKLSAgICBpZiAoIWNvb2tpZU9iamVjdC5nZXRTdHJpbmcoIm5hbWUiX3Ms
IGNvb2tpZS5uYW1lKSB8fCBjb29raWUubmFtZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7Ci0gICAgaWYgKCFjb29raWVPYmplY3QuZ2V0U3RyaW5nKCJ2YWx1ZSJfcywg
Y29va2llLnZhbHVlKSB8fCBjb29raWUudmFsdWUuaXNFbXB0eSgpKQorCisgICAgY29va2llLm5h
bWUgPSBjb29raWVPYmplY3QuZ2V0U3RyaW5nKCJuYW1lIl9zKTsKKyAgICBpZiAoY29va2llLm5h
bWUuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgUmVmUHRy
PEpTT046OlZhbHVlPiB2YWx1ZTsKLSAgICBpZiAoY29va2llT2JqZWN0LmdldFZhbHVlKCJwYXRo
Il9zLCB2YWx1ZSkpIHsKLSAgICAgICAgU3RyaW5nIHBhdGg7Ci0gICAgICAgIGlmICghdmFsdWUt
PmFzU3RyaW5nKHBhdGgpKQorICAgIGNvb2tpZS52YWx1ZSA9IGNvb2tpZU9iamVjdC5nZXRTdHJp
bmcoInZhbHVlIl9zKTsKKyAgICBpZiAoY29va2llLnZhbHVlLmlzRW1wdHkoKSkKKyAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIGlmIChhdXRvIHZhbHVlID0gY29va2llT2JqZWN0
LmdldFZhbHVlKCJwYXRoIl9zKSkgeworICAgICAgICBhdXRvIHBhdGggPSB2YWx1ZS0+YXNTdHJp
bmcoKTsKKyAgICAgICAgaWYgKCFwYXRoKQogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKICAgICAgICAgY29va2llLnBhdGggPSBwYXRoOwogICAgIH0KLSAgICBpZiAoY29va2llT2Jq
ZWN0LmdldFZhbHVlKCJkb21haW4iX3MsIHZhbHVlKSkgewotICAgICAgICBTdHJpbmcgZG9tYWlu
OwotICAgICAgICBpZiAoIXZhbHVlLT5hc1N0cmluZyhkb21haW4pKQorICAgIGlmIChhdXRvIHZh
bHVlID0gY29va2llT2JqZWN0LmdldFZhbHVlKCJkb21haW4iX3MpKSB7CisgICAgICAgIGF1dG8g
ZG9tYWluID0gdmFsdWUtPmFzU3RyaW5nKCk7CisgICAgICAgIGlmICghZG9tYWluKQogICAgICAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAgICAgY29va2llLmRvbWFpbiA9IGRvbWFp
bjsKICAgICB9Ci0gICAgaWYgKGNvb2tpZU9iamVjdC5nZXRWYWx1ZSgic2VjdXJlIl9zLCB2YWx1
ZSkpIHsKLSAgICAgICAgYm9vbCBzZWN1cmU7Ci0gICAgICAgIGlmICghdmFsdWUtPmFzQm9vbGVh
bihzZWN1cmUpKQorICAgIGlmIChhdXRvIHZhbHVlID0gY29va2llT2JqZWN0LmdldFZhbHVlKCJz
ZWN1cmUiX3MpKSB7CisgICAgICAgIGF1dG8gc2VjdXJlID0gdmFsdWUtPmFzQm9vbGVhbigpOwor
ICAgICAgICBpZiAoIXNlY3VyZSkKICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAg
ICAgICAgIGNvb2tpZS5zZWN1cmUgPSBzZWN1cmU7CiAgICAgfQotICAgIGlmIChjb29raWVPYmpl
Y3QuZ2V0VmFsdWUoImh0dHBPbmx5Il9zLCB2YWx1ZSkpIHsKLSAgICAgICAgYm9vbCBodHRwT25s
eTsKLSAgICAgICAgaWYgKCF2YWx1ZS0+YXNCb29sZWFuKGh0dHBPbmx5KSkKKyAgICBpZiAoYXV0
byB2YWx1ZSA9IGNvb2tpZU9iamVjdC5nZXRWYWx1ZSgiaHR0cE9ubHkiX3MpKSB7CisgICAgICAg
IGF1dG8gaHR0cE9ubHkgPSB2YWx1ZS0+YXNCb29sZWFuKCk7CisgICAgICAgIGlmICghaHR0cE9u
bHkpCiAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgICAgICBjb29raWUuaHR0
cE9ubHkgPSBodHRwT25seTsKICAgICB9Ci0gICAgaWYgKGNvb2tpZU9iamVjdC5nZXRWYWx1ZSgi
ZXhwaXJ5Il9zLCB2YWx1ZSkpIHsKKyAgICBpZiAoYXV0byB2YWx1ZSA9IGNvb2tpZU9iamVjdC5n
ZXRWYWx1ZSgiZXhwaXJ5Il9zKSkgewogICAgICAgICBhdXRvIGV4cGlyeSA9IHVuc2lnbmVkVmFs
dWUoKnZhbHVlKTsKICAgICAgICAgaWYgKCFleHBpcnkpCiAgICAgICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwpAQCAtMTcyNSw4ICsxNzMzLDggQEAgdm9pZCBXZWJEcml2ZXJTZXJ2aWNlOjph
ZGRDb29raWUoUmVmUHRyPEpTT046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzLCBGdW5jdGlvbjx2b2kK
ICAgICBpZiAoIWZpbmRTZXNzaW9uT3JDb21wbGV0ZVdpdGhFcnJvcigqcGFyYW1ldGVycywgY29t
cGxldGlvbkhhbmRsZXIpKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZWZQdHI8SlNPTjo6T2Jq
ZWN0PiBjb29raWVPYmplY3Q7Ci0gICAgaWYgKCFwYXJhbWV0ZXJzLT5nZXRPYmplY3QoImNvb2tp
ZSJfcywgY29va2llT2JqZWN0KSkgeworICAgIGF1dG8gY29va2llT2JqZWN0ID0gcGFyYW1ldGVy
cy0+Z2V0T2JqZWN0KCJjb29raWUiX3MpOworICAgIGlmICghY29va2llT2JqZWN0KSB7CiAgICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1hbmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6
RXJyb3JDb2RlOjpJbnZhbGlkQXJndW1lbnQpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAg
LTE3NTMsOCArMTc2MSw4IEBAIHZvaWQgV2ViRHJpdmVyU2VydmljZTo6ZGVsZXRlQ29va2llKFJl
ZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycywgRnVuY3Rpb248CiAgICAgaWYgKCFmaW5k
U2Vzc2lvbk9yQ29tcGxldGVXaXRoRXJyb3IoKnBhcmFtZXRlcnMsIGNvbXBsZXRpb25IYW5kbGVy
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgU3RyaW5nIG5hbWU7Ci0gICAgaWYgKCFwYXJhbWV0
ZXJzLT5nZXRTdHJpbmcoIm5hbWUiX3MsIG5hbWUpKSB7CithdXRvIG5hbWUgPSBwYXJhbWV0ZXJz
LT5nZXRTdHJpbmcoIm5hbWUiX3MpOworICAgIGlmICghbmFtZSkgewogICAgICAgICBjb21wbGV0
aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6
SW52YWxpZEFyZ3VtZW50KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xNzg2LDggKzE3
OTQsOCBAQCB2b2lkIFdlYkRyaXZlclNlcnZpY2U6OmRlbGV0ZUFsbENvb2tpZXMoUmVmUHRyPEpT
T046Ok9iamVjdD4mJiBwYXJhbWV0ZXJzLCBGdW5jdAogCiBzdGF0aWMgYm9vbCBwcm9jZXNzUGF1
c2VBY3Rpb24oSlNPTjo6T2JqZWN0JiBhY3Rpb25JdGVtLCBBY3Rpb24mIGFjdGlvbiwgT3B0aW9u
YWw8U3RyaW5nPiYgZXJyb3JNZXNzYWdlKQogewotICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gZHVy
YXRpb25WYWx1ZTsKLSAgICBpZiAoIWFjdGlvbkl0ZW0uZ2V0VmFsdWUoImR1cmF0aW9uIl9zLCBk
dXJhdGlvblZhbHVlKSkKKyAgICBhdXRvIGR1cmF0aW9uVmFsdWUgPSBhY3Rpb25JdGVtLmdldFZh
bHVlKCJkdXJhdGlvbiJfcyk7CisgICAgaWYgKCFkdXJhdGlvblZhbHVlKQogICAgICAgICByZXR1
cm4gdHJ1ZTsKIAogICAgIGF1dG8gZHVyYXRpb24gPSB1bnNpZ25lZFZhbHVlKCpkdXJhdGlvblZh
bHVlKTsKQEAgLTE4MDIsOCArMTgxMCw3IEBAIHN0YXRpYyBib29sIHByb2Nlc3NQYXVzZUFjdGlv
bihKU09OOjpPYmplY3QmIGFjdGlvbkl0ZW0sIEFjdGlvbiYgYWN0aW9uLCBPcHRpb25hCiAKIHN0
YXRpYyBPcHRpb25hbDxBY3Rpb24+IHByb2Nlc3NOdWxsQWN0aW9uKGNvbnN0IFN0cmluZyYgaWQs
IEpTT046Ok9iamVjdCYgYWN0aW9uSXRlbSwgT3B0aW9uYWw8U3RyaW5nPiYgZXJyb3JNZXNzYWdl
KQogewotICAgIFN0cmluZyBzdWJ0eXBlOwotICAgIGFjdGlvbkl0ZW0uZ2V0U3RyaW5nKCJ0eXBl
Il9zLCBzdWJ0eXBlKTsKKyAgICBhdXRvIHN1YnR5cGUgPSBhY3Rpb25JdGVtLmdldFN0cmluZygi
dHlwZSJfcyk7CiAgICAgaWYgKHN1YnR5cGUgIT0gInBhdXNlIikgewogICAgICAgICBlcnJvck1l
c3NhZ2UgPSBTdHJpbmcoIlRoZSBwYXJhbWV0ZXIgJ3R5cGUnIGluIG51bGwgYWN0aW9uIGlzIGlu
dmFsaWQgb3IgbWlzc2luZyIpOwogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwpAQCAtMTgx
OSw4ICsxODI2LDcgQEAgc3RhdGljIE9wdGlvbmFsPEFjdGlvbj4gcHJvY2Vzc051bGxBY3Rpb24o
Y29uc3QgU3RyaW5nJiBpZCwgSlNPTjo6T2JqZWN0JiBhY3Rpb24KIHN0YXRpYyBPcHRpb25hbDxB
Y3Rpb24+IHByb2Nlc3NLZXlBY3Rpb24oY29uc3QgU3RyaW5nJiBpZCwgSlNPTjo6T2JqZWN0JiBh
Y3Rpb25JdGVtLCBPcHRpb25hbDxTdHJpbmc+JiBlcnJvck1lc3NhZ2UpCiB7CiAgICAgQWN0aW9u
OjpTdWJ0eXBlIGFjdGlvblN1YnR5cGU7Ci0gICAgU3RyaW5nIHN1YnR5cGU7Ci0gICAgYWN0aW9u
SXRlbS5nZXRTdHJpbmcoInR5cGUiX3MsIHN1YnR5cGUpOworICAgIGF1dG8gc3VidHlwZSA9IGFj
dGlvbkl0ZW0uZ2V0U3RyaW5nKCJ0eXBlIl9zKTsKICAgICBpZiAoc3VidHlwZSA9PSAicGF1c2Ui
KQogICAgICAgICBhY3Rpb25TdWJ0eXBlID0gQWN0aW9uOjpTdWJ0eXBlOjpQYXVzZTsKICAgICBl
bHNlIGlmIChzdWJ0eXBlID09ICJrZXlVcCIpCkBAIC0xODQxLDEzICsxODQ3LDEzIEBAIHN0YXRp
YyBPcHRpb25hbDxBY3Rpb24+IHByb2Nlc3NLZXlBY3Rpb24oY29uc3QgU3RyaW5nJiBpZCwgSlNP
Tjo6T2JqZWN0JiBhY3Rpb25JCiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQWN0aW9uOjpTdWJ0
eXBlOjpLZXlVcDoKICAgICBjYXNlIEFjdGlvbjo6U3VidHlwZTo6S2V5RG93bjogewotICAgICAg
ICBSZWZQdHI8SlNPTjo6VmFsdWU+IGtleVZhbHVlOwotICAgICAgICBpZiAoIWFjdGlvbkl0ZW0u
Z2V0VmFsdWUoInZhbHVlIl9zLCBrZXlWYWx1ZSkpIHsKKyAgICAgICAgYXV0byBrZXlWYWx1ZSA9
IGFjdGlvbkl0ZW0uZ2V0VmFsdWUoInZhbHVlIl9zKTsKKyAgICAgICAgaWYgKCFrZXlWYWx1ZSkg
ewogICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gU3RyaW5nKCJUaGUgcGFyYW1hdGVyICd2YWx1
ZScgaXMgbWlzc2luZyBmb3Iga2V5IHVwL2Rvd24gYWN0aW9uIik7CiAgICAgICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwogICAgICAgICB9Ci0gICAgICAgIFN0cmluZyBrZXk7Ci0gICAgICAg
IGlmICgha2V5VmFsdWUtPmFzU3RyaW5nKGtleSkgfHwga2V5LmlzRW1wdHkoKSkgeworICAgICAg
ICBhdXRvIGtleSA9IGtleVZhbHVlLT5hc1N0cmluZygpOworICAgICAgICBpZiAoIWtleS5pc0Vt
cHR5KCkpIHsKICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IFN0cmluZygiVGhlIHBhcmFtYXRl
ciAndmFsdWUnIGlzIGludmFsaWQgZm9yIGtleSB1cC9kb3duIGFjdGlvbiIpOwogICAgICAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAgICAgfQpAQCAtMTg4NCw4ICsxODkwLDcgQEAg
c3RhdGljIE1vdXNlQnV0dG9uIGFjdGlvbk1vdXNlQnV0dG9uKHVuc2lnbmVkIGJ1dHRvbikKIHN0
YXRpYyBPcHRpb25hbDxBY3Rpb24+IHByb2Nlc3NQb2ludGVyQWN0aW9uKGNvbnN0IFN0cmluZyYg
aWQsIFBvaW50ZXJQYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzLCBKU09OOjpPYmplY3QmIGFjdGlvbkl0
ZW0sIE9wdGlvbmFsPFN0cmluZz4mIGVycm9yTWVzc2FnZSkKIHsKICAgICBBY3Rpb246OlN1YnR5
cGUgYWN0aW9uU3VidHlwZTsKLSAgICBTdHJpbmcgc3VidHlwZTsKLSAgICBhY3Rpb25JdGVtLmdl
dFN0cmluZygidHlwZSJfcywgc3VidHlwZSk7CisgICAgYXV0byBzdWJ0eXBlID0gYWN0aW9uSXRl
bS5nZXRTdHJpbmcoInR5cGUiX3MpOwogICAgIGlmIChzdWJ0eXBlID09ICJwYXVzZSIpCiAgICAg
ICAgIGFjdGlvblN1YnR5cGUgPSBBY3Rpb246OlN1YnR5cGU6OlBhdXNlOwogICAgIGVsc2UgaWYg
KHN1YnR5cGUgPT0gInBvaW50ZXJVcCIpCkBAIC0xOTExLDggKzE5MTYsOCBAQCBzdGF0aWMgT3B0
aW9uYWw8QWN0aW9uPiBwcm9jZXNzUG9pbnRlckFjdGlvbihjb25zdCBTdHJpbmcmIGlkLCBQb2lu
dGVyUGFyYW1ldGVycwogICAgICAgICBicmVhazsKICAgICBjYXNlIEFjdGlvbjo6U3VidHlwZTo6
UG9pbnRlclVwOgogICAgIGNhc2UgQWN0aW9uOjpTdWJ0eXBlOjpQb2ludGVyRG93bjogewotICAg
ICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IGJ1dHRvblZhbHVlOwotICAgICAgICBpZiAoIWFjdGlv
bkl0ZW0uZ2V0VmFsdWUoImJ1dHRvbiJfcywgYnV0dG9uVmFsdWUpKSB7CisgICAgICAgIGF1dG8g
YnV0dG9uVmFsdWUgPSBhY3Rpb25JdGVtLmdldFZhbHVlKCJidXR0b24iX3MpOworICAgICAgICBp
ZiAoIWJ1dHRvblZhbHVlKSB7CiAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBTdHJpbmcoIlRo
ZSBwYXJhbWF0ZXIgJ2J1dHRvbicgaXMgbWlzc2luZyBmb3IgcG9pbnRlciB1cC9kb3duIGFjdGlv
biIpOwogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAgICAgfQpAQCAtMTky
NSw4ICsxOTMwLDcgQEAgc3RhdGljIE9wdGlvbmFsPEFjdGlvbj4gcHJvY2Vzc1BvaW50ZXJBY3Rp
b24oY29uc3QgU3RyaW5nJiBpZCwgUG9pbnRlclBhcmFtZXRlcnMKICAgICAgICAgYnJlYWs7CiAg
ICAgfQogICAgIGNhc2UgQWN0aW9uOjpTdWJ0eXBlOjpQb2ludGVyTW92ZTogewotICAgICAgICBS
ZWZQdHI8SlNPTjo6VmFsdWU+IGR1cmF0aW9uVmFsdWU7Ci0gICAgICAgIGlmIChhY3Rpb25JdGVt
LmdldFZhbHVlKCJkdXJhdGlvbiJfcywgZHVyYXRpb25WYWx1ZSkpIHsKKyAgICAgICAgaWYgKGF1
dG8gZHVyYXRpb25WYWx1ZSA9IGFjdGlvbkl0ZW0uZ2V0VmFsdWUoImR1cmF0aW9uIl9zKSkgewog
ICAgICAgICAgICAgYXV0byBkdXJhdGlvbiA9IHVuc2lnbmVkVmFsdWUoKmR1cmF0aW9uVmFsdWUp
OwogICAgICAgICAgICAgaWYgKCFkdXJhdGlvbikgewogICAgICAgICAgICAgICAgIGVycm9yTWVz
c2FnZSA9IFN0cmluZygiVGhlIHBhcmFtZXRlciAnZHVyYXRpb24nIGlzIGludmFsaWQgaW4gcG9p
bnRlciBtb3ZlIGFjdGlvbiIpOwpAQCAtMTkzNSwyMCArMTkzOSwxNiBAQCBzdGF0aWMgT3B0aW9u
YWw8QWN0aW9uPiBwcm9jZXNzUG9pbnRlckFjdGlvbihjb25zdCBTdHJpbmcmIGlkLCBQb2ludGVy
UGFyYW1ldGVycwogICAgICAgICAgICAgYWN0aW9uLmR1cmF0aW9uID0gZHVyYXRpb24udmFsdWUo
KTsKICAgICAgICAgfQogCi0gICAgICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gb3JpZ2luVmFsdWU7
Ci0gICAgICAgIGlmIChhY3Rpb25JdGVtLmdldFZhbHVlKCJvcmlnaW4iX3MsIG9yaWdpblZhbHVl
KSkgewotICAgICAgICAgICAgaWYgKG9yaWdpblZhbHVlLT50eXBlKCkgPT0gSlNPTjo6VmFsdWU6
OlR5cGU6Ok9iamVjdCkgewotICAgICAgICAgICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IG9y
aWdpbk9iamVjdDsKLSAgICAgICAgICAgICAgICBvcmlnaW5WYWx1ZS0+YXNPYmplY3Qob3JpZ2lu
T2JqZWN0KTsKLSAgICAgICAgICAgICAgICBTdHJpbmcgZWxlbWVudElEOwotICAgICAgICAgICAg
ICAgIGlmICghb3JpZ2luT2JqZWN0LT5nZXRTdHJpbmcoU2Vzc2lvbjo6d2ViRWxlbWVudElkZW50
aWZpZXIoKSwgZWxlbWVudElEKSkgeworICAgICAgICBpZiAoYXV0byBvcmlnaW5WYWx1ZSA9IGFj
dGlvbkl0ZW0uZ2V0VmFsdWUoIm9yaWdpbiJfcykpIHsKKyAgICAgICAgICAgIGlmIChhdXRvIG9y
aWdpbk9iamVjdCA9IG9yaWdpblZhbHVlLT5hc09iamVjdCgpKSB7CisgICAgICAgICAgICAgICAg
YXV0byBlbGVtZW50SUQgPSBvcmlnaW5PYmplY3QtPmdldFN0cmluZyhTZXNzaW9uOjp3ZWJFbGVt
ZW50SWRlbnRpZmllcigpKTsKKyAgICAgICAgICAgICAgICBpZiAoIWVsZW1lbnRJRCkgewogICAg
ICAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBTdHJpbmcoIlRoZSBwYXJhbWV0ZXIgJ29y
aWdpbicgaXMgbm90IGEgdmFsaWQgd2ViIGVsZW1lbnQgb2JqZWN0IGluIHBvaW50ZXIgbW92ZSBh
Y3Rpb24iKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYWN0aW9uLm9yaWdpbiA9IFBvaW50ZXJPcmln
aW4geyBQb2ludGVyT3JpZ2luOjpUeXBlOjpFbGVtZW50LCBlbGVtZW50SUQgfTsKICAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIG9yaWdpbjsKLSAgICAgICAgICAg
ICAgICBvcmlnaW5WYWx1ZS0+YXNTdHJpbmcob3JpZ2luKTsKKyAgICAgICAgICAgICAgICBhdXRv
IG9yaWdpbiA9IG9yaWdpblZhbHVlLT5hc1N0cmluZygpOwogICAgICAgICAgICAgICAgIGlmIChv
cmlnaW4gPT0gInZpZXdwb3J0IikKICAgICAgICAgICAgICAgICAgICAgYWN0aW9uLm9yaWdpbiA9
IFBvaW50ZXJPcmlnaW4geyBQb2ludGVyT3JpZ2luOjpUeXBlOjpWaWV3cG9ydCwgV1RGOjpudWxs
b3B0IH07CiAgICAgICAgICAgICAgICAgZWxzZSBpZiAob3JpZ2luID09ICJwb2ludGVyIikKQEAg
LTE5NjEsOCArMTk2MSw3IEBAIHN0YXRpYyBPcHRpb25hbDxBY3Rpb24+IHByb2Nlc3NQb2ludGVy
QWN0aW9uKGNvbnN0IFN0cmluZyYgaWQsIFBvaW50ZXJQYXJhbWV0ZXJzCiAgICAgICAgIH0gZWxz
ZQogICAgICAgICAgICAgYWN0aW9uLm9yaWdpbiA9IFBvaW50ZXJPcmlnaW4geyBQb2ludGVyT3Jp
Z2luOjpUeXBlOjpWaWV3cG9ydCwgV1RGOjpudWxsb3B0IH07CiAKLSAgICAgICAgUmVmUHRyPEpT
T046OlZhbHVlPiB4VmFsdWU7Ci0gICAgICAgIGlmIChhY3Rpb25JdGVtLmdldFZhbHVlKCJ4Il9z
LCB4VmFsdWUpKSB7CisgICAgICAgIGlmIChhdXRvIHhWYWx1ZSA9IGFjdGlvbkl0ZW0uZ2V0VmFs
dWUoIngiX3MpKSB7CiAgICAgICAgICAgICBhdXRvIHggPSB2YWx1ZUFzTnVtYmVySW5SYW5nZSgq
eFZhbHVlLCBJTlRfTUlOKTsKICAgICAgICAgICAgIGlmICgheCkgewogICAgICAgICAgICAgICAg
IGVycm9yTWVzc2FnZSA9IFN0cmluZygiVGhlIHBhcmFtYXRlciAneCcgaXMgaW52YWxpZCBmb3Ig
cG9pbnRlciBtb3ZlIGFjdGlvbiIpOwpAQCAtMTk3MSw4ICsxOTcwLDcgQEAgc3RhdGljIE9wdGlv
bmFsPEFjdGlvbj4gcHJvY2Vzc1BvaW50ZXJBY3Rpb24oY29uc3QgU3RyaW5nJiBpZCwgUG9pbnRl
clBhcmFtZXRlcnMKICAgICAgICAgICAgIGFjdGlvbi54ID0geC52YWx1ZSgpOwogICAgICAgICB9
CiAKLSAgICAgICAgUmVmUHRyPEpTT046OlZhbHVlPiB5VmFsdWU7Ci0gICAgICAgIGlmIChhY3Rp
b25JdGVtLmdldFZhbHVlKCJ5Il9zLCB5VmFsdWUpKSB7CisgICAgICAgIGlmIChhdXRvIHlWYWx1
ZSA9IGFjdGlvbkl0ZW0uZ2V0VmFsdWUoInkiX3MpKSB7CiAgICAgICAgICAgICBhdXRvIHkgPSB2
YWx1ZUFzTnVtYmVySW5SYW5nZSgqeVZhbHVlLCBJTlRfTUlOKTsKICAgICAgICAgICAgIGlmICgh
eSkgewogICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IFN0cmluZygiVGhlIHBhcmFtYXRl
ciAneScgaXMgaW52YWxpZCBmb3IgcG9pbnRlciBtb3ZlIGFjdGlvbiIpOwpAQCAtMTk5NSwxOCAr
MTk5MywxOSBAQCBzdGF0aWMgT3B0aW9uYWw8QWN0aW9uPiBwcm9jZXNzUG9pbnRlckFjdGlvbihj
b25zdCBTdHJpbmcmIGlkLCBQb2ludGVyUGFyYW1ldGVycwogc3RhdGljIE9wdGlvbmFsPFBvaW50
ZXJQYXJhbWV0ZXJzPiBwcm9jZXNzUG9pbnRlclBhcmFtZXRlcnMoSlNPTjo6T2JqZWN0JiBhY3Rp
b25TZXF1ZW5jZSwgT3B0aW9uYWw8U3RyaW5nPiYgZXJyb3JNZXNzYWdlKQogewogICAgIFBvaW50
ZXJQYXJhbWV0ZXJzIHBhcmFtZXRlcnM7Ci0gICAgUmVmUHRyPEpTT046OlZhbHVlPiBwYXJhbWV0
ZXJzRGF0YVZhbHVlOwotICAgIGlmICghYWN0aW9uU2VxdWVuY2UuZ2V0VmFsdWUoInBhcmFtZXRl
cnMiX3MsIHBhcmFtZXRlcnNEYXRhVmFsdWUpKQorCisgICAgYXV0byBwYXJhbWV0ZXJzRGF0YVZh
bHVlID0gYWN0aW9uU2VxdWVuY2UuZ2V0VmFsdWUoInBhcmFtZXRlcnMiX3MpOworICAgIGlmICgh
cGFyYW1ldGVyc0RhdGFWYWx1ZSkKICAgICAgICAgcmV0dXJuIHBhcmFtZXRlcnM7CiAKLSAgICBS
ZWZQdHI8SlNPTjo6T2JqZWN0PiBwYXJhbWV0ZXJzRGF0YTsKLSAgICBpZiAoIXBhcmFtZXRlcnNE
YXRhVmFsdWUtPmFzT2JqZWN0KHBhcmFtZXRlcnNEYXRhKSkgeworICAgIGF1dG8gcGFyYW1ldGVy
c0RhdGEgPSBwYXJhbWV0ZXJzRGF0YVZhbHVlLT5hc09iamVjdCgpOworICAgIGlmICghcGFyYW1l
dGVyc0RhdGEpIHsKICAgICAgICAgZXJyb3JNZXNzYWdlID0gU3RyaW5nKCJBY3Rpb24gc2VxdWVu
Y2UgcG9pbnRlciBwYXJhbWV0ZXJzIGlzIG5vdCBhbiBvYmplY3QiKTsKICAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKICAgICB9CiAKLSAgICBTdHJpbmcgcG9pbnRlclR5cGU7Ci0gICAgaWYg
KCFwYXJhbWV0ZXJzRGF0YS0+Z2V0U3RyaW5nKCJwb2ludGVyVHlwZSJfcywgcG9pbnRlclR5cGUp
KQorICAgIGF1dG8gcG9pbnRlclR5cGUgPSBwYXJhbWV0ZXJzRGF0YS0+Z2V0U3RyaW5nKCJwb2lu
dGVyVHlwZSJfcyk7CisgICAgaWYgKCFwb2ludGVyVHlwZSkKICAgICAgICAgcmV0dXJuIHBhcmFt
ZXRlcnM7CiAKICAgICBpZiAocG9pbnRlclR5cGUgPT0gIm1vdXNlIikKQEAgLTIwMjUsMTQgKzIw
MjQsMTMgQEAgc3RhdGljIE9wdGlvbmFsPFBvaW50ZXJQYXJhbWV0ZXJzPiBwcm9jZXNzUG9pbnRl
clBhcmFtZXRlcnMoSlNPTjo6T2JqZWN0JiBhY3Rpb24KIAogc3RhdGljIE9wdGlvbmFsPFZlY3Rv
cjxBY3Rpb24+PiBwcm9jZXNzSW5wdXRBY3Rpb25TZXF1ZW5jZShTZXNzaW9uJiBzZXNzaW9uLCBK
U09OOjpWYWx1ZSYgYWN0aW9uU2VxdWVuY2VWYWx1ZSwgT3B0aW9uYWw8U3RyaW5nPiYgZXJyb3JN
ZXNzYWdlKQogewotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IGFjdGlvblNlcXVlbmNlOwotICAg
IGlmICghYWN0aW9uU2VxdWVuY2VWYWx1ZS5hc09iamVjdChhY3Rpb25TZXF1ZW5jZSkpIHsKKyAg
ICBhdXRvIGFjdGlvblNlcXVlbmNlID0gYWN0aW9uU2VxdWVuY2VWYWx1ZS5hc09iamVjdCgpOwor
ICAgIGlmICghYWN0aW9uU2VxdWVuY2UpIHsKICAgICAgICAgZXJyb3JNZXNzYWdlID0gU3RyaW5n
KCJUaGUgYWN0aW9uIHNlcXVlbmNlIGlzIG5vdCBhbiBvYmplY3QiKTsKICAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKICAgICB9CiAKLSAgICBTdHJpbmcgdHlwZTsKLSAgICBhY3Rpb25TZXF1
ZW5jZS0+Z2V0U3RyaW5nKCJ0eXBlIl9zLCB0eXBlKTsKKyAgICBhdXRvIHR5cGUgPSBhY3Rpb25T
ZXF1ZW5jZS0+Z2V0U3RyaW5nKCJ0eXBlIl9zKTsKICAgICBJbnB1dFNvdXJjZTo6VHlwZSBpbnB1
dFNvdXJjZVR5cGU7CiAgICAgaWYgKHR5cGUgPT0gImtleSIpCiAgICAgICAgIGlucHV0U291cmNl
VHlwZSA9IElucHV0U291cmNlOjpUeXBlOjpLZXk7CkBAIC0yMDQ1LDggKzIwNDMsOCBAQCBzdGF0
aWMgT3B0aW9uYWw8VmVjdG9yPEFjdGlvbj4+IHByb2Nlc3NJbnB1dEFjdGlvblNlcXVlbmNlKFNl
c3Npb24mIHNlc3Npb24sIEpTTwogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIH0K
IAotICAgIFN0cmluZyBpZDsKLSAgICBpZiAoIWFjdGlvblNlcXVlbmNlLT5nZXRTdHJpbmcoImlk
Il9zLCBpZCkpIHsKKyAgICBhdXRvIGlkID0gYWN0aW9uU2VxdWVuY2UtPmdldFN0cmluZygiaWQi
X3MpOworICAgIGlmICghaWQpIHsKICAgICAgICAgZXJyb3JNZXNzYWdlID0gU3RyaW5nKCJUaGUg
cGFyYW1ldGVyICdpZCcgaXMgaW52YWxpZCBvciBtaXNzaW5nIGluIGFjdGlvbiBzZXF1ZW5jZSIp
OwogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIH0KQEAgLTIwNzIsOCArMjA3MCw4
IEBAIHN0YXRpYyBPcHRpb25hbDxWZWN0b3I8QWN0aW9uPj4gcHJvY2Vzc0lucHV0QWN0aW9uU2Vx
dWVuY2UoU2Vzc2lvbiYgc2Vzc2lvbiwgSlNPCiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CiAgICAgfQogCi0gICAgUmVmUHRyPEpTT046OkFycmF5PiBhY3Rpb25JdGVtczsKLSAgICBpZiAo
IWFjdGlvblNlcXVlbmNlLT5nZXRBcnJheSgiYWN0aW9ucyJfcywgYWN0aW9uSXRlbXMpKSB7Cisg
ICAgYXV0byBhY3Rpb25JdGVtcyA9IGFjdGlvblNlcXVlbmNlLT5nZXRBcnJheSgiYWN0aW9ucyJf
cyk7CisgICAgaWYgKCFhY3Rpb25JdGVtcykgewogICAgICAgICBlcnJvck1lc3NhZ2UgPSBTdHJp
bmcoIlRoZSBwYXJhbWV0ZXIgJ2FjdGlvbnMnIGlzIGludmFsaWQgb3Igbm90IHByZXNlbnQgaW4g
YWN0aW9uIHNlcXVlbmNlIik7CiAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgfQpA
QCAtMjA4MSw5ICsyMDc5LDggQEAgc3RhdGljIE9wdGlvbmFsPFZlY3RvcjxBY3Rpb24+PiBwcm9j
ZXNzSW5wdXRBY3Rpb25TZXF1ZW5jZShTZXNzaW9uJiBzZXNzaW9uLCBKU08KICAgICBWZWN0b3I8
QWN0aW9uPiBhY3Rpb25zOwogICAgIHVuc2lnbmVkIGFjdGlvbkl0ZW1zTGVuZ3RoID0gYWN0aW9u
SXRlbXMtPmxlbmd0aCgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhY3Rpb25JdGVt
c0xlbmd0aDsgKytpKSB7Ci0gICAgICAgIGF1dG8gYWN0aW9uSXRlbVZhbHVlID0gYWN0aW9uSXRl
bXMtPmdldChpKTsKLSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gYWN0aW9uSXRlbTsKLSAg
ICAgICAgaWYgKCFhY3Rpb25JdGVtVmFsdWUtPmFzT2JqZWN0KGFjdGlvbkl0ZW0pKSB7CisgICAg
ICAgIGF1dG8gYWN0aW9uSXRlbSA9IGFjdGlvbkl0ZW1zLT5nZXQoaSktPmFzT2JqZWN0KCk7Cisg
ICAgICAgIGlmICghYWN0aW9uSXRlbSkgewogICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gU3Ry
aW5nKCJBbiBhY3Rpb24gaW4gYWN0aW9uIHNlcXVlbmNlIGlzIG5vdCBhbiBvYmplY3QiKTsKICAg
ICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgICAgIH0KQEAgLTIxMTEsOCArMjEw
OCw4IEBAIHZvaWQgV2ViRHJpdmVyU2VydmljZTo6cGVyZm9ybUFjdGlvbnMoUmVmUHRyPEpTT046
Ok9iamVjdD4mJiBwYXJhbWV0ZXJzLCBGdW5jdGlvCiAgICAgaWYgKCFmaW5kU2Vzc2lvbk9yQ29t
cGxldGVXaXRoRXJyb3IoKnBhcmFtZXRlcnMsIGNvbXBsZXRpb25IYW5kbGVyKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgUmVmUHRyPEpTT046OkFycmF5PiBhY3Rpb25zQXJyYXk7Ci0gICAgaWYg
KCFwYXJhbWV0ZXJzLT5nZXRBcnJheSgiYWN0aW9ucyJfcywgYWN0aW9uc0FycmF5KSkgeworICAg
IGF1dG8gYWN0aW9uc0FycmF5ID0gcGFyYW1ldGVycy0+Z2V0QXJyYXkoImFjdGlvbnMiX3MpOwor
ICAgIGlmICghYWN0aW9uc0FycmF5KSB7CiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbW1h
bmRSZXN1bHQ6OmZhaWwoQ29tbWFuZFJlc3VsdDo6RXJyb3JDb2RlOjpJbnZhbGlkQXJndW1lbnQs
IFN0cmluZygiVGhlIHBhcmFtYXRlciAnYWN0aW9ucycgaXMgaW52YWxpZCBvciBub3QgcHJlc2Vu
dCIpKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0yMTIyLDcgKzIxMTksNyBAQCB2b2lk
IFdlYkRyaXZlclNlcnZpY2U6OnBlcmZvcm1BY3Rpb25zKFJlZlB0cjxKU09OOjpPYmplY3Q+JiYg
cGFyYW1ldGVycywgRnVuY3RpbwogICAgIHVuc2lnbmVkIGFjdGlvbnNBcnJheUxlbmd0aCA9IGFj
dGlvbnNBcnJheS0+bGVuZ3RoKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFjdGlv
bnNBcnJheUxlbmd0aDsgKytpKSB7CiAgICAgICAgIGF1dG8gYWN0aW9uU2VxdWVuY2UgPSBhY3Rp
b25zQXJyYXktPmdldChpKTsKLSAgICAgICAgYXV0byBpbnB1dFNvdXJjZUFjdGlvbnMgPSBwcm9j
ZXNzSW5wdXRBY3Rpb25TZXF1ZW5jZSgqbV9zZXNzaW9uLCAqYWN0aW9uU2VxdWVuY2UsIGVycm9y
TWVzc2FnZSk7CisgICAgICAgIGF1dG8gaW5wdXRTb3VyY2VBY3Rpb25zID0gcHJvY2Vzc0lucHV0
QWN0aW9uU2VxdWVuY2UoKm1fc2Vzc2lvbiwgYWN0aW9uU2VxdWVuY2UsIGVycm9yTWVzc2FnZSk7
CiAgICAgICAgIGlmICghaW5wdXRTb3VyY2VBY3Rpb25zKSB7CiAgICAgICAgICAgICBjb21wbGV0
aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6OkVycm9yQ29kZTo6
SW52YWxpZEFyZ3VtZW50LCBlcnJvck1lc3NhZ2UudmFsdWUoKSkpOwogICAgICAgICAgICAgcmV0
dXJuOwpAQCAtMjIwMiw4ICsyMTk5LDggQEAgdm9pZCBXZWJEcml2ZXJTZXJ2aWNlOjpzZW5kQWxl
cnRUZXh0KFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgcGFyYW1ldGVycywgRnVuY3Rpb24KICAgICBp
ZiAoIWZpbmRTZXNzaW9uT3JDb21wbGV0ZVdpdGhFcnJvcigqcGFyYW1ldGVycywgY29tcGxldGlv
bkhhbmRsZXIpKQogICAgICAgICByZXR1cm47CiAKLSAgICBTdHJpbmcgdGV4dDsKLSAgICBpZiAo
IXBhcmFtZXRlcnMtPmdldFN0cmluZygidGV4dCJfcywgdGV4dCkpIHsKKyAgICBhdXRvIHRleHQg
PSBwYXJhbWV0ZXJzLT5nZXRTdHJpbmcoInRleHQiX3MpOworICAgIGlmICghdGV4dCkgewogICAg
ICAgICBjb21wbGV0aW9uSGFuZGxlcihDb21tYW5kUmVzdWx0OjpmYWlsKENvbW1hbmRSZXN1bHQ6
OkVycm9yQ29kZTo6SW52YWxpZEFyZ3VtZW50KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViRHJpdmVyL1dlYkRyaXZlclNlcnZpY2UuaCBiL1NvdXJjZS9X
ZWJEcml2ZXIvV2ViRHJpdmVyU2VydmljZS5oCmluZGV4IGEzNGJlYjhmMGRkM2Q2NDA0Y2M5Njc2
ZGYyMGI0MGI4MjAxOTU4MGIuLmVkOWRiMDg4NTdiOTQ3NDlmNGU3YTQ4ZThmMGE5NmY0YjQ0MzJi
MzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJEcml2ZXIvV2ViRHJpdmVyU2VydmljZS5oCisrKyBi
L1NvdXJjZS9XZWJEcml2ZXIvV2ViRHJpdmVyU2VydmljZS5oCkBAIC0xMjIsOCArMTIyLDggQEAg
cHJpdmF0ZToKICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiB2YWxpZGF0ZWRDYXBhYmlsaXRpZXMo
Y29uc3QgSlNPTjo6T2JqZWN0JikgY29uc3Q7CiAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gbWVy
Z2VDYXBhYmlsaXRpZXMoY29uc3QgSlNPTjo6T2JqZWN0JiwgY29uc3QgSlNPTjo6T2JqZWN0Jikg
Y29uc3Q7CiAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gbWF0Y2hDYXBhYmlsaXRpZXMoY29uc3Qg
SlNPTjo6T2JqZWN0JikgY29uc3Q7Ci0gICAgYm9vbCBwbGF0Zm9ybVZhbGlkYXRlQ2FwYWJpbGl0
eShjb25zdCBTdHJpbmcmLCBjb25zdCBSZWZQdHI8SlNPTjo6VmFsdWU+JikgY29uc3Q7Ci0gICAg
Ym9vbCBwbGF0Zm9ybU1hdGNoQ2FwYWJpbGl0eShjb25zdCBTdHJpbmcmLCBjb25zdCBSZWZQdHI8
SlNPTjo6VmFsdWU+JikgY29uc3Q7CisgICAgYm9vbCBwbGF0Zm9ybVZhbGlkYXRlQ2FwYWJpbGl0
eShjb25zdCBTdHJpbmcmLCBjb25zdCBSZWY8SlNPTjo6VmFsdWU+JikgY29uc3Q7CisgICAgYm9v
bCBwbGF0Zm9ybU1hdGNoQ2FwYWJpbGl0eShjb25zdCBTdHJpbmcmLCBjb25zdCBSZWY8SlNPTjo6
VmFsdWU+JikgY29uc3Q7CiAgICAgYm9vbCBwbGF0Zm9ybVN1cHBvcnRQcm94eVR5cGUoY29uc3Qg
U3RyaW5nJikgY29uc3Q7CiAgICAgdm9pZCBwYXJzZUNhcGFiaWxpdGllcyhjb25zdCBKU09OOjpP
YmplY3QmIGRlc2lyZWRDYXBhYmlsaXRpZXMsIENhcGFiaWxpdGllcyYpIGNvbnN0OwogICAgIHZv
aWQgcGxhdGZvcm1QYXJzZUNhcGFiaWxpdGllcyhjb25zdCBKU09OOjpPYmplY3QmIGRlc2lyZWRD
YXBhYmlsaXRpZXMsIENhcGFiaWxpdGllcyYpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkRyaXZlci9ndGsvV2ViRHJpdmVyU2VydmljZUd0ay5jcHAgYi9Tb3VyY2UvV2ViRHJpdmVyL2d0
ay9XZWJEcml2ZXJTZXJ2aWNlR3RrLmNwcAppbmRleCAyNGQxYmRkMDE0YTA3MGI1OTc2NDRiNTUz
NjdkNDM3NDA3ZTJjMTk0Li40NGM5MWFhNWY2NzM3NWUxNTk5NDBiNGIwYTBkZDk0NGJmZDBmMmYy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViRHJpdmVyL2d0ay9XZWJEcml2ZXJTZXJ2aWNlR3RrLmNw
cAorKysgYi9Tb3VyY2UvV2ViRHJpdmVyL2d0ay9XZWJEcml2ZXJTZXJ2aWNlR3RrLmNwcApAQCAt
NDAsNjQgKzQwLDQ4IEBAIENhcGFiaWxpdGllcyBXZWJEcml2ZXJTZXJ2aWNlOjpwbGF0Zm9ybUNh
cGFiaWxpdGllcygpCiAgICAgcmV0dXJuIGNhcGFiaWxpdGllczsKIH0KIAotYm9vbCBXZWJEcml2
ZXJTZXJ2aWNlOjpwbGF0Zm9ybVZhbGlkYXRlQ2FwYWJpbGl0eShjb25zdCBTdHJpbmcmIG5hbWUs
IGNvbnN0IFJlZlB0cjxKU09OOjpWYWx1ZT4mIHZhbHVlKSBjb25zdAorYm9vbCBXZWJEcml2ZXJT
ZXJ2aWNlOjpwbGF0Zm9ybVZhbGlkYXRlQ2FwYWJpbGl0eShjb25zdCBTdHJpbmcmIG5hbWUsIGNv
bnN0IFJlZjxKU09OOjpWYWx1ZT4mIHZhbHVlKSBjb25zdAogewogICAgIGlmIChuYW1lICE9ICJ3
ZWJraXRndGs6YnJvd3Nlck9wdGlvbnMiKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIFJl
ZlB0cjxKU09OOjpPYmplY3Q+IGJyb3dzZXJPcHRpb25zOwotICAgIGlmICghdmFsdWUtPmFzT2Jq
ZWN0KGJyb3dzZXJPcHRpb25zKSkKKyAgICBhdXRvIGJyb3dzZXJPcHRpb25zID0gdmFsdWUtPmFz
T2JqZWN0KCk7CisgICAgaWYgKCFicm93c2VyT3B0aW9ucykKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCiAgICAgaWYgKGJyb3dzZXJPcHRpb25zLT5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAKLSAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IGJpbmFyeVZhbHVlOwotICAgIFN0cmluZyBi
aW5hcnk7Ci0gICAgaWYgKGJyb3dzZXJPcHRpb25zLT5nZXRWYWx1ZSgiYmluYXJ5Il9zLCBiaW5h
cnlWYWx1ZSkgJiYgIWJpbmFyeVZhbHVlLT5hc1N0cmluZyhiaW5hcnkpKQorICAgIGF1dG8gYmlu
YXJ5ID0gYnJvd3Nlck9wdGlvbnMtPmdldFN0cmluZygiYmluYXJ5Il9zKTsKKyAgICBpZiAoIWJp
bmFyeSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgUmVmUHRyPEpTT046OlZhbHVlPiB1
c2VPdmVybGF5U2Nyb2xsYmFyc1ZhbHVlOwotICAgIGJvb2wgdXNlT3ZlcmxheVNjcm9sbGJhcnM7
Ci0gICAgaWYgKGJyb3dzZXJPcHRpb25zLT5nZXRWYWx1ZSgidXNlT3ZlcmxheVNjcm9sbGJhcnMi
X3MsIHVzZU92ZXJsYXlTY3JvbGxiYXJzVmFsdWUpICYmICF1c2VPdmVybGF5U2Nyb2xsYmFyc1Zh
bHVlLT5hc0Jvb2xlYW4odXNlT3ZlcmxheVNjcm9sbGJhcnMpKQorICAgIGF1dG8gdXNlT3Zlcmxh
eVNjcm9sbGJhcnMgPSBicm93c2VyT3B0aW9ucy0+Z2V0Qm9vbGVhbigidXNlT3ZlcmxheVNjcm9s
bGJhcnMiX3MpOworICAgIGlmICghdXNlT3ZlcmxheVNjcm9sbGJhcnMpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gYnJvd3NlckFyZ3VtZW50c1ZhbHVl
OwotICAgIFJlZlB0cjxKU09OOjpBcnJheT4gYnJvd3NlckFyZ3VtZW50czsKLSAgICBpZiAoYnJv
d3Nlck9wdGlvbnMtPmdldFZhbHVlKCJhcmdzIl9zLCBicm93c2VyQXJndW1lbnRzVmFsdWUpKSB7
Ci0gICAgICAgIGlmICghYnJvd3NlckFyZ3VtZW50c1ZhbHVlLT5hc0FycmF5KGJyb3dzZXJBcmd1
bWVudHMpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCisgICAgaWYgKGF1dG8gYnJvd3Nl
ckFyZ3VtZW50cyA9IGJyb3dzZXJPcHRpb25zLT5nZXRBcnJheSgiYXJncyJfcykpIHsKICAgICAg
ICAgdW5zaWduZWQgYnJvd3NlckFyZ3VtZW50c0xlbmd0aCA9IGJyb3dzZXJBcmd1bWVudHMtPmxl
bmd0aCgpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYnJvd3NlckFyZ3VtZW50
c0xlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHZhbHVlID0g
YnJvd3NlckFyZ3VtZW50cy0+Z2V0KGkpOwotICAgICAgICAgICAgU3RyaW5nIGFyZ3VtZW50Owot
ICAgICAgICAgICAgaWYgKCF2YWx1ZS0+YXNTdHJpbmcoYXJndW1lbnQpKQorICAgICAgICAgICAg
YXV0byBhcmd1bWVudCA9IGJyb3dzZXJBcmd1bWVudHMtPmdldChpKS0+YXNTdHJpbmcoKTsKKyAg
ICAgICAgICAgIGlmICghYXJndW1lbnQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICB9CiAgICAgfQogCi0gICAgUmVmUHRyPEpTT046OlZhbHVlPiBjZXJ0aWZpY2F0ZXNW
YWx1ZTsKLSAgICBpZiAoYnJvd3Nlck9wdGlvbnMtPmdldFZhbHVlKCJjZXJ0aWZpY2F0ZXMiX3Ms
IGNlcnRpZmljYXRlc1ZhbHVlKSkgewotICAgICAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IGNlcnRp
ZmljYXRlczsKLSAgICAgICAgaWYgKCFjZXJ0aWZpY2F0ZXNWYWx1ZS0+YXNBcnJheShjZXJ0aWZp
Y2F0ZXMpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCisgICAgaWYgKGF1dG8gY2VydGlm
aWNhdGVzID0gYnJvd3Nlck9wdGlvbnMtPmdldEFycmF5KCJjZXJ0aWZpY2F0ZXMiX3MpKSB7CiAg
ICAgICAgIHVuc2lnbmVkIGNlcnRpZmljYXRlc0xlbmd0aCA9IGNlcnRpZmljYXRlcy0+bGVuZ3Ro
KCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjZXJ0aWZpY2F0ZXNMZW5ndGg7
ICsraSkgewotICAgICAgICAgICAgUmVmUHRyPEpTT046OlZhbHVlPiBjZXJ0aWZpY2F0ZVZhbHVl
ID0gY2VydGlmaWNhdGVzLT5nZXQoaSk7Ci0gICAgICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0
PiBjZXJ0aWZpY2F0ZTsKLSAgICAgICAgICAgIGlmICghY2VydGlmaWNhdGVWYWx1ZS0+YXNPYmpl
Y3QoY2VydGlmaWNhdGUpKQorICAgICAgICAgICAgYXV0byBjZXJ0aWZpY2F0ZSA9IGNlcnRpZmlj
YXRlcy0+Z2V0KGkpLT5hc09iamVjdCgpOworICAgICAgICAgICAgaWYgKCFjZXJ0aWZpY2F0ZSkK
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgICAgIFJlZlB0cjxKU09O
OjpWYWx1ZT4gaG9zdFZhbHVlOwotICAgICAgICAgICAgU3RyaW5nIGhvc3Q7Ci0gICAgICAgICAg
ICBpZiAoIWNlcnRpZmljYXRlLT5nZXRWYWx1ZSgiaG9zdCJfcywgaG9zdFZhbHVlKSB8fCAhaG9z
dFZhbHVlLT5hc1N0cmluZyhob3N0KSkKKyAgICAgICAgICAgIGF1dG8gaG9zdCA9IGNlcnRpZmlj
YXRlLT5nZXRTdHJpbmcoImhvc3QiX3MpOworICAgICAgICAgICAgaWYgKCFob3N0KQogICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICAgICAgUmVmUHRyPEpTT046OlZhbHVl
PiBjZXJ0aWZpY2F0ZUZpbGVWYWx1ZTsKLSAgICAgICAgICAgIFN0cmluZyBjZXJ0aWZpY2F0ZUZp
bGU7Ci0gICAgICAgICAgICBpZiAoIWNlcnRpZmljYXRlLT5nZXRWYWx1ZSgiY2VydGlmaWNhdGVG
aWxlIl9zLCBjZXJ0aWZpY2F0ZUZpbGVWYWx1ZSkgfHwgIWNlcnRpZmljYXRlRmlsZVZhbHVlLT5h
c1N0cmluZyhjZXJ0aWZpY2F0ZUZpbGUpKQorICAgICAgICAgICAgYXV0byBjZXJ0aWZpY2F0ZUZp
bGUgPSBjZXJ0aWZpY2F0ZS0+Z2V0U3RyaW5nKCJjZXJ0aWZpY2F0ZUZpbGUiX3MpOworICAgICAg
ICAgICAgaWYgKCFjZXJ0aWZpY2F0ZUZpbGUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICB9CiAgICAgfQpAQCAtMTA1LDcgKzg5LDcgQEAgYm9vbCBXZWJEcml2ZXJTZXJ2
aWNlOjpwbGF0Zm9ybVZhbGlkYXRlQ2FwYWJpbGl0eShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0
IFJlZlAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBXZWJEcml2ZXJTZXJ2aWNlOjpwbGF0
Zm9ybU1hdGNoQ2FwYWJpbGl0eShjb25zdCBTdHJpbmcmLCBjb25zdCBSZWZQdHI8SlNPTjo6VmFs
dWU+JikgY29uc3QKK2Jvb2wgV2ViRHJpdmVyU2VydmljZTo6cGxhdGZvcm1NYXRjaENhcGFiaWxp
dHkoY29uc3QgU3RyaW5nJiwgY29uc3QgUmVmPEpTT046OlZhbHVlPiYpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIHRydWU7CiB9CkBAIC0xMTYsNTMgKzEwMCw0NiBAQCB2b2lkIFdlYkRyaXZlclNlcnZp
Y2U6OnBsYXRmb3JtUGFyc2VDYXBhYmlsaXRpZXMoY29uc3QgSlNPTjo6T2JqZWN0JiBtYXRjaGVk
Q2FwYQogICAgIGNhcGFiaWxpdGllcy5icm93c2VyQXJndW1lbnRzID0gVmVjdG9yPFN0cmluZz4g
eyAiLS1hdXRvbWF0aW9uIl9zIH07CiAgICAgY2FwYWJpbGl0aWVzLnVzZU92ZXJsYXlTY3JvbGxi
YXJzID0gdHJ1ZTsKIAotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IGJyb3dzZXJPcHRpb25zOwot
ICAgIGlmICghbWF0Y2hlZENhcGFiaWxpdGllcy5nZXRPYmplY3QoIndlYmtpdGd0azpicm93c2Vy
T3B0aW9ucyJfcywgYnJvd3Nlck9wdGlvbnMpKQorICAgIGF1dG8gYnJvd3Nlck9wdGlvbnMgPSBt
YXRjaGVkQ2FwYWJpbGl0aWVzLmdldE9iamVjdCgid2Via2l0Z3RrOmJyb3dzZXJPcHRpb25zIl9z
KTsKKyAgICBpZiAoIWJyb3dzZXJPcHRpb25zKQogICAgICAgICByZXR1cm47CiAKLSAgICBTdHJp
bmcgYnJvd3NlckJpbmFyeTsKLSAgICBpZiAoYnJvd3Nlck9wdGlvbnMtPmdldFN0cmluZygiYmlu
YXJ5Il9zLCBicm93c2VyQmluYXJ5KSkgeworICAgIGF1dG8gYnJvd3NlckJpbmFyeSA9IGJyb3dz
ZXJPcHRpb25zLT5nZXRTdHJpbmcoImJpbmFyeSJfcyk7CisgICAgaWYgKCEhYnJvd3NlckJpbmFy
eSkgewogICAgICAgICBjYXBhYmlsaXRpZXMuYnJvd3NlckJpbmFyeSA9IGJyb3dzZXJCaW5hcnk7
CiAgICAgICAgIGNhcGFiaWxpdGllcy5icm93c2VyQXJndW1lbnRzID0gV1RGOjpudWxsb3B0Owog
ICAgIH0KIAotICAgIFJlZlB0cjxKU09OOjpBcnJheT4gYnJvd3NlckFyZ3VtZW50czsKLSAgICBp
ZiAoYnJvd3Nlck9wdGlvbnMtPmdldEFycmF5KCJhcmdzIl9zLCBicm93c2VyQXJndW1lbnRzKSAm
JiBicm93c2VyQXJndW1lbnRzLT5sZW5ndGgoKSkgeworICAgIGF1dG8gYnJvd3NlckFyZ3VtZW50
cyA9IGJyb3dzZXJPcHRpb25zLT5nZXRBcnJheSgiYXJncyJfcyk7CisgICAgaWYgKGJyb3dzZXJB
cmd1bWVudHMgJiYgYnJvd3NlckFyZ3VtZW50cy0+bGVuZ3RoKCkpIHsKICAgICAgICAgdW5zaWdu
ZWQgYnJvd3NlckFyZ3VtZW50c0xlbmd0aCA9IGJyb3dzZXJBcmd1bWVudHMtPmxlbmd0aCgpOwog
ICAgICAgICBjYXBhYmlsaXRpZXMuYnJvd3NlckFyZ3VtZW50cyA9IFZlY3RvcjxTdHJpbmc+KCk7
CiAgICAgICAgIGNhcGFiaWxpdGllcy5icm93c2VyQXJndW1lbnRzLT5yZXNlcnZlSW5pdGlhbENh
cGFjaXR5KGJyb3dzZXJBcmd1bWVudHNMZW5ndGgpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgYnJvd3NlckFyZ3VtZW50c0xlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICBSZWZQ
dHI8SlNPTjo6VmFsdWU+IHZhbHVlID0gYnJvd3NlckFyZ3VtZW50cy0+Z2V0KGkpOwotICAgICAg
ICAgICAgU3RyaW5nIGFyZ3VtZW50OwotICAgICAgICAgICAgdmFsdWUtPmFzU3RyaW5nKGFyZ3Vt
ZW50KTsKKyAgICAgICAgICAgIGF1dG8gYXJndW1lbnQgPSBicm93c2VyQXJndW1lbnRzLT5nZXQo
aSktPmFzU3RyaW5nKCk7CiAgICAgICAgICAgICBBU1NFUlQoIWFyZ3VtZW50LmlzTnVsbCgpKTsK
ICAgICAgICAgICAgIGNhcGFiaWxpdGllcy5icm93c2VyQXJndW1lbnRzLT51bmNoZWNrZWRBcHBl
bmQoV1RGTW92ZShhcmd1bWVudCkpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgYm9vbCB1c2VP
dmVybGF5U2Nyb2xsYmFyczsKLSAgICBpZiAoYnJvd3Nlck9wdGlvbnMtPmdldEJvb2xlYW4oInVz
ZU92ZXJsYXlTY3JvbGxiYXJzIl9zLCB1c2VPdmVybGF5U2Nyb2xsYmFycykpCisgICAgaWYgKGF1
dG8gdXNlT3ZlcmxheVNjcm9sbGJhcnMgPSBicm93c2VyT3B0aW9ucy0+Z2V0Qm9vbGVhbigidXNl
T3ZlcmxheVNjcm9sbGJhcnMiX3MpKQogICAgICAgICBjYXBhYmlsaXRpZXMudXNlT3ZlcmxheVNj
cm9sbGJhcnMgPSB1c2VPdmVybGF5U2Nyb2xsYmFyczsKICAgICBlbHNlCiAgICAgICAgIGNhcGFi
aWxpdGllcy51c2VPdmVybGF5U2Nyb2xsYmFycyA9IHRydWU7CiAKLSAgICBSZWZQdHI8SlNPTjo6
QXJyYXk+IGNlcnRpZmljYXRlczsKLSAgICBpZiAoYnJvd3Nlck9wdGlvbnMtPmdldEFycmF5KCJj
ZXJ0aWZpY2F0ZXMiX3MsIGNlcnRpZmljYXRlcykgJiYgY2VydGlmaWNhdGVzLT5sZW5ndGgoKSkg
eworICAgIGF1dG8gY2VydGlmaWNhdGVzID0gYnJvd3Nlck9wdGlvbnMtPmdldEFycmF5KCJjZXJ0
aWZpY2F0ZXMiX3MpOworICAgIGlmIChjZXJ0aWZpY2F0ZXMgJiYgY2VydGlmaWNhdGVzLT5sZW5n
dGgoKSkgewogICAgICAgICB1bnNpZ25lZCBjZXJ0aWZpY2F0ZXNMZW5ndGggPSBjZXJ0aWZpY2F0
ZXMtPmxlbmd0aCgpOwogICAgICAgICBjYXBhYmlsaXRpZXMuY2VydGlmaWNhdGVzID0gVmVjdG9y
PHN0ZDo6cGFpcjxTdHJpbmcsIFN0cmluZz4+KCk7CiAgICAgICAgIGNhcGFiaWxpdGllcy5jZXJ0
aWZpY2F0ZXMtPnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoY2VydGlmaWNhdGVzTGVuZ3RoKTsKICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNlcnRpZmljYXRlc0xlbmd0aDsgKytpKSB7
Ci0gICAgICAgICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHZhbHVlID0gY2VydGlmaWNhdGVzLT5n
ZXQoaSk7Ci0gICAgICAgICAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBjZXJ0aWZpY2F0ZTsKLSAg
ICAgICAgICAgIHZhbHVlLT5hc09iamVjdChjZXJ0aWZpY2F0ZSk7CisgICAgICAgICAgICBhdXRv
IGNlcnRpZmljYXRlID0gY2VydGlmaWNhdGVzLT5nZXQoaSktPmFzT2JqZWN0KCk7CiAgICAgICAg
ICAgICBBU1NFUlQoY2VydGlmaWNhdGUpOwogCi0gICAgICAgICAgICBTdHJpbmcgaG9zdDsKLSAg
ICAgICAgICAgIGNlcnRpZmljYXRlLT5nZXRTdHJpbmcoImhvc3QiX3MsIGhvc3QpOworICAgICAg
ICAgICAgYXV0byBob3N0ID0gY2VydGlmaWNhdGUtPmdldFN0cmluZygiaG9zdCJfcyk7CiAgICAg
ICAgICAgICBBU1NFUlQoIWhvc3QuaXNOdWxsKCkpOwogCi0gICAgICAgICAgICBTdHJpbmcgY2Vy
dGlmaWNhdGVGaWxlOwotICAgICAgICAgICAgY2VydGlmaWNhdGUtPmdldFN0cmluZygiY2VydGlm
aWNhdGVGaWxlIl9zLCBjZXJ0aWZpY2F0ZUZpbGUpOworICAgICAgICAgICAgYXV0byBjZXJ0aWZp
Y2F0ZUZpbGUgPSBjZXJ0aWZpY2F0ZS0+Z2V0U3RyaW5nKCJjZXJ0aWZpY2F0ZUZpbGUiX3MpOwog
ICAgICAgICAgICAgQVNTRVJUKCFjZXJ0aWZpY2F0ZUZpbGUuaXNOdWxsKCkpOwogCiAgICAgICAg
ICAgICBjYXBhYmlsaXRpZXMuY2VydGlmaWNhdGVzLT51bmNoZWNrZWRBcHBlbmQoeyBXVEZNb3Zl
KGhvc3QpLCBXVEZNb3ZlKGNlcnRpZmljYXRlRmlsZSkgfSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViRHJpdmVyL3dpbi9XZWJEcml2ZXJTZXJ2aWNlV2luLmNwcCBiL1NvdXJjZS9XZWJEcml2ZXIv
d2luL1dlYkRyaXZlclNlcnZpY2VXaW4uY3BwCmluZGV4IGVjZmU0Y2QxMDUyNmVhYTFlY2NhY2Ew
NDM5ODhjZDYzMzA0ZDM4NGQuLjlhOTYwZjBiYmYyZGEzODhhOTZmNjlmNGFmNzQxN2VlNjBlZDM3
MzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJEcml2ZXIvd2luL1dlYkRyaXZlclNlcnZpY2VXaW4u
Y3BwCisrKyBiL1NvdXJjZS9XZWJEcml2ZXIvd2luL1dlYkRyaXZlclNlcnZpY2VXaW4uY3BwCkBA
IC00NCwxMiArNDQsMTIgQEAgYm9vbCBXZWJEcml2ZXJTZXJ2aWNlOjpwbGF0Zm9ybUNvbXBhcmVC
cm93c2VyVmVyc2lvbnMoY29uc3QgU3RyaW5nJiByZXF1aXJlZFZlcnMKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotYm9vbCBXZWJEcml2ZXJTZXJ2aWNlOjpwbGF0Zm9ybVZhbGlkYXRlQ2FwYWJpbGl0
eShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFJlZlB0cjxKU09OOjpWYWx1ZT4mIHZhbHVlKSBj
b25zdAorYm9vbCBXZWJEcml2ZXJTZXJ2aWNlOjpwbGF0Zm9ybVZhbGlkYXRlQ2FwYWJpbGl0eShj
b25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFJlZjxKU09OOjpWYWx1ZT4mIHZhbHVlKSBjb25zdAog
ewogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFdlYkRyaXZlclNlcnZpY2U6OnBsYXRmb3Jt
TWF0Y2hDYXBhYmlsaXR5KGNvbnN0IFN0cmluZyYsIGNvbnN0IFJlZlB0cjxKU09OOjpWYWx1ZT4m
KSBjb25zdAorYm9vbCBXZWJEcml2ZXJTZXJ2aWNlOjpwbGF0Zm9ybU1hdGNoQ2FwYWJpbGl0eShj
b25zdCBTdHJpbmcmLCBjb25zdCBSZWY8SlNPTjo6VmFsdWU+JikgY29uc3QKIHsKICAgICByZXR1
cm4gdHJ1ZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJEcml2ZXIvd3BlL1dlYkRyaXZlclNl
cnZpY2VXUEUuY3BwIGIvU291cmNlL1dlYkRyaXZlci93cGUvV2ViRHJpdmVyU2VydmljZVdQRS5j
cHAKaW5kZXggMDZkM2E1YzJhODI1MjkxOGU3NGYxMDNlYmM4OWNiNTIzNzllOTAzNy4uMmI3YjE3
MWYyMmRhNTNmZWY5NTgxYmRmNmRiNzY2M2NiMWRjYTMxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkRyaXZlci93cGUvV2ViRHJpdmVyU2VydmljZVdQRS5jcHAKKysrIGIvU291cmNlL1dlYkRyaXZl
ci93cGUvV2ViRHJpdmVyU2VydmljZVdQRS5jcHAKQEAgLTQwLDU3ICs0MCw0NyBAQCBDYXBhYmls
aXRpZXMgV2ViRHJpdmVyU2VydmljZTo6cGxhdGZvcm1DYXBhYmlsaXRpZXMoKQogICAgIHJldHVy
biBjYXBhYmlsaXRpZXM7CiB9CiAKLWJvb2wgV2ViRHJpdmVyU2VydmljZTo6cGxhdGZvcm1WYWxp
ZGF0ZUNhcGFiaWxpdHkoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBSZWZQdHI8SlNPTjo6VmFs
dWU+JiB2YWx1ZSkgY29uc3QKK2Jvb2wgV2ViRHJpdmVyU2VydmljZTo6cGxhdGZvcm1WYWxpZGF0
ZUNhcGFiaWxpdHkoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBSZWY8SlNPTjo6VmFsdWU+JiB2
YWx1ZSkgY29uc3QKIHsKICAgICBpZiAobmFtZSAhPSAid3BlOmJyb3dzZXJPcHRpb25zIikKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBicm93c2VyT3B0
aW9uczsKLSAgICBpZiAoIXZhbHVlLT5hc09iamVjdChicm93c2VyT3B0aW9ucykpCisgICAgYXV0
byBicm93c2VyT3B0aW9ucyA9IHZhbHVlLT5hc09iamVjdCgpOworICAgIGlmICghYnJvd3Nlck9w
dGlvbnMpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChicm93c2VyT3B0aW9ucy0+
aXNOdWxsKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgLy8gSWYgYnJvd3NlciBvcHRp
b25zIGFyZSBwcm92aWRlZCwgYmluYXJ5IGlzIHJlcXVpcmVkLgotICAgIFN0cmluZyBiaW5hcnk7
Ci0gICAgaWYgKCFicm93c2VyT3B0aW9ucy0+Z2V0U3RyaW5nKCJiaW5hcnkiX3MsIGJpbmFyeSkp
CisgICAgYXV0byBiaW5hcnkgPSBicm93c2VyT3B0aW9ucy0+Z2V0U3RyaW5nKCJiaW5hcnkiX3Mp
OworICAgIGlmICghYmluYXJ5KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBSZWZQdHI8
SlNPTjo6VmFsdWU+IGJyb3dzZXJBcmd1bWVudHNWYWx1ZTsKLSAgICBSZWZQdHI8SlNPTjo6QXJy
YXk+IGJyb3dzZXJBcmd1bWVudHM7Ci0gICAgaWYgKGJyb3dzZXJPcHRpb25zLT5nZXRWYWx1ZSgi
YXJncyJfcywgYnJvd3NlckFyZ3VtZW50c1ZhbHVlKSAmJiAhYnJvd3NlckFyZ3VtZW50c1ZhbHVl
LT5hc0FycmF5KGJyb3dzZXJBcmd1bWVudHMpKQorICAgIGF1dG8gYnJvd3NlckFyZ3VtZW50cyA9
IGJyb3dzZXJPcHRpb25zLT5nZXRBcnJheSgiYXJncyJfcyk7CisgICAgaWYgKCFicm93c2VyQXJn
dW1lbnRzKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICB1bnNpZ25lZCBicm93c2VyQXJn
dW1lbnRzTGVuZ3RoID0gYnJvd3NlckFyZ3VtZW50cy0+bGVuZ3RoKCk7CiAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGJyb3dzZXJBcmd1bWVudHNMZW5ndGg7ICsraSkgewotICAgICAgICBS
ZWZQdHI8SlNPTjo6VmFsdWU+IHZhbHVlID0gYnJvd3NlckFyZ3VtZW50cy0+Z2V0KGkpOwotICAg
ICAgICBTdHJpbmcgYXJndW1lbnQ7Ci0gICAgICAgIGlmICghdmFsdWUtPmFzU3RyaW5nKGFyZ3Vt
ZW50KSkKKyAgICAgICAgYXV0byBhcmd1bWVudCA9IGJyb3dzZXJBcmd1bWVudHMtPmdldChpKS0+
YXNTdHJpbmcoKTsKKyAgICAgICAgaWYgKCFhcmd1bWVudCkKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9CiAKLSAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IGNlcnRpZmljYXRlc1ZhbHVl
OwotICAgIGlmIChicm93c2VyT3B0aW9ucy0+Z2V0VmFsdWUoImNlcnRpZmljYXRlcyJfcywgY2Vy
dGlmaWNhdGVzVmFsdWUpKSB7Ci0gICAgICAgIFJlZlB0cjxKU09OOjpBcnJheT4gY2VydGlmaWNh
dGVzOwotICAgICAgICBpZiAoIWNlcnRpZmljYXRlc1ZhbHVlLT5hc0FycmF5KGNlcnRpZmljYXRl
cykpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KKyAgICBpZiAoYXV0byBjZXJ0aWZpY2F0
ZXMgPSBicm93c2VyT3B0aW9ucy0+Z2V0QXJyYXkoImNlcnRpZmljYXRlcyJfcykpIHsKICAgICAg
ICAgdW5zaWduZWQgY2VydGlmaWNhdGVzTGVuZ3RoID0gY2VydGlmaWNhdGVzLT5sZW5ndGgoKTsK
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNlcnRpZmljYXRlc0xlbmd0aDsgKytp
KSB7Ci0gICAgICAgICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IGNlcnRpZmljYXRlVmFsdWUgPSBj
ZXJ0aWZpY2F0ZXMtPmdldChpKTsKLSAgICAgICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IGNl
cnRpZmljYXRlOwotICAgICAgICAgICAgaWYgKCFjZXJ0aWZpY2F0ZVZhbHVlLT5hc09iamVjdChj
ZXJ0aWZpY2F0ZSkpCisgICAgICAgICAgICBhdXRvIGNlcnRpZmljYXRlID0gY2VydGlmaWNhdGVz
LT5nZXQoaSktPmFzT2JqZWN0KCk7CisgICAgICAgICAgICBpZiAoIWNlcnRpZmljYXRlKQogICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICAgICAgUmVmUHRyPEpTT046OlZh
bHVlPiBob3N0VmFsdWU7Ci0gICAgICAgICAgICBTdHJpbmcgaG9zdDsKLSAgICAgICAgICAgIGlm
ICghY2VydGlmaWNhdGUtPmdldFZhbHVlKCJob3N0Il9zLCBob3N0VmFsdWUpIHx8ICFob3N0VmFs
dWUtPmFzU3RyaW5nKGhvc3QpKQorICAgICAgICAgICAgYXV0byBob3N0ID0gY2VydGlmaWNhdGUt
PmdldFN0cmluZygiaG9zdCJfcyk7CisgICAgICAgICAgICBpZiAoIWhvc3QpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IGNl
cnRpZmljYXRlRmlsZVZhbHVlOwotICAgICAgICAgICAgU3RyaW5nIGNlcnRpZmljYXRlRmlsZTsK
LSAgICAgICAgICAgIGlmICghY2VydGlmaWNhdGUtPmdldFZhbHVlKCJjZXJ0aWZpY2F0ZUZpbGUi
X3MsIGNlcnRpZmljYXRlRmlsZVZhbHVlKSB8fCAhY2VydGlmaWNhdGVGaWxlVmFsdWUtPmFzU3Ry
aW5nKGNlcnRpZmljYXRlRmlsZSkpCisgICAgICAgICAgICBhdXRvIGNlcnRpZmljYXRlRmlsZSA9
IGNlcnRpZmljYXRlLT5nZXRTdHJpbmcoImNlcnRpZmljYXRlRmlsZSJfcyk7CisgICAgICAgICAg
ICBpZiAoIWNlcnRpZmljYXRlRmlsZSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgIH0KICAgICB9CkBAIC05OCw3ICs4OCw3IEBAIGJvb2wgV2ViRHJpdmVyU2VydmljZTo6
cGxhdGZvcm1WYWxpZGF0ZUNhcGFiaWxpdHkoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBSZWZQ
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgV2ViRHJpdmVyU2VydmljZTo6cGxhdGZvcm1N
YXRjaENhcGFiaWxpdHkoY29uc3QgU3RyaW5nJiwgY29uc3QgUmVmUHRyPEpTT046OlZhbHVlPiYp
IGNvbnN0Citib29sIFdlYkRyaXZlclNlcnZpY2U6OnBsYXRmb3JtTWF0Y2hDYXBhYmlsaXR5KGNv
bnN0IFN0cmluZyYsIGNvbnN0IFJlZjxKU09OOjpWYWx1ZT4mKSBjb25zdAogewogICAgIHJldHVy
biB0cnVlOwogfQpAQCAtMTA4LDQ3ICs5OCw0MSBAQCB2b2lkIFdlYkRyaXZlclNlcnZpY2U6OnBs
YXRmb3JtUGFyc2VDYXBhYmlsaXRpZXMoY29uc3QgSlNPTjo6T2JqZWN0JiBtYXRjaGVkQ2FwYQog
ICAgIGNhcGFiaWxpdGllcy5icm93c2VyQmluYXJ5ID0gU3RyaW5nKCJNaW5pQnJvd3NlciIpOwog
ICAgIGNhcGFiaWxpdGllcy5icm93c2VyQXJndW1lbnRzID0gVmVjdG9yPFN0cmluZz4geyAiLS1h
dXRvbWF0aW9uIl9zIH07CiAKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBicm93c2VyT3B0aW9u
czsKLSAgICBpZiAoIW1hdGNoZWRDYXBhYmlsaXRpZXMuZ2V0T2JqZWN0KCJ3cGU6YnJvd3Nlck9w
dGlvbnMiX3MsIGJyb3dzZXJPcHRpb25zKSkKKyAgICBhdXRvIGJyb3dzZXJPcHRpb25zID0gbWF0
Y2hlZENhcGFiaWxpdGllcy5nZXRPYmplY3QoIndwZTpicm93c2VyT3B0aW9ucyJfcyk7CisgICAg
aWYgKCFicm93c2VyT3B0aW9ucykKICAgICAgICAgcmV0dXJuOwogCi0gICAgU3RyaW5nIGJyb3dz
ZXJCaW5hcnk7Ci0gICAgaWYgKGJyb3dzZXJPcHRpb25zLT5nZXRTdHJpbmcoImJpbmFyeSJfcywg
YnJvd3NlckJpbmFyeSkpIHsKKyAgICBhdXRvIGJyb3dzZXJCaW5hcnkgPSBicm93c2VyT3B0aW9u
cy0+Z2V0U3RyaW5nKCJiaW5hcnkiX3MpOworICAgIGlmICghIWJyb3dzZXJCaW5hcnkpIHsKICAg
ICAgICAgY2FwYWJpbGl0aWVzLmJyb3dzZXJCaW5hcnkgPSBicm93c2VyQmluYXJ5OwogICAgICAg
ICBjYXBhYmlsaXRpZXMuYnJvd3NlckFyZ3VtZW50cyA9IFdURjo6bnVsbG9wdDsKICAgICB9CiAK
LSAgICBSZWZQdHI8SlNPTjo6QXJyYXk+IGJyb3dzZXJBcmd1bWVudHM7Ci0gICAgaWYgKGJyb3dz
ZXJPcHRpb25zLT5nZXRBcnJheSgiYXJncyJfcywgYnJvd3NlckFyZ3VtZW50cykgJiYgYnJvd3Nl
ckFyZ3VtZW50cy0+bGVuZ3RoKCkpIHsKKyAgICBhdXRvIGJyb3dzZXJBcmd1bWVudHMgPSBicm93
c2VyT3B0aW9ucy0+Z2V0QXJyYXkoImFyZ3MiX3MpOworICAgIGlmIChicm93c2VyQXJndW1lbnRz
ICYmIGJyb3dzZXJBcmd1bWVudHMtPmxlbmd0aCgpKSB7CiAgICAgICAgIHVuc2lnbmVkIGJyb3dz
ZXJBcmd1bWVudHNMZW5ndGggPSBicm93c2VyQXJndW1lbnRzLT5sZW5ndGgoKTsKICAgICAgICAg
Y2FwYWJpbGl0aWVzLmJyb3dzZXJBcmd1bWVudHMgPSBWZWN0b3I8U3RyaW5nPigpOwogICAgICAg
ICBjYXBhYmlsaXRpZXMuYnJvd3NlckFyZ3VtZW50cy0+cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShi
cm93c2VyQXJndW1lbnRzTGVuZ3RoKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGJyb3dzZXJBcmd1bWVudHNMZW5ndGg7ICsraSkgewotICAgICAgICAgICAgUmVmUHRyPEpTT046
OlZhbHVlPiB2YWx1ZSA9IGJyb3dzZXJBcmd1bWVudHMtPmdldChpKTsKLSAgICAgICAgICAgIFN0
cmluZyBhcmd1bWVudDsKLSAgICAgICAgICAgIHZhbHVlLT5hc1N0cmluZyhhcmd1bWVudCk7Cisg
ICAgICAgICAgICBhdXRvIGFyZ3VtZW50ID0gYnJvd3NlckFyZ3VtZW50cy0+Z2V0KGkpLT5hc1N0
cmluZygpOwogICAgICAgICAgICAgQVNTRVJUKCFhcmd1bWVudC5pc051bGwoKSk7CiAgICAgICAg
ICAgICBjYXBhYmlsaXRpZXMuYnJvd3NlckFyZ3VtZW50cy0+dW5jaGVja2VkQXBwZW5kKFdURk1v
dmUoYXJndW1lbnQpKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIFJlZlB0cjxKU09OOjpBcnJh
eT4gY2VydGlmaWNhdGVzOwotICAgIGlmIChicm93c2VyT3B0aW9ucy0+Z2V0QXJyYXkoImNlcnRp
ZmljYXRlcyJfcywgY2VydGlmaWNhdGVzKSAmJiBjZXJ0aWZpY2F0ZXMtPmxlbmd0aCgpKSB7Cisg
ICAgYXV0byBjZXJ0aWZpY2F0ZXMgPSBicm93c2VyT3B0aW9ucy0+Z2V0QXJyYXkoImNlcnRpZmlj
YXRlcyJfcyk7CisgICAgaWYgKGNlcnRpZmljYXRlcyAmJiBjZXJ0aWZpY2F0ZXMtPmxlbmd0aCgp
KSB7CiAgICAgICAgIHVuc2lnbmVkIGNlcnRpZmljYXRlc0xlbmd0aCA9IGNlcnRpZmljYXRlcy0+
bGVuZ3RoKCk7CiAgICAgICAgIGNhcGFiaWxpdGllcy5jZXJ0aWZpY2F0ZXMgPSBWZWN0b3I8c3Rk
OjpwYWlyPFN0cmluZywgU3RyaW5nPj4oKTsKICAgICAgICAgY2FwYWJpbGl0aWVzLmNlcnRpZmlj
YXRlcy0+cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShjZXJ0aWZpY2F0ZXNMZW5ndGgpOwogICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY2VydGlmaWNhdGVzTGVuZ3RoOyArK2kpIHsKLSAg
ICAgICAgICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gdmFsdWUgPSBjZXJ0aWZpY2F0ZXMtPmdldChp
KTsKLSAgICAgICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IGNlcnRpZmljYXRlOwotICAgICAg
ICAgICAgdmFsdWUtPmFzT2JqZWN0KGNlcnRpZmljYXRlKTsKKyAgICAgICAgICAgIGF1dG8gY2Vy
dGlmaWNhdGUgPSBjZXJ0aWZpY2F0ZXMtPmdldChpKS0+YXNPYmplY3QoKTsKICAgICAgICAgICAg
IEFTU0VSVChjZXJ0aWZpY2F0ZSk7CiAKLSAgICAgICAgICAgIFN0cmluZyBob3N0OwotICAgICAg
ICAgICAgY2VydGlmaWNhdGUtPmdldFN0cmluZygiaG9zdCJfcywgaG9zdCk7CisgICAgICAgICAg
ICBhdXRvIGhvc3QgPSBjZXJ0aWZpY2F0ZS0+Z2V0U3RyaW5nKCJob3N0Il9zKTsKICAgICAgICAg
ICAgIEFTU0VSVCghaG9zdC5pc051bGwoKSk7CiAKLSAgICAgICAgICAgIFN0cmluZyBjZXJ0aWZp
Y2F0ZUZpbGU7Ci0gICAgICAgICAgICBjZXJ0aWZpY2F0ZS0+Z2V0U3RyaW5nKCJjZXJ0aWZpY2F0
ZUZpbGUiX3MsIGNlcnRpZmljYXRlRmlsZSk7CisgICAgICAgICAgICBhdXRvIGNlcnRpZmljYXRl
RmlsZSA9IGNlcnRpZmljYXRlLT5nZXRTdHJpbmcoImNlcnRpZmljYXRlRmlsZSJfcyk7CiAgICAg
ICAgICAgICBBU1NFUlQoIWNlcnRpZmljYXRlRmlsZS5pc051bGwoKSk7CiAKICAgICAgICAgICAg
IGNhcGFiaWxpdGllcy5jZXJ0aWZpY2F0ZXMtPnVuY2hlY2tlZEFwcGVuZCh7IFdURk1vdmUoaG9z
dCksIFdURk1vdmUoY2VydGlmaWNhdGVGaWxlKSB9KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJ
bnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0NTU01hbmFnZXIuanMgYi9Tb3Vy
Y2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9Db250cm9sbGVycy9DU1NNYW5hZ2VyLmpz
CmluZGV4IDY4YWVhYTk3ODcwMjhlZThkMTg1OGExZDI3MDc1MDMzNjBiZDRlOTIuLjE1YjYyMzFh
ZjMzYjRjZjdlZWI4ZDI5MDk4NzNiNGRhNGE1YmE3YTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJ
bnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0NvbnRyb2xsZXJzL0NTU01hbmFnZXIuanMKKysrIGIv
U291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQ29udHJvbGxlcnMvQ1NTTWFuYWdl
ci5qcwpAQCAtMjAzLDMyICsyMDMsMzQgQEAgV0kuQ1NTTWFuYWdlciA9IGNsYXNzIENTU01hbmFn
ZXIgZXh0ZW5kcyBXSS5PYmplY3QKICAgICAgICAgaWYgKCF0aGlzLmNhbkZvcmNlQXBwZWFyYW5j
ZSgpKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIGxldCBwcm90b2NvbE5hbWUgPSAi
IjsKKyAgICAgICAgbGV0IGNvbW1hbmRBcmd1bWVudHMgPSB7fTsKIAogICAgICAgICBzd2l0Y2gg
KG5hbWUpIHsKICAgICAgICAgY2FzZSBXSS5DU1NNYW5hZ2VyLkFwcGVhcmFuY2UuTGlnaHQ6Ci0g
ICAgICAgICAgICBwcm90b2NvbE5hbWUgPSBJbnNwZWN0b3JCYWNrZW5kLkVudW0uUGFnZS5BcHBl
YXJhbmNlLkxpZ2h0OworICAgICAgICAgICAgY29tbWFuZEFyZ3VtZW50cy5hcHBlYXJhbmNlID0g
SW5zcGVjdG9yQmFja2VuZC5FbnVtLlBhZ2UuQXBwZWFyYW5jZS5MaWdodDsKICAgICAgICAgICAg
IGJyZWFrOwogCiAgICAgICAgIGNhc2UgV0kuQ1NTTWFuYWdlci5BcHBlYXJhbmNlLkRhcms6Ci0g
ICAgICAgICAgICBwcm90b2NvbE5hbWUgPSBJbnNwZWN0b3JCYWNrZW5kLkVudW0uUGFnZS5BcHBl
YXJhbmNlLkRhcms7CisgICAgICAgICAgICBjb21tYW5kQXJndW1lbnRzLmFwcGVhcmFuY2UgPSBJ
bnNwZWN0b3JCYWNrZW5kLkVudW0uUGFnZS5BcHBlYXJhbmNlLkRhcms7CiAgICAgICAgICAgICBi
cmVhazsKIAogICAgICAgICBjYXNlIG51bGw6Ci0gICAgICAgIGNhc2UgdW5kZWZpbmVkOgotICAg
ICAgICBjYXNlICIiOgotICAgICAgICAgICAgcHJvdG9jb2xOYW1lID0gIiI7CisgICAgICAgICAg
ICAvLyBDT01QQVRJQklMSVRZIChpT1MgMTQpOiB0aGUgYGFwcGVhcmFuY2VgYCBwYXJhbWV0ZXIg
b2YgYFBhZ2Uuc2V0Rm9yY2VkQXBwZWFyYW5jZWAgd2FzIG5vdCBvcHRpb25hbC4KKyAgICAgICAg
ICAgIC8vIFNpbmNlIHN1cHBvcnQgY2FuJ3QgYmUgdGVzdGVkIGRpcmVjdGx5LCBjaGVjayBmb3Ig
dGhlIGBvcHRpb25zYGAgcGFyYW1ldGVyIG9mIGBET01EZWJ1Z2dlci5zZXRET01CcmVha3BvaW50
YCAoaU9TIDE0LjArKS4KKyAgICAgICAgICAgIC8vIEZJWE1FOiBVc2UgZXhwbGljaXQgdmVyc2lv
biBjaGVja2luZyBvbmNlIGh0dHBzOi8vd2Via2l0Lm9yZy9iLzE0ODY4MCBpcyBmaXhlZC4KKyAg
ICAgICAgICAgIGlmICghSW5zcGVjdG9yQmFja2VuZC5oYXNDb21tYW5kKCJET01EZWJ1Z2dlci5z
ZXRET01CcmVha3BvaW50IiwgIm9wdGlvbnMiKSkKKyAgICAgICAgICAgICAgICBjb21tYW5kQXJn
dW1lbnRzLmFwcGVhcmFuY2UgPSAiIjsKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICAvLyBBYm9ydCBmb3IgdW5rbm93biB2YWx1ZXMuCisgICAgICAg
ICAgICBjb25zb2xlLmFzc2VydChmYWxzZSwgIlVua25vd24gYXBwZWFyYW5jZSIsIG5hbWUpOwog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgdGhpcy5fZm9yY2VkQXBw
ZWFyYW5jZSA9IG5hbWUgfHwgbnVsbDsKIAogICAgICAgICBsZXQgdGFyZ2V0ID0gV0kuYXNzdW1p
bmdNYWluVGFyZ2V0KCk7Ci0gICAgICAgIHRhcmdldC5QYWdlQWdlbnQuc2V0Rm9yY2VkQXBwZWFy
YW5jZShwcm90b2NvbE5hbWUpLnRoZW4oKCkgPT4geworICAgICAgICB0YXJnZXQuUGFnZUFnZW50
LnNldEZvcmNlZEFwcGVhcmFuY2UuaW52b2tlKGNvbW1hbmRBcmd1bWVudHMpLnRoZW4oKCkgPT4g
ewogICAgICAgICAgICAgdGhpcy5tZWRpYVF1ZXJ5UmVzdWx0Q2hhbmdlZCgpOwogICAgICAgICAg
ICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV0kuQ1NTTWFuYWdlci5FdmVudC5Gb3Jj
ZWRBcHBlYXJhbmNlRGlkQ2hhbmdlLCB7YXBwZWFyYW5jZTogdGhpcy5fZm9yY2VkQXBwZWFyYW5j
ZX0pOwogICAgICAgICB9KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2Vy
SW50ZXJmYWNlL1ZpZXdzL1NldHRpbmdzVGFiQ29udGVudFZpZXcuanMgYi9Tb3VyY2UvV2ViSW5z
cGVjdG9yVUkvVXNlckludGVyZmFjZS9WaWV3cy9TZXR0aW5nc1RhYkNvbnRlbnRWaWV3LmpzCmlu
ZGV4IDQ4MmUxNDJhZTExZDYzYzAwMTVmOTZjNzRiY2IyZGVhMmZlNTA2OWQuLjkxODM2ZWNjNzY5
Nzc1NmE5NjZlZmVhNzEwM2M5MmQzNDA4ZTQ0NjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJJbnNw
ZWN0b3JVSS9Vc2VySW50ZXJmYWNlL1ZpZXdzL1NldHRpbmdzVGFiQ29udGVudFZpZXcuanMKKysr
IGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvVmlld3MvU2V0dGluZ3NUYWJD
b250ZW50Vmlldy5qcwpAQCAtMzQ2LDE0ICszNDYsMTggQEAgV0kuU2V0dGluZ3NUYWJDb250ZW50
VmlldyA9IGNsYXNzIFNldHRpbmdzVGFiQ29udGVudFZpZXcgZXh0ZW5kcyBXSS5UYWJDb250ZW50
VmkKICAgICAgICAgICAgICAgICBbV0kuTG9nZ2luZ0NoYW5uZWwuTGV2ZWwuVmVyYm9zZSwgV0ku
VUlTdHJpbmcoIlZlcmJvc2UiKV0sCiAgICAgICAgICAgICBdOwogICAgICAgICAgICAgY29uc3Qg
ZWRpdG9yTGFiZWxzID0gewotICAgICAgICAgICAgICAgIG1lZGlhOiBXSS5VSVN0cmluZygiTWVk
aWEgTG9nZ2luZzoiKSwKLSAgICAgICAgICAgICAgICBtZWRpYXNvdXJjZTogV0kuVUlTdHJpbmco
Ik1TRSBMb2dnaW5nOiIpLAotICAgICAgICAgICAgICAgIHdlYnJ0YzogV0kuVUlTdHJpbmcoIldl
YlJUQyBMb2dnaW5nOiIpLAorICAgICAgICAgICAgICAgIFtXSS5Db25zb2xlTWVzc2FnZS5NZXNz
YWdlU291cmNlLk1lZGlhXTogV0kuVUlTdHJpbmcoIk1lZGlhIExvZ2dpbmc6IiksCisgICAgICAg
ICAgICAgICAgW1dJLkNvbnNvbGVNZXNzYWdlLk1lc3NhZ2VTb3VyY2UuTWVkaWFTb3VyY2VdOiBX
SS5VSVN0cmluZygiTVNFIExvZ2dpbmc6IiksCisgICAgICAgICAgICAgICAgW1dJLkNvbnNvbGVN
ZXNzYWdlLk1lc3NhZ2VTb3VyY2UuV2ViUlRDXTogV0kuVUlTdHJpbmcoIldlYlJUQyBMb2dnaW5n
OiIpLAogICAgICAgICAgICAgfTsKIAogICAgICAgICAgICAgbGV0IGNoYW5uZWxzID0gV0kuY29u
c29sZU1hbmFnZXIuY3VzdG9tTG9nZ2luZ0NoYW5uZWxzOwogICAgICAgICAgICAgZm9yIChsZXQg
Y2hhbm5lbCBvZiBjaGFubmVscykgewotICAgICAgICAgICAgICAgIGxldCBsb2dFZGl0b3IgPSBj
b25zb2xlU2V0dGluZ3NWaWV3LmFkZEdyb3VwV2l0aEN1c3RvbVNldHRpbmcoZWRpdG9yTGFiZWxz
W2NoYW5uZWwuc291cmNlXSwgV0kuU2V0dGluZ0VkaXRvci5UeXBlLlNlbGVjdCwge3ZhbHVlczog
bG9nTGV2ZWxzfSk7CisgICAgICAgICAgICAgICAgbGV0IGxhYmVsID0gZWRpdG9yTGFiZWxzW2No
YW5uZWwuc291cmNlXTsKKyAgICAgICAgICAgICAgICBpZiAoIWxhYmVsKQorICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgICAgIGxldCBsb2dFZGl0b3IgPSBjb25z
b2xlU2V0dGluZ3NWaWV3LmFkZEdyb3VwV2l0aEN1c3RvbVNldHRpbmcobGFiZWwsIFdJLlNldHRp
bmdFZGl0b3IuVHlwZS5TZWxlY3QsIHt2YWx1ZXM6IGxvZ0xldmVsc30pOwogICAgICAgICAgICAg
ICAgIGxvZ0VkaXRvci52YWx1ZSA9IGNoYW5uZWwubGV2ZWw7CiAgICAgICAgICAgICAgICAgbG9n
RWRpdG9yLmFkZEV2ZW50TGlzdGVuZXIoV0kuU2V0dGluZ0VkaXRvci5FdmVudC5WYWx1ZURpZENo
YW5nZSwgKCkgPT4gewogICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCB0YXJnZXQgb2YgV0ku
dGFyZ2V0cykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24v
QXV0b21hdGlvbi5qc29uIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9BdXRv
bWF0aW9uLmpzb24KaW5kZXggM2RjYjIxNDFlYjBkMjc5NDcwN2RlMjg0Yzg3MDcxMGU4NzcyMWMz
OS4uZWRkYmFhZWM0MTJhYzQ2ODZkM2QxOTE0ZjJiNWQwODJhZDdkY2JhZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9BdXRvbWF0aW9uLmpzb24KKysrIGIv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9BdXRvbWF0aW9uLmpzb24KQEAgLTI5
LDEwICsyOSwxMSBAQAogICAgICAgICB7CiAgICAgICAgICAgICAiaWQiOiAiQ29vcmRpbmF0ZVN5
c3RlbSIsCiAgICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAotICAgICAgICAgICAgImRlc2Ny
aXB0aW9uIjogIlRoZSBjb29yZGluYXRlIHN5c3RlbSBpbiB3aGljaCByZWN0cywgcG9pbnRzLCBh
bmQgc2l6ZXMgYXJlIHRvIGJlIGludGVycHJldGVkLiIsCisgICAgICAgICAgICAiZGVzY3JpcHRp
b24iOiAiVGhlIGNvb3JkaW5hdGUgc3lzdGVtIGluIHdoaWNoIHJlY3RzLCBwb2ludHMsIGFuZCBz
aXplcyBhcmUgdG8gYmUgaW50ZXJwcmV0ZWQuIExheW91dFZpZXdwb3J0IGlzIGEgbGVnYWN5IHZh
bHVlIGFuZCBzaG91bGQgbm90IGJlIHVzZWQgZ29pbmcgZm9yd2FyZC4iLAogICAgICAgICAgICAg
ImVudW0iOiBbCiAgICAgICAgICAgICAgICAgIlBhZ2UiLAotICAgICAgICAgICAgICAgICJWaWV3
cG9ydCIKKyAgICAgICAgICAgICAgICAiVmlld3BvcnQiLAorICAgICAgICAgICAgICAgICJMYXlv
dXRWaWV3cG9ydCIKICAgICAgICAgICAgIF0KICAgICAgICAgfSwKICAgICAgICAgewpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vz
c2lvbi5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRp
b25TZXNzaW9uLmNwcAppbmRleCBkODdhNGRmZWM3OTRmMzFkY2I2NGU1ZTllZjRiY2U0YjE4YzE5
MmEyLi4yY2ZjMzFjOGEyMGI4Mjk2MDVhMjA5ZTY0NDQwM2VlZmE2NTMwMWEwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9u
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRp
b25TZXNzaW9uLmNwcApAQCAtMzA1LDcgKzMwNSw3IEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Np
b246OmdldEJyb3dzaW5nQ29udGV4dHMoUmVmPEdldEJyb3dzaW5nQ29udGV4dHNDYWxsYmFjaz4m
CiAgICAgZ2V0TmV4dENvbnRleHQobWFrZVJlZigqdGhpcyksIFdURk1vdmUocGFnZXMpLCBKU09O
OjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4
dD46OmNyZWF0ZSgpLCBXVEZNb3ZlKGNhbGxiYWNrKSk7CiB9CiAKLXZvaWQgV2ViQXV0b21hdGlv
blNlc3Npb246OmdldEJyb3dzaW5nQ29udGV4dChjb25zdCBTdHJpbmcmIGhhbmRsZSwgUmVmPEdl
dEJyb3dzaW5nQ29udGV4dENhbGxiYWNrPiYmIGNhbGxiYWNrKQordm9pZCBXZWJBdXRvbWF0aW9u
U2Vzc2lvbjo6Z2V0QnJvd3NpbmdDb250ZXh0KGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1
dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYgaGFuZGxlLCBSZWY8R2V0QnJvd3NpbmdD
b250ZXh0Q2FsbGJhY2s+JiYgY2FsbGJhY2spCiB7CiAgICAgV2ViUGFnZVByb3h5KiBwYWdlID0g
d2ViUGFnZVByb3h5Rm9ySGFuZGxlKGhhbmRsZSk7CiAgICAgaWYgKCFwYWdlKQpAQCAtMzI4LDcg
KzMyOCw3IEBAIHN0YXRpYyBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2lu
Z0NvbnRleHRQcmVzZW50YXRpb24gdG9Qcm90b2NvbChBCiAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKIH0KIAotdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6Y3JlYXRlQnJvd3Np
bmdDb250ZXh0KGNvbnN0IFN0cmluZyogb3B0aW9uYWxQcmVzZW50YXRpb25IaW50LCBSZWY8Q3Jl
YXRlQnJvd3NpbmdDb250ZXh0Q2FsbGJhY2s+JiYgY2FsbGJhY2spCit2b2lkIFdlYkF1dG9tYXRp
b25TZXNzaW9uOjpjcmVhdGVCcm93c2luZ0NvbnRleHQoT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90
b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0UHJlc2VudGF0aW9uPiYmIHByZXNlbnRh
dGlvbkhpbnQsIFJlZjxDcmVhdGVCcm93c2luZ0NvbnRleHRDYWxsYmFjaz4mJiBjYWxsYmFjaykK
IHsKICAgICBBU1NFUlQobV9jbGllbnQpOwogICAgIGlmICghbV9jbGllbnQpCkBAIC0zMzYsMTEg
KzMzNiw4IEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OmNyZWF0ZUJyb3dzaW5nQ29udGV4
dChjb25zdCBTdHJpbmcqIG9wdGlvbmFsUHJlc2VudGF0CiAKICAgICB1aW50MTZfdCBvcHRpb25z
ID0gMDsKIAotICAgIGlmIChvcHRpb25hbFByZXNlbnRhdGlvbkhpbnQpIHsKLSAgICAgICAgYXV0
byBwYXJzZWRQcmVzZW50YXRpb25IaW50ID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlv
bkhlbHBlcnM6OnBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpB
dXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRQcmVzZW50YXRpb24+KCpvcHRpb25hbFByZXNlbnRh
dGlvbkhpbnQpOwotICAgICAgICBpZiAocGFyc2VkUHJlc2VudGF0aW9uSGludC5oYXNWYWx1ZSgp
ICYmIHBhcnNlZFByZXNlbnRhdGlvbkhpbnQudmFsdWUoKSA9PSBJbnNwZWN0b3I6OlByb3RvY29s
OjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRQcmVzZW50YXRpb246OlRhYikKLSAgICAgICAg
ICAgIG9wdGlvbnMgfD0gQVBJOjpBdXRvbWF0aW9uU2Vzc2lvbkJyb3dzaW5nQ29udGV4dE9wdGlv
bnNQcmVmZXJOZXdUYWI7Ci0gICAgfQorICAgIGlmIChwcmVzZW50YXRpb25IaW50ID09IEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dFByZXNlbnRhdGlvbjo6
VGFiKQorICAgICAgICBvcHRpb25zIHw9IEFQSTo6QXV0b21hdGlvblNlc3Npb25Ccm93c2luZ0Nv
bnRleHRPcHRpb25zUHJlZmVyTmV3VGFiOwogCiAgICAgbV9jbGllbnQtPnJlcXVlc3ROZXdQYWdl
V2l0aE9wdGlvbnMoKnRoaXMsIHN0YXRpY19jYXN0PEFQSTo6QXV0b21hdGlvblNlc3Npb25Ccm93
c2luZ0NvbnRleHRPcHRpb25zPihvcHRpb25zKSwgW3Byb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0
aGlzKSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKV0oV2ViUGFnZVByb3h5KiBwYWdlKSB7
CiAgICAgICAgIGlmICghcGFnZSkKQEAgLTM1MiwyMyArMzQ5LDI1IEBAIHZvaWQgV2ViQXV0b21h
dGlvblNlc3Npb246OmNyZWF0ZUJyb3dzaW5nQ29udGV4dChjb25zdCBTdHJpbmcqIG9wdGlvbmFs
UHJlc2VudGF0CiAgICAgfSk7CiB9CiAKLXZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OmNsb3Nl
QnJvd3NpbmdDb250ZXh0KEluc3BlY3Rvcjo6RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25z
dCBTdHJpbmcmIGhhbmRsZSkKK0luc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9p
ZD4gV2ViQXV0b21hdGlvblNlc3Npb246OmNsb3NlQnJvd3NpbmdDb250ZXh0KGNvbnN0IEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYgaGFuZGxl
KQogewogICAgIFdlYlBhZ2VQcm94eSogcGFnZSA9IHdlYlBhZ2VQcm94eUZvckhhbmRsZShoYW5k
bGUpOwogICAgIGlmICghcGFnZSkKICAgICAgICAgU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9F
UlJPUihXaW5kb3dOb3RGb3VuZCk7CiAKICAgICBwYWdlLT5jbG9zZVBhZ2UoKTsKKworICAgIHJl
dHVybiB7IH07CiB9CiAKLXZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OnN3aXRjaFRvQnJvd3Np
bmdDb250ZXh0KGNvbnN0IFN0cmluZyYgYnJvd3NpbmdDb250ZXh0SGFuZGxlLCBjb25zdCBTdHJp
bmcqIG9wdGlvbmFsRnJhbWVIYW5kbGUsIFJlZjxTd2l0Y2hUb0Jyb3dzaW5nQ29udGV4dENhbGxi
YWNrPiYmIGNhbGxiYWNrKQordm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6c3dpdGNoVG9Ccm93
c2luZ0NvbnRleHQoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3Np
bmdDb250ZXh0SGFuZGxlJiBicm93c2luZ0NvbnRleHRIYW5kbGUsIGNvbnN0IEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkF1dG9tYXRpb246OkZyYW1lSGFuZGxlJiBmcmFtZUhhbmRsZSwgUmVmPFN3aXRj
aFRvQnJvd3NpbmdDb250ZXh0Q2FsbGJhY2s+JiYgY2FsbGJhY2spCiB7CiAgICAgV2ViUGFnZVBy
b3h5KiBwYWdlID0gd2ViUGFnZVByb3h5Rm9ySGFuZGxlKGJyb3dzaW5nQ29udGV4dEhhbmRsZSk7
CiAgICAgaWYgKCFwYWdlKQogICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJP
UihXaW5kb3dOb3RGb3VuZCk7CiAKICAgICBib29sIGZyYW1lTm90Rm91bmQgPSBmYWxzZTsKLSAg
ICBhdXRvIGZyYW1lSUQgPSB3ZWJGcmFtZUlERm9ySGFuZGxlKG9wdGlvbmFsRnJhbWVIYW5kbGUg
PyAqb3B0aW9uYWxGcmFtZUhhbmRsZSA6IGVtcHR5U3RyaW5nKCksIGZyYW1lTm90Rm91bmQpOwor
ICAgIGF1dG8gZnJhbWVJRCA9IHdlYkZyYW1lSURGb3JIYW5kbGUoZnJhbWVIYW5kbGUsIGZyYW1l
Tm90Rm91bmQpOwogICAgIGlmIChmcmFtZU5vdEZvdW5kKQogICAgICAgICBBU1lOQ19GQUlMX1dJ
VEhfUFJFREVGSU5FRF9FUlJPUihGcmFtZU5vdEZvdW5kKTsKIApAQCAtMzgxLDI1ICszODAsMjkg
QEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6c3dpdGNoVG9Ccm93c2luZ0NvbnRleHQoY29u
c3QgU3RyaW5nJiBicm93c2luZ0NvbnRleHQKICAgICB9KTsKIH0KIAotdm9pZCBXZWJBdXRvbWF0
aW9uU2Vzc2lvbjo6c2V0V2luZG93RnJhbWVPZkJyb3dzaW5nQ29udGV4dChjb25zdCBTdHJpbmcm
IGhhbmRsZSwgY29uc3QgSlNPTjo6T2JqZWN0KiBvcHRpb25hbE9yaWdpbk9iamVjdCwgY29uc3Qg
SlNPTjo6T2JqZWN0KiBvcHRpb25hbFNpemVPYmplY3QsIFJlZjxTZXRXaW5kb3dGcmFtZU9mQnJv
d3NpbmdDb250ZXh0Q2FsbGJhY2s+JiYgY2FsbGJhY2spCit2b2lkIFdlYkF1dG9tYXRpb25TZXNz
aW9uOjpzZXRXaW5kb3dGcmFtZU9mQnJvd3NpbmdDb250ZXh0KGNvbnN0IEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYgaGFuZGxlLCBSZWZQdHI8
SlNPTjo6T2JqZWN0PiYmIG9yaWdpbiwgUmVmUHRyPEpTT046Ok9iamVjdD4mJiBzaXplLCBSZWY8
U2V0V2luZG93RnJhbWVPZkJyb3dzaW5nQ29udGV4dENhbGxiYWNrPiYmIGNhbGxiYWNrKQogewot
ICAgIE9wdGlvbmFsPGZsb2F0PiB4OwotICAgIE9wdGlvbmFsPGZsb2F0PiB5OwotICAgIGlmIChv
cHRpb25hbE9yaWdpbk9iamVjdCkgewotICAgICAgICBpZiAoISh4ID0gb3B0aW9uYWxPcmlnaW5P
YmplY3QtPmdldE51bWJlcjxmbG9hdD4oIngiX3MpKSkKKyAgICBPcHRpb25hbDxkb3VibGU+IHg7
CisgICAgT3B0aW9uYWw8ZG91YmxlPiB5OworICAgIGlmIChvcmlnaW4pIHsKKyAgICAgICAgeCA9
IG9yaWdpbi0+Z2V0RG91YmxlKCJ4Il9zKTsKKyAgICAgICAgaWYgKCF4KQogICAgICAgICAgICAg
QVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoTWlzc2luZ1BhcmFt
ZXRlciwgIlRoZSAneCcgcGFyYW1ldGVyIHdhcyBub3QgZm91bmQgb3IgaW52YWxpZC4iKTsKIAot
ICAgICAgICBpZiAoISh5ID0gb3B0aW9uYWxPcmlnaW5PYmplY3QtPmdldE51bWJlcjxmbG9hdD4o
InkiX3MpKSkKKyAgICAgICAgeSA9IG9yaWdpbi0+Z2V0RG91YmxlKCJ5Il9zKTsKKyAgICAgICAg
aWYgKCF5KQogICAgICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5E
X0RFVEFJTFMoTWlzc2luZ1BhcmFtZXRlciwgIlRoZSAneScgcGFyYW1ldGVyIHdhcyBub3QgZm91
bmQgb3IgaW52YWxpZC4iKTsKICAgICB9CiAKLSAgICBPcHRpb25hbDxmbG9hdD4gd2lkdGg7Ci0g
ICAgT3B0aW9uYWw8ZmxvYXQ+IGhlaWdodDsKLSAgICBpZiAob3B0aW9uYWxTaXplT2JqZWN0KSB7
Ci0gICAgICAgIGlmICghKHdpZHRoID0gb3B0aW9uYWxTaXplT2JqZWN0LT5nZXROdW1iZXI8Zmxv
YXQ+KCJ3aWR0aCJfcykpKQorICAgIE9wdGlvbmFsPGRvdWJsZT4gd2lkdGg7CisgICAgT3B0aW9u
YWw8ZG91YmxlPiBoZWlnaHQ7CisgICAgaWYgKHNpemUpIHsKKyAgICAgICAgd2lkdGggPSBzaXpl
LT5nZXREb3VibGUoIndpZHRoIl9zKTsKKyAgICAgICAgaWYgKCF3aWR0aCkKICAgICAgICAgICAg
IEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxTKE1pc3NpbmdQYXJh
bWV0ZXIsICJUaGUgJ3dpZHRoJyBwYXJhbWV0ZXIgd2FzIG5vdCBmb3VuZCBvciBpbnZhbGlkLiIp
OwogCi0gICAgICAgIGlmICghKGhlaWdodCA9IG9wdGlvbmFsU2l6ZU9iamVjdC0+Z2V0TnVtYmVy
PGZsb2F0PigiaGVpZ2h0Il9zKSkpCisgICAgICAgIGhlaWdodCA9IHNpemUtPmdldERvdWJsZSgi
aGVpZ2h0Il9zKTsKKyAgICAgICAgaWYgKCFoZWlnaHQpCiAgICAgICAgICAgICBBU1lOQ19GQUlM
X1dJVEhfUFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhNaXNzaW5nUGFyYW1ldGVyLCAiVGhl
ICdoZWlnaHQnIHBhcmFtZXRlciB3YXMgbm90IGZvdW5kIG9yIGludmFsaWQuIik7CiAKICAgICAg
ICAgaWYgKHdpZHRoLnZhbHVlKCkgPCAwKQpAQCAtNDI4LDI2ICs0MzEsMTMgQEAgdm9pZCBXZWJB
dXRvbWF0aW9uU2Vzc2lvbjo6c2V0V2luZG93RnJhbWVPZkJyb3dzaW5nQ29udGV4dChjb25zdCBT
dHJpbmcmIGhhbmRsZSwKICAgICB9KTsKIH0KIAotc3RhdGljIE9wdGlvbmFsPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkF1dG9tYXRpb246OlBhZ2VMb2FkU3RyYXRlZ3k+IHBhZ2VMb2FkU3RyYXRlZ3lG
cm9tU3RyaW5nUGFyYW1ldGVyKGNvbnN0IFN0cmluZyogb3B0aW9uYWxQYWdlTG9hZFN0cmF0ZWd5
U3RyaW5nKQotewotICAgIGlmICghb3B0aW9uYWxQYWdlTG9hZFN0cmF0ZWd5U3RyaW5nKQotICAg
ICAgICByZXR1cm4gZGVmYXVsdFBhZ2VMb2FkU3RyYXRlZ3k7Ci0KLSAgICBhdXRvIHBhcnNlZFBh
Z2VMb2FkU3RyYXRlZ3kgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uSGVscGVyczo6
cGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246
OlBhZ2VMb2FkU3RyYXRlZ3k+KCpvcHRpb25hbFBhZ2VMb2FkU3RyYXRlZ3lTdHJpbmcpOwotICAg
IGlmICghcGFyc2VkUGFnZUxvYWRTdHJhdGVneSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKLSAgICByZXR1cm4gcGFyc2VkUGFnZUxvYWRTdHJhdGVneTsKLX0KLQotdm9pZCBXZWJBdXRv
bWF0aW9uU2Vzc2lvbjo6d2FpdEZvck5hdmlnYXRpb25Ub0NvbXBsZXRlKGNvbnN0IFN0cmluZyYg
YnJvd3NpbmdDb250ZXh0SGFuZGxlLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsRnJhbWVIYW5kbGUs
IGNvbnN0IFN0cmluZyogb3B0aW9uYWxQYWdlTG9hZFN0cmF0ZWd5U3RyaW5nLCBjb25zdCBkb3Vi
bGUqIG9wdGlvbmFsUGFnZUxvYWRUaW1lb3V0LCBSZWY8V2FpdEZvck5hdmlnYXRpb25Ub0NvbXBs
ZXRlQ2FsbGJhY2s+JiYgY2FsbGJhY2spCit2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjp3YWl0
Rm9yTmF2aWdhdGlvblRvQ29tcGxldGUoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21h
dGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJiBicm93c2luZ0NvbnRleHRIYW5kbGUsIGNvbnN0
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkZyYW1lSGFuZGxlJiBvcHRpb25hbEZy
YW1lSGFuZGxlLCBPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpQYWdl
TG9hZFN0cmF0ZWd5PiYmIG9wdGlvbmFsUGFnZUxvYWRTdHJhdGVneSwgT3B0aW9uYWw8ZG91Ymxl
PiYmIG9wdGlvbmFsUGFnZUxvYWRUaW1lb3V0LCBSZWY8V2FpdEZvck5hdmlnYXRpb25Ub0NvbXBs
ZXRlQ2FsbGJhY2s+JiYgY2FsbGJhY2spCiB7CiAgICAgV2ViUGFnZVByb3h5KiBwYWdlID0gd2Vi
UGFnZVByb3h5Rm9ySGFuZGxlKGJyb3dzaW5nQ29udGV4dEhhbmRsZSk7CiAgICAgaWYgKCFwYWdl
KQogICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUihXaW5kb3dOb3RGb3Vu
ZCk7CiAKLSAgICBhdXRvIHBhZ2VMb2FkU3RyYXRlZ3kgPSBwYWdlTG9hZFN0cmF0ZWd5RnJvbVN0
cmluZ1BhcmFtZXRlcihvcHRpb25hbFBhZ2VMb2FkU3RyYXRlZ3lTdHJpbmcpOwotICAgIGlmICgh
cGFnZUxvYWRTdHJhdGVneSkKLSAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJS
T1JfQU5EX0RFVEFJTFMoSW52YWxpZFBhcmFtZXRlciwgIlRoZSBwYXJhbWV0ZXIgJ3BhZ2VMb2Fk
U3RyYXRlZ3knIGlzIGludmFsaWQuIik7CisgICAgYXV0byBwYWdlTG9hZFN0cmF0ZWd5ID0gb3B0
aW9uYWxQYWdlTG9hZFN0cmF0ZWd5LnZhbHVlT3IoZGVmYXVsdFBhZ2VMb2FkU3RyYXRlZ3kpOwog
ICAgIGF1dG8gcGFnZUxvYWRUaW1lb3V0ID0gb3B0aW9uYWxQYWdlTG9hZFRpbWVvdXQgPyBTZWNv
bmRzOjpmcm9tTWlsbGlzZWNvbmRzKCpvcHRpb25hbFBhZ2VMb2FkVGltZW91dCkgOiBkZWZhdWx0
UGFnZUxvYWRUaW1lb3V0OwogCiAgICAgLy8gSWYgcGFnZSBpcyBsb2FkaW5nIGFuZCB0aGVyZSdz
IGFuIGFjdGl2ZSBKYXZhU2NyaXB0IGRpYWxvZyBpcyBwcm9iYWJseSBiZWNhdXNlIHRoZQpAQCAt
NDU1LDIyICs0NDUsMjIgQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6d2FpdEZvck5hdmln
YXRpb25Ub0NvbXBsZXRlKGNvbnN0IFN0cmluZyYgYnJvd3NpbmdDb24KICAgICAvLyBsb2FkIHdp
bGwgbm90IGZpbmlzaCB1bnRpbCB0aGUgZGlhbG9nIGlzIGRpc21pc3NlZC4gSW5zdGVhZCBvZiB3
YWl0aW5nIGZvciB0aGUgdGltZW91dCwKICAgICAvLyB3ZSByZXR1cm4gd2l0aG91dCB3YWl0aW5n
IHNpbmNlIHdlIGtub3cgaXQgd2lsbCB0aW1lb3V0IGZvciBzdXJlLiBXZSB3YW50IHRvIGNoZWNr
CiAgICAgLy8gYXJndW1lbnRzIGZpcnN0LCB0aG91Z2guCi0gICAgYm9vbCBzaG91bGRUaW1lb3V0
RHVlVG9VbmV4cGVjdGVkQWxlcnQgPSBwYWdlTG9hZFN0cmF0ZWd5LnZhbHVlKCkgPT0gSW5zcGVj
dG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6UGFnZUxvYWRTdHJhdGVneTo6Tm9ybWFsCisgICAg
Ym9vbCBzaG91bGRUaW1lb3V0RHVlVG9VbmV4cGVjdGVkQWxlcnQgPSBwYWdlTG9hZFN0cmF0ZWd5
ID09IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OlBhZ2VMb2FkU3RyYXRlZ3k6Ok5v
cm1hbAogICAgICAgICAmJiBwYWdlLT5wYWdlTG9hZFN0YXRlKCkuaXNMb2FkaW5nKCkgJiYgbV9j
bGllbnQtPmlzU2hvd2luZ0phdmFTY3JpcHREaWFsb2dPblBhZ2UoKnRoaXMsICpwYWdlKTsKIAot
ICAgIGlmIChvcHRpb25hbEZyYW1lSGFuZGxlICYmICFvcHRpb25hbEZyYW1lSGFuZGxlLT5pc0Vt
cHR5KCkpIHsKKyAgICBpZiAoIW9wdGlvbmFsRnJhbWVIYW5kbGUuaXNFbXB0eSgpKSB7CiAgICAg
ICAgIGJvb2wgZnJhbWVOb3RGb3VuZCA9IGZhbHNlOwotICAgICAgICBhdXRvIGZyYW1lSUQgPSB3
ZWJGcmFtZUlERm9ySGFuZGxlKCpvcHRpb25hbEZyYW1lSGFuZGxlLCBmcmFtZU5vdEZvdW5kKTsK
KyAgICAgICAgYXV0byBmcmFtZUlEID0gd2ViRnJhbWVJREZvckhhbmRsZShvcHRpb25hbEZyYW1l
SGFuZGxlLCBmcmFtZU5vdEZvdW5kKTsKICAgICAgICAgaWYgKGZyYW1lTm90Rm91bmQpCiAgICAg
ICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUihGcmFtZU5vdEZvdW5kKTsK
ICAgICAgICAgV2ViRnJhbWVQcm94eSogZnJhbWUgPSBwYWdlLT5wcm9jZXNzKCkud2ViRnJhbWUo
ZnJhbWVJRC52YWx1ZSgpKTsKICAgICAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgICAgIEFTWU5D
X0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SKEZyYW1lTm90Rm91bmQpOwogICAgICAgICBpZiAo
IXNob3VsZFRpbWVvdXREdWVUb1VuZXhwZWN0ZWRBbGVydCkKLSAgICAgICAgICAgIHdhaXRGb3JO
YXZpZ2F0aW9uVG9Db21wbGV0ZU9uRnJhbWUoKmZyYW1lLCBwYWdlTG9hZFN0cmF0ZWd5LnZhbHVl
KCksIHBhZ2VMb2FkVGltZW91dCwgV1RGTW92ZShjYWxsYmFjaykpOworICAgICAgICAgICAgd2Fp
dEZvck5hdmlnYXRpb25Ub0NvbXBsZXRlT25GcmFtZSgqZnJhbWUsIHBhZ2VMb2FkU3RyYXRlZ3ks
IHBhZ2VMb2FkVGltZW91dCwgV1RGTW92ZShjYWxsYmFjaykpOwogICAgIH0gZWxzZSB7CiAgICAg
ICAgIGlmICghc2hvdWxkVGltZW91dER1ZVRvVW5leHBlY3RlZEFsZXJ0KQotICAgICAgICAgICAg
d2FpdEZvck5hdmlnYXRpb25Ub0NvbXBsZXRlT25QYWdlKCpwYWdlLCBwYWdlTG9hZFN0cmF0ZWd5
LnZhbHVlKCksIHBhZ2VMb2FkVGltZW91dCwgV1RGTW92ZShjYWxsYmFjaykpOworICAgICAgICAg
ICAgd2FpdEZvck5hdmlnYXRpb25Ub0NvbXBsZXRlT25QYWdlKCpwYWdlLCBwYWdlTG9hZFN0cmF0
ZWd5LCBwYWdlTG9hZFRpbWVvdXQsIFdURk1vdmUoY2FsbGJhY2spKTsKICAgICB9CiAKICAgICBp
ZiAoc2hvdWxkVGltZW91dER1ZVRvVW5leHBlY3RlZEFsZXJ0KSB7CkBAIC01MjcsNyArNTE3LDcg
QEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6d2FpdEZvck5hdmlnYXRpb25Ub0NvbXBsZXRl
T25GcmFtZShXZWJGcmFtZVByb3h5JiBmcmEKIAogdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6
cmVzcG9uZFRvUGVuZGluZ1BhZ2VOYXZpZ2F0aW9uQ2FsbGJhY2tzV2l0aFRpbWVvdXQoSGFzaE1h
cDxXZWJQYWdlUHJveHlJZGVudGlmaWVyLCBSZWZQdHI8SW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0
Y2hlcjo6Q2FsbGJhY2tCYXNlPj4mIG1hcCkKIHsKLSAgICBJbnNwZWN0b3I6OkVycm9yU3RyaW5n
IHRpbWVvdXRFcnJvciA9IFNUUklOR19GT1JfUFJFREVGSU5FRF9FUlJPUl9OQU1FKFRpbWVvdXQp
OworICAgIGF1dG8gdGltZW91dEVycm9yID0gU1RSSU5HX0ZPUl9QUkVERUZJTkVEX0VSUk9SX05B
TUUoVGltZW91dCk7CiAgICAgZm9yIChhdXRvIGlkIDogY29weVRvVmVjdG9yKG1hcC5rZXlzKCkp
KSB7CiAgICAgICAgIGF1dG8gcGFnZSA9IFdlYlByb2Nlc3NQcm94eTo6d2ViUGFnZShpZCk7CiAg
ICAgICAgIGF1dG8gY2FsbGJhY2sgPSBtYXAudGFrZShpZCk7CkBAIC01NDksNyArNTM5LDcgQEAg
c3RhdGljIFdlYlBhZ2VQcm94eSogZmluZFBhZ2VGb3JGcmFtZUlEKGNvbnN0IFdlYlByb2Nlc3NQ
b29sJiBwcm9jZXNzUG9vbCwgRnJhbWUKIAogdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6cmVz
cG9uZFRvUGVuZGluZ0ZyYW1lTmF2aWdhdGlvbkNhbGxiYWNrc1dpdGhUaW1lb3V0KEhhc2hNYXA8
RnJhbWVJZGVudGlmaWVyLCBSZWZQdHI8SW5zcGVjdG9yOjpCYWNrZW5kRGlzcGF0Y2hlcjo6Q2Fs
bGJhY2tCYXNlPj4mIG1hcCkKIHsKLSAgICBJbnNwZWN0b3I6OkVycm9yU3RyaW5nIHRpbWVvdXRF
cnJvciA9IFNUUklOR19GT1JfUFJFREVGSU5FRF9FUlJPUl9OQU1FKFRpbWVvdXQpOworICAgIGF1
dG8gdGltZW91dEVycm9yID0gU1RSSU5HX0ZPUl9QUkVERUZJTkVEX0VSUk9SX05BTUUoVGltZW91
dCk7CiAgICAgZm9yIChhdXRvIGlkIDogY29weVRvVmVjdG9yKG1hcC5rZXlzKCkpKSB7CiAgICAg
ICAgIGF1dG8qIHBhZ2UgPSBmaW5kUGFnZUZvckZyYW1lSUQoKm1fcHJvY2Vzc1Bvb2wsIGlkKTsK
ICAgICAgICAgYXV0byBjYWxsYmFjayA9IG1hcC50YWtlKGlkKTsKQEAgLTU2OCw3ICs1NTgsNyBA
QCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpsb2FkVGltZXJGaXJlZCgpCiAgICAgcmVzcG9u
ZFRvUGVuZGluZ1BhZ2VOYXZpZ2F0aW9uQ2FsbGJhY2tzV2l0aFRpbWVvdXQobV9wZW5kaW5nRWFn
ZXJOYXZpZ2F0aW9uSW5Ccm93c2luZ0NvbnRleHRDYWxsYmFja3NQZXJQYWdlKTsKIH0KIAotdm9p
ZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6bWF4aW1pemVXaW5kb3dPZkJyb3dzaW5nQ29udGV4dChj
b25zdCBTdHJpbmcmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSwgUmVmPE1heGltaXplV2luZG93T2ZC
cm93c2luZ0NvbnRleHRDYWxsYmFjaz4mJiBjYWxsYmFjaykKK3ZvaWQgV2ViQXV0b21hdGlvblNl
c3Npb246Om1heGltaXplV2luZG93T2ZCcm93c2luZ0NvbnRleHQoY29uc3QgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJiBicm93c2luZ0NvbnRl
eHRIYW5kbGUsIFJlZjxNYXhpbWl6ZVdpbmRvd09mQnJvd3NpbmdDb250ZXh0Q2FsbGJhY2s+JiYg
Y2FsbGJhY2spCiB7CiAgICAgYXV0byogcGFnZSA9IHdlYlBhZ2VQcm94eUZvckhhbmRsZShicm93
c2luZ0NvbnRleHRIYW5kbGUpOwogICAgIGlmICghcGFnZSkKQEAgLTU4NCw3ICs1NzQsNyBAQCB2
b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjptYXhpbWl6ZVdpbmRvd09mQnJvd3NpbmdDb250ZXh0
KGNvbnN0IFN0cmluZyYgYnJvd3NpbgogICAgIH0pOwogfQogCi12b2lkIFdlYkF1dG9tYXRpb25T
ZXNzaW9uOjpoaWRlV2luZG93T2ZCcm93c2luZ0NvbnRleHQoY29uc3QgU3RyaW5nJiBicm93c2lu
Z0NvbnRleHRIYW5kbGUsIFJlZjxIaWRlV2luZG93T2ZCcm93c2luZ0NvbnRleHRDYWxsYmFjaz4m
JiBjYWxsYmFjaykKK3ZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OmhpZGVXaW5kb3dPZkJyb3dz
aW5nQ29udGV4dChjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2lu
Z0NvbnRleHRIYW5kbGUmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSwgUmVmPEhpZGVXaW5kb3dPZkJy
b3dzaW5nQ29udGV4dENhbGxiYWNrPiYmIGNhbGxiYWNrKQogewogICAgIFdlYlBhZ2VQcm94eSog
cGFnZSA9IHdlYlBhZ2VQcm94eUZvckhhbmRsZShicm93c2luZ0NvbnRleHRIYW5kbGUpOwogICAg
IGlmICghcGFnZSkKQEAgLTY5Myw2NCArNjgzLDU2IEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Np
b246OmRpZEV4aXRGdWxsU2NyZWVuRm9yUGFnZShjb25zdCBXZWJQYWdlUHJveHkmKQogICAgICAg
ICBtX3dpbmRvd1N0YXRlVHJhbnNpdGlvbkNhbGxiYWNrKFdpbmRvd1RyYW5zaXRpb25lZFRvU3Rh
dGU6OlVuZnVsbHNjcmVlbik7CiB9CiAKLXZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246Om5hdmln
YXRlQnJvd3NpbmdDb250ZXh0KGNvbnN0IFN0cmluZyYgaGFuZGxlLCBjb25zdCBTdHJpbmcmIHVy
bCwgY29uc3QgU3RyaW5nKiBvcHRpb25hbFBhZ2VMb2FkU3RyYXRlZ3lTdHJpbmcsIGNvbnN0IGRv
dWJsZSogb3B0aW9uYWxQYWdlTG9hZFRpbWVvdXQsIFJlZjxOYXZpZ2F0ZUJyb3dzaW5nQ29udGV4
dENhbGxiYWNrPiYmIGNhbGxiYWNrKQordm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6bmF2aWdh
dGVCcm93c2luZ0NvbnRleHQoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6
QnJvd3NpbmdDb250ZXh0SGFuZGxlJiBoYW5kbGUsIGNvbnN0IFN0cmluZyYgdXJsLCBPcHRpb25h
bDxJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpQYWdlTG9hZFN0cmF0ZWd5PiYmIG9w
dGlvbmFsUGFnZUxvYWRTdHJhdGVneSwgT3B0aW9uYWw8ZG91YmxlPiYmIG9wdGlvbmFsUGFnZUxv
YWRUaW1lb3V0LCBSZWY8TmF2aWdhdGVCcm93c2luZ0NvbnRleHRDYWxsYmFjaz4mJiBjYWxsYmFj
aykKIHsKICAgICBXZWJQYWdlUHJveHkqIHBhZ2UgPSB3ZWJQYWdlUHJveHlGb3JIYW5kbGUoaGFu
ZGxlKTsKICAgICBpZiAoIXBhZ2UpCiAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVE
X0VSUk9SKFdpbmRvd05vdEZvdW5kKTsKIAotICAgIGF1dG8gcGFnZUxvYWRTdHJhdGVneSA9IHBh
Z2VMb2FkU3RyYXRlZ3lGcm9tU3RyaW5nUGFyYW1ldGVyKG9wdGlvbmFsUGFnZUxvYWRTdHJhdGVn
eVN0cmluZyk7Ci0gICAgaWYgKCFwYWdlTG9hZFN0cmF0ZWd5KQotICAgICAgICBBU1lOQ19GQUlM
X1dJVEhfUFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhJbnZhbGlkUGFyYW1ldGVyLCAiVGhl
IHBhcmFtZXRlciAncGFnZUxvYWRTdHJhdGVneScgaXMgaW52YWxpZC4iKTsKKyAgICBhdXRvIHBh
Z2VMb2FkU3RyYXRlZ3kgPSBvcHRpb25hbFBhZ2VMb2FkU3RyYXRlZ3kudmFsdWVPcihkZWZhdWx0
UGFnZUxvYWRTdHJhdGVneSk7CiAgICAgYXV0byBwYWdlTG9hZFRpbWVvdXQgPSBvcHRpb25hbFBh
Z2VMb2FkVGltZW91dCA/IFNlY29uZHM6OmZyb21NaWxsaXNlY29uZHMoKm9wdGlvbmFsUGFnZUxv
YWRUaW1lb3V0KSA6IGRlZmF1bHRQYWdlTG9hZFRpbWVvdXQ7CiAKICAgICBwYWdlLT5sb2FkUmVx
dWVzdChVUkwoVVJMKCksIHVybCkpOwotICAgIHdhaXRGb3JOYXZpZ2F0aW9uVG9Db21wbGV0ZU9u
UGFnZSgqcGFnZSwgcGFnZUxvYWRTdHJhdGVneS52YWx1ZSgpLCBwYWdlTG9hZFRpbWVvdXQsIFdU
Rk1vdmUoY2FsbGJhY2spKTsKKyAgICB3YWl0Rm9yTmF2aWdhdGlvblRvQ29tcGxldGVPblBhZ2Uo
KnBhZ2UsIHBhZ2VMb2FkU3RyYXRlZ3ksIHBhZ2VMb2FkVGltZW91dCwgV1RGTW92ZShjYWxsYmFj
aykpOwogfQogCi12b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpnb0JhY2tJbkJyb3dzaW5nQ29u
dGV4dChjb25zdCBTdHJpbmcmIGhhbmRsZSwgY29uc3QgU3RyaW5nKiBvcHRpb25hbFBhZ2VMb2Fk
U3RyYXRlZ3lTdHJpbmcsIGNvbnN0IGRvdWJsZSogb3B0aW9uYWxQYWdlTG9hZFRpbWVvdXQsIFJl
ZjxHb0JhY2tJbkJyb3dzaW5nQ29udGV4dENhbGxiYWNrPiYmIGNhbGxiYWNrKQordm9pZCBXZWJB
dXRvbWF0aW9uU2Vzc2lvbjo6Z29CYWNrSW5Ccm93c2luZ0NvbnRleHQoY29uc3QgSW5zcGVjdG9y
OjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJiBoYW5kbGUsIE9w
dGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OlBhZ2VMb2FkU3RyYXRlZ3k+
JiYgb3B0aW9uYWxQYWdlTG9hZFN0cmF0ZWd5LCBPcHRpb25hbDxkb3VibGU+JiYgb3B0aW9uYWxQ
YWdlTG9hZFRpbWVvdXQsIFJlZjxHb0JhY2tJbkJyb3dzaW5nQ29udGV4dENhbGxiYWNrPiYmIGNh
bGxiYWNrKQogewogICAgIFdlYlBhZ2VQcm94eSogcGFnZSA9IHdlYlBhZ2VQcm94eUZvckhhbmRs
ZShoYW5kbGUpOwogICAgIGlmICghcGFnZSkKICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURF
RklORURfRVJST1IoV2luZG93Tm90Rm91bmQpOwogCi0gICAgYXV0byBwYWdlTG9hZFN0cmF0ZWd5
ID0gcGFnZUxvYWRTdHJhdGVneUZyb21TdHJpbmdQYXJhbWV0ZXIob3B0aW9uYWxQYWdlTG9hZFN0
cmF0ZWd5U3RyaW5nKTsKLSAgICBpZiAoIXBhZ2VMb2FkU3RyYXRlZ3kpCi0gICAgICAgIEFTWU5D
X0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxTKEludmFsaWRQYXJhbWV0ZXIs
ICJUaGUgcGFyYW1ldGVyICdwYWdlTG9hZFN0cmF0ZWd5JyBpcyBpbnZhbGlkLiIpOworICAgIGF1
dG8gcGFnZUxvYWRTdHJhdGVneSA9IG9wdGlvbmFsUGFnZUxvYWRTdHJhdGVneS52YWx1ZU9yKGRl
ZmF1bHRQYWdlTG9hZFN0cmF0ZWd5KTsKICAgICBhdXRvIHBhZ2VMb2FkVGltZW91dCA9IG9wdGlv
bmFsUGFnZUxvYWRUaW1lb3V0ID8gU2Vjb25kczo6ZnJvbU1pbGxpc2Vjb25kcygqb3B0aW9uYWxQ
YWdlTG9hZFRpbWVvdXQpIDogZGVmYXVsdFBhZ2VMb2FkVGltZW91dDsKIAogICAgIHBhZ2UtPmdv
QmFjaygpOwotICAgIHdhaXRGb3JOYXZpZ2F0aW9uVG9Db21wbGV0ZU9uUGFnZSgqcGFnZSwgcGFn
ZUxvYWRTdHJhdGVneS52YWx1ZSgpLCBwYWdlTG9hZFRpbWVvdXQsIFdURk1vdmUoY2FsbGJhY2sp
KTsKKyAgICB3YWl0Rm9yTmF2aWdhdGlvblRvQ29tcGxldGVPblBhZ2UoKnBhZ2UsIHBhZ2VMb2Fk
U3RyYXRlZ3ksIHBhZ2VMb2FkVGltZW91dCwgV1RGTW92ZShjYWxsYmFjaykpOwogfQogCi12b2lk
IFdlYkF1dG9tYXRpb25TZXNzaW9uOjpnb0ZvcndhcmRJbkJyb3dzaW5nQ29udGV4dChjb25zdCBT
dHJpbmcmIGhhbmRsZSwgY29uc3QgU3RyaW5nKiBvcHRpb25hbFBhZ2VMb2FkU3RyYXRlZ3lTdHJp
bmcsIGNvbnN0IGRvdWJsZSogb3B0aW9uYWxQYWdlTG9hZFRpbWVvdXQsIFJlZjxHb0ZvcndhcmRJ
bkJyb3dzaW5nQ29udGV4dENhbGxiYWNrPiYmIGNhbGxiYWNrKQordm9pZCBXZWJBdXRvbWF0aW9u
U2Vzc2lvbjo6Z29Gb3J3YXJkSW5Ccm93c2luZ0NvbnRleHQoY29uc3QgSW5zcGVjdG9yOjpQcm90
b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJiBoYW5kbGUsIE9wdGlvbmFs
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OlBhZ2VMb2FkU3RyYXRlZ3k+JiYgb3B0
aW9uYWxQYWdlTG9hZFN0cmF0ZWd5LCBPcHRpb25hbDxkb3VibGU+JiYgb3B0aW9uYWxQYWdlTG9h
ZFRpbWVvdXQsIFJlZjxHb0ZvcndhcmRJbkJyb3dzaW5nQ29udGV4dENhbGxiYWNrPiYmIGNhbGxi
YWNrKQogewogICAgIFdlYlBhZ2VQcm94eSogcGFnZSA9IHdlYlBhZ2VQcm94eUZvckhhbmRsZSho
YW5kbGUpOwogICAgIGlmICghcGFnZSkKICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklO
RURfRVJST1IoV2luZG93Tm90Rm91bmQpOwogCi0gICAgYXV0byBwYWdlTG9hZFN0cmF0ZWd5ID0g
cGFnZUxvYWRTdHJhdGVneUZyb21TdHJpbmdQYXJhbWV0ZXIob3B0aW9uYWxQYWdlTG9hZFN0cmF0
ZWd5U3RyaW5nKTsKLSAgICBpZiAoIXBhZ2VMb2FkU3RyYXRlZ3kpCi0gICAgICAgIEFTWU5DX0ZB
SUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxTKEludmFsaWRQYXJhbWV0ZXIsICJU
aGUgcGFyYW1ldGVyICdwYWdlTG9hZFN0cmF0ZWd5JyBpcyBpbnZhbGlkLiIpOworICAgIGF1dG8g
cGFnZUxvYWRTdHJhdGVneSA9IG9wdGlvbmFsUGFnZUxvYWRTdHJhdGVneS52YWx1ZU9yKGRlZmF1
bHRQYWdlTG9hZFN0cmF0ZWd5KTsKICAgICBhdXRvIHBhZ2VMb2FkVGltZW91dCA9IG9wdGlvbmFs
UGFnZUxvYWRUaW1lb3V0ID8gU2Vjb25kczo6ZnJvbU1pbGxpc2Vjb25kcygqb3B0aW9uYWxQYWdl
TG9hZFRpbWVvdXQpIDogZGVmYXVsdFBhZ2VMb2FkVGltZW91dDsKIAogICAgIHBhZ2UtPmdvRm9y
d2FyZCgpOwotICAgIHdhaXRGb3JOYXZpZ2F0aW9uVG9Db21wbGV0ZU9uUGFnZSgqcGFnZSwgcGFn
ZUxvYWRTdHJhdGVneS52YWx1ZSgpLCBwYWdlTG9hZFRpbWVvdXQsIFdURk1vdmUoY2FsbGJhY2sp
KTsKKyAgICB3YWl0Rm9yTmF2aWdhdGlvblRvQ29tcGxldGVPblBhZ2UoKnBhZ2UsIHBhZ2VMb2Fk
U3RyYXRlZ3ksIHBhZ2VMb2FkVGltZW91dCwgV1RGTW92ZShjYWxsYmFjaykpOwogfQogCi12b2lk
IFdlYkF1dG9tYXRpb25TZXNzaW9uOjpyZWxvYWRCcm93c2luZ0NvbnRleHQoY29uc3QgU3RyaW5n
JiBoYW5kbGUsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxQYWdlTG9hZFN0cmF0ZWd5U3RyaW5nLCBj
b25zdCBkb3VibGUqIG9wdGlvbmFsUGFnZUxvYWRUaW1lb3V0LCBSZWY8UmVsb2FkQnJvd3NpbmdD
b250ZXh0Q2FsbGJhY2s+JiYgY2FsbGJhY2spCit2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpy
ZWxvYWRCcm93c2luZ0NvbnRleHQoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlv
bjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJiBoYW5kbGUsIE9wdGlvbmFsPEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkF1dG9tYXRpb246OlBhZ2VMb2FkU3RyYXRlZ3k+JiYgb3B0aW9uYWxQYWdlTG9hZFN0
cmF0ZWd5LCBPcHRpb25hbDxkb3VibGU+JiYgb3B0aW9uYWxQYWdlTG9hZFRpbWVvdXQsIFJlZjxS
ZWxvYWRCcm93c2luZ0NvbnRleHRDYWxsYmFjaz4mJiBjYWxsYmFjaykKIHsKICAgICBXZWJQYWdl
UHJveHkqIHBhZ2UgPSB3ZWJQYWdlUHJveHlGb3JIYW5kbGUoaGFuZGxlKTsKICAgICBpZiAoIXBh
Z2UpCiAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SKFdpbmRvd05vdEZv
dW5kKTsKIAotICAgIGF1dG8gcGFnZUxvYWRTdHJhdGVneSA9IHBhZ2VMb2FkU3RyYXRlZ3lGcm9t
U3RyaW5nUGFyYW1ldGVyKG9wdGlvbmFsUGFnZUxvYWRTdHJhdGVneVN0cmluZyk7Ci0gICAgaWYg
KCFwYWdlTG9hZFN0cmF0ZWd5KQotICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9F
UlJPUl9BTkRfREVUQUlMUyhJbnZhbGlkUGFyYW1ldGVyLCAiVGhlIHBhcmFtZXRlciAncGFnZUxv
YWRTdHJhdGVneScgaXMgaW52YWxpZC4iKTsKKyAgICBhdXRvIHBhZ2VMb2FkU3RyYXRlZ3kgPSBv
cHRpb25hbFBhZ2VMb2FkU3RyYXRlZ3kudmFsdWVPcihkZWZhdWx0UGFnZUxvYWRTdHJhdGVneSk7
CiAgICAgYXV0byBwYWdlTG9hZFRpbWVvdXQgPSBvcHRpb25hbFBhZ2VMb2FkVGltZW91dCA/IFNl
Y29uZHM6OmZyb21NaWxsaXNlY29uZHMoKm9wdGlvbmFsUGFnZUxvYWRUaW1lb3V0KSA6IGRlZmF1
bHRQYWdlTG9hZFRpbWVvdXQ7CiAKICAgICBwYWdlLT5yZWxvYWQoeyB9KTsKLSAgICB3YWl0Rm9y
TmF2aWdhdGlvblRvQ29tcGxldGVPblBhZ2UoKnBhZ2UsIHBhZ2VMb2FkU3RyYXRlZ3kudmFsdWUo
KSwgcGFnZUxvYWRUaW1lb3V0LCBXVEZNb3ZlKGNhbGxiYWNrKSk7CisgICAgd2FpdEZvck5hdmln
YXRpb25Ub0NvbXBsZXRlT25QYWdlKCpwYWdlLCBwYWdlTG9hZFN0cmF0ZWd5LCBwYWdlTG9hZFRp
bWVvdXQsIFdURk1vdmUoY2FsbGJhY2spKTsKIH0KIAogdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lv
bjo6bmF2aWdhdGlvbk9jY3VycmVkRm9yRnJhbWUoY29uc3QgV2ViRnJhbWVQcm94eSYgZnJhbWUp
CkBAIC05MjIsMzUgKzkwNCwyNyBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpoYW5kbGVS
dW5PcGVuUGFuZWwoY29uc3QgV2ViUGFnZVByb3h5JiBwYWdlLCBjb25zdCBXZQogICAgIG1fZG9t
YWluTm90aWZpZXItPmZpbGVDaG9vc2VyRGlzbWlzc2VkKGJyb3dzaW5nQ29udGV4dEhhbmRsZSwg
ZmFsc2UpOwogfQogCi12b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpldmFsdWF0ZUphdmFTY3Jp
cHRGdW5jdGlvbihjb25zdCBTdHJpbmcmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSwgY29uc3QgU3Ry
aW5nKiBvcHRpb25hbEZyYW1lSGFuZGxlLCBjb25zdCBTdHJpbmcmIGZ1bmN0aW9uLCBjb25zdCBK
U09OOjpBcnJheSYgYXJndW1lbnRzLCBjb25zdCBib29sKiBvcHRpb25hbEV4cGVjdHNJbXBsaWNp
dENhbGxiYWNrQXJndW1lbnQsIGNvbnN0IGRvdWJsZSogb3B0aW9uYWxDYWxsYmFja1RpbWVvdXQs
IFJlZjxFdmFsdWF0ZUphdmFTY3JpcHRGdW5jdGlvbkNhbGxiYWNrPiYmIGNhbGxiYWNrKQordm9p
ZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6ZXZhbHVhdGVKYXZhU2NyaXB0RnVuY3Rpb24oY29uc3Qg
SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJiBi
cm93c2luZ0NvbnRleHRIYW5kbGUsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRp
b246OkZyYW1lSGFuZGxlJiBmcmFtZUhhbmRsZSwgY29uc3QgU3RyaW5nJiBmdW5jdGlvbiwgUmVm
PEpTT046OkFycmF5PiYmIGFyZ3VtZW50cywgT3B0aW9uYWw8Ym9vbD4mJiBleHBlY3RzSW1wbGlj
aXRDYWxsYmFja0FyZ3VtZW50LCBPcHRpb25hbDxkb3VibGU+JiYgY2FsbGJhY2tUaW1lb3V0LCBS
ZWY8RXZhbHVhdGVKYXZhU2NyaXB0RnVuY3Rpb25DYWxsYmFjaz4mJiBjYWxsYmFjaykKIHsKICAg
ICBXZWJQYWdlUHJveHkqIHBhZ2UgPSB3ZWJQYWdlUHJveHlGb3JIYW5kbGUoYnJvd3NpbmdDb250
ZXh0SGFuZGxlKTsKICAgICBpZiAoIXBhZ2UpCiAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVE
RUZJTkVEX0VSUk9SKFdpbmRvd05vdEZvdW5kKTsKIAogICAgIGJvb2wgZnJhbWVOb3RGb3VuZCA9
IGZhbHNlOwotICAgIGF1dG8gZnJhbWVJRCA9IHdlYkZyYW1lSURGb3JIYW5kbGUob3B0aW9uYWxG
cmFtZUhhbmRsZSA/ICpvcHRpb25hbEZyYW1lSGFuZGxlIDogZW1wdHlTdHJpbmcoKSwgZnJhbWVO
b3RGb3VuZCk7CisgICAgYXV0byBmcmFtZUlEID0gd2ViRnJhbWVJREZvckhhbmRsZShmcmFtZUhh
bmRsZSwgZnJhbWVOb3RGb3VuZCk7CiAgICAgaWYgKGZyYW1lTm90Rm91bmQpCiAgICAgICAgIEFT
WU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SKEZyYW1lTm90Rm91bmQpOwogCiAgICAgVmVj
dG9yPFN0cmluZz4gYXJndW1lbnRzVmVjdG9yOwotICAgIGFyZ3VtZW50c1ZlY3Rvci5yZXNlcnZl
Q2FwYWNpdHkoYXJndW1lbnRzLmxlbmd0aCgpKTsKKyAgICBhcmd1bWVudHNWZWN0b3IucmVzZXJ2
ZUNhcGFjaXR5KGFyZ3VtZW50cy0+bGVuZ3RoKCkpOwogCi0gICAgZm9yIChhdXRvJiBhcmd1bWVu
dCA6IGFyZ3VtZW50cykgewotICAgICAgICBTdHJpbmcgYXJndW1lbnRTdHJpbmc7Ci0gICAgICAg
IGFyZ3VtZW50LT5hc1N0cmluZyhhcmd1bWVudFN0cmluZyk7Ci0gICAgICAgIGFyZ3VtZW50c1Zl
Y3Rvci51bmNoZWNrZWRBcHBlbmQoYXJndW1lbnRTdHJpbmcpOwotICAgIH0KLQotICAgIGJvb2wg
ZXhwZWN0c0ltcGxpY2l0Q2FsbGJhY2tBcmd1bWVudCA9IG9wdGlvbmFsRXhwZWN0c0ltcGxpY2l0
Q2FsbGJhY2tBcmd1bWVudCA/ICpvcHRpb25hbEV4cGVjdHNJbXBsaWNpdENhbGxiYWNrQXJndW1l
bnQgOiBmYWxzZTsKLSAgICBPcHRpb25hbDxkb3VibGU+IGNhbGxiYWNrVGltZW91dDsKLSAgICBp
ZiAob3B0aW9uYWxDYWxsYmFja1RpbWVvdXQpCi0gICAgICAgIGNhbGxiYWNrVGltZW91dCA9ICpv
cHRpb25hbENhbGxiYWNrVGltZW91dDsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGFyZ3VtZW50IDog
YXJndW1lbnRzLmdldCgpKQorICAgICAgICBhcmd1bWVudHNWZWN0b3IudW5jaGVja2VkQXBwZW5k
KGFyZ3VtZW50LT5hc1N0cmluZygpKTsKIAogICAgIHVpbnQ2NF90IGNhbGxiYWNrSUQgPSBtX25l
eHRFdmFsdWF0ZUphdmFTY3JpcHRDYWxsYmFja0lEKys7CiAgICAgbV9ldmFsdWF0ZUphdmFTY3Jp
cHRGdW5jdGlvbkNhbGxiYWNrcy5zZXQoY2FsbGJhY2tJRCwgV1RGTW92ZShjYWxsYmFjaykpOwog
Ci0gICAgcGFnZS0+cHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6OldlYkF1dG9tYXRpb25TZXNzaW9u
UHJveHk6OkV2YWx1YXRlSmF2YVNjcmlwdEZ1bmN0aW9uKHBhZ2UtPndlYlBhZ2VJRCgpLCBmcmFt
ZUlELCBmdW5jdGlvbiwgYXJndW1lbnRzVmVjdG9yLCBleHBlY3RzSW1wbGljaXRDYWxsYmFja0Fy
Z3VtZW50LCBjYWxsYmFja1RpbWVvdXQsIGNhbGxiYWNrSUQpLCAwKTsKKyAgICBwYWdlLT5wcm9j
ZXNzKCkuc2VuZChNZXNzYWdlczo6V2ViQXV0b21hdGlvblNlc3Npb25Qcm94eTo6RXZhbHVhdGVK
YXZhU2NyaXB0RnVuY3Rpb24ocGFnZS0+d2ViUGFnZUlEKCksIGZyYW1lSUQsIGZ1bmN0aW9uLCBh
cmd1bWVudHNWZWN0b3IsIGV4cGVjdHNJbXBsaWNpdENhbGxiYWNrQXJndW1lbnQudmFsdWVPcihm
YWxzZSksIFdURk1vdmUoY2FsbGJhY2tUaW1lb3V0KSwgY2FsbGJhY2tJRCksIDApOwogfQogCiB2
b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpkaWRFdmFsdWF0ZUphdmFTY3JpcHRGdW5jdGlvbih1
aW50NjRfdCBjYWxsYmFja0lELCBjb25zdCBTdHJpbmcmIHJlc3VsdCwgY29uc3QgU3RyaW5nJiBl
cnJvclR5cGUpCkBAIC05NjUsNyArOTM5LDcgQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6
ZGlkRXZhbHVhdGVKYXZhU2NyaXB0RnVuY3Rpb24odWludDY0X3QgY2FsbGJhY2tJRCwgY28KICAg
ICAgICAgY2FsbGJhY2stPnNlbmRTdWNjZXNzKHJlc3VsdCk7CiB9CiAKLXZvaWQgV2ViQXV0b21h
dGlvblNlc3Npb246OnJlc29sdmVDaGlsZEZyYW1lSGFuZGxlKGNvbnN0IFN0cmluZyYgYnJvd3Np
bmdDb250ZXh0SGFuZGxlLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsRnJhbWVIYW5kbGUsIGNvbnN0
IGludCogb3B0aW9uYWxPcmRpbmFsLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsTmFtZSwgY29uc3Qg
U3RyaW5nKiBvcHRpb25hbE5vZGVIYW5kbGUsIFJlZjxSZXNvbHZlQ2hpbGRGcmFtZUhhbmRsZUNh
bGxiYWNrPiYmIGNhbGxiYWNrKQordm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6cmVzb2x2ZUNo
aWxkRnJhbWVIYW5kbGUoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJv
d3NpbmdDb250ZXh0SGFuZGxlJiBicm93c2luZ0NvbnRleHRIYW5kbGUsIGNvbnN0IEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkZyYW1lSGFuZGxlJiBmcmFtZUhhbmRsZSwgT3B0aW9u
YWw8aW50PiYmIG9wdGlvbmFsT3JkaW5hbCwgY29uc3QgU3RyaW5nJiBvcHRpb25hbE5hbWUsIGNv
bnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246Ok5vZGVIYW5kbGUmIG9wdGlvbmFs
Tm9kZUhhbmRsZSwgUmVmPFJlc29sdmVDaGlsZEZyYW1lSGFuZGxlQ2FsbGJhY2s+JiYgY2FsbGJh
Y2spCiB7CiAgICAgaWYgKCFvcHRpb25hbE9yZGluYWwgJiYgIW9wdGlvbmFsTmFtZSAmJiAhb3B0
aW9uYWxOb2RlSGFuZGxlKQogICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJP
Ul9BTkRfREVUQUlMUyhNaXNzaW5nUGFyYW1ldGVyLCAiQ29tbWFuZCBtdXN0IHNwZWNpZnkgYSBj
aGlsZCBmcmFtZSBieSBvcmRpbmFsLCBuYW1lLCBvciBlbGVtZW50IGhhbmRsZS4iKTsKQEAgLTk3
NSw3ICs5NDksNyBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpyZXNvbHZlQ2hpbGRGcmFt
ZUhhbmRsZShjb25zdCBTdHJpbmcmIGJyb3dzaW5nQ29udGV4dAogICAgICAgICBBU1lOQ19GQUlM
X1dJVEhfUFJFREVGSU5FRF9FUlJPUihXaW5kb3dOb3RGb3VuZCk7CiAKICAgICBib29sIGZyYW1l
Tm90Rm91bmQgPSBmYWxzZTsKLSAgICBhdXRvIGZyYW1lSUQgPSB3ZWJGcmFtZUlERm9ySGFuZGxl
KG9wdGlvbmFsRnJhbWVIYW5kbGUgPyAqb3B0aW9uYWxGcmFtZUhhbmRsZSA6IGVtcHR5U3RyaW5n
KCksIGZyYW1lTm90Rm91bmQpOworICAgIGF1dG8gZnJhbWVJRCA9IHdlYkZyYW1lSURGb3JIYW5k
bGUoZnJhbWVIYW5kbGUsIGZyYW1lTm90Rm91bmQpOwogICAgIGlmIChmcmFtZU5vdEZvdW5kKQog
ICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUihGcmFtZU5vdEZvdW5kKTsK
IApAQCAtOTg4LDEzICs5NjIsMTMgQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6cmVzb2x2
ZUNoaWxkRnJhbWVIYW5kbGUoY29uc3QgU3RyaW5nJiBicm93c2luZ0NvbnRleHQKICAgICAgICAg
Y2FsbGJhY2stPnNlbmRTdWNjZXNzKGhhbmRsZUZvcldlYkZyYW1lSUQoZnJhbWVJRCkpOwogICAg
IH07CiAKLSAgICBpZiAob3B0aW9uYWxOb2RlSGFuZGxlKSB7Ci0gICAgICAgIHBhZ2UtPnByb2Nl
c3MoKS5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkF1dG9tYXRpb25TZXNzaW9uUHJv
eHk6OlJlc29sdmVDaGlsZEZyYW1lV2l0aE5vZGVIYW5kbGUocGFnZS0+d2ViUGFnZUlEKCksIGZy
YW1lSUQsICpvcHRpb25hbE5vZGVIYW5kbGUpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7
CisgICAgaWYgKCEhb3B0aW9uYWxOb2RlSGFuZGxlKSB7CisgICAgICAgIHBhZ2UtPnByb2Nlc3Mo
KS5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkF1dG9tYXRpb25TZXNzaW9uUHJveHk6
OlJlc29sdmVDaGlsZEZyYW1lV2l0aE5vZGVIYW5kbGUocGFnZS0+d2ViUGFnZUlEKCksIGZyYW1l
SUQsIG9wdGlvbmFsTm9kZUhhbmRsZSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChvcHRpb25hbE5hbWUpIHsKLSAgICAgICAg
cGFnZS0+cHJvY2VzcygpLnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQXV0b21hdGlv
blNlc3Npb25Qcm94eTo6UmVzb2x2ZUNoaWxkRnJhbWVXaXRoTmFtZShwYWdlLT53ZWJQYWdlSUQo
KSwgZnJhbWVJRCwgKm9wdGlvbmFsTmFtZSksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsK
KyAgICBpZiAoISFvcHRpb25hbE5hbWUpIHsKKyAgICAgICAgcGFnZS0+cHJvY2VzcygpLnNlbmRX
aXRoQXN5bmNSZXBseShNZXNzYWdlczo6V2ViQXV0b21hdGlvblNlc3Npb25Qcm94eTo6UmVzb2x2
ZUNoaWxkRnJhbWVXaXRoTmFtZShwYWdlLT53ZWJQYWdlSUQoKSwgZnJhbWVJRCwgb3B0aW9uYWxO
YW1lKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCkBAIC0xMDA2LDcgKzk4MCw3IEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OnJlc29s
dmVDaGlsZEZyYW1lSGFuZGxlKGNvbnN0IFN0cmluZyYgYnJvd3NpbmdDb250ZXh0CiAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLXZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OnJlc29s
dmVQYXJlbnRGcmFtZUhhbmRsZShjb25zdCBTdHJpbmcmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSwg
Y29uc3QgU3RyaW5nJiBmcmFtZUhhbmRsZSwgUmVmPFJlc29sdmVQYXJlbnRGcmFtZUhhbmRsZUNh
bGxiYWNrPiYmIGNhbGxiYWNrKQordm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6cmVzb2x2ZVBh
cmVudEZyYW1lSGFuZGxlKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJy
b3dzaW5nQ29udGV4dEhhbmRsZSYgYnJvd3NpbmdDb250ZXh0SGFuZGxlLCBjb25zdCBJbnNwZWN0
b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpGcmFtZUhhbmRsZSYgZnJhbWVIYW5kbGUsIFJlZjxS
ZXNvbHZlUGFyZW50RnJhbWVIYW5kbGVDYWxsYmFjaz4mJiBjYWxsYmFjaykKIHsKICAgICBXZWJQ
YWdlUHJveHkqIHBhZ2UgPSB3ZWJQYWdlUHJveHlGb3JIYW5kbGUoYnJvd3NpbmdDb250ZXh0SGFu
ZGxlKTsKICAgICBpZiAoIXBhZ2UpCkBAIC0xMDI5LDE2ICsxMDAzLDIyIEBAIHZvaWQgV2ViQXV0
b21hdGlvblNlc3Npb246OnJlc29sdmVQYXJlbnRGcmFtZUhhbmRsZShjb25zdCBTdHJpbmcmIGJy
b3dzaW5nQ29udGV4CiAgICAgcGFnZS0+cHJvY2VzcygpLnNlbmRXaXRoQXN5bmNSZXBseShNZXNz
YWdlczo6V2ViQXV0b21hdGlvblNlc3Npb25Qcm94eTo6UmVzb2x2ZVBhcmVudEZyYW1lKHBhZ2Ut
PndlYlBhZ2VJRCgpLCBmcmFtZUlEKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQog
Ci1zdGF0aWMgT3B0aW9uYWw8Q29vcmRpbmF0ZVN5c3RlbT4gcHJvdG9jb2xTdHJpbmdUb0Nvb3Jk
aW5hdGVTeXN0ZW0oY29uc3QgU3RyaW5nJiBjb29yZGluYXRlU3lzdGVtU3RyaW5nKQorc3RhdGlj
IE9wdGlvbmFsPENvb3JkaW5hdGVTeXN0ZW0+IHByb3RvY29sU3RyaW5nVG9Db29yZGluYXRlU3lz
dGVtKEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkNvb3JkaW5hdGVTeXN0ZW0gY29v
cmRpbmF0ZVN5c3RlbSkKIHsKLSAgICBpZiAoY29vcmRpbmF0ZVN5c3RlbVN0cmluZyA9PSAiUGFn
ZSIpCisgICAgc3dpdGNoIChjb29yZGluYXRlU3lzdGVtKSB7CisgICAgY2FzZSBJbnNwZWN0b3I6
OlByb3RvY29sOjpBdXRvbWF0aW9uOjpDb29yZGluYXRlU3lzdGVtOjpQYWdlOgogICAgICAgICBy
ZXR1cm4gQ29vcmRpbmF0ZVN5c3RlbTo6UGFnZTsKLSAgICBpZiAoY29vcmRpbmF0ZVN5c3RlbVN0
cmluZyA9PSAiTGF5b3V0Vmlld3BvcnQiKQorCisgICAgY2FzZSBJbnNwZWN0b3I6OlByb3RvY29s
OjpBdXRvbWF0aW9uOjpDb29yZGluYXRlU3lzdGVtOjpWaWV3cG9ydDoKKyAgICBjYXNlIEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkNvb3JkaW5hdGVTeXN0ZW06OkxheW91dFZpZXdw
b3J0OgogICAgICAgICByZXR1cm4gQ29vcmRpbmF0ZVN5c3RlbTo6TGF5b3V0Vmlld3BvcnQ7Cisg
ICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKIH0KIAotdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6Y29tcHV0ZUVsZW1lbnRMYXlvdXQo
Y29uc3QgU3RyaW5nJiBicm93c2luZ0NvbnRleHRIYW5kbGUsIGNvbnN0IFN0cmluZyYgZnJhbWVI
YW5kbGUsIGNvbnN0IFN0cmluZyYgbm9kZUhhbmRsZSwgY29uc3QgYm9vbCogb3B0aW9uYWxTY3Jv
bGxJbnRvVmlld0lmTmVlZGVkLCBjb25zdCBTdHJpbmcmIGNvb3JkaW5hdGVTeXN0ZW1TdHJpbmcs
IFJlZjxDb21wdXRlRWxlbWVudExheW91dENhbGxiYWNrPiYmIGNhbGxiYWNrKQordm9pZCBXZWJB
dXRvbWF0aW9uU2Vzc2lvbjo6Y29tcHV0ZUVsZW1lbnRMYXlvdXQoY29uc3QgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJiBicm93c2luZ0NvbnRl
eHRIYW5kbGUsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkZyYW1lSGFu
ZGxlJiBmcmFtZUhhbmRsZSwgY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6
Tm9kZUhhbmRsZSYgbm9kZUhhbmRsZSwgT3B0aW9uYWw8Ym9vbD4mJiBvcHRpb25hbFNjcm9sbElu
dG9WaWV3SWZOZWVkZWQsIEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkNvb3JkaW5h
dGVTeXN0ZW0gY29vcmRpbmF0ZVN5c3RlbVZhbHVlLCBSZWY8Q29tcHV0ZUVsZW1lbnRMYXlvdXRD
YWxsYmFjaz4mJiBjYWxsYmFjaykKIHsKICAgICBXZWJQYWdlUHJveHkqIHBhZ2UgPSB3ZWJQYWdl
UHJveHlGb3JIYW5kbGUoYnJvd3NpbmdDb250ZXh0SGFuZGxlKTsKICAgICBpZiAoIXBhZ2UpCkBA
IC0xMDQ5LDcgKzEwMjksNyBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpjb21wdXRlRWxl
bWVudExheW91dChjb25zdCBTdHJpbmcmIGJyb3dzaW5nQ29udGV4dEhhbgogICAgIGlmIChmcmFt
ZU5vdEZvdW5kKQogICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUihGcmFt
ZU5vdEZvdW5kKTsKIAotICAgIE9wdGlvbmFsPENvb3JkaW5hdGVTeXN0ZW0+IGNvb3JkaW5hdGVT
eXN0ZW0gPSBwcm90b2NvbFN0cmluZ1RvQ29vcmRpbmF0ZVN5c3RlbShjb29yZGluYXRlU3lzdGVt
U3RyaW5nKTsKKyAgICBPcHRpb25hbDxDb29yZGluYXRlU3lzdGVtPiBjb29yZGluYXRlU3lzdGVt
ID0gcHJvdG9jb2xTdHJpbmdUb0Nvb3JkaW5hdGVTeXN0ZW0oY29vcmRpbmF0ZVN5c3RlbVZhbHVl
KTsKICAgICBpZiAoIWNvb3JkaW5hdGVTeXN0ZW0pCiAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9Q
UkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxTKEludmFsaWRQYXJhbWV0ZXIsICJUaGUgcGFyYW1l
dGVyICdjb29yZGluYXRlU3lzdGVtJyBpcyBpbnZhbGlkLiIpOwogCkBAIC0xMDkxLDcgKzEwNzEs
NyBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpjb21wdXRlRWxlbWVudExheW91dChjb25z
dCBTdHJpbmcmIGJyb3dzaW5nQ29udGV4dEhhbgogICAgIHBhZ2UtPnByb2Nlc3MoKS5zZW5kV2l0
aEFzeW5jUmVwbHkoTWVzc2FnZXM6OldlYkF1dG9tYXRpb25TZXNzaW9uUHJveHk6OkNvbXB1dGVF
bGVtZW50TGF5b3V0KHBhZ2UtPndlYlBhZ2VJRCgpLCBmcmFtZUlELCBub2RlSGFuZGxlLCBzY3Jv
bGxJbnRvVmlld0lmTmVlZGVkLCBjb29yZGluYXRlU3lzdGVtLnZhbHVlKCkpLCBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKLXZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OnNlbGVj
dE9wdGlvbkVsZW1lbnQoY29uc3QgU3RyaW5nJiBicm93c2luZ0NvbnRleHRIYW5kbGUsIGNvbnN0
IFN0cmluZyYgZnJhbWVIYW5kbGUsIGNvbnN0IFN0cmluZyYgbm9kZUhhbmRsZSwgUmVmPFNlbGVj
dE9wdGlvbkVsZW1lbnRDYWxsYmFjaz4mJiBjYWxsYmFjaykKK3ZvaWQgV2ViQXV0b21hdGlvblNl
c3Npb246OnNlbGVjdE9wdGlvbkVsZW1lbnQoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0
b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJiBicm93c2luZ0NvbnRleHRIYW5kbGUsIGNv
bnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkZyYW1lSGFuZGxlJiBmcmFtZUhh
bmRsZSwgY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6Tm9kZUhhbmRsZSYg
bm9kZUhhbmRsZSwgUmVmPFNlbGVjdE9wdGlvbkVsZW1lbnRDYWxsYmFjaz4mJiBjYWxsYmFjaykK
IHsKICAgICBXZWJQYWdlUHJveHkqIHBhZ2UgPSB3ZWJQYWdlUHJveHlGb3JIYW5kbGUoYnJvd3Np
bmdDb250ZXh0SGFuZGxlKTsKICAgICBpZiAoIXBhZ2UpCkBAIC0xMTE0LDcgKzEwOTQsNyBAQCB2
b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpzZWxlY3RPcHRpb25FbGVtZW50KGNvbnN0IFN0cmlu
ZyYgYnJvd3NpbmdDb250ZXh0SGFuZAogICAgIHBhZ2UtPnByb2Nlc3MoKS5zZW5kV2l0aEFzeW5j
UmVwbHkoTWVzc2FnZXM6OldlYkF1dG9tYXRpb25TZXNzaW9uUHJveHk6OlNlbGVjdE9wdGlvbkVs
ZW1lbnQocGFnZS0+d2ViUGFnZUlEKCksIGZyYW1lSUQsIG5vZGVIYW5kbGUpLCBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7CiB9CiAKLXZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OmlzU2hv
d2luZ0phdmFTY3JpcHREaWFsb2coSW5zcGVjdG9yOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcs
IGNvbnN0IFN0cmluZyYgYnJvd3NpbmdDb250ZXh0SGFuZGxlLCBib29sKiByZXN1bHQpCitJbnNw
ZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPGJvb2w+IFdlYkF1dG9tYXRpb25TZXNzaW9u
Ojppc1Nob3dpbmdKYXZhU2NyaXB0RGlhbG9nKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1
dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYgYnJvd3NpbmdDb250ZXh0SGFuZGxlKQog
ewogICAgIEFTU0VSVChtX2NsaWVudCk7CiAgICAgaWYgKCFtX2NsaWVudCkKQEAgLTExMjQsMTAg
KzExMDQsMTAgQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6aXNTaG93aW5nSmF2YVNjcmlw
dERpYWxvZyhJbnNwZWN0b3I6OkVycm9yU3RyaW5nJiBlcnIKICAgICBpZiAoIXBhZ2UpCiAgICAg
ICAgIFNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1IoV2luZG93Tm90Rm91bmQpOwogCi0g
ICAgKnJlc3VsdCA9IG1fY2xpZW50LT5pc1Nob3dpbmdKYXZhU2NyaXB0RGlhbG9nT25QYWdlKCp0
aGlzLCAqcGFnZSk7CisgICAgcmV0dXJuIG1fY2xpZW50LT5pc1Nob3dpbmdKYXZhU2NyaXB0RGlh
bG9nT25QYWdlKCp0aGlzLCAqcGFnZSk7CiB9CiAKLXZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246
OmRpc21pc3NDdXJyZW50SmF2YVNjcmlwdERpYWxvZyhJbnNwZWN0b3I6OkVycm9yU3RyaW5nJiBl
cnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBicm93c2luZ0NvbnRleHRIYW5kbGUpCitJbnNwZWN0
b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IFdlYkF1dG9tYXRpb25TZXNzaW9uOjpk
aXNtaXNzQ3VycmVudEphdmFTY3JpcHREaWFsb2coY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6
QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJiBicm93c2luZ0NvbnRleHRIYW5kbGUp
CiB7CiAgICAgQVNTRVJUKG1fY2xpZW50KTsKICAgICBpZiAoIW1fY2xpZW50KQpAQCAtMTE0MSw5
ICsxMTIxLDExIEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OmRpc21pc3NDdXJyZW50SmF2
YVNjcmlwdERpYWxvZyhJbnNwZWN0b3I6OkVycm9yU3RyaW5nCiAgICAgICAgIFNZTkNfRkFJTF9X
SVRIX1BSRURFRklORURfRVJST1IoTm9KYXZhU2NyaXB0RGlhbG9nKTsKIAogICAgIG1fY2xpZW50
LT5kaXNtaXNzQ3VycmVudEphdmFTY3JpcHREaWFsb2dPblBhZ2UoKnRoaXMsICpwYWdlKTsKKwor
ICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OmFjY2VwdEN1
cnJlbnRKYXZhU2NyaXB0RGlhbG9nKEluc3BlY3Rvcjo6RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5n
LCBjb25zdCBTdHJpbmcmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSkKK0luc3BlY3Rvcjo6UHJvdG9j
b2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gV2ViQXV0b21hdGlvblNlc3Npb246OmFjY2VwdEN1cnJl
bnRKYXZhU2NyaXB0RGlhbG9nKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246
OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYgYnJvd3NpbmdDb250ZXh0SGFuZGxlKQogewogICAgIEFT
U0VSVChtX2NsaWVudCk7CiAgICAgaWYgKCFtX2NsaWVudCkKQEAgLTExNTcsOSArMTEzOSwxMSBA
QCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjphY2NlcHRDdXJyZW50SmF2YVNjcmlwdERpYWxv
ZyhJbnNwZWN0b3I6OkVycm9yU3RyaW5nJgogICAgICAgICBTWU5DX0ZBSUxfV0lUSF9QUkVERUZJ
TkVEX0VSUk9SKE5vSmF2YVNjcmlwdERpYWxvZyk7CiAKICAgICBtX2NsaWVudC0+YWNjZXB0Q3Vy
cmVudEphdmFTY3JpcHREaWFsb2dPblBhZ2UoKnRoaXMsICpwYWdlKTsKKworICAgIHJldHVybiB7
IH07CiB9CiAKLXZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246Om1lc3NhZ2VPZkN1cnJlbnRKYXZh
U2NyaXB0RGlhbG9nKEluc3BlY3Rvcjo6RXJyb3JTdHJpbmcmIGVycm9yU3RyaW5nLCBjb25zdCBT
dHJpbmcmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSwgU3RyaW5nKiB0ZXh0KQorSW5zcGVjdG9yOjpQ
cm90b2NvbDo6RXJyb3JTdHJpbmdPcjxTdHJpbmc+IFdlYkF1dG9tYXRpb25TZXNzaW9uOjptZXNz
YWdlT2ZDdXJyZW50SmF2YVNjcmlwdERpYWxvZyhjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpB
dXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRIYW5kbGUmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSkK
IHsKICAgICBBU1NFUlQobV9jbGllbnQpOwogICAgIGlmICghbV9jbGllbnQpCkBAIC0xMTcyLDEw
ICsxMTU2LDEwIEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246Om1lc3NhZ2VPZkN1cnJlbnRK
YXZhU2NyaXB0RGlhbG9nKEluc3BlY3Rvcjo6RXJyb3JTdHJpCiAgICAgaWYgKCFtX2NsaWVudC0+
aXNTaG93aW5nSmF2YVNjcmlwdERpYWxvZ09uUGFnZSgqdGhpcywgKnBhZ2UpKQogICAgICAgICBT
WU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SKE5vSmF2YVNjcmlwdERpYWxvZyk7CiAKLSAg
ICAqdGV4dCA9IG1fY2xpZW50LT5tZXNzYWdlT2ZDdXJyZW50SmF2YVNjcmlwdERpYWxvZ09uUGFn
ZSgqdGhpcywgKnBhZ2UpOworICAgIHJldHVybiBtX2NsaWVudC0+bWVzc2FnZU9mQ3VycmVudEph
dmFTY3JpcHREaWFsb2dPblBhZ2UoKnRoaXMsICpwYWdlKTsKIH0KIAotdm9pZCBXZWJBdXRvbWF0
aW9uU2Vzc2lvbjo6c2V0VXNlcklucHV0Rm9yQ3VycmVudEphdmFTY3JpcHRQcm9tcHQoSW5zcGVj
dG9yOjpFcnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgYnJvd3NpbmdDb250
ZXh0SGFuZGxlLCBjb25zdCBTdHJpbmcmIHByb21wdFZhbHVlKQorSW5zcGVjdG9yOjpQcm90b2Nv
bDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6c2V0VXNlcklucHV0
Rm9yQ3VycmVudEphdmFTY3JpcHRQcm9tcHQoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0
b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJiBicm93c2luZ0NvbnRleHRIYW5kbGUsIGNv
bnN0IFN0cmluZyYgcHJvbXB0VmFsdWUpCiB7CiAgICAgQVNTRVJUKG1fY2xpZW50KTsKICAgICBp
ZiAoIW1fY2xpZW50KQpAQCAtMTIwNywxOSArMTE5MSwyMSBAQCB2b2lkIFdlYkF1dG9tYXRpb25T
ZXNzaW9uOjpzZXRVc2VySW5wdXRGb3JDdXJyZW50SmF2YVNjcmlwdFByb21wdChJbnNwZWN0b3I6
OkVycgogICAgIH0KIAogICAgIG1fY2xpZW50LT5zZXRVc2VySW5wdXRGb3JDdXJyZW50SmF2YVNj
cmlwdFByb21wdE9uUGFnZSgqdGhpcywgKnBhZ2UsIHByb21wdFZhbHVlKTsKKworICAgIHJldHVy
biB7IH07CiB9CiAKLXZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OnNldEZpbGVzVG9TZWxlY3RG
b3JGaWxlVXBsb2FkKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZywgY29uc3QgU3RyaW5nJiBicm93
c2luZ0NvbnRleHRIYW5kbGUsIGNvbnN0IEpTT046OkFycmF5JiBmaWxlbmFtZXMsIGNvbnN0IEpT
T046OkFycmF5KiBmaWxlQ29udGVudHMpCitJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmlu
Z09yPHZvaWQ+IFdlYkF1dG9tYXRpb25TZXNzaW9uOjpzZXRGaWxlc1RvU2VsZWN0Rm9yRmlsZVVw
bG9hZChjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRl
eHRIYW5kbGUmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSwgUmVmPEpTT046OkFycmF5PiYmIGZpbGVu
YW1lcywgUmVmUHRyPEpTT046OkFycmF5PiYmIGZpbGVDb250ZW50cykKIHsKICAgICBWZWN0b3I8
U3RyaW5nPiBuZXdGaWxlTGlzdDsKLSAgICBuZXdGaWxlTGlzdC5yZXNlcnZlSW5pdGlhbENhcGFj
aXR5KGZpbGVuYW1lcy5sZW5ndGgoKSk7CisgICAgbmV3RmlsZUxpc3QucmVzZXJ2ZUluaXRpYWxD
YXBhY2l0eShmaWxlbmFtZXMtPmxlbmd0aCgpKTsKIAotICAgIGlmIChmaWxlQ29udGVudHMgJiYg
ZmlsZUNvbnRlbnRzLT5sZW5ndGgoKSAhPSBmaWxlbmFtZXMubGVuZ3RoKCkpCisgICAgaWYgKGZp
bGVDb250ZW50cyAmJiBmaWxlQ29udGVudHMtPmxlbmd0aCgpICE9IGZpbGVuYW1lcy0+bGVuZ3Ro
KCkpCiAgICAgICAgIFNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMo
SW50ZXJuYWxFcnJvciwgIlRoZSBwYXJhbWV0ZXJzICdmaWxlbmFtZXMnIGFuZCAnZmlsZUNvbnRl
bnRzJyBtdXN0IGhhdmUgZXF1YWwgbGVuZ3RoLiIpOwogCi0gICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBmaWxlbmFtZXMubGVuZ3RoKCk7ICsraSkgewotICAgICAgICBTdHJpbmcgZmlsZW5hbWU7
Ci0gICAgICAgIGlmICghZmlsZW5hbWVzLmdldChpKS0+YXNTdHJpbmcoZmlsZW5hbWUpKQorICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZmlsZW5hbWVzLT5sZW5ndGgoKTsgKytpKSB7CisgICAg
ICAgIGF1dG8gZmlsZW5hbWUgPSBmaWxlbmFtZXMtPmdldChpKS0+YXNTdHJpbmcoKTsKKyAgICAg
ICAgaWYgKCFmaWxlbmFtZSkKICAgICAgICAgICAgIFNZTkNfRkFJTF9XSVRIX1BSRURFRklORURf
RVJST1JfQU5EX0RFVEFJTFMoSW50ZXJuYWxFcnJvciwgIlRoZSBwYXJhbWV0ZXIgJ2ZpbGVuYW1l
cycgY29udGFpbnMgYSBub24tc3RyaW5nIHZhbHVlLiIpOwogCiAgICAgICAgIGlmICghZmlsZUNv
bnRlbnRzKSB7CkBAIC0xMjI3LDggKzEyMTMsOCBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9u
OjpzZXRGaWxlc1RvU2VsZWN0Rm9yRmlsZVVwbG9hZChFcnJvclN0cmluZyYgZXJyb3JTdHJpbgog
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAgICAgICBTdHJpbmcgZmlsZURh
dGE7Ci0gICAgICAgIGlmICghZmlsZUNvbnRlbnRzLT5nZXQoaSktPmFzU3RyaW5nKGZpbGVEYXRh
KSkKKyAgICAgICAgYXV0byBmaWxlRGF0YSA9IGZpbGVDb250ZW50cy0+Z2V0KGkpLT5hc1N0cmlu
ZygpOworICAgICAgICBpZiAoIWZpbGVEYXRhKQogICAgICAgICAgICAgU1lOQ19GQUlMX1dJVEhf
UFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhJbnRlcm5hbEVycm9yLCAiVGhlIHBhcmFtZXRl
ciAnZmlsZUNvbnRlbnRzJyBjb250YWlucyBhIG5vbi1zdHJpbmcgdmFsdWUuIik7CiAKICAgICAg
ICAgT3B0aW9uYWw8U3RyaW5nPiBsb2NhbEZpbGVQYXRoID0gcGxhdGZvcm1HZW5lcmF0ZUxvY2Fs
RmlsZVBhdGhGb3JSZW1vdGVGaWxlKGZpbGVuYW1lLCBmaWxlRGF0YSk7CkBAIC0xMjM5LDkgKzEy
MjUsMTEgQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6c2V0RmlsZXNUb1NlbGVjdEZvckZp
bGVVcGxvYWQoRXJyb3JTdHJpbmcmIGVycm9yU3RyaW4KICAgICB9CiAKICAgICBtX2ZpbGVzVG9T
ZWxlY3RGb3JGaWxlVXBsb2FkLnN3YXAobmV3RmlsZUxpc3QpOworCisgICAgcmV0dXJuIHsgfTsK
IH0KIAotdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6c2V0RmlsZXNGb3JJbnB1dEZpbGVVcGxv
YWQoY29uc3QgU3RyaW5nJiBicm93c2luZ0NvbnRleHRIYW5kbGUsIGNvbnN0IFN0cmluZyYgZnJh
bWVIYW5kbGUsIGNvbnN0IFN0cmluZyYgbm9kZUhhbmRsZSwgY29uc3QgSlNPTjo6QXJyYXkmIGZp
bGVuYW1lcywgUmVmPFNldEZpbGVzRm9ySW5wdXRGaWxlVXBsb2FkQ2FsbGJhY2s+JiYgY2FsbGJh
Y2spCit2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpzZXRGaWxlc0ZvcklucHV0RmlsZVVwbG9h
ZChjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRI
YW5kbGUmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSwgY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6
QXV0b21hdGlvbjo6RnJhbWVIYW5kbGUmIGZyYW1lSGFuZGxlLCBjb25zdCBJbnNwZWN0b3I6OlBy
b3RvY29sOjpBdXRvbWF0aW9uOjpOb2RlSGFuZGxlJiBub2RlSGFuZGxlLCBSZWY8SlNPTjo6QXJy
YXk+JiYgZmlsZW5hbWVzLCBSZWY8U2V0RmlsZXNGb3JJbnB1dEZpbGVVcGxvYWRDYWxsYmFjaz4m
JiBjYWxsYmFjaykKIHsKICAgICBXZWJQYWdlUHJveHkqIHBhZ2UgPSB3ZWJQYWdlUHJveHlGb3JI
YW5kbGUoYnJvd3NpbmdDb250ZXh0SGFuZGxlKTsKICAgICBpZiAoIXBhZ2UpCkBAIC0xMjUzLDEw
ICsxMjQxLDEwIEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OnNldEZpbGVzRm9ySW5wdXRG
aWxlVXBsb2FkKGNvbnN0IFN0cmluZyYgYnJvd3NpbmdDb250CiAgICAgICAgIEFTWU5DX0ZBSUxf
V0lUSF9QUkVERUZJTkVEX0VSUk9SKEZyYW1lTm90Rm91bmQpOwogCiAgICAgVmVjdG9yPFN0cmlu
Zz4gbmV3RmlsZUxpc3Q7Ci0gICAgbmV3RmlsZUxpc3QucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShm
aWxlbmFtZXMubGVuZ3RoKCkpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZmlsZW5hbWVz
Lmxlbmd0aCgpOyArK2kpIHsKLSAgICAgICAgU3RyaW5nIGZpbGVuYW1lOwotICAgICAgICBpZiAo
IWZpbGVuYW1lcy5nZXQoaSktPmFzU3RyaW5nKGZpbGVuYW1lKSkKKyAgICBuZXdGaWxlTGlzdC5y
ZXNlcnZlSW5pdGlhbENhcGFjaXR5KGZpbGVuYW1lcy0+bGVuZ3RoKCkpOworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgZmlsZW5hbWVzLT5sZW5ndGgoKTsgKytpKSB7CisgICAgICAgIGF1dG8g
ZmlsZW5hbWUgPSBmaWxlbmFtZXMtPmdldChpKS0+YXNTdHJpbmcoKTsKKyAgICAgICAgaWYgKCFm
aWxlbmFtZSkKICAgICAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FO
RF9ERVRBSUxTKEludGVybmFsRXJyb3IsICJUaGUgcGFyYW1ldGVyICdmaWxlbmFtZXMnIGNvbnRh
aW5zIGEgbm9uLXN0cmluZyB2YWx1ZS4iKTsKIAogICAgICAgICBuZXdGaWxlTGlzdC5hcHBlbmQo
ZmlsZW5hbWUpOwpAQCAtMTI5OSw3ICsxMjg3LDcgQEAgc3RhdGljIFJlZjxKU09OOjpBcnJheU9m
PEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkNvb2tpZT4+IGJ1aWxkQXJyYXlGb3IK
ICAgICByZXR1cm4gY29va2llczsKIH0KIAotdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6Z2V0
QWxsQ29va2llcyhjb25zdCBTdHJpbmcmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSwgUmVmPEdldEFs
bENvb2tpZXNDYWxsYmFjaz4mJiBjYWxsYmFjaykKK3ZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246
OmdldEFsbENvb2tpZXMoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJv
d3NpbmdDb250ZXh0SGFuZGxlJiBicm93c2luZ0NvbnRleHRIYW5kbGUsIFJlZjxHZXRBbGxDb29r
aWVzQ2FsbGJhY2s+JiYgY2FsbGJhY2spCiB7CiAgICAgV2ViUGFnZVByb3h5KiBwYWdlID0gd2Vi
UGFnZVByb3h5Rm9ySGFuZGxlKGJyb3dzaW5nQ29udGV4dEhhbmRsZSk7CiAgICAgaWYgKCFwYWdl
KQpAQCAtMTMxNyw3ICsxMzA1LDcgQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6Z2V0QWxs
Q29va2llcyhjb25zdCBTdHJpbmcmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSwgUmUKICAgICBwYWdl
LT5wcm9jZXNzKCkuc2VuZFdpdGhBc3luY1JlcGx5KE1lc3NhZ2VzOjpXZWJBdXRvbWF0aW9uU2Vz
c2lvblByb3h5OjpHZXRDb29raWVzRm9yRnJhbWUocGFnZS0+d2ViUGFnZUlEKCksIFdURjo6bnVs
bG9wdCksIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKIH0KIAotdm9pZCBXZWJBdXRvbWF0
aW9uU2Vzc2lvbjo6ZGVsZXRlU2luZ2xlQ29va2llKGNvbnN0IFN0cmluZyYgYnJvd3NpbmdDb250
ZXh0SGFuZGxlLCBjb25zdCBTdHJpbmcmIGNvb2tpZU5hbWUsIFJlZjxEZWxldGVTaW5nbGVDb29r
aWVDYWxsYmFjaz4mJiBjYWxsYmFjaykKK3ZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OmRlbGV0
ZVNpbmdsZUNvb2tpZShjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93
c2luZ0NvbnRleHRIYW5kbGUmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSwgY29uc3QgU3RyaW5nJiBj
b29raWVOYW1lLCBSZWY8RGVsZXRlU2luZ2xlQ29va2llQ2FsbGJhY2s+JiYgY2FsbGJhY2spCiB7
CiAgICAgV2ViUGFnZVByb3h5KiBwYWdlID0gd2ViUGFnZVByb3h5Rm9ySGFuZGxlKGJyb3dzaW5n
Q29udGV4dEhhbmRsZSk7CiAgICAgaWYgKCFwYWdlKQpAQCAtMTM0Nyw3ICsxMzM1LDcgQEAgc3Rh
dGljIFN0cmluZyBkb21haW5CeUFkZGluZ0RvdFByZWZpeElmTmVlZGVkKFN0cmluZyBkb21haW4p
CiAgICAgcmV0dXJuIGRvbWFpbjsKIH0KICAgICAKLXZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246
OmFkZFNpbmdsZUNvb2tpZShjb25zdCBTdHJpbmcmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSwgY29u
c3QgSlNPTjo6T2JqZWN0JiBjb29raWVPYmplY3QsIFJlZjxBZGRTaW5nbGVDb29raWVDYWxsYmFj
az4mJiBjYWxsYmFjaykKK3ZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OmFkZFNpbmdsZUNvb2tp
ZShjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRI
YW5kbGUmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSwgUmVmPEpTT046Ok9iamVjdD4mJiBjb29raWVP
YmplY3QsIFJlZjxBZGRTaW5nbGVDb29raWVDYWxsYmFjaz4mJiBjYWxsYmFjaykKIHsKICAgICBX
ZWJQYWdlUHJveHkqIHBhZ2UgPSB3ZWJQYWdlUHJveHlGb3JIYW5kbGUoYnJvd3NpbmdDb250ZXh0
SGFuZGxlKTsKICAgICBpZiAoIXBhZ2UpCkBAIC0xMzU4LDE0ICsxMzQ2LDE2IEBAIHZvaWQgV2Vi
QXV0b21hdGlvblNlc3Npb246OmFkZFNpbmdsZUNvb2tpZShjb25zdCBTdHJpbmcmIGJyb3dzaW5n
Q29udGV4dEhhbmRsZSwKIAogICAgIFdlYkNvcmU6OkNvb2tpZSBjb29raWU7CiAKLSAgICBpZiAo
IWNvb2tpZU9iamVjdC5nZXRTdHJpbmcoIm5hbWUiX3MsIGNvb2tpZS5uYW1lKSkKKyAgICBjb29r
aWUubmFtZSA9IGNvb2tpZU9iamVjdC0+Z2V0U3RyaW5nKCJuYW1lIl9zKTsKKyAgICBpZiAoIWNv
b2tpZS5uYW1lKQogICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUl9BTkRf
REVUQUlMUyhNaXNzaW5nUGFyYW1ldGVyLCAiVGhlIHBhcmFtZXRlciAnbmFtZScgd2FzIG5vdCBm
b3VuZC4iKTsKIAotICAgIGlmICghY29va2llT2JqZWN0LmdldFN0cmluZygidmFsdWUiX3MsIGNv
b2tpZS52YWx1ZSkpCisgICAgY29va2llLnZhbHVlID0gY29va2llT2JqZWN0LT5nZXRTdHJpbmco
InZhbHVlIl9zKTsKKyAgICBpZiAoIWNvb2tpZS52YWx1ZSkKICAgICAgICAgQVNZTkNfRkFJTF9X
SVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoTWlzc2luZ1BhcmFtZXRlciwgIlRoZSBw
YXJhbWV0ZXIgJ3ZhbHVlJyB3YXMgbm90IGZvdW5kLiIpOwogCi0gICAgU3RyaW5nIGRvbWFpbjsK
LSAgICBpZiAoIWNvb2tpZU9iamVjdC5nZXRTdHJpbmcoImRvbWFpbiJfcywgZG9tYWluKSkKKyAg
ICBhdXRvIGRvbWFpbiA9IGNvb2tpZU9iamVjdC0+Z2V0U3RyaW5nKCJkb21haW4iX3MpOworICAg
IGlmICghZG9tYWluKQogICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUl9B
TkRfREVUQUlMUyhNaXNzaW5nUGFyYW1ldGVyLCAiVGhlIHBhcmFtZXRlciAnZG9tYWluJyB3YXMg
bm90IGZvdW5kLiIpOwogCiAgICAgLy8gSW5oZXJpdCB0aGUgZG9tYWluL2hvc3QgZnJvbSB0aGUg
bWFpbiBmcmFtZSdzIFVSTCBpZiBpdCBpcyBub3QgZXhwbGljaXRseSBzZXQuCkBAIC0xMzc0LDMx
ICsxMzY0LDQxIEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OmFkZFNpbmdsZUNvb2tpZShj
b25zdCBTdHJpbmcmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSwKICAgICBlbHNlCiAgICAgICAgIGNv
b2tpZS5kb21haW4gPSBkb21haW5CeUFkZGluZ0RvdFByZWZpeElmTmVlZGVkKGRvbWFpbik7CiAK
LSAgICBpZiAoIWNvb2tpZU9iamVjdC5nZXRTdHJpbmcoInBhdGgiX3MsIGNvb2tpZS5wYXRoKSkK
KyAgICBjb29raWUucGF0aCA9IGNvb2tpZU9iamVjdC0+Z2V0U3RyaW5nKCJwYXRoIl9zKTsKKyAg
ICBpZiAoIWNvb2tpZS5wYXRoKQogICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9F
UlJPUl9BTkRfREVUQUlMUyhNaXNzaW5nUGFyYW1ldGVyLCAiVGhlIHBhcmFtZXRlciAncGF0aCcg
d2FzIG5vdCBmb3VuZC4iKTsKIAotICAgIGRvdWJsZSBleHBpcmVzOwotICAgIGlmICghY29va2ll
T2JqZWN0LmdldERvdWJsZSgiZXhwaXJlcyJfcywgZXhwaXJlcykpCisgICAgYXV0byBleHBpcmVz
ID0gY29va2llT2JqZWN0LT5nZXREb3VibGUoImV4cGlyZXMiX3MpOworICAgIGlmICghZXhwaXJl
cykKICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMo
TWlzc2luZ1BhcmFtZXRlciwgIlRoZSBwYXJhbWV0ZXIgJ2V4cGlyZXMnIHdhcyBub3QgZm91bmQu
Iik7CiAKLSAgICBjb29raWUuZXhwaXJlcyA9IGV4cGlyZXMgKiAxMDAwLjA7CisgICAgY29va2ll
LmV4cGlyZXMgPSAqZXhwaXJlcyAqIDEwMDAuMDsKIAotICAgIGlmICghY29va2llT2JqZWN0Lmdl
dEJvb2xlYW4oInNlY3VyZSJfcywgY29va2llLnNlY3VyZSkpCisgICAgYXV0byBzZWN1cmUgPSBj
b29raWVPYmplY3QtPmdldEJvb2xlYW4oInNlY3VyZSJfcyk7CisgICAgaWYgKCFzZWN1cmUpCiAg
ICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxTKE1pc3Np
bmdQYXJhbWV0ZXIsICJUaGUgcGFyYW1ldGVyICdzZWN1cmUnIHdhcyBub3QgZm91bmQuIik7CiAK
LSAgICBpZiAoIWNvb2tpZU9iamVjdC5nZXRCb29sZWFuKCJzZXNzaW9uIl9zLCBjb29raWUuc2Vz
c2lvbikpCisgICAgY29va2llLnNlY3VyZSA9ICpzZWN1cmU7CisKKyAgICBhdXRvIHNlc3Npb24g
PSBjb29raWVPYmplY3QtPmdldEJvb2xlYW4oInNlc3Npb24iX3MpOworICAgIGlmICghc2Vzc2lv
bikKICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMo
TWlzc2luZ1BhcmFtZXRlciwgIlRoZSBwYXJhbWV0ZXIgJ3Nlc3Npb24nIHdhcyBub3QgZm91bmQu
Iik7CiAKLSAgICBpZiAoIWNvb2tpZU9iamVjdC5nZXRCb29sZWFuKCJodHRwT25seSJfcywgY29v
a2llLmh0dHBPbmx5KSkKKyAgICBjb29raWUuc2Vzc2lvbiA9ICpzZXNzaW9uOworCisgICAgYXV0
byBodHRwT25seSA9IGNvb2tpZU9iamVjdC0+Z2V0Qm9vbGVhbigiaHR0cE9ubHkiX3MpOworICAg
IGlmICghaHR0cE9ubHkpCiAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9S
X0FORF9ERVRBSUxTKE1pc3NpbmdQYXJhbWV0ZXIsICJUaGUgcGFyYW1ldGVyICdodHRwT25seScg
d2FzIG5vdCBmb3VuZC4iKTsKIAorICAgIGNvb2tpZS5odHRwT25seSA9ICpodHRwT25seTsKKwog
ICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eSogY29va2llTWFuYWdlciA9IG1fcHJvY2Vzc1Bvb2wt
PnN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpOwogICAgIGNvb2tpZU1hbmFnZXIt
PnNldENvb2tpZXMocGFnZS0+d2Vic2l0ZURhdGFTdG9yZSgpLnNlc3Npb25JRCgpLCB7IGNvb2tp
ZSB9LCBbY2FsbGJhY2tdKCkgewogICAgICAgICBjYWxsYmFjay0+c2VuZFN1Y2Nlc3MoKTsKICAg
ICB9KTsKIH0KIAotdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6ZGVsZXRlQWxsQ29va2llcyhF
cnJvclN0cmluZyYgZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmluZyYgYnJvd3NpbmdDb250ZXh0SGFu
ZGxlKQorSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBXZWJBdXRvbWF0
aW9uU2Vzc2lvbjo6ZGVsZXRlQWxsQ29va2llcyhjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpB
dXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRIYW5kbGUmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSkK
IHsKICAgICBXZWJQYWdlUHJveHkqIHBhZ2UgPSB3ZWJQYWdlUHJveHlGb3JIYW5kbGUoYnJvd3Np
bmdDb250ZXh0SGFuZGxlKTsKICAgICBpZiAoIXBhZ2UpCkBAIC0xNDExLDkgKzE0MTEsMTEgQEAg
dm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6ZGVsZXRlQWxsQ29va2llcyhFcnJvclN0cmluZyYg
ZXJyb3JTdHJpbmcsIGNvbnN0IFN0cmkKIAogICAgIFdlYkNvb2tpZU1hbmFnZXJQcm94eSogY29v
a2llTWFuYWdlciA9IG1fcHJvY2Vzc1Bvb2wtPnN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclBy
b3h5PigpOwogICAgIGNvb2tpZU1hbmFnZXItPmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZXMocGFn
ZS0+d2Vic2l0ZURhdGFTdG9yZSgpLnNlc3Npb25JRCgpLCB7IGhvc3QsIGRvbWFpbkJ5QWRkaW5n
RG90UHJlZml4SWZOZWVkZWQoaG9zdCkgfSk7CisKKyAgICByZXR1cm4geyB9OwogfQogCi12b2lk
IFdlYkF1dG9tYXRpb25TZXNzaW9uOjpnZXRTZXNzaW9uUGVybWlzc2lvbnMoRXJyb3JTdHJpbmcm
LCBSZWZQdHI8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpT
ZXNzaW9uUGVybWlzc2lvbkRhdGE+PiYgb3V0X3Blcm1pc3Npb25zKQorSW5zcGVjdG9yOjpQcm90
b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29s
OjpBdXRvbWF0aW9uOjpTZXNzaW9uUGVybWlzc2lvbkRhdGE+Pj4gV2ViQXV0b21hdGlvblNlc3Np
b246OmdldFNlc3Npb25QZXJtaXNzaW9ucygpCiB7CiAgICAgYXV0byBwZXJtaXNzaW9uc09iamVj
dEFycmF5ID0gSlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpT
ZXNzaW9uUGVybWlzc2lvbkRhdGE+OjpjcmVhdGUoKTsKICAgICBhdXRvIGdldFVzZXJNZWRpYVBl
cm1pc3Npb25PYmplY3QgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpTZXNzaW9u
UGVybWlzc2lvbkRhdGE6OmNyZWF0ZSgpCkBAIC0xNDIyLDM0ICsxNDI0LDM2IEBAIHZvaWQgV2Vi
QXV0b21hdGlvblNlc3Npb246OmdldFNlc3Npb25QZXJtaXNzaW9ucyhFcnJvclN0cmluZyYsIFJl
ZlB0cjxKU09OOjpBcnJhCiAgICAgICAgIC5yZWxlYXNlKCk7CiAKICAgICBwZXJtaXNzaW9uc09i
amVjdEFycmF5LT5hZGRJdGVtKFdURk1vdmUoZ2V0VXNlck1lZGlhUGVybWlzc2lvbk9iamVjdCkp
OwotICAgIG91dF9wZXJtaXNzaW9ucyA9IFdURk1vdmUocGVybWlzc2lvbnNPYmplY3RBcnJheSk7
CisgICAgcmV0dXJuIFdURk1vdmUocGVybWlzc2lvbnNPYmplY3RBcnJheSk7CiB9CiAKLXZvaWQg
V2ViQXV0b21hdGlvblNlc3Npb246OnNldFNlc3Npb25QZXJtaXNzaW9ucyhFcnJvclN0cmluZyYg
ZXJyb3JTdHJpbmcsIGNvbnN0IEpTT046OkFycmF5JiBwZXJtaXNzaW9ucykKK0luc3BlY3Rvcjo6
UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gV2ViQXV0b21hdGlvblNlc3Npb246OnNldFNl
c3Npb25QZXJtaXNzaW9ucyhSZWY8SlNPTjo6QXJyYXk+JiYgcGVybWlzc2lvbnMpCiB7Ci0gICAg
Zm9yIChhdXRvIGl0ID0gcGVybWlzc2lvbnMuYmVnaW4oKTsgaXQgIT0gcGVybWlzc2lvbnMuZW5k
KCk7ICsraXQpIHsKLSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gcGVybWlzc2lvbjsKLSAg
ICAgICAgaWYgKCFpdC0+Z2V0KCktPmFzT2JqZWN0KHBlcm1pc3Npb24pKQorICAgIGZvciAoYXV0
byBpdCA9IHBlcm1pc3Npb25zLT5iZWdpbigpOyBpdCAhPSBwZXJtaXNzaW9ucy0+ZW5kKCk7ICsr
aXQpIHsKKyAgICAgICAgYXV0byBwZXJtaXNzaW9uID0gaXQtPmdldCgpLmFzT2JqZWN0KCk7Cisg
ICAgICAgIGlmICghcGVybWlzc2lvbikKICAgICAgICAgICAgIFNZTkNfRkFJTF9XSVRIX1BSRURF
RklORURfRVJST1JfQU5EX0RFVEFJTFMoSW52YWxpZFBhcmFtZXRlciwgIlRoZSBwYXJhbWV0ZXIg
J3Blcm1pc3Npb25zJyBpcyBpbnZhbGlkLiIpOwogCi0gICAgICAgIFN0cmluZyBwZXJtaXNzaW9u
TmFtZTsKLSAgICAgICAgaWYgKCFwZXJtaXNzaW9uLT5nZXRTdHJpbmcoInBlcm1pc3Npb24iX3Ms
IHBlcm1pc3Npb25OYW1lKSkKKyAgICAgICAgYXV0byBwZXJtaXNzaW9uTmFtZSA9IHBlcm1pc3Np
b24tPmdldFN0cmluZygicGVybWlzc2lvbiJfcyk7CisgICAgICAgIGlmICghcGVybWlzc2lvbk5h
bWUpCiAgICAgICAgICAgICBTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRB
SUxTKEludmFsaWRQYXJhbWV0ZXIsICJUaGUgcGFyYW1ldGVyICdwZXJtaXNzaW9uJyBpcyBtaXNz
aW5nIG9yIGludmFsaWQuIik7CiAKICAgICAgICAgYXV0byBwYXJzZWRQZXJtaXNzaW9uTmFtZSA9
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb25IZWxwZXJzOjpwYXJzZUVudW1WYWx1ZUZy
b21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6U2Vzc2lvblBlcm1pc3Np
b24+KHBlcm1pc3Npb25OYW1lKTsKICAgICAgICAgaWYgKCFwYXJzZWRQZXJtaXNzaW9uTmFtZSkK
ICAgICAgICAgICAgIFNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMo
SW52YWxpZFBhcmFtZXRlciwgIlRoZSBwYXJhbWV0ZXIgJ3Blcm1pc3Npb24nIGhhcyBhbiB1bmtu
b3duIHZhbHVlLiIpOwogCi0gICAgICAgIGJvb2wgcGVybWlzc2lvblZhbHVlOwotICAgICAgICBp
ZiAoIXBlcm1pc3Npb24tPmdldEJvb2xlYW4oInZhbHVlIl9zLCBwZXJtaXNzaW9uVmFsdWUpKQor
ICAgICAgICBhdXRvIHBlcm1pc3Npb25WYWx1ZSA9IHBlcm1pc3Npb24tPmdldEJvb2xlYW4oInZh
bHVlIl9zKTsKKyAgICAgICAgaWYgKCFwZXJtaXNzaW9uVmFsdWUpCiAgICAgICAgICAgICBTWU5D
X0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxTKEludmFsaWRQYXJhbWV0ZXIs
ICJUaGUgcGFyYW1ldGVyICd2YWx1ZScgaXMgbWlzc2luZyBvciBpbnZhbGlkLiIpOwogCiAgICAg
ICAgIHN3aXRjaCAocGFyc2VkUGVybWlzc2lvbk5hbWUudmFsdWUoKSkgewogICAgICAgICBjYXNl
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OlNlc3Npb25QZXJtaXNzaW9uOjpHZXRV
c2VyTWVkaWE6Ci0gICAgICAgICAgICBtX3Blcm1pc3Npb25Gb3JHZXRVc2VyTWVkaWEgPSBwZXJt
aXNzaW9uVmFsdWU7CisgICAgICAgICAgICBtX3Blcm1pc3Npb25Gb3JHZXRVc2VyTWVkaWEgPSAq
cGVybWlzc2lvblZhbHVlOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9CisK
KyAgICByZXR1cm4geyB9OwogfQogCiBib29sIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpzaG91bGRB
bGxvd0dldFVzZXJNZWRpYUZvclBhZ2UoY29uc3QgV2ViUGFnZVByb3h5JikgY29uc3QKQEAgLTE0
OTQsNyArMTQ5OCw3IEBAIFNpbXVsYXRlZElucHV0U291cmNlKiBXZWJBdXRvbWF0aW9uU2Vzc2lv
bjo6aW5wdXRTb3VyY2VGb3JUeXBlKFNpbXVsYXRlZElucHV0U291CiB9CiAKIC8vIE1BUks6IFNp
bXVsYXRlZElucHV0RGlzcGF0Y2hlcjo6Q2xpZW50IEFQSQotdm9pZCBXZWJBdXRvbWF0aW9uU2Vz
c2lvbjo6dmlld3BvcnRJblZpZXdDZW50ZXJQb2ludE9mRWxlbWVudChXZWJQYWdlUHJveHkmIHBh
Z2UsIE9wdGlvbmFsPEZyYW1lSWRlbnRpZmllcj4gZnJhbWVJRCwgY29uc3QgU3RyaW5nJiBub2Rl
SGFuZGxlLCBGdW5jdGlvbjx2b2lkIChPcHRpb25hbDxXZWJDb3JlOjpJbnRQb2ludD4sIE9wdGlv
bmFsPEF1dG9tYXRpb25Db21tYW5kRXJyb3I+KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3ZvaWQg
V2ViQXV0b21hdGlvblNlc3Npb246OnZpZXdwb3J0SW5WaWV3Q2VudGVyUG9pbnRPZkVsZW1lbnQo
V2ViUGFnZVByb3h5JiBwYWdlLCBPcHRpb25hbDxGcmFtZUlkZW50aWZpZXI+IGZyYW1lSUQsIGNv
bnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246Ok5vZGVIYW5kbGUmIG5vZGVIYW5k
bGUsIEZ1bmN0aW9uPHZvaWQoT3B0aW9uYWw8V2ViQ29yZTo6SW50UG9pbnQ+LCBPcHRpb25hbDxB
dXRvbWF0aW9uQ29tbWFuZEVycm9yPik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgV1RG
OjpDb21wbGV0aW9uSGFuZGxlcjx2b2lkKE9wdGlvbmFsPFN0cmluZz4sIFdlYkNvcmU6OkludFJl
Y3QsIE9wdGlvbmFsPFdlYkNvcmU6OkludFBvaW50PiwgYm9vbCk+IGRpZENvbXB1dGVFbGVtZW50
TGF5b3V0SGFuZGxlciA9IFtjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpXShPcHRpb25hbDxTdHJpbmc+IGVycm9yVHlwZSwgV2ViQ29yZTo6SW50UmVjdCwgT3B0
aW9uYWw8V2ViQ29yZTo6SW50UG9pbnQ+IGluVmlld0NlbnRlclBvaW50LCBib29sKSBtdXRhYmxl
IHsKICAgICAgICAgaWYgKGVycm9yVHlwZSkgewpAQCAtMTYzNSw3ICsxNjM5LDcgQEAgc3RhdGlj
IFdlYkV2ZW50OjpNb2RpZmllciBwcm90b2NvbE1vZGlmaWVyVG9XZWJFdmVudE1vZGlmaWVyKElu
c3BlY3Rvcjo6UHJvdG9jb2wKIH0KICNlbmRpZiAvLyBFTkFCTEUoV0VCRFJJVkVSX01PVVNFX0lO
VEVSQUNUSU9OUykKIAotdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6cGVyZm9ybU1vdXNlSW50
ZXJhY3Rpb24oY29uc3QgU3RyaW5nJiBoYW5kbGUsIGNvbnN0IEpTT046Ok9iamVjdCYgcmVxdWVz
dGVkUG9zaXRpb25PYmplY3QsIGNvbnN0IFN0cmluZyYgbW91c2VCdXR0b25TdHJpbmcsIGNvbnN0
IFN0cmluZyYgbW91c2VJbnRlcmFjdGlvblN0cmluZywgY29uc3QgSlNPTjo6QXJyYXkmIGtleU1v
ZGlmaWVyU3RyaW5ncywgUmVmPFBlcmZvcm1Nb3VzZUludGVyYWN0aW9uQ2FsbGJhY2s+JiYgY2Fs
bGJhY2spCit2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpwZXJmb3JtTW91c2VJbnRlcmFjdGlv
bihjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRI
YW5kbGUmIGhhbmRsZSwgUmVmPEpTT046Ok9iamVjdD4mJiByZXF1ZXN0ZWRQb3NpdGlvbiwgSW5z
cGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6TW91c2VCdXR0b24gbW91c2VCdXR0b24sIElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246Ok1vdXNlSW50ZXJhY3Rpb24gbW91c2VJbnRl
cmFjdGlvbiwgUmVmPEpTT046OkFycmF5PiYmIGtleU1vZGlmaWVyU3RyaW5ncywgUmVmPFBlcmZv
cm1Nb3VzZUludGVyYWN0aW9uQ2FsbGJhY2s+JiYgY2FsbGJhY2spCiB7CiAjaWYgIUVOQUJMRShX
RUJEUklWRVJfTU9VU0VfSU5URVJBQ1RJT05TKQogICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJ
TkVEX0VSUk9SKE5vdEltcGxlbWVudGVkKTsKQEAgLTE2NDQsNDggKzE2NDgsNDQgQEAgdm9pZCBX
ZWJBdXRvbWF0aW9uU2Vzc2lvbjo6cGVyZm9ybU1vdXNlSW50ZXJhY3Rpb24oY29uc3QgU3RyaW5n
JiBoYW5kbGUsIGNvbnN0IEoKICAgICBpZiAoIXBhZ2UpCiAgICAgICAgIEFTWU5DX0ZBSUxfV0lU
SF9QUkVERUZJTkVEX0VSUk9SKFdpbmRvd05vdEZvdW5kKTsKIAotICAgIGZsb2F0IHg7Ci0gICAg
aWYgKCFyZXF1ZXN0ZWRQb3NpdGlvbk9iamVjdC5nZXREb3VibGUoIngiX3MsIHgpKQorICAgIGF1
dG8geCA9IHJlcXVlc3RlZFBvc2l0aW9uLT5nZXREb3VibGUoIngiX3MpOworICAgIGlmICgheCkK
ICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoTWlz
c2luZ1BhcmFtZXRlciwgIlRoZSBwYXJhbWV0ZXIgJ3gnIHdhcyBub3QgZm91bmQuIik7CiAKLSAg
ICBmbG9hdCB5OwotICAgIGlmICghcmVxdWVzdGVkUG9zaXRpb25PYmplY3QuZ2V0RG91YmxlKCJ5
Il9zLCB5KSkKKyAgICBhdXRvIGZsb2F0WCA9IHN0YXRpY19jYXN0PGZsb2F0PigqeCk7CisKKyAg
ICBhdXRvIHkgPSByZXF1ZXN0ZWRQb3NpdGlvbi0+Z2V0RG91YmxlKCJ5Il9zKTsKKyAgICBpZiAo
IXkpCiAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxT
KE1pc3NpbmdQYXJhbWV0ZXIsICJUaGUgcGFyYW1ldGVyICd5JyB3YXMgbm90IGZvdW5kLiIpOwog
CisgICAgYXV0byBmbG9hdFkgPSBzdGF0aWNfY2FzdDxmbG9hdD4oKnkpOworCiAgICAgT3B0aW9u
U2V0PFdlYkV2ZW50OjpNb2RpZmllcj4ga2V5TW9kaWZpZXJzOwotICAgIGZvciAoYXV0byBpdCA9
IGtleU1vZGlmaWVyU3RyaW5ncy5iZWdpbigpOyBpdCAhPSBrZXlNb2RpZmllclN0cmluZ3MuZW5k
KCk7ICsraXQpIHsKLSAgICAgICAgU3RyaW5nIG1vZGlmaWVyU3RyaW5nOwotICAgICAgICBpZiAo
IWl0LT5nZXQoKS0+YXNTdHJpbmcobW9kaWZpZXJTdHJpbmcpKQorICAgIGZvciAoYXV0byBpdCA9
IGtleU1vZGlmaWVyU3RyaW5ncy0+YmVnaW4oKTsgaXQgIT0ga2V5TW9kaWZpZXJTdHJpbmdzLT5l
bmQoKTsgKytpdCkgeworICAgICAgICBhdXRvIG1vZGlmaWVyU3RyaW5nID0gaXQtPmdldCgpLmFz
U3RyaW5nKCk7CisgICAgICAgIGlmICghbW9kaWZpZXJTdHJpbmcpCiAgICAgICAgICAgICBBU1lO
Q19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhJbnZhbGlkUGFyYW1ldGVy
LCAiVGhlIHBhcmFtZXRlciAnbW9kaWZpZXJzJyBpcyBpbnZhbGlkLiIpOwogCiAgICAgICAgIGF1
dG8gcGFyc2VkTW9kaWZpZXIgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uSGVscGVy
czo6cGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRp
b246OktleU1vZGlmaWVyPihtb2RpZmllclN0cmluZyk7CiAgICAgICAgIGlmICghcGFyc2VkTW9k
aWZpZXIpCiAgICAgICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUl9BTkRf
REVUQUlMUyhJbnZhbGlkUGFyYW1ldGVyLCAiQSBtb2RpZmllciBpbiB0aGUgJ21vZGlmaWVycycg
YXJyYXkgaXMgaW52YWxpZC4iKTsKKwogICAgICAgICBrZXlNb2RpZmllcnMuYWRkKHByb3RvY29s
TW9kaWZpZXJUb1dlYkV2ZW50TW9kaWZpZXIocGFyc2VkTW9kaWZpZXIudmFsdWUoKSkpOwogICAg
IH0KIAotICAgIHBhZ2UtPmdldFdpbmRvd0ZyYW1lV2l0aENhbGxiYWNrKFt0aGlzLCBwcm90ZWN0
ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayksIHBh
Z2UgPSBtYWtlUmVmKCpwYWdlKSwgeCwgeSwgbW91c2VJbnRlcmFjdGlvblN0cmluZywgbW91c2VC
dXR0b25TdHJpbmcsIGtleU1vZGlmaWVyc10oV2ViQ29yZTo6RmxvYXRSZWN0IHdpbmRvd0ZyYW1l
KSBtdXRhYmxlIHsKKyAgICBwYWdlLT5nZXRXaW5kb3dGcmFtZVdpdGhDYWxsYmFjayhbdGhpcywg
cHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBjYWxsYmFjayA9IFdURk1vdmUoY2FsbGJh
Y2spLCBwYWdlID0gbWFrZVJlZigqcGFnZSksIGZsb2F0WCwgZmxvYXRZLCBtb3VzZUludGVyYWN0
aW9uLCBtb3VzZUJ1dHRvbiwga2V5TW9kaWZpZXJzXShXZWJDb3JlOjpGbG9hdFJlY3Qgd2luZG93
RnJhbWUpIG11dGFibGUgeworICAgICAgICBmbG9hdFggPSBzdGQ6Om1pbihzdGQ6Om1heCgwLjBm
LCBmbG9hdFgpLCB3aW5kb3dGcmFtZS5zaXplKCkud2lkdGgoKSk7CisgICAgICAgIGZsb2F0WSA9
IHN0ZDo6bWluKHN0ZDo6bWF4KDAuMGYsIGZsb2F0WSksIHdpbmRvd0ZyYW1lLnNpemUoKS5oZWln
aHQoKSk7CiAKLSAgICAgICAgeCA9IHN0ZDo6bWluKHN0ZDo6bWF4KDAuMGYsIHgpLCB3aW5kb3dG
cmFtZS5zaXplKCkud2lkdGgoKSk7Ci0gICAgICAgIHkgPSBzdGQ6Om1pbihzdGQ6Om1heCgwLjBm
LCB5KSwgd2luZG93RnJhbWUuc2l6ZSgpLmhlaWdodCgpKTsKKyAgICAgICAgV2ViQ29yZTo6SW50
UG9pbnQgbG9jYXRpb25JblZpZXdwb3J0ID0gV2ViQ29yZTo6SW50UG9pbnQoc3RhdGljX2Nhc3Q8
aW50PihmbG9hdFgpLCBzdGF0aWNfY2FzdDxpbnQ+KGZsb2F0WSkpOwogCi0gICAgICAgIFdlYkNv
cmU6OkludFBvaW50IGxvY2F0aW9uSW5WaWV3cG9ydCA9IFdlYkNvcmU6OkludFBvaW50KHN0YXRp
Y19jYXN0PGludD4oeCksIHN0YXRpY19jYXN0PGludD4oeSkpOwotCi0gICAgICAgIGF1dG8gcGFy
c2VkSW50ZXJhY3Rpb24gPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uSGVscGVyczo6
cGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246
Ok1vdXNlSW50ZXJhY3Rpb24+KG1vdXNlSW50ZXJhY3Rpb25TdHJpbmcpOwotICAgICAgICBpZiAo
IXBhcnNlZEludGVyYWN0aW9uKQotICAgICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklO
RURfRVJST1JfQU5EX0RFVEFJTFMoSW52YWxpZFBhcmFtZXRlciwgIlRoZSBwYXJhbWV0ZXIgJ2lu
dGVyYWN0aW9uJyBpcyBpbnZhbGlkLiIpOwotCi0gICAgICAgIGF1dG8gcGFyc2VkQnV0dG9uID0g
SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbkhlbHBlcnM6OnBhcnNlRW51bVZhbHVlRnJv
bVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpNb3VzZUJ1dHRvbj4obW91
c2VCdXR0b25TdHJpbmcpOwotICAgICAgICBpZiAoIXBhcnNlZEJ1dHRvbikKLSAgICAgICAgICAg
IEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxTKEludmFsaWRQYXJh
bWV0ZXIsICJUaGUgcGFyYW1ldGVyICdidXR0b24nIGlzIGludmFsaWQuIik7Ci0KLSAgICAgICAg
YXV0byBtb3VzZUV2ZW50c0ZsdXNoZWRDYWxsYmFjayA9IFtwcm90ZWN0ZWRUaGlzID0gV1RGTW92
ZShwcm90ZWN0ZWRUaGlzKSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgcGFnZSwgeCwg
eV0oT3B0aW9uYWw8QXV0b21hdGlvbkNvbW1hbmRFcnJvcj4gZXJyb3IpIHsKKyAgICAgICAgYXV0
byBtb3VzZUV2ZW50c0ZsdXNoZWRDYWxsYmFjayA9IFtwcm90ZWN0ZWRUaGlzID0gV1RGTW92ZShw
cm90ZWN0ZWRUaGlzKSwgY2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKSwgcGFnZSwgZmxvYXRY
LCBmbG9hdFldKE9wdGlvbmFsPEF1dG9tYXRpb25Db21tYW5kRXJyb3I+IGVycm9yKSB7CiAgICAg
ICAgICAgICBpZiAoZXJyb3IpCiAgICAgICAgICAgICAgICAgY2FsbGJhY2stPnNlbmRGYWlsdXJl
KGVycm9yLnZhbHVlKCkudG9Qcm90b2NvbFN0cmluZygpKTsKICAgICAgICAgICAgIGVsc2Ugewog
ICAgICAgICAgICAgICAgIGNhbGxiYWNrLT5zZW5kU3VjY2VzcyhJbnNwZWN0b3I6OlByb3RvY29s
OjpBdXRvbWF0aW9uOjpQb2ludDo6Y3JlYXRlKCkKLSAgICAgICAgICAgICAgICAgICAgLnNldFgo
eCkKLSAgICAgICAgICAgICAgICAgICAgLnNldFkoeSAtIHBhZ2UtPnRvcENvbnRlbnRJbnNldCgp
KQorICAgICAgICAgICAgICAgICAgICAuc2V0WChmbG9hdFgpCisgICAgICAgICAgICAgICAgICAg
IC5zZXRZKGZsb2F0WSAtIHBhZ2UtPnRvcENvbnRlbnRJbnNldCgpKQogICAgICAgICAgICAgICAg
ICAgICAucmVsZWFzZSgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfTsKQEAgLTE2OTUsNyAr
MTY5NSw3IEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OnBlcmZvcm1Nb3VzZUludGVyYWN0
aW9uKGNvbnN0IFN0cmluZyYgaGFuZGxlLCBjb25zdCBKCiAgICAgICAgICAgICBjYWxsYmFja0lu
TWFwKEFVVE9NQVRJT05fQ09NTUFORF9FUlJPUl9XSVRIX05BTUUoVGltZW91dCkpOwogICAgICAg
ICBjYWxsYmFja0luTWFwID0gV1RGTW92ZShtb3VzZUV2ZW50c0ZsdXNoZWRDYWxsYmFjayk7CiAK
LSAgICAgICAgcGxhdGZvcm1TaW11bGF0ZU1vdXNlSW50ZXJhY3Rpb24ocGFnZSwgcGFyc2VkSW50
ZXJhY3Rpb24udmFsdWUoKSwgcGFyc2VkQnV0dG9uLnZhbHVlKCksIGxvY2F0aW9uSW5WaWV3cG9y
dCwga2V5TW9kaWZpZXJzKTsKKyAgICAgICAgcGxhdGZvcm1TaW11bGF0ZU1vdXNlSW50ZXJhY3Rp
b24ocGFnZSwgbW91c2VJbnRlcmFjdGlvbiwgbW91c2VCdXR0b24sIGxvY2F0aW9uSW5WaWV3cG9y
dCwga2V5TW9kaWZpZXJzKTsKIAogICAgICAgICAvLyBJZiB0aGUgZXZlbnQgbG9jYXRpb24gd2Fz
IHByZXZpb3VzbHkgY2xpcHBlZCBhbmQgZG9lcyBub3QgaGl0IHRlc3QgYW55dGhpbmcgaW4gdGhl
IHdpbmRvdywgdGhlbiBpdCB3aWxsIG5vdCBiZSBwcm9jZXNzZWQuCiAgICAgICAgIC8vIEZvciBj
b21wYXRpYmlsaXR5IHdpdGggcHJlLVczQyBkcml2ZXIgaW1wbGVtZW50YXRpb25zLCBkb24ndCBt
YWtlIHRoaXMgYSBoYXJkIGVycm9yOyBqdXN0IGRvIG5vdGhpbmcgc2lsZW50bHkuCkBAIC0xNzA4
LDcgKzE3MDgsNyBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpwZXJmb3JtTW91c2VJbnRl
cmFjdGlvbihjb25zdCBTdHJpbmcmIGhhbmRsZSwgY29uc3QgSgogI2VuZGlmIC8vIEVOQUJMRShX
RUJEUklWRVJfTU9VU0VfSU5URVJBQ1RJT05TKQogfQogCi12b2lkIFdlYkF1dG9tYXRpb25TZXNz
aW9uOjpwZXJmb3JtS2V5Ym9hcmRJbnRlcmFjdGlvbnMoY29uc3QgU3RyaW5nJiBoYW5kbGUsIGNv
bnN0IEpTT046OkFycmF5JiBpbnRlcmFjdGlvbnMsIFJlZjxQZXJmb3JtS2V5Ym9hcmRJbnRlcmFj
dGlvbnNDYWxsYmFjaz4mJiBjYWxsYmFjaykKK3ZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OnBl
cmZvcm1LZXlib2FyZEludGVyYWN0aW9ucyhjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRv
bWF0aW9uOjpCcm93c2luZ0NvbnRleHRIYW5kbGUmIGhhbmRsZSwgUmVmPEpTT046OkFycmF5PiYm
IGludGVyYWN0aW9ucywgUmVmPFBlcmZvcm1LZXlib2FyZEludGVyYWN0aW9uc0NhbGxiYWNrPiYm
IGNhbGxiYWNrKQogewogI2lmICFFTkFCTEUoV0VCRFJJVkVSX0tFWUJPQVJEX0lOVEVSQUNUSU9O
UykKICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUihOb3RJbXBsZW1lbnRlZCk7
CkBAIC0xNzE3LDI4ICsxNzE3LDI3IEBAIHZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OnBlcmZv
cm1LZXlib2FyZEludGVyYWN0aW9ucyhjb25zdCBTdHJpbmcmIGhhbmRsZSwgY29uCiAgICAgaWYg
KCFwYWdlKQogICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUihXaW5kb3dO
b3RGb3VuZCk7CiAKLSAgICBpZiAoIWludGVyYWN0aW9ucy5sZW5ndGgoKSkKKyAgICBpZiAoIWlu
dGVyYWN0aW9ucy0+bGVuZ3RoKCkpCiAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVE
X0VSUk9SX0FORF9ERVRBSUxTKEludmFsaWRQYXJhbWV0ZXIsICJUaGUgcGFyYW1ldGVyICdpbnRl
cmFjdGlvbnMnIHdhcyBub3QgZm91bmQgb3IgZW1wdHkuIik7CiAKICAgICAvLyBWYWxpZGF0ZSBh
bGwgb2YgdGhlIHBhcmFtZXRlcnMgYmVmb3JlIHBlcmZvcm1pbmcgYW55IGludGVyYWN0aW9ucyB3
aXRoIHRoZSBicm93c2luZyBjb250ZXh0IHVuZGVyIHRlc3QuCiAgICAgVmVjdG9yPFdURjo6RnVu
Y3Rpb248dm9pZCgpPj4gYWN0aW9uc1RvUGVyZm9ybTsKLSAgICBhY3Rpb25zVG9QZXJmb3JtLnJl
c2VydmVDYXBhY2l0eShpbnRlcmFjdGlvbnMubGVuZ3RoKCkpOworICAgIGFjdGlvbnNUb1BlcmZv
cm0ucmVzZXJ2ZUNhcGFjaXR5KGludGVyYWN0aW9ucy0+bGVuZ3RoKCkpOwogCi0gICAgZm9yIChj
b25zdCBhdXRvJiBpbnRlcmFjdGlvbiA6IGludGVyYWN0aW9ucykgewotICAgICAgICBSZWZQdHI8
SlNPTjo6T2JqZWN0PiBpbnRlcmFjdGlvbk9iamVjdDsKLSAgICAgICAgaWYgKCFpbnRlcmFjdGlv
bi0+YXNPYmplY3QoaW50ZXJhY3Rpb25PYmplY3QpKQorICAgIGZvciAoY29uc3QgYXV0byYgaW50
ZXJhY3Rpb25WYWx1ZSA6IGludGVyYWN0aW9ucy5nZXQoKSkgeworICAgICAgICBhdXRvIGludGVy
YWN0aW9uT2JqZWN0ID0gaW50ZXJhY3Rpb25WYWx1ZS0+YXNPYmplY3QoKTsKKyAgICAgICAgaWYg
KCFpbnRlcmFjdGlvbk9iamVjdCkKICAgICAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJ
TkVEX0VSUk9SX0FORF9ERVRBSUxTKEludmFsaWRQYXJhbWV0ZXIsICJBbiBpbnRlcmFjdGlvbiBp
biB0aGUgJ2ludGVyYWN0aW9ucycgcGFyYW1ldGVyIHdhcyBpbnZhbGlkLiIpOwogCi0gICAgICAg
IFN0cmluZyBpbnRlcmFjdGlvblR5cGVTdHJpbmc7Ci0gICAgICAgIGlmICghaW50ZXJhY3Rpb25P
YmplY3QtPmdldFN0cmluZygidHlwZSJfcywgaW50ZXJhY3Rpb25UeXBlU3RyaW5nKSkKKyAgICAg
ICAgYXV0byBpbnRlcmFjdGlvblR5cGVTdHJpbmcgPSBpbnRlcmFjdGlvbk9iamVjdC0+Z2V0U3Ry
aW5nKCJ0eXBlIl9zKTsKKyAgICAgICAgaWYgKCFpbnRlcmFjdGlvblR5cGVTdHJpbmcpCiAgICAg
ICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhJbnZh
bGlkUGFyYW1ldGVyLCAiQW4gaW50ZXJhY3Rpb24gaW4gdGhlICdpbnRlcmFjdGlvbnMnIHBhcmFt
ZXRlciBpcyBtaXNzaW5nIHRoZSAndHlwZScga2V5LiIpOwogICAgICAgICBhdXRvIGludGVyYWN0
aW9uVHlwZSA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb25IZWxwZXJzOjpwYXJzZUVu
dW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6S2V5Ym9h
cmRJbnRlcmFjdGlvblR5cGU+KGludGVyYWN0aW9uVHlwZVN0cmluZyk7CiAgICAgICAgIGlmICgh
aW50ZXJhY3Rpb25UeXBlKQogICAgICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURf
RVJST1JfQU5EX0RFVEFJTFMoSW52YWxpZFBhcmFtZXRlciwgIkFuIGludGVyYWN0aW9uIGluIHRo
ZSAnaW50ZXJhY3Rpb25zJyBwYXJhbWV0ZXIgaGFzIGFuIGludmFsaWQgJ3R5cGUnIGtleS4iKTsK
IAotICAgICAgICBTdHJpbmcgdmlydHVhbEtleVN0cmluZzsKLSAgICAgICAgYm9vbCBmb3VuZFZp
cnR1YWxLZXkgPSBpbnRlcmFjdGlvbk9iamVjdC0+Z2V0U3RyaW5nKCJrZXkiX3MsIHZpcnR1YWxL
ZXlTdHJpbmcpOwotICAgICAgICBpZiAoZm91bmRWaXJ0dWFsS2V5KSB7CisgICAgICAgIGF1dG8g
dmlydHVhbEtleVN0cmluZyA9IGludGVyYWN0aW9uT2JqZWN0LT5nZXRTdHJpbmcoImtleSJfcyk7
CisgICAgICAgIGlmICghIXZpcnR1YWxLZXlTdHJpbmcpIHsKICAgICAgICAgICAgIE9wdGlvbmFs
PFZpcnR1YWxLZXk+IHZpcnR1YWxLZXkgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9u
SGVscGVyczo6cGFyc2VFbnVtVmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1
dG9tYXRpb246OlZpcnR1YWxLZXk+KHZpcnR1YWxLZXlTdHJpbmcpOwogICAgICAgICAgICAgaWYg
KCF2aXJ0dWFsS2V5KQogICAgICAgICAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVE
X0VSUk9SX0FORF9ERVRBSUxTKEludmFsaWRQYXJhbWV0ZXIsICJBbiBpbnRlcmFjdGlvbiBpbiB0
aGUgJ2ludGVyYWN0aW9ucycgcGFyYW1ldGVyIGhhcyBhbiBpbnZhbGlkICdrZXknIHZhbHVlLiIp
OwpAQCAtMTc0OCw5ICsxNzQ3LDggQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6cGVyZm9y
bUtleWJvYXJkSW50ZXJhY3Rpb25zKGNvbnN0IFN0cmluZyYgaGFuZGxlLCBjb24KICAgICAgICAg
ICAgIH0pOwogICAgICAgICB9CiAKLSAgICAgICAgU3RyaW5nIGtleVNlcXVlbmNlOwotICAgICAg
ICBib29sIGZvdW5kS2V5U2VxdWVuY2UgPSBpbnRlcmFjdGlvbk9iamVjdC0+Z2V0U3RyaW5nKCJ0
ZXh0Il9zLCBrZXlTZXF1ZW5jZSk7Ci0gICAgICAgIGlmIChmb3VuZEtleVNlcXVlbmNlKSB7Cisg
ICAgICAgIGF1dG8ga2V5U2VxdWVuY2UgPSBpbnRlcmFjdGlvbk9iamVjdC0+Z2V0U3RyaW5nKCJ0
ZXh0Il9zKTsKKyAgICAgICAgaWYgKCEha2V5U2VxdWVuY2UpIHsKICAgICAgICAgICAgIHN3aXRj
aCAoaW50ZXJhY3Rpb25UeXBlLnZhbHVlKCkpIHsKICAgICAgICAgICAgIGNhc2UgSW5zcGVjdG9y
OjpQcm90b2NvbDo6QXV0b21hdGlvbjo6S2V5Ym9hcmRJbnRlcmFjdGlvblR5cGU6OktleVByZXNz
OgogICAgICAgICAgICAgY2FzZSBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpLZXli
b2FyZEludGVyYWN0aW9uVHlwZTo6S2V5UmVsZWFzZToKQEAgLTE3NjUsNyArMTc2Myw3IEBAIHZv
aWQgV2ViQXV0b21hdGlvblNlc3Npb246OnBlcmZvcm1LZXlib2FyZEludGVyYWN0aW9ucyhjb25z
dCBTdHJpbmcmIGhhbmRsZSwgY29uCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAg
ICBpZiAoIWZvdW5kVmlydHVhbEtleSAmJiAhZm91bmRLZXlTZXF1ZW5jZSkKKyAgICAgICAgaWYg
KCF2aXJ0dWFsS2V5U3RyaW5nICYmICFrZXlTZXF1ZW5jZSkKICAgICAgICAgICAgIEFTWU5DX0ZB
SUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxTKE1pc3NpbmdQYXJhbWV0ZXIsICJB
biBpbnRlcmFjdGlvbiBpbiB0aGUgJ2ludGVyYWN0aW9ucycgcGFyYW1ldGVyIGlzIG1pc3Npbmcg
Ym90aCAna2V5JyBhbmQgJ3RleHQnLiBPbmUgbXVzdCBiZSBwcm92aWRlZC4iKTsKICAgICB9CiAK
QEAgLTE4MDgsNyArMTgwNiw3IEBAIHN0YXRpYyBTaW11bGF0ZWRJbnB1dFNvdXJjZVR5cGUgc2lt
dWxhdGVkSW5wdXRTb3VyY2VUeXBlRnJvbVByb3RvY29sU291cmNlVHlwZShJCiB9CiAjZW5kaWYg
Ly8gRU5BQkxFKFdFQkRSSVZFUl9BQ1RJT05TX0FQSSkKIAotdm9pZCBXZWJBdXRvbWF0aW9uU2Vz
c2lvbjo6cGVyZm9ybUludGVyYWN0aW9uU2VxdWVuY2UoY29uc3QgU3RyaW5nJiBoYW5kbGUsIGNv
bnN0IFN0cmluZyogb3B0aW9uYWxGcmFtZUhhbmRsZSwgY29uc3QgSlNPTjo6QXJyYXkmIGlucHV0
U291cmNlcywgY29uc3QgSlNPTjo6QXJyYXkmIHN0ZXBzLCBSZWY8V2ViQXV0b21hdGlvblNlc3Np
b246OlBlcmZvcm1JbnRlcmFjdGlvblNlcXVlbmNlQ2FsbGJhY2s+JiYgY2FsbGJhY2spCit2b2lk
IFdlYkF1dG9tYXRpb25TZXNzaW9uOjpwZXJmb3JtSW50ZXJhY3Rpb25TZXF1ZW5jZShjb25zdCBJ
bnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRIYW5kbGUmIGhh
bmRsZSwgY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6RnJhbWVIYW5kbGUm
IGZyYW1lSGFuZGxlLCBSZWY8SlNPTjo6QXJyYXk+JiYgaW5wdXRTb3VyY2VzLCBSZWY8SlNPTjo6
QXJyYXk+JiYgc3RlcHMsIFJlZjxXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6UGVyZm9ybUludGVyYWN0
aW9uU2VxdWVuY2VDYWxsYmFjaz4mJiBjYWxsYmFjaykKIHsKICAgICAvLyBUaGlzIGNvbW1hbmQg
aW1wbGVtZW50cyBXZWJLaXQgc3VwcG9ydCBmb3IgwqcxNy41IFBlcmZvcm0gQWN0aW9ucy4KIApA
QCAtMTgyMCw3ICsxODE4LDcgQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6cGVyZm9ybUlu
dGVyYWN0aW9uU2VxdWVuY2UoY29uc3QgU3RyaW5nJiBoYW5kbGUsIGNvbnMKICAgICAgICAgQVNZ
TkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1IoV2luZG93Tm90Rm91bmQpOwogCiAgICAgYm9v
bCBmcmFtZU5vdEZvdW5kID0gZmFsc2U7Ci0gICAgYXV0byBmcmFtZUlEID0gd2ViRnJhbWVJREZv
ckhhbmRsZShvcHRpb25hbEZyYW1lSGFuZGxlID8gKm9wdGlvbmFsRnJhbWVIYW5kbGUgOiBlbXB0
eVN0cmluZygpLCBmcmFtZU5vdEZvdW5kKTsKKyAgICBhdXRvIGZyYW1lSUQgPSB3ZWJGcmFtZUlE
Rm9ySGFuZGxlKGZyYW1lSGFuZGxlLCBmcmFtZU5vdEZvdW5kKTsKICAgICBpZiAoZnJhbWVOb3RG
b3VuZCkKICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1IoRnJhbWVOb3RG
b3VuZCk7CiAKQEAgLTE4MjksMjAgKzE4MjcsMjAgQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lv
bjo6cGVyZm9ybUludGVyYWN0aW9uU2VxdWVuY2UoY29uc3QgU3RyaW5nJiBoYW5kbGUsIGNvbnMK
IAogICAgIC8vIFBhcnNlIGFuZCB2YWxpZGF0ZSBBdXRvbWF0aW9uIHByb3RvY29sIGFyZ3VtZW50
cy4gQnkgdGhpcyBwb2ludCwgdGhlIGRyaXZlciBoYXMKICAgICAvLyBhbHJlYWR5IHBlcmZvcm1l
ZCB0aGUgc3RlcHMgaW4gwqcxNy4zIFByb2Nlc3NpbmcgQWN0aW9ucyBSZXF1ZXN0cy4KLSAgICBp
ZiAoIWlucHV0U291cmNlcy5sZW5ndGgoKSkKKyAgICBpZiAoIWlucHV0U291cmNlcy0+bGVuZ3Ro
KCkpCiAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxT
KEludmFsaWRQYXJhbWV0ZXIsICJUaGUgcGFyYW1ldGVyICdpbnB1dFNvdXJjZXMnIHdhcyBub3Qg
Zm91bmQgb3IgZW1wdHkuIik7CiAKLSAgICBmb3IgKGNvbnN0IGF1dG8mIGlucHV0U291cmNlIDog
aW5wdXRTb3VyY2VzKSB7Ci0gICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IGlucHV0U291cmNl
T2JqZWN0OwotICAgICAgICBpZiAoIWlucHV0U291cmNlLT5hc09iamVjdChpbnB1dFNvdXJjZU9i
amVjdCkpCisgICAgZm9yIChjb25zdCBhdXRvJiBpbnB1dFNvdXJjZVZhbHVlIDogaW5wdXRTb3Vy
Y2VzLmdldCgpKSB7CisgICAgICAgIGF1dG8gaW5wdXRTb3VyY2VPYmplY3QgPSBpbnB1dFNvdXJj
ZVZhbHVlLT5hc09iamVjdCgpOworICAgICAgICBpZiAoIWlucHV0U291cmNlT2JqZWN0KQogICAg
ICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1JfQU5EX0RFVEFJTFMoSW52
YWxpZFBhcmFtZXRlciwgIkFuIGlucHV0IHNvdXJjZSBpbiB0aGUgJ2lucHV0U291cmNlcycgcGFy
YW1ldGVyIHdhcyBpbnZhbGlkLiIpOwotICAgICAgICAKLSAgICAgICAgU3RyaW5nIHNvdXJjZUlk
OwotICAgICAgICBpZiAoIWlucHV0U291cmNlT2JqZWN0LT5nZXRTdHJpbmcoInNvdXJjZUlkIl9z
LCBzb3VyY2VJZCkpCisKKyAgICAgICAgYXV0byBzb3VyY2VJZCA9IGlucHV0U291cmNlT2JqZWN0
LT5nZXRTdHJpbmcoInNvdXJjZUlkIl9zKTsKKyAgICAgICAgaWYgKCFzb3VyY2VJZCkKICAgICAg
ICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxTKEludmFs
aWRQYXJhbWV0ZXIsICJBbiBpbnB1dCBzb3VyY2UgaW4gdGhlICdpbnB1dFNvdXJjZXMnIHBhcmFt
ZXRlciBpcyBtaXNzaW5nIGEgJ3NvdXJjZUlkJy4iKTsKIAotICAgICAgICBTdHJpbmcgc291cmNl
VHlwZTsKLSAgICAgICAgaWYgKCFpbnB1dFNvdXJjZU9iamVjdC0+Z2V0U3RyaW5nKCJzb3VyY2VU
eXBlIl9zLCBzb3VyY2VUeXBlKSkKKyAgICAgICAgYXV0byBzb3VyY2VUeXBlID0gaW5wdXRTb3Vy
Y2VPYmplY3QtPmdldFN0cmluZygic291cmNlVHlwZSJfcyk7CisgICAgICAgIGlmICghc291cmNl
VHlwZSkKICAgICAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9E
RVRBSUxTKEludmFsaWRQYXJhbWV0ZXIsICJBbiBpbnB1dCBzb3VyY2UgaW4gdGhlICdpbnB1dFNv
dXJjZXMnIHBhcmFtZXRlciBpcyBtaXNzaW5nIGEgJ3NvdXJjZVR5cGUnLiIpOwogCiAgICAgICAg
IGF1dG8gcGFyc2VkSW5wdXRTb3VyY2VUeXBlID0gSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21h
dGlvbkhlbHBlcnM6OnBhcnNlRW51bVZhbHVlRnJvbVN0cmluZzxJbnNwZWN0b3I6OlByb3RvY29s
OjpBdXRvbWF0aW9uOjpJbnB1dFNvdXJjZVR5cGU+KHNvdXJjZVR5cGUpOwpAQCAtMTg4MSwyOCAr
MTg3OSwyOCBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpwZXJmb3JtSW50ZXJhY3Rpb25T
ZXF1ZW5jZShjb25zdCBTdHJpbmcmIGhhbmRsZSwgY29ucwogCiAgICAgVmVjdG9yPFNpbXVsYXRl
ZElucHV0S2V5RnJhbWU+IGtleUZyYW1lczsKIAotICAgIGlmICghc3RlcHMubGVuZ3RoKCkpCisg
ICAgaWYgKCFzdGVwcy0+bGVuZ3RoKCkpCiAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJ
TkVEX0VSUk9SX0FORF9ERVRBSUxTKEludmFsaWRQYXJhbWV0ZXIsICJUaGUgcGFyYW1ldGVyICdz
dGVwcycgd2FzIG5vdCBmb3VuZCBvciBlbXB0eS4iKTsKIAotICAgIGZvciAoY29uc3QgYXV0byYg
c3RlcCA6IHN0ZXBzKSB7Ci0gICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IHN0ZXBPYmplY3Q7
Ci0gICAgICAgIGlmICghc3RlcC0+YXNPYmplY3Qoc3RlcE9iamVjdCkpCisgICAgZm9yIChjb25z
dCBhdXRvJiBzdGVwVmFsdWUgOiBzdGVwcy5nZXQoKSkgeworICAgICAgICBhdXRvIHN0ZXBPYmpl
Y3QgPSBzdGVwVmFsdWUtPmFzT2JqZWN0KCk7CisgICAgICAgIGlmICghc3RlcE9iamVjdCkKICAg
ICAgICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxTKElu
dmFsaWRQYXJhbWV0ZXIsICJBIHN0ZXAgaW4gdGhlICdzdGVwcycgcGFyYW1ldGVyIHdhcyBub3Qg
YW4gb2JqZWN0LiIpOwogCi0gICAgICAgIFJlZlB0cjxKU09OOjpBcnJheT4gc3RlcFN0YXRlczsK
LSAgICAgICAgaWYgKCFzdGVwT2JqZWN0LT5nZXRBcnJheSgic3RhdGVzIl9zLCBzdGVwU3RhdGVz
KSkKKyAgICAgICAgYXV0byBzdGVwU3RhdGVzID0gc3RlcE9iamVjdC0+Z2V0QXJyYXkoInN0YXRl
cyJfcyk7CisgICAgICAgIGlmICghc3RlcFN0YXRlcykKICAgICAgICAgICAgIEFTWU5DX0ZBSUxf
V0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxTKEludmFsaWRQYXJhbWV0ZXIsICJBIHN0
ZXAgaXMgbWlzc2luZyB0aGUgJ3N0YXRlcycgcHJvcGVydHkuIik7CiAKICAgICAgICAgVmVjdG9y
PFNpbXVsYXRlZElucHV0S2V5RnJhbWU6OlN0YXRlRW50cnk+IGVudHJpZXM7CiAgICAgICAgIGVu
dHJpZXMucmVzZXJ2ZUNhcGFjaXR5KHN0ZXBTdGF0ZXMtPmxlbmd0aCgpKTsKIAotICAgICAgICBm
b3IgKGNvbnN0IGF1dG8mIHN0YXRlIDogKnN0ZXBTdGF0ZXMpIHsKLSAgICAgICAgICAgIFJlZlB0
cjxKU09OOjpPYmplY3Q+IHN0YXRlT2JqZWN0OwotICAgICAgICAgICAgaWYgKCFzdGF0ZS0+YXNP
YmplY3Qoc3RhdGVPYmplY3QpKQorICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHN0YXRlVmFsdWUg
OiAqc3RlcFN0YXRlcykgeworICAgICAgICAgICAgYXV0byBzdGF0ZU9iamVjdCA9IHN0YXRlVmFs
dWUtPmFzT2JqZWN0KCk7CisgICAgICAgICAgICBpZiAoIXN0YXRlT2JqZWN0KQogICAgICAgICAg
ICAgICAgIEFTWU5DX0ZBSUxfV0lUSF9QUkVERUZJTkVEX0VSUk9SX0FORF9ERVRBSUxTKEludmFs
aWRQYXJhbWV0ZXIsICJFbmNvdW50ZXJlZCBhIG5vbi1vYmplY3Qgc3RlcCBzdGF0ZS4iKTsKIAot
ICAgICAgICAgICAgU3RyaW5nIHNvdXJjZUlkOwotICAgICAgICAgICAgaWYgKCFzdGF0ZU9iamVj
dC0+Z2V0U3RyaW5nKCJzb3VyY2VJZCJfcywgc291cmNlSWQpKQorICAgICAgICAgICAgYXV0byBz
b3VyY2VJZCA9IHN0YXRlT2JqZWN0LT5nZXRTdHJpbmcoInNvdXJjZUlkIl9zKTsKKyAgICAgICAg
ICAgIGlmICghc291cmNlSWQpCiAgICAgICAgICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURF
RklORURfRVJST1JfQU5EX0RFVEFJTFMoSW52YWxpZFBhcmFtZXRlciwgIlN0ZXAgc3RhdGUgbGFj
a3MgcmVxdWlyZWQgJ3NvdXJjZUlkJyBwcm9wZXJ0eS4iKTsKIAogICAgICAgICAgICAgaWYgKCFz
b3VyY2VJZFRvSW5wdXRTb3VyY2VNYXAuY29udGFpbnMoc291cmNlSWQpKQpAQCAtMTkxMSwxNyAr
MTkwOSwxNiBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpwZXJmb3JtSW50ZXJhY3Rpb25T
ZXF1ZW5jZShjb25zdCBTdHJpbmcmIGhhbmRsZSwgY29ucwogICAgICAgICAgICAgU2ltdWxhdGVk
SW5wdXRTb3VyY2UmIGlucHV0U291cmNlID0gKnNvdXJjZUlkVG9JbnB1dFNvdXJjZU1hcC5nZXQo
c291cmNlSWQpOwogICAgICAgICAgICAgU2ltdWxhdGVkSW5wdXRTb3VyY2VTdGF0ZSBzb3VyY2VT
dGF0ZSB7IH07CiAKLSAgICAgICAgICAgIFN0cmluZyBwcmVzc2VkQ2hhcktleVN0cmluZzsKLSAg
ICAgICAgICAgIGlmIChzdGF0ZU9iamVjdC0+Z2V0U3RyaW5nKCJwcmVzc2VkQ2hhcktleSJfcywg
cHJlc3NlZENoYXJLZXlTdHJpbmcpKQorICAgICAgICAgICAgYXV0byBwcmVzc2VkQ2hhcktleVN0
cmluZyA9IHN0YXRlT2JqZWN0LT5nZXRTdHJpbmcoInByZXNzZWRDaGFyS2V5Il9zKTsKKyAgICAg
ICAgICAgIGlmICghIXByZXNzZWRDaGFyS2V5U3RyaW5nKQogICAgICAgICAgICAgICAgIHNvdXJj
ZVN0YXRlLnByZXNzZWRDaGFyS2V5ID0gcHJlc3NlZENoYXJLZXlTdHJpbmcuY2hhcmFjdGVyQXQo
MCk7CiAKLSAgICAgICAgICAgIFJlZlB0cjxKU09OOjpBcnJheT4gcHJlc3NlZFZpcnR1YWxLZXlz
QXJyYXk7Ci0gICAgICAgICAgICBpZiAoc3RhdGVPYmplY3QtPmdldEFycmF5KCJwcmVzc2VkVmly
dHVhbEtleXMiX3MsIHByZXNzZWRWaXJ0dWFsS2V5c0FycmF5KSkgeworICAgICAgICAgICAgaWYg
KGF1dG8gcHJlc3NlZFZpcnR1YWxLZXlzQXJyYXkgPSBzdGF0ZU9iamVjdC0+Z2V0QXJyYXkoInBy
ZXNzZWRWaXJ0dWFsS2V5cyJfcykpIHsKICAgICAgICAgICAgICAgICBWaXJ0dWFsS2V5U2V0IHBy
ZXNzZWRWaXJ0dWFsS2V5cyB7IH07CiAKICAgICAgICAgICAgICAgICBmb3IgKGF1dG8gaXQgPSBw
cmVzc2VkVmlydHVhbEtleXNBcnJheS0+YmVnaW4oKTsgaXQgIT0gcHJlc3NlZFZpcnR1YWxLZXlz
QXJyYXktPmVuZCgpOyArK2l0KSB7Ci0gICAgICAgICAgICAgICAgICAgIFN0cmluZyBwcmVzc2Vk
VmlydHVhbEtleVN0cmluZzsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCEoKml0KS0+YXNTdHJp
bmcocHJlc3NlZFZpcnR1YWxLZXlTdHJpbmcpKQorICAgICAgICAgICAgICAgICAgICBhdXRvIHBy
ZXNzZWRWaXJ0dWFsS2V5U3RyaW5nID0gKCppdCktPmFzU3RyaW5nKCk7CisgICAgICAgICAgICAg
ICAgICAgIGlmICghcHJlc3NlZFZpcnR1YWxLZXlTdHJpbmcpCiAgICAgICAgICAgICAgICAgICAg
ICAgICBBU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhJbnZhbGlk
UGFyYW1ldGVyLCAiRW5jb3VudGVyZWQgYSBub24tc3RyaW5nIHZpcnR1YWwga2V5IHZhbHVlLiIp
OwogCiAgICAgICAgICAgICAgICAgICAgIE9wdGlvbmFsPFZpcnR1YWxLZXk+IHBhcnNlZFZpcnR1
YWxLZXkgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uSGVscGVyczo6cGFyc2VFbnVt
VmFsdWVGcm9tU3RyaW5nPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OlZpcnR1YWxL
ZXk+KHByZXNzZWRWaXJ0dWFsS2V5U3RyaW5nKTsKQEAgLTE5MzQsMzMgKzE5MzEsMzIgQEAgdm9p
ZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6cGVyZm9ybUludGVyYWN0aW9uU2VxdWVuY2UoY29uc3Qg
U3RyaW5nJiBoYW5kbGUsIGNvbnMKICAgICAgICAgICAgICAgICBzb3VyY2VTdGF0ZS5wcmVzc2Vk
VmlydHVhbEtleXMgPSBwcmVzc2VkVmlydHVhbEtleXM7CiAgICAgICAgICAgICB9CiAKLSAgICAg
ICAgICAgIFN0cmluZyBwcmVzc2VkQnV0dG9uU3RyaW5nOwotICAgICAgICAgICAgaWYgKHN0YXRl
T2JqZWN0LT5nZXRTdHJpbmcoInByZXNzZWRCdXR0b24iX3MsIHByZXNzZWRCdXR0b25TdHJpbmcp
KSB7CisgICAgICAgICAgICBhdXRvIHByZXNzZWRCdXR0b25TdHJpbmcgPSBzdGF0ZU9iamVjdC0+
Z2V0U3RyaW5nKCJwcmVzc2VkQnV0dG9uIl9zKTsKKyAgICAgICAgICAgIGlmICghIXByZXNzZWRC
dXR0b25TdHJpbmcpIHsKICAgICAgICAgICAgICAgICBhdXRvIHByb3RvY29sQnV0dG9uID0gSW5z
cGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbkhlbHBlcnM6OnBhcnNlRW51bVZhbHVlRnJvbVN0
cmluZzxJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpNb3VzZUJ1dHRvbj4ocHJlc3Nl
ZEJ1dHRvblN0cmluZyk7CiAgICAgICAgICAgICAgICAgc291cmNlU3RhdGUucHJlc3NlZE1vdXNl
QnV0dG9uID0gcHJvdG9jb2xCdXR0b24udmFsdWVPcihNb3VzZUJ1dHRvbjo6Tm9uZSk7CiAgICAg
ICAgICAgICB9CiAKLSAgICAgICAgICAgIFN0cmluZyBvcmlnaW5TdHJpbmc7Ci0gICAgICAgICAg
ICBpZiAoc3RhdGVPYmplY3QtPmdldFN0cmluZygib3JpZ2luIl9zLCBvcmlnaW5TdHJpbmcpKQor
ICAgICAgICAgICAgYXV0byBvcmlnaW5TdHJpbmcgPSBzdGF0ZU9iamVjdC0+Z2V0U3RyaW5nKCJv
cmlnaW4iX3MpOworICAgICAgICAgICAgaWYgKCEhb3JpZ2luU3RyaW5nKQogICAgICAgICAgICAg
ICAgIHNvdXJjZVN0YXRlLm9yaWdpbiA9IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb25I
ZWxwZXJzOjpwYXJzZUVudW1WYWx1ZUZyb21TdHJpbmc8SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0
b21hdGlvbjo6TW91c2VNb3ZlT3JpZ2luPihvcmlnaW5TdHJpbmcpOwogCiAgICAgICAgICAgICBp
ZiAoc291cmNlU3RhdGUub3JpZ2luICYmIHNvdXJjZVN0YXRlLm9yaWdpbi52YWx1ZSgpID09IElu
c3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246Ok1vdXNlTW92ZU9yaWdpbjo6RWxlbWVudCkg
ewotICAgICAgICAgICAgICAgIFN0cmluZyBub2RlSGFuZGxlU3RyaW5nOwotICAgICAgICAgICAg
ICAgIGlmICghc3RhdGVPYmplY3QtPmdldFN0cmluZygibm9kZUhhbmRsZSJfcywgbm9kZUhhbmRs
ZVN0cmluZykpCisgICAgICAgICAgICAgICAgYXV0byBub2RlSGFuZGxlU3RyaW5nID0gc3RhdGVP
YmplY3QtPmdldFN0cmluZygibm9kZUhhbmRsZSJfcyk7CisgICAgICAgICAgICAgICAgaWYgKCFu
b2RlSGFuZGxlU3RyaW5nKQogICAgICAgICAgICAgICAgICAgICBBU1lOQ19GQUlMX1dJVEhfUFJF
REVGSU5FRF9FUlJPUl9BTkRfREVUQUlMUyhJbnZhbGlkUGFyYW1ldGVyLCAiTm9kZSBoYW5kbGUg
bm90IHByb3ZpZGVkIGZvciAnRWxlbWVudCcgb3JpZ2luIik7CiAgICAgICAgICAgICAgICAgc291
cmNlU3RhdGUubm9kZUhhbmRsZSA9IG5vZGVIYW5kbGVTdHJpbmc7CiAgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+IGxvY2F0aW9uT2JqZWN0OwotICAgICAg
ICAgICAgaWYgKHN0YXRlT2JqZWN0LT5nZXRPYmplY3QoImxvY2F0aW9uIl9zLCBsb2NhdGlvbk9i
amVjdCkpIHsKLSAgICAgICAgICAgICAgICBpbnQgeCA9IDAsIHkgPSAwOwotICAgICAgICAgICAg
ICAgIGlmIChsb2NhdGlvbk9iamVjdC0+Z2V0SW50ZWdlcigieCJfcywgeCkgJiYgbG9jYXRpb25P
YmplY3QtPmdldEludGVnZXIoInkiX3MsIHkpKQotICAgICAgICAgICAgICAgICAgICBzb3VyY2VT
dGF0ZS5sb2NhdGlvbiA9IFdlYkNvcmU6OkludFBvaW50KHgsIHkpOworICAgICAgICAgICAgaWYg
KGF1dG8gbG9jYXRpb25PYmplY3QgPSBzdGF0ZU9iamVjdC0+Z2V0T2JqZWN0KCJsb2NhdGlvbiJf
cykpIHsKKyAgICAgICAgICAgICAgICBhdXRvIHggPSBsb2NhdGlvbk9iamVjdC0+Z2V0SW50ZWdl
cigieCJfcyk7CisgICAgICAgICAgICAgICAgYXV0byB5ID0gbG9jYXRpb25PYmplY3QtPmdldElu
dGVnZXIoInkiX3MpOworICAgICAgICAgICAgICAgIGlmICh4ICYmIHkpCisgICAgICAgICAgICAg
ICAgICAgIHNvdXJjZVN0YXRlLmxvY2F0aW9uID0gV2ViQ29yZTo6SW50UG9pbnQoKngsICp5KTsK
ICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaW50IHBhcnNlZER1cmF0aW9uOwotICAgICAg
ICAgICAgaWYgKHN0YXRlT2JqZWN0LT5nZXRJbnRlZ2VyKCJkdXJhdGlvbiJfcywgcGFyc2VkRHVy
YXRpb24pKQotICAgICAgICAgICAgICAgIHNvdXJjZVN0YXRlLmR1cmF0aW9uID0gU2Vjb25kczo6
ZnJvbU1pbGxpc2Vjb25kcyhwYXJzZWREdXJhdGlvbik7CisgICAgICAgICAgICBpZiAoYXV0byBk
dXJhdGlvbiA9IHN0YXRlT2JqZWN0LT5nZXRJbnRlZ2VyKCJkdXJhdGlvbiJfcykpCisgICAgICAg
ICAgICAgICAgc291cmNlU3RhdGUuZHVyYXRpb24gPSBTZWNvbmRzOjpmcm9tTWlsbGlzZWNvbmRz
KCpkdXJhdGlvbik7CiAKICAgICAgICAgICAgIGVudHJpZXMudW5jaGVja2VkQXBwZW5kKHN0ZDo6
cGFpcjxTaW11bGF0ZWRJbnB1dFNvdXJjZSYsIFNpbXVsYXRlZElucHV0U291cmNlU3RhdGU+IHsg
aW5wdXRTb3VyY2UsIHNvdXJjZVN0YXRlIH0pOwogICAgICAgICB9CkBAIC0xOTg0LDcgKzE5ODAs
NyBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjpwZXJmb3JtSW50ZXJhY3Rpb25TZXF1ZW5j
ZShjb25zdCBTdHJpbmcmIGhhbmRsZSwgY29ucwogI2VuZGlmIC8vIEVOQUJMRShXRUJEUklWRVJf
QUNUSU9OU19BUEkpCiB9CiAKLXZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OmNhbmNlbEludGVy
YWN0aW9uU2VxdWVuY2UoY29uc3QgU3RyaW5nJiBoYW5kbGUsIGNvbnN0IFN0cmluZyogb3B0aW9u
YWxGcmFtZUhhbmRsZSwgUmVmPENhbmNlbEludGVyYWN0aW9uU2VxdWVuY2VDYWxsYmFjaz4mJiBj
YWxsYmFjaykKK3ZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OmNhbmNlbEludGVyYWN0aW9uU2Vx
dWVuY2UoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250
ZXh0SGFuZGxlJiBoYW5kbGUsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246
OkZyYW1lSGFuZGxlJiBmcmFtZUhhbmRsZSwgUmVmPENhbmNlbEludGVyYWN0aW9uU2VxdWVuY2VD
YWxsYmFjaz4mJiBjYWxsYmFjaykKIHsKICAgICAvLyBUaGlzIGNvbW1hbmQgaW1wbGVtZW50cyBX
ZWJLaXQgc3VwcG9ydCBmb3IgwqcxNy42IFJlbGVhc2UgQWN0aW9ucy4KIApAQCAtMTk5Niw3ICsx
OTkyLDcgQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6Y2FuY2VsSW50ZXJhY3Rpb25TZXF1
ZW5jZShjb25zdCBTdHJpbmcmIGhhbmRsZSwgY29uc3QKICAgICAgICAgQVNZTkNfRkFJTF9XSVRI
X1BSRURFRklORURfRVJST1IoV2luZG93Tm90Rm91bmQpOwogCiAgICAgYm9vbCBmcmFtZU5vdEZv
dW5kID0gZmFsc2U7Ci0gICAgYXV0byBmcmFtZUlEID0gd2ViRnJhbWVJREZvckhhbmRsZShvcHRp
b25hbEZyYW1lSGFuZGxlID8gKm9wdGlvbmFsRnJhbWVIYW5kbGUgOiBlbXB0eVN0cmluZygpLCBm
cmFtZU5vdEZvdW5kKTsKKyAgICBhdXRvIGZyYW1lSUQgPSB3ZWJGcmFtZUlERm9ySGFuZGxlKGZy
YW1lSGFuZGxlLCBmcmFtZU5vdEZvdW5kKTsKICAgICBpZiAoZnJhbWVOb3RGb3VuZCkKICAgICAg
ICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1IoRnJhbWVOb3RGb3VuZCk7CiAKQEAg
LTIwMTMsMTkgKzIwMDksMTggQEAgdm9pZCBXZWJBdXRvbWF0aW9uU2Vzc2lvbjo6Y2FuY2VsSW50
ZXJhY3Rpb25TZXF1ZW5jZShjb25zdCBTdHJpbmcmIGhhbmRsZSwgY29uc3QKICNlbmRpZiAvLyBF
TkFCTEUoV0VCRFJJVkVSX0FDVElPTlNfQVBJKQogfQogCi12b2lkIFdlYkF1dG9tYXRpb25TZXNz
aW9uOjp0YWtlU2NyZWVuc2hvdChjb25zdCBTdHJpbmcmIGhhbmRsZSwgY29uc3QgU3RyaW5nKiBv
cHRpb25hbEZyYW1lSGFuZGxlLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsTm9kZUhhbmRsZSwgY29u
c3QgYm9vbCogb3B0aW9uYWxTY3JvbGxJbnRvVmlld0lmTmVlZGVkLCBjb25zdCBib29sKiBvcHRp
b25hbENsaXBUb1ZpZXdwb3J0LCBSZWY8VGFrZVNjcmVlbnNob3RDYWxsYmFjaz4mJiBjYWxsYmFj
aykKK3ZvaWQgV2ViQXV0b21hdGlvblNlc3Npb246OnRha2VTY3JlZW5zaG90KGNvbnN0IEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYgaGFuZGxl
LCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpGcmFtZUhhbmRsZSYgZnJh
bWVIYW5kbGUsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246Ok5vZGVIYW5k
bGUmIG5vZGVIYW5kbGUsIE9wdGlvbmFsPGJvb2w+JiYgb3B0aW9uYWxTY3JvbGxJbnRvVmlld0lm
TmVlZGVkLCBPcHRpb25hbDxib29sPiYmIG9wdGlvbmFsQ2xpcFRvVmlld3BvcnQsIFJlZjxUYWtl
U2NyZWVuc2hvdENhbGxiYWNrPiYmIGNhbGxiYWNrKQogewogICAgIFdlYlBhZ2VQcm94eSogcGFn
ZSA9IHdlYlBhZ2VQcm94eUZvckhhbmRsZShoYW5kbGUpOwogICAgIGlmICghcGFnZSkKICAgICAg
ICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1IoV2luZG93Tm90Rm91bmQpOwogCiAg
ICAgYm9vbCBmcmFtZU5vdEZvdW5kID0gZmFsc2U7Ci0gICAgYXV0byBmcmFtZUlEID0gd2ViRnJh
bWVJREZvckhhbmRsZShvcHRpb25hbEZyYW1lSGFuZGxlID8gKm9wdGlvbmFsRnJhbWVIYW5kbGUg
OiBlbXB0eVN0cmluZygpLCBmcmFtZU5vdEZvdW5kKTsKKyAgICBhdXRvIGZyYW1lSUQgPSB3ZWJG
cmFtZUlERm9ySGFuZGxlKGZyYW1lSGFuZGxlLCBmcmFtZU5vdEZvdW5kKTsKICAgICBpZiAoZnJh
bWVOb3RGb3VuZCkKICAgICAgICAgQVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1IoRnJh
bWVOb3RGb3VuZCk7CiAKICAgICBib29sIHNjcm9sbEludG9WaWV3SWZOZWVkZWQgPSBvcHRpb25h
bFNjcm9sbEludG9WaWV3SWZOZWVkZWQgPyAqb3B0aW9uYWxTY3JvbGxJbnRvVmlld0lmTmVlZGVk
IDogZmFsc2U7Ci0gICAgU3RyaW5nIG5vZGVIYW5kbGUgPSBvcHRpb25hbE5vZGVIYW5kbGUgPyAq
b3B0aW9uYWxOb2RlSGFuZGxlIDogZW1wdHlTdHJpbmcoKTsKICAgICBib29sIGNsaXBUb1ZpZXdw
b3J0ID0gb3B0aW9uYWxDbGlwVG9WaWV3cG9ydCA/ICpvcHRpb25hbENsaXBUb1ZpZXdwb3J0IDog
ZmFsc2U7CiAKICNpZiBQTEFURk9STShHVEspCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmggYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uLmgKaW5kZXggMzYyNzY2
MDM5NWNiNWY0NGU3N2E5Zjg2MWQ0MmU5NzFkYmExYmJmYy4uOGQ5MDg5MmE0YjEzNDI2NGE0ZTg1
YmU0ZjY1ZGZhMjBmYzAxM2EyZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbi5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb24uaApAQCAtMTM1LDEwICsxMzUs
MTAgQEAgcHVibGljOgogCiAjaWYgRU5BQkxFKFJFTU9URV9JTlNQRUNUT1IpCiAgICAgLy8gSW5z
cGVjdG9yOjpSZW1vdGVBdXRvbWF0aW9uVGFyZ2V0IEFQSQotICAgIFN0cmluZyBuYW1lKCkgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9zZXNzaW9uSWRlbnRpZmllcjsgfQotICAgIHZvaWQgZGlz
cGF0Y2hNZXNzYWdlRnJvbVJlbW90ZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UpIG92ZXJyaWRlOwot
ICAgIHZvaWQgY29ubmVjdChJbnNwZWN0b3I6OkZyb250ZW5kQ2hhbm5lbCYsIGJvb2wgaXNBdXRv
bWF0aWNDb25uZWN0aW9uID0gZmFsc2UsIGJvb2wgaW1tZWRpYXRlbHlQYXVzZSA9IGZhbHNlKSBv
dmVycmlkZTsKLSAgICB2b2lkIGRpc2Nvbm5lY3QoSW5zcGVjdG9yOjpGcm9udGVuZENoYW5uZWwm
KSBvdmVycmlkZTsKKyAgICBTdHJpbmcgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2Vzc2lvbklk
ZW50aWZpZXI7IH0KKyAgICB2b2lkIGRpc3BhdGNoTWVzc2FnZUZyb21SZW1vdGUoY29uc3QgU3Ry
aW5nJiBtZXNzYWdlKTsKKyAgICB2b2lkIGNvbm5lY3QoSW5zcGVjdG9yOjpGcm9udGVuZENoYW5u
ZWwmLCBib29sIGlzQXV0b21hdGljQ29ubmVjdGlvbiA9IGZhbHNlLCBib29sIGltbWVkaWF0ZWx5
UGF1c2UgPSBmYWxzZSk7CisgICAgdm9pZCBkaXNjb25uZWN0KEluc3BlY3Rvcjo6RnJvbnRlbmRD
aGFubmVsJik7CiAjZW5kaWYKICAgICB2b2lkIHRlcm1pbmF0ZSgpOwogCkBAIC0xNDYsMTUgKzE0
NiwxNSBAQCBwdWJsaWM6CiAKICAgICAvLyBTaW11bGF0ZWRJbnB1dERpc3BhdGNoZXI6OkNsaWVu
dCBBUEkKICNpZiBFTkFCTEUoV0VCRFJJVkVSX01PVVNFX0lOVEVSQUNUSU9OUykKLSAgICB2b2lk
IHNpbXVsYXRlTW91c2VJbnRlcmFjdGlvbihXZWJQYWdlUHJveHkmLCBNb3VzZUludGVyYWN0aW9u
LCBNb3VzZUJ1dHRvbiwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGxvY2F0aW9uSW5WaWV3LCBB
dXRvbWF0aW9uQ29tcGxldGlvbkhhbmRsZXImJikgZmluYWw7CisgICAgdm9pZCBzaW11bGF0ZU1v
dXNlSW50ZXJhY3Rpb24oV2ViUGFnZVByb3h5JiwgTW91c2VJbnRlcmFjdGlvbiwgTW91c2VCdXR0
b24sIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBsb2NhdGlvbkluVmlldywgQXV0b21hdGlvbkNv
bXBsZXRpb25IYW5kbGVyJiYpOwogI2VuZGlmCiAjaWYgRU5BQkxFKFdFQkRSSVZFUl9UT1VDSF9J
TlRFUkFDVElPTlMpCi0gICAgdm9pZCBzaW11bGF0ZVRvdWNoSW50ZXJhY3Rpb24oV2ViUGFnZVBy
b3h5JiwgVG91Y2hJbnRlcmFjdGlvbiwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGxvY2F0aW9u
SW5WaWV3LCBPcHRpb25hbDxTZWNvbmRzPiBkdXJhdGlvbiwgQXV0b21hdGlvbkNvbXBsZXRpb25I
YW5kbGVyJiYpIGZpbmFsOworICAgIHZvaWQgc2ltdWxhdGVUb3VjaEludGVyYWN0aW9uKFdlYlBh
Z2VQcm94eSYsIFRvdWNoSW50ZXJhY3Rpb24sIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBsb2Nh
dGlvbkluVmlldywgT3B0aW9uYWw8U2Vjb25kcz4gZHVyYXRpb24sIEF1dG9tYXRpb25Db21wbGV0
aW9uSGFuZGxlciYmKTsKICNlbmRpZgogI2lmIEVOQUJMRShXRUJEUklWRVJfS0VZQk9BUkRfSU5U
RVJBQ1RJT05TKQotICAgIHZvaWQgc2ltdWxhdGVLZXlib2FyZEludGVyYWN0aW9uKFdlYlBhZ2VQ
cm94eSYsIEtleWJvYXJkSW50ZXJhY3Rpb24sIFdURjo6VmFyaWFudDxWaXJ0dWFsS2V5LCBDaGFy
S2V5PiYmLCBBdXRvbWF0aW9uQ29tcGxldGlvbkhhbmRsZXImJikgZmluYWw7CisgICAgdm9pZCBz
aW11bGF0ZUtleWJvYXJkSW50ZXJhY3Rpb24oV2ViUGFnZVByb3h5JiwgS2V5Ym9hcmRJbnRlcmFj
dGlvbiwgV1RGOjpWYXJpYW50PFZpcnR1YWxLZXksIENoYXJLZXk+JiYsIEF1dG9tYXRpb25Db21w
bGV0aW9uSGFuZGxlciYmKTsKICNlbmRpZgotICAgIHZvaWQgdmlld3BvcnRJblZpZXdDZW50ZXJQ
b2ludE9mRWxlbWVudChXZWJQYWdlUHJveHkmLCBPcHRpb25hbDxXZWJDb3JlOjpGcmFtZUlkZW50
aWZpZXI+LCBjb25zdCBTdHJpbmcmIG5vZGVIYW5kbGUsIEZ1bmN0aW9uPHZvaWQgKE9wdGlvbmFs
PFdlYkNvcmU6OkludFBvaW50PiwgT3B0aW9uYWw8QXV0b21hdGlvbkNvbW1hbmRFcnJvcj4pPiYm
KSBmaW5hbDsKKyAgICB2b2lkIHZpZXdwb3J0SW5WaWV3Q2VudGVyUG9pbnRPZkVsZW1lbnQoV2Vi
UGFnZVByb3h5JiwgT3B0aW9uYWw8V2ViQ29yZTo6RnJhbWVJZGVudGlmaWVyPiwgY29uc3QgSW5z
cGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6Tm9kZUhhbmRsZSYsIEZ1bmN0aW9uPHZvaWQo
T3B0aW9uYWw8V2ViQ29yZTo6SW50UG9pbnQ+LCBPcHRpb25hbDxBdXRvbWF0aW9uQ29tbWFuZEVy
cm9yPik+JiYpOwogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQkRSSVZFUl9BQ1RJT05TX0FQSSkKIApA
QCAtMTYzLDQ1ICsxNjMsNDUgQEAgcHVibGljOgogICAgIC8vIGFuZCB0aGUgLS1wbGF0Zm9ybSBh
cmd1bWVudCBwYXNzZWQgdG8gdGhlIHByb3RvY29sIGJpbmRpbmdzIGdlbmVyYXRvci4KIAogICAg
IC8vIFBsYXRmb3JtOiBHZW5lcmljCi0gICAgdm9pZCBnZXRCcm93c2luZ0NvbnRleHRzKFJlZjxH
ZXRCcm93c2luZ0NvbnRleHRzQ2FsbGJhY2s+JiYpIGZpbmFsOwotICAgIHZvaWQgZ2V0QnJvd3Np
bmdDb250ZXh0KGNvbnN0IFN0cmluZyYsIFJlZjxHZXRCcm93c2luZ0NvbnRleHRDYWxsYmFjaz4m
JikgZmluYWw7Ci0gICAgdm9pZCBjcmVhdGVCcm93c2luZ0NvbnRleHQoY29uc3QgU3RyaW5nKiBv
cHRpb25hbFByZXNlbnRhdGlvbkhpbnQsIFJlZjxDcmVhdGVCcm93c2luZ0NvbnRleHRDYWxsYmFj
az4mJikgZmluYWw7Ci0gICAgdm9pZCBjbG9zZUJyb3dzaW5nQ29udGV4dChJbnNwZWN0b3I6OkVy
cm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJikgZmluYWw7Ci0gICAgdm9pZCBzd2l0Y2hUb0Jyb3dz
aW5nQ29udGV4dChjb25zdCBTdHJpbmcmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSwgY29uc3QgU3Ry
aW5nKiBvcHRpb25hbEZyYW1lSGFuZGxlLCBSZWY8U3dpdGNoVG9Ccm93c2luZ0NvbnRleHRDYWxs
YmFjaz4mJikgZmluYWw7Ci0gICAgdm9pZCBzZXRXaW5kb3dGcmFtZU9mQnJvd3NpbmdDb250ZXh0
KGNvbnN0IFN0cmluZyYgaGFuZGxlLCBjb25zdCBKU09OOjpPYmplY3QqIG9yaWdpbiwgY29uc3Qg
SlNPTjo6T2JqZWN0KiBzaXplLCBSZWY8U2V0V2luZG93RnJhbWVPZkJyb3dzaW5nQ29udGV4dENh
bGxiYWNrPiYmKSBmaW5hbDsKLSAgICB2b2lkIG1heGltaXplV2luZG93T2ZCcm93c2luZ0NvbnRl
eHQoY29uc3QgU3RyaW5nJiBoYW5kbGUsIFJlZjxNYXhpbWl6ZVdpbmRvd09mQnJvd3NpbmdDb250
ZXh0Q2FsbGJhY2s+JiYpIGZpbmFsOwotICAgIHZvaWQgaGlkZVdpbmRvd09mQnJvd3NpbmdDb250
ZXh0KGNvbnN0IFN0cmluZyYgaGFuZGxlLCBSZWY8SGlkZVdpbmRvd09mQnJvd3NpbmdDb250ZXh0
Q2FsbGJhY2s+JiYpIGZpbmFsOwotICAgIHZvaWQgbmF2aWdhdGVCcm93c2luZ0NvbnRleHQoY29u
c3QgU3RyaW5nJiBoYW5kbGUsIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcqIG9wdGlv
bmFsUGFnZUxvYWRTdHJhdGVneVN0cmluZywgY29uc3QgZG91YmxlKiBvcHRpb25hbFBhZ2VMb2Fk
VGltZW91dCwgUmVmPE5hdmlnYXRlQnJvd3NpbmdDb250ZXh0Q2FsbGJhY2s+JiYpIG92ZXJyaWRl
OwotICAgIHZvaWQgZ29CYWNrSW5Ccm93c2luZ0NvbnRleHQoY29uc3QgU3RyaW5nJiwgY29uc3Qg
U3RyaW5nKiBvcHRpb25hbFBhZ2VMb2FkU3RyYXRlZ3lTdHJpbmcsIGNvbnN0IGRvdWJsZSogb3B0
aW9uYWxQYWdlTG9hZFRpbWVvdXQsIFJlZjxHb0JhY2tJbkJyb3dzaW5nQ29udGV4dENhbGxiYWNr
PiYmKSBvdmVycmlkZTsKLSAgICB2b2lkIGdvRm9yd2FyZEluQnJvd3NpbmdDb250ZXh0KGNvbnN0
IFN0cmluZyYsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxQYWdlTG9hZFN0cmF0ZWd5U3RyaW5nLCBj
b25zdCBkb3VibGUqIG9wdGlvbmFsUGFnZUxvYWRUaW1lb3V0LCBSZWY8R29Gb3J3YXJkSW5Ccm93
c2luZ0NvbnRleHRDYWxsYmFjaz4mJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZWxvYWRCcm93c2lu
Z0NvbnRleHQoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nKiBvcHRpb25hbFBhZ2VMb2FkU3Ry
YXRlZ3lTdHJpbmcsIGNvbnN0IGRvdWJsZSogb3B0aW9uYWxQYWdlTG9hZFRpbWVvdXQsIFJlZjxS
ZWxvYWRCcm93c2luZ0NvbnRleHRDYWxsYmFjaz4mJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCB3YWl0
Rm9yTmF2aWdhdGlvblRvQ29tcGxldGUoY29uc3QgU3RyaW5nJiBicm93c2luZ0NvbnRleHRIYW5k
bGUsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxGcmFtZUhhbmRsZSwgY29uc3QgU3RyaW5nKiBvcHRp
b25hbFBhZ2VMb2FkU3RyYXRlZ3lTdHJpbmcsIGNvbnN0IGRvdWJsZSogb3B0aW9uYWxQYWdlTG9h
ZFRpbWVvdXQsIFJlZjxXYWl0Rm9yTmF2aWdhdGlvblRvQ29tcGxldGVDYWxsYmFjaz4mJikgb3Zl
cnJpZGU7Ci0gICAgdm9pZCBldmFsdWF0ZUphdmFTY3JpcHRGdW5jdGlvbihjb25zdCBTdHJpbmcm
IGJyb3dzaW5nQ29udGV4dEhhbmRsZSwgY29uc3QgU3RyaW5nKiBvcHRpb25hbEZyYW1lSGFuZGxl
LCBjb25zdCBTdHJpbmcmIGZ1bmN0aW9uLCBjb25zdCBKU09OOjpBcnJheSYgYXJndW1lbnRzLCBj
b25zdCBib29sKiBvcHRpb25hbEV4cGVjdHNJbXBsaWNpdENhbGxiYWNrQXJndW1lbnQsIGNvbnN0
IGRvdWJsZSogb3B0aW9uYWxDYWxsYmFja1RpbWVvdXQsIFJlZjxJbnNwZWN0b3I6OkF1dG9tYXRp
b25CYWNrZW5kRGlzcGF0Y2hlckhhbmRsZXI6OkV2YWx1YXRlSmF2YVNjcmlwdEZ1bmN0aW9uQ2Fs
bGJhY2s+JiYpIG92ZXJyaWRlOwotICAgIHZvaWQgcGVyZm9ybU1vdXNlSW50ZXJhY3Rpb24oY29u
c3QgU3RyaW5nJiBoYW5kbGUsIGNvbnN0IEpTT046Ok9iamVjdCYgcmVxdWVzdGVkUG9zaXRpb24s
IGNvbnN0IFN0cmluZyYgbW91c2VCdXR0b24sIGNvbnN0IFN0cmluZyYgbW91c2VJbnRlcmFjdGlv
biwgY29uc3QgSlNPTjo6QXJyYXkmIGtleU1vZGlmaWVycywgUmVmPFBlcmZvcm1Nb3VzZUludGVy
YWN0aW9uQ2FsbGJhY2s+JiYpIGZpbmFsOwotICAgIHZvaWQgcGVyZm9ybUtleWJvYXJkSW50ZXJh
Y3Rpb25zKGNvbnN0IFN0cmluZyYgaGFuZGxlLCBjb25zdCBKU09OOjpBcnJheSYgaW50ZXJhY3Rp
b25zLCBSZWY8UGVyZm9ybUtleWJvYXJkSW50ZXJhY3Rpb25zQ2FsbGJhY2s+JiYpIG92ZXJyaWRl
OwotICAgIHZvaWQgcGVyZm9ybUludGVyYWN0aW9uU2VxdWVuY2UoY29uc3QgU3RyaW5nJiBoYW5k
bGUsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxGcmFtZUhhbmRsZSwgY29uc3QgSlNPTjo6QXJyYXkm
IHNvdXJjZXMsIGNvbnN0IEpTT046OkFycmF5JiBzdGVwcywgUmVmPFBlcmZvcm1JbnRlcmFjdGlv
blNlcXVlbmNlQ2FsbGJhY2s+JiYpIG92ZXJyaWRlOwotICAgIHZvaWQgY2FuY2VsSW50ZXJhY3Rp
b25TZXF1ZW5jZShjb25zdCBTdHJpbmcmIGhhbmRsZSwgY29uc3QgU3RyaW5nKiBvcHRpb25hbEZy
YW1lSGFuZGxlLCBSZWY8Q2FuY2VsSW50ZXJhY3Rpb25TZXF1ZW5jZUNhbGxiYWNrPiYmKSBvdmVy
cmlkZTsKLSAgICB2b2lkIHRha2VTY3JlZW5zaG90KGNvbnN0IFN0cmluZyYgaGFuZGxlLCBjb25z
dCBTdHJpbmcqIG9wdGlvbmFsRnJhbWVIYW5kbGUsIGNvbnN0IFN0cmluZyogb3B0aW9uYWxOb2Rl
SGFuZGxlLCBjb25zdCBib29sKiBvcHRpb25hbFNjcm9sbEludG9WaWV3SWZOZWVkZWQsIGNvbnN0
IGJvb2wqIG9wdGlvbmFsQ2xpcFRvVmlld3BvcnQsIFJlZjxUYWtlU2NyZWVuc2hvdENhbGxiYWNr
PiYmKSBvdmVycmlkZTsKLSAgICB2b2lkIHJlc29sdmVDaGlsZEZyYW1lSGFuZGxlKGNvbnN0IFN0
cmluZyYgYnJvd3NpbmdDb250ZXh0SGFuZGxlLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFsRnJhbWVI
YW5kbGUsIGNvbnN0IGludCogb3B0aW9uYWxPcmRpbmFsLCBjb25zdCBTdHJpbmcqIG9wdGlvbmFs
TmFtZSwgY29uc3QgU3RyaW5nKiBvcHRpb25hbE5vZGVIYW5kbGUsIFJlZjxSZXNvbHZlQ2hpbGRG
cmFtZUhhbmRsZUNhbGxiYWNrPiYmKSBvdmVycmlkZTsKLSAgICB2b2lkIHJlc29sdmVQYXJlbnRG
cmFtZUhhbmRsZShjb25zdCBTdHJpbmcmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSwgY29uc3QgU3Ry
aW5nJiBmcmFtZUhhbmRsZSwgUmVmPFJlc29sdmVQYXJlbnRGcmFtZUhhbmRsZUNhbGxiYWNrPiYm
KSBvdmVycmlkZTsKLSAgICB2b2lkIGNvbXB1dGVFbGVtZW50TGF5b3V0KGNvbnN0IFN0cmluZyYg
YnJvd3NpbmdDb250ZXh0SGFuZGxlLCBjb25zdCBTdHJpbmcmIGZyYW1lSGFuZGxlLCBjb25zdCBT
dHJpbmcmIG5vZGVIYW5kbGUsIGNvbnN0IGJvb2wqIG9wdGlvbmFsU2Nyb2xsSW50b1ZpZXdJZk5l
ZWRlZCwgY29uc3QgU3RyaW5nJiBjb29yZGluYXRlU3lzdGVtLCBSZWY8SW5zcGVjdG9yOjpBdXRv
bWF0aW9uQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyOjpDb21wdXRlRWxlbWVudExheW91dENhbGxi
YWNrPiYmKSBvdmVycmlkZTsKLSAgICB2b2lkIHNlbGVjdE9wdGlvbkVsZW1lbnQoY29uc3QgU3Ry
aW5nJiBicm93c2luZ0NvbnRleHRIYW5kbGUsIGNvbnN0IFN0cmluZyYgZnJhbWVIYW5kbGUsIGNv
bnN0IFN0cmluZyYgbm9kZUhhbmRsZSwgUmVmPEluc3BlY3Rvcjo6QXV0b21hdGlvbkJhY2tlbmRE
aXNwYXRjaGVySGFuZGxlcjo6U2VsZWN0T3B0aW9uRWxlbWVudENhbGxiYWNrPiYmKSBvdmVycmlk
ZTsKLSAgICB2b2lkIGlzU2hvd2luZ0phdmFTY3JpcHREaWFsb2coSW5zcGVjdG9yOjpFcnJvclN0
cmluZyYsIGNvbnN0IFN0cmluZyYgYnJvd3NpbmdDb250ZXh0SGFuZGxlLCBib29sKiByZXN1bHQp
IG92ZXJyaWRlOwotICAgIHZvaWQgZGlzbWlzc0N1cnJlbnRKYXZhU2NyaXB0RGlhbG9nKEluc3Bl
Y3Rvcjo6RXJyb3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSkg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBhY2NlcHRDdXJyZW50SmF2YVNjcmlwdERpYWxvZyhJbnNwZWN0
b3I6OkVycm9yU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBicm93c2luZ0NvbnRleHRIYW5kbGUpIG92
ZXJyaWRlOwotICAgIHZvaWQgbWVzc2FnZU9mQ3VycmVudEphdmFTY3JpcHREaWFsb2coSW5zcGVj
dG9yOjpFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgYnJvd3NpbmdDb250ZXh0SGFuZGxlLCBT
dHJpbmcqIHRleHQpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0VXNlcklucHV0Rm9yQ3VycmVudEph
dmFTY3JpcHRQcm9tcHQoSW5zcGVjdG9yOjpFcnJvclN0cmluZyYsIGNvbnN0IFN0cmluZyYgYnJv
d3NpbmdDb250ZXh0SGFuZGxlLCBjb25zdCBTdHJpbmcmIHRleHQpIG92ZXJyaWRlOwotICAgIHZv
aWQgc2V0RmlsZXNUb1NlbGVjdEZvckZpbGVVcGxvYWQoSW5zcGVjdG9yOjpFcnJvclN0cmluZyYs
IGNvbnN0IFN0cmluZyYgYnJvd3NpbmdDb250ZXh0SGFuZGxlLCBjb25zdCBKU09OOjpBcnJheSYg
ZmlsZW5hbWVzLCBjb25zdCBKU09OOjpBcnJheSogb3B0aW9uYWxGaWxlQ29udGVudHMpIG92ZXJy
aWRlOwotICAgIHZvaWQgc2V0RmlsZXNGb3JJbnB1dEZpbGVVcGxvYWQoY29uc3QgU3RyaW5nJiBi
cm93c2luZ0NvbnRleHRIYW5kbGUsIGNvbnN0IFN0cmluZyYgZnJhbWVIYW5kbGUsIGNvbnN0IFN0
cmluZyYgbm9kZUhhbmRsZSwgY29uc3QgSlNPTjo6QXJyYXkmIGZpbGVuYW1lcywgUmVmPFNldEZp
bGVzRm9ySW5wdXRGaWxlVXBsb2FkQ2FsbGJhY2s+JiYpIG92ZXJyaWRlOwotICAgIHZvaWQgZ2V0
QWxsQ29va2llcyhjb25zdCBTdHJpbmcmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSwgUmVmPEdldEFs
bENvb2tpZXNDYWxsYmFjaz4mJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkZWxldGVTaW5nbGVDb29r
aWUoY29uc3QgU3RyaW5nJiBicm93c2luZ0NvbnRleHRIYW5kbGUsIGNvbnN0IFN0cmluZyYgY29v
a2llTmFtZSwgUmVmPERlbGV0ZVNpbmdsZUNvb2tpZUNhbGxiYWNrPiYmKSBvdmVycmlkZTsKLSAg
ICB2b2lkIGFkZFNpbmdsZUNvb2tpZShjb25zdCBTdHJpbmcmIGJyb3dzaW5nQ29udGV4dEhhbmRs
ZSwgY29uc3QgSlNPTjo6T2JqZWN0JiBjb29raWUsIFJlZjxBZGRTaW5nbGVDb29raWVDYWxsYmFj
az4mJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkZWxldGVBbGxDb29raWVzKEluc3BlY3Rvcjo6RXJy
b3JTdHJpbmcmLCBjb25zdCBTdHJpbmcmIGJyb3dzaW5nQ29udGV4dEhhbmRsZSkgb3ZlcnJpZGU7
Ci0gICAgdm9pZCBnZXRTZXNzaW9uUGVybWlzc2lvbnMoSW5zcGVjdG9yOjpFcnJvclN0cmluZyYs
IFJlZlB0cjxKU09OOjpBcnJheU9mPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OlNl
c3Npb25QZXJtaXNzaW9uRGF0YT4+JiBvdXRfcGVybWlzc2lvbnMpIG92ZXJyaWRlOwotICAgIHZv
aWQgc2V0U2Vzc2lvblBlcm1pc3Npb25zKEluc3BlY3Rvcjo6RXJyb3JTdHJpbmcmLCBjb25zdCBK
U09OOjpBcnJheSYgaW5fcGVybWlzc2lvbnMpIG92ZXJyaWRlOworICAgIHZvaWQgZ2V0QnJvd3Np
bmdDb250ZXh0cyhSZWY8R2V0QnJvd3NpbmdDb250ZXh0c0NhbGxiYWNrPiYmKTsKKyAgICB2b2lk
IGdldEJyb3dzaW5nQ29udGV4dChjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9u
OjpCcm93c2luZ0NvbnRleHRIYW5kbGUmLCBSZWY8R2V0QnJvd3NpbmdDb250ZXh0Q2FsbGJhY2s+
JiYpOworICAgIHZvaWQgY3JlYXRlQnJvd3NpbmdDb250ZXh0KE9wdGlvbmFsPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dFByZXNlbnRhdGlvbj4mJiwgUmVm
PENyZWF0ZUJyb3dzaW5nQ29udGV4dENhbGxiYWNrPiYmKTsKKyAgICBJbnNwZWN0b3I6OlByb3Rv
Y29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGNsb3NlQnJvd3NpbmdDb250ZXh0KGNvbnN0IEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYpOworICAg
IHZvaWQgc3dpdGNoVG9Ccm93c2luZ0NvbnRleHQoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6
QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJiwgY29uc3QgSW5zcGVjdG9yOjpQcm90
b2NvbDo6QXV0b21hdGlvbjo6RnJhbWVIYW5kbGUmLCBSZWY8U3dpdGNoVG9Ccm93c2luZ0NvbnRl
eHRDYWxsYmFjaz4mJik7CisgICAgdm9pZCBzZXRXaW5kb3dGcmFtZU9mQnJvd3NpbmdDb250ZXh0
KGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhh
bmRsZSYsIFJlZlB0cjxKU09OOjpPYmplY3Q+JiYgb3JpZ2luLCBSZWZQdHI8SlNPTjo6T2JqZWN0
PiYmIHNpemUsIFJlZjxTZXRXaW5kb3dGcmFtZU9mQnJvd3NpbmdDb250ZXh0Q2FsbGJhY2s+JiYp
OworICAgIHZvaWQgbWF4aW1pemVXaW5kb3dPZkJyb3dzaW5nQ29udGV4dChjb25zdCBJbnNwZWN0
b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRIYW5kbGUmLCBSZWY8TWF4
aW1pemVXaW5kb3dPZkJyb3dzaW5nQ29udGV4dENhbGxiYWNrPiYmKTsKKyAgICB2b2lkIGhpZGVX
aW5kb3dPZkJyb3dzaW5nQ29udGV4dChjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0
aW9uOjpCcm93c2luZ0NvbnRleHRIYW5kbGUmLCBSZWY8SGlkZVdpbmRvd09mQnJvd3NpbmdDb250
ZXh0Q2FsbGJhY2s+JiYpOworICAgIHZvaWQgbmF2aWdhdGVCcm93c2luZ0NvbnRleHQoY29uc3Qg
SW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJiwg
Y29uc3QgU3RyaW5nJiB1cmwsIE9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRp
b246OlBhZ2VMb2FkU3RyYXRlZ3k+JiYsIE9wdGlvbmFsPGRvdWJsZT4mJiBwYWdlTG9hZFRpbWVv
dXQsIFJlZjxOYXZpZ2F0ZUJyb3dzaW5nQ29udGV4dENhbGxiYWNrPiYmKTsKKyAgICB2b2lkIGdv
QmFja0luQnJvd3NpbmdDb250ZXh0KGNvbnN0IFN0cmluZyYsIE9wdGlvbmFsPEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkF1dG9tYXRpb246OlBhZ2VMb2FkU3RyYXRlZ3k+JiYsIE9wdGlvbmFsPGRvdWJs
ZT4mJiBwYWdlTG9hZFRpbWVvdXQsIFJlZjxHb0JhY2tJbkJyb3dzaW5nQ29udGV4dENhbGxiYWNr
PiYmKTsKKyAgICB2b2lkIGdvRm9yd2FyZEluQnJvd3NpbmdDb250ZXh0KGNvbnN0IFN0cmluZyYs
IE9wdGlvbmFsPEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OlBhZ2VMb2FkU3RyYXRl
Z3k+JiYsIE9wdGlvbmFsPGRvdWJsZT4mJiBwYWdlTG9hZFRpbWVvdXQsIFJlZjxHb0ZvcndhcmRJ
bkJyb3dzaW5nQ29udGV4dENhbGxiYWNrPiYmKTsKKyAgICB2b2lkIHJlbG9hZEJyb3dzaW5nQ29u
dGV4dChjb25zdCBTdHJpbmcmLCBPcHRpb25hbDxJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0
aW9uOjpQYWdlTG9hZFN0cmF0ZWd5PiYmLCBPcHRpb25hbDxkb3VibGU+JiYgcGFnZUxvYWRUaW1l
b3V0LCBSZWY8UmVsb2FkQnJvd3NpbmdDb250ZXh0Q2FsbGJhY2s+JiYpOworICAgIHZvaWQgd2Fp
dEZvck5hdmlnYXRpb25Ub0NvbXBsZXRlKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9t
YXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6
OkF1dG9tYXRpb246OkZyYW1lSGFuZGxlJiwgT3B0aW9uYWw8SW5zcGVjdG9yOjpQcm90b2NvbDo6
QXV0b21hdGlvbjo6UGFnZUxvYWRTdHJhdGVneT4mJiwgT3B0aW9uYWw8ZG91YmxlPiYmIHBhZ2VM
b2FkVGltZW91dCwgUmVmPFdhaXRGb3JOYXZpZ2F0aW9uVG9Db21wbGV0ZUNhbGxiYWNrPiYmKTsK
KyAgICB2b2lkIGV2YWx1YXRlSmF2YVNjcmlwdEZ1bmN0aW9uKGNvbnN0IEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYsIGNvbnN0IEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkZyYW1lSGFuZGxlJiwgY29uc3QgU3RyaW5nJiBmdW5j
dGlvbiwgUmVmPEpTT046OkFycmF5PiYmIGFyZ3VtZW50cywgT3B0aW9uYWw8Ym9vbD4mJiBleHBl
Y3RzSW1wbGljaXRDYWxsYmFja0FyZ3VtZW50LCBPcHRpb25hbDxkb3VibGU+JiYgY2FsbGJhY2tU
aW1lb3V0LCBSZWY8RXZhbHVhdGVKYXZhU2NyaXB0RnVuY3Rpb25DYWxsYmFjaz4mJik7CisgICAg
dm9pZCBwZXJmb3JtTW91c2VJbnRlcmFjdGlvbihjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpB
dXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRIYW5kbGUmLCBSZWY8SlNPTjo6T2JqZWN0PiYmIHJl
cXVlc3RlZFBvc2l0aW9uLCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpNb3VzZUJ1
dHRvbiwgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6TW91c2VJbnRlcmFjdGlvbiwg
UmVmPEpTT046OkFycmF5PiYmIGtleU1vZGlmaWVycywgUmVmPFBlcmZvcm1Nb3VzZUludGVyYWN0
aW9uQ2FsbGJhY2s+JiYpOworICAgIHZvaWQgcGVyZm9ybUtleWJvYXJkSW50ZXJhY3Rpb25zKGNv
bnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRs
ZSYsIFJlZjxKU09OOjpBcnJheT4mJiBpbnRlcmFjdGlvbnMsIFJlZjxQZXJmb3JtS2V5Ym9hcmRJ
bnRlcmFjdGlvbnNDYWxsYmFjaz4mJik7CisgICAgdm9pZCBwZXJmb3JtSW50ZXJhY3Rpb25TZXF1
ZW5jZShjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRl
eHRIYW5kbGUmLCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpGcmFtZUhh
bmRsZSYsIFJlZjxKU09OOjpBcnJheT4mJiBzb3VyY2VzLCBSZWY8SlNPTjo6QXJyYXk+JiYgc3Rl
cHMsIFJlZjxQZXJmb3JtSW50ZXJhY3Rpb25TZXF1ZW5jZUNhbGxiYWNrPiYmKTsKKyAgICB2b2lk
IGNhbmNlbEludGVyYWN0aW9uU2VxdWVuY2UoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0
b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJiwgY29uc3QgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6QXV0b21hdGlvbjo6RnJhbWVIYW5kbGUmLCBSZWY8Q2FuY2VsSW50ZXJhY3Rpb25TZXF1ZW5j
ZUNhbGxiYWNrPiYmKTsKKyAgICB2b2lkIHRha2VTY3JlZW5zaG90KGNvbnN0IEluc3BlY3Rvcjo6
UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYsIGNvbnN0IEluc3Bl
Y3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkZyYW1lSGFuZGxlJiwgY29uc3QgSW5zcGVjdG9y
OjpQcm90b2NvbDo6QXV0b21hdGlvbjo6Tm9kZUhhbmRsZSYsIE9wdGlvbmFsPGJvb2w+JiYgc2Ny
b2xsSW50b1ZpZXdJZk5lZWRlZCwgT3B0aW9uYWw8Ym9vbD4mJiBjbGlwVG9WaWV3cG9ydCwgUmVm
PFRha2VTY3JlZW5zaG90Q2FsbGJhY2s+JiYpOworICAgIHZvaWQgcmVzb2x2ZUNoaWxkRnJhbWVI
YW5kbGUoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250
ZXh0SGFuZGxlJiwgY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6RnJhbWVI
YW5kbGUmLCBPcHRpb25hbDxpbnQ+JiYgb3JkaW5hbCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25z
dCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpOb2RlSGFuZGxlJiwgUmVmPFJlc29s
dmVDaGlsZEZyYW1lSGFuZGxlQ2FsbGJhY2s+JiYpOworICAgIHZvaWQgcmVzb2x2ZVBhcmVudEZy
YW1lSGFuZGxlKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5n
Q29udGV4dEhhbmRsZSYsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkZy
YW1lSGFuZGxlJiwgUmVmPFJlc29sdmVQYXJlbnRGcmFtZUhhbmRsZUNhbGxiYWNrPiYmKTsKKyAg
ICB2b2lkIGNvbXB1dGVFbGVtZW50TGF5b3V0KGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1
dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkF1dG9tYXRpb246OkZyYW1lSGFuZGxlJiwgY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6
QXV0b21hdGlvbjo6Tm9kZUhhbmRsZSYsIE9wdGlvbmFsPGJvb2w+JiYgc2Nyb2xsSW50b1ZpZXdJ
Zk5lZWRlZCwgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6Q29vcmRpbmF0ZVN5c3Rl
bSwgUmVmPENvbXB1dGVFbGVtZW50TGF5b3V0Q2FsbGJhY2s+JiYpOworICAgIHZvaWQgc2VsZWN0
T3B0aW9uRWxlbWVudChjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93
c2luZ0NvbnRleHRIYW5kbGUmLCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9u
OjpGcmFtZUhhbmRsZSYsIGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246Ok5v
ZGVIYW5kbGUmLCBSZWY8U2VsZWN0T3B0aW9uRWxlbWVudENhbGxiYWNrPiYmKTsKKyAgICBJbnNw
ZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPGJvb2w+IGlzU2hvd2luZ0phdmFTY3JpcHRE
aWFsb2coY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250
ZXh0SGFuZGxlJik7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lk
PiBkaXNtaXNzQ3VycmVudEphdmFTY3JpcHREaWFsb2coY29uc3QgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJik7CisgICAgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBhY2NlcHRDdXJyZW50SmF2YVNjcmlwdERpYWxv
Zyhjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRI
YW5kbGUmKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPFN0cmluZz4g
bWVzc2FnZU9mQ3VycmVudEphdmFTY3JpcHREaWFsb2coY29uc3QgSW5zcGVjdG9yOjpQcm90b2Nv
bDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJik7CisgICAgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBzZXRVc2VySW5wdXRGb3JDdXJyZW50SmF2YVNj
cmlwdFByb21wdChjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2lu
Z0NvbnRleHRIYW5kbGUmLCBjb25zdCBTdHJpbmcmIHRleHQpOworICAgIEluc3BlY3Rvcjo6UHJv
dG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gc2V0RmlsZXNUb1NlbGVjdEZvckZpbGVVcGxvYWQo
Y29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFu
ZGxlJiwgUmVmPEpTT046OkFycmF5PiYmIGZpbGVuYW1lcywgUmVmUHRyPEpTT046OkFycmF5PiYm
IGZpbGVDb250ZW50cyk7CisgICAgdm9pZCBzZXRGaWxlc0ZvcklucHV0RmlsZVVwbG9hZChjb25z
dCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpCcm93c2luZ0NvbnRleHRIYW5kbGUm
LCBjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0aW9uOjpGcmFtZUhhbmRsZSYsIGNv
bnN0IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246Ok5vZGVIYW5kbGUmLCBSZWY8SlNP
Tjo6QXJyYXk+JiYgZmlsZW5hbWVzLCBSZWY8U2V0RmlsZXNGb3JJbnB1dEZpbGVVcGxvYWRDYWxs
YmFjaz4mJik7CisgICAgdm9pZCBnZXRBbGxDb29raWVzKGNvbnN0IEluc3BlY3Rvcjo6UHJvdG9j
b2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYsIFJlZjxHZXRBbGxDb29raWVz
Q2FsbGJhY2s+JiYpOworICAgIHZvaWQgZGVsZXRlU2luZ2xlQ29va2llKGNvbnN0IEluc3BlY3Rv
cjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYsIGNvbnN0IFN0
cmluZyYgY29va2llTmFtZSwgUmVmPERlbGV0ZVNpbmdsZUNvb2tpZUNhbGxiYWNrPiYmKTsKKyAg
ICB2b2lkIGFkZFNpbmdsZUNvb2tpZShjb25zdCBJbnNwZWN0b3I6OlByb3RvY29sOjpBdXRvbWF0
aW9uOjpCcm93c2luZ0NvbnRleHRIYW5kbGUmLCBSZWY8SlNPTjo6T2JqZWN0PiYmIGNvb2tpZSwg
UmVmPEFkZFNpbmdsZUNvb2tpZUNhbGxiYWNrPiYmKTsKKyAgICBJbnNwZWN0b3I6OlByb3RvY29s
OjpFcnJvclN0cmluZ09yPHZvaWQ+IGRlbGV0ZUFsbENvb2tpZXMoY29uc3QgSW5zcGVjdG9yOjpQ
cm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3NpbmdDb250ZXh0SGFuZGxlJik7CisgICAgSW5zcGVj
dG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjxSZWY8SlNPTjo6QXJyYXlPZjxJbnNwZWN0b3I6
OlByb3RvY29sOjpBdXRvbWF0aW9uOjpTZXNzaW9uUGVybWlzc2lvbkRhdGE+Pj4gZ2V0U2Vzc2lv
blBlcm1pc3Npb25zKCk7CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2
b2lkPiBzZXRTZXNzaW9uUGVybWlzc2lvbnMoUmVmPEpTT046OkFycmF5PiYmKTsKIAogI2lmIFBM
QVRGT1JNKE1BQykKLSAgICB2b2lkIGluc3BlY3RCcm93c2luZ0NvbnRleHQoY29uc3QgU3RyaW5n
JiwgY29uc3QgYm9vbCogb3B0aW9uYWxFbmFibGVBdXRvQ2FwdHVyaW5nLCBSZWY8SW5zcGVjdEJy
b3dzaW5nQ29udGV4dENhbGxiYWNrPiYmKSBvdmVycmlkZTsKKyAgICB2b2lkIGluc3BlY3RCcm93
c2luZ0NvbnRleHQoY29uc3QgSW5zcGVjdG9yOjpQcm90b2NvbDo6QXV0b21hdGlvbjo6QnJvd3Np
bmdDb250ZXh0SGFuZGxlJiwgT3B0aW9uYWw8Ym9vbD4mJiBlbmFibGVBdXRvQ2FwdHVyaW5nLCBS
ZWY8SW5zcGVjdEJyb3dzaW5nQ29udGV4dENhbGxiYWNrPiYmKTsKICNlbmRpZgogCiAgICAgLy8g
RXZlbnQgU2ltdWxhdGlvbiBTdXBwb3J0LgpAQCAtMjM4LDcgKzIzOCw3IEBAIHByaXZhdGU6CiAg
ICAgdm9pZCBoaWRlV2luZG93Rm9yUGFnZShXZWJQYWdlUHJveHkmLCBXVEY6OkNvbXBsZXRpb25I
YW5kbGVyPHZvaWQoKT4mJik7CiAKICAgICAvLyBJUEM6Ok1lc3NhZ2VSZWNlaXZlciAoSW1wbGVt
ZW50ZWQgYnkgZ2VuZXJhdGVkIGNvZGUgaW4gV2ViQXV0b21hdGlvblNlc3Npb25NZXNzYWdlUmVj
ZWl2ZXIuY3BwKS4KLSAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYs
IElQQzo6RGVjb2RlciYpIG92ZXJyaWRlOworICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBD
OjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJik7CiAKICAgICAvLyBDYWxsZWQgYnkgV2ViQXV0
b21hdGlvblNlc3Npb24gbWVzc2FnZXMuCiAgICAgdm9pZCBkaWRFdmFsdWF0ZUphdmFTY3JpcHRG
dW5jdGlvbih1aW50NjRfdCBjYWxsYmFja0lELCBjb25zdCBTdHJpbmcmIHJlc3VsdCwgY29uc3Qg
U3RyaW5nJiBlcnJvclR5cGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbk1hY3Jvcy5oIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQXV0b21hdGlvbi9XZWJBdXRvbWF0aW9uU2Vzc2lvbk1hY3Jvcy5oCmluZGV4IDkz
YWY1YWJjNzA4YmQ1OThmMGY0MGJjYzI5NDg1MmEzNzA1Mjk3YWUuLjRkMzZkNjRmZDQwZjQzZjNl
NzgxZDVlNTk1YTNiZTg0Y2NlZWQ2NTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0F1dG9tYXRpb24vV2ViQXV0b21hdGlvblNlc3Npb25NYWNyb3MuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL1dlYkF1dG9tYXRpb25TZXNzaW9uTWFjcm9zLmgK
QEAgLTQ0LDE0ICs0NCwxMiBAQAogLy8gQ29udmVuaWVuY2UgbWFjcm9zIGZvciBmaWxsaW5nIGlu
IHRoZSBlcnJvciBzdHJpbmcgb2Ygc3luY2hyb25vdXMgY29tbWFuZHMgaW4gYmFpbG91dCBicmFu
Y2hlcy4KICNkZWZpbmUgU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUihlcnJvck5hbWUp
IFwKIGRvIHsgXAotICAgIGVycm9yU3RyaW5nID0gU1RSSU5HX0ZPUl9QUkVERUZJTkVEX0VSUk9S
X05BTUUoZXJyb3JOYW1lKTsgXAotICAgIHJldHVybjsgXAorICAgIHJldHVybiBtYWtlVW5leHBl
Y3RlZChTVFJJTkdfRk9SX1BSRURFRklORURfRVJST1JfTkFNRShlcnJvck5hbWUpKTsgXAogfSB3
aGlsZSAoZmFsc2UpCiAKICNkZWZpbmUgU1lOQ19GQUlMX1dJVEhfUFJFREVGSU5FRF9FUlJPUl9B
TkRfREVUQUlMUyhlcnJvck5hbWUsIGRldGFpbHNTdHJpbmcpIFwKIGRvIHsgXAotICAgIGVycm9y
U3RyaW5nID0gU1RSSU5HX0ZPUl9QUkVERUZJTkVEX0VSUk9SX05BTUVfQU5EX0RFVEFJTFMoZXJy
b3JOYW1lLCBkZXRhaWxzU3RyaW5nKTsgXAotICAgIHJldHVybjsgXAorICAgIHJldHVybiBtYWtl
VW5leHBlY3RlZChTVFJJTkdfRk9SX1BSRURFRklORURfRVJST1JfTkFNRV9BTkRfREVUQUlMUyhl
cnJvck5hbWUsIGRldGFpbHNTdHJpbmcpKTsgXAogfSB3aGlsZSAoZmFsc2UpCiAKICNkZWZpbmUg
QVNZTkNfRkFJTF9XSVRIX1BSRURFRklORURfRVJST1IoZXJyb3JOYW1lKSBcCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BdXRvbWF0aW9uL21hYy9XZWJBdXRvbWF0aW9uU2Vz
c2lvbk1hYy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vbWFjL1dlYkF1
dG9tYXRpb25TZXNzaW9uTWFjLm1tCmluZGV4IDNjYWVjYzMzN2QwOTk3OTUzNGU3ZmNiZjVlMWUx
MGJkODM1Zjc2Y2QuLjlkYmYyZTA3ODdhYTk5NzA2YzZmMjkwNzU0YTkxMzkwYWJmMWY3MGQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRpb24vbWFjL1dlYkF1dG9t
YXRpb25TZXNzaW9uTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0F1dG9tYXRp
b24vbWFjL1dlYkF1dG9tYXRpb25TZXNzaW9uTWFjLm1tCkBAIC00NCw3ICs0NCw3IEBAIHVzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOwogCiAjcHJhZ21hIG1hcmsgQ29tbWFuZHMgZm9yICdQTEFURk9S
TShNQUMpJwogCi12b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjppbnNwZWN0QnJvd3NpbmdDb250
ZXh0KGNvbnN0IFN0cmluZyYgaGFuZGxlLCBjb25zdCBib29sKiBvcHRpb25hbEVuYWJsZUF1dG9D
YXB0dXJpbmcsIFJlZjxJbnNwZWN0QnJvd3NpbmdDb250ZXh0Q2FsbGJhY2s+JiYgY2FsbGJhY2sp
Cit2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjppbnNwZWN0QnJvd3NpbmdDb250ZXh0KGNvbnN0
IEluc3BlY3Rvcjo6UHJvdG9jb2w6OkF1dG9tYXRpb246OkJyb3dzaW5nQ29udGV4dEhhbmRsZSYg
aGFuZGxlLCBPcHRpb25hbDxib29sPiYmIGVuYWJsZUF1dG9DYXB0dXJpbmcsIFJlZjxJbnNwZWN0
QnJvd3NpbmdDb250ZXh0Q2FsbGJhY2s+JiYgY2FsbGJhY2spCiB7CiAgICAgV2ViUGFnZVByb3h5
KiBwYWdlID0gd2ViUGFnZVByb3h5Rm9ySGFuZGxlKGhhbmRsZSk7CiAgICAgaWYgKCFwYWdlKQpA
QCAtNjAsNyArNjAsNyBAQCB2b2lkIFdlYkF1dG9tYXRpb25TZXNzaW9uOjppbnNwZWN0QnJvd3Np
bmdDb250ZXh0KGNvbnN0IFN0cmluZyYgaGFuZGxlLCBjb25zdCBibwogICAgICAgICBwYWdlLT5p
bnNwZWN0b3IoKS0+c2hvdygpOwogCiAgICAgICAgIC8vIFN0YXJ0IGNvbGxlY3RpbmcgcHJvZmls
ZSBpbmZvcm1hdGlvbiBpbW1lZGlhdGVseSBzbyB0aGUgZW50aXJlIHNlc3Npb24gaXMgY2FwdHVy
ZWQuCi0gICAgICAgIGlmIChvcHRpb25hbEVuYWJsZUF1dG9DYXB0dXJpbmcgJiYgKm9wdGlvbmFs
RW5hYmxlQXV0b0NhcHR1cmluZykKKyAgICAgICAgaWYgKGVuYWJsZUF1dG9DYXB0dXJpbmcgJiYg
KmVuYWJsZUF1dG9DYXB0dXJpbmcpCiAgICAgICAgICAgICBwYWdlLT5pbnNwZWN0b3IoKS0+dG9n
Z2xlUGFnZVByb2ZpbGluZygpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0luc3BlY3Rvci9BZ2VudHMvSW5zcGVjdG9yQnJvd3NlckFnZW50LmNwcCBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9BZ2VudHMvSW5zcGVjdG9yQnJvd3NlckFn
ZW50LmNwcAppbmRleCBjMWZmYTZjZjYxNDY2NmU0YzhiNWVjNWI0M2NjNjRmODA3MGU2NTk5Li5k
ZjRhMTBhNDBmOGIwMmZjNWQ3NTA5ZTk2YzU5NGViYmM1YWM5ZjE0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvQWdlbnRzL0luc3BlY3RvckJyb3dzZXJBZ2Vu
dC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL0FnZW50cy9JbnNw
ZWN0b3JCcm93c2VyQWdlbnQuY3BwCkBAIC02MCwzNSArNjAsMzQgQEAgdm9pZCBJbnNwZWN0b3JC
cm93c2VyQWdlbnQ6OmRpZENyZWF0ZUZyb250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkZyb250
ZW5kUm91dGUKIAogdm9pZCBJbnNwZWN0b3JCcm93c2VyQWdlbnQ6OndpbGxEZXN0cm95RnJvbnRl
bmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RGlzY29ubmVjdFJlYXNvbikKIHsKLSAgICBFcnJvclN0
cmluZyBpZ25vcmVkOwotICAgIGRpc2FibGUoaWdub3JlZCk7CisgICAgZGlzYWJsZSgpOwogfQog
Ci12b2lkIEluc3BlY3RvckJyb3dzZXJBZ2VudDo6ZW5hYmxlKEVycm9yU3RyaW5nJiBlcnJvclN0
cmluZykKK0luc3BlY3Rvcjo6UHJvdG9jb2w6OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9y
QnJvd3NlckFnZW50OjplbmFibGUoKQogewotICAgIGlmIChlbmFibGVkKCkpIHsKLSAgICAgICAg
ZXJyb3JTdHJpbmcgPSAiQnJvd3NlciBkb21haW4gYWxyZWFkeSBlbmFibGVkIl9zOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQorICAgIGlmIChlbmFibGVkKCkpCisgICAgICAgIHJldHVybiBtYWtl
VW5leHBlY3RlZCgiQnJvd3NlciBkb21haW4gYWxyZWFkeSBlbmFibGVkIl9zKTsKIAogICAgIG1f
aW5zcGVjdGVkUGFnZS5pbnNwZWN0b3JDb250cm9sbGVyKCkuc2V0RW5hYmxlZEJyb3dzZXJBZ2Vu
dCh0aGlzKTsKIAogICAgIGF1dG8qIGluc3BlY3RvciA9IG1faW5zcGVjdGVkUGFnZS5pbnNwZWN0
b3IoKTsKICAgICBBU1NFUlQoaW5zcGVjdG9yKTsKICAgICBtX2luc3BlY3RlZFBhZ2UuaW5zcGVj
dG9yQ2xpZW50KCkuYnJvd3NlckRvbWFpbkVuYWJsZWQobV9pbnNwZWN0ZWRQYWdlLCAqaW5zcGVj
dG9yKTsKKworICAgIHJldHVybiB7IH07CiB9CiAKLXZvaWQgSW5zcGVjdG9yQnJvd3NlckFnZW50
OjpkaXNhYmxlKEVycm9yU3RyaW5nJiBlcnJvclN0cmluZykKK0luc3BlY3Rvcjo6UHJvdG9jb2w6
OkVycm9yU3RyaW5nT3I8dm9pZD4gSW5zcGVjdG9yQnJvd3NlckFnZW50OjpkaXNhYmxlKCkKIHsK
LSAgICBpZiAoIWVuYWJsZWQoKSkgewotICAgICAgICBlcnJvclN0cmluZyA9ICJCcm93c2VyIGRv
bWFpbiBhbHJlYWR5IGRpc2FibGVkIl9zOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlm
ICghZW5hYmxlZCgpKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoIkJyb3dzZXIgZG9t
YWluIGFscmVhZHkgZGlzYWJsZWQiX3MpOwogCiAgICAgbV9pbnNwZWN0ZWRQYWdlLmluc3BlY3Rv
ckNvbnRyb2xsZXIoKS5zZXRFbmFibGVkQnJvd3NlckFnZW50KG51bGxwdHIpOwogCiAgICAgaWYg
KGF1dG8qIGluc3BlY3RvciA9IG1faW5zcGVjdGVkUGFnZS5pbnNwZWN0b3IoKSkKICAgICAgICAg
bV9pbnNwZWN0ZWRQYWdlLmluc3BlY3RvckNsaWVudCgpLmJyb3dzZXJEb21haW5EaXNhYmxlZCht
X2luc3BlY3RlZFBhZ2UsICppbnNwZWN0b3IpOworCisgICAgcmV0dXJuIHsgfTsKIH0KIAogdm9p
ZCBJbnNwZWN0b3JCcm93c2VyQWdlbnQ6OmV4dGVuc2lvbnNFbmFibGVkKEhhc2hNYXA8U3RyaW5n
LCBTdHJpbmc+JiYgZXh0ZW5zaW9uSURUb05hbWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9JbnNwZWN0b3IvQWdlbnRzL0luc3BlY3RvckJyb3dzZXJBZ2VudC5oIGIvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL0FnZW50cy9JbnNwZWN0b3JCcm93c2VyQWdl
bnQuaAppbmRleCBhMTM5NTgzY2Q4ZDg0MjMyOWY0YjNmMzUyMWIzNjI0MGVhYjUzOTExLi4zMzFi
ZmFiYjU1NzQ0ZWU5OGE3ZmYwZjdkYTc2OTUzMWFjNGM3Mjc3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9JbnNwZWN0b3IvQWdlbnRzL0luc3BlY3RvckJyb3dzZXJBZ2VudC5o
CisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9BZ2VudHMvSW5zcGVjdG9y
QnJvd3NlckFnZW50LmgKQEAgLTMzLDIzICszMywyMiBAQAogbmFtZXNwYWNlIFdlYktpdCB7CiAK
IGNsYXNzIFdlYlBhZ2VQcm94eTsKLXR5cGVkZWYgU3RyaW5nIEVycm9yU3RyaW5nOwogCiBjbGFz
cyBJbnNwZWN0b3JCcm93c2VyQWdlbnQgZmluYWwgOiBwdWJsaWMgSW5zcGVjdG9yQWdlbnRCYXNl
LCBwdWJsaWMgSW5zcGVjdG9yOjpCcm93c2VyQmFja2VuZERpc3BhdGNoZXJIYW5kbGVyIHsKICAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbnNwZWN0b3JCcm93c2VyQWdlbnQpOwogICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgogICAgIEluc3BlY3RvckJyb3dzZXJBZ2VudChX
ZWJQYWdlQWdlbnRDb250ZXh0Jik7Ci0gICAgfkluc3BlY3RvckJyb3dzZXJBZ2VudCgpIG92ZXJy
aWRlOworICAgIH5JbnNwZWN0b3JCcm93c2VyQWdlbnQoKTsKICAgICBib29sIGVuYWJsZWQoKSBj
b25zdDsKIAogICAgIC8vIEluc3BlY3RvckFnZW50QmFzZQotICAgIHZvaWQgZGlkQ3JlYXRlRnJv
bnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRSb3V0ZXIqLCBJbnNwZWN0b3I6OkJh
Y2tlbmREaXNwYXRjaGVyKikgb3ZlcnJpZGU7Ci0gICAgdm9pZCB3aWxsRGVzdHJveUZyb250ZW5k
QW5kQmFja2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24pIG92ZXJyaWRlOworICAgIHZv
aWQgZGlkQ3JlYXRlRnJvbnRlbmRBbmRCYWNrZW5kKEluc3BlY3Rvcjo6RnJvbnRlbmRSb3V0ZXIq
LCBJbnNwZWN0b3I6OkJhY2tlbmREaXNwYXRjaGVyKik7CisgICAgdm9pZCB3aWxsRGVzdHJveUZy
b250ZW5kQW5kQmFja2VuZChJbnNwZWN0b3I6OkRpc2Nvbm5lY3RSZWFzb24pOwogCiAgICAgLy8g
QnJvd3NlckJhY2tlbmREaXNwYXRjaGVySGFuZGxlcgotICAgIHZvaWQgZW5hYmxlKEVycm9yU3Ry
aW5nJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkaXNhYmxlKEVycm9yU3RyaW5nJikgb3ZlcnJpZGU7
CisgICAgSW5zcGVjdG9yOjpQcm90b2NvbDo6RXJyb3JTdHJpbmdPcjx2b2lkPiBlbmFibGUoKTsK
KyAgICBJbnNwZWN0b3I6OlByb3RvY29sOjpFcnJvclN0cmluZ09yPHZvaWQ+IGRpc2FibGUoKTsK
IAogICAgIHZvaWQgZXh0ZW5zaW9uc0VuYWJsZWQoSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4mJik7
CiAgICAgdm9pZCBleHRlbnNpb25zRGlzYWJsZWQoSGFzaFNldDxTdHJpbmc+JiYpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL3NvY2tldC9SZW1vdGVJbnNw
ZWN0b3JDbGllbnQuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvSW5zcGVjdG9yL3NvY2tl
dC9SZW1vdGVJbnNwZWN0b3JDbGllbnQuY3BwCmluZGV4IGZiZWU1Y2RmZjM4YjNjNzc5YTI2Mjcz
OGM0MTk1MTViNDQ1OGI5ZGQuLjY3NDc5Y2VmMjJhZmExZDAxNDQzODc2NWJlMGZjMmYxY2Y1MjVm
MmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0luc3BlY3Rvci9zb2NrZXQv
UmVtb3RlSW5zcGVjdG9yQ2xpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9J
bnNwZWN0b3Ivc29ja2V0L1JlbW90ZUluc3BlY3RvckNsaWVudC5jcHAKQEAgLTIwNiwyNSArMjA2
LDM4IEBAIHZvaWQgUmVtb3RlSW5zcGVjdG9yQ2xpZW50OjpzZXRUYXJnZXRMaXN0KGNvbnN0IEV2
ZW50JiBldmVudCkKICAgICBpZiAoIWV2ZW50LmNvbm5lY3Rpb25JRCB8fCAhZXZlbnQubWVzc2Fn
ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVmUHRyPEpTT046OlZhbHVlPiBtZXNzYWdlVmFs
dWU7Ci0gICAgaWYgKCFKU09OOjpWYWx1ZTo6cGFyc2VKU09OKGV2ZW50Lm1lc3NhZ2UudmFsdWUo
KSwgbWVzc2FnZVZhbHVlKSkKKyAgICBhdXRvIG1lc3NhZ2VWYWx1ZSA9IEpTT046OlZhbHVlOjpw
YXJzZUpTT04oZXZlbnQubWVzc2FnZS52YWx1ZSgpKTsKKyAgICBpZiAoIW1lc3NhZ2VWYWx1ZSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVmUHRyPEpTT046OkFycmF5PiBtZXNzYWdlQXJyYXk7
Ci0gICAgaWYgKCFtZXNzYWdlVmFsdWUtPmFzQXJyYXkobWVzc2FnZUFycmF5KSkKKyAgICBhdXRv
IG1lc3NhZ2VBcnJheSA9IG1lc3NhZ2VWYWx1ZS0+YXNBcnJheSgpOworICAgIGlmICghbWVzc2Fn
ZUFycmF5KQogICAgICAgICByZXR1cm47CiAKICAgICBWZWN0b3I8VGFyZ2V0PiB0YXJnZXRMaXN0
OwogICAgIGZvciAoYXV0byYgaXRlbVZhbHVlIDogKm1lc3NhZ2VBcnJheSkgewotICAgICAgICBS
ZWZQdHI8SlNPTjo6T2JqZWN0PiBpdGVtT2JqZWN0OwotICAgICAgICBpZiAoIWl0ZW1WYWx1ZS0+
YXNPYmplY3QoaXRlbU9iamVjdCkpCisgICAgICAgIGF1dG8gaXRlbU9iamVjdCA9IGl0ZW1WYWx1
ZS0+YXNPYmplY3QoKTsKKyAgICAgICAgaWYgKCFpdGVtT2JqZWN0KQogICAgICAgICAgICAgY29u
dGludWU7CiAKICAgICAgICAgVGFyZ2V0IHRhcmdldDsKLSAgICAgICAgaWYgKCFpdGVtT2JqZWN0
LT5nZXRJbnRlZ2VyKCJ0YXJnZXRJRCJfcywgdGFyZ2V0LmlkKQotICAgICAgICAgICAgfHwgIWl0
ZW1PYmplY3QtPmdldFN0cmluZygibmFtZSJfcywgdGFyZ2V0Lm5hbWUpCi0gICAgICAgICAgICB8
fCAhaXRlbU9iamVjdC0+Z2V0U3RyaW5nKCJ1cmwiX3MsIHRhcmdldC51cmwpCi0gICAgICAgICAg
ICB8fCAhaXRlbU9iamVjdC0+Z2V0U3RyaW5nKCJ0eXBlIl9zLCB0YXJnZXQudHlwZSkpCisKKyAg
ICAgICAgYXV0byB0YXJnZXRJRCA9IGl0ZW1PYmplY3QtPmdldEludGVnZXIoInRhcmdldElEIl9z
KTsKKyAgICAgICAgaWYgKCF0YXJnZXRJRCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAg
ICAgIHRhcmdldC5pZCA9ICp0YXJnZXRJRDsKKworICAgICAgICB0YXJnZXQubmFtZSA9IGl0ZW1P
YmplY3QtPmdldFN0cmluZygibmFtZSJfcyk7CisgICAgICAgIGlmICghdGFyZ2V0Lm5hbWUpCisg
ICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICB0YXJnZXQudXJsID0gaXRlbU9iamVjdC0+
Z2V0U3RyaW5nKCJ1cmwiX3MpOworICAgICAgICBpZiAoIXRhcmdldC51cmwpCisgICAgICAgICAg
ICBjb250aW51ZTsKKworICAgICAgICB0YXJnZXQudHlwZSA9IGl0ZW1PYmplY3QtPmdldFN0cmlu
ZygidHlwZSJfcyk7CisgICAgICAgIGlmICghdGFyZ2V0LnR5cGUpCiAgICAgICAgICAgICBjb250
aW51ZTsKIAogICAgICAgICB0YXJnZXRMaXN0LmFwcGVuZChXVEZNb3ZlKHRhcmdldCkpOwpkaWZm
IC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IGFhY2E5ZThh
ZTA2OWUwMDYzMTU0NGQ4OTEzNDg2YWYzYTcwMzI1NzMuLjE2YTgxNzhkYjMzNmJlNTMwZGZiMjQ0
ZTEzMDk0OGNkNGNkMTkzOGUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29s
cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAyMC0wOS0wOSAgRGV2aW4gUm91c3NvICA8
ZHJvdXNzb0BhcHBsZS5jb20+CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogbW9kZXJuaXplIGdl
bmVyYXRlZCBiYWNrZW5kIHByb3RvY29sIGNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNjMwMgorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNjg1
NDc2NDk+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQnJpYW4gQnVyZy4KKworICAgICAgICAqIFRl
c3RXZWJLaXRBUEkvVGVzdHMvV1RGL0pTT05WYWx1ZS5jcHA6CisKIDIwMjAtMDktMDkgIEFha2Fz
aCBKYWluICA8YWFrYXNoX2phaW5AYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBQaGlsaXBwZSBO
b3JtYW5kIHRvIEVXUyBlbWFpbHMgdW5zdWJzY3JpYmUgbGlzdApkaWZmIC0tZ2l0IGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvSlNPTlZhbHVlLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV1RGL0pTT05WYWx1ZS5jcHAKaW5kZXggOTFlYzQxYzNiN2Q0MTYyZDIzZWM0NWU0
ZGIzNjM3YTkzY2RjYmI0NS4uZjNlMzMxZDBkNTI2OGViNDliMThjOGRkZjk0MmI1MGM1NzIzMWRi
NiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvSlNPTlZhbHVlLmNw
cAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9KU09OVmFsdWUuY3BwCkBAIC00
Miw4MiArNDIsNjggQEAgVEVTVChKU09OVmFsdWUsIENvbnN0cnVjdCkKICAgICB7CiAgICAgICAg
IFJlZjxKU09OOjpWYWx1ZT4gdmFsdWUgPSBKU09OOjpWYWx1ZTo6Y3JlYXRlKHRydWUpOwogICAg
ICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+dHlwZSgpID09IEpTT046OlZhbHVlOjpUeXBlOjpCb29s
ZWFuKTsKLSAgICAgICAgYm9vbCBib29sZWFuVmFsdWU7Ci0gICAgICAgIEVYUEVDVF9UUlVFKHZh
bHVlLT5hc0Jvb2xlYW4oYm9vbGVhblZhbHVlKSk7Ci0gICAgICAgIEVYUEVDVF9FUShib29sZWFu
VmFsdWUsIHRydWUpOworICAgICAgICBhdXRvIGJvb2xlYW5WYWx1ZSA9IHZhbHVlLT5hc0Jvb2xl
YW4oKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoYm9vbGVhblZhbHVlKTsKKyAgICAgICAgRVhQRUNU
X0VRKCpib29sZWFuVmFsdWUsIHRydWUpOwogCiAgICAgICAgIHZhbHVlID0gSlNPTjo6VmFsdWU6
OmNyZWF0ZShmYWxzZSk7CiAgICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlLT50eXBlKCkgPT0gSlNP
Tjo6VmFsdWU6OlR5cGU6OkJvb2xlYW4pOwotICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+YXNC
b29sZWFuKGJvb2xlYW5WYWx1ZSkpOwotICAgICAgICBFWFBFQ1RfRVEoYm9vbGVhblZhbHVlLCBm
YWxzZSk7CisgICAgICAgIGJvb2xlYW5WYWx1ZSA9IHZhbHVlLT5hc0Jvb2xlYW4oKTsKKyAgICAg
ICAgRVhQRUNUX1RSVUUoYm9vbGVhblZhbHVlKTsKKyAgICAgICAgRVhQRUNUX0VRKCpib29sZWFu
VmFsdWUsIGZhbHNlKTsKICAgICB9CiAKICAgICB7CiAgICAgICAgIFJlZjxKU09OOjpWYWx1ZT4g
dmFsdWUgPSBKU09OOjpWYWx1ZTo6Y3JlYXRlKDEpOwogICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1
ZS0+dHlwZSgpID09IEpTT046OlZhbHVlOjpUeXBlOjpJbnRlZ2VyKTsKLSAgICAgICAgaW50IGlu
dGVnZXJWYWx1ZTsKLSAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUtPmFzSW50ZWdlcihpbnRlZ2Vy
VmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX0VRKGludGVnZXJWYWx1ZSwgMSk7CisgICAgICAgIGF1
dG8gaW50ZWdlclZhbHVlID0gdmFsdWUtPmFzSW50ZWdlcigpOworICAgICAgICBFWFBFQ1RfVFJV
RShpbnRlZ2VyVmFsdWUpOworICAgICAgICBFWFBFQ1RfRVEoKmludGVnZXJWYWx1ZSwgMSk7CiAK
LSAgICAgICAgLy8gRG91YmxlcyBjYW4gYmUgZ2V0IGFzIGludGVnZXJzLCBidXQgbm90IHRoZSBv
dGhlciB3YXkgYXJvdW5kLgotICAgICAgICBmbG9hdCBmbG9hdFZhbHVlOwotICAgICAgICBFWFBF
Q1RfRkFMU0UodmFsdWUtPmFzRG91YmxlKGZsb2F0VmFsdWUpKTsKKyAgICAgICAgLy8gSW50ZWdl
cnMgY2FuIGJlIGNvbnZlcnRlZCB0byBkb3VibGVzLgorICAgICAgICBhdXRvIGRvdWJsZVZhbHVl
ID0gdmFsdWUtPmFzRG91YmxlKCk7CisgICAgICAgIEVYUEVDVF9UUlVFKGRvdWJsZVZhbHVlKTsK
KyAgICAgICAgRVhQRUNUX0VRKCpkb3VibGVWYWx1ZSwgMSk7CiAKICAgICAgICAgdmFsdWUgPSBK
U09OOjpWYWx1ZTo6Y3JlYXRlKHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpOwotICAg
ICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+YXNJbnRlZ2VyKGludGVnZXJWYWx1ZSkpOwotICAgICAg
ICBFWFBFQ1RfRVEoaW50ZWdlclZhbHVlLCBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgp
KTsKLSAgICAgICAgdW5zaWduZWQgdW5zaWduZWRWYWx1ZTsKLSAgICAgICAgRVhQRUNUX1RSVUUo
dmFsdWUtPmFzSW50ZWdlcih1bnNpZ25lZFZhbHVlKSk7Ci0gICAgICAgIGxvbmcgbG9uZ1ZhbHVl
OwotICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+YXNJbnRlZ2VyKGxvbmdWYWx1ZSkpOwotICAg
ICAgICBsb25nIGxvbmcgbG9uZ0xvbmdWYWx1ZTsKLSAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUt
PmFzSW50ZWdlcihsb25nTG9uZ1ZhbHVlKSk7Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcgdW5zaWdu
ZWRMb25nVmFsdWU7Ci0gICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlLT5hc0ludGVnZXIodW5zaWdu
ZWRMb25nVmFsdWUpKTsKLSAgICAgICAgdW5zaWduZWQgbG9uZyBsb25nIHVuc2lnbmVkTG9uZ0xv
bmdWYWx1ZTsKLSAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUtPmFzSW50ZWdlcih1bnNpZ25lZExv
bmdMb25nVmFsdWUpKTsKKyAgICAgICAgaW50ZWdlclZhbHVlID0gdmFsdWUtPmFzSW50ZWdlcigp
OworICAgICAgICBFWFBFQ1RfVFJVRShpbnRlZ2VyVmFsdWUpOworICAgICAgICBFWFBFQ1RfRVEo
KmludGVnZXJWYWx1ZSwgc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSk7CiAgICAgfQog
CiAgICAgewogICAgICAgICBSZWY8SlNPTjo6VmFsdWU+IHZhbHVlID0gSlNPTjo6VmFsdWU6OmNy
ZWF0ZSgxLjUpOwogICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+dHlwZSgpID09IEpTT046OlZh
bHVlOjpUeXBlOjpEb3VibGUpOwotICAgICAgICBkb3VibGUgZG91YmxlVmFsdWU7Ci0gICAgICAg
IEVYUEVDVF9UUlVFKHZhbHVlLT5hc0RvdWJsZShkb3VibGVWYWx1ZSkpOwotICAgICAgICBFWFBF
Q1RfRVEoZG91YmxlVmFsdWUsIDEuNSk7CiAKLSAgICAgICAgZmxvYXQgZmxvYXRWYWx1ZTsKLSAg
ICAgICAgRVhQRUNUX1RSVUUodmFsdWUtPmFzRG91YmxlKGZsb2F0VmFsdWUpKTsKKyAgICAgICAg
YXV0byBkb3VibGVWYWx1ZSA9IHZhbHVlLT5hc0RvdWJsZSgpOworICAgICAgICBFWFBFQ1RfVFJV
RShkb3VibGVWYWx1ZSk7CisgICAgICAgIEVYUEVDVF9FUSgqZG91YmxlVmFsdWUsIDEuNSk7CiAK
LSAgICAgICAgaW50IGludGVnZXJWYWx1ZTsKLSAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUtPmFz
SW50ZWdlcihpbnRlZ2VyVmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX0VRKGludGVnZXJWYWx1ZSwg
c3RhdGljX2Nhc3Q8aW50PigxLjUpKTsKLQotICAgICAgICB1bnNpZ25lZCB1bnNpZ25lZFZhbHVl
OwotICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+YXNJbnRlZ2VyKHVuc2lnbmVkVmFsdWUpKTsK
LSAgICAgICAgbG9uZyBsb25nVmFsdWU7Ci0gICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlLT5hc0lu
dGVnZXIobG9uZ1ZhbHVlKSk7Ci0gICAgICAgIGxvbmcgbG9uZyBsb25nTG9uZ1ZhbHVlOwotICAg
ICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+YXNJbnRlZ2VyKGxvbmdMb25nVmFsdWUpKTsKLSAgICAg
ICAgdW5zaWduZWQgbG9uZyB1bnNpZ25lZExvbmdWYWx1ZTsKLSAgICAgICAgRVhQRUNUX1RSVUUo
dmFsdWUtPmFzSW50ZWdlcih1bnNpZ25lZExvbmdWYWx1ZSkpOwotICAgICAgICB1bnNpZ25lZCBs
b25nIGxvbmcgdW5zaWduZWRMb25nTG9uZ1ZhbHVlOwotICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1
ZS0+YXNJbnRlZ2VyKHVuc2lnbmVkTG9uZ0xvbmdWYWx1ZSkpOworICAgICAgICAvLyBEb3VibGVz
IGNhbiBiZSBjb252ZXJ0ZWQgdG8gaW50ZWdlcnMuCisgICAgICAgIGF1dG8gaW50ZWdlclZhbHVl
ID0gdmFsdWUtPmFzSW50ZWdlcigpOworICAgICAgICBFWFBFQ1RfVFJVRShpbnRlZ2VyVmFsdWUp
OworICAgICAgICBFWFBFQ1RfRVEoKmludGVnZXJWYWx1ZSwgc3RhdGljX2Nhc3Q8aW50PigxLjUp
KTsKICAgICB9CiAKICAgICB7CiAgICAgICAgIFJlZjxKU09OOjpWYWx1ZT4gdmFsdWUgPSBKU09O
OjpWYWx1ZTo6Y3JlYXRlKCJ3ZWJraXQiKTsKICAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUtPnR5
cGUoKSA9PSBKU09OOjpWYWx1ZTo6VHlwZTo6U3RyaW5nKTsKLSAgICAgICAgU3RyaW5nIHN0cmlu
Z1ZhbHVlOwotICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+YXNTdHJpbmcoc3RyaW5nVmFsdWUp
KTsKKyAgICAgICAgYXV0byBzdHJpbmdWYWx1ZSA9IHZhbHVlLT5hc1N0cmluZygpOworICAgICAg
ICBFWFBFQ1RfVFJVRSghIXN0cmluZ1ZhbHVlKTsKICAgICAgICAgRVhQRUNUX0VRKHN0cmluZ1Zh
bHVlLCAid2Via2l0Iik7CiAKICAgICAgICAgU3RyaW5nIG51bGxTdHJpbmc7CiAgICAgICAgIHZh
bHVlID0gSlNPTjo6VmFsdWU6OmNyZWF0ZShudWxsU3RyaW5nKTsKLSAgICAgICAgRVhQRUNUX1RS
VUUodmFsdWUtPmFzU3RyaW5nKHN0cmluZ1ZhbHVlKSk7CisgICAgICAgIEVYUEVDVF9UUlVFKHZh
bHVlLT50eXBlKCkgPT0gSlNPTjo6VmFsdWU6OlR5cGU6OlN0cmluZyk7CisgICAgICAgIHN0cmlu
Z1ZhbHVlID0gdmFsdWUtPmFzU3RyaW5nKCk7CisgICAgICAgIEVYUEVDVF9GQUxTRSghIXN0cmlu
Z1ZhbHVlKTsKICAgICAgICAgRVhQRUNUX1RSVUUoc3RyaW5nVmFsdWUuaXNOdWxsKCkpOworICAg
ICAgICBFWFBFQ1RfVFJVRShzdHJpbmdWYWx1ZS5pc0VtcHR5KCkpOwogCiAgICAgICAgIHZhbHVl
ID0gSlNPTjo6VmFsdWU6OmNyZWF0ZShlbXB0eVN0cmluZygpKTsKLSAgICAgICAgRVhQRUNUX1RS
VUUodmFsdWUtPmFzU3RyaW5nKHN0cmluZ1ZhbHVlKSk7CisgICAgICAgIEVYUEVDVF9UUlVFKHZh
bHVlLT50eXBlKCkgPT0gSlNPTjo6VmFsdWU6OlR5cGU6OlN0cmluZyk7CisgICAgICAgIHN0cmlu
Z1ZhbHVlID0gdmFsdWUtPmFzU3RyaW5nKCk7CisgICAgICAgIEVYUEVDVF9UUlVFKCEhc3RyaW5n
VmFsdWUpOwogICAgICAgICBFWFBFQ1RfRkFMU0Uoc3RyaW5nVmFsdWUuaXNOdWxsKCkpOwogICAg
ICAgICBFWFBFQ1RfVFJVRShzdHJpbmdWYWx1ZS5pc0VtcHR5KCkpOwogICAgIH0KQEAgLTEzMSw3
ICsxMTcsNyBAQCBURVNUKEpTT05WYWx1ZSwgQ29uc3RydWN0KQogICAgIHsKICAgICAgICAgUmVm
PEpTT046Ok9iamVjdD4gb2JqZWN0ID0gSlNPTjo6T2JqZWN0OjpjcmVhdGUoKTsKICAgICAgICAg
RVhQRUNUX1RSVUUob2JqZWN0LT50eXBlKCkgPT0gSlNPTjo6VmFsdWU6OlR5cGU6Ok9iamVjdCk7
Ci0gICAgICAgIEVYUEVDVF9FUShvYmplY3QtPnNpemUoKSwgMCk7CisgICAgICAgIEVYUEVDVF9F
UShvYmplY3QtPnNpemUoKSwgMFUpOwogICAgIH0KIAogICAgIHsKQEAgLTE1NCw0OCArMTQwLDQ4
IEBAIFRFU1QoSlNPTkFycmF5LCBCYXNpYykKICAgICBFWFBFQ1RfRVEoYXJyYXktPmxlbmd0aCgp
LCAyVSk7CiAgICAgdmFsdWUgPSBhcnJheS0+Z2V0KDEpOwogICAgIEVYUEVDVF9UUlVFKHZhbHVl
LT50eXBlKCkgPT0gSlNPTjo6VmFsdWU6OlR5cGU6OkJvb2xlYW4pOwotICAgIGJvb2wgYm9vbGVh
blZhbHVlOwotICAgIEVYUEVDVF9UUlVFKHZhbHVlLT5hc0Jvb2xlYW4oYm9vbGVhblZhbHVlKSk7
Ci0gICAgRVhQRUNUX0VRKGJvb2xlYW5WYWx1ZSwgdHJ1ZSk7CisgICAgYXV0byBib29sZWFuVmFs
dWUgPSB2YWx1ZS0+YXNCb29sZWFuKCk7CisgICAgRVhQRUNUX1RSVUUoYm9vbGVhblZhbHVlKTsK
KyAgICBFWFBFQ1RfRVEoKmJvb2xlYW5WYWx1ZSwgdHJ1ZSk7CiAKICAgICBhcnJheS0+cHVzaElu
dGVnZXIoMSk7CiAgICAgRVhQRUNUX0VRKGFycmF5LT5sZW5ndGgoKSwgM1UpOwogICAgIHZhbHVl
ID0gYXJyYXktPmdldCgyKTsKICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+dHlwZSgpID09IEpTT046
OlZhbHVlOjpUeXBlOjpJbnRlZ2VyKTsKLSAgICBpbnQgaW50ZWdlclZhbHVlOwotICAgIEVYUEVD
VF9UUlVFKHZhbHVlLT5hc0ludGVnZXIoaW50ZWdlclZhbHVlKSk7Ci0gICAgRVhQRUNUX0VRKGlu
dGVnZXJWYWx1ZSwgMSk7CisgICAgYXV0byBpbnRlZ2VyVmFsdWUgPSB2YWx1ZS0+YXNJbnRlZ2Vy
KCk7CisgICAgRVhQRUNUX1RSVUUoaW50ZWdlclZhbHVlKTsKKyAgICBFWFBFQ1RfRVEoKmludGVn
ZXJWYWx1ZSwgMSk7CiAKICAgICBhcnJheS0+cHVzaERvdWJsZSgxLjUpOwogICAgIEVYUEVDVF9F
UShhcnJheS0+bGVuZ3RoKCksIDRVKTsKICAgICB2YWx1ZSA9IGFycmF5LT5nZXQoMyk7CiAgICAg
RVhQRUNUX1RSVUUodmFsdWUtPnR5cGUoKSA9PSBKU09OOjpWYWx1ZTo6VHlwZTo6RG91YmxlKTsK
LSAgICBkb3VibGUgZG91YmxlVmFsdWU7Ci0gICAgRVhQRUNUX1RSVUUodmFsdWUtPmFzRG91Ymxl
KGRvdWJsZVZhbHVlKSk7Ci0gICAgRVhQRUNUX0VRKGRvdWJsZVZhbHVlLCAxLjUpOworICAgIGF1
dG8gZG91YmxlVmFsdWUgPSB2YWx1ZS0+YXNEb3VibGUoKTsKKyAgICBFWFBFQ1RfVFJVRShkb3Vi
bGVWYWx1ZSk7CisgICAgRVhQRUNUX0VRKCpkb3VibGVWYWx1ZSwgMS41KTsKIAogICAgIGFycmF5
LT5wdXNoU3RyaW5nKCJ3ZWJraXQiKTsKICAgICBFWFBFQ1RfRVEoYXJyYXktPmxlbmd0aCgpLCA1
VSk7CiAgICAgdmFsdWUgPSBhcnJheS0+Z2V0KDQpOwogICAgIEVYUEVDVF9UUlVFKHZhbHVlLT50
eXBlKCkgPT0gSlNPTjo6VmFsdWU6OlR5cGU6OlN0cmluZyk7Ci0gICAgU3RyaW5nIHN0cmluZ1Zh
bHVlOwotICAgIEVYUEVDVF9UUlVFKHZhbHVlLT5hc1N0cmluZyhzdHJpbmdWYWx1ZSkpOworICAg
IGF1dG8gc3RyaW5nVmFsdWUgPSB2YWx1ZS0+YXNTdHJpbmcoKTsKKyAgICBFWFBFQ1RfVFJVRSgh
IXN0cmluZ1ZhbHVlKTsKICAgICBFWFBFQ1RfRVEoc3RyaW5nVmFsdWUsICJ3ZWJraXQiKTsKIAog
ICAgIGFycmF5LT5wdXNoT2JqZWN0KEpTT046Ok9iamVjdDo6Y3JlYXRlKCkpOwogICAgIEVYUEVD
VF9FUShhcnJheS0+bGVuZ3RoKCksIDZVKTsKICAgICB2YWx1ZSA9IGFycmF5LT5nZXQoNSk7CiAg
ICAgRVhQRUNUX1RSVUUodmFsdWUtPnR5cGUoKSA9PSBKU09OOjpWYWx1ZTo6VHlwZTo6T2JqZWN0
KTsKLSAgICBSZWZQdHI8SlNPTjo6T2JqZWN0PiBvYmplY3RWYWx1ZTsKLSAgICBFWFBFQ1RfVFJV
RSh2YWx1ZS0+YXNPYmplY3Qob2JqZWN0VmFsdWUpKTsKLSAgICBFWFBFQ1RfRVEob2JqZWN0VmFs
dWUtPnNpemUoKSwgMCk7CisgICAgYXV0byBvYmplY3RWYWx1ZSA9IHZhbHVlLT5hc09iamVjdCgp
OworICAgIEVYUEVDVF9UUlVFKG9iamVjdFZhbHVlKTsKKyAgICBFWFBFQ1RfRVEob2JqZWN0VmFs
dWUtPnNpemUoKSwgMFUpOwogCiAgICAgYXJyYXktPnB1c2hBcnJheShKU09OOjpBcnJheTo6Y3Jl
YXRlKCkpOwogICAgIEVYUEVDVF9FUShhcnJheS0+bGVuZ3RoKCksIDdVKTsKICAgICB2YWx1ZSA9
IGFycmF5LT5nZXQoNik7CiAgICAgRVhQRUNUX1RSVUUodmFsdWUtPnR5cGUoKSA9PSBKU09OOjpW
YWx1ZTo6VHlwZTo6QXJyYXkpOwotICAgIFJlZlB0cjxKU09OOjpBcnJheT4gYXJyYXlWYWx1ZTsK
LSAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+YXNBcnJheShhcnJheVZhbHVlKSk7CisgICAgYXV0byBh
cnJheVZhbHVlID0gdmFsdWUtPmFzQXJyYXkoKTsKKyAgICBFWFBFQ1RfVFJVRShhcnJheVZhbHVl
KTsKICAgICBFWFBFQ1RfRVEoYXJyYXlWYWx1ZS0+bGVuZ3RoKCksIDBVKTsKIAogICAgIGF1dG8g
aXQgPSBhcnJheS0+YmVnaW4oKTsKQEAgLTI1MSw0MCArMjM3LDQwIEBAIFRFU1QoSlNPTkFycmF5
T2YsIEJhc2ljKQogICAgIEVYUEVDVF9FUShhcnJheS0+bGVuZ3RoKCksIDJVKTsKICAgICB2YWx1
ZSA9IGFycmF5LT5nZXQoMSk7CiAgICAgRVhQRUNUX1RSVUUodmFsdWUtPnR5cGUoKSA9PSBKU09O
OjpWYWx1ZTo6VHlwZTo6SW50ZWdlcik7Ci0gICAgaW50IGludGVnZXJWYWx1ZTsKLSAgICBFWFBF
Q1RfVFJVRSh2YWx1ZS0+YXNJbnRlZ2VyKGludGVnZXJWYWx1ZSkpOwotICAgIEVYUEVDVF9FUShp
bnRlZ2VyVmFsdWUsIDEpOworICAgIGF1dG8gaW50ZWdlclZhbHVlID0gdmFsdWUtPmFzSW50ZWdl
cigpOworICAgIEVYUEVDVF9UUlVFKGludGVnZXJWYWx1ZSk7CisgICAgRVhQRUNUX0VRKCppbnRl
Z2VyVmFsdWUsIDEpOwogCiAgICAgYXJyYXktPmFkZEl0ZW0oMS41KTsKICAgICBFWFBFQ1RfRVEo
YXJyYXktPmxlbmd0aCgpLCAzVSk7CiAgICAgdmFsdWUgPSBhcnJheS0+Z2V0KDIpOwogICAgIEVY
UEVDVF9UUlVFKHZhbHVlLT50eXBlKCkgPT0gSlNPTjo6VmFsdWU6OlR5cGU6OkRvdWJsZSk7Ci0g
ICAgZG91YmxlIGRvdWJsZVZhbHVlOwotICAgIEVYUEVDVF9UUlVFKHZhbHVlLT5hc0RvdWJsZShk
b3VibGVWYWx1ZSkpOwotICAgIEVYUEVDVF9FUShkb3VibGVWYWx1ZSwgMS41KTsKKyAgICBhdXRv
IGRvdWJsZVZhbHVlID0gdmFsdWUtPmFzRG91YmxlKCk7CisgICAgRVhQRUNUX1RSVUUoZG91Ymxl
VmFsdWUpOworICAgIEVYUEVDVF9FUSgqZG91YmxlVmFsdWUsIDEuNSk7CiAKICAgICBhcnJheS0+
YWRkSXRlbSgid2Via2l0Iik7CiAgICAgRVhQRUNUX0VRKGFycmF5LT5sZW5ndGgoKSwgNFUpOwog
ICAgIHZhbHVlID0gYXJyYXktPmdldCgzKTsKICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+dHlwZSgp
ID09IEpTT046OlZhbHVlOjpUeXBlOjpTdHJpbmcpOwotICAgIFN0cmluZyBzdHJpbmdWYWx1ZTsK
LSAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+YXNTdHJpbmcoc3RyaW5nVmFsdWUpKTsKKyAgICBhdXRv
IHN0cmluZ1ZhbHVlID0gdmFsdWUtPmFzU3RyaW5nKCk7CisgICAgRVhQRUNUX1RSVUUoISFzdHJp
bmdWYWx1ZSk7CiAgICAgRVhQRUNUX0VRKHN0cmluZ1ZhbHVlLCAid2Via2l0Iik7CiAKICAgICBh
cnJheS0+YWRkSXRlbShKU09OOjpPYmplY3Q6OmNyZWF0ZSgpKTsKICAgICBFWFBFQ1RfRVEoYXJy
YXktPmxlbmd0aCgpLCA1VSk7CiAgICAgdmFsdWUgPSBhcnJheS0+Z2V0KDQpOwogICAgIEVYUEVD
VF9UUlVFKHZhbHVlLT50eXBlKCkgPT0gSlNPTjo6VmFsdWU6OlR5cGU6Ok9iamVjdCk7Ci0gICAg
UmVmUHRyPEpTT046Ok9iamVjdD4gb2JqZWN0VmFsdWU7Ci0gICAgRVhQRUNUX1RSVUUodmFsdWUt
PmFzT2JqZWN0KG9iamVjdFZhbHVlKSk7Ci0gICAgRVhQRUNUX0VRKG9iamVjdFZhbHVlLT5zaXpl
KCksIDApOworICAgIGF1dG8gb2JqZWN0VmFsdWUgPSB2YWx1ZS0+YXNPYmplY3QoKTsKKyAgICBF
WFBFQ1RfVFJVRShvYmplY3RWYWx1ZSk7CisgICAgRVhQRUNUX0VRKG9iamVjdFZhbHVlLT5zaXpl
KCksIDBVKTsKIAogICAgIGFycmF5LT5hZGRJdGVtKEpTT046OkFycmF5OjpjcmVhdGUoKSk7CiAg
ICAgRVhQRUNUX0VRKGFycmF5LT5sZW5ndGgoKSwgNlUpOwogICAgIHZhbHVlID0gYXJyYXktPmdl
dCg1KTsKICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+dHlwZSgpID09IEpTT046OlZhbHVlOjpUeXBl
OjpBcnJheSk7Ci0gICAgUmVmUHRyPEpTT046OkFycmF5PiBhcnJheVZhbHVlOwotICAgIEVYUEVD
VF9UUlVFKHZhbHVlLT5hc0FycmF5KGFycmF5VmFsdWUpKTsKKyAgICBhdXRvIGFycmF5VmFsdWUg
PSB2YWx1ZS0+YXNBcnJheSgpOworICAgIEVYUEVDVF9UUlVFKGFycmF5VmFsdWUpOwogICAgIEVY
UEVDVF9FUShhcnJheVZhbHVlLT5sZW5ndGgoKSwgMFUpOwogCiAgICAgYXV0byBpdCA9IGFycmF5
LT5iZWdpbigpOwpAQCAtMzI0LDQ1ICszMTAsNDUgQEAgVEVTVChKU09OT2JqZWN0LCBCYXNpYykK
ICAgICBSZWY8SlNPTjo6T2JqZWN0PiBvYmplY3QgPSBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpOwog
CiAgICAgb2JqZWN0LT5zZXRWYWx1ZSgibnVsbCIsIEpTT046OlZhbHVlOjpudWxsKCkpOwotICAg
IEVYUEVDVF9FUShvYmplY3QtPnNpemUoKSwgMSk7Ci0gICAgUmVmUHRyPEpTT046OlZhbHVlPiB2
YWx1ZTsKLSAgICBFWFBFQ1RfVFJVRShvYmplY3QtPmdldFZhbHVlKCJudWxsIiwgdmFsdWUpKTsK
KyAgICBFWFBFQ1RfRVEob2JqZWN0LT5zaXplKCksIDFVKTsKKyAgICBhdXRvIHZhbHVlID0gb2Jq
ZWN0LT5nZXRWYWx1ZSgibnVsbCIpOworICAgIEVYUEVDVF9UUlVFKHZhbHVlKTsKICAgICBFWFBF
Q1RfVFJVRSh2YWx1ZS0+aXNOdWxsKCkpOwogCiAgICAgb2JqZWN0LT5zZXRCb29sZWFuKCJib29s
ZWFuIiwgdHJ1ZSk7Ci0gICAgRVhQRUNUX0VRKG9iamVjdC0+c2l6ZSgpLCAyKTsKLSAgICBib29s
IGJvb2xlYW5WYWx1ZTsKLSAgICBFWFBFQ1RfVFJVRShvYmplY3QtPmdldEJvb2xlYW4oImJvb2xl
YW4iLCBib29sZWFuVmFsdWUpKTsKLSAgICBFWFBFQ1RfRVEoYm9vbGVhblZhbHVlLCB0cnVlKTsK
KyAgICBFWFBFQ1RfRVEob2JqZWN0LT5zaXplKCksIDJVKTsKKyAgICBhdXRvIGJvb2xlYW5WYWx1
ZSA9IG9iamVjdC0+Z2V0Qm9vbGVhbigiYm9vbGVhbiIpOworICAgIEVYUEVDVF9UUlVFKGJvb2xl
YW5WYWx1ZSk7CisgICAgRVhQRUNUX0VRKCpib29sZWFuVmFsdWUsIHRydWUpOwogCiAgICAgb2Jq
ZWN0LT5zZXRJbnRlZ2VyKCJpbnRlZ2VyIiwgMSk7Ci0gICAgRVhQRUNUX0VRKG9iamVjdC0+c2l6
ZSgpLCAzKTsKLSAgICBpbnQgaW50ZWdlclZhbHVlOwotICAgIEVYUEVDVF9UUlVFKG9iamVjdC0+
Z2V0SW50ZWdlcigiaW50ZWdlciIsIGludGVnZXJWYWx1ZSkpOwotICAgIEVYUEVDVF9FUShpbnRl
Z2VyVmFsdWUsIDEpOworICAgIEVYUEVDVF9FUShvYmplY3QtPnNpemUoKSwgM1UpOworICAgIGF1
dG8gaW50ZWdlclZhbHVlID0gb2JqZWN0LT5nZXRJbnRlZ2VyKCJpbnRlZ2VyIik7CisgICAgRVhQ
RUNUX1RSVUUoaW50ZWdlclZhbHVlKTsKKyAgICBFWFBFQ1RfRVEoKmludGVnZXJWYWx1ZSwgMSk7
CiAKICAgICBvYmplY3QtPnNldERvdWJsZSgiZG91YmxlIiwgMS41KTsKLSAgICBFWFBFQ1RfRVEo
b2JqZWN0LT5zaXplKCksIDQpOwotICAgIGRvdWJsZSBkb3VibGVWYWx1ZTsKLSAgICBFWFBFQ1Rf
VFJVRShvYmplY3QtPmdldERvdWJsZSgiZG91YmxlIiwgZG91YmxlVmFsdWUpKTsKLSAgICBFWFBF
Q1RfRVEoZG91YmxlVmFsdWUsIDEuNSk7CisgICAgRVhQRUNUX0VRKG9iamVjdC0+c2l6ZSgpLCA0
VSk7CisgICAgYXV0byBkb3VibGVWYWx1ZSA9IG9iamVjdC0+Z2V0RG91YmxlKCJkb3VibGUiKTsK
KyAgICBFWFBFQ1RfVFJVRShkb3VibGVWYWx1ZSk7CisgICAgRVhQRUNUX0VRKCpkb3VibGVWYWx1
ZSwgMS41KTsKIAogICAgIG9iamVjdC0+c2V0U3RyaW5nKCJzdHJpbmciLCAid2Via2l0Iik7Ci0g
ICAgRVhQRUNUX0VRKG9iamVjdC0+c2l6ZSgpLCA1KTsKLSAgICBTdHJpbmcgc3RyaW5nVmFsdWU7
Ci0gICAgRVhQRUNUX1RSVUUob2JqZWN0LT5nZXRTdHJpbmcoInN0cmluZyIsIHN0cmluZ1ZhbHVl
KSk7CisgICAgRVhQRUNUX0VRKG9iamVjdC0+c2l6ZSgpLCA1VSk7CisgICAgYXV0byBzdHJpbmdW
YWx1ZSA9IG9iamVjdC0+Z2V0U3RyaW5nKCJzdHJpbmciKTsKKyAgICBFWFBFQ1RfVFJVRSghIXN0
cmluZ1ZhbHVlKTsKICAgICBFWFBFQ1RfRVEoc3RyaW5nVmFsdWUsICJ3ZWJraXQiKTsKIAogICAg
IG9iamVjdC0+c2V0T2JqZWN0KCJvYmplY3QiLCBKU09OOjpPYmplY3Q6OmNyZWF0ZSgpKTsKLSAg
ICBFWFBFQ1RfRVEob2JqZWN0LT5zaXplKCksIDYpOwotICAgIFJlZlB0cjxKU09OOjpPYmplY3Q+
IG9iamVjdFZhbHVlOwotICAgIEVYUEVDVF9UUlVFKG9iamVjdC0+Z2V0T2JqZWN0KCJvYmplY3Qi
LCBvYmplY3RWYWx1ZSkpOwotICAgIEVYUEVDVF9FUShvYmplY3RWYWx1ZS0+c2l6ZSgpLCAwKTsK
KyAgICBFWFBFQ1RfRVEob2JqZWN0LT5zaXplKCksIDZVKTsKKyAgICBhdXRvIG9iamVjdFZhbHVl
ID0gb2JqZWN0LT5nZXRPYmplY3QoIm9iamVjdCIpOworICAgIEVYUEVDVF9UUlVFKG9iamVjdFZh
bHVlKTsKKyAgICBFWFBFQ1RfRVEob2JqZWN0VmFsdWUtPnNpemUoKSwgMFUpOwogCiAgICAgb2Jq
ZWN0LT5zZXRBcnJheSgiYXJyYXkiLCBKU09OOjpBcnJheTo6Y3JlYXRlKCkpOwotICAgIEVYUEVD
VF9FUShvYmplY3QtPnNpemUoKSwgNyk7Ci0gICAgUmVmUHRyPEpTT046OkFycmF5PiBhcnJheVZh
bHVlOwotICAgIEVYUEVDVF9UUlVFKG9iamVjdC0+Z2V0QXJyYXkoImFycmF5IiwgYXJyYXlWYWx1
ZSkpOworICAgIEVYUEVDVF9FUShvYmplY3QtPnNpemUoKSwgN1UpOworICAgIGF1dG8gYXJyYXlW
YWx1ZSA9IG9iamVjdC0+Z2V0QXJyYXkoImFycmF5Iik7CisgICAgRVhQRUNUX1RSVUUoYXJyYXlW
YWx1ZSk7CiAgICAgRVhQRUNUX0VRKGFycmF5VmFsdWUtPmxlbmd0aCgpLCAwVSk7CiAKICAgICBW
ZWN0b3I8Y29uc3QgY2hhcio+IGtleXMgPSB7ICJudWxsIiwgImJvb2xlYW4iLCAiaW50ZWdlciIs
ICJkb3VibGUiLCAic3RyaW5nIiwgIm9iamVjdCIsICJhcnJheSIgfTsKQEAgLTM3NiwzMSArMzYy
LDMxIEBAIFRFU1QoSlNPTk9iamVjdCwgQmFzaWMpCiAgICAgRVhQRUNUX1RSVUUoa2V5cy5pc0Vt
cHR5KCkpOwogCiAgICAgb2JqZWN0LT5yZW1vdmUoIm51bGwiKTsKLSAgICBFWFBFQ1RfRVEob2Jq
ZWN0LT5zaXplKCksIDYpOworICAgIEVYUEVDVF9FUShvYmplY3QtPnNpemUoKSwgNlUpOwogICAg
IEVYUEVDVF9UUlVFKG9iamVjdC0+ZmluZCgibnVsbCIpID09IG9iamVjdC0+ZW5kKCkpOwogCiAg
ICAgb2JqZWN0LT5yZW1vdmUoImJvb2xlYW4iKTsKLSAgICBFWFBFQ1RfRVEob2JqZWN0LT5zaXpl
KCksIDUpOworICAgIEVYUEVDVF9FUShvYmplY3QtPnNpemUoKSwgNVUpOwogICAgIEVYUEVDVF9U
UlVFKG9iamVjdC0+ZmluZCgiYm9vbGVhbiIpID09IG9iamVjdC0+ZW5kKCkpOwogCiAgICAgb2Jq
ZWN0LT5yZW1vdmUoImludGVnZXIiKTsKLSAgICBFWFBFQ1RfRVEob2JqZWN0LT5zaXplKCksIDQp
OworICAgIEVYUEVDVF9FUShvYmplY3QtPnNpemUoKSwgNFUpOwogICAgIEVYUEVDVF9UUlVFKG9i
amVjdC0+ZmluZCgiaW50ZWdlciIpID09IG9iamVjdC0+ZW5kKCkpOwogCiAgICAgb2JqZWN0LT5y
ZW1vdmUoImRvdWJsZSIpOwotICAgIEVYUEVDVF9FUShvYmplY3QtPnNpemUoKSwgMyk7CisgICAg
RVhQRUNUX0VRKG9iamVjdC0+c2l6ZSgpLCAzVSk7CiAgICAgRVhQRUNUX1RSVUUob2JqZWN0LT5m
aW5kKCJkb3VibGUiKSA9PSBvYmplY3QtPmVuZCgpKTsKIAogICAgIG9iamVjdC0+cmVtb3ZlKCJz
dHJpbmciKTsKLSAgICBFWFBFQ1RfRVEob2JqZWN0LT5zaXplKCksIDIpOworICAgIEVYUEVDVF9F
UShvYmplY3QtPnNpemUoKSwgMlUpOwogICAgIEVYUEVDVF9UUlVFKG9iamVjdC0+ZmluZCgic3Ry
aW5nIikgPT0gb2JqZWN0LT5lbmQoKSk7CiAKICAgICBvYmplY3QtPnJlbW92ZSgib2JqZWN0Iik7
Ci0gICAgRVhQRUNUX0VRKG9iamVjdC0+c2l6ZSgpLCAxKTsKKyAgICBFWFBFQ1RfRVEob2JqZWN0
LT5zaXplKCksIDFVKTsKICAgICBFWFBFQ1RfVFJVRShvYmplY3QtPmZpbmQoIm9iamVjdCIpID09
IG9iamVjdC0+ZW5kKCkpOwogCiAgICAgb2JqZWN0LT5yZW1vdmUoImFycmF5Iik7Ci0gICAgRVhQ
RUNUX0VRKG9iamVjdC0+c2l6ZSgpLCAwKTsKKyAgICBFWFBFQ1RfRVEob2JqZWN0LT5zaXplKCks
IDBVKTsKICAgICBFWFBFQ1RfVFJVRShvYmplY3QtPmZpbmQoImFycmF5IikgPT0gb2JqZWN0LT5l
bmQoKSk7CiB9CiAKQEAgLTQ3OSwyMDEgKzQ2NSwyMDQgQEAgVEVTVChKU09OVmFsdWUsIFRvSlNP
TlN0cmluZykKIFRFU1QoSlNPTlZhbHVlLCBQYXJzZUpTT04pCiB7CiAgICAgewotICAgICAgICBS
ZWZQdHI8SlNPTjo6VmFsdWU+IHZhbHVlOwotICAgICAgICBFWFBFQ1RfVFJVRShKU09OOjpWYWx1
ZTo6cGFyc2VKU09OKCJudWxsIiwgdmFsdWUpKTsKKyAgICAgICAgYXV0byB2YWx1ZSA9IEpTT046
OlZhbHVlOjpwYXJzZUpTT04oIm51bGwiKTsKKyAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUpOwog
ICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+aXNOdWxsKCkpOwogICAgIH0KIAogICAgIHsKLSAg
ICAgICAgUmVmUHRyPEpTT046OlZhbHVlPiB2YWx1ZTsKLSAgICAgICAgRVhQRUNUX1RSVUUoSlNP
Tjo6VmFsdWU6OnBhcnNlSlNPTigidHJ1ZSIsIHZhbHVlKSk7CisgICAgICAgIGF1dG8gdmFsdWUg
PSBKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJ0cnVlIik7CisgICAgICAgIEVYUEVDVF9UUlVFKHZh
bHVlKTsKICAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUtPnR5cGUoKSA9PSBKU09OOjpWYWx1ZTo6
VHlwZTo6Qm9vbGVhbik7Ci0gICAgICAgIGJvb2wgYm9vbGVhblZhbHVlOwotICAgICAgICBFWFBF
Q1RfVFJVRSh2YWx1ZS0+YXNCb29sZWFuKGJvb2xlYW5WYWx1ZSkpOwotICAgICAgICBFWFBFQ1Rf
RVEoYm9vbGVhblZhbHVlLCB0cnVlKTsKKyAgICAgICAgYXV0byBib29sZWFuVmFsdWUgPSB2YWx1
ZS0+YXNCb29sZWFuKCk7CisgICAgICAgIEVYUEVDVF9UUlVFKGJvb2xlYW5WYWx1ZSk7CisgICAg
ICAgIEVYUEVDVF9FUSgqYm9vbGVhblZhbHVlLCB0cnVlKTsKIAotICAgICAgICBFWFBFQ1RfVFJV
RShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJmYWxzZSIsIHZhbHVlKSk7CisgICAgICAgIHZhbHVl
ID0gSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiZmFsc2UiKTsKKyAgICAgICAgRVhQRUNUX1RSVUUo
dmFsdWUpOwogICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+dHlwZSgpID09IEpTT046OlZhbHVl
OjpUeXBlOjpCb29sZWFuKTsKLSAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUtPmFzQm9vbGVhbihi
b29sZWFuVmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX0VRKGJvb2xlYW5WYWx1ZSwgZmFsc2UpOwor
ICAgICAgICBib29sZWFuVmFsdWUgPSB2YWx1ZS0+YXNCb29sZWFuKCk7CisgICAgICAgIEVYUEVD
VF9UUlVFKGJvb2xlYW5WYWx1ZSk7CisgICAgICAgIEVYUEVDVF9FUSgqYm9vbGVhblZhbHVlLCBm
YWxzZSk7CiAgICAgfQogCiAgICAgewotICAgICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHZhbHVl
OwotICAgICAgICBFWFBFQ1RfVFJVRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCIxIiwgdmFsdWUp
KTsKKyAgICAgICAgYXV0byB2YWx1ZSA9IEpTT046OlZhbHVlOjpwYXJzZUpTT04oIjEiKTsKKyAg
ICAgICAgRVhQRUNUX1RSVUUodmFsdWUpOwogICAgICAgICAvLyBOdW1iZXJzIGFyZSBhbHdheXMg
cGFyc2VkIGFzIGRvdWJsZS4KICAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUtPnR5cGUoKSA9PSBK
U09OOjpWYWx1ZTo6VHlwZTo6RG91YmxlKTsKLSAgICAgICAgZG91YmxlIGRvdWJsZVZhbHVlOwot
ICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1ZS0+YXNEb3VibGUoZG91YmxlVmFsdWUpKTsKLSAgICAg
ICAgRVhQRUNUX0VRKGRvdWJsZVZhbHVlLCAxLjApOworICAgICAgICBhdXRvIGRvdWJsZVZhbHVl
ID0gdmFsdWUtPmFzRG91YmxlKCk7CisgICAgICAgIEVYUEVDVF9UUlVFKGRvdWJsZVZhbHVlKTsK
KyAgICAgICAgRVhQRUNUX0VRKCpkb3VibGVWYWx1ZSwgMS4wKTsKIAotICAgICAgICBFWFBFQ1Rf
VFJVRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCIxLjUiLCB2YWx1ZSkpOworICAgICAgICB2YWx1
ZSA9IEpTT046OlZhbHVlOjpwYXJzZUpTT04oIjEuNSIpOworICAgICAgICBFWFBFQ1RfVFJVRSh2
YWx1ZSk7CiAgICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlLT50eXBlKCkgPT0gSlNPTjo6VmFsdWU6
OlR5cGU6OkRvdWJsZSk7Ci0gICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlLT5hc0RvdWJsZShkb3Vi
bGVWYWx1ZSkpOwotICAgICAgICBFWFBFQ1RfRVEoZG91YmxlVmFsdWUsIDEuNSk7CisgICAgICAg
IGRvdWJsZVZhbHVlID0gdmFsdWUtPmFzRG91YmxlKCk7CisgICAgICAgIEVYUEVDVF9UUlVFKGRv
dWJsZVZhbHVlKTsKKyAgICAgICAgRVhQRUNUX0VRKCpkb3VibGVWYWx1ZSwgMS41KTsKICAgICB9
CiAKICAgICB7Ci0gICAgICAgIFJlZlB0cjxKU09OOjpWYWx1ZT4gdmFsdWU7Ci0gICAgICAgIEVY
UEVDVF9UUlVFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIlwic3RyaW5nXCIiLCB2YWx1ZSkpOwor
ICAgICAgICBhdXRvIHZhbHVlID0gSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiXCJzdHJpbmdcIiIp
OworICAgICAgICBFWFBFQ1RfVFJVRSh2YWx1ZSk7CiAgICAgICAgIEVYUEVDVF9UUlVFKHZhbHVl
LT50eXBlKCkgPT0gSlNPTjo6VmFsdWU6OlR5cGU6OlN0cmluZyk7Ci0gICAgICAgIFN0cmluZyBz
dHJpbmdWYWx1ZTsKLSAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUtPmFzU3RyaW5nKHN0cmluZ1Zh
bHVlKSk7CisgICAgICAgIGF1dG8gc3RyaW5nVmFsdWUgPSB2YWx1ZS0+YXNTdHJpbmcoKTsKKyAg
ICAgICAgRVhQRUNUX1RSVUUoISFzdHJpbmdWYWx1ZSk7CiAgICAgICAgIEVYUEVDVF9FUShzdHJp
bmdWYWx1ZSwgInN0cmluZyIpOwogICAgIH0KIAogICAgIHsKLSAgICAgICAgUmVmUHRyPEpTT046
OlZhbHVlPiB2YWx1ZTsKLSAgICAgICAgRVhQRUNUX1RSVUUoSlNPTjo6VmFsdWU6OnBhcnNlSlNP
TigiW10iLCB2YWx1ZSkpOworICAgICAgICBhdXRvIHZhbHVlID0gSlNPTjo6VmFsdWU6OnBhcnNl
SlNPTigiW10iKTsKKyAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUpOwogICAgICAgICBFWFBFQ1Rf
VFJVRSh2YWx1ZS0+dHlwZSgpID09IEpTT046OlZhbHVlOjpUeXBlOjpBcnJheSk7Ci0gICAgICAg
IFJlZlB0cjxKU09OOjpBcnJheT4gYXJyYXlWYWx1ZTsKLSAgICAgICAgRVhQRUNUX1RSVUUodmFs
dWUtPmFzQXJyYXkoYXJyYXlWYWx1ZSkpOworICAgICAgICBhdXRvIGFycmF5VmFsdWUgPSB2YWx1
ZS0+YXNBcnJheSgpOworICAgICAgICBFWFBFQ1RfVFJVRShhcnJheVZhbHVlKTsKICAgICAgICAg
RVhQRUNUX0VRKGFycmF5VmFsdWUtPmxlbmd0aCgpLCAwVSk7CiAKLSAgICAgICAgRVhQRUNUX1RS
VUUoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiW251bGwsIDEgLDIuNSxbe1wiZm9vXCI6XCJiYXJc
In0se1wiYmF6XCI6ZmFsc2V9XSxcIndlYmtpdFwiXSIsIHZhbHVlKSk7CisgICAgICAgIHZhbHVl
ID0gSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiW251bGwsIDEgLDIuNSxbe1wiZm9vXCI6XCJiYXJc
In0se1wiYmF6XCI6ZmFsc2V9XSxcIndlYmtpdFwiXSIpOworICAgICAgICBFWFBFQ1RfVFJVRSh2
YWx1ZSk7CiAgICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlLT50eXBlKCkgPT0gSlNPTjo6VmFsdWU6
OlR5cGU6OkFycmF5KTsKLSAgICAgICAgRVhQRUNUX1RSVUUodmFsdWUtPmFzQXJyYXkoYXJyYXlW
YWx1ZSkpOworICAgICAgICBhcnJheVZhbHVlID0gdmFsdWUtPmFzQXJyYXkoKTsKKyAgICAgICAg
RVhQRUNUX1RSVUUoYXJyYXlWYWx1ZSk7CiAgICAgICAgIEVYUEVDVF9FUShhcnJheVZhbHVlLT5s
ZW5ndGgoKSwgNVUpOwogICAgICAgICBhdXRvIGl0ID0gYXJyYXlWYWx1ZS0+YmVnaW4oKTsKLSAg
ICAgICAgUmVmUHRyPEpTT046OlZhbHVlPiBpdGVtVmFsdWUgPSBpdC0+Z2V0KCk7Ci0gICAgICAg
IEVYUEVDVF9UUlVFKGl0ZW1WYWx1ZS0+dHlwZSgpID09IEpTT046OlZhbHVlOjpUeXBlOjpOdWxs
KTsKKyAgICAgICAgRVhQRUNUX1RSVUUoKCppdCktPnR5cGUoKSA9PSBKU09OOjpWYWx1ZTo6VHlw
ZTo6TnVsbCk7CiAgICAgICAgICsraXQ7CiAgICAgICAgIEVYUEVDVF9GQUxTRShpdCA9PSBhcnJh
eVZhbHVlLT5lbmQoKSk7CiAKLSAgICAgICAgaXRlbVZhbHVlID0gaXQtPmdldCgpOwotICAgICAg
ICBFWFBFQ1RfVFJVRShpdGVtVmFsdWUtPnR5cGUoKSA9PSBKU09OOjpWYWx1ZTo6VHlwZTo6RG91
YmxlKTsKLSAgICAgICAgaW50IGludGVnZXJWYWx1ZTsKLSAgICAgICAgRVhQRUNUX1RSVUUoaXRl
bVZhbHVlLT5hc0ludGVnZXIoaW50ZWdlclZhbHVlKSk7Ci0gICAgICAgIEVYUEVDVF9FUShpbnRl
Z2VyVmFsdWUsIDEpOworICAgICAgICBFWFBFQ1RfVFJVRSgoKml0KS0+dHlwZSgpID09IEpTT046
OlZhbHVlOjpUeXBlOjpEb3VibGUpOworICAgICAgICBhdXRvIGludGVnZXJWYWx1ZSA9ICgqaXQp
LT5hc0ludGVnZXIoKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoaW50ZWdlclZhbHVlKTsKKyAgICAg
ICAgRVhQRUNUX0VRKCppbnRlZ2VyVmFsdWUsIDEpOwogICAgICAgICArK2l0OwogICAgICAgICBF
WFBFQ1RfRkFMU0UoaXQgPT0gYXJyYXlWYWx1ZS0+ZW5kKCkpOwogCi0gICAgICAgIGl0ZW1WYWx1
ZSA9IGl0LT5nZXQoKTsKLSAgICAgICAgRVhQRUNUX1RSVUUoaXRlbVZhbHVlLT50eXBlKCkgPT0g
SlNPTjo6VmFsdWU6OlR5cGU6OkRvdWJsZSk7Ci0gICAgICAgIGRvdWJsZSBkb3VibGVWYWx1ZTsK
LSAgICAgICAgRVhQRUNUX1RSVUUoaXRlbVZhbHVlLT5hc0RvdWJsZShkb3VibGVWYWx1ZSkpOwot
ICAgICAgICBFWFBFQ1RfRVEoZG91YmxlVmFsdWUsIDIuNSk7CisgICAgICAgIEVYUEVDVF9UUlVF
KCgqaXQpLT50eXBlKCkgPT0gSlNPTjo6VmFsdWU6OlR5cGU6OkRvdWJsZSk7CisgICAgICAgIGF1
dG8gZG91YmxlVmFsdWUgPSAoKml0KS0+YXNEb3VibGUoKTsKKyAgICAgICAgRVhQRUNUX1RSVUUo
ZG91YmxlVmFsdWUpOworICAgICAgICBFWFBFQ1RfRVEoKmRvdWJsZVZhbHVlLCAyLjUpOwogICAg
ICAgICArK2l0OwogICAgICAgICBFWFBFQ1RfRkFMU0UoaXQgPT0gYXJyYXlWYWx1ZS0+ZW5kKCkp
OwogCi0gICAgICAgIGl0ZW1WYWx1ZSA9IGl0LT5nZXQoKTsKLSAgICAgICAgRVhQRUNUX1RSVUUo
aXRlbVZhbHVlLT50eXBlKCkgPT0gSlNPTjo6VmFsdWU6OlR5cGU6OkFycmF5KTsKLSAgICAgICAg
UmVmUHRyPEpTT046OkFycmF5PiBzdWJBcnJheVZhbHVlOwotICAgICAgICBFWFBFQ1RfVFJVRShp
dGVtVmFsdWUtPmFzQXJyYXkoc3ViQXJyYXlWYWx1ZSkpOworICAgICAgICBFWFBFQ1RfVFJVRSgo
Kml0KS0+dHlwZSgpID09IEpTT046OlZhbHVlOjpUeXBlOjpBcnJheSk7CisgICAgICAgIGF1dG8g
c3ViQXJyYXlWYWx1ZSA9ICgqaXQpLT5hc0FycmF5KCk7CisgICAgICAgIEVYUEVDVF9UUlVFKHN1
YkFycmF5VmFsdWUpOwogICAgICAgICBFWFBFQ1RfRVEoc3ViQXJyYXlWYWx1ZS0+bGVuZ3RoKCks
IDJVKTsKLSAgICAgICAgUmVmUHRyPEpTT046OlZhbHVlPiBvYmplY3RWYWx1ZSA9IHN1YkFycmF5
VmFsdWUtPmdldCgwKTsKKyAgICAgICAgYXV0byBvYmplY3RWYWx1ZSA9IHN1YkFycmF5VmFsdWUt
PmdldCgwKTsKICAgICAgICAgRVhQRUNUX1RSVUUob2JqZWN0VmFsdWUtPnR5cGUoKSA9PSBKU09O
OjpWYWx1ZTo6VHlwZTo6T2JqZWN0KTsKLSAgICAgICAgUmVmUHRyPEpTT046Ok9iamVjdD4gb2Jq
ZWN0OwotICAgICAgICBFWFBFQ1RfVFJVRShvYmplY3RWYWx1ZS0+YXNPYmplY3Qob2JqZWN0KSk7
Ci0gICAgICAgIEVYUEVDVF9FUShvYmplY3QtPnNpemUoKSwgMSk7Ci0gICAgICAgIFN0cmluZyBz
dHJpbmdWYWx1ZTsKLSAgICAgICAgRVhQRUNUX1RSVUUob2JqZWN0LT5nZXRTdHJpbmcoImZvbyIs
IHN0cmluZ1ZhbHVlKSk7CisgICAgICAgIGF1dG8gb2JqZWN0ID0gb2JqZWN0VmFsdWUtPmFzT2Jq
ZWN0KCk7CisgICAgICAgIEVYUEVDVF9UUlVFKG9iamVjdCk7CisgICAgICAgIEVYUEVDVF9FUShv
YmplY3QtPnNpemUoKSwgMVUpOworICAgICAgICBhdXRvIHN0cmluZ1ZhbHVlID0gb2JqZWN0LT5n
ZXRTdHJpbmcoImZvbyIpOworICAgICAgICBFWFBFQ1RfVFJVRSghIXN0cmluZ1ZhbHVlKTsKICAg
ICAgICAgRVhQRUNUX0VRKHN0cmluZ1ZhbHVlLCAiYmFyIik7CiAgICAgICAgIG9iamVjdFZhbHVl
ID0gc3ViQXJyYXlWYWx1ZS0+Z2V0KDEpOwogICAgICAgICBFWFBFQ1RfVFJVRShvYmplY3RWYWx1
ZS0+dHlwZSgpID09IEpTT046OlZhbHVlOjpUeXBlOjpPYmplY3QpOwotICAgICAgICBFWFBFQ1Rf
VFJVRShvYmplY3RWYWx1ZS0+YXNPYmplY3Qob2JqZWN0KSk7Ci0gICAgICAgIEVYUEVDVF9FUShv
YmplY3QtPnNpemUoKSwgMSk7Ci0gICAgICAgIGJvb2wgYm9vbGVhblZhbHVlOwotICAgICAgICBF
WFBFQ1RfVFJVRShvYmplY3QtPmdldEJvb2xlYW4oImJheiIsIGJvb2xlYW5WYWx1ZSkpOwotICAg
ICAgICBFWFBFQ1RfRVEoYm9vbGVhblZhbHVlLCBmYWxzZSk7CisgICAgICAgIG9iamVjdCA9b2Jq
ZWN0VmFsdWUtPmFzT2JqZWN0KCk7CisgICAgICAgIEVYUEVDVF9UUlVFKG9iamVjdCk7CisgICAg
ICAgIEVYUEVDVF9FUShvYmplY3QtPnNpemUoKSwgMVUpOworICAgICAgICBhdXRvIGJvb2xlYW5W
YWx1ZSA9IG9iamVjdC0+Z2V0Qm9vbGVhbigiYmF6Iik7CisgICAgICAgIEVYUEVDVF9UUlVFKGJv
b2xlYW5WYWx1ZSk7CisgICAgICAgIEVYUEVDVF9FUSgqYm9vbGVhblZhbHVlLCBmYWxzZSk7CiAg
ICAgICAgICsraXQ7CiAgICAgICAgIEVYUEVDVF9GQUxTRShpdCA9PSBhcnJheVZhbHVlLT5lbmQo
KSk7CiAKLSAgICAgICAgaXRlbVZhbHVlID0gaXQtPmdldCgpOwotICAgICAgICBFWFBFQ1RfVFJV
RShpdGVtVmFsdWUtPnR5cGUoKSA9PSBKU09OOjpWYWx1ZTo6VHlwZTo6U3RyaW5nKTsKLSAgICAg
ICAgRVhQRUNUX1RSVUUoaXRlbVZhbHVlLT5hc1N0cmluZyhzdHJpbmdWYWx1ZSkpOworICAgICAg
ICBFWFBFQ1RfVFJVRSgoKml0KS0+dHlwZSgpID09IEpTT046OlZhbHVlOjpUeXBlOjpTdHJpbmcp
OworICAgICAgICBzdHJpbmdWYWx1ZSA9ICgqaXQpLT5hc1N0cmluZygpOworICAgICAgICBFWFBF
Q1RfVFJVRSghIXN0cmluZ1ZhbHVlKTsKICAgICAgICAgRVhQRUNUX0VRKHN0cmluZ1ZhbHVlLCAi
d2Via2l0Iik7CiAgICAgICAgICsraXQ7CiAgICAgICAgIEVYUEVDVF9UUlVFKGl0ID09IGFycmF5
VmFsdWUtPmVuZCgpKTsKICAgICB9CiAKICAgICB7Ci0gICAgICAgIFJlZlB0cjxKU09OOjpWYWx1
ZT4gdmFsdWU7Ci0gICAgICAgIEVYUEVDVF9UUlVFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oInt9
IiwgdmFsdWUpKTsKKyAgICAgICAgYXV0byB2YWx1ZSA9IEpTT046OlZhbHVlOjpwYXJzZUpTT04o
Int9Iik7CisgICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlKTsKICAgICAgICAgRVhQRUNUX1RSVUUo
dmFsdWUtPnR5cGUoKSA9PSBKU09OOjpWYWx1ZTo6VHlwZTo6T2JqZWN0KTsKLSAgICAgICAgUmVm
UHRyPEpTT046Ok9iamVjdD4gb2JqZWN0VmFsdWU7Ci0gICAgICAgIEVYUEVDVF9UUlVFKHZhbHVl
LT5hc09iamVjdChvYmplY3RWYWx1ZSkpOwotICAgICAgICBFWFBFQ1RfRVEob2JqZWN0VmFsdWUt
PnNpemUoKSwgMCk7CisgICAgICAgIGF1dG8gb2JqZWN0VmFsdWUgPSB2YWx1ZS0+YXNPYmplY3Qo
KTsKKyAgICAgICAgRVhQRUNUX1RSVUUob2JqZWN0VmFsdWUpOworICAgICAgICBFWFBFQ1RfRVEo
b2JqZWN0VmFsdWUtPnNpemUoKSwgMFUpOwogCi0gICAgICAgIEVYUEVDVF9UUlVFKEpTT046OlZh
bHVlOjpwYXJzZUpTT04oIntcImZvb1wiOiBcImJhclwiLCBcImJhelwiOiB7XCJzdWJcIjpbbnVs
bCxmYWxzZV19fSIsIHZhbHVlKSk7CisgICAgICAgIHZhbHVlID0gSlNPTjo6VmFsdWU6OnBhcnNl
SlNPTigie1wiZm9vXCI6IFwiYmFyXCIsIFwiYmF6XCI6IHtcInN1YlwiOltudWxsLGZhbHNlXX19
Iik7CisgICAgICAgIEVYUEVDVF9UUlVFKHZhbHVlKTsKICAgICAgICAgRVhQRUNUX1RSVUUodmFs
dWUtPnR5cGUoKSA9PSBKU09OOjpWYWx1ZTo6VHlwZTo6T2JqZWN0KTsKLSAgICAgICAgRVhQRUNU
X1RSVUUodmFsdWUtPmFzT2JqZWN0KG9iamVjdFZhbHVlKSk7Ci0gICAgICAgIEVYUEVDVF9FUShv
YmplY3RWYWx1ZS0+c2l6ZSgpLCAyKTsKKyAgICAgICAgb2JqZWN0VmFsdWUgPSB2YWx1ZS0+YXNP
YmplY3QoKTsKKyAgICAgICAgRVhQRUNUX1RSVUUob2JqZWN0VmFsdWUpOworICAgICAgICBFWFBF
Q1RfRVEob2JqZWN0VmFsdWUtPnNpemUoKSwgMlUpOwogCi0gICAgICAgIFN0cmluZyBzdHJpbmdW
YWx1ZTsKLSAgICAgICAgRVhQRUNUX1RSVUUob2JqZWN0VmFsdWUtPmdldFN0cmluZygiZm9vIiwg
c3RyaW5nVmFsdWUpKTsKKyAgICAgICAgYXV0byBzdHJpbmdWYWx1ZSA9IG9iamVjdFZhbHVlLT5n
ZXRTdHJpbmcoImZvbyIpOworICAgICAgICBFWFBFQ1RfVFJVRSghIXN0cmluZ1ZhbHVlKTsKICAg
ICAgICAgRVhQRUNUX0VRKHN0cmluZ1ZhbHVlLCAiYmFyIik7CiAKLSAgICAgICAgUmVmUHRyPEpT
T046Ok9iamVjdD4gb2JqZWN0OwotICAgICAgICBFWFBFQ1RfVFJVRShvYmplY3RWYWx1ZS0+Z2V0
T2JqZWN0KCJiYXoiLCBvYmplY3QpKTsKLSAgICAgICAgRVhQRUNUX0VRKG9iamVjdC0+c2l6ZSgp
LCAxKTsKLSAgICAgICAgUmVmUHRyPEpTT046OkFycmF5PiBhcnJheTsKLSAgICAgICAgRVhQRUNU
X1RSVUUob2JqZWN0LT5nZXRBcnJheSgic3ViIiwgYXJyYXkpKTsKKyAgICAgICAgYXV0byBvYmpl
Y3QgPSBvYmplY3RWYWx1ZS0+Z2V0T2JqZWN0KCJiYXoiKTsKKyAgICAgICAgRVhQRUNUX1RSVUUo
b2JqZWN0KTsKKyAgICAgICAgRVhQRUNUX0VRKG9iamVjdC0+c2l6ZSgpLCAxVSk7CisgICAgICAg
IGF1dG8gYXJyYXkgPSBvYmplY3QtPmdldEFycmF5KCJzdWIiKTsKKyAgICAgICAgRVhQRUNUX1RS
VUUoYXJyYXkpOwogICAgICAgICBFWFBFQ1RfRVEoYXJyYXktPmxlbmd0aCgpLCAyVSk7CiAgICAg
fQogCiAgICAgewotICAgICAgICBSZWZQdHI8SlNPTjo6VmFsdWU+IHZhbHVlOwotICAgICAgICBF
WFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiLCIsIHZhbHVlKSk7Ci0gICAgICAg
IEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJcImZvbyIsIHZhbHVlKSk7Ci0g
ICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJmb29cIiIsIHZhbHVl
KSk7Ci0gICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJUclVlIiwg
dmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIkZh
bHNlIiwgdmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpT
T04oIjEuZCIsIHZhbHVlKSk7Ci0gICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFy
c2VKU09OKCJbMSxdIiwgdmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVl
OjpwYXJzZUpTT04oIjEsMl0iLCB2YWx1ZSkpOwotICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6
VmFsdWU6OnBhcnNlSlNPTigiWzEsMiIsIHZhbHVlKSk7Ci0gICAgICAgIEVYUEVDVF9GQUxTRShK
U09OOjpWYWx1ZTo6cGFyc2VKU09OKCJbMSAyXSIsIHZhbHVlKSk7Ci0gICAgICAgIEVYUEVDVF9G
QUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJbMSwyXV0iLCB2YWx1ZSkpOwotICAgICAgICBF
WFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiWzEsMl0sIiwgdmFsdWUpKTsKLSAg
ICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIntmb286XCJiYXJcIn0i
LCB2YWx1ZSkpOwotICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigi
e1wiZm9vXCI6YmFyfSIsIHZhbHVlKSk7Ci0gICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1
ZTo6cGFyc2VKU09OKCJ7XCJmb286XCJiYXJcIn0iLCB2YWx1ZSkpOwotICAgICAgICBFWFBFQ1Rf
RkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigie2Zvb1wiOlwiYmFyXCJ9IiwgdmFsdWUpKTsK
LSAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oInt7XCJmb29cIjpc
ImJhclwifX0iLCB2YWx1ZSkpOwotICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBh
cnNlSlNPTigie1wiZm9vXCI6XCJiYXJcIn0sIiwgdmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX0ZB
TFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIlt7XCJmb29cIjpcImJhclwifSx7XCJiYXpcIjpm
YWxzZX0sXSIsIHZhbHVlKSk7Ci0gICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFy
c2VKU09OKCJbe1wiZm9vXCI6e1wiYmF6XCI6ZmFsc2V9XSIsIHZhbHVlKSk7CisgICAgICAgIEVY
UEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCIsIikpOworICAgICAgICBFWFBFQ1Rf
RkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiXCJmb28iKSk7CisgICAgICAgIEVYUEVDVF9G
QUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJmb29cIiIpKTsKKyAgICAgICAgRVhQRUNUX0ZB
TFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIlRyVWUiKSk7CisgICAgICAgIEVYUEVDVF9GQUxT
RShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJGYWxzZSIpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNF
KEpTT046OlZhbHVlOjpwYXJzZUpTT04oIjEuZCIpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKEpT
T046OlZhbHVlOjpwYXJzZUpTT04oIlsxLF0iKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShKU09O
OjpWYWx1ZTo6cGFyc2VKU09OKCIxLDJdIikpOworICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6
VmFsdWU6OnBhcnNlSlNPTigiWzEsMiIpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZh
bHVlOjpwYXJzZUpTT04oIlsxIDJdIikpOworICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFs
dWU6OnBhcnNlSlNPTigiWzEsMl1dIikpOworICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFs
dWU6OnBhcnNlSlNPTigiWzEsMl0sIikpOworICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFs
dWU6OnBhcnNlSlNPTigie2ZvbzpcImJhclwifSIpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKEpT
T046OlZhbHVlOjpwYXJzZUpTT04oIntcImZvb1wiOmJhcn0iKSk7CisgICAgICAgIEVYUEVDVF9G
QUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJ7XCJmb286XCJiYXJcIn0iKSk7CisgICAgICAg
IEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJ7Zm9vXCI6XCJiYXJcIn0iKSk7
CisgICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJ7e1wiZm9vXCI6
XCJiYXJcIn19IikpOworICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNP
Tigie1wiZm9vXCI6XCJiYXJcIn0sIikpOworICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFs
dWU6OnBhcnNlSlNPTigiW3tcImZvb1wiOlwiYmFyXCJ9LHtcImJhelwiOmZhbHNlfSxdIikpOwor
ICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiW3tcImZvb1wiOntc
ImJhelwiOmZhbHNlfV0iKSk7CiAgICAgfQogCiAgICAgewotICAgICAgICBSZWZQdHI8SlNPTjo6
VmFsdWU+IHZhbHVlOwotICAgICAgICBFWFBFQ1RfVFJVRShKU09OOjpWYWx1ZTo6cGFyc2VKU09O
KCIgXCJmb29cIiBcbiIsIHZhbHVlKSk7Ci0gICAgICAgIFN0cmluZyBzdHJpbmdWYWx1ZTsKLSAg
ICAgICAgRVhQRUNUX1RSVUUodmFsdWUtPmFzU3RyaW5nKHN0cmluZ1ZhbHVlKSk7CisgICAgICAg
IGF1dG8gdmFsdWUgPSBKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCIgXCJmb29cIiBcbiIpOworICAg
ICAgICBFWFBFQ1RfVFJVRSh2YWx1ZSk7CisgICAgICAgIGF1dG8gc3RyaW5nVmFsdWUgPSB2YWx1
ZS0+YXNTdHJpbmcoKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoISFzdHJpbmdWYWx1ZSk7CiAgICAg
ICAgIEVYUEVDVF9FUSgiZm9vIiwgc3RyaW5nVmFsdWUpOwogICAgIH0KIAogICAgIHsKLSAgICAg
ICAgUmVmUHRyPEpTT046OlZhbHVlPiB2YWx1ZTsKLSAgICAgICAgRVhQRUNUX1RSVUUoSlNPTjo6
VmFsdWU6OnBhcnNlSlNPTigiIDEiLCB2YWx1ZSkpOwotICAgICAgICBFWFBFQ1RfVFJVRShKU09O
OjpWYWx1ZTo6cGFyc2VKU09OKCJcdDEiLCB2YWx1ZSkpOwotICAgICAgICBFWFBFQ1RfVFJVRShK
U09OOjpWYWx1ZTo6cGFyc2VKU09OKCJcbjEiLCB2YWx1ZSkpOwotICAgICAgICBFWFBFQ1RfVFJV
RShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCIxICIsIHZhbHVlKSk7Ci0gICAgICAgIEVYUEVDVF9U
UlVFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIjFcdCIsIHZhbHVlKSk7Ci0gICAgICAgIEVYUEVD
VF9UUlVFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIjFcbiIsIHZhbHVlKSk7Ci0gICAgICAgIEVY
UEVDVF9UUlVFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIiAxICIsIHZhbHVlKSk7Ci0gICAgICAg
IEVYUEVDVF9UUlVFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIiB7fSAiLCB2YWx1ZSkpOwotICAg
ICAgICBFWFBFQ1RfVFJVRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCIgW10gIiwgdmFsdWUpKTsK
LSAgICAgICAgRVhQRUNUX1RSVUUoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiXCJcXHhGRlwiIiwg
dmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX1RSVUUoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiXCJc
XHUxMjM0XCIiLCB2YWx1ZSkpOworICAgICAgICBFWFBFQ1RfVFJVRShKU09OOjpWYWx1ZTo6cGFy
c2VKU09OKCIgMSIpKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoSlNPTjo6VmFsdWU6OnBhcnNlSlNP
TigiXHQxIikpOworICAgICAgICBFWFBFQ1RfVFJVRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJc
bjEiKSk7CisgICAgICAgIEVYUEVDVF9UUlVFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIjEgIikp
OworICAgICAgICBFWFBFQ1RfVFJVRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCIxXHQiKSk7Cisg
ICAgICAgIEVYUEVDVF9UUlVFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIjFcbiIpKTsKKyAgICAg
ICAgRVhQRUNUX1RSVUUoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiIDEgIikpOworICAgICAgICBF
WFBFQ1RfVFJVRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCIge30gIikpOworICAgICAgICBFWFBF
Q1RfVFJVRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCIgW10gIikpOworICAgICAgICBFWFBFQ1Rf
VFJVRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJcIlxceEZGXCIiKSk7CisgICAgICAgIEVYUEVD
VF9UUlVFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIlwiXFx1MTIzNFwiIikpOwogCi0gICAgICAg
IEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCIxIDEiLCB2YWx1ZSkpOwotICAg
ICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigie30ge30iLCB2YWx1ZSkp
OwotICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiW10gW10iLCB2
YWx1ZSkpOwotICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiXCJc
XCIsIHZhbHVlKSk7Ci0gICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09O
KCJcIlxceEYiLCB2YWx1ZSkpOwotICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBh
cnNlSlNPTigiXCJcXHhGXCIiLCB2YWx1ZSkpOwotICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6
VmFsdWU6OnBhcnNlSlNPTigiXCJcXHhGIFwiIiwgdmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX0ZB
TFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIlwiXFx1MSIsIHZhbHVlKSk7Ci0gICAgICAgIEVY
UEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJcIlxcdTFcIiIsIHZhbHVlKSk7Ci0g
ICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJcIlxcdTEgICBcIiIs
IHZhbHVlKSk7Ci0gICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJc
IlxcdTEyIiwgdmFsdWUpKTsKLSAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJz
ZUpTT04oIlwiXFx1MTJcIiIsIHZhbHVlKSk7Ci0gICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpW
YWx1ZTo6cGFyc2VKU09OKCJcIlxcdTEyICBcIiIsIHZhbHVlKSk7Ci0gICAgICAgIEVYUEVDVF9G
QUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJcIlxcdTEyMyIsIHZhbHVlKSk7Ci0gICAgICAg
IEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJcIlxcdTEyM1wiIiwgdmFsdWUp
KTsKLSAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04oIlwiXFx1MTIz
IFwiIiwgdmFsdWUpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpT
T04oIjEgMSIpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpTT04o
Int9IHt9IikpOworICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigi
W10gW10iKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJc
IlxcIikpOworICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiXCJc
XHhGIikpOworICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiXCJc
XHhGXCIiKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09OKCJc
IlxceEYgXCIiKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09O
KCJcIlxcdTEiKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShKU09OOjpWYWx1ZTo6cGFyc2VKU09O
KCJcIlxcdTFcIiIpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpwYXJzZUpT
T04oIlwiXFx1MSAgIFwiIikpOworICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6VmFsdWU6OnBh
cnNlSlNPTigiXCJcXHUxMiIpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVlOjpw
YXJzZUpTT04oIlwiXFx1MTJcIiIpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKEpTT046OlZhbHVl
OjpwYXJzZUpTT04oIlwiXFx1MTIgIFwiIikpOworICAgICAgICBFWFBFQ1RfRkFMU0UoSlNPTjo6
VmFsdWU6OnBhcnNlSlNPTigiXCJcXHUxMjMiKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShKU09O
OjpWYWx1ZTo6cGFyc2VKU09OKCJcIlxcdTEyM1wiIikpOworICAgICAgICBFWFBFQ1RfRkFMU0Uo
SlNPTjo6VmFsdWU6OnBhcnNlSlNPTigiXCJcXHUxMjMgXCIiKSk7CiAgICAgfQogfQogCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5k
ZXggMjFlZWNhNTcyN2NkMzFjMWVhOTgyNTE3MGM0NmEyODU3MjYyMDE4Yi4uYWQyYzFiMmM5ODI1
YTdhMjU1MzA3NzQ2OWVlZTQ3YmNmOWNmODQxNyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDIw
LTA5LTA5ICBEZXZpbiBSb3Vzc28gIDxkcm91c3NvQGFwcGxlLmNvbT4KKworICAgICAgICBXZWIg
SW5zcGVjdG9yOiBtb2Rlcm5pemUgZ2VuZXJhdGVkIGJhY2tlbmQgcHJvdG9jb2wgY29kZQorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE2MzAyCisgICAg
ICAgIDxyZGFyOi8vcHJvYmxlbS82ODU0NzY0OT4KKworICAgICAgICBSZXZpZXdlZCBieSBCcmlh
biBCdXJnLgorCisgICAgICAgICogaW5zcGVjdG9yL2NhbnZhcy9yZXF1ZXN0U2hhZGVyU291cmNl
LWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBpbnNwZWN0b3IvY2FudmFzL3VwZGF0ZVNoYWRlci1l
eHBlY3RlZC50eHQ6CisgICAgICAgICogaW5zcGVjdG9yL2NvbnNvbGUvd2ViY29yZS1sb2dnaW5n
LWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBpbnNwZWN0b3IvZG9tL2hpZ2hsaWdodFF1YWQtZXhw
ZWN0ZWQudHh0OgorICAgICAgICAqIGluc3BlY3Rvci93b3JrZXIvZG9tLWRlYnVnZ2VyLWRvbS1i
cmVha3BvaW50cy1leHBlY3RlZC50eHQ6CisKIDIwMjAtMDktMDkgIEFudG9pbmUgUXVpbnQgIDxn
cmFvdXRzQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUkVHUkVTU0lPTiAocjI2NDg1Nik6IHVwZGF0
aW5nIGVhc2luZyBvbiBhY2NlbGVyYXRlZCBhbmltYXRpb24gcmVzdWx0cyBpbiBpbmNvcnJlY3Qg
cGxheWJhY2sKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9jYW52YXMvcmVxdWVz
dFNoYWRlclNvdXJjZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvY2FudmFz
L3JlcXVlc3RTaGFkZXJTb3VyY2UtZXhwZWN0ZWQudHh0CmluZGV4IGY5MmY0OTVkMzhjZTY4NTNh
M2E1MzU0YWE1ODEzZTBiYzRjZTE1NWUuLjJjNWRjZTgzMjA0MTI1ZDBhZTBkMGJmYTBjMjMzOThl
NjUzZDRkMzEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9jYW52YXMvcmVxdWVz
dFNoYWRlclNvdXJjZS1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2Nh
bnZhcy9yZXF1ZXN0U2hhZGVyU291cmNlLWV4cGVjdGVkLnR4dApAQCAtNCw1ICs0LDUgQEAgQ29t
bW9uIHRlc3RzIGZvciBDYW52YXMucmVxdWVzdFNoYWRlclNvdXJjZSBjb21tYW5kLgogPT0gUnVu
bmluZyB0ZXN0IHN1aXRlOiBDYW52YXMucmVxdWVzdFNoYWRlclNvdXJjZQogLS0gUnVubmluZyB0
ZXN0IGNhc2U6IENhbnZhcy5yZXF1ZXN0U2hhZGVyU291cmNlLlByb2dyYW1JZC5JbnZhbGlkCiBQ
QVNTOiBTaG91bGQgcHJvZHVjZSBhbiBlcnJvci4KLUVycm9yOiBNaXNzaW5nIHByb2dyYW0gZm9y
IGdpdmVuIHByb2dyYW1JZAorRXJyb3I6IFVua25vd24gc2hhZGVyVHlwZTogSU5WQUxJRF9TSEFE
RVJfVFlQRQogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvY2FudmFzL3VwZGF0
ZVNoYWRlci1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvY2FudmFzL3VwZGF0
ZVNoYWRlci1leHBlY3RlZC50eHQKaW5kZXggY2UzN2U4ZTZhOWM4MDBlZmM4ZjdmMDZlY2M0NTJj
YTQzMWNiMTAxNy4uMzRmMWJkMmY5MjEyNjlkNzBmNjJiYjdmYWZiOGQwMjY0MzQyYTgwYiAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2NhbnZhcy91cGRhdGVTaGFkZXItZXhwZWN0
ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9jYW52YXMvdXBkYXRlU2hhZGVyLWV4
cGVjdGVkLnR4dApAQCAtNCw1ICs0LDUgQEAgQ29tbW9uIHRlc3RzIGZvciBDYW52YXMudXBkYXRl
U2hhZGVyIGNvbW1hbmQuCiA9PSBSdW5uaW5nIHRlc3Qgc3VpdGU6IENhbnZhcy51cGRhdGVTaGFk
ZXIKIC0tIFJ1bm5pbmcgdGVzdCBjYXNlOiBDYW52YXMudXBkYXRlU2hhZGVyLlByb2dyYW1JZC5J
bnZhbGlkCiBQQVNTOiBTaG91bGQgcHJvZHVjZSBhbiBlcnJvci4KLUVycm9yOiBNaXNzaW5nIHBy
b2dyYW0gZm9yIGdpdmVuIHByb2dyYW1JZAorRXJyb3I6IFVua25vd24gc2hhZGVyVHlwZTogSU5W
QUxJRF9TSEFERVJfVFlQRQogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvY29u
c29sZS93ZWJjb3JlLWxvZ2dpbmctZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9y
L2NvbnNvbGUvd2ViY29yZS1sb2dnaW5nLWV4cGVjdGVkLnR4dAppbmRleCA1YjUyZTJhNzJjYTgx
YzcwMmNiYmY1ZmU1OWMzYzZiMGZhMjc1N2EzLi41Mjg0YzkyMDZiZmU4OTNhMjQwMDBlN2Q3MWJj
ODBjNWE1MzhkYTQwIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvY29uc29sZS93
ZWJjb3JlLWxvZ2dpbmctZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9j
b25zb2xlL3dlYmNvcmUtbG9nZ2luZy1leHBlY3RlZC50eHQKQEAgLTE1LDkgKzE1LDEzIEBAIFBB
U1M6IExvZyBjaGFubmVsIGhhcyBrbm93biBzb3VyY2UuCiBQQVNTOiBMb2cgY2hhbm5lbCBkaXNh
YmxlZCBieSBkZWZhdWx0LgogUEFTUzogTG9nIGNoYW5uZWwgaGFzIGtub3duIHNvdXJjZS4KIFBB
U1M6IExvZyBjaGFubmVsIGRpc2FibGVkIGJ5IGRlZmF1bHQuCitQQVNTOiBMb2cgY2hhbm5lbCBo
YXMga25vd24gc291cmNlLgorUEFTUzogTG9nIGNoYW5uZWwgZGlzYWJsZWQgYnkgZGVmYXVsdC4K
K1BBU1M6IExvZyBjaGFubmVsIGhhcyBrbm93biBzb3VyY2UuCitQQVNTOiBMb2cgY2hhbm5lbCBk
aXNhYmxlZCBieSBkZWZhdWx0LgogCiAtLSBSdW5uaW5nIHRlc3QgY2FzZTogQ29uc29sZS5Mb2dn
aW5nLkludmFsaWRMZXZlbAotUEFTUzogVW5rbm93biBjaGFubmVsTGV2ZWw6IERPRVNfTk9UX0VY
SVNUCitQQVNTOiBVbmtub3duIGxldmVsOiBET0VTX05PVF9FWElTVAogCiAtLSBSdW5uaW5nIHRl
c3QgY2FzZTogQ29uc29sZS5Mb2dnaW5nLk5vTG9nZ2luZwogUEFTUzogTWVkaWEgbG9nZ2luZyBk
aXNhYmxlZC4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9kb20vaGlnaGxpZ2h0
UXVhZC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZG9tL2hpZ2hsaWdodFF1
YWQtZXhwZWN0ZWQudHh0CmluZGV4IGU3ODExN2EzYTUwZmFjOTc1OWI0ZjM0ZTFlODI1Y2UwN2Vk
MTFhODUuLmExZjNiMmZlNzY1ODI3YmZiMTRhYTJiYjA2ZDBhZDg2NDY3NDY2NTUgMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9kb20vaGlnaGxpZ2h0UXVhZC1leHBlY3RlZC50eHQK
KysrIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2RvbS9oaWdobGlnaHRRdWFkLWV4cGVjdGVkLnR4
dApAQCAtMzEsNSArMzEsNSBAQCBIaWdobGlnaHQgUmVjdDogeyJ4IjotMTAsInkiOi0xMCwid2lk
dGgiOjEwMDAsImhlaWdodCI6MjAwMCwidG9wIjotMTAsInJpZ2h0Ijo5OQogCiAtLSBSdW5uaW5n
IHRlc3QgY2FzZTogQmFkUXVhZFNob3VsZEVycm9yCiBQQVNTOiBTaG91bGQgcHJvZHVjZSBhbiBl
cnJvci4KLUVycm9yOiBVbmV4cGVjdGVkIGludmFsaWQgcXVhZEFycmF5CitFcnJvcjogVW5leHBl
Y3RlZCBpbnZhbGlkIHF1YWQKIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3dv
cmtlci9kb20tZGVidWdnZXItZG9tLWJyZWFrcG9pbnRzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRl
c3RzL2luc3BlY3Rvci93b3JrZXIvZG9tLWRlYnVnZ2VyLWRvbS1icmVha3BvaW50cy1leHBlY3Rl
ZC50eHQKaW5kZXggZmE4ZTc2MmFhMzJjZTVhZTFjZmU4NTFmOTc0OGIzNTM5ZjUxZTI0Zi4uM2Rm
MjI4ODZlMzEyYmVmNTY5YjEzOTRjNGE0NGM4MzNlYzNiNTY0MyAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvaW5zcGVjdG9yL3dvcmtlci9kb20tZGVidWdnZXItZG9tLWJyZWFrcG9pbnRzLWV4cGVj
dGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3Ivd29ya2VyL2RvbS1kZWJ1Z2dlci1k
b20tYnJlYWtwb2ludHMtZXhwZWN0ZWQudHh0CkBAIC00LDkgKzQsOSBAQCBUZXN0cyBmb3IgRE9N
IGJyZWFrcG9pbnQgZnVuY3Rpb25hbGl0eSAoRE9NRGVidWdnZXIpIGluIGEgV29ya2VyLgogPT0g
UnVubmluZyB0ZXN0IHN1aXRlOiBXb3JrZXIuRE9NRGVidWdnZXIuRE9NQnJlYWtwb2ludAogLS0g
UnVubmluZyB0ZXN0IGNhc2U6IFdvcmtlci5ET01EZWJ1Z2dlci5ET01CcmVha3BvaW50LnNldERP
TUJyZWFrcG9pbnQKIFBBU1M6IFNob3VsZCBwcm9kdWNlIGFuIGV4Y2VwdGlvbi4KLUVycm9yOiBO
b3Qgc3VwcG9ydGVkCitFcnJvcjogVW5rbm93biB0eXBlOiBJTlZBTElECiAKIC0tIFJ1bm5pbmcg
dGVzdCBjYXNlOiBXb3JrZXIuRE9NRGVidWdnZXIuRE9NQnJlYWtwb2ludC5yZW1vdmVET01CcmVh
a3BvaW50CiBQQVNTOiBTaG91bGQgcHJvZHVjZSBhbiBleGNlcHRpb24uCi1FcnJvcjogTm90IHN1
cHBvcnRlZAorRXJyb3I6IFVua25vd24gdHlwZTogSU5WQUxJRAogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>